ZGlmZiAtLWdpdCBhLy5tYWlsbWFwIGIvLm1haWxtYXAKaW5kZXggZGZhYjEyZi4uZWJhOWJmOSAxMDA2NDQKLS0tIGEvLm1haWxtYXAKKysrIGIvLm1haWxtYXAKQEAgLTY2LDYgKzY2LDcgQEAKIEtvdXNoaWsgPHJhZ2hhdmVuZHJhLmtvdXNoaWtAbmV0ZXJpb24uY29tPgogTGVvbmlkIEkgQW5hbmlldiA8bGVvbmlkLmkuYW5hbmlldkBpbnRlbC5jb20+CiBMaW5hcyBWZXBzdGFzIDxsaW5hc0BhdXN0aW4uaWJtLmNvbT4KK01hcmsgQnJvd24gPGJyb29uaWVAc2lyZW5hLm9yZy51az4KIE1hdHRoaWV1IENBU1RFVCA8Y2FzdGV0Lm1hdHRoaWV1QGZyZWUuZnI+CiBNaWNoYWVsIEJ1ZXNjaCA8bWJAYnUzc2NoLmRlPgogTWljaGFlbCBCdWVzY2ggPG1idWVzY2hAZnJlZW5ldC5kZT4KZGlmZiAtLWdpdCBhL0NSRURJVFMgYi9DUkVESVRTCmluZGV4IGM2MmRjYjMuLjIzNTg4NDYgMTAwNjQ0Ci0tLSBhL0NSRURJVFMKKysrIGIvQ1JFRElUUwpAQCAtMTY1MywxNCArMTY1MywxNCBAQAogUzogVVNBCiAKIE46IERhdmUgSm9uZXMKLUU6IGRhdmVqQGNvZGVtb25rZXkub3JnLnVrCitFOiBkYXZlakByZWRoYXQuY29tCiBXOiBodHRwOi8vd3d3LmNvZGVtb25rZXkub3JnLnVrCi1EOiB4ODYgZXJyYXRhL3NldHVwIG1haW50ZW5hbmNlLgotRDogQUdQR0FSVCBkcml2ZXIuCitEOiBBc3NvcnRlZCBWSUEgeDg2IHN1cHBvcnQuCitEOiAyLjUgQUdQR0FSVCBvdmVyaGF1bC4KIEQ6IENQVUZSRVEgbWFpbnRlbmFuY2UuCi1EOiBCYWNrcG9ydC9Gb3J3YXJkcG9ydCBtZXJnZSBtb25rZXkuCi1EOiBWYXJpb3VzIEphbml0b3Igd29yay4KLVM6IFVuaXRlZCBLaW5nZG9tCitEOiBGZWRvcmEga2VybmVsIG1haW50YWluZW5jZS4KK0Q6IE1pc2MvT3RoZXIuCitTOiAzMTQgTGl0dGxldG9uIFJkLCBXZXN0Zm9yZCwgTUEgMDE4ODYsIFVTQQogCiBOOiBNYXJ0aW4gSm9zZnNzb24KIEU6IGdhbmRhbGZAd2x1Zy53ZXN0Ym8uc2UKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vMDAtSU5ERVggYi9Eb2N1bWVudGF0aW9uLzAwLUlOREVYCmluZGV4IDczMDYwODEuLjcyODZhZDAgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vMDAtSU5ERVgKKysrIGIvRG9jdW1lbnRhdGlvbi8wMC1JTkRFWApAQCAtMjEsNiArMjEsOSBAQAogCS0gbGlzdCBvZiBjaGFuZ2VzIHRoYXQgYnJlYWsgb2xkZXIgc29mdHdhcmUgcGFja2FnZXMuCiBDb2RpbmdTdHlsZQogCS0gaG93IHRoZSBib3NzIGxpa2VzIHRoZSBDIGNvZGUgaW4gdGhlIGtlcm5lbCB0byBsb29rLgorZGV2ZWxvcG1lbnQtcHJvY2Vzcy8KKwktIEFuIGV4dGVuZGVkIHR1dG9yaWFsIG9uIGhvdyB0byB3b3JrIHdpdGggdGhlIGtlcm5lbCBkZXZlbG9wbWVudAorCSAgcHJvY2Vzcy4KIERNQS1BUEkudHh0CiAJLSBETUEgQVBJLCBwY2lfIEFQSSAmIGV4dGVuc2lvbnMgZm9yIG5vbi1jb25zaXN0ZW50IG1lbW9yeSBtYWNoaW5lcy4KIERNQS1JU0EtTFBDLnR4dApAQCAtMTU5LDggKzE2Miw2IEBACiAJLSBpbmZvIG9uIHVzaW5nIHRoZSBIYXllcyBFU1Agc2VyaWFsIGRyaXZlci4KIGhpZ2h1aWQudHh0CiAJLSBub3RlcyBvbiB0aGUgY2hhbmdlIGZyb20gMTYgYml0IHRvIDMyIGJpdCB1c2VyL2dyb3VwIElEcy4KLWhwZXQudHh0Ci0JLSBIaWdoIFByZWNpc2lvbiBFdmVudCBUaW1lciBEcml2ZXIgZm9yIExpbnV4LgogdGltZXJzLwogCS0gaW5mbyBvbiB0aGUgdGltZXIgcmVsYXRlZCB0b3BpY3MKIGh3X3JhbmRvbS50eHQKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vQUJJL3N0YWJsZS9zeXNmcy1kcml2ZXItdXNiLXVzYnRtYyBiL0RvY3VtZW50YXRpb24vQUJJL3N0YWJsZS9zeXNmcy1kcml2ZXItdXNiLXVzYnRtYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YTc1ZmIyCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9BQkkvc3RhYmxlL3N5c2ZzLWRyaXZlci11c2ItdXNidG1jCkBAIC0wLDAgKzEsNjIgQEAKK1doYXQ6CQkvc3lzL2J1cy91c2IvZHJpdmVycy91c2J0bWMvZGV2aWNlcy8qL2ludGVyZmFjZV9jYXBhYmlsaXRpZXMKK1doYXQ6CQkvc3lzL2J1cy91c2IvZHJpdmVycy91c2J0bWMvZGV2aWNlcy8qL2RldmljZV9jYXBhYmlsaXRpZXMKK0RhdGU6CQlBdWd1c3QgMjAwOAorQ29udGFjdDoJR3JlZyBLcm9haC1IYXJ0bWFuIDxncmVna2hAc3VzZS5kZT4KK0Rlc2NyaXB0aW9uOgorCQlUaGVzZSBmaWxlcyBzaG93IHRoZSB2YXJpb3VzIFVTQiBUTUMgY2FwYWJpbGl0aWVzIGFzIGRlc2NyaWJlZAorCQlieSB0aGUgZGV2aWNlIGl0c2VsZi4gIFRoZSBmdWxsIGRlc2NyaXB0aW9uIG9mIHRoZSBiaXRmaWVsZHMKKwkJY2FuIGJlIGZvdW5kIGluIHRoZSBVU0IgVE1DIGRvY3VtZW50cyBmcm9tIHRoZSBVU0ItSUYgZW50aXRsZWQKKwkJIlVuaXZlcnNhbCBTZXJpYWwgQnVzIFRlc3QgYW5kIE1lYXN1cmVtZW50IENsYXNzIFNwZWNpZmljYXRpb24KKwkJKFVTQlRNQykgUmV2aXNpb24gMS4wIiBzZWN0aW9uIDQuMi4xLjguCisKKwkJVGhlIGZpbGVzIGFyZSByZWFkIG9ubHkuCisKKworV2hhdDoJCS9zeXMvYnVzL3VzYi9kcml2ZXJzL3VzYnRtYy9kZXZpY2VzLyovdXNiNDg4X2ludGVyZmFjZV9jYXBhYmlsaXRpZXMKK1doYXQ6CQkvc3lzL2J1cy91c2IvZHJpdmVycy91c2J0bWMvZGV2aWNlcy8qL3VzYjQ4OF9kZXZpY2VfY2FwYWJpbGl0aWVzCitEYXRlOgkJQXVndXN0IDIwMDgKK0NvbnRhY3Q6CUdyZWcgS3JvYWgtSGFydG1hbiA8Z3JlZ2toQHN1c2UuZGU+CitEZXNjcmlwdGlvbjoKKwkJVGhlc2UgZmlsZXMgc2hvdyB0aGUgdmFyaW91cyBVU0IgVE1DIGNhcGFiaWxpdGllcyBhcyBkZXNjcmliZWQKKwkJYnkgdGhlIGRldmljZSBpdHNlbGYuICBUaGUgZnVsbCBkZXNjcmlwdGlvbiBvZiB0aGUgYml0ZmllbGRzCisJCWNhbiBiZSBmb3VuZCBpbiB0aGUgVVNCIFRNQyBkb2N1bWVudHMgZnJvbSB0aGUgVVNCLUlGIGVudGl0bGVkCisJCSJVbml2ZXJzYWwgU2VyaWFsIEJ1cyBUZXN0IGFuZCBNZWFzdXJlbWVudCBDbGFzcywgU3ViY2xhc3MKKwkJVVNCNDg4IFNwZWNpZmljYXRpb24gKFVTQlRNQy1VU0I0ODgpIFJldmlzaW9uIDEuMCIgc2VjdGlvbgorCQk0LjIuMi4KKworCQlUaGUgZmlsZXMgYXJlIHJlYWQgb25seS4KKworCitXaGF0OgkJL3N5cy9idXMvdXNiL2RyaXZlcnMvdXNidG1jL2RldmljZXMvKi9UZXJtQ2hhcgorRGF0ZToJCUF1Z3VzdCAyMDA4CitDb250YWN0OglHcmVnIEtyb2FoLUhhcnRtYW4gPGdyZWdraEBzdXNlLmRlPgorRGVzY3JpcHRpb246CisJCVRoaXMgZmlsZSBpcyB0aGUgVGVybUNoYXIgdmFsdWUgdG8gYmUgc2VudCB0byB0aGUgVVNCIFRNQworCQlkZXZpY2UgYXMgZGVzY3JpYmVkIGJ5IHRoZSBkb2N1bWVudCwgIlVuaXZlcnNhbCBTZXJpYWwgQnVzIFRlc3QKKwkJYW5kIE1lYXN1cmVtZW50IENsYXNzIFNwZWNpZmljYXRpb24KKwkJKFVTQlRNQykgUmV2aXNpb24gMS4wIiBhcyBwdWJsaXNoZWQgYnkgdGhlIFVTQi1JRi4KKworCQlOb3RlIHRoYXQgdGhlIFRlcm1DaGFyRW5hYmxlZCBmaWxlIGRldGVybWluZXMgaWYgdGhpcyB2YWx1ZSBpcworCQlzZW50IHRvIHRoZSBkZXZpY2Ugb3Igbm90LgorCisKK1doYXQ6CQkvc3lzL2J1cy91c2IvZHJpdmVycy91c2J0bWMvZGV2aWNlcy8qL1Rlcm1DaGFyRW5hYmxlZAorRGF0ZToJCUF1Z3VzdCAyMDA4CitDb250YWN0OglHcmVnIEtyb2FoLUhhcnRtYW4gPGdyZWdraEBzdXNlLmRlPgorRGVzY3JpcHRpb246CisJCVRoaXMgZmlsZSBkZXRlcm1pbmVzIGlmIHRoZSBUZXJtQ2hhciBpcyB0byBiZSBzZW50IHRvIHRoZQorCQlkZXZpY2Ugb24gZXZlcnkgdHJhbnNhY3Rpb24gb3Igbm90LiAgRm9yIG1vcmUgZGV0YWlscyBhYm91dAorCQl0aGlzLCBwbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCwgIlVuaXZlcnNhbCBTZXJpYWwgQnVzIFRlc3QgYW5kCisJCU1lYXN1cmVtZW50IENsYXNzIFNwZWNpZmljYXRpb24gKFVTQlRNQykgUmV2aXNpb24gMS4wIiBhcworCQlwdWJsaXNoZWQgYnkgdGhlIFVTQi1JRi4KKworCitXaGF0OgkJL3N5cy9idXMvdXNiL2RyaXZlcnMvdXNidG1jL2RldmljZXMvKi9hdXRvX2Fib3J0CitEYXRlOgkJQXVndXN0IDIwMDgKK0NvbnRhY3Q6CUdyZWcgS3JvYWgtSGFydG1hbiA8Z3JlZ2toQHN1c2UuZGU+CitEZXNjcmlwdGlvbjoKKwkJVGhpcyBmaWxlIGRldGVybWluZXMgaWYgdGhlIHRoZSB0cmFuc2FjdGlvbiBvZiB0aGUgVVNCIFRNQworCQlkZXZpY2UgaXMgdG8gYmUgYXV0b21hdGljYWxseSBhYm9ydGVkIGlmIHRoZXJlIGlzIGFueSBlcnJvci4KKwkJRm9yIG1vcmUgZGV0YWlscyBhYm91dCB0aGlzLCBwbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCwKKwkJIlVuaXZlcnNhbCBTZXJpYWwgQnVzIFRlc3QgYW5kIE1lYXN1cmVtZW50IENsYXNzIFNwZWNpZmljYXRpb24KKwkJKFVTQlRNQykgUmV2aXNpb24gMS4wIiBhcyBwdWJsaXNoZWQgYnkgdGhlIFVTQi1JRi4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtYnVzLXVzYiBiL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtYnVzLXVzYgppbmRleCAxMWEzYzE2Li5kZjZjOGEwIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWJ1cy11c2IKKysrIGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1idXMtdXNiCkBAIC04NSwzICs4NSwxOSBAQAogVXNlcnM6CiAJCVBvd2VyVE9QIDxwb3dlckBidWdob3N0Lm9yZz4KIAkJaHR0cDovL3d3dy5sZXNzd2F0dHMub3JnL3Byb2plY3RzL3Bvd2VydG9wLworCitXaGF0OgkJL3N5cy9idXMvdXNiL2RldmljZS88YnVzbnVtPi08ZGV2bnVtPi4uLjo8Y29uZmlnIG51bT4tPGludGVyZmFjZSBudW0+L3N1cHBvcnRzX2F1dG9zdXNwZW5kCitEYXRlOgkJSmFudWFyeSAyMDA4CitLZXJuZWxWZXJzaW9uOgkyLjYuMjcKK0NvbnRhY3Q6CVNhcmFoIFNoYXJwIDxzYXJhaC5hLnNoYXJwQGludGVsLmNvbT4KK0Rlc2NyaXB0aW9uOgorCQlXaGVuIHJlYWQsIHRoaXMgZmlsZSByZXR1cm5zIDEgaWYgdGhlIGludGVyZmFjZSBkcml2ZXIKKwkJZm9yIHRoaXMgaW50ZXJmYWNlIHN1cHBvcnRzIGF1dG9zdXNwZW5kLiAgSXQgYWxzbworCQlyZXR1cm5zIDEgaWYgbm8gZHJpdmVyIGhhcyBjbGFpbWVkIHRoaXMgaW50ZXJmYWNlLCBhcyBhbgorCQl1bmNsYWltZWQgaW50ZXJmYWNlIHdpbGwgbm90IHN0b3AgdGhlIGRldmljZSBmcm9tIGJlaW5nCisJCWF1dG9zdXNwZW5kZWQgaWYgYWxsIG90aGVyIGludGVyZmFjZSBkcml2ZXJzIGFyZSBpZGxlLgorCQlUaGUgZmlsZSByZXR1cm5zIDAgaWYgYXV0b3N1c3BlbmQgc3VwcG9ydCBoYXMgbm90IGJlZW4KKwkJYWRkZWQgdG8gdGhlIGRyaXZlci4KK1VzZXJzOgorCQlVU0IgUE0gdG9vbAorCQlnaXQ6Ly9naXQubW9ibGluLm9yZy91c2Vycy9zYXJhaC91c2ItcG0tdG9vbC8KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtYnVzLXVzYi1kZXZpY2VzLXVzYnNldnNlZyBiL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtYnVzLXVzYi1kZXZpY2VzLXVzYnNldnNlZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYjgzMGRmCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1idXMtdXNiLWRldmljZXMtdXNic2V2c2VnCkBAIC0wLDAgKzEsNDMgQEAKK1doZXJlOgkJL3N5cy9idXMvdXNiLy4uLi9wb3dlcmVkCitEYXRlOgkJQXVndXN0IDIwMDgKK0tlcm5lbCBWZXJzaW9uOgkyLjYuMjYKK0NvbnRhY3Q6CUhhcnJpc29uIE1ldHpnZXIgPGhhcnJpc29ubWV0ekBnbWFpbC5jb20+CitEZXNjcmlwdGlvbjoJQ29udHJvbHMgd2hldGhlciB0aGUgZGV2aWNlJ3MgZGlzcGxheSB3aWxsIHBvd2VyZWQuCisJCUEgdmFsdWUgb2YgMCBpcyBvZmYgYW5kIGEgbm9uLXplcm8gdmFsdWUgaXMgb24uCisKK1doZXJlOgkJL3N5cy9idXMvdXNiLy4uLi9tb2RlX21zYgorV2hlcmU6CQkvc3lzL2J1cy91c2IvLi4uL21vZGVfbHNiCitEYXRlOgkJQXVndXN0IDIwMDgKK0tlcm5lbCBWZXJzaW9uOgkyLjYuMjYKK0NvbnRhY3Q6CUhhcnJpc29uIE1ldHpnZXIgPGhhcnJpc29ubWV0ekBnbWFpbC5jb20+CitEZXNjcmlwdGlvbjoJQ29udHJvbHMgdGhlIGRldmljZXMgZGlzcGxheSBtb2RlLgorCQlGb3IgYSA2IGNoYXJhY3RlciBkaXNwbGF5IHRoZSB2YWx1ZXMgYXJlCisJCQlNU0IgMHgwNjsgTFNCIDB4M0YsIGFuZAorCQlmb3IgYW4gOCBjaGFyYWN0ZXIgZGlzcGxheSB0aGUgdmFsdWVzIGFyZQorCQkJTVNCIDB4MDg7IExTQiAweEZGLgorCitXaGVyZToJCS9zeXMvYnVzL3VzYi8uLi4vdGV4dG1vZGUKK0RhdGU6CQlBdWd1c3QgMjAwOAorS2VybmVsIFZlcnNpb246CTIuNi4yNgorQ29udGFjdDoJSGFycmlzb24gTWV0emdlciA8aGFycmlzb25tZXR6QGdtYWlsLmNvbT4KK0Rlc2NyaXB0aW9uOglDb250cm9scyB0aGUgd2F5IHRoZSBkZXZpY2UgaW50ZXJwcmV0cyBpdHMgdGV4dCBidWZmZXIuCisJCXJhdzoJZWFjaCBjaGFyYWN0ZXIgY29udHJvbHMgaXRzIHNlZ21lbnQgbWFudWFsbHkKKwkJaGV4OgllYWNoIGNoYXJhY3RlciBpcyBiZXR3ZWVuIDAtMTUKKwkJYXNjaWk6CWVhY2ggY2hhcmFjdGVyIGlzIGJldHdlZW4gJzAnLSc5JyBhbmQgJ0EnLSdGJy4KKworV2hlcmU6CQkvc3lzL2J1cy91c2IvLi4uL3RleHQKK0RhdGU6CQlBdWd1c3QgMjAwOAorS2VybmVsIFZlcnNpb246CTIuNi4yNgorQ29udGFjdDoJSGFycmlzb24gTWV0emdlciA8aGFycmlzb25tZXR6QGdtYWlsLmNvbT4KK0Rlc2NyaXB0aW9uOglUaGUgdGV4dCAob3IgZGF0YSkgZm9yIHRoZSBkZXZpY2UgdG8gZGlzcGxheQorCitXaGVyZToJCS9zeXMvYnVzL3VzYi8uLi4vZGVjaW1hbHMKK0RhdGU6CQlBdWd1c3QgMjAwOAorS2VybmVsIFZlcnNpb246CTIuNi4yNgorQ29udGFjdDoJSGFycmlzb24gTWV0emdlciA8aGFycmlzb25tZXR6QGdtYWlsLmNvbT4KK0Rlc2NyaXB0aW9uOglDb250cm9scyB0aGUgZGVjaW1hbCBwbGFjZXMgb24gdGhlIGRldmljZS4KKwkJVG8gc2V0IHRoZSBudGggZGVjaW1hbCBwbGFjZSwgZ2l2ZSB0aGlzIGZpZWxkCisJCXRoZSB2YWx1ZSBvZiAxMCAqKiBuLiBBc3N1bWUgdGhpcyBmaWVsZCBoYXMKKwkJdGhlIHZhbHVlIGsgYW5kIGhhcyAxIG9yIG1vcmUgZGVjaW1hbCBwbGFjZXMgc2V0LAorCQl0byBzZXQgdGhlIG10aCBwbGFjZSAod2hlcmUgbSBpcyBub3QgYWxyZWFkeSBzZXQpLAorCQljaGFuZ2UgdGhpcyBmaWVsZHMgdmFsdWUgdG8gayArIDEwICoqIG0uClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1jbGFzcy1yZWd1bGF0b3IgYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWNsYXNzLXJlZ3VsYXRvcgppbmRleCA3OWE0YTc1Li4zNzMxZjZmMiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1jbGFzcy1yZWd1bGF0b3IKKysrIGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1jbGFzcy1yZWd1bGF0b3IKQEAgLTEsNyArMSw3IEBACiBXaGF0OgkJL3N5cy9jbGFzcy9yZWd1bGF0b3IvLi4uL3N0YXRlCiBEYXRlOgkJQXByaWwgMjAwOAogS2VybmVsVmVyc2lvbjoJMi42LjI2Ci1Db250YWN0OglMaWFtIEdpcmR3b29kIDxsZ0BvcGVuc291cmNlLndvbGZzb25taWNyby5jb20+CitDb250YWN0OglMaWFtIEdpcmR3b29kIDxscmdAc2xpbWxvZ2ljLmNvLnVrPgogRGVzY3JpcHRpb246CiAJCUVhY2ggcmVndWxhdG9yIGRpcmVjdG9yeSB3aWxsIGNvbnRhaW4gYSBmaWVsZCBjYWxsZWQKIAkJc3RhdGUuIFRoaXMgaG9sZHMgdGhlIHJlZ3VsYXRvciBvdXRwdXQgc3RhdGUuCkBAIC0yNyw3ICsyNyw3IEBACiBXaGF0OgkJL3N5cy9jbGFzcy9yZWd1bGF0b3IvLi4uL3R5cGUKIERhdGU6CQlBcHJpbCAyMDA4CiBLZXJuZWxWZXJzaW9uOgkyLjYuMjYKLUNvbnRhY3Q6CUxpYW0gR2lyZHdvb2QgPGxnQG9wZW5zb3VyY2Uud29sZnNvbm1pY3JvLmNvbT4KK0NvbnRhY3Q6CUxpYW0gR2lyZHdvb2QgPGxyZ0BzbGltbG9naWMuY28udWs+CiBEZXNjcmlwdGlvbjoKIAkJRWFjaCByZWd1bGF0b3IgZGlyZWN0b3J5IHdpbGwgY29udGFpbiBhIGZpZWxkIGNhbGxlZAogCQl0eXBlLiBUaGlzIGhvbGRzIHRoZSByZWd1bGF0b3IgdHlwZS4KQEAgLTUxLDcgKzUxLDcgQEAKIFdoYXQ6CQkvc3lzL2NsYXNzL3JlZ3VsYXRvci8uLi4vbWljcm92b2x0cwogRGF0ZToJCUFwcmlsIDIwMDgKIEtlcm5lbFZlcnNpb246CTIuNi4yNgotQ29udGFjdDoJTGlhbSBHaXJkd29vZCA8bGdAb3BlbnNvdXJjZS53b2xmc29ubWljcm8uY29tPgorQ29udGFjdDoJTGlhbSBHaXJkd29vZCA8bHJnQHNsaW1sb2dpYy5jby51az4KIERlc2NyaXB0aW9uOgogCQlFYWNoIHJlZ3VsYXRvciBkaXJlY3Rvcnkgd2lsbCBjb250YWluIGEgZmllbGQgY2FsbGVkCiAJCW1pY3Jvdm9sdHMuIFRoaXMgaG9sZHMgdGhlIHJlZ3VsYXRvciBvdXRwdXQgdm9sdGFnZSBzZXR0aW5nCkBAIC02NSw3ICs2NSw3IEBACiBXaGF0OgkJL3N5cy9jbGFzcy9yZWd1bGF0b3IvLi4uL21pY3JvYW1wcwogRGF0ZToJCUFwcmlsIDIwMDgKIEtlcm5lbFZlcnNpb246CTIuNi4yNgotQ29udGFjdDoJTGlhbSBHaXJkd29vZCA8bGdAb3BlbnNvdXJjZS53b2xmc29ubWljcm8uY29tPgorQ29udGFjdDoJTGlhbSBHaXJkd29vZCA8bHJnQHNsaW1sb2dpYy5jby51az4KIERlc2NyaXB0aW9uOgogCQlFYWNoIHJlZ3VsYXRvciBkaXJlY3Rvcnkgd2lsbCBjb250YWluIGEgZmllbGQgY2FsbGVkCiAJCW1pY3JvYW1wcy4gVGhpcyBob2xkcyB0aGUgcmVndWxhdG9yIG91dHB1dCBjdXJyZW50IGxpbWl0CkBAIC03OSw3ICs3OSw3IEBACiBXaGF0OgkJL3N5cy9jbGFzcy9yZWd1bGF0b3IvLi4uL29wbW9kZQogRGF0ZToJCUFwcmlsIDIwMDgKIEtlcm5lbFZlcnNpb246CTIuNi4yNgotQ29udGFjdDoJTGlhbSBHaXJkd29vZCA8bGdAb3BlbnNvdXJjZS53b2xmc29ubWljcm8uY29tPgorQ29udGFjdDoJTGlhbSBHaXJkd29vZCA8bHJnQHNsaW1sb2dpYy5jby51az4KIERlc2NyaXB0aW9uOgogCQlFYWNoIHJlZ3VsYXRvciBkaXJlY3Rvcnkgd2lsbCBjb250YWluIGEgZmllbGQgY2FsbGVkCiAJCW9wbW9kZS4gVGhpcyBob2xkcyB0aGUgcmVndWxhdG9yIG9wZXJhdGluZyBtb2RlIHNldHRpbmcuCkBAIC0xMDIsNyArMTAyLDcgQEAKIFdoYXQ6CQkvc3lzL2NsYXNzL3JlZ3VsYXRvci8uLi4vbWluX21pY3Jvdm9sdHMKIERhdGU6CQlBcHJpbCAyMDA4CiBLZXJuZWxWZXJzaW9uOgkyLjYuMjYKLUNvbnRhY3Q6CUxpYW0gR2lyZHdvb2QgPGxnQG9wZW5zb3VyY2Uud29sZnNvbm1pY3JvLmNvbT4KK0NvbnRhY3Q6CUxpYW0gR2lyZHdvb2QgPGxyZ0BzbGltbG9naWMuY28udWs+CiBEZXNjcmlwdGlvbjoKIAkJRWFjaCByZWd1bGF0b3IgZGlyZWN0b3J5IHdpbGwgY29udGFpbiBhIGZpZWxkIGNhbGxlZAogCQltaW5fbWljcm92b2x0cy4gVGhpcyBob2xkcyB0aGUgbWluaW11bSBzYWZlIHdvcmtpbmcgcmVndWxhdG9yCkBAIC0xMTYsNyArMTE2LDcgQEAKIFdoYXQ6CQkvc3lzL2NsYXNzL3JlZ3VsYXRvci8uLi4vbWF4X21pY3Jvdm9sdHMKIERhdGU6CQlBcHJpbCAyMDA4CiBLZXJuZWxWZXJzaW9uOgkyLjYuMjYKLUNvbnRhY3Q6CUxpYW0gR2lyZHdvb2QgPGxnQG9wZW5zb3VyY2Uud29sZnNvbm1pY3JvLmNvbT4KK0NvbnRhY3Q6CUxpYW0gR2lyZHdvb2QgPGxyZ0BzbGltbG9naWMuY28udWs+CiBEZXNjcmlwdGlvbjoKIAkJRWFjaCByZWd1bGF0b3IgZGlyZWN0b3J5IHdpbGwgY29udGFpbiBhIGZpZWxkIGNhbGxlZAogCQltYXhfbWljcm92b2x0cy4gVGhpcyBob2xkcyB0aGUgbWF4aW11bSBzYWZlIHdvcmtpbmcgcmVndWxhdG9yCkBAIC0xMzAsNyArMTMwLDcgQEAKIFdoYXQ6CQkvc3lzL2NsYXNzL3JlZ3VsYXRvci8uLi4vbWluX21pY3JvYW1wcwogRGF0ZToJCUFwcmlsIDIwMDgKIEtlcm5lbFZlcnNpb246CTIuNi4yNgotQ29udGFjdDoJTGlhbSBHaXJkd29vZCA8bGdAb3BlbnNvdXJjZS53b2xmc29ubWljcm8uY29tPgorQ29udGFjdDoJTGlhbSBHaXJkd29vZCA8bHJnQHNsaW1sb2dpYy5jby51az4KIERlc2NyaXB0aW9uOgogCQlFYWNoIHJlZ3VsYXRvciBkaXJlY3Rvcnkgd2lsbCBjb250YWluIGEgZmllbGQgY2FsbGVkCiAJCW1pbl9taWNyb2FtcHMuIFRoaXMgaG9sZHMgdGhlIG1pbmltdW0gc2FmZSB3b3JraW5nIHJlZ3VsYXRvcgpAQCAtMTQ1LDcgKzE0NSw3IEBACiBXaGF0OgkJL3N5cy9jbGFzcy9yZWd1bGF0b3IvLi4uL21heF9taWNyb2FtcHMKIERhdGU6CQlBcHJpbCAyMDA4CiBLZXJuZWxWZXJzaW9uOgkyLjYuMjYKLUNvbnRhY3Q6CUxpYW0gR2lyZHdvb2QgPGxnQG9wZW5zb3VyY2Uud29sZnNvbm1pY3JvLmNvbT4KK0NvbnRhY3Q6CUxpYW0gR2lyZHdvb2QgPGxyZ0BzbGltbG9naWMuY28udWs+CiBEZXNjcmlwdGlvbjoKIAkJRWFjaCByZWd1bGF0b3IgZGlyZWN0b3J5IHdpbGwgY29udGFpbiBhIGZpZWxkIGNhbGxlZAogCQltYXhfbWljcm9hbXBzLiBUaGlzIGhvbGRzIHRoZSBtYXhpbXVtIHNhZmUgd29ya2luZyByZWd1bGF0b3IKQEAgLTE1NywxMCArMTU3LDIzIEBACiAJCXBsYXRmb3JtIGNvZGUuCiAKIAorV2hhdDoJCS9zeXMvY2xhc3MvcmVndWxhdG9yLy4uLi9uYW1lCitEYXRlOgkJT2N0b2JlciAyMDA4CitLZXJuZWxWZXJzaW9uOgkyLjYuMjgKK0NvbnRhY3Q6CUxpYW0gR2lyZHdvb2QgPGxyZ0BzbGltbG9naWMuY28udWs+CitEZXNjcmlwdGlvbjoKKwkJRWFjaCByZWd1bGF0b3IgZGlyZWN0b3J5IHdpbGwgY29udGFpbiBhIGZpZWxkIGNhbGxlZAorCQluYW1lLiBUaGlzIGhvbGRzIGEgc3RyaW5nIGlkZW50aWZ5aW5nIHRoZSByZWd1bGF0b3IgZm9yCisJCWRpc3BsYXkgcHVycG9zZXMuCisKKwkJTk9URTogdGhpcyB3aWxsIGJlIGVtcHR5IGlmIG5vIHN1aXRhYmxlIG5hbWUgaXMgcHJvdmlkZWQKKwkJYnkgcGxhdGZvcm0gb3IgcmVndWxhdG9yIGRyaXZlcnMuCisKKwogV2hhdDoJCS9zeXMvY2xhc3MvcmVndWxhdG9yLy4uLi9udW1fdXNlcnMKIERhdGU6CQlBcHJpbCAyMDA4CiBLZXJuZWxWZXJzaW9uOgkyLjYuMjYKLUNvbnRhY3Q6CUxpYW0gR2lyZHdvb2QgPGxnQG9wZW5zb3VyY2Uud29sZnNvbm1pY3JvLmNvbT4KK0NvbnRhY3Q6CUxpYW0gR2lyZHdvb2QgPGxyZ0BzbGltbG9naWMuY28udWs+CiBEZXNjcmlwdGlvbjoKIAkJRWFjaCByZWd1bGF0b3IgZGlyZWN0b3J5IHdpbGwgY29udGFpbiBhIGZpZWxkIGNhbGxlZAogCQludW1fdXNlcnMuIFRoaXMgaG9sZHMgdGhlIG51bWJlciBvZiBjb25zdW1lciBkZXZpY2VzIHRoYXQKQEAgLTE3MCw3ICsxODMsNyBAQAogV2hhdDoJCS9zeXMvY2xhc3MvcmVndWxhdG9yLy4uLi9yZXF1ZXN0ZWRfbWljcm9hbXBzCiBEYXRlOgkJQXByaWwgMjAwOAogS2VybmVsVmVyc2lvbjoJMi42LjI2Ci1Db250YWN0OglMaWFtIEdpcmR3b29kIDxsZ0BvcGVuc291cmNlLndvbGZzb25taWNyby5jb20+CitDb250YWN0OglMaWFtIEdpcmR3b29kIDxscmdAc2xpbWxvZ2ljLmNvLnVrPgogRGVzY3JpcHRpb246CiAJCUVhY2ggcmVndWxhdG9yIGRpcmVjdG9yeSB3aWxsIGNvbnRhaW4gYSBmaWVsZCBjYWxsZWQKIAkJcmVxdWVzdGVkX21pY3JvYW1wcy4gVGhpcyBob2xkcyB0aGUgdG90YWwgcmVxdWVzdGVkIGxvYWQKQEAgLTE4MSw3ICsxOTQsNyBAQAogV2hhdDoJCS9zeXMvY2xhc3MvcmVndWxhdG9yLy4uLi9wYXJlbnQKIERhdGU6CQlBcHJpbCAyMDA4CiBLZXJuZWxWZXJzaW9uOgkyLjYuMjYKLUNvbnRhY3Q6CUxpYW0gR2lyZHdvb2QgPGxnQG9wZW5zb3VyY2Uud29sZnNvbm1pY3JvLmNvbT4KK0NvbnRhY3Q6CUxpYW0gR2lyZHdvb2QgPGxyZ0BzbGltbG9naWMuY28udWs+CiBEZXNjcmlwdGlvbjoKIAkJU29tZSByZWd1bGF0b3IgZGlyZWN0b3JpZXMgd2lsbCBjb250YWluIGEgbGluayBjYWxsZWQgcGFyZW50LgogCQlUaGlzIHBvaW50cyB0byB0aGUgcGFyZW50IG9yIHN1cHBseSByZWd1bGF0b3IgaWYgb25lIGV4aXN0cy4KQEAgLTE4OSw3ICsyMDIsNyBAQAogV2hhdDoJCS9zeXMvY2xhc3MvcmVndWxhdG9yLy4uLi9zdXNwZW5kX21lbV9taWNyb3ZvbHRzCiBEYXRlOgkJTWF5IDIwMDgKIEtlcm5lbFZlcnNpb246CTIuNi4yNgotQ29udGFjdDoJTGlhbSBHaXJkd29vZCA8bGdAb3BlbnNvdXJjZS53b2xmc29ubWljcm8uY29tPgorQ29udGFjdDoJTGlhbSBHaXJkd29vZCA8bHJnQHNsaW1sb2dpYy5jby51az4KIERlc2NyaXB0aW9uOgogCQlFYWNoIHJlZ3VsYXRvciBkaXJlY3Rvcnkgd2lsbCBjb250YWluIGEgZmllbGQgY2FsbGVkCiAJCXN1c3BlbmRfbWVtX21pY3Jvdm9sdHMuIFRoaXMgaG9sZHMgdGhlIHJlZ3VsYXRvciBvdXRwdXQKQEAgLTIwMyw3ICsyMTYsNyBAQAogV2hhdDoJCS9zeXMvY2xhc3MvcmVndWxhdG9yLy4uLi9zdXNwZW5kX2Rpc2tfbWljcm92b2x0cwogRGF0ZToJCU1heSAyMDA4CiBLZXJuZWxWZXJzaW9uOgkyLjYuMjYKLUNvbnRhY3Q6CUxpYW0gR2lyZHdvb2QgPGxnQG9wZW5zb3VyY2Uud29sZnNvbm1pY3JvLmNvbT4KK0NvbnRhY3Q6CUxpYW0gR2lyZHdvb2QgPGxyZ0BzbGltbG9naWMuY28udWs+CiBEZXNjcmlwdGlvbjoKIAkJRWFjaCByZWd1bGF0b3IgZGlyZWN0b3J5IHdpbGwgY29udGFpbiBhIGZpZWxkIGNhbGxlZAogCQlzdXNwZW5kX2Rpc2tfbWljcm92b2x0cy4gVGhpcyBob2xkcyB0aGUgcmVndWxhdG9yIG91dHB1dApAQCAtMjE3LDcgKzIzMCw3IEBACiBXaGF0OgkJL3N5cy9jbGFzcy9yZWd1bGF0b3IvLi4uL3N1c3BlbmRfc3RhbmRieV9taWNyb3ZvbHRzCiBEYXRlOgkJTWF5IDIwMDgKIEtlcm5lbFZlcnNpb246CTIuNi4yNgotQ29udGFjdDoJTGlhbSBHaXJkd29vZCA8bGdAb3BlbnNvdXJjZS53b2xmc29ubWljcm8uY29tPgorQ29udGFjdDoJTGlhbSBHaXJkd29vZCA8bHJnQHNsaW1sb2dpYy5jby51az4KIERlc2NyaXB0aW9uOgogCQlFYWNoIHJlZ3VsYXRvciBkaXJlY3Rvcnkgd2lsbCBjb250YWluIGEgZmllbGQgY2FsbGVkCiAJCXN1c3BlbmRfc3RhbmRieV9taWNyb3ZvbHRzLiBUaGlzIGhvbGRzIHRoZSByZWd1bGF0b3Igb3V0cHV0CkBAIC0yMzEsNyArMjQ0LDcgQEAKIFdoYXQ6CQkvc3lzL2NsYXNzL3JlZ3VsYXRvci8uLi4vc3VzcGVuZF9tZW1fbW9kZQogRGF0ZToJCU1heSAyMDA4CiBLZXJuZWxWZXJzaW9uOgkyLjYuMjYKLUNvbnRhY3Q6CUxpYW0gR2lyZHdvb2QgPGxnQG9wZW5zb3VyY2Uud29sZnNvbm1pY3JvLmNvbT4KK0NvbnRhY3Q6CUxpYW0gR2lyZHdvb2QgPGxyZ0BzbGltbG9naWMuY28udWs+CiBEZXNjcmlwdGlvbjoKIAkJRWFjaCByZWd1bGF0b3IgZGlyZWN0b3J5IHdpbGwgY29udGFpbiBhIGZpZWxkIGNhbGxlZAogCQlzdXNwZW5kX21lbV9tb2RlLiBUaGlzIGhvbGRzIHRoZSByZWd1bGF0b3Igb3BlcmF0aW5nIG1vZGUKQEAgLTI0NSw3ICsyNTgsNyBAQAogV2hhdDoJCS9zeXMvY2xhc3MvcmVndWxhdG9yLy4uLi9zdXNwZW5kX2Rpc2tfbW9kZQogRGF0ZToJCU1heSAyMDA4CiBLZXJuZWxWZXJzaW9uOgkyLjYuMjYKLUNvbnRhY3Q6CUxpYW0gR2lyZHdvb2QgPGxnQG9wZW5zb3VyY2Uud29sZnNvbm1pY3JvLmNvbT4KK0NvbnRhY3Q6CUxpYW0gR2lyZHdvb2QgPGxyZ0BzbGltbG9naWMuY28udWs+CiBEZXNjcmlwdGlvbjoKIAkJRWFjaCByZWd1bGF0b3IgZGlyZWN0b3J5IHdpbGwgY29udGFpbiBhIGZpZWxkIGNhbGxlZAogCQlzdXNwZW5kX2Rpc2tfbW9kZS4gVGhpcyBob2xkcyB0aGUgcmVndWxhdG9yIG9wZXJhdGluZyBtb2RlCkBAIC0yNTgsNyArMjcxLDcgQEAKIFdoYXQ6CQkvc3lzL2NsYXNzL3JlZ3VsYXRvci8uLi4vc3VzcGVuZF9zdGFuZGJ5X21vZGUKIERhdGU6CQlNYXkgMjAwOAogS2VybmVsVmVyc2lvbjoJMi42LjI2Ci1Db250YWN0OglMaWFtIEdpcmR3b29kIDxsZ0BvcGVuc291cmNlLndvbGZzb25taWNyby5jb20+CitDb250YWN0OglMaWFtIEdpcmR3b29kIDxscmdAc2xpbWxvZ2ljLmNvLnVrPgogRGVzY3JpcHRpb246CiAJCUVhY2ggcmVndWxhdG9yIGRpcmVjdG9yeSB3aWxsIGNvbnRhaW4gYSBmaWVsZCBjYWxsZWQKIAkJc3VzcGVuZF9zdGFuZGJ5X21vZGUuIFRoaXMgaG9sZHMgdGhlIHJlZ3VsYXRvciBvcGVyYXRpbmcgbW9kZQpAQCAtMjcyLDcgKzI4NSw3IEBACiBXaGF0OgkJL3N5cy9jbGFzcy9yZWd1bGF0b3IvLi4uL3N1c3BlbmRfbWVtX3N0YXRlCiBEYXRlOgkJTWF5IDIwMDgKIEtlcm5lbFZlcnNpb246CTIuNi4yNgotQ29udGFjdDoJTGlhbSBHaXJkd29vZCA8bGdAb3BlbnNvdXJjZS53b2xmc29ubWljcm8uY29tPgorQ29udGFjdDoJTGlhbSBHaXJkd29vZCA8bHJnQHNsaW1sb2dpYy5jby51az4KIERlc2NyaXB0aW9uOgogCQlFYWNoIHJlZ3VsYXRvciBkaXJlY3Rvcnkgd2lsbCBjb250YWluIGEgZmllbGQgY2FsbGVkCiAJCXN1c3BlbmRfbWVtX3N0YXRlLiBUaGlzIGhvbGRzIHRoZSByZWd1bGF0b3Igb3BlcmF0aW5nIHN0YXRlCkBAIC0yODcsNyArMzAwLDcgQEAKIFdoYXQ6CQkvc3lzL2NsYXNzL3JlZ3VsYXRvci8uLi4vc3VzcGVuZF9kaXNrX3N0YXRlCiBEYXRlOgkJTWF5IDIwMDgKIEtlcm5lbFZlcnNpb246CTIuNi4yNgotQ29udGFjdDoJTGlhbSBHaXJkd29vZCA8bGdAb3BlbnNvdXJjZS53b2xmc29ubWljcm8uY29tPgorQ29udGFjdDoJTGlhbSBHaXJkd29vZCA8bHJnQHNsaW1sb2dpYy5jby51az4KIERlc2NyaXB0aW9uOgogCQlFYWNoIHJlZ3VsYXRvciBkaXJlY3Rvcnkgd2lsbCBjb250YWluIGEgZmllbGQgY2FsbGVkCiAJCXN1c3BlbmRfZGlza19zdGF0ZS4gVGhpcyBob2xkcyB0aGUgcmVndWxhdG9yIG9wZXJhdGluZyBzdGF0ZQpAQCAtMzAyLDcgKzMxNSw3IEBACiBXaGF0OgkJL3N5cy9jbGFzcy9yZWd1bGF0b3IvLi4uL3N1c3BlbmRfc3RhbmRieV9zdGF0ZQogRGF0ZToJCU1heSAyMDA4CiBLZXJuZWxWZXJzaW9uOgkyLjYuMjYKLUNvbnRhY3Q6CUxpYW0gR2lyZHdvb2QgPGxnQG9wZW5zb3VyY2Uud29sZnNvbm1pY3JvLmNvbT4KK0NvbnRhY3Q6CUxpYW0gR2lyZHdvb2QgPGxyZ0BzbGltbG9naWMuY28udWs+CiBEZXNjcmlwdGlvbjoKIAkJRWFjaCByZWd1bGF0b3IgZGlyZWN0b3J5IHdpbGwgY29udGFpbiBhIGZpZWxkIGNhbGxlZAogCQlzdXNwZW5kX3N0YW5kYnlfc3RhdGUuIFRoaXMgaG9sZHMgdGhlIHJlZ3VsYXRvciBvcGVyYXRpbmcKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtcHJvZmlsaW5nIGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1wcm9maWxpbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjAyZDhiOAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtcHJvZmlsaW5nCkBAIC0wLDAgKzEsMTMgQEAKK1doYXQ6CQkvc3lzL2tlcm5lbC9wcm9maWxlCitEYXRlOgkJU2VwdGVtYmVyIDIwMDgKK0NvbnRhY3Q6CURhdmUgSGFuc2VuIDxkYXZlQGxpbnV4LnZuZXQuaWJtLmNvbT4KK0Rlc2NyaXB0aW9uOgorCQkvc3lzL2tlcm5lbC9wcm9maWxlIGlzIHRoZSBydW50aW1lIGVxdWl2YWxlbnQKKwkJb2YgdGhlIGJvb3QtdGltZSBwcm9maWxlPSBvcHRpb24uCisKKwkJWW91IGNhbiBnZXQgdGhlIHNhbWUgZWZmZWN0IHJ1bm5pbmc6CisKKwkJCWVjaG8gMiA+IC9zeXMva2VybmVsL3Byb2ZpbGUKKworCQlhcyB5b3Ugd291bGQgYnkgaXNzdWluZyBwcm9maWxlPTIgb24gdGhlIGJvb3QKKwkJY29tbWFuZCBsaW5lLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL01ha2VmaWxlIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL01ha2VmaWxlCmluZGV4IDE2MTUzNTAuLmZhYmMwNjQgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vRG9jQm9vay9NYWtlZmlsZQorKysgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svTWFrZWZpbGUKQEAgLTYsNyArNiw3IEBACiAjIFRvIGFkZCBhIG5ldyBib29rIHRoZSBvbmx5IHN0ZXAgcmVxdWlyZWQgaXMgdG8gYWRkIHRoZSBib29rIHRvIHRoZQogIyBsaXN0IG9mIERPQ0JPT0tTLgogCi1ET0NCT09LUyA6PSB3YW5ib29rLnhtbCB6ODUzMGJvb2sueG1sIG1jYWJvb2sueG1sIHZpZGVvYm9vay54bWwgXAorRE9DQk9PS1MgOj0gd2FuYm9vay54bWwgejg1MzBib29rLnhtbCBtY2Fib29rLnhtbCBcCiAJICAgIGtlcm5lbC1oYWNraW5nLnhtbCBrZXJuZWwtbG9ja2luZy54bWwgZGV2aWNlaW9ib29rLnhtbCBcCiAJICAgIHByb2Nmcy1ndWlkZS54bWwgd3JpdGluZ191c2JfZHJpdmVyLnhtbCBuZXR3b3JraW5nLnhtbCBcCiAJICAgIGtlcm5lbC1hcGkueG1sIGZpbGVzeXN0ZW1zLnhtbCBsc20ueG1sIHVzYi54bWwga2dkYi54bWwgXApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL2dhZGdldC50bXBsIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL2dhZGdldC50bXBsCmluZGV4IGVhM2JjOTUuLjZlZjJmMDAgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vRG9jQm9vay9nYWRnZXQudG1wbAorKysgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svZ2FkZ2V0LnRtcGwKQEAgLTU1Nyw2ICs1NTcsOSBAQAogPC9wYXJhPgogCiAhRWRyaXZlcnMvdXNiL2dhZGdldC9mX2FjbS5jCishRWRyaXZlcnMvdXNiL2dhZGdldC9mX2VjbS5jCishRWRyaXZlcnMvdXNiL2dhZGdldC9mX3N1YnNldC5jCishRWRyaXZlcnMvdXNiL2dhZGdldC9mX29iZXguYwogIUVkcml2ZXJzL3VzYi9nYWRnZXQvZl9zZXJpYWwuYwogCiA8L3NlY3QxPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Byb2Nmcy1ndWlkZS50bXBsIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Byb2Nmcy1ndWlkZS50bXBsCmluZGV4IDhhNWRjNmUuLjllYmE0YjcgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vRG9jQm9vay9wcm9jZnMtZ3VpZGUudG1wbAorKysgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svcHJvY2ZzLWd1aWRlLnRtcGwKQEAgLTE0LDE3ICsxNCwyMCBAQAogCTxvdGhlcm5hbWU+KEouQS5LLik8L290aGVybmFtZT4KIAk8c3VybmFtZT5Nb3V3PC9zdXJuYW1lPgogCTxhZmZpbGlhdGlvbj4KLQkgIDxvcmduYW1lPkRlbGZ0IFVuaXZlcnNpdHkgb2YgVGVjaG5vbG9neTwvb3JnbmFtZT4KLQkgIDxvcmdkaXY+RmFjdWx0eSBvZiBJbmZvcm1hdGlvbiBUZWNobm9sb2d5IGFuZCBTeXN0ZW1zPC9vcmdkaXY+CiAJICA8YWRkcmVzcz4KLSAgICAgICAgICAgIDxlbWFpbD5KLkEuSy5Nb3V3QGl0cy50dWRlbGZ0Lm5sPC9lbWFpbD4KLSAgICAgICAgICAgIDxwb2I+UE8gQk9YIDUwMzE8L3BvYj4KLSAgICAgICAgICAgIDxwb3N0Y29kZT4yNjAwIEdBPC9wb3N0Y29kZT4KLSAgICAgICAgICAgIDxjaXR5PkRlbGZ0PC9jaXR5PgotICAgICAgICAgICAgPGNvdW50cnk+VGhlIE5ldGhlcmxhbmRzPC9jb3VudHJ5PgorICAgICAgICAgICAgPGVtYWlsPm1vdXdAbmwubGludXgub3JnPC9lbWFpbD4KICAgICAgICAgICA8L2FkZHJlc3M+CiAJPC9hZmZpbGlhdGlvbj4KICAgICAgIDwvYXV0aG9yPgorICAgICAgPG90aGVyY3JlZGl0PgorCTxjb250cmliPgorCVRoaXMgc29mdHdhcmUgYW5kIGRvY3VtZW50YXRpb24gd2VyZSB3cml0dGVuIHdoaWxlIHdvcmtpbmcgb24gdGhlCisJTEFSVCBjb21wdXRpbmcgYm9hcmQKKwkoPHVsaW5rIHVybD0iaHR0cDovL3d3dy5sYXJ0bWFrZXIubmwvIj5odHRwOi8vd3d3LmxhcnRtYWtlci5ubC88L3VsaW5rPiksCisJd2hpY2ggd2FzIHNwb25zb3JlZCBieSB0aGUgRGVsdCBVbml2ZXJzaXR5IG9mIFRlY2hub2xvZ3kgcHJvamVjdHMKKwlNb2JpbGUgTXVsdGktbWVkaWEgQ29tbXVuaWNhdGlvbnMgYW5kIFViaXF1aXRvdXMgQ29tbXVuaWNhdGlvbnMuCisJPC9jb250cmliPgorICAgICAgPC9vdGhlcmNyZWRpdD4KICAgICA8L2F1dGhvcmdyb3VwPgogCiAgICAgPHJldmhpc3Rvcnk+CkBAIC0xMDksMTggKzExMiw2IEBACiAgICAgPC9wYXJhPgogCiAgICAgPHBhcmE+Ci0gICAgICBUaGlzIGRvY3VtZW50YXRpb24gd2FzIHdyaXR0ZW4gd2hpbGUgd29ya2luZyBvbiB0aGUgTEFSVAotICAgICAgY29tcHV0aW5nIGJvYXJkICg8dWxpbmsKLSAgICAgIHVybD0iaHR0cDovL3d3dy5sYXJ0LnR1ZGVsZnQubmwvIj5odHRwOi8vd3d3LmxhcnQudHVkZWxmdC5ubC88L3VsaW5rPiksCi0gICAgICB3aGljaCBpcyBzcG9uc29yZWQgYnkgdGhlIE1vYmlsZSBNdWx0aS1tZWRpYSBDb21tdW5pY2F0aW9ucwotICAgICAgKDx1bGluawotICAgICAgdXJsPSJodHRwOi8vd3d3Lm1tYy50dWRlbGZ0Lm5sLyI+aHR0cDovL3d3dy5tbWMudHVkZWxmdC5ubC88L3VsaW5rPikKLSAgICAgIGFuZCBVYmlxdWl0b3VzIENvbW11bmljYXRpb25zICg8dWxpbmsKLSAgICAgIHVybD0iaHR0cDovL3d3dy51Ymljb20udHVkZWxmdC5ubC8iPmh0dHA6Ly93d3cudWJpY29tLnR1ZGVsZnQubmwvPC91bGluaz4pCi0gICAgICBwcm9qZWN0cy4KLSAgICA8L3BhcmE+Ci0KLSAgICA8cGFyYT4KICAgICAgIEVyaWsKICAgICA8L3BhcmE+CiAgIDwvcHJlZmFjZT4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRG9jQm9vay9wcm9jZnNfZXhhbXBsZS5jIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Byb2Nmc19leGFtcGxlLmMKaW5kZXggMmYzZGUwZi4uOGM2Mzk2ZSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Byb2Nmc19leGFtcGxlLmMKKysrIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Byb2Nmc19leGFtcGxlLmMKQEAgLTEsMjggKzEsMTYgQEAKIC8qCiAgKiBwcm9jZnNfZXhhbXBsZS5jOiBhbiBleGFtcGxlIHByb2MgaW50ZXJmYWNlCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDAxLCBFcmlrIE1vdXcgKEouQS5LLk1vdXdAaXRzLnR1ZGVsZnQubmwpCisgKiBDb3B5cmlnaHQgKEMpIDIwMDEsIEVyaWsgTW91dyAobW91d0BubC5saW51eC5vcmcpCiAgKgogICogVGhpcyBmaWxlIGFjY29tcGFuaWVzIHRoZSBwcm9jZnMtZ3VpZGUgaW4gdGhlIExpbnV4IGtlcm5lbAogICogc291cmNlLiBJdHMgbWFpbiB1c2UgaXMgdG8gZGVtb25zdHJhdGUgdGhlIGNvbmNlcHRzIGFuZAogICogZnVuY3Rpb25zIGRlc2NyaWJlZCBpbiB0aGUgZ3VpZGUuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBoYXMgYmVlbiBkZXZlbG9wZWQgd2hpbGUgd29ya2luZyBvbiB0aGUgTEFSVAotICogY29tcHV0aW5nIGJvYXJkIChodHRwOi8vd3d3LmxhcnQudHVkZWxmdC5ubC8pLCB3aGljaCBpcwotICogc3BvbnNvcmVkIGJ5IHRoZSBNb2JpbGUgTXVsdGktbWVkaWEgQ29tbXVuaWNhdGlvbnMKLSAqIChodHRwOi8vd3d3Lm1tYy50dWRlbGZ0Lm5sLykgYW5kIFViaXF1aXRvdXMgQ29tbXVuaWNhdGlvbnMgCi0gKiAoaHR0cDovL3d3dy51Ymljb20udHVkZWxmdC5ubC8pIHByb2plY3RzLgotICoKLSAqIFRoZSBhdXRob3IgY2FuIGJlIHJlYWNoZWQgYXQ6Ci0gKgotICogIEVyaWsgTW91dwotICogIEluZm9ybWF0aW9uIGFuZCBDb21tdW5pY2F0aW9uIFRoZW9yeSBHcm91cAotICogIEZhY3VsdHkgb2YgSW5mb3JtYXRpb24gVGVjaG5vbG9neSBhbmQgU3lzdGVtcwotICogIERlbGZ0IFVuaXZlcnNpdHkgb2YgVGVjaG5vbG9neQotICogIFAuTy4gQm94IDUwMzEKLSAqICAyNjAwIEdBIERlbGZ0Ci0gKiAgVGhlIE5ldGhlcmxhbmRzCi0gKgorICogY29tcHV0aW5nIGJvYXJkIChodHRwOi8vd3d3LmxhcnRtYWtlci5ubCksIHdoaWNoIHdhcyBzcG9uc29yZWQKKyAqIGJ5IHRoZSBEZWx0IFVuaXZlcnNpdHkgb2YgVGVjaG5vbG9neSBwcm9qZWN0cyBNb2JpbGUgTXVsdGktbWVkaWEKKyAqIENvbW11bmljYXRpb25zIGFuZCBVYmlxdWl0b3VzIENvbW11bmljYXRpb25zLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZQogICogaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdmlkZW9ib29rLnRtcGwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdmlkZW9ib29rLnRtcGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBiYzI1OTQuLjAwMDAwMDAKLS0tIGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3ZpZGVvYm9vay50bXBsCisrKyAvZGV2L251bGwKQEAgLTEsMTY1NCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPCFET0NUWVBFIGJvb2sgUFVCTElDICItLy9PQVNJUy8vRFREIERvY0Jvb2sgWE1MIFY0LjEuMi8vRU4iCi0JImh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvZG9jYm9vay94bWwvNC4xLjIvZG9jYm9va3guZHRkIiBbXT4KLQotPGJvb2sgaWQ9IlY0TEd1aWRlIj4KLSA8Ym9va2luZm8+Ci0gIDx0aXRsZT5WaWRlbzRMaW51eCBQcm9ncmFtbWluZzwvdGl0bGU+Ci0gIAotICA8YXV0aG9yZ3JvdXA+Ci0gICA8YXV0aG9yPgotICAgIDxmaXJzdG5hbWU+QWxhbjwvZmlyc3RuYW1lPgotICAgIDxzdXJuYW1lPkNveDwvc3VybmFtZT4KLSAgICA8YWZmaWxpYXRpb24+Ci0gICAgIDxhZGRyZXNzPgotICAgICAgPGVtYWlsPmFsYW5AcmVkaGF0LmNvbTwvZW1haWw+Ci0gICAgIDwvYWRkcmVzcz4KLSAgICA8L2FmZmlsaWF0aW9uPgotICAgPC9hdXRob3I+Ci0gIDwvYXV0aG9yZ3JvdXA+Ci0KLSAgPGNvcHlyaWdodD4KLSAgIDx5ZWFyPjIwMDA8L3llYXI+Ci0gICA8aG9sZGVyPkFsYW4gQ294PC9ob2xkZXI+Ci0gIDwvY29weXJpZ2h0PgotCi0gIDxsZWdhbG5vdGljZT4KLSAgIDxwYXJhPgotICAgICBUaGlzIGRvY3VtZW50YXRpb24gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUKLSAgICAgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwotICAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgotICAgICB2ZXJzaW9uLgotICAgPC9wYXJhPgotICAgICAgCi0gICA8cGFyYT4KLSAgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZQotICAgICB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkCi0gICAgIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KLSAgICAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICAgPC9wYXJhPgotICAgICAgCi0gICA8cGFyYT4KLSAgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCi0gICAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKLSAgICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKLSAgICAgTUEgMDIxMTEtMTMwNyBVU0EKLSAgIDwvcGFyYT4KLSAgICAgIAotICAgPHBhcmE+Ci0gICAgIEZvciBtb3JlIGRldGFpbHMgc2VlIHRoZSBmaWxlIENPUFlJTkcgaW4gdGhlIHNvdXJjZQotICAgICBkaXN0cmlidXRpb24gb2YgTGludXguCi0gICA8L3BhcmE+Ci0gIDwvbGVnYWxub3RpY2U+Ci0gPC9ib29raW5mbz4KLQotPHRvYz48L3RvYz4KLQotICA8Y2hhcHRlciBpZD0iaW50cm8iPgotICAgICAgPHRpdGxlPkludHJvZHVjdGlvbjwvdGl0bGU+Ci0gIDxwYXJhPgotICAgICAgICBQYXJ0cyBvZiB0aGlzIGRvY3VtZW50IGZpcnN0IGFwcGVhcmVkIGluIExpbnV4IE1hZ2F6aW5lIHVuZGVyIGEKLSAgICAgICAgbmluZXR5IGRheSBleGNsdXNpdml0eS4KLSAgPC9wYXJhPgotICA8cGFyYT4KLSAgICAgICAgVmlkZW80TGludXggaXMgaW50ZW5kZWQgdG8gcHJvdmlkZSBhIGNvbW1vbiBwcm9ncmFtbWluZyBpbnRlcmZhY2UKLSAgICAgICAgZm9yIHRoZSBtYW55IFRWIGFuZCBjYXB0dXJlIGNhcmRzIG5vdyBvbiB0aGUgbWFya2V0LCBhcyB3ZWxsIGFzCi0gICAgICAgIHBhcmFsbGVsIHBvcnQgYW5kIFVTQiB2aWRlbyBjYW1lcmFzLiBSYWRpbywgdGVsZXRleHQgZGVjb2RlcnMgYW5kCi0gICAgICAgIHZlcnRpY2FsIGJsYW5raW5nIGRhdGEgaW50ZXJmYWNlcyBhcmUgYWxzbyBwcm92aWRlZC4KLSAgPC9wYXJhPgotICA8L2NoYXB0ZXI+Ci0gIDxjaGFwdGVyIGlkPSJyYWRpbyI+Ci0gICAgICAgIDx0aXRsZT5SYWRpbyBEZXZpY2VzPC90aXRsZT4KLSAgPHBhcmE+Ci0gICAgICAgIFRoZXJlIGFyZSBhIHdpZGUgdmFyaWV0eSBvZiByYWRpbyBpbnRlcmZhY2VzIGF2YWlsYWJsZSBmb3IgUEMncywgYW5kIHRoZXNlCi0gICAgICAgIGFyZSBnZW5lcmFsbHkgdmVyeSBzaW1wbGUgdG8gcHJvZ3JhbS4gVGhlIGJpZ2dlc3QgcHJvYmxlbSB3aXRoIHN1cHBvcnRpbmcKLSAgICAgICAgc3VjaCBkZXZpY2VzIGlzIG5vcm1hbGx5IGV4dHJhY3RpbmcgZG9jdW1lbnRhdGlvbiBmcm9tIHRoZSB2ZW5kb3IuCi0gIDwvcGFyYT4KLSAgPHBhcmE+Ci0gICAgICAgIFRoZSByYWRpbyBpbnRlcmZhY2Ugc3VwcG9ydHMgYSBzaW1wbGUgc2V0IG9mIGNvbnRyb2wgaW9jdGxzIHN0YW5kYXJkaXNlZAotICAgICAgICBhY3Jvc3MgYWxsIHJhZGlvIGFuZCB0diBpbnRlcmZhY2VzLiBJdCBkb2VzIG5vdCBzdXBwb3J0IHJlYWQgb3Igd3JpdGUsIHdoaWNoCi0gICAgICAgIGFyZSB1c2VkIGZvciB2aWRlbyBzdHJlYW1zLiBUaGUgcmVhc29uIHJhZGlvIGNhcmRzIGRvIG5vdCBhbGxvdyB5b3UgdG8gcmVhZAotICAgICAgICB0aGUgYXVkaW8gc3RyZWFtIGludG8gYW4gYXBwbGljYXRpb24gaXMgdGhhdCB3aXRob3V0IGV4Y2VwdGlvbiB0aGV5IHByb3ZpZGUKLSAgICAgICAgYSBjb25uZWN0aW9uIG9uIHRvIGEgc291bmRjYXJkLiBTb3VuZGNhcmRzIGNhbiBiZSB1c2VkIHRvIHJlYWQgdGhlIHJhZGlvCi0gICAgICAgIGRhdGEganVzdCBmaW5lLiAKLSAgPC9wYXJhPgotICA8c2VjdDEgaWQ9InJlZ2lzdGVycmFkaW8iPgotICA8dGl0bGU+UmVnaXN0ZXJpbmcgUmFkaW8gRGV2aWNlczwvdGl0bGU+Ci0gIDxwYXJhPgotICAgICAgICBUaGUgVmlkZW80bGludXggY29yZSBwcm92aWRlcyBhbiBpbnRlcmZhY2UgZm9yIHJlZ2lzdGVyaW5nIGRldmljZXMuIFRoZQotICAgICAgICBmaXJzdCBzdGVwIGluIHdyaXRpbmcgb3VyIHJhZGlvIGNhcmQgZHJpdmVyIGlzIHRvIHJlZ2lzdGVyIGl0LgotICA8L3BhcmE+Ci0gIDxwcm9ncmFtbGlzdGluZz4KLQotCi1zdGF0aWMgc3RydWN0IHZpZGVvX2RldmljZSBteV9yYWRpbwotewotICAgICAgICAiTXkgcmFkaW8iLAotICAgICAgICBWSURfVFlQRV9UVU5FUiwKLSAgICAgICAgcmFkaW9fb3Blbi4KLSAgICAgICAgcmFkaW9fY2xvc2UsCi0gICAgICAgIE5VTEwsICAgICAgICAgICAgICAgIC8qIG5vIHJlYWQgKi8KLSAgICAgICAgTlVMTCwgICAgICAgICAgICAgICAgIC8qIG5vIHdyaXRlICovCi0gICAgICAgIE5VTEwsICAgICAgICAgICAgICAgIC8qIG5vIHBvbGwgKi8KLSAgICAgICAgcmFkaW9faW9jdGwsCi0gICAgICAgIE5VTEwsICAgICAgICAgICAgICAgIC8qIG5vIHNwZWNpYWwgaW5pdCBmdW5jdGlvbiAqLwotICAgICAgICBOVUxMICAgICAgICAgICAgICAgIC8qIG5vIHByaXZhdGUgZGF0YSAqLwotfTsKLQotCi0gIDwvcHJvZ3JhbWxpc3Rpbmc+Ci0gIDxwYXJhPgotICAgICAgICBUaGlzIGRlY2xhcmVzIG91ciB2aWRlbzRsaW51eCBkZXZpY2UgZHJpdmVyIGludGVyZmFjZS4gVGhlIFZJRF9UWVBFXyB2YWx1ZQotICAgICAgICBkZWZpbmVzIHdoYXQga2luZCBvZiBhbiBpbnRlcmZhY2Ugd2UgYXJlLCBhbmQgZGVmaW5lcyBiYXNpYyBjYXBhYmlsaXRpZXMuCi0gIDwvcGFyYT4KLSAgPHBhcmE+Ci0gICAgICAgIFRoZSBvbmx5IGRlZmluZWQgdmFsdWUgcmVsZXZhbnQgZm9yIGEgcmFkaW8gY2FyZCBpcyBWSURfVFlQRV9UVU5FUiB3aGljaAotICAgICAgICBpbmRpY2F0ZXMgdGhhdCB0aGUgZGV2aWNlIGNhbiBiZSB0dW5lZC4gQ2xlYXJseSBvdXIgcmFkaW8gaXMgZ29pbmcgdG8gaGF2ZSBzb21lCi0gICAgICAgIHdheSB0byBjaGFuZ2UgY2hhbm5lbCBzbyBpdCBpcyB0dW5lYWJsZS4KLSAgPC9wYXJhPgotICA8cGFyYT4KLSAgICAgICAgV2UgZGVjbGFyZSBhbiBvcGVuIGFuZCBjbG9zZSByb3V0aW5lLCBidXQgd2UgZG8gbm90IG5lZWQgcmVhZCBvciB3cml0ZSwKLSAgICAgICAgd2hpY2ggYXJlIHVzZWQgdG8gcmVhZCBhbmQgd3JpdGUgdmlkZW8gZGF0YSB0byBvciBmcm9tIHRoZSBjYXJkIGl0c2VsZi4gQXMKLSAgICAgICAgd2UgaGF2ZSBubyByZWFkIG9yIHdyaXRlIHRoZXJlIGlzIG5vIHBvbGwgZnVuY3Rpb24uCi0gIDwvcGFyYT4KLSAgPHBhcmE+Ci0gICAgICAgIFRoZSBwcml2YXRlIGluaXRpYWxpc2UgZnVuY3Rpb24gaXMgcnVuIHdoZW4gdGhlIGRldmljZSBpcyByZWdpc3RlcmVkLiBJbgotICAgICAgICB0aGlzIGRyaXZlciB3ZSd2ZSBhbHJlYWR5IGRvbmUgYWxsIHRoZSB3b3JrIG5lZWRlZC4gVGhlIGZpbmFsIHBvaW50ZXIgaXMgYQotICAgICAgICBwcml2YXRlIGRhdGEgcG9pbnRlciB0aGF0IGNhbiBiZSB1c2VkIGJ5IHRoZSBkZXZpY2UgZHJpdmVyIHRvIGF0dGFjaCBhbmQKLSAgICAgICAgcmV0cmlldmUgcHJpdmF0ZSBkYXRhIHN0cnVjdHVyZXMuIFdlIHNldCB0aGlzIGZpZWxkICJwcml2IiB0byBOVUxMIGZvcgotICAgICAgICB0aGUgbW9tZW50LgotICA8L3BhcmE+Ci0gIDxwYXJhPgotICAgICAgICBIYXZpbmcgdGhlIHN0cnVjdHVyZSBkZWZpbmVkIGlzIGFsbCB2ZXJ5IHdlbGwgYnV0IHdlIG5vdyBuZWVkIHRvIHJlZ2lzdGVyIGl0Ci0gICAgICAgIHdpdGggdGhlIGtlcm5lbC4gCi0gIDwvcGFyYT4KLSAgPHByb2dyYW1saXN0aW5nPgotCi0KLXN0YXRpYyBpbnQgaW8gPSAweDMyMDsKLQotaW50IF9faW5pdCBteXJhZGlvX2luaXQoc3RydWN0IHZpZGVvX2luaXQgKnYpCi17Ci0gICAgICAgIGlmKCFyZXF1ZXN0X3JlZ2lvbihpbywgTVlfSU9fU0laRSwgIm15cmFkaW8iKSkKLSAgICAgICAgewotICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX0VSUiAKLSAgICAgICAgICAgICAgICAgICAgIm15cmFkaW86IHBvcnQgMHglMDNYIGlzIGluIHVzZS5cbiIsIGlvKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gLUVCVVNZOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYodmlkZW9fZGV2aWNlX3JlZ2lzdGVyKCZhbXA7bXlfcmFkaW8sIFZGTF9UWVBFX1JBRElPKT09LTEpIHsKLSAgICAgICAgICAgICAgICByZWxlYXNlX3JlZ2lvbihpbywgTVlfSU9fU0laRSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7Ci0gICAgICAgIH0JCQotICAgICAgICByZXR1cm4gMDsKLX0KLQotICA8L3Byb2dyYW1saXN0aW5nPgotICA8cGFyYT4KLSAgICAgICAgVGhlIGZpcnN0IHN0YWdlIG9mIHRoZSBpbml0aWFsaXNhdGlvbiwgYXMgaXMgbm9ybWFsbHkgdGhlIGNhc2UsIGlzIHRvIGNoZWNrIAotICAgICAgICB0aGF0IHRoZSBJL08gc3BhY2Ugd2UgYXJlIGFib3V0IHRvIGZpZGRsZSB3aXRoIGRvZXNuJ3QgYmVsb25nIHRvIHNvbWUgb3RoZXIgCi0gICAgICAgIGRyaXZlci4gSWYgaXQgaXMgd2UgbGVhdmUgd2VsbCBhbG9uZS4gSWYgdGhlIHVzZXIgZ2l2ZXMgdGhlIGFkZHJlc3Mgb2YgdGhlIAotICAgICAgICB3cm9uZyBkZXZpY2UgdGhlbiB3ZSB3aWxsIHNwb3QgdGhpcy4gVGhlc2UgcG9saWNpZXMgd2lsbCBnZW5lcmFsbHkgYXZvaWQgCi0gICAgICAgIGNyYXNoaW5nIHRoZSBtYWNoaW5lLgotICA8L3BhcmE+Ci0gIDxwYXJhPgotICAgICAgICBOb3cgd2UgYXNrIHRoZSBWaWRlbzRMaW51eCBsYXllciB0byByZWdpc3RlciB0aGUgZGV2aWNlIGZvciB1cy4gV2UgaGFuZCBpdAotICAgICAgICBvdXIgY2FyZWZ1bGx5IGRlc2lnbmVkIHZpZGVvX2RldmljZSBzdHJ1Y3R1cmUgYW5kIGFsc28gdGVsbCBpdCB3aGljaCBncm91cAotICAgICAgICBvZiBkZXZpY2VzIHdlIHdhbnQgaXQgcmVnaXN0ZXJlZCB3aXRoLiBJbiB0aGlzIGNhc2UgVkZMX1RZUEVfUkFESU8uCi0gIDwvcGFyYT4KLSAgPHBhcmE+Ci0gICAgICAgIFRoZSB0eXBlcyBhdmFpbGFibGUgYXJlCi0gIDwvcGFyYT4KLSAgIDx0YWJsZSBmcmFtZT0iYWxsIiBpZD0iRGV2aWNlX1R5cGVzIj48dGl0bGU+RGV2aWNlIFR5cGVzPC90aXRsZT4KLSAgIDx0Z3JvdXAgY29scz0iMyIgYWxpZ249ImxlZnQiPgotICAgPHRib2R5PgotICAgPHJvdz4KLSAgICAgICAgPGVudHJ5PlZGTF9UWVBFX1JBRElPPC9lbnRyeT48ZW50cnk+L2Rldi9yYWRpb3tufTwvZW50cnk+PGVudHJ5PgotCi0gICAgICAgIFJhZGlvIGRldmljZXMgYXJlIGFzc2lnbmVkIGluIHRoaXMgYmxvY2suIEFzIHdpdGggYWxsIG9mIHRoZXNlCi0gICAgICAgIHNlbGVjdGlvbnMgdGhlIGFjdHVhbCBudW1iZXIgYXNzaWdubWVudCBpcyBkb25lIGJ5IHRoZSB2aWRlbyBsYXllcgotICAgICAgICBhY2NvcmRpam5nIHRvIHdoYXQgaXMgZnJlZS48L2VudHJ5PgotCTwvcm93Pjxyb3c+Ci0gICAgICAgIDxlbnRyeT5WRkxfVFlQRV9HUkFCQkVSPC9lbnRyeT48ZW50cnk+L2Rldi92aWRlb3tufTwvZW50cnk+PGVudHJ5PgotICAgICAgICBWaWRlbyBjYXB0dXJlIGRldmljZXMgYW5kIGFsc28gLS0gY291bnRlci1pbnR1aXRpdmVseSBmb3IgdGhlIG5hbWUgLS0KLSAgICAgICAgaGFyZHdhcmUgdmlkZW8gcGxheWJhY2sgZGV2aWNlcyBzdWNoIGFzIE1QRUcyIGNhcmRzLjwvZW50cnk+Ci0JPC9yb3c+PHJvdz4KLSAgICAgICAgPGVudHJ5PlZGTF9UWVBFX1ZCSTwvZW50cnk+PGVudHJ5Pi9kZXYvdmJpe259PC9lbnRyeT48ZW50cnk+Ci0gICAgICAgIFRoZSBWQkkgZGV2aWNlcyBjYXB0dXJlIHRoZSBoaWRkZW4gbGluZXMgb24gYSB0ZWxldmlzaW9uIHBpY3R1cmUKLSAgICAgICAgdGhhdCBjYXJyeSBmdXJ0aGVyIGluZm9ybWF0aW9uIGxpa2UgY2xvc2VkIGNhcHRpb24gZGF0YSwgdGVsZXRleHQKLSAgICAgICAgKHByaW1hcmlseSBpbiBFdXJvcGUpIGFuZCBub3cgSW50ZXJjYXN0IGFuZCB0aGUgQVRWRUMgaW50ZXJuZXQKLSAgICAgICAgdGVsZXZpc2lvbiBlbmNvZGluZ3MuPC9lbnRyeT4KLQk8L3Jvdz48cm93PgotICAgICAgICA8ZW50cnk+VkZMX1RZUEVfVlRYPC9lbnRyeT48ZW50cnk+L2Rldi92dHhbbn08L2VudHJ5PjxlbnRyeT4KLSAgICAgICAgVlRYIGlzICdWaWRlb3RleHQnIGFsc28ga25vd24gYXMgJ1RlbGV0ZXh0Jy4gVGhpcyBpcyBhIHN5c3RlbSBmb3IKLSAgICAgICAgc2VuZGluZyBudW1iZXJlZCwgNDB4MjUsIG1vc3RseSB0ZXh0dWFsIHBhZ2UgaW1hZ2VzIG92ZXIgdGhlIGhpZGRlbgotICAgICAgICBsaW5lcy4gVW5saWtlIHRoZSAvZGV2L3ZiaSBpbnRlcmZhY2VzLCB0aGlzIGlzIGZvciAnc21hcnQnIGRlY29kZXIgCi0gICAgICAgIGNoaXBzLiAoVGhlIHVzZSBvZiB0aGUgd29yZCBzbWFydCBoZXJlIGhhcyB0byBiZSB0YWtlbiBpbiBjb250ZXh0LAotICAgICAgICB0aGUgc21hcnRlc3QgdGVsZXRleHQgY2hpcHMgYXJlIGZhaXJseSBkdW1iIHBpZWNlcyBvZiB0ZWNobm9sb2d5KS4KLQk8L2VudHJ5PgotICAgIDwvcm93PgotICAgIDwvdGJvZHk+Ci0gICAgPC90Z3JvdXA+Ci0gICAgPC90YWJsZT4KLSAgPHBhcmE+Ci0gICAgICAgIFdlIGFyZSBtb3N0IGRlZmluaXRlbHkgYSByYWRpby4KLSAgPC9wYXJhPgotICA8cGFyYT4KLSAgICAgICAgRmluYWxseSB3ZSBhbGxvY2F0ZSBvdXIgSS9PIHNwYWNlIHNvIHRoYXQgbm9ib2R5IHRyZWFkcyBvbiB1cyBhbmQgcmV0dXJuIDAKLSAgICAgICAgdG8gc2lnbmlmeSBnZW5lcmFsIGhhcHBpbmVzcyB3aXRoIHRoZSBzdGF0ZSBvZiB0aGUgdW5pdmVyc2UuCi0gIDwvcGFyYT4KLSAgPC9zZWN0MT4KLSAgPHNlY3QxIGlkPSJvcGVucmFkaW8iPgotICA8dGl0bGU+T3BlbmluZyBBbmQgQ2xvc2luZyBUaGUgUmFkaW88L3RpdGxlPgotCi0gIDxwYXJhPgotICAgICAgICBUaGUgZnVuY3Rpb25zIHdlIGRlY2xhcmVkIGluIG91ciB2aWRlb19kZXZpY2UgYXJlIG1vc3RseSB2ZXJ5IHNpbXBsZS4KLSAgICAgICAgRmlyc3RseSB3ZSBjYW4gZHJvcCBpbiB3aGF0IGlzIGJhc2ljYWxseSBzdGFuZGFyZCBjb2RlIGZvciBvcGVuIGFuZCBjbG9zZS4gCi0gIDwvcGFyYT4KLSAgPHByb2dyYW1saXN0aW5nPgotCi0KLXN0YXRpYyBpbnQgdXNlcnMgPSAwOwotCi1zdGF0aWMgaW50IHJhZGlvX29wZW4oc3RydWN0IHZpZGVvX2RldmljZSAqZGV2LCBpbnQgZmxhZ3MpCi17Ci0gICAgICAgIGlmKHVzZXJzKQotICAgICAgICAgICAgICAgIHJldHVybiAtRUJVU1k7Ci0gICAgICAgIHVzZXJzKys7Ci0gICAgICAgIHJldHVybiAwOwotfQotCi0gIDwvcHJvZ3JhbWxpc3Rpbmc+Ci0gIDxwYXJhPgotICAgICAgICBBdCBvcGVuIHRpbWUgd2UgbmVlZCB0byBkbyBub3RoaW5nIGJ1dCBjaGVjayBpZiBzb21lb25lIGVsc2UgaXMgYWxzbyB1c2luZwotICAgICAgICB0aGUgcmFkaW8gY2FyZC4gSWYgbm9ib2R5IGlzIHVzaW5nIGl0IHdlIG1ha2UgYSBub3RlIHRoYXQgd2UgYXJlIHVzaW5nIGl0LAotICAgICAgICB0aGVuIHdlIGVuc3VyZSB0aGF0IG5vYm9keSB1bmxvYWRzIG91ciBkcml2ZXIgb24gdXMuCi0gIDwvcGFyYT4KLSAgPHByb2dyYW1saXN0aW5nPgotCi0KLXN0YXRpYyBpbnQgcmFkaW9fY2xvc2Uoc3RydWN0IHZpZGVvX2RldmljZSAqZGV2KQotewotICAgICAgICB1c2Vycy0tOwotfQotCi0gIDwvcHJvZ3JhbWxpc3Rpbmc+Ci0gIDxwYXJhPgotICAgICAgICBBdCBjbG9zZSB0aW1lIHdlIHNpbXBseSBuZWVkIHRvIHJlZHVjZSB0aGUgdXNlciBjb3VudCBhbmQgYWxsb3cgdGhlIG1vZHVsZQotICAgICAgICB0byBiZWNvbWUgdW5sb2FkYWJsZS4KLSAgPC9wYXJhPgotICA8cGFyYT4KLSAgICAgICAgSWYgeW91IGFyZSBzaGFycCB5b3Ugd2lsbCBoYXZlIG5vdGljZWQgbmVpdGhlciB0aGUgb3BlbiBub3IgdGhlIGNsb3NlCi0gICAgICAgIHJvdXRpbmVzIGF0dGVtcHQgdG8gcmVzZXQgb3IgY2hhbmdlIHRoZSByYWRpbyBzZXR0aW5ncy4gVGhpcyBpcyBpbnRlbnRpb25hbC4KLSAgICAgICAgSXQgYWxsb3dzIGFuIGFwcGxpY2F0aW9uIHRvIHNldCB1cCB0aGUgcmFkaW8gYW5kIGV4aXQuIEl0IGF2b2lkcyBhIHVzZXIKLSAgICAgICAgaGF2aW5nIHRvIGxlYXZlIGFuIGFwcGxpY2F0aW9uIHJ1bm5pbmcgYWxsIHRoZSB0aW1lIGp1c3QgdG8gbGlzdGVuIHRvIHRoZQotICAgICAgICByYWRpby4gCi0gIDwvcGFyYT4KLSAgPC9zZWN0MT4KLSAgPHNlY3QxIGlkPSJpb2N0bHJhZGlvIj4KLSAgPHRpdGxlPlRoZSBJb2N0bCBJbnRlcmZhY2U8L3RpdGxlPgotICA8cGFyYT4KLSAgICAgICAgVGhpcyBsZWF2ZXMgdGhlIGlvY3RsIHJvdXRpbmUsIHdpdGhvdXQgd2hpY2ggdGhlIGRyaXZlciB3aWxsIG5vdCBiZQotICAgICAgICB0ZXJyaWJseSB1c2VmdWwgdG8gYW55b25lLgotICA8L3BhcmE+Ci0gIDxwcm9ncmFtbGlzdGluZz4KLQotCi1zdGF0aWMgaW50IHJhZGlvX2lvY3RsKHN0cnVjdCB2aWRlb19kZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IGNtZCwgdm9pZCAqYXJnKQotewotICAgICAgICBzd2l0Y2goY21kKQotICAgICAgICB7Ci0gICAgICAgICAgICAgICAgY2FzZSBWSURJT0NHQ0FQOgotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB2aWRlb19jYXBhYmlsaXR5IHY7Ci0gICAgICAgICAgICAgICAgICAgICAgICB2LnR5cGUgPSBWSURfVFlQRV9UVU5FUjsKLSAgICAgICAgICAgICAgICAgICAgICAgIHYuY2hhbm5lbHMgPSAxOwotICAgICAgICAgICAgICAgICAgICAgICAgdi5hdWRpb3MgPSAxOwotICAgICAgICAgICAgICAgICAgICAgICAgdi5tYXh3aWR0aCA9IDA7Ci0gICAgICAgICAgICAgICAgICAgICAgICB2Lm1pbndpZHRoID0gMDsKLSAgICAgICAgICAgICAgICAgICAgICAgIHYubWF4aGVpZ2h0ID0gMDsKLSAgICAgICAgICAgICAgICAgICAgICAgIHYubWluaGVpZ2h0ID0gMDsKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0cmNweSh2Lm5hbWUsICJNeSBSYWRpbyIpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYoY29weV90b191c2VyKGFyZywgJmFtcDt2LCBzaXplb2YodikpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLUVGQVVMVDsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgICAgIH0KLQotICA8L3Byb2dyYW1saXN0aW5nPgotICA8cGFyYT4KLSAgICAgICAgVklESU9DR0NBUCBpcyB0aGUgZmlyc3QgaW9jdGwgYWxsIHZpZGVvNGxpbnV4IGRldmljZXMgbXVzdCBzdXBwb3J0LiBJdAotICAgICAgICBhbGxvd3MgdGhlIGFwcGxpY2F0aW9ucyB0byBmaW5kIG91dCB3aGF0IHNvcnQgb2YgYSBjYXJkIHRoZXkgaGF2ZSBmb3VuZCBhbmQKLSAgICAgICAgdG8gZmlndXJlIG91dCB3aGF0IHRoZXkgd2FudCB0byBkbyBhYm91dCBpdC4gVGhlIGZpZWxkcyBpbiB0aGUgc3RydWN0dXJlIGFyZQotICA8L3BhcmE+Ci0gICA8dGFibGUgZnJhbWU9ImFsbCIgaWQ9InZpZGVvX2NhcGFiaWxpdHlfZmllbGRzIj48dGl0bGU+c3RydWN0IHZpZGVvX2NhcGFiaWxpdHkgZmllbGRzPC90aXRsZT4KLSAgIDx0Z3JvdXAgY29scz0iMiIgYWxpZ249ImxlZnQiPgotICAgPHRib2R5PgotICAgPHJvdz4KLSAgICAgICAgPGVudHJ5Pm5hbWU8L2VudHJ5PjxlbnRyeT5UaGUgZGV2aWNlIHRleHQgbmFtZS4gVGhpcyBpcyBpbnRlbmRlZCBmb3IgdGhlIHVzZXIuPC9lbnRyeT4KLQk8L3Jvdz48cm93PgotICAgICAgICA8ZW50cnk+Y2hhbm5lbHM8L2VudHJ5PjxlbnRyeT5UaGUgbnVtYmVyIG9mIGRpZmZlcmVudCBjaGFubmVscyB5b3UgY2FuIHR1bmUgb24KLSAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMgY2FyZC4gSXQgY291bGQgZXZlbiBieSB6ZXJvIGZvciBhIGNhcmQgdGhhdCBoYXMKLSAgICAgICAgICAgICAgICAgICAgICAgIG5vIHR1bmluZyBjYXBhYmlsaXR5LiBGb3Igb3VyIHNpbXBsZSBGTSByYWRpbyBpdCBpcyAxLiAKLSAgICAgICAgICAgICAgICAgICAgICAgIEFuIEFNL0ZNIHJhZGlvIHdvdWxkIHJlcG9ydCAyLjwvZW50cnk+Ci0JPC9yb3c+PHJvdz4KLSAgICAgICAgPGVudHJ5PmF1ZGlvczwvZW50cnk+PGVudHJ5PlRoZSBudW1iZXIgb2YgYXVkaW8gaW5wdXRzIG9uIHRoaXMgZGV2aWNlLiBGb3Igb3VyCi0gICAgICAgICAgICAgICAgICAgICAgICByYWRpbyB0aGVyZSBpcyBvbmx5IG9uZSBhdWRpbyBpbnB1dC48L2VudHJ5PgotCTwvcm93Pjxyb3c+Ci0gICAgICAgIDxlbnRyeT5taW53aWR0aCxtaW5oZWlnaHQ8L2VudHJ5PjxlbnRyeT5UaGUgc21hbGxlc3Qgc2l6ZSB0aGUgY2FyZCBpcyBjYXBhYmxlIG9mIGNhcHR1cmluZwotCQkgICAgICAgIGltYWdlcyBpbi4gV2Ugc2V0IHRoZXNlIHRvIHplcm8uIFJhZGlvcyBkbyBub3QKLSAgICAgICAgICAgICAgICAgICAgICAgIGNhcHR1cmUgcGljdHVyZXM8L2VudHJ5PgotCTwvcm93Pjxyb3c+Ci0gICAgICAgIDxlbnRyeT5tYXh3aWR0aCxtYXhoZWlnaHQ8L2VudHJ5PjxlbnRyeT5UaGUgbGFyZ2VzdCBpbWFnZSBzaXplIHRoZSBjYXJkIGlzIGNhcGFibGUgb2YKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FwdHVyaW5nLiBGb3Igb3VyIHJhZGlvIHdlIHJlcG9ydCAwLgotCQkJCTwvZW50cnk+Ci0JPC9yb3c+PHJvdz4KLSAgICAgICAgPGVudHJ5PnR5cGU8L2VudHJ5PjxlbnRyeT5UaGlzIHJlcG9ydHMgdGhlIGNhcGFiaWxpdGllcyBvZiB0aGUgZGV2aWNlLCBhbmQKLSAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoZXMgdGhlIGZpZWxkIHdlIGZpbGxlZCBpbiBpbiB0aGUgc3RydWN0Ci0gICAgICAgICAgICAgICAgICAgICAgICB2aWRlb19kZXZpY2Ugd2hlbiByZWdpc3RlcmluZy48L2VudHJ5PgotICAgIDwvcm93PgotICAgIDwvdGJvZHk+Ci0gICAgPC90Z3JvdXA+Ci0gICAgPC90YWJsZT4KLSAgPHBhcmE+Ci0gICAgICAgIEhhdmluZyBmaWxsZWQgaW4gdGhlIGZpZWxkcywgd2UgdXNlIGNvcHlfdG9fdXNlciB0byBjb3B5IHRoZSBzdHJ1Y3R1cmUgaW50bwotICAgICAgICB0aGUgdXNlcnMgYnVmZmVyLiBJZiB0aGUgY29weSBmYWlscyB3ZSByZXR1cm4gYW4gRUZBVUxUIHRvIHRoZSBhcHBsaWNhdGlvbgotICAgICAgICBzbyB0aGF0IGl0IGtub3dzIGl0IHRyaWVkIHRvIGZlZWQgdXMgZ2FyYmFnZS4KLSAgPC9wYXJhPgotICA8cGFyYT4KLSAgICAgICAgVGhlIG5leHQgcGFpciBvZiBpb2N0bCBvcGVyYXRpb25zIHNlbGVjdCB3aGljaCB0dW5lciBpcyB0byBiZSB1c2VkIGFuZCBsZXQKLSAgICAgICAgdGhlIGFwcGxpY2F0aW9uIGZpbmQgdGhlIHR1bmVyIHByb3BlcnRpZXMuIFdlIGhhdmUgb25seSBhIHNpbmdsZSBGTSBiYW5kCi0gICAgICAgIHR1bmVyIGluIG91ciBleGFtcGxlIGRldmljZS4KLSAgPC9wYXJhPgotICA8cHJvZ3JhbWxpc3Rpbmc+Ci0KLQotICAgICAgICAgICAgICAgIGNhc2UgVklESU9DR1RVTkVSOgotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB2aWRlb190dW5lciB2OwotICAgICAgICAgICAgICAgICAgICAgICAgaWYoY29weV9mcm9tX3VzZXIoJmFtcDt2LCBhcmcsIHNpemVvZih2KSkhPTApCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtRUZBVUxUOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYodi50dW5lcikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7Ci0gICAgICAgICAgICAgICAgICAgICAgICB2LnJhbmdlbG93PSg4NyoxNjAwMCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB2LnJhbmdlaGlnaD0oMTA4KjE2MDAwKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHYuZmxhZ3MgPSBWSURFT19UVU5FUl9MT1c7Ci0gICAgICAgICAgICAgICAgICAgICAgICB2Lm1vZGUgPSBWSURFT19NT0RFX0FVVE87Ci0gICAgICAgICAgICAgICAgICAgICAgICB2LnNpZ25hbCA9IDB4RkZGRjsKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0cmNweSh2Lm5hbWUsICJGTSIpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYoY29weV90b191c2VyKCZhbXA7diwgYXJnLCBzaXplb2YodikpIT0wKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLUVGQVVMVDsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgICAgIH0KLQotICA8L3Byb2dyYW1saXN0aW5nPgotICA8cGFyYT4KLSAgICAgICAgVGhlIFZJRElPQ0dUVU5FUiBpb2N0bCBhbGxvd3MgYXBwbGljYXRpb25zIHRvIHF1ZXJ5IGEgdHVuZXIuIFRoZSBhcHBsaWNhdGlvbgotICAgICAgICBzZXRzIHRoZSB0dW5lciBmaWVsZCB0byB0aGUgdHVuZXIgbnVtYmVyIGl0IHdpc2hlcyB0byBxdWVyeS4gVGhlIHF1ZXJ5IGRvZXMKLSAgICAgICAgbm90IGNoYW5nZSB0aGUgdHVuZXIgdGhhdCBpcyBiZWluZyB1c2VkLCBpdCBtZXJlbHkgZW5xdWlyZXMgYWJvdXQgdGhlIHR1bmVyCi0gICAgICAgIGluIHF1ZXN0aW9uLgotICA8L3BhcmE+Ci0gIDxwYXJhPgotICAgICAgICBXZSBoYXZlIGV4YWN0bHkgb25lIHR1bmVyIHNvIGFmdGVyIGNvcHlpbmcgdGhlIHVzZXIgYnVmZmVyIHRvIG91ciB0ZW1wb3JhcnkKLSAgICAgICAgc3RydWN0dXJlIHdlIGNvbXBsYWluIGlmIHRoZXkgYXNrZWQgZm9yIGEgdHVuZXIgb3RoZXIgdGhhbiB0dW5lciAwLiAKLSAgPC9wYXJhPgotICA8cGFyYT4KLSAgICAgICAgVGhlIHZpZGVvX3R1bmVyIHN0cnVjdHVyZSBoYXMgdGhlIGZvbGxvd2luZyBmaWVsZHMKLSAgPC9wYXJhPgotICAgPHRhYmxlIGZyYW1lPSJhbGwiIGlkPSJ2aWRlb190dW5lcl9maWVsZHMiPjx0aXRsZT5zdHJ1Y3QgdmlkZW9fdHVuZXIgZmllbGRzPC90aXRsZT4KLSAgIDx0Z3JvdXAgY29scz0iMiIgYWxpZ249ImxlZnQiPgotICAgPHRib2R5PgotICAgPHJvdz4KLSAgICAgICAgPGVudHJ5PmludCB0dW5lcjwvZW50cnk+PGVudHJ5PlRoZSBudW1iZXIgb2YgdGhlIHR1bmVyIGluIHF1ZXN0aW9uPC9lbnRyeT4KLSAgIDwvcm93Pjxyb3c+Ci0gICAgICAgIDxlbnRyeT5jaGFyIG5hbWVbMzJdPC9lbnRyeT48ZW50cnk+QSB0ZXh0IGRlc2NyaXB0aW9uIG9mIHRoaXMgdHVuZXIuICJGTSIgd2lsbCBkbyBmaW5lLgotICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBpcyBpbnRlbmRlZCBmb3IgdGhlIGFwcGxpY2F0aW9uLjwvZW50cnk+Ci0gICA8L3Jvdz48cm93PgotICAgICAgICA8ZW50cnk+dTMyIGZsYWdzPC9lbnRyeT4KLSAgICAgICAgPGVudHJ5PlR1bmVyIGNhcGFiaWxpdHkgZmxhZ3M8L2VudHJ5PgotICAgPC9yb3c+Ci0gICA8cm93PgotICAgICAgICA8ZW50cnk+dTE2IG1vZGU8L2VudHJ5PjxlbnRyeT5UaGUgY3VycmVudCByZWNlcHRpb24gbW9kZTwvZW50cnk+Ci0KLSAgIDwvcm93Pjxyb3c+Ci0gICAgICAgIDxlbnRyeT51MTYgc2lnbmFsPC9lbnRyeT48ZW50cnk+VGhlIHNpZ25hbCBzdHJlbmd0aCBzY2FsZWQgYmV0d2VlbiAwIGFuZCA2NTUzNS4gSWYKLSAgICAgICAgICAgICAgICAgICAgICAgIGEgZGV2aWNlIGNhbm5vdCB0ZWxsIHRoZSBzaWduYWwgc3RyZW5ndGggaXQgc2hvdWxkCi0gICAgICAgICAgICAgICAgICAgICAgICByZXBvcnQgNjU1MzUuIE1hbnkgc2ltcGxlIGNhcmRzIGNvbnRhaW4gb25seSBhIAotICAgICAgICAgICAgICAgICAgICAgICAgc2lnbmFsL25vIHNpZ25hbCBiaXQuIFN1Y2ggY2FyZHMgd2lsbCByZXBvcnQgZWl0aGVyCi0gICAgICAgICAgICAgICAgICAgICAgICAwIG9yIDY1NTM1LjwvZW50cnk+Ci0KLSAgIDwvcm93Pjxyb3c+Ci0gICAgICAgIDxlbnRyeT51MzIgcmFuZ2Vsb3csIHJhbmdlaGlnaDwvZW50cnk+PGVudHJ5PgotICAgICAgICAgICAgICAgICAgICAgICAgVGhlIHJhbmdlIG9mIGZyZXF1ZW5jaWVzIHN1cHBvcnRlZCBieSB0aGUgcmFkaW8KLSAgICAgICAgICAgICAgICAgICAgICAgIG9yIFRWLiBJdCBpcyBzY2FsZWQgYWNjb3JkaW5nIHRvIHRoZSBWSURFT19UVU5FUl9MT1cKLSAgICAgICAgICAgICAgICAgICAgICAgIGZsYWcuPC9lbnRyeT4KLQotICAgIDwvcm93PgotICAgIDwvdGJvZHk+Ci0gICAgPC90Z3JvdXA+Ci0gICAgPC90YWJsZT4KLQotICAgPHRhYmxlIGZyYW1lPSJhbGwiIGlkPSJ2aWRlb190dW5lcl9mbGFncyI+PHRpdGxlPnN0cnVjdCB2aWRlb190dW5lciBmbGFnczwvdGl0bGU+Ci0gICA8dGdyb3VwIGNvbHM9IjIiIGFsaWduPSJsZWZ0Ij4KLSAgIDx0Ym9keT4KLSAgIDxyb3c+Ci0JPGVudHJ5PlZJREVPX1RVTkVSX1BBTDwvZW50cnk+PGVudHJ5PkEgUEFMIFRWIHR1bmVyPC9lbnRyeT4KLQk8L3Jvdz48cm93PgotICAgICAgICA8ZW50cnk+VklERU9fVFVORVJfTlRTQzwvZW50cnk+PGVudHJ5PkFuIE5UU0MgKFVTKSBUViB0dW5lcjwvZW50cnk+Ci0JPC9yb3c+PHJvdz4KLSAgICAgICAgPGVudHJ5PlZJREVPX1RVTkVSX1NFQ0FNPC9lbnRyeT48ZW50cnk+QSBTRUNBTSAoRnJlbmNoKSBUViB0dW5lcjwvZW50cnk+Ci0JPC9yb3c+PHJvdz4KLSAgICAgICAgPGVudHJ5PlZJREVPX1RVTkVSX0xPVzwvZW50cnk+PGVudHJ5PgotICAgICAgICAgICAgIFRoZSB0dW5lciBmcmVxdWVuY3kgaXMgc2NhbGVkIGluIDEvMTZ0aCBvZiBhIEtIegotICAgICAgICAgICAgIHN0ZXBzLiBJZiBub3QgaXQgaXMgaW4gMS8xNnRoIG9mIGEgTUh6IHN0ZXBzCi0JPC9lbnRyeT4KLQk8L3Jvdz48cm93PgotICAgICAgICA8ZW50cnk+VklERU9fVFVORVJfTk9STTwvZW50cnk+PGVudHJ5PlRoZSB0dW5lciBjYW4gc2V0IGl0cyBmb3JtYXQ8L2VudHJ5PgotCTwvcm93Pjxyb3c+Ci0gICAgICAgIDxlbnRyeT5WSURFT19UVU5FUl9TVEVSRU9fT048L2VudHJ5PjxlbnRyeT5UaGUgdHVuZXIgaXMgY3VycmVudGx5IHJlY2VpdmluZyBhIHN0ZXJlbyBzaWduYWw8L2VudHJ5PgotICAgICAgICA8L3Jvdz4KLSAgICA8L3Rib2R5PgotICAgIDwvdGdyb3VwPgotICAgIDwvdGFibGU+Ci0KLSAgIDx0YWJsZSBmcmFtZT0iYWxsIiBpZD0idmlkZW9fdHVuZXJfbW9kZXMiPjx0aXRsZT5zdHJ1Y3QgdmlkZW9fdHVuZXIgbW9kZXM8L3RpdGxlPgotICAgPHRncm91cCBjb2xzPSIyIiBhbGlnbj0ibGVmdCI+Ci0gICA8dGJvZHk+Ci0gICA8cm93PgotICAgICAgICAgICAgICAgIDxlbnRyeT5WSURFT19NT0RFX1BBTDwvZW50cnk+PGVudHJ5PlBBTCBGb3JtYXQ8L2VudHJ5PgotICAgPC9yb3c+PHJvdz4KLSAgICAgICAgICAgICAgICA8ZW50cnk+VklERU9fTU9ERV9OVFNDPC9lbnRyeT48ZW50cnk+TlRTQyBGb3JtYXQgKFVTQSk8L2VudHJ5PgotICAgPC9yb3c+PHJvdz4KLSAgICAgICAgICAgICAgICA8ZW50cnk+VklERU9fTU9ERV9TRUNBTTwvZW50cnk+PGVudHJ5PkZyZW5jaCBGb3JtYXQ8L2VudHJ5PgotICAgPC9yb3c+PHJvdz4KLSAgICAgICAgICAgICAgICA8ZW50cnk+VklERU9fTU9ERV9BVVRPPC9lbnRyeT48ZW50cnk+QSBkZXZpY2UgdGhhdCBkb2VzIG5vdCBuZWVkIHRvIGRvCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVFYgZm9ybWF0IHN3aXRjaGluZzwvZW50cnk+Ci0gICA8L3Jvdz4KLSAgICA8L3Rib2R5PgotICAgIDwvdGdyb3VwPgotICAgIDwvdGFibGU+Ci0gIDxwYXJhPgotICAgICAgICBUaGUgc2V0dGluZ3MgZm9yIHRoZSByYWRpbyBjYXJkIGFyZSB0aHVzIGZhaXJseSBzaW1wbGUuIFdlIHJlcG9ydCB0aGF0IHdlCi0gICAgICAgIGFyZSBhIHR1bmVyIGNhbGxlZCAiRk0iIGZvciBGTSByYWRpby4gSW4gb3JkZXIgdG8gZ2V0IHRoZSBiZXN0IHR1bmluZwotICAgICAgICByZXNvbHV0aW9uIHdlIHJlcG9ydCBWSURFT19UVU5FUl9MT1cgYW5kIHNlbGVjdCB0dW5pbmcgdG8gMS8xNnRoIG9mIEtIei4gSXRzCi0gICAgICAgIHVubGlrZWx5IG91ciBjYXJkIGNhbiBkbyB0aGF0IHJlc29sdXRpb24gYnV0IGl0IGlzIGEgZmFpciBiZXQgdGhlIGNhcmQgY2FuCi0gICAgICAgIGRvIGJldHRlciB0aGFuIDEvMTZ0aCBvZiBhIE1Iei4gVklERU9fVFVORVJfTE9XIGlzIGFwcHJvcHJpYXRlIHRvIGFsbW9zdCBhbGwKLSAgICAgICAgcmFkaW8gdXNhZ2UuCi0gIDwvcGFyYT4KLSAgPHBhcmE+Ci0gICAgICAgIFdlIHJlcG9ydCB0aGF0IHRoZSB0dW5lciBhdXRvbWF0aWNhbGx5IGhhbmRsZXMgZGVjaWRpbmcgd2hhdCBmb3JtYXQgaXQgaXMKLSAgICAgICAgcmVjZWl2aW5nIC0gdHJ1ZSBlbm91Z2ggYXMgaXQgb25seSBoYW5kbGVzIEZNIHJhZGlvLiBPdXIgZXhhbXBsZSBjYXJkIGlzCi0gICAgICAgIGFsc28gaW5jYXBhYmxlIG9mIGRldGVjdGluZyBzdGVyZW8gb3Igc2lnbmFsIHN0cmVuZ3RocyBzbyBpdCByZXBvcnRzIGEKLSAgICAgICAgc3RyZW5ndGggb2YgMHhGRkZGIChtYXhpbXVtKSBhbmQgbm8gc3RlcmVvIGRldGVjdGVkLgotICA8L3BhcmE+Ci0gIDxwYXJhPgotICAgICAgICBUbyBmaW5pc2ggb2ZmIHdlIHNldCB0aGUgcmFuZ2UgdGhhdCBjYW4gYmUgdHVuZWQgdG8gYmUgODctMTA4TWh6LCB0aGUgbm9ybWFsCi0gICAgICAgIEZNIGJyb2FkY2FzdCByYWRpbyByYW5nZS4gSXQgaXMgaW1wb3J0YW50IHRvIGZpbmQgb3V0IHdoYXQgdGhlIGNhcmQgaXMKLSAgICAgICAgYWN0dWFsbHkgY2FwYWJsZSBvZiB0dW5pbmcuIEl0IGlzIGVhc3kgZW5vdWdoIHRvIHNpbXBseSB1c2UgdGhlIEZNIGJyb2FkY2FzdAotICAgICAgICByYW5nZS4gVW5mb3J0dW5hdGVseSBpZiB5b3UgZG8gdGhpcyB5b3Ugd2lsbCBkaXNjb3ZlciB0aGUgRk0gYnJvYWRjYXN0Ci0gICAgICAgIHJhbmdlcyBpbiB0aGUgVVNBLCBFdXJvcGUgYW5kIEphcGFuIGFyZSBhbGwgc3VidGx5IGRpZmZlcmVudCBhbmQgc29tZSB1c2VycwotICAgICAgICBjYW5ub3QgcmVjZWl2ZSBhbGwgdGhlIHN0YXRpb25zIHRoZXkgd2lzaC4KLSAgPC9wYXJhPgotICA8cGFyYT4KLSAgICAgICAgVGhlIGFwcGxpY2F0aW9uIGFsc28gbmVlZHMgdG8gYmUgYWJsZSB0byBzZXQgdGhlIHR1bmVyIGl0IHdpc2hlcyB0byB1c2UuIEluCi0gICAgICAgIG91ciBjYXNlLCB3aXRoIGEgc2luZ2xlIHR1bmVyIHRoaXMgaXMgcmF0aGVyIHNpbXBsZSB0byBhcnJhbmdlLgotICA8L3BhcmE+Ci0gIDxwcm9ncmFtbGlzdGluZz4KLQotICAgICAgICAgICAgICAgIGNhc2UgVklESU9DU1RVTkVSOgotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB2aWRlb190dW5lciB2OwotICAgICAgICAgICAgICAgICAgICAgICAgaWYoY29weV9mcm9tX3VzZXIoJmFtcDt2LCBhcmcsIHNpemVvZih2KSkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtRUZBVUxUOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYodi50dW5lciAhPSAwKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgICAgIH0KLQotICA8L3Byb2dyYW1saXN0aW5nPgotICA8cGFyYT4KLSAgICAgICAgV2UgY29weSB0aGUgdXNlciBzdXBwbGllZCBzdHJ1Y3R1cmUgaW50byBrZXJuZWwgbWVtb3J5IHNvIHdlIGNhbiBleGFtaW5lIGl0LiAKLSAgICAgICAgSWYgdGhlIHVzZXIgaGFzIHNlbGVjdGVkIGEgdHVuZXIgb3RoZXIgdGhhbiB6ZXJvIHdlIHJlamVjdCB0aGUgcmVxdWVzdC4gSWYgCi0gICAgICAgIHRoZXkgd2FudGVkIHR1bmVyIDAgdGhlbiwgc3VycHJpc2luZ2x5IGVub3VnaCwgdGhhdCBpcyB0aGUgY3VycmVudCB0dW5lciBhbHJlYWR5LgotICA8L3BhcmE+Ci0gIDxwYXJhPgotICAgICAgICBUaGUgbmV4dCB0d28gaW9jdGxzIHdlIG5lZWQgdG8gcHJvdmlkZSBhcmUgdG8gZ2V0IGFuZCBzZXQgdGhlIGZyZXF1ZW5jeSBvZgotICAgICAgICB0aGUgcmFkaW8uIFRoZXNlIGJvdGggdXNlIGFuIHVuc2lnbmVkIGxvbmcgYXJndW1lbnQgd2hpY2ggaXMgdGhlIGZyZXF1ZW5jeS4KLSAgICAgICAgVGhlIHNjYWxlIG9mIHRoZSBmcmVxdWVuY3kgZGVwZW5kcyBvbiB0aGUgVklERU9fVFVORVJfTE9XIGZsYWcgYXMgSQotICAgICAgICBtZW50aW9uZWQgZWFybGllciBvbi4gU2luY2Ugd2UgaGF2ZSBWSURFT19UVU5FUl9MT1cgc2V0IHRoaXMgd2lsbCBiZSBpbgotICAgICAgICAxLzE2dGhzIG9mIGEgS0h6LgotICA8L3BhcmE+Ci0gIDxwcm9ncmFtbGlzdGluZz4KLQotc3RhdGljIHVuc2lnbmVkIGxvbmcgY3VycmVudF9mcmVxOwotCi0KLQotICAgICAgICAgICAgICAgIGNhc2UgVklESU9DR0ZSRVE6Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZihjb3B5X3RvX3VzZXIoYXJnLCAmYW1wO2N1cnJlbnRfZnJlcSwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZih1bnNpZ25lZCBsb25nKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FRkFVTFQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKLQotICA8L3Byb2dyYW1saXN0aW5nPgotICA8cGFyYT4KLSAgICAgICAgUXVlcnlpbmcgdGhlIGZyZXF1ZW5jeSBpbiBvdXIgY2FzZSBpcyByZWxhdGl2ZWx5IHNpbXBsZS4gT3VyIHJhZGlvIGNhcmQgaXMKLSAgICAgICAgdG9vIGR1bWIgdG8gbGV0IHVzIHF1ZXJ5IHRoZSBzaWduYWwgc3RyZW5ndGggc28gd2UgcmVtZW1iZXIgb3VyIHNldHRpbmcgaWYgCi0gICAgICAgIHdlIGtub3cgaXQuIEFsbCB3ZSBoYXZlIHRvIGRvIGlzIGNvcHkgaXQgdG8gdGhlIHVzZXIuCi0gIDwvcGFyYT4KLSAgPHByb2dyYW1saXN0aW5nPgotCi0KLSAgICAgICAgICAgICAgICBjYXNlIFZJRElPQ1NGUkVROgotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHUzMiBmcmVxOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYoY29weV9mcm9tX3VzZXIoYXJnLCAmYW1wO2ZyZXEsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YodW5zaWduZWQgbG9uZykpIT0wKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLUVGQVVMVDsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmKGhhcmR3YXJlX3NldF9mcmVxKGZyZXEpJmx0OzApCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOwotICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudF9mcmVxID0gZnJlcTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgICAgIH0KLQotICA8L3Byb2dyYW1saXN0aW5nPgotICA8cGFyYT4KLSAgICAgICAgU2V0dGluZyB0aGUgZnJlcXVlbmN5IGlzIGEgbGl0dGxlIG1vcmUgY29tcGxleC4gV2UgYmVnaW4gYnkgY29weWluZyB0aGUKLSAgICAgICAgZGVzaXJlZCBmcmVxdWVuY3kgaW50byBrZXJuZWwgc3BhY2UuIE5leHQgd2UgY2FsbCBhIGhhcmR3YXJlIHNwZWNpZmljIHJvdXRpbmUKLSAgICAgICAgdG8gc2V0IHRoZSByYWRpbyB1cC4gVGhpcyBtaWdodCBiZSBhcyBzaW1wbGUgYXMgc29tZSBzY2FsaW5nIGFuZCBhIGZldwotICAgICAgICB3cml0ZXMgdG8gYW4gSS9PIHBvcnQuIEZvciBtb3N0IHJhZGlvIGNhcmRzIGl0IHR1cm5zIG91dCBhIGdvb2QgZGVhbCBtb3JlCi0gICAgICAgIGNvbXBsaWNhdGVkIGFuZCBtYXkgaW52b2x2ZSBwcm9ncmFtbWluZyB0aGluZ3MgbGlrZSBhIHBoYXNlIGxvY2tlZCBsb29wIG9uCi0gICAgICAgIHRoZSBjYXJkLiBUaGlzIGlzIHdoYXQgZG9jdW1lbnRhdGlvbiBpcyBmb3IuIAotICA8L3BhcmE+Ci0gIDxwYXJhPgotICAgICAgICBUaGUgZmluYWwgc2V0IG9mIG9wZXJhdGlvbnMgd2UgbmVlZCB0byBwcm92aWRlIGZvciBvdXIgcmFkaW8gYXJlIHRoZSAKLSAgICAgICAgdm9sdW1lIGNvbnRyb2xzLiBOb3QgYWxsIHJhZGlvIGNhcmRzIGNhbiBldmVuIGRvIHZvbHVtZSBjb250cm9sLiBBZnRlciBhbGwKLSAgICAgICAgdGhlcmUgaXMgYSBwZXJmZWN0bHkgZ29vZCB2b2x1bWUgY29udHJvbCBvbiB0aGUgc291bmQgY2FyZC4gV2Ugd2lsbCBhc3N1bWUKLSAgICAgICAgb3VyIHJhZGlvIGNhcmQgaGFzIGEgc2ltcGxlIDQgc3RlcCB2b2x1bWUgY29udHJvbC4KLSAgPC9wYXJhPgotICA8cGFyYT4KLSAgICAgICAgVGhlcmUgYXJlIHR3byBpb2N0bHMgd2l0aCBhdWRpbyB3ZSBuZWVkIHRvIHN1cHBvcnQKLSAgPC9wYXJhPgotICA8cHJvZ3JhbWxpc3Rpbmc+Ci0KLXN0YXRpYyBpbnQgY3VycmVudF92b2x1bWU9MDsKLQotICAgICAgICAgICAgICAgIGNhc2UgVklESU9DR0FVRElPOgotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB2aWRlb19hdWRpbyB2OwotICAgICAgICAgICAgICAgICAgICAgICAgaWYoY29weV9mcm9tX3VzZXIoJmFtcDt2LCBhcmcsIHNpemVvZih2KSkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtRUZBVUxUOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYodi5hdWRpbyAhPSAwKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsKLSAgICAgICAgICAgICAgICAgICAgICAgIHYudm9sdW1lID0gMTYzODQqY3VycmVudF92b2x1bWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICB2LnN0ZXAgPSAxNjM4NDsKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0cmNweSh2Lm5hbWUsICJSYWRpbyIpOwotICAgICAgICAgICAgICAgICAgICAgICAgdi5tb2RlID0gVklERU9fU09VTkRfTU9OTzsKLSAgICAgICAgICAgICAgICAgICAgICAgIHYuYmFsYW5jZSA9IDA7Ci0gICAgICAgICAgICAgICAgICAgICAgICB2LmJhc2UgPSAwOwotICAgICAgICAgICAgICAgICAgICAgICAgdi50cmVibGUgPSAwOwotICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgICAgICBpZihjb3B5X3RvX3VzZXIoYXJnLiAmYW1wO3YsIHNpemVvZih2KSkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtRUZBVUxUOwotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICAgICAgfQotCi0gIDwvcHJvZ3JhbWxpc3Rpbmc+Ci0gIDxwYXJhPgotICAgICAgICBNdWNoIGxpa2UgdGhlIHR1bmVyIHdlIHN0YXJ0IGJ5IGNvcHlpbmcgdGhlIHVzZXIgc3RydWN0dXJlIGludG8ga2VybmVsCi0gICAgICAgIHNwYWNlLiBBZ2FpbiB3ZSBjaGVjayBpZiB0aGUgdXNlciBoYXMgYXNrZWQgZm9yIGEgdmFsaWQgYXVkaW8gaW5wdXQuIFdlIGhhdmUKLSAgICAgICAgb25seSBpbnB1dCAwIGFuZCB3ZSBwdW50IGlmIHRoZXkgYXNrIGZvciBhbm90aGVyIGlucHV0LgotICA8L3BhcmE+Ci0gIDxwYXJhPgotICAgICAgICBUaGVuIHdlIGZpbGwgaW4gdGhlIHZpZGVvX2F1ZGlvIHN0cnVjdHVyZS4gVGhpcyBoYXMgdGhlIGZvbGxvd2luZyBmb3JtYXQKLSAgPC9wYXJhPgotICAgPHRhYmxlIGZyYW1lPSJhbGwiIGlkPSJ2aWRlb19hdWRpb19maWVsZHMiPjx0aXRsZT5zdHJ1Y3QgdmlkZW9fYXVkaW8gZmllbGRzPC90aXRsZT4KLSAgIDx0Z3JvdXAgY29scz0iMiIgYWxpZ249ImxlZnQiPgotICAgPHRib2R5PgotICAgPHJvdz4KLSAgIDxlbnRyeT5hdWRpbzwvZW50cnk+PGVudHJ5PlRoZSBpbnB1dCB0aGUgdXNlciB3aXNoZXMgdG8gcXVlcnk8L2VudHJ5PgotICAgPC9yb3c+PHJvdz4KLSAgIDxlbnRyeT52b2x1bWU8L2VudHJ5PjxlbnRyeT5UaGUgdm9sdW1lIHNldHRpbmcgb24gYSBzY2FsZSBvZiAwLTY1NTM1PC9lbnRyeT4KLSAgIDwvcm93Pjxyb3c+Ci0gICA8ZW50cnk+YmFzZTwvZW50cnk+PGVudHJ5PlRoZSBiYXNlIGxldmVsIG9uIGEgc2NhbGUgb2YgMC02NTUzNTwvZW50cnk+Ci0gICA8L3Jvdz48cm93PgotICAgPGVudHJ5PnRyZWJsZTwvZW50cnk+PGVudHJ5PlRoZSB0cmVibGUgbGV2ZWwgb24gYSBzY2FsZSBvZiAwLTY1NTM1PC9lbnRyeT4KLSAgIDwvcm93Pjxyb3c+Ci0gICA8ZW50cnk+ZmxhZ3M8L2VudHJ5PjxlbnRyeT5UaGUgZmVhdHVyZXMgdGhpcyBhdWRpbyBkZXZpY2Ugc3VwcG9ydHMKLSAgIDwvZW50cnk+Ci0gICA8L3Jvdz48cm93PgotICAgPGVudHJ5Pm5hbWU8L2VudHJ5PjxlbnRyeT5BIHRleHQgbmFtZSB0byBkaXNwbGF5IHRvIHRoZSB1c2VyLiBXZSBwaWNrZWQKLSAgICAgICAgICAgICAgICAgICAgICAgICJSYWRpbyIgYXMgaXQgZXhwbGFpbnMgdGhpbmdzIHF1aXRlIG5pY2VseS48L2VudHJ5PgotICAgPC9yb3c+PHJvdz4KLSAgIDxlbnRyeT5tb2RlPC9lbnRyeT48ZW50cnk+VGhlIGN1cnJlbnQgcmVjZXB0aW9uIG1vZGUgZm9yIHRoZSBhdWRpbwotCi0gICAgICAgICAgICAgICAgV2UgcmVwb3J0IE1PTk8gYmVjYXVzZSBvdXIgY2FyZCBpcyB0b28gc3R1cGlkIHRvIGtub3cgaWYgaXQgaXMgaW4KLSAgICAgICAgICAgICAgICBtb25vIG9yIHN0ZXJlby4gCi0gICA8L2VudHJ5PgotICAgPC9yb3c+PHJvdz4KLSAgIDxlbnRyeT5iYWxhbmNlPC9lbnRyeT48ZW50cnk+VGhlIHN0ZXJlbyBiYWxhbmNlIG9uIGEgc2NhbGUgb2YgMC02NTUzNSwgMzI3NjggaXMKLSAgICAgICAgICAgICAgICAgICAgICAgIG1pZGRsZS48L2VudHJ5PgotICAgPC9yb3c+PHJvdz4KLSAgIDxlbnRyeT5zdGVwPC9lbnRyeT48ZW50cnk+VGhlIHN0ZXAgYnkgd2hpY2ggdGhlIHZvbHVtZSBjb250cm9sIGp1bXBzLiBUaGlzIGlzCi0gICAgICAgICAgICAgICAgICAgICAgICB1c2VkIHRvIGhlbHAgbWFrZSBpdCBlYXN5IGZvciBhcHBsaWNhdGlvbnMgdG8gc2V0IAotICAgICAgICAgICAgICAgICAgICAgICAgc2xpZGVyIGJlaGF2aW91ci48L2VudHJ5PgotICAgPC9yb3c+Ci0gICA8L3Rib2R5PgotICAgPC90Z3JvdXA+Ci0gICA8L3RhYmxlPgotCi0gICA8dGFibGUgZnJhbWU9ImFsbCIgaWQ9InZpZGVvX2F1ZGlvX2ZsYWdzIj48dGl0bGU+c3RydWN0IHZpZGVvX2F1ZGlvIGZsYWdzPC90aXRsZT4KLSAgIDx0Z3JvdXAgY29scz0iMiIgYWxpZ249ImxlZnQiPgotICAgPHRib2R5PgotICAgPHJvdz4KLSAgICAgICAgICAgICAgICA8ZW50cnk+VklERU9fQVVESU9fTVVURTwvZW50cnk+PGVudHJ5PlRoZSBhdWRpbyBpcyBjdXJyZW50bHkgbXV0ZWQuIFdlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bGQgZmFrZSB0aGlzIGluIG91ciBkcml2ZXIgYnV0IHdlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hvb3NlIG5vdCB0byBib3RoZXIuPC9lbnRyeT4KLSAgIDwvcm93Pjxyb3c+Ci0gICAgICAgICAgICAgICAgPGVudHJ5PlZJREVPX0FVRElPX01VVEFCTEU8L2VudHJ5PjxlbnRyeT5UaGUgaW5wdXQgaGFzIGEgbXV0ZSBvcHRpb248L2VudHJ5PgotICAgPC9yb3c+PHJvdz4KLSAgICAgICAgICAgICAgICA8ZW50cnk+VklERU9fQVVESU9fVFJFQkxFPC9lbnRyeT48ZW50cnk+VGhlICBpbnB1dCBoYXMgYSB0cmVibGUgY29udHJvbDwvZW50cnk+Ci0gICA8L3Jvdz48cm93PgotICAgICAgICAgICAgICAgIDxlbnRyeT5WSURFT19BVURJT19CQVNTPC9lbnRyeT48ZW50cnk+VGhlIGlucHV0IGhhcyBhIGJhc2UgY29udHJvbDwvZW50cnk+Ci0gICA8L3Jvdz4KLSAgIDwvdGJvZHk+Ci0gICA8L3Rncm91cD4KLSAgIDwvdGFibGU+Ci0KLSAgIDx0YWJsZSBmcmFtZT0iYWxsIiBpZD0idmlkZW9fYXVkaW9fbW9kZXMiPjx0aXRsZT5zdHJ1Y3QgdmlkZW9fYXVkaW8gbW9kZXM8L3RpdGxlPgotICAgPHRncm91cCBjb2xzPSIyIiBhbGlnbj0ibGVmdCI+Ci0gICA8dGJvZHk+Ci0gICA8cm93PgotICAgICAgICAgICAgICAgIDxlbnRyeT5WSURFT19TT1VORF9NT05PPC9lbnRyeT48ZW50cnk+TW9ubyBzb3VuZDwvZW50cnk+Ci0gICA8L3Jvdz48cm93PgotICAgICAgICAgICAgICAgIDxlbnRyeT5WSURFT19TT1VORF9TVEVSRU88L2VudHJ5PjxlbnRyeT5TdGVyZW8gc291bmQ8L2VudHJ5PgotICAgPC9yb3c+PHJvdz4KLSAgICAgICAgICAgICAgICA8ZW50cnk+VklERU9fU09VTkRfTEFORzE8L2VudHJ5PjxlbnRyeT5BbHRlcm5hdGl2ZSBsYW5ndWFnZSAxIChUViBzcGVjaWZpYyk8L2VudHJ5PgotICAgPC9yb3c+PHJvdz4KLSAgICAgICAgICAgICAgICA8ZW50cnk+VklERU9fU09VTkRfTEFORzI8L2VudHJ5PjxlbnRyeT5BbHRlcm5hdGl2ZSBsYW5ndWFnZSAyIChUViBzcGVjaWZpYyk8L2VudHJ5PgotICAgPC9yb3c+Ci0gICA8L3Rib2R5PgotICAgPC90Z3JvdXA+Ci0gICA8L3RhYmxlPgotICA8cGFyYT4KLSAgICAgICAgSGF2aW5nIGZpbGxlZCBpbiB0aGUgc3RydWN0dXJlIHdlIGNvcHkgaXQgYmFjayB0byB1c2VyIHNwYWNlLgotICA8L3BhcmE+Ci0gIDxwYXJhPgotICAgICAgICBUaGUgVklESU9DU0FVRElPIGlvY3RsIGFsbG93cyB0aGUgdXNlciB0byBzZXQgdGhlIGF1ZGlvIHBhcmFtZXRlcnMgaW4gdGhlCi0gICAgICAgIHZpZGVvX2F1ZGlvIHN0cnVjdHVyZS4gVGhlIGRyaXZlciBkb2VzIGl0cyBiZXN0IHRvIGhvbm91ciB0aGUgcmVxdWVzdC4KLSAgPC9wYXJhPgotICA8cHJvZ3JhbWxpc3Rpbmc+Ci0KLSAgICAgICAgICAgICAgICBjYXNlIFZJRElPQ1NBVURJTzoKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdmlkZW9fYXVkaW8gdjsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmKGNvcHlfZnJvbV91c2VyKCZhbXA7diwgYXJnLCBzaXplb2YodikpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLUVGQVVMVDsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmKHYuYXVkaW8pCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOwotICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudF92b2x1bWUgPSB2LzE2Mzg0OwotICAgICAgICAgICAgICAgICAgICAgICAgaGFyZHdhcmVfc2V0X3ZvbHVtZShjdXJyZW50X3ZvbHVtZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgPC9wcm9ncmFtbGlzdGluZz4KLSAgPHBhcmE+Ci0gICAgICAgIEluIG91ciBjYXNlIHRoZXJlIGlzIHZlcnkgbGl0dGxlIHRoYXQgdGhlIHVzZXIgY2FuIHNldC4gVGhlIHZvbHVtZSBpcwotICAgICAgICBiYXNpY2FsbHkgdGhlIGxpbWl0LiBOb3RlIHRoYXQgd2UgY291bGQgcHJldGVuZCB0byBoYXZlIGEgbXV0ZSBmZWF0dXJlCi0gICAgICAgIGJ5IHJld3JpdGluZyB0aGlzIHRvIAotICA8L3BhcmE+Ci0gIDxwcm9ncmFtbGlzdGluZz4KLQotICAgICAgICAgICAgICAgIGNhc2UgVklESU9DU0FVRElPOgotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB2aWRlb19hdWRpbyB2OwotICAgICAgICAgICAgICAgICAgICAgICAgaWYoY29weV9mcm9tX3VzZXIoJmFtcDt2LCBhcmcsIHNpemVvZih2KSkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtRUZBVUxUOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYodi5hdWRpbykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50X3ZvbHVtZSA9IHYvMTYzODQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZih2LmZsYWdzJmFtcDtWSURFT19BVURJT19NVVRFKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXJkd2FyZV9zZXRfdm9sdW1lKDApOwotICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXJkd2FyZV9zZXRfdm9sdW1lKGN1cnJlbnRfdm9sdW1lKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRfbXV0ZWQgPSB2LmZsYWdzICZhbXA7IAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZJREVPX0FVRElPX01VVEU7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgPC9wcm9ncmFtbGlzdGluZz4KLSAgPHBhcmE+Ci0gICAgICAgIFRoaXMgd2l0aCB0aGUgY29ycmVzcG9uZGluZyBjaGFuZ2VzIHRvIHRoZSBWSURJT0NHQVVESU8gY29kZSB0byByZXBvcnQgdGhlCi0gICAgICAgIHN0YXRlIG9mIHRoZSBtdXRlIGZsYWcgd2Ugc2F2ZSBhbmQgdG8gcmVwb3J0IHRoZSBjYXJkIGhhcyBhIG11dGUgZnVuY3Rpb24sCi0gICAgICAgIHdpbGwgYWxsb3cgYXBwbGljYXRpb25zIHRvIHVzZSBhIG11dGUgZmFjaWxpdHkgd2l0aCB0aGlzIGNhcmQuIEl0IGlzCi0gICAgICAgIHF1ZXN0aW9uYWJsZSB3aGV0aGVyIHRoaXMgaXMgYSBnb29kIGlkZWEgaG93ZXZlci4gVXNlciBhcHBsaWNhdGlvbnMgY2FuIGFscmVhZHkKLSAgICAgICAgZmFrZSB0aGlzIHRoZW1zZWx2ZXMgYW5kIGtlcm5lbCBzcGFjZSBpcyBwcmVjaW91cy4KLSAgPC9wYXJhPgotICA8cGFyYT4KLSAgICAgICAgV2Ugbm93IGhhdmUgYSB3b3JraW5nIHJhZGlvIGlvY3RsIGhhbmRsZXIuIFNvIHdlIGp1c3Qgd3JhcCB1cCB0aGUgZnVuY3Rpb24KLSAgPC9wYXJhPgotICA8cHJvZ3JhbWxpc3Rpbmc+Ci0KLQotICAgICAgICB9Ci0gICAgICAgIHJldHVybiAtRU5PSU9DVExDTUQ7Ci19Ci0KLSAgPC9wcm9ncmFtbGlzdGluZz4KLSAgPHBhcmE+Ci0gICAgICAgIGFuZCBwYXNzIHRoZSBWaWRlbzRMaW51eCBsYXllciBiYWNrIGFuIGVycm9yIHNvIHRoYXQgaXQga25vd3Mgd2UgZGlkIG5vdAotICAgICAgICB1bmRlcnN0YW5kIHRoZSByZXF1ZXN0IHdlIGdvdCBwYXNzZWQuCi0gIDwvcGFyYT4KLSAgPC9zZWN0MT4KLSAgPHNlY3QxIGlkPSJtb2RyYWRpbyI+Ci0gIDx0aXRsZT5Nb2R1bGUgV3JhcHBlcjwvdGl0bGU+Ci0gIDxwYXJhPgotICAgICAgICBGaW5hbGx5IHdlIGFkZCBpbiB0aGUgdXN1YWwgbW9kdWxlIHdyYXBwaW5nIGFuZCB0aGUgZHJpdmVyIGlzIGRvbmUuCi0gIDwvcGFyYT4KLSAgPHByb2dyYW1saXN0aW5nPgotCi0jaWZuZGVmIE1PRFVMRQotCi1zdGF0aWMgaW50IGlvID0gMHgzMDA7Ci0KLSNlbHNlCi0KLXN0YXRpYyBpbnQgaW8gPSAtMTsKLQotI2VuZGlmCi0KLU1PRFVMRV9BVVRIT1IoIkFsYW4gQ294Iik7Ci1NT0RVTEVfREVTQ1JJUFRJT04oIkEgZHJpdmVyIGZvciBhbiBpbWFnaW5hcnkgcmFkaW8gY2FyZC4iKTsKLW1vZHVsZV9wYXJhbShpbywgaW50LCAwNDQ0KTsKLU1PRFVMRV9QQVJNX0RFU0MoaW8sICJJL08gYWRkcmVzcyBvZiB0aGUgY2FyZC4iKTsKLQotc3RhdGljIGludCBfX2luaXQgaW5pdCh2b2lkKQotewotICAgICAgICBpZihpbz09LTEpCi0gICAgICAgIHsKLSAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9FUlIgCi0gICAgICAgICAiWW91IG11c3Qgc2V0IGFuIEkvTyBhZGRyZXNzIHdpdGggaW89MHg/Pz9cbiIpOwotICAgICAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBteXJhZGlvX2luaXQoTlVMTCk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fZXhpdCBjbGVhbnVwKHZvaWQpCi17Ci0gICAgICAgIHZpZGVvX3VucmVnaXN0ZXJfZGV2aWNlKCZhbXA7bXlfcmFkaW8pOwotICAgICAgICByZWxlYXNlX3JlZ2lvbihpbywgTVlfSU9fU0laRSk7Ci19Ci0KLW1vZHVsZV9pbml0KGluaXQpOwotbW9kdWxlX2V4aXQoY2xlYW51cCk7Ci0KLSAgPC9wcm9ncmFtbGlzdGluZz4KLSAgPHBhcmE+Ci0gICAgICAgIEluIHRoaXMgZXhhbXBsZSB3ZSBzZXQgdGhlIElPIGJhc2UgYnkgZGVmYXVsdCBpZiB0aGUgZHJpdmVyIGlzIGNvbXBpbGVkIGludG8KLSAgICAgICAgdGhlIGtlcm5lbDogeW91IGNhbiBzdGlsbCBzZXQgaXQgdXNpbmcgIm15X3JhZGlvLmlycSIgaWYgdGhpcyBmaWxlIGlzIGNhbGxlZCA8ZmlsZW5hbWU+bXlfcmFkaW8uYzwvZmlsZW5hbWU+LiBGb3IgdGhlIG1vZHVsZSB3ZSByZXF1aXJlIHRoZQotICAgICAgICB1c2VyIHNldHMgdGhlIHBhcmFtZXRlci4gV2Ugc2V0IGlvIHRvIGEgbm9uc2Vuc2UgcG9ydCAoLTEpIHNvIHRoYXQgd2UgY2FuCi0gICAgICAgIHRlbGwgaWYgdGhlIHVzZXIgc3VwcGxpZWQgYW4gaW8gcGFyYW1ldGVyIG9yIG5vdC4KLSAgPC9wYXJhPgotICA8cGFyYT4KLSAgICAgICAgV2UgdXNlIE1PRFVMRV8gZGVmaW5lcyB0byBnaXZlIGFuIGF1dGhvciBmb3IgdGhlIGNhcmQgZHJpdmVyIGFuZCBhCi0gICAgICAgIGRlc2NyaXB0aW9uLiBXZSBhbHNvIHVzZSB0aGVtIHRvIGRlY2xhcmUgdGhhdCBpbyBpcyBhbiBpbnRlZ2VyIGFuZCBpdCBpcyB0aGUKLSAgICAgICAgYWRkcmVzcyBvZiB0aGUgY2FyZCwgYW5kIGNhbiBiZSByZWFkIGJ5IGFueW9uZSBmcm9tIHN5c2ZzLgotICA8L3BhcmE+Ci0gIDxwYXJhPgotICAgICAgICBUaGUgY2xlYW4tdXAgcm91dGluZSB1bnJlZ2lzdGVycyB0aGUgdmlkZW9fZGV2aWNlIHdlIHJlZ2lzdGVyZWQsIGFuZCBmcmVlcwotICAgICAgICB1cCB0aGUgSS9PIHNwYWNlLiBOb3RlIHRoYXQgdGhlIHVucmVnaXN0ZXIgdGFrZXMgdGhlIGFjdHVhbCB2aWRlb19kZXZpY2UKLSAgICAgICAgc3RydWN0dXJlIGFzIGl0cyBhcmd1bWVudC4gVW5saWtlIHRoZSBmaWxlIG9wZXJhdGlvbnMgc3RydWN0dXJlIHdoaWNoIGNhbiBiZQotICAgICAgICBzaGFyZWQgYnkgYWxsIGluc3RhbmNlcyBvZiBhIGRldmljZSBhIHZpZGVvX2RldmljZSBzdHJ1Y3R1cmUgYXMgYW4gYWN0dWFsCi0gICAgICAgIGluc3RhbmNlIG9mIHRoZSBkZXZpY2UuIElmIHlvdSBhcmUgcmVnaXN0ZXJpbmcgbXVsdGlwbGUgcmFkaW8gZGV2aWNlcyB5b3UKLSAgICAgICAgbmVlZCB0byBmaWxsIGluIG9uZSBzdHJ1Y3R1cmUgcGVyIGRldmljZSAobW9zdCBsaWtlbHkgYnkgc2V0dGluZyB1cCBhCi0gICAgICAgIHRlbXBsYXRlIGFuZCBjb3B5aW5nIGl0IHRvIGVhY2ggb2YgdGhlIGFjdHVhbCBkZXZpY2Ugc3RydWN0dXJlcykuCi0gIDwvcGFyYT4KLSAgPC9zZWN0MT4KLSAgPC9jaGFwdGVyPgotICA8Y2hhcHRlciBpZD0iVmlkZW9fQ2FwdHVyZV9EZXZpY2VzIj4KLSAgICAgICAgPHRpdGxlPlZpZGVvIENhcHR1cmUgRGV2aWNlczwvdGl0bGU+Ci0gIDxzZWN0MSBpZD0iaW50cm92aWQiPgotICA8dGl0bGU+VmlkZW8gQ2FwdHVyZSBEZXZpY2UgVHlwZXM8L3RpdGxlPgotICA8cGFyYT4KLSAgICAgICAgVGhlIHZpZGVvIGNhcHR1cmUgZGV2aWNlcyBzaGFyZSB0aGUgc2FtZSBpbnRlcmZhY2VzIGFzIHJhZGlvIGRldmljZXMuIEluCi0gICAgICAgIG9yZGVyIHRvIGV4cGxhaW4gdGhlIHZpZGVvIGNhcHR1cmUgaW50ZXJmYWNlIEkgd2lsbCB1c2UgdGhlIGV4YW1wbGUgb2YgYQotICAgICAgICBjYW1lcmEgdGhhdCBoYXMgbm8gdHVuZXJzIG9yIGF1ZGlvIGlucHV0LiBUaGlzIGtlZXBzIHRoZSBleGFtcGxlIHJlbGF0aXZlbHkKLSAgICAgICAgY2xlYW4uIFRvIGdldCBib3RoIGNvbWJpbmUgdGhlIHR3byBkcml2ZXIgZXhhbXBsZXMuCi0gIDwvcGFyYT4KLSAgPHBhcmE+Ci0gICAgICAgIFZpZGVvIGNhcHR1cmUgZGV2aWNlcyBkaXZpZGUgaW50byBmb3VyIGNhdGVnb3JpZXMuIEEgbGl0dGxlIHRlY2hub2xvZ3kKLSAgICAgICAgYmFja2dyb3VuZGVyLiBGdWxsIG1vdGlvbiB2aWRlbyBldmVuIGF0IHRlbGV2aXNpb24gcmVzb2x1dGlvbiAod2hpY2ggaXMKLSAgICAgICAgYWN0dWFsbHkgZmFpcmx5IGxvdykgaXMgcHJldHR5IHJlc291cmNlLWludGVuc2l2ZS4gWW91IGFyZSBjb250aW51YWxseQotICAgICAgICBwYXNzaW5nIG1lZ2FieXRlcyBvZiBkYXRhIGV2ZXJ5IHNlY29uZCBmcm9tIHRoZSBjYXB0dXJlIGNhcmQgdG8gdGhlIGRpc3BsYXkuIAotICAgICAgICBzZXZlcmFsIGFsdGVybmF0aXZlIGFwcHJvYWNoZXMgaGF2ZSBlbWVyZ2VkIGJlY2F1c2UgY29weWluZyB0aGlzIHRocm91Z2ggdGhlIAotICAgICAgICBwcm9jZXNzb3IgYW5kIHRoZSB1c2VyIHByb2dyYW0gaXMgYSBwYXJ0aWN1bGFybHkgYmFkIGlkZWEgLgotICA8L3BhcmE+Ci0gIDxwYXJhPgotICAgICAgICBUaGUgZmlyc3QgaXMgdG8gYWRkIHRoZSB0ZWxldmlzaW9uIGltYWdlIG9udG8gdGhlIHZpZGVvIG91dHB1dCBkaXJlY3RseS4KLSAgICAgICAgVGhpcyBpcyBhbHNvIGhvdyBzb21lIDNEIGNhcmRzIHdvcmsuIFRoZXNlIGJhc2ljIGNhcmRzIGNhbiBnZW5lcmFsbHkgZHJvcCB0aGUKLSAgICAgICAgdmlkZW8gaW50byBhbnkgY2hvc2VuIHJlY3RhbmdsZSBvZiB0aGUgZGlzcGxheS4gQ2FyZHMgbGlrZSB0aGlzLCB3aGljaAotICAgICAgICBpbmNsdWRlIG1vc3QgbXBlZzEgY2FyZHMgdGhhdCB1c2VkIHRoZSBmZWF0dXJlIGNvbm5lY3RvciwgIGFyZW4ndCB2ZXJ5Ci0gICAgICAgIGZyaWVuZGx5IGluIGEgd2luZG93aW5nIGVudmlyb25tZW50LiBUaGV5IGRvbid0IHVuZGVyc3RhbmQgd2luZG93cyBvcgotICAgICAgICBjbGlwcGluZy4gVGhlIHZpZGVvIHdpbmRvdyBpcyBhbHdheXMgb24gdGhlIHRvcCBvZiB0aGUgZGlzcGxheS4KLSAgPC9wYXJhPgotICA8cGFyYT4KLSAgICAgICAgQ2hyb21hIGtleWluZyBpcyBhIHRlY2huaXF1ZSB1c2VkIGJ5IGNhcmRzIHRvIGdldCBhcm91bmQgdGhpcy4gSXQgaXMgYW4gb2xkCi0gICAgICAgIHRlbGV2aXNpb24gbWl4aW5nIHRyaWNrIHdoZXJlIHlvdSBtYXJrIGFsbCB0aGUgYXJlYXMgeW91IHdpc2ggdG8gcmVwbGFjZQotICAgICAgICB3aXRoIGEgc2luZ2xlIGNsZWFyIGNvbG91ciB0aGF0IGlzbid0IHVzZWQgaW4gdGhlIGltYWdlIC0gVFYgcGVvcGxlIHVzZSBhbgotICAgICAgICBpbmNyZWRpYmx5IGJyaWdodCBibHVlIHdoaWxlIGNvbXB1dGluZyBwZW9wbGUgb2Z0ZW4gdXNlIGEgcGFydGljdWxhcmx5Ci0gICAgICAgIHZpcnVsZW50IHB1cnBsZS4gQnJpZ2h0IGJsdWUgb2NjdXJzIG9uIHRoZSBkZXNrdG9wLiBBbnlvbmUgd2l0aCB2aXJ1bGVudAotICAgICAgICBwdXJwbGUgd2luZG93cyBoYXMgYW5vdGhlciBwcm9ibGVtIGJlc2lkZXMgdGhlaXIgVFYgb3ZlcmxheS4KLSAgPC9wYXJhPgotICA8cGFyYT4KLSAgICAgICAgVGhlIHRoaXJkIGFwcHJvYWNoIGlzIHRvIGNvcHkgdGhlIGRhdGEgZnJvbSB0aGUgY2FwdHVyZSBjYXJkIHRvIHRoZSB2aWRlbwotICAgICAgICBjYXJkLCBidXQgdG8gZG8gaXQgZGlyZWN0bHkgYWNyb3NzIHRoZSBQQ0kgYnVzLiBUaGlzIHJlbGlldmVzIHRoZSBwcm9jZXNzb3IKLSAgICAgICAgZnJvbSBkb2luZyB0aGUgd29yayBidXQgZG9lcyByZXF1aXJlIHNvbWUgc21hcnRuZXNzIG9uIHRoZSBwYXJ0IG9mIHRoZSB2aWRlbwotICAgICAgICBjYXB0dXJlIGNoaXAsIGFzIHdlbGwgYXMgYSBzdWl0YWJsZSB2aWRlbyBjYXJkLiBQcm9ncmFtbWluZyB0aGlzIGtpbmQgb2YKLSAgICAgICAgY2FyZCBhbmQgbW9yZSBzbyBkZWJ1Z2dpbmcgaXQgY2FuIGJlIGV4dHJlbWVseSB0cmlja3kuIFRoZXJlIGFyZSBzb21lIHF1aXRlCi0gICAgICAgIGNvbXBsaWNhdGVkIGludGVyYWN0aW9ucyB3aXRoIHRoZSBkaXNwbGF5IGFuZCB5b3UgbWF5IGFsc28gaGF2ZSB0byBjb3BlIHdpdGgKLSAgICAgICAgdmFyaW91cyBjaGlwc2V0IGJ1Z3MgdGhhdCBzaG93IHVwIHdoZW4gUENJIGNhcmRzIHN0YXJ0IHRhbGtpbmcgdG8gZWFjaAotICAgICAgICBvdGhlci4gCi0gIDwvcGFyYT4KLSAgPHBhcmE+Ci0gICAgICAgIFRvIGtlZXAgb3VyIGV4YW1wbGUgZmFpcmx5IHNpbXBsZSB3ZSB3aWxsIGFzc3VtZSBhIGNhcmQgdGhhdCBzdXBwb3J0cwotICAgICAgICBvdmVybGF5aW5nIGEgZmxhdCByZWN0YW5ndWxhciBpbWFnZSBvbnRvIHRoZSBmcmFtZSBidWZmZXIgb3V0cHV0LCBhbmQgd2hpY2gKLSAgICAgICAgY2FuIGFsc28gY2FwdHVyZSBzdHVmZiBpbnRvIHByb2Nlc3NvciBtZW1vcnkuCi0gIDwvcGFyYT4KLSAgPC9zZWN0MT4KLSAgPHNlY3QxIGlkPSJyZWd2aWQiPgotICA8dGl0bGU+UmVnaXN0ZXJpbmcgVmlkZW8gQ2FwdHVyZSBEZXZpY2VzPC90aXRsZT4KLSAgPHBhcmE+Ci0gICAgICAgIFRoaXMgdGltZSB3ZSBuZWVkIHRvIGFkZCBtb3JlIGZ1bmN0aW9ucyBmb3Igb3VyIGNhbWVyYSBkZXZpY2UuCi0gIDwvcGFyYT4KLSAgPHByb2dyYW1saXN0aW5nPgotc3RhdGljIHN0cnVjdCB2aWRlb19kZXZpY2UgbXlfY2FtZXJhCi17Ci0gICAgICAgICJNeSBDYW1lcmEiLAotICAgICAgICBWSURfVFlQRV9PVkVSTEFZfFZJRF9UWVBFX1NDQUxFU3xcCi0gICAgICAgIFZJRF9UWVBFX0NBUFRVUkV8VklEX1RZUEVfQ0hST01BS0VZLAotICAgICAgICBjYW1lcmFfb3Blbi4KLSAgICAgICAgY2FtZXJhX2Nsb3NlLAotICAgICAgICBjYW1lcmFfcmVhZCwgICAgICAvKiBubyByZWFkICovCi0gICAgICAgIE5VTEwsICAgICAgICAgICAgIC8qIG5vIHdyaXRlICovCi0gICAgICAgIGNhbWVyYV9wb2xsLCAgICAgIC8qIG5vIHBvbGwgKi8KLSAgICAgICAgY2FtZXJhX2lvY3RsLAotICAgICAgICBOVUxMLCAgICAgICAgICAgICAvKiBubyBzcGVjaWFsIGluaXQgZnVuY3Rpb24gKi8KLSAgICAgICAgTlVMTCAgICAgICAgICAgICAgLyogbm8gcHJpdmF0ZSBkYXRhICovCi19OwotICA8L3Byb2dyYW1saXN0aW5nPgotICA8cGFyYT4KLSAgICAgICAgV2UgbmVlZCBhIHJlYWQoKSBmdW5jdGlvbiB3aGljaCBpcyB1c2VkIGZvciBjYXB0dXJpbmcgZGF0YSBmcm9tCi0gICAgICAgIHRoZSBjYXJkLCBhbmQgd2UgbmVlZCBhIHBvbGwgZnVuY3Rpb24gc28gdGhhdCBhIGRyaXZlciBjYW4gd2FpdCBmb3IgdGhlIG5leHQKLSAgICAgICAgZnJhbWUgdG8gYmUgY2FwdHVyZWQuCi0gIDwvcGFyYT4KLSAgPHBhcmE+Ci0gICAgICAgIFdlIHVzZSB0aGUgZXh0cmEgdmlkZW8gY2FwYWJpbGl0eSBmbGFncyB0aGF0IGRpZCBub3QgYXBwbHkgdG8gdGhlCi0gICAgICAgIHJhZGlvIGludGVyZmFjZS4gVGhlIHZpZGVvIHJlbGF0ZWQgZmxhZ3MgYXJlCi0gIDwvcGFyYT4KLSAgIDx0YWJsZSBmcmFtZT0iYWxsIiBpZD0iQ2FwdHVyZV9DYXBhYmlsaXRpZXMiPjx0aXRsZT5DYXB0dXJlIENhcGFiaWxpdGllczwvdGl0bGU+Ci0gICA8dGdyb3VwIGNvbHM9IjIiIGFsaWduPSJsZWZ0Ij4KLSAgIDx0Ym9keT4KLSAgIDxyb3c+Ci08ZW50cnk+VklEX1RZUEVfQ0FQVFVSRTwvZW50cnk+PGVudHJ5PldlIHN1cHBvcnQgaW1hZ2UgY2FwdHVyZTwvZW50cnk+Ci08L3Jvdz48cm93PgotPGVudHJ5PlZJRF9UWVBFX1RFTEVURVhUPC9lbnRyeT48ZW50cnk+QSB0ZWxldGV4dCBjYXB0dXJlIGRldmljZSAodmJpe25dKTwvZW50cnk+Ci08L3Jvdz48cm93PgotPGVudHJ5PlZJRF9UWVBFX09WRVJMQVk8L2VudHJ5PjxlbnRyeT5UaGUgaW1hZ2UgY2FuIGJlIGRpcmVjdGx5IG92ZXJsYWlkIG9udG8gdGhlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lIGJ1ZmZlcjwvZW50cnk+Ci08L3Jvdz48cm93PgotPGVudHJ5PlZJRF9UWVBFX0NIUk9NQUtFWTwvZW50cnk+PGVudHJ5PkNocm9tYWtleSBjYW4gYmUgdXNlZCB0byBzZWxlY3Qgd2hpY2ggcGFydHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2YgdGhlIGltYWdlIHRvIGRpc3BsYXk8L2VudHJ5PgotPC9yb3c+PHJvdz4KLTxlbnRyeT5WSURfVFlQRV9DTElQUElORzwvZW50cnk+PGVudHJ5Pkl0IGlzIHBvc3NpYmxlIHRvIGdpdmUgdGhlIGJvYXJkIGEgbGlzdCBvZgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWN0YW5nbGVzIHRvIGRyYXcgYXJvdW5kLiA8L2VudHJ5PgotPC9yb3c+PHJvdz4KLTxlbnRyeT5WSURfVFlQRV9GUkFNRVJBTTwvZW50cnk+PGVudHJ5PlRoZSB2aWRlbyBjYXB0dXJlIGdvZXMgaW50byB0aGUgdmlkZW8gbWVtb3J5Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBhY3R1YWxseSBjaGFuZ2VzIGl0LiBBcHBsaWNhdGlvbnMgbmVlZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0byBrbm93IHRoaXMgc28gdGhleSBjYW4gY2xlYW4gdXAgYWZ0ZXIgdGhlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhcmQ8L2VudHJ5PgotPC9yb3c+PHJvdz4KLTxlbnRyeT5WSURfVFlQRV9TQ0FMRVM8L2VudHJ5PjxlbnRyeT5UaGUgaW1hZ2UgY2FuIGJlIHNjYWxlZCB0byB2YXJpb3VzIHNpemVzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYXRoZXIgdGhhbiBiZWluZyBhIHNpbmdsZSBmaXhlZCBzaXplLjwvZW50cnk+Ci08L3Jvdz48cm93PgotPGVudHJ5PlZJRF9UWVBFX01PTk9DSFJPTUU8L2VudHJ5PjxlbnRyeT5UaGUgY2FwdHVyZSB3aWxsIGJlIG1vbm9jaHJvbWUuIFRoaXMgaXNuJ3QgYQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wbGV0ZSBhbnN3ZXIgdG8gdGhlIHF1ZXN0aW9uIHNpbmNlIGEgbW9ubwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYW1lcmEgb24gYSBjb2xvdXIgY2FwdHVyZSBjYXJkIHdpbGwgc3RpbGwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvZHVjZSBtb25vIG91dHB1dC48L2VudHJ5PgotPC9yb3c+PHJvdz4KLTxlbnRyeT5WSURfVFlQRV9TVUJDQVBUVVJFPC9lbnRyeT48ZW50cnk+VGhlIGNhcmQgYWxsb3dzIG9ubHkgcGFydCBvZiBpdHMgZmllbGQgb2YKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlldyB0byBiZSBjYXB0dXJlZC4gVGhpcyBlbmFibGVzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcGxpY2F0aW9ucyB0byBhdm9pZCBjb3B5aW5nIGFsbCBvZiBhIGxhcmdlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltYWdlIGludG8gbWVtb3J5IHdoZW4gb25seSBzb21lIHNlY3Rpb24gaXMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVsZXZhbnQuPC9lbnRyeT4KLSAgICA8L3Jvdz4KLSAgICA8L3Rib2R5PgotICAgIDwvdGdyb3VwPgotICAgIDwvdGFibGU+Ci0gIDxwYXJhPgotICAgICAgICBXZSBzZXQgVklEX1RZUEVfQ0FQVFVSRSBzbyB0aGF0IHdlIGFyZSBzZWVuIGFzIGEgY2FwdHVyZSBjYXJkLAotICAgICAgICBWSURfVFlQRV9DSFJPTUFLRVkgc28gdGhlIGFwcGxpY2F0aW9uIGtub3dzIGl0IGlzIHRpbWUgdG8gZHJhdyBpbiB2aXJ1bGVudAotICAgICAgICBwdXJwbGUsIGFuZCBWSURfVFlQRV9TQ0FMRVMgYmVjYXVzZSB3ZSBjYW4gYmUgcmVzaXplZC4KLSAgPC9wYXJhPgotICA8cGFyYT4KLSAgICAgICAgT3VyIHNldHVwIGlzIGZhaXJseSBzaW1pbGFyLiBUaGlzIHRpbWUgd2UgYWxzbyB3YW50IGFuIGludGVycnVwdCBsaW5lCi0gICAgICAgIGZvciB0aGUgJ2ZyYW1lIGNhcHR1cmVkJyBzaWduYWwuIE5vdCBhbGwgY2FyZHMgaGF2ZSB0aGlzIHNvIHNvbWUgb2YgdGhlbQotICAgICAgICBjYW5ub3QgaGFuZGxlIHBvbGwoKS4KLSAgPC9wYXJhPgotICA8cHJvZ3JhbWxpc3Rpbmc+Ci0KLQotc3RhdGljIGludCBpbyA9IDB4MzIwOwotc3RhdGljIGludCBpcnEgPSAxMTsKLQotaW50IF9faW5pdCBteWNhbWVyYV9pbml0KHN0cnVjdCB2aWRlb19pbml0ICp2KQotewotICAgICAgICBpZighcmVxdWVzdF9yZWdpb24oaW8sIE1ZX0lPX1NJWkUsICJteWNhbWVyYSIpKQotICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fRVJSIAotICAgICAgICAgICAgICAgICAgICAgICJteWNhbWVyYTogcG9ydCAweCUwM1ggaXMgaW4gdXNlLlxuIiwgaW8pOwotICAgICAgICAgICAgICAgIHJldHVybiAtRUJVU1k7Ci0gICAgICAgIH0KLQotICAgICAgICBpZih2aWRlb19kZXZpY2VfcmVnaXN0ZXIoJmFtcDtteV9jYW1lcmEsIAotICAgICAgICAgICAgVkZMX1RZUEVfR1JBQkJFUik9PS0xKSB7Ci0gICAgICAgICAgICAgICAgcmVsZWFzZV9yZWdpb24oaW8sIE1ZX0lPX1NJWkUpOwotICAgICAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiAwOwotfQotCi0gIDwvcHJvZ3JhbWxpc3Rpbmc+Ci0gIDxwYXJhPgotICAgICAgICBUaGlzIGlzIGxpdHRsZSBjaGFuZ2VkIGZyb20gdGhlIG5lZWRzIG9mIHRoZSByYWRpbyBjYXJkLiBXZSBzcGVjaWZ5Ci0gICAgICAgIFZGTF9UWVBFX0dSQUJCRVIgdGhpcyB0aW1lIGFzIHdlIHdhbnQgdG8gYmUgYWxsb2NhdGVkIGEgL2Rldi92aWRlbyBuYW1lLgotICA8L3BhcmE+Ci0gIDwvc2VjdDE+Ci0gIDxzZWN0MSBpZD0ib3B2aWQiPgotICA8dGl0bGU+T3BlbmluZyBBbmQgQ2xvc2luZyBUaGUgQ2FwdHVyZSBEZXZpY2U8L3RpdGxlPgotICA8cHJvZ3JhbWxpc3Rpbmc+Ci0KLQotc3RhdGljIGludCB1c2VycyA9IDA7Ci0KLXN0YXRpYyBpbnQgY2FtZXJhX29wZW4oc3RydWN0IHZpZGVvX2RldmljZSAqZGV2LCBpbnQgZmxhZ3MpCi17Ci0gICAgICAgIGlmKHVzZXJzKQotICAgICAgICAgICAgICAgIHJldHVybiAtRUJVU1k7Ci0gICAgICAgIGlmKHJlcXVlc3RfaXJxKGlycSwgY2FtZXJhX2lycSwgMCwgImNhbWVyYSIsIGRldikmbHQ7MCkKLSAgICAgICAgICAgICAgICByZXR1cm4gLUVCVVNZOwotICAgICAgICB1c2VycysrOwotICAgICAgICByZXR1cm4gMDsKLX0KLQotCi1zdGF0aWMgaW50IGNhbWVyYV9jbG9zZShzdHJ1Y3QgdmlkZW9fZGV2aWNlICpkZXYpCi17Ci0gICAgICAgIHVzZXJzLS07Ci0gICAgICAgIGZyZWVfaXJxKGlycSwgZGV2KTsKLX0KLSAgPC9wcm9ncmFtbGlzdGluZz4KLSAgPHBhcmE+Ci0gICAgICAgIFRoZSBvcGVuIGFuZCBjbG9zZSByb3V0aW5lcyBhcmUgYWxzbyBxdWl0ZSBzaW1pbGFyLiBUaGUgb25seSByZWFsIGNoYW5nZSBpcwotICAgICAgICB0aGF0IHdlIG5vdyByZXF1ZXN0IGFuIGludGVycnVwdCBmb3IgdGhlIGNhbWVyYSBkZXZpY2UgaW50ZXJydXB0IGxpbmUuIElmIHdlCi0gICAgICAgIGNhbm5vdCBnZXQgdGhlIGludGVycnVwdCB3ZSByZXBvcnQgRUJVU1kgdG8gdGhlIGFwcGxpY2F0aW9uIGFuZCBnaXZlIHVwLgotICA8L3BhcmE+Ci0gIDwvc2VjdDE+Ci0gIDxzZWN0MSBpZD0iaXJxdmlkIj4KLSAgPHRpdGxlPkludGVycnVwdCBIYW5kbGluZzwvdGl0bGU+Ci0gIDxwYXJhPgotICAgICAgICBPdXIgZXhhbXBsZSBoYW5kbGVyIGlzIGZvciBhbiBJU0EgYnVzIGRldmljZS4gSWYgaXQgd2FzIFBDSSB5b3Ugd291bGQgYmUKLSAgICAgICAgYWJsZSB0byBzaGFyZSB0aGUgaW50ZXJydXB0IGFuZCB3b3VsZCBoYXZlIHNldCBJUlFGX1NIQVJFRCB0byBpbmRpY2F0ZSBhCi0gICAgICAgIHNoYXJlZCBJUlEuIFdlIHBhc3MgdGhlIGRldmljZSBwb2ludGVyIGFzIHRoZSBpbnRlcnJ1cHQgcm91dGluZSBhcmd1bWVudC4gV2UKLSAgICAgICAgZG9uJ3QgbmVlZCB0byBzaW5jZSB3ZSBvbmx5IHN1cHBvcnQgb25lIGNhcmQgYnV0IGRvaW5nIHRoaXMgd2lsbCBtYWtlIGl0Ci0gICAgICAgIGVhc2llciB0byB1cGdyYWRlIHRoZSBkcml2ZXIgZm9yIG11bHRpcGxlIGRldmljZXMgaW4gdGhlIGZ1dHVyZS4KLSAgPC9wYXJhPgotICA8cGFyYT4KLSAgICAgICAgT3VyIGludGVycnVwdCByb3V0aW5lIG5lZWRzIHRvIGRvIGxpdHRsZSBpZiB3ZSBhc3N1bWUgdGhlIGNhcmQgY2FuIHNpbXBseQotICAgICAgICBxdWV1ZSBvbmUgZnJhbWUgdG8gYmUgcmVhZCBhZnRlciBpdCBjYXB0dXJlcyBpdC4gCi0gIDwvcGFyYT4KLSAgPHByb2dyYW1saXN0aW5nPgotCi0KLXN0YXRpYyBzdHJ1Y3Qgd2FpdF9xdWV1ZSAqY2FwdHVyZV93YWl0Owotc3RhdGljIGludCBjYXB0dXJlX3JlYWR5ID0gMDsKLQotc3RhdGljIHZvaWQgY2FtZXJhX2lycShpbnQgaXJxLCB2b2lkICpkZXZfaWQsIAotICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgcHRfcmVncyAqcmVncykKLXsKLSAgICAgICAgY2FwdHVyZV9yZWFkeT0xOwotICAgICAgICB3YWtlX3VwX2ludGVycnVwdGlibGUoJmFtcDtjYXB0dXJlX3dhaXQpOwotfQotICA8L3Byb2dyYW1saXN0aW5nPgotICA8cGFyYT4KLSAgICAgICAgVGhlIGludGVycnVwdCBoYW5kbGVyIGlzIG5pY2UgYW5kIHNpbXBsZSBmb3IgdGhpcyBjYXJkIGFzIHdlIGFyZSBhc3N1bWluZwotICAgICAgICB0aGUgY2FyZCBpcyBidWZmZXJpbmcgdGhlIGZyYW1lIGZvciB1cy4gVGhpcyBtZWFucyB3ZSBoYXZlIGxpdHRsZSB0byBkbyBidXQKLSAgICAgICAgd2FrZSB1cCAgICAgICAgYW55Ym9keSBpbnRlcmVzdGVkLiBXZSBhbHNvIHNldCBhIGNhcHR1cmVfcmVhZHkgZmxhZywgYXMgd2UgbWF5Ci0gICAgICAgIGNhcHR1cmUgYSBmcmFtZSBiZWZvcmUgYW4gYXBwbGljYXRpb24gbmVlZHMgaXQuIEluIHRoaXMgY2FzZSB3ZSBuZWVkIHRvIGtub3cKLSAgICAgICAgdGhhdCBhIGZyYW1lIGlzIHJlYWR5LiBJZiB3ZSBoYWQgdG8gY29sbGVjdCB0aGUgZnJhbWUgb24gdGhlIGludGVycnVwdCBsaWZlCi0gICAgICAgIHdvdWxkIGJlIG1vcmUgY29tcGxleC4KLSAgPC9wYXJhPgotICA8cGFyYT4KLSAgICAgICAgVGhlIHR3byBuZXcgcm91dGluZXMgd2UgbmVlZCB0byBzdXBwbHkgYXJlIGNhbWVyYV9yZWFkIHdoaWNoIHJldHVybnMgYQotICAgICAgICBmcmFtZSwgYW5kIGNhbWVyYV9wb2xsIHdoaWNoIHdhaXRzIGZvciBhIGZyYW1lIHRvIGJlY29tZSByZWFkeS4KLSAgPC9wYXJhPgotICA8cHJvZ3JhbWxpc3Rpbmc+Ci0KLQotc3RhdGljIGludCBjYW1lcmFfcG9sbChzdHJ1Y3QgdmlkZW9fZGV2aWNlICpkZXYsIAotCXN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgcG9sbF90YWJsZSAqd2FpdCkKLXsKLSAgICAgICAgcG9sbF93YWl0KGZpbGUsICZhbXA7Y2FwdHVyZV93YWl0LCB3YWl0KTsKLSAgICAgICAgaWYoY2FwdHVyZV9yZWFkKQotICAgICAgICAgICAgICAgIHJldHVybiBQT0xMSU58UE9MTFJETk9STTsKLSAgICAgICAgcmV0dXJuIDA7Ci19Ci0KLSAgPC9wcm9ncmFtbGlzdGluZz4KLSAgPHBhcmE+Ci0gICAgICAgIE91ciB3YWl0IHF1ZXVlIGZvciBwb2xsaW5nIGlzIHRoZSBjYXB0dXJlX3dhaXQgcXVldWUuIFRoaXMgd2lsbCBjYXVzZSB0aGUKLSAgICAgICAgdGFzayB0byBiZSB3b2tlbiB1cCBieSBvdXIgY2FtZXJhX2lycSByb3V0aW5lLiBXZSBjaGVjayBjYXB0dXJlX3JlYWQgdG8gc2VlCi0gICAgICAgIGlmIHRoZXJlIGlzIGFuIGltYWdlIHByZXNlbnQgYW5kIGlmIHNvIHJlcG9ydCB0aGF0IGl0IGlzIHJlYWRhYmxlLgotICA8L3BhcmE+Ci0gIDwvc2VjdDE+Ci0gIDxzZWN0MSBpZD0icmR2aWQiPgotICA8dGl0bGU+UmVhZGluZyBUaGUgVmlkZW8gSW1hZ2U8L3RpdGxlPgotICA8cHJvZ3JhbWxpc3Rpbmc+Ci0KLQotc3RhdGljIGxvbmcgY2FtZXJhX3JlYWQoc3RydWN0IHZpZGVvX2RldmljZSAqZGV2LCBjaGFyICpidWYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgY291bnQpCi17Ci0gICAgICAgIHN0cnVjdCB3YWl0X3F1ZXVlIHdhaXQgPSB7IGN1cnJlbnQsIE5VTEwgfTsKLSAgICAgICAgdTggKnB0cjsKLSAgICAgICAgaW50IGxlbjsKLSAgICAgICAgaW50IGk7Ci0KLSAgICAgICAgYWRkX3dhaXRfcXVldWUoJmFtcDtjYXB0dXJlX3dhaXQsICZhbXA7d2FpdCk7Ci0KLSAgICAgICAgd2hpbGUoIWNhcHR1cmVfcmVhZHkpCi0gICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZihmaWxlLT5mbGFncyZhbXA7T19OREVMQVkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlX3dhaXRfcXVldWUoJmFtcDtjYXB0dXJlX3dhaXQsICZhbXA7d2FpdCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50LT5zdGF0ZSA9IFRBU0tfUlVOTklORzsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtRVdPVUxEQkxPQ0s7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZV93YWl0X3F1ZXVlKCZhbXA7Y2FwdHVyZV93YWl0LCAmYW1wO3dhaXQpOwotICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudC0+c3RhdGUgPSBUQVNLX1JVTk5JTkc7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLUVSRVNUQVJUU1lTOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBzY2hlZHVsZSgpOwotICAgICAgICAgICAgICAgIGN1cnJlbnQtPnN0YXRlID0gVEFTS19JTlRFUlJVUFRJQkxFOwotICAgICAgICB9Ci0gICAgICAgIHJlbW92ZV93YWl0X3F1ZXVlKCZhbXA7Y2FwdHVyZV93YWl0LCAmYW1wO3dhaXQpOwotICAgICAgICBjdXJyZW50LT5zdGF0ZSA9IFRBU0tfUlVOTklORzsKLQotICA8L3Byb2dyYW1saXN0aW5nPgotICA8cGFyYT4KLSAgICAgICAgVGhlIGZpcnN0IHRoaW5nIHdlIGhhdmUgdG8gZG8gaXMgdG8gZW5zdXJlIHRoYXQgdGhlIGFwcGxpY2F0aW9uIHdhaXRzIHVudGlsCi0gICAgICAgIHRoZSBuZXh0IGZyYW1lIGlzIHJlYWR5LiBUaGUgY29kZSBoZXJlIGlzIGFsbW9zdCBpZGVudGljYWwgdG8gdGhlIG1vdXNlIGNvZGUKLSAgICAgICAgd2UgdXNlZCBlYXJsaWVyIGluIHRoaXMgY2hhcHRlci4gSXQgaXMgb25lIG9mIHRoZSBjb21tb24gYnVpbGRpbmcgYmxvY2tzIG9mCi0gICAgICAgIExpbnV4IGRldmljZSBkcml2ZXIgY29kZSBhbmQgcHJvYmFibHkgb25lIHdoaWNoIHlvdSB3aWxsIGZpbmQgb2NjdXJzIGluIGFueQotICAgICAgICBkcml2ZXJzIHlvdSB3cml0ZS4KLSAgPC9wYXJhPgotICA8cGFyYT4KLSAgICAgICAgV2Ugd2FpdCBmb3IgYSBmcmFtZSB0byBiZSByZWFkeSwgb3IgZm9yIGEgc2lnbmFsIHRvIGludGVycnVwdCBvdXIgd2FpdGluZy4gSWYgYQotICAgICAgICBzaWduYWwgb2NjdXJzIHdlIG5lZWQgdG8gcmV0dXJuIGZyb20gdGhlIHN5c3RlbSBjYWxsIHNvIHRoYXQgdGhlIHNpZ25hbCBjYW4KLSAgICAgICAgYmUgc2VudCB0byB0aGUgYXBwbGljYXRpb24gaXRzZWxmLiBXZSBhbHNvIGNoZWNrIHRvIHNlZSBpZiB0aGUgdXNlciBhY3R1YWxseQotICAgICAgICB3YW50ZWQgdG8gYXZvaWQgd2FpdGluZyAtIGllICBpZiB0aGV5IGFyZSB1c2luZyBub24tYmxvY2tpbmcgSS9PIGFuZCBoYXZlIG90aGVyIHRoaW5ncyAKLSAgICAgICAgdG8gZ2V0IG9uIHdpdGguCi0gIDwvcGFyYT4KLSAgPHBhcmE+Ci0gICAgICAgIE5leHQgd2UgY29weSB0aGUgZGF0YSBmcm9tIHRoZSBjYXJkIHRvIHRoZSB1c2VyIGFwcGxpY2F0aW9uLiBUaGlzIGlzIHJhcmVseQotICAgICAgICBhcyBlYXN5IGFzIG91ciBleGFtcGxlIG1ha2VzIG91dC4gV2Ugd2lsbCBhZGQgY2FwdHVyZV93LCBhbmQgY2FwdHVyZV9oIGhlcmUKLSAgICAgICAgdG8gaG9sZCB0aGUgd2lkdGggYW5kIGhlaWdodCBvZiB0aGUgY2FwdHVyZWQgaW1hZ2UuIFdlIGFzc3VtZSB0aGUgY2FyZCBvbmx5Ci0gICAgICAgIHN1cHBvcnRzIDI0Yml0IFJHQiBmb3Igbm93LgotICA8L3BhcmE+Ci0gIDxwcm9ncmFtbGlzdGluZz4KLQotCi0KLSAgICAgICAgY2FwdHVyZV9yZWFkeSA9IDA7Ci0KLSAgICAgICAgcHRyPSh1OCAqKWJ1ZjsKLSAgICAgICAgbGVuID0gY2FwdHVyZV93ICogMyAqIGNhcHR1cmVfaDsgLyogMjRiaXQgUkdCICovCi0KLSAgICAgICAgaWYobGVuPmNvdW50KQotICAgICAgICAgICAgICAgIGxlbj1jb3VudDsgIC8qIERvZXNuJ3QgYWxsIGZpdCAqLwotCi0gICAgICAgIGZvcihpPTA7IGkmbHQ7bGVuOyBpKyspCi0gICAgICAgIHsKLSAgICAgICAgICAgICAgICBwdXRfdXNlcihpbmIoaW8rSU1BR0VfREFUQSksIHB0cik7Ci0gICAgICAgICAgICAgICAgcHRyKys7Ci0gICAgICAgIH0KLQotICAgICAgICBoYXJkd2FyZV9yZXN0YXJ0X2NhcHR1cmUoKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgcmV0dXJuIGk7Ci19Ci0KLSAgPC9wcm9ncmFtbGlzdGluZz4KLSAgPHBhcmE+Ci0gICAgICAgIEZvciBhIHJlYWwgaGFyZHdhcmUgZGV2aWNlIHlvdSB3b3VsZCB0cnkgdG8gYXZvaWQgdGhlIGxvb3Agd2l0aCBwdXRfdXNlcigpLgotICAgICAgICBFYWNoIGNhbGwgdG8gcHV0X3VzZXIoKSBoYXMgYSB0aW1lIG92ZXJoZWFkIGNoZWNraW5nIHdoZXRoZXIgdGhlIGFjY2Vzc2VzIHRvIHVzZXIKLSAgICAgICAgc3BhY2UgYXJlIGFsbG93ZWQuIEl0IHdvdWxkIGJlIGJldHRlciB0byByZWFkIGEgbGluZSBpbnRvIGEgdGVtcG9yYXJ5IGJ1ZmZlcgotICAgICAgICB0aGVuIGNvcHkgdGhpcyB0byB1c2VyIHNwYWNlIGluIG9uZSBnby4KLSAgPC9wYXJhPgotICA8cGFyYT4KLSAgICAgICAgSGF2aW5nIGNhcHR1cmVkIHRoZSBpbWFnZSBhbmQgcHV0IGl0IGludG8gdXNlciBzcGFjZSB3ZSBjYW4ga2ljayB0aGUgY2FyZCB0bwotICAgICAgICBnZXQgdGhlIG5leHQgZnJhbWUgYWNxdWlyZWQuCi0gIDwvcGFyYT4KLSAgPC9zZWN0MT4KLSAgPHNlY3QxIGlkPSJpb2N2aWQiPgotICA8dGl0bGU+VmlkZW8gSW9jdGwgSGFuZGxpbmc8L3RpdGxlPgotICA8cGFyYT4KLSAgICAgICAgQXMgd2l0aCB0aGUgcmFkaW8gZHJpdmVyIHRoZSBtYWpvciBjb250cm9sIGludGVyZmFjZSBpcyB2aWEgdGhlIGlvY3RsKCkKLSAgICAgICAgZnVuY3Rpb24uIFZpZGVvIGNhcHR1cmUgZGV2aWNlcyBzdXBwb3J0IHRoZSBzYW1lIHR1bmVyIGNhbGxzIGFzIGEgcmFkaW8KLSAgICAgICAgZGV2aWNlIGFuZCBhbHNvIHN1cHBvcnQgYWRkaXRpb25hbCBjYWxscyB0byBjb250cm9sIGhvdyB0aGUgdmlkZW8gZnVuY3Rpb25zCi0gICAgICAgIGFyZSBoYW5kbGVkLiBJbiB0aGlzIHNpbXBsZSBleGFtcGxlIHRoZSBjYXJkIGhhcyBubyB0dW5lcnMgdG8gYXZvaWQgbWFraW5nCi0gICAgICAgIHRoZSBjb2RlIGNvbXBsZXguIAotICA8L3BhcmE+Ci0gIDxwcm9ncmFtbGlzdGluZz4KLQotCi0KLXN0YXRpYyBpbnQgY2FtZXJhX2lvY3RsKHN0cnVjdCB2aWRlb19kZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IGNtZCwgdm9pZCAqYXJnKQotewotICAgICAgICBzd2l0Y2goY21kKQotICAgICAgICB7Ci0gICAgICAgICAgICAgICAgY2FzZSBWSURJT0NHQ0FQOgotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB2aWRlb19jYXBhYmlsaXR5IHY7Ci0gICAgICAgICAgICAgICAgICAgICAgICB2LnR5cGUgPSBWSURfVFlQRV9DQVBUVVJFfFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZJRF9UWVBFX0NIUk9NQUtFWXxcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWSURfVFlQRV9TQ0FMRVN8XAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVklEX1RZUEVfT1ZFUkxBWTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHYuY2hhbm5lbHMgPSAxOwotICAgICAgICAgICAgICAgICAgICAgICAgdi5hdWRpb3MgPSAwOwotICAgICAgICAgICAgICAgICAgICAgICAgdi5tYXh3aWR0aCA9IDY0MDsKLSAgICAgICAgICAgICAgICAgICAgICAgIHYubWlud2lkdGggPSAxNjsKLSAgICAgICAgICAgICAgICAgICAgICAgIHYubWF4aGVpZ2h0ID0gNDgwOwotICAgICAgICAgICAgICAgICAgICAgICAgdi5taW5oZWlnaHQgPSAxNjsKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0cmNweSh2Lm5hbWUsICJNeSBDYW1lcmEiKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmKGNvcHlfdG9fdXNlcihhcmcsICZhbXA7diwgc2l6ZW9mKHYpKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FRkFVTFQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgICAgICB9Ci0KLQotICA8L3Byb2dyYW1saXN0aW5nPgotICA8cGFyYT4KLSAgICAgICAgVGhlIGZpcnN0IGlvY3RsIHdlIG11c3Qgc3VwcG9ydCBhbmQgd2hpY2ggYWxsIHZpZGVvIGNhcHR1cmUgYW5kIHJhZGlvCi0gICAgICAgIGRldmljZXMgYXJlIHJlcXVpcmVkIHRvIHN1cHBvcnQgaXMgVklESU9DR0NBUC4gVGhpcyBiZWhhdmVzIGV4YWN0bHkgdGhlIHNhbWUKLSAgICAgICAgYXMgd2l0aCBhIHJhZGlvIGRldmljZS4gVGhpcyB0aW1lLCBob3dldmVyLCB3ZSByZXBvcnQgdGhlIGV4dHJhIGNhcGFiaWxpdGllcwotICAgICAgICB3ZSBvdXRsaW5lZCBlYXJsaWVyIG9uIHdoZW4gZGVmaW5pbmcgb3VyIHZpZGVvX2RldiBzdHJ1Y3R1cmUuCi0gIDwvcGFyYT4KLSAgPHBhcmE+Ci0gICAgICAgIFdlIG5vdyBzZXQgdGhlIHZpZGVvIGZsYWdzIHNheWluZyB0aGF0IHdlIHN1cHBvcnQgb3ZlcmxheSwgY2FwdHVyZSwKLSAgICAgICAgc2NhbGluZyBhbmQgY2hyb21ha2V5LiBXZSBhbHNvIHJlcG9ydCBzaXplIGxpbWl0cyAtIG91ciBzbWFsbGVzdCBpbWFnZSBpcwotICAgICAgICAxNngxNiBwaXhlbHMsIG91ciBsYXJnZXN0IGlzIDY0MHg0ODAuIAotICA8L3BhcmE+Ci0gIDxwYXJhPgotICAgICAgICBUbyBrZWVwIHRoaW5ncyBzaW1wbGUgd2UgcmVwb3J0IG5vIGF1ZGlvIGFuZCBubyB0dW5pbmcgY2FwYWJpbGl0aWVzIGF0IGFsbC4KLSAgPC9wYXJhPgotICA8cHJvZ3JhbWxpc3Rpbmc+ICAgICAgICAKLQotICAgICAgICAgICAgICAgIGNhc2UgVklESU9DR0NIQU46Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHZpZGVvX2NoYW5uZWwgdjsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmKGNvcHlfZnJvbV91c2VyKCZhbXA7diwgYXJnLCBzaXplb2YodikpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLUVGQVVMVDsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmKHYuY2hhbm5lbCAhPSAwKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsKLSAgICAgICAgICAgICAgICAgICAgICAgIHYuZmxhZ3MgPSAwOwotICAgICAgICAgICAgICAgICAgICAgICAgdi50dW5lcnMgPSAwOwotICAgICAgICAgICAgICAgICAgICAgICAgdi50eXBlID0gVklERU9fVFlQRV9DQU1FUkE7Ci0gICAgICAgICAgICAgICAgICAgICAgICB2Lm5vcm0gPSBWSURFT19NT0RFX0FVVE87Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdHJjcHkodi5uYW1lLCAiQ2FtZXJhIElucHV0Iik7YnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZihjb3B5X3RvX3VzZXIoJmFtcDt2LCBhcmcsIHNpemVvZih2KSkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtRUZBVUxUOwotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICAgICAgfQotCi0KLSAgPC9wcm9ncmFtbGlzdGluZz4KLSAgPHBhcmE+Ci0gICAgICAgIFRoaXMgZm9sbG93cyB3aGF0IGlzIHZlcnkgbXVjaCB0aGUgc3RhbmRhcmQgd2F5IGFuIGlvY3RsIGhhbmRsZXIgbG9va3MKLSAgICAgICAgaW4gTGludXguIFdlIGNvcHkgdGhlIGRhdGEgaW50byBhIGtlcm5lbCBzcGFjZSB2YXJpYWJsZSBhbmQgd2UgY2hlY2sgdGhhdCB0aGUKLSAgICAgICAgcmVxdWVzdCBpcyB2YWxpZCAoaW4gdGhpcyBjYXNlIHRoYXQgdGhlIGlucHV0IGlzIDApLiBGaW5hbGx5IHdlIGNvcHkgdGhlCi0gICAgICAgIGNhbWVyYSBpbmZvIGJhY2sgdG8gdGhlIHVzZXIuCi0gIDwvcGFyYT4KLSAgPHBhcmE+Ci0gICAgICAgIFRoZSBWSURJT0NHQ0hBTiBpb2N0bCBhbGxvd3MgYSB1c2VyIHRvIGFzayBhYm91dCB2aWRlbyBjaGFubmVscyAodGhhdCBpcwotICAgICAgICBpbnB1dHMgdG8gdGhlIHZpZGVvIGNhcmQpLiBPdXIgZXhhbXBsZSBjYXJkIGhhcyBhIHNpbmdsZSBjYW1lcmEgaW5wdXQuIFRoZQotICAgICAgICBmaWVsZHMgaW4gdGhlIHN0cnVjdHVyZSBhcmUKLSAgPC9wYXJhPgotICAgPHRhYmxlIGZyYW1lPSJhbGwiIGlkPSJ2aWRlb19jaGFubmVsX2ZpZWxkcyI+PHRpdGxlPnN0cnVjdCB2aWRlb19jaGFubmVsIGZpZWxkczwvdGl0bGU+Ci0gICA8dGdyb3VwIGNvbHM9IjIiIGFsaWduPSJsZWZ0Ij4KLSAgIDx0Ym9keT4KLSAgIDxyb3c+Ci0KLSAgIDxlbnRyeT5jaGFubmVsPC9lbnRyeT48ZW50cnk+VGhlIGNoYW5uZWwgbnVtYmVyIHdlIGFyZSBzZWxlY3Rpbmc8L2VudHJ5PgotICAgPC9yb3c+PHJvdz4KLSAgIDxlbnRyeT5uYW1lPC9lbnRyeT48ZW50cnk+VGhlIG5hbWUgZm9yIHRoaXMgY2hhbm5lbC4gVGhpcyBpcyBpbnRlbmRlZAotICAgICAgICAgICAgICAgICAgIHRvIGRlc2NyaWJlIHRoZSBwb3J0IHRvIHRoZSB1c2VyLgotICAgICAgICAgICAgICAgICAgIEFwcHJvcHJpYXRlIG5hbWVzIGFyZSB0aGVyZWZvcmUgdGhpbmdzIGxpa2UKLSAgICAgICAgICAgICAgICAgICAiQ2FtZXJhIiAiU0NBUlQgaW5wdXQiPC9lbnRyeT4KLSAgIDwvcm93Pjxyb3c+Ci0gICA8ZW50cnk+ZmxhZ3M8L2VudHJ5PjxlbnRyeT5DaGFubmVsIHByb3BlcnRpZXM8L2VudHJ5PgotICAgPC9yb3c+PHJvdz4KLSAgIDxlbnRyeT50eXBlPC9lbnRyeT48ZW50cnk+SW5wdXQgdHlwZTwvZW50cnk+Ci0gICA8L3Jvdz48cm93PgotICAgPGVudHJ5Pm5vcm08L2VudHJ5PjxlbnRyeT5UaGUgY3VycmVudCB0ZWxldmlzaW9uIGVuY29kaW5nIGJlaW5nIHVzZWQKLSAgICAgICAgICAgICAgICAgICBpZiByZWxldmFudCBmb3IgdGhpcyBjaGFubmVsLgotICAgIDwvZW50cnk+Ci0gICAgPC9yb3c+Ci0gICAgPC90Ym9keT4KLSAgICA8L3Rncm91cD4KLSAgICA8L3RhYmxlPgotICAgIDx0YWJsZSBmcmFtZT0iYWxsIiBpZD0idmlkZW9fY2hhbm5lbF9mbGFncyI+PHRpdGxlPnN0cnVjdCB2aWRlb19jaGFubmVsIGZsYWdzPC90aXRsZT4KLSAgICA8dGdyb3VwIGNvbHM9IjIiIGFsaWduPSJsZWZ0Ij4KLSAgICA8dGJvZHk+Ci0gICAgPHJvdz4KLSAgICAgICAgPGVudHJ5PlZJREVPX1ZDX1RVTkVSPC9lbnRyeT48ZW50cnk+Q2hhbm5lbCBoYXMgYSB0dW5lci48L2VudHJ5PgotICAgPC9yb3c+PHJvdz4KLSAgICAgICAgPGVudHJ5PlZJREVPX1ZDX0FVRElPPC9lbnRyeT48ZW50cnk+Q2hhbm5lbCBoYXMgYXVkaW8uPC9lbnRyeT4KLSAgICA8L3Jvdz4KLSAgICA8L3Rib2R5PgotICAgIDwvdGdyb3VwPgotICAgIDwvdGFibGU+Ci0gICAgPHRhYmxlIGZyYW1lPSJhbGwiIGlkPSJ2aWRlb19jaGFubmVsX3R5cGVzIj48dGl0bGU+c3RydWN0IHZpZGVvX2NoYW5uZWwgdHlwZXM8L3RpdGxlPgotICAgIDx0Z3JvdXAgY29scz0iMiIgYWxpZ249ImxlZnQiPgotICAgIDx0Ym9keT4KLSAgICA8cm93PgotICAgICAgICA8ZW50cnk+VklERU9fVFlQRV9UVjwvZW50cnk+PGVudHJ5PlRlbGV2aXNpb24gaW5wdXQuPC9lbnRyeT4KLSAgIDwvcm93Pjxyb3c+Ci0gICAgICAgIDxlbnRyeT5WSURFT19UWVBFX0NBTUVSQTwvZW50cnk+PGVudHJ5PkZpeGVkIGNhbWVyYSBpbnB1dC48L2VudHJ5PgotICAgPC9yb3c+PHJvdz4KLQk8ZW50cnk+MDwvZW50cnk+PGVudHJ5PlR5cGUgaXMgdW5rbm93bi48L2VudHJ5PgotICAgIDwvcm93PgotICAgIDwvdGJvZHk+Ci0gICAgPC90Z3JvdXA+Ci0gICAgPC90YWJsZT4KLSAgICA8dGFibGUgZnJhbWU9ImFsbCIgaWQ9InZpZGVvX2NoYW5uZWxfbm9ybXMiPjx0aXRsZT5zdHJ1Y3QgdmlkZW9fY2hhbm5lbCBub3JtczwvdGl0bGU+Ci0gICAgPHRncm91cCBjb2xzPSIyIiBhbGlnbj0ibGVmdCI+Ci0gICAgPHRib2R5PgotICAgIDxyb3c+Ci0gICAgICAgIDxlbnRyeT5WSURFT19NT0RFX1BBTDwvZW50cnk+PGVudHJ5PlBBTCBlbmNvZGVkIFRlbGV2aXNpb248L2VudHJ5PgotICAgPC9yb3c+PHJvdz4KLSAgICAgICAgPGVudHJ5PlZJREVPX01PREVfTlRTQzwvZW50cnk+PGVudHJ5Pk5UU0MgKFVTKSBlbmNvZGVkIFRlbGV2aXNpb248L2VudHJ5PgotICAgPC9yb3c+PHJvdz4KLSAgICAgICAgPGVudHJ5PlZJREVPX01PREVfU0VDQU08L2VudHJ5PjxlbnRyeT5TRUNBTSAoRnJlbmNoKSBUZWxldmlzaW9uIDwvZW50cnk+Ci0gICA8L3Jvdz48cm93PgotICAgICAgICA8ZW50cnk+VklERU9fTU9ERV9BVVRPPC9lbnRyeT48ZW50cnk+QXV0b21hdGljIHN3aXRjaGluZywgb3IgZm9ybWF0IGRvZXMgbm90Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdHRlcjwvZW50cnk+Ci0gICAgPC9yb3c+Ci0gICAgPC90Ym9keT4KLSAgICA8L3Rncm91cD4KLSAgICA8L3RhYmxlPgotICAgIDxwYXJhPgotICAgICAgICBUaGUgY29ycmVzcG9uZGluZyBWSURJT0NTQ0hBTiBpb2N0bCBhbGxvd3MgYSB1c2VyIHRvIGNoYW5nZSBjaGFubmVsIGFuZCB0bwotICAgICAgICByZXF1ZXN0IHRoZSBub3JtIGlzIGNoYW5nZWQgLSBmb3IgZXhhbXBsZSB0byBzd2l0Y2ggYmV0d2VlbiBhIFBBTCBvciBhbiBOVFNDCi0gICAgICAgIGZvcm1hdCBjYW1lcmEuCi0gIDwvcGFyYT4KLSAgPHByb2dyYW1saXN0aW5nPgotCi0KLSAgICAgICAgICAgICAgICBjYXNlIFZJRElPQ1NDSEFOOgotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB2aWRlb19jaGFubmVsIHY7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZihjb3B5X2Zyb21fdXNlcigmYW1wO3YsIGFyZywgc2l6ZW9mKHYpKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FRkFVTFQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZih2LmNoYW5uZWwgIT0gMCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZih2Lm5vcm0gIT0gVklERU9fTU9ERV9BVVRPKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgICAgIH0KLQotCi0gIDwvcHJvZ3JhbWxpc3Rpbmc+Ci0gIDxwYXJhPgotICAgICAgICBUaGUgaW1wbGVtZW50YXRpb24gb2YgdGhpcyBjYWxsIGluIG91ciBkcml2ZXIgaXMgcmVtYXJrYWJseSBlYXN5LiBCZWNhdXNlIHdlCi0gICAgICAgIGFyZSBhc3N1bWluZyBmaXhlZCBmb3JtYXQgaGFyZHdhcmUgd2UgbmVlZCBvbmx5IGNoZWNrIHRoYXQgdGhlIHVzZXIgaGFzIG5vdAotICAgICAgICB0cmllZCB0byBjaGFuZ2UgYW55dGhpbmcuIAotICA8L3BhcmE+Ci0gIDxwYXJhPgotICAgICAgICBUaGUgdXNlciBhbHNvIG5lZWRzIHRvIGJlIGFibGUgdG8gY29uZmlndXJlIGFuZCBhZGp1c3QgdGhlIHBpY3R1cmUgdGhleSBhcmUKLSAgICAgICAgc2VlaW5nLiBUaGlzIGlzIG11Y2ggbGlrZSBhZGp1c3RpbmcgYSB0ZWxldmlzaW9uIHNldC4gQSB1c2VyIGFwcGxpY2F0aW9uCi0gICAgICAgIGFsc28gbmVlZHMgdG8ga25vdyB0aGUgcGFsZXR0ZSBiZWluZyB1c2VkIHNvIHRoYXQgaXQga25vd3MgaG93IHRvIGRpc3BsYXkKLSAgICAgICAgdGhlIGltYWdlIHRoYXQgaGFzIGJlZW4gY2FwdHVyZWQuIFRoZSBWSURJT0NHUElDVCBhbmQgVklESU9DU1BJQ1QgaW9jdGwKLSAgICAgICAgY2FsbHMgcHJvdmlkZSB0aGlzIGluZm9ybWF0aW9uLgotICA8L3BhcmE+Ci0gIDxwcm9ncmFtbGlzdGluZz4KLQotCi0gICAgICAgICAgICAgICAgY2FzZSBWSURJT0NHUElDVAotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB2aWRlb19waWN0dXJlIHY7Ci0gICAgICAgICAgICAgICAgICAgICAgICB2LmJyaWdodG5lc3MgPSBoYXJkd2FyZV9icmlnaHRuZXNzKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB2Lmh1ZSA9IGhhcmR3YXJlX2h1ZSgpOwotICAgICAgICAgICAgICAgICAgICAgICAgdi5jb2xvdXIgPSBoYXJkd2FyZV9zYXR1cmF0aW9uKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB2LmNvbnRyYXN0ID0gaGFyZHdhcmVfYnJpZ2h0bmVzcygpOwotICAgICAgICAgICAgICAgICAgICAgICAgLyogTm90IHNldHRhYmxlICovCi0gICAgICAgICAgICAgICAgICAgICAgICB2LndoaXRlbmVzcyA9IDMyNzY4OwotICAgICAgICAgICAgICAgICAgICAgICAgdi5kZXB0aCA9IDI0OyAgICAgICAgICAgLyogMjRiaXQgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIHYucGFsZXR0ZSA9IFZJREVPX1BBTEVUVEVfUkdCMjQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZihjb3B5X3RvX3VzZXIoJmFtcDt2LCBhcmcsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YodikpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLUVGQVVMVDsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgICAgIH0KLQotCi0gIDwvcHJvZ3JhbWxpc3Rpbmc+Ci0gIDxwYXJhPgotICAgICAgICBUaGUgYnJpZ2h0bmVzcywgaHVlLCBjb2xvciwgYW5kIGNvbnRyYXN0IHByb3ZpZGUgdGhlIHBpY3R1cmUgY29udHJvbHMgdGhhdAotICAgICAgICBhcmUgYWtpbiB0byBhIGNvbnZlbnRpb25hbCB0ZWxldmlzaW9uLiBXaGl0ZW5lc3MgcHJvdmlkZXMgYWRkaXRpb25hbAotICAgICAgICBjb250cm9sIGZvciBncmV5c2NhbGUgaW1hZ2VzLiBBbGwgb2YgdGhlc2UgdmFsdWVzIGFyZSBzY2FsZWQgYmV0d2VlbiAwLTY1NTM1Ci0gICAgICAgIGFuZCBoYXZlIDMyNzY4IGFzIHRoZSBtaWQgcG9pbnQgc2V0dGluZy4gVGhlIHNjYWxpbmcgbWVhbnMgdGhhdCBhcHBsaWNhdGlvbnMKLSAgICAgICAgZG8gbm90IGhhdmUgdG8gd29ycnkgYWJvdXQgdGhlIGNhcGFiaWxpdHkgcmFuZ2Ugb2YgdGhlIGhhcmR3YXJlIGJ1dCBjYW4gbGV0Ci0gICAgICAgIGl0IG1ha2UgYSBiZXN0IGVmZm9ydCBhdHRlbXB0LgotICA8L3BhcmE+Ci0gIDxwYXJhPgotICAgICAgICBPdXIgZGVwdGggaXMgMjQsIGFzIHRoaXMgaXMgaW4gYml0cy4gV2Ugd2lsbCBiZSByZXR1cm5pbmcgUkdCMjQgZm9ybWF0LiBUaGlzCi0gICAgICAgIGhhcyBvbmUgYnl0ZSBvZiByZWQsIHRoZW4gb25lIG9mIGdyZWVuLCB0aGVuIG9uZSBvZiBibHVlLiBUaGlzIHRoZW4gcmVwZWF0cwotICAgICAgICBmb3IgZXZlcnkgb3RoZXIgcGl4ZWwgaW4gdGhlIGltYWdlLiBUaGUgb3RoZXIgY29tbW9uIGZvcm1hdHMgdGhlIGludGVyZmFjZSAKLSAgICAgICAgZGVmaW5lcyBhcmUKLSAgPC9wYXJhPgotICAgPHRhYmxlIGZyYW1lPSJhbGwiIGlkPSJGcmFtZWJ1ZmZlcl9FbmNvZGluZ3MiPjx0aXRsZT5GcmFtZWJ1ZmZlciBFbmNvZGluZ3M8L3RpdGxlPgotICAgPHRncm91cCBjb2xzPSIyIiBhbGlnbj0ibGVmdCI+Ci0gICA8dGJvZHk+Ci0gICA8cm93PgotICAgPGVudHJ5PkdSRVk8L2VudHJ5PjxlbnRyeT5MaW5lYXIgZ3JleXNjYWxlLiBUaGlzIGlzIGZvciBzaW1wbGUgY2FtZXJhcyBhbmQgdGhlCi0gICAgICAgICAgICAgICAgICAgICAgICBsaWtlPC9lbnRyeT4KLSAgIDwvcm93Pjxyb3c+Ci0gICA8ZW50cnk+UkdCNTY1PC9lbnRyeT48ZW50cnk+VGhlIHRvcCA1IGJpdHMgaG9sZCAzMiByZWQgbGV2ZWxzLCB0aGUgbmV4dCBzaXggYml0cwotICAgICAgICAgICAgICAgICAgICAgICAgaG9sZCBncmVlbiBhbmQgdGhlIGxvdyA1IGJpdHMgaG9sZCBibHVlLiA8L2VudHJ5PgotICAgPC9yb3c+PHJvdz4KLSAgIDxlbnRyeT5SR0I1NTU8L2VudHJ5PjxlbnRyeT5UaGUgdG9wIGJpdCBpcyBjbGVhci4gVGhlIHJlZCBncmVlbiBhbmQgYmx1ZSBsZXZlbHMKLSAgICAgICAgICAgICAgICAgICAgICAgIGVhY2ggb2NjdXB5IGZpdmUgYml0cy48L2VudHJ5PgotICAgIDwvcm93PgotICAgIDwvdGJvZHk+Ci0gICAgPC90Z3JvdXA+Ci0gICAgPC90YWJsZT4KLSAgPHBhcmE+Ci0gICAgICAgIEFkZGl0aW9uYWwgbW9kZXMgYXJlIHN1cHBvcnQgZm9yIFlVViBjYXB0dXJlIGZvcm1hdHMuIFRoZXNlIGFyZSBjb21tb24gZm9yCi0gICAgICAgIFRWIGFuZCB2aWRlbyBjb25mZXJlbmNpbmcgYXBwbGljYXRpb25zLgotICA8L3BhcmE+Ci0gIDxwYXJhPgotICAgICAgICBUaGUgVklESU9DU1BJQ1QgaW9jdGwgYWxsb3dzIGEgdXNlciB0byBzZXQgc29tZSBvZiB0aGUgcGljdHVyZSBwYXJhbWV0ZXJzLgotICAgICAgICBFeGFjdGx5IHdoaWNoIG9uZXMgYXJlIHN1cHBvcnRlZCBkZXBlbmRzIGhlYXZpbHkgb24gdGhlIGNhcmQgaXRzZWxmLiBJdCBpcwotICAgICAgICBwb3NzaWJsZSB0byBzdXBwb3J0IG1hbnkgbW9kZXMgYW5kIGVmZmVjdHMgaW4gc29mdHdhcmUuIEluIGdlbmVyYWwgZG9pbmcKLSAgICAgICAgdGhpcyBpbiB0aGUga2VybmVsIGlzIGEgYmFkIGlkZWEuIFZpZGVvIGNhcHR1cmUgaXMgYSBwZXJmb3JtYW5jZS1zZW5zaXRpdmUKLSAgICAgICAgYXBwbGljYXRpb24gYW5kIHRoZSBwcm9ncmFtcyBjYW4gb2Z0ZW4gZG8gYmV0dGVyIGlmIHRoZXkgYXJlbid0IGJlaW5nCi0gICAgICAgICdoZWxwZWQnIGJ5IGFuIG92ZXJrZWVuIGRyaXZlciB3cml0ZXIuIFRodXMgZm9yIG91ciBkZXZpY2Ugd2Ugd2lsbCByZXBvcnQKLSAgICAgICAgUkdCMjQgb25seSBhbmQgcmVmdXNlIHRvIGFsbG93IGEgY2hhbmdlLgotICA8L3BhcmE+Ci0gIDxwcm9ncmFtbGlzdGluZz4KLQotCi0gICAgICAgICAgICAgICAgY2FzZSBWSURJT0NTUElDVDoKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdmlkZW9fcGljdHVyZSB2OwotICAgICAgICAgICAgICAgICAgICAgICAgaWYoY29weV9mcm9tX3VzZXIoJmFtcDt2LCBhcmcsIHNpemVvZih2KSkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtRUZBVUxUOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYodi5kZXB0aCE9MjQgfHwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICB2LnBhbGV0dGUgIT0gVklERU9fUEFMRVRURV9SR0IyNCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzZXRfaGFyZHdhcmVfYnJpZ2h0bmVzcyh2LmJyaWdodG5lc3MpOwotICAgICAgICAgICAgICAgICAgICAgICAgc2V0X2hhcmR3YXJlX2h1ZSh2Lmh1ZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzZXRfaGFyZHdhcmVfc2F0dXJhdGlvbih2LmNvbG91cik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzZXRfaGFyZHdhcmVfYnJpZ2h0bmVzcyh2LmNvbnRyYXN0KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgICAgIH0KLQotCi0gIDwvcHJvZ3JhbWxpc3Rpbmc+Ci0gIDxwYXJhPgotICAgICAgICBXZSBjaGVjayB0aGUgdXNlciBoYXMgbm90IHRyaWVkIHRvIGNoYW5nZSB0aGUgcGFsZXR0ZSBvciB0aGUgZGVwdGguIFdlIGRvCi0gICAgICAgIG5vdCB3YW50IHRvIGNhcnJ5IG91dCBzb21lIG9mIHRoZSBjaGFuZ2VzIGFuZCB0aGVuIHJldHVybiBhbiBlcnJvci4gVGhpcyBtYXkKLSAgICAgICAgY29uZnVzZSB0aGUgYXBwbGljYXRpb24gd2hpY2ggd2lsbCBiZSBhc3N1bWluZyBubyBjaGFuZ2Ugb2NjdXJyZWQuCi0gIDwvcGFyYT4KLSAgPHBhcmE+Ci0gICAgICAgIEluIG11Y2ggdGhlIHNhbWUgd2F5IGFzIHlvdSBuZWVkIHRvIGJlIGFibGUgdG8gc2V0IHRoZSBwaWN0dXJlIGNvbnRyb2xzIHRvCi0gICAgICAgIGdldCB0aGUgcmlnaHQgY2FwdHVyZSBpbWFnZXMsIG1hbnkgY2FyZHMgbmVlZCB0byBrbm93IHdoYXQgdGhleSBhcmUKLSAgICAgICAgZGlzcGxheWluZyBvbnRvIHdoZW4gZ2VuZXJhdGluZyBvdmVybGF5IG91dHB1dC4gSW4gc29tZSBjYXNlcyBnZXR0aW5nIHRoaXMKLSAgICAgICAgd3JvbmcgZXZlbiBtYWtlcyBhIG5hc3R5IG1lc3Mgb3IgbWF5IGNyYXNoIHRoZSBjb21wdXRlci4gRm9yIHRoYXQgcmVhc29uCi0gICAgICAgIHRoZSBWSURJT0NTQlVGIGlvY3RsIHVzZWQgdG8gc2V0IHVwIHRoZSBmcmFtZSBidWZmZXIgaW5mb3JtYXRpb24gbWF5IHdlbGwKLSAgICAgICAgb25seSBiZSB1c2FibGUgYnkgcm9vdC4KLSAgPC9wYXJhPgotICA8cGFyYT4KLSAgICAgICAgV2Ugd2lsbCBhc3N1bWUgb3VyIGNhcmQgaXMgb25lIG9mIHRoZSBvbGQgSVNBIGRldmljZXMgd2l0aCBmZWF0dXJlIGNvbm5lY3RvcgotICAgICAgICBhbmQgb25seSBzdXBwb3J0cyBhIGNvdXBsZSBvZiBzdGFuZGFyZCB2aWRlbyBtb2Rlcy4gVmVyeSBjb21tb24gZm9yIG9sZGVyCi0gICAgICAgIGNhcmRzIGFsdGhvdWdoIHRoZSBQQ0kgZGV2aWNlcyBhcmUgd2F5IHNtYXJ0ZXIgdGhhbiB0aGlzLgotICA8L3BhcmE+Ci0gIDxwcm9ncmFtbGlzdGluZz4KLQotCi1zdGF0aWMgc3RydWN0IHZpZGVvX2J1ZmZlciBjYXB0dXJlX2ZiOwotCi0gICAgICAgICAgICAgICAgY2FzZSBWSURJT0NHRkJVRjoKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZihjb3B5X3RvX3VzZXIoYXJnLCAmYW1wO2NhcHR1cmVfZmIsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoY2FwdHVyZV9mYikpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLUVGQVVMVDsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgfQotCi0KLSAgPC9wcm9ncmFtbGlzdGluZz4KLSAgPHBhcmE+Ci0gICAgICAgIFdlIGtlZXAgdGhlIGZyYW1lIGJ1ZmZlciBpbmZvcm1hdGlvbiBpbiB0aGUgZm9ybWF0IHRoZSBpb2N0bCB1c2VzLiBUaGlzCi0gICAgICAgIG1ha2VzIGl0IG5pY2UgYW5kIGVhc3kgdG8gd29yayB3aXRoIGluIHRoZSBpb2N0bCBjYWxscy4KLSAgPC9wYXJhPgotICA8cHJvZ3JhbWxpc3Rpbmc+Ci0KLSAgICAgICAgICAgICAgICBjYXNlIFZJRElPQ1NGQlVGOgotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB2aWRlb19idWZmZXIgdjsKLQotICAgICAgICAgICAgICAgICAgICAgICAgaWYoIWNhcGFibGUoQ0FQX1NZU19BRE1JTikpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtRVBFUk07Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmKGNvcHlfZnJvbV91c2VyKCZhbXA7diwgYXJnLCBzaXplb2YodikpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLUVGQVVMVDsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmKHYud2lkdGghPTMyMCAmYW1wOyZhbXA7IHYud2lkdGghPTY0MCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZih2LmhlaWdodCE9MjAwICZhbXA7JmFtcDsgdi5oZWlnaHQhPTI0MCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmFtcDsmYW1wOyB2LmhlaWdodCE9NDAwCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZhbXA7JmFtcDsgdi5oZWlnaHQgIT00ODApCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOwotICAgICAgICAgICAgICAgICAgICAgICAgbWVtY3B5KCZhbXA7Y2FwdHVyZV9mYiwgJmFtcDt2LCBzaXplb2YodikpOwotICAgICAgICAgICAgICAgICAgICAgICAgaGFyZHdhcmVfc2V0X2ZiKCZhbXA7dik7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgICAgICB9Ci0KLQotCi0gIDwvcHJvZ3JhbWxpc3Rpbmc+Ci0gIDxwYXJhPgotICAgICAgICBUaGUgY2FwYWJsZSgpIGZ1bmN0aW9uIGNoZWNrcyBhIHVzZXIgaGFzIHRoZSByZXF1aXJlZCBjYXBhYmlsaXR5LiBUaGUgTGludXgKLSAgICAgICAgb3BlcmF0aW5nIHN5c3RlbSBoYXMgYSBzZXQgb2YgYWJvdXQgMzAgY2FwYWJpbGl0aWVzIGluZGljYXRpbmcgcHJpdmlsZWdlZAotICAgICAgICBhY2Nlc3MgdG8gc2VydmljZXMuIFRoZSBkZWZhdWx0IHNldCB1cCBnaXZlcyB0aGUgc3VwZXJ1c2VyICh1aWQgMCkgYWxsIG9mCi0gICAgICAgIHRoZW0gYW5kIG5vYm9keSBlbHNlIGhhcyBhbnkuCi0gIDwvcGFyYT4KLSAgPHBhcmE+Ci0gICAgICAgIFdlIGNoZWNrIHRoYXQgdGhlIHVzZXIgaGFzIHRoZSBTWVNfQURNSU4gY2FwYWJpbGl0eSwgdGhhdCBpcyB0aGV5IGFyZQotICAgICAgICBhbGxvd2VkIHRvIG9wZXJhdGUgYXMgdGhlIG1hY2hpbmUgYWRtaW5pc3RyYXRvci4gV2UgZG9uJ3Qgd2FudCBhbnlvbmUgYnV0Ci0gICAgICAgIHRoZSBhZG1pbmlzdHJhdG9yIG1ha2luZyBhIG1lc3Mgb2YgdGhlIGRpc3BsYXkuCi0gIDwvcGFyYT4KLSAgPHBhcmE+Ci0gICAgICAgIE5leHQgd2UgY2hlY2sgZm9yIHN0YW5kYXJkIFBDIHZpZGVvIG1vZGVzICgzMjAgb3IgNjQwIHdpZGUgd2l0aCBlaXRoZXIKLSAgICAgICAgRUdBIG9yIFZHQSBkZXB0aHMpLiBJZiB0aGUgbW9kZSBpcyBub3QgYSBzdGFuZGFyZCB2aWRlbyBtb2RlIHdlIHJlamVjdCBpdCBhcwotICAgICAgICBub3Qgc3VwcG9ydGVkIGJ5IG91ciBjYXJkLiBJZiB0aGUgbW9kZSBpcyBhY2NlcHRhYmxlIHdlIHNhdmUgaXQgc28gdGhhdAotICAgICAgICBWSURJT0NGQlVGIHdpbGwgZ2l2ZSB0aGUgcmlnaHQgYW5zd2VyIG5leHQgdGltZSBpdCBpcyBjYWxsZWQuICBUaGUKLSAgICAgICAgaGFyZHdhcmVfc2V0X2ZiKCkgZnVuY3Rpb24gaXMgc29tZSB1bmRlc2NyaWJlZCBjYXJkIHNwZWNpZmljIGZ1bmN0aW9uIHRvCi0gICAgICAgIHByb2dyYW0gdGhlIGNhcmQgZm9yIHRoZSBkZXNpcmVkIG1vZGUuCi0gIDwvcGFyYT4KLSAgPHBhcmE+Ci0gICAgICAgIEJlZm9yZSB0aGUgZHJpdmVyIGNhbiBkaXNwbGF5IGFuIG92ZXJsYXkgd2luZG93IGl0IG5lZWRzIHRvIGtub3cgd2hlcmUgdGhlCi0gICAgICAgIHdpbmRvdyBzaG91bGQgYmUgcGxhY2VkLCBhbmQgYWxzbyBob3cgbGFyZ2UgaXQgc2hvdWxkIGJlLiBJZiB0aGUgY2FyZAotICAgICAgICBzdXBwb3J0cyBjbGlwcGluZyBpdCBuZWVkcyB0byBrbm93IHdoaWNoIHJlY3RhbmdsZXMgdG8gb21pdCBmcm9tIHRoZQotICAgICAgICBkaXNwbGF5LiBUaGUgdmlkZW9fd2luZG93IHN0cnVjdHVyZSBpcyB1c2VkIHRvIGRlc2NyaWJlIHRoZSB3YXkgdGhlIGltYWdlIAotICAgICAgICBzaG91bGQgYmUgZGlzcGxheWVkLiAKLSAgIDwvcGFyYT4KLSAgIDx0YWJsZSBmcmFtZT0iYWxsIiBpZD0idmlkZW9fd2luZG93X2ZpZWxkcyI+PHRpdGxlPnN0cnVjdCB2aWRlb193aW5kb3cgZmllbGRzPC90aXRsZT4KLSAgIDx0Z3JvdXAgY29scz0iMiIgYWxpZ249ImxlZnQiPgotICAgPHRib2R5PgotICAgPHJvdz4KLSAgICAgICAgPGVudHJ5PndpZHRoPC9lbnRyeT48ZW50cnk+VGhlIHdpZHRoIGluIHBpeGVscyBvZiB0aGUgZGVzaXJlZCBpbWFnZS4gVGhlIGNhcmQKLSAgICAgICAgICAgICAgICAgICAgICAgIG1heSB1c2UgYSBzbWFsbGVyIHNpemUgaWYgdGhpcyBzaXplIGlzIG5vdCBhdmFpbGFibGU8L2VudHJ5PgotCTwvcm93Pjxyb3c+Ci0gICAgICAgIDxlbnRyeT5oZWlnaHQ8L2VudHJ5PjxlbnRyeT5UaGUgaGVpZ2h0IG9mIHRoZSBpbWFnZS4gVGhlIGNhcmQgbWF5IHVzZSBhIHNtYWxsZXIKLSAgICAgICAgICAgICAgICAgICAgICAgIHNpemUgaWYgdGhpcyBzaXplIGlzIG5vdCBhdmFpbGFibGUuPC9lbnRyeT4KLQk8L3Jvdz48cm93PgotICAgICAgICA8ZW50cnk+eDwvZW50cnk+PGVudHJ5PiAgIFRoZSBYIHBvc2l0aW9uIG9mIHRoZSB0b3AgbGVmdCBvZiB0aGUgd2luZG93LiBUaGlzCi0gICAgICAgICAgICAgICAgICAgICAgICBpcyBpbiBwaXhlbHMgcmVsYXRpdmUgdG8gdGhlIGxlZnQgaGFuZCBlZGdlIG9mIHRoZQotICAgICAgICAgICAgICAgICAgICAgICAgcGljdHVyZS4gTm90IGFsbCBjYXJkcyBjYW4gZGlzcGxheSBpbWFnZXMgYWxpZ25lZCBvbgotICAgICAgICAgICAgICAgICAgICAgICAgYW55IHBpeGVsIGJvdW5kYXJ5LiBJZiB0aGUgcG9zaXRpb24gaXMgdW5zdWl0YWJsZQotICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGNhcmQgYWRqdXN0cyB0aGUgaW1hZ2UgcmlnaHQgYW5kIHJlZHVjZXMgdGhlCi0gICAgICAgICAgICAgICAgICAgICAgICB3aWR0aC48L2VudHJ5PgotCTwvcm93Pjxyb3c+Ci0gICAgICAgIDxlbnRyeT55PC9lbnRyeT48ZW50cnk+ICAgVGhlIFkgcG9zaXRpb24gb2YgdGhlIHRvcCBsZWZ0IG9mIHRoZSB3aW5kb3cuIFRoaXMKLSAgICAgICAgICAgICAgICAgICAgICAgIGlzIGNvdW50ZWQgaW4gcGl4ZWxzIHJlbGF0aXZlIHRvIHRoZSB0b3AgZWRnZSBvZiB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgIHBpY3R1cmUuIEFzIHdpdGggdGhlIHdpZHRoIGlmIHRoZSBjYXJkIGNhbm5vdAotICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheSAgc3RhcnRpbmcgb24gdGhpcyBsaW5lIGl0IHdpbGwgYWRqdXN0IHRoZQotICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzLjwvZW50cnk+Ci0JPC9yb3c+PHJvdz4KLSAgICAgICAgPGVudHJ5PmNocm9tYWtleTwvZW50cnk+PGVudHJ5PlRoZSBjb2xvdXIgKGV4cHJlc3NlZCBpbiBSR0IzMiBmb3JtYXQpIGZvciB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgIGNocm9tYWtleSBjb2xvdXIgaWYgY2hyb21hIGtleWluZyBpcyBiZWluZyB1c2VkLiA8L2VudHJ5PgotCTwvcm93Pjxyb3c+Ci0gICAgICAgIDxlbnRyeT5jbGlwczwvZW50cnk+PGVudHJ5PkFuIGFycmF5IG9mIHJlY3RhbmdsZXMgdGhhdCBtdXN0IG5vdCBiZSBkcmF3bgotCQkJb3Zlci48L2VudHJ5PgotCTwvcm93Pjxyb3c+Ci0gICAgICAgIDxlbnRyeT5jbGlwY291bnQ8L2VudHJ5PjxlbnRyeT5UaGUgbnVtYmVyIG9mIGNsaXBzIGluIHRoaXMgYXJyYXkuPC9lbnRyeT4KLSAgICA8L3Jvdz4KLSAgICA8L3Rib2R5PgotICAgIDwvdGdyb3VwPgotICAgIDwvdGFibGU+Ci0gICAgPHBhcmE+Ci0gICAgICAgIEVhY2ggY2xpcCBpcyBhIHN0cnVjdCB2aWRlb19jbGlwIHdoaWNoIGhhcyB0aGUgZm9sbG93aW5nIGZpZWxkcwotICAgPC9wYXJhPgotICAgPHRhYmxlIGZyYW1lPSJhbGwiIGlkPSJ2aWRlb19jbGlwX2ZpZWxkcyI+PHRpdGxlPnZpZGVvX2NsaXAgZmllbGRzPC90aXRsZT4KLSAgIDx0Z3JvdXAgY29scz0iMiIgYWxpZ249ImxlZnQiPgotICAgPHRib2R5PgotICAgPHJvdz4KLSAgICAgICAgPGVudHJ5PngsIHk8L2VudHJ5PjxlbnRyeT5Dby1vcmRpbmF0ZXMgcmVsYXRpdmUgdG8gdGhlIGRpc3BsYXk8L2VudHJ5PgotCTwvcm93Pjxyb3c+Ci0gICAgICAgIDxlbnRyeT53aWR0aCwgaGVpZ2h0PC9lbnRyeT48ZW50cnk+V2lkdGggYW5kIGhlaWdodCBpbiBwaXhlbHM8L2VudHJ5PgotCTwvcm93Pjxyb3c+Ci0gICAgICAgIDxlbnRyeT5uZXh0PC9lbnRyeT48ZW50cnk+QSBzcGFyZSBmaWVsZCBmb3IgdGhlIGFwcGxpY2F0aW9uIHRvIHVzZTwvZW50cnk+Ci0gICAgPC9yb3c+Ci0gICAgPC90Ym9keT4KLSAgICA8L3Rncm91cD4KLSAgICA8L3RhYmxlPgotICAgIDxwYXJhPgotICAgICAgICBUaGUgZHJpdmVyIGlzIHJlcXVpcmVkIHRvIGVuc3VyZSBpdCBhbHdheXMgZHJhd3MgaW4gdGhlIGFyZWEgcmVxdWVzdGVkIG9yIGEgICAgICAgIHNtYWxsZXIgYXJlYSwgYW5kIHRoYXQgaXQgbmV2ZXIgZHJhd3MgaW4gYW55IG9mIHRoZSBhcmVhcyB0aGF0IGFyZSBjbGlwcGVkLgotICAgICAgICBUaGlzIG1heSB3ZWxsIG1lYW4gaXQgaGFzIHRvIGxlYXZlIGFsb25lLiBzbWFsbCBhcmVhcyB0aGUgYXBwbGljYXRpb24gd2lzaGVkIHRvIGJlCi0gICAgICAgIGRyYXduLgotICA8L3BhcmE+Ci0gIDxwYXJhPgotICAgICAgICBPdXIgZXhhbXBsZSBjYXJkIHVzZXMgY2hyb21ha2V5IHNvIGRvZXMgbm90IGhhdmUgdG8gYWRkcmVzcyBtb3N0IG9mIHRoZQotICAgICAgICBjbGlwcGluZy4gIFdlIHdpbGwgYWRkIGEgdmlkZW9fd2luZG93IHN0cnVjdHVyZSB0byBvdXIgZ2xvYmFsIHZhcmlhYmxlcyB0bwotICAgICAgICByZW1lbWJlciBvdXIgcGFyYW1ldGVycywgYXMgd2UgZGlkIHdpdGggdGhlIGZyYW1lIGJ1ZmZlci4KLSAgPC9wYXJhPgotICA8cHJvZ3JhbWxpc3Rpbmc+Ci0KLQotICAgICAgICAgICAgICAgIGNhc2UgVklESU9DR1dJTjoKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZihjb3B5X3RvX3VzZXIoYXJnLCAmYW1wO2NhcHR1cmVfd2luLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoY2FwdHVyZV93aW4pKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FRkFVTFQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgICAgICB9Ci0KLQotICAgICAgICAgICAgICAgIGNhc2UgVklESU9DU1dJTjoKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdmlkZW9fd2luZG93IHY7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZihjb3B5X2Zyb21fdXNlcigmYW1wO3YsIGFyZywgc2l6ZW9mKHYpKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FRkFVTFQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZih2LndpZHRoICZndDsgNjQwIHx8IHYuaGVpZ2h0ICZndDsgNDgwKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmKHYud2lkdGggJmx0OyAxNiB8fCB2LmhlaWdodCAmbHQ7IDE2KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsKLSAgICAgICAgICAgICAgICAgICAgICAgIGhhcmR3YXJlX3NldF9rZXkodi5jaHJvbWFrZXkpOwotICAgICAgICAgICAgICAgICAgICAgICAgaGFyZHdhcmVfc2V0X3dpbmRvdyh2KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1lbWNweSgmYW1wO2NhcHR1cmVfd2luLCAmYW1wO3YsIHNpemVvZih2KSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjYXB0dXJlX3cgPSB2LndpZHRoOwotICAgICAgICAgICAgICAgICAgICAgICAgY2FwdHVyZV9oID0gdi5oZWlnaHQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgICAgICB9Ci0KLQotICA8L3Byb2dyYW1saXN0aW5nPgotICA8cGFyYT4KLSAgICAgICAgQmVjYXVzZSB3ZSBhcmUgdXNpbmcgQ2hyb21ha2V5IG91ciBzZXR1cCBpcyBmYWlybHkgc2ltcGxlLiBNb3N0bHkgd2UgaGF2ZSB0bwotICAgICAgICBjaGVjayB0aGUgdmFsdWVzIGFyZSBzYW5lIGFuZCBsb2FkIHRoZW0gaW50byB0aGUgY2FwdHVyZSBjYXJkLgotICA8L3BhcmE+Ci0gIDxwYXJhPgotICAgICAgICBXaXRoIGFsbCB0aGUgc2V0dXAgZG9uZSB3ZSBjYW4gbm93IHR1cm4gb24gdGhlIGFjdHVhbCBjYXB0dXJlL292ZXJsYXkuIFRoaXMKLSAgICAgICAgaXMgZG9uZSB3aXRoIHRoZSBWSURJT0NDQVBUVVJFIGlvY3RsLiBUaGlzIHRha2VzIGEgc2luZ2xlIGludGVnZXIgYXJndW1lbnQKLSAgICAgICAgd2hlcmUgMCBpcyBvbiBhbmQgMSBpcyBvZmYuCi0gIDwvcGFyYT4KLSAgPHByb2dyYW1saXN0aW5nPgotCi0KLSAgICAgICAgICAgICAgICBjYXNlIFZJRElPQ0NBUFRVUkU6Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgaW50IHY7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZihnZXRfdXNlcih2LCAoaW50ICopYXJnKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FRkFVTFQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZih2PT0wKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXJkd2FyZV9jYXB0dXJlX29mZigpOwotICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihjYXB0dXJlX2ZiLndpZHRoID09IDAgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBjYXB0dXJlX3cgPT0gMCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFyZHdhcmVfY2FwdHVyZV9vbigpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICAgICAgfQotCi0KLSAgPC9wcm9ncmFtbGlzdGluZz4KLSAgPHBhcmE+Ci0gICAgICAgIFdlIGdyYWIgdGhlIGZsYWcgZnJvbSB1c2VyIHNwYWNlIGFuZCBlaXRoZXIgZW5hYmxlIG9yIGRpc2FibGUgYWNjb3JkaW5nIHRvCi0gICAgICAgIGl0cyB2YWx1ZS4gVGhlcmUgaXMgb25lIHNtYWxsIGNvcm5lciBjYXNlIHdlIGhhdmUgdG8gY29uc2lkZXIgaGVyZS4gU3VwcG9zZQotICAgICAgICB0aGF0IHRoZSBjYXB0dXJlIHdhcyByZXF1ZXN0ZWQgYmVmb3JlIHRoZSB2aWRlbyB3aW5kb3cgb3IgdGhlIGZyYW1lIGJ1ZmZlcgotICAgICAgICBoYWQgYmVlbiBzZXQgdXAuIEluIHRob3NlIGNhc2VzIHRoZXJlIHdpbGwgYmUgdW5jb25maWd1cmVkIGZpZWxkcyBpbiBvdXIKLSAgICAgICAgY2FyZCBkYXRhLCBhcyB3ZWxsIGFzIHVuY29uZmlndXJlZCBoYXJkd2FyZSBzZXR0aW5ncy4gV2UgY2hlY2sgZm9yIHRoaXMgY2FzZSBhbmQKLSAgICAgICAgcmV0dXJuIGFuIGVycm9yIGlmIHRoZSBmcmFtZSBidWZmZXIgb3IgdGhlIGNhcHR1cmUgd2luZG93IHdpZHRoIGlzIHplcm8uCi0gIDwvcGFyYT4KLSAgPHByb2dyYW1saXN0aW5nPgotCi0KLSAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FTk9JT0NUTENNRDsKLSAgICAgICAgfQotfQotICA8L3Byb2dyYW1saXN0aW5nPgotICA8cGFyYT4KLQotICAgICAgICBXZSBkb24ndCBuZWVkIHRvIHN1cHBvcnQgYW55IG90aGVyIGlvY3Rscywgc28gaWYgd2UgZ2V0IHRoaXMgZmFyLCBpdCBpcyB0aW1lCi0gICAgICAgIHRvIHRlbGwgdGhlIHZpZGVvIGxheWVyIHRoYXQgd2UgZG9uJ3Qgbm93IHdoYXQgdGhlIHVzZXIgaXMgdGFsa2luZyBhYm91dC4KLSAgPC9wYXJhPgotICA8L3NlY3QxPgotICA8c2VjdDEgaWQ9ImVuZHZpZCI+Ci0gIDx0aXRsZT5PdGhlciBGdW5jdGlvbmFsaXR5PC90aXRsZT4KLSAgPHBhcmE+Ci0gICAgICAgIFRoZSBWaWRlbzRMaW51eCBsYXllciBzdXBwb3J0cyBhZGRpdGlvbmFsIGZlYXR1cmVzLCBpbmNsdWRpbmcgYSBoaWdoCi0gICAgICAgIHBlcmZvcm1hbmNlIG1tYXAoKSBiYXNlZCBjYXB0dXJlIG1vZGUgYW5kIGNhcHR1cmluZyBwYXJ0IG9mIHRoZSBpbWFnZS4gCi0gICAgICAgIFRoZXNlIGZlYXR1cmVzIGFyZSBvdXQgb2YgdGhlIHNjb3BlIG9mIHRoZSBib29rLiAgWW91IHNob3VsZCBob3dldmVyIGhhdmUgZW5vdWdoIAotICAgICAgICBleGFtcGxlIGNvZGUgdG8gaW1wbGVtZW50IG1vc3Qgc2ltcGxlIHZpZGVvNGxpbnV4IGRldmljZXMgZm9yIHJhZGlvIGFuZCBUVgotICAgICAgICBjYXJkcy4KLSAgPC9wYXJhPgotICA8L3NlY3QxPgotICA8L2NoYXB0ZXI+Ci0gIDxjaGFwdGVyIGlkPSJidWdzIj4KLSAgICAgPHRpdGxlPktub3duIEJ1Z3MgQW5kIEFzc3VtcHRpb25zPC90aXRsZT4KLSAgPHBhcmE+Ci0gIDx2YXJpYWJsZWxpc3Q+Ci0gICAgPHZhcmxpc3RlbnRyeT48dGVybT5NdWx0aXBsZSBPcGVuczwvdGVybT4KLSAgICA8bGlzdGl0ZW0+Ci0gICAgPHBhcmE+Ci0gICAgICAgIFRoZSBkcml2ZXIgYXNzdW1lcyBtdWx0aXBsZSBvcGVucyBzaG91bGQgbm90IGJlIGFsbG93ZWQuIEEgZHJpdmVyCi0gICAgICAgIGNhbiB3b3JrIGFyb3VuZCB0aGlzIGJ1dCBub3QgY2xlYW5seS4KLSAgICA8L3BhcmE+Ci0gICAgPC9saXN0aXRlbT48L3Zhcmxpc3RlbnRyeT4KLQotICAgIDx2YXJsaXN0ZW50cnk+PHRlcm0+QVBJIERlZmljaWVuY2llczwvdGVybT4KLSAgICA8bGlzdGl0ZW0+Ci0gICAgPHBhcmE+Ci0gICAgICAgIFRoZSBleGlzdGluZyBBUEkgcG9vcmx5IHJlZmxlY3RzIGNvbXByZXNzaW9uIGNhcGFibGUgZGV2aWNlcy4gVGhlcmUKLSAgICAgICAgYXJlIHBsYW5zIGFmb290IHRvIG1lcmdlIFY0TCwgVjRMMiBhbmQgc29tZSBvdGhlciBpZGVhcyBpbnRvIGEKLSAgICAgICAgYmV0dGVyIGludGVyZmFjZS4KLSAgICA8L3BhcmE+Ci0gICAgPC9saXN0aXRlbT48L3Zhcmxpc3RlbnRyeT4KLSAgPC92YXJpYWJsZWxpc3Q+Ci0KLSAgPC9wYXJhPgotICA8L2NoYXB0ZXI+Ci0KLSAgPGNoYXB0ZXIgaWQ9InB1YmZ1bmN0aW9ucyI+Ci0gICAgIDx0aXRsZT5QdWJsaWMgRnVuY3Rpb25zIFByb3ZpZGVkPC90aXRsZT4KLSFFZHJpdmVycy9tZWRpYS92aWRlby92NGwyLWRldi5jCi0gIDwvY2hhcHRlcj4KLQotPC9ib29rPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9IT1dUTyBiL0RvY3VtZW50YXRpb24vSE9XVE8KaW5kZXggNDhhMzk1NS4uODQ5NWZjOSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9IT1dUTworKysgYi9Eb2N1bWVudGF0aW9uL0hPV1RPCkBAIC0xMTIsNyArMTEyLDcgQEAKIAogICAgIE90aGVyIGV4Y2VsbGVudCBkZXNjcmlwdGlvbnMgb2YgaG93IHRvIGNyZWF0ZSBwYXRjaGVzIHByb3Blcmx5IGFyZToKIAkiVGhlIFBlcmZlY3QgUGF0Y2giCi0JCWh0dHA6Ly93d3cuemlwLmNvbS5hdS9+YWtwbS9saW51eC9wYXRjaGVzL3N0dWZmL3RwcC50eHQKKwkJaHR0cDovL3VzZXJ3ZWIua2VybmVsLm9yZy9+YWtwbS9zdHVmZi90cHAudHh0CiAJIkxpbnV4IGtlcm5lbCBwYXRjaCBzdWJtaXNzaW9uIGZvcm1hdCIKIAkJaHR0cDovL2xpbnV4Lnl5ei51cy9wYXRjaC1mb3JtYXQuaHRtbAogCkBAIC02MjAsNyArNjIwLDcgQEAKIEZvciBtb3JlIGRldGFpbHMgb24gd2hhdCB0aGlzIHNob3VsZCBhbGwgbG9vayBsaWtlLCBwbGVhc2Ugc2VlIHRoZQogQ2hhbmdlTG9nIHNlY3Rpb24gb2YgdGhlIGRvY3VtZW50OgogICAiVGhlIFBlcmZlY3QgUGF0Y2giCi0gICAgICBodHRwOi8vd3d3LnppcC5jb20uYXUvfmFrcG0vbGludXgvcGF0Y2hlcy9zdHVmZi90cHAudHh0CisgICAgICBodHRwOi8vdXNlcndlYi5rZXJuZWwub3JnL35ha3BtL3N0dWZmL3RwcC50eHQKIAogCiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vU0FLLnR4dCBiL0RvY3VtZW50YXRpb24vU0FLLnR4dAppbmRleCBiOTAxOWNhLi43NGJlMTQ2IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL1NBSy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9TQUsudHh0CkBAIC0xLDUgKzEsNSBAQAogTGludXggMi40LjIgU2VjdXJlIEF0dGVudGlvbiBLZXkgKFNBSykgaGFuZGxpbmcKLTE4IE1hcmNoIDIwMDEsIEFuZHJldyBNb3J0b24gPGFrcG1Ab3NkbC5vcmc+CisxOCBNYXJjaCAyMDAxLCBBbmRyZXcgTW9ydG9uCiAKIEFuIG9wZXJhdGluZyBzeXN0ZW0ncyBTZWN1cmUgQXR0ZW50aW9uIEtleSBpcyBhIHNlY3VyaXR5IHRvb2wgd2hpY2ggaXMKIHByb3ZpZGVkIGFzIHByb3RlY3Rpb24gYWdhaW5zdCB0cm9qYW4gcGFzc3dvcmQgY2FwdHVyaW5nIHByb2dyYW1zLiAgSXQKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vU3VibWl0Q2hlY2tsaXN0IGIvRG9jdW1lbnRhdGlvbi9TdWJtaXRDaGVja2xpc3QKaW5kZXggMjFmMDc5NS4uYWM1ZTBiMiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9TdWJtaXRDaGVja2xpc3QKKysrIGIvRG9jdW1lbnRhdGlvbi9TdWJtaXRDaGVja2xpc3QKQEAgLTg1LDMgKzg1LDYgQEAKIDIzOiBUZXN0ZWQgYWZ0ZXIgaXQgaGFzIGJlZW4gbWVyZ2VkIGludG8gdGhlIC1tbSBwYXRjaHNldCB0byBtYWtlIHN1cmUKICAgICB0aGF0IGl0IHN0aWxsIHdvcmtzIHdpdGggYWxsIG9mIHRoZSBvdGhlciBxdWV1ZWQgcGF0Y2hlcyBhbmQgdmFyaW91cwogICAgIGNoYW5nZXMgaW4gdGhlIFZNLCBWRlMsIGFuZCBvdGhlciBzdWJzeXN0ZW1zLgorCisyNDogQWxsIG1lbW9yeSBiYXJyaWVycyB7ZS5nLiwgYmFycmllcigpLCBybWIoKSwgd21iKCl9IG5lZWQgYSBjb21tZW50IGluIHRoZQorICAgIHNvdXJjZSBjb2RlIHRoYXQgZXhwbGFpbnMgdGhlIGxvZ2ljIG9mIHdoYXQgdGhleSBhcmUgZG9pbmcgYW5kIHdoeS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vU3VibWl0dGluZ0RyaXZlcnMgYi9Eb2N1bWVudGF0aW9uL1N1Ym1pdHRpbmdEcml2ZXJzCmluZGV4IDI0ZjJlYjQuLjk5ZTcyYTggMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vU3VibWl0dGluZ0RyaXZlcnMKKysrIGIvRG9jdW1lbnRhdGlvbi9TdWJtaXR0aW5nRHJpdmVycwpAQCAtNDEsNyArNDEsNyBAQAogTGludXggMi42OgogCVRoZSBzYW1lIHJ1bGVzIGFwcGx5IGFzIDIuNCBleGNlcHQgdGhhdCB5b3Ugc2hvdWxkIGZvbGxvdyBsaW51eC1rZXJuZWwKIAl0byB0cmFjayBjaGFuZ2VzIGluIEFQSSdzLiBUaGUgZmluYWwgY29udGFjdCBwb2ludCBmb3IgTGludXggMi42Ci0Jc3VibWlzc2lvbnMgaXMgQW5kcmV3IE1vcnRvbiA8YWtwbUBvc2RsLm9yZz4uCisJc3VibWlzc2lvbnMgaXMgQW5kcmV3IE1vcnRvbi4KIAogV2hhdCBDcml0ZXJpYSBEZXRlcm1pbmUgQWNjZXB0YW5jZQogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9TdWJtaXR0aW5nUGF0Y2hlcyBiL0RvY3VtZW50YXRpb24vU3VibWl0dGluZ1BhdGNoZXMKaW5kZXggZjc5YWQ5Zi4uZjMwOWQzYyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9TdWJtaXR0aW5nUGF0Y2hlcworKysgYi9Eb2N1bWVudGF0aW9uL1N1Ym1pdHRpbmdQYXRjaGVzCkBAIC03Nyw3ICs3Nyw3IEBACiBodHRwOi8vc2F2YW5uYWgubm9uZ251Lm9yZy9wcm9qZWN0cy9xdWlsdAogCiBBbmRyZXcgTW9ydG9uJ3MgcGF0Y2ggc2NyaXB0czoKLWh0dHA6Ly93d3cuemlwLmNvbS5hdS9+YWtwbS9saW51eC9wYXRjaGVzLworaHR0cDovL3VzZXJ3ZWIua2VybmVsLm9yZy9+YWtwbS9zdHVmZi9wYXRjaC1zY3JpcHRzLnRhci5negogSW5zdGVhZCBvZiB0aGVzZSBzY3JpcHRzLCBxdWlsdCBpcyB0aGUgcmVjb21tZW5kZWQgcGF0Y2ggbWFuYWdlbWVudAogdG9vbCAoc2VlIGFib3ZlKS4KIApAQCAtNDA1LDcgKzQwNSw3IEBACiBoYXZlIGJlZW4gaW5jbHVkZWQgaW4gdGhlIGRpc2N1c3Npb24KIAogCi0xNCkgVXNpbmcgVGVzdC1ieTogYW5kIFJldmlld2VkLWJ5OgorMTQpIFVzaW5nIFRlc3RlZC1ieTogYW5kIFJldmlld2VkLWJ5OgogCiBBIFRlc3RlZC1ieTogdGFnIGluZGljYXRlcyB0aGF0IHRoZSBwYXRjaCBoYXMgYmVlbiBzdWNjZXNzZnVsbHkgdGVzdGVkIChpbgogc29tZSBlbnZpcm9ubWVudCkgYnkgdGhlIHBlcnNvbiBuYW1lZC4gIFRoaXMgdGFnIGluZm9ybXMgbWFpbnRhaW5lcnMgdGhhdApAQCAtNjUzLDcgKzY1Myw3IEBACiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIEFuZHJldyBNb3J0b24sICJUaGUgcGVyZmVjdCBwYXRjaCIgKHRwcCkuCi0gIDxodHRwOi8vd3d3LnppcC5jb20uYXUvfmFrcG0vbGludXgvcGF0Y2hlcy9zdHVmZi90cHAudHh0PgorICA8aHR0cDovL3VzZXJ3ZWIua2VybmVsLm9yZy9+YWtwbS9zdHVmZi90cHAudHh0PgogCiBKZWZmIEdhcnppaywgIkxpbnV4IGtlcm5lbCBwYXRjaCBzdWJtaXNzaW9uIGZvcm1hdCIuCiAgIDxodHRwOi8vbGludXgueXl6LnVzL3BhdGNoLWZvcm1hdC5odG1sPgpAQCAtNjcyLDQgKzY3Miw5IEBACiAKIExpbnVzIFRvcnZhbGRzJ3MgbWFpbCBvbiB0aGUgY2Fub25pY2FsIHBhdGNoIGZvcm1hdDoKICAgPGh0dHA6Ly9sa21sLm9yZy9sa21sLzIwMDUvNC83LzE4Mz4KKworQW5kaSBLbGVlbiwgIk9uIHN1Ym1pdHRpbmcga2VybmVsIHBhdGNoZXMiCisgIFNvbWUgc3RyYXRlZ2llcyB0byBnZXQgZGlmZmljdWx0IG9yIGNvbnRyb3ZlcnNhbCBjaGFuZ2VzIGluLgorICBodHRwOi8vaGFsb2JhdGVzLmRlL29uLXN1Ym1pdHRpbmctcGF0Y2hlcy5wZGYKKwogLS0KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vYmxhY2tmaW4va2dkYi50eHQgYi9Eb2N1bWVudGF0aW9uL2JsYWNrZmluL2tnZGIudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NGY2YTQ4NC4uMDAwMDAwMAotLS0gYS9Eb2N1bWVudGF0aW9uL2JsYWNrZmluL2tnZGIudHh0CisrKyAvZGV2L251bGwKQEAgLTEsMTU1ICswLDAgQEAKLQkJCUEgU2ltcGxlIEd1aWRlIHRvIENvbmZpZ3VyZSBLR0RCCi0KLQkJCVNvbmljIFpoYW5nIDxzb25pYy56aGFuZ0BhbmFsb2cuY29tPgotCQkJCUF1Zy4gMjR0aCAyMDA2Ci0KLQotVGhpcyBLR0RCIHBhdGNoIGVuYWJsZXMgdGhlIGtlcm5lbCBkZXZlbG9wZXIgdG8gZG8gc291cmNlIGxldmVsIGRlYnVnZ2luZyBvbgotdGhlIGtlcm5lbCBmb3IgdGhlIEJsYWNrZmluIGFyY2hpdGVjdHVyZS4gIFRoZSBkZWJ1Z2dpbmcgd29ya3Mgb3ZlciBlaXRoZXIgdGhlCi1ldGhlcm5ldCBpbnRlcmZhY2Ugb3Igb25lIG9mIHRoZSB1YXJ0cy4gIEJvdGggc29mdHdhcmUgYnJlYWtwb2ludHMgYW5kCi1oYXJkd2FyZSBicmVha3BvaW50cyBhcmUgc3VwcG9ydGVkIGluIHRoaXMgdmVyc2lvbi4KLWh0dHA6Ly9kb2NzLmJsYWNrZmluLnVjbGludXgub3JnL2Rva3UucGhwP2lkPWtnZGIKLQotCi0yIGtub3duIGlzc3VlczoKLTEuIFRoaXMgYnVnOgotICAgICAgIGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy90cmFja2VyL2luZGV4LnBocD9mdW5jPWRldGFpbCZhaWQ9NTQ0Jmdyb3VwX2lkPTE4JmF0aWQ9MTQ1Ci0gICBUaGUgR0RCIGNsaWVudCBmb3IgQmxhY2tmaW4gdUNsaW51eCBjYXVzZXMgaW5jb3JyZWN0IHZhbHVlcyBvZiBsb2NhbAotICAgdmFyaWFibGVzIHRvIGJlIGRpc3BsYXllZCB3aGVuIHRoZSB1c2VyIGJyZWFrcyB0aGUgcnVubmluZyBvZiBrZXJuZWwgaW4gR0RCLgotMi4gQmVjYXVzZSBvZiBhIGhhcmR3YXJlIGJ1ZyBpbiBCbGFja2ZpbiA1MzMgdjEuMC4zOgotICAgICAgIDA1MDAwMDY3IC0gV2F0Y2hwb2ludHMgKEhhcmR3YXJlIEJyZWFrcG9pbnRzKSBhcmUgbm90IHN1cHBvcnRlZAotICAgSGFyZHdhcmUgYnJlYWtwb2ludHMgY2Fubm90IGJlIHNldCBwcm9wZXJseS4KLQotCi1EZWJ1ZyBvdmVyIEV0aGVybmV0OgotIAotMS4gQ29tcGlsZSBhbmQgaW5zdGFsbCB0aGUgY3Jvc3MgcGxhdGZvcm0gdmVyc2lvbiBvZiBnZGIgZm9yIGJsYWNrZmluLCB3aGljaAotICAgY2FuIGJlIGZvdW5kIGF0ICQoQklOUk9PVCkvYmZpbi1lbGYtZ2RiLgotCi0yLiBBcHBseSB0aGlzIHBhdGNoIHRvIHRoZSAyLjYueCBrZXJuZWwuICBTZWxlY3QgdGhlIG1lbnVjb25maWcgb3B0aW9uIHVuZGVyCi0gICAiS2VybmVsIGhhY2tpbmciIC0+ICJLZXJuZWwgZGVidWdnaW5nIiAtPiAiS0dEQjoga2VybmVsIGRlYnVnIHdpdGggcmVtb3RlIGdkYiIuCi0gICBXaXRoIHRoaXMgc2VsZWN0ZWQsIG9wdGlvbiAiRnVsbCBTeW1ib2xpYy9Tb3VyY2UgRGVidWdnaW5nIHN1cHBvcnQiIGFuZCAKLSAgICJDb21waWxlIHRoZSBrZXJuZWwgd2l0aCBmcmFtZSBwb2ludGVycyIgYXJlIGFsc28gc2VsZWN0ZWQuCi0KLTMuIFNlbGVjdCBvcHRpb24gIktHREI6IGNvbm5lY3Qgb3ZlciAoRXRoZXJuZXQpIi4gIEFkZCAia2dkYm9lPUB0YXJnZXQtSVAvLEBob3N0LUlQLyIgdG8KLSAgIHRoZSBvcHRpb24gIkNvbXBpbGVkLWluIEtlcm5lbCBCb290IFBhcmFtZXRlciIgdW5kZXIgIktlcm5lbCBoYWNraW5nIi4KLQotNC4gQ29ubmVjdCBtaW5pY29tIHRvIHRoZSBzZXJpYWwgcG9ydCBhbmQgYm9vdCB0aGUga2VybmVsIGltYWdlLgotCi01LiBDb25maWd1cmUgdGhlIElQICIvPiBpZmNvbmZpZyBldGgwIHRhcmdldC1JUCIKLQotNi4gU3RhcnQgR0RCIGNsaWVudCAiYmZpbi1lbGYtZ2RiIHZtbGludXgiLgotCi03LiBDb25uZWN0IHRvIHRoZSB0YXJnZXQgIihnZGIpIHRhcmdldCByZW1vdGUgdWRwOnRhcmdldC1JUDo2NDQzIi4KLQotOC4gU2V0IHNvZnR3YXJlIGJyZWFrcG9pbnQgIihnZGIpIGJyZWFrIHN5c19vcGVuIi4KLQotOS4gQ29udGludWUgIihnZGIpIGMiLgotCi0xMC4gUnVuIGxzIGluIHRoZSB0YXJnZXQgY29uc29sZSAiLz4gbHMiLgotCi0xMS4gQnJlYWtwb2ludCBoaXRzLiAiQnJlYWtwb2ludCAxOiBzeXNfb3BlbiguLi4iCi0KLTEyLiBEaXNwbGF5IGxvY2FsIHZhcmlhYmxlcyBhbmQgZnVuY3Rpb24gcGFyYW10ZXJzLgotICAgICgqKSBUaGlzIG9wZXJhdGlvbiBnaXZlcyB3cm9uZyByZXN1bHRzLCBzZWUga25vd24gaXNzdWUgMS4KLQotMTMuIFNpbmdsZSBzdGVwcGluZyAiKGdkYikgc2kiLgotCi0xNC4gUmVtb3ZlIGJyZWFrcG9pbnQgMS4gIihnZGIpIGRlbCAxIgotCi0xNS4gU2V0IGhhcmR3YXJlIGJyZWFrcG9pbnQgIihnZGIpIGhicmVhayBzeXNfb3BlbiIuCi0KLTE2LiBDb250aW51ZSAiKGdkYikgYyIuCi0KLTE3LiBSdW4gbHMgaW4gdGhlIHRhcmdldCBjb25zb2xlICIvPiBscyIuCi0KLTE4LiBIYXJkd2FyZSBicmVha3BvaW50IGhpdHMuICJCcmVha3BvaW50IDE6IHN5c19vcGVuKC4uLiIuCi0gICAgKCopIFRoaXMgaGFyZHdhcmUgYnJlYWtwb2ludCB3aWxsIG5vdCBiZSBoaXQsIHNlZSBrbm93biBpc3N1ZSAyLgotCi0xOS4gQ29udGludWUgIihnZGIpIGMiLgotCi0yMC4gSW50ZXJydXB0IHRoZSB0YXJnZXQgaW4gR0RCICJDdHJsK0MiLgotCi0yMS4gRGV0YWNoIGZyb20gdGhlIHRhcmdldCAiKGdkYikgZGV0YWNoIi4KLQotMjIuIEV4aXQgR0RCICIoZ2RiKSBxdWl0Ii4KLQotCi1EZWJ1ZyBvdmVyIHRoZSBVQVJUOgotCi0xLiBDb21waWxlIGFuZCBpbnN0YWxsIHRoZSBjcm9zcyBwbGF0Zm9ybSB2ZXJzaW9uIG9mIGdkYiBmb3IgYmxhY2tmaW4sIHdoaWNoCi0gICBjYW4gYmUgZm91bmQgYXQgJChCSU5ST09UKS9iZmluLWVsZi1nZGIuCi0KLTIuIEFwcGx5IHRoaXMgcGF0Y2ggdG8gdGhlIDIuNi54IGtlcm5lbC4gIFNlbGVjdCB0aGUgbWVudWNvbmZpZyBvcHRpb24gdW5kZXIKLSAgICJLZXJuZWwgaGFja2luZyIgLT4gIktlcm5lbCBkZWJ1Z2dpbmciIC0+ICJLR0RCOiBrZXJuZWwgZGVidWcgd2l0aCByZW1vdGUgZ2RiIi4KLSAgIFdpdGggdGhpcyBzZWxlY3RlZCwgb3B0aW9uICJGdWxsIFN5bWJvbGljL1NvdXJjZSBEZWJ1Z2dpbmcgc3VwcG9ydCIgYW5kIAotICAgIkNvbXBpbGUgdGhlIGtlcm5lbCB3aXRoIGZyYW1lIHBvaW50ZXJzIiBhcmUgYWxzbyBzZWxlY3RlZC4KLQotMy4gU2VsZWN0IG9wdGlvbiAiS0dEQjogY29ubmVjdCBvdmVyIChVQVJUKSIuICBTZXQgIktHREI6IFVBUlQgcG9ydCBudW1iZXIiIHRvIGJlCi0gICBhIGRpZmZlcmVudCBvbmUgZnJvbSB0aGUgY29uc29sZS4gIERvbid0IGZvcmdldCB0byBjaGFuZ2UgdGhlIG1vZGUgb2YKLSAgIGJsYWNrZmluIHNlcmlhbCBkcml2ZXIgdG8gUElPLiAgT3RoZXJ3aXNlIGtnZGIgd29ya3MgaW5jb3JyZWN0bHkgb24gVUFSVC4KLSAKLTQuIElmIHlvdSB3YW50IGNvbm5lY3QgdG8ga2dkYiB3aGVuIHRoZSBrZXJuZWwgYm9vdHMsIGVuYWJsZQotICAgIktHREI6IFdhaXQgZm9yIGdkYiBjb25uZWN0aW9uIGVhcmx5IiAKLQotNS4gQ29tcGlsZSBrZXJuZWwuCi0KLTYuIENvbm5lY3QgbWluaWNvbSB0byB0aGUgc2VyaWFsIHBvcnQgb2YgdGhlIGNvbnNvbGUgYW5kIGJvb3QgdGhlIGtlcm5lbCBpbWFnZS4KLQotNy4gU3RhcnQgR0RCIGNsaWVudCAiYmZpbi1lbGYtZ2RiIHZtbGludXgiLgotCi04LiBTZXQgdGhlIGJhdWQgcmF0ZSBpbiBHREIgIihnZGIpIHNldCByZW1vdGViYXVkIDU3NjAwIi4KLQotOS4gQ29ubmVjdCB0byB0aGUgdGFyZ2V0IG9uIHRoZSBzZWNvbmQgc2VyaWFsIHBvcnQgIihnZGIpIHRhcmdldCByZW1vdGUgL2Rldi90dHlTMSIuCi0KLTEwLiBTZXQgc29mdHdhcmUgYnJlYWtwb2ludCAiKGdkYikgYnJlYWsgc3lzX29wZW4iLgotCi0xMS4gQ29udGludWUgIihnZGIpIGMiLiAKLQotMTIuIFJ1biBscyBpbiB0aGUgdGFyZ2V0IGNvbnNvbGUgIi8+IGxzIi4gCi0KLTEzLiBBIGJyZWFrcG9pbnQgaXMgaGl0LiAiQnJlYWtwb2ludCAxOiBzeXNfb3BlbiguLi4iCi0KLTE0LiBBbGwgb3RoZXIgb3BlcmF0aW9ucyBhcmUgdGhlIHNhbWUgYXMgdGhhdCBpbiBLR0RCIG92ZXIgRXRoZXJuZXQuIAotCi0KLURlYnVnIG92ZXIgdGhlIHNhbWUgVUFSVCBhcyBjb25zb2xlOgotCi0xLiBDb21waWxlIGFuZCBpbnN0YWxsIHRoZSBjcm9zcyBwbGF0Zm9ybSB2ZXJzaW9uIG9mIGdkYiBmb3IgYmxhY2tmaW4sIHdoaWNoCi0gICBjYW4gYmUgZm91bmQgYXQgJChCSU5ST09UKS9iZmluLWVsZi1nZGIuCi0KLTIuIEFwcGx5IHRoaXMgcGF0Y2ggdG8gdGhlIDIuNi54IGtlcm5lbC4gIFNlbGVjdCB0aGUgbWVudWNvbmZpZyBvcHRpb24gdW5kZXIKLSAgICJLZXJuZWwgaGFja2luZyIgLT4gIktlcm5lbCBkZWJ1Z2dpbmciIC0+ICJLR0RCOiBrZXJuZWwgZGVidWcgd2l0aCByZW1vdGUgZ2RiIi4KLSAgIFdpdGggdGhpcyBzZWxlY3RlZCwgb3B0aW9uICJGdWxsIFN5bWJvbGljL1NvdXJjZSBEZWJ1Z2dpbmcgc3VwcG9ydCIgYW5kIAotICAgIkNvbXBpbGUgdGhlIGtlcm5lbCB3aXRoIGZyYW1lIHBvaW50ZXJzIiBhcmUgYWxzbyBzZWxlY3RlZC4KLQotMy4gU2VsZWN0IG9wdGlvbiAiS0dEQjogY29ubmVjdCBvdmVyIFVBUlQiLiAgU2V0ICJLR0RCOiBVQVJUIHBvcnQgbnVtYmVyIiB0byBjb25zb2xlLgotICAgRG9uJ3QgZm9yZ2V0IHRvIGNoYW5nZSB0aGUgbW9kZSBvZiBibGFja2ZpbiBzZXJpYWwgZHJpdmVyIHRvIFBJTy4KLSAgIE90aGVyd2lzZSBrZ2RiIHdvcmtzIGluY29ycmVjdGx5IG9uIFVBUlQuCi0gCi00LiBJZiB5b3Ugd2FudCBjb25uZWN0IHRvIGtnZGIgd2hlbiB0aGUga2VybmVsIGJvb3RzLCBlbmFibGUKLSAgICJLR0RCOiBXYWl0IGZvciBnZGIgY29ubmVjdGlvbiBlYXJseSIgCi0KLTUuIENvbm5lY3QgbWluaWNvbSB0byB0aGUgc2VyaWFsIHBvcnQgYW5kIGJvb3QgdGhlIGtlcm5lbCBpbWFnZS4gCi0KLTYuIChPcHRpb25hbCkgQXNrIHRhcmdldCB0byB3YWl0IGZvciBnZGIgY29ubmVjdGlvbiBieSBlbnRlcmluZyBDdHJsK0EuIEluIG1pbmljb20sIHlvdSBzaG91bGQgZW50ZXIgQ3RybCtBK0EuCi0KLTcuIFN0YXJ0IEdEQiBjbGllbnQgImJmaW4tZWxmLWdkYiB2bWxpbnV4Ii4KLQotOC4gU2V0IHRoZSBiYXVkIHJhdGUgaW4gR0RCICIoZ2RiKSBzZXQgcmVtb3RlYmF1ZCA1NzYwMCIuCi0KLTkuIENvbm5lY3QgdG8gdGhlIHRhcmdldCAiKGdkYikgdGFyZ2V0IHJlbW90ZSAvZGV2L3R0eVMwIi4KLQotMTAuIFNldCBzb2Z0d2FyZSBicmVha3BvaW50ICIoZ2RiKSBicmVhayBzeXNfb3BlbiIuCi0KLTExLiBDb250aW51ZSAiKGdkYikgYyIuIFRoZW4gZW50ZXIgQ3RybCtDIHR3aWNlIHRvIHN0b3AgR0RCIGNvbm5lY3Rpb24uCi0KLTEyLiBSdW4gbHMgaW4gdGhlIHRhcmdldCBjb25zb2xlICIvPiBscyIuIER1bW15IHN0cmluZyBjYW4gYmUgc2VlbiBvbiB0aGUgY29uc29sZS4KLQotMTMuIFRoZW4gY29ubmVjdCB0aGUgZ2RiIHRvIHRhcmdldCBhZ2Fpbi4gIihnZGIpIHRhcmdldCByZW1vdGUgL2Rldi90dHlTMCIuCi0gICAgTm93IHlvdSB3aWxsIGZpbmQgYSBicmVha3BvaW50IGlzIGhpdC4gIkJyZWFrcG9pbnQgMTogc3lzX29wZW4oLi4uIgotCi0xNC4gQWxsIG90aGVyIG9wZXJhdGlvbnMgYXJlIHRoZSBzYW1lIGFzIHRoYXQgaW4gS0dEQiBvdmVyIEV0aGVybmV0LiAgVGhlIG9ubHkKLSAgICBkaWZmZXJlbmNlIGlzIHRoYXQgYWZ0ZXIgY29udGludWUgY29tbWFuZCBpbiBHREIsIHBsZWFzZSBzdG9wIEdEQgotICAgIGNvbm5lY3Rpb24gYnkgMiAiQ3RybCtDInMgYW5kIGNvbm5lY3QgYWdhaW4gYWZ0ZXIgYnJlYWtwb2ludHMgYXJlIGhpdCBvcgotICAgIEN0cmwrQSBpcyBlbnRlcmVkLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9ibG9jay9kYXRhLWludGVncml0eS50eHQgYi9Eb2N1bWVudGF0aW9uL2Jsb2NrL2RhdGEtaW50ZWdyaXR5LnR4dAppbmRleCBlOWRjOGQ4Li5lOGNhMDQwIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2Jsb2NrL2RhdGEtaW50ZWdyaXR5LnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2Jsb2NrL2RhdGEtaW50ZWdyaXR5LnR4dApAQCAtMjQ2LDcgKzI0Niw3IEBACiAgICAgICByZXRyaWV2ZSB0aGUgdGFnIGJ1ZmZlciB1c2luZyBiaW9faW50ZWdyaXR5X2dldF90YWcoKS4KIAogCi02LjMgUEFTU0lORyBFWElTVElORyBJTlRFR1JJVFkgTUVUQURBVEEKKzUuMyBQQVNTSU5HIEVYSVNUSU5HIElOVEVHUklUWSBNRVRBREFUQQogCiAgICAgRmlsZXN5c3RlbXMgdGhhdCBlaXRoZXIgZ2VuZXJhdGUgdGhlaXIgb3duIGludGVncml0eSBtZXRhZGF0YSBvcgogICAgIGFyZSBjYXBhYmxlIG9mIHRyYW5zZmVycmluZyBJTUQgZnJvbSB1c2VyIHNwYWNlIGNhbiB1c2UgdGhlCkBAIC0yODMsNyArMjgzLDcgQEAKICAgICAgIGludGVncml0eSB1cG9uIGNvbXBsZXRpb24uCiAKIAotNi40IFJFR0lTVEVSSU5HIEEgQkxPQ0sgREVWSUNFIEFTIENBUEFCTEUgT0YgRVhDSEFOR0lORyBJTlRFR1JJVFkKKzUuNCBSRUdJU1RFUklORyBBIEJMT0NLIERFVklDRSBBUyBDQVBBQkxFIE9GIEVYQ0hBTkdJTkcgSU5URUdSSVRZCiAgICAgTUVUQURBVEEKIAogICAgIFRvIGVuYWJsZSBpbnRlZ3JpdHkgZXhjaGFuZ2Ugb24gYSBibG9jayBkZXZpY2UgdGhlIGdlbmRpc2sgbXVzdCBiZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9jZ3JvdXBzLnR4dCBiL0RvY3VtZW50YXRpb24vY2dyb3Vwcy9jZ3JvdXBzLnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gRG9jdW1lbnRhdGlvbi9jZ3JvdXBzLnR4dApyZW5hbWUgdG8gRG9jdW1lbnRhdGlvbi9jZ3JvdXBzL2Nncm91cHMudHh0CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2Nncm91cHMvZnJlZXplci1zdWJzeXN0ZW0udHh0IGIvRG9jdW1lbnRhdGlvbi9jZ3JvdXBzL2ZyZWV6ZXItc3Vic3lzdGVtLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNTBhYjU4Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9jZ3JvdXBzL2ZyZWV6ZXItc3Vic3lzdGVtLnR4dApAQCAtMCwwICsxLDk5IEBACisJVGhlIGNncm91cCBmcmVlemVyIGlzIHVzZWZ1bCB0byBiYXRjaCBqb2IgbWFuYWdlbWVudCBzeXN0ZW0gd2hpY2ggc3RhcnQKK2FuZCBzdG9wIHNldHMgb2YgdGFza3MgaW4gb3JkZXIgdG8gc2NoZWR1bGUgdGhlIHJlc291cmNlcyBvZiBhIG1hY2hpbmUKK2FjY29yZGluZyB0byB0aGUgZGVzaXJlcyBvZiBhIHN5c3RlbSBhZG1pbmlzdHJhdG9yLiBUaGlzIHNvcnQgb2YgcHJvZ3JhbQoraXMgb2Z0ZW4gdXNlZCBvbiBIUEMgY2x1c3RlcnMgdG8gc2NoZWR1bGUgYWNjZXNzIHRvIHRoZSBjbHVzdGVyIGFzIGEKK3dob2xlLiBUaGUgY2dyb3VwIGZyZWV6ZXIgdXNlcyBjZ3JvdXBzIHRvIGRlc2NyaWJlIHRoZSBzZXQgb2YgdGFza3MgdG8KK2JlIHN0YXJ0ZWQvc3RvcHBlZCBieSB0aGUgYmF0Y2ggam9iIG1hbmFnZW1lbnQgc3lzdGVtLiBJdCBhbHNvIHByb3ZpZGVzCithIG1lYW5zIHRvIHN0YXJ0IGFuZCBzdG9wIHRoZSB0YXNrcyBjb21wb3NpbmcgdGhlIGpvYi4KKworCVRoZSBjZ3JvdXAgZnJlZXplciB3aWxsIGFsc28gYmUgdXNlZnVsIGZvciBjaGVja3BvaW50aW5nIHJ1bm5pbmcgZ3JvdXBzCitvZiB0YXNrcy4gVGhlIGZyZWV6ZXIgYWxsb3dzIHRoZSBjaGVja3BvaW50IGNvZGUgdG8gb2J0YWluIGEgY29uc2lzdGVudAoraW1hZ2Ugb2YgdGhlIHRhc2tzIGJ5IGF0dGVtcHRpbmcgdG8gZm9yY2UgdGhlIHRhc2tzIGluIGEgY2dyb3VwIGludG8gYQorcXVpZXNjZW50IHN0YXRlLiBPbmNlIHRoZSB0YXNrcyBhcmUgcXVpZXNjZW50IGFub3RoZXIgdGFzayBjYW4KK3dhbGsgL3Byb2Mgb3IgaW52b2tlIGEga2VybmVsIGludGVyZmFjZSB0byBnYXRoZXIgaW5mb3JtYXRpb24gYWJvdXQgdGhlCitxdWllc2NlZCB0YXNrcy4gQ2hlY2twb2ludGVkIHRhc2tzIGNhbiBiZSByZXN0YXJ0ZWQgbGF0ZXIgc2hvdWxkIGEKK3JlY292ZXJhYmxlIGVycm9yIG9jY3VyLiBUaGlzIGFsc28gYWxsb3dzIHRoZSBjaGVja3BvaW50ZWQgdGFza3MgdG8gYmUKK21pZ3JhdGVkIGJldHdlZW4gbm9kZXMgaW4gYSBjbHVzdGVyIGJ5IGNvcHlpbmcgdGhlIGdhdGhlcmVkIGluZm9ybWF0aW9uCit0byBhbm90aGVyIG5vZGUgYW5kIHJlc3RhcnRpbmcgdGhlIHRhc2tzIHRoZXJlLgorCisJU2VxdWVuY2VzIG9mIFNJR1NUT1AgYW5kIFNJR0NPTlQgYXJlIG5vdCBhbHdheXMgc3VmZmljaWVudCBmb3Igc3RvcHBpbmcKK2FuZCByZXN1bWluZyB0YXNrcyBpbiB1c2Vyc3BhY2UuIEJvdGggb2YgdGhlc2Ugc2lnbmFscyBhcmUgb2JzZXJ2YWJsZQorZnJvbSB3aXRoaW4gdGhlIHRhc2tzIHdlIHdpc2ggdG8gZnJlZXplLiBXaGlsZSBTSUdTVE9QIGNhbm5vdCBiZSBjYXVnaHQsCitibG9ja2VkLCBvciBpZ25vcmVkIGl0IGNhbiBiZSBzZWVuIGJ5IHdhaXRpbmcgb3IgcHRyYWNpbmcgcGFyZW50IHRhc2tzLgorU0lHQ09OVCBpcyBlc3BlY2lhbGx5IHVuc3VpdGFibGUgc2luY2UgaXQgY2FuIGJlIGNhdWdodCBieSB0aGUgdGFzay4gQW55Citwcm9ncmFtcyBkZXNpZ25lZCB0byB3YXRjaCBmb3IgU0lHU1RPUCBhbmQgU0lHQ09OVCBjb3VsZCBiZSBicm9rZW4gYnkKK2F0dGVtcHRpbmcgdG8gdXNlIFNJR1NUT1AgYW5kIFNJR0NPTlQgdG8gc3RvcCBhbmQgcmVzdW1lIHRhc2tzLiBXZSBjYW4KK2RlbW9uc3RyYXRlIHRoaXMgcHJvYmxlbSB1c2luZyBuZXN0ZWQgYmFzaCBzaGVsbHM6CisKKwkkIGVjaG8gJCQKKwkxNjY0NAorCSQgYmFzaAorCSQgZWNobyAkJAorCTE2NjkwCisKKwlGcm9tIGEgc2Vjb25kLCB1bnJlbGF0ZWQgYmFzaCBzaGVsbDoKKwkkIGtpbGwgLVNJR1NUT1AgMTY2OTAKKwkkIGtpbGwgLVNJR0NPTlQgMTY5OTAKKworCTxhdCB0aGlzIHBvaW50IDE2OTkwIGV4aXRzIGFuZCBjYXVzZXMgMTY2NDQgdG8gZXhpdCB0b28+CisKKwlUaGlzIGhhcHBlbnMgYmVjYXVzZSBiYXNoIGNhbiBvYnNlcnZlIGJvdGggc2lnbmFscyBhbmQgY2hvb3NlIGhvdyBpdAorcmVzcG9uZHMgdG8gdGhlbS4KKworCUFub3RoZXIgZXhhbXBsZSBvZiBhIHByb2dyYW0gd2hpY2ggY2F0Y2hlcyBhbmQgcmVzcG9uZHMgdG8gdGhlc2UKK3NpZ25hbHMgaXMgZ2RiLiBJbiBmYWN0IGFueSBwcm9ncmFtIGRlc2lnbmVkIHRvIHVzZSBwdHJhY2UgaXMgbGlrZWx5IHRvCitoYXZlIGEgcHJvYmxlbSB3aXRoIHRoaXMgbWV0aG9kIG9mIHN0b3BwaW5nIGFuZCByZXN1bWluZyB0YXNrcy4KKworCSBJbiBjb250cmFzdCwgdGhlIGNncm91cCBmcmVlemVyIHVzZXMgdGhlIGtlcm5lbCBmcmVlemVyIGNvZGUgdG8KK3ByZXZlbnQgdGhlIGZyZWV6ZS91bmZyZWV6ZSBjeWNsZSBmcm9tIGJlY29taW5nIHZpc2libGUgdG8gdGhlIHRhc2tzCitiZWluZyBmcm96ZW4uIFRoaXMgYWxsb3dzIHRoZSBiYXNoIGV4YW1wbGUgYWJvdmUgYW5kIGdkYiB0byBydW4gYXMKK2V4cGVjdGVkLgorCisJVGhlIGZyZWV6ZXIgc3Vic3lzdGVtIGluIHRoZSBjb250YWluZXIgZmlsZXN5c3RlbSBkZWZpbmVzIGEgZmlsZSBuYW1lZAorZnJlZXplci5zdGF0ZS4gV3JpdGluZyAiRlJPWkVOIiB0byB0aGUgc3RhdGUgZmlsZSB3aWxsIGZyZWV6ZSBhbGwgdGFza3MgaW4gdGhlCitjZ3JvdXAuIFN1YnNlcXVlbnRseSB3cml0aW5nICJUSEFXRUQiIHdpbGwgdW5mcmVlemUgdGhlIHRhc2tzIGluIHRoZSBjZ3JvdXAuCitSZWFkaW5nIHdpbGwgcmV0dXJuIHRoZSBjdXJyZW50IHN0YXRlLgorCisqIEV4YW1wbGVzIG9mIHVzYWdlIDoKKworICAgIyBta2RpciAvY29udGFpbmVycy9mcmVlemVyCisgICAjIG1vdW50IC10IGNncm91cCAtb2ZyZWV6ZXIgZnJlZXplciAgL2NvbnRhaW5lcnMKKyAgICMgbWtkaXIgL2NvbnRhaW5lcnMvMAorICAgIyBlY2hvICRzb21lX3BpZCA+IC9jb250YWluZXJzLzAvdGFza3MKKwordG8gZ2V0IHN0YXR1cyBvZiB0aGUgZnJlZXplciBzdWJzeXN0ZW0gOgorCisgICAjIGNhdCAvY29udGFpbmVycy8wL2ZyZWV6ZXIuc3RhdGUKKyAgIFRIQVdFRAorCit0byBmcmVlemUgYWxsIHRhc2tzIGluIHRoZSBjb250YWluZXIgOgorCisgICAjIGVjaG8gRlJPWkVOID4gL2NvbnRhaW5lcnMvMC9mcmVlemVyLnN0YXRlCisgICAjIGNhdCAvY29udGFpbmVycy8wL2ZyZWV6ZXIuc3RhdGUKKyAgIEZSRUVaSU5HCisgICAjIGNhdCAvY29udGFpbmVycy8wL2ZyZWV6ZXIuc3RhdGUKKyAgIEZST1pFTgorCit0byB1bmZyZWV6ZSBhbGwgdGFza3MgaW4gdGhlIGNvbnRhaW5lciA6CisKKyAgICMgZWNobyBUSEFXRUQgPiAvY29udGFpbmVycy8wL2ZyZWV6ZXIuc3RhdGUKKyAgICMgY2F0IC9jb250YWluZXJzLzAvZnJlZXplci5zdGF0ZQorICAgVEhBV0VECisKK1RoaXMgaXMgdGhlIGJhc2ljIG1lY2hhbmlzbSB3aGljaCBzaG91bGQgZG8gdGhlIHJpZ2h0IHRoaW5nIGZvciB1c2VyIHNwYWNlIHRhc2sKK2luIGEgc2ltcGxlIHNjZW5hcmlvLgorCitJdCdzIGltcG9ydGFudCB0byBub3RlIHRoYXQgZnJlZXppbmcgY2FuIGJlIGluY29tcGxldGUuIEluIHRoYXQgY2FzZSB3ZSByZXR1cm4KK0VCVVNZLiBUaGlzIG1lYW5zIHRoYXQgc29tZSB0YXNrcyBpbiB0aGUgY2dyb3VwIGFyZSBidXN5IGRvaW5nIHNvbWV0aGluZyB0aGF0CitwcmV2ZW50cyB1cyBmcm9tIGNvbXBsZXRlbHkgZnJlZXppbmcgdGhlIGNncm91cCBhdCB0aGlzIHRpbWUuIEFmdGVyIEVCVVNZLAordGhlIGNncm91cCB3aWxsIHJlbWFpbiBwYXJ0aWFsbHkgZnJvemVuIC0tIHJlZmxlY3RlZCBieSBmcmVlemVyLnN0YXRlIHJlcG9ydGluZworIkZSRUVaSU5HIiB3aGVuIHJlYWQuIFRoZSBzdGF0ZSB3aWxsIHJlbWFpbiAiRlJFRVpJTkciIHVudGlsIG9uZSBvZiB0aGVzZQordGhpbmdzIGhhcHBlbnM6CisKKwkxKSBVc2Vyc3BhY2UgY2FuY2VscyB0aGUgZnJlZXppbmcgb3BlcmF0aW9uIGJ5IHdyaXRpbmcgIlRIQVdFRCIgdG8KKwkJdGhlIGZyZWV6ZXIuc3RhdGUgZmlsZQorCTIpIFVzZXJzcGFjZSByZXRyaWVzIHRoZSBmcmVlemluZyBvcGVyYXRpb24gYnkgd3JpdGluZyAiRlJPWkVOIiB0bworCQl0aGUgZnJlZXplci5zdGF0ZSBmaWxlICh3cml0aW5nICJGUkVFWklORyIgaXMgbm90IGxlZ2FsCisJCWFuZCByZXR1cm5zIEVJTykKKwkzKSBUaGUgdGFza3MgdGhhdCBibG9ja2VkIHRoZSBjZ3JvdXAgZnJvbSBlbnRlcmluZyB0aGUgIkZST1pFTiIKKwkJc3RhdGUgZGlzYXBwZWFyIGZyb20gdGhlIGNncm91cCdzIHNldCBvZiB0YXNrcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vY29udHJvbGxlcnMvbWVtb3J5LnR4dCBiL0RvY3VtZW50YXRpb24vY29udHJvbGxlcnMvbWVtb3J5LnR4dAppbmRleCA5YjUzZDU4Li4xYzA3NTQ3IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2NvbnRyb2xsZXJzL21lbW9yeS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9jb250cm9sbGVycy9tZW1vcnkudHh0CkBAIC0xMTIsMTQgKzExMiwyMiBAQAogCiAyLjIuMSBBY2NvdW50aW5nIGRldGFpbHMKIAotQWxsIG1hcHBlZCBwYWdlcyAoUlNTKSBhbmQgdW5tYXBwZWQgdXNlciBwYWdlcyAoUGFnZSBDYWNoZSkgYXJlIGFjY291bnRlZC4KLVJTUyBwYWdlcyBhcmUgYWNjb3VudGVkIGF0IHRoZSB0aW1lIG9mIHBhZ2VfYWRkXypfcm1hcCgpIHVubGVzcyB0aGV5J3ZlIGFscmVhZHkKLWJlZW4gYWNjb3VudGVkIGZvciBlYXJsaWVyLiBBIGZpbGUgcGFnZSB3aWxsIGJlIGFjY291bnRlZCBmb3IgYXMgUGFnZSBDYWNoZTsKLWl0J3MgbWFwcGVkIGludG8gdGhlIHBhZ2UgdGFibGVzIG9mIGEgcHJvY2VzcywgZHVwbGljYXRlIGFjY291bnRpbmcgaXMgY2FyZWZ1bGx5Ci1hdm9pZGVkLiBQYWdlIENhY2hlIHBhZ2VzIGFyZSBhY2NvdW50ZWQgYXQgdGhlIHRpbWUgb2YgYWRkX3RvX3BhZ2VfY2FjaGUoKS4KLVRoZSBjb3JyZXNwb25kaW5nIHJvdXRpbmVzIHRoYXQgcmVtb3ZlIGEgcGFnZSBmcm9tIHRoZSBwYWdlIHRhYmxlcyBvciByZW1vdmVzCi1hIHBhZ2UgZnJvbSBQYWdlIENhY2hlIGlzIHVzZWQgdG8gZGVjcmVtZW50IHRoZSBhY2NvdW50aW5nIGNvdW50ZXJzIG9mIHRoZQotY2dyb3VwLgorQWxsIG1hcHBlZCBhbm9uIHBhZ2VzIChSU1MpIGFuZCBjYWNoZSBwYWdlcyAoUGFnZSBDYWNoZSkgYXJlIGFjY291bnRlZC4KKyhzb21lIHBhZ2VzIHdoaWNoIG5ldmVyIGJlIHJlY2xhaW1hYmxlIGFuZCB3aWxsIG5vdCBiZSBvbiBnbG9iYWwgTFJVCisgYXJlIG5vdCBhY2NvdW50ZWQuIHdlIGp1c3QgYWNjb3VudHMgcGFnZXMgdW5kZXIgdXN1YWwgdm0gbWFuYWdlbWVudC4pCisKK1JTUyBwYWdlcyBhcmUgYWNjb3VudGVkIGF0IHBhZ2VfZmF1bHQgdW5sZXNzIHRoZXkndmUgYWxyZWFkeSBiZWVuIGFjY291bnRlZAorZm9yIGVhcmxpZXIuIEEgZmlsZSBwYWdlIHdpbGwgYmUgYWNjb3VudGVkIGZvciBhcyBQYWdlIENhY2hlIHdoZW4gaXQncworaW5zZXJ0ZWQgaW50byBpbm9kZSAocmFkaXgtdHJlZSkuIFdoaWxlIGl0J3MgbWFwcGVkIGludG8gdGhlIHBhZ2UgdGFibGVzIG9mCitwcm9jZXNzZXMsIGR1cGxpY2F0ZSBhY2NvdW50aW5nIGlzIGNhcmVmdWxseSBhdm9pZGVkLgorCitBIFJTUyBwYWdlIGlzIHVuYWNjb3VudGVkIHdoZW4gaXQncyBmdWxseSB1bm1hcHBlZC4gQSBQYWdlQ2FjaGUgcGFnZSBpcwordW5hY2NvdW50ZWQgd2hlbiBpdCdzIHJlbW92ZWQgZnJvbSByYWRpeC10cmVlLgorCitBdCBwYWdlIG1pZ3JhdGlvbiwgYWNjb3VudGluZyBpbmZvcm1hdGlvbiBpcyBrZXB0LgorCitOb3RlOiB3ZSBqdXN0IGFjY291bnQgcGFnZXMtb24tbHJ1IGJlY2F1c2Ugb3VyIHB1cnBvc2UgaXMgdG8gY29udHJvbCBhbW91bnQKK29mIHVzZWQgcGFnZXMuIG5vdC1vbi1scnUgcGFnZXMgYXJlIHRlbmQgdG8gYmUgb3V0LW9mLWNvbnRyb2wgZnJvbSB2bSB2aWV3LgogCiAyLjMgU2hhcmVkIFBhZ2UgQWNjb3VudGluZwogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2NwdXNldHMudHh0IGIvRG9jdW1lbnRhdGlvbi9jcHVzZXRzLnR4dAppbmRleCA0N2U1NjhhLi41Yzg2YzI1IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2NwdXNldHMudHh0CisrKyBiL0RvY3VtZW50YXRpb24vY3B1c2V0cy50eHQKQEAgLTQ4LDcgKzQ4LDcgQEAKIGpvYiBwbGFjZW1lbnQgb24gbGFyZ2Ugc3lzdGVtcy4KIAogQ3B1c2V0cyB1c2UgdGhlIGdlbmVyaWMgY2dyb3VwIHN1YnN5c3RlbSBkZXNjcmliZWQgaW4KLURvY3VtZW50YXRpb24vY2dyb3VwLnR4dC4KK0RvY3VtZW50YXRpb24vY2dyb3Vwcy9jZ3JvdXBzLnR4dC4KIAogUmVxdWVzdHMgYnkgYSB0YXNrLCB1c2luZyB0aGUgc2NoZWRfc2V0YWZmaW5pdHkoMikgc3lzdGVtIGNhbGwgdG8KIGluY2x1ZGUgQ1BVcyBpbiBpdHMgQ1BVIGFmZmluaXR5IG1hc2ssIGFuZCB1c2luZyB0aGUgbWJpbmQoMikgYW5kCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2NyaXMvUkVBRE1FIGIvRG9jdW1lbnRhdGlvbi9jcmlzL1JFQURNRQppbmRleCA3OTVhMWRhLi5kOWIwODY4IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2NyaXMvUkVBRE1FCisrKyBiL0RvY3VtZW50YXRpb24vY3Jpcy9SRUFETUUKQEAgLTI3LDcgKzI3LDcgQEAKIFRoZSBFVFJBWCAxMDBMWCBjaGlwCiAtLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1Gb3IgcmVmZXJlbmNlLCBwbGFzZSBzZWUgdGhlIHByZXNzLXJlbGVhc2U6CitGb3IgcmVmZXJlbmNlLCBwbGVhc2Ugc2VlIHRoZSBwcmVzcy1yZWxlYXNlOgogCiBodHRwOi8vd3d3LmF4aXMuY29tL25ld3MvdXMvMDAxMTAxX2V0cmF4Lmh0bQogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmVsb3BtZW50LXByb2Nlc3MvMS5JbnRybyBiL0RvY3VtZW50YXRpb24vZGV2ZWxvcG1lbnQtcHJvY2Vzcy8xLkludHJvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhjYzJjYmEKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2RldmVsb3BtZW50LXByb2Nlc3MvMS5JbnRybwpAQCAtMCwwICsxLDI3NCBAQAorMTogQSBHVUlERSBUTyBUSEUgS0VSTkVMIERFVkVMT1BNRU5UIFBST0NFU1MKKworVGhlIHB1cnBvc2Ugb2YgdGhpcyBkb2N1bWVudCBpcyB0byBoZWxwIGRldmVsb3BlcnMgKGFuZCB0aGVpciBtYW5hZ2VycykKK3dvcmsgd2l0aCB0aGUgZGV2ZWxvcG1lbnQgY29tbXVuaXR5IHdpdGggYSBtaW5pbXVtIG9mIGZydXN0cmF0aW9uLiAgSXQgaXMKK2FuIGF0dGVtcHQgdG8gZG9jdW1lbnQgaG93IHRoaXMgY29tbXVuaXR5IHdvcmtzIGluIGEgd2F5IHdoaWNoIGlzCithY2Nlc3NpYmxlIHRvIHRob3NlIHdobyBhcmUgbm90IGludGltYXRlbHkgZmFtaWxpYXIgd2l0aCBMaW51eCBrZXJuZWwKK2RldmVsb3BtZW50IChvciwgaW5kZWVkLCBmcmVlIHNvZnR3YXJlIGRldmVsb3BtZW50IGluIGdlbmVyYWwpLiAgV2hpbGUKK3RoZXJlIGlzIHNvbWUgdGVjaG5pY2FsIG1hdGVyaWFsIGhlcmUsIHRoaXMgaXMgdmVyeSBtdWNoIGEgcHJvY2Vzcy1vcmllbnRlZAorZGlzY3Vzc2lvbiB3aGljaCBkb2VzIG5vdCByZXF1aXJlIGEgZGVlcCBrbm93bGVkZ2Ugb2Yga2VybmVsIHByb2dyYW1taW5nIHRvCit1bmRlcnN0YW5kLgorCisKKzEuMTogRVhFQ1VUSVZFIFNVTU1BUlkKKworVGhlIHJlc3Qgb2YgdGhpcyBzZWN0aW9uIGNvdmVycyB0aGUgc2NvcGUgb2YgdGhlIGtlcm5lbCBkZXZlbG9wbWVudCBwcm9jZXNzCithbmQgdGhlIGtpbmRzIG9mIGZydXN0cmF0aW9ucyB0aGF0IGRldmVsb3BlcnMgYW5kIHRoZWlyIGVtcGxveWVycyBjYW4KK2VuY291bnRlciB0aGVyZS4gIFRoZXJlIGFyZSBhIGdyZWF0IG1hbnkgcmVhc29ucyB3aHkga2VybmVsIGNvZGUgc2hvdWxkIGJlCittZXJnZWQgaW50byB0aGUgb2ZmaWNpYWwgKCJtYWlubGluZSIpIGtlcm5lbCwgaW5jbHVkaW5nIGF1dG9tYXRpYworYXZhaWxhYmlsaXR5IHRvIHVzZXJzLCBjb21tdW5pdHkgc3VwcG9ydCBpbiBtYW55IGZvcm1zLCBhbmQgdGhlIGFiaWxpdHkgdG8KK2luZmx1ZW5jZSB0aGUgZGlyZWN0aW9uIG9mIGtlcm5lbCBkZXZlbG9wbWVudC4gIENvZGUgY29udHJpYnV0ZWQgdG8gdGhlCitMaW51eCBrZXJuZWwgbXVzdCBiZSBtYWRlIGF2YWlsYWJsZSB1bmRlciBhIEdQTC1jb21wYXRpYmxlIGxpY2Vuc2UuCisKK1NlY3Rpb24gMiBpbnRyb2R1Y2VzIHRoZSBkZXZlbG9wbWVudCBwcm9jZXNzLCB0aGUga2VybmVsIHJlbGVhc2UgY3ljbGUsIGFuZAordGhlIG1lY2hhbmljcyBvZiB0aGUgbWVyZ2Ugd2luZG93LiAgVGhlIHZhcmlvdXMgcGhhc2VzIGluIHRoZSBwYXRjaAorZGV2ZWxvcG1lbnQsIHJldmlldywgYW5kIG1lcmdpbmcgY3ljbGUgYXJlIGNvdmVyZWQuICBUaGVyZSBpcyBzb21lCitkaXNjdXNzaW9uIG9mIHRvb2xzIGFuZCBtYWlsaW5nIGxpc3RzLiAgRGV2ZWxvcGVycyB3YW50aW5nIHRvIGdldCBzdGFydGVkCit3aXRoIGtlcm5lbCBkZXZlbG9wbWVudCBhcmUgZW5jb3VyYWdlZCB0byB0cmFjayBkb3duIGFuZCBmaXggYnVncyBhcyBhbgoraW5pdGlhbCBleGVyY2lzZS4KKworU2VjdGlvbiAzIGNvdmVycyBlYXJseS1zdGFnZSBwcm9qZWN0IHBsYW5uaW5nLCB3aXRoIGFuIGVtcGhhc2lzIG9uCitpbnZvbHZpbmcgdGhlIGRldmVsb3BtZW50IGNvbW11bml0eSBhcyBzb29uIGFzIHBvc3NpYmxlLgorCitTZWN0aW9uIDQgaXMgYWJvdXQgdGhlIGNvZGluZyBwcm9jZXNzOyBzZXZlcmFsIHBpdGZhbGxzIHdoaWNoIGhhdmUgYmVlbgorZW5jb3VudGVyZWQgYnkgb3RoZXIgZGV2ZWxvcGVycyBhcmUgZGlzY3Vzc2VkLiAgU29tZSByZXF1aXJlbWVudHMgZm9yCitwYXRjaGVzIGFyZSBjb3ZlcmVkLCBhbmQgdGhlcmUgaXMgYW4gaW50cm9kdWN0aW9uIHRvIHNvbWUgb2YgdGhlIHRvb2xzCit3aGljaCBjYW4gaGVscCB0byBlbnN1cmUgdGhhdCBrZXJuZWwgcGF0Y2hlcyBhcmUgY29ycmVjdC4KKworU2VjdGlvbiA1IHRhbGtzIGFib3V0IHRoZSBwcm9jZXNzIG9mIHBvc3RpbmcgcGF0Y2hlcyBmb3IgcmV2aWV3LiAgVG8gYmUKK3Rha2VuIHNlcmlvdXNseSBieSB0aGUgZGV2ZWxvcG1lbnQgY29tbXVuaXR5LCBwYXRjaGVzIG11c3QgYmUgcHJvcGVybHkKK2Zvcm1hdHRlZCBhbmQgZGVzY3JpYmVkLCBhbmQgdGhleSBtdXN0IGJlIHNlbnQgdG8gdGhlIHJpZ2h0IHBsYWNlLgorRm9sbG93aW5nIHRoZSBhZHZpY2UgaW4gdGhpcyBzZWN0aW9uIHNob3VsZCBoZWxwIHRvIGVuc3VyZSB0aGUgYmVzdAorcG9zc2libGUgcmVjZXB0aW9uIGZvciB5b3VyIHdvcmsuCisKK1NlY3Rpb24gNiBjb3ZlcnMgd2hhdCBoYXBwZW5zIGFmdGVyIHBvc3RpbmcgcGF0Y2hlczsgdGhlIGpvYiBpcyBmYXIgZnJvbQorZG9uZSBhdCB0aGF0IHBvaW50LiAgV29ya2luZyB3aXRoIHJldmlld2VycyBpcyBhIGNydWNpYWwgcGFydCBvZiB0aGUKK2RldmVsb3BtZW50IHByb2Nlc3M7IHRoaXMgc2VjdGlvbiBvZmZlcnMgYSBudW1iZXIgb2YgdGlwcyBvbiBob3cgdG8gYXZvaWQKK3Byb2JsZW1zIGF0IHRoaXMgaW1wb3J0YW50IHN0YWdlLiAgRGV2ZWxvcGVycyBhcmUgY2F1dGlvbmVkIGFnYWluc3QKK2Fzc3VtaW5nIHRoYXQgdGhlIGpvYiBpcyBkb25lIHdoZW4gYSBwYXRjaCBpcyBtZXJnZWQgaW50byB0aGUgbWFpbmxpbmUuCisKK1NlY3Rpb24gNyBpbnRyb2R1Y2VzIGEgY291cGxlIG9mICJhZHZhbmNlZCIgdG9waWNzOiBtYW5hZ2luZyBwYXRjaGVzIHdpdGgKK2dpdCBhbmQgcmV2aWV3aW5nIHBhdGNoZXMgcG9zdGVkIGJ5IG90aGVycy4KKworU2VjdGlvbiA4IGNvbmNsdWRlcyB0aGUgZG9jdW1lbnQgd2l0aCBwb2ludGVycyB0byBzb3VyY2VzIGZvciBtb3JlCitpbmZvcm1hdGlvbiBvbiBrZXJuZWwgZGV2ZWxvcG1lbnQuCisKKworMS4yOiBXSEFUIFRISVMgRE9DVU1FTlQgSVMgQUJPVVQKKworVGhlIExpbnV4IGtlcm5lbCwgYXQgb3ZlciA2IG1pbGxpb24gbGluZXMgb2YgY29kZSBhbmQgd2VsbCBvdmVyIDEwMDAgYWN0aXZlCitjb250cmlidXRvcnMsIGlzIG9uZSBvZiB0aGUgbGFyZ2VzdCBhbmQgbW9zdCBhY3RpdmUgZnJlZSBzb2Z0d2FyZSBwcm9qZWN0cworaW4gZXhpc3RlbmNlLiAgU2luY2UgaXRzIGh1bWJsZSBiZWdpbm5pbmcgaW4gMTk5MSwgdGhpcyBrZXJuZWwgaGFzIGV2b2x2ZWQKK2ludG8gYSBiZXN0LW9mLWJyZWVkIG9wZXJhdGluZyBzeXN0ZW0gY29tcG9uZW50IHdoaWNoIHJ1bnMgb24gcG9ja2V0LXNpemVkCitkaWdpdGFsIG11c2ljIHBsYXllcnMsIGRlc2t0b3AgUENzLCB0aGUgbGFyZ2VzdCBzdXBlcmNvbXB1dGVycyBpbgorZXhpc3RlbmNlLCBhbmQgYWxsIHR5cGVzIG9mIHN5c3RlbXMgaW4gYmV0d2Vlbi4gIEl0IGlzIGEgcm9idXN0LCBlZmZpY2llbnQsCithbmQgc2NhbGFibGUgc29sdXRpb24gZm9yIGFsbW9zdCBhbnkgc2l0dWF0aW9uLgorCitXaXRoIHRoZSBncm93dGggb2YgTGludXggaGFzIGNvbWUgYW4gaW5jcmVhc2UgaW4gdGhlIG51bWJlciBvZiBkZXZlbG9wZXJzCisoYW5kIGNvbXBhbmllcykgd2lzaGluZyB0byBwYXJ0aWNpcGF0ZSBpbiBpdHMgZGV2ZWxvcG1lbnQuICBIYXJkd2FyZQordmVuZG9ycyB3YW50IHRvIGVuc3VyZSB0aGF0IExpbnV4IHN1cHBvcnRzIHRoZWlyIHByb2R1Y3RzIHdlbGwsIG1ha2luZwordGhvc2UgcHJvZHVjdHMgYXR0cmFjdGl2ZSB0byBMaW51eCB1c2Vycy4gIEVtYmVkZGVkIHN5c3RlbXMgdmVuZG9ycywgd2hvCit1c2UgTGludXggYXMgYSBjb21wb25lbnQgaW4gYW4gaW50ZWdyYXRlZCBwcm9kdWN0LCB3YW50IExpbnV4IHRvIGJlIGFzCitjYXBhYmxlIGFuZCB3ZWxsLXN1aXRlZCB0byB0aGUgdGFzayBhdCBoYW5kIGFzIHBvc3NpYmxlLiAgRGlzdHJpYnV0b3JzIGFuZAorb3RoZXIgc29mdHdhcmUgdmVuZG9ycyB3aG8gYmFzZSB0aGVpciBwcm9kdWN0cyBvbiBMaW51eCBoYXZlIGEgY2xlYXIKK2ludGVyZXN0IGluIHRoZSBjYXBhYmlsaXRpZXMsIHBlcmZvcm1hbmNlLCBhbmQgcmVsaWFiaWxpdHkgb2YgdGhlIExpbnV4CitrZXJuZWwuICBBbmQgZW5kIHVzZXJzLCB0b28sIHdpbGwgb2Z0ZW4gd2lzaCB0byBjaGFuZ2UgTGludXggdG8gbWFrZSBpdAorYmV0dGVyIHN1aXQgdGhlaXIgbmVlZHMuCisKK09uZSBvZiB0aGUgbW9zdCBjb21wZWxsaW5nIGZlYXR1cmVzIG9mIExpbnV4IGlzIHRoYXQgaXQgaXMgYWNjZXNzaWJsZSB0bwordGhlc2UgZGV2ZWxvcGVyczsgYW55Ym9keSB3aXRoIHRoZSByZXF1aXNpdGUgc2tpbGxzIGNhbiBpbXByb3ZlIExpbnV4IGFuZAoraW5mbHVlbmNlIHRoZSBkaXJlY3Rpb24gb2YgaXRzIGRldmVsb3BtZW50LiAgUHJvcHJpZXRhcnkgcHJvZHVjdHMgY2Fubm90CitvZmZlciB0aGlzIGtpbmQgb2Ygb3Blbm5lc3MsIHdoaWNoIGlzIGEgY2hhcmFjdGVyaXN0aWMgb2YgdGhlIGZyZWUgc29mdHdhcmUKK3Byb2Nlc3MuICBCdXQsIGlmIGFueXRoaW5nLCB0aGUga2VybmVsIGlzIGV2ZW4gbW9yZSBvcGVuIHRoYW4gbW9zdCBvdGhlcgorZnJlZSBzb2Z0d2FyZSBwcm9qZWN0cy4gIEEgdHlwaWNhbCB0aHJlZS1tb250aCBrZXJuZWwgZGV2ZWxvcG1lbnQgY3ljbGUgY2FuCitpbnZvbHZlIG92ZXIgMTAwMCBkZXZlbG9wZXJzIHdvcmtpbmcgZm9yIG1vcmUgdGhhbiAxMDAgZGlmZmVyZW50IGNvbXBhbmllcworKG9yIGZvciBubyBjb21wYW55IGF0IGFsbCkuCisKK1dvcmtpbmcgd2l0aCB0aGUga2VybmVsIGRldmVsb3BtZW50IGNvbW11bml0eSBpcyBub3QgZXNwZWNpYWxseSBoYXJkLiAgQnV0LAordGhhdCBub3R3aXRoc3RhbmRpbmcsIG1hbnkgcG90ZW50aWFsIGNvbnRyaWJ1dG9ycyBoYXZlIGV4cGVyaWVuY2VkCitkaWZmaWN1bHRpZXMgd2hlbiB0cnlpbmcgdG8gZG8ga2VybmVsIHdvcmsuICBUaGUga2VybmVsIGNvbW11bml0eSBoYXMKK2V2b2x2ZWQgaXRzIG93biBkaXN0aW5jdCB3YXlzIG9mIG9wZXJhdGluZyB3aGljaCBhbGxvdyBpdCB0byBmdW5jdGlvbgorc21vb3RobHkgKGFuZCBwcm9kdWNlIGEgaGlnaC1xdWFsaXR5IHByb2R1Y3QpIGluIGFuIGVudmlyb25tZW50IHdoZXJlCit0aG91c2FuZHMgb2YgbGluZXMgb2YgY29kZSBhcmUgYmVpbmcgY2hhbmdlZCBldmVyeSBkYXkuICBTbyBpdCBpcyBub3QKK3N1cnByaXNpbmcgdGhhdCBMaW51eCBrZXJuZWwgZGV2ZWxvcG1lbnQgcHJvY2VzcyBkaWZmZXJzIGdyZWF0bHkgZnJvbQorcHJvcHJpZXRhcnkgZGV2ZWxvcG1lbnQgbWV0aG9kcy4KKworVGhlIGtlcm5lbCdzIGRldmVsb3BtZW50IHByb2Nlc3MgbWF5IGNvbWUgYWNyb3NzIGFzIHN0cmFuZ2UgYW5kCitpbnRpbWlkYXRpbmcgdG8gbmV3IGRldmVsb3BlcnMsIGJ1dCB0aGVyZSBhcmUgZ29vZCByZWFzb25zIGFuZCBzb2xpZAorZXhwZXJpZW5jZSBiZWhpbmQgaXQuICBBIGRldmVsb3BlciB3aG8gZG9lcyBub3QgdW5kZXJzdGFuZCB0aGUga2VybmVsCitjb21tdW5pdHkncyB3YXlzIChvciwgd29yc2UsIHdobyB0cmllcyB0byBmbG91dCBvciBjaXJjdW12ZW50IHRoZW0pIHdpbGwKK2hhdmUgYSBmcnVzdHJhdGluZyBleHBlcmllbmNlIGluIHN0b3JlLiAgVGhlIGRldmVsb3BtZW50IGNvbW11bml0eSwgd2hpbGUKK2JlaW5nIGhlbHBmdWwgdG8gdGhvc2Ugd2hvIGFyZSB0cnlpbmcgdG8gbGVhcm4sIGhhcyBsaXR0bGUgdGltZSBmb3IgdGhvc2UKK3dobyB3aWxsIG5vdCBsaXN0ZW4gb3Igd2hvIGRvIG5vdCBjYXJlIGFib3V0IHRoZSBkZXZlbG9wbWVudCBwcm9jZXNzLgorCitJdCBpcyBob3BlZCB0aGF0IHRob3NlIHdobyByZWFkIHRoaXMgZG9jdW1lbnQgd2lsbCBiZSBhYmxlIHRvIGF2b2lkIHRoYXQKK2ZydXN0cmF0aW5nIGV4cGVyaWVuY2UuICBUaGVyZSBpcyBhIGxvdCBvZiBtYXRlcmlhbCBoZXJlLCBidXQgdGhlIGVmZm9ydAoraW52b2x2ZWQgaW4gcmVhZGluZyBpdCB3aWxsIGJlIHJlcGFpZCBpbiBzaG9ydCBvcmRlci4gIFRoZSBkZXZlbG9wbWVudAorY29tbXVuaXR5IGlzIGFsd2F5cyBpbiBuZWVkIG9mIGRldmVsb3BlcnMgd2hvIHdpbGwgaGVscCB0byBtYWtlIHRoZSBrZXJuZWwKK2JldHRlcjsgdGhlIGZvbGxvd2luZyB0ZXh0IHNob3VsZCBoZWxwIHlvdSAtIG9yIHRob3NlIHdobyB3b3JrIGZvciB5b3UgLQoram9pbiBvdXIgY29tbXVuaXR5LgorCisKKzEuMzogQ1JFRElUUworCitUaGlzIGRvY3VtZW50IHdhcyB3cml0dGVuIGJ5IEpvbmF0aGFuIENvcmJldCwgY29yYmV0QGx3bi5uZXQuICBJdCBoYXMgYmVlbgoraW1wcm92ZWQgYnkgY29tbWVudHMgZnJvbSBKb2hhbm5lcyBCZXJnLCBKYW1lcyBCZXJyeSwgQWxleCBDaGlhbmcsIFJvbGFuZAorRHJlaWVyLCBSYW5keSBEdW5sYXAsIEpha2UgRWRnZSwgSmlyaSBLb3NpbmEsIE1hdHQgTWFja2FsbCwgQXJ0aHVyIE1hcnNoLAorQW1hbmRhIE1jUGhlcnNvbiwgQW5kcmV3IE1vcnRvbiwgQW5kcmV3IFByaWNlLCBUc3VnaWthenUgU2hpYmF0YSwgYW5kCitKb2NoZW4gVm/Dny4gCisKK1RoaXMgd29yayB3YXMgc3VwcG9ydGVkIGJ5IHRoZSBMaW51eCBGb3VuZGF0aW9uOyB0aGFua3MgZXNwZWNpYWxseSB0bworQW1hbmRhIE1jUGhlcnNvbiwgd2hvIHNhdyB0aGUgdmFsdWUgb2YgdGhpcyBlZmZvcnQgYW5kIG1hZGUgaXQgYWxsIGhhcHBlbi4KKworCisxLjQ6IFRIRSBJTVBPUlRBTkNFIE9GIEdFVFRJTkcgQ09ERSBJTlRPIFRIRSBNQUlOTElORQorCitTb21lIGNvbXBhbmllcyBhbmQgZGV2ZWxvcGVycyBvY2Nhc2lvbmFsbHkgd29uZGVyIHdoeSB0aGV5IHNob3VsZCBib3RoZXIKK2xlYXJuaW5nIGhvdyB0byB3b3JrIHdpdGggdGhlIGtlcm5lbCBjb21tdW5pdHkgYW5kIGdldCB0aGVpciBjb2RlIGludG8gdGhlCittYWlubGluZSBrZXJuZWwgKHRoZSAibWFpbmxpbmUiIGJlaW5nIHRoZSBrZXJuZWwgbWFpbnRhaW5lZCBieSBMaW51cworVG9ydmFsZHMgYW5kIHVzZWQgYXMgYSBiYXNlIGJ5IExpbnV4IGRpc3RyaWJ1dG9ycykuICBJbiB0aGUgc2hvcnQgdGVybSwKK2NvbnRyaWJ1dGluZyBjb2RlIGNhbiBsb29rIGxpa2UgYW4gYXZvaWRhYmxlIGV4cGVuc2U7IGl0IHNlZW1zIGVhc2llciB0bworanVzdCBrZWVwIHRoZSBjb2RlIHNlcGFyYXRlIGFuZCBzdXBwb3J0IHVzZXJzIGRpcmVjdGx5LiAgVGhlIHRydXRoIG9mIHRoZQorbWF0dGVyIGlzIHRoYXQga2VlcGluZyBjb2RlIHNlcGFyYXRlICgib3V0IG9mIHRyZWUiKSBpcyBhIGZhbHNlIGVjb25vbXkuCisKK0FzIGEgd2F5IG9mIGlsbHVzdHJhdGluZyB0aGUgY29zdHMgb2Ygb3V0LW9mLXRyZWUgY29kZSwgaGVyZSBhcmUgYSBmZXcKK3JlbGV2YW50IGFzcGVjdHMgb2YgdGhlIGtlcm5lbCBkZXZlbG9wbWVudCBwcm9jZXNzOyBtb3N0IG9mIHRoZXNlIHdpbGwgYmUKK2Rpc2N1c3NlZCBpbiBncmVhdGVyIGRldGFpbCBsYXRlciBpbiB0aGlzIGRvY3VtZW50LiAgQ29uc2lkZXI6CisKKy0gQ29kZSB3aGljaCBoYXMgYmVlbiBtZXJnZWQgaW50byB0aGUgbWFpbmxpbmUga2VybmVsIGlzIGF2YWlsYWJsZSB0byBhbGwKKyAgTGludXggdXNlcnMuICBJdCB3aWxsIGF1dG9tYXRpY2FsbHkgYmUgcHJlc2VudCBvbiBhbGwgZGlzdHJpYnV0aW9ucyB3aGljaAorICBlbmFibGUgaXQuICBUaGVyZSBpcyBubyBuZWVkIGZvciBkcml2ZXIgZGlza3MsIGRvd25sb2Fkcywgb3IgdGhlIGhhc3NsZXMKKyAgb2Ygc3VwcG9ydGluZyBtdWx0aXBsZSB2ZXJzaW9ucyBvZiBtdWx0aXBsZSBkaXN0cmlidXRpb25zOyBpdCBhbGwganVzdAorICB3b3JrcywgZm9yIHRoZSBkZXZlbG9wZXIgYW5kIGZvciB0aGUgdXNlci4gIEluY29ycG9yYXRpb24gaW50byB0aGUKKyAgbWFpbmxpbmUgc29sdmVzIGEgbGFyZ2UgbnVtYmVyIG9mIGRpc3RyaWJ1dGlvbiBhbmQgc3VwcG9ydCBwcm9ibGVtcy4KKworLSBXaGlsZSBrZXJuZWwgZGV2ZWxvcGVycyBzdHJpdmUgdG8gbWFpbnRhaW4gYSBzdGFibGUgaW50ZXJmYWNlIHRvIHVzZXIKKyAgc3BhY2UsIHRoZSBpbnRlcm5hbCBrZXJuZWwgQVBJIGlzIGluIGNvbnN0YW50IGZsdXguICBUaGUgbGFjayBvZiBhIHN0YWJsZQorICBpbnRlcm5hbCBpbnRlcmZhY2UgaXMgYSBkZWxpYmVyYXRlIGRlc2lnbiBkZWNpc2lvbjsgaXQgYWxsb3dzIGZ1bmRhbWVudGFsCisgIGltcHJvdmVtZW50cyB0byBiZSBtYWRlIGF0IGFueSB0aW1lIGFuZCByZXN1bHRzIGluIGhpZ2hlci1xdWFsaXR5IGNvZGUuCisgIEJ1dCBvbmUgcmVzdWx0IG9mIHRoYXQgcG9saWN5IGlzIHRoYXQgYW55IG91dC1vZi10cmVlIGNvZGUgcmVxdWlyZXMKKyAgY29uc3RhbnQgdXBrZWVwIGlmIGl0IGlzIHRvIHdvcmsgd2l0aCBuZXcga2VybmVscy4gIE1haW50YWluaW5nCisgIG91dC1vZi10cmVlIGNvZGUgcmVxdWlyZXMgc2lnbmlmaWNhbnQgYW1vdW50cyBvZiB3b3JrIGp1c3QgdG8ga2VlcCB0aGF0CisgIGNvZGUgd29ya2luZy4KKworICBDb2RlIHdoaWNoIGlzIGluIHRoZSBtYWlubGluZSwgaW5zdGVhZCwgZG9lcyBub3QgcmVxdWlyZSB0aGlzIHdvcmsgYXMgdGhlCisgIHJlc3VsdCBvZiBhIHNpbXBsZSBydWxlIHJlcXVpcmluZyBhbnkgZGV2ZWxvcGVyIHdobyBtYWtlcyBhbiBBUEkgY2hhbmdlCisgIHRvIGFsc28gZml4IGFueSBjb2RlIHRoYXQgYnJlYWtzIGFzIHRoZSByZXN1bHQgb2YgdGhhdCBjaGFuZ2UuICBTbyBjb2RlCisgIHdoaWNoIGhhcyBiZWVuIG1lcmdlZCBpbnRvIHRoZSBtYWlubGluZSBoYXMgc2lnbmlmaWNhbnRseSBsb3dlcgorICBtYWludGVuYW5jZSBjb3N0cy4KKworLSBCZXlvbmQgdGhhdCwgY29kZSB3aGljaCBpcyBpbiB0aGUga2VybmVsIHdpbGwgb2Z0ZW4gYmUgaW1wcm92ZWQgYnkgb3RoZXIKKyAgZGV2ZWxvcGVycy4gIFN1cnByaXNpbmcgcmVzdWx0cyBjYW4gY29tZSBmcm9tIGVtcG93ZXJpbmcgeW91ciB1c2VyCisgIGNvbW11bml0eSBhbmQgY3VzdG9tZXJzIHRvIGltcHJvdmUgeW91ciBwcm9kdWN0LgorCistIEtlcm5lbCBjb2RlIGlzIHN1YmplY3RlZCB0byByZXZpZXcsIGJvdGggYmVmb3JlIGFuZCBhZnRlciBtZXJnaW5nIGludG8KKyAgdGhlIG1haW5saW5lLiAgTm8gbWF0dGVyIGhvdyBzdHJvbmcgdGhlIG9yaWdpbmFsIGRldmVsb3BlcidzIHNraWxscyBhcmUsCisgIHRoaXMgcmV2aWV3IHByb2Nlc3MgaW52YXJpYWJseSBmaW5kcyB3YXlzIGluIHdoaWNoIHRoZSBjb2RlIGNhbiBiZQorICBpbXByb3ZlZC4gIE9mdGVuIHJldmlldyBmaW5kcyBzZXZlcmUgYnVncyBhbmQgc2VjdXJpdHkgcHJvYmxlbXMuICBUaGlzIGlzCisgIGVzcGVjaWFsbHkgdHJ1ZSBmb3IgY29kZSB3aGljaCBoYXMgYmVlbiBkZXZlbG9wZWQgaW4gYSBjbG9zZWQKKyAgZW52aXJvbm1lbnQ7IHN1Y2ggY29kZSBiZW5lZml0cyBzdHJvbmdseSBmcm9tIHJldmlldyBieSBvdXRzaWRlCisgIGRldmVsb3BlcnMuICBPdXQtb2YtdHJlZSBjb2RlIGlzIGxvd2VyLXF1YWxpdHkgY29kZS4KKworLSBQYXJ0aWNpcGF0aW9uIGluIHRoZSBkZXZlbG9wbWVudCBwcm9jZXNzIGlzIHlvdXIgd2F5IHRvIGluZmx1ZW5jZSB0aGUKKyAgZGlyZWN0aW9uIG9mIGtlcm5lbCBkZXZlbG9wbWVudC4gIFVzZXJzIHdobyBjb21wbGFpbiBmcm9tIHRoZSBzaWRlbGluZXMKKyAgYXJlIGhlYXJkLCBidXQgYWN0aXZlIGRldmVsb3BlcnMgaGF2ZSBhIHN0cm9uZ2VyIHZvaWNlIC0gYW5kIHRoZSBhYmlsaXR5CisgIHRvIGltcGxlbWVudCBjaGFuZ2VzIHdoaWNoIG1ha2UgdGhlIGtlcm5lbCB3b3JrIGJldHRlciBmb3IgdGhlaXIgbmVlZHMuCisKKy0gV2hlbiBjb2RlIGlzIG1haW50YWluZWQgc2VwYXJhdGVseSwgdGhlIHBvc3NpYmlsaXR5IHRoYXQgYSB0aGlyZCBwYXJ0eQorICB3aWxsIGNvbnRyaWJ1dGUgYSBkaWZmZXJlbnQgaW1wbGVtZW50YXRpb24gb2YgYSBzaW1pbGFyIGZlYXR1cmUgYWx3YXlzCisgIGV4aXN0cy4gIFNob3VsZCB0aGF0IGhhcHBlbiwgZ2V0dGluZyB5b3VyIGNvZGUgbWVyZ2VkIHdpbGwgYmVjb21lIG11Y2gKKyAgaGFyZGVyIC0gdG8gdGhlIHBvaW50IG9mIGltcG9zc2liaWxpdHkuICBUaGVuIHlvdSB3aWxsIGJlIGZhY2VkIHdpdGggdGhlCisgIHVucGxlYXNhbnQgYWx0ZXJuYXRpdmVzIG9mIGVpdGhlciAoMSkgbWFpbnRhaW5pbmcgYSBub25zdGFuZGFyZCBmZWF0dXJlCisgIG91dCBvZiB0cmVlIGluZGVmaW5pdGVseSwgb3IgKDIpIGFiYW5kb25pbmcgeW91ciBjb2RlIGFuZCBtaWdyYXRpbmcgeW91cgorICB1c2VycyBvdmVyIHRvIHRoZSBpbi10cmVlIHZlcnNpb24uCisKKy0gQ29udHJpYnV0aW9uIG9mIGNvZGUgaXMgdGhlIGZ1bmRhbWVudGFsIGFjdGlvbiB3aGljaCBtYWtlcyB0aGUgd2hvbGUKKyAgcHJvY2VzcyB3b3JrLiAgQnkgY29udHJpYnV0aW5nIHlvdXIgY29kZSB5b3UgY2FuIGFkZCBuZXcgZnVuY3Rpb25hbGl0eSB0bworICB0aGUga2VybmVsIGFuZCBwcm92aWRlIGNhcGFiaWxpdGllcyBhbmQgZXhhbXBsZXMgd2hpY2ggYXJlIG9mIHVzZSB0bworICBvdGhlciBrZXJuZWwgZGV2ZWxvcGVycy4gIElmIHlvdSBoYXZlIGRldmVsb3BlZCBjb2RlIGZvciBMaW51eCAob3IgYXJlCisgIHRoaW5raW5nIGFib3V0IGRvaW5nIHNvKSwgeW91IGNsZWFybHkgaGF2ZSBhbiBpbnRlcmVzdCBpbiB0aGUgY29udGludWVkCisgIHN1Y2Nlc3Mgb2YgdGhpcyBwbGF0Zm9ybTsgY29udHJpYnV0aW5nIGNvZGUgaXMgb25lIG9mIHRoZSBiZXN0IHdheXMgdG8KKyAgaGVscCBlbnN1cmUgdGhhdCBzdWNjZXNzLgorCitBbGwgb2YgdGhlIHJlYXNvbmluZyBhYm92ZSBhcHBsaWVzIHRvIGFueSBvdXQtb2YtdHJlZSBrZXJuZWwgY29kZSwKK2luY2x1ZGluZyBjb2RlIHdoaWNoIGlzIGRpc3RyaWJ1dGVkIGluIHByb3ByaWV0YXJ5LCBiaW5hcnktb25seSBmb3JtLgorVGhlcmUgYXJlLCBob3dldmVyLCBhZGRpdGlvbmFsIGZhY3RvcnMgd2hpY2ggc2hvdWxkIGJlIHRha2VuIGludG8gYWNjb3VudAorYmVmb3JlIGNvbnNpZGVyaW5nIGFueSBzb3J0IG9mIGJpbmFyeS1vbmx5IGtlcm5lbCBjb2RlIGRpc3RyaWJ1dGlvbi4gIFRoZXNlCitpbmNsdWRlOgorCistIFRoZSBsZWdhbCBpc3N1ZXMgYXJvdW5kIHRoZSBkaXN0cmlidXRpb24gb2YgcHJvcHJpZXRhcnkga2VybmVsIG1vZHVsZXMKKyAgYXJlIGNsb3VkeSBhdCBiZXN0OyBxdWl0ZSBhIGZldyBrZXJuZWwgY29weXJpZ2h0IGhvbGRlcnMgYmVsaWV2ZSB0aGF0CisgIG1vc3QgYmluYXJ5LW9ubHkgbW9kdWxlcyBhcmUgZGVyaXZlZCBwcm9kdWN0cyBvZiB0aGUga2VybmVsIGFuZCB0aGF0LCBhcworICBhIHJlc3VsdCwgdGhlaXIgZGlzdHJpYnV0aW9uIGlzIGEgdmlvbGF0aW9uIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAgbGljZW5zZSAoYWJvdXQgd2hpY2ggbW9yZSB3aWxsIGJlIHNhaWQgYmVsb3cpLiAgWW91ciBhdXRob3IgaXMgbm90IGEKKyAgbGF3eWVyLCBhbmQgbm90aGluZyBpbiB0aGlzIGRvY3VtZW50IGNhbiBwb3NzaWJseSBiZSBjb25zaWRlcmVkIHRvIGJlCisgIGxlZ2FsIGFkdmljZS4gIFRoZSB0cnVlIGxlZ2FsIHN0YXR1cyBvZiBjbG9zZWQtc291cmNlIG1vZHVsZXMgY2FuIG9ubHkgYmUKKyAgZGV0ZXJtaW5lZCBieSB0aGUgY291cnRzLiAgQnV0IHRoZSB1bmNlcnRhaW50eSB3aGljaCBoYXVudHMgdGhvc2UgbW9kdWxlcworICBpcyB0aGVyZSByZWdhcmRsZXNzLgorCistIEJpbmFyeSBtb2R1bGVzIGdyZWF0bHkgaW5jcmVhc2UgdGhlIGRpZmZpY3VsdHkgb2YgZGVidWdnaW5nIGtlcm5lbAorICBwcm9ibGVtcywgdG8gdGhlIHBvaW50IHRoYXQgbW9zdCBrZXJuZWwgZGV2ZWxvcGVycyB3aWxsIG5vdCBldmVuIHRyeS4gIFNvCisgIHRoZSBkaXN0cmlidXRpb24gb2YgYmluYXJ5LW9ubHkgbW9kdWxlcyB3aWxsIG1ha2UgaXQgaGFyZGVyIGZvciB5b3VyCisgIHVzZXJzIHRvIGdldCBzdXBwb3J0IGZyb20gdGhlIGNvbW11bml0eS4KKworLSBTdXBwb3J0IGlzIGFsc28gaGFyZGVyIGZvciBkaXN0cmlidXRvcnMgb2YgYmluYXJ5LW9ubHkgbW9kdWxlcywgd2hvIG11c3QKKyAgcHJvdmlkZSBhIHZlcnNpb24gb2YgdGhlIG1vZHVsZSBmb3IgZXZlcnkgZGlzdHJpYnV0aW9uIGFuZCBldmVyeSBrZXJuZWwKKyAgdmVyc2lvbiB0aGV5IHdpc2ggdG8gc3VwcG9ydC4gIERvemVucyBvZiBidWlsZHMgb2YgYSBzaW5nbGUgbW9kdWxlIGNhbgorICBiZSByZXF1aXJlZCB0byBwcm92aWRlIHJlYXNvbmFibHkgY29tcHJlaGVuc2l2ZSBjb3ZlcmFnZSwgYW5kIHlvdXIgdXNlcnMKKyAgd2lsbCBoYXZlIHRvIHVwZ3JhZGUgeW91ciBtb2R1bGUgc2VwYXJhdGVseSBldmVyeSB0aW1lIHRoZXkgdXBncmFkZSB0aGVpcgorICBrZXJuZWwuCisKKy0gRXZlcnl0aGluZyB0aGF0IHdhcyBzYWlkIGFib3ZlIGFib3V0IGNvZGUgcmV2aWV3IGFwcGxpZXMgZG91Ymx5IHRvCisgIGNsb3NlZC1zb3VyY2UgY29kZS4gIFNpbmNlIHRoaXMgY29kZSBpcyBub3QgYXZhaWxhYmxlIGF0IGFsbCwgaXQgY2Fubm90CisgIGhhdmUgYmVlbiByZXZpZXdlZCBieSB0aGUgY29tbXVuaXR5IGFuZCB3aWxsLCBiZXlvbmQgZG91YnQsIGhhdmUgc2VyaW91cworICBwcm9ibGVtcy4gCisKK01ha2VycyBvZiBlbWJlZGRlZCBzeXN0ZW1zLCBpbiBwYXJ0aWN1bGFyLCBtYXkgYmUgdGVtcHRlZCB0byBkaXNyZWdhcmQgbXVjaAorb2Ygd2hhdCBoYXMgYmVlbiBzYWlkIGluIHRoaXMgc2VjdGlvbiBpbiB0aGUgYmVsaWVmIHRoYXQgdGhleSBhcmUgc2hpcHBpbmcKK2Egc2VsZi1jb250YWluZWQgcHJvZHVjdCB3aGljaCB1c2VzIGEgZnJvemVuIGtlcm5lbCB2ZXJzaW9uIGFuZCByZXF1aXJlcyBubworbW9yZSBkZXZlbG9wbWVudCBhZnRlciBpdHMgcmVsZWFzZS4gIFRoaXMgYXJndW1lbnQgbWlzc2VzIHRoZSB2YWx1ZSBvZgord2lkZXNwcmVhZCBjb2RlIHJldmlldyBhbmQgdGhlIHZhbHVlIG9mIGFsbG93aW5nIHlvdXIgdXNlcnMgdG8gYWRkCitjYXBhYmlsaXRpZXMgdG8geW91ciBwcm9kdWN0LiAgQnV0IHRoZXNlIHByb2R1Y3RzLCB0b28sIGhhdmUgYSBsaW1pdGVkCitjb21tZXJjaWFsIGxpZmUsIGFmdGVyIHdoaWNoIGEgbmV3IHZlcnNpb24gbXVzdCBiZSByZWxlYXNlZC4gIEF0IHRoYXQKK3BvaW50LCB2ZW5kb3JzIHdob3NlIGNvZGUgaXMgaW4gdGhlIG1haW5saW5lIGFuZCB3ZWxsIG1haW50YWluZWQgd2lsbCBiZQorbXVjaCBiZXR0ZXIgcG9zaXRpb25lZCB0byBnZXQgdGhlIG5ldyBwcm9kdWN0IHJlYWR5IGZvciBtYXJrZXQgcXVpY2tseS4KKworCisxLjU6IExJQ0VOU0lORworCitDb2RlIGlzIGNvbnRyaWJ1dGVkIHRvIHRoZSBMaW51eCBrZXJuZWwgdW5kZXIgYSBudW1iZXIgb2YgbGljZW5zZXMsIGJ1dCBhbGwKK2NvZGUgbXVzdCBiZSBjb21wYXRpYmxlIHdpdGggdmVyc2lvbiAyIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorKEdQTHYyKSwgd2hpY2ggaXMgdGhlIGxpY2Vuc2UgY292ZXJpbmcgdGhlIGtlcm5lbCBkaXN0cmlidXRpb24gYXMgYSB3aG9sZS4KK0luIHByYWN0aWNlLCB0aGF0IG1lYW5zIHRoYXQgYWxsIGNvZGUgY29udHJpYnV0aW9ucyBhcmUgY292ZXJlZCBlaXRoZXIgYnkKK0dQTHYyICh3aXRoLCBvcHRpb25hbGx5LCBsYW5ndWFnZSBhbGxvd2luZyBkaXN0cmlidXRpb24gdW5kZXIgbGF0ZXIKK3ZlcnNpb25zIG9mIHRoZSBHUEwpIG9yIHRoZSB0aHJlZS1jbGF1c2UgQlNEIGxpY2Vuc2UuICBBbnkgY29udHJpYnV0aW9ucword2hpY2ggYXJlIG5vdCBjb3ZlcmVkIGJ5IGEgY29tcGF0aWJsZSBsaWNlbnNlIHdpbGwgbm90IGJlIGFjY2VwdGVkIGludG8gdGhlCitrZXJuZWwuCisKK0NvcHlyaWdodCBhc3NpZ25tZW50cyBhcmUgbm90IHJlcXVpcmVkIChvciByZXF1ZXN0ZWQpIGZvciBjb2RlIGNvbnRyaWJ1dGVkCit0byB0aGUga2VybmVsLiAgQWxsIGNvZGUgbWVyZ2VkIGludG8gdGhlIG1haW5saW5lIGtlcm5lbCByZXRhaW5zIGl0cworb3JpZ2luYWwgb3duZXJzaGlwOyBhcyBhIHJlc3VsdCwgdGhlIGtlcm5lbCBub3cgaGFzIHRob3VzYW5kcyBvZiBvd25lcnMuCisKK09uZSBpbXBsaWNhdGlvbiBvZiB0aGlzIG93bmVyc2hpcCBzdHJ1Y3R1cmUgaXMgdGhhdCBhbnkgYXR0ZW1wdCB0byBjaGFuZ2UKK3RoZSBsaWNlbnNpbmcgb2YgdGhlIGtlcm5lbCBpcyBkb29tZWQgdG8gYWxtb3N0IGNlcnRhaW4gZmFpbHVyZS4gIFRoZXJlIGFyZQorZmV3IHByYWN0aWNhbCBzY2VuYXJpb3Mgd2hlcmUgdGhlIGFncmVlbWVudCBvZiBhbGwgY29weXJpZ2h0IGhvbGRlcnMgY291bGQKK2JlIG9idGFpbmVkIChvciB0aGVpciBjb2RlIHJlbW92ZWQgZnJvbSB0aGUga2VybmVsKS4gIFNvLCBpbiBwYXJ0aWN1bGFyLAordGhlcmUgaXMgbm8gcHJvc3BlY3Qgb2YgYSBtaWdyYXRpb24gdG8gdmVyc2lvbiAzIG9mIHRoZSBHUEwgaW4gdGhlCitmb3Jlc2VlYWJsZSBmdXR1cmUuCisKK0l0IGlzIGltcGVyYXRpdmUgdGhhdCBhbGwgY29kZSBjb250cmlidXRlZCB0byB0aGUga2VybmVsIGJlIGxlZ2l0aW1hdGVseQorZnJlZSBzb2Z0d2FyZS4gIEZvciB0aGF0IHJlYXNvbiwgY29kZSBmcm9tIGFub255bW91cyAob3IgcHNldWRvbnltb3VzKQorY29udHJpYnV0b3JzIHdpbGwgbm90IGJlIGFjY2VwdGVkLiAgQWxsIGNvbnRyaWJ1dG9ycyBhcmUgcmVxdWlyZWQgdG8gInNpZ24KK29mZiIgb24gdGhlaXIgY29kZSwgc3RhdGluZyB0aGF0IHRoZSBjb2RlIGNhbiBiZSBkaXN0cmlidXRlZCB3aXRoIHRoZQora2VybmVsIHVuZGVyIHRoZSBHUEwuICBDb2RlIHdoaWNoIGhhcyBub3QgYmVlbiBsaWNlbnNlZCBhcyBmcmVlIHNvZnR3YXJlIGJ5CitpdHMgb3duZXIsIG9yIHdoaWNoIHJpc2tzIGNyZWF0aW5nIGNvcHlyaWdodC1yZWxhdGVkIHByb2JsZW1zIGZvciB0aGUKK2tlcm5lbCAoc3VjaCBhcyBjb2RlIHdoaWNoIGRlcml2ZXMgZnJvbSByZXZlcnNlLWVuZ2luZWVyaW5nIGVmZm9ydHMgbGFja2luZworcHJvcGVyIHNhZmVndWFyZHMpIGNhbm5vdCBiZSBjb250cmlidXRlZC4KKworUXVlc3Rpb25zIGFib3V0IGNvcHlyaWdodC1yZWxhdGVkIGlzc3VlcyBhcmUgY29tbW9uIG9uIExpbnV4IGRldmVsb3BtZW50CittYWlsaW5nIGxpc3RzLiAgU3VjaCBxdWVzdGlvbnMgd2lsbCBub3JtYWxseSByZWNlaXZlIG5vIHNob3J0YWdlIG9mCithbnN3ZXJzLCBidXQgb25lIHNob3VsZCBiZWFyIGluIG1pbmQgdGhhdCB0aGUgcGVvcGxlIGFuc3dlcmluZyB0aG9zZQorcXVlc3Rpb25zIGFyZSBub3QgbGF3eWVycyBhbmQgY2Fubm90IHByb3ZpZGUgbGVnYWwgYWR2aWNlLiAgSWYgeW91IGhhdmUKK2xlZ2FsIHF1ZXN0aW9ucyByZWxhdGluZyB0byBMaW51eCBzb3VyY2UgY29kZSwgdGhlcmUgaXMgbm8gc3Vic3RpdHV0ZSBmb3IKK3RhbGtpbmcgd2l0aCBhIGxhd3llciB3aG8gdW5kZXJzdGFuZHMgdGhpcyBmaWVsZC4gIFJlbHlpbmcgb24gYW5zd2Vycworb2J0YWluZWQgb24gdGVjaG5pY2FsIG1haWxpbmcgbGlzdHMgaXMgYSByaXNreSBhZmZhaXIuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmVsb3BtZW50LXByb2Nlc3MvMi5Qcm9jZXNzIGIvRG9jdW1lbnRhdGlvbi9kZXZlbG9wbWVudC1wcm9jZXNzLzIuUHJvY2VzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNzUwMzIxCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZlbG9wbWVudC1wcm9jZXNzLzIuUHJvY2VzcwpAQCAtMCwwICsxLDQ1OSBAQAorMjogSE9XIFRIRSBERVZFTE9QTUVOVCBQUk9DRVNTIFdPUktTCisKK0xpbnV4IGtlcm5lbCBkZXZlbG9wbWVudCBpbiB0aGUgZWFybHkgMTk5MCdzIHdhcyBhIHByZXR0eSBsb29zZSBhZmZhaXIsCit3aXRoIHJlbGF0aXZlbHkgc21hbGwgbnVtYmVycyBvZiB1c2VycyBhbmQgZGV2ZWxvcGVycyBpbnZvbHZlZC4gIFdpdGggYQordXNlciBiYXNlIGluIHRoZSBtaWxsaW9ucyBhbmQgd2l0aCBzb21lIDIsMDAwIGRldmVsb3BlcnMgaW52b2x2ZWQgb3ZlciB0aGUKK2NvdXJzZSBvZiBvbmUgeWVhciwgdGhlIGtlcm5lbCBoYXMgc2luY2UgaGFkIHRvIGV2b2x2ZSBhIG51bWJlciBvZgorcHJvY2Vzc2VzIHRvIGtlZXAgZGV2ZWxvcG1lbnQgaGFwcGVuaW5nIHNtb290aGx5LiAgQSBzb2xpZCB1bmRlcnN0YW5kaW5nIG9mCitob3cgdGhlIHByb2Nlc3Mgd29ya3MgaXMgcmVxdWlyZWQgaW4gb3JkZXIgdG8gYmUgYW4gZWZmZWN0aXZlIHBhcnQgb2YgaXQuCisKKworMi4xOiBUSEUgQklHIFBJQ1RVUkUKKworVGhlIGtlcm5lbCBkZXZlbG9wZXJzIHVzZSBhIGxvb3NlbHkgdGltZS1iYXNlZCByZWxlYXNlIHByb2Nlc3MsIHdpdGggYSBuZXcKK21ham9yIGtlcm5lbCByZWxlYXNlIGhhcHBlbmluZyBldmVyeSB0d28gb3IgdGhyZWUgbW9udGhzLiAgVGhlIHJlY2VudAorcmVsZWFzZSBoaXN0b3J5IGxvb2tzIGxpa2UgdGhpczoKKworCTIuNi4yNglKdWx5IDEzLCAyMDA4CisJMi42LjI1CUFwcmlsIDE2LCAyMDA4CisJMi42LjI0CUphbnVhcnkgMjQsIDIwMDgKKwkyLjYuMjMJT2N0b2JlciA5LCAyMDA3CisJMi42LjIyCUp1bHkgOCwgMjAwNworCTIuNi4yMQlBcHJpbCAyNSwgMjAwNworCTIuNi4yMAlGZWJydWFyeSA0LCAyMDA3CisKK0V2ZXJ5IDIuNi54IHJlbGVhc2UgaXMgYSBtYWpvciBrZXJuZWwgcmVsZWFzZSB3aXRoIG5ldyBmZWF0dXJlcywgaW50ZXJuYWwKK0FQSSBjaGFuZ2VzLCBhbmQgbW9yZS4gIEEgdHlwaWNhbCAyLjYgcmVsZWFzZSBjYW4gY29udGFpbiBvdmVyIDEwLDAwMAorY2hhbmdlc2V0cyB3aXRoIGNoYW5nZXMgdG8gc2V2ZXJhbCBodW5kcmVkIHRob3VzYW5kIGxpbmVzIG9mIGNvZGUuICAyLjYgaXMKK3RodXMgdGhlIGxlYWRpbmcgZWRnZSBvZiBMaW51eCBrZXJuZWwgZGV2ZWxvcG1lbnQ7IHRoZSBrZXJuZWwgdXNlcyBhCityb2xsaW5nIGRldmVsb3BtZW50IG1vZGVsIHdoaWNoIGlzIGNvbnRpbnVhbGx5IGludGVncmF0aW5nIG1ham9yIGNoYW5nZXMuCisKK0EgcmVsYXRpdmVseSBzdHJhaWdodGZvcndhcmQgZGlzY2lwbGluZSBpcyBmb2xsb3dlZCB3aXRoIHJlZ2FyZCB0byB0aGUKK21lcmdpbmcgb2YgcGF0Y2hlcyBmb3IgZWFjaCByZWxlYXNlLiAgQXQgdGhlIGJlZ2lubmluZyBvZiBlYWNoIGRldmVsb3BtZW50CitjeWNsZSwgdGhlICJtZXJnZSB3aW5kb3ciIGlzIHNhaWQgdG8gYmUgb3Blbi4gIEF0IHRoYXQgdGltZSwgY29kZSB3aGljaCBpcworZGVlbWVkIHRvIGJlIHN1ZmZpY2llbnRseSBzdGFibGUgKGFuZCB3aGljaCBpcyBhY2NlcHRlZCBieSB0aGUgZGV2ZWxvcG1lbnQKK2NvbW11bml0eSkgaXMgbWVyZ2VkIGludG8gdGhlIG1haW5saW5lIGtlcm5lbC4gIFRoZSBidWxrIG9mIGNoYW5nZXMgZm9yIGEKK25ldyBkZXZlbG9wbWVudCBjeWNsZSAoYW5kIGFsbCBvZiB0aGUgbWFqb3IgY2hhbmdlcykgd2lsbCBiZSBtZXJnZWQgZHVyaW5nCit0aGlzIHRpbWUsIGF0IGEgcmF0ZSBhcHByb2FjaGluZyAxLDAwMCBjaGFuZ2VzICgicGF0Y2hlcywiIG9yICJjaGFuZ2VzZXRzIikKK3BlciBkYXkuCisKKyhBcyBhbiBhc2lkZSwgaXQgaXMgd29ydGggbm90aW5nIHRoYXQgdGhlIGNoYW5nZXMgaW50ZWdyYXRlZCBkdXJpbmcgdGhlCittZXJnZSB3aW5kb3cgZG8gbm90IGNvbWUgb3V0IG9mIHRoaW4gYWlyOyB0aGV5IGhhdmUgYmVlbiBjb2xsZWN0ZWQsIHRlc3RlZCwKK2FuZCBzdGFnZWQgYWhlYWQgb2YgdGltZS4gIEhvdyB0aGF0IHByb2Nlc3Mgd29ya3Mgd2lsbCBiZSBkZXNjcmliZWQgaW4KK2RldGFpbCBsYXRlciBvbikuCisKK1RoZSBtZXJnZSB3aW5kb3cgbGFzdHMgZm9yIHR3byB3ZWVrcy4gIEF0IHRoZSBlbmQgb2YgdGhpcyB0aW1lLCBMaW51cworVG9ydmFsZHMgd2lsbCBkZWNsYXJlIHRoYXQgdGhlIHdpbmRvdyBpcyBjbG9zZWQgYW5kIHJlbGVhc2UgdGhlIGZpcnN0IG9mCit0aGUgInJjIiBrZXJuZWxzLiAgRm9yIHRoZSBrZXJuZWwgd2hpY2ggaXMgZGVzdGluZWQgdG8gYmUgMi42LjI2LCBmb3IKK2V4YW1wbGUsIHRoZSByZWxlYXNlIHdoaWNoIGhhcHBlbnMgYXQgdGhlIGVuZCBvZiB0aGUgbWVyZ2Ugd2luZG93IHdpbGwgYmUKK2NhbGxlZCAyLjYuMjYtcmMxLiAgVGhlIC1yYzEgcmVsZWFzZSBpcyB0aGUgc2lnbmFsIHRoYXQgdGhlIHRpbWUgdG8gbWVyZ2UKK25ldyBmZWF0dXJlcyBoYXMgcGFzc2VkLCBhbmQgdGhhdCB0aGUgdGltZSB0byBzdGFiaWxpemUgdGhlIG5leHQga2VybmVsIGhhcworYmVndW4uCisKK092ZXIgdGhlIG5leHQgc2l4IHRvIHRlbiB3ZWVrcywgb25seSBwYXRjaGVzIHdoaWNoIGZpeCBwcm9ibGVtcyBzaG91bGQgYmUKK3N1Ym1pdHRlZCB0byB0aGUgbWFpbmxpbmUuICBPbiBvY2Nhc2lvbiBhIG1vcmUgc2lnbmlmaWNhbnQgY2hhbmdlIHdpbGwgYmUKK2FsbG93ZWQsIGJ1dCBzdWNoIG9jY2FzaW9ucyBhcmUgcmFyZTsgZGV2ZWxvcGVycyB3aG8gdHJ5IHRvIG1lcmdlIG5ldworZmVhdHVyZXMgb3V0c2lkZSBvZiB0aGUgbWVyZ2Ugd2luZG93IHRlbmQgdG8gZ2V0IGFuIHVuZnJpZW5kbHkgcmVjZXB0aW9uLgorQXMgYSBnZW5lcmFsIHJ1bGUsIGlmIHlvdSBtaXNzIHRoZSBtZXJnZSB3aW5kb3cgZm9yIGEgZ2l2ZW4gZmVhdHVyZSwgdGhlCitiZXN0IHRoaW5nIHRvIGRvIGlzIHRvIHdhaXQgZm9yIHRoZSBuZXh0IGRldmVsb3BtZW50IGN5Y2xlLiAgKEFuIG9jY2FzaW9uYWwKK2V4Y2VwdGlvbiBpcyBtYWRlIGZvciBkcml2ZXJzIGZvciBwcmV2aW91c2x5LXVuc3VwcG9ydGVkIGhhcmR3YXJlOyBpZiB0aGV5Cit0b3VjaCBubyBpbi10cmVlIGNvZGUsIHRoZXkgY2Fubm90IGNhdXNlIHJlZ3Jlc3Npb25zIGFuZCBzaG91bGQgYmUgc2FmZSB0bworYWRkIGF0IGFueSB0aW1lKS4KKworQXMgZml4ZXMgbWFrZSB0aGVpciB3YXkgaW50byB0aGUgbWFpbmxpbmUsIHRoZSBwYXRjaCByYXRlIHdpbGwgc2xvdyBvdmVyCit0aW1lLiAgTGludXMgcmVsZWFzZXMgbmV3IC1yYyBrZXJuZWxzIGFib3V0IG9uY2UgYSB3ZWVrOyBhIG5vcm1hbCBzZXJpZXMKK3dpbGwgZ2V0IHVwIHRvIHNvbWV3aGVyZSBiZXR3ZWVuIC1yYzYgYW5kIC1yYzkgYmVmb3JlIHRoZSBrZXJuZWwgaXMKK2NvbnNpZGVyZWQgdG8gYmUgc3VmZmljaWVudGx5IHN0YWJsZSBhbmQgdGhlIGZpbmFsIDIuNi54IHJlbGVhc2UgaXMgbWFkZS4KK0F0IHRoYXQgcG9pbnQgdGhlIHdob2xlIHByb2Nlc3Mgc3RhcnRzIG92ZXIgYWdhaW4uCisKK0FzIGFuIGV4YW1wbGUsIGhlcmUgaXMgaG93IHRoZSAyLjYuMjUgZGV2ZWxvcG1lbnQgY3ljbGUgd2VudCAoYWxsIGRhdGVzIGluCisyMDA4KTogCisKKwlKYW51YXJ5IDI0CTIuNi4yNCBzdGFibGUgcmVsZWFzZQorCUZlYnJ1YXJ5IDEwCTIuNi4yNS1yYzEsIG1lcmdlIHdpbmRvdyBjbG9zZXMKKwlGZWJydWFyeSAxNQkyLjYuMjUtcmMyCisJRmVicnVhcnkgMjQJMi42LjI1LXJjMworCU1hcmNoIDQJIAkyLjYuMjUtcmM0CisJTWFyY2ggOQkJMi42LjI1LXJjNQorCU1hcmNoIDE2CTIuNi4yNS1yYzYKKwlNYXJjaCAyNQkyLjYuMjUtcmM3CisJQXByaWwgMQkJMi42LjI1LXJjOAorCUFwcmlsIDExCTIuNi4yNS1yYzkKKwlBcHJpbCAxNgkyLjYuMjUgc3RhYmxlIHJlbGVhc2UKKworSG93IGRvIHRoZSBkZXZlbG9wZXJzIGRlY2lkZSB3aGVuIHRvIGNsb3NlIHRoZSBkZXZlbG9wbWVudCBjeWNsZSBhbmQgY3JlYXRlCit0aGUgc3RhYmxlIHJlbGVhc2U/ICBUaGUgbW9zdCBzaWduaWZpY2FudCBtZXRyaWMgdXNlZCBpcyB0aGUgbGlzdCBvZgorcmVncmVzc2lvbnMgZnJvbSBwcmV2aW91cyByZWxlYXNlcy4gIE5vIGJ1Z3MgYXJlIHdlbGNvbWUsIGJ1dCB0aG9zZSB3aGljaAorYnJlYWsgc3lzdGVtcyB3aGljaCB3b3JrZWQgaW4gdGhlIHBhc3QgYXJlIGNvbnNpZGVyZWQgdG8gYmUgZXNwZWNpYWxseQorc2VyaW91cy4gIEZvciB0aGlzIHJlYXNvbiwgcGF0Y2hlcyB3aGljaCBjYXVzZSByZWdyZXNzaW9ucyBhcmUgbG9va2VkIHVwb24KK3VuZmF2b3JhYmx5IGFuZCBhcmUgcXVpdGUgbGlrZWx5IHRvIGJlIHJldmVydGVkIGR1cmluZyB0aGUgc3RhYmlsaXphdGlvbgorcGVyaW9kLiAKKworVGhlIGRldmVsb3BlcnMnIGdvYWwgaXMgdG8gZml4IGFsbCBrbm93biByZWdyZXNzaW9ucyBiZWZvcmUgdGhlIHN0YWJsZQorcmVsZWFzZSBpcyBtYWRlLiAgSW4gdGhlIHJlYWwgd29ybGQsIHRoaXMga2luZCBvZiBwZXJmZWN0aW9uIGlzIGhhcmQgdG8KK2FjaGlldmU7IHRoZXJlIGFyZSBqdXN0IHRvbyBtYW55IHZhcmlhYmxlcyBpbiBhIHByb2plY3Qgb2YgdGhpcyBzaXplLgorVGhlcmUgY29tZXMgYSBwb2ludCB3aGVyZSBkZWxheWluZyB0aGUgZmluYWwgcmVsZWFzZSBqdXN0IG1ha2VzIHRoZSBwcm9ibGVtCit3b3JzZTsgdGhlIHBpbGUgb2YgY2hhbmdlcyB3YWl0aW5nIGZvciB0aGUgbmV4dCBtZXJnZSB3aW5kb3cgd2lsbCBncm93CitsYXJnZXIsIGNyZWF0aW5nIGV2ZW4gbW9yZSByZWdyZXNzaW9ucyB0aGUgbmV4dCB0aW1lIGFyb3VuZC4gIFNvIG1vc3QgMi42LngKK2tlcm5lbHMgZ28gb3V0IHdpdGggYSBoYW5kZnVsIG9mIGtub3duIHJlZ3Jlc3Npb25zIHRob3VnaCwgaG9wZWZ1bGx5LCBub25lCitvZiB0aGVtIGFyZSBzZXJpb3VzLgorCitPbmNlIGEgc3RhYmxlIHJlbGVhc2UgaXMgbWFkZSwgaXRzIG9uZ29pbmcgbWFpbnRlbmFuY2UgaXMgcGFzc2VkIG9mZiB0byB0aGUKKyJzdGFibGUgdGVhbSwiIGN1cnJlbnRseSBjb21wcmlzZWQgb2YgR3JlZyBLcm9haC1IYXJ0bWFuIGFuZCBDaHJpcyBXcmlnaHQuCitUaGUgc3RhYmxlIHRlYW0gd2lsbCByZWxlYXNlIG9jY2FzaW9uYWwgdXBkYXRlcyB0byB0aGUgc3RhYmxlIHJlbGVhc2UgdXNpbmcKK3RoZSAyLjYueC55IG51bWJlcmluZyBzY2hlbWUuICBUbyBiZSBjb25zaWRlcmVkIGZvciBhbiB1cGRhdGUgcmVsZWFzZSwgYQorcGF0Y2ggbXVzdCAoMSkgZml4IGEgc2lnbmlmaWNhbnQgYnVnLCBhbmQgKDIpIGFscmVhZHkgYmUgbWVyZ2VkIGludG8gdGhlCittYWlubGluZSBmb3IgdGhlIG5leHQgZGV2ZWxvcG1lbnQga2VybmVsLiAgQ29udGludWluZyBvdXIgMi42LjI1IGV4YW1wbGUsCit0aGUgaGlzdG9yeSAoYXMgb2YgdGhpcyB3cml0aW5nKSBpczoKKworCU1heSAxCQkyLjYuMjUuMQorCU1heSA2CQkyLjYuMjUuMiAKKwlNYXkgOQkJMi42LjI1LjMgCisJTWF5IDE1CQkyLjYuMjUuNAorCUp1bmUgNwkJMi42LjI1LjUKKwlKdW5lIDkJCTIuNi4yNS42CisJSnVuZSAxNgkJMi42LjI1LjcKKwlKdW5lIDIxCQkyLjYuMjUuOAorCUp1bmUgMjQJCTIuNi4yNS45CisKK1N0YWJsZSB1cGRhdGVzIGZvciBhIGdpdmVuIGtlcm5lbCBhcmUgbWFkZSBmb3IgYXBwcm94aW1hdGVseSBzaXggbW9udGhzOworYWZ0ZXIgdGhhdCwgdGhlIG1haW50ZW5hbmNlIG9mIHN0YWJsZSByZWxlYXNlcyBpcyBzb2xlbHkgdGhlIHJlc3BvbnNpYmlsaXR5CitvZiB0aGUgZGlzdHJpYnV0b3JzIHdoaWNoIGhhdmUgc2hpcHBlZCB0aGF0IHBhcnRpY3VsYXIga2VybmVsLgorCisKKzIuMjogVEhFIExJRkVDWUNMRSBPRiBBIFBBVENICisKK1BhdGNoZXMgZG8gbm90IGdvIGRpcmVjdGx5IGZyb20gdGhlIGRldmVsb3BlcidzIGtleWJvYXJkIGludG8gdGhlIG1haW5saW5lCitrZXJuZWwuICBUaGVyZSBpcywgaW5zdGVhZCwgYSBzb21ld2hhdCBpbnZvbHZlZCAoaWYgc29tZXdoYXQgaW5mb3JtYWwpCitwcm9jZXNzIGRlc2lnbmVkIHRvIGVuc3VyZSB0aGF0IGVhY2ggcGF0Y2ggaXMgcmV2aWV3ZWQgZm9yIHF1YWxpdHkgYW5kIHRoYXQKK2VhY2ggcGF0Y2ggaW1wbGVtZW50cyBhIGNoYW5nZSB3aGljaCBpcyBkZXNpcmFibGUgdG8gaGF2ZSBpbiB0aGUgbWFpbmxpbmUuCitUaGlzIHByb2Nlc3MgY2FuIGhhcHBlbiBxdWlja2x5IGZvciBtaW5vciBmaXhlcywgb3IsIGluIHRoZSBjYXNlIG9mIGxhcmdlCithbmQgY29udHJvdmVyc2lhbCBjaGFuZ2VzLCBnbyBvbiBmb3IgeWVhcnMuICBNdWNoIGRldmVsb3BlciBmcnVzdHJhdGlvbgorY29tZXMgZnJvbSBhIGxhY2sgb2YgdW5kZXJzdGFuZGluZyBvZiB0aGlzIHByb2Nlc3Mgb3IgZnJvbSBhdHRlbXB0cyB0bworY2lyY3VtdmVudCBpdC4gIAorCitJbiB0aGUgaG9wZXMgb2YgcmVkdWNpbmcgdGhhdCBmcnVzdHJhdGlvbiwgdGhpcyBkb2N1bWVudCB3aWxsIGRlc2NyaWJlIGhvdworYSBwYXRjaCBnZXRzIGludG8gdGhlIGtlcm5lbC4gIFdoYXQgZm9sbG93cyBiZWxvdyBpcyBhbiBpbnRyb2R1Y3Rpb24gd2hpY2gKK2Rlc2NyaWJlcyB0aGUgcHJvY2VzcyBpbiBhIHNvbWV3aGF0IGlkZWFsaXplZCB3YXkuICBBIG11Y2ggbW9yZSBkZXRhaWxlZAordHJlYXRtZW50IHdpbGwgY29tZSBpbiBsYXRlciBzZWN0aW9ucy4KKworVGhlIHN0YWdlcyB0aGF0IGEgcGF0Y2ggZ29lcyB0aHJvdWdoIGFyZSwgZ2VuZXJhbGx5OgorCisgLSBEZXNpZ24uICBUaGlzIGlzIHdoZXJlIHRoZSByZWFsIHJlcXVpcmVtZW50cyBmb3IgdGhlIHBhdGNoIC0gYW5kIHRoZSB3YXkKKyAgIHRob3NlIHJlcXVpcmVtZW50cyB3aWxsIGJlIG1ldCAtIGFyZSBsYWlkIG91dC4gIERlc2lnbiB3b3JrIGlzIG9mdGVuCisgICBkb25lIHdpdGhvdXQgaW52b2x2aW5nIHRoZSBjb21tdW5pdHksIGJ1dCBpdCBpcyBiZXR0ZXIgdG8gZG8gdGhpcyB3b3JrCisgICBpbiB0aGUgb3BlbiBpZiBhdCBhbGwgcG9zc2libGU7IGl0IGNhbiBzYXZlIGEgbG90IG9mIHRpbWUgcmVkZXNpZ25pbmcKKyAgIHRoaW5ncyBsYXRlci4KKworIC0gRWFybHkgcmV2aWV3LiAgUGF0Y2hlcyBhcmUgcG9zdGVkIHRvIHRoZSByZWxldmFudCBtYWlsaW5nIGxpc3QsIGFuZAorICAgZGV2ZWxvcGVycyBvbiB0aGF0IGxpc3QgcmVwbHkgd2l0aCBhbnkgY29tbWVudHMgdGhleSBtYXkgaGF2ZS4gIFRoaXMKKyAgIHByb2Nlc3Mgc2hvdWxkIHR1cm4gdXAgYW55IG1ham9yIHByb2JsZW1zIHdpdGggYSBwYXRjaCBpZiBhbGwgZ29lcworICAgd2VsbC4KKworIC0gV2lkZXIgcmV2aWV3LiAgV2hlbiB0aGUgcGF0Y2ggaXMgZ2V0dGluZyBjbG9zZSB0byByZWFkeSBmb3IgbWFpbmxpbmUKKyAgIGluY2x1c2lvbiwgaXQgd2lsbCBiZSBhY2NlcHRlZCBieSBhIHJlbGV2YW50IHN1YnN5c3RlbSBtYWludGFpbmVyIC0KKyAgIHRob3VnaCB0aGlzIGFjY2VwdGFuY2UgaXMgbm90IGEgZ3VhcmFudGVlIHRoYXQgdGhlIHBhdGNoIHdpbGwgbWFrZSBpdAorICAgYWxsIHRoZSB3YXkgdG8gdGhlIG1haW5saW5lLiAgVGhlIHBhdGNoIHdpbGwgc2hvdyB1cCBpbiB0aGUgbWFpbnRhaW5lcidzCisgICBzdWJzeXN0ZW0gdHJlZSBhbmQgaW50byB0aGUgc3RhZ2luZyB0cmVlcyAoZGVzY3JpYmVkIGJlbG93KS4gIFdoZW4gdGhlCisgICBwcm9jZXNzIHdvcmtzLCB0aGlzIHN0ZXAgbGVhZHMgdG8gbW9yZSBleHRlbnNpdmUgcmV2aWV3IG9mIHRoZSBwYXRjaCBhbmQKKyAgIHRoZSBkaXNjb3Zlcnkgb2YgYW55IHByb2JsZW1zIHJlc3VsdGluZyBmcm9tIHRoZSBpbnRlZ3JhdGlvbiBvZiB0aGlzCisgICBwYXRjaCB3aXRoIHdvcmsgYmVpbmcgZG9uZSBieSBvdGhlcnMuCisKKyAtIE1lcmdpbmcgaW50byB0aGUgbWFpbmxpbmUuICBFdmVudHVhbGx5LCBhIHN1Y2Nlc3NmdWwgcGF0Y2ggd2lsbCBiZQorICAgbWVyZ2VkIGludG8gdGhlIG1haW5saW5lIHJlcG9zaXRvcnkgbWFuYWdlZCBieSBMaW51cyBUb3J2YWxkcy4gIE1vcmUKKyAgIGNvbW1lbnRzIGFuZC9vciBwcm9ibGVtcyBtYXkgc3VyZmFjZSBhdCB0aGlzIHRpbWU7IGl0IGlzIGltcG9ydGFudCB0aGF0CisgICB0aGUgZGV2ZWxvcGVyIGJlIHJlc3BvbnNpdmUgdG8gdGhlc2UgYW5kIGZpeCBhbnkgaXNzdWVzIHdoaWNoIGFyaXNlLgorCisgLSBTdGFibGUgcmVsZWFzZS4gIFRoZSBudW1iZXIgb2YgdXNlcnMgcG90ZW50aWFsbHkgYWZmZWN0ZWQgYnkgdGhlIHBhdGNoCisgICBpcyBub3cgbGFyZ2UsIHNvLCBvbmNlIGFnYWluLCBuZXcgcHJvYmxlbXMgbWF5IGFyaXNlLgorCisgLSBMb25nLXRlcm0gbWFpbnRlbmFuY2UuICBXaGlsZSBpdCBpcyBjZXJ0YWlubHkgcG9zc2libGUgZm9yIGEgZGV2ZWxvcGVyCisgICB0byBmb3JnZXQgYWJvdXQgY29kZSBhZnRlciBtZXJnaW5nIGl0LCB0aGF0IHNvcnQgb2YgYmVoYXZpb3IgdGVuZHMgdG8KKyAgIGxlYXZlIGEgcG9vciBpbXByZXNzaW9uIGluIHRoZSBkZXZlbG9wbWVudCBjb21tdW5pdHkuICBNZXJnaW5nIGNvZGUKKyAgIGVsaW1pbmF0ZXMgc29tZSBvZiB0aGUgbWFpbnRlbmFuY2UgYnVyZGVuLCBpbiB0aGF0IG90aGVycyB3aWxsIGZpeAorICAgcHJvYmxlbXMgY2F1c2VkIGJ5IEFQSSBjaGFuZ2VzLiAgQnV0IHRoZSBvcmlnaW5hbCBkZXZlbG9wZXIgc2hvdWxkCisgICBjb250aW51ZSB0byB0YWtlIHJlc3BvbnNpYmlsaXR5IGZvciB0aGUgY29kZSBpZiBpdCBpcyB0byByZW1haW4gdXNlZnVsCisgICBpbiB0aGUgbG9uZ2VyIHRlcm0uCisKK09uZSBvZiB0aGUgbGFyZ2VzdCBtaXN0YWtlcyBtYWRlIGJ5IGtlcm5lbCBkZXZlbG9wZXJzIChvciB0aGVpciBlbXBsb3llcnMpCitpcyB0byB0cnkgdG8gY3V0IHRoZSBwcm9jZXNzIGRvd24gdG8gYSBzaW5nbGUgIm1lcmdpbmcgaW50byB0aGUgbWFpbmxpbmUiCitzdGVwLiAgVGhpcyBhcHByb2FjaCBpbnZhcmlhYmx5IGxlYWRzIHRvIGZydXN0cmF0aW9uIGZvciBldmVyeWJvZHkKK2ludm9sdmVkLgorCisKKzIuMzogSE9XIFBBVENIRVMgR0VUIElOVE8gVEhFIEtFUk5FTAorCitUaGVyZSBpcyBleGFjdGx5IG9uZSBwZXJzb24gd2hvIGNhbiBtZXJnZSBwYXRjaGVzIGludG8gdGhlIG1haW5saW5lIGtlcm5lbAorcmVwb3NpdG9yeTogTGludXMgVG9ydmFsZHMuICBCdXQsIG9mIHRoZSBvdmVyIDEyLDAwMCBwYXRjaGVzIHdoaWNoIHdlbnQKK2ludG8gdGhlIDIuNi4yNSBrZXJuZWwsIG9ubHkgMjUwIChhcm91bmQgMiUpIHdlcmUgZGlyZWN0bHkgY2hvc2VuIGJ5IExpbnVzCitoaW1zZWxmLiAgVGhlIGtlcm5lbCBwcm9qZWN0IGhhcyBsb25nIHNpbmNlIGdyb3duIHRvIGEgc2l6ZSB3aGVyZSBubyBzaW5nbGUKK2RldmVsb3BlciBjb3VsZCBwb3NzaWJseSBpbnNwZWN0IGFuZCBzZWxlY3QgZXZlcnkgcGF0Y2ggdW5hc3Npc3RlZC4gIFRoZQord2F5IHRoZSBrZXJuZWwgZGV2ZWxvcGVycyBoYXZlIGFkZHJlc3NlZCB0aGlzIGdyb3d0aCBpcyB0aHJvdWdoIHRoZSB1c2Ugb2YKK2EgbGlldXRlbmFudCBzeXN0ZW0gYnVpbHQgYXJvdW5kIGEgY2hhaW4gb2YgdHJ1c3QuCisKK1RoZSBrZXJuZWwgY29kZSBiYXNlIGlzIGxvZ2ljYWxseSBicm9rZW4gZG93biBpbnRvIGEgc2V0IG9mIHN1YnN5c3RlbXM6CituZXR3b3JraW5nLCBzcGVjaWZpYyBhcmNoaXRlY3R1cmUgc3VwcG9ydCwgbWVtb3J5IG1hbmFnZW1lbnQsIHZpZGVvCitkZXZpY2VzLCBldGMuICBNb3N0IHN1YnN5c3RlbXMgaGF2ZSBhIGRlc2lnbmF0ZWQgbWFpbnRhaW5lciwgYSBkZXZlbG9wZXIKK3dobyBoYXMgb3ZlcmFsbCByZXNwb25zaWJpbGl0eSBmb3IgdGhlIGNvZGUgd2l0aGluIHRoYXQgc3Vic3lzdGVtLiAgVGhlc2UKK3N1YnN5c3RlbSBtYWludGFpbmVycyBhcmUgdGhlIGdhdGVrZWVwZXJzIChpbiBhIGxvb3NlIHdheSkgZm9yIHRoZSBwb3J0aW9uCitvZiB0aGUga2VybmVsIHRoZXkgbWFuYWdlOyB0aGV5IGFyZSB0aGUgb25lcyB3aG8gd2lsbCAodXN1YWxseSkgYWNjZXB0IGEKK3BhdGNoIGZvciBpbmNsdXNpb24gaW50byB0aGUgbWFpbmxpbmUga2VybmVsLgorCitTdWJzeXN0ZW0gbWFpbnRhaW5lcnMgZWFjaCBtYW5hZ2UgdGhlaXIgb3duIHZlcnNpb24gb2YgdGhlIGtlcm5lbCBzb3VyY2UKK3RyZWUsIHVzdWFsbHkgKGJ1dCBjZXJ0YWlubHkgbm90IGFsd2F5cykgdXNpbmcgdGhlIGdpdCBzb3VyY2UgbWFuYWdlbWVudAordG9vbC4gIFRvb2xzIGxpa2UgZ2l0IChhbmQgcmVsYXRlZCB0b29scyBsaWtlIHF1aWx0IG9yIG1lcmN1cmlhbCkgYWxsb3cKK21haW50YWluZXJzIHRvIHRyYWNrIGEgbGlzdCBvZiBwYXRjaGVzLCBpbmNsdWRpbmcgYXV0aG9yc2hpcCBpbmZvcm1hdGlvbgorYW5kIG90aGVyIG1ldGFkYXRhLiAgQXQgYW55IGdpdmVuIHRpbWUsIHRoZSBtYWludGFpbmVyIGNhbiBpZGVudGlmeSB3aGljaAorcGF0Y2hlcyBpbiBoaXMgb3IgaGVyIHJlcG9zaXRvcnkgYXJlIG5vdCBmb3VuZCBpbiB0aGUgbWFpbmxpbmUuCisKK1doZW4gdGhlIG1lcmdlIHdpbmRvdyBvcGVucywgdG9wLWxldmVsIG1haW50YWluZXJzIHdpbGwgYXNrIExpbnVzIHRvICJwdWxsIgordGhlIHBhdGNoZXMgdGhleSBoYXZlIHNlbGVjdGVkIGZvciBtZXJnaW5nIGZyb20gdGhlaXIgcmVwb3NpdG9yaWVzLiAgSWYKK0xpbnVzIGFncmVlcywgdGhlIHN0cmVhbSBvZiBwYXRjaGVzIHdpbGwgZmxvdyB1cCBpbnRvIGhpcyByZXBvc2l0b3J5LAorYmVjb21pbmcgcGFydCBvZiB0aGUgbWFpbmxpbmUga2VybmVsLiAgVGhlIGFtb3VudCBvZiBhdHRlbnRpb24gdGhhdCBMaW51cworcGF5cyB0byBzcGVjaWZpYyBwYXRjaGVzIHJlY2VpdmVkIGluIGEgcHVsbCBvcGVyYXRpb24gdmFyaWVzLiAgSXQgaXMgY2xlYXIKK3RoYXQsIHNvbWV0aW1lcywgaGUgbG9va3MgcXVpdGUgY2xvc2VseS4gIEJ1dCwgYXMgYSBnZW5lcmFsIHJ1bGUsIExpbnVzCit0cnVzdHMgdGhlIHN1YnN5c3RlbSBtYWludGFpbmVycyB0byBub3Qgc2VuZCBiYWQgcGF0Y2hlcyB1cHN0cmVhbS4KKworU3Vic3lzdGVtIG1haW50YWluZXJzLCBpbiB0dXJuLCBjYW4gcHVsbCBwYXRjaGVzIGZyb20gb3RoZXIgbWFpbnRhaW5lcnMuCitGb3IgZXhhbXBsZSwgdGhlIG5ldHdvcmtpbmcgdHJlZSBpcyBidWlsdCBmcm9tIHBhdGNoZXMgd2hpY2ggYWNjdW11bGF0ZWQKK2ZpcnN0IGluIHRyZWVzIGRlZGljYXRlZCB0byBuZXR3b3JrIGRldmljZSBkcml2ZXJzLCB3aXJlbGVzcyBuZXR3b3JraW5nLAorZXRjLiAgVGhpcyBjaGFpbiBvZiByZXBvc2l0b3JpZXMgY2FuIGJlIGFyYml0cmFyaWx5IGxvbmcsIHRob3VnaCBpdCByYXJlbHkKK2V4Y2VlZHMgdHdvIG9yIHRocmVlIGxpbmtzLiAgU2luY2UgZWFjaCBtYWludGFpbmVyIGluIHRoZSBjaGFpbiB0cnVzdHMKK3Rob3NlIG1hbmFnaW5nIGxvd2VyLWxldmVsIHRyZWVzLCB0aGlzIHByb2Nlc3MgaXMga25vd24gYXMgdGhlICJjaGFpbiBvZgordHJ1c3QuIiAKKworQ2xlYXJseSwgaW4gYSBzeXN0ZW0gbGlrZSB0aGlzLCBnZXR0aW5nIHBhdGNoZXMgaW50byB0aGUga2VybmVsIGRlcGVuZHMgb24KK2ZpbmRpbmcgdGhlIHJpZ2h0IG1haW50YWluZXIuICBTZW5kaW5nIHBhdGNoZXMgZGlyZWN0bHkgdG8gTGludXMgaXMgbm90Citub3JtYWxseSB0aGUgcmlnaHQgd2F5IHRvIGdvLgorCisKKzIuNDogU1RBR0lORyBUUkVFUworCitUaGUgY2hhaW4gb2Ygc3Vic3lzdGVtIHRyZWVzIGd1aWRlcyB0aGUgZmxvdyBvZiBwYXRjaGVzIGludG8gdGhlIGtlcm5lbCwKK2J1dCBpdCBhbHNvIHJhaXNlcyBhbiBpbnRlcmVzdGluZyBxdWVzdGlvbjogd2hhdCBpZiBzb21lYm9keSB3YW50cyB0byBsb29rCithdCBhbGwgb2YgdGhlIHBhdGNoZXMgd2hpY2ggYXJlIGJlaW5nIHByZXBhcmVkIGZvciB0aGUgbmV4dCBtZXJnZSB3aW5kb3c/CitEZXZlbG9wZXJzIHdpbGwgYmUgaW50ZXJlc3RlZCBpbiB3aGF0IG90aGVyIGNoYW5nZXMgYXJlIHBlbmRpbmcgdG8gc2VlCit3aGV0aGVyIHRoZXJlIGFyZSBhbnkgY29uZmxpY3RzIHRvIHdvcnJ5IGFib3V0OyBhIHBhdGNoIHdoaWNoIGNoYW5nZXMgYQorY29yZSBrZXJuZWwgZnVuY3Rpb24gcHJvdG90eXBlLCBmb3IgZXhhbXBsZSwgd2lsbCBjb25mbGljdCB3aXRoIGFueSBvdGhlcgorcGF0Y2hlcyB3aGljaCB1c2UgdGhlIG9sZGVyIGZvcm0gb2YgdGhhdCBmdW5jdGlvbi4gIFJldmlld2VycyBhbmQgdGVzdGVycword2FudCBhY2Nlc3MgdG8gdGhlIGNoYW5nZXMgaW4gdGhlaXIgaW50ZWdyYXRlZCBmb3JtIGJlZm9yZSBhbGwgb2YgdGhvc2UKK2NoYW5nZXMgbGFuZCBpbiB0aGUgbWFpbmxpbmUga2VybmVsLiAgT25lIGNvdWxkIHB1bGwgY2hhbmdlcyBmcm9tIGFsbCBvZgordGhlIGludGVyZXN0aW5nIHN1YnN5c3RlbSB0cmVlcywgYnV0IHRoYXQgd291bGQgYmUgYSBiaWcgYW5kIGVycm9yLXByb25lCitqb2IuCisKK1RoZSBhbnN3ZXIgY29tZXMgaW4gdGhlIGZvcm0gb2Ygc3RhZ2luZyB0cmVlcywgd2hlcmUgc3Vic3lzdGVtIHRyZWVzIGFyZQorY29sbGVjdGVkIGZvciB0ZXN0aW5nIGFuZCByZXZpZXcuICBUaGUgb2xkZXIgb2YgdGhlc2UgdHJlZXMsIG1haW50YWluZWQgYnkKK0FuZHJldyBNb3J0b24sIGlzIGNhbGxlZCAiLW1tIiAoZm9yIG1lbW9yeSBtYW5hZ2VtZW50LCB3aGljaCBpcyBob3cgaXQgZ290CitzdGFydGVkKS4gIFRoZSAtbW0gdHJlZSBpbnRlZ3JhdGVzIHBhdGNoZXMgZnJvbSBhIGxvbmcgbGlzdCBvZiBzdWJzeXN0ZW0KK3RyZWVzOyBpdCBhbHNvIGhhcyBzb21lIHBhdGNoZXMgYWltZWQgYXQgaGVscGluZyB3aXRoIGRlYnVnZ2luZy4gIAorCitCZXlvbmQgdGhhdCwgLW1tIGNvbnRhaW5zIGEgc2lnbmlmaWNhbnQgY29sbGVjdGlvbiBvZiBwYXRjaGVzIHdoaWNoIGhhdmUKK2JlZW4gc2VsZWN0ZWQgYnkgQW5kcmV3IGRpcmVjdGx5LiAgVGhlc2UgcGF0Y2hlcyBtYXkgaGF2ZSBiZWVuIHBvc3RlZCBvbiBhCittYWlsaW5nIGxpc3QsIG9yIHRoZXkgbWF5IGFwcGx5IHRvIGEgcGFydCBvZiB0aGUga2VybmVsIGZvciB3aGljaCB0aGVyZSBpcworbm8gZGVzaWduYXRlZCBzdWJzeXN0ZW0gdHJlZS4gIEFzIGEgcmVzdWx0LCAtbW0gb3BlcmF0ZXMgYXMgYSBzb3J0IG9mCitzdWJzeXN0ZW0gdHJlZSBvZiBsYXN0IHJlc29ydDsgaWYgdGhlcmUgaXMgbm8gb3RoZXIgb2J2aW91cyBwYXRoIGZvciBhCitwYXRjaCBpbnRvIHRoZSBtYWlubGluZSwgaXQgaXMgbGlrZWx5IHRvIGVuZCB1cCBpbiAtbW0uICBNaXNjZWxsYW5lb3VzCitwYXRjaGVzIHdoaWNoIGFjY3VtdWxhdGUgaW4gLW1tIHdpbGwgZXZlbnR1YWxseSBlaXRoZXIgYmUgZm9yd2FyZGVkIG9uIHRvCithbiBhcHByb3ByaWF0ZSBzdWJzeXN0ZW0gdHJlZSBvciBiZSBzZW50IGRpcmVjdGx5IHRvIExpbnVzLiAgSW4gYSB0eXBpY2FsCitkZXZlbG9wbWVudCBjeWNsZSwgYXBwcm94aW1hdGVseSAxMCUgb2YgdGhlIHBhdGNoZXMgZ29pbmcgaW50byB0aGUgbWFpbmxpbmUKK2dldCB0aGVyZSB2aWEgLW1tLgorCitUaGUgY3VycmVudCAtbW0gcGF0Y2ggY2FuIGFsd2F5cyBiZSBmb3VuZCBmcm9tIHRoZSBmcm9udCBwYWdlIG9mCisKKwlodHRwOi8va2VybmVsLm9yZy8KKworVGhvc2Ugd2hvIHdhbnQgdG8gc2VlIHRoZSBjdXJyZW50IHN0YXRlIG9mIC1tbSBjYW4gZ2V0IHRoZSAiLW1tIG9mIHRoZQorbW9tZW50IiB0cmVlLCBmb3VuZCBhdDoKKworCWh0dHA6Ly91c2Vyd2ViLmtlcm5lbC5vcmcvfmFrcG0vbW1vdG0vCisKK1VzZSBvZiB0aGUgTU1PVE0gdHJlZSBpcyBsaWtlbHkgdG8gYmUgYSBmcnVzdHJhdGluZyBleHBlcmllbmNlLCB0aG91Z2g7Cit0aGVyZSBpcyBhIGRlZmluaXRlIGNoYW5jZSB0aGF0IGl0IHdpbGwgbm90IGV2ZW4gY29tcGlsZS4KKworVGhlIG90aGVyIHN0YWdpbmcgdHJlZSwgc3RhcnRlZCBtb3JlIHJlY2VudGx5LCBpcyBsaW51eC1uZXh0LCBtYWludGFpbmVkIGJ5CitTdGVwaGVuIFJvdGh3ZWxsLiAgVGhlIGxpbnV4LW5leHQgdHJlZSBpcywgYnkgZGVzaWduLCBhIHNuYXBzaG90IG9mIHdoYXQKK3RoZSBtYWlubGluZSBpcyBleHBlY3RlZCB0byBsb29rIGxpa2UgYWZ0ZXIgdGhlIG5leHQgbWVyZ2Ugd2luZG93IGNsb3Nlcy4KK0xpbnV4LW5leHQgdHJlZXMgYXJlIGFubm91bmNlZCBvbiB0aGUgbGludXgta2VybmVsIGFuZCBsaW51eC1uZXh0IG1haWxpbmcKK2xpc3RzIHdoZW4gdGhleSBhcmUgYXNzZW1ibGVkOyB0aGV5IGNhbiBiZSBkb3dubG9hZGVkIGZyb206CisKKwlodHRwOi8vd3d3Lmtlcm5lbC5vcmcvcHViL2xpbnV4L2tlcm5lbC9wZW9wbGUvc2ZyL2xpbnV4LW5leHQvCisKK1NvbWUgaW5mb3JtYXRpb24gYWJvdXQgbGludXgtbmV4dCBoYXMgYmVlbiBnYXRoZXJlZCBhdDoKKworCWh0dHA6Ly9saW51eC5mLXNlaWRlbC5kZS9saW51eC1uZXh0L3Btd2lraS8KKworSG93IHRoZSBsaW51eC1uZXh0IHRyZWUgd2lsbCBmaXQgaW50byB0aGUgZGV2ZWxvcG1lbnQgcHJvY2VzcyBpcyBzdGlsbAorY2hhbmdpbmcuICBBcyBvZiB0aGlzIHdyaXRpbmcsIHRoZSBmaXJzdCBmdWxsIGRldmVsb3BtZW50IGN5Y2xlIGludm9sdmluZworbGludXgtbmV4dCAoMi42LjI2KSBpcyBjb21pbmcgdG8gYW4gZW5kOyB0aHVzIGZhciwgaXQgaGFzIHByb3ZlZCB0byBiZSBhCit2YWx1YWJsZSByZXNvdXJjZSBmb3IgZmluZGluZyBhbmQgZml4aW5nIGludGVncmF0aW9uIHByb2JsZW1zIGJlZm9yZSB0aGUKK2JlZ2lubmluZyBvZiB0aGUgbWVyZ2Ugd2luZG93LiAgU2VlIGh0dHA6Ly9sd24ubmV0L0FydGljbGVzLzI4NzE1NS8gZm9yCittb3JlIGluZm9ybWF0aW9uIG9uIGhvdyBsaW51eC1uZXh0IGhhcyB3b3JrZWQgdG8gc2V0IHVwIHRoZSAyLjYuMjcgbWVyZ2UKK3dpbmRvdy4KKworU29tZSBkZXZlbG9wZXJzIGhhdmUgYmVndW4gdG8gc3VnZ2VzdCB0aGF0IGxpbnV4LW5leHQgc2hvdWxkIGJlIHVzZWQgYXMgdGhlCit0YXJnZXQgZm9yIGZ1dHVyZSBkZXZlbG9wbWVudCBhcyB3ZWxsLiAgVGhlIGxpbnV4LW5leHQgdHJlZSBkb2VzIHRlbmQgdG8gYmUKK2ZhciBhaGVhZCBvZiB0aGUgbWFpbmxpbmUgYW5kIGlzIG1vcmUgcmVwcmVzZW50YXRpdmUgb2YgdGhlIHRyZWUgaW50byB3aGljaAorYW55IG5ldyB3b3JrIHdpbGwgYmUgbWVyZ2VkLiAgVGhlIGRvd25zaWRlIHRvIHRoaXMgaWRlYSBpcyB0aGF0IHRoZQordm9sYXRpbGl0eSBvZiBsaW51eC1uZXh0IHRlbmRzIHRvIG1ha2UgaXQgYSBkaWZmaWN1bHQgZGV2ZWxvcG1lbnQgdGFyZ2V0LgorU2VlIGh0dHA6Ly9sd24ubmV0L0FydGljbGVzLzI4OTAxMy8gZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhpcyB0b3BpYywgYW5kCitzdGF5IHR1bmVkOyBtdWNoIGlzIHN0aWxsIGluIGZsdXggd2hlcmUgbGludXgtbmV4dCBpcyBpbnZvbHZlZC4KKworCisyLjU6IFRPT0xTCisKK0FzIGNhbiBiZSBzZWVuIGZyb20gdGhlIGFib3ZlIHRleHQsIHRoZSBrZXJuZWwgZGV2ZWxvcG1lbnQgcHJvY2VzcyBkZXBlbmRzCitoZWF2aWx5IG9uIHRoZSBhYmlsaXR5IHRvIGhlcmQgY29sbGVjdGlvbnMgb2YgcGF0Y2hlcyBpbiB2YXJpb3VzCitkaXJlY3Rpb25zLiAgVGhlIHdob2xlIHRoaW5nIHdvdWxkIG5vdCB3b3JrIGFueXdoZXJlIG5lYXIgYXMgd2VsbCBhcyBpdAorZG9lcyB3aXRob3V0IHN1aXRhYmx5IHBvd2VyZnVsIHRvb2xzLiAgVHV0b3JpYWxzIG9uIGhvdyB0byB1c2UgdGhlc2UgdG9vbHMKK2FyZSB3ZWxsIGJleW9uZCB0aGUgc2NvcGUgb2YgdGhpcyBkb2N1bWVudCwgYnV0IHRoZXJlIGlzIHNwYWNlIGZvciBhIGZldworcG9pbnRlcnMuCisKK0J5IGZhciB0aGUgZG9taW5hbnQgc291cmNlIGNvZGUgbWFuYWdlbWVudCBzeXN0ZW0gdXNlZCBieSB0aGUga2VybmVsCitjb21tdW5pdHkgaXMgZ2l0LiAgR2l0IGlzIG9uZSBvZiBhIG51bWJlciBvZiBkaXN0cmlidXRlZCB2ZXJzaW9uIGNvbnRyb2wKK3N5c3RlbXMgYmVpbmcgZGV2ZWxvcGVkIGluIHRoZSBmcmVlIHNvZnR3YXJlIGNvbW11bml0eS4gIEl0IGlzIHdlbGwgdHVuZWQKK2ZvciBrZXJuZWwgZGV2ZWxvcG1lbnQsIGluIHRoYXQgaXQgcGVyZm9ybXMgcXVpdGUgd2VsbCB3aGVuIGRlYWxpbmcgd2l0aAorbGFyZ2UgcmVwb3NpdG9yaWVzIGFuZCBsYXJnZSBudW1iZXJzIG9mIHBhdGNoZXMuICBJdCBhbHNvIGhhcyBhIHJlcHV0YXRpb24KK2ZvciBiZWluZyBkaWZmaWN1bHQgdG8gbGVhcm4gYW5kIHVzZSwgdGhvdWdoIGl0IGhhcyBnb3R0ZW4gYmV0dGVyIG92ZXIKK3RpbWUuICBTb21lIHNvcnQgb2YgZmFtaWxpYXJpdHkgd2l0aCBnaXQgaXMgYWxtb3N0IGEgcmVxdWlyZW1lbnQgZm9yIGtlcm5lbAorZGV2ZWxvcGVyczsgZXZlbiBpZiB0aGV5IGRvIG5vdCB1c2UgaXQgZm9yIHRoZWlyIG93biB3b3JrLCB0aGV5J2xsIG5lZWQgZ2l0Cit0byBrZWVwIHVwIHdpdGggd2hhdCBvdGhlciBkZXZlbG9wZXJzIChhbmQgdGhlIG1haW5saW5lKSBhcmUgZG9pbmcuCisKK0dpdCBpcyBub3cgcGFja2FnZWQgYnkgYWxtb3N0IGFsbCBMaW51eCBkaXN0cmlidXRpb25zLiAgVGhlcmUgaXMgYSBob21lCitwYWdlIGF0IAorCisJaHR0cDovL2dpdC5vci5jei8KKworVGhhdCBwYWdlIGhhcyBwb2ludGVycyB0byBkb2N1bWVudGF0aW9uIGFuZCB0dXRvcmlhbHMuICBPbmUgc2hvdWxkIGJlCithd2FyZSwgaW4gcGFydGljdWxhciwgb2YgdGhlIEtlcm5lbCBIYWNrZXIncyBHdWlkZSB0byBnaXQsIHdoaWNoIGhhcworaW5mb3JtYXRpb24gc3BlY2lmaWMgdG8ga2VybmVsIGRldmVsb3BtZW50OgorCisJaHR0cDovL2xpbnV4Lnl5ei51cy9naXQtaG93dG8uaHRtbAorCitBbW9uZyB0aGUga2VybmVsIGRldmVsb3BlcnMgd2hvIGRvIG5vdCB1c2UgZ2l0LCB0aGUgbW9zdCBwb3B1bGFyIGNob2ljZSBpcworYWxtb3N0IGNlcnRhaW5seSBNZXJjdXJpYWw6CisKKwlodHRwOi8vd3d3LnNlbGVuaWMuY29tL21lcmN1cmlhbC8KKworTWVyY3VyaWFsIHNoYXJlcyBtYW55IGZlYXR1cmVzIHdpdGggZ2l0LCBidXQgaXQgcHJvdmlkZXMgYW4gaW50ZXJmYWNlIHdoaWNoCittYW55IGZpbmQgZWFzaWVyIHRvIHVzZS4KKworVGhlIG90aGVyIHRvb2wgd29ydGgga25vd2luZyBhYm91dCBpcyBRdWlsdDoKKworCWh0dHA6Ly9zYXZhbm5haC5ub25nbnUub3JnL3Byb2plY3RzL3F1aWx0LworCitRdWlsdCBpcyBhIHBhdGNoIG1hbmFnZW1lbnQgc3lzdGVtLCByYXRoZXIgdGhhbiBhIHNvdXJjZSBjb2RlIG1hbmFnZW1lbnQKK3N5c3RlbS4gIEl0IGRvZXMgbm90IHRyYWNrIGhpc3Rvcnkgb3ZlciB0aW1lOyBpdCBpcywgaW5zdGVhZCwgb3JpZW50ZWQKK3Rvd2FyZCB0cmFja2luZyBhIHNwZWNpZmljIHNldCBvZiBjaGFuZ2VzIGFnYWluc3QgYW4gZXZvbHZpbmcgY29kZSBiYXNlLgorU29tZSBtYWpvciBzdWJzeXN0ZW0gbWFpbnRhaW5lcnMgdXNlIHF1aWx0IHRvIG1hbmFnZSBwYXRjaGVzIGludGVuZGVkIHRvIGdvCit1cHN0cmVhbS4gIEZvciB0aGUgbWFuYWdlbWVudCBvZiBjZXJ0YWluIGtpbmRzIG9mIHRyZWVzICgtbW0sIGZvciBleGFtcGxlKSwKK3F1aWx0IGlzIHRoZSBiZXN0IHRvb2wgZm9yIHRoZSBqb2IuCisKKworMi42OiBNQUlMSU5HIExJU1RTCisKK0EgZ3JlYXQgZGVhbCBvZiBMaW51eCBrZXJuZWwgZGV2ZWxvcG1lbnQgd29yayBpcyBkb25lIGJ5IHdheSBvZiBtYWlsaW5nCitsaXN0cy4gIEl0IGlzIGhhcmQgdG8gYmUgYSBmdWxseS1mdW5jdGlvbmluZyBtZW1iZXIgb2YgdGhlIGNvbW11bml0eQord2l0aG91dCBqb2luaW5nIGF0IGxlYXN0IG9uZSBsaXN0IHNvbWV3aGVyZS4gIEJ1dCBMaW51eCBtYWlsaW5nIGxpc3RzIGFsc28KK3JlcHJlc2VudCBhIHBvdGVudGlhbCBoYXphcmQgdG8gZGV2ZWxvcGVycywgd2hvIHJpc2sgZ2V0dGluZyBidXJpZWQgdW5kZXIgYQorbG9hZCBvZiBlbGVjdHJvbmljIG1haWwsIHJ1bm5pbmcgYWZvdWwgb2YgdGhlIGNvbnZlbnRpb25zIHVzZWQgb24gdGhlIExpbnV4CitsaXN0cywgb3IgYm90aC4KKworTW9zdCBrZXJuZWwgbWFpbGluZyBsaXN0cyBhcmUgcnVuIG9uIHZnZXIua2VybmVsLm9yZzsgdGhlIG1hc3RlciBsaXN0IGNhbgorYmUgZm91bmQgYXQ6CisKKwlodHRwOi8vdmdlci5rZXJuZWwub3JnL3ZnZXItbGlzdHMuaHRtbAorCitUaGVyZSBhcmUgbGlzdHMgaG9zdGVkIGVsc2V3aGVyZSwgdGhvdWdoOyBhIG51bWJlciBvZiB0aGVtIGFyZSBhdAorbGlzdHMucmVkaGF0LmNvbS4KKworVGhlIGNvcmUgbWFpbGluZyBsaXN0IGZvciBrZXJuZWwgZGV2ZWxvcG1lbnQgaXMsIG9mIGNvdXJzZSwgbGludXgta2VybmVsLgorVGhpcyBsaXN0IGlzIGFuIGludGltaWRhdGluZyBwbGFjZSB0byBiZTsgdm9sdW1lIGNhbiByZWFjaCA1MDAgbWVzc2FnZXMgcGVyCitkYXksIHRoZSBhbW91bnQgb2Ygbm9pc2UgaXMgaGlnaCwgdGhlIGNvbnZlcnNhdGlvbiBjYW4gYmUgc2V2ZXJlbHkKK3RlY2huaWNhbCwgYW5kIHBhcnRpY2lwYW50cyBhcmUgbm90IGFsd2F5cyBjb25jZXJuZWQgd2l0aCBzaG93aW5nIGEgaGlnaAorZGVncmVlIG9mIHBvbGl0ZW5lc3MuICBCdXQgdGhlcmUgaXMgbm8gb3RoZXIgcGxhY2Ugd2hlcmUgdGhlIGtlcm5lbAorZGV2ZWxvcG1lbnQgY29tbXVuaXR5IGNvbWVzIHRvZ2V0aGVyIGFzIGEgd2hvbGU7IGRldmVsb3BlcnMgd2hvIGF2b2lkIHRoaXMKK2xpc3Qgd2lsbCBtaXNzIGltcG9ydGFudCBpbmZvcm1hdGlvbi4KKworVGhlcmUgYXJlIGEgZmV3IGhpbnRzIHdoaWNoIGNhbiBoZWxwIHdpdGggbGludXgta2VybmVsIHN1cnZpdmFsOgorCistIEhhdmUgdGhlIGxpc3QgZGVsaXZlcmVkIHRvIGEgc2VwYXJhdGUgZm9sZGVyLCByYXRoZXIgdGhhbiB5b3VyIG1haW4KKyAgbWFpbGJveC4gIE9uZSBtdXN0IGJlIGFibGUgdG8gaWdub3JlIHRoZSBzdHJlYW0gZm9yIHN1c3RhaW5lZCBwZXJpb2RzIG9mCisgIHRpbWUuCisKKy0gRG8gbm90IHRyeSB0byBmb2xsb3cgZXZlcnkgY29udmVyc2F0aW9uIC0gbm9ib2R5IGVsc2UgZG9lcy4gIEl0IGlzCisgIGltcG9ydGFudCB0byBmaWx0ZXIgb24gYm90aCB0aGUgdG9waWMgb2YgaW50ZXJlc3QgKHRob3VnaCBub3RlIHRoYXQKKyAgbG9uZy1ydW5uaW5nIGNvbnZlcnNhdGlvbnMgY2FuIGRyaWZ0IGF3YXkgZnJvbSB0aGUgb3JpZ2luYWwgc3ViamVjdAorICB3aXRob3V0IGNoYW5naW5nIHRoZSBlbWFpbCBzdWJqZWN0IGxpbmUpIGFuZCB0aGUgcGVvcGxlIHdobyBhcmUKKyAgcGFydGljaXBhdGluZy4gIAorCistIERvIG5vdCBmZWVkIHRoZSB0cm9sbHMuICBJZiBzb21lYm9keSBpcyB0cnlpbmcgdG8gc3RpciB1cCBhbiBhbmdyeQorICByZXNwb25zZSwgaWdub3JlIHRoZW0uCisKKy0gV2hlbiByZXNwb25kaW5nIHRvIGxpbnV4LWtlcm5lbCBlbWFpbCAob3IgdGhhdCBvbiBvdGhlciBsaXN0cykgcHJlc2VydmUKKyAgdGhlIENjOiBoZWFkZXIgZm9yIGFsbCBpbnZvbHZlZC4gIEluIHRoZSBhYnNlbmNlIG9mIGEgc3Ryb25nIHJlYXNvbiAoc3VjaAorICBhcyBhbiBleHBsaWNpdCByZXF1ZXN0KSwgeW91IHNob3VsZCBuZXZlciByZW1vdmUgcmVjaXBpZW50cy4gIEFsd2F5cyBtYWtlCisgIHN1cmUgdGhhdCB0aGUgcGVyc29uIHlvdSBhcmUgcmVzcG9uZGluZyB0byBpcyBpbiB0aGUgQ2M6IGxpc3QuICBUaGlzCisgIGNvbnZlbnRpb24gYWxzbyBtYWtlcyBpdCB1bm5lY2Vzc2FyeSB0byBleHBsaWNpdGx5IGFzayB0byBiZSBjb3BpZWQgb24KKyAgcmVwbGllcyB0byB5b3VyIHBvc3RpbmdzLgorCistIFNlYXJjaCB0aGUgbGlzdCBhcmNoaXZlcyAoYW5kIHRoZSBuZXQgYXMgYSB3aG9sZSkgYmVmb3JlIGFza2luZworICBxdWVzdGlvbnMuICBTb21lIGRldmVsb3BlcnMgY2FuIGdldCBpbXBhdGllbnQgd2l0aCBwZW9wbGUgd2hvIGNsZWFybHkKKyAgaGF2ZSBub3QgZG9uZSB0aGVpciBob21ld29yay4KKworLSBBdm9pZCB0b3AtcG9zdGluZyAodGhlIHByYWN0aWNlIG9mIHB1dHRpbmcgeW91ciBhbnN3ZXIgYWJvdmUgdGhlIHF1b3RlZAorICB0ZXh0IHlvdSBhcmUgcmVzcG9uZGluZyB0bykuICBJdCBtYWtlcyB5b3VyIHJlc3BvbnNlIGhhcmRlciB0byByZWFkIGFuZAorICBtYWtlcyBhIHBvb3IgaW1wcmVzc2lvbi4KKworLSBBc2sgb24gdGhlIGNvcnJlY3QgbWFpbGluZyBsaXN0LiAgTGludXgta2VybmVsIG1heSBiZSB0aGUgZ2VuZXJhbCBtZWV0aW5nCisgIHBvaW50LCBidXQgaXQgaXMgbm90IHRoZSBiZXN0IHBsYWNlIHRvIGZpbmQgZGV2ZWxvcGVycyBmcm9tIGFsbAorICBzdWJzeXN0ZW1zLgorCitUaGUgbGFzdCBwb2ludCAtIGZpbmRpbmcgdGhlIGNvcnJlY3QgbWFpbGluZyBsaXN0IC0gaXMgYSBjb21tb24gcGxhY2UgZm9yCitiZWdpbm5pbmcgZGV2ZWxvcGVycyB0byBnbyB3cm9uZy4gIFNvbWVib2R5IHdobyBhc2tzIGEgbmV0d29ya2luZy1yZWxhdGVkCitxdWVzdGlvbiBvbiBsaW51eC1rZXJuZWwgd2lsbCBhbG1vc3QgY2VydGFpbmx5IHJlY2VpdmUgYSBwb2xpdGUgc3VnZ2VzdGlvbgordG8gYXNrIG9uIHRoZSBuZXRkZXYgbGlzdCBpbnN0ZWFkLCBhcyB0aGF0IGlzIHRoZSBsaXN0IGZyZXF1ZW50ZWQgYnkgbW9zdAorbmV0d29ya2luZyBkZXZlbG9wZXJzLiAgT3RoZXIgbGlzdHMgZXhpc3QgZm9yIHRoZSBTQ1NJLCB2aWRlbzRsaW51eCwgSURFLAorZmlsZXN5c3RlbSwgZXRjLiBzdWJzeXN0ZW1zLiAgVGhlIGJlc3QgcGxhY2UgdG8gbG9vayBmb3IgbWFpbGluZyBsaXN0cyBpcworaW4gdGhlIE1BSU5UQUlORVJTIGZpbGUgcGFja2FnZWQgd2l0aCB0aGUga2VybmVsIHNvdXJjZS4KKworCisyLjc6IEdFVFRJTkcgU1RBUlRFRCBXSVRIIEtFUk5FTCBERVZFTE9QTUVOVAorCitRdWVzdGlvbnMgYWJvdXQgaG93IHRvIGdldCBzdGFydGVkIHdpdGggdGhlIGtlcm5lbCBkZXZlbG9wbWVudCBwcm9jZXNzIGFyZQorY29tbW9uIC0gZnJvbSBib3RoIGluZGl2aWR1YWxzIGFuZCBjb21wYW5pZXMuICBFcXVhbGx5IGNvbW1vbiBhcmUgbWlzc3RlcHMKK3doaWNoIG1ha2UgdGhlIGJlZ2lubmluZyBvZiB0aGUgcmVsYXRpb25zaGlwIGhhcmRlciB0aGFuIGl0IGhhcyB0byBiZS4KKworQ29tcGFuaWVzIG9mdGVuIGxvb2sgdG8gaGlyZSB3ZWxsLWtub3duIGRldmVsb3BlcnMgdG8gZ2V0IGEgZGV2ZWxvcG1lbnQKK2dyb3VwIHN0YXJ0ZWQuICBUaGlzIGNhbiwgaW4gZmFjdCwgYmUgYW4gZWZmZWN0aXZlIHRlY2huaXF1ZS4gIEJ1dCBpdCBhbHNvCit0ZW5kcyB0byBiZSBleHBlbnNpdmUgYW5kIGRvZXMgbm90IGRvIG11Y2ggdG8gZ3JvdyB0aGUgcG9vbCBvZiBleHBlcmllbmNlZAora2VybmVsIGRldmVsb3BlcnMuICBJdCBpcyBwb3NzaWJsZSB0byBicmluZyBpbi1ob3VzZSBkZXZlbG9wZXJzIHVwIHRvIHNwZWVkCitvbiBMaW51eCBrZXJuZWwgZGV2ZWxvcG1lbnQsIGdpdmVuIHRoZSBpbnZlc3RtZW50IG9mIGEgYml0IG9mIHRpbWUuICBUYWtpbmcKK3RoaXMgdGltZSBjYW4gZW5kb3cgYW4gZW1wbG95ZXIgd2l0aCBhIGdyb3VwIG9mIGRldmVsb3BlcnMgd2hvIHVuZGVyc3RhbmQKK3RoZSBrZXJuZWwgYW5kIHRoZSBjb21wYW55IGJvdGgsIGFuZCB3aG8gY2FuIGhlbHAgdG8gdHJhaW4gb3RoZXJzIGFzIHdlbGwuCitPdmVyIHRoZSBtZWRpdW0gdGVybSwgdGhpcyBpcyBvZnRlbiB0aGUgbW9yZSBwcm9maXRhYmxlIGFwcHJvYWNoLgorCitJbmRpdmlkdWFsIGRldmVsb3BlcnMgYXJlIG9mdGVuLCB1bmRlcnN0YW5kYWJseSwgYXQgYSBsb3NzIGZvciBhIHBsYWNlIHRvCitzdGFydC4gIEJlZ2lubmluZyB3aXRoIGEgbGFyZ2UgcHJvamVjdCBjYW4gYmUgaW50aW1pZGF0aW5nOyBvbmUgb2Z0ZW4gd2FudHMKK3RvIHRlc3QgdGhlIHdhdGVycyB3aXRoIHNvbWV0aGluZyBzbWFsbGVyIGZpcnN0LiAgVGhpcyBpcyB0aGUgcG9pbnQgd2hlcmUKK3NvbWUgZGV2ZWxvcGVycyBqdW1wIGludG8gdGhlIGNyZWF0aW9uIG9mIHBhdGNoZXMgZml4aW5nIHNwZWxsaW5nIGVycm9ycyBvcgorbWlub3IgY29kaW5nIHN0eWxlIGlzc3Vlcy4gIFVuZm9ydHVuYXRlbHksIHN1Y2ggcGF0Y2hlcyBjcmVhdGUgYSBsZXZlbCBvZgorbm9pc2Ugd2hpY2ggaXMgZGlzdHJhY3RpbmcgZm9yIHRoZSBkZXZlbG9wbWVudCBjb21tdW5pdHkgYXMgYSB3aG9sZSwgc28sCitpbmNyZWFzaW5nbHksIHRoZXkgYXJlIGxvb2tlZCBkb3duIHVwb24uICBOZXcgZGV2ZWxvcGVycyB3aXNoaW5nIHRvCitpbnRyb2R1Y2UgdGhlbXNlbHZlcyB0byB0aGUgY29tbXVuaXR5IHdpbGwgbm90IGdldCB0aGUgc29ydCBvZiByZWNlcHRpb24KK3RoZXkgd2lzaCBmb3IgYnkgdGhlc2UgbWVhbnMuCisKK0FuZHJldyBNb3J0b24gZ2l2ZXMgdGhpcyBhZHZpY2UgZm9yIGFzcGlyaW5nIGtlcm5lbCBkZXZlbG9wZXJzCisKKwlUaGUgIzEgcHJvamVjdCBmb3IgYWxsIGtlcm5lbCBiZWdpbm5lcnMgc2hvdWxkIHN1cmVseSBiZSAibWFrZSBzdXJlCisJdGhhdCB0aGUga2VybmVsIHJ1bnMgcGVyZmVjdGx5IGF0IGFsbCB0aW1lcyBvbiBhbGwgbWFjaGluZXMgd2hpY2gKKwl5b3UgY2FuIGxheSB5b3VyIGhhbmRzIG9uIi4gIFVzdWFsbHkgdGhlIHdheSB0byBkbyB0aGlzIGlzIHRvIHdvcmsKKwl3aXRoIG90aGVycyBvbiBnZXR0aW5nIHRoaW5ncyBmaXhlZCB1cCAodGhpcyBjYW4gcmVxdWlyZQorCXBlcnNpc3RlbmNlISkgYnV0IHRoYXQncyBmaW5lIC0gaXQncyBhIHBhcnQgb2Yga2VybmVsIGRldmVsb3BtZW50LgorCisoaHR0cDovL2x3bi5uZXQvQXJ0aWNsZXMvMjgzOTgyLykuCisKK0luIHRoZSBhYnNlbmNlIG9mIG9idmlvdXMgcHJvYmxlbXMgdG8gZml4LCBkZXZlbG9wZXJzIGFyZSBhZHZpc2VkIHRvIGxvb2sKK2F0IHRoZSBjdXJyZW50IGxpc3RzIG9mIHJlZ3Jlc3Npb25zIGFuZCBvcGVuIGJ1Z3MgaW4gZ2VuZXJhbC4gIFRoZXJlIGlzCituZXZlciBhbnkgc2hvcnRhZ2Ugb2YgaXNzdWVzIGluIG5lZWQgb2YgZml4aW5nOyBieSBhZGRyZXNzaW5nIHRoZXNlIGlzc3VlcywKK2RldmVsb3BlcnMgd2lsbCBnYWluIGV4cGVyaWVuY2Ugd2l0aCB0aGUgcHJvY2VzcyB3aGlsZSwgYXQgdGhlIHNhbWUgdGltZSwKK2J1aWxkaW5nIHJlc3BlY3Qgd2l0aCB0aGUgcmVzdCBvZiB0aGUgZGV2ZWxvcG1lbnQgY29tbXVuaXR5LgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZlbG9wbWVudC1wcm9jZXNzLzMuRWFybHktc3RhZ2UgYi9Eb2N1bWVudGF0aW9uL2RldmVsb3BtZW50LXByb2Nlc3MvMy5FYXJseS1zdGFnZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMDdhMTU5Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZlbG9wbWVudC1wcm9jZXNzLzMuRWFybHktc3RhZ2UKQEAgLTAsMCArMSwxOTUgQEAKKzM6IEVBUkxZLVNUQUdFIFBMQU5OSU5HCisKK1doZW4gY29udGVtcGxhdGluZyBhIExpbnV4IGtlcm5lbCBkZXZlbG9wbWVudCBwcm9qZWN0LCBpdCBjYW4gYmUgdGVtcHRpbmcKK3RvIGp1bXAgcmlnaHQgaW4gYW5kIHN0YXJ0IGNvZGluZy4gIEFzIHdpdGggYW55IHNpZ25pZmljYW50IHByb2plY3QsCit0aG91Z2gsIG11Y2ggb2YgdGhlIGdyb3VuZHdvcmsgZm9yIHN1Y2Nlc3MgaXMgYmVzdCBsYWlkIGJlZm9yZSB0aGUgZmlyc3QKK2xpbmUgb2YgY29kZSBpcyB3cml0dGVuLiAgU29tZSB0aW1lIHNwZW50IGluIGVhcmx5IHBsYW5uaW5nIGFuZAorY29tbXVuaWNhdGlvbiBjYW4gc2F2ZSBmYXIgbW9yZSB0aW1lIGxhdGVyIG9uLgorCisKKzMuMTogU1BFQ0lGWUlORyBUSEUgUFJPQkxFTQorCitMaWtlIGFueSBlbmdpbmVlcmluZyBwcm9qZWN0LCBhIHN1Y2Nlc3NmdWwga2VybmVsIGVuaGFuY2VtZW50IHN0YXJ0cyB3aXRoIGEKK2NsZWFyIGRlc2NyaXB0aW9uIG9mIHRoZSBwcm9ibGVtIHRvIGJlIHNvbHZlZC4gIEluIHNvbWUgY2FzZXMsIHRoaXMgc3RlcCBpcworZWFzeTogd2hlbiBhIGRyaXZlciBpcyBuZWVkZWQgZm9yIGEgc3BlY2lmaWMgcGllY2Ugb2YgaGFyZHdhcmUsIGZvcgorZXhhbXBsZS4gIEluIG90aGVycywgdGhvdWdoLCBpdCBpcyB0ZW1wdGluZyB0byBjb25mdXNlIHRoZSByZWFsIHByb2JsZW0KK3dpdGggdGhlIHByb3Bvc2VkIHNvbHV0aW9uLCBhbmQgdGhhdCBjYW4gbGVhZCB0byBkaWZmaWN1bHRpZXMuCisKK0NvbnNpZGVyIGFuIGV4YW1wbGU6IHNvbWUgeWVhcnMgYWdvLCBkZXZlbG9wZXJzIHdvcmtpbmcgd2l0aCBMaW51eCBhdWRpbworc291Z2h0IGEgd2F5IHRvIHJ1biBhcHBsaWNhdGlvbnMgd2l0aG91dCBkcm9wb3V0cyBvciBvdGhlciBhcnRpZmFjdHMgY2F1c2VkCitieSBleGNlc3NpdmUgbGF0ZW5jeSBpbiB0aGUgc3lzdGVtLiAgVGhlIHNvbHV0aW9uIHRoZXkgYXJyaXZlZCBhdCB3YXMgYQora2VybmVsIG1vZHVsZSBpbnRlbmRlZCB0byBob29rIGludG8gdGhlIExpbnV4IFNlY3VyaXR5IE1vZHVsZSAoTFNNKQorZnJhbWV3b3JrOyB0aGlzIG1vZHVsZSBjb3VsZCBiZSBjb25maWd1cmVkIHRvIGdpdmUgc3BlY2lmaWMgYXBwbGljYXRpb25zCithY2Nlc3MgdG8gdGhlIHJlYWx0aW1lIHNjaGVkdWxlci4gIFRoaXMgbW9kdWxlIHdhcyBpbXBsZW1lbnRlZCBhbmQgc2VudCB0bwordGhlIGxpbnV4LWtlcm5lbCBtYWlsaW5nIGxpc3QsIHdoZXJlIGl0IGltbWVkaWF0ZWx5IHJhbiBpbnRvIHByb2JsZW1zLgorCitUbyB0aGUgYXVkaW8gZGV2ZWxvcGVycywgdGhpcyBzZWN1cml0eSBtb2R1bGUgd2FzIHN1ZmZpY2llbnQgdG8gc29sdmUgdGhlaXIKK2ltbWVkaWF0ZSBwcm9ibGVtLiAgVG8gdGhlIHdpZGVyIGtlcm5lbCBjb21tdW5pdHksIHRob3VnaCwgaXQgd2FzIHNlZW4gYXMgYQorbWlzdXNlIG9mIHRoZSBMU00gZnJhbWV3b3JrICh3aGljaCBpcyBub3QgaW50ZW5kZWQgdG8gY29uZmVyIHByaXZpbGVnZXMKK29udG8gcHJvY2Vzc2VzIHdoaWNoIHRoZXkgd291bGQgbm90IG90aGVyd2lzZSBoYXZlKSBhbmQgYSByaXNrIHRvIHN5c3RlbQorc3RhYmlsaXR5LiAgVGhlaXIgcHJlZmVycmVkIHNvbHV0aW9ucyBpbnZvbHZlZCByZWFsdGltZSBzY2hlZHVsaW5nIGFjY2VzcwordmlhIHRoZSBybGltaXQgbWVjaGFuaXNtIGZvciB0aGUgc2hvcnQgdGVybSwgYW5kIG9uZ29pbmcgbGF0ZW5jeSByZWR1Y3Rpb24KK3dvcmsgaW4gdGhlIGxvbmcgdGVybS4KKworVGhlIGF1ZGlvIGNvbW11bml0eSwgaG93ZXZlciwgY291bGQgbm90IHNlZSBwYXN0IHRoZSBwYXJ0aWN1bGFyIHNvbHV0aW9uCit0aGV5IGhhZCBpbXBsZW1lbnRlZDsgdGhleSB3ZXJlIHVud2lsbGluZyB0byBhY2NlcHQgYWx0ZXJuYXRpdmVzLiAgVGhlCityZXN1bHRpbmcgZGlzYWdyZWVtZW50IGxlZnQgdGhvc2UgZGV2ZWxvcGVycyBmZWVsaW5nIGRpc2lsbHVzaW9uZWQgd2l0aCB0aGUKK2VudGlyZSBrZXJuZWwgZGV2ZWxvcG1lbnQgcHJvY2Vzczsgb25lIG9mIHRoZW0gd2VudCBiYWNrIHRvIGFuIGF1ZGlvIGxpc3QKK2FuZCBwb3N0ZWQgdGhpczoKKworCVRoZXJlIGFyZSBhIG51bWJlciBvZiB2ZXJ5IGdvb2QgTGludXgga2VybmVsIGRldmVsb3BlcnMsIGJ1dCB0aGV5CisJdGVuZCB0byBnZXQgb3V0c2hvdXRlZCBieSBhIGxhcmdlIGNyb3dkIG9mIGFycm9nYW50IGZvb2xzLiBUcnlpbmcKKwl0byBjb21tdW5pY2F0ZSB1c2VyIHJlcXVpcmVtZW50cyB0byB0aGVzZSBwZW9wbGUgaXMgYSB3YXN0ZSBvZgorCXRpbWUuIFRoZXkgYXJlIG11Y2ggdG9vICJpbnRlbGxpZ2VudCIgdG8gbGlzdGVuIHRvIGxlc3NlciBtb3J0YWxzLgorCisoaHR0cDovL2x3bi5uZXQvQXJ0aWNsZXMvMTMxNzc2LykuCisKK1RoZSByZWFsaXR5IG9mIHRoZSBzaXR1YXRpb24gd2FzIGRpZmZlcmVudDsgdGhlIGtlcm5lbCBkZXZlbG9wZXJzIHdlcmUgZmFyCittb3JlIGNvbmNlcm5lZCBhYm91dCBzeXN0ZW0gc3RhYmlsaXR5LCBsb25nLXRlcm0gbWFpbnRlbmFuY2UsIGFuZCBmaW5kaW5nCit0aGUgcmlnaHQgc29sdXRpb24gdG8gdGhlIHByb2JsZW0gdGhhbiB0aGV5IHdlcmUgd2l0aCBhIHNwZWNpZmljIG1vZHVsZS4KK1RoZSBtb3JhbCBvZiB0aGUgc3RvcnkgaXMgdG8gZm9jdXMgb24gdGhlIHByb2JsZW0gLSBub3QgYSBzcGVjaWZpYyBzb2x1dGlvbgorLSBhbmQgdG8gZGlzY3VzcyBpdCB3aXRoIHRoZSBkZXZlbG9wbWVudCBjb21tdW5pdHkgYmVmb3JlIGludmVzdGluZyBpbiB0aGUKK2NyZWF0aW9uIG9mIGEgYm9keSBvZiBjb2RlLgorCitTbywgd2hlbiBjb250ZW1wbGF0aW5nIGEga2VybmVsIGRldmVsb3BtZW50IHByb2plY3QsIG9uZSBzaG91bGQgb2J0YWluCithbnN3ZXJzIHRvIGEgc2hvcnQgc2V0IG9mIHF1ZXN0aW9uczoKKworIC0gV2hhdCwgZXhhY3RseSwgaXMgdGhlIHByb2JsZW0gd2hpY2ggbmVlZHMgdG8gYmUgc29sdmVkPworCisgLSBXaG8gYXJlIHRoZSB1c2VycyBhZmZlY3RlZCBieSB0aGlzIHByb2JsZW0/ICBXaGljaCB1c2UgY2FzZXMgc2hvdWxkIHRoZQorICAgc29sdXRpb24gYWRkcmVzcz8KKworIC0gSG93IGRvZXMgdGhlIGtlcm5lbCBmYWxsIHNob3J0IGluIGFkZHJlc3NpbmcgdGhhdCBwcm9ibGVtIG5vdz8KKworT25seSB0aGVuIGRvZXMgaXQgbWFrZSBzZW5zZSB0byBzdGFydCBjb25zaWRlcmluZyBwb3NzaWJsZSBzb2x1dGlvbnMuCisKKworMy4yOiBFQVJMWSBESVNDVVNTSU9OCisKK1doZW4gcGxhbm5pbmcgYSBrZXJuZWwgZGV2ZWxvcG1lbnQgcHJvamVjdCwgaXQgbWFrZXMgZ3JlYXQgc2Vuc2UgdG8gaG9sZAorZGlzY3Vzc2lvbnMgd2l0aCB0aGUgY29tbXVuaXR5IGJlZm9yZSBsYXVuY2hpbmcgaW50byBpbXBsZW1lbnRhdGlvbi4gIEVhcmx5Citjb21tdW5pY2F0aW9uIGNhbiBzYXZlIHRpbWUgYW5kIHRyb3VibGUgaW4gYSBudW1iZXIgb2Ygd2F5czoKKworIC0gSXQgbWF5IHdlbGwgYmUgdGhhdCB0aGUgcHJvYmxlbSBpcyBhZGRyZXNzZWQgYnkgdGhlIGtlcm5lbCBpbiB3YXlzIHdoaWNoCisgICB5b3UgaGF2ZSBub3QgdW5kZXJzdG9vZC4gIFRoZSBMaW51eCBrZXJuZWwgaXMgbGFyZ2UgYW5kIGhhcyBhIG51bWJlciBvZgorICAgZmVhdHVyZXMgYW5kIGNhcGFiaWxpdGllcyB3aGljaCBhcmUgbm90IGltbWVkaWF0ZWx5IG9idmlvdXMuICBOb3QgYWxsCisgICBrZXJuZWwgY2FwYWJpbGl0aWVzIGFyZSBkb2N1bWVudGVkIGFzIHdlbGwgYXMgb25lIG1pZ2h0IGxpa2UsIGFuZCBpdCBpcworICAgZWFzeSB0byBtaXNzIHRoaW5ncy4gIFlvdXIgYXV0aG9yIGhhcyBzZWVuIHRoZSBwb3N0aW5nIG9mIGEgY29tcGxldGUKKyAgIGRyaXZlciB3aGljaCBkdXBsaWNhdGVkIGFuIGV4aXN0aW5nIGRyaXZlciB0aGF0IHRoZSBuZXcgYXV0aG9yIGhhZCBiZWVuCisgICB1bmF3YXJlIG9mLiAgQ29kZSB3aGljaCByZWludmVudHMgZXhpc3Rpbmcgd2hlZWxzIGlzIG5vdCBvbmx5IHdhc3RlZnVsOworICAgaXQgd2lsbCBhbHNvIG5vdCBiZSBhY2NlcHRlZCBpbnRvIHRoZSBtYWlubGluZSBrZXJuZWwuCisKKyAtIFRoZXJlIG1heSBiZSBlbGVtZW50cyBvZiB0aGUgcHJvcG9zZWQgc29sdXRpb24gd2hpY2ggd2lsbCBub3QgYmUKKyAgIGFjY2VwdGFibGUgZm9yIG1haW5saW5lIG1lcmdpbmcuICBJdCBpcyBiZXR0ZXIgdG8gZmluZCBvdXQgYWJvdXQKKyAgIHByb2JsZW1zIGxpa2UgdGhpcyBiZWZvcmUgd3JpdGluZyB0aGUgY29kZS4KKworIC0gSXQncyBlbnRpcmVseSBwb3NzaWJsZSB0aGF0IG90aGVyIGRldmVsb3BlcnMgaGF2ZSB0aG91Z2h0IGFib3V0IHRoZQorICAgcHJvYmxlbTsgdGhleSBtYXkgaGF2ZSBpZGVhcyBmb3IgYSBiZXR0ZXIgc29sdXRpb24sIGFuZCBtYXkgYmUgd2lsbGluZworICAgdG8gaGVscCBpbiB0aGUgY3JlYXRpb24gb2YgdGhhdCBzb2x1dGlvbi4KKworWWVhcnMgb2YgZXhwZXJpZW5jZSB3aXRoIHRoZSBrZXJuZWwgZGV2ZWxvcG1lbnQgY29tbXVuaXR5IGhhdmUgdGF1Z2h0IGEKK2NsZWFyIGxlc3Nvbjoga2VybmVsIGNvZGUgd2hpY2ggaXMgZGVzaWduZWQgYW5kIGRldmVsb3BlZCBiZWhpbmQgY2xvc2VkCitkb29ycyBpbnZhcmlhYmx5IGhhcyBwcm9ibGVtcyB3aGljaCBhcmUgb25seSByZXZlYWxlZCB3aGVuIHRoZSBjb2RlIGlzCityZWxlYXNlZCBpbnRvIHRoZSBjb21tdW5pdHkuICBTb21ldGltZXMgdGhlc2UgcHJvYmxlbXMgYXJlIHNldmVyZSwKK3JlcXVpcmluZyBtb250aHMgb3IgeWVhcnMgb2YgZWZmb3J0IGJlZm9yZSB0aGUgY29kZSBjYW4gYmUgYnJvdWdodCB1cCB0bwordGhlIGtlcm5lbCBjb21tdW5pdHkncyBzdGFuZGFyZHMuICBTb21lIGV4YW1wbGVzIGluY2x1ZGU6CisKKyAtIFRoZSBEZXZpY2VzY2FwZSBuZXR3b3JrIHN0YWNrIHdhcyBkZXNpZ25lZCBhbmQgaW1wbGVtZW50ZWQgZm9yCisgICBzaW5nbGUtcHJvY2Vzc29yIHN5c3RlbXMuICBJdCBjb3VsZCBub3QgYmUgbWVyZ2VkIGludG8gdGhlIG1haW5saW5lCisgICB1bnRpbCBpdCB3YXMgbWFkZSBzdWl0YWJsZSBmb3IgbXVsdGlwcm9jZXNzb3Igc3lzdGVtcy4gIFJldHJvZml0dGluZworICAgbG9ja2luZyBhbmQgc3VjaCBpbnRvIGNvZGUgaXMgYSBkaWZmaWN1bHQgdGFzazsgYXMgYSByZXN1bHQsIHRoZSBtZXJnaW5nCisgICBvZiB0aGlzIGNvZGUgKG5vdyBjYWxsZWQgbWFjODAyMTEpIHdhcyBkZWxheWVkIGZvciBvdmVyIGEgeWVhci4KKworIC0gVGhlIFJlaXNlcjQgZmlsZXN5c3RlbSBpbmNsdWRlZCBhIG51bWJlciBvZiBjYXBhYmlsaXRpZXMgd2hpY2gsIGluIHRoZQorICAgY29yZSBrZXJuZWwgZGV2ZWxvcGVycycgb3Bpbmlvbiwgc2hvdWxkIGhhdmUgYmVlbiBpbXBsZW1lbnRlZCBpbiB0aGUKKyAgIHZpcnR1YWwgZmlsZXN5c3RlbSBsYXllciBpbnN0ZWFkLiAgSXQgYWxzbyBpbmNsdWRlZCBmZWF0dXJlcyB3aGljaCBjb3VsZAorICAgbm90IGVhc2lseSBiZSBpbXBsZW1lbnRlZCB3aXRob3V0IGV4cG9zaW5nIHRoZSBzeXN0ZW0gdG8gdXNlci1jYXVzZWQKKyAgIGRlYWRsb2Nrcy4gIFRoZSBsYXRlIHJldmVsYXRpb24gb2YgdGhlc2UgcHJvYmxlbXMgLSBhbmQgcmVmdXNhbCB0bworICAgYWRkcmVzcyBzb21lIG9mIHRoZW0gLSBoYXMgY2F1c2VkIFJlaXNlcjQgdG8gc3RheSBvdXQgb2YgdGhlIG1haW5saW5lCisgICBrZXJuZWwuCisKKyAtIFRoZSBBcHBBcm1vciBzZWN1cml0eSBtb2R1bGUgbWFkZSB1c2Ugb2YgaW50ZXJuYWwgdmlydHVhbCBmaWxlc3lzdGVtCisgICBkYXRhIHN0cnVjdHVyZXMgaW4gd2F5cyB3aGljaCB3ZXJlIGNvbnNpZGVyZWQgdG8gYmUgdW5zYWZlIGFuZAorICAgdW5yZWxpYWJsZS4gIFRoaXMgY29kZSBoYXMgc2luY2UgYmVlbiBzaWduaWZpY2FudGx5IHJld29ya2VkLCBidXQKKyAgIHJlbWFpbnMgb3V0c2lkZSBvZiB0aGUgbWFpbmxpbmUuCisKK0luIGVhY2ggb2YgdGhlc2UgY2FzZXMsIGEgZ3JlYXQgZGVhbCBvZiBwYWluIGFuZCBleHRyYSB3b3JrIGNvdWxkIGhhdmUgYmVlbgorYXZvaWRlZCB3aXRoIHNvbWUgZWFybHkgZGlzY3Vzc2lvbiB3aXRoIHRoZSBrZXJuZWwgZGV2ZWxvcGVycy4KKworCiszLjM6IFdITyBETyBZT1UgVEFMSyBUTz8KKworV2hlbiBkZXZlbG9wZXJzIGRlY2lkZSB0byB0YWtlIHRoZWlyIHBsYW5zIHB1YmxpYywgdGhlIG5leHQgcXVlc3Rpb24gd2lsbAorYmU6IHdoZXJlIGRvIHdlIHN0YXJ0PyAgVGhlIGFuc3dlciBpcyB0byBmaW5kIHRoZSByaWdodCBtYWlsaW5nIGxpc3QocykgYW5kCit0aGUgcmlnaHQgbWFpbnRhaW5lci4gIEZvciBtYWlsaW5nIGxpc3RzLCB0aGUgYmVzdCBhcHByb2FjaCBpcyB0byBsb29rIGluCit0aGUgTUFJTlRBSU5FUlMgZmlsZSBmb3IgYSByZWxldmFudCBwbGFjZSB0byBwb3N0LiAgSWYgdGhlcmUgaXMgYSBzdWl0YWJsZQorc3Vic3lzdGVtIGxpc3QsIHBvc3RpbmcgdGhlcmUgaXMgb2Z0ZW4gcHJlZmVyYWJsZSB0byBwb3N0aW5nIG9uCitsaW51eC1rZXJuZWw7IHlvdSBhcmUgbW9yZSBsaWtlbHkgdG8gcmVhY2ggZGV2ZWxvcGVycyB3aXRoIGV4cGVydGlzZSBpbiB0aGUKK3JlbGV2YW50IHN1YnN5c3RlbSBhbmQgdGhlIGVudmlyb25tZW50IG1heSBiZSBtb3JlIHN1cHBvcnRpdmUuCisKK0ZpbmRpbmcgbWFpbnRhaW5lcnMgY2FuIGJlIGEgYml0IGhhcmRlci4gIEFnYWluLCB0aGUgTUFJTlRBSU5FUlMgZmlsZSBpcwordGhlIHBsYWNlIHRvIHN0YXJ0LiAgVGhhdCBmaWxlIHRlbmRzIHRvIG5vdCBhbHdheXMgYmUgdXAgdG8gZGF0ZSwgdGhvdWdoLAorYW5kIG5vdCBhbGwgc3Vic3lzdGVtcyBhcmUgcmVwcmVzZW50ZWQgdGhlcmUuICBUaGUgcGVyc29uIGxpc3RlZCBpbiB0aGUKK01BSU5UQUlORVJTIGZpbGUgbWF5LCBpbiBmYWN0LCBub3QgYmUgdGhlIHBlcnNvbiB3aG8gaXMgYWN0dWFsbHkgYWN0aW5nIGluCit0aGF0IHJvbGUgY3VycmVudGx5LiAgU28sIHdoZW4gdGhlcmUgaXMgZG91YnQgYWJvdXQgd2hvIHRvIGNvbnRhY3QsIGEKK3VzZWZ1bCB0cmljayBpcyB0byB1c2UgZ2l0IChhbmQgImdpdCBsb2ciIGluIHBhcnRpY3VsYXIpIHRvIHNlZSB3aG8gaXMKK2N1cnJlbnRseSBhY3RpdmUgd2l0aGluIHRoZSBzdWJzeXN0ZW0gb2YgaW50ZXJlc3QuICBMb29rIGF0IHdobyBpcyB3cml0aW5nCitwYXRjaGVzLCBhbmQgd2hvLCBpZiBhbnlib2R5LCBpcyBhdHRhY2hpbmcgU2lnbmVkLW9mZi1ieSBsaW5lcyB0byB0aG9zZQorcGF0Y2hlcy4gIFRob3NlIGFyZSB0aGUgcGVvcGxlIHdobyB3aWxsIGJlIGJlc3QgcGxhY2VkIHRvIGhlbHAgd2l0aCBhIG5ldworZGV2ZWxvcG1lbnQgcHJvamVjdC4KKworSWYgYWxsIGVsc2UgZmFpbHMsIHRhbGtpbmcgdG8gQW5kcmV3IE1vcnRvbiBjYW4gYmUgYW4gZWZmZWN0aXZlIHdheSB0bwordHJhY2sgZG93biBhIG1haW50YWluZXIgZm9yIGEgc3BlY2lmaWMgcGllY2Ugb2YgY29kZS4KKworCiszLjQ6IFdIRU4gVE8gUE9TVD8KKworSWYgcG9zc2libGUsIHBvc3RpbmcgeW91ciBwbGFucyBkdXJpbmcgdGhlIGVhcmx5IHN0YWdlcyBjYW4gb25seSBiZQoraGVscGZ1bC4gIERlc2NyaWJlIHRoZSBwcm9ibGVtIGJlaW5nIHNvbHZlZCBhbmQgYW55IHBsYW5zIHRoYXQgaGF2ZSBiZWVuCittYWRlIG9uIGhvdyB0aGUgaW1wbGVtZW50YXRpb24gd2lsbCBiZSBkb25lLiAgQW55IGluZm9ybWF0aW9uIHlvdSBjYW4KK3Byb3ZpZGUgY2FuIGhlbHAgdGhlIGRldmVsb3BtZW50IGNvbW11bml0eSBwcm92aWRlIHVzZWZ1bCBpbnB1dCBvbiB0aGUKK3Byb2plY3QuCisKK09uZSBkaXNjb3VyYWdpbmcgdGhpbmcgd2hpY2ggY2FuIGhhcHBlbiBhdCB0aGlzIHN0YWdlIGlzIG5vdCBhIGhvc3RpbGUKK3JlYWN0aW9uLCBidXQsIGluc3RlYWQsIGxpdHRsZSBvciBubyByZWFjdGlvbiBhdCBhbGwuICBUaGUgc2FkIHRydXRoIG9mIHRoZQorbWF0dGVyIGlzICgxKSBrZXJuZWwgZGV2ZWxvcGVycyB0ZW5kIHRvIGJlIGJ1c3ksICgyKSB0aGVyZSBpcyBubyBzaG9ydGFnZQorb2YgcGVvcGxlIHdpdGggZ3JhbmQgcGxhbnMgYW5kIGxpdHRsZSBjb2RlIChvciBldmVuIHByb3NwZWN0IG9mIGNvZGUpIHRvCitiYWNrIHRoZW0gdXAsIGFuZCAoMykgbm9ib2R5IGlzIG9ibGlnYXRlZCB0byByZXZpZXcgb3IgY29tbWVudCBvbiBpZGVhcworcG9zdGVkIGJ5IG90aGVycy4gIElmIGEgcmVxdWVzdC1mb3ItY29tbWVudHMgcG9zdGluZyB5aWVsZHMgbGl0dGxlIGluIHRoZQord2F5IG9mIGNvbW1lbnRzLCBkbyBub3QgYXNzdW1lIHRoYXQgaXQgbWVhbnMgdGhlcmUgaXMgbm8gaW50ZXJlc3QgaW4gdGhlCitwcm9qZWN0LiAgVW5mb3J0dW5hdGVseSwgeW91IGFsc28gY2Fubm90IGFzc3VtZSB0aGF0IHRoZXJlIGFyZSBubyBwcm9ibGVtcword2l0aCB5b3VyIGlkZWEuICBUaGUgYmVzdCB0aGluZyB0byBkbyBpbiB0aGlzIHNpdHVhdGlvbiBpcyB0byBwcm9jZWVkLAora2VlcGluZyB0aGUgY29tbXVuaXR5IGluZm9ybWVkIGFzIHlvdSBnby4KKworCiszLjU6IEdFVFRJTkcgT0ZGSUNJQUwgQlVZLUlOCisKK0lmIHlvdXIgd29yayBpcyBiZWluZyBkb25lIGluIGEgY29ycG9yYXRlIGVudmlyb25tZW50IC0gYXMgbW9zdCBMaW51eAora2VybmVsIHdvcmsgaXMgLSB5b3UgbXVzdCwgb2J2aW91c2x5LCBoYXZlIHBlcm1pc3Npb24gZnJvbSBzdWl0YWJseQorZW1wb3dlcmVkIG1hbmFnZXJzIGJlZm9yZSB5b3UgY2FuIHBvc3QgeW91ciBjb21wYW55J3MgcGxhbnMgb3IgY29kZSB0byBhCitwdWJsaWMgbWFpbGluZyBsaXN0LiAgVGhlIHBvc3Rpbmcgb2YgY29kZSB3aGljaCBoYXMgbm90IGJlZW4gY2xlYXJlZCBmb3IKK3JlbGVhc2UgdW5kZXIgYSBHUEwtY29tcGF0aWJsZSBsaWNlbnNlIGNhbiBiZSBlc3BlY2lhbGx5IHByb2JsZW1hdGljOyB0aGUKK3Nvb25lciB0aGF0IGEgY29tcGFueSdzIG1hbmFnZW1lbnQgYW5kIGxlZ2FsIHN0YWZmIGNhbiBhZ3JlZSBvbiB0aGUgcG9zdGluZworb2YgYSBrZXJuZWwgZGV2ZWxvcG1lbnQgcHJvamVjdCwgdGhlIGJldHRlciBvZmYgZXZlcnlib2R5IGludm9sdmVkIHdpbGwgYmUuCisKK1NvbWUgcmVhZGVycyBtYXkgYmUgdGhpbmtpbmcgYXQgdGhpcyBwb2ludCB0aGF0IHRoZWlyIGtlcm5lbCB3b3JrIGlzCitpbnRlbmRlZCB0byBzdXBwb3J0IGEgcHJvZHVjdCB3aGljaCBkb2VzIG5vdCB5ZXQgaGF2ZSBhbiBvZmZpY2lhbGx5CithY2tub3dsZWRnZWQgZXhpc3RlbmNlLiAgUmV2ZWFsaW5nIHRoZWlyIGVtcGxveWVyJ3MgcGxhbnMgb24gYSBwdWJsaWMKK21haWxpbmcgbGlzdCBtYXkgbm90IGJlIGEgdmlhYmxlIG9wdGlvbi4gIEluIGNhc2VzIGxpa2UgdGhpcywgaXQgaXMgd29ydGgKK2NvbnNpZGVyaW5nIHdoZXRoZXIgdGhlIHNlY3JlY3kgaXMgcmVhbGx5IG5lY2Vzc2FyeTsgdGhlcmUgaXMgb2Z0ZW4gbm8gcmVhbAorbmVlZCB0byBrZWVwIGRldmVsb3BtZW50IHBsYW5zIGJlaGluZCBjbG9zZWQgZG9vcnMuCisKK1RoYXQgc2FpZCwgdGhlcmUgYXJlIGFsc28gY2FzZXMgd2hlcmUgYSBjb21wYW55IGxlZ2l0aW1hdGVseSBjYW5ub3QKK2Rpc2Nsb3NlIGl0cyBwbGFucyBlYXJseSBpbiB0aGUgZGV2ZWxvcG1lbnQgcHJvY2Vzcy4gIENvbXBhbmllcyB3aXRoCitleHBlcmllbmNlZCBrZXJuZWwgZGV2ZWxvcGVycyBtYXkgY2hvb3NlIHRvIHByb2NlZWQgaW4gYW4gb3Blbi1sb29wIG1hbm5lcgorb24gdGhlIGFzc3VtcHRpb24gdGhhdCB0aGV5IHdpbGwgYmUgYWJsZSB0byBhdm9pZCBzZXJpb3VzIGludGVncmF0aW9uCitwcm9ibGVtcyBsYXRlci4gIEZvciBjb21wYW5pZXMgd2l0aG91dCB0aGF0IHNvcnQgb2YgaW4taG91c2UgZXhwZXJ0aXNlLCB0aGUKK2Jlc3Qgb3B0aW9uIGlzIG9mdGVuIHRvIGhpcmUgYW4gb3V0c2lkZSBkZXZlbG9wZXIgdG8gcmV2aWV3IHRoZSBwbGFucyB1bmRlcgorYSBub24tZGlzY2xvc3VyZSBhZ3JlZW1lbnQuICBUaGUgTGludXggRm91bmRhdGlvbiBvcGVyYXRlcyBhbiBOREEgcHJvZ3JhbQorZGVzaWduZWQgdG8gaGVscCB3aXRoIHRoaXMgc29ydCBvZiBzaXR1YXRpb247IG1vcmUgaW5mb3JtYXRpb24gY2FuIGJlIGZvdW5kCithdDoKKworICAgIGh0dHA6Ly93d3cubGludXhmb3VuZGF0aW9uLm9yZy9lbi9OREFfcHJvZ3JhbQorCitUaGlzIGtpbmQgb2YgcmV2aWV3IGlzIG9mdGVuIGVub3VnaCB0byBhdm9pZCBzZXJpb3VzIHByb2JsZW1zIGxhdGVyIG9uCit3aXRob3V0IHJlcXVpcmluZyBwdWJsaWMgZGlzY2xvc3VyZSBvZiB0aGUgcHJvamVjdC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2ZWxvcG1lbnQtcHJvY2Vzcy80LkNvZGluZyBiL0RvY3VtZW50YXRpb24vZGV2ZWxvcG1lbnQtcHJvY2Vzcy80LkNvZGluZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMTRhY2E4Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZlbG9wbWVudC1wcm9jZXNzLzQuQ29kaW5nCkBAIC0wLDAgKzEsMzg0IEBACis0OiBHRVRUSU5HIFRIRSBDT0RFIFJJR0hUCisKK1doaWxlIHRoZXJlIGlzIG11Y2ggdG8gYmUgc2FpZCBmb3IgYSBzb2xpZCBhbmQgY29tbXVuaXR5LW9yaWVudGVkIGRlc2lnbgorcHJvY2VzcywgdGhlIHByb29mIG9mIGFueSBrZXJuZWwgZGV2ZWxvcG1lbnQgcHJvamVjdCBpcyBpbiB0aGUgcmVzdWx0aW5nCitjb2RlLiAgSXQgaXMgdGhlIGNvZGUgd2hpY2ggd2lsbCBiZSBleGFtaW5lZCBieSBvdGhlciBkZXZlbG9wZXJzIGFuZCBtZXJnZWQKKyhvciBub3QpIGludG8gdGhlIG1haW5saW5lIHRyZWUuICBTbyBpdCBpcyB0aGUgcXVhbGl0eSBvZiB0aGlzIGNvZGUgd2hpY2gKK3dpbGwgZGV0ZXJtaW5lIHRoZSB1bHRpbWF0ZSBzdWNjZXNzIG9mIHRoZSBwcm9qZWN0LgorCitUaGlzIHNlY3Rpb24gd2lsbCBleGFtaW5lIHRoZSBjb2RpbmcgcHJvY2Vzcy4gIFdlJ2xsIHN0YXJ0IHdpdGggYSBsb29rIGF0IGEKK251bWJlciBvZiB3YXlzIGluIHdoaWNoIGtlcm5lbCBkZXZlbG9wZXJzIGNhbiBnbyB3cm9uZy4gIFRoZW4gdGhlIGZvY3VzCit3aWxsIHNoaWZ0IHRvd2FyZCBkb2luZyB0aGluZ3MgcmlnaHQgYW5kIHRoZSB0b29scyB3aGljaCBjYW4gaGVscCBpbiB0aGF0CitxdWVzdC4KKworCis0LjE6IFBJVEZBTExTCisKKyogQ29kaW5nIHN0eWxlCisKK1RoZSBrZXJuZWwgaGFzIGxvbmcgaGFkIGEgc3RhbmRhcmQgY29kaW5nIHN0eWxlLCBkZXNjcmliZWQgaW4KK0RvY3VtZW50YXRpb24vQ29kaW5nU3R5bGUuICBGb3IgbXVjaCBvZiB0aGF0IHRpbWUsIHRoZSBwb2xpY2llcyBkZXNjcmliZWQKK2luIHRoYXQgZmlsZSB3ZXJlIHRha2VuIGFzIGJlaW5nLCBhdCBtb3N0LCBhZHZpc29yeS4gIEFzIGEgcmVzdWx0LCB0aGVyZSBpcworYSBzdWJzdGFudGlhbCBhbW91bnQgb2YgY29kZSBpbiB0aGUga2VybmVsIHdoaWNoIGRvZXMgbm90IG1lZXQgdGhlIGNvZGluZworc3R5bGUgZ3VpZGVsaW5lcy4gIFRoZSBwcmVzZW5jZSBvZiB0aGF0IGNvZGUgbGVhZHMgdG8gdHdvIGluZGVwZW5kZW50CitoYXphcmRzIGZvciBrZXJuZWwgZGV2ZWxvcGVycy4KKworVGhlIGZpcnN0IG9mIHRoZXNlIGlzIHRvIGJlbGlldmUgdGhhdCB0aGUga2VybmVsIGNvZGluZyBzdGFuZGFyZHMgZG8gbm90CittYXR0ZXIgYW5kIGFyZSBub3QgZW5mb3JjZWQuICBUaGUgdHJ1dGggb2YgdGhlIG1hdHRlciBpcyB0aGF0IGFkZGluZyBuZXcKK2NvZGUgdG8gdGhlIGtlcm5lbCBpcyB2ZXJ5IGRpZmZpY3VsdCBpZiB0aGF0IGNvZGUgaXMgbm90IGNvZGVkIGFjY29yZGluZyB0bwordGhlIHN0YW5kYXJkOyBtYW55IGRldmVsb3BlcnMgd2lsbCByZXF1ZXN0IHRoYXQgdGhlIGNvZGUgYmUgcmVmb3JtYXR0ZWQKK2JlZm9yZSB0aGV5IHdpbGwgZXZlbiByZXZpZXcgaXQuICBBIGNvZGUgYmFzZSBhcyBsYXJnZSBhcyB0aGUga2VybmVsCityZXF1aXJlcyBzb21lIHVuaWZvcm1pdHkgb2YgY29kZSB0byBtYWtlIGl0IHBvc3NpYmxlIGZvciBkZXZlbG9wZXJzIHRvCitxdWlja2x5IHVuZGVyc3RhbmQgYW55IHBhcnQgb2YgaXQuICBTbyB0aGVyZSBpcyBubyBsb25nZXIgcm9vbSBmb3IKK3N0cmFuZ2VseS1mb3JtYXR0ZWQgY29kZS4KKworT2NjYXNpb25hbGx5LCB0aGUga2VybmVsJ3MgY29kaW5nIHN0eWxlIHdpbGwgcnVuIGludG8gY29uZmxpY3Qgd2l0aCBhbgorZW1wbG95ZXIncyBtYW5kYXRlZCBzdHlsZS4gIEluIHN1Y2ggY2FzZXMsIHRoZSBrZXJuZWwncyBzdHlsZSB3aWxsIGhhdmUgdG8KK3dpbiBiZWZvcmUgdGhlIGNvZGUgY2FuIGJlIG1lcmdlZC4gIFB1dHRpbmcgY29kZSBpbnRvIHRoZSBrZXJuZWwgbWVhbnMKK2dpdmluZyB1cCBhIGRlZ3JlZSBvZiBjb250cm9sIGluIGEgbnVtYmVyIG9mIHdheXMgLSBpbmNsdWRpbmcgY29udHJvbCBvdmVyCitob3cgdGhlIGNvZGUgaXMgZm9ybWF0dGVkLgorCitUaGUgb3RoZXIgdHJhcCBpcyB0byBhc3N1bWUgdGhhdCBjb2RlIHdoaWNoIGlzIGFscmVhZHkgaW4gdGhlIGtlcm5lbCBpcwordXJnZW50bHkgaW4gbmVlZCBvZiBjb2Rpbmcgc3R5bGUgZml4ZXMuICBEZXZlbG9wZXJzIG1heSBzdGFydCB0byBnZW5lcmF0ZQorcmVmb3JtYXR0aW5nIHBhdGNoZXMgYXMgYSB3YXkgb2YgZ2FpbmluZyBmYW1pbGlhcml0eSB3aXRoIHRoZSBwcm9jZXNzLCBvcgorYXMgYSB3YXkgb2YgZ2V0dGluZyB0aGVpciBuYW1lIGludG8gdGhlIGtlcm5lbCBjaGFuZ2Vsb2dzIC0gb3IgYm90aC4gIEJ1dAorcHVyZSBjb2Rpbmcgc3R5bGUgZml4ZXMgYXJlIHNlZW4gYXMgbm9pc2UgYnkgdGhlIGRldmVsb3BtZW50IGNvbW11bml0eTsKK3RoZXkgdGVuZCB0byBnZXQgYSBjaGlsbHkgcmVjZXB0aW9uLiAgU28gdGhpcyB0eXBlIG9mIHBhdGNoIGlzIGJlc3QKK2F2b2lkZWQuICBJdCBpcyBuYXR1cmFsIHRvIGZpeCB0aGUgc3R5bGUgb2YgYSBwaWVjZSBvZiBjb2RlIHdoaWxlIHdvcmtpbmcKK29uIGl0IGZvciBvdGhlciByZWFzb25zLCBidXQgY29kaW5nIHN0eWxlIGNoYW5nZXMgc2hvdWxkIG5vdCBiZSBtYWRlIGZvcgordGhlaXIgb3duIHNha2UuCisKK1RoZSBjb2Rpbmcgc3R5bGUgZG9jdW1lbnQgYWxzbyBzaG91bGQgbm90IGJlIHJlYWQgYXMgYW4gYWJzb2x1dGUgbGF3IHdoaWNoCitjYW4gbmV2ZXIgYmUgdHJhbnNncmVzc2VkLiAgSWYgdGhlcmUgaXMgYSBnb29kIHJlYXNvbiB0byBnbyBhZ2FpbnN0IHRoZQorc3R5bGUgKGEgbGluZSB3aGljaCBiZWNvbWVzIGZhciBsZXNzIHJlYWRhYmxlIGlmIHNwbGl0IHRvIGZpdCB3aXRoaW4gdGhlCis4MC1jb2x1bW4gbGltaXQsIGZvciBleGFtcGxlKSwganVzdCBkbyBpdC4KKworCisqIEFic3RyYWN0aW9uIGxheWVycworCitDb21wdXRlciBTY2llbmNlIHByb2Zlc3NvcnMgdGVhY2ggc3R1ZGVudHMgdG8gbWFrZSBleHRlbnNpdmUgdXNlIG9mCithYnN0cmFjdGlvbiBsYXllcnMgaW4gdGhlIG5hbWUgb2YgZmxleGliaWxpdHkgYW5kIGluZm9ybWF0aW9uIGhpZGluZy4KK0NlcnRhaW5seSB0aGUga2VybmVsIG1ha2VzIGV4dGVuc2l2ZSB1c2Ugb2YgYWJzdHJhY3Rpb247IG5vIHByb2plY3QKK2ludm9sdmluZyBzZXZlcmFsIG1pbGxpb24gbGluZXMgb2YgY29kZSBjb3VsZCBkbyBvdGhlcndpc2UgYW5kIHN1cnZpdmUuCitCdXQgZXhwZXJpZW5jZSBoYXMgc2hvd24gdGhhdCBleGNlc3NpdmUgb3IgcHJlbWF0dXJlIGFic3RyYWN0aW9uIGNhbiBiZQoranVzdCBhcyBoYXJtZnVsIGFzIHByZW1hdHVyZSBvcHRpbWl6YXRpb24uICBBYnN0cmFjdGlvbiBzaG91bGQgYmUgdXNlZCB0bwordGhlIGxldmVsIHJlcXVpcmVkIGFuZCBubyBmdXJ0aGVyLgorCitBdCBhIHNpbXBsZSBsZXZlbCwgY29uc2lkZXIgYSBmdW5jdGlvbiB3aGljaCBoYXMgYW4gYXJndW1lbnQgd2hpY2ggaXMKK2Fsd2F5cyBwYXNzZWQgYXMgemVybyBieSBhbGwgY2FsbGVycy4gIE9uZSBjb3VsZCByZXRhaW4gdGhhdCBhcmd1bWVudCBqdXN0CitpbiBjYXNlIHNvbWVib2R5IGV2ZW50dWFsbHkgbmVlZHMgdG8gdXNlIHRoZSBleHRyYSBmbGV4aWJpbGl0eSB0aGF0IGl0Citwcm92aWRlcy4gIEJ5IHRoYXQgdGltZSwgdGhvdWdoLCBjaGFuY2VzIGFyZSBnb29kIHRoYXQgdGhlIGNvZGUgd2hpY2gKK2ltcGxlbWVudHMgdGhpcyBleHRyYSBhcmd1bWVudCBoYXMgYmVlbiBicm9rZW4gaW4gc29tZSBzdWJ0bGUgd2F5IHdoaWNoIHdhcworbmV2ZXIgbm90aWNlZCAtIGJlY2F1c2UgaXQgaGFzIG5ldmVyIGJlZW4gdXNlZC4gIE9yLCB3aGVuIHRoZSBuZWVkIGZvcgorZXh0cmEgZmxleGliaWxpdHkgYXJpc2VzLCBpdCBkb2VzIG5vdCBkbyBzbyBpbiBhIHdheSB3aGljaCBtYXRjaGVzIHRoZQorcHJvZ3JhbW1lcidzIGVhcmx5IGV4cGVjdGF0aW9uLiAgS2VybmVsIGRldmVsb3BlcnMgd2lsbCByb3V0aW5lbHkgc3VibWl0CitwYXRjaGVzIHRvIHJlbW92ZSB1bnVzZWQgYXJndW1lbnRzOyB0aGV5IHNob3VsZCwgaW4gZ2VuZXJhbCwgbm90IGJlIGFkZGVkCitpbiB0aGUgZmlyc3QgcGxhY2UuCisKK0Fic3RyYWN0aW9uIGxheWVycyB3aGljaCBoaWRlIGFjY2VzcyB0byBoYXJkd2FyZSAtIG9mdGVuIHRvIGFsbG93IHRoZSBidWxrCitvZiBhIGRyaXZlciB0byBiZSB1c2VkIHdpdGggbXVsdGlwbGUgb3BlcmF0aW5nIHN5c3RlbXMgLSBhcmUgZXNwZWNpYWxseQorZnJvd25lZCB1cG9uLiAgU3VjaCBsYXllcnMgb2JzY3VyZSB0aGUgY29kZSBhbmQgbWF5IGltcG9zZSBhIHBlcmZvcm1hbmNlCitwZW5hbHR5OyB0aGV5IGRvIG5vdCBiZWxvbmcgaW4gdGhlIExpbnV4IGtlcm5lbC4KKworT24gdGhlIG90aGVyIGhhbmQsIGlmIHlvdSBmaW5kIHlvdXJzZWxmIGNvcHlpbmcgc2lnbmlmaWNhbnQgYW1vdW50cyBvZiBjb2RlCitmcm9tIGFub3RoZXIga2VybmVsIHN1YnN5c3RlbSwgaXQgaXMgdGltZSB0byBhc2sgd2hldGhlciBpdCB3b3VsZCwgaW4gZmFjdCwKK21ha2Ugc2Vuc2UgdG8gcHVsbCBvdXQgc29tZSBvZiB0aGF0IGNvZGUgaW50byBhIHNlcGFyYXRlIGxpYnJhcnkgb3IgdG8KK2ltcGxlbWVudCB0aGF0IGZ1bmN0aW9uYWxpdHkgYXQgYSBoaWdoZXIgbGV2ZWwuICBUaGVyZSBpcyBubyB2YWx1ZSBpbgorcmVwbGljYXRpbmcgdGhlIHNhbWUgY29kZSB0aHJvdWdob3V0IHRoZSBrZXJuZWwuCisKKworKiAjaWZkZWYgYW5kIHByZXByb2Nlc3NvciB1c2UgaW4gZ2VuZXJhbAorCitUaGUgQyBwcmVwcm9jZXNzb3Igc2VlbXMgdG8gcHJlc2VudCBhIHBvd2VyZnVsIHRlbXB0YXRpb24gdG8gc29tZSBDCitwcm9ncmFtbWVycywgd2hvIHNlZSBpdCBhcyBhIHdheSB0byBlZmZpY2llbnRseSBlbmNvZGUgYSBncmVhdCBkZWFsIG9mCitmbGV4aWJpbGl0eSBpbnRvIGEgc291cmNlIGZpbGUuICBCdXQgdGhlIHByZXByb2Nlc3NvciBpcyBub3QgQywgYW5kIGhlYXZ5Cit1c2Ugb2YgaXQgcmVzdWx0cyBpbiBjb2RlIHdoaWNoIGlzIG11Y2ggaGFyZGVyIGZvciBvdGhlcnMgdG8gcmVhZCBhbmQKK2hhcmRlciBmb3IgdGhlIGNvbXBpbGVyIHRvIGNoZWNrIGZvciBjb3JyZWN0bmVzcy4gIEhlYXZ5IHByZXByb2Nlc3NvciB1c2UKK2lzIGFsbW9zdCBhbHdheXMgYSBzaWduIG9mIGNvZGUgd2hpY2ggbmVlZHMgc29tZSBjbGVhbnVwIHdvcmsuCisKK0NvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIHdpdGggI2lmZGVmIGlzLCBpbmRlZWQsIGEgcG93ZXJmdWwgZmVhdHVyZSwgYW5kIGl0CitpcyB1c2VkIHdpdGhpbiB0aGUga2VybmVsLiAgQnV0IHRoZXJlIGlzIGxpdHRsZSBkZXNpcmUgdG8gc2VlIGNvZGUgd2hpY2ggaXMKK3Nwcmlua2xlZCBsaWJlcmFsbHkgd2l0aCAjaWZkZWYgYmxvY2tzLiAgQXMgYSBnZW5lcmFsIHJ1bGUsICNpZmRlZiB1c2UKK3Nob3VsZCBiZSBjb25maW5lZCB0byBoZWFkZXIgZmlsZXMgd2hlbmV2ZXIgcG9zc2libGUuCitDb25kaXRpb25hbGx5LWNvbXBpbGVkIGNvZGUgY2FuIGJlIGNvbmZpbmVkIHRvIGZ1bmN0aW9ucyB3aGljaCwgaWYgdGhlIGNvZGUKK2lzIG5vdCB0byBiZSBwcmVzZW50LCBzaW1wbHkgYmVjb21lIGVtcHR5LiAgVGhlIGNvbXBpbGVyIHdpbGwgdGhlbiBxdWlldGx5CitvcHRpbWl6ZSBvdXQgdGhlIGNhbGwgdG8gdGhlIGVtcHR5IGZ1bmN0aW9uLiAgVGhlIHJlc3VsdCBpcyBmYXIgY2xlYW5lcgorY29kZSB3aGljaCBpcyBlYXNpZXIgdG8gZm9sbG93LgorCitDIHByZXByb2Nlc3NvciBtYWNyb3MgcHJlc2VudCBhIG51bWJlciBvZiBoYXphcmRzLCBpbmNsdWRpbmcgcG9zc2libGUKK211bHRpcGxlIGV2YWx1YXRpb24gb2YgZXhwcmVzc2lvbnMgd2l0aCBzaWRlIGVmZmVjdHMgYW5kIG5vIHR5cGUgc2FmZXR5LgorSWYgeW91IGFyZSB0ZW1wdGVkIHRvIGRlZmluZSBhIG1hY3JvLCBjb25zaWRlciBjcmVhdGluZyBhbiBpbmxpbmUgZnVuY3Rpb24KK2luc3RlYWQuICBUaGUgY29kZSB3aGljaCByZXN1bHRzIHdpbGwgYmUgdGhlIHNhbWUsIGJ1dCBpbmxpbmUgZnVuY3Rpb25zIGFyZQorZWFzaWVyIHRvIHJlYWQsIGRvIG5vdCBldmFsdWF0ZSB0aGVpciBhcmd1bWVudHMgbXVsdGlwbGUgdGltZXMsIGFuZCBhbGxvdwordGhlIGNvbXBpbGVyIHRvIHBlcmZvcm0gdHlwZSBjaGVja2luZyBvbiB0aGUgYXJndW1lbnRzIGFuZCByZXR1cm4gdmFsdWUuCisKKworKiBJbmxpbmUgZnVuY3Rpb25zCisKK0lubGluZSBmdW5jdGlvbnMgcHJlc2VudCBhIGhhemFyZCBvZiB0aGVpciBvd24sIHRob3VnaC4gIFByb2dyYW1tZXJzIGNhbgorYmVjb21lIGVuYW1vcmVkIG9mIHRoZSBwZXJjZWl2ZWQgZWZmaWNpZW5jeSBpbmhlcmVudCBpbiBhdm9pZGluZyBhIGZ1bmN0aW9uCitjYWxsIGFuZCBmaWxsIGEgc291cmNlIGZpbGUgd2l0aCBpbmxpbmUgZnVuY3Rpb25zLiAgVGhvc2UgZnVuY3Rpb25zLAoraG93ZXZlciwgY2FuIGFjdHVhbGx5IHJlZHVjZSBwZXJmb3JtYW5jZS4gIFNpbmNlIHRoZWlyIGNvZGUgaXMgcmVwbGljYXRlZAorYXQgZWFjaCBjYWxsIHNpdGUsIHRoZXkgZW5kIHVwIGJsb2F0aW5nIHRoZSBzaXplIG9mIHRoZSBjb21waWxlZCBrZXJuZWwuCitUaGF0LCBpbiB0dXJuLCBjcmVhdGVzIHByZXNzdXJlIG9uIHRoZSBwcm9jZXNzb3IncyBtZW1vcnkgY2FjaGVzLCB3aGljaCBjYW4KK3Nsb3cgZXhlY3V0aW9uIGRyYW1hdGljYWxseS4gIElubGluZSBmdW5jdGlvbnMsIGFzIGEgcnVsZSwgc2hvdWxkIGJlIHF1aXRlCitzbWFsbCBhbmQgcmVsYXRpdmVseSByYXJlLiAgVGhlIGNvc3Qgb2YgYSBmdW5jdGlvbiBjYWxsLCBhZnRlciBhbGwsIGlzIG5vdAordGhhdCBoaWdoOyB0aGUgY3JlYXRpb24gb2YgbGFyZ2UgbnVtYmVycyBvZiBpbmxpbmUgZnVuY3Rpb25zIGlzIGEgY2xhc3NpYworZXhhbXBsZSBvZiBwcmVtYXR1cmUgb3B0aW1pemF0aW9uLgorCitJbiBnZW5lcmFsLCBrZXJuZWwgcHJvZ3JhbW1lcnMgaWdub3JlIGNhY2hlIGVmZmVjdHMgYXQgdGhlaXIgcGVyaWwuICBUaGUKK2NsYXNzaWMgdGltZS9zcGFjZSB0cmFkZW9mZiB0YXVnaHQgaW4gYmVnaW5uaW5nIGRhdGEgc3RydWN0dXJlcyBjbGFzc2VzCitvZnRlbiBkb2VzIG5vdCBhcHBseSB0byBjb250ZW1wb3JhcnkgaGFyZHdhcmUuICBTcGFjZSAqaXMqIHRpbWUsIGluIHRoYXQgYQorbGFyZ2VyIHByb2dyYW0gd2lsbCBydW4gc2xvd2VyIHRoYW4gb25lIHdoaWNoIGlzIG1vcmUgY29tcGFjdC4KKworCisqIExvY2tpbmcKKworSW4gTWF5LCAyMDA2LCB0aGUgIkRldmljZXNjYXBlIiBuZXR3b3JraW5nIHN0YWNrIHdhcywgd2l0aCBncmVhdAorZmFuZmFyZSwgcmVsZWFzZWQgdW5kZXIgdGhlIEdQTCBhbmQgbWFkZSBhdmFpbGFibGUgZm9yIGluY2x1c2lvbiBpbiB0aGUKK21haW5saW5lIGtlcm5lbC4gIFRoaXMgZG9uYXRpb24gd2FzIHdlbGNvbWUgbmV3czsgc3VwcG9ydCBmb3Igd2lyZWxlc3MKK25ldHdvcmtpbmcgaW4gTGludXggd2FzIGNvbnNpZGVyZWQgc3Vic3RhbmRhcmQgYXQgYmVzdCwgYW5kIHRoZSBEZXZpY2VzY2FwZQorc3RhY2sgb2ZmZXJlZCB0aGUgcHJvbWlzZSBvZiBmaXhpbmcgdGhhdCBzaXR1YXRpb24uICBZZXQsIHRoaXMgY29kZSBkaWQgbm90CithY3R1YWxseSBtYWtlIGl0IGludG8gdGhlIG1haW5saW5lIHVudGlsIEp1bmUsIDIwMDcgKDIuNi4yMikuICBXaGF0CitoYXBwZW5lZD8KKworVGhpcyBjb2RlIHNob3dlZCBhIG51bWJlciBvZiBzaWducyBvZiBoYXZpbmcgYmVlbiBkZXZlbG9wZWQgYmVoaW5kCitjb3Jwb3JhdGUgZG9vcnMuICBCdXQgb25lIGxhcmdlIHByb2JsZW0gaW4gcGFydGljdWxhciB3YXMgdGhhdCBpdCB3YXMgbm90CitkZXNpZ25lZCB0byB3b3JrIG9uIG11bHRpcHJvY2Vzc29yIHN5c3RlbXMuICBCZWZvcmUgdGhpcyBuZXR3b3JraW5nIHN0YWNrCisobm93IGNhbGxlZCBtYWM4MDIxMSkgY291bGQgYmUgbWVyZ2VkLCBhIGxvY2tpbmcgc2NoZW1lIG5lZWRlZCB0byBiZQorcmV0cm9maXR0ZWQgb250byBpdC4gIAorCitPbmNlIHVwb24gYSB0aW1lLCBMaW51eCBrZXJuZWwgY29kZSBjb3VsZCBiZSBkZXZlbG9wZWQgd2l0aG91dCB0aGlua2luZworYWJvdXQgdGhlIGNvbmN1cnJlbmN5IGlzc3VlcyBwcmVzZW50ZWQgYnkgbXVsdGlwcm9jZXNzb3Igc3lzdGVtcy4gIE5vdywKK2hvd2V2ZXIsIHRoaXMgZG9jdW1lbnQgaXMgYmVpbmcgd3JpdHRlbiBvbiBhIGR1YWwtY29yZSBsYXB0b3AuICBFdmVuIG9uCitzaW5nbGUtcHJvY2Vzc29yIHN5c3RlbXMsIHdvcmsgYmVpbmcgZG9uZSB0byBpbXByb3ZlIHJlc3BvbnNpdmVuZXNzIHdpbGwKK3JhaXNlIHRoZSBsZXZlbCBvZiBjb25jdXJyZW5jeSB3aXRoaW4gdGhlIGtlcm5lbC4gIFRoZSBkYXlzIHdoZW4ga2VybmVsCitjb2RlIGNvdWxkIGJlIHdyaXR0ZW4gd2l0aG91dCB0aGlua2luZyBhYm91dCBsb2NraW5nIGFyZSBsb25nIHBhc3QuCisKK0FueSByZXNvdXJjZSAoZGF0YSBzdHJ1Y3R1cmVzLCBoYXJkd2FyZSByZWdpc3RlcnMsIGV0Yy4pIHdoaWNoIGNvdWxkIGJlCithY2Nlc3NlZCBjb25jdXJyZW50bHkgYnkgbW9yZSB0aGFuIG9uZSB0aHJlYWQgbXVzdCBiZSBwcm90ZWN0ZWQgYnkgYSBsb2NrLgorTmV3IGNvZGUgc2hvdWxkIGJlIHdyaXR0ZW4gd2l0aCB0aGlzIHJlcXVpcmVtZW50IGluIG1pbmQ7IHJldHJvZml0dGluZworbG9ja2luZyBhZnRlciB0aGUgZmFjdCBpcyBhIHJhdGhlciBtb3JlIGRpZmZpY3VsdCB0YXNrLiAgS2VybmVsIGRldmVsb3BlcnMKK3Nob3VsZCB0YWtlIHRoZSB0aW1lIHRvIHVuZGVyc3RhbmQgdGhlIGF2YWlsYWJsZSBsb2NraW5nIHByaW1pdGl2ZXMgd2VsbAorZW5vdWdoIHRvIHBpY2sgdGhlIHJpZ2h0IHRvb2wgZm9yIHRoZSBqb2IuICBDb2RlIHdoaWNoIHNob3dzIGEgbGFjayBvZgorYXR0ZW50aW9uIHRvIGNvbmN1cnJlbmN5IHdpbGwgaGF2ZSBhIGRpZmZpY3VsdCBwYXRoIGludG8gdGhlIG1haW5saW5lLgorCisKKyogUmVncmVzc2lvbnMKKworT25lIGZpbmFsIGhhemFyZCB3b3J0aCBtZW50aW9uaW5nIGlzIHRoaXM6IGl0IGNhbiBiZSB0ZW1wdGluZyB0byBtYWtlIGEKK2NoYW5nZSAod2hpY2ggbWF5IGJyaW5nIGJpZyBpbXByb3ZlbWVudHMpIHdoaWNoIGNhdXNlcyBzb21ldGhpbmcgdG8gYnJlYWsKK2ZvciBleGlzdGluZyB1c2Vycy4gIFRoaXMga2luZCBvZiBjaGFuZ2UgaXMgY2FsbGVkIGEgInJlZ3Jlc3Npb24sIiBhbmQKK3JlZ3Jlc3Npb25zIGhhdmUgYmVjb21lIG1vc3QgdW53ZWxjb21lIGluIHRoZSBtYWlubGluZSBrZXJuZWwuICBXaXRoIGZldworZXhjZXB0aW9ucywgY2hhbmdlcyB3aGljaCBjYXVzZSByZWdyZXNzaW9ucyB3aWxsIGJlIGJhY2tlZCBvdXQgaWYgdGhlCityZWdyZXNzaW9uIGNhbm5vdCBiZSBmaXhlZCBpbiBhIHRpbWVseSBtYW5uZXIuICBGYXIgYmV0dGVyIHRvIGF2b2lkIHRoZQorcmVncmVzc2lvbiBpbiB0aGUgZmlyc3QgcGxhY2UuCisKK0l0IGlzIG9mdGVuIGFyZ3VlZCB0aGF0IGEgcmVncmVzc2lvbiBjYW4gYmUganVzdGlmaWVkIGlmIGl0IGNhdXNlcyB0aGluZ3MKK3RvIHdvcmsgZm9yIG1vcmUgcGVvcGxlIHRoYW4gaXQgY3JlYXRlcyBwcm9ibGVtcyBmb3IuICBXaHkgbm90IG1ha2UgYQorY2hhbmdlIGlmIGl0IGJyaW5ncyBuZXcgZnVuY3Rpb25hbGl0eSB0byB0ZW4gc3lzdGVtcyBmb3IgZWFjaCBvbmUgaXQKK2JyZWFrcz8gIFRoZSBiZXN0IGFuc3dlciB0byB0aGlzIHF1ZXN0aW9uIHdhcyBleHByZXNzZWQgYnkgTGludXMgaW4gSnVseSwKKzIwMDc6CisKKwlTbyB3ZSBkb24ndCBmaXggYnVncyBieSBpbnRyb2R1Y2luZyBuZXcgcHJvYmxlbXMuICBUaGF0IHdheSBsaWVzCisJbWFkbmVzcywgYW5kIG5vYm9keSBldmVyIGtub3dzIGlmIHlvdSBhY3R1YWxseSBtYWtlIGFueSByZWFsCisJcHJvZ3Jlc3MgYXQgYWxsLiBJcyBpdCB0d28gc3RlcHMgZm9yd2FyZHMsIG9uZSBzdGVwIGJhY2ssIG9yIG9uZQorCXN0ZXAgZm9yd2FyZCBhbmQgdHdvIHN0ZXBzIGJhY2s/CisKKyhodHRwOi8vbHduLm5ldC9BcnRpY2xlcy8yNDM0NjAvKS4KKworQW4gZXNwZWNpYWxseSB1bndlbGNvbWUgdHlwZSBvZiByZWdyZXNzaW9uIGlzIGFueSBzb3J0IG9mIGNoYW5nZSB0byB0aGUKK3VzZXItc3BhY2UgQUJJLiAgT25jZSBhbiBpbnRlcmZhY2UgaGFzIGJlZW4gZXhwb3J0ZWQgdG8gdXNlciBzcGFjZSwgaXQgbXVzdAorYmUgc3VwcG9ydGVkIGluZGVmaW5pdGVseS4gIFRoaXMgZmFjdCBtYWtlcyB0aGUgY3JlYXRpb24gb2YgdXNlci1zcGFjZQoraW50ZXJmYWNlcyBwYXJ0aWN1bGFybHkgY2hhbGxlbmdpbmc6IHNpbmNlIHRoZXkgY2Fubm90IGJlIGNoYW5nZWQgaW4KK2luY29tcGF0aWJsZSB3YXlzLCB0aGV5IG11c3QgYmUgZG9uZSByaWdodCB0aGUgZmlyc3QgdGltZS4gIEZvciB0aGlzCityZWFzb24sIGEgZ3JlYXQgZGVhbCBvZiB0aG91Z2h0LCBjbGVhciBkb2N1bWVudGF0aW9uLCBhbmQgd2lkZSByZXZpZXcgZm9yCit1c2VyLXNwYWNlIGludGVyZmFjZXMgaXMgYWx3YXlzIHJlcXVpcmVkLgorCisKKworNC4yOiBDT0RFIENIRUNLSU5HIFRPT0xTCisKK0ZvciBub3csIGF0IGxlYXN0LCB0aGUgd3JpdGluZyBvZiBlcnJvci1mcmVlIGNvZGUgcmVtYWlucyBhbiBpZGVhbCB0aGF0IGZldworb2YgdXMgY2FuIHJlYWNoLiAgV2hhdCB3ZSBjYW4gaG9wZSB0byBkbywgdGhvdWdoLCBpcyB0byBjYXRjaCBhbmQgZml4IGFzCittYW55IG9mIHRob3NlIGVycm9ycyBhcyBwb3NzaWJsZSBiZWZvcmUgb3VyIGNvZGUgZ29lcyBpbnRvIHRoZSBtYWlubGluZQora2VybmVsLiAgVG8gdGhhdCBlbmQsIHRoZSBrZXJuZWwgZGV2ZWxvcGVycyBoYXZlIHB1dCB0b2dldGhlciBhbiBpbXByZXNzaXZlCithcnJheSBvZiB0b29scyB3aGljaCBjYW4gY2F0Y2ggYSB3aWRlIHZhcmlldHkgb2Ygb2JzY3VyZSBwcm9ibGVtcyBpbiBhbgorYXV0b21hdGVkIHdheS4gIEFueSBwcm9ibGVtIGNhdWdodCBieSB0aGUgY29tcHV0ZXIgaXMgYSBwcm9ibGVtIHdoaWNoIHdpbGwKK25vdCBhZmZsaWN0IGEgdXNlciBsYXRlciBvbiwgc28gaXQgc3RhbmRzIHRvIHJlYXNvbiB0aGF0IHRoZSBhdXRvbWF0ZWQKK3Rvb2xzIHNob3VsZCBiZSB1c2VkIHdoZW5ldmVyIHBvc3NpYmxlLgorCitUaGUgZmlyc3Qgc3RlcCBpcyBzaW1wbHkgdG8gaGVlZCB0aGUgd2FybmluZ3MgcHJvZHVjZWQgYnkgdGhlIGNvbXBpbGVyLgorQ29udGVtcG9yYXJ5IHZlcnNpb25zIG9mIGdjYyBjYW4gZGV0ZWN0IChhbmQgd2FybiBhYm91dCkgYSBsYXJnZSBudW1iZXIgb2YKK3BvdGVudGlhbCBlcnJvcnMuICBRdWl0ZSBvZnRlbiwgdGhlc2Ugd2FybmluZ3MgcG9pbnQgdG8gcmVhbCBwcm9ibGVtcy4KK0NvZGUgc3VibWl0dGVkIGZvciByZXZpZXcgc2hvdWxkLCBhcyBhIHJ1bGUsIG5vdCBwcm9kdWNlIGFueSBjb21waWxlcgord2FybmluZ3MuICBXaGVuIHNpbGVuY2luZyB3YXJuaW5ncywgdGFrZSBjYXJlIHRvIHVuZGVyc3RhbmQgdGhlIHJlYWwgY2F1c2UKK2FuZCB0cnkgdG8gYXZvaWQgImZpeGVzIiB3aGljaCBtYWtlIHRoZSB3YXJuaW5nIGdvIGF3YXkgd2l0aG91dCBhZGRyZXNzaW5nCitpdHMgY2F1c2UuCisKK05vdGUgdGhhdCBub3QgYWxsIGNvbXBpbGVyIHdhcm5pbmdzIGFyZSBlbmFibGVkIGJ5IGRlZmF1bHQuICBCdWlsZCB0aGUKK2tlcm5lbCB3aXRoICJtYWtlIEVYVFJBX0NGTEFHUz0tVyIgdG8gZ2V0IHRoZSBmdWxsIHNldC4KKworVGhlIGtlcm5lbCBwcm92aWRlcyBzZXZlcmFsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB3aGljaCB0dXJuIG9uIGRlYnVnZ2luZworZmVhdHVyZXM7IG1vc3Qgb2YgdGhlc2UgYXJlIGZvdW5kIGluIHRoZSAia2VybmVsIGhhY2tpbmciIHN1Ym1lbnUuICBTZXZlcmFsCitvZiB0aGVzZSBvcHRpb25zIHNob3VsZCBiZSB0dXJuZWQgb24gZm9yIGFueSBrZXJuZWwgdXNlZCBmb3IgZGV2ZWxvcG1lbnQgb3IKK3Rlc3RpbmcgcHVycG9zZXMuICBJbiBwYXJ0aWN1bGFyLCB5b3Ugc2hvdWxkIHR1cm4gb246CisKKyAtIEVOQUJMRV9XQVJOX0RFUFJFQ0FURUQsIEVOQUJMRV9NVVNUX0NIRUNLLCBhbmQgRlJBTUVfV0FSTiB0byBnZXQgYW4KKyAgIGV4dHJhIHNldCBvZiB3YXJuaW5ncyBmb3IgcHJvYmxlbXMgbGlrZSB0aGUgdXNlIG9mIGRlcHJlY2F0ZWQgaW50ZXJmYWNlcworICAgb3IgaWdub3JpbmcgYW4gaW1wb3J0YW50IHJldHVybiB2YWx1ZSBmcm9tIGEgZnVuY3Rpb24uICBUaGUgb3V0cHV0CisgICBnZW5lcmF0ZWQgYnkgdGhlc2Ugd2FybmluZ3MgY2FuIGJlIHZlcmJvc2UsIGJ1dCBvbmUgbmVlZCBub3Qgd29ycnkgYWJvdXQKKyAgIHdhcm5pbmdzIGZyb20gb3RoZXIgcGFydHMgb2YgdGhlIGtlcm5lbC4KKworIC0gREVCVUdfT0JKRUNUUyB3aWxsIGFkZCBjb2RlIHRvIHRyYWNrIHRoZSBsaWZldGltZSBvZiB2YXJpb3VzIG9iamVjdHMKKyAgIGNyZWF0ZWQgYnkgdGhlIGtlcm5lbCBhbmQgd2FybiB3aGVuIHRoaW5ncyBhcmUgZG9uZSBvdXQgb2Ygb3JkZXIuICBJZgorICAgeW91IGFyZSBhZGRpbmcgYSBzdWJzeXN0ZW0gd2hpY2ggY3JlYXRlcyAoYW5kIGV4cG9ydHMpIGNvbXBsZXggb2JqZWN0cworICAgb2YgaXRzIG93biwgY29uc2lkZXIgYWRkaW5nIHN1cHBvcnQgZm9yIHRoZSBvYmplY3QgZGVidWdnaW5nCisgICBpbmZyYXN0cnVjdHVyZS4KKworIC0gREVCVUdfU0xBQiBjYW4gZmluZCBhIHZhcmlldHkgb2YgbWVtb3J5IGFsbG9jYXRpb24gYW5kIHVzZSBlcnJvcnM7IGl0CisgICBzaG91bGQgYmUgdXNlZCBvbiBtb3N0IGRldmVsb3BtZW50IGtlcm5lbHMuCisKKyAtIERFQlVHX1NQSU5MT0NLLCBERUJVR19TUElOTE9DS19TTEVFUCwgYW5kIERFQlVHX01VVEVYRVMgd2lsbCBmaW5kIGEKKyAgIG51bWJlciBvZiBjb21tb24gbG9ja2luZyBlcnJvcnMuCisKK1RoZXJlIGFyZSBxdWl0ZSBhIGZldyBvdGhlciBkZWJ1Z2dpbmcgb3B0aW9ucywgc29tZSBvZiB3aGljaCB3aWxsIGJlCitkaXNjdXNzZWQgYmVsb3cuICBTb21lIG9mIHRoZW0gaGF2ZSBhIHNpZ25pZmljYW50IHBlcmZvcm1hbmNlIGltcGFjdCBhbmQKK3Nob3VsZCBub3QgYmUgdXNlZCBhbGwgb2YgdGhlIHRpbWUuICBCdXQgc29tZSB0aW1lIHNwZW50IGxlYXJuaW5nIHRoZQorYXZhaWxhYmxlIG9wdGlvbnMgd2lsbCBsaWtlbHkgYmUgcGFpZCBiYWNrIG1hbnkgdGltZXMgb3ZlciBpbiBzaG9ydCBvcmRlci4gCisKK09uZSBvZiB0aGUgaGVhdmllciBkZWJ1Z2dpbmcgdG9vbHMgaXMgdGhlIGxvY2tpbmcgY2hlY2tlciwgb3IgImxvY2tkZXAuIgorVGhpcyB0b29sIHdpbGwgdHJhY2sgdGhlIGFjcXVpc2l0aW9uIGFuZCByZWxlYXNlIG9mIGV2ZXJ5IGxvY2sgKHNwaW5sb2NrIG9yCittdXRleCkgaW4gdGhlIHN5c3RlbSwgdGhlIG9yZGVyIGluIHdoaWNoIGxvY2tzIGFyZSBhY3F1aXJlZCByZWxhdGl2ZSB0bworZWFjaCBvdGhlciwgdGhlIGN1cnJlbnQgaW50ZXJydXB0IGVudmlyb25tZW50LCBhbmQgbW9yZS4gIEl0IGNhbiB0aGVuCitlbnN1cmUgdGhhdCBsb2NrcyBhcmUgYWx3YXlzIGFjcXVpcmVkIGluIHRoZSBzYW1lIG9yZGVyLCB0aGF0IHRoZSBzYW1lCitpbnRlcnJ1cHQgYXNzdW1wdGlvbnMgYXBwbHkgaW4gYWxsIHNpdHVhdGlvbnMsIGFuZCBzbyBvbi4gIEluIG90aGVyIHdvcmRzLAorbG9ja2RlcCBjYW4gZmluZCBhIG51bWJlciBvZiBzY2VuYXJpb3MgaW4gd2hpY2ggdGhlIHN5c3RlbSBjb3VsZCwgb24gcmFyZQorb2NjYXNpb24sIGRlYWRsb2NrLiAgVGhpcyBraW5kIG9mIHByb2JsZW0gY2FuIGJlIHBhaW5mdWwgKGZvciBib3RoCitkZXZlbG9wZXJzIGFuZCB1c2VycykgaW4gYSBkZXBsb3llZCBzeXN0ZW07IGxvY2tkZXAgYWxsb3dzIHRoZW0gdG8gYmUgZm91bmQKK2luIGFuIGF1dG9tYXRlZCBtYW5uZXIgYWhlYWQgb2YgdGltZS4gIENvZGUgd2l0aCBhbnkgc29ydCBvZiBub24tdHJpdmlhbAorbG9ja2luZyBzaG91bGQgYmUgcnVuIHdpdGggbG9ja2RlcCBlbmFibGVkIGJlZm9yZSBiZWluZyBzdWJtaXR0ZWQgZm9yCitpbmNsdXNpb24uIAorCitBcyBhIGRpbGlnZW50IGtlcm5lbCBwcm9ncmFtbWVyLCB5b3Ugd2lsbCwgYmV5b25kIGRvdWJ0LCBjaGVjayB0aGUgcmV0dXJuCitzdGF0dXMgb2YgYW55IG9wZXJhdGlvbiAoc3VjaCBhcyBhIG1lbW9yeSBhbGxvY2F0aW9uKSB3aGljaCBjYW4gZmFpbC4gIFRoZQorZmFjdCBvZiB0aGUgbWF0dGVyLCB0aG91Z2gsIGlzIHRoYXQgdGhlIHJlc3VsdGluZyBmYWlsdXJlIHJlY292ZXJ5IHBhdGhzCithcmUsIHByb2JhYmx5LCBjb21wbGV0ZWx5IHVudGVzdGVkLiAgVW50ZXN0ZWQgY29kZSB0ZW5kcyB0byBiZSBicm9rZW4gY29kZTsKK3lvdSBjb3VsZCBiZSBtdWNoIG1vcmUgY29uZmlkZW50IG9mIHlvdXIgY29kZSBpZiBhbGwgdGhvc2UgZXJyb3ItaGFuZGxpbmcKK3BhdGhzIGhhZCBiZWVuIGV4ZXJjaXNlZCBhIGZldyB0aW1lcy4KKworVGhlIGtlcm5lbCBwcm92aWRlcyBhIGZhdWx0IGluamVjdGlvbiBmcmFtZXdvcmsgd2hpY2ggY2FuIGRvIGV4YWN0bHkgdGhhdCwKK2VzcGVjaWFsbHkgd2hlcmUgbWVtb3J5IGFsbG9jYXRpb25zIGFyZSBpbnZvbHZlZC4gIFdpdGggZmF1bHQgaW5qZWN0aW9uCitlbmFibGVkLCBhIGNvbmZpZ3VyYWJsZSBwZXJjZW50YWdlIG9mIG1lbW9yeSBhbGxvY2F0aW9ucyB3aWxsIGJlIG1hZGUgdG8KK2ZhaWw7IHRoZXNlIGZhaWx1cmVzIGNhbiBiZSByZXN0cmljdGVkIHRvIGEgc3BlY2lmaWMgcmFuZ2Ugb2YgY29kZS4KK1J1bm5pbmcgd2l0aCBmYXVsdCBpbmplY3Rpb24gZW5hYmxlZCBhbGxvd3MgdGhlIHByb2dyYW1tZXIgdG8gc2VlIGhvdyB0aGUKK2NvZGUgcmVzcG9uZHMgd2hlbiB0aGluZ3MgZ28gYmFkbHkuICBTZWUKK0RvY3VtZW50YXRpb24vZmF1bHQtaW5qZWN0aW9uL2ZhdWx0LWluamVjdGlvbi50ZXh0IGZvciBtb3JlIGluZm9ybWF0aW9uIG9uCitob3cgdG8gdXNlIHRoaXMgZmFjaWxpdHkuCisKK090aGVyIGtpbmRzIG9mIGVycm9ycyBjYW4gYmUgZm91bmQgd2l0aCB0aGUgInNwYXJzZSIgc3RhdGljIGFuYWx5c2lzIHRvb2wuCitXaXRoIHNwYXJzZSwgdGhlIHByb2dyYW1tZXIgY2FuIGJlIHdhcm5lZCBhYm91dCBjb25mdXNpb24gYmV0d2VlbgordXNlci1zcGFjZSBhbmQga2VybmVsLXNwYWNlIGFkZHJlc3NlcywgbWl4dHVyZSBvZiBiaWctZW5kaWFuIGFuZAorc21hbGwtZW5kaWFuIHF1YW50aXRpZXMsIHRoZSBwYXNzaW5nIG9mIGludGVnZXIgdmFsdWVzIHdoZXJlIGEgc2V0IG9mIGJpdAorZmxhZ3MgaXMgZXhwZWN0ZWQsIGFuZCBzbyBvbi4gIFNwYXJzZSBtdXN0IGJlIGluc3RhbGxlZCBzZXBhcmF0ZWx5IChpdCBjYW4KK2JlIGZvdW5kIGF0IGh0dHA6Ly93d3cua2VybmVsLm9yZy9wdWIvc29mdHdhcmUvZGV2ZWwvc3BhcnNlLyBpZiB5b3VyCitkaXN0cmlidXRvciBkb2VzIG5vdCBwYWNrYWdlIGl0KTsgaXQgY2FuIHRoZW4gYmUgcnVuIG9uIHRoZSBjb2RlIGJ5IGFkZGluZworIkM9MSIgdG8geW91ciBtYWtlIGNvbW1hbmQuCisKK090aGVyIGtpbmRzIG9mIHBvcnRhYmlsaXR5IGVycm9ycyBhcmUgYmVzdCBmb3VuZCBieSBjb21waWxpbmcgeW91ciBjb2RlIGZvcgorb3RoZXIgYXJjaGl0ZWN0dXJlcy4gIElmIHlvdSBkbyBub3QgaGFwcGVuIHRvIGhhdmUgYW4gUy8zOTAgc3lzdGVtIG9yIGEKK0JsYWNrZmluIGRldmVsb3BtZW50IGJvYXJkIGhhbmR5LCB5b3UgY2FuIHN0aWxsIHBlcmZvcm0gdGhlIGNvbXBpbGF0aW9uCitzdGVwLiAgQSBsYXJnZSBzZXQgb2YgY3Jvc3MgY29tcGlsZXJzIGZvciB4ODYgc3lzdGVtcyBjYW4gYmUgZm91bmQgYXQgCisKKwlodHRwOi8vd3d3Lmtlcm5lbC5vcmcvcHViL3Rvb2xzL2Nyb3NzdG9vbC8KKworU29tZSB0aW1lIHNwZW50IGluc3RhbGxpbmcgYW5kIHVzaW5nIHRoZXNlIGNvbXBpbGVycyB3aWxsIGhlbHAgYXZvaWQKK2VtYmFycmFzc21lbnQgbGF0ZXIuCisKKworNC4zOiBET0NVTUVOVEFUSU9OCisKK0RvY3VtZW50YXRpb24gaGFzIG9mdGVuIGJlZW4gbW9yZSB0aGUgZXhjZXB0aW9uIHRoYW4gdGhlIHJ1bGUgd2l0aCBrZXJuZWwKK2RldmVsb3BtZW50LiAgRXZlbiBzbywgYWRlcXVhdGUgZG9jdW1lbnRhdGlvbiB3aWxsIGhlbHAgdG8gZWFzZSB0aGUgbWVyZ2luZworb2YgbmV3IGNvZGUgaW50byB0aGUga2VybmVsLCBtYWtlIGxpZmUgZWFzaWVyIGZvciBvdGhlciBkZXZlbG9wZXJzLCBhbmQKK3dpbGwgYmUgaGVscGZ1bCBmb3IgeW91ciB1c2Vycy4gIEluIG1hbnkgY2FzZXMsIHRoZSBhZGRpdGlvbiBvZgorZG9jdW1lbnRhdGlvbiBoYXMgYmVjb21lIGVzc2VudGlhbGx5IG1hbmRhdG9yeS4KKworVGhlIGZpcnN0IHBpZWNlIG9mIGRvY3VtZW50YXRpb24gZm9yIGFueSBwYXRjaCBpcyBpdHMgYXNzb2NpYXRlZAorY2hhbmdlbG9nLiAgTG9nIGVudHJpZXMgc2hvdWxkIGRlc2NyaWJlIHRoZSBwcm9ibGVtIGJlaW5nIHNvbHZlZCwgdGhlIGZvcm0KK29mIHRoZSBzb2x1dGlvbiwgdGhlIHBlb3BsZSB3aG8gd29ya2VkIG9uIHRoZSBwYXRjaCwgYW55IHJlbGV2YW50CitlZmZlY3RzIG9uIHBlcmZvcm1hbmNlLCBhbmQgYW55dGhpbmcgZWxzZSB0aGF0IG1pZ2h0IGJlIG5lZWRlZCB0bwordW5kZXJzdGFuZCB0aGUgcGF0Y2guCisKK0FueSBjb2RlIHdoaWNoIGFkZHMgYSBuZXcgdXNlci1zcGFjZSBpbnRlcmZhY2UgLSBpbmNsdWRpbmcgbmV3IHN5c2ZzIG9yCisvcHJvYyBmaWxlcyAtIHNob3VsZCBpbmNsdWRlIGRvY3VtZW50YXRpb24gb2YgdGhhdCBpbnRlcmZhY2Ugd2hpY2ggZW5hYmxlcwordXNlci1zcGFjZSBkZXZlbG9wZXJzIHRvIGtub3cgd2hhdCB0aGV5IGFyZSB3b3JraW5nIHdpdGguICBTZWUKK0RvY3VtZW50YXRpb24vQUJJL1JFQURNRSBmb3IgYSBkZXNjcmlwdGlvbiBvZiBob3cgdGhpcyBkb2N1bWVudGF0aW9uIHNob3VsZAorYmUgZm9ybWF0dGVkIGFuZCB3aGF0IGluZm9ybWF0aW9uIG5lZWRzIHRvIGJlIHByb3ZpZGVkLgorCitUaGUgZmlsZSBEb2N1bWVudGF0aW9uL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dCBkZXNjcmliZXMgYWxsIG9mIHRoZSBrZXJuZWwncworYm9vdC10aW1lIHBhcmFtZXRlcnMuICBBbnkgcGF0Y2ggd2hpY2ggYWRkcyBuZXcgcGFyYW1ldGVycyBzaG91bGQgYWRkIHRoZQorYXBwcm9wcmlhdGUgZW50cmllcyB0byB0aGlzIGZpbGUuCisKK0FueSBuZXcgY29uZmlndXJhdGlvbiBvcHRpb25zIG11c3QgYmUgYWNjb21wYW5pZWQgYnkgaGVscCB0ZXh0IHdoaWNoCitjbGVhcmx5IGV4cGxhaW5zIHRoZSBvcHRpb25zIGFuZCB3aGVuIHRoZSB1c2VyIG1pZ2h0IHdhbnQgdG8gc2VsZWN0IHRoZW0uIAorCitJbnRlcm5hbCBBUEkgaW5mb3JtYXRpb24gZm9yIG1hbnkgc3Vic3lzdGVtcyBpcyBkb2N1bWVudGVkIGJ5IHdheSBvZgorc3BlY2lhbGx5LWZvcm1hdHRlZCBjb21tZW50czsgdGhlc2UgY29tbWVudHMgY2FuIGJlIGV4dHJhY3RlZCBhbmQgZm9ybWF0dGVkCitpbiBhIG51bWJlciBvZiB3YXlzIGJ5IHRoZSAia2VybmVsLWRvYyIgc2NyaXB0LiAgSWYgeW91IGFyZSB3b3JraW5nIHdpdGhpbgorYSBzdWJzeXN0ZW0gd2hpY2ggaGFzIGtlcm5lbGRvYyBjb21tZW50cywgeW91IHNob3VsZCBtYWludGFpbiB0aGVtIGFuZCBhZGQKK3RoZW0sIGFzIGFwcHJvcHJpYXRlLCBmb3IgZXh0ZXJuYWxseS1hdmFpbGFibGUgZnVuY3Rpb25zLiAgRXZlbiBpbiBhcmVhcword2hpY2ggaGF2ZSBub3QgYmVlbiBzbyBkb2N1bWVudGVkLCB0aGVyZSBpcyBubyBoYXJtIGluIGFkZGluZyBrZXJuZWxkb2MKK2NvbW1lbnRzIGZvciB0aGUgZnV0dXJlOyBpbmRlZWQsIHRoaXMgY2FuIGJlIGEgdXNlZnVsIGFjdGl2aXR5IGZvcgorYmVnaW5uaW5nIGtlcm5lbCBkZXZlbG9wZXJzLiAgVGhlIGZvcm1hdCBvZiB0aGVzZSBjb21tZW50cywgYWxvbmcgd2l0aCBzb21lCitpbmZvcm1hdGlvbiBvbiBob3cgdG8gY3JlYXRlIGtlcm5lbGRvYyB0ZW1wbGF0ZXMgY2FuIGJlIGZvdW5kIGluIHRoZSBmaWxlCitEb2N1bWVudGF0aW9uL2tlcm5lbC1kb2MtbmFuby1IT1dUTy50eHQuCisKK0FueWJvZHkgd2hvIHJlYWRzIHRocm91Z2ggYSBzaWduaWZpY2FudCBhbW91bnQgb2YgZXhpc3Rpbmcga2VybmVsIGNvZGUgd2lsbAorbm90ZSB0aGF0LCBvZnRlbiwgY29tbWVudHMgYXJlIG1vc3Qgbm90YWJsZSBieSB0aGVpciBhYnNlbmNlLiAgT25jZSBhZ2FpbiwKK3RoZSBleHBlY3RhdGlvbnMgZm9yIG5ldyBjb2RlIGFyZSBoaWdoZXIgdGhhbiB0aGV5IHdlcmUgaW4gdGhlIHBhc3Q7CittZXJnaW5nIHVuY29tbWVudGVkIGNvZGUgd2lsbCBiZSBoYXJkZXIuICBUaGF0IHNhaWQsIHRoZXJlIGlzIGxpdHRsZSBkZXNpcmUKK2ZvciB2ZXJib3NlbHktY29tbWVudGVkIGNvZGUuICBUaGUgY29kZSBzaG91bGQsIGl0c2VsZiwgYmUgcmVhZGFibGUsIHdpdGgKK2NvbW1lbnRzIGV4cGxhaW5pbmcgdGhlIG1vcmUgc3VidGxlIGFzcGVjdHMuCisKK0NlcnRhaW4gdGhpbmdzIHNob3VsZCBhbHdheXMgYmUgY29tbWVudGVkLiAgVXNlcyBvZiBtZW1vcnkgYmFycmllcnMgc2hvdWxkCitiZSBhY2NvbXBhbmllZCBieSBhIGxpbmUgZXhwbGFpbmluZyB3aHkgdGhlIGJhcnJpZXIgaXMgbmVjZXNzYXJ5LiAgVGhlCitsb2NraW5nIHJ1bGVzIGZvciBkYXRhIHN0cnVjdHVyZXMgZ2VuZXJhbGx5IG5lZWQgdG8gYmUgZXhwbGFpbmVkIHNvbWV3aGVyZS4KK01ham9yIGRhdGEgc3RydWN0dXJlcyBuZWVkIGNvbXByZWhlbnNpdmUgZG9jdW1lbnRhdGlvbiBpbiBnZW5lcmFsLgorTm9uLW9idmlvdXMgZGVwZW5kZW5jaWVzIGJldHdlZW4gc2VwYXJhdGUgYml0cyBvZiBjb2RlIHNob3VsZCBiZSBwb2ludGVkCitvdXQuICBBbnl0aGluZyB3aGljaCBtaWdodCB0ZW1wdCBhIGNvZGUgamFuaXRvciB0byBtYWtlIGFuIGluY29ycmVjdAorImNsZWFudXAiIG5lZWRzIGEgY29tbWVudCBzYXlpbmcgd2h5IGl0IGlzIGRvbmUgdGhlIHdheSBpdCBpcy4gIEFuZCBzbyBvbi4KKworCis0LjQ6IElOVEVSTkFMIEFQSSBDSEFOR0VTCisKK1RoZSBiaW5hcnkgaW50ZXJmYWNlIHByb3ZpZGVkIGJ5IHRoZSBrZXJuZWwgdG8gdXNlciBzcGFjZSBjYW5ub3QgYmUgYnJva2VuCitleGNlcHQgdW5kZXIgdGhlIG1vc3Qgc2V2ZXJlIGNpcmN1bXN0YW5jZXMuICBUaGUga2VybmVsJ3MgaW50ZXJuYWwKK3Byb2dyYW1taW5nIGludGVyZmFjZXMsIGluc3RlYWQsIGFyZSBoaWdobHkgZmx1aWQgYW5kIGNhbiBiZSBjaGFuZ2VkIHdoZW4KK3RoZSBuZWVkIGFyaXNlcy4gIElmIHlvdSBmaW5kIHlvdXJzZWxmIGhhdmluZyB0byB3b3JrIGFyb3VuZCBhIGtlcm5lbCBBUEksCitvciBzaW1wbHkgbm90IHVzaW5nIGEgc3BlY2lmaWMgZnVuY3Rpb25hbGl0eSBiZWNhdXNlIGl0IGRvZXMgbm90IG1lZXQgeW91cgorbmVlZHMsIHRoYXQgbWF5IGJlIGEgc2lnbiB0aGF0IHRoZSBBUEkgbmVlZHMgdG8gY2hhbmdlLiAgQXMgYSBrZXJuZWwKK2RldmVsb3BlciwgeW91IGFyZSBlbXBvd2VyZWQgdG8gbWFrZSBzdWNoIGNoYW5nZXMuCisKK1RoZXJlIGFyZSwgb2YgY291cnNlLCBzb21lIGNhdGNoZXMuICBBUEkgY2hhbmdlcyBjYW4gYmUgbWFkZSwgYnV0IHRoZXkgbmVlZAordG8gYmUgd2VsbCBqdXN0aWZpZWQuICBTbyBhbnkgcGF0Y2ggbWFraW5nIGFuIGludGVybmFsIEFQSSBjaGFuZ2Ugc2hvdWxkIGJlCithY2NvbXBhbmllZCBieSBhIGRlc2NyaXB0aW9uIG9mIHdoYXQgdGhlIGNoYW5nZSBpcyBhbmQgd2h5IGl0IGlzCituZWNlc3NhcnkuICBUaGlzIGtpbmQgb2YgY2hhbmdlIHNob3VsZCBhbHNvIGJlIGJyb2tlbiBvdXQgaW50byBhIHNlcGFyYXRlCitwYXRjaCwgcmF0aGVyIHRoYW4gYnVyaWVkIHdpdGhpbiBhIGxhcmdlciBwYXRjaC4KKworVGhlIG90aGVyIGNhdGNoIGlzIHRoYXQgYSBkZXZlbG9wZXIgd2hvIGNoYW5nZXMgYW4gaW50ZXJuYWwgQVBJIGlzCitnZW5lcmFsbHkgY2hhcmdlZCB3aXRoIHRoZSB0YXNrIG9mIGZpeGluZyBhbnkgY29kZSB3aXRoaW4gdGhlIGtlcm5lbCB0cmVlCit3aGljaCBpcyBicm9rZW4gYnkgdGhlIGNoYW5nZS4gIEZvciBhIHdpZGVseS11c2VkIGZ1bmN0aW9uLCB0aGlzIGR1dHkgY2FuCitsZWFkIHRvIGxpdGVyYWxseSBodW5kcmVkcyBvciB0aG91c2FuZHMgb2YgY2hhbmdlcyAtIG1hbnkgb2Ygd2hpY2ggYXJlCitsaWtlbHkgdG8gY29uZmxpY3Qgd2l0aCB3b3JrIGJlaW5nIGRvbmUgYnkgb3RoZXIgZGV2ZWxvcGVycy4gIE5lZWRsZXNzIHRvCitzYXksIHRoaXMgY2FuIGJlIGEgbGFyZ2Ugam9iLCBzbyBpdCBpcyBiZXN0IHRvIGJlIHN1cmUgdGhhdCB0aGUKK2p1c3RpZmljYXRpb24gaXMgc29saWQuCisKK1doZW4gbWFraW5nIGFuIGluY29tcGF0aWJsZSBBUEkgY2hhbmdlLCBvbmUgc2hvdWxkLCB3aGVuZXZlciBwb3NzaWJsZSwKK2Vuc3VyZSB0aGF0IGNvZGUgd2hpY2ggaGFzIG5vdCBiZWVuIHVwZGF0ZWQgaXMgY2F1Z2h0IGJ5IHRoZSBjb21waWxlci4gIAorVGhpcyB3aWxsIGhlbHAgeW91IHRvIGJlIHN1cmUgdGhhdCB5b3UgaGF2ZSBmb3VuZCBhbGwgaW4tdHJlZSB1c2VzIG9mIHRoYXQKK2ludGVyZmFjZS4gIEl0IHdpbGwgYWxzbyBhbGVydCBkZXZlbG9wZXJzIG9mIG91dC1vZi10cmVlIGNvZGUgdGhhdCB0aGVyZSBpcworYSBjaGFuZ2UgdGhhdCB0aGV5IG5lZWQgdG8gcmVzcG9uZCB0by4gIFN1cHBvcnRpbmcgb3V0LW9mLXRyZWUgY29kZSBpcyBub3QKK3NvbWV0aGluZyB0aGF0IGtlcm5lbCBkZXZlbG9wZXJzIG5lZWQgdG8gYmUgd29ycmllZCBhYm91dCwgYnV0IHdlIGFsc28gZG8KK25vdCBoYXZlIHRvIG1ha2UgbGlmZSBoYXJkZXIgZm9yIG91dC1vZi10cmVlIGRldmVsb3BlcnMgdGhhbiBpdCBpdCBuZWVkcyB0bworYmUuIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZlbG9wbWVudC1wcm9jZXNzLzUuUG9zdGluZyBiL0RvY3VtZW50YXRpb24vZGV2ZWxvcG1lbnQtcHJvY2Vzcy81LlBvc3RpbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGQ0ODEzMgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZGV2ZWxvcG1lbnQtcHJvY2Vzcy81LlBvc3RpbmcKQEAgLTAsMCArMSwyNzggQEAKKzU6IFBPU1RJTkcgUEFUQ0hFUworCitTb29uZXIgb3IgbGF0ZXIsIHRoZSB0aW1lIGNvbWVzIHdoZW4geW91ciB3b3JrIGlzIHJlYWR5IHRvIGJlIHByZXNlbnRlZCB0bwordGhlIGNvbW11bml0eSBmb3IgcmV2aWV3IGFuZCwgZXZlbnR1YWxseSwgaW5jbHVzaW9uIGludG8gdGhlIG1haW5saW5lCitrZXJuZWwuICBVbnN1cnByaXNpbmdseSwgdGhlIGtlcm5lbCBkZXZlbG9wbWVudCBjb21tdW5pdHkgaGFzIGV2b2x2ZWQgYSBzZXQKK29mIGNvbnZlbnRpb25zIGFuZCBwcm9jZWR1cmVzIHdoaWNoIGFyZSB1c2VkIGluIHRoZSBwb3N0aW5nIG9mIHBhdGNoZXM7Citmb2xsb3dpbmcgdGhlbSB3aWxsIG1ha2UgbGlmZSBtdWNoIGVhc2llciBmb3IgZXZlcnlib2R5IGludm9sdmVkLiAgVGhpcworZG9jdW1lbnQgd2lsbCBhdHRlbXB0IHRvIGNvdmVyIHRoZXNlIGV4cGVjdGF0aW9ucyBpbiByZWFzb25hYmxlIGRldGFpbDsKK21vcmUgaW5mb3JtYXRpb24gY2FuIGFsc28gYmUgZm91bmQgaW4gdGhlIGZpbGVzIFN1Ym1pdHRpbmdQYXRjaGVzLAorU3VibWl0dGluZ0RyaXZlcnMsIGFuZCBTdWJtaXRDaGVja2xpc3QgaW4gdGhlIGtlcm5lbCBkb2N1bWVudGF0aW9uCitkaXJlY3RvcnkuCisKKworNS4xOiBXSEVOIFRPIFBPU1QKKworVGhlcmUgaXMgYSBjb25zdGFudCB0ZW1wdGF0aW9uIHRvIGF2b2lkIHBvc3RpbmcgcGF0Y2hlcyBiZWZvcmUgdGhleSBhcmUKK2NvbXBsZXRlbHkgInJlYWR5LiIgIEZvciBzaW1wbGUgcGF0Y2hlcywgdGhhdCBpcyBub3QgYSBwcm9ibGVtLiAgSWYgdGhlCit3b3JrIGJlaW5nIGRvbmUgaXMgY29tcGxleCwgdGhvdWdoLCB0aGVyZSBpcyBhIGxvdCB0byBiZSBnYWluZWQgYnkgZ2V0dGluZworZmVlZGJhY2sgZnJvbSB0aGUgY29tbXVuaXR5IGJlZm9yZSB0aGUgd29yayBpcyBjb21wbGV0ZS4gIFNvIHlvdSBzaG91bGQKK2NvbnNpZGVyIHBvc3RpbmcgaW4tcHJvZ3Jlc3Mgd29yaywgb3IgZXZlbiBtYWtpbmcgYSBnaXQgdHJlZSBhdmFpbGFibGUgc28KK3RoYXQgaW50ZXJlc3RlZCBkZXZlbG9wZXJzIGNhbiBjYXRjaCB1cCB3aXRoIHlvdXIgd29yayBhdCBhbnkgdGltZS4KKworV2hlbiBwb3N0aW5nIGNvZGUgd2hpY2ggaXMgbm90IHlldCBjb25zaWRlcmVkIHJlYWR5IGZvciBpbmNsdXNpb24sIGl0IGlzIGEKK2dvb2QgaWRlYSB0byBzYXkgc28gaW4gdGhlIHBvc3RpbmcgaXRzZWxmLiAgQWxzbyBtZW50aW9uIGFueSBtYWpvciB3b3JrCit3aGljaCByZW1haW5zIHRvIGJlIGRvbmUgYW5kIGFueSBrbm93biBwcm9ibGVtcy4gIEZld2VyIHBlb3BsZSB3aWxsIGxvb2sgYXQKK3BhdGNoZXMgd2hpY2ggYXJlIGtub3duIHRvIGJlIGhhbGYtYmFrZWQsIGJ1dCB0aG9zZSB3aG8gZG8gd2lsbCBjb21lIGluCit3aXRoIHRoZSBpZGVhIHRoYXQgdGhleSBjYW4gaGVscCB5b3UgZHJpdmUgdGhlIHdvcmsgaW4gdGhlIHJpZ2h0IGRpcmVjdGlvbi4KKworCis1LjI6IEJFRk9SRSBDUkVBVElORyBQQVRDSEVTCisKK1RoZXJlIGFyZSBhIG51bWJlciBvZiB0aGluZ3Mgd2hpY2ggc2hvdWxkIGJlIGRvbmUgYmVmb3JlIHlvdSBjb25zaWRlcgorc2VuZGluZyBwYXRjaGVzIHRvIHRoZSBkZXZlbG9wbWVudCBjb21tdW5pdHkuICBUaGVzZSBpbmNsdWRlOgorCisgLSBUZXN0IHRoZSBjb2RlIHRvIHRoZSBleHRlbnQgdGhhdCB5b3UgY2FuLiAgTWFrZSB1c2Ugb2YgdGhlIGtlcm5lbCdzCisgICBkZWJ1Z2dpbmcgdG9vbHMsIGVuc3VyZSB0aGF0IHRoZSBrZXJuZWwgd2lsbCBidWlsZCB3aXRoIGFsbCByZWFzb25hYmxlCisgICBjb21iaW5hdGlvbnMgb2YgY29uZmlndXJhdGlvbiBvcHRpb25zLCB1c2UgY3Jvc3MtY29tcGlsZXJzIHRvIGJ1aWxkIGZvcgorICAgZGlmZmVyZW50IGFyY2hpdGVjdHVyZXMsIGV0Yy4KKworIC0gTWFrZSBzdXJlIHlvdXIgY29kZSBpcyBjb21wbGlhbnQgd2l0aCB0aGUga2VybmVsIGNvZGluZyBzdHlsZQorICAgZ3VpZGVsaW5lcy4KKworIC0gRG9lcyB5b3VyIGNoYW5nZSBoYXZlIHBlcmZvcm1hbmNlIGltcGxpY2F0aW9ucz8gIElmIHNvLCB5b3Ugc2hvdWxkIHJ1bgorICAgYmVuY2htYXJrcyBzaG93aW5nIHdoYXQgdGhlIGltcGFjdCAob3IgYmVuZWZpdCkgb2YgeW91ciBjaGFuZ2UgaXM7IGEKKyAgIHN1bW1hcnkgb2YgdGhlIHJlc3VsdHMgc2hvdWxkIGJlIGluY2x1ZGVkIHdpdGggdGhlIHBhdGNoLgorCisgLSBCZSBzdXJlIHRoYXQgeW91IGhhdmUgdGhlIHJpZ2h0IHRvIHBvc3QgdGhlIGNvZGUuICBJZiB0aGlzIHdvcmsgd2FzIGRvbmUKKyAgIGZvciBhbiBlbXBsb3llciwgdGhlIGVtcGxveWVyIGxpa2VseSBoYXMgYSByaWdodCB0byB0aGUgd29yayBhbmQgbXVzdCBiZQorICAgYWdyZWVhYmxlIHdpdGggaXRzIHJlbGVhc2UgdW5kZXIgdGhlIEdQTC4KKworQXMgYSBnZW5lcmFsIHJ1bGUsIHB1dHRpbmcgaW4gc29tZSBleHRyYSB0aG91Z2h0IGJlZm9yZSBwb3N0aW5nIGNvZGUgYWxtb3N0CithbHdheXMgcGF5cyBiYWNrIHRoZSBlZmZvcnQgaW4gc2hvcnQgb3JkZXIuCisKKworNS4zOiBQQVRDSCBQUkVQQVJBVElPTgorCitUaGUgcHJlcGFyYXRpb24gb2YgcGF0Y2hlcyBmb3IgcG9zdGluZyBjYW4gYmUgYSBzdXJwcmlzaW5nIGFtb3VudCBvZiB3b3JrLAorYnV0LCBvbmNlIGFnYWluLCBhdHRlbXB0aW5nIHRvIHNhdmUgdGltZSBoZXJlIGlzIG5vdCBnZW5lcmFsbHkgYWR2aXNhYmxlCitldmVuIGluIHRoZSBzaG9ydCB0ZXJtLgorCitQYXRjaGVzIG11c3QgYmUgcHJlcGFyZWQgYWdhaW5zdCBhIHNwZWNpZmljIHZlcnNpb24gb2YgdGhlIGtlcm5lbC4gIEFzIGEKK2dlbmVyYWwgcnVsZSwgYSBwYXRjaCBzaG91bGQgYmUgYmFzZWQgb24gdGhlIGN1cnJlbnQgbWFpbmxpbmUgYXMgZm91bmQgaW4KK0xpbnVzJ3MgZ2l0IHRyZWUuICBJdCBtYXkgYmVjb21lIG5lY2Vzc2FyeSB0byBtYWtlIHZlcnNpb25zIGFnYWluc3QgLW1tLAorbGludXgtbmV4dCwgb3IgYSBzdWJzeXN0ZW0gdHJlZSwgdGhvdWdoLCB0byBmYWNpbGl0YXRlIHdpZGVyIHRlc3RpbmcgYW5kCityZXZpZXcuICBEZXBlbmRpbmcgb24gdGhlIGFyZWEgb2YgeW91ciBwYXRjaCBhbmQgd2hhdCBpcyBnb2luZyBvbgorZWxzZXdoZXJlLCBiYXNpbmcgYSBwYXRjaCBhZ2FpbnN0IHRoZXNlIG90aGVyIHRyZWVzIGNhbiByZXF1aXJlIGEKK3NpZ25pZmljYW50IGFtb3VudCBvZiB3b3JrIHJlc29sdmluZyBjb25mbGljdHMgYW5kIGRlYWxpbmcgd2l0aCBBUEkKK2NoYW5nZXMuCisKK09ubHkgdGhlIG1vc3Qgc2ltcGxlIGNoYW5nZXMgc2hvdWxkIGJlIGZvcm1hdHRlZCBhcyBhIHNpbmdsZSBwYXRjaDsKK2V2ZXJ5dGhpbmcgZWxzZSBzaG91bGQgYmUgbWFkZSBhcyBhIGxvZ2ljYWwgc2VyaWVzIG9mIGNoYW5nZXMuICBTcGxpdHRpbmcKK3VwIHBhdGNoZXMgaXMgYSBiaXQgb2YgYW4gYXJ0OyBzb21lIGRldmVsb3BlcnMgc3BlbmQgYSBsb25nIHRpbWUgZmlndXJpbmcKK291dCBob3cgdG8gZG8gaXQgaW4gdGhlIHdheSB0aGF0IHRoZSBjb21tdW5pdHkgZXhwZWN0cy4gIFRoZXJlIGFyZSBhIGZldworcnVsZXMgb2YgdGh1bWIsIGhvd2V2ZXIsIHdoaWNoIGNhbiBoZWxwIGNvbnNpZGVyYWJseToKKworIC0gVGhlIHBhdGNoIHNlcmllcyB5b3UgcG9zdCB3aWxsIGFsbW9zdCBjZXJ0YWlubHkgbm90IGJlIHRoZSBzZXJpZXMgb2YKKyAgIGNoYW5nZXMgZm91bmQgaW4geW91ciB3b3JraW5nIHJldmlzaW9uIGNvbnRyb2wgc3lzdGVtLiAgSW5zdGVhZCwgdGhlCisgICBjaGFuZ2VzIHlvdSBoYXZlIG1hZGUgbmVlZCB0byBiZSBjb25zaWRlcmVkIGluIHRoZWlyIGZpbmFsIGZvcm0sIHRoZW4KKyAgIHNwbGl0IGFwYXJ0IGluIHdheXMgd2hpY2ggbWFrZSBzZW5zZS4gIFRoZSBkZXZlbG9wZXJzIGFyZSBpbnRlcmVzdGVkIGluCisgICBkaXNjcmV0ZSwgc2VsZi1jb250YWluZWQgY2hhbmdlcywgbm90IHRoZSBwYXRoIHlvdSB0b29rIHRvIGdldCB0byB0aG9zZQorICAgY2hhbmdlcy4KKworIC0gRWFjaCBsb2dpY2FsbHkgaW5kZXBlbmRlbnQgY2hhbmdlIHNob3VsZCBiZSBmb3JtYXR0ZWQgYXMgYSBzZXBhcmF0ZQorICAgcGF0Y2guICBUaGVzZSBjaGFuZ2VzIGNhbiBiZSBzbWFsbCAoImFkZCBhIGZpZWxkIHRvIHRoaXMgc3RydWN0dXJlIikgb3IKKyAgIGxhcmdlIChhZGRpbmcgYSBzaWduaWZpY2FudCBuZXcgZHJpdmVyLCBmb3IgZXhhbXBsZSksIGJ1dCB0aGV5IHNob3VsZCBiZQorICAgY29uY2VwdHVhbGx5IHNtYWxsIGFuZCBhbWVuYWJsZSB0byBhIG9uZS1saW5lIGRlc2NyaXB0aW9uLiAgRWFjaCBwYXRjaAorICAgc2hvdWxkIG1ha2UgYSBzcGVjaWZpYyBjaGFuZ2Ugd2hpY2ggY2FuIGJlIHJldmlld2VkIG9uIGl0cyBvd24gYW5kCisgICB2ZXJpZmllZCB0byBkbyB3aGF0IGl0IHNheXMgaXQgZG9lcy4KKworIC0gQXMgYSB3YXkgb2YgcmVzdGF0aW5nIHRoZSBndWlkZWxpbmUgYWJvdmU6IGRvIG5vdCBtaXggZGlmZmVyZW50IHR5cGVzIG9mCisgICBjaGFuZ2VzIGluIHRoZSBzYW1lIHBhdGNoLiAgSWYgYSBzaW5nbGUgcGF0Y2ggZml4ZXMgYSBjcml0aWNhbCBzZWN1cml0eQorICAgYnVnLCByZWFycmFuZ2VzIGEgZmV3IHN0cnVjdHVyZXMsIGFuZCByZWZvcm1hdHMgdGhlIGNvZGUsIHRoZXJlIGlzIGEKKyAgIGdvb2QgY2hhbmNlIHRoYXQgaXQgd2lsbCBiZSBwYXNzZWQgb3ZlciBhbmQgdGhlIGltcG9ydGFudCBmaXggd2lsbCBiZQorICAgbG9zdC4KKworIC0gRWFjaCBwYXRjaCBzaG91bGQgeWllbGQgYSBrZXJuZWwgd2hpY2ggYnVpbGRzIGFuZCBydW5zIHByb3Blcmx5OyBpZiB5b3VyCisgICBwYXRjaCBzZXJpZXMgaXMgaW50ZXJydXB0ZWQgaW4gdGhlIG1pZGRsZSwgdGhlIHJlc3VsdCBzaG91bGQgc3RpbGwgYmUgYQorICAgd29ya2luZyBrZXJuZWwuICBQYXJ0aWFsIGFwcGxpY2F0aW9uIG9mIGEgcGF0Y2ggc2VyaWVzIGlzIGEgY29tbW9uCisgICBzY2VuYXJpbyB3aGVuIHRoZSAiZ2l0IGJpc2VjdCIgdG9vbCBpcyB1c2VkIHRvIGZpbmQgcmVncmVzc2lvbnM7IGlmIHRoZQorICAgcmVzdWx0IGlzIGEgYnJva2VuIGtlcm5lbCwgeW91IHdpbGwgbWFrZSBsaWZlIGhhcmRlciBmb3IgZGV2ZWxvcGVycyBhbmQKKyAgIHVzZXJzIHdobyBhcmUgZW5nYWdpbmcgaW4gdGhlIG5vYmxlIHdvcmsgb2YgdHJhY2tpbmcgZG93biBwcm9ibGVtcy4KKworIC0gRG8gbm90IG92ZXJkbyBpdCwgdGhvdWdoLiAgT25lIGRldmVsb3BlciByZWNlbnRseSBwb3N0ZWQgYSBzZXQgb2YgZWRpdHMKKyAgIHRvIGEgc2luZ2xlIGZpbGUgYXMgNTAwIHNlcGFyYXRlIHBhdGNoZXMgLSBhbiBhY3Qgd2hpY2ggZGlkIG5vdCBtYWtlIGhpbQorICAgdGhlIG1vc3QgcG9wdWxhciBwZXJzb24gb24gdGhlIGtlcm5lbCBtYWlsaW5nIGxpc3QuICBBIHNpbmdsZSBwYXRjaCBjYW4KKyAgIGJlIHJlYXNvbmFibHkgbGFyZ2UgYXMgbG9uZyBhcyBpdCBzdGlsbCBjb250YWlucyBhIHNpbmdsZSAqbG9naWNhbCoKKyAgIGNoYW5nZS4gCisKKyAtIEl0IGNhbiBiZSB0ZW1wdGluZyB0byBhZGQgYSB3aG9sZSBuZXcgaW5mcmFzdHJ1Y3R1cmUgd2l0aCBhIHNlcmllcyBvZgorICAgcGF0Y2hlcywgYnV0IHRvIGxlYXZlIHRoYXQgaW5mcmFzdHJ1Y3R1cmUgdW51c2VkIHVudGlsIHRoZSBmaW5hbCBwYXRjaAorICAgaW4gdGhlIHNlcmllcyBlbmFibGVzIHRoZSB3aG9sZSB0aGluZy4gIFRoaXMgdGVtcHRhdGlvbiBzaG91bGQgYmUKKyAgIGF2b2lkZWQgaWYgcG9zc2libGU7IGlmIHRoYXQgc2VyaWVzIGFkZHMgcmVncmVzc2lvbnMsIGJpc2VjdGlvbiB3aWxsCisgICBmaW5nZXIgdGhlIGxhc3QgcGF0Y2ggYXMgdGhlIG9uZSB3aGljaCBjYXVzZWQgdGhlIHByb2JsZW0sIGV2ZW4gdGhvdWdoCisgICB0aGUgcmVhbCBidWcgaXMgZWxzZXdoZXJlLiAgV2hlbmV2ZXIgcG9zc2libGUsIGEgcGF0Y2ggd2hpY2ggYWRkcyBuZXcKKyAgIGNvZGUgc2hvdWxkIG1ha2UgdGhhdCBjb2RlIGFjdGl2ZSBpbW1lZGlhdGVseS4KKworV29ya2luZyB0byBjcmVhdGUgdGhlIHBlcmZlY3QgcGF0Y2ggc2VyaWVzIGNhbiBiZSBhIGZydXN0cmF0aW5nIHByb2Nlc3MKK3doaWNoIHRha2VzIHF1aXRlIGEgYml0IG9mIHRpbWUgYW5kIHRob3VnaHQgYWZ0ZXIgdGhlICJyZWFsIHdvcmsiIGhhcyBiZWVuCitkb25lLiAgV2hlbiBkb25lIHByb3Blcmx5LCB0aG91Z2gsIGl0IGlzIHRpbWUgd2VsbCBzcGVudC4KKworCis1LjQ6IFBBVENIIEZPUk1BVFRJTkcKKworU28gbm93IHlvdSBoYXZlIGEgcGVyZmVjdCBzZXJpZXMgb2YgcGF0Y2hlcyBmb3IgcG9zdGluZywgYnV0IHRoZSB3b3JrIGlzCitub3QgZG9uZSBxdWl0ZSB5ZXQuICBFYWNoIHBhdGNoIG5lZWRzIHRvIGJlIGZvcm1hdHRlZCBpbnRvIGEgbWVzc2FnZSB3aGljaAorcXVpY2tseSBhbmQgY2xlYXJseSBjb21tdW5pY2F0ZXMgaXRzIHB1cnBvc2UgdG8gdGhlIHJlc3Qgb2YgdGhlIHdvcmxkLiAgVG8KK3RoYXQgZW5kLCBlYWNoIHBhdGNoIHdpbGwgYmUgY29tcG9zZWQgb2YgdGhlIGZvbGxvd2luZzoKKworIC0gQW4gb3B0aW9uYWwgIkZyb20iIGxpbmUgbmFtaW5nIHRoZSBhdXRob3Igb2YgdGhlIHBhdGNoLiAgVGhpcyBsaW5lIGlzCisgICBvbmx5IG5lY2Vzc2FyeSBpZiB5b3UgYXJlIHBhc3Npbmcgb24gc29tZWJvZHkgZWxzZSdzIHBhdGNoIHZpYSBlbWFpbCwKKyAgIGJ1dCBpdCBuZXZlciBodXJ0cyB0byBhZGQgaXQgd2hlbiBpbiBkb3VidC4KKworIC0gQSBvbmUtbGluZSBkZXNjcmlwdGlvbiBvZiB3aGF0IHRoZSBwYXRjaCBkb2VzLiAgVGhpcyBtZXNzYWdlIHNob3VsZCBiZQorICAgZW5vdWdoIGZvciBhIHJlYWRlciB3aG8gc2VlcyBpdCB3aXRoIG5vIG90aGVyIGNvbnRleHQgdG8gZmlndXJlIG91dCB0aGUKKyAgIHNjb3BlIG9mIHRoZSBwYXRjaDsgaXQgaXMgdGhlIGxpbmUgdGhhdCB3aWxsIHNob3cgdXAgaW4gdGhlICJzaG9ydCBmb3JtIgorICAgY2hhbmdlbG9ncy4gIFRoaXMgbWVzc2FnZSBpcyB1c3VhbGx5IGZvcm1hdHRlZCB3aXRoIHRoZSByZWxldmFudAorICAgc3Vic3lzdGVtIG5hbWUgZmlyc3QsIGZvbGxvd2VkIGJ5IHRoZSBwdXJwb3NlIG9mIHRoZSBwYXRjaC4gIEZvcgorICAgZXhhbXBsZToKKworCWdwaW86IGZpeCBidWlsZCBvbiBDT05GSUdfR1BJT19TWVNGUz1uCisKKyAtIEEgYmxhbmsgbGluZSBmb2xsb3dlZCBieSBhIGRldGFpbGVkIGRlc2NyaXB0aW9uIG9mIHRoZSBjb250ZW50cyBvZiB0aGUKKyAgIHBhdGNoLiAgVGhpcyBkZXNjcmlwdGlvbiBjYW4gYmUgYXMgbG9uZyBhcyBpcyByZXF1aXJlZDsgaXQgc2hvdWxkIHNheQorICAgd2hhdCB0aGUgcGF0Y2ggZG9lcyBhbmQgd2h5IGl0IHNob3VsZCBiZSBhcHBsaWVkIHRvIHRoZSBrZXJuZWwuCisKKyAtIE9uZSBvciBtb3JlIHRhZyBsaW5lcywgd2l0aCwgYXQgYSBtaW5pbXVtLCBvbmUgU2lnbmVkLW9mZi1ieTogbGluZSBmcm9tCisgICB0aGUgYXV0aG9yIG9mIHRoZSBwYXRjaC4gIFRhZ3Mgd2lsbCBiZSBkZXNjcmliZWQgaW4gbW9yZSBkZXRhaWwgYmVsb3cuCisKK1RoZSBhYm92ZSB0aHJlZSBpdGVtcyBzaG91bGQsIG5vcm1hbGx5LCBiZSB0aGUgdGV4dCB1c2VkIHdoZW4gY29tbWl0dGluZwordGhlIGNoYW5nZSB0byBhIHJldmlzaW9uIGNvbnRyb2wgc3lzdGVtLiAgVGhleSBhcmUgZm9sbG93ZWQgYnk6CisKKyAtIFRoZSBwYXRjaCBpdHNlbGYsIGluIHRoZSB1bmlmaWVkICgiLXUiKSBwYXRjaCBmb3JtYXQuICBVc2luZyB0aGUgIi1wIgorICAgb3B0aW9uIHRvIGRpZmYgd2lsbCBhc3NvY2lhdGUgZnVuY3Rpb24gbmFtZXMgd2l0aCBjaGFuZ2VzLCBtYWtpbmcgdGhlCisgICByZXN1bHRpbmcgcGF0Y2ggZWFzaWVyIGZvciBvdGhlcnMgdG8gcmVhZC4KKworWW91IHNob3VsZCBhdm9pZCBpbmNsdWRpbmcgY2hhbmdlcyB0byBpcnJlbGV2YW50IGZpbGVzICh0aG9zZSBnZW5lcmF0ZWQgYnkKK3RoZSBidWlsZCBwcm9jZXNzLCBmb3IgZXhhbXBsZSwgb3IgZWRpdG9yIGJhY2t1cCBmaWxlcykgaW4gdGhlIHBhdGNoLiAgVGhlCitmaWxlICJkb250ZGlmZiIgaW4gdGhlIERvY3VtZW50YXRpb24gZGlyZWN0b3J5IGNhbiBoZWxwIGluIHRoaXMgcmVnYXJkOworcGFzcyBpdCB0byBkaWZmIHdpdGggdGhlICItWCIgb3B0aW9uLgorCitUaGUgdGFncyBtZW50aW9uZWQgYWJvdmUgYXJlIHVzZWQgdG8gZGVzY3JpYmUgaG93IHZhcmlvdXMgZGV2ZWxvcGVycyBoYXZlCitiZWVuIGFzc29jaWF0ZWQgd2l0aCB0aGUgZGV2ZWxvcG1lbnQgb2YgdGhpcyBwYXRjaC4gIFRoZXkgYXJlIGRlc2NyaWJlZCBpbgorZGV0YWlsIGluIHRoZSBTdWJtaXR0aW5nUGF0Y2hlcyBkb2N1bWVudDsgd2hhdCBmb2xsb3dzIGhlcmUgaXMgYSBicmllZgorc3VtbWFyeS4gIEVhY2ggb2YgdGhlc2UgbGluZXMgaGFzIHRoZSBmb3JtYXQ6CisKKwl0YWc6IEZ1bGwgTmFtZSA8ZW1haWwgYWRkcmVzcz4gIG9wdGlvbmFsLW90aGVyLXN0dWZmCisKK1RoZSB0YWdzIGluIGNvbW1vbiB1c2UgYXJlOgorCisgLSBTaWduZWQtb2ZmLWJ5OiB0aGlzIGlzIGEgZGV2ZWxvcGVyJ3MgY2VydGlmaWNhdGlvbiB0aGF0IGhlIG9yIHNoZSBoYXMKKyAgIHRoZSByaWdodCB0byBzdWJtaXQgdGhlIHBhdGNoIGZvciBpbmNsdXNpb24gaW50byB0aGUga2VybmVsLiAgSXQgaXMgYW4KKyAgIGFncmVlbWVudCB0byB0aGUgRGV2ZWxvcGVyJ3MgQ2VydGlmaWNhdGUgb2YgT3JpZ2luLCB0aGUgZnVsbCB0ZXh0IG9mCisgICB3aGljaCBjYW4gYmUgZm91bmQgaW4gRG9jdW1lbnRhdGlvbi9TdWJtaXR0aW5nUGF0Y2hlcy4gIENvZGUgd2l0aG91dCBhCisgICBwcm9wZXIgc2lnbm9mZiBjYW5ub3QgYmUgbWVyZ2VkIGludG8gdGhlIG1haW5saW5lLgorCisgLSBBY2tlZC1ieTogaW5kaWNhdGVzIGFuIGFncmVlbWVudCBieSBhbm90aGVyIGRldmVsb3BlciAob2Z0ZW4gYQorICAgbWFpbnRhaW5lciBvZiB0aGUgcmVsZXZhbnQgY29kZSkgdGhhdCB0aGUgcGF0Y2ggaXMgYXBwcm9wcmlhdGUgZm9yCisgICBpbmNsdXNpb24gaW50byB0aGUga2VybmVsLgorCisgLSBUZXN0ZWQtYnk6IHN0YXRlcyB0aGF0IHRoZSBuYW1lZCBwZXJzb24gaGFzIHRlc3RlZCB0aGUgcGF0Y2ggYW5kIGZvdW5kCisgICBpdCB0byB3b3JrLgorCisgLSBSZXZpZXdlZC1ieTogdGhlIG5hbWVkIGRldmVsb3BlciBoYXMgcmV2aWV3ZWQgdGhlIHBhdGNoIGZvciBjb3JyZWN0bmVzczsKKyAgIHNlZSB0aGUgcmV2aWV3ZXIncyBzdGF0ZW1lbnQgaW4gRG9jdW1lbnRhdGlvbi9TdWJtaXR0aW5nUGF0Y2hlcyBmb3IgbW9yZQorICAgZGV0YWlsLgorCisgLSBSZXBvcnRlZC1ieTogbmFtZXMgYSB1c2VyIHdobyByZXBvcnRlZCBhIHByb2JsZW0gd2hpY2ggaXMgZml4ZWQgYnkgdGhpcworICAgcGF0Y2g7IHRoaXMgdGFnIGlzIHVzZWQgdG8gZ2l2ZSBjcmVkaXQgdG8gdGhlIChvZnRlbiB1bmRlcmFwcHJlY2lhdGVkKQorICAgcGVvcGxlIHdobyB0ZXN0IG91ciBjb2RlIGFuZCBsZXQgdXMga25vdyB3aGVuIHRoaW5ncyBkbyBub3Qgd29yaworICAgY29ycmVjdGx5LgorCisgLSBDYzogdGhlIG5hbWVkIHBlcnNvbiByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIHBhdGNoIGFuZCBoYWQgdGhlCisgICBvcHBvcnR1bml0eSB0byBjb21tZW50IG9uIGl0LgorCitCZSBjYXJlZnVsIGluIHRoZSBhZGRpdGlvbiBvZiB0YWdzIHRvIHlvdXIgcGF0Y2hlczogb25seSBDYzogaXMgYXBwcm9wcmlhdGUKK2ZvciBhZGRpdGlvbiB3aXRob3V0IHRoZSBleHBsaWNpdCBwZXJtaXNzaW9uIG9mIHRoZSBwZXJzb24gbmFtZWQuCisKKworNS41OiBTRU5ESU5HIFRIRSBQQVRDSAorCitCZWZvcmUgeW91IG1haWwgeW91ciBwYXRjaGVzLCB0aGVyZSBhcmUgYSBjb3VwbGUgb2Ygb3RoZXIgdGhpbmdzIHlvdSBzaG91bGQKK3Rha2UgY2FyZSBvZjoKKworIC0gQXJlIHlvdSBzdXJlIHRoYXQgeW91ciBtYWlsZXIgd2lsbCBub3QgY29ycnVwdCB0aGUgcGF0Y2hlcz8gIFBhdGNoZXMKKyAgIHdoaWNoIGhhdmUgaGFkIGdyYXR1aXRvdXMgd2hpdGUtc3BhY2UgY2hhbmdlcyBvciBsaW5lIHdyYXBwaW5nIHBlcmZvcm1lZAorICAgYnkgdGhlIG1haWwgY2xpZW50IHdpbGwgbm90IGFwcGx5IGF0IHRoZSBvdGhlciBlbmQsIGFuZCBvZnRlbiB3aWxsIG5vdAorICAgYmUgZXhhbWluZWQgaW4gYW55IGRldGFpbC4gIElmIHRoZXJlIGlzIGFueSBkb3VidCBhdCBhbGwsIG1haWwgdGhlIHBhdGNoCisgICB0byB5b3Vyc2VsZiBhbmQgY29udmluY2UgeW91cnNlbGYgdGhhdCBpdCBzaG93cyB1cCBpbnRhY3QuICAKKworICAgRG9jdW1lbnRhdGlvbi9lbWFpbC1jbGllbnRzLnR4dCBoYXMgc29tZSBoZWxwZnVsIGhpbnRzIG9uIG1ha2luZworICAgc3BlY2lmaWMgbWFpbCBjbGllbnRzIHdvcmsgZm9yIHNlbmRpbmcgcGF0Y2hlcy4KKworIC0gQXJlIHlvdSBzdXJlIHlvdXIgcGF0Y2ggaXMgZnJlZSBvZiBzaWxseSBtaXN0YWtlcz8gIFlvdSBzaG91bGQgYWx3YXlzCisgICBydW4gcGF0Y2hlcyB0aHJvdWdoIHNjcmlwdHMvY2hlY2twYXRjaC5wbCBhbmQgYWRkcmVzcyB0aGUgY29tcGxhaW50cyBpdAorICAgY29tZXMgdXAgd2l0aC4gIFBsZWFzZSBiZWFyIGluIG1pbmQgdGhhdCBjaGVja3BhdGNoLnBsLCB3aGlsZSBiZWluZyB0aGUKKyAgIGVtYm9kaW1lbnQgb2YgYSBmYWlyIGFtb3VudCBvZiB0aG91Z2h0IGFib3V0IHdoYXQga2VybmVsIHBhdGNoZXMgc2hvdWxkCisgICBsb29rIGxpa2UsIGlzIG5vdCBzbWFydGVyIHRoYW4geW91LiAgSWYgZml4aW5nIGEgY2hlY2twYXRjaC5wbCBjb21wbGFpbnQKKyAgIHdvdWxkIG1ha2UgdGhlIGNvZGUgd29yc2UsIGRvbid0IGRvIGl0LgorCitQYXRjaGVzIHNob3VsZCBhbHdheXMgYmUgc2VudCBhcyBwbGFpbiB0ZXh0LiAgUGxlYXNlIGRvIG5vdCBzZW5kIHRoZW0gYXMKK2F0dGFjaG1lbnRzOyB0aGF0IG1ha2VzIGl0IG11Y2ggaGFyZGVyIGZvciByZXZpZXdlcnMgdG8gcXVvdGUgc2VjdGlvbnMgb2YKK3RoZSBwYXRjaCBpbiB0aGVpciByZXBsaWVzLiAgSW5zdGVhZCwganVzdCBwdXQgdGhlIHBhdGNoIGRpcmVjdGx5IGludG8geW91cgorbWVzc2FnZS4KKworV2hlbiBtYWlsaW5nIHBhdGNoZXMsIGl0IGlzIGltcG9ydGFudCB0byBzZW5kIGNvcGllcyB0byBhbnlib2R5IHdobyBtaWdodAorYmUgaW50ZXJlc3RlZCBpbiBpdC4gIFVubGlrZSBzb21lIG90aGVyIHByb2plY3RzLCB0aGUga2VybmVsIGVuY291cmFnZXMKK3Blb3BsZSB0byBlcnIgb24gdGhlIHNpZGUgb2Ygc2VuZGluZyB0b28gbWFueSBjb3BpZXM7IGRvbid0IGFzc3VtZSB0aGF0IHRoZQorcmVsZXZhbnQgcGVvcGxlIHdpbGwgc2VlIHlvdXIgcG9zdGluZyBvbiB0aGUgbWFpbGluZyBsaXN0cy4gIEluIHBhcnRpY3VsYXIsCitjb3BpZXMgc2hvdWxkIGdvIHRvOgorCisgLSBUaGUgbWFpbnRhaW5lcihzKSBvZiB0aGUgYWZmZWN0ZWQgc3Vic3lzdGVtKHMpLiAgQXMgZGVzY3JpYmVkIGVhcmxpZXIsCisgICB0aGUgTUFJTlRBSU5FUlMgZmlsZSBpcyB0aGUgZmlyc3QgcGxhY2UgdG8gbG9vayBmb3IgdGhlc2UgcGVvcGxlLgorCisgLSBPdGhlciBkZXZlbG9wZXJzIHdobyBoYXZlIGJlZW4gd29ya2luZyBpbiB0aGUgc2FtZSBhcmVhIC0gZXNwZWNpYWxseQorICAgdGhvc2Ugd2hvIG1pZ2h0IGJlIHdvcmtpbmcgdGhlcmUgbm93LiAgVXNpbmcgZ2l0IHRvIHNlZSB3aG8gZWxzZSBoYXMKKyAgIG1vZGlmaWVkIHRoZSBmaWxlcyB5b3UgYXJlIHdvcmtpbmcgb24gY2FuIGJlIGhlbHBmdWwuCisKKyAtIElmIHlvdSBhcmUgcmVzcG9uZGluZyB0byBhIGJ1ZyByZXBvcnQgb3IgYSBmZWF0dXJlIHJlcXVlc3QsIGNvcHkgdGhlCisgICBvcmlnaW5hbCBwb3N0ZXIgYXMgd2VsbC4KKworIC0gU2VuZCBhIGNvcHkgdG8gdGhlIHJlbGV2YW50IG1haWxpbmcgbGlzdCwgb3IsIGlmIG5vdGhpbmcgZWxzZSBhcHBsaWVzLAorICAgdGhlIGxpbnV4LWtlcm5lbCBsaXN0LgorCisgLSBJZiB5b3UgYXJlIGZpeGluZyBhIGJ1ZywgdGhpbmsgYWJvdXQgd2hldGhlciB0aGUgZml4IHNob3VsZCBnbyBpbnRvIHRoZQorICAgbmV4dCBzdGFibGUgdXBkYXRlLiAgSWYgc28sIHN0YWJsZUBrZXJuZWwub3JnIHNob3VsZCBnZXQgYSBjb3B5IG9mIHRoZQorICAgcGF0Y2guICBBbHNvIGFkZCBhICJDYzogc3RhYmxlQGtlcm5lbC5vcmciIHRvIHRoZSB0YWdzIHdpdGhpbiB0aGUgcGF0Y2gKKyAgIGl0c2VsZjsgdGhhdCB3aWxsIGNhdXNlIHRoZSBzdGFibGUgdGVhbSB0byBnZXQgYSBub3RpZmljYXRpb24gd2hlbiB5b3VyCisgICBmaXggZ29lcyBpbnRvIHRoZSBtYWlubGluZS4KKworV2hlbiBzZWxlY3RpbmcgcmVjaXBpZW50cyBmb3IgYSBwYXRjaCwgaXQgaXMgZ29vZCB0byBoYXZlIGFuIGlkZWEgb2Ygd2hvCit5b3UgdGhpbmsgd2lsbCBldmVudHVhbGx5IGFjY2VwdCB0aGUgcGF0Y2ggYW5kIGdldCBpdCBtZXJnZWQuICBXaGlsZSBpdAoraXMgcG9zc2libGUgdG8gc2VuZCBwYXRjaGVzIGRpcmVjdGx5IHRvIExpbnVzIFRvcnZhbGRzIGFuZCBoYXZlIGhpbSBtZXJnZQordGhlbSwgdGhpbmdzIGFyZSBub3Qgbm9ybWFsbHkgZG9uZSB0aGF0IHdheS4gIExpbnVzIGlzIGJ1c3ksIGFuZCB0aGVyZSBhcmUKK3N1YnN5c3RlbSBtYWludGFpbmVycyB3aG8gd2F0Y2ggb3ZlciBzcGVjaWZpYyBwYXJ0cyBvZiB0aGUga2VybmVsLiAgVXN1YWxseQoreW91IHdpbGwgYmUgd2FudGluZyB0aGF0IG1haW50YWluZXIgdG8gbWVyZ2UgeW91ciBwYXRjaGVzLiAgSWYgdGhlcmUgaXMgbm8KK29idmlvdXMgbWFpbnRhaW5lciwgQW5kcmV3IE1vcnRvbiBpcyBvZnRlbiB0aGUgcGF0Y2ggdGFyZ2V0IG9mIGxhc3QgcmVzb3J0LgorCitQYXRjaGVzIG5lZWQgZ29vZCBzdWJqZWN0IGxpbmVzLiAgVGhlIGNhbm9uaWNhbCBmb3JtYXQgZm9yIGEgcGF0Y2ggbGluZSBpcworc29tZXRoaW5nIGxpa2U6CisKKwlbUEFUQ0ggbm4vbW1dIHN1YnN5czogb25lLWxpbmUgZGVzY3JpcHRpb24gb2YgdGhlIHBhdGNoCisKK3doZXJlICJubiIgaXMgdGhlIG9yZGluYWwgbnVtYmVyIG9mIHRoZSBwYXRjaCwgIm1tIiBpcyB0aGUgdG90YWwgbnVtYmVyIG9mCitwYXRjaGVzIGluIHRoZSBzZXJpZXMsIGFuZCAic3Vic3lzIiBpcyB0aGUgbmFtZSBvZiB0aGUgYWZmZWN0ZWQgc3Vic3lzdGVtLgorQ2xlYXJseSwgbm4vbW0gY2FuIGJlIG9taXR0ZWQgZm9yIGEgc2luZ2xlLCBzdGFuZGFsb25lIHBhdGNoLiAgCisKK0lmIHlvdSBoYXZlIGEgc2lnbmlmaWNhbnQgc2VyaWVzIG9mIHBhdGNoZXMsIGl0IGlzIGN1c3RvbWFyeSB0byBzZW5kIGFuCitpbnRyb2R1Y3RvcnkgZGVzY3JpcHRpb24gYXMgcGFydCB6ZXJvLiAgVGhpcyBjb252ZW50aW9uIGlzIG5vdCB1bml2ZXJzYWxseQorZm9sbG93ZWQgdGhvdWdoOyBpZiB5b3UgdXNlIGl0LCByZW1lbWJlciB0aGF0IGluZm9ybWF0aW9uIGluIHRoZQoraW50cm9kdWN0aW9uIGRvZXMgbm90IG1ha2UgaXQgaW50byB0aGUga2VybmVsIGNoYW5nZWxvZ3MuICBTbyBwbGVhc2UgZW5zdXJlCit0aGF0IHRoZSBwYXRjaGVzLCB0aGVtc2VsdmVzLCBoYXZlIGNvbXBsZXRlIGNoYW5nZWxvZyBpbmZvcm1hdGlvbi4KKworSW4gZ2VuZXJhbCwgdGhlIHNlY29uZCBhbmQgZm9sbG93aW5nIHBhcnRzIG9mIGEgbXVsdGktcGFydCBwYXRjaCBzaG91bGQgYmUKK3NlbnQgYXMgYSByZXBseSB0byB0aGUgZmlyc3QgcGFydCBzbyB0aGF0IHRoZXkgYWxsIHRocmVhZCB0b2dldGhlciBhdCB0aGUKK3JlY2VpdmluZyBlbmQuICBUb29scyBsaWtlIGdpdCBhbmQgcXVpbHQgaGF2ZSBjb21tYW5kcyB0byBtYWlsIG91dCBhIHNldCBvZgorcGF0Y2hlcyB3aXRoIHRoZSBwcm9wZXIgdGhyZWFkaW5nLiAgSWYgeW91IGhhdmUgYSBsb25nIHNlcmllcywgdGhvdWdoLCBhbmQKK2FyZSB1c2luZyBnaXQsIHBsZWFzZSBwcm92aWRlIHRoZSAtLW5vLWNoYWluLXJlcGx5LXRvIG9wdGlvbiB0byBhdm9pZAorY3JlYXRpbmcgZXhjZXB0aW9uYWxseSBkZWVwIG5lc3RpbmcuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmVsb3BtZW50LXByb2Nlc3MvNi5Gb2xsb3d0aHJvdWdoIGIvRG9jdW1lbnRhdGlvbi9kZXZlbG9wbWVudC1wcm9jZXNzLzYuRm9sbG93dGhyb3VnaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOGZiYTNkOAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZGV2ZWxvcG1lbnQtcHJvY2Vzcy82LkZvbGxvd3Rocm91Z2gKQEAgLTAsMCArMSwyMDIgQEAKKzY6IEZPTExPV1RIUk9VR0gKKworQXQgdGhpcyBwb2ludCwgeW91IGhhdmUgZm9sbG93ZWQgdGhlIGd1aWRlbGluZXMgZ2l2ZW4gc28gZmFyIGFuZCwgd2l0aCB0aGUKK2FkZGl0aW9uIG9mIHlvdXIgb3duIGVuZ2luZWVyaW5nIHNraWxscywgaGF2ZSBwb3N0ZWQgYSBwZXJmZWN0IHNlcmllcyBvZgorcGF0Y2hlcy4gIE9uZSBvZiB0aGUgYmlnZ2VzdCBtaXN0YWtlcyB0aGF0IGV2ZW4gZXhwZXJpZW5jZWQga2VybmVsCitkZXZlbG9wZXJzIGNhbiBtYWtlIGlzIHRvIGNvbmNsdWRlIHRoYXQgdGhlaXIgd29yayBpcyBub3cgZG9uZS4gIEluIHRydXRoLAorcG9zdGluZyBwYXRjaGVzIGluZGljYXRlcyBhIHRyYW5zaXRpb24gaW50byB0aGUgbmV4dCBzdGFnZSBvZiB0aGUgcHJvY2VzcywKK3dpdGgsIHBvc3NpYmx5LCBxdWl0ZSBhIGJpdCBvZiB3b3JrIHlldCB0byBiZSBkb25lLgorCitJdCBpcyBhIHJhcmUgcGF0Y2ggd2hpY2ggaXMgc28gZ29vZCBhdCBpdHMgZmlyc3QgcG9zdGluZyB0aGF0IHRoZXJlIGlzIG5vCityb29tIGZvciBpbXByb3ZlbWVudC4gIFRoZSBrZXJuZWwgZGV2ZWxvcG1lbnQgcHJvY2VzcyByZWNvZ25pemVzIHRoaXMgZmFjdCwKK2FuZCwgYXMgYSByZXN1bHQsIGlzIGhlYXZpbHkgb3JpZW50ZWQgdG93YXJkIHRoZSBpbXByb3ZlbWVudCBvZiBwb3N0ZWQKK2NvZGUuICBZb3UsIGFzIHRoZSBhdXRob3Igb2YgdGhhdCBjb2RlLCB3aWxsIGJlIGV4cGVjdGVkIHRvIHdvcmsgd2l0aCB0aGUKK2tlcm5lbCBjb21tdW5pdHkgdG8gZW5zdXJlIHRoYXQgeW91ciBjb2RlIGlzIHVwIHRvIHRoZSBrZXJuZWwncyBxdWFsaXR5CitzdGFuZGFyZHMuICBBIGZhaWx1cmUgdG8gcGFydGljaXBhdGUgaW4gdGhpcyBwcm9jZXNzIGlzIHF1aXRlIGxpa2VseSB0bworcHJldmVudCB0aGUgaW5jbHVzaW9uIG9mIHlvdXIgcGF0Y2hlcyBpbnRvIHRoZSBtYWlubGluZS4KKworCis2LjE6IFdPUktJTkcgV0lUSCBSRVZJRVdFUlMKKworQSBwYXRjaCBvZiBhbnkgc2lnbmlmaWNhbmNlIHdpbGwgcmVzdWx0IGluIGEgbnVtYmVyIG9mIGNvbW1lbnRzIGZyb20gb3RoZXIKK2RldmVsb3BlcnMgYXMgdGhleSByZXZpZXcgdGhlIGNvZGUuICBXb3JraW5nIHdpdGggcmV2aWV3ZXJzIGNhbiBiZSwgZm9yCittYW55IGRldmVsb3BlcnMsIHRoZSBtb3N0IGludGltaWRhdGluZyBwYXJ0IG9mIHRoZSBrZXJuZWwgZGV2ZWxvcG1lbnQKK3Byb2Nlc3MuICBMaWZlIGNhbiBiZSBtYWRlIG11Y2ggZWFzaWVyLCB0aG91Z2gsIGlmIHlvdSBrZWVwIGEgZmV3IHRoaW5ncyBpbgorbWluZDoKKworIC0gSWYgeW91IGhhdmUgZXhwbGFpbmVkIHlvdXIgcGF0Y2ggd2VsbCwgcmV2aWV3ZXJzIHdpbGwgdW5kZXJzdGFuZCBpdHMKKyAgIHZhbHVlIGFuZCB3aHkgeW91IHdlbnQgdG8gdGhlIHRyb3VibGUgb2Ygd3JpdGluZyBpdC4gIEJ1dCB0aGF0IHZhbHVlCisgICB3aWxsIG5vdCBrZWVwIHRoZW0gZnJvbSBhc2tpbmcgYSBmdW5kYW1lbnRhbCBxdWVzdGlvbjogd2hhdCB3aWxsIGl0IGJlCisgICBsaWtlIHRvIG1haW50YWluIGEga2VybmVsIHdpdGggdGhpcyBjb2RlIGluIGl0IGZpdmUgb3IgdGVuIHllYXJzIGxhdGVyPworICAgTWFueSBvZiB0aGUgY2hhbmdlcyB5b3UgbWF5IGJlIGFza2VkIHRvIG1ha2UgLSBmcm9tIGNvZGluZyBzdHlsZSB0d2Vha3MKKyAgIHRvIHN1YnN0YW50aWFsIHJld3JpdGVzIC0gY29tZSBmcm9tIHRoZSB1bmRlcnN0YW5kaW5nIHRoYXQgTGludXggd2lsbAorICAgc3RpbGwgYmUgYXJvdW5kIGFuZCB1bmRlciBkZXZlbG9wbWVudCBhIGRlY2FkZSBmcm9tIG5vdy4KKworIC0gQ29kZSByZXZpZXcgaXMgaGFyZCB3b3JrLCBhbmQgaXQgaXMgYSByZWxhdGl2ZWx5IHRoYW5rbGVzcyBvY2N1cGF0aW9uOworICAgcGVvcGxlIHJlbWVtYmVyIHdobyB3cm90ZSBrZXJuZWwgY29kZSwgYnV0IHRoZXJlIGlzIGxpdHRsZSBsYXN0aW5nIGZhbWUKKyAgIGZvciB0aG9zZSB3aG8gcmV2aWV3ZWQgaXQuICBTbyByZXZpZXdlcnMgY2FuIGdldCBncnVtcHksIGVzcGVjaWFsbHkgd2hlbgorICAgdGhleSBzZWUgdGhlIHNhbWUgbWlzdGFrZXMgYmVpbmcgbWFkZSBvdmVyIGFuZCBvdmVyIGFnYWluLiAgSWYgeW91IGdldCBhCisgICByZXZpZXcgd2hpY2ggc2VlbXMgYW5ncnksIGluc3VsdGluZywgb3Igb3V0cmlnaHQgb2ZmZW5zaXZlLCByZXNpc3QgdGhlCisgICBpbXB1bHNlIHRvIHJlc3BvbmQgaW4ga2luZC4gIENvZGUgcmV2aWV3IGlzIGFib3V0IHRoZSBjb2RlLCBub3QgYWJvdXQKKyAgIHRoZSBwZW9wbGUsIGFuZCBjb2RlIHJldmlld2VycyBhcmUgbm90IGF0dGFja2luZyB5b3UgcGVyc29uYWxseS4KKworIC0gU2ltaWxhcmx5LCBjb2RlIHJldmlld2VycyBhcmUgbm90IHRyeWluZyB0byBwcm9tb3RlIHRoZWlyIGVtcGxveWVycycKKyAgIGFnZW5kYXMgYXQgdGhlIGV4cGVuc2Ugb2YgeW91ciBvd24uICBLZXJuZWwgZGV2ZWxvcGVycyBvZnRlbiBleHBlY3QgdG8KKyAgIGJlIHdvcmtpbmcgb24gdGhlIGtlcm5lbCB5ZWFycyBmcm9tIG5vdywgYnV0IHRoZXkgdW5kZXJzdGFuZCB0aGF0IHRoZWlyCisgICBlbXBsb3llciBjb3VsZCBjaGFuZ2UuICBUaGV5IHRydWx5IGFyZSwgYWxtb3N0IHdpdGhvdXQgZXhjZXB0aW9uLAorICAgd29ya2luZyB0b3dhcmQgdGhlIGNyZWF0aW9uIG9mIHRoZSBiZXN0IGtlcm5lbCB0aGV5IGNhbjsgdGhleSBhcmUgbm90CisgICB0cnlpbmcgdG8gY3JlYXRlIGRpc2NvbWZvcnQgZm9yIHRoZWlyIGVtcGxveWVycycgY29tcGV0aXRvcnMuCisKK1doYXQgYWxsIG9mIHRoaXMgY29tZXMgZG93biB0byBpcyB0aGF0LCB3aGVuIHJldmlld2VycyBzZW5kIHlvdSBjb21tZW50cywKK3lvdSBuZWVkIHRvIHBheSBhdHRlbnRpb24gdG8gdGhlIHRlY2huaWNhbCBvYnNlcnZhdGlvbnMgdGhhdCB0aGV5IGFyZQorbWFraW5nLiAgRG8gbm90IGxldCB0aGVpciBmb3JtIG9mIGV4cHJlc3Npb24gb3IgeW91ciBvd24gcHJpZGUga2VlcCB0aGF0Citmcm9tIGhhcHBlbmluZy4gIFdoZW4geW91IGdldCByZXZpZXcgY29tbWVudHMgb24gYSBwYXRjaCwgdGFrZSB0aGUgdGltZSB0bwordW5kZXJzdGFuZCB3aGF0IHRoZSByZXZpZXdlciBpcyB0cnlpbmcgdG8gc2F5LiAgSWYgcG9zc2libGUsIGZpeCB0aGUgdGhpbmdzCit0aGF0IHRoZSByZXZpZXdlciBpcyBhc2tpbmcgeW91IHRvIGZpeC4gIEFuZCByZXNwb25kIGJhY2sgdG8gdGhlIHJldmlld2VyOgordGhhbmsgdGhlbSwgYW5kIGRlc2NyaWJlIGhvdyB5b3Ugd2lsbCBhbnN3ZXIgdGhlaXIgcXVlc3Rpb25zLgorCitOb3RlIHRoYXQgeW91IGRvIG5vdCBoYXZlIHRvIGFncmVlIHdpdGggZXZlcnkgY2hhbmdlIHN1Z2dlc3RlZCBieQorcmV2aWV3ZXJzLiAgSWYgeW91IGJlbGlldmUgdGhhdCB0aGUgcmV2aWV3ZXIgaGFzIG1pc3VuZGVyc3Rvb2QgeW91ciBjb2RlLAorZXhwbGFpbiB3aGF0IGlzIHJlYWxseSBnb2luZyBvbi4gIElmIHlvdSBoYXZlIGEgdGVjaG5pY2FsIG9iamVjdGlvbiB0byBhCitzdWdnZXN0ZWQgY2hhbmdlLCBkZXNjcmliZSBpdCBhbmQganVzdGlmeSB5b3VyIHNvbHV0aW9uIHRvIHRoZSBwcm9ibGVtLiAgSWYKK3lvdXIgZXhwbGFuYXRpb25zIG1ha2Ugc2Vuc2UsIHRoZSByZXZpZXdlciB3aWxsIGFjY2VwdCB0aGVtLiAgU2hvdWxkIHlvdXIKK2V4cGxhbmF0aW9uIG5vdCBwcm92ZSBwZXJzdWFzaXZlLCB0aG91Z2gsIGVzcGVjaWFsbHkgaWYgb3RoZXJzIHN0YXJ0IHRvCithZ3JlZSB3aXRoIHRoZSByZXZpZXdlciwgdGFrZSBzb21lIHRpbWUgdG8gdGhpbmsgdGhpbmdzIG92ZXIgYWdhaW4uICBJdCBjYW4KK2JlIGVhc3kgdG8gYmVjb21lIGJsaW5kZWQgYnkgeW91ciBvd24gc29sdXRpb24gdG8gYSBwcm9ibGVtIHRvIHRoZSBwb2ludAordGhhdCB5b3UgZG9uJ3QgcmVhbGl6ZSB0aGF0IHNvbWV0aGluZyBpcyBmdW5kYW1lbnRhbGx5IHdyb25nIG9yLCBwZXJoYXBzLAoreW91J3JlIG5vdCBldmVuIHNvbHZpbmcgdGhlIHJpZ2h0IHByb2JsZW0uCisKK09uZSBmYXRhbCBtaXN0YWtlIGlzIHRvIGlnbm9yZSByZXZpZXcgY29tbWVudHMgaW4gdGhlIGhvcGUgdGhhdCB0aGV5IHdpbGwKK2dvIGF3YXkuICBUaGV5IHdpbGwgbm90IGdvIGF3YXkuICBJZiB5b3UgcmVwb3N0IGNvZGUgd2l0aG91dCBoYXZpbmcKK3Jlc3BvbmRlZCB0byB0aGUgY29tbWVudHMgeW91IGdvdCB0aGUgdGltZSBiZWZvcmUsIHlvdSdyZSBsaWtlbHkgdG8gZmluZAordGhhdCB5b3VyIHBhdGNoZXMgZ28gbm93aGVyZS4KKworU3BlYWtpbmcgb2YgcmVwb3N0aW5nIGNvZGU6IHBsZWFzZSBiZWFyIGluIG1pbmQgdGhhdCByZXZpZXdlcnMgYXJlIG5vdAorZ29pbmcgdG8gcmVtZW1iZXIgYWxsIHRoZSBkZXRhaWxzIG9mIHRoZSBjb2RlIHlvdSBwb3N0ZWQgdGhlIGxhc3QgdGltZQorYXJvdW5kLiAgU28gaXQgaXMgYWx3YXlzIGEgZ29vZCBpZGVhIHRvIHJlbWluZCByZXZpZXdlcnMgb2YgcHJldmlvdXNseQorcmFpc2VkIGlzc3VlcyBhbmQgaG93IHlvdSBkZWFsdCB3aXRoIHRoZW07IHRoZSBwYXRjaCBjaGFuZ2Vsb2cgaXMgYSBnb29kCitwbGFjZSBmb3IgdGhpcyBraW5kIG9mIGluZm9ybWF0aW9uLiAgUmV2aWV3ZXJzIHNob3VsZCBub3QgaGF2ZSB0byBzZWFyY2gKK3Rocm91Z2ggbGlzdCBhcmNoaXZlcyB0byBmYW1pbGlhcml6ZSB0aGVtc2VsdmVzIHdpdGggd2hhdCB3YXMgc2FpZCBsYXN0Cit0aW1lOyBpZiB5b3UgaGVscCB0aGVtIGdldCBhIHJ1bm5pbmcgc3RhcnQsIHRoZXkgd2lsbCBiZSBpbiBhIGJldHRlciBtb29kCit3aGVuIHRoZXkgcmV2aXNpdCB5b3VyIGNvZGUuCisKK1doYXQgaWYgeW91J3ZlIHRyaWVkIHRvIGRvIGV2ZXJ5dGhpbmcgcmlnaHQgYW5kIHRoaW5ncyBzdGlsbCBhcmVuJ3QgZ29pbmcKK2FueXdoZXJlPyAgTW9zdCB0ZWNobmljYWwgZGlzYWdyZWVtZW50cyBjYW4gYmUgcmVzb2x2ZWQgdGhyb3VnaCBkaXNjdXNzaW9uLAorYnV0IHRoZXJlIGFyZSB0aW1lcyB3aGVuIHNvbWVib2R5IHNpbXBseSBoYXMgdG8gbWFrZSBhIGRlY2lzaW9uLiAgSWYgeW91Citob25lc3RseSBiZWxpZXZlIHRoYXQgdGhpcyBkZWNpc2lvbiBpcyBnb2luZyBhZ2FpbnN0IHlvdSB3cm9uZ2x5LCB5b3UgY2FuCithbHdheXMgdHJ5IGFwcGVhbGluZyB0byBhIGhpZ2hlciBwb3dlci4gIEFzIG9mIHRoaXMgd3JpdGluZywgdGhhdCBoaWdoZXIKK3Bvd2VyIHRlbmRzIHRvIGJlIEFuZHJldyBNb3J0b24uICBBbmRyZXcgaGFzIGEgZ3JlYXQgZGVhbCBvZiByZXNwZWN0IGluIHRoZQora2VybmVsIGRldmVsb3BtZW50IGNvbW11bml0eTsgaGUgY2FuIG9mdGVuIHVuamFtIGEgc2l0dWF0aW9uIHdoaWNoIHNlZW1zIHRvCitiZSBob3BlbGVzc2x5IGJsb2NrZWQuICBBcHBlYWxpbmcgdG8gQW5kcmV3IHNob3VsZCBub3QgYmUgZG9uZSBsaWdodGx5LAordGhvdWdoLCBhbmQgbm90IGJlZm9yZSBhbGwgb3RoZXIgYWx0ZXJuYXRpdmVzIGhhdmUgYmVlbiBleHBsb3JlZC4gIEFuZCBiZWFyCitpbiBtaW5kLCBvZiBjb3Vyc2UsIHRoYXQgaGUgbWF5IG5vdCBhZ3JlZSB3aXRoIHlvdSBlaXRoZXIuCisKKworNi4yOiBXSEFUIEhBUFBFTlMgTkVYVAorCitJZiBhIHBhdGNoIGlzIGNvbnNpZGVyZWQgdG8gYmUgYSBnb29kIHRoaW5nIHRvIGFkZCB0byB0aGUga2VybmVsLCBhbmQgb25jZQorbW9zdCBvZiB0aGUgcmV2aWV3IGlzc3VlcyBoYXZlIGJlZW4gcmVzb2x2ZWQsIHRoZSBuZXh0IHN0ZXAgaXMgdXN1YWxseQorZW50cnkgaW50byBhIHN1YnN5c3RlbSBtYWludGFpbmVyJ3MgdHJlZS4gIEhvdyB0aGF0IHdvcmtzIHZhcmllcyBmcm9tIG9uZQorc3Vic3lzdGVtIHRvIHRoZSBuZXh0OyBlYWNoIG1haW50YWluZXIgaGFzIGhpcyBvciBoZXIgb3duIHdheSBvZiBkb2luZwordGhpbmdzLiAgSW4gcGFydGljdWxhciwgdGhlcmUgbWF5IGJlIG1vcmUgdGhhbiBvbmUgdHJlZSAtIG9uZSwgcGVyaGFwcywKK2RlZGljYXRlZCB0byBwYXRjaGVzIHBsYW5uZWQgZm9yIHRoZSBuZXh0IG1lcmdlIHdpbmRvdywgYW5kIGFub3RoZXIgZm9yCitsb25nZXItdGVybSB3b3JrLiAgCisKK0ZvciBwYXRjaGVzIGFwcGx5aW5nIHRvIGFyZWFzIGZvciB3aGljaCB0aGVyZSBpcyBubyBvYnZpb3VzIHN1YnN5c3RlbSB0cmVlCisobWVtb3J5IG1hbmFnZW1lbnQgcGF0Y2hlcywgZm9yIGV4YW1wbGUpLCB0aGUgZGVmYXVsdCB0cmVlIG9mdGVuIGVuZHMgdXAKK2JlaW5nIC1tbS4gIFBhdGNoZXMgd2hpY2ggYWZmZWN0IG11bHRpcGxlIHN1YnN5c3RlbXMgY2FuIGFsc28gZW5kIHVwIGdvaW5nCit0aHJvdWdoIHRoZSAtbW0gdHJlZS4KKworSW5jbHVzaW9uIGludG8gYSBzdWJzeXN0ZW0gdHJlZSBjYW4gYnJpbmcgYSBoaWdoZXIgbGV2ZWwgb2YgdmlzaWJpbGl0eSB0byBhCitwYXRjaC4gIE5vdyBvdGhlciBkZXZlbG9wZXJzIHdvcmtpbmcgd2l0aCB0aGF0IHRyZWUgd2lsbCBnZXQgdGhlIHBhdGNoIGJ5CitkZWZhdWx0LiAgU3Vic3lzdGVtIHRyZWVzIHR5cGljYWxseSBmZWVkIGludG8gLW1tIGFuZCBsaW51eC1uZXh0IGFzIHdlbGwsCittYWtpbmcgdGhlaXIgY29udGVudHMgdmlzaWJsZSB0byB0aGUgZGV2ZWxvcG1lbnQgY29tbXVuaXR5IGFzIGEgd2hvbGUuICBBdAordGhpcyBwb2ludCwgdGhlcmUncyBhIGdvb2QgY2hhbmNlIHRoYXQgeW91IHdpbGwgZ2V0IG1vcmUgY29tbWVudHMgZnJvbSBhCituZXcgc2V0IG9mIHJldmlld2VyczsgdGhlc2UgY29tbWVudHMgbmVlZCB0byBiZSBhbnN3ZXJlZCBhcyBpbiB0aGUgcHJldmlvdXMKK3JvdW5kLgorCitXaGF0IG1heSBhbHNvIGhhcHBlbiBhdCB0aGlzIHBvaW50LCBkZXBlbmRpbmcgb24gdGhlIG5hdHVyZSBvZiB5b3VyIHBhdGNoLAoraXMgdGhhdCBjb25mbGljdHMgd2l0aCB3b3JrIGJlaW5nIGRvbmUgYnkgb3RoZXJzIHR1cm4gdXAuICBJbiB0aGUgd29yc3QKK2Nhc2UsIGhlYXZ5IHBhdGNoIGNvbmZsaWN0cyBjYW4gcmVzdWx0IGluIHNvbWUgd29yayBiZWluZyBwdXQgb24gdGhlIGJhY2sKK2J1cm5lciBzbyB0aGF0IHRoZSByZW1haW5pbmcgcGF0Y2hlcyBjYW4gYmUgd29ya2VkIGludG8gc2hhcGUgYW5kIG1lcmdlZC4KK090aGVyIHRpbWVzLCBjb25mbGljdCByZXNvbHV0aW9uIHdpbGwgaW52b2x2ZSB3b3JraW5nIHdpdGggdGhlIG90aGVyCitkZXZlbG9wZXJzIGFuZCwgcG9zc2libHksIG1vdmluZyBzb21lIHBhdGNoZXMgYmV0d2VlbiB0cmVlcyB0byBlbnN1cmUgdGhhdAorZXZlcnl0aGluZyBhcHBsaWVzIGNsZWFubHkuICBUaGlzIHdvcmsgY2FuIGJlIGEgcGFpbiwgYnV0IGNvdW50IHlvdXIKK2JsZXNzaW5nczogYmVmb3JlIHRoZSBhZHZlbnQgb2YgdGhlIGxpbnV4LW5leHQgdHJlZSwgdGhlc2UgY29uZmxpY3RzIG9mdGVuCitvbmx5IHR1cm5lZCB1cCBkdXJpbmcgdGhlIG1lcmdlIHdpbmRvdyBhbmQgaGFkIHRvIGJlIGFkZHJlc3NlZCBpbiBhIGh1cnJ5LgorTm93IHRoZXkgY2FuIGJlIHJlc29sdmVkIGF0IGxlaXN1cmUsIGJlZm9yZSB0aGUgbWVyZ2Ugd2luZG93IG9wZW5zLgorCitTb21lIGRheSwgaWYgYWxsIGdvZXMgd2VsbCwgeW91J2xsIGxvZyBvbiBhbmQgc2VlIHRoYXQgeW91ciBwYXRjaCBoYXMgYmVlbgorbWVyZ2VkIGludG8gdGhlIG1haW5saW5lIGtlcm5lbC4gIENvbmdyYXR1bGF0aW9ucyEgIE9uY2UgdGhlIGNlbGVicmF0aW9uIGlzCitjb21wbGV0ZSAoYW5kIHlvdSBoYXZlIGFkZGVkIHlvdXJzZWxmIHRvIHRoZSBNQUlOVEFJTkVSUyBmaWxlKSwgdGhvdWdoLCBpdAoraXMgd29ydGggcmVtZW1iZXJpbmcgYW4gaW1wb3J0YW50IGxpdHRsZSBmYWN0OiB0aGUgam9iIHN0aWxsIGlzIG5vdCBkb25lLgorTWVyZ2luZyBpbnRvIHRoZSBtYWlubGluZSBicmluZ3MgaXRzIG93biBjaGFsbGVuZ2VzLgorCitUbyBiZWdpbiB3aXRoLCB0aGUgdmlzaWJpbGl0eSBvZiB5b3VyIHBhdGNoIGhhcyBpbmNyZWFzZWQgeWV0IGFnYWluLiAgVGhlcmUKK21heSBiZSBhIG5ldyByb3VuZCBvZiBjb21tZW50cyBmcm9tIGRldmVsb3BlcnMgd2hvIGhhZCBub3QgYmVlbiBhd2FyZSBvZgordGhlIHBhdGNoIGJlZm9yZS4gIEl0IG1heSBiZSB0ZW1wdGluZyB0byBpZ25vcmUgdGhlbSwgc2luY2UgdGhlcmUgaXMgbm8KK2xvbmdlciBhbnkgcXVlc3Rpb24gb2YgeW91ciBjb2RlIGJlaW5nIG1lcmdlZC4gIFJlc2lzdCB0aGF0IHRlbXB0YXRpb24sCit0aG91Z2g7IHlvdSBzdGlsbCBuZWVkIHRvIGJlIHJlc3BvbnNpdmUgdG8gZGV2ZWxvcGVycyB3aG8gaGF2ZSBxdWVzdGlvbnMgb3IKK3N1Z2dlc3Rpb25zLgorCitNb3JlIGltcG9ydGFudGx5LCB0aG91Z2g6IGluY2x1c2lvbiBpbnRvIHRoZSBtYWlubGluZSBwdXRzIHlvdXIgY29kZSBpbnRvCit0aGUgaGFuZHMgb2YgYSBtdWNoIGxhcmdlciBncm91cCBvZiB0ZXN0ZXJzLiAgRXZlbiBpZiB5b3UgaGF2ZSBjb250cmlidXRlZAorYSBkcml2ZXIgZm9yIGhhcmR3YXJlIHdoaWNoIGlzIG5vdCB5ZXQgYXZhaWxhYmxlLCB5b3Ugd2lsbCBiZSBzdXJwcmlzZWQgYnkKK2hvdyBtYW55IHBlb3BsZSB3aWxsIGJ1aWxkIHlvdXIgY29kZSBpbnRvIHRoZWlyIGtlcm5lbHMuICBBbmQsIG9mIGNvdXJzZSwKK3doZXJlIHRoZXJlIGFyZSB0ZXN0ZXJzLCB0aGVyZSB3aWxsIGJlIGJ1ZyByZXBvcnRzLgorCitUaGUgd29yc3Qgc29ydCBvZiBidWcgcmVwb3J0cyBhcmUgcmVncmVzc2lvbnMuICBJZiB5b3VyIHBhdGNoIGNhdXNlcyBhCityZWdyZXNzaW9uLCB5b3UnbGwgZmluZCBhbiB1bmNvbWZvcnRhYmxlIG51bWJlciBvZiBleWVzIHVwb24geW91OworcmVncmVzc2lvbnMgbmVlZCB0byBiZSBmaXhlZCBhcyBzb29uIGFzIHBvc3NpYmxlLiAgSWYgeW91IGFyZSB1bndpbGxpbmcgb3IKK3VuYWJsZSB0byBmaXggdGhlIHJlZ3Jlc3Npb24gKGFuZCBub2JvZHkgZWxzZSBkb2VzIGl0IGZvciB5b3UpLCB5b3VyIHBhdGNoCit3aWxsIGFsbW9zdCBjZXJ0YWlubHkgYmUgcmVtb3ZlZCBkdXJpbmcgdGhlIHN0YWJpbGl6YXRpb24gcGVyaW9kLiAgQmV5b25kCituZWdhdGluZyBhbGwgb2YgdGhlIHdvcmsgeW91IGhhdmUgZG9uZSB0byBnZXQgeW91ciBwYXRjaCBpbnRvIHRoZSBtYWlubGluZSwKK2hhdmluZyBhIHBhdGNoIHB1bGxlZCBhcyB0aGUgcmVzdWx0IG9mIGEgZmFpbHVyZSB0byBmaXggYSByZWdyZXNzaW9uIGNvdWxkCit3ZWxsIG1ha2UgaXQgaGFyZGVyIGZvciB5b3UgdG8gZ2V0IHdvcmsgbWVyZ2VkIGluIHRoZSBmdXR1cmUuCisKK0FmdGVyIGFueSByZWdyZXNzaW9ucyBoYXZlIGJlZW4gZGVhbHQgd2l0aCwgdGhlcmUgbWF5IGJlIG90aGVyLCBvcmRpbmFyeQorYnVncyB0byBkZWFsIHdpdGguICBUaGUgc3RhYmlsaXphdGlvbiBwZXJpb2QgaXMgeW91ciBiZXN0IG9wcG9ydHVuaXR5IHRvCitmaXggdGhlc2UgYnVncyBhbmQgZW5zdXJlIHRoYXQgeW91ciBjb2RlJ3MgZGVidXQgaW4gYSBtYWlubGluZSBrZXJuZWwKK3JlbGVhc2UgaXMgYXMgc29saWQgYXMgcG9zc2libGUuICBTbywgcGxlYXNlLCBhbnN3ZXIgYnVnIHJlcG9ydHMsIGFuZCBmaXgKK3RoZSBwcm9ibGVtcyBpZiBhdCBhbGwgcG9zc2libGUuICBUaGF0J3Mgd2hhdCB0aGUgc3RhYmlsaXphdGlvbiBwZXJpb2QgaXMKK2ZvcjsgeW91IGNhbiBzdGFydCBjcmVhdGluZyBjb29sIG5ldyBwYXRjaGVzIG9uY2UgYW55IHByb2JsZW1zIHdpdGggdGhlIG9sZAorb25lcyBoYXZlIGJlZW4gdGFrZW4gY2FyZSBvZi4KKworQW5kIGRvbid0IGZvcmdldCB0aGF0IHRoZXJlIGFyZSBvdGhlciBtaWxlc3RvbmVzIHdoaWNoIG1heSBhbHNvIGNyZWF0ZSBidWcKK3JlcG9ydHM6IHRoZSBuZXh0IG1haW5saW5lIHN0YWJsZSByZWxlYXNlLCB3aGVuIHByb21pbmVudCBkaXN0cmlidXRvcnMgcGljawordXAgYSB2ZXJzaW9uIG9mIHRoZSBrZXJuZWwgY29udGFpbmluZyB5b3VyIHBhdGNoLCBldGMuICBDb250aW51aW5nIHRvCityZXNwb25kIHRvIHRoZXNlIHJlcG9ydHMgaXMgYSBtYXR0ZXIgb2YgYmFzaWMgcHJpZGUgaW4geW91ciB3b3JrLiAgSWYgdGhhdAoraXMgaW5zdWZmaWNpZW50IG1vdGl2YXRpb24sIHRob3VnaCwgaXQncyBhbHNvIHdvcnRoIGNvbnNpZGVyaW5nIHRoYXQgdGhlCitkZXZlbG9wbWVudCBjb21tdW5pdHkgcmVtZW1iZXJzIGRldmVsb3BlcnMgd2hvIGxvc2UgaW50ZXJlc3QgaW4gdGhlaXIgY29kZQorYWZ0ZXIgaXQncyBtZXJnZWQuICBUaGUgbmV4dCB0aW1lIHlvdSBwb3N0IGEgcGF0Y2gsIHRoZXkgd2lsbCBiZSBldmFsdWF0aW5nCitpdCB3aXRoIHRoZSBhc3N1bXB0aW9uIHRoYXQgeW91IHdpbGwgbm90IGJlIGFyb3VuZCB0byBtYWludGFpbiBpdAorYWZ0ZXJ3YXJkLgorCisKKzYuMzogT1RIRVIgVEhJTkdTIFRIQVQgQ0FOIEhBUFBFTgorCitPbmUgZGF5LCB5b3UgbWF5IG9wZW4geW91ciBtYWlsIGNsaWVudCBhbmQgc2VlIHRoYXQgc29tZWJvZHkgaGFzIG1haWxlZCB5b3UKK2EgcGF0Y2ggdG8geW91ciBjb2RlLiAgVGhhdCBpcyBvbmUgb2YgdGhlIGFkdmFudGFnZXMgb2YgaGF2aW5nIHlvdXIgY29kZQorb3V0IHRoZXJlIGluIHRoZSBvcGVuLCBhZnRlciBhbGwuICBJZiB5b3UgYWdyZWUgd2l0aCB0aGUgcGF0Y2gsIHlvdSBjYW4KK2VpdGhlciBmb3J3YXJkIGl0IG9uIHRvIHRoZSBzdWJzeXN0ZW0gbWFpbnRhaW5lciAoYmUgc3VyZSB0byBpbmNsdWRlIGEKK3Byb3BlciBGcm9tOiBsaW5lIHNvIHRoYXQgdGhlIGF0dHJpYnV0aW9uIGlzIGNvcnJlY3QsIGFuZCBhZGQgYSBzaWdub2ZmIG9mCit5b3VyIG93biksIG9yIHNlbmQgYW4gQWNrZWQtYnk6IHJlc3BvbnNlIGJhY2sgYW5kIGxldCB0aGUgb3JpZ2luYWwgcG9zdGVyCitzZW5kIGl0IHVwd2FyZC4KKworSWYgeW91IGRpc2FncmVlIHdpdGggdGhlIHBhdGNoLCBzZW5kIGEgcG9saXRlIHJlc3BvbnNlIGV4cGxhaW5pbmcgd2h5LiAgSWYKK3Bvc3NpYmxlLCB0ZWxsIHRoZSBhdXRob3Igd2hhdCBjaGFuZ2VzIG5lZWQgdG8gYmUgbWFkZSB0byBtYWtlIHRoZSBwYXRjaAorYWNjZXB0YWJsZSB0byB5b3UuICBUaGVyZSBpcyBhIGNlcnRhaW4gcmVzaXN0YW5jZSB0byBtZXJnaW5nIHBhdGNoZXMgd2hpY2gKK2FyZSBvcHBvc2VkIGJ5IHRoZSBhdXRob3IgYW5kIG1haW50YWluZXIgb2YgdGhlIGNvZGUsIGJ1dCBpdCBvbmx5IGdvZXMgc28KK2Zhci4gIElmIHlvdSBhcmUgc2VlbiBhcyBuZWVkbGVzc2x5IGJsb2NraW5nIGdvb2Qgd29yaywgdGhvc2UgcGF0Y2hlcyB3aWxsCitldmVudHVhbGx5IGZsb3cgYXJvdW5kIHlvdSBhbmQgZ2V0IGludG8gdGhlIG1haW5saW5lIGFueXdheS4gIEluIHRoZSBMaW51eAora2VybmVsLCBub2JvZHkgaGFzIGFic29sdXRlIHZldG8gcG93ZXIgb3ZlciBhbnkgY29kZS4gIEV4Y2VwdCBtYXliZSBMaW51cy4KKworT24gdmVyeSByYXJlIG9jY2FzaW9uLCB5b3UgbWF5IHNlZSBzb21ldGhpbmcgY29tcGxldGVseSBkaWZmZXJlbnQ6IGFub3RoZXIKK2RldmVsb3BlciBwb3N0cyBhIGRpZmZlcmVudCBzb2x1dGlvbiB0byB5b3VyIHByb2JsZW0uICBBdCB0aGF0IHBvaW50LAorY2hhbmNlcyBhcmUgdGhhdCBvbmUgb2YgdGhlIHR3byBwYXRjaGVzIHdpbGwgbm90IGJlIG1lcmdlZCwgYW5kICJtaW5lIHdhcworaGVyZSBmaXJzdCIgaXMgbm90IGNvbnNpZGVyZWQgdG8gYmUgYSBjb21wZWxsaW5nIHRlY2huaWNhbCBhcmd1bWVudC4gIElmCitzb21lYm9keSBlbHNlJ3MgcGF0Y2ggZGlzcGxhY2VzIHlvdXJzIGFuZCBnZXRzIGludG8gdGhlIG1haW5saW5lLCB0aGVyZSBpcworcmVhbGx5IG9ubHkgb25lIHdheSB0byByZXNwb25kOiBiZSBwbGVhc2VkIHRoYXQgeW91ciBwcm9ibGVtIGdvdCBzb2x2ZWQgYW5kCitnZXQgb24gd2l0aCB5b3VyIHdvcmsuICBIYXZpbmcgb25lJ3Mgd29yayBzaG92ZWQgYXNpZGUgaW4gdGhpcyBtYW5uZXIgY2FuCitiZSBodXJ0ZnVsIGFuZCBkaXNjb3VyYWdpbmcsIGJ1dCB0aGUgY29tbXVuaXR5IHdpbGwgcmVtZW1iZXIgeW91ciByZWFjdGlvbgorbG9uZyBhZnRlciB0aGV5IGhhdmUgZm9yZ290dGVuIHdob3NlIHBhdGNoIGFjdHVhbGx5IGdvdCBtZXJnZWQuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmVsb3BtZW50LXByb2Nlc3MvNy5BZHZhbmNlZFRvcGljcyBiL0RvY3VtZW50YXRpb24vZGV2ZWxvcG1lbnQtcHJvY2Vzcy83LkFkdmFuY2VkVG9waWNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEyY2Y3NDAKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2RldmVsb3BtZW50LXByb2Nlc3MvNy5BZHZhbmNlZFRvcGljcwpAQCAtMCwwICsxLDE3MyBAQAorNzogQURWQU5DRUQgVE9QSUNTCisKK0F0IHRoaXMgcG9pbnQsIGhvcGVmdWxseSwgeW91IGhhdmUgYSBoYW5kbGUgb24gaG93IHRoZSBkZXZlbG9wbWVudCBwcm9jZXNzCit3b3Jrcy4gIFRoZXJlIGlzIHN0aWxsIG1vcmUgdG8gbGVhcm4sIGhvd2V2ZXIhICBUaGlzIHNlY3Rpb24gd2lsbCBjb3ZlciBhCitudW1iZXIgb2YgdG9waWNzIHdoaWNoIGNhbiBiZSBoZWxwZnVsIGZvciBkZXZlbG9wZXJzIHdhbnRpbmcgdG8gYmVjb21lIGEKK3JlZ3VsYXIgcGFydCBvZiB0aGUgTGludXgga2VybmVsIGRldmVsb3BtZW50IHByb2Nlc3MuCisKKzcuMTogTUFOQUdJTkcgUEFUQ0hFUyBXSVRIIEdJVAorCitUaGUgdXNlIG9mIGRpc3RyaWJ1dGVkIHZlcnNpb24gY29udHJvbCBmb3IgdGhlIGtlcm5lbCBiZWdhbiBpbiBlYXJseSAyMDAyLAord2hlbiBMaW51cyBmaXJzdCBzdGFydGVkIHBsYXlpbmcgd2l0aCB0aGUgcHJvcHJpZXRhcnkgQml0S2VlcGVyCithcHBsaWNhdGlvbi4gIFdoaWxlIEJpdEtlZXBlciB3YXMgY29udHJvdmVyc2lhbCwgdGhlIGFwcHJvYWNoIHRvIHNvZnR3YXJlCit2ZXJzaW9uIG1hbmFnZW1lbnQgaXQgZW1ib2RpZWQgbW9zdCBjZXJ0YWlubHkgd2FzIG5vdC4gIERpc3RyaWJ1dGVkIHZlcnNpb24KK2NvbnRyb2wgZW5hYmxlZCBhbiBpbW1lZGlhdGUgYWNjZWxlcmF0aW9uIG9mIHRoZSBrZXJuZWwgZGV2ZWxvcG1lbnQKK3Byb2plY3QuICBJbiBjdXJyZW50IHRpbWVzLCB0aGVyZSBhcmUgc2V2ZXJhbCBmcmVlIGFsdGVybmF0aXZlcyB0bworQml0S2VlcGVyLiAgRm9yIGJldHRlciBvciBmb3Igd29yc2UsIHRoZSBrZXJuZWwgcHJvamVjdCBoYXMgc2V0dGxlZCBvbiBnaXQKK2FzIGl0cyB0b29sIG9mIGNob2ljZS4KKworTWFuYWdpbmcgcGF0Y2hlcyB3aXRoIGdpdCBjYW4gbWFrZSBsaWZlIG11Y2ggZWFzaWVyIGZvciB0aGUgZGV2ZWxvcGVyLAorZXNwZWNpYWxseSBhcyB0aGUgdm9sdW1lIG9mIHRob3NlIHBhdGNoZXMgZ3Jvd3MuICBHaXQgYWxzbyBoYXMgaXRzIHJvdWdoCitlZGdlcyBhbmQgcG9zZXMgY2VydGFpbiBoYXphcmRzOyBpdCBpcyBhIHlvdW5nIGFuZCBwb3dlcmZ1bCB0b29sIHdoaWNoIGlzCitzdGlsbCBiZWluZyBjaXZpbGl6ZWQgYnkgaXRzIGRldmVsb3BlcnMuICBUaGlzIGRvY3VtZW50IHdpbGwgbm90IGF0dGVtcHQgdG8KK3RlYWNoIHRoZSByZWFkZXIgaG93IHRvIHVzZSBnaXQ7IHRoYXQgd291bGQgYmUgc3VmZmljaWVudCBtYXRlcmlhbCBmb3IgYQorbG9uZyBkb2N1bWVudCBpbiBpdHMgb3duIHJpZ2h0LiAgSW5zdGVhZCwgdGhlIGZvY3VzIGhlcmUgd2lsbCBiZSBvbiBob3cgZ2l0CitmaXRzIGludG8gdGhlIGtlcm5lbCBkZXZlbG9wbWVudCBwcm9jZXNzIGluIHBhcnRpY3VsYXIuICBEZXZlbG9wZXJzIHdobword2lzaCB0byBjb21lIHVwIHRvIHNwZWVkIHdpdGggZ2l0IHdpbGwgZmluZCBtb3JlIGluZm9ybWF0aW9uIGF0OgorCisJaHR0cDovL2dpdC5vci5jei8KKworCWh0dHA6Ly93d3cua2VybmVsLm9yZy9wdWIvc29mdHdhcmUvc2NtL2dpdC9kb2NzL3VzZXItbWFudWFsLmh0bWwKKworYW5kIG9uIHZhcmlvdXMgdHV0b3JpYWxzIGZvdW5kIG9uIHRoZSB3ZWIuCisKK1RoZSBmaXJzdCBvcmRlciBvZiBidXNpbmVzcyBpcyB0byByZWFkIHRoZSBhYm92ZSBzaXRlcyBhbmQgZ2V0IGEgc29saWQKK3VuZGVyc3RhbmRpbmcgb2YgaG93IGdpdCB3b3JrcyBiZWZvcmUgdHJ5aW5nIHRvIHVzZSBpdCB0byBtYWtlIHBhdGNoZXMKK2F2YWlsYWJsZSB0byBvdGhlcnMuICBBIGdpdC11c2luZyBkZXZlbG9wZXIgc2hvdWxkIGJlIGFibGUgdG8gb2J0YWluIGEgY29weQorb2YgdGhlIG1haW5saW5lIHJlcG9zaXRvcnksIGV4cGxvcmUgdGhlIHJldmlzaW9uIGhpc3RvcnksIGNvbW1pdCBjaGFuZ2VzIHRvCit0aGUgdHJlZSwgdXNlIGJyYW5jaGVzLCBldGMuICBBbiB1bmRlcnN0YW5kaW5nIG9mIGdpdCdzIHRvb2xzIGZvciB0aGUKK3Jld3JpdGluZyBvZiBoaXN0b3J5IChzdWNoIGFzIHJlYmFzZSkgaXMgYWxzbyB1c2VmdWwuICBHaXQgY29tZXMgd2l0aCBpdHMKK293biB0ZXJtaW5vbG9neSBhbmQgY29uY2VwdHM7IGEgbmV3IHVzZXIgb2YgZ2l0IHNob3VsZCBrbm93IGFib3V0IHJlZnMsCityZW1vdGUgYnJhbmNoZXMsIHRoZSBpbmRleCwgZmFzdC1mb3J3YXJkIG1lcmdlcywgcHVzaGVzIGFuZCBwdWxscywgZGV0YWNoZWQKK2hlYWRzLCBldGMuICBJdCBjYW4gYWxsIGJlIGEgbGl0dGxlIGludGltaWRhdGluZyBhdCB0aGUgb3V0c2V0LCBidXQgdGhlCitjb25jZXB0cyBhcmUgbm90IHRoYXQgaGFyZCB0byBncmFzcCB3aXRoIGEgYml0IG9mIHN0dWR5LgorCitVc2luZyBnaXQgdG8gZ2VuZXJhdGUgcGF0Y2hlcyBmb3Igc3VibWlzc2lvbiBieSBlbWFpbCBjYW4gYmUgYSBnb29kCitleGVyY2lzZSB3aGlsZSBjb21pbmcgdXAgdG8gc3BlZWQuCisKK1doZW4geW91IGFyZSByZWFkeSB0byBzdGFydCBwdXR0aW5nIHVwIGdpdCB0cmVlcyBmb3Igb3RoZXJzIHRvIGxvb2sgYXQsIHlvdQord2lsbCwgb2YgY291cnNlLCBuZWVkIGEgc2VydmVyIHRoYXQgY2FuIGJlIHB1bGxlZCBmcm9tLiAgU2V0dGluZyB1cCBzdWNoIGEKK3NlcnZlciB3aXRoIGdpdC1kYWVtb24gaXMgcmVsYXRpdmVseSBzdHJhaWdodGZvcndhcmQgaWYgeW91IGhhdmUgYSBzeXN0ZW0KK3doaWNoIGlzIGFjY2Vzc2libGUgdG8gdGhlIEludGVybmV0LiAgT3RoZXJ3aXNlLCBmcmVlLCBwdWJsaWMgaG9zdGluZyBzaXRlcworKEdpdGh1YiwgZm9yIGV4YW1wbGUpIGFyZSBzdGFydGluZyB0byBhcHBlYXIgb24gdGhlIG5ldC4gIEVzdGFibGlzaGVkCitkZXZlbG9wZXJzIGNhbiBnZXQgYW4gYWNjb3VudCBvbiBrZXJuZWwub3JnLCBidXQgdGhvc2UgYXJlIG5vdCBlYXN5IHRvIGNvbWUKK2J5OyBzZWUgaHR0cDovL2tlcm5lbC5vcmcvZmFxLyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKworVGhlIG5vcm1hbCBnaXQgd29ya2Zsb3cgaW52b2x2ZXMgdGhlIHVzZSBvZiBhIGxvdCBvZiBicmFuY2hlcy4gIEVhY2ggbGluZQorb2YgZGV2ZWxvcG1lbnQgY2FuIGJlIHNlcGFyYXRlZCBpbnRvIGEgc2VwYXJhdGUgInRvcGljIGJyYW5jaCIgYW5kCittYWludGFpbmVkIGluZGVwZW5kZW50bHkuICBCcmFuY2hlcyBpbiBnaXQgYXJlIGNoZWFwLCB0aGVyZSBpcyBubyByZWFzb24gdG8KK25vdCBtYWtlIGZyZWUgdXNlIG9mIHRoZW0uICBBbmQsIGluIGFueSBjYXNlLCB5b3Ugc2hvdWxkIG5vdCBkbyB5b3VyCitkZXZlbG9wbWVudCBpbiBhbnkgYnJhbmNoIHdoaWNoIHlvdSBpbnRlbmQgdG8gYXNrIG90aGVycyB0byBwdWxsIGZyb20uCitQdWJsaWNseS1hdmFpbGFibGUgYnJhbmNoZXMgc2hvdWxkIGJlIGNyZWF0ZWQgd2l0aCBjYXJlOyBtZXJnZSBpbiBwYXRjaGVzCitmcm9tIGRldmVsb3BtZW50IGJyYW5jaGVzIHdoZW4gdGhleSBhcmUgaW4gY29tcGxldGUgZm9ybSBhbmQgcmVhZHkgdG8gZ28gLQorbm90IGJlZm9yZS4KKworR2l0IHByb3ZpZGVzIHNvbWUgcG93ZXJmdWwgdG9vbHMgd2hpY2ggY2FuIGFsbG93IHlvdSB0byByZXdyaXRlIHlvdXIKK2RldmVsb3BtZW50IGhpc3RvcnkuICBBbiBpbmNvbnZlbmllbnQgcGF0Y2ggKG9uZSB3aGljaCBicmVha3MgYmlzZWN0aW9uLAorc2F5LCBvciB3aGljaCBoYXMgc29tZSBvdGhlciBzb3J0IG9mIG9idmlvdXMgYnVnKSBjYW4gYmUgZml4ZWQgaW4gcGxhY2Ugb3IKK21hZGUgdG8gZGlzYXBwZWFyIGZyb20gdGhlIGhpc3RvcnkgZW50aXJlbHkuICBBIHBhdGNoIHNlcmllcyBjYW4gYmUKK3Jld3JpdHRlbiBhcyBpZiBpdCBoYWQgYmVlbiB3cml0dGVuIG9uIHRvcCBvZiB0b2RheSdzIG1haW5saW5lLCBldmVuIHRob3VnaAoreW91IGhhdmUgYmVlbiB3b3JraW5nIG9uIGl0IGZvciBtb250aHMuICBDaGFuZ2VzIGNhbiBiZSB0cmFuc3BhcmVudGx5CitzaGlmdGVkIGZyb20gb25lIGJyYW5jaCB0byBhbm90aGVyLiAgQW5kIHNvIG9uLiAgSnVkaWNpb3VzIHVzZSBvZiBnaXQncworYWJpbGl0eSB0byByZXZpc2UgaGlzdG9yeSBjYW4gaGVscCBpbiB0aGUgY3JlYXRpb24gb2YgY2xlYW4gcGF0Y2ggc2V0cyB3aXRoCitmZXdlciBwcm9ibGVtcy4KKworRXhjZXNzaXZlIHVzZSBvZiB0aGlzIGNhcGFiaWxpdHkgY2FuIGxlYWQgdG8gb3RoZXIgcHJvYmxlbXMsIHRob3VnaCwgYmV5b25kCithIHNpbXBsZSBvYnNlc3Npb24gZm9yIHRoZSBjcmVhdGlvbiBvZiB0aGUgcGVyZmVjdCBwcm9qZWN0IGhpc3RvcnkuCitSZXdyaXRpbmcgaGlzdG9yeSB3aWxsIHJld3JpdGUgdGhlIGNoYW5nZXMgY29udGFpbmVkIGluIHRoYXQgaGlzdG9yeSwKK3R1cm5pbmcgYSB0ZXN0ZWQgKGhvcGVmdWxseSkga2VybmVsIHRyZWUgaW50byBhbiB1bnRlc3RlZCBvbmUuICBCdXQsIGJleW9uZAordGhhdCwgZGV2ZWxvcGVycyBjYW5ub3QgZWFzaWx5IGNvbGxhYm9yYXRlIGlmIHRoZXkgZG8gbm90IGhhdmUgYSBzaGFyZWQKK3ZpZXcgb2YgdGhlIHByb2plY3QgaGlzdG9yeTsgaWYgeW91IHJld3JpdGUgaGlzdG9yeSB3aGljaCBvdGhlciBkZXZlbG9wZXJzCitoYXZlIHB1bGxlZCBpbnRvIHRoZWlyIHJlcG9zaXRvcmllcywgeW91IHdpbGwgbWFrZSBsaWZlIG11Y2ggbW9yZSBkaWZmaWN1bHQKK2ZvciB0aG9zZSBkZXZlbG9wZXJzLiAgU28gYSBzaW1wbGUgcnVsZSBvZiB0aHVtYiBhcHBsaWVzIGhlcmU6IGhpc3RvcnkKK3doaWNoIGhhcyBiZWVuIGV4cG9ydGVkIHRvIG90aGVycyBzaG91bGQgZ2VuZXJhbGx5IGJlIHNlZW4gYXMgaW1tdXRhYmxlCit0aGVyZWFmdGVyLgorCitTbywgb25jZSB5b3UgcHVzaCBhIHNldCBvZiBjaGFuZ2VzIHRvIHlvdXIgcHVibGljbHktYXZhaWxhYmxlIHNlcnZlciwgdGhvc2UKK2NoYW5nZXMgc2hvdWxkIG5vdCBiZSByZXdyaXR0ZW4uICBHaXQgd2lsbCBhdHRlbXB0IHRvIGVuZm9yY2UgdGhpcyBydWxlIGlmCit5b3UgdHJ5IHRvIHB1c2ggY2hhbmdlcyB3aGljaCBkbyBub3QgcmVzdWx0IGluIGEgZmFzdC1mb3J3YXJkIG1lcmdlCisoaS5lLiBjaGFuZ2VzIHdoaWNoIGRvIG5vdCBzaGFyZSB0aGUgc2FtZSBoaXN0b3J5KS4gIEl0IGlzIHBvc3NpYmxlIHRvCitvdmVycmlkZSB0aGlzIGNoZWNrLCBhbmQgdGhlcmUgbWF5IGJlIHRpbWVzIHdoZW4gaXQgaXMgbmVjZXNzYXJ5IHRvIHJld3JpdGUKK2FuIGV4cG9ydGVkIHRyZWUuICBNb3ZpbmcgY2hhbmdlc2V0cyBiZXR3ZWVuIHRyZWVzIHRvIGF2b2lkIGNvbmZsaWN0cyBpbgorbGludXgtbmV4dCBpcyBvbmUgZXhhbXBsZS4gIEJ1dCBzdWNoIGFjdGlvbnMgc2hvdWxkIGJlIHJhcmUuICBUaGlzIGlzIG9uZQorb2YgdGhlIHJlYXNvbnMgd2h5IGRldmVsb3BtZW50IHNob3VsZCBiZSBkb25lIGluIHByaXZhdGUgYnJhbmNoZXMgKHdoaWNoCitjYW4gYmUgcmV3cml0dGVuIGlmIG5lY2Vzc2FyeSkgYW5kIG9ubHkgbW92ZWQgaW50byBwdWJsaWMgYnJhbmNoZXMgd2hlbgoraXQncyBpbiBhIHJlYXNvbmFibHkgYWR2YW5jZWQgc3RhdGUuCisKK0FzIHRoZSBtYWlubGluZSAob3Igb3RoZXIgdHJlZSB1cG9uIHdoaWNoIGEgc2V0IG9mIGNoYW5nZXMgaXMgYmFzZWQpCithZHZhbmNlcywgaXQgaXMgdGVtcHRpbmcgdG8gbWVyZ2Ugd2l0aCB0aGF0IHRyZWUgdG8gc3RheSBvbiB0aGUgbGVhZGluZworZWRnZS4gIEZvciBhIHByaXZhdGUgYnJhbmNoLCByZWJhc2luZyBjYW4gYmUgYW4gZWFzeSB3YXkgdG8ga2VlcCB1cCB3aXRoCithbm90aGVyIHRyZWUsIGJ1dCByZWJhc2luZyBpcyBub3QgYW4gb3B0aW9uIG9uY2UgYSB0cmVlIGlzIGV4cG9ydGVkIHRvIHRoZQord29ybGQuICBPbmNlIHRoYXQgaGFwcGVucywgYSBmdWxsIG1lcmdlIG11c3QgYmUgZG9uZS4gIE1lcmdpbmcgb2NjYXNpb25hbGx5CittYWtlcyBnb29kIHNlbnNlLCBidXQgb3Zlcmx5IGZyZXF1ZW50IG1lcmdlcyBjYW4gY2x1dHRlciB0aGUgaGlzdG9yeQorbmVlZGxlc3NseS4gIFN1Z2dlc3RlZCB0ZWNobmlxdWUgaW4gdGhpcyBjYXNlIGlzIHRvIG1lcmdlIGluZnJlcXVlbnRseSwgYW5kCitnZW5lcmFsbHkgb25seSBhdCBzcGVjaWZpYyByZWxlYXNlIHBvaW50cyAoc3VjaCBhcyBhIG1haW5saW5lIC1yYworcmVsZWFzZSkuICBJZiB5b3UgYXJlIG5lcnZvdXMgYWJvdXQgc3BlY2lmaWMgY2hhbmdlcywgeW91IGNhbiBhbHdheXMKK3BlcmZvcm0gdGVzdCBtZXJnZXMgaW4gYSBwcml2YXRlIGJyYW5jaC4gIFRoZSBnaXQgInJlcmVyZSIgdG9vbCBjYW4gYmUKK3VzZWZ1bCBpbiBzdWNoIHNpdHVhdGlvbnM7IGl0IHJlbWVtYmVycyBob3cgbWVyZ2UgY29uZmxpY3RzIHdlcmUgcmVzb2x2ZWQKK3NvIHRoYXQgeW91IGRvbid0IGhhdmUgdG8gZG8gdGhlIHNhbWUgd29yayB0d2ljZS4KKworT25lIG9mIHRoZSBiaWdnZXN0IHJlY3VycmluZyBjb21wbGFpbnRzIGFib3V0IHRvb2xzIGxpa2UgZ2l0IGlzIHRoaXM6IHRoZQorbWFzcyBtb3ZlbWVudCBvZiBwYXRjaGVzIGZyb20gb25lIHJlcG9zaXRvcnkgdG8gYW5vdGhlciBtYWtlcyBpdCBlYXN5IHRvCitzbGlwIGluIGlsbC1hZHZpc2VkIGNoYW5nZXMgd2hpY2ggZ28gaW50byB0aGUgbWFpbmxpbmUgYmVsb3cgdGhlIHJldmlldworcmFkYXIuICBLZXJuZWwgZGV2ZWxvcGVycyB0ZW5kIHRvIGdldCB1bmhhcHB5IHdoZW4gdGhleSBzZWUgdGhhdCBraW5kIG9mCit0aGluZyBoYXBwZW5pbmc7IHB1dHRpbmcgdXAgYSBnaXQgdHJlZSB3aXRoIHVucmV2aWV3ZWQgb3Igb2ZmLXRvcGljIHBhdGNoZXMKK2NhbiBhZmZlY3QgeW91ciBhYmlsaXR5IHRvIGdldCB0cmVlcyBwdWxsZWQgaW4gdGhlIGZ1dHVyZS4gIFF1b3RpbmcgTGludXM6CisKKwlZb3UgY2FuIHNlbmQgbWUgcGF0Y2hlcywgYnV0IGZvciBtZSB0byBwdWxsIGEgZ2l0IHBhdGNoIGZyb20geW91LCBJCisJbmVlZCB0byBrbm93IHRoYXQgeW91IGtub3cgd2hhdCB5b3UncmUgZG9pbmcsIGFuZCBJIG5lZWQgdG8gYmUgYWJsZQorCXRvIHRydXN0IHRoaW5ncyAqd2l0aG91dCogdGhlbiBoYXZpbmcgdG8gZ28gYW5kIGNoZWNrIGV2ZXJ5CisJaW5kaXZpZHVhbCBjaGFuZ2UgYnkgaGFuZC4KKworKGh0dHA6Ly9sd24ubmV0L0FydGljbGVzLzIyNDEzNS8pLiAgCisKK1RvIGF2b2lkIHRoaXMga2luZCBvZiBzaXR1YXRpb24sIGVuc3VyZSB0aGF0IGFsbCBwYXRjaGVzIHdpdGhpbiBhIGdpdmVuCiticmFuY2ggc3RpY2sgY2xvc2VseSB0byB0aGUgYXNzb2NpYXRlZCB0b3BpYzsgYSAiZHJpdmVyIGZpeGVzIiBicmFuY2gKK3Nob3VsZCBub3QgYmUgbWFraW5nIGNoYW5nZXMgdG8gdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgY29kZS4gIEFuZCwgbW9zdAoraW1wb3J0YW50bHksIGRvIG5vdCB1c2UgYSBnaXQgdHJlZSB0byBieXBhc3MgdGhlIHJldmlldyBwcm9jZXNzLiAgUG9zdCBhbgorb2NjYXNpb25hbCBzdW1tYXJ5IG9mIHRoZSB0cmVlIHRvIHRoZSByZWxldmFudCBsaXN0LCBhbmQsIHdoZW4gdGhlIHRpbWUgaXMKK3JpZ2h0LCByZXF1ZXN0IHRoYXQgdGhlIHRyZWUgYmUgaW5jbHVkZWQgaW4gbGludXgtbmV4dC4KKworSWYgYW5kIHdoZW4gb3RoZXJzIHN0YXJ0IHRvIHNlbmQgcGF0Y2hlcyBmb3IgaW5jbHVzaW9uIGludG8geW91ciB0cmVlLAorZG9uJ3QgZm9yZ2V0IHRvIHJldmlldyB0aGVtLiAgQWxzbyBlbnN1cmUgdGhhdCB5b3UgbWFpbnRhaW4gdGhlIGNvcnJlY3QKK2F1dGhvcnNoaXAgaW5mb3JtYXRpb247IHRoZSBnaXQgImFtIiB0b29sIGRvZXMgaXRzIGJlc3QgaW4gdGhpcyByZWdhcmQsIGJ1dAoreW91IG1heSBoYXZlIHRvIGFkZCBhICJGcm9tOiIgbGluZSB0byB0aGUgcGF0Y2ggaWYgaXQgaGFzIGJlZW4gcmVsYXllZCB0bworeW91IHZpYSBhIHRoaXJkIHBhcnR5LgorCitXaGVuIHJlcXVlc3RpbmcgYSBwdWxsLCBiZSBzdXJlIHRvIGdpdmUgYWxsIHRoZSByZWxldmFudCBpbmZvcm1hdGlvbjogd2hlcmUKK3lvdXIgdHJlZSBpcywgd2hhdCBicmFuY2ggdG8gcHVsbCwgYW5kIHdoYXQgY2hhbmdlcyB3aWxsIHJlc3VsdCBmcm9tIHRoZQorcHVsbC4gIFRoZSBnaXQgcmVxdWVzdC1wdWxsIGNvbW1hbmQgY2FuIGJlIGhlbHBmdWwgaW4gdGhpcyByZWdhcmQ7IGl0IHdpbGwKK2Zvcm1hdCB0aGUgcmVxdWVzdCBhcyBvdGhlciBkZXZlbG9wZXJzIGV4cGVjdCwgYW5kIHdpbGwgYWxzbyBjaGVjayB0byBiZQorc3VyZSB0aGF0IHlvdSBoYXZlIHJlbWVtYmVyZWQgdG8gcHVzaCB0aG9zZSBjaGFuZ2VzIHRvIHRoZSBwdWJsaWMgc2VydmVyLiAKKworCis3LjI6IFJFVklFV0lORyBQQVRDSEVTCisKK1NvbWUgcmVhZGVycyB3aWxsIGNlcnRhaW5seSBvYmplY3QgdG8gcHV0dGluZyB0aGlzIHNlY3Rpb24gd2l0aCAiYWR2YW5jZWQKK3RvcGljcyIgb24gdGhlIGdyb3VuZHMgdGhhdCBldmVuIGJlZ2lubmluZyBrZXJuZWwgZGV2ZWxvcGVycyBzaG91bGQgYmUKK3Jldmlld2luZyBwYXRjaGVzLiAgSXQgaXMgY2VydGFpbmx5IHRydWUgdGhhdCB0aGVyZSBpcyBubyBiZXR0ZXIgd2F5IHRvCitsZWFybiBob3cgdG8gcHJvZ3JhbSBpbiB0aGUga2VybmVsIGVudmlyb25tZW50IHRoYW4gYnkgbG9va2luZyBhdCBjb2RlCitwb3N0ZWQgYnkgb3RoZXJzLiAgSW4gYWRkaXRpb24sIHJldmlld2VycyBhcmUgZm9yZXZlciBpbiBzaG9ydCBzdXBwbHk7IGJ5Citsb29raW5nIGF0IGNvZGUgeW91IGNhbiBtYWtlIGEgc2lnbmlmaWNhbnQgY29udHJpYnV0aW9uIHRvIHRoZSBwcm9jZXNzIGFzIGEKK3dob2xlLgorCitSZXZpZXdpbmcgY29kZSBjYW4gYmUgYW4gaW50aW1pZGF0aW5nIHByb3NwZWN0LCBlc3BlY2lhbGx5IGZvciBhIG5ldyBrZXJuZWwKK2RldmVsb3BlciB3aG8gbWF5IHdlbGwgZmVlbCBuZXJ2b3VzIGFib3V0IHF1ZXN0aW9uaW5nIGNvZGUgLSBpbiBwdWJsaWMgLQord2hpY2ggaGFzIGJlZW4gcG9zdGVkIGJ5IHRob3NlIHdpdGggbW9yZSBleHBlcmllbmNlLiAgRXZlbiBjb2RlIHdyaXR0ZW4gYnkKK3RoZSBtb3N0IGV4cGVyaWVuY2VkIGRldmVsb3BlcnMgY2FuIGJlIGltcHJvdmVkLCB0aG91Z2guICBQZXJoYXBzIHRoZSBiZXN0CitwaWVjZSBvZiBhZHZpY2UgZm9yIHJldmlld2VycyAoYWxsIHJldmlld2VycykgaXMgdGhpczogcGhyYXNlIHJldmlldworY29tbWVudHMgYXMgcXVlc3Rpb25zIHJhdGhlciB0aGFuIGNyaXRpY2lzbXMuICBBc2tpbmcgImhvdyBkb2VzIHRoZSBsb2NrCitnZXQgcmVsZWFzZWQgaW4gdGhpcyBwYXRoPyIgd2lsbCBhbHdheXMgd29yayBiZXR0ZXIgdGhhbiBzdGF0aW5nICJ0aGUKK2xvY2tpbmcgaGVyZSBpcyB3cm9uZy4iCisKK0RpZmZlcmVudCBkZXZlbG9wZXJzIHdpbGwgcmV2aWV3IGNvZGUgZnJvbSBkaWZmZXJlbnQgcG9pbnRzIG9mIHZpZXcuICBTb21lCithcmUgbW9zdGx5IGNvbmNlcm5lZCB3aXRoIGNvZGluZyBzdHlsZSBhbmQgd2hldGhlciBjb2RlIGxpbmVzIGhhdmUgdHJhaWxpbmcKK3doaXRlIHNwYWNlLiAgT3RoZXJzIHdpbGwgZm9jdXMgcHJpbWFyaWx5IG9uIHdoZXRoZXIgdGhlIGNoYW5nZSBpbXBsZW1lbnRlZAorYnkgdGhlIHBhdGNoIGFzIGEgd2hvbGUgaXMgYSBnb29kIHRoaW5nIGZvciB0aGUga2VybmVsIG9yIG5vdC4gIFlldCBvdGhlcnMKK3dpbGwgY2hlY2sgZm9yIHByb2JsZW1hdGljIGxvY2tpbmcsIGV4Y2Vzc2l2ZSBzdGFjayB1c2FnZSwgcG9zc2libGUKK3NlY3VyaXR5IGlzc3VlcywgZHVwbGljYXRpb24gb2YgY29kZSBmb3VuZCBlbHNld2hlcmUsIGFkZXF1YXRlCitkb2N1bWVudGF0aW9uLCBhZHZlcnNlIGVmZmVjdHMgb24gcGVyZm9ybWFuY2UsIHVzZXItc3BhY2UgQUJJIGNoYW5nZXMsIGV0Yy4KK0FsbCB0eXBlcyBvZiByZXZpZXcsIGlmIHRoZXkgbGVhZCB0byBiZXR0ZXIgY29kZSBnb2luZyBpbnRvIHRoZSBrZXJuZWwsIGFyZQord2VsY29tZSBhbmQgd29ydGh3aGlsZS4KKworCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmVsb3BtZW50LXByb2Nlc3MvOC5Db25jbHVzaW9uIGIvRG9jdW1lbnRhdGlvbi9kZXZlbG9wbWVudC1wcm9jZXNzLzguQ29uY2x1c2lvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOTkwYWI0Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZlbG9wbWVudC1wcm9jZXNzLzguQ29uY2x1c2lvbgpAQCAtMCwwICsxLDc0IEBACis4OiBGT1IgTU9SRSBJTkZPUk1BVElPTgorCitUaGVyZSBhcmUgbnVtZXJvdXMgc291cmNlcyBvZiBpbmZvcm1hdGlvbiBvbiBMaW51eCBrZXJuZWwgZGV2ZWxvcG1lbnQgYW5kCityZWxhdGVkIHRvcGljcy4gIEZpcnN0IGFtb25nIHRob3NlIHdpbGwgYWx3YXlzIGJlIHRoZSBEb2N1bWVudGF0aW9uCitkaXJlY3RvcnkgZm91bmQgaW4gdGhlIGtlcm5lbCBzb3VyY2UgZGlzdHJpYnV0aW9uLiAgVGhlIHRvcC1sZXZlbCBIT1dUTworZmlsZSBpcyBhbiBpbXBvcnRhbnQgc3RhcnRpbmcgcG9pbnQ7IFN1Ym1pdHRpbmdQYXRjaGVzIGFuZAorU3VibWl0dGluZ0RyaXZlcnMgYXJlIGFsc28gc29tZXRoaW5nIHdoaWNoIGFsbCBrZXJuZWwgZGV2ZWxvcGVycyBzaG91bGQKK3JlYWQuICBNYW55IGludGVybmFsIGtlcm5lbCBBUElzIGFyZSBkb2N1bWVudGVkIHVzaW5nIHRoZSBrZXJuZWxkb2MKK21lY2hhbmlzbTsgIm1ha2UgaHRtbGRvY3MiIG9yICJtYWtlIHBkZmRvY3MiIGNhbiBiZSB1c2VkIHRvIGdlbmVyYXRlIHRob3NlCitkb2N1bWVudHMgaW4gSFRNTCBvciBQREYgZm9ybWF0ICh0aG91Z2ggdGhlIHZlcnNpb24gb2YgVGVYIHNoaXBwZWQgYnkgc29tZQorZGlzdHJpYnV0aW9ucyBydW5zIGludG8gaW50ZXJuYWwgbGltaXRzIGFuZCBmYWlscyB0byBwcm9jZXNzIHRoZSBkb2N1bWVudHMKK3Byb3Blcmx5KS4KKworVmFyaW91cyB3ZWIgc2l0ZXMgZGlzY3VzcyBrZXJuZWwgZGV2ZWxvcG1lbnQgYXQgYWxsIGxldmVscyBvZiBkZXRhaWwuICBZb3VyCithdXRob3Igd291bGQgbGlrZSB0byBodW1ibHkgc3VnZ2VzdCBodHRwOi8vbHduLm5ldC8gYXMgYSBzb3VyY2U7CitpbmZvcm1hdGlvbiBvbiBtYW55IHNwZWNpZmljIGtlcm5lbCB0b3BpY3MgY2FuIGJlIGZvdW5kIHZpYSB0aGUgTFdOIGtlcm5lbAoraW5kZXggYXQ6CisKKwlodHRwOi8vbHduLm5ldC9LZXJuZWwvSW5kZXgvCisKK0JleW9uZCB0aGF0LCBhIHZhbHVhYmxlIHJlc291cmNlIGZvciBrZXJuZWwgZGV2ZWxvcGVycyBpczoKKworCWh0dHA6Ly9rZXJuZWxuZXdiaWVzLm9yZy8KKworSW5mb3JtYXRpb24gYWJvdXQgdGhlIGxpbnV4LW5leHQgdHJlZSBnYXRoZXJzIGF0OgorCisJaHR0cDovL2xpbnV4LmYtc2VpZGVsLmRlL2xpbnV4LW5leHQvcG13aWtpLworCitBbmQsIG9mIGNvdXJzZSwgb25lIHNob3VsZCBub3QgZm9yZ2V0IGh0dHA6Ly9rZXJuZWwub3JnLywgdGhlIGRlZmluaXRpdmUKK2xvY2F0aW9uIGZvciBrZXJuZWwgcmVsZWFzZSBpbmZvcm1hdGlvbi4KKworVGhlcmUgYXJlIGEgbnVtYmVyIG9mIGJvb2tzIG9uIGtlcm5lbCBkZXZlbG9wbWVudDoKKworCUxpbnV4IERldmljZSBEcml2ZXJzLCAzcmQgRWRpdGlvbiAoSm9uYXRoYW4gQ29yYmV0LCBBbGVzc2FuZHJvCisJUnViaW5pLCBhbmQgR3JlZyBLcm9haC1IYXJ0bWFuKS4gIE9ubGluZSBhdAorCWh0dHA6Ly9sd24ubmV0L0tlcm5lbC9MREQzLy4KKworCUxpbnV4IEtlcm5lbCBEZXZlbG9wbWVudCAoUm9iZXJ0IExvdmUpLgorCisJVW5kZXJzdGFuZGluZyB0aGUgTGludXggS2VybmVsIChEYW5pZWwgQm92ZXQgYW5kIE1hcmNvIENlc2F0aSkuCisKK0FsbCBvZiB0aGVzZSBib29rcyBzdWZmZXIgZnJvbSBhIGNvbW1vbiBmYXVsdCwgdGhvdWdoOiB0aGV5IHRlbmQgdG8gYmUKK3NvbWV3aGF0IG9ic29sZXRlIGJ5IHRoZSB0aW1lIHRoZXkgaGl0IHRoZSBzaGVsdmVzLCBhbmQgdGhleSBoYXZlIGJlZW4gb24KK3RoZSBzaGVsdmVzIGZvciBhIHdoaWxlIG5vdy4gIFN0aWxsLCB0aGVyZSBpcyBxdWl0ZSBhIGJpdCBvZiBnb29kCitpbmZvcm1hdGlvbiB0byBiZSBmb3VuZCB0aGVyZS4KKworRG9jdW1lbnRhdGlvbiBmb3IgZ2l0IGNhbiBiZSBmb3VuZCBhdDoKKworCWh0dHA6Ly93d3cua2VybmVsLm9yZy9wdWIvc29mdHdhcmUvc2NtL2dpdC9kb2NzLworCisJaHR0cDovL3d3dy5rZXJuZWwub3JnL3B1Yi9zb2Z0d2FyZS9zY20vZ2l0L2RvY3MvdXNlci1tYW51YWwuaHRtbAorCisKKzk6IENPTkNMVVNJT04KKworQ29uZ3JhdHVsYXRpb25zIHRvIGFueWJvZHkgd2hvIGhhcyBtYWRlIGl0IHRocm91Z2ggdGhpcyBsb25nLXdpbmRlZAorZG9jdW1lbnQuICBIb3BlZnVsbHkgaXQgaGFzIHByb3ZpZGVkIGEgaGVscGZ1bCB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGUKK0xpbnV4IGtlcm5lbCBpcyBkZXZlbG9wZWQgYW5kIGhvdyB5b3UgY2FuIHBhcnRpY2lwYXRlIGluIHRoYXQgcHJvY2Vzcy4KKworSW4gdGhlIGVuZCwgaXQncyB0aGUgcGFydGljaXBhdGlvbiB0aGF0IG1hdHRlcnMuICBBbnkgb3BlbiBzb3VyY2Ugc29mdHdhcmUKK3Byb2plY3QgaXMgbm8gbW9yZSB0aGFuIHRoZSBzdW0gb2Ygd2hhdCBpdHMgY29udHJpYnV0b3JzIHB1dCBpbnRvIGl0LiAgVGhlCitMaW51eCBrZXJuZWwgaGFzIHByb2dyZXNzZWQgYXMgcXVpY2tseSBhbmQgYXMgd2VsbCBhcyBpdCBoYXMgYmVjYXVzZSBpdCBoYXMKK2JlZW4gaGVscGVkIGJ5IGFuIGltcHJlc3NpdmVseSBsYXJnZSBncm91cCBvZiBkZXZlbG9wZXJzLCBhbGwgb2Ygd2hvbSBhcmUKK3dvcmtpbmcgdG8gbWFrZSBpdCBiZXR0ZXIuICBUaGUga2VybmVsIGlzIGEgcHJlbWllciBleGFtcGxlIG9mIHdoYXQgY2FuIGJlCitkb25lIHdoZW4gdGhvdXNhbmRzIG9mIHBlb3BsZSB3b3JrIHRvZ2V0aGVyIHRvd2FyZCBhIGNvbW1vbiBnb2FsLgorCitUaGUga2VybmVsIGNhbiBhbHdheXMgYmVuZWZpdCBmcm9tIGEgbGFyZ2VyIGRldmVsb3BlciBiYXNlLCB0aG91Z2guICBUaGVyZQoraXMgYWx3YXlzIG1vcmUgd29yayB0byBkby4gIEJ1dCwganVzdCBhcyBpbXBvcnRhbnRseSwgbW9zdCBvdGhlcgorcGFydGljaXBhbnRzIGluIHRoZSBMaW51eCBlY29zeXN0ZW0gY2FuIGJlbmVmaXQgdGhyb3VnaCBjb250cmlidXRpbmcgdG8gdGhlCitrZXJuZWwuICBHZXR0aW5nIGNvZGUgaW50byB0aGUgbWFpbmxpbmUgaXMgdGhlIGtleSB0byBoaWdoZXIgY29kZSBxdWFsaXR5LAorbG93ZXIgbWFpbnRlbmFuY2UgYW5kIGRpc3RyaWJ1dGlvbiBjb3N0cywgYSBoaWdoZXIgbGV2ZWwgb2YgaW5mbHVlbmNlIG92ZXIKK3RoZSBkaXJlY3Rpb24gb2Yga2VybmVsIGRldmVsb3BtZW50LCBhbmQgbW9yZS4gIEl0IGlzIGEgc2l0dWF0aW9uIHdoZXJlCitldmVyeWJvZHkgaW52b2x2ZWQgd2lucy4gIEZpcmUgdXAgeW91ciBlZGl0b3IgYW5kIGNvbWUgam9pbiB1czsgeW91IHdpbGwgYmUKK21vcmUgdGhhbiB3ZWxjb21lLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2VzLnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNlcy50eHQKaW5kZXggMDVjODA2NC4uMmJlMDgyNCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9kZXZpY2VzLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2RldmljZXMudHh0CkBAIC0yNTcxLDYgKzI1NzEsOSBAQAogCQkxNjAgPSAvZGV2L3VzYi9sZWdvdXNidG93ZXIwCTFzdCBVU0IgTGVnb3Rvd2VyIGRldmljZQogCQkgICAgLi4uCiAJCTE3NSA9IC9kZXYvdXNiL2xlZ291c2J0b3dlcjE1CTE2dGggVVNCIExlZ290b3dlciBkZXZpY2UKKwkJMTc2ID0gL2Rldi91c2IvdXNidG1jMQlGaXJzdCBVU0IgVE1DIGRldmljZQorCQkgICAuLi4KKwkJMTkyID0gL2Rldi91c2IvdXNidG1jMTYJMTZ0aCBVU0IgVE1DIGRldmljZQogCQkyNDAgPSAvZGV2L3VzYi9kYWJ1c2IwCUZpcnN0IGRhdWJ1c2IgZGV2aWNlCiAJCSAgICAuLi4KIAkJMjQzID0gL2Rldi91c2IvZGFidXNiMwlGb3VydGggZGFidXNiIGRldmljZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kb250ZGlmZiBiL0RvY3VtZW50YXRpb24vZG9udGRpZmYKaW5kZXggMjc4MDkzNS4uMWU4OWE1MSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9kb250ZGlmZgorKysgYi9Eb2N1bWVudGF0aW9uL2RvbnRkaWZmCkBAIC0yLDExICsyLDEzIEBACiAqLmF1eAogKi5iaW4KICouY3BpbwotKi5jc3MKKyouY3NwCisqLmRzcAogKi5kdmkKKyouZWxmCiAqLmVwcwotKi5mdy5nZW4uUwogKi5mdworKi5nZW4uUwogKi5naWYKICouZ3JlcAogKi5ncnAKQEAgLTMwLDYgKzMyLDcgQEAKICoucwogKi5zZ21sCiAqLnNvCisqLnNvLmRiZwogKi5zeW10eXBlcwogKi50YWIuYwogKi50YWIuaApAQCAtMzgsMjQgKzQxLDE3IEBACiAqLnhtbAogKl9NT0RVTEVTCiAqX3ZnYTE2LmMKLSpjc2NvcGUqCiAqfgogKi45CiAqLjkuZ3oKIC4qCi0uY3Njb3BlCi0uZ2l0aWdub3JlCi0ubWFpbG1hcAogLm1tCiA1M2M3MDBfZC5oCi01M2M4eHhfZC5oKgotQ09QWUlORwotQ1JFRElUUwogQ1ZTCiBDaGFuZ2VTZXQKIEltYWdlCiBLZXJudHlwZXMKLU1PRFMudHh0CitNb2R1bGUubWFya2VycwogTW9kdWxlLnN5bXZlcnMKIFBFTkRJTkcKIFNDQ1MKQEAgLTczLDcgKzY5LDkgQEAKIGJib290c2VjdAogYmluMmMKIGJpbmtlcm5lbC5zcGVjCitiaW5vZmZzZXQKIGJvb3RzZWN0Citib3VuZHMuaAogYnNldHVwCiBidGZpeHVwcHJlcAogYnVpbGQKQEAgLTg5LDM5ICs4NywzNiBAQAogY29uZmlnX2RhdGEuZ3oqCiBjb25tYWtlaGFzaAogY29uc29sZW1hcF9kZWZ0YmwuYyoKK2NwdXN0ci5oCiBjcmMzMnRhYmxlLmgqCiBjc2NvcGUuKgotZGVma2V5bWFwLmMqCitkZWZrZXltYXAuYwogZGV2bGlzdC5oKgogZG9jcHJvYwotZHVtbXlfc3ltLmMqCiBlbGYyZWNvZmYKIGVsZmNvbmZpZy5oKgotZmlsZWxpc3QKIGZpeGRlcAogZm9yZTIwMGVfbWtmaXJtCiBmb3JlMjAwZV9wY2FfZncuYyoKIGdjb25mCiBnZW4tZGV2bGlzdAotZ2VuLWtkYl9jbWRzLmMqCiBnZW5fY3JjMzJ0YWJsZQogZ2VuX2luaXRfY3BpbwogZ2Vua3N5bXMKLWdlbnRibAogKl9ncmF5MjU2LmMKK2loZXgyZncKIGlrY29uZmlnLmgqCiBpbml0cmFtZnNfZGF0YS5jcGlvCiBpbml0cmFtZnNfZGF0YS5jcGlvLmd6CiBpbml0cmFtZnNfbGlzdAoga2FsbHN5bXMKIGtjb25maWcKLWtjb25maWcudGsKLWtleXdvcmRzLmMqCitrZXl3b3Jkcy5jCiBrc3ltLmMqCiBrc3ltLmgqCiBreGdldHRleHQKIGxrY19kZWZzLmgKLWxleC5jKgorbGV4LmMKIGxleC4qLmMKIGxvZ29fKi5jCiBsb2dvXypfY2x1dDIyNC5jCkBAIC0xMzAsNyArMTI1LDYgQEAKIG1hY2gtdHlwZXMKIG1hY2gtdHlwZXMuaAogbWFjaHR5cGVzLmgKLW1ha2VfdGltZXNfaAogbWFwCiBtYXVpX2Jvb3QuaAogbWNvbmYKQEAgLTEzOCw2ICsxMzIsNyBAQAogbWtfZWxmY29uZmlnCiBta2Jvb3QKIG1rYnVnYm9vdAorbWtjcHVzdHIKIG1rZGVwCiBta3ByZXAKIG1rdGFibGVzCkBAIC0xNDUsMTEgKzE0MCwxMiBAQAogbW9kcG9zdAogbW9kdWxlcy5vcmRlcgogbW9kdmVyc2lvbnMuaCoKK25jc2NvcGUuKgogb2Zmc2V0LmgKIG9mZnNldHMuaAogb3VpLmMqCi1wYXJzZS5jKgotcGFyc2UuaCoKK3BhcnNlLmMKK3BhcnNlLmgKIHBhdGNoZXMqCiBwY2EyMDBlLmJpbgogcGNhMjAwZV9lY2QuYmluMgpAQCAtMTU3LDcgKzE1Myw3IEBACiBwaWdneWJhY2sKIHBubXRvbG9nbwogcHBjX2RlZnMuaCoKLXByb21jb25fdGJsLmMqCitwcm9tY29uX3RibC5jCiBwc3NfYm9vdC5oCiBxY29uZgogcmFpZDZhbHRpdmVjKi5jCkBAIC0xNjgsMjcgKzE2NCwzOCBAQAogc2V0dXAKIHNldHVwLmJpbgogc2V0dXAuZWxmCi1zaW03MTBfZC5oKgogc0ltYWdlCiBzbV90YmwqCiBzcGxpdC1pbmNsdWRlCitzeXNjYWxsdGFiLmgKIHRhZ3MKIHRmdHBib290LmltZwogdGltZWNvbnN0LmgKIHRpbWVzLmgqCi10a3BhcnNlCiB0cml4X2Jvb3QuaAogdXRzcmVsZWFzZS5oKgordmRzby1zeW1zLmxkcwogdmRzby5sZHMKK3Zkc28zMi1pbnQ4MC1zeW1zLmxkcwordmRzbzMyLXN5bXMubGRzCit2ZHNvMzItc3lzY2FsbC1zeW1zLmxkcwordmRzbzMyLXN5c2VudGVyLXN5bXMubGRzCit2ZHNvMzIubGRzCit2ZHNvMzIuc28uZGJnCit2ZHNvNjQubGRzCit2ZHNvNjQuc28uZGJnCiB2ZXJzaW9uLmgqCiB2bWxpbnV4CiB2bWxpbnV4LSoKIHZtbGludXguYW91dAotdm1saW51eCoubGRzKgotdm1saW51eCouc2NyCit2bWxpbnV4LmxkcwogdnN5c2NhbGwubGRzCit2c3lzY2FsbF8zMi5sZHMKIHdhbnhsZncuaW5jCiB1SW1hZ2UKIHVuaWZkZWYKK3dha2V1cC5iaW4KK3dha2V1cC5lbGYKK3dha2V1cC5sZHMKIHpJbWFnZSoKIHpjb25mLmhhc2guYwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9mYi9pbnRlbGZiLnR4dCBiL0RvY3VtZW50YXRpb24vZmIvaW50ZWxmYi50eHQKaW5kZXggMjdhMzE2MC4uZGQ5ZTk0NCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9mYi9pbnRlbGZiLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2ZiL2ludGVsZmIudHh0CkBAIC0xNCw2ICsxNCw3IEBACiAJSW50ZWwgOTE1R00KIAlJbnRlbCA5NDVHCiAJSW50ZWwgOTQ1R00KKwlJbnRlbCA5NDVHTUUKIAlJbnRlbCA5NjVHCiAJSW50ZWwgOTY1R00KIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9mYi91dmVzYWZiLnR4dCBiL0RvY3VtZW50YXRpb24vZmIvdXZlc2FmYi50eHQKaW5kZXggYmNmYzIzMy4uN2FjM2M0MCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9mYi91dmVzYWZiLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2ZiL3V2ZXNhZmIudHh0CkBAIC01Miw3ICs1Miw3IEBACiAKICB2aWRlbz11dmVzYWZiOjEwMjR4NzY4LTMyLG10cnI6Myx5d3JhcCAoY29tcGlsZWQgaW50byB0aGUga2VybmVsKQogCi0gIyBtb2Rwcm9iZSB1dmVzYWZiIG1vZGU9MTAyNHg3NjgtMzIgbXRycj0zIHNjcm9sbD15d3JhcCAgKG1vZHVsZSkKKyAjIG1vZHByb2JlIHV2ZXNhZmIgbW9kZV9vcHRpb249MTAyNHg3NjgtMzIgbXRycj0zIHNjcm9sbD15d3JhcCAgKG1vZHVsZSkKIAogQWNjZXB0ZWQgb3B0aW9uczoKIApAQCAtMTA1LDcgKzEwNSw3IEBACiA8bW9kZT4gIFRoZSBtb2RlIHlvdSB3YW50IHRvIHNldCwgaW4gdGhlIHN0YW5kYXJkIG1vZGVkYiBmb3JtYXQuICBSZWZlciB0bwogICAgICAgICBtb2RlZGIudHh0IGZvciBhIGRldGFpbGVkIGRlc2NyaXB0aW9uLiAgV2hlbiB1dmVzYWZiIGlzIGNvbXBpbGVkIGFzCiAgICAgICAgIGEgbW9kdWxlLCB0aGUgbW9kZSBzdHJpbmcgc2hvdWxkIGJlIHByb3ZpZGVkIGFzIGEgdmFsdWUgb2YgdGhlCi0gICAgICAgICdtb2RlJyBvcHRpb24uCisgICAgICAgICdtb2RlX29wdGlvbicgb3B0aW9uLgogCiB2YmVtb2RlOngKICAgICAgICAgRm9yY2UgdGhlIHVzZSBvZiBWQkUgbW9kZSB4LiAgVGhlIG1vZGUgd2lsbCBvbmx5IGJlIHNldCBpZiBpdCdzCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZiL3ZpYWZiLm1vZGVzIGIvRG9jdW1lbnRhdGlvbi9mYi92aWFmYi5tb2RlcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMmU1YjQ4Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9mYi92aWFmYi5tb2RlcwpAQCAtMCwwICsxLDg3MCBAQAorIworIworIyAgIFRoZXNlIGRhdGEgYXJlIGJhc2VkIG9uIHRoZSBDUlRDIHBhcmFtZXRlcnMgaW4KKyMKKyMgICAgICAgVklBIEludGVncmF0aW9uIEdyYXBoaWNzIENoaXAKKyMgICAgICAgKEMpIDIwMDQgVklBIFRlY2hub2xvZ2llcyBJbmMuCisjCisKKyMKKyMgICA2NDB4NDgwLCA2MCBIeiwgTm9uLUludGVybGFjZWQgKDI1LjE3NSBNSHogZG90Y2xvY2spCisjCisjICAgICAgICAgICAgICAgSG9yaXpvbnRhbCAgVmVydGljYWwKKyMgICBSZXNvbHV0aW9uICAgICAgNjQwICAgICA0ODAKKyMgICBTY2FuIEZyZXF1ZW5jeSAgICAgIDMxLjQ2OSBrSHogIDU5Ljk0IEh6CisjICAgU3luYyBXaWR0aCAgICAgIDMuODEzIHVzICAgIDAuMDY0IG1zCisjICAgICAgICAgICAgICAgMTIgY2hhcnMgICAgMiBsaW5lcworIyAgIEZyb250IFBvcmNoICAgICAwLjYzNiB1cyAgICAwLjMxOCAgbXMKKyMgICAgICAgICAgICAgICAyIGNoYXJzICAgICAxMCBsaW5lcworIyAgIEJhY2sgUG9yY2ggICAgICAxLjkwNyB1cyAgICAxLjA0OCAgbXMKKyMgICAgICAgICAgICAgICA2IGNoYXJzICAgICAzMyBsaW5lcworIyAgIEFjdGl2ZSBUaW1lICAgICAyNS40MjIgdXMgICAxNS4yNTMgbXMKKyMgICAgICAgICAgICAgICA4MCBjaGFycyAgICA0ODAgbGluZXMKKyMgICBCbGFuayBUaW1lICAgICAgNi4zNTYgdXMgICAgMS40MzAgbXMKKyMgICAgICAgICAgICAgICAyMCBjaGFycyAgICA0NSBsaW5lcworIyAgIFBvbGFyaXR5ICAgICAgICBuZWdhdGl2ZSAgICBuZWdhdGl2ZQorIworCittb2RlICI2NDB4NDgwLTYwIgorIyBEOiAyNS4xNzUgTUh6LCBIOiAzMS40Njkga0h6LCBWOiA1OS45NCBIegorICAgIGdlb21ldHJ5IDY0MCA0ODAgNjQwIDQ4MCAzMgorICAgIHRpbWluZ3MgMzk3MjIgNDggMTYgMzMgMTAgOTYgMiBlbmRtb2RlIG1vZGUgIjQ4MHg2NDAtNjAiCisjIEQ6IDI0LjgyMyBNSHosIEg6IDM5Ljc4MCBrSHosIFY6IDYwLjAwIEh6CisgICAgZ2VvbWV0cnkgNDgwIDY0MCA0ODAgNjQwIDMyIHRpbWluZ3MgMzk3MjIgNzIgMjQgMTkgMSA0OCAzIGVuZG1vZGUKKyMKKyMgICA2NDB4NDgwLCA3NSBIeiwgTm9uLUludGVybGFjZWQgKDMxLjUwIE1IeiBkb3RjbG9jaykKKyMKKyMgICAgICAgICAgICAgICBIb3Jpem9udGFsICBWZXJ0aWNhbAorIyAgIFJlc29sdXRpb24gICAgICA2NDAgICAgIDQ4MAorIyAgIFNjYW4gRnJlcXVlbmN5ICAgICAgMzcuNTAwIGtIeiAgNzUuMDAgSHoKKyMgICBTeW5jIFdpZHRoICAgICAgMi4wMzIgdXMgICAgMC4wODAgbXMKKyMgICAgICAgICAgICAgICA4IGNoYXJzICAgICAzIGxpbmVzCisjICAgRnJvbnQgUG9yY2ggICAgIDAuNTA4IHVzICAgIDAuMDI3IG1zCisjICAgICAgICAgICAgICAgMiBjaGFycyAgICAgMSBsaW5lcworIyAgIEJhY2sgUG9yY2ggICAgICAzLjgxMCB1cyAgICAwLjQyNyBtcworIyAgICAgICAgICAgICAgIDE1IGNoYXJzICAgIDE2IGxpbmVzCisjICAgQWN0aXZlIFRpbWUgICAgIDIwLjMxNyB1cyAgIDEyLjgwMCBtcworIyAgICAgICAgICAgICAgIDgwIGNoYXJzICAgIDQ4MCBsaW5lcworIyAgIEJsYW5rIFRpbWUgICAgICA2LjM0OSB1cyAgICAwLjUzMyBtcworIyAgICAgICAgICAgICAgIDI1IGNoYXJzICAgIDIwIGxpbmVzCisjICAgUG9sYXJpdHkgICAgICAgIG5lZ2F0aXZlICAgIG5lZ2F0aXZlCisjCisgICAgbW9kZSAiNjQweDQ4MC03NSIKKyMgRDogMzEuNTAgTUh6LCBIOiAzNy41MDAga0h6LCBWOiA3NS4wMCBIegorICAgIGdlb21ldHJ5IDY0MCA0ODAgNjQwIDQ4MCAzMiB0aW1pbmdzIDMxNzQ3IDEyMCAxNiAxNiAxIDY0IDMgZW5kbW9kZQorIworIyAgIDY0MHg0ODAsIDg1IEh6LCBOb24tSW50ZXJsYWNlZCAoMzYuMDAwIE1IeiBkb3RjbG9jaykKKyMKKyMgICAgICAgICAgICAgICBIb3Jpem9udGFsICBWZXJ0aWNhbAorIyAgIFJlc29sdXRpb24gICAgICA2NDAgICAgIDQ4MAorIyAgIFNjYW4gRnJlcXVlbmN5ICA0My4yNjkga0h6ICA4NS4wMCBIegorIyAgIFN5bmMgV2lkdGggICAgICAxLjU1NiB1cyAgICAwLjA2OSBtcworIyAgICAgICAgICAgICAgIDcgY2hhcnMgICAgIDMgbGluZXMKKyMgICBGcm9udCBQb3JjaCAgICAgMS41NTYgdXMgICAgMC4wMjMgbXMKKyMgICAgICAgICAgICAgICA3IGNoYXJzICAgICAxIGxpbmVzCisjICAgQmFjayBQb3JjaCAgICAgIDIuMjIyIHVzICAgIDAuNTc4IG1zCisjICAgICAgICAgICAgICAgMTAgY2hhcnMgICAgMjUgbGluZXMKKyMgICBBY3RpdmUgVGltZSAgICAgMTcuNzc4IHVzICAgMTEuMDkzIG1zCisjICAgICAgICAgICAgICAgODAgY2hhcnMgICAgNDgwIGxpbmVzCisjICAgQmxhbmsgVGltZSAgICAgIDUuMzMzIHVzICAgIDAuNjcwIG1zCisjICAgICAgICAgICAgICAgMjQgY2hhcnMgICAgMjkgbGluZXMKKyMgICBQb2xhcml0eSAgICAgICAgbmVnYXRpdmUgICAgbmVnYXRpdmUKKyMKKyAgICBtb2RlICI2NDB4NDgwLTg1IgorIyBEOiAzNi4wMDAgTUh6LCBIOiA0My4yNjkga0h6LCBWOiA4NS4wMCBIegorICAgIGdlb21ldHJ5IDY0MCA0ODAgNjQwIDQ4MCAzMiB0aW1pbmdzIDI3Nzc3IDgwIDU2IDI1IDEgNTYgMyBlbmRtb2RlCisjCisjICAgNjQweDQ4MCwgMTAwIEh6LCBOb24tSW50ZXJsYWNlZCAoNDMuMTYzIE1IeiBkb3RjbG9jaykKKyMKKyMgICAgICAgICAgICAgICBIb3Jpem9udGFsICBWZXJ0aWNhbAorIyAgIFJlc29sdXRpb24gICAgICA2NDAgICAgIDQ4MAorIyAgIFNjYW4gRnJlcXVlbmN5ICAgICAgNTAuOTAwIGtIeiAgMTAwLjAwIEh6CisjICAgU3luYyBXaWR0aCAgICAgIDEuNDgzIHVzICAgIDAuMDU4IG1zCisjICAgICAgICAgICAgICAgOCBjaGFycyAgICAgMyBsaW5lcworIyAgIEZyb250IFBvcmNoICAgICAwLjkyNyB1cyAgICAwLjAxOSBtcworIyAgICAgICAgICAgICAgIDUgY2hhcnMgICAgIDEgbGluZXMKKyMgICBCYWNrIFBvcmNoICAgICAgMi40MDkgdXMgICAgMC40NzUgbXMKKyMgICAgICAgICAgICAgICAxMyBjaGFycyAgICAyNSBsaW5lcworIyAgIEFjdGl2ZSBUaW1lICAgICAxNC44MjcgdXMgICA5LjQzMCBtcworIyAgICAgICAgICAgICAgIDgwIGNoYXJzICAgIDQ4MCBsaW5lcworIyAgIEJsYW5rIFRpbWUgICAgICA0LjgxOSB1cyAgICAwLjU3MCBtcworIyAgICAgICAgICAgICAgIDI2IGNoYXJzICAgIDI5IGxpbmVzCisjICAgUG9sYXJpdHkgICAgICAgIHBvc2l0aXZlICAgIHBvc2l0aXZlCisjCisgICAgbW9kZSAiNjQweDQ4MC0xMDAiCisjIEQ6IDQzLjE2MyBNSHosIEg6IDUwLjkwMCBrSHosIFY6IDEwMC4wMCBIegorICAgIGdlb21ldHJ5IDY0MCA0ODAgNjQwIDQ4MCAzMiB0aW1pbmdzIDIzMTY4IDEwNCA0MCAyNSAxIDY0IDMgZW5kbW9kZQorIworIyAgIDY0MHg0ODAsIDEyMCBIeiwgTm9uLUludGVybGFjZWQgKDUyLjQwNiBNSHogZG90Y2xvY2spCisjCisjICAgICAgICAgICAgICAgSG9yaXpvbnRhbCAgVmVydGljYWwKKyMgICBSZXNvbHV0aW9uICAgICAgNjQwICAgICA0ODAKKyMgICBTY2FuIEZyZXF1ZW5jeSAgICAgIDYxLjgwMCBrSHogIDEyMC4wMCBIegorIyAgIFN5bmMgV2lkdGggICAgICAxLjIyMSB1cyAgICAwLjA0OCBtcworIyAgICAgICAgICAgICAgIDggY2hhcnMgICAgICAgICAzIGxpbmVzCisjICAgRnJvbnQgUG9yY2ggICAgIDAuNzYzIHVzICAgIDAuMDE2IG1zCisjICAgICAgICAgICAgICAgNSBjaGFycyAgICAgMSBsaW5lcworIyAgIEJhY2sgUG9yY2ggICAgICAxLjk4NCB1cyAgICAwLjQ5NiBtcworIyAgICAgICAgICAgICAgIDEzIGNoYXJzICAgIDMxIGxpbmVzCisjICAgQWN0aXZlIFRpbWUgICAgIDEyLjIxMiB1cyAgIDcuNzY3IG1zCisjICAgICAgICAgICAgICAgODAgY2hhcnMgICAgNDgwIGxpbmVzCisjICAgQmxhbmsgVGltZSAgICAgIDMuOTY5IHVzICAgIDAuNTY2IG1zCisjICAgICAgICAgICAgICAgMjYgY2hhcnMgICAgMzUgbGluZXMKKyMgICBQb2xhcml0eSAgICAgICAgcG9zaXRpdmUgICAgcG9zaXRpdmUKKyMKKyAgICBtb2RlICI2NDB4NDgwLTEyMCIKKyMgRDogNTIuNDA2IE1IeiwgSDogNjEuODAwIGtIeiwgVjogMTIwLjAwIEh6CisgICAgZ2VvbWV0cnkgNjQwIDQ4MCA2NDAgNDgwIDMyIHRpbWluZ3MgMTkwODEgMTA0IDQwIDMxIDEgNjQgMyBlbmRtb2RlCisjCisjICAgNzIweDQ4MCwgNjAgSHosIE5vbi1JbnRlcmxhY2VkICgyNi44ODAgTUh6IGRvdGNsb2NrKQorIworIyAgICAgICAgICAgICAgIEhvcml6b250YWwgIFZlcnRpY2FsCisjICAgUmVzb2x1dGlvbiAgICAgIDcyMCAgICAgNDgwCisjICAgU2NhbiBGcmVxdWVuY3kgICAgICAzMC4wMDAga0h6ICA2MC4yNDEgSHoKKyMgICBTeW5jIFdpZHRoICAgICAgMi42NzkgdXMgICAgMC4wOTkgbXMKKyMgICAgICAgICAgICAgICA5IGNoYXJzICAgICAzIGxpbmVzCisjICAgRnJvbnQgUG9yY2ggICAgIDAuNTk1IHVzICAgIDAuMDMzIG1zCisjICAgICAgICAgICAgICAgMiBjaGFycyAgICAgMSBsaW5lcworIyAgIEJhY2sgUG9yY2ggICAgICAzLjI3NCB1cyAgICAwLjQ2MiBtcworIyAgICAgICAgICAgICAgIDExIGNoYXJzICAgIDE0IGxpbmVzCisjICAgQWN0aXZlIFRpbWUgICAgIDI2Ljc4NiB1cyAgIDE2LjAwMCBtcworIyAgICAgICAgICAgICAgIDkwIGNoYXJzICAgIDQ4MCBsaW5lcworIyAgIEJsYW5rIFRpbWUgICAgICA2LjU0OCB1cyAgICAwLjYwMCBtcworIyAgICAgICAgICAgICAgIDIyIGNoYXJzICAgIDE4IGxpbmVzCisjICAgUG9sYXJpdHkgICAgICAgIHBvc2l0aXZlICAgIHBvc2l0aXZlCisjCisgICAgbW9kZSAiNzIweDQ4MC02MCIKKyMgRDogMjYuODgwIE1IeiwgSDogMzAuMDAwIGtIeiwgVjogNjAuMjQgSHoKKyAgICBnZW9tZXRyeSA3MjAgNDgwIDcyMCA0ODAgMzIgdGltaW5ncyAzNzIwMiA4OCAxNiAxNCAxIDcyIDMgZW5kbW9kZQorIworIyAgIDgwMHg0ODAsIDYwIEh6LCBOb24tSW50ZXJsYWNlZCAoMjkuNTgxIE1IeiBkb3RjbG9jaykKKyMKKyMgICAgICAgICAgICAgICBIb3Jpem9udGFsICAgIFZlcnRpY2FsCisjICAgUmVzb2x1dGlvbiAgICAgIDgwMCAgICAgICAgIDQ4MAorIyAgIFNjYW4gRnJlcXVlbmN5ICAyOS44OTIga0h6ICA2MC4wMCBIegorIyAgIFN5bmMgV2lkdGggICAgICAyLjcwNCB1cyAgICAxMDAuNjA0IHVzCisjICAgICAgICAgICAgICAgICAgIDEwIGNoYXJzICAgIDMgbGluZXMKKyMgICBGcm9udCBQb3JjaCAgICAgMC41NDEgdXMgICAgMzMuNTM1IHVzCisjICAgICAgICAgICAgICAgICAgIDIgY2hhcnMgICAgIDEgbGluZXMKKyMgICBCYWNrIFBvcmNoICAgICAgMy4yNDUgdXMgICAgNDM1Ljk0OSB1cworIyAgICAgICAgICAgICAgICAgICAxMiBjaGFycyAgICAxMyBsaW5lcworIyAgIEFjdGl2ZSBUaW1lICAgICAyNy4wNDQgdXMgICAxNi4wOTcgbXMKKyMgICAgICAgICAgICAgICAgICAgMTAwIGNoYXJzICAgNDgwIGxpbmVzCisjICAgQmxhbmsgVGltZSAgICAgIDYuNDkxIHVzICAgIDAuNTcwIG1zCisjICAgICAgICAgICAgICAgICAgIDI0IGNoYXJzICAgIDE3IGxpbmVzCisjICAgUG9sYXJpdHkgICAgICAgIHBvc2l0aXZlICAgIHBvc2l0aXZlCisjCisgICAgbW9kZSAiODAweDQ4MC02MCIKKyMgRDogMjkuNTAwIE1IeiwgSDogMjkuNzM4IGtIeiwgVjogNjAuMDAgSHoKKyAgICBnZW9tZXRyeSA4MDAgNDgwIDgwMCA0ODAgMzIgdGltaW5ncyAzMzgwNSA5NiAyNCAxMCAzIDcyIDcgZW5kbW9kZQorIworIyAgIDcyMHg1NzYsIDYwIEh6LCBOb24tSW50ZXJsYWNlZCAoMzIuNjY4IE1IeiBkb3RjbG9jaykKKyMKKyMgICAgICAgICAgICAgICBIb3Jpem9udGFsICBWZXJ0aWNhbAorIyAgIFJlc29sdXRpb24gICAgICA3MjAgICAgIDU3NgorIyAgIFNjYW4gRnJlcXVlbmN5ICAgICAgMzUuODIwIGtIeiAgNjAuMDAgSHoKKyMgICBTeW5jIFdpZHRoICAgICAgMi4yMDQgdXMgICAgMC4wODMgbXMKKyMgICAgICAgICAgICAgICA5IGNoYXJzICAgICAzIGxpbmVzCisjICAgRnJvbnQgUG9yY2ggICAgIDAuNzM1IHVzICAgIDAuMDI3IG1zCisjICAgICAgICAgICAgICAgMyBjaGFycyAgICAgMSBsaW5lcworIyAgIEJhY2sgUG9yY2ggICAgICAyLjkzOSB1cyAgICAwLjQ1OSBtcworIyAgICAgICAgICAgICAgIDEyIGNoYXJzICAgIDE3IGxpbmVzCisjICAgQWN0aXZlIFRpbWUgICAgIDIyLjA0MCB1cyAgIDE2LjA4MCBtcworIyAgICAgICAgICAgICAgIDkwIGNoYXJzICAgIDQ3NiBsaW5lcworIyAgIEJsYW5rIFRpbWUgICAgICA1Ljg3NyB1cyAgICAwLjU4NiBtcworIyAgICAgICAgICAgICAgIDI0IGNoYXJzICAgIDIxIGxpbmVzCisjICAgUG9sYXJpdHkgICAgICAgIHBvc2l0aXZlICAgIHBvc2l0aXZlCisjCisgICAgbW9kZSAiNzIweDU3Ni02MCIKKyMgRDogMzIuNjY4IE1IeiwgSDogMzUuODIwIGtIeiwgVjogNjAuMDAgSHoKKyAgICBnZW9tZXRyeSA3MjAgNTc2IDcyMCA1NzYgMzIgdGltaW5ncyAzMDYxMSA5NiAyNCAxNyAxIDcyIDMgZW5kbW9kZQorIworIyAgIDgwMHg2MDAsIDYwIEh6LCBOb24tSW50ZXJsYWNlZCAoNDAuMDAgTUh6IGRvdGNsb2NrKQorIworIyAgICAgICAgICAgICAgIEhvcml6b250YWwgIFZlcnRpY2FsCisjICAgUmVzb2x1dGlvbiAgICAgIDgwMCAgICAgNjAwCisjICAgU2NhbiBGcmVxdWVuY3kgICAgICAzNy44Nzkga0h6ICA2MC4zMiBIegorIyAgIFN5bmMgV2lkdGggICAgICAzLjIwMCB1cyAgICAwLjEwNiBtcworIyAgICAgICAgICAgICAgIDE2IGNoYXJzICAgIDQgbGluZXMKKyMgICBGcm9udCBQb3JjaCAgICAgMS4wMDAgdXMgICAgMC4wMjYgbXMKKyMgICAgICAgICAgICAgICA1IGNoYXJzICAgICAxIGxpbmVzCisjICAgQmFjayBQb3JjaCAgICAgIDIuMjAwIHVzICAgIDAuNjA3IG1zCisjICAgICAgICAgICAgICAgMTEgY2hhcnMgICAgMjMgbGluZXMKKyMgICBBY3RpdmUgVGltZSAgICAgMjAuMDAwIHVzICAgMTUuODQwIG1zCisjICAgICAgICAgICAgICAgMTAwIGNoYXJzICAgNjAwIGxpbmVzCisjICAgQmxhbmsgVGltZSAgICAgIDYuNDAwIHVzICAgIDAuNzM5IG1zCisjICAgICAgICAgICAgICAgMzIgY2hhcnMgICAgMjggbGluZXMKKyMgICBQb2xhcml0eSAgICAgICAgcG9zaXRpdmUgICAgcG9zaXRpdmUKKyMKKyAgICBtb2RlICI4MDB4NjAwLTYwIgorIyBEOiA0MC4wMCBNSHosIEg6IDM3Ljg3OSBrSHosIFY6IDYwLjMyIEh6CisgICAgZ2VvbWV0cnkgODAwIDYwMCA4MDAgNjAwIDMyCisgICAgdGltaW5ncyAyNTAwMCA4OCA0MCAyMyAxIDEyOCA0IGhzeW5jIGhpZ2ggdnN5bmMgaGlnaCBlbmRtb2RlCisjCisjICAgODAweDYwMCwgNzUgSHosIE5vbi1JbnRlcmxhY2VkICg0OS41MCBNSHogZG90Y2xvY2spCisjCisjICAgICAgICAgICAgICAgSG9yaXpvbnRhbCAgVmVydGljYWwKKyMgICBSZXNvbHV0aW9uICAgICAgODAwICAgICA2MDAKKyMgICBTY2FuIEZyZXF1ZW5jeSAgICAgIDQ2Ljg3NSBrSHogIDc1LjAwIEh6CisjICAgU3luYyBXaWR0aCAgICAgIDEuNjE2IHVzICAgIDAuMDY0IG1zCisjICAgICAgICAgICAgICAgMTAgY2hhcnMgICAgMyBsaW5lcworIyAgIEZyb250IFBvcmNoICAgICAwLjMyMyB1cyAgICAwLjAyMSBtcworIyAgICAgICAgICAgICAgIDIgY2hhcnMgICAgIDEgbGluZXMKKyMgICBCYWNrIFBvcmNoICAgICAgMy4yMzIgdXMgICAgMC40NDggbXMKKyMgICAgICAgICAgICAgICAyMCBjaGFycyAgICAyMSBsaW5lcworIyAgIEFjdGl2ZSBUaW1lICAgICAxNi4xNjIgdXMgICAxMi44MDAgbXMKKyMgICAgICAgICAgICAgICAxMDAgY2hhcnMgICA2MDAgbGluZXMKKyMgICBCbGFuayBUaW1lICAgICAgNS4xNzIgdXMgICAgMC41MzMgbXMKKyMgICAgICAgICAgICAgICAzMiBjaGFycyAgICAyNSBsaW5lcworIyAgIFBvbGFyaXR5ICAgICAgICBwb3NpdGl2ZSAgICBwb3NpdGl2ZQorIworICAgIG1vZGUgIjgwMHg2MDAtNzUiCisjIEQ6IDQ5LjUwIE1IeiwgSDogNDYuODc1IGtIeiwgVjogNzUuMDAgSHoKKyAgICBnZW9tZXRyeSA4MDAgNjAwIDgwMCA2MDAgMzIKKyAgICB0aW1pbmdzIDIwMjAzIDE2MCAxNiAyMSAxIDgwIDMgaHN5bmMgaGlnaCB2c3luYyBoaWdoIGVuZG1vZGUKKyMKKyMgICA4MDB4NjAwLCA4NSBIeiwgTm9uLUludGVybGFjZWQgKDU2LjI1IE1IeiBkb3RjbG9jaykKKyMKKyMgICAgICAgICAgICAgICBIb3Jpem9udGFsICBWZXJ0aWNhbAorIyAgIFJlc29sdXRpb24gICAgICA4MDAgICAgIDYwMAorIyAgIFNjYW4gRnJlcXVlbmN5ICAgICAgNTMuNjc0IGtIeiAgODUuMDYxIEh6CisjICAgU3luYyBXaWR0aCAgICAgIDEuMTM4IHVzICAgIDAuMDU2IG1zCisjICAgICAgICAgICAgICAgOCBjaGFycyAgICAgMyBsaW5lcworIyAgIEZyb250IFBvcmNoICAgICAwLjU2OSB1cyAgICAwLjAxOSBtcworIyAgICAgICAgICAgICAgIDQgY2hhcnMgICAgIDEgbGluZXMKKyMgICBCYWNrIFBvcmNoICAgICAgMi43MDIgdXMgICAgMC41MDMgbXMKKyMgICAgICAgICAgICAgICAxOSBjaGFycyAgICAyNyBsaW5lcworIyAgIEFjdGl2ZSBUaW1lICAgICAxNC4yMjIgdXMgICAxMS4xNzkgbXMKKyMgICAgICAgICAgICAgICAxMDAgY2hhcnMgICA2MDAgbGluZXMKKyMgICBCbGFuayBUaW1lICAgICAgNC40MDkgdXMgICAgMC41NzggbXMKKyMgICAgICAgICAgICAgICAzMSBjaGFycyAgICAzMSBsaW5lcworIyAgIFBvbGFyaXR5ICAgICAgICBwb3NpdGl2ZSAgICBwb3NpdGl2ZQorIworICAgIG1vZGUgIjgwMHg2MDAtODUiCisjIEQ6IDU2LjI1IE1IeiwgSDogNTMuNjc0IGtIeiwgVjogODUuMDYxIEh6CisgICAgZ2VvbWV0cnkgODAwIDYwMCA4MDAgNjAwIDMyCisgICAgdGltaW5ncyAxNzc3NyAxNTIgMzIgMjcgMSA2NCAzIGhzeW5jIGhpZ2ggdnN5bmMgaGlnaCBlbmRtb2RlCisjCisjICAgODAweDYwMCwgMTAwIEh6LCBOb24tSW50ZXJsYWNlZCAoNjcuNTAgTUh6IGRvdGNsb2NrKQorIworIyAgICAgICAgICAgICAgIEhvcml6b250YWwgIFZlcnRpY2FsCisjICAgUmVzb2x1dGlvbiAgICAgIDgwMCAgICAgNjAwCisjICAgU2NhbiBGcmVxdWVuY3kgICAgICA2Mi41MDAga0h6ICAxMDAuMDAgSHoKKyMgICBTeW5jIFdpZHRoICAgICAgMC45NDggdXMgICAgMC4wNjQgbXMKKyMgICAgICAgICAgICAgICA4IGNoYXJzICAgICA0IGxpbmVzCisjICAgRnJvbnQgUG9yY2ggICAgIDAuMDAwIHVzICAgIDAuMTEyIG1zCisjICAgICAgICAgICAgICAgMCBjaGFycyAgICAgNyBsaW5lcworIyAgIEJhY2sgUG9yY2ggICAgICAzLjIwMCB1cyAgICAwLjIyNCBtcworIyAgICAgICAgICAgICAgIDI3IGNoYXJzICAgIDE0IGxpbmVzCisjICAgQWN0aXZlIFRpbWUgICAgIDExLjg1MiB1cyAgIDkuNjAwIG1zCisjICAgICAgICAgICAgICAgMTAwIGNoYXJzICAgNjAwIGxpbmVzCisjICAgQmxhbmsgVGltZSAgICAgIDQuMTQ4IHVzICAgIDAuNDAwIG1zCisjICAgICAgICAgICAgICAgMzUgY2hhcnMgICAgMjUgbGluZXMKKyMgICBQb2xhcml0eSAgICAgICAgcG9zaXRpdmUgICAgcG9zaXRpdmUKKyMKKyAgICBtb2RlICI4MDB4NjAwLTEwMCIKKyMgRDogNjcuNTAgTUh6LCBIOiA2Mi41MDAga0h6LCBWOiAxMDAuMDAgSHoKKyAgICBnZW9tZXRyeSA4MDAgNjAwIDgwMCA2MDAgMzIKKyAgICB0aW1pbmdzIDE0NjY3IDIxNiAwIDE0IDcgNjQgNCBoc3luYyBoaWdoIHZzeW5jIGhpZ2ggZW5kbW9kZQorIworIyAgIDgwMHg2MDAsIDEyMCBIeiwgTm9uLUludGVybGFjZWQgKDgzLjk1MCBNSHogZG90Y2xvY2spCisjCisjICAgICAgICAgICAgICAgSG9yaXpvbnRhbCAgVmVydGljYWwKKyMgICBSZXNvbHV0aW9uICAgICAgODAwICAgICA2MDAKKyMgICBTY2FuIEZyZXF1ZW5jeSAgNzcuMTYwIGtIeiAgMTIwLjAwIEh6CisjICAgU3luYyBXaWR0aCAgICAgIDEuMDQ4IHVzICAgIDAuMDM5IG1zCisjICAgICAgICAgICAgICAgMTEgY2hhcnMgICAgMyBsaW5lcworIyAgIEZyb250IFBvcmNoICAgICAwLjY2NyB1cyAgICAwLjAxMyBtcworIyAgICAgICAgICAgICAgIDcgY2hhcnMgICAgIDEgbGluZXMKKyMgICBCYWNrIFBvcmNoICAgICAgMS43MTUgdXMgICAgMC41MDcgbXMKKyMgICAgICAgICAgICAgICAxOCBjaGFycyAgICAzOSBsaW5lcworIyAgIEFjdGl2ZSBUaW1lICAgICA5LjUyOSB1cyAgICA3Ljc3NiBtcworIyAgICAgICAgICAgICAgIDEwMCBjaGFycyAgIDYwMCBsaW5lcworIyAgIEJsYW5rIFRpbWUgICAgICAzLjQzMSB1cyAgICAwLjU1NyBtcworIyAgICAgICAgICAgICAgIDM2IGNoYXJzICAgIDQzIGxpbmVzCisjICAgUG9sYXJpdHkgICAgICAgIHBvc2l0aXZlICAgIHBvc2l0aXZlCisjCisgICAgbW9kZSAiODAweDYwMC0xMjAiCisjIEQ6IDgzLjk1MCBNSHosIEg6IDc3LjE2MCBrSHosIFY6IDEyMC4wMCBIegorICAgIGdlb21ldHJ5IDgwMCA2MDAgODAwIDYwMCAzMgorICAgIHRpbWluZ3MgMTE5MTIgMTQ0IDU2IDM5IDEgODggMyBoc3luYyBoaWdoIHZzeW5jIGhpZ2ggZW5kbW9kZQorIworIyAgIDg0OHg0ODAsIDYwIEh6LCBOb24tSW50ZXJsYWNlZCAoMzEuNDkwIE1IeiBkb3RjbG9jaykKKyMKKyMgICAgICAgICAgICAgICBIb3Jpem9udGFsICBWZXJ0aWNhbAorIyAgIFJlc29sdXRpb24gICAgICA4NDggICAgIDQ4MAorIyAgIFNjYW4gRnJlcXVlbmN5ICAyOS44MjAga0h6ICA2MC4wMCBIegorIyAgIFN5bmMgV2lkdGggICAgICAyLjc5NSB1cyAgICAwLjA5OSBtcworIyAgICAgICAgICAgICAgIDExIGNoYXJzICAgIDMgbGluZXMKKyMgICBGcm9udCBQb3JjaCAgICAgMC41MDggdXMgICAgMC4wMzMgbXMKKyMgICAgICAgICAgICAgICAyIGNoYXJzICAgICAxIGxpbmVzCisjICAgQmFjayBQb3JjaCAgICAgIDMuMzAzIHVzICAgIDAuNDI5IG1zCisjICAgICAgICAgICAgICAgMTMgY2hhcnMgICAgMTMgbGluZXMKKyMgICBBY3RpdmUgVGltZSAgICAgMjYuOTI5IHVzICAgMTYuMDk3IG1zCisjICAgICAgICAgICAgICAgMTA2IGNoYXJzICAgNDgwIGxpbmVzCisjICAgQmxhbmsgVGltZSAgICAgIDYuNjA1IHVzICAgIDAuNTcwIG1zCisjICAgICAgICAgICAgICAgMjYgY2hhcnMgICAgMTcgbGluZXMKKyMgICBQb2xhcml0eSAgICAgICAgcG9zaXRpdmUgICAgcG9zaXRpdmUKKyMKKyAgICBtb2RlICI4NDh4NDgwLTYwIgorIyBEOiAzMS41MDAgTUh6LCBIOiAyOS44MzAga0h6LCBWOiA2MC4wMCBIegorICAgIGdlb21ldHJ5IDg0OCA0ODAgODQ4IDQ4MCAzMgorICAgIHRpbWluZ3MgMzE3NDYgMTA0IDI0IDEyIDMgODAgNSBoc3luYyBoaWdoIHZzeW5jIGhpZ2ggZW5kbW9kZQorIworIyAgIDg1Nng0ODAsIDYwIEh6LCBOb24tSW50ZXJsYWNlZCAoMzEuNzI4IE1IeiBkb3RjbG9jaykKKyMKKyMgICAgICAgICAgICAgICBIb3Jpem9udGFsICBWZXJ0aWNhbAorIyAgIFJlc29sdXRpb24gICAgICA4NTYgICAgIDQ4MAorIyAgIFNjYW4gRnJlcXVlbmN5ICAyOS44MjAga0h6ICA2MC4wMCBIegorIyAgIFN5bmMgV2lkdGggICAgICAyLjc3NCB1cyAgICAwLjA5OSBtcworIyAgICAgICAgICAgICAgIDExIGNoYXJzICAgIDMgbGluZXMKKyMgICBGcm9udCBQb3JjaCAgICAgMC41MDQgdXMgICAgMC4wMzMgbXMKKyMgICAgICAgICAgICAgICAyIGNoYXJzICAgICAxIGxpbmVzCisjICAgQmFjayBQb3JjaCAgICAgIDMuNzI4IHVzICAgIDAuNDI5IG1zCisjICAgICAgICAgICAgICAgMTMgY2hhcnMgICAgMTMgbGluZXMKKyMgICBBY3RpdmUgVGltZSAgICAgMjYuOTc5IHVzICAgMTYuMDk3IG1zCisjICAgICAgICAgICAgICAgMTA3IGNoYXJzICAgNDgwIGxpbmVzCisjICAgQmxhbmsgVGltZSAgICAgIDYuNTU2IHVzICAgIDAuNTcwIG1zCisjICAgICAgICAgICAgICAgMjYgY2hhcnMgICAgMTcgbGluZXMKKyMgICBQb2xhcml0eSAgICAgICAgcG9zaXRpdmUgICAgcG9zaXRpdmUKKyMKKyAgICBtb2RlICI4NTZ4NDgwLTYwIgorIyBEOiAzMS43MjggTUh6LCBIOiAyOS44MjAga0h6LCBWOiA2MC4wMCBIegorICAgIGdlb21ldHJ5IDg1NiA0ODAgODU2IDQ4MCAzMgorICAgIHRpbWluZ3MgMzE1MTggMTA0IDE2IDEzIDEgODggMworICAgIGhzeW5jIGhpZ2ggdnN5bmMgaGlnaCBlbmRtb2RlIG1vZGUgIjk2MHg2MDAtNjAiCisjIEQ6IDQ1LjI1MCBNSHosIEg6IDM3LjIxMiBrSHosIFY6IDYwLjAwIEh6CisgICAgZ2VvbWV0cnkgOTYwIDYwMCA5NjAgNjAwIDMyIHRpbWluZ3MgMjIwOTkgMTI4IDMyIDE1IDMgOTYgNiBlbmRtb2RlCisjCisjICAgMTAwMHg2MDAsIDYwIEh6LCBOb24tSW50ZXJsYWNlZCAoNDguMDY4IE1IeiBkb3RjbG9jaykKKyMKKyMgICAgICAgICAgICAgICBIb3Jpem9udGFsICBWZXJ0aWNhbAorIyAgIFJlc29sdXRpb24gICAgICAxMDAwICAgICA2MDAKKyMgICBTY2FuIEZyZXF1ZW5jeSAgMzcuMzIwIGtIeiAgNjAuMDAgSHoKKyMgICBTeW5jIFdpZHRoICAgICAgMi4xNjQgdXMgICAgMC4wODAgbXMKKyMgICAgICAgICAgICAgICAxMyBjaGFycyAgICAzIGxpbmVzCisjICAgRnJvbnQgUG9yY2ggICAgIDAuODMyIHVzICAgIDAuMDI3IG1zCisjICAgICAgICAgICAgICAgNSBjaGFycyAgICAgMSBsaW5lcworIyAgIEJhY2sgUG9yY2ggICAgICAyLjk5NiB1cyAgICAwLjQ4MyBtcworIyAgICAgICAgICAgICAgIDE4IGNoYXJzICAgIDE4IGxpbmVzCisjICAgQWN0aXZlIFRpbWUgICAgIDIwLjgwNCB1cyAgIDE2LjA3NyBtcworIyAgICAgICAgICAgICAgIDEyNSBjaGFycyAgIDYwMCBsaW5lcworIyAgIEJsYW5rIFRpbWUgICAgICA1Ljk5MSB1cyAgICAwLjU4OSBtcworIyAgICAgICAgICAgICAgIDM2IGNoYXJzICAgIDIyIGxpbmVzCisjICAgUG9sYXJpdHkgICAgICAgIG5lZ2F0aXZlICAgIHBvc2l0aXZlCisjCisgICAgbW9kZSAiMTAwMHg2MDAtNjAiCisjIEQ6IDQ4LjA2OCBNSHosIEg6IDM3LjMyMCBrSHosIFY6IDYwLjAwIEh6CisgICAgZ2VvbWV0cnkgMTAwMCA2MDAgMTAwMCA2MDAgMzIKKyAgICB0aW1pbmdzIDIwODM0IDE0NCA0MCAxOCAxIDEwNCAzIGVuZG1vZGUgbW9kZSAiMTAyNHg1NzYtNjAiCisjIEQ6IDQ2Ljk5NiBNSHosIEg6IDM1LjgyMCBrSHosIFY6IDYwLjAwIEh6CisgICAgZ2VvbWV0cnkgMTAyNCA1NzYgMTAyNCA1NzYgMzIKKyAgICB0aW1pbmdzIDIxMjc4IDE0NCA0MCAxNyAxIDEwNCAzIGVuZG1vZGUgbW9kZSAiMTAyNHg2MDAtNjAiCisjIEQ6IDQ4Ljk2NCBNSHosIEg6IDM3LjMyMCBrSHosIFY6IDYwLjAwIEh6CisgICAgZ2VvbWV0cnkgMTAyNCA2MDAgMTAyNCA2MDAgMzIKKyAgICB0aW1pbmdzIDIwNDYxIDE0NCA0MCAxOCAxIDEwNCAzIGVuZG1vZGUgbW9kZSAiMTA4OHg2MTItNjAiCisjIEQ6IDUyLjk1MiBNSHosIEg6IDM4LjA0MCBrSHosIFY6IDYwLjAwIEh6CisgICAgZ2VvbWV0cnkgMTA4OCA2MTIgMTA4OCA2MTIgMzIgdGltaW5ncyAxODg3NyAxNTIgNDggMTYgMyAxMDQgNSBlbmRtb2RlCisjCisjICAgMTAyNHg1MTIsIDYwIEh6LCBOb24tSW50ZXJsYWNlZCAoNDEuMjkxIE1IeiBkb3RjbG9jaykKKyMKKyMgICAgICAgICAgICAgICBIb3Jpem9udGFsICBWZXJ0aWNhbAorIyAgIFJlc29sdXRpb24gICAgICAxMDI0ICAgIDUxMgorIyAgIFNjYW4gRnJlcXVlbmN5ICAzMS44NjAga0h6ICA2MC4wMCBIegorIyAgIFN5bmMgV2lkdGggICAgICAyLjUxOSB1cyAgICAwLjA5NCBtcworIyAgICAgICAgICAgICAgIDEzIGNoYXJzICAgIDMgbGluZXMKKyMgICBGcm9udCBQb3JjaCAgICAgMC43NzUgdXMgICAgMC4wMzEgbXMKKyMgICAgICAgICAgICAgICA0IGNoYXJzICAgICAxIGxpbmVzCisjICAgQmFjayBQb3JjaCAgICAgIDMuMjk0IHVzICAgIDAuNDY1IG1zCisjICAgICAgICAgICAgICAgMTcgY2hhcnMgICAgMTUgbGluZXMKKyMgICBBY3RpdmUgVGltZSAgICAgMjQuODAwIHVzICAgMTYuMDcwIG1zCisjICAgICAgICAgICAgICAgMTI4IGNoYXJzICAgNTEyIGxpbmVzCisjICAgQmxhbmsgVGltZSAgICAgIDYuNTg3IHVzICAgIDAuNTk2IG1zCisjICAgICAgICAgICAgICAgMzQgY2hhcnMgICAgMTkgbGluZXMKKyMgICBQb2xhcml0eSAgICAgICAgcG9zaXRpdmUgICAgcG9zaXRpdmUKKyMKKyAgICBtb2RlICIxMDI0eDUxMi02MCIKKyMgRDogNDEuMjkxIE1IeiwgSDogMzEuODYwIGtIeiwgVjogNjAuMDAgSHoKKyAgICBnZW9tZXRyeSAxMDI0IDUxMiAxMDI0IDUxMiAzMgorICAgIHRpbWluZ3MgMjQyMTggMTI2IDMyIDE1IDEgMTA0IDMgaHN5bmMgaGlnaCB2c3luYyBoaWdoIGVuZG1vZGUKKyMKKyMgICAxMDI0eDYwMCwgNjAgSHosIE5vbi1JbnRlcmxhY2VkICg0OC44NzUgTUh6IGRvdGNsb2NrKQorIworIyAgICAgICAgICAgICAgICAgICAgIEhvcml6b250YWwgIFZlcnRpY2FsCisjICAgUmVzb2x1dGlvbiAgICAgICAgICAxMDI0ICAgICAgICA3NjgKKyMgICBTY2FuIEZyZXF1ZW5jeSAgICAgIDM3LjI1MiBrSHogIDYwLjAwIEh6CisjICAgU3luYyBXaWR0aCAgICAgICAgICAyLjEyOCB1cyAgICA4MC41MzJ1cworIyAgICAgICAgICAgICAgICAgICAgICAgMTMgY2hhcnMgICAgMyBsaW5lcworIyAgIEZyb250IFBvcmNoICAgICAgICAwLjgxOCB1cyAgICAgMjYuODQ0IHVzCisjICAgICAgICAgICAgICAgICAgICAgICA1IGNoYXJzICAgICAxIGxpbmVzCisjICAgQmFjayBQb3JjaCAgICAgICAgICAyLjk0NiB1cyAgICA0ODMuMTkyIHVzCisjICAgICAgICAgICAgICAgICAgICAgICAxOCBjaGFycyAgICAxOCBsaW5lcworIyAgIEFjdGl2ZSBUaW1lICAgICAgICAgMjAuOTUxIHVzICAgMTYuNjk3IG1zCisjICAgICAgICAgICAgICAgICAgICAgICAxMjggY2hhcnMgICA2MjIgbGluZXMKKyMgICBCbGFuayBUaW1lICAgICAgICAgIDUuODkzIHVzICAgIDAuNTkxIG1zCisjICAgICAgICAgICAgICAgICAgICAgICAzNiBjaGFycyAgICAyMiBsaW5lcworIyAgIFBvbGFyaXR5ICAgICAgICAgICAgbmVnYXRpdmUgICAgcG9zaXRpdmUKKyMKKyNtb2RlICIxMDI0eDYwMC02MCIKKyMgICAgICMgRDogNDguODc1IE1IeiwgSDogMzcuMjUyIGtIeiwgVjogNjAuMDAgSHoKKyMgICAgIGdlb21ldHJ5IDEwMjQgNjAwIDEwMjQgNjAwIDMyCisjICAgIHRpbWluZ3MgMjA0NjAgIDE0NCA0MCAxOCAxIDEwNCAgMworIyBlbmRtb2RlCisjCisjICAgMTAyNHg3NjgsIDYwIEh6LCBOb24tSW50ZXJsYWNlZCAoNjUuMDAgTUh6IGRvdGNsb2NrKQorIworIyAgICAgICAgICAgICAgIEhvcml6b250YWwgIFZlcnRpY2FsCisjICAgUmVzb2x1dGlvbiAgICAgIDEwMjQgICAgICAgIDc2OAorIyAgIFNjYW4gRnJlcXVlbmN5ICAgICAgNDguMzYzIGtIeiAgNjAuMDAgSHoKKyMgICBTeW5jIFdpZHRoICAgICAgMi4wOTIgdXMgICAgMC4xMjQgbXMKKyMgICAgICAgICAgICAgICAxNyBjaGFycyAgICA2IGxpbmVzCisjICAgRnJvbnQgUG9yY2ggICAgIDAuMzY5IHVzICAgIDAuMDYyIG1zCisjICAgICAgICAgICAgICAgMyBjaGFycyAgICAgMyBsaW5lcworIyAgIEJhY2sgUG9yY2ggICAgICAyLjQ2MiB1cyAgICAwLjYwMSBtcworIyAgICAgICAgICAgICAgIDIwIGNoYXJzICAgIDI5IGxpbmVzCisjICAgQWN0aXZlIFRpbWUgICAgIDE1Ljc1NCB1cyAgIDE1Ljg4MCBtcworIyAgICAgICAgICAgICAgIDEyOCBjaGFycyAgIDc2OCBsaW5lcworIyAgIEJsYW5rIFRpbWUgICAgICA0LjkyMyB1cyAgICAwLjc4NiBtcworIyAgICAgICAgICAgICAgIDQwIGNoYXJzICAgIDM4IGxpbmVzCisjICAgUG9sYXJpdHkgICAgICAgIG5lZ2F0aXZlICAgIG5lZ2F0aXZlCisjCisgICAgbW9kZSAiMTAyNHg3NjgtNjAiCisjIEQ6IDY1LjAwIE1IeiwgSDogNDguMzYzIGtIeiwgVjogNjAuMDAgSHoKKyAgICBnZW9tZXRyeSAxMDI0IDc2OCAxMDI0IDc2OCAzMiB0aW1pbmdzIDE1Mzg1IDE2MCAyNCAyOSAzIDEzNiA2IGVuZG1vZGUKKyMKKyMgICAxMDI0eDc2OCwgNzUgSHosIE5vbi1JbnRlcmxhY2VkICg3OC43NSBNSHogZG90Y2xvY2spCisjCisjICAgICAgICAgICAgICAgSG9yaXpvbnRhbCAgVmVydGljYWwKKyMgICBSZXNvbHV0aW9uICAgICAgMTAyNCAgICAgICAgNzY4CisjICAgU2NhbiBGcmVxdWVuY3kgICAgICA2MC4wMjMga0h6ICA3NS4wMyBIegorIyAgIFN5bmMgV2lkdGggICAgICAxLjIxOSB1cyAgICAwLjA1MCBtcworIyAgICAgICAgICAgICAgIDEyIGNoYXJzICAgIDMgbGluZXMKKyMgICBGcm9udCBQb3JjaCAgICAgMC4yMDMgdXMgICAgMC4wMTcgbXMKKyMgICAgICAgICAgICAgICAyIGNoYXJzICAgICAxIGxpbmVzCisjICAgQmFjayBQb3JjaCAgICAgIDIuMjM1IHVzICAgIDAuNDY2IG1zCisjICAgICAgICAgICAgICAgMjIgY2hhcnMgICAgMjggbGluZXMKKyMgICBBY3RpdmUgVGltZSAgICAgMTMuMDAzIHVzICAgMTIuNzk1IG1zCisjICAgICAgICAgICAgICAgMTI4IGNoYXJzICAgNzY4IGxpbmVzCisjICAgQmxhbmsgVGltZSAgICAgIDMuNjU3IHVzICAgIDAuNTMzIG1zCisjICAgICAgICAgICAgICAgMzYgY2hhcnMgICAgMzIgbGluZXMKKyMgICBQb2xhcml0eSAgICAgICAgcG9zaXRpdmUgICAgcG9zaXRpdmUKKyMKKyAgICBtb2RlICIxMDI0eDc2OC03NSIKKyMgRDogNzguNzUgTUh6LCBIOiA2MC4wMjMga0h6LCBWOiA3NS4wMyBIegorICAgIGdlb21ldHJ5IDEwMjQgNzY4IDEwMjQgNzY4IDMyCisgICAgdGltaW5ncyAxMjY5OSAxNzYgMTYgMjggMSA5NiAzIGhzeW5jIGhpZ2ggdnN5bmMgaGlnaCBlbmRtb2RlCisjCisjICAgMTAyNHg3NjgsIDg1IEh6LCBOb24tSW50ZXJsYWNlZCAoOTQuNTAgTUh6IGRvdGNsb2NrKQorIworIyAgICAgICAgICAgICAgIEhvcml6b250YWwgIFZlcnRpY2FsCisjICAgUmVzb2x1dGlvbiAgICAgIDEwMjQgICAgICAgIDc2OAorIyAgIFNjYW4gRnJlcXVlbmN5ICA2OC42Nzcga0h6ICA4NS4wMCBIegorIyAgIFN5bmMgV2lkdGggICAgICAxLjAxNiB1cyAgICAwLjA0NCBtcworIyAgICAgICAgICAgICAgIDEyIGNoYXJzICAgIDMgbGluZXMKKyMgICBGcm9udCBQb3JjaCAgICAgMC41MDggdXMgICAgMC4wMTUgbXMKKyMgICAgICAgICAgICAgICA2IGNoYXJzICAgICAxIGxpbmVzCisjICAgQmFjayBQb3JjaCAgICAgIDIuMjAxIHVzICAgIDAuNTI0IG1zCisjICAgICAgICAgICAgICAgMjYgY2hhcnMgICAgMzYgbGluZXMKKyMgICBBY3RpdmUgVGltZSAgICAgMTAuODM2IHVzICAgMTEuMTgzIG1zCisjICAgICAgICAgICAgICAgMTI4IGNoYXJzICAgNzY4IGxpbmVzCisjICAgQmxhbmsgVGltZSAgICAgIDMuNzI1IHVzICAgIDAuNTgyIG1zCisjICAgICAgICAgICAgICAgNDQgY2hhcnMgICAgNDAgbGluZXMKKyMgICBQb2xhcml0eSAgICAgICAgcG9zaXRpdmUgICAgcG9zaXRpdmUKKyMKKyAgICBtb2RlICIxMDI0eDc2OC04NSIKKyMgRDogOTQuNTAgTUh6LCBIOiA2OC42Nzcga0h6LCBWOiA4NS4wMCBIegorICAgIGdlb21ldHJ5IDEwMjQgNzY4IDEwMjQgNzY4IDMyCisgICAgdGltaW5ncyAxMDU4MiAyMDggNDggMzYgMSA5NiAzIGhzeW5jIGhpZ2ggdnN5bmMgaGlnaCBlbmRtb2RlCisjCisjICAgMTAyNHg3NjgsIDEwMCBIeiwgTm9uLUludGVybGFjZWQgKDExMC4wIE1IeiBkb3RjbG9jaykKKyMKKyMgICAgICAgICAgICAgICBIb3Jpem9udGFsICBWZXJ0aWNhbAorIyAgIFJlc29sdXRpb24gICAgICAxMDI0ICAgICAgICA3NjgKKyMgICBTY2FuIEZyZXF1ZW5jeSAgICAgIDc5LjAyMyBrSHogIDk5Ljc4IEh6CisjICAgU3luYyBXaWR0aCAgICAgIDAuODAwIHVzICAgIDAuMTAxIG1zCisjICAgICAgICAgICAgICAgMTEgY2hhcnMgICAgOCBsaW5lcworIyAgIEZyb250IFBvcmNoICAgICAwLjAwMCB1cyAgICAwLjAwMCBtcworIyAgICAgICAgICAgICAgIDAgY2hhcnMgICAgIDAgbGluZXMKKyMgICBCYWNrIFBvcmNoICAgICAgMi41NDUgdXMgICAgMC4yMDIgbXMKKyMgICAgICAgICAgICAgICAzNSBjaGFycyAgICAxNiBsaW5lcworIyAgIEFjdGl2ZSBUaW1lICAgICA5LjMwOSB1cyAgICA5LjcxOSBtcworIyAgICAgICAgICAgICAgIDEyOCBjaGFycyAgIDc2OCBsaW5lcworIyAgIEJsYW5rIFRpbWUgICAgICAzLjM0NSB1cyAgICAwLjMwNCBtcworIyAgICAgICAgICAgICAgIDQ2IGNoYXJzICAgIDI0IGxpbmVzCisjICAgUG9sYXJpdHkgICAgICAgIG5lZ2F0aXZlICAgIG5lZ2F0aXZlCisjCisgICAgbW9kZSAiMTAyNHg3NjgtMTAwIgorIyBEOiAxMTMuMyBNSHosIEg6IDc5LjAyMyBrSHosIFY6IDk5Ljc4IEh6CisgICAgZ2VvbWV0cnkgMTAyNCA3NjggMTAyNCA3NjggMzIKKyAgICB0aW1pbmdzIDg4MjUgMjgwIDAgMTYgMCA4OCA4IGVuZG1vZGUgbW9kZSAiMTE1Mng3MjAtNjAiCisjIEQ6IDY2Ljc1MCBNSHosIEg6IDQ0Ljg1OSBrSHosIFY6IDYwLjAwIEh6CisgICAgZ2VvbWV0cnkgMTE1MiA3MjAgMTE1MiA3MjAgMzIgdGltaW5ncyAxNDk4MSAxNjggNTYgMTkgMyAxMTIgNiBlbmRtb2RlCisjCisjICAgMTE1Mng4NjQsIDc1IEh6LCBOb24tSW50ZXJsYWNlZCAoMTEwLjAgTUh6IGRvdGNsb2NrKQorIworIyAgICAgICAgICAgICAgIEhvcml6b250YWwgIFZlcnRpY2FsCisjICAgUmVzb2x1dGlvbiAgICAgIDExNTIgICAgICAgIDg2NAorIyAgIFNjYW4gRnJlcXVlbmN5ICAgICAgNzUuMTM3IGtIeiAgNzQuOTkgSHoKKyMgICBTeW5jIFdpZHRoICAgICAgMS4zMDkgdXMgICAgMC4xMDYgbXMKKyMgICAgICAgICAgICAgICAxOCBjaGFycyAgICA4IGxpbmVzCisjICAgRnJvbnQgUG9yY2ggICAgIDAuMjQ1IHVzICAgIDAuNTk5IG1zCisjICAgICAgICAgICAgICAgMyBjaGFycyAgICAgNDUgbGluZXMKKyMgICBCYWNrIFBvcmNoICAgICAgMS4yODIgdXMgICAgMS4xMzIgbXMKKyMgICAgICAgICAgICAgICAxOCBjaGFycyAgICA4NSBsaW5lcworIyAgIEFjdGl2ZSBUaW1lICAgICAxMC40NzMgdXMgICAxMS40OTkgbXMKKyMgICAgICAgICAgICAgICAxNDQgY2hhcnMgICA4NjQgbGluZXMKKyMgICBCbGFuayBUaW1lICAgICAgMi44MzYgdXMgICAgMS44MzcgbXMKKyMgICAgICAgICAgICAgICAzOSBjaGFycyAgICAxMzggbGluZXMKKyMgICBQb2xhcml0eSAgICAgICAgcG9zaXRpdmUgICAgcG9zaXRpdmUKKyMKKyAgICBtb2RlICIxMTUyeDg2NC03NSIKKyMgRDogMTEwLjAgTUh6LCBIOiA3NS4xMzcga0h6LCBWOiA3NC45OSBIegorICAgIGdlb21ldHJ5IDExNTIgODY0IDExNTIgODY0IDMyCisgICAgdGltaW5ncyA5MjU5IDE0NCAyNCA4NSA0NSAxNDQgOAorICAgIGhzeW5jIGhpZ2ggdnN5bmMgaGlnaCBlbmRtb2RlIG1vZGUgIjEyMDB4NzIwLTYwIgorIyBEOiA3MC4xODQgTUh6LCBIOiA0NC43NjAga0h6LCBWOiA2MC4wMCBIegorICAgIGdlb21ldHJ5IDEyMDAgNzIwIDEyMDAgNzIwIDMyCisgICAgdGltaW5ncyAxNDI1MyAxODQgMjggMjIgMSAxMjggMyBlbmRtb2RlIG1vZGUgIjEyODB4NjAwLTYwIgorIyBEOiA2MS41MDMgTUh6LCBIOiAzNy4zMjAga0h6LCBWOiA2MC4wMCBIegorICAgIGdlb21ldHJ5IDEyODAgNjAwIDEyODAgNjAwIDMyCisgICAgdGltaW5ncyAxNjI2MCAxODQgMjggMTggMSAxMjggMyBlbmRtb2RlIG1vZGUgIjEyODB4NzIwLTUwIgorIyBEOiA2MC40NjYgTUh6LCBIOiAzNy4wNTAga0h6LCBWOiA1MC4wMCBIegorICAgIGdlb21ldHJ5IDEyODAgNzIwIDEyODAgNzIwIDMyCisgICAgdGltaW5ncyAxNjUzOCAxNzYgNDggMTcgMSAxMjggMyBlbmRtb2RlIG1vZGUgIjEyODB4NzY4LTUwIgorIyBEOiA2NS4xNzggTUh6LCBIOiAzOS41NTAga0h6LCBWOiA1MC4wMCBIegorICAgIGdlb21ldHJ5IDEyODAgNzY4IDEyODAgNzY4IDMyIHRpbWluZ3MgMTUzNDIgMTg0IDI4IDE5IDEgMTI4IDMgZW5kbW9kZQorIworIyAgIDEyODB4NzY4LCA2MCBIeiwgTm9uLUludGVybGFjZWQgKDgwLjEzNiBNSHogZG90Y2xvY2spCisjCisjICAgICAgICAgICAgICAgSG9yaXpvbnRhbCAgVmVydGljYWwKKyMgICBSZXNvbHV0aW9uICAgICAgMTI4MCAgICA3NjgKKyMgICBTY2FuIEZyZXF1ZW5jeSAgNDcuNzAwIGtIeiAgNjAuMDAgSHoKKyMgICBTeW5jIFdpZHRoICAgICAgMS42OTcgdXMgICAgMC4wNjMgbXMKKyMgICAgICAgICAgICAgICAxNyBjaGFycyAgICAzIGxpbmVzCisjICAgRnJvbnQgUG9yY2ggICAgIDAuNzk5IHVzICAgIDAuMDIxIG1zCisjICAgICAgICAgICAgICAgOCBjaGFycyAgICAgMSBsaW5lcworIyAgIEJhY2sgUG9yY2ggICAgICAyLjQ5NiB1cyAgICAwLjQ4MyBtcworIyAgICAgICAgICAgICAgIDI1IGNoYXJzICAgIDIzIGxpbmVzCisjICAgQWN0aXZlIFRpbWUgICAgIDE1Ljk3MyB1cyAgIDE2LjEwMSBtcworIyAgICAgICAgICAgICAgIDE2MCBjaGFycyAgIDc2OCBsaW5lcworIyAgIEJsYW5rIFRpbWUgICAgICA0Ljk5MiB1cyAgICAwLjU2NiBtcworIyAgICAgICAgICAgICAgIDUwIGNoYXJzICAgIDI3IGxpbmVzCisjICAgUG9sYXJpdHkgICAgICAgIHBvc2l0aXZlICAgIHBvc2l0aXZlCisjCisgICAgbW9kZSAiMTI4MHg3NjgtNjAiCisjIEQ6IDgwLjEzIE1IeiwgSDogNDcuNzAwIGtIeiwgVjogNjAuMDAgSHoKKyAgICBnZW9tZXRyeSAxMjgwIDc2OCAxMjgwIDc2OCAzMgorICAgIHRpbWluZ3MgMTI0ODAgMjAwIDQ4IDIzIDEgMTI2IDMgaHN5bmMgaGlnaCB2c3luYyBoaWdoIGVuZG1vZGUKKyMKKyMgICAxMjgweDgwMCwgNjAgSHosIE5vbi1JbnRlcmxhY2VkICg4My4zNzUgTUh6IGRvdGNsb2NrKQorIworIyAgICAgICAgICAgICAgIEhvcml6b250YWwgIFZlcnRpY2FsCisjICAgUmVzb2x1dGlvbiAgICAgIDEyODAgICAgODAwCisjICAgU2NhbiBGcmVxdWVuY3kgIDQ5LjYyOCBrSHogIDYwLjAwIEh6CisjICAgU3luYyBXaWR0aCAgICAgIDEuNjMxIHVzICAgIDYwLjQ1MCB1cworIyAgICAgICAgICAgICAgICAgICAxNyBjaGFycyAgICAzIGxpbmVzCisjICAgRnJvbnQgUG9yY2ggICAgIDAuNzY4IHVzICAgIDIwLjE1IHVzCisjICAgICAgICAgICAgICAgICAgIDggY2hhcnMgICAgIDEgbGluZXMKKyMgICBCYWNrIFBvcmNoICAgICAgMi4zOTkgdXMgICAgMC40ODMgbXMKKyMgICAgICAgICAgICAgICAgICAgMjUgY2hhcnMgICAgMjQgbGluZXMKKyMgICBBY3RpdmUgVGltZSAgICAgMTUuMzUyIHVzICAgMTYuMTIwIG1zCisjICAgICAgICAgICAgICAgICAgIDE2MCBjaGFycyAgIDgwMCBsaW5lcworIyAgIEJsYW5rIFRpbWUgICAgICA0Ljc5OCB1cyAgICAwLjU2NCBtcworIyAgICAgICAgICAgICAgICAgICA1MCBjaGFycyAgICAyOCBsaW5lcworIyAgIFBvbGFyaXR5ICAgICAgICBuZWd0aXZlICAgIHBvc2l0aXZlCisjCisgICAgbW9kZSAiMTI4MHg4MDAtNjAiCisjIEQ6IDgzLjUwMCBNSHosIEg6IDQ5LjcwMiBrSHosIFY6IDYwLjAwIEh6CisgICAgZ2VvbWV0cnkgMTI4MCA4MDAgMTI4MCA4MDAgMzIgdGltaW5ncyAxMTk5NCAyMDAgNzIgMjIgMyAxMjggNiBlbmRtb2RlCisjCisjICAgMTI4MHg5NjAsIDYwIEh6LCBOb24tSW50ZXJsYWNlZCAoMTA4LjAwIE1IeiBkb3RjbG9jaykKKyMKKyMgICAgICAgICAgICAgICBIb3Jpem9udGFsICBWZXJ0aWNhbAorIyAgIFJlc29sdXRpb24gICAgICAxMjgwICAgIDk2MAorIyAgIFNjYW4gRnJlcXVlbmN5ICA2MC4wMDAga0h6ICA2MC4wMCBIegorIyAgIFN5bmMgV2lkdGggICAgICAxLjAzNyB1cyAgICAwLjA1MCBtcworIyAgICAgICAgICAgICAgIDE0IGNoYXJzICAgIDMgbGluZXMKKyMgICBGcm9udCBQb3JjaCAgICAgMC44ODkgdXMgICAgMC4wMTcgbXMKKyMgICAgICAgICAgICAgICAxMiBjaGFycyAgICAxIGxpbmVzCisjICAgQmFjayBQb3JjaCAgICAgIDIuODg5IHVzICAgIDAuNjAwIG1zCisjICAgICAgICAgICAgICAgMzkgY2hhcnMgICAgMzYgbGluZXMKKyMgICBBY3RpdmUgVGltZSAgICAgMTEuODUyIHVzICAgMTYuMDAwIG1zCisjICAgICAgICAgICAgICAgMTYwIGNoYXJzICAgOTYwIGxpbmVzCisjICAgQmxhbmsgVGltZSAgICAgIDQuODE1IHVzICAgIDAuNjY3IG1zCisjICAgICAgICAgICAgICAgNjUgY2hhcnMgICAgNDAgbGluZXMKKyMgICBQb2xhcml0eSAgICAgICAgcG9zaXRpdmUgICAgcG9zaXRpdmUKKyMKKyAgICBtb2RlICIxMjgweDk2MC02MCIKKyMgRDogMTA4LjAwIE1IeiwgSDogNjAuMDAwIGtIeiwgVjogNjAuMDAgSHoKKyAgICBnZW9tZXRyeSAxMjgwIDk2MCAxMjgwIDk2MCAzMgorICAgIHRpbWluZ3MgOTI1OSAzMTIgOTYgMzYgMSAxMTIgMyBoc3luYyBoaWdoIHZzeW5jIGhpZ2ggZW5kbW9kZQorIworIyAgIDEyODB4MTAyNCwgNjAgSHosIE5vbi1JbnRlcmxhY2VkICgxMDguMDAgTUh6IGRvdGNsb2NrKQorIworIyAgICAgICAgICAgICAgIEhvcml6b250YWwgIFZlcnRpY2FsCisjICAgUmVzb2x1dGlvbiAgICAgIDEyODAgICAgICAgIDEwMjQKKyMgICBTY2FuIEZyZXF1ZW5jeSAgICAgIDYzLjk4MSBrSHogIDYwLjAyIEh6CisjICAgU3luYyBXaWR0aCAgICAgIDEuMDM3IHVzICAgIDAuMDQ3IG1zCisjICAgICAgICAgICAgICAgMTQgY2hhcnMgICAgMyBsaW5lcworIyAgIEZyb250IFBvcmNoICAgICAwLjQ0NCB1cyAgICAwLjAxNSBtcworIyAgICAgICAgICAgICAgIDYgY2hhcnMgICAgIDEgbGluZXMKKyMgICBCYWNrIFBvcmNoICAgICAgMi4yOTcgdXMgICAgMC41OTQgbXMKKyMgICAgICAgICAgICAgICAzMSBjaGFycyAgICAzOCBsaW5lcworIyAgIEFjdGl2ZSBUaW1lICAgICAxMS44NTIgdXMgICAxNi4wMDUgbXMKKyMgICAgICAgICAgICAgICAxNjAgY2hhcnMgICAxMDI0IGxpbmVzCisjICAgQmxhbmsgVGltZSAgICAgIDMuNzc4IHVzICAgIDAuNjU2IG1zCisjICAgICAgICAgICAgICAgNTEgY2hhcnMgICAgNDIgbGluZXMKKyMgICBQb2xhcml0eSAgICAgICAgcG9zaXRpdmUgICAgcG9zaXRpdmUKKyMKKyAgICBtb2RlICIxMjgweDEwMjQtNjAiCisjIEQ6IDEwOC4wMCBNSHosIEg6IDYzLjk4MSBrSHosIFY6IDYwLjAyIEh6CisgICAgZ2VvbWV0cnkgMTI4MCAxMDI0IDEyODAgMTAyNCAzMgorICAgIHRpbWluZ3MgOTI2MCAyNDggNDggMzggMSAxMTIgMyBoc3luYyBoaWdoIHZzeW5jIGhpZ2ggZW5kbW9kZQorIworIyAgIDEyODB4MTAyNCwgNzUgSHosIE5vbi1JbnRlcmxhY2VkICgxMzUuMDAgTUh6IGRvdGNsb2NrKQorIworIyAgICAgICAgICAgICAgIEhvcml6b250YWwgIFZlcnRpY2FsCisjICAgUmVzb2x1dGlvbiAgICAgIDEyODAgICAgICAgIDEwMjQKKyMgICBTY2FuIEZyZXF1ZW5jeSAgICAgIDc5Ljk3NiBrSHogIDc1LjAyIEh6CisjICAgU3luYyBXaWR0aCAgICAgIDEuMDY3IHVzICAgIDAuMDM4IG1zCisjICAgICAgICAgICAgICAgMTggY2hhcnMgICAgMyBsaW5lcworIyAgIEZyb250IFBvcmNoICAgICAwLjExOSB1cyAgICAwLjAxMiBtcworIyAgICAgICAgICAgICAgIDIgY2hhcnMgICAgIDEgbGluZXMKKyMgICBCYWNrIFBvcmNoICAgICAgMS44MzcgdXMgICAgMC40NzUgbXMKKyMgICAgICAgICAgICAgICAzMSBjaGFycyAgICAzOCBsaW5lcworIyAgIEFjdGl2ZSBUaW1lICAgICA5LjQ4MSB1cyAgICAxMi44MDQgbXMKKyMgICAgICAgICAgICAgICAxNjAgY2hhcnMgICAxMDI0IGxpbmVzCisjICAgQmxhbmsgVGltZSAgICAgIDMuMDIyIHVzICAgIDAuNTI1IG1zCisjICAgICAgICAgICAgICAgNTEgY2hhcnMgICAgNDIgbGluZXMKKyMgICBQb2xhcml0eSAgICAgICAgcG9zaXRpdmUgICAgcG9zaXRpdmUKKyMKKyAgICBtb2RlICIxMjgweDEwMjQtNzUiCisjIEQ6IDEzNS4wMCBNSHosIEg6IDc5Ljk3NiBrSHosIFY6IDc1LjAyIEh6CisgICAgZ2VvbWV0cnkgMTI4MCAxMDI0IDEyODAgMTAyNCAzMgorICAgIHRpbWluZ3MgNzQwOCAyNDggMTYgMzggMSAxNDQgMyBoc3luYyBoaWdoIHZzeW5jIGhpZ2ggZW5kbW9kZQorIworIyAgIDEyODB4MTAyNCwgODUgSHosIE5vbi1JbnRlcmxhY2VkICgxNTcuNTAgTUh6IGRvdGNsb2NrKQorIworIyAgICAgICAgICAgICAgIEhvcml6b250YWwgIFZlcnRpY2FsCisjICAgUmVzb2x1dGlvbiAgICAgIDEyODAgICAgICAgIDEwMjQKKyMgICBTY2FuIEZyZXF1ZW5jeSAgOTEuMTQ2IGtIeiAgODUuMDIgSHoKKyMgICBTeW5jIFdpZHRoICAgICAgMS4wMTYgdXMgICAgMC4wMzMgbXMKKyMgICAgICAgICAgICAgICAyMCBjaGFycyAgICAzIGxpbmVzCisjICAgRnJvbnQgUG9yY2ggICAgIDAuNDA2IHVzICAgIDAuMDExIG1zCisjICAgICAgICAgICAgICAgOCBjaGFycyAgICAgMSBsaW5lcworIyAgIEJhY2sgUG9yY2ggICAgICAxLjQyMiB1cyAgICAwLjQ4MyBtcworIyAgICAgICAgICAgICAgIDI4IGNoYXJzICAgIDQ0IGxpbmVzCisjICAgQWN0aXZlIFRpbWUgICAgIDguMTI3IHVzICAgIDExLjIzNSBtcworIyAgICAgICAgICAgICAgIDE2MCBjaGFycyAgIDEwMjQgbGluZXMKKyMgICBCbGFuayBUaW1lICAgICAgMi44NDQgdXMgICAgMC41MjcgbXMKKyMgICAgICAgICAgICAgICA1NiBjaGFycyAgICA0OCBsaW5lcworIyAgIFBvbGFyaXR5ICAgICAgICBwb3NpdGl2ZSAgICBwb3NpdGl2ZQorIworICAgIG1vZGUgIjEyODB4MTAyNC04NSIKKyMgRDogMTU3LjUwIE1IeiwgSDogOTEuMTQ2IGtIeiwgVjogODUuMDIgSHoKKyAgICBnZW9tZXRyeSAxMjgwIDEwMjQgMTI4MCAxMDI0IDMyCisgICAgdGltaW5ncyA2MzQ5IDIyNCA2NCA0NCAxIDE2MCAzCisgICAgaHN5bmMgaGlnaCB2c3luYyBoaWdoIGVuZG1vZGUgbW9kZSAiMTQ0MHg5MDAtNjAiCisjIEQ6IDEwNi41MDAgTUh6LCBIOiA1NS45MzUga0h6LCBWOiA2MC4wMCBIegorICAgIGdlb21ldHJ5IDE0NDAgOTAwIDE0NDAgOTAwIDMyCisgICAgdGltaW5ncyA5MzkwIDIzMiA4MCAyNSAzIDE1MiA2CisgICAgaHN5bmMgaGlnaCB2c3luYyBoaWdoIGVuZG1vZGUgbW9kZSAiMTQ0MHg5MDAtNzUiCisjIEQ6IDEzNi43NTAgTUh6LCBIOiA3MC42MzUga0h6LCBWOiA3NS4wMCBIegorICAgIGdlb21ldHJ5IDE0NDAgOTAwIDE0NDAgOTAwIDMyCisgICAgdGltaW5ncyA3MzE1IDI0OCA5NiAzMyAzIDE1MiA2IGhzeW5jIGhpZ2ggdnN5bmMgaGlnaCBlbmRtb2RlCisjCisjICAgMTQ0MHgxMDUwLCA2MCBIeiwgTm9uLUludGVybGFjZWQgKDEyNS4xMCBNSHogZG90Y2xvY2spCisjCisjICAgICAgICAgICAgICAgSG9yaXpvbnRhbCAgVmVydGljYWwKKyMgICBSZXNvbHV0aW9uICAgICAgMTQ0MCAgICAgICAgMTA1MAorIyAgIFNjYW4gRnJlcXVlbmN5ICAgICAgNjUuMjIwIGtIeiAgNjAuMDAgSHoKKyMgICBTeW5jIFdpZHRoICAgICAgMS4yMDQgdXMgICAgMC4wNDYgbXMKKyMgICAgICAgICAgICAgICAxOSBjaGFycyAgICAzIGxpbmVzCisjICAgRnJvbnQgUG9yY2ggICAgIDAuNzYwIHVzICAgIDAuMDE1IG1zCisjICAgICAgICAgICAgICAgMTIgY2hhcnMgICAgMSBsaW5lcworIyAgIEJhY2sgUG9yY2ggICAgICAxLjk2NCB1cyAgICAwLjQ5NSBtcworIyAgICAgICAgICAgICAgIDMxIGNoYXJzICAgIDMzIGxpbmVzCisjICAgQWN0aXZlIFRpbWUgICAgIDExLjQwNSB1cyAgIDE2LjA5OSBtcworIyAgICAgICAgICAgICAgIDE4MCBjaGFycyAgIDEwNTAgbGluZXMKKyMgICBCbGFuayBUaW1lICAgICAgMy45MjggdXMgICAgMC41NjcgbXMKKyMgICAgICAgICAgICAgICA2MiBjaGFycyAgICAzNyBsaW5lcworIyAgIFBvbGFyaXR5ICAgICAgICBwb3NpdGl2ZSAgICBwb3NpdGl2ZQorIworICAgIG1vZGUgIjE0NDB4MTA1MC02MCIKKyMgRDogMTI1LjEwIE1IeiwgSDogNjUuMjIwIGtIeiwgVjogNjAuMDAgSHoKKyAgICBnZW9tZXRyeSAxNDQwIDEwNTAgMTQ0MCAxMDUwIDMyCisgICAgdGltaW5ncyA3OTkzIDI0OCA5NiAzMyAxIDE1MiAzCisgICAgaHN5bmMgaGlnaCB2c3luYyBoaWdoIGVuZG1vZGUgbW9kZSAiMTYwMHg5MDAtNjAiCisjIEQ6IDExOC4yNTAgTUh6LCBIOiA1NS45OTAga0h6LCBWOiA2MC4wMCBIegorICAgIGdlb21ldHJ5IDE2MDAgOTAwIDE2MDAgOTAwIDMyCisgICAgdGltaW5ncyA4NDE1IDI1NiA4OCAyNiAzIDE2OCA1IGVuZG1vZGUgbW9kZSAiMTYwMHgxMDI0LTYwIgorIyBEOiAxMzYuMzU4IE1IeiwgSDogNjMuNjAwIGtIeiwgVjogNjAuMDAgSHoKKyAgICBnZW9tZXRyeSAxNjAwIDEwMjQgMTYwMCAxMDI0IDMyIHRpbWluZ3MgNzMxNSAyNzIgMTA0IDMyIDEgMTY4IDMgZW5kbW9kZQorIworIyAgIDE2MDB4MTIwMCwgNjAgSHosIE5vbi1JbnRlcmxhY2VkICgxNTYuMDAgTUh6IGRvdGNsb2NrKQorIworIyAgICAgICAgICAgICAgIEhvcml6b250YWwgIFZlcnRpY2FsCisjICAgUmVzb2x1dGlvbiAgICAgIDE2MDAgICAgICAgIDEyMDAKKyMgICBTY2FuIEZyZXF1ZW5jeSAgICAgIDc2LjIwMCBrSHogIDYwLjAwIEh6CisjICAgU3luYyBXaWR0aCAgICAgIDEuMDI2IHVzICAgIDAuMTA1IG1zCisjICAgICAgICAgICAgICAgMjAgY2hhcnMgICAgOCBsaW5lcworIyAgIEZyb250IFBvcmNoICAgICAwLjIwNSB1cyAgICAwLjEzMSBtcworIyAgICAgICAgICAgICAgIDQgY2hhcnMgICAgIDEwIGxpbmVzCisjICAgQmFjayBQb3JjaCAgICAgIDEuNjM2IHVzICAgIDAuNjgyIG1zCisjICAgICAgICAgICAgICAgMzIgY2hhcnMgICAgNTIgbGluZXMKKyMgICBBY3RpdmUgVGltZSAgICAgMTAuMjU2IHVzICAgMTUuNzQ4IG1zCisjICAgICAgICAgICAgICAgMjAwIGNoYXJzICAgMTIwMCBsaW5lcworIyAgIEJsYW5rIFRpbWUgICAgICAyLjg3MiB1cyAgICAwLjg2NiBtcworIyAgICAgICAgICAgICAgIDU2IGNoYXJzICAgIDY2IGxpbmVzCisjICAgUG9sYXJpdHkgICAgICAgIG5lZ2F0aXZlICAgIG5lZ2F0aXZlCisjCisgICAgbW9kZSAiMTYwMHgxMjAwLTYwIgorIyBEOiAxNTYuMDAgTUh6LCBIOiA3Ni4yMDAga0h6LCBWOiA2MC4wMCBIegorICAgIGdlb21ldHJ5IDE2MDAgMTIwMCAxNjAwIDEyMDAgMzIgdGltaW5ncyA2MTcyIDI1NiAzMiA1MiAxMCAxNjAgOCBlbmRtb2RlCisjCisjICAgMTYwMHgxMjAwLCA3NSBIeiwgTm9uLUludGVybGFjZWQgKDIwMi41MCBNSHogZG90Y2xvY2spCisjCisjICAgICAgICAgICAgICAgSG9yaXpvbnRhbCAgVmVydGljYWwKKyMgICBSZXNvbHV0aW9uICAgICAgMTYwMCAgICAgICAgMTIwMAorIyAgIFNjYW4gRnJlcXVlbmN5ICA5My43NTAga0h6ICA3NS4wMCBIegorIyAgIFN5bmMgV2lkdGggICAgICAwLjk0OCB1cyAgICAwLjAzMiBtcworIyAgICAgICAgICAgICAgIDI0IGNoYXJzICAgIDMgbGluZXMKKyMgICBGcm9udCBQb3JjaCAgICAgMC4zMTYgdXMgICAgMC4wMTEgbXMKKyMgICAgICAgICAgICAgICA4IGNoYXJzICAgICAxIGxpbmVzCisjICAgQmFjayBQb3JjaCAgICAgIDEuNTAxIHVzICAgIDAuNDkxIG1zCisjICAgICAgICAgICAgICAgMzggY2hhcnMgICAgNDYgbGluZXMKKyMgICBBY3RpdmUgVGltZSAgICAgNy45MDEgdXMgICAgMTIuODAwIG1zCisjICAgICAgICAgICAgICAgMjAwIGNoYXJzICAgMTIwMCBsaW5lcworIyAgIEJsYW5rIFRpbWUgICAgICAyLjc2NSB1cyAgICAwLjUzMyBtcworIyAgICAgICAgICAgICAgIDcwIGNoYXJzICAgIDUwIGxpbmVzCisjICAgUG9sYXJpdHkgICAgcG9zaXRpdmUgICAgcG9zaXRpdmUKKyMKKyAgICBtb2RlICIxNjAweDEyMDAtNzUiCisjIEQ6IDIwMi41MCBNSHosIEg6IDkzLjc1MCBrSHosIFY6IDc1LjAwIEh6CisgICAgZ2VvbWV0cnkgMTYwMCAxMjAwIDE2MDAgMTIwMCAzMgorICAgIHRpbWluZ3MgNDkzOCAzMDQgNjQgNDYgMSAxOTIgMworICAgIGhzeW5jIGhpZ2ggdnN5bmMgaGlnaCBlbmRtb2RlIG1vZGUgIjE2ODB4MTA1MC02MCIKKyMgRDogMTQ2LjI1MCBNSHosIEg6IDY1LjI5MCBrSHosIFY6IDU5Ljk1NCBIegorICAgIGdlb21ldHJ5IDE2ODAgMTA1MCAxNjgwIDEwNTAgMzIKKyAgICB0aW1pbmdzIDY4MTQgMjgwIDEwNCAzMCAzIDE3NiA2CisgICAgaHN5bmMgaGlnaCB2c3luYyBoaWdoIGVuZG1vZGUgbW9kZSAiMTY4MHgxMDUwLTc1IgorIyBEOiAxODcuMDAwIE1IeiwgSDogODIuMzA2IGtIeiwgVjogNzQuODkyIEh6CisgICAgZ2VvbWV0cnkgMTY4MCAxMDUwIDE2ODAgMTA1MCAzMgorICAgIHRpbWluZ3MgNTM0OCAyOTYgMTIwIDQwIDMgMTc2IDYKKyAgICBoc3luYyBoaWdoIHZzeW5jIGhpZ2ggZW5kbW9kZSBtb2RlICIxNzkyeDEzNDQtNjAiCisjIEQ6IDIwMi45NzUgTUh6LCBIOiA4My40NjAga0h6LCBWOiA2MC4wMCBIegorICAgIGdlb21ldHJ5IDE3OTIgMTM0NCAxNzkyIDEzNDQgMzIKKyAgICB0aW1pbmdzIDQ5MDIgMzIwIDEyOCA0MyAxIDE5MiAzCisgICAgaHN5bmMgaGlnaCB2c3luYyBoaWdoIGVuZG1vZGUgbW9kZSAiMTg1NngxMzkyLTYwIgorIyBEOiAyMTguNTcxIE1IeiwgSDogODYuNDYwIGtIeiwgVjogNjAuMDAgSHoKKyAgICBnZW9tZXRyeSAxODU2IDEzOTIgMTg1NiAxMzkyIDMyCisgICAgdGltaW5ncyA0NTc3IDMzNiAxMzYgNDUgMSAyMDAgMworICAgIGhzeW5jIGhpZ2ggdnN5bmMgaGlnaCBlbmRtb2RlIG1vZGUgIjE5MjB4MTIwMC02MCIKKyMgRDogMTkzLjI1MCBNSHosIEg6IDc0LjU1NiBrSHosIFY6IDYwLjAwIEh6CisgICAgZ2VvbWV0cnkgMTkyMCAxMjAwIDE5MjAgMTIwMCAzMgorICAgIHRpbWluZ3MgNTE3MyAzMzYgMTM2IDM2IDMgMjAwIDYKKyAgICBoc3luYyBoaWdoIHZzeW5jIGhpZ2ggZW5kbW9kZSBtb2RlICIxOTIweDE0NDAtNjAiCisjIEQ6IDIzNC4wMDAgTUh6LCBIOjkwLjAwMCBrSHosIFY6IDYwLjAwIEh6CisgICAgZ2VvbWV0cnkgMTkyMCAxNDQwIDE5MjAgMTQ0MCAzMgorICAgIHRpbWluZ3MgNDI3NCAzNDQgMTI4IDU2IDEgMjA4IDMKKyAgICBoc3luYyBoaWdoIHZzeW5jIGhpZ2ggZW5kbW9kZSBtb2RlICIxOTIweDE0NDAtNzUiCisjIEQ6IDI5Ny4wMDAgTUh6LCBIOjExMi41MDAga0h6LCBWOiA3NS4wMCBIegorICAgIGdlb21ldHJ5IDE5MjAgMTQ0MCAxOTIwIDE0NDAgMzIKKyAgICB0aW1pbmdzIDMzNjcgMzUyIDE0NCA1NiAxIDIyNCAzCisgICAgaHN5bmMgaGlnaCB2c3luYyBoaWdoIGVuZG1vZGUgbW9kZSAiMjA0OHgxNTM2LTYwIgorIyBEOiAyNjcuMjUwIE1IeiwgSDogOTUuNDQ2IGtIeiwgVjogNjAuMDAgSHoKKyAgICBnZW9tZXRyeSAyMDQ4IDE1MzYgMjA0OCAxNTM2IDMyCisgICAgdGltaW5ncyAzNzQyIDM3NiAxNTIgNDkgMyAyMjQgNCBoc3luYyBoaWdoIHZzeW5jIGhpZ2ggZW5kbW9kZQorIworIyAgIDEyODB4NzIwLCA2MCBIeiwgTm9uLUludGVybGFjZWQgKDc0LjQ4MSBNSHogZG90Y2xvY2spCisjCisjICAgICAgICAgICAgICAgSG9yaXpvbnRhbCAgVmVydGljYWwKKyMgICBSZXNvbHV0aW9uICAgICAgMTI4MCAgICAgICAgNzIwCisjICAgU2NhbiBGcmVxdWVuY3kgICAgICA0NC43NjAga0h6ICA2MC4wMCBIegorIyAgIFN5bmMgV2lkdGggICAgICAxLjgyNiB1cyAgICA2Ny4wMjQgbXMKKyMgICAgICAgICAgICAgICAxNyBjaGFycyAgICAzIGxpbmVzCisjICAgRnJvbnQgUG9yY2ggICAgIDAuNzUyIHVzICAgIDIyLjM0MSBtcworIyAgICAgICAgICAgICAgIDcgY2hhcnMgICAgIDEgbGluZXMKKyMgICBCYWNrIFBvcmNoICAgICAgMi41NzggdXMgICAgNDkxLjUxMCBtcworIyAgICAgICAgICAgICAgIDI0IGNoYXJzICAgIDIyIGxpbmVzCisjICAgQWN0aXZlIFRpbWUgICAgIDE3LjE4NiB1cyAgIDE2LjA4NiBtcworIyAgICAgICAgICAgICAgIDE2MCBjaGFycyAgIDcyMCBsaW5lcworIyAgIEJsYW5rIFRpbWUgICAgICA1LjE1NiB1cyAgICAwLjU4MSBtcworIyAgICAgICAgICAgICAgIDQ4IGNoYXJzICAgIDI2IGxpbmVzCisjICAgUG9sYXJpdHkgICAgICAgIG5lZ2F0aXZlICAgIG5lZ2F0aXZlCisjCisgICAgbW9kZSAiMTI4MHg3MjAtNjAiCisjIEQ6IDc0LjQ4MSBNSHosIEg6IDQ0Ljc2MCBrSHosIFY6IDYwLjAwIEh6CisgICAgZ2VvbWV0cnkgMTI4MCA3MjAgMTI4MCA3MjAgMzIgdGltaW5ncyAxMzQyNiAxOTIgNjQgMjIgMSAxMzYgMyBlbmRtb2RlCisjCisjICAgMTkyMHgxMDgwLCA2MCBIeiwgTm9uLUludGVybGFjZWQgKDE3Mi43OTggTUh6IGRvdGNsb2NrKQorIworIyAgICAgICAgICAgICAgIEhvcml6b250YWwgIFZlcnRpY2FsCisjICAgUmVzb2x1dGlvbiAgICAgIDE5MjAgICAgICAgIDEwODAKKyMgICBTY2FuIEZyZXF1ZW5jeSAgICAgIDY3LjA4MCBrSHogIDYwLjAwIEh6CisjICAgU3luYyBXaWR0aCAgICAgIDEuMjA0IHVzICAgIDQ0LjcyMyBtcworIyAgICAgICAgICAgICAgIDI2IGNoYXJzICAgIDMgbGluZXMKKyMgICBGcm9udCBQb3JjaCAgICAgMC42OTQgdXMgICAgMTQuOTA4IG1zCisjICAgICAgICAgICAgICAgMTUgY2hhcnMgICAgIDEgbGluZXMKKyMgICBCYWNrIFBvcmNoICAgICAgMS44OTggdXMgICAgNTA2Ljg1NyBtcworIyAgICAgICAgICAgICAgIDQxIGNoYXJzICAgIDM0IGxpbmVzCisjICAgQWN0aXZlIFRpbWUgICAgIDExLjExMSB1cyAgIDE2LjEwMCBtcworIyAgICAgICAgICAgICAgIDI0MCBjaGFycyAgIDEwODAgbGluZXMKKyMgICBCbGFuayBUaW1lICAgICAgMy43OTYgdXMgICAgMC41NjYgbXMKKyMgICAgICAgICAgICAgICA4MiBjaGFycyAgICAzOCBsaW5lcworIyAgIFBvbGFyaXR5ICAgICAgICBuZWdhdGl2ZSAgICBuZWdhdGl2ZQorIworICAgIG1vZGUgIjE5MjB4MTA4MC02MCIKKyMgRDogNzQuNDgxIE1IeiwgSDogNjcuMDgwIGtIeiwgVjogNjAuMDAgSHoKKyAgICBnZW9tZXRyeSAxOTIwIDEwODAgMTkyMCAxMDgwIDMyIHRpbWluZ3MgNTc4NyAzMjggMTIwIDM0IDEgMjA4IDMgZW5kbW9kZQorIworIyAgIDE0MDB4MTA1MCwgNjAgSHosIE5vbi1JbnRlcmxhY2VkICgxMjIuNjEgTUh6IGRvdGNsb2NrKQorIworIyAgICAgICAgICAgICAgIEhvcml6b250YWwgIFZlcnRpY2FsCisjICAgUmVzb2x1dGlvbiAgICAgIDE0MDAgICAgICAgIDEwNTAKKyMgICBTY2FuIEZyZXF1ZW5jeSAgICAgIDY1LjIxOCBrSHogIDU5Ljk5IEh6CisjICAgU3luYyBXaWR0aCAgICAgIDEuMDM3IHVzICAgIDAuMDQ3IG1zCisjICAgICAgICAgICAgICAgMTkgY2hhcnMgICAgMyBsaW5lcworIyAgIEZyb250IFBvcmNoICAgICAwLjQ0NCB1cyAgICAwLjAxNSBtcworIyAgICAgICAgICAgICAgIDExIGNoYXJzICAgICAxIGxpbmVzCisjICAgQmFjayBQb3JjaCAgICAgIDEuMTg1IHVzICAgIDAuMTg4IG1zCisjICAgICAgICAgICAgICAgMzAgY2hhcnMgICAgMzMgbGluZXMKKyMgICBBY3RpdmUgVGltZSAgICAgMTIuOTYzIHVzICAgMTYuNDExIG1zCisjICAgICAgICAgICAgICAgMTc1IGNoYXJzICAgMTA1MCBsaW5lcworIyAgIEJsYW5rIFRpbWUgICAgICAyLjY2NyB1cyAgICAwLjI1MCBtcworIyAgICAgICAgICAgICAgIDYwIGNoYXJzICAgIDM3IGxpbmVzCisjICAgUG9sYXJpdHkgICAgICAgIG5lZ2F0aXZlICAgIHBvc2l0aXZlCisjCisgICAgbW9kZSAiMTQwMHgxMDUwLTYwIgorIyBEOiAxMjIuNzUwIE1IeiwgSDogNjUuMzE3IGtIeiwgVjogNTkuOTkgSHoKKyAgICBnZW9tZXRyeSAxNDAwIDEwNTAgMTQwOCAxMDUwIDMyCisgICAgdGltaW5ncyA4MjE0IDIzMiA4OCAzMiAzIDE0NCA0IGVuZG1vZGUgbW9kZSAiMTQwMHgxMDUwLTc1IgorIyBEOiAxNTYuMDAwIE1IeiwgSDogODIuMjc4IGtIeiwgVjogNzQuODY3IEh6CisgICAgZ2VvbWV0cnkgMTQwMCAxMDUwIDE0MDggMTA1MCAzMiB0aW1pbmdzIDY0MTAgMjQ4IDEwNCA0MiAzIDE0NCA0IGVuZG1vZGUKKyMKKyMgICAxMzY2eDc2OCwgNjAgSHosIE5vbi1JbnRlcmxhY2VkICg4NS44NiBNSHogZG90Y2xvY2spCisjCisjICAgICAgICAgICAgICAgSG9yaXpvbnRhbCAgVmVydGljYWwKKyMgICBSZXNvbHV0aW9uICAgICAgMTM2NiAgICAgICAgNzY4CisjICAgU2NhbiBGcmVxdWVuY3kgICAgICA0Ny43MDAga0h6ICA2MC4wMCBIegorIyAgIFN5bmMgV2lkdGggICAgICAxLjY3NyB1cyAgICAwLjA2MyBtcworIyAgICAgICAgICAgICAgIDE4IGNoYXJzICAgIDMgbGluZXMKKyMgICBGcm9udCBQb3JjaCAgICAgMC44MzkgdXMgICAgMC4wMjEgbXMKKyMgICAgICAgICAgICAgICA5IGNoYXJzICAgICAxIGxpbmVzCisjICAgQmFjayBQb3JjaCAgICAgIDIuNTE2IHVzICAgIDAuNDgyIG1zCisjICAgICAgICAgICAgICAgMjcgY2hhcnMgICAgMjMgbGluZXMKKyMgICBBY3RpdmUgVGltZSAgICAgMTUuOTMzIHVzICAgMTYuMTAxIG1zCisjICAgICAgICAgICAgICAgMTcxIGNoYXJzICAgNzY4IGxpbmVzCisjICAgQmxhbmsgVGltZSAgICAgIDUuMDMxIHVzICAgIDAuNTY2IG1zCisjICAgICAgICAgICAgICAgNTQgY2hhcnMgICAgMjcgbGluZXMKKyMgICBQb2xhcml0eSAgICAgICAgbmVnYXRpdmUgICAgcG9zaXRpdmUKKyMKKyAgICBtb2RlICIxMzYweDc2OC02MCIKKyMgRDogODQuNzUwIE1IeiwgSDogNDcuNzIwIGtIeiwgVjogNjAuMDAgSHoKKyAgICBnZW9tZXRyeSAxMzYwIDc2OCAxMzYwIDc2OCAzMgorICAgIHRpbWluZ3MgMTE3OTkgMjA4IDcyIDIyIDMgMTM2IDUgZW5kbW9kZSBtb2RlICIxMzY2eDc2OC02MCIKKyMgRDogODUuODYgTUh6LCBIOiA0Ny43MDAga0h6LCBWOiA2MC4wMCBIegorICAgIGdlb21ldHJ5IDEzNjYgNzY4IDEzNjYgNzY4IDMyCisgICAgdGltaW5ncyAxMTY0NyAyMTYgNzIgMjMgMSAxNDQgMyBlbmRtb2RlIG1vZGUgIjEzNjZ4NzY4LTUwIgorIyBEOiA2OSw5MjQgTUh6LCBIOiAzOS41NTAga0h6LCBWOiA1MC4wMCBIegorICAgIGdlb21ldHJ5IDEzNjYgNzY4IDEzNjYgNzY4IDMyIHRpbWluZ3MgMTQzMDEgMjAwIDU2IDE5IDEgMTQ0IDMgZW5kbW9kZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9mYi92aWFmYi50eHQgYi9Eb2N1bWVudGF0aW9uL2ZiL3ZpYWZiLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42N2RiZjQ0Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9mYi92aWFmYi50eHQKQEAgLTAsMCArMSwyMTQgQEAKKworICAgICAgICBWSUEgSW50ZWdyYXRpb24gR3JhcGhpYyBDaGlwIENvbnNvbGUgRnJhbWVidWZmZXIgRHJpdmVyCisKK1tQbGF0Zm9ybV0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgVGhlIGNvbnNvbGUgZnJhbWVidWZmZXIgZHJpdmVyIGlzIGZvciBncmFwaGljcyBjaGlwcyBvZgorICAgIFZJQSBVbmlDaHJvbWUgRmFtaWx5KENMRTI2NiwgUE04MDAgLyBDTjQwMCAvIENOMzAwLAorICAgICAgICAgICAgICAgICAgICAgICAgUDRNODAwQ0UgLyBQNE04MDBQcm8gLyBDTjcwMCAvIFZOODAwLAorICAgICAgICAgICAgICAgICAgICAgICAgQ1g3MDAgLyBWWDcwMCwgSzhNODkwLCBQNE04OTAsCisgICAgICAgICAgICAgICAgICAgICAgICBDTjg5NiAvIFA0TTkwMCwgVlg4MDApCisKK1tEcml2ZXIgZmVhdHVyZXNdCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICBEZXZpY2U6IENSVCwgTENELCBEVkkKKworICAgIFN1cHBvcnQgdmlhZmJfbW9kZToKKyAgICAgICAgQ1JUOgorICAgICAgICAgICAgNjQweDQ4MCg2MCwgNzUsIDg1LCAxMDAsIDEyMCBIeiksIDcyMHg0ODAoNjAgSHopLAorICAgICAgICAgICAgNzIweDU3Nig2MCBIeiksIDgwMHg2MDAoNjAsIDc1LCA4NSwgMTAwLCAxMjAgSHopLAorICAgICAgICAgICAgODQ4eDQ4MCg2MCBIeiksIDg1Nng0ODAoNjAgSHopLCAxMDI0eDUxMig2MCBIeiksCisgICAgICAgICAgICAxMDI0eDc2OCg2MCwgNzUsIDg1LCAxMDAgSHopLCAxMTUyeDg2NCg3NSBIeiksCisgICAgICAgICAgICAxMjgweDc2OCg2MCBIeiksIDEyODB4OTYwKDYwIEh6KSwgMTI4MHgxMDI0KDYwLCA3NSwgODUgSHopLAorICAgICAgICAgICAgMTQ0MHgxMDUwKDYwIEh6KSwgMTYwMHgxMjAwKDYwLCA3NSBIeiksIDEyODB4NzIwKDYwIEh6KSwKKyAgICAgICAgICAgIDE5MjB4MTA4MCg2MCBIeiksIDE0MDB4MTA1MCg2MCBIeiksIDgwMHg0ODAoNjAgSHopCisKKyAgICBjb2xvciBkZXB0aDogOCBicHAsIDE2IGJwcCwgMzIgYnBwIHN1cHBvcnRzLgorCisgICAgU3VwcG9ydCAyRCBoYXJkd2FyZSBhY2NlbGVyYXRvci4KKworW1VzaW5nIHRoZSB2aWFmYiBtb2R1bGVdCistLSAtLSAtLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIFN0YXJ0IHZpYWZiIHdpdGggZGVmYXVsdCBzZXR0aW5nczoKKyAgICAgICAgI21vZHByb2JlIHZpYWZiCisKKyAgICBTdGFydCB2aWFmYiB3aXRoIHdpdGggdXNlciBvcHRpb25zOgorICAgICAgICAjbW9kcHJvYmUgdmlhZmIgdmlhZmJfbW9kZT04MDB4NjAwIHZpYWZiX2JwcD0xNiB2aWFmYl9yZWZyZXNoPTYwCisgICAgICAgICAgICAgICAgICB2aWFmYl9hY3RpdmVfZGV2PUNSVCtEVkkgdmlhZmJfZHZpX3BvcnQ9RFZQMQorICAgICAgICAgICAgICAgICAgdmlhZmJfbW9kZTE9MTAyNHg3NjggdmlhZmJfYnBwPTE2IHZpYWZiX3JlZnJlc2gxPTYwCisgICAgICAgICAgICAgICAgICB2aWFmYl9TQU1NX09OPTEKKworICAgIHZpYWZiX21vZGU6CisgICAgICAgIDY0MHg0ODAgKGRlZmF1bHQpCisgICAgICAgIDcyMHg0ODAKKyAgICAgICAgODAweDYwMAorICAgICAgICAxMDI0eDc2OAorICAgICAgICAuLi4uLi4KKworICAgIHZpYWZiX2JwcDoKKyAgICAgICAgOCwgMTYsIDMyIChkZWZhdWx0OjMyKQorCisgICAgdmlhZmJfcmVmcmVzaDoKKyAgICAgICAgNjAsIDc1LCA4NSwgMTAwLCAxMjAgKGRlZmF1bHQ6NjApCisKKyAgICB2aWFmYl9sY2RfZHNwX21ldGhvZDoKKyAgICAgICAgMCA6IGV4cGFuc2lvbiAoZGVmYXVsdCkKKyAgICAgICAgMSA6IGNlbnRlcmluZworCisgICAgdmlhZmJfbGNkX21vZGU6CisgICAgICAgIDAgOiBMQ0QgcGFuZWwgd2l0aCBMU0IgZGF0YSBmb3JtYXQgaW5wdXQgKGRlZmF1bHQpCisgICAgICAgIDEgOiBMQ0QgcGFuZWwgd2l0aCBNU0IgZGF0YSBmb3JtYXQgaW5wdXQKKworICAgIHZpYWZiX2xjZF9wYW5lbF9pZDoKKyAgICAgICAgMCA6IFJlc29sdXRpb246IDY0MHg0ODAsIENoYW5uZWw6IHNpbmdsZSwgRGl0aGVyaW5nOiBFbmFibGUKKyAgICAgICAgMSA6IFJlc29sdXRpb246IDgwMHg2MDAsIENoYW5uZWw6IHNpbmdsZSwgRGl0aGVyaW5nOiBFbmFibGUKKyAgICAgICAgMiA6IFJlc29sdXRpb246IDEwMjR4NzY4LCBDaGFubmVsOiBzaW5nbGUsIERpdGhlcmluZzogRW5hYmxlIChkZWZhdWx0KQorICAgICAgICAzIDogUmVzb2x1dGlvbjogMTI4MHg3NjgsIENoYW5uZWw6IHNpbmdsZSwgRGl0aGVyaW5nOiBFbmFibGUKKyAgICAgICAgNCA6IFJlc29sdXRpb246IDEyODB4MTAyNCwgQ2hhbm5lbDogZHVhbCwgRGl0aGVyaW5nOiBFbmFibGUKKyAgICAgICAgNSA6IFJlc29sdXRpb246IDE0MDB4MTA1MCwgQ2hhbm5lbDogZHVhbCwgRGl0aGVyaW5nOiBFbmFibGUKKyAgICAgICAgNiA6IFJlc29sdXRpb246IDE2MDB4MTIwMCwgQ2hhbm5lbDogZHVhbCwgRGl0aGVyaW5nOiBFbmFibGUKKworICAgICAgICA4IDogUmVzb2x1dGlvbjogODAweDQ4MCwgQ2hhbm5lbDogc2luZ2xlLCBEaXRoZXJpbmc6IEVuYWJsZQorICAgICAgICA5IDogUmVzb2x1dGlvbjogMTAyNHg3NjgsIENoYW5uZWw6IGR1YWwsIERpdGhlcmluZzogRW5hYmxlCisgICAgICAgIDEwOiBSZXNvbHV0aW9uOiAxMDI0eDc2OCwgQ2hhbm5lbDogc2luZ2xlLCBEaXRoZXJpbmc6IERpc2FibGUKKyAgICAgICAgMTE6IFJlc29sdXRpb246IDEwMjR4NzY4LCBDaGFubmVsOiBkdWFsLCBEaXRoZXJpbmc6IERpc2FibGUKKyAgICAgICAgMTI6IFJlc29sdXRpb246IDEyODB4NzY4LCBDaGFubmVsOiBzaW5nbGUsIERpdGhlcmluZzogRGlzYWJsZQorICAgICAgICAxMzogUmVzb2x1dGlvbjogMTI4MHgxMDI0LCBDaGFubmVsOiBkdWFsLCBEaXRoZXJpbmc6IERpc2FibGUKKyAgICAgICAgMTQ6IFJlc29sdXRpb246IDE0MDB4MTA1MCwgQ2hhbm5lbDogZHVhbCwgRGl0aGVyaW5nOiBEaXNhYmxlCisgICAgICAgIDE1OiBSZXNvbHV0aW9uOiAxNjAweDEyMDAsIENoYW5uZWw6IGR1YWwsIERpdGhlcmluZzogRGlzYWJsZQorICAgICAgICAxNjogUmVzb2x1dGlvbjogMTM2Nng3NjgsIENoYW5uZWw6IHNpbmdsZSwgRGl0aGVyaW5nOiBEaXNhYmxlCisgICAgICAgIDE3OiBSZXNvbHV0aW9uOiAxMDI0eDYwMCwgQ2hhbm5lbDogc2luZ2xlLCBEaXRoZXJpbmc6IEVuYWJsZQorICAgICAgICAxODogUmVzb2x1dGlvbjogMTI4MHg3NjgsIENoYW5uZWw6IGR1YWwsIERpdGhlcmluZzogRW5hYmxlCisgICAgICAgIDE5OiBSZXNvbHV0aW9uOiAxMjgweDgwMCwgQ2hhbm5lbDogc2luZ2xlLCBEaXRoZXJpbmc6IEVuYWJsZQorCisgICAgdmlhZmJfYWNjZWw6CisgICAgICAgIDAgOiBObyAyRCBIYXJkd2FyZSBBY2NlbGVyYXRpb24KKyAgICAgICAgMSA6IDJEIEhhcmR3YXJlIEFjY2VsZXJhdGlvbiAoZGVmYXVsdCkKKworICAgIHZpYWZiX1NBTU1fT046CisgICAgICAgIDAgOiB2aWFmYl9TQU1NX09OIGRpc2FibGUgKGRlZmF1bHQpCisgICAgICAgIDEgOiB2aWFmYl9TQU1NX09OIGVuYWJsZQorCisgICAgdmlhZmJfbW9kZTE6IChzZWNvbmRhcnkgZGlzcGxheSBkZXZpY2UpCisgICAgICAgIDY0MHg0ODAgKGRlZmF1bHQpCisgICAgICAgIDcyMHg0ODAKKyAgICAgICAgODAweDYwMAorICAgICAgICAxMDI0eDc2OAorICAgICAgICAuLi4gLi4uCisKKyAgICB2aWFmYl9icHAxOiAoc2Vjb25kYXJ5IGRpc3BsYXkgZGV2aWNlKQorICAgICAgICA4LCAxNiwgMzIgKGRlZmF1bHQ6MzIpCisKKyAgICB2aWFmYl9yZWZyZXNoMTogKHNlY29uZGFyeSBkaXNwbGF5IGRldmljZSkKKyAgICAgICAgNjAsIDc1LCA4NSwgMTAwLCAxMjAgKGRlZmF1bHQ6NjApCisKKyAgICB2aWFmYl9hY3RpdmVfZGV2OgorICAgICAgICBUaGlzIG9wdGlvbiBpcyB1c2VkIHRvIHNwZWNpZnkgYWN0aXZlIGRldmljZXMuKENSVCwgRFZJLCBDUlQrTENELi4uKQorICAgICAgICBEVkkgc3RhbmRzIGZvciBEVkkgb3IgSERNSSwgRS5nLiwgSWYgeW91IHdhbnQgdG8gZW5hYmxlIEhETUksCisgICAgICAgIHNldCB2aWFmYl9hY3RpdmVfZGV2PURWSS4gSW4gU0FNTSBjYXNlLCB0aGUgcHJldmlvdXMgb2YKKyAgICAgICAgdmlhZmJfYWN0aXZlX2RldiBpcyBwcmltYXJ5IGRldmljZSwgYW5kIHRoZSBmb2xsb3dpbmcgaXMKKyAgICAgICAgc2Vjb25kYXJ5IGRldmljZS4KKworICAgICAgICBGb3IgZXhhbXBsZToKKyAgICAgICAgVG8gZW5hYmxlIG9uZSBkZXZpY2UsIHN1Y2ggYXMgRFZJIG9ubHksIHdlIGNhbiB1c2U6CisgICAgICAgICAgICBtb2Rwcm9iZSB2aWFmYiB2aWFmYl9hY3RpdmVfZGV2PURWSQorICAgICAgICBUbyBlbmFibGUgdHdvIGRldmljZXMsIHN1Y2ggYXMgQ1JUK0RWSToKKyAgICAgICAgICAgIG1vZHByb2JlIHZpYWZiIHZpYWZiX2FjdGl2ZV9kZXY9Q1JUK0RWSTsKKworICAgICAgICBGb3IgRHVvVmlldyBjYXNlLCB3ZSBjYW4gdXNlOgorICAgICAgICAgICAgbW9kcHJvYmUgdmlhZmIgdmlhZmJfYWN0aXZlX2Rldj1DUlQrRFZJCisgICAgICAgICAgICBPUgorICAgICAgICAgICAgbW9kcHJvYmUgdmlhZmIgdmlhZmJfYWN0aXZlX2Rldj1EVkkrQ1JULi4uCisKKyAgICAgICAgRm9yIFNBTU0gY2FzZToKKyAgICAgICAgSWYgQ1JUIGlzIHByaW1hcnkgYW5kIERWSSBpcyBzZWNvbmRhcnksIHdlIHNob3VsZCB1c2U6CisgICAgICAgICAgICBtb2Rwcm9iZSB2aWFmYiB2aWFmYl9hY3RpdmVfZGV2PUNSVCtEVkkgdmlhZmJfU0FNTV9PTj0xLi4uCisgICAgICAgIElmIERWSSBpcyBwcmltYXJ5IGFuZCBDUlQgaXMgc2Vjb25kYXJ5LCB3ZSBzaG91bGQgdXNlOgorICAgICAgICAgICAgbW9kcHJvYmUgdmlhZmIgdmlhZmJfYWN0aXZlX2Rldj1EVkkrQ1JUIHZpYWZiX1NBTU1fT049MS4uLgorCisgICAgdmlhZmJfZGlzcGxheV9oYXJkd2FyZV9sYXlvdXQ6CisgICAgICAgIFRoaXMgb3B0aW9uIGlzIHVzZWQgdG8gc3BlY2lmeSBkaXNwbGF5IGhhcmR3YXJlIGxheW91dCBmb3IgQ1g3MDAgY2hpcC4KKyAgICAgICAgMSA6IExDRCBvbmx5CisgICAgICAgIDIgOiBEVkkgb25seQorICAgICAgICAzIDogTENEK0RWSSAoZGVmYXVsdCkKKyAgICAgICAgNCA6IExDRDErTENEMiAoaW50ZXJuYWwgKyBpbnRlcm5hbCkKKyAgICAgICAgMTY6IExDRDErRXh0ZXJuYWxMQ0QyIChpbnRlcm5hbCArIGV4dGVybmFsKQorCisgICAgdmlhZmJfc2Vjb25kX3NpemU6CisgICAgICAgIFRoaXMgb3B0aW9uIGlzIHVzZWQgdG8gc2V0IHNlY29uZCBkZXZpY2UgbWVtb3J5IHNpemUoTUIpIGluIFNBTU0gY2FzZS4KKyAgICAgICAgVGhlIG1pbmltYWwgc2l6ZSBpcyAxNi4KKworICAgIHZpYWZiX3BsYXRmb3JtX2VwaWFfZHZpOgorICAgICAgICBUaGlzIG9wdGlvbiBpcyB1c2VkIHRvIGVuYWJsZSBEVkkgb24gRVBJQSAtIE0KKyAgICAgICAgMCA6IE5vIERWSSBvbiBFUElBIC0gTSAoZGVmYXVsdCkKKyAgICAgICAgMSA6IERWSSBvbiBFUElBIC0gTQorCisgICAgdmlhZmJfYnVzX3dpZHRoOgorICAgICAgICBXaGVuIHVzaW5nIDI0IC0gQml0IEJ1cyBXaWR0aCBEaWdpdGFsIEludGVyZmFjZSwKKyAgICAgICAgdGhpcyBvcHRpb24gc2hvdWxkIGJlIHNldC4KKyAgICAgICAgMTI6IDEyLUJpdCBMVkRTIG9yIDEyLUJpdCBUTURTIChkZWZhdWx0KQorICAgICAgICAyNDogMjQtQml0IExWRFMgb3IgMjQtQml0IFRNRFMKKworICAgIHZpYWZiX2RldmljZV9sY2RfZHVhbGVkZ2U6CisgICAgICAgIFdoZW4gdXNpbmcgRHVhbCBFZGdlIFBhbmVsLCB0aGlzIG9wdGlvbiBzaG91bGQgYmUgc2V0LgorICAgICAgICAwIDogTm8gRHVhbCBFZGdlIFBhbmVsIChkZWZhdWx0KQorICAgICAgICAxIDogRHVhbCBFZGdlIFBhbmVsCisKKyAgICB2aWFmYl92aWRlb19kZXY6CisgICAgICAgIFRoaXMgb3B0aW9uIGlzIHVzZWQgdG8gc3BlY2lmeSB2aWRlbyBvdXRwdXQgZGV2aWNlcyhDUlQsIERWSSwgTENEKSBmb3IKKyAgICAgICAgZHVvdmlldyBjYXNlLgorICAgICAgICBGb3IgZXhhbXBsZToKKyAgICAgICAgVG8gb3V0cHV0IHZpZGVvIG9uIERWSSwgd2Ugc2hvdWxkIHVzZToKKyAgICAgICAgICAgIG1vZHByb2JlIHZpYWZiIHZpYWZiX3ZpZGVvX2Rldj1EVkkuLi4KKworICAgIHZpYWZiX2xjZF9wb3J0OgorICAgICAgICBUaGlzIG9wdGlvbiBpcyB1c2VkIHRvIHNwZWNpZnkgTENEIG91dHB1dCBwb3J0LAorICAgICAgICBhdmFpbGFibGUgdmFsdWVzIGFyZSAiRFZQMCIgIkRWUDEiICJERlBfSElHSExPVyIgIkRGUF9ISUdIIiAiREZQX0xPVyIuCisgICAgICAgIGZvciBleHRlcm5hbCBMQ0QgKyBleHRlcm5hbCBEVkkgb24gQ1g3MDAoRXh0ZXJuYWwgTENEIGlzIG9uIERWUDApLAorICAgICAgICB3ZSBzaG91bGQgdXNlOgorICAgICAgICAgICAgbW9kcHJvYmUgdmlhZmIgdmlhZmJfbGNkX3BvcnQ9RFZQMC4uLgorCitOb3RlczoKKyAgICAxLiBDUlQgbWF5IG5vdCBkaXNwbGF5IHByb3Blcmx5IGZvciBEdW9WaWV3IENSVCAmIERWSSBkaXNwbGF5IGF0CisgICAgICAgdGhlICI2NDB4NDgwIiBQQUwgbW9kZSB3aXRoIERWSSBvdmVyc2NhbiBlbmFibGVkLgorICAgIDIuIFNBTU0gc3RhbmRzIGZvciBzaW5nbGUgYWRhcHRlciBtdWx0aSBtb25pdG9ycy4gSXQgaXMgZGlmZmVyZW50IGZyb20KKyAgICAgICBtdWx0aS1oZWFkIHNpbmNlIFNBTU0gc3VwcG9ydCBtdWx0aSBtb25pdG9yIGF0IGRyaXZlciBsYXllcnMsIHRodXMgZmJjb24KKyAgICAgICBsYXllciBkb2Vzbid0IGV2ZW4ga25vdyBhYm91dCBpdDsgU0FNTSdzIHNlY29uZCBzY3JlZW4gZG9lc24ndCBoYXZlIGEKKyAgICAgICBkZXZpY2Ugbm9kZSBmaWxlLCB0aHVzIGEgdXNlciBtb2RlIGFwcGxpY2F0aW9uIGNhbid0IGFjY2VzcyBpdCBkaXJlY3RseS4KKyAgICAgICBXaGVuIFNBTU0gaXMgZW5hYmxlZCwgdmlhZmJfbW9kZSBhbmQgdmlhZmJfbW9kZTEsIHZpYWZiX2JwcCBhbmQKKyAgICAgICB2aWFmYl9icHAxLCB2aWFmYl9yZWZyZXNoIGFuZCB2aWFmYl9yZWZyZXNoMSBjYW4gYmUgZGlmZmVyZW50LgorICAgIDMuIFdoZW4gY29uc29sZSBpcyBkZXBlbmRpbmcgb24gdmlhZmJpbmZvMSwgZHluYW1pY2FsbHkgY2hhbmdlIHJlc29sdXRpb24KKyAgICAgICBhbmQgYnBwLCBuZWVkIHRvIGNhbGwgVklBRkIgc3BlY2lmaWVkIGlvY3RsIGludGVyZmFjZSBWSUFGQl9TRVRfREVWSUNFCisgICAgICAgaW5zdGVhZCBvZiBjYWxsaW5nIGNvbW1vbiBpb2N0bCBmdW5jdGlvbiBGQklPUFVUX1ZTQ1JFRU5JTkZPIHNpbmNlCisgICAgICAgdmlhZmIgZG9lc24ndCBzdXBwb3J0IG11bHRpLWhlYWQgd2VsbCwgb3IgaXQgd2lsbCBjYXVzZSBzY3JlZW4gY3J1c2guCisgICAgNC4gVlg4MDAgMkQgYWNjZWxlcmF0b3IgaGFzbid0IGJlZW4gc3VwcG9ydGVkIGluIHRoaXMgZHJpdmVyIHlldC4gV2hlbgorICAgICAgIHVzaW5nIGRyaXZlciBvbiBWWDgwMCwgdGhlIGRyaXZlciB3aWxsIGRpc2FibGUgdGhlIGFjY2VsZXJhdGlvbgorICAgICAgIGZ1bmN0aW9uIGFzIGRlZmF1bHQuCisKKworW0NvbmZpZ3VyZSB2aWFmYiB3aXRoICJmYnNldCIgdG9vbF0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgImZic2V0IiBpcyBhbiBpbmJveCB1dGlsaXR5IG9mIExpbnV4LgorICAgIDEuIElucXVpcmUgY3VycmVudCB2aWFmYiBpbmZvcm1hdGlvbiwgdHlwZSwKKyAgICAgICAgICAgIyBmYnNldCAtaQorCisgICAgMi4gU2V0IHZhcmlvdXMgcmVzb2x1dGlvbnMgYW5kIHZpYWZiX3JlZnJlc2ggcmF0ZXMsCisgICAgICAgICAgICMgZmJzZXQgPHJlc29sdXRpb24tdmVydGljYWxfc3luYz4KKworICAgICAgIGV4YW1wbGUsCisgICAgICAgICAgICMgZmJzZXQgIjEwMjR4NzY4LTc1IgorICAgICAgIG9yCisgICAgICAgICAgICMgZmJzZXQgLWcgMTAyNCA3NjggMTAyNCA3NjggMzIKKyAgICAgICBDaGVjayB0aGUgZmlsZSAiL2V0Yy9mYi5tb2RlcyIgdG8gZmluZCBkaXNwbGF5IG1vZGVzIGF2YWlsYWJsZS4KKworICAgIDMuIFNldCB0aGUgY29sb3IgZGVwdGgsCisgICAgICAgICAgICMgZmJzZXQgLWRlcHRoIDx2YWx1ZT4KKworICAgICAgIGV4YW1wbGUsCisgICAgICAgICAgICMgZmJzZXQgLWRlcHRoIDE2CisKK1tCb290dXAgd2l0aCB2aWFmYl06CistLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIEFkZCB0aGUgZm9sbG93aW5nIGxpbmUgdG8geW91ciBncnViLmNvbmY6CisgICAgYXBwZW5kID0gInZpZGVvPXZpYWZiOnZpYWZiX21vZGU9MTAyNHg3NjgsdmlhZmJfYnBwPTMyLHZpYWZiX3JlZnJlc2g9ODUiCisKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmVhdHVyZS1yZW1vdmFsLXNjaGVkdWxlLnR4dCBiL0RvY3VtZW50YXRpb24vZmVhdHVyZS1yZW1vdmFsLXNjaGVkdWxlLnR4dAppbmRleCAzZDJkMGMyLi5mNWY4MTJkIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2ZlYXR1cmUtcmVtb3ZhbC1zY2hlZHVsZS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9mZWF0dXJlLXJlbW92YWwtc2NoZWR1bGUudHh0CkBAIC0yODcsMTEgKzI4NywxOSBAQAogCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotV2hhdDoJb2xkIHN0eWxlIHNlcmlhbCBkcml2ZXIgZm9yIENvbGRGaXJlIChDT05GSUdfU0VSSUFMX0NPTERGSVJFKQotV2hlbjoJMi42LjI4Ci1XaHk6CVRoaXMgZHJpdmVyIHN0aWxsIHVzZXMgdGhlIG9sZCBpbnRlcmZhY2UgYW5kIGhhcyBiZWVuIHJlcGxhY2VkCi0JYnkgQ09ORklHX1NFUklBTF9NQ0YuCi1XaG86CVNlYmFzdGlhbiBTaWV3aW9yIDxzZWJhc3RpYW5AYnJlYWtwb2ludC5jYz4KK1doYXQ6CXJlbW92ZSBISUQgY29tcGF0IHN1cHBvcnQKK1doZW46CTIuNi4yOQorV2h5OgluZWVkZWQgb25seSBhcyBhIHRlbXBvcmFyeSBzb2x1dGlvbiB1bnRpbCBkaXN0cm9zIGZpeCB0aGVtc2VsdmVzIHVwCitXaG86CUppcmkgU2xhYnkgPGppcmlzbGFieUBnbWFpbC5jb20+CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitXaGF0OiBwcmludF9mbl9kZXNjcmlwdG9yX3N5bWJvbCgpCitXaGVuOiBPY3RvYmVyIDIwMDkKK1doeTogIFRoZSAlcEYgdnNwcmludGYgZm9ybWF0IHByb3ZpZGVzIHRoZSBzYW1lIGZ1bmN0aW9uYWxpdHkgaW4gYQorICAgICAgc2ltcGxlciB3YXkuICBwcmludF9mbl9kZXNjcmlwdG9yX3N5bWJvbCgpIGlzIGRlcHJlY2F0ZWQgYnV0CisgICAgICBzdGlsbCBwcmVzZW50IHRvIGdpdmUgb3V0LW9mLXRyZWUgbW9kdWxlcyB0aW1lIHRvIGNoYW5nZS4KK1dobzogIEJqb3JuIEhlbGdhYXMgPGJqb3JuLmhlbGdhYXNAaHAuY29tPgogCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9hdXRvZnM0LW1vdW50LWNvbnRyb2wudHh0IGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9hdXRvZnM0LW1vdW50LWNvbnRyb2wudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2MzQxNzQKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2F1dG9mczQtbW91bnQtY29udHJvbC50eHQKQEAgLTAsMCArMSwzOTMgQEAKKworTWlzY2VsbGFuZW91cyBEZXZpY2UgY29udHJvbCBvcGVyYXRpb25zIGZvciB0aGUgYXV0b2ZzNCBrZXJuZWwgbW9kdWxlCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitUaGUgcHJvYmxlbQorPT09PT09PT09PT0KKworVGhlcmUgaXMgYSBwcm9ibGVtIHdpdGggYWN0aXZlIHJlc3RhcnRzIGluIGF1dG9mcyAodGhhdCBpcyB0byBzYXkKK3Jlc3RhcnRpbmcgYXV0b2ZzIHdoZW4gdGhlcmUgYXJlIGJ1c3kgbW91bnRzKS4KKworRHVyaW5nIG5vcm1hbCBvcGVyYXRpb24gYXV0b2ZzIHVzZXMgYSBmaWxlIGRlc2NyaXB0b3Igb3BlbmVkIG9uIHRoZQorZGlyZWN0b3J5IHRoYXQgaXMgYmVpbmcgbWFuYWdlZCBpbiBvcmRlciB0byBiZSBhYmxlIHRvIGlzc3VlIGNvbnRyb2wKK29wZXJhdGlvbnMuIFVzaW5nIGEgZmlsZSBkZXNjcmlwdG9yIGdpdmVzIGlvY3RsIG9wZXJhdGlvbnMgYWNjZXNzIHRvCithdXRvZnMgc3BlY2lmaWMgaW5mb3JtYXRpb24gc3RvcmVkIGluIHRoZSBzdXBlciBibG9jay4gVGhlIG9wZXJhdGlvbnMKK2FyZSB0aGluZ3Mgc3VjaCBhcyBzZXR0aW5nIGFuIGF1dG9mcyBtb3VudCBjYXRhdG9uaWMsIHNldHRpbmcgdGhlCitleHBpcmUgdGltZW91dCBhbmQgcmVxdWVzdGluZyBleHBpcmUgY2hlY2tzLiBBcyBpcyBleHBsYWluZWQgYmVsb3csCitjZXJ0YWluIHR5cGVzIG9mIGF1dG9mcyB0cmlnZ2VyZWQgbW91bnRzIGNhbiBlbmQgdXAgY292ZXJpbmcgYW4gYXV0b2ZzCittb3VudCBpdHNlbGYgd2hpY2ggcHJldmVudHMgdXMgYmVpbmcgYWJsZSB0byB1c2Ugb3BlbigyKSB0byBvYnRhaW4gYQorZmlsZSBkZXNjcmlwdG9yIGZvciB0aGVzZSBvcGVyYXRpb25zIGlmIHdlIGRvbid0IGFscmVhZHkgaGF2ZSBvbmUgb3Blbi4KKworQ3VycmVudGx5IGF1dG9mcyB1c2VzICJ1bW91bnQgLWwiIChsYXp5IHVtb3VudCkgdG8gY2xlYXIgYWN0aXZlIG1vdW50cworYXQgcmVzdGFydC4gV2hpbGUgdXNpbmcgbGF6eSB1bW91bnQgd29ya3MgZm9yIG1vc3QgY2FzZXMsIGFueXRoaW5nIHRoYXQKK25lZWRzIHRvIHdhbGsgYmFjayB1cCB0aGUgbW91bnQgdHJlZSB0byBjb25zdHJ1Y3QgYSBwYXRoLCBzdWNoIGFzCitnZXRjd2QoMikgYW5kIHRoZSBwcm9jIGZpbGUgc3lzdGVtIC9wcm9jLzxwaWQ+L2N3ZCwgbm8gbG9uZ2VyIHdvcmtzCitiZWNhdXNlIHRoZSBwb2ludCBmcm9tIHdoaWNoIHRoZSBwYXRoIGlzIGNvbnN0cnVjdGVkIGhhcyBiZWVuIGRldGFjaGVkCitmcm9tIHRoZSBtb3VudCB0cmVlLgorCitUaGUgYWN0dWFsIHByb2JsZW0gd2l0aCBhdXRvZnMgaXMgdGhhdCBpdCBjYW4ndCByZWNvbm5lY3QgdG8gZXhpc3RpbmcKK21vdW50cy4gSW1tZWRpYXRlbHkgb25lIHRoaW5rcyBvZiBqdXN0IGFkZGluZyB0aGUgYWJpbGl0eSB0byByZW1vdW50CithdXRvZnMgZmlsZSBzeXN0ZW1zIHdvdWxkIHNvbHZlIGl0LCBidXQgYWxhcywgdGhhdCBjYW4ndCB3b3JrLiBUaGlzIGlzCitiZWNhdXNlIGF1dG9mcyBkaXJlY3QgbW91bnRzIGFuZCB0aGUgaW1wbGVtZW50YXRpb24gb2YgIm9uIGRlbWFuZCBtb3VudAorYW5kIGV4cGlyZSIgb2YgbmVzdGVkIG1vdW50IHRyZWVzIGhhdmUgdGhlIGZpbGUgc3lzdGVtIG1vdW50ZWQgZGlyZWN0bHkKK29uIHRvcCBvZiB0aGUgbW91bnQgdHJpZ2dlciBkaXJlY3RvcnkgZGVudHJ5LgorCitGb3IgZXhhbXBsZSwgdGhlcmUgYXJlIHR3byB0eXBlcyBvZiBhdXRvbW91bnQgbWFwcywgZGlyZWN0IChpbiB0aGUga2VybmVsCittb2R1bGUgc291cmNlIHlvdSB3aWxsIHNlZSBhIHRoaXJkIHR5cGUgY2FsbGVkIGFuIG9mZnNldCwgd2hpY2ggaXMganVzdAorYSBkaXJlY3QgbW91bnQgaW4gZGlzZ3Vpc2UpIGFuZCBpbmRpcmVjdC4KKworSGVyZSBpcyBhIG1hc3RlciBtYXAgd2l0aCBkaXJlY3QgYW5kIGluZGlyZWN0IG1hcCBlbnRyaWVzOgorCisvLSAgICAgIC9ldGMvYXV0by5kaXJlY3QKKy90ZXN0ICAgL2V0Yy9hdXRvLmluZGlyZWN0CisKK2FuZCB0aGUgY29ycmVzcG9uZGluZyBtYXAgZmlsZXM6CisKKy9ldGMvYXV0by5kaXJlY3Q6CisKKy9hdXRvbW91bnQvZHBhcnNlL2c2ICBidWRnaWU6L2F1dG9mcy9leHBvcnQxCisvYXV0b21vdW50L2RwYXJzZS9nMSAgc2hhcms6L2F1dG9mcy9leHBvcnQxCithbmQgc28gb24uCisKKy9ldGMvYXV0by5pbmRpcmVjdDoKKworZzEgICAgc2hhcms6L2F1dG9mcy9leHBvcnQxCitnNiAgICBidWRnaWU6L2F1dG9mcy9leHBvcnQxCithbmQgc28gb24uCisKK0ZvciB0aGUgYWJvdmUgaW5kaXJlY3QgbWFwIGFuIGF1dG9mcyBmaWxlIHN5c3RlbSBpcyBtb3VudGVkIG9uIC90ZXN0IGFuZAorbW91bnRzIGFyZSB0cmlnZ2VyZWQgZm9yIGVhY2ggc3ViLWRpcmVjdG9yeSBrZXkgYnkgdGhlIGlub2RlIGxvb2t1cAorb3BlcmF0aW9uLiBTbyB3ZSBzZWUgYSBtb3VudCBvZiBzaGFyazovYXV0b2ZzL2V4cG9ydDEgb24gL3Rlc3QvZzEsIGZvcgorZXhhbXBsZS4KKworVGhlIHdheSB0aGF0IGRpcmVjdCBtb3VudHMgYXJlIGhhbmRsZWQgaXMgYnkgbWFraW5nIGFuIGF1dG9mcyBtb3VudCBvbgorZWFjaCBmdWxsIHBhdGgsIHN1Y2ggYXMgL2F1dG9tb3VudC9kcGFyc2UvZzEsIGFuZCB1c2luZyBpdCBhcyBhIG1vdW50Cit0cmlnZ2VyLiBTbyB3aGVuIHdlIHdhbGsgb24gdGhlIHBhdGggd2UgbW91bnQgc2hhcms6L2F1dG9mcy9leHBvcnQxICJvbgordG9wIG9mIHRoaXMgbW91bnQgcG9pbnQiLiBTaW5jZSB0aGVzZSBhcmUgYWx3YXlzIGRpcmVjdG9yaWVzIHdlIGNhbgordXNlIHRoZSBmb2xsb3dfbGluayBpbm9kZSBvcGVyYXRpb24gdG8gdHJpZ2dlciB0aGUgbW91bnQuCisKK0J1dCwgZWFjaCBlbnRyeSBpbiBkaXJlY3QgYW5kIGluZGlyZWN0IG1hcHMgY2FuIGhhdmUgb2Zmc2V0cyAobWFraW5nCit0aGVtIG11bHRpLW1vdW50IG1hcCBlbnRyaWVzKS4KKworRm9yIGV4YW1wbGUsIGFuIGluZGlyZWN0IG1vdW50IG1hcCBlbnRyeSBjb3VsZCBhbHNvIGJlOgorCitnMSAgXAorICAgLyAgICAgICAgc2hhcms6L2F1dG9mcy9leHBvcnQ1L3Rlc3RpbmcvdGVzdCBcCisgICAvczEgICAgICBzaGFyazovYXV0b2ZzL2V4cG9ydC90ZXN0aW5nL3Rlc3QvczEgXAorICAgL3MyICAgICAgc2hhcms6L2F1dG9mcy9leHBvcnQ1L3Rlc3RpbmcvdGVzdC9zMiBcCisgICAvczEvc3MxICBzaGFyazovYXV0b2ZzL2V4cG9ydDEgXAorICAgL3MyL3NzMiAgc2hhcms6L2F1dG9mcy9leHBvcnQyCisKK2FuZCBhIHNpbWlsYXJseSBhIGRpcmVjdCBtb3VudCBtYXAgZW50cnkgY291bGQgYWxzbyBiZToKKworL2F1dG9tb3VudC9kcGFyc2UvZzEgXAorICAgIC8gICAgICAgc2hhcms6L2F1dG9mcy9leHBvcnQ1L3Rlc3RpbmcvdGVzdCBcCisgICAgL3MxICAgICBzaGFyazovYXV0b2ZzL2V4cG9ydC90ZXN0aW5nL3Rlc3QvczEgXAorICAgIC9zMiAgICAgc2hhcms6L2F1dG9mcy9leHBvcnQ1L3Rlc3RpbmcvdGVzdC9zMiBcCisgICAgL3MxL3NzMSBzaGFyazovYXV0b2ZzL2V4cG9ydDIgXAorICAgIC9zMi9zczIgc2hhcms6L2F1dG9mcy9leHBvcnQyCisKK09uZSBvZiB0aGUgaXNzdWVzIHdpdGggdmVyc2lvbiA0IG9mIGF1dG9mcyB3YXMgdGhhdCwgd2hlbiBtb3VudGluZyBhbgorZW50cnkgd2l0aCBhIGxhcmdlIG51bWJlciBvZiBvZmZzZXRzLCBwb3NzaWJseSB3aXRoIG5lc3RpbmcsIHdlIG5lZWRlZAordG8gbW91bnQgYW5kIHVtb3VudCBhbGwgb2YgdGhlIG9mZnNldHMgYXMgYSBzaW5nbGUgdW5pdC4gTm90IHJlYWxseSBhCitwcm9ibGVtLCBleGNlcHQgZm9yIHBlb3BsZSB3aXRoIGEgbGFyZ2UgbnVtYmVyIG9mIG9mZnNldHMgaW4gbWFwIGVudHJpZXMuCitUaGlzIG1lY2hhbmlzbSBpcyB1c2VkIGZvciB0aGUgd2VsbCBrbm93biAiaG9zdHMiIG1hcCBhbmQgd2UgaGF2ZSBzZWVuCitjYXNlcyAoaW4gMi40KSB3aGVyZSB0aGUgYXZhaWxhYmxlIG51bWJlciBvZiBtb3VudHMgYXJlIGV4aGF1c3RlZCBvcgord2hlcmUgdGhlIG51bWJlciBvZiBwcml2aWxlZ2VkIHBvcnRzIGF2YWlsYWJsZSBpcyBleGhhdXN0ZWQuCisKK0luIHZlcnNpb24gNSB3ZSBtb3VudCBvbmx5IGFzIHdlIGdvIGRvd24gdGhlIHRyZWUgb2Ygb2Zmc2V0cyBhbmQKK3NpbWlsYXJseSBmb3IgZXhwaXJpbmcgdGhlbSB3aGljaCByZXNvbHZlcyB0aGUgYWJvdmUgcHJvYmxlbS4gVGhlcmUgaXMKK3NvbWV3aGF0IG1vcmUgZGV0YWlsIHRvIHRoZSBpbXBsZW1lbnRhdGlvbiBidXQgaXQgaXNuJ3QgbmVlZGVkIGZvciB0aGUKK3Nha2Ugb2YgdGhlIHByb2JsZW0gZXhwbGFuYXRpb24uIFRoZSBvbmUgaW1wb3J0YW50IGRldGFpbCBpcyB0aGF0IHRoZXNlCitvZmZzZXRzIGFyZSBpbXBsZW1lbnRlZCB1c2luZyB0aGUgc2FtZSBtZWNoYW5pc20gYXMgdGhlIGRpcmVjdCBtb3VudHMKK2Fib3ZlIGFuZCBzbyB0aGUgbW91bnQgcG9pbnRzIGNhbiBiZSBjb3ZlcmVkIGJ5IGEgbW91bnQuCisKK1RoZSBjdXJyZW50IGF1dG9mcyBpbXBsZW1lbnRhdGlvbiB1c2VzIGFuIGlvY3RsIGZpbGUgZGVzY3JpcHRvciBvcGVuZWQKK29uIHRoZSBtb3VudCBwb2ludCBmb3IgY29udHJvbCBvcGVyYXRpb25zLiBUaGUgcmVmZXJlbmNlcyBoZWxkIGJ5IHRoZQorZGVzY3JpcHRvciBhcmUgYWNjb3VudGVkIGZvciBpbiBjaGVja3MgbWFkZSB0byBkZXRlcm1pbmUgaWYgYSBtb3VudCBpcworaW4gdXNlIGFuZCBpcyBhbHNvIHVzZWQgdG8gYWNjZXNzIGF1dG9mcyBmaWxlIHN5c3RlbSBpbmZvcm1hdGlvbiBoZWxkCitpbiB0aGUgbW91bnQgc3VwZXIgYmxvY2suIFNvIHRoZSB1c2Ugb2YgYSBmaWxlIGhhbmRsZSBuZWVkcyB0byBiZQorcmV0YWluZWQuCisKKworVGhlIFNvbHV0aW9uCis9PT09PT09PT09PT0KKworVG8gYmUgYWJsZSB0byByZXN0YXJ0IGF1dG9mcyBsZWF2aW5nIGV4aXN0aW5nIGRpcmVjdCwgaW5kaXJlY3QgYW5kCitvZmZzZXQgbW91bnRzIGluIHBsYWNlIHdlIG5lZWQgdG8gYmUgYWJsZSB0byBvYnRhaW4gYSBmaWxlIGhhbmRsZQorZm9yIHRoZXNlIHBvdGVudGlhbGx5IGNvdmVyZWQgYXV0b2ZzIG1vdW50IHBvaW50cy4gUmF0aGVyIHRoYW4ganVzdAoraW1wbGVtZW50IGFuIGlzb2xhdGVkIG9wZXJhdGlvbiBpdCB3YXMgZGVjaWRlZCB0byByZS1pbXBsZW1lbnQgdGhlCitleGlzdGluZyBpb2N0bCBpbnRlcmZhY2UgYW5kIGFkZCBuZXcgb3BlcmF0aW9ucyB0byBwcm92aWRlIHRoaXMKK2Z1bmN0aW9uYWxpdHkuCisKK0luIGFkZGl0aW9uLCB0byBiZSBhYmxlIHRvIHJlY29uc3RydWN0IGEgbW91bnQgdHJlZSB0aGF0IGhhcyBidXN5IG1vdW50cywKK3RoZSB1aWQgYW5kIGdpZCBvZiB0aGUgbGFzdCB1c2VyIHRoYXQgdHJpZ2dlcmVkIHRoZSBtb3VudCBuZWVkcyB0byBiZQorYXZhaWxhYmxlIGJlY2F1c2UgdGhlc2UgY2FuIGJlIHVzZWQgYXMgbWFjcm8gc3Vic3RpdHV0aW9uIHZhcmlhYmxlcyBpbgorYXV0b2ZzIG1hcHMuIFRoZXkgYXJlIHJlY29yZGVkIGF0IG1vdW50IHJlcXVlc3QgdGltZSBhbmQgYW4gb3BlcmF0aW9uCitoYXMgYmVlbiBhZGRlZCB0byByZXRyaWV2ZSB0aGVtLgorCitTaW5jZSB3ZSdyZSByZS1pbXBsZW1lbnRpbmcgdGhlIGNvbnRyb2wgaW50ZXJmYWNlLCBhIGNvdXBsZSBvZiBvdGhlcgorcHJvYmxlbXMgd2l0aCB0aGUgZXhpc3RpbmcgaW50ZXJmYWNlIGhhdmUgYmVlbiBhZGRyZXNzZWQuIEZpcnN0LCB3aGVuCithIG1vdW50IG9yIGV4cGlyZSBvcGVyYXRpb24gY29tcGxldGVzIGEgc3RhdHVzIGlzIHJldHVybmVkIHRvIHRoZQora2VybmVsIGJ5IGVpdGhlciBhICJzZW5kIHJlYWR5IiBvciBhICJzZW5kIGZhaWwiIG9wZXJhdGlvbi4gVGhlCisic2VuZCBmYWlsIiBvcGVyYXRpb24gb2YgdGhlIGlvY3RsIGludGVyZmFjZSBjb3VsZCBvbmx5IGV2ZXIgc2VuZAorRU5PRU5UIHNvIHRoZSByZS1pbXBsZW1lbnRhdGlvbiBhbGxvd3MgdXNlciBzcGFjZSB0byBzZW5kIGFuIGFjdHVhbAorc3RhdHVzLiBBbm90aGVyIGV4cGVuc2l2ZSBvcGVyYXRpb24gaW4gdXNlciBzcGFjZSwgZm9yIHRob3NlIHVzaW5nCit2ZXJ5IGxhcmdlIG1hcHMsIGlzIGRpc2NvdmVyaW5nIGlmIGEgbW91bnQgaXMgcHJlc2VudC4gVXN1YWxseSB0aGlzCitpbnZvbHZlcyBzY2FubmluZyAvcHJvYy9tb3VudHMgYW5kIHNpbmNlIGl0IG5lZWRzIHRvIGJlIGRvbmUgcXVpdGUKK29mdGVuIGl0IGNhbiBpbnRyb2R1Y2Ugc2lnbmlmaWNhbnQgb3ZlcmhlYWQgd2hlbiB0aGVyZSBhcmUgbWFueSBlbnRyaWVzCitpbiB0aGUgbW91bnQgdGFibGUuIEFuIG9wZXJhdGlvbiB0byBsb29rdXAgdGhlIG1vdW50IHN0YXR1cyBvZiBhIG1vdW50Citwb2ludCBkZW50cnkgKGNvdmVyZWQgb3Igbm90KSBoYXMgYWxzbyBiZWVuIGFkZGVkLgorCitDdXJyZW50IGtlcm5lbCBkZXZlbG9wbWVudCBwb2xpY3kgcmVjb21tZW5kcyBhdm9pZGluZyB0aGUgdXNlIG9mIHRoZQoraW9jdGwgbWVjaGFuaXNtIGluIGZhdm9yIG9mIHN5c3RlbXMgc3VjaCBhcyBOZXRsaW5rLiBBbiBpbXBsZW1lbnRhdGlvbgordXNpbmcgdGhpcyBzeXN0ZW0gd2FzIGF0dGVtcHRlZCB0byBldmFsdWF0ZSBpdHMgc3VpdGFiaWxpdHkgYW5kIGl0IHdhcworZm91bmQgdG8gYmUgaW5hZGVxdWF0ZSwgaW4gdGhpcyBjYXNlLiBUaGUgR2VuZXJpYyBOZXRsaW5rIHN5c3RlbSB3YXMKK3VzZWQgZm9yIHRoaXMgYXMgcmF3IE5ldGxpbmsgd291bGQgbGVhZCB0byBhIHNpZ25pZmljYW50IGluY3JlYXNlIGluCitjb21wbGV4aXR5LiBUaGVyZSdzIG5vIHF1ZXN0aW9uIHRoYXQgdGhlIEdlbmVyaWMgTmV0bGluayBzeXN0ZW0gaXMgYW4KK2VsZWdhbnQgc29sdXRpb24gZm9yIGNvbW1vbiBjYXNlIGlvY3RsIGZ1bmN0aW9ucyBidXQgaXQncyBub3QgYSBjb21wbGV0ZQorcmVwbGFjZW1lbnQgcHJvYmFibHkgYmVjYXVzZSBpdCdzIHByaW1hcnkgcHVycG9zZSBpbiBsaWZlIGlzIHRvIGJlIGEKK21lc3NhZ2UgYnVzIGltcGxlbWVudGF0aW9uIHJhdGhlciB0aGFuIHNwZWNpZmljYWxseSBhbiBpb2N0bCByZXBsYWNlbWVudC4KK1doaWxlIGl0IHdvdWxkIGJlIHBvc3NpYmxlIHRvIHdvcmsgYXJvdW5kIHRoaXMgdGhlcmUgaXMgb25lIGNvbmNlcm4KK3RoYXQgbGVhZCB0byB0aGUgZGVjaXNpb24gdG8gbm90IHVzZSBpdC4gVGhpcyBpcyB0aGF0IHRoZSBhdXRvZnMKK2V4cGlyZSBpbiB0aGUgZGFlbW9uIGhhcyBiZWNvbWUgZmFyIHRvIGNvbXBsZXggYmVjYXVzZSB1bW91bnQKK2NhbmRpZGF0ZXMgYXJlIGVudW1lcmF0ZWQsIGFsbW9zdCBmb3Igbm8gb3RoZXIgcmVhc29uIHRoYW4gdG8gImNvdW50IgordGhlIG51bWJlciBvZiB0aW1lcyB0byBjYWxsIHRoZSBleHBpcmUgaW9jdGwuIFRoaXMgaW52b2x2ZXMgc2Nhbm5pbmcKK3RoZSBtb3VudCB0YWJsZSB3aGljaCBoYXMgcHJvdmVkIHRvIGJlIGEgYmlnIG92ZXJoZWFkIGZvciB1c2VycyB3aXRoCitsYXJnZSBtYXBzLiBUaGUgYmVzdCB3YXkgdG8gaW1wcm92ZSB0aGlzIGlzIHRyeSBhbmQgZ2V0IGJhY2sgdG8gdGhlCit3YXkgdGhlIGV4cGlyZSB3YXMgZG9uZSBsb25nIGFnby4gVGhhdCBpcywgd2hlbiBhbiBleHBpcmUgcmVxdWVzdCBpcworaXNzdWVkIGZvciBhIG1vdW50IChmaWxlIGhhbmRsZSkgd2Ugc2hvdWxkIGNvbnRpbnVhbGx5IGNhbGwgYmFjayB0bwordGhlIGRhZW1vbiB1bnRpbCB3ZSBjYW4ndCB1bW91bnQgYW55IG1vcmUgbW91bnRzLCB0aGVuIHJldHVybiB0aGUKK2FwcHJvcHJpYXRlIHN0YXR1cyB0byB0aGUgZGFlbW9uLiBBdCB0aGUgbW9tZW50IHdlIGp1c3QgZXhwaXJlIG9uZQorbW91bnQgYXQgYSB0aW1lLiBBIEdlbmVyaWMgTmV0bGluayBpbXBsZW1lbnRhdGlvbiB3b3VsZCBleGNsdWRlIHRoaXMKK3Bvc3NpYmlsaXR5IGZvciBmdXR1cmUgZGV2ZWxvcG1lbnQgZHVlIHRvIHRoZSByZXF1aXJlbWVudHMgb2YgdGhlCittZXNzYWdlIGJ1cyBhcmNoaXRlY3R1cmUuCisKKworYXV0b2ZzNCBNaXNjZWxsYW5lb3VzIERldmljZSBtb3VudCBjb250cm9sIGludGVyZmFjZQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitUaGUgY29udHJvbCBpbnRlcmZhY2UgaXMgb3BlbmluZyBhIGRldmljZSBub2RlLCB0eXBpY2FsbHkgL2Rldi9hdXRvZnMuCisKK0FsbCB0aGUgaW9jdGxzIHVzZSBhIGNvbW1vbiBzdHJ1Y3R1cmUgdG8gcGFzcyB0aGUgbmVlZGVkIHBhcmFtZXRlcgoraW5mb3JtYXRpb24gYW5kIHJldHVybiBvcGVyYXRpb24gcmVzdWx0czoKKworc3RydWN0IGF1dG9mc19kZXZfaW9jdGwgeworCV9fdTMyIHZlcl9tYWpvcjsKKwlfX3UzMiB2ZXJfbWlub3I7CisJX191MzIgc2l6ZTsgICAgICAgICAgICAgLyogdG90YWwgc2l6ZSBvZiBkYXRhIHBhc3NlZCBpbgorCQkJCSAqIGluY2x1ZGluZyB0aGlzIHN0cnVjdCAqLworCV9fczMyIGlvY3RsZmQ7ICAgICAgICAgIC8qIGF1dG9tb3VudCBjb21tYW5kIGZkICovCisKKwlfX3UzMiBhcmcxOyAgICAgICAgICAgICAvKiBDb21tYW5kIHBhcmFtZXRlcnMgKi8KKwlfX3UzMiBhcmcyOworCisJY2hhciBwYXRoWzBdOworfTsKKworVGhlIGlvY3RsZmQgZmllbGQgaXMgYSBtb3VudCBwb2ludCBmaWxlIGRlc2NyaXB0b3Igb2YgYW4gYXV0b2ZzIG1vdW50Citwb2ludC4gSXQgaXMgcmV0dXJuZWQgYnkgdGhlIG9wZW4gY2FsbCBhbmQgaXMgdXNlZCBieSBhbGwgY2FsbHMgZXhjZXB0Cit0aGUgY2hlY2sgZm9yIHdoZXRoZXIgYSBnaXZlbiBwYXRoIGlzIGEgbW91bnQgcG9pbnQsIHdoZXJlIGl0IG1heQorb3B0aW9uYWxseSBiZSB1c2VkIHRvIGNoZWNrIGEgc3BlY2lmaWMgbW91bnQgY29ycmVzcG9uZGluZyB0byBhIGdpdmVuCittb3VudCBwb2ludCBmaWxlIGRlc2NyaXB0b3IsIGFuZCB3aGVuIHJlcXVlc3RpbmcgdGhlIHVpZCBhbmQgZ2lkIG9mIHRoZQorbGFzdCBzdWNjZXNzZnVsIG1vdW50IG9uIGEgZGlyZWN0b3J5IHdpdGhpbiB0aGUgYXV0b2ZzIGZpbGUgc3lzdGVtLgorCitUaGUgZmllbGRzIGFyZzEgYW5kIGFyZzIgYXJlIHVzZWQgdG8gY29tbXVuaWNhdGUgcGFyYW1ldGVycyBhbmQgcmVzdWx0cyBvZgorY2FsbHMgbWFkZSBhcyBkZXNjcmliZWQgYmVsb3cuCisKK1RoZSBwYXRoIGZpZWxkIGlzIHVzZWQgdG8gcGFzcyBhIHBhdGggd2hlcmUgaXQgaXMgbmVlZGVkIGFuZCB0aGUgc2l6ZSBmaWVsZAoraXMgdXNlZCBhY2NvdW50IGZvciB0aGUgaW5jcmVhc2VkIHN0cnVjdHVyZSBsZW5ndGggd2hlbiB0cmFuc2xhdGluZyB0aGUKK3N0cnVjdHVyZSBzZW50IGZyb20gdXNlciBzcGFjZS4KKworVGhpcyBzdHJ1Y3R1cmUgY2FuIGJlIGluaXRpYWxpemVkIGJlZm9yZSBzZXR0aW5nIHNwZWNpZmljIGZpZWxkcyBieSB1c2luZwordGhlIHZvaWQgZnVuY3Rpb24gY2FsbCBpbml0X2F1dG9mc19kZXZfaW9jdGwoc3RydWN0IGF1dG9mc19kZXZfaW9jdGwgKikuCisKK0FsbCBvZiB0aGUgaW9jdGxzIHBlcmZvcm0gYSBjb3B5IG9mIHRoaXMgc3RydWN0dXJlIGZyb20gdXNlciBzcGFjZSB0bwora2VybmVsIHNwYWNlIGFuZCByZXR1cm4gLUVJTlZBTCBpZiB0aGUgc2l6ZSBwYXJhbWV0ZXIgaXMgc21hbGxlciB0aGFuCit0aGUgc3RydWN0dXJlIHNpemUgaXRzZWxmLCAtRU5PTUVNIGlmIHRoZSBrZXJuZWwgbWVtb3J5IGFsbG9jYXRpb24gZmFpbHMKK29yIC1FRkFVTFQgaWYgdGhlIGNvcHkgaXRzZWxmIGZhaWxzLiBPdGhlciBjaGVja3MgaW5jbHVkZSBhIHZlcnNpb24gY2hlY2sKK29mIHRoZSBjb21waWxlZCBpbiB1c2VyIHNwYWNlIHZlcnNpb24gYWdhaW5zdCB0aGUgbW9kdWxlIHZlcnNpb24gYW5kIGEKK21pc21hdGNoIHJlc3VsdHMgaW4gYSAtRUlOVkFMIHJldHVybi4gSWYgdGhlIHNpemUgZmllbGQgaXMgZ3JlYXRlciB0aGFuCit0aGUgc3RydWN0dXJlIHNpemUgdGhlbiBhIHBhdGggaXMgYXNzdW1lZCB0byBiZSBwcmVzZW50IGFuZCBpcyBjaGVja2VkIHRvCitlbnN1cmUgaXQgYmVnaW5zIHdpdGggYSAiLyIgYW5kIGlzIE5VTEwgdGVybWluYXRlZCwgb3RoZXJ3aXNlIC1FSU5WQUwgaXMKK3JldHVybmVkLiBGb2xsb3dpbmcgdGhlc2UgY2hlY2tzLCBmb3IgYWxsIGlvY3RsIGNvbW1hbmRzIGV4Y2VwdAorQVVUT0ZTX0RFVl9JT0NUTF9WRVJTSU9OX0NNRCwgQVVUT0ZTX0RFVl9JT0NUTF9PUEVOTU9VTlRfQ01EIGFuZAorQVVUT0ZTX0RFVl9JT0NUTF9DTE9TRU1PVU5UX0NNRCB0aGUgaW9jdGxmZCBpcyB2YWxpZGF0ZWQgYW5kIGlmIGl0IGlzCitub3QgYSB2YWxpZCBkZXNjcmlwdG9yIG9yIGRvZXNuJ3QgY29ycmVzcG9uZCB0byBhbiBhdXRvZnMgbW91bnQgcG9pbnQKK2FuIGVycm9yIG9mIC1FQkFERiwgLUVOT1RUWSBvciAtRUlOVkFMIChub3QgYW4gYXV0b2ZzIGRlc2NyaXB0b3IpIGlzCityZXR1cm5lZC4KKworCitUaGUgaW9jdGxzCis9PT09PT09PT09CisKK0FuIGV4YW1wbGUgb2YgYW4gaW1wbGVtZW50YXRpb24gd2hpY2ggdXNlcyB0aGlzIGludGVyZmFjZSBjYW4gYmUgc2VlbgoraW4gYXV0b2ZzIHZlcnNpb24gNS4wLjQgYW5kIGxhdGVyIGluIGZpbGUgbGliL2Rldi1pb2N0bC1saWIuYyBvZiB0aGUKK2Rpc3RyaWJ1dGlvbiB0YXIgYXZhaWxhYmxlIGZvciBkb3dubG9hZCBmcm9tIGtlcm5lbC5vcmcgaW4gZGlyZWN0b3J5CisvcHViL2xpbnV4L2RhZW1vbnMvYXV0b2ZzL3Y1LgorCitUaGUgZGV2aWNlIG5vZGUgaW9jdGwgb3BlcmF0aW9ucyBpbXBsZW1lbnRlZCBieSB0aGlzIGludGVyZmFjZSBhcmU6CisKKworQVVUT0ZTX0RFVl9JT0NUTF9WRVJTSU9OCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworR2V0IHRoZSBtYWpvciBhbmQgbWlub3IgdmVyc2lvbiBvZiB0aGUgYXV0b2ZzNCBkZXZpY2UgaW9jdGwga2VybmVsIG1vZHVsZQoraW1wbGVtZW50YXRpb24uIEl0IHJlcXVpcmVzIGFuIGluaXRpYWxpemVkIHN0cnVjdCBhdXRvZnNfZGV2X2lvY3RsIGFzIGFuCitpbnB1dCBwYXJhbWV0ZXIgYW5kIHNldHMgdGhlIHZlcnNpb24gaW5mb3JtYXRpb24gaW4gdGhlIHBhc3NlZCBpbiBzdHJ1Y3R1cmUuCitJdCByZXR1cm5zIDAgb24gc3VjY2VzcyBvciB0aGUgZXJyb3IgLUVJTlZBTCBpZiBhIHZlcnNpb24gbWlzbWF0Y2ggaXMKK2RldGVjdGVkLgorCisKK0FVVE9GU19ERVZfSU9DVExfUFJPVE9WRVJfQ01EIGFuZCBBVVRPRlNfREVWX0lPQ1RMX1BST1RPU1VCVkVSX0NNRAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0dldCB0aGUgbWFqb3IgYW5kIG1pbm9yIHZlcnNpb24gb2YgdGhlIGF1dG9mczQgcHJvdG9jb2wgdmVyc2lvbiB1bmRlcnN0b29kCitieSBsb2FkZWQgbW9kdWxlLiBUaGlzIGNhbGwgcmVxdWlyZXMgYW4gaW5pdGlhbGl6ZWQgc3RydWN0IGF1dG9mc19kZXZfaW9jdGwKK3dpdGggdGhlIGlvY3RsZmQgZmllbGQgc2V0IHRvIGEgdmFsaWQgYXV0b2ZzIG1vdW50IHBvaW50IGRlc2NyaXB0b3IKK2FuZCBzZXRzIHRoZSByZXF1ZXN0ZWQgdmVyc2lvbiBudW1iZXIgaW4gc3RydWN0dXJlIGZpZWxkIGFyZzEuIFRoZXNlCitjb21tYW5kcyByZXR1cm4gMCBvbiBzdWNjZXNzIG9yIG9uZSBvZiB0aGUgbmVnYXRpdmUgZXJyb3IgY29kZXMgaWYKK3ZhbGlkYXRpb24gZmFpbHMuCisKKworQVVUT0ZTX0RFVl9JT0NUTF9PUEVOTU9VTlQgYW5kIEFVVE9GU19ERVZfSU9DVExfQ0xPU0VNT1VOVAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitPYnRhaW4gYW5kIHJlbGVhc2UgYSBmaWxlIGRlc2NyaXB0b3IgZm9yIGFuIGF1dG9mcyBtYW5hZ2VkIG1vdW50IHBvaW50CitwYXRoLiBUaGUgb3BlbiBjYWxsIHJlcXVpcmVzIGFuIGluaXRpYWxpemVkIHN0cnVjdCBhdXRvZnNfZGV2X2lvY3RsIHdpdGgKK3RoZSB0aGUgcGF0aCBmaWVsZCBzZXQgYW5kIHRoZSBzaXplIGZpZWxkIGFkanVzdGVkIGFwcHJvcHJpYXRlbHkgYXMgd2VsbAorYXMgdGhlIGFyZzEgZmllbGQgc2V0IHRvIHRoZSBkZXZpY2UgbnVtYmVyIG9mIHRoZSBhdXRvZnMgbW91bnQuIFRoZQorZGV2aWNlIG51bWJlciBjYW4gYmUgb2J0YWluZWQgZnJvbSB0aGUgbW91bnQgb3B0aW9ucyBzaG93biBpbgorL3Byb2MvbW91bnRzLiBUaGUgY2xvc2UgY2FsbCByZXF1aXJlcyBhbiBpbml0aWFsaXplZCBzdHJ1Y3QKK2F1dG9mc19kZXZfaW9jdCB3aXRoIHRoZSBpb2N0bGZkIGZpZWxkIHNldCB0byB0aGUgZGVzY3JpcHRvciBvYnRhaW5lZAorZnJvbSB0aGUgb3BlbiBjYWxsLiBUaGUgcmVsZWFzZSBvZiB0aGUgZmlsZSBkZXNjcmlwdG9yIGNhbiBhbHNvIGJlIGRvbmUKK3dpdGggY2xvc2UoMikgc28gYW55IG9wZW4gZGVzY3JpcHRvcnMgd2lsbCBhbHNvIGJlIGNsb3NlZCBhdCBwcm9jZXNzIGV4aXQuCitUaGUgY2xvc2UgY2FsbCBpcyBpbmNsdWRlZCBpbiB0aGUgaW1wbGVtZW50ZWQgb3BlcmF0aW9ucyBsYXJnZWx5IGZvcgorY29tcGxldGVuZXNzIGFuZCB0byBwcm92aWRlIGZvciBhIGNvbnNpc3RlbnQgdXNlciBzcGFjZSBpbXBsZW1lbnRhdGlvbi4KKworCitBVVRPRlNfREVWX0lPQ1RMX1JFQURZX0NNRCBhbmQgQVVUT0ZTX0RFVl9JT0NUTF9GQUlMX0NNRAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworUmV0dXJuIG1vdW50IGFuZCBleHBpcmUgcmVzdWx0IHN0YXR1cyBmcm9tIHVzZXIgc3BhY2UgdG8gdGhlIGtlcm5lbC4KK0JvdGggb2YgdGhlc2UgY2FsbHMgcmVxdWlyZSBhbiBpbml0aWFsaXplZCBzdHJ1Y3QgYXV0b2ZzX2Rldl9pb2N0bAord2l0aCB0aGUgaW9jdGxmZCBmaWVsZCBzZXQgdG8gdGhlIGRlc2NyaXB0b3Igb2J0YWluZWQgZnJvbSB0aGUgb3BlbgorY2FsbCBhbmQgdGhlIGFyZzEgZmllbGQgc2V0IHRvIHRoZSB3YWl0IHF1ZXVlIHRva2VuIG51bWJlciwgcmVjZWl2ZWQKK2J5IHVzZXIgc3BhY2UgaW4gdGhlIGZvcmVnb2luZyBtb3VudCBvciBleHBpcmUgcmVxdWVzdC4gVGhlIGFyZzIgZmllbGQKK2lzIHNldCB0byB0aGUgc3RhdHVzIHRvIGJlIHJldHVybmVkLiBGb3IgdGhlIHJlYWR5IGNhbGwgdGhpcyBpcyBhbHdheXMKKzAgYW5kIGZvciB0aGUgZmFpbCBjYWxsIGl0IGlzIHNldCB0byB0aGUgZXJybm8gb2YgdGhlIG9wZXJhdGlvbi4KKworCitBVVRPRlNfREVWX0lPQ1RMX1NFVFBJUEVGRF9DTUQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitTZXQgdGhlIHBpcGUgZmlsZSBkZXNjcmlwdG9yIHVzZWQgZm9yIGtlcm5lbCBjb21tdW5pY2F0aW9uIHRvIHRoZSBkYWVtb24uCitOb3JtYWxseSB0aGlzIGlzIHNldCBhdCBtb3VudCB0aW1lIHVzaW5nIGFuIG9wdGlvbiBidXQgd2hlbiByZWNvbm5lY3RpbmcKK3RvIGEgZXhpc3RpbmcgbW91bnQgd2UgbmVlZCB0byB1c2UgdGhpcyB0byB0ZWxsIHRoZSBhdXRvZnMgbW91bnQgYWJvdXQKK3RoZSBuZXcga2VybmVsIHBpcGUgZGVzY3JpcHRvci4gSW4gb3JkZXIgdG8gcHJvdGVjdCBtb3VudHMgYWdhaW5zdAoraW5jb3JyZWN0bHkgc2V0dGluZyB0aGUgcGlwZSBkZXNjcmlwdG9yIHdlIGFsc28gcmVxdWlyZSB0aGF0IHRoZSBhdXRvZnMKK21vdW50IGJlIGNhdGF0b25pYyAoc2VlIG5leHQgY2FsbCkuCisKK1RoZSBjYWxsIHJlcXVpcmVzIGFuIGluaXRpYWxpemVkIHN0cnVjdCBhdXRvZnNfZGV2X2lvY3RsIHdpdGggdGhlCitpb2N0bGZkIGZpZWxkIHNldCB0byB0aGUgZGVzY3JpcHRvciBvYnRhaW5lZCBmcm9tIHRoZSBvcGVuIGNhbGwgYW5kCit0aGUgYXJnMSBmaWVsZCBzZXQgdG8gZGVzY3JpcHRvciBvZiB0aGUgcGlwZS4gT24gc3VjY2VzcyB0aGUgY2FsbAorYWxzbyBzZXRzIHRoZSBwcm9jZXNzIGdyb3VwIGlkIHVzZWQgdG8gaWRlbnRpZnkgdGhlIGNvbnRyb2xsaW5nIHByb2Nlc3MKKyhlZy4gdGhlIG93bmluZyBhdXRvbW91bnQoOCkgZGFlbW9uKSB0byB0aGUgcHJvY2VzcyBncm91cCBvZiB0aGUgY2FsbGVyLgorCisKK0FVVE9GU19ERVZfSU9DVExfQ0FUQVRPTklDX0NNRAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK01ha2UgdGhlIGF1dG9mcyBtb3VudCBwb2ludCBjYXRhdG9uaWMuIFRoZSBhdXRvZnMgbW91bnQgd2lsbCBubyBsb25nZXIKK2lzc3VlIG1vdW50IHJlcXVlc3RzLCB0aGUga2VybmVsIGNvbW11bmljYXRpb24gcGlwZSBkZXNjcmlwdG9yIGlzIHJlbGVhc2VkCithbmQgYW55IHJlbWFpbmluZyB3YWl0cyBpbiB0aGUgcXVldWUgcmVsZWFzZWQuCisKK1RoZSBjYWxsIHJlcXVpcmVzIGFuIGluaXRpYWxpemVkIHN0cnVjdCBhdXRvZnNfZGV2X2lvY3RsIHdpdGggdGhlCitpb2N0bGZkIGZpZWxkIHNldCB0byB0aGUgZGVzY3JpcHRvciBvYnRhaW5lZCBmcm9tIHRoZSBvcGVuIGNhbGwuCisKKworQVVUT0ZTX0RFVl9JT0NUTF9USU1FT1VUX0NNRAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitTZXQgdGhlIGV4cGlyZSB0aW1lb3V0IGZvciBtb3VudHMgd2l0aGluZyBhbiBhdXRvZnMgbW91bnQgcG9pbnQuCisKK1RoZSBjYWxsIHJlcXVpcmVzIGFuIGluaXRpYWxpemVkIHN0cnVjdCBhdXRvZnNfZGV2X2lvY3RsIHdpdGggdGhlCitpb2N0bGZkIGZpZWxkIHNldCB0byB0aGUgZGVzY3JpcHRvciBvYnRhaW5lZCBmcm9tIHRoZSBvcGVuIGNhbGwuCisKKworQVVUT0ZTX0RFVl9JT0NUTF9SRVFVRVNURVJfQ01ECistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworUmV0dXJuIHRoZSB1aWQgYW5kIGdpZCBvZiB0aGUgbGFzdCBwcm9jZXNzIHRvIHN1Y2Nlc3NmdWxseSB0cmlnZ2VyIGEgdGhlCittb3VudCBvbiB0aGUgZ2l2ZW4gcGF0aCBkZW50cnkuCisKK1RoZSBjYWxsIHJlcXVpcmVzIGFuIGluaXRpYWxpemVkIHN0cnVjdCBhdXRvZnNfZGV2X2lvY3RsIHdpdGggdGhlIHBhdGgKK2ZpZWxkIHNldCB0byB0aGUgbW91bnQgcG9pbnQgaW4gcXVlc3Rpb24gYW5kIHRoZSBzaXplIGZpZWxkIGFkanVzdGVkCithcHByb3ByaWF0ZWx5IGFzIHdlbGwgYXMgdGhlIGFyZzEgZmllbGQgc2V0IHRvIHRoZSBkZXZpY2UgbnVtYmVyIG9mIHRoZQorY29udGFpbmluZyBhdXRvZnMgbW91bnQuIFVwb24gcmV0dXJuIHRoZSBzdHJ1Y3QgZmllbGQgYXJnMSBjb250YWlucyB0aGUKK3VpZCBhbmQgYXJnMiB0aGUgZ2lkLgorCitXaGVuIHJlY29uc3RydWN0aW5nIGFuIGF1dG9mcyBtb3VudCB0cmVlIHdpdGggYWN0aXZlIG1vdW50cyB3ZSBuZWVkIHRvCityZS1jb25uZWN0IHRvIG1vdW50cyB0aGF0IG1heSBoYXZlIHVzZWQgdGhlIG9yaWdpbmFsIHByb2Nlc3MgdWlkIGFuZAorZ2lkIChvciBzdHJpbmcgdmFyaWF0aW9ucyBvZiB0aGVtKSBmb3IgbW91bnQgbG9va3VwcyB3aXRoaW4gdGhlIG1hcCBlbnRyeS4KK1RoaXMgY2FsbCBwcm92aWRlcyB0aGUgYWJpbGl0eSB0byBvYnRhaW4gdGhpcyB1aWQgYW5kIGdpZCBzbyB0aGV5IG1heSBiZQordXNlZCBieSB1c2VyIHNwYWNlIGZvciB0aGUgbW91bnQgbWFwIGxvb2t1cHMuCisKKworQVVUT0ZTX0RFVl9JT0NUTF9FWFBJUkVfQ01ECistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworSXNzdWUgYW4gZXhwaXJlIHJlcXVlc3QgdG8gdGhlIGtlcm5lbCBmb3IgYW4gYXV0b2ZzIG1vdW50LiBUeXBpY2FsbHkKK3RoaXMgaW9jdGwgaXMgY2FsbGVkIHVudGlsIG5vIGZ1cnRoZXIgZXhwaXJlIGNhbmRpZGF0ZXMgYXJlIGZvdW5kLgorCitUaGUgY2FsbCByZXF1aXJlcyBhbiBpbml0aWFsaXplZCBzdHJ1Y3QgYXV0b2ZzX2Rldl9pb2N0bCB3aXRoIHRoZQoraW9jdGxmZCBmaWVsZCBzZXQgdG8gdGhlIGRlc2NyaXB0b3Igb2J0YWluZWQgZnJvbSB0aGUgb3BlbiBjYWxsLiBJbgorYWRkaXRpb24gYW4gaW1tZWRpYXRlIGV4cGlyZSwgaW5kZXBlbmRlbnQgb2YgdGhlIG1vdW50IHRpbWVvdXQsIGNhbiBiZQorcmVxdWVzdGVkIGJ5IHNldHRpbmcgdGhlIGFyZzEgZmllbGQgdG8gMS4gSWYgbm8gZXhwaXJlIGNhbmRpZGF0ZXMgY2FuCitiZSBmb3VuZCB0aGUgaW9jdGwgcmV0dXJucyAtMSB3aXRoIGVycm5vIHNldCB0byBFQUdBSU4uCisKK1RoaXMgY2FsbCBjYXVzZXMgdGhlIGtlcm5lbCBtb2R1bGUgdG8gY2hlY2sgdGhlIG1vdW50IGNvcnJlc3BvbmRpbmcKK3RvIHRoZSBnaXZlbiBpb2N0bGZkIGZvciBtb3VudHMgdGhhdCBjYW4gYmUgZXhwaXJlZCwgaXNzdWVzIGFuIGV4cGlyZQorcmVxdWVzdCBiYWNrIHRvIHRoZSBkYWVtb24gYW5kIHdhaXRzIGZvciBjb21wbGV0aW9uLgorCitBVVRPRlNfREVWX0lPQ1RMX0FTS1VNT1VOVF9DTUQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitDaGVja3MgaWYgYW4gYXV0b2ZzIG1vdW50IHBvaW50IGlzIGluIHVzZS4KKworVGhlIGNhbGwgcmVxdWlyZXMgYW4gaW5pdGlhbGl6ZWQgc3RydWN0IGF1dG9mc19kZXZfaW9jdGwgd2l0aCB0aGUKK2lvY3RsZmQgZmllbGQgc2V0IHRvIHRoZSBkZXNjcmlwdG9yIG9idGFpbmVkIGZyb20gdGhlIG9wZW4gY2FsbCBhbmQKK2l0IHJldHVybnMgdGhlIHJlc3VsdCBpbiB0aGUgYXJnMSBmaWVsZCwgMSBmb3IgYnVzeSBhbmQgMCBvdGhlcndpc2UuCisKKworQVVUT0ZTX0RFVl9JT0NUTF9JU01PVU5UUE9JTlRfQ01ECistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQ2hlY2sgaWYgdGhlIGdpdmVuIHBhdGggaXMgYSBtb3VudHBvaW50LgorCitUaGUgY2FsbCByZXF1aXJlcyBhbiBpbml0aWFsaXplZCBzdHJ1Y3QgYXV0b2ZzX2Rldl9pb2N0bC4gVGhlcmUgYXJlIHR3bworcG9zc2libGUgdmFyaWF0aW9ucy4gQm90aCB1c2UgdGhlIHBhdGggZmllbGQgc2V0IHRvIHRoZSBwYXRoIG9mIHRoZSBtb3VudAorcG9pbnQgdG8gY2hlY2sgYW5kIHRoZSBzaXplIGZpZWxkIGFkanVzdGVkIGFwcHJvcHJpYXRlbHkuIE9uZSB1c2VzIHRoZQoraW9jdGxmZCBmaWVsZCB0byBpZGVudGlmeSBhIHNwZWNpZmljIG1vdW50IHBvaW50IHRvIGNoZWNrIHdoaWxlIHRoZSBvdGhlcgordmFyaWF0aW9uIHVzZXMgdGhlIHBhdGggYW5kIG9wdGlvbmFseSBhcmcxIHNldCB0byBhbiBhdXRvZnMgbW91bnQgdHlwZS4KK1RoZSBjYWxsIHJldHVybnMgMSBpZiB0aGlzIGlzIGEgbW91bnQgcG9pbnQgYW5kIHNldHMgYXJnMSB0byB0aGUgZGV2aWNlCitudW1iZXIgb2YgdGhlIG1vdW50IGFuZCBmaWVsZCBhcmcyIHRvIHRoZSByZWxldmFudCBzdXBlciBibG9jayBtYWdpYworbnVtYmVyIChkZXNjcmliZWQgYmVsb3cpIG9yIDAgaWYgaXQgaXNuJ3QgYSBtb3VudHBvaW50LiBJbiBib3RoIGNhc2VzCit0aGUgdGhlIGRldmljZSBudW1iZXIgKGFzIHJldHVybmVkIGJ5IG5ld19lbmNvZGVfZGV2KCkpIGlzIHJldHVybmVkCitpbiBmaWVsZCBhcmcxLgorCitJZiBzdXBwbGllZCB3aXRoIGEgZmlsZSBkZXNjcmlwdG9yIHdlJ3JlIGxvb2tpbmcgZm9yIGEgc3BlY2lmaWMgbW91bnQsCitub3QgbmVjZXNzYXJpbHkgYXQgdGhlIHRvcCBvZiB0aGUgbW91bnRlZCBzdGFjay4gSW4gdGhpcyBjYXNlIHRoZSBwYXRoCit0aGUgZGVzY3JpcHRvciBjb3JyZXNwb25kcyB0byBpcyBjb25zaWRlcmVkIGEgbW91bnRwb2ludCBpZiBpdCBpcyBpdHNlbGYKK2EgbW91bnRwb2ludCBvciBjb250YWlucyBhIG1vdW50LCBzdWNoIGFzIGEgbXVsdGktbW91bnQgd2l0aG91dCBhIHJvb3QKK21vdW50LiBJbiB0aGlzIGNhc2Ugd2UgcmV0dXJuIDEgaWYgdGhlIGRlc2NyaXB0b3IgY29ycmVzcG9uZHMgdG8gYSBtb3VudAorcG9pbnQgYW5kIGFuZCBhbHNvIHJldHVybnMgdGhlIHN1cGVyIG1hZ2ljIG9mIHRoZSBjb3ZlcmluZyBtb3VudCBpZiB0aGVyZQoraXMgb25lIG9yIDAgaWYgaXQgaXNuJ3QgYSBtb3VudHBvaW50LgorCitJZiBhIHBhdGggaXMgc3VwcGxpZWQgKGFuZCB0aGUgaW9jdGxmZCBmaWVsZCBpcyBzZXQgdG8gLTEpIHRoZW4gdGhlIHBhdGgKK2lzIGxvb2tlZCB1cCBhbmQgaXMgY2hlY2tlZCB0byBzZWUgaWYgaXQgaXMgdGhlIHJvb3Qgb2YgYSBtb3VudC4gSWYgYQordHlwZSBpcyBhbHNvIGdpdmVuIHdlIGFyZSBsb29raW5nIGZvciBhIHBhcnRpY3VsYXIgYXV0b2ZzIG1vdW50IGFuZCBpZgorYSBtYXRjaCBpc24ndCBmb3VuZCBhIGZhaWwgaXMgcmV0dXJuZWQuIElmIHRoZSB0aGUgbG9jYXRlZCBwYXRoIGlzIHRoZQorcm9vdCBvZiBhIG1vdW50IDEgaXMgcmV0dXJuZWQgYWxvbmcgd2l0aCB0aGUgc3VwZXIgbWFnaWMgb2YgdGhlIG1vdW50CitvciAwIG90aGVyd2lzZS4KKwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9leHQzLnR4dCBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvZXh0My50eHQKaW5kZXggYjQ1ZjNjMWIuLjlkZDJhM2JiIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2V4dDMudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvZXh0My50eHQKQEAgLTk2LDYgKzk2LDExIEBACiBlcnJvcnM9Y29udGludWUJCUtlZXAgZ29pbmcgb24gYSBmaWxlc3lzdGVtIGVycm9yLgogZXJyb3JzPXBhbmljCQlQYW5pYyBhbmQgaGFsdCB0aGUgbWFjaGluZSBpZiBhbiBlcnJvciBvY2N1cnMuCiAKK2RhdGFfZXJyPWlnbm9yZSgqKQlKdXN0IHByaW50IGFuIGVycm9yIG1lc3NhZ2UgaWYgYW4gZXJyb3Igb2NjdXJzCisJCQlpbiBhIGZpbGUgZGF0YSBidWZmZXIgaW4gb3JkZXJlZCBtb2RlLgorZGF0YV9lcnI9YWJvcnQJCUFib3J0IHRoZSBqb3VybmFsIGlmIGFuIGVycm9yIG9jY3VycyBpbiBhIGZpbGUKKwkJCWRhdGEgYnVmZmVyIGluIG9yZGVyZWQgbW9kZS4KKwogZ3JwaWQJCQlHaXZlIG9iamVjdHMgdGhlIHNhbWUgZ3JvdXAgSUQgYXMgdGhlaXIgY3JlYXRvci4KIGJzZGdyb3VwcwogCkBAIC0xOTMsNiArMTk4LDUgQEAKIHByb2dyYW1zOiAJaHR0cDovL2UyZnNwcm9ncy5zb3VyY2Vmb3JnZS5uZXQvCiAJCWh0dHA6Ly9leHQycmVzaXplLnNvdXJjZWZvcmdlLm5ldAogCi11c2VmdWwgbGlua3M6CWh0dHA6Ly93d3cuemlwLmNvbS5hdS9+YWtwbS9saW51eC9leHQzL2V4dDMtdXNhZ2UuaHRtbAotCQlodHRwOi8vd3d3LTEwNi5pYm0uY29tL2RldmVsb3BlcndvcmtzL2xpbnV4L2xpYnJhcnkvbC1mczcvCit1c2VmdWwgbGlua3M6CWh0dHA6Ly93d3ctMTA2LmlibS5jb20vZGV2ZWxvcGVyd29ya3MvbGludXgvbGlicmFyeS9sLWZzNy8KIAkJaHR0cDovL3d3dy0xMDYuaWJtLmNvbS9kZXZlbG9wZXJ3b3Jrcy9saW51eC9saWJyYXJ5L2wtZnM4LwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9leHQ0LnR4dCBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvZXh0NC50eHQKaW5kZXggZWIxNTRlZi4uMTc0ZWFmZiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9leHQ0LnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2V4dDQudHh0CkBAIC0yLDE5ICsyLDI0IEBACiBFeHQ0IEZpbGVzeXN0ZW0KID09PT09PT09PT09PT09PQogCi1UaGlzIGlzIGEgZGV2ZWxvcG1lbnQgdmVyc2lvbiBvZiB0aGUgZXh0NCBmaWxlc3lzdGVtLCBhbiBhZHZhbmNlZCBsZXZlbAotb2YgdGhlIGV4dDMgZmlsZXN5c3RlbSB3aGljaCBpbmNvcnBvcmF0ZXMgc2NhbGFiaWxpdHkgYW5kIHJlbGlhYmlsaXR5Ci1lbmhhbmNlbWVudHMgZm9yIHN1cHBvcnRpbmcgbGFyZ2UgZmlsZXN5c3RlbXMgKDY0IGJpdCkgaW4ga2VlcGluZyB3aXRoCi1pbmNyZWFzaW5nIGRpc2sgY2FwYWNpdGllcyBhbmQgc3RhdGUtb2YtdGhlLWFydCBmZWF0dXJlIHJlcXVpcmVtZW50cy4KK0V4dDQgaXMgYW4gYW4gYWR2YW5jZWQgbGV2ZWwgb2YgdGhlIGV4dDMgZmlsZXN5c3RlbSB3aGljaCBpbmNvcnBvcmF0ZXMKK3NjYWxhYmlsaXR5IGFuZCByZWxpYWJpbGl0eSBlbmhhbmNlbWVudHMgZm9yIHN1cHBvcnRpbmcgbGFyZ2UgZmlsZXN5c3RlbXMKKyg2NCBiaXQpIGluIGtlZXBpbmcgd2l0aCBpbmNyZWFzaW5nIGRpc2sgY2FwYWNpdGllcyBhbmQgc3RhdGUtb2YtdGhlLWFydAorZmVhdHVyZSByZXF1aXJlbWVudHMuCiAKLU1haWxpbmcgbGlzdDogbGludXgtZXh0NEB2Z2VyLmtlcm5lbC5vcmcKK01haWxpbmcgbGlzdDoJbGludXgtZXh0NEB2Z2VyLmtlcm5lbC5vcmcKK1dlYiBzaXRlOglodHRwOi8vZXh0NC53aWtpLmtlcm5lbC5vcmcKIAogCiAxLiBRdWljayB1c2FnZSBpbnN0cnVjdGlvbnM6CiA9PT09PT09PT09PT09PT09PT09PT09PT09PT0KIAorTm90ZTogTW9yZSBleHRlbnNpdmUgaW5mb3JtYXRpb24gZm9yIGdldHRpbmcgc3RhcnRlZCB3aXRoIGV4dDQgY2FuIGJlCisgICAgICBmb3VuZCBhdCB0aGUgZXh0NCB3aWtpIHNpdGUgYXQgdGhlIFVSTDoKKyAgICAgIGh0dHA6Ly9leHQ0Lndpa2kua2VybmVsLm9yZy9pbmRleC5waHAvRXh0NF9Ib3d0bworCiAgIC0gQ29tcGlsZSBhbmQgaW5zdGFsbCB0aGUgbGF0ZXN0IHZlcnNpb24gb2YgZTJmc3Byb2dzIChhcyBvZiB0aGlzCi0gICAgd3JpdGluZyB2ZXJzaW9uIDEuNDEpIGZyb206CisgICAgd3JpdGluZyB2ZXJzaW9uIDEuNDEuMykgZnJvbToKIAogICAgIGh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdC9zaG93ZmlsZXMucGhwP2dyb3VwX2lkPTI0MDYKIAkKQEAgLTM2LDExICs0MSw5IEBACiAKICAgICAJIyBta2UyZnMgLXQgZXh0NCAvZGV2L2hkYTEKIAotICAgIE9yIGNvbmZpZ3VyZSBhbiBleGlzdGluZyBleHQzIGZpbGVzeXN0ZW0gdG8gc3VwcG9ydCBleHRlbnRzIGFuZCBzZXQKLSAgICB0aGUgdGVzdF9mcyBmbGFnIHRvIGluZGljYXRlIHRoYXQgaXQncyBvayBmb3IgYW4gaW4tZGV2ZWxvcG1lbnQKLSAgICBmaWxlc3lzdGVtIHRvIHRvdWNoIHRoaXMgZmlsZXN5c3RlbToKKyAgICBPciB0byBjb25maWd1cmUgYW4gZXhpc3RpbmcgZXh0MyBmaWxlc3lzdGVtIHRvIHN1cHBvcnQgZXh0ZW50czogCiAKLQkjIHR1bmUyZnMgLU8gZXh0ZW50cyAtRSB0ZXN0X2ZzIC9kZXYvaGRhMQorCSMgdHVuZTJmcyAtTyBleHRlbnRzIC9kZXYvaGRhMQogCiAgICAgSWYgdGhlIGZpbGVzeXN0ZW0gd2FzIGNyZWF0ZWQgd2l0aCAxMjggYnl0ZSBpbm9kZXMsIGl0IGNhbiBiZQogICAgIGNvbnZlcnRlZCB0byB1c2UgMjU2IGJ5dGUgZm9yIGdyZWF0ZXIgZWZmaWNpZW5jeSB2aWE6CkBAIC0xMDQsOCArMTA3LDggQEAKIFRoZSBiaWcgcGVyZm9ybWFuY2Ugd2luIHdpbGwgY29tZSB3aXRoIG1iYWxsb2MsIGRlbGFsbG9jIGFuZCBmbGV4X2JnCiBncm91cGluZyBvZiBiaXRtYXBzIGFuZCBpbm9kZSB0YWJsZXMuICBTb21lIHRlc3QgcmVzdWx0cyBhdmFpbGFibGUgaGVyZToKIAotIC0gaHR0cDovL3d3dy5idWxsb3BlbnNvdXJjZS5vcmcvZXh0NC8yMDA4MDUzMC9mZnNiLXdyaXRlLTIuNi4yNi1yYzIuaHRtbAotIC0gaHR0cDovL3d3dy5idWxsb3BlbnNvdXJjZS5vcmcvZXh0NC8yMDA4MDUzMC9mZnNiLXJlYWR3cml0ZS0yLjYuMjYtcmMyLmh0bWwKKyAtIGh0dHA6Ly93d3cuYnVsbG9wZW5zb3VyY2Uub3JnL2V4dDQvMjAwODA4MTgtZmZzYi9mZnNiLXdyaXRlLTIuNi4yNy1yYzEuaHRtbAorIC0gaHR0cDovL3d3dy5idWxsb3BlbnNvdXJjZS5vcmcvZXh0NC8yMDA4MDgxOC1mZnNiL2Zmc2ItcmVhZHdyaXRlLTIuNi4yNy1yYzEuaHRtbAogCiAzLiBPcHRpb25zCiA9PT09PT09PT09CkBAIC0yMTQsOSArMjE3LDYgQEAKIGJzZGRmCQkoKikJTWFrZSAnZGYnIGFjdCBsaWtlIEJTRC4KIG1pbml4ZGYJCQlNYWtlICdkZicgYWN0IGxpa2UgTWluaXguCiAKLWNoZWNrPW5vbmUJCURvbid0IGRvIGV4dHJhIGNoZWNraW5nIG9mIGJpdG1hcHMgb24gbW91bnQuCi1ub2NoZWNrCi0KIGRlYnVnCQkJRXh0cmEgZGVidWdnaW5nIGluZm9ybWF0aW9uIGlzIHNlbnQgdG8gc3lzbG9nLgogCiBlcnJvcnM9cmVtb3VudC1ybygqKQlSZW1vdW50IHRoZSBmaWxlc3lzdGVtIHJlYWQtb25seSBvbiBhbiBlcnJvci4KQEAgLTI1Myw4ICsyNTMsNiBAQAogCQkJIm5vYmgiIG9wdGlvbiB0cmllcyB0byBhdm9pZCBhc3NvY2lhdGluZyBidWZmZXIKIAkJCWhlYWRzIChzdXBwb3J0ZWQgb25seSBmb3IgIndyaXRlYmFjayIgbW9kZSkuCiAKLW1iYWxsb2MJCSgqKQlVc2UgdGhlIG11bHRpcGxlIGJsb2NrIGFsbG9jYXRvciBmb3IgYmxvY2sgYWxsb2NhdGlvbgotbm9tYmFsbG9jCQlkaXNhYmxlZCBtdWx0aXBsZSBibG9jayBhbGxvY2F0b3IgZm9yIGJsb2NrIGFsbG9jYXRpb24uCiBzdHJpcGU9bgkJTnVtYmVyIG9mIGZpbGVzeXN0ZW0gYmxvY2tzIHRoYXQgbWJhbGxvYyB3aWxsIHRyeQogCQkJdG8gdXNlIGZvciBhbGxvY2F0aW9uIHNpemUgYW5kIGFsaWdubWVudC4gRm9yIFJBSUQ1LzYKIAkJCXN5c3RlbXMgdGhpcyBzaG91bGQgYmUgdGhlIG51bWJlciBvZiBkYXRhCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL25mc3Jvb3QudHh0IGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9uZnNyb290LnR4dAppbmRleCAzMWIzMjkxLi42OGJhZGRmIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL25mc3Jvb3QudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvbmZzcm9vdC50eHQKQEAgLTE2OSw3ICsxNjksNyBAQAogMy4xKSAgQm9vdGluZyBmcm9tIGEgZmxvcHB5IHVzaW5nIHN5c2xpbnV4CiAKIAlXaGVuIGJ1aWxkaW5nIGtlcm5lbHMsIGFuIGVhc3kgd2F5IHRvIGNyZWF0ZSBhIGJvb3QgZmxvcHB5IHRoYXQgdXNlcwotCXN5c2xpbnV4IGlzIHRvIHVzZSB0aGUgemRpc2sgb3IgYnpkaXNrIG1ha2UgdGFyZ2V0cyB3aGljaCB1c2UKKwlzeXNsaW51eCBpcyB0byB1c2UgdGhlIHpkaXNrIG9yIGJ6ZGlzayBtYWtlIHRhcmdldHMgd2hpY2ggdXNlIHppbWFnZQogICAgICAgCWFuZCBiemltYWdlIGltYWdlcyByZXNwZWN0aXZlbHkuIEJvdGggdGFyZ2V0cyBhY2NlcHQgdGhlCiAgICAgIAlGREFSR1MgcGFyYW1ldGVyIHdoaWNoIGNhbiBiZSB1c2VkIHRvIHNldCB0aGUga2VybmVsIGNvbW1hbmQgbGluZS4KIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9vY2ZzMi50eHQgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL29jZnMyLnR4dAppbmRleCBjMzE4YThiLi40MzQwY2M4IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL29jZnMyLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL29jZnMyLnR4dApAQCAtNzYsMyArNzYsOSBAQAogCQkJbGFyZ2UsIHRoZSBmcyB3aWxsIHNpbGVudGx5IHJldmVydCBpdCB0byB0aGUgZGVmYXVsdC4KIAkJCUxvY2FsYWxsb2MgaXMgbm90IGVuYWJsZWQgZm9yIGxvY2FsIG1vdW50cy4KIGxvY2FsZmxvY2tzCQlUaGlzIGRpc2FibGVzIGNsdXN0ZXIgYXdhcmUgZmxvY2suCitpbm9kZTY0CQkJSW5kaWNhdGVzIHRoYXQgT2NmczIgaXMgYWxsb3dlZCB0byBjcmVhdGUgaW5vZGVzIGF0CisJCQlhbnkgbG9jYXRpb24gaW4gdGhlIGZpbGVzeXN0ZW0sIGluY2x1ZGluZyB0aG9zZSB3aGljaAorCQkJd2lsbCByZXN1bHQgaW4gaW5vZGUgbnVtYmVycyBvY2N1cHlpbmcgbW9yZSB0aGFuIDMyCisJCQliaXRzIG9mIHNpZ25pZmljYW5jZS4KK3VzZXJfeGF0dHIJKCopCUVuYWJsZXMgRXh0ZW5kZWQgVXNlciBBdHRyaWJ1dGVzLgorbm91c2VyX3hhdHRyCQlEaXNhYmxlcyBFeHRlbmRlZCBVc2VyIEF0dHJpYnV0ZXMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3Byb2MudHh0IGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9wcm9jLnR4dAppbmRleCBkODMxZDI0Li5iY2NlYjk5IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3Byb2MudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcHJvYy50eHQKQEAgLTEzMjEsNiArMTMyMSwxOCBAQAogTk1JIHN3aXRjaCB0aGF0IG1vc3QgSUEzMiBzZXJ2ZXJzIGhhdmUgZmlyZXMgdW5rbm93biBOTUkgdXAsIGZvciBleGFtcGxlLgogSWYgYSBzeXN0ZW0gaGFuZ3MgdXAsIHRyeSBwcmVzc2luZyB0aGUgTk1JIHN3aXRjaC4KIAorcGFuaWNfb25fdW5yZWNvdmVyZWRfbm1pCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIGRlZmF1bHQgTGludXggYmVoYXZpb3VyIG9uIGFuIE5NSSBvZiBlaXRoZXIgbWVtb3J5IG9yIHVua25vd24gaXMgdG8gY29udGludWUKK29wZXJhdGlvbi4gRm9yIG1hbnkgZW52aXJvbm1lbnRzIHN1Y2ggYXMgc2NpZW50aWZpYyBjb21wdXRpbmcgaXQgaXMgcHJlZmVyYWJsZQordGhhdCB0aGUgYm94IGlzIHRha2VuIG91dCBhbmQgdGhlIGVycm9yIGRlYWx0IHdpdGggdGhhbiBhbiB1bmNvcnJlY3RlZAorcGFyaXR5L0VDQyBlcnJvciBnZXQgcHJvcG9nYXRlZC4KKworQSBzbWFsbCBudW1iZXIgb2Ygc3lzdGVtcyBkbyBnZW5lcmF0ZSBOTUkncyBmb3IgYml6YXJyZSByYW5kb20gcmVhc29ucyBzdWNoIGFzCitwb3dlciBtYW5hZ2VtZW50IHNvIHRoZSBkZWZhdWx0IGlzIG9mZi4gVGhhdCBzeXNjdGwgd29ya3MgbGlrZSB0aGUgZXhpc3RpbmcKK3BhbmljIGNvbnRyb2xzIGFscmVhZHkgaW4gdGhhdCBkaXJlY3RvcnkuCisKIG5taV93YXRjaGRvZwogLS0tLS0tLS0tLS0tCiAKQEAgLTEzMzEsMTMgKzEzNDMsNiBAQAogQmVjYXVzZSB0aGUgTk1JIHdhdGNoZG9nIHNoYXJlcyByZWdpc3RlcnMgd2l0aCBvcHJvZmlsZSwgYnkgZGlzYWJsaW5nIHRoZSBOTUkKIHdhdGNoZG9nLCBvcHJvZmlsZSBtYXkgaGF2ZSBtb3JlIHJlZ2lzdGVycyB0byB1dGlsaXplLgogCi1tYXBzX3Byb3RlY3QKLS0tLS0tLS0tLS0tLQotCi1FbmFibGVzL0Rpc2FibGVzIHRoZSBwcm90ZWN0aW9uIG9mIHRoZSBwZXItcHJvY2VzcyBwcm9jIGVudHJpZXMgIm1hcHMiIGFuZAotInNtYXBzIi4gIFdoZW4gZW5hYmxlZCwgdGhlIGNvbnRlbnRzIG9mIHRoZXNlIGZpbGVzIGFyZSB2aXNpYmxlIG9ubHkgdG8KLXJlYWRlcnMgdGhhdCBhcmUgYWxsb3dlZCB0byBwdHJhY2UoKSB0aGUgZ2l2ZW4gcHJvY2Vzcy4KLQogbXNnbW5pCiAtLS0tLS0KIApAQCAtMTM3OSwxNSArMTM4NCwxOCBAQAogZGlydHlfYmFja2dyb3VuZF9yYXRpbwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1Db250YWlucywgYXMgYSBwZXJjZW50YWdlIG9mIHRvdGFsIHN5c3RlbSBtZW1vcnksIHRoZSBudW1iZXIgb2YgcGFnZXMgYXQgd2hpY2gKLXRoZSBwZGZsdXNoIGJhY2tncm91bmQgd3JpdGViYWNrIGRhZW1vbiB3aWxsIHN0YXJ0IHdyaXRpbmcgb3V0IGRpcnR5IGRhdGEuCitDb250YWlucywgYXMgYSBwZXJjZW50YWdlIG9mIHRoZSBkaXJ0eWFibGUgc3lzdGVtIG1lbW9yeSAoZnJlZSBwYWdlcyArIG1hcHBlZAorcGFnZXMgKyBmaWxlIGNhY2hlLCBub3QgaW5jbHVkaW5nIGxvY2tlZCBwYWdlcyBhbmQgSHVnZVBhZ2VzKSwgdGhlIG51bWJlciBvZgorcGFnZXMgYXQgd2hpY2ggdGhlIHBkZmx1c2ggYmFja2dyb3VuZCB3cml0ZWJhY2sgZGFlbW9uIHdpbGwgc3RhcnQgd3JpdGluZyBvdXQKK2RpcnR5IGRhdGEuCiAKIGRpcnR5X3JhdGlvCiAtLS0tLS0tLS0tLS0tLS0tLQogCi1Db250YWlucywgYXMgYSBwZXJjZW50YWdlIG9mIHRvdGFsIHN5c3RlbSBtZW1vcnksIHRoZSBudW1iZXIgb2YgcGFnZXMgYXQgd2hpY2gKLWEgcHJvY2VzcyB3aGljaCBpcyBnZW5lcmF0aW5nIGRpc2sgd3JpdGVzIHdpbGwgaXRzZWxmIHN0YXJ0IHdyaXRpbmcgb3V0IGRpcnR5Ci1kYXRhLgorQ29udGFpbnMsIGFzIGEgcGVyY2VudGFnZSBvZiB0aGUgZGlydHlhYmxlIHN5c3RlbSBtZW1vcnkgKGZyZWUgcGFnZXMgKyBtYXBwZWQKK3BhZ2VzICsgZmlsZSBjYWNoZSwgbm90IGluY2x1ZGluZyBsb2NrZWQgcGFnZXMgYW5kIEh1Z2VQYWdlcyksIHRoZSBudW1iZXIgb2YKK3BhZ2VzIGF0IHdoaWNoIGEgcHJvY2VzcyB3aGljaCBpcyBnZW5lcmF0aW5nIGRpc2sgd3JpdGVzIHdpbGwgaXRzZWxmIHN0YXJ0Cit3cml0aW5nIG91dCBkaXJ0eSBkYXRhLgogCiBkaXJ0eV93cml0ZWJhY2tfY2VudGlzZWNzCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0yNDA3LDI0ICsyNDE1LDI5IEBACiBvZiBtZW1vcnkgdHlwZXMuIElmIGEgYml0IG9mIHRoZSBiaXRtYXNrIGlzIHNldCwgbWVtb3J5IHNlZ21lbnRzIG9mIHRoZQogY29ycmVzcG9uZGluZyBtZW1vcnkgdHlwZSBhcmUgZHVtcGVkLCBvdGhlcndpc2UgdGhleSBhcmUgbm90IGR1bXBlZC4KIAotVGhlIGZvbGxvd2luZyA0IG1lbW9yeSB0eXBlcyBhcmUgc3VwcG9ydGVkOgorVGhlIGZvbGxvd2luZyA3IG1lbW9yeSB0eXBlcyBhcmUgc3VwcG9ydGVkOgogICAtIChiaXQgMCkgYW5vbnltb3VzIHByaXZhdGUgbWVtb3J5CiAgIC0gKGJpdCAxKSBhbm9ueW1vdXMgc2hhcmVkIG1lbW9yeQogICAtIChiaXQgMikgZmlsZS1iYWNrZWQgcHJpdmF0ZSBtZW1vcnkKICAgLSAoYml0IDMpIGZpbGUtYmFja2VkIHNoYXJlZCBtZW1vcnkKICAgLSAoYml0IDQpIEVMRiBoZWFkZXIgcGFnZXMgaW4gZmlsZS1iYWNrZWQgcHJpdmF0ZSBtZW1vcnkgYXJlYXMgKGl0IGlzCiAgICAgICAgICAgICBlZmZlY3RpdmUgb25seSBpZiB0aGUgYml0IDIgaXMgY2xlYXJlZCkKKyAgLSAoYml0IDUpIGh1Z2V0bGIgcHJpdmF0ZSBtZW1vcnkKKyAgLSAoYml0IDYpIGh1Z2V0bGIgc2hhcmVkIG1lbW9yeQogCiAgIE5vdGUgdGhhdCBNTUlPIHBhZ2VzIHN1Y2ggYXMgZnJhbWUgYnVmZmVyIGFyZSBuZXZlciBkdW1wZWQgYW5kIHZEU08gcGFnZXMKICAgYXJlIGFsd2F5cyBkdW1wZWQgcmVnYXJkbGVzcyBvZiB0aGUgYml0bWFzayBzdGF0dXMuCiAKLURlZmF1bHQgdmFsdWUgb2YgY29yZWR1bXBfZmlsdGVyIGlzIDB4MzsgdGhpcyBtZWFucyBhbGwgYW5vbnltb3VzIG1lbW9yeQotc2VnbWVudHMgYXJlIGR1bXBlZC4KKyAgTm90ZSBiaXQgMC00IGRvZXNuJ3QgZWZmZWN0IGFueSBodWdldGxiIG1lbW9yeS4gaHVnZXRsYiBtZW1vcnkgYXJlIG9ubHkKKyAgZWZmZWN0ZWQgYnkgYml0IDUtNi4KKworRGVmYXVsdCB2YWx1ZSBvZiBjb3JlZHVtcF9maWx0ZXIgaXMgMHgyMzsgdGhpcyBtZWFucyBhbGwgYW5vbnltb3VzIG1lbW9yeQorc2VnbWVudHMgYW5kIGh1Z2V0bGIgcHJpdmF0ZSBtZW1vcnkgYXJlIGR1bXBlZC4KIAogSWYgeW91IGRvbid0IHdhbnQgdG8gZHVtcCBhbGwgc2hhcmVkIG1lbW9yeSBzZWdtZW50cyBhdHRhY2hlZCB0byBwaWQgMTIzNCwKLXdyaXRlIDEgdG8gdGhlIHByb2Nlc3MncyBwcm9jIGZpbGUuCit3cml0ZSAweDIxIHRvIHRoZSBwcm9jZXNzJ3MgcHJvYyBmaWxlLgogCi0gICQgZWNobyAweDEgPiAvcHJvYy8xMjM0L2NvcmVkdW1wX2ZpbHRlcgorICAkIGVjaG8gMHgyMSA+IC9wcm9jLzEyMzQvY29yZWR1bXBfZmlsdGVyCiAKIFdoZW4gYSBuZXcgcHJvY2VzcyBpcyBjcmVhdGVkLCB0aGUgcHJvY2VzcyBpbmhlcml0cyB0aGUgYml0bWFzayBzdGF0dXMgZnJvbSBpdHMKIHBhcmVudC4gSXQgaXMgdXNlZnVsIHRvIHNldCB1cCBjb3JlZHVtcF9maWx0ZXIgYmVmb3JlIHRoZSBwcm9ncmFtIHJ1bnMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3JhbWZzLXJvb3Rmcy1pbml0cmFtZnMudHh0IGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9yYW1mcy1yb290ZnMtaW5pdHJhbWZzLnR4dAppbmRleCA3YmUyMzJiLi42MmZlOWIxIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3JhbWZzLXJvb3Rmcy1pbml0cmFtZnMudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcmFtZnMtcm9vdGZzLWluaXRyYW1mcy50eHQKQEAgLTI2Myw3ICsyNjMsNyBAQAogICAgIHNsZWVwKDk5OTk5OTk5OSk7CiAgIH0KICAgRU9GCi0gIGdjYyAtc3RhdGljIGhlbGxvMi5jIC1vIGluaXQKKyAgZ2NjIC1zdGF0aWMgaGVsbG8uYyAtbyBpbml0CiAgIGVjaG8gaW5pdCB8IGNwaW8gLW8gLUggbmV3YyB8IGd6aXAgPiB0ZXN0LmNwaW8uZ3oKICAgIyBUZXN0aW5nIGV4dGVybmFsIGluaXRyYW1mcyB1c2luZyB0aGUgaW5pdHJkIGxvYWRpbmcgbWVjaGFuaXNtLgogICBxZW11IC1rZXJuZWwgL2Jvb3Qvdm1saW51eiAtaW5pdHJkIHRlc3QuY3Bpby5neiAvZGV2L3plcm8KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvdWJpZnMudHh0IGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy91Ymlmcy50eHQKaW5kZXggNmEwZDcwYS4uZGQ4NGVhMyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy91Ymlmcy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy91Ymlmcy50eHQKQEAgLTg2LDYgKzg2LDE1IEBACiBmYXN0X3VubW91bnQJCWRvIG5vdCBjb21taXQgb24gdW5tb3VudDsgdGhpcyBvcHRpb24gbWFrZXMKIAkJCXVubW91bnQgZmFzdGVyLCBidXQgdGhlIG5leHQgbW91bnQgc2xvd2VyCiAJCQliZWNhdXNlIG9mIHRoZSBuZWVkIHRvIHJlcGxheSB0aGUgam91cm5hbC4KK2J1bGtfcmVhZAkJcmVhZCBtb3JlIGluIG9uZSBnbyB0byB0YWtlIGFkdmFudGFnZSBvZiBmbGFzaAorCQkJbWVkaWEgdGhhdCByZWFkIGZhc3RlciBzZXF1ZW50aWFsbHkKK25vX2J1bGtfcmVhZCAoKikJZG8gbm90IGJ1bGstcmVhZAorbm9fY2hrX2RhdGFfY3JjCQlza2lwIGNoZWNraW5nIG9mIENSQ3Mgb24gZGF0YSBub2RlcyBpbiBvcmRlciB0bworCQkJaW1wcm92ZSByZWFkIHBlcmZvcm1hbmNlLiBVc2UgdGhpcyBvcHRpb24gb25seQorCQkJaWYgdGhlIGZsYXNoIG1lZGlhIGlzIGhpZ2hseSByZWxpYWJsZS4gVGhlIGVmZmVjdAorCQkJb2YgdGhpcyBvcHRpb24gaXMgdGhhdCBjb3JydXB0aW9uIG9mIHRoZSBjb250ZW50cworCQkJb2YgYSBmaWxlIGNhbiBnbyB1bm5vdGljZWQuCitjaGtfZGF0YV9jcmMgKCopCWRvIG5vdCBza2lwIGNoZWNraW5nIENSQ3Mgb24gZGF0YSBub2RlcwogCiAKIFF1aWNrIHVzYWdlIGluc3RydWN0aW9ucwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9ncGlvLnR4dCBiL0RvY3VtZW50YXRpb24vZ3Bpby50eHQKaW5kZXggMTgwMjJlMi4uYjFiOTg4NyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9ncGlvLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dwaW8udHh0CkBAIC0yNDAsNiArMjQwLDEwIEBACiBuZWVkZWQgdG8gbWFuYWdlIGEgc2lnbmFsIHRoYXQncyBpbiBhY3RpdmUgdXNlLiAgVGhhdCBpcywgcmVxdWVzdGluZyBhCiBHUElPIGNhbiBzZXJ2ZSBhcyBhIGtpbmQgb2YgbG9jay4KIAorU29tZSBwbGF0Zm9ybXMgbWF5IGFsc28gdXNlIGtub3dsZWRnZSBhYm91dCB3aGF0IEdQSU9zIGFyZSBhY3RpdmUgZm9yCitwb3dlciBtYW5hZ2VtZW50LCBzdWNoIGFzIGJ5IHBvd2VyaW5nIGRvd24gdW51c2VkIGNoaXAgc2VjdG9ycyBhbmQsIG1vcmUKK2Vhc2lseSwgZ2F0aW5nIG9mZiB1bnVzZWQgY2xvY2tzLgorCiBUaGVzZSB0d28gY2FsbHMgYXJlIG9wdGlvbmFsIGJlY2F1c2Ugbm90IG5vdCBhbGwgY3VycmVudCBMaW51eCBwbGF0Zm9ybXMKIG9mZmVyIHN1Y2ggZnVuY3Rpb25hbGl0eSBpbiB0aGVpciBHUElPIHN1cHBvcnQ7IGEgdmFsaWQgaW1wbGVtZW50YXRpb24KIGNvdWxkIHJldHVybiBzdWNjZXNzIGZvciBhbGwgZ3Bpb19yZXF1ZXN0KCkgY2FsbHMuICBVbmxpa2UgdGhlIG90aGVyIGNhbGxzLApAQCAtMjY0LDcgKzI2OCw3IEBACiAJLyogbWFwIEdQSU8gbnVtYmVycyB0byBJUlEgbnVtYmVycyAqLwogCWludCBncGlvX3RvX2lycSh1bnNpZ25lZCBncGlvKTsKIAotCS8qIG1hcCBJUlEgbnVtYmVycyB0byBHUElPIG51bWJlcnMgKi8KKwkvKiBtYXAgSVJRIG51bWJlcnMgdG8gR1BJTyBudW1iZXJzIChhdm9pZCB1c2luZyB0aGlzKSAqLwogCWludCBpcnFfdG9fZ3Bpbyh1bnNpZ25lZCBpcnEpOwogCiBUaG9zZSByZXR1cm4gZWl0aGVyIHRoZSBjb3JyZXNwb25kaW5nIG51bWJlciBpbiB0aGUgb3RoZXIgbmFtZXNwYWNlLCBvcgpAQCAtMjg0LDcgKzI4OCw4IEBACiAKIE5vbi1lcnJvciB2YWx1ZXMgcmV0dXJuZWQgZnJvbSBpcnFfdG9fZ3BpbygpIHdvdWxkIG1vc3QgY29tbW9ubHkgYmUgdXNlZAogd2l0aCBncGlvX2dldF92YWx1ZSgpLCBmb3IgZXhhbXBsZSB0byBpbml0aWFsaXplIG9yIHVwZGF0ZSBkcml2ZXIgc3RhdGUKLXdoZW4gdGhlIElSUSBpcyBlZGdlLXRyaWdnZXJlZC4KK3doZW4gdGhlIElSUSBpcyBlZGdlLXRyaWdnZXJlZC4gIE5vdGUgdGhhdCBzb21lIHBsYXRmb3JtcyBkb24ndCBzdXBwb3J0Cit0aGlzIHJldmVyc2UgbWFwcGluZywgc28geW91IHNob3VsZCBhdm9pZCB1c2luZyBpdC4KIAogCiBFbXVsYXRpbmcgT3BlbiBEcmFpbiBTaWduYWxzCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2hwZXQudHh0IGIvRG9jdW1lbnRhdGlvbi9ocGV0LnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmFkNTJkOS4uMDAwMDAwMAotLS0gYS9Eb2N1bWVudGF0aW9uL2hwZXQudHh0CisrKyAvZGV2L251bGwKQEAgLTEsMzAwICswLDAgQEAKLQkJSGlnaCBQcmVjaXNpb24gRXZlbnQgVGltZXIgRHJpdmVyIGZvciBMaW51eAotCi1UaGUgSGlnaCBQcmVjaXNpb24gRXZlbnQgVGltZXIgKEhQRVQpIGhhcmR3YXJlIGlzIHRoZSBmdXR1cmUgcmVwbGFjZW1lbnQKLWZvciB0aGUgODI1NCBhbmQgUmVhbCBUaW1lIENsb2NrIChSVEMpIHBlcmlvZGljIHRpbWVyIGZ1bmN0aW9uYWxpdHkuCi1FYWNoIEhQRVQgY2FuIGhhdmUgdXAgdG8gMzIgdGltZXJzLiAgSXQgaXMgcG9zc2libGUgdG8gY29uZmlndXJlIHRoZQotZmlyc3QgdHdvIHRpbWVycyBhcyBsZWdhY3kgcmVwbGFjZW1lbnRzIGZvciA4MjU0IGFuZCBSVEMgcGVyaW9kaWMgdGltZXJzLgotQSBzcGVjaWZpY2F0aW9uIGRvbmUgYnkgSW50ZWwgYW5kIE1pY3Jvc29mdCBjYW4gYmUgZm91bmQgYXQKLTxodHRwOi8vd3d3LmludGVsLmNvbS90ZWNobm9sb2d5L2FyY2hpdGVjdHVyZS9ocGV0c3BlYy5odG0+LgotCi1UaGUgZHJpdmVyIHN1cHBvcnRzIGRldGVjdGlvbiBvZiBIUEVUIGRyaXZlciBhbGxvY2F0aW9uIGFuZCBpbml0aWFsaXphdGlvbgotb2YgdGhlIEhQRVQgYmVmb3JlIHRoZSBkcml2ZXIgbW9kdWxlX2luaXQgcm91dGluZSBpcyBjYWxsZWQuICBUaGlzIGVuYWJsZXMKLXBsYXRmb3JtIGNvZGUgd2hpY2ggdXNlcyB0aW1lciAwIG9yIDEgYXMgdGhlIG1haW4gdGltZXIgdG8gaW50ZXJjZXB0IEhQRVQKLWluaXRpYWxpemF0aW9uLiAgQW4gZXhhbXBsZSBvZiB0aGlzIGluaXRpYWxpemF0aW9uIGNhbiBiZSBmb3VuZCBpbgotYXJjaC9pMzg2L2tlcm5lbC90aW1lX2hwZXQuYy4KLQotVGhlIGRyaXZlciBwcm92aWRlcyB0d28gQVBJcyB3aGljaCBhcmUgdmVyeSBzaW1pbGFyIHRvIHRoZSBBUEkgZm91bmQgaW4KLXRoZSBydGMuYyBkcml2ZXIuICBUaGVyZSBpcyBhIHVzZXIgc3BhY2UgQVBJIGFuZCBhIGtlcm5lbCBzcGFjZSBBUEkuCi1BbiBleGFtcGxlIHVzZXIgc3BhY2UgcHJvZ3JhbSBpcyBwcm92aWRlZCBiZWxvdy4KLQotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8c3RkbGliLmg+Ci0jaW5jbHVkZSA8dW5pc3RkLmg+Ci0jaW5jbHVkZSA8ZmNudGwuaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlIDxtZW1vcnkuaD4KLSNpbmNsdWRlIDxtYWxsb2MuaD4KLSNpbmNsdWRlIDx0aW1lLmg+Ci0jaW5jbHVkZSA8Y3R5cGUuaD4KLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNpbmNsdWRlIDxzeXMvd2FpdC5oPgotI2luY2x1ZGUgPHNpZ25hbC5oPgotI2luY2x1ZGUgPGZjbnRsLmg+Ci0jaW5jbHVkZSA8ZXJybm8uaD4KLSNpbmNsdWRlIDxzeXMvdGltZS5oPgotI2luY2x1ZGUgPGxpbnV4L2hwZXQuaD4KLQotCi1leHRlcm4gdm9pZCBocGV0X29wZW5fY2xvc2UoaW50LCBjb25zdCBjaGFyICoqKTsKLWV4dGVybiB2b2lkIGhwZXRfaW5mbyhpbnQsIGNvbnN0IGNoYXIgKiopOwotZXh0ZXJuIHZvaWQgaHBldF9wb2xsKGludCwgY29uc3QgY2hhciAqKik7Ci1leHRlcm4gdm9pZCBocGV0X2Zhc3luYyhpbnQsIGNvbnN0IGNoYXIgKiopOwotZXh0ZXJuIHZvaWQgaHBldF9yZWFkKGludCwgY29uc3QgY2hhciAqKik7Ci0KLSNpbmNsdWRlIDxzeXMvcG9sbC5oPgotI2luY2x1ZGUgPHN5cy9pb2N0bC5oPgotI2luY2x1ZGUgPHNpZ25hbC5oPgotCi1zdHJ1Y3QgaHBldF9jb21tYW5kIHsKLQljaGFyCQkqY29tbWFuZDsKLQl2b2lkCQkoKmZ1bmMpKGludCBhcmdjLCBjb25zdCBjaGFyICoqIGFyZ3YpOwotfSBocGV0X2NvbW1hbmRbXSA9IHsKLQl7Ci0JCSJvcGVuLWNsb3NlIiwKLQkJaHBldF9vcGVuX2Nsb3NlCi0JfSwKLQl7Ci0JCSJpbmZvIiwKLQkJaHBldF9pbmZvCi0JfSwKLQl7Ci0JCSJwb2xsIiwKLQkJaHBldF9wb2xsCi0JfSwKLQl7Ci0JCSJmYXN5bmMiLAotCQlocGV0X2Zhc3luYwotCX0sCi19OwotCi1pbnQKLW1haW4oaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiogYXJndikKLXsKLQlpbnQJaTsKLQotCWFyZ2MtLTsKLQlhcmd2Kys7Ci0KLQlpZiAoIWFyZ2MpIHsKLQkJZnByaW50ZihzdGRlcnIsICItaHBldDogcmVxdWlyZXMgY29tbWFuZFxuIik7Ci0JCXJldHVybiAtMTsKLQl9Ci0KLQotCWZvciAoaSA9IDA7IGkgPCAoc2l6ZW9mIChocGV0X2NvbW1hbmQpIC8gc2l6ZW9mIChocGV0X2NvbW1hbmRbMF0pKTsgaSsrKQotCQlpZiAoIXN0cmNtcChhcmd2WzBdLCBocGV0X2NvbW1hbmRbaV0uY29tbWFuZCkpIHsKLQkJCWFyZ2MtLTsKLQkJCWFyZ3YrKzsKLQkJCWZwcmludGYoc3RkZXJyLCAiLWhwZXQ6IGV4ZWN1dGluZyAlc1xuIiwKLQkJCQlocGV0X2NvbW1hbmRbaV0uY29tbWFuZCk7Ci0JCQlocGV0X2NvbW1hbmRbaV0uZnVuYyhhcmdjLCBhcmd2KTsKLQkJCXJldHVybiAwOwotCQl9Ci0KLQlmcHJpbnRmKHN0ZGVyciwgImRvX2hwZXQ6IGNvbW1hbmQgJXMgbm90IGltcGxlbWVudGVkXG4iLCBhcmd2WzBdKTsKLQotCXJldHVybiAtMTsKLX0KLQotdm9pZAotaHBldF9vcGVuX2Nsb3NlKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndikKLXsKLQlpbnQJZmQ7Ci0KLQlpZiAoYXJnYyAhPSAxKSB7Ci0JCWZwcmludGYoc3RkZXJyLCAiaHBldF9vcGVuX2Nsb3NlOiBkZXZpY2UtbmFtZVxuIik7Ci0JCXJldHVybjsKLQl9Ci0KLQlmZCA9IG9wZW4oYXJndlswXSwgT19SRE9OTFkpOwotCWlmIChmZCA8IDApCi0JCWZwcmludGYoc3RkZXJyLCAiaHBldF9vcGVuX2Nsb3NlOiBvcGVuIGZhaWxlZFxuIik7Ci0JZWxzZQotCQljbG9zZShmZCk7Ci0KLQlyZXR1cm47Ci19Ci0KLXZvaWQKLWhwZXRfaW5mbyhpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpCi17Ci19Ci0KLXZvaWQKLWhwZXRfcG9sbChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpCi17Ci0JdW5zaWduZWQgbG9uZwkJZnJlcTsKLQlpbnQJCQlpdGVyYXRpb25zLCBpLCBmZDsKLQlzdHJ1Y3QgcG9sbGZkCQlwZmQ7Ci0Jc3RydWN0IGhwZXRfaW5mbwlpbmZvOwotCXN0cnVjdCB0aW1ldmFsCQlzdHYsIGV0djsKLQlzdHJ1Y3QgdGltZXpvbmUJCXR6OwotCWxvbmcJCQl1c2VjOwotCi0JaWYgKGFyZ2MgIT0gMykgewotCQlmcHJpbnRmKHN0ZGVyciwgImhwZXRfcG9sbDogZGV2aWNlLW5hbWUgZnJlcSBpdGVyYXRpb25zXG4iKTsKLQkJcmV0dXJuOwotCX0KLQotCWZyZXEgPSBhdG9pKGFyZ3ZbMV0pOwotCWl0ZXJhdGlvbnMgPSBhdG9pKGFyZ3ZbMl0pOwotCi0JZmQgPSBvcGVuKGFyZ3ZbMF0sIE9fUkRPTkxZKTsKLQotCWlmIChmZCA8IDApIHsKLQkJZnByaW50ZihzdGRlcnIsICJocGV0X3BvbGw6IG9wZW4gb2YgJXMgZmFpbGVkXG4iLCBhcmd2WzBdKTsKLQkJcmV0dXJuOwotCX0KLQotCWlmIChpb2N0bChmZCwgSFBFVF9JUlFGUkVRLCBmcmVxKSA8IDApIHsKLQkJZnByaW50ZihzdGRlcnIsICJocGV0X3BvbGw6IEhQRVRfSVJRRlJFUSBmYWlsZWRcbiIpOwotCQlnb3RvIG91dDsKLQl9Ci0KLQlpZiAoaW9jdGwoZmQsIEhQRVRfSU5GTywgJmluZm8pIDwgMCkgewotCQlmcHJpbnRmKHN0ZGVyciwgImhwZXRfcG9sbDogZmFpbGVkIHRvIGdldCBpbmZvXG4iKTsKLQkJZ290byBvdXQ7Ci0JfQotCi0JZnByaW50ZihzdGRlcnIsICJocGV0X3BvbGw6IGluZm8uaGlfZmxhZ3MgMHglbHhcbiIsIGluZm8uaGlfZmxhZ3MpOwotCi0JaWYgKGluZm8uaGlfZmxhZ3MgJiYgKGlvY3RsKGZkLCBIUEVUX0VQSSwgMCkgPCAwKSkgewotCQlmcHJpbnRmKHN0ZGVyciwgImhwZXRfcG9sbDogSFBFVF9FUEkgZmFpbGVkXG4iKTsKLQkJZ290byBvdXQ7Ci0JfQotCi0JaWYgKGlvY3RsKGZkLCBIUEVUX0lFX09OLCAwKSA8IDApIHsKLQkJZnByaW50ZihzdGRlcnIsICJocGV0X3BvbGwsIEhQRVRfSUVfT04gZmFpbGVkXG4iKTsKLQkJZ290byBvdXQ7Ci0JfQotCi0JcGZkLmZkID0gZmQ7Ci0JcGZkLmV2ZW50cyA9IFBPTExJTjsKLQotCWZvciAoaSA9IDA7IGkgPCBpdGVyYXRpb25zOyBpKyspIHsKLQkJcGZkLnJldmVudHMgPSAwOwotCQlnZXR0aW1lb2ZkYXkoJnN0diwgJnR6KTsKLQkJaWYgKHBvbGwoJnBmZCwgMSwgLTEpIDwgMCkKLQkJCWZwcmludGYoc3RkZXJyLCAiaHBldF9wb2xsOiBwb2xsIGZhaWxlZFxuIik7Ci0JCWVsc2UgewotCQkJbG9uZyAJZGF0YTsKLQotCQkJZ2V0dGltZW9mZGF5KCZldHYsICZ0eik7Ci0JCQl1c2VjID0gc3R2LnR2X3NlYyAqIDEwMDAwMDAgKyBzdHYudHZfdXNlYzsKLQkJCXVzZWMgPSAoZXR2LnR2X3NlYyAqIDEwMDAwMDAgKyBldHYudHZfdXNlYykgLSB1c2VjOwotCi0JCQlmcHJpbnRmKHN0ZGVyciwKLQkJCQkiaHBldF9wb2xsOiBleHBpcmVkIHRpbWUgPSAweCVseFxuIiwgdXNlYyk7Ci0KLQkJCWZwcmludGYoc3RkZXJyLCAiaHBldF9wb2xsOiByZXZlbnRzID0gMHgleFxuIiwKLQkJCQlwZmQucmV2ZW50cyk7Ci0KLQkJCWlmIChyZWFkKGZkLCAmZGF0YSwgc2l6ZW9mKGRhdGEpKSAhPSBzaXplb2YoZGF0YSkpIHsKLQkJCQlmcHJpbnRmKHN0ZGVyciwgImhwZXRfcG9sbDogcmVhZCBmYWlsZWRcbiIpOwotCQkJfQotCQkJZWxzZQotCQkJCWZwcmludGYoc3RkZXJyLCAiaHBldF9wb2xsOiBkYXRhIDB4JWx4XG4iLAotCQkJCQlkYXRhKTsKLQkJfQotCX0KLQotb3V0OgotCWNsb3NlKGZkKTsKLQlyZXR1cm47Ci19Ci0KLXN0YXRpYyBpbnQgaHBldF9zaWdpb19jb3VudDsKLQotc3RhdGljIHZvaWQKLWhwZXRfc2lnaW8oaW50IHZhbCkKLXsKLQlmcHJpbnRmKHN0ZGVyciwgImhwZXRfc2lnaW86IGNhbGxlZFxuIik7Ci0JaHBldF9zaWdpb19jb3VudCsrOwotfQotCi12b2lkCi1ocGV0X2Zhc3luYyhpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpCi17Ci0JdW5zaWduZWQgbG9uZwkJZnJlcTsKLQlpbnQJCQlpdGVyYXRpb25zLCBpLCBmZCwgdmFsdWU7Ci0Jc2lnX3QJCQlvbGRzaWc7Ci0Jc3RydWN0IGhwZXRfaW5mbwlpbmZvOwotCi0JaHBldF9zaWdpb19jb3VudCA9IDA7Ci0JZmQgPSAtMTsKLQotCWlmICgob2xkc2lnID0gc2lnbmFsKFNJR0lPLCBocGV0X3NpZ2lvKSkgPT0gU0lHX0VSUikgewotCQlmcHJpbnRmKHN0ZGVyciwgImhwZXRfZmFzeW5jOiBmYWlsZWQgdG8gc2V0IHNpZ25hbCBoYW5kbGVyXG4iKTsKLQkJcmV0dXJuOwotCX0KLQotCWlmIChhcmdjICE9IDMpIHsKLQkJZnByaW50ZihzdGRlcnIsICJocGV0X2Zhc3luYzogZGV2aWNlLW5hbWUgZnJlcSBpdGVyYXRpb25zXG4iKTsKLQkJZ290byBvdXQ7Ci0JfQotCi0JZmQgPSBvcGVuKGFyZ3ZbMF0sIE9fUkRPTkxZKTsKLQotCWlmIChmZCA8IDApIHsKLQkJZnByaW50ZihzdGRlcnIsICJocGV0X2Zhc3luYzogZmFpbGVkIHRvIG9wZW4gJXNcbiIsIGFyZ3ZbMF0pOwotCQlyZXR1cm47Ci0JfQotCi0KLQlpZiAoKGZjbnRsKGZkLCBGX1NFVE9XTiwgZ2V0cGlkKCkpID09IDEpIHx8Ci0JCSgodmFsdWUgPSBmY250bChmZCwgRl9HRVRGTCkpID09IDEpIHx8Ci0JCShmY250bChmZCwgRl9TRVRGTCwgdmFsdWUgfCBPX0FTWU5DKSA9PSAxKSkgewotCQlmcHJpbnRmKHN0ZGVyciwgImhwZXRfZmFzeW5jOiBmY250bCBmYWlsZWRcbiIpOwotCQlnb3RvIG91dDsKLQl9Ci0KLQlmcmVxID0gYXRvaShhcmd2WzFdKTsKLQlpdGVyYXRpb25zID0gYXRvaShhcmd2WzJdKTsKLQotCWlmIChpb2N0bChmZCwgSFBFVF9JUlFGUkVRLCBmcmVxKSA8IDApIHsKLQkJZnByaW50ZihzdGRlcnIsICJocGV0X2Zhc3luYzogSFBFVF9JUlFGUkVRIGZhaWxlZFxuIik7Ci0JCWdvdG8gb3V0OwotCX0KLQotCWlmIChpb2N0bChmZCwgSFBFVF9JTkZPLCAmaW5mbykgPCAwKSB7Ci0JCWZwcmludGYoc3RkZXJyLCAiaHBldF9mYXN5bmM6IGZhaWxlZCB0byBnZXQgaW5mb1xuIik7Ci0JCWdvdG8gb3V0OwotCX0KLQotCWZwcmludGYoc3RkZXJyLCAiaHBldF9mYXN5bmM6IGluZm8uaGlfZmxhZ3MgMHglbHhcbiIsIGluZm8uaGlfZmxhZ3MpOwotCi0JaWYgKGluZm8uaGlfZmxhZ3MgJiYgKGlvY3RsKGZkLCBIUEVUX0VQSSwgMCkgPCAwKSkgewotCQlmcHJpbnRmKHN0ZGVyciwgImhwZXRfZmFzeW5jOiBIUEVUX0VQSSBmYWlsZWRcbiIpOwotCQlnb3RvIG91dDsKLQl9Ci0KLQlpZiAoaW9jdGwoZmQsIEhQRVRfSUVfT04sIDApIDwgMCkgewotCQlmcHJpbnRmKHN0ZGVyciwgImhwZXRfZmFzeW5jLCBIUEVUX0lFX09OIGZhaWxlZFxuIik7Ci0JCWdvdG8gb3V0OwotCX0KLQotCWZvciAoaSA9IDA7IGkgPCBpdGVyYXRpb25zOyBpKyspIHsKLQkJKHZvaWQpIHBhdXNlKCk7Ci0JCWZwcmludGYoc3RkZXJyLCAiaHBldF9mYXN5bmM6IGNvdW50ID0gJWRcbiIsIGhwZXRfc2lnaW9fY291bnQpOwotCX0KLQotb3V0OgotCXNpZ25hbChTSUdJTywgb2xkc2lnKTsKLQotCWlmIChmZCA+PSAwKQotCQljbG9zZShmZCk7Ci0KLQlyZXR1cm47Ci19Ci0KLVRoZSBrZXJuZWwgQVBJIGhhcyB0aHJlZSBpbnRlcmZhY2VzIGV4cG9ydGVkIGZyb20gdGhlIGRyaXZlcjoKLQotCWhwZXRfcmVnaXN0ZXIoc3RydWN0IGhwZXRfdGFzayAqdHAsIGludCBwZXJpb2RpYykKLQlocGV0X3VucmVnaXN0ZXIoc3RydWN0IGhwZXRfdGFzayAqdHApCi0JaHBldF9jb250cm9sKHN0cnVjdCBocGV0X3Rhc2sgKnRwLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKLQotVGhlIGtlcm5lbCBtb2R1bGUgdXNpbmcgdGhpcyBpbnRlcmZhY2UgZmlsbHMgaW4gdGhlIGh0X2Z1bmMgYW5kIGh0X2RhdGEKLW1lbWJlcnMgb2YgdGhlIGhwZXRfdGFzayBzdHJ1Y3R1cmUgYmVmb3JlIGNhbGxpbmcgaHBldF9yZWdpc3Rlci4KLWhwZXRfY29udHJvbCBzaW1wbHkgdmVjdG9ycyB0byB0aGUgaHBldF9pb2N0bCByb3V0aW5lIGFuZCBoYXMgdGhlIHNhbWUKLWNvbW1hbmRzIGFuZCByZXNwZWN0aXZlIGFyZ3VtZW50cyBhcyB0aGUgdXNlciBBUEkuICBocGV0X3VucmVnaXN0ZXIKLWlzIHVzZWQgdG8gdGVybWluYXRlIHVzYWdlIG9mIHRoZSBIUEVUIHRpbWVyIHJlc2VydmVkIGJ5IGhwZXRfcmVnaXN0ZXIuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2h3bW9uL2FkdDc0NzAgYi9Eb2N1bWVudGF0aW9uL2h3bW9uL2FkdDc0NzAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzVkMTNjYQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vaHdtb24vYWR0NzQ3MApAQCAtMCwwICsxLDc2IEBACitLZXJuZWwgZHJpdmVyIGFkdDc0NzAKKz09PT09PT09PT09PT09PT09PT09PQorCitTdXBwb3J0ZWQgY2hpcHM6CisgICogQW5hbG9nIERldmljZXMgQURUNzQ3MAorICAgIFByZWZpeDogJ2FkdDc0NzAnCisgICAgQWRkcmVzc2VzIHNjYW5uZWQ6IEkyQyAweDJDLCAweDJFLCAweDJGCisgICAgRGF0YXNoZWV0OiBQdWJsaWNseSBhdmFpbGFibGUgYXQgdGhlIEFuYWxvZyBEZXZpY2VzIHdlYnNpdGUKKworQXV0aG9yOiBEYXJyaWNrIEouIFdvbmcKKworRGVzY3JpcHRpb24KKy0tLS0tLS0tLS0tCisKK1RoaXMgZHJpdmVyIGltcGxlbWVudHMgc3VwcG9ydCBmb3IgdGhlIEFuYWxvZyBEZXZpY2VzIEFEVDc0NzAgY2hpcC4gIFRoZXJlIG1heQorYmUgb3RoZXIgY2hpcHMgdGhhdCBpbXBsZW1lbnQgdGhpcyBpbnRlcmZhY2UuCisKK1RoZSBBRFQ3NDcwIHVzZXMgdGhlIDItd2lyZSBpbnRlcmZhY2UgY29tcGF0aWJsZSB3aXRoIHRoZSBTTUJ1cyAyLjAKK3NwZWNpZmljYXRpb24uIFVzaW5nIGFuIGFuYWxvZyB0byBkaWdpdGFsIGNvbnZlcnRlciBpdCBtZWFzdXJlcyB1cCB0byB0ZW4gKDEwKQorZXh0ZXJuYWwgdGVtcGVyYXR1cmVzLiBJdCBoYXMgZm91ciAoNCkgMTYtYml0IGNvdW50ZXJzIGZvciBtZWFzdXJpbmcgZmFuIHNwZWVkLgorVGhlcmUgYXJlIGZvdXIgKDQpIFBXTSBvdXRwdXRzIHRoYXQgY2FuIGJlIHVzZWQgdG8gY29udHJvbCBmYW4gc3BlZWQuCisKK0Egc29waGlzdGljYXRlZCBjb250cm9sIHN5c3RlbSBmb3IgdGhlIFBXTSBvdXRwdXRzIGlzIGRlc2lnbmVkIGludG8gdGhlIEFEVDc0NzAKK3RoYXQgYWxsb3dzIGZhbiBzcGVlZCB0byBiZSBhZGp1c3RlZCBhdXRvbWF0aWNhbGx5IGJhc2VkIG9uIGFueSBvZiB0aGUgdGVuCit0ZW1wZXJhdHVyZSBzZW5zb3JzLiBFYWNoIFBXTSBvdXRwdXQgaXMgaW5kaXZpZHVhbGx5IGFkanVzdGFibGUgYW5kCitwcm9ncmFtbWFibGUuIE9uY2UgY29uZmlndXJlZCwgdGhlIEFEVDc0NzAgd2lsbCBhZGp1c3QgdGhlIFBXTSBvdXRwdXRzIGluCityZXNwb25zZSB0byB0aGUgbWVhc3VyZWQgdGVtcGVyYXR1cmVzIHdpdGggZnVydGhlciBob3N0IGludGVydmVudGlvbi4gIFRoaXMKK2ZlYXR1cmUgY2FuIGFsc28gYmUgZGlzYWJsZWQgZm9yIG1hbnVhbCBjb250cm9sIG9mIHRoZSBQV00ncy4KKworRWFjaCBvZiB0aGUgbWVhc3VyZWQgaW5wdXRzICh0ZW1wZXJhdHVyZSwgZmFuIHNwZWVkKSBoYXMgY29ycmVzcG9uZGluZyBoaWdoL2xvdworbGltaXQgdmFsdWVzLiBUaGUgQURUNzQ3MCB3aWxsIHNpZ25hbCBhbiBBTEFSTSBpZiBhbnkgbWVhc3VyZWQgdmFsdWUgZXhjZWVkcworZWl0aGVyIGxpbWl0LgorCitUaGUgQURUNzQ3MCBET0VTIE5PVCBzYW1wbGUgYWxsIGlucHV0cyBjb250aW51b3VzbHkuICBBIHNpbmdsZSBwaW4gb24gdGhlCitBRFQ3NDcwIGlzIGNvbm5lY3RlZCB0byBhIG11bHRpdHVkZSBvZiB0aGVybWFsIGRpb2RlcywgYnV0IHRoZSBjaGlwIG11c3QgYmUKK2luc3RydWN0ZWQgZXhwbGljaXRseSB0byByZWFkIHRoZSBtdWx0aXR1ZGUgb2YgZGlvZGVzLiAgSWYgeW91IHdhbnQgdG8gdXNlCithdXRvbWF0aWMgZmFuIGNvbnRyb2wgbW9kZSwgeW91IG11c3QgbWFudWFsbHkgcmVhZCBhbnkgb2YgdGhlIHRlbXBlcmF0dXJlCitzZW5zb3JzIG9yIHRoZSBmYW4gY29udHJvbCBhbGdvcml0aG0gd2lsbCBub3QgcnVuLiAgVGhlIGNoaXAgV0lMTCBOT1QgRE8gVEhJUworQVVUT01BVElDQUxMWTsgdGhpcyBtdXN0IGJlIGRvbmUgZnJvbSB1c2Vyc3BhY2UuICBUaGlzIG1heSBiZSBhIGJ1ZyBpbiB0aGUgY2hpcAorZGVzaWduLCBnaXZlbiB0aGF0IG1hbnkgb3RoZXIgQUQgY2hpcHMgdGFrZSBjYXJlIG9mIHRoaXMuICBUaGUgZHJpdmVyIHdpbGwgbm90CityZWFkIHRoZSByZWdpc3RlcnMgbW9yZSBvZnRlbiB0aGFuIG9uY2UgZXZlcnkgNSBzZWNvbmRzLiAgRnVydGhlciwKK2NvbmZpZ3VyYXRpb24gZGF0YSBpcyBvbmx5IHJlYWQgb25jZSBwZXIgbWludXRlLgorCitTcGVjaWFsIEZlYXR1cmVzCistLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBBRFQ3NDcwIGhhcyBhIDgtYml0IEFEQyBhbmQgaXMgY2FwYWJsZSBvZiBtZWFzdXJpbmcgdGVtcGVyYXR1cmVzIHdpdGggMQorZGVnQyByZXNvbHV0aW9uLgorCitUaGUgQW5hbG9nIERldmljZXMgZGF0YXNoZWV0IGlzIHZlcnkgZGV0YWlsZWQgYW5kIGRlc2NyaWJlcyBhIHByb2NlZHVyZSBmb3IKK2RldGVybWluaW5nIGFuIG9wdGltYWwgY29uZmlndXJhdGlvbiBmb3IgdGhlIGF1dG9tYXRpYyBQV00gY29udHJvbC4KKworQ29uZmlndXJhdGlvbiBOb3RlcworLS0tLS0tLS0tLS0tLS0tLS0tLQorCitCZXNpZGVzIHN0YW5kYXJkIGludGVyZmFjZXMgZHJpdmVyIGFkZHMgdGhlIGZvbGxvd2luZzoKKworKiBQV00gQ29udHJvbAorCisqIHB3bSNfYXV0b19wb2ludDFfcHdtIGFuZCBwd20jX2F1dG9fcG9pbnQxX3RlbXAgYW5kCisqIHB3bSNfYXV0b19wb2ludDJfcHdtIGFuZCBwd20jX2F1dG9fcG9pbnQyX3RlbXAgLQorCitwb2ludDE6IFNldCB0aGUgcHdtIHNwZWVkIGF0IGEgbG93ZXIgdGVtcGVyYXR1cmUgYm91bmQuCitwb2ludDI6IFNldCB0aGUgcHdtIHNwZWVkIGF0IGEgaGlnaGVyIHRlbXBlcmF0dXJlIGJvdW5kLgorCitUaGUgQURUNzQ3MCB3aWxsIHNjYWxlIHRoZSBwd20gYmV0d2VlbiB0aGUgbG93ZXIgYW5kIGhpZ2hlciBwd20gc3BlZWQgd2hlbgordGhlIHRlbXBlcmF0dXJlIGlzIGJldHdlZW4gdGhlIHR3byB0ZW1wZXJhdHVyZSBib3VuZGFyaWVzLiAgUFdNIHZhbHVlcyByYW5nZQorZnJvbSAwIChvZmYpIHRvIDI1NSAoZnVsbCBzcGVlZCkuICBGYW4gc3BlZWQgd2lsbCBiZSBzZXQgdG8gbWF4aW11bSB3aGVuIHRoZQordGVtcGVyYXR1cmUgc2Vuc29yIGFzc29jaWF0ZWQgd2l0aCB0aGUgUFdNIGNvbnRyb2wgZXhjZWVkcworcHdtI19hdXRvX3BvaW50Ml90ZW1wLgorCitOb3RlcworLS0tLS0KKworQXMgc3RhdGVkIGFib3ZlLCB0aGUgdGVtcGVyYXR1cmUgaW5wdXRzIG11c3QgYmUgcmVhZCBwZXJpb2RpY2FsbHkgZnJvbQordXNlcnNwYWNlIGluIG9yZGVyIGZvciB0aGUgYXV0b21hdGljIHB3bSBhbGdvcml0aG0gdG8gcnVuLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9od21vbi9pdDg3IGIvRG9jdW1lbnRhdGlvbi9od21vbi9pdDg3CmluZGV4IDM0OTZiNzAuLjA0MmMwNDEgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vaHdtb24vaXQ4NworKysgYi9Eb2N1bWVudGF0aW9uL2h3bW9uL2l0ODcKQEAgLTEzNiwxMCArMTM2LDEwIEBACiBUaGUgSVQ4N3h4IG9ubHkgdXBkYXRlcyBpdHMgdmFsdWVzIGVhY2ggMS41IHNlY29uZHM7IHJlYWRpbmcgaXQgbW9yZSBvZnRlbgogd2lsbCBkbyBubyBoYXJtLCBidXQgd2lsbCByZXR1cm4gJ29sZCcgdmFsdWVzLgogCi1UbyBjaGFuZ2Ugc2Vuc29yIE4gdG8gYSB0aGVybWlzdG9yLCAnZWNobyAyID4gdGVtcE5fdHlwZScgd2hlcmUgTiBpcyAxLCAyLAorVG8gY2hhbmdlIHNlbnNvciBOIHRvIGEgdGhlcm1pc3RvciwgJ2VjaG8gNCA+IHRlbXBOX3R5cGUnIHdoZXJlIE4gaXMgMSwgMiwKIG9yIDMuIFRvIGNoYW5nZSBzZW5zb3IgTiB0byBhIHRoZXJtYWwgZGlvZGUsICdlY2hvIDMgPiB0ZW1wTl90eXBlJy4KIEdpdmUgMCBmb3IgdW51c2VkIHNlbnNvci4gQW55IG90aGVyIHZhbHVlIGlzIGludmFsaWQuIFRvIGNvbmZpZ3VyZSB0aGlzIGF0Ci1zdGFydHVwLCBjb25zdWx0IGxtX3NlbnNvcnMncyAvZXRjL3NlbnNvcnMuY29uZi4gKDIgPSB0aGVybWlzdG9yOworc3RhcnR1cCwgY29uc3VsdCBsbV9zZW5zb3JzJ3MgL2V0Yy9zZW5zb3JzLmNvbmYuICg0ID0gdGhlcm1pc3RvcjsKIDMgPSB0aGVybWFsIGRpb2RlKQogCiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaHdtb24vbG04NSBiL0RvY3VtZW50YXRpb24vaHdtb24vbG04NQppbmRleCA2ZDQxZGI3Li40MDA2MjA3IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2h3bW9uL2xtODUKKysrIGIvRG9jdW1lbnRhdGlvbi9od21vbi9sbTg1CkBAIC0xNjMsMTYgKzE2Myw2IEBACiAqIHB3bSNfYXV0b19wd21fbWluIC0gdGhpcyBzcGVjaWZpZXMgdGhlIFBXTSB2YWx1ZSBmb3IgdGVtcCNfYXV0b190ZW1wX29mZgogICAgICAgICAgICAgICAgICAgICAgIHRlbXBlcmF0dXJlLiAoUFdNIHZhbHVlIGZyb20gMCB0byAyNTUpCiAKLSogcHdtI19hdXRvX3B3bV9mcmVxIC0gc2VsZWN0IGJhc2UgZnJlcXVlbmN5IG9mIFBXTSBvdXRwdXQuIFlvdSBjYW4gc2VsZWN0Ci0gICAgICAgICAgICAgICAgICAgICAgIGluIHJhbmdlIG9mIDEwLjAgdG8gOTQuMCBIeiBpbiAuMSBIeiB1bml0cy4KLQkJICAgICAgIChWYWx1ZXMgMTAwIHRvIDk0MCkuCi0KLVRoZSBwd20jX2F1dG9fcHdtX2ZyZXEgY2FuIGJlIHNldCB0byBvbmUgb2YgdGhlIGZvbGxvd2luZyA4IHZhbHVlcy4gU2V0dGluZyB0aGUKLWZyZXF1ZW5jeSB0byBhIHZhbHVlIG5vdCBvbiB0aGlzIGxpc3QsIHdpbGwgcmVzdWx0IGluIHRoZSBuZXh0IGhpZ2hlciBmcmVxdWVuY3kKLWJlaW5nIHNlbGVjdGVkLiBUaGUgYWN0dWFsIGRldmljZSBmcmVxdWVuY3kgbWF5IHZhcnkgc2xpZ2h0bHkgZnJvbSB0aGlzCi1zcGVjaWZpY2F0aW9uIGFzIGRlc2lnbmVkIGJ5IHRoZSBtYW51ZmFjdHVyZXIuIENvbnN1bHQgdGhlIGRhdGFzaGVldCBmb3IgbW9yZQotZGV0YWlscy4gKFBXTSBGcmVxdWVuY3kgdmFsdWVzOiAgMTAwLCAxNTAsIDIzMCwgMzAwLCAzODAsIDQ3MCwgNjIwLCA5NDApCi0KICogcHdtI19hdXRvX3B3bV9taW5jdGwgLSB0aGlzIGZsYWdzIHNlbGVjdHMgZm9yIHRlbXAjX2F1dG9fdGVtcF9vZmYgdGVtcGVyYXR1cmUKICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgYmFoYXZpb3VyIG9mIGZhbnMuIFdyaXRlIDEgdG8gbGV0IGZhbnMgc3Bpbm5pbmcgYXQKIAkJCSBwd20jX2F1dG9fcHdtX21pbiBvciB3cml0ZSAwIHRvIGxldCB0aGVtIG9mZi4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaHdtb24vbG04NyBiL0RvY3VtZW50YXRpb24vaHdtb24vbG04NwppbmRleCBlYzI3YWExLi42YjQ3YjY3IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2h3bW9uL2xtODcKKysrIGIvRG9jdW1lbnRhdGlvbi9od21vbi9sbTg3CkBAIC02NSwxMSArNjUsMTAgQEAKIGRlcGVuZGluZyBvbiB0aGUgaGFyZHdhcmUgY29uZmlndXJhdGlvbi4KIAogU29tZSBmdW5jdGlvbnMgc2hhcmUgcGlucywgc28gbm90IGFsbCBmdW5jdGlvbnMgYXJlIGF2YWlsYWJsZSBhdCB0aGUgc2FtZQotdGltZS4gV2hpY2ggYXJlIGRlcGVuZHMgb24gdGhlIGhhcmR3YXJlIHNldHVwLiBUaGlzIGRyaXZlciBhc3N1bWVzIHRoYXQKLXRoZSBCSU9TIGNvbmZpZ3VyZWQgdGhlIGNoaXAgY29ycmVjdGx5LiBJbiB0aGF0IHJlc3BlY3QsIGl0IGRpZmZlcnMgZnJvbQotdGhlIG9yaWdpbmFsIGRyaXZlciAoZnJvbSBsbV9zZW5zb3JzIGZvciBMaW51eCAyLjQpLCB3aGljaCB3b3VsZCBmb3JjZSB0aGUKLUxNODcgdG8gYW4gYXJiaXRyYXJ5LCBjb21waWxlLXRpbWUgY2hvc2VuIG1vZGUsIHJlZ2FyZGxlc3Mgb2YgdGhlIGFjdHVhbAotY2hpcHNldCB3aXJpbmcuCit0aW1lLiBXaGljaCBhcmUgZGVwZW5kcyBvbiB0aGUgaGFyZHdhcmUgc2V0dXAuIFRoaXMgZHJpdmVyIG5vcm1hbGx5Cithc3N1bWVzIHRoYXQgZmlybXdhcmUgY29uZmlndXJlZCB0aGUgY2hpcCBjb3JyZWN0bHkuIFdoZXJlIHRoaXMgaXMgbm90Cit0aGUgY2FzZSwgcGxhdGZvcm0gY29kZSBtdXN0IHNldCB0aGUgSTJDIGNsaWVudCdzIHBsYXRmb3JtX2RhdGEgdG8gcG9pbnQKK3RvIGEgdTggdmFsdWUgdG8gYmUgd3JpdHRlbiB0byB0aGUgY2hhbm5lbCByZWdpc3Rlci4KIAogRm9yIHJlZmVyZW5jZSwgaGVyZSBpcyB0aGUgbGlzdCBvZiBleGNsdXNpdmUgZnVuY3Rpb25zOgogIC0gaW4wK2luNSAoZGVmYXVsdCkgb3IgdGVtcDMKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaHdtb24vbG05MCBiL0RvY3VtZW50YXRpb24vaHdtb24vbG05MAppbmRleCBhYTRhMGVjLi5lMGQ1MjA2IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2h3bW9uL2xtOTAKKysrIGIvRG9jdW1lbnRhdGlvbi9od21vbi9sbTkwCkBAIC0xMSw3ICsxMSw3IEBACiAgICAgUHJlZml4OiAnbG05OScKICAgICBBZGRyZXNzZXMgc2Nhbm5lZDogSTJDIDB4NGMgYW5kIDB4NGQKICAgICBEYXRhc2hlZXQ6IFB1YmxpY2x5IGF2YWlsYWJsZSBhdCB0aGUgTmF0aW9uYWwgU2VtaWNvbmR1Y3RvciB3ZWJzaXRlCi0gICAgICAgICAgICAgICBodHRwOi8vd3d3Lm5hdGlvbmFsLmNvbS9wZi9MTS9MTTg5Lmh0bWwKKyAgICAgICAgICAgICAgIGh0dHA6Ly93d3cubmF0aW9uYWwuY29tL21wZi9MTS9MTTg5Lmh0bWwKICAgKiBOYXRpb25hbCBTZW1pY29uZHVjdG9yIExNOTkKICAgICBQcmVmaXg6ICdsbTk5JwogICAgIEFkZHJlc3NlcyBzY2FubmVkOiBJMkMgMHg0YyBhbmQgMHg0ZApAQCAtMjEsMTggKzIxLDMyIEBACiAgICAgUHJlZml4OiAnbG04NicKICAgICBBZGRyZXNzZXMgc2Nhbm5lZDogSTJDIDB4NGMKICAgICBEYXRhc2hlZXQ6IFB1YmxpY2x5IGF2YWlsYWJsZSBhdCB0aGUgTmF0aW9uYWwgU2VtaWNvbmR1Y3RvciB3ZWJzaXRlCi0gICAgICAgICAgICAgICBodHRwOi8vd3d3Lm5hdGlvbmFsLmNvbS9wZi9MTS9MTTg2Lmh0bWwKKyAgICAgICAgICAgICAgIGh0dHA6Ly93d3cubmF0aW9uYWwuY29tL21wZi9MTS9MTTg2Lmh0bWwKICAgKiBBbmFsb2cgRGV2aWNlcyBBRE0xMDMyCiAgICAgUHJlZml4OiAnYWRtMTAzMicKICAgICBBZGRyZXNzZXMgc2Nhbm5lZDogSTJDIDB4NGMgYW5kIDB4NGQKLSAgICBEYXRhc2hlZXQ6IFB1YmxpY2x5IGF2YWlsYWJsZSBhdCB0aGUgQW5hbG9nIERldmljZXMgd2Vic2l0ZQotICAgICAgICAgICAgICAgaHR0cDovL3d3dy5hbmFsb2cuY29tL2VuL3Byb2QvMCwyODc3LEFETTEwMzIsMDAuaHRtbAorICAgIERhdGFzaGVldDogUHVibGljbHkgYXZhaWxhYmxlIGF0IHRoZSBPTiBTZW1pY29uZHVjdG9yIHdlYnNpdGUKKyAgICAgICAgICAgICAgIGh0dHA6Ly93d3cub25zZW1pLmNvbS9Qb3dlclNvbHV0aW9ucy9wcm9kdWN0LmRvP2lkPUFETTEwMzIKICAgKiBBbmFsb2cgRGV2aWNlcyBBRFQ3NDYxCiAgICAgUHJlZml4OiAnYWR0NzQ2MScKICAgICBBZGRyZXNzZXMgc2Nhbm5lZDogSTJDIDB4NGMgYW5kIDB4NGQKLSAgICBEYXRhc2hlZXQ6IFB1YmxpY2x5IGF2YWlsYWJsZSBhdCB0aGUgQW5hbG9nIERldmljZXMgd2Vic2l0ZQotICAgICAgICAgICAgICAgaHR0cDovL3d3dy5hbmFsb2cuY29tL2VuL3Byb2QvMCwyODc3LEFEVDc0NjEsMDAuaHRtbAotICAgIE5vdGU6IE9ubHkgaWYgaW4gQURNMTAzMiBjb21wYXRpYmlsaXR5IG1vZGUKKyAgICBEYXRhc2hlZXQ6IFB1YmxpY2x5IGF2YWlsYWJsZSBhdCB0aGUgT04gU2VtaWNvbmR1Y3RvciB3ZWJzaXRlCisgICAgICAgICAgICAgICBodHRwOi8vd3d3Lm9uc2VtaS5jb20vUG93ZXJTb2x1dGlvbnMvcHJvZHVjdC5kbz9pZD1BRFQ3NDYxCisgICogTWF4aW0gTUFYNjY0NgorICAgIFByZWZpeDogJ21heDY2NDYnCisgICAgQWRkcmVzc2VzIHNjYW5uZWQ6IEkyQyAweDRkCisgICAgRGF0YXNoZWV0OiBQdWJsaWNseSBhdmFpbGFibGUgYXQgdGhlIE1heGltIHdlYnNpdGUKKyAgICAgICAgICAgICAgIGh0dHA6Ly93d3cubWF4aW0taWMuY29tL3F1aWNrX3ZpZXcyLmNmbS9xdl9way8zNDk3CisgICogTWF4aW0gTUFYNjY0NworICAgIFByZWZpeDogJ21heDY2NDYnCisgICAgQWRkcmVzc2VzIHNjYW5uZWQ6IEkyQyAweDRlCisgICAgRGF0YXNoZWV0OiBQdWJsaWNseSBhdmFpbGFibGUgYXQgdGhlIE1heGltIHdlYnNpdGUKKyAgICAgICAgICAgICAgIGh0dHA6Ly93d3cubWF4aW0taWMuY29tL3F1aWNrX3ZpZXcyLmNmbS9xdl9way8zNDk3CisgICogTWF4aW0gTUFYNjY0OQorICAgIFByZWZpeDogJ21heDY2NDYnCisgICAgQWRkcmVzc2VzIHNjYW5uZWQ6IEkyQyAweDRjCisgICAgRGF0YXNoZWV0OiBQdWJsaWNseSBhdmFpbGFibGUgYXQgdGhlIE1heGltIHdlYnNpdGUKKyAgICAgICAgICAgICAgIGh0dHA6Ly93d3cubWF4aW0taWMuY29tL3F1aWNrX3ZpZXcyLmNmbS9xdl9way8zNDk3CiAgICogTWF4aW0gTUFYNjY1NwogICAgIFByZWZpeDogJ21heDY2NTcnCiAgICAgQWRkcmVzc2VzIHNjYW5uZWQ6IEkyQyAweDRjCkBAIC03MCwyNSArODQsMjEgQEAKIAogVGhlIExNOTAgaXMgYSBkaWdpdGFsIHRlbXBlcmF0dXJlIHNlbnNvci4gSXQgc2Vuc2VzIGl0cyBvd24gdGVtcGVyYXR1cmUgYXMKIHdlbGwgYXMgdGhlIHRlbXBlcmF0dXJlIG9mIHVwIHRvIG9uZSBleHRlcm5hbCBkaW9kZS4gSXQgaXMgY29tcGF0aWJsZQotd2l0aCBtYW55IG90aGVyIGRldmljZXMgc3VjaCBhcyB0aGUgTE04NiwgdGhlIExNODksIHRoZSBMTTk5LCB0aGUgQURNMTAzMiwKLXRoZSBNQVg2NjU3LCBNQVg2NjU4LCBNQVg2NjU5LCBNQVg2NjgwIGFuZCB0aGUgTUFYNjY4MSBhbGwgb2Ygd2hpY2ggYXJlCi1zdXBwb3J0ZWQgYnkgdGhpcyBkcml2ZXIuCit3aXRoIG1hbnkgb3RoZXIgZGV2aWNlcywgbWFueSBvZiB3aGljaCBhcmUgc3VwcG9ydGVkIGJ5IHRoaXMgZHJpdmVyLgogCiBOb3RlIHRoYXQgdGhlcmUgaXMgbm8gZWFzeSB3YXkgdG8gZGlmZmVyZW50aWF0ZSBiZXR3ZWVuIHRoZSBNQVg2NjU3LAogTUFYNjY1OCBhbmQgTUFYNjY1OSB2YXJpYW50cy4gVGhlIGV4dHJhIGFkZHJlc3MgYW5kIGZlYXR1cmVzIG9mIHRoZQogTUFYNjY1OSBhcmUgbm90IHN1cHBvcnRlZCBieSB0aGlzIGRyaXZlci4gVGhlIE1BWDY2ODAgYW5kIE1BWDY2ODEgb25seQogZGlmZmVyIGluIHRoZWlyIHBpbm91dCwgdGhlcmVmb3JlIHRoZXkgb2J2aW91c2x5IGNhbid0IChhbmQgZG9uJ3QgbmVlZCB0bykKLWJlIGRpc3Rpbmd1aXNoZWQuIEFkZGl0aW9uYWxseSwgdGhlIEFEVDc0NjEgaXMgc3VwcG9ydGVkIGlmIGZvdW5kIGluCi1BRE0xMDMyIGNvbXBhdGliaWxpdHkgbW9kZS4KK2JlIGRpc3Rpbmd1aXNoZWQuCiAKIFRoZSBzcGVjaWZpY2l0eSBvZiB0aGlzIGZhbWlseSBvZiBjaGlwc2V0cyBvdmVyIHRoZSBBRE0xMDIxL0xNODQKIGZhbWlseSBpcyB0aGF0IGl0IGZlYXR1cmVzIGNyaXRpY2FsIGxpbWl0cyB3aXRoIGh5c3RlcmVzaXMsIGFuZCBhbgogaW5jcmVhc2VkIHJlc29sdXRpb24gb2YgdGhlIHJlbW90ZSB0ZW1wZXJhdHVyZSBtZWFzdXJlbWVudC4KIAogVGhlIGRpZmZlcmVudCBjaGlwc2V0cyBvZiB0aGUgZmFtaWx5IGFyZSBub3Qgc3RyaWN0bHkgaWRlbnRpY2FsLCBhbHRob3VnaAotdmVyeSBzaW1pbGFyLiBUaGlzIGRyaXZlciBkb2Vzbid0IGhhbmRsZSBhbnkgc3BlY2lmaWMgZmVhdHVyZSBmb3Igbm93LAotd2l0aCB0aGUgZXhjZXB0aW9uIG9mIFNNQnVzIFBFQy4gRm9yIHJlZmVyZW5jZSwgaGVyZSBjb21lcyBhIG5vbi1leGhhdXN0aXZlCi1saXN0IG9mIHNwZWNpZmljIGZlYXR1cmVzOgordmVyeSBzaW1pbGFyLiBGb3IgcmVmZXJlbmNlLCBoZXJlIGNvbWVzIGEgbm9uLWV4aGF1c3RpdmUgbGlzdCBvZiBzcGVjaWZpYworZmVhdHVyZXM6CiAKIExNOTA6CiAgICogRmlsdGVyIGFuZCBhbGVydCBjb25maWd1cmF0aW9uIHJlZ2lzdGVyIGF0IDB4QkYuCkBAIC0xMTQsOSArMTI0LDExIEBACiAgICogTG93ZXIgcmVzb2x1dGlvbiBmb3IgcmVtb3RlIHRlbXBlcmF0dXJlCiAKIE1BWDY2NTcgYW5kIE1BWDY2NTg6CisgICogQmV0dGVyIGxvY2FsIHJlc29sdXRpb24KICAgKiBSZW1vdGUgc2Vuc29yIHR5cGUgc2VsZWN0aW9uCiAKIE1BWDY2NTk6CisgICogQmV0dGVyIGxvY2FsIHJlc29sdXRpb24KICAgKiBTZWxlY3RhYmxlIGFkZHJlc3MKICAgKiBTZWNvbmQgY3JpdGljYWwgdGVtcGVyYXR1cmUgbGltaXQKICAgKiBSZW1vdGUgc2Vuc29yIHR5cGUgc2VsZWN0aW9uCkBAIC0xMjcsNyArMTM5LDggQEAKIAogQWxsIHRlbXBlcmF0dXJlIHZhbHVlcyBhcmUgZ2l2ZW4gaW4gZGVncmVlcyBDZWxzaXVzLiBSZXNvbHV0aW9uCiBpcyAxLjAgZGVncmVlIGZvciB0aGUgbG9jYWwgdGVtcGVyYXR1cmUsIDAuMTI1IGRlZ3JlZSBmb3IgdGhlIHJlbW90ZQotdGVtcGVyYXR1cmUuCit0ZW1wZXJhdHVyZSwgZXhjZXB0IGZvciB0aGUgTUFYNjY1NywgTUFYNjY1OCBhbmQgTUFYNjY1OSB3aGljaCBoYXZlIGEKK3Jlc29sdXRpb24gb2YgMC4xMjUgZGVncmVlIGZvciBib3RoIHRlbXBlcmF0dXJlcy4KIAogRWFjaCBzZW5zb3IgaGFzIGl0cyBvd24gaGlnaCBhbmQgbG93IGxpbWl0cywgcGx1cyBhIGNyaXRpY2FsIGxpbWl0LgogQWRkaXRpb25hbGx5LCB0aGVyZSBpcyBhIHJlbGF0aXZlIGh5c3RlcmVzaXMgdmFsdWUgY29tbW9uIHRvIGJvdGggY3JpdGljYWwKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaHdtb24vcGM4NzM2MCBiL0RvY3VtZW50YXRpb24vaHdtb24vcGM4NzM2MAppbmRleCA4OWE4ZmNmLi5jYmFjMzJiIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2h3bW9uL3BjODczNjAKKysrIGIvRG9jdW1lbnRhdGlvbi9od21vbi9wYzg3MzYwCkBAIC01LDEyICs1LDcgQEAKICAgKiBOYXRpb25hbCBTZW1pY29uZHVjdG9yIFBDODczNjAsIFBDODczNjMsIFBDODczNjQsIFBDODczNjUgYW5kIFBDODczNjYKICAgICBQcmVmaXhlczogJ3BjODczNjAnLCAncGM4NzM2MycsICdwYzg3MzY0JywgJ3BjODczNjUnLCAncGM4NzM2NicKICAgICBBZGRyZXNzZXMgc2Nhbm5lZDogbm9uZSwgYWRkcmVzcyByZWFkIGZyb20gU3VwZXIgSS9PIGNvbmZpZyBzcGFjZQotICAgIERhdGFzaGVldHM6Ci0gICAgICAgIGh0dHA6Ly93d3cubmF0aW9uYWwuY29tL3BmL1BDL1BDODczNjAuaHRtbAotICAgICAgICBodHRwOi8vd3d3Lm5hdGlvbmFsLmNvbS9wZi9QQy9QQzg3MzYzLmh0bWwKLSAgICAgICAgaHR0cDovL3d3dy5uYXRpb25hbC5jb20vcGYvUEMvUEM4NzM2NC5odG1sCi0gICAgICAgIGh0dHA6Ly93d3cubmF0aW9uYWwuY29tL3BmL1BDL1BDODczNjUuaHRtbAotICAgICAgICBodHRwOi8vd3d3Lm5hdGlvbmFsLmNvbS9wZi9QQy9QQzg3MzY2Lmh0bWwKKyAgICBEYXRhc2hlZXRzOiBObyBsb25nZXIgYXZhaWxhYmxlCiAKIEF1dGhvcnM6IEplYW4gRGVsdmFyZSA8a2hhbGlAbGludXgtZnIub3JnPgogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2h3bW9uL3BjODc0MjcgYi9Eb2N1bWVudGF0aW9uL2h3bW9uL3BjODc0MjcKaW5kZXggOWEwNzA4Zi4uZDFlYmJlNSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9od21vbi9wYzg3NDI3CisrKyBiL0RvY3VtZW50YXRpb24vaHdtb24vcGM4NzQyNwpAQCAtNSw3ICs1LDcgQEAKICAgKiBOYXRpb25hbCBTZW1pY29uZHVjdG9yIFBDODc0MjcKICAgICBQcmVmaXg6ICdwYzg3NDI3JwogICAgIEFkZHJlc3NlcyBzY2FubmVkOiBub25lLCBhZGRyZXNzIHJlYWQgZnJvbSBTdXBlciBJL08gY29uZmlnIHNwYWNlCi0gICAgRGF0YXNoZWV0OiBodHRwOi8vd3d3LndpbmJvbmQuY29tLnR3L0UtV0lOQk9OREhUTS9wYXJ0bmVyL2FwY18wMDcuaHRtbAorICAgIERhdGFzaGVldDogTm8gbG9uZ2VyIGF2YWlsYWJsZQogCiBBdXRob3I6IEplYW4gRGVsdmFyZSA8a2hhbGlAbGludXgtZnIub3JnPgogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2h3bW9uL3c4Mzc4MWQgYi9Eb2N1bWVudGF0aW9uL2h3bW9uL3c4Mzc4MWQKaW5kZXggNmY4MDBhMC4uYzkxZTBiNiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9od21vbi93ODM3ODFkCisrKyBiL0RvY3VtZW50YXRpb24vaHdtb24vdzgzNzgxZApAQCAtMzUzLDcgKzM1Myw3IEBACiAKICMgUFdNCiAKLUFkZGl0aW9uYWwgaW5mbyBhYm91dCBQV00gb24gdGhlIEFTOTkxMjdGIChtYXkgYXBwbHkgdG8gb3RoZXIgQXN1cworKiBBZGRpdGlvbmFsIGluZm8gYWJvdXQgUFdNIG9uIHRoZSBBUzk5MTI3RiAobWF5IGFwcGx5IHRvIG90aGVyIEFzdXMKIGNoaXBzIGFzIHdlbGwpIGJ5IEplYW4gRGVsdmFyZSBhcyBvZiAyMDA0LTA0LTA5OgogCiBBUzk5MTI3RiByZXZpc2lvbiAyIHNlZW1zIHRvIGhhdmUgdHdvIFBXTSByZWdpc3RlcnMgYXQgMHg1OSBhbmQgMHg1QSwKQEAgLTM5Niw3ICszOTYsNyBAQAogbG9uZyBhcyB3ZSBkb24ndCBrbm93IG1vcmUsIHRoZSB3ODM3ODFkIGRyaXZlciBkb2Vzbid0IGhhbmRsZSBQV00gb24KIEFTOTkxMjdGIGNoaXBzIGF0IGFsbC4KIAotQWRkaXRpb25hbCBpbmZvIGFib3V0IFBXTSBvbiB0aGUgQVM5OTEyN0YgcmV2LjEgYnkgSGVjdG9yIE1hcnRpbjoKKyogQWRkaXRpb25hbCBpbmZvIGFib3V0IFBXTSBvbiB0aGUgQVM5OTEyN0YgcmV2LjEgYnkgSGVjdG9yIE1hcnRpbjoKIAogSSd2ZSBiZWVuIGZpZGRsaW5nIGFyb3VuZCB3aXRoIHRoZSAoaW4pZmFtb3VzIDB4NTkgcmVnaXN0ZXIgYW5kCiBmb3VuZCBvdXQgdGhlIGZvbGxvd2luZyB2YWx1ZXMgZG8gd29yayBhcyBhIGZvcm0gb2YgY29hcnNlIHB3bToKQEAgLTQxOCwzICs0MTgsMzYgQEAKIE15IG1vYm8gaXMgYW4gQVNVUyBBN1YyNjYtRS4gVGhpcyBiZWhhdmlvciBpcyBzaW1pbGFyIHRvIHdoYXQgSSBnb3QKIHdpdGggc3BlZWRmYW4gdW5kZXIgV2luZG93cywgd2hlcmUgMC0xNSUgd291bGQgYmUgb2ZmLCAxNS0yeCUgKGNhbid0CiByZW1lbWJlciB0aGUgZXhhY3QgdmFsdWUpIHdvdWxkIGJlIDcwJSBhbmQgaGlnaGVyIHdvdWxkIGJlIGZ1bGwgb24uCisKKyogQWRkaXRpb25hbCBpbmZvIGFib3V0IFBXTSBvbiB0aGUgQVM5OTEyN0YgcmV2LjEgZnJvbSBsbS1zZW5zb3JzCisgIHRpY2tldCAjMjM1MDoKKworSSBjb25kdWN0ZWQgc29tZSBleHBlcmltZW50IG9uIEFzdXMgUDNCLUYgbW90aGVyYm9hcmQgd2l0aCBBUzk5MTI3RgorKFZlci4gMSkuCisKK0kgY29uZmlybSB0aGF0IDB4NTkgcmVnaXN0ZXIgY29udHJvbCB0aGUgQ1BVX0ZhbiBIZWFkZXIgb24gdGhpcworbW90aGVyYm9hcmQsIGFuZCAweDVhIHJlZ2lzdGVyIGNvbnRyb2wgUFdSX0Zhbi4KKworSW4gb3JkZXIgdG8gcmVkdWNlIHRoZSBkZXBlbmRlbmN5IG9mIHNwZWNpZmljIGZhbiwgdGhlIG1lYXN1cmVtZW50IGlzCitjb25kdWN0ZWQgd2l0aCBhIGRpZ2l0YWwgc2NvcGUgd2l0aG91dCBmYW4gY29ubmVjdGVkLiBJIGZvdW5kIG91dCB0aGF0CitQM0ItRiBhY3R1YWxseSBvdXRwdXQgdmFyaWFibGUgREMgdm9sdGFnZSBvbiBmYW4gaGVhZGVyIGNlbnRlciBwaW4sCitsb29rcyBsaWtlIFBXTSBpcyBmaWx0ZXJlZCBvbiB0aGlzIG1vdGhlcmJvYXJkLgorCitIZXJlIGFyZSBzb21lIG9mIG1lYXN1cmVtZW50czoKKworMHg4MCAgICAgMjAgbVYKKzB4ODEgICAgIDIwIG1WCisweDgyICAgIDIzMiBtVgorMHg4MyAgIDEuMiAgVgorMHg4NCAgIDIuMzEgVgorMHg4NSAgIDMuNDQgVgorMHg4NiAgIDQuNjIgVgorMHg4NyAgIDUuODEgVgorMHg4OCAgIDcuMDEgVgorOXg4OSAgIDguMjIgVgorMHg4YSAgIDkuNDIgVgorMHg4YiAgMTAuNiAgVgorMHg4YyAgMTEuOSAgVgorMHg4ZCAgMTIuNCAgVgorMHg4ZSAgMTIuNCAgVgorMHg4ZiAgMTIuNCAgVgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9od21vbi93ODM3OTFkIGIvRG9jdW1lbnRhdGlvbi9od21vbi93ODM3OTFkCmluZGV4IGE2N2QzYjcuLjU2NjNlNDkgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vaHdtb24vdzgzNzkxZAorKysgYi9Eb2N1bWVudGF0aW9uL2h3bW9uL3c4Mzc5MWQKQEAgLTU4LDI5ICs1OCwzNSBAQAogY3VycmVudGx5IHNlbGVjdGVkKS4gSWYgeW91IGtub3cgdGhlIGFkZHJlc3Mgb2YgdGhlIGNoaXAsIHVzZSBhICdmb3JjZScKIHBhcmFtZXRlcjsgdGhpcyB3aWxsIHB1dCBpdCBpbnRvIGEgbW9yZSB3ZWxsLWJlaGF2ZWQgc3RhdGUgZmlyc3QuCiAKLVRoZSBkcml2ZXIgaW1wbGVtZW50cyB0aHJlZSB0ZW1wZXJhdHVyZSBzZW5zb3JzLCBmaXZlIGZhbiByb3RhdGlvbiBzcGVlZAotc2Vuc29ycywgYW5kIHRlbiB2b2x0YWdlIHNlbnNvcnMuCitUaGUgZHJpdmVyIGltcGxlbWVudHMgdGhyZWUgdGVtcGVyYXR1cmUgc2Vuc29ycywgdGVuIHZvbHRhZ2Ugc2Vuc29ycywKK2ZpdmUgZmFuIHJvdGF0aW9uIHNwZWVkIHNlbnNvcnMgYW5kIG1hbnVhbCBQV00gY29udHJvbCBvZiBlYWNoIGZhbi4KIAogVGVtcGVyYXR1cmVzIGFyZSBtZWFzdXJlZCBpbiBkZWdyZWVzIENlbHNpdXMgYW5kIG1lYXN1cmVtZW50IHJlc29sdXRpb24gaXMgMQogZGVnQyBmb3IgdGVtcDEgYW5kIDAuNSBkZWdDIGZvciB0ZW1wMiBhbmQgdGVtcDMuIEFuIGFsYXJtIGlzIHRyaWdnZXJlZCB3aGVuCiB0aGUgdGVtcGVyYXR1cmUgZ2V0cyBoaWdoZXIgdGhhbiB0aGUgT3ZlcnRlbXBlcmF0dXJlIFNodXRkb3duIHZhbHVlOyBpdCBzdGF5cwogb24gdW50aWwgdGhlIHRlbXBlcmF0dXJlIGZhbGxzIGJlbG93IHRoZSBIeXN0ZXJlc2lzIHZhbHVlLgogCitWb2x0YWdlIHNlbnNvcnMgKGFsc28ga25vd24gYXMgSU4gc2Vuc29ycykgcmVwb3J0IHRoZWlyIHZhbHVlcyBpbiBtaWxsaXZvbHRzLgorQW4gYWxhcm0gaXMgdHJpZ2dlcmVkIGlmIHRoZSB2b2x0YWdlIGhhcyBjcm9zc2VkIGEgcHJvZ3JhbW1hYmxlIG1pbmltdW0KK29yIG1heGltdW0gbGltaXQuCisKIEZhbiByb3RhdGlvbiBzcGVlZHMgYXJlIHJlcG9ydGVkIGluIFJQTSAocm90YXRpb25zIHBlciBtaW51dGUpLiBBbiBhbGFybSBpcwogdHJpZ2dlcmVkIGlmIHRoZSByb3RhdGlvbiBzcGVlZCBoYXMgZHJvcHBlZCBiZWxvdyBhIHByb2dyYW1tYWJsZSBsaW1pdC4gRmFuCiByZWFkaW5ncyBjYW4gYmUgZGl2aWRlZCBieSBhIHByb2dyYW1tYWJsZSBkaXZpZGVyICgxLCAyLCA0LCA4LCAxNiwKIDMyLCA2NCBvciAxMjggZm9yIGFsbCBmYW5zKSB0byBnaXZlIHRoZSByZWFkaW5ncyBtb3JlIHJhbmdlIG9yIGFjY3VyYWN5LgogCi1Wb2x0YWdlIHNlbnNvcnMgKGFsc28ga25vd24gYXMgSU4gc2Vuc29ycykgcmVwb3J0IHRoZWlyIHZhbHVlcyBpbiBtaWxsaXZvbHRzLgotQW4gYWxhcm0gaXMgdHJpZ2dlcmVkIGlmIHRoZSB2b2x0YWdlIGhhcyBjcm9zc2VkIGEgcHJvZ3JhbW1hYmxlIG1pbmltdW0KLW9yIG1heGltdW0gbGltaXQuCitFYWNoIGZhbiBjb250cm9sbGVkIGlzIGNvbnRyb2xsZWQgYnkgUFdNLiBUaGUgUFdNIGR1dHkgY3ljbGUgY2FuIGJlIHJlYWQgYW5kCitzZXQgZm9yIGVhY2ggZmFuIHNlcGFyYXRlbHkuIFZhbGlkIHZhbHVlcyByYW5nZSBmcm9tIDAgKHN0b3ApIHRvIDI1NSAoZnVsbCkuCitQV00gMS0zIHN1cHBvcnQgVGhlcm1hbCBDcnVpc2UgbW9kZSwgaW4gd2hpY2ggdGhlIFBXTXMgYXJlIGF1dG9tYXRpY2FsbHkKK3JlZ3VsYXRlZCB0byBrZWVwIHJlc3BlY3RpdmVseSB0ZW1wIDEtMyBhdCBhIGNlcnRhaW4gdGFyZ2V0IHRlbXBlcmF0dXJlLgorU2VlIGJlbG93IGZvciB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIHN5c2ZzLWludGVyZmFjZS4KIAogVGhlIHc4Mzc5MWQgaGFzIGEgZ2xvYmFsIGJpdCB1c2VkIHRvIGVuYWJsZSBiZWVwaW5nIGZyb20gdGhlIHNwZWFrZXIgd2hlbiBhbgogYWxhcm0gaXMgdHJpZ2dlcmVkIGFzIHdlbGwgYXMgYSBiaXRtYXNrIHRvIGVuYWJsZSBvciBkaXNhYmxlIHRoZSBiZWVwIGZvcgogc3BlY2lmaWMgYWxhcm1zLiBZb3UgbmVlZCBib3RoIHRoZSBnbG9iYWwgYmVlcCBlbmFibGUgYml0IGFuZCB0aGUKIGNvcnJlc3BvbmRpbmcgYmVlcCBiaXQgdG8gYmUgb24gZm9yIGEgdHJpZ2dlcmVkIGFsYXJtIHRvIHNvdW5kIGEgYmVlcC4KIAotVGhlIHN5c2ZzIGludGVyZmFjZSB0byB0aGUgZ2xvYWJhbCBlbmFibGUgaXMgdmlhIHRoZSBzeXNmcyBiZWVwX2VuYWJsZSBmaWxlLgorVGhlIHN5c2ZzIGludGVyZmFjZSB0byB0aGUgZ2xvYmFsIGVuYWJsZSBpcyB2aWEgdGhlIHN5c2ZzIGJlZXBfZW5hYmxlIGZpbGUuCiBUaGlzIGZpbGUgaXMgdXNlZCBmb3IgYm90aCBsZWdhY3kgYW5kIG5ldyBjb2RlLgogCiBUaGUgc3lzZnMgaW50ZXJmYWNlIHRvIHRoZSBiZWVwIGJpdG1hc2sgaGFzIG1pZ3JhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGxlZ2FjeQpAQCAtMTA1LDYgKzExMSwyNyBAQAogVGhlIGRyaXZlciByZWFkcyB0aGUgaGFyZHdhcmUgY2hpcCB2YWx1ZXMgYXQgbW9zdCBvbmNlIGV2ZXJ5IHRocmVlIHNlY29uZHMuCiBVc2VyIG1vZGUgY29kZSByZXF1ZXN0aW5nIHZhbHVlcyBtb3JlIG9mdGVuIHdpbGwgcmVjZWl2ZSBjYWNoZWQgdmFsdWVzLgogCisvc3lzIGZpbGVzCistLS0tLS0tLS0tCitUaGUgc3lzZnMtaW50ZXJmYWNlIGlzIGRvY3VtZW50ZWQgaW4gdGhlICdzeXNmcy1pbnRlcmZhY2UnIGZpbGUuIE9ubHkKK2NoaXAtc3BlY2lmaWMgb3B0aW9ucyBhcmUgZG9jdW1lbnRlZCBoZXJlLgorCitwd21bMS0zXV9lbmFibGUgLQl0aGlzIGZpbGUgY29udHJvbHMgbW9kZSBvZiBmYW4vdGVtcGVyYXR1cmUgY29udHJvbCBmb3IKKwkJCWZhbiAxLTMuIEZhbi9QV00gNC01IG9ubHkgc3VwcG9ydCBtYW51YWwgbW9kZS4KKwkJICAgICAgICAgICAgKiAxIE1hbnVhbCBtb2RlCisJCSAgICAgICAgICAgICogMiBUaGVybWFsIENydWlzZSBtb2RlCisJCSAgICAgICAgICAgICogMyBGYW4gU3BlZWQgQ3J1aXNlIG1vZGUgKG5vIGZ1cnRoZXIgc3VwcG9ydCkKKwordGVtcFsxLTNdX3RhcmdldCAtCWRlZmluZXMgdGhlIHRhcmdldCB0ZW1wZXJhdHVyZSBmb3IgVGhlcm1hbCBDcnVpc2UgbW9kZS4KKwkJCVVuaXQ6IG1pbGxpZGVncmVlIENlbHNpdXMKKwkJCVJXCisKK3RlbXBbMS0zXV90b2xlcmFuY2UgLQl0ZW1wZXJhdHVyZSB0b2xlcmFuY2UgZm9yIFRoZXJtYWwgQ3J1aXNlIG1vZGUuCisJCQlTcGVjaWZpZXMgYW4gaW50ZXJ2YWwgYXJvdW5kIHRoZSB0YXJnZXQgdGVtcGVyYXR1cmUKKwkJCWluIHdoaWNoIHRoZSBmYW4gc3BlZWQgaXMgbm90IGNoYW5nZWQuCisJCQlVbml0OiBtaWxsaWRlZ3JlZSBDZWxzaXVzCisJCQlSVworCiBBbGFybXMgYml0bWFwIHZzLiBiZWVwX21hc2sgYml0bWFzawogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBGb3IgbGVnYWN5IGNvZGUgdXNpbmcgdGhlIGFsYXJtcyBhbmQgYmVlcF9tYXNrIGZpbGVzOgpAQCAtMTMyLDcgKzE1OSwzIEBACiB0YXJ0MyAgICAgICAgOiAgYWxhcm1zOiAweDA0MDAwMCBiZWVwX21hc2s6IDB4MTAwMDAwIDw9PSBtaXNtYXRjaAogY2FzZV9vcGVuICAgIDogIGFsYXJtczogMHgwMDEwMDAgYmVlcF9tYXNrOiAweDAwMTAwMAogZ2xvYmFsX2VuYWJsZTogIGFsYXJtczogLS0tLS0tLS0gYmVlcF9tYXNrOiAweDgwMDAwMCAobW9kaWZpZWQgdmlhIGJlZXBfZW5hYmxlKQotCi1XODM3OTFEIFRPRE86Ci0tLS0tLS0tLS0tLS0tLS0KLVByb3ZpZGUgYSBwYXRjaCBmb3Igc21hcnQtZmFuIGNvbnRyb2wgKHN0aWxsIG5lZWQgYXBwcm9wcmlhdGUgbW90aGVyYm9hcmQvZmFucykKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaTJjL2J1c3Nlcy9pMmMtdmlhcHJvIGIvRG9jdW1lbnRhdGlvbi9pMmMvYnVzc2VzL2kyYy12aWFwcm8KaW5kZXggMTQwNWZiNi4uMjJlZmVkZiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9pMmMvYnVzc2VzL2kyYy12aWFwcm8KKysrIGIvRG9jdW1lbnRhdGlvbi9pMmMvYnVzc2VzL2kyYy12aWFwcm8KQEAgLTE2LDYgKzE2LDkgQEAKICAgKiBWSUEgVGVjaG5vbG9naWVzLCBJbmMuIENYNzAwCiAgICAgRGF0YXNoZWV0OiBhdmFpbGFibGUgb24gcmVxdWVzdCBhbmQgdW5kZXIgTkRBIGZyb20gVklBCiAKKyAgKiBWSUEgVGVjaG5vbG9naWVzLCBJbmMuIFZYODAwL1ZYODIwCisgICAgRGF0YXNoZWV0OiBhdmFpbGFibGUgb24gaHR0cDovL2xpbnV4LnZpYS5jb20udHcKKwogQXV0aG9yczoKIAlLecO2c3RpIE3DpGxra2kgPGttYWxra2lAY2MuaHV0LmZpPiwKIAlNYXJrIEQuIFN0dWRlYmFrZXIgPG1kc3h5ejEyM0B5YWhvby5jb20+LApAQCAtNDksNiArNTIsNyBAQAogIGRldmljZSAxMTA2OjMzNzIgICAoVlQ4MjM3UykKICBkZXZpY2UgMTEwNjozMjg3ICAgKFZUODI1MSkKICBkZXZpY2UgMTEwNjo4MzI0ICAgKENYNzAwKQorIGRldmljZSAxMTA2OjgzNTMgICAoVlg4MDAvVlg4MjApCiAKIElmIG5vbmUgb2YgdGhlc2Ugc2hvdyB1cCwgeW91IHNob3VsZCBsb29rIGluIHRoZSBCSU9TIGZvciBzZXR0aW5ncyBsaWtlCiBlbmFibGUgQUNQSSAvIFNNQnVzIG9yIGV2ZW4gVVNCLgpAQCAtNTcsNSArNjEsNSBAQAogVlQ4MjMxKSwgdGhpcyBkcml2ZXIgc3VwcG9ydHMgSTJDIGJsb2NrIHRyYW5zYWN0aW9ucy4gU3VjaCB0cmFuc2FjdGlvbnMKIGFyZSBtYWlubHkgdXNlZnVsIHRvIHJlYWQgZnJvbSBhbmQgd3JpdGUgdG8gRUVQUk9Ncy4KIAotVGhlIENYNzAwIGFkZGl0aW9uYWxseSBhcHBlYXJzIHRvIHN1cHBvcnQgU01CdXMgUEVDLCBhbHRob3VnaCB0aGlzIGRyaXZlcgotZG9lc24ndCBpbXBsZW1lbnQgaXQgeWV0LgorVGhlIENYNzAwL1ZYODAwL1ZYODIwIGFkZGl0aW9uYWxseSBhcHBlYXJzIHRvIHN1cHBvcnQgU01CdXMgUEVDLCBhbHRob3VnaAordGhpcyBkcml2ZXIgZG9lc24ndCBpbXBsZW1lbnQgaXQgeWV0LgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9pMmMvZGV2LWludGVyZmFjZSBiL0RvY3VtZW50YXRpb24vaTJjL2Rldi1pbnRlcmZhY2UKaW5kZXggOWRkNzkxMi4uM2U3NDJiYSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9pMmMvZGV2LWludGVyZmFjZQorKysgYi9Eb2N1bWVudGF0aW9uL2kyYy9kZXYtaW50ZXJmYWNlCkBAIC00LDYgKzQsMTAgQEAKIAogRWFjaCByZWdpc3RlcmVkIGkyYyBhZGFwdGVyIGdldHMgYSBudW1iZXIsIGNvdW50aW5nIGZyb20gMC4gWW91IGNhbgogZXhhbWluZSAvc3lzL2NsYXNzL2kyYy1kZXYvIHRvIHNlZSB3aGF0IG51bWJlciBjb3JyZXNwb25kcyB0byB3aGljaCBhZGFwdGVyLgorQWx0ZXJuYXRpdmVseSwgeW91IGNhbiBydW4gImkyY2RldGVjdCAtbCIgdG8gb2J0YWluIGEgZm9ybWF0ZWQgbGlzdCBvZiBhbGwKK2kyYyBhZGFwdGVycyBwcmVzZW50IG9uIHlvdXIgc3lzdGVtIGF0IGEgZ2l2ZW4gdGltZS4gaTJjZGV0ZWN0IGlzIHBhcnQgb2YKK3RoZSBpMmMtdG9vbHMgcGFja2FnZS4KKwogSTJDIGRldmljZSBmaWxlcyBhcmUgY2hhcmFjdGVyIGRldmljZSBmaWxlcyB3aXRoIG1ham9yIGRldmljZSBudW1iZXIgODkKIGFuZCBhIG1pbm9yIGRldmljZSBudW1iZXIgY29ycmVzcG9uZGluZyB0byB0aGUgbnVtYmVyIGFzc2lnbmVkIGFzIAogZXhwbGFpbmVkIGFib3ZlLiBUaGV5IHNob3VsZCBiZSBjYWxsZWQgImkyYy0lZCIgKGkyYy0wLCBpMmMtMSwgLi4uLCAKQEAgLTE3LDMwICsyMSwzNCBAQAogZmlyc3QgdGhpbmcgdG8gZG8gaXMgIiNpbmNsdWRlIDxsaW51eC9pMmMtZGV2Lmg+Ii4gUGxlYXNlIG5vdGUgdGhhdAogdGhlcmUgYXJlIHR3byBmaWxlcyBuYW1lZCAiaTJjLWRldi5oIiBvdXQgdGhlcmUsIG9uZSBpcyBkaXN0cmlidXRlZAogd2l0aCB0aGUgTGludXgga2VybmVsIGFuZCBpcyBtZWFudCB0byBiZSBpbmNsdWRlZCBmcm9tIGtlcm5lbAotZHJpdmVyIGNvZGUsIHRoZSBvdGhlciBvbmUgaXMgZGlzdHJpYnV0ZWQgd2l0aCBsbV9zZW5zb3JzIGFuZCBpcworZHJpdmVyIGNvZGUsIHRoZSBvdGhlciBvbmUgaXMgZGlzdHJpYnV0ZWQgd2l0aCBpMmMtdG9vbHMgYW5kIGlzCiBtZWFudCB0byBiZSBpbmNsdWRlZCBmcm9tIHVzZXItc3BhY2UgcHJvZ3JhbXMuIFlvdSBvYnZpb3VzbHkgd2FudAogdGhlIHNlY29uZCBvbmUgaGVyZS4KIAogTm93LCB5b3UgaGF2ZSB0byBkZWNpZGUgd2hpY2ggYWRhcHRlciB5b3Ugd2FudCB0byBhY2Nlc3MuIFlvdSBzaG91bGQKLWluc3BlY3QgL3N5cy9jbGFzcy9pMmMtZGV2LyB0byBkZWNpZGUgdGhpcy4gQWRhcHRlciBudW1iZXJzIGFyZSBhc3NpZ25lZAotc29tZXdoYXQgZHluYW1pY2FsbHksIHNvIHlvdSBjYW4gbm90IGV2ZW4gYXNzdW1lIC9kZXYvaTJjLTAgaXMgdGhlCi1maXJzdCBhZGFwdGVyLgoraW5zcGVjdCAvc3lzL2NsYXNzL2kyYy1kZXYvIG9yIHJ1biAiaTJjZGV0ZWN0IC1sIiB0byBkZWNpZGUgdGhpcy4KK0FkYXB0ZXIgbnVtYmVycyBhcmUgYXNzaWduZWQgc29tZXdoYXQgZHluYW1pY2FsbHksIHNvIHlvdSBjYW4gbm90Cithc3N1bWUgbXVjaCBhYm91dCB0aGVtLiBUaGV5IGNhbiBldmVuIGNoYW5nZSBmcm9tIG9uZSBib290IHRvIHRoZSBuZXh0LgogCiBOZXh0IHRoaW5nLCBvcGVuIHRoZSBkZXZpY2UgZmlsZSwgYXMgZm9sbG93czoKKwogICBpbnQgZmlsZTsKICAgaW50IGFkYXB0ZXJfbnIgPSAyOyAvKiBwcm9iYWJseSBkeW5hbWljYWxseSBkZXRlcm1pbmVkICovCiAgIGNoYXIgZmlsZW5hbWVbMjBdOwogICAKLSAgc3ByaW50ZihmaWxlbmFtZSwiL2Rldi9pMmMtJWQiLGFkYXB0ZXJfbnIpOwotICBpZiAoKGZpbGUgPSBvcGVuKGZpbGVuYW1lLE9fUkRXUikpIDwgMCkgeworICBzbnByaW50ZihmaWxlbmFtZSwgMTksICIvZGV2L2kyYy0lZCIsIGFkYXB0ZXJfbnIpOworICBmaWxlID0gb3BlbihmaWxlbmFtZSwgT19SRFdSKTsKKyAgaWYgKGZpbGUgPCAwKSB7CiAgICAgLyogRVJST1IgSEFORExJTkc7IHlvdSBjYW4gY2hlY2sgZXJybm8gdG8gc2VlIHdoYXQgd2VudCB3cm9uZyAqLwogICAgIGV4aXQoMSk7CiAgIH0KIAogV2hlbiB5b3UgaGF2ZSBvcGVuZWQgdGhlIGRldmljZSwgeW91IG11c3Qgc3BlY2lmeSB3aXRoIHdoYXQgZGV2aWNlCiBhZGRyZXNzIHlvdSB3YW50IHRvIGNvbW11bmljYXRlOgorCiAgIGludCBhZGRyID0gMHg0MDsgLyogVGhlIEkyQyBhZGRyZXNzICovCi0gIGlmIChpb2N0bChmaWxlLEkyQ19TTEFWRSxhZGRyKSA8IDApIHsKKworICBpZiAoaW9jdGwoZmlsZSwgSTJDX1NMQVZFLCBhZGRyKSA8IDApIHsKICAgICAvKiBFUlJPUiBIQU5ETElORzsgeW91IGNhbiBjaGVjayBlcnJubyB0byBzZWUgd2hhdCB3ZW50IHdyb25nICovCiAgICAgZXhpdCgxKTsKICAgfQpAQCAtNDgsMzEgKzU2LDQxIEBACiBXZWxsLCB5b3UgYXJlIGFsbCBzZXQgdXAgbm93LiBZb3UgY2FuIG5vdyB1c2UgU01CdXMgY29tbWFuZHMgb3IgcGxhaW4KIEkyQyB0byBjb21tdW5pY2F0ZSB3aXRoIHlvdXIgZGV2aWNlLiBTTUJ1cyBjb21tYW5kcyBhcmUgcHJlZmVycmVkIGlmCiB0aGUgZGV2aWNlIHN1cHBvcnRzIHRoZW0uIEJvdGggYXJlIGlsbHVzdHJhdGVkIGJlbG93LgorCiAgIF9fdTggcmVnaXN0ZXIgPSAweDEwOyAvKiBEZXZpY2UgcmVnaXN0ZXIgdG8gYWNjZXNzICovCiAgIF9fczMyIHJlczsKICAgY2hhciBidWZbMTBdOworCiAgIC8qIFVzaW5nIFNNQnVzIGNvbW1hbmRzICovCi0gIHJlcyA9IGkyY19zbWJ1c19yZWFkX3dvcmRfZGF0YShmaWxlLHJlZ2lzdGVyKTsKKyAgcmVzID0gaTJjX3NtYnVzX3JlYWRfd29yZF9kYXRhKGZpbGUsIHJlZ2lzdGVyKTsKICAgaWYgKHJlcyA8IDApIHsKICAgICAvKiBFUlJPUiBIQU5ETElORzogaTJjIHRyYW5zYWN0aW9uIGZhaWxlZCAqLwogICB9IGVsc2UgewogICAgIC8qIHJlcyBjb250YWlucyB0aGUgcmVhZCB3b3JkICovCiAgIH0KKwogICAvKiBVc2luZyBJMkMgV3JpdGUsIGVxdWl2YWxlbnQgb2YgCi0gICAgICAgICAgIGkyY19zbWJ1c193cml0ZV93b3JkX2RhdGEoZmlsZSxyZWdpc3RlciwweDY1NDMpICovCisgICAgIGkyY19zbWJ1c193cml0ZV93b3JkX2RhdGEoZmlsZSwgcmVnaXN0ZXIsIDB4NjU0MykgKi8KICAgYnVmWzBdID0gcmVnaXN0ZXI7CiAgIGJ1ZlsxXSA9IDB4NDM7CiAgIGJ1ZlsyXSA9IDB4NjU7Ci0gIGlmICggd3JpdGUoZmlsZSxidWYsMykgIT0gMykgeworICBpZiAod3JpdGUoZmlsZSwgYnVmLCAzKSAhID0zKSB7CiAgICAgLyogRVJST1IgSEFORExJTkc6IGkyYyB0cmFuc2FjdGlvbiBmYWlsZWQgKi8KICAgfQorCiAgIC8qIFVzaW5nIEkyQyBSZWFkLCBlcXVpdmFsZW50IG9mIGkyY19zbWJ1c19yZWFkX2J5dGUoZmlsZSkgKi8KLSAgaWYgKHJlYWQoZmlsZSxidWYsMSkgIT0gMSkgeworICBpZiAocmVhZChmaWxlLCBidWYsIDEpICE9IDEpIHsKICAgICAvKiBFUlJPUiBIQU5ETElORzogaTJjIHRyYW5zYWN0aW9uIGZhaWxlZCAqLwogICB9IGVsc2UgewogICAgIC8qIGJ1ZlswXSBjb250YWlucyB0aGUgcmVhZCBieXRlICovCiAgIH0KIAorTm90ZSB0aGF0IG9ubHkgYSBzdWJzZXQgb2YgdGhlIEkyQyBhbmQgU01CdXMgcHJvdG9jb2xzIGNhbiBiZSBhY2hpZXZlZCBieQordGhlIG1lYW5zIG9mIHJlYWQoKSBhbmQgd3JpdGUoKSBjYWxscy4gSW4gcGFydGljdWxhciwgc28tY2FsbGVkIGNvbWJpbmVkCit0cmFuc2FjdGlvbnMgKG1peGluZyByZWFkIGFuZCB3cml0ZSBtZXNzYWdlcyBpbiB0aGUgc2FtZSB0cmFuc2FjdGlvbikKK2FyZW4ndCBzdXBwb3J0ZWQuIEZvciB0aGlzIHJlYXNvbiwgdGhpcyBpbnRlcmZhY2UgaXMgYWxtb3N0IG5ldmVyIHVzZWQgYnkKK3VzZXItc3BhY2UgcHJvZ3JhbXMuCisKIElNUE9SVEFOVDogYmVjYXVzZSBvZiB0aGUgdXNlIG9mIGlubGluZSBmdW5jdGlvbnMsIHlvdSAqaGF2ZSogdG8gdXNlCiAnLU8nIG9yIHNvbWUgdmFyaWF0aW9uIHdoZW4geW91IGNvbXBpbGUgeW91ciBwcm9ncmFtIQogCkBAIC04MCwzMSArOTgsMjkgQEAKIEZ1bGwgaW50ZXJmYWNlIGRlc2NyaXB0aW9uCiA9PT09PT09PT09PT09PT09PT09PT09PT09PQogCi1UaGUgZm9sbG93aW5nIElPQ1RMcyBhcmUgZGVmaW5lZCBhbmQgZnVsbHkgc3VwcG9ydGVkIAotKHNlZSBhbHNvIGkyYy1kZXYuaCk6CitUaGUgZm9sbG93aW5nIElPQ1RMcyBhcmUgZGVmaW5lZDoKIAotaW9jdGwoZmlsZSxJMkNfU0xBVkUsbG9uZyBhZGRyKQoraW9jdGwoZmlsZSwgSTJDX1NMQVZFLCBsb25nIGFkZHIpCiAgIENoYW5nZSBzbGF2ZSBhZGRyZXNzLiBUaGUgYWRkcmVzcyBpcyBwYXNzZWQgaW4gdGhlIDcgbG93ZXIgYml0cyBvZiB0aGUKICAgYXJndW1lbnQgKGV4Y2VwdCBmb3IgMTAgYml0IGFkZHJlc3NlcywgcGFzc2VkIGluIHRoZSAxMCBsb3dlciBiaXRzIGluIHRoaXMKICAgY2FzZSkuCiAKLWlvY3RsKGZpbGUsSTJDX1RFTkJJVCxsb25nIHNlbGVjdCkKK2lvY3RsKGZpbGUsIEkyQ19URU5CSVQsIGxvbmcgc2VsZWN0KQogICBTZWxlY3RzIHRlbiBiaXQgYWRkcmVzc2VzIGlmIHNlbGVjdCBub3QgZXF1YWxzIDAsIHNlbGVjdHMgbm9ybWFsIDcgYml0CiAgIGFkZHJlc3NlcyBpZiBzZWxlY3QgZXF1YWxzIDAuIERlZmF1bHQgMC4gIFRoaXMgcmVxdWVzdCBpcyBvbmx5IHZhbGlkCiAgIGlmIHRoZSBhZGFwdGVyIGhhcyBJMkNfRlVOQ18xMEJJVF9BRERSLgogCi1pb2N0bChmaWxlLEkyQ19QRUMsbG9uZyBzZWxlY3QpCitpb2N0bChmaWxlLCBJMkNfUEVDLCBsb25nIHNlbGVjdCkKICAgU2VsZWN0cyBTTUJ1cyBQRUMgKHBhY2tldCBlcnJvciBjaGVja2luZykgZ2VuZXJhdGlvbiBhbmQgdmVyaWZpY2F0aW9uCiAgIGlmIHNlbGVjdCBub3QgZXF1YWxzIDAsIGRpc2FibGVzIGlmIHNlbGVjdCBlcXVhbHMgMC4gRGVmYXVsdCAwLgogICBVc2VkIG9ubHkgZm9yIFNNQnVzIHRyYW5zYWN0aW9ucy4gIFRoaXMgcmVxdWVzdCBvbmx5IGhhcyBhbiBlZmZlY3QgaWYgdGhlCiAgIHRoZSBhZGFwdGVyIGhhcyBJMkNfRlVOQ19TTUJVU19QRUM7IGl0IGlzIHN0aWxsIHNhZmUgaWYgbm90LCBpdCBqdXN0CiAgIGRvZXNuJ3QgaGF2ZSBhbnkgZWZmZWN0LgogCi1pb2N0bChmaWxlLEkyQ19GVU5DUyx1bnNpZ25lZCBsb25nICpmdW5jcykKK2lvY3RsKGZpbGUsIEkyQ19GVU5DUywgdW5zaWduZWQgbG9uZyAqZnVuY3MpCiAgIEdldHMgdGhlIGFkYXB0ZXIgZnVuY3Rpb25hbGl0eSBhbmQgcHV0cyBpdCBpbiAqZnVuY3MuCiAKLWlvY3RsKGZpbGUsSTJDX1JEV1Isc3RydWN0IGkyY19yZHdyX2lvY3RsX2RhdGEgKm1zZ3NldCkKLQoraW9jdGwoZmlsZSwgSTJDX1JEV1IsIHN0cnVjdCBpMmNfcmR3cl9pb2N0bF9kYXRhICptc2dzZXQpCiAgIERvIGNvbWJpbmVkIHJlYWQvd3JpdGUgdHJhbnNhY3Rpb24gd2l0aG91dCBzdG9wIGluIGJldHdlZW4uCiAgIE9ubHkgdmFsaWQgaWYgdGhlIGFkYXB0ZXIgaGFzIEkyQ19GVU5DX0kyQy4gIFRoZSBhcmd1bWVudCBpcwogICBhIHBvaW50ZXIgdG8gYQpAQCAtMTIwLDEwICsxMzYsOSBAQAogICBUaGUgc2xhdmUgYWRkcmVzcyBhbmQgd2hldGhlciB0byB1c2UgdGVuIGJpdCBhZGRyZXNzIG1vZGUgaGFzIHRvIGJlCiAgIHNldCBpbiBlYWNoIG1lc3NhZ2UsIG92ZXJyaWRpbmcgdGhlIHZhbHVlcyBzZXQgd2l0aCB0aGUgYWJvdmUgaW9jdGwncy4KIAotCi1PdGhlciB2YWx1ZXMgYXJlIE5PVCBzdXBwb3J0ZWQgYXQgdGhpcyBtb21lbnQsIGV4Y2VwdCBmb3IgSTJDX1NNQlVTLAotd2hpY2ggeW91IHNob3VsZCBuZXZlciBkaXJlY3RseSBjYWxsOyBpbnN0ZWFkLCB1c2UgdGhlIGFjY2VzcyBmdW5jdGlvbnMKLWJlbG93LgoraW9jdGwoZmlsZSwgSTJDX1NNQlVTLCBzdHJ1Y3QgaTJjX3NtYnVzX2lvY3RsX2RhdGEgKmFyZ3MpCisgIE5vdCBtZWFudCB0byBiZSBjYWxsZWQgIGRpcmVjdGx5OyBpbnN0ZWFkLCB1c2UgdGhlIGFjY2VzcyBmdW5jdGlvbnMKKyAgYmVsb3cuCiAKIFlvdSBjYW4gZG8gcGxhaW4gaTJjIHRyYW5zYWN0aW9ucyBieSB1c2luZyByZWFkKDIpIGFuZCB3cml0ZSgyKSBjYWxscy4KIFlvdSBkbyBub3QgbmVlZCB0byBwYXNzIHRoZSBhZGRyZXNzIGJ5dGU7IGluc3RlYWQsIHNldCBpdCB0aHJvdWdoCkBAIC0xNDgsNyArMTYzLDUyIEBACiByZXR1cm5zIHRoZSBudW1iZXIgb2YgdmFsdWVzIHJlYWQuIFRoZSBibG9jayBidWZmZXJzIG5lZWQgbm90IGJlIGxvbmdlcgogdGhhbiAzMiBieXRlcy4KIAotVGhlIGFib3ZlIGZ1bmN0aW9ucyBhcmUgYWxsIG1hY3JvcywgdGhhdCByZXNvbHZlIHRvIGNhbGxzIHRvIHRoZQotaTJjX3NtYnVzX2FjY2VzcyBmdW5jdGlvbiwgdGhhdCBvbiBpdHMgdHVybiBjYWxscyBhIHNwZWNpZmljIGlvY3RsCitUaGUgYWJvdmUgZnVuY3Rpb25zIGFyZSBhbGwgaW5saW5lIGZ1bmN0aW9ucywgdGhhdCByZXNvbHZlIHRvIGNhbGxzIHRvCit0aGUgaTJjX3NtYnVzX2FjY2VzcyBmdW5jdGlvbiwgdGhhdCBvbiBpdHMgdHVybiBjYWxscyBhIHNwZWNpZmljIGlvY3RsCiB3aXRoIHRoZSBkYXRhIGluIGEgc3BlY2lmaWMgZm9ybWF0LiBSZWFkIHRoZSBzb3VyY2UgY29kZSBpZiB5b3UKIHdhbnQgdG8ga25vdyB3aGF0IGhhcHBlbnMgYmVoaW5kIHRoZSBzY3JlZW5zLgorCisKK0ltcGxlbWVudGF0aW9uIGRldGFpbHMKKz09PT09PT09PT09PT09PT09PT09PT0KKworRm9yIHRoZSBpbnRlcmVzdGVkLCBoZXJlJ3MgdGhlIGNvZGUgZmxvdyB3aGljaCBoYXBwZW5zIGluc2lkZSB0aGUga2VybmVsCit3aGVuIHlvdSB1c2UgdGhlIC9kZXYgaW50ZXJmYWNlIHRvIEkyQzoKKworMSogWW91ciBwcm9ncmFtIG9wZW5zIC9kZXYvaTJjLU4gYW5kIGNhbGxzIGlvY3RsKCkgb24gaXQsIGFzIGRlc2NyaWJlZCBpbgorc2VjdGlvbiAiQyBleGFtcGxlIiBhYm92ZS4KKworMiogVGhlc2Ugb3BlbigpIGFuZCBpb2N0bCgpIGNhbGxzIGFyZSBoYW5kbGVkIGJ5IHRoZSBpMmMtZGV2IGtlcm5lbAorZHJpdmVyOiBzZWUgaTJjLWRldi5jOmkyY2Rldl9vcGVuKCkgYW5kIGkyYy1kZXYuYzppMmNkZXZfaW9jdGwoKSwKK3Jlc3BlY3RpdmVseS4gWW91IGNhbiB0aGluayBvZiBpMmMtZGV2IGFzIGEgZ2VuZXJpYyBJMkMgY2hpcCBkcml2ZXIKK3RoYXQgY2FuIGJlIHByb2dyYW1tZWQgZnJvbSB1c2VyLXNwYWNlLgorCiszKiBTb21lIGlvY3RsKCkgY2FsbHMgYXJlIGZvciBhZG1pbmlzdHJhdGl2ZSB0YXNrcyBhbmQgYXJlIGhhbmRsZWQgYnkKK2kyYy1kZXYgZGlyZWN0bHkuIEV4YW1wbGVzIGluY2x1ZGUgSTJDX1NMQVZFIChzZXQgdGhlIGFkZHJlc3Mgb2YgdGhlCitkZXZpY2UgeW91IHdhbnQgdG8gYWNjZXNzKSBhbmQgSTJDX1BFQyAoZW5hYmxlIG9yIGRpc2FibGUgU01CdXMgZXJyb3IKK2NoZWNraW5nIG9uIGZ1dHVyZSB0cmFuc2FjdGlvbnMuKQorCis0KiBPdGhlciBpb2N0bCgpIGNhbGxzIGFyZSBjb252ZXJ0ZWQgdG8gaW4ta2VybmVsIGZ1bmN0aW9uIGNhbGxzIGJ5CitpMmMtZGV2LiBFeGFtcGxlcyBpbmNsdWRlIEkyQ19GVU5DUywgd2hpY2ggcXVlcmllcyB0aGUgSTJDIGFkYXB0ZXIKK2Z1bmN0aW9uYWxpdHkgdXNpbmcgaTJjLmg6aTJjX2dldF9mdW5jdGlvbmFsaXR5KCksIGFuZCBJMkNfU01CVVMsIHdoaWNoCitwZXJmb3JtcyBhbiBTTUJ1cyB0cmFuc2FjdGlvbiB1c2luZyBpMmMtY29yZS5jOmkyY19zbWJ1c194ZmVyKCkuCisKK1RoZSBpMmMtZGV2IGRyaXZlciBpcyByZXNwb25zaWJsZSBmb3IgY2hlY2tpbmcgYWxsIHRoZSBwYXJhbWV0ZXJzIHRoYXQKK2NvbWUgZnJvbSB1c2VyLXNwYWNlIGZvciB2YWxpZGl0eS4gQWZ0ZXIgdGhpcyBwb2ludCwgdGhlcmUgaXMgbm8KK2RpZmZlcmVuY2UgYmV0d2VlbiB0aGVzZSBjYWxscyB0aGF0IGNhbWUgZnJvbSB1c2VyLXNwYWNlIHRocm91Z2ggaTJjLWRldgorYW5kIGNhbGxzIHRoYXQgd291bGQgaGF2ZSBiZWVuIHBlcmZvcm1lZCBieSBrZXJuZWwgSTJDIGNoaXAgZHJpdmVycworZGlyZWN0bHkuIFRoaXMgbWVhbnMgdGhhdCBJMkMgYnVzIGRyaXZlcnMgZG9uJ3QgbmVlZCB0byBpbXBsZW1lbnQKK2FueXRoaW5nIHNwZWNpYWwgdG8gc3VwcG9ydCBhY2Nlc3MgZnJvbSB1c2VyLXNwYWNlLgorCis1KiBUaGVzZSBpMmMtY29yZS5jL2kyYy5oIGZ1bmN0aW9ucyBhcmUgd3JhcHBlcnMgdG8gdGhlIGFjdHVhbAoraW1wbGVtZW50YXRpb24gb2YgeW91ciBJMkMgYnVzIGRyaXZlci4gRWFjaCBhZGFwdGVyIG11c3QgZGVjbGFyZQorY2FsbGJhY2sgZnVuY3Rpb25zIGltcGxlbWVudGluZyB0aGVzZSBzdGFuZGFyZCBjYWxscy4KK2kyYy5oOmkyY19nZXRfZnVuY3Rpb25hbGl0eSgpIGNhbGxzIGkyY19hZGFwdGVyLmFsZ28tPmZ1bmN0aW9uYWxpdHkoKSwKK3doaWxlIGkyYy1jb3JlLmM6aTJjX3NtYnVzX3hmZXIoKSBjYWxscyBlaXRoZXIKK2FkYXB0ZXIuYWxnby0+c21idXNfeGZlcigpIGlmIGl0IGlzIGltcGxlbWVudGVkLCBvciBpZiBub3QsCitpMmMtY29yZS5jOmkyY19zbWJ1c194ZmVyX2VtdWxhdGVkKCkgd2hpY2ggaW4gdHVybiBjYWxscworaTJjX2FkYXB0ZXIuYWxnby0+bWFzdGVyX3hmZXIoKS4KKworQWZ0ZXIgeW91ciBJMkMgYnVzIGRyaXZlciBoYXMgcHJvY2Vzc2VkIHRoZXNlIHJlcXVlc3RzLCBleGVjdXRpb24gcnVucwordXAgdGhlIGNhbGwgY2hhaW4sIHdpdGggYWxtb3N0IG5vIHByb2Nlc3NpbmcgZG9uZSwgZXhjZXB0IGJ5IGkyYy1kZXYgdG8KK3BhY2thZ2UgdGhlIHJldHVybmVkIGRhdGEsIGlmIGFueSwgaW4gc3VpdGFibGUgZm9ybWF0IGZvciB0aGUgaW9jdGwuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2kyYy9zbWJ1cy1wcm90b2NvbCBiL0RvY3VtZW50YXRpb24vaTJjL3NtYnVzLXByb3RvY29sCmluZGV4IDI0YmZiNjVkLi45ZGY0NzQ0IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2kyYy9zbWJ1cy1wcm90b2NvbAorKysgYi9Eb2N1bWVudGF0aW9uL2kyYy9zbWJ1cy1wcm90b2NvbApAQCAtMTA5LDggKzEwOSw4IEBACiBTIEFkZHIgV3IgW0FdIENvbW0gW0FdIERhdGFMb3cgW0FdIERhdGFIaWdoIFtBXSBQCiAKIAotU01CdXMgUHJvY2VzcyBDYWxsCi09PT09PT09PT09PT09PT09PT0KK1NNQnVzIFByb2Nlc3MgQ2FsbDogIGkyY19zbWJ1c19wcm9jZXNzX2NhbGwoKQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKIFRoaXMgY29tbWFuZCBzZWxlY3RzIGEgZGV2aWNlIHJlZ2lzdGVyICh0aHJvdWdoIHRoZSBDb21tIGJ5dGUpLCBzZW5kcwogMTYgYml0cyBvZiBkYXRhIHRvIGl0LCBhbmQgcmVhZHMgMTYgYml0cyBvZiBkYXRhIGluIHJldHVybi4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaTJjL3dyaXRpbmctY2xpZW50cyBiL0RvY3VtZW50YXRpb24vaTJjL3dyaXRpbmctY2xpZW50cwppbmRleCA2YjYxYjNhLi5kNzNlZTExIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2kyYy93cml0aW5nLWNsaWVudHMKKysrIGIvRG9jdW1lbnRhdGlvbi9pMmMvd3JpdGluZy1jbGllbnRzCkBAIC02MDYsNiArNjA2LDggQEAKICAgZXh0ZXJuIHMzMiBpMmNfc21idXNfcmVhZF93b3JkX2RhdGEoc3RydWN0IGkyY19jbGllbnQgKiBjbGllbnQsIHU4IGNvbW1hbmQpOwogICBleHRlcm4gczMyIGkyY19zbWJ1c193cml0ZV93b3JkX2RhdGEoc3RydWN0IGkyY19jbGllbnQgKiBjbGllbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1OCBjb21tYW5kLCB1MTYgdmFsdWUpOworICBleHRlcm4gczMyIGkyY19zbWJ1c19wcm9jZXNzX2NhbGwoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHU4IGNvbW1hbmQsIHUxNiB2YWx1ZSk7CiAgIGV4dGVybiBzMzIgaTJjX3NtYnVzX3JlYWRfYmxvY2tfZGF0YShzdHJ1Y3QgaTJjX2NsaWVudCAqIGNsaWVudCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHU4IGNvbW1hbmQsIHU4ICp2YWx1ZXMpOwogICBleHRlcm4gczMyIGkyY19zbWJ1c193cml0ZV9ibG9ja19kYXRhKHN0cnVjdCBpMmNfY2xpZW50ICogY2xpZW50LApAQCAtNjIxLDggKzYyMyw2IEBACiBiZSBhZGRlZCBiYWNrIGxhdGVyIGlmIG5lZWRlZDoKIAogICBleHRlcm4gczMyIGkyY19zbWJ1c193cml0ZV9xdWljayhzdHJ1Y3QgaTJjX2NsaWVudCAqIGNsaWVudCwgdTggdmFsdWUpOwotICBleHRlcm4gczMyIGkyY19zbWJ1c19wcm9jZXNzX2NhbGwoc3RydWN0IGkyY19jbGllbnQgKiBjbGllbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1OCBjb21tYW5kLCB1MTYgdmFsdWUpOwogICBleHRlcm4gczMyIGkyY19zbWJ1c19ibG9ja19wcm9jZXNzX2NhbGwoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHU4IGNvbW1hbmQsIHU4IGxlbmd0aCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHU4ICp2YWx1ZXMpCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2lhNjQva3ZtLnR4dCBiL0RvY3VtZW50YXRpb24vaWE2NC9rdm0udHh0CmluZGV4IDkxNGQwN2YuLjg0ZjdjYjMgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vaWE2NC9rdm0udHh0CisrKyBiL0RvY3VtZW50YXRpb24vaWE2NC9rdm0udHh0CkBAIC0xLDcgKzEsOCBAQAotQ3VycmVudGx5LCBrdm0gbW9kdWxlIGluIEVYUEVSSU1FTlRBTCBzdGFnZSBvbiBJQTY0LiBUaGlzIG1lYW5zIHRoYXQKLWludGVyZmFjZXMgYXJlIG5vdCBzdGFibGUgZW5vdWdoIHRvIHVzZS4gU28sIHBsYXNlIGhhZCBiZXR0ZXIgZG9uJ3QgcnVuCi1jcml0aWNhbCBhcHBsaWNhdGlvbnMgaW4gdmlydHVhbCBtYWNoaW5lLiBXZSB3aWxsIHRyeSBvdXIgYmVzdCB0byBtYWtlIGl0Ci1zdHJvbmcgaW4gZnV0dXJlIHZlcnNpb25zIQorQ3VycmVudGx5LCBrdm0gbW9kdWxlIGlzIGluIEVYUEVSSU1FTlRBTCBzdGFnZSBvbiBJQTY0LiBUaGlzIG1lYW5zIHRoYXQKK2ludGVyZmFjZXMgYXJlIG5vdCBzdGFibGUgZW5vdWdoIHRvIHVzZS4gU28sIHBsZWFzZSBkb24ndCBydW4gY3JpdGljYWwKK2FwcGxpY2F0aW9ucyBpbiB2aXJ0dWFsIG1hY2hpbmUuCitXZSB3aWxsIHRyeSBvdXIgYmVzdCB0byBpbXByb3ZlIGl0IGluIGZ1dHVyZSB2ZXJzaW9ucyEKKwogCQkJCUd1aWRlOiBIb3cgdG8gYm9vdCB1cCBndWVzdHMgb24ga3ZtL2lhNjQKIAogVGhpcyBndWlkZSBpcyB0byBkZXNjcmliZSBob3cgdG8gZW5hYmxlIGt2bSBzdXBwb3J0IGZvciBJQS02NCBzeXN0ZW1zLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9pb2N0bC1udW1iZXIudHh0IGIvRG9jdW1lbnRhdGlvbi9pb2N0bC1udW1iZXIudHh0CmluZGV4IDFjNmI1NDUuLmI4ODBjZTUgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vaW9jdGwtbnVtYmVyLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2lvY3RsLW51bWJlci50eHQKQEAgLTkyLDYgKzkyLDcgQEAKICdKJwkwMC0xRglkcml2ZXJzL3Njc2kvZ2R0aF9pb2N0bC5oCiAnSycJYWxsCWxpbnV4L2tkLmgKICdMJwkwMC0xRglsaW51eC9sb29wLmgKKydMJwkyMC0yRglkcml2ZXIvdXNiL21pc2MvdnN0dXNiLmgKICdMJwlFMC1GRglsaW51eC9wcGRkLmgJCWVuY3J5cHRlZCBkaXNrIGRldmljZSBkcml2ZXIKIAkJCQkJPGh0dHA6Ly9saW51eDAxLmd3ZGcuZGUvfmFsYXRoYW0vcHBkZC5odG1sPgogJ00nCWFsbAlsaW51eC9zb3VuZGNhcmQuaApAQCAtMTEwLDYgKzExMSw4IEBACiAnVycJMDAtMUYJbGludXgvd2Fucm91dGVyLmgJY29uZmxpY3QhCiAnWCcJYWxsCWxpbnV4L3hmc19mcy5oCiAnWScJYWxsCWxpbnV4L2N5Y2xhZGVzLmgKKydbJwkwMC0wNwlsaW51eC91c2IvdXNidG1jLmgJVVNCIFRlc3QgYW5kIE1lYXN1cmVtZW50IERldmljZXMKKwkJCQkJPG1haWx0bzpncmVna2hAc3VzZS5kZT4KICdhJwlhbGwJCQkJQVRNIG9uIGxpbnV4CiAJCQkJCTxodHRwOi8vbHJjd3d3LmVwZmwuY2gvbGludXgtYXRtL21hZ2ljLmh0bWw+CiAnYicJMDAtRkYJCQkJYml0MyB2bWUgaG9zdCBicmlkZ2UKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24va2VybmVsLXBhcmFtZXRlcnMudHh0IGIvRG9jdW1lbnRhdGlvbi9rZXJuZWwtcGFyYW1ldGVycy50eHQKaW5kZXggMjQ0M2Y1Yi4uMGYxNTQ0ZiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9rZXJuZWwtcGFyYW1ldGVycy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9rZXJuZWwtcGFyYW1ldGVycy50eHQKQEAgLTY5MCw3ICs2OTAsNyBAQAogCQkJU2VlIERvY3VtZW50YXRpb24vYmxvY2svYXMtaW9zY2hlZC50eHQgYW5kCiAJCQlEb2N1bWVudGF0aW9uL2Jsb2NrL2RlYWRsaW5lLWlvc2NoZWQudHh0IGZvciBkZXRhaWxzLgogCi0JZWxmY29yZWhkcj0JW1g4Ni0zMiwgWDg2XzY0XQorCWVsZmNvcmVoZHI9CVtJQTY0LFBQQyxTSCxYODYtMzIsWDg2XzY0XQogCQkJU3BlY2lmaWVzIHBoeXNpY2FsIGFkZHJlc3Mgb2Ygc3RhcnQgb2Yga2VybmVsIGNvcmUKIAkJCWltYWdlIGVsZiBoZWFkZXIuIEdlbmVyYWxseSBrZXhlYyBsb2FkZXIgd2lsbAogCQkJcGFzcyB0aGlzIG9wdGlvbiB0byBjYXB0dXJlIGtlcm5lbC4KQEAgLTc5Niw2ICs3OTYsOSBAQAogCQkJRGVmYXVsdHMgdG8gdGhlIGRlZmF1bHQgYXJjaGl0ZWN0dXJlJ3MgaHVnZSBwYWdlIHNpemUKIAkJCWlmIG5vdCBzcGVjaWZpZWQuCiAKKwlobHQJCVtCVUdTPUFSTSxTSF0KKworCWk4MDQyLmRlYnVnCVtIV10gVG9nZ2xlIGk4MDQyIGRlYnVnIG1vZGUKIAlpODA0Mi5kaXJlY3QJW0hXXSBQdXQga2V5Ym9hcmQgcG9ydCBpbnRvIG5vbi10cmFuc2xhdGVkIG1vZGUKIAlpODA0Mi5kdW1ia2JkCVtIV10gUHJldGVuZCB0aGF0IGNvbnRyb2xsZXIgY2FuIG9ubHkgcmVhZCBkYXRhIGZyb20KIAkJCSAgICAga2V5Ym9hcmQgYW5kIGNhbm5vdCBjb250cm9sIGl0cyBzdGF0ZQpAQCAtMTIxMCw2ICsxMjEzLDEwIEBACiAJbWVtPW5vcGVudGl1bQlbQlVHUz1YODYtMzJdIERpc2FibGUgdXNhZ2Ugb2YgNE1CIHBhZ2VzIGZvciBrZXJuZWwKIAkJCW1lbW9yeS4KIAorCW1lbWNodW5rPW5uW0tNR10KKwkJCVtLTkwsU0hdIEFsbG93IHVzZXIgdG8gb3ZlcnJpZGUgdGhlIGRlZmF1bHQgc2l6ZSBmb3IKKwkJCXBlci1kZXZpY2UgcGh5c2ljYWxseSBjb250aWd1b3VzIERNQSBidWZmZXJzLgorCiAJbWVtbWFwPWV4YWN0bWFwCVtLTkwsWDg2LTMyLFg4Nl82NF0gRW5hYmxlIHNldHRpbmcgb2YgYW4gZXhhY3QKIAkJCUU4MjAgbWVtb3J5IG1hcCwgYXMgc3BlY2lmaWVkIGJ5IHRoZSB1c2VyLgogCQkJU3VjaCBtZW1tYXA9ZXhhY3RtYXAgbGluZXMgY2FuIGJlIGNvbnN0cnVjdGVkIGJhc2VkIG9uCkBAIC0xMzkyLDYgKzEzOTksOCBAQAogCiAJbm9kaXNjb25uZWN0CVtIVyxTQ1NJLE02OEtdIERpc2FibGVzIFNDU0kgZGlzY29ubmVjdHMuCiAKKwlub2RzcAkJW1NIXSBEaXNhYmxlIGhhcmR3YXJlIERTUCBhdCBib290IHRpbWUuCisKIAlub2VmaQkJW1g4Ni0zMixYODYtNjRdIERpc2FibGUgRUZJIHJ1bnRpbWUgc2VydmljZXMgc3VwcG9ydC4KIAogCW5vZXhlYwkJW0lBLTY0XQpAQCAtMTQwOCwxMyArMTQxNywxNSBAQAogCQkJbm9leGVjMzI9b2ZmOiBkaXNhYmxlIG5vbi1leGVjdXRhYmxlIG1hcHBpbmdzCiAJCQkJcmVhZCBpbXBsaWVzIGV4ZWN1dGFibGUgbWFwcGluZ3MKIAorCW5vZnB1CQlbU0hdIERpc2FibGUgaGFyZHdhcmUgRlBVIGF0IGJvb3QgdGltZS4KKwogCW5vZnhzcgkJW0JVR1M9WDg2LTMyXSBEaXNhYmxlcyB4ODYgZmxvYXRpbmcgcG9pbnQgZXh0ZW5kZWQKIAkJCXJlZ2lzdGVyIHNhdmUgYW5kIHJlc3RvcmUuIFRoZSBrZXJuZWwgd2lsbCBvbmx5IHNhdmUKIAkJCWxlZ2FjeSBmbG9hdGluZy1wb2ludCByZWdpc3RlcnMgb24gdGFzayBzd2l0Y2guCiAKIAlub2NsZmx1c2gJW0JVR1M9WDg2XSBEb24ndCB1c2UgdGhlIENMRkxVU0ggaW5zdHJ1Y3Rpb24KIAotCW5vaGx0CQlbQlVHUz1BUk1dCisJbm9obHQJCVtCVUdTPUFSTSxTSF0KIAogCW5vLWhsdAkJW0JVR1M9WDg2LTMyXSBUZWxscyB0aGUga2VybmVsIHRoYXQgdGhlIGhsdAogCQkJaW5zdHJ1Y3Rpb24gZG9lc24ndCB3b3JrIGNvcnJlY3RseSBhbmQgbm90IHRvCkBAIC0xNzEzLDYgKzE3MjQsMTEgQEAKIAkJCWF1dG9jb25maWd1cmF0aW9uLgogCQkJUmFuZ2VzIGFyZSBpbiBwYWlycyAobWVtb3J5IGJhc2UgYW5kIHNpemUpLgogCisJZHluYW1pY19wcmludGsKKwkJCUVuYWJsZXMgcHJfZGVidWcoKS9kZXZfZGJnKCkgY2FsbHMgaWYKKwkJCUNPTkZJR19EWU5BTUlDX1BSSU5US19ERUJVRyBoYXMgYmVlbiBlbmFibGVkLiBUaGVzZSBjYW4gYWxzbworCQkJYmUgc3dpdGNoZWQgb24vb2ZmIHZpYSA8ZGVidWdmcz4vZHluYW1pY19wcmludGsvbW9kdWxlcworCiAJcHJpbnQtZmF0YWwtc2lnbmFscz0KIAkJCVtLTkxdIGRlYnVnOiBwcmludCBmYXRhbCBzaWduYWxzCiAJCQlwcmludC1mYXRhbC1zaWduYWxzPTE6IHByaW50IHNlZ2ZhdWx0IGluZm8gdG8KQEAgLTIyNDcsNiArMjI2MywyNSBAQAogCQkJYXV0b3N1c3BlbmRlZC4gIERldmljZXMgZm9yIHdoaWNoIHRoZSBkZWxheSBpcyBzZXQKIAkJCXRvIGEgbmVnYXRpdmUgdmFsdWUgd29uJ3QgYmUgYXV0b3N1c3BlbmRlZCBhdCBhbGwuCiAKKwl1c2Jjb3JlLnVzYmZzX3Nub29wPQorCQkJW1VTQl0gU2V0IHRvIGxvZyBhbGwgdXNiZnMgdHJhZmZpYyAoZGVmYXVsdCAwID0gb2ZmKS4KKworCXVzYmNvcmUuYmxpbmtlbmxpZ2h0cz0KKwkJCVtVU0JdIFNldCB0byBjeWNsZSBsZWRzIG9uIGh1YnMgKGRlZmF1bHQgMCA9IG9mZikuCisKKwl1c2Jjb3JlLm9sZF9zY2hlbWVfZmlyc3Q9CisJCQlbVVNCXSBTdGFydCB3aXRoIHRoZSBvbGQgZGV2aWNlIGluaXRpYWxpemF0aW9uCisJCQlzY2hlbWUgKGRlZmF1bHQgMCA9IG9mZikuCisKKwl1c2Jjb3JlLnVzZV9ib3RoX3NjaGVtZXM9CisJCQlbVVNCXSBUcnkgdGhlIG90aGVyIGRldmljZSBpbml0aWFsaXphdGlvbiBzY2hlbWUKKwkJCWlmIHRoZSBmaXJzdCBvbmUgZmFpbHMgKGRlZmF1bHQgMSA9IGVuYWJsZWQpLgorCisJdXNiY29yZS5pbml0aWFsX2Rlc2NyaXB0b3JfdGltZW91dD0KKwkJCVtVU0JdIFNwZWNpZmllcyB0aW1lb3V0IGZvciB0aGUgaW5pdGlhbCA2NC1ieXRlCisgICAgICAgICAgICAgICAgICAgICAgICBVU0JfUkVRX0dFVF9ERVNDUklQVE9SIHJlcXVlc3QgaW4gbWlsbGlzZWNvbmRzCisJCQkoZGVmYXVsdCA1MDAwID0gNS4wIHNlY29uZHMpLgorCiAJdXNiaGlkLm1vdXNlcG9sbD0KIAkJCVtVU0JISURdIFRoZSBpbnRlcnZhbCB3aGljaCBtaWNlIGFyZSB0byBiZSBwb2xsZWQgYXQuCiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24va29iamVjdC50eHQgYi9Eb2N1bWVudGF0aW9uL2tvYmplY3QudHh0CmluZGV4IDUxYTgwMjEuLmY1ZDJhYWQgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24va29iamVjdC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9rb2JqZWN0LnR4dApAQCAtMTE4LDYgKzExOCwxMCBAQAogCiAgICAgaW50IGtvYmplY3RfcmVuYW1lKHN0cnVjdCBrb2JqZWN0ICprb2JqLCBjb25zdCBjaGFyICpuZXdfbmFtZSk7CiAKK05vdGUga29iamVjdF9yZW5hbWUgZG9lcyBwZXJmb3JtIGFueSBsb2NraW5nIG9yIGhhdmUgYSBzb2xpZCBub3Rpb24gb2YKK3doYXQgbmFtZXMgYXJlIHZhbGlkIHNvIHRoZSBwcm92aWRlIG11c3QgcHJvdmlkZSB0aGVpciBvd24gc2FuaXR5IGNoZWNraW5nCithbmQgc2VyaWFsaXphdGlvbi4KKwogVGhlcmUgaXMgYSBmdW5jdGlvbiBjYWxsZWQga29iamVjdF9zZXRfbmFtZSgpIGJ1dCB0aGF0IGlzIGxlZ2FjeSBjcnVmdCBhbmQKIGlzIGJlaW5nIHJlbW92ZWQuICBJZiB5b3VyIGNvZGUgbmVlZHMgdG8gY2FsbCB0aGlzIGZ1bmN0aW9uLCBpdCBpcwogaW5jb3JyZWN0IGFuZCBuZWVkcyB0byBiZSBmaXhlZC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbGFwdG9wcy9kaXNrLXNob2NrLXByb3RlY3Rpb24udHh0IGIvRG9jdW1lbnRhdGlvbi9sYXB0b3BzL2Rpc2stc2hvY2stcHJvdGVjdGlvbi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGU2YmEyNgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vbGFwdG9wcy9kaXNrLXNob2NrLXByb3RlY3Rpb24udHh0CkBAIC0wLDAgKzEsMTQ5IEBACitIYXJkIGRpc2sgc2hvY2sgcHJvdGVjdGlvbgorPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworQXV0aG9yOiBFbGlhcyBPbHRtYW5ucyA8ZW9AbmViZW5zYWNoZW4uZGU+CitMYXN0IG1vZGlmaWVkOiAyMDA4LTEwLTAzCisKKworMC4gQ29udGVudHMKKy0tLS0tLS0tLS0tCisKKzEuIEludHJvCisyLiBUaGUgaW50ZXJmYWNlCiszLiBSZWZlcmVuY2VzCis0LiBDUkVESVRTCisKKworMS4gSW50cm8KKy0tLS0tLS0tCisKK0FUQS9BVEFQSS03IHNwZWNpZmllcyB0aGUgSURMRSBJTU1FRElBVEUgY29tbWFuZCB3aXRoIHVubG9hZCBmZWF0dXJlLgorSXNzdWluZyB0aGlzIGNvbW1hbmQgc2hvdWxkIGNhdXNlIHRoZSBkcml2ZSB0byBzd2l0Y2ggdG8gaWRsZSBtb2RlIGFuZAordW5sb2FkIGRpc2sgaGVhZHMuIFRoaXMgZmVhdHVyZSBpcyBiZWluZyB1c2VkIGluIG1vZGVybiBsYXB0b3BzIGluCitjb25qdW5jdGlvbiB3aXRoIGFjY2VsZXJvbWV0ZXJzIGFuZCBhcHByb3ByaWF0ZSBzb2Z0d2FyZSB0byBpbXBsZW1lbnQKK2Egc2hvY2sgcHJvdGVjdGlvbiBmYWNpbGl0eS4gVGhlIGlkZWEgaXMgdG8gc3RvcCBhbGwgSS9PIG9wZXJhdGlvbnMgb24KK3RoZSBpbnRlcm5hbCBoYXJkIGRyaXZlIGFuZCBwYXJrIGl0cyBoZWFkcyBvbiB0aGUgcmFtcCB3aGVuIGNyaXRpY2FsCitzaXR1YXRpb25zIGFyZSBhbnRpY2lwYXRlZC4gVGhlIGRlc2lyZSB0byBoYXZlIHN1Y2ggYSBmZWF0dXJlCithdmFpbGFibGUgb24gR05VL0xpbnV4IHN5c3RlbXMgaGFzIGJlZW4gdGhlIG9yaWdpbmFsIG1vdGl2YXRpb24gdG8KK2ltcGxlbWVudCBhIGdlbmVyaWMgZGlzayBoZWFkIHBhcmtpbmcgaW50ZXJmYWNlIGluIHRoZSBMaW51eCBrZXJuZWwuCitQbGVhc2Ugbm90ZSwgaG93ZXZlciwgdGhhdCBvdGhlciBjb21wb25lbnRzIGhhdmUgdG8gYmUgc2V0IHVwIG9uIHlvdXIKK3N5c3RlbSBpbiBvcmRlciB0byBnZXQgZGlzayBzaG9jayBwcm90ZWN0aW9uIHdvcmtpbmcgKHNlZQorc2VjdGlvbiAzLiBSZWZlcmVuY2VzIGJlbG93IGZvciBwb2ludGVycyB0byBtb3JlIGluZm9ybWF0aW9uIGFib3V0Cit0aGF0KS4KKworCisyLiBUaGUgaW50ZXJmYWNlCistLS0tLS0tLS0tLS0tLS0tCisKK0ZvciBlYWNoIEFUQSBkZXZpY2UsIHRoZSBrZXJuZWwgZXhwb3J0cyB0aGUgZmlsZQorYmxvY2svKi9kZXZpY2UvdW5sb2FkX2hlYWRzIGluIHN5c2ZzIChoZXJlIGFzc3VtZWQgdG8gYmUgbW91bnRlZCB1bmRlcgorL3N5cykuIEFjY2VzcyB0byAvc3lzL2Jsb2NrLyovZGV2aWNlL3VubG9hZF9oZWFkcyBpcyBkZW5pZWQgd2l0aAorLUVPUE5PVFNVUFAgaWYgdGhlIGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoZSB1bmxvYWQgZmVhdHVyZS4KK090aGVyd2lzZSwgd3JpdGluZyBhbiBpbnRlZ2VyIHZhbHVlIHRvIHRoaXMgZmlsZSB3aWxsIHRha2UgdGhlIGhlYWRzCitvZiB0aGUgcmVzcGVjdGl2ZSBkcml2ZSBvZmYgdGhlIHBsYXR0ZXIgYW5kIGJsb2NrIGFsbCBJL08gb3BlcmF0aW9ucworZm9yIHRoZSBzcGVjaWZpZWQgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcy4gV2hlbiB0aGUgdGltZW91dCBleHBpcmVzIGFuZAorbm8gZnVydGhlciBkaXNrIGhlYWQgcGFyayByZXF1ZXN0IGhhcyBiZWVuIGlzc3VlZCBpbiB0aGUgbWVhbnRpbWUsCitub3JtYWwgb3BlcmF0aW9uIHdpbGwgYmUgcmVzdW1lZC4gVGhlIG1heGltYWwgdmFsdWUgYWNjZXB0ZWQgZm9yIGEKK3RpbWVvdXQgaXMgMzAwMDAgbWlsbGlzZWNvbmRzLiBFeGNlZWRpbmcgdGhpcyBsaW1pdCB3aWxsIHJldHVybgorLUVPVkVSRkxPVywgYnV0IGhlYWRzIHdpbGwgYmUgcGFya2VkIGFueXdheSBhbmQgdGhlIHRpbWVvdXQgd2lsbCBiZQorc2V0IHRvIDMwIHNlY29uZHMuIEhvd2V2ZXIsIHlvdSBjYW4gYWx3YXlzIGNoYW5nZSBhIHRpbWVvdXQgdG8gYW55Cit2YWx1ZSBiZXR3ZWVuIDAgYW5kIDMwMDAwIGJ5IGlzc3VpbmcgYSBzdWJzZXF1ZW50IGhlYWQgcGFyayByZXF1ZXN0CitiZWZvcmUgdGhlIHRpbWVvdXQgb2YgdGhlIHByZXZpb3VzIG9uZSBoYXMgZXhwaXJlZC4gSW4gcGFydGljdWxhciwgdGhlCit0b3RhbCB0aW1lb3V0IGNhbiBleGNlZWQgMzAgc2Vjb25kcyBhbmQsIG1vcmUgaW1wb3J0YW50bHksIHlvdSBjYW4KK2NhbmNlbCBhIHByZXZpb3VzbHkgc2V0IHRpbWVvdXQgYW5kIHJlc3VtZSBub3JtYWwgb3BlcmF0aW9uCitpbW1lZGlhdGVseSBieSBzcGVjaWZ5aW5nIGEgdGltZW91dCBvZiAwLiBWYWx1ZXMgYmVsb3cgLTIgYXJlIHJlamVjdGVkCit3aXRoIC1FSU5WQUwgKHNlZSBiZWxvdyBmb3IgdGhlIHNwZWNpYWwgbWVhbmluZyBvZiAtMSBhbmQgLTIpLiBJZiB0aGUKK3RpbWVvdXQgc3BlY2lmaWVkIGZvciBhIHJlY2VudCBoZWFkIHBhcmsgcmVxdWVzdCBoYXMgbm90IHlldCBleHBpcmVkLAorcmVhZGluZyBmcm9tIC9zeXMvYmxvY2svKi9kZXZpY2UvdW5sb2FkX2hlYWRzIHdpbGwgcmVwb3J0IHRoZSBudW1iZXIKK29mIG1pbGxpc2Vjb25kcyByZW1haW5pbmcgdW50aWwgbm9ybWFsIG9wZXJhdGlvbiB3aWxsIGJlIHJlc3VtZWQ7CitvdGhlcndpc2UsIHJlYWRpbmcgdGhlIHVubG9hZF9oZWFkcyBhdHRyaWJ1dGUgd2lsbCByZXR1cm4gMC4KKworRm9yIGV4YW1wbGUsIGRvIHRoZSBmb2xsb3dpbmcgaW4gb3JkZXIgdG8gcGFyayB0aGUgaGVhZHMgb2YgZHJpdmUKKy9kZXYvc2RhIGFuZCBzdG9wIGFsbCBJL08gb3BlcmF0aW9ucyBmb3IgZml2ZSBzZWNvbmRzOgorCisjIGVjaG8gNTAwMCA+IC9zeXMvYmxvY2svc2RhL2RldmljZS91bmxvYWRfaGVhZHMKKworQSBzaW1wbGUKKworIyBjYXQgL3N5cy9ibG9jay9zZGEvZGV2aWNlL3VubG9hZF9oZWFkcworCit3aWxsIHNob3cgeW91IGhvdyBtYW55IG1pbGxpc2Vjb25kcyBhcmUgbGVmdCBiZWZvcmUgbm9ybWFsIG9wZXJhdGlvbgord2lsbCBiZSByZXN1bWVkLgorCitBIHdvcmQgb2YgY2F1dGlvbjogVGhlIGZhY3QgdGhhdCB0aGUgaW50ZXJmYWNlIG9wZXJhdGVzIG9uIGEgYmFzaXMgb2YKK21pbGxpc2Vjb25kcyBtYXkgcmFpc2UgZXhwZWN0YXRpb25zIHRoYXQgY2Fubm90IGJlIHNhdGlzZmllZCBpbgorcmVhbGl0eS4gSW4gZmFjdCwgdGhlIEFUQSBzcGVjcyBjbGVhcmx5IHN0YXRlIHRoYXQgdGhlIHRpbWUgZm9yIGFuCit1bmxvYWQgb3BlcmF0aW9uIHRvIGNvbXBsZXRlIGlzIHZlbmRvciBzcGVjaWZpYy4gVGhlIGhpbnQgaW4gQVRBLTcKK3RoYXQgdGhpcyB3aWxsIHR5cGljYWxseSBiZSB3aXRoaW4gNTAwIG1pbGxpc2Vjb25kcyBhcHBhcmVudGx5IGhhcworYmVlbiBkcm9wcGVkIGluIEFUQS04LgorCitUaGVyZSBpcyBhIHRlY2huaWNhbCBkZXRhaWwgb2YgdGhpcyBpbXBsZW1lbnRhdGlvbiB0aGF0IG1heSBjYXVzZSBzb21lCitjb25mdXNpb24gYW5kIHNob3VsZCBiZSBkaXNjdXNzZWQgaGVyZS4gV2hlbiBhIGhlYWQgcGFyayByZXF1ZXN0IGhhcworYmVlbiBpc3N1ZWQgdG8gYSBkZXZpY2Ugc3VjY2Vzc2Z1bGx5LCBhbGwgSS9PIG9wZXJhdGlvbnMgb24gdGhlCitjb250cm9sbGVyIHBvcnQgdGhpcyBkZXZpY2UgaXMgYXR0YWNoZWQgdG8gd2lsbCBiZSBkZWZlcnJlZC4gVGhhdCBpcwordG8gc2F5LCBhbnkgb3RoZXIgZGV2aWNlIHRoYXQgbWF5IGJlIGNvbm5lY3RlZCB0byB0aGUgc2FtZSBwb3J0IHdpbGwKK2JlIGFmZmVjdGVkIHRvby4gVGhlIG9ubHkgZXhjZXB0aW9uIGlzIHRoYXQgYSBzdWJzZXF1ZW50IGhlYWQgdW5sb2FkCityZXF1ZXN0IHRvIHRoYXQgb3RoZXIgZGV2aWNlIHdpbGwgYmUgZXhlY3V0ZWQgaW1tZWRpYXRlbHkuIEZ1cnRoZXIKK29wZXJhdGlvbnMgb24gdGhhdCBwb3J0IHdpbGwgYmUgZGVmZXJyZWQgdW50aWwgdGhlIHRpbWVvdXQgc3BlY2lmaWVkCitmb3IgZWl0aGVyIGRldmljZSBvbiB0aGUgcG9ydCBoYXMgZXhwaXJlZC4gQXMgZmFyIGFzIFBBVEEgKG9sZCBzdHlsZQorSURFKSBjb25maWd1cmF0aW9ucyBhcmUgY29uY2VybmVkLCB0aGVyZSBjYW4gb25seSBiZSB0d28gZGV2aWNlcworYXR0YWNoZWQgdG8gYW55IHNpbmdsZSBwb3J0LiBJbiBTQVRBIHdvcmxkIHdlIGhhdmUgcG9ydCBtdWx0aXBsaWVycword2hpY2ggbWVhbnMgdGhhdCBhIHVzZXItaXNzdWVkIGhlYWQgcGFya2luZyByZXF1ZXN0IHRvIG9uZSBkZXZpY2UgbWF5CithY3R1YWxseSByZXN1bHQgaW4gc3RvcHBpbmcgSS9PIHRvIGEgd2hvbGUgYnVuY2ggb2YgZGV2aWNlcy4gSG93ZXZlciwKK3NpbmNlIHRoaXMgZmVhdHVyZSBpcyBzdXBwb3NlZCB0byBiZSB1c2VkIG9uIGxhcHRvcHMgYW5kIGRvZXMgbm90IHNlZW0KK3RvIGJlIHZlcnkgdXNlZnVsIGluIGFueSBvdGhlciBlbnZpcm9ubWVudCwgdGhlcmUgd2lsbCBiZSBtb3N0bHkgb25lCitkZXZpY2UgcGVyIHBvcnQuIEV2ZW4gaWYgdGhlIENEL0RWRCB3cml0ZXIgaGFwcGVucyB0byBiZSBjb25uZWN0ZWQgdG8KK3RoZSBzYW1lIHBvcnQgYXMgdGhlIGhhcmQgZHJpdmUsIGl0IGdlbmVyYWxseSAqc2hvdWxkKiByZWNvdmVyIGp1c3QKK2ZpbmUgZnJvbSB0aGUgb2NjYXNpb25hbCBidWZmZXIgdW5kZXItcnVuIGluY3VycmVkIGJ5IGEgaGVhZCBwYXJrCityZXF1ZXN0IHRvIHRoZSBIRC4gQWN0dWFsbHksIHdoZW4geW91IGFyZSB1c2luZyBhbiBpZGUgZHJpdmVyIHJhdGhlcgordGhhbiBpdHMgbGliYXRhIGNvdW50ZXJwYXJ0IChpLmUuIHlvdXIgZGlzayBpcyBjYWxsZWQgL2Rldi9oZGEKK2luc3RlYWQgb2YgL2Rldi9zZGEpLCB0aGVuIHBhcmtpbmcgdGhlIGhlYWRzIG9mIG9uZSBkcml2ZSAoZHJpdmUgWCkKK3dpbGwgZ2VuZXJhbGx5IG5vdCBhZmZlY3QgdGhlIG1vZGUgb2Ygb3BlcmF0aW9uIG9mIGFub3RoZXIgZHJpdmUKKyhkcml2ZSBZKSBvbiB0aGUgc2FtZSBwb3J0IGFzIGRlc2NyaWJlZCBhYm92ZS4gSXQgaXMgb25seSB3aGVuIGEgcG9ydAorcmVzZXQgaXMgcmVxdWlyZWQgdG8gcmVjb3ZlciBmcm9tIGFuIGV4Y2VwdGlvbiBvbiBkcml2ZSBZIHRoYXQgZnVydGhlcgorSS9PIG9wZXJhdGlvbnMgb24gdGhhdCBkcml2ZSAoYW5kIHRoZSByZXNldCBpdHNlbGYpIHdpbGwgYmUgZGVsYXllZAordW50aWwgZHJpdmUgWCBpcyBubyBsb25nZXIgaW4gdGhlIHBhcmtlZCBzdGF0ZS4KKworRmluYWxseSwgdGhlcmUgYXJlIHNvbWUgaGFyZCBkcml2ZXMgdGhhdCBvbmx5IGNvbXBseSB3aXRoIGFuIGVhcmxpZXIKK3ZlcnNpb24gb2YgdGhlIEFUQSBzdGFuZGFyZCB0aGFuIEFUQS03LCBidXQgZG8gc3VwcG9ydCB0aGUgdW5sb2FkCitmZWF0dXJlIG5vbmV0aGVsZXNzLiBVbmZvcnR1bmF0ZWx5LCB0aGVyZSBpcyBubyBzYWZlIHdheSBMaW51eCBjYW4KK2RldGVjdCB0aGVzZSBkZXZpY2VzLCBzbyB5b3Ugd29uJ3QgYmUgYWJsZSB0byB3cml0ZSB0byB0aGUKK3VubG9hZF9oZWFkcyBhdHRyaWJ1dGUuIElmIHlvdSBrbm93IHRoYXQgeW91ciBkZXZpY2UgcmVhbGx5IGRvZXMKK3N1cHBvcnQgdGhlIHVubG9hZCBmZWF0dXJlIChmb3IgaW5zdGFuY2UsIGJlY2F1c2UgdGhlIHZlbmRvciBvZiB5b3VyCitsYXB0b3Agb3IgdGhlIGhhcmQgZHJpdmUgaXRzZWxmIHRvbGQgeW91IHNvKSwgdGhlbiB5b3UgY2FuIHRlbGwgdGhlCitrZXJuZWwgdG8gZW5hYmxlIHRoZSB1c2FnZSBvZiB0aGlzIGZlYXR1cmUgZm9yIHRoYXQgZHJpdmUgYnkgd3JpdGluZwordGhlIHNwZWNpYWwgdmFsdWUgLTEgdG8gdGhlIHVubG9hZF9oZWFkcyBhdHRyaWJ1dGU6CisKKyMgZWNobyAtMSA+IC9zeXMvYmxvY2svc2RhL2RldmljZS91bmxvYWRfaGVhZHMKKword2lsbCBlbmFibGUgdGhlIGZlYXR1cmUgZm9yIC9kZXYvc2RhLCBhbmQgZ2l2aW5nIC0yIGluc3RlYWQgb2YgLTEgd2lsbAorZGlzYWJsZSBpdCBhZ2Fpbi4KKworCiszLiBSZWZlcmVuY2VzCistLS0tLS0tLS0tLS0tCisKK1RoZXJlIGFyZSBzZXZlcmFsIGxhcHRvcHMgZnJvbSBkaWZmZXJlbnQgdmVuZG9ycyBmZWF0dXJpbmcgc2hvY2sKK3Byb3RlY3Rpb24gY2FwYWJpbGl0aWVzLiBBcyBtYW51ZmFjdHVyZXJzIGhhdmUgcmVmdXNlZCB0byBzdXBwb3J0IG9wZW4KK3NvdXJjZSBkZXZlbG9wbWVudCBvZiB0aGUgcmVxdWlyZWQgc29mdHdhcmUgY29tcG9uZW50cyBzbyBmYXIsIExpbnV4CitzdXBwb3J0IGZvciBzaG9jayBwcm90ZWN0aW9uIHZhcmllcyBjb25zaWRlcmFibHkgYmV0d2VlbiBkaWZmZXJlbnQKK2hhcmR3YXJlIGltcGxlbWVudGF0aW9ucy4gSWRlYWxseSwgdGhpcyBzZWN0aW9uIHNob3VsZCBjb250YWluIGEgbGlzdAorb2YgcG9pbnRlcnMgYXQgZGlmZmVyZW50IHByb2plY3RzIGFpbWluZyBhdCBhbiBpbXBsZW1lbnRhdGlvbiBvZiBzaG9jaworcHJvdGVjdGlvbiBvbiBkaWZmZXJlbnQgc3lzdGVtcy4gVW5mb3J0dW5hdGVseSwgSSBvbmx5IGtub3cgb2YgYQorc2luZ2xlIHByb2plY3Qgd2hpY2gsIGFsdGhvdWdoIHN0aWxsIGNvbnNpZGVyZWQgZXhwZXJpbWVudGFsLCBpcyBmaXQKK2ZvciB1c2UuIFBsZWFzZSBmZWVsIGZyZWUgdG8gYWRkIHByb2plY3RzIHRoYXQgaGF2ZSBiZWVuIHRoZSB2aWN0aW1zCitvZiBteSBpZ25vcmFuY2UuCisKKy0gaHR0cDovL3d3dy50aGlua3dpa2kub3JnL3dpa2kvSERBUFMKKyAgU2VlIHRoaXMgcGFnZSBmb3IgaW5mb3JtYXRpb24gYWJvdXQgTGludXggc3VwcG9ydCBvZiB0aGUgaGFyZCBkaXNrCisgIGFjdGl2ZSBwcm90ZWN0aW9uIHN5c3RlbSBhcyBpbXBsZW1lbnRlZCBpbiBJQk0vTGVub3ZvIFRoaW5rcGFkcy4KKworCis0LiBDUkVESVRTCistLS0tLS0tLS0tCisKK1RoaXMgaW1wbGVtZW50YXRpb24gb2YgZGlzayBoZWFkIHBhcmtpbmcgaGFzIGJlZW4gaW5zcGlyZWQgYnkgYSBwYXRjaAorb3JpZ2luYWxseSBwdWJsaXNoZWQgYnkgSm9uIEVzY29tYmUgPGxpc3RzQGRyZXNjby5jby51az4uIE15IGVmZm9ydHMKK3RvIGRldmVsb3AgYW4gaW1wbGVtZW50YXRpb24gb2YgdGhpcyBmZWF0dXJlIHRoYXQgaXMgZml0IHRvIGJlIG1lcmdlZAoraW50byBtYWlubGluZSBoYXZlIGJlZW4gYWlkZWQgYnkgdmFyaW91cyBrZXJuZWwgZGV2ZWxvcGVycywgaW4KK3BhcnRpY3VsYXIgYnkgVGVqdW4gSGVvIGFuZCBCYXJ0bG9taWVqIFpvbG5pZXJraWV3aWN6LgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9tdGQvbmFuZF9lY2MudHh0IGIvRG9jdW1lbnRhdGlvbi9tdGQvbmFuZF9lY2MudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkZjkzYjcKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL210ZC9uYW5kX2VjYy50eHQKQEAgLTAsMCArMSw3MTQgQEAKK0ludHJvZHVjdGlvbgorPT09PT09PT09PT09CisKK0hhdmluZyBsb29rZWQgYXQgdGhlIGxpbnV4IG10ZC9uYW5kIGRyaXZlciBhbmQgbW9yZSBzcGVjaWZpYyBhdCBuYW5kX2VjYy5jCitJIGZlbHQgdGhlcmUgd2FzIHJvb20gZm9yIG9wdGltaXNhdGlvbi4gSSBiYXNoZWQgdGhlIGNvZGUgZm9yIGEgZmV3IGhvdXJzCitwZXJmb3JtaW5nIHRyaWNrcyBsaWtlIHRhYmxlIGxvb2t1cCByZW1vdmluZyBzdXBlcmZsdW91cyBjb2RlIGV0Yy4KK0FmdGVyIHRoYXQgdGhlIHNwZWVkIHdhcyBpbmNyZWFzZWQgYnkgMzUtNDAlLgorU3RpbGwgSSB3YXMgbm90IHRvbyBoYXBweSBhcyBJIGZlbHQgdGhlcmUgd2FzIGFkZGl0aW9uYWwgcm9vbSBmb3IgaW1wcm92ZW1lbnQuCisKK0JhZCEgSSB3YXMgaG9va2VkLgorSSBkZWNpZGVkIHRvIGFubm90YXRlIG15IHN0ZXBzIGluIHRoaXMgZmlsZS4gUGVyaGFwcyBpdCBpcyB1c2VmdWwgdG8gc29tZW9uZQorb3Igc29tZW9uZSBsZWFybnMgc29tZXRoaW5nIGZyb20gaXQuCisKKworVGhlIHByb2JsZW0KKz09PT09PT09PT09CisKK05BTkQgZmxhc2ggKGF0IGxlYXN0IFNMQyBvbmUpIHR5cGljYWxseSBoYXMgc2VjdG9ycyBvZiAyNTYgYnl0ZXMuCitIb3dldmVyIE5BTkQgZmxhc2ggaXMgbm90IGV4dHJlbWVseSByZWxpYWJsZSBzbyBzb21lIGVycm9yIGRldGVjdGlvbgorKGFuZCBzb21ldGltZXMgY29ycmVjdGlvbikgaXMgbmVlZGVkLgorCitUaGlzIGlzIGRvbmUgYnkgbWVhbnMgb2YgYSBIYW1taW5nIGNvZGUuIEknbGwgdHJ5IHRvIGV4cGxhaW4gaXQgaW4KK2xheW1hbnMgdGVybXMgKGFuZCBhcG9sb2dpZXMgdG8gYWxsIHRoZSBwcm8ncyBpbiB0aGUgZmllbGQgaW4gY2FzZSBJIGRvCitub3QgdXNlIHRoZSByaWdodCB0ZXJtaW5vbG9neSwgbXkgY29kaW5nIHRoZW9yeSBjbGFzcyB3YXMgYWxtb3N0IDMwCit5ZWFycyBhZ28sIGFuZCBJIG11c3QgYWRtaXQgaXQgd2FzIG5vdCBvbmUgb2YgbXkgZmF2b3VyaXRlcykuCisKK0FzIEkgc2FpZCBiZWZvcmUgdGhlIGVjYyBjYWxjdWxhdGlvbiBpcyBwZXJmb3JtZWQgb24gc2VjdG9ycyBvZiAyNTYKK2J5dGVzLiBUaGlzIGlzIGRvbmUgYnkgY2FsY3VsYXRpbmcgc2V2ZXJhbCBwYXJpdHkgYml0cyBvdmVyIHRoZSByb3dzIGFuZAorY29sdW1ucy4gVGhlIHBhcml0eSB1c2VkIGlzIGV2ZW4gcGFyaXR5IHdoaWNoIG1lYW5zIHRoYXQgdGhlIHBhcml0eSBiaXQgPSAxCitpZiB0aGUgZGF0YSBvdmVyIHdoaWNoIHRoZSBwYXJpdHkgaXMgY2FsY3VsYXRlZCBpcyAxIGFuZCB0aGUgcGFyaXR5IGJpdCA9IDAKK2lmIHRoZSBkYXRhIG92ZXIgd2hpY2ggdGhlIHBhcml0eSBpcyBjYWxjdWxhdGVkIGlzIDAuIFNvIHRoZSB0b3RhbAorbnVtYmVyIG9mIGJpdHMgb3ZlciB0aGUgZGF0YSBvdmVyIHdoaWNoIHRoZSBwYXJpdHkgaXMgY2FsY3VsYXRlZCArIHRoZQorcGFyaXR5IGJpdCBpcyBldmVuLiAoc2VlIHdpa2lwZWRpYSBpZiB5b3UgY2FuJ3QgZm9sbG93IHRoaXMpLgorUGFyaXR5IGlzIG9mdGVuIGNhbGN1bGF0ZWQgYnkgbWVhbnMgb2YgYW4gZXhjbHVzaXZlIG9yIG9wZXJhdGlvbiwKK3NvbWV0aW1lcyBhbHNvIHJlZmVycmVkIHRvIGFzIHhvci4gSW4gQyB0aGUgb3BlcmF0b3IgZm9yIHhvciBpcyBeCisKK0JhY2sgdG8gZWNjLgorTGV0J3MgZ2l2ZSBhIHNtYWxsIGZpZ3VyZToKKworYnl0ZSAgIDA6ICBiaXQ3IGJpdDYgYml0NSBiaXQ0IGJpdDMgYml0MiBiaXQxIGJpdDAgICBycDAgcnAyIHJwNCAuLi4gcnAxNAorYnl0ZSAgIDE6ICBiaXQ3IGJpdDYgYml0NSBiaXQ0IGJpdDMgYml0MiBiaXQxIGJpdDAgICBycDEgcnAyIHJwNCAuLi4gcnAxNAorYnl0ZSAgIDI6ICBiaXQ3IGJpdDYgYml0NSBiaXQ0IGJpdDMgYml0MiBiaXQxIGJpdDAgICBycDAgcnAzIHJwNCAuLi4gcnAxNAorYnl0ZSAgIDM6ICBiaXQ3IGJpdDYgYml0NSBiaXQ0IGJpdDMgYml0MiBiaXQxIGJpdDAgICBycDEgcnAzIHJwNCAuLi4gcnAxNAorYnl0ZSAgIDQ6ICBiaXQ3IGJpdDYgYml0NSBiaXQ0IGJpdDMgYml0MiBiaXQxIGJpdDAgICBycDAgcnAyIHJwNSAuLi4gcnAxNAorLi4uLgorYnl0ZSAyNTQ6ICBiaXQ3IGJpdDYgYml0NSBiaXQ0IGJpdDMgYml0MiBiaXQxIGJpdDAgICBycDAgcnAzIHJwNSAuLi4gcnAxNQorYnl0ZSAyNTU6ICBiaXQ3IGJpdDYgYml0NSBiaXQ0IGJpdDMgYml0MiBiaXQxIGJpdDAgICBycDEgcnAzIHJwNSAuLi4gcnAxNQorICAgICAgICAgICBjcDEgIGNwMCAgY3AxICBjcDAgIGNwMSAgY3AwICBjcDEgIGNwMAorICAgICAgICAgICBjcDMgIGNwMyAgY3AyICBjcDIgIGNwMyAgY3AzICBjcDIgIGNwMgorICAgICAgICAgICBjcDUgIGNwNSAgY3A1ICBjcDUgIGNwNCAgY3A0ICBjcDQgIGNwNAorCitUaGlzIGZpZ3VyZSByZXByZXNlbnRzIGEgc2VjdG9yIG9mIDI1NiBieXRlcy4KK2NwIGlzIG15IGFiYnJldmlhdG9uIGZvciBjb2x1bW4gcGFyaXR5LCBycCBmb3Igcm93IHBhcml0eS4KKworTGV0J3Mgc3RhcnQgdG8gZXhwbGFpbiBjb2x1bW4gcGFyaXR5LgorY3AwIGlzIHRoZSBwYXJpdHkgdGhhdCBiZWxvbmdzIHRvIGFsbCBiaXQwLCBiaXQyLCBiaXQ0LCBiaXQ2Lgorc28gdGhlIHN1bSBvZiBhbGwgYml0MCwgYml0MiwgYml0NCBhbmQgYml0NiB2YWx1ZXMgKyBjcDAgaXRzZWxmIGlzIGV2ZW4uCitTaW1pbGFybHkgY3AxIGlzIHRoZSBzdW0gb2YgYWxsIGJpdDEsIGJpdDMsIGJpdDUgYW5kIGJpdDcuCitjcDIgaXMgdGhlIHBhcml0eSBvdmVyIGJpdDAsIGJpdDEsIGJpdDQgYW5kIGJpdDUKK2NwMyBpcyB0aGUgcGFyaXR5IG92ZXIgYml0MiwgYml0MywgYml0NiBhbmQgYml0Ny4KK2NwNCBpcyB0aGUgcGFyaXR5IG92ZXIgYml0MCwgYml0MSwgYml0MiBhbmQgYml0My4KK2NwNSBpcyB0aGUgcGFyaXR5IG92ZXIgYml0NCwgYml0NSwgYml0NiBhbmQgYml0Ny4KK05vdGUgdGhhdCBlYWNoIG9mIGNwMCAuLiBjcDUgaXMgZXhhY3RseSBvbmUgYml0LgorCitSb3cgcGFyaXR5IGFjdHVhbGx5IHdvcmtzIGFsbW9zdCB0aGUgc2FtZS4KK3JwMCBpcyB0aGUgcGFyaXR5IG9mIGFsbCBldmVuIGJ5dGVzICgwLCAyLCA0LCA2LCAuLi4gMjUyLCAyNTQpCitycDEgaXMgdGhlIHBhcml0eSBvZiBhbGwgb2RkIGJ5dGVzICgxLCAzLCA1LCA3LCAuLi4sIDI1MywgMjU1KQorcnAyIGlzIHRoZSBwYXJpdHkgb2YgYWxsIGJ5dGVzIDAsIDEsIDQsIDUsIDgsIDksIC4uLgorKHNvIGhhbmRsZSB0d28gYnl0ZXMsIHRoZW4gc2tpcCAyIGJ5dGVzKS4KK3JwMyBpcyBjb3ZlcnMgdGhlIGhhbGYgcnAyIGRvZXMgbm90IGNvdmVyIChieXRlcyAyLCAzLCA2LCA3LCAxMCwgMTEsIC4uLikKK2ZvciBycDQgdGhlIHJ1bGUgaXMgY292ZXIgNCBieXRlcywgc2tpcCA0IGJ5dGVzLCBjb3ZlciA0IGJ5dGVzLCBza2lwIDQgZXRjLgorc28gcnA0IGNhbGN1bGF0ZXMgcGFyaXR5IG92ZXIgYnl0ZXMgMCwgMSwgMiwgMywgOCwgOSwgMTAsIDExLCAxNiwgLi4uKQorYW5kIHJwNSBjb3ZlcnMgdGhlIG90aGVyIGhhbGYsIHNvIGJ5dGVzIDQsIDUsIDYsIDcsIDEyLCAxMywgMTQsIDE1LCAyMCwgLi4KK1RoZSBzdG9yeSBub3cgYmVjb21lcyBxdWl0ZSBib3JpbmcuIEkgZ3Vlc3MgeW91IGdldCB0aGUgaWRlYS4KK3JwNiBjb3ZlcnMgOCBieXRlcyB0aGVuIHNraXBzIDggZXRjCitycDcgc2tpcHMgOCBieXRlcyB0aGVuIGNvdmVycyA4IGV0YworcnA4IGNvdmVycyAxNiBieXRlcyB0aGVuIHNraXBzIDE2IGV0YworcnA5IHNraXBzIDE2IGJ5dGVzIHRoZW4gY292ZXJzIDE2IGV0YworcnAxMCBjb3ZlcnMgMzIgYnl0ZXMgdGhlbiBza2lwcyAzMiBldGMKK3JwMTEgc2tpcHMgMzIgYnl0ZXMgdGhlbiBjb3ZlcnMgMzIgZXRjCitycDEyIGNvdmVycyA2NCBieXRlcyB0aGVuIHNraXBzIDY0IGV0YworcnAxMyBza2lwcyA2NCBieXRlcyB0aGVuIGNvdmVycyA2NCBldGMKK3JwMTQgY292ZXJzIDEyOCBieXRlcyB0aGVuIHNraXBzIDEyOAorcnAxNSBza2lwcyAxMjggYnl0ZXMgdGhlbiBjb3ZlcnMgMTI4CisKK0luIHRoZSBlbmQgdGhlIHBhcml0eSBiaXRzIGFyZSBncm91cGVkIHRvZ2V0aGVyIGluIHRocmVlIGJ5dGVzIGFzCitmb2xsb3dzOgorRUNDICAgIEJpdCA3IEJpdCA2IEJpdCA1IEJpdCA0IEJpdCAzIEJpdCAyIEJpdCAxIEJpdCAwCitFQ0MgMCAgIHJwMDcgIHJwMDYgIHJwMDUgIHJwMDQgIHJwMDMgIHJwMDIgIHJwMDEgIHJwMDAKK0VDQyAxICAgcnAxNSAgcnAxNCAgcnAxMyAgcnAxMiAgcnAxMSAgcnAxMCAgcnAwOSAgcnAwOAorRUNDIDIgICBjcDUgICBjcDQgICBjcDMgICBjcDIgICBjcDEgICBjcDAgICAgICAxICAgICAxCisKK0kgZGV0ZWN0ZWQgYWZ0ZXIgd3JpdGluZyB0aGlzIHRoYXQgU1QgYXBwbGljYXRpb24gbm90ZSBBTjE4MjMKKyhodHRwOi8vd3d3LnN0LmNvbS9zdG9ubGluZS9ib29rcy9wZGYvZG9jcy8xMDEyMy5wZGYpIGdpdmVzIGEgbXVjaAorbmljZXIgcGljdHVyZS4oYnV0IHRoZXkgdXNlIGxpbmUgcGFyaXR5IGFzIHRlcm0gd2hlcmUgSSB1c2Ugcm93IHBhcml0eSkKK09oIHdlbGwsIEknbSBncmFwaGljYWxseSBjaGFsbGVuZ2VkLCBzbyBzdWZmZXIgd2l0aCBtZSBmb3IgYSBtb21lbnQgOi0pCitBbmQgSSBjb3VsZCBub3QgcmV1c2UgdGhlIFNUIHBpY3R1cmUgYW55d2F5IGZvciBjb3B5cmlnaHQgcmVhc29ucy4KKworCitBdHRlbXB0IDAKKz09PT09PT09PQorCitJbXBsZW1lbnRpbmcgdGhlIHBhcml0eSBjYWxjdWxhdGlvbiBpcyBwcmV0dHkgc2ltcGxlLgorSW4gQyBwc2V1ZG9jb2RlOgorZm9yIChpID0gMDsgaSA8IDI1NjsgaSsrKQoreworICAgIGlmIChpICYgMHgwMSkKKyAgICAgICBycDEgPSBiaXQ3IF4gYml0NiBeIGJpdDUgXiBiaXQ0IF4gYml0MyBeIGJpdDIgXiBiaXQxIF4gYml0MCBeIHJwMTsKKyAgICBlbHNlCisgICAgICAgcnAwID0gYml0NyBeIGJpdDYgXiBiaXQ1IF4gYml0NCBeIGJpdDMgXiBiaXQyIF4gYml0MSBeIGJpdDAgXiBycDE7CisgICAgaWYgKGkgJiAweDAyKQorICAgICAgIHJwMyA9IGJpdDcgXiBiaXQ2IF4gYml0NSBeIGJpdDQgXiBiaXQzIF4gYml0MiBeIGJpdDEgXiBiaXQwIF4gcnAzOworICAgIGVsc2UKKyAgICAgICBycDIgPSBiaXQ3IF4gYml0NiBeIGJpdDUgXiBiaXQ0IF4gYml0MyBeIGJpdDIgXiBiaXQxIF4gYml0MCBeIHJwMjsKKyAgICBpZiAoaSAmIDB4MDQpCisgICAgICBycDUgPSBiaXQ3IF4gYml0NiBeIGJpdDUgXiBiaXQ0IF4gYml0MyBeIGJpdDIgXiBiaXQxIF4gYml0MCBeIHJwNTsKKyAgICBlbHNlCisgICAgICBycDQgPSBiaXQ3IF4gYml0NiBeIGJpdDUgXiBiaXQ0IF4gYml0MyBeIGJpdDIgXiBiaXQxIF4gYml0MCBeIHJwNDsKKyAgICBpZiAoaSAmIDB4MDgpCisgICAgICBycDcgPSBiaXQ3IF4gYml0NiBeIGJpdDUgXiBiaXQ0IF4gYml0MyBeIGJpdDIgXiBiaXQxIF4gYml0MCBeIHJwNzsKKyAgICBlbHNlCisgICAgICBycDYgPSBiaXQ3IF4gYml0NiBeIGJpdDUgXiBiaXQ0IF4gYml0MyBeIGJpdDIgXiBiaXQxIF4gYml0MCBeIHJwNjsKKyAgICBpZiAoaSAmIDB4MTApCisgICAgICBycDkgPSBiaXQ3IF4gYml0NiBeIGJpdDUgXiBiaXQ0IF4gYml0MyBeIGJpdDIgXiBiaXQxIF4gYml0MCBeIHJwOTsKKyAgICBlbHNlCisgICAgICBycDggPSBiaXQ3IF4gYml0NiBeIGJpdDUgXiBiaXQ0IF4gYml0MyBeIGJpdDIgXiBiaXQxIF4gYml0MCBeIHJwODsKKyAgICBpZiAoaSAmIDB4MjApCisgICAgICBycDExID0gYml0NyBeIGJpdDYgXiBiaXQ1IF4gYml0NCBeIGJpdDMgXiBiaXQyIF4gYml0MSBeIGJpdDAgXiBycDExOworICAgIGVsc2UKKyAgICBycDEwID0gYml0NyBeIGJpdDYgXiBiaXQ1IF4gYml0NCBeIGJpdDMgXiBiaXQyIF4gYml0MSBeIGJpdDAgXiBycDEwOworICAgIGlmIChpICYgMHg0MCkKKyAgICAgIHJwMTMgPSBiaXQ3IF4gYml0NiBeIGJpdDUgXiBiaXQ0IF4gYml0MyBeIGJpdDIgXiBiaXQxIF4gYml0MCBeIHJwMTM7CisgICAgZWxzZQorICAgICAgcnAxMiA9IGJpdDcgXiBiaXQ2IF4gYml0NSBeIGJpdDQgXiBiaXQzIF4gYml0MiBeIGJpdDEgXiBiaXQwIF4gcnAxMjsKKyAgICBpZiAoaSAmIDB4ODApCisgICAgICBycDE1ID0gYml0NyBeIGJpdDYgXiBiaXQ1IF4gYml0NCBeIGJpdDMgXiBiaXQyIF4gYml0MSBeIGJpdDAgXiBycDE1OworICAgIGVsc2UKKyAgICAgIHJwMTQgPSBiaXQ3IF4gYml0NiBeIGJpdDUgXiBiaXQ0IF4gYml0MyBeIGJpdDIgXiBiaXQxIF4gYml0MCBeIHJwMTQ7CisgICAgY3AwID0gYml0NiBeIGJpdDQgXiBiaXQyIF4gYml0MCBeIGNwMDsKKyAgICBjcDEgPSBiaXQ3IF4gYml0NSBeIGJpdDMgXiBiaXQxIF4gY3AxOworICAgIGNwMiA9IGJpdDUgXiBiaXQ0IF4gYml0MSBeIGJpdDAgXiBjcDI7CisgICAgY3AzID0gYml0NyBeIGJpdDYgXiBiaXQzIF4gYml0MiBeIGNwMworICAgIGNwNCA9IGJpdDMgXiBiaXQyIF4gYml0MSBeIGJpdDAgXiBjcDQKKyAgICBjcDUgPSBiaXQ3IF4gYml0NiBeIGJpdDUgXiBiaXQ0IF4gY3A1Cit9CisKKworQW5hbHlzaXMgMAorPT09PT09PT09PQorCitDIGRvZXMgaGF2ZSBiaXR3aXNlIG9wZXJhdG9ycyBidXQgbm90IHJlYWxseSBvcGVyYXRvcnMgdG8gZG8gdGhlIGFib3ZlCitlZmZpY2llbnRseSAoYW5kIG1vc3QgaGFyZHdhcmUgaGFzIG5vIHN1Y2ggaW5zdHJ1Y3Rpb25zIGVpdGhlcikuCitUaGVyZWZvcmUgd2l0aG91dCBpbXBsZW1lbnRpbmcgdGhpcyBpdCB3YXMgY2xlYXIgdGhhdCB0aGUgY29kZSBhYm92ZSB3YXMKK25vdCBnb2luZyB0byBicmluZyBtZSBhIE5vYmVsIHByaXplIDotKQorCitGb3J0dW5hdGVseSB0aGUgZXhjbHVzaXZlIG9yIG9wZXJhdGlvbiBpcyBjb21tdXRhdGl2ZSwgc28gd2UgY2FuIGNvbWJpbmUKK3RoZSB2YWx1ZXMgaW4gYW55IG9yZGVyLiBTbyBpbnN0ZWFkIG9mIGNhbGN1bGF0aW5nIGFsbCB0aGUgYml0cworaW5kaXZpZHVhbGx5LCBsZXQgdXMgdHJ5IHRvIHJlYXJyYW5nZSB0aGluZ3MuCitGb3IgdGhlIGNvbHVtbiBwYXJpdHkgdGhpcyBpcyBlYXN5LiBXZSBjYW4ganVzdCB4b3IgdGhlIGJ5dGVzIGFuZCBpbiB0aGUKK2VuZCBmaWx0ZXIgb3V0IHRoZSByZWxldmFudCBiaXRzLiBUaGlzIGlzIHByZXR0eSBuaWNlIGFzIGl0IHdpbGwgYnJpbmcKK2FsbCBjcCBjYWxjdWxhdGlvbiBvdXQgb2YgdGhlIGlmIGxvb3AuCisKK1NpbWlsYXJseSB3ZSBjYW4gZmlyc3QgeG9yIHRoZSBieXRlcyBmb3IgdGhlIHZhcmlvdXMgcm93cy4KK1RoaXMgbGVhZHMgdG86CisKKworQXR0ZW1wdCAxCis9PT09PT09PT0KKworY29uc3QgY2hhciBwYXJpdHlbMjU2XSA9IHsKKyAgICAwLCAxLCAxLCAwLCAxLCAwLCAwLCAxLCAxLCAwLCAwLCAxLCAwLCAxLCAxLCAwLAorICAgIDEsIDAsIDAsIDEsIDAsIDEsIDEsIDAsIDAsIDEsIDEsIDAsIDEsIDAsIDAsIDEsCisgICAgMSwgMCwgMCwgMSwgMCwgMSwgMSwgMCwgMCwgMSwgMSwgMCwgMSwgMCwgMCwgMSwKKyAgICAwLCAxLCAxLCAwLCAxLCAwLCAwLCAxLCAxLCAwLCAwLCAxLCAwLCAxLCAxLCAwLAorICAgIDEsIDAsIDAsIDEsIDAsIDEsIDEsIDAsIDAsIDEsIDEsIDAsIDEsIDAsIDAsIDEsCisgICAgMCwgMSwgMSwgMCwgMSwgMCwgMCwgMSwgMSwgMCwgMCwgMSwgMCwgMSwgMSwgMCwKKyAgICAwLCAxLCAxLCAwLCAxLCAwLCAwLCAxLCAxLCAwLCAwLCAxLCAwLCAxLCAxLCAwLAorICAgIDEsIDAsIDAsIDEsIDAsIDEsIDEsIDAsIDAsIDEsIDEsIDAsIDEsIDAsIDAsIDEsCisgICAgMSwgMCwgMCwgMSwgMCwgMSwgMSwgMCwgMCwgMSwgMSwgMCwgMSwgMCwgMCwgMSwKKyAgICAwLCAxLCAxLCAwLCAxLCAwLCAwLCAxLCAxLCAwLCAwLCAxLCAwLCAxLCAxLCAwLAorICAgIDAsIDEsIDEsIDAsIDEsIDAsIDAsIDEsIDEsIDAsIDAsIDEsIDAsIDEsIDEsIDAsCisgICAgMSwgMCwgMCwgMSwgMCwgMSwgMSwgMCwgMCwgMSwgMSwgMCwgMSwgMCwgMCwgMSwKKyAgICAwLCAxLCAxLCAwLCAxLCAwLCAwLCAxLCAxLCAwLCAwLCAxLCAwLCAxLCAxLCAwLAorICAgIDEsIDAsIDAsIDEsIDAsIDEsIDEsIDAsIDAsIDEsIDEsIDAsIDEsIDAsIDAsIDEsCisgICAgMSwgMCwgMCwgMSwgMCwgMSwgMSwgMCwgMCwgMSwgMSwgMCwgMSwgMCwgMCwgMSwKKyAgICAwLCAxLCAxLCAwLCAxLCAwLCAwLCAxLCAxLCAwLCAwLCAxLCAwLCAxLCAxLCAwCit9OworCit2b2lkIGVjYzEoY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLCB1bnNpZ25lZCBjaGFyICpjb2RlKQoreworICAgIGludCBpOworICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJwID0gYnVmOworICAgIHVuc2lnbmVkIGNoYXIgY3VyOworICAgIHVuc2lnbmVkIGNoYXIgcnAwLCBycDEsIHJwMiwgcnAzLCBycDQsIHJwNSwgcnA2LCBycDc7CisgICAgdW5zaWduZWQgY2hhciBycDgsIHJwOSwgcnAxMCwgcnAxMSwgcnAxMiwgcnAxMywgcnAxNCwgcnAxNTsKKyAgICB1bnNpZ25lZCBjaGFyIHBhcjsKKworICAgIHBhciA9IDA7CisgICAgcnAwID0gMDsgcnAxID0gMDsgcnAyID0gMDsgcnAzID0gMDsKKyAgICBycDQgPSAwOyBycDUgPSAwOyBycDYgPSAwOyBycDcgPSAwOworICAgIHJwOCA9IDA7IHJwOSA9IDA7IHJwMTAgPSAwOyBycDExID0gMDsKKyAgICBycDEyID0gMDsgcnAxMyA9IDA7IHJwMTQgPSAwOyBycDE1ID0gMDsKKworICAgIGZvciAoaSA9IDA7IGkgPCAyNTY7IGkrKykKKyAgICB7CisgICAgICAgIGN1ciA9ICpicCsrOworICAgICAgICBwYXIgXj0gY3VyOworICAgICAgICBpZiAoaSAmIDB4MDEpIHJwMSBePSBjdXI7IGVsc2UgcnAwIF49IGN1cjsKKyAgICAgICAgaWYgKGkgJiAweDAyKSBycDMgXj0gY3VyOyBlbHNlIHJwMiBePSBjdXI7CisgICAgICAgIGlmIChpICYgMHgwNCkgcnA1IF49IGN1cjsgZWxzZSBycDQgXj0gY3VyOworICAgICAgICBpZiAoaSAmIDB4MDgpIHJwNyBePSBjdXI7IGVsc2UgcnA2IF49IGN1cjsKKyAgICAgICAgaWYgKGkgJiAweDEwKSBycDkgXj0gY3VyOyBlbHNlIHJwOCBePSBjdXI7CisgICAgICAgIGlmIChpICYgMHgyMCkgcnAxMSBePSBjdXI7IGVsc2UgcnAxMCBePSBjdXI7CisgICAgICAgIGlmIChpICYgMHg0MCkgcnAxMyBePSBjdXI7IGVsc2UgcnAxMiBePSBjdXI7CisgICAgICAgIGlmIChpICYgMHg4MCkgcnAxNSBePSBjdXI7IGVsc2UgcnAxNCBePSBjdXI7CisgICAgfQorICAgIGNvZGVbMF0gPQorICAgICAgICAocGFyaXR5W3JwN10gPDwgNykgfAorICAgICAgICAocGFyaXR5W3JwNl0gPDwgNikgfAorICAgICAgICAocGFyaXR5W3JwNV0gPDwgNSkgfAorICAgICAgICAocGFyaXR5W3JwNF0gPDwgNCkgfAorICAgICAgICAocGFyaXR5W3JwM10gPDwgMykgfAorICAgICAgICAocGFyaXR5W3JwMl0gPDwgMikgfAorICAgICAgICAocGFyaXR5W3JwMV0gPDwgMSkgfAorICAgICAgICAocGFyaXR5W3JwMF0pOworICAgIGNvZGVbMV0gPQorICAgICAgICAocGFyaXR5W3JwMTVdIDw8IDcpIHwKKyAgICAgICAgKHBhcml0eVtycDE0XSA8PCA2KSB8CisgICAgICAgIChwYXJpdHlbcnAxM10gPDwgNSkgfAorICAgICAgICAocGFyaXR5W3JwMTJdIDw8IDQpIHwKKyAgICAgICAgKHBhcml0eVtycDExXSA8PCAzKSB8CisgICAgICAgIChwYXJpdHlbcnAxMF0gPDwgMikgfAorICAgICAgICAocGFyaXR5W3JwOV0gIDw8IDEpIHwKKyAgICAgICAgKHBhcml0eVtycDhdKTsKKyAgICBjb2RlWzJdID0KKyAgICAgICAgKHBhcml0eVtwYXIgJiAweGYwXSA8PCA3KSB8CisgICAgICAgIChwYXJpdHlbcGFyICYgMHgwZl0gPDwgNikgfAorICAgICAgICAocGFyaXR5W3BhciAmIDB4Y2NdIDw8IDUpIHwKKyAgICAgICAgKHBhcml0eVtwYXIgJiAweDMzXSA8PCA0KSB8CisgICAgICAgIChwYXJpdHlbcGFyICYgMHhhYV0gPDwgMykgfAorICAgICAgICAocGFyaXR5W3BhciAmIDB4NTVdIDw8IDIpOworICAgIGNvZGVbMF0gPSB+Y29kZVswXTsKKyAgICBjb2RlWzFdID0gfmNvZGVbMV07CisgICAgY29kZVsyXSA9IH5jb2RlWzJdOworfQorCitTdGlsbCBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLiBUaGUgbGFzdCB0aHJlZSBpbnZlcnQgc3RhdGVtZW50cyBhcmUgdGhlcmUgdG8KK2dpdmUgYSBjaGVja3N1bSBvZiAweGZmIDB4ZmYgMHhmZiBmb3IgYW4gZW1wdHkgZmxhc2guIEluIGFuIGVtcHR5IGZsYXNoCithbGwgZGF0YSBpcyAweGZmLCBzbyB0aGUgY2hlY2tzdW0gdGhlbiBtYXRjaGVzLgorCitJIGFsc28gaW50cm9kdWNlZCB0aGUgcGFyaXR5IGxvb2t1cC4gSSBleHBlY3RlZCB0aGlzIHRvIGJlIHRoZSBmYXN0ZXN0Cit3YXkgdG8gY2FsY3VsYXRlIHRoZSBwYXJpdHksIGJ1dCBJIHdpbGwgaW52ZXN0aWdhdGUgYWx0ZXJuYXRpdmVzIGxhdGVyCitvbi4KKworCitBbmFseXNpcyAxCis9PT09PT09PT09CisKK1RoZSBjb2RlIHdvcmtzLCBidXQgaXMgbm90IHRlcnJpYmx5IGVmZmljaWVudC4gT24gbXkgc3lzdGVtIGl0IHRvb2sKK2FsbW9zdCA0IHRpbWVzIGFzIG11Y2ggdGltZSBhcyB0aGUgbGludXggZHJpdmVyIGNvZGUuIEJ1dCBoZXksIGlmIGl0IHdhcworKnRoYXQqIGVhc3kgdGhpcyB3b3VsZCBoYXZlIGJlZW4gZG9uZSBsb25nIGJlZm9yZS4KK05vIHBhaW4uIG5vIGdhaW4uCisKK0ZvcnR1bmF0ZWx5IHRoZXJlIGlzIHBsZW50eSBvZiByb29tIGZvciBpbXByb3ZlbWVudC4KKworSW4gc3RlcCAxIHdlIG1vdmVkIGZyb20gYml0LXdpc2UgY2FsY3VsYXRpb24gdG8gYnl0ZS13aXNlIGNhbGN1bGF0aW9uLgorSG93ZXZlciBpbiBDIHdlIGNhbiBhbHNvIHVzZSB0aGUgdW5zaWduZWQgbG9uZyBkYXRhIHR5cGUgYW5kIHZpcnR1YWxseQorZXZlcnkgbW9kZXJuIG1pY3JvcHJvY2Vzc29yIHN1cHBvcnRzIDMyIGJpdCBvcGVyYXRpb25zLCBzbyB3aHkgbm90IHRyeQordG8gd3JpdGUgb3VyIGNvZGUgaW4gc3VjaCBhIHdheSB0aGF0IHdlIHByb2Nlc3MgZGF0YSBpbiAzMiBiaXQgY2h1bmtzLgorCitPZiBjb3Vyc2UgdGhpcyBtZWFucyBzb21lIG1vZGlmaWNhdGlvbiBhcyB0aGUgcm93IHBhcml0eSBpcyBieXRlIGJ5CitieXRlLiBBIHF1aWNrIGFuYWx5c2lzOgorZm9yIHRoZSBjb2x1bW4gcGFyaXR5IHdlIHVzZSB0aGUgcGFyIHZhcmlhYmxlLiBXaGVuIGV4dGVuZGluZyB0byAzMiBiaXRzCit3ZSBjYW4gaW4gdGhlIGVuZCBlYXNpbHkgY2FsY3VsYXRlIHAwIGFuZCBwMSBmcm9tIGl0LgorKGJlY2F1c2UgcGFyIG5vdyBjb25zaXN0cyBvZiA0IGJ5dGVzLCBjb250cmlidXRpbmcgdG8gcnAxLCBycDAsIHJwMSwgcnAwCityZXNwZWN0aXZlbHkpCithbHNvIHJwMiBhbmQgcnAzIGNhbiBiZSBlYXNpbHkgcmV0cmlldmVkIGZyb20gcGFyIGFzIHJwMyBjb3ZlcnMgdGhlCitmaXJzdCB0d28gYnl0ZXMgYW5kIHJwMiB0aGUgbGFzdCB0d28gYnl0ZXMuCisKK05vdGUgdGhhdCBvZiBjb3Vyc2Ugbm93IHRoZSBsb29wIGlzIGV4ZWN1dGVkIG9ubHkgNjQgdGltZXMgKDI1Ni80KS4KK0FuZCBub3RlIHRoYXQgY2FyZSBtdXN0IHRha2VuIHdydCBieXRlIG9yZGVyaW5nLiBUaGUgd2F5IGJ5dGVzIGFyZQorb3JkZXJlZCBpbiBhIGxvbmcgaXMgbWFjaGluZSBkZXBlbmRlbnQsIGFuZCBtaWdodCBhZmZlY3QgdXMuCitBbnl3YXksIGlmIHRoZXJlIGlzIGFuIGlzc3VlOiB0aGlzIGNvZGUgaXMgZGV2ZWxvcGVkIG9uIHg4NiAodG8gYmUKK3ByZWNpc2U6IGEgREVMTCBQQyB3aXRoIGEgRDkyMCBJbnRlbCBDUFUpCisKK0FuZCBvZiBjb3Vyc2UgdGhlIHBlcmZvcm1hbmNlIG1pZ2h0IGRlcGVuZCBvbiBhbGlnbm1lbnQsIGJ1dCBJIGV4cGVjdAordGhhdCB0aGUgSS9PIGJ1ZmZlcnMgaW4gdGhlIG5hbmQgZHJpdmVyIGFyZSBhbGlnbmVkIHByb3Blcmx5IChhbmQKK290aGVyd2lzZSB0aGF0IHNob3VsZCBiZSBmaXhlZCB0byBnZXQgbWF4aW11bSBwZXJmb3JtYW5jZSkuCisKK0xldCdzIGdpdmUgaXQgYSB0cnkuLi4KKworCitBdHRlbXB0IDIKKz09PT09PT09PQorCitleHRlcm4gY29uc3QgY2hhciBwYXJpdHlbMjU2XTsKKwordm9pZCBlY2MyKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiwgdW5zaWduZWQgY2hhciAqY29kZSkKK3sKKyAgICBpbnQgaTsKKyAgICBjb25zdCB1bnNpZ25lZCBsb25nICpicCA9ICh1bnNpZ25lZCBsb25nICopYnVmOworICAgIHVuc2lnbmVkIGxvbmcgY3VyOworICAgIHVuc2lnbmVkIGxvbmcgcnAwLCBycDEsIHJwMiwgcnAzLCBycDQsIHJwNSwgcnA2LCBycDc7CisgICAgdW5zaWduZWQgbG9uZyBycDgsIHJwOSwgcnAxMCwgcnAxMSwgcnAxMiwgcnAxMywgcnAxNCwgcnAxNTsKKyAgICB1bnNpZ25lZCBsb25nIHBhcjsKKworICAgIHBhciA9IDA7CisgICAgcnAwID0gMDsgcnAxID0gMDsgcnAyID0gMDsgcnAzID0gMDsKKyAgICBycDQgPSAwOyBycDUgPSAwOyBycDYgPSAwOyBycDcgPSAwOworICAgIHJwOCA9IDA7IHJwOSA9IDA7IHJwMTAgPSAwOyBycDExID0gMDsKKyAgICBycDEyID0gMDsgcnAxMyA9IDA7IHJwMTQgPSAwOyBycDE1ID0gMDsKKworICAgIGZvciAoaSA9IDA7IGkgPCA2NDsgaSsrKQorICAgIHsKKyAgICAgICAgY3VyID0gKmJwKys7CisgICAgICAgIHBhciBePSBjdXI7CisgICAgICAgIGlmIChpICYgMHgwMSkgcnA1IF49IGN1cjsgZWxzZSBycDQgXj0gY3VyOworICAgICAgICBpZiAoaSAmIDB4MDIpIHJwNyBePSBjdXI7IGVsc2UgcnA2IF49IGN1cjsKKyAgICAgICAgaWYgKGkgJiAweDA0KSBycDkgXj0gY3VyOyBlbHNlIHJwOCBePSBjdXI7CisgICAgICAgIGlmIChpICYgMHgwOCkgcnAxMSBePSBjdXI7IGVsc2UgcnAxMCBePSBjdXI7CisgICAgICAgIGlmIChpICYgMHgxMCkgcnAxMyBePSBjdXI7IGVsc2UgcnAxMiBePSBjdXI7CisgICAgICAgIGlmIChpICYgMHgyMCkgcnAxNSBePSBjdXI7IGVsc2UgcnAxNCBePSBjdXI7CisgICAgfQorICAgIC8qCisgICAgICAgd2UgbmVlZCB0byBhZGFwdCB0aGUgY29kZSBnZW5lcmF0aW9uIGZvciB0aGUgZmFjdCB0aGF0IHJwIHZhcnMgYXJlIG5vdworICAgICAgIGxvbmc7IGFsc28gdGhlIGNvbHVtbiBwYXJpdHkgY2FsY3VsYXRpb24gbmVlZHMgdG8gYmUgY2hhbmdlZC4KKyAgICAgICB3ZSdsbCBicmluZyBycDQgdG8gMTUgYmFjayB0byBzaW5nbGUgYnl0ZSBlbnRpdGllcyBieSBzaGlmdGluZyBhbmQKKyAgICAgICB4b3JpbmcKKyAgICAqLworICAgIHJwNCBePSAocnA0ID4+IDE2KTsgcnA0IF49IChycDQgPj4gOCk7IHJwNCAmPSAweGZmOworICAgIHJwNSBePSAocnA1ID4+IDE2KTsgcnA1IF49IChycDUgPj4gOCk7IHJwNSAmPSAweGZmOworICAgIHJwNiBePSAocnA2ID4+IDE2KTsgcnA2IF49IChycDYgPj4gOCk7IHJwNiAmPSAweGZmOworICAgIHJwNyBePSAocnA3ID4+IDE2KTsgcnA3IF49IChycDcgPj4gOCk7IHJwNyAmPSAweGZmOworICAgIHJwOCBePSAocnA4ID4+IDE2KTsgcnA4IF49IChycDggPj4gOCk7IHJwOCAmPSAweGZmOworICAgIHJwOSBePSAocnA5ID4+IDE2KTsgcnA5IF49IChycDkgPj4gOCk7IHJwOSAmPSAweGZmOworICAgIHJwMTAgXj0gKHJwMTAgPj4gMTYpOyBycDEwIF49IChycDEwID4+IDgpOyBycDEwICY9IDB4ZmY7CisgICAgcnAxMSBePSAocnAxMSA+PiAxNik7IHJwMTEgXj0gKHJwMTEgPj4gOCk7IHJwMTEgJj0gMHhmZjsKKyAgICBycDEyIF49IChycDEyID4+IDE2KTsgcnAxMiBePSAocnAxMiA+PiA4KTsgcnAxMiAmPSAweGZmOworICAgIHJwMTMgXj0gKHJwMTMgPj4gMTYpOyBycDEzIF49IChycDEzID4+IDgpOyBycDEzICY9IDB4ZmY7CisgICAgcnAxNCBePSAocnAxNCA+PiAxNik7IHJwMTQgXj0gKHJwMTQgPj4gOCk7IHJwMTQgJj0gMHhmZjsKKyAgICBycDE1IF49IChycDE1ID4+IDE2KTsgcnAxNSBePSAocnAxNSA+PiA4KTsgcnAxNSAmPSAweGZmOworICAgIHJwMyA9IChwYXIgPj4gMTYpOyBycDMgXj0gKHJwMyA+PiA4KTsgcnAzICY9IDB4ZmY7CisgICAgcnAyID0gcGFyICYgMHhmZmZmOyBycDIgXj0gKHJwMiA+PiA4KTsgcnAyICY9IDB4ZmY7CisgICAgcGFyIF49IChwYXIgPj4gMTYpOworICAgIHJwMSA9IChwYXIgPj4gOCk7IHJwMSAmPSAweGZmOworICAgIHJwMCA9IChwYXIgJiAweGZmKTsKKyAgICBwYXIgXj0gKHBhciA+PiA4KTsgcGFyICY9IDB4ZmY7CisKKyAgICBjb2RlWzBdID0KKyAgICAgICAgKHBhcml0eVtycDddIDw8IDcpIHwKKyAgICAgICAgKHBhcml0eVtycDZdIDw8IDYpIHwKKyAgICAgICAgKHBhcml0eVtycDVdIDw8IDUpIHwKKyAgICAgICAgKHBhcml0eVtycDRdIDw8IDQpIHwKKyAgICAgICAgKHBhcml0eVtycDNdIDw8IDMpIHwKKyAgICAgICAgKHBhcml0eVtycDJdIDw8IDIpIHwKKyAgICAgICAgKHBhcml0eVtycDFdIDw8IDEpIHwKKyAgICAgICAgKHBhcml0eVtycDBdKTsKKyAgICBjb2RlWzFdID0KKyAgICAgICAgKHBhcml0eVtycDE1XSA8PCA3KSB8CisgICAgICAgIChwYXJpdHlbcnAxNF0gPDwgNikgfAorICAgICAgICAocGFyaXR5W3JwMTNdIDw8IDUpIHwKKyAgICAgICAgKHBhcml0eVtycDEyXSA8PCA0KSB8CisgICAgICAgIChwYXJpdHlbcnAxMV0gPDwgMykgfAorICAgICAgICAocGFyaXR5W3JwMTBdIDw8IDIpIHwKKyAgICAgICAgKHBhcml0eVtycDldICA8PCAxKSB8CisgICAgICAgIChwYXJpdHlbcnA4XSk7CisgICAgY29kZVsyXSA9CisgICAgICAgIChwYXJpdHlbcGFyICYgMHhmMF0gPDwgNykgfAorICAgICAgICAocGFyaXR5W3BhciAmIDB4MGZdIDw8IDYpIHwKKyAgICAgICAgKHBhcml0eVtwYXIgJiAweGNjXSA8PCA1KSB8CisgICAgICAgIChwYXJpdHlbcGFyICYgMHgzM10gPDwgNCkgfAorICAgICAgICAocGFyaXR5W3BhciAmIDB4YWFdIDw8IDMpIHwKKyAgICAgICAgKHBhcml0eVtwYXIgJiAweDU1XSA8PCAyKTsKKyAgICBjb2RlWzBdID0gfmNvZGVbMF07CisgICAgY29kZVsxXSA9IH5jb2RlWzFdOworICAgIGNvZGVbMl0gPSB+Y29kZVsyXTsKK30KKworVGhlIHBhcml0eSBhcnJheSBpcyBub3Qgc2hvd24gYW55IG1vcmUuIE5vdGUgYWxzbyB0aGF0IGZvciB0aGVzZQorZXhhbXBsZXMgSSBraW5kYSBkZXZpYXRlZCBmcm9tIG15IHJlZ3VsYXIgcHJvZ3JhbW1pbmcgc3R5bGUgYnkgYWxsb3dpbmcKK211bHRpcGxlIHN0YXRlbWVudHMgb24gYSBsaW5lLCBub3QgdXNpbmcgeyB9IGluIHRoZW4gYW5kIGVsc2UgYmxvY2tzCit3aXRoIG9ubHkgYSBzaW5nbGUgc3RhdGVtZW50IGFuZCBieSB1c2luZyBvcGVyYXRvcnMgbGlrZSBePQorCisKK0FuYWx5c2lzIDIKKz09PT09PT09PT0KKworVGhlIGNvZGUgKG9mIGNvdXJzZSkgd29ya3MsIGFuZCBodXJyYXk6IHdlIGFyZSBhIGxpdHRsZSBiaXQgZmFzdGVyIHRoYW4KK3RoZSBsaW51eCBkcml2ZXIgY29kZSAoYWJvdXQgMTUlKS4gQnV0IHdhaXQsIGRvbid0IGNoZWVyIHRvbyBxdWlja2x5LgorVEhlcmUgaXMgbW9yZSB0byBiZSBnYWluZWQuCitJZiB3ZSBsb29rIGF0IGUuZy4gcnAxNCBhbmQgcnAxNSB3ZSBzZWUgdGhhdCB3ZSBlaXRoZXIgeG9yIG91ciBkYXRhIHdpdGgKK3JwMTQgb3Igd2l0aCBycDE1LiBIb3dldmVyIHdlIGFsc28gaGF2ZSBwYXIgd2hpY2ggZ29lcyBvdmVyIGFsbCBkYXRhLgorVGhpcyBtZWFucyB0aGVyZSBpcyBubyBuZWVkIHRvIGNhbGN1bGF0ZSBycDE0IGFzIGl0IGNhbiBiZSBjYWxjdWxhdGVkIGZyb20KK3JwMTUgdGhyb3VnaCBycDE0ID0gcGFyIF4gcnAxNTsKKyhvciBpZiBkZXNpcmVkIHdlIGNhbiBhdm9pZCBjYWxjdWxhdGluZyBycDE1IGFuZCBjYWxjdWxhdGUgaXQgZnJvbQorcnAxNCkuICBUaGF0IGlzIHdoeSBzb21lIHBsYWNlcyByZWZlciB0byBpbnZlcnNlIHBhcml0eS4KK09mIGNvdXJzZSB0aGUgc2FtZSB0aGluZyBob2xkcyBmb3IgcnA0LzUsIHJwNi83LCBycDgvOSwgcnAxMC8xMSBhbmQgcnAxMi8xMy4KK0VmZmVjdGl2ZWx5IHRoaXMgbWVhbnMgd2UgY2FuIGVsaW1pbmF0ZSB0aGUgZWxzZSBjbGF1c2UgZnJvbSB0aGUgaWYKK3N0YXRlbWVudHMuIEFsc28gd2UgY2FuIG9wdGltaXNlIHRoZSBjYWxjdWxhdGlvbiBpbiB0aGUgZW5kIGEgbGl0dGxlIGJpdAorYnkgZ29pbmcgZnJvbSBsb25nIHRvIGJ5dGUgZmlyc3QuIEFjdHVhbGx5IHdlIGNhbiBldmVuIGF2b2lkIHRoZSB0YWJsZQorbG9va3VwcworCitBdHRlbXB0IDMKKz09PT09PT09PQorCitPZGQgcmVwbGFjZWQ6CisgICAgICAgIGlmIChpICYgMHgwMSkgcnA1IF49IGN1cjsgZWxzZSBycDQgXj0gY3VyOworICAgICAgICBpZiAoaSAmIDB4MDIpIHJwNyBePSBjdXI7IGVsc2UgcnA2IF49IGN1cjsKKyAgICAgICAgaWYgKGkgJiAweDA0KSBycDkgXj0gY3VyOyBlbHNlIHJwOCBePSBjdXI7CisgICAgICAgIGlmIChpICYgMHgwOCkgcnAxMSBePSBjdXI7IGVsc2UgcnAxMCBePSBjdXI7CisgICAgICAgIGlmIChpICYgMHgxMCkgcnAxMyBePSBjdXI7IGVsc2UgcnAxMiBePSBjdXI7CisgICAgICAgIGlmIChpICYgMHgyMCkgcnAxNSBePSBjdXI7IGVsc2UgcnAxNCBePSBjdXI7Cit3aXRoCisgICAgICAgIGlmIChpICYgMHgwMSkgcnA1IF49IGN1cjsKKyAgICAgICAgaWYgKGkgJiAweDAyKSBycDcgXj0gY3VyOworICAgICAgICBpZiAoaSAmIDB4MDQpIHJwOSBePSBjdXI7CisgICAgICAgIGlmIChpICYgMHgwOCkgcnAxMSBePSBjdXI7CisgICAgICAgIGlmIChpICYgMHgxMCkgcnAxMyBePSBjdXI7CisgICAgICAgIGlmIChpICYgMHgyMCkgcnAxNSBePSBjdXI7CisKKyAgICAgICAgYW5kIG91dHNpZGUgdGhlIGxvb3AgYWRkZWQ6CisgICAgcnA0ICA9IHBhciBeIHJwNTsKKyAgICBycDYgID0gcGFyIF4gcnA3OworICAgIHJwOCAgPSBwYXIgXiBycDk7CisgICAgcnAxMCAgPSBwYXIgXiBycDExOworICAgIHJwMTIgID0gcGFyIF4gcnAxMzsKKyAgICBycDE0ICA9IHBhciBeIHJwMTU7CisKK0FuZCBhZnRlciB0aGF0IHRoZSBjb2RlIHRha2VzIGFib3V0IDMwJSBtb3JlIHRpbWUsIGFsdGhvdWdoIHRoZSBudW1iZXIgb2YKK3N0YXRlbWVudHMgaXMgcmVkdWNlZC4gVGhpcyBpcyBhbHNvIHJlZmxlY3RlZCBpbiB0aGUgYXNzZW1ibHkgY29kZS4KKworCitBbmFseXNpcyAzCis9PT09PT09PT09CisKK1Zlcnkgd2VpcmQuIEd1ZXNzIGl0IGhhcyB0byBkbyB3aXRoIGNhY2hpbmcgb3IgaW5zdHJ1Y3Rpb24gcGFyYWxsZWxsaXNtCitvciBzby4gSSBhbHNvIHRyaWVkIG9uIGFuIGVlZVBDIChDZWxlcm9uLCBjbG9ja2VkIGF0IDkwMCBNaHopLiBJbnRlcmVzdGluZworb2JzZXJ2YXRpb24gd2FzIHRoYXQgdGhpcyBvbmUgaXMgb25seSAzMCUgc2xvd2VyIChhY2NvcmRpbmcgdG8gdGltZSkKK2V4ZWN1dGluZyB0aGUgY29kZSBhcyBteSAzR2h6IEQ5MjAgcHJvY2Vzc29yLgorCitXZWxsLCBpdCB3YXMgZXhwZWN0ZWQgbm90IHRvIGJlIGVhc3kgc28gbWF5YmUgaW5zdGVhZCBtb3ZlIHRvIGEKK2RpZmZlcmVudCB0cmFjazogbGV0J3MgbW92ZSBiYWNrIHRvIHRoZSBjb2RlIGZyb20gYXR0ZW1wdDIgYW5kIGRvIHNvbWUKK2xvb3AgdW5yb2xsaW5nLiBUaGlzIHdpbGwgZWxpbWluYXRlIGEgZmV3IGlmIHN0YXRlbWVudHMuIEknbGwgdHJ5CitkaWZmZXJlbnQgYW1vdW50cyBvZiB1bnJvbGxpbmcgdG8gc2VlIHdoYXQgd29ya3MgYmVzdC4KKworCitBdHRlbXB0IDQKKz09PT09PT09PQorCitVbnJvbGxlZCB0aGUgbG9vcCAxLCAyLCAzIGFuZCA0IHRpbWVzLgorRm9yIDQgdGhlIGNvZGUgc3RhcnRzIHdpdGg6CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKQorICAgIHsKKyAgICAgICAgY3VyID0gKmJwKys7CisgICAgICAgIHBhciBePSBjdXI7CisgICAgICAgIHJwNCBePSBjdXI7CisgICAgICAgIHJwNiBePSBjdXI7CisgICAgICAgIHJwOCBePSBjdXI7CisgICAgICAgIHJwMTAgXj0gY3VyOworICAgICAgICBpZiAoaSAmIDB4MSkgcnAxMyBePSBjdXI7IGVsc2UgcnAxMiBePSBjdXI7CisgICAgICAgIGlmIChpICYgMHgyKSBycDE1IF49IGN1cjsgZWxzZSBycDE0IF49IGN1cjsKKyAgICAgICAgY3VyID0gKmJwKys7CisgICAgICAgIHBhciBePSBjdXI7CisgICAgICAgIHJwNSBePSBjdXI7CisgICAgICAgIHJwNiBePSBjdXI7CisgICAgICAgIC4uLgorCisKK0FuYWx5c2lzIDQKKz09PT09PT09PT0KKworVW5yb2xsaW5nIG9uY2UgZ2FpbnMgYWJvdXQgMTUlCitVbnJvbGxpbmcgdHdpY2Uga2VlcHMgdGhlIGdhaW4gYXQgYWJvdXQgMTUlCitVbnJvbGxpbmcgdGhyZWUgdGltZXMgZ2l2ZXMgYSBnYWluIG9mIDMwJSBjb21wYXJlZCB0byBhdHRlbXB0IDIuCitVbnJvbGxpbmcgZm91ciB0aW1lcyBnaXZlcyBhIG1hcmdpbmFsIGltcHJvdmVtZW50IGNvbXBhcmVkIHRvIHVucm9sbGluZwordGhyZWUgdGltZXMuCisKK0kgZGVjaWRlZCB0byBwcm9jZWVkIHdpdGggYSBmb3VyIHRpbWUgdW5yb2xsZWQgbG9vcCBhbnl3YXkuIEl0IHdhcyBteSBndXQKK2ZlZWxpbmcgdGhhdCBpbiB0aGUgbmV4dCBzdGVwcyBJIHdvdWxkIG9idGFpbiBhZGRpdGlvbmFsIGdhaW4gZnJvbSBpdC4KKworVGhlIG5leHQgc3RlcCB3YXMgdHJpZ2dlcmVkIGJ5IHRoZSBmYWN0IHRoYXQgcGFyIGNvbnRhaW5zIHRoZSB4b3Igb2YgYWxsCitieXRlcyBhbmQgcnA0IGFuZCBycDUgZWFjaCBjb250YWluIHRoZSB4b3Igb2YgaGFsZiBvZiB0aGUgYnl0ZXMuCitTbyBpbiBlZmZlY3QgcGFyID0gcnA0IF4gcnA1LiBCdXQgYXMgeG9yIGlzIGNvbW11dGF0aXZlIHdlIGNhbiBhbHNvIHNheQordGhhdCBycDUgPSBwYXIgXiBycDQuIFNvIG5vIG5lZWQgdG8ga2VlcCBib3RoIHJwNCBhbmQgcnA1IGFyb3VuZC4gV2UgY2FuCitlbGltaW5hdGUgcnA1IChvciBycDQsIGJ1dCBJIGFscmVhZHkgZm9yZXNhdyBhbm90aGVyIG9wdGltaXNhdGlvbikuCitUaGUgc2FtZSBob2xkcyBmb3IgcnA2LzcsIHJwOC85LCBycDEwLzExIHJwMTIvMTMgYW5kIHJwMTQvMTUuCisKKworQXR0ZW1wdCA1Cis9PT09PT09PT0KKworRWZmZWN0aXZlbHkgc28gYWxsIG9kZCBkaWdpdCBycCBhc3NpZ25tZW50cyBpbiB0aGUgbG9vcCB3ZXJlIHJlbW92ZWQuCitUaGlzIGluY2x1ZGVkIHRoZSBlbHNlIGNsYXVzZSBvZiB0aGUgaWYgc3RhdGVtZW50cy4KK09mIGNvdXJzZSBhZnRlciB0aGUgbG9vcCB3ZSBuZWVkIHRvIGNvcnJlY3QgdGhpbmdzIGJ5IGFkZGluZyBjb2RlIGxpa2U6CisgICAgcnA1ID0gcGFyIF4gcnA0OworQWxzbyB0aGUgaW5pdGlhbCBhc3NpZ25tZW50cyAocnA1ID0gMDsgZXRjKSBjb3VsZCBiZSByZW1vdmVkLgorQWxvbmcgdGhlIGxpbmUgSSBhbHNvIHJlbW92ZWQgdGhlIGluaXRpYWxpc2F0aW9uIG9mIHJwMC8xLzIvMy4KKworCitBbmFseXNpcyA1Cis9PT09PT09PT09CisKK01lYXN1cmVtZW50cyBzaG93ZWQgdGhpcyB3YXMgYSBnb29kIG1vdmUuIFRoZSBydW4tdGltZSByb3VnaGx5IGhhbHZlZAorY29tcGFyZWQgd2l0aCBhdHRlbXB0IDQgd2l0aCA0IHRpbWVzIHVucm9sbGVkLCBhbmQgd2Ugb25seSByZXF1aXJlIDEvM3JkCitvZiB0aGUgcHJvY2Vzc29yIHRpbWUgY29tcGFyZWQgdG8gdGhlIGN1cnJlbnQgY29kZSBpbiB0aGUgbGludXgga2VybmVsLgorCitIb3dldmVyLCBzdGlsbCBJIHRob3VnaHQgdGhlcmUgd2FzIG1vcmUuIEkgZGlkbid0IGxpa2UgYWxsIHRoZSBpZgorc3RhdGVtZW50cy4gV2h5IG5vdCBrZWVwIGEgcnVubmluZyBwYXJpdHkgYW5kIG9ubHkga2VlcCB0aGUgbGFzdCBpZgorc3RhdGVtZW50LiBUaW1lIGZvciB5ZXQgYW5vdGhlciB2ZXJzaW9uIQorCisKK0F0dGVtcHQgNgorPT09PT09PT09CisKK1RIZSBjb2RlIHdpdGhpbiB0aGUgZm9yIGxvb3Agd2FzIGNoYW5nZWQgdG86CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKQorICAgIHsKKyAgICAgICAgY3VyID0gKmJwKys7IHRtcHBhciAgPSBjdXI7IHJwNCBePSBjdXI7CisgICAgICAgIGN1ciA9ICpicCsrOyB0bXBwYXIgXj0gY3VyOyBycDYgXj0gdG1wcGFyOworICAgICAgICBjdXIgPSAqYnArKzsgdG1wcGFyIF49IGN1cjsgcnA0IF49IGN1cjsKKyAgICAgICAgY3VyID0gKmJwKys7IHRtcHBhciBePSBjdXI7IHJwOCBePSB0bXBwYXI7CisKKyAgICAgICAgY3VyID0gKmJwKys7IHRtcHBhciBePSBjdXI7IHJwNCBePSBjdXI7IHJwNiBePSBjdXI7CisgICAgICAgIGN1ciA9ICpicCsrOyB0bXBwYXIgXj0gY3VyOyBycDYgXj0gY3VyOworCSAgICBjdXIgPSAqYnArKzsgdG1wcGFyIF49IGN1cjsgcnA0IF49IGN1cjsKKwkgICAgY3VyID0gKmJwKys7IHRtcHBhciBePSBjdXI7IHJwMTAgXj0gdG1wcGFyOworCisJICAgIGN1ciA9ICpicCsrOyB0bXBwYXIgXj0gY3VyOyBycDQgXj0gY3VyOyBycDYgXj0gY3VyOyBycDggXj0gY3VyOworICAgICAgICBjdXIgPSAqYnArKzsgdG1wcGFyIF49IGN1cjsgcnA2IF49IGN1cjsgcnA4IF49IGN1cjsKKwkgICAgY3VyID0gKmJwKys7IHRtcHBhciBePSBjdXI7IHJwNCBePSBjdXI7IHJwOCBePSBjdXI7CisgICAgICAgIGN1ciA9ICpicCsrOyB0bXBwYXIgXj0gY3VyOyBycDggXj0gY3VyOworCisgICAgICAgIGN1ciA9ICpicCsrOyB0bXBwYXIgXj0gY3VyOyBycDQgXj0gY3VyOyBycDYgXj0gY3VyOworICAgICAgICBjdXIgPSAqYnArKzsgdG1wcGFyIF49IGN1cjsgcnA2IF49IGN1cjsKKyAgICAgICAgY3VyID0gKmJwKys7IHRtcHBhciBePSBjdXI7IHJwNCBePSBjdXI7CisgICAgICAgIGN1ciA9ICpicCsrOyB0bXBwYXIgXj0gY3VyOworCisJICAgIHBhciBePSB0bXBwYXI7CisgICAgICAgIGlmICgoaSAmIDB4MSkgPT0gMCkgcnAxMiBePSB0bXBwYXI7CisgICAgICAgIGlmICgoaSAmIDB4MikgPT0gMCkgcnAxNCBePSB0bXBwYXI7CisgICAgfQorCitBcyB5b3UgY2FuIHNlZSB0bXBwYXIgaXMgdXNlZCB0byBhY2N1bXVsYXRlIHRoZSBwYXJpdHkgd2l0aGluIGEgZm9yCitpdGVyYXRpb24uIEluIHRoZSBsYXN0IDMgc3RhdGVtZW50cyBpcyBpcyBhZGRlZCB0byBwYXIgYW5kLCBpZiBuZWVkZWQsCit0byBycDEyIGFuZCBycDE0LgorCitXaGlsZSBtYWtpbmcgdGhlIGNoYW5nZXMgSSBhbHNvIGZvdW5kIHRoYXQgSSBjb3VsZCBleHBsb2l0IHRoYXQgdG1wcGFyCitjb250YWlucyB0aGUgcnVubmluZyBwYXJpdHkgZm9yIHRoaXMgaXRlcmF0aW9uLiBTbyBpbnN0ZWFkIG9mIGhhdmluZzoKK3JwNCBePSBjdXI7IHJwNiA9IGN1cjsKK0kgcmVtb3ZlZCB0aGUgcnA2ID0gY3VyOyBzdGF0ZW1lbnQgYW5kIGRpZCBycDYgXj0gdG1wcGFyOyBvbiBuZXh0CitzdGF0ZW1lbnQuIEEgc2ltaWxhciBjaGFuZ2Ugd2FzIGRvbmUgZm9yIHJwOCBhbmQgcnAxMAorCisKK0FuYWx5c2lzIDYKKz09PT09PT09PT0KKworTWVhc3VyaW5nIHRoaXMgY29kZSBhZ2FpbiBzaG93ZWQgYmlnIGdhaW4uIFdoZW4gZXhlY3V0aW5nIHRoZSBvcmlnaW5hbAorbGludXggY29kZSAxIG1pbGxpb24gdGltZXMsIHRoaXMgdG9vayBhYm91dCAxIHNlY29uZCBvbiBteSBzeXN0ZW0uCisodXNpbmcgdGltZSB0byBtZWFzdXJlIHRoZSBwZXJmb3JtYW5jZSkuIEFmdGVyIHRoaXMgaXRlcmF0aW9uIEkgd2FzIGJhY2sKK3RvIDAuMDc1IHNlYy4gQWN0dWFsbHkgSSBoYWQgdG8gZGVjaWRlIHRvIHN0YXJ0IG1lYXN1cmluZyBvdmVyIDEwCittaWxsaW9uIGludGVyYXRpb25zIGluIG9yZGVyIG5vdCB0byBsb29zZSB0b28gbXVjaCBhY2N1cmFjeS4gVGhpcyBvbmUKK2RlZmluaXRlbHkgc2VlbWVkIHRvIGJlIHRoZSBqYWNrcG90IQorCitUaGVyZSBpcyBhIGxpdHRsZSBiaXQgbW9yZSByb29tIGZvciBpbXByb3ZlbWVudCB0aG91Z2guIFRoZXJlIGFyZSB0aHJlZQorcGxhY2VzIHdpdGggc3RhdGVtZW50czoKK3JwNCBePSBjdXI7IHJwNiBePSBjdXI7CitJdCBzZWVtcyBtb3JlIGVmZmljaWVudCB0byBhbHNvIG1haW50YWluIGEgdmFyaWFibGUgcnA0XzYgaW4gdGhlIHdoaWxlCitsb29wOyBUaGlzIGVsaW1pbmF0ZXMgMyBzdGF0ZW1lbnRzIHBlciBsb29wLiBPZiBjb3Vyc2UgYWZ0ZXIgdGhlIGxvb3Agd2UKK25lZWQgdG8gY29ycmVjdCBieSBhZGRpbmc6CisgICAgcnA0IF49IHJwNF82OworICAgIHJwNiBePSBycDRfNgorRnVydGhlcm1vcmUgdGhlcmUgYXJlIDQgc2VxdWVudGlhbCBhc3NpbmdtZW50cyB0byBycDguIFRoaXMgY2FuIGJlCitlbmNvZGVkIHNsaWdodGx5IG1vcmUgZWZmaWNpZW50IGJ5IHNhdmluZyB0bXBwYXIgYmVmb3JlIHRob3NlIDQgbGluZXMKK2FuZCBsYXRlciBkbyBycDggPSBycDggXiB0bXBwYXIgXiBub3RycDg7Cisod2hlcmUgbm90cnA4IGlzIHRoZSB2YWx1ZSBvZiBycDggYmVmb3JlIHRob3NlIDQgbGluZXMpLgorQWdhaW4gYSB1c2Ugb2YgdGhlIGNvbW11dGF0aXZlIHByb3BlcnR5IG9mIHhvci4KK1RpbWUgZm9yIGEgbmV3IHRlc3QhCisKKworQXR0ZW1wdCA3Cis9PT09PT09PT0KKworVGhlIG5ldyBjb2RlIG5vdyBsb29rcyBsaWtlOgorCisgICAgZm9yIChpID0gMDsgaSA8IDQ7IGkrKykKKyAgICB7CisgICAgICAgIGN1ciA9ICpicCsrOyB0bXBwYXIgID0gY3VyOyBycDQgXj0gY3VyOworICAgICAgICBjdXIgPSAqYnArKzsgdG1wcGFyIF49IGN1cjsgcnA2IF49IHRtcHBhcjsKKyAgICAgICAgY3VyID0gKmJwKys7IHRtcHBhciBePSBjdXI7IHJwNCBePSBjdXI7CisgICAgICAgIGN1ciA9ICpicCsrOyB0bXBwYXIgXj0gY3VyOyBycDggXj0gdG1wcGFyOworCisgICAgICAgIGN1ciA9ICpicCsrOyB0bXBwYXIgXj0gY3VyOyBycDRfNiBePSBjdXI7CisgICAgICAgIGN1ciA9ICpicCsrOyB0bXBwYXIgXj0gY3VyOyBycDYgXj0gY3VyOworCSAgICBjdXIgPSAqYnArKzsgdG1wcGFyIF49IGN1cjsgcnA0IF49IGN1cjsKKwkgICAgY3VyID0gKmJwKys7IHRtcHBhciBePSBjdXI7IHJwMTAgXj0gdG1wcGFyOworCisJICAgIG5vdHJwOCA9IHRtcHBhcjsKKwkgICAgY3VyID0gKmJwKys7IHRtcHBhciBePSBjdXI7IHJwNF82IF49IGN1cjsKKyAgICAgICAgY3VyID0gKmJwKys7IHRtcHBhciBePSBjdXI7IHJwNiBePSBjdXI7CisJICAgIGN1ciA9ICpicCsrOyB0bXBwYXIgXj0gY3VyOyBycDQgXj0gY3VyOworICAgICAgICBjdXIgPSAqYnArKzsgdG1wcGFyIF49IGN1cjsKKwkgICAgcnA4ID0gcnA4IF4gdG1wcGFyIF4gbm90cnA4OworCisgICAgICAgIGN1ciA9ICpicCsrOyB0bXBwYXIgXj0gY3VyOyBycDRfNiBePSBjdXI7CisgICAgICAgIGN1ciA9ICpicCsrOyB0bXBwYXIgXj0gY3VyOyBycDYgXj0gY3VyOworICAgICAgICBjdXIgPSAqYnArKzsgdG1wcGFyIF49IGN1cjsgcnA0IF49IGN1cjsKKyAgICAgICAgY3VyID0gKmJwKys7IHRtcHBhciBePSBjdXI7CisKKwkgICAgcGFyIF49IHRtcHBhcjsKKyAgICAgICAgaWYgKChpICYgMHgxKSA9PSAwKSBycDEyIF49IHRtcHBhcjsKKyAgICAgICAgaWYgKChpICYgMHgyKSA9PSAwKSBycDE0IF49IHRtcHBhcjsKKyAgICB9CisgICAgcnA0IF49IHJwNF82OworICAgIHJwNiBePSBycDRfNjsKKworCitOb3QgYSBiaWcgY2hhbmdlLCBidXQgZXZlcnkgcGVubnkgY291bnRzIDotKQorCisKK0FuYWx5c2lzIDcKKz09PT09PT09PT0KKworQWN1dGFsbHkgdGhpcyBtYWRlIHRoaW5ncyB3b3JzZS4gTm90IHZlcnkgbXVjaCwgYnV0IEkgZG9uJ3Qgd2FudCB0byBtb3ZlCitpbnRvIHRoZSB3cm9uZyBkaXJlY3Rpb24uIE1heWJlIHNvbWV0aGluZyB0byBpbnZlc3RpZ2F0ZSBsYXRlci4gQ291bGQKK2hhdmUgdG8gZG8gd2l0aCBjYWNoaW5nIGFnYWluLgorCitHdWVzcyB0aGF0IGlzIHdoYXQgdGhlcmUgaXMgdG8gd2luIHdpdGhpbiB0aGUgbG9vcC4gTWF5YmUgdW5yb2xsaW5nIG9uZQorbW9yZSB0aW1lIHdpbGwgaGVscC4gSSdsbCBrZWVwIHRoZSBvcHRpbWlzYXRpb25zIGZyb20gNyBmb3Igbm93LgorCisKK0F0dGVtcHQgOAorPT09PT09PT09CisKK1Vucm9sbGVkIHRoZSBsb29wIG9uZSBtb3JlIHRpbWUuCisKKworQW5hbHlzaXMgOAorPT09PT09PT09PQorCitUaGlzIG1ha2VzIHRoaW5ncyB3b3JzZS4gTGV0J3Mgc3RpY2sgd2l0aCBhdHRlbXB0IDYgYW5kIGNvbnRpbnVlIGZyb20gdGhlcmUuCitBbHRob3VnaCBpdCBzZWVtcyB0aGF0IHRoZSBjb2RlIHdpdGhpbiB0aGUgbG9vcCBjYW5ub3QgYmUgb3B0aW1pc2VkCitmdXJ0aGVyIHRoZXJlIGlzIHN0aWxsIHJvb20gdG8gb3B0aW1pemUgdGhlIGdlbmVyYXRpb24gb2YgdGhlIGVjYyBjb2Rlcy4KK1dlIGNhbiBzaW1wbHkgY2FsY3VhbGF0ZSB0aGUgdG90YWwgcGFyaXR5LiBJZiB0aGlzIGlzIDAgdGhlbiBycDQgPSBycDUKK2V0Yy4gSWYgdGhlIHBhcml0eSBpcyAxLCB0aGVuIHJwNCA9ICFycDU7CitCdXQgaWYgcnA0ID0gcnA1IHdlIGRvIG5vdCBuZWVkIHJwNSBldGMuIFdlIGNhbiBqdXN0IHdyaXRlIHRoZSBldmVuIGJpdHMKK2luIHRoZSByZXN1bHQgYnl0ZSBhbmQgdGhlbiBkbyBzb21ldGhpbmcgbGlrZQorICAgIGNvZGVbMF0gfD0gKGNvZGVbMF0gPDwgMSk7CitMZXRzIHRlc3QgdGhpcy4KKworCitBdHRlbXB0IDkKKz09PT09PT09PQorCitDaGFuZ2VkIHRoZSBjb2RlIGJ1dCBhZ2FpbiB0aGlzIHNsaWdodGx5IGRlZ3JhZGVzIHBlcmZvcm1hbmNlLiBUcmllZCBhbGwKK2tpbmQgb2Ygb3RoZXIgdGhpbmdzLCBsaWtlIGhhdmluZyBkZWRpY2F0ZWQgcGFyaXR5IGFycmF5cyB0byBhdm9pZCB0aGUKK3NoaWZ0IGFmdGVyIHBhcml0eVtycDddIDw8IDc7IE5vIGdhaW4uCitDaGFuZ2UgdGhlIGxvb2t1cCB1c2luZyB0aGUgcGFyaXR5IGFycmF5IGJ5IHVzaW5nIHNoaWZ0IG9wZXJhdG9ycyAoZS5nLgorcmVwbGFjZSBwYXJpdHlbcnA3XSA8PCA3IHdpdGg6CitycDcgXj0gKHJwNyA8PCA0KTsKK3JwNyBePSAocnA3IDw8IDIpOworcnA3IF49IChycDcgPDwgMSk7CitycDcgJj0gMHg4MDsKK05vIGdhaW4uCisKK1RoZSBvbmx5IG1hcmdpbmFsIGNoYW5nZSB3YXMgaW52ZXJ0aW5nIHRoZSBwYXJpdHkgYml0cywgc28gd2UgY2FuIHJlbW92ZQordGhlIGxhc3QgdGhyZWUgaW52ZXJ0IHN0YXRlbWVudHMuCisKK0FoIHdlbGwsIHBpdHkgdGhpcyBkb2VzIG5vdCBkZWxpdmVyIG1vcmUuIFRoZW4gYWdhaW4gMTAgbWlsbGlvbgoraXRlcmF0aW9ucyB1c2luZyB0aGUgbGludXggZHJpdmVyIGNvZGUgdGFrZXMgYmV0d2VlbiAxMyBhbmQgMTMuNQorc2Vjb25kcywgd2hlcmVhcyBteSBjb2RlIG5vdyB0YWtlcyBhYm91dCAwLjczIHNlY29uZHMgZm9yIHRob3NlIDEwCittaWxsaW9uIGl0ZXJhdGlvbnMuIFNvIGJhc2ljYWxseSBJJ3ZlIGltcHJvdmVkIHRoZSBwZXJmb3JtYW5jZSBieSBhCitmYWN0b3IgMTggb24gbXkgc3lzdGVtLiBOb3QgdGhhdCBiYWQuIE9mIGNvdXJzZSBvbiBkaWZmZXJlbnQgaGFyZHdhcmUKK3lvdSB3aWxsIGdldCBkaWZmZXJlbnQgcmVzdWx0cy4gTm8gd2FycmFudGllcyEKKworQnV0IG9mIGNvdXJzZSB0aGVyZSBpcyBubyBzdWNoIHRoaW5nIGFzIGEgZnJlZSBsdW5jaC4gVGhlIGNvZGVzaXplIGFsbW9zdAordHJpcGxlZCAoZnJvbSA1NjIgYnl0ZXMgdG8gMTQzNCBieXRlcykuIFRoZW4gYWdhaW4sIGl0IGlzIG5vdCB0aGF0IG11Y2guCisKKworQ29ycmVjdGluZyBlcnJvcnMKKz09PT09PT09PT09PT09PT09CisKK0ZvciBjb3JyZWN0aW5nIGVycm9ycyBJIGFnYWluIHVzZWQgdGhlIFNUIGFwcGxpY2F0aW9uIG5vdGUgYXMgYSBzdGFydGVyLAorYnV0IEkgYWxzbyBwZWVrZWQgYXQgdGhlIGV4aXN0aW5nIGNvZGUuCitUaGUgYWxnb3JpdGhtIGl0c2VsZiBpcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLiBKdXN0IHhvciB0aGUgZ2l2ZW4gYW5kCit0aGUgY2FsY3VsYXRlZCBlY2MuIElmIGFsbCBieXRlcyBhcmUgMCB0aGVyZSBpcyBubyBwcm9ibGVtLiBJZiAxMSBiaXRzCithcmUgMSB3ZSBoYXZlIG9uZSBjb3JyZWN0YWJsZSBiaXQgZXJyb3IuIElmIHRoZXJlIGlzIDEgYml0IDEsIHdlIGhhdmUgYW4KK2Vycm9yIGluIHRoZSBnaXZlbiBlY2MgY29kZS4KK0l0IHByb3ZlZCB0byBiZSBmYXN0ZXN0IHRvIGRvIHNvbWUgdGFibGUgbG9va3Vwcy4gUGVyZm9ybWFuY2UgZ2FpbgoraW50cm9kdWNlZCBieSB0aGlzIGlzIGFib3V0IGEgZmFjdG9yIDIgb24gbXkgc3lzdGVtIHdoZW4gYSByZXBhaXIgaGFkIHRvCitiZSBkb25lLCBhbmQgMSUgb3Igc28gaWYgbm8gcmVwYWlyIGhhZCB0byBiZSBkb25lLgorQ29kZSBzaXplIGluY3JlYXNlZCBmcm9tIDMzMCBieXRlcyB0byA2ODYgYnl0ZXMgZm9yIHRoaXMgZnVuY3Rpb24uCisoZ2NjIDQuMiwgLU8zKQorCisKK0NvbmNsdXNpb24KKz09PT09PT09PT0KKworVGhlIGdhaW4gd2hlbiBjYWxjdWxhdGluZyB0aGUgZWNjIGlzIHRyZW1lbmRvdXMuIE9tIG15IGRldmVsb3BtZW50IGhhcmR3YXJlCithIHNwZWVkdXAgb2YgYSBmYWN0b3Igb2YgMTggZm9yIGVjYyBjYWxjdWxhdGlvbiB3YXMgYWNoaWV2ZWQuIE9uIGEgdGVzdCBvbiBhbgorZW1iZWRkZWQgc3lzdGVtIHdpdGggYSBNSVBTIGNvcmUgYSBmYWN0b3IgNyB3YXMgb2J0YWluZWQuCitPbiAgYSB0ZXN0IHdpdGggYSBMaW5rc3lzIE5TTFUyIChBUk12NVRFIHByb2Nlc3NvcikgdGhlIHNwZWVkdXAgd2FzIGEgZmFjdG9yCis1IChiaWcgZW5kaWFuIG1vZGUsIGdjYyA0LjEuMiwgLU8zKQorRm9yIGNvcnJlY3Rpb24gbm90IG11Y2ggZ2FpbiBjb3VsZCBiZSBvYnRhaW5lZCAoYXMgYml0ZmxpcHMgYXJlIHJhcmUpLiBUaGVuCithZ2FpbiB0aGVyZSBhcmUgYWxzbyBtdWNoIGxlc3MgY3ljbGVzIHNwZW50IHRoZXJlLgorCitJdCBzZWVtcyB0aGVyZSBpcyBub3QgbXVjaCBtb3JlIGdhaW4gcG9zc2libGUgaW4gdGhpcywgYXQgbGVhc3Qgd2hlbgorcHJvZ3JhbW1lZCBpbiBDLiBPZiBjb3Vyc2UgaXQgbWlnaHQgYmUgcG9zc2libGUgdG8gc3F1ZWV6ZSBzb21ldGhpbmcgbW9yZQorb3V0IG9mIGl0IHdpdGggYW4gYXNzZW1ibGVyIHByb2dyYW0sIGJ1dCBkdWUgdG8gcGlwZWxpbmUgYmVoYXZpb3VyIGV0YwordGhpcyBpcyB2ZXJ5IHRyaWNreSAoYXQgbGVhc3QgZm9yIGludGVsIGh3KS4KKworQXV0aG9yOiBGcmFucyBNZXVsZW5icm9la3MKK0NvcHlyaWdodCAoQykgMjAwOCBLb25pbmtsaWprZSBQaGlsaXBzIEVsZWN0cm9uaWNzIE5WLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2NzODl4MC50eHQgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvY3M4OXgwLnR4dAppbmRleCA2Mzg3ZDNkLi5jNzI1ZDMzIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvY3M4OXgwLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvY3M4OXgwLnR4dApAQCAtMyw3ICszLDcgQEAKIC0tLS0KIAogVGhpcyBkb2N1bWVudCB3YXMgY29udHJpYnV0ZWQgYnkgQ2lycnVzIExvZ2ljIGZvciBrZXJuZWwgMi4yLjUuICBUaGlzIHZlcnNpb24KLWhhcyBiZWVuIHVwZGF0ZWQgZm9yIDIuMy40OCBieSBBbmRyZXcgTW9ydG9uIDxhbmRyZXdtQHVvdy5lZHUuYXU+CitoYXMgYmVlbiB1cGRhdGVkIGZvciAyLjMuNDggYnkgQW5kcmV3IE1vcnRvbi4KIAogQ2lycnVzIG1ha2UgYSBjb3B5IG9mIHRoaXMgZHJpdmVyIGF2YWlsYWJsZSBhdCB0aGVpciB3ZWJzaXRlLCBhcwogZGVzY3JpYmVkIGJlbG93LiAgSW4gZ2VuZXJhbCwgeW91IHNob3VsZCB1c2UgdGhlIGRyaXZlciB2ZXJzaW9uIHdoaWNoCkBAIC02OTAsNyArNjkwLDcgQEAKIDYuNCBDdXJyZW50IG1haW50YWluZXIKIAogSW4gRmVicnVhcnkgMjAwMCB0aGUgbWFpbnRlbmFuY2Ugb2YgdGhpcyBkcml2ZXIgd2FzIGFzc3VtZWQgYnkgQW5kcmV3Ci1Nb3J0b24gPGFrcG1AemlwLmNvbS5hdT4KK01vcnRvbi4KIAogNi41IEtlcm5lbCBtb2R1bGUgcGFyYW1ldGVycwogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvcGhvbmV0LnR4dCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9waG9uZXQudHh0CmluZGV4IDBlNmU1OTIuLjZhMDdlNDUgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9waG9uZXQudHh0CisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9waG9uZXQudHh0CkBAIC0xNDYsOCArMTQ2LDggQEAKIFdoZW4gcG9sbGluZyBhIGNvbm5lY3RlZCBwaXBlIHNvY2tldCBmb3Igd3JpdGFiaWxpdHksIHRoZXJlIGlzIGFuCiBpbnRyaW5zaWMgcmFjZSBjb25kaXRpb24gd2hlcmVieSB3cml0YWJpbGl0eSBtaWdodCBiZSBsb3N0IGJldHdlZW4gdGhlCiBwb2xsaW5nIGFuZCB0aGUgd3JpdGluZyBzeXN0ZW0gY2FsbHMuIEluIHRoaXMgY2FzZSwgdGhlIHNvY2tldCB3aWxsCi1ibG9jayB1bnRpbCB3cml0ZSBiZWNhdXNlIHBvc3NpYmxlIGFnYWluLCB1bmxlc3Mgbm9uLWJsb2NraW5nIG1vZGUKLWJlY29tZXMgZW5hYmxlZC4KK2Jsb2NrIHVudGlsIHdyaXRlIGJlY29tZXMgcG9zc2libGUgYWdhaW4sIHVubGVzcyBub24tYmxvY2tpbmcgbW9kZQoraXMgZW5hYmxlZC4KIAogCiBUaGUgcGlwZSBwcm90b2NvbCBwcm92aWRlcyB0d28gc29ja2V0IG9wdGlvbnMgYXQgdGhlIFNPTF9QTlBJUEUgbGV2ZWw6CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvdm9ydGV4LnR4dCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy92b3J0ZXgudHh0CmluZGV4IDYzNTZkM2YuLmJkNzA5NzYgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy92b3J0ZXgudHh0CisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy92b3J0ZXgudHh0CkBAIC0xLDUgKzEsNSBAQAogRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3ZvcnRleC50eHQKLUFuZHJldyBNb3J0b24gPGFuZHJld21AdW93LmVkdS5hdT4KK0FuZHJldyBNb3J0b24KIDMwIEFwcmlsIDIwMDAKIAogCkBAIC0xMSw3ICsxMSw3IEBACiBEb24gaXMgbm8gbG9uZ2VyIHRoZSBwcmltZSBtYWludGFpbmVyIG9mIHRoaXMgdmVyc2lvbiBvZiB0aGUgZHJpdmVyLiAKIFBsZWFzZSByZXBvcnQgcHJvYmxlbXMgdG8gb25lIG9yIG1vcmUgb2Y6CiAKLSAgQW5kcmV3IE1vcnRvbiA8YWtwbUBvc2RsLm9yZz4KKyAgQW5kcmV3IE1vcnRvbgogICBOZXRkZXYgbWFpbGluZyBsaXN0IDxuZXRkZXZAdmdlci5rZXJuZWwub3JnPgogICBMaW51eCBrZXJuZWwgbWFpbGluZyBsaXN0IDxsaW51eC1rZXJuZWxAdmdlci5rZXJuZWwub3JnPgogCkBAIC0zMDUsMTEgKzMwNSw2IEBACiAKIAlmdHA6Ly9mdHAuM2NvbS5jb20vcHViL25pYy8zYzkweC8zYzkweHgyLmV4ZQogCi1Ecml2ZXIgdXBkYXRlcyBhbmQgYSBkZXRhaWxlZCBjaGFuZ2Vsb2cgZm9yIHRoZSBtb2RpZmljYXRpb25zIHdoaWNoCi13ZXJlIG1hZGUgZm9yIHRoZSAyLjMvMiw0IHNlcmllcyBrZXJuZWwgaXMgYXZhaWxhYmxlIGF0Ci0KLSAgICAgaHR0cDovL3d3dy56aXAuY29tLmF1L35ha3BtL2xpbnV4LyMzYzU5eC1iYwotCiAKIEF1dG9uZWdvdGlhdGlvbiBub3RlcwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3BjbWNpYS9kcml2ZXItY2hhbmdlcy50eHQgYi9Eb2N1bWVudGF0aW9uL3BjbWNpYS9kcml2ZXItY2hhbmdlcy50eHQKaW5kZXggOTZmMTU1ZS4uMDU5OTM0MyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9wY21jaWEvZHJpdmVyLWNoYW5nZXMudHh0CisrKyBiL0RvY3VtZW50YXRpb24vcGNtY2lhL2RyaXZlci1jaGFuZ2VzLnR4dApAQCAtMSw1ICsxLDExIEBACiBUaGlzIGZpbGUgZGV0YWlscyBjaGFuZ2VzIGluIDIuNiB3aGljaCBhZmZlY3QgUENNQ0lBIGNhcmQgZHJpdmVyIGF1dGhvcnM6CiAKKyogTmV3IGNvbmZpZ3VyYXRpb24gbG9vcCBoZWxwZXIgKGFzIG9mIDIuNi4yOCkKKyAgIEJ5IGNhbGxpbmcgcGNtY2lhX2xvb3BfY29uZmlnKCksIGEgZHJpdmVyIGNhbiBpdGVyYXRlIG92ZXIgYWxsIGF2YWlsYWJsZQorICAgY29uZmlndXJhdGlvbiBvcHRpb25zLiBEdXJpbmcgYSBkcml2ZXIncyBwcm9iZSgpIHBoYXNlLCBvbmUgZG9lc24ndCBuZWVkCisgICB0byB1c2UgcGNtY2lhX2dldF97Zmlyc3QsbmV4dH1fdHVwbGUsIHBjbWNpYV9nZXRfdHVwbGVfZGF0YSBhbmQKKyAgIHBjbWNpYV9wYXJzZV90dXBsZSBkaXJlY3RseSBpbiBtb3N0IGlmIG5vdCBhbGwgY2FzZXMuCisKICogTmV3IHJlbGVhc2UgaGVscGVyIChhcyBvZiAyLjYuMTcpCiAgICBJbnN0ZWFkIG9mIGNhbGxpbmcgcGNtY2lhX3JlbGVhc2Vfe2NvbmZpZ3VyYXRpb24saW8saXJxLHdpbn0sIGFsbCB0aGF0J3MKICAgIG5lY2Vzc2FyeSBub3cgaXMgY2FsbGluZyBwY21jaWFfZGlzYWJsZV9kZXZpY2UuIEFzIHRoZXJlIGlzIG5vIHZhbGlkCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Bvd2VyL3JlZ3VsYXRvci9tYWNoaW5lLnR4dCBiL0RvY3VtZW50YXRpb24vcG93ZXIvcmVndWxhdG9yL21hY2hpbmUudHh0CmluZGV4IGM5YTM1NjYuLmNlMzQ4N2QgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vcG93ZXIvcmVndWxhdG9yL21hY2hpbmUudHh0CisrKyBiL0RvY3VtZW50YXRpb24vcG93ZXIvcmVndWxhdG9yL21hY2hpbmUudHh0CkBAIC0yLDE3ICsyLDggQEAKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKIFRoZSByZWd1bGF0b3IgbWFjaGluZSBkcml2ZXIgaW50ZXJmYWNlIGlzIGludGVuZGVkIGZvciBib2FyZC9tYWNoaW5lIHNwZWNpZmljCi1pbml0aWFsaXNhdGlvbiBjb2RlIHRvIGNvbmZpZ3VyZSB0aGUgcmVndWxhdG9yIHN1YnN5c3RlbS4gVHlwaWNhbCB0aGluZ3MgdGhhdAotbWFjaGluZSBkcml2ZXJzIHdvdWxkIGRvIGFyZSA6LQoraW5pdGlhbGlzYXRpb24gY29kZSB0byBjb25maWd1cmUgdGhlIHJlZ3VsYXRvciBzdWJzeXN0ZW0uCiAKLSAxLiBSZWd1bGF0b3IgLT4gRGV2aWNlIG1hcHBpbmcuCi0gMi4gUmVndWxhdG9yIHN1cHBseSBjb25maWd1cmF0aW9uLgotIDMuIFBvd2VyIERvbWFpbiBjb25zdHJhaW50IHNldHRpbmcuCi0KLQotCi0xLiBSZWd1bGF0b3IgLT4gZGV2aWNlIG1hcHBpbmcKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogQ29uc2lkZXIgdGhlIGZvbGxvd2luZyBtYWNoaW5lIDotCiAKICAgUmVndWxhdG9yLTEgLSstPiBSZWd1bGF0b3ItMiAtLT4gW0NvbnN1bWVyIEEgQCAxLjggLSAyLjBWXQpAQCAtMjEsODEgKzEyLDgyIEBACiAKIFRoZSBkcml2ZXJzIGZvciBjb25zdW1lcnMgQSAmIEIgbXVzdCBiZSBtYXBwZWQgdG8gdGhlIGNvcnJlY3QgcmVndWxhdG9yIGluCiBvcmRlciB0byBjb250cm9sIHRoZWlyIHBvd2VyIHN1cHBseS4gVGhpcyBtYXBwaW5nIGNhbiBiZSBhY2hpZXZlZCBpbiBtYWNoaW5lCi1pbml0aWFsaXNhdGlvbiBjb2RlIGJ5IGNhbGxpbmcgOi0KK2luaXRpYWxpc2F0aW9uIGNvZGUgYnkgY3JlYXRpbmcgYSBzdHJ1Y3QgcmVndWxhdG9yX2NvbnN1bWVyX3N1cHBseSBmb3IKK2VhY2ggcmVndWxhdG9yLgogCi1pbnQgcmVndWxhdG9yX3NldF9kZXZpY2Vfc3VwcGx5KGNvbnN0IGNoYXIgKnJlZ3VsYXRvciwgc3RydWN0IGRldmljZSAqZGV2LAotCQkJCWNvbnN0IGNoYXIgKnN1cHBseSk7CitzdHJ1Y3QgcmVndWxhdG9yX2NvbnN1bWVyX3N1cHBseSB7CisJc3RydWN0IGRldmljZSAqZGV2OwkvKiBjb25zdW1lciAqLworCWNvbnN0IGNoYXIgKnN1cHBseTsJLyogY29uc3VtZXIgc3VwcGx5IC0gZS5nLiAidmNjIiAqLworfTsKIAotYW5kIGlzIHNob3duIHdpdGggdGhlIGZvbGxvd2luZyBjb2RlIDotCitlLmcuIGZvciB0aGUgbWFjaGluZSBhYm92ZQogCi1yZWd1bGF0b3Jfc2V0X2RldmljZV9zdXBwbHkoIlJlZ3VsYXRvci0xIiwgZGV2QiwgIlZjYyIpOwotcmVndWxhdG9yX3NldF9kZXZpY2Vfc3VwcGx5KCJSZWd1bGF0b3ItMiIsIGRldkEsICJWY2MiKTsKK3N0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2NvbnN1bWVyX3N1cHBseSByZWd1bGF0b3IxX2NvbnN1bWVyc1tdID0geworeworCS5kZXYJPSAmcGxhdGZvcm1fY29uc3VtZXJCX2RldmljZS5kZXYsCisJLnN1cHBseQk9ICJWY2MiLAorfSx9OworCitzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9jb25zdW1lcl9zdXBwbHkgcmVndWxhdG9yMl9jb25zdW1lcnNbXSA9IHsKK3sKKwkuZGV2CT0gJnBsYXRmb3JtX2NvbnN1bWVyQV9kZXZpY2UuZGV2LAorCS5zdXBwbHkJPSAiVmNjIiwKK30sfTsKIAogVGhpcyBtYXBzIFJlZ3VsYXRvci0xIHRvIHRoZSAnVmNjJyBzdXBwbHkgZm9yIENvbnN1bWVyIEIgYW5kIG1hcHMgUmVndWxhdG9yLTIKIHRvIHRoZSAnVmNjJyBzdXBwbHkgZm9yIENvbnN1bWVyIEEuCiAKK0NvbnN0cmFpbnRzIGNhbiBub3cgYmUgcmVnaXN0ZXJlZCBieSBkZWZpbmluZyBhIHN0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhCitmb3IgZWFjaCByZWd1bGF0b3IgcG93ZXIgZG9tYWluLiBUaGlzIHN0cnVjdHVyZSBhbHNvIG1hcHMgdGhlIGNvbnN1bWVycwordG8gdGhlaXIgc3VwcGx5IHJlZ3VsYXRvciA6LQogCi0yLiBSZWd1bGF0b3Igc3VwcGx5IGNvbmZpZ3VyYXRpb24uCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci1Db25zaWRlciB0aGUgZm9sbG93aW5nIG1hY2hpbmUgKGFnYWluKSA6LQotCi0gIFJlZ3VsYXRvci0xIC0rLT4gUmVndWxhdG9yLTIgLS0+IFtDb25zdW1lciBBIEAgMS44IC0gMi4wVl0KLSAgICAgICAgICAgICAgIHwKLSAgICAgICAgICAgICAgICstPiBbQ29uc3VtZXIgQiBAIDMuM1ZdCitzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9pbml0X2RhdGEgcmVndWxhdG9yMV9kYXRhID0geworCS5jb25zdHJhaW50cyA9IHsKKwkJLm1pbl91ViA9IDMzMDAwMDAsCisJCS5tYXhfdVYgPSAzMzAwMDAwLAorCQkudmFsaWRfbW9kZXNfbWFzayA9IFJFR1VMQVRPUl9NT0RFX05PUk1BTCwKKwl9LAorCS5udW1fY29uc3VtZXJfc3VwcGxpZXMgPSBBUlJBWV9TSVpFKHJlZ3VsYXRvcjFfY29uc3VtZXJzKSwKKwkuY29uc3VtZXJfc3VwcGxpZXMgPSByZWd1bGF0b3IxX2NvbnN1bWVycywKK307CiAKIFJlZ3VsYXRvci0xIHN1cHBsaWVzIHBvd2VyIHRvIFJlZ3VsYXRvci0yLiBUaGlzIHJlbGF0aW9uc2hpcCBtdXN0IGJlIHJlZ2lzdGVyZWQKIHdpdGggdGhlIGNvcmUgc28gdGhhdCBSZWd1bGF0b3ItMSBpcyBhbHNvIGVuYWJsZWQgd2hlbiBDb25zdW1lciBBIGVuYWJsZXMgaXQncwotc3VwcGx5IChSZWd1bGF0b3ItMikuCitzdXBwbHkgKFJlZ3VsYXRvci0yKS4gVGhlIHN1cHBseSByZWd1bGF0b3IgaXMgc2V0IGJ5IHRoZSBzdXBwbHlfcmVndWxhdG9yX2RldgorZmllbGQgYmVsb3c6LQogCi1UaGlzIHJlbGF0aW9uc2hpcCBjYW4gYmUgcmVnaXN0ZXIgd2l0aCB0aGUgY29yZSB2aWEgOi0KLQotaW50IHJlZ3VsYXRvcl9zZXRfc3VwcGx5KGNvbnN0IGNoYXIgKnJlZ3VsYXRvciwgY29uc3QgY2hhciAqcmVndWxhdG9yX3N1cHBseSk7Ci0KLUluIHRoaXMgZXhhbXBsZSB3ZSB3b3VsZCB1c2UgdGhlIGZvbGxvd2luZyBjb2RlIDotCi0KLXJlZ3VsYXRvcl9zZXRfc3VwcGx5KCJSZWd1bGF0b3ItMiIsICJSZWd1bGF0b3ItMSIpOwotCi1SZWxhdGlvbnNoaXBzIGNhbiBiZSBxdWVyaWVkIGJ5IGNhbGxpbmcgOi0KLQotY29uc3QgY2hhciAqcmVndWxhdG9yX2dldF9zdXBwbHkoY29uc3QgY2hhciAqcmVndWxhdG9yKTsKLQotCi0zLiBQb3dlciBEb21haW4gY29uc3RyYWludCBzZXR0aW5nLgotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLUVhY2ggcG93ZXIgZG9tYWluIHdpdGhpbiBhIHN5c3RlbSBoYXMgcGh5c2ljYWwgY29uc3RyYWludHMgb24gdm9sdGFnZSBhbmQKLWN1cnJlbnQuIFRoaXMgbXVzdCBiZSBkZWZpbmVkIGluIHNvZnR3YXJlIHNvIHRoYXQgdGhlIHBvd2VyIGRvbWFpbiBpcyBhbHdheXMKLW9wZXJhdGVkIHdpdGhpbiBzcGVjaWZpY2F0aW9ucy4KLQotQ29uc2lkZXIgdGhlIGZvbGxvd2luZyBtYWNoaW5lIChhZ2FpbikgOi0KLQotICBSZWd1bGF0b3ItMSAtKy0+IFJlZ3VsYXRvci0yIC0tPiBbQ29uc3VtZXIgQSBAIDEuOCAtIDIuMFZdCi0gICAgICAgICAgICAgICB8Ci0gICAgICAgICAgICAgICArLT4gW0NvbnN1bWVyIEIgQCAzLjNWXQotCi1UaGlzIGdpdmVzIHVzIHR3byByZWd1bGF0b3JzIGFuZCB0d28gcG93ZXIgZG9tYWluczoKLQotICAgICAgICAgICAgICAgICAgIERvbWFpbiAxOiBSZWd1bGF0b3ItMiwgQ29uc3VtZXIgQi4KLSAgICAgICAgICAgICAgICAgICBEb21haW4gMjogQ29uc3VtZXIgQS4KLQotQ29uc3RyYWludHMgY2FuIGJlIHJlZ2lzdGVyZWQgYnkgY2FsbGluZyA6LQotCi1pbnQgcmVndWxhdG9yX3NldF9wbGF0Zm9ybV9jb25zdHJhaW50cyhjb25zdCBjaGFyICpyZWd1bGF0b3IsCi0Jc3RydWN0IHJlZ3VsYXRpb25fY29uc3RyYWludHMgKmNvbnN0cmFpbnRzKTsKLQotVGhlIGV4YW1wbGUgaXMgZGVmaW5lZCBhcyBmb2xsb3dzIDotCi0KLXN0cnVjdCByZWd1bGF0aW9uX2NvbnN0cmFpbnRzIGRvbWFpbl8xID0gewotCS5taW5fdVYgPSAzMzAwMDAwLAotCS5tYXhfdVYgPSAzMzAwMDAwLAotCS52YWxpZF9tb2Rlc19tYXNrID0gUkVHVUxBVE9SX01PREVfTk9STUFMLAorc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhIHJlZ3VsYXRvcjJfZGF0YSA9IHsKKwkuc3VwcGx5X3JlZ3VsYXRvcl9kZXYgPSAmcGxhdGZvcm1fcmVndWxhdG9yMV9kZXZpY2UuZGV2LAorCS5jb25zdHJhaW50cyA9IHsKKwkJLm1pbl91ViA9IDE4MDAwMDAsCisJCS5tYXhfdVYgPSAyMDAwMDAwLAorCQkudmFsaWRfb3BzX21hc2sgPSBSRUdVTEFUT1JfQ0hBTkdFX1ZPTFRBR0UsCisJCS52YWxpZF9tb2Rlc19tYXNrID0gUkVHVUxBVE9SX01PREVfTk9STUFMLAorCX0sCisJLm51bV9jb25zdW1lcl9zdXBwbGllcyA9IEFSUkFZX1NJWkUocmVndWxhdG9yMl9jb25zdW1lcnMpLAorCS5jb25zdW1lcl9zdXBwbGllcyA9IHJlZ3VsYXRvcjJfY29uc3VtZXJzLAogfTsKIAotc3RydWN0IHJlZ3VsYXRpb25fY29uc3RyYWludHMgZG9tYWluXzIgPSB7Ci0JLm1pbl91ViA9IDE4MDAwMDAsCi0JLm1heF91ViA9IDIwMDAwMDAsCi0JLnZhbGlkX29wc19tYXNrID0gUkVHVUxBVE9SX0NIQU5HRV9WT0xUQUdFLAotCS52YWxpZF9tb2Rlc19tYXNrID0gUkVHVUxBVE9SX01PREVfTk9STUFMLAotfTsKK0ZpbmFsbHkgdGhlIHJlZ3VsYXRvciBkZXZpY2VzIG11c3QgYmUgcmVnaXN0ZXJlZCBpbiB0aGUgdXN1YWwgbWFubmVyLgogCi1yZWd1bGF0b3Jfc2V0X3BsYXRmb3JtX2NvbnN0cmFpbnRzKCJSZWd1bGF0b3ItMSIsICZkb21haW5fMSk7Ci1yZWd1bGF0b3Jfc2V0X3BsYXRmb3JtX2NvbnN0cmFpbnRzKCJSZWd1bGF0b3ItMiIsICZkb21haW5fMik7CitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSByZWd1bGF0b3JfZGV2aWNlc1tdID0geworeworCS5uYW1lID0gInJlZ3VsYXRvciIsCisJLmlkID0gRENEQ18xLAorCS5kZXYgPSB7CisJCS5wbGF0Zm9ybV9kYXRhID0gJnJlZ3VsYXRvcjFfZGF0YSwKKwl9LAorfSwKK3sKKwkubmFtZSA9ICJyZWd1bGF0b3IiLAorCS5pZCA9IERDRENfMiwKKwkuZGV2ID0geworCQkucGxhdGZvcm1fZGF0YSA9ICZyZWd1bGF0b3IyX2RhdGEsCisJfSwKK30sCit9OworLyogcmVnaXN0ZXIgcmVndWxhdG9yIDEgZGV2aWNlICovCitwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJndtODM1MF9yZWd1bGF0b3JfZGV2aWNlc1swXSk7CisKKy8qIHJlZ2lzdGVyIHJlZ3VsYXRvciAyIGRldmljZSAqLworcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZ3bTgzNTBfcmVndWxhdG9yX2RldmljZXNbMV0pOwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9wb3dlci9yZWd1bGF0b3IvcmVndWxhdG9yLnR4dCBiL0RvY3VtZW50YXRpb24vcG93ZXIvcmVndWxhdG9yL3JlZ3VsYXRvci50eHQKaW5kZXggYTY5MDUwMS4uNDIwMGFjYyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9wb3dlci9yZWd1bGF0b3IvcmVndWxhdG9yLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3Bvd2VyL3JlZ3VsYXRvci9yZWd1bGF0b3IudHh0CkBAIC0xMCwxMSArMTAsMTEgQEAKIAogRHJpdmVycyBjYW4gcmVnaXN0ZXIgYSByZWd1bGF0b3IgYnkgY2FsbGluZyA6LQogCi1zdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmVndWxhdG9yX3JlZ2lzdGVyKHN0cnVjdCByZWd1bGF0b3JfZGVzYyAqcmVndWxhdG9yX2Rlc2MsCi0JCQkJCSAgdm9pZCAqcmVnX2RhdGEpOworc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJlZ3VsYXRvcl9yZWdpc3RlcihzdHJ1Y3QgZGV2aWNlICpkZXYsCisJc3RydWN0IHJlZ3VsYXRvcl9kZXNjICpyZWd1bGF0b3JfZGVzYyk7CiAKLVRoaXMgd2lsbCByZWdpc3RlciB0aGUgcmVndWxhdG9ycyBjYXBhYmlsaXRpZXMgYW5kIG9wZXJhdGlvbnMgdGhlIHJlZ3VsYXRvcgotY29yZS4gVGhlIGNvcmUgZG9lcyBub3QgdG91Y2ggcmVnX2RhdGEgKHByaXZhdGUgdG8gcmVndWxhdG9yIGRyaXZlcikuCitUaGlzIHdpbGwgcmVnaXN0ZXIgdGhlIHJlZ3VsYXRvcnMgY2FwYWJpbGl0aWVzIGFuZCBvcGVyYXRpb25zIHRvIHRoZSByZWd1bGF0b3IKK2NvcmUuCiAKIFJlZ3VsYXRvcnMgY2FuIGJlIHVucmVnaXN0ZXJlZCBieSBjYWxsaW5nIDotCiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vcG93ZXIvczJyYW0udHh0IGIvRG9jdW1lbnRhdGlvbi9wb3dlci9zMnJhbS50eHQKaW5kZXggYjA1ZjUxMi4uMmViZGM2MCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9wb3dlci9zMnJhbS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9wb3dlci9zMnJhbS50eHQKQEAgLTU0LDMgKzU0LDIxIEBACiB0aGF0ICJyYWRlb25mYiIgc2ltcGx5IGNhbm5vdCByZXN1bWUgdGhhdCBkZXZpY2UgLSBpdCB0cmllcyB0byBzZXQgdGhlCiBQTEwncywgYW5kIGl0IGp1c3QgX2hhbmdzXy4gVXNpbmcgdGhlIHJlZ3VsYXIgVkdBIGNvbnNvbGUgYW5kIGxldHRpbmcgWAogcmVzdW1lIGl0IGluc3RlYWQgd29ya3MgZmluZS4KKworTk9URQorPT09PQorcG1fdHJhY2UgdXNlcyB0aGUgc3lzdGVtJ3MgUmVhbCBUaW1lIENsb2NrIChSVEMpIHRvIHNhdmUgdGhlIG1hZ2ljIG51bWJlci4KK1JlYXNvbiBmb3IgdGhpcyBpcyB0aGF0IHRoZSBSVEMgaXMgdGhlIG9ubHkgcmVsaWFibHkgYXZhaWxhYmxlIHBpZWNlIG9mCitoYXJkd2FyZSBkdXJpbmcgcmVzdW1lIG9wZXJhdGlvbnMgd2hlcmUgYSB2YWx1ZSBjYW4gYmUgc2V0IHRoYXQgd2lsbAorc3Vydml2ZSBhIHJlYm9vdC4KKworQ29uc2VxdWVuY2UgaXMgdGhhdCBhZnRlciBhIHJlc3VtZSAoZXZlbiBpZiBpdCBpcyBzdWNjZXNzZnVsKSB5b3VyIHN5c3RlbQorY2xvY2sgd2lsbCBoYXZlIGEgdmFsdWUgY29ycmVzcG9uZGluZyB0byB0aGUgbWFnaWMgbXVtYmVyIGluc3RlYWQgb2YgdGhlCitjb3JyZWN0IGRhdGUvdGltZSEgSXQgaXMgdGhlcmVmb3JlIGFkdmlzYWJsZSB0byB1c2UgYSBwcm9ncmFtIGxpa2UgbnRwLWRhdGUKK29yIHJkYXRlIHRvIHJlc2V0IHRoZSBjb3JyZWN0IGRhdGUvdGltZSBmcm9tIGFuIGV4dGVybmFsIHRpbWUgc291cmNlIHdoZW4KK3VzaW5nIHRoaXMgdHJhY2Ugb3B0aW9uLgorCitBcyB0aGUgY2xvY2sga2VlcHMgdGlja2luZyBpdCBpcyBhbHNvIGVzc2VudGlhbCB0aGF0IHRoZSByZWJvb3QgaXMgZG9uZQorcXVpY2tseSBhZnRlciB0aGUgcmVzdW1lIGZhaWx1cmUuIFRoZSB0cmFjZSBvcHRpb24gZG9lcyBub3QgdXNlIHRoZSBzZWNvbmRzCitvciB0aGUgbG93IG9yZGVyIGJpdHMgb2YgdGhlIG1pbnV0ZXMgb2YgdGhlIFJUQywgYnV0IGEgdG9vIGxvbmcgZGVsYXkgd2lsbAorY29ycnVwdCB0aGUgbWFnaWMgdmFsdWUuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Bvd2VycGMvMDAtSU5ERVggYi9Eb2N1bWVudGF0aW9uL3Bvd2VycGMvMDAtSU5ERVgKaW5kZXggMjlkODM5Yy4uZTM5NjBiOCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9wb3dlcnBjLzAwLUlOREVYCisrKyBiL0RvY3VtZW50YXRpb24vcG93ZXJwYy8wMC1JTkRFWApAQCAtMTgsMTAgKzE4LDYgQEAKIAktIExpbnV4IDIuNi54IG9uIE1QQzUyeHggZmFtaWx5CiBtcGM1Mnh4LWRldmljZS10cmVlLWJpbmRpbmdzLnR4dAogCS0gTVBDNTIwMCBEZXZpY2UgVHJlZSBCaW5kaW5ncwotcHBjX2h0YWIudHh0Ci0JLSBpbmZvIGFib3V0IHRoZSBMaW51eC9QUEMgL3Byb2MvcHBjX2h0YWIgZW50cnkKLXNtcC50eHQKLQktIHVzZSBhbmQgc3RhdGUgaW5mbyBhYm91dCBMaW51eC9QUEMgb24gTVAgbWFjaGluZXMKIHNvdW5kLnR4dAogCS0gaW5mbyBvbiBzb3VuZCBzdXBwb3J0IHVuZGVyIExpbnV4L1BQQwogekltYWdlX2xheW91dC50eHQKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MvZnNsLzgzeHgtNTEyeC1wY2kudHh0IGIvRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy9mc2wvODN4eC01MTJ4LXBjaS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzVhNDY1MwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MvZnNsLzgzeHgtNTEyeC1wY2kudHh0CkBAIC0wLDAgKzEsNDAgQEAKKyogRnJlZXNjYWxlIDgzeHggYW5kIDUxMnggUENJIGJyaWRnZXMKKworRnJlZXNjYWxlIDgzeHggYW5kIDUxMnggU09DcyBpbmNsdWRlIHRoZSBzYW1lIHBjaSBicmlkZ2UgY29yZS4KKworODN4eC81MTJ4IHNwZWNpZmljIG5vdGVzOgorLSByZWc6IHNob3VsZCBjb250YWluIHR3byBhZGRyZXNzIGxlbmd0aCB0dXBsZXMKKyAgICBUaGUgZmlyc3QgaXMgZm9yIHRoZSBpbnRlcm5hbCBwY2kgYnJpZGdlIHJlZ2lzdGVycworICAgIFRoZSBzZWNvbmQgaXMgZm9yIHRoZSBwY2kgY29uZmlnIHNwYWNlIGFjY2VzcyByZWdpc3RlcnMKKworRXhhbXBsZSAoTVBDODMxM0VSREIpCisJcGNpMDogcGNpQGUwMDA4NTAwIHsKKwkJY2VsbC1pbmRleCA9IDwxPjsKKwkJaW50ZXJydXB0LW1hcC1tYXNrID0gPDB4ZjgwMCAweDAgMHgwIDB4Nz47CisJCWludGVycnVwdC1tYXAgPSA8CisJCQkJLyogSURTRUwgMHgwRSAtbWluaSBQQ0kgKi8KKwkJCQkgMHg3MDAwIDB4MCAweDAgMHgxICZpcGljIDE4IDB4OAorCQkJCSAweDcwMDAgMHgwIDB4MCAweDIgJmlwaWMgMTggMHg4CisJCQkJIDB4NzAwMCAweDAgMHgwIDB4MyAmaXBpYyAxOCAweDgKKwkJCQkgMHg3MDAwIDB4MCAweDAgMHg0ICZpcGljIDE4IDB4OAorCisJCQkJLyogSURTRUwgMHgwRiAtIFBDSSBzbG90ICovCisJCQkJIDB4NzgwMCAweDAgMHgwIDB4MSAmaXBpYyAxNyAweDgKKwkJCQkgMHg3ODAwIDB4MCAweDAgMHgyICZpcGljIDE4IDB4OAorCQkJCSAweDc4MDAgMHgwIDB4MCAweDMgJmlwaWMgMTcgMHg4CisJCQkJIDB4NzgwMCAweDAgMHgwIDB4NCAmaXBpYyAxOCAweDg+OworCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKKwkJaW50ZXJydXB0cyA9IDw2NiAweDg+OworCQlidXMtcmFuZ2UgPSA8MHgwIDB4MD47CisJCXJhbmdlcyA9IDwweDAyMDAwMDAwIDB4MCAweDkwMDAwMDAwIDB4OTAwMDAwMDAgMHgwIDB4MTAwMDAwMDAKKwkJCSAgMHg0MjAwMDAwMCAweDAgMHg4MDAwMDAwMCAweDgwMDAwMDAwIDB4MCAweDEwMDAwMDAwCisJCQkgIDB4MDEwMDAwMDAgMHgwIDB4MDAwMDAwMDAgMHhlMjAwMDAwMCAweDAgMHgwMDEwMDAwMD47CisJCWNsb2NrLWZyZXF1ZW5jeSA9IDw2NjY2NjY2Nj47CisJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8MT47CisJCSNzaXplLWNlbGxzID0gPDI+OworCQkjYWRkcmVzcy1jZWxscyA9IDwzPjsKKwkJcmVnID0gPDB4ZTAwMDg1MDAgMHgxMDAJCS8qIGludGVybmFsIHJlZ2lzdGVycyAqLworCQkgICAgICAgMHhlMDAwODMwMCAweDg+OwkJLyogY29uZmlnIHNwYWNlIGFjY2VzcyByZWdpc3RlcnMgKi8KKwkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODM0OS1wY2kiOworCQlkZXZpY2VfdHlwZSA9ICJwY2kiOworCX07CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzL2ZzbC84eHh4X2dwaW8udHh0IGIvRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy9mc2wvOHh4eF9ncGlvLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMDE1ZGNlCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy9mc2wvOHh4eF9ncGlvLnR4dApAQCAtMCwwICsxLDQwIEBACitHUElPIGNvbnRyb2xsZXJzIG9uIE1QQzh4eHggU29DcworCitUaGlzIGlzIGZvciB0aGUgbm9uLVFFL0NQTS9HVVRzIEdQSU8gY29udHJvbGxlcnMgYXMgZm91bmQgb24KKzgzNDksIDg1NzIsIDg2MTAgYW5kIGNvbXBhdGlibGUuCisKK0V2ZXJ5IEdQSU8gY29udHJvbGxlciBub2RlIG11c3QgaGF2ZSAjZ3Bpby1jZWxscyBwcm9wZXJ0eSBkZWZpbmVkLAordGhpcyBpbmZvcm1hdGlvbiB3aWxsIGJlIHVzZWQgdG8gdHJhbnNsYXRlIGdwaW8tc3BlY2lmaWVycy4KKworUmVxdWlyZWQgcHJvcGVydGllczoKKy0gY29tcGF0aWJsZSA6ICJmc2wsPENISVA+LWdwaW8iIGZvbGxvd2VkIGJ5ICJmc2wsbXBjODM0OS1ncGlvIiBmb3IKKyAgODN4eCwgImZzbCxtcGM4NTcyLWdwaW8iIGZvciA4NXh4IGFuZCAiZnNsLG1wYzg2MTAtZ3BpbyIgZm9yIDg2eHguCistICNncGlvLWNlbGxzIDogU2hvdWxkIGJlIHR3by4gVGhlIGZpcnN0IGNlbGwgaXMgdGhlIHBpbiBudW1iZXIgYW5kIHRoZQorICBzZWNvbmQgY2VsbCBpcyB1c2VkIHRvIHNwZWNpZnkgb3B0aW9uYWwgcGFyYW1ldGVycyAoY3VycmVudGx5IHVudXNlZCkuCisgLSBpbnRlcnJ1cHRzIDogSW50ZXJydXB0IG1hcHBpbmcgZm9yIEdQSU8gSVJRIChjdXJyZW50bHkgdW51c2VkKS4KKyAtIGludGVycnVwdC1wYXJlbnQgOiBQaGFuZGxlIGZvciB0aGUgaW50ZXJydXB0IGNvbnRyb2xsZXIgdGhhdAorICAgc2VydmljZXMgaW50ZXJydXB0cyBmb3IgdGhpcyBkZXZpY2UuCistIGdwaW8tY29udHJvbGxlciA6IE1hcmtzIHRoZSBwb3J0IGFzIEdQSU8gY29udHJvbGxlci4KKworRXhhbXBsZSBvZiBncGlvLWNvbnRyb2xsZXIgbm9kZXMgZm9yIGEgTVBDODM0NyBTb0M6CisKKwlncGlvMTogZ3Bpby1jb250cm9sbGVyQGMwMCB7CisJCSNncGlvLWNlbGxzID0gPDI+OworCQljb21wYXRpYmxlID0gImZzbCxtcGM4MzQ3LWdwaW8iLCAiZnNsLG1wYzgzNDktZ3BpbyI7CisJCXJlZyA9IDwweGMwMCAweDEwMD47CisJCWludGVycnVwdHMgPSA8NzQgMHg4PjsKKwkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CisJCWdwaW8tY29udHJvbGxlcjsKKwl9OworCisJZ3BpbzI6IGdwaW8tY29udHJvbGxlckBkMDAgeworCQkjZ3Bpby1jZWxscyA9IDwyPjsKKwkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODM0Ny1ncGlvIiwgImZzbCxtcGM4MzQ5LWdwaW8iOworCQlyZWcgPSA8MHhkMDAgMHgxMDA+OworCQlpbnRlcnJ1cHRzID0gPDc1IDB4OD47CisJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OworCQlncGlvLWNvbnRyb2xsZXI7CisJfTsKKworU2VlIGJvb3Rpbmctd2l0aG91dC1vZi50eHQgZm9yIGRldGFpbHMgb2YgaG93IHRvIHNwZWNpZnkgR1BJTworaW5mb3JtYXRpb24gZm9yIGRldmljZXMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzL2ZzbC9kbWEudHh0IGIvRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy9mc2wvZG1hLnR4dAppbmRleCA4NjgyNmRmLi5jYzQ1MzExIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzL2ZzbC9kbWEudHh0CisrKyBiL0RvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MvZnNsL2RtYS50eHQKQEAgLTIwLDcgKzIwLDcgQEAKICAgICAgICAgLSBjb21wYXRpYmxlICAgICAgICA6IGNvbXBhdGlibGUgbGlzdCwgY29udGFpbnMgMiBlbnRyaWVzLCBmaXJzdCBpcwogCQkJICJmc2wsQ0hJUC1kbWEtY2hhbm5lbCIsIHdoZXJlIENISVAgaXMgdGhlIHByb2Nlc3NvcgogCQkJIChtcGM4MzQ5LCBtcGM4MzUwLCBldGMuKSBhbmQgdGhlIHNlY29uZCBpcwotCQkJICJmc2wsZWxvLWRtYS1jaGFubmVsIgorCQkJICJmc2wsZWxvLWRtYS1jaGFubmVsIi4gSG93ZXZlciwgc2VlIG5vdGUgYmVsb3cuCiAgICAgICAgIC0gcmVnICAgICAgICAgICAgICAgOiA8cmVnaXN0ZXJzIG1hcHBpbmcgZm9yIGNoYW5uZWw+CiAgICAgICAgIC0gY2VsbC1pbmRleCAgICAgICAgOiBkbWEgY2hhbm5lbCBpbmRleCBzdGFydHMgYXQgMC4KIApAQCAtODIsNyArODIsNyBAQAogICAgICAgICAtIGNvbXBhdGlibGUgICAgICAgIDogY29tcGF0aWJsZSBsaXN0LCBjb250YWlucyAyIGVudHJpZXMsIGZpcnN0IGlzCiAJCQkgImZzbCxDSElQLWRtYS1jaGFubmVsIiwgd2hlcmUgQ0hJUCBpcyB0aGUgcHJvY2Vzc29yCiAJCQkgKG1wYzg1NDAsIG1wYzg1NjAsIGV0Yy4pIGFuZCB0aGUgc2Vjb25kIGlzCi0JCQkgImZzbCxlbG9wbHVzLWRtYS1jaGFubmVsIgorCQkJICJmc2wsZWxvcGx1cy1kbWEtY2hhbm5lbCIuIEhvd2V2ZXIsIHNlZSBub3RlIGJlbG93LgogICAgICAgICAtIGNlbGwtaW5kZXggICAgICAgIDogZG1hIGNoYW5uZWwgaW5kZXggc3RhcnRzIGF0IDAuCiAgICAgICAgIC0gcmVnICAgICAgICAgICAgICAgOiA8cmVnaXN0ZXJzIG1hcHBpbmcgZm9yIGNoYW5uZWw+CiAgICAgICAgIC0gaW50ZXJydXB0cyAgICAgICAgOiA8aW50ZXJydXB0IG1hcHBpbmcgZm9yIERNQSBjaGFubmVsIElSUT4KQEAgLTEyNSwzICsxMjUsMTIgQEAKIAkJCWludGVycnVwdHMgPSA8MTcgMj47CiAJCX07CiAJfTsKKworTm90ZSBvbiBETUEgY2hhbm5lbCBjb21wYXRpYmxlIHByb3BlcnRpZXM6IFRoZSBjb21wYXRpYmxlIHByb3BlcnR5IG11c3Qgc2F5CisiZnNsLGVsby1kbWEtY2hhbm5lbCIgb3IgImZzbCxlbG9wbHVzLWRtYS1jaGFubmVsIiB0byBiZSB1c2VkIGJ5IHRoZSBFbG8gRE1BCitkcml2ZXIgKGZzbGRtYSkuICBBbnkgRE1BIGNoYW5uZWwgdXNlZCBieSBmc2xkbWEgY2Fubm90IGJlIHVzZWQgYnkgYW5vdGhlcgorRE1BIGRyaXZlciwgc3VjaCBhcyB0aGUgU1NJIHNvdW5kIGRyaXZlcnMgZm9yIHRoZSBNUEM4NjEwLiAgVGhlcmVmb3JlLCBhbnkgRE1BCitjaGFubmVsIHRoYXQgc2hvdWxkIGJlIHVzZWQgZm9yIGFub3RoZXIgZHJpdmVyIHNob3VsZCBub3QgdXNlCisiZnNsLGVsby1kbWEtY2hhbm5lbCIgb3IgImZzbCxlbG9wbHVzLWRtYS1jaGFubmVsIi4gIEZvciB0aGUgU1NJIGRyaXZlcnMsIGZvcgorZXhhbXBsZSwgdGhlIGNvbXBhdGlibGUgcHJvcGVydHkgc2hvdWxkIGJlICJmc2wsc3NpLWRtYS1jaGFubmVsIi4gIFNlZSBzc2kudHh0Citmb3IgbW9yZSBpbmZvcm1hdGlvbi4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MvZnNsL3NzaS50eHQgYi9Eb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzL2ZzbC9zc2kudHh0CmluZGV4IGQxMDA1NTUuLmEyZDk2MzkgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MvZnNsL3NzaS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy9mc2wvc3NpLnR4dApAQCAtMjQsNiArMjQsMTIgQEAKIAkJICAgICJyai1tYXN0ZXIiIC0gci5qLiwgU1NJIGlzIGNsb2NrIG1hc3RlcgogCQkgICAgImFjOTctc2xhdmUiIC0gQUM5NyBtb2RlLCBTU0kgaXMgY2xvY2sgc2xhdmUKIAkJICAgICJhYzk3LW1hc3RlciIgLSBBQzk3IG1vZGUsIFNTSSBpcyBjbG9jayBtYXN0ZXIKKy0gZnNsLHBsYXliYWNrLWRtYTogcGhhbmRsZSB0byBhIG5vZGUgZm9yIHRoZSBETUEgY2hhbm5lbCB0byB1c2UgZm9yCisgICAgICAgICAgICAgICAgICAgIHBsYXliYWNrIG9mIGF1ZGlvLiAgVGhpcyBpcyB0eXBpY2FsbHkgZGljdGF0ZWQgYnkgU09DCisgICAgICAgICAgICAgICAgICAgIGRlc2lnbi4gIFNlZSB0aGUgbm90ZXMgYmVsb3cuCistIGZzbCxjYXB0dXJlLWRtYTogIHBoYW5kbGUgdG8gYSBub2RlIGZvciB0aGUgRE1BIGNoYW5uZWwgdG8gdXNlIGZvcgorICAgICAgICAgICAgICAgICAgICBjYXB0dXJlIChyZWNvcmRpbmcpIG9mIGF1ZGlvLiAgVGhpcyBpcyB0eXBpY2FsbHkgZGljdGF0ZWQKKyAgICAgICAgICAgICAgICAgICAgYnkgU09DIGRlc2lnbi4gIFNlZSB0aGUgbm90ZXMgYmVsb3cuCiAKIE9wdGlvbmFsIHByb3BlcnRpZXM6CiAtIGNvZGVjLWhhbmRsZQkgIDogcGhhbmRsZSB0byBhICdjb2RlYycgbm9kZSB0aGF0IGRlZmluZXMgYW4gYXVkaW8KQEAgLTM2LDMgKzQyLDIwIEBACiBDaGlsZCAnY29kZWMnIG5vZGUgb3B0aW9uYWwgcHJvcGVydGllczoKIC0gY2xvY2stZnJlcXVlbmN5ICA6IFRoZSBmcmVxdWVuY3kgb2YgdGhlIGlucHV0IGNsb2NrLCB3aGljaCB0eXBpY2FsbHkKICAgICAgICAgICAgICAgICAgICAgIGNvbWVzIGZyb20gYW4gb24tYm9hcmQgZGVkaWNhdGVkIG9zY2lsbGF0b3IuCisKK05vdGVzIG9uIGZzbCxwbGF5YmFjay1kbWEgYW5kIGZzbCxjYXB0dXJlLWRtYToKKworT24gU09DcyB0aGF0IGhhdmUgYW4gU1NJLCBzcGVjaWZpYyBETUEgY2hhbm5lbHMgYXJlIGhhcmQtd2lyZWQgZm9yIHBsYXliYWNrCithbmQgY2FwdHVyZS4gIE9uIHRoZSBNUEM4NjEwLCBmb3IgZXhhbXBsZSwgU1NJMSBtdXN0IHVzZSBETUEgY2hhbm5lbCAwIGZvcgorcGxheWJhY2sgYW5kIERNQSBjaGFubmVsIDEgZm9yIGNhcHR1cmUuICBTU0kyIG11c3QgdXNlIERNQSBjaGFubmVsIDIgZm9yCitwbGF5YmFjayBhbmQgRE1BIGNoYW5uZWwgMyBmb3IgY2FwdHVyZS4gIFRoZSBkZXZlbG9wZXIgY2FuIGNob29zZSB3aGljaAorRE1BIGNvbnRyb2xsZXIgdG8gdXNlLCBidXQgdGhlIGNoYW5uZWxzIHRoZW1zZWx2ZXMgYXJlIGhhcmQtd2lyZWQuICBUaGUKK3B1cnBvc2Ugb2YgdGhlc2UgdHdvIHByb3BlcnRpZXMgaXMgdG8gcmVwcmVzZW50IHRoaXMgaGFyZHdhcmUgZGVzaWduLgorCitUaGUgZGV2aWNlIHRyZWUgbm9kZXMgZm9yIHRoZSBETUEgY2hhbm5lbHMgdGhhdCBhcmUgcmVmZXJlbmNlZCBieQorImZzbCxwbGF5YmFjay1kbWEiIGFuZCAiZnNsLGNhcHR1cmUtZG1hIiBtdXN0IGJlIG1hcmtlZCBhcyBjb21wYXRpYmxlIHdpdGgKKyJmc2wsc3NpLWRtYS1jaGFubmVsIi4gIFRoZSBTT0Mtc3BlY2lmaWMgY29tcGF0aWJsZSBzdHJpbmcgKGUuZy4KKyJmc2wsbXBjODYxMC1kbWEtY2hhbm5lbCIpIGNhbiByZW1haW4uICBJZiB0aGVzZSBub2RlcyBhcmUgbGVmdCBhcworImZzbCxlbG8tZG1hLWNoYW5uZWwiIG9yICJmc2wsZWxvcGx1cy1kbWEtY2hhbm5lbCIsIHRoZW4gdGhlIGdlbmVyaWMgRWxvIERNQQorZHJpdmVycyAoZnNsZG1hKSB3aWxsIGF0dGVtcHQgdG8gdXNlIHRoZW0sIGFuZCBpdCB3aWxsIGNvbmZsaWN0IHdpdGggdGhlCitzb3VuZCBkcml2ZXJzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9wb3dlcnBjL3BwY19odGFiLnR4dCBiL0RvY3VtZW50YXRpb24vcG93ZXJwYy9wcGNfaHRhYi50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhiOGM3ZGYuLjAwMDAwMDAKLS0tIGEvRG9jdW1lbnRhdGlvbi9wb3dlcnBjL3BwY19odGFiLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDExOCArMCwwIEBACi0gICAgICAgICAgICAgICAgIEluZm9ybWF0aW9uIGFib3V0IC9wcm9jL3BwY19odGFiCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotVGhpcyBkb2N1bWVudCBhbmQgdGhlIHJlbGF0ZWQgY29kZSB3YXMgd3JpdHRlbiBieSBtZSAoQ29ydCBEb3VnYW4pLCBwbGVhc2UKLWVtYWlsIG1lIChjb3J0QGZzbWxhYnMuY29tKSBpZiB5b3UgaGF2ZSBxdWVzdGlvbnMsIGNvbW1lbnRzIG9yIGNvcnJlY3Rpb25zLgotCi1MYXN0IENoYW5nZTogMi4xNi45OAotCi1UaGlzIGVudHJ5IGluIHRoZSBwcm9jIGRpcmVjdG9yeSBpcyByZWFkYWJsZSBieSBhbGwgdXNlcnMgYnV0IG9ubHkKLXdyaXRhYmxlIGJ5IHJvb3QuCi0KLVRoZSBwcGNfaHRhYiBpbnRlcmZhY2UgaXMgYSB1c2VyIGxldmVsIHdheSBvZiBhY2Nlc3NpbmcgdGhlCi1wZXJmb3JtYW5jZSBtb25pdG9yaW5nIHJlZ2lzdGVycyBhcyB3ZWxsIGFzIHByb3ZpZGluZyBpbmZvcm1hdGlvbgotYWJvdXQgdGhlIFBURSBoYXNoIHRhYmxlLgotCi0xLiBSZWFkaW5nCi0KLSAgUmVhZGluZyB0aGlzIGZpbGUgd2lsbCBnaXZlIHlvdSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgbWVtb3J5IG1hbmFnZW1lbnQKLSAgaGFzaCB0YWJsZSB0aGF0IHNlcnZlcyBhcyBhbiBleHRlbmRlZCB0bGIgZm9yIHBhZ2UgdHJhbnNsYXRpb24gb24gdGhlCi0gIHBvd2VycGMuICBJdCB3aWxsIGFsc28gZ2l2ZSB5b3UgaW5mb3JtYXRpb24gYWJvdXQgcGVyZm9ybWFuY2UgbWVhc3VyZW1lbnQKLSAgc3BlY2lmaWMgdG8gdGhlIGNwdSB0aGF0IHlvdSBhcmUgdXNpbmcuCi0KLSAgRXhwbGFuYXRpb24gb2YgdGhlIDYwNCBQZXJmb3JtYW5jZSBNb25pdG9yaW5nIEZpZWxkczoKLSAgICBNTUNSMCAtIHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBNTUNSMCByZWdpc3RlcgotICAgIFBNQzEKLSAgICBQTUMyIC0gdGhlIHZhbHVlIG9mIHRoZSBwZXJmb3JtYW5jZSBjb3VudGVycyBhbmQgYQotICAgICAgICAgICBkZXNjcmlwdGlvbiBvZiB3aGF0IGV2ZW50cyB0aGV5IGFyZSBjb3VudGluZwotICAgICAgICAgICB3aGljaCBhcmUgYmFzZWQgb24gTU1DUjAgYml0IHNldHRpbmdzLgotICBFeHBsYW5hdGlvbiBvZiB0aGUgUFRFIEhhc2ggVGFibGUgZmllbGRzOgotCi0gICAgU2l6ZSAtIGhhc2ggdGFibGUgc2l6ZSBpbiBLYi4KLSAgICBCdWNrZXRzIC0gIG51bWJlciBvZiBidWNrZXRzIGluIHRoZSB0YWJsZS4KLSAgICBBZGRyZXNzIC0gdGhlIHZpcnR1YWwga2VybmVsIGFkZHJlc3Mgb2YgdGhlIGhhc2ggdGFibGUgYmFzZS4KLSAgICBFbnRyaWVzIC0gdGhlIG51bWJlciBvZiBwdGVzIHRoYXQgY2FuIGJlIHN0b3JlZCBpbiB0aGUgaGFzaCB0YWJsZS4KLSAgICBVc2VyL0tlcm5lbCAtIGhvdyBtYW55IHB0ZSdzIGFyZSBpbiB1c2UgYnkgdGhlIGtlcm5lbCBvciB1c2VyIGF0IHRoYXQgdGltZS4KLSAgICBPdmVyZmxvd3MgLSBIb3cgbWFueSBvZiB0aGUgZW50cmllcyBhcmUgaW4gdGhlaXIgc2Vjb25kYXJ5IGhhc2ggbG9jYXRpb24uCi0gICAgUGVyY2VudCBmdWxsIC0gcmF0aW8gb2YgZnJlZSBwdGUgZW50cmllcyB0byBpbiB1c2UgZW50cmllcy4KLSAgICBSZWxvYWRzIC0gQ291bnQgb2YgaG93IG1hbnkgaGFzaCB0YWJsZSBtaXNzZXMgaGF2ZSBvY2N1cnJlZAotICAgICAgICAgICAgICB0aGF0IHdlcmUgZml4ZWQgd2l0aCBhIHJlbG9hZCBmcm9tIHRoZSBsaW51eCB0YWJsZXMuCi0gICAgICAgICAgICAgIFNob3VsZCBhbHdheXMgYmUgMCBvbiA2MDMgYmFzZWQgbWFjaGluZXMuCi0gICAgTm9uLWVycm9yIE1pc3NlcyAtIENvdW50IG9mIGhvdyBtYW55IGhhc2ggdGFibGUgbWlzc2VzIGhhdmUgb2NjdXJyZWQKLSAgICAgICAgICAgICAgdGhhdCB3ZXJlIGNvbXBsZXRlZCB3aXRoIHRoZSBjcmVhdGlvbiBvZiBhIHB0ZSBpbiB0aGUgbGludXgKLSAgICAgICAgICAgICAgdGFibGVzIHdpdGggYSBjYWxsIHRvIGRvX3BhZ2VfZmF1bHQoKS4KLSAgICBFcnJvciBNaXNzZXMgLSBOdW1iZXIgb2YgbWlzc2VzIGR1ZSB0byBlcnJvcnMgc3VjaCBhcyBiYWQgYWRkcmVzcwotICAgICAgICAgICAgICBhbmQgcGVybWlzc2lvbiB2aW9sYXRpb25zLiAgVGhpcyBpbmNsdWRlcyBrZXJuZWwgYWNjZXNzIG9mCi0gICAgICAgICAgICAgIGJhZCB1c2VyIGFkZHJlc3NlcyB0aGF0IGFyZSBmaXhlZCB1cCBieSB0aGUgdHJhcCBoYW5kbGVyLgotCi0gIE5vdGUgdGhhdCBjYWxjdWxhdGlvbiBvZiB0aGUgZGF0YSBkaXNwbGF5ZWQgZnJvbSAvcHJvYy9wcGNfaHRhYiB0YWtlcwotICBhIGxvbmcgdGltZSBhbmQgc3BlbmRzIGEgZ3JlYXQgZGVhbCBvZiB0aW1lIGluIHRoZSBrZXJuZWwuICBJdCB3b3VsZAotICBiZSBxdWl0ZSBoYXJkIG9uIHBlcmZvcm1hbmNlIHRvIHJlYWQgdGhpcyBmaWxlIGNvbnN0YW50bHkuICBJbiB0aW1lCi0gIHRoZXJlIG1heSBiZSBhIGNvdW50ZXIgaW4gdGhlIGtlcm5lbCB0aGF0IGFsbG93cyBzdWNjZXNzaXZlIHJlYWRzIGZyb20KLSAgdGhpcyBmaWxlIG9ubHkgYWZ0ZXIgYSBnaXZlbiBhbW91bnQgb2YgdGltZSBoYXMgcGFzc2VkIHRvIHJlZHVjZSB0aGUKLSAgcG9zc2liaWxpdHkgb2YgYSB1c2VyIHNsb3dpbmcgdGhlIHN5c3RlbSBieSByZWFkaW5nIHRoaXMgZmlsZS4KLQotMi4gV3JpdGluZwotCi0gIFdyaXRpbmcgdG8gdGhlIHBwY19odGFiIGFsbG93cyB5b3UgdG8gY2hhbmdlIHRoZSBjaGFyYWN0ZXJpc3RpY3Mgb2YKLSAgdGhlIHBvd2VycGMgUFRFIGhhc2ggdGFibGUgYW5kIHNldHVwIHBlcmZvcm1hbmNlIG1vbml0b3JpbmcuCi0KLSAgUmVzaXppbmcgdGhlIFBURSBoYXNoIHRhYmxlIGlzIG5vdCBlbmFibGVkIHJpZ2h0IG5vdyBkdWUgdG8gbWFueQotICBjb21wbGljYXRpb25zIHdpdGggbW92aW5nIHRoZSBoYXNoIHRhYmxlLCByZWhhc2hpbmcgdGhlIGVudHJpZXMKLSAgYW5kIG1hbnkgbWFueSBTTVAgaXNzdWVzIHRoYXQgd291bGQgaGF2ZSB0byBiZSBkZWFsdCB3aXRoLgotCi0gIFdyaXRlIG9wdGlvbnMgdG8gcHBjX2h0YWI6Ci0gIAotICAgLSBUbyBzZXQgdGhlIHNpemUgb2YgdGhlIGhhc2ggdGFibGUgdG8gNjRLYjoKLQotICAgICAgZWNobyAnc2l6ZSA2NCcgPiAvcHJvYy9wcGNfaHRhYgotCi0gICAgIFRoZSBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA2NCBhbmQgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8KLSAgICAgNjQuCi0KLSAgIC0gVG8gdHVybiBvZmYgcGVyZm9ybWFuY2UgbW9uaXRvcmluZzoKLQotICAgICAgZWNobyAnb2ZmJyA+IC9wcm9jL3BwY19odGFiCi0KLSAgIC0gVG8gcmVzZXQgdGhlIGNvdW50ZXJzIHdpdGhvdXQgY2hhbmdpbmcgd2hhdCB0aGV5J3JlIGNvdW50aW5nOgotCi0gICAgICBlY2hvICdyZXNldCcgPiAvcHJvYy9wcGNfaHRhYgotCi0gICAgIE5vdGUgdGhhdCBjb3VudGluZyB3aWxsIGNvbnRpbnVlIGFmdGVyIHRoZSByZXNldCBpZiBpdCBpcyBlbmFibGVkLgotCi0gICAtIFRvIGNvdW50IG9ubHkgZXZlbnRzIGluIHVzZXIgbW9kZSBvciBvbmx5IGluIGtlcm5lbCBtb2RlOgotCi0gICAgICBlY2hvICd1c2VyJyA+IC9wcm9jL3BwY19odGFiCi0gICAgICAgLi4ub3IuLi4KLSAgICAgIGVjaG8gJ2tlcm5lbCcgPiAvcHJvYy9wcGNfaHRhYgotCi0gICAgIE5vdGUgdGhhdCB0aGVzZSB0d28gb3B0aW9ucyBhcmUgZXhjbHVzaXZlIG9mIG9uZSBhbm90aGVyIGFuZCB0aGUKLSAgICAgbGFjayBvZiBlaXRoZXIgb2YgdGhlc2Ugb3B0aW9ucyBjb3VudHMgdXNlciBhbmQga2VybmVsLgotICAgICBVc2luZyAncmVzZXQnIGFuZCAnb2ZmJyByZXNldCB0aGVzZSBmbGFncy4KLQotICAgLSBUaGUgNjA0IGhhcyAyIHBlcmZvcm1hbmNlIGNvdW50ZXJzIHdoaWNoIGNhbiBlYWNoIGNvdW50IGV2ZW50cyBmcm9tCi0gICAgIGEgc3BlY2lmaWMgc2V0IG9mIGV2ZW50cy4gIFRoZXNlIHNldHMgYXJlIGRpc2pvaW50IHNvIGl0IGlzIG5vdAotICAgICBwb3NzaWJsZSB0byBjb3VudCBfYW55XyBjb21iaW5hdGlvbiBvZiAyIGV2ZW50cy4gIE9uZSBldmVudCBjYW4KLSAgICAgYmUgY291bnRlZCBieSBQTUMxIGFuZCBvbmUgYnkgUE1DMi4KLQotICAgICBUbyBzdGFydCBjb3VudGluZyBhIHBhcnRpY3VsYXIgZXZlbnQgdXNlOgotCi0gICAgICBlY2hvICdldmVudCcgPiAvcHJvYy9wcGNfaHRhYgotCi0gICAgIGFuZCBjaG9vc2UgZnJvbSB0aGVzZSBldmVudHM6Ci0KLSAgICAgUE1DMQotICAgICAtLS0tCi0gICAgICAnaWMgbWlzcycgLSBpbnN0cnVjdGlvbiBjYWNoZSBtaXNzZXMKLSAgICAgICdkdGxiJyAtIGRhdGEgdGxiIG1pc3NlcyAobm90IGhhc2ggdGFibGUgbWlzc2VzKQotCi0gICAgIFBNQzIKLSAgICAgLS0tLQotICAgICAgJ2RjIG1pc3MnIC0gZGF0YSBjYWNoZSBtaXNzZXMKLSAgICAgICdpdGxiJyAtIGluc3RydWN0aW9uIHRsYiBtaXNzZXMgKG5vdCBoYXNoIHRhYmxlIG1pc3NlcykKLSAgICAgICdsb2FkIG1pc3MgdGltZScgLSBjeWNsZXMgdG8gY29tcGxldGUgYSBsb2FkIG1pc3MKLQotMy4gQnVncwotCi0gIFRoZSBQTUMxIGFuZCBQTUMyIGNvdW50ZXJzIGNhbiBvdmVyZmxvdyBhbmQgZ2l2ZSBubyBpbmRpY2F0aW9uIG9mIHRoYXQKLSAgaW4gL3Byb2MvcHBjX2h0YWIuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Bvd2VycGMvc21wLnR4dCBiL0RvY3VtZW50YXRpb24vcG93ZXJwYy9zbXAudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YjU4MWI4Li4wMDAwMDAwCi0tLSBhL0RvY3VtZW50YXRpb24vcG93ZXJwYy9zbXAudHh0CisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotICAgICAgICAgICAgICAgICBJbmZvcm1hdGlvbiBhYm91dCBMaW51eC9QUEMgU01QIG1vZGUKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi1UaGlzIGRvY3VtZW50IGFuZCB0aGUgcmVsYXRlZCBjb2RlIHdhcyB3cml0dGVuIGJ5IG1lCi0oQ29ydCBEb3VnYW4sIGNvcnRAZnNtbGFicy5jb20pIHBsZWFzZSBlbWFpbCBtZSBpZiB5b3UgaGF2ZSBxdWVzdGlvbnMsCi1jb21tZW50cyBvciBjb3JyZWN0aW9ucy4KLQotTGFzdCBDaGFuZ2U6IDMuMzEuOTkKLQotSWYgeW91IHdhbnQgdG8gaGVscCBieSB3cml0aW5nIGNvZGUgb3IgdGVzdGluZyBkaWZmZXJlbnQgaGFyZHdhcmUgcGxlYXNlCi1lbWFpbCBtZSEKLQotMS4gU3RhdGUgb2YgU3VwcG9ydGVkIEhhcmR3YXJlCi0KLSAgUG93ZXJTdXJnZSBBcmNoaXRlY3R1cmUgLSB0ZXN0ZWQgb24gVU1BWCBzOTAwLCBBcHBsZSA5NjAwCi0gICAgVGhlIHNlY29uZCBwcm9jZXNzb3Igb24gdGhpcyBtYWNoaW5lIGJvb3RzIHVwIGp1c3QgZmluZSBhbmQKLSAgICBlbnRlcnMgaXRzIGlkbGUgbG9vcC4gIEhvcGVmdWxseSBhIGNvbXBsZXRlbHkgd29ya2luZyBTTVAga2VybmVsCi0gICAgb24gdGhpcyBtYWNoaW5lIHdpbGwgYmUgZG9uZSBzaG9ydGx5LgotCi0gICAgVGhlIGNvZGUgbWFrZXMgdGhlIGFzc3VtcHRpb24gb2Ygb25seSB0d28gcHJvY2Vzc29ycy4gIFRoZSBjaGFuZ2VzCi0gICAgbmVjZXNzYXJ5IHRvIHdvcmsgd2l0aCBhbnkgbnVtYmVyIHdvdWxkIG5vdCBiZSBvdmVybHkgZGlmZmljdWx0IGJ1dAotICAgIEkgZG9uJ3QgaGF2ZSBhbnkgbWFjaGluZXMgd2l0aCA+MiBwcm9jZXNzb3JzIHNvIGl0J3Mgbm90IGhpZ2ggb24gbXkKLSAgICBsaXN0IG9mIHByaW9yaXRpZXMuICBJZiBhbnlvbmUgZWxzZSB3b3VsZCBsaWtlIGRvIHRvIHRoZSB3b3JrIGVtYWlsCi0gICAgbWUgYW5kIEkgY2FuIHBvaW50IG91dCB0aGUgcGxhY2VzIHRoYXQgbmVlZCBjaGFuZ2VkLiAgSWYgeW91IGhhdmUgPjIKLSAgICBwcm9jZXNzb3JzIGFuZCBkb24ndCB3YW50IHRvIGFkZCBzdXBwb3J0IHlvdXJzZWxmIGxldCBtZSBrbm93IGFuZCBJCi0gICAgY2FuIHRha2UgYSBsb29rIGludG8gaXQuCi0KLSAgQmVCb3gKLSAgICBCZUJveCBzdXBwb3J0IGhhc24ndCBiZWVuIGFkZGVkIHRvIHRoZSAyLjEuWCBrZXJuZWxzIGZyb20gMi4wLlgKLSAgICBidXQgd29yayBpcyBiZWluZyBkb25lIGFuZCBTTVAgc3VwcG9ydCBmb3IgQmVCb3ggaXMgaW4gdGhlIHdvcmtzLgotCi0gIENIUlAKLSAgICBDSFJQIFNNUCB3b3JrcyBhbmQgaXMgZmFpcmx5IHNvbGlkLiAgSXQncyBiZWVuIHRlc3RlZCBvbiB0aGUgSUJNIEY1MAotICAgIHdpdGggNCBwcm9jZXNzb3JzIGZvciBxdWl0ZSBzb21lIHRpbWUgbm93LgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zY3NpL0NoYW5nZUxvZy5tZWdhcmFpZCBiL0RvY3VtZW50YXRpb24vc2NzaS9DaGFuZ2VMb2cubWVnYXJhaWQKaW5kZXggMzc3OTZmZS4uZWFhNDgwMSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9zY3NpL0NoYW5nZUxvZy5tZWdhcmFpZAorKysgYi9Eb2N1bWVudGF0aW9uL3Njc2kvQ2hhbmdlTG9nLm1lZ2FyYWlkCkBAIC00MDksNyArNDA5LDcgQEAKIAltZWdhcmFpZF9tYm94X3ByZXBhcmVfcHRocnUsIG1lZ2FyYWlkX21ib3hfcHJlcGFyZV9lcHRocnUsCiAJbWVnYXJhaWRfYnVzeXdhaXRfbWJveAogCi0JCS0gQW5kcmV3IE1vcnRvbiA8YWtwbUBvc2RsLm9yZz4sIDA4LjE5LjIwMDQKKwkJLSBBbmRyZXcgTW9ydG9uLCAwOC4xOS4yMDA0CiAJCWxpbnV4LXNjc2kgbWFpbGluZyBsaXN0CiAKIAkiU29tZXRoaW5nIGVsc2UgdG8gY2xlYW4gdXAgYWZ0ZXIgaW5jbHVzaW9uOiBldmVyeSBpbnN0YW5jZSBvZiBhbgpAQCAtNDcxLDEzICs0NzEsMTMgQEAKIHZpaS4JTW92ZSB0aGUgZnVuY3Rpb24gZGVjbGFyYXRpb25zIGZvciB0aGUgbWFuYWdlbWVudCBtb2R1bGUgZnJvbQogCW1lZ2FyYWlkX21tLmggdG8gbWVnYXJhaWRfbW0uYwogCi0JCS0gQW5kcmV3IE1vcnRvbiA8YWtwbUBvc2RsLm9yZz4sIDA4LjE5LjIwMDQKKwkJLSBBbmRyZXcgTW9ydG9uLCAwOC4xOS4yMDA0CiAJCWxpbnV4LXNjc2kgbWFpbGluZyBsaXN0CiAKIHZpaWkuCUNoYW5nZSBkZWZhdWx0IHZhbHVlcyBmb3IgTUVHQVJBSURfTkVXR0VOLCBNRUdBUkFJRF9NTSwgYW5kCiAJTUVHQVJBSURfTUFJTEJPWCB0byAnbicgaW4gS2NvbmZpZy5tZWdhcmFpZAogCi0JCS0gQW5kcmV3IE1vcnRvbiA8YWtwbUBvc2RsLm9yZz4sIDA4LjE5LjIwMDQKKwkJLSBBbmRyZXcgTW9ydG9uLCAwOC4xOS4yMDA0CiAJCWxpbnV4LXNjc2kgbWFpbGluZyBsaXN0CiAKIGl4LglyZXBsYWNlIHVkZWxheSB3aXRoIG1zbGVlcApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zcGkvcHhhMnh4IGIvRG9jdW1lbnRhdGlvbi9zcGkvcHhhMnh4CmluZGV4IGJiZThkZWUuLjZiYjkxNmQgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vc3BpL3B4YTJ4eAorKysgYi9Eb2N1bWVudGF0aW9uL3NwaS9weGEyeHgKQEAgLTk2LDcgKzk2LDcgQEAKIGluZm9ybWF0aW9uIHZpYSB0aGUgc3RydWN0dXJlICJweGEyeHhfc3BpX2NoaXAiIGZvdW5kIGluCiAiYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL3B4YTJ4eF9zcGkuaCIuICBUaGUgcHhhMnh4X3NwaSBtYXN0ZXIgY29udHJvbGxlciBkcml2ZXIKIHdpbGwgdXNlcyB0aGUgY29uZmlndXJhdGlvbiB3aGVuZXZlciB0aGUgZHJpdmVyIGNvbW11bmljYXRlcyB3aXRoIHRoZSBzbGF2ZQotZGV2aWNlLgorZGV2aWNlLiBBbGwgZmllbGRzIGFyZSBvcHRpb25hbC4KIAogc3RydWN0IHB4YTJ4eF9zcGlfY2hpcCB7CiAJdTggdHhfdGhyZXNob2xkOwpAQCAtMTEyLDE0ICsxMTIsMTcgQEAKIHBlcmZvcm1hbmNlIG9mIHB4YTJ4eF9zcGkgZHJpdmVyIGFuZCBtaXNjb25maWd1cmF0aW9uIHdpbGwgcmVzdWx0IGluIHJ4CiBmaWZvIG92ZXJydW5zIChlc3BlY2lhbGx5IGluIFBJTyBtb2RlIHRyYW5zZmVycykuIEdvb2QgZGVmYXVsdCB2YWx1ZXMgYXJlCiAKLQkudHhfdGhyZXNob2xkID0gMTIsCi0JLnJ4X3RocmVzaG9sZCA9IDQsCisJLnR4X3RocmVzaG9sZCA9IDgsCisJLnJ4X3RocmVzaG9sZCA9IDgsCisKK1RoZSByYW5nZSBpcyAxIHRvIDE2IHdoZXJlIHplcm8gaW5kaWNhdGVzICJ1c2UgZGVmYXVsdCIuCiAKIFRoZSAicHhhMnh4X3NwaV9jaGlwLmRtYV9idXJzdF9zaXplIiBmaWVsZCBpcyB1c2VkIHRvIGNvbmZpZ3VyZSBQWEEyeHggRE1BCiBlbmdpbmUgYW5kIGlzIHJlbGF0ZWQgdGhlICJzcGlfZGV2aWNlLmJpdHNfcGVyX3dvcmQiIGZpZWxkLiAgUmVhZCBhbmQgdW5kZXJzdGFuZAogdGhlIFBYQTJ4eCAiRGV2ZWxvcGVyIE1hbnVhbCIgc2VjdGlvbnMgb24gdGhlIERNQSBjb250cm9sbGVyIGFuZCBTU1AgQ29udHJvbGxlcnMKIHRvIGRldGVybWluZSB0aGUgY29ycmVjdCB2YWx1ZS4gQW4gU1NQIGNvbmZpZ3VyZWQgZm9yIGJ5dGUtd2lkZSB0cmFuc2ZlcnMgd291bGQKLXVzZSBhIHZhbHVlIG9mIDguCit1c2UgYSB2YWx1ZSBvZiA4LiBUaGUgZHJpdmVyIHdpbGwgZGV0ZXJtaW5lIGEgcmVhc29uYWJsZSBkZWZhdWx0IGlmCitkbWFfYnVyc3Rfc2l6ZSA9PSAwLgogCiBUaGUgInB4YTJ4eF9zcGlfY2hpcC50aW1lb3V0IiBmaWVsZHMgaXMgdXNlZCB0byBlZmZpY2llbnRseSBoYW5kbGUKIHRyYWlsaW5nIGJ5dGVzIGluIHRoZSBTU1AgcmVjZWl2ZXIgZmlmby4gIFRoZSBjb3JyZWN0IHZhbHVlIGZvciB0aGlzIGZpZWxkIGlzCkBAIC0xMzcsNyArMTQwLDEzIEBACiBOVUxMLCB0aGUgcHhhMnh4X3NwaSBtYXN0ZXIgY29udHJvbGxlciBkcml2ZXIgYXNzdW1lcyB0aGF0IHRoZSBTU1AgcG9ydCBpcwogY29uZmlndXJlZCB0byB1c2UgU1NQRlJNIGluc3RlYWQuCiAKLU5TU1AgU0FMVkUgU0FNUExFCitOT1RFOiB0aGUgU1BJIGRyaXZlciBjYW5ub3QgY29udHJvbCB0aGUgY2hpcCBzZWxlY3QgaWYgU1NQRlJNIGlzIHVzZWQsIHNvIHRoZQorY2hpcHNlbGVjdCBpcyBkcm9wcGVkIGFmdGVyIGVhY2ggc3BpX3RyYW5zZmVyLiAgTW9zdCBkZXZpY2VzIG5lZWQgY2hpcCBzZWxlY3QKK2Fzc2VydGVkIGFyb3VuZCB0aGUgY29tcGxldGUgbWVzc2FnZS4gIFVzZSBTU1BGUk0gYXMgYSBHUElPICh0aHJvdWdoIGNzX2NvbnRyb2wpCit0byBhY2NvbW9kYXRlIHRoZXNlIGNoaXBzLgorCisKK05TU1AgU0xBVkUgU0FNUExFCiAtLS0tLS0tLS0tLS0tLS0tLQogVGhlIHB4YTJ4eF9zcGlfY2hpcCBzdHJ1Y3R1cmUgaXMgcGFzc2VkIHRvIHRoZSBweGEyeHhfc3BpIGRyaXZlciBpbiB0aGUKICJzcGlfYm9hcmRfaW5mby5jb250cm9sbGVyX2RhdGEiIGZpZWxkLiBCZWxvdyBpcyBhIHNhbXBsZSBjb25maWd1cmF0aW9uIHVzaW5nCkBAIC0yMDYsMTggKzIxNSwyMSBAQAogCiBETUEgYW5kIFBJTyBJL08gU3VwcG9ydAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVRoZSBweGEyeHhfc3BpIGRyaXZlciBzdXBwb3J0IGJvdGggRE1BIGFuZCBpbnRlcnJ1cHQgZHJpdmVuIFBJTyBtZXNzYWdlCi10cmFuc2ZlcnMuICBUaGUgZHJpdmVyIGRlZmF1bHRzIHRvIFBJTyBtb2RlIGFuZCBETUEgdHJhbnNmZXJzIG11c3QgZW5hYmxlZCBieQotc2V0dGluZyB0aGUgImVuYWJsZV9kbWEiIGZsYWcgaW4gdGhlICJweGEyeHhfc3BpX21hc3RlciIgc3RydWN0dXJlIGFuZAotZW5zdXJpbmcgdGhhdCB0aGUgInB4YTJ4eF9zcGlfY2hpcC5kbWFfYnVyc3Rfc2l6ZSIgZmllbGQgaXMgbm9uLXplcm8uICBUaGUgRE1BCi1tb2RlIHN1cHBvcnQgYm90aCBjb2hlcmVudCBhbmQgc3RyZWFtIGJhc2VkIERNQSBtYXBwaW5ncy4KK1RoZSBweGEyeHhfc3BpIGRyaXZlciBzdXBwb3J0cyBib3RoIERNQSBhbmQgaW50ZXJydXB0IGRyaXZlbiBQSU8gbWVzc2FnZQordHJhbnNmZXJzLiAgVGhlIGRyaXZlciBkZWZhdWx0cyB0byBQSU8gbW9kZSBhbmQgRE1BIHRyYW5zZmVycyBtdXN0IGJlIGVuYWJsZWQKK2J5IHNldHRpbmcgdGhlICJlbmFibGVfZG1hIiBmbGFnIGluIHRoZSAicHhhMnh4X3NwaV9tYXN0ZXIiIHN0cnVjdHVyZS4gIFRoZSBETUEKK21vZGUgc3VwcG9ydHMgYm90aCBjb2hlcmVudCBhbmQgc3RyZWFtIGJhc2VkIERNQSBtYXBwaW5ncy4KIAogVGhlIGZvbGxvd2luZyBsb2dpYyBpcyB1c2VkIHRvIGRldGVybWluZSB0aGUgdHlwZSBvZiBJL08gdG8gYmUgdXNlZCBvbgogYSBwZXIgInNwaV90cmFuc2ZlciIgYmFzaXM6CiAKLWlmICFlbmFibGVfZG1hIG9yIGRtYV9idXJzdF9zaXplID09IDAgdGhlbgoraWYgIWVuYWJsZV9kbWEgdGhlbgogCWFsd2F5cyB1c2UgUElPIHRyYW5zZmVycwogCitpZiBzcGlfbWVzc2FnZS5sZW4gPiA4MTkxIHRoZW4KKwlwcmludCAicmF0ZSBsaW1pdGVkIiB3YXJuaW5nCisJdXNlIFBJTyB0cmFuc2ZlcnMKKwogaWYgc3BpX21lc3NhZ2UuaXNfZG1hX21hcHBlZCBhbmQgcnhfZG1hX2J1ZiAhPSAwIGFuZCB0eF9kbWFfYnVmICE9IDAgdGhlbgogCXVzZSBjb2hlcmVudCBETUEgbW9kZQogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3N5c2N0bC9rZXJuZWwudHh0IGIvRG9jdW1lbnRhdGlvbi9zeXNjdGwva2VybmVsLnR4dAppbmRleCBlMWZmMGQ5Li5iZGU3OTllIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3N5c2N0bC9rZXJuZWwudHh0CisrKyBiL0RvY3VtZW50YXRpb24vc3lzY3RsL2tlcm5lbC50eHQKQEAgLTM2OSw0ICszNjksNSBAQAogICAyIC0gQSBtb2R1bGUgd2FzIGZvcmNlIGxvYWRlZCBieSBpbnNtb2QgLWYuCiAgICAgICBTZXQgYnkgbW9kdXRpbHMgPj0gMi40LjkgYW5kIG1vZHVsZS1pbml0LXRvb2xzLgogICA0IC0gVW5zYWZlIFNNUCBwcm9jZXNzb3JzOiBTTVAgd2l0aCBDUFVzIG5vdCBkZXNpZ25lZCBmb3IgU01QLgorIDY0IC0gQSBtb2R1bGUgZnJvbSBkcml2ZXJzL3N0YWdpbmcgd2FzIGxvYWRlZC4KIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zeXNycS50eHQgYi9Eb2N1bWVudGF0aW9uL3N5c3JxLnR4dAppbmRleCA1Y2UwOTUyLi4xMGEwMjYzIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3N5c3JxLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3N5c3JxLnR4dApAQCAtOTUsNyArOTUsOSBAQAogCiAncCcgICAgIC0gV2lsbCBkdW1wIHRoZSBjdXJyZW50IHJlZ2lzdGVycyBhbmQgZmxhZ3MgdG8geW91ciBjb25zb2xlLgogCi0ncScgICAgIC0gV2lsbCBkdW1wIGEgbGlzdCBvZiBhbGwgcnVubmluZyB0aW1lcnMuCisncScgICAgIC0gV2lsbCBkdW1wIHBlciBDUFUgbGlzdHMgb2YgYWxsIGFybWVkIGhydGltZXJzIChidXQgTk9UIHJlZ3VsYXIKKyAgICAgICAgICB0aW1lcl9saXN0IHRpbWVycykgYW5kIGRldGFpbGVkIGluZm9ybWF0aW9uIGFib3V0IGFsbAorICAgICAgICAgIGNsb2NrZXZlbnQgZGV2aWNlcy4KIAogJ3InICAgICAtIFR1cm5zIG9mZiBrZXlib2FyZCByYXcgbW9kZSBhbmQgc2V0cyBpdCB0byBYTEFURS4KIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi90aW1lcnMvMDAtSU5ERVggYi9Eb2N1bWVudGF0aW9uL3RpbWVycy8wMC1JTkRFWApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOTdkYzM1Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi90aW1lcnMvMDAtSU5ERVgKQEAgLTAsMCArMSwxMCBAQAorMDAtSU5ERVgKKwktIHRoaXMgZmlsZQoraGlnaHJlcy50eHQKKwktIEhpZ2ggcmVzb2x1dGlvbiB0aW1lcnMgYW5kIGR5bmFtaWMgdGlja3MgZGVzaWduIG5vdGVzCitocGV0LnR4dAorCS0gSGlnaCBQcmVjaXNpb24gRXZlbnQgVGltZXIgRHJpdmVyIGZvciBMaW51eAoraHJ0aW1lcnMudHh0CisJLSBzdWJzeXN0ZW0gZm9yIGhpZ2gtcmVzb2x1dGlvbiBrZXJuZWwgdGltZXJzCit0aW1lcl9zdGF0cy50eHQKKwktIHRpbWVyIHVzYWdlIHN0YXRpc3RpY3MKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdGltZXJzL2hwZXQudHh0IGIvRG9jdW1lbnRhdGlvbi90aW1lcnMvaHBldC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTdjMDlhYgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vdGltZXJzL2hwZXQudHh0CkBAIC0wLDAgKzEsMjk5IEBACisJCUhpZ2ggUHJlY2lzaW9uIEV2ZW50IFRpbWVyIERyaXZlciBmb3IgTGludXgKKworVGhlIEhpZ2ggUHJlY2lzaW9uIEV2ZW50IFRpbWVyIChIUEVUKSBoYXJkd2FyZSBmb2xsb3dzIGEgc3BlY2lmaWNhdGlvbgorYnkgSW50ZWwgYW5kIE1pY3Jvc29mdCB3aGljaCBjYW4gYmUgZm91bmQgYXQKKworCWh0dHA6Ly93d3cuaW50ZWwuY29tL3RlY2hub2xvZ3kvYXJjaGl0ZWN0dXJlL2hwZXRzcGVjLmh0bQorCitFYWNoIEhQRVQgaGFzIG9uZSBmaXhlZC1yYXRlIGNvdW50ZXIgKGF0IDEwKyBNSHosIGhlbmNlICJIaWdoIFByZWNpc2lvbiIpCithbmQgdXAgdG8gMzIgY29tcGFyYXRvcnMuICBOb3JtYWxseSB0aHJlZSBvciBtb3JlIGNvbXBhcmF0b3JzIGFyZSBwcm92aWRlZCwKK2VhY2ggb2Ygd2hpY2ggY2FuIGdlbmVyYXRlIG9uZXNob3QgaW50ZXJ1cHRzIGFuZCBhdCBsZWFzdCBvbmUgb2Ygd2hpY2ggaGFzCithZGRpdGlvbmFsIGhhcmR3YXJlIHRvIHN1cHBvcnQgcGVyaW9kaWMgaW50ZXJydXB0cy4gIFRoZSBjb21wYXJhdG9ycyBhcmUKK2Fsc28gY2FsbGVkICJ0aW1lcnMiLCB3aGljaCBjYW4gYmUgbWlzbGVhZGluZyBzaW5jZSB1c3VhbGx5IHRpbWVycyBhcmUKK2luZGVwZW5kZW50IG9mIGVhY2ggb3RoZXIgLi4uIHRoZXNlIHNoYXJlIGEgY291bnRlciwgY29tcGxpY2F0aW5nIHJlc2V0cy4KKworSFBFVCBkZXZpY2VzIGNhbiBzdXBwb3J0IHR3byBpbnRlcnJ1cHQgcm91dGluZyBtb2Rlcy4gIEluIG9uZSBtb2RlLCB0aGUKK2NvbXBhcmF0b3JzIGFyZSBhZGRpdGlvbmFsIGludGVycnVwdCBzb3VyY2VzIHdpdGggbm8gcGFydGljdWxhciBzeXN0ZW0KK3JvbGUuICBNYW55IHg4NiBCSU9TIHdyaXRlcnMgZG9uJ3Qgcm91dGUgSFBFVCBpbnRlcnJ1cHRzIGF0IGFsbCwgd2hpY2gKK3ByZXZlbnRzIHVzZSBvZiB0aGF0IG1vZGUuICBUaGV5IHN1cHBvcnQgdGhlIG90aGVyICJsZWdhY3kgcmVwbGFjZW1lbnQiCittb2RlIHdoZXJlIHRoZSBmaXJzdCB0d28gY29tcGFyYXRvcnMgYmxvY2sgaW50ZXJydXB0cyBmcm9tIDgyNTQgdGltZXJzCithbmQgZnJvbSB0aGUgUlRDLgorCitUaGUgZHJpdmVyIHN1cHBvcnRzIGRldGVjdGlvbiBvZiBIUEVUIGRyaXZlciBhbGxvY2F0aW9uIGFuZCBpbml0aWFsaXphdGlvbgorb2YgdGhlIEhQRVQgYmVmb3JlIHRoZSBkcml2ZXIgbW9kdWxlX2luaXQgcm91dGluZSBpcyBjYWxsZWQuICBUaGlzIGVuYWJsZXMKK3BsYXRmb3JtIGNvZGUgd2hpY2ggdXNlcyB0aW1lciAwIG9yIDEgYXMgdGhlIG1haW4gdGltZXIgdG8gaW50ZXJjZXB0IEhQRVQKK2luaXRpYWxpemF0aW9uLiAgQW4gZXhhbXBsZSBvZiB0aGlzIGluaXRpYWxpemF0aW9uIGNhbiBiZSBmb3VuZCBpbgorYXJjaC94ODYva2VybmVsL2hwZXQuYy4KKworVGhlIGRyaXZlciBwcm92aWRlcyBhIHVzZXJzcGFjZSBBUEkgd2hpY2ggcmVzZW1ibGVzIHRoZSBBUEkgZm91bmQgaW4gdGhlCitSVEMgZHJpdmVyIGZyYW1ld29yay4gIEFuIGV4YW1wbGUgdXNlciBzcGFjZSBwcm9ncmFtIGlzIHByb3ZpZGVkIGJlbG93LgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPG1lbW9yeS5oPgorI2luY2x1ZGUgPG1hbGxvYy5oPgorI2luY2x1ZGUgPHRpbWUuaD4KKyNpbmNsdWRlIDxjdHlwZS5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy93YWl0Lmg+CisjaW5jbHVkZSA8c2lnbmFsLmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHN5cy90aW1lLmg+CisjaW5jbHVkZSA8bGludXgvaHBldC5oPgorCisKK2V4dGVybiB2b2lkIGhwZXRfb3Blbl9jbG9zZShpbnQsIGNvbnN0IGNoYXIgKiopOworZXh0ZXJuIHZvaWQgaHBldF9pbmZvKGludCwgY29uc3QgY2hhciAqKik7CitleHRlcm4gdm9pZCBocGV0X3BvbGwoaW50LCBjb25zdCBjaGFyICoqKTsKK2V4dGVybiB2b2lkIGhwZXRfZmFzeW5jKGludCwgY29uc3QgY2hhciAqKik7CitleHRlcm4gdm9pZCBocGV0X3JlYWQoaW50LCBjb25zdCBjaGFyICoqKTsKKworI2luY2x1ZGUgPHN5cy9wb2xsLmg+CisjaW5jbHVkZSA8c3lzL2lvY3RsLmg+CisjaW5jbHVkZSA8c2lnbmFsLmg+CisKK3N0cnVjdCBocGV0X2NvbW1hbmQgeworCWNoYXIJCSpjb21tYW5kOworCXZvaWQJCSgqZnVuYykoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiogYXJndik7Cit9IGhwZXRfY29tbWFuZFtdID0geworCXsKKwkJIm9wZW4tY2xvc2UiLAorCQlocGV0X29wZW5fY2xvc2UKKwl9LAorCXsKKwkJImluZm8iLAorCQlocGV0X2luZm8KKwl9LAorCXsKKwkJInBvbGwiLAorCQlocGV0X3BvbGwKKwl9LAorCXsKKwkJImZhc3luYyIsCisJCWhwZXRfZmFzeW5jCisJfSwKK307CisKK2ludAorbWFpbihpbnQgYXJnYywgY29uc3QgY2hhciAqKiBhcmd2KQoreworCWludAlpOworCisJYXJnYy0tOworCWFyZ3YrKzsKKworCWlmICghYXJnYykgeworCQlmcHJpbnRmKHN0ZGVyciwgIi1ocGV0OiByZXF1aXJlcyBjb21tYW5kXG4iKTsKKwkJcmV0dXJuIC0xOworCX0KKworCisJZm9yIChpID0gMDsgaSA8IChzaXplb2YgKGhwZXRfY29tbWFuZCkgLyBzaXplb2YgKGhwZXRfY29tbWFuZFswXSkpOyBpKyspCisJCWlmICghc3RyY21wKGFyZ3ZbMF0sIGhwZXRfY29tbWFuZFtpXS5jb21tYW5kKSkgeworCQkJYXJnYy0tOworCQkJYXJndisrOworCQkJZnByaW50ZihzdGRlcnIsICItaHBldDogZXhlY3V0aW5nICVzXG4iLAorCQkJCWhwZXRfY29tbWFuZFtpXS5jb21tYW5kKTsKKwkJCWhwZXRfY29tbWFuZFtpXS5mdW5jKGFyZ2MsIGFyZ3YpOworCQkJcmV0dXJuIDA7CisJCX0KKworCWZwcmludGYoc3RkZXJyLCAiZG9faHBldDogY29tbWFuZCAlcyBub3QgaW1wbGVtZW50ZWRcbiIsIGFyZ3ZbMF0pOworCisJcmV0dXJuIC0xOworfQorCit2b2lkCitocGV0X29wZW5fY2xvc2UoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KQoreworCWludAlmZDsKKworCWlmIChhcmdjICE9IDEpIHsKKwkJZnByaW50ZihzdGRlcnIsICJocGV0X29wZW5fY2xvc2U6IGRldmljZS1uYW1lXG4iKTsKKwkJcmV0dXJuOworCX0KKworCWZkID0gb3Blbihhcmd2WzBdLCBPX1JET05MWSk7CisJaWYgKGZkIDwgMCkKKwkJZnByaW50ZihzdGRlcnIsICJocGV0X29wZW5fY2xvc2U6IG9wZW4gZmFpbGVkXG4iKTsKKwllbHNlCisJCWNsb3NlKGZkKTsKKworCXJldHVybjsKK30KKwordm9pZAoraHBldF9pbmZvKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndikKK3sKK30KKwordm9pZAoraHBldF9wb2xsKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndikKK3sKKwl1bnNpZ25lZCBsb25nCQlmcmVxOworCWludAkJCWl0ZXJhdGlvbnMsIGksIGZkOworCXN0cnVjdCBwb2xsZmQJCXBmZDsKKwlzdHJ1Y3QgaHBldF9pbmZvCWluZm87CisJc3RydWN0IHRpbWV2YWwJCXN0diwgZXR2OworCXN0cnVjdCB0aW1lem9uZQkJdHo7CisJbG9uZwkJCXVzZWM7CisKKwlpZiAoYXJnYyAhPSAzKSB7CisJCWZwcmludGYoc3RkZXJyLCAiaHBldF9wb2xsOiBkZXZpY2UtbmFtZSBmcmVxIGl0ZXJhdGlvbnNcbiIpOworCQlyZXR1cm47CisJfQorCisJZnJlcSA9IGF0b2koYXJndlsxXSk7CisJaXRlcmF0aW9ucyA9IGF0b2koYXJndlsyXSk7CisKKwlmZCA9IG9wZW4oYXJndlswXSwgT19SRE9OTFkpOworCisJaWYgKGZkIDwgMCkgeworCQlmcHJpbnRmKHN0ZGVyciwgImhwZXRfcG9sbDogb3BlbiBvZiAlcyBmYWlsZWRcbiIsIGFyZ3ZbMF0pOworCQlyZXR1cm47CisJfQorCisJaWYgKGlvY3RsKGZkLCBIUEVUX0lSUUZSRVEsIGZyZXEpIDwgMCkgeworCQlmcHJpbnRmKHN0ZGVyciwgImhwZXRfcG9sbDogSFBFVF9JUlFGUkVRIGZhaWxlZFxuIik7CisJCWdvdG8gb3V0OworCX0KKworCWlmIChpb2N0bChmZCwgSFBFVF9JTkZPLCAmaW5mbykgPCAwKSB7CisJCWZwcmludGYoc3RkZXJyLCAiaHBldF9wb2xsOiBmYWlsZWQgdG8gZ2V0IGluZm9cbiIpOworCQlnb3RvIG91dDsKKwl9CisKKwlmcHJpbnRmKHN0ZGVyciwgImhwZXRfcG9sbDogaW5mby5oaV9mbGFncyAweCVseFxuIiwgaW5mby5oaV9mbGFncyk7CisKKwlpZiAoaW5mby5oaV9mbGFncyAmJiAoaW9jdGwoZmQsIEhQRVRfRVBJLCAwKSA8IDApKSB7CisJCWZwcmludGYoc3RkZXJyLCAiaHBldF9wb2xsOiBIUEVUX0VQSSBmYWlsZWRcbiIpOworCQlnb3RvIG91dDsKKwl9CisKKwlpZiAoaW9jdGwoZmQsIEhQRVRfSUVfT04sIDApIDwgMCkgeworCQlmcHJpbnRmKHN0ZGVyciwgImhwZXRfcG9sbCwgSFBFVF9JRV9PTiBmYWlsZWRcbiIpOworCQlnb3RvIG91dDsKKwl9CisKKwlwZmQuZmQgPSBmZDsKKwlwZmQuZXZlbnRzID0gUE9MTElOOworCisJZm9yIChpID0gMDsgaSA8IGl0ZXJhdGlvbnM7IGkrKykgeworCQlwZmQucmV2ZW50cyA9IDA7CisJCWdldHRpbWVvZmRheSgmc3R2LCAmdHopOworCQlpZiAocG9sbCgmcGZkLCAxLCAtMSkgPCAwKQorCQkJZnByaW50ZihzdGRlcnIsICJocGV0X3BvbGw6IHBvbGwgZmFpbGVkXG4iKTsKKwkJZWxzZSB7CisJCQlsb25nIAlkYXRhOworCisJCQlnZXR0aW1lb2ZkYXkoJmV0diwgJnR6KTsKKwkJCXVzZWMgPSBzdHYudHZfc2VjICogMTAwMDAwMCArIHN0di50dl91c2VjOworCQkJdXNlYyA9IChldHYudHZfc2VjICogMTAwMDAwMCArIGV0di50dl91c2VjKSAtIHVzZWM7CisKKwkJCWZwcmludGYoc3RkZXJyLAorCQkJCSJocGV0X3BvbGw6IGV4cGlyZWQgdGltZSA9IDB4JWx4XG4iLCB1c2VjKTsKKworCQkJZnByaW50ZihzdGRlcnIsICJocGV0X3BvbGw6IHJldmVudHMgPSAweCV4XG4iLAorCQkJCXBmZC5yZXZlbnRzKTsKKworCQkJaWYgKHJlYWQoZmQsICZkYXRhLCBzaXplb2YoZGF0YSkpICE9IHNpemVvZihkYXRhKSkgeworCQkJCWZwcmludGYoc3RkZXJyLCAiaHBldF9wb2xsOiByZWFkIGZhaWxlZFxuIik7CisJCQl9CisJCQllbHNlCisJCQkJZnByaW50ZihzdGRlcnIsICJocGV0X3BvbGw6IGRhdGEgMHglbHhcbiIsCisJCQkJCWRhdGEpOworCQl9CisJfQorCitvdXQ6CisJY2xvc2UoZmQpOworCXJldHVybjsKK30KKworc3RhdGljIGludCBocGV0X3NpZ2lvX2NvdW50OworCitzdGF0aWMgdm9pZAoraHBldF9zaWdpbyhpbnQgdmFsKQoreworCWZwcmludGYoc3RkZXJyLCAiaHBldF9zaWdpbzogY2FsbGVkXG4iKTsKKwlocGV0X3NpZ2lvX2NvdW50Kys7Cit9CisKK3ZvaWQKK2hwZXRfZmFzeW5jKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndikKK3sKKwl1bnNpZ25lZCBsb25nCQlmcmVxOworCWludAkJCWl0ZXJhdGlvbnMsIGksIGZkLCB2YWx1ZTsKKwlzaWdfdAkJCW9sZHNpZzsKKwlzdHJ1Y3QgaHBldF9pbmZvCWluZm87CisKKwlocGV0X3NpZ2lvX2NvdW50ID0gMDsKKwlmZCA9IC0xOworCisJaWYgKChvbGRzaWcgPSBzaWduYWwoU0lHSU8sIGhwZXRfc2lnaW8pKSA9PSBTSUdfRVJSKSB7CisJCWZwcmludGYoc3RkZXJyLCAiaHBldF9mYXN5bmM6IGZhaWxlZCB0byBzZXQgc2lnbmFsIGhhbmRsZXJcbiIpOworCQlyZXR1cm47CisJfQorCisJaWYgKGFyZ2MgIT0gMykgeworCQlmcHJpbnRmKHN0ZGVyciwgImhwZXRfZmFzeW5jOiBkZXZpY2UtbmFtZSBmcmVxIGl0ZXJhdGlvbnNcbiIpOworCQlnb3RvIG91dDsKKwl9CisKKwlmZCA9IG9wZW4oYXJndlswXSwgT19SRE9OTFkpOworCisJaWYgKGZkIDwgMCkgeworCQlmcHJpbnRmKHN0ZGVyciwgImhwZXRfZmFzeW5jOiBmYWlsZWQgdG8gb3BlbiAlc1xuIiwgYXJndlswXSk7CisJCXJldHVybjsKKwl9CisKKworCWlmICgoZmNudGwoZmQsIEZfU0VUT1dOLCBnZXRwaWQoKSkgPT0gMSkgfHwKKwkJKCh2YWx1ZSA9IGZjbnRsKGZkLCBGX0dFVEZMKSkgPT0gMSkgfHwKKwkJKGZjbnRsKGZkLCBGX1NFVEZMLCB2YWx1ZSB8IE9fQVNZTkMpID09IDEpKSB7CisJCWZwcmludGYoc3RkZXJyLCAiaHBldF9mYXN5bmM6IGZjbnRsIGZhaWxlZFxuIik7CisJCWdvdG8gb3V0OworCX0KKworCWZyZXEgPSBhdG9pKGFyZ3ZbMV0pOworCWl0ZXJhdGlvbnMgPSBhdG9pKGFyZ3ZbMl0pOworCisJaWYgKGlvY3RsKGZkLCBIUEVUX0lSUUZSRVEsIGZyZXEpIDwgMCkgeworCQlmcHJpbnRmKHN0ZGVyciwgImhwZXRfZmFzeW5jOiBIUEVUX0lSUUZSRVEgZmFpbGVkXG4iKTsKKwkJZ290byBvdXQ7CisJfQorCisJaWYgKGlvY3RsKGZkLCBIUEVUX0lORk8sICZpbmZvKSA8IDApIHsKKwkJZnByaW50ZihzdGRlcnIsICJocGV0X2Zhc3luYzogZmFpbGVkIHRvIGdldCBpbmZvXG4iKTsKKwkJZ290byBvdXQ7CisJfQorCisJZnByaW50ZihzdGRlcnIsICJocGV0X2Zhc3luYzogaW5mby5oaV9mbGFncyAweCVseFxuIiwgaW5mby5oaV9mbGFncyk7CisKKwlpZiAoaW5mby5oaV9mbGFncyAmJiAoaW9jdGwoZmQsIEhQRVRfRVBJLCAwKSA8IDApKSB7CisJCWZwcmludGYoc3RkZXJyLCAiaHBldF9mYXN5bmM6IEhQRVRfRVBJIGZhaWxlZFxuIik7CisJCWdvdG8gb3V0OworCX0KKworCWlmIChpb2N0bChmZCwgSFBFVF9JRV9PTiwgMCkgPCAwKSB7CisJCWZwcmludGYoc3RkZXJyLCAiaHBldF9mYXN5bmMsIEhQRVRfSUVfT04gZmFpbGVkXG4iKTsKKwkJZ290byBvdXQ7CisJfQorCisJZm9yIChpID0gMDsgaSA8IGl0ZXJhdGlvbnM7IGkrKykgeworCQkodm9pZCkgcGF1c2UoKTsKKwkJZnByaW50ZihzdGRlcnIsICJocGV0X2Zhc3luYzogY291bnQgPSAlZFxuIiwgaHBldF9zaWdpb19jb3VudCk7CisJfQorCitvdXQ6CisJc2lnbmFsKFNJR0lPLCBvbGRzaWcpOworCisJaWYgKGZkID49IDApCisJCWNsb3NlKGZkKTsKKworCXJldHVybjsKK30KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdXNiL2FuY2hvcnMudHh0IGIvRG9jdW1lbnRhdGlvbi91c2IvYW5jaG9ycy50eHQKaW5kZXggNWU2YjY0Yy4uNmYyNGY1NiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi91c2IvYW5jaG9ycy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi91c2IvYW5jaG9ycy50eHQKQEAgLTUyLDYgKzUyLDExIEBACiB0aGUgY2FsbCByZXR1cm5zLiBUaGV5IG1heSBiZSB1bmxpbmtlZCBsYXRlciBidXQgd2lsbCBiZSB1bmxpbmtlZCBpbgogZmluaXRlIHRpbWUuCiAKK3VzYl9zY3V0dGxlX2FuY2hvcmVkX3VyYnMoKQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0FsbCBVUkJzIG9mIGFuIGFuY2hvciBhcmUgdW5hbmNob3JlZCBlbiBtYXNzZS4KKwogdXNiX3dhaXRfYW5jaG9yX2VtcHR5X3RpbWVvdXQoKQogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCkBAIC01OSw0ICs2NCwxNiBAQAogb3IgYSB0aW1lb3V0LCB3aGljaGV2ZXIgY29tZXMgZmlyc3QuIEl0cyByZXR1cm4gdmFsdWUgd2lsbCB0ZWxsIHlvdQogd2hldGhlciB0aGUgdGltZW91dCB3YXMgcmVhY2hlZC4KIAordXNiX2FuY2hvcl9lbXB0eSgpCistLS0tLS0tLS0tLS0tLS0tLS0KIAorUmV0dXJucyB0cnVlIGlmIG5vIFVSQnMgYXJlIGFzc29jaWF0ZWQgd2l0aCBhbiBhbmNob3IuIExvY2tpbmcKK2lzIHRoZSBjYWxsZXIncyByZXNwb25zaWJpbGl0eS4KKwordXNiX2dldF9mcm9tX2FuY2hvcigpCistLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworUmV0dXJucyB0aGUgb2xkZXN0IGFuY2hvcmVkIFVSQiBvZiBhbiBhbmNob3IuIFRoZSBVUkIgaXMgdW5hbmNob3JlZAorYW5kIHJldHVybmVkIHdpdGggYSByZWZlcmVuY2UuIEFzIHlvdSBtYXkgbWl4IFVSQnMgdG8gc2V2ZXJhbAorZGVzdGluYXRpb25zIGluIG9uZSBhbmNob3IgeW91IGhhdmUgbm8gZ3VhcmFudGVlIHRoZSBjaHJvbm9sb2dpY2FsbHkKK2ZpcnN0IHN1Ym1pdHRlZCBVUkIgaXMgcmV0dXJuZWQuClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi91c2IvbWlzY191c2JzZXZzZWcudHh0IGIvRG9jdW1lbnRhdGlvbi91c2IvbWlzY191c2JzZXZzZWcudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBmNmJlNGYKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3VzYi9taXNjX3VzYnNldnNlZy50eHQKQEAgLTAsMCArMSw0NiBAQAorVVNCIDctU2VnbWVudCBOdW1lcmljIERpc3BsYXkKK01hbnVmYWN0dXJlZCBieSBEZWxjb20gRW5naW5lZXJpbmcKKworRGV2aWNlIEluZm9ybWF0aW9uCistLS0tLS0tLS0tLS0tLS0tLS0KK1VTQiBWRU5ET1JfSUQJMHgwZmM1CitVU0IgUFJPRFVDVF9JRAkweDEyMjcKK0JvdGggdGhlIDYgY2hhcmFjdGVyIGFuZCA4IGNoYXJhY3RlciBkaXNwbGF5cyBoYXZlIFBST0RVQ1RfSUQsCithbmQgYWNjb3JkaW5nIHRvIERlbGNvbSBFbmdpbmVlcmluZyBubyBxdWVyeWFibGUgaW5mb3JtYXRpb24KK2NhbiBiZSBvYnRhaW5lZCBmcm9tIHRoZSBkZXZpY2UgdG8gdGVsbCB0aGVtIGFwYXJ0LgorCitEZXZpY2UgTW9kZXMKKy0tLS0tLS0tLS0tLQorQnkgZGVmYXVsdCwgdGhlIGRyaXZlciBhc3N1bWVzIHRoZSBkaXNwbGF5IGlzIG9ubHkgNiBjaGFyYWN0ZXJzCitUaGUgbW9kZSBmb3IgNiBjaGFyYWN0ZXJzIGlzOgorCU1TQiAweDA2OyBMU0IgMHgzZgorRm9yIHRoZSA4IGNoYXJhY3RlciBkaXNwbGF5OgorCU1TQiAweDA4OyBMU0IgMHhmZgorVGhlIGRldmljZSBjYW4gYWNjZXB0ICJ0ZXh0IiBlaXRoZXIgaW4gcmF3LCBoZXgsIG9yIGFzY2lpIHRleHRtb2RlLgorcmF3IGNvbnRyb2xzIGVhY2ggc2VnbWVudCBtYW51YWxseSwKK2hleCBleHBlY3RzIGEgdmFsdWUgYmV0d2VlbiAwLTE1IHBlciBjaGFyYWN0ZXIsCithc2NpaSBleHBlY3RzIGEgdmFsdWUgYmV0d2VlbiAnMCctJzknIGFuZCAnQSctJ0YnLgorVGhlIGRlZmF1bHQgaXMgYXNjaWkuCisKK0RldmljZSBPcGVyYXRpb24KKy0tLS0tLS0tLS0tLS0tLS0KKzEuCVR1cm4gb24gdGhlIGRldmljZToKKwllY2hvIDEgPiAvc3lzL2J1cy91c2IvLi4uL3Bvd2VyZWQKKzIuCVNldCB0aGUgZGV2aWNlJ3MgbW9kZToKKwllY2hvICRtb2RlX21zYiA+IC9zeXMvYnVzL3VzYi8uLi4vbW9kZV9tc2IKKwllY2hvICRtb2RlX2xzYiA+IC9zeXMvYnVzL3VzYi8uLi4vbW9kZV9sc2IKKzMuCVNldCB0aGUgdGV4dG1vZGU6CisJZWNobyAkdGV4dG1vZGUgPiAvc3lzL2J1cy91c2IvLi4uL3RleHRtb2RlCis0LglzZXQgdGhlIHRleHQgKGZvciBleGFtcGxlKToKKwllY2hvICIxMjNBQkMiID4gL3N5cy9idXMvdXNiLy4uLi90ZXh0IChhc2NpaSkKKwllY2hvICJBMUIyIiA+IC9zeXMvYnVzL3VzYi8uLi4vdGV4dCAoYXNjaWkpCisJZWNobyAtbmUgIlx4MDFceDAyXHgwMyIgPiAvc3lzL2J1cy91c2IvLi4uL3RleHQgKGhleCkKKzUuCVNldCB0aGUgZGVjaW1hbCBwbGFjZXMuCisJVGhlIGRldmljZSBoYXMgZWl0aGVyIDYgb3IgOCBkZWNpbWFsIHBvaW50cy4KKwl0byBzZXQgdGhlIG50aCBkZWNpbWFsIHBsYWNlIGNhbGN1bGF0ZSAxMCAqKiBuCisJYW5kIGVjaG8gaXQgaW4gdG8gL3N5cy9idXMvdXNiLy4uLi9kZWNpbWFscworCVRvIHNldCBtdWx0aXBsZSBkZWNpbWFscyBwb2ludHMgc3VtIHVwIGVhY2ggcG93ZXIuCisJRm9yIGV4YW1wbGUsIHRvIHNldCB0aGUgMHRoIGFuZCAzcmQgZGVjaW1hbCBwbGFjZQorCWVjaG8gMTAwMSA+IC9zeXMvYnVzL3VzYi8uLi4vZGVjaW1hbHMKKworCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3VzYi9wb3dlci1tYW5hZ2VtZW50LnR4dCBiL0RvY3VtZW50YXRpb24vdXNiL3Bvd2VyLW1hbmFnZW1lbnQudHh0CmluZGV4IDlkMzExNDAuLmU0OGVhMWQgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vdXNiL3Bvd2VyLW1hbmFnZW1lbnQudHh0CisrKyBiL0RvY3VtZW50YXRpb24vdXNiL3Bvd2VyLW1hbmFnZW1lbnQudHh0CkBAIC0zNTAsMTIgKzM1MCwxMiBAQAogCiBUaGVyZSBhbHNvIGFyZSBhIGNvdXBsZSBvZiB1dGlsaXR5IHJvdXRpbmVzIGRyaXZlcnMgY2FuIHVzZToKIAotCXVzYl9hdXRvcG1fZW5hYmxlKCkgc2V0cyBwbV91c2FnZV9jbnQgdG8gMSBhbmQgdGhlbiBjYWxscwotCXVzYl9hdXRvcG1fc2V0X2ludGVyZmFjZSgpLCB3aGljaCB3aWxsIGF0dGVtcHQgYW4gYXV0b3Jlc3VtZS4KLQotCXVzYl9hdXRvcG1fZGlzYWJsZSgpIHNldHMgcG1fdXNhZ2VfY250IHRvIDAgYW5kIHRoZW4gY2FsbHMKKwl1c2JfYXV0b3BtX2VuYWJsZSgpIHNldHMgcG1fdXNhZ2VfY250IHRvIDAgYW5kIHRoZW4gY2FsbHMKIAl1c2JfYXV0b3BtX3NldF9pbnRlcmZhY2UoKSwgd2hpY2ggd2lsbCBhdHRlbXB0IGFuIGF1dG9zdXNwZW5kLgogCisJdXNiX2F1dG9wbV9kaXNhYmxlKCkgc2V0cyBwbV91c2FnZV9jbnQgdG8gMSBhbmQgdGhlbiBjYWxscworCXVzYl9hdXRvcG1fc2V0X2ludGVyZmFjZSgpLCB3aGljaCB3aWxsIGF0dGVtcHQgYW4gYXV0b3Jlc3VtZS4KKwogVGhlIGNvbnZlbnRpb25hbCB1c2FnZSBwYXR0ZXJuIGlzIHRoYXQgYSBkcml2ZXIgY2FsbHMKIHVzYl9hdXRvcG1fZ2V0X2ludGVyZmFjZSgpIGluIGl0cyBvcGVuIHJvdXRpbmUgYW5kCiB1c2JfYXV0b3BtX3B1dF9pbnRlcmZhY2UoKSBpbiBpdHMgY2xvc2Ugb3IgcmVsZWFzZSByb3V0aW5lLiAgQnV0CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L0NBUkRMSVNULmF1MDgyOCBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvQ0FSRExJU1QuYXUwODI4CmluZGV4IGFhMDVlNWIuLmQ1Y2I0ZWEgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvQ0FSRExJU1QuYXUwODI4CisrKyBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvQ0FSRExJU1QuYXUwODI4CkBAIC0xLDUgKzEsNSBAQAogICAwIC0+IFVua25vd24gYm9hcmQgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGF1MDgyOCkKLSAgMSAtPiBIYXVwcGF1Z2UgSFZSOTUwUSAgICAgICAgICAgICAgICAgICAgICAgIChhdTA4MjgpICAgICAgICBbMjA0MDo3MjAwLDIwNDA6NzIxMCwyMDQwOjcyMTcsMjA0MDo3MjFiLDIwNDA6NzIxZiwyMDQwOjcyODAsMGZkOTowMDA4XQorICAxIC0+IEhhdXBwYXVnZSBIVlI5NTBRICAgICAgICAgICAgICAgICAgICAgICAgKGF1MDgyOCkgICAgICAgIFsyMDQwOjcyMDAsMjA0MDo3MjEwLDIwNDA6NzIxNywyMDQwOjcyMWIsMjA0MDo3MjFlLDIwNDA6NzIxZiwyMDQwOjcyODAsMGZkOTowMDA4XQogICAyIC0+IEhhdXBwYXVnZSBIVlI4NTAgICAgICAgICAgICAgICAgICAgICAgICAgKGF1MDgyOCkgICAgICAgIFsyMDQwOjcyNDBdCiAgIDMgLT4gRFZpQ08gRnVzaW9uSERUViBVU0IgICAgICAgICAgICAgICAgICAgICAoYXUwODI4KSAgICAgICAgWzBmZTk6ZDYyMF0KICAgNCAtPiBIYXVwcGF1Z2UgSFZSOTUwUSByZXYgeHhGOCAgICAgICAgICAgICAgIChhdTA4MjgpICAgICAgICBbMjA0MDo3MjAxLDIwNDA6NzIxMSwyMDQwOjcyODFdCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L0NBUkRMSVNULmJ0dHYgYi9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L0NBUkRMSVNULmJ0dHYKaW5kZXggZjMyZWZiNi4uNjBiYTY2OCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9DQVJETElTVC5idHR2CisrKyBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvQ0FSRExJU1QuYnR0dgpAQCAtMTUwLDMgKzE1MCw0IEBACiAxNDkgLT4gVHlwaG9vbiBUVi1UdW5lciBQQ0kgKDUwNjg0KQogMTUwIC0+IEdlb3Zpc2lvbiBHVi02MDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbMDA4YTo3NjNjXQogMTUxIC0+IEtvenVtaSBLVFYtMDFDCisxNTIgLT4gRW5jb3JlIEVOTCBUVi1GTS0yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsxMDAwOjE4MDFdCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L0NBUkRMSVNULmN4MjM4ODUgYi9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L0NBUkRMSVNULmN4MjM4ODUKaW5kZXggZjBlNjEzYi4uNjQ4MjNjYyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9DQVJETElTVC5jeDIzODg1CisrKyBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvQ0FSRExJU1QuY3gyMzg4NQpAQCAtOSwzICs5LDUgQEAKICAgOCAtPiBIYXVwcGF1Z2UgV2luVFYtSFZSMTcwMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWzAwNzA6ODEwMV0KICAgOSAtPiBIYXVwcGF1Z2UgV2luVFYtSFZSMTQwMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWzAwNzA6ODAxMF0KICAxMCAtPiBEVmlDTyBGdXNpb25IRFRWNyBEdWFsIEV4cHJlc3MgICAgICAgICAgICAgICAgICAgICAgWzE4YWM6ZDYxOF0KKyAxMSAtPiBEVmlDTyBGdXNpb25IRFRWIERWQi1UIER1YWwgRXhwcmVzcyAgICAgICAgICAgICAgICAgWzE4YWM6ZGI3OF0KKyAxMiAtPiBMZWFkdGVrIFdpbmZhc3QgUHhEVlIzMjAwIEggICAgICAgICAgICAgICAgICAgICAgICAgWzEwN2Q6NjY4MV0KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvQ0FSRExJU1QuY3g4OCBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvQ0FSRExJU1QuY3g4OAppbmRleCA3Y2Y1Njg1Li5hNTIyN2UzIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L0NBUkRMSVNULmN4ODgKKysrIGIvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9DQVJETElTVC5jeDg4CkBAIC02NiwzICs2NiwxMSBAQAogIDY1IC0+IERWaUNPIEZ1c2lvbkhEVFYgNyBHb2xkICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbMThhYzpkNjEwXQogIDY2IC0+IFByb2xpbmsgUGl4ZWx2aWV3IE1QRUcgODAwMEdUICAgICAgICAgICAgICAgICAgICAgICBbMTU1NDo0OTM1XQogIDY3IC0+IEt3b3JsZCBQbHVzVFYgSEQgUENJIDEyMCAoQVRTQyAxMjApICAgICAgICAgICAgICAgICBbMTdkZTowOGMxXQorIDY4IC0+IEhhdXBwYXVnZSBXaW5UVi1IVlI0MDAwIERWQi1TL1MyL1QvSHlicmlkICAgICAgICAgICBbMDA3MDo2OTAwLDAwNzA6NjkwNCwwMDcwOjY5MDJdCisgNjkgLT4gSGF1cHBhdWdlIFdpblRWLUhWUjQwMDAoTGl0ZSkgRFZCLVMvUzIgICAgICAgICAgICAgIFswMDcwOjY5MDUsMDA3MDo2OTA2XQorIDcwIC0+IFRlVmlpIFM0NjAgRFZCLVMvUzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZDQ2MDo5MDIyXQorIDcxIC0+IE9taWNvbSBTUzQgRFZCLVMvUzIgUENJICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbQTA0NDoyMDExXQorIDcyIC0+IFRCUyA4OTIwIERWQi1TL1MyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbODkyMDo4ODg4XQorIDczIC0+IFRlVmlpIFM0MjAgRFZCLVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZDQyMDo5MDIyXQorIDc0IC0+IFByb2xpbmsgUGl4ZWx2aWV3IEdsb2JhbCBFeHRyZW1lICAgICAgICAgICAgICAgICAgICBbMTU1NDo0OTc2XQorIDc1IC0+IFBST0YgNzMwMCBEVkItUy9TMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbQjAzMzozMDMzXQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9DQVJETElTVC5lbTI4eHggYi9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L0NBUkRMSVNULmVtMjh4eAppbmRleCA1MzQ0OWNiLi4xODdjYzQ4IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L0NBUkRMSVNULmVtMjh4eAorKysgYi9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L0NBUkRMSVNULmVtMjh4eApAQCAtMSw1ICsxLDUgQEAKICAgMCAtPiBVbmtub3duIEVNMjgwMCB2aWRlbyBncmFiYmVyICAgICAgICAgICAgIChlbTI4MDApICAgICAgICBbZWIxYToyODAwXQotICAxIC0+IFVua25vd24gRU0yNzUwLzI4eHggdmlkZW8gZ3JhYmJlciAgICAgICAgKGVtMjgyMC9lbTI4NDApIFtlYjFhOjI4MjAsZWIxYToyODIxLGViMWE6Mjg2MCxlYjFhOjI4NjEsZWIxYToyODcwLGViMWE6Mjg4MSxlYjFhOjI4ODNdCisgIDEgLT4gVW5rbm93biBFTTI3NTAvMjh4eCB2aWRlbyBncmFiYmVyICAgICAgICAoZW0yODIwL2VtMjg0MCkgW2ViMWE6MjgyMCxlYjFhOjI4NjAsZWIxYToyODYxLGViMWE6Mjg3MCxlYjFhOjI4ODEsZWIxYToyODgzXQogICAyIC0+IFRlcnJhdGVjIENpbmVyZ3kgMjUwIFVTQiAgICAgICAgICAgICAgICAgKGVtMjgyMC9lbTI4NDApIFswY2NkOjAwMzZdCiAgIDMgLT4gUGlubmFjbGUgUENUViBVU0IgMiAgICAgICAgICAgICAgICAgICAgICAoZW0yODIwL2VtMjg0MCkgWzIzMDQ6MDIwOF0KICAgNCAtPiBIYXVwcGF1Z2UgV2luVFYgVVNCIDIgICAgICAgICAgICAgICAgICAgIChlbTI4MjAvZW0yODQwKSBbMjA0MDo0MjAwLDIwNDA6NDIwMV0KQEAgLTEyLDcgKzEyLDcgQEAKICAxMSAtPiBUZXJyYXRlYyBIeWJyaWQgWFMgICAgICAgICAgICAgICAgICAgICAgIChlbTI4ODApICAgICAgICBbMGNjZDowMDQyXQogIDEyIC0+IEt3b3JsZCBQVlIgVFYgMjgwMCBSRiAgICAgICAgICAgICAgICAgICAgKGVtMjgyMC9lbTI4NDApCiAgMTMgLT4gVGVycmF0ZWMgUHJvZGlneSBYUyAgICAgICAgICAgICAgICAgICAgICAoZW0yODgwKSAgICAgICAgWzBjY2Q6MDA0N10KLSAxNCAtPiBQaXhlbHZpZXcgUHJvbGluayBQbGF5VFYgVVNCIDIuMCAgICAgICAgIChlbTI4MjAvZW0yODQwKQorIDE0IC0+IFBpeGVsdmlldyBQcm9saW5rIFBsYXlUViBVU0IgMi4wICAgICAgICAgKGVtMjgyMC9lbTI4NDApIFtlYjFhOjI4MjFdCiAgMTUgLT4gVi1HZWFyIFBvY2tldFRWICAgICAgICAgICAgICAgICAgICAgICAgICAoZW0yODAwKQogIDE2IC0+IEhhdXBwYXVnZSBXaW5UViBIVlIgOTUwICAgICAgICAgICAgICAgICAgKGVtMjg4MykgICAgICAgIFsyMDQwOjY1MTMsMjA0MDo2NTE3LDIwNDA6NjUxYiwyMDQwOjY1MWZdCiAgMTcgLT4gUGlubmFjbGUgUENUViBIRCBQcm8gU3RpY2sgICAgICAgICAgICAgICAoZW0yODgwKSAgICAgICAgWzIzMDQ6MDIyN10KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvQ0FSRExJU1Quc2FhNzEzNCBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvQ0FSRExJU1Quc2FhNzEzNAppbmRleCAzOTg2OGFmLi5kYzY3ZWVmIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L0NBUkRMSVNULnNhYTcxMzQKKysrIGIvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9DQVJETElTVC5zYWE3MTM0CkBAIC03Niw3ICs3Niw3IEBACiAgNzUgLT4gQVZlck1lZGlhIEFWZXJUVkhEIE1DRSBBMTgwICAgICAgICAgICAgICBbMTQ2MToxMDQ0XQogIDc2IC0+IFNLTmV0IE1vbnN0ZXJUViBNb2JpbGUgICAgICAgICAgICAgICAgICAgWzExMzE6NGVlOV0KICA3NyAtPiBQaW5uYWNsZSBQQ1RWIDQwaS81MGkvMTEwaSAoc2FhNzEzMykgICAgIFsxMWJkOjAwMmVdCi0gNzggLT4gQVNVU1RlSyBQNzEzMSBEdWFsICAgICAgICAgICAgICAgICAgICAgICBbMTA0Mzo0ODYyLDEwNDM6NDg1N10KKyA3OCAtPiBBU1VTVGVLIFA3MTMxIER1YWwgICAgICAgICAgICAgICAgICAgICAgIFsxMDQzOjQ4NjJdCiAgNzkgLT4gU2VkbmEvTXVjaFRWIFBDIFRWIENhcmRidXMgVFYvUmFkaW8gKElUTzI1IFJldjoyQikKICA4MCAtPiBBU1VTIERpZ2ltYXRyaXggVFYgICAgICAgICAgICAgICAgICAgICAgIFsxMDQzOjAyMTBdCiAgODEgLT4gUGhpbGlwcyBUaWdlciByZWZlcmVuY2UgZGVzaWduICAgICAgICAgICBbMTEzMToyMDE4XQpAQCAtMTQ1LDMgKzE0NSw5IEBACiAxNDQgLT4gQmVob2xkZXIgQmVob2xkVFYgTTYgRXh0cmEgICAgICAgICAgICAgICBbNWFjZTo2MTkzXQogMTQ1IC0+IEFWZXJNZWRpYSBNaW5pUENJIERWQi1UIEh5YnJpZCBNMTAzICAgICAgWzE0NjE6ZjYzNl0KIDE0NiAtPiBBU1VTVGVLIFA3MTMxIEFuYWxvZworMTQ3IC0+IEFzdXMgVGlnZXIgM2luMSAgICAgICAgICAgICAgICAgICAgICAgICAgWzEwNDM6NDg3OF0KKzE0OCAtPiBFbmNvcmUgRU5MVFYtRk0gdjUuMyAgICAgICAgICAgICAgICAgICAgIFsxYTdmOjIwMDhdCisxNDkgLT4gQXZlcm1lZGlhIFBDSSBwdXJlIGFuYWxvZyAoTTEzNUEpICAgICAgICBbMTQ2MTpmMTFkXQorMTUwIC0+IFpvZ2lzIFJlYWwgQW5nZWwgMjIwCisxNTEgLT4gQURTIFRlY2ggSW5zdGFudCBIRFRWICAgICAgICAgICAgICAgICAgICBbMTQyMTowMzgwXQorMTUyIC0+IEFzdXMgVGlnZXIgUmV2OjEuMDAgICAgICAgICAgICAgICAgICAgICAgWzEwNDM6NDg1N10KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvQ0FSRExJU1QudHVuZXIgYi9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L0NBUkRMSVNULnR1bmVyCmluZGV4IDBlMjM5NDYuLjY5MWQyZjMgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvQ0FSRExJU1QudHVuZXIKKysrIGIvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9DQVJETElTVC50dW5lcgpAQCAtNzQsMyArNzQsNSBAQAogdHVuZXI9NzMgLSBTYW1zdW5nIFRDUEcgNjEyMVAzMEEKIHR1bmVyPTc1IC0gUGhpbGlwcyBURUE1NzYxIEZNIFJhZGlvCiB0dW5lcj03NiAtIFhjZWl2ZSA1MDAwIHR1bmVyCit0dW5lcj03NyAtIFRDTCB0dW5lciBNRjAyR0lQLTVOLUUKK3R1bmVyPTc4IC0gUGhpbGlwcyBGTUQxMjE2TUVYIE1LMyBIeWJyaWQgVHVuZXIKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvZ3NwY2EudHh0IGIvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9nc3BjYS50eHQKaW5kZXggOWEzZTRkNy4uMDA0ODE4ZiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9nc3BjYS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9nc3BjYS50eHQKQEAgLTcsNiArNyw3IEBACiB4eHh4CQl2ZW5kOnByb2QKIC0tLS0KIHNwY2E1MDEJCTAwMDA6MDAwMAlNeXN0RnJvbU9yaSBVbmtub3cgQ2FtZXJhCittNTYwMgkJMDQwMjo1NjAyCUFMaSBWaWRlbyBDYW1lcmEgQ29udHJvbGxlcgogc3BjYTUwMQkJMDQwYTowMDAyCUtvZGFrIERWQy0zMjUKIHNwY2E1MDAJCTA0MGE6MDMwMAlLb2RhayBFWjIwMAogemMzeHgJCTA0MWU6MDQxZQlDcmVhdGl2ZSBXZWJDYW0gTGl2ZSEKQEAgLTQyLDYgKzQzLDcgQEAKIHpjM3h4CQkwNDU4OjcwMGMJR2VuaXVzIFZpZGVvQ2FtIFYzCiB6YzN4eAkJMDQ1ODo3MDBmCUdlbml1cyBWaWRlb0NhbSBXZWIgVjIKIHNvbml4agkJMDQ1ODo3MDI1CUdlbml1cyBFeWUgMzExUQorc29uaXhqCQkwNDU4OjcwMmUJR2VuaXVzIFNsaW0gMzEwIE5CCiBzb25peGoJCTA0NWU6MDBmNQlNaWNyb1NvZnQgVlgzMDAwCiBzb25peGoJCTA0NWU6MDBmNwlNaWNyb1NvZnQgVlgxMDAwCiBvdjUxOQkJMDQ1ZTowMjhjCU1pY3JvJG9mdCB4Ym94IGNhbQpAQCAtODEsNyArODMsNyBAQAogc3BjYTU2MQkJMDQ2ZDowOTJjCUxvZ2l0ZWNoIFFDIGNoYXQgRWxjaDIKIHNwY2E1NjEJCTA0NmQ6MDkyZAlMb2dpdGVjaCBRQyBFbGNoMgogc3BjYTU2MQkJMDQ2ZDowOTJlCUxvZ2l0ZWNoIFFDIEVsY2gyCi1zcGNhNTYxCQkwNDZkOjA5MmYJTG9naXRlY2ggUUMgRWxjaDIKK3NwY2E1NjEJCTA0NmQ6MDkyZglMb2dpdGVjaCAgUXVpY2tDYW0gRXhwcmVzcyBQbHVzCiBzdW5wbHVzCQkwNDZkOjA5NjAJTG9naXRlY2ggQ2xpY2tTbWFydCA0MjAKIHN1bnBsdXMJCTA0NzE6MDMyMglQaGlsaXBzIERNVkMxMzAwSwogemMzeHgJCTA0NzE6MDMyNQlQaGlsaXBzIFNQQyAyMDAgTkMKQEAgLTk2LDYgKzk4LDI5IEBACiBzdW5wbHVzCQkwNGE1OjMwMDgJQmVucSBEQyAxNTAwCiBzdW5wbHVzCQkwNGE1OjMwMGEJQmVucSBEQyAzNDEwCiBzcGNhNTAwCQkwNGE1OjMwMGMJQmVucSBEQyAxMDE2CitmaW5lcGl4CQkwNGNiOjAxMDQJRnVqaWZpbG0gRmluZVBpeCA0ODAwCitmaW5lcGl4CQkwNGNiOjAxMDkJRnVqaWZpbG0gRmluZVBpeCBBMjAyCitmaW5lcGl4CQkwNGNiOjAxMGIJRnVqaWZpbG0gRmluZVBpeCBBMjAzCitmaW5lcGl4CQkwNGNiOjAxMGYJRnVqaWZpbG0gRmluZVBpeCBBMjA0CitmaW5lcGl4CQkwNGNiOjAxMTEJRnVqaWZpbG0gRmluZVBpeCBBMjA1CitmaW5lcGl4CQkwNGNiOjAxMTMJRnVqaWZpbG0gRmluZVBpeCBBMjEwCitmaW5lcGl4CQkwNGNiOjAxMTUJRnVqaWZpbG0gRmluZVBpeCBBMzAzCitmaW5lcGl4CQkwNGNiOjAxMTcJRnVqaWZpbG0gRmluZVBpeCBBMzEwCitmaW5lcGl4CQkwNGNiOjAxMTkJRnVqaWZpbG0gRmluZVBpeCBGNDAxCitmaW5lcGl4CQkwNGNiOjAxMWIJRnVqaWZpbG0gRmluZVBpeCBGNDAyCitmaW5lcGl4CQkwNGNiOjAxMWQJRnVqaWZpbG0gRmluZVBpeCBGNDEwCitmaW5lcGl4CQkwNGNiOjAxMjEJRnVqaWZpbG0gRmluZVBpeCBGNjAxCitmaW5lcGl4CQkwNGNiOjAxMjMJRnVqaWZpbG0gRmluZVBpeCBGNzAwCitmaW5lcGl4CQkwNGNiOjAxMjUJRnVqaWZpbG0gRmluZVBpeCBNNjAzCitmaW5lcGl4CQkwNGNiOjAxMjcJRnVqaWZpbG0gRmluZVBpeCBTMzAwCitmaW5lcGl4CQkwNGNiOjAxMjkJRnVqaWZpbG0gRmluZVBpeCBTMzA0CitmaW5lcGl4CQkwNGNiOjAxMmIJRnVqaWZpbG0gRmluZVBpeCBTNTAwCitmaW5lcGl4CQkwNGNiOjAxMmQJRnVqaWZpbG0gRmluZVBpeCBTNjAyCitmaW5lcGl4CQkwNGNiOjAxMmYJRnVqaWZpbG0gRmluZVBpeCBTNzAwCitmaW5lcGl4CQkwNGNiOjAxMzEJRnVqaWZpbG0gRmluZVBpeCB1bmtub3duIG1vZGVsCitmaW5lcGl4CQkwNGNiOjAxM2IJRnVqaWZpbG0gRmluZVBpeCB1bmtub3duIG1vZGVsCitmaW5lcGl4CQkwNGNiOjAxM2QJRnVqaWZpbG0gRmluZVBpeCB1bmtub3duIG1vZGVsCitmaW5lcGl4CQkwNGNiOjAxM2YJRnVqaWZpbG0gRmluZVBpeCBGNDIwCiBzdW5wbHVzCQkwNGYxOjEwMDEJSlZDIEdDIEE1MAogc3BjYTU2MQkJMDRmYzowNTYxCUZsZXhjYW0gMTAwCiBzdW5wbHVzCQkwNGZjOjUwMGMJU3VucGx1cyBDQTUwMEMKQEAgLTE4MSw2ICsyMDYsNyBAQAogcGFjMjA3CQkwOTNhOjI0NzAJR2VuaXVzIEdGMTEyCiBwYWMyMDcJCTA5M2E6MjQ3MQlHZW5pdXMgVmlkZW9DYW0gZ2UxMTEKIHBhYzIwNwkJMDkzYToyNDcyCUdlbml1cyBWaWRlb0NhbSBnZTExMAorcGFjMjA3CQkwOTNhOjI0NzYJR2VuaXVzIGUtTWVzc2VuZ2VyIDExMgogcGFjNzMxMQkJMDkzYToyNjAwCVBBQzczMTEgVHlwaG9vbgogcGFjNzMxMQkJMDkzYToyNjAxCVBoaWxpcHMgU1BDIDYxMCBOQwogcGFjNzMxMQkJMDkzYToyNjAzCVBBQzczMTIKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvbTU2MDIudHh0IGIvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9tNTYwMi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDQ1MGFiMQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvbTU2MDIudHh0CkBAIC0wLDAgKzEsMTIgQEAKK1RoaXMgZG9jdW1lbnQgZGVzY3JpYmVzIHRoZSBBTGkgbTU2MDIgYnJpZGdlIGNvbm5lY3RlZAordG8gdGhlIGZvbGxvd2luZyBzdXBwb3J0ZWQgc2Vuc29yczoKK09tbmlWaXNpb24gT1Y5NjUwLAorU2Ftc3VuZyBzNWs4M2EsCitTYW1zdW5nIHM1azRhYSwKK01pY3JvbiBtdDltMTExLAorUGl4ZWwgcGx1cyBQTzEwMzAKKworVGhpcyBkcml2ZXIgbWltaWNzIHRoZSB3aW5kb3dzIGRyaXZlcnMsIHdoaWNoIGhhdmUgYSBicmFpbmRlYWQgaW1wbGVtZW50YXRpb24gc2VuZGluZyBiYXllci1lbmNvZGVkIGZyYW1lcyBhdCBWR0EgcmVzb2x1dGlvbi4KK0luIGEgcGVyZmVjdCB3b3JsZCB3ZSBzaG91bGQgYmUgYWJsZSB0byByZXByb2dyYW0gdGhlIG01NjAyIGFuZCB0aGUgY29ubmVjdGVkIHNlbnNvciBpbiBoYXJkd2FyZSBpbnN0ZWFkLCBzdXBwb3J0aW5nIGEgcmFuZ2Ugb2YgcmVzb2x1dGlvbnMgYW5kIHBpeGVsZm9ybWF0cworCitBbnl3YXksIGhhdmUgZnVuIGFuZCBwbGVhc2UgcmVwb3J0IGFueSBidWdzIHRvIG01NjB4LWRyaXZlci1kZXZlbEBsaXN0cy5zb3VyY2Vmb3JnZS5uZXQKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvc29jLWNhbWVyYS50eHQgYi9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L3NvYy1jYW1lcmEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3OGVmM2MKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L3NvYy1jYW1lcmEudHh0CkBAIC0wLDAgKzEsMTIwIEBACisJCQlTb2MtQ2FtZXJhIFN1YnN5c3RlbQorCQkJPT09PT09PT09PT09PT09PT09PT0KKworVGVybWlub2xvZ3kKKy0tLS0tLS0tLS0tCisKK1RoZSBmb2xsb3dpbmcgdGVybXMgYXJlIHVzZWQgaW4gdGhpcyBkb2N1bWVudDoKKyAtIGNhbWVyYSAvIGNhbWVyYSBkZXZpY2UgLyBjYW1lcmEgc2Vuc29yIC0gYSB2aWRlby1jYW1lcmEgc2Vuc29yIGNoaXAsIGNhcGFibGUKKyAgIG9mIGNvbm5lY3RpbmcgdG8gYSB2YXJpZXR5IG9mIHN5c3RlbXMgYW5kIGludGVyZmFjZXMsIHR5cGljYWxseSB1c2VzIGkyYyBmb3IKKyAgIGNvbnRyb2wgYW5kIGNvbmZpZ3VyYXRpb24sIGFuZCBhIHBhcmFsbGVsIG9yIGEgc2VyaWFsIGJ1cyBmb3IgZGF0YS4KKyAtIGNhbWVyYSBob3N0IC0gYW4gaW50ZXJmYWNlLCB0byB3aGljaCBhIGNhbWVyYSBpcyBjb25uZWN0ZWQuIFR5cGljYWxseSBhCisgICBzcGVjaWFsaXNlZCBpbnRlcmZhY2UsIHByZXNlbnQgb24gbWFueSBTb0NzLCBlLmcuLCBQWEEyN3ggYW5kIFBYQTN4eCwgU3VwZXJILAorICAgQVZSMzIsIGkuTVgyNywgaS5NWDMxLgorIC0gY2FtZXJhIGhvc3QgYnVzIC0gYSBjb25uZWN0aW9uIGJldHdlZW4gYSBjYW1lcmEgaG9zdCBhbmQgYSBjYW1lcmEuIENhbiBiZQorICAgcGFyYWxsZWwgb3Igc2VyaWFsLCBjb25zaXN0cyBvZiBkYXRhIGFuZCBjb250cm9sIGxpbmVzLCBlLmcuLCBjbG9jaywgdmVydGljYWwKKyAgIGFuZCBob3Jpem9udGFsIHN5bmNocm9uaXphdGlvbiBzaWduYWxzLgorCitQdXJwb3NlIG9mIHRoZSBzb2MtY2FtZXJhIHN1YnN5c3RlbQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIHNvYy1jYW1lcmEgc3Vic3lzdGVtIHByb3ZpZGVzIGEgdW5pZmllZCBBUEkgYmV0d2VlbiBjYW1lcmEgaG9zdCBkcml2ZXJzIGFuZAorY2FtZXJhIHNlbnNvciBkcml2ZXJzLiBJdCBpbXBsZW1lbnRzIGEgVjRMMiBpbnRlcmZhY2UgdG8gdGhlIHVzZXIsIGN1cnJlbnRseQorb25seSB0aGUgbW1hcCBtZXRob2QgaXMgc3VwcG9ydGVkLgorCitUaGlzIHN1YnN5c3RlbSBoYXMgYmVlbiB3cml0dGVuIHRvIGNvbm5lY3QgZHJpdmVycyBmb3IgU3lzdGVtLW9uLUNoaXAgKFNvQykKK3ZpZGVvIGNhcHR1cmUgaW50ZXJmYWNlcyB3aXRoIGRyaXZlcnMgZm9yIENNT1MgY2FtZXJhIHNlbnNvciBjaGlwcyB0byBlbmFibGUKK3RoZSByZXVzZSBvZiBzZW5zb3IgZHJpdmVycyB3aXRoIHZhcmlvdXMgaG9zdHMuIFRoZSBzdWJzeXN0ZW0gaGFzIGJlZW4gZGVzaWduZWQKK3RvIHN1cHBvcnQgbXVsdGlwbGUgY2FtZXJhIGhvc3QgaW50ZXJmYWNlcyBhbmQgbXVsdGlwbGUgY2FtZXJhcyBwZXIgaW50ZXJmYWNlLAorYWx0aG91Z2ggbW9zdCBhcHBsaWNhdGlvbnMgaGF2ZSBvbmx5IG9uZSBjYW1lcmEgc2Vuc29yLgorCitFeGlzdGluZyBkcml2ZXJzCistLS0tLS0tLS0tLS0tLS0tCisKK0FzIG9mIDIuNi4yNy1yYzQgdGhlcmUgYXJlIHR3byBob3N0IGRyaXZlcnMgaW4gdGhlIG1haW5saW5lOiBweGFfY2FtZXJhLmMgZm9yCitQWEEyN3ggU29DcyBhbmQgc2hfbW9iaWxlX2NldV9jYW1lcmEuYyBmb3IgU3VwZXJIIFNvQ3MsIGFuZCBmb3VyIHNlbnNvciBkcml2ZXJzOgorbXQ5bTAwMS5jLCBtdDltMTExLmMsIG10OXYwMjIuYyBhbmQgYSBnZW5lcmljIHNvY19jYW1lcmFfcGxhdGZvcm0uYyBkcml2ZXIuIFRoaXMKK2xpc3QgaXMgbm90IHN1cHBvc2VkIHRvIGJlIHVwZGF0ZWQsIGxvb2sgZm9yIG1vcmUgZXhhbXBsZXMgaW4geW91ciB0cmVlLgorCitDYW1lcmEgaG9zdCBBUEkKKy0tLS0tLS0tLS0tLS0tLQorCitBIGhvc3QgY2FtZXJhIGRyaXZlciBpcyByZWdpc3RlcmVkIHVzaW5nIHRoZQorCitzb2NfY2FtZXJhX2hvc3RfcmVnaXN0ZXIoc3RydWN0IHNvY19jYW1lcmFfaG9zdCAqKTsKKworZnVuY3Rpb24uIFRoZSBob3N0IG9iamVjdCBjYW4gYmUgaW5pdGlhbGl6ZWQgYXMgZm9sbG93czoKKworc3RhdGljIHN0cnVjdCBzb2NfY2FtZXJhX2hvc3QgcHhhX3NvY19jYW1lcmFfaG9zdCA9IHsKKwkuZHJ2X25hbWUJPSBQWEFfQ0FNX0RSVl9OQU1FLAorCS5vcHMJCT0gJnB4YV9zb2NfY2FtZXJhX2hvc3Rfb3BzLAorfTsKKworQWxsIGNhbWVyYSBob3N0IG1ldGhvZHMgYXJlIHBhc3NlZCBpbiBhIHN0cnVjdCBzb2NfY2FtZXJhX2hvc3Rfb3BzOgorCitzdGF0aWMgc3RydWN0IHNvY19jYW1lcmFfaG9zdF9vcHMgcHhhX3NvY19jYW1lcmFfaG9zdF9vcHMgPSB7CisJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCS5hZGQJCT0gcHhhX2NhbWVyYV9hZGRfZGV2aWNlLAorCS5yZW1vdmUJCT0gcHhhX2NhbWVyYV9yZW1vdmVfZGV2aWNlLAorCS5zdXNwZW5kCT0gcHhhX2NhbWVyYV9zdXNwZW5kLAorCS5yZXN1bWUJCT0gcHhhX2NhbWVyYV9yZXN1bWUsCisJLnNldF9mbXRfY2FwCT0gcHhhX2NhbWVyYV9zZXRfZm10X2NhcCwKKwkudHJ5X2ZtdF9jYXAJPSBweGFfY2FtZXJhX3RyeV9mbXRfY2FwLAorCS5pbml0X3ZpZGVvYnVmCT0gcHhhX2NhbWVyYV9pbml0X3ZpZGVvYnVmLAorCS5yZXFidWZzCT0gcHhhX2NhbWVyYV9yZXFidWZzLAorCS5wb2xsCQk9IHB4YV9jYW1lcmFfcG9sbCwKKwkucXVlcnljYXAJPSBweGFfY2FtZXJhX3F1ZXJ5Y2FwLAorCS50cnlfYnVzX3BhcmFtCT0gcHhhX2NhbWVyYV90cnlfYnVzX3BhcmFtLAorCS5zZXRfYnVzX3BhcmFtCT0gcHhhX2NhbWVyYV9zZXRfYnVzX3BhcmFtLAorfTsKKworLmFkZCBhbmQgLnJlbW92ZSBtZXRob2RzIGFyZSBjYWxsZWQgd2hlbiBhIHNlbnNvciBpcyBhdHRhY2hlZCB0byBvciBkZXRhY2hlZAorZnJvbSB0aGUgaG9zdCwgYXBhcnQgZnJvbSBwZXJmb3JtaW5nIGhvc3QtaW50ZXJuYWwgdGFza3MgdGhleSBzaGFsbCBhbHNvIGNhbGwKK3NlbnNvciBkcml2ZXIncyAuaW5pdCBhbmQgLnJlbGVhc2UgbWV0aG9kcyByZXNwZWN0aXZlbHkuIC5zdXNwZW5kIGFuZCAucmVzdW1lCittZXRob2RzIGltcGxlbWVudCBob3N0J3MgcG93ZXItbWFuYWdlbWVudCBmdW5jdGlvbmFsaXR5IGFuZCBpdHMgdGhlaXIKK3Jlc3BvbnNpYmlsaXR5IHRvIGNhbGwgcmVzcGVjdGl2ZSBzZW5zb3IncyBtZXRob2RzLiAudHJ5X2J1c19wYXJhbSBhbmQKKy5zZXRfYnVzX3BhcmFtIGFyZSB1c2VkIHRvIG5lZ290aWF0ZSBwaHlzaWNhbCBjb25uZWN0aW9uIHBhcmFtZXRlcnMgYmV0d2VlbiB0aGUKK2hvc3QgYW5kIHRoZSBzZW5zb3IuIC5pbml0X3ZpZGVvYnVmIGlzIGNhbGxlZCBieSBzb2MtY2FtZXJhIGNvcmUgd2hlbiBhCit2aWRlby1kZXZpY2UgaXMgb3BlbmVkLCBmdXJ0aGVyIHZpZGVvLWJ1ZmZlciBtYW5hZ2VtZW50IGlzIGltcGxlbWVudGVkIGNvbXBsZXRlbHkKK2J5IHRoZSBzcGVjaWZpYyBjYW1lcmEgaG9zdCBkcml2ZXIuIFRoZSByZXN0IG9mIHRoZSBtZXRob2RzIGFyZSBjYWxsZWQgZnJvbQorcmVzcGVjdGl2ZSBWNEwyIG9wZXJhdGlvbnMuCisKK0NhbWVyYSBBUEkKKy0tLS0tLS0tLS0KKworU2Vuc29yIGRyaXZlcnMgY2FuIHVzZSBzdHJ1Y3Qgc29jX2NhbWVyYV9saW5rLCB0eXBpY2FsbHkgcHJvdmlkZWQgYnkgdGhlCitwbGF0Zm9ybSwgYW5kIHVzZWQgdG8gc3BlY2lmeSB0byB3aGljaCBjYW1lcmEgaG9zdCBidXMgdGhlIHNlbnNvciBpcyBjb25uZWN0ZWQsCithbmQgYXJiaXRyYXJpbHkgcHJvdmlkZSBwbGF0Zm9ybSAucG93ZXIgYW5kIC5yZXNldCBtZXRob2RzIGZvciB0aGUgY2FtZXJhLgorc29jX2NhbWVyYV9kZXZpY2VfcmVnaXN0ZXIoKSBhbmQgc29jX2NhbWVyYV9kZXZpY2VfdW5yZWdpc3RlcigpIGZ1bmN0aW9ucyBhcmUKK3VzZWQgdG8gYWRkIGEgc2Vuc29yIGRyaXZlciB0byBvciByZW1vdmUgb25lIGZyb20gdGhlIHN5c3RlbS4gVGhlIHJlZ2lzdHJhdGlvbgorZnVuY3Rpb24gdGFrZXMgYSBwb2ludGVyIHRvIHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSBhcyB0aGUgb25seSBwYXJhbWV0ZXIuCitUaGlzIHN0cnVjdCBjYW4gYmUgaW5pdGlhbGl6ZWQgYXMgZm9sbG93czoKKworCS8qIGxpbmsgdG8gZHJpdmVyIG9wZXJhdGlvbnMgKi8KKwlpY2QtPm9wcwk9ICZtdDltMDAxX29wczsKKwkvKiBsaW5rIHRvIHRoZSB1bmRlcmx5aW5nIHBoeXNpY2FsIChlLmcuLCBpMmMpIGRldmljZSAqLworCWljZC0+Y29udHJvbAk9ICZjbGllbnQtPmRldjsKKwkvKiB3aW5kb3cgZ2VvbWV0cnkgKi8KKwlpY2QtPnhfbWluCT0gMjA7CisJaWNkLT55X21pbgk9IDEyOworCWljZC0+eF9jdXJyZW50CT0gMjA7CisJaWNkLT55X2N1cnJlbnQJPSAxMjsKKwlpY2QtPndpZHRoX21pbgk9IDQ4OworCWljZC0+d2lkdGhfbWF4CT0gMTI4MDsKKwlpY2QtPmhlaWdodF9taW4JPSAzMjsKKwlpY2QtPmhlaWdodF9tYXgJPSAxMDI0OworCWljZC0+eV9za2lwX3RvcAk9IDE7CisJLyogY2FtZXJhIGJ1cyBJRCwgdHlwaWNhbGx5IG9idGFpbmVkIGZyb20gcGxhdGZvcm0gZGF0YSAqLworCWljZC0+aWZhY2UJPSBpY2wtPmJ1c19pZDsKKworc3RydWN0IHNvY19jYW1lcmFfb3BzIHByb3ZpZGVzIC5wcm9iZSBhbmQgLnJlbW92ZSBtZXRob2RzLCB3aGljaCBhcmUgY2FsbGVkIGJ5Cit0aGUgc29jLWNhbWVyYSBjb3JlLCB3aGVuIGEgY2FtZXJhIGlzIG1hdGNoZWQgYWdhaW5zdCBvciByZW1vdmVkIGZyb20gYSBjYW1lcmEKK2hvc3QgYnVzLCAuaW5pdCwgLnJlbGVhc2UsIC5zdXNwZW5kLCBhbmQgLnJlc3VtZSBhcmUgY2FsbGVkIGZyb20gdGhlIGNhbWVyYSBob3N0Citkcml2ZXIgYXMgZGlzY3Vzc2VkIGFib3ZlLiBPdGhlciBtZW1iZXJzIG9mIHRoaXMgc3RydWN0IHByb3ZpZGUgcmVzcGVjdGl2ZSBWNEwyCitmdW5jdGlvbmFsaXR5LgorCitzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgYWxzbyBsaW5rcyB0byBhbiBhcnJheSBvZiBzdHJ1Y3Qgc29jX2NhbWVyYV9kYXRhX2Zvcm1hdCwKK2xpc3RpbmcgcGl4ZWwgZm9ybWF0cywgc3VwcG9ydGVkIGJ5IHRoZSBjYW1lcmEuCisKKy0tCitBdXRob3I6IEd1ZW5uYWRpIExpYWtob3ZldHNraSA8Zy5saWFraG92ZXRza2lAZ214LmRlPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi92bS91bmV2aWN0YWJsZS1scnUudHh0IGIvRG9jdW1lbnRhdGlvbi92bS91bmV2aWN0YWJsZS1scnUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEyNWVlZDUKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3ZtL3VuZXZpY3RhYmxlLWxydS50eHQKQEAgLTAsMCArMSw2MTUgQEAKKworVGhpcyBkb2N1bWVudCBkZXNjcmliZXMgdGhlIExpbnV4IG1lbW9yeSBtYW5hZ2VtZW50ICJVbmV2aWN0YWJsZSBMUlUiCitpbmZyYXN0cnVjdHVyZSBhbmQgdGhlIHVzZSBvZiB0aGlzIGluZnJhc3RydWN0dXJlIHRvIG1hbmFnZSBzZXZlcmFsIHR5cGVzCitvZiAidW5ldmljdGFibGUiIHBhZ2VzLiAgVGhlIGRvY3VtZW50IGF0dGVtcHRzIHRvIHByb3ZpZGUgdGhlIG92ZXJhbGwKK3JhdGlvbmFsZSBiZWhpbmQgdGhpcyBtZWNoYW5pc20gYW5kIHRoZSByYXRpb25hbGUgZm9yIHNvbWUgb2YgdGhlIGRlc2lnbgorZGVjaXNpb25zIHRoYXQgZHJvdmUgdGhlIGltcGxlbWVudGF0aW9uLiAgVGhlIGxhdHRlciBkZXNpZ24gcmF0aW9uYWxlIGlzCitkaXNjdXNzZWQgaW4gdGhlIGNvbnRleHQgb2YgYW4gaW1wbGVtZW50YXRpb24gZGVzY3JpcHRpb24uICBBZG1pdHRlZGx5LCBvbmUKK2NhbiBvYnRhaW4gdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMtLXRoZSAid2hhdCBkb2VzIGl0IGRvPyItLWJ5IHJlYWRpbmcgdGhlCitjb2RlLiAgT25lIGhvcGVzIHRoYXQgdGhlIGRlc2NyaXB0aW9ucyBiZWxvdyBhZGQgdmFsdWUgYnkgcHJvdmlkZSB0aGUgYW5zd2VyCit0byAid2h5IGRvZXMgaXQgZG8gdGhhdD8iLgorCitVbmV2aWN0YWJsZSBMUlUgSW5mcmFzdHJ1Y3R1cmU6CisKK1RoZSBVbmV2aWN0YWJsZSBMUlUgYWRkcyBhbiBhZGRpdGlvbmFsIExSVSBsaXN0IHRvIHRyYWNrIHVuZXZpY3RhYmxlIHBhZ2VzCithbmQgdG8gaGlkZSB0aGVzZSBwYWdlcyBmcm9tIHZtc2Nhbi4gIFRoaXMgbWVjaGFuaXNtIGlzIGJhc2VkIG9uIGEgcGF0Y2ggYnkKK0xhcnJ5IFdvb2RtYW4gb2YgUmVkIEhhdCB0byBhZGRyZXNzIHNldmVyYWwgc2NhbGFiaWxpdHkgcHJvYmxlbXMgd2l0aCBwYWdlCityZWNsYWltIGluIExpbnV4LiAgVGhlIHByb2JsZW1zIGhhdmUgYmVlbiBvYnNlcnZlZCBhdCBjdXN0b21lciBzaXRlcyBvbiBsYXJnZQorbWVtb3J5IHg4Nl82NCBzeXN0ZW1zLiAgRm9yIGV4YW1wbGUsIGEgbm9uLW51bWFsIHg4Nl82NCBwbGF0Zm9ybSB3aXRoIDEyOEdCCitvZiBtYWluIG1lbW9yeSB3aWxsIGhhdmUgb3ZlciAzMiBtaWxsaW9uIDRrIHBhZ2VzIGluIGEgc2luZ2xlIHpvbmUuICBXaGVuIGEKK2xhcmdlIGZyYWN0aW9uIG9mIHRoZXNlIHBhZ2VzIGFyZSBub3QgZXZpY3RhYmxlIGZvciBhbnkgcmVhc29uIFtzZWUgYmVsb3ddLAordm1zY2FuIHdpbGwgc3BlbmQgYSBsb3Qgb2YgdGltZSBzY2FubmluZyB0aGUgTFJVIGxpc3RzIGxvb2tpbmcgZm9yIHRoZSBzbWFsbAorZnJhY3Rpb24gb2YgcGFnZXMgdGhhdCBhcmUgZXZpY3RhYmxlLiAgVGhpcyBjYW4gcmVzdWx0IGluIGEgc2l0dWF0aW9uIHdoZXJlCithbGwgY3B1cyBhcmUgc3BlbmRpbmcgMTAwJSBvZiB0aGVpciB0aW1lIGluIHZtc2NhbiBmb3IgaG91cnMgb3IgZGF5cyBvbiBlbmQsCit3aXRoIHRoZSBzeXN0ZW0gY29tcGxldGVseSB1bnJlc3BvbnNpdmUuCisKK1RoZSBVbmV2aWN0YWJsZSBMUlUgaW5mcmFzdHJ1Y3R1cmUgYWRkcmVzc2VzIHRoZSBmb2xsb3dpbmcgY2xhc3NlcyBvZgordW5ldmljdGFibGUgcGFnZXM6CisKKysgcGFnZSBvd25lZCBieSByYW1mcworKyBwYWdlIG1hcHBlZCBpbnRvIFNITV9MT0NLZWQgc2hhcmVkIG1lbW9yeSByZWdpb25zCisrIHBhZ2UgbWFwcGVkIGludG8gVk1fTE9DS0VEIFttbG9jaygpZWRdIHZtYXMKKworVGhlIGluZnJhc3RydWN0dXJlIG1pZ2h0IGJlIGFibGUgdG8gaGFuZGxlIG90aGVyIGNvbmRpdGlvbnMgdGhhdCBtYWtlIHBhZ2VzCit1bmV2aWN0YWJsZSwgZWl0aGVyIGJ5IGRlZmluaXRpb24gb3IgYnkgY2lyY3Vtc3RhbmNlLCBpbiB0aGUgZnV0dXJlLgorCisKK1RoZSBVbmV2aWN0YWJsZSBMUlUgTGlzdAorCitUaGUgVW5ldmljdGFibGUgTFJVIGluZnJhc3RydWN0dXJlIGNvbnNpc3RzIG9mIGFuIGFkZGl0aW9uYWwsIHBlci16b25lLCBMUlUgbGlzdAorY2FsbGVkIHRoZSAidW5ldmljdGFibGUiIGxpc3QgYW5kIGFuIGFzc29jaWF0ZWQgcGFnZSBmbGFnLCBQR191bmV2aWN0YWJsZSwgdG8KK2luZGljYXRlIHRoYXQgdGhlIHBhZ2UgaXMgYmVpbmcgbWFuYWdlZCBvbiB0aGUgdW5ldmljdGFibGUgbGlzdC4gIFRoZQorUEdfdW5ldmljdGFibGUgZmxhZyBpcyBhbmFsb2dvdXMgdG8sIGFuZCBtdXR1YWxseSBleGNsdXNpdmUgd2l0aCwgdGhlIFBHX2FjdGl2ZQorZmxhZyBpbiB0aGF0IGl0IGluZGljYXRlcyBvbiB3aGljaCBMUlUgbGlzdCBhIHBhZ2UgcmVzaWRlcyB3aGVuIFBHX2xydSBpcyBzZXQuCitUaGUgdW5ldmljdGFibGUgTFJVIGxpc3QgaXMgc291cmNlIGNvbmZpZ3VyYWJsZSBiYXNlZCBvbiB0aGUgVU5FVklDVEFCTEVfTFJVCitLY29uZmlnIG9wdGlvbi4KKworVGhlIFVuZXZpY3RhYmxlIExSVSBpbmZyYXN0cnVjdHVyZSBtYWludGFpbnMgdW5ldmljdGFibGUgcGFnZXMgb24gYW4gYWRkaXRpb25hbAorTFJVIGxpc3QgZm9yIGEgZmV3IHJlYXNvbnM6CisKKzEpIFdlIGdldCB0byAidHJlYXQgdW5ldmljdGFibGUgcGFnZXMganVzdCBsaWtlIHdlIHRyZWF0IG90aGVyIHBhZ2VzIGluIHRoZQorICAgc3lzdGVtLCB3aGljaCBtZWFucyB3ZSBnZXQgdG8gdXNlIHRoZSBzYW1lIGNvZGUgdG8gbWFuaXB1bGF0ZSB0aGVtLCB0aGUKKyAgIHNhbWUgY29kZSB0byBpc29sYXRlIHRoZW0gKGZvciBtaWdyYXRlLCBldGMuKSwgdGhlIHNhbWUgY29kZSB0byBrZWVwIHRyYWNrCisgICBvZiB0aGUgc3RhdGlzdGljcywgZXRjLi4uIiBbUmlrIHZhbiBSaWVsXQorCisyKSBXZSB3YW50IHRvIGJlIGFibGUgdG8gbWlncmF0ZSB1bmV2aWN0YWJsZSBwYWdlcyBiZXR3ZWVuIG5vZGVzLS1mb3IgbWVtb3J5CisgICBkZWZyYWdtZW50YXRpb24sIHdvcmtsb2FkIG1hbmFnZW1lbnQgYW5kIG1lbW9yeSBob3RwbHVnLiAgVGhlIGxpbnV4IGtlcm5lbAorICAgY2FuIG9ubHkgbWlncmF0ZSBwYWdlcyB0aGF0IGl0IGNhbiBzdWNjZXNzZnVsbHkgaXNvbGF0ZSBmcm9tIHRoZSBscnUgbGlzdHMuCisgICBJZiB3ZSB3ZXJlIHRvIG1haW50YWluIHBhZ2VzIGVsc2V3aXNlIHRoYW4gb24gYW4gbHJ1LWxpa2UgbGlzdCwgd2hlcmUgdGhleQorICAgY2FuIGJlIGZvdW5kIGJ5IGlzb2xhdGVfbHJ1X3BhZ2UoKSwgd2Ugd291bGQgcHJldmVudCB0aGVpciBtaWdyYXRpb24sIHVubGVzcworICAgd2UgcmV3b3JrZWQgbWlncmF0aW9uIGNvZGUgdG8gZmluZCB0aGUgdW5ldmljdGFibGUgcGFnZXMuCisKKworVGhlIHVuZXZpY3RhYmxlIExSVSBsaXN0IGRvZXMgbm90IGRpZmZlcmVudGlhdGUgYmV0d2VlbiBmaWxlIGJhY2tlZCBhbmQgc3dhcAorYmFja2VkIFthbm9uXSBwYWdlcy4gIFRoaXMgZGlmZmVyZW50aWF0aW9uIGlzIG9ubHkgaW1wb3J0YW50IHdoaWxlIHRoZSBwYWdlcworYXJlLCBpbiBmYWN0LCBldmljdGFibGUuCisKK1RoZSB1bmV2aWN0YWJsZSBMUlUgbGlzdCBiZW5lZml0cyBmcm9tIHRoZSAiYXJyYXlpZmljYXRpb24iIG9mIHRoZSBwZXItem9uZQorTFJVIGxpc3RzIGFuZCBzdGF0aXN0aWNzIG9yaWdpbmFsbHkgcHJvcG9zZWQgYW5kIHBvc3RlZCBieSBDaHJpc3RvcGggTGFtZXRlci4KKworVGhlIHVuZXZpY3RhYmxlIGxpc3QgZG9lcyBub3QgdXNlIHRoZSBscnUgcGFnZXZlYyBtZWNoYW5pc20uIFJhdGhlciwKK3VuZXZpY3RhYmxlIHBhZ2VzIGFyZSBwbGFjZWQgZGlyZWN0bHkgb24gdGhlIHBhZ2UncyB6b25lJ3MgdW5ldmljdGFibGUKK2xpc3QgdW5kZXIgdGhlIHpvbmUgbHJ1X2xvY2suICBUaGUgcmVhc29uIGZvciB0aGlzIGlzIHRvIHByZXZlbnQgc3RyYW5kaW5nCitvZiBwYWdlcyBvbiB0aGUgdW5ldmljdGFibGUgbGlzdCB3aGVuIG9uZSB0YXNrIGhhcyB0aGUgcGFnZSBpc29sYXRlZCBmcm9tIHRoZQorbHJ1IGFuZCBvdGhlciB0YXNrcyBhcmUgY2hhbmdpbmcgdGhlICJldmljdGFiaWxpdHkiIHN0YXRlIG9mIHRoZSBwYWdlLgorCisKK1VuZXZpY3RhYmxlIExSVSBhbmQgTWVtb3J5IENvbnRyb2xsZXIgSW50ZXJhY3Rpb24KKworVGhlIG1lbW9yeSBjb250cm9sbGVyIGRhdGEgc3RydWN0dXJlIGF1dG9tYXRpY2FsbHkgZ2V0cyBhIHBlciB6b25lIHVuZXZpY3RhYmxlCitscnUgbGlzdCBhcyBhIHJlc3VsdCBvZiB0aGUgImFycmF5aWZpY2F0aW9uIiBvZiB0aGUgcGVyLXpvbmUgTFJVIGxpc3RzLiAgVGhlCittZW1vcnkgY29udHJvbGxlciB0cmFja3MgdGhlIG1vdmVtZW50IG9mIHBhZ2VzIHRvIGFuZCBmcm9tIHRoZSB1bmV2aWN0YWJsZSBsaXN0LgorV2hlbiBhIG1lbW9yeSBjb250cm9sIGdyb3VwIGNvbWVzIHVuZGVyIG1lbW9yeSBwcmVzc3VyZSwgdGhlIGNvbnRyb2xsZXIgd2lsbAorbm90IGF0dGVtcHQgdG8gcmVjbGFpbSBwYWdlcyBvbiB0aGUgdW5ldmljdGFibGUgbGlzdC4gIFRoaXMgaGFzIGEgY291cGxlIG9mCitlZmZlY3RzLiAgQmVjYXVzZSB0aGUgcGFnZXMgYXJlICJoaWRkZW4iIGZyb20gcmVjbGFpbSBvbiB0aGUgdW5ldmljdGFibGUgbGlzdCwKK3RoZSByZWNsYWltIHByb2Nlc3MgY2FuIGJlIG1vcmUgZWZmaWNpZW50LCBkZWFsaW5nIG9ubHkgd2l0aCBwYWdlcyB0aGF0IGhhdmUKK2EgY2hhbmNlIG9mIGJlaW5nIHJlY2xhaW1lZC4gIE9uIHRoZSBvdGhlciBoYW5kLCBpZiB0b28gbWFueSBvZiB0aGUgcGFnZXMKK2NoYXJnZWQgdG8gdGhlIGNvbnRyb2wgZ3JvdXAgYXJlIHVuZXZpY3RhYmxlLCB0aGUgZXZpY3RhYmxlIHBvcnRpb24gb2YgdGhlCit3b3JraW5nIHNldCBvZiB0aGUgdGFza3MgaW4gdGhlIGNvbnRyb2wgZ3JvdXAgbWF5IG5vdCBmaXQgaW50byB0aGUgYXZhaWxhYmxlCittZW1vcnkuICBUaGlzIGNhbiBjYXVzZSB0aGUgY29udHJvbCBncm91cCB0byB0aHJhc2ggb3IgdG8gb29tLWtpbGwgdGFza3MuCisKKworVW5ldmljdGFibGUgTFJVOiAgRGV0ZWN0aW5nIFVuZXZpY3RhYmxlIFBhZ2VzCisKK1RoZSBmdW5jdGlvbiBwYWdlX2V2aWN0YWJsZShwYWdlLCB2bWEpIGluIHZtc2Nhbi5jIGRldGVybWluZXMgd2hldGhlciBhCitwYWdlIGlzIGV2aWN0YWJsZSBvciBub3QuICBGb3IgcmFtZnMgcGFnZXMgYW5kIHBhZ2VzIGluIFNITV9MT0NLZWQgcmVnaW9ucywKK3BhZ2VfZXZpY3RhYmxlKCkgdGVzdHMgYSBuZXcgYWRkcmVzcyBzcGFjZSBmbGFnLCBBU19VTkVWSUNUQUJMRSwgaW4gdGhlIHBhZ2UncworYWRkcmVzcyBzcGFjZSB1c2luZyBhIHdyYXBwZXIgZnVuY3Rpb24uICBXcmFwcGVyIGZ1bmN0aW9ucyBhcmUgdXNlZCB0byBzZXQsCitjbGVhciBhbmQgdGVzdCB0aGUgZmxhZyB0byByZWR1Y2UgdGhlIHJlcXVpcmVtZW50IGZvciAjaWZkZWYncyB0aHJvdWdob3V0IHRoZQorc291cmNlIGNvZGUuICBBU19VTkVWSUNUQUJMRSBpcyBzZXQgb24gcmFtZnMgaW5vZGUvbWFwcGluZyB3aGVuIGl0IGlzIGNyZWF0ZWQuCitUaGlzIGZsYWcgcmVtYWlucyBmb3IgdGhlIGxpZmUgb2YgdGhlIGlub2RlLgorCitGb3Igc2hhcmVkIG1lbW9yeSByZWdpb25zLCBBU19VTkVWSUNUQUJMRSBpcyBzZXQgd2hlbiBhbiBhcHBsaWNhdGlvbgorc3VjY2Vzc2Z1bGx5IFNITV9MT0NLcyB0aGUgcmVnaW9uIGFuZCBpcyByZW1vdmVkIHdoZW4gdGhlIHJlZ2lvbiBpcworU0hNX1VOTE9DS2VkLiAgTm90ZSB0aGF0IHNobWN0bChTSE1fTE9DSywgLi4uKSBkb2VzIG5vdCBwb3B1bGF0ZSB0aGUgcGFnZQordGFibGVzIGZvciB0aGUgcmVnaW9uIGFzIGRvZXMsIGZvciBleGFtcGxlLCBtbG9jaygpLiAgIFNvLCB3ZSBtYWtlIG5vIHNwZWNpYWwKK2VmZm9ydCB0byBwdXNoIGFueSBwYWdlcyBpbiB0aGUgU0hNX0xPQ0tlZCByZWdpb24gdG8gdGhlIHVuZXZpY3RhYmxlIGxpc3QuCitWbXNjYW4gd2lsbCBkbyB0aGlzIHdoZW4vaWYgaXQgZW5jb3VudGVycyB0aGUgcGFnZXMgZHVyaW5nIHJlY2xhaW0uICBPbgorU0hNX1VOTE9DSywgc2htY3RsKCkgc2NhbnMgdGhlIHBhZ2VzIGluIHRoZSByZWdpb24gYW5kICJyZXNjdWVzIiB0aGVtIGZyb20gdGhlCit1bmV2aWN0YWJsZSBsaXN0IGlmIG5vIG90aGVyIGNvbmRpdGlvbiBrZWVwcyB0aGVtIHVuZXZpY3RhYmxlLiAgSWYgYSBTSE1fTE9DS2VkCityZWdpb24gaXMgZGVzdHJveWVkLCB0aGUgcGFnZXMgYXJlIGFsc28gInJlc2N1ZWQiIGZyb20gdGhlIHVuZXZpY3RhYmxlIGxpc3QgaW4KK3RoZSBwcm9jZXNzIG9mIGZyZWVpbmcgdGhlbS4KKworcGFnZV9ldmljdGFibGUoKSBkZXRlY3RzIG1sb2NrKCllZCBwYWdlcyBieSB0ZXN0aW5nIGFuIGFkZGl0aW9uYWwgcGFnZSBmbGFnLAorUEdfbWxvY2tlZCB2aWEgdGhlIFBhZ2VNbG9ja2VkKCkgd3JhcHBlci4gIElmIHRoZSBwYWdlIGlzIE5PVCBtbG9ja2VkLCBhbmQgYQorbm9uLU5VTEwgdm1hIGlzIHN1cHBsaWVkLCBwYWdlX2V2aWN0YWJsZSgpIHdpbGwgY2hlY2sgd2hldGhlciB0aGUgdm1hIGlzCitWTV9MT0NLRUQgdmlhIGlzX21sb2NrZWRfdm1hKCkuICBpc19tbG9ja2VkX3ZtYSgpIHdpbGwgU2V0UGFnZU1sb2NrZWQoKSBhbmQKK3VwZGF0ZSB0aGUgYXBwcm9wcmlhdGUgc3RhdGlzdGljcyBpZiB0aGUgdm1hIGlzIFZNX0xPQ0tFRC4gIFRoaXMgbWV0aG9kIGFsbG93cworZWZmaWNpZW50ICJjdWxsaW5nIiBvZiBwYWdlcyBpbiB0aGUgZmF1bHQgcGF0aCB0aGF0IGFyZSBiZWluZyBmYXVsdGVkIGluIHRvCitWTV9MT0NLRUQgdm1hcy4KKworCitVbmV2aWN0YWJsZSBQYWdlcyBhbmQgVm1zY2FuIFtzaHJpbmtfKl9saXN0KCldCisKK0lmIHVuZXZpY3RhYmxlIHBhZ2VzIGFyZSBjdWxsZWQgaW4gdGhlIGZhdWx0IHBhdGgsIG9yIG1vdmVkIHRvIHRoZSB1bmV2aWN0YWJsZQorbGlzdCBhdCBtbG9jaygpIG9yIG1tYXAoKSB0aW1lLCB2bXNjYW4gd2lsbCBuZXZlciBlbmNvdW50ZXIgdGhlIHBhZ2VzIHVudGlsCit0aGV5IGhhdmUgYmVjb21lIGV2aWN0YWJsZSBhZ2FpbiwgZm9yIGV4YW1wbGUsIHZpYSBtdW5sb2NrKCkgYW5kIGhhdmUgYmVlbgorInJlc2N1ZWQiIGZyb20gdGhlIHVuZXZpY3RhYmxlIGxpc3QuICBIb3dldmVyLCB0aGVyZSBtYXkgYmUgc2l0dWF0aW9ucyB3aGVyZSB3ZQorZGVjaWRlLCBmb3IgdGhlIHNha2Ugb2YgZXhwZWRpZW5jeSwgdG8gbGVhdmUgYSB1bmV2aWN0YWJsZSBwYWdlIG9uIG9uZSBvZiB0aGUKK3JlZ3VsYXIgYWN0aXZlL2luYWN0aXZlIExSVSBsaXN0cyBmb3Igdm1zY2FuIHRvIGRlYWwgd2l0aC4gIFZtc2NhbiBjaGVja3MgZm9yCitzdWNoIHBhZ2VzIGluIGFsbCBvZiB0aGUgc2hyaW5rX3thY3RpdmV8aW5hY3RpdmV8cGFnZX1fbGlzdCgpIGZ1bmN0aW9ucyBhbmQKK3dpbGwgImN1bGwiIHN1Y2ggcGFnZXMgdGhhdCBpdCBlbmNvdW50ZXJzLS10aGF0IGlzLCBpdCBkaXZlcnRzIHRob3NlIHBhZ2VzIHRvCit0aGUgdW5ldmljdGFibGUgbGlzdCBmb3IgdGhlIHpvbmUgYmVpbmcgc2Nhbm5lZC4KKworVGhlcmUgbWF5IGJlIHNpdHVhdGlvbnMgd2hlcmUgYSBwYWdlIGlzIG1hcHBlZCBpbnRvIGEgVk1fTE9DS0VEIHZtYSwgYnV0IHRoZQorcGFnZSBpcyBub3QgbWFya2VkIGFzIFBhZ2VNbG9ja2VkLiAgU3VjaCBwYWdlcyB3aWxsIG1ha2UgaXQgYWxsIHRoZSB3YXkgdG8KK3Nocmlua19wYWdlX2xpc3QoKSB3aGVyZSB0aGV5IHdpbGwgYmUgZGV0ZWN0ZWQgd2hlbiB2bXNjYW4gd2Fsa3MgdGhlIHJldmVyc2UKK21hcCBpbiB0cnlfdG9fdW5tYXAoKS4gIElmIHRyeV90b191bm1hcCgpIHJldHVybnMgU1dBUF9NTE9DSywgc2hyaW5rX3BhZ2VfbGlzdCgpCit3aWxsIGN1bGwgdGhlIHBhZ2UgYXQgdGhhdCBwb2ludC4KKworTm90ZSB0aGF0IGZvciBhbm9ueW1vdXMgcGFnZXMsIHNocmlua19wYWdlX2xpc3QoKSBhdHRlbXB0cyB0byBhZGQgdGhlIHBhZ2UgdG8KK3RoZSBzd2FwIGNhY2hlIGJlZm9yZSBpdCB0cmllcyB0byB1bm1hcCB0aGUgcGFnZS4gIFRvIGF2b2lkIHRoaXMgdW5uZWNlc3NhcnkKK2NvbnN1bXB0aW9uIG9mIHN3YXAgc3BhY2UsIHNocmlua19wYWdlX2xpc3QoKSBjYWxscyB0cnlfdG9fbXVubG9jaygpIHRvIGNoZWNrCit3aGV0aGVyIGFueSBWTV9MT0NLRUQgdm1hcyBtYXAgdGhlIHBhZ2Ugd2l0aG91dCBhdHRlbXB0aW5nIHRvIHVubWFwIHRoZSBwYWdlLgorSWYgdHJ5X3RvX211bmxvY2soKSByZXR1cm5zIFNXQVBfTUxPQ0ssIHNocmlua19wYWdlX2xpc3QoKSB3aWxsIGN1bGwgdGhlIHBhZ2UKK3dpdGhvdXQgY29uc3VtaW5nIHN3YXAgc3BhY2UuICB0cnlfdG9fbXVubG9jaygpIHdpbGwgYmUgZGVzY3JpYmVkIGJlbG93LgorCitUbyAiY3VsbCIgYW4gdW5ldmljdGFibGUgcGFnZSwgdm1zY2FuIHNpbXBseSBwdXRzIHRoZSBwYWdlIGJhY2sgb24gdGhlIGxydQorbGlzdCB1c2luZyBwdXRiYWNrX2xydV9wYWdlKCktLXRoZSBpbnZlcnNlIG9wZXJhdGlvbiB0byBpc29sYXRlX2xydV9wYWdlKCktLQorYWZ0ZXIgZHJvcHBpbmcgdGhlIHBhZ2UgbG9jay4gIEJlY2F1c2UgdGhlIGNvbmRpdGlvbiB3aGljaCBtYWtlcyB0aGUgcGFnZQordW5ldmljdGFibGUgbWF5IGNoYW5nZSBvbmNlIHRoZSBwYWdlIGlzIHVubG9ja2VkLCBwdXRiYWNrX2xydV9wYWdlKCkgd2lsbAorcmVjaGVjayB0aGUgdW5ldmljdGFibGUgc3RhdGUgb2YgYSBwYWdlIHRoYXQgaXQgcGxhY2VzIG9uIHRoZSB1bmV2aWN0YWJsZSBscnUKK2xpc3QuICBJZiB0aGUgcGFnZSBoYXMgYmVjb21lIHVuZXZpY3RhYmxlLCBwdXRiYWNrX2xydV9wYWdlKCkgcmVtb3ZlcyBpdCBmcm9tCit0aGUgbGlzdCBhbmQgcmV0cmllcywgaW5jbHVkaW5nIHRoZSBwYWdlX3VuZXZpY3RhYmxlKCkgdGVzdC4gIEJlY2F1c2Ugc3VjaCBhCityYWNlIGlzIGEgcmFyZSBldmVudCBhbmQgbW92ZW1lbnQgb2YgcGFnZXMgb250byB0aGUgdW5ldmljdGFibGUgbGlzdCBzaG91bGQgYmUKK3JhcmUsIHRoZXNlIGV4dHJhIGV2aWN0YWJpbHR5IGNoZWNrcyBzaG91bGQgbm90IG9jY3VyIGluIHRoZSBtYWpvcml0eSBvZiBjYWxscwordG8gcHV0YmFja19scnVfcGFnZSgpLgorCisKK01sb2NrZWQgUGFnZTogIFByaW9yIFdvcmsKKworVGhlICJVbmV2aWN0YWJsZSBNbG9ja2VkIFBhZ2VzIiBpbmZyYXN0cnVjdHVyZSBpcyBiYXNlZCBvbiB3b3JrIG9yaWdpbmFsbHkKK3Bvc3RlZCBieSBOaWNrIFBpZ2dpbiBpbiBhbiBSRkMgcGF0Y2ggZW50aXRsZWQgIm1tOiBtbG9ja2VkIHBhZ2VzIG9mZiBMUlUiLgorTmljayBwb3N0ZWQgaGlzIHBhdGNoIGFzIGFuIGFsdGVybmF0aXZlIHRvIGEgcGF0Y2ggcG9zdGVkIGJ5IENocmlzdG9waAorTGFtZXRlciB0byBhY2hpZXZlIHRoZSBzYW1lIG9iamVjdGl2ZS0taGlkaW5nIG1sb2NrZWQgcGFnZXMgZnJvbSB2bXNjYW4uCitJbiBOaWNrJ3MgcGF0Y2gsIGhlIHVzZWQgb25lIG9mIHRoZSBzdHJ1Y3QgcGFnZSBscnUgbGlzdCBsaW5rIGZpZWxkcyBhcyBhIGNvdW50CitvZiBWTV9MT0NLRUQgdm1hcyB0aGF0IG1hcCB0aGUgcGFnZS4gIFRoaXMgdXNlIG9mIHRoZSBsaW5rIGZpZWxkIGZvciBhIGNvdW50CitwcmV2ZW50ZWQgdGhlIG1hbmFnZW1lbnQgb2YgdGhlIHBhZ2VzIG9uIGFuIExSVSBsaXN0LiAgVGh1cywgbWxvY2tlZCBwYWdlcyB3ZXJlCitub3QgbWlncmF0YWJsZSBhcyBpc29sYXRlX2xydV9wYWdlKCkgY291bGQgbm90IGZpbmQgdGhlbSBhbmQgdGhlIGxydSBsaXN0IGxpbmsKK2ZpZWxkIHdhcyBub3QgYXZhaWxhYmxlIHRvIHRoZSBtaWdyYXRpb24gc3Vic3lzdGVtLiAgTmljayByZXNvbHZlZCB0aGlzIGJ5CitwdXR0aW5nIG1sb2NrZWQgcGFnZXMgYmFjayBvbiB0aGUgbHJ1IGxpc3QgYmVmb3JlIGF0dGVtcHRpbmcgdG8gaXNvbGF0ZSB0aGVtLAordGh1cyBhYmFuZG9uaW5nIHRoZSBjb3VudCBvZiBWTV9MT0NLRUQgdm1hcy4gIFdoZW4gTmljaydzIHBhdGNoIHdhcyBpbnRlZ3JhdGVkCit3aXRoIHRoZSBVbmV2aWN0YWJsZSBMUlUgd29yaywgdGhlIGNvdW50IHdhcyByZXBsYWNlZCBieSB3YWxraW5nIHRoZSByZXZlcnNlCittYXAgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgYW55IFZNX0xPQ0tFRCB2bWFzIG1hcHBlZCB0aGUgcGFnZS4gIE1vcmUgb24gdGhpcworYmVsb3cuCisKKworTWxvY2tlZCBQYWdlczogIEJhc2ljIE1hbmFnZW1lbnQKKworTWxvY2tlZCBwYWdlcy0tcGFnZXMgbWFwcGVkIGludG8gYSBWTV9MT0NLRUQgdm1hLS1yZXByZXNlbnQgb25lIGNsYXNzIG9mCit1bmV2aWN0YWJsZSBwYWdlcy4gIFdoZW4gc3VjaCBhIHBhZ2UgaGFzIGJlZW4gIm5vdGljZWQiIGJ5IHRoZSBtZW1vcnkKK21hbmFnZW1lbnQgc3Vic3lzdGVtLCB0aGUgcGFnZSBpcyBtYXJrZWQgd2l0aCB0aGUgUEdfbWxvY2tlZCBbUGFnZU1sb2NrZWQoKV0KK2ZsYWcuICBBIFBhZ2VNbG9ja2VkKCkgcGFnZSB3aWxsIGJlIHBsYWNlZCBvbiB0aGUgdW5ldmljdGFibGUgTFJVIGxpc3Qgd2hlbgoraXQgaXMgYWRkZWQgdG8gdGhlIExSVS4gICBQYWdlcyBjYW4gYmUgIm5vdGljZWQiIGJ5IG1lbW9yeSBtYW5hZ2VtZW50IGluCitzZXZlcmFsIHBsYWNlczoKKworMSkgaW4gdGhlIG1sb2NrKCkvbWxvY2thbGwoKSBzeXN0ZW0gY2FsbCBoYW5kbGVycy4KKzIpIGluIHRoZSBtbWFwKCkgc3lzdGVtIGNhbGwgaGFuZGxlciB3aGVuIG1tYXAoKWluZyBhIHJlZ2lvbiB3aXRoIHRoZQorICAgTUFQX0xPQ0tFRCBmbGFnLCBvciBtbWFwKClpbmcgYSByZWdpb24gaW4gYSB0YXNrIHRoYXQgaGFzIGNhbGxlZAorICAgbWxvY2thbGwoKSB3aXRoIHRoZSBNQ0xfRlVUVVJFIGZsYWcuICBCb3RoIG9mIHRoZXNlIGNvbmRpdGlvbnMgcmVzdWx0CisgICBpbiB0aGUgVk1fTE9DS0VEIGZsYWcgYmVpbmcgc2V0IGZvciB0aGUgdm1hLgorMykgaW4gdGhlIGZhdWx0IHBhdGgsIGlmIG1sb2NrZWQgcGFnZXMgYXJlICJjdWxsZWQiIGluIHRoZSBmYXVsdCBwYXRoLAorICAgYW5kIHdoZW4gYSBWTV9MT0NLRUQgc3RhY2sgc2VnbWVudCBpcyBleHBhbmRlZC4KKzQpIGFzIG1lbnRpb25lZCBhYm92ZSwgaW4gdm1zY2FuOnNocmlua19wYWdlX2xpc3QoKSB3aXRoIGF0dGVtcHRpbmcgdG8KKyAgIHJlY2xhaW0gYSBwYWdlIGluIGEgVk1fTE9DS0VEIHZtYS0tdmlhIHRyeV90b191bm1hcCgpIG9yIHRyeV90b19tdW5sb2NrKCkuCisKK01sb2NrZWQgcGFnZXMgYmVjb21lIHVubG9ja2VkIGFuZCByZXNjdWVkIGZyb20gdGhlIHVuZXZpY3RhYmxlIGxpc3Qgd2hlbjoKKworMSkgbWFwcGVkIGluIGEgcmFuZ2UgdW5sb2NrZWQgdmlhIHRoZSBtdW5sb2NrKCkvbXVubG9ja2FsbCgpIHN5c3RlbSBjYWxscy4KKzIpIG11bm1hcHBlZCgpIG91dCBvZiB0aGUgbGFzdCBWTV9MT0NLRUQgdm1hIHRoYXQgbWFwcyB0aGUgcGFnZSwgaW5jbHVkaW5nCisgICB1bm1hcHBpbmcgYXQgdGFzayBleGl0LgorMykgd2hlbiB0aGUgcGFnZSBpcyB0cnVuY2F0ZWQgZnJvbSB0aGUgbGFzdCBWTV9MT0NLRUQgdm1hIG9mIGFuIG1tYXAoKWVkIGZpbGUuCis0KSBiZWZvcmUgYSBwYWdlIGlzIENPV2VkIGluIGEgVk1fTE9DS0VEIHZtYS4KKworCitNbG9ja2VkIFBhZ2VzOiAgbWxvY2soKS9tbG9ja2FsbCgpIFN5c3RlbSBDYWxsIEhhbmRsaW5nCisKK0JvdGggW2RvX11tbG9jaygpIGFuZCBbZG9fXW1sb2NrYWxsKCkgc3lzdGVtIGNhbGwgaGFuZGxlcnMgY2FsbCBtbG9ja19maXh1cCgpCitmb3IgZWFjaCB2bWEgaW4gdGhlIHJhbmdlIHNwZWNpZmllZCBieSB0aGUgY2FsbC4gIEluIHRoZSBjYXNlIG9mIG1sb2NrYWxsKCksCit0aGlzIGlzIHRoZSBlbnRpcmUgYWN0aXZlIGFkZHJlc3Mgc3BhY2Ugb2YgdGhlIHRhc2suICBOb3RlIHRoYXQgbWxvY2tfZml4dXAoKQoraXMgdXNlZCBmb3IgYm90aCBtbG9jaygpaW5nIGFuZCBtdW5sb2NrKClpbmcgYSByYW5nZSBvZiBtZW1vcnkuICBBIGNhbGwgdG8KK21sb2NrKCkgYW4gYWxyZWFkeSBWTV9MT0NLRUQgdm1hLCBvciB0byBtdW5sb2NrKCkgYSB2bWEgdGhhdCBpcyBub3QgVk1fTE9DS0VECitpcyB0cmVhdGVkIGFzIGEgbm8tb3AtLW1sb2NrX2ZpeHVwKCkgc2ltcGx5IHJldHVybnMuCisKK0lmIHRoZSB2bWEgcGFzc2VzIHNvbWUgZmlsdGVyaW5nIGRlc2NyaWJlZCBpbiAiTWxvY2tlZCBQYWdlczogIEZpbHRlcmluZyBWbWFzIgorYmVsb3csIG1sb2NrX2ZpeHVwKCkgd2lsbCBhdHRlbXB0IHRvIG1lcmdlIHRoZSB2bWEgd2l0aCBpdHMgbmVpZ2hib3JzIG9yIHNwbGl0CitvZmYgYSBzdWJzZXQgb2YgdGhlIHZtYSBpZiB0aGUgcmFuZ2UgZG9lcyBub3QgY292ZXIgdGhlIGVudGlyZSB2bWEuICBPbmNlIHRoZQordm1hIGhhcyBiZWVuIG1lcmdlZCBvciBzcGxpdCBvciBuZWl0aGVyLCBtbG9ja19maXh1cCgpIHdpbGwgY2FsbAorX19tbG9ja192bWFfcGFnZXNfcmFuZ2UoKSB0byBmYXVsdCBpbiB0aGUgcGFnZXMgdmlhIGdldF91c2VyX3BhZ2VzKCkgYW5kCit0byBtYXJrIHRoZSBwYWdlcyBhcyBtbG9ja2VkIHZpYSBtbG9ja192bWFfcGFnZSgpLgorCitOb3RlIHRoYXQgdGhlIHZtYSBiZWluZyBtbG9ja2VkIG1pZ2h0IGJlIG1hcHBlZCB3aXRoIFBST1RfTk9ORS4gIEluIHRoaXMgY2FzZSwKK2dldF91c2VyX3BhZ2VzKCkgd2lsbCBiZSB1bmFibGUgdG8gZmF1bHQgaW4gdGhlIHBhZ2VzLiAgVGhhdCdzIE9LLiAgSWYgcGFnZXMKK2RvIGVuZCB1cCBnZXR0aW5nIGZhdWx0ZWQgaW50byB0aGlzIFZNX0xPQ0tFRCB2bWEsIHdlJ2xsIGhhbmRsZSB0aGVtIGluIHRoZQorZmF1bHQgcGF0aCBvciBpbiB2bXNjYW4uCisKK0Fsc28gbm90ZSB0aGF0IGEgcGFnZSByZXR1cm5lZCBieSBnZXRfdXNlcl9wYWdlcygpIGNvdWxkIGJlIHRydW5jYXRlZCBvcgorbWlncmF0ZWQgb3V0IGZyb20gdW5kZXIgdXMsIHdoaWxlIHdlJ3JlIHRyeWluZyB0byBtbG9jayBpdC4gIFRvIGRldGVjdAordGhpcywgX19tbG9ja192bWFfcGFnZXNfcmFuZ2UoKSB0ZXN0cyB0aGUgcGFnZV9tYXBwaW5nIGFmdGVyIGFjcXVpcmluZwordGhlIHBhZ2UgbG9jay4gIElmIHRoZSBwYWdlIGlzIHN0aWxsIGFzc29jaWF0ZWQgd2l0aCBpdHMgbWFwcGluZywgd2UnbGwKK2dvIGFoZWFkIGFuZCBjYWxsIG1sb2NrX3ZtYV9wYWdlKCkuICBJZiB0aGUgbWFwcGluZyBpcyBnb25lLCB3ZSBqdXN0Cit1bmxvY2sgdGhlIHBhZ2UgYW5kIG1vdmUgb24uICBXb3JzZSBjYXNlLCB0aGlzIHJlc3VsdHMgaW4gcGFnZSBtYXBwZWQKK2luIGEgVk1fTE9DS0VEIHZtYSByZW1haW5pbmcgb24gYSBub3JtYWwgTFJVIGxpc3Qgd2l0aG91dCBiZWluZworUGFnZU1sb2NrZWQoKS4gIEFnYWluLCB2bXNjYW4gd2lsbCBkZXRlY3QgYW5kIGN1bGwgc3VjaCBwYWdlcy4KKworbWxvY2tfdm1hX3BhZ2UoKSwgY2FsbGVkIHdpdGggdGhlIHBhZ2UgbG9ja2VkIFtOLkIuLCBub3QgIm1sb2NrZWQiXSwgd2lsbAorVGVzdFNldFBhZ2VNbG9ja2VkKCkgZm9yIGVhY2ggcGFnZSByZXR1cm5lZCBieSBnZXRfdXNlcl9wYWdlcygpLiAgV2UgdXNlCitUZXN0U2V0UGFnZU1sb2NrZWQoKSBiZWNhdXNlIHRoZSBwYWdlIG1pZ2h0IGFscmVhZHkgYmUgbWxvY2tlZCBieSBhbm90aGVyCit0YXNrL3ZtYSBhbmQgd2UgZG9uJ3Qgd2FudCB0byBkbyBleHRyYSB3b3JrLiAgV2UgZXNwZWNpYWxseSBkbyBub3Qgd2FudCB0bworY291bnQgYW4gbWxvY2tlZCBwYWdlIG1vcmUgdGhhbiBvbmNlIGluIHRoZSBzdGF0aXN0aWNzLiAgSWYgdGhlIHBhZ2Ugd2FzCithbHJlYWR5IG1sb2NrZWQsIG1sb2NrX3ZtYV9wYWdlKCkgaXMgZG9uZS4KKworSWYgdGhlIHBhZ2Ugd2FzIE5PVCBhbHJlYWR5IG1sb2NrZWQsIG1sb2NrX3ZtYV9wYWdlKCkgYXR0ZW1wdHMgdG8gaXNvbGF0ZSB0aGUKK3BhZ2UgZnJvbSB0aGUgTFJVLCBhcyBpdCBpcyBsaWtlbHkgb24gdGhlIGFwcHJvcHJpYXRlIGFjdGl2ZSBvciBpbmFjdGl2ZSBsaXN0CithdCB0aGF0IHRpbWUuICBJZiB0aGUgaXNvbGF0ZV9scnVfcGFnZSgpIHN1Y2NlZWRzLCBtbG9ja192bWFfcGFnZSgpIHdpbGwKK3B1dGJhY2sgdGhlIHBhZ2UtLXB1dGJhY2tfbHJ1X3BhZ2UoKS0td2hpY2ggd2lsbCBub3RpY2UgdGhhdCB0aGUgcGFnZSBpcyBub3cKK21sb2NrZWQgYW5kIGRpdmVydCB0aGUgcGFnZSB0byB0aGUgem9uZSdzIHVuZXZpY3RhYmxlIExSVSBsaXN0LiAgSWYKK21sb2NrX3ZtYV9wYWdlKCkgaXMgdW5hYmxlIHRvIGlzb2xhdGUgdGhlIHBhZ2UgZnJvbSB0aGUgTFJVLCB2bXNjYW4gd2lsbCBoYW5kbGUKK2l0IGxhdGVyIGlmL3doZW4gaXQgYXR0ZW1wdHMgdG8gcmVjbGFpbSB0aGUgcGFnZS4KKworCitNbG9ja2VkIFBhZ2VzOiAgRmlsdGVyaW5nIFNwZWNpYWwgVm1hcworCittbG9ja19maXh1cCgpIGZpbHRlcnMgc2V2ZXJhbCBjbGFzc2VzIG9mICJzcGVjaWFsIiB2bWFzOgorCisxKSB2bWFzIHdpdGggVk1fSU98Vk1fUEZOTUFQIHNldCBhcmUgc2tpcHBlZCBlbnRpcmVseS4gIFRoZSBwYWdlcyBiZWhpbmQKKyAgIHRoZXNlIG1hcHBpbmdzIGFyZSBpbmhlcmVudGx5IHBpbm5lZCwgc28gd2UgZG9uJ3QgbmVlZCB0byBtYXJrIHRoZW0gYXMKKyAgIG1sb2NrZWQuICBJbiBhbnkgY2FzZSwgbW9zdCBvZiB0aGUgcGFnZXMgaGF2ZSBubyBzdHJ1Y3QgcGFnZSBpbiB3aGljaCB0bworICAgc28gbWFyayB0aGUgcGFnZS4gIEJlY2F1c2Ugb2YgdGhpcywgZ2V0X3VzZXJfcGFnZXMoKSB3aWxsIGZhaWwgZm9yIHRoZXNlCisgICB2bWFzLCBzbyB0aGVyZSBpcyBubyBzZW5zZSBpbiBhdHRlbXB0aW5nIHRvIHZpc2l0IHRoZW0uCisKKzIpIHZtYXMgbWFwcGluZyBodWdldGxiZnMgcGFnZSBhcmUgYWxyZWFkeSBlZmZlY3RpdmVseSBwaW5uZWQgaW50byBtZW1vcnkuCisgICBXZSBkb24ndCBuZWVkIG5vciB3YW50IHRvIG1sb2NrKCkgdGhlc2UgcGFnZXMuICBIb3dldmVyLCB0byBwcmVzZXJ2ZSB0aGUKKyAgIHByaW9yIGJlaGF2aW9yIG9mIG1sb2NrKCktLWJlZm9yZSB0aGUgdW5ldmljdGFibGUvbWxvY2sgY2hhbmdlcy0tbWxvY2tfZml4dXAoKQorICAgd2lsbCBjYWxsIG1ha2VfcGFnZXNfcHJlc2VudCgpIGluIHRoZSBodWdldGxiZnMgdm1hIHJhbmdlIHRvIGFsbG9jYXRlIHRoZQorICAgaHVnZSBwYWdlcyBhbmQgcG9wdWxhdGUgdGhlIHB0ZXMuCisKKzMpIHZtYXMgd2l0aCBWTV9ET05URVhQQU5EfFZNX1JFU0VSVkVEIGFyZSBnZW5lcmFsbHkgdXNlciBzcGFjZSBtYXBwaW5ncyBvZgorICAga2VybmVsIHBhZ2VzLCBzdWNoIGFzIHRoZSB2ZHNvIHBhZ2UsIHJlbGF5IGNoYW5uZWwgcGFnZXMsIGV0Yy4gIFRoZXNlIHBhZ2VzCisgICBhcmUgaW5oZXJlbnRseSB1bmV2aWN0YWJsZSBhbmQgYXJlIG5vdCBtYW5hZ2VkIG9uIHRoZSBMUlUgbGlzdHMuCisgICBtbG9ja19maXh1cCgpIHRyZWF0cyB0aGVzZSB2bWFzIHRoZSBzYW1lIGFzIGh1Z2V0bGJmcyB2bWFzLiAgSXQgY2FsbHMKKyAgIG1ha2VfcGFnZXNfcHJlc2VudCgpIHRvIHBvcHVsYXRlIHRoZSBwdGVzLgorCitOb3RlIHRoYXQgZm9yIGFsbCBvZiB0aGVzZSBzcGVjaWFsIHZtYXMsIG1sb2NrX2ZpeHVwKCkgZG9lcyBub3Qgc2V0IHRoZQorVk1fTE9DS0VEIGZsYWcuICBUaGVyZWZvcmUsIHdlIHdvbid0IGhhdmUgdG8gZGVhbCB3aXRoIHRoZW0gbGF0ZXIgZHVyaW5nCittdW5sb2NrKCkgb3IgbXVubWFwKCktLWZvciBleGFtcGxlLCBhdCB0YXNrIGV4aXQuICBOZWl0aGVyIGRvZXMgbWxvY2tfZml4dXAoKQorYWNjb3VudCB0aGVzZSB2bWFzIGFnYWluc3QgdGhlIHRhc2sncyAibG9ja2VkX3ZtIi4KKworTWxvY2tlZCBQYWdlczogIERvd25ncmFkaW5nIHRoZSBNbWFwIFNlbWFwaG9yZS4KKworbWxvY2tfZml4dXAoKSBtdXN0IGJlIGNhbGxlZCB3aXRoIHRoZSBtbWFwIHNlbWFwaG9yZSBoZWxkIGZvciB3cml0ZSwgYmVjYXVzZQoraXQgbWF5IGhhdmUgdG8gbWVyZ2Ugb3Igc3BsaXQgdm1hcy4gIEhvd2V2ZXIsIG1sb2NraW5nIGEgbGFyZ2UgcmVnaW9uIG9mCittZW1vcnkgY2FuIHRha2UgYSBsb25nIHRpbWUtLWVzcGVjaWFsbHkgaWYgdm1zY2FuIG11c3QgcmVjbGFpbSBwYWdlcyB0bworc2F0aXNmeSB0aGUgcmVnaW9ucyByZXF1aXJlbWVudHMuICBGYXVsdGluZyBpbiBhIGxhcmdlIHJlZ2lvbiB3aXRoIHRoZSBtbWFwCitzZW1hcGhvcmUgaGVsZCBmb3Igd3JpdGUgY2FuIGhvbGQgb2ZmIG90aGVyIGZhdWx0cyBvbiB0aGUgYWRkcmVzcyBzcGFjZSwgaW4KK3RoZSBjYXNlIG9mIGEgbXVsdGktdGhyZWFkZWQgdGFzay4gIEl0IGNhbiBhbHNvIGhvbGQgb2ZmIHNjYW5zIG9mIHRoZSB0YXNrJ3MKK2FkZHJlc3Mgc3BhY2UgdmlhIC9wcm9jLiAgV2hpbGUgdGVzdGluZyB1bmRlciBoZWF2eSBsb2FkLCBpdCB3YXMgb2JzZXJ2ZWQgdGhhdAordGhlIHBzKDEpIGNvbW1hbmQgY291bGQgYmUgaGVsZCBvZmYgZm9yIG1hbnkgbWludXRlcyB3aGlsZSBhIGxhcmdlIHNlZ21lbnQgd2FzCittbG9jaygpZWQgZG93bi4KKworVG8gYWRkcmVzcyB0aGlzIGlzc3VlLCBhbmQgdG8gbWFrZSB0aGUgc3lzdGVtIG1vcmUgcmVzcG9uc2l2ZSBkdXJpbmcgbWxvY2soKWluZworb2YgbGFyZ2Ugc2VnbWVudHMsIG1sb2NrX2ZpeHVwKCkgZG93bmdyYWRlcyB0aGUgbW1hcCBzZW1hcGhvcmUgdG8gcmVhZCBtb2RlCitkdXJpbmcgdGhlIGNhbGwgdG8gX19tbG9ja192bWFfcGFnZXNfcmFuZ2UoKS4gIFRoaXMgd29ya3MgZmluZS4gIEhvd2V2ZXIsIHRoZQorY2FsbGVycyBvZiBtbG9ja19maXh1cCgpIGV4cGVjdCB0aGUgc2VtYXBob3JlIHRvIGJlIHJldHVybmVkIGluIHdyaXRlIG1vZGUuCitTbywgbWxvY2tfZml4dXAoKSAidXBncmFkZXMiIHRoZSBzZW1waG9yZSB0byB3cml0ZSBtb2RlLiAgTGludXggZG9lcyBub3QKK3N1cHBvcnQgYW4gYXRvbWljIHVwZ3JhZGVfc2VtKCkgY2FsbCwgc28gbWxvY2tfZml4dXAoKSBtdXN0IGRyb3AgdGhlIHNlbWFwaG9yZQorYW5kIHJlYWNxdWlyZSBpdCBpbiB3cml0ZSBtb2RlLiAgSW4gYSBtdWx0aS10aHJlYWRlZCB0YXNrLCBpdCBpcyBwb3NzaWJsZSBmb3IKK3RoZSB0YXNrIG1lbW9yeSBtYXAgdG8gY2hhbmdlIHdoaWxlIHRoZSBzZW1hcGhvcmUgaXMgZHJvcHBlZC4gIFRoZXJlZm9yZSwKK21sb2NrX2ZpeHVwKCkgbG9va3MgdXAgdGhlIHZtYSBhdCB0aGUgcmFuZ2Ugc3RhcnQgYWRkcmVzcyBhZnRlciByZWFjcXVpcmluZwordGhlIHNlbWFwaG9yZSBpbiB3cml0ZSBtb2RlIGFuZCB2ZXJpZmllcyB0aGF0IGl0IHN0aWxsIGNvdmVycyB0aGUgb3JpZ2luYWwKK3JhbmdlLiAgSWYgbm90LCBtbG9ja19maXh1cCgpIHJldHVybnMgYW4gZXJyb3IgWy1FQUdBSU5dLiAgQWxsIGNhbGxlcnMgb2YKK21sb2NrX2ZpeHVwKCkgaGF2ZSBiZWVuIGNoYW5nZWQgdG8gZGVhbCB3aXRoIHRoaXMgbmV3IGVycm9yIGNvbmRpdGlvbi4KKworTm90ZTogIHdoZW4gbXVubG9ja2luZyBhIHJlZ2lvbiwgYWxsIG9mIHRoZSBwYWdlcyBzaG91bGQgYWxyZWFkeSBiZSByZXNpZGVudC0tCit1bmxlc3Mgd2UgaGF2ZSByYWNpbmcgdGhyZWFkcyBtbG9ja2luZygpIGFuZCBtdW5sb2NraW5nKCkgcmVnaW9ucy4gIFNvLAordW5sb2NraW5nIHNob3VsZCBub3QgaGF2ZSB0byB3YWl0IGZvciBwYWdlIGFsbG9jYXRpb25zIG5vciBmYXVsdHMgIG9mIGFueSBraW5kLgorVGhlcmVmb3JlIG1sb2NrX2ZpeHVwKCkgZG9lcyBub3QgZG93bmdyYWRlIHRoZSBzZW1hcGhvcmUgZm9yIG11bmxvY2soKS4KKworCitNbG9ja2VkIFBhZ2VzOiAgbXVubG9jaygpL211bmxvY2thbGwoKSBTeXN0ZW0gQ2FsbCBIYW5kbGluZworCitUaGUgbXVubG9jaygpIGFuZCBtdW5sb2NrYWxsKCkgc3lzdGVtIGNhbGxzIGFyZSBoYW5kbGVkIGJ5IHRoZSBzYW1lIGZ1bmN0aW9ucy0tCitkb19tbG9ja1thbGxdKCktLWFzIHRoZSBtbG9jaygpIGFuZCBtbG9ja2FsbCgpIHN5c3RlbSBjYWxscyB3aXRoIHRoZSB1bmxvY2sKK3ZzIGxvY2sgb3BlcmF0aW9uIGluZGljYXRlZCBieSBhbiBhcmd1bWVudC4gIFNvLCB0aGVzZSBzeXN0ZW0gY2FsbHMgYXJlIGFsc28KK2hhbmRsZWQgYnkgbWxvY2tfZml4dXAoKS4gIEFnYWluLCBpZiBjYWxsZWQgZm9yIGFuIGFscmVhZHkgbXVubG9jaygpZWQgdm1hLAorbWxvY2tfZml4dXAoKSBzaW1wbHkgcmV0dXJucy4gIEJlY2F1c2Ugb2YgdGhlIHZtYSBmaWx0ZXJpbmcgZGlzY3Vzc2VkIGFib3ZlLAorVk1fTE9DS0VEIHdpbGwgbm90IGJlIHNldCBpbiBhbnkgInNwZWNpYWwiIHZtYXMuICBTbywgdGhlc2Ugdm1hcyB3aWxsIGJlCitpZ25vcmVkIGZvciBtdW5sb2NrLgorCitJZiB0aGUgdm1hIGlzIFZNX0xPQ0tFRCwgbWxvY2tfZml4dXAoKSBhZ2FpbiBhdHRlbXB0cyB0byBtZXJnZSBvciBzcGxpdCBvZmYKK3RoZSBzcGVjaWZpZWQgcmFuZ2UuICBUaGUgcmFuZ2UgaXMgdGhlbiBtdW5sb2NrZWQgdmlhIHRoZSBmdW5jdGlvbgorX19tbG9ja192bWFfcGFnZXNfcmFuZ2UoKS0tdGhlIHNhbWUgZnVuY3Rpb24gdXNlZCB0byBtbG9jayBhIHZtYSByYW5nZS0tCitwYXNzaW5nIGEgZmxhZyB0byBpbmRpY2F0ZSB0aGF0IG11bmxvY2soKSBpcyBiZWluZyBwZXJmb3JtZWQuCisKK0JlY2F1c2UgdGhlIHZtYSBhY2Nlc3MgcHJvdGVjdGlvbnMgY291bGQgaGF2ZSBiZWVuIGNoYW5nZWQgdG8gUFJPVF9OT05FIGFmdGVyCitmYXVsdGluZyBpbiBhbmQgbWxvY2tpbmcgc29tZSBwYWdlcywgZ2V0X3VzZXJfcGFnZXMoKSB3YXMgdW5yZWxpYWJsZSBmb3IgdmlzaXRpbmcKK3RoZXNlIHBhZ2VzIGZvciBtdW5sb2NraW5nLiAgQmVjYXVzZSB3ZSBkb24ndCB3YW50IHRvIGxlYXZlIHBhZ2VzIG1sb2NrZWQoKSwKK2dldF91c2VyX3BhZ2VzKCkgd2FzIGVuaGFuY2VkIHRvIGFjY2VwdCBhIGZsYWcgdG8gaWdub3JlIHRoZSBwZXJtaXNzaW9ucyB3aGVuCitmZXRjaGluZyB0aGUgcGFnZXMtLWFsbCBvZiB3aGljaCBzaG91bGQgYmUgcmVzaWRlbnQgYXMgYSByZXN1bHQgb2YgcHJldmlvdXMKK21sb2NrKClpbmcuCisKK0ZvciBtdW5sb2NrKCksIF9fbWxvY2tfdm1hX3BhZ2VzX3JhbmdlKCkgdW5sb2NrcyBpbmRpdmlkdWFsIHBhZ2VzIGJ5IGNhbGxpbmcKK211bmxvY2tfdm1hX3BhZ2UoKS4gIG11bmxvY2tfdm1hX3BhZ2UoKSB1bmNvbmRpdGlvbmFsbHkgY2xlYXJzIHRoZSBQR19tbG9ja2VkCitmbGFnIHVzaW5nIFRlc3RDbGVhclBhZ2VNbG9ja2VkKCkuICBBcyB3aXRoIG1sb2NrX3ZtYV9wYWdlKCksIG11bmxvY2tfdm1hX3BhZ2UoKQordXNlIHRoZSBUZXN0KlBhZ2VNbG9ja2VkKCkgZnVuY3Rpb24gdG8gaGFuZGxlIHRoZSBjYXNlIHdoZXJlIHRoZSBwYWdlIG1pZ2h0CitoYXZlIGFscmVhZHkgYmVlbiB1bmxvY2tlZCBieSBhbm90aGVyIHRhc2suICBJZiB0aGUgcGFnZSB3YXMgbWxvY2tlZCwKK211bmxvY2tfdm1hX3BhZ2UoKSB1cGRhdGVzIHRoYXQgem9uZSBzdGF0aXN0aWNzIGZvciB0aGUgbnVtYmVyIG9mIG1sb2NrZWQKK3BhZ2VzLiAgTm90ZSwgaG93ZXZlciwgdGhhdCBhdCB0aGlzIHBvaW50IHdlIGhhdmVuJ3QgY2hlY2tlZCB3aGV0aGVyIHRoZSBwYWdlCitpcyBtYXBwZWQgYnkgb3RoZXIgVk1fTE9DS0VEIHZtYXMuCisKK1dlIGNhbid0IGNhbGwgdHJ5X3RvX211bmxvY2soKSwgdGhlIGZ1bmN0aW9uIHRoYXQgd2Fsa3MgdGhlIHJldmVyc2UgbWFwIHRvIGNoZWNrCitmb3Igb3RoZXIgVk1fTE9DS0VEIHZtYXMsIHdpdGhvdXQgZmlyc3QgaXNvbGF0aW5nIHRoZSBwYWdlIGZyb20gdGhlIExSVS4KK3RyeV90b19tdW5sb2NrKCkgaXMgYSB2YXJpYW50IG9mIHRyeV90b191bm1hcCgpIGFuZCB0aHVzIHJlcXVpcmVzIHRoYXQgdGhlIHBhZ2UKK25vdCBiZSBvbiBhbiBscnUgbGlzdC4gIFtNb3JlIG9uIHRoZXNlIGJlbG93Ll0gIEhvd2V2ZXIsIHRoZSBjYWxsIHRvCitpc29sYXRlX2xydV9wYWdlKCkgY291bGQgZmFpbCwgaW4gd2hpY2ggY2FzZSB3ZSBjb3VsZG4ndCB0cnlfdG9fbXVubG9jaygpLgorU28sIHdlIGdvIGFoZWFkIGFuZCBjbGVhciBQR19tbG9ja2VkIHVwIGZyb250LCBhcyB0aGlzIG1pZ2h0IGJlIHRoZSBvbmx5IGNoYW5jZQord2UgaGF2ZS4gIElmIHdlIGNhbiBzdWNjZXNzZnVsbHkgaXNvbGF0ZSB0aGUgcGFnZSwgd2UgZ28gYWhlYWQgYW5kCit0cnlfdG9fbXVubG9jaygpLCB3aGljaCB3aWxsIHJlc3RvcmUgdGhlIFBHX21sb2NrZWQgZmxhZyBhbmQgdXBkYXRlIHRoZSB6b25lCitwYWdlIHN0YXRpc3RpY3MgaWYgaXQgZmluZHMgYW5vdGhlciB2bWEgaG9sZGluZyB0aGUgcGFnZSBtbG9ja2VkLiAgSWYgd2UgZmFpbAordG8gaXNvbGF0ZSB0aGUgcGFnZSwgd2UnbGwgaGF2ZSBsZWZ0IGEgcG90ZW50aWFsbHkgbWxvY2tlZCBwYWdlIG9uIHRoZSBMUlUuCitUaGlzIGlzIGZpbmUsIGJlY2F1c2Ugd2UnbGwgY2F0Y2ggaXQgbGF0ZXIgd2hlbi9pZiB2bXNjYW4gdHJpZXMgdG8gcmVjbGFpbSB0aGUKK3BhZ2UuICBUaGlzIHNob3VsZCBiZSByZWxhdGl2ZWx5IHJhcmUuCisKK01sb2NrZWQgUGFnZXM6ICBNaWdyYXRpbmcgVGhlbS4uLgorCitBIHBhZ2UgdGhhdCBpcyBiZWluZyBtaWdyYXRlZCBoYXMgYmVlbiBpc29sYXRlZCBmcm9tIHRoZSBscnUgbGlzdHMgYW5kIGlzCitoZWxkIGxvY2tlZCBhY3Jvc3MgdW5tYXBwaW5nIG9mIHRoZSBwYWdlLCB1cGRhdGluZyB0aGUgcGFnZSdzIG1hcHBpbmcKK1thZGRyZXNzX3NwYWNlXSBlbnRyeSBhbmQgY29weWluZyB0aGUgY29udGVudHMgYW5kIHN0YXRlLCB1bnRpbCB0aGUKK3BhZ2UgdGFibGUgZW50cnkgaGFzIGJlZW4gcmVwbGFjZWQgd2l0aCBhbiBlbnRyeSB0aGF0IHJlZmVycyB0byB0aGUgbmV3CitwYWdlLiAgTGludXggc3VwcG9ydHMgbWlncmF0aW9uIG9mIG1sb2NrZWQgcGFnZXMgYW5kIG90aGVyIHVuZXZpY3RhYmxlCitwYWdlcy4gIFRoaXMgaW52b2x2ZXMgc2ltcGx5IG1vdmluZyB0aGUgUGFnZU1sb2NrZWQgYW5kIFBhZ2VVbmV2aWN0YWJsZSBzdGF0ZXMKK2Zyb20gdGhlIG9sZCBwYWdlIHRvIHRoZSBuZXcgcGFnZS4KKworTm90ZSB0aGF0IHBhZ2UgbWlncmF0aW9uIGNhbiByYWNlIHdpdGggbWxvY2tpbmcgb3IgbXVubG9ja2luZyBvZiB0aGUgc2FtZQorcGFnZS4gIFRoaXMgaGFzIGJlZW4gZGlzY3Vzc2VkIGZyb20gdGhlIG1sb2NrL211bmxvY2sgcGVyc3BlY3RpdmUgaW4gdGhlCityZXNwZWN0aXZlIHNlY3Rpb25zIGFib3ZlLiAgQm90aCBwcm9jZXNzZXMgW21pZ3JhdGlvbiwgbVt1bl1sb2NraW5nXSwgaG9sZAordGhlIHBhZ2UgbG9ja2VkLiAgVGhpcyBwcm92aWRlcyB0aGUgZmlyc3QgbGV2ZWwgb2Ygc3luY2hyb25pemF0aW9uLiAgUGFnZQorbWlncmF0aW9uIHplcm9zIG91dCB0aGUgcGFnZV9tYXBwaW5nIG9mIHRoZSBvbGQgcGFnZSBiZWZvcmUgdW5sb2NraW5nIGl0LAorc28gbVt1bl1sb2NrIGNhbiBza2lwIHRoZXNlIHBhZ2VzIGJ5IHRlc3RpbmcgdGhlIHBhZ2UgbWFwcGluZyB1bmRlciBwYWdlCitsb2NrLgorCitXaGVuIGNvbXBsZXRpbmcgcGFnZSBtaWdyYXRpb24sIHdlIHBsYWNlIHRoZSBuZXcgYW5kIG9sZCBwYWdlcyBiYWNrIG9udG8gdGhlCitscnUgYWZ0ZXIgZHJvcHBpbmcgdGhlIHBhZ2UgbG9jay4gIFRoZSAidW5uZWVkZWQiIHBhZ2UtLW9sZCBwYWdlIG9uIHN1Y2Nlc3MsCituZXcgcGFnZSBvbiBmYWlsdXJlLS13aWxsIGJlIGZyZWVkIHdoZW4gdGhlIHJlZmVyZW5jZSBjb3VudCBoZWxkIGJ5IHRoZQorbWlncmF0aW9uIHByb2Nlc3MgaXMgcmVsZWFzZWQuICBUbyBlbnN1cmUgdGhhdCB3ZSBkb24ndCBzdHJhbmQgcGFnZXMgb24gdGhlCit1bmV2aWN0YWJsZSBsaXN0IGJlY2F1c2Ugb2YgYSByYWNlIGJldHdlZW4gbXVubG9jayBhbmQgbWlncmF0aW9uLCBwYWdlCittaWdyYXRpb24gdXNlcyB0aGUgcHV0YmFja19scnVfcGFnZSgpIGZ1bmN0aW9uIHRvIGFkZCBtaWdyYXRlZCBwYWdlcyBiYWNrIHRvCit0aGUgbHJ1LgorCisKK01sb2NrZWQgUGFnZXM6ICBtbWFwKE1BUF9MT0NLRUQpIFN5c3RlbSBDYWxsIEhhbmRsaW5nCisKK0luIGFkZGl0aW9uIHRoZSB0aGUgbWxvY2soKS9tbG9ja2FsbCgpIHN5c3RlbSBjYWxscywgYW4gYXBwbGljYXRpb24gY2FuIHJlcXVlc3QKK3RoYXQgYSByZWdpb24gb2YgbWVtb3J5IGJlIG1sb2NrZWQgdXNpbmcgdGhlIE1BUF9MT0NLRUQgZmxhZyB3aXRoIHRoZSBtbWFwKCkKK2NhbGwuICBGdXJ0aGVybW9yZSwgYW55IG1tYXAoKSBjYWxsIG9yIGJyaygpIGNhbGwgdGhhdCBleHBhbmRzIHRoZSBoZWFwIGJ5IGEKK3Rhc2sgdGhhdCBoYXMgcHJldmlvdXNseSBjYWxsZWQgbWxvY2thbGwoKSB3aXRoIHRoZSBNQ0xfRlVUVVJFIGZsYWcgd2lsbCByZXN1bHQKK2luIHRoZSBuZXdseSBtYXBwZWQgbWVtb3J5IGJlaW5nIG1sb2NrZWQuICBCZWZvcmUgdGhlIHVuZXZpY3RhYmxlL21sb2NrIGNoYW5nZXMsCit0aGUga2VybmVsIHNpbXBseSBjYWxsZWQgbWFrZV9wYWdlc19wcmVzZW50KCkgdG8gYWxsb2NhdGUgcGFnZXMgYW5kIHBvcHVsYXRlCit0aGUgcGFnZSB0YWJsZS4KKworVG8gbWxvY2sgYSByYW5nZSBvZiBtZW1vcnkgdW5kZXIgdGhlIHVuZXZpY3RhYmxlL21sb2NrIGluZnJhc3RydWN0dXJlLCB0aGUKK21tYXAoKSBoYW5kbGVyIGFuZCB0YXNrIGFkZHJlc3Mgc3BhY2UgZXhwYW5zaW9uIGZ1bmN0aW9ucyBjYWxsCittbG9ja192bWFfcGFnZXNfcmFuZ2UoKSBzcGVjaWZ5aW5nIHRoZSB2bWEgYW5kIHRoZSBhZGRyZXNzIHJhbmdlIHRvIG1sb2NrLgorbWxvY2tfdm1hX3BhZ2VzX3JhbmdlKCkgZmlsdGVycyB2bWFzIGxpa2UgbWxvY2tfZml4dXAoKSwgYXMgZGVzY3JpYmVkIGFib3ZlIGluCisiTWxvY2tlZCBQYWdlczogIEZpbHRlcmluZyBWbWFzIi4gIEl0IHdpbGwgY2xlYXIgdGhlIFZNX0xPQ0tFRCBmbGFnLCB3aGljaCB3aWxsCitoYXZlIGFscmVhZHkgYmVlbiBzZXQgYnkgdGhlIGNhbGxlciwgaW4gZmlsdGVyZWQgdm1hcy4gIFRodXMgdGhlc2Ugdm1hJ3MgbmVlZAorbm90IGJlIHZpc2l0ZWQgZm9yIG11bmxvY2sgd2hlbiB0aGUgcmVnaW9uIGlzIHVubWFwcGVkLgorCitGb3IgIm5vcm1hbCIgdm1hcywgbWxvY2tfdm1hX3BhZ2VzX3JhbmdlKCkgY2FsbHMgX19tbG9ja192bWFfcGFnZXNfcmFuZ2UoKSB0bworZmF1bHQvYWxsb2NhdGUgdGhlIHBhZ2VzIGFuZCBtbG9jayB0aGVtLiAgQWdhaW4sIGxpa2UgbWxvY2tfZml4dXAoKSwKK21sb2NrX3ZtYV9wYWdlc19yYW5nZSgpIGRvd25ncmFkZXMgdGhlIG1tYXAgc2VtYXBob3JlIHRvIHJlYWQgbW9kZSBiZWZvcmUKK2F0dGVtcHRpbmcgdG8gZmF1bHQvYWxsb2NhdGUgYW5kIG1sb2NrIHRoZSBwYWdlczsgYW5kICJ1cGdyYWRlcyIgdGhlIHNlbWFwaG9yZQorYmFjayB0byB3cml0ZSBtb2RlIGJlZm9yZSByZXR1cm5pbmcuCisKK1RoZSBjYWxsZXJzIG9mIG1sb2NrX3ZtYV9wYWdlc19yYW5nZSgpIHdpbGwgaGF2ZSBhbHJlYWR5IGFkZGVkIHRoZSBtZW1vcnkKK3JhbmdlIHRvIGJlIG1sb2NrZWQgdG8gdGhlIHRhc2sncyAibG9ja2VkX3ZtIi4gIFRvIGFjY291bnQgZm9yIGZpbHRlcmVkIHZtYXMsCittbG9ja192bWFfcGFnZXNfcmFuZ2UoKSByZXR1cm5zIHRoZSBudW1iZXIgb2YgcGFnZXMgTk9UIG1sb2NrZWQuICBBbGwgb2YgdGhlCitjYWxsZXJzIHRoZW4gc3VidHJhY3QgYSBub24tbmVnYXRpdmUgcmV0dXJuIHZhbHVlIGZyb20gdGhlIHRhc2sncyBsb2NrZWRfdm0uCitBIG5lZ2F0aXZlIHJldHVybiB2YWx1ZSByZXByZXNlbnQgYW4gZXJyb3ItLWZvciBleGFtcGxlLCBmcm9tIGdldF91c2VyX3BhZ2VzKCkKK2F0dGVtcHRpbmcgdG8gZmF1bHQgaW4gYSB2bWEgd2l0aCBQUk9UX05PTkUgYWNjZXNzLiAgSW4gdGhpcyBjYXNlLCB3ZSBsZWF2ZQordGhlIG1lbW9yeSByYW5nZSBhY2NvdW50ZWQgYXMgbG9ja2VkX3ZtLCBhcyB0aGUgcHJvdGVjdGlvbnMgY291bGQgYmUgY2hhbmdlZAorbGF0ZXIgYW5kIHBhZ2VzIGFsbG9jYXRlZCBpbnRvIHRoYXQgcmVnaW9uLgorCisKK01sb2NrZWQgUGFnZXM6ICBtdW5tYXAoKS9leGl0KCkvZXhlYygpIFN5c3RlbSBDYWxsIEhhbmRsaW5nCisKK1doZW4gdW5tYXBwaW5nIGFuIG1sb2NrZWQgcmVnaW9uIG9mIG1lbW9yeSwgd2hldGhlciBieSBhbiBleHBsaWNpdCBjYWxsIHRvCittdW5tYXAoKSBvciB2aWEgYW4gaW50ZXJuYWwgdW5tYXAgZnJvbSBleGl0KCkgb3IgZXhlYygpIHByb2Nlc3NpbmcsIHdlIG11c3QKK211bmxvY2sgdGhlIHBhZ2VzIGlmIHdlJ3JlIHJlbW92aW5nIHRoZSBsYXN0IFZNX0xPQ0tFRCB2bWEgdGhhdCBtYXBzIHRoZSBwYWdlcy4KK0JlZm9yZSB0aGUgdW5ldmljdGFibGUvbWxvY2sgY2hhbmdlcywgbWxvY2tpbmcgZGlkIG5vdCBtYXJrIHRoZSBwYWdlcyBpbiBhbnkgd2F5LAorc28gdW5tYXBwaW5nIHRoZW0gcmVxdWlyZWQgbm8gcHJvY2Vzc2luZy4KKworVG8gbXVubG9jayBhIHJhbmdlIG9mIG1lbW9yeSB1bmRlciB0aGUgdW5ldmljdGFibGUvbWxvY2sgaW5mcmFzdHJ1Y3R1cmUsIHRoZQorbXVubWFwKCkgaGFuZGVyIGFuZCB0YXNrIGFkZHJlc3Mgc3BhY2UgdGVhciBkb3duIGZ1bmN0aW9uIGNhbGwKK211bmxvY2tfdm1hX3BhZ2VzX2FsbCgpLiAgVGhlIG5hbWUgcmVmbGVjdHMgdGhlIG9ic2VydmF0aW9uIHRoYXQgb25lIGFsd2F5cworc3BlY2lmaWVzIHRoZSBlbnRpcmUgdm1hIHJhbmdlIHdoZW4gbXVubG9jaygpaW5nIGR1cmluZyB1bm1hcCBvZiBhIHJlZ2lvbi4KK0JlY2F1c2Ugb2YgdGhlIHZtYSBmaWx0ZXJpbmcgd2hlbiBtbG9ja2luZygpIHJlZ2lvbnMsIG9ubHkgIm5vcm1hbCIgdm1hcyB0aGF0CithY3R1YWxseSBjb250YWluIG1sb2NrZWQgcGFnZXMgd2lsbCBiZSBwYXNzZWQgdG8gbXVubG9ja192bWFfcGFnZXNfYWxsKCkuCisKK211bmxvY2tfdm1hX3BhZ2VzX2FsbCgpIGNsZWFycyB0aGUgVk1fTE9DS0VEIHZtYSBmbGFnIGFuZCwgbGlrZSBtbG9ja19maXh1cCgpCitmb3IgdGhlIG11bmxvY2sgY2FzZSwgY2FsbHMgX19tdW5sb2NrX3ZtYV9wYWdlc19yYW5nZSgpIHRvIHdhbGsgdGhlIHBhZ2UgdGFibGUKK2ZvciB0aGUgdm1hJ3MgbWVtb3J5IHJhbmdlIGFuZCBtdW5sb2NrX3ZtYV9wYWdlKCkgZWFjaCByZXNpZGVudCBwYWdlIG1hcHBlZCBieQordGhlIHZtYS4gIFRoaXMgZWZmZWN0aXZlbHkgbXVubG9ja3MgdGhlIHBhZ2UsIG9ubHkgaWYgdGhpcyBpcyB0aGUgbGFzdAorVk1fTE9DS0VEIHZtYSB0aGF0IG1hcHMgdGhlIHBhZ2UuCisKKworTWxvY2tlZCBQYWdlOiAgdHJ5X3RvX3VubWFwKCkKKworW05vdGU6ICB0aGUgY29kZSBjaGFuZ2VzIHJlcHJlc2VudGVkIGJ5IHRoaXMgc2VjdGlvbiBhcmUgcmVhbGx5IHF1aXRlIHNtYWxsCitjb21wYXJlZCB0byB0aGUgdGV4dCB0byBkZXNjcmliZSB3aGF0IGhhcHBlbmluZyBhbmQgd2h5LCBhbmQgdG8gZGlzY3VzcyB0aGUKK2ltcGxpY2F0aW9ucy5dCisKK1BhZ2VzIGNhbiwgb2YgY291cnNlLCBiZSBtYXBwZWQgaW50byBtdWx0aXBsZSB2bWFzLiAgU29tZSBvZiB0aGVzZSB2bWFzIG1heQoraGF2ZSBWTV9MT0NLRUQgZmxhZyBzZXQuICBJdCBpcyBwb3NzaWJsZSBmb3IgYSBwYWdlIG1hcHBlZCBpbnRvIG9uZSBvciBtb3JlCitWTV9MT0NLRUQgdm1hcyBub3QgdG8gaGF2ZSB0aGUgUEdfbWxvY2tlZCBmbGFnIHNldCBhbmQgdGhlcmVmb3JlIHJlc2lkZSBvbiBvbmUKK29mIHRoZSBhY3RpdmUgb3IgaW5hY3RpdmUgTFJVIGxpc3RzLiAgVGhpcyBjb3VsZCBoYXBwZW4gaWYsIGZvciBleGFtcGxlLCBhCit0YXNrIGluIHRoZSBwcm9jZXNzIG9mIG11bmxvY2soKWluZyB0aGUgcGFnZSBjb3VsZCBub3QgaXNvbGF0ZSB0aGUgcGFnZSBmcm9tCit0aGUgTFJVLiAgQXMgYSByZXN1bHQsIHZtc2Nhbi9zaHJpbmtfcGFnZV9saXN0KCkgbWlnaHQgZW5jb3VudGVyIHN1Y2ggYSBwYWdlCithcyBkZXNjcmliZWQgaW4gIlVuZXZpY3RhYmxlIFBhZ2VzIGFuZCBWbXNjYW4gW3Nocmlua18qX2xpc3QoKV0iLiAgVG8KK2hhbmRsZSB0aGlzIHNpdHVhdGlvbiwgdHJ5X3RvX3VubWFwKCkgaGFzIGJlZW4gZW5oYW5jZWQgdG8gY2hlY2sgZm9yIFZNX0xPQ0tFRAordm1hcyB3aGlsZSBpdCBpcyB3YWxraW5nIGEgcGFnZSdzIHJldmVyc2UgbWFwLgorCit0cnlfdG9fdW5tYXAoKSBpcyBhbHdheXMgY2FsbGVkLCBieSBlaXRoZXIgdm1zY2FuIGZvciByZWNsYWltIG9yIGZvciBwYWdlCittaWdyYXRpb24sIHdpdGggdGhlIGFyZ3VtZW50IHBhZ2UgbG9ja2VkIGFuZCBpc29sYXRlZCBmcm9tIHRoZSBMUlUuICBCVUdfT04oKQorYXNzZXJ0aW9ucyBlbmZvcmNlIHRoaXMgcmVxdWlyZW1lbnQuICBTZXBhcmF0ZSBmdW5jdGlvbnMgaGFuZGxlIGFub255bW91cyBhbmQKK21hcHBlZCBmaWxlIHBhZ2VzLCBhcyB0aGVzZSB0eXBlcyBvZiBwYWdlcyBoYXZlIGRpZmZlcmVudCByZXZlcnNlIG1hcAorbWVjaGFuaXNtcy4KKworCXRyeV90b191bm1hcF9hbm9uKCkKKworVG8gdW5tYXAgYW5vbnltb3VzIHBhZ2VzLCBlYWNoIHZtYSBpbiB0aGUgbGlzdCBhbmNob3JlZCBpbiB0aGUgYW5vbl92bWEgbXVzdCBiZQordmlzaXRlZC0tYXQgbGVhc3QgdW50aWwgYSBWTV9MT0NLRUQgdm1hIGlzIGVuY291bnRlcmVkLiAgSWYgdGhlIHBhZ2UgaXMgYmVpbmcKK3VubWFwcGVkIGZvciBtaWdyYXRpb24sIFZNX0xPQ0tFRCB2bWFzIGRvIG5vdCBzdG9wIHRoZSBwcm9jZXNzIGJlY2F1c2UgbWxvY2tlZAorcGFnZXMgYXJlIG1pZ3JhdGFibGUuICBIb3dldmVyLCBmb3IgcmVjbGFpbSwgaWYgdGhlIHBhZ2UgaXMgbWFwcGVkIGludG8gYQorVk1fTE9DS0VEIHZtYSwgdGhlIHNjYW4gc3RvcHMuICB0cnlfdG9fdW5tYXAoKSBhdHRlbXB0cyB0byBhY3F1aXJlIHRoZSBtbWFwCitzZW1waG9yZSBvZiB0aGUgbW1fc3RydWN0IHRvIHdoaWNoIHRoZSB2bWEgYmVsb25ncyBpbiByZWFkIG1vZGUuICBJZiB0aGlzIGlzCitzdWNjZXNzZnVsLCB0cnlfdG9fdW5tYXAoKSB3aWxsIG1sb2NrIHRoZSBwYWdlIHZpYSBtbG9ja192bWFfcGFnZSgpLS13ZQord291bGRuJ3QgaGF2ZSBnb3R0ZW4gdG8gdHJ5X3RvX3VubWFwKCkgaWYgdGhlIHBhZ2Ugd2VyZSBhbHJlYWR5IG1sb2NrZWQtLWFuZAord2lsbCByZXR1cm4gU1dBUF9NTE9DSywgaW5kaWNhdGluZyB0aGF0IHRoZSBwYWdlIGlzIHVuZXZpY3RhYmxlLiAgSWYgdGhlCittbWFwIHNlbWFwaG9yZSBjYW5ub3QgYmUgYWNxdWlyZWQsIHdlIGFyZSBub3Qgc3VyZSB3aGV0aGVyIHRoZSBwYWdlIGlzIHJlYWxseQordW5ldmljdGFibGUgb3Igbm90LiAgSW4gdGhpcyBjYXNlLCB0cnlfdG9fdW5tYXAoKSB3aWxsIHJldHVybiBTV0FQX0FHQUlOLgorCisJdHJ5X3RvX3VubWFwX2ZpbGUoKSAtLSBsaW5lYXIgbWFwcGluZ3MKKworVW5tYXBwaW5nIG9mIGEgbWFwcGVkIGZpbGUgcGFnZSB3b3JrcyB0aGUgc2FtZSwgZXhjZXB0IHRoYXQgdGhlIHNjYW4gdmlzaXRzCithbGwgdm1hcyB0aGF0IG1hcHMgdGhlIHBhZ2UncyBpbmRleC9wYWdlIG9mZnNldCBpbiB0aGUgcGFnZSdzIG1hcHBpbmcncworcmV2ZXJzZSBtYXAgcHJpb3JpdHkgc2VhcmNoIHRyZWUuICBJdCBtdXN0IGFsc28gdmlzaXQgZWFjaCB2bWEgaW4gdGhlIHBhZ2UncworbWFwcGluZydzIG5vbi1saW5lYXIgbGlzdCwgaWYgdGhlIGxpc3QgaXMgbm9uLWVtcHR5LiAgQXMgZm9yIGFub255bW91cyBwYWdlcywKK29uIGVuY291bnRlcmluZyBhIFZNX0xPQ0tFRCB2bWEgZm9yIGEgbWFwcGVkIGZpbGUgcGFnZSwgdHJ5X3RvX3VubWFwKCkgd2lsbAorYXR0ZW1wdCB0byBhY3F1aXJlIHRoZSBhc3NvY2lhdGVkIG1tX3N0cnVjdCdzIG1tYXAgc2VtYXBob3JlIHRvIG1sb2NrIHRoZSBwYWdlLAorcmV0dXJuaW5nIFNXQVBfTUxPQ0sgaWYgdGhpcyBpcyBzdWNjZXNzZnVsLCBhbmQgU1dBUF9BR0FJTiwgaWYgbm90LgorCisJdHJ5X3RvX3VubWFwX2ZpbGUoKSAtLSBub24tbGluZWFyIG1hcHBpbmdzCisKK0lmIGEgcGFnZSdzIG1hcHBpbmcgY29udGFpbnMgYSBub24tZW1wdHkgbm9uLWxpbmVhciBtYXBwaW5nIHZtYSBsaXN0LCB0aGVuCit0cnlfdG9fdW57bWFwfGxvY2t9KCkgbXVzdCBhbHNvIHZpc2l0IGVhY2ggdm1hIGluIHRoYXQgbGlzdCB0byBkZXRlcm1pbmUKK3doZXRoZXIgdGhlIHBhZ2UgaXMgbWFwcGVkIGluIGEgVk1fTE9DS0VEIHZtYS4gIEFnYWluLCB0aGUgc2NhbiBtdXN0IHZpc2l0CithbGwgdm1hcyBpbiB0aGUgbm9uLWxpbmVhciBsaXN0IHRvIGVuc3VyZSB0aGF0IHRoZSBwYWdlcyBpcyBub3Qvc2hvdWxkIG5vdCBiZQorbWxvY2tlZC4gIElmIGEgVk1fTE9DS0VEIHZtYSBpcyBmb3VuZCBpbiB0aGUgbGlzdCwgdGhlIHNjYW4gY291bGQgdGVybWluYXRlLgorSG93ZXZlciwgdGhlcmUgaXMgbm8gZWFzeSB3YXkgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhlIHBhZ2UgaXMgYWN0dWFsbHkgbWFwcGVkCitpbiBhIGdpdmVuIHZtYS0tZWl0aGVyIGZvciB1bm1hcHBpbmcgb3IgdGVzdGluZyB3aGV0aGVyIHRoZSBWTV9MT0NLRUQgdm1hCithY3R1YWxseSBwaW5zIHRoZSBwYWdlLgorCitTbywgdHJ5X3RvX3VubWFwX2ZpbGUoKSBoYW5kbGVzIG5vbi1saW5lYXIgbWFwcGluZ3MgYnkgc2Nhbm5pbmcgYSBjZXJ0YWluCitudW1iZXIgb2YgcGFnZXMtLWEgImNsdXN0ZXIiLS1pbiBlYWNoIG5vbi1saW5lYXIgdm1hIGFzc29jaWF0ZWQgd2l0aCB0aGUgcGFnZSdzCittYXBwaW5nLCBmb3IgZWFjaCBmaWxlIG1hcHBlZCBwYWdlIHRoYXQgdm1zY2FuIHRyaWVzIHRvIHVubWFwLiAgSWYgdGhpcyBoYXBwZW5zCit0byB1bm1hcCB0aGUgcGFnZSB3ZSdyZSB0cnlpbmcgdG8gdW5tYXAsIHRyeV90b191bm1hcCgpIHdpbGwgbm90aWNlIHRoaXMgb24KK3JldHVybi0tKHBhZ2VfbWFwY291bnQocGFnZSkgPT0gMCktLWFuZCByZXR1cm4gU1dBUF9TVUNDRVNTLiAgT3RoZXJ3aXNlLCBpdAord2lsbCByZXR1cm4gU1dBUF9BR0FJTiwgY2F1c2luZyB2bXNjYW4gdG8gcmVjaXJjdWxhdGUgdGhpcyBwYWdlLiAgV2UgdGFrZQorYWR2YW50YWdlIG9mIHRoZSBjbHVzdGVyIHNjYW4gaW4gdHJ5X3RvX3VubWFwX2NsdXN0ZXIoKSBhcyBmb2xsb3dzOgorCitGb3IgZWFjaCBub24tbGluZWFyIHZtYSwgdHJ5X3RvX3VubWFwX2NsdXN0ZXIoKSBhdHRlbXB0cyB0byBhY3F1aXJlIHRoZSBtbWFwCitzZW1hcGhvcmUgb2YgdGhlIGFzc29jaWF0ZWQgbW1fc3RydWN0IGZvciByZWFkIHdpdGhvdXQgYmxvY2tpbmcuICBJZiB0aGlzCithdHRlbXB0IGlzIHN1Y2Nlc3NmdWwgYW5kIHRoZSB2bWEgaXMgVk1fTE9DS0VELCB0cnlfdG9fdW5tYXBfY2x1c3RlcigpIHdpbGwKK3JldGFpbiB0aGUgbW1hcCBzZW1hcGhvcmUgZm9yIHRoZSBzY2FuOyBvdGhlcndpc2UgaXQgZHJvcHMgaXQgaGVyZS4gIFRoZW4sCitmb3IgZWFjaCBwYWdlIGluIHRoZSBjbHVzdGVyLCBpZiB3ZSdyZSBob2xkaW5nIHRoZSBtbWFwIHNlbWFwaG9yZSBmb3IgYSBsb2NrZWQKK3ZtYSwgdHJ5X3RvX3VubWFwX2NsdXN0ZXIoKSBjYWxscyBtbG9ja192bWFfcGFnZSgpIHRvIG1sb2NrIHRoZSBwYWdlLiAgVGhpcworY2FsbCBpcyBhIG5vLW9wIGlmIHRoZSBwYWdlIGlzIGFscmVhZHkgbG9ja2VkLCBidXQgd2lsbCBtbG9jayBhbnkgcGFnZXMgaW4KK3RoZSBub24tbGluZWFyIG1hcHBpbmcgdGhhdCBoYXBwZW4gdG8gYmUgdW5sb2NrZWQuICBJZiBvbmUgb2YgdGhlIHBhZ2VzIHNvCittbG9ja2VkIGlzIHRoZSBwYWdlIHBhc3NlZCBpbiB0byB0cnlfdG9fdW5tYXAoKSwgdHJ5X3RvX3VubWFwX2NsdXN0ZXIoKSB3aWxsCityZXR1cm4gU1dBUF9NTE9DSywgcmF0aGVyIHRoYW4gdGhlIGRlZmF1bHQgU1dBUF9BR0FJTi4gIFRoaXMgd2lsbCBhbGxvdyB2bXNjYW4KK3RvIGN1bGwgdGhlIHBhZ2UsIHJhdGhlciB0aGFuIHJlY2lyY3VsYXRpbmcgaXQgb24gdGhlIGluYWN0aXZlIGxpc3QuICBBZ2FpbiwKK2lmIHRyeV90b191bm1hcF9jbHVzdGVyKCkgY2Fubm90IGFjcXVpcmUgdGhlIHZtYSdzIG1tYXAgc2VtLCBpdCByZXR1cm5zCitTV0FQX0FHQUlOLCBpbmRpY2F0aW5nIHRoYXQgdGhlIHBhZ2UgaXMgbWFwcGVkIGJ5IGEgVk1fTE9DS0VEIHZtYSwgYnV0Citjb3VsZG4ndCBiZSBtbG9ja2VkLgorCisKK01sb2NrZWQgcGFnZXM6ICB0cnlfdG9fbXVubG9jaygpIFJldmVyc2UgTWFwIFNjYW4KKworVE9ETy9GSVhNRTogIGEgYmV0dGVyIG5hbWUgbWlnaHQgYmUgcGFnZV9tbG9ja2VkKCktLWFuYWxvZ291cyB0byB0aGUKK3BhZ2VfcmVmZXJlbmNlZCgpIHJldmVyc2UgbWFwIHdhbGtlci0tZXNwZWNpYWxseSBpZiB3ZSBjb250aW51ZSB0byBjYWxsIHRoaXMKK2Zyb20gc2hyaW5rX3BhZ2VfbGlzdCgpLiAgU2VlIHJlbGF0ZWQgVE9ETy9GSVhNRSBiZWxvdy4KKworV2hlbiBtdW5sb2NrX3ZtYV9wYWdlKCktLXNlZSAiTWxvY2tlZCBQYWdlczogIG11bmxvY2soKS9tdW5sb2NrYWxsKCkgU3lzdGVtCitDYWxsIEhhbmRsaW5nIiBhYm92ZS0tdHJpZXMgdG8gbXVubG9jayBhIHBhZ2UsIG9yIHdoZW4gc2hyaW5rX3BhZ2VfbGlzdCgpCitlbmNvdW50ZXJzIGFuIGFub255bW91cyBwYWdlIHRoYXQgaXMgbm90IHlldCBpbiB0aGUgc3dhcCBjYWNoZSwgdGhleSBuZWVkIHRvCitkZXRlcm1pbmUgd2hldGhlciBvciBub3QgdGhlIHBhZ2UgaXMgbWFwcGVkIGJ5IGFueSBWTV9MT0NLRUQgdm1hLCB3aXRob3V0CithY3R1YWxseSBhdHRlbXB0aW5nIHRvIHVubWFwIGFsbCBwdGVzIGZyb20gdGhlIHBhZ2UuICBGb3IgdGhpcyBwdXJwb3NlLCB0aGUKK3VuZXZpY3RhYmxlL21sb2NrIGluZnJhc3RydWN0dXJlIGludHJvZHVjZWQgYSB2YXJpYW50IG9mIHRyeV90b191bm1hcCgpIGNhbGxlZAordHJ5X3RvX211bmxvY2soKS4KKwordHJ5X3RvX211bmxvY2soKSBjYWxscyB0aGUgc2FtZSBmdW5jdGlvbnMgYXMgdHJ5X3RvX3VubWFwKCkgZm9yIGFub255bW91cyBhbmQKK21hcHBlZCBmaWxlIHBhZ2VzIHdpdGggYW4gYWRkaXRpb25hbCBhcmd1bWVudCBzcGVjaWZpbmcgdW5sb2NrIHZlcnN1cyB1bm1hcAorcHJvY2Vzc2luZy4gIEFnYWluLCB0aGVzZSBmdW5jdGlvbnMgd2FsayB0aGUgcmVzcGVjdGl2ZSByZXZlcnNlIG1hcHMgbG9va2luZworZm9yIFZNX0xPQ0tFRCB2bWFzLiAgV2hlbiBzdWNoIGEgdm1hIGlzIGZvdW5kIGZvciBhbm9ueW1vdXMgcGFnZXMgYW5kIGZpbGUKK3BhZ2VzIG1hcHBlZCBpbiBsaW5lYXIgVk1BcywgYXMgaW4gdGhlIHRyeV90b191bm1hcCgpIGNhc2UsIHRoZSBmdW5jdGlvbnMKK2F0dGVtcHQgdG8gYWNxdWlyZSB0aGUgYXNzb2NpYXRlZCBtbWFwIHNlbXBob3JlLCBtbG9jayB0aGUgcGFnZSB2aWEKK21sb2NrX3ZtYV9wYWdlKCkgYW5kIHJldHVybiBTV0FQX01MT0NLLiAgVGhpcyBlZmZlY3RpdmVseSB1bmRvZXMgdGhlCitwcmUtY2xlYXJpbmcgb2YgdGhlIHBhZ2UncyBQR19tbG9ja2VkIGRvbmUgYnkgbXVubG9ja192bWFfcGFnZSgpIGFuZCBpbmZvcm1zCitzaHJpbmtfcGFnZV9saXN0KCkgdGhhdCB0aGUgYW5vbnltb3VzIHBhZ2Ugc2hvdWxkIGJlIGN1bGxlZCByYXRoZXIgdGhhbiBhZGRlZAordG8gdGhlIHN3YXAgY2FjaGUgaW4gcHJlcGFyYXRpb24gZm9yIGEgdHJ5X3RvX3VubWFwKCkgdGhhdCB3aWxsIGFsbW9zdAorY2VydGFpbmx5IGZhaWwuCisKK0lmIHRyeV90b191bm1hcCgpIGlzIHVuYWJsZSB0byBhY3F1aXJlIGEgVk1fTE9DS0VEIHZtYSdzIGFzc29jaWF0ZWQgbW1hcAorc2VtYXBob3JlLCBpdCB3aWxsIHJldHVybiBTV0FQX0FHQUlOLiAgVGhpcyB3aWxsIGFsbG93IHNocmlua19wYWdlX2xpc3QoKQordG8gcmVjeWNsZSB0aGUgcGFnZSBvbiB0aGUgaW5hY3RpdmUgbGlzdCBhbmQgaG9wZSB0aGF0IGl0IGhhcyBiZXR0ZXIgbHVjaword2l0aCB0aGUgcGFnZSBuZXh0IHRpbWUuCisKK0ZvciBmaWxlIHBhZ2VzIG1hcHBlZCBpbnRvIG5vbi1saW5lYXIgdm1hcywgdGhlIHRyeV90b19tdW5sb2NrKCkgbG9naWMgd29ya3MKK3NsaWdodGx5IGRpZmZlcmVudGx5LiAgT24gZW5jb3VudGVyaW5nIGEgVk1fTE9DS0VEIG5vbi1saW5lYXIgdm1hIHRoYXQgbWlnaHQKK21hcCB0aGUgcGFnZSwgdHJ5X3RvX211bmxvY2soKSByZXR1cm5zIFNXQVBfQUdBSU4gd2l0aG91dCBhY3R1YWxseSBtbG9ja2luZwordGhlIHBhZ2UuICBtdW5sb2NrX3ZtYV9wYWdlKCkgd2lsbCBqdXN0IGxlYXZlIHRoZSBwYWdlIHVubG9ja2VkIGFuZCBsZXQKK3Ztc2NhbiBkZWFsIHdpdGggaXQtLXRoZSB1c3VhbCBmYWxsYmFjayBwb3NpdGlvbi4KKworTm90ZSB0aGF0IHRyeV90b19tdW5sb2NrKCkncyByZXZlcnNlIG1hcCB3YWxrIG11c3QgdmlzaXQgZXZlcnkgdm1hIGluIGEgcGFnZXMnCityZXZlcnNlIG1hcCB0byBkZXRlcm1pbmUgdGhhdCBhIHBhZ2UgaXMgTk9UIG1hcHBlZCBpbnRvIGFueSBWTV9MT0NLRUQgdm1hLgorSG93ZXZlciwgdGhlIHNjYW4gY2FuIHRlcm1pbmF0ZSB3aGVuIGl0IGVuY291bnRlcnMgYSBWTV9MT0NLRUQgdm1hIGFuZCBjYW4KK3N1Y2Nlc3NmdWxseSBhY3F1aXJlIHRoZSB2bWEncyBtbWFwIHNlbXBob3JlIGZvciByZWFkIGFuZCBtbG9jayB0aGUgcGFnZS4KK0FsdGhvdWdoIHRyeV90b19tdW5sb2NrKCkgY2FuIGJlIGNhbGxlZCBtYW55IFt2ZXJ5IG1hbnkhXSB0aW1lcyB3aGVuCittdW5sb2NrKClpbmcgYSBsYXJnZSByZWdpb24gb3IgdGVhcmluZyBkb3duIGEgbGFyZ2UgYWRkcmVzcyBzcGFjZSB0aGF0IGhhcyBiZWVuCittbG9ja2VkIHZpYSBtbG9ja2FsbCgpLCBvdmVyYWxsIHRoaXMgaXMgYSBmYWlybHkgcmFyZSBldmVudC4gIEluIGFkZGl0aW9uLAorYWx0aG91Z2ggc2hyaW5rX3BhZ2VfbGlzdCgpIGNhbGxzIHRyeV90b19tdW5sb2NrKCkgZm9yIGV2ZXJ5IGFub255bW91cyBwYWdlIHRoYXQKK2l0IGhhbmRsZXMgdGhhdCBpcyBub3QgeWV0IGluIHRoZSBzd2FwIGNhY2hlLCBvbiBhdmVyYWdlIGFub255bW91cyBwYWdlcyB3aWxsCitoYXZlIHZlcnkgc2hvcnQgcmV2ZXJzZSBtYXAgbGlzdHMuCisKK01sb2NrZWQgUGFnZTogIFBhZ2UgUmVjbGFpbSBpbiBzaHJpbmtfKl9saXN0KCkKKworc2hyaW5rX2FjdGl2ZV9saXN0KCkgY3VsbHMgYW55IG9idmlvdXNseSB1bmV2aWN0YWJsZSBwYWdlcy0taS5lLiwKKyFwYWdlX2V2aWN0YWJsZShwYWdlLCBOVUxMKS0tZGl2ZXJ0aW5nIHRoZXNlIHRvIHRoZSB1bmV2aWN0YWJsZSBscnUKK2xpc3QuICBIb3dldmVyLCBzaHJpbmtfYWN0aXZlX2xpc3QoKSBvbmx5IHNlZXMgdW5ldmljdGFibGUgcGFnZXMgdGhhdAorbWFkZSBpdCBvbnRvIHRoZSBhY3RpdmUvaW5hY3RpdmUgbHJ1IGxpc3RzLiAgTm90ZSB0aGF0IHRoZXNlIHBhZ2VzIGRvIG5vdAoraGF2ZSBQYWdlVW5ldmljdGFibGUgc2V0LS1vdGhlcndpc2UsIHRoZXkgd291bGQgYmUgb24gdGhlIHVuZXZpY3RhYmxlIGxpc3QgYW5kCitzaHJpbmtfYWN0aXZlX2xpc3Qgd291bGQgbmV2ZXIgc2VlIHRoZW0uCisKK1NvbWUgZXhhbXBsZXMgb2YgdGhlc2UgdW5ldmljdGFibGUgcGFnZXMgb24gdGhlIExSVSBsaXN0cyBhcmU6CisKKzEpIHJhbWZzIHBhZ2VzIHRoYXQgaGF2ZSBiZWVuIHBsYWNlZCBvbiB0aGUgbHJ1IGxpc3RzIHdoZW4gZmlyc3QgYWxsb2NhdGVkLgorCisyKSBTSE1fTE9DS2VkIHNoYXJlZCBtZW1vcnkgcGFnZXMuICBzaG1jdGwoU0hNX0xPQ0spIGRvZXMgbm90IGF0dGVtcHQgdG8KKyAgIGFsbG9jYXRlIG9yIGZhdWx0IGluIHRoZSBwYWdlcyBpbiB0aGUgc2hhcmVkIG1lbW9yeSByZWdpb24uICBUaGlzIGhhcHBlbnMKKyAgIHdoZW4gYW4gYXBwbGljYXRpb24gYWNjZXNzZXMgdGhlIHBhZ2UgdGhlIGZpcnN0IHRpbWUgYWZ0ZXIgU0hNX0xPQ0tpbmcKKyAgIHRoZSBzZWdtZW50LgorCiszKSBNbG9ja2VkIHBhZ2VzIHRoYXQgY291bGQgbm90IGJlIGlzb2xhdGVkIGZyb20gdGhlIGxydSBhbmQgbW92ZWQgdG8gdGhlCisgICB1bmV2aWN0YWJsZSBsaXN0IGluIG1sb2NrX3ZtYV9wYWdlKCkuCisKKzMpIFBhZ2VzIG1hcHBlZCBpbnRvIG11bHRpcGxlIFZNX0xPQ0tFRCB2bWFzLCBidXQgdHJ5X3RvX211bmxvY2soKSBjb3VsZG4ndAorICAgYWNxdWlyZSB0aGUgdm1hJ3MgbW1hcCBzZW1hcGhvcmUgdG8gdGVzdCB0aGUgZmxhZ3MgYW5kIHNldCBQYWdlTWxvY2tlZC4KKyAgIG11bmxvY2tfdm1hX3BhZ2UoKSB3YXMgZm9yY2VkIHRvIGxldCB0aGUgcGFnZSBiYWNrIG9uIHRvIHRoZSBub3JtYWwKKyAgIExSVSBsaXN0IGZvciB2bXNjYW4gdG8gaGFuZGxlLgorCitzaHJpbmtfaW5hY3RpdmVfbGlzdCgpIGFsc28gY3VsbHMgYW55IHVuZXZpY3RhYmxlIHBhZ2VzIHRoYXQgaXQgZmluZHMKK29uIHRoZSBpbmFjdGl2ZSBsaXN0cywgYWdhaW4gZGl2ZXJ0aW5nIHRoZW0gdG8gdGhlIGFwcHJvcHJpYXRlIHpvbmUncyB1bmV2aWN0YWJsZQorbHJ1IGxpc3QuICBzaHJpbmtfaW5hY3RpdmVfbGlzdCgpIHNob3VsZCBvbmx5IHNlZSBTSE1fTE9DS2VkIHBhZ2VzIHRoYXQgYmVjYW1lCitTSE1fTE9DS2VkIGFmdGVyIHNocmlua19hY3RpdmVfbGlzdCgpIGhhZCBtb3ZlZCB0aGVtIHRvIHRoZSBpbmFjdGl2ZSBsaXN0LCBvcgorcGFnZXMgbWFwcGVkIGludG8gVk1fTE9DS0VEIHZtYXMgdGhhdCBtdW5sb2NrX3ZtYV9wYWdlKCkgY291bGRuJ3QgaXNvbGF0ZSBmcm9tCit0aGUgbHJ1IHRvIHJlY2hlY2sgdmlhIHRyeV90b19tdW5sb2NrKCkuICBzaHJpbmtfaW5hY3RpdmVfbGlzdCgpIHdvbid0IG5vdGljZQordGhlIGxhdHRlciwgYnV0IHdpbGwgcGFzcyBvbiB0byBzaHJpbmtfcGFnZV9saXN0KCkuCisKK3Nocmlua19wYWdlX2xpc3QoKSBhZ2FpbiBjdWxscyBvYnZpb3VzbHkgdW5ldmljdGFibGUgcGFnZXMgdGhhdCBpdCBjb3VsZAorZW5jb3VudGVyIGZvciBzaW1pbGFyIHJlYXNvbiB0byBzaHJpbmtfaW5hY3RpdmVfbGlzdCgpLiAgQXMgYWxyZWFkeSBkaXNjdXNzZWQsCitzaHJpbmtfcGFnZV9saXN0KCkgcHJvYWN0aXZlbHkgbG9va3MgZm9yIGFub255bW91cyBwYWdlcyB0aGF0IHNob3VsZCBoYXZlCitQR19tbG9ja2VkIHNldCBidXQgZG9uJ3QtLXRoZXNlIHdvdWxkIG5vdCBiZSBkZXRlY3RlZCBieSBwYWdlX2V2aWN0YWJsZSgpLS10bworYXZvaWQgYWRkaW5nIHRoZW0gdG8gdGhlIHN3YXAgY2FjaGUgdW5uZWNlc3NhcmlseS4gIEZpbGUgcGFnZXMgbWFwcGVkIGludG8KK1ZNX0xPQ0tFRCB2bWFzIGJ1dCB3aXRob3V0IFBHX21sb2NrZWQgc2V0IHdpbGwgbWFrZSBpdCBhbGwgdGhlIHdheSB0bwordHJ5X3RvX3VubWFwKCkuICBzaHJpbmtfcGFnZV9saXN0KCkgd2lsbCBkaXZlcnQgdGhlbSB0byB0aGUgdW5ldmljdGFibGUgbGlzdCB3aGVuCit0cnlfdG9fdW5tYXAoKSByZXR1cm5zIFNXQVBfTUxPQ0ssIGFzIGRpc2N1c3NlZCBhYm92ZS4KKworVE9ETy9GSVhNRTogIElmIHdlIGNhbiBlbmhhbmNlIHRoZSBzd2FwIGNhY2hlIHRvIHJlbGlhYmx5IHJlbW92ZSBlbnRyaWVzCit3aXRoIHBhZ2VfY291bnQocGFnZSkgPiAyLCBhcyBsb25nIGFzIGFsbCBwdGVzIGFyZSBtYXBwZWQgdG8gdGhlIHBhZ2UgYW5kCitub3QgdGhlIHN3YXAgZW50cnksIHdlIGNhbiBwcm9iYWJseSByZW1vdmUgdGhlIGNhbGwgdG8gdHJ5X3RvX211bmxvY2soKSBpbgorc2hyaW5rX3BhZ2VfbGlzdCgpIGFuZCBqdXN0IHJlbW92ZSB0aGUgcGFnZSBmcm9tIHRoZSBzd2FwIGNhY2hlIHdoZW4KK3RyeV90b191bm1hcCgpIHJldHVybnMgU1dBUF9NTE9DSy4gICBDdXJyZW50bHksIHJlbW92ZV9leGNsdXNpdmVfc3dhcF9wYWdlKCkKK2RvZXNuJ3Qgc2VlbSB0byBhbGxvdyB0aGF0LgorCisKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdzEvMDAtSU5ERVggYi9Eb2N1bWVudGF0aW9uL3cxLzAwLUlOREVYCmluZGV4IDUyNzBjZjQuLmNiNDk4MDIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vdzEvMDAtSU5ERVgKKysrIGIvRG9jdW1lbnRhdGlvbi93MS8wMC1JTkRFWApAQCAtMSw1ICsxLDcgQEAKIDAwLUlOREVYCiAJLSBUaGlzIGZpbGUKK3NsYXZlcy8KKwktIERyaXZlcnMgdGhhdCBwcm92aWRlIHN1cHBvcnQgZm9yIHNwZWNpZmljIGZhbWlseSBjb2Rlcy4KIG1hc3RlcnMvCiAJLSBJbmRpdmlkdWFsIGNoaXBzIHByb3ZpZGluZyAxLXdpcmUgYnVzc2VzLgogdzEuZ2VuZXJpYwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi93MS9tYXN0ZXJzL2RzMjQ5MCBiL0RvY3VtZW50YXRpb24vdzEvbWFzdGVycy9kczI0OTAKaW5kZXggMjM5ZjlhZS4uMjgxNzZkZSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi93MS9tYXN0ZXJzL2RzMjQ5MAorKysgYi9Eb2N1bWVudGF0aW9uL3cxL21hc3RlcnMvZHMyNDkwCkBAIC0xNiwzICsxNiw1NSBAQAogRFM5NDkwKFIpIGlzIGEgVVNCIDwtPiBXMSBidXMgbWFzdGVyIGRldmljZQogd2hpY2ggaGFzIDB4ODEgZmFtaWx5IElEIGludGVncmF0ZWQgY2hpcCBhbmQgRFMyNDkwCiBsb3ctbGV2ZWwgb3BlcmF0aW9uYWwgY2hpcC4KKworTm90ZXMgYW5kIGxpbWl0YXRpb25zLgorLSBUaGUgd2VhayBwdWxsdXAgY3VycmVudCBpcyBhIG1pbmltdW0gb2YgMC45bUEgYW5kIG1heGltdW0gb2YgNi4wbUEuCistIFRoZSA1ViBzdHJvbmcgcHVsbHVwIGlzIHN1cHBvcnRlZCB3aXRoIGEgbWluaW11bSBvZiA1LjltQSBhbmQgYQorICBtYXhpbXVtIG9mIDMwLjQgbUEuICAoRnJvbSBEUzI0OTAucGRmKQorLSBXaGlsZSB0aGUgZHMyNDkwIHN1cHBvcnRzIGEgaGFyZHdhcmUgc2VhcmNoIHRoZSBjb2RlIGRvZXNuJ3QgdGFrZQorICBhZHZhbnRhZ2Ugb2YgaXQgKGluIHRlc3RlZCBjYXNlIGl0IG9ubHkgcmV0dXJuZWQgZmlyc3QgZGV2aWNlKS4KKy0gVGhlIGhhcmR3YXJlIHdpbGwgZGV0ZWN0IHdoZW4gZGV2aWNlcyBhcmUgYXR0YWNoZWQgdG8gdGhlIGJ1cyBvbiB0aGUKKyAgbmV4dCBidXMgKHJlc2V0Pykgb3BlcmF0aW9uLCBob3dldmVyIG9ubHkgYSBtZXNzYWdlIGlzIHByaW50ZWQgYXMKKyAgdGhlIGNvcmUgdzEgY29kZSBkb2Vzbid0IG1ha2UgdXNlIG9mIHRoZSBpbmZvcm1hdGlvbi4gIENvbm5lY3RpbmcKKyAgb25lIGRldmljZSB0ZW5kcyB0byBnaXZlIG11bHRpcGxlIG5ldyBkZXZpY2Ugbm90aWZpY2F0aW9ucy4KKy0gVGhlIG51bWJlciBvZiBVU0IgYnVzIHRyYW5zYWN0aW9ucyBjb3VsZCBiZSByZWR1Y2VkIGlmIHcxX3Jlc2V0X3NlbmQKKyAgd2FzIGFkZGVkIHRvIHRoZSBBUEkuICBUaGUgbmFtZSBpcyBqdXN0IGEgc3VnZ2VzdGlvbi4gIEl0IHdvdWxkIHRha2UKKyAgYSB3cml0ZSBidWZmZXIgYW5kIGEgcmVhZCBidWZmZXIgKGFsb25nIHdpdGggc2l6ZXMpIGFzIGFyZ3VtZW50cy4KKyAgVGhlIGRzMjQ5MCBibG9jayBJL08gY29tbWFuZCBzdXBwb3J0cyByZXNldCwgd3JpdGUgYnVmZmVyLCByZWFkCisgIGJ1ZmZlciwgYW5kIHN0cm9uZyBwdWxsdXAgYWxsIGluIG9uZSBjb21tYW5kLCBpbnN0ZWFkIG9mIHRoZSBjdXJyZW50CisgIDEgcmVzZXQgYnVzLCAyIHdyaXRlIHRoZSBtYXRjaCByb20gY29tbWFuZCBhbmQgc2xhdmUgcm9tIGlkLCAzIGJsb2NrCisgIHdyaXRlIGFuZCByZWFkIGRhdGEuICBUaGUgd3JpdGUgYnVmZmVyIG5lZWRzIHRvIGhhdmUgdGhlIG1hdGNoIHJvbQorICBjb21tYW5kIGFuZCBzbGF2ZSByb20gaWQgcHJlcGVuZGVkIHRvIHRoZSBmcm9udCBvZiB0aGUgcmVxdWVzdGVkCisgIHdyaXRlIGJ1ZmZlciwgYm90aCBvZiB3aGljaCBhcmUga25vd24gdG8gdGhlIGRyaXZlci4KKy0gVGhlIGhhcmR3YXJlIHN1cHBvcnRzIG5vcm1hbCwgZmxleGlibGUsIGFuZCBvdmVyZHJpdmUgYnVzCisgIGNvbW11bmljYXRpb24gc3BlZWRzLCBidXQgb25seSB0aGUgbm9ybWFsIGlzIHN1cHBvcnRlZC4KKy0gVGhlIHJlZ2lzdGVyZWQgdzFfYnVzX21hc3RlciBmdW5jdGlvbnMgZG9uJ3QgZGVmaW5lIGVycm9yCisgIGNvbmRpdGlvbnMuICBJZiBhIGJ1cyBzZWFyY2ggaXMgaW4gcHJvZ3Jlc3MgYW5kIHRoZSBkczI0OTAgaXMKKyAgcmVtb3ZlZCBpdCBjYW4gcHJvZHVjZSBhIGdvb2QgYW1vdW50IG9mIGVycm9yIG91dHB1dCBiZWZvcmUgdGhlIGJ1cworICBzZWFyY2ggZmluaXNoZXMuCistIFRoZSBoYXJkd2FyZSBzdXBwb3J0cyBkZXRlY3Rpbmcgc29tZSBlcnJvciBjb25kaXRpb25zLCBzdWNoIGFzCisgIHNob3J0LCBhbGFybWluZyBwcmVzZW5jZSBvbiByZXNldCwgYW5kIG5vIHByZXNlbmNlIG9uIHJlc2V0LCBidXQgdGhlCisgIGRyaXZlciBkb2Vzbid0IHF1ZXJ5IHRob3NlIHZhbHVlcy4KKy0gVGhlIGRzMjQ5MCBzcGVjaWZpY2F0aW9uIGRvZXNuJ3QgY292ZXIgc2hvcnQgYnVsayBpbiByZWFkcyBpbgorICBkZXRhaWwsIGJ1dCBteSBvYnNlcnZhdGlvbiBpcyBpZiBmZXdlciBieXRlcyBhcmUgcmVxdWVzdGVkIHRoYW4gYXJlCisgIGF2YWlsYWJsZSwgdGhlIGJ1bGsgcmVhZCB3aWxsIHJldHVybiBhbiBlcnJvciBhbmQgdGhlIGhhcmR3YXJlIHdpbGwKKyAgY2xlYXIgdGhlIGVudGlyZSBidWxrIGluIGJ1ZmZlci4gIEl0IHdvdWxkIGJlIHBvc3NpYmxlIHRvIHJlYWQgdGhlCisgIG1heGltdW0gYnVmZmVyIHNpemUgdG8gbm90IHJ1biBpbnRvIHRoaXMgZXJyb3IgY29uZGl0aW9uLCBvbmx5IGV4dHJhCisgIGJ5dGVzIGluIHRoZSBidWZmZXIgaXMgYSBsb2dpYyBlcnJvciBpbiB0aGUgZHJpdmVyLiAgVGhlIGNvZGUgc2hvdWxkCisgIHNob3VsZCBtYXRjaCByZWFkcyBhbmQgd3JpdGVzIGFzIHdlbGwgYXMgZGF0YSBzaXplcy4gIFJlYWRzIGFuZAorICB3cml0ZXMgYXJlIHNlcmlhbGl6ZWQgYW5kIHRoZSBzdGF0dXMgdmVyaWZpZXMgdGhhdCB0aGUgY2hpcCBpcyBpZGxlCisgIChhbmQgZGF0YSBpcyBhdmFpbGFibGUpIGJlZm9yZSB0aGUgcmVhZCBpcyBleGVjdXRlZCwgc28gaXQgc2hvdWxkCisgIG5vdCBoYXBwZW4uCistIFJ1bm5pbmcgeDg2XzY0IDIuNi4yNCBVSENJIHVuZGVyIHFlbXUgMC45LjAgdW5kZXIgeDg2XzY0IDIuNi4yMi1yYzYKKyAgd2l0aCBhIE9IQ0kgY29udHJvbGxlciwgZHMyNDkwIHJ1bm5pbmcgaW4gdGhlIGd1ZXN0IHdvdWxkIG9wZXJhdGUKKyAgbm9ybWFsbHkgdGhlIGZpcnN0IHRpbWUgdGhlIG1vZHVsZSB3YXMgbG9hZGVkIGFmdGVyIHFlbXUgYXR0YWNoZWQKKyAgdGhlIGRzMjQ5MCBoYXJkd2FyZSwgYnV0IGlmIHRoZSBtb2R1bGUgd2FzIHVubG9hZGVkLCB0aGVuIHJlbG9hZGVkCisgIG1vc3Qgb2YgdGhlIHRpbWUgb25lIG9mIHRoZSBidWxrIG91dCBvciBpbiwgYW5kIHVzdWFsbHkgdGhlIGJ1bGsgaW4KKyAgd291bGQgZmFpbC4gIHFlbXUgc2V0cyBhIDUwbXMgdGltZW91dCBhbmQgdGhlIGJ1bGsgaW4gd291bGQgdGltZW91dAorICBldmVuIHdoZW4gdGhlIHN0YXR1cyBzaG93cyBkYXRhIGF2YWlsYWJsZS4gIEEgYnVsayBvdXQgd3JpdGUgd291bGQKKyAgc2hvdyBhIHN1Y2Nlc3NmdWwgY29tcGxldGlvbiwgYnV0IHRoZSBkczI0OTAgc3RhdHVzIHJlZ2lzdGVyIHdvdWxkCisgIHNob3cgMCBieXRlcyB3cml0dGVuLiAgRGV0YWNoaW5nIHFlbXUgZnJvbSB0aGUgZHMyNDkwIGhhcmR3YXJlIGFuZAorICByZWF0dGFjaGluZyB3b3VsZCBjbGVhciB0aGUgcHJvYmxlbS4gIHVzYm1vbiBvdXRwdXQgaW4gdGhlIGd1ZXN0IGFuZAorICBob3N0IGRpZCBub3QgZXhwbGFpbiB0aGUgcHJvYmxlbS4gIE15IGd1ZXNzIGlzIGEgYnVnIGluIGVpdGhlciBxZW11CisgIG9yIHRoZSBob3N0IE9TIGFuZCBtb3JlIGxpa2VseSB0aGUgaG9zdCBPUy4KKy0tIDAzLTA2LTIwMDggRGF2aWQgRnJpZXMgPERhdmlkQEZyaWVzLm5ldD4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdzEvc2xhdmVzLzAwLUlOREVYIGIvRG9jdW1lbnRhdGlvbi93MS9zbGF2ZXMvMDAtSU5ERVgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjgxMDFkNgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vdzEvc2xhdmVzLzAwLUlOREVYCkBAIC0wLDAgKzEsNCBAQAorMDAtSU5ERVgKKwktIFRoaXMgZmlsZQordzFfdGhlcm0KKwktIFRoZSBNYXhpbS9EYWxsYXMgU2VtaWNvbmR1Y3RvciBkczE4KjIwIHRlbXBlcmF0dXJlIHNlbnNvci4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdzEvc2xhdmVzL3cxX3RoZXJtIGIvRG9jdW1lbnRhdGlvbi93MS9zbGF2ZXMvdzFfdGhlcm0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDQwM2FhYQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vdzEvc2xhdmVzL3cxX3RoZXJtCkBAIC0wLDAgKzEsNDEgQEAKK0tlcm5lbCBkcml2ZXIgdzFfdGhlcm0KKz09PT09PT09PT09PT09PT09PT09CisKK1N1cHBvcnRlZCBjaGlwczoKKyAgKiBNYXhpbSBkczE4KjIwIGJhc2VkIHRlbXBlcmF0dXJlIHNlbnNvcnMuCisKK0F1dGhvcjogRXZnZW5peSBQb2x5YWtvdiA8am9obnBvbEAya2EubWlwdC5ydT4KKworCitEZXNjcmlwdGlvbgorLS0tLS0tLS0tLS0KKwordzFfdGhlcm0gcHJvdmlkZXMgYmFzaWMgdGVtcGVyYXR1cmUgY29udmVyc2lvbiBmb3IgZHMxOCoyMCBkZXZpY2VzLgorc3VwcG9ydGVkIGZhbWlseSBjb2RlczoKK1cxX1RIRVJNX0RTMThTMjAJMHgxMAorVzFfVEhFUk1fRFMxODIyCQkweDIyCitXMV9USEVSTV9EUzE4QjIwCTB4MjgKKworU3VwcG9ydCBpcyBwcm92aWRlZCB0aHJvdWdoIHRoZSBzeXNmcyB3MV9zbGF2ZSBmaWxlLiAgRWFjaCBvcGVuIGFuZAorcmVhZCBzZXF1ZW5jZSB3aWxsIGluaXRpYXRlIGEgdGVtcGVyYXR1cmUgY29udmVyc2lvbiB0aGVuIHByb3ZpZGUgdHdvCitsaW5lcyBvZiBBU0NJSSBvdXRwdXQuICBUaGUgZmlyc3QgbGluZSBjb250YWlucyB0aGUgbmluZSBoZXggYnl0ZXMKK3JlYWQgYWxvbmcgd2l0aCBhIGNhbGN1bGF0ZWQgY3JjIHZhbHVlIGFuZCBZRVMgb3IgTk8gaWYgaXQgbWF0Y2hlZC4KK0lmIHRoZSBjcmMgbWF0Y2hlZCB0aGUgcmV0dXJuZWQgdmFsdWVzIGFyZSByZXRhaW5lZC4gIFRoZSBzZWNvbmQgbGluZQorZGlzcGxheXMgdGhlIHJldGFpbmVkIHZhbHVlcyBhbG9uZyB3aXRoIGEgdGVtcGVyYXR1cmUgaW4gbWlsbGlkZWdyZWVzCitDZW50aWdyYWRlIGFmdGVyIHQ9LgorCitQYXJhc2l0ZSBwb3dlcmVkIGRldmljZXMgYXJlIGxpbWl0ZWQgdG8gb25lIHNsYXZlIHBlcmZvcm1pbmcgYQordGVtcGVyYXR1cmUgY29udmVyc2lvbiBhdCBhIHRpbWUuICBJZiBub25lIG9mIHRoZSBkZXZpY2VzIGFyZSBwYXJhc2l0ZQorcG93ZXJlZCBpdCB3b3VsZCBiZSBwb3NzaWJsZSB0byBjb252ZXJ0IGFsbCB0aGUgZGV2aWNlcyBhdCB0aGUgc2FtZQordGltZSBhbmQgdGhlbiBnbyBiYWNrIHRvIHJlYWQgaW5kaXZpZHVhbCBzZW5zb3JzLiAgVGhhdCBpc24ndAorY3VycmVudGx5IHN1cHBvcnRlZC4gIFRoZSBkcml2ZXIgYWxzbyBkb2Vzbid0IHN1cHBvcnQgcmVkdWNlZAorcHJlY2lzaW9uICh3aGljaCB3b3VsZCBhbHNvIHJlZHVjZSB0aGUgY29udmVyc2lvbiB0aW1lKS4KKworVGhlIG1vZHVsZSBwYXJhbWV0ZXIgc3Ryb25nX3B1bGx1cCBjYW4gYmUgc2V0IHRvIDAgdG8gZGlzYWJsZSB0aGUKK3N0cm9uZyBwdWxsdXAgb3IgMSB0byBlbmFibGUuICBJZiBlbmFibGVkIHRoZSA1ViBzdHJvbmcgcHVsbHVwIHdpbGwgYmUKK2VuYWJsZWQgd2hlbiB0aGUgY29udmVyc2lvbiBpcyB0YWtpbmcgcGxhY2UgcHJvdmlkZWQgdGhlIG1hc3RlciBkcml2ZXIKK211c3Qgc3VwcG9ydCB0aGUgc3Ryb25nIHB1bGx1cCAob3IgaXQgZmFsbHMgYmFjayB0byBhIHB1bGx1cAorcmVzaXN0b3IpLiAgVGhlIERTMThiMjAgdGVtcGVyYXR1cmUgc2Vuc29yIHNwZWNpZmljYXRpb24gbGlzdHMgYQorbWF4aW11bSBjdXJyZW50IGRyYXcgb2YgMS41bUEgYW5kIHRoYXQgYSA1ayBwdWxsdXAgcmVzaXN0b3IgaXMgbm90CitzdWZmaWNpZW50LiAgVGhlIHN0cm9uZyBwdWxsdXAgaXMgZGVzaWduZWQgdG8gcHJvdmlkZSB0aGUgYWRkaXRpb25hbAorY3VycmVudCByZXF1aXJlZC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdzEvdzEuZ2VuZXJpYyBiL0RvY3VtZW50YXRpb24vdzEvdzEuZ2VuZXJpYwppbmRleCA0YzY1MDlkLi5lMzMzM2VlIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3cxL3cxLmdlbmVyaWMKKysrIGIvRG9jdW1lbnRhdGlvbi93MS93MS5nZW5lcmljCkBAIC03OSwxMCArNzksMTMgQEAKIDx4eC14eHh4eHh4eHh4eHh4PiAtIGEgZGlyZWN0b3J5IGZvciBhIGZvdW5kIGRldmljZS4gVGhlIGZvcm1hdCBpcyBmYW1pbHktc2VyaWFsCiBidXMgICAgICAgICAgICAgICAgLSAoc3RhbmRhcmQpIHN5bWxpbmsgdG8gdGhlIHcxIGJ1cwogZHJpdmVyICAgICAgICAgICAgIC0gKHN0YW5kYXJkKSBzeW1saW5rIHRvIHRoZSB3MSBkcml2ZXIKK3cxX21hc3Rlcl9hZGQgICAgICAtIE1hbnVhbGx5IHJlZ2lzdGVyIGEgc2xhdmUgZGV2aWNlCiB3MV9tYXN0ZXJfYXR0ZW1wdHMgLSB0aGUgbnVtYmVyIG9mIHRpbWVzIGEgc2VhcmNoIHdhcyBhdHRlbXB0ZWQKIHcxX21hc3Rlcl9tYXhfc2xhdmVfY291bnQKICAgICAgICAgICAgICAgICAgICAtIHRoZSBtYXhpbXVtIHNsYXZlcyB0aGF0IG1heSBiZSBhdHRhY2hlZCB0byBhIG1hc3RlcgogdzFfbWFzdGVyX25hbWUgICAgIC0gdGhlIG5hbWUgb2YgdGhlIGRldmljZSAodzFfYnVzX21hc3RlclgpCit3MV9tYXN0ZXJfcHVsbHVwICAgLSA1ViBzdHJvbmcgcHVsbHVwIDAgZW5hYmxlZCwgMSBkaXNhYmxlZAordzFfbWFzdGVyX3JlbW92ZSAgIC0gTWFudWFsbHkgcmVtb3ZlIGEgc2xhdmUgZGV2aWNlCiB3MV9tYXN0ZXJfc2VhcmNoICAgLSB0aGUgbnVtYmVyIG9mIHNlYXJjaGVzIGxlZnQgdG8gZG8sIC0xPWNvbnRpbnVhbCAoZGVmYXVsdCkKIHcxX21hc3Rlcl9zbGF2ZV9jb3VudAogICAgICAgICAgICAgICAgICAgIC0gdGhlIG51bWJlciBvZiBzbGF2ZXMgZm91bmQKQEAgLTkwLDcgKzkzLDEzIEBACiB3MV9tYXN0ZXJfdGltZW91dCAgLSB0aGUgZGVsYXkgaW4gc2Vjb25kcyBiZXR3ZWVuIHNlYXJjaGVzCiAKIElmIHlvdSBoYXZlIGEgdzEgYnVzIHRoYXQgbmV2ZXIgY2hhbmdlcyAoeW91IGRvbid0IGFkZCBvciByZW1vdmUgZGV2aWNlcyksCi15b3UgY2FuIHNldCB3MV9tYXN0ZXJfc2VhcmNoIHRvIGEgcG9zaXRpdmUgdmFsdWUgdG8gZGlzYWJsZSBzZWFyY2hlcy4KK3lvdSBjYW4gc2V0IHRoZSBtb2R1bGUgcGFyYW1ldGVyIHNlYXJjaF9jb3VudCB0byBhIHNtYWxsIHBvc2l0aXZlIG51bWJlcgorZm9yIGFuIGluaXRpYWxseSBzbWFsbCBudW1iZXIgb2YgYnVzIHNlYXJjaGVzLiAgQWx0ZXJuYXRpdmVseSBpdCBjb3VsZCBiZQorc2V0IHRvIHplcm8sIHRoZW4gbWFudWFsbHkgYWRkIHRoZSBzbGF2ZSBkZXZpY2Ugc2VyaWFsIG51bWJlcnMgYnkKK3cxX21hc3Rlcl9hZGQgZGV2aWNlIGZpbGUuICBUaGUgdzFfbWFzdGVyX2FkZCBhbmQgdzFfbWFzdGVyX3JlbW92ZSBmaWxlcworZ2VuZXJhbGx5IG9ubHkgbWFrZSBzZW5zZSB3aGVuIHNlYXJjaGluZyBpcyBkaXNhYmxlZCwgYXMgYSBzZWFyY2ggd2lsbAorcmVkZXRlY3QgbWFudWFsbHkgcmVtb3ZlZCBkZXZpY2VzIHRoYXQgYXJlIHByZXNlbnQgYW5kIHRpbWVvdXQgbWFudWFsbHkKK2FkZGVkIGRldmljZXMgdGhhdCBhcmVuJ3Qgb24gdGhlIGJ1cy4KIAogCiB3MSBzbGF2ZSBzeXNmcyBpbnRlcmZhY2UKZGlmZiAtLWdpdCBhL01BSU5UQUlORVJTIGIvTUFJTlRBSU5FUlMKaW5kZXggNmJhM2VlOC4uNWMzZjc5YyAxMDA2NDQKLS0tIGEvTUFJTlRBSU5FUlMKKysrIGIvTUFJTlRBSU5FUlMKQEAgLTcyLDggKzcyLDggQEAKIEw6IE1haWxpbmcgbGlzdCB0aGF0IGlzIHJlbGV2YW50IHRvIHRoaXMgYXJlYQogVzogV2ViLXBhZ2Ugd2l0aCBzdGF0dXMvaW5mbwogVDogU0NNIHRyZWUgdHlwZSBhbmQgbG9jYXRpb24uICBUeXBlIGlzIG9uZSBvZjogZ2l0LCBoZywgcXVpbHQuCi1TOiBTdGF0dXMsIG9uZSBvZiB0aGUgZm9sbG93aW5nOgogRjogQXBwbGljYWJsZSBmaWxlcyBhbmQvb3IgZGlyZWN0b3JpZXMKK1M6IFN0YXR1cywgb25lIG9mIHRoZSBmb2xsb3dpbmc6CiAKIAlTdXBwb3J0ZWQ6CVNvbWVvbmUgaXMgYWN0dWFsbHkgcGFpZCB0byBsb29rIGFmdGVyIHRoaXMuCiAJTWFpbnRhaW5lZDoJU29tZW9uZSBhY3R1YWxseSBsb29rcyBhZnRlciBpdC4KQEAgLTExOTgsNyArMTE5OCw3IEBACiAKIENQVSBGUkVRVUVOQ1kgRFJJVkVSUwogUDoJRGF2ZSBKb25lcwotTToJZGF2ZWpAY29kZW1vbmtleS5vcmcudWsKK006CWRhdmVqQHJlZGhhdC5jb20KIEw6CWNwdWZyZXFAdmdlci5rZXJuZWwub3JnCiBXOglodHRwOi8vd3d3LmNvZGVtb25rZXkub3JnLnVrL3Byb2plY3RzL2NwdWZyZXEvCiBUOglnaXQga2VybmVsLm9yZy9wdWIvc2NtL2xpbnV4L2tlcm5lbC9naXQvZGF2ZWovY3B1ZnJlcS5naXQKQEAgLTE2MjksNiArMTYyOSwxMSBAQAogTToJY2hAbXVyZ2F0cm9pZC5jb20sIGNoQGhwbC5ocC5jb20KIFM6CU1haW50YWluZWQKIAorRVBTT04gUzFEMTNYWFggRlJBTUVCVUZGRVIgRFJJVkVSCitQOglLcmlzdG9mZmVyIEVyaWNzb24KK006CWtyaXN0b2ZmZXIuZXJpY3NvbkBnbWFpbC5jb20KK1M6CU1haW50YWluZWQKKwogRVRIRVJFWFBSRVNTLTE2IE5FVFdPUksgRFJJVkVSCiBQOglQaGlsaXAgQmx1bmRlbGwKIE06CXBoaWxiQGdudS5vcmcKQEAgLTI0NDMsNyArMjQ0OCwxNCBAQAogCiBLRVJORUwgVklSVFVBTCBNQUNISU5FIChLVk0pCiBQOglBdmkgS2l2aXR5Ci1NOglhdmlAcXVtcmFuZXQuY29tCitNOglhdmlAcmVkaGF0LmNvbQorTDoJa3ZtQHZnZXIua2VybmVsLm9yZworVzoJaHR0cDovL2t2bS5xdW1yYW5ldC5jb20KK1M6CVN1cHBvcnRlZAorCitLRVJORUwgVklSVFVBTCBNQUNISU5FIChLVk0pIEZPUiBBTUQtVgorUDoJSm9lcmcgUm9lZGVsCitNOglqb2VyZy5yb2VkZWxAYW1kLmNvbQogTDoJa3ZtQHZnZXIua2VybmVsLm9yZwogVzoJaHR0cDovL2t2bS5xdW1yYW5ldC5jb20KIFM6CVN1cHBvcnRlZApAQCAtMjc5NywxNSArMjgwOSw2IEBACiBUOglnaXQgZ2l0Oi8vZ2l0LmluZnJhZGVhZC5vcmcvbXRkLTIuNi5naXQKIFM6CU1haW50YWluZWQKIAotTUVJIE1OMTAzMDAvQU0zMyBQT1JUCi1QOglEYXZpZCBIb3dlbGxzCi1NOglkaG93ZWxsc0ByZWRoYXQuY29tCi1QOglLb2ljaGkgWWFzdXRha2UKLU06CXlhc3V0YWtlLmtvaWNoaUBqcC5wYW5hc29uaWMuY29tCi1MOglsaW51eC1hbTMzLWxpc3RAcmVkaGF0LmNvbSAobW9kZXJhdGVkIGZvciBub24tc3Vic2NyaWJlcnMpCi1XOglmdHA6Ly9mdHAucmVkaGF0LmNvbS9wdWIvcmVkaGF0L2dudXByby9BTTMzLwotUzoJTWFpbnRhaW5lZAotCiBNSUNST1RFSyBYNiBTQ0FOTkVSCiBQOglPbGl2ZXIgTmV1a3VtCiBNOglvbGl2ZXJAbmV1a3VtLm5hbWUKQEAgLTMxNzAsNiArMzE3MywxNSBAQAogTDoJaTJjQGxtLXNlbnNvcnMub3JnCiBTOglNYWludGFpbmVkCiAKK1BBTkFTT05JQyBNTjEwMzAwL0FNMzMgUE9SVAorUDoJRGF2aWQgSG93ZWxscworTToJZGhvd2VsbHNAcmVkaGF0LmNvbQorUDoJS29pY2hpIFlhc3V0YWtlCitNOgl5YXN1dGFrZS5rb2ljaGlAanAucGFuYXNvbmljLmNvbQorTDoJbGludXgtYW0zMy1saXN0QHJlZGhhdC5jb20gKG1vZGVyYXRlZCBmb3Igbm9uLXN1YnNjcmliZXJzKQorVzoJZnRwOi8vZnRwLnJlZGhhdC5jb20vcHViL3JlZGhhdC9nbnVwcm8vQU0zMy8KK1M6CU1haW50YWluZWQKKwogUEFSQUxMRUwgUE9SVCBTVVBQT1JUCiBMOglsaW51eC1wYXJwb3J0QGxpc3RzLmluZnJhZGVhZC5vcmcgKHN1YnNjcmliZXJzLW9ubHkpCiBTOglPcnBoYW4KQEAgLTM5MjUsNyArMzkzNyw3IEBACiBMOglsaW51eC1rZXJuZWxAdmdlci5rZXJuZWwub3JnCiBTOglNYWludGFpbmVkCiAKLVNUQUJMRSBCUkFOQ0g6CitTVEFCTEUgQlJBTkNICiBQOglHcmVnIEtyb2FoLUhhcnRtYW4KIE06CWdyZWdAa3JvYWguY29tCiBQOglDaHJpcyBXcmlnaHQKQEAgLTM5MzMsNiArMzk0NSwxMyBAQAogTDoJc3RhYmxlQGtlcm5lbC5vcmcKIFM6CU1haW50YWluZWQKIAorU1RBR0lORyBTVUJTWVNURU0KK1A6CUdyZWcgS3JvYWgtSGFydG1hbgorTToJZ3JlZ2toQHN1c2UuZGUKK0w6CWxpbnV4LWtlcm5lbEB2Z2VyLmtlcm5lbC5vcmcKK1Q6CXF1aWx0IGtlcm5lbC5vcmcvcHViL2xpbnV4L2tlcm5lbC9wZW9wbGUvZ3JlZ2toL2dyZWdraC0yLjYvCitTOglNYWludGFpbmVkCisKIFNUQVJGSVJFL0RVUkFMQU4gTkVUV09SSyBEUklWRVIKIFA6CUlvbiBCYWR1bGVzY3UKIE06CWlvbnV0QGNzLmNvbHVtYmlhLmVkdQpAQCAtNDA4OSw3ICs0MTA4LDcgQEAKIFA6CU1hcmNlbCBTZWxob3JzdAogTToJdHBtQHNlbGhvcnN0Lm5ldAogVzoJaHR0cDovL3d3dy5wcm9zZWMucnViLmRlL3RwbS8KLUw6CXRwbWRkLWRldmVsQGxpc3RzLnNvdXJjZWZvcmdlLm5ldAorTDoJdHBtZGQtZGV2ZWxAbGlzdHMuc291cmNlZm9yZ2UubmV0IChtb2RlcmF0ZWQgZm9yIG5vbi1zdWJzY3JpYmVycykKIFM6CU1haW50YWluZWQKIAogVFJJVklBTCBQQVRDSEVTCkBAIC00NDgwLDYgKzQ0OTksMTMgQEAKIFQ6CWdpdDovL2dpdC5rZXJuZWwub3JnL3B1Yi9zY20vdXRpbHMvdXRpbC1saW51eC1uZy91dGlsLWxpbnV4LW5nLmdpdAogUzoJTWFpbnRhaW5lZAogCitVVkVTQUZCIERSSVZFUgorUDoJTWljaGFsIEphbnVzemV3c2tpCitNOglzcG9ja0BnZW50b28ub3JnCitMOglsaW51eC1mYmRldi1kZXZlbEBsaXN0cy5zb3VyY2Vmb3JnZS5uZXQgKG1vZGVyYXRlZCBmb3Igbm9uLXN1YnNjcmliZXJzKQorVzoJaHR0cDovL2Rldi5nZW50b28ub3JnL35zcG9jay9wcm9qZWN0cy91dmVzYWZiLworUzoJTWFpbnRhaW5lZAorCiBWRkFUL0ZBVC9NU0RPUyBGSUxFU1lTVEVNCiBQOglPR0FXQSBIaXJvZnVtaQogTToJaGlyb2Z1bWlAbWFpbC5wYXJrbmV0LmNvLmpwCkBAIC00NDk3LDYgKzQ1MjMsMTQgQEAKIEw6CWkyY0BsbS1zZW5zb3JzLm9yZwogUzoJTWFpbnRhaW5lZAogCitWSUEgVU5JQ0hST01FKFBSTykvQ0hST01FOSBGUkFNRUJVRkZFUiBEUklWRVIKK1A6CUpvc2VwaCBDaGFuCitNOglKb3NlcGhDaGFuQHZpYS5jb20udHcKK1A6CVNjb3R0IEZhbmcKK006CVNjb3R0RmFuZ0B2aWF0ZWNoLmNvbS5jbgorTDoJbGludXgtZmJkZXYtZGV2ZWxAbGlzdHMuc291cmNlZm9yZ2UubmV0IChtb2RlcmF0ZWQgZm9yIG5vbi1zdWJzY3JpYmVycykKK1M6CU1haW50YWluZWQKKwogVklBIFZFTE9DSVRZIE5FVFdPUksgRFJJVkVSCiBQOglGcmFuY29pcyBSb21pZXUKIE06CXJvbWlldUBmci56b3JlaWwuY29tCkBAIC00NTIwLDEwICs0NTU0LDExIEBACiAKIFZPTFRBR0UgQU5EIENVUlJFTlQgUkVHVUxBVE9SIEZSQU1FV09SSwogUDoJTGlhbSBHaXJkd29vZAotTToJbGdAb3BlbnNvdXJjZS53b2xmc29ubWljcm8uY29tCitNOglscmdAc2xpbWxvZ2ljLmNvLnVrCiBQOglNYXJrIEJyb3duCiBNOglicm9vbmllQG9wZW5zb3VyY2Uud29sZnNvbm1pY3JvLmNvbQogVzoJaHR0cDovL29wZW5zb3VyY2Uud29sZnNvbm1pY3JvLmNvbS9ub2RlLzE1CitXOglodHRwOi8vd3d3LnNsaW1sb2dpYy5jby51ay8/cGFnZV9pZD01CiBUOglnaXQga2VybmVsLm9yZy9wdWIvc2NtL2xpbnV4L2tlcm5lbC9naXQvbHJnL3ZvbHRhZ2UtMi42LmdpdAogUzoJU3VwcG9ydGVkCiAKQEAgLTQ1OTcsNyArNDYzMiw3IEBACiBQOglNYXJrIEJyb3duCiBNOglicm9vbmllQG9wZW5zb3VyY2Uud29sZnNvbm1pY3JvLmNvbQogUDoJTGlhbSBHaXJkd29vZAotTToJbGlhbS5naXJkd29vZEB3b2xmc29ubWljcm8uY29tCitNOglscmdAc2xpbWxvZ2ljLmNvLnVrCiBMOglsaW51eC1pbnB1dEB2Z2VyLmtlcm5lbC5vcmcKIFQ6CWdpdCBnaXQ6Ly9vcGVuc291cmNlLndvbGZzb25taWNyby5jb20vbGludXgtMi42LXRvdWNoCiBXOglodHRwOi8vb3BlbnNvdXJjZS53b2xmc29ubWljcm8uY29tL25vZGUvNwpkaWZmIC0tZ2l0IGEvYXJjaC9LY29uZmlnIGIvYXJjaC9LY29uZmlnCmluZGV4IDM2NGM2ZGEuLmU2YWI1NTAgMTAwNjQ0Ci0tLSBhL2FyY2gvS2NvbmZpZworKysgYi9hcmNoL0tjb25maWcKQEAgLTEzLDggKzEzLDIyIEBACiAKIAkgIElmIHVuc3VyZSwgc2F5IE4uCiAKK2NvbmZpZyBPUFJPRklMRV9JQlMKKwlib29sICJPUHJvZmlsZSBBTUQgSUJTIHN1cHBvcnQgKEVYUEVSSU1FTlRBTCkiCisJZGVmYXVsdCBuCisJZGVwZW5kcyBvbiBPUFJPRklMRSAmJiBTTVAgJiYgWDg2CisJaGVscAorICAgICAgICAgIEluc3RydWN0aW9uLUJhc2VkIFNhbXBsaW5nIChJQlMpIGlzIGEgbmV3IHByb2ZpbGluZworICAgICAgICAgIHRlY2huaXF1ZSB0aGF0IHByb3ZpZGVzIHJpY2gsIHByZWNpc2UgcHJvZ3JhbSBwZXJmb3JtYW5jZQorICAgICAgICAgIGluZm9ybWF0aW9uLiBJQlMgaXMgaW50cm9kdWNlZCBieSBBTUQgRmFtaWx5MTBoIHByb2Nlc3NvcnMKKyAgICAgICAgICAoQU1EIE9wdGVyb24gUXVhZC1Db3JlIHByb2Nlc3NvciDigJxCYXJjZWxvbmHigJ0pIHRvIG92ZXJjb21lCisgICAgICAgICAgdGhlIGxpbWl0YXRpb25zIG9mIGNvbnZlbnRpb25hbCBwZXJmb3JtYW5jZSBjb3VudGVyCisgICAgICAgICAgc2FtcGxpbmcuCisKKwkgIElmIHVuc3VyZSwgc2F5IE4uCisKIGNvbmZpZyBIQVZFX09QUk9GSUxFCi0JZGVmX2Jvb2wgbgorCWJvb2wKIAogY29uZmlnIEtQUk9CRVMKIAlib29sICJLcHJvYmVzIgpAQCAtMjgsNyArNDIsNyBAQAogCSAgSWYgaW4gZG91YnQsIHNheSAiTiIuCiAKIGNvbmZpZyBIQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTCi0JZGVmX2Jvb2wgbgorCWJvb2wKIAloZWxwCiAJICBTb21lIGFyY2hpdGVjdHVyZXMgYXJlIHVuYWJsZSB0byBwZXJmb3JtIHVuYWxpZ25lZCBhY2Nlc3NlcwogCSAgd2l0aG91dCB0aGUgdXNlIG9mIGdldF91bmFsaWduZWQvcHV0X3VuYWxpZ25lZC4gT3RoZXJzIGFyZQpAQCAtNTEsMTMgKzY1LDEzIEBACiAJZGVwZW5kcyBvbiBLUFJPQkVTICYmIEhBVkVfS1JFVFBST0JFUwogCiBjb25maWcgSEFWRV9JT1JFTUFQX1BST1QKLQlkZWZfYm9vbCBuCisJYm9vbAogCiBjb25maWcgSEFWRV9LUFJPQkVTCi0JZGVmX2Jvb2wgbgorCWJvb2wKIAogY29uZmlnIEhBVkVfS1JFVFBST0JFUwotCWRlZl9ib29sIG4KKwlib29sCiAKICMKICMgQW4gYXJjaCBzaG91bGQgc2VsZWN0IHRoaXMgaWYgaXQgcHJvdmlkZXMgYWxsIHRoZXNlIHRoaW5nczoKQEAgLTc1LDE2ICs4OSwxNiBAQAogIwlzaWduYWwgZGVsaXZlcnkJCWNhbGxzIHRyYWNlaG9va19zaWduYWxfaGFuZGxlcigpCiAjCiBjb25maWcgSEFWRV9BUkNIX1RSQUNFSE9PSwotCWRlZl9ib29sIG4KKwlib29sCiAKIGNvbmZpZyBIQVZFX0RNQV9BVFRSUwotCWRlZl9ib29sIG4KKwlib29sCiAKIGNvbmZpZyBVU0VfR0VORVJJQ19TTVBfSEVMUEVSUwotCWRlZl9ib29sIG4KKwlib29sCiAKIGNvbmZpZyBIQVZFX0NMSwotCWRlZl9ib29sIG4KKwlib29sCiAJaGVscAogCSAgVGhlIDxsaW51eC9jbGsuaD4gY2FsbHMgc3VwcG9ydCBzb2Z0d2FyZSBjbG9jayBnYXRpbmcgYW5kCiAJICB0aHVzIGFyZSBhIGtleSBwb3dlciBtYW5hZ2VtZW50IHRvb2wgb24gbWFueSBzeXN0ZW1zLgpkaWZmIC0tZ2l0IGEvYXJjaC9hbHBoYS9LY29uZmlnIGIvYXJjaC9hbHBoYS9LY29uZmlnCmluZGV4IDFiZWM1NWQuLjYxMTAxOTcgMTAwNjQ0Ci0tLSBhL2FyY2gvYWxwaGEvS2NvbmZpZworKysgYi9hcmNoL2FscGhhL0tjb25maWcKQEAgLTUsNiArNSw3IEBACiBjb25maWcgQUxQSEEKIAlib29sCiAJZGVmYXVsdCB5CisJc2VsZWN0IEhBVkVfQU9VVAogCXNlbGVjdCBIQVZFX0lERQogCXNlbGVjdCBIQVZFX09QUk9GSUxFCiAJaGVscApAQCAtNjgsMTAgKzY5LDggQEAKIAlkZXBlbmRzIG9uIFNNUAogCWRlZmF1bHQgeQogCi1jb25maWcgQVJDSF9TVVBQT1JUU19BT1VUCi0JZGVmX2Jvb2wgeQotCiBzb3VyY2UgImluaXQvS2NvbmZpZyIKK3NvdXJjZSAia2VybmVsL0tjb25maWcuZnJlZXplciIKIAogCiBtZW51ICJTeXN0ZW0gc2V0dXAiCkBAIC0yMjQsOCArMjIzLDcgQEAKIAlib29sICJNaWF0YSIKIAloZWxwCiAJICBUaGUgRGlnaXRhbCBQZXJzb25hbFdvcmtTdGF0aW9uIChQV1MgNDMzYSwgNDMzYXUsIDUwMGEsIDUwMGF1LCA2MDBhLAotCSAgb3IgNjAwYXUpLiAgVGhlcmUgaXMgYW4gSW5zdGFsbGF0aW9uIEhPV1RPIGZvciB0aGlzIGhhcmR3YXJlIGF0Ci0JICA8aHR0cDovL2VpamsuaG9tZWxpbnV4Lm9yZy9+c3RlZmFuL21pYXRhLmh0bWw+LgorCSAgb3IgNjAwYXUpLgogCiBjb25maWcgQUxQSEFfTUlLQVNBCiAJYm9vbCAiTWlrYXNhIgpkaWZmIC0tZ2l0IGEvYXJjaC9hbHBoYS9pbmNsdWRlL2FzbS9hLm91dC5oIGIvYXJjaC9hbHBoYS9pbmNsdWRlL2FzbS9hLm91dC5oCmluZGV4IDAyY2U4NDcuLmFjZGM2ODEgMTAwNjQ0Ci0tLSBhL2FyY2gvYWxwaGEvaW5jbHVkZS9hc20vYS5vdXQuaAorKysgYi9hcmNoL2FscGhhL2luY2x1ZGUvYXNtL2Eub3V0LmgKQEAgLTk1LDcgKzk1LDcgQEAKICAgIFdvcnNlLCB3ZSBoYXZlIHRvIG5vdGljZSB0aGUgc3RhcnQgYWRkcmVzcyBiZWZvcmUgc3dhcHBpbmcgdG8gdXNlCiAgICAvc2Jpbi9sb2FkZXIsIHdoaWNoIG9mIGNvdXJzZSBpcyBfbm90XyBhIFRBU08gYXBwbGljYXRpb24uICAqLwogI2RlZmluZSBTRVRfQU9VVF9QRVJTT05BTElUWShCRlBNLCBFWCkgXAotCXNldF9wZXJzb25hbGl0eSAoKChCRlBNLT5zaF9iYW5nIHx8IEVYLmFoLmVudHJ5IDwgMHgxMDAwMDAwMDBMIFwKKwlzZXRfcGVyc29uYWxpdHkgKCgoQkZQTS0+dGFzbyB8fCBFWC5haC5lbnRyeSA8IDB4MTAwMDAwMDAwTCBcCiAJCQkgICA/IEFERFJfTElNSVRfMzJCSVQgOiAwKSB8IFBFUl9PU0Y0KSkKIAogI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KZGlmZiAtLWdpdCBhL2FyY2gvYWxwaGEvaW5jbHVkZS9hc20vZWxmLmggYi9hcmNoL2FscGhhL2luY2x1ZGUvYXNtL2VsZi5oCmluZGV4IGZjMTAwMmUuLjVjNzVjMWIgMTAwNjQ0Ci0tLSBhL2FyY2gvYWxwaGEvaW5jbHVkZS9hc20vZWxmLmgKKysrIGIvYXJjaC9hbHBoYS9pbmNsdWRlL2FzbS9lbGYuaApAQCAtMTQ0LDkgKzE0NCw5IEBACiAJOiBhbWFzayAoQU1BU0tfQ0lYKSA/ICJldjYiIDogImV2NjciKTsJXAogfSkKIAotI2RlZmluZSBTRVRfUEVSU09OQUxJVFkoRVgsIElCQ1MyKQkJCQlcCisjZGVmaW5lIFNFVF9QRVJTT05BTElUWShFWCkJCQkJCVwKIAlzZXRfcGVyc29uYWxpdHkoKChFWCkuZV9mbGFncyAmIEVGX0FMUEhBXzMyQklUKQkJXAotCSAgID8gUEVSX0xJTlVYXzMyQklUIDogKElCQ1MyKSA/IFBFUl9TVlI0IDogUEVSX0xJTlVYKQorCSAgID8gUEVSX0xJTlVYXzMyQklUIDogUEVSX0xJTlVYKQogCiBleHRlcm4gaW50IGFscGhhX2wxaV9jYWNoZXNoYXBlOwogZXh0ZXJuIGludCBhbHBoYV9sMWRfY2FjaGVzaGFwZTsKZGlmZiAtLWdpdCBhL2FyY2gvYWxwaGEvaW5jbHVkZS9hc20vc3RhdGZzLmggYi9hcmNoL2FscGhhL2luY2x1ZGUvYXNtL3N0YXRmcy5oCmluZGV4IGFkMTU4MzAuLmRlMzVjZDQgMTAwNjQ0Ci0tLSBhL2FyY2gvYWxwaGEvaW5jbHVkZS9hc20vc3RhdGZzLmgKKysrIGIvYXJjaC9hbHBoYS9pbmNsdWRlL2FzbS9zdGF0ZnMuaApAQCAtMSw2ICsxLDEwIEBACiAjaWZuZGVmIF9BTFBIQV9TVEFURlNfSAogI2RlZmluZSBfQUxQSEFfU1RBVEZTX0gKIAorLyogQWxwaGEgaXMgdGhlIG9ubHkgNjQtYml0IHBsYXRmb3JtIHdpdGggMzItYml0IHN0YXRmcy4gQW5kIGRvZXNuJ3QKKyAgIGV2ZW4gc2VlbSB0byBpbXBsZW1lbnQgc3RhdGZzNjQgKi8KKyNkZWZpbmUgX19zdGF0ZnNfd29yZCBfX3UzMgorCiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvc3RhdGZzLmg+CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hbHBoYS9pbmNsdWRlL2FzbS90aHJlYWRfaW5mby5oIGIvYXJjaC9hbHBoYS9pbmNsdWRlL2FzbS90aHJlYWRfaW5mby5oCmluZGV4IDE1ZmRhNDMuLmQwNjk1MjYgMTAwNjQ0Ci0tLSBhL2FyY2gvYWxwaGEvaW5jbHVkZS9hc20vdGhyZWFkX2luZm8uaAorKysgYi9hcmNoL2FscGhhL2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvLmgKQEAgLTc0LDEyICs3NCwxNCBAQAogI2RlZmluZSBUSUZfVUFDX1NJR0JVUwkJNwogI2RlZmluZSBUSUZfTUVNRElFCQk4CiAjZGVmaW5lIFRJRl9SRVNUT1JFX1NJR01BU0sJOQkvKiByZXN0b3JlIHNpZ25hbCBtYXNrIGluIGRvX3NpZ25hbCAqLworI2RlZmluZSBUSUZfRlJFRVpFCQkxNgkvKiBpcyBmcmVlemluZyBmb3Igc3VzcGVuZCAqLwogCiAjZGVmaW5lIF9USUZfU1lTQ0FMTF9UUkFDRQkoMTw8VElGX1NZU0NBTExfVFJBQ0UpCiAjZGVmaW5lIF9USUZfU0lHUEVORElORwkJKDE8PFRJRl9TSUdQRU5ESU5HKQogI2RlZmluZSBfVElGX05FRURfUkVTQ0hFRAkoMTw8VElGX05FRURfUkVTQ0hFRCkKICNkZWZpbmUgX1RJRl9QT0xMSU5HX05SRkxBRwkoMTw8VElGX1BPTExJTkdfTlJGTEFHKQogI2RlZmluZSBfVElGX1JFU1RPUkVfU0lHTUFTSwkoMTw8VElGX1JFU1RPUkVfU0lHTUFTSykKKyNkZWZpbmUgX1RJRl9GUkVFWkUJCSgxPDxUSUZfRlJFRVpFKQogCiAvKiBXb3JrIHRvIGRvIG9uIGludGVycnVwdC9leGNlcHRpb24gcmV0dXJuLiAgKi8KICNkZWZpbmUgX1RJRl9XT1JLX01BU0sJCShfVElGX1NJR1BFTkRJTkcgfCBfVElGX05FRURfUkVTQ0hFRCkKZGlmZiAtLWdpdCBhL2FyY2gvYWxwaGEva2VybmVsL2NvcmVfbWFydmVsLmMgYi9hcmNoL2FscGhhL2tlcm5lbC9jb3JlX21hcnZlbC5jCmluZGV4IDA0ZGNjNWUuLjljZDhkY2EgMTAwNjQ0Ci0tLSBhL2FyY2gvYWxwaGEva2VybmVsL2NvcmVfbWFydmVsLmMKKysrIGIvYXJjaC9hbHBoYS9rZXJuZWwvY29yZV9tYXJ2ZWwuYwpAQCAtNjU1LDcgKzY1NSw3IEBACiAKIAljYXNlIDB4NzE6CQkJCQkvKiBSVENfUE9SVCgxKSAqLwogCQlydGNfYWNjZXNzLmluZGV4ID0gaW5kZXg7Ci0JCXJ0Y19hY2Nlc3MuZGF0YSA9IEJDRF9UT19CSU4oYik7CisJCXJ0Y19hY2Nlc3MuZGF0YSA9IGJjZDJiaW4oYik7CiAJCXJ0Y19hY2Nlc3MuZnVuY3Rpb24gPSAweDQ4ICsgIXdyaXRlOwkvKiBHRVQvUFVUX1RPWSAqLwogCiAjaWZkZWYgQ09ORklHX1NNUApAQCAtNjY4LDcgKzY2OCw3IEBACiAjZWxzZQogCQlfX21hcnZlbF9hY2Nlc3NfcnRjKCZydGNfYWNjZXNzKTsKICNlbmRpZgotCQlyZXQgPSBCSU5fVE9fQkNEKHJ0Y19hY2Nlc3MuZGF0YSk7CisJCXJldCA9IGJpbjJiY2QocnRjX2FjY2Vzcy5kYXRhKTsKIAkJYnJlYWs7CiAKIAlkZWZhdWx0OgpkaWZmIC0tZ2l0IGEvYXJjaC9hbHBoYS9rZXJuZWwvcGNpX2lvbW11LmMgYi9hcmNoL2FscGhhL2tlcm5lbC9wY2lfaW9tbXUuYwppbmRleCAyMTc5YzYwLi5iOTA5NGRhIDEwMDY0NAotLS0gYS9hcmNoL2FscGhhL2tlcm5lbC9wY2lfaW9tbXUuYworKysgYi9hcmNoL2FscGhhL2tlcm5lbC9wY2lfaW9tbXUuYwpAQCAtNDEsMTMgKzQxLDYgQEAKIAlyZXR1cm4gKHBhZGRyID4+IChQQUdFX1NISUZULTEpKSB8IDE7CiB9CiAKLXN0YXRpYyBpbmxpbmUgbG9uZwotY2FsY19ucGFnZXMobG9uZyBieXRlcykKLXsKLQlyZXR1cm4gKGJ5dGVzICsgUEFHRV9TSVpFIC0gMSkgPj4gUEFHRV9TSElGVDsKLX0KLQwKLQogLyogUmV0dXJuIHRoZSBtaW5pbXVtIG9mIE1BWCBvciB0aGUgZmlyc3QgcG93ZXIgb2YgdHdvIGxhcmdlcgogICAgdGhhbiBtYWluIG1lbW9yeS4gICovCiAKQEAgLTI4Nyw3ICsyODAsNyBAQAogCWlmICghYXJlbmEgfHwgYXJlbmEtPmRtYV9iYXNlICsgYXJlbmEtPnNpemUgLSAxID4gbWF4X2RtYSkKIAkJYXJlbmEgPSBob3NlLT5zZ19pc2E7CiAKLQlucGFnZXMgPSBjYWxjX25wYWdlcygocGFkZHIgJiB+UEFHRV9NQVNLKSArIHNpemUpOworCW5wYWdlcyA9IGlvbW11X251bV9wYWdlcyhwYWRkciwgc2l6ZSwgUEFHRV9TSVpFKTsKIAogCS8qIEZvcmNlIGFsbG9jYXRpb24gdG8gNjRLQiBib3VuZGFyeSBmb3IgSVNBIGJyaWRnZXMuICovCiAJaWYgKHBkZXYgJiYgcGRldiA9PSBpc2FfYnJpZGdlKQpAQCAtMzg3LDcgKzM4MCw3IEBACiAJCUJVRygpOwogCX0KIAotCW5wYWdlcyA9IGNhbGNfbnBhZ2VzKChkbWFfYWRkciAmIH5QQUdFX01BU0spICsgc2l6ZSk7CisJbnBhZ2VzID0gaW9tbXVfbnVtX3BhZ2VzKGRtYV9hZGRyLCBzaXplLCBQQUdFX1NJWkUpOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmFyZW5hLT5sb2NrLCBmbGFncyk7CiAKQEAgLTU4MCw3ICs1NzMsNyBAQAogCSAgIGNvbnRpZ3VvdXMuICAqLwogCiAJcGFkZHIgJj0gflBBR0VfTUFTSzsKLQlucGFnZXMgPSBjYWxjX25wYWdlcyhwYWRkciArIHNpemUpOworCW5wYWdlcyA9IGlvbW11X251bV9wYWdlcyhwYWRkciwgc2l6ZSwgUEFHRV9TSVpFKTsKIAlkbWFfb2ZzID0gaW9tbXVfYXJlbmFfYWxsb2MoZGV2LCBhcmVuYSwgbnBhZ2VzLCAwKTsKIAlpZiAoZG1hX29mcyA8IDApIHsKIAkJLyogSWYgd2UgYXR0ZW1wdGVkIGEgZGlyZWN0IG1hcCBhYm92ZSBidXQgZmFpbGVkLCBkaWUuICAqLwpAQCAtNjE2LDcgKzYwOSw3IEBACiAJCQlzZysrOwogCQl9CiAKLQkJbnBhZ2VzID0gY2FsY19ucGFnZXMoKHBhZGRyICYgflBBR0VfTUFTSykgKyBzaXplKTsKKwkJbnBhZ2VzID0gaW9tbXVfbnVtX3BhZ2VzKHBhZGRyLCBzaXplLCBQQUdFX1NJWkUpOwogCiAJCXBhZGRyICY9IFBBR0VfTUFTSzsKIAkJZm9yIChpID0gMDsgaSA8IG5wYWdlczsgKytpLCBwYWRkciArPSBQQUdFX1NJWkUpCkBAIC03NzUsNyArNzY4LDcgQEAKIAkJREJHQSgiICAgICglbGQpIHNnIFslbHgsJWx4XVxuIiwKIAkJICAgICBzZyAtIGVuZCArIG5lbnRzLCBhZGRyLCBzaXplKTsKIAotCQlucGFnZXMgPSBjYWxjX25wYWdlcygoYWRkciAmIH5QQUdFX01BU0spICsgc2l6ZSk7CisJCW5wYWdlcyA9IGlvbW11X251bV9wYWdlcyhhZGRyLCBzaXplLCBQQUdFX1NJWkUpOwogCQlvZnMgPSAoYWRkciAtIGFyZW5hLT5kbWFfYmFzZSkgPj4gUEFHRV9TSElGVDsKIAkJaW9tbXVfYXJlbmFfZnJlZShhcmVuYSwgb2ZzLCBucGFnZXMpOwogCmRpZmYgLS1naXQgYS9hcmNoL2FscGhhL2tlcm5lbC9zbXAuYyBiL2FyY2gvYWxwaGEva2VybmVsL3NtcC5jCmluZGV4IDA2YjZmZGEuLmU2NTdjNDUgMTAwNjQ0Ci0tLSBhL2FyY2gvYWxwaGEva2VybmVsL3NtcC5jCisrKyBiL2FyY2gvYWxwaGEva2VybmVsL3NtcC5jCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSA8bGludXgvY2FjaGUuaD4KICNpbmNsdWRlIDxsaW51eC9wcm9maWxlLmg+CiAjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CisjaW5jbHVkZSA8bGludXgvY3B1Lmg+CiAKICNpbmNsdWRlIDxhc20vaHdycGIuaD4KICNpbmNsdWRlIDxhc20vcHRyYWNlLmg+CmRpZmYgLS1naXQgYS9hcmNoL2FscGhhL2tlcm5lbC9zeXNfc2FibGUuYyBiL2FyY2gvYWxwaGEva2VybmVsL3N5c19zYWJsZS5jCmluZGV4IDk5YTdmMTkuLmE0NTU1ZjQgMTAwNjQ0Ci0tLSBhL2FyY2gvYWxwaGEva2VybmVsL3N5c19zYWJsZS5jCisrKyBiL2FyY2gvYWxwaGEva2VybmVsL3N5c19zYWJsZS5jCkBAIC00Nyw3ICs0Nyw3IEBACiAKIHN0YXRpYyBpcnFfc3dpenpsZV90ICpzYWJsZV9seW54X2lycV9zd2l6emxlOwogCi1zdGF0aWMgdm9pZCBzYWJsZV9seW54X2luaXRfaXJxKGludCBucl9pcnFzKTsKK3N0YXRpYyB2b2lkIHNhYmxlX2x5bnhfaW5pdF9pcnEoaW50IG5yX29mX2lycXMpOwogCiAjaWYgZGVmaW5lZChDT05GSUdfQUxQSEFfR0VORVJJQykgfHwgZGVmaW5lZChDT05GSUdfQUxQSEFfU0FCTEUpCiAKQEAgLTUzMCwxMSArNTMwLDExIEBACiB9CiAKIHN0YXRpYyB2b2lkIF9faW5pdAotc2FibGVfbHlueF9pbml0X2lycShpbnQgbnJfaXJxcykKK3NhYmxlX2x5bnhfaW5pdF9pcnEoaW50IG5yX29mX2lycXMpCiB7CiAJbG9uZyBpOwogCi0JZm9yIChpID0gMDsgaSA8IG5yX2lycXM7ICsraSkgeworCWZvciAoaSA9IDA7IGkgPCBucl9vZl9pcnFzOyArK2kpIHsKIAkJaXJxX2Rlc2NbaV0uc3RhdHVzID0gSVJRX0RJU0FCTEVEIHwgSVJRX0xFVkVMOwogCQlpcnFfZGVzY1tpXS5jaGlwID0gJnNhYmxlX2x5bnhfaXJxX3R5cGU7CiAJfQpkaWZmIC0tZ2l0IGEvYXJjaC9hbHBoYS9rZXJuZWwvdGltZS5jIGIvYXJjaC9hbHBoYS9rZXJuZWwvdGltZS5jCmluZGV4IDc1NDgwY2EuLmU2YTIzMTQgMTAwNjQ0Ci0tLSBhL2FyY2gvYWxwaGEva2VybmVsL3RpbWUuYworKysgYi9hcmNoL2FscGhhL2tlcm5lbC90aW1lLmMKQEAgLTM0NiwxMiArMzQ2LDEyIEBACiAJeWVhciA9IENNT1NfUkVBRChSVENfWUVBUik7CiAKIAlpZiAoIShDTU9TX1JFQUQoUlRDX0NPTlRST0wpICYgUlRDX0RNX0JJTkFSWSkgfHwgUlRDX0FMV0FZU19CQ0QpIHsKLQkJQkNEX1RPX0JJTihzZWMpOwotCQlCQ0RfVE9fQklOKG1pbik7Ci0JCUJDRF9UT19CSU4oaG91cik7Ci0JCUJDRF9UT19CSU4oZGF5KTsKLQkJQkNEX1RPX0JJTihtb24pOwotCQlCQ0RfVE9fQklOKHllYXIpOworCQlzZWMgPSBiY2QyYmluKHNlYyk7CisJCW1pbiA9IGJjZDJiaW4obWluKTsKKwkJaG91ciA9IGJjZDJiaW4oaG91cik7CisJCWRheSA9IGJjZDJiaW4oZGF5KTsKKwkJbW9uID0gYmNkMmJpbihtb24pOworCQl5ZWFyID0gYmNkMmJpbih5ZWFyKTsKIAl9CiAKIAkvKiBQQy1saWtlIGlzIHN0YW5kYXJkOyB1c2VkIGZvciB5ZWFyID49IDcwICovCkBAIC01MjUsNyArNTI1LDcgQEAKIAogCWNtb3NfbWludXRlcyA9IENNT1NfUkVBRChSVENfTUlOVVRFUyk7CiAJaWYgKCEoc2F2ZV9jb250cm9sICYgUlRDX0RNX0JJTkFSWSkgfHwgUlRDX0FMV0FZU19CQ0QpCi0JCUJDRF9UT19CSU4oY21vc19taW51dGVzKTsKKwkJY21vc19taW51dGVzID0gYmNkMmJpbihjbW9zX21pbnV0ZXMpOwogCiAJLyoKIAkgKiBzaW5jZSB3ZSdyZSBvbmx5IGFkanVzdGluZyBtaW51dGVzIGFuZCBzZWNvbmRzLApAQCAtNTQzLDggKzU0Myw4IEBACiAKIAlpZiAoYWJzKHJlYWxfbWludXRlcyAtIGNtb3NfbWludXRlcykgPCAzMCkgewogCQlpZiAoIShzYXZlX2NvbnRyb2wgJiBSVENfRE1fQklOQVJZKSB8fCBSVENfQUxXQVlTX0JDRCkgewotCQkJQklOX1RPX0JDRChyZWFsX3NlY29uZHMpOwotCQkJQklOX1RPX0JDRChyZWFsX21pbnV0ZXMpOworCQkJcmVhbF9zZWNvbmRzID0gYmluMmJjZChyZWFsX3NlY29uZHMpOworCQkJcmVhbF9taW51dGVzID0gYmluMmJjZChyZWFsX21pbnV0ZXMpOwogCQl9CiAJCUNNT1NfV1JJVEUocmVhbF9zZWNvbmRzLFJUQ19TRUNPTkRTKTsKIAkJQ01PU19XUklURShyZWFsX21pbnV0ZXMsUlRDX01JTlVURVMpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vS2NvbmZpZyBiL2FyY2gvYXJtL0tjb25maWcKaW5kZXggZWZlZWQ2NS4uZGYzOWQyMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vS2NvbmZpZworKysgYi9hcmNoL2FybS9LY29uZmlnCkBAIC04LDYgKzgsNyBAQAogY29uZmlnIEFSTQogCWJvb2wKIAlkZWZhdWx0IHkKKwlzZWxlY3QgSEFWRV9BT1VUCiAJc2VsZWN0IEhBVkVfSURFCiAJc2VsZWN0IFJUQ19MSUIKIAlzZWxlY3QgU1lTX1NVUFBPUlRTX0FQTV9FTVVMQVRJT04KQEAgLTE0MCw5ICsxNDEsNiBAQAogCWJvb2wKIAlkZWZhdWx0IHkKIAotY29uZmlnIEFSQ0hfU1VQUE9SVFNfQU9VVAotCWRlZl9ib29sIHkKLQogY29uZmlnIEFSQ0hfTUFZX0hBVkVfUENfRkRDCiAJYm9vbAogCkBAIC0xOTQsNiArMTkyLDggQEAKIAogc291cmNlICJpbml0L0tjb25maWciCiAKK3NvdXJjZSAia2VybmVsL0tjb25maWcuZnJlZXplciIKKwogbWVudSAiU3lzdGVtIFR5cGUiCiAKIGNob2ljZQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vTWFrZWZpbGUgYi9hcmNoL2FybS9NYWtlZmlsZQppbmRleCBlMjI3NGJjLi43ZDUxMjEyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9NYWtlZmlsZQorKysgYi9hcmNoL2FybS9NYWtlZmlsZQpAQCAtMTE4LDkgKzExOCwxMCBAQAogIG1hY2hpbmUtJChDT05GSUdfQVJDSF9JWFAyM1hYKSAgICA6PSBpeHAyM3h4CiAgbWFjaGluZS0kKENPTkZJR19BUkNIX09NQVAxKQkgICA6PSBvbWFwMQogIG1hY2hpbmUtJChDT05GSUdfQVJDSF9PTUFQMikJICAgOj0gb21hcDIKKyBtYWNoaW5lLSQoQ09ORklHX0FSQ0hfT01BUDMpCSAgIDo9IG9tYXAyCiAgICAgcGxhdC0kKENPTkZJR19BUkNIX09NQVApCSAgIDo9IG9tYXAKICBtYWNoaW5lLSQoQ09ORklHX0FSQ0hfUzNDMjQxMCkJICAgOj0gczNjMjQxMCBzM2MyNDAwIHMzYzI0MTIgczNjMjQ0MCBzM2MyNDQyIHMzYzI0NDMKLSAgICBwbGF0LSQoQ09ORklHX1BMQVRfUzNDMjRYWCkJICAgOj0gczNjMjR4eAorICAgIHBsYXQtJChDT05GSUdfUExBVF9TM0MyNFhYKQkgICA6PSBzM2MyNHh4IHMzYwogIG1hY2hpbmUtJChDT05GSUdfQVJDSF9MSDdBNDBYKQkgICA6PSBsaDdhNDB4CiAgbWFjaGluZS0kKENPTkZJR19BUkNIX1ZFUlNBVElMRSkgIDo9IHZlcnNhdGlsZQogIG1hY2hpbmUtJChDT05GSUdfQVJDSF9JTVgpCSAgIDo9IGlteApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9vbWFwM19iZWFnbGVfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9vbWFwM19iZWFnbGVfZGVmY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUwNDJkMjcKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9jb25maWdzL29tYXAzX2JlYWdsZV9kZWZjb25maWcKQEAgLTAsMCArMSwxMzIxIEBACisjCisjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjctcmM4CisjIFdlZCBPY3QgIDEgMTc6MTQ6MjIgMjAwOAorIworQ09ORklHX0FSTT15CitDT05GSUdfU1lTX1NVUFBPUlRTX0FQTV9FTVVMQVRJT049eQorQ09ORklHX0dFTkVSSUNfR1BJTz15CitDT05GSUdfR0VORVJJQ19USU1FPXkKK0NPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKK0NPTkZJR19NTVU9eQorIyBDT05GSUdfTk9fSU9QT1JUIGlzIG5vdCBzZXQKK0NPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKK0NPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQorQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKK0NPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQorQ09ORklHX1RSQUNFX0lSUUZMQUdTX1NVUFBPUlQ9eQorQ09ORklHX0hBUkRJUlFTX1NXX1JFU0VORD15CitDT05GSUdfR0VORVJJQ19JUlFfUFJPQkU9eQorQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQorIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1U2NCBpcyBub3Qgc2V0CitDT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKK0NPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CitDT05GSUdfQVJDSF9TVVBQT1JUU19BT1VUPXkKK0NPTkZJR19aT05FX0RNQT15CitDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKK0NPTkZJR19WRUNUT1JTX0JBU0U9MHhmZmZmMDAwMAorQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKKworIworIyBHZW5lcmFsIHNldHVwCisjCitDT05GSUdfRVhQRVJJTUVOVEFMPXkKK0NPTkZJR19CUk9LRU5fT05fU01QPXkKK0NPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKK0NPTkZJR19MT0NBTFZFUlNJT049IiIKK0NPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15CitDT05GSUdfU1dBUD15CitDT05GSUdfU1lTVklQQz15CitDT05GSUdfU1lTVklQQ19TWVNDVEw9eQorIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKK0NPTkZJR19CU0RfUFJPQ0VTU19BQ0NUPXkKKyMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1RfVjMgaXMgbm90IHNldAorIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKK0NPTkZJR19MT0dfQlVGX1NISUZUPTE0CisjIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKK0NPTkZJR19HUk9VUF9TQ0hFRD15CitDT05GSUdfRkFJUl9HUk9VUF9TQ0hFRD15CisjIENPTkZJR19SVF9HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CitDT05GSUdfVVNFUl9TQ0hFRD15CisjIENPTkZJR19DR1JPVVBfU0NIRUQgaXMgbm90IHNldAorQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQorQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjI9eQorIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAorIyBDT05GSUdfTkFNRVNQQUNFUyBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQorQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKK0NPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRT15CitDT05GSUdfU1lTQ1RMPXkKK0NPTkZJR19FTUJFRERFRD15CitDT05GSUdfVUlEMTY9eQorIyBDT05GSUdfU1lTQ1RMX1NZU0NBTEwgaXMgbm90IHNldAorQ09ORklHX0tBTExTWU1TPXkKKyMgQ09ORklHX0tBTExTWU1TX0FMTCBpcyBub3Qgc2V0CitDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUz15CitDT05GSUdfSE9UUExVRz15CitDT05GSUdfUFJJTlRLPXkKK0NPTkZJR19CVUc9eQorQ09ORklHX0VMRl9DT1JFPXkKK0NPTkZJR19DT01QQVRfQlJLPXkKK0NPTkZJR19CQVNFX0ZVTEw9eQorQ09ORklHX0ZVVEVYPXkKK0NPTkZJR19BTk9OX0lOT0RFUz15CitDT05GSUdfRVBPTEw9eQorQ09ORklHX1NJR05BTEZEPXkKK0NPTkZJR19USU1FUkZEPXkKK0NPTkZJR19FVkVOVEZEPXkKK0NPTkZJR19TSE1FTT15CitDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQorQ09ORklHX1NMQUI9eQorIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CisjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0CisjIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX09QUk9GSUxFPXkKKyMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldAorIyBDT05GSUdfSEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTUyBpcyBub3Qgc2V0CisjIENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVCBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9LUFJPQkVTPXkKK0NPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQorIyBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSyBpcyBub3Qgc2V0CisjIENPTkZJR19IQVZFX0RNQV9BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0VfR0VORVJJQ19TTVBfSEVMUEVSUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9DTEs9eQorQ09ORklHX1BST0NfUEFHRV9NT05JVE9SPXkKK0NPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UPXkKK0NPTkZJR19TTEFCSU5GTz15CitDT05GSUdfUlRfTVVURVhFUz15CisjIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKK0NPTkZJR19CQVNFX1NNQUxMPTAKK0NPTkZJR19NT0RVTEVTPXkKKyMgQ09ORklHX01PRFVMRV9GT1JDRV9MT0FEIGlzIG5vdCBzZXQKK0NPTkZJR19NT0RVTEVfVU5MT0FEPXkKKyMgQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQgaXMgbm90IHNldAorQ09ORklHX01PRFZFUlNJT05TPXkKK0NPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEw9eQorQ09ORklHX0tNT0Q9eQorQ09ORklHX0JMT0NLPXkKKyMgQ09ORklHX0xCRCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xTRiBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0CisKKyMKKyMgSU8gU2NoZWR1bGVycworIworQ09ORklHX0lPU0NIRURfTk9PUD15CitDT05GSUdfSU9TQ0hFRF9BUz15CitDT05GSUdfSU9TQ0hFRF9ERUFETElORT15CitDT05GSUdfSU9TQ0hFRF9DRlE9eQorQ09ORklHX0RFRkFVTFRfQVM9eQorIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX0NGUSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iYW50aWNpcGF0b3J5IgorQ09ORklHX0NMQVNTSUNfUkNVPXkKKworIworIyBTeXN0ZW0gVHlwZQorIworIyBDT05GSUdfQVJDSF9BQUVDMjAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lOVEVHUkFUT1IgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9SRUFMVklFVyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1ZFUlNBVElMRSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0FUOTEgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9DTFBTNzUwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0NMUFM3MTFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfRUJTQTExMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0VQOTNYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0ZPT1RCUklER0UgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9ORVRYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSDcyMFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JTVggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JT1AxM1hYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSU9QMzJYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSU9QMzNYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSVhQMjNYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lYUDIwMDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JWFA0WFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9MNzIwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0tJUktXT09EIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfS1M4Njk1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTlM5WFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTE9LSSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX01WNzhYWDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9NWEMgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9PUklPTjVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUE5YNDAwOCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1BYQSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1JQQyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1NBMTEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1MzQzI0MTAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TSEFSSyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0xIN0E0MFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9EQVZJTkNJIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX09NQVA9eQorIyBDT05GSUdfQVJDSF9NU003WDAwQSBpcyBub3Qgc2V0CisKKyMKKyMgVEkgT01BUCBJbXBsZW1lbnRhdGlvbnMKKyMKK0NPTkZJR19BUkNIX09NQVBfT1RHPXkKKyMgQ09ORklHX0FSQ0hfT01BUDEgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9PTUFQMiBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9PTUFQMz15CisKKyMKKyMgT01BUCBGZWF0dXJlIFNlbGVjdGlvbnMKKyMKKyMgQ09ORklHX09NQVBfREVCVUdfUE9XRVJET01BSU4gaXMgbm90IHNldAorIyBDT05GSUdfT01BUF9ERUJVR19DTE9DS0RPTUFJTiBpcyBub3Qgc2V0CisjIENPTkZJR19PTUFQX1JFU0VUX0NMT0NLUyBpcyBub3Qgc2V0CisjIENPTkZJR19PTUFQX01VWCBpcyBub3Qgc2V0CisjIENPTkZJR19PTUFQX01DQlNQIGlzIG5vdCBzZXQKKyMgQ09ORklHX09NQVBfTVBVX1RJTUVSIGlzIG5vdCBzZXQKK0NPTkZJR19PTUFQXzMyS19USU1FUj15CitDT05GSUdfT01BUF8zMktfVElNRVJfSFo9MTI4CitDT05GSUdfT01BUF9ETV9USU1FUj15CisjIENPTkZJR19PTUFQX0xMX0RFQlVHX1VBUlQxIGlzIG5vdCBzZXQKKyMgQ09ORklHX09NQVBfTExfREVCVUdfVUFSVDIgaXMgbm90IHNldAorQ09ORklHX09NQVBfTExfREVCVUdfVUFSVDM9eQorQ09ORklHX0FSQ0hfT01BUDM0WFg9eQorQ09ORklHX0FSQ0hfT01BUDM0MzA9eQorCisjCisjIE9NQVAgQm9hcmQgVHlwZQorIworQ09ORklHX01BQ0hfT01BUDNfQkVBR0xFPXkKKworIworIyBCb290IG9wdGlvbnMKKyMKKworIworIyBQb3dlciBtYW5hZ2VtZW50CisjCisKKyMKKyMgUHJvY2Vzc29yIFR5cGUKKyMKK0NPTkZJR19DUFVfMzI9eQorQ09ORklHX0NQVV8zMnY2Sz15CitDT05GSUdfQ1BVX1Y3PXkKK0NPTkZJR19DUFVfMzJ2Nz15CitDT05GSUdfQ1BVX0FCUlRfRVY3PXkKK0NPTkZJR19DUFVfUEFCUlRfSUZBUj15CitDT05GSUdfQ1BVX0NBQ0hFX1Y3PXkKK0NPTkZJR19DUFVfQ0FDSEVfVklQVD15CitDT05GSUdfQ1BVX0NPUFlfVjY9eQorQ09ORklHX0NQVV9UTEJfVjc9eQorQ09ORklHX0NQVV9IQVNfQVNJRD15CitDT05GSUdfQ1BVX0NQMTU9eQorQ09ORklHX0NQVV9DUDE1X01NVT15CisKKyMKKyMgUHJvY2Vzc29yIEZlYXR1cmVzCisjCitDT05GSUdfQVJNX1RIVU1CPXkKKyMgQ09ORklHX0FSTV9USFVNQkVFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9JQ0FDSEVfRElTQUJMRSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfRENBQ0hFX0RJU0FCTEUgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0JQUkVESUNUX0RJU0FCTEUgaXMgbm90IHNldAorQ09ORklHX0hBU19UTFNfUkVHPXkKKyMgQ09ORklHX09VVEVSX0NBQ0hFIGlzIG5vdCBzZXQKKworIworIyBCdXMgc3VwcG9ydAorIworIyBDT05GSUdfUENJX1NZU0NBTEwgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TVVBQT1JUU19NU0kgaXMgbm90IHNldAorIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKKworIworIyBLZXJuZWwgRmVhdHVyZXMKKyMKK0NPTkZJR19USUNLX09ORVNIT1Q9eQorQ09ORklHX05PX0haPXkKK0NPTkZJR19ISUdIX1JFU19USU1FUlM9eQorQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFNfQlVJTEQ9eQorQ09ORklHX1ZNU1BMSVRfM0c9eQorIyBDT05GSUdfVk1TUExJVF8yRyBpcyBub3Qgc2V0CisjIENPTkZJR19WTVNQTElUXzFHIGlzIG5vdCBzZXQKK0NPTkZJR19QQUdFX09GRlNFVD0weEMwMDAwMDAwCisjIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKK0NPTkZJR19IWj0xMjgKK0NPTkZJR19BRUFCST15CitDT05GSUdfT0FCSV9DT01QQVQ9eQorQ09ORklHX0FSQ0hfRkxBVE1FTV9IQVNfSE9MRVM9eQorIyBDT05GSUdfQVJDSF9ESVNDT05USUdNRU1fRU5BQkxFIGlzIG5vdCBzZXQKK0NPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKK0NPTkZJR19GTEFUTUVNX01BTlVBTD15CisjIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQQVJTRU1FTV9NQU5VQUwgaXMgbm90IHNldAorQ09ORklHX0ZMQVRNRU09eQorQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKKyMgQ09ORklHX1NQQVJTRU1FTV9TVEFUSUMgaXMgbm90IHNldAorIyBDT05GSUdfU1BBUlNFTUVNX1ZNRU1NQVBfRU5BQkxFIGlzIG5vdCBzZXQKK0NPTkZJR19QQUdFRkxBR1NfRVhURU5ERUQ9eQorQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKKyMgQ09ORklHX1JFU09VUkNFU182NEJJVCBpcyBub3Qgc2V0CitDT05GSUdfWk9ORV9ETUFfRkxBRz0xCitDT05GSUdfQk9VTkNFPXkKK0NPTkZJR19WSVJUX1RPX0JVUz15CisjIENPTkZJR19MRURTIGlzIG5vdCBzZXQKK0NPTkZJR19BTElHTk1FTlRfVFJBUD15CisKKyMKKyMgQm9vdCBvcHRpb25zCisjCitDT05GSUdfWkJPT1RfUk9NX1RFWFQ9MHgwCitDT05GSUdfWkJPT1RfUk9NX0JTUz0weDAKK0NPTkZJR19DTURMSU5FPSJyb290PS9kZXYvbmZzIG5mc3Jvb3Q9MTkyLjE2OC4wLjE6L2hvbWUvdXNlci9idWlsZHJvb3QgaXA9MTkyLjE2OC4wLjI6MTkyLjE2OC4wLjE6MTkyLjE2OC4wLjE6MjU1LjI1NS4yNTUuMDp0Z3Q6ZXRoMDpvZmYgcncgY29uc29sZT10dHlTMiwxMTUyMDBuOCIKKyMgQ09ORklHX1hJUF9LRVJORUwgaXMgbm90IHNldAorIyBDT05GSUdfS0VYRUMgaXMgbm90IHNldAorCisjCisjIENQVSBQb3dlciBNYW5hZ2VtZW50CisjCisjIENPTkZJR19DUFVfRlJFUSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfSURMRSBpcyBub3Qgc2V0CisKKyMKKyMgRmxvYXRpbmcgcG9pbnQgZW11bGF0aW9uCisjCisKKyMKKyMgQXQgbGVhc3Qgb25lIGVtdWxhdGlvbiBtdXN0IGJlIHNlbGVjdGVkCisjCitDT05GSUdfRlBFX05XRlBFPXkKKyMgQ09ORklHX0ZQRV9OV0ZQRV9YUCBpcyBub3Qgc2V0CisjIENPTkZJR19GUEVfRkFTVEZQRSBpcyBub3Qgc2V0CitDT05GSUdfVkZQPXkKK0NPTkZJR19WRlB2Mz15CisjIENPTkZJR19ORU9OIGlzIG5vdCBzZXQKKworIworIyBVc2Vyc3BhY2UgYmluYXJ5IGZvcm1hdHMKKyMKK0NPTkZJR19CSU5GTVRfRUxGPXkKKyMgQ09ORklHX0JJTkZNVF9BT1VUIGlzIG5vdCBzZXQKK0NPTkZJR19CSU5GTVRfTUlTQz15CisKKyMKKyMgUG93ZXIgbWFuYWdlbWVudCBvcHRpb25zCisjCisjIENPTkZJR19QTSBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9TVVNQRU5EX1BPU1NJQkxFPXkKK0NPTkZJR19ORVQ9eQorCisjCisjIE5ldHdvcmtpbmcgb3B0aW9ucworIworQ09ORklHX1BBQ0tFVD15CisjIENPTkZJR19QQUNLRVRfTU1BUCBpcyBub3Qgc2V0CitDT05GSUdfVU5JWD15CitDT05GSUdfWEZSTT15CisjIENPTkZJR19YRlJNX1VTRVIgaXMgbm90IHNldAorIyBDT05GSUdfWEZSTV9TVUJfUE9MSUNZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGUk1fTUlHUkFURSBpcyBub3Qgc2V0CisjIENPTkZJR19YRlJNX1NUQVRJU1RJQ1MgaXMgbm90IHNldAorQ09ORklHX05FVF9LRVk9eQorIyBDT05GSUdfTkVUX0tFWV9NSUdSQVRFIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUPXkKKyMgQ09ORklHX0lQX01VTFRJQ0FTVCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAorQ09ORklHX0lQX0ZJQl9IQVNIPXkKK0NPTkZJR19JUF9QTlA9eQorQ09ORklHX0lQX1BOUF9ESENQPXkKK0NPTkZJR19JUF9QTlBfQk9PVFA9eQorQ09ORklHX0lQX1BOUF9SQVJQPXkKKyMgQ09ORklHX05FVF9JUElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9JUEdSRSBpcyBub3Qgc2V0CisjIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZTl9DT09LSUVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0CitDT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUPXkKK0NPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUw9eQorQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQ9eQorIyBDT05GSUdfSU5FVF9MUk8gaXMgbm90IHNldAorQ09ORklHX0lORVRfRElBRz15CitDT05GSUdfSU5FVF9UQ1BfRElBRz15CisjIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0CitDT05GSUdfVENQX0NPTkdfQ1VCSUM9eQorQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImN1YmljIgorIyBDT05GSUdfVENQX01ENVNJRyBpcyBub3Qgc2V0CisjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVFdPUktfU0VDTUFSSyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAorIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJUEMgaXMgbm90IHNldAorIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CisjIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQWCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0CisjIENPTkZJR19YMjUgaXMgbm90IHNldAorIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0CisjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAorIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAorCisjCisjIE5ldHdvcmsgdGVzdGluZworIworIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0CisjIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0CisjIENPTkZJR19DQU4gaXMgbm90IHNldAorIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0CisjIENPTkZJR19CVCBpcyBub3Qgc2V0CisjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CisKKyMKKyMgV2lyZWxlc3MKKyMKKyMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0CisjIENPTkZJR19NQUM4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19JRUVFODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CisKKyMKKyMgRGV2aWNlIERyaXZlcnMKKyMKKworIworIyBHZW5lcmljIERyaXZlciBPcHRpb25zCisjCitDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorQ09ORklHX1NUQU5EQUxPTkU9eQorQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQorIyBDT05GSUdfRldfTE9BREVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0RSSVZFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19ERVZSRVMgaXMgbm90IHNldAorIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAorIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKK0NPTkZJR19NVEQ9eQorIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DT05DQVQgaXMgbm90IHNldAorQ09ORklHX01URF9QQVJUSVRJT05TPXkKKyMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DTURMSU5FX1BBUlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9BRlNfUEFSVFMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0FSN19QQVJUUyBpcyBub3Qgc2V0CisKKyMKKyMgVXNlciBNb2R1bGVzIEFuZCBUcmFuc2xhdGlvbiBMYXllcnMKKyMKK0NPTkZJR19NVERfQ0hBUj15CitDT05GSUdfTVREX0JMS0RFVlM9eQorQ09ORklHX01URF9CTE9DSz15CisjIENPTkZJR19GVEwgaXMgbm90IHNldAorIyBDT05GSUdfTkZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19SRkRfRlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NTRkRDIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9PT1BTIGlzIG5vdCBzZXQKKworIworIyBSQU0vUk9NL0ZsYXNoIGNoaXAgZHJpdmVycworIworIyBDT05GSUdfTVREX0NGSSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfSkVERUNQUk9CRSBpcyBub3Qgc2V0CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE9eQorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8yPXkKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfND15CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfOCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMTYgaXMgbm90IHNldAorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzMyIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX0kxPXkKK0NPTkZJR19NVERfQ0ZJX0kyPXkKKyMgQ09ORklHX01URF9DRklfSTQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NGSV9JOCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ST00gaXMgbm90IHNldAorIyBDT05GSUdfTVREX0FCU0VOVCBpcyBub3Qgc2V0CisKKyMKKyMgTWFwcGluZyBkcml2ZXJzIGZvciBjaGlwIGFjY2VzcworIworIyBDT05GSUdfTVREX0NPTVBMRVhfTUFQUElOR1MgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1BMQVRSQU0gaXMgbm90IHNldAorCisjCisjIFNlbGYtY29udGFpbmVkIE1URCBkZXZpY2UgZHJpdmVycworIworIyBDT05GSUdfTVREX1NMUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9QSFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTVREUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9CTE9DSzJNVEQgaXMgbm90IHNldAorCisjCisjIERpc2stT24tQ2hpcCBEZXZpY2UgRHJpdmVycworIworIyBDT05GSUdfTVREX0RPQzIwMDAgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0RPQzIwMDEgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0RPQzIwMDFQTFVTIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfTkFORD15CisjIENPTkZJR19NVERfTkFORF9WRVJJRllfV1JJVEUgaXMgbm90IHNldAorIyBDT05GSUdfTVREX05BTkRfRUNDX1NNQyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTkFORF9NVVNFVU1fSURTIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfTkFORF9JRFM9eQorIyBDT05GSUdfTVREX05BTkRfRElTS09OQ0hJUCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTkFORF9OQU5EU0lNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9OQU5EX1BMQVRGT1JNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9BTEFVREEgaXMgbm90IHNldAorIyBDT05GSUdfTVREX09ORU5BTkQgaXMgbm90IHNldAorCisjCisjIFVCSSAtIFVuc29ydGVkIGJsb2NrIGltYWdlcworIworIyBDT05GSUdfTVREX1VCSSBpcyBub3Qgc2V0CisjIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWPXkKKyMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9MT09QPXkKKyMgQ09ORklHX0JMS19ERVZfQ1JZUFRPTE9PUCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1VCIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX1JBTT15CitDT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKK0NPTkZJR19CTEtfREVWX1JBTV9TSVpFPTE2Mzg0CisjIENPTkZJR19CTEtfREVWX1hJUCBpcyBub3Qgc2V0CisjIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVNDX0RFVklDRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfSURFPXkKKyMgQ09ORklHX0lERSBpcyBub3Qgc2V0CisKKyMKKyMgU0NTSSBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0CitDT05GSUdfU0NTST15CitDT05GSUdfU0NTSV9ETUE9eQorIyBDT05GSUdfU0NTSV9UR1QgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX1BST0NfRlM9eQorCisjCisjIFNDU0kgc3VwcG9ydCB0eXBlIChkaXNrLCB0YXBlLCBDRC1ST00pCisjCitDT05GSUdfQkxLX0RFVl9TRD15CisjIENPTkZJR19DSFJfREVWX1NUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NIUl9ERVZfT1NTVCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1NSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NIUl9ERVZfU0cgaXMgbm90IHNldAorIyBDT05GSUdfQ0hSX0RFVl9TQ0ggaXMgbm90IHNldAorCisjCisjIFNvbWUgU0NTSSBkZXZpY2VzIChlLmcuIENEIGp1a2Vib3gpIHN1cHBvcnQgbXVsdGlwbGUgTFVOcworIworIyBDT05GSUdfU0NTSV9NVUxUSV9MVU4gaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9DT05TVEFOVFMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9MT0dHSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU0NBTl9BU1lOQyBpcyBub3Qgc2V0CitDT05GSUdfU0NTSV9XQUlUX1NDQU49bQorCisjCisjIFNDU0kgVHJhbnNwb3J0cworIworIyBDT05GSUdfU0NTSV9TUElfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9GQ19BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0lTQ1NJX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU0FTX0xJQlNBUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NSUF9BVFRSUyBpcyBub3Qgc2V0CitDT05GSUdfU0NTSV9MT1dMRVZFTD15CisjIENPTkZJR19JU0NTSV9UQ1AgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQSBpcyBub3Qgc2V0CisjIENPTkZJR19NRCBpcyBub3Qgc2V0CitDT05GSUdfTkVUREVWSUNFUz15CisjIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0CisjIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldAorIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RVTiBpcyBub3Qgc2V0CisjIENPTkZJR19WRVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9FVEhFUk5FVCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRERVZfMTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAorCisjCisjIFdpcmVsZXNzIExBTgorIworIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lXTFdJRklfTEVEUyBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIE5ldHdvcmsgQWRhcHRlcnMKKyMKKyMgQ09ORklHX1VTQl9DQVRDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9LQVdFVEggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1BFR0FTVVMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1JUTDgxNTAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1VTQk5FVCBpcyBub3Qgc2V0CisjIENPTkZJR19XQU4gaXMgbm90IHNldAorIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMSVAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAorIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKKyMKK0NPTkZJR19JTlBVVD15CisjIENPTkZJR19JTlBVVF9GRl9NRU1MRVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1BPTExERVYgaXMgbm90IHNldAorCisjCisjIFVzZXJsYW5kIGludGVyZmFjZXMKKyMKKyMgQ09ORklHX0lOUFVUX01PVVNFREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9FVkRFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgRGV2aWNlIERyaXZlcnMKKyMKKyMgQ09ORklHX0lOUFVUX0tFWUJPQVJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX01PVVNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1RBQkxFVCBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9NSVNDIGlzIG5vdCBzZXQKKworIworIyBIYXJkd2FyZSBJL08gcG9ydHMKKyMKKyMgQ09ORklHX1NFUklPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKKworIworIyBDaGFyYWN0ZXIgZGV2aWNlcworIworQ09ORklHX1ZUPXkKK0NPTkZJR19DT05TT0xFX1RSQU5TTEFUSU9OUz15CitDT05GSUdfVlRfQ09OU09MRT15CitDT05GSUdfSFdfQ09OU09MRT15CisjIENPTkZJR19WVF9IV19DT05TT0xFX0JJTkRJTkcgaXMgbm90IHNldAorQ09ORklHX0RFVktNRU09eQorIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKKworIworIyBTZXJpYWwgZHJpdmVycworIworQ09ORklHX1NFUklBTF84MjUwPXkKK0NPTkZJR19TRVJJQUxfODI1MF9DT05TT0xFPXkKK0NPTkZJR19TRVJJQUxfODI1MF9OUl9VQVJUUz0zMgorQ09ORklHX1NFUklBTF84MjUwX1JVTlRJTUVfVUFSVFM9NAorQ09ORklHX1NFUklBTF84MjUwX0VYVEVOREVEPXkKK0NPTkZJR19TRVJJQUxfODI1MF9NQU5ZX1BPUlRTPXkKK0NPTkZJR19TRVJJQUxfODI1MF9TSEFSRV9JUlE9eQorQ09ORklHX1NFUklBTF84MjUwX0RFVEVDVF9JUlE9eQorQ09ORklHX1NFUklBTF84MjUwX1JTQT15CisKKyMKKyMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAorIworQ09ORklHX1NFUklBTF9DT1JFPXkKK0NPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKK0NPTkZJR19VTklYOThfUFRZUz15CisjIENPTkZJR19MRUdBQ1lfUFRZUyBpcyBub3Qgc2V0CisjIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAorQ09ORklHX0hXX1JBTkRPTT15CisjIENPTkZJR19OVlJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CisjIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAorQ09ORklHX0kyQz15CitDT05GSUdfSTJDX0JPQVJESU5GTz15CitDT05GSUdfSTJDX0NIQVJERVY9eQorQ09ORklHX0kyQ19IRUxQRVJfQVVUTz15CisKKyMKKyMgSTJDIEhhcmR3YXJlIEJ1cyBzdXBwb3J0CisjCisKKyMKKyMgSTJDIHN5c3RlbSBidXMgZHJpdmVycyAobW9zdGx5IGVtYmVkZGVkIC8gc3lzdGVtLW9uLWNoaXApCisjCisjIENPTkZJR19JMkNfR1BJTyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfT0NPUkVTIGlzIG5vdCBzZXQKK0NPTkZJR19JMkNfT01BUD15CisjIENPTkZJR19JMkNfU0lNVEVDIGlzIG5vdCBzZXQKKworIworIyBFeHRlcm5hbCBJMkMvU01CdXMgYWRhcHRlciBkcml2ZXJzCisjCisjIENPTkZJR19JMkNfUEFSUE9SVF9MSUdIVCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfVEFPU19FVk0gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1RJTllfVVNCIGlzIG5vdCBzZXQKKworIworIyBPdGhlciBJMkMvU01CdXMgYnVzIGRyaXZlcnMKKyMKKyMgQ09ORklHX0kyQ19QQ0FfUExBVEZPUk0gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NUVUIgaXMgbm90IHNldAorCisjCisjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAorIworIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUMjQgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19FRVBST00gaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUENGODU5MSBpcyBub3Qgc2V0CisjIENPTkZJR19JU1AxMzAxX09NQVAgaXMgbm90IHNldAorIyBDT05GSUdfVFBTNjUwMTAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19NQVg2ODc1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQlVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19DSElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQSSBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9SRVFVSVJFX0dQSU9MSUI9eQorQ09ORklHX0dQSU9MSUI9eQorIyBDT05GSUdfREVCVUdfR1BJTyBpcyBub3Qgc2V0CisjIENPTkZJR19HUElPX1NZU0ZTIGlzIG5vdCBzZXQKKworIworIyBJMkMgR1BJTyBleHBhbmRlcnM6CisjCisjIENPTkZJR19HUElPX01BWDczMlggaXMgbm90IHNldAorIyBDT05GSUdfR1BJT19QQ0E5NTNYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dQSU9fUENGODU3WCBpcyBub3Qgc2V0CisKKyMKKyMgUENJIEdQSU8gZXhwYW5kZXJzOgorIworCisjCisjIFNQSSBHUElPIGV4cGFuZGVyczoKKyMKKyMgQ09ORklHX1cxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CisjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0CisjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAorIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAorCisjCisjIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQorIworQ09ORklHX1NTQl9QT1NTSUJMRT15CisjIENPTkZJR19TU0IgaXMgbm90IHNldAorCisjCisjIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01GRF9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0CisjIENPTkZJR19IVENfRUdQSU8gaXMgbm90IHNldAorIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0CisjIENPTkZJR19VQ0IxNDAwX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1Q3TDY2WEIgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1RDNjM4N1hCIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9UQzYzOTNYQiBpcyBub3Qgc2V0CisKKyMKKyMgTXVsdGltZWRpYSBkZXZpY2VzCisjCisKKyMKKyMgTXVsdGltZWRpYSBjb3JlIHN1cHBvcnQKKyMKKyMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0CisjIENPTkZJR19EVkJfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19NRURJQSBpcyBub3Qgc2V0CisKKyMKKyMgTXVsdGltZWRpYSBkcml2ZXJzCisjCitDT05GSUdfREFCPXkKKyMgQ09ORklHX1VTQl9EQUJVU0IgaXMgbm90IHNldAorCisjCisjIEdyYXBoaWNzIHN1cHBvcnQKKyMKKyMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfRElTUExBWV9TVVBQT1JUIGlzIG5vdCBzZXQKKworIworIyBDb25zb2xlIGRpc3BsYXkgZHJpdmVyIHN1cHBvcnQKKyMKKyMgQ09ORklHX1ZHQV9DT05TT0xFIGlzIG5vdCBzZXQKK0NPTkZJR19EVU1NWV9DT05TT0xFPXkKKyMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9TVVBQT1JUIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfU1VQUE9SVD15CitDT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15CitDT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0k9eQorIyBDT05GSUdfVVNCX0FSQ0hfSEFTX0VIQ0kgaXMgbm90IHNldAorQ09ORklHX1VTQj15CisjIENPTkZJR19VU0JfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FOTk9VTkNFX05FV19ERVZJQ0VTIGlzIG5vdCBzZXQKKworIworIyBNaXNjZWxsYW5lb3VzIFVTQiBvcHRpb25zCisjCitDT05GSUdfVVNCX0RFVklDRUZTPXkKK0NPTkZJR19VU0JfREVWSUNFX0NMQVNTPXkKKyMgQ09ORklHX1VTQl9EWU5BTUlDX01JTk9SUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1RHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PVEdfV0hJVEVMSVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PVEdfQkxBQ0tMSVNUX0hVQiBpcyBub3Qgc2V0CitDT05GSUdfVVNCX01PTj15CisKKyMKKyMgVVNCIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCisjCisjIENPTkZJR19VU0JfQzY3WDAwX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTUDE3NjBfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PSENJX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0w4MTFfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9SOEE2NjU5N19IQ0QgaXMgbm90IHNldAorQ09ORklHX1VTQl9NVVNCX0hEUkM9eQorQ09ORklHX1VTQl9NVVNCX1NPQz15CisKKyMKKyMgT01BUCAzNDN4IGhpZ2ggc3BlZWQgVVNCIHN1cHBvcnQKKyMKK0NPTkZJR19VU0JfTVVTQl9IT1NUPXkKKyMgQ09ORklHX1VTQl9NVVNCX1BFUklQSEVSQUwgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX01VU0JfT1RHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfTVVTQl9IRFJDIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfTVVTQl9IRFJDX0hDRD15CisjIENPTkZJR19NVVNCX1BJT19PTkxZIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfSU5WRU5UUkFfRE1BPXkKKyMgQ09ORklHX1VTQl9USV9DUFBJX0RNQSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTVVTQl9ERUJVRyBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIERldmljZSBDbGFzcyBkcml2ZXJzCisjCisjIENPTkZJR19VU0JfQUNNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9QUklOVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9XRE0gaXMgbm90IHNldAorCisjCisjIE5PVEU6IFVTQl9TVE9SQUdFIGVuYWJsZXMgU0NTSSwgYW5kICdTQ1NJIGRpc2sgc3VwcG9ydCcKKyMKKworIworIyBtYXkgYWxzbyBiZSBuZWVkZWQ7IHNlZSBVU0JfU1RPUkFHRSBIZWxwIGZvciBtb3JlIGluZm9ybWF0aW9uCisjCisjIENPTkZJR19VU0JfU1RPUkFHRSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTElCVVNVQUwgaXMgbm90IHNldAorCisjCisjIFVTQiBJbWFnaW5nIGRldmljZXMKKyMKKyMgQ09ORklHX1VTQl9NREM4MDAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX01JQ1JPVEVLIGlzIG5vdCBzZXQKKworIworIyBVU0IgcG9ydCBkcml2ZXJzCisjCisjIENPTkZJR19VU0JfU0VSSUFMIGlzIG5vdCBzZXQKKworIworIyBVU0IgTWlzY2VsbGFuZW91cyBkcml2ZXJzCisjCisjIENPTkZJR19VU0JfRU1JNjIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0VNSTI2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BRFVUVVggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1JJTzUwMCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTEVHT1RPV0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0JFUlJZX0NIQVJHRSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9DWVBSRVNTX0NZN0M2MyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQ1lUSEVSTSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUEhJREdFVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSURNT1VTRSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRlRESV9FTEFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BUFBMRURJU1BMQVkgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9UUkFOQ0VWSUJSQVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSU9XQVJSSU9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU0lHSFRGVyBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0dBREdFVD15CisjIENPTkZJR19VU0JfR0FER0VUX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfREVCVUdfRklMRVMgaXMgbm90IHNldAorQ09ORklHX1VTQl9HQURHRVRfU0VMRUNURUQ9eQorIyBDT05GSUdfVVNCX0dBREdFVF9BTUQ1NTM2VURDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfQVRNRUxfVVNCQSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0ZTTF9VU0IyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfTkVUMjI4MCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX1BYQTI1WCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0dBREdFVF9NNjY1OTI9eQorQ09ORklHX1VTQl9NNjY1OTI9eQorIyBDT05GSUdfVVNCX0dBREdFVF9QWEEyN1ggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9HT0tVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfTEg3QTQwWCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX09NQVAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9TM0MyNDEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfQVQ5MSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0RVTU1ZX0hDRCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0dBREdFVF9EVUFMU1BFRUQ9eQorIyBDT05GSUdfVVNCX1pFUk8gaXMgbm90IHNldAorQ09ORklHX1VTQl9FVEg9bQorQ09ORklHX1VTQl9FVEhfUk5ESVM9eQorIyBDT05GSUdfVVNCX0dBREdFVEZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9GSUxFX1NUT1JBR0UgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dfU0VSSUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9NSURJX0dBREdFVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR19QUklOVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9DRENfQ09NUE9TSVRFIGlzIG5vdCBzZXQKK0NPTkZJR19NTUM9eQorIyBDT05GSUdfTU1DX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NQ19VTlNBRkVfUkVTVU1FIGlzIG5vdCBzZXQKKworIworIyBNTUMvU0QgQ2FyZCBEcml2ZXJzCisjCitDT05GSUdfTU1DX0JMT0NLPXkKK0NPTkZJR19NTUNfQkxPQ0tfQk9VTkNFPXkKKyMgQ09ORklHX1NESU9fVUFSVCBpcyBub3Qgc2V0CisjIENPTkZJR19NTUNfVEVTVCBpcyBub3Qgc2V0CisKKyMKKyMgTU1DL1NEIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCisjCisjIENPTkZJR19NTUNfU0RIQ0kgaXMgbm90IHNldAorIyBDT05GSUdfTU1DX09NQVAgaXMgbm90IHNldAorIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldAorIyBDT05GSUdfQUNDRVNTSUJJTElUWSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0CitDT05GSUdfUlRDX0xJQj15CitDT05GSUdfUlRDX0NMQVNTPXkKK0NPTkZJR19SVENfSENUT1NZUz15CitDT05GSUdfUlRDX0hDVE9TWVNfREVWSUNFPSJydGMwIgorIyBDT05GSUdfUlRDX0RFQlVHIGlzIG5vdCBzZXQKKworIworIyBSVEMgaW50ZXJmYWNlcworIworQ09ORklHX1JUQ19JTlRGX1NZU0ZTPXkKK0NPTkZJR19SVENfSU5URl9QUk9DPXkKK0NPTkZJR19SVENfSU5URl9ERVY9eQorIyBDT05GSUdfUlRDX0lOVEZfREVWX1VJRV9FTVVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfVEVTVCBpcyBub3Qgc2V0CisKKyMKKyMgSTJDIFJUQyBkcml2ZXJzCisjCisjIENPTkZJR19SVENfRFJWX0RTMTMwNyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTM3NCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTY3MiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX01BWDY5MDAgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SUzVDMzcyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfSVNMMTIwOCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1gxMjA1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUENGODU2MyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1BDRjg1ODMgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDFUODAgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9TMzUzOTBBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRk0zMTMwIGlzIG5vdCBzZXQKKworIworIyBTUEkgUlRDIGRyaXZlcnMKKyMKKworIworIyBQbGF0Zm9ybSBSVEMgZHJpdmVycworIworIyBDT05GSUdfUlRDX0RSVl9DTU9TIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNTExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNTUzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNzQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfU1RLMTdUQTggaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDhUODYgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDhUNTkgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9WMzAyMCBpcyBub3Qgc2V0CisKKyMKKyMgb24tQ1BVIFJUQyBkcml2ZXJzCisjCisjIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKKworIworIyBWb2x0YWdlIGFuZCBDdXJyZW50IHJlZ3VsYXRvcnMKKyMKKyMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19SRUdVTEFUT1JfRklYRURfVk9MVEFHRSBpcyBub3Qgc2V0CisjIENPTkZJR19SRUdVTEFUT1JfVklSVFVBTF9DT05TVU1FUiBpcyBub3Qgc2V0CisjIENPTkZJR19SRUdVTEFUT1JfQlEyNDAyMiBpcyBub3Qgc2V0CisjIENPTkZJR19VSU8gaXMgbm90IHNldAorCisjCisjIEZpbGUgc3lzdGVtcworIworQ09ORklHX0VYVDJfRlM9eQorIyBDT05GSUdfRVhUMl9GU19YQVRUUiBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0CitDT05GSUdfRVhUM19GUz15CisjIENPTkZJR19FWFQzX0ZTX1hBVFRSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDRERVZfRlMgaXMgbm90IHNldAorQ09ORklHX0pCRD15CisjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CitDT05GSUdfRE5PVElGWT15CitDT05GSUdfSU5PVElGWT15CitDT05GSUdfSU5PVElGWV9VU0VSPXkKK0NPTkZJR19RVU9UQT15CisjIENPTkZJR19RVU9UQV9ORVRMSU5LX0lOVEVSRkFDRSBpcyBub3Qgc2V0CitDT05GSUdfUFJJTlRfUVVPVEFfV0FSTklORz15CisjIENPTkZJR19RRk1UX1YxIGlzIG5vdCBzZXQKK0NPTkZJR19RRk1UX1YyPXkKK0NPTkZJR19RVU9UQUNUTD15CisjIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKKworIworIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCisjCisjIENPTkZJR19JU085NjYwX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VERl9GUyBpcyBub3Qgc2V0CisKKyMKKyMgRE9TL0ZBVC9OVCBGaWxlc3lzdGVtcworIworQ09ORklHX0ZBVF9GUz15CitDT05GSUdfTVNET1NfRlM9eQorQ09ORklHX1ZGQVRfRlM9eQorQ09ORklHX0ZBVF9ERUZBVUxUX0NPREVQQUdFPTQzNworQ09ORklHX0ZBVF9ERUZBVUxUX0lPQ0hBUlNFVD0iaXNvODg1OS0xIgorIyBDT05GSUdfTlRGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgUHNldWRvIGZpbGVzeXN0ZW1zCisjCitDT05GSUdfUFJPQ19GUz15CitDT05GSUdfUFJPQ19TWVNDVEw9eQorQ09ORklHX1NZU0ZTPXkKK0NPTkZJR19UTVBGUz15CisjIENPTkZJR19UTVBGU19QT1NJWF9BQ0wgaXMgbm90IHNldAorIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBNaXNjZWxsYW5lb3VzIGZpbGVzeXN0ZW1zCisjCisjIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19KRkZTMl9GUz15CitDT05GSUdfSkZGUzJfRlNfREVCVUc9MAorQ09ORklHX0pGRlMyX0ZTX1dSSVRFQlVGRkVSPXkKKyMgQ09ORklHX0pGRlMyX0ZTX1dCVUZfVkVSSUZZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGRlMyX1NVTU1BUlkgaXMgbm90IHNldAorIyBDT05GSUdfSkZGUzJfRlNfWEFUVFIgaXMgbm90IHNldAorIyBDT05GSUdfSkZGUzJfQ09NUFJFU1NJT05fT1BUSU9OUyBpcyBub3Qgc2V0CitDT05GSUdfSkZGUzJfWkxJQj15CisjIENPTkZJR19KRkZTMl9MWk8gaXMgbm90IHNldAorQ09ORklHX0pGRlMyX1JUSU1FPXkKKyMgQ09ORklHX0pGRlMyX1JVQklOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQU1GUyBpcyBub3Qgc2V0CisjIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX09NRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAorQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQorQ09ORklHX05GU19GUz15CitDT05GSUdfTkZTX1YzPXkKKyMgQ09ORklHX05GU19WM19BQ0wgaXMgbm90IHNldAorQ09ORklHX05GU19WND15CitDT05GSUdfUk9PVF9ORlM9eQorIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0CitDT05GSUdfTE9DS0Q9eQorQ09ORklHX0xPQ0tEX1Y0PXkKK0NPTkZJR19ORlNfQ09NTU9OPXkKK0NPTkZJR19TVU5SUEM9eQorQ09ORklHX1NVTlJQQ19HU1M9eQorQ09ORklHX1JQQ1NFQ19HU1NfS1JCNT15CisjIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DSUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgUGFydGl0aW9uIFR5cGVzCisjCitDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEPXkKKyMgQ09ORklHX0FDT1JOX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19PU0ZfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FNSUdBX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFSSV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfTUFDX1BBUlRJVElPTiBpcyBub3Qgc2V0CitDT05GSUdfTVNET1NfUEFSVElUSU9OPXkKKyMgQ09ORklHX0JTRF9ESVNLTEFCRUwgaXMgbm90IHNldAorIyBDT05GSUdfTUlOSVhfU1VCUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NPTEFSSVNfWDg2X1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19VTklYV0FSRV9ESVNLTEFCRUwgaXMgbm90IHNldAorIyBDT05GSUdfTERNX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19TR0lfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VMVFJJWF9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfU1VOX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19LQVJNQV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfRUZJX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNWNjhfUEFSVElUSU9OIGlzIG5vdCBzZXQKK0NPTkZJR19OTFM9eQorQ09ORklHX05MU19ERUZBVUxUPSJpc284ODU5LTEiCitDT05GSUdfTkxTX0NPREVQQUdFXzQzNz15CisjIENPTkZJR19OTFNfQ09ERVBBR0VfNzM3IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV83NzUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODUyIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjEgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjkgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzNiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85MzIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzk0OSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODc0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzggaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTEgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0FTQ0lJIGlzIG5vdCBzZXQKK0NPTkZJR19OTFNfSVNPODg1OV8xPXkKKyMgQ09ORklHX05MU19JU084ODU5XzIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV80IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV83IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzkgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMTMgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMTQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMTUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0tPSThfUiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfS09JOF9VIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19VVEY4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0RMTSBpcyBub3Qgc2V0CisKKyMKKyMgS2VybmVsIGhhY2tpbmcKKyMKKyMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKK0NPTkZJR19FTkFCTEVfV0FSTl9ERVBSRUNBVEVEPXkKK0NPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CitDT05GSUdfRlJBTUVfV0FSTj0xMDI0CitDT05GSUdfTUFHSUNfU1lTUlE9eQorIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfS0VSTkVMPXkKKyMgQ09ORklHX0RFQlVHX1NISVJRIGlzIG5vdCBzZXQKK0NPTkZJR19ERVRFQ1RfU09GVExPQ0tVUD15CisjIENPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQyBpcyBub3Qgc2V0CitDT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUNfVkFMVUU9MAorQ09ORklHX1NDSEVEX0RFQlVHPXkKKyMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfVElNRVJfU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfT0JKRUNUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TTEFCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAorIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19NVVRFWEVTPXkKKyMgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MgaXMgbm90IHNldAorIyBDT05GSUdfUFJPVkVfTE9DS0lORyBpcyBub3Qgc2V0CisjIENPTkZJR19MT0NLX1NUQVQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTE9DS0lOR19BUElfU0VMRlRFU1RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQlVHVkVSQk9TRSBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfSU5GTz15CisjIENPTkZJR19ERUJVR19WTSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19XUklURUNPVU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX01FTU9SWV9JTklUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAorQ09ORklHX0ZSQU1FX1BPSU5URVI9eQorIyBDT05GSUdfQk9PVF9QUklOVEtfREVMQVkgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0ZUUkFDRT15CitDT05GSUdfSEFWRV9EWU5BTUlDX0ZUUkFDRT15CisjIENPTkZJR19GVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfSVJRU09GRl9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfU0NIRURfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPTlRFWFRfU1dJVENIX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0FSQ0hfS0dEQj15CisjIENPTkZJR19LR0RCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1VTRVIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRVJST1JTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0xMIGlzIG5vdCBzZXQKKworIworIyBTZWN1cml0eSBvcHRpb25zCisjCisjIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZX0ZJTEVfQ0FQQUJJTElUSUVTIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE89eQorCisjCisjIENyeXB0byBjb3JlIG9yIGhlbHBlcgorIworQ09ORklHX0NSWVBUT19BTEdBUEk9eQorQ09ORklHX0NSWVBUT19CTEtDSVBIRVI9eQorQ09ORklHX0NSWVBUT19NQU5BR0VSPXkKKyMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTlVMTCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ1JZUFREIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19BVVRIRU5DIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19URVNUIGlzIG5vdCBzZXQKKworIworIyBBdXRoZW50aWNhdGVkIEVuY3J5cHRpb24gd2l0aCBBc3NvY2lhdGVkIERhdGEKKyMKKyMgQ09ORklHX0NSWVBUT19DQ00gaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dDTSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0VRSVYgaXMgbm90IHNldAorCisjCisjIEJsb2NrIG1vZGVzCisjCitDT05GSUdfQ1JZUFRPX0NCQz15CisjIENPTkZJR19DUllQVE9fQ1RSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DVFMgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19FQ0I9bQorIyBDT05GSUdfQ1JZUFRPX0xSVyBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX1BDQkM9bQorIyBDT05GSUdfQ1JZUFRPX1hUUyBpcyBub3Qgc2V0CisKKyMKKyMgSGFzaCBtb2RlcworIworIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorCisjCisjIERpZ2VzdAorIworIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fTUQ1PXkKKyMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMTI4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQxNjAgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDI1NiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMzIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TSEExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TSEEyNTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NIQTUxMiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVEdSMTkyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19XUDUxMiBpcyBub3Qgc2V0CisKKyMKKyMgQ2lwaGVycworIworIyBDT05GSUdfQ1JZUFRPX0FFUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQU5VQklTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19BUkM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19CTE9XRklTSCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0FNRUxMSUEgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NBU1Q1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQVNUNiBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0RFUz15CisjIENPTkZJR19DUllQVE9fRkNSWVBUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19LSEFaQUQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NBTFNBMjAgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NFRUQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NFUlBFTlQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RFQSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVFdPRklTSCBpcyBub3Qgc2V0CisKKyMKKyMgQ29tcHJlc3Npb24KKyMKKyMgQ09ORklHX0NSWVBUT19ERUZMQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19MWk8gaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19IVz15CisKKyMKKyMgTGlicmFyeSByb3V0aW5lcworIworQ09ORklHX0JJVFJFVkVSU0U9eQorIyBDT05GSUdfR0VORVJJQ19GSU5EX0ZJUlNUX0JJVCBpcyBub3Qgc2V0CisjIENPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQgaXMgbm90IHNldAorQ09ORklHX0NSQ19DQ0lUVD15CisjIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0CisjIENPTkZJR19DUkNfVDEwRElGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQ19JVFVfVCBpcyBub3Qgc2V0CitDT05GSUdfQ1JDMzI9eQorIyBDT05GSUdfQ1JDNyBpcyBub3Qgc2V0CitDT05GSUdfTElCQ1JDMzJDPXkKK0NPTkZJR19aTElCX0lORkxBVEU9eQorQ09ORklHX1pMSUJfREVGTEFURT15CitDT05GSUdfUExJU1Q9eQorQ09ORklHX0hBU19JT01FTT15CitDT05GSUdfSEFTX0lPUE9SVD15CitDT05GSUdfSEFTX0RNQT15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL29tYXBfbGRwX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcF9sZHBfZGVmY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk0OGEyMTIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9jb25maWdzL29tYXBfbGRwX2RlZmNvbmZpZwpAQCAtMCwwICsxLDEwNDQgQEAKKyMKKyMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yNy1yYzUKKyMgRnJpIE9jdCAxMCAxMTo0OTo0MSAyMDA4CisjCitDT05GSUdfQVJNPXkKK0NPTkZJR19TWVNfU1VQUE9SVFNfQVBNX0VNVUxBVElPTj15CitDT05GSUdfR0VORVJJQ19HUElPPXkKK0NPTkZJR19HRU5FUklDX1RJTUU9eQorQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQorQ09ORklHX01NVT15CisjIENPTkZJR19OT19JT1BPUlQgaXMgbm90IHNldAorQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQorQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CitDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQorQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15CitDT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15CitDT05GSUdfSEFSRElSUVNfU1dfUkVTRU5EPXkKK0NPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15CitDT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15CisjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VMzIgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKK0NPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQorQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKK0NPTkZJR19BUkNIX1NVUFBPUlRTX0FPVVQ9eQorQ09ORklHX1pPTkVfRE1BPXkKK0NPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQorQ09ORklHX1ZFQ1RPUlNfQkFTRT0weGZmZmYwMDAwCitDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgorCisjCisjIEdlbmVyYWwgc2V0dXAKKyMKK0NPTkZJR19FWFBFUklNRU5UQUw9eQorQ09ORklHX0JST0tFTl9PTl9TTVA9eQorQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgorQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgorQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKK0NPTkZJR19TV0FQPXkKK0NPTkZJR19TWVNWSVBDPXkKK0NPTkZJR19TWVNWSVBDX1NZU0NUTD15CitDT05GSUdfQlNEX1BST0NFU1NfQUNDVD15CisjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUX1YzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKK0NPTkZJR19MT0dfQlVGX1NISUZUPTE0CisjIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKK0NPTkZJR19HUk9VUF9TQ0hFRD15CitDT05GSUdfRkFJUl9HUk9VUF9TQ0hFRD15CisjIENPTkZJR19SVF9HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CitDT05GSUdfVVNFUl9TQ0hFRD15CisjIENPTkZJR19DR1JPVVBfU0NIRUQgaXMgbm90IHNldAorQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQorQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjI9eQorIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAorIyBDT05GSUdfTkFNRVNQQUNFUyBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQorQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKK0NPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRT15CitDT05GSUdfU1lTQ1RMPXkKK0NPTkZJR19FTUJFRERFRD15CitDT05GSUdfVUlEMTY9eQorIyBDT05GSUdfU1lTQ1RMX1NZU0NBTEwgaXMgbm90IHNldAorQ09ORklHX0tBTExTWU1TPXkKKyMgQ09ORklHX0tBTExTWU1TX0FMTCBpcyBub3Qgc2V0CitDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUz15CitDT05GSUdfSE9UUExVRz15CitDT05GSUdfUFJJTlRLPXkKK0NPTkZJR19CVUc9eQorQ09ORklHX0VMRl9DT1JFPXkKK0NPTkZJR19DT01QQVRfQlJLPXkKK0NPTkZJR19CQVNFX0ZVTEw9eQorQ09ORklHX0ZVVEVYPXkKK0NPTkZJR19BTk9OX0lOT0RFUz15CitDT05GSUdfRVBPTEw9eQorQ09ORklHX1NJR05BTEZEPXkKK0NPTkZJR19USU1FUkZEPXkKK0NPTkZJR19FVkVOVEZEPXkKK0NPTkZJR19TSE1FTT15CitDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQorQ09ORklHX1NMQUI9eQorIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CisjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0CisjIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX09QUk9GSUxFPXkKKyMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldAorIyBDT05GSUdfSEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTUyBpcyBub3Qgc2V0CisjIENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVCBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9LUFJPQkVTPXkKK0NPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQorIyBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSyBpcyBub3Qgc2V0CisjIENPTkZJR19IQVZFX0RNQV9BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0VfR0VORVJJQ19TTVBfSEVMUEVSUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9DTEs9eQorQ09ORklHX1BST0NfUEFHRV9NT05JVE9SPXkKK0NPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UPXkKK0NPTkZJR19TTEFCSU5GTz15CitDT05GSUdfUlRfTVVURVhFUz15CisjIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKK0NPTkZJR19CQVNFX1NNQUxMPTAKK0NPTkZJR19NT0RVTEVTPXkKKyMgQ09ORklHX01PRFVMRV9GT1JDRV9MT0FEIGlzIG5vdCBzZXQKK0NPTkZJR19NT0RVTEVfVU5MT0FEPXkKKyMgQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQgaXMgbm90IHNldAorQ09ORklHX01PRFZFUlNJT05TPXkKK0NPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEw9eQorQ09ORklHX0tNT0Q9eQorQ09ORklHX0JMT0NLPXkKKyMgQ09ORklHX0xCRCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xTRiBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0CisKKyMKKyMgSU8gU2NoZWR1bGVycworIworQ09ORklHX0lPU0NIRURfTk9PUD15CitDT05GSUdfSU9TQ0hFRF9BUz15CitDT05GSUdfSU9TQ0hFRF9ERUFETElORT15CitDT05GSUdfSU9TQ0hFRF9DRlE9eQorQ09ORklHX0RFRkFVTFRfQVM9eQorIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX0NGUSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iYW50aWNpcGF0b3J5IgorQ09ORklHX0NMQVNTSUNfUkNVPXkKKworIworIyBTeXN0ZW0gVHlwZQorIworIyBDT05GSUdfQVJDSF9BQUVDMjAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lOVEVHUkFUT1IgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9SRUFMVklFVyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1ZFUlNBVElMRSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0FUOTEgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9DTFBTNzUwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0NMUFM3MTFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfRUJTQTExMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0VQOTNYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0ZPT1RCUklER0UgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9ORVRYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSDcyMFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JTVggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JT1AxM1hYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSU9QMzJYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSU9QMzNYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSVhQMjNYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lYUDIwMDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JWFA0WFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9MNzIwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0tJUktXT09EIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfS1M4Njk1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTlM5WFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTE9LSSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX01WNzhYWDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9NWEMgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9PUklPTjVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUE5YNDAwOCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1BYQSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1JQQyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1NBMTEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1MzQzI0MTAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TSEFSSyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0xIN0E0MFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9EQVZJTkNJIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX09NQVA9eQorIyBDT05GSUdfQVJDSF9NU003WDAwQSBpcyBub3Qgc2V0CisKKyMKKyMgVEkgT01BUCBJbXBsZW1lbnRhdGlvbnMKKyMKK0NPTkZJR19BUkNIX09NQVBfT1RHPXkKKyMgQ09ORklHX0FSQ0hfT01BUDEgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9PTUFQMiBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9PTUFQMz15CisKKyMKKyMgT01BUCBGZWF0dXJlIFNlbGVjdGlvbnMKKyMKKyMgQ09ORklHX09NQVBfREVCVUdfUE9XRVJET01BSU4gaXMgbm90IHNldAorIyBDT05GSUdfT01BUF9ERUJVR19DTE9DS0RPTUFJTiBpcyBub3Qgc2V0CisjIENPTkZJR19PTUFQX1JFU0VUX0NMT0NLUyBpcyBub3Qgc2V0CitDT05GSUdfT01BUF9NVVg9eQorQ09ORklHX09NQVBfTVVYX0RFQlVHPXkKK0NPTkZJR19PTUFQX01VWF9XQVJOSU5HUz15CitDT05GSUdfT01BUF9NQ0JTUD15CisjIENPTkZJR19PTUFQX01QVV9USU1FUiBpcyBub3Qgc2V0CitDT05GSUdfT01BUF8zMktfVElNRVI9eQorQ09ORklHX09NQVBfMzJLX1RJTUVSX0haPTEyOAorQ09ORklHX09NQVBfRE1fVElNRVI9eQorIyBDT05GSUdfT01BUF9MTF9ERUJVR19VQVJUMSBpcyBub3Qgc2V0CisjIENPTkZJR19PTUFQX0xMX0RFQlVHX1VBUlQyIGlzIG5vdCBzZXQKK0NPTkZJR19PTUFQX0xMX0RFQlVHX1VBUlQzPXkKK0NPTkZJR19PTUFQX1NFUklBTF9XQUtFPXkKK0NPTkZJR19BUkNIX09NQVAzNFhYPXkKK0NPTkZJR19BUkNIX09NQVAzNDMwPXkKKworIworIyBPTUFQIEJvYXJkIFR5cGUKKyMKKyMgQ09ORklHX01BQ0hfT01BUDNfQkVBR0xFIGlzIG5vdCBzZXQKK0NPTkZJR19NQUNIX09NQVBfTERQPXkKKyMgQ09ORklHX01BQ0hfT1ZFUk8gaXMgbm90IHNldAorCisjCisjIEJvb3Qgb3B0aW9ucworIworCisjCisjIFBvd2VyIG1hbmFnZW1lbnQKKyMKKworIworIyBQcm9jZXNzb3IgVHlwZQorIworQ09ORklHX0NQVV8zMj15CitDT05GSUdfQ1BVXzMydjZLPXkKK0NPTkZJR19DUFVfVjc9eQorQ09ORklHX0NQVV8zMnY3PXkKK0NPTkZJR19DUFVfQUJSVF9FVjc9eQorQ09ORklHX0NQVV9QQUJSVF9JRkFSPXkKK0NPTkZJR19DUFVfQ0FDSEVfVjc9eQorQ09ORklHX0NQVV9DQUNIRV9WSVBUPXkKK0NPTkZJR19DUFVfQ09QWV9WNj15CitDT05GSUdfQ1BVX1RMQl9WNz15CitDT05GSUdfQ1BVX0hBU19BU0lEPXkKK0NPTkZJR19DUFVfQ1AxNT15CitDT05GSUdfQ1BVX0NQMTVfTU1VPXkKKworIworIyBQcm9jZXNzb3IgRmVhdHVyZXMKKyMKK0NPTkZJR19BUk1fVEhVTUI9eQorIyBDT05GSUdfQVJNX1RIVU1CRUUgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0lDQUNIRV9ESVNBQkxFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9EQ0FDSEVfRElTQUJMRSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfQlBSRURJQ1RfRElTQUJMRSBpcyBub3Qgc2V0CitDT05GSUdfSEFTX1RMU19SRUc9eQorIyBDT05GSUdfT1VURVJfQ0FDSEUgaXMgbm90IHNldAorCisjCisjIEJ1cyBzdXBwb3J0CisjCisjIENPTkZJR19QQ0lfU1lTQ0FMTCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1NVUFBPUlRTX01TSSBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0NBUkQgaXMgbm90IHNldAorCisjCisjIEtlcm5lbCBGZWF0dXJlcworIworQ09ORklHX1RJQ0tfT05FU0hPVD15CitDT05GSUdfTk9fSFo9eQorQ09ORklHX0hJR0hfUkVTX1RJTUVSUz15CitDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UU19CVUlMRD15CisjIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKK0NPTkZJR19IWj0xMjgKK0NPTkZJR19BRUFCST15CitDT05GSUdfT0FCSV9DT01QQVQ9eQorQ09ORklHX0FSQ0hfRkxBVE1FTV9IQVNfSE9MRVM9eQorIyBDT05GSUdfQVJDSF9ESVNDT05USUdNRU1fRU5BQkxFIGlzIG5vdCBzZXQKK0NPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKK0NPTkZJR19GTEFUTUVNX01BTlVBTD15CisjIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQQVJTRU1FTV9NQU5VQUwgaXMgbm90IHNldAorQ09ORklHX0ZMQVRNRU09eQorQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKKyMgQ09ORklHX1NQQVJTRU1FTV9TVEFUSUMgaXMgbm90IHNldAorIyBDT05GSUdfU1BBUlNFTUVNX1ZNRU1NQVBfRU5BQkxFIGlzIG5vdCBzZXQKK0NPTkZJR19QQUdFRkxBR1NfRVhURU5ERUQ9eQorQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKKyMgQ09ORklHX1JFU09VUkNFU182NEJJVCBpcyBub3Qgc2V0CitDT05GSUdfWk9ORV9ETUFfRkxBRz0xCitDT05GSUdfQk9VTkNFPXkKK0NPTkZJR19WSVJUX1RPX0JVUz15CisjIENPTkZJR19MRURTIGlzIG5vdCBzZXQKK0NPTkZJR19BTElHTk1FTlRfVFJBUD15CisKKyMKKyMgQm9vdCBvcHRpb25zCisjCitDT05GSUdfWkJPT1RfUk9NX1RFWFQ9MHgwCitDT05GSUdfWkJPT1RfUk9NX0JTUz0weDAKK0NPTkZJR19DTURMSU5FPSJyb290PS9kZXYvbmZzIG5mc3Jvb3Q9MTkyLjE2OC4wLjE6L2hvbWUvdXNlci9idWlsZHJvb3QgaXA9MTkyLjE2OC4wLjI6MTkyLjE2OC4wLjE6MTkyLjE2OC4wLjE6MjU1LjI1NS4yNTUuMDp0Z3Q6ZXRoMDpvZmYgcncgY29uc29sZT10dHlTMiwxMTUyMDBuOCIKKyMgQ09ORklHX1hJUF9LRVJORUwgaXMgbm90IHNldAorIyBDT05GSUdfS0VYRUMgaXMgbm90IHNldAorCisjCisjIENQVSBGcmVxdWVuY3kgc2NhbGluZworIworIyBDT05GSUdfQ1BVX0ZSRVEgaXMgbm90IHNldAorCisjCisjIEZsb2F0aW5nIHBvaW50IGVtdWxhdGlvbgorIworCisjCisjIEF0IGxlYXN0IG9uZSBlbXVsYXRpb24gbXVzdCBiZSBzZWxlY3RlZAorIworQ09ORklHX0ZQRV9OV0ZQRT15CisjIENPTkZJR19GUEVfTldGUEVfWFAgaXMgbm90IHNldAorIyBDT05GSUdfRlBFX0ZBU1RGUEUgaXMgbm90IHNldAorQ09ORklHX1ZGUD15CitDT05GSUdfVkZQdjM9eQorIyBDT05GSUdfTkVPTiBpcyBub3Qgc2V0CisKKyMKKyMgVXNlcnNwYWNlIGJpbmFyeSBmb3JtYXRzCisjCitDT05GSUdfQklORk1UX0VMRj15CisjIENPTkZJR19CSU5GTVRfQU9VVCBpcyBub3Qgc2V0CitDT05GSUdfQklORk1UX01JU0M9eQorCisjCisjIFBvd2VyIG1hbmFnZW1lbnQgb3B0aW9ucworIworIyBDT05GSUdfUE0gaXMgbm90IHNldAorQ09ORklHX0FSQ0hfU1VTUEVORF9QT1NTSUJMRT15CisjIENPTkZJR19ORVQgaXMgbm90IHNldAorCisjCisjIERldmljZSBEcml2ZXJzCisjCisKKyMKKyMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucworIworQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKK0NPTkZJR19TVEFOREFMT05FPXkKK0NPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKKyMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19EUklWRVIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfREVWUkVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWPXkKKyMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9MT09QPXkKKyMgQ09ORklHX0JMS19ERVZfQ1JZUFRPTE9PUCBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9SQU09eQorQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2CitDT05GSUdfQkxLX0RFVl9SQU1fU0laRT0xNjM4NAorIyBDT05GSUdfQkxLX0RFVl9YSVAgaXMgbm90IHNldAorIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0CitDT05GSUdfTUlTQ19ERVZJQ0VTPXkKKyMgQ09ORklHX0VFUFJPTV85M0NYNiBpcyBub3Qgc2V0CisjIENPTkZJR19FTkNMT1NVUkVfU0VSVklDRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfSURFPXkKKyMgQ09ORklHX0lERSBpcyBub3Qgc2V0CisKKyMKKyMgU0NTSSBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0CitDT05GSUdfU0NTST15CitDT05GSUdfU0NTSV9ETUE9eQorIyBDT05GSUdfU0NTSV9UR1QgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX1BST0NfRlM9eQorCisjCisjIFNDU0kgc3VwcG9ydCB0eXBlIChkaXNrLCB0YXBlLCBDRC1ST00pCisjCitDT05GSUdfQkxLX0RFVl9TRD15CisjIENPTkZJR19DSFJfREVWX1NUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NIUl9ERVZfT1NTVCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1NSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NIUl9ERVZfU0cgaXMgbm90IHNldAorIyBDT05GSUdfQ0hSX0RFVl9TQ0ggaXMgbm90IHNldAorCisjCisjIFNvbWUgU0NTSSBkZXZpY2VzIChlLmcuIENEIGp1a2Vib3gpIHN1cHBvcnQgbXVsdGlwbGUgTFVOcworIworIyBDT05GSUdfU0NTSV9NVUxUSV9MVU4gaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9DT05TVEFOVFMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9MT0dHSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU0NBTl9BU1lOQyBpcyBub3Qgc2V0CitDT05GSUdfU0NTSV9XQUlUX1NDQU49bQorCisjCisjIFNDU0kgVHJhbnNwb3J0cworIworIyBDT05GSUdfU0NTSV9TUElfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9GQ19BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NBU19MSUJTQVMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TUlBfQVRUUlMgaXMgbm90IHNldAorQ09ORklHX1NDU0lfTE9XTEVWRUw9eQorIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQSBpcyBub3Qgc2V0CisjIENPTkZJR19NRCBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKKyMKK0NPTkZJR19JTlBVVD15CisjIENPTkZJR19JTlBVVF9GRl9NRU1MRVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1BPTExERVYgaXMgbm90IHNldAorCisjCisjIFVzZXJsYW5kIGludGVyZmFjZXMKKyMKKyMgQ09ORklHX0lOUFVUX01PVVNFREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0CitDT05GSUdfSU5QVVRfRVZERVY9eQorIyBDT05GSUdfSU5QVVRfRVZCVUcgaXMgbm90IHNldAorCisjCisjIElucHV0IERldmljZSBEcml2ZXJzCisjCisjIENPTkZJR19JTlBVVF9LRVlCT0FSRCBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9NT1VTRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9UQUJMRVQgaXMgbm90IHNldAorQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOPXkKK0NPTkZJR19UT1VDSFNDUkVFTl9BRFM3ODQ2PXkKKyMgQ09ORklHX1RPVUNIU0NSRUVOX0ZVSklUU1UgaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fR1VOWkUgaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fRUxPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX01UT1VDSCBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9JTkVYSU8gaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fTUs3MTIgaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fUEVOTU9VTlQgaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVE9VQ0hSSUdIVCBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9UT1VDSFdJTiBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9VQ0IxNDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX1RPVUNISVQyMTMgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfTUlTQyBpcyBub3Qgc2V0CisKKyMKKyMgSGFyZHdhcmUgSS9PIHBvcnRzCisjCisjIENPTkZJR19TRVJJTyBpcyBub3Qgc2V0CisjIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgQ2hhcmFjdGVyIGRldmljZXMKKyMKK0NPTkZJR19WVD15CitDT05GSUdfQ09OU09MRV9UUkFOU0xBVElPTlM9eQorQ09ORklHX1ZUX0NPTlNPTEU9eQorQ09ORklHX0hXX0NPTlNPTEU9eQorIyBDT05GSUdfVlRfSFdfQ09OU09MRV9CSU5ESU5HIGlzIG5vdCBzZXQKK0NPTkZJR19ERVZLTUVNPXkKKyMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0CisKKyMKKyMgU2VyaWFsIGRyaXZlcnMKKyMKK0NPTkZJR19TRVJJQUxfODI1MD15CitDT05GSUdfU0VSSUFMXzgyNTBfQ09OU09MRT15CitDT05GSUdfU0VSSUFMXzgyNTBfTlJfVUFSVFM9MzIKK0NPTkZJR19TRVJJQUxfODI1MF9SVU5USU1FX1VBUlRTPTQKK0NPTkZJR19TRVJJQUxfODI1MF9FWFRFTkRFRD15CitDT05GSUdfU0VSSUFMXzgyNTBfTUFOWV9QT1JUUz15CitDT05GSUdfU0VSSUFMXzgyNTBfU0hBUkVfSVJRPXkKK0NPTkZJR19TRVJJQUxfODI1MF9ERVRFQ1RfSVJRPXkKK0NPTkZJR19TRVJJQUxfODI1MF9SU0E9eQorCisjCisjIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKKyMKK0NPTkZJR19TRVJJQUxfQ09SRT15CitDT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15CitDT05GSUdfVU5JWDk4X1BUWVM9eQorIyBDT05GSUdfTEVHQUNZX1BUWVMgaXMgbm90IHNldAorIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKK0NPTkZJR19IV19SQU5ET009eQorIyBDT05GSUdfTlZSQU0gaXMgbm90IHNldAorIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAorIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0CisjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKK0NPTkZJR19JMkM9eQorQ09ORklHX0kyQ19CT0FSRElORk89eQorQ09ORklHX0kyQ19DSEFSREVWPXkKK0NPTkZJR19JMkNfSEVMUEVSX0FVVE89eQorCisjCisjIEkyQyBIYXJkd2FyZSBCdXMgc3VwcG9ydAorIworCisjCisjIEkyQyBzeXN0ZW0gYnVzIGRyaXZlcnMgKG1vc3RseSBlbWJlZGRlZCAvIHN5c3RlbS1vbi1jaGlwKQorIworIyBDT05GSUdfSTJDX0dQSU8gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX09DT1JFUyBpcyBub3Qgc2V0CitDT05GSUdfSTJDX09NQVA9eQorIyBDT05GSUdfSTJDX1NJTVRFQyBpcyBub3Qgc2V0CisKKyMKKyMgRXh0ZXJuYWwgSTJDL1NNQnVzIGFkYXB0ZXIgZHJpdmVycworIworIyBDT05GSUdfSTJDX1BBUlBPUlRfTElHSFQgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1RBT1NfRVZNIGlzIG5vdCBzZXQKKworIworIyBPdGhlciBJMkMvU01CdXMgYnVzIGRyaXZlcnMKKyMKKyMgQ09ORklHX0kyQ19QQ0FfUExBVEZPUk0gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NUVUIgaXMgbm90IHNldAorCisjCisjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAorIworIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUMjQgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19FRVBST00gaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUENGODU5MSBpcyBub3Qgc2V0CisjIENPTkZJR19JU1AxMzAxX09NQVAgaXMgbm90IHNldAorIyBDT05GSUdfVFBTNjUwMTAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19NQVg2ODc1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQlVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19DSElQIGlzIG5vdCBzZXQKK0NPTkZJR19TUEk9eQorIyBDT05GSUdfU1BJX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19TUElfTUFTVEVSPXkKKworIworIyBTUEkgTWFzdGVyIENvbnRyb2xsZXIgRHJpdmVycworIworIyBDT05GSUdfU1BJX0JJVEJBTkcgaXMgbm90IHNldAorQ09ORklHX1NQSV9PTUFQMjRYWD15CisKKyMKKyMgU1BJIFByb3RvY29sIE1hc3RlcnMKKyMKKyMgQ09ORklHX1NQSV9BVDI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQSV9TUElERVYgaXMgbm90IHNldAorIyBDT05GSUdfU1BJX1RMRTYyWDAgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfUkVRVUlSRV9HUElPTElCPXkKK0NPTkZJR19HUElPTElCPXkKKyMgQ09ORklHX0RFQlVHX0dQSU8gaXMgbm90IHNldAorIyBDT05GSUdfR1BJT19TWVNGUyBpcyBub3Qgc2V0CisKKyMKKyMgSTJDIEdQSU8gZXhwYW5kZXJzOgorIworIyBDT05GSUdfR1BJT19NQVg3MzJYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dQSU9fUENBOTUzWCBpcyBub3Qgc2V0CisjIENPTkZJR19HUElPX1BDRjg1N1ggaXMgbm90IHNldAorCisjCisjIFBDSSBHUElPIGV4cGFuZGVyczoKKyMKKworIworIyBTUEkgR1BJTyBleHBhbmRlcnM6CisjCisjIENPTkZJR19HUElPX01BWDczMDEgaXMgbm90IHNldAorIyBDT05GSUdfR1BJT19NQ1AyM1MwOCBpcyBub3Qgc2V0CitDT05GSUdfVzE9eQorCisjCisjIDEtd2lyZSBCdXMgTWFzdGVycworIworIyBDT05GSUdfVzFfTUFTVEVSX0RTMjQ4MiBpcyBub3Qgc2V0CisjIENPTkZJR19XMV9NQVNURVJfRFMxV00gaXMgbm90IHNldAorIyBDT05GSUdfVzFfTUFTVEVSX0dQSU8gaXMgbm90IHNldAorCisjCisjIDEtd2lyZSBTbGF2ZXMKKyMKKyMgQ09ORklHX1cxX1NMQVZFX1RIRVJNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1cxX1NMQVZFX1NNRU0gaXMgbm90IHNldAorIyBDT05GSUdfVzFfU0xBVkVfRFMyNDMzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1cxX1NMQVZFX0RTMjc2MCBpcyBub3Qgc2V0CitDT05GSUdfUE9XRVJfU1VQUExZPXkKKyMgQ09ORklHX1BPV0VSX1NVUFBMWV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19QREFfUE9XRVIgaXMgbm90IHNldAorIyBDT05GSUdfQkFUVEVSWV9EUzI3NjAgaXMgbm90IHNldAorIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAorQ09ORklHX1dBVENIRE9HPXkKK0NPTkZJR19XQVRDSERPR19OT1dBWU9VVD15CisKKyMKKyMgV2F0Y2hkb2cgRGV2aWNlIERyaXZlcnMKKyMKKyMgQ09ORklHX1NPRlRfV0FUQ0hET0cgaXMgbm90IHNldAorCisjCisjIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQorIworQ09ORklHX1NTQl9QT1NTSUJMRT15CisjIENPTkZJR19TU0IgaXMgbm90IHNldAorCisjCisjIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01GRF9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0CisjIENPTkZJR19IVENfRUdQSU8gaXMgbm90IHNldAorIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfVDdMNjZYQiBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfVEM2Mzg3WEIgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1RDNjM5M1hCIGlzIG5vdCBzZXQKKworIworIyBNdWx0aW1lZGlhIGRldmljZXMKKyMKKworIworIyBNdWx0aW1lZGlhIGNvcmUgc3VwcG9ydAorIworIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX01FRElBIGlzIG5vdCBzZXQKKworIworIyBNdWx0aW1lZGlhIGRyaXZlcnMKKyMKK0NPTkZJR19EQUI9eQorCisjCisjIEdyYXBoaWNzIHN1cHBvcnQKKyMKKyMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKK0NPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTD1tCisjIENPTkZJR19GQiBpcyBub3Qgc2V0CisjIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAorCisjCisjIERpc3BsYXkgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX0RJU1BMQVlfU1VQUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgQ29uc29sZSBkaXNwbGF5IGRyaXZlciBzdXBwb3J0CisjCisjIENPTkZJR19WR0FfQ09OU09MRSBpcyBub3Qgc2V0CitDT05GSUdfRFVNTVlfQ09OU09MRT15CitDT05GSUdfU09VTkQ9eQorQ09ORklHX1NORD15CisjIENPTkZJR19TTkRfU0VRVUVOQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9NSVhFUl9PU1MgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1BDTV9PU1MgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0RZTkFNSUNfTUlOT1JTIGlzIG5vdCBzZXQKK0NPTkZJR19TTkRfU1VQUE9SVF9PTERfQVBJPXkKK0NPTkZJR19TTkRfVkVSQk9TRV9QUk9DRlM9eQorIyBDT05GSUdfU05EX1ZFUkJPU0VfUFJJTlRLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfU05EX0RSSVZFUlM9eQorIyBDT05GSUdfU05EX0RVTU1ZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9NVFBBViBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfU0VSSUFMX1UxNjU1MCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfTVBVNDAxIGlzIG5vdCBzZXQKK0NPTkZJR19TTkRfQVJNPXkKK0NPTkZJR19TTkRfU1BJPXkKKyMgQ09ORklHX1NORF9TT0MgaXMgbm90IHNldAorIyBDT05GSUdfU09VTkRfUFJJTUUgaXMgbm90IHNldAorQ09ORklHX0hJRF9TVVBQT1JUPXkKK0NPTkZJR19ISUQ9eQorIyBDT05GSUdfSElEX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRFJBVyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1VQUE9SVCBpcyBub3Qgc2V0CitDT05GSUdfTU1DPXkKKyMgQ09ORklHX01NQ19ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19NTUNfVU5TQUZFX1JFU1VNRSBpcyBub3Qgc2V0CisKKyMKKyMgTU1DL1NEIENhcmQgRHJpdmVycworIworQ09ORklHX01NQ19CTE9DSz15CitDT05GSUdfTU1DX0JMT0NLX0JPVU5DRT15CisjIENPTkZJR19TRElPX1VBUlQgaXMgbm90IHNldAorIyBDT05GSUdfTU1DX1RFU1QgaXMgbm90IHNldAorCisjCisjIE1NQy9TRCBIb3N0IENvbnRyb2xsZXIgRHJpdmVycworIworIyBDT05GSUdfTU1DX1NESENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NQ19PTUFQIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NQ19TUEkgaXMgbm90IHNldAorIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAorQ09ORklHX1JUQ19MSUI9eQorQ09ORklHX1JUQ19DTEFTUz15CitDT05GSUdfUlRDX0hDVE9TWVM9eQorQ09ORklHX1JUQ19IQ1RPU1lTX0RFVklDRT0icnRjMCIKKyMgQ09ORklHX1JUQ19ERUJVRyBpcyBub3Qgc2V0CisKKyMKKyMgUlRDIGludGVyZmFjZXMKKyMKK0NPTkZJR19SVENfSU5URl9TWVNGUz15CitDT05GSUdfUlRDX0lOVEZfUFJPQz15CitDT05GSUdfUlRDX0lOVEZfREVWPXkKKyMgQ09ORklHX1JUQ19JTlRGX0RFVl9VSUVfRU1VTCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1RFU1QgaXMgbm90IHNldAorCisjCisjIEkyQyBSVEMgZHJpdmVycworIworIyBDT05GSUdfUlRDX0RSVl9EUzEzMDcgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzEzNzQgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE2NzIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NQVg2OTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUlM1QzM3MiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0lTTDEyMDggaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9YMTIwNSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1BDRjg1NjMgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTgzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQxVDgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUzM1MzkwQSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0ZNMzEzMCBpcyBub3Qgc2V0CisKKyMKKyMgU1BJIFJUQyBkcml2ZXJzCisjCisjIENPTkZJR19SVENfRFJWX000MVQ5NCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTMwNSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX01BWDY5MDIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SOTcwMSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JTNUMzNDggaXMgbm90IHNldAorCisjCisjIFBsYXRmb3JtIFJUQyBkcml2ZXJzCisjCisjIENPTkZJR19SVENfRFJWX0NNT1MgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE1MTEgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE1NTMgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE3NDIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9TVEsxN1RBOCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000OFQ4NiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000OFQ1OSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1YzMDIwIGlzIG5vdCBzZXQKKworIworIyBvbi1DUFUgUlRDIGRyaXZlcnMKKyMKKyMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldAorCisjCisjIFZvbHRhZ2UgYW5kIEN1cnJlbnQgcmVndWxhdG9ycworIworIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFR1VMQVRPUl9GSVhFRF9WT0xUQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFR1VMQVRPUl9WSVJUVUFMX0NPTlNVTUVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFR1VMQVRPUl9CUTI0MDIyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VJTyBpcyBub3Qgc2V0CisKKyMKKyMgRmlsZSBzeXN0ZW1zCisjCitDT05GSUdfRVhUMl9GUz15CisjIENPTkZJR19FWFQyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDJfRlNfWElQIGlzIG5vdCBzZXQKK0NPTkZJR19FWFQzX0ZTPXkKKyMgQ09ORklHX0VYVDNfRlNfWEFUVFIgaXMgbm90IHNldAorIyBDT05GSUdfRVhUNERFVl9GUyBpcyBub3Qgc2V0CitDT05GSUdfSkJEPXkKKyMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAorIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19ETk9USUZZPXkKK0NPTkZJR19JTk9USUZZPXkKK0NPTkZJR19JTk9USUZZX1VTRVI9eQorQ09ORklHX1FVT1RBPXkKK0NPTkZJR19QUklOVF9RVU9UQV9XQVJOSU5HPXkKKyMgQ09ORklHX1FGTVRfVjEgaXMgbm90IHNldAorQ09ORklHX1FGTVRfVjI9eQorQ09ORklHX1FVT1RBQ1RMPXkKKyMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAorCisjCisjIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKKyMKKyMgQ09ORklHX0lTTzk2NjBfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVURGX0ZTIGlzIG5vdCBzZXQKKworIworIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCisjCitDT05GSUdfRkFUX0ZTPXkKK0NPTkZJR19NU0RPU19GUz15CitDT05GSUdfVkZBVF9GUz15CitDT05GSUdfRkFUX0RFRkFVTFRfQ09ERVBBR0U9NDM3CitDT05GSUdfRkFUX0RFRkFVTFRfSU9DSEFSU0VUPSJpc284ODU5LTEiCisjIENPTkZJR19OVEZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBQc2V1ZG8gZmlsZXN5c3RlbXMKKyMKK0NPTkZJR19QUk9DX0ZTPXkKK0NPTkZJR19QUk9DX1NZU0NUTD15CitDT05GSUdfU1lTRlM9eQorQ09ORklHX1RNUEZTPXkKKyMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAorIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAorCisjCisjIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKKyMKKyMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEZTUExVU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JBTUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAorIyBDT05GSUdfT01GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgUGFydGl0aW9uIFR5cGVzCisjCitDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEPXkKKyMgQ09ORklHX0FDT1JOX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19PU0ZfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FNSUdBX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFSSV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfTUFDX1BBUlRJVElPTiBpcyBub3Qgc2V0CitDT05GSUdfTVNET1NfUEFSVElUSU9OPXkKKyMgQ09ORklHX0JTRF9ESVNLTEFCRUwgaXMgbm90IHNldAorIyBDT05GSUdfTUlOSVhfU1VCUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NPTEFSSVNfWDg2X1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19VTklYV0FSRV9ESVNLTEFCRUwgaXMgbm90IHNldAorIyBDT05GSUdfTERNX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19TR0lfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VMVFJJWF9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfU1VOX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19LQVJNQV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfRUZJX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNWNjhfUEFSVElUSU9OIGlzIG5vdCBzZXQKK0NPTkZJR19OTFM9eQorQ09ORklHX05MU19ERUZBVUxUPSJpc284ODU5LTEiCitDT05GSUdfTkxTX0NPREVQQUdFXzQzNz15CisjIENPTkZJR19OTFNfQ09ERVBBR0VfNzM3IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV83NzUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODUyIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjEgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjkgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzNiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85MzIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzk0OSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODc0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzggaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTEgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0FTQ0lJIGlzIG5vdCBzZXQKK0NPTkZJR19OTFNfSVNPODg1OV8xPXkKKyMgQ09ORklHX05MU19JU084ODU5XzIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV80IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV83IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzkgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMTMgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMTQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMTUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0tPSThfUiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfS09JOF9VIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19VVEY4IGlzIG5vdCBzZXQKKworIworIyBLZXJuZWwgaGFja2luZworIworIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAorQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQ9eQorQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKK0NPTkZJR19GUkFNRV9XQVJOPTEwMjQKK0NPTkZJR19NQUdJQ19TWVNSUT15CisjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19LRVJORUw9eQorIyBDT05GSUdfREVCVUdfU0hJUlEgaXMgbm90IHNldAorQ09ORklHX0RFVEVDVF9TT0ZUTE9DS1VQPXkKKyMgQ09ORklHX0JPT1RQQVJBTV9TT0ZUTE9DS1VQX1BBTklDIGlzIG5vdCBzZXQKK0NPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQ19WQUxVRT0wCitDT05GSUdfU0NIRURfREVCVUc9eQorIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19USU1FUl9TVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19PQkpFQ1RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NMQUIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfUlRfTVVURVhFUyBpcyBub3Qgc2V0CisjIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX01VVEVYRVM9eQorIyBDT05GSUdfREVCVUdfTE9DS19BTExPQyBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9WRV9MT0NLSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xPQ0tfU1RBVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19MT0NLSU5HX0FQSV9TRUxGVEVTVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19CVUdWRVJCT1NFIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19JTkZPPXkKKyMgQ09ORklHX0RFQlVHX1ZNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1dSSVRFQ09VTlQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTUVNT1JZX0lOSVQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0CitDT05GSUdfRlJBTUVfUE9JTlRFUj15CisjIENPTkZJR19CT09UX1BSSU5US19ERUxBWSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAorQ09ORklHX0hBVkVfRlRSQUNFPXkKK0NPTkZJR19IQVZFX0RZTkFNSUNfRlRSQUNFPXkKKyMgQ09ORklHX0ZUUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19JUlFTT0ZGX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19TQ0hFRF9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfQ09OVEVYVF9TV0lUQ0hfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKKyMgQ09ORklHX0tHREIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfVVNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19FUlJPUlMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0UgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0xMPXkKKyMgQ09ORklHX0RFQlVHX0lDRURDQyBpcyBub3Qgc2V0CisKKyMKKyMgU2VjdXJpdHkgb3B0aW9ucworIworIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUyBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPPXkKKworIworIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKKyMKK0NPTkZJR19DUllQVE9fQUxHQVBJPXkKK0NPTkZJR19DUllQVE9fQkxLQ0lQSEVSPXkKK0NPTkZJR19DUllQVE9fTUFOQUdFUj15CisjIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX05VTEwgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NSWVBURCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQVVUSEVOQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVEVTVCBpcyBub3Qgc2V0CisKKyMKKyMgQXV0aGVudGljYXRlZCBFbmNyeXB0aW9uIHdpdGggQXNzb2NpYXRlZCBEYXRhCisjCisjIENPTkZJR19DUllQVE9fQ0NNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HQ00gaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NFUUlWIGlzIG5vdCBzZXQKKworIworIyBCbG9jayBtb2RlcworIworQ09ORklHX0NSWVBUT19DQkM9eQorIyBDT05GSUdfQ1JZUFRPX0NUUiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ1RTIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fRUNCPW0KKyMgQ09ORklHX0NSWVBUT19MUlcgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19QQ0JDPW0KKyMgQ09ORklHX0NSWVBUT19YVFMgaXMgbm90IHNldAorCisjCisjIEhhc2ggbW9kZXMKKyMKKyMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKKworIworIyBEaWdlc3QKKyMKKyMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX01ENT15CisjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDEyOCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMTYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQyNTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDMyMCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0hBMSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0hBMjU2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TSEE1MTIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RHUjE5MiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fV1A1MTIgaXMgbm90IHNldAorCisjCisjIENpcGhlcnMKKyMKKyMgQ09ORklHX0NSWVBUT19BRVMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FOVUJJUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQVJDNCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQkxPV0ZJU0ggaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NBTUVMTElBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQVNUNSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0FTVDYgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19ERVM9eQorIyBDT05GSUdfQ1JZUFRPX0ZDUllQVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fS0hBWkFEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TQUxTQTIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TRUVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TRVJQRU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19URUEgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RXT0ZJU0ggaXMgbm90IHNldAorCisjCisjIENvbXByZXNzaW9uCisjCisjIENPTkZJR19DUllQVE9fREVGTEFURSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTFpPIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fSFc9eQorCisjCisjIExpYnJhcnkgcm91dGluZXMKKyMKK0NPTkZJR19CSVRSRVZFUlNFPXkKKyMgQ09ORklHX0dFTkVSSUNfRklORF9GSVJTVF9CSVQgaXMgbm90IHNldAorIyBDT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUIGlzIG5vdCBzZXQKK0NPTkZJR19DUkNfQ0NJVFQ9eQorIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAorQ09ORklHX0NSQ19UMTBESUY9eQorIyBDT05GSUdfQ1JDX0lUVV9UIGlzIG5vdCBzZXQKK0NPTkZJR19DUkMzMj15CisjIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKK0NPTkZJR19MSUJDUkMzMkM9eQorQ09ORklHX1BMSVNUPXkKK0NPTkZJR19IQVNfSU9NRU09eQorQ09ORklHX0hBU19JT1BPUlQ9eQorQ09ORklHX0hBU19ETUE9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9vdmVyb19kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL292ZXJvX2RlZmNvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OTIwMDk2Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vY29uZmlncy9vdmVyb19kZWZjb25maWcKQEAgLTAsMCArMSwxODg1IEBACisjCisjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjctcmM4CisjIEZyaSBPY3QgIDMgMTE6NTA6MzQgMjAwOAorIworQ09ORklHX0FSTT15CitDT05GSUdfU1lTX1NVUFBPUlRTX0FQTV9FTVVMQVRJT049eQorQ09ORklHX0dFTkVSSUNfR1BJTz15CitDT05GSUdfR0VORVJJQ19USU1FPXkKK0NPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKK0NPTkZJR19NTVU9eQorIyBDT05GSUdfTk9fSU9QT1JUIGlzIG5vdCBzZXQKK0NPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKK0NPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQorQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKK0NPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQorQ09ORklHX1RSQUNFX0lSUUZMQUdTX1NVUFBPUlQ9eQorQ09ORklHX0hBUkRJUlFTX1NXX1JFU0VORD15CitDT05GSUdfR0VORVJJQ19JUlFfUFJPQkU9eQorQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQorIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1U2NCBpcyBub3Qgc2V0CitDT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKK0NPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CitDT05GSUdfQVJDSF9TVVBQT1JUU19BT1VUPXkKK0NPTkZJR19aT05FX0RNQT15CitDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKK0NPTkZJR19PUFJPRklMRV9BUk1WNz15CitDT05GSUdfVkVDVE9SU19CQVNFPTB4ZmZmZjAwMDAKK0NPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCisKKyMKKyMgR2VuZXJhbCBzZXR1cAorIworQ09ORklHX0VYUEVSSU1FTlRBTD15CitDT05GSUdfQlJPS0VOX09OX1NNUD15CitDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCitDT05GSUdfTE9DQUxWRVJTSU9OPSIiCitDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQorQ09ORklHX1NXQVA9eQorQ09ORklHX1NZU1ZJUEM9eQorQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKKyMgQ09ORklHX1BPU0lYX01RVUVVRSBpcyBub3Qgc2V0CitDT05GSUdfQlNEX1BST0NFU1NfQUNDVD15CisjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUX1YzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CitDT05GSUdfSUtDT05GSUc9eQorQ09ORklHX0lLQ09ORklHX1BST0M9eQorQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKKyMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAorQ09ORklHX0dST1VQX1NDSEVEPXkKK0NPTkZJR19GQUlSX0dST1VQX1NDSEVEPXkKKyMgQ09ORklHX1JUX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKK0NPTkZJR19VU0VSX1NDSEVEPXkKKyMgQ09ORklHX0NHUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CitDT05GSUdfU1lTRlNfREVQUkVDQVRFRD15CitDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMj15CisjIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0CisjIENPTkZJR19OQU1FU1BBQ0VTIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0lOSVRSRD15CitDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgorQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKK0NPTkZJR19TWVNDVEw9eQorQ09ORklHX0VNQkVEREVEPXkKK0NPTkZJR19VSUQxNj15CisjIENPTkZJR19TWVNDVExfU1lTQ0FMTCBpcyBub3Qgc2V0CitDT05GSUdfS0FMTFNZTVM9eQorIyBDT05GSUdfS0FMTFNZTVNfQUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAorQ09ORklHX0hPVFBMVUc9eQorQ09ORklHX1BSSU5USz15CitDT05GSUdfQlVHPXkKKyMgQ09ORklHX0VMRl9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPTVBBVF9CUksgaXMgbm90IHNldAorQ09ORklHX0JBU0VfRlVMTD15CitDT05GSUdfRlVURVg9eQorQ09ORklHX0FOT05fSU5PREVTPXkKK0NPTkZJR19FUE9MTD15CitDT05GSUdfU0lHTkFMRkQ9eQorQ09ORklHX1RJTUVSRkQ9eQorQ09ORklHX0VWRU5URkQ9eQorQ09ORklHX1NITUVNPXkKK0NPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CitDT05GSUdfU0xVQl9ERUJVRz15CisjIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKK0NPTkZJR19TTFVCPXkKKyMgQ09ORklHX1NMT0IgaXMgbm90IHNldAorQ09ORklHX1BST0ZJTElORz15CisjIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKK0NPTkZJR19PUFJPRklMRT15CitDT05GSUdfSEFWRV9PUFJPRklMRT15CisjIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1MgaXMgbm90IHNldAorIyBDT05GSUdfSEFWRV9JT1JFTUFQX1BST1QgaXMgbm90IHNldAorQ09ORklHX0hBVkVfS1BST0JFUz15CitDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKKyMgQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0sgaXMgbm90IHNldAorIyBDT05GSUdfSEFWRV9ETUFfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfVVNFX0dFTkVSSUNfU01QX0hFTFBFUlMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfQ0xLPXkKK0NPTkZJR19QUk9DX1BBR0VfTU9OSVRPUj15CitDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVD15CitDT05GSUdfU0xBQklORk89eQorQ09ORklHX1JUX01VVEVYRVM9eQorIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0CitDT05GSUdfQkFTRV9TTUFMTD0wCitDT05GSUdfTU9EVUxFUz15CisjIENPTkZJR19NT0RVTEVfRk9SQ0VfTE9BRCBpcyBub3Qgc2V0CitDT05GSUdfTU9EVUxFX1VOTE9BRD15CitDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRD15CitDT05GSUdfTU9EVkVSU0lPTlM9eQorQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTD15CitDT05GSUdfS01PRD15CitDT05GSUdfQkxPQ0s9eQorQ09ORklHX0xCRD15CisjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19MU0Y9eQorIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAorCisjCisjIElPIFNjaGVkdWxlcnMKKyMKK0NPTkZJR19JT1NDSEVEX05PT1A9eQorQ09ORklHX0lPU0NIRURfQVM9eQorQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQorQ09ORklHX0lPU0NIRURfQ0ZRPXkKKyMgQ09ORklHX0RFRkFVTFRfQVMgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9DRlE9eQorIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImNmcSIKK0NPTkZJR19DTEFTU0lDX1JDVT15CisKKyMKKyMgU3lzdGVtIFR5cGUKKyMKKyMgQ09ORklHX0FSQ0hfQUFFQzIwMDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUkVBTFZJRVcgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9WRVJTQVRJTEUgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9BVDkxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfQ0xQUzc1MDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9DTFBTNzExWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0VCU0ExMTAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9FUDkzWFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9GT09UQlJJREdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTkVUWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0g3MjBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSU1YIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSU9QMTNYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lPUDMyWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lPUDMzWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lYUDIzWFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JWFAyMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSVhQNFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTDcyMDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9LSVJLV09PRCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0tTODY5NSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX05TOVhYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0xPS0kgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9NVjc4WFgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTVhDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfT1JJT041WCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1BOWDQwMDggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9QWEEgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9SUEMgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TQTExMDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TM0MyNDEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfU0hBUksgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9MSDdBNDBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfREFWSU5DSSBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9PTUFQPXkKKyMgQ09ORklHX0FSQ0hfTVNNN1gwMEEgaXMgbm90IHNldAorCisjCisjIFRJIE9NQVAgSW1wbGVtZW50YXRpb25zCisjCitDT05GSUdfQVJDSF9PTUFQX09URz15CisjIENPTkZJR19BUkNIX09NQVAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfT01BUDIgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfT01BUDM9eQorCisjCisjIE9NQVAgRmVhdHVyZSBTZWxlY3Rpb25zCisjCisjIENPTkZJR19PTUFQX0RFQlVHX1BPV0VSRE9NQUlOIGlzIG5vdCBzZXQKKyMgQ09ORklHX09NQVBfREVCVUdfQ0xPQ0tET01BSU4gaXMgbm90IHNldAorIyBDT05GSUdfT01BUF9SRVNFVF9DTE9DS1MgaXMgbm90IHNldAorIyBDT05GSUdfT01BUF9NVVggaXMgbm90IHNldAorQ09ORklHX09NQVBfTUNCU1A9eQorIyBDT05GSUdfT01BUF9NUFVfVElNRVIgaXMgbm90IHNldAorQ09ORklHX09NQVBfMzJLX1RJTUVSPXkKK0NPTkZJR19PTUFQXzMyS19USU1FUl9IWj0xMjgKK0NPTkZJR19PTUFQX0RNX1RJTUVSPXkKKyMgQ09ORklHX09NQVBfTExfREVCVUdfVUFSVDEgaXMgbm90IHNldAorIyBDT05GSUdfT01BUF9MTF9ERUJVR19VQVJUMiBpcyBub3Qgc2V0CitDT05GSUdfT01BUF9MTF9ERUJVR19VQVJUMz15CitDT05GSUdfQVJDSF9PTUFQMzRYWD15CitDT05GSUdfQVJDSF9PTUFQMzQzMD15CisKKyMKKyMgT01BUCBCb2FyZCBUeXBlCisjCisjIENPTkZJR19NQUNIX09NQVAzX0JFQUdMRSBpcyBub3Qgc2V0CitDT05GSUdfTUFDSF9PVkVSTz15CisKKyMKKyMgQm9vdCBvcHRpb25zCisjCisKKyMKKyMgUG93ZXIgbWFuYWdlbWVudAorIworCisjCisjIFByb2Nlc3NvciBUeXBlCisjCitDT05GSUdfQ1BVXzMyPXkKK0NPTkZJR19DUFVfMzJ2Nks9eQorQ09ORklHX0NQVV9WNz15CitDT05GSUdfQ1BVXzMydjc9eQorQ09ORklHX0NQVV9BQlJUX0VWNz15CitDT05GSUdfQ1BVX1BBQlJUX0lGQVI9eQorQ09ORklHX0NQVV9DQUNIRV9WNz15CitDT05GSUdfQ1BVX0NBQ0hFX1ZJUFQ9eQorQ09ORklHX0NQVV9DT1BZX1Y2PXkKK0NPTkZJR19DUFVfVExCX1Y3PXkKK0NPTkZJR19DUFVfSEFTX0FTSUQ9eQorQ09ORklHX0NQVV9DUDE1PXkKK0NPTkZJR19DUFVfQ1AxNV9NTVU9eQorCisjCisjIFByb2Nlc3NvciBGZWF0dXJlcworIworQ09ORklHX0FSTV9USFVNQj15CitDT05GSUdfQVJNX1RIVU1CRUU9eQorIyBDT05GSUdfQ1BVX0lDQUNIRV9ESVNBQkxFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9EQ0FDSEVfRElTQUJMRSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfQlBSRURJQ1RfRElTQUJMRSBpcyBub3Qgc2V0CitDT05GSUdfSEFTX1RMU19SRUc9eQorIyBDT05GSUdfT1VURVJfQ0FDSEUgaXMgbm90IHNldAorCisjCisjIEJ1cyBzdXBwb3J0CisjCisjIENPTkZJR19QQ0lfU1lTQ0FMTCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1NVUFBPUlRTX01TSSBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0NBUkQgaXMgbm90IHNldAorCisjCisjIEtlcm5lbCBGZWF0dXJlcworIworQ09ORklHX1RJQ0tfT05FU0hPVD15CitDT05GSUdfTk9fSFo9eQorQ09ORklHX0hJR0hfUkVTX1RJTUVSUz15CitDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UU19CVUlMRD15CitDT05GSUdfVk1TUExJVF8zRz15CisjIENPTkZJR19WTVNQTElUXzJHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZNU1BMSVRfMUcgaXMgbm90IHNldAorQ09ORklHX1BBR0VfT0ZGU0VUPTB4QzAwMDAwMDAKKyMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldAorQ09ORklHX0haPTEyOAorQ09ORklHX0FFQUJJPXkKKyMgQ09ORklHX09BQklfQ09NUEFUIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX0ZMQVRNRU1fSEFTX0hPTEVTPXkKKyMgQ09ORklHX0FSQ0hfRElTQ09OVElHTUVNX0VOQUJMRSBpcyBub3Qgc2V0CitDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CitDT05GSUdfRkxBVE1FTV9NQU5VQUw9eQorIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0CisjIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKK0NPTkZJR19GTEFUTUVNPXkKK0NPTkZJR19GTEFUX05PREVfTUVNX01BUD15CisjIENPTkZJR19TUEFSU0VNRU1fU1RBVElDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQQVJTRU1FTV9WTUVNTUFQX0VOQUJMRSBpcyBub3Qgc2V0CitDT05GSUdfUEFHRUZMQUdTX0VYVEVOREVEPXkKK0NPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00CisjIENPTkZJR19SRVNPVVJDRVNfNjRCSVQgaXMgbm90IHNldAorQ09ORklHX1pPTkVfRE1BX0ZMQUc9MQorQ09ORklHX0JPVU5DRT15CitDT05GSUdfVklSVF9UT19CVVM9eQorQ09ORklHX0xFRFM9eQorQ09ORklHX0FMSUdOTUVOVF9UUkFQPXkKKworIworIyBCb290IG9wdGlvbnMKKyMKK0NPTkZJR19aQk9PVF9ST01fVEVYVD0weDAKK0NPTkZJR19aQk9PVF9ST01fQlNTPTB4MAorQ09ORklHX0NNRExJTkU9IiBkZWJ1ZyAiCisjIENPTkZJR19YSVBfS0VSTkVMIGlzIG5vdCBzZXQKK0NPTkZJR19LRVhFQz15CitDT05GSUdfQVRBR1NfUFJPQz15CisKKyMKKyMgQ1BVIFBvd2VyIE1hbmFnZW1lbnQKKyMKK0NPTkZJR19DUFVfRlJFUT15CitDT05GSUdfQ1BVX0ZSRVFfVEFCTEU9eQorIyBDT05GSUdfQ1BVX0ZSRVFfREVCVUcgaXMgbm90IHNldAorQ09ORklHX0NQVV9GUkVRX1NUQVQ9eQorQ09ORklHX0NQVV9GUkVRX1NUQVRfREVUQUlMUz15CitDT05GSUdfQ1BVX0ZSRVFfREVGQVVMVF9HT1ZfUEVSRk9STUFOQ0U9eQorIyBDT05GSUdfQ1BVX0ZSRVFfREVGQVVMVF9HT1ZfUE9XRVJTQVZFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9GUkVRX0RFRkFVTFRfR09WX1VTRVJTUEFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfRlJFUV9ERUZBVUxUX0dPVl9PTkRFTUFORCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfRlJFUV9ERUZBVUxUX0dPVl9DT05TRVJWQVRJVkUgaXMgbm90IHNldAorQ09ORklHX0NQVV9GUkVRX0dPVl9QRVJGT1JNQU5DRT15CisjIENPTkZJR19DUFVfRlJFUV9HT1ZfUE9XRVJTQVZFIGlzIG5vdCBzZXQKK0NPTkZJR19DUFVfRlJFUV9HT1ZfVVNFUlNQQUNFPXkKK0NPTkZJR19DUFVfRlJFUV9HT1ZfT05ERU1BTkQ9eQorIyBDT05GSUdfQ1BVX0ZSRVFfR09WX0NPTlNFUlZBVElWRSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfSURMRSBpcyBub3Qgc2V0CisKKyMKKyMgRmxvYXRpbmcgcG9pbnQgZW11bGF0aW9uCisjCisKKyMKKyMgQXQgbGVhc3Qgb25lIGVtdWxhdGlvbiBtdXN0IGJlIHNlbGVjdGVkCisjCitDT05GSUdfVkZQPXkKK0NPTkZJR19WRlB2Mz15CitDT05GSUdfTkVPTj15CisKKyMKKyMgVXNlcnNwYWNlIGJpbmFyeSBmb3JtYXRzCisjCitDT05GSUdfQklORk1UX0VMRj15CitDT05GSUdfQklORk1UX0FPVVQ9bQorQ09ORklHX0JJTkZNVF9NSVNDPXkKKworIworIyBQb3dlciBtYW5hZ2VtZW50IG9wdGlvbnMKKyMKKyMgQ09ORklHX1BNIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX1NVU1BFTkRfUE9TU0lCTEU9eQorQ09ORklHX05FVD15CisKKyMKKyMgTmV0d29ya2luZyBvcHRpb25zCisjCitDT05GSUdfUEFDS0VUPXkKK0NPTkZJR19QQUNLRVRfTU1BUD15CitDT05GSUdfVU5JWD15CitDT05GSUdfWEZSTT15CisjIENPTkZJR19YRlJNX1VTRVIgaXMgbm90IHNldAorIyBDT05GSUdfWEZSTV9TVUJfUE9MSUNZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGUk1fTUlHUkFURSBpcyBub3Qgc2V0CisjIENPTkZJR19YRlJNX1NUQVRJU1RJQ1MgaXMgbm90IHNldAorQ09ORklHX05FVF9LRVk9eQorIyBDT05GSUdfTkVUX0tFWV9NSUdSQVRFIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUPXkKKyMgQ09ORklHX0lQX01VTFRJQ0FTVCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAorQ09ORklHX0lQX0ZJQl9IQVNIPXkKK0NPTkZJR19JUF9QTlA9eQorQ09ORklHX0lQX1BOUF9ESENQPXkKK0NPTkZJR19JUF9QTlBfQk9PVFA9eQorQ09ORklHX0lQX1BOUF9SQVJQPXkKKyMgQ09ORklHX05FVF9JUElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9JUEdSRSBpcyBub3Qgc2V0CisjIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZTl9DT09LSUVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0CitDT05GSUdfSU5FVF9UVU5ORUw9bQorQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVD15CitDT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMPXkKK0NPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUPXkKKyMgQ09ORklHX0lORVRfTFJPIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUX0RJQUc9eQorQ09ORklHX0lORVRfVENQX0RJQUc9eQorIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAorQ09ORklHX1RDUF9DT05HX0NVQklDPXkKK0NPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKKyMgQ09ORklHX1RDUF9NRDVTSUcgaXMgbm90IHNldAorQ09ORklHX0lQVjY9bQorIyBDT05GSUdfSVBWNl9QUklWQUNZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQVjZfUk9VVEVSX1BSRUYgaXMgbm90IHNldAorIyBDT05GSUdfSVBWNl9PUFRJTUlTVElDX0RBRCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUNl9BSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUNl9FU1AgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVDZfSVBDT01QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQVjZfTUlQNiBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUNl9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUNl9UVU5ORUwgaXMgbm90IHNldAorQ09ORklHX0lORVQ2X1hGUk1fTU9ERV9UUkFOU1BPUlQ9bQorQ09ORklHX0lORVQ2X1hGUk1fTU9ERV9UVU5ORUw9bQorQ09ORklHX0lORVQ2X1hGUk1fTU9ERV9CRUVUPW0KKyMgQ09ORklHX0lORVQ2X1hGUk1fTU9ERV9ST1VURU9QVElNSVpBVElPTiBpcyBub3Qgc2V0CitDT05GSUdfSVBWNl9TSVQ9bQorQ09ORklHX0lQVjZfTkRJU0NfTk9ERVRZUEU9eQorIyBDT05GSUdfSVBWNl9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSVBWNl9NVUxUSVBMRV9UQUJMRVMgaXMgbm90IHNldAorIyBDT05GSUdfSVBWNl9NUk9VVEUgaXMgbm90IHNldAorIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CisjIENPTkZJR19BVE0gaXMgbm90IHNldAorIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAorIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xMQzIgaXMgbm90IHNldAorIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1gyNSBpcyBub3Qgc2V0CisjIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0CisKKyMKKyMgTmV0d29yayB0ZXN0aW5nCisjCisjIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBTiBpcyBub3Qgc2V0CisjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKK0NPTkZJR19CVD15CitDT05GSUdfQlRfTDJDQVA9eQorQ09ORklHX0JUX1NDTz15CitDT05GSUdfQlRfUkZDT01NPXkKK0NPTkZJR19CVF9SRkNPTU1fVFRZPXkKK0NPTkZJR19CVF9CTkVQPXkKK0NPTkZJR19CVF9CTkVQX01DX0ZJTFRFUj15CitDT05GSUdfQlRfQk5FUF9QUk9UT19GSUxURVI9eQorQ09ORklHX0JUX0hJRFA9eQorCisjCisjIEJsdWV0b290aCBkZXZpY2UgZHJpdmVycworIworQ09ORklHX0JUX0hDSVVTQj1tCitDT05GSUdfQlRfSENJVVNCX1NDTz15CisjIENPTkZJR19CVF9IQ0lCVFVTQiBpcyBub3Qgc2V0CisjIENPTkZJR19CVF9IQ0lCVFNESU8gaXMgbm90IHNldAorQ09ORklHX0JUX0hDSVVBUlQ9eQorQ09ORklHX0JUX0hDSVVBUlRfSDQ9eQorQ09ORklHX0JUX0hDSVVBUlRfQkNTUD15CisjIENPTkZJR19CVF9IQ0lVQVJUX0xMIGlzIG5vdCBzZXQKK0NPTkZJR19CVF9IQ0lCQ00yMDNYPXkKK0NPTkZJR19CVF9IQ0lCUEExMFg9eQorIyBDT05GSUdfQlRfSENJQkZVU0IgaXMgbm90IHNldAorIyBDT05GSUdfQlRfSENJVkhDSSBpcyBub3Qgc2V0CisjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CisKKyMKKyMgV2lyZWxlc3MKKyMKK0NPTkZJR19DRkc4MDIxMT15CitDT05GSUdfTkw4MDIxMT15CitDT05GSUdfV0lSRUxFU1NfRVhUPXkKK0NPTkZJR19XSVJFTEVTU19FWFRfU1lTRlM9eQorQ09ORklHX01BQzgwMjExPXkKKworIworIyBSYXRlIGNvbnRyb2wgYWxnb3JpdGhtIHNlbGVjdGlvbgorIworQ09ORklHX01BQzgwMjExX1JDX1BJRD15CitDT05GSUdfTUFDODAyMTFfUkNfREVGQVVMVF9QSUQ9eQorQ09ORklHX01BQzgwMjExX1JDX0RFRkFVTFQ9InBpZCIKKyMgQ09ORklHX01BQzgwMjExX01FU0ggaXMgbm90IHNldAorQ09ORklHX01BQzgwMjExX0xFRFM9eQorIyBDT05GSUdfTUFDODAyMTFfREVCVUdGUyBpcyBub3Qgc2V0CisjIENPTkZJR19NQUM4MDIxMV9ERUJVR19NRU5VIGlzIG5vdCBzZXQKK0NPTkZJR19JRUVFODAyMTE9eQorIyBDT05GSUdfSUVFRTgwMjExX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19JRUVFODAyMTFfQ1JZUFRfV0VQPXkKK0NPTkZJR19JRUVFODAyMTFfQ1JZUFRfQ0NNUD15CitDT05GSUdfSUVFRTgwMjExX0NSWVBUX1RLSVA9eQorIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CisKKyMKKyMgRGV2aWNlIERyaXZlcnMKKyMKKworIworIyBHZW5lcmljIERyaXZlciBPcHRpb25zCisjCitDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorQ09ORklHX1NUQU5EQUxPTkU9eQorQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQorQ09ORklHX0ZXX0xPQURFUj15CitDT05GSUdfRklSTVdBUkVfSU5fS0VSTkVMPXkKK0NPTkZJR19FWFRSQV9GSVJNV0FSRT0iIgorIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0RFVlJFUyBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0CisjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAorQ09ORklHX01URD15CisjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAorQ09ORklHX01URF9DT05DQVQ9eQorQ09ORklHX01URF9QQVJUSVRJT05TPXkKKyMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DTURMSU5FX1BBUlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9BRlNfUEFSVFMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0FSN19QQVJUUyBpcyBub3Qgc2V0CisKKyMKKyMgVXNlciBNb2R1bGVzIEFuZCBUcmFuc2xhdGlvbiBMYXllcnMKKyMKK0NPTkZJR19NVERfQ0hBUj15CitDT05GSUdfTVREX0JMS0RFVlM9eQorQ09ORklHX01URF9CTE9DSz15CisjIENPTkZJR19GVEwgaXMgbm90IHNldAorIyBDT05GSUdfTkZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19SRkRfRlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NTRkRDIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9PT1BTIGlzIG5vdCBzZXQKKworIworIyBSQU0vUk9NL0ZsYXNoIGNoaXAgZHJpdmVycworIworIyBDT05GSUdfTVREX0NGSSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfSkVERUNQUk9CRSBpcyBub3Qgc2V0CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE9eQorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8yPXkKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfND15CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfOCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMTYgaXMgbm90IHNldAorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzMyIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX0kxPXkKK0NPTkZJR19NVERfQ0ZJX0kyPXkKKyMgQ09ORklHX01URF9DRklfSTQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NGSV9JOCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ST00gaXMgbm90IHNldAorIyBDT05GSUdfTVREX0FCU0VOVCBpcyBub3Qgc2V0CisKKyMKKyMgTWFwcGluZyBkcml2ZXJzIGZvciBjaGlwIGFjY2VzcworIworIyBDT05GSUdfTVREX0NPTVBMRVhfTUFQUElOR1MgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1BMQVRSQU0gaXMgbm90IHNldAorCisjCisjIFNlbGYtY29udGFpbmVkIE1URCBkZXZpY2UgZHJpdmVycworIworIyBDT05GSUdfTVREX0RBVEFGTEFTSCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTTI1UDgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9TTFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUEhSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX01URFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQkxPQ0syTVREIGlzIG5vdCBzZXQKKworIworIyBEaXNrLU9uLUNoaXAgRGV2aWNlIERyaXZlcnMKKyMKKyMgQ09ORklHX01URF9ET0MyMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ET0MyMDAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ET0MyMDAxUExVUyBpcyBub3Qgc2V0CitDT05GSUdfTVREX05BTkQ9eQorIyBDT05GSUdfTVREX05BTkRfVkVSSUZZX1dSSVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9OQU5EX0VDQ19TTUMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX05BTkRfTVVTRVVNX0lEUyBpcyBub3Qgc2V0CitDT05GSUdfTVREX05BTkRfSURTPXkKKyMgQ09ORklHX01URF9OQU5EX0RJU0tPTkNISVAgaXMgbm90IHNldAorIyBDT05GSUdfTVREX05BTkRfTkFORFNJTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTkFORF9QTEFURk9STSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQUxBVURBIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9PTkVOQU5EIGlzIG5vdCBzZXQKKworIworIyBVQkkgLSBVbnNvcnRlZCBibG9jayBpbWFnZXMKKyMKKyMgQ09ORklHX01URF9VQkkgaXMgbm90IHNldAorIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVj15CisjIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfTE9PUD15CitDT05GSUdfQkxLX0RFVl9DUllQVE9MT09QPW0KKyMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfVUIgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfUkFNPXkKK0NPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgorQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9MTYzODQKKyMgQ09ORklHX0JMS19ERVZfWElQIGlzIG5vdCBzZXQKK0NPTkZJR19DRFJPTV9QS1RDRFZEPW0KK0NPTkZJR19DRFJPTV9QS1RDRFZEX0JVRkZFUlM9OAorIyBDT05GSUdfQ0RST01fUEtUQ0RWRF9XQ0FDSEUgaXMgbm90IHNldAorIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKK0NPTkZJR19NSVNDX0RFVklDRVM9eQorQ09ORklHX0VFUFJPTV85M0NYNj1tCisjIENPTkZJR19FTkNMT1NVUkVfU0VSVklDRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfSURFPXkKKyMgQ09ORklHX0lERSBpcyBub3Qgc2V0CisKKyMKKyMgU0NTSSBkZXZpY2Ugc3VwcG9ydAorIworQ09ORklHX1JBSURfQVRUUlM9bQorQ09ORklHX1NDU0k9eQorQ09ORklHX1NDU0lfRE1BPXkKKyMgQ09ORklHX1NDU0lfVEdUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTkVUTElOSyBpcyBub3Qgc2V0CitDT05GSUdfU0NTSV9QUk9DX0ZTPXkKKworIworIyBTQ1NJIHN1cHBvcnQgdHlwZSAoZGlzaywgdGFwZSwgQ0QtUk9NKQorIworQ09ORklHX0JMS19ERVZfU0Q9eQorIyBDT05GSUdfQ0hSX0RFVl9TVCBpcyBub3Qgc2V0CisjIENPTkZJR19DSFJfREVWX09TU1QgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9TUiBpcyBub3Qgc2V0CitDT05GSUdfQ0hSX0RFVl9TRz1tCisjIENPTkZJR19DSFJfREVWX1NDSCBpcyBub3Qgc2V0CisKKyMKKyMgU29tZSBTQ1NJIGRldmljZXMgKGUuZy4gQ0QganVrZWJveCkgc3VwcG9ydCBtdWx0aXBsZSBMVU5zCisjCitDT05GSUdfU0NTSV9NVUxUSV9MVU49eQorIyBDT05GSUdfU0NTSV9DT05TVEFOVFMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9MT0dHSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU0NBTl9BU1lOQyBpcyBub3Qgc2V0CitDT05GSUdfU0NTSV9XQUlUX1NDQU49bQorCisjCisjIFNDU0kgVHJhbnNwb3J0cworIworIyBDT05GSUdfU0NTSV9TUElfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9GQ19BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0lTQ1NJX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU0FTX0xJQlNBUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NSUF9BVFRSUyBpcyBub3Qgc2V0CitDT05GSUdfU0NTSV9MT1dMRVZFTD15CisjIENPTkZJR19JU0NTSV9UQ1AgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQSBpcyBub3Qgc2V0CitDT05GSUdfTUQ9eQorQ09ORklHX0JMS19ERVZfTUQ9bQorQ09ORklHX01EX0xJTkVBUj1tCitDT05GSUdfTURfUkFJRDA9bQorQ09ORklHX01EX1JBSUQxPW0KK0NPTkZJR19NRF9SQUlEMTA9bQorQ09ORklHX01EX1JBSUQ0NTY9bQorQ09ORklHX01EX1JBSUQ1X1JFU0hBUEU9eQorQ09ORklHX01EX01VTFRJUEFUSD1tCitDT05GSUdfTURfRkFVTFRZPW0KK0NPTkZJR19CTEtfREVWX0RNPW0KKyMgQ09ORklHX0RNX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19ETV9DUllQVD1tCitDT05GSUdfRE1fU05BUFNIT1Q9bQorQ09ORklHX0RNX01JUlJPUj1tCitDT05GSUdfRE1fWkVSTz1tCitDT05GSUdfRE1fTVVMVElQQVRIPW0KK0NPTkZJR19ETV9ERUxBWT1tCisjIENPTkZJR19ETV9VRVZFTlQgaXMgbm90IHNldAorQ09ORklHX05FVERFVklDRVM9eQorQ09ORklHX0RVTU1ZPW0KKyMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAorIyBDT05GSUdfTUFDVkxBTiBpcyBub3Qgc2V0CisjIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAorQ09ORklHX1RVTj1tCisjIENPTkZJR19WRVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9FVEhFUk5FVCBpcyBub3Qgc2V0CitDT05GSUdfTUlJPXkKKyMgQ09ORklHX05FVERFVl8xMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0CisKKyMKKyMgV2lyZWxlc3MgTEFOCisjCisjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKK0NPTkZJR19XTEFOXzgwMjExPXkKK0NPTkZJR19MSUJFUlRBUz15CitDT05GSUdfTElCRVJUQVNfVVNCPXkKK0NPTkZJR19MSUJFUlRBU19TRElPPXkKK0NPTkZJR19MSUJFUlRBU19ERUJVRz15CitDT05GSUdfVVNCX1pEMTIwMT1tCisjIENPTkZJR19VU0JfTkVUX1JORElTX1dMQU4gaXMgbm90IHNldAorQ09ORklHX1JUTDgxODc9bQorIyBDT05GSUdfTUFDODAyMTFfSFdTSU0gaXMgbm90IHNldAorQ09ORklHX1A1NF9DT01NT049bQorQ09ORklHX1A1NF9VU0I9bQorIyBDT05GSUdfSVdMV0lGSV9MRURTIGlzIG5vdCBzZXQKK0NPTkZJR19IT1NUQVA9bQorQ09ORklHX0hPU1RBUF9GSVJNV0FSRT15CitDT05GSUdfSE9TVEFQX0ZJUk1XQVJFX05WUkFNPXkKKyMgQ09ORklHX0I0MyBpcyBub3Qgc2V0CisjIENPTkZJR19CNDNMRUdBQ1kgaXMgbm90IHNldAorIyBDT05GSUdfWkQxMjExUlcgaXMgbm90IHNldAorIyBDT05GSUdfUlQyWDAwIGlzIG5vdCBzZXQKKworIworIyBVU0IgTmV0d29yayBBZGFwdGVycworIworQ09ORklHX1VTQl9DQVRDPW0KK0NPTkZJR19VU0JfS0FXRVRIPW0KK0NPTkZJR19VU0JfUEVHQVNVUz1tCitDT05GSUdfVVNCX1JUTDgxNTA9bQorQ09ORklHX1VTQl9VU0JORVQ9eQorQ09ORklHX1VTQl9ORVRfQVg4ODE3WD15CitDT05GSUdfVVNCX05FVF9DRENFVEhFUj15CitDT05GSUdfVVNCX05FVF9ETTk2MDE9bQorQ09ORklHX1VTQl9ORVRfR0w2MjBBPW0KK0NPTkZJR19VU0JfTkVUX05FVDEwODA9bQorQ09ORklHX1VTQl9ORVRfUExVU0I9bQorQ09ORklHX1VTQl9ORVRfTUNTNzgzMD1tCitDT05GSUdfVVNCX05FVF9STkRJU19IT1NUPW0KK0NPTkZJR19VU0JfTkVUX0NEQ19TVUJTRVQ9bQorQ09ORklHX1VTQl9BTElfTTU2MzI9eQorQ09ORklHX1VTQl9BTjI3MjA9eQorQ09ORklHX1VTQl9CRUxLSU49eQorQ09ORklHX1VTQl9BUk1MSU5VWD15CitDT05GSUdfVVNCX0VQU09OMjg4OD15CitDT05GSUdfVVNCX0tDMjE5MD15CitDT05GSUdfVVNCX05FVF9aQVVSVVM9bQorIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKK0NPTkZJR19QUFA9bQorIyBDT05GSUdfUFBQX01VTFRJTElOSyBpcyBub3Qgc2V0CisjIENPTkZJR19QUFBfRklMVEVSIGlzIG5vdCBzZXQKK0NPTkZJR19QUFBfQVNZTkM9bQorQ09ORklHX1BQUF9TWU5DX1RUWT1tCitDT05GSUdfUFBQX0RFRkxBVEU9bQorQ09ORklHX1BQUF9CU0RDT01QPW0KK0NPTkZJR19QUFBfTVBQRT1tCitDT05GSUdfUFBQT0U9bQorIyBDT05GSUdfUFBQT0wyVFAgaXMgbm90IHNldAorIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0CitDT05GSUdfU0xIQz1tCisjIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0CisjIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKKworIworIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAorIworQ09ORklHX0lOUFVUPXkKKyMgQ09ORklHX0lOUFVUX0ZGX01FTUxFU1MgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfUE9MTERFViBpcyBub3Qgc2V0CisKKyMKKyMgVXNlcmxhbmQgaW50ZXJmYWNlcworIworQ09ORklHX0lOUFVUX01PVVNFREVWPXkKK0NPTkZJR19JTlBVVF9NT1VTRURFVl9QU0FVWD15CitDT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1g9MTAyNAorQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9ZPTc2OAorIyBDT05GSUdfSU5QVVRfSk9ZREVWIGlzIG5vdCBzZXQKK0NPTkZJR19JTlBVVF9FVkRFVj15CisjIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgRGV2aWNlIERyaXZlcnMKKyMKK0NPTkZJR19JTlBVVF9LRVlCT0FSRD15CisjIENPTkZJR19LRVlCT0FSRF9BVEtCRCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9TVU5LQkQgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfTEtLQkQgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfWFRLQkQgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfTkVXVE9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX1NUT1dBV0FZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX0dQSU8gaXMgbm90IHNldAorQ09ORklHX0lOUFVUX01PVVNFPXkKK0NPTkZJR19NT1VTRV9QUzI9eQorQ09ORklHX01PVVNFX1BTMl9BTFBTPXkKK0NPTkZJR19NT1VTRV9QUzJfTE9HSVBTMlBQPXkKK0NPTkZJR19NT1VTRV9QUzJfU1lOQVBUSUNTPXkKK0NPTkZJR19NT1VTRV9QUzJfTElGRUJPT0s9eQorQ09ORklHX01PVVNFX1BTMl9UUkFDS1BPSU5UPXkKKyMgQ09ORklHX01PVVNFX1BTMl9UT1VDSEtJVCBpcyBub3Qgc2V0CisjIENPTkZJR19NT1VTRV9TRVJJQUwgaXMgbm90IHNldAorIyBDT05GSUdfTU9VU0VfQVBQTEVUT1VDSCBpcyBub3Qgc2V0CisjIENPTkZJR19NT1VTRV9CQ001OTc0IGlzIG5vdCBzZXQKKyMgQ09ORklHX01PVVNFX1ZTWFhYQUEgaXMgbm90IHNldAorIyBDT05GSUdfTU9VU0VfR1BJTyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9UQUJMRVQgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU4gaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfTUlTQyBpcyBub3Qgc2V0CisKKyMKKyMgSGFyZHdhcmUgSS9PIHBvcnRzCisjCitDT05GSUdfU0VSSU89eQorQ09ORklHX1NFUklPX1NFUlBPUlQ9eQorQ09ORklHX1NFUklPX0xJQlBTMj15CisjIENPTkZJR19TRVJJT19SQVcgaXMgbm90IHNldAorIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAorCisjCisjIENoYXJhY3RlciBkZXZpY2VzCisjCitDT05GSUdfVlQ9eQorQ09ORklHX0NPTlNPTEVfVFJBTlNMQVRJT05TPXkKK0NPTkZJR19WVF9DT05TT0xFPXkKK0NPTkZJR19IV19DT05TT0xFPXkKK0NPTkZJR19WVF9IV19DT05TT0xFX0JJTkRJTkc9eQorQ09ORklHX0RFVktNRU09eQorIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKKworIworIyBTZXJpYWwgZHJpdmVycworIworQ09ORklHX1NFUklBTF84MjUwPXkKK0NPTkZJR19TRVJJQUxfODI1MF9DT05TT0xFPXkKK0NPTkZJR19TRVJJQUxfODI1MF9OUl9VQVJUUz0zMgorQ09ORklHX1NFUklBTF84MjUwX1JVTlRJTUVfVUFSVFM9NAorQ09ORklHX1NFUklBTF84MjUwX0VYVEVOREVEPXkKK0NPTkZJR19TRVJJQUxfODI1MF9NQU5ZX1BPUlRTPXkKK0NPTkZJR19TRVJJQUxfODI1MF9TSEFSRV9JUlE9eQorQ09ORklHX1NFUklBTF84MjUwX0RFVEVDVF9JUlE9eQorQ09ORklHX1NFUklBTF84MjUwX1JTQT15CisKKyMKKyMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAorIworQ09ORklHX1NFUklBTF9DT1JFPXkKK0NPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKK0NPTkZJR19VTklYOThfUFRZUz15CisjIENPTkZJR19MRUdBQ1lfUFRZUyBpcyBub3Qgc2V0CisjIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAorQ09ORklHX0hXX1JBTkRPTT15CisjIENPTkZJR19OVlJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CisjIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAorQ09ORklHX0kyQz15CitDT05GSUdfSTJDX0JPQVJESU5GTz15CitDT05GSUdfSTJDX0NIQVJERVY9eQorQ09ORklHX0kyQ19IRUxQRVJfQVVUTz15CisKKyMKKyMgSTJDIEhhcmR3YXJlIEJ1cyBzdXBwb3J0CisjCisKKyMKKyMgSTJDIHN5c3RlbSBidXMgZHJpdmVycyAobW9zdGx5IGVtYmVkZGVkIC8gc3lzdGVtLW9uLWNoaXApCisjCisjIENPTkZJR19JMkNfR1BJTyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfT0NPUkVTIGlzIG5vdCBzZXQKK0NPTkZJR19JMkNfT01BUD15CisjIENPTkZJR19JMkNfU0lNVEVDIGlzIG5vdCBzZXQKKworIworIyBFeHRlcm5hbCBJMkMvU01CdXMgYWRhcHRlciBkcml2ZXJzCisjCisjIENPTkZJR19JMkNfUEFSUE9SVF9MSUdIVCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfVEFPU19FVk0gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1RJTllfVVNCIGlzIG5vdCBzZXQKKworIworIyBPdGhlciBJMkMvU01CdXMgYnVzIGRyaXZlcnMKKyMKKyMgQ09ORklHX0kyQ19QQ0FfUExBVEZPUk0gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NUVUIgaXMgbm90IHNldAorCisjCisjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAorIworIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUMjQgaXMgbm90IHNldAorQ09ORklHX1NFTlNPUlNfRUVQUk9NPXkKKyMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0Y4NTc1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDRjg1OTEgaXMgbm90IHNldAorIyBDT05GSUdfSVNQMTMwMV9PTUFQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RQUzY1MDEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTUFYNjg3NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0JVUyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQ0hJUCBpcyBub3Qgc2V0CitDT05GSUdfU1BJPXkKKyMgQ09ORklHX1NQSV9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfU1BJX01BU1RFUj15CisKKyMKKyMgU1BJIE1hc3RlciBDb250cm9sbGVyIERyaXZlcnMKKyMKKyMgQ09ORklHX1NQSV9CSVRCQU5HIGlzIG5vdCBzZXQKK0NPTkZJR19TUElfT01BUDI0WFg9eQorCisjCisjIFNQSSBQcm90b2NvbCBNYXN0ZXJzCisjCisjIENPTkZJR19TUElfQVQyNSBpcyBub3Qgc2V0CisjIENPTkZJR19TUElfU1BJREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQSV9UTEU2MlgwIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX1JFUVVJUkVfR1BJT0xJQj15CitDT05GSUdfR1BJT0xJQj15CitDT05GSUdfREVCVUdfR1BJTz15CitDT05GSUdfR1BJT19TWVNGUz15CisKKyMKKyMgSTJDIEdQSU8gZXhwYW5kZXJzOgorIworIyBDT05GSUdfR1BJT19NQVg3MzJYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dQSU9fUENBOTUzWCBpcyBub3Qgc2V0CisjIENPTkZJR19HUElPX1BDRjg1N1ggaXMgbm90IHNldAorCisjCisjIFBDSSBHUElPIGV4cGFuZGVyczoKKyMKKworIworIyBTUEkgR1BJTyBleHBhbmRlcnM6CisjCisjIENPTkZJR19HUElPX01BWDczMDEgaXMgbm90IHNldAorIyBDT05GSUdfR1BJT19NQ1AyM1MwOCBpcyBub3Qgc2V0CisjIENPTkZJR19XMSBpcyBub3Qgc2V0CitDT05GSUdfUE9XRVJfU1VQUExZPW0KKyMgQ09ORklHX1BPV0VSX1NVUFBMWV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19QREFfUE9XRVIgaXMgbm90IHNldAorIyBDT05GSUdfQkFUVEVSWV9EUzI3NjAgaXMgbm90IHNldAorQ09ORklHX0hXTU9OPXkKKyMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FENzQxNCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FENzQxOCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FEQ1hYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURNMTAyMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FETTEwMjUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRE0xMDI2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURNMTAyOSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FETTEwMzEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRE05MjQwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURUNzQ3MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FEVDc0NzMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BVFhQMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0RTMTYyMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0Y3MTgwNUYgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19GNzE4ODJGRyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0Y3NTM3NVMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19HTDUxOFNNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfR0w1MjBTTSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0lUODcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE03MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNNzUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTc3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE03OCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNODAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTgzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE04NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNODcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTkwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE05MiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNOTMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19NQVgxMTExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTUFYMTYxOSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX01BWDY2NTAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQzg3MzYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUEM4NzQyNyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0RNRTE3MzcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19TTVNDNDdNMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1NNU0M0N00xOTIgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19TTVNDNDdCMzk3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURTNzgyOCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1RITUM1MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1ZUMTIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4Mzc4MUQgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODM3OTFEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzNzkyRCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4Mzc5MyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4M0w3ODVUUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4M0w3ODZORyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzNjI3RUhGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAorIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0CisjIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKK0NPTkZJR19XQVRDSERPRz15CitDT05GSUdfV0FUQ0hET0dfTk9XQVlPVVQ9eQorCisjCisjIFdhdGNoZG9nIERldmljZSBEcml2ZXJzCisjCisjIENPTkZJR19TT0ZUX1dBVENIRE9HIGlzIG5vdCBzZXQKKworIworIyBVU0ItYmFzZWQgV2F0Y2hkb2cgQ2FyZHMKKyMKKyMgQ09ORklHX1VTQlBDV0FUQ0hET0cgaXMgbm90IHNldAorCisjCisjIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQorIworQ09ORklHX1NTQl9QT1NTSUJMRT15CisjIENPTkZJR19TU0IgaXMgbm90IHNldAorCisjCisjIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01GRF9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0CisjIENPTkZJR19IVENfRUdQSU8gaXMgbm90IHNldAorIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0CisjIENPTkZJR19VQ0IxNDAwX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1Q3TDY2WEIgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1RDNjM4N1hCIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9UQzYzOTNYQiBpcyBub3Qgc2V0CisKKyMKKyMgTXVsdGltZWRpYSBkZXZpY2VzCisjCisKKyMKKyMgTXVsdGltZWRpYSBjb3JlIHN1cHBvcnQKKyMKK0NPTkZJR19WSURFT19ERVY9bQorQ09ORklHX1ZJREVPX1Y0TDJfQ09NTU9OPW0KK0NPTkZJR19WSURFT19BTExPV19WNEwxPXkKK0NPTkZJR19WSURFT19WNEwxX0NPTVBBVD15CitDT05GSUdfRFZCX0NPUkU9bQorQ09ORklHX1ZJREVPX01FRElBPW0KKworIworIyBNdWx0aW1lZGlhIGRyaXZlcnMKKyMKK0NPTkZJR19NRURJQV9BVFRBQ0g9eQorQ09ORklHX01FRElBX1RVTkVSPW0KKyMgQ09ORklHX01FRElBX1RVTkVSX0NVU1RPTUlaRSBpcyBub3Qgc2V0CitDT05GSUdfTUVESUFfVFVORVJfU0lNUExFPW0KK0NPTkZJR19NRURJQV9UVU5FUl9UREE4MjkwPW0KK0NPTkZJR19NRURJQV9UVU5FUl9UREE4MjdYPW0KK0NPTkZJR19NRURJQV9UVU5FUl9UREExODI3MT1tCitDT05GSUdfTUVESUFfVFVORVJfVERBOTg4Nz1tCitDT05GSUdfTUVESUFfVFVORVJfVEVBNTc2MT1tCitDT05GSUdfTUVESUFfVFVORVJfVEVBNTc2Nz1tCitDT05GSUdfTUVESUFfVFVORVJfTVQyMFhYPW0KK0NPTkZJR19NRURJQV9UVU5FUl9NVDIwNjA9bQorQ09ORklHX01FRElBX1RVTkVSX01UMjI2Nj1tCitDT05GSUdfTUVESUFfVFVORVJfUVQxMDEwPW0KK0NPTkZJR19NRURJQV9UVU5FUl9YQzIwMjg9bQorQ09ORklHX01FRElBX1RVTkVSX1hDNTAwMD1tCitDT05GSUdfTUVESUFfVFVORVJfTVhMNTAwNVM9bQorQ09ORklHX1ZJREVPX1Y0TDI9bQorQ09ORklHX1ZJREVPX1Y0TDE9bQorQ09ORklHX1ZJREVPX1RWRUVQUk9NPW0KK0NPTkZJR19WSURFT19UVU5FUj1tCitDT05GSUdfVklERU9fQ0FQVFVSRV9EUklWRVJTPXkKKyMgQ09ORklHX1ZJREVPX0FEVl9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfVklERU9fSEVMUEVSX0NISVBTX0FVVE89eQorQ09ORklHX1ZJREVPX01TUDM0MDA9bQorQ09ORklHX1ZJREVPX0NTNTNMMzJBPW0KK0NPTkZJR19WSURFT19XTTg3NzU9bQorQ09ORklHX1ZJREVPX1NBQTcxMVg9bQorQ09ORklHX1ZJREVPX0NYMjU4NDA9bQorQ09ORklHX1ZJREVPX0NYMjM0MVg9bQorIyBDT05GSUdfVklERU9fVklWSSBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19DUElBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX0NQSUEyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX1NBQTUyNDZBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX1NBQTUyNDkgaXMgbm90IHNldAorIyBDT05GSUdfVFVORVJfMzAzNiBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19BVTA4MjggaXMgbm90IHNldAorQ09ORklHX1Y0TF9VU0JfRFJJVkVSUz15CitDT05GSUdfVVNCX1ZJREVPX0NMQVNTPW0KK0NPTkZJR19VU0JfVklERU9fQ0xBU1NfSU5QVVRfRVZERVY9eQorIyBDT05GSUdfVVNCX0dTUENBIGlzIG5vdCBzZXQKK0NPTkZJR19WSURFT19QVlJVU0IyPW0KK0NPTkZJR19WSURFT19QVlJVU0IyX1NZU0ZTPXkKK0NPTkZJR19WSURFT19QVlJVU0IyX0RWQj15CisjIENPTkZJR19WSURFT19QVlJVU0IyX0RFQlVHSUZDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX0VNMjhYWCBpcyBub3Qgc2V0CitDT05GSUdfVklERU9fVVNCVklTSU9OPW0KK0NPTkZJR19WSURFT19VU0JWSURFTz1tCitDT05GSUdfVVNCX1ZJQ0FNPW0KK0NPTkZJR19VU0JfSUJNQ0FNPW0KK0NPTkZJR19VU0JfS09OSUNBV0M9bQorQ09ORklHX1VTQl9RVUlDS0NBTV9NRVNTRU5HRVI9bQorIyBDT05GSUdfVVNCX0VUNjFYMjUxIGlzIG5vdCBzZXQKK0NPTkZJR19WSURFT19PVkNBTUNISVA9bQorQ09ORklHX1VTQl9XOTk2OENGPW0KK0NPTkZJR19VU0JfT1Y1MTE9bQorQ09ORklHX1VTQl9TRTQwMT1tCitDT05GSUdfVVNCX1NOOUMxMDI9bQorQ09ORklHX1VTQl9TVFY2ODA9bQorIyBDT05GSUdfVVNCX1pDMDMwMSBpcyBub3Qgc2V0CitDT05GSUdfVVNCX1BXQz1tCisjIENPTkZJR19VU0JfUFdDX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfWlIzNjRYWD1tCisjIENPTkZJR19VU0JfU1RLV0VCQ0FNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TMjI1NSBpcyBub3Qgc2V0CisjIENPTkZJR19TT0NfQ0FNRVJBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX1NIX01PQklMRV9DRVUgaXMgbm90IHNldAorQ09ORklHX1JBRElPX0FEQVBURVJTPXkKKyMgQ09ORklHX1VTQl9EU0JSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TSTQ3MFggaXMgbm90IHNldAorQ09ORklHX0RWQl9DQVBUVVJFX0RSSVZFUlM9eQorIyBDT05GSUdfVFRQQ0lfRUVQUk9NIGlzIG5vdCBzZXQKKworIworIyBTdXBwb3J0ZWQgVVNCIEFkYXB0ZXJzCisjCitDT05GSUdfRFZCX1VTQj1tCisjIENPTkZJR19EVkJfVVNCX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19EVkJfVVNCX0E4MDA9bQorQ09ORklHX0RWQl9VU0JfRElCVVNCX01CPW0KKyMgQ09ORklHX0RWQl9VU0JfRElCVVNCX01CX0ZBVUxUWSBpcyBub3Qgc2V0CitDT05GSUdfRFZCX1VTQl9ESUJVU0JfTUM9bQorQ09ORklHX0RWQl9VU0JfRElCMDcwMD1tCitDT05GSUdfRFZCX1VTQl9VTVRfMDEwPW0KK0NPTkZJR19EVkJfVVNCX0NYVVNCPW0KK0NPTkZJR19EVkJfVVNCX005MjBYPW0KK0NPTkZJR19EVkJfVVNCX0dMODYxPW0KK0NPTkZJR19EVkJfVVNCX0FVNjYxMD1tCitDT05GSUdfRFZCX1VTQl9ESUdJVFY9bQorQ09ORklHX0RWQl9VU0JfVlA3MDQ1PW0KK0NPTkZJR19EVkJfVVNCX1ZQNzAyWD1tCitDT05GSUdfRFZCX1VTQl9HUDhQU0s9bQorQ09ORklHX0RWQl9VU0JfTk9WQV9UX1VTQjI9bQorQ09ORklHX0RWQl9VU0JfVFRVU0IyPW0KK0NPTkZJR19EVkJfVVNCX0RUVDIwMFU9bQorQ09ORklHX0RWQl9VU0JfT1BFUkExPW0KK0NPTkZJR19EVkJfVVNCX0FGOTAwNT1tCitDT05GSUdfRFZCX1VTQl9BRjkwMDVfUkVNT1RFPW0KKyMgQ09ORklHX0RWQl9VU0JfRFcyMTAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RWQl9VU0JfQU5ZU0VFIGlzIG5vdCBzZXQKK0NPTkZJR19EVkJfVFRVU0JfQlVER0VUPW0KK0NPTkZJR19EVkJfVFRVU0JfREVDPW0KK0NPTkZJR19EVkJfQ0lORVJHWVQyPW0KKyMgQ09ORklHX0RWQl9DSU5FUkdZVDJfVFVOSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RWQl9TSUFOT19TTVMxWFhYIGlzIG5vdCBzZXQKKworIworIyBTdXBwb3J0ZWQgRmxleENvcElJIChCMkMyKSBBZGFwdGVycworIworIyBDT05GSUdfRFZCX0IyQzJfRkxFWENPUCBpcyBub3Qgc2V0CisKKyMKKyMgU3VwcG9ydGVkIERWQiBGcm9udGVuZHMKKyMKKworIworIyBDdXN0b21pc2UgRFZCIEZyb250ZW5kcworIworIyBDT05GSUdfRFZCX0ZFX0NVU1RPTUlTRSBpcyBub3Qgc2V0CisKKyMKKyMgRFZCLVMgKHNhdGVsbGl0ZSkgZnJvbnRlbmRzCisjCitDT05GSUdfRFZCX0NYMjQxMTA9bQorQ09ORklHX0RWQl9DWDI0MTIzPW0KK0NPTkZJR19EVkJfTVQzMTI9bQorQ09ORklHX0RWQl9TNUgxNDIwPW0KK0NPTkZJR19EVkJfU1RWMDI5OT1tCitDT05GSUdfRFZCX1REQTgwODM9bQorQ09ORklHX0RWQl9UREExMDA4Nj1tCitDT05GSUdfRFZCX1ZFUzFYOTM9bQorQ09ORklHX0RWQl9UVU5FUl9JVEQxMDAwPW0KK0NPTkZJR19EVkJfVERBODI2WD1tCitDT05GSUdfRFZCX1RVQTYxMDA9bQorCisjCisjIERWQi1UICh0ZXJyZXN0cmlhbCkgZnJvbnRlbmRzCisjCitDT05GSUdfRFZCX1NQODg3MD1tCitDT05GSUdfRFZCX1NQODg3WD1tCitDT05GSUdfRFZCX0NYMjI3MDA9bQorQ09ORklHX0RWQl9DWDIyNzAyPW0KKyMgQ09ORklHX0RWQl9EUlgzOTdYRCBpcyBub3Qgc2V0CitDT05GSUdfRFZCX0w2NDc4MT1tCitDT05GSUdfRFZCX1REQTEwMDRYPW0KK0NPTkZJR19EVkJfTlhUNjAwMD1tCitDT05GSUdfRFZCX01UMzUyPW0KK0NPTkZJR19EVkJfWkwxMDM1Mz1tCitDT05GSUdfRFZCX0RJQjMwMDBNQj1tCitDT05GSUdfRFZCX0RJQjMwMDBNQz1tCitDT05GSUdfRFZCX0RJQjcwMDBNPW0KK0NPTkZJR19EVkJfRElCNzAwMFA9bQorQ09ORklHX0RWQl9UREExMDA0OD1tCisKKyMKKyMgRFZCLUMgKGNhYmxlKSBmcm9udGVuZHMKKyMKK0NPTkZJR19EVkJfVkVTMTgyMD1tCitDT05GSUdfRFZCX1REQTEwMDIxPW0KK0NPTkZJR19EVkJfVERBMTAwMjM9bQorQ09ORklHX0RWQl9TVFYwMjk3PW0KKworIworIyBBVFNDIChOb3J0aCBBbWVyaWNhbi9Lb3JlYW4gVGVycmVzdHJpYWwvQ2FibGUgRFRWKSBmcm9udGVuZHMKKyMKK0NPTkZJR19EVkJfTlhUMjAwWD1tCisjIENPTkZJR19EVkJfT1I1MTIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19EVkJfT1I1MTEzMiBpcyBub3Qgc2V0CitDT05GSUdfRFZCX0JDTTM1MTA9bQorQ09ORklHX0RWQl9MR0RUMzMwWD1tCitDT05GSUdfRFZCX1M1SDE0MDk9bQorQ09ORklHX0RWQl9BVTg1MjI9bQorQ09ORklHX0RWQl9TNUgxNDExPW0KKworIworIyBEaWdpdGFsIHRlcnJlc3RyaWFsIG9ubHkgdHVuZXJzL1BMTAorIworQ09ORklHX0RWQl9QTEw9bQorQ09ORklHX0RWQl9UVU5FUl9ESUIwMDcwPW0KKworIworIyBTRUMgY29udHJvbCBkZXZpY2VzIGZvciBEVkItUworIworQ09ORklHX0RWQl9MTkJQMjE9bQorIyBDT05GSUdfRFZCX0lTTDY0MDUgaXMgbm90IHNldAorQ09ORklHX0RWQl9JU0w2NDIxPW0KKyMgQ09ORklHX0RBQiBpcyBub3Qgc2V0CisKKyMKKyMgR3JhcGhpY3Mgc3VwcG9ydAorIworIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0wgaXMgbm90IHNldAorIyBDT05GSUdfRkIgaXMgbm90IHNldAorIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKKworIworIyBEaXNwbGF5IGRldmljZSBzdXBwb3J0CisjCitDT05GSUdfRElTUExBWV9TVVBQT1JUPXkKKworIworIyBEaXNwbGF5IGhhcmR3YXJlIGRyaXZlcnMKKyMKKworIworIyBDb25zb2xlIGRpc3BsYXkgZHJpdmVyIHN1cHBvcnQKKyMKKyMgQ09ORklHX1ZHQV9DT05TT0xFIGlzIG5vdCBzZXQKK0NPTkZJR19EVU1NWV9DT05TT0xFPXkKK0NPTkZJR19TT1VORD15CitDT05GSUdfU05EPXkKK0NPTkZJR19TTkRfVElNRVI9eQorQ09ORklHX1NORF9QQ009eQorQ09ORklHX1NORF9IV0RFUD15CitDT05GSUdfU05EX1JBV01JREk9eQorQ09ORklHX1NORF9TRVFVRU5DRVI9bQorIyBDT05GSUdfU05EX1NFUV9EVU1NWSBpcyBub3Qgc2V0CitDT05GSUdfU05EX09TU0VNVUw9eQorQ09ORklHX1NORF9NSVhFUl9PU1M9eQorQ09ORklHX1NORF9QQ01fT1NTPXkKK0NPTkZJR19TTkRfUENNX09TU19QTFVHSU5TPXkKK0NPTkZJR19TTkRfU0VRVUVOQ0VSX09TUz15CisjIENPTkZJR19TTkRfRFlOQU1JQ19NSU5PUlMgaXMgbm90IHNldAorQ09ORklHX1NORF9TVVBQT1JUX09MRF9BUEk9eQorQ09ORklHX1NORF9WRVJCT1NFX1BST0NGUz15CitDT05GSUdfU05EX1ZFUkJPU0VfUFJJTlRLPXkKK0NPTkZJR19TTkRfREVCVUc9eQorIyBDT05GSUdfU05EX0RFQlVHX1ZFUkJPU0UgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1BDTV9YUlVOX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19TTkRfRFJJVkVSUz15CisjIENPTkZJR19TTkRfRFVNTVkgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1ZJUk1JREkgaXMgbm90IHNldAorIyBDT05GSUdfU05EX01UUEFWIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9TRVJJQUxfVTE2NTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9NUFU0MDEgaXMgbm90IHNldAorQ09ORklHX1NORF9BUk09eQorQ09ORklHX1NORF9TUEk9eQorQ09ORklHX1NORF9VU0I9eQorQ09ORklHX1NORF9VU0JfQVVESU89eQorQ09ORklHX1NORF9VU0JfQ0FJQVE9bQorQ09ORklHX1NORF9VU0JfQ0FJQVFfSU5QVVQ9eQorQ09ORklHX1NORF9TT0M9eQorQ09ORklHX1NORF9PTUFQX1NPQz15CisjIENPTkZJR19TT1VORF9QUklNRSBpcyBub3Qgc2V0CitDT05GSUdfSElEX1NVUFBPUlQ9eQorQ09ORklHX0hJRD15CitDT05GSUdfSElEX0RFQlVHPXkKKyMgQ09ORklHX0hJRFJBVyBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIElucHV0IERldmljZXMKKyMKK0NPTkZJR19VU0JfSElEPXkKKyMgQ09ORklHX1VTQl9ISURJTlBVVF9QT1dFUkJPT0sgaXMgbm90IHNldAorIyBDT05GSUdfSElEX0ZGIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9ISURERVYgaXMgbm90IHNldAorQ09ORklHX1VTQl9TVVBQT1JUPXkKK0NPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKK0NPTkZJR19VU0JfQVJDSF9IQVNfT0hDST15CisjIENPTkZJR19VU0JfQVJDSF9IQVNfRUhDSSBpcyBub3Qgc2V0CitDT05GSUdfVVNCPXkKK0NPTkZJR19VU0JfREVCVUc9eQorQ09ORklHX1VTQl9BTk5PVU5DRV9ORVdfREVWSUNFUz15CisKKyMKKyMgTWlzY2VsbGFuZW91cyBVU0Igb3B0aW9ucworIworQ09ORklHX1VTQl9ERVZJQ0VGUz15CitDT05GSUdfVVNCX0RFVklDRV9DTEFTUz15CisjIENPTkZJR19VU0JfRFlOQU1JQ19NSU5PUlMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09URyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1RHX1dISVRFTElTVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1RHX0JMQUNLTElTVF9IVUIgaXMgbm90IHNldAorQ09ORklHX1VTQl9NT049eQorCisjCisjIFVTQiBIb3N0IENvbnRyb2xsZXIgRHJpdmVycworIworIyBDT05GSUdfVVNCX0M2N1gwMF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU1AxNzYwX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT0hDSV9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NMODExX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUjhBNjY1OTdfSENEIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfTVVTQl9IRFJDPXkKK0NPTkZJR19VU0JfTVVTQl9TT0M9eQorCisjCisjIE9NQVAgMzQzeCBoaWdoIHNwZWVkIFVTQiBzdXBwb3J0CisjCitDT05GSUdfVVNCX01VU0JfSE9TVD15CisjIENPTkZJR19VU0JfTVVTQl9QRVJJUEhFUkFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9NVVNCX09URyBpcyBub3Qgc2V0CitDT05GSUdfVVNCX01VU0JfSERSQ19IQ0Q9eQorQ09ORklHX01VU0JfUElPX09OTFk9eQorIyBDT05GSUdfVVNCX01VU0JfREVCVUcgaXMgbm90IHNldAorCisjCisjIFVTQiBEZXZpY2UgQ2xhc3MgZHJpdmVycworIworQ09ORklHX1VTQl9BQ009bQorQ09ORklHX1VTQl9QUklOVEVSPW0KK0NPTkZJR19VU0JfV0RNPXkKKworIworIyBOT1RFOiBVU0JfU1RPUkFHRSBlbmFibGVzIFNDU0ksIGFuZCAnU0NTSSBkaXNrIHN1cHBvcnQnCisjCisKKyMKKyMgbWF5IGFsc28gYmUgbmVlZGVkOyBzZWUgVVNCX1NUT1JBR0UgSGVscCBmb3IgbW9yZSBpbmZvcm1hdGlvbgorIworQ09ORklHX1VTQl9TVE9SQUdFPXkKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0RBVEFGQUIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfRlJFRUNPTSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9JU0QyMDAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfRFBDTSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9VU0JBVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9TRERSMDkgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjU1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0pVTVBTSE9UIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0FMQVVEQSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9PTkVUT1VDSCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9LQVJNQSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9DWVBSRVNTX0FUQUNCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MSUJVU1VBTCBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIEltYWdpbmcgZGV2aWNlcworIworIyBDT05GSUdfVVNCX01EQzgwMCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTUlDUk9URUsgaXMgbm90IHNldAorCisjCisjIFVTQiBwb3J0IGRyaXZlcnMKKyMKK0NPTkZJR19VU0JfU0VSSUFMPW0KKyMgQ09ORklHX1VTQl9FWlVTQiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX0dFTkVSSUMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9BSVJDQUJMRSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX0FSSzMxMTYgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9CRUxLSU4gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9DSDM0MSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX1dISVRFSEVBVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX0RJR0lfQUNDRUxFUE9SVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX0NQMjEwMSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX0NZUFJFU1NfTTggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9FTVBFRyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX0ZURElfU0lPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfRlVOU09GVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX1ZJU09SIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfSVBBUSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX0lSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfRURHRVBPUlQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9FREdFUE9SVF9USSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX0dBUk1JTiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX0lQVyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX0lVVSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX0tFWVNQQU5fUERBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfS0VZU1BBTiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX0tMU0kgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9LT0JJTF9TQ1QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9NQ1RfVTIzMiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX01PUzc3MjAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9NT1M3ODQwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfTU9UT1JPTEEgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9OQVZNQU4gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9QTDIzMDMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9PVEk2ODU4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfU1BDUDhYNSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX0hQNFggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9TQUZFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfU0lFUlJBV0lSRUxFU1MgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9USSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX0NZQkVSSkFDSyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX1hJUkNPTSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX09QVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX09NTklORVQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9ERUJVRyBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIE1pc2NlbGxhbmVvdXMgZHJpdmVycworIworQ09ORklHX1VTQl9FTUk2Mj1tCitDT05GSUdfVVNCX0VNSTI2PW0KKyMgQ09ORklHX1VTQl9BRFVUVVggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1JJTzUwMCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0xFR09UT1dFUj1tCitDT05GSUdfVVNCX0xDRD1tCisjIENPTkZJR19VU0JfQkVSUllfQ0hBUkdFIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfTEVEPW0KKyMgQ09ORklHX1VTQl9DWVBSRVNTX0NZN0M2MyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQ1lUSEVSTSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUEhJREdFVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSURNT1VTRSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRlRESV9FTEFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BUFBMRURJU1BMQVkgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9UUkFOQ0VWSUJSQVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSU9XQVJSSU9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU0lHSFRGVyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKK0NPTkZJR19NTUM9eQorIyBDT05GSUdfTU1DX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19NTUNfVU5TQUZFX1JFU1VNRT15CisKKyMKKyMgTU1DL1NEIENhcmQgRHJpdmVycworIworQ09ORklHX01NQ19CTE9DSz15CitDT05GSUdfTU1DX0JMT0NLX0JPVU5DRT15CitDT05GSUdfU0RJT19VQVJUPXkKKyMgQ09ORklHX01NQ19URVNUIGlzIG5vdCBzZXQKKworIworIyBNTUMvU0QgSG9zdCBDb250cm9sbGVyIERyaXZlcnMKKyMKKyMgQ09ORklHX01NQ19TREhDSSBpcyBub3Qgc2V0CisjIENPTkZJR19NTUNfT01BUCBpcyBub3Qgc2V0CisjIENPTkZJR19NTUNfU1BJIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FDQ0VTU0lCSUxJVFkgaXMgbm90IHNldAorQ09ORklHX05FV19MRURTPXkKK0NPTkZJR19MRURTX0NMQVNTPXkKKworIworIyBMRUQgZHJpdmVycworIworIyBDT05GSUdfTEVEU19QQ0E5NTMyIGlzIG5vdCBzZXQKK0NPTkZJR19MRURTX0dQSU89eQorIyBDT05GSUdfTEVEU19QQ0E5NTVYIGlzIG5vdCBzZXQKKworIworIyBMRUQgVHJpZ2dlcnMKKyMKK0NPTkZJR19MRURTX1RSSUdHRVJTPXkKK0NPTkZJR19MRURTX1RSSUdHRVJfVElNRVI9eQorQ09ORklHX0xFRFNfVFJJR0dFUl9IRUFSVEJFQVQ9eQorIyBDT05GSUdfTEVEU19UUklHR0VSX0RFRkFVTFRfT04gaXMgbm90IHNldAorQ09ORklHX1JUQ19MSUI9eQorQ09ORklHX1JUQ19DTEFTUz15CitDT05GSUdfUlRDX0hDVE9TWVM9eQorQ09ORklHX1JUQ19IQ1RPU1lTX0RFVklDRT0icnRjMCIKKyMgQ09ORklHX1JUQ19ERUJVRyBpcyBub3Qgc2V0CisKKyMKKyMgUlRDIGludGVyZmFjZXMKKyMKK0NPTkZJR19SVENfSU5URl9TWVNGUz15CitDT05GSUdfUlRDX0lOVEZfUFJPQz15CitDT05GSUdfUlRDX0lOVEZfREVWPXkKKyMgQ09ORklHX1JUQ19JTlRGX0RFVl9VSUVfRU1VTCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1RFU1QgaXMgbm90IHNldAorCisjCisjIEkyQyBSVEMgZHJpdmVycworIworIyBDT05GSUdfUlRDX0RSVl9EUzEzMDcgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzEzNzQgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE2NzIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NQVg2OTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUlM1QzM3MiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0lTTDEyMDggaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9YMTIwNSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1BDRjg1NjMgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTgzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQxVDgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUzM1MzkwQSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0ZNMzEzMCBpcyBub3Qgc2V0CisKKyMKKyMgU1BJIFJUQyBkcml2ZXJzCisjCisjIENPTkZJR19SVENfRFJWX000MVQ5NCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTMwNSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX01BWDY5MDIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SOTcwMSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JTNUMzNDggaXMgbm90IHNldAorCisjCisjIFBsYXRmb3JtIFJUQyBkcml2ZXJzCisjCisjIENPTkZJR19SVENfRFJWX0NNT1MgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE1MTEgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE1NTMgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE3NDIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9TVEsxN1RBOCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000OFQ4NiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000OFQ1OSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1YzMDIwIGlzIG5vdCBzZXQKKworIworIyBvbi1DUFUgUlRDIGRyaXZlcnMKKyMKKyMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldAorCisjCisjIFZvbHRhZ2UgYW5kIEN1cnJlbnQgcmVndWxhdG9ycworIworIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFR1VMQVRPUl9GSVhFRF9WT0xUQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFR1VMQVRPUl9WSVJUVUFMX0NPTlNVTUVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFR1VMQVRPUl9CUTI0MDIyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VJTyBpcyBub3Qgc2V0CisKKyMKKyMgRmlsZSBzeXN0ZW1zCisjCitDT05GSUdfRVhUMl9GUz15CisjIENPTkZJR19FWFQyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDJfRlNfWElQIGlzIG5vdCBzZXQKK0NPTkZJR19FWFQzX0ZTPXkKKyMgQ09ORklHX0VYVDNfRlNfWEFUVFIgaXMgbm90IHNldAorIyBDT05GSUdfRVhUNERFVl9GUyBpcyBub3Qgc2V0CitDT05GSUdfSkJEPXkKKyMgQ09ORklHX0pCRF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAorQ09ORklHX0ZTX1BPU0lYX0FDTD15CitDT05GSUdfWEZTX0ZTPW0KKyMgQ09ORklHX1hGU19RVU9UQSBpcyBub3Qgc2V0CisjIENPTkZJR19YRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGU19SVCBpcyBub3Qgc2V0CisjIENPTkZJR19YRlNfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CitDT05GSUdfRE5PVElGWT15CitDT05GSUdfSU5PVElGWT15CitDT05GSUdfSU5PVElGWV9VU0VSPXkKK0NPTkZJR19RVU9UQT15CisjIENPTkZJR19RVU9UQV9ORVRMSU5LX0lOVEVSRkFDRSBpcyBub3Qgc2V0CitDT05GSUdfUFJJTlRfUVVPVEFfV0FSTklORz15CisjIENPTkZJR19RRk1UX1YxIGlzIG5vdCBzZXQKK0NPTkZJR19RRk1UX1YyPXkKK0NPTkZJR19RVU9UQUNUTD15CisjIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0CitDT05GSUdfRlVTRV9GUz1tCisKKyMKKyMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcworIworQ09ORklHX0lTTzk2NjBfRlM9bQorQ09ORklHX0pPTElFVD15CitDT05GSUdfWklTT0ZTPXkKK0NPTkZJR19VREZfRlM9bQorQ09ORklHX1VERl9OTFM9eQorCisjCisjIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKKyMKK0NPTkZJR19GQVRfRlM9eQorQ09ORklHX01TRE9TX0ZTPXkKK0NPTkZJR19WRkFUX0ZTPXkKK0NPTkZJR19GQVRfREVGQVVMVF9DT0RFUEFHRT00MzcKK0NPTkZJR19GQVRfREVGQVVMVF9JT0NIQVJTRVQ9Imlzbzg4NTktMSIKKyMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAorCisjCisjIFBzZXVkbyBmaWxlc3lzdGVtcworIworQ09ORklHX1BST0NfRlM9eQorQ09ORklHX1BST0NfU1lTQ1RMPXkKK0NPTkZJR19TWVNGUz15CitDT05GSUdfVE1QRlM9eQorIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0CisjIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgTWlzY2VsbGFuZW91cyBmaWxlc3lzdGVtcworIworIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfSkZGUzJfRlM9eQorQ09ORklHX0pGRlMyX0ZTX0RFQlVHPTAKK0NPTkZJR19KRkZTMl9GU19XUklURUJVRkZFUj15CisjIENPTkZJR19KRkZTMl9GU19XQlVGX1ZFUklGWSBpcyBub3Qgc2V0CitDT05GSUdfSkZGUzJfU1VNTUFSWT15CitDT05GSUdfSkZGUzJfRlNfWEFUVFI9eQorQ09ORklHX0pGRlMyX0ZTX1BPU0lYX0FDTD15CitDT05GSUdfSkZGUzJfRlNfU0VDVVJJVFk9eQorQ09ORklHX0pGRlMyX0NPTVBSRVNTSU9OX09QVElPTlM9eQorQ09ORklHX0pGRlMyX1pMSUI9eQorQ09ORklHX0pGRlMyX0xaTz15CitDT05GSUdfSkZGUzJfUlRJTUU9eQorQ09ORklHX0pGRlMyX1JVQklOPXkKKyMgQ09ORklHX0pGRlMyX0NNT0RFX05PTkUgaXMgbm90IHNldAorQ09ORklHX0pGRlMyX0NNT0RFX1BSSU9SSVRZPXkKKyMgQ09ORklHX0pGRlMyX0NNT0RFX1NJWkUgaXMgbm90IHNldAorIyBDT05GSUdfSkZGUzJfQ01PREVfRkFWT1VSTFpPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQU1GUyBpcyBub3Qgc2V0CisjIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX09NRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAorQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQorQ09ORklHX05GU19GUz15CitDT05GSUdfTkZTX1YzPXkKKyMgQ09ORklHX05GU19WM19BQ0wgaXMgbm90IHNldAorQ09ORklHX05GU19WND15CitDT05GSUdfUk9PVF9ORlM9eQorIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0CitDT05GSUdfTE9DS0Q9eQorQ09ORklHX0xPQ0tEX1Y0PXkKK0NPTkZJR19ORlNfQ09NTU9OPXkKK0NPTkZJR19TVU5SUEM9eQorQ09ORklHX1NVTlJQQ19HU1M9eQorQ09ORklHX1JQQ1NFQ19HU1NfS1JCNT15CisjIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DSUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgUGFydGl0aW9uIFR5cGVzCisjCitDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEPXkKKyMgQ09ORklHX0FDT1JOX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19PU0ZfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FNSUdBX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFSSV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfTUFDX1BBUlRJVElPTiBpcyBub3Qgc2V0CitDT05GSUdfTVNET1NfUEFSVElUSU9OPXkKKyMgQ09ORklHX0JTRF9ESVNLTEFCRUwgaXMgbm90IHNldAorIyBDT05GSUdfTUlOSVhfU1VCUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NPTEFSSVNfWDg2X1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19VTklYV0FSRV9ESVNLTEFCRUwgaXMgbm90IHNldAorIyBDT05GSUdfTERNX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19TR0lfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VMVFJJWF9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfU1VOX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19LQVJNQV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfRUZJX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNWNjhfUEFSVElUSU9OIGlzIG5vdCBzZXQKK0NPTkZJR19OTFM9eQorQ09ORklHX05MU19ERUZBVUxUPSJpc284ODU5LTEiCitDT05GSUdfTkxTX0NPREVQQUdFXzQzNz15CisjIENPTkZJR19OTFNfQ09ERVBBR0VfNzM3IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV83NzUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODUyIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjEgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjkgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzNiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85MzIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzk0OSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODc0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzggaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTEgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0FTQ0lJIGlzIG5vdCBzZXQKK0NPTkZJR19OTFNfSVNPODg1OV8xPXkKKyMgQ09ORklHX05MU19JU084ODU5XzIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV80IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV83IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzkgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMTMgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMTQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMTUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0tPSThfUiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfS09JOF9VIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19VVEY4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0RMTSBpcyBub3Qgc2V0CisKKyMKKyMgS2VybmVsIGhhY2tpbmcKKyMKKyMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKK0NPTkZJR19FTkFCTEVfV0FSTl9ERVBSRUNBVEVEPXkKK0NPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CitDT05GSUdfRlJBTUVfV0FSTj0xMDI0CitDT05GSUdfTUFHSUNfU1lTUlE9eQorIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0ZTPXkKKyMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0tFUk5FTD15CisjIENPTkZJR19ERUJVR19TSElSUSBpcyBub3Qgc2V0CitDT05GSUdfREVURUNUX1NPRlRMT0NLVVA9eQorIyBDT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUMgaXMgbm90IHNldAorQ09ORklHX0JPT1RQQVJBTV9TT0ZUTE9DS1VQX1BBTklDX1ZBTFVFPTAKK0NPTkZJR19TQ0hFRF9ERUJVRz15CitDT05GSUdfU0NIRURTVEFUUz15CitDT05GSUdfVElNRVJfU1RBVFM9eQorIyBDT05GSUdfREVCVUdfT0JKRUNUUyBpcyBub3Qgc2V0CisjIENPTkZJR19TTFVCX0RFQlVHX09OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMVUJfU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfUlRfTVVURVhFUyBpcyBub3Qgc2V0CisjIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX01VVEVYRVM9eQorIyBDT05GSUdfREVCVUdfTE9DS19BTExPQyBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9WRV9MT0NLSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xPQ0tfU1RBVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19MT0NLSU5HX0FQSV9TRUxGVEVTVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19CVUdWRVJCT1NFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0lORk8gaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfVk0gaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfV1JJVEVDT1VOVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19NRU1PUllfSU5JVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKK0NPTkZJR19GUkFNRV9QT0lOVEVSPXkKKyMgQ09ORklHX0JPT1RfUFJJTlRLX0RFTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAorIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9GVFJBQ0U9eQorQ09ORklHX0hBVkVfRFlOQU1JQ19GVFJBQ0U9eQorIyBDT05GSUdfRlRSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lSUVNPRkZfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDSEVEX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19DT05URVhUX1NXSVRDSF9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9BUkNIX0tHREI9eQorIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19VU0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0VSUk9SUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TVEFDS19VU0FHRSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19MTCBpcyBub3Qgc2V0CisKKyMKKyMgU2VjdXJpdHkgb3B0aW9ucworIworIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUyBpcyBub3Qgc2V0CitDT05GSUdfWE9SX0JMT0NLUz1tCitDT05GSUdfQVNZTkNfQ09SRT1tCitDT05GSUdfQVNZTkNfTUVNQ1BZPW0KK0NPTkZJR19BU1lOQ19YT1I9bQorQ09ORklHX0NSWVBUTz15CisKKyMKKyMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCisjCitDT05GSUdfQ1JZUFRPX0FMR0FQST15CitDT05GSUdfQ1JZUFRPX0FFQUQ9bQorQ09ORklHX0NSWVBUT19CTEtDSVBIRVI9eQorQ09ORklHX0NSWVBUT19IQVNIPW0KK0NPTkZJR19DUllQVE9fTUFOQUdFUj15CitDT05GSUdfQ1JZUFRPX0dGMTI4TVVMPW0KK0NPTkZJR19DUllQVE9fTlVMTD1tCitDT05GSUdfQ1JZUFRPX0NSWVBURD1tCisjIENPTkZJR19DUllQVE9fQVVUSEVOQyBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX1RFU1Q9bQorCisjCisjIEF1dGhlbnRpY2F0ZWQgRW5jcnlwdGlvbiB3aXRoIEFzc29jaWF0ZWQgRGF0YQorIworIyBDT05GSUdfQ1JZUFRPX0NDTSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0NNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TRVFJViBpcyBub3Qgc2V0CisKKyMKKyMgQmxvY2sgbW9kZXMKKyMKK0NPTkZJR19DUllQVE9fQ0JDPXkKKyMgQ09ORklHX0NSWVBUT19DVFIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NUUyBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0VDQj15CitDT05GSUdfQ1JZUFRPX0xSVz1tCitDT05GSUdfQ1JZUFRPX1BDQkM9bQorIyBDT05GSUdfQ1JZUFRPX1hUUyBpcyBub3Qgc2V0CisKKyMKKyMgSGFzaCBtb2RlcworIworQ09ORklHX0NSWVBUT19ITUFDPW0KK0NPTkZJR19DUllQVE9fWENCQz1tCisKKyMKKyMgRGlnZXN0CisjCitDT05GSUdfQ1JZUFRPX0NSQzMyQz1tCitDT05GSUdfQ1JZUFRPX01END1tCitDT05GSUdfQ1JZUFRPX01ENT15CitDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDPXkKKyMgQ09ORklHX0NSWVBUT19STUQxMjggaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDE2MCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMjU2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQzMjAgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19TSEExPW0KK0NPTkZJR19DUllQVE9fU0hBMjU2PW0KK0NPTkZJR19DUllQVE9fU0hBNTEyPW0KK0NPTkZJR19DUllQVE9fVEdSMTkyPW0KK0NPTkZJR19DUllQVE9fV1A1MTI9bQorCisjCisjIENpcGhlcnMKKyMKK0NPTkZJR19DUllQVE9fQUVTPXkKK0NPTkZJR19DUllQVE9fQU5VQklTPW0KK0NPTkZJR19DUllQVE9fQVJDND15CitDT05GSUdfQ1JZUFRPX0JMT1dGSVNIPW0KK0NPTkZJR19DUllQVE9fQ0FNRUxMSUE9bQorQ09ORklHX0NSWVBUT19DQVNUNT1tCitDT05GSUdfQ1JZUFRPX0NBU1Q2PW0KK0NPTkZJR19DUllQVE9fREVTPXkKK0NPTkZJR19DUllQVE9fRkNSWVBUPW0KK0NPTkZJR19DUllQVE9fS0hBWkFEPW0KKyMgQ09ORklHX0NSWVBUT19TQUxTQTIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TRUVEIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fU0VSUEVOVD1tCitDT05GSUdfQ1JZUFRPX1RFQT1tCitDT05GSUdfQ1JZUFRPX1RXT0ZJU0g9bQorQ09ORklHX0NSWVBUT19UV09GSVNIX0NPTU1PTj1tCisKKyMKKyMgQ29tcHJlc3Npb24KKyMKK0NPTkZJR19DUllQVE9fREVGTEFURT1tCisjIENPTkZJR19DUllQVE9fTFpPIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fSFc9eQorCisjCisjIExpYnJhcnkgcm91dGluZXMKKyMKK0NPTkZJR19CSVRSRVZFUlNFPXkKKyMgQ09ORklHX0dFTkVSSUNfRklORF9GSVJTVF9CSVQgaXMgbm90IHNldAorIyBDT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUIGlzIG5vdCBzZXQKK0NPTkZJR19DUkNfQ0NJVFQ9eQorQ09ORklHX0NSQzE2PW0KK0NPTkZJR19DUkNfVDEwRElGPXkKK0NPTkZJR19DUkNfSVRVX1Q9eQorQ09ORklHX0NSQzMyPXkKK0NPTkZJR19DUkM3PXkKK0NPTkZJR19MSUJDUkMzMkM9eQorQ09ORklHX1pMSUJfSU5GTEFURT15CitDT05GSUdfWkxJQl9ERUZMQVRFPXkKK0NPTkZJR19MWk9fQ09NUFJFU1M9eQorQ09ORklHX0xaT19ERUNPTVBSRVNTPXkKK0NPTkZJR19QTElTVD15CitDT05GSUdfSEFTX0lPTUVNPXkKK0NPTkZJR19IQVNfSU9QT1JUPXkKK0NPTkZJR19IQVNfRE1BPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2VsZi5oIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vZWxmLmgKaW5kZXggNWJlMDE2OS4uYTU4Mzc4YyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vZWxmLmgKKysrIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vZWxmLmgKQEAgLTEwNyw2ICsxMDcsNiBAQAogI2RlZmluZSBFTEZfUExBVF9JTklUKF9yLCBsb2FkX2FkZHIpCShfciktPkFSTV9yMCA9IDAKIAogZXh0ZXJuIHZvaWQgZWxmX3NldF9wZXJzb25hbGl0eShjb25zdCBzdHJ1Y3QgZWxmMzJfaGRyICopOwotI2RlZmluZSBTRVRfUEVSU09OQUxJVFkoZXgsIGliY3MyKQllbGZfc2V0X3BlcnNvbmFsaXR5KCYoZXgpKQorI2RlZmluZSBTRVRfUEVSU09OQUxJVFkoZXgpCWVsZl9zZXRfcGVyc29uYWxpdHkoJihleCkpCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vc3RhdGZzLmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9zdGF0ZnMuaAppbmRleCBhMDJlNmE4Li4wNzk0NDdjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9zdGF0ZnMuaAorKysgYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9zdGF0ZnMuaApAQCAtMSw0MiArMSwxMiBAQAogI2lmbmRlZiBfQVNNQVJNX1NUQVRGU19ICiAjZGVmaW5lIF9BU01BUk1fU1RBVEZTX0gKIAotI2lmbmRlZiBfX0tFUk5FTF9TVFJJQ1RfTkFNRVMKLSMgaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLXR5cGVkZWYgX19rZXJuZWxfZnNpZF90CWZzaWRfdDsKLSNlbmRpZgotCi1zdHJ1Y3Qgc3RhdGZzIHsKLQlfX3UzMiBmX3R5cGU7Ci0JX191MzIgZl9ic2l6ZTsKLQlfX3UzMiBmX2Jsb2NrczsKLQlfX3UzMiBmX2JmcmVlOwotCV9fdTMyIGZfYmF2YWlsOwotCV9fdTMyIGZfZmlsZXM7Ci0JX191MzIgZl9mZnJlZTsKLQlfX2tlcm5lbF9mc2lkX3QgZl9mc2lkOwotCV9fdTMyIGZfbmFtZWxlbjsKLQlfX3UzMiBmX2Zyc2l6ZTsKLQlfX3UzMiBmX3NwYXJlWzVdOwotfTsKLQogLyoKICAqIFdpdGggRUFCSSB0aGVyZSBpcyA0IGJ5dGVzIG9mIHBhZGRpbmcgYWRkZWQgdG8gdGhpcyBzdHJ1Y3R1cmUuCiAgKiBMZXQncyBwYWNrIGl0IHNvIHRoZSBwYWRkaW5nIGdvZXMgYXdheSB0byBzaW1wbGlmeSBkdWFsIEFCSSBzdXBwb3J0LgogICogTm90ZSB0aGF0IHVzZXIgc3BhY2UgZG9lcyBOT1QgaGF2ZSB0byBwYWNrIHRoaXMgc3RydWN0dXJlLgogICovCi1zdHJ1Y3Qgc3RhdGZzNjQgewotCV9fdTMyIGZfdHlwZTsKLQlfX3UzMiBmX2JzaXplOwotCV9fdTY0IGZfYmxvY2tzOwotCV9fdTY0IGZfYmZyZWU7Ci0JX191NjQgZl9iYXZhaWw7Ci0JX191NjQgZl9maWxlczsKLQlfX3U2NCBmX2ZmcmVlOwotCV9fa2VybmVsX2ZzaWRfdCBmX2ZzaWQ7Ci0JX191MzIgZl9uYW1lbGVuOwotCV9fdTMyIGZfZnJzaXplOwotCV9fdTMyIGZfc3BhcmVbNV07Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQsYWxpZ25lZCg0KSkpOworI2RlZmluZSBBUkNIX1BBQ0tfU1RBVEZTNjQgX19hdHRyaWJ1dGVfXygocGFja2VkLGFsaWduZWQoNCkpKQogCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvc3RhdGZzLmg+CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC9kbWEuYyBiL2FyY2gvYXJtL2tlcm5lbC9kbWEuYwppbmRleCBiYTk5YTIwLi5kMDA2MDg1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9rZXJuZWwvZG1hLmMKKysrIGIvYXJjaC9hcm0va2VybmVsL2RtYS5jCkBAIC0yNiwyMyArMjYsNiBAQAogc3RhdGljIGRtYV90IGRtYV9jaGFuW01BWF9ETUFfQ0hBTk5FTFNdOwogCiAvKgotICogR2V0IGRtYSBsaXN0IGZvciAvcHJvYy9kbWEKLSAqLwotaW50IGdldF9kbWFfbGlzdChjaGFyICpidWYpCi17Ci0JZG1hX3QgKmRtYTsKLQljaGFyICpwID0gYnVmOwotCWludCBpOwotCi0JZm9yIChpID0gMCwgZG1hID0gZG1hX2NoYW47IGkgPCBNQVhfRE1BX0NIQU5ORUxTOyBpKyssIGRtYSsrKQotCQlpZiAoZG1hLT5sb2NrKQotCQkJcCArPSBzcHJpbnRmKHAsICIlMmQ6ICUxNHMgJXNcbiIsIGksCi0JCQkJICAgICBkbWEtPmRfb3BzLT50eXBlLCBkbWEtPmRldmljZV9pZCk7Ci0KLQlyZXR1cm4gcCAtIGJ1ZjsKLX0KLQotLyoKICAqIFJlcXVlc3QgRE1BIGNoYW5uZWwKICAqCiAgKiBPbiBjZXJ0YWluIHBsYXRmb3Jtcywgd2UgaGF2ZSB0byBhbGxvY2F0ZSBhbiBpbnRlcnJ1cHQgYXMgd2VsbC4uLgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1pbnRlZ3JhdG9yL2NwdS5jIGIvYXJjaC9hcm0vbWFjaC1pbnRlZ3JhdG9yL2NwdS5jCmluZGV4IGU0ZjcyZDIuLjQ0ZDRjMmUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaW50ZWdyYXRvci9jcHUuYworKysgYi9hcmNoL2FybS9tYWNoLWludGVncmF0b3IvY3B1LmMKQEAgLTE4NCw3ICsxODQsNiBAQAogewogCiAJLyogc2V0IGRlZmF1bHQgcG9saWN5IGFuZCBjcHVpbmZvICovCi0JcG9saWN5LT5nb3Zlcm5vciA9IENQVUZSRVFfREVGQVVMVF9HT1ZFUk5PUjsKIAlwb2xpY3ktPmNwdWluZm8ubWF4X2ZyZXEgPSAxNjAwMDA7CiAJcG9saWN5LT5jcHVpbmZvLm1pbl9mcmVxID0gMTIwMDA7CiAJcG9saWN5LT5jcHVpbmZvLnRyYW5zaXRpb25fbGF0ZW5jeSA9IDEwMDAwMDA7IC8qIDEgbXMsIGFzc3VtZWQgKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaXhwMjAwMC9peGRwMngwMC5jIGIvYXJjaC9hcm0vbWFjaC1peHAyMDAwL2l4ZHAyeDAwLmMKaW5kZXggYjA2NTNhOC4uMzA0NTEzMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1peHAyMDAwL2l4ZHAyeDAwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1peHAyMDAwL2l4ZHAyeDAwLmMKQEAgLTE0Myw3ICsxNDMsNyBAQAogCS51bm1hc2sJPSBpeGRwMngwMF9pcnFfdW5tYXNrCiB9OwogCi12b2lkIF9faW5pdCBpeGRwMngwMF9pbml0X2lycSh2b2xhdGlsZSB1bnNpZ25lZCBsb25nICpzdGF0X3JlZywgdm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqbWFza19yZWcsIHVuc2lnbmVkIGxvbmcgbnJfaXJxcykKK3ZvaWQgX19pbml0IGl4ZHAyeDAwX2luaXRfaXJxKHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKnN0YXRfcmVnLCB2b2xhdGlsZSB1bnNpZ25lZCBsb25nICptYXNrX3JlZywgdW5zaWduZWQgbG9uZyBucl9vZl9pcnFzKQogewogCXVuc2lnbmVkIGludCBpcnE7CiAKQEAgLTE1NCw3ICsxNTQsNyBAQAogCiAJYm9hcmRfaXJxX3N0YXQgPSBzdGF0X3JlZzsKIAlib2FyZF9pcnFfbWFzayA9IG1hc2tfcmVnOwotCWJvYXJkX2lycV9jb3VudCA9IG5yX2lycXM7CisJYm9hcmRfaXJxX2NvdW50ID0gbnJfb2ZfaXJxczsKIAogCSpib2FyZF9pcnFfbWFzayA9IDB4ZmZmZmZmZmY7CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtaDMuYyBiL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtaDMuYwppbmRleCAyY2VkNmQ5Li5hZGZjZDdiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLWgzLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1oMy5jCkBAIC00NzYsNiArNDc2LDEwIEBACiAJCUkyQ19CT0FSRF9JTkZPKCJ0cHM2NTAxMyIsIDB4NDgpLAogICAgICAgICAgICAgICAgLyogLmlycSAgICAgICAgID0gT01BUF9HUElPX0lSUSg/PyksICovCiAgICAgICAgfSwKKwl7CisJCUkyQ19CT0FSRF9JTkZPKCJpc3AxMzAxX29tYXAiLCAweDJkKSwKKwkJLmlycQkJPSBPTUFQX0dQSU9fSVJRKDE0KSwKKwl9LAogfTsKIAogc3RhdGljIHN0cnVjdCBvbWFwX2dwaW9fc3dpdGNoIGgzX2dwaW9fc3dpdGNoZXNbXSBfX2luaXRkYXRhID0gewpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9jbG9jay5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9jbG9jay5jCmluZGV4IDQ3OGMyYzkuLjVmYmEyMDcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDEvY2xvY2suYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2Nsb2NrLmMKQEAgLTIwMSw3ICsyMDEsNyBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAogCXBhcmVudCA9IGNsay0+cGFyZW50OwotCWlmICh1bmxpa2VseShwYXJlbnQgPT0gMCkpCisJaWYgKHVubGlrZWx5KHBhcmVudCA9PSBOVUxMKSkKIAkJcmV0dXJuIC1FSU87CiAKIAlyZWFscmF0ZSA9IHBhcmVudC0+cmF0ZTsKQEAgLTQ5OSw3ICs0OTksNyBAQAogCWlmIChjbGstPmZsYWdzICYgQUxXQVlTX0VOQUJMRUQpCiAJCXJldHVybiAwOwogCi0JaWYgKHVubGlrZWx5KGNsay0+ZW5hYmxlX3JlZyA9PSAwKSkgeworCWlmICh1bmxpa2VseShjbGstPmVuYWJsZV9yZWcgPT0gTlVMTCkpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJjbG9jay5jOiBFbmFibGUgZm9yICVzIHdpdGhvdXQgZW5hYmxlIGNvZGVcbiIsCiAJCSAgICAgICBjbGstPm5hbWUpOwogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTUzNSw3ICs1MzUsNyBAQAogCV9fdTE2IHJlZ3ZhbDE2OwogCV9fdTMyIHJlZ3ZhbDMyOwogCi0JaWYgKGNsay0+ZW5hYmxlX3JlZyA9PSAwKQorCWlmIChjbGstPmVuYWJsZV9yZWcgPT0gTlVMTCkKIAkJcmV0dXJuOwogCiAJaWYgKGNsay0+ZmxhZ3MgJiBFTkFCTEVfUkVHXzMyQklUKSB7CkBAIC01NzcsNyArNTc3LDcgQEAKIAkJcmV0dXJuIGNsay0+cGFyZW50LT5yYXRlIC8gKDEgPDwgZHNvcl9leHApOwogCX0KIAotCWlmKGNsay0+cm91bmRfcmF0ZSAhPSAwKQorCWlmIChjbGstPnJvdW5kX3JhdGUgIT0gTlVMTCkKIAkJcmV0dXJuIGNsay0+cm91bmRfcmF0ZShjbGssIHJhdGUpOwogCiAJcmV0dXJuIGNsay0+cmF0ZTsKQEAgLTYyNSw3ICs2MjUsNyBAQAogCiAJLyogQ2xvY2tzIGluIHRoZSBEU1AgZG9tYWluIG5lZWQgYXBpX2NrLiBKdXN0IGFzc3VtZSBib290bG9hZGVyCiAJICogaGFzIG5vdCBlbmFibGVkIGFueSBEU1AgY2xvY2tzICovCi0JaWYgKCh1MzIpY2xrLT5lbmFibGVfcmVnID09IERTUF9JRExFQ1QyKSB7CisJaWYgKGNsay0+ZW5hYmxlX3JlZyA9PSBEU1BfSURMRUNUMikgewogCQlwcmludGsoS0VSTl9JTkZPICJTa2lwcGluZyByZXNldCBjaGVjayBmb3IgRFNQIGRvbWFpbiAiCiAJCSAgICAgICAiY2xvY2sgXCIlc1wiXG4iLCBjbGstPm5hbWUpOwogCQlyZXR1cm47CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAxL2Nsb2NrLmggYi9hcmNoL2FybS9tYWNoLW9tYXAxL2Nsb2NrLmgKaW5kZXggNmVhZGY3Mi4uNTYzNWI1MSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9jbG9jay5oCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDEvY2xvY2suaApAQCAtMzI0LDcgKzMyNCw3IEBACiAJLnBhcmVudAkJPSAmY2tfZHBsbDEsCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzMTAgfCBDTE9DS19JTl9PTUFQMTUxMCB8IENMT0NLX0lOX09NQVAxNlhYIHwKIAkJCSAgUkFURV9DS0NUTCB8IFZJUlRVQUxfSU9fQUREUkVTUywKLQkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKilEU1BfSURMRUNUMiwKKwkuZW5hYmxlX3JlZwk9IERTUF9JRExFQ1QyLAogCS5lbmFibGVfYml0CT0gRU5fUEVSQ0ssCiAJLnJhdGVfb2Zmc2V0CT0gQ0tDVExfUEVSRElWX09GRlNFVCwKIAkucmVjYWxjCQk9ICZvbWFwMV9ja2N0bF9yZWNhbGNfZHNwX2RvbWFpbiwKQEAgLTMzOCw3ICszMzgsNyBAQAogCS5wYXJlbnQJCT0gJmNrX3JlZiwKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDMxMCB8IENMT0NLX0lOX09NQVAxNTEwIHwgQ0xPQ0tfSU5fT01BUDE2WFggfAogCQkJICBWSVJUVUFMX0lPX0FERFJFU1MsCi0JLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopRFNQX0lETEVDVDIsCisJLmVuYWJsZV9yZWcJPSBEU1BfSURMRUNUMiwKIAkuZW5hYmxlX2JpdAk9IEVOX1hPUlBDSywKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogCS5lbmFibGUJCT0gJm9tYXAxX2Nsa19lbmFibGVfZHNwX2RvbWFpbiwKQEAgLTM1MCw3ICszNTAsNyBAQAogCS5wYXJlbnQJCT0gJmNrX3JlZiwKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDMxMCB8IENMT0NLX0lOX09NQVAxNTEwIHwgQ0xPQ0tfSU5fT01BUDE2WFggfAogCQkJICBWSVJUVUFMX0lPX0FERFJFU1MsCi0JLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopRFNQX0lETEVDVDIsCisJLmVuYWJsZV9yZWcJPSBEU1BfSURMRUNUMiwKIAkuZW5hYmxlX2JpdAk9IEVOX0RTUFRJTUNLLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiAJLmVuYWJsZQkJPSAmb21hcDFfY2xrX2VuYWJsZV9kc3BfZG9tYWluLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9kZXZpY2VzLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2RldmljZXMuYwppbmRleCA5OTk4MmQzLi5lMzgyYjQzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAxL2RldmljZXMuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2RldmljZXMuYwpAQCAtMTAxLDcgKzEwMSw3IEBACiAKICNpZiBkZWZpbmVkKENPTkZJR19PTUFQX1NUSSkKIAotI2RlZmluZSBPTUFQMV9TVElfQkFTRQkJSU9fQUREUkVTUygweGZmZmVhMDAwKQorI2RlZmluZSBPTUFQMV9TVElfQkFTRQkJMHhmZmZlYTAwMAogI2RlZmluZSBPTUFQMV9TVElfQ0hBTk5FTF9CQVNFCShPTUFQMV9TVElfQkFTRSArIDB4NDAwKQogCiBzdGF0aWMgc3RydWN0IHJlc291cmNlIHN0aV9yZXNvdXJjZXNbXSA9IHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDEvbWNic3AuYyBiL2FyY2gvYXJtL21hY2gtb21hcDEvbWNic3AuYwppbmRleCAyYmFlYWViLi43ZGU3YzY5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAxL21jYnNwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9tY2JzcC5jCkBAIC0xMDMsMzAgKzEwMyw2IEBACiB7IH0KICNlbmRpZgogCi1zdGF0aWMgaW50IG9tYXAxX21jYnNwX2NoZWNrKHVuc2lnbmVkIGludCBpZCkKLXsKLQkvKiBSRVZJU0lUOiBDaGVjayBjb3JyZWN0bHkgZm9yIG51bWJlciBvZiByZWdpc3RlcmVkIE1jQlNQcyAqLwotCWlmIChjcHVfaXNfb21hcDczMCgpKSB7Ci0JCWlmIChpZCA+IE9NQVBfTUFYX01DQlNQX0NPVU5UIC0gMikgewotCQkgICAgICAgcHJpbnRrKEtFUk5fRVJSICJPTUFQLU1jQlNQOiBNY0JTUCVkIGRvZXNuJ3QgZXhpc3RcbiIsCi0JCQkJaWQgKyAxKTsKLQkJICAgICAgIHJldHVybiAtRU5PREVWOwotCQl9Ci0JCXJldHVybiAwOwotCX0KLQotCWlmIChjcHVfaXNfb21hcDE1eHgoKSB8fCBjcHVfaXNfb21hcDE2eHgoKSkgewotCQlpZiAoaWQgPiBPTUFQX01BWF9NQ0JTUF9DT1VOVCAtIDEpIHsKLQkJCXByaW50ayhLRVJOX0VSUiAiT01BUC1NY0JTUDogTWNCU1AlZCBkb2Vzbid0IGV4aXN0XG4iLAotCQkJCWlkICsgMSk7Ci0JCQlyZXR1cm4gLUVOT0RFVjsKLQkJfQotCQlyZXR1cm4gMDsKLQl9Ci0KLQlyZXR1cm4gLUVOT0RFVjsKLX0KLQogc3RhdGljIHZvaWQgb21hcDFfbWNic3BfcmVxdWVzdCh1bnNpZ25lZCBpbnQgaWQpCiB7CiAJLyoKQEAgLTE1MSw3ICsxMjcsNiBAQAogfQogCiBzdGF0aWMgc3RydWN0IG9tYXBfbWNic3Bfb3BzIG9tYXAxX21jYnNwX29wcyA9IHsKLQkuY2hlY2sJCT0gb21hcDFfbWNic3BfY2hlY2ssCiAJLnJlcXVlc3QJPSBvbWFwMV9tY2JzcF9yZXF1ZXN0LAogCS5mcmVlCQk9IG9tYXAxX21jYnNwX2ZyZWUsCiB9OwpAQCAtMTYwLDcgKzEzNSw2IEBACiBzdGF0aWMgc3RydWN0IG9tYXBfbWNic3BfcGxhdGZvcm1fZGF0YSBvbWFwNzMwX21jYnNwX3BkYXRhW10gPSB7CiAJewogCQkucGh5c19iYXNlCT0gT01BUDczMF9NQ0JTUDFfQkFTRSwKLQkJLnZpcnRfYmFzZQk9IGlvX3AydihPTUFQNzMwX01DQlNQMV9CQVNFKSwKIAkJLmRtYV9yeF9zeW5jCT0gT01BUF9ETUFfTUNCU1AxX1JYLAogCQkuZG1hX3R4X3N5bmMJPSBPTUFQX0RNQV9NQ0JTUDFfVFgsCiAJCS5yeF9pcnEJCT0gSU5UXzczMF9NY0JTUDFSWCwKQEAgLTE2OSw3ICsxNDMsNiBAQAogCX0sCiAJewogCQkucGh5c19iYXNlCT0gT01BUDczMF9NQ0JTUDJfQkFTRSwKLQkJLnZpcnRfYmFzZQk9IGlvX3AydihPTUFQNzMwX01DQlNQMl9CQVNFKSwKIAkJLmRtYV9yeF9zeW5jCT0gT01BUF9ETUFfTUNCU1AzX1JYLAogCQkuZG1hX3R4X3N5bmMJPSBPTUFQX0RNQV9NQ0JTUDNfVFgsCiAJCS5yeF9pcnEJCT0gSU5UXzczMF9NY0JTUDJSWCwKQEAgLTE4Nyw3ICsxNjAsNiBAQAogc3RhdGljIHN0cnVjdCBvbWFwX21jYnNwX3BsYXRmb3JtX2RhdGEgb21hcDE1eHhfbWNic3BfcGRhdGFbXSA9IHsKIAl7CiAJCS5waHlzX2Jhc2UJPSBPTUFQMTUxMF9NQ0JTUDFfQkFTRSwKLQkJLnZpcnRfYmFzZQk9IE9NQVAxNTEwX01DQlNQMV9CQVNFLAogCQkuZG1hX3J4X3N5bmMJPSBPTUFQX0RNQV9NQ0JTUDFfUlgsCiAJCS5kbWFfdHhfc3luYwk9IE9NQVBfRE1BX01DQlNQMV9UWCwKIAkJLnJ4X2lycQkJPSBJTlRfTWNCU1AxUlgsCkBAIC0xOTcsNyArMTY5LDYgQEAKIAkJfSwKIAl7CiAJCS5waHlzX2Jhc2UJPSBPTUFQMTUxMF9NQ0JTUDJfQkFTRSwKLQkJLnZpcnRfYmFzZQk9IGlvX3AydihPTUFQMTUxMF9NQ0JTUDJfQkFTRSksCiAJCS5kbWFfcnhfc3luYwk9IE9NQVBfRE1BX01DQlNQMl9SWCwKIAkJLmRtYV90eF9zeW5jCT0gT01BUF9ETUFfTUNCU1AyX1RYLAogCQkucnhfaXJxCQk9IElOVF8xNTEwX1NQSV9SWCwKQEAgLTIwNiw3ICsxNzcsNiBAQAogCX0sCiAJewogCQkucGh5c19iYXNlCT0gT01BUDE1MTBfTUNCU1AzX0JBU0UsCi0JCS52aXJ0X2Jhc2UJPSBPTUFQMTUxMF9NQ0JTUDNfQkFTRSwKIAkJLmRtYV9yeF9zeW5jCT0gT01BUF9ETUFfTUNCU1AzX1JYLAogCQkuZG1hX3R4X3N5bmMJPSBPTUFQX0RNQV9NQ0JTUDNfVFgsCiAJCS5yeF9pcnEJCT0gSU5UX01jQlNQM1JYLApAQCAtMjI1LDcgKzE5NSw2IEBACiBzdGF0aWMgc3RydWN0IG9tYXBfbWNic3BfcGxhdGZvcm1fZGF0YSBvbWFwMTZ4eF9tY2JzcF9wZGF0YVtdID0gewogCXsKIAkJLnBoeXNfYmFzZQk9IE9NQVAxNjEwX01DQlNQMV9CQVNFLAotCQkudmlydF9iYXNlCT0gT01BUDE2MTBfTUNCU1AxX0JBU0UsCiAJCS5kbWFfcnhfc3luYwk9IE9NQVBfRE1BX01DQlNQMV9SWCwKIAkJLmRtYV90eF9zeW5jCT0gT01BUF9ETUFfTUNCU1AxX1RYLAogCQkucnhfaXJxCQk9IElOVF9NY0JTUDFSWCwKQEAgLTIzNSw3ICsyMDQsNiBAQAogCX0sCiAJewogCQkucGh5c19iYXNlCT0gT01BUDE2MTBfTUNCU1AyX0JBU0UsCi0JCS52aXJ0X2Jhc2UJPSBpb19wMnYoT01BUDE2MTBfTUNCU1AyX0JBU0UpLAogCQkuZG1hX3J4X3N5bmMJPSBPTUFQX0RNQV9NQ0JTUDJfUlgsCiAJCS5kbWFfdHhfc3luYwk9IE9NQVBfRE1BX01DQlNQMl9UWCwKIAkJLnJ4X2lycQkJPSBJTlRfMTYxMF9NY0JTUDJfUlgsCkBAIC0yNDQsNyArMjEyLDYgQEAKIAl9LAogCXsKIAkJLnBoeXNfYmFzZQk9IE9NQVAxNjEwX01DQlNQM19CQVNFLAotCQkudmlydF9iYXNlCT0gT01BUDE2MTBfTUNCU1AzX0JBU0UsCiAJCS5kbWFfcnhfc3luYwk9IE9NQVBfRE1BX01DQlNQM19SWCwKIAkJLmRtYV90eF9zeW5jCT0gT01BUF9ETUFfTUNCU1AzX1RYLAogCQkucnhfaXJxCQk9IElOVF9NY0JTUDNSWCwKQEAgLTI3MSw2ICsyMzgsMTggQEAKIAl9CiAKIAlpZiAoY3B1X2lzX29tYXA3MzAoKSkKKwkJb21hcF9tY2JzcF9jb3VudCA9IE9NQVA3MzBfTUNCU1BfUERBVEFfU1o7CisJaWYgKGNwdV9pc19vbWFwMTV4eCgpKQorCQlvbWFwX21jYnNwX2NvdW50ID0gT01BUDE1WFhfTUNCU1BfUERBVEFfU1o7CisJaWYgKGNwdV9pc19vbWFwMTZ4eCgpKQorCQlvbWFwX21jYnNwX2NvdW50ID0gT01BUDE2WFhfTUNCU1BfUERBVEFfU1o7CisKKwltY2JzcF9wdHIgPSBremFsbG9jKG9tYXBfbWNic3BfY291bnQgKiBzaXplb2Yoc3RydWN0IG9tYXBfbWNic3AgKiksCisJCQkJCQkJCUdGUF9LRVJORUwpOworCWlmICghbWNic3BfcHRyKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWlmIChjcHVfaXNfb21hcDczMCgpKQogCQlvbWFwX21jYnNwX3JlZ2lzdGVyX2JvYXJkX2NmZyhvbWFwNzMwX21jYnNwX3BkYXRhLAogCQkJCQkJT01BUDczMF9NQ0JTUF9QREFUQV9TWik7CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDEvc2VyaWFsLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAxL3NlcmlhbC5jCmluZGV4IGFlZmM5NjcuLjUyODY5MWQ1YyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9zZXJpYWwuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAxL3NlcmlhbC5jCkBAIC02Nyw4ICs2Nyw4IEBACiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdF9zZXJpYWw4MjUwX3BvcnQgc2VyaWFsX3BsYXRmb3JtX2RhdGFbXSA9IHsKIAl7Ci0JCS5tZW1iYXNlCT0gKGNoYXIqKUlPX0FERFJFU1MoT01BUF9VQVJUMV9CQVNFKSwKLQkJLm1hcGJhc2UJPSAodW5zaWduZWQgbG9uZylPTUFQX1VBUlQxX0JBU0UsCisJCS5tZW1iYXNlCT0gSU9fQUREUkVTUyhPTUFQX1VBUlQxX0JBU0UpLAorCQkubWFwYmFzZQk9IE9NQVBfVUFSVDFfQkFTRSwKIAkJLmlycQkJPSBJTlRfVUFSVDEsCiAJCS5mbGFncwkJPSBVUEZfQk9PVF9BVVRPQ09ORiwKIAkJLmlvdHlwZQkJPSBVUElPX01FTSwKQEAgLTc2LDggKzc2LDggQEAKIAkJLnVhcnRjbGsJPSBPTUFQMTZYWF9CQVNFX0JBVUQgKiAxNiwKIAl9LAogCXsKLQkJLm1lbWJhc2UJPSAoY2hhciopSU9fQUREUkVTUyhPTUFQX1VBUlQyX0JBU0UpLAotCQkubWFwYmFzZQk9ICh1bnNpZ25lZCBsb25nKU9NQVBfVUFSVDJfQkFTRSwKKwkJLm1lbWJhc2UJPSBJT19BRERSRVNTKE9NQVBfVUFSVDJfQkFTRSksCisJCS5tYXBiYXNlCT0gT01BUF9VQVJUMl9CQVNFLAogCQkuaXJxCQk9IElOVF9VQVJUMiwKIAkJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GLAogCQkuaW90eXBlCQk9IFVQSU9fTUVNLApAQCAtODUsOCArODUsOCBAQAogCQkudWFydGNsawk9IE9NQVAxNlhYX0JBU0VfQkFVRCAqIDE2LAogCX0sCiAJewotCQkubWVtYmFzZQk9IChjaGFyKilJT19BRERSRVNTKE9NQVBfVUFSVDNfQkFTRSksCi0JCS5tYXBiYXNlCT0gKHVuc2lnbmVkIGxvbmcpT01BUF9VQVJUM19CQVNFLAorCQkubWVtYmFzZQk9IElPX0FERFJFU1MoT01BUF9VQVJUM19CQVNFKSwKKwkJLm1hcGJhc2UJPSBPTUFQX1VBUlQzX0JBU0UsCiAJCS5pcnEJCT0gSU5UX1VBUlQzLAogCQkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCiAJCS5pb3R5cGUJCT0gVVBJT19NRU0sCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL0tjb25maWcgYi9hcmNoL2FybS9tYWNoLW9tYXAyL0tjb25maWcKaW5kZXggNzA2OWM5ZC4uNDgzMmZjYyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9LY29uZmlnCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvS2NvbmZpZwpAQCAtMTUsOCArMTUsMTcgQEAKIAlib29sICJPTUFQMjQzMCBzdXBwb3J0IgogCWRlcGVuZHMgb24gQVJDSF9PTUFQMjRYWAogCitjb25maWcgQVJDSF9PTUFQMzRYWAorCWJvb2wgIk9NQVAzNHh4IEJhc2VkIFN5c3RlbSIKKwlkZXBlbmRzIG9uIEFSQ0hfT01BUDMKKworY29uZmlnIEFSQ0hfT01BUDM0MzAKKwlib29sICJPTUFQMzQzMCBzdXBwb3J0IgorCWRlcGVuZHMgb24gQVJDSF9PTUFQMyAmJiBBUkNIX09NQVAzNFhYCisJc2VsZWN0IEFSQ0hfT01BUF9PVEcKKwogY29tbWVudCAiT01BUCBCb2FyZCBUeXBlIgotCWRlcGVuZHMgb24gQVJDSF9PTUFQMgorCWRlcGVuZHMgb24gQVJDSF9PTUFQMiB8fCBBUkNIX09NQVAzCiAKIGNvbmZpZyBNQUNIX09NQVBfR0VORVJJQwogCWJvb2wgIkdlbmVyaWMgT01BUCBib2FyZCIKQEAgLTM1LDMgKzQ0LDE0IEBACiAJYm9vbCAiT01BUCAyNDMwIFNEUCBib2FyZCIKIAlkZXBlbmRzIG9uIEFSQ0hfT01BUDIgJiYgQVJDSF9PTUFQMjRYWAogCitjb25maWcgTUFDSF9PTUFQM19CRUFHTEUKKwlib29sICJPTUFQMyBCRUFHTEUgYm9hcmQiCisJZGVwZW5kcyBvbiBBUkNIX09NQVAzICYmIEFSQ0hfT01BUDM0WFgKKworY29uZmlnIE1BQ0hfT01BUF9MRFAKKwlib29sICJPTUFQMyBMRFAgYm9hcmQiCisJZGVwZW5kcyBvbiBBUkNIX09NQVAzICYmIEFSQ0hfT01BUDM0WFgKKworY29uZmlnIE1BQ0hfT1ZFUk8KKwlib29sICJHdW1zdGl4IE92ZXJvIGJvYXJkIgorCWRlcGVuZHMgb24gQVJDSF9PTUFQMyAmJiBBUkNIX09NQVAzNFhYCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL01ha2VmaWxlIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9NYWtlZmlsZQppbmRleCA5M2VlOTkwLi5jNjkzOTIzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL01ha2VmaWxlCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvTWFrZWZpbGUKQEAgLTQsMTYgKzQsMjEgQEAKIAogIyBDb21tb24gc3VwcG9ydAogb2JqLXkgOj0gaXJxLm8gaWQubyBpby5vIG1lbW9yeS5vIGNvbnRyb2wubyBwcmNtLm8gY2xvY2subyBtdXgubyBcCi0JCWRldmljZXMubyBzZXJpYWwubyBncG1jLm8gdGltZXItZ3AubworCQlkZXZpY2VzLm8gc2VyaWFsLm8gZ3BtYy5vIHRpbWVyLWdwLm8gcG93ZXJkb21haW4ubyBcCisJCWNsb2NrZG9tYWluLm8KIAogb2JqLSQoQ09ORklHX09NQVBfTUNCU1ApICs9IG1jYnNwLm8KIAogIyBGdW5jdGlvbnMgbG9hZGVkIHRvIFNSQU0KIG9iai0kKENPTkZJR19BUkNIX09NQVAyNDIwKQkJKz0gc3JhbTI0Mngubwogb2JqLSQoQ09ORklHX0FSQ0hfT01BUDI0MzApCQkrPSBzcmFtMjQzeC5vCitvYmotJChDT05GSUdfQVJDSF9PTUFQMykJCSs9IHNyYW0zNHh4Lm8KIAogIyBQb3dlciBNYW5hZ2VtZW50Ci1vYmotJChDT05GSUdfUE0pICs9IHBtLm8gc2xlZXAubworaWZlcSAoJChDT05GSUdfUE0pLHkpCitvYmoteQkJCQkJKz0gcG0ubworb2JqLSQoQ09ORklHX0FSQ0hfT01BUDI0WFgpCQkrPSBzbGVlcDI0eHgubworZW5kaWYKIAogIyBDbG9jayBmcmFtZXdvcmsKIG9iai0kKENPTkZJR19BUkNIX09NQVAyKQkJKz0gY2xvY2syNHh4Lm8KQEAgLTI0LDQgKzI5LDcgQEAKIG9iai0kKENPTkZJR19NQUNIX09NQVBfSDQpCQkrPSBib2FyZC1oNC5vCiBvYmotJChDT05GSUdfTUFDSF9PTUFQXzI0MzBTRFApCQkrPSBib2FyZC0yNDMwc2RwLm8KIG9iai0kKENPTkZJR19NQUNIX09NQVBfQVBPTExPTikJCSs9IGJvYXJkLWFwb2xsb24ubworb2JqLSQoQ09ORklHX01BQ0hfT01BUDNfQkVBR0xFKQkJKz0gYm9hcmQtb21hcDNiZWFnbGUubworb2JqLSQoQ09ORklHX01BQ0hfT01BUF9MRFApCQkrPSBib2FyZC1sZHAubworb2JqLSQoQ09ORklHX01BQ0hfT1ZFUk8pCQkrPSBib2FyZC1vdmVyby5vCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtaDQuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtaDQuYwppbmRleCBkNGUzYjZmLi4yZmVmMmM4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLWg0LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1oNC5jCkBAIC0xOCw2ICsxOCw3IEBACiAjaW5jbHVkZSA8bGludXgvbXRkL3BhcnRpdGlvbnMuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgogI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CiAjaW5jbHVkZSA8bGludXgvZXJyLmg+CiAjaW5jbHVkZSA8bGludXgvY2xrLmg+CkBAIC0zOTEsNiArMzkyLDEzIEBACiAJeyBPTUFQX1RBR19MQ0QsCQkmaDRfbGNkX2NvbmZpZyB9LAogfTsKIAorc3RhdGljIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyBfX2luaXRkYXRhIGg0X2kyY19ib2FyZF9pbmZvW10gPSB7CisJeworCQlJMkNfQk9BUkRfSU5GTygiaXNwMTMwMV9vbWFwIiwgMHgyZCksCisJCS5pcnEJCT0gT01BUF9HUElPX0lSUSgxMjUpLAorCX0sCit9OworCiBzdGF0aWMgdm9pZCBfX2luaXQgb21hcF9oNF9pbml0KHZvaWQpCiB7CiAJLyoKQEAgLTQxMSw2ICs0MTksOSBAQAogCX0KICNlbmRpZgogCisJaTJjX3JlZ2lzdGVyX2JvYXJkX2luZm8oMSwgaDRfaTJjX2JvYXJkX2luZm8sCisJCQlBUlJBWV9TSVpFKGg0X2kyY19ib2FyZF9pbmZvKSk7CisKIAlwbGF0Zm9ybV9hZGRfZGV2aWNlcyhoNF9kZXZpY2VzLCBBUlJBWV9TSVpFKGg0X2RldmljZXMpKTsKIAlvbWFwX2JvYXJkX2NvbmZpZyA9IGg0X2NvbmZpZzsKIAlvbWFwX2JvYXJkX2NvbmZpZ19zaXplID0gQVJSQVlfU0laRShoNF9jb25maWcpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1sZHAuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtbGRwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWVhNTk5ODYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLWxkcC5jCkBAIC0wLDAgKzEsODYgQEAKKy8qCisgKiBsaW51eC9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLWxkcC5jCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRleGFzIEluc3RydW1lbnRzIEluYy4KKyAqIE5pc2hhbnQgS2FtYXQgPG5za2FtYXRAdGkuY29tPgorICoKKyAqIE1vZGlmaWVkIGZyb20gbWFjaC1vbWFwMi9ib2FyZC0zNDMwc2RwLmMKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgorI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGkuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGkvYWRzNzg0Ni5oPgorCisjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgorCisjaW5jbHVkZSA8bWFjaC9ib2FyZC1sZHAuaD4KKyNpbmNsdWRlIDxtYWNoL21jc3BpLmg+CisjaW5jbHVkZSA8bWFjaC9ncGlvLmg+CisjaW5jbHVkZSA8bWFjaC9ib2FyZC5oPgorI2luY2x1ZGUgPG1hY2gvY29tbW9uLmg+CisjaW5jbHVkZSA8bWFjaC9ncG1jLmg+CisKKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vZGVsYXkuaD4KKyNpbmNsdWRlIDxtYWNoL2NvbnRyb2wuaD4KKworc3RhdGljIHZvaWQgX19pbml0IG9tYXBfbGRwX2luaXRfaXJxKHZvaWQpCit7CisJb21hcDJfaW5pdF9jb21tb25faHcoKTsKKwlvbWFwX2luaXRfaXJxKCk7CisJb21hcF9ncGlvX2luaXQoKTsKK30KKworc3RhdGljIHN0cnVjdCBvbWFwX3VhcnRfY29uZmlnIGxkcF91YXJ0X2NvbmZpZyBfX2luaXRkYXRhID0geworCS5lbmFibGVkX3VhcnRzCT0gKCgxIDw8IDApIHwgKDEgPDwgMSkgfCAoMSA8PCAyKSksCit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfYm9hcmRfY29uZmlnX2tlcm5lbCBsZHBfY29uZmlnW10gX19pbml0ZGF0YSA9IHsKKwl7IE9NQVBfVEFHX1VBUlQsCSZsZHBfdWFydF9jb25maWcgfSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IG9tYXBfaTJjX2luaXQodm9pZCkKK3sKKwlvbWFwX3JlZ2lzdGVyX2kyY19idXMoMSwgMjYwMCwgTlVMTCwgMCk7CisJb21hcF9yZWdpc3Rlcl9pMmNfYnVzKDIsIDQwMCwgTlVMTCwgMCk7CisJb21hcF9yZWdpc3Rlcl9pMmNfYnVzKDMsIDQwMCwgTlVMTCwgMCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCBvbWFwX2xkcF9pbml0KHZvaWQpCit7CisJb21hcF9pMmNfaW5pdCgpOworCW9tYXBfYm9hcmRfY29uZmlnID0gbGRwX2NvbmZpZzsKKwlvbWFwX2JvYXJkX2NvbmZpZ19zaXplID0gQVJSQVlfU0laRShsZHBfY29uZmlnKTsKKwlvbWFwX3NlcmlhbF9pbml0KCk7Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCBvbWFwX2xkcF9tYXBfaW8odm9pZCkKK3sKKwlvbWFwMl9zZXRfZ2xvYmFsc18zNDN4KCk7CisJb21hcDJfbWFwX2NvbW1vbl9pbygpOworfQorCitNQUNISU5FX1NUQVJUKE9NQVBfTERQLCAiT01BUCBMRFAgYm9hcmQiKQorCS5waHlzX2lvCT0gMHg0ODAwMDAwMCwKKwkuaW9fcGdfb2Zmc3QJPSAoKDB4ZDgwMDAwMDApID4+IDE4KSAmIDB4ZmZmYywKKwkuYm9vdF9wYXJhbXMJPSAweDgwMDAwMTAwLAorCS5tYXBfaW8JCT0gb21hcF9sZHBfbWFwX2lvLAorCS5pbml0X2lycQk9IG9tYXBfbGRwX2luaXRfaXJxLAorCS5pbml0X21hY2hpbmUJPSBvbWFwX2xkcF9pbml0LAorCS50aW1lcgkJPSAmb21hcF90aW1lciwKK01BQ0hJTkVfRU5ECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLW9tYXAzYmVhZ2xlLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLW9tYXAzYmVhZ2xlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmFhNzk2NwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtb21hcDNiZWFnbGUuYwpAQCAtMCwwICsxLDI0NCBAQAorLyoKKyAqIGxpbnV4L2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtb21hcDNiZWFnbGUuYworICoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUZXhhcyBJbnN0cnVtZW50cworICoKKyAqIE1vZGlmaWVkIGZyb20gbWFjaC1vbWFwMi9ib2FyZC0zNDMwc2RwLmMKKyAqCisgKiBJbml0aWFsIGNvZGU6IFN5ZWQgTW9oYW1tZWQgS2hhc2ltCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9sZWRzLmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgorI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpb19rZXlzLmg+CisKKyNpbmNsdWRlIDxsaW51eC9tdGQvbXRkLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL3BhcnRpdGlvbnMuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvbmFuZC5oPgorCisjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL2ZsYXNoLmg+CisKKyNpbmNsdWRlIDxtYWNoL2JvYXJkLmg+CisjaW5jbHVkZSA8bWFjaC9jb21tb24uaD4KKyNpbmNsdWRlIDxtYWNoL2dwbWMuaD4KKyNpbmNsdWRlIDxtYWNoL25hbmQuaD4KKworCisjZGVmaW5lIEdQTUNfQ1MwX0JBU0UgIDB4NjAKKyNkZWZpbmUgR1BNQ19DU19TSVpFICAgMHgzMAorCisjZGVmaW5lIE5BTkRfQkxPQ0tfU0laRQkJU1pfMTI4SworCitzdGF0aWMgc3RydWN0IG10ZF9wYXJ0aXRpb24gb21hcDNiZWFnbGVfbmFuZF9wYXJ0aXRpb25zW10gPSB7CisJLyogQWxsIHRoZSBwYXJ0aXRpb24gc2l6ZXMgYXJlIGxpc3RlZCBpbiB0ZXJtcyBvZiBOQU5EIGJsb2NrIHNpemUgKi8KKwl7CisJCS5uYW1lCQk9ICJYLUxvYWRlciIsCisJCS5vZmZzZXQJCT0gMCwKKwkJLnNpemUJCT0gNCAqIE5BTkRfQkxPQ0tfU0laRSwKKwkJLm1hc2tfZmxhZ3MJPSBNVERfV1JJVEVBQkxFLAkvKiBmb3JjZSByZWFkLW9ubHkgKi8KKwl9LAorCXsKKwkJLm5hbWUJCT0gIlUtQm9vdCIsCisJCS5vZmZzZXQJCT0gTVREUEFSVF9PRlNfQVBQRU5ELAkvKiBPZmZzZXQgPSAweDgwMDAwICovCisJCS5zaXplCQk9IDE1ICogTkFORF9CTE9DS19TSVpFLAorCQkubWFza19mbGFncwk9IE1URF9XUklURUFCTEUsCS8qIGZvcmNlIHJlYWQtb25seSAqLworCX0sCisJeworCQkubmFtZQkJPSAiVS1Cb290IEVudiIsCisJCS5vZmZzZXQJCT0gTVREUEFSVF9PRlNfQVBQRU5ELAkvKiBPZmZzZXQgPSAweDI2MDAwMCAqLworCQkuc2l6ZQkJPSAxICogTkFORF9CTE9DS19TSVpFLAorCX0sCisJeworCQkubmFtZQkJPSAiS2VybmVsIiwKKwkJLm9mZnNldAkJPSBNVERQQVJUX09GU19BUFBFTkQsCS8qIE9mZnNldCA9IDB4MjgwMDAwICovCisJCS5zaXplCQk9IDMyICogTkFORF9CTE9DS19TSVpFLAorCX0sCisJeworCQkubmFtZQkJPSAiRmlsZSBTeXN0ZW0iLAorCQkub2Zmc2V0CQk9IE1URFBBUlRfT0ZTX0FQUEVORCwJLyogT2Zmc2V0ID0gMHg2ODAwMDAgKi8KKwkJLnNpemUJCT0gTVREUEFSVF9TSVpfRlVMTCwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX25hbmRfcGxhdGZvcm1fZGF0YSBvbWFwM2JlYWdsZV9uYW5kX2RhdGEgPSB7CisJLm9wdGlvbnMJPSBOQU5EX0JVU1dJRFRIXzE2LAorCS5wYXJ0cwkJPSBvbWFwM2JlYWdsZV9uYW5kX3BhcnRpdGlvbnMsCisJLm5yX3BhcnRzCT0gQVJSQVlfU0laRShvbWFwM2JlYWdsZV9uYW5kX3BhcnRpdGlvbnMpLAorCS5kbWFfY2hhbm5lbAk9IC0xLAkJLyogZGlzYWJsZSBETUEgaW4gT01BUCBOQU5EIGRyaXZlciAqLworCS5uYW5kX3NldHVwCT0gTlVMTCwKKwkuZGV2X3JlYWR5CT0gTlVMTCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugb21hcDNiZWFnbGVfbmFuZF9yZXNvdXJjZSA9IHsKKwkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9NRU0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBvbWFwM2JlYWdsZV9uYW5kX2RldmljZSA9IHsKKwkubmFtZQkJPSAib21hcDItbmFuZCIsCisJLmlkCQk9IC0xLAorCS5kZXYJCT0geworCQkucGxhdGZvcm1fZGF0YQk9ICZvbWFwM2JlYWdsZV9uYW5kX2RhdGEsCisJfSwKKwkubnVtX3Jlc291cmNlcwk9IDEsCisJLnJlc291cmNlCT0gJm9tYXAzYmVhZ2xlX25hbmRfcmVzb3VyY2UsCit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfdWFydF9jb25maWcgb21hcDNfYmVhZ2xlX3VhcnRfY29uZmlnIF9faW5pdGRhdGEgPSB7CisJLmVuYWJsZWRfdWFydHMJPSAoKDEgPDwgMCkgfCAoMSA8PCAxKSB8ICgxIDw8IDIpKSwKK307CisKK3N0YXRpYyB2b2lkIF9faW5pdCBvbWFwM19iZWFnbGVfaW5pdF9pcnEodm9pZCkKK3sKKwlvbWFwMl9pbml0X2NvbW1vbl9odygpOworCW9tYXBfaW5pdF9pcnEoKTsKKwlvbWFwX2dwaW9faW5pdCgpOworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBvbWFwM19iZWFnbGVfbGNkX2RldmljZSA9IHsKKwkubmFtZQkJPSAib21hcDNiZWFnbGVfbGNkIiwKKwkuaWQJCT0gLTEsCit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfbGNkX2NvbmZpZyBvbWFwM19iZWFnbGVfbGNkX2NvbmZpZyBfX2luaXRkYXRhID0geworCS5jdHJsX25hbWUJPSAiaW50ZXJuYWwiLAorfTsKKworc3RhdGljIHN0cnVjdCBncGlvX2xlZCBncGlvX2xlZHNbXSA9IHsKKwl7CisJCS5uYW1lCQkJPSAiYmVhZ2xlYm9hcmQ6OnVzcjAiLAorCQkuZGVmYXVsdF90cmlnZ2VyCT0gImhlYXJ0YmVhdCIsCisJCS5ncGlvCQkJPSAxNTAsCisJfSwKKwl7CisJCS5uYW1lCQkJPSAiYmVhZ2xlYm9hcmQ6OnVzcjEiLAorCQkuZGVmYXVsdF90cmlnZ2VyCT0gIm1tYzAiLAorCQkuZ3BpbwkJCT0gMTQ5LAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IGdwaW9fbGVkX3BsYXRmb3JtX2RhdGEgZ3Bpb19sZWRfaW5mbyA9IHsKKwkubGVkcwkJPSBncGlvX2xlZHMsCisJLm51bV9sZWRzCT0gQVJSQVlfU0laRShncGlvX2xlZHMpLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbGVkc19ncGlvID0geworCS5uYW1lCT0gImxlZHMtZ3BpbyIsCisJLmlkCT0gLTEsCisJLmRldgk9IHsKKwkJLnBsYXRmb3JtX2RhdGEJPSAmZ3Bpb19sZWRfaW5mbywKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBncGlvX2tleXNfYnV0dG9uIGdwaW9fYnV0dG9uc1tdID0geworCXsKKwkJLmNvZGUJCQk9IEJUTl9FWFRSQSwKKwkJLmdwaW8JCQk9IDcsCisJCS5kZXNjCQkJPSAidXNlciIsCisJCS53YWtldXAJCQk9IDEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgZ3Bpb19rZXlzX3BsYXRmb3JtX2RhdGEgZ3Bpb19rZXlfaW5mbyA9IHsKKwkuYnV0dG9ucwk9IGdwaW9fYnV0dG9ucywKKwkubmJ1dHRvbnMJPSBBUlJBWV9TSVpFKGdwaW9fYnV0dG9ucyksCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBrZXlzX2dwaW8gPSB7CisJLm5hbWUJPSAiZ3Bpby1rZXlzIiwKKwkuaWQJPSAtMSwKKwkuZGV2CT0geworCQkucGxhdGZvcm1fZGF0YQk9ICZncGlvX2tleV9pbmZvLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfYm9hcmRfY29uZmlnX2tlcm5lbCBvbWFwM19iZWFnbGVfY29uZmlnW10gX19pbml0ZGF0YSA9IHsKKwl7IE9NQVBfVEFHX1VBUlQsCSZvbWFwM19iZWFnbGVfdWFydF9jb25maWcgfSwKKwl7IE9NQVBfVEFHX0xDRCwJCSZvbWFwM19iZWFnbGVfbGNkX2NvbmZpZyB9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm9tYXAzX2JlYWdsZV9kZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKKwkmb21hcDNfYmVhZ2xlX2xjZF9kZXZpY2UsCisJJmxlZHNfZ3BpbywKKwkma2V5c19ncGlvLAorfTsKKworc3RhdGljIHZvaWQgX19pbml0IG9tYXAzYmVhZ2xlX2ZsYXNoX2luaXQodm9pZCkKK3sKKwl1OCBjcyA9IDA7CisJdTggbmFuZGNzID0gR1BNQ19DU19OVU0gKyAxOworCisJdTMyIGdwbWNfYmFzZV9hZGQgPSBPTUFQMzRYWF9HUE1DX1ZJUlQ7CisKKwkvKiBmaW5kIG91dCB0aGUgY2hpcC1zZWxlY3Qgb24gd2hpY2ggTkFORCBleGlzdHMgKi8KKwl3aGlsZSAoY3MgPCBHUE1DX0NTX05VTSkgeworCQl1MzIgcmV0ID0gMDsKKwkJcmV0ID0gZ3BtY19jc19yZWFkX3JlZyhjcywgR1BNQ19DU19DT05GSUcxKTsKKworCQlpZiAoKHJldCAmIDB4QzAwKSA9PSAweDgwMCkgeworCQkJcHJpbnRrKEtFUk5fSU5GTyAiRm91bmQgTkFORCBvbiBDUyVkXG4iLCBjcyk7CisJCQlpZiAobmFuZGNzID4gR1BNQ19DU19OVU0pCisJCQkJbmFuZGNzID0gY3M7CisJCX0KKwkJY3MrKzsKKwl9CisKKwlpZiAobmFuZGNzID4gR1BNQ19DU19OVU0pIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiTkFORDogVW5hYmxlIHRvIGZpbmQgY29uZmlndXJhdGlvbiAiCisJCQkJICJpbiBHUE1DXG4gIik7CisJCXJldHVybjsKKwl9CisKKwlpZiAobmFuZGNzIDwgR1BNQ19DU19OVU0pIHsKKwkJb21hcDNiZWFnbGVfbmFuZF9kYXRhLmNzID0gbmFuZGNzOworCQlvbWFwM2JlYWdsZV9uYW5kX2RhdGEuZ3BtY19jc19iYXNlYWRkciA9ICh2b2lkICopCisJCQkoZ3BtY19iYXNlX2FkZCArIEdQTUNfQ1MwX0JBU0UgKyBuYW5kY3MgKiBHUE1DX0NTX1NJWkUpOworCQlvbWFwM2JlYWdsZV9uYW5kX2RhdGEuZ3BtY19iYXNlYWRkciA9ICh2b2lkICopIChncG1jX2Jhc2VfYWRkKTsKKworCQlwcmludGsoS0VSTl9JTkZPICJSZWdpc3RlcmluZyBOQU5EIG9uIENTJWRcbiIsIG5hbmRjcyk7CisJCWlmIChwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJm9tYXAzYmVhZ2xlX25hbmRfZGV2aWNlKSA8IDApCisJCQlwcmludGsoS0VSTl9FUlIgIlVuYWJsZSB0byByZWdpc3RlciBOQU5EIGRldmljZVxuIik7CisJfQorfQorCitzdGF0aWMgdm9pZCBfX2luaXQgb21hcDNfYmVhZ2xlX2luaXQodm9pZCkKK3sKKwlwbGF0Zm9ybV9hZGRfZGV2aWNlcyhvbWFwM19iZWFnbGVfZGV2aWNlcywKKwkJCUFSUkFZX1NJWkUob21hcDNfYmVhZ2xlX2RldmljZXMpKTsKKwlvbWFwX2JvYXJkX2NvbmZpZyA9IG9tYXAzX2JlYWdsZV9jb25maWc7CisJb21hcF9ib2FyZF9jb25maWdfc2l6ZSA9IEFSUkFZX1NJWkUob21hcDNfYmVhZ2xlX2NvbmZpZyk7CisJb21hcF9zZXJpYWxfaW5pdCgpOworCW9tYXAzYmVhZ2xlX2ZsYXNoX2luaXQoKTsKK30KKworc3RhdGljIHZvaWQgX19pbml0IG9tYXAzX2JlYWdsZV9tYXBfaW8odm9pZCkKK3sKKwlvbWFwMl9zZXRfZ2xvYmFsc18zNDN4KCk7CisJb21hcDJfbWFwX2NvbW1vbl9pbygpOworfQorCitNQUNISU5FX1NUQVJUKE9NQVAzX0JFQUdMRSwgIk9NQVAzIEJlYWdsZSBCb2FyZCIpCisJLyogTWFpbnRhaW5lcjogU3llZCBNb2hhbW1lZCBLaGFzaW0gLSBodHRwOi8vYmVhZ2xlYm9hcmQub3JnICovCisJLnBoeXNfaW8JPSAweDQ4MDAwMDAwLAorCS5pb19wZ19vZmZzdAk9ICgoMHhkODAwMDAwMCkgPj4gMTgpICYgMHhmZmZjLAorCS5ib290X3BhcmFtcwk9IDB4ODAwMDAxMDAsCisJLm1hcF9pbwkJPSBvbWFwM19iZWFnbGVfbWFwX2lvLAorCS5pbml0X2lycQk9IG9tYXAzX2JlYWdsZV9pbml0X2lycSwKKwkuaW5pdF9tYWNoaW5lCT0gb21hcDNfYmVhZ2xlX2luaXQsCisJLnRpbWVyCQk9ICZvbWFwX3RpbWVyLAorTUFDSElORV9FTkQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtb3Zlcm8uYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtb3Zlcm8uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMDlhYTU5Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1vdmVyby5jCkBAIC0wLDAgKzEsMjQyIEBACisvKgorICogYm9hcmQtb3Zlcm8uYyAoR3Vtc3RpeCBPdmVybykKKyAqCisgKiBJbml0aWFsIGNvZGU6IFN0ZXZlIFNha29tYW4gPHN0ZXZlQHNha29tYW4uY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQQorICogMDIxMTAtMTMwMSBVU0EKKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisKKyNpbmNsdWRlIDxsaW51eC9tdGQvbXRkLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL25hbmQuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvcGFydGl0aW9ucy5oPgorCisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvZmxhc2guaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KKworI2luY2x1ZGUgPG1hY2gvYm9hcmQtb3Zlcm8uaD4KKyNpbmNsdWRlIDxtYWNoL2JvYXJkLmg+CisjaW5jbHVkZSA8bWFjaC9jb21tb24uaD4KKyNpbmNsdWRlIDxtYWNoL2dwaW8uaD4KKyNpbmNsdWRlIDxtYWNoL2dwbWMuaD4KKyNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8bWFjaC9uYW5kLmg+CisKKyNkZWZpbmUgTkFORF9CTE9DS19TSVpFIFNaXzEyOEsKKyNkZWZpbmUgR1BNQ19DUzBfQkFTRSAgMHg2MAorI2RlZmluZSBHUE1DX0NTX1NJWkUgICAweDMwCisKK3N0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiBvdmVyb19uYW5kX3BhcnRpdGlvbnNbXSA9IHsKKwl7CisJCS5uYW1lICAgICAgICAgICA9ICJ4bG9hZGVyIiwKKwkJLm9mZnNldCAgICAgICAgID0gMCwJCQkvKiBPZmZzZXQgPSAweDAwMDAwICovCisJCS5zaXplICAgICAgICAgICA9IDQgKiBOQU5EX0JMT0NLX1NJWkUsCisJCS5tYXNrX2ZsYWdzICAgICA9IE1URF9XUklURUFCTEUKKwl9LAorCXsKKwkJLm5hbWUgICAgICAgICAgID0gInVib290IiwKKwkJLm9mZnNldCAgICAgICAgID0gTVREUEFSVF9PRlNfQVBQRU5ELAkvKiBPZmZzZXQgPSAweDgwMDAwICovCisJCS5zaXplICAgICAgICAgICA9IDE0ICogTkFORF9CTE9DS19TSVpFLAorCX0sCisJeworCQkubmFtZSAgICAgICAgICAgPSAidWJvb3QgZW52aXJvbm1lbnQiLAorCQkub2Zmc2V0ICAgICAgICAgPSBNVERQQVJUX09GU19BUFBFTkQsCS8qIE9mZnNldCA9IDB4MjQwMDAwICovCisJCS5zaXplICAgICAgICAgICA9IDIgKiBOQU5EX0JMT0NLX1NJWkUsCisJfSwKKwl7CisJCS5uYW1lICAgICAgICAgICA9ICJsaW51eCIsCisJCS5vZmZzZXQgICAgICAgICA9IE1URFBBUlRfT0ZTX0FQUEVORCwJLyogT2Zmc2V0ID0gMHgyODAwMDAgKi8KKwkJLnNpemUgICAgICAgICAgID0gMzIgKiBOQU5EX0JMT0NLX1NJWkUsCisJfSwKKwl7CisJCS5uYW1lICAgICAgICAgICA9ICJyb290ZnMiLAorCQkub2Zmc2V0ICAgICAgICAgPSBNVERQQVJUX09GU19BUFBFTkQsCS8qIE9mZnNldCA9IDB4NjgwMDAwICovCisJCS5zaXplICAgICAgICAgICA9IE1URFBBUlRfU0laX0ZVTEwsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9uYW5kX3BsYXRmb3JtX2RhdGEgb3Zlcm9fbmFuZF9kYXRhID0geworCS5wYXJ0cyA9IG92ZXJvX25hbmRfcGFydGl0aW9ucywKKwkubnJfcGFydHMgPSBBUlJBWV9TSVpFKG92ZXJvX25hbmRfcGFydGl0aW9ucyksCisJLmRtYV9jaGFubmVsID0gLTEsCS8qIGRpc2FibGUgRE1BIGluIE9NQVAgTkFORCBkcml2ZXIgKi8KK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugb3Zlcm9fbmFuZF9yZXNvdXJjZSA9IHsKKwkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9NRU0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBvdmVyb19uYW5kX2RldmljZSA9IHsKKwkubmFtZQkJPSAib21hcDItbmFuZCIsCisJLmlkCQk9IC0xLAorCS5kZXYJCT0geworCQkucGxhdGZvcm1fZGF0YQk9ICZvdmVyb19uYW5kX2RhdGEsCisJfSwKKwkubnVtX3Jlc291cmNlcwk9IDEsCisJLnJlc291cmNlCT0gJm92ZXJvX25hbmRfcmVzb3VyY2UsCit9OworCisKK3N0YXRpYyB2b2lkIF9faW5pdCBvdmVyb19mbGFzaF9pbml0KHZvaWQpCit7CisJdTggY3MgPSAwOworCXU4IG5hbmRjcyA9IEdQTUNfQ1NfTlVNICsgMTsKKworCXUzMiBncG1jX2Jhc2VfYWRkID0gT01BUDM0WFhfR1BNQ19WSVJUOworCisJLyogZmluZCBvdXQgdGhlIGNoaXAtc2VsZWN0IG9uIHdoaWNoIE5BTkQgZXhpc3RzICovCisJd2hpbGUgKGNzIDwgR1BNQ19DU19OVU0pIHsKKwkJdTMyIHJldCA9IDA7CisJCXJldCA9IGdwbWNfY3NfcmVhZF9yZWcoY3MsIEdQTUNfQ1NfQ09ORklHMSk7CisKKwkJaWYgKChyZXQgJiAweEMwMCkgPT0gMHg4MDApIHsKKwkJCXByaW50ayhLRVJOX0lORk8gIkZvdW5kIE5BTkQgb24gQ1MlZFxuIiwgY3MpOworCQkJaWYgKG5hbmRjcyA+IEdQTUNfQ1NfTlVNKQorCQkJCW5hbmRjcyA9IGNzOworCQl9CisJCWNzKys7CisJfQorCisJaWYgKG5hbmRjcyA+IEdQTUNfQ1NfTlVNKSB7CisJCXByaW50ayhLRVJOX0lORk8gIk5BTkQ6IFVuYWJsZSB0byBmaW5kIGNvbmZpZ3VyYXRpb24gIgorCQkJCSAiaW4gR1BNQ1xuICIpOworCQlyZXR1cm47CisJfQorCisJaWYgKG5hbmRjcyA8IEdQTUNfQ1NfTlVNKSB7CisJCW92ZXJvX25hbmRfZGF0YS5jcyA9IG5hbmRjczsKKwkJb3Zlcm9fbmFuZF9kYXRhLmdwbWNfY3NfYmFzZWFkZHIgPSAodm9pZCAqKQorCQkJKGdwbWNfYmFzZV9hZGQgKyBHUE1DX0NTMF9CQVNFICsgbmFuZGNzICogR1BNQ19DU19TSVpFKTsKKwkJb3Zlcm9fbmFuZF9kYXRhLmdwbWNfYmFzZWFkZHIgPSAodm9pZCAqKSAoZ3BtY19iYXNlX2FkZCk7CisKKwkJcHJpbnRrKEtFUk5fSU5GTyAiUmVnaXN0ZXJpbmcgTkFORCBvbiBDUyVkXG4iLCBuYW5kY3MpOworCQlpZiAocGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZvdmVyb19uYW5kX2RldmljZSkgPCAwKQorCQkJcHJpbnRrKEtFUk5fRVJSICJVbmFibGUgdG8gcmVnaXN0ZXIgTkFORCBkZXZpY2VcbiIpOworCX0KK30KK3N0YXRpYyBzdHJ1Y3Qgb21hcF91YXJ0X2NvbmZpZyBvdmVyb191YXJ0X2NvbmZpZyBfX2luaXRkYXRhID0geworCS5lbmFibGVkX3VhcnRzCT0gKCgxIDw8IDApIHwgKDEgPDwgMSkgfCAoMSA8PCAyKSksCit9OworCitzdGF0aWMgaW50IF9faW5pdCBvdmVyb19pMmNfaW5pdCh2b2lkKQoreworCS8qIGkyYzIgcGlucyBhcmUgdXNlZCBmb3IgZ3BpbyAqLworCW9tYXBfcmVnaXN0ZXJfaTJjX2J1cygzLCA0MDAsIE5VTEwsIDApOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBfX2luaXQgb3Zlcm9faW5pdF9pcnEodm9pZCkKK3sKKwlvbWFwMl9pbml0X2NvbW1vbl9odygpOworCW9tYXBfaW5pdF9pcnEoKTsKKwlvbWFwX2dwaW9faW5pdCgpOworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBvdmVyb19sY2RfZGV2aWNlID0geworCS5uYW1lCQk9ICJvdmVyb19sY2QiLAorCS5pZAkJPSAtMSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9sY2RfY29uZmlnIG92ZXJvX2xjZF9jb25maWcgX19pbml0ZGF0YSA9IHsKKwkuY3RybF9uYW1lCT0gImludGVybmFsIiwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9ib2FyZF9jb25maWdfa2VybmVsIG92ZXJvX2NvbmZpZ1tdIF9faW5pdGRhdGEgPSB7CisJeyBPTUFQX1RBR19VQVJULAkmb3Zlcm9fdWFydF9jb25maWcgfSwKKwl7IE9NQVBfVEFHX0xDRCwJCSZvdmVyb19sY2RfY29uZmlnIH0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqb3Zlcm9fZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7CisJJm92ZXJvX2xjZF9kZXZpY2UsCit9OworCitzdGF0aWMgdm9pZCBfX2luaXQgb3Zlcm9faW5pdCh2b2lkKQoreworCW92ZXJvX2kyY19pbml0KCk7CisJcGxhdGZvcm1fYWRkX2RldmljZXMob3Zlcm9fZGV2aWNlcywgQVJSQVlfU0laRShvdmVyb19kZXZpY2VzKSk7CisJb21hcF9ib2FyZF9jb25maWcgPSBvdmVyb19jb25maWc7CisJb21hcF9ib2FyZF9jb25maWdfc2l6ZSA9IEFSUkFZX1NJWkUob3Zlcm9fY29uZmlnKTsKKwlvbWFwX3NlcmlhbF9pbml0KCk7CisJb3Zlcm9fZmxhc2hfaW5pdCgpOworCisJaWYgKChncGlvX3JlcXVlc3QoT1ZFUk9fR1BJT19XMldfTlJFU0VULAorCQkJICAiT1ZFUk9fR1BJT19XMldfTlJFU0VUIikgPT0gMCkgJiYKKwkgICAgKGdwaW9fZGlyZWN0aW9uX291dHB1dChPVkVST19HUElPX1cyV19OUkVTRVQsIDEpID09IDApKSB7CisJCWdwaW9fZXhwb3J0KE9WRVJPX0dQSU9fVzJXX05SRVNFVCwgMCk7CisJCWdwaW9fc2V0X3ZhbHVlKE9WRVJPX0dQSU9fVzJXX05SRVNFVCwgMCk7CisJCXVkZWxheSgxMCk7CisJCWdwaW9fc2V0X3ZhbHVlKE9WRVJPX0dQSU9fVzJXX05SRVNFVCwgMSk7CisJfSBlbHNlIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJjb3VsZCBub3Qgb2J0YWluIGdwaW8gZm9yICIKKwkJCQkJIk9WRVJPX0dQSU9fVzJXX05SRVNFVFxuIik7CisJfQorCisJaWYgKChncGlvX3JlcXVlc3QoT1ZFUk9fR1BJT19CVF9YR0FURSwgIk9WRVJPX0dQSU9fQlRfWEdBVEUiKSA9PSAwKSAmJgorCSAgICAoZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KE9WRVJPX0dQSU9fQlRfWEdBVEUsIDApID09IDApKQorCQlncGlvX2V4cG9ydChPVkVST19HUElPX0JUX1hHQVRFLCAwKTsKKwllbHNlCisJCXByaW50ayhLRVJOX0VSUiAiY291bGQgbm90IG9idGFpbiBncGlvIGZvciBPVkVST19HUElPX0JUX1hHQVRFXG4iKTsKKworCWlmICgoZ3Bpb19yZXF1ZXN0KE9WRVJPX0dQSU9fQlRfTlJFU0VULCAiT1ZFUk9fR1BJT19CVF9OUkVTRVQiKSA9PSAwKSAmJgorCSAgICAoZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KE9WRVJPX0dQSU9fQlRfTlJFU0VULCAxKSA9PSAwKSkgeworCQlncGlvX2V4cG9ydChPVkVST19HUElPX0JUX05SRVNFVCwgMCk7CisJCWdwaW9fc2V0X3ZhbHVlKE9WRVJPX0dQSU9fQlRfTlJFU0VULCAwKTsKKwkJbWRlbGF5KDYpOworCQlncGlvX3NldF92YWx1ZShPVkVST19HUElPX0JUX05SRVNFVCwgMSk7CisJfSBlbHNlIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJjb3VsZCBub3Qgb2J0YWluIGdwaW8gZm9yICIKKwkJCQkJIk9WRVJPX0dQSU9fQlRfTlJFU0VUXG4iKTsKKwl9CisKKwlpZiAoKGdwaW9fcmVxdWVzdChPVkVST19HUElPX1VTQkhfQ1BFTiwgIk9WRVJPX0dQSU9fVVNCSF9DUEVOIikgPT0gMCkgJiYKKwkgICAgKGdwaW9fZGlyZWN0aW9uX291dHB1dChPVkVST19HUElPX1VTQkhfQ1BFTiwgMSkgPT0gMCkpCisJCWdwaW9fZXhwb3J0KE9WRVJPX0dQSU9fVVNCSF9DUEVOLCAwKTsKKwllbHNlCisJCXByaW50ayhLRVJOX0VSUiAiY291bGQgbm90IG9idGFpbiBncGlvIGZvciAiCisJCQkJCSJPVkVST19HUElPX1VTQkhfQ1BFTlxuIik7CisKKwlpZiAoKGdwaW9fcmVxdWVzdChPVkVST19HUElPX1VTQkhfTlJFU0VULAorCQkJICAiT1ZFUk9fR1BJT19VU0JIX05SRVNFVCIpID09IDApICYmCisJICAgIChncGlvX2RpcmVjdGlvbl9vdXRwdXQoT1ZFUk9fR1BJT19VU0JIX05SRVNFVCwgMSkgPT0gMCkpCisJCWdwaW9fZXhwb3J0KE9WRVJPX0dQSU9fVVNCSF9OUkVTRVQsIDApOworCWVsc2UKKwkJcHJpbnRrKEtFUk5fRVJSICJjb3VsZCBub3Qgb2J0YWluIGdwaW8gZm9yICIKKwkJCQkJIk9WRVJPX0dQSU9fVVNCSF9OUkVTRVRcbiIpOworfQorCitzdGF0aWMgdm9pZCBfX2luaXQgb3Zlcm9fbWFwX2lvKHZvaWQpCit7CisJb21hcDJfc2V0X2dsb2JhbHNfMzQzeCgpOworCW9tYXAyX21hcF9jb21tb25faW8oKTsKK30KKworTUFDSElORV9TVEFSVChPVkVSTywgIkd1bXN0aXggT3Zlcm8iKQorCS5waHlzX2lvCT0gMHg0ODAwMDAwMCwKKwkuaW9fcGdfb2Zmc3QJPSAoKDB4ZDgwMDAwMDApID4+IDE4KSAmIDB4ZmZmYywKKwkuYm9vdF9wYXJhbXMJPSAweDgwMDAwMTAwLAorCS5tYXBfaW8JCT0gb3Zlcm9fbWFwX2lvLAorCS5pbml0X2lycQk9IG92ZXJvX2luaXRfaXJxLAorCS5pbml0X21hY2hpbmUJPSBvdmVyb19pbml0LAorCS50aW1lcgkJPSAmb21hcF90aW1lciwKK01BQ0hJTkVfRU5ECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrLmMKaW5kZXggOTdjZGUzZDMuLmFkNzIxZTAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2suYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrLmMKQEAgLTI1LDYgKzI1LDcgQEAKICNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KIAogI2luY2x1ZGUgPG1hY2gvY2xvY2suaD4KKyNpbmNsdWRlIDxtYWNoL2Nsb2NrZG9tYWluLmg+CiAjaW5jbHVkZSA8bWFjaC9zcmFtLmg+CiAjaW5jbHVkZSA8bWFjaC9jcHUuaD4KICNpbmNsdWRlIDxhc20vZGl2NjQuaD4KQEAgLTYxLDEwICs2MiwzNiBAQAogdTggY3B1X21hc2s7CiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogT21hcDIgc3BlY2lmaWMgY2xvY2sgZnVuY3Rpb25zCisgKiBPTUFQMi8zIHNwZWNpZmljIGNsb2NrIGZ1bmN0aW9ucwogICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAogLyoqCisgKiBvbWFwMl9pbml0X2Nsa19jbGtkbSAtIGxvb2sgdXAgYSBjbG9ja2RvbWFpbiBuYW1lLCBzdG9yZSBwb2ludGVyIGluIGNsaworICogQGNsazogT01BUCBjbG9jayBzdHJ1Y3QgcHRyIHRvIHVzZQorICoKKyAqIENvbnZlcnQgYSBjbG9ja2RvbWFpbiBuYW1lIHN0b3JlZCBpbiBhIHN0cnVjdCBjbGsgJ2NsaycgaW50byBhCisgKiBjbG9ja2RvbWFpbiBwb2ludGVyLCBhbmQgc2F2ZSBpdCBpbnRvIHRoZSBzdHJ1Y3QgY2xrLiAgSW50ZW5kZWQgdG8gYmUKKyAqIGNhbGxlZCBkdXJpbmcgY2xrX3JlZ2lzdGVyKCkuICBObyByZXR1cm4gdmFsdWUuCisgKi8KK3ZvaWQgb21hcDJfaW5pdF9jbGtfY2xrZG0oc3RydWN0IGNsayAqY2xrKQoreworCXN0cnVjdCBjbG9ja2RvbWFpbiAqY2xrZG07CisKKwlpZiAoIWNsay0+Y2xrZG1fbmFtZSkKKwkJcmV0dXJuOworCisJY2xrZG0gPSBjbGtkbV9sb29rdXAoY2xrLT5jbGtkbV9uYW1lKTsKKwlpZiAoY2xrZG0pIHsKKwkJcHJfZGVidWcoImNsb2NrOiBhc3NvY2lhdGVkIGNsayAlcyB0byBjbGtkbSAlc1xuIiwKKwkJCSBjbGstPm5hbWUsIGNsay0+Y2xrZG1fbmFtZSk7CisJCWNsay0+Y2xrZG0gPSBjbGtkbTsKKwl9IGVsc2UgeworCQlwcl9kZWJ1ZygiY2xvY2s6IGNvdWxkIG5vdCBhc3NvY2lhdGUgY2xrICVzIHRvICIKKwkJCSAiY2xrZG0gJXNcbiIsIGNsay0+bmFtZSwgY2xrLT5jbGtkbV9uYW1lKTsKKwl9Cit9CisKKy8qKgogICogb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50IC0gc2V0IGEgY2xrc2VsIGNsaydzIHBhcmVudCBmaWVsZCBmcm9tIHRoZSBoYXJkd2FyZQogICogQGNsazogT01BUCBjbG9jayBzdHJ1Y3QgcHRyIHRvIHVzZQogICoKQEAgLTI1MCw3ICsyNzcsNyBAQAogCWlmIChjbGstPmVuYWJsZSkKIAkJcmV0dXJuIGNsay0+ZW5hYmxlKGNsayk7CiAKLQlpZiAodW5saWtlbHkoY2xrLT5lbmFibGVfcmVnID09IDApKSB7CisJaWYgKHVubGlrZWx5KGNsay0+ZW5hYmxlX3JlZyA9PSBOVUxMKSkgewogCQlwcmludGsoS0VSTl9FUlIgImNsb2NrLmM6IEVuYWJsZSBmb3IgJXMgd2l0aG91dCBlbmFibGUgY29kZVxuIiwKIAkJICAgICAgIGNsay0+bmFtZSk7CiAJCXJldHVybiAwOyAvKiBSRVZJU0lUOiAtRUlOVkFMICovCkBAIC0yODIsNyArMzA5LDcgQEAKIAkJcmV0dXJuOwogCX0KIAotCWlmIChjbGstPmVuYWJsZV9yZWcgPT0gMCkgeworCWlmIChjbGstPmVuYWJsZV9yZWcgPT0gTlVMTCkgewogCQkvKgogCQkgKiAnSW5kZXBlbmRlbnQnIGhlcmUgcmVmZXJzIHRvIGEgY2xvY2sgd2hpY2ggaXMgbm90CiAJCSAqIGNvbnRyb2xsZWQgYnkgaXRzIHBhcmVudC4KQEAgLTMwNyw2ICszMzQsOSBAQAogCQlfb21hcDJfY2xrX2Rpc2FibGUoY2xrKTsKIAkJaWYgKGxpa2VseSgodTMyKWNsay0+cGFyZW50KSkKIAkJCW9tYXAyX2Nsa19kaXNhYmxlKGNsay0+cGFyZW50KTsKKwkJaWYgKGNsay0+Y2xrZG0pCisJCQlvbWFwMl9jbGtkbV9jbGtfZGlzYWJsZShjbGstPmNsa2RtLCBjbGspOworCiAJfQogfQogCkBAIC0zMjMsMTEgKzM1MywxOSBAQAogCQkJcmV0dXJuIHJldDsKIAkJfQogCisJCWlmIChjbGstPmNsa2RtKQorCQkJb21hcDJfY2xrZG1fY2xrX2VuYWJsZShjbGstPmNsa2RtLCBjbGspOworCiAJCXJldCA9IF9vbWFwMl9jbGtfZW5hYmxlKGNsayk7CiAKLQkJaWYgKHVubGlrZWx5KHJldCAhPSAwKSAmJiBjbGstPnBhcmVudCkgewotCQkJb21hcDJfY2xrX2Rpc2FibGUoY2xrLT5wYXJlbnQpOwotCQkJY2xrLT51c2Vjb3VudC0tOworCQlpZiAodW5saWtlbHkocmV0ICE9IDApKSB7CisJCQlpZiAoY2xrLT5jbGtkbSkKKwkJCQlvbWFwMl9jbGtkbV9jbGtfZGlzYWJsZShjbGstPmNsa2RtLCBjbGspOworCisJCQlpZiAoY2xrLT5wYXJlbnQpIHsKKwkJCQlvbWFwMl9jbGtfZGlzYWJsZShjbGstPnBhcmVudCk7CisJCQkJY2xrLT51c2Vjb3VudC0tOworCQkJfQogCQl9CiAJfQogCkBAIC00NzYsNyArNTE0LDcgQEAKIC8qIEdpdmVuIGEgY2xvY2sgYW5kIGEgcmF0ZSBhcHBseSBhIGNsb2NrIHNwZWNpZmljIHJvdW5kaW5nIGZ1bmN0aW9uICovCiBsb25nIG9tYXAyX2Nsa19yb3VuZF9yYXRlKHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyByYXRlKQogewotCWlmIChjbGstPnJvdW5kX3JhdGUgIT0gMCkKKwlpZiAoY2xrLT5yb3VuZF9yYXRlICE9IE5VTEwpCiAJCXJldHVybiBjbGstPnJvdW5kX3JhdGUoY2xrLCByYXRlKTsKIAogCWlmIChjbGstPmZsYWdzICYgUkFURV9GSVhFRCkKQEAgLTU2NSw3ICs2MDMsNyBAQAogICovCiB2b2lkIF9faW9tZW0gKm9tYXAyX2dldF9jbGtzZWwoc3RydWN0IGNsayAqY2xrLCB1MzIgKmZpZWxkX21hc2spCiB7Ci0JaWYgKHVubGlrZWx5KChjbGstPmNsa3NlbF9yZWcgPT0gMCkgfHwgKGNsay0+Y2xrc2VsX21hc2sgPT0gMCkpKQorCWlmICh1bmxpa2VseSgoY2xrLT5jbGtzZWxfcmVnID09IE5VTEwpIHx8IChjbGstPmNsa3NlbF9tYXNrID09IE5VTEwpKSkKIAkJcmV0dXJuIE5VTEw7CiAKIAkqZmllbGRfbWFzayA9IGNsay0+Y2xrc2VsX21hc2s7CkBAIC01ODUsNyArNjIzLDcgQEAKIAl2b2lkIF9faW9tZW0gKmRpdl9hZGRyOwogCiAJZGl2X2FkZHIgPSBvbWFwMl9nZXRfY2xrc2VsKGNsaywgJmZpZWxkX21hc2spOwotCWlmIChkaXZfYWRkciA9PSAwKQorCWlmIChkaXZfYWRkciA9PSBOVUxMKQogCQlyZXR1cm4gMDsKIAogCWZpZWxkX3ZhbCA9IF9fcmF3X3JlYWRsKGRpdl9hZGRyKSAmIGZpZWxkX21hc2s7CkBAIC02MDQsNyArNjQyLDcgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlkaXZfYWRkciA9IG9tYXAyX2dldF9jbGtzZWwoY2xrLCAmZmllbGRfbWFzayk7Ci0JaWYgKGRpdl9hZGRyID09IDApCisJaWYgKGRpdl9hZGRyID09IE5VTEwpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJZmllbGRfdmFsID0gb21hcDJfZGl2aXNvcl90b19jbGtzZWwoY2xrLCBuZXdfZGl2KTsKQEAgLTY0Miw3ICs2ODAsNyBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAogCS8qIGRwbGxfY2ssIGNvcmVfY2ssIHZpcnRfcHJjbV9zZXQ7IHBsdXMgYWxsIGNsa3NlbCBjbG9ja3MgKi8KLQlpZiAoY2xrLT5zZXRfcmF0ZSAhPSAwKQorCWlmIChjbGstPnNldF9yYXRlICE9IE5VTEwpCiAJCXJldCA9IGNsay0+c2V0X3JhdGUoY2xrLCByYXRlKTsKIAogCWlmICh1bmxpa2VseShyZXQgPT0gMCAmJiAoY2xrLT5mbGFncyAmIFJBVEVfUFJPUEFHQVRFUykpKQpAQCAtNjYzLDcgKzcwMSw3IEBACiAJY29uc3Qgc3RydWN0IGNsa3NlbF9yYXRlICpjbGtyOwogCiAJKnBhcmVudF9kaXYgPSAwOwotCSpzcmNfYWRkciA9IDA7CisJKnNyY19hZGRyID0gTlVMTDsKIAogCWNsa3MgPSBvbWFwMl9nZXRfY2xrc2VsX2J5X3BhcmVudChjbGssIHNyY19jbGspOwogCWlmIChjbGtzID09IE5VTEwpCkBAIC03MDQsNyArNzQyLDcgQEAKIAogCWZpZWxkX3ZhbCA9IG9tYXAyX2Nsa3NlbF9nZXRfc3JjX2ZpZWxkKCZzcmNfYWRkciwgbmV3X3BhcmVudCwKIAkJCQkJICAgICAgICZmaWVsZF9tYXNrLCBjbGssICZwYXJlbnRfZGl2KTsKLQlpZiAoc3JjX2FkZHIgPT0gMCkKKwlpZiAoc3JjX2FkZHIgPT0gTlVMTCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlpZiAoY2xrLT51c2Vjb3VudCA+IDApCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrLmggYi9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrLmgKaW5kZXggNjI2ZTVmYS4uMWZiMzMwZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9jay5oCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2suaApAQCAtMjEsNiArMjEsNyBAQAogLyogVGhlIG1heGltdW0gZXJyb3IgYmV0d2VlbiBhIHRhcmdldCBEUExMIHJhdGUgYW5kIHRoZSByb3VuZGVkIHJhdGUgaW4gSHogKi8KICNkZWZpbmUgREVGQVVMVF9EUExMX1JBVEVfVE9MRVJBTkNFCTUwMDAwCiAKK2ludCBvbWFwMl9jbGtfaW5pdCh2b2lkKTsKIGludCBvbWFwMl9jbGtfZW5hYmxlKHN0cnVjdCBjbGsgKmNsayk7CiB2b2lkIG9tYXAyX2Nsa19kaXNhYmxlKHN0cnVjdCBjbGsgKmNsayk7CiBsb25nIG9tYXAyX2Nsa19yb3VuZF9yYXRlKHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyByYXRlKTsKQEAgLTM2LDYgKzM3LDcgQEAKICNlbmRpZgogCiB2b2lkIG9tYXAyX2Nsa3NlbF9yZWNhbGMoc3RydWN0IGNsayAqY2xrKTsKK3ZvaWQgb21hcDJfaW5pdF9jbGtfY2xrZG0oc3RydWN0IGNsayAqY2xrKTsKIHZvaWQgb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50KHN0cnVjdCBjbGsgKmNsayk7CiB1MzIgb21hcDJfY2xrc2VsX2dldF9kaXZpc29yKHN0cnVjdCBjbGsgKmNsayk7CiB1MzIgb21hcDJfY2xrc2VsX3JvdW5kX3JhdGVfZGl2KHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyB0YXJnZXRfcmF0ZSwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2syNHh4LmggYi9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrMjR4eC5oCmluZGV4IGJlNGUyNTUuLjI0MmExOWQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2syNHh4LmgKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9jazI0eHguaApAQCAtNjI2LDYgKzYyNiw3IEBACiAJLnJhdGUJCT0gMzIwMDAsCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1ggfAogCQkJCVJBVEVfRklYRUQgfCBBTFdBWVNfRU5BQkxFRCB8IFJBVEVfUFJPUEFHQVRFUywKKwkuY2xrZG1fbmFtZQk9ICJ3a3VwX2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZwcm9wYWdhdGVfcmF0ZSwKIH07CiAKQEAgLTYzNCwxNyArNjM1LDE5IEBACiAJLm5hbWUJCT0gIm9zY19jayIsCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1ggfAogCQkJCVJBVEVfUFJPUEFHQVRFUywKKwkuY2xrZG1fbmFtZQk9ICJ3a3VwX2Nsa2RtIiwKIAkuZW5hYmxlCQk9ICZvbWFwMl9lbmFibGVfb3NjX2NrLAogCS5kaXNhYmxlCT0gJm9tYXAyX2Rpc2FibGVfb3NjX2NrLAogCS5yZWNhbGMJCT0gJm9tYXAyX29zY19jbGtfcmVjYWxjLAogfTsKIAotLyogV2l0aCBvdXQgbW9kZW0gbGlrZWx5IDEyTUh6LCB3aXRoIG1vZGVtIGxpa2VseSAxM01IeiAqLworLyogV2l0aG91dCBtb2RlbSBsaWtlbHkgMTJNSHosIHdpdGggbW9kZW0gbGlrZWx5IDEzTUh6ICovCiBzdGF0aWMgc3RydWN0IGNsayBzeXNfY2sgPSB7CQkvKiAoKjEyLCAqMTMsIDE5LjIsIDI2LCAzOC40KU1IeiAqLwogCS5uYW1lCQk9ICJzeXNfY2siLAkJLyogfiByZWZfY2xrIGFsc28gKi8KIAkucGFyZW50CQk9ICZvc2NfY2ssCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1ggfAogCQkJCUFMV0FZU19FTkFCTEVEIHwgUkFURV9QUk9QQUdBVEVTLAorCS5jbGtkbV9uYW1lCT0gIndrdXBfY2xrZG0iLAogCS5yZWNhbGMJCT0gJm9tYXAyX3N5c19jbGtfcmVjYWxjLAogfTsKIApAQCAtNjUzLDYgKzY1Niw3IEBACiAJLnJhdGUJCT0gNTQwMDAwMDAsCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1ggfAogCQkJCVJBVEVfRklYRUQgfCBBTFdBWVNfRU5BQkxFRCB8IFJBVEVfUFJPUEFHQVRFUywKKwkuY2xrZG1fbmFtZQk9ICJ3a3VwX2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZwcm9wYWdhdGVfcmF0ZSwKIH07CiAKQEAgLTY4NCw2ICs2ODgsNyBAQAogCS5kcGxsX2RhdGEJPSAmZHBsbF9kZCwKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCB8CiAJCQkJUkFURV9QUk9QQUdBVEVTIHwgQUxXQVlTX0VOQUJMRUQsCisJLmNsa2RtX25hbWUJPSAid2t1cF9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmb21hcDJfZHBsbGNvcmVfcmVjYWxjLAogCS5zZXRfcmF0ZQk9ICZvbWFwMl9yZXByb2dyYW1fZHBsbGNvcmUsCiB9OwpAQCAtNjk0LDYgKzY5OSw3IEBACiAJLnJhdGUJCT0gOTYwMDAwMDAsCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1ggfAogCQkJCVJBVEVfRklYRUQgfCBSQVRFX1BST1BBR0FURVMgfCBFTkFCTEVfT05fSU5JVCwKKwkuY2xrZG1fbmFtZQk9ICJ3a3VwX2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihQTExfTU9ELCBDTV9DTEtFTiksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl85Nk1fUExMX1NISUZULAogCS5lbmFibGUJCT0gJm9tYXAyX2Nsa19maXhlZF9lbmFibGUsCkBAIC03MDcsNiArNzEzLDcgQEAKIAkucmF0ZQkJPSA1NDAwMDAwMCwKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCB8CiAJCQkJUkFURV9GSVhFRCB8IFJBVEVfUFJPUEFHQVRFUyB8IEVOQUJMRV9PTl9JTklULAorCS5jbGtkbV9uYW1lCT0gIndrdXBfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKFBMTF9NT0QsIENNX0NMS0VOKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOXzU0TV9QTExfU0hJRlQsCiAJLmVuYWJsZQkJPSAmb21hcDJfY2xrX2ZpeGVkX2VuYWJsZSwKQEAgLTc0MSw2ICs3NDgsNyBAQAogCS5wYXJlbnQJCT0gJmFwbGw1NF9jaywJLyogY2FuIGFsc28gYmUgYWx0X2NsayAqLwogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYIHwKIAkJCQlSQVRFX1BST1BBR0FURVMgfCBQQVJFTlRfQ09OVFJPTFNfQ0xPQ0ssCisJLmNsa2RtX25hbWUJPSAid2t1cF9jbGtkbSIsCiAJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKIAkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihQTExfTU9ELCBDTV9DTEtTRUwxKSwKIAkuY2xrc2VsX21hc2sJPSBPTUFQMjRYWF81NE1fU09VUkNFLApAQCAtNzUzLDYgKzc2MSw3IEBACiAJLnBhcmVudAkJPSAmZHBsbF9jaywJCS8qIGNhbiBhbHNvIGJlIDMyayAqLwogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYIHwKIAkJCQlBTFdBWVNfRU5BQkxFRCB8IFJBVEVfUFJPUEFHQVRFUywKKwkuY2xrZG1fbmFtZQk9ICJ3a3VwX2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIApAQCAtNzc5LDYgKzc4OCw3IEBACiAJLnBhcmVudAkJPSAmYXBsbDk2X2NrLAogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYIHwKIAkJCQlSQVRFX1BST1BBR0FURVMgfCBQQVJFTlRfQ09OVFJPTFNfQ0xPQ0ssCisJLmNsa2RtX25hbWUJPSAid2t1cF9jbGtkbSIsCiAJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKIAkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihQTExfTU9ELCBDTV9DTEtTRUwxKSwKIAkuY2xrc2VsX21hc2sJPSBPTUFQMjQzMF85Nk1fU09VUkNFLApAQCAtODExLDYgKzgyMSw3IEBACiAJLnBhcmVudAkJPSAmYXBsbDk2X2NrLAkgLyogOTZNIG9yIEFsdCAqLwogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYIHwKIAkJCQlSQVRFX1BST1BBR0FURVMgfCBQQVJFTlRfQ09OVFJPTFNfQ0xPQ0ssCisJLmNsa2RtX25hbWUJPSAid2t1cF9jbGtkbSIsCiAJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKIAkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihQTExfTU9ELCBDTV9DTEtTRUwxKSwKIAkuY2xrc2VsX21hc2sJPSBPTUFQMjRYWF80OE1fU09VUkNFLApAQCAtODI2LDYgKzgzNyw3IEBACiAJLmZpeGVkX2Rpdgk9IDQsCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1ggfAogCQkJCVJBVEVfUFJPUEFHQVRFUyB8IFBBUkVOVF9DT05UUk9MU19DTE9DSywKKwkuY2xrZG1fbmFtZQk9ICJ3a3VwX2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZvbWFwMl9maXhlZF9kaXZpc29yX3JlY2FsYywKIH07CiAKQEAgLTg3OCw2ICs4OTAsNyBAQAogCS5wYXJlbnQJCT0gJmZ1bmNfNTRtX2NrLAogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYIHwKIAkJCQlSQVRFX1BST1BBR0FURVMsCisJLmNsa2RtX25hbWUJPSAid2t1cF9jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQMjRYWF9QUkNNX0NMS09VVF9DVFJMLAogCS5lbmFibGVfYml0CT0gT01BUDI0WFhfQ0xLT1VUX0VOX1NISUZULAogCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCkBAIC05MDgsNiArOTIxLDcgQEAKIAkucGFyZW50CQk9ICZzeXNfY2xrb3V0X3NyYywKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCB8CiAJCQkJUEFSRU5UX0NPTlRST0xTX0NMT0NLLAorCS5jbGtkbV9uYW1lCT0gIndrdXBfY2xrZG0iLAogCS5jbGtzZWxfcmVnCT0gT01BUDI0WFhfUFJDTV9DTEtPVVRfQ1RSTCwKIAkuY2xrc2VsX21hc2sJPSBPTUFQMjRYWF9DTEtPVVRfRElWX01BU0ssCiAJLmNsa3NlbAkJPSBzeXNfY2xrb3V0X2Nsa3NlbCwKQEAgLTkyMSw2ICs5MzUsNyBAQAogCS5uYW1lCQk9ICJzeXNfY2xrb3V0Ml9zcmMiLAogCS5wYXJlbnQJCT0gJmZ1bmNfNTRtX2NrLAogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IFJBVEVfUFJPUEFHQVRFUywKKwkuY2xrZG1fbmFtZQk9ICJ3a3VwX2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVAyNFhYX1BSQ01fQ0xLT1VUX0NUUkwsCiAJLmVuYWJsZV9iaXQJPSBPTUFQMjQyMF9DTEtPVVQyX0VOX1NISUZULAogCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCkBAIC05NDIsNiArOTU3LDcgQEAKIAkubmFtZQkJPSAic3lzX2Nsa291dDIiLAogCS5wYXJlbnQJCT0gJnN5c19jbGtvdXQyX3NyYywKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBQQVJFTlRfQ09OVFJPTFNfQ0xPQ0ssCisJLmNsa2RtX25hbWUJPSAid2t1cF9jbGtkbSIsCiAJLmNsa3NlbF9yZWcJPSBPTUFQMjRYWF9QUkNNX0NMS09VVF9DVFJMLAogCS5jbGtzZWxfbWFzawk9IE9NQVAyNDIwX0NMS09VVDJfRElWX01BU0ssCiAJLmNsa3NlbAkJPSBzeXNfY2xrb3V0Ml9jbGtzZWwsCkBAIC05NTQsNiArOTcwLDcgQEAKIAkubmFtZQkJPSAiZW11bF9jayIsCiAJLnBhcmVudAkJPSAmZnVuY181NG1fY2ssCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYLAorCS5jbGtkbV9uYW1lCT0gIndrdXBfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUDI0WFhfUFJDTV9DTEtFTVVMX0NUUkwsCiAJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTVVMQVRJT05fRU5fU0hJRlQsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKQEAgLTk5MCwxMiArMTAwNywxMyBAQAogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYIHwKIAkJCQlBTFdBWVNfRU5BQkxFRCB8IERFTEFZRURfQVBQIHwKIAkJCQlDT05GSUdfUEFSVElDSVBBTlQgfCBSQVRFX1BST1BBR0FURVMsCisJLmNsa2RtX25hbWUJPSAibXB1X2Nsa2RtIiwKIAkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAogCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKE1QVV9NT0QsIENNX0NMS1NFTCksCiAJLmNsa3NlbF9tYXNrCT0gT01BUDI0WFhfQ0xLU0VMX01QVV9NQVNLLAogCS5jbGtzZWwJCT0gbXB1X2Nsa3NlbCwKIAkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAotCS5yb3VuZF9yYXRlICAgICA9ICZvbWFwMl9jbGtzZWxfcm91bmRfcmF0ZSwKKwkucm91bmRfcmF0ZQk9ICZvbWFwMl9jbGtzZWxfcm91bmRfcmF0ZSwKIAkuc2V0X3JhdGUJPSAmb21hcDJfY2xrc2VsX3NldF9yYXRlCiB9OwogCkBAIC0xMDMxLDYgKzEwNDksNyBAQAogCS5wYXJlbnQJCT0gJmNvcmVfY2ssCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1ggfCBERUxBWUVEX0FQUCB8CiAJCQkJQ09ORklHX1BBUlRJQ0lQQU5UIHwgUkFURV9QUk9QQUdBVEVTLAorCS5jbGtkbV9uYW1lCT0gImRzcF9jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDI0WFhfRFNQX01PRCwgQ01fRkNMS0VOKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0NNX0ZDTEtFTl9EU1BfRU5fRFNQX1NISUZULAogCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAyNFhYX0RTUF9NT0QsIENNX0NMS1NFTCksCkBAIC0xMDU0LDEwICsxMDczLDcgQEAKIAl7IC5wYXJlbnQgPSBOVUxMIH0KIH07CiAKLS8qCi0gKiBUaGlzIGNsb2NrIGRvZXMgbm90IGV4aXN0IGFzIHN1Y2ggaW4gdGhlIFRSTSwgYnV0IGlzIGFkZGVkIHRvCi0gKiBzZXBhcmF0ZSBzb3VyY2Ugc2VsZWN0aW9uIGZyb20gIFhYWAotICovCisvKiBUaGlzIGNsb2NrIGRvZXMgbm90IGV4aXN0IGFzIHN1Y2ggaW4gdGhlIFRSTS4gKi8KIHN0YXRpYyBzdHJ1Y3QgY2xrIGRzcF9pcmF0ZV9pY2sgPSB7CiAJLm5hbWUJCT0gImRzcF9pcmF0ZV9pY2siLAogCS5wYXJlbnQJCT0gJmRzcF9mY2ssCkBAIC0xMDg5LDExICsxMTA1LDE3IEBACiAJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9DTV9GQ0xLRU5fRFNQX0VOX0RTUF9TSElGVCwKIH07CiAKKy8qCisgKiBUaGUgSVZBMSBpcyBhbiBBUk03IGNvcmUgb24gdGhlIDI0MjAgdGhhdCBoYXMgbm90aGluZyB0byBkbyB3aXRoCisgKiB0aGUgQzU0eCwgYnV0IHdoaWNoIGlzIGNvbnRhaW5lZCBpbiB0aGUgRFNQIHBvd2VyZG9tYWluLiAgRG9lcyBub3QKKyAqIGV4aXN0IG9uIGxhdGVyIE9NQVBzLgorICovCiBzdGF0aWMgc3RydWN0IGNsayBpdmExX2lmY2sgPSB7CiAJLm5hbWUJCT0gIml2YTFfaWZjayIsCiAJLnBhcmVudAkJPSAmY29yZV9jaywKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDT05GSUdfUEFSVElDSVBBTlQgfAogCQkJCVJBVEVfUFJPUEFHQVRFUyB8IERFTEFZRURfQVBQLAorCS5jbGtkbV9uYW1lCT0gIml2YTFfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAyNFhYX0RTUF9NT0QsIENNX0ZDTEtFTiksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMjQyMF9FTl9JVkFfQ09QX1NISUZULAogCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAyNFhYX0RTUF9NT0QsIENNX0NMS1NFTCksCkBAIC0xMTA5LDYgKzExMzEsNyBAQAogCS5uYW1lCQk9ICJpdmExX21wdV9pbnRfaWZjayIsCiAJLnBhcmVudAkJPSAmaXZhMV9pZmNrLAogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCwKKwkuY2xrZG1fbmFtZQk9ICJpdmExX2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMjRYWF9EU1BfTU9ELCBDTV9GQ0xLRU4pLAogCS5lbmFibGVfYml0CT0gT01BUDI0MjBfRU5fSVZBX01QVV9TSElGVCwKIAkuZml4ZWRfZGl2CT0gMiwKQEAgLTExNTYsNiArMTE3OSw3IEBACiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1ggfAogCQkJCUFMV0FZU19FTkFCTEVEIHwgREVMQVlFRF9BUFAgfAogCQkJCUNPTkZJR19QQVJUSUNJUEFOVCB8IFJBVEVfUFJPUEFHQVRFUywKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2wzX2Nsa2RtIiwKIAkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fQ0xLU0VMMSksCiAJLmNsa3NlbF9tYXNrCT0gT01BUDI0WFhfQ0xLU0VMX0wzX01BU0ssCiAJLmNsa3NlbAkJPSBjb3JlX2wzX2Nsa3NlbCwKQEAgLTExNzcsMTEgKzEyMDEsMTMgQEAKIAl7IC5wYXJlbnQgPSBOVUxMIH0sCiB9OwogCisvKiBJdCBpcyB1bmNsZWFyIGZyb20gVFJNIHdoZXRoZXIgdXNiX2w0X2ljayBpcyByZWFsbHkgaW4gTDMgb3IgTDQgY2xrZG0gKi8KIHN0YXRpYyBzdHJ1Y3QgY2xrIHVzYl9sNF9pY2sgPSB7CS8qIEZTLVVTQiBpbnRlcmZhY2UgY2xvY2sgKi8KIAkubmFtZQkJPSAidXNiX2w0X2ljayIsCiAJLnBhcmVudAkJPSAmY29yZV9sM19jaywKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCB8CiAJCQkJREVMQVlFRF9BUFAgfCBDT05GSUdfUEFSVElDSVBBTlQsCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjIpLAogCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fVVNCX1NISUZULAogCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9DTEtTRUwxKSwKQEAgLTExOTMsMTAgKzEyMTksNDIgQEAKIH07CiAKIC8qCisgKiBMNCBjbG9jayBtYW5hZ2VtZW50IGRvbWFpbgorICoKKyAqIFRoaXMgZG9tYWluIGNvbnRhaW5zIGxvdHMgb2YgaW50ZXJmYWNlIGNsb2NrcyBmcm9tIHRoZSBMNCBpbnRlcmZhY2UsIHNvbWUKKyAqIGZ1bmN0aW9uYWwgY2xvY2tzLglGaXhlZCBBUExMIGZ1bmN0aW9uYWwgc291cmNlIGNsb2NrcyBhcmUgbWFuYWdlZCBpbgorICogdGhpcyBkb21haW4uCisgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsX3JhdGUgbDRfY29yZV9sM19yYXRlc1tdID0geworCXsgLmRpdiA9IDEsIC52YWwgPSAxLCAuZmxhZ3MgPSBSQVRFX0lOXzI0WFggfCBERUZBVUxUX1JBVEUgfSwKKwl7IC5kaXYgPSAyLCAudmFsID0gMiwgLmZsYWdzID0gUkFURV9JTl8yNFhYIH0sCisJeyAuZGl2ID0gMCB9Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbCBsNF9jbGtzZWxbXSA9IHsKKwl7IC5wYXJlbnQgPSAmY29yZV9sM19jaywgLnJhdGVzID0gbDRfY29yZV9sM19yYXRlcyB9LAorCXsgLnBhcmVudCA9IE5VTEwgfQorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgbDRfY2sgPSB7CQkvKiB1c2VkIGJvdGggYXMgYW4gaWNrIGFuZCBmY2sgKi8KKwkubmFtZQkJPSAibDRfY2siLAorCS5wYXJlbnQJCT0gJmNvcmVfbDNfY2ssCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1ggfAorCQkJCUFMV0FZU19FTkFCTEVEIHwgREVMQVlFRF9BUFAgfCBSQVRFX1BST1BBR0FURVMsCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCisJLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0NMS1NFTDEpLAorCS5jbGtzZWxfbWFzawk9IE9NQVAyNFhYX0NMS1NFTF9MNF9NQVNLLAorCS5jbGtzZWwJCT0gbDRfY2xrc2VsLAorCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCisJLnJvdW5kX3JhdGUJPSAmb21hcDJfY2xrc2VsX3JvdW5kX3JhdGUsCisJLnNldF9yYXRlCT0gJm9tYXAyX2Nsa3NlbF9zZXRfcmF0ZQorfTsKKworLyoKICAqIFNTSSBpcyBpbiBMMyBtYW5hZ2VtZW50IGRvbWFpbiwgaXRzIGRpcmVjdCBwYXJlbnQgaXMgY29yZSBub3QgbDMsCiAgKiBtYW55IGNvcmUgcG93ZXIgZG9tYWluIGVudGl0aWVzIGFyZSBncm91cGVkIGludG8gdGhlIEwzIGNsb2NrCiAgKiBkb21haW4uCi0gKiBTU0lfU1NSX0ZDTEssIFNTSV9TU1RfRkNMSywgU1NJX0w0X0NMSUsKKyAqIFNTSV9TU1JfRkNMSywgU1NJX1NTVF9GQ0xLLCBTU0lfTDRfSUNMSwogICoKICAqIHNzciA9IGNvcmUvMS8yLzMvNC81LCBzc3QgPSAxLzIgc3NyLgogICovCkBAIC0xMjIxLDYgKzEyNzksNyBAQAogCS5wYXJlbnQJCT0gJmNvcmVfY2ssCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1ggfAogCQkJCURFTEFZRURfQVBQLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDNfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBPTUFQMjRYWF9DTV9GQ0xLRU4yKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX1NTSV9TSElGVCwKIAkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fQ0xLU0VMMSksCkBAIC0xMjMxLDYgKzEyOTAsNyBAQAogCS5zZXRfcmF0ZQk9ICZvbWFwMl9jbGtzZWxfc2V0X3JhdGUKIH07CiAKKwogLyoKICAqIEdGWCBjbG9jayBkb21haW4KICAqCUNsb2NrczoKQEAgLTEyNTQsNiArMTMxNCw3IEBACiAJLm5hbWUJCT0gImdmeF8zZF9mY2siLAogCS5wYXJlbnQJCT0gJmNvcmVfbDNfY2ssCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1gsCisJLmNsa2RtX25hbWUJPSAiZ2Z4X2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihHRlhfTU9ELCBDTV9GQ0xLRU4pLAogCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fM0RfU0hJRlQsCiAJLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoR0ZYX01PRCwgQ01fQ0xLU0VMKSwKQEAgLTEyNjgsNiArMTMyOSw3IEBACiAJLm5hbWUJCT0gImdmeF8yZF9mY2siLAogCS5wYXJlbnQJCT0gJmNvcmVfbDNfY2ssCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1gsCisJLmNsa2RtX25hbWUJPSAiZ2Z4X2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihHRlhfTU9ELCBDTV9GQ0xLRU4pLAogCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fMkRfU0hJRlQsCiAJLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoR0ZYX01PRCwgQ01fQ0xLU0VMKSwKQEAgLTEyODIsNiArMTM0NCw3IEBACiAJLm5hbWUJCT0gImdmeF9pY2siLAkJLyogRnJvbSBsMyAqLwogCS5wYXJlbnQJCT0gJmNvcmVfbDNfY2ssCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1gsCisJLmNsa2RtX25hbWUJPSAiZ2Z4X2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihHRlhfTU9ELCBDTV9JQ0xLRU4pLAogCS5lbmFibGVfYml0CT0gT01BUF9FTl9HRlhfU0hJRlQsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKQEAgLTEzMTEsNiArMTM3NCw3IEBACiAJLm5hbWUJCT0gIm1kbV9pY2siLAogCS5wYXJlbnQJCT0gJmNvcmVfY2ssCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDNYIHwgREVMQVlFRF9BUFAgfCBDT05GSUdfUEFSVElDSVBBTlQsCisJLmNsa2RtX25hbWUJPSAibWRtX2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMjQzMF9NRE1fTU9ELCBDTV9JQ0xLRU4pLAogCS5lbmFibGVfYml0CT0gT01BUDI0MzBfQ01fSUNMS0VOX01ETV9FTl9NRE1fU0hJRlQsCiAJLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDI0MzBfTURNX01PRCwgQ01fQ0xLU0VMKSwKQEAgLTEzMjUsNTIgKzEzODksMTMgQEAKIAkubmFtZQkJPSAibWRtX29zY19jayIsCiAJLnBhcmVudAkJPSAmb3NjX2NrLAogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQzWCwKKwkuY2xrZG1fbmFtZQk9ICJtZG1fY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAyNDMwX01ETV9NT0QsIENNX0ZDTEtFTiksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMjQzMF9FTl9PU0NfU0hJRlQsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKIC8qCi0gKiBMNCBjbG9jayBtYW5hZ2VtZW50IGRvbWFpbgotICoKLSAqIFRoaXMgZG9tYWluIGNvbnRhaW5zIGxvdHMgb2YgaW50ZXJmYWNlIGNsb2NrcyBmcm9tIHRoZSBMNCBpbnRlcmZhY2UsIHNvbWUKLSAqIGZ1bmN0aW9uYWwgY2xvY2tzLglGaXhlZCBBUExMIGZ1bmN0aW9uYWwgc291cmNlIGNsb2NrcyBhcmUgbWFuYWdlZCBpbgotICogdGhpcyBkb21haW4uCi0gKi8KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsX3JhdGUgbDRfY29yZV9sM19yYXRlc1tdID0gewotCXsgLmRpdiA9IDEsIC52YWwgPSAxLCAuZmxhZ3MgPSBSQVRFX0lOXzI0WFggfCBERUZBVUxUX1JBVEUgfSwKLQl7IC5kaXYgPSAyLCAudmFsID0gMiwgLmZsYWdzID0gUkFURV9JTl8yNFhYIH0sCi0JeyAuZGl2ID0gMCB9Ci19OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbCBsNF9jbGtzZWxbXSA9IHsKLQl7IC5wYXJlbnQgPSAmY29yZV9sM19jaywgLnJhdGVzID0gbDRfY29yZV9sM19yYXRlcyB9LAotCXsgLnBhcmVudCA9IE5VTEwgfQotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgbDRfY2sgPSB7CQkvKiB1c2VkIGJvdGggYXMgYW4gaWNrIGFuZCBmY2sgKi8KLQkubmFtZQkJPSAibDRfY2siLAotCS5wYXJlbnQJCT0gJmNvcmVfbDNfY2ssCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1ggfAotCQkJCUFMV0FZU19FTkFCTEVEIHwgREVMQVlFRF9BUFAgfCBSQVRFX1BST1BBR0FURVMsCi0JLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0NMS1NFTDEpLAotCS5jbGtzZWxfbWFzawk9IE9NQVAyNFhYX0NMS1NFTF9MNF9NQVNLLAotCS5jbGtzZWwJCT0gbDRfY2xrc2VsLAotCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCi0JLnJvdW5kX3JhdGUJPSAmb21hcDJfY2xrc2VsX3JvdW5kX3JhdGUsCi0JLnNldF9yYXRlCT0gJm9tYXAyX2Nsa3NlbF9zZXRfcmF0ZQotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgc3NpX2w0X2ljayA9IHsKLQkubmFtZQkJPSAic3NpX2w0X2ljayIsCi0JLnBhcmVudAkJPSAmbDRfY2ssCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1gsCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjIpLAotCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fU1NJX1NISUZULAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi0vKgogICogRFNTIGNsb2NrIGRvbWFpbgogICogQ0xPQ0tzOgogICogRFNTX0w0X0lDTEssIERTU19MM19JQ0xLLApAQCAtMTQwOSw2ICsxNDM0LDcgQEAKIAkubmFtZQkJPSAiZHNzX2ljayIsCiAJLnBhcmVudAkJPSAmbDRfY2ssCS8qIHJlYWxseSBib3RoIGwzIGFuZCBsNCAqLwogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYLAorCS5jbGtkbV9uYW1lCT0gImRzc19jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAogCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fRFNTMV9TSElGVCwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLApAQCAtMTQxOSw2ICsxNDQ1LDcgQEAKIAkucGFyZW50CQk9ICZjb3JlX2NrLAkJLyogQ29yZSBvciBzeXMgKi8KIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCB8CiAJCQkJREVMQVlFRF9BUFAsCisJLmNsa2RtX25hbWUJPSAiZHNzX2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fRkNMS0VOMSksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9EU1MxX1NISUZULAogCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCkBAIC0xNDUxLDYgKzE0NzgsNyBAQAogCS5wYXJlbnQJCT0gJnN5c19jaywJCS8qIGZpeGVkIGF0IHN5c19jayBvciA0OE1IeiAqLwogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYIHwKIAkJCQlERUxBWUVEX0FQUCwKKwkuY2xrZG1fbmFtZQk9ICJkc3NfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9GQ0xLRU4xKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX0RTUzJfU0hJRlQsCiAJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKQEAgLTE0NjQsNiArMTQ5Miw3IEBACiAJLm5hbWUJCT0gImRzc181NG1fZmNrIiwJLyogNTRtIHR2IGNsayAqLwogCS5wYXJlbnQJCT0gJmZ1bmNfNTRtX2NrLAogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYLAorCS5jbGtkbV9uYW1lCT0gImRzc19jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAogCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fVFZfU0hJRlQsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKQEAgLTE0OTEsNiArMTUyMCw3IEBACiAJLm5hbWUJCT0gImdwdDFfaWNrIiwKIAkucGFyZW50CQk9ICZsNF9jaywKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCwKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihXS1VQX01PRCwgQ01fSUNMS0VOKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX0dQVDFfU0hJRlQsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKQEAgLTE1MDAsNiArMTUzMCw3IEBACiAJLm5hbWUJCT0gImdwdDFfZmNrIiwKIAkucGFyZW50CQk9ICZmdW5jXzMya19jaywKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCwKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihXS1VQX01PRCwgQ01fRkNMS0VOKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX0dQVDFfU0hJRlQsCiAJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKQEAgLTE1MTUsNiArMTU0Niw3IEBACiAJLm5hbWUJCT0gImdwdDJfaWNrIiwKIAkucGFyZW50CQk9ICZsNF9jaywKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCwKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9HUFQyX1NISUZULAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCkBAIC0xNTI0LDYgKzE1NTYsNyBAQAogCS5uYW1lCQk9ICJncHQyX2ZjayIsCiAJLnBhcmVudAkJPSAmZnVuY18zMmtfY2ssCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1gsCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAogCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fR1BUMl9TSElGVCwKIAkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LApAQCAtMTUzNyw2ICsxNTcwLDcgQEAKIAkubmFtZQkJPSAiZ3B0M19pY2siLAogCS5wYXJlbnQJCT0gJmw0X2NrLAogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX0dQVDNfU0hJRlQsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKQEAgLTE1NDYsNiArMTU4MCw3IEBACiAJLm5hbWUJCT0gImdwdDNfZmNrIiwKIAkucGFyZW50CQk9ICZmdW5jXzMya19jaywKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCwKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fRkNMS0VOMSksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9HUFQzX1NISUZULAogCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCkBAIC0xNTU5LDYgKzE1OTQsNyBAQAogCS5uYW1lCQk9ICJncHQ0X2ljayIsCiAJLnBhcmVudAkJPSAmbDRfY2ssCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1gsCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAogCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fR1BUNF9TSElGVCwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLApAQCAtMTU2OCw2ICsxNjA0LDcgQEAKIAkubmFtZQkJPSAiZ3B0NF9mY2siLAogCS5wYXJlbnQJCT0gJmZ1bmNfMzJrX2NrLAogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9GQ0xLRU4xKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX0dQVDRfU0hJRlQsCiAJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKQEAgLTE1ODEsNiArMTYxOCw3IEBACiAJLm5hbWUJCT0gImdwdDVfaWNrIiwKIAkucGFyZW50CQk9ICZsNF9jaywKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCwKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9HUFQ1X1NISUZULAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCkBAIC0xNTkwLDYgKzE2MjgsNyBAQAogCS5uYW1lCQk9ICJncHQ1X2ZjayIsCiAJLnBhcmVudAkJPSAmZnVuY18zMmtfY2ssCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1gsCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAogCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fR1BUNV9TSElGVCwKIAkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LApAQCAtMTYwMyw2ICsxNjQyLDcgQEAKIAkubmFtZQkJPSAiZ3B0Nl9pY2siLAogCS5wYXJlbnQJCT0gJmw0X2NrLAogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX0dQVDZfU0hJRlQsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKQEAgLTE2MTIsNiArMTY1Miw3IEBACiAJLm5hbWUJCT0gImdwdDZfZmNrIiwKIAkucGFyZW50CQk9ICZmdW5jXzMya19jaywKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCwKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fRkNMS0VOMSksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9HUFQ2X1NISUZULAogCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCkBAIC0xNjM0LDYgKzE2NzUsNyBAQAogCS5uYW1lCQk9ICJncHQ3X2ZjayIsCiAJLnBhcmVudAkJPSAmZnVuY18zMmtfY2ssCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1gsCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAogCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fR1BUN19TSElGVCwKIAkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LApAQCAtMTY0Nyw2ICsxNjg5LDcgQEAKIAkubmFtZQkJPSAiZ3B0OF9pY2siLAogCS5wYXJlbnQJCT0gJmw0X2NrLAogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX0dQVDhfU0hJRlQsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKQEAgLTE2NTYsNiArMTY5OSw3IEBACiAJLm5hbWUJCT0gImdwdDhfZmNrIiwKIAkucGFyZW50CQk9ICZmdW5jXzMya19jaywKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCwKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fRkNMS0VOMSksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9HUFQ4X1NISUZULAogCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCkBAIC0xNjY5LDYgKzE3MTMsNyBAQAogCS5uYW1lCQk9ICJncHQ5X2ljayIsCiAJLnBhcmVudAkJPSAmbDRfY2ssCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1gsCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAogCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fR1BUOV9TSElGVCwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLApAQCAtMTY3OCw2ICsxNzIzLDcgQEAKIAkubmFtZQkJPSAiZ3B0OV9mY2siLAogCS5wYXJlbnQJCT0gJmZ1bmNfMzJrX2NrLAogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9GQ0xLRU4xKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX0dQVDlfU0hJRlQsCiAJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKQEAgLTE2OTEsNiArMTczNyw3IEBACiAJLm5hbWUJCT0gImdwdDEwX2ljayIsCiAJLnBhcmVudAkJPSAmbDRfY2ssCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1gsCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAogCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fR1BUMTBfU0hJRlQsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKQEAgLTE3MDAsNiArMTc0Nyw3IEBACiAJLm5hbWUJCT0gImdwdDEwX2ZjayIsCiAJLnBhcmVudAkJPSAmZnVuY18zMmtfY2ssCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1gsCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAogCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fR1BUMTBfU0hJRlQsCiAJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKQEAgLTE3MTMsNiArMTc2MSw3IEBACiAJLm5hbWUJCT0gImdwdDExX2ljayIsCiAJLnBhcmVudAkJPSAmbDRfY2ssCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1gsCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAogCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fR1BUMTFfU0hJRlQsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKQEAgLTE3MjIsNiArMTc3MSw3IEBACiAJLm5hbWUJCT0gImdwdDExX2ZjayIsCiAJLnBhcmVudAkJPSAmZnVuY18zMmtfY2ssCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1gsCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAogCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fR1BUMTFfU0hJRlQsCiAJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKQEAgLTE3MzUsNiArMTc4NSw3IEBACiAJLm5hbWUJCT0gImdwdDEyX2ljayIsCiAJLnBhcmVudAkJPSAmbDRfY2ssCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1gsCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAogCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fR1BUMTJfU0hJRlQsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKQEAgLTE3NDQsNiArMTc5NSw3IEBACiAJLm5hbWUJCT0gImdwdDEyX2ZjayIsCiAJLnBhcmVudAkJPSAmZnVuY18zMmtfY2ssCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1gsCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAogCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fR1BUMTJfU0hJRlQsCiAJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKQEAgLTE3NTgsNiArMTgxMCw3IEBACiAJLmlkCQk9IDEsCiAJLnBhcmVudAkJPSAmbDRfY2ssCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1gsCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAogCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fTUNCU1AxX1NISUZULAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCkBAIC0xNzY4LDYgKzE4MjEsNyBAQAogCS5pZAkJPSAxLAogCS5wYXJlbnQJCT0gJmZ1bmNfOTZtX2NrLAogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9GQ0xLRU4xKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX01DQlNQMV9TSElGVCwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLApAQCAtMTc3OCw2ICsxODMyLDcgQEAKIAkuaWQJCT0gMiwKIAkucGFyZW50CQk9ICZsNF9jaywKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCwKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9NQ0JTUDJfU0hJRlQsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKQEAgLTE3ODgsNiArMTg0Myw3IEBACiAJLmlkCQk9IDIsCiAJLnBhcmVudAkJPSAmZnVuY185Nm1fY2ssCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1gsCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAogCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fTUNCU1AyX1NISUZULAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCkBAIC0xNzk4LDYgKzE4NTQsNyBAQAogCS5pZAkJPSAzLAogCS5wYXJlbnQJCT0gJmw0X2NrLAogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQzWCwKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMiksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMjQzMF9FTl9NQ0JTUDNfU0hJRlQsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKQEAgLTE4MDgsNiArMTg2NSw3IEBACiAJLmlkCQk9IDMsCiAJLnBhcmVudAkJPSAmZnVuY185Nm1fY2ssCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDNYLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBPTUFQMjRYWF9DTV9GQ0xLRU4yKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAyNDMwX0VOX01DQlNQM19TSElGVCwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLApAQCAtMTgxOCw2ICsxODc2LDcgQEAKIAkuaWQJCT0gNCwKIAkucGFyZW50CQk9ICZsNF9jaywKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0M1gsCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjIpLAogCS5lbmFibGVfYml0CT0gT01BUDI0MzBfRU5fTUNCU1A0X1NISUZULAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCkBAIC0xODI4LDYgKzE4ODcsNyBAQAogCS5pZAkJPSA0LAogCS5wYXJlbnQJCT0gJmZ1bmNfOTZtX2NrLAogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQzWCwKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgT01BUDI0WFhfQ01fRkNMS0VOMiksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMjQzMF9FTl9NQ0JTUDRfU0hJRlQsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKQEAgLTE4MzgsNiArMTg5OCw3IEBACiAJLmlkCQk9IDUsCiAJLnBhcmVudAkJPSAmbDRfY2ssCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDNYLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4yKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAyNDMwX0VOX01DQlNQNV9TSElGVCwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLApAQCAtMTg0OCw2ICsxOTA5LDcgQEAKIAkuaWQJCT0gNSwKIAkucGFyZW50CQk9ICZmdW5jXzk2bV9jaywKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0M1gsCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIE9NQVAyNFhYX0NNX0ZDTEtFTjIpLAogCS5lbmFibGVfYml0CT0gT01BUDI0MzBfRU5fTUNCU1A1X1NISUZULAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCkBAIC0xODU3LDYgKzE5MTksNyBAQAogCS5uYW1lCQk9ICJtY3NwaV9pY2siLAogCS5pZAkJPSAxLAogCS5wYXJlbnQJCT0gJmw0X2NrLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX01DU1BJMV9TSElGVCwKQEAgLTE4NjgsNiArMTkzMSw3IEBACiAJLmlkCQk9IDEsCiAJLnBhcmVudAkJPSAmZnVuY180OG1fY2ssCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1gsCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAogCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fTUNTUEkxX1NISUZULAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCkBAIC0xODc4LDYgKzE5NDIsNyBAQAogCS5pZAkJPSAyLAogCS5wYXJlbnQJCT0gJmw0X2NrLAogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX01DU1BJMl9TSElGVCwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLApAQCAtMTg4OCw2ICsxOTUzLDcgQEAKIAkuaWQJCT0gMiwKIAkucGFyZW50CQk9ICZmdW5jXzQ4bV9jaywKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCwKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fRkNMS0VOMSksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9NQ1NQSTJfU0hJRlQsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKQEAgLTE4OTgsNiArMTk2NCw3IEBACiAJLmlkCQk9IDMsCiAJLnBhcmVudAkJPSAmbDRfY2ssCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDNYLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4yKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAyNDMwX0VOX01DU1BJM19TSElGVCwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLApAQCAtMTkwOCw2ICsxOTc1LDcgQEAKIAkuaWQJCT0gMywKIAkucGFyZW50CQk9ICZmdW5jXzQ4bV9jaywKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0M1gsCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIE9NQVAyNFhYX0NNX0ZDTEtFTjIpLAogCS5lbmFibGVfYml0CT0gT01BUDI0MzBfRU5fTUNTUEkzX1NISUZULAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCkBAIC0xOTE3LDYgKzE5ODUsNyBAQAogCS5uYW1lCQk9ICJ1YXJ0MV9pY2siLAogCS5wYXJlbnQJCT0gJmw0X2NrLAogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX1VBUlQxX1NISUZULAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCkBAIC0xOTI2LDYgKzE5OTUsNyBAQAogCS5uYW1lCQk9ICJ1YXJ0MV9mY2siLAogCS5wYXJlbnQJCT0gJmZ1bmNfNDhtX2NrLAogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9GQ0xLRU4xKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX1VBUlQxX1NISUZULAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCkBAIC0xOTM1LDYgKzIwMDUsNyBAQAogCS5uYW1lCQk9ICJ1YXJ0Ml9pY2siLAogCS5wYXJlbnQJCT0gJmw0X2NrLAogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX1VBUlQyX1NISUZULAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCkBAIC0xOTQ0LDYgKzIwMTUsNyBAQAogCS5uYW1lCQk9ICJ1YXJ0Ml9mY2siLAogCS5wYXJlbnQJCT0gJmZ1bmNfNDhtX2NrLAogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9GQ0xLRU4xKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX1VBUlQyX1NISUZULAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCkBAIC0xOTUzLDYgKzIwMjUsNyBAQAogCS5uYW1lCQk9ICJ1YXJ0M19pY2siLAogCS5wYXJlbnQJCT0gJmw0X2NrLAogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4yKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX1VBUlQzX1NISUZULAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCkBAIC0xOTYyLDYgKzIwMzUsNyBAQAogCS5uYW1lCQk9ICJ1YXJ0M19mY2siLAogCS5wYXJlbnQJCT0gJmZ1bmNfNDhtX2NrLAogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBPTUFQMjRYWF9DTV9GQ0xLRU4yKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX1VBUlQzX1NISUZULAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCkBAIC0xOTcxLDYgKzIwNDUsNyBAQAogCS5uYW1lCQk9ICJncGlvc19pY2siLAogCS5wYXJlbnQJCT0gJmw0X2NrLAogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKFdLVVBfTU9ELCBDTV9JQ0xLRU4pLAogCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fR1BJT1NfU0hJRlQsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKQEAgLTE5ODAsNiArMjA1NSw3IEBACiAJLm5hbWUJCT0gImdwaW9zX2ZjayIsCiAJLnBhcmVudAkJPSAmZnVuY18zMmtfY2ssCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1gsCisJLmNsa2RtX25hbWUJPSAid2t1cF9jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoV0tVUF9NT0QsIENNX0ZDTEtFTiksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9HUElPU19TSElGVCwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLApAQCAtMTk4OSw2ICsyMDY1LDcgQEAKIAkubmFtZQkJPSAibXB1X3dkdF9pY2siLAogCS5wYXJlbnQJCT0gJmw0X2NrLAogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKFdLVVBfTU9ELCBDTV9JQ0xLRU4pLAogCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fTVBVX1dEVF9TSElGVCwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLApAQCAtMTk5OCw2ICsyMDc1LDcgQEAKIAkubmFtZQkJPSAibXB1X3dkdF9mY2siLAogCS5wYXJlbnQJCT0gJmZ1bmNfMzJrX2NrLAogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYLAorCS5jbGtkbV9uYW1lCT0gIndrdXBfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKFdLVVBfTU9ELCBDTV9GQ0xLRU4pLAogCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fTVBVX1dEVF9TSElGVCwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLApAQCAtMjAwNiwzMSArMjA4NCw0MCBAQAogc3RhdGljIHN0cnVjdCBjbGsgc3luY18zMmtfaWNrID0gewogCS5uYW1lCQk9ICJzeW5jXzMya19pY2siLAogCS5wYXJlbnQJCT0gJmw0X2NrLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYIHwgRU5BQkxFX09OX0lOSVQsCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1ggfAorCQkJCUVOQUJMRV9PTl9JTklULAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKFdLVVBfTU9ELCBDTV9JQ0xLRU4pLAogCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fMzJLU1lOQ19TSElGVCwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKKwogc3RhdGljIHN0cnVjdCBjbGsgd2R0MV9pY2sgPSB7CiAJLm5hbWUJCT0gIndkdDFfaWNrIiwKIAkucGFyZW50CQk9ICZsNF9jaywKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCwKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihXS1VQX01PRCwgQ01fSUNMS0VOKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX1dEVDFfU0hJRlQsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CisKIHN0YXRpYyBzdHJ1Y3QgY2xrIG9tYXBjdHJsX2ljayA9IHsKIAkubmFtZQkJPSAib21hcGN0cmxfaWNrIiwKIAkucGFyZW50CQk9ICZsNF9jaywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCB8IEVOQUJMRV9PTl9JTklULAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYIHwKKwkJCQlFTkFCTEVfT05fSU5JVCwKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihXS1VQX01PRCwgQ01fSUNMS0VOKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX09NQVBDVFJMX1NISUZULAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OworCiBzdGF0aWMgc3RydWN0IGNsayBpY3JfaWNrID0gewogCS5uYW1lCQk9ICJpY3JfaWNrIiwKIAkucGFyZW50CQk9ICZsNF9jaywKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0M1gsCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoV0tVUF9NT0QsIENNX0lDTEtFTiksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMjQzMF9FTl9JQ1JfU0hJRlQsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKQEAgLTIwNDAsMTUgKzIxMjcsMjIgQEAKIAkubmFtZQkJPSAiY2FtX2ljayIsCiAJLnBhcmVudAkJPSAmbDRfY2ssCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1gsCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAogCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fQ0FNX1NISUZULAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCisvKgorICogY2FtX2ZjayBjb250cm9scyBib3RoIENBTV9NQ0xLIGFuZCBDQU1fRkNMSy4gIEl0IHNob3VsZCBwcm9iYWJseSBiZQorICogc3BsaXQgaW50byB0d28gc2VwYXJhdGUgY2xvY2tzLCBzaW5jZSB0aGUgcGFyZW50IGNsb2NrcyBhcmUgZGlmZmVyZW50CisgKiBhbmQgdGhlIGNsb2NrZG9tYWlucyBhcmUgYWxzbyBkaWZmZXJlbnQuCisgKi8KIHN0YXRpYyBzdHJ1Y3QgY2xrIGNhbV9mY2sgPSB7CiAJLm5hbWUJCT0gImNhbV9mY2siLAogCS5wYXJlbnQJCT0gJmZ1bmNfOTZtX2NrLAogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDNfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9GQ0xLRU4xKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX0NBTV9TSElGVCwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLApAQCAtMjA1OCw2ICsyMTUyLDcgQEAKIAkubmFtZQkJPSAibWFpbGJveGVzX2ljayIsCiAJLnBhcmVudAkJPSAmbDRfY2ssCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1gsCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAogCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fTUFJTEJPWEVTX1NISUZULAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCkBAIC0yMDY3LDYgKzIxNjIsNyBAQAogCS5uYW1lCQk9ICJ3ZHQ0X2ljayIsCiAJLnBhcmVudAkJPSAmbDRfY2ssCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1gsCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAogCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fV0RUNF9TSElGVCwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLApAQCAtMjA3Niw2ICsyMTcyLDcgQEAKIAkubmFtZQkJPSAid2R0NF9mY2siLAogCS5wYXJlbnQJCT0gJmZ1bmNfMzJrX2NrLAogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9GQ0xLRU4xKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX1dEVDRfU0hJRlQsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKQEAgLTIwODUsNiArMjE4Miw3IEBACiAJLm5hbWUJCT0gIndkdDNfaWNrIiwKIAkucGFyZW50CQk9ICZsNF9jaywKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlgsCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAogCS5lbmFibGVfYml0CT0gT01BUDI0MjBfRU5fV0RUM19TSElGVCwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLApAQCAtMjA5NCw2ICsyMTkyLDcgQEAKIAkubmFtZQkJPSAid2R0M19mY2siLAogCS5wYXJlbnQJCT0gJmZ1bmNfMzJrX2NrLAogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCwKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fRkNMS0VOMSksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMjQyMF9FTl9XRFQzX1NISUZULAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCkBAIC0yMTAzLDYgKzIyMDIsNyBAQAogCS5uYW1lCQk9ICJtc3Byb19pY2siLAogCS5wYXJlbnQJCT0gJmw0X2NrLAogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX01TUFJPX1NISUZULAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCkBAIC0yMTEyLDYgKzIyMTIsNyBAQAogCS5uYW1lCQk9ICJtc3Byb19mY2siLAogCS5wYXJlbnQJCT0gJmZ1bmNfOTZtX2NrLAogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9GQ0xLRU4xKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX01TUFJPX1NISUZULAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCkBAIC0yMTIxLDYgKzIyMjIsNyBAQAogCS5uYW1lCQk9ICJtbWNfaWNrIiwKIAkucGFyZW50CQk9ICZsNF9jaywKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlgsCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAogCS5lbmFibGVfYml0CT0gT01BUDI0MjBfRU5fTU1DX1NISUZULAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCkBAIC0yMTMwLDYgKzIyMzIsNyBAQAogCS5uYW1lCQk9ICJtbWNfZmNrIiwKIAkucGFyZW50CQk9ICZmdW5jXzk2bV9jaywKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlgsCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAogCS5lbmFibGVfYml0CT0gT01BUDI0MjBfRU5fTU1DX1NISUZULAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCkBAIC0yMTM5LDYgKzIyNDIsNyBAQAogCS5uYW1lCQk9ICJmYWNfaWNrIiwKIAkucGFyZW50CQk9ICZsNF9jaywKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCwKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9GQUNfU0hJRlQsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKQEAgLTIxNDgsNiArMjI1Miw3IEBACiAJLm5hbWUJCT0gImZhY19mY2siLAogCS5wYXJlbnQJCT0gJmZ1bmNfMTJtX2NrLAogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9GQ0xLRU4xKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX0ZBQ19TSElGVCwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLApAQCAtMjE1Nyw2ICsyMjYyLDcgQEAKIAkubmFtZQkJPSAiZWFjX2ljayIsCiAJLnBhcmVudAkJPSAmbDRfY2ssCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAyNDIwX0VOX0VBQ19TSElGVCwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLApAQCAtMjE2Niw2ICsyMjcyLDcgQEAKIAkubmFtZQkJPSAiZWFjX2ZjayIsCiAJLnBhcmVudAkJPSAmZnVuY185Nm1fY2ssCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9GQ0xLRU4xKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAyNDIwX0VOX0VBQ19TSElGVCwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLApAQCAtMjE3NSw2ICsyMjgyLDcgQEAKIAkubmFtZQkJPSAiaGRxX2ljayIsCiAJLnBhcmVudAkJPSAmbDRfY2ssCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1gsCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAogCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fSERRX1NISUZULAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCkBAIC0yMTg0LDYgKzIyOTIsNyBAQAogCS5uYW1lCQk9ICJoZHFfZmNrIiwKIAkucGFyZW50CQk9ICZmdW5jXzEybV9jaywKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCwKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fRkNMS0VOMSksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9IRFFfU0hJRlQsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKQEAgLTIxOTQsNiArMjMwMyw3IEBACiAJLmlkCQk9IDIsCiAJLnBhcmVudAkJPSAmbDRfY2ssCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1gsCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAogCS5lbmFibGVfYml0CT0gT01BUDI0MjBfRU5fSTJDMl9TSElGVCwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLApAQCAtMjIwNCw2ICsyMzE0LDcgQEAKIAkuaWQJCT0gMiwKIAkucGFyZW50CQk9ICZmdW5jXzEybV9jaywKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlgsCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAogCS5lbmFibGVfYml0CT0gT01BUDI0MjBfRU5fSTJDMl9TSElGVCwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLApAQCAtMjIxNCw2ICsyMzI1LDcgQEAKIAkuaWQJCT0gMiwKIAkucGFyZW50CQk9ICZmdW5jXzk2bV9jaywKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0M1gsCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIE9NQVAyNFhYX0NNX0ZDTEtFTjIpLAogCS5lbmFibGVfYml0CT0gT01BUDI0MzBfRU5fSTJDSFMyX1NISUZULAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCkBAIC0yMjI0LDYgKzIzMzYsNyBAQAogCS5pZAkJPSAxLAogCS5wYXJlbnQJCT0gJmw0X2NrLAogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAyNDIwX0VOX0kyQzFfU0hJRlQsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKQEAgLTIyMzQsNiArMjM0Nyw3IEBACiAJLmlkCQk9IDEsCiAJLnBhcmVudAkJPSAmZnVuY18xMm1fY2ssCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9GQ0xLRU4xKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAyNDIwX0VOX0kyQzFfU0hJRlQsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKQEAgLTIyNDQsNiArMjM1OCw3IEBACiAJLmlkCQk9IDEsCiAJLnBhcmVudAkJPSAmZnVuY185Nm1fY2ssCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDNYLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBPTUFQMjRYWF9DTV9GQ0xLRU4yKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAyNDMwX0VOX0kyQ0hTMV9TSElGVCwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLApAQCAtMjI1Miw3ICsyMzY3LDkgQEAKIHN0YXRpYyBzdHJ1Y3QgY2xrIGdwbWNfZmNrID0gewogCS5uYW1lCQk9ICJncG1jX2ZjayIsCiAJLnBhcmVudAkJPSAmY29yZV9sM19jaywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCB8IEVOQUJMRV9PTl9JTklULAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYIHwKKwkJCQlFTkFCTEVfT05fSU5JVCwKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2wzX2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIApAQCAtMjI2MCw2ICsyMzc3LDcgQEAKIAkubmFtZQkJPSAic2RtYV9mY2siLAogCS5wYXJlbnQJCT0gJmNvcmVfbDNfY2ssCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1gsCisJLmNsa2RtX25hbWUJPSAiY29yZV9sM19jbGtkbSIsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKQEAgLTIyNjcsNiArMjM4NSw3IEBACiAJLm5hbWUJCT0gInNkbWFfaWNrIiwKIAkucGFyZW50CQk9ICZsNF9jaywKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCwKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2wzX2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIApAQCAtMjI3NCw2ICsyMzkzLDcgQEAKIAkubmFtZQkJPSAidmx5bnFfaWNrIiwKIAkucGFyZW50CQk9ICZjb3JlX2wzX2NrLAogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCwKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2wzX2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMjQyMF9FTl9WTFlOUV9TSElGVCwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLApAQCAtMjMwOCw2ICsyNDI4LDcgQEAKIAkubmFtZQkJPSAidmx5bnFfZmNrIiwKIAkucGFyZW50CQk9ICZmdW5jXzk2bV9jaywKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBERUxBWUVEX0FQUCwKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2wzX2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fRkNMS0VOMSksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMjQyMF9FTl9WTFlOUV9TSElGVCwKIAkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LApAQCAtMjMyMyw2ICsyNDQ0LDcgQEAKIAkubmFtZQkJPSAic2RyY19pY2siLAogCS5wYXJlbnQJCT0gJmw0X2NrLAogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQzWCB8IEVOQUJMRV9PTl9JTklULAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4zKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAyNDMwX0VOX1NEUkNfU0hJRlQsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKQEAgLTIzMzIsNiArMjQ1NCw3IEBACiAJLm5hbWUJCT0gImRlc19pY2siLAogCS5wYXJlbnQJCT0gJmw0X2NrLAogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQzWCB8IENMT0NLX0lOX09NQVAyNDJYLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBPTUFQMjRYWF9DTV9JQ0xLRU40KSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX0RFU19TSElGVCwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLApAQCAtMjM0MSw2ICsyNDY0LDcgQEAKIAkubmFtZQkJPSAic2hhX2ljayIsCiAJLnBhcmVudAkJPSAmbDRfY2ssCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDNYIHwgQ0xPQ0tfSU5fT01BUDI0MlgsCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIE9NQVAyNFhYX0NNX0lDTEtFTjQpLAogCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fU0hBX1NISUZULAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCkBAIC0yMzUwLDYgKzI0NzQsNyBAQAogCS5uYW1lCQk9ICJybmdfaWNrIiwKIAkucGFyZW50CQk9ICZsNF9jaywKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0M1ggfCBDTE9DS19JTl9PTUFQMjQyWCwKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgT01BUDI0WFhfQ01fSUNMS0VONCksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9STkdfU0hJRlQsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKQEAgLTIzNTksNiArMjQ4NCw3IEBACiAJLm5hbWUJCT0gImFlc19pY2siLAogCS5wYXJlbnQJCT0gJmw0X2NrLAogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQzWCB8IENMT0NLX0lOX09NQVAyNDJYLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBPTUFQMjRYWF9DTV9JQ0xLRU40KSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX0FFU19TSElGVCwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLApAQCAtMjM2OCw2ICsyNDk0LDcgQEAKIAkubmFtZQkJPSAicGthX2ljayIsCiAJLnBhcmVudAkJPSAmbDRfY2ssCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDNYIHwgQ0xPQ0tfSU5fT01BUDI0MlgsCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIE9NQVAyNFhYX0NNX0lDTEtFTjQpLAogCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fUEtBX1NISUZULAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCkBAIC0yMzc3LDYgKzI1MDQsNyBAQAogCS5uYW1lCQk9ICJ1c2JfZmNrIiwKIAkucGFyZW50CQk9ICZmdW5jXzQ4bV9jaywKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0M1ggfCBDTE9DS19JTl9PTUFQMjQyWCwKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2wzX2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgT01BUDI0WFhfQ01fRkNMS0VOMiksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9VU0JfU0hJRlQsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKQEAgLTIzODYsNiArMjUxNCw3IEBACiAJLm5hbWUJCT0gInVzYmhzX2ljayIsCiAJLnBhcmVudAkJPSAmY29yZV9sM19jaywKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0M1gsCisJLmNsa2RtX25hbWUJPSAiY29yZV9sM19jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjIpLAogCS5lbmFibGVfYml0CT0gT01BUDI0MzBfRU5fVVNCSFNfU0hJRlQsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKQEAgLTIzOTYsNiArMjUyNSw3IEBACiAJLmlkCQk9IDEsCiAJLnBhcmVudAkJPSAmbDRfY2ssCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDNYLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4yKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAyNDMwX0VOX01NQ0hTMV9TSElGVCwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLApAQCAtMjQwNiw2ICsyNTM2LDcgQEAKIAkuaWQJCT0gMSwKIAkucGFyZW50CQk9ICZmdW5jXzk2bV9jaywKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0M1gsCisJLmNsa2RtX25hbWUJPSAiY29yZV9sM19jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIE9NQVAyNFhYX0NNX0ZDTEtFTjIpLAogCS5lbmFibGVfYml0CT0gT01BUDI0MzBfRU5fTU1DSFMxX1NISUZULAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCkBAIC0yNDE2LDYgKzI1NDcsNyBAQAogCS5pZAkJPSAyLAogCS5wYXJlbnQJCT0gJmw0X2NrLAogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQzWCwKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMiksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMjQzMF9FTl9NTUNIUzJfU0hJRlQsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKQEAgLTI0MzUsNiArMjU2Nyw3IEBACiAJLm5hbWUJCT0gImdwaW81X2ljayIsCiAJLnBhcmVudAkJPSAmbDRfY2ssCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDNYLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4yKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAyNDMwX0VOX0dQSU81X1NISUZULAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCkBAIC0yNDQ0LDYgKzI1NzcsNyBAQAogCS5uYW1lCQk9ICJncGlvNV9mY2siLAogCS5wYXJlbnQJCT0gJmZ1bmNfMzJrX2NrLAogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQzWCwKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgT01BUDI0WFhfQ01fRkNMS0VOMiksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMjQzMF9FTl9HUElPNV9TSElGVCwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLApAQCAtMjQ1Myw2ICsyNTg3LDcgQEAKIAkubmFtZQkJPSAibWRtX2ludGNfaWNrIiwKIAkucGFyZW50CQk9ICZsNF9jaywKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0M1gsCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjIpLAogCS5lbmFibGVfYml0CT0gT01BUDI0MzBfRU5fTURNX0lOVENfU0hJRlQsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKQEAgLTI0NjMsNiArMjU5OCw3IEBACiAJLmlkCQk9IDEsCiAJLnBhcmVudAkJPSAmZnVuY18zMmtfY2ssCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDNYLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBPTUFQMjRYWF9DTV9GQ0xLRU4yKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAyNDMwX0VOX01NQ0hTREIxX1NISUZULAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCkBAIC0yNDczLDYgKzI2MDksNyBAQAogCS5pZAkJPSAyLAogCS5wYXJlbnQJCT0gJmZ1bmNfMzJrX2NrLAogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQzWCwKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgT01BUDI0WFhfQ01fRkNMS0VOMiksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMjQzMF9FTl9NTUNIU0RCMl9TSElGVCwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLApAQCAtMjU1MSw3ICsyNjg4LDYgQEAKIAkmdXNiX2w0X2ljaywKIAkvKiBMNCBkb21haW4gY2xvY2tzICovCiAJJmw0X2NrLAkJCS8qIHVzZWQgYXMgYm90aCBjb3JlX2w0IGFuZCB3dV9sNCAqLwotCSZzc2lfbDRfaWNrLAogCS8qIHZpcnR1YWwgbWV0YS1ncm91cCBjbG9jayAqLwogCSZ2aXJ0X3ByY21fc2V0LAogCS8qIGdlbmVyYWwgbDQgaW50ZXJmYWNlIGNrLCBtdWx0aS1wYXJlbnQgZnVuY3Rpb25hbCBjbGsgKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2szNHh4LmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrMzR4eC5jCmluZGV4IGU1YjQ3NWYuLjA4NGUxMTAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2szNHh4LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9jazM0eHguYwpAQCAtNjIsMTEgKzYyLDE0IEBACiBzdGF0aWMgdm9pZCBfb21hcDNfZHBsbF93cml0ZV9jbGtlbihzdHJ1Y3QgY2xrICpjbGssIHU4IGNsa2VuX2JpdHMpCiB7CiAJY29uc3Qgc3RydWN0IGRwbGxfZGF0YSAqZGQ7CisJdTMyIHY7CiAKIAlkZCA9IGNsay0+ZHBsbF9kYXRhOwogCi0JY21fcm13X3JlZ19iaXRzKGRkLT5lbmFibGVfbWFzaywgY2xrZW5fYml0cyA8PCBfX2ZmcyhkZC0+ZW5hYmxlX21hc2spLAotCQkJZGQtPmNvbnRyb2xfcmVnKTsKKwl2ID0gX19yYXdfcmVhZGwoZGQtPmNvbnRyb2xfcmVnKTsKKwl2ICY9IH5kZC0+ZW5hYmxlX21hc2s7CisJdiB8PSBjbGtlbl9iaXRzIDw8IF9fZmZzKGRkLT5lbmFibGVfbWFzayk7CisJX19yYXdfd3JpdGVsKHYsIGRkLT5jb250cm9sX3JlZyk7CiB9CiAKIC8qIF9vbWFwM193YWl0X2RwbGxfc3RhdHVzOiB3YWl0IGZvciBhIERQTEwgdG8gZW50ZXIgYSBzcGVjaWZpYyBzdGF0ZSAqLwpAQCAtODIsNyArODUsNyBAQAogCXN0YXRlIDw8PSBkZC0+aWRsZXN0X2JpdDsKIAlpZGxlc3RfbWFzayA9IDEgPDwgZGQtPmlkbGVzdF9iaXQ7CiAKLQl3aGlsZSAoKChjbV9yZWFkX3JlZyhkZC0+aWRsZXN0X3JlZykgJiBpZGxlc3RfbWFzaykgIT0gc3RhdGUpICYmCisJd2hpbGUgKCgoX19yYXdfcmVhZGwoZGQtPmlkbGVzdF9yZWcpICYgaWRsZXN0X21hc2spICE9IHN0YXRlKSAmJgogCSAgICAgICBpIDwgTUFYX0RQTExfV0FJVF9UUklFUykgewogCQlpKys7CiAJCXVkZWxheSgxKTsKQEAgLTI4NSw3ICsyODgsNyBAQAogCiAJZGQgPSBjbGstPmRwbGxfZGF0YTsKIAotCXYgPSBjbV9yZWFkX3JlZyhkZC0+YXV0b2lkbGVfcmVnKTsKKwl2ID0gX19yYXdfcmVhZGwoZGQtPmF1dG9pZGxlX3JlZyk7CiAJdiAmPSBkZC0+YXV0b2lkbGVfbWFzazsKIAl2ID4+PSBfX2ZmcyhkZC0+YXV0b2lkbGVfbWFzayk7CiAKQEAgLTMwNCw2ICszMDcsNyBAQAogc3RhdGljIHZvaWQgb21hcDNfZHBsbF9hbGxvd19pZGxlKHN0cnVjdCBjbGsgKmNsaykKIHsKIAljb25zdCBzdHJ1Y3QgZHBsbF9kYXRhICpkZDsKKwl1MzIgdjsKIAogCWlmICghY2xrIHx8ICFjbGstPmRwbGxfZGF0YSkKIAkJcmV0dXJuOwpAQCAtMzE1LDkgKzMxOSwxMCBAQAogCSAqIGJ5IHdyaXRpbmcgMHg1IGluc3RlYWQgb2YgMHgxLiAgQWRkIHNvbWUgbWVjaGFuaXNtIHRvCiAJICogb3B0aW9uYWxseSBlbnRlciB0aGlzIG1vZGUuCiAJICovCi0JY21fcm13X3JlZ19iaXRzKGRkLT5hdXRvaWRsZV9tYXNrLAotCQkJRFBMTF9BVVRPSURMRV9MT1dfUE9XRVJfU1RPUCA8PCBfX2ZmcyhkZC0+YXV0b2lkbGVfbWFzayksCi0JCQlkZC0+YXV0b2lkbGVfcmVnKTsKKwl2ID0gX19yYXdfcmVhZGwoZGQtPmF1dG9pZGxlX3JlZyk7CisJdiAmPSB+ZGQtPmF1dG9pZGxlX21hc2s7CisJdiB8PSBEUExMX0FVVE9JRExFX0xPV19QT1dFUl9TVE9QIDw8IF9fZmZzKGRkLT5hdXRvaWRsZV9tYXNrKTsKKwlfX3Jhd193cml0ZWwodiwgZGQtPmF1dG9pZGxlX3JlZyk7CiB9CiAKIC8qKgpAQCAtMzI5LDE1ICszMzQsMTcgQEAKIHN0YXRpYyB2b2lkIG9tYXAzX2RwbGxfZGVueV9pZGxlKHN0cnVjdCBjbGsgKmNsaykKIHsKIAljb25zdCBzdHJ1Y3QgZHBsbF9kYXRhICpkZDsKKwl1MzIgdjsKIAogCWlmICghY2xrIHx8ICFjbGstPmRwbGxfZGF0YSkKIAkJcmV0dXJuOwogCiAJZGQgPSBjbGstPmRwbGxfZGF0YTsKIAotCWNtX3Jtd19yZWdfYml0cyhkZC0+YXV0b2lkbGVfbWFzaywKLQkJCURQTExfQVVUT0lETEVfRElTQUJMRSA8PCBfX2ZmcyhkZC0+YXV0b2lkbGVfbWFzayksCi0JCQlkZC0+YXV0b2lkbGVfcmVnKTsKKwl2ID0gX19yYXdfcmVhZGwoZGQtPmF1dG9pZGxlX3JlZyk7CisJdiAmPSB+ZGQtPmF1dG9pZGxlX21hc2s7CisJdiB8PSBEUExMX0FVVE9JRExFX0RJU0FCTEUgPDwgX19mZnMoZGQtPmF1dG9pZGxlX21hc2spOworCV9fcmF3X3dyaXRlbCh2LCBkZC0+YXV0b2lkbGVfcmVnKTsKIH0KIAogLyogQ2xvY2sgY29udHJvbCBmb3IgRFBMTCBvdXRwdXRzICovCkBAIC00ODIsOCArNDg5LDEwIEBACiAJZm9yIChjbGtwID0gb25jaGlwXzM0eHhfY2xrczsKIAkgICAgIGNsa3AgPCBvbmNoaXBfMzR4eF9jbGtzICsgQVJSQVlfU0laRShvbmNoaXBfMzR4eF9jbGtzKTsKIAkgICAgIGNsa3ArKykgewotCQlpZiAoKCpjbGtwKS0+ZmxhZ3MgJiBjcHVfY2xrZmxnKQorCQlpZiAoKCpjbGtwKS0+ZmxhZ3MgJiBjcHVfY2xrZmxnKSB7CiAJCQljbGtfcmVnaXN0ZXIoKmNsa3ApOworCQkJb21hcDJfaW5pdF9jbGtfY2xrZG0oKmNsa3ApOworCQl9CiAJfQogCiAJLyogUkVWSVNJVDogTm90IHlldCByZWFkeSBmb3IgT01BUDMgKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2szNHh4LmggYi9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrMzR4eC5oCmluZGV4IGVjNjY0NDUuLmMzOGE4YTAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2szNHh4LmgKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9jazM0eHguaApAQCAtNDc4LDcgKzQ3OCw3IEBACiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbCBjb3JlX2NrX2Nsa3NlbFtdID0gewotCXsgLnBhcmVudCA9ICZzeXNfY2ssICAgICAgLnJhdGVzID0gZHBsbF9ieXBhc3NfcmF0ZXMgfSwKKwl7IC5wYXJlbnQgPSAmc3lzX2NrLAkgIC5yYXRlcyA9IGRwbGxfYnlwYXNzX3JhdGVzIH0sCiAJeyAucGFyZW50ID0gJmRwbGwzX20yX2NrLCAucmF0ZXMgPSBkcGxsX2xvY2tlZF9yYXRlcyB9LAogCXsgLnBhcmVudCA9IE5VTEwgfQogfTsKQEAgLTQ5NSw3ICs0OTUsNyBAQAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWwgZHBsbDNfbTJ4Ml9ja19jbGtzZWxbXSA9IHsKLQl7IC5wYXJlbnQgPSAmc3lzX2NrLCAgICAgIC5yYXRlcyA9IGRwbGxfYnlwYXNzX3JhdGVzIH0sCisJeyAucGFyZW50ID0gJnN5c19jaywJICAucmF0ZXMgPSBkcGxsX2J5cGFzc19yYXRlcyB9LAogCXsgLnBhcmVudCA9ICZkcGxsM194Ml9jaywgLnJhdGVzID0gZHBsbF9sb2NrZWRfcmF0ZXMgfSwKIAl7IC5wYXJlbnQgPSBOVUxMIH0KIH07CkBAIC01NDEsNyArNTQxLDcgQEAKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsIGVtdV9jb3JlX2Fsd29uX2NrX2Nsa3NlbFtdID0gewotCXsgLnBhcmVudCA9ICZzeXNfY2ssICAgICAgICAucmF0ZXMgPSBkcGxsX2J5cGFzc19yYXRlcyB9LAorCXsgLnBhcmVudCA9ICZzeXNfY2ssCSAgICAucmF0ZXMgPSBkcGxsX2J5cGFzc19yYXRlcyB9LAogCXsgLnBhcmVudCA9ICZkcGxsM19tM3gyX2NrLCAucmF0ZXMgPSBkcGxsX2xvY2tlZF9yYXRlcyB9LAogCXsgLnBhcmVudCA9IE5VTEwgfQogfTsKQEAgLTYzMyw3ICs2MzMsNyBAQAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWwgb21hcF85Nm1fYWx3b25fZmNrX2Nsa3NlbFtdID0gewotCXsgLnBhcmVudCA9ICZzeXNfY2ssICAgICAgICAucmF0ZXMgPSBkcGxsX2J5cGFzc19yYXRlcyB9LAorCXsgLnBhcmVudCA9ICZzeXNfY2ssCSAgICAucmF0ZXMgPSBkcGxsX2J5cGFzc19yYXRlcyB9LAogCXsgLnBhcmVudCA9ICZkcGxsNF9tMngyX2NrLCAucmF0ZXMgPSBkcGxsX2xvY2tlZF9yYXRlcyB9LAogCXsgLnBhcmVudCA9IE5VTEwgfQogfTsKQEAgLTY1OSw3ICs2NTksNyBAQAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWwgY21fOTZtX2Zja19jbGtzZWxbXSA9IHsKLQl7IC5wYXJlbnQgPSAmc3lzX2NrLCAgICAgICAgLnJhdGVzID0gZHBsbF9ieXBhc3NfcmF0ZXMgfSwKKwl7IC5wYXJlbnQgPSAmc3lzX2NrLAkgICAgLnJhdGVzID0gZHBsbF9ieXBhc3NfcmF0ZXMgfSwKIAl7IC5wYXJlbnQgPSAmZHBsbDRfbTJ4Ml9jaywgLnJhdGVzID0gZHBsbF9sb2NrZWRfcmF0ZXMgfSwKIAl7IC5wYXJlbnQgPSBOVUxMIH0KIH07CkBAIC03MDEsNyArNzAxLDcgQEAKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsIHZpcnRfb21hcF81NG1fZmNrX2Nsa3NlbFtdID0gewotCXsgLnBhcmVudCA9ICZzeXNfY2ssICAgICAgICAucmF0ZXMgPSBkcGxsX2J5cGFzc19yYXRlcyB9LAorCXsgLnBhcmVudCA9ICZzeXNfY2ssCSAgICAucmF0ZXMgPSBkcGxsX2J5cGFzc19yYXRlcyB9LAogCXsgLnBhcmVudCA9ICZkcGxsNF9tM3gyX2NrLCAucmF0ZXMgPSBkcGxsX2xvY2tlZF9yYXRlcyB9LAogCXsgLnBhcmVudCA9IE5VTEwgfQogfTsKQEAgLTkxMSw3ICs5MTEsNyBAQAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWwgb21hcF8xMjBtX2Zja19jbGtzZWxbXSA9IHsKLQl7IC5wYXJlbnQgPSAmc3lzX2NrLCAgICAgIC5yYXRlcyA9IGRwbGxfYnlwYXNzX3JhdGVzIH0sCisJeyAucGFyZW50ID0gJnN5c19jaywJICAucmF0ZXMgPSBkcGxsX2J5cGFzc19yYXRlcyB9LAogCXsgLnBhcmVudCA9ICZkcGxsNV9tMl9jaywgLnJhdGVzID0gZHBsbF9sb2NrZWRfcmF0ZXMgfSwKIAl7IC5wYXJlbnQgPSBOVUxMIH0KIH07CkBAIC05MTksMTMgKzkxOSwxMyBAQAogc3RhdGljIHN0cnVjdCBjbGsgb21hcF8xMjBtX2ZjayA9IHsKIAkubmFtZQkJPSAib21hcF8xMjBtX2ZjayIsCiAJLnBhcmVudAkJPSAmZHBsbDVfbTJfY2ssCi0JLmluaXQgICAgICAgICAgID0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKLQkuY2xrc2VsX3JlZyAgICAgPSBPTUFQX0NNX1JFR0FERFIoUExMX01PRCwgQ01fSURMRVNUMiksCi0JLmNsa3NlbF9tYXNrICAgID0gT01BUDM0MzBFUzJfU1RfUEVSSVBIMl9DTEtfTUFTSywKLQkuY2xrc2VsICAgICAgICAgPSBvbWFwXzEyMG1fZmNrX2Nsa3NlbCwKKwkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAorCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKFBMTF9NT0QsIENNX0lETEVTVDIpLAorCS5jbGtzZWxfbWFzawk9IE9NQVAzNDMwRVMyX1NUX1BFUklQSDJfQ0xLX01BU0ssCisJLmNsa3NlbAkJPSBvbWFwXzEyMG1fZmNrX2Nsa3NlbCwKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0MzBFUzIgfCBSQVRFX1BST1BBR0FURVMgfAogCQkJCVBBUkVOVF9DT05UUk9MU19DTE9DSywKLQkucmVjYWxjICAgICAgICAgPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKKwkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAogfTsKIAogLyogQ00gRVhURVJOQUwgQ0xPQ0sgT1VUUFVUUyAqLwpAQCAtMTAzNCw3ICsxMDM0LDcgQEAKICAqIGNhbGxlZCAnZHBsbDFfZmNrJwogICovCiBzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbCBtcHVfY2xrc2VsW10gPSB7Ci0JeyAucGFyZW50ID0gJmRwbGwxX2ZjaywgICAgIC5yYXRlcyA9IGRwbGxfYnlwYXNzX3JhdGVzIH0sCisJeyAucGFyZW50ID0gJmRwbGwxX2ZjaywJICAgIC5yYXRlcyA9IGRwbGxfYnlwYXNzX3JhdGVzIH0sCiAJeyAucGFyZW50ID0gJmRwbGwxX3gybTJfY2ssIC5yYXRlcyA9IGRwbGxfbG9ja2VkX3JhdGVzIH0sCiAJeyAucGFyZW50ID0gTlVMTCB9CiB9OwpAQCAtMTA0OCw2ICsxMDQ4LDcgQEAKIAkuY2xrc2VsCQk9IG1wdV9jbGtzZWwsCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYIHwgUkFURV9QUk9QQUdBVEVTIHwKIAkJCQlQQVJFTlRfQ09OVFJPTFNfQ0xPQ0ssCisJLmNsa2RtX25hbWUJPSAibXB1X2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAogfTsKIApAQCAtMTA3NSw2ICsxMDc2LDggQEAKIAkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAogfTsKIAorLyogWFhYIFdoYXQgYWJvdXQgbmVvbl9jbGtkbSA/ICovCisKIC8qCiAgKiBSRVZJU0lUOiBUaGlzIGNsb2NrIGlzIG5ldmVyIHNwZWNpZmljYWxseSBkZWZpbmVkIGluIHRoZSAzNDMwIFRSTSwKICAqIGFsdGhvdWdoIGl0IGlzIHJlZmVyZW5jZWQgLSBzbyB0aGlzIGlzIGEgZ3Vlc3MKQEAgLTExMDcsNyArMTExMCw3IEBACiAgKi8KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWwgaXZhMl9jbGtzZWxbXSA9IHsKLQl7IC5wYXJlbnQgPSAmZHBsbDJfZmNrLCAgIC5yYXRlcyA9IGRwbGxfYnlwYXNzX3JhdGVzIH0sCisJeyAucGFyZW50ID0gJmRwbGwyX2ZjaywJICAucmF0ZXMgPSBkcGxsX2J5cGFzc19yYXRlcyB9LAogCXsgLnBhcmVudCA9ICZkcGxsMl9tMl9jaywgLnJhdGVzID0gZHBsbF9sb2NrZWRfcmF0ZXMgfSwKIAl7IC5wYXJlbnQgPSBOVUxMIH0KIH07CkBAIC0xMTIzLDYgKzExMjYsNyBAQAogCS5jbGtzZWxfbWFzawk9IE9NQVAzNDMwX1NUX0lWQTJfQ0xLX01BU0ssCiAJLmNsa3NlbAkJPSBpdmEyX2Nsa3NlbCwKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1ggfCBSQVRFX1BST1BBR0FURVMsCisJLmNsa2RtX25hbWUJPSAiaXZhMl9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKIH07CiAKQEAgLTExMzcsNiArMTE0MSw3IEBACiAJLmNsa3NlbAkJPSBkaXYyX2NvcmVfY2xrc2VsLAogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCB8IFJBVEVfUFJPUEFHQVRFUyB8CiAJCQkJUEFSRU5UX0NPTlRST0xTX0NMT0NLLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDNfY2xrZG0iLAogCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCiB9OwogCkBAIC0xMTU0LDYgKzExNTksNyBAQAogCS5jbGtzZWwJCT0gZGl2Ml9sM19jbGtzZWwsCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYIHwgUkFURV9QUk9QQUdBVEVTIHwKIAkJCQlQQVJFTlRfQ09OVFJPTFNfQ0xPQ0ssCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKIAogfTsKQEAgLTExODMsNDMgKzExODksNTcgQEAKIAl7IC5wYXJlbnQgPSBOVUxMIH0KIH07CiAKLXN0YXRpYyBzdHJ1Y3QgY2xrIGdmeF9sM19mY2sgPSB7Ci0JLm5hbWUJCT0gImdmeF9sM19mY2siLAorLyogVmlydHVhbCBwYXJlbnQgY2xvY2sgZm9yIGdmeF9sM19pY2sgYW5kIGdmeF9sM19mY2sgKi8KK3N0YXRpYyBzdHJ1Y3QgY2xrIGdmeF9sM19jayA9IHsKKwkubmFtZQkJPSAiZ2Z4X2wzX2NrIiwKIAkucGFyZW50CQk9ICZsM19pY2ssCiAJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihHRlhfTU9ELCBDTV9JQ0xLRU4pLAogCS5lbmFibGVfYml0CT0gT01BUF9FTl9HRlhfU0hJRlQsCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDMwRVMxLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBnZnhfbDNfZmNrID0geworCS5uYW1lCQk9ICJnZnhfbDNfZmNrIiwKKwkucGFyZW50CQk9ICZnZnhfbDNfY2ssCisJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKIAkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihHRlhfTU9ELCBDTV9DTEtTRUwpLAogCS5jbGtzZWxfbWFzawk9IE9NQVBfQ0xLU0VMX0dGWF9NQVNLLAogCS5jbGtzZWwJCT0gZ2Z4X2wzX2Nsa3NlbCwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0MzBFUzEgfCBSQVRFX1BST1BBR0FURVMsCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDMwRVMxIHwgUkFURV9QUk9QQUdBVEVTIHwKKwkJCQlQQVJFTlRfQ09OVFJPTFNfQ0xPQ0ssCisJLmNsa2RtX25hbWUJPSAiZ2Z4XzM0MzBlczFfY2xrZG0iLAogCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayBnZnhfbDNfaWNrID0gewogCS5uYW1lCQk9ICJnZnhfbDNfaWNrIiwKLQkucGFyZW50CQk9ICZsM19pY2ssCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoR0ZYX01PRCwgQ01fSUNMS0VOKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVBfRU5fR0ZYX1NISUZULAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzMEVTMSwKKwkucGFyZW50CQk9ICZnZnhfbDNfY2ssCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDMwRVMxIHwgUEFSRU5UX0NPTlRST0xTX0NMT0NLLAorCS5jbGtkbV9uYW1lCT0gImdmeF8zNDMwZXMxX2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgZ2Z4X2NnMV9jayA9IHsKIAkubmFtZQkJPSAiZ2Z4X2NnMV9jayIsCiAJLnBhcmVudAkJPSAmZ2Z4X2wzX2ZjaywgLyogUkVWSVNJVDogY29ycmVjdD8gKi8KKwkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtfY2xrZG0sCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoR0ZYX01PRCwgQ01fRkNMS0VOKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwRVMxX0VOXzJEX1NISUZULAogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzMEVTMSwKKwkuY2xrZG1fbmFtZQk9ICJnZnhfMzQzMGVzMV9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIGdmeF9jZzJfY2sgPSB7CiAJLm5hbWUJCT0gImdmeF9jZzJfY2siLAogCS5wYXJlbnQJCT0gJmdmeF9sM19mY2ssIC8qIFJFVklTSVQ6IGNvcnJlY3Q/ICovCisJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrX2Nsa2RtLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKEdGWF9NT0QsIENNX0ZDTEtFTiksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMEVTMV9FTl8zRF9TSElGVCwKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0MzBFUzEsCisJLmNsa2RtX25hbWUJPSAiZ2Z4XzM0MzBlczFfY2xrZG0iLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCkBAIC0xMjUyLDE1ICsxMjcyLDE4IEBACiAJLmNsa3NlbF9tYXNrCT0gT01BUDM0MzBFUzJfQ0xLU0VMX1NHWF9NQVNLLAogCS5jbGtzZWwJCT0gc2d4X2Nsa3NlbCwKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0MzBFUzIsCisJLmNsa2RtX25hbWUJPSAic2d4X2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgc2d4X2ljayA9IHsKIAkubmFtZQkJPSAic2d4X2ljayIsCiAJLnBhcmVudAkJPSAmbDNfaWNrLAorCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa19jbGtkbSwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMEVTMl9TR1hfTU9ELCBDTV9JQ0xLRU4pLAogCS5lbmFibGVfYml0CT0gT01BUDM0MzBFUzJfRU5fU0dYX1NISUZULAogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzMEVTMiwKKwkuY2xrZG1fbmFtZQk9ICJzZ3hfY2xrZG0iLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCkBAIC0xMjY5LDkgKzEyOTIsMTEgQEAKIHN0YXRpYyBzdHJ1Y3QgY2xrIGQyZF8yNm1fZmNrID0gewogCS5uYW1lCQk9ICJkMmRfMjZtX2ZjayIsCiAJLnBhcmVudAkJPSAmc3lzX2NrLAorCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa19jbGtkbSwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fRkNMS0VOMSksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMEVTMV9FTl9EMkRfU0hJRlQsCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDMwRVMxLAorCS5jbGtkbV9uYW1lCT0gImQyZF9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKQEAgLTEyOTEsNiArMTMxNiw3IEBACiAJLmNsa3NlbF9tYXNrCT0gT01BUDM0MzBfQ0xLU0VMX0dQVDEwX01BU0ssCiAJLmNsa3NlbAkJPSBvbWFwMzQzeF9ncHRfY2xrc2VsLAogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCwKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAogfTsKIApAQCAtMTMwNCw2ICsxMzMwLDcgQEAKIAkuY2xrc2VsX21hc2sJPSBPTUFQMzQzMF9DTEtTRUxfR1BUMTFfTUFTSywKIAkuY2xrc2VsCQk9IG9tYXAzNDN4X2dwdF9jbGtzZWwsCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCiB9OwogCkBAIC0xMzQxLDYgKzEzNjgsNyBAQAogCS5wYXJlbnQJCT0gJm9tYXBfOTZtX2ZjaywKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1ggfCBSQVRFX1BST1BBR0FURVMgfAogCQkJCVBBUkVOVF9DT05UUk9MU19DTE9DSywKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIApAQCAtMTM1MSw2ICsxMzc5LDcgQEAKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fRkNMS0VOMSksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMEVTMl9FTl9NTUMzX1NISUZULAogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzMEVTMiwKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIApAQCAtMTM2MSw2ICsxMzkwLDcgQEAKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fRkNMS0VOMSksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9NTUMyX1NISUZULAogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCwKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIApAQCAtMTM3MCw2ICsxNDAwLDcgQEAKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fRkNMS0VOMSksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9NU1BST19TSElGVCwKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1gsCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKQEAgLTEzODAsNiArMTQxMSw3IEBACiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAogCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fTU1DMV9TSElGVCwKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1gsCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKQEAgLTEzOTAsMTYgKzE0MjIsMTggQEAKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fRkNMS0VOMSksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9JMkMzX1NISUZULAogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCwKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgaTJjMl9mY2sgPSB7CiAJLm5hbWUJCT0gImkyY19mY2siLAotCS5pZCAJCT0gMiwKKwkuaWQJCT0gMiwKIAkucGFyZW50CQk9ICZjb3JlXzk2bV9mY2ssCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAogCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fSTJDMl9TSElGVCwKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1gsCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKQEAgLTE0MTAsNiArMTQ0NCw3IEBACiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAogCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fSTJDMV9TSElGVCwKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1gsCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKQEAgLTE0NDMsNiArMTQ3OCw3IEBACiAJLmNsa3NlbF9tYXNrCT0gT01BUDJfTUNCU1A1X0NMS1NfTUFTSywKIAkuY2xrc2VsCQk9IG1jYnNwXzE1X2Nsa3NlbCwKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1gsCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKIH07CiAKQEAgLTE0NTYsNiArMTQ5Miw3IEBACiAJLmNsa3NlbF9tYXNrCT0gT01BUDJfTUNCU1AxX0NMS1NfTUFTSywKIAkuY2xrc2VsCQk9IG1jYnNwXzE1X2Nsa3NlbCwKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1gsCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKIH07CiAKQEAgLTE0NjYsNiArMTUwMyw3IEBACiAJLnBhcmVudAkJPSAmb21hcF80OG1fZmNrLAogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCB8IFJBVEVfUFJPUEFHQVRFUyB8CiAJCQkJUEFSRU5UX0NPTlRST0xTX0NMT0NLLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCkBAIC0xNTQzLDYgKzE1ODEsNyBAQAogCS5wYXJlbnQJCT0gJm9tYXBfMTJtX2ZjaywKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1ggfCBSQVRFX1BST1BBR0FURVMgfAogCQkJCVBBUkVOVF9DT05UUk9MU19DTE9DSywKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIApAQCAtMTU4MSw2ICsxNjIwLDcgQEAKIAkuY2xrc2VsX21hc2sJPSBPTUFQMzQzMF9DTEtTRUxfU1NJX01BU0ssCiAJLmNsa3NlbAkJPSBzc2lfc3NyX2Nsa3NlbCwKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1ggfCBSQVRFX1BST1BBR0FURVMsCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKIH07CiAKQEAgLTE1OTYsMTEgKzE2MzYsMTcgQEAKIAogLyogQ09SRV9MM19JQ0sgYmFzZWQgY2xvY2tzICovCiAKKy8qCisgKiBYWFggbXVzdCBhZGQgY2xrX2VuYWJsZS9jbGtfZGlzYWJsZSBmb3IgdGhlc2UgaWYgc3RhbmRhcmQgY29kZSB3b24ndAorICogaGFuZGxlIGl0CisgKi8KIHN0YXRpYyBzdHJ1Y3QgY2xrIGNvcmVfbDNfaWNrID0gewogCS5uYW1lCQk9ICJjb3JlX2wzX2ljayIsCiAJLnBhcmVudAkJPSAmbDNfaWNrLAorCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa19jbGtkbSwKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1ggfCBSQVRFX1BST1BBR0FURVMgfAogCQkJCVBBUkVOVF9DT05UUk9MU19DTE9DSywKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2wzX2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIApAQCAtMTYxMCw2ICsxNjU2LDcgQEAKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9IU09UR1VTQl9TSElGVCwKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1gsCisJLmNsa2RtX25hbWUJPSAiY29yZV9sM19jbGtkbSIsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKQEAgLTE2MTksNiArMTY2Niw3IEBACiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAogCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fU0RSQ19TSElGVCwKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1ggfCBFTkFCTEVfT05fSU5JVCwKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2wzX2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIApAQCAtMTYyNyw2ICsxNjc1LDcgQEAKIAkucGFyZW50CQk9ICZjb3JlX2wzX2ljaywKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1ggfCBQQVJFTlRfQ09OVFJPTFNfQ0xPQ0sgfAogCQkJCUVOQUJMRV9PTl9JTklULAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDNfY2xrZG0iLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCkBAIC0xNjU0LDggKzE3MDMsMTAgQEAKIHN0YXRpYyBzdHJ1Y3QgY2xrIGNvcmVfbDRfaWNrID0gewogCS5uYW1lCQk9ICJjb3JlX2w0X2ljayIsCiAJLnBhcmVudAkJPSAmbDRfaWNrLAorCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa19jbGtkbSwKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1ggfCBSQVRFX1BST1BBR0FURVMgfAogCQkJCVBBUkVOVF9DT05UUk9MU19DTE9DSywKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIApAQCAtMTY2NSw2ICsxNzE2LDcgQEAKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMyksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMEVTMl9FTl9VU0JUTExfU0hJRlQsCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDMwRVMyLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCkBAIC0xNjc1LDYgKzE3MjcsNyBAQAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwRVMyX0VOX01NQzNfU0hJRlQsCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDMwRVMyLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCkBAIC0xNjg1LDYgKzE3MzgsNyBAQAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX0lDUl9TSElGVCwKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1gsCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKQEAgLTE2OTQsNiArMTc0OCw3IEBACiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAogCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fQUVTMl9TSElGVCwKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1gsCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKQEAgLTE3MDMsNiArMTc1OCw3IEBACiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAogCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fU0hBMTJfU0hJRlQsCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCkBAIC0xNzEyLDYgKzE3NjgsNyBAQAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX0RFUzJfU0hJRlQsCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCkBAIC0xNzIyLDYgKzE3NzksNyBAQAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX01NQzJfU0hJRlQsCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCkBAIC0xNzMyLDYgKzE3OTAsNyBAQAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX01NQzFfU0hJRlQsCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCkBAIC0xNzQxLDYgKzE4MDAsNyBAQAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX01TUFJPX1NISUZULAogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCwKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIApAQCAtMTc1MCw2ICsxODEwLDcgQEAKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9IRFFfU0hJRlQsCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCkBAIC0xNzYwLDYgKzE4MjEsNyBAQAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX01DU1BJNF9TSElGVCwKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1gsCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKQEAgLTE3NzAsNiArMTgzMiw3IEBACiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAogCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fTUNTUEkzX1NISUZULAogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCwKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIApAQCAtMTc4MCw2ICsxODQzLDcgQEAKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9NQ1NQSTJfU0hJRlQsCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCkBAIC0xNzkwLDYgKzE4NTQsNyBAQAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX01DU1BJMV9TSElGVCwKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1gsCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKQEAgLTE4MDAsNiArMTg2NSw3IEBACiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAogCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fSTJDM19TSElGVCwKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1gsCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKQEAgLTE4MTAsNiArMTg3Niw3IEBACiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAogCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fSTJDMl9TSElGVCwKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1gsCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKQEAgLTE4MjAsNiArMTg4Nyw3IEBACiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAogCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fSTJDMV9TSElGVCwKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1gsCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKQEAgLTE4MjksNiArMTg5Nyw3IEBACiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAogCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fVUFSVDJfU0hJRlQsCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCkBAIC0xODM4LDYgKzE5MDcsNyBAQAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX1VBUlQxX1NISUZULAogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCwKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIApAQCAtMTg0Nyw2ICsxOTE3LDcgQEAKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9HUFQxMV9TSElGVCwKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1gsCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKQEAgLTE4NTYsNiArMTkyNyw3IEBACiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAogCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fR1BUMTBfU0hJRlQsCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCkBAIC0xODY2LDYgKzE5MzgsNyBAQAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX01DQlNQNV9TSElGVCwKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1gsCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKQEAgLTE4NzYsNiArMTk0OSw3IEBACiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAogCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fTUNCU1AxX1NISUZULAogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCwKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIApAQCAtMTg4NSw2ICsxOTU5LDcgQEAKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMEVTMV9FTl9GQUNfU0hJRlQsCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDMwRVMxLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCkBAIC0xODk0LDYgKzE5NjksNyBAQAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX01BSUxCT1hFU19TSElGVCwKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1gsCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKQEAgLTE5MTMsNiArMTk4OSw3IEBACiAJLnBhcmVudAkJPSAmbDRfaWNrLAogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCB8IFJBVEVfUFJPUEFHQVRFUyB8CiAJCQkJUEFSRU5UX0NPTlRST0xTX0NMT0NLLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCkBAIC0xOTIyLDYgKzE5OTksNyBAQAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX1NTSV9TSElGVCwKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1gsCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKQEAgLTE5OTYsNyArMjA3NCw3IEBACiAKIC8qIERTUyAqLwogc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWwgZHNzMV9hbHdvbl9mY2tfY2xrc2VsW10gPSB7Ci0JeyAucGFyZW50ID0gJnN5c19jaywgICAgICAgIC5yYXRlcyA9IGRwbGxfYnlwYXNzX3JhdGVzIH0sCisJeyAucGFyZW50ID0gJnN5c19jaywJICAgIC5yYXRlcyA9IGRwbGxfYnlwYXNzX3JhdGVzIH0sCiAJeyAucGFyZW50ID0gJmRwbGw0X200eDJfY2ssIC5yYXRlcyA9IGRwbGxfbG9ja2VkX3JhdGVzIH0sCiAJeyAucGFyZW50ID0gTlVMTCB9CiB9OwpAQCAtMjAxMSwzMyArMjA4OSw0MCBAQAogCS5jbGtzZWxfbWFzawk9IE9NQVAzNDMwX1NUX1BFUklQSF9DTEtfTUFTSywKIAkuY2xrc2VsCQk9IGRzczFfYWx3b25fZmNrX2Nsa3NlbCwKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1gsCisJLmNsa2RtX25hbWUJPSAiZHNzX2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgZHNzX3R2X2ZjayA9IHsKIAkubmFtZQkJPSAiZHNzX3R2X2ZjayIsCiAJLnBhcmVudAkJPSAmb21hcF81NG1fZmNrLAorCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa19jbGtkbSwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9EU1NfTU9ELCBDTV9GQ0xLRU4pLAogCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fVFZfU0hJRlQsCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYLAorCS5jbGtkbV9uYW1lCT0gImRzc19jbGtkbSIsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIGRzc185Nm1fZmNrID0gewogCS5uYW1lCQk9ICJkc3NfOTZtX2ZjayIsCiAJLnBhcmVudAkJPSAmb21hcF85Nm1fZmNrLAorCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa19jbGtkbSwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9EU1NfTU9ELCBDTV9GQ0xLRU4pLAogCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fVFZfU0hJRlQsCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYLAorCS5jbGtkbV9uYW1lCT0gImRzc19jbGtkbSIsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIGRzczJfYWx3b25fZmNrID0gewogCS5uYW1lCQk9ICJkc3MyX2Fsd29uX2ZjayIsCiAJLnBhcmVudAkJPSAmc3lzX2NrLAorCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa19jbGtkbSwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9EU1NfTU9ELCBDTV9GQ0xLRU4pLAogCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fRFNTMl9TSElGVCwKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1gsCisJLmNsa2RtX25hbWUJPSAiZHNzX2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIApAQCAtMjA0NSwxNiArMjEzMCwxOCBAQAogCS8qIEhhbmRsZXMgYm90aCBMMyBhbmQgTDQgY2xvY2tzICovCiAJLm5hbWUJCT0gImRzc19pY2siLAogCS5wYXJlbnQJCT0gJmw0X2ljaywKKwkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtfY2xrZG0sCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfRFNTX01PRCwgQ01fSUNMS0VOKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0NNX0lDTEtFTl9EU1NfRU5fRFNTX1NISUZULAogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCwKKwkuY2xrZG1fbmFtZQk9ICJkc3NfY2xrZG0iLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCiAvKiBDQU0gKi8KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWwgY2FtX21jbGtfY2xrc2VsW10gPSB7Ci0JeyAucGFyZW50ID0gJnN5c19jaywgICAgICAgIC5yYXRlcyA9IGRwbGxfYnlwYXNzX3JhdGVzIH0sCisJeyAucGFyZW50ID0gJnN5c19jaywJICAgIC5yYXRlcyA9IGRwbGxfYnlwYXNzX3JhdGVzIH0sCiAJeyAucGFyZW50ID0gJmRwbGw0X201eDJfY2ssIC5yYXRlcyA9IGRwbGxfbG9ja2VkX3JhdGVzIH0sCiAJeyAucGFyZW50ID0gTlVMTCB9CiB9OwpAQCAtMjA2OSwyNCArMjE1NiwxOSBAQAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX0NBTV9NT0QsIENNX0ZDTEtFTiksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9DQU1fU0hJRlQsCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYLAorCS5jbGtkbV9uYW1lCT0gImNhbV9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgY2xrIGNhbV9sM19pY2sgPSB7Ci0JLm5hbWUJCT0gImNhbV9sM19pY2siLAotCS5wYXJlbnQJCT0gJmwzX2ljaywKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9DQU1fTU9ELCBDTV9JQ0xLRU4pLAotCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fQ0FNX1NISUZULAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgY2FtX2w0X2ljayA9IHsKLQkubmFtZQkJPSAiY2FtX2w0X2ljayIsCitzdGF0aWMgc3RydWN0IGNsayBjYW1faWNrID0geworCS8qIEhhbmRsZXMgYm90aCBMMyBhbmQgTDQgY2xvY2tzICovCisJLm5hbWUJCT0gImNhbV9pY2siLAogCS5wYXJlbnQJCT0gJmw0X2ljaywKKwkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtfY2xrZG0sCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfQ0FNX01PRCwgQ01fSUNMS0VOKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX0NBTV9TSElGVCwKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1gsCisJLmNsa2RtX25hbWUJPSAiY2FtX2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIApAQCAtMjA5NSw0NSArMjE3Nyw0NSBAQAogc3RhdGljIHN0cnVjdCBjbGsgdXNiaG9zdF8xMjBtX2ZjayA9IHsKIAkubmFtZQkJPSAidXNiaG9zdF8xMjBtX2ZjayIsCiAJLnBhcmVudAkJPSAmb21hcF8xMjBtX2ZjaywKKwkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtfY2xrZG0sCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBFUzJfVVNCSE9TVF9NT0QsIENNX0ZDTEtFTiksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMEVTMl9FTl9VU0JIT1NUMl9TSElGVCwKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0MzBFUzIsCisJLmNsa2RtX25hbWUJPSAidXNiaG9zdF9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIHVzYmhvc3RfNDhtX2ZjayA9IHsKIAkubmFtZQkJPSAidXNiaG9zdF80OG1fZmNrIiwKIAkucGFyZW50CQk9ICZvbWFwXzQ4bV9mY2ssCisJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrX2Nsa2RtLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwRVMyX1VTQkhPU1RfTU9ELCBDTV9GQ0xLRU4pLAogCS5lbmFibGVfYml0CT0gT01BUDM0MzBFUzJfRU5fVVNCSE9TVDFfU0hJRlQsCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDMwRVMyLAorCS5jbGtkbV9uYW1lCT0gInVzYmhvc3RfY2xrZG0iLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCi1zdGF0aWMgc3RydWN0IGNsayB1c2Job3N0X2wzX2ljayA9IHsKLQkubmFtZQkJPSAidXNiaG9zdF9sM19pY2siLAotCS5wYXJlbnQJCT0gJmwzX2ljaywKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMEVTMl9VU0JIT1NUX01PRCwgQ01fSUNMS0VOKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwRVMyX0VOX1VTQkhPU1RfU0hJRlQsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDMwRVMyLAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayB1c2Job3N0X2w0X2ljayA9IHsKLQkubmFtZQkJPSAidXNiaG9zdF9sNF9pY2siLAorc3RhdGljIHN0cnVjdCBjbGsgdXNiaG9zdF9pY2sgPSB7CisJLyogSGFuZGxlcyBib3RoIEwzIGFuZCBMNCBjbG9ja3MgKi8KKwkubmFtZQkJPSAidXNiaG9zdF9pY2siLAogCS5wYXJlbnQJCT0gJmw0X2ljaywKKwkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtfY2xrZG0sCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBFUzJfVVNCSE9TVF9NT0QsIENNX0lDTEtFTiksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMEVTMl9FTl9VU0JIT1NUX1NISUZULAogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzMEVTMiwKKwkuY2xrZG1fbmFtZQk9ICJ1c2Job3N0X2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgdXNiaG9zdF9zYXJfZmNrID0gewogCS5uYW1lCQk9ICJ1c2Job3N0X3Nhcl9mY2siLAogCS5wYXJlbnQJCT0gJm9zY19zeXNfY2ssCisJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrX2Nsa2RtLAogCS5lbmFibGVfcmVnCT0gT01BUF9QUk1fUkVHQUREUihPTUFQMzQzMEVTMl9VU0JIT1NUX01PRCwgUE1fUFdTVENUUkwpLAogCS5lbmFibGVfYml0CT0gT01BUDM0MzBFUzJfU0FWRUFORFJFU1RPUkVfU0hJRlQsCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDMwRVMyLAorCS5jbGtkbV9uYW1lCT0gInVzYmhvc3RfY2xrZG0iLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCkBAIC0yMTc1LDYgKzIyNTcsNyBAQAogCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCiB9OwogCisvKiBYWFggc2hvdWxkIGdwdDEncyBjbGtzZWwgaGF2ZSB3a3VwXzMya19mY2sgYXMgdGhlIDMyayBvcHQ/ICovCiBzdGF0aWMgc3RydWN0IGNsayBncHQxX2ZjayA9IHsKIAkubmFtZQkJPSAiZ3B0MV9mY2siLAogCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCkBAIC0yMTg0LDEzICsyMjY3LDE2IEBACiAJLmNsa3NlbF9tYXNrCT0gT01BUDM0MzBfQ0xLU0VMX0dQVDFfTUFTSywKIAkuY2xrc2VsCQk9IG9tYXAzNDN4X2dwdF9jbGtzZWwsCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYLAorCS5jbGtkbV9uYW1lCT0gIndrdXBfY2xrZG0iLAogCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayB3a3VwXzMya19mY2sgPSB7CiAJLm5hbWUJCT0gIndrdXBfMzJrX2ZjayIsCisJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrX2Nsa2RtLAogCS5wYXJlbnQJCT0gJm9tYXBfMzJrX2ZjaywKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1ggfCBSQVRFX1BST1BBR0FURVMgfCBBTFdBWVNfRU5BQkxFRCwKKwkuY2xrZG1fbmFtZQk9ICJ3a3VwX2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIApAQCAtMjIwMCw2ICsyMjg2LDcgQEAKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihXS1VQX01PRCwgQ01fRkNMS0VOKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX0dQSU8xX1NISUZULAogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCwKKwkuY2xrZG1fbmFtZQk9ICJ3a3VwX2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIApAQCAtMjIwOSw2ICsyMjk2LDcgQEAKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihXS1VQX01PRCwgQ01fRkNMS0VOKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX1dEVDJfU0hJRlQsCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYLAorCS5jbGtkbV9uYW1lCT0gIndrdXBfY2xrZG0iLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCkBAIC0yMjE2LDYgKzIzMDQsNyBAQAogCS5uYW1lCQk9ICJ3a3VwX2w0X2ljayIsCiAJLnBhcmVudAkJPSAmc3lzX2NrLAogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCB8IFJBVEVfUFJPUEFHQVRFUyB8IEFMV0FZU19FTkFCTEVELAorCS5jbGtkbV9uYW1lCT0gIndrdXBfY2xrZG0iLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCkBAIC0yMjI3LDYgKzIzMTYsNyBAQAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKFdLVVBfTU9ELCBDTV9JQ0xLRU4pLAogCS5lbmFibGVfYml0CT0gT01BUDM0MzBFUzJfRU5fVVNJTU9DUF9TSElGVCwKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0MzBFUzIsCisJLmNsa2RtX25hbWUJPSAid2t1cF9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKQEAgLTIyMzYsNiArMjMyNiw3IEBACiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoV0tVUF9NT0QsIENNX0lDTEtFTiksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9XRFQyX1NISUZULAogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCwKKwkuY2xrZG1fbmFtZQk9ICJ3a3VwX2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIApAQCAtMjI0NSw2ICsyMzM2LDcgQEAKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihXS1VQX01PRCwgQ01fSUNMS0VOKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX1dEVDFfU0hJRlQsCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYLAorCS5jbGtkbV9uYW1lCT0gIndrdXBfY2xrZG0iLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCkBAIC0yMjU0LDYgKzIzNDYsNyBAQAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKFdLVVBfTU9ELCBDTV9JQ0xLRU4pLAogCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fR1BJTzFfU0hJRlQsCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYLAorCS5jbGtkbV9uYW1lCT0gIndrdXBfY2xrZG0iLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCkBAIC0yMjYzLDE1ICsyMzU2LDE4IEBACiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoV0tVUF9NT0QsIENNX0lDTEtFTiksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl8zMktTWU5DX1NISUZULAogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCwKKwkuY2xrZG1fbmFtZQk9ICJ3a3VwX2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIAorLyogWFhYIFRoaXMgY2xvY2sgbm8gbG9uZ2VyIGV4aXN0cyBpbiAzNDMwIFRSTSByZXYgRiAqLwogc3RhdGljIHN0cnVjdCBjbGsgZ3B0MTJfaWNrID0gewogCS5uYW1lCQk9ICJncHQxMl9pY2siLAogCS5wYXJlbnQJCT0gJndrdXBfbDRfaWNrLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKFdLVVBfTU9ELCBDTV9JQ0xLRU4pLAogCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fR1BUMTJfU0hJRlQsCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYLAorCS5jbGtkbV9uYW1lCT0gIndrdXBfY2xrZG0iLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCkBAIC0yMjgxLDYgKzIzNzcsNyBAQAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKFdLVVBfTU9ELCBDTV9JQ0xLRU4pLAogCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fR1BUMV9TSElGVCwKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1gsCisJLmNsa2RtX25hbWUJPSAid2t1cF9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKQEAgLTIyOTEsMTYgKzIzODgsMjAgQEAKIHN0YXRpYyBzdHJ1Y3QgY2xrIHBlcl85Nm1fZmNrID0gewogCS5uYW1lCQk9ICJwZXJfOTZtX2ZjayIsCiAJLnBhcmVudAkJPSAmb21hcF85Nm1fYWx3b25fZmNrLAorCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa19jbGtkbSwKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1ggfCBSQVRFX1BST1BBR0FURVMgfAogCQkJCVBBUkVOVF9DT05UUk9MU19DTE9DSywKKwkuY2xrZG1fbmFtZQk9ICJwZXJfY2xrZG0iLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayBwZXJfNDhtX2ZjayA9IHsKIAkubmFtZQkJPSAicGVyXzQ4bV9mY2siLAogCS5wYXJlbnQJCT0gJm9tYXBfNDhtX2ZjaywKKwkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtfY2xrZG0sCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYIHwgUkFURV9QUk9QQUdBVEVTIHwKIAkJCQlQQVJFTlRfQ09OVFJPTFNfQ0xPQ0ssCisJLmNsa2RtX25hbWUJPSAicGVyX2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIApAQCAtMjMxMCw2ICsyNDExLDcgQEAKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9QRVJfTU9ELCBDTV9GQ0xLRU4pLAogCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fVUFSVDNfU0hJRlQsCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYLAorCS5jbGtkbV9uYW1lCT0gInBlcl9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKQEAgLTIzMjIsNiArMjQyNCw3IEBACiAJLmNsa3NlbF9tYXNrCT0gT01BUDM0MzBfQ0xLU0VMX0dQVDJfTUFTSywKIAkuY2xrc2VsCQk9IG9tYXAzNDN4X2dwdF9jbGtzZWwsCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYLAorCS5jbGtkbV9uYW1lCT0gInBlcl9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKIH07CiAKQEAgLTIzMzQsNiArMjQzNyw3IEBACiAJLmNsa3NlbF9tYXNrCT0gT01BUDM0MzBfQ0xLU0VMX0dQVDNfTUFTSywKIAkuY2xrc2VsCQk9IG9tYXAzNDN4X2dwdF9jbGtzZWwsCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYLAorCS5jbGtkbV9uYW1lCT0gInBlcl9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKIH07CiAKQEAgLTIzNDYsNiArMjQ1MCw3IEBACiAJLmNsa3NlbF9tYXNrCT0gT01BUDM0MzBfQ0xLU0VMX0dQVDRfTUFTSywKIAkuY2xrc2VsCQk9IG9tYXAzNDN4X2dwdF9jbGtzZWwsCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYLAorCS5jbGtkbV9uYW1lCT0gInBlcl9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKIH07CiAKQEAgLTIzNTgsNiArMjQ2Myw3IEBACiAJLmNsa3NlbF9tYXNrCT0gT01BUDM0MzBfQ0xLU0VMX0dQVDVfTUFTSywKIAkuY2xrc2VsCQk9IG9tYXAzNDN4X2dwdF9jbGtzZWwsCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYLAorCS5jbGtkbV9uYW1lCT0gInBlcl9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKIH07CiAKQEAgLTIzNzAsNiArMjQ3Niw3IEBACiAJLmNsa3NlbF9tYXNrCT0gT01BUDM0MzBfQ0xLU0VMX0dQVDZfTUFTSywKIAkuY2xrc2VsCQk9IG9tYXAzNDN4X2dwdF9jbGtzZWwsCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYLAorCS5jbGtkbV9uYW1lCT0gInBlcl9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKIH07CiAKQEAgLTIzODIsNiArMjQ4OSw3IEBACiAJLmNsa3NlbF9tYXNrCT0gT01BUDM0MzBfQ0xLU0VMX0dQVDdfTUFTSywKIAkuY2xrc2VsCQk9IG9tYXAzNDN4X2dwdF9jbGtzZWwsCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYLAorCS5jbGtkbV9uYW1lCT0gInBlcl9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKIH07CiAKQEAgLTIzOTQsNiArMjUwMiw3IEBACiAJLmNsa3NlbF9tYXNrCT0gT01BUDM0MzBfQ0xLU0VMX0dQVDhfTUFTSywKIAkuY2xrc2VsCQk9IG9tYXAzNDN4X2dwdF9jbGtzZWwsCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYLAorCS5jbGtkbV9uYW1lCT0gInBlcl9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKIH07CiAKQEAgLTI0MDYsMTIgKzI1MTUsMTQgQEAKIAkuY2xrc2VsX21hc2sJPSBPTUFQMzQzMF9DTEtTRUxfR1BUOV9NQVNLLAogCS5jbGtzZWwJCT0gb21hcDM0M3hfZ3B0X2Nsa3NlbCwKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1gsCisJLmNsa2RtX25hbWUJPSAicGVyX2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgcGVyXzMya19hbHdvbl9mY2sgPSB7CiAJLm5hbWUJCT0gInBlcl8zMmtfYWx3b25fZmNrIiwKIAkucGFyZW50CQk9ICZvbWFwXzMya19mY2ssCisJLmNsa2RtX25hbWUJPSAicGVyX2Nsa2RtIiwKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1ggfCBSQVRFX1BST1BBR0FURVMgfCBBTFdBWVNfRU5BQkxFRCwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKQEAgLTI0MjIsNiArMjUzMyw3IEBACiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfUEVSX01PRCwgQ01fRkNMS0VOKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX0dQSU82X1NISUZULAogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCwKKwkuY2xrZG1fbmFtZQk9ICJwZXJfY2xrZG0iLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCkBAIC0yNDMxLDYgKzI1NDMsNyBAQAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX1BFUl9NT0QsIENNX0ZDTEtFTiksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9HUElPNV9TSElGVCwKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1gsCisJLmNsa2RtX25hbWUJPSAicGVyX2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIApAQCAtMjQ0MCw2ICsyNTUzLDcgQEAKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9QRVJfTU9ELCBDTV9GQ0xLRU4pLAogCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fR1BJTzRfU0hJRlQsCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYLAorCS5jbGtkbV9uYW1lCT0gInBlcl9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKQEAgLTI0NDksNiArMjU2Myw3IEBACiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfUEVSX01PRCwgQ01fRkNMS0VOKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX0dQSU8zX1NISUZULAogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCwKKwkuY2xrZG1fbmFtZQk9ICJwZXJfY2xrZG0iLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCkBAIC0yNDU4LDYgKzI1NzMsNyBAQAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX1BFUl9NT0QsIENNX0ZDTEtFTiksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9HUElPMl9TSElGVCwKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1gsCisJLmNsa2RtX25hbWUJPSAicGVyX2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIApAQCAtMjQ2Nyw2ICsyNTgzLDcgQEAKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9QRVJfTU9ELCBDTV9GQ0xLRU4pLAogCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fV0RUM19TSElGVCwKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1gsCisJLmNsa2RtX25hbWUJPSAicGVyX2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIApAQCAtMjQ3NSw2ICsyNTkyLDcgQEAKIAkucGFyZW50CQk9ICZsNF9pY2ssCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYIHwgUkFURV9QUk9QQUdBVEVTIHwKIAkJCQlQQVJFTlRfQ09OVFJPTFNfQ0xPQ0ssCisJLmNsa2RtX25hbWUJPSAicGVyX2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIApAQCAtMjQ4NCw2ICsyNjAyLDcgQEAKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9QRVJfTU9ELCBDTV9JQ0xLRU4pLAogCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fR1BJTzZfU0hJRlQsCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYLAorCS5jbGtkbV9uYW1lCT0gInBlcl9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKQEAgLTI0OTMsNiArMjYxMiw3IEBACiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfUEVSX01PRCwgQ01fSUNMS0VOKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX0dQSU81X1NISUZULAogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCwKKwkuY2xrZG1fbmFtZQk9ICJwZXJfY2xrZG0iLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCkBAIC0yNTAyLDYgKzI2MjIsNyBAQAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX1BFUl9NT0QsIENNX0lDTEtFTiksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9HUElPNF9TSElGVCwKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1gsCisJLmNsa2RtX25hbWUJPSAicGVyX2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIApAQCAtMjUxMSw2ICsyNjMyLDcgQEAKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9QRVJfTU9ELCBDTV9JQ0xLRU4pLAogCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fR1BJTzNfU0hJRlQsCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYLAorCS5jbGtkbV9uYW1lCT0gInBlcl9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKQEAgLTI1MjAsNiArMjY0Miw3IEBACiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfUEVSX01PRCwgQ01fSUNMS0VOKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX0dQSU8yX1NISUZULAogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCwKKwkuY2xrZG1fbmFtZQk9ICJwZXJfY2xrZG0iLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCkBAIC0yNTI5LDYgKzI2NTIsNyBAQAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX1BFUl9NT0QsIENNX0lDTEtFTiksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9XRFQzX1NISUZULAogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCwKKwkuY2xrZG1fbmFtZQk9ICJwZXJfY2xrZG0iLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCkBAIC0yNTM4LDYgKzI2NjIsNyBAQAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX1BFUl9NT0QsIENNX0lDTEtFTiksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9VQVJUM19TSElGVCwKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1gsCisJLmNsa2RtX25hbWUJPSAicGVyX2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIApAQCAtMjU0Nyw2ICsyNjcyLDcgQEAKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9QRVJfTU9ELCBDTV9JQ0xLRU4pLAogCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fR1BUOV9TSElGVCwKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1gsCisJLmNsa2RtX25hbWUJPSAicGVyX2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIApAQCAtMjU1Niw2ICsyNjgyLDcgQEAKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9QRVJfTU9ELCBDTV9JQ0xLRU4pLAogCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fR1BUOF9TSElGVCwKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1gsCisJLmNsa2RtX25hbWUJPSAicGVyX2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIApAQCAtMjU2NSw2ICsyNjkyLDcgQEAKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9QRVJfTU9ELCBDTV9JQ0xLRU4pLAogCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fR1BUN19TSElGVCwKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1gsCisJLmNsa2RtX25hbWUJPSAicGVyX2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIApAQCAtMjU3NCw2ICsyNzAyLDcgQEAKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9QRVJfTU9ELCBDTV9JQ0xLRU4pLAogCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fR1BUNl9TSElGVCwKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1gsCisJLmNsa2RtX25hbWUJPSAicGVyX2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIApAQCAtMjU4Myw2ICsyNzEyLDcgQEAKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9QRVJfTU9ELCBDTV9JQ0xLRU4pLAogCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fR1BUNV9TSElGVCwKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1gsCisJLmNsa2RtX25hbWUJPSAicGVyX2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIApAQCAtMjU5Miw2ICsyNzIyLDcgQEAKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9QRVJfTU9ELCBDTV9JQ0xLRU4pLAogCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fR1BUNF9TSElGVCwKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1gsCisJLmNsa2RtX25hbWUJPSAicGVyX2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIApAQCAtMjYwMSw2ICsyNzMyLDcgQEAKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9QRVJfTU9ELCBDTV9JQ0xLRU4pLAogCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fR1BUM19TSElGVCwKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1gsCisJLmNsa2RtX25hbWUJPSAicGVyX2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIApAQCAtMjYxMCw2ICsyNzQyLDcgQEAKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9QRVJfTU9ELCBDTV9JQ0xLRU4pLAogCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fR1BUMl9TSElGVCwKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1gsCisJLmNsa2RtX25hbWUJPSAicGVyX2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIApAQCAtMjYyMCw2ICsyNzUzLDcgQEAKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9QRVJfTU9ELCBDTV9JQ0xLRU4pLAogCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fTUNCU1AyX1NISUZULAogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCwKKwkuY2xrZG1fbmFtZQk9ICJwZXJfY2xrZG0iLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCkBAIC0yNjMwLDYgKzI3NjQsNyBAQAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX1BFUl9NT0QsIENNX0lDTEtFTiksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9NQ0JTUDNfU0hJRlQsCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYLAorCS5jbGtkbV9uYW1lCT0gInBlcl9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKQEAgLTI2NDAsMTIgKzI3NzUsMTMgQEAKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9QRVJfTU9ELCBDTV9JQ0xLRU4pLAogCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fTUNCU1A0X1NISUZULAogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCwKKwkuY2xrZG1fbmFtZQk9ICJwZXJfY2xrZG0iLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbCBtY2JzcF8yMzRfY2xrc2VsW10gPSB7CiAJeyAucGFyZW50ID0gJnBlcl85Nm1fZmNrLCAucmF0ZXMgPSBjb21tb25fbWNic3BfOTZtX3JhdGVzIH0sCi0JeyAucGFyZW50ID0gJm1jYnNwX2Nsa3MsICAgLnJhdGVzID0gY29tbW9uX21jYnNwX21jYnNwX3JhdGVzIH0sCisJeyAucGFyZW50ID0gJm1jYnNwX2Nsa3MsICAucmF0ZXMgPSBjb21tb25fbWNic3BfbWNic3BfcmF0ZXMgfSwKIAl7IC5wYXJlbnQgPSBOVUxMIH0KIH07CiAKQEAgLTI2NTksNiArMjc5NSw3IEBACiAJLmNsa3NlbF9tYXNrCT0gT01BUDJfTUNCU1AyX0NMS1NfTUFTSywKIAkuY2xrc2VsCQk9IG1jYnNwXzIzNF9jbGtzZWwsCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYLAorCS5jbGtkbV9uYW1lCT0gInBlcl9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKIH07CiAKQEAgLTI2NzIsNiArMjgwOSw3IEBACiAJLmNsa3NlbF9tYXNrCT0gT01BUDJfTUNCU1AzX0NMS1NfTUFTSywKIAkuY2xrc2VsCQk9IG1jYnNwXzIzNF9jbGtzZWwsCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYLAorCS5jbGtkbV9uYW1lCT0gInBlcl9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKIH07CiAKQEAgLTI2ODUsNiArMjgyMyw3IEBACiAJLmNsa3NlbF9tYXNrCT0gT01BUDJfTUNCU1A0X0NMS1NfTUFTSywKIAkuY2xrc2VsCQk9IG1jYnNwXzIzNF9jbGtzZWwsCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYLAorCS5jbGtkbV9uYW1lCT0gInBlcl9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKIH07CiAKQEAgLTI3MzIsNiArMjg3MSw3IEBACiAJLmNsa3NlbF9tYXNrCT0gT01BUDM0MzBfTVVYX0NUUkxfTUFTSywKIAkuY2xrc2VsCQk9IGVtdV9zcmNfY2xrc2VsLAogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCB8IFJBVEVfUFJPUEFHQVRFUyB8IEFMV0FZU19FTkFCTEVELAorCS5jbGtkbV9uYW1lCT0gImVtdV9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKIH07CiAKQEAgLTI3NTUsNiArMjg5NSw3IEBACiAJLmNsa3NlbF9tYXNrCT0gT01BUDM0MzBfQ0xLU0VMX1BDTEtfTUFTSywKIAkuY2xrc2VsCQk9IHBjbGtfZW11X2Nsa3NlbCwKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1ggfCBSQVRFX1BST1BBR0FURVMgfCBBTFdBWVNfRU5BQkxFRCwKKwkuY2xrZG1fbmFtZQk9ICJlbXVfY2xrZG0iLAogCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCiB9OwogCkBAIC0yNzc3LDYgKzI5MTgsNyBAQAogCS5jbGtzZWxfbWFzawk9IE9NQVAzNDMwX0NMS1NFTF9QQ0xLWDJfTUFTSywKIAkuY2xrc2VsCQk9IHBjbGt4Ml9lbXVfY2xrc2VsLAogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCB8IFJBVEVfUFJPUEFHQVRFUyB8IEFMV0FZU19FTkFCTEVELAorCS5jbGtkbV9uYW1lCT0gImVtdV9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKIH07CiAKQEAgLTI3OTIsNiArMjkzNCw3IEBACiAJLmNsa3NlbF9tYXNrCT0gT01BUDM0MzBfQ0xLU0VMX0FUQ0xLX01BU0ssCiAJLmNsa3NlbAkJPSBhdGNsa19lbXVfY2xrc2VsLAogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCB8IFJBVEVfUFJPUEFHQVRFUyB8IEFMV0FZU19FTkFCTEVELAorCS5jbGtkbV9uYW1lCT0gImVtdV9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKIH07CiAKQEAgLTI4MDIsNiArMjk0NSw3IEBACiAJLmNsa3NlbF9tYXNrCT0gT01BUDM0MzBfVFJBQ0VfTVVYX0NUUkxfTUFTSywKIAkuY2xrc2VsCQk9IGVtdV9zcmNfY2xrc2VsLAogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCB8IFJBVEVfUFJPUEFHQVRFUyB8IEFMV0FZU19FTkFCTEVELAorCS5jbGtkbV9uYW1lCT0gImVtdV9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKIH07CiAKQEAgLTI4MjQsNiArMjk2OCw3IEBACiAJLmNsa3NlbF9tYXNrCT0gT01BUDM0MzBfQ0xLU0VMX1RSQUNFQ0xLX01BU0ssCiAJLmNsa3NlbAkJPSB0cmFjZWNsa19jbGtzZWwsCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYIHwgQUxXQVlTX0VOQUJMRUQsCisJLmNsa2RtX25hbWUJPSAiZW11X2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAogfTsKIApAQCAtMjg1MywxMSArMjk5OCwxMyBAQAogCS5uYW1lCQk9ICJzcl9sNF9pY2siLAogCS5wYXJlbnQJCT0gJmw0X2ljaywKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1gsCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKIC8qIFNFQ1VSRV8zMktfRkNLIGNsb2NrcyAqLwogCisvKiBYWFggVGhpcyBjbG9jayBubyBsb25nZXIgZXhpc3RzIGluIDM0MzAgVFJNIHJldiBGICovCiBzdGF0aWMgc3RydWN0IGNsayBncHQxMl9mY2sgPSB7CiAJLm5hbWUJCT0gImdwdDEyX2ZjayIsCiAJLnBhcmVudAkJPSAmc2VjdXJlXzMya19mY2ssCkBAIC0yOTMzLDYgKzMwODAsNyBAQAogCSZsM19pY2ssCiAJJmw0X2ljaywKIAkmcm1faWNrLAorCSZnZnhfbDNfY2ssCiAJJmdmeF9sM19mY2ssCiAJJmdmeF9sM19pY2ssCiAJJmdmeF9jZzFfY2ssCkBAIC0zMDE0LDEyICszMTYyLDEwIEBACiAJJmRzczJfYWx3b25fZmNrLAogCSZkc3NfaWNrLAogCSZjYW1fbWNsaywKLQkmY2FtX2wzX2ljaywKLQkmY2FtX2w0X2ljaywKKwkmY2FtX2ljaywKIAkmdXNiaG9zdF8xMjBtX2ZjaywKIAkmdXNiaG9zdF80OG1fZmNrLAotCSZ1c2Job3N0X2wzX2ljaywKLQkmdXNiaG9zdF9sNF9pY2ssCisJJnVzYmhvc3RfaWNrLAogCSZ1c2Job3N0X3Nhcl9mY2ssCiAJJnVzaW1fZmNrLAogCSZncHQxX2ZjaywKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2tkb21haW4uYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2tkb21haW4uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YzNjZTljCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9ja2RvbWFpbi5jCkBAIC0wLDAgKzEsNjIzIEBACisvKgorICogT01BUDIvMyBjbG9ja2RvbWFpbiBmcmFtZXdvcmsgZnVuY3Rpb25zCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRleGFzIEluc3RydW1lbnRzLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggTm9raWEgQ29ycG9yYXRpb24KKyAqCisgKiBXcml0dGVuIGJ5IFBhdWwgV2FsbXNsZXkgYW5kIEpvdW5pIEjDtmdhbmRlcgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKyNpZmRlZiBDT05GSUdfT01BUF9ERUJVR19DTE9DS0RPTUFJTgorIyAgZGVmaW5lIERFQlVHCisjZW5kaWYKKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvbGltaXRzLmg+CisKKyNpbmNsdWRlIDxsaW51eC9pby5oPgorCisjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CisKKyNpbmNsdWRlIDxtYWNoL2Nsb2NrLmg+CisKKyNpbmNsdWRlICJwcm0uaCIKKyNpbmNsdWRlICJwcm0tcmVnYml0cy0yNHh4LmgiCisjaW5jbHVkZSAiY20uaCIKKworI2luY2x1ZGUgPG1hY2gvcG93ZXJkb21haW4uaD4KKyNpbmNsdWRlIDxtYWNoL2Nsb2NrZG9tYWluLmg+CisKKy8qIGNsa2RtX2xpc3QgY29udGFpbnMgYWxsIHJlZ2lzdGVyZWQgc3RydWN0IGNsb2NrZG9tYWlucyAqLworc3RhdGljIExJU1RfSEVBRChjbGtkbV9saXN0KTsKKworLyogY2xrZG1fbXV0ZXggcHJvdGVjdHMgY2xrZG1fbGlzdCBhZGQgYW5kIGRlbCBvcHMgKi8KK3N0YXRpYyBERUZJTkVfTVVURVgoY2xrZG1fbXV0ZXgpOworCisvKiBhcnJheSBvZiBwb3dlcmRvbWFpbiBkZXBzIHRvIGJlIGFkZGVkL3JlbW92ZWQgd2hlbiBjbGtkbSBpbiBod3N1cCBtb2RlICovCitzdGF0aWMgc3RydWN0IGNsa2RtX3B3cmRtX2F1dG9kZXAgKmF1dG9kZXBzOworCisKKy8qIFByaXZhdGUgZnVuY3Rpb25zICovCisKKy8qCisgKiBfYXV0b2RlcF9sb29rdXAgLSByZXNvbHZlIGF1dG9kZXAgcHdyZG0gbmFtZXMgdG8gcHdyZG0gcG9pbnRlcnM7IHN0b3JlCisgKiBAYXV0b2RlcDogc3RydWN0IGNsa2RtX3B3cmRtX2F1dG9kZXAgKiB0byByZXNvbHZlCisgKgorICogUmVzb2x2ZSBhdXRvZGVwIHBvd2VyZG9tYWluIG5hbWVzIHRvIHBvd2VyZG9tYWluIHBvaW50ZXJzIHZpYQorICogcHdyZG1fbG9va3VwKCkgYW5kIHN0b3JlIHRoZSBwb2ludGVycyBpbiB0aGUgYXV0b2RlcCBzdHJ1Y3R1cmUuICBBbgorICogImF1dG9kZXAiIGlzIGEgcG93ZXJkb21haW4gc2xlZXAvd2FrZXVwIGRlcGVuZGVuY3kgdGhhdCBpcworICogYXV0b21hdGljYWxseSBhZGRlZCBhbmQgcmVtb3ZlZCB3aGVuZXZlciBjbG9ja3MgaW4gdGhlIGFzc29jaWF0ZWQKKyAqIGNsb2NrZG9tYWluIGFyZSBlbmFibGVkIG9yIGRpc2FibGVkIChyZXNwZWN0aXZlbHkpIHdoZW4gdGhlCisgKiBjbG9ja2RvbWFpbiBpcyBpbiBoYXJkd2FyZS1zdXBlcnZpc2VkIG1vZGUuCU1lYW50IHRvIGJlIGNhbGxlZAorICogb25jZSBhdCBjbG9ja2RvbWFpbiBsYXllciBpbml0aWFsaXphdGlvbiwgc2luY2UgdGhlc2Ugc2hvdWxkIHJlbWFpbgorICogZml4ZWQgZm9yIGEgcGFydGljdWxhciBhcmNoaXRlY3R1cmUuICBObyByZXR1cm4gdmFsdWUuCisgKi8KK3N0YXRpYyB2b2lkIF9hdXRvZGVwX2xvb2t1cChzdHJ1Y3QgY2xrZG1fcHdyZG1fYXV0b2RlcCAqYXV0b2RlcCkKK3sKKwlzdHJ1Y3QgcG93ZXJkb21haW4gKnB3cmRtOworCisJaWYgKCFhdXRvZGVwKQorCQlyZXR1cm47CisKKwlpZiAoIW9tYXBfY2hpcF9pcyhhdXRvZGVwLT5vbWFwX2NoaXApKQorCQlyZXR1cm47CisKKwlwd3JkbSA9IHB3cmRtX2xvb2t1cChhdXRvZGVwLT5wd3JkbV9uYW1lKTsKKwlpZiAoIXB3cmRtKSB7CisJCXByX2RlYnVnKCJjbG9ja2RvbWFpbjogX2F1dG9kZXBfbG9va3VwOiBwb3dlcmRvbWFpbiAlcyAiCisJCQkgImRvZXMgbm90IGV4aXN0XG4iLCBhdXRvZGVwLT5wd3JkbV9uYW1lKTsKKwkJV0FSTl9PTigxKTsKKwkJcmV0dXJuOworCX0KKwlhdXRvZGVwLT5wd3JkbSA9IHB3cmRtOworCisJcmV0dXJuOworfQorCisvKgorICogX2Nsa2RtX2FkZF9hdXRvZGVwcyAtIGFkZCBhdXRvIHNsZWVwZGVwcy93a2RlcHMgdG8gY2xrZG0gdXBvbiBjbG9jayBlbmFibGUKKyAqIEBjbGtkbTogc3RydWN0IGNsb2NrZG9tYWluICoKKyAqCisgKiBBZGQgdGhlICJhdXRvZGVwIiBzbGVlcCAmIHdha2V1cCBkZXBlbmRlbmNpZXMgdG8gY2xvY2tkb21haW4gJ2Nsa2RtJworICogaW4gaGFyZHdhcmUtc3VwZXJ2aXNlZCBtb2RlLiAgTWVhbnQgdG8gYmUgY2FsbGVkIGZyb20gY2xvY2sgZnJhbWV3b3JrCisgKiB3aGVuIGEgY2xvY2sgaW5zaWRlIGNsb2NrZG9tYWluICdjbGtkbScgaXMgZW5hYmxlZC4JTm8gcmV0dXJuIHZhbHVlLgorICovCitzdGF0aWMgdm9pZCBfY2xrZG1fYWRkX2F1dG9kZXBzKHN0cnVjdCBjbG9ja2RvbWFpbiAqY2xrZG0pCit7CisJc3RydWN0IGNsa2RtX3B3cmRtX2F1dG9kZXAgKmF1dG9kZXA7CisKKwlmb3IgKGF1dG9kZXAgPSBhdXRvZGVwczsgYXV0b2RlcC0+cHdyZG1fbmFtZTsgYXV0b2RlcCsrKSB7CisJCWlmICghYXV0b2RlcC0+cHdyZG0pCisJCQljb250aW51ZTsKKworCQlwcl9kZWJ1ZygiY2xvY2tkb21haW46IGFkZGluZyAlcyBzbGVlcGRlcC93a2RlcCBmb3IgIgorCQkJICJwd3JkbSAlc1xuIiwgYXV0b2RlcC0+cHdyZG1fbmFtZSwKKwkJCSBjbGtkbS0+cHdyZG0tPm5hbWUpOworCisJCXB3cmRtX2FkZF9zbGVlcGRlcChjbGtkbS0+cHdyZG0sIGF1dG9kZXAtPnB3cmRtKTsKKwkJcHdyZG1fYWRkX3drZGVwKGNsa2RtLT5wd3JkbSwgYXV0b2RlcC0+cHdyZG0pOworCX0KK30KKworLyoKKyAqIF9jbGtkbV9hZGRfYXV0b2RlcHMgLSByZW1vdmUgYXV0byBzbGVlcGRlcHMvd2tkZXBzIGZyb20gY2xrZG0KKyAqIEBjbGtkbTogc3RydWN0IGNsb2NrZG9tYWluICoKKyAqCisgKiBSZW1vdmUgdGhlICJhdXRvZGVwIiBzbGVlcCAmIHdha2V1cCBkZXBlbmRlbmNpZXMgZnJvbSBjbG9ja2RvbWFpbiAnY2xrZG0nCisgKiBpbiBoYXJkd2FyZS1zdXBlcnZpc2VkIG1vZGUuICBNZWFudCB0byBiZSBjYWxsZWQgZnJvbSBjbG9jayBmcmFtZXdvcmsKKyAqIHdoZW4gYSBjbG9jayBpbnNpZGUgY2xvY2tkb21haW4gJ2Nsa2RtJyBpcyBkaXNhYmxlZC4gIE5vIHJldHVybiB2YWx1ZS4KKyAqLworc3RhdGljIHZvaWQgX2Nsa2RtX2RlbF9hdXRvZGVwcyhzdHJ1Y3QgY2xvY2tkb21haW4gKmNsa2RtKQoreworCXN0cnVjdCBjbGtkbV9wd3JkbV9hdXRvZGVwICphdXRvZGVwOworCisJZm9yIChhdXRvZGVwID0gYXV0b2RlcHM7IGF1dG9kZXAtPnB3cmRtX25hbWU7IGF1dG9kZXArKykgeworCQlpZiAoIWF1dG9kZXAtPnB3cmRtKQorCQkJY29udGludWU7CisKKwkJcHJfZGVidWcoImNsb2NrZG9tYWluOiByZW1vdmluZyAlcyBzbGVlcGRlcC93a2RlcCBmb3IgIgorCQkJICJwd3JkbSAlc1xuIiwgYXV0b2RlcC0+cHdyZG1fbmFtZSwKKwkJCSBjbGtkbS0+cHdyZG0tPm5hbWUpOworCisJCXB3cmRtX2RlbF9zbGVlcGRlcChjbGtkbS0+cHdyZG0sIGF1dG9kZXAtPnB3cmRtKTsKKwkJcHdyZG1fZGVsX3drZGVwKGNsa2RtLT5wd3JkbSwgYXV0b2RlcC0+cHdyZG0pOworCX0KK30KKworCitzdGF0aWMgc3RydWN0IGNsb2NrZG9tYWluICpfY2xrZG1fbG9va3VwKGNvbnN0IGNoYXIgKm5hbWUpCit7CisJc3RydWN0IGNsb2NrZG9tYWluICpjbGtkbSwgKnRlbXBfY2xrZG07CisKKwlpZiAoIW5hbWUpCisJCXJldHVybiBOVUxMOworCisJY2xrZG0gPSBOVUxMOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeSh0ZW1wX2Nsa2RtLCAmY2xrZG1fbGlzdCwgbm9kZSkgeworCQlpZiAoIXN0cmNtcChuYW1lLCB0ZW1wX2Nsa2RtLT5uYW1lKSkgeworCQkJY2xrZG0gPSB0ZW1wX2Nsa2RtOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlyZXR1cm4gY2xrZG07Cit9CisKKworLyogUHVibGljIGZ1bmN0aW9ucyAqLworCisvKioKKyAqIGNsa2RtX2luaXQgLSBzZXQgdXAgdGhlIGNsb2NrZG9tYWluIGxheWVyCisgKiBAY2xrZG1zOiBvcHRpb25hbCBwb2ludGVyIHRvIGFuIGFycmF5IG9mIGNsb2NrZG9tYWlucyB0byByZWdpc3RlcgorICogQGluaXRfYXV0b2RlcHM6IG9wdGlvbmFsIHBvaW50ZXIgdG8gYW4gYXJyYXkgb2YgYXV0b2RlcHMgdG8gcmVnaXN0ZXIKKyAqCisgKiBTZXQgdXAgaW50ZXJuYWwgc3RhdGUuICBJZiBhIHBvaW50ZXIgdG8gYW4gYXJyYXkgb2YgY2xvY2tkb21haW5zCisgKiB3YXMgc3VwcGxpZWQsIGxvb3AgdGhyb3VnaCB0aGUgbGlzdCBvZiBjbG9ja2RvbWFpbnMsIHJlZ2lzdGVyIGFsbAorICogdGhhdCBhcmUgYXZhaWxhYmxlIG9uIHRoZSBjdXJyZW50IHBsYXRmb3JtLglTaW1pbGFybHksIGlmIGEKKyAqIHBvaW50ZXIgdG8gYW4gYXJyYXkgb2YgY2xvY2tkb21haW4tcG93ZXJkb21haW4gYXV0b2RlcGVuZGVuY2llcyB3YXMKKyAqIHByb3ZpZGVkLCByZWdpc3RlciB0aG9zZS4gIE5vIHJldHVybiB2YWx1ZS4KKyAqLwordm9pZCBjbGtkbV9pbml0KHN0cnVjdCBjbG9ja2RvbWFpbiAqKmNsa2RtcywKKwkJc3RydWN0IGNsa2RtX3B3cmRtX2F1dG9kZXAgKmluaXRfYXV0b2RlcHMpCit7CisJc3RydWN0IGNsb2NrZG9tYWluICoqYyA9IE5VTEw7CisJc3RydWN0IGNsa2RtX3B3cmRtX2F1dG9kZXAgKmF1dG9kZXAgPSBOVUxMOworCisJaWYgKGNsa2RtcykKKwkJZm9yIChjID0gY2xrZG1zOyAqYzsgYysrKQorCQkJY2xrZG1fcmVnaXN0ZXIoKmMpOworCisJYXV0b2RlcHMgPSBpbml0X2F1dG9kZXBzOworCWlmIChhdXRvZGVwcykKKwkJZm9yIChhdXRvZGVwID0gYXV0b2RlcHM7IGF1dG9kZXAtPnB3cmRtX25hbWU7IGF1dG9kZXArKykKKwkJCV9hdXRvZGVwX2xvb2t1cChhdXRvZGVwKTsKK30KKworLyoqCisgKiBjbGtkbV9yZWdpc3RlciAtIHJlZ2lzdGVyIGEgY2xvY2tkb21haW4KKyAqIEBjbGtkbTogc3RydWN0IGNsb2NrZG9tYWluICogdG8gcmVnaXN0ZXIKKyAqCisgKiBBZGRzIGEgY2xvY2tkb21haW4gdG8gdGhlIGludGVybmFsIGNsb2NrZG9tYWluIGxpc3QuCisgKiBSZXR1cm5zIC1FSU5WQUwgaWYgZ2l2ZW4gYSBudWxsIHBvaW50ZXIsIC1FRVhJU1QgaWYgYSBjbG9ja2RvbWFpbiBpcworICogYWxyZWFkeSByZWdpc3RlcmVkIGJ5IHRoZSBwcm92aWRlZCBuYW1lLCBvciAwIHVwb24gc3VjY2Vzcy4KKyAqLworaW50IGNsa2RtX3JlZ2lzdGVyKHN0cnVjdCBjbG9ja2RvbWFpbiAqY2xrZG0pCit7CisJaW50IHJldCA9IC1FSU5WQUw7CisJc3RydWN0IHBvd2VyZG9tYWluICpwd3JkbTsKKworCWlmICghY2xrZG0gfHwgIWNsa2RtLT5uYW1lKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmICghb21hcF9jaGlwX2lzKGNsa2RtLT5vbWFwX2NoaXApKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXB3cmRtID0gcHdyZG1fbG9va3VwKGNsa2RtLT5wd3JkbV9uYW1lKTsKKwlpZiAoIXB3cmRtKSB7CisJCXByX2RlYnVnKCJjbG9ja2RvbWFpbjogY2xrZG1fcmVnaXN0ZXIgJXM6IHBvd2VyZG9tYWluICVzICIKKwkJCSAiZG9lcyBub3QgZXhpc3RcbiIsIGNsa2RtLT5uYW1lLCBjbGtkbS0+cHdyZG1fbmFtZSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwljbGtkbS0+cHdyZG0gPSBwd3JkbTsKKworCW11dGV4X2xvY2soJmNsa2RtX211dGV4KTsKKwkvKiBWZXJpZnkgdGhhdCB0aGUgY2xvY2tkb21haW4gaXMgbm90IGFscmVhZHkgcmVnaXN0ZXJlZCAqLworCWlmIChfY2xrZG1fbG9va3VwKGNsa2RtLT5uYW1lKSkgeworCQlyZXQgPSAtRUVYSVNUOworCQlnb3RvIGNyX3VubG9jazsKKwl9OworCisJbGlzdF9hZGQoJmNsa2RtLT5ub2RlLCAmY2xrZG1fbGlzdCk7CisKKwlwd3JkbV9hZGRfY2xrZG0ocHdyZG0sIGNsa2RtKTsKKworCXByX2RlYnVnKCJjbG9ja2RvbWFpbjogcmVnaXN0ZXJlZCAlc1xuIiwgY2xrZG0tPm5hbWUpOworCXJldCA9IDA7CisKK2NyX3VubG9jazoKKwltdXRleF91bmxvY2soJmNsa2RtX211dGV4KTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qKgorICogY2xrZG1fdW5yZWdpc3RlciAtIHVucmVnaXN0ZXIgYSBjbG9ja2RvbWFpbgorICogQGNsa2RtOiBzdHJ1Y3QgY2xvY2tkb21haW4gKiB0byB1bnJlZ2lzdGVyCisgKgorICogUmVtb3ZlcyBhIGNsb2NrZG9tYWluIGZyb20gdGhlIGludGVybmFsIGNsb2NrZG9tYWluIGxpc3QuICBSZXR1cm5zCisgKiAtRUlOVkFMIGlmIGNsa2RtIGFyZ3VtZW50IGlzIE5VTEwuCisgKi8KK2ludCBjbGtkbV91bnJlZ2lzdGVyKHN0cnVjdCBjbG9ja2RvbWFpbiAqY2xrZG0pCit7CisJaWYgKCFjbGtkbSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlwd3JkbV9kZWxfY2xrZG0oY2xrZG0tPnB3cmRtLCBjbGtkbSk7CisKKwltdXRleF9sb2NrKCZjbGtkbV9tdXRleCk7CisJbGlzdF9kZWwoJmNsa2RtLT5ub2RlKTsKKwltdXRleF91bmxvY2soJmNsa2RtX211dGV4KTsKKworCXByX2RlYnVnKCJjbG9ja2RvbWFpbjogdW5yZWdpc3RlcmVkICVzXG4iLCBjbGtkbS0+bmFtZSk7CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBjbGtkbV9sb29rdXAgLSBsb29rIHVwIGEgY2xvY2tkb21haW4gYnkgbmFtZSwgcmV0dXJuIGEgcG9pbnRlcgorICogQG5hbWU6IG5hbWUgb2YgY2xvY2tkb21haW4KKyAqCisgKiBGaW5kIGEgcmVnaXN0ZXJlZCBjbG9ja2RvbWFpbiBieSBpdHMgbmFtZS4gIFJldHVybnMgYSBwb2ludGVyIHRvIHRoZQorICogc3RydWN0IGNsb2NrZG9tYWluIGlmIGZvdW5kLCBvciBOVUxMIG90aGVyd2lzZS4KKyAqLworc3RydWN0IGNsb2NrZG9tYWluICpjbGtkbV9sb29rdXAoY29uc3QgY2hhciAqbmFtZSkKK3sKKwlzdHJ1Y3QgY2xvY2tkb21haW4gKmNsa2RtLCAqdGVtcF9jbGtkbTsKKworCWlmICghbmFtZSkKKwkJcmV0dXJuIE5VTEw7CisKKwljbGtkbSA9IE5VTEw7CisKKwltdXRleF9sb2NrKCZjbGtkbV9tdXRleCk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeSh0ZW1wX2Nsa2RtLCAmY2xrZG1fbGlzdCwgbm9kZSkgeworCQlpZiAoIXN0cmNtcChuYW1lLCB0ZW1wX2Nsa2RtLT5uYW1lKSkgeworCQkJY2xrZG0gPSB0ZW1wX2Nsa2RtOworCQkJYnJlYWs7CisJCX0KKwl9CisJbXV0ZXhfdW5sb2NrKCZjbGtkbV9tdXRleCk7CisKKwlyZXR1cm4gY2xrZG07Cit9CisKKy8qKgorICogY2xrZG1fZm9yX2VhY2ggLSBjYWxsIGZ1bmN0aW9uIG9uIGVhY2ggcmVnaXN0ZXJlZCBjbG9ja2RvbWFpbgorICogQGZuOiBjYWxsYmFjayBmdW5jdGlvbiAqCisgKgorICogQ2FsbCB0aGUgc3VwcGxpZWQgZnVuY3Rpb24gZm9yIGVhY2ggcmVnaXN0ZXJlZCBjbG9ja2RvbWFpbi4KKyAqIFRoZSBjYWxsYmFjayBmdW5jdGlvbiBjYW4gcmV0dXJuIGFueXRoaW5nIGJ1dCAwIHRvIGJhaWwKKyAqIG91dCBlYXJseSBmcm9tIHRoZSBpdGVyYXRvci4gIFRoZSBjYWxsYmFjayBmdW5jdGlvbiBpcyBjYWxsZWQgd2l0aAorICogdGhlIGNsa2RtX211dGV4IGhlbGQsIHNvIG5vIGNsb2NrZG9tYWluIHN0cnVjdHVyZSBtYW5pcHVsYXRpb24KKyAqIGZ1bmN0aW9ucyBzaG91bGQgYmUgY2FsbGVkIGZyb20gdGhlIGNhbGxiYWNrLCBhbHRob3VnaCBoYXJkd2FyZQorICogY2xvY2tkb21haW4gY29udHJvbCBmdW5jdGlvbnMgYXJlIGZpbmUuICBSZXR1cm5zIHRoZSBsYXN0IHJldHVybgorICogdmFsdWUgb2YgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uLCB3aGljaCBzaG91bGQgYmUgMCBmb3Igc3VjY2VzcyBvcgorICogYW55dGhpbmcgZWxzZSB0byBpbmRpY2F0ZSBmYWlsdXJlOyBvciAtRUlOVkFMIGlmIHRoZSBmdW5jdGlvbiBwb2ludGVyCisgKiBpcyBudWxsLgorICovCitpbnQgY2xrZG1fZm9yX2VhY2goaW50ICgqZm4pKHN0cnVjdCBjbG9ja2RvbWFpbiAqY2xrZG0pKQoreworCXN0cnVjdCBjbG9ja2RvbWFpbiAqY2xrZG07CisJaW50IHJldCA9IDA7CisKKwlpZiAoIWZuKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCW11dGV4X2xvY2soJmNsa2RtX211dGV4KTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNsa2RtLCAmY2xrZG1fbGlzdCwgbm9kZSkgeworCQlyZXQgPSAoKmZuKShjbGtkbSk7CisJCWlmIChyZXQpCisJCQlicmVhazsKKwl9CisJbXV0ZXhfdW5sb2NrKCZjbGtkbV9tdXRleCk7CisKKwlyZXR1cm4gcmV0OworfQorCisKKy8qKgorICogY2xrZG1fZ2V0X3B3cmRtIC0gcmV0dXJuIGEgcHRyIHRvIHRoZSBwd3JkbSB0aGF0IHRoaXMgY2xrZG0gcmVzaWRlcyBpbgorICogQGNsa2RtOiBzdHJ1Y3QgY2xvY2tkb21haW4gKgorICoKKyAqIFJldHVybiBhIHBvaW50ZXIgdG8gdGhlIHN0cnVjdCBwb3dlcmRvbWFpbiB0aGF0IHRoZSBzcGVjaWZpZWQgY2xvY2tkb21haW4KKyAqICdjbGtkbScgZXhpc3RzIGluLCBvciByZXR1cm5zIE5VTEwgaWYgY2xrZG0gYXJndW1lbnQgaXMgTlVMTC4KKyAqLworc3RydWN0IHBvd2VyZG9tYWluICpjbGtkbV9nZXRfcHdyZG0oc3RydWN0IGNsb2NrZG9tYWluICpjbGtkbSkKK3sKKwlpZiAoIWNsa2RtKQorCQlyZXR1cm4gTlVMTDsKKworCXJldHVybiBjbGtkbS0+cHdyZG07Cit9CisKKworLyogSGFyZHdhcmUgY2xvY2tkb21haW4gY29udHJvbCAqLworCisvKioKKyAqIG9tYXAyX2Nsa2RtX2Nsa3RyY3RybF9yZWFkIC0gcmVhZCB0aGUgY2xrZG0ncyBjdXJyZW50IHN0YXRlIHRyYW5zaXRpb24gbW9kZQorICogQGNsazogc3RydWN0IGNsayAqIG9mIGEgY2xvY2tkb21haW4KKyAqCisgKiBSZXR1cm4gdGhlIGNsb2NrZG9tYWluJ3MgY3VycmVudCBzdGF0ZSB0cmFuc2l0aW9uIG1vZGUgZnJvbSB0aGUKKyAqIGNvcnJlc3BvbmRpbmcgZG9tYWluIENNX0NMS1NUQ1RSTCByZWdpc3Rlci4JUmV0dXJucyAtRUlOVkFMIGlmIGNsaworICogaXMgTlVMTCBvciB0aGUgY3VycmVudCBtb2RlIHVwb24gc3VjY2Vzcy4KKyAqLworc3RhdGljIGludCBvbWFwMl9jbGtkbV9jbGt0cmN0cmxfcmVhZChzdHJ1Y3QgY2xvY2tkb21haW4gKmNsa2RtKQoreworCXUzMiB2OworCisJaWYgKCFjbGtkbSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwl2ID0gY21fcmVhZF9tb2RfcmVnKGNsa2RtLT5wd3JkbS0+cHJjbV9vZmZzLCBDTV9DTEtTVENUUkwpOworCXYgJj0gY2xrZG0tPmNsa3RyY3RybF9tYXNrOworCXYgPj49IF9fZmZzKGNsa2RtLT5jbGt0cmN0cmxfbWFzayk7CisKKwlyZXR1cm4gdjsKK30KKworLyoqCisgKiBvbWFwMl9jbGtkbV9zbGVlcCAtIGZvcmNlIGNsb2NrZG9tYWluIHNsZWVwIHRyYW5zaXRpb24KKyAqIEBjbGtkbTogc3RydWN0IGNsb2NrZG9tYWluICoKKyAqCisgKiBJbnN0cnVjdCB0aGUgQ00gdG8gZm9yY2UgYSBzbGVlcCB0cmFuc2l0aW9uIG9uIHRoZSBzcGVjaWZpZWQKKyAqIGNsb2NrZG9tYWluICdjbGtkbScuICBSZXR1cm5zIC1FSU5WQUwgaWYgY2xrIGlzIE5VTEwgb3IgaWYKKyAqIGNsb2NrZG9tYWluIGRvZXMgbm90IHN1cHBvcnQgc29mdHdhcmUtaW5pdGlhdGVkIHNsZWVwOyAwIHVwb24KKyAqIHN1Y2Nlc3MuCisgKi8KK2ludCBvbWFwMl9jbGtkbV9zbGVlcChzdHJ1Y3QgY2xvY2tkb21haW4gKmNsa2RtKQoreworCWlmICghY2xrZG0pCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKCEoY2xrZG0tPmZsYWdzICYgQ0xLRE1fQ0FOX0ZPUkNFX1NMRUVQKSkgeworCQlwcl9kZWJ1ZygiY2xvY2tkb21haW46ICVzIGRvZXMgbm90IHN1cHBvcnQgZm9yY2luZyAiCisJCQkgInNsZWVwIHZpYSBzb2Z0d2FyZVxuIiwgY2xrZG0tPm5hbWUpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlwcl9kZWJ1ZygiY2xvY2tkb21haW46IGZvcmNpbmcgc2xlZXAgb24gJXNcbiIsIGNsa2RtLT5uYW1lKTsKKworCWlmIChjcHVfaXNfb21hcDI0eHgoKSkgeworCisJCWNtX3NldF9tb2RfcmVnX2JpdHMoT01BUDI0WFhfRk9SQ0VTVEFURSwKKwkJCQkgICAgY2xrZG0tPnB3cmRtLT5wcmNtX29mZnMsIFBNX1BXU1RDVFJMKTsKKworCX0gZWxzZSBpZiAoY3B1X2lzX29tYXAzNHh4KCkpIHsKKworCQl1MzIgdiA9IChPTUFQMzRYWF9DTEtTVENUUkxfRk9SQ0VfU0xFRVAgPDwKKwkJCSBfX2ZmcyhjbGtkbS0+Y2xrdHJjdHJsX21hc2spKTsKKworCQljbV9ybXdfbW9kX3JlZ19iaXRzKGNsa2RtLT5jbGt0cmN0cmxfbWFzaywgdiwKKwkJCQkgICAgY2xrZG0tPnB3cmRtLT5wcmNtX29mZnMsIENNX0NMS1NUQ1RSTCk7CisKKwl9IGVsc2UgeworCQlCVUcoKTsKKwl9OworCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogb21hcDJfY2xrZG1fd2FrZXVwIC0gZm9yY2UgY2xvY2tkb21haW4gd2FrZXVwIHRyYW5zaXRpb24KKyAqIEBjbGtkbTogc3RydWN0IGNsb2NrZG9tYWluICoKKyAqCisgKiBJbnN0cnVjdCB0aGUgQ00gdG8gZm9yY2UgYSB3YWtldXAgdHJhbnNpdGlvbiBvbiB0aGUgc3BlY2lmaWVkCisgKiBjbG9ja2RvbWFpbiAnY2xrZG0nLiAgUmV0dXJucyAtRUlOVkFMIGlmIGNsa2RtIGlzIE5VTEwgb3IgaWYgdGhlCisgKiBjbG9ja2RvbWFpbiBkb2VzIG5vdCBzdXBwb3J0IHNvZnR3YXJlLWNvbnRyb2xsZWQgd2FrZXVwOyAwIHVwb24KKyAqIHN1Y2Nlc3MuCisgKi8KK2ludCBvbWFwMl9jbGtkbV93YWtldXAoc3RydWN0IGNsb2NrZG9tYWluICpjbGtkbSkKK3sKKwlpZiAoIWNsa2RtKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmICghKGNsa2RtLT5mbGFncyAmIENMS0RNX0NBTl9GT1JDRV9XQUtFVVApKSB7CisJCXByX2RlYnVnKCJjbG9ja2RvbWFpbjogJXMgZG9lcyBub3Qgc3VwcG9ydCBmb3JjaW5nICIKKwkJCSAid2FrZXVwIHZpYSBzb2Z0d2FyZVxuIiwgY2xrZG0tPm5hbWUpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlwcl9kZWJ1ZygiY2xvY2tkb21haW46IGZvcmNpbmcgd2FrZXVwIG9uICVzXG4iLCBjbGtkbS0+bmFtZSk7CisKKwlpZiAoY3B1X2lzX29tYXAyNHh4KCkpIHsKKworCQljbV9jbGVhcl9tb2RfcmVnX2JpdHMoT01BUDI0WFhfRk9SQ0VTVEFURSwKKwkJCQkgICAgICBjbGtkbS0+cHdyZG0tPnByY21fb2ZmcywgUE1fUFdTVENUUkwpOworCisJfSBlbHNlIGlmIChjcHVfaXNfb21hcDM0eHgoKSkgeworCisJCXUzMiB2ID0gKE9NQVAzNFhYX0NMS1NUQ1RSTF9GT1JDRV9XQUtFVVAgPDwKKwkJCSBfX2ZmcyhjbGtkbS0+Y2xrdHJjdHJsX21hc2spKTsKKworCQljbV9ybXdfbW9kX3JlZ19iaXRzKGNsa2RtLT5jbGt0cmN0cmxfbWFzaywgdiwKKwkJCQkgICAgY2xrZG0tPnB3cmRtLT5wcmNtX29mZnMsIENNX0NMS1NUQ1RSTCk7CisKKwl9IGVsc2UgeworCQlCVUcoKTsKKwl9OworCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogb21hcDJfY2xrZG1fYWxsb3dfaWRsZSAtIGVuYWJsZSBod3N1cCBpZGxlIHRyYW5zaXRpb25zIGZvciBjbGtkbQorICogQGNsa2RtOiBzdHJ1Y3QgY2xvY2tkb21haW4gKgorICoKKyAqIEFsbG93IHRoZSBoYXJkd2FyZSB0byBhdXRvbWF0aWNhbGx5IHN3aXRjaCB0aGUgY2xvY2tkb21haW4gaW50bworICogYWN0aXZlIG9yIGlkbGUgc3RhdGVzLCBhcyBuZWVkZWQgYnkgZG93bnN0cmVhbSBjbG9ja3MuICBJZiB0aGUKKyAqIGNsb2NrZG9tYWluIGhhcyBhbnkgZG93bnN0cmVhbSBjbG9ja3MgZW5hYmxlZCBpbiB0aGUgY2xvY2sKKyAqIGZyYW1ld29yaywgd2tkZXAvc2xlZXBkZXAgYXV0b2RlcGVuZGVuY2llcyBhcmUgYWRkZWQ7IHRoaXMgaXMgc28KKyAqIGRldmljZSBkcml2ZXJzIGNhbiByZWFkIGFuZCB3cml0ZSB0byB0aGUgZGV2aWNlLiAgTm8gcmV0dXJuIHZhbHVlLgorICovCit2b2lkIG9tYXAyX2Nsa2RtX2FsbG93X2lkbGUoc3RydWN0IGNsb2NrZG9tYWluICpjbGtkbSkKK3sKKwl1MzIgdjsKKworCWlmICghY2xrZG0pCisJCXJldHVybjsKKworCWlmICghKGNsa2RtLT5mbGFncyAmIENMS0RNX0NBTl9FTkFCTEVfQVVUTykpIHsKKwkJcHJfZGVidWcoImNsb2NrOiBhdXRvbWF0aWMgaWRsZSB0cmFuc2l0aW9ucyBjYW5ub3QgYmUgZW5hYmxlZCAiCisJCQkgIm9uIGNsb2NrZG9tYWluICVzXG4iLCBjbGtkbS0+bmFtZSk7CisJCXJldHVybjsKKwl9CisKKwlwcl9kZWJ1ZygiY2xvY2tkb21haW46IGVuYWJsaW5nIGF1dG9tYXRpYyBpZGxlIHRyYW5zaXRpb25zIGZvciAlc1xuIiwKKwkJIGNsa2RtLT5uYW1lKTsKKworCWlmIChhdG9taWNfcmVhZCgmY2xrZG0tPnVzZWNvdW50KSA+IDApCisJCV9jbGtkbV9hZGRfYXV0b2RlcHMoY2xrZG0pOworCisJaWYgKGNwdV9pc19vbWFwMjR4eCgpKQorCQl2ID0gT01BUDI0WFhfQ0xLU1RDVFJMX0VOQUJMRV9BVVRPOworCWVsc2UgaWYgKGNwdV9pc19vbWFwMzR4eCgpKQorCQl2ID0gT01BUDM0WFhfQ0xLU1RDVFJMX0VOQUJMRV9BVVRPOworCWVsc2UKKwkJQlVHKCk7CisKKworCWNtX3Jtd19tb2RfcmVnX2JpdHMoY2xrZG0tPmNsa3RyY3RybF9tYXNrLAorCQkJICAgIHYgPDwgX19mZnMoY2xrZG0tPmNsa3RyY3RybF9tYXNrKSwKKwkJCSAgICBjbGtkbS0+cHdyZG0tPnByY21fb2ZmcywKKwkJCSAgICBDTV9DTEtTVENUUkwpOworfQorCisvKioKKyAqIG9tYXAyX2Nsa2RtX2RlbnlfaWRsZSAtIGRpc2FibGUgaHdzdXAgaWRsZSB0cmFuc2l0aW9ucyBmb3IgY2xrZG0KKyAqIEBjbGtkbTogc3RydWN0IGNsb2NrZG9tYWluICoKKyAqCisgKiBQcmV2ZW50IHRoZSBoYXJkd2FyZSBmcm9tIGF1dG9tYXRpY2FsbHkgc3dpdGNoaW5nIHRoZSBjbG9ja2RvbWFpbgorICogaW50byBpbmFjdGl2ZSBvciBpZGxlIHN0YXRlcy4gIElmIHRoZSBjbG9ja2RvbWFpbiBoYXMgZG93bnN0cmVhbQorICogY2xvY2tzIGVuYWJsZWQgaW4gdGhlIGNsb2NrIGZyYW1ld29yaywgd2tkZXAvc2xlZXBkZXAKKyAqIGF1dG9kZXBlbmRlbmNpZXMgYXJlIHJlbW92ZWQuICBObyByZXR1cm4gdmFsdWUuCisgKi8KK3ZvaWQgb21hcDJfY2xrZG1fZGVueV9pZGxlKHN0cnVjdCBjbG9ja2RvbWFpbiAqY2xrZG0pCit7CisJdTMyIHY7CisKKwlpZiAoIWNsa2RtKQorCQlyZXR1cm47CisKKwlpZiAoIShjbGtkbS0+ZmxhZ3MgJiBDTEtETV9DQU5fRElTQUJMRV9BVVRPKSkgeworCQlwcl9kZWJ1ZygiY2xvY2tkb21haW46IGF1dG9tYXRpYyBpZGxlIHRyYW5zaXRpb25zIGNhbm5vdCBiZSAiCisJCQkgImRpc2FibGVkIG9uICVzXG4iLCBjbGtkbS0+bmFtZSk7CisJCXJldHVybjsKKwl9CisKKwlwcl9kZWJ1ZygiY2xvY2tkb21haW46IGRpc2FibGluZyBhdXRvbWF0aWMgaWRsZSB0cmFuc2l0aW9ucyBmb3IgJXNcbiIsCisJCSBjbGtkbS0+bmFtZSk7CisKKwlpZiAoY3B1X2lzX29tYXAyNHh4KCkpCisJCXYgPSBPTUFQMjRYWF9DTEtTVENUUkxfRElTQUJMRV9BVVRPOworCWVsc2UgaWYgKGNwdV9pc19vbWFwMzR4eCgpKQorCQl2ID0gT01BUDM0WFhfQ0xLU1RDVFJMX0RJU0FCTEVfQVVUTzsKKwllbHNlCisJCUJVRygpOworCisJY21fcm13X21vZF9yZWdfYml0cyhjbGtkbS0+Y2xrdHJjdHJsX21hc2ssCisJCQkgICAgdiA8PCBfX2ZmcyhjbGtkbS0+Y2xrdHJjdHJsX21hc2spLAorCQkJICAgIGNsa2RtLT5wd3JkbS0+cHJjbV9vZmZzLCBDTV9DTEtTVENUUkwpOworCisJaWYgKGF0b21pY19yZWFkKCZjbGtkbS0+dXNlY291bnQpID4gMCkKKwkJX2Nsa2RtX2RlbF9hdXRvZGVwcyhjbGtkbSk7Cit9CisKKworLyogQ2xvY2tkb21haW4tdG8tY2xvY2sgZnJhbWV3b3JrIGludGVyZmFjZSBjb2RlICovCisKKy8qKgorICogb21hcDJfY2xrZG1fY2xrX2VuYWJsZSAtIGFkZCBhbiBlbmFibGVkIGRvd25zdHJlYW0gY2xvY2sgdG8gdGhpcyBjbGtkbQorICogQGNsa2RtOiBzdHJ1Y3QgY2xvY2tkb21haW4gKgorICogQGNsazogc3RydWN0IGNsayAqIG9mIHRoZSBlbmFibGVkIGRvd25zdHJlYW0gY2xvY2sKKyAqCisgKiBJbmNyZW1lbnQgdGhlIHVzZWNvdW50IG9mIHRoaXMgY2xvY2tkb21haW4gJ2Nsa2RtJyBhbmQgZW5zdXJlIHRoYXQKKyAqIGl0IGlzIGF3YWtlLiAgSW50ZW5kZWQgdG8gYmUgY2FsbGVkIGJ5IGNsa19lbmFibGUoKSBjb2RlLiAgSWYgdGhlCisgKiBjbG9ja2RvbWFpbiBpcyBpbiBzb2Z0d2FyZS1zdXBlcnZpc2VkIGlkbGUgbW9kZSwgZm9yY2UgdGhlCisgKiBjbG9ja2RvbWFpbiB0byB3YWtlLiAgSWYgdGhlIGNsb2NrZG9tYWluIGlzIGluIGhhcmR3YXJlLXN1cGVydmlzZWQKKyAqIGlkbGUgbW9kZSwgYWRkIGNsa2RtLXB3cmRtIGF1dG9kZXBlbmRlbmNpZXMsIHRvIGVuc3VyZSB0aGF0IGRldmljZXMKKyAqIGluIHRoZSBjbG9ja2RvbWFpbiBjYW4gYmUgcmVhZCBmcm9tL3dyaXR0ZW4gdG8gYnkgb24tY2hpcCBwcm9jZXNzb3JzLgorICogUmV0dXJucyAtRUlOVkFMIGlmIHBhc3NlZCBudWxsIHBvaW50ZXJzOyByZXR1cm5zIDAgdXBvbiBzdWNjZXNzIG9yCisgKiBpZiB0aGUgY2xvY2tkb21haW4gaXMgaW4gaHdzdXAgaWRsZSBtb2RlLgorICovCitpbnQgb21hcDJfY2xrZG1fY2xrX2VuYWJsZShzdHJ1Y3QgY2xvY2tkb21haW4gKmNsa2RtLCBzdHJ1Y3QgY2xrICpjbGspCit7CisJaW50IHY7CisKKwkvKgorCSAqIFhYWCBSZXdyaXRlIHRoaXMgY29kZSB0byBtYWludGFpbiBhIGxpc3Qgb2YgZW5hYmxlZAorCSAqIGRvd25zdHJlYW0gY2xvY2tzIGZvciBkZWJ1Z2dpbmcgcHVycG9zZXM/CisJICovCisKKwlpZiAoIWNsa2RtIHx8ICFjbGspCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKGF0b21pY19pbmNfcmV0dXJuKCZjbGtkbS0+dXNlY291bnQpID4gMSkKKwkJcmV0dXJuIDA7CisKKwkvKiBDbG9ja2RvbWFpbiBub3cgaGFzIG9uZSBlbmFibGVkIGRvd25zdHJlYW0gY2xvY2sgKi8KKworCXByX2RlYnVnKCJjbG9ja2RvbWFpbjogY2xrZG0gJXM6IGNsayAlcyBub3cgZW5hYmxlZFxuIiwgY2xrZG0tPm5hbWUsCisJCSBjbGstPm5hbWUpOworCisJdiA9IG9tYXAyX2Nsa2RtX2Nsa3RyY3RybF9yZWFkKGNsa2RtKTsKKworCWlmICgoY3B1X2lzX29tYXAzNHh4KCkgJiYgdiA9PSBPTUFQMzRYWF9DTEtTVENUUkxfRU5BQkxFX0FVVE8pIHx8CisJICAgIChjcHVfaXNfb21hcDI0eHgoKSAmJiB2ID09IE9NQVAyNFhYX0NMS1NUQ1RSTF9FTkFCTEVfQVVUTykpCisJCV9jbGtkbV9hZGRfYXV0b2RlcHMoY2xrZG0pOworCWVsc2UKKwkJb21hcDJfY2xrZG1fd2FrZXVwKGNsa2RtKTsKKworCXJldHVybiAwOworfQorCisvKioKKyAqIG9tYXAyX2Nsa2RtX2Nsa19kaXNhYmxlIC0gcmVtb3ZlIGFuIGVuYWJsZWQgZG93bnN0cmVhbSBjbG9jayBmcm9tIHRoaXMgY2xrZG0KKyAqIEBjbGtkbTogc3RydWN0IGNsb2NrZG9tYWluICoKKyAqIEBjbGs6IHN0cnVjdCBjbGsgKiBvZiB0aGUgZGlzYWJsZWQgZG93bnN0cmVhbSBjbG9jaworICoKKyAqIERlY3JlbWVudCB0aGUgdXNlY291bnQgb2YgdGhpcyBjbG9ja2RvbWFpbiAnY2xrZG0nLiBJbnRlbmRlZCB0byBiZQorICogY2FsbGVkIGJ5IGNsa19kaXNhYmxlKCkgY29kZS4gIElmIHRoZSB1c2Vjb3VudCBnb2VzIHRvIDAsIHB1dCB0aGUKKyAqIGNsb2NrZG9tYWluIHRvIHNsZWVwIChzb2Z0d2FyZS1zdXBlcnZpc2VkIG1vZGUpIG9yIHJlbW92ZSB0aGUKKyAqIGNsa2RtLXB3cmRtIGF1dG9kZXBlbmRlbmNpZXMgKGhhcmR3YXJlLXN1cGVydmlzZWQgbW9kZSkuICBSZXR1cm5zCisgKiAtRUlOVkFMIGlmIHBhc3NlZCBudWxsIHBvaW50ZXJzOyAtRVJBTkdFIGlmIHRoZSBjbGtkbSB1c2Vjb3VudAorICogdW5kZXJmbG93cyBhbmQgZGVidWdnaW5nIGlzIGVuYWJsZWQ7IG9yIHJldHVybnMgMCB1cG9uIHN1Y2Nlc3Mgb3IKKyAqIGlmIHRoZSBjbG9ja2RvbWFpbiBpcyBpbiBod3N1cCBpZGxlIG1vZGUuCisgKi8KK2ludCBvbWFwMl9jbGtkbV9jbGtfZGlzYWJsZShzdHJ1Y3QgY2xvY2tkb21haW4gKmNsa2RtLCBzdHJ1Y3QgY2xrICpjbGspCit7CisJaW50IHY7CisKKwkvKgorCSAqIFhYWCBSZXdyaXRlIHRoaXMgY29kZSB0byBtYWludGFpbiBhIGxpc3Qgb2YgZW5hYmxlZAorCSAqIGRvd25zdHJlYW0gY2xvY2tzIGZvciBkZWJ1Z2dpbmcgcHVycG9zZXM/CisJICovCisKKwlpZiAoIWNsa2RtIHx8ICFjbGspCisJCXJldHVybiAtRUlOVkFMOworCisjaWZkZWYgREVCVUcKKwlpZiAoYXRvbWljX3JlYWQoJmNsa2RtLT51c2Vjb3VudCkgPT0gMCkgeworCQlXQVJOX09OKDEpOyAvKiB1bmRlcmZsb3cgKi8KKwkJcmV0dXJuIC1FUkFOR0U7CisJfQorI2VuZGlmCisKKwlpZiAoYXRvbWljX2RlY19yZXR1cm4oJmNsa2RtLT51c2Vjb3VudCkgPiAwKQorCQlyZXR1cm4gMDsKKworCS8qIEFsbCBkb3duc3RyZWFtIGNsb2NrcyBvZiB0aGlzIGNsb2NrZG9tYWluIGFyZSBub3cgZGlzYWJsZWQgKi8KKworCXByX2RlYnVnKCJjbG9ja2RvbWFpbjogY2xrZG0gJXM6IGNsayAlcyBub3cgZGlzYWJsZWRcbiIsIGNsa2RtLT5uYW1lLAorCQkgY2xrLT5uYW1lKTsKKworCXYgPSBvbWFwMl9jbGtkbV9jbGt0cmN0cmxfcmVhZChjbGtkbSk7CisKKwlpZiAoKGNwdV9pc19vbWFwMzR4eCgpICYmIHYgPT0gT01BUDM0WFhfQ0xLU1RDVFJMX0VOQUJMRV9BVVRPKSB8fAorCSAgICAoY3B1X2lzX29tYXAyNHh4KCkgJiYgdiA9PSBPTUFQMjRYWF9DTEtTVENUUkxfRU5BQkxFX0FVVE8pKQorCQlfY2xrZG1fZGVsX2F1dG9kZXBzKGNsa2RtKTsKKwllbHNlCisJCW9tYXAyX2Nsa2RtX3NsZWVwKGNsa2RtKTsKKworCXJldHVybiAwOworfQorCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrZG9tYWlucy5oIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9ja2RvbWFpbnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZDg2ZGNjCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9ja2RvbWFpbnMuaApAQCAtMCwwICsxLDMwNSBAQAorLyoKKyAqIE9NQVAyLzMgY2xvY2tkb21haW5zCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRleGFzIEluc3RydW1lbnRzLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggTm9raWEgQ29ycG9yYXRpb24KKyAqCisgKiBXcml0dGVuIGJ5IFBhdWwgV2FsbXNsZXkKKyAqLworCisjaWZuZGVmIF9fQVJDSF9BUk1fTUFDSF9PTUFQMl9DTE9DS0RPTUFJTlNfSAorI2RlZmluZSBfX0FSQ0hfQVJNX01BQ0hfT01BUDJfQ0xPQ0tET01BSU5TX0gKKworI2luY2x1ZGUgPG1hY2gvY2xvY2tkb21haW4uaD4KKworLyoKKyAqIE9NQVAyLzMtY29tbW9uIGNsb2NrZG9tYWlucworICovCisKKy8qIFRoaXMgaXMgYW4gaW1wbGljaXQgY2xvY2tkb21haW4gLSBpdCBpcyBuZXZlciBkZWZpbmVkIGFzIHN1Y2ggaW4gVFJNICovCitzdGF0aWMgc3RydWN0IGNsb2NrZG9tYWluIHdrdXBfY2xrZG0gPSB7CisJLm5hbWUJCT0gIndrdXBfY2xrZG0iLAorCS5wd3JkbV9uYW1lCT0gIndrdXBfcHdyZG0iLAorCS5vbWFwX2NoaXAJPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAyNFhYIHwgQ0hJUF9JU19PTUFQMzQzMCksCit9OworCisvKgorICogMjQyMC1vbmx5IGNsb2NrZG9tYWlucworICovCisKKyNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAyNDIwKQorCitzdGF0aWMgc3RydWN0IGNsb2NrZG9tYWluIG1wdV8yNDIwX2Nsa2RtID0geworCS5uYW1lCQk9ICJtcHVfY2xrZG0iLAorCS5wd3JkbV9uYW1lCT0gIm1wdV9wd3JkbSIsCisJLmZsYWdzCQk9IENMS0RNX0NBTl9IV1NVUCwKKwkuY2xrdHJjdHJsX21hc2sgPSBPTUFQMjRYWF9BVVRPU1RBVEVfTVBVX01BU0ssCisJLm9tYXBfY2hpcAk9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDI0MjApLAorfTsKKworc3RhdGljIHN0cnVjdCBjbG9ja2RvbWFpbiBpdmExXzI0MjBfY2xrZG0gPSB7CisJLm5hbWUJCT0gIml2YTFfY2xrZG0iLAorCS5wd3JkbV9uYW1lCT0gImRzcF9wd3JkbSIsCisJLmZsYWdzCQk9IENMS0RNX0NBTl9IV1NVUF9TV1NVUCwKKwkuY2xrdHJjdHJsX21hc2sgPSBPTUFQMjQyMF9BVVRPU1RBVEVfSVZBX01BU0ssCisJLm9tYXBfY2hpcAk9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDI0MjApLAorfTsKKworI2VuZGlmICAvKiBDT05GSUdfQVJDSF9PTUFQMjQyMCAqLworCisKKy8qCisgKiAyNDMwLW9ubHkgY2xvY2tkb21haW5zCisgKi8KKworI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDI0MzApCisKK3N0YXRpYyBzdHJ1Y3QgY2xvY2tkb21haW4gbXB1XzI0MzBfY2xrZG0gPSB7CisJLm5hbWUJCT0gIm1wdV9jbGtkbSIsCisJLnB3cmRtX25hbWUJPSAibXB1X3B3cmRtIiwKKwkuZmxhZ3MJCT0gQ0xLRE1fQ0FOX0hXU1VQX1NXU1VQLAorCS5jbGt0cmN0cmxfbWFzayA9IE9NQVAyNFhYX0FVVE9TVEFURV9NUFVfTUFTSywKKwkub21hcF9jaGlwCT0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMjQzMCksCit9OworCitzdGF0aWMgc3RydWN0IGNsb2NrZG9tYWluIG1kbV9jbGtkbSA9IHsKKwkubmFtZQkJPSAibWRtX2Nsa2RtIiwKKwkucHdyZG1fbmFtZQk9ICJtZG1fcHdyZG0iLAorCS5mbGFncwkJPSBDTEtETV9DQU5fSFdTVVBfU1dTVVAsCisJLmNsa3RyY3RybF9tYXNrID0gT01BUDI0MzBfQVVUT1NUQVRFX01ETV9NQVNLLAorCS5vbWFwX2NoaXAJPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAyNDMwKSwKK307CisKKyNlbmRpZiAgICAvKiBDT05GSUdfQVJDSF9PTUFQMjQzMCAqLworCisKKy8qCisgKiAyNFhYLW9ubHkgY2xvY2tkb21haW5zCisgKi8KKworI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDI0WFgpCisKK3N0YXRpYyBzdHJ1Y3QgY2xvY2tkb21haW4gZHNwX2Nsa2RtID0geworCS5uYW1lCQk9ICJkc3BfY2xrZG0iLAorCS5wd3JkbV9uYW1lCT0gImRzcF9wd3JkbSIsCisJLmZsYWdzCQk9IENMS0RNX0NBTl9IV1NVUF9TV1NVUCwKKwkuY2xrdHJjdHJsX21hc2sgPSBPTUFQMjRYWF9BVVRPU1RBVEVfRFNQX01BU0ssCisJLm9tYXBfY2hpcAk9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDI0WFgpLAorfTsKKworc3RhdGljIHN0cnVjdCBjbG9ja2RvbWFpbiBnZnhfMjR4eF9jbGtkbSA9IHsKKwkubmFtZQkJPSAiZ2Z4X2Nsa2RtIiwKKwkucHdyZG1fbmFtZQk9ICJnZnhfcHdyZG0iLAorCS5mbGFncwkJPSBDTEtETV9DQU5fSFdTVVBfU1dTVVAsCisJLmNsa3RyY3RybF9tYXNrID0gT01BUDI0WFhfQVVUT1NUQVRFX0dGWF9NQVNLLAorCS5vbWFwX2NoaXAJPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAyNFhYKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xvY2tkb21haW4gY29yZV9sM18yNHh4X2Nsa2RtID0geworCS5uYW1lCQk9ICJjb3JlX2wzX2Nsa2RtIiwKKwkucHdyZG1fbmFtZQk9ICJjb3JlX3B3cmRtIiwKKwkuZmxhZ3MJCT0gQ0xLRE1fQ0FOX0hXU1VQLAorCS5jbGt0cmN0cmxfbWFzayA9IE9NQVAyNFhYX0FVVE9TVEFURV9MM19NQVNLLAorCS5vbWFwX2NoaXAJPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAyNFhYKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xvY2tkb21haW4gY29yZV9sNF8yNHh4X2Nsa2RtID0geworCS5uYW1lCQk9ICJjb3JlX2w0X2Nsa2RtIiwKKwkucHdyZG1fbmFtZQk9ICJjb3JlX3B3cmRtIiwKKwkuZmxhZ3MJCT0gQ0xLRE1fQ0FOX0hXU1VQLAorCS5jbGt0cmN0cmxfbWFzayA9IE9NQVAyNFhYX0FVVE9TVEFURV9MNF9NQVNLLAorCS5vbWFwX2NoaXAJPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAyNFhYKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xvY2tkb21haW4gZHNzXzI0eHhfY2xrZG0gPSB7CisJLm5hbWUJCT0gImRzc19jbGtkbSIsCisJLnB3cmRtX25hbWUJPSAiY29yZV9wd3JkbSIsCisJLmZsYWdzCQk9IENMS0RNX0NBTl9IV1NVUCwKKwkuY2xrdHJjdHJsX21hc2sgPSBPTUFQMjRYWF9BVVRPU1RBVEVfRFNTX01BU0ssCisJLm9tYXBfY2hpcAk9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDI0WFgpLAorfTsKKworI2VuZGlmICAgLyogQ09ORklHX0FSQ0hfT01BUDI0WFggKi8KKworCisvKgorICogMzR4eCBjbG9ja2RvbWFpbnMKKyAqLworCisjaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMzRYWCkKKworc3RhdGljIHN0cnVjdCBjbG9ja2RvbWFpbiBtcHVfMzR4eF9jbGtkbSA9IHsKKwkubmFtZQkJPSAibXB1X2Nsa2RtIiwKKwkucHdyZG1fbmFtZQk9ICJtcHVfcHdyZG0iLAorCS5mbGFncwkJPSBDTEtETV9DQU5fSFdTVVAgfCBDTEtETV9DQU5fRk9SQ0VfV0FLRVVQLAorCS5jbGt0cmN0cmxfbWFzayA9IE9NQVAzNDMwX0NMS1RSQ1RSTF9NUFVfTUFTSywKKwkub21hcF9jaGlwCT0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMzQzMCksCit9OworCitzdGF0aWMgc3RydWN0IGNsb2NrZG9tYWluIG5lb25fY2xrZG0gPSB7CisJLm5hbWUJCT0gIm5lb25fY2xrZG0iLAorCS5wd3JkbV9uYW1lCT0gIm5lb25fcHdyZG0iLAorCS5mbGFncwkJPSBDTEtETV9DQU5fSFdTVVBfU1dTVVAsCisJLmNsa3RyY3RybF9tYXNrID0gT01BUDM0MzBfQ0xLVFJDVFJMX05FT05fTUFTSywKKwkub21hcF9jaGlwCT0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMzQzMCksCit9OworCitzdGF0aWMgc3RydWN0IGNsb2NrZG9tYWluIGl2YTJfY2xrZG0gPSB7CisJLm5hbWUJCT0gIml2YTJfY2xrZG0iLAorCS5wd3JkbV9uYW1lCT0gIml2YTJfcHdyZG0iLAorCS5mbGFncwkJPSBDTEtETV9DQU5fSFdTVVBfU1dTVVAsCisJLmNsa3RyY3RybF9tYXNrID0gT01BUDM0MzBfQ0xLVFJDVFJMX0lWQTJfTUFTSywKKwkub21hcF9jaGlwCT0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMzQzMCksCit9OworCitzdGF0aWMgc3RydWN0IGNsb2NrZG9tYWluIGdmeF8zNDMwZXMxX2Nsa2RtID0geworCS5uYW1lCQk9ICJnZnhfY2xrZG0iLAorCS5wd3JkbV9uYW1lCT0gImdmeF9wd3JkbSIsCisJLmZsYWdzCQk9IENMS0RNX0NBTl9IV1NVUF9TV1NVUCwKKwkuY2xrdHJjdHJsX21hc2sgPSBPTUFQMzQzMEVTMV9DTEtUUkNUUkxfR0ZYX01BU0ssCisJLm9tYXBfY2hpcAk9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDM0MzBFUzEpLAorfTsKKworc3RhdGljIHN0cnVjdCBjbG9ja2RvbWFpbiBzZ3hfY2xrZG0gPSB7CisJLm5hbWUJCT0gInNneF9jbGtkbSIsCisJLnB3cmRtX25hbWUJPSAic2d4X3B3cmRtIiwKKwkuZmxhZ3MJCT0gQ0xLRE1fQ0FOX0hXU1VQX1NXU1VQLAorCS5jbGt0cmN0cmxfbWFzayA9IE9NQVAzNDMwRVMyX0NMS1RSQ1RSTF9TR1hfTUFTSywKKwkub21hcF9jaGlwCT0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMzQzMEVTMiksCit9OworCisvKgorICogVGhlIGRpZS10by1kaWUgY2xvY2tkb21haW4gd2FzIGRvY3VtZW50ZWQgaW4gdGhlIDM0eHggRVMxIFRSTSwgYnV0CisgKiB0aGVuIHRoYXQgaW5mb3JtYXRpb24gd2FzIHJlbW92ZWQgZnJvbSB0aGUgMzR4eCBFUzIrIFRSTS4gIEl0IGlzCisgKiB1bmNsZWFyIHdoZXRoZXIgdGhlIGNvcmUgaXMgc3RpbGwgdGhlcmUsIGJ1dCB0aGUgY2xvY2tkb21haW4gbG9naWMKKyAqIGlzIHRoZXJlLCBhbmQgbXVzdCBiZSBwcm9ncmFtbWVkIHRvIGFuIGFwcHJvcHJpYXRlIHN0YXRlIGlmIHRoZQorICogQ09SRSBjbG9ja2RvbWFpbiBpcyB0byBiZWNvbWUgaW5hY3RpdmUuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgY2xvY2tkb21haW4gZDJkX2Nsa2RtID0geworCS5uYW1lCQk9ICJkMmRfY2xrZG0iLAorCS5wd3JkbV9uYW1lCT0gImNvcmVfcHdyZG0iLAorCS5mbGFncwkJPSBDTEtETV9DQU5fSFdTVVAsCisJLmNsa3RyY3RybF9tYXNrID0gT01BUDM0MzBFUzFfQ0xLVFJDVFJMX0QyRF9NQVNLLAorCS5vbWFwX2NoaXAJPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAzNDMwKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xvY2tkb21haW4gY29yZV9sM18zNHh4X2Nsa2RtID0geworCS5uYW1lCQk9ICJjb3JlX2wzX2Nsa2RtIiwKKwkucHdyZG1fbmFtZQk9ICJjb3JlX3B3cmRtIiwKKwkuZmxhZ3MJCT0gQ0xLRE1fQ0FOX0hXU1VQLAorCS5jbGt0cmN0cmxfbWFzayA9IE9NQVAzNDMwX0NMS1RSQ1RSTF9MM19NQVNLLAorCS5vbWFwX2NoaXAJPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAzNDMwKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xvY2tkb21haW4gY29yZV9sNF8zNHh4X2Nsa2RtID0geworCS5uYW1lCQk9ICJjb3JlX2w0X2Nsa2RtIiwKKwkucHdyZG1fbmFtZQk9ICJjb3JlX3B3cmRtIiwKKwkuZmxhZ3MJCT0gQ0xLRE1fQ0FOX0hXU1VQLAorCS5jbGt0cmN0cmxfbWFzayA9IE9NQVAzNDMwX0NMS1RSQ1RSTF9MNF9NQVNLLAorCS5vbWFwX2NoaXAJPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAzNDMwKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xvY2tkb21haW4gZHNzXzM0eHhfY2xrZG0gPSB7CisJLm5hbWUJCT0gImRzc19jbGtkbSIsCisJLnB3cmRtX25hbWUJPSAiZHNzX3B3cmRtIiwKKwkuZmxhZ3MJCT0gQ0xLRE1fQ0FOX0hXU1VQX1NXU1VQLAorCS5jbGt0cmN0cmxfbWFzayA9IE9NQVAzNDMwX0NMS1RSQ1RSTF9EU1NfTUFTSywKKwkub21hcF9jaGlwCT0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMzQzMCksCit9OworCitzdGF0aWMgc3RydWN0IGNsb2NrZG9tYWluIGNhbV9jbGtkbSA9IHsKKwkubmFtZQkJPSAiY2FtX2Nsa2RtIiwKKwkucHdyZG1fbmFtZQk9ICJjYW1fcHdyZG0iLAorCS5mbGFncwkJPSBDTEtETV9DQU5fSFdTVVBfU1dTVVAsCisJLmNsa3RyY3RybF9tYXNrID0gT01BUDM0MzBfQ0xLVFJDVFJMX0NBTV9NQVNLLAorCS5vbWFwX2NoaXAJPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAzNDMwKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xvY2tkb21haW4gdXNiaG9zdF9jbGtkbSA9IHsKKwkubmFtZQkJPSAidXNiaG9zdF9jbGtkbSIsCisJLnB3cmRtX25hbWUJPSAidXNiaG9zdF9wd3JkbSIsCisJLmZsYWdzCQk9IENMS0RNX0NBTl9IV1NVUF9TV1NVUCwKKwkuY2xrdHJjdHJsX21hc2sgPSBPTUFQMzQzMEVTMl9DTEtUUkNUUkxfVVNCSE9TVF9NQVNLLAorCS5vbWFwX2NoaXAJPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAzNDMwRVMyKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xvY2tkb21haW4gcGVyX2Nsa2RtID0geworCS5uYW1lCQk9ICJwZXJfY2xrZG0iLAorCS5wd3JkbV9uYW1lCT0gInBlcl9wd3JkbSIsCisJLmZsYWdzCQk9IENMS0RNX0NBTl9IV1NVUF9TV1NVUCwKKwkuY2xrdHJjdHJsX21hc2sgPSBPTUFQMzQzMF9DTEtUUkNUUkxfUEVSX01BU0ssCisJLm9tYXBfY2hpcAk9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDM0MzApLAorfTsKKworc3RhdGljIHN0cnVjdCBjbG9ja2RvbWFpbiBlbXVfY2xrZG0gPSB7CisJLm5hbWUJCT0gImVtdV9jbGtkbSIsCisJLnB3cmRtX25hbWUJPSAiZW11X3B3cmRtIiwKKwkuZmxhZ3MJCT0gQ0xLRE1fQ0FOX0VOQUJMRV9BVVRPIHwgQ0xLRE1fQ0FOX1NXU1VQLAorCS5jbGt0cmN0cmxfbWFzayA9IE9NQVAzNDMwX0NMS1RSQ1RSTF9FTVVfTUFTSywKKwkub21hcF9jaGlwCT0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMzQzMCksCit9OworCisjZW5kaWYgICAvKiBDT05GSUdfQVJDSF9PTUFQMzRYWCAqLworCisvKgorICogQ2xvY2tkb21haW4tcG93ZXJkb21haW4gaHdzdXAgZGVwZW5kZW5jaWVzICgzNFhYIG9ubHkpCisgKi8KKworc3RhdGljIHN0cnVjdCBjbGtkbV9wd3JkbV9hdXRvZGVwIGNsa2RtX3B3cmRtX2F1dG9kZXBzW10gPSB7CisJeworCQkucHdyZG1fbmFtZSA9ICJtcHVfcHdyZG0iLAorCQkub21hcF9jaGlwID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMzQzMCkKKwl9LAorCXsKKwkJLnB3cmRtX25hbWUgPSAiaXZhMl9wd3JkbSIsCisJCS5vbWFwX2NoaXAgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAzNDMwKQorCX0sCisJeyBOVUxMIH0KK307CisKKy8qCisgKgorICovCisKK3N0YXRpYyBzdHJ1Y3QgY2xvY2tkb21haW4gKmNsb2NrZG9tYWluc19vbWFwW10gPSB7CisKKwkmd2t1cF9jbGtkbSwKKworI2lmZGVmIENPTkZJR19BUkNIX09NQVAyNDIwCisJJm1wdV8yNDIwX2Nsa2RtLAorCSZpdmExXzI0MjBfY2xrZG0sCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19BUkNIX09NQVAyNDMwCisJJm1wdV8yNDMwX2Nsa2RtLAorCSZtZG1fY2xrZG0sCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19BUkNIX09NQVAyNFhYCisJJmRzcF9jbGtkbSwKKwkmZ2Z4XzI0eHhfY2xrZG0sCisJJmNvcmVfbDNfMjR4eF9jbGtkbSwKKwkmY29yZV9sNF8yNHh4X2Nsa2RtLAorCSZkc3NfMjR4eF9jbGtkbSwKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDM0WFgKKwkmbXB1XzM0eHhfY2xrZG0sCisJJm5lb25fY2xrZG0sCisJJml2YTJfY2xrZG0sCisJJmdmeF8zNDMwZXMxX2Nsa2RtLAorCSZzZ3hfY2xrZG0sCisJJmQyZF9jbGtkbSwKKwkmY29yZV9sM18zNHh4X2Nsa2RtLAorCSZjb3JlX2w0XzM0eHhfY2xrZG0sCisJJmRzc18zNHh4X2Nsa2RtLAorCSZjYW1fY2xrZG0sCisJJnVzYmhvc3RfY2xrZG0sCisJJnBlcl9jbGtkbSwKKwkmZW11X2Nsa2RtLAorI2VuZGlmCisKKwlOVUxMLAorfTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2NtLXJlZ2JpdHMtMjR4eC5oIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbS1yZWdiaXRzLTI0eHguaAppbmRleCAyMGFjMzgxLi4xMDk4ZWNmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2NtLXJlZ2JpdHMtMjR4eC5oCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvY20tcmVnYml0cy0yNHh4LmgKQEAgLTYzLDcgKzYzLDggQEAKICNkZWZpbmUgT01BUDI0WFhfQ0xLU0VMX01QVV9NQVNLCQkJKDB4MWYgPDwgMCkKIAogLyogQ01fQ0xLU1RDVFJMX01QVSAqLwotI2RlZmluZSBPTUFQMjRYWF9BVVRPU1RBVEVfTVBVCQkJCSgxIDw8IDApCisjZGVmaW5lIE9NQVAyNFhYX0FVVE9TVEFURV9NUFVfU0hJRlQJCQkwCisjZGVmaW5lIE9NQVAyNFhYX0FVVE9TVEFURV9NUFVfTUFTSwkJCSgxIDw8IDApCiAKIC8qIENNX0ZDTEtFTjFfQ09SRSBzcGVjaWZpYyBiaXRzKi8KICNkZWZpbmUgT01BUDI0WFhfRU5fVFZfU0hJRlQJCQkJMgpAQCAtMjM4LDkgKzIzOSwxMiBAQAogI2RlZmluZSBPTUFQMjRYWF9DTEtTRUxfR1BUMl9NQVNLCQkJKDB4MyA8PCAyKQogCiAvKiBDTV9DTEtTVENUUkxfQ09SRSAqLwotI2RlZmluZSBPTUFQMjRYWF9BVVRPU1RBVEVfRFNTCQkJCSgxIDw8IDIpCi0jZGVmaW5lIE9NQVAyNFhYX0FVVE9TVEFURV9MNAkJCQkoMSA8PCAxKQotI2RlZmluZSBPTUFQMjRYWF9BVVRPU1RBVEVfTDMJCQkJKDEgPDwgMCkKKyNkZWZpbmUgT01BUDI0WFhfQVVUT1NUQVRFX0RTU19TSElGVAkJCTIKKyNkZWZpbmUgT01BUDI0WFhfQVVUT1NUQVRFX0RTU19NQVNLCQkJKDEgPDwgMikKKyNkZWZpbmUgT01BUDI0WFhfQVVUT1NUQVRFX0w0X1NISUZUCQkJMQorI2RlZmluZSBPTUFQMjRYWF9BVVRPU1RBVEVfTDRfTUFTSwkJCSgxIDw8IDEpCisjZGVmaW5lIE9NQVAyNFhYX0FVVE9TVEFURV9MM19TSElGVAkJCTAKKyNkZWZpbmUgT01BUDI0WFhfQVVUT1NUQVRFX0wzX01BU0sJCQkoMSA8PCAwKQogCiAvKiBDTV9GQ0xLRU5fR0ZYICovCiAjZGVmaW5lIE9NQVAyNFhYX0VOXzNEX1NISUZUCQkJCTIKQEAgLTI1NSw3ICsyNTksOCBAQAogLyogQ01fQ0xLU0VMX0dGWCBzcGVjaWZpYyBiaXRzICovCiAKIC8qIENNX0NMS1NUQ1RSTF9HRlggKi8KLSNkZWZpbmUgT01BUDI0WFhfQVVUT1NUQVRFX0dGWAkJCQkoMSA8PCAwKQorI2RlZmluZSBPTUFQMjRYWF9BVVRPU1RBVEVfR0ZYX1NISUZUCQkJMAorI2RlZmluZSBPTUFQMjRYWF9BVVRPU1RBVEVfR0ZYX01BU0sJCQkoMSA8PCAwKQogCiAvKiBDTV9GQ0xLRU5fV0tVUCBzcGVjaWZpYyBiaXRzICovCiAKQEAgLTM2Nyw4ICszNzIsMTAgQEAKICNkZWZpbmUgT01BUDI0WFhfQ0xLU0VMX0RTUF9NQVNLCQkJKDB4MWYgPDwgMCkKIAogLyogQ01fQ0xLU1RDVFJMX0RTUCAqLwotI2RlZmluZSBPTUFQMjQyMF9BVVRPU1RBVEVfSVZBCQkJCSgxIDw8IDgpCi0jZGVmaW5lIE9NQVAyNFhYX0FVVE9TVEFURV9EU1AJCQkJKDEgPDwgMCkKKyNkZWZpbmUgT01BUDI0MjBfQVVUT1NUQVRFX0lWQV9TSElGVAkJCTgKKyNkZWZpbmUgT01BUDI0MjBfQVVUT1NUQVRFX0lWQV9NQVNLCQkJKDEgPDwgOCkKKyNkZWZpbmUgT01BUDI0WFhfQVVUT1NUQVRFX0RTUF9TSElGVAkJCTAKKyNkZWZpbmUgT01BUDI0WFhfQVVUT1NUQVRFX0RTUF9NQVNLCQkJKDEgPDwgMCkKIAogLyogQ01fRkNMS0VOX01ETSAqLwogLyogMjQzMCBvbmx5ICovCkBAIC0zOTYsNiArNDAzLDcgQEAKIAogLyogQ01fQ0xLU1RDVFJMX01ETSAqLwogLyogMjQzMCBvbmx5ICovCi0jZGVmaW5lIE9NQVAyNDMwX0FVVE9TVEFURV9NRE0JCQkJKDEgPDwgMCkKKyNkZWZpbmUgT01BUDI0MzBfQVVUT1NUQVRFX01ETV9TSElGVAkJCTAKKyNkZWZpbmUgT01BUDI0MzBfQVVUT1NUQVRFX01ETV9NQVNLCQkJKDEgPDwgMCkKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2NtLXJlZ2JpdHMtMzR4eC5oIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbS1yZWdiaXRzLTM0eHguaAppbmRleCBlZTRjMGNhLi4yMTlmNWM4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2NtLXJlZ2JpdHMtMzR4eC5oCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvY20tcmVnYml0cy0zNHh4LmgKQEAgLTk2LDcgKzk2LDggQEAKICNkZWZpbmUgT01BUDM0MzBfQ0xLVFJDVFJMX0lWQTJfTUFTSwkJCSgweDMgPDwgMCkKIAogLyogQ01fQ0xLU1RTVF9JVkEyICovCi0jZGVmaW5lIE9NQVAzNDMwX0NMS0FDVElWSVRZX0lWQTIJCQkoMSA8PCAwKQorI2RlZmluZSBPTUFQMzQzMF9DTEtBQ1RJVklUWV9JVkEyX1NISUZUCQkJMAorI2RlZmluZSBPTUFQMzQzMF9DTEtBQ1RJVklUWV9JVkEyX01BU0sJCQkoMSA8PCAwKQogCiAvKiBDTV9SRVZJU0lPTiBzcGVjaWZpYyBiaXRzICovCiAKQEAgLTE0MCw3ICsxNDEsOCBAQAogI2RlZmluZSBPTUFQMzQzMF9DTEtUUkNUUkxfTVBVX01BU0sJCQkoMHgzIDw8IDApCiAKIC8qIENNX0NMS1NUU1RfTVBVICovCi0jZGVmaW5lIE9NQVAzNDMwX0NMS0FDVElWSVRZX01QVQkJCSgxIDw8IDApCisjZGVmaW5lIE9NQVAzNDMwX0NMS0FDVElWSVRZX01QVV9TSElGVAkJCTAKKyNkZWZpbmUgT01BUDM0MzBfQ0xLQUNUSVZJVFlfTVBVX01BU0sJCQkoMSA8PCAwKQogCiAvKiBDTV9GQ0xLRU4xX0NPUkUgc3BlY2lmaWMgYml0cyAqLwogCkBAIC0zMDAsOSArMzAyLDEyIEBACiAjZGVmaW5lIE9NQVAzNDMwX0NMS1RSQ1RSTF9MM19NQVNLCQkJKDB4MyA8PCAwKQogCiAvKiBDTV9DTEtTVFNUX0NPUkUgKi8KLSNkZWZpbmUgT01BUDM0MzBFUzFfQ0xLQUNUSVZJVFlfRDJECQkJKDEgPDwgMikKLSNkZWZpbmUgT01BUDM0MzBfQ0xLQUNUSVZJVFlfTDQJCQkJKDEgPDwgMSkKLSNkZWZpbmUgT01BUDM0MzBfQ0xLQUNUSVZJVFlfTDMJCQkJKDEgPDwgMCkKKyNkZWZpbmUgT01BUDM0MzBFUzFfQ0xLQUNUSVZJVFlfRDJEX1NISUZUCQkyCisjZGVmaW5lIE9NQVAzNDMwRVMxX0NMS0FDVElWSVRZX0QyRF9NQVNLCQkoMSA8PCAyKQorI2RlZmluZSBPTUFQMzQzMF9DTEtBQ1RJVklUWV9MNF9TSElGVAkJCTEKKyNkZWZpbmUgT01BUDM0MzBfQ0xLQUNUSVZJVFlfTDRfTUFTSwkJCSgxIDw8IDEpCisjZGVmaW5lIE9NQVAzNDMwX0NMS0FDVElWSVRZX0wzX1NISUZUCQkJMAorI2RlZmluZSBPTUFQMzQzMF9DTEtBQ1RJVklUWV9MM19NQVNLCQkJKDEgPDwgMCkKIAogLyogQ01fRkNMS0VOX0dGWCAqLwogI2RlZmluZSBPTUFQMzQzMEVTMV9FTl8zRAkJCQkoMSA8PCAyKQpAQCAtMzIzLDcgKzMyOCw4IEBACiAjZGVmaW5lIE9NQVAzNDMwRVMxX0NMS1RSQ1RSTF9HRlhfTUFTSwkJCSgweDMgPDwgMCkKIAogLyogQ01fQ0xLU1RTVF9HRlggKi8KLSNkZWZpbmUgT01BUDM0MzBFUzFfQ0xLQUNUSVZJVFlfR0ZYCQkJKDEgPDwgMCkKKyNkZWZpbmUgT01BUDM0MzBFUzFfQ0xLQUNUSVZJVFlfR0ZYX1NISUZUCQkwCisjZGVmaW5lIE9NQVAzNDMwRVMxX0NMS0FDVElWSVRZX0dGWF9NQVNLCQkoMSA8PCAwKQogCiAvKiBDTV9GQ0xLRU5fU0dYICovCiAjZGVmaW5lIE9NQVAzNDMwRVMyX0VOX1NHWF9TSElGVAkJCTEKQEAgLTMzMyw2ICszMzksMTQgQEAKICNkZWZpbmUgT01BUDM0MzBFUzJfQ0xLU0VMX1NHWF9TSElGVAkJCTAKICNkZWZpbmUgT01BUDM0MzBFUzJfQ0xLU0VMX1NHWF9NQVNLCQkJKDB4NyA8PCAwKQogCisvKiBDTV9DTEtTVENUUkxfU0dYICovCisjZGVmaW5lIE9NQVAzNDMwRVMyX0NMS1RSQ1RSTF9TR1hfU0hJRlQJCQkwCisjZGVmaW5lIE9NQVAzNDMwRVMyX0NMS1RSQ1RSTF9TR1hfTUFTSwkJCSgweDMgPDwgMCkKKworLyogQ01fQ0xLU1RTVF9TR1ggKi8KKyNkZWZpbmUgT01BUDM0MzBFUzJfQ0xLQUNUSVZJVFlfU0dYX1NISUZUCQkwCisjZGVmaW5lIE9NQVAzNDMwRVMyX0NMS0FDVElWSVRZX1NHWF9NQVNLCQkoMSA8PCAwKQorCiAvKiBDTV9GQ0xLRU5fV0tVUCBzcGVjaWZpYyBiaXRzICovCiAjZGVmaW5lIE9NQVAzNDMwRVMyX0VOX1VTSU1PQ1BfU0hJRlQJCQk5CiAKQEAgLTQ5OCw3ICs1MTIsOCBAQAogI2RlZmluZSBPTUFQMzQzMF9DTEtUUkNUUkxfRFNTX01BU0sJCQkoMHgzIDw8IDApCiAKIC8qIENNX0NMS1NUU1RfRFNTICovCi0jZGVmaW5lIE9NQVAzNDMwX0NMS0FDVElWSVRZX0RTUwkJCSgxIDw8IDApCisjZGVmaW5lIE9NQVAzNDMwX0NMS0FDVElWSVRZX0RTU19TSElGVAkJCTAKKyNkZWZpbmUgT01BUDM0MzBfQ0xLQUNUSVZJVFlfRFNTX01BU0sJCQkoMSA8PCAwKQogCiAvKiBDTV9GQ0xLRU5fQ0FNIHNwZWNpZmljIGJpdHMgKi8KIApAQCAtNTIyLDcgKzUzNyw4IEBACiAjZGVmaW5lIE9NQVAzNDMwX0NMS1RSQ1RSTF9DQU1fTUFTSwkJCSgweDMgPDwgMCkKIAogLyogQ01fQ0xLU1RTVF9DQU0gKi8KLSNkZWZpbmUgT01BUDM0MzBfQ0xLQUNUSVZJVFlfQ0FNCQkJKDEgPDwgMCkKKyNkZWZpbmUgT01BUDM0MzBfQ0xLQUNUSVZJVFlfQ0FNX1NISUZUCQkJMAorI2RlZmluZSBPTUFQMzQzMF9DTEtBQ1RJVklUWV9DQU1fTUFTSwkJCSgxIDw8IDApCiAKIC8qIENNX0ZDTEtFTl9QRVIgc3BlY2lmaWMgYml0cyAqLwogCkBAIC01OTgsNyArNjE0LDggQEAKICNkZWZpbmUgT01BUDM0MzBfQ0xLVFJDVFJMX1BFUl9NQVNLCQkJKDB4MyA8PCAwKQogCiAvKiBDTV9DTEtTVFNUX1BFUiAqLwotI2RlZmluZSBPTUFQMzQzMF9DTEtBQ1RJVklUWV9QRVIJCQkoMSA8PCAwKQorI2RlZmluZSBPTUFQMzQzMF9DTEtBQ1RJVklUWV9QRVJfU0hJRlQJCQkwCisjZGVmaW5lIE9NQVAzNDMwX0NMS0FDVElWSVRZX1BFUl9NQVNLCQkJKDEgPDwgMCkKIAogLyogQ01fQ0xLU0VMMV9FTVUgKi8KICNkZWZpbmUgT01BUDM0MzBfRElWX0RQTEw0X1NISUZUCQkJMjQKQEAgLTYyMyw3ICs2NDAsOCBAQAogI2RlZmluZSBPTUFQMzQzMF9DTEtUUkNUUkxfRU1VX01BU0sJCQkoMHgzIDw8IDApCiAKIC8qIENNX0NMS1NUU1RfRU1VICovCi0jZGVmaW5lIE9NQVAzNDMwX0NMS0FDVElWSVRZX0VNVQkJCSgxIDw8IDApCisjZGVmaW5lIE9NQVAzNDMwX0NMS0FDVElWSVRZX0VNVV9TSElGVAkJCTAKKyNkZWZpbmUgT01BUDM0MzBfQ0xLQUNUSVZJVFlfRU1VX01BU0sJCQkoMSA8PCAwKQogCiAvKiBDTV9DTEtTRUwyX0VNVSBzcGVjaWZpYyBiaXRzICovCiAjZGVmaW5lIE9NQVAzNDMwX0NPUkVfRFBMTF9FTVVfTVVMVF9TSElGVAkJOApAQCAtNjczLDYgKzY5MSw4IEBACiAjZGVmaW5lIE9NQVAzNDMwRVMyX0NMS1RSQ1RSTF9VU0JIT1NUX1NISUZUCQkwCiAjZGVmaW5lIE9NQVAzNDMwRVMyX0NMS1RSQ1RSTF9VU0JIT1NUX01BU0sJCSgzIDw8IDApCiAKLQorLyogQ01fQ0xLU1RTVF9VU0JIT1NUICovCisjZGVmaW5lIE9NQVAzNDMwRVMyX0NMS0FDVElWSVRZX1VTQkhPU1RfU0hJRlQJCTAKKyNkZWZpbmUgT01BUDM0MzBFUzJfQ0xLQUNUSVZJVFlfVVNCSE9TVF9NQVNLCQkoMSA8PCAwKQogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvY20uaCBiL2FyY2gvYXJtL21hY2gtb21hcDIvY20uaAppbmRleCA4N2E0NGM3Li42NWZkZjc4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2NtLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbS5oCkBAIC0xOCw3ICsxOCw3IEBACiAKICNpZm5kZWYgX19BU1NFTUJMRVJfXwogI2RlZmluZSBPTUFQX0NNX1JFR0FERFIobW9kdWxlLCByZWcpCQkJCQlcCi0JKHZvaWQgX19pb21lbSAqKUlPX0FERFJFU1MoT01BUDJfQ01fQkFTRSArIChtb2R1bGUpICsgKHJlZykpCisJCQlJT19BRERSRVNTKE9NQVAyX0NNX0JBU0UgKyAobW9kdWxlKSArIChyZWcpKQogI2Vsc2UKICNkZWZpbmUgT01BUDI0MjBfQ01fUkVHQUREUihtb2R1bGUsIHJlZykJCQkJXAogCQkJSU9fQUREUkVTUyhPTUFQMjQyMF9DTV9CQVNFICsgKG1vZHVsZSkgKyAocmVnKSkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvZGV2aWNlcy5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9kZXZpY2VzLmMKaW5kZXggMmVlOTU0YS4uOTBhZjJhYyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9kZXZpY2VzLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9kZXZpY2VzLmMKQEAgLTIzLDUwICsyMyw3IEBACiAjaW5jbHVkZSA8bWFjaC9ib2FyZC5oPgogI2luY2x1ZGUgPG1hY2gvbXV4Lmg+CiAjaW5jbHVkZSA8bWFjaC9ncGlvLmg+Ci0KLSNpZglkZWZpbmVkKENPTkZJR19JMkNfT01BUCkgfHwgZGVmaW5lZChDT05GSUdfSTJDX09NQVBfTU9EVUxFKQotCi0jZGVmaW5lIE9NQVAyX0kyQ19CQVNFMgkJMHg0ODA3MjAwMAotI2RlZmluZSBPTUFQMl9JMkNfSU5UMgkJNTcKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBpMmNfcmVzb3VyY2VzMltdID0gewotCXsKLQkJLnN0YXJ0CQk9IE9NQVAyX0kyQ19CQVNFMiwKLQkJLmVuZAkJPSBPTUFQMl9JMkNfQkFTRTIgKyAweDNmLAotCQkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLQl7Ci0JCS5zdGFydAkJPSBPTUFQMl9JMkNfSU5UMiwKLQkJLmZsYWdzCQk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBvbWFwX2kyY19kZXZpY2UyID0gewotCS5uYW1lICAgICAgICAgICA9ICJpMmNfb21hcCIsCi0JLmlkICAgICAgICAgICAgID0gMiwKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoaTJjX3Jlc291cmNlczIpLAotCS5yZXNvdXJjZQk9IGkyY19yZXNvdXJjZXMyLAotfTsKLQotLyogU2VlIGFsc28gYXJjaC9hcm0vcGxhdC1vbWFwL2RldmljZXMuYyBmb3IgZmlyc3QgSTJDIG9uIDI0eHggKi8KLXN0YXRpYyB2b2lkIG9tYXBfaW5pdF9pMmModm9pZCkKLXsKLQkvKiBSRVZJU0lUOiBTZWNvbmQgSTJDIG5vdCBpbiB1c2Ugb24gSDQ/ICovCi0JaWYgKG1hY2hpbmVfaXNfb21hcF9oNCgpKQotCQlyZXR1cm47Ci0KLQlpZiAoIWNwdV9pc19vbWFwMjQzMCgpKSB7Ci0JCW9tYXBfY2ZnX3JlZyhKMTVfMjRYWF9JMkMyX1NDTCk7Ci0JCW9tYXBfY2ZnX3JlZyhIMTlfMjRYWF9JMkMyX1NEQSk7Ci0JfQotCSh2b2lkKSBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJm9tYXBfaTJjX2RldmljZTIpOwotfQotCi0jZWxzZQotCi1zdGF0aWMgdm9pZCBvbWFwX2luaXRfaTJjKHZvaWQpIHt9Ci0KLSNlbmRpZgorI2luY2x1ZGUgPG1hY2gvZWFjLmg+CiAKICNpZiBkZWZpbmVkKENPTkZJR19PTUFQX0RTUCkgfHwgZGVmaW5lZChDT05GSUdfT01BUF9EU1BfTU9EVUxFKQogI2RlZmluZSBPTUFQMl9NQk9YX0JBU0UJCUlPX0FERFJFU1MoT01BUDI0WFhfTUFJTEJPWF9CQVNFKQpAQCAtMTA0LDcgKzYxLDkgQEAKIAogI2lmIGRlZmluZWQoQ09ORklHX09NQVBfU1RJKQogCi0jZGVmaW5lIE9NQVAyX1NUSV9CQVNFCQlJT19BRERSRVNTKDB4NDgwNjgwMDApCisjaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMikKKworI2RlZmluZSBPTUFQMl9TVElfQkFTRQkJMHg0ODA2ODAwMAogI2RlZmluZSBPTUFQMl9TVElfQ0hBTk5FTF9CQVNFCTB4NTQwMDAwMDAKICNkZWZpbmUgT01BUDJfU1RJX0lSUQkJNAogCkBAIC0xMjQsNiArODMsMjUgQEAKIAkJLmZsYWdzCQk9IElPUkVTT1VSQ0VfSVJRLAogCX0KIH07CisjZWxpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAzKQorCisjZGVmaW5lIE9NQVAzX1NEVElfQkFTRQkJMHg1NDUwMDAwMAorI2RlZmluZSBPTUFQM19TRFRJX0NIQU5ORUxfQkFTRQkweDU0NjAwMDAwCisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugc3RpX3Jlc291cmNlc1tdID0geworCXsKKwkJLnN0YXJ0CQk9IE9NQVAzX1NEVElfQkFTRSwKKwkJLmVuZAkJPSBPTUFQM19TRFRJX0JBU0UgKyAweEZGRiwKKwkJLmZsYWdzCQk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJeworCQkuc3RhcnQJCT0gT01BUDNfU0RUSV9DSEFOTkVMX0JBU0UsCisJCS5lbmQJCT0gT01BUDNfU0RUSV9DSEFOTkVMX0JBU0UgKyBTWl8xTSAtIDEsCisJCS5mbGFncwkJPSBJT1JFU09VUkNFX01FTSwKKwl9Cit9OworCisjZW5kaWYKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugc3RpX2RldmljZSA9IHsKIAkubmFtZQkJPSAic3RpIiwKQEAgLTE0MCwxMiArMTE4LDE0IEBACiBzdGF0aWMgaW5saW5lIHZvaWQgb21hcF9pbml0X3N0aSh2b2lkKSB7fQogI2VuZGlmCiAKLSNpZiBkZWZpbmVkKENPTkZJR19TUElfT01BUDI0WFgpCisjaWYgZGVmaW5lZChDT05GSUdfU1BJX09NQVAyNFhYKSB8fCBkZWZpbmVkKENPTkZJR19TUElfT01BUDI0WFhfTU9EVUxFKQogCiAjaW5jbHVkZSA8bWFjaC9tY3NwaS5oPgogCiAjZGVmaW5lIE9NQVAyX01DU1BJMV9CQVNFCQkweDQ4MDk4MDAwCiAjZGVmaW5lIE9NQVAyX01DU1BJMl9CQVNFCQkweDQ4MDlhMDAwCisjZGVmaW5lIE9NQVAyX01DU1BJM19CQVNFCQkweDQ4MGI4MDAwCisjZGVmaW5lIE9NQVAyX01DU1BJNF9CQVNFCQkweDQ4MGJhMDAwCiAKIHN0YXRpYyBzdHJ1Y3Qgb21hcDJfbWNzcGlfcGxhdGZvcm1fY29uZmlnIG9tYXAyX21jc3BpMV9jb25maWcgPSB7CiAJLm51bV9jcwkJPSA0LApAQCAtMTU5LDcgKzEzOSw3IEBACiAJfSwKIH07CiAKLXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugb21hcDJfbWNzcGkxID0geworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugb21hcDJfbWNzcGkxID0gewogCS5uYW1lCQk9ICJvbWFwMl9tY3NwaSIsCiAJLmlkCQk9IDEsCiAJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKG9tYXAyX21jc3BpMV9yZXNvdXJjZXMpLApAQCAtMTgxLDcgKzE2MSw3IEBACiAJfSwKIH07CiAKLXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugb21hcDJfbWNzcGkyID0geworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugb21hcDJfbWNzcGkyID0gewogCS5uYW1lCQk9ICJvbWFwMl9tY3NwaSIsCiAJLmlkCQk9IDIsCiAJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKG9tYXAyX21jc3BpMl9yZXNvdXJjZXMpLApAQCAtMTkxLDE2ICsxNzEsMTYyIEBACiAJfSwKIH07CiAKKyNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAyNDMwKSB8fCBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAzKQorc3RhdGljIHN0cnVjdCBvbWFwMl9tY3NwaV9wbGF0Zm9ybV9jb25maWcgb21hcDJfbWNzcGkzX2NvbmZpZyA9IHsKKwkubnVtX2NzCQk9IDIsCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIG9tYXAyX21jc3BpM19yZXNvdXJjZXNbXSA9IHsKKwl7CisJLnN0YXJ0CQk9IE9NQVAyX01DU1BJM19CQVNFLAorCS5lbmQJCT0gT01BUDJfTUNTUEkzX0JBU0UgKyAweGZmLAorCS5mbGFncwkJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugb21hcDJfbWNzcGkzID0geworCS5uYW1lCQk9ICJvbWFwMl9tY3NwaSIsCisJLmlkCQk9IDMsCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKG9tYXAyX21jc3BpM19yZXNvdXJjZXMpLAorCS5yZXNvdXJjZQk9IG9tYXAyX21jc3BpM19yZXNvdXJjZXMsCisJLmRldgkJPSB7CisJCS5wbGF0Zm9ybV9kYXRhID0gJm9tYXAyX21jc3BpM19jb25maWcsCisJfSwKK307CisjZW5kaWYKKworI2lmZGVmIENPTkZJR19BUkNIX09NQVAzCitzdGF0aWMgc3RydWN0IG9tYXAyX21jc3BpX3BsYXRmb3JtX2NvbmZpZyBvbWFwMl9tY3NwaTRfY29uZmlnID0geworCS5udW1fY3MJCT0gMSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugb21hcDJfbWNzcGk0X3Jlc291cmNlc1tdID0geworCXsKKwkJLnN0YXJ0CQk9IE9NQVAyX01DU1BJNF9CQVNFLAorCQkuZW5kCQk9IE9NQVAyX01DU1BJNF9CQVNFICsgMHhmZiwKKwkJLmZsYWdzCQk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBvbWFwMl9tY3NwaTQgPSB7CisJLm5hbWUJCT0gIm9tYXAyX21jc3BpIiwKKwkuaWQJCT0gNCwKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUob21hcDJfbWNzcGk0X3Jlc291cmNlcyksCisJLnJlc291cmNlCT0gb21hcDJfbWNzcGk0X3Jlc291cmNlcywKKwkuZGV2CQk9IHsKKwkJLnBsYXRmb3JtX2RhdGEgPSAmb21hcDJfbWNzcGk0X2NvbmZpZywKKwl9LAorfTsKKyNlbmRpZgorCiBzdGF0aWMgdm9pZCBvbWFwX2luaXRfbWNzcGkodm9pZCkKIHsKIAlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJm9tYXAyX21jc3BpMSk7CiAJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZvbWFwMl9tY3NwaTIpOworI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDI0MzApIHx8IGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDMpCisJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZvbWFwMl9tY3NwaTMpOworI2VuZGlmCisjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDMKKwlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJm9tYXAyX21jc3BpNCk7CisjZW5kaWYKIH0KIAogI2Vsc2UKIHN0YXRpYyBpbmxpbmUgdm9pZCBvbWFwX2luaXRfbWNzcGkodm9pZCkge30KICNlbmRpZgogCisjaWZkZWYgQ09ORklHX1NORF9PTUFQMjRYWF9FQUMKKworI2RlZmluZSBPTUFQMl9FQUNfQkFTRQkJCTB4NDgwOTAwMDAKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBvbWFwMl9lYWNfcmVzb3VyY2VzW10gPSB7CisJeworCQkuc3RhcnQJCT0gT01BUDJfRUFDX0JBU0UsCisJCS5lbmQJCT0gT01BUDJfRUFDX0JBU0UgKyAweDEwOSwKKwkJLmZsYWdzCQk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBvbWFwMl9lYWNfZGV2aWNlID0geworCS5uYW1lCQk9ICJvbWFwMjR4eC1lYWMiLAorCS5pZAkJPSAtMSwKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUob21hcDJfZWFjX3Jlc291cmNlcyksCisJLnJlc291cmNlCT0gb21hcDJfZWFjX3Jlc291cmNlcywKKwkuZGV2ID0geworCQkucGxhdGZvcm1fZGF0YSA9IE5VTEwsCisJfSwKK307CisKK3ZvaWQgb21hcF9pbml0X2VhYyhzdHJ1Y3QgZWFjX3BsYXRmb3JtX2RhdGEgKnBkYXRhKQoreworCW9tYXAyX2VhY19kZXZpY2UuZGV2LnBsYXRmb3JtX2RhdGEgPSBwZGF0YTsKKwlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJm9tYXAyX2VhY19kZXZpY2UpOworfQorCisjZWxzZQordm9pZCBvbWFwX2luaXRfZWFjKHN0cnVjdCBlYWNfcGxhdGZvcm1fZGF0YSAqcGRhdGEpIHt9CisjZW5kaWYKKworI2lmZGVmIENPTkZJR19PTUFQX1NIQTFfTUQ1CitzdGF0aWMgc3RydWN0IHJlc291cmNlIHNoYTFfbWQ1X3Jlc291cmNlc1tdID0geworCXsKKwkJLnN0YXJ0CT0gT01BUDI0WFhfU0VDX1NIQTFNRDVfQkFTRSwKKwkJLmVuZAk9IE9NQVAyNFhYX1NFQ19TSEExTUQ1X0JBU0UgKyAweDY0LAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCXsKKwkJLnN0YXJ0CT0gSU5UXzI0WFhfU0hBMU1ENSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCisJfQorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugc2hhMV9tZDVfZGV2aWNlID0geworCS5uYW1lCQk9ICJPTUFQIFNIQTEvTUQ1IiwKKwkuaWQJCT0gLTEsCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHNoYTFfbWQ1X3Jlc291cmNlcyksCisJLnJlc291cmNlCT0gc2hhMV9tZDVfcmVzb3VyY2VzLAorfTsKKworc3RhdGljIHZvaWQgb21hcF9pbml0X3NoYTFfbWQ1KHZvaWQpCit7CisJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZzaGExX21kNV9kZXZpY2UpOworfQorI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCBvbWFwX2luaXRfc2hhMV9tZDUodm9pZCkgeyB9CisjZW5kaWYKKworI2lmIGRlZmluZWQoQ09ORklHX0hEUV9NQVNURVJfT01BUCkgfHwgZGVmaW5lZChDT05GSUdfSERRX01BU1RFUl9PTUFQX01PRFVMRSkKKyNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAyNDMwKSB8fCBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAzNDMwKQorI2RlZmluZSBPTUFQX0hEUV9CQVNFCTB4NDgwQjIwMDAKKyNlbmRpZgorc3RhdGljIHN0cnVjdCByZXNvdXJjZSBvbWFwX2hkcV9yZXNvdXJjZXNbXSA9IHsKKwl7CisJCS5zdGFydAkJPSBPTUFQX0hEUV9CQVNFLAorCQkuZW5kCQk9IE9NQVBfSERRX0JBU0UgKyAweDFDLAorCQkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwl7CisJCS5zdGFydAkJPSBJTlRfMjRYWF9IRFFfSVJRLAorCQkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBvbWFwX2hkcV9kZXYgPSB7CisJLm5hbWUgPSAib21hcF9oZHEiLAorCS5pZCA9IDAsCisJLmRldiA9IHsKKwkJLnBsYXRmb3JtX2RhdGEgPSBOVUxMLAorCX0sCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKG9tYXBfaGRxX3Jlc291cmNlcyksCisJLnJlc291cmNlCT0gb21hcF9oZHFfcmVzb3VyY2VzLAorfTsKK3N0YXRpYyBpbmxpbmUgdm9pZCBvbWFwX2hkcV9pbml0KHZvaWQpCit7CisJKHZvaWQpIHBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcigmb21hcF9oZHFfZGV2KTsKK30KKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgb21hcF9oZHFfaW5pdCh2b2lkKSB7fQorI2VuZGlmCisKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKIHN0YXRpYyBpbnQgX19pbml0IG9tYXAyX2luaXRfZGV2aWNlcyh2b2lkKQpAQCAtMjA4LDEwICszMzQsMTEgQEAKIAkvKiBwbGVhc2Uga2VlcCB0aGVzZSBjYWxscywgYW5kIHRoZWlyIGltcGxlbWVudGF0aW9ucyBhYm92ZSwKIAkgKiBpbiBhbHBoYWJldGljYWwgb3JkZXIgc28gdGhleSdyZSBlYXNpZXIgdG8gc29ydCB0aHJvdWdoLgogCSAqLwotCW9tYXBfaW5pdF9pMmMoKTsKIAlvbWFwX2luaXRfbWJveCgpOwogCW9tYXBfaW5pdF9tY3NwaSgpOworCW9tYXBfaGRxX2luaXQoKTsKIAlvbWFwX2luaXRfc3RpKCk7CisJb21hcF9pbml0X3NoYTFfbWQ1KCk7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvZ3BtYy5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ncG1jLmMKaW5kZXggYWYxMDgxYS4uNzYzYmRiZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ncG1jLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ncG1jLmMKQEAgLTksNiArOSw4IEBACiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwogICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCiAgKi8KKyN1bmRlZiBERUJVRworCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgpAQCAtMTYsMjAgKzE4LDE0IEBACiAjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogCiAjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KICNpbmNsdWRlIDxtYWNoL2dwbWMuaD4KIAotI3VuZGVmIERFQlVHCisjaW5jbHVkZSA8bWFjaC9zZHJjLmg+CiAKLSNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMjQyMAotI2RlZmluZSBHUE1DX0JBU0UJCTB4NjgwMGEwMDAKLSNlbmRpZgotCi0jaWZkZWYgQ09ORklHX0FSQ0hfT01BUDI0MzAKLSNkZWZpbmUgR1BNQ19CQVNFCQkweDZFMDAwMDAwCi0jZW5kaWYKLQorLyogR1BNQyByZWdpc3RlciBvZmZzZXRzICovCiAjZGVmaW5lIEdQTUNfUkVWSVNJT04JCTB4MDAKICNkZWZpbmUgR1BNQ19TWVNDT05GSUcJCTB4MTAKICNkZWZpbmUgR1BNQ19TWVNTVEFUVVMJCTB4MTQKQEAgLTUxLDcgKzQ3LDYgQEAKICNkZWZpbmUgR1BNQ19DUzAJCTB4NjAKICNkZWZpbmUgR1BNQ19DU19TSVpFCQkweDMwCiAKLSNkZWZpbmUgR1BNQ19DU19OVU0JCTgKICNkZWZpbmUgR1BNQ19NRU1fU1RBUlQJCTB4MDAwMDAwMDAKICNkZWZpbmUgR1BNQ19NRU1fRU5ECQkweDNGRkZGRkZGCiAjZGVmaW5lIEJPT1RfUk9NX1NQQUNFCQkweDEwMDAwMAkvKiAxTUIgKi8KQEAgLTY0LDEyICs1OSw5IEBACiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGdwbWNfbWVtX2xvY2spOwogc3RhdGljIHVuc2lnbmVkCQlncG1jX2NzX21hcDsKIAotc3RhdGljIHZvaWQgX19pb21lbSAqZ3BtY19iYXNlID0KLQkodm9pZCBfX2lvbWVtICopIElPX0FERFJFU1MoR1BNQ19CQVNFKTsKLXN0YXRpYyB2b2lkIF9faW9tZW0gKmdwbWNfY3NfYmFzZSA9Ci0JKHZvaWQgX19pb21lbSAqKSBJT19BRERSRVNTKEdQTUNfQkFTRSkgKyBHUE1DX0NTMDsKK3N0YXRpYyB2b2lkIF9faW9tZW0gKmdwbWNfYmFzZTsKIAotc3RhdGljIHN0cnVjdCBjbGsgKmdwbWNfZmNrOworc3RhdGljIHN0cnVjdCBjbGsgKmdwbWNfbDNfY2xrOwogCiBzdGF0aWMgdm9pZCBncG1jX3dyaXRlX3JlZyhpbnQgaWR4LCB1MzIgdmFsKQogewpAQCAtODUsMTkgKzc3LDMyIEBACiB7CiAJdm9pZCBfX2lvbWVtICpyZWdfYWRkcjsKIAotCXJlZ19hZGRyID0gZ3BtY19jc19iYXNlICsgKGNzICogR1BNQ19DU19TSVpFKSArIGlkeDsKKwlyZWdfYWRkciA9IGdwbWNfYmFzZSArIEdQTUNfQ1MwICsgKGNzICogR1BNQ19DU19TSVpFKSArIGlkeDsKIAlfX3Jhd193cml0ZWwodmFsLCByZWdfYWRkcik7CiB9CiAKIHUzMiBncG1jX2NzX3JlYWRfcmVnKGludCBjcywgaW50IGlkeCkKIHsKLQlyZXR1cm4gX19yYXdfcmVhZGwoZ3BtY19jc19iYXNlICsgKGNzICogR1BNQ19DU19TSVpFKSArIGlkeCk7CisJdm9pZCBfX2lvbWVtICpyZWdfYWRkcjsKKworCXJlZ19hZGRyID0gZ3BtY19iYXNlICsgR1BNQ19DUzAgKyAoY3MgKiBHUE1DX0NTX1NJWkUpICsgaWR4OworCXJldHVybiBfX3Jhd19yZWFkbChyZWdfYWRkcik7CiB9CiAKKy8qIFRPRE86IEFkZCBzdXBwb3J0IGZvciBncG1jX2ZjayB0byBjbG9jayBmcmFtZXdvcmsgYW5kIHVzZSBpdCAqLwogdW5zaWduZWQgbG9uZyBncG1jX2dldF9mY2xrX3BlcmlvZCh2b2lkKQogewotCS8qIEluIHBpY29zZWNvbmRzICovCi0JcmV0dXJuIDEwMDAwMDAwMDAgLyAoKGNsa19nZXRfcmF0ZShncG1jX2ZjaykpIC8gMTAwMCk7CisJdW5zaWduZWQgbG9uZyByYXRlID0gY2xrX2dldF9yYXRlKGdwbWNfbDNfY2xrKTsKKworCWlmIChyYXRlID09IDApIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiZ3BtY19sM19jbGsgbm90IGVuYWJsZWRcbiIpOworCQlyZXR1cm4gMDsKKwl9CisKKwlyYXRlIC89IDEwMDA7CisJcmF0ZSA9IDEwMDAwMDAwMDAgLyByYXRlOwkvKiBJbiBwaWNvc2Vjb25kcyAqLworCisJcmV0dXJuIHJhdGU7CiB9CiAKIHVuc2lnbmVkIGludCBncG1jX25zX3RvX3RpY2tzKHVuc2lnbmVkIGludCB0aW1lX25zKQpAQCAtMTEwLDYgKzExNSwxMSBAQAogCXJldHVybiAodGltZV9ucyAqIDEwMDAgKyB0aWNrX3BzIC0gMSkgLyB0aWNrX3BzOwogfQogCit1bnNpZ25lZCBpbnQgZ3BtY190aWNrc190b19ucyh1bnNpZ25lZCBpbnQgdGlja3MpCit7CisJcmV0dXJuIHRpY2tzICogZ3BtY19nZXRfZmNsa19wZXJpb2QoKSAvIDEwMDA7Cit9CisKIHVuc2lnbmVkIGludCBncG1jX3JvdW5kX25zX3RvX3RpY2tzKHVuc2lnbmVkIGludCB0aW1lX25zKQogewogCXVuc2lnbmVkIGxvbmcgdGlja3MgPSBncG1jX25zX3RvX3RpY2tzKHRpbWVfbnMpOwpAQCAtMjEwLDYgKzIyMCwxMSBAQAogCiAJR1BNQ19TRVRfT05FKEdQTUNfQ1NfQ09ORklHNSwgMjQsIDI3LCBwYWdlX2J1cnN0X2FjY2Vzcyk7CiAKKwlpZiAoY3B1X2lzX29tYXAzNHh4KCkpIHsKKwkJR1BNQ19TRVRfT05FKEdQTUNfQ1NfQ09ORklHNiwgMTYsIDE5LCB3cl9kYXRhX211eF9idXMpOworCQlHUE1DX1NFVF9PTkUoR1BNQ19DU19DT05GSUc2LCAyNCwgMjgsIHdyX2FjY2Vzcyk7CisJfQorCiAJLyogY2FsbGVyIGlzIGV4cGVjdGVkIHRvIGhhdmUgaW5pdGlhbGl6ZWQgQ09ORklHMSB0byBjb3ZlcgogCSAqIGF0IGxlYXN0IHN5bmMgdnMgYXN5bmMKIAkgKi8KQEAgLTM1MCw2ICszNjUsNyBAQAogCXNwaW5fdW5sb2NrKCZncG1jX21lbV9sb2NrKTsKIAlyZXR1cm4gcjsKIH0KK0VYUE9SVF9TWU1CT0woZ3BtY19jc19yZXF1ZXN0KTsKIAogdm9pZCBncG1jX2NzX2ZyZWUoaW50IGNzKQogewpAQCAtMzY1LDggKzM4MSw5IEBACiAJZ3BtY19jc19zZXRfcmVzZXJ2ZWQoY3MsIDApOwogCXNwaW5fdW5sb2NrKCZncG1jX21lbV9sb2NrKTsKIH0KK0VYUE9SVF9TWU1CT0woZ3BtY19jc19mcmVlKTsKIAotdm9pZCBfX2luaXQgZ3BtY19tZW1faW5pdCh2b2lkKQorc3RhdGljIHZvaWQgX19pbml0IGdwbWNfbWVtX2luaXQodm9pZCkKIHsKIAlpbnQgY3M7CiAJdW5zaWduZWQgbG9uZyBib290X3JvbV9zcGFjZSA9IDA7CkBAIC0zOTYsMTIgKzQxMywzMyBAQAogdm9pZCBfX2luaXQgZ3BtY19pbml0KHZvaWQpCiB7CiAJdTMyIGw7CisJY2hhciAqY2s7CiAKLQlncG1jX2ZjayA9IGNsa19nZXQoTlVMTCwgImdwbWNfZmNrIik7IC8qIEFsd2F5cyBvbiBFTkFCTEVfT05fSU5JVCAqLwotCWlmIChJU19FUlIoZ3BtY19mY2spKQotCQlXQVJOX09OKDEpOwotCWVsc2UKLQkJY2xrX2VuYWJsZShncG1jX2Zjayk7CisJaWYgKGNwdV9pc19vbWFwMjR4eCgpKSB7CisJCWNrID0gImNvcmVfbDNfY2siOworCQlpZiAoY3B1X2lzX29tYXAyNDIwKCkpCisJCQlsID0gT01BUDI0MjBfR1BNQ19CQVNFOworCQllbHNlCisJCQlsID0gT01BUDM0WFhfR1BNQ19CQVNFOworCX0gZWxzZSBpZiAoY3B1X2lzX29tYXAzNHh4KCkpIHsKKwkJY2sgPSAiZ3BtY19mY2siOworCQlsID0gT01BUDM0WFhfR1BNQ19CQVNFOworCX0KKworCWdwbWNfbDNfY2xrID0gY2xrX2dldChOVUxMLCBjayk7CisJaWYgKElTX0VSUihncG1jX2wzX2NsaykpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJDb3VsZCBub3QgZ2V0IEdQTUMgY2xvY2sgJXNcbiIsIGNrKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJZ3BtY19iYXNlID0gaW9yZW1hcChsLCBTWl80Syk7CisJaWYgKCFncG1jX2Jhc2UpIHsKKwkJY2xrX3B1dChncG1jX2wzX2Nsayk7CisJCXByaW50ayhLRVJOX0VSUiAiQ291bGQgbm90IGdldCBHUE1DIHJlZ2lzdGVyIG1lbW9yeVxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCUJVR19PTihJU19FUlIoZ3BtY19sM19jbGspKTsKIAogCWwgPSBncG1jX3JlYWRfcmVnKEdQTUNfUkVWSVNJT04pOwogCXByaW50ayhLRVJOX0lORk8gIkdQTUMgcmV2aXNpb24gJWQuJWRcbiIsIChsID4+IDQpICYgMHgwZiwgbCAmIDB4MGYpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9pZC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9pZC5jCmluZGV4IDIwOTE3N2MuLmJmNDVmZjMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvaWQuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2lkLmMKQEAgLTE4LDI0ICsxOCwxNSBAQAogCiAjaW5jbHVkZSA8YXNtL2NwdXR5cGUuaD4KIAorI2luY2x1ZGUgPG1hY2gvY29tbW9uLmg+CiAjaW5jbHVkZSA8bWFjaC9jb250cm9sLmg+CiAjaW5jbHVkZSA8bWFjaC9jcHUuaD4KIAotI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDI0MjApCi0jZGVmaW5lIFRBUF9CQVNFCWlvX3AydigweDQ4MDE0MDAwKQotI2VsaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMjQzMCkKLSNkZWZpbmUgVEFQX0JBU0UJaW9fcDJ2KDB4NDkwMEEwMDApCi0jZWxpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAzNFhYKQotI2RlZmluZSBUQVBfQkFTRQlpb19wMnYoMHg0ODMwQTAwMCkKLSNlbmRpZgorc3RhdGljIHUzMiBjbGFzczsKK3N0YXRpYyB2b2lkIF9faW9tZW0gKnRhcF9iYXNlOworc3RhdGljIHUxNiB0YXBfcHJvZF9pZDsKIAogI2RlZmluZSBPTUFQX1RBUF9JRENPREUJCTB4MDIwNAotI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDM0WFgpCi0jZGVmaW5lIE9NQVBfVEFQX1BST0RfSUQJMHgwMjEwCi0jZWxzZQotI2RlZmluZSBPTUFQX1RBUF9QUk9EX0lECTB4MDIwOAotI2VuZGlmCi0KICNkZWZpbmUgT01BUF9UQVBfRElFX0lEXzAJMHgwMjE4CiAjZGVmaW5lIE9NQVBfVEFQX0RJRV9JRF8xCTB4MDIxQwogI2RlZmluZSBPTUFQX1RBUF9ESUVfSURfMgkweDAyMjAKQEAgLTk0LDE4ICs4NSwyNCBAQAogCSAqIGl0IG1lYW5zIGl0cyBDb3J0ZXggcjBwMCB3aGljaCBpcyAzNDMwIEVTMQogCSAqLwogCWlmICgoKChjcHVpZCA+PiA0KSAmIDB4RkZGKSA9PSAweEMwOCkgJiYgKChjcHVpZCAmIDB4RikgPT0gMHgwKSkgeworCisJCWlmIChyZWcgPT0gdGFwX3Byb2RfaWQpIHsKKwkJCXJlZ3ZhbCA9IDB4MDAwRjAwRjA7CisJCQlnb3RvIG91dDsKKwkJfQorCiAJCXN3aXRjaCAocmVnKSB7CiAJCWNhc2UgT01BUF9UQVBfSURDT0RFICA6IHJlZ3ZhbCA9IDB4MEI3QUUwMkY7IGJyZWFrOwogCQkvKiBNYWtpbmcgRGV2VHlwZSBhcyAweEYgaW4gRVMxIHRvIGRpZmZlciBmcm9tIEVTMiAqLwotCQljYXNlIE9NQVBfVEFQX1BST0RfSUQgOiByZWd2YWwgPSAweDAwMEYwMEYwOyBicmVhazsKIAkJY2FzZSBPTUFQX1RBUF9ESUVfSURfMDogcmVndmFsID0gMHgwMTAwMDAwMDsgYnJlYWs7CiAJCWNhc2UgT01BUF9UQVBfRElFX0lEXzE6IHJlZ3ZhbCA9IDB4MTAxMmQ2ODc7IGJyZWFrOwogCQljYXNlIE9NQVBfVEFQX0RJRV9JRF8yOglyZWd2YWwgPSAweDAwMDAwMDAwOyBicmVhazsKIAkJY2FzZSBPTUFQX1RBUF9ESUVfSURfMzoJcmVndmFsID0gMHgyZDJjMDAwMDsgYnJlYWs7CiAJCX0KIAl9IGVsc2UKLQkJcmVndmFsID0gX19yYXdfcmVhZGwoVEFQX0JBU0UgKyByZWcpOworCQlyZWd2YWwgPSBfX3Jhd19yZWFkbCh0YXBfYmFzZSArIHJlZyk7CiAKK291dDoKIAlyZXR1cm4gcmVndmFsOwogCiB9CkBAIC0yMDQsNyArMjAxLDcgQEAKIAl1OCAgcmV2OwogCiAJaWRjb2RlID0gcmVhZF90YXBfcmVnKE9NQVBfVEFQX0lEQ09ERSk7Ci0JcHJvZF9pZCA9IHJlYWRfdGFwX3JlZyhPTUFQX1RBUF9QUk9EX0lEKTsKKwlwcm9kX2lkID0gcmVhZF90YXBfcmVnKHRhcF9wcm9kX2lkKTsKIAloYXdrZXllID0gKGlkY29kZSA+PiAxMikgJiAweGZmZmY7CiAJcmV2ID0gKGlkY29kZSA+PiAyOCkgJiAweDBmOwogCWRldl90eXBlID0gKHByb2RfaWQgPj4gMTYpICYgMHgwZjsKQEAgLTI2OSwzICsyNjYsMTMgQEAKIAogfQogCit2b2lkIF9faW5pdCBvbWFwMl9zZXRfZ2xvYmFsc190YXAoc3RydWN0IG9tYXBfZ2xvYmFscyAqb21hcDJfZ2xvYmFscykKK3sKKwljbGFzcyA9IG9tYXAyX2dsb2JhbHMtPmNsYXNzOworCXRhcF9iYXNlID0gb21hcDJfZ2xvYmFscy0+dGFwOworCisJaWYgKGNsYXNzID09IDB4MzQzMCkKKwkJdGFwX3Byb2RfaWQgPSAweDAyMTA7CisJZWxzZQorCQl0YXBfcHJvZF9pZCA9IDB4MDIwODsKK30KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvaW8uYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvaW8uYwppbmRleCA3YzNkNjI4Li41ZWE2NGY5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2lvLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9pby5jCkBAIC00LDggKzQsMTEgQEAKICAqIE9NQVAyIEkvTyBtYXBwaW5nIGNvZGUKICAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDUgTm9raWEgQ29ycG9yYXRpb24KLSAqIEF1dGhvcjogSnVoYSBZcmr2bOQgPGp1aGEueXJqb2xhQG5va2lhLmNvbT4KLSAqIFVwZGF0ZWQgbWFwIGRlc2MgdG8gYWRkIDI0MzAgc3VwcG9ydCA6IDx4MGtoYXNpbUB0aS5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgVGV4YXMgSW5zdHJ1bWVudHMKKyAqCisgKiBBdXRob3I6CisgKglKdWhhIFlyam9sYSA8anVoYS55cmpvbGFAbm9raWEuY29tPgorICoJU3llZCBLaGFzaW0gPHgwa2hhc2ltQHRpLmNvbT4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKQEAgLTIzLDE5ICsyNiwyNiBAQAogCiAjaW5jbHVkZSA8bWFjaC9tdXguaD4KICNpbmNsdWRlIDxtYWNoL29tYXBmYi5oPgorI2luY2x1ZGUgPG1hY2gvc3JhbS5oPgogCi1leHRlcm4gdm9pZCBvbWFwX3NyYW1faW5pdCh2b2lkKTsKLWV4dGVybiBpbnQgb21hcDJfY2xrX2luaXQodm9pZCk7Ci1leHRlcm4gdm9pZCBvbWFwMl9jaGVja19yZXZpc2lvbih2b2lkKTsKLWV4dGVybiB2b2lkIG9tYXAyX2luaXRfbWVtb3J5KHZvaWQpOwotZXh0ZXJuIHZvaWQgZ3BtY19pbml0KHZvaWQpOwotZXh0ZXJuIHZvaWQgb21hcGZiX3Jlc2VydmVfc2RyYW0odm9pZCk7CisjaW5jbHVkZSAibWVtb3J5LmgiCisKKyNpbmNsdWRlICJjbG9jay5oIgorCisjaW5jbHVkZSA8bWFjaC9wb3dlcmRvbWFpbi5oPgorCisjaW5jbHVkZSAicG93ZXJkb21haW5zLmgiCisKKyNpbmNsdWRlIDxtYWNoL2Nsb2NrZG9tYWluLmg+CisjaW5jbHVkZSAiY2xvY2tkb21haW5zLmgiCiAKIC8qCiAgKiBUaGUgbWFjaGluZSBzcGVjaWZpYyBjb2RlIG1heSBwcm92aWRlIHRoZSBleHRyYSBtYXBwaW5nIGJlc2lkZXMgdGhlCiAgKiBkZWZhdWx0IG1hcHBpbmcgcHJvdmlkZWQgaGVyZS4KICAqLwotc3RhdGljIHN0cnVjdCBtYXBfZGVzYyBvbWFwMl9pb19kZXNjW10gX19pbml0ZGF0YSA9IHsKKworI2lmZGVmIENPTkZJR19BUkNIX09NQVAyNFhYCitzdGF0aWMgc3RydWN0IG1hcF9kZXNjIG9tYXAyNHh4X2lvX2Rlc2NbXSBfX2luaXRkYXRhID0gewogCXsKIAkJLnZpcnR1YWwJPSBMM18yNFhYX1ZJUlQsCiAJCS5wZm4JCT0gX19waHlzX3RvX3BmbihMM18yNFhYX1BIWVMpLApAQCAtNDMsMjUgKzUzLDE1IEBACiAJCS50eXBlCQk9IE1UX0RFVklDRQogCX0sCiAJewotCQkudmlydHVhbCAgICAgICAgPSBMNF8yNFhYX1ZJUlQsCi0JCS5wZm4gICAgICAgICAgICA9IF9fcGh5c190b19wZm4oTDRfMjRYWF9QSFlTKSwKLQkJLmxlbmd0aCAgICAgICAgID0gTDRfMjRYWF9TSVpFLAotCQkudHlwZSAgICAgICAgICAgPSBNVF9ERVZJQ0UKLQl9LAotI2lmZGVmIENPTkZJR19BUkNIX09NQVAyNDMwCi0JewotCQkudmlydHVhbAk9IEw0X1dLXzI0M1hfVklSVCwKLQkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKEw0X1dLXzI0M1hfUEhZUyksCi0JCS5sZW5ndGgJCT0gTDRfV0tfMjQzWF9TSVpFLAorCQkudmlydHVhbAk9IEw0XzI0WFhfVklSVCwKKwkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKEw0XzI0WFhfUEhZUyksCisJCS5sZW5ndGgJCT0gTDRfMjRYWF9TSVpFLAogCQkudHlwZQkJPSBNVF9ERVZJQ0UKIAl9LAotCXsKLQkJLnZpcnR1YWwJPSBPTUFQMjQzWF9HUE1DX1ZJUlQsCi0JCS5wZm4JCT0gX19waHlzX3RvX3BmbihPTUFQMjQzWF9HUE1DX1BIWVMpLAotCQkubGVuZ3RoCQk9IE9NQVAyNDNYX0dQTUNfU0laRSwKLQkJLnR5cGUJCT0gTVRfREVWSUNFCi0JfSwKLSNlbmRpZgorfTsKKworI2lmZGVmIENPTkZJR19BUkNIX09NQVAyNDIwCitzdGF0aWMgc3RydWN0IG1hcF9kZXNjIG9tYXAyNDJ4X2lvX2Rlc2NbXSBfX2luaXRkYXRhID0gewogCXsKIAkJLnZpcnR1YWwJPSBEU1BfTUVNXzI0WFhfVklSVCwKIAkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKERTUF9NRU1fMjRYWF9QSFlTKSwKQEAgLTc5LDEyICs3OSwxMDkgQEAKIAkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKERTUF9NTVVfMjRYWF9QSFlTKSwKIAkJLmxlbmd0aAkJPSBEU1BfTU1VXzI0WFhfU0laRSwKIAkJLnR5cGUJCT0gTVRfREVWSUNFCi0JfQorCX0sCiB9OwogCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19BUkNIX09NQVAyNDMwCitzdGF0aWMgc3RydWN0IG1hcF9kZXNjIG9tYXAyNDN4X2lvX2Rlc2NbXSBfX2luaXRkYXRhID0geworCXsKKwkJLnZpcnR1YWwJPSBMNF9XS18yNDNYX1ZJUlQsCisJCS5wZm4JCT0gX19waHlzX3RvX3BmbihMNF9XS18yNDNYX1BIWVMpLAorCQkubGVuZ3RoCQk9IEw0X1dLXzI0M1hfU0laRSwKKwkJLnR5cGUJCT0gTVRfREVWSUNFCisJfSwKKwl7CisJCS52aXJ0dWFsCT0gT01BUDI0M1hfR1BNQ19WSVJULAorCQkucGZuCQk9IF9fcGh5c190b19wZm4oT01BUDI0M1hfR1BNQ19QSFlTKSwKKwkJLmxlbmd0aAkJPSBPTUFQMjQzWF9HUE1DX1NJWkUsCisJCS50eXBlCQk9IE1UX0RFVklDRQorCX0sCisJeworCQkudmlydHVhbAk9IE9NQVAyNDNYX1NEUkNfVklSVCwKKwkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKE9NQVAyNDNYX1NEUkNfUEhZUyksCisJCS5sZW5ndGgJCT0gT01BUDI0M1hfU0RSQ19TSVpFLAorCQkudHlwZQkJPSBNVF9ERVZJQ0UKKwl9LAorCXsKKwkJLnZpcnR1YWwJPSBPTUFQMjQzWF9TTVNfVklSVCwKKwkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKE9NQVAyNDNYX1NNU19QSFlTKSwKKwkJLmxlbmd0aAkJPSBPTUFQMjQzWF9TTVNfU0laRSwKKwkJLnR5cGUJCT0gTVRfREVWSUNFCisJfSwKK307CisjZW5kaWYKKyNlbmRpZgorCisjaWZkZWYJQ09ORklHX0FSQ0hfT01BUDM0WFgKK3N0YXRpYyBzdHJ1Y3QgbWFwX2Rlc2Mgb21hcDM0eHhfaW9fZGVzY1tdIF9faW5pdGRhdGEgPSB7CisJeworCQkudmlydHVhbAk9IEwzXzM0WFhfVklSVCwKKwkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKEwzXzM0WFhfUEhZUyksCisJCS5sZW5ndGgJCT0gTDNfMzRYWF9TSVpFLAorCQkudHlwZQkJPSBNVF9ERVZJQ0UKKwl9LAorCXsKKwkJLnZpcnR1YWwJPSBMNF8zNFhYX1ZJUlQsCisJCS5wZm4JCT0gX19waHlzX3RvX3BmbihMNF8zNFhYX1BIWVMpLAorCQkubGVuZ3RoCQk9IEw0XzM0WFhfU0laRSwKKwkJLnR5cGUJCT0gTVRfREVWSUNFCisJfSwKKwl7CisJCS52aXJ0dWFsCT0gTDRfV0tfMzRYWF9WSVJULAorCQkucGZuCQk9IF9fcGh5c190b19wZm4oTDRfV0tfMzRYWF9QSFlTKSwKKwkJLmxlbmd0aAkJPSBMNF9XS18zNFhYX1NJWkUsCisJCS50eXBlCQk9IE1UX0RFVklDRQorCX0sCisJeworCQkudmlydHVhbAk9IE9NQVAzNFhYX0dQTUNfVklSVCwKKwkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKE9NQVAzNFhYX0dQTUNfUEhZUyksCisJCS5sZW5ndGgJCT0gT01BUDM0WFhfR1BNQ19TSVpFLAorCQkudHlwZQkJPSBNVF9ERVZJQ0UKKwl9LAorCXsKKwkJLnZpcnR1YWwJPSBPTUFQMzQzWF9TTVNfVklSVCwKKwkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKE9NQVAzNDNYX1NNU19QSFlTKSwKKwkJLmxlbmd0aAkJPSBPTUFQMzQzWF9TTVNfU0laRSwKKwkJLnR5cGUJCT0gTVRfREVWSUNFCisJfSwKKwl7CisJCS52aXJ0dWFsCT0gT01BUDM0M1hfU0RSQ19WSVJULAorCQkucGZuCQk9IF9fcGh5c190b19wZm4oT01BUDM0M1hfU0RSQ19QSFlTKSwKKwkJLmxlbmd0aAkJPSBPTUFQMzQzWF9TRFJDX1NJWkUsCisJCS50eXBlCQk9IE1UX0RFVklDRQorCX0sCisJeworCQkudmlydHVhbAk9IEw0X1BFUl8zNFhYX1ZJUlQsCisJCS5wZm4JCT0gX19waHlzX3RvX3BmbihMNF9QRVJfMzRYWF9QSFlTKSwKKwkJLmxlbmd0aAkJPSBMNF9QRVJfMzRYWF9TSVpFLAorCQkudHlwZQkJPSBNVF9ERVZJQ0UKKwl9LAorCXsKKwkJLnZpcnR1YWwJPSBMNF9FTVVfMzRYWF9WSVJULAorCQkucGZuCQk9IF9fcGh5c190b19wZm4oTDRfRU1VXzM0WFhfUEhZUyksCisJCS5sZW5ndGgJCT0gTDRfRU1VXzM0WFhfU0laRSwKKwkJLnR5cGUJCT0gTVRfREVWSUNFCisJfSwKK307CisjZW5kaWYKKwogdm9pZCBfX2luaXQgb21hcDJfbWFwX2NvbW1vbl9pbyh2b2lkKQogewotCWlvdGFibGVfaW5pdChvbWFwMl9pb19kZXNjLCBBUlJBWV9TSVpFKG9tYXAyX2lvX2Rlc2MpKTsKKyNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAyNDIwKQorCWlvdGFibGVfaW5pdChvbWFwMjR4eF9pb19kZXNjLCBBUlJBWV9TSVpFKG9tYXAyNHh4X2lvX2Rlc2MpKTsKKwlpb3RhYmxlX2luaXQob21hcDI0MnhfaW9fZGVzYywgQVJSQVlfU0laRShvbWFwMjQyeF9pb19kZXNjKSk7CisjZW5kaWYKKworI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDI0MzApCisJaW90YWJsZV9pbml0KG9tYXAyNHh4X2lvX2Rlc2MsIEFSUkFZX1NJWkUob21hcDI0eHhfaW9fZGVzYykpOworCWlvdGFibGVfaW5pdChvbWFwMjQzeF9pb19kZXNjLCBBUlJBWV9TSVpFKG9tYXAyNDN4X2lvX2Rlc2MpKTsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMzRYWCkKKwlpb3RhYmxlX2luaXQob21hcDM0eHhfaW9fZGVzYywgQVJSQVlfU0laRShvbWFwMzR4eF9pb19kZXNjKSk7CisjZW5kaWYKIAogCS8qIE5vcm1hbGx5IGRldmljZW1hcHNfaW5pdCgpIHdvdWxkIGZsdXNoIGNhY2hlcyBhbmQgdGxiIGFmdGVyCiAJICogbWRlc2MtPm1hcF9pbygpLCBidXQgd2UgbXVzdCBhbHNvIGRvIGl0IGhlcmUgYmVjYXVzZSBvZiB0aGUgQ1BVCkBAIC0xMDEsMTIgKzE5OCw5IEBACiB2b2lkIF9faW5pdCBvbWFwMl9pbml0X2NvbW1vbl9odyh2b2lkKQogewogCW9tYXAyX211eF9pbml0KCk7CisJcHdyZG1faW5pdChwb3dlcmRvbWFpbnNfb21hcCk7CisJY2xrZG1faW5pdChjbG9ja2RvbWFpbnNfb21hcCwgY2xrZG1fcHdyZG1fYXV0b2RlcHMpOwogCW9tYXAyX2Nsa19pbml0KCk7Ci0vKgotICogTmVlZCB0byBGaXggdGhpcyBmb3IgMjQzMAotICovCi0jaWZuZGVmIENPTkZJR19BUkNIX09NQVAyNDMwCiAJb21hcDJfaW5pdF9tZW1vcnkoKTsKLSNlbmRpZgogCWdwbWNfaW5pdCgpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9pcnEuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvaXJxLmMKaW5kZXggMTk2YTk1Ni4uYzQwZmMzNyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9pcnEuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2lycS5jCkBAIC0xNiwxNCArMTYsMjAgQEAKICNpbmNsdWRlIDxsaW51eC9pby5oPgogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KICNpbmNsdWRlIDxhc20vbWFjaC9pcnEuaD4KLSNpbmNsdWRlIDxhc20vaXJxLmg+CiAKLSNkZWZpbmUgSU5UQ19SRVZJU0lPTgkweDAwMDAKLSNkZWZpbmUgSU5UQ19TWVNDT05GSUcJMHgwMDEwCi0jZGVmaW5lIElOVENfU1lTU1RBVFVTCTB4MDAxNAotI2RlZmluZSBJTlRDX0NPTlRST0wJMHgwMDQ4Ci0jZGVmaW5lIElOVENfTUlSX0NMRUFSMAkweDAwODgKLSNkZWZpbmUgSU5UQ19NSVJfU0VUMAkweDAwOGMKKworLyogc2VsZWN0ZWQgSU5UQyByZWdpc3RlciBvZmZzZXRzICovCisKKyNkZWZpbmUgSU5UQ19SRVZJU0lPTgkJMHgwMDAwCisjZGVmaW5lIElOVENfU1lTQ09ORklHCQkweDAwMTAKKyNkZWZpbmUgSU5UQ19TWVNTVEFUVVMJCTB4MDAxNAorI2RlZmluZSBJTlRDX0NPTlRST0wJCTB4MDA0OAorI2RlZmluZSBJTlRDX01JUl9DTEVBUjAJCTB4MDA4OAorI2RlZmluZSBJTlRDX01JUl9TRVQwCQkweDAwOGMKKyNkZWZpbmUgSU5UQ19QRU5ESU5HX0lSUTAJMHgwMDk4CisKKy8qIE51bWJlciBvZiBJUlEgc3RhdGUgYml0cyBpbiBlYWNoIE1JUiByZWdpc3RlciAqLworI2RlZmluZSBJUlFfQklUU19QRVJfUkVHCTMyCiAKIC8qCiAgKiBPTUFQMiBoYXMgYSBudW1iZXIgb2YgZGlmZmVyZW50IGludGVycnVwdCBjb250cm9sbGVycywgZWFjaCBpbnRlcnJ1cHQKQEAgLTMyLDQ4ICszOCw1MCBAQAogICogZm9yIGVhY2ggYmFuay4uIHdoZW4gaW4gZG91YnQsIGNvbnN1bHQgdGhlIFRSTS4KICAqLwogc3RhdGljIHN0cnVjdCBvbWFwX2lycV9iYW5rIHsKLQl1bnNpZ25lZCBsb25nIGJhc2VfcmVnOworCXZvaWQgX19pb21lbSAqYmFzZV9yZWc7CiAJdW5zaWduZWQgaW50IG5yX2lycXM7CiB9IF9fYXR0cmlidXRlX18gKChhbGlnbmVkKDQpKSkgaXJxX2JhbmtzW10gPSB7CiAJewogCQkvKiBNUFUgSU5UQyAqLwotCQkuYmFzZV9yZWcJPSBJT19BRERSRVNTKE9NQVAyNFhYX0lDX0JBU0UpLAorCQkuYmFzZV9yZWcJPSAwLAogCQkubnJfaXJxcwk9IDk2LAotCX0sIHsKLQkJLyogWFhYOiBEU1AgSU5UQyAqLwotCX0KKwl9LAogfTsKIAorLyogSU5UQyBiYW5rIHJlZ2lzdGVyIGdldC9zZXQgKi8KKworc3RhdGljIHZvaWQgaW50Y19iYW5rX3dyaXRlX3JlZyh1MzIgdmFsLCBzdHJ1Y3Qgb21hcF9pcnFfYmFuayAqYmFuaywgdTE2IHJlZykKK3sKKwlfX3Jhd193cml0ZWwodmFsLCBiYW5rLT5iYXNlX3JlZyArIHJlZyk7Cit9CisKK3N0YXRpYyB1MzIgaW50Y19iYW5rX3JlYWRfcmVnKHN0cnVjdCBvbWFwX2lycV9iYW5rICpiYW5rLCB1MTYgcmVnKQoreworCXJldHVybiBfX3Jhd19yZWFkbChiYW5rLT5iYXNlX3JlZyArIHJlZyk7Cit9CisKIC8qIFhYWDogRklRIGFuZCBhZGRpdGlvbmFsIElOVEMgc3VwcG9ydCAob25seSBNUFUgYXQgdGhlIG1vbWVudCkgKi8KIHN0YXRpYyB2b2lkIG9tYXBfYWNrX2lycSh1bnNpZ25lZCBpbnQgaXJxKQogewotCV9fcmF3X3dyaXRlbCgweDEsIGlycV9iYW5rc1swXS5iYXNlX3JlZyArIElOVENfQ09OVFJPTCk7CisJaW50Y19iYW5rX3dyaXRlX3JlZygweDEsICZpcnFfYmFua3NbMF0sIElOVENfQ09OVFJPTCk7CiB9CiAKIHN0YXRpYyB2b2lkIG9tYXBfbWFza19pcnEodW5zaWduZWQgaW50IGlycSkKIHsKLQlpbnQgb2Zmc2V0ID0gKGlycSA+PiA1KSA8PCA1OworCWludCBvZmZzZXQgPSBpcnEgJiAofihJUlFfQklUU19QRVJfUkVHIC0gMSkpOwogCi0JaWYgKGlycSA+PSA2NCkgewotCQlpcnEgJT0gNjQ7Ci0JfSBlbHNlIGlmIChpcnEgPj0gMzIpIHsKLQkJaXJxICU9IDMyOwotCX0KKwlpcnEgJj0gKElSUV9CSVRTX1BFUl9SRUcgLSAxKTsKIAotCV9fcmF3X3dyaXRlbCgxIDw8IGlycSwgaXJxX2JhbmtzWzBdLmJhc2VfcmVnICsgSU5UQ19NSVJfU0VUMCArIG9mZnNldCk7CisJaW50Y19iYW5rX3dyaXRlX3JlZygxIDw8IGlycSwgJmlycV9iYW5rc1swXSwgSU5UQ19NSVJfU0VUMCArIG9mZnNldCk7CiB9CiAKIHN0YXRpYyB2b2lkIG9tYXBfdW5tYXNrX2lycSh1bnNpZ25lZCBpbnQgaXJxKQogewotCWludCBvZmZzZXQgPSAoaXJxID4+IDUpIDw8IDU7CisJaW50IG9mZnNldCA9IGlycSAmICh+KElSUV9CSVRTX1BFUl9SRUcgLSAxKSk7CiAKLQlpZiAoaXJxID49IDY0KSB7Ci0JCWlycSAlPSA2NDsKLQl9IGVsc2UgaWYgKGlycSA+PSAzMikgewotCQlpcnEgJT0gMzI7Ci0JfQorCWlycSAmPSAoSVJRX0JJVFNfUEVSX1JFRyAtIDEpOwogCi0JX19yYXdfd3JpdGVsKDEgPDwgaXJxLCBpcnFfYmFua3NbMF0uYmFzZV9yZWcgKyBJTlRDX01JUl9DTEVBUjAgKyBvZmZzZXQpOworCWludGNfYmFua193cml0ZV9yZWcoMSA8PCBpcnEsICZpcnFfYmFua3NbMF0sIElOVENfTUlSX0NMRUFSMCArIG9mZnNldCk7CiB9CiAKIHN0YXRpYyB2b2lkIG9tYXBfbWFza19hY2tfaXJxKHVuc2lnbmVkIGludCBpcnEpCkBAIC05Myw0NSArMTAxLDQ2IEBACiB7CiAJdW5zaWduZWQgbG9uZyB0bXA7CiAKLQl0bXAgPSBfX3Jhd19yZWFkbChiYW5rLT5iYXNlX3JlZyArIElOVENfUkVWSVNJT04pICYgMHhmZjsKLQlwcmludGsoS0VSTl9JTkZPICJJUlE6IEZvdW5kIGFuIElOVEMgYXQgMHglMDhseCAiCisJdG1wID0gaW50Y19iYW5rX3JlYWRfcmVnKGJhbmssIElOVENfUkVWSVNJT04pICYgMHhmZjsKKwlwcmludGsoS0VSTl9JTkZPICJJUlE6IEZvdW5kIGFuIElOVEMgYXQgMHglcCAiCiAJCQkgIihyZXZpc2lvbiAlbGQuJWxkKSB3aXRoICVkIGludGVycnVwdHNcbiIsCiAJCQkgYmFuay0+YmFzZV9yZWcsIHRtcCA+PiA0LCB0bXAgJiAweGYsIGJhbmstPm5yX2lycXMpOwogCi0JdG1wID0gX19yYXdfcmVhZGwoYmFuay0+YmFzZV9yZWcgKyBJTlRDX1NZU0NPTkZJRyk7CisJdG1wID0gaW50Y19iYW5rX3JlYWRfcmVnKGJhbmssIElOVENfU1lTQ09ORklHKTsKIAl0bXAgfD0gMSA8PCAxOwkvKiBzb2Z0IHJlc2V0ICovCi0JX19yYXdfd3JpdGVsKHRtcCwgYmFuay0+YmFzZV9yZWcgKyBJTlRDX1NZU0NPTkZJRyk7CisJaW50Y19iYW5rX3dyaXRlX3JlZyh0bXAsIGJhbmssIElOVENfU1lTQ09ORklHKTsKIAotCXdoaWxlICghKF9fcmF3X3JlYWRsKGJhbmstPmJhc2VfcmVnICsgSU5UQ19TWVNTVEFUVVMpICYgMHgxKSkKKwl3aGlsZSAoIShpbnRjX2JhbmtfcmVhZF9yZWcoYmFuaywgSU5UQ19TWVNTVEFUVVMpICYgMHgxKSkKIAkJLyogV2FpdCBmb3IgcmVzZXQgdG8gY29tcGxldGUgKi87CiAKIAkvKiBFbmFibGUgYXV0b2lkbGUgKi8KLQlfX3Jhd193cml0ZWwoMSA8PCAwLCBiYW5rLT5iYXNlX3JlZyArIElOVENfU1lTQ09ORklHKTsKKwlpbnRjX2Jhbmtfd3JpdGVfcmVnKDEgPDwgMCwgYmFuaywgSU5UQ19TWVNDT05GSUcpOwogfQogCiB2b2lkIF9faW5pdCBvbWFwX2luaXRfaXJxKHZvaWQpCiB7Ci0JdW5zaWduZWQgbG9uZyBucl9pcnFzID0gMDsKKwl1bnNpZ25lZCBsb25nIG5yX29mX2lycXMgPSAwOwogCXVuc2lnbmVkIGludCBucl9iYW5rcyA9IDA7CiAJaW50IGk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShpcnFfYmFua3MpOyBpKyspIHsKIAkJc3RydWN0IG9tYXBfaXJxX2JhbmsgKmJhbmsgPSBpcnFfYmFua3MgKyBpOwogCi0JCS8qIFhYWCAqLwotCQlpZiAoIWJhbmstPmJhc2VfcmVnKQotCQkJY29udGludWU7CisJCWlmIChjcHVfaXNfb21hcDI0eHgoKSkKKwkJCWJhbmstPmJhc2VfcmVnID0gT01BUDJfSU9fQUREUkVTUyhPTUFQMjRYWF9JQ19CQVNFKTsKKwkJZWxzZSBpZiAoY3B1X2lzX29tYXAzNHh4KCkpCisJCQliYW5rLT5iYXNlX3JlZyA9IE9NQVAyX0lPX0FERFJFU1MoT01BUDM0WFhfSUNfQkFTRSk7CiAKIAkJb21hcF9pcnFfYmFua19pbml0X29uZShiYW5rKTsKIAotCQlucl9pcnFzICs9IGJhbmstPm5yX2lycXM7CisJCW5yX29mX2lycXMgKz0gYmFuay0+bnJfaXJxczsKIAkJbnJfYmFua3MrKzsKIAl9CiAKIAlwcmludGsoS0VSTl9JTkZPICJUb3RhbCBvZiAlbGQgaW50ZXJydXB0cyBvbiAlZCBhY3RpdmUgY29udHJvbGxlciVzXG4iLAotCSAgICAgICBucl9pcnFzLCBucl9iYW5rcywgbnJfYmFua3MgPiAxID8gInMiIDogIiIpOworCSAgICAgICBucl9vZl9pcnFzLCBucl9iYW5rcywgbnJfYmFua3MgPiAxID8gInMiIDogIiIpOwogCi0JZm9yIChpID0gMDsgaSA8IG5yX2lycXM7IGkrKykgeworCWZvciAoaSA9IDA7IGkgPCBucl9vZl9pcnFzOyBpKyspIHsKIAkJc2V0X2lycV9jaGlwKGksICZvbWFwX2lycV9jaGlwKTsKIAkJc2V0X2lycV9oYW5kbGVyKGksIGhhbmRsZV9sZXZlbF9pcnEpOwogCQlzZXRfaXJxX2ZsYWdzKGksIElSUUZfVkFMSUQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9tY2JzcC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9tY2JzcC5jCmluZGV4IGIyNjFmMWYuLmNhZTNlYmUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvbWNic3AuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL21jYnNwLmMKQEAgLTg5LDYgKzg5LDMwIEBACiAJCQkuZGlzYWJsZQk9IG9tYXBfbWNic3BfY2xrX2Rpc2FibGUsCiAJCX0sCiAJfSwKKwl7CisJCS5jbGsgPSB7CisJCQkubmFtZQkJPSAibWNic3BfY2xrIiwKKwkJCS5pZAkJPSAzLAorCQkJLmVuYWJsZQkJPSBvbWFwX21jYnNwX2Nsa19lbmFibGUsCisJCQkuZGlzYWJsZQk9IG9tYXBfbWNic3BfY2xrX2Rpc2FibGUsCisJCX0sCisJfSwKKwl7CisJCS5jbGsgPSB7CisJCQkubmFtZQkJPSAibWNic3BfY2xrIiwKKwkJCS5pZAkJPSA0LAorCQkJLmVuYWJsZQkJPSBvbWFwX21jYnNwX2Nsa19lbmFibGUsCisJCQkuZGlzYWJsZQk9IG9tYXBfbWNic3BfY2xrX2Rpc2FibGUsCisJCX0sCisJfSwKKwl7CisJCS5jbGsgPSB7CisJCQkubmFtZQkJPSAibWNic3BfY2xrIiwKKwkJCS5pZAkJPSA1LAorCQkJLmVuYWJsZQkJPSBvbWFwX21jYnNwX2Nsa19lbmFibGUsCisJCQkuZGlzYWJsZQk9IG9tYXBfbWNic3BfY2xrX2Rpc2FibGUsCisJCX0sCisJfSwKIH07CiAKICNkZWZpbmUgb21hcF9tY2JzcF9jbGtzX3NpemUJQVJSQVlfU0laRShvbWFwX21jYnNwX2Nsa3MpCkBAIC0xMTcsMjUgKzE0MSwxNCBAQAogCQlvbWFwMl9tY2JzcDJfbXV4X3NldHVwKCk7CiB9CiAKLXN0YXRpYyBpbnQgb21hcDJfbWNic3BfY2hlY2sodW5zaWduZWQgaW50IGlkKQotewotCWlmIChpZCA+IE9NQVBfTUFYX01DQlNQX0NPVU5UIC0gMSkgewotCQlwcmludGsoS0VSTl9FUlIgIk9NQVAtTWNCU1A6IE1jQlNQJWQgZG9lc24ndCBleGlzdFxuIiwgaWQgKyAxKTsKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JfQotCXJldHVybiAwOwotfQotCiBzdGF0aWMgc3RydWN0IG9tYXBfbWNic3Bfb3BzIG9tYXAyX21jYnNwX29wcyA9IHsKIAkucmVxdWVzdAk9IG9tYXAyX21jYnNwX3JlcXVlc3QsCi0JLmNoZWNrCQk9IG9tYXAyX21jYnNwX2NoZWNrLAogfTsKIAotI2lmZGVmIENPTkZJR19BUkNIX09NQVAyNFhYCi1zdGF0aWMgc3RydWN0IG9tYXBfbWNic3BfcGxhdGZvcm1fZGF0YSBvbWFwMjR4eF9tY2JzcF9wZGF0YVtdID0geworI2lmZGVmIENPTkZJR19BUkNIX09NQVAyNDIwCitzdGF0aWMgc3RydWN0IG9tYXBfbWNic3BfcGxhdGZvcm1fZGF0YSBvbWFwMjQyMF9tY2JzcF9wZGF0YVtdID0gewogCXsKIAkJLnBoeXNfYmFzZQk9IE9NQVAyNFhYX01DQlNQMV9CQVNFLAotCQkudmlydF9iYXNlCT0gSU9fQUREUkVTUyhPTUFQMjRYWF9NQ0JTUDFfQkFTRSksCiAJCS5kbWFfcnhfc3luYwk9IE9NQVAyNFhYX0RNQV9NQ0JTUDFfUlgsCiAJCS5kbWFfdHhfc3luYwk9IE9NQVAyNFhYX0RNQV9NQ0JTUDFfVFgsCiAJCS5yeF9pcnEJCT0gSU5UXzI0WFhfTUNCU1AxX0lSUV9SWCwKQEAgLTE0NSw3ICsxNTgsNiBAQAogCX0sCiAJewogCQkucGh5c19iYXNlCT0gT01BUDI0WFhfTUNCU1AyX0JBU0UsCi0JCS52aXJ0X2Jhc2UJPSBJT19BRERSRVNTKE9NQVAyNFhYX01DQlNQMl9CQVNFKSwKIAkJLmRtYV9yeF9zeW5jCT0gT01BUDI0WFhfRE1BX01DQlNQMl9SWCwKIAkJLmRtYV90eF9zeW5jCT0gT01BUDI0WFhfRE1BX01DQlNQMl9UWCwKIAkJLnJ4X2lycQkJPSBJTlRfMjRYWF9NQ0JTUDJfSVJRX1JYLApAQCAtMTU0LDE3ICsxNjYsNzAgQEAKIAkJLmNsa19uYW1lCT0gIm1jYnNwX2NsayIsCiAJfSwKIH07Ci0jZGVmaW5lIE9NQVAyNFhYX01DQlNQX1BEQVRBX1NaCQlBUlJBWV9TSVpFKG9tYXAyNHh4X21jYnNwX3BkYXRhKQorI2RlZmluZSBPTUFQMjQyMF9NQ0JTUF9QREFUQV9TWgkJQVJSQVlfU0laRShvbWFwMjQyMF9tY2JzcF9wZGF0YSkKICNlbHNlCi0jZGVmaW5lIG9tYXAyNHh4X21jYnNwX3BkYXRhCQlOVUxMCi0jZGVmaW5lIE9NQVAyNFhYX01DQlNQX1BEQVRBX1NaCQkwCisjZGVmaW5lIG9tYXAyNDIwX21jYnNwX3BkYXRhCQlOVUxMCisjZGVmaW5lIE9NQVAyNDIwX01DQlNQX1BEQVRBX1NaCQkwCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19BUkNIX09NQVAyNDMwCitzdGF0aWMgc3RydWN0IG9tYXBfbWNic3BfcGxhdGZvcm1fZGF0YSBvbWFwMjQzMF9tY2JzcF9wZGF0YVtdID0geworCXsKKwkJLnBoeXNfYmFzZQk9IE9NQVAyNFhYX01DQlNQMV9CQVNFLAorCQkuZG1hX3J4X3N5bmMJPSBPTUFQMjRYWF9ETUFfTUNCU1AxX1JYLAorCQkuZG1hX3R4X3N5bmMJPSBPTUFQMjRYWF9ETUFfTUNCU1AxX1RYLAorCQkucnhfaXJxCQk9IElOVF8yNFhYX01DQlNQMV9JUlFfUlgsCisJCS50eF9pcnEJCT0gSU5UXzI0WFhfTUNCU1AxX0lSUV9UWCwKKwkJLm9wcwkJPSAmb21hcDJfbWNic3Bfb3BzLAorCQkuY2xrX25hbWUJPSAibWNic3BfY2xrIiwKKwl9LAorCXsKKwkJLnBoeXNfYmFzZQk9IE9NQVAyNFhYX01DQlNQMl9CQVNFLAorCQkuZG1hX3J4X3N5bmMJPSBPTUFQMjRYWF9ETUFfTUNCU1AyX1JYLAorCQkuZG1hX3R4X3N5bmMJPSBPTUFQMjRYWF9ETUFfTUNCU1AyX1RYLAorCQkucnhfaXJxCQk9IElOVF8yNFhYX01DQlNQMl9JUlFfUlgsCisJCS50eF9pcnEJCT0gSU5UXzI0WFhfTUNCU1AyX0lSUV9UWCwKKwkJLm9wcwkJPSAmb21hcDJfbWNic3Bfb3BzLAorCQkuY2xrX25hbWUJPSAibWNic3BfY2xrIiwKKwl9LAorCXsKKwkJLnBoeXNfYmFzZQk9IE9NQVAyNDMwX01DQlNQM19CQVNFLAorCQkuZG1hX3J4X3N5bmMJPSBPTUFQMjRYWF9ETUFfTUNCU1AzX1JYLAorCQkuZG1hX3R4X3N5bmMJPSBPTUFQMjRYWF9ETUFfTUNCU1AzX1RYLAorCQkucnhfaXJxCQk9IElOVF8yNFhYX01DQlNQM19JUlFfUlgsCisJCS50eF9pcnEJCT0gSU5UXzI0WFhfTUNCU1AzX0lSUV9UWCwKKwkJLm9wcwkJPSAmb21hcDJfbWNic3Bfb3BzLAorCQkuY2xrX25hbWUJPSAibWNic3BfY2xrIiwKKwl9LAorCXsKKwkJLnBoeXNfYmFzZQk9IE9NQVAyNDMwX01DQlNQNF9CQVNFLAorCQkuZG1hX3J4X3N5bmMJPSBPTUFQMjRYWF9ETUFfTUNCU1A0X1JYLAorCQkuZG1hX3R4X3N5bmMJPSBPTUFQMjRYWF9ETUFfTUNCU1A0X1RYLAorCQkucnhfaXJxCQk9IElOVF8yNFhYX01DQlNQNF9JUlFfUlgsCisJCS50eF9pcnEJCT0gSU5UXzI0WFhfTUNCU1A0X0lSUV9UWCwKKwkJLm9wcwkJPSAmb21hcDJfbWNic3Bfb3BzLAorCQkuY2xrX25hbWUJPSAibWNic3BfY2xrIiwKKwl9LAorCXsKKwkJLnBoeXNfYmFzZQk9IE9NQVAyNDMwX01DQlNQNV9CQVNFLAorCQkuZG1hX3J4X3N5bmMJPSBPTUFQMjRYWF9ETUFfTUNCU1A1X1JYLAorCQkuZG1hX3R4X3N5bmMJPSBPTUFQMjRYWF9ETUFfTUNCU1A1X1RYLAorCQkucnhfaXJxCQk9IElOVF8yNFhYX01DQlNQNV9JUlFfUlgsCisJCS50eF9pcnEJCT0gSU5UXzI0WFhfTUNCU1A1X0lSUV9UWCwKKwkJLm9wcwkJPSAmb21hcDJfbWNic3Bfb3BzLAorCQkuY2xrX25hbWUJPSAibWNic3BfY2xrIiwKKwl9LAorfTsKKyNkZWZpbmUgT01BUDI0MzBfTUNCU1BfUERBVEFfU1oJCUFSUkFZX1NJWkUob21hcDI0MzBfbWNic3BfcGRhdGEpCisjZWxzZQorI2RlZmluZSBvbWFwMjQzMF9tY2JzcF9wZGF0YQkJTlVMTAorI2RlZmluZSBPTUFQMjQzMF9NQ0JTUF9QREFUQV9TWgkJMAogI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMzRYWAogc3RhdGljIHN0cnVjdCBvbWFwX21jYnNwX3BsYXRmb3JtX2RhdGEgb21hcDM0eHhfbWNic3BfcGRhdGFbXSA9IHsKIAl7CiAJCS5waHlzX2Jhc2UJPSBPTUFQMzRYWF9NQ0JTUDFfQkFTRSwKLQkJLnZpcnRfYmFzZQk9IElPX0FERFJFU1MoT01BUDM0WFhfTUNCU1AxX0JBU0UpLAogCQkuZG1hX3J4X3N5bmMJPSBPTUFQMjRYWF9ETUFfTUNCU1AxX1JYLAogCQkuZG1hX3R4X3N5bmMJPSBPTUFQMjRYWF9ETUFfTUNCU1AxX1RYLAogCQkucnhfaXJxCQk9IElOVF8yNFhYX01DQlNQMV9JUlFfUlgsCkBAIC0xNzQsNyArMjM5LDYgQEAKIAl9LAogCXsKIAkJLnBoeXNfYmFzZQk9IE9NQVAzNFhYX01DQlNQMl9CQVNFLAotCQkudmlydF9iYXNlCT0gSU9fQUREUkVTUyhPTUFQMzRYWF9NQ0JTUDJfQkFTRSksCiAJCS5kbWFfcnhfc3luYwk9IE9NQVAyNFhYX0RNQV9NQ0JTUDJfUlgsCiAJCS5kbWFfdHhfc3luYwk9IE9NQVAyNFhYX0RNQV9NQ0JTUDJfVFgsCiAJCS5yeF9pcnEJCT0gSU5UXzI0WFhfTUNCU1AyX0lSUV9SWCwKQEAgLTE4Miw2ICsyNDYsMzMgQEAKIAkJLm9wcwkJPSAmb21hcDJfbWNic3Bfb3BzLAogCQkuY2xrX25hbWUJPSAibWNic3BfY2xrIiwKIAl9LAorCXsKKwkJLnBoeXNfYmFzZQk9IE9NQVAzNFhYX01DQlNQM19CQVNFLAorCQkuZG1hX3J4X3N5bmMJPSBPTUFQMjRYWF9ETUFfTUNCU1AzX1JYLAorCQkuZG1hX3R4X3N5bmMJPSBPTUFQMjRYWF9ETUFfTUNCU1AzX1RYLAorCQkucnhfaXJxCQk9IElOVF8yNFhYX01DQlNQM19JUlFfUlgsCisJCS50eF9pcnEJCT0gSU5UXzI0WFhfTUNCU1AzX0lSUV9UWCwKKwkJLm9wcwkJPSAmb21hcDJfbWNic3Bfb3BzLAorCQkuY2xrX25hbWUJPSAibWNic3BfY2xrIiwKKwl9LAorCXsKKwkJLnBoeXNfYmFzZQk9IE9NQVAzNFhYX01DQlNQNF9CQVNFLAorCQkuZG1hX3J4X3N5bmMJPSBPTUFQMjRYWF9ETUFfTUNCU1A0X1JYLAorCQkuZG1hX3R4X3N5bmMJPSBPTUFQMjRYWF9ETUFfTUNCU1A0X1RYLAorCQkucnhfaXJxCQk9IElOVF8yNFhYX01DQlNQNF9JUlFfUlgsCisJCS50eF9pcnEJCT0gSU5UXzI0WFhfTUNCU1A0X0lSUV9UWCwKKwkJLm9wcwkJPSAmb21hcDJfbWNic3Bfb3BzLAorCQkuY2xrX25hbWUJPSAibWNic3BfY2xrIiwKKwl9LAorCXsKKwkJLnBoeXNfYmFzZQk9IE9NQVAzNFhYX01DQlNQNV9CQVNFLAorCQkuZG1hX3J4X3N5bmMJPSBPTUFQMjRYWF9ETUFfTUNCU1A1X1JYLAorCQkuZG1hX3R4X3N5bmMJPSBPTUFQMjRYWF9ETUFfTUNCU1A1X1RYLAorCQkucnhfaXJxCQk9IElOVF8yNFhYX01DQlNQNV9JUlFfUlgsCisJCS50eF9pcnEJCT0gSU5UXzI0WFhfTUNCU1A1X0lSUV9UWCwKKwkJLm9wcwkJPSAmb21hcDJfbWNic3Bfb3BzLAorCQkuY2xrX25hbWUJPSAibWNic3BfY2xrIiwKKwl9LAogfTsKICNkZWZpbmUgT01BUDM0WFhfTUNCU1BfUERBVEFfU1oJCUFSUkFZX1NJWkUob21hcDM0eHhfbWNic3BfcGRhdGEpCiAjZWxzZQpAQCAtMTg5LDcgKzI4MCw3IEBACiAjZGVmaW5lIE9NQVAzNFhYX01DQlNQX1BEQVRBX1NaCQkwCiAjZW5kaWYKIAotaW50IF9faW5pdCBvbWFwMl9tY2JzcF9pbml0KHZvaWQpCitzdGF0aWMgaW50IF9faW5pdCBvbWFwMl9tY2JzcF9pbml0KHZvaWQpCiB7CiAJaW50IGk7CiAKQEAgLTE5OSwxMCArMjkwLDI0IEBACiAJCWNsa19yZWdpc3Rlcigmb21hcF9tY2JzcF9jbGtzW2ldLmNsayk7CiAJfQogCi0JaWYgKGNwdV9pc19vbWFwMjR4eCgpKQotCQlvbWFwX21jYnNwX3JlZ2lzdGVyX2JvYXJkX2NmZyhvbWFwMjR4eF9tY2JzcF9wZGF0YSwKLQkJCQkJCU9NQVAyNFhYX01DQlNQX1BEQVRBX1NaKTsKKwlpZiAoY3B1X2lzX29tYXAyNDIwKCkpCisJCW9tYXBfbWNic3BfY291bnQgPSBPTUFQMjQyMF9NQ0JTUF9QREFUQV9TWjsKKwlpZiAoY3B1X2lzX29tYXAyNDMwKCkpCisJCW9tYXBfbWNic3BfY291bnQgPSBPTUFQMjQzMF9NQ0JTUF9QREFUQV9TWjsKKwlpZiAoY3B1X2lzX29tYXAzNHh4KCkpCisJCW9tYXBfbWNic3BfY291bnQgPSBPTUFQMzRYWF9NQ0JTUF9QREFUQV9TWjsKIAorCW1jYnNwX3B0ciA9IGt6YWxsb2Mob21hcF9tY2JzcF9jb3VudCAqIHNpemVvZihzdHJ1Y3Qgb21hcF9tY2JzcCAqKSwKKwkJCQkJCQkJR0ZQX0tFUk5FTCk7CisJaWYgKCFtY2JzcF9wdHIpCisJCXJldHVybiAtRU5PTUVNOworCisJaWYgKGNwdV9pc19vbWFwMjQyMCgpKQorCQlvbWFwX21jYnNwX3JlZ2lzdGVyX2JvYXJkX2NmZyhvbWFwMjQyMF9tY2JzcF9wZGF0YSwKKwkJCQkJCU9NQVAyNDIwX01DQlNQX1BEQVRBX1NaKTsKKwlpZiAoY3B1X2lzX29tYXAyNDMwKCkpCisJCW9tYXBfbWNic3BfcmVnaXN0ZXJfYm9hcmRfY2ZnKG9tYXAyNDMwX21jYnNwX3BkYXRhLAorCQkJCQkJT01BUDI0MzBfTUNCU1BfUERBVEFfU1opOwogCWlmIChjcHVfaXNfb21hcDM0eHgoKSkKIAkJb21hcF9tY2JzcF9yZWdpc3Rlcl9ib2FyZF9jZmcob21hcDM0eHhfbWNic3BfcGRhdGEsCiAJCQkJCQlPTUFQMzRYWF9NQ0JTUF9QREFUQV9TWik7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL21lbW9yeS5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9tZW1vcnkuYwppbmRleCBhYjE0NjJiLi44ODJjNzAyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL21lbW9yeS5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvbWVtb3J5LmMKQEAgLTEwMSw2ICsxMDEsMTcgQEAKIAlyZXR1cm4gcHJldjsKIH0KIAorI2lmICFkZWZpbmVkKENPTkZJR19BUkNIX09NQVAyKQordm9pZCBvbWFwMl9zcmFtX2Rkcl9pbml0KHUzMiAqc2xvd19kbGxfY3RybCwgdTMyIGZhc3RfZGxsX2N0cmwsCisJCQkJdTMyIGJhc2VfY3MsIHUzMiBmb3JjZV91bmxvY2spCit7Cit9Cit2b2lkIG9tYXAyX3NyYW1fcmVwcm9ncmFtX3NkcmModTMyIHBlcmZfbGV2ZWwsIHUzMiBkbGxfdmFsLAorCQkJCSAgICAgIHUzMiBtZW1fdHlwZSkKK3sKK30KKyNlbmRpZgorCiB2b2lkIG9tYXAyX2luaXRfbWVtb3J5X3BhcmFtcyh1MzIgZm9yY2VfbG9ja190b191bmxvY2tfbW9kZSkKIHsKIAl1bnNpZ25lZCBsb25nIGRsbF9jbnQ7CkBAIC0xNjUsNiArMTc2LDkgQEAKIHsKIAl1MzIgbDsKIAorCWlmICghY3B1X2lzX29tYXAyNDIwKCkpCisJCXJldHVybjsKKwogCWwgPSBzbXNfcmVhZF9yZWcoU01TX1NZU0NPTkZJRyk7CiAJbCAmPSB+KDB4MyA8PCAzKTsKIAlsIHw9ICgweDIgPDwgMyk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL21lbW9yeS5oIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9tZW1vcnkuaAppbmRleCA5YTI4MGI1Li5iYjNkYjgwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL21lbW9yeS5oCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvbWVtb3J5LmgKQEAgLTE0LDYgKzE0LDkgQEAKICAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgogICovCiAKKyNpZm5kZWYgQVJDSF9BUk1fTUFDSF9PTUFQMl9NRU1PUllfSAorI2RlZmluZSBBUkNIX0FSTV9NQUNIX09NQVAyX01FTU9SWV9ICisKIC8qIE1lbW9yeSB0aW1pbmdzICovCiAjZGVmaW5lIE1fRERSCQkxCiAjZGVmaW5lIE1fTE9DS19DVFJMCSgxIDw8IDIpCkBAIC0zNCwzICszNyw3IEBACiBleHRlcm4gdTMyIG9tYXAyX21lbW9yeV9nZXRfdHlwZSh2b2lkKTsKIHUzMiBvbWFwMl9kbGxfZm9yY2VfbmVlZGVkKHZvaWQpOwogdTMyIG9tYXAyX3JlcHJvZ3JhbV9zZHJjKHUzMiBsZXZlbCwgdTMyIGZvcmNlKTsKK3ZvaWQgX19pbml0IG9tYXAyX2luaXRfbWVtb3J5KHZvaWQpOwordm9pZCBfX2luaXQgZ3BtY19pbml0KHZvaWQpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvbXV4LmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL211eC5jCmluZGV4IDZiN2Q2NzIuLmIxMzkzNjcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvbXV4LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9tdXguYwpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiBsaW51eC9hcmNoL2FybS9tYWNoLW9tYXAyL211eC5jCiAgKgotICogT01BUDIgcGluIG11bHRpcGxleGluZyBjb25maWd1cmF0aW9ucworICogT01BUDIgYW5kIE9NQVAzIHBpbiBtdWx0aXBsZXhpbmcgY29uZmlndXJhdGlvbnMKICAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQgLSAyMDA4IFRleGFzIEluc3RydW1lbnRzIEluYy4KICAqIENvcHlyaWdodCAoQykgMjAwMyAtIDIwMDggTm9raWEgQ29ycG9yYXRpb24KQEAgLTIyMCwxNiArMjIwLDIyMiBAQAogI2RlZmluZSBPTUFQMjRYWF9QSU5TX1NaCTAKICNlbmRpZgkvKiBDT05GSUdfQVJDSF9PTUFQMjRYWCAqLwogCi0jZGVmaW5lIE9NQVAyNFhYX1BVTExfRU5BCSgxIDw8IDMpCi0jZGVmaW5lIE9NQVAyNFhYX1BVTExfVVAJKDEgPDwgNCkKKyNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMzRYWAorc3RhdGljIHN0cnVjdCBwaW5fY29uZmlnIF9faW5pdGRhdGFfb3JfbW9kdWxlIG9tYXAzNHh4X3BpbnNbXSA9IHsKKy8qCisgKgkJTmFtZSwgcmVnLW9mZnNldCwKKyAqCQltdXgtbW9kZSB8IFthY3RpdmUtbW9kZSB8IG9mZi1tb2RlXQorICovCisKKy8qIDM0eHggSTJDICovCitNVVhfQ0ZHXzM0WFgoIksyMV8zNFhYX0kyQzFfU0NMIiwgMHgxYmEsCisJCU9NQVAzNFhYX01VWF9NT0RFMCB8IE9NQVAzNFhYX1BJTl9JTlBVVF9QVUxMVVApCitNVVhfQ0ZHXzM0WFgoIkoyMV8zNFhYX0kyQzFfU0RBIiwgMHgxYmMsCisJCU9NQVAzNFhYX01VWF9NT0RFMCB8IE9NQVAzNFhYX1BJTl9JTlBVVF9QVUxMVVApCitNVVhfQ0ZHXzM0WFgoIkFGMTVfMzRYWF9JMkMyX1NDTCIsIDB4MWJlLAorCQlPTUFQMzRYWF9NVVhfTU9ERTAgfCBPTUFQMzRYWF9QSU5fSU5QVVRfUFVMTFVQKQorTVVYX0NGR18zNFhYKCJBRTE1XzM0WFhfSTJDMl9TREEiLCAweDFjMCwKKwkJT01BUDM0WFhfTVVYX01PREUwIHwgT01BUDM0WFhfUElOX0lOUFVUX1BVTExVUCkKK01VWF9DRkdfMzRYWCgiQUYxNF8zNFhYX0kyQzNfU0NMIiwgMHgxYzIsCisJCU9NQVAzNFhYX01VWF9NT0RFMCB8IE9NQVAzNFhYX1BJTl9JTlBVVF9QVUxMVVApCitNVVhfQ0ZHXzM0WFgoIkFHMTRfMzRYWF9JMkMzX1NEQSIsIDB4MWM0LAorCQlPTUFQMzRYWF9NVVhfTU9ERTAgfCBPTUFQMzRYWF9QSU5fSU5QVVRfUFVMTFVQKQorTVVYX0NGR18zNFhYKCJBRDI2XzM0WFhfSTJDNF9TQ0wiLCAweGEwMCwKKwkJT01BUDM0WFhfTVVYX01PREUwIHwgT01BUDM0WFhfUElOX0lOUFVUX1BVTExVUCkKK01VWF9DRkdfMzRYWCgiQUUyNl8zNFhYX0kyQzRfU0RBIiwgMHhhMDIsCisJCU9NQVAzNFhYX01VWF9NT0RFMCB8IE9NQVAzNFhYX1BJTl9JTlBVVF9QVUxMVVApCisKKy8qIFBIWSAtIEhTVVNCOiAxMi1waW4gVUxQSSBQSFk6IFBvcnQgMSovCitNVVhfQ0ZHXzM0WFgoIlk4XzM0MzBfVVNCMUhTX1BIWV9DTEsiLCAweDVkYSwKKwkJT01BUDM0WFhfTVVYX01PREUzIHwgT01BUDM0WFhfUElOX09VVFBVVCkKK01VWF9DRkdfMzRYWCgiWTlfMzQzMF9VU0IxSFNfUEhZX1NUUCIsIDB4NWQ4LAorCQlPTUFQMzRYWF9NVVhfTU9ERTMgfCBPTUFQMzRYWF9QSU5fT1VUUFVUKQorTVVYX0NGR18zNFhYKCJBQTE0XzM0MzBfVVNCMUhTX1BIWV9ESVIiLCAweDVlYywKKwkJT01BUDM0WFhfTVVYX01PREUzIHwgT01BUDM0WFhfUElOX0lOUFVUX1BVTExET1dOKQorTVVYX0NGR18zNFhYKCJBQTExXzM0MzBfVVNCMUhTX1BIWV9OWFQiLCAweDVlZSwKKwkJT01BUDM0WFhfTVVYX01PREUzIHwgT01BUDM0WFhfUElOX0lOUFVUX1BVTExET1dOKQorTVVYX0NGR18zNFhYKCJXMTNfMzQzMF9VU0IxSFNfUEhZX0QwIiwgMHg1ZGMsCisJCU9NQVAzNFhYX01VWF9NT0RFMyB8IE9NQVAzNFhYX1BJTl9JTlBVVF9QVUxMRE9XTikKK01VWF9DRkdfMzRYWCgiVzEyXzM0MzBfVVNCMUhTX1BIWV9EMSIsIDB4NWRlLAorCQlPTUFQMzRYWF9NVVhfTU9ERTMgfCBPTUFQMzRYWF9QSU5fSU5QVVRfUFVMTERPV04pCitNVVhfQ0ZHXzM0WFgoIlcxMV8zNDMwX1VTQjFIU19QSFlfRDIiLCAweDVlMCwKKwkJT01BUDM0WFhfTVVYX01PREUzIHwgT01BUDM0WFhfUElOX0lOUFVUX1BVTExET1dOKQorTVVYX0NGR18zNFhYKCJZMTFfMzQzMF9VU0IxSFNfUEhZX0QzIiwgMHg1ZWEsCisJCU9NQVAzNFhYX01VWF9NT0RFMyB8IE9NQVAzNFhYX1BJTl9JTlBVVF9QVUxMRE9XTikKK01VWF9DRkdfMzRYWCgiVzlfMzQzMF9VU0IxSFNfUEhZX0Q0IiwgMHg1ZTQsCisJCU9NQVAzNFhYX01VWF9NT0RFMyB8IE9NQVAzNFhYX1BJTl9JTlBVVF9QVUxMRE9XTikKK01VWF9DRkdfMzRYWCgiWTEyXzM0MzBfVVNCMUhTX1BIWV9ENSIsIDB4NWU2LAorCQlPTUFQMzRYWF9NVVhfTU9ERTMgfCBPTUFQMzRYWF9QSU5fSU5QVVRfUFVMTERPV04pCitNVVhfQ0ZHXzM0WFgoIlc4XzM0MzBfVVNCMUhTX1BIWV9ENiIsIDB4NWU4LAorCQlPTUFQMzRYWF9NVVhfTU9ERTMgfCBPTUFQMzRYWF9QSU5fSU5QVVRfUFVMTERPV04pCitNVVhfQ0ZHXzM0WFgoIlkxM18zNDMwX1VTQjFIU19QSFlfRDciLCAweDVlMiwKKwkJT01BUDM0WFhfTVVYX01PREUzIHwgT01BUDM0WFhfUElOX0lOUFVUX1BVTExET1dOKQorCisvKiBQSFkgLSBIU1VTQjogMTItcGluIFVMUEkgUEhZOiBQb3J0IDIqLworTVVYX0NGR18zNFhYKCJBQThfMzQzMF9VU0IySFNfUEhZX0NMSyIsIDB4NWYwLAorCQlPTUFQMzRYWF9NVVhfTU9ERTMgfCBPTUFQMzRYWF9QSU5fT1VUUFVUKQorTVVYX0NGR18zNFhYKCJBQTEwXzM0MzBfVVNCMkhTX1BIWV9TVFAiLCAweDVmMiwKKwkJT01BUDM0WFhfTVVYX01PREUzIHwgT01BUDM0WFhfUElOX09VVFBVVCkKK01VWF9DRkdfMzRYWCgiQUE5XzM0MzBfVVNCMkhTX1BIWV9ESVIiLCAweDVmNCwKKwkJT01BUDM0WFhfTVVYX01PREUzIHwgT01BUDM0WFhfUElOX0lOUFVUX1BVTExET1dOKQorTVVYX0NGR18zNFhYKCJBQjExXzM0MzBfVVNCMkhTX1BIWV9OWFQiLCAweDVmNiwKKwkJT01BUDM0WFhfTVVYX01PREUzIHwgT01BUDM0WFhfUElOX0lOUFVUX1BVTExET1dOKQorTVVYX0NGR18zNFhYKCJBQjEwXzM0MzBfVVNCMkhTX1BIWV9EMCIsIDB4NWY4LAorCQlPTUFQMzRYWF9NVVhfTU9ERTMgfCBPTUFQMzRYWF9QSU5fSU5QVVRfUFVMTERPV04pCitNVVhfQ0ZHXzM0WFgoIkFCOV8zNDMwX1VTQjJIU19QSFlfRDEiLCAweDVmYSwKKwkJT01BUDM0WFhfTVVYX01PREUzIHwgT01BUDM0WFhfUElOX0lOUFVUX1BVTExET1dOKQorTVVYX0NGR18zNFhYKCJXM18zNDMwX1VTQjJIU19QSFlfRDIiLCAweDFkNCwKKwkJT01BUDM0WFhfTVVYX01PREUzIHwgT01BUDM0WFhfUElOX0lOUFVUX1BVTExET1dOKQorTVVYX0NGR18zNFhYKCJUNF8zNDMwX1VTQjJIU19QSFlfRDMiLCAweDFkZSwKKwkJT01BUDM0WFhfTVVYX01PREUzIHwgT01BUDM0WFhfUElOX0lOUFVUX1BVTExET1dOKQorTVVYX0NGR18zNFhYKCJUM18zNDMwX1VTQjJIU19QSFlfRDQiLCAweDFkOCwKKwkJT01BUDM0WFhfTVVYX01PREUzIHwgT01BUDM0WFhfUElOX0lOUFVUX1BVTExET1dOKQorTVVYX0NGR18zNFhYKCJSM18zNDMwX1VTQjJIU19QSFlfRDUiLCAweDFkYSwKKwkJT01BUDM0WFhfTVVYX01PREUzIHwgT01BUDM0WFhfUElOX0lOUFVUX1BVTExET1dOKQorTVVYX0NGR18zNFhYKCJSNF8zNDMwX1VTQjJIU19QSFlfRDYiLCAweDFkYywKKwkJT01BUDM0WFhfTVVYX01PREUzIHwgT01BUDM0WFhfUElOX0lOUFVUX1BVTExET1dOKQorTVVYX0NGR18zNFhYKCJUMl8zNDMwX1VTQjJIU19QSFlfRDciLCAweDFkNiwKKwkJT01BUDM0WFhfTVVYX01PREUzIHwgT01BUDM0WFhfUElOX0lOUFVUX1BVTExET1dOKQorCisvKiBUTEwgLSBIU1VTQjogMTItcGluIFRMTCBQb3J0IDEqLworTVVYX0NGR18zNFhYKCJZOF8zNDMwX1VTQjFIU19UTExfQ0xLIiwgMHg1ZGEsCisJCU9NQVAzNFhYX01VWF9NT0RFNiB8IE9NQVAzNFhYX1BJTl9JTlBVVF9QVUxMRE9XTikKK01VWF9DRkdfMzRYWCgiWTlfMzQzMF9VU0IxSFNfVExMX1NUUCIsIDB4NWQ4LAorCQlPTUFQMzRYWF9NVVhfTU9ERTYgfCBPTUFQMzRYWF9QSU5fSU5QVVRfUFVMTFVQKQorTVVYX0NGR18zNFhYKCJBQTE0XzM0MzBfVVNCMUhTX1RMTF9ESVIiLCAweDVlYywKKwkJT01BUDM0WFhfTVVYX01PREU2IHwgT01BUDM0WFhfUElOX0lOUFVUX1BVTExET1dOKQorTVVYX0NGR18zNFhYKCJBQTExXzM0MzBfVVNCMUhTX1RMTF9OWFQiLCAweDVlZSwKKwkJT01BUDM0WFhfTVVYX01PREU2IHwgT01BUDM0WFhfUElOX0lOUFVUX1BVTExET1dOKQorTVVYX0NGR18zNFhYKCJXMTNfMzQzMF9VU0IxSFNfVExMX0QwIiwgMHg1ZGMsCisJCU9NQVAzNFhYX01VWF9NT0RFNiB8IE9NQVAzNFhYX1BJTl9JTlBVVF9QVUxMRE9XTikKK01VWF9DRkdfMzRYWCgiVzEyXzM0MzBfVVNCMUhTX1RMTF9EMSIsIDB4NWRlLAorCQlPTUFQMzRYWF9NVVhfTU9ERTYgfCBPTUFQMzRYWF9QSU5fSU5QVVRfUFVMTERPV04pCitNVVhfQ0ZHXzM0WFgoIlcxMV8zNDMwX1VTQjFIU19UTExfRDIiLCAweDVlMCwKKwkJT01BUDM0WFhfTVVYX01PREU2IHwgT01BUDM0WFhfUElOX0lOUFVUX1BVTExET1dOKQorTVVYX0NGR18zNFhYKCJZMTFfMzQzMF9VU0IxSFNfVExMX0QzIiwgMHg1ZWEsCisJCU9NQVAzNFhYX01VWF9NT0RFNiB8IE9NQVAzNFhYX1BJTl9JTlBVVF9QVUxMRE9XTikKK01VWF9DRkdfMzRYWCgiVzlfMzQzMF9VU0IxSFNfVExMX0Q0IiwgMHg1ZTQsCisJCU9NQVAzNFhYX01VWF9NT0RFNiB8IE9NQVAzNFhYX1BJTl9JTlBVVF9QVUxMRE9XTikKK01VWF9DRkdfMzRYWCgiWTEyXzM0MzBfVVNCMUhTX1RMTF9ENSIsIDB4NWU2LAorCQlPTUFQMzRYWF9NVVhfTU9ERTYgfCBPTUFQMzRYWF9QSU5fSU5QVVRfUFVMTERPV04pCitNVVhfQ0ZHXzM0WFgoIlc4XzM0MzBfVVNCMUhTX1RMTF9ENiIsIDB4NWU4LAorCQlPTUFQMzRYWF9NVVhfTU9ERTYgfCBPTUFQMzRYWF9QSU5fSU5QVVRfUFVMTERPV04pCitNVVhfQ0ZHXzM0WFgoIlkxM18zNDMwX1VTQjFIU19UTExfRDciLCAweDVlMiwKKwkJT01BUDM0WFhfTVVYX01PREU2IHwgT01BUDM0WFhfUElOX0lOUFVUX1BVTExET1dOKQorCisvKiBUTEwgLSBIU1VTQjogMTItcGluIFRMTCBQb3J0IDIqLworTVVYX0NGR18zNFhYKCJBQThfMzQzMF9VU0IySFNfVExMX0NMSyIsIDB4NWYwLAorCQlPTUFQMzRYWF9NVVhfTU9ERTYgfCBPTUFQMzRYWF9QSU5fSU5QVVRfUFVMTERPV04pCitNVVhfQ0ZHXzM0WFgoIkFBMTBfMzQzMF9VU0IySFNfVExMX1NUUCIsIDB4NWYyLAorCQlPTUFQMzRYWF9NVVhfTU9ERTYgfCBPTUFQMzRYWF9QSU5fSU5QVVRfUFVMTFVQKQorTVVYX0NGR18zNFhYKCJBQTlfMzQzMF9VU0IySFNfVExMX0RJUiIsIDB4NWY0LAorCQlPTUFQMzRYWF9NVVhfTU9ERTYgfCBPTUFQMzRYWF9QSU5fSU5QVVRfUFVMTERPV04pCitNVVhfQ0ZHXzM0WFgoIkFCMTFfMzQzMF9VU0IySFNfVExMX05YVCIsIDB4NWY2LAorCQlPTUFQMzRYWF9NVVhfTU9ERTYgfCBPTUFQMzRYWF9QSU5fSU5QVVRfUFVMTERPV04pCitNVVhfQ0ZHXzM0WFgoIkFCMTBfMzQzMF9VU0IySFNfVExMX0QwIiwgMHg1ZjgsCisJCU9NQVAzNFhYX01VWF9NT0RFNiB8IE9NQVAzNFhYX1BJTl9JTlBVVF9QVUxMRE9XTikKK01VWF9DRkdfMzRYWCgiQUI5XzM0MzBfVVNCMkhTX1RMTF9EMSIsIDB4NWZhLAorCQlPTUFQMzRYWF9NVVhfTU9ERTYgfCBPTUFQMzRYWF9QSU5fSU5QVVRfUFVMTERPV04pCitNVVhfQ0ZHXzM0WFgoIlczXzM0MzBfVVNCMkhTX1RMTF9EMiIsIDB4MWQ0LAorCQlPTUFQMzRYWF9NVVhfTU9ERTIgfCBPTUFQMzRYWF9QSU5fSU5QVVRfUFVMTERPV04pCitNVVhfQ0ZHXzM0WFgoIlQ0XzM0MzBfVVNCMkhTX1RMTF9EMyIsIDB4MWRlLAorCQlPTUFQMzRYWF9NVVhfTU9ERTIgfCBPTUFQMzRYWF9QSU5fSU5QVVRfUFVMTERPV04pCitNVVhfQ0ZHXzM0WFgoIlQzXzM0MzBfVVNCMkhTX1RMTF9ENCIsIDB4MWQ4LAorCQlPTUFQMzRYWF9NVVhfTU9ERTIgfCBPTUFQMzRYWF9QSU5fSU5QVVRfUFVMTERPV04pCitNVVhfQ0ZHXzM0WFgoIlIzXzM0MzBfVVNCMkhTX1RMTF9ENSIsIDB4MWRhLAorCQlPTUFQMzRYWF9NVVhfTU9ERTIgfCBPTUFQMzRYWF9QSU5fSU5QVVRfUFVMTERPV04pCitNVVhfQ0ZHXzM0WFgoIlI0XzM0MzBfVVNCMkhTX1RMTF9ENiIsIDB4MWRjLAorCQlPTUFQMzRYWF9NVVhfTU9ERTIgfCBPTUFQMzRYWF9QSU5fSU5QVVRfUFVMTERPV04pCitNVVhfQ0ZHXzM0WFgoIlQyXzM0MzBfVVNCMkhTX1RMTF9ENyIsIDB4MWQ2LAorCQlPTUFQMzRYWF9NVVhfTU9ERTIgfCBPTUFQMzRYWF9QSU5fSU5QVVRfUFVMTERPV04pCisKKy8qIFRMTCAtIEhTVVNCOiAxMi1waW4gVExMIFBvcnQgMyovCitNVVhfQ0ZHXzM0WFgoIkFBNl8zNDMwX1VTQjNIU19UTExfQ0xLIiwgMHgxODAsCisJCU9NQVAzNFhYX01VWF9NT0RFNSB8IE9NQVAzNFhYX1BJTl9JTlBVVF9QVUxMRE9XTikKK01VWF9DRkdfMzRYWCgiQUIzXzM0MzBfVVNCM0hTX1RMTF9TVFAiLCAweDE2NiwKKwkJT01BUDM0WFhfTVVYX01PREU1IHwgT01BUDM0WFhfUElOX0lOUFVUX1BVTExVUCkKK01VWF9DRkdfMzRYWCgiQUEzXzM0MzBfVVNCM0hTX1RMTF9ESVIiLCAweDE2OCwKKwkJT01BUDM0WFhfTVVYX01PREU1IHwgT01BUDM0WFhfUElOX0lOUFVUX1BVTExET1dOKQorTVVYX0NGR18zNFhYKCJZM18zNDMwX1VTQjNIU19UTExfTlhUIiwgMHgxNmEsCisJCU9NQVAzNFhYX01VWF9NT0RFNSB8IE9NQVAzNFhYX1BJTl9JTlBVVF9QVUxMRE9XTikKK01VWF9DRkdfMzRYWCgiQUE1XzM0MzBfVVNCM0hTX1RMTF9EMCIsIDB4MTg2LAorCQlPTUFQMzRYWF9NVVhfTU9ERTUgfCBPTUFQMzRYWF9QSU5fSU5QVVRfUFVMTERPV04pCitNVVhfQ0ZHXzM0WFgoIlk0XzM0MzBfVVNCM0hTX1RMTF9EMSIsIDB4MTg0LAorCQlPTUFQMzRYWF9NVVhfTU9ERTUgfCBPTUFQMzRYWF9QSU5fSU5QVVRfUFVMTERPV04pCitNVVhfQ0ZHXzM0WFgoIlk1XzM0MzBfVVNCM0hTX1RMTF9EMiIsIDB4MTg4LAorCQlPTUFQMzRYWF9NVVhfTU9ERTUgfCBPTUFQMzRYWF9QSU5fSU5QVVRfUFVMTERPV04pCitNVVhfQ0ZHXzM0WFgoIlc1XzM0MzBfVVNCM0hTX1RMTF9EMyIsIDB4MThhLAorCQlPTUFQMzRYWF9NVVhfTU9ERTUgfCBPTUFQMzRYWF9QSU5fSU5QVVRfUFVMTERPV04pCitNVVhfQ0ZHXzM0WFgoIkFCMTJfMzQzMF9VU0IzSFNfVExMX0Q0IiwgMHgxNmMsCisJCU9NQVAzNFhYX01VWF9NT0RFNSB8IE9NQVAzNFhYX1BJTl9JTlBVVF9QVUxMRE9XTikKK01VWF9DRkdfMzRYWCgiQUIxM18zNDMwX1VTQjNIU19UTExfRDUiLCAweDE2ZSwKKwkJT01BUDM0WFhfTVVYX01PREU1IHwgT01BUDM0WFhfUElOX0lOUFVUX1BVTExET1dOKQorTVVYX0NGR18zNFhYKCJBQTEzXzM0MzBfVVNCM0hTX1RMTF9ENiIsIDB4MTcwLAorCQlPTUFQMzRYWF9NVVhfTU9ERTUgfCBPTUFQMzRYWF9QSU5fSU5QVVRfUFVMTERPV04pCitNVVhfQ0ZHXzM0WFgoIkFBMTJfMzQzMF9VU0IzSFNfVExMX0Q3IiwgMHgxNzIsCisJCU9NQVAzNFhYX01VWF9NT0RFNSB8IE9NQVAzNFhYX1BJTl9JTlBVVF9QVUxMRE9XTikKKworLyogUEhZIEZTVVNCOiBGUyBTZXJpYWwgZm9yIFBvcnQgMSAobXVsdGlwbGUgUEhZIG1vZGVzIHN1cHBvcnRlZCkgKi8KK01VWF9DRkdfMzRYWCgiQUYxMF8zNDMwX1VTQjFGU19QSFlfTU0xX1JYRFAiLCAweDVkOCwKKwkJT01BUDM0WFhfTVVYX01PREU1IHwgT01BUDM0WFhfUElOX0lOUFVUX1BVTExET1dOKQorTVVYX0NGR18zNFhYKCJBRzlfMzQzMF9VU0IxRlNfUEhZX01NMV9SWERNIiwgMHg1ZWUsCisJCU9NQVAzNFhYX01VWF9NT0RFNSB8IE9NQVAzNFhYX1BJTl9JTlBVVF9QVUxMRE9XTikKK01VWF9DRkdfMzRYWCgiVzEzXzM0MzBfVVNCMUZTX1BIWV9NTTFfUlhSQ1YiLCAweDVkYywKKwkJT01BUDM0WFhfTVVYX01PREU1IHwgT01BUDM0WFhfUElOX0lOUFVUX1BVTExET1dOKQorTVVYX0NGR18zNFhYKCJXMTJfMzQzMF9VU0IxRlNfUEhZX01NMV9UWFNFMCIsIDB4NWRlLAorCQlPTUFQMzRYWF9NVVhfTU9ERTUgfCBPTUFQMzRYWF9QSU5fSU5QVVRfUFVMTERPV04pCitNVVhfQ0ZHXzM0WFgoIlcxMV8zNDMwX1VTQjFGU19QSFlfTU0xX1RYREFUIiwgMHg1ZTAsCisJCU9NQVAzNFhYX01VWF9NT0RFNSB8IE9NQVAzNFhYX1BJTl9JTlBVVF9QVUxMRE9XTikKK01VWF9DRkdfMzRYWCgiWTExXzM0MzBfVVNCMUZTX1BIWV9NTTFfVFhFTl9OIiwgMHg1ZWEsCisJCU9NQVAzNFhYX01VWF9NT0RFNSB8IE9NQVAzNFhYX1BJTl9PVVRQVVQpCisKKy8qIFBIWSBGU1VTQjogRlMgU2VyaWFsIGZvciBQb3J0IDIgKG11bHRpcGxlIFBIWSBtb2RlcyBzdXBwb3J0ZWQpICovCitNVVhfQ0ZHXzM0WFgoIkFGN18zNDMwX1VTQjJGU19QSFlfTU0yX1JYRFAiLCAweDVmMiwKKwkJT01BUDM0WFhfTVVYX01PREU1IHwgT01BUDM0WFhfUElOX0lOUFVUX1BVTExET1dOKQorTVVYX0NGR18zNFhYKCJBSDdfMzQzMF9VU0IyRlNfUEhZX01NMl9SWERNIiwgMHg1ZjYsCisJCU9NQVAzNFhYX01VWF9NT0RFNSB8IE9NQVAzNFhYX1BJTl9JTlBVVF9QVUxMRE9XTikKK01VWF9DRkdfMzRYWCgiQUIxMF8zNDMwX1VTQjJGU19QSFlfTU0yX1JYUkNWIiwgMHg1ZjgsCisJCU9NQVAzNFhYX01VWF9NT0RFNSB8IE9NQVAzNFhYX1BJTl9JTlBVVF9QVUxMRE9XTikKK01VWF9DRkdfMzRYWCgiQUI5XzM0MzBfVVNCMkZTX1BIWV9NTTJfVFhTRTAiLCAweDVmYSwKKwkJT01BUDM0WFhfTVVYX01PREU1IHwgT01BUDM0WFhfUElOX0lOUFVUX1BVTExET1dOKQorTVVYX0NGR18zNFhYKCJXM18zNDMwX1VTQjJGU19QSFlfTU0yX1RYREFUIiwgMHgxZDQsCisJCU9NQVAzNFhYX01VWF9NT0RFNSB8IE9NQVAzNFhYX1BJTl9JTlBVVF9QVUxMRE9XTikKK01VWF9DRkdfMzRYWCgiVDRfMzQzMF9VU0IyRlNfUEhZX01NMl9UWEVOX04iLCAweDFkZSwKKwkJT01BUDM0WFhfTVVYX01PREU1IHwgT01BUDM0WFhfUElOX09VVFBVVCkKKworLyogUEhZIEZTVVNCOiBGUyBTZXJpYWwgZm9yIFBvcnQgMyAobXVsdGlwbGUgUEhZIG1vZGVzIHN1cHBvcnRlZCkgKi8KK01VWF9DRkdfMzRYWCgiQUgzXzM0MzBfVVNCM0ZTX1BIWV9NTTNfUlhEUCIsIDB4MTY2LAorCQlPTUFQMzRYWF9NVVhfTU9ERTYgfCBPTUFQMzRYWF9QSU5fSU5QVVRfUFVMTERPV04pCitNVVhfQ0ZHXzM0WFgoIkFFM18zNDMwX1VTQjNGU19QSFlfTU0zX1JYRE0iLCAweDE2YSwKKwkJT01BUDM0WFhfTVVYX01PREU2IHwgT01BUDM0WFhfUElOX0lOUFVUX1BVTExET1dOKQorTVVYX0NGR18zNFhYKCJBRDFfMzQzMF9VU0IzRlNfUEhZX01NM19SWFJDViIsIDB4MTg2LAorCQlPTUFQMzRYWF9NVVhfTU9ERTYgfCBPTUFQMzRYWF9QSU5fSU5QVVRfUFVMTERPV04pCitNVVhfQ0ZHXzM0WFgoIkFFMV8zNDMwX1VTQjNGU19QSFlfTU0zX1RYU0UwIiwgMHgxODQsCisJCU9NQVAzNFhYX01VWF9NT0RFNiB8IE9NQVAzNFhYX1BJTl9JTlBVVF9QVUxMRE9XTikKK01VWF9DRkdfMzRYWCgiQUQyXzM0MzBfVVNCM0ZTX1BIWV9NTTNfVFhEQVQiLCAweDE4OCwKKwkJT01BUDM0WFhfTVVYX01PREU2IHwgT01BUDM0WFhfUElOX0lOUFVUX1BVTExET1dOKQorTVVYX0NGR18zNFhYKCJBQzFfMzQzMF9VU0IzRlNfUEhZX01NM19UWEVOX04iLCAweDE4YSwKKwkJT01BUDM0WFhfTVVYX01PREU2IHwgT01BUDM0WFhfUElOX09VVFBVVCkKKworfTsKKworI2RlZmluZSBPTUFQMzRYWF9QSU5TX1NaCUFSUkFZX1NJWkUob21hcDM0eHhfcGlucykKKworI2Vsc2UKKyNkZWZpbmUgb21hcDM0eHhfcGlucwkJTlVMTAorI2RlZmluZSBPTUFQMzRYWF9QSU5TX1NaCTAKKyNlbmRpZgkvKiBDT05GSUdfQVJDSF9PTUFQMzRYWCAqLwogCiAjaWYgZGVmaW5lZChDT05GSUdfT01BUF9NVVhfREVCVUcpIHx8IGRlZmluZWQoQ09ORklHX09NQVBfTVVYX1dBUk5JTkdTKQotdm9pZCBfX2luaXRfb3JfbW9kdWxlIG9tYXAyX2NmZ19kZWJ1Zyhjb25zdCBzdHJ1Y3QgcGluX2NvbmZpZyAqY2ZnLCB1OCByZWcpCitzdGF0aWMgdm9pZCBfX2luaXRfb3JfbW9kdWxlIG9tYXAyX2NmZ19kZWJ1Zyhjb25zdCBzdHJ1Y3QgcGluX2NvbmZpZyAqY2ZnLCB1MTYgcmVnKQogewogCXUxNiBvcmlnOwogCXU4IHdhcm4gPSAwLCBkZWJ1ZyA9IDA7CiAKLQlvcmlnID0gb21hcF9jdHJsX3JlYWRiKGNmZy0+bXV4X3JlZyk7CisJaWYgKGNwdV9pc19vbWFwMjR4eCgpKQorCQlvcmlnID0gb21hcF9jdHJsX3JlYWRiKGNmZy0+bXV4X3JlZyk7CisJZWxzZQorCQlvcmlnID0gb21hcF9jdHJsX3JlYWR3KGNmZy0+bXV4X3JlZyk7CiAKICNpZmRlZglDT05GSUdfT01BUF9NVVhfREVCVUcKIAlkZWJ1ZyA9IGNmZy0+ZGVidWc7CkBAIC0yNTUsOSArNDYxLDkgQEAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmbXV4X3NwaW5fbG9jaywgZmxhZ3MpOwogCXJlZyB8PSBjZmctPm1hc2sgJiAweDc7CiAJaWYgKGNmZy0+cHVsbF92YWwpCi0JCXJlZyB8PSBPTUFQMjRYWF9QVUxMX0VOQTsKKwkJcmVnIHw9IE9NQVAyX1BVTExfRU5BOwogCWlmIChjZmctPnB1X3BkX3ZhbCkKLQkJcmVnIHw9IE9NQVAyNFhYX1BVTExfVVA7CisJCXJlZyB8PSBPTUFQMl9QVUxMX1VQOwogCW9tYXAyX2NmZ19kZWJ1ZyhjZmcsIHJlZyk7CiAJb21hcF9jdHJsX3dyaXRlYihyZWcsIGNmZy0+bXV4X3JlZyk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbXV4X3NwaW5fbG9jaywgZmxhZ3MpOwpAQCAtMjY1LDcgKzQ3MSwyNiBAQAogCXJldHVybiAwOwogfQogI2Vsc2UKLSNkZWZpbmUgb21hcDI0eHhfY2ZnX3JlZwkwCisjZGVmaW5lIG9tYXAyNHh4X2NmZ19yZWcJTlVMTAorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMzRYWAorc3RhdGljIGludCBfX2luaXRfb3JfbW9kdWxlIG9tYXAzNHh4X2NmZ19yZWcoY29uc3Qgc3RydWN0IHBpbl9jb25maWcgKmNmZykKK3sKKwlzdGF0aWMgREVGSU5FX1NQSU5MT0NLKG11eF9zcGluX2xvY2spOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdTE2IHJlZyA9IDA7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmbXV4X3NwaW5fbG9jaywgZmxhZ3MpOworCXJlZyB8PSBjZmctPm11eF92YWw7CisJb21hcDJfY2ZnX2RlYnVnKGNmZywgcmVnKTsKKwlvbWFwX2N0cmxfd3JpdGV3KHJlZywgY2ZnLT5tdXhfcmVnKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtdXhfc3Bpbl9sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gMDsKK30KKyNlbHNlCisjZGVmaW5lIG9tYXAzNHh4X2NmZ19yZWcJTlVMTAogI2VuZGlmCiAKIGludCBfX2luaXQgb21hcDJfbXV4X2luaXQodm9pZCkKQEAgLTI3NCw2ICs0OTksMTAgQEAKIAkJYXJjaF9tdXhfY2ZnLnBpbnMJPSBvbWFwMjR4eF9waW5zOwogCQlhcmNoX211eF9jZmcuc2l6ZQk9IE9NQVAyNFhYX1BJTlNfU1o7CiAJCWFyY2hfbXV4X2NmZy5jZmdfcmVnCT0gb21hcDI0eHhfY2ZnX3JlZzsKKwl9IGVsc2UgaWYgKGNwdV9pc19vbWFwMzR4eCgpKSB7CisJCWFyY2hfbXV4X2NmZy5waW5zCT0gb21hcDM0eHhfcGluczsKKwkJYXJjaF9tdXhfY2ZnLnNpemUJPSBPTUFQMzRYWF9QSU5TX1NaOworCQlhcmNoX211eF9jZmcuY2ZnX3JlZwk9IG9tYXAzNHh4X2NmZ19yZWc7CiAJfQogCiAJcmV0dXJuIG9tYXBfbXV4X3JlZ2lzdGVyKCZhcmNoX211eF9jZmcpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9wb3dlcmRvbWFpbi5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9wb3dlcmRvbWFpbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjczZTI5NzEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3Bvd2VyZG9tYWluLmMKQEAgLTAsMCArMSwxMTEzIEBACisvKgorICogT01BUCBwb3dlcmRvbWFpbiBjb250cm9sCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMDggVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwNy0yMDA4IE5va2lhIENvcnBvcmF0aW9uCisgKgorICogV3JpdHRlbiBieSBQYXVsIFdhbG1zbGV5CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworI2lmZGVmIENPTkZJR19PTUFQX0RFQlVHX1BPV0VSRE9NQUlOCisjIGRlZmluZSBERUJVRworI2VuZGlmCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorCisjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgorCisjaW5jbHVkZSAiY20uaCIKKyNpbmNsdWRlICJjbS1yZWdiaXRzLTM0eHguaCIKKyNpbmNsdWRlICJwcm0uaCIKKyNpbmNsdWRlICJwcm0tcmVnYml0cy0zNHh4LmgiCisKKyNpbmNsdWRlIDxtYWNoL2NwdS5oPgorI2luY2x1ZGUgPG1hY2gvcG93ZXJkb21haW4uaD4KKyNpbmNsdWRlIDxtYWNoL2Nsb2NrZG9tYWluLmg+CisKKy8qIHB3cmRtX2xpc3QgY29udGFpbnMgYWxsIHJlZ2lzdGVyZWQgc3RydWN0IHBvd2VyZG9tYWlucyAqLworc3RhdGljIExJU1RfSEVBRChwd3JkbV9saXN0KTsKKworLyoKKyAqIHB3cmRtX3J3bG9jayBwcm90ZWN0cyBwd3JkbV9saXN0IGFkZCBhbmQgZGVsIG9wcyAtIGFsc28gcmV1c2VkIHRvCisgKiBwcm90ZWN0IHB3cmRtX2Nsa2Rtc1tdIGR1cmluZyBjbGtkbSBhZGQvZGVsIG9wcworICovCitzdGF0aWMgREVGSU5FX1JXTE9DSyhwd3JkbV9yd2xvY2spOworCisKKy8qIFByaXZhdGUgZnVuY3Rpb25zICovCisKK3N0YXRpYyB1MzIgcHJtX3JlYWRfbW9kX2JpdHNfc2hpZnQoczE2IGRvbWFpbiwgczE2IGlkeCwgdTMyIG1hc2spCit7CisJdTMyIHY7CisKKwl2ID0gcHJtX3JlYWRfbW9kX3JlZyhkb21haW4sIGlkeCk7CisJdiAmPSBtYXNrOworCXYgPj49IF9fZmZzKG1hc2spOworCisJcmV0dXJuIHY7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcG93ZXJkb21haW4gKl9wd3JkbV9sb29rdXAoY29uc3QgY2hhciAqbmFtZSkKK3sKKwlzdHJ1Y3QgcG93ZXJkb21haW4gKnB3cmRtLCAqdGVtcF9wd3JkbTsKKworCXB3cmRtID0gTlVMTDsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkodGVtcF9wd3JkbSwgJnB3cmRtX2xpc3QsIG5vZGUpIHsKKwkJaWYgKCFzdHJjbXAobmFtZSwgdGVtcF9wd3JkbS0+bmFtZSkpIHsKKwkJCXB3cmRtID0gdGVtcF9wd3JkbTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJcmV0dXJuIHB3cmRtOworfQorCisvKiBfcHdyZG1fZGVwc19sb29rdXAgLSBsb29rIHVwIHRoZSBzcGVjaWZpZWQgcG93ZXJkb21haW4gaW4gYSBwd3JkbSBsaXN0ICovCitzdGF0aWMgc3RydWN0IHBvd2VyZG9tYWluICpfcHdyZG1fZGVwc19sb29rdXAoc3RydWN0IHBvd2VyZG9tYWluICpwd3JkbSwKKwkJCQkJICAgICAgc3RydWN0IHB3cmRtX2RlcCAqZGVwcykKK3sKKwlzdHJ1Y3QgcHdyZG1fZGVwICpwZDsKKworCWlmICghcHdyZG0gfHwgIWRlcHMgfHwgIW9tYXBfY2hpcF9pcyhwd3JkbS0+b21hcF9jaGlwKSkKKwkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CisKKwlmb3IgKHBkID0gZGVwczsgcGQ7IHBkKyspIHsKKworCQlpZiAoIW9tYXBfY2hpcF9pcyhwZC0+b21hcF9jaGlwKSkKKwkJCWNvbnRpbnVlOworCisJCWlmICghcGQtPnB3cmRtICYmIHBkLT5wd3JkbV9uYW1lKQorCQkJcGQtPnB3cmRtID0gcHdyZG1fbG9va3VwKHBkLT5wd3JkbV9uYW1lKTsKKworCQlpZiAocGQtPnB3cmRtID09IHB3cmRtKQorCQkJYnJlYWs7CisKKwl9CisKKwlpZiAoIXBkKQorCQlyZXR1cm4gRVJSX1BUUigtRU5PRU5UKTsKKworCXJldHVybiBwZC0+cHdyZG07Cit9CisKKworLyogUHVibGljIGZ1bmN0aW9ucyAqLworCisvKioKKyAqIHB3cmRtX2luaXQgLSBzZXQgdXAgdGhlIHBvd2VyZG9tYWluIGxheWVyCisgKgorICogTG9vcCB0aHJvdWdoIHRoZSBsaXN0IG9mIHBvd2VyZG9tYWlucywgcmVnaXN0ZXJpbmcgYWxsIHRoYXQgYXJlCisgKiBhdmFpbGFibGUgb24gdGhlIGN1cnJlbnQgQ1BVLiBJZiBwd3JkbV9saXN0IGlzIHN1cHBsaWVkIGFuZCBub3QKKyAqIG51bGwsIGFsbCBvZiB0aGUgcmVmZXJlbmNlZCBwb3dlcmRvbWFpbnMgd2lsbCBiZSByZWdpc3RlcmVkLiAgTm8KKyAqIHJldHVybiB2YWx1ZS4KKyAqLwordm9pZCBwd3JkbV9pbml0KHN0cnVjdCBwb3dlcmRvbWFpbiAqKnB3cmRtX2xpc3QpCit7CisJc3RydWN0IHBvd2VyZG9tYWluICoqcCA9IE5VTEw7CisKKwlpZiAocHdyZG1fbGlzdCkKKwkJZm9yIChwID0gcHdyZG1fbGlzdDsgKnA7IHArKykKKwkJCXB3cmRtX3JlZ2lzdGVyKCpwKTsKK30KKworLyoqCisgKiBwd3JkbV9yZWdpc3RlciAtIHJlZ2lzdGVyIGEgcG93ZXJkb21haW4KKyAqIEBwd3JkbTogc3RydWN0IHBvd2VyZG9tYWluICogdG8gcmVnaXN0ZXIKKyAqCisgKiBBZGRzIGEgcG93ZXJkb21haW4gdG8gdGhlIGludGVybmFsIHBvd2VyZG9tYWluIGxpc3QuICBSZXR1cm5zCisgKiAtRUlOVkFMIGlmIGdpdmVuIGEgbnVsbCBwb2ludGVyLCAtRUVYSVNUIGlmIGEgcG93ZXJkb21haW4gaXMKKyAqIGFscmVhZHkgcmVnaXN0ZXJlZCBieSB0aGUgcHJvdmlkZWQgbmFtZSwgb3IgMCB1cG9uIHN1Y2Nlc3MuCisgKi8KK2ludCBwd3JkbV9yZWdpc3RlcihzdHJ1Y3QgcG93ZXJkb21haW4gKnB3cmRtKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHJldCA9IC1FSU5WQUw7CisKKwlpZiAoIXB3cmRtKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmICghb21hcF9jaGlwX2lzKHB3cmRtLT5vbWFwX2NoaXApKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXdyaXRlX2xvY2tfaXJxc2F2ZSgmcHdyZG1fcndsb2NrLCBmbGFncyk7CisJaWYgKF9wd3JkbV9sb29rdXAocHdyZG0tPm5hbWUpKSB7CisJCXJldCA9IC1FRVhJU1Q7CisJCWdvdG8gcHJfdW5sb2NrOworCX0KKworCWxpc3RfYWRkKCZwd3JkbS0+bm9kZSwgJnB3cmRtX2xpc3QpOworCisJcHJfZGVidWcoInBvd2VyZG9tYWluOiByZWdpc3RlcmVkICVzXG4iLCBwd3JkbS0+bmFtZSk7CisJcmV0ID0gMDsKKworcHJfdW5sb2NrOgorCXdyaXRlX3VubG9ja19pcnFyZXN0b3JlKCZwd3JkbV9yd2xvY2ssIGZsYWdzKTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qKgorICogcHdyZG1fdW5yZWdpc3RlciAtIHVucmVnaXN0ZXIgYSBwb3dlcmRvbWFpbgorICogQHB3cmRtOiBzdHJ1Y3QgcG93ZXJkb21haW4gKiB0byB1bnJlZ2lzdGVyCisgKgorICogUmVtb3ZlcyBhIHBvd2VyZG9tYWluIGZyb20gdGhlIGludGVybmFsIHBvd2VyZG9tYWluIGxpc3QuICBSZXR1cm5zCisgKiAtRUlOVkFMIGlmIHB3cmRtIGFyZ3VtZW50IGlzIE5VTEwuCisgKi8KK2ludCBwd3JkbV91bnJlZ2lzdGVyKHN0cnVjdCBwb3dlcmRvbWFpbiAqcHdyZG0pCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWlmICghcHdyZG0pCisJCXJldHVybiAtRUlOVkFMOworCisJd3JpdGVfbG9ja19pcnFzYXZlKCZwd3JkbV9yd2xvY2ssIGZsYWdzKTsKKwlsaXN0X2RlbCgmcHdyZG0tPm5vZGUpOworCXdyaXRlX3VubG9ja19pcnFyZXN0b3JlKCZwd3JkbV9yd2xvY2ssIGZsYWdzKTsKKworCXByX2RlYnVnKCJwb3dlcmRvbWFpbjogdW5yZWdpc3RlcmVkICVzXG4iLCBwd3JkbS0+bmFtZSk7CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBwd3JkbV9sb29rdXAgLSBsb29rIHVwIGEgcG93ZXJkb21haW4gYnkgbmFtZSwgcmV0dXJuIGEgcG9pbnRlcgorICogQG5hbWU6IG5hbWUgb2YgcG93ZXJkb21haW4KKyAqCisgKiBGaW5kIGEgcmVnaXN0ZXJlZCBwb3dlcmRvbWFpbiBieSBpdHMgbmFtZS4gIFJldHVybnMgYSBwb2ludGVyIHRvIHRoZQorICogc3RydWN0IHBvd2VyZG9tYWluIGlmIGZvdW5kLCBvciBOVUxMIG90aGVyd2lzZS4KKyAqLworc3RydWN0IHBvd2VyZG9tYWluICpwd3JkbV9sb29rdXAoY29uc3QgY2hhciAqbmFtZSkKK3sKKwlzdHJ1Y3QgcG93ZXJkb21haW4gKnB3cmRtOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpZiAoIW5hbWUpCisJCXJldHVybiBOVUxMOworCisJcmVhZF9sb2NrX2lycXNhdmUoJnB3cmRtX3J3bG9jaywgZmxhZ3MpOworCXB3cmRtID0gX3B3cmRtX2xvb2t1cChuYW1lKTsKKwlyZWFkX3VubG9ja19pcnFyZXN0b3JlKCZwd3JkbV9yd2xvY2ssIGZsYWdzKTsKKworCXJldHVybiBwd3JkbTsKK30KKworLyoqCisgKiBwd3JkbV9mb3JfZWFjaCAtIGNhbGwgZnVuY3Rpb24gb24gZWFjaCByZWdpc3RlcmVkIGNsb2NrZG9tYWluCisgKiBAZm46IGNhbGxiYWNrIGZ1bmN0aW9uICoKKyAqCisgKiBDYWxsIHRoZSBzdXBwbGllZCBmdW5jdGlvbiBmb3IgZWFjaCByZWdpc3RlcmVkIHBvd2VyZG9tYWluLiAgVGhlCisgKiBjYWxsYmFjayBmdW5jdGlvbiBjYW4gcmV0dXJuIGFueXRoaW5nIGJ1dCAwIHRvIGJhaWwgb3V0IGVhcmx5IGZyb20KKyAqIHRoZSBpdGVyYXRvci4gIFRoZSBjYWxsYmFjayBmdW5jdGlvbiBpcyBjYWxsZWQgd2l0aCB0aGUgcHdyZG1fcndsb2NrCisgKiBoZWxkIGZvciByZWFkaW5nLCBzbyBubyBwb3dlcmRvbWFpbiBzdHJ1Y3R1cmUgbWFuaXB1bGF0aW9uCisgKiBmdW5jdGlvbnMgc2hvdWxkIGJlIGNhbGxlZCBmcm9tIHRoZSBjYWxsYmFjaywgYWx0aG91Z2ggaGFyZHdhcmUKKyAqIHBvd2VyZG9tYWluIGNvbnRyb2wgZnVuY3Rpb25zIGFyZSBmaW5lLiAgUmV0dXJucyB0aGUgbGFzdCByZXR1cm4KKyAqIHZhbHVlIG9mIHRoZSBjYWxsYmFjayBmdW5jdGlvbiwgd2hpY2ggc2hvdWxkIGJlIDAgZm9yIHN1Y2Nlc3Mgb3IKKyAqIGFueXRoaW5nIGVsc2UgdG8gaW5kaWNhdGUgZmFpbHVyZTsgb3IgLUVJTlZBTCBpZiB0aGUgZnVuY3Rpb24KKyAqIHBvaW50ZXIgaXMgbnVsbC4KKyAqLworaW50IHB3cmRtX2Zvcl9lYWNoKGludCAoKmZuKShzdHJ1Y3QgcG93ZXJkb21haW4gKnB3cmRtKSkKK3sKKwlzdHJ1Y3QgcG93ZXJkb21haW4gKnRlbXBfcHdyZG07CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgcmV0ID0gMDsKKworCWlmICghZm4pCisJCXJldHVybiAtRUlOVkFMOworCisJcmVhZF9sb2NrX2lycXNhdmUoJnB3cmRtX3J3bG9jaywgZmxhZ3MpOworCWxpc3RfZm9yX2VhY2hfZW50cnkodGVtcF9wd3JkbSwgJnB3cmRtX2xpc3QsIG5vZGUpIHsKKwkJcmV0ID0gKCpmbikodGVtcF9wd3JkbSk7CisJCWlmIChyZXQpCisJCQlicmVhazsKKwl9CisJcmVhZF91bmxvY2tfaXJxcmVzdG9yZSgmcHdyZG1fcndsb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gcmV0OworfQorCisvKioKKyAqIHB3cmRtX2FkZF9jbGtkbSAtIGFkZCBhIGNsb2NrZG9tYWluIHRvIGEgcG93ZXJkb21haW4KKyAqIEBwd3JkbTogc3RydWN0IHBvd2VyZG9tYWluICogdG8gYWRkIHRoZSBjbG9ja2RvbWFpbiB0bworICogQGNsa2RtOiBzdHJ1Y3QgY2xvY2tkb21haW4gKiB0byBhc3NvY2lhdGUgd2l0aCBhIHBvd2VyZG9tYWluCisgKgorICogQXNzb2NpYXRlIHRoZSBjbG9ja2RvbWFpbiAnY2xrZG0nIHdpdGggYSBwb3dlcmRvbWFpbiAncHdyZG0nLiAgVGhpcworICogZW5hYmxlcyB0aGUgdXNlIG9mIHB3cmRtX2Zvcl9lYWNoX2Nsa2RtKCkuICBSZXR1cm5zIC1FSU5WQUwgaWYKKyAqIHByZXNlbnRlZCB3aXRoIGludmFsaWQgcG9pbnRlcnM7IC1FTk9NRU0gaWYgbWVtb3J5IGNvdWxkIG5vdCBiZSBhbGxvY2F0ZWQ7CisgKiBvciAwIHVwb24gc3VjY2Vzcy4KKyAqLworaW50IHB3cmRtX2FkZF9jbGtkbShzdHJ1Y3QgcG93ZXJkb21haW4gKnB3cmRtLCBzdHJ1Y3QgY2xvY2tkb21haW4gKmNsa2RtKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IGk7CisJaW50IHJldCA9IC1FSU5WQUw7CisKKwlpZiAoIXB3cmRtIHx8ICFjbGtkbSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlwcl9kZWJ1ZygicG93ZXJkb21haW46IGFzc29jaWF0aW5nIGNsb2NrZG9tYWluICVzIHdpdGggcG93ZXJkb21haW4gIgorCQkgIiVzXG4iLCBjbGtkbS0+bmFtZSwgcHdyZG0tPm5hbWUpOworCisJd3JpdGVfbG9ja19pcnFzYXZlKCZwd3JkbV9yd2xvY2ssIGZsYWdzKTsKKworCWZvciAoaSA9IDA7IGkgPCBQV1JETV9NQVhfQ0xLRE1TOyBpKyspIHsKKwkJaWYgKCFwd3JkbS0+cHdyZG1fY2xrZG1zW2ldKQorCQkJYnJlYWs7CisjaWZkZWYgREVCVUcKKwkJaWYgKHB3cmRtLT5wd3JkbV9jbGtkbXNbaV0gPT0gY2xrZG0pIHsKKwkJCXJldCA9IC1FSU5WQUw7CisJCQlnb3RvIHBhY19leGl0OworCQl9CisjZW5kaWYKKwl9CisKKwlpZiAoaSA9PSBQV1JETV9NQVhfQ0xLRE1TKSB7CisJCXByX2RlYnVnKCJwb3dlcmRvbWFpbjogaW5jcmVhc2UgUFdSRE1fTUFYX0NMS0RNUyBmb3IgIgorCQkJICJwd3JkbSAlcyBjbGtkbSAlc1xuIiwgcHdyZG0tPm5hbWUsIGNsa2RtLT5uYW1lKTsKKwkJV0FSTl9PTigxKTsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBwYWNfZXhpdDsKKwl9CisKKwlwd3JkbS0+cHdyZG1fY2xrZG1zW2ldID0gY2xrZG07CisKKwlyZXQgPSAwOworCitwYWNfZXhpdDoKKwl3cml0ZV91bmxvY2tfaXJxcmVzdG9yZSgmcHdyZG1fcndsb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gcmV0OworfQorCisvKioKKyAqIHB3cmRtX2RlbF9jbGtkbSAtIHJlbW92ZSBhIGNsb2NrZG9tYWluIGZyb20gYSBwb3dlcmRvbWFpbgorICogQHB3cmRtOiBzdHJ1Y3QgcG93ZXJkb21haW4gKiB0byBhZGQgdGhlIGNsb2NrZG9tYWluIHRvCisgKiBAY2xrZG06IHN0cnVjdCBjbG9ja2RvbWFpbiAqIHRvIGFzc29jaWF0ZSB3aXRoIGEgcG93ZXJkb21haW4KKyAqCisgKiBEaXNzb2NpYXRlIHRoZSBjbG9ja2RvbWFpbiAnY2xrZG0nIGZyb20gdGhlIHBvd2VyZG9tYWluCisgKiAncHdyZG0nLiBSZXR1cm5zIC1FSU5WQUwgaWYgcHJlc2VudGVkIHdpdGggaW52YWxpZCBwb2ludGVyczsKKyAqIC1FTk9FTlQgaWYgdGhlIGNsa2RtIHdhcyBub3QgYXNzb2NpYXRlZCB3aXRoIHRoZSBwb3dlcmRvbWFpbiwgb3IgMAorICogdXBvbiBzdWNjZXNzLgorICovCitpbnQgcHdyZG1fZGVsX2Nsa2RtKHN0cnVjdCBwb3dlcmRvbWFpbiAqcHdyZG0sIHN0cnVjdCBjbG9ja2RvbWFpbiAqY2xrZG0pCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgcmV0ID0gLUVJTlZBTDsKKwlpbnQgaTsKKworCWlmICghcHdyZG0gfHwgIWNsa2RtKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXByX2RlYnVnKCJwb3dlcmRvbWFpbjogZGlzc29jaWF0aW5nIGNsb2NrZG9tYWluICVzIGZyb20gcG93ZXJkb21haW4gIgorCQkgIiVzXG4iLCBjbGtkbS0+bmFtZSwgcHdyZG0tPm5hbWUpOworCisJd3JpdGVfbG9ja19pcnFzYXZlKCZwd3JkbV9yd2xvY2ssIGZsYWdzKTsKKworCWZvciAoaSA9IDA7IGkgPCBQV1JETV9NQVhfQ0xLRE1TOyBpKyspCisJCWlmIChwd3JkbS0+cHdyZG1fY2xrZG1zW2ldID09IGNsa2RtKQorCQkJYnJlYWs7CisKKwlpZiAoaSA9PSBQV1JETV9NQVhfQ0xLRE1TKSB7CisJCXByX2RlYnVnKCJwb3dlcmRvbWFpbjogY2xrZG0gJXMgbm90IGFzc29jaWF0ZWQgd2l0aCBwd3JkbSAiCisJCQkgIiVzID8hXG4iLCBjbGtkbS0+bmFtZSwgcHdyZG0tPm5hbWUpOworCQlyZXQgPSAtRU5PRU5UOworCQlnb3RvIHBkY19leGl0OworCX0KKworCXB3cmRtLT5wd3JkbV9jbGtkbXNbaV0gPSBOVUxMOworCisJcmV0ID0gMDsKKworcGRjX2V4aXQ6CisJd3JpdGVfdW5sb2NrX2lycXJlc3RvcmUoJnB3cmRtX3J3bG9jaywgZmxhZ3MpOworCisJcmV0dXJuIHJldDsKK30KKworLyoqCisgKiBwd3JkbV9mb3JfZWFjaF9jbGtkbSAtIGNhbGwgZnVuY3Rpb24gb24gZWFjaCBjbGtkbSBpbiBhIHB3cmRtCisgKiBAcHdyZG06IHN0cnVjdCBwb3dlcmRvbWFpbiAqIHRvIGl0ZXJhdGUgb3ZlcgorICogQGZuOiBjYWxsYmFjayBmdW5jdGlvbiAqCisgKgorICogQ2FsbCB0aGUgc3VwcGxpZWQgZnVuY3Rpb24gZm9yIGVhY2ggY2xvY2tkb21haW4gaW4gdGhlIHBvd2VyZG9tYWluCisgKiAncHdyZG0nLiAgVGhlIGNhbGxiYWNrIGZ1bmN0aW9uIGNhbiByZXR1cm4gYW55dGhpbmcgYnV0IDAgdG8gYmFpbAorICogb3V0IGVhcmx5IGZyb20gdGhlIGl0ZXJhdG9yLiAgVGhlIGNhbGxiYWNrIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aXRoCisgKiB0aGUgcHdyZG1fcndsb2NrIGhlbGQgZm9yIHJlYWRpbmcsIHNvIG5vIHBvd2VyZG9tYWluIHN0cnVjdHVyZQorICogbWFuaXB1bGF0aW9uIGZ1bmN0aW9ucyBzaG91bGQgYmUgY2FsbGVkIGZyb20gdGhlIGNhbGxiYWNrLCBhbHRob3VnaAorICogaGFyZHdhcmUgcG93ZXJkb21haW4gY29udHJvbCBmdW5jdGlvbnMgYXJlIGZpbmUuICBSZXR1cm5zIC1FSU5WQUwKKyAqIGlmIHByZXNlbnRlZCB3aXRoIGludmFsaWQgcG9pbnRlcnM7IG9yIHBhc3NlcyBhbG9uZyB0aGUgbGFzdCByZXR1cm4KKyAqIHZhbHVlIG9mIHRoZSBjYWxsYmFjayBmdW5jdGlvbiwgd2hpY2ggc2hvdWxkIGJlIDAgZm9yIHN1Y2Nlc3Mgb3IKKyAqIGFueXRoaW5nIGVsc2UgdG8gaW5kaWNhdGUgZmFpbHVyZS4KKyAqLworaW50IHB3cmRtX2Zvcl9lYWNoX2Nsa2RtKHN0cnVjdCBwb3dlcmRvbWFpbiAqcHdyZG0sCisJCQkgaW50ICgqZm4pKHN0cnVjdCBwb3dlcmRvbWFpbiAqcHdyZG0sCisJCQkJICAgc3RydWN0IGNsb2NrZG9tYWluICpjbGtkbSkpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgcmV0ID0gMDsKKwlpbnQgaTsKKworCWlmICghZm4pCisJCXJldHVybiAtRUlOVkFMOworCisJcmVhZF9sb2NrX2lycXNhdmUoJnB3cmRtX3J3bG9jaywgZmxhZ3MpOworCisJZm9yIChpID0gMDsgaSA8IFBXUkRNX01BWF9DTEtETVMgJiYgIXJldDsgaSsrKQorCQlyZXQgPSAoKmZuKShwd3JkbSwgcHdyZG0tPnB3cmRtX2Nsa2Rtc1tpXSk7CisKKwlyZWFkX3VubG9ja19pcnFyZXN0b3JlKCZwd3JkbV9yd2xvY2ssIGZsYWdzKTsKKworCXJldHVybiByZXQ7Cit9CisKKworLyoqCisgKiBwd3JkbV9hZGRfd2tkZXAgLSBhZGQgYSB3YWtldXAgZGVwZW5kZW5jeSBmcm9tIHB3cmRtMiB0byBwd3JkbTEKKyAqIEBwd3JkbTE6IHdha2UgdGhpcyBzdHJ1Y3QgcG93ZXJkb21haW4gKiB1cCAoZGVwZW5kZW50KQorICogQHB3cmRtMjogd2hlbiB0aGlzIHN0cnVjdCBwb3dlcmRvbWFpbiAqIHdha2VzIHVwIChzb3VyY2UpCisgKgorICogV2hlbiB0aGUgcG93ZXJkb21haW4gcmVwcmVzZW50ZWQgYnkgcHdyZG0yIHdha2VzIHVwIChkdWUgdG8gYW4KKyAqIGludGVycnVwdCksIHdha2UgdXAgcHdyZG0xLglJbXBsZW1lbnRlZCBpbiBoYXJkd2FyZSBvbiB0aGUgT01BUCwKKyAqIHRoaXMgZmVhdHVyZSBpcyBkZXNpZ25lZCB0byByZWR1Y2Ugd2FrZXVwIGxhdGVuY3kgb2YgdGhlIGRlcGVuZGVudAorICogcG93ZXJkb21haW4uICBSZXR1cm5zIC1FSU5WQUwgaWYgcHJlc2VudGVkIHdpdGggaW52YWxpZCBwb3dlcmRvbWFpbgorICogcG9pbnRlcnMsIC1FTk9FTlQgaWYgcHdyZG0yIGNhbm5vdCB3YWtlIHVwIHB3cmRtMSBpbiBoYXJkd2FyZSwgb3IKKyAqIDAgdXBvbiBzdWNjZXNzLgorICovCitpbnQgcHdyZG1fYWRkX3drZGVwKHN0cnVjdCBwb3dlcmRvbWFpbiAqcHdyZG0xLCBzdHJ1Y3QgcG93ZXJkb21haW4gKnB3cmRtMikKK3sKKwlzdHJ1Y3QgcG93ZXJkb21haW4gKnA7CisKKwlpZiAoIXB3cmRtMSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlwID0gX3B3cmRtX2RlcHNfbG9va3VwKHB3cmRtMiwgcHdyZG0xLT53a2RlcF9zcmNzKTsKKwlpZiAoSVNfRVJSKHApKSB7CisJCXByX2RlYnVnKCJwb3dlcmRvbWFpbjogaGFyZHdhcmUgY2Fubm90IHNldC9jbGVhciB3YWtlIHVwIG9mICIKKwkJCSAiJXMgd2hlbiAlcyB3YWtlcyB1cFxuIiwgcHdyZG0xLT5uYW1lLCBwd3JkbTItPm5hbWUpOworCQlyZXR1cm4gSVNfRVJSKHApOworCX0KKworCXByX2RlYnVnKCJwb3dlcmRvbWFpbjogaGFyZHdhcmUgd2lsbCB3YWtlIHVwICVzIHdoZW4gJXMgd2FrZXMgdXBcbiIsCisJCSBwd3JkbTEtPm5hbWUsIHB3cmRtMi0+bmFtZSk7CisKKwlwcm1fc2V0X21vZF9yZWdfYml0cygoMSA8PCBwd3JkbTItPmRlcF9iaXQpLAorCQkJICAgICBwd3JkbTEtPnByY21fb2ZmcywgUE1fV0tERVApOworCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogcHdyZG1fZGVsX3drZGVwIC0gcmVtb3ZlIGEgd2FrZXVwIGRlcGVuZGVuY3kgZnJvbSBwd3JkbTIgdG8gcHdyZG0xCisgKiBAcHdyZG0xOiB3YWtlIHRoaXMgc3RydWN0IHBvd2VyZG9tYWluICogdXAgKGRlcGVuZGVudCkKKyAqIEBwd3JkbTI6IHdoZW4gdGhpcyBzdHJ1Y3QgcG93ZXJkb21haW4gKiB3YWtlcyB1cCAoc291cmNlKQorICoKKyAqIFJlbW92ZSBhIHdha2V1cCBkZXBlbmRlbmN5IHRoYXQgY2F1c2VzIHB3cmRtMSB0byB3YWtlIHVwIHdoZW4gcHdyZG0yCisgKiB3YWtlcyB1cC4gIFJldHVybnMgLUVJTlZBTCBpZiBwcmVzZW50ZWQgd2l0aCBpbnZhbGlkIHBvd2VyZG9tYWluCisgKiBwb2ludGVycywgLUVOT0VOVCBpZiBwd3JkbTIgY2Fubm90IHdha2UgdXAgcHdyZG0xIGluIGhhcmR3YXJlLCBvcgorICogMCB1cG9uIHN1Y2Nlc3MuCisgKi8KK2ludCBwd3JkbV9kZWxfd2tkZXAoc3RydWN0IHBvd2VyZG9tYWluICpwd3JkbTEsIHN0cnVjdCBwb3dlcmRvbWFpbiAqcHdyZG0yKQoreworCXN0cnVjdCBwb3dlcmRvbWFpbiAqcDsKKworCWlmICghcHdyZG0xKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXAgPSBfcHdyZG1fZGVwc19sb29rdXAocHdyZG0yLCBwd3JkbTEtPndrZGVwX3NyY3MpOworCWlmIChJU19FUlIocCkpIHsKKwkJcHJfZGVidWcoInBvd2VyZG9tYWluOiBoYXJkd2FyZSBjYW5ub3Qgc2V0L2NsZWFyIHdha2UgdXAgb2YgIgorCQkJICIlcyB3aGVuICVzIHdha2VzIHVwXG4iLCBwd3JkbTEtPm5hbWUsIHB3cmRtMi0+bmFtZSk7CisJCXJldHVybiBJU19FUlIocCk7CisJfQorCisJcHJfZGVidWcoInBvd2VyZG9tYWluOiBoYXJkd2FyZSB3aWxsIG5vIGxvbmdlciB3YWtlIHVwICVzIGFmdGVyICVzICIKKwkJICJ3YWtlcyB1cFxuIiwgcHdyZG0xLT5uYW1lLCBwd3JkbTItPm5hbWUpOworCisJcHJtX2NsZWFyX21vZF9yZWdfYml0cygoMSA8PCBwd3JkbTItPmRlcF9iaXQpLAorCQkJICAgICAgIHB3cmRtMS0+cHJjbV9vZmZzLCBQTV9XS0RFUCk7CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBwd3JkbV9yZWFkX3drZGVwIC0gcmVhZCB3YWtldXAgZGVwZW5kZW5jeSBzdGF0ZSBmcm9tIHB3cmRtMiB0byBwd3JkbTEKKyAqIEBwd3JkbTE6IHdha2UgdGhpcyBzdHJ1Y3QgcG93ZXJkb21haW4gKiB1cCAoZGVwZW5kZW50KQorICogQHB3cmRtMjogd2hlbiB0aGlzIHN0cnVjdCBwb3dlcmRvbWFpbiAqIHdha2VzIHVwIChzb3VyY2UpCisgKgorICogUmV0dXJuIDEgaWYgYSBoYXJkd2FyZSB3YWtldXAgZGVwZW5kZW5jeSBleGlzdHMgd2hlcmVpbiBwd3JkbTEgd2lsbCBiZQorICogYXdva2VuIHdoZW4gcHdyZG0yIHdha2VzIHVwOyAwIGlmIGRlcGVuZGVuY3kgaXMgbm90IHNldDsgLUVJTlZBTAorICogaWYgZWl0aGVyIHBvd2VyZG9tYWluIHBvaW50ZXIgaXMgaW52YWxpZDsgb3IgLUVOT0VOVCBpZiB0aGUgaGFyZHdhcmUKKyAqIGlzIGluY2FwYWJsZS4KKyAqCisgKiBSRVZJU0lUOiBDdXJyZW50bHkgdGhpcyBmdW5jdGlvbiBvbmx5IHJlcHJlc2VudHMgc29mdHdhcmUtY29udHJvbGxhYmxlCisgKiB3YWtldXAgZGVwZW5kZW5jaWVzLiAgV2FrZXVwIGRlcGVuZGVuY2llcyBmaXhlZCBpbiBoYXJkd2FyZSBhcmUgbm90CisgKiB5ZXQgaGFuZGxlZCBoZXJlLgorICovCitpbnQgcHdyZG1fcmVhZF93a2RlcChzdHJ1Y3QgcG93ZXJkb21haW4gKnB3cmRtMSwgc3RydWN0IHBvd2VyZG9tYWluICpwd3JkbTIpCit7CisJc3RydWN0IHBvd2VyZG9tYWluICpwOworCisJaWYgKCFwd3JkbTEpCisJCXJldHVybiAtRUlOVkFMOworCisJcCA9IF9wd3JkbV9kZXBzX2xvb2t1cChwd3JkbTIsIHB3cmRtMS0+d2tkZXBfc3Jjcyk7CisJaWYgKElTX0VSUihwKSkgeworCQlwcl9kZWJ1ZygicG93ZXJkb21haW46IGhhcmR3YXJlIGNhbm5vdCBzZXQvY2xlYXIgd2FrZSB1cCBvZiAiCisJCQkgIiVzIHdoZW4gJXMgd2FrZXMgdXBcbiIsIHB3cmRtMS0+bmFtZSwgcHdyZG0yLT5uYW1lKTsKKwkJcmV0dXJuIElTX0VSUihwKTsKKwl9CisKKwlyZXR1cm4gcHJtX3JlYWRfbW9kX2JpdHNfc2hpZnQocHdyZG0xLT5wcmNtX29mZnMsIFBNX1dLREVQLAorCQkJCQkoMSA8PCBwd3JkbTItPmRlcF9iaXQpKTsKK30KKworLyoqCisgKiBwd3JkbV9hZGRfc2xlZXBkZXAgLSBhZGQgYSBzbGVlcCBkZXBlbmRlbmN5IGZyb20gcHdyZG0yIHRvIHB3cmRtMQorICogQHB3cmRtMTogcHJldmVudCB0aGlzIHN0cnVjdCBwb3dlcmRvbWFpbiAqIGZyb20gc2xlZXBpbmcgKGRlcGVuZGVudCkKKyAqIEBwd3JkbTI6IHdoZW4gdGhpcyBzdHJ1Y3QgcG93ZXJkb21haW4gKiBpcyBhY3RpdmUgKHNvdXJjZSkKKyAqCisgKiBQcmV2ZW50IHB3cmRtMSBmcm9tIGF1dG9tYXRpY2FsbHkgZ29pbmcgaW5hY3RpdmUgKGFuZCB0aGVuIHRvCisgKiByZXRlbnRpb24gb3Igb2ZmKSBpZiBwd3JkbTIgaXMgc3RpbGwgYWN0aXZlLgkgUmV0dXJucyAtRUlOVkFMIGlmCisgKiBwcmVzZW50ZWQgd2l0aCBpbnZhbGlkIHBvd2VyZG9tYWluIHBvaW50ZXJzIG9yIGNhbGxlZCBvbiBhIG1hY2hpbmUKKyAqIHRoYXQgZG9lcyBub3Qgc3VwcG9ydCBzb2Z0d2FyZS1jb25maWd1cmFibGUgaGFyZHdhcmUgc2xlZXAgZGVwZW5kZW5jaWVzLAorICogLUVOT0VOVCBpZiB0aGUgc3BlY2lmaWVkIGRlcGVuZGVuY3kgY2Fubm90IGJlIHNldCBpbiBoYXJkd2FyZSwgb3IKKyAqIDAgdXBvbiBzdWNjZXNzLgorICovCitpbnQgcHdyZG1fYWRkX3NsZWVwZGVwKHN0cnVjdCBwb3dlcmRvbWFpbiAqcHdyZG0xLCBzdHJ1Y3QgcG93ZXJkb21haW4gKnB3cmRtMikKK3sKKwlzdHJ1Y3QgcG93ZXJkb21haW4gKnA7CisKKwlpZiAoIXB3cmRtMSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoIWNwdV9pc19vbWFwMzR4eCgpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXAgPSBfcHdyZG1fZGVwc19sb29rdXAocHdyZG0yLCBwd3JkbTEtPnNsZWVwZGVwX3NyY3MpOworCWlmIChJU19FUlIocCkpIHsKKwkJcHJfZGVidWcoInBvd2VyZG9tYWluOiBoYXJkd2FyZSBjYW5ub3Qgc2V0L2NsZWFyIHNsZWVwICIKKwkJCSAiZGVwZW5kZW5jeSBhZmZlY3RpbmcgJXMgZnJvbSAlc1xuIiwgcHdyZG0xLT5uYW1lLAorCQkJIHB3cmRtMi0+bmFtZSk7CisJCXJldHVybiBJU19FUlIocCk7CisJfQorCisJcHJfZGVidWcoInBvd2VyZG9tYWluOiB3aWxsIHByZXZlbnQgJXMgZnJvbSBzbGVlcGluZyBpZiAlcyBpcyBhY3RpdmVcbiIsCisJCSBwd3JkbTEtPm5hbWUsIHB3cmRtMi0+bmFtZSk7CisKKwljbV9zZXRfbW9kX3JlZ19iaXRzKCgxIDw8IHB3cmRtMi0+ZGVwX2JpdCksCisJCQkgICAgcHdyZG0xLT5wcmNtX29mZnMsIE9NQVAzNDMwX0NNX1NMRUVQREVQKTsKKworCXJldHVybiAwOworfQorCisvKioKKyAqIHB3cmRtX2RlbF9zbGVlcGRlcCAtIHJlbW92ZSBhIHNsZWVwIGRlcGVuZGVuY3kgZnJvbSBwd3JkbTIgdG8gcHdyZG0xCisgKiBAcHdyZG0xOiBwcmV2ZW50IHRoaXMgc3RydWN0IHBvd2VyZG9tYWluICogZnJvbSBzbGVlcGluZyAoZGVwZW5kZW50KQorICogQHB3cmRtMjogd2hlbiB0aGlzIHN0cnVjdCBwb3dlcmRvbWFpbiAqIGlzIGFjdGl2ZSAoc291cmNlKQorICoKKyAqIEFsbG93IHB3cmRtMSB0byBhdXRvbWF0aWNhbGx5IGdvIGluYWN0aXZlIChhbmQgdGhlbiB0byByZXRlbnRpb24gb3IKKyAqIG9mZiksIGluZGVwZW5kZW50IG9mIHRoZSBhY3Rpdml0eSBzdGF0ZSBvZiBwd3JkbTIuICBSZXR1cm5zIC1FSU5WQUwKKyAqIGlmIHByZXNlbnRlZCB3aXRoIGludmFsaWQgcG93ZXJkb21haW4gcG9pbnRlcnMgb3IgY2FsbGVkIG9uIGEgbWFjaGluZQorICogdGhhdCBkb2VzIG5vdCBzdXBwb3J0IHNvZnR3YXJlLWNvbmZpZ3VyYWJsZSBoYXJkd2FyZSBzbGVlcCBkZXBlbmRlbmNpZXMsCisgKiAtRU5PRU5UIGlmIHRoZSBzcGVjaWZpZWQgZGVwZW5kZW5jeSBjYW5ub3QgYmUgY2xlYXJlZCBpbiBoYXJkd2FyZSwgb3IKKyAqIDAgdXBvbiBzdWNjZXNzLgorICovCitpbnQgcHdyZG1fZGVsX3NsZWVwZGVwKHN0cnVjdCBwb3dlcmRvbWFpbiAqcHdyZG0xLCBzdHJ1Y3QgcG93ZXJkb21haW4gKnB3cmRtMikKK3sKKwlzdHJ1Y3QgcG93ZXJkb21haW4gKnA7CisKKwlpZiAoIXB3cmRtMSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoIWNwdV9pc19vbWFwMzR4eCgpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXAgPSBfcHdyZG1fZGVwc19sb29rdXAocHdyZG0yLCBwd3JkbTEtPnNsZWVwZGVwX3NyY3MpOworCWlmIChJU19FUlIocCkpIHsKKwkJcHJfZGVidWcoInBvd2VyZG9tYWluOiBoYXJkd2FyZSBjYW5ub3Qgc2V0L2NsZWFyIHNsZWVwICIKKwkJCSAiZGVwZW5kZW5jeSBhZmZlY3RpbmcgJXMgZnJvbSAlc1xuIiwgcHdyZG0xLT5uYW1lLAorCQkJIHB3cmRtMi0+bmFtZSk7CisJCXJldHVybiBJU19FUlIocCk7CisJfQorCisJcHJfZGVidWcoInBvd2VyZG9tYWluOiB3aWxsIG5vIGxvbmdlciBwcmV2ZW50ICVzIGZyb20gc2xlZXBpbmcgaWYgIgorCQkgIiVzIGlzIGFjdGl2ZVxuIiwgcHdyZG0xLT5uYW1lLCBwd3JkbTItPm5hbWUpOworCisJY21fY2xlYXJfbW9kX3JlZ19iaXRzKCgxIDw8IHB3cmRtMi0+ZGVwX2JpdCksCisJCQkgICAgICBwd3JkbTEtPnByY21fb2ZmcywgT01BUDM0MzBfQ01fU0xFRVBERVApOworCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogcHdyZG1fcmVhZF9zbGVlcGRlcCAtIHJlYWQgc2xlZXAgZGVwZW5kZW5jeSBzdGF0ZSBmcm9tIHB3cmRtMiB0byBwd3JkbTEKKyAqIEBwd3JkbTE6IHByZXZlbnQgdGhpcyBzdHJ1Y3QgcG93ZXJkb21haW4gKiBmcm9tIHNsZWVwaW5nIChkZXBlbmRlbnQpCisgKiBAcHdyZG0yOiB3aGVuIHRoaXMgc3RydWN0IHBvd2VyZG9tYWluICogaXMgYWN0aXZlIChzb3VyY2UpCisgKgorICogUmV0dXJuIDEgaWYgYSBoYXJkd2FyZSBzbGVlcCBkZXBlbmRlbmN5IGV4aXN0cyB3aGVyZWluIHB3cmRtMSB3aWxsCisgKiBub3QgYmUgYWxsb3dlZCB0byBhdXRvbWF0aWNhbGx5IGdvIGluYWN0aXZlIGlmIHB3cmRtMiBpcyBhY3RpdmU7CisgKiAwIGlmIHB3cmRtMSdzIGF1dG9tYXRpYyBwb3dlciBzdGF0ZSBpbmFjdGl2aXR5IHRyYW5zaXRpb24gaXMgaW5kZXBlbmRlbnQKKyAqIG9mIHB3cmRtMidzOyAtRUlOVkFMIGlmIGVpdGhlciBwb3dlcmRvbWFpbiBwb2ludGVyIGlzIGludmFsaWQgb3IgY2FsbGVkCisgKiBvbiBhIG1hY2hpbmUgdGhhdCBkb2VzIG5vdCBzdXBwb3J0IHNvZnR3YXJlLWNvbmZpZ3VyYWJsZSBoYXJkd2FyZSBzbGVlcAorICogZGVwZW5kZW5jaWVzOyBvciAtRU5PRU5UIGlmIHRoZSBoYXJkd2FyZSBpcyBpbmNhcGFibGUuCisgKgorICogUkVWSVNJVDogQ3VycmVudGx5IHRoaXMgZnVuY3Rpb24gb25seSByZXByZXNlbnRzIHNvZnR3YXJlLWNvbnRyb2xsYWJsZQorICogc2xlZXAgZGVwZW5kZW5jaWVzLglTbGVlcCBkZXBlbmRlbmNpZXMgZml4ZWQgaW4gaGFyZHdhcmUgYXJlIG5vdAorICogeWV0IGhhbmRsZWQgaGVyZS4KKyAqLworaW50IHB3cmRtX3JlYWRfc2xlZXBkZXAoc3RydWN0IHBvd2VyZG9tYWluICpwd3JkbTEsIHN0cnVjdCBwb3dlcmRvbWFpbiAqcHdyZG0yKQoreworCXN0cnVjdCBwb3dlcmRvbWFpbiAqcDsKKworCWlmICghcHdyZG0xKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmICghY3B1X2lzX29tYXAzNHh4KCkpCisJCXJldHVybiAtRUlOVkFMOworCisJcCA9IF9wd3JkbV9kZXBzX2xvb2t1cChwd3JkbTIsIHB3cmRtMS0+c2xlZXBkZXBfc3Jjcyk7CisJaWYgKElTX0VSUihwKSkgeworCQlwcl9kZWJ1ZygicG93ZXJkb21haW46IGhhcmR3YXJlIGNhbm5vdCBzZXQvY2xlYXIgc2xlZXAgIgorCQkJICJkZXBlbmRlbmN5IGFmZmVjdGluZyAlcyBmcm9tICVzXG4iLCBwd3JkbTEtPm5hbWUsCisJCQkgcHdyZG0yLT5uYW1lKTsKKwkJcmV0dXJuIElTX0VSUihwKTsKKwl9CisKKwlyZXR1cm4gcHJtX3JlYWRfbW9kX2JpdHNfc2hpZnQocHdyZG0xLT5wcmNtX29mZnMsIE9NQVAzNDMwX0NNX1NMRUVQREVQLAorCQkJCQkoMSA8PCBwd3JkbTItPmRlcF9iaXQpKTsKK30KKworLyoqCisgKiBwd3JkbV9nZXRfbWVtX2JhbmtfY291bnQgLSBnZXQgbnVtYmVyIG9mIG1lbW9yeSBiYW5rcyBpbiB0aGlzIHBvd2VyZG9tYWluCisgKiBAcHdyZG06IHN0cnVjdCBwb3dlcmRvbWFpbiAqCisgKgorICogUmV0dXJuIHRoZSBudW1iZXIgb2YgY29udHJvbGxhYmxlIG1lbW9yeSBiYW5rcyBpbiBwb3dlcmRvbWFpbiBwd3JkbSwKKyAqIHN0YXJ0aW5nIHdpdGggMS4gIFJldHVybnMgLUVJTlZBTCBpZiB0aGUgcG93ZXJkb21haW4gcG9pbnRlciBpcyBudWxsLgorICovCitpbnQgcHdyZG1fZ2V0X21lbV9iYW5rX2NvdW50KHN0cnVjdCBwb3dlcmRvbWFpbiAqcHdyZG0pCit7CisJaWYgKCFwd3JkbSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXR1cm4gcHdyZG0tPmJhbmtzOworfQorCisvKioKKyAqIHB3cmRtX3NldF9uZXh0X3B3cnN0IC0gc2V0IG5leHQgcG93ZXJkb21haW4gcG93ZXIgc3RhdGUKKyAqIEBwd3JkbTogc3RydWN0IHBvd2VyZG9tYWluICogdG8gc2V0CisgKiBAcHdyc3Q6IG9uZSBvZiB0aGUgUFdSRE1fUE9XRVJfKiBtYWNyb3MKKyAqCisgKiBTZXQgdGhlIHBvd2VyZG9tYWluIHB3cmRtJ3MgbmV4dCBwb3dlciBzdGF0ZSB0byBwd3JzdC4gIFRoZSBwb3dlcmRvbWFpbgorICogbWF5IG5vdCBlbnRlciB0aGlzIHN0YXRlIGltbWVkaWF0ZWx5IGlmIHRoZSBwcmVjb25kaXRpb25zIGZvciB0aGlzIHN0YXRlCisgKiBoYXZlIG5vdCBiZWVuIHNhdGlzZmllZC4gIFJldHVybnMgLUVJTlZBTCBpZiB0aGUgcG93ZXJkb21haW4gcG9pbnRlciBpcworICogbnVsbCBvciBpZiB0aGUgcG93ZXIgc3RhdGUgaXMgaW52YWxpZCBmb3IgdGhlIHBvd2VyZG9taW4sIG9yIHJldHVybnMgMAorICogdXBvbiBzdWNjZXNzLgorICovCitpbnQgcHdyZG1fc2V0X25leHRfcHdyc3Qoc3RydWN0IHBvd2VyZG9tYWluICpwd3JkbSwgdTggcHdyc3QpCit7CisJaWYgKCFwd3JkbSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoIShwd3JkbS0+cHdyc3RzICYgKDEgPDwgcHdyc3QpKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlwcl9kZWJ1ZygicG93ZXJkb21haW46IHNldHRpbmcgbmV4dCBwb3dlcnN0YXRlIGZvciAlcyB0byAlMHhcbiIsCisJCSBwd3JkbS0+bmFtZSwgcHdyc3QpOworCisJcHJtX3Jtd19tb2RfcmVnX2JpdHMoT01BUF9QT1dFUlNUQVRFX01BU0ssCisJCQkgICAgIChwd3JzdCA8PCBPTUFQX1BPV0VSU1RBVEVfU0hJRlQpLAorCQkJICAgICBwd3JkbS0+cHJjbV9vZmZzLCBQTV9QV1NUQ1RSTCk7CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBwd3JkbV9yZWFkX25leHRfcHdyc3QgLSBnZXQgbmV4dCBwb3dlcmRvbWFpbiBwb3dlciBzdGF0ZQorICogQHB3cmRtOiBzdHJ1Y3QgcG93ZXJkb21haW4gKiB0byBnZXQgcG93ZXIgc3RhdGUKKyAqCisgKiBSZXR1cm4gdGhlIHBvd2VyZG9tYWluIHB3cmRtJ3MgbmV4dCBwb3dlciBzdGF0ZS4gIFJldHVybnMgLUVJTlZBTAorICogaWYgdGhlIHBvd2VyZG9tYWluIHBvaW50ZXIgaXMgbnVsbCBvciByZXR1cm5zIHRoZSBuZXh0IHBvd2VyIHN0YXRlCisgKiB1cG9uIHN1Y2Nlc3MuCisgKi8KK2ludCBwd3JkbV9yZWFkX25leHRfcHdyc3Qoc3RydWN0IHBvd2VyZG9tYWluICpwd3JkbSkKK3sKKwlpZiAoIXB3cmRtKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJldHVybiBwcm1fcmVhZF9tb2RfYml0c19zaGlmdChwd3JkbS0+cHJjbV9vZmZzLCBQTV9QV1NUQ1RSTCwKKwkJCQkJT01BUF9QT1dFUlNUQVRFX01BU0spOworfQorCisvKioKKyAqIHB3cmRtX3JlYWRfcHdyc3QgLSBnZXQgY3VycmVudCBwb3dlcmRvbWFpbiBwb3dlciBzdGF0ZQorICogQHB3cmRtOiBzdHJ1Y3QgcG93ZXJkb21haW4gKiB0byBnZXQgcG93ZXIgc3RhdGUKKyAqCisgKiBSZXR1cm4gdGhlIHBvd2VyZG9tYWluIHB3cmRtJ3MgY3VycmVudCBwb3dlciBzdGF0ZS4JUmV0dXJucyAtRUlOVkFMCisgKiBpZiB0aGUgcG93ZXJkb21haW4gcG9pbnRlciBpcyBudWxsIG9yIHJldHVybnMgdGhlIGN1cnJlbnQgcG93ZXIgc3RhdGUKKyAqIHVwb24gc3VjY2Vzcy4KKyAqLworaW50IHB3cmRtX3JlYWRfcHdyc3Qoc3RydWN0IHBvd2VyZG9tYWluICpwd3JkbSkKK3sKKwlpZiAoIXB3cmRtKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJldHVybiBwcm1fcmVhZF9tb2RfYml0c19zaGlmdChwd3JkbS0+cHJjbV9vZmZzLCBQTV9QV1NUU1QsCisJCQkJCU9NQVBfUE9XRVJTVEFURVNUX01BU0spOworfQorCisvKioKKyAqIHB3cmRtX3JlYWRfcHJldl9wd3JzdCAtIGdldCBwcmV2aW91cyBwb3dlcmRvbWFpbiBwb3dlciBzdGF0ZQorICogQHB3cmRtOiBzdHJ1Y3QgcG93ZXJkb21haW4gKiB0byBnZXQgcHJldmlvdXMgcG93ZXIgc3RhdGUKKyAqCisgKiBSZXR1cm4gdGhlIHBvd2VyZG9tYWluIHB3cmRtJ3MgcHJldmlvdXMgcG93ZXIgc3RhdGUuICBSZXR1cm5zIC1FSU5WQUwKKyAqIGlmIHRoZSBwb3dlcmRvbWFpbiBwb2ludGVyIGlzIG51bGwgb3IgcmV0dXJucyB0aGUgcHJldmlvdXMgcG93ZXIgc3RhdGUKKyAqIHVwb24gc3VjY2Vzcy4KKyAqLworaW50IHB3cmRtX3JlYWRfcHJldl9wd3JzdChzdHJ1Y3QgcG93ZXJkb21haW4gKnB3cmRtKQoreworCWlmICghcHdyZG0pCisJCXJldHVybiAtRUlOVkFMOworCisJcmV0dXJuIHBybV9yZWFkX21vZF9iaXRzX3NoaWZ0KHB3cmRtLT5wcmNtX29mZnMsIE9NQVAzNDMwX1BNX1BSRVBXU1RTVCwKKwkJCQkJT01BUDM0MzBfTEFTVFBPV0VSU1RBVEVFTlRFUkVEX01BU0spOworfQorCisvKioKKyAqIHB3cmRtX3NldF9sb2dpY19yZXRzdCAtIHNldCBwb3dlcmRvbWFpbiBsb2dpYyBwb3dlciBzdGF0ZSB1cG9uIHJldGVudGlvbgorICogQHB3cmRtOiBzdHJ1Y3QgcG93ZXJkb21haW4gKiB0byBzZXQKKyAqIEBwd3JzdDogb25lIG9mIHRoZSBQV1JETV9QT1dFUl8qIG1hY3JvcworICoKKyAqIFNldCB0aGUgbmV4dCBwb3dlciBzdGF0ZSB0aGF0IHRoZSBsb2dpYyBwb3J0aW9uIG9mIHRoZSBwb3dlcmRvbWFpbgorICogcHdyZG0gd2lsbCBlbnRlciB3aGVuIHRoZSBwb3dlcmRvbWFpbiBlbnRlcnMgcmV0ZW50aW9uLiAgVGhpcyB3aWxsCisgKiBiZSBlaXRoZXIgUkVURU5USU9OIG9yIE9GRiwgaWYgc3VwcG9ydGVkLiAgUmV0dXJucyAtRUlOVkFMIGlmIHRoZQorICogcG93ZXJkb21haW4gcG9pbnRlciBpcyBudWxsIG9yIHRoZSB0YXJnZXQgcG93ZXIgc3RhdGUgaXMgbm90IG5vdAorICogc3VwcG9ydGVkLCBvciByZXR1cm5zIDAgdXBvbiBzdWNjZXNzLgorICovCitpbnQgcHdyZG1fc2V0X2xvZ2ljX3JldHN0KHN0cnVjdCBwb3dlcmRvbWFpbiAqcHdyZG0sIHU4IHB3cnN0KQoreworCWlmICghcHdyZG0pCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKCEocHdyZG0tPnB3cnN0c19sb2dpY19yZXQgJiAoMSA8PCBwd3JzdCkpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXByX2RlYnVnKCJwb3dlcmRvbWFpbjogc2V0dGluZyBuZXh0IGxvZ2ljIHBvd2Vyc3RhdGUgZm9yICVzIHRvICUweFxuIiwKKwkJIHB3cmRtLT5uYW1lLCBwd3JzdCk7CisKKwkvKgorCSAqIFRoZSByZWdpc3RlciBiaXQgbmFtZXMgYmVsb3cgbWF5IG5vdCBjb3JyZXNwb25kIHRvIHRoZQorCSAqIGFjdHVhbCBuYW1lcyBvZiB0aGUgYml0cyBpbiBlYWNoIHBvd2VyZG9tYWluJ3MgcmVnaXN0ZXIsCisJICogYnV0IHRoZSB0eXBlIG9mIHZhbHVlIHJldHVybmVkIGlzIHRoZSBzYW1lIGZvciBlYWNoCisJICogcG93ZXJkb21haW4uCisJICovCisJcHJtX3Jtd19tb2RfcmVnX2JpdHMoT01BUDM0MzBfTE9HSUNMMUNBQ0hFUkVUU1RBVEUsCisJCQkgICAgIChwd3JzdCA8PCBfX2ZmcyhPTUFQMzQzMF9MT0dJQ0wxQ0FDSEVSRVRTVEFURSkpLAorCQkJICAgICBwd3JkbS0+cHJjbV9vZmZzLCBQTV9QV1NUQ1RSTCk7CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBwd3JkbV9zZXRfbWVtX29uc3QgLSBzZXQgbWVtb3J5IHBvd2VyIHN0YXRlIHdoaWxlIHBvd2VyZG9tYWluIE9OCisgKiBAcHdyZG06IHN0cnVjdCBwb3dlcmRvbWFpbiAqIHRvIHNldAorICogQGJhbms6IG1lbW9yeSBiYW5rIG51bWJlciB0byBzZXQgKDAtMykKKyAqIEBwd3JzdDogb25lIG9mIHRoZSBQV1JETV9QT1dFUl8qIG1hY3JvcworICoKKyAqIFNldCB0aGUgbmV4dCBwb3dlciBzdGF0ZSB0aGF0IG1lbW9yeSBiYW5rIHggb2YgdGhlIHBvd2VyZG9tYWluCisgKiBwd3JkbSB3aWxsIGVudGVyIHdoZW4gdGhlIHBvd2VyZG9tYWluIGVudGVycyB0aGUgT04gc3RhdGUuICBCYW5rCisgKiB3aWxsIGJlIGEgbnVtYmVyIGZyb20gMCB0byAzLCBhbmQgcmVwcmVzZW50cyBkaWZmZXJlbnQgdHlwZXMgb2YKKyAqIG1lbW9yeSwgZGVwZW5kaW5nIG9uIHRoZSBwb3dlcmRvbWFpbi4gIFJldHVybnMgLUVJTlZBTCBpZiB0aGUKKyAqIHBvd2VyZG9tYWluIHBvaW50ZXIgaXMgbnVsbCBvciB0aGUgdGFyZ2V0IHBvd2VyIHN0YXRlIGlzIG5vdCBub3QKKyAqIHN1cHBvcnRlZCBmb3IgdGhpcyBtZW1vcnkgYmFuaywgLUVFWElTVCBpZiB0aGUgdGFyZ2V0IG1lbW9yeSBiYW5rCisgKiBkb2VzIG5vdCBleGlzdCBvciBpcyBub3QgY29udHJvbGxhYmxlLCBvciByZXR1cm5zIDAgdXBvbiBzdWNjZXNzLgorICovCitpbnQgcHdyZG1fc2V0X21lbV9vbnN0KHN0cnVjdCBwb3dlcmRvbWFpbiAqcHdyZG0sIHU4IGJhbmssIHU4IHB3cnN0KQoreworCXUzMiBtOworCisJaWYgKCFwd3JkbSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAocHdyZG0tPmJhbmtzIDwgKGJhbmsgKyAxKSkKKwkJcmV0dXJuIC1FRVhJU1Q7CisKKwlpZiAoIShwd3JkbS0+cHdyc3RzX21lbV9vbltiYW5rXSAmICgxIDw8IHB3cnN0KSkpCisJCXJldHVybiAtRUlOVkFMOworCisJcHJfZGVidWcoInBvd2VyZG9tYWluOiBzZXR0aW5nIG5leHQgbWVtb3J5IHBvd2Vyc3RhdGUgZm9yIGRvbWFpbiAlcyAiCisJCSAiYmFuayAlMHggd2hpbGUgcHdyZG0tT04gdG8gJTB4XG4iLCBwd3JkbS0+bmFtZSwgYmFuaywgcHdyc3QpOworCisJLyoKKwkgKiBUaGUgcmVnaXN0ZXIgYml0IG5hbWVzIGJlbG93IG1heSBub3QgY29ycmVzcG9uZCB0byB0aGUKKwkgKiBhY3R1YWwgbmFtZXMgb2YgdGhlIGJpdHMgaW4gZWFjaCBwb3dlcmRvbWFpbidzIHJlZ2lzdGVyLAorCSAqIGJ1dCB0aGUgdHlwZSBvZiB2YWx1ZSByZXR1cm5lZCBpcyB0aGUgc2FtZSBmb3IgZWFjaAorCSAqIHBvd2VyZG9tYWluLgorCSAqLworCXN3aXRjaCAoYmFuaykgeworCWNhc2UgMDoKKwkJbSA9IE9NQVAzNDMwX1NIQVJFREwxQ0FDSEVGTEFUT05TVEFURV9NQVNLOworCQlicmVhazsKKwljYXNlIDE6CisJCW0gPSBPTUFQMzQzMF9MMUZMQVRNRU1PTlNUQVRFX01BU0s7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJbSA9IE9NQVAzNDMwX1NIQVJFREwyQ0FDSEVGTEFUT05TVEFURV9NQVNLOworCQlicmVhazsKKwljYXNlIDM6CisJCW0gPSBPTUFQMzQzMF9MMkZMQVRNRU1PTlNUQVRFX01BU0s7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCVdBUk5fT04oMSk7IC8qIHNob3VsZCBuZXZlciBoYXBwZW4gKi8KKwkJcmV0dXJuIC1FRVhJU1Q7CisJfQorCisJcHJtX3Jtd19tb2RfcmVnX2JpdHMobSwgKHB3cnN0IDw8IF9fZmZzKG0pKSwKKwkJCSAgICAgcHdyZG0tPnByY21fb2ZmcywgUE1fUFdTVENUUkwpOworCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogcHdyZG1fc2V0X21lbV9yZXRzdCAtIHNldCBtZW1vcnkgcG93ZXIgc3RhdGUgd2hpbGUgcG93ZXJkb21haW4gaW4gUkVUCisgKiBAcHdyZG06IHN0cnVjdCBwb3dlcmRvbWFpbiAqIHRvIHNldAorICogQGJhbms6IG1lbW9yeSBiYW5rIG51bWJlciB0byBzZXQgKDAtMykKKyAqIEBwd3JzdDogb25lIG9mIHRoZSBQV1JETV9QT1dFUl8qIG1hY3JvcworICoKKyAqIFNldCB0aGUgbmV4dCBwb3dlciBzdGF0ZSB0aGF0IG1lbW9yeSBiYW5rIHggb2YgdGhlIHBvd2VyZG9tYWluCisgKiBwd3JkbSB3aWxsIGVudGVyIHdoZW4gdGhlIHBvd2VyZG9tYWluIGVudGVycyB0aGUgUkVURU5USU9OIHN0YXRlLgorICogQmFuayB3aWxsIGJlIGEgbnVtYmVyIGZyb20gMCB0byAzLCBhbmQgcmVwcmVzZW50cyBkaWZmZXJlbnQgdHlwZXMKKyAqIG9mIG1lbW9yeSwgZGVwZW5kaW5nIG9uIHRoZSBwb3dlcmRvbWFpbi4gIHB3cnN0IHdpbGwgYmUgZWl0aGVyCisgKiBSRVRFTlRJT04gb3IgT0ZGLCBpZiBzdXBwb3J0ZWQuIFJldHVybnMgLUVJTlZBTCBpZiB0aGUgcG93ZXJkb21haW4KKyAqIHBvaW50ZXIgaXMgbnVsbCBvciB0aGUgdGFyZ2V0IHBvd2VyIHN0YXRlIGlzIG5vdCBub3Qgc3VwcG9ydGVkIGZvcgorICogdGhpcyBtZW1vcnkgYmFuaywgLUVFWElTVCBpZiB0aGUgdGFyZ2V0IG1lbW9yeSBiYW5rIGRvZXMgbm90IGV4aXN0CisgKiBvciBpcyBub3QgY29udHJvbGxhYmxlLCBvciByZXR1cm5zIDAgdXBvbiBzdWNjZXNzLgorICovCitpbnQgcHdyZG1fc2V0X21lbV9yZXRzdChzdHJ1Y3QgcG93ZXJkb21haW4gKnB3cmRtLCB1OCBiYW5rLCB1OCBwd3JzdCkKK3sKKwl1MzIgbTsKKworCWlmICghcHdyZG0pCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKHB3cmRtLT5iYW5rcyA8IChiYW5rICsgMSkpCisJCXJldHVybiAtRUVYSVNUOworCisJaWYgKCEocHdyZG0tPnB3cnN0c19tZW1fcmV0W2JhbmtdICYgKDEgPDwgcHdyc3QpKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlwcl9kZWJ1ZygicG93ZXJkb21haW46IHNldHRpbmcgbmV4dCBtZW1vcnkgcG93ZXJzdGF0ZSBmb3IgZG9tYWluICVzICIKKwkJICJiYW5rICUweCB3aGlsZSBwd3JkbS1SRVQgdG8gJTB4XG4iLCBwd3JkbS0+bmFtZSwgYmFuaywgcHdyc3QpOworCisJLyoKKwkgKiBUaGUgcmVnaXN0ZXIgYml0IG5hbWVzIGJlbG93IG1heSBub3QgY29ycmVzcG9uZCB0byB0aGUKKwkgKiBhY3R1YWwgbmFtZXMgb2YgdGhlIGJpdHMgaW4gZWFjaCBwb3dlcmRvbWFpbidzIHJlZ2lzdGVyLAorCSAqIGJ1dCB0aGUgdHlwZSBvZiB2YWx1ZSByZXR1cm5lZCBpcyB0aGUgc2FtZSBmb3IgZWFjaAorCSAqIHBvd2VyZG9tYWluLgorCSAqLworCXN3aXRjaCAoYmFuaykgeworCWNhc2UgMDoKKwkJbSA9IE9NQVAzNDMwX1NIQVJFREwxQ0FDSEVGTEFUUkVUU1RBVEU7CisJCWJyZWFrOworCWNhc2UgMToKKwkJbSA9IE9NQVAzNDMwX0wxRkxBVE1FTVJFVFNUQVRFOworCQlicmVhazsKKwljYXNlIDI6CisJCW0gPSBPTUFQMzQzMF9TSEFSRURMMkNBQ0hFRkxBVFJFVFNUQVRFOworCQlicmVhazsKKwljYXNlIDM6CisJCW0gPSBPTUFQMzQzMF9MMkZMQVRNRU1SRVRTVEFURTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJV0FSTl9PTigxKTsgLyogc2hvdWxkIG5ldmVyIGhhcHBlbiAqLworCQlyZXR1cm4gLUVFWElTVDsKKwl9CisKKwlwcm1fcm13X21vZF9yZWdfYml0cyhtLCAocHdyc3QgPDwgX19mZnMobSkpLCBwd3JkbS0+cHJjbV9vZmZzLAorCQkJICAgICBQTV9QV1NUQ1RSTCk7CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBwd3JkbV9yZWFkX2xvZ2ljX3B3cnN0IC0gZ2V0IGN1cnJlbnQgcG93ZXJkb21haW4gbG9naWMgcmV0ZW50aW9uIHBvd2VyIHN0YXRlCisgKiBAcHdyZG06IHN0cnVjdCBwb3dlcmRvbWFpbiAqIHRvIGdldCBjdXJyZW50IGxvZ2ljIHJldGVudGlvbiBwb3dlciBzdGF0ZQorICoKKyAqIFJldHVybiB0aGUgY3VycmVudCBwb3dlciBzdGF0ZSB0aGF0IHRoZSBsb2dpYyBwb3J0aW9uIG9mCisgKiBwb3dlcmRvbWFpbiBwd3JkbSB3aWxsIGVudGVyCisgKiBSZXR1cm5zIC1FSU5WQUwgaWYgdGhlIHBvd2VyZG9tYWluIHBvaW50ZXIgaXMgbnVsbCBvciByZXR1cm5zIHRoZQorICogY3VycmVudCBsb2dpYyByZXRlbnRpb24gcG93ZXIgc3RhdGUgdXBvbiBzdWNjZXNzLgorICovCitpbnQgcHdyZG1fcmVhZF9sb2dpY19wd3JzdChzdHJ1Y3QgcG93ZXJkb21haW4gKnB3cmRtKQoreworCWlmICghcHdyZG0pCisJCXJldHVybiAtRUlOVkFMOworCisJcmV0dXJuIHBybV9yZWFkX21vZF9iaXRzX3NoaWZ0KHB3cmRtLT5wcmNtX29mZnMsIFBNX1BXU1RTVCwKKwkJCQkJT01BUDM0MzBfTE9HSUNTVEFURVNUKTsKK30KKworLyoqCisgKiBwd3JkbV9yZWFkX3ByZXZfbG9naWNfcHdyc3QgLSBnZXQgcHJldmlvdXMgcG93ZXJkb21haW4gbG9naWMgcG93ZXIgc3RhdGUKKyAqIEBwd3JkbTogc3RydWN0IHBvd2VyZG9tYWluICogdG8gZ2V0IHByZXZpb3VzIGxvZ2ljIHBvd2VyIHN0YXRlCisgKgorICogUmV0dXJuIHRoZSBwb3dlcmRvbWFpbiBwd3JkbSdzIGxvZ2ljIHBvd2VyIHN0YXRlLiAgUmV0dXJucyAtRUlOVkFMCisgKiBpZiB0aGUgcG93ZXJkb21haW4gcG9pbnRlciBpcyBudWxsIG9yIHJldHVybnMgdGhlIHByZXZpb3VzIGxvZ2ljCisgKiBwb3dlciBzdGF0ZSB1cG9uIHN1Y2Nlc3MuCisgKi8KK2ludCBwd3JkbV9yZWFkX3ByZXZfbG9naWNfcHdyc3Qoc3RydWN0IHBvd2VyZG9tYWluICpwd3JkbSkKK3sKKwlpZiAoIXB3cmRtKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCS8qCisJICogVGhlIHJlZ2lzdGVyIGJpdCBuYW1lcyBiZWxvdyBtYXkgbm90IGNvcnJlc3BvbmQgdG8gdGhlCisJICogYWN0dWFsIG5hbWVzIG9mIHRoZSBiaXRzIGluIGVhY2ggcG93ZXJkb21haW4ncyByZWdpc3RlciwKKwkgKiBidXQgdGhlIHR5cGUgb2YgdmFsdWUgcmV0dXJuZWQgaXMgdGhlIHNhbWUgZm9yIGVhY2gKKwkgKiBwb3dlcmRvbWFpbi4KKwkgKi8KKwlyZXR1cm4gcHJtX3JlYWRfbW9kX2JpdHNfc2hpZnQocHdyZG0tPnByY21fb2ZmcywgT01BUDM0MzBfUE1fUFJFUFdTVFNULAorCQkJCQlPTUFQMzQzMF9MQVNUTE9HSUNTVEFURUVOVEVSRUQpOworfQorCisvKioKKyAqIHB3cmRtX3JlYWRfbWVtX3B3cnN0IC0gZ2V0IGN1cnJlbnQgbWVtb3J5IGJhbmsgcG93ZXIgc3RhdGUKKyAqIEBwd3JkbTogc3RydWN0IHBvd2VyZG9tYWluICogdG8gZ2V0IGN1cnJlbnQgbWVtb3J5IGJhbmsgcG93ZXIgc3RhdGUKKyAqIEBiYW5rOiBtZW1vcnkgYmFuayBudW1iZXIgKDAtMykKKyAqCisgKiBSZXR1cm4gdGhlIHBvd2VyZG9tYWluIHB3cmRtJ3MgY3VycmVudCBtZW1vcnkgcG93ZXIgc3RhdGUgZm9yIGJhbmsKKyAqIHguICBSZXR1cm5zIC1FSU5WQUwgaWYgdGhlIHBvd2VyZG9tYWluIHBvaW50ZXIgaXMgbnVsbCwgLUVFWElTVCBpZgorICogdGhlIHRhcmdldCBtZW1vcnkgYmFuayBkb2VzIG5vdCBleGlzdCBvciBpcyBub3QgY29udHJvbGxhYmxlLCBvcgorICogcmV0dXJucyB0aGUgY3VycmVudCBtZW1vcnkgcG93ZXIgc3RhdGUgdXBvbiBzdWNjZXNzLgorICovCitpbnQgcHdyZG1fcmVhZF9tZW1fcHdyc3Qoc3RydWN0IHBvd2VyZG9tYWluICpwd3JkbSwgdTggYmFuaykKK3sKKwl1MzIgbTsKKworCWlmICghcHdyZG0pCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKHB3cmRtLT5iYW5rcyA8IChiYW5rICsgMSkpCisJCXJldHVybiAtRUVYSVNUOworCisJLyoKKwkgKiBUaGUgcmVnaXN0ZXIgYml0IG5hbWVzIGJlbG93IG1heSBub3QgY29ycmVzcG9uZCB0byB0aGUKKwkgKiBhY3R1YWwgbmFtZXMgb2YgdGhlIGJpdHMgaW4gZWFjaCBwb3dlcmRvbWFpbidzIHJlZ2lzdGVyLAorCSAqIGJ1dCB0aGUgdHlwZSBvZiB2YWx1ZSByZXR1cm5lZCBpcyB0aGUgc2FtZSBmb3IgZWFjaAorCSAqIHBvd2VyZG9tYWluLgorCSAqLworCXN3aXRjaCAoYmFuaykgeworCWNhc2UgMDoKKwkJbSA9IE9NQVAzNDMwX1NIQVJFREwxQ0FDSEVGTEFUU1RBVEVTVF9NQVNLOworCQlicmVhazsKKwljYXNlIDE6CisJCW0gPSBPTUFQMzQzMF9MMUZMQVRNRU1TVEFURVNUX01BU0s7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJbSA9IE9NQVAzNDMwX1NIQVJFREwyQ0FDSEVGTEFUU1RBVEVTVF9NQVNLOworCQlicmVhazsKKwljYXNlIDM6CisJCW0gPSBPTUFQMzQzMF9MMkZMQVRNRU1TVEFURVNUX01BU0s7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCVdBUk5fT04oMSk7IC8qIHNob3VsZCBuZXZlciBoYXBwZW4gKi8KKwkJcmV0dXJuIC1FRVhJU1Q7CisJfQorCisJcmV0dXJuIHBybV9yZWFkX21vZF9iaXRzX3NoaWZ0KHB3cmRtLT5wcmNtX29mZnMsIFBNX1BXU1RTVCwgbSk7Cit9CisKKy8qKgorICogcHdyZG1fcmVhZF9wcmV2X21lbV9wd3JzdCAtIGdldCBwcmV2aW91cyBtZW1vcnkgYmFuayBwb3dlciBzdGF0ZQorICogQHB3cmRtOiBzdHJ1Y3QgcG93ZXJkb21haW4gKiB0byBnZXQgcHJldmlvdXMgbWVtb3J5IGJhbmsgcG93ZXIgc3RhdGUKKyAqIEBiYW5rOiBtZW1vcnkgYmFuayBudW1iZXIgKDAtMykKKyAqCisgKiBSZXR1cm4gdGhlIHBvd2VyZG9tYWluIHB3cmRtJ3MgcHJldmlvdXMgbWVtb3J5IHBvd2VyIHN0YXRlIGZvciBiYW5rCisgKiB4LiAgUmV0dXJucyAtRUlOVkFMIGlmIHRoZSBwb3dlcmRvbWFpbiBwb2ludGVyIGlzIG51bGwsIC1FRVhJU1QgaWYKKyAqIHRoZSB0YXJnZXQgbWVtb3J5IGJhbmsgZG9lcyBub3QgZXhpc3Qgb3IgaXMgbm90IGNvbnRyb2xsYWJsZSwgb3IKKyAqIHJldHVybnMgdGhlIHByZXZpb3VzIG1lbW9yeSBwb3dlciBzdGF0ZSB1cG9uIHN1Y2Nlc3MuCisgKi8KK2ludCBwd3JkbV9yZWFkX3ByZXZfbWVtX3B3cnN0KHN0cnVjdCBwb3dlcmRvbWFpbiAqcHdyZG0sIHU4IGJhbmspCit7CisJdTMyIG07CisKKwlpZiAoIXB3cmRtKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChwd3JkbS0+YmFua3MgPCAoYmFuayArIDEpKQorCQlyZXR1cm4gLUVFWElTVDsKKworCS8qCisJICogVGhlIHJlZ2lzdGVyIGJpdCBuYW1lcyBiZWxvdyBtYXkgbm90IGNvcnJlc3BvbmQgdG8gdGhlCisJICogYWN0dWFsIG5hbWVzIG9mIHRoZSBiaXRzIGluIGVhY2ggcG93ZXJkb21haW4ncyByZWdpc3RlciwKKwkgKiBidXQgdGhlIHR5cGUgb2YgdmFsdWUgcmV0dXJuZWQgaXMgdGhlIHNhbWUgZm9yIGVhY2gKKwkgKiBwb3dlcmRvbWFpbi4KKwkgKi8KKwlzd2l0Y2ggKGJhbmspIHsKKwljYXNlIDA6CisJCW0gPSBPTUFQMzQzMF9MQVNUTUVNMVNUQVRFRU5URVJFRF9NQVNLOworCQlicmVhazsKKwljYXNlIDE6CisJCW0gPSBPTUFQMzQzMF9MQVNUTUVNMlNUQVRFRU5URVJFRF9NQVNLOworCQlicmVhazsKKwljYXNlIDI6CisJCW0gPSBPTUFQMzQzMF9MQVNUU0hBUkVETDJDQUNIRUZMQVRTVEFURUVOVEVSRURfTUFTSzsKKwkJYnJlYWs7CisJY2FzZSAzOgorCQltID0gT01BUDM0MzBfTEFTVEwyRkxBVE1FTVNUQVRFRU5URVJFRF9NQVNLOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlXQVJOX09OKDEpOyAvKiBzaG91bGQgbmV2ZXIgaGFwcGVuICovCisJCXJldHVybiAtRUVYSVNUOworCX0KKworCXJldHVybiBwcm1fcmVhZF9tb2RfYml0c19zaGlmdChwd3JkbS0+cHJjbV9vZmZzLAorCQkJCQlPTUFQMzQzMF9QTV9QUkVQV1NUU1QsIG0pOworfQorCisvKioKKyAqIHB3cmRtX2NsZWFyX2FsbF9wcmV2X3B3cnN0IC0gY2xlYXIgcHJldmlvdXMgcG93ZXJzdGF0ZSByZWdpc3RlciBmb3IgYSBwd3JkbQorICogQHB3cmRtOiBzdHJ1Y3QgcG93ZXJkb21haW4gKiB0byBjbGVhcgorICoKKyAqIENsZWFyIHRoZSBwb3dlcmRvbWFpbidzIHByZXZpb3VzIHBvd2VyIHN0YXRlIHJlZ2lzdGVyLiAgQ2xlYXJzIHRoZQorICogZW50aXJlIHJlZ2lzdGVyLCBpbmNsdWRpbmcgbG9naWMgYW5kIG1lbW9yeSBiYW5rIHByZXZpb3VzIHBvd2VyIHN0YXRlcy4KKyAqIFJldHVybnMgLUVJTlZBTCBpZiB0aGUgcG93ZXJkb21haW4gcG9pbnRlciBpcyBudWxsLCBvciByZXR1cm5zIDAgdXBvbgorICogc3VjY2Vzcy4KKyAqLworaW50IHB3cmRtX2NsZWFyX2FsbF9wcmV2X3B3cnN0KHN0cnVjdCBwb3dlcmRvbWFpbiAqcHdyZG0pCit7CisJaWYgKCFwd3JkbSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKgorCSAqIFhYWCBzaG91bGQgZ2V0IHRoZSBwb3dlcmRvbWFpbidzIGN1cnJlbnQgc3RhdGUgaGVyZTsKKwkgKiB3YXJuICYgZmFpbCBpZiBpdCBpcyBub3QgT04uCisJICovCisKKwlwcl9kZWJ1ZygicG93ZXJkb21haW46IGNsZWFyaW5nIHByZXZpb3VzIHBvd2VyIHN0YXRlIHJlZyBmb3IgJXNcbiIsCisJCSBwd3JkbS0+bmFtZSk7CisKKwlwcm1fd3JpdGVfbW9kX3JlZygwLCBwd3JkbS0+cHJjbV9vZmZzLCBPTUFQMzQzMF9QTV9QUkVQV1NUU1QpOworCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogcHdyZG1fZW5hYmxlX2hkd3Jfc2FyIC0gZW5hYmxlIGF1dG9tYXRpYyBoYXJkd2FyZSBTQVIgZm9yIGEgcHdyZG0KKyAqIEBwd3JkbTogc3RydWN0IHBvd2VyZG9tYWluICoKKyAqCisgKiBFbmFibGUgYXV0b21hdGljIGNvbnRleHQgc2F2ZS1hbmQtcmVzdG9yZSB1cG9uIHBvd2VyIHN0YXRlIGNoYW5nZQorICogZm9yIHNvbWUgZGV2aWNlcyBpbiBhIHBvd2VyZG9tYWluLiAgV2FybmluZzogdGhpcyBvbmx5IGFmZmVjdHMgYQorICogc3Vic2V0IG9mIGRldmljZXMgaW4gYSBwb3dlcmRvbWFpbjsgY2hlY2sgdGhlIFRSTSBjbG9zZWx5LiAgUmV0dXJucworICogLUVJTlZBTCBpZiB0aGUgcG93ZXJkb21haW4gcG9pbnRlciBpcyBudWxsIG9yIGlmIHRoZSBwb3dlcmRvbWFpbgorICogZG9lcyBub3Qgc3VwcG9ydCBhdXRvbWF0aWMgc2F2ZS1hbmQtcmVzdG9yZSwgb3IgcmV0dXJucyAwIHVwb24KKyAqIHN1Y2Nlc3MuCisgKi8KK2ludCBwd3JkbV9lbmFibGVfaGR3cl9zYXIoc3RydWN0IHBvd2VyZG9tYWluICpwd3JkbSkKK3sKKwlpZiAoIXB3cmRtKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmICghKHB3cmRtLT5mbGFncyAmIFBXUkRNX0hBU19IRFdSX1NBUikpCisJCXJldHVybiAtRUlOVkFMOworCisJcHJfZGVidWcoInBvd2VyZG9tYWluOiAlczogc2V0dGluZyBTQVZFQU5EUkVTVE9SRSBiaXRcbiIsCisJCSBwd3JkbS0+bmFtZSk7CisKKwlwcm1fcm13X21vZF9yZWdfYml0cygwLCAxIDw8IE9NQVAzNDMwRVMyX1NBVkVBTkRSRVNUT1JFX1NISUZULAorCQkJICAgICBwd3JkbS0+cHJjbV9vZmZzLCBQTV9QV1NUQ1RSTCk7CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBwd3JkbV9kaXNhYmxlX2hkd3Jfc2FyIC0gZGlzYWJsZSBhdXRvbWF0aWMgaGFyZHdhcmUgU0FSIGZvciBhIHB3cmRtCisgKiBAcHdyZG06IHN0cnVjdCBwb3dlcmRvbWFpbiAqCisgKgorICogRGlzYWJsZSBhdXRvbWF0aWMgY29udGV4dCBzYXZlLWFuZC1yZXN0b3JlIHVwb24gcG93ZXIgc3RhdGUgY2hhbmdlCisgKiBmb3Igc29tZSBkZXZpY2VzIGluIGEgcG93ZXJkb21haW4uICBXYXJuaW5nOiB0aGlzIG9ubHkgYWZmZWN0cyBhCisgKiBzdWJzZXQgb2YgZGV2aWNlcyBpbiBhIHBvd2VyZG9tYWluOyBjaGVjayB0aGUgVFJNIGNsb3NlbHkuICBSZXR1cm5zCisgKiAtRUlOVkFMIGlmIHRoZSBwb3dlcmRvbWFpbiBwb2ludGVyIGlzIG51bGwgb3IgaWYgdGhlIHBvd2VyZG9tYWluCisgKiBkb2VzIG5vdCBzdXBwb3J0IGF1dG9tYXRpYyBzYXZlLWFuZC1yZXN0b3JlLCBvciByZXR1cm5zIDAgdXBvbgorICogc3VjY2Vzcy4KKyAqLworaW50IHB3cmRtX2Rpc2FibGVfaGR3cl9zYXIoc3RydWN0IHBvd2VyZG9tYWluICpwd3JkbSkKK3sKKwlpZiAoIXB3cmRtKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmICghKHB3cmRtLT5mbGFncyAmIFBXUkRNX0hBU19IRFdSX1NBUikpCisJCXJldHVybiAtRUlOVkFMOworCisJcHJfZGVidWcoInBvd2VyZG9tYWluOiAlczogY2xlYXJpbmcgU0FWRUFORFJFU1RPUkUgYml0XG4iLAorCQkgcHdyZG0tPm5hbWUpOworCisJcHJtX3Jtd19tb2RfcmVnX2JpdHMoMSA8PCBPTUFQMzQzMEVTMl9TQVZFQU5EUkVTVE9SRV9TSElGVCwgMCwKKwkJCSAgICAgcHdyZG0tPnByY21fb2ZmcywgUE1fUFdTVENUUkwpOworCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogcHdyZG1faGFzX2hkd3Jfc2FyIC0gdGVzdCB3aGV0aGVyIHBvd2VyZG9tYWluIHN1cHBvcnRzIGhhcmR3YXJlIFNBUgorICogQHB3cmRtOiBzdHJ1Y3QgcG93ZXJkb21haW4gKgorICoKKyAqIFJldHVybnMgMSBpZiBwb3dlcmRvbWFpbiAncHdyZG0nIHN1cHBvcnRzIGhhcmR3YXJlIHNhdmUtYW5kLXJlc3RvcmUKKyAqIGZvciBzb21lIGRldmljZXMsIG9yIDAgaWYgaXQgZG9lcyBub3QuCisgKi8KK2Jvb2wgcHdyZG1faGFzX2hkd3Jfc2FyKHN0cnVjdCBwb3dlcmRvbWFpbiAqcHdyZG0pCit7CisJcmV0dXJuIChwd3JkbSAmJiBwd3JkbS0+ZmxhZ3MgJiBQV1JETV9IQVNfSERXUl9TQVIpID8gMSA6IDA7Cit9CisKKy8qKgorICogcHdyZG1fd2FpdF90cmFuc2l0aW9uIC0gd2FpdCBmb3IgcG93ZXJkb21haW4gcG93ZXIgdHJhbnNpdGlvbiB0byBmaW5pc2gKKyAqIEBwd3JkbTogc3RydWN0IHBvd2VyZG9tYWluICogdG8gd2FpdCBmb3IKKyAqCisgKiBJZiB0aGUgcG93ZXJkb21haW4gcHdyZG0gaXMgaW4gdGhlIHByb2Nlc3Mgb2YgYSBzdGF0ZSB0cmFuc2l0aW9uLAorICogc3BpbiB1bnRpbCBpdCBjb21wbGV0ZXMgdGhlIHBvd2VyIHRyYW5zaXRpb24sIG9yIHVudGlsIGFuIGl0ZXJhdGlvbgorICogYmFpbG91dCB2YWx1ZSBpcyByZWFjaGVkLiBSZXR1cm5zIC1FSU5WQUwgaWYgdGhlIHBvd2VyZG9tYWluCisgKiBwb2ludGVyIGlzIG51bGwsIC1FQUdBSU4gaWYgdGhlIGJhaWxvdXQgdmFsdWUgd2FzIHJlYWNoZWQsIG9yCisgKiByZXR1cm5zIDAgdXBvbiBzdWNjZXNzLgorICovCitpbnQgcHdyZG1fd2FpdF90cmFuc2l0aW9uKHN0cnVjdCBwb3dlcmRvbWFpbiAqcHdyZG0pCit7CisJdTMyIGMgPSAwOworCisJaWYgKCFwd3JkbSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKgorCSAqIFJFVklTSVQ6IHB3cmRtX3dhaXRfdHJhbnNpdGlvbigpIG1heSBiZSBiZXR0ZXIgaW1wbGVtZW50ZWQKKwkgKiB2aWEgYSBjYWxsYmFjayBhbmQgYSBwZXJpb2RpYyB0aW1lciBjaGVjayAtLSBob3cgbG9uZyBkbyB3ZSBleHBlY3QKKwkgKiBwb3dlcmRvbWFpbiB0cmFuc2l0aW9ucyB0byB0YWtlPworCSAqLworCisJLyogWFhYIElzIHRoaXMgdWRlbGF5KCkgdmFsdWUgbWVhbmluZ2Z1bD8gKi8KKwl3aGlsZSAoKHBybV9yZWFkX21vZF9yZWcocHdyZG0tPnByY21fb2ZmcywgUE1fUFdTVFNUKSAmCisJCU9NQVBfSU5UUkFOU0lUSU9OKSAmJgorCSAgICAgICAoYysrIDwgUFdSRE1fVFJBTlNJVElPTl9CQUlMT1VUKSkKKwkJdWRlbGF5KDEpOworCisJaWYgKGMgPj0gUFdSRE1fVFJBTlNJVElPTl9CQUlMT1VUKSB7CisJCXByaW50ayhLRVJOX0VSUiAicG93ZXJkb21haW46IHdhaXRlZCB0b28gbG9uZyBmb3IgIgorCQkgICAgICAgInBvd2VyZG9tYWluICVzIHRvIGNvbXBsZXRlIHRyYW5zaXRpb25cbiIsIHB3cmRtLT5uYW1lKTsKKwkJcmV0dXJuIC1FQUdBSU47CisJfQorCisJcHJfZGVidWcoInBvd2VyZG9tYWluOiBjb21wbGV0ZWQgdHJhbnNpdGlvbiBpbiAlZCBsb29wc1xuIiwgYyk7CisKKwlyZXR1cm4gMDsKK30KKworCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL3Bvd2VyZG9tYWlucy5oIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9wb3dlcmRvbWFpbnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZTE1MWZhCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9wb3dlcmRvbWFpbnMuaApAQCAtMCwwICsxLDE4NyBAQAorLyoKKyAqIE9NQVAyLzMgY29tbW9uIHBvd2VyZG9tYWluIGRlZmluaXRpb25zCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA3LTggVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwNy04IE5va2lhIENvcnBvcmF0aW9uCisgKgorICogV3JpdHRlbiBieSBQYXVsIFdhbG1zbGV5CisgKiBEZWJ1Z2dpbmcgYW5kIGludGVncmF0aW9uIGZpeGVzIGJ5IEpvdW5pIEjDtmdhbmRlcgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2lmbmRlZiBBUkNIX0FSTV9NQUNIX09NQVAyX1BPV0VSRE9NQUlOUworI2RlZmluZSBBUkNIX0FSTV9NQUNIX09NQVAyX1BPV0VSRE9NQUlOUworCisvKgorICogVGhpcyBmaWxlIGNvbnRhaW5zIGFsbCBvZiB0aGUgcG93ZXJkb21haW5zIHRoYXQgaGF2ZSBzb21lIGVsZW1lbnQKKyAqIG9mIHNvZnR3YXJlIGNvbnRyb2wgZm9yIHRoZSBPTUFQMjR4eCBhbmQgT01BUDM0WFggY2hpcHMuCisgKgorICogQSBmZXcgbm90ZXM6CisgKgorICogVGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0aW5nIG9mIHBvd2VyZG9tYWlucyBvbiB0aGUgY2hpcHM7IG9ubHkKKyAqIHBvd2VyZG9tYWlucyB0aGF0IGNhbiBiZSBjb250cm9sbGVkIGluIHNvZnR3YXJlLgorICoKKyAqIEEgdXNlZnVsIHZhbGlkYXRpb24gcnVsZSBmb3Igc3RydWN0IHBvd2VyZG9tYWluOgorICogQW55IHBvd2VyZG9tYWluIHJlZmVyZW5jZWQgYnkgYSB3a2RlcF9zcmNzIG9yIHNsZWVwZGVwX3NyY3MgYXJyYXkKKyAqIG11c3QgaGF2ZSBhIGRlcF9iaXQgYXNzaWduZWQuICBTbyB3a2RlcF9zcmNzL3NsZWVwZGVwX3NyY3MgYXJlIHJlYWxseQorICoganVzdCBzb2Z0d2FyZS1jb250cm9sbGFibGUgZGVwZW5kZW5jaWVzLiAgTm9uLXNvZnR3YXJlLWNvbnRyb2xsYWJsZQorICogZGVwZW5kZW5jaWVzIGRvIGV4aXN0LCBidXQgdGhleSBhcmUgbm90IGVuY29kZWQgYmVsb3cgKHlldCkuCisgKgorICogMjR4eCBkb2VzIG5vdCBzdXBwb3J0IHByb2dyYW1tYWJsZSBzbGVlcCBkZXBlbmRlbmNpZXMgKFNMRUVQREVQKQorICoKKyAqLworCisvKgorICogVGhlIG5hbWVzIGZvciB0aGUgRFNQL0lWQTIgcG93ZXJkb21haW5zIGFyZSBjb25mdXNpbmcuCisgKgorICogTW9zdCBPTUFQIGNoaXBzIGhhdmUgYW4gb24tYm9hcmQgRFNQLgorICoKKyAqIE9uIHRoZSAyNDIwLCB0aGlzIGlzIGEgJ0M1NSBEU1AgY2FsbGVkLCBzaW1wbHksIHRoZSBEU1AuICBJdHMKKyAqIHBvd2VyZG9tYWluIGlzIGNhbGxlZCB0aGUgIkRTUCBwb3dlciBkb21haW4uIiAgT24gdGhlIDI0MzAsIHRoZQorICogb24tYm9hcmQgRFNQIGlzIGEgJ0M2NCBEU1AsIG5vdyBjYWxsZWQgdGhlIElWQTIgb3IgSVZBMi4xLiAgSXRzCisgKiBwb3dlcmRvbWFpbiBpcyBzdGlsbCBjYWxsZWQgdGhlICJEU1AgcG93ZXIgZG9tYWluLiIJT24gdGhlIDM0MzAsCisgKiB0aGUgRFNQIGlzIGEgJ0M2NCBEU1AgbGlrZSB0aGUgMjQzMCwgYWxzbyBrbm93biBhcyB0aGUgSVZBMjsgYnV0CisgKiBpdHMgcG93ZXJkb21haW4gaXMgbm93IGNhbGxlZCB0aGUgIklWQTIgcG93ZXIgZG9tYWluLiIKKyAqCisgKiBUaGUgMjQyMCBhbHNvIGhhcyBzb21ldGhpbmcgY2FsbGVkIHRoZSBJVkEsIHdoaWNoIGlzIGEgc2VwYXJhdGUgQVJNCisgKiBjb3JlLCBhbmQgaGFzIG5vdGhpbmcgdG8gZG8gd2l0aCB0aGUgRFNQL0lWQTIuCisgKgorICogSWRlYWxseSB0aGUgRFNQL0lWQTIgY291bGQganVzdCBiZSB0aGUgc2FtZSBwb3dlcmRvbWFpbiwgYnV0IHRoZSBQUkNNCisgKiBhZGRyZXNzIG9mZnNldCBpcyBkaWZmZXJlbnQgYmV0d2VlbiB0aGUgQzU1IGFuZCBDNjQgRFNQcy4KKyAqCisgKiBUaGUgb3Zlcmx5LXNwZWNpZmljIGRlcF9iaXQgbmFtZXMgYXJlIGR1ZSB0byBhIGJpdCBuYW1lIGNvbGxpc2lvbgorICogd2l0aCBDTV9GQ0xLRU5fe0RTUCxJVkEyfS4gIFRoZSBEU1AvSVZBMiBQTV9XS0RFUCBhbmQgQ01fU0xFRVBERVAgc2hpZnQKKyAqIHZhbHVlIGFyZSB0aGUgc2FtZSBmb3IgYWxsIHBvd2VyZG9tYWluczogMgorICovCisKKy8qCisgKiBYWFggc2hvdWxkIGRlcF9iaXQgYmUgYSBtYXNrLCBzbyB3ZSBjYW4gdGVzdCB0byBzZWUgaWYgaXQgaXMgMCBhcyBhCisgKiBzYW5pdHkgY2hlY2s/CisgKiBYWFggZW5jb2RlIGhhcmR3YXJlIGZpeGVkIHdha2V1cCBkZXBlbmRlbmNpZXMgLS0gZXNwLiBmb3IgMzQzMCBDT1JFCisgKi8KKworI2luY2x1ZGUgPG1hY2gvcG93ZXJkb21haW4uaD4KKworI2luY2x1ZGUgInByY20tY29tbW9uLmgiCisjaW5jbHVkZSAicHJtLmgiCisjaW5jbHVkZSAiY20uaCIKKworLyogT01BUDIvMy1jb21tb24gcG93ZXJkb21haW5zIGFuZCB3YWtldXAgZGVwZW5kZW5jaWVzICovCisKKy8qCisgKiAyNDIwLzI0MzAgUE1fV0tERVBfR0ZYOiBDT1JFLCBNUFUsIFdLVVAKKyAqIDM0MzBFUzEgUE1fV0tERVBfR0ZYOiBhZGRzIElWQTIsIHJlbW92ZXMgQ09SRQorICogMzQzMEVTMiBQTV9XS0RFUF9TR1g6IGFkZHMgSVZBMiwgcmVtb3ZlcyBDT1JFCisgKi8KK3N0YXRpYyBzdHJ1Y3QgcHdyZG1fZGVwIGdmeF9zZ3hfd2tkZXBzW10gPSB7CisJeworCQkucHdyZG1fbmFtZSA9ICJjb3JlX3B3cmRtIiwKKwkJLm9tYXBfY2hpcCA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDI0WFgpCisJfSwKKwl7CisJCS5wd3JkbV9uYW1lID0gIml2YTJfcHdyZG0iLAorCQkub21hcF9jaGlwID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMzQzMCkKKwl9LAorCXsKKwkJLnB3cmRtX25hbWUgPSAibXB1X3B3cmRtIiwKKwkJLm9tYXBfY2hpcCA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDI0WFggfAorCQkJCQkgICAgQ0hJUF9JU19PTUFQMzQzMCkKKwl9LAorCXsKKwkJLnB3cmRtX25hbWUgPSAid2t1cF9wd3JkbSIsCisJCS5vbWFwX2NoaXAgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAyNFhYIHwKKwkJCQkJICAgIENISVBfSVNfT01BUDM0MzApCisJfSwKKwl7IE5VTEwgfSwKK307CisKKy8qCisgKiAzNDMwOiBDTV9TTEVFUERFUF9DQU06IE1QVQorICogMzQzMEVTMTogQ01fU0xFRVBERVBfR0ZYOiBNUFUKKyAqIDM0MzBFUzI6IENNX1NMRUVQREVQX1NHWDogTVBVCisgKi8KK3N0YXRpYyBzdHJ1Y3QgcHdyZG1fZGVwIGNhbV9nZnhfc2xlZXBkZXBzW10gPSB7CisJeworCQkucHdyZG1fbmFtZSA9ICJtcHVfcHdyZG0iLAorCQkub21hcF9jaGlwID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMzQzMCkKKwl9LAorCXsgTlVMTCB9LAorfTsKKworCisjaW5jbHVkZSAicG93ZXJkb21haW5zMjR4eC5oIgorI2luY2x1ZGUgInBvd2VyZG9tYWluczM0eHguaCIKKworCisvKgorICogT01BUDIvMyBjb21tb24gcG93ZXJkb21haW5zCisgKi8KKworLyoKKyAqIFRoZSBHRlggcG93ZXJkb21haW4gaXMgbm90IHByZXNlbnQgb24gMzQzMEVTMiwgYnV0IGN1cnJlbnRseSB3ZSBkbyBub3QKKyAqIGhhdmUgYSBtYWNybyB0byBmaWx0ZXIgaXQgb3V0IGF0IGNvbXBpbGUtdGltZS4KKyAqLworc3RhdGljIHN0cnVjdCBwb3dlcmRvbWFpbiBnZnhfcHdyZG0gPSB7CisJLm5hbWUJCSAgPSAiZ2Z4X3B3cmRtIiwKKwkucHJjbV9vZmZzCSAgPSBHRlhfTU9ELAorCS5vbWFwX2NoaXAJICA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDI0WFggfAorCQkJCQkgICBDSElQX0lTX09NQVAzNDMwRVMxKSwKKwkud2tkZXBfc3JjcwkgID0gZ2Z4X3NneF93a2RlcHMsCisJLnNsZWVwZGVwX3NyY3MJICA9IGNhbV9nZnhfc2xlZXBkZXBzLAorCS5wd3JzdHMJCSAgPSBQV1JTVFNfT0ZGX1JFVF9PTiwKKwkucHdyc3RzX2xvZ2ljX3JldCA9IFBXUkRNX1BPV0VSX1JFVCwKKwkuYmFua3MJCSAgPSAxLAorCS5wd3JzdHNfbWVtX3JldAkgID0geworCQlbMF0gPSBQV1JETV9QT1dFUl9SRVQsIC8qIE1FTVJFVFNUQVRFICovCisJfSwKKwkucHdyc3RzX21lbV9vbgkgID0geworCQlbMF0gPSBQV1JETV9QT1dFUl9PTiwgIC8qIE1FTU9OU1RBVEUgKi8KKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwb3dlcmRvbWFpbiB3a3VwX3B3cmRtID0geworCS5uYW1lCQk9ICJ3a3VwX3B3cmRtIiwKKwkucHJjbV9vZmZzCT0gV0tVUF9NT0QsCisJLm9tYXBfY2hpcAk9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDI0WFggfCBDSElQX0lTX09NQVAzNDMwKSwKKwkuZGVwX2JpdAk9IE9NQVBfRU5fV0tVUF9TSElGVCwKK307CisKKworCisvKiBBcyBwb3dlcmRvbWFpbnMgYXJlIGFkZGVkIG9yIHJlbW92ZWQgYWJvdmUsIHRoaXMgbGlzdCBtdXN0IGFsc28gYmUgY2hhbmdlZCAqLworc3RhdGljIHN0cnVjdCBwb3dlcmRvbWFpbiAqcG93ZXJkb21haW5zX29tYXBbXSBfX2luaXRkYXRhID0geworCisJJmdmeF9wd3JkbSwKKwkmd2t1cF9wd3JkbSwKKworI2lmZGVmIENPTkZJR19BUkNIX09NQVAyNFhYCisJJmRzcF9wd3JkbSwKKwkmbXB1XzI0eHhfcHdyZG0sCisJJmNvcmVfMjR4eF9wd3JkbSwKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDI0MzAKKwkmbWRtX3B3cmRtLAorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMzRYWAorCSZpdmEyX3B3cmRtLAorCSZtcHVfMzR4eF9wd3JkbSwKKwkmbmVvbl9wd3JkbSwKKwkmY29yZV8zNHh4X3B3cmRtLAorCSZjYW1fcHdyZG0sCisJJmRzc19wd3JkbSwKKwkmcGVyX3B3cmRtLAorCSZlbXVfcHdyZG0sCisJJnNneF9wd3JkbSwKKwkmdXNiaG9zdF9wd3JkbSwKKyNlbmRpZgorCisJTlVMTAorfTsKKworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvcG93ZXJkb21haW5zMjR4eC5oIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9wb3dlcmRvbWFpbnMyNHh4LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWYwOGRjMwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvcG93ZXJkb21haW5zMjR4eC5oCkBAIC0wLDAgKzEsMjAwIEBACisvKgorICogT01BUDI0WFggcG93ZXJkb21haW4gZGVmaW5pdGlvbnMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOCBUZXhhcyBJbnN0cnVtZW50cywgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMDggTm9raWEgQ29ycG9yYXRpb24KKyAqCisgKiBXcml0dGVuIGJ5IFBhdWwgV2FsbXNsZXkKKyAqIERlYnVnZ2luZyBhbmQgaW50ZWdyYXRpb24gZml4ZXMgYnkgSm91bmkgSMO2Z2FuZGVyCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaWZuZGVmIEFSQ0hfQVJNX01BQ0hfT01BUDJfUE9XRVJET01BSU5TMjRYWAorI2RlZmluZSBBUkNIX0FSTV9NQUNIX09NQVAyX1BPV0VSRE9NQUlOUzI0WFgKKworLyoKKyAqIE4uQi4gSWYgcG93ZXJkb21haW5zIGFyZSBhZGRlZCBvciByZW1vdmVkIGZyb20gdGhpcyBmaWxlLCB1cGRhdGUKKyAqIHRoZSBhcnJheSBpbiBtYWNoLW9tYXAyL3Bvd2VyZG9tYWlucy5oLgorICovCisKKyNpbmNsdWRlIDxtYWNoL3Bvd2VyZG9tYWluLmg+CisKKyNpbmNsdWRlICJwcmNtLWNvbW1vbi5oIgorI2luY2x1ZGUgInBybS5oIgorI2luY2x1ZGUgInBybS1yZWdiaXRzLTI0eHguaCIKKyNpbmNsdWRlICJjbS5oIgorI2luY2x1ZGUgImNtLXJlZ2JpdHMtMjR4eC5oIgorCisvKiAyNFhYIHBvd2VyZG9tYWlucyBhbmQgZGVwZW5kZW5jaWVzICovCisKKyNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMjRYWAorCisKKy8qIFdha2V1cCBkZXBlbmRlbmN5IHNvdXJjZSBhcnJheXMgKi8KKworLyoKKyAqIDI0MjAvMjQzMCBQTV9XS0RFUF9EU1A6IENPUkUsIE1QVSwgV0tVUAorICogMjQzMCBQTV9XS0RFUF9NRE06IHNhbWUgYXMgYWJvdmUKKyAqLworc3RhdGljIHN0cnVjdCBwd3JkbV9kZXAgZHNwX21kbV8yNHh4X3drZGVwc1tdID0geworCXsKKwkJLnB3cmRtX25hbWUgPSAiY29yZV9wd3JkbSIsCisJCS5vbWFwX2NoaXAgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAyNFhYKQorCX0sCisJeworCQkucHdyZG1fbmFtZSA9ICJtcHVfcHdyZG0iLAorCQkub21hcF9jaGlwID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMjRYWCkKKwl9LAorCXsKKwkJLnB3cmRtX25hbWUgPSAid2t1cF9wd3JkbSIsCisJCS5vbWFwX2NoaXAgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAyNFhYKQorCX0sCisJeyBOVUxMIH0sCit9OworCisvKgorICogMjQyMCBQTV9XS0RFUF9NUFU6IENPUkUsIERTUCwgV0tVUAorICogMjQzMCBhZGRzIE1ETQorICovCitzdGF0aWMgc3RydWN0IHB3cmRtX2RlcCBtcHVfMjR4eF93a2RlcHNbXSA9IHsKKwl7CisJCS5wd3JkbV9uYW1lID0gImNvcmVfcHdyZG0iLAorCQkub21hcF9jaGlwID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMjRYWCkKKwl9LAorCXsKKwkJLnB3cmRtX25hbWUgPSAiZHNwX3B3cmRtIiwKKwkJLm9tYXBfY2hpcCA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDI0WFgpCisJfSwKKwl7CisJCS5wd3JkbV9uYW1lID0gIndrdXBfcHdyZG0iLAorCQkub21hcF9jaGlwID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMjRYWCkKKwl9LAorCXsKKwkJLnB3cmRtX25hbWUgPSAibWRtX3B3cmRtIiwKKwkJLm9tYXBfY2hpcCA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDI0MzApCisJfSwKKwl7IE5VTEwgfSwKK307CisKKy8qCisgKiAyNDIwIFBNX1dLREVQX0NPUkU6IERTUCwgR0ZYLCBNUFUsIFdLVVAKKyAqIDI0MzAgYWRkcyBNRE0KKyAqLworc3RhdGljIHN0cnVjdCBwd3JkbV9kZXAgY29yZV8yNHh4X3drZGVwc1tdID0geworCXsKKwkJLnB3cmRtX25hbWUgPSAiZHNwX3B3cmRtIiwKKwkJLm9tYXBfY2hpcCA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDI0WFgpCisJfSwKKwl7CisJCS5wd3JkbV9uYW1lID0gImdmeF9wd3JkbSIsCisJCS5vbWFwX2NoaXAgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAyNFhYKQorCX0sCisJeworCQkucHdyZG1fbmFtZSA9ICJtcHVfcHdyZG0iLAorCQkub21hcF9jaGlwID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMjRYWCkKKwl9LAorCXsKKwkJLnB3cmRtX25hbWUgPSAid2t1cF9wd3JkbSIsCisJCS5vbWFwX2NoaXAgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAyNFhYKQorCX0sCisJeworCQkucHdyZG1fbmFtZSA9ICJtZG1fcHdyZG0iLAorCQkub21hcF9jaGlwID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMjQzMCkKKwl9LAorCXsgTlVMTCB9LAorfTsKKworCisvKiBQb3dlcmRvbWFpbnMgKi8KKworc3RhdGljIHN0cnVjdCBwb3dlcmRvbWFpbiBkc3BfcHdyZG0gPSB7CisJLm5hbWUJCSAgPSAiZHNwX3B3cmRtIiwKKwkucHJjbV9vZmZzCSAgPSBPTUFQMjRYWF9EU1BfTU9ELAorCS5vbWFwX2NoaXAJICA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDI0WFgpLAorCS5kZXBfYml0CSAgPSBPTUFQMjRYWF9QTV9XS0RFUF9NUFVfRU5fRFNQX1NISUZULAorCS53a2RlcF9zcmNzCSAgPSBkc3BfbWRtXzI0eHhfd2tkZXBzLAorCS5wd3JzdHMJCSAgPSBQV1JTVFNfT0ZGX1JFVF9PTiwKKwkucHdyc3RzX2xvZ2ljX3JldCA9IFBXUkRNX1BPV0VSX1JFVCwKKwkuYmFua3MJCSAgPSAxLAorCS5wd3JzdHNfbWVtX3JldAkgID0geworCQlbMF0gPSBQV1JETV9QT1dFUl9SRVQsCisJfSwKKwkucHdyc3RzX21lbV9vbgkgID0geworCQlbMF0gPSBQV1JETV9QT1dFUl9PTiwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwb3dlcmRvbWFpbiBtcHVfMjR4eF9wd3JkbSA9IHsKKwkubmFtZQkJICA9ICJtcHVfcHdyZG0iLAorCS5wcmNtX29mZnMJICA9IE1QVV9NT0QsCisJLm9tYXBfY2hpcAkgID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMjRYWCksCisJLmRlcF9iaXQJICA9IE9NQVAyNFhYX0VOX01QVV9TSElGVCwKKwkud2tkZXBfc3JjcwkgID0gbXB1XzI0eHhfd2tkZXBzLAorCS5wd3JzdHMJCSAgPSBQV1JTVFNfT0ZGX1JFVF9PTiwKKwkucHdyc3RzX2xvZ2ljX3JldCA9IFBXUlNUU19PRkZfUkVULAorCS5iYW5rcwkJICA9IDEsCisJLnB3cnN0c19tZW1fcmV0CSAgPSB7CisJCVswXSA9IFBXUkRNX1BPV0VSX1JFVCwKKwl9LAorCS5wd3JzdHNfbWVtX29uCSAgPSB7CisJCVswXSA9IFBXUkRNX1BPV0VSX09OLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBvd2VyZG9tYWluIGNvcmVfMjR4eF9wd3JkbSA9IHsKKwkubmFtZQkJICA9ICJjb3JlX3B3cmRtIiwKKwkucHJjbV9vZmZzCSAgPSBDT1JFX01PRCwKKwkub21hcF9jaGlwCSAgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAyNFhYKSwKKwkud2tkZXBfc3JjcwkgID0gY29yZV8yNHh4X3drZGVwcywKKwkucHdyc3RzCQkgID0gUFdSU1RTX09GRl9SRVRfT04sCisJLmRlcF9iaXQJICA9IE9NQVAyNFhYX0VOX0NPUkVfU0hJRlQsCisJLmJhbmtzCQkgID0gMywKKwkucHdyc3RzX21lbV9yZXQJICA9IHsKKwkJWzBdID0gUFdSU1RTX09GRl9SRVQsCSAvKiBNRU0xUkVUU1RBVEUgKi8KKwkJWzFdID0gUFdSU1RTX09GRl9SRVQsCSAvKiBNRU0yUkVUU1RBVEUgKi8KKwkJWzJdID0gUFdSU1RTX09GRl9SRVQsCSAvKiBNRU0zUkVUU1RBVEUgKi8KKwl9LAorCS5wd3JzdHNfbWVtX29uCSAgPSB7CisJCVswXSA9IFBXUlNUU19PRkZfUkVUX09OLCAvKiBNRU0xT05TVEFURSAqLworCQlbMV0gPSBQV1JTVFNfT0ZGX1JFVF9PTiwgLyogTUVNMk9OU1RBVEUgKi8KKwkJWzJdID0gUFdSU1RTX09GRl9SRVRfT04sIC8qIE1FTTNPTlNUQVRFICovCisJfSwKK307CisKKyNlbmRpZgkgICAvKiBDT05GSUdfQVJDSF9PTUFQMjRYWCAqLworCisKKworLyoKKyAqIDI0MzAtc3BlY2lmaWMgcG93ZXJkb21haW5zCisgKi8KKworI2lmZGVmIENPTkZJR19BUkNIX09NQVAyNDMwCisKKy8qIFhYWCAyNDMwIEtJTExET01BSU5XS1VQIGJpdD8gIE5vIGN1cnJlbnQgdXNlcnMgYXBwYXJlbnRseSAqLworCisvKiBBbm90aGVyIGNhc2Ugb2YgYml0IG5hbWUgY29sbGlzaW9ucyBiZXR3ZWVuIHNldmVyYWwgcmVnaXN0ZXJzOiBFTl9NRE0gKi8KK3N0YXRpYyBzdHJ1Y3QgcG93ZXJkb21haW4gbWRtX3B3cmRtID0geworCS5uYW1lCQkgID0gIm1kbV9wd3JkbSIsCisJLnByY21fb2ZmcwkgID0gT01BUDI0MzBfTURNX01PRCwKKwkub21hcF9jaGlwCSAgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAyNDMwKSwKKwkuZGVwX2JpdAkgID0gT01BUDI0MzBfUE1fV0tERVBfTVBVX0VOX01ETV9TSElGVCwKKwkud2tkZXBfc3JjcwkgID0gZHNwX21kbV8yNHh4X3drZGVwcywKKwkucHdyc3RzCQkgID0gUFdSU1RTX09GRl9SRVRfT04sCisJLnB3cnN0c19sb2dpY19yZXQgPSBQV1JETV9QT1dFUl9SRVQsCisJLmJhbmtzCQkgID0gMSwKKwkucHdyc3RzX21lbV9yZXQJICA9IHsKKwkJWzBdID0gUFdSRE1fUE9XRVJfUkVULCAvKiBNRU1SRVRTVEFURSAqLworCX0sCisJLnB3cnN0c19tZW1fb24JICA9IHsKKwkJWzBdID0gUFdSRE1fUE9XRVJfT04sICAvKiBNRU1PTlNUQVRFICovCisJfSwKK307CisKKyNlbmRpZiAgICAgLyogQ09ORklHX0FSQ0hfT01BUDI0MzAgKi8KKworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvcG93ZXJkb21haW5zMzR4eC5oIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9wb3dlcmRvbWFpbnMzNHh4LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjU3M2Y3MQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvcG93ZXJkb21haW5zMzR4eC5oCkBAIC0wLDAgKzEsMzI3IEBACisvKgorICogT01BUDM0WFggcG93ZXJkb21haW4gZGVmaW5pdGlvbnMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOCBUZXhhcyBJbnN0cnVtZW50cywgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMDggTm9raWEgQ29ycG9yYXRpb24KKyAqCisgKiBXcml0dGVuIGJ5IFBhdWwgV2FsbXNsZXkKKyAqIERlYnVnZ2luZyBhbmQgaW50ZWdyYXRpb24gZml4ZXMgYnkgSm91bmkgSMO2Z2FuZGVyCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaWZuZGVmIEFSQ0hfQVJNX01BQ0hfT01BUDJfUE9XRVJET01BSU5TMzRYWAorI2RlZmluZSBBUkNIX0FSTV9NQUNIX09NQVAyX1BPV0VSRE9NQUlOUzM0WFgKKworLyoKKyAqIE4uQi4gSWYgcG93ZXJkb21haW5zIGFyZSBhZGRlZCBvciByZW1vdmVkIGZyb20gdGhpcyBmaWxlLCB1cGRhdGUKKyAqIHRoZSBhcnJheSBpbiBtYWNoLW9tYXAyL3Bvd2VyZG9tYWlucy5oLgorICovCisKKyNpbmNsdWRlIDxtYWNoL3Bvd2VyZG9tYWluLmg+CisKKyNpbmNsdWRlICJwcmNtLWNvbW1vbi5oIgorI2luY2x1ZGUgInBybS5oIgorI2luY2x1ZGUgInBybS1yZWdiaXRzLTM0eHguaCIKKyNpbmNsdWRlICJjbS5oIgorI2luY2x1ZGUgImNtLXJlZ2JpdHMtMzR4eC5oIgorCisvKgorICogMzRYWC1zcGVjaWZpYyBwb3dlcmRvbWFpbnMsIGRlcGVuZGVuY2llcworICovCisKKyNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMzRYWAorCisvKgorICogMzQzMDogUE1fV0tERVBfe1BFUixVU0JIT1NUfTogQ09SRSwgSVZBMiwgTVBVLCBXS1VQCisgKiAoVVNCSE9TVCBpcyBFUzIgb25seSkKKyAqLworc3RhdGljIHN0cnVjdCBwd3JkbV9kZXAgcGVyX3VzYmhvc3Rfd2tkZXBzW10gPSB7CisJeworCQkucHdyZG1fbmFtZSA9ICJjb3JlX3B3cmRtIiwKKwkJLm9tYXBfY2hpcCA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDM0MzApCisJfSwKKwl7CisJCS5wd3JkbV9uYW1lID0gIml2YTJfcHdyZG0iLAorCQkub21hcF9jaGlwID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMzQzMCkKKwl9LAorCXsKKwkJLnB3cmRtX25hbWUgPSAibXB1X3B3cmRtIiwKKwkJLm9tYXBfY2hpcCA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDM0MzApCisJfSwKKwl7CisJCS5wd3JkbV9uYW1lID0gIndrdXBfcHdyZG0iLAorCQkub21hcF9jaGlwID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMzQzMCkKKwl9LAorCXsgTlVMTCB9LAorfTsKKworLyoKKyAqIDM0MzAgUE1fV0tERVBfTVBVOiBDT1JFLCBJVkEyLCBEU1MsIFBFUgorICovCitzdGF0aWMgc3RydWN0IHB3cmRtX2RlcCBtcHVfMzR4eF93a2RlcHNbXSA9IHsKKwl7CisJCS5wd3JkbV9uYW1lID0gImNvcmVfcHdyZG0iLAorCQkub21hcF9jaGlwID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMzQzMCkKKwl9LAorCXsKKwkJLnB3cmRtX25hbWUgPSAiaXZhMl9wd3JkbSIsCisJCS5vbWFwX2NoaXAgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAzNDMwKQorCX0sCisJeworCQkucHdyZG1fbmFtZSA9ICJkc3NfcHdyZG0iLAorCQkub21hcF9jaGlwID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMzQzMCkKKwl9LAorCXsKKwkJLnB3cmRtX25hbWUgPSAicGVyX3B3cmRtIiwKKwkJLm9tYXBfY2hpcCA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDM0MzApCisJfSwKKwl7IE5VTEwgfSwKK307CisKKy8qCisgKiAzNDMwIFBNX1dLREVQX0lWQTI6IENPUkUsIE1QVSwgV0tVUCwgRFNTLCBQRVIKKyAqLworc3RhdGljIHN0cnVjdCBwd3JkbV9kZXAgaXZhMl93a2RlcHNbXSA9IHsKKwl7CisJCS5wd3JkbV9uYW1lID0gImNvcmVfcHdyZG0iLAorCQkub21hcF9jaGlwID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMzQzMCkKKwl9LAorCXsKKwkJLnB3cmRtX25hbWUgPSAibXB1X3B3cmRtIiwKKwkJLm9tYXBfY2hpcCA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDM0MzApCisJfSwKKwl7CisJCS5wd3JkbV9uYW1lID0gIndrdXBfcHdyZG0iLAorCQkub21hcF9jaGlwID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMzQzMCkKKwl9LAorCXsKKwkJLnB3cmRtX25hbWUgPSAiZHNzX3B3cmRtIiwKKwkJLm9tYXBfY2hpcCA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDM0MzApCisJfSwKKwl7CisJCS5wd3JkbV9uYW1lID0gInBlcl9wd3JkbSIsCisJCS5vbWFwX2NoaXAgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAzNDMwKQorCX0sCisJeyBOVUxMIH0sCit9OworCisKKy8qIDM0MzAgUE1fV0tERVBfe0NBTSxEU1N9OiBJVkEyLCBNUFUsIFdLVVAgKi8KK3N0YXRpYyBzdHJ1Y3QgcHdyZG1fZGVwIGNhbV9kc3Nfd2tkZXBzW10gPSB7CisJeworCQkucHdyZG1fbmFtZSA9ICJpdmEyX3B3cmRtIiwKKwkJLm9tYXBfY2hpcCA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDM0MzApCisJfSwKKwl7CisJCS5wd3JkbV9uYW1lID0gIm1wdV9wd3JkbSIsCisJCS5vbWFwX2NoaXAgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAzNDMwKQorCX0sCisJeworCQkucHdyZG1fbmFtZSA9ICJ3a3VwX3B3cmRtIiwKKwkJLm9tYXBfY2hpcCA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDM0MzApCisJfSwKKwl7IE5VTEwgfSwKK307CisKKy8qIDM0MzA6IFBNX1dLREVQX05FT046IE1QVSAqLworc3RhdGljIHN0cnVjdCBwd3JkbV9kZXAgbmVvbl93a2RlcHNbXSA9IHsKKwl7CisJCS5wd3JkbV9uYW1lID0gIm1wdV9wd3JkbSIsCisJCS5vbWFwX2NoaXAgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAzNDMwKQorCX0sCisJeyBOVUxMIH0sCit9OworCisKKy8qIFNsZWVwIGRlcGVuZGVuY3kgc291cmNlIGFycmF5cyBmb3IgMzR4eC1zcGVjaWZpYyBwd3JkbXMgLSAzNFhYIG9ubHkgKi8KKworLyoKKyAqIDM0MzA6IENNX1NMRUVQREVQX3tEU1MsUEVSfTogTVBVLCBJVkEKKyAqIDM0MzBFUzI6IENNX1NMRUVQREVQX1VTQkhPU1Q6IE1QVSwgSVZBCisgKi8KK3N0YXRpYyBzdHJ1Y3QgcHdyZG1fZGVwIGRzc19wZXJfdXNiaG9zdF9zbGVlcGRlcHNbXSA9IHsKKwl7CisJCS5wd3JkbV9uYW1lID0gIm1wdV9wd3JkbSIsCisJCS5vbWFwX2NoaXAgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAzNDMwKQorCX0sCisJeworCQkucHdyZG1fbmFtZSA9ICJpdmEyX3B3cmRtIiwKKwkJLm9tYXBfY2hpcCA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDM0MzApCisJfSwKKwl7IE5VTEwgfSwKK307CisKKworLyoKKyAqIFBvd2VyZG9tYWlucworICovCisKK3N0YXRpYyBzdHJ1Y3QgcG93ZXJkb21haW4gaXZhMl9wd3JkbSA9IHsKKwkubmFtZQkJICA9ICJpdmEyX3B3cmRtIiwKKwkucHJjbV9vZmZzCSAgPSBPTUFQMzQzMF9JVkEyX01PRCwKKwkub21hcF9jaGlwCSAgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAzNDMwKSwKKwkuZGVwX2JpdAkgID0gT01BUDM0MzBfUE1fV0tERVBfTVBVX0VOX0lWQTJfU0hJRlQsCisJLndrZGVwX3NyY3MJICA9IGl2YTJfd2tkZXBzLAorCS5wd3JzdHMJCSAgPSBQV1JTVFNfT0ZGX1JFVF9PTiwKKwkucHdyc3RzX2xvZ2ljX3JldCA9IFBXUlNUU19PRkZfUkVULAorCS5iYW5rcwkJICA9IDQsCisJLnB3cnN0c19tZW1fcmV0CSAgPSB7CisJCVswXSA9IFBXUlNUU19PRkZfUkVULAorCQlbMV0gPSBQV1JTVFNfT0ZGX1JFVCwKKwkJWzJdID0gUFdSU1RTX09GRl9SRVQsCisJCVszXSA9IFBXUlNUU19PRkZfUkVULAorCX0sCisJLnB3cnN0c19tZW1fb24JICA9IHsKKwkJWzBdID0gUFdSRE1fUE9XRVJfT04sCisJCVsxXSA9IFBXUkRNX1BPV0VSX09OLAorCQlbMl0gPSBQV1JTVFNfT0ZGX09OLAorCQlbM10gPSBQV1JETV9QT1dFUl9PTiwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwb3dlcmRvbWFpbiBtcHVfMzR4eF9wd3JkbSA9IHsKKwkubmFtZQkJICA9ICJtcHVfcHdyZG0iLAorCS5wcmNtX29mZnMJICA9IE1QVV9NT0QsCisJLm9tYXBfY2hpcAkgID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMzQzMCksCisJLmRlcF9iaXQJICA9IE9NQVAzNDMwX0VOX01QVV9TSElGVCwKKwkud2tkZXBfc3JjcwkgID0gbXB1XzM0eHhfd2tkZXBzLAorCS5wd3JzdHMJCSAgPSBQV1JTVFNfT0ZGX1JFVF9PTiwKKwkucHdyc3RzX2xvZ2ljX3JldCA9IFBXUlNUU19PRkZfUkVULAorCS5iYW5rcwkJICA9IDEsCisJLnB3cnN0c19tZW1fcmV0CSAgPSB7CisJCVswXSA9IFBXUlNUU19PRkZfUkVULAorCX0sCisJLnB3cnN0c19tZW1fb24JICA9IHsKKwkJWzBdID0gUFdSU1RTX09GRl9PTiwKKwl9LAorfTsKKworLyogTm8gd2tkZXBzIG9yIHNsZWVwZGVwcyBmb3IgMzR4eCBjb3JlIGFwcGFyZW50bHkgKi8KK3N0YXRpYyBzdHJ1Y3QgcG93ZXJkb21haW4gY29yZV8zNHh4X3B3cmRtID0geworCS5uYW1lCQkgID0gImNvcmVfcHdyZG0iLAorCS5wcmNtX29mZnMJICA9IENPUkVfTU9ELAorCS5vbWFwX2NoaXAJICA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDM0MzApLAorCS5wd3JzdHMJCSAgPSBQV1JTVFNfT0ZGX1JFVF9PTiwKKwkuZGVwX2JpdAkgID0gT01BUDM0MzBfRU5fQ09SRV9TSElGVCwKKwkuYmFua3MJCSAgPSAyLAorCS5wd3JzdHNfbWVtX3JldAkgID0geworCQlbMF0gPSBQV1JTVFNfT0ZGX1JFVCwJIC8qIE1FTTFSRVRTVEFURSAqLworCQlbMV0gPSBQV1JTVFNfT0ZGX1JFVCwJIC8qIE1FTTJSRVRTVEFURSAqLworCX0sCisJLnB3cnN0c19tZW1fb24JICA9IHsKKwkJWzBdID0gUFdSU1RTX09GRl9SRVRfT04sIC8qIE1FTTFPTlNUQVRFICovCisJCVsxXSA9IFBXUlNUU19PRkZfUkVUX09OLCAvKiBNRU0yT05TVEFURSAqLworCX0sCit9OworCisvKiBBbm90aGVyIGNhc2Ugb2YgYml0IG5hbWUgY29sbGlzaW9ucyBiZXR3ZWVuIHNldmVyYWwgcmVnaXN0ZXJzOiBFTl9EU1MgKi8KK3N0YXRpYyBzdHJ1Y3QgcG93ZXJkb21haW4gZHNzX3B3cmRtID0geworCS5uYW1lCQkgID0gImRzc19wd3JkbSIsCisJLm9tYXBfY2hpcAkgID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMzQzMCksCisJLnByY21fb2ZmcwkgID0gT01BUDM0MzBfRFNTX01PRCwKKwkuZGVwX2JpdAkgID0gT01BUDM0MzBfUE1fV0tERVBfTVBVX0VOX0RTU19TSElGVCwKKwkud2tkZXBfc3JjcwkgID0gY2FtX2Rzc193a2RlcHMsCisJLnNsZWVwZGVwX3NyY3MJICA9IGRzc19wZXJfdXNiaG9zdF9zbGVlcGRlcHMsCisJLnB3cnN0cwkJICA9IFBXUlNUU19PRkZfUkVUX09OLAorCS5wd3JzdHNfbG9naWNfcmV0ID0gUFdSRE1fUE9XRVJfUkVULAorCS5iYW5rcwkJICA9IDEsCisJLnB3cnN0c19tZW1fcmV0CSAgPSB7CisJCVswXSA9IFBXUkRNX1BPV0VSX1JFVCwgLyogTUVNUkVUU1RBVEUgKi8KKwl9LAorCS5wd3JzdHNfbWVtX29uCSAgPSB7CisJCVswXSA9IFBXUkRNX1BPV0VSX09OLCAgLyogTUVNT05TVEFURSAqLworCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBvd2VyZG9tYWluIHNneF9wd3JkbSA9IHsKKwkubmFtZQkJICA9ICJzZ3hfcHdyZG0iLAorCS5wcmNtX29mZnMJICA9IE9NQVAzNDMwRVMyX1NHWF9NT0QsCisJLm9tYXBfY2hpcAkgID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMzQzMEVTMiksCisJLndrZGVwX3NyY3MJICA9IGdmeF9zZ3hfd2tkZXBzLAorCS5zbGVlcGRlcF9zcmNzCSAgPSBjYW1fZ2Z4X3NsZWVwZGVwcywKKwkvKiBYWFggVGhpcyBpcyBhY2N1cmF0ZSBmb3IgMzQzMCBTR1gsIGJ1dCB3aGF0IGFib3V0IEdGWD8gKi8KKwkucHdyc3RzCQkgID0gUFdSU1RTX09GRl9SRVRfT04sCisJLnB3cnN0c19sb2dpY19yZXQgPSBQV1JETV9QT1dFUl9SRVQsCisJLmJhbmtzCQkgID0gMSwKKwkucHdyc3RzX21lbV9yZXQJICA9IHsKKwkJWzBdID0gUFdSRE1fUE9XRVJfUkVULCAvKiBNRU1SRVRTVEFURSAqLworCX0sCisJLnB3cnN0c19tZW1fb24JICA9IHsKKwkJWzBdID0gUFdSRE1fUE9XRVJfT04sICAvKiBNRU1PTlNUQVRFICovCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcG93ZXJkb21haW4gY2FtX3B3cmRtID0geworCS5uYW1lCQkgID0gImNhbV9wd3JkbSIsCisJLm9tYXBfY2hpcAkgID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMzQzMCksCisJLnByY21fb2ZmcwkgID0gT01BUDM0MzBfQ0FNX01PRCwKKwkud2tkZXBfc3JjcwkgID0gY2FtX2Rzc193a2RlcHMsCisJLnNsZWVwZGVwX3NyY3MJICA9IGNhbV9nZnhfc2xlZXBkZXBzLAorCS5wd3JzdHMJCSAgPSBQV1JTVFNfT0ZGX1JFVF9PTiwKKwkucHdyc3RzX2xvZ2ljX3JldCA9IFBXUkRNX1BPV0VSX1JFVCwKKwkuYmFua3MJCSAgPSAxLAorCS5wd3JzdHNfbWVtX3JldAkgID0geworCQlbMF0gPSBQV1JETV9QT1dFUl9SRVQsIC8qIE1FTVJFVFNUQVRFICovCisJfSwKKwkucHdyc3RzX21lbV9vbgkgID0geworCQlbMF0gPSBQV1JETV9QT1dFUl9PTiwgIC8qIE1FTU9OU1RBVEUgKi8KKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwb3dlcmRvbWFpbiBwZXJfcHdyZG0gPSB7CisJLm5hbWUJCSAgPSAicGVyX3B3cmRtIiwKKwkucHJjbV9vZmZzCSAgPSBPTUFQMzQzMF9QRVJfTU9ELAorCS5vbWFwX2NoaXAJICA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDM0MzApLAorCS5kZXBfYml0CSAgPSBPTUFQMzQzMF9FTl9QRVJfU0hJRlQsCisJLndrZGVwX3NyY3MJICA9IHBlcl91c2Job3N0X3drZGVwcywKKwkuc2xlZXBkZXBfc3JjcwkgID0gZHNzX3Blcl91c2Job3N0X3NsZWVwZGVwcywKKwkucHdyc3RzCQkgID0gUFdSU1RTX09GRl9SRVRfT04sCisJLnB3cnN0c19sb2dpY19yZXQgPSBQV1JTVFNfT0ZGX1JFVCwKKwkuYmFua3MJCSAgPSAxLAorCS5wd3JzdHNfbWVtX3JldAkgID0geworCQlbMF0gPSBQV1JETV9QT1dFUl9SRVQsIC8qIE1FTVJFVFNUQVRFICovCisJfSwKKwkucHdyc3RzX21lbV9vbgkgID0geworCQlbMF0gPSBQV1JETV9QT1dFUl9PTiwgIC8qIE1FTU9OU1RBVEUgKi8KKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwb3dlcmRvbWFpbiBlbXVfcHdyZG0gPSB7CisJLm5hbWUJCT0gImVtdV9wd3JkbSIsCisJLnByY21fb2Zmcwk9IE9NQVAzNDMwX0VNVV9NT0QsCisJLm9tYXBfY2hpcAk9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDM0MzApLAorfTsKKworc3RhdGljIHN0cnVjdCBwb3dlcmRvbWFpbiBuZW9uX3B3cmRtID0geworCS5uYW1lCQkgID0gIm5lb25fcHdyZG0iLAorCS5wcmNtX29mZnMJICA9IE9NQVAzNDMwX05FT05fTU9ELAorCS5vbWFwX2NoaXAJICA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDM0MzApLAorCS53a2RlcF9zcmNzCSAgPSBuZW9uX3drZGVwcywKKwkucHdyc3RzCQkgID0gUFdSU1RTX09GRl9SRVRfT04sCisJLnB3cnN0c19sb2dpY19yZXQgPSBQV1JETV9QT1dFUl9SRVQsCit9OworCitzdGF0aWMgc3RydWN0IHBvd2VyZG9tYWluIHVzYmhvc3RfcHdyZG0gPSB7CisJLm5hbWUJCSAgPSAidXNiaG9zdF9wd3JkbSIsCisJLnByY21fb2ZmcwkgID0gT01BUDM0MzBFUzJfVVNCSE9TVF9NT0QsCisJLm9tYXBfY2hpcAkgID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMzQzMEVTMiksCisJLndrZGVwX3NyY3MJICA9IHBlcl91c2Job3N0X3drZGVwcywKKwkuc2xlZXBkZXBfc3JjcwkgID0gZHNzX3Blcl91c2Job3N0X3NsZWVwZGVwcywKKwkucHdyc3RzCQkgID0gUFdSU1RTX09GRl9SRVRfT04sCisJLnB3cnN0c19sb2dpY19yZXQgPSBQV1JETV9QT1dFUl9SRVQsCisJLmJhbmtzCQkgID0gMSwKKwkucHdyc3RzX21lbV9yZXQJICA9IHsKKwkJWzBdID0gUFdSRE1fUE9XRVJfUkVULCAvKiBNRU1SRVRTVEFURSAqLworCX0sCisJLnB3cnN0c19tZW1fb24JICA9IHsKKwkJWzBdID0gUFdSRE1fUE9XRVJfT04sICAvKiBNRU1PTlNUQVRFICovCisJfSwKK307CisKKyNlbmRpZiAgICAvKiBDT05GSUdfQVJDSF9PTUFQMzRYWCAqLworCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9wcmNtLWNvbW1vbi5oIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9wcmNtLWNvbW1vbi5oCmluZGV4IDU0YzMyZjQuLjRhMzI4MjIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvcHJjbS1jb21tb24uaAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3ByY20tY29tbW9uLmgKQEAgLTMxMiw3ICszMTIsOCBAQAogI2RlZmluZSBPTUFQMzQzMF9TVF9HUFQyCQkJCSgxIDw8IDMpCiAKIC8qIENNX1NMRUVQREVQX1BFUiwgUE1fV0tERVBfSVZBMiwgUE1fV0tERVBfTVBVLCBQTV9XS0RFUF9QRVIgc2hhcmVkIGJpdHMgKi8KLSNkZWZpbmUgT01BUDM0MzBfRU5fQ09SRQkJCQkoMSA8PCAwKQorI2RlZmluZSBPTUFQMzQzMF9FTl9DT1JFX1NISUZUCQkJCTAKKyNkZWZpbmUgT01BUDM0MzBfRU5fQ09SRV9NQVNLCQkJCSgxIDw8IDApCiAKICNlbmRpZgogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL3BybS1yZWdiaXRzLTI0eHguaCBiL2FyY2gvYXJtL21hY2gtb21hcDIvcHJtLXJlZ2JpdHMtMjR4eC5oCmluZGV4IGM2ZDE3YTMuLjQwMDIwNTEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvcHJtLXJlZ2JpdHMtMjR4eC5oCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvcHJtLXJlZ2JpdHMtMjR4eC5oCkBAIC0yOSw4ICsyOSwxMCBAQAogI2RlZmluZSBPTUFQMjRYWF9XS1VQMV9FTgkJCQkoMSA8PCAwKQogCiAvKiBQTV9XS0RFUF9HRlgsIFBNX1dLREVQX01QVSwgUE1fV0tERVBfRFNQLCBQTV9XS0RFUF9NRE0gc2hhcmVkIGJpdHMgKi8KLSNkZWZpbmUgT01BUDI0WFhfRU5fTVBVCQkJCQkoMSA8PCAxKQotI2RlZmluZSBPTUFQMjRYWF9FTl9DT1JFCQkJCSgxIDw8IDApCisjZGVmaW5lIE9NQVAyNFhYX0VOX01QVV9TSElGVAkJCQkxCisjZGVmaW5lIE9NQVAyNFhYX0VOX01QVV9NQVNLCQkJCSgxIDw8IDEpCisjZGVmaW5lIE9NQVAyNFhYX0VOX0NPUkVfU0hJRlQgCQkJCTAKKyNkZWZpbmUgT01BUDI0WFhfRU5fQ09SRV9NQVNLCQkJCSgxIDw8IDApCiAKIC8qCiAgKiBQTV9QV1NUQ1RSTF9NUFUsIFBNX1BXU1RDVFJMX0dGWCwgUE1fUFdTVENUUkxfRFNQLCBQTV9QV1NUQ1RSTF9NRE0KQEAgLTE0MCw4ICsxNDIsMTAgQEAKIC8qIDI0MzAgY2FsbHMgR0xPQkFMV01QVV9SU1QgIkdMT0JBTFdBUk1fUlNUIiBpbnN0ZWFkICovCiAKIC8qIFBNX1dLREVQX01QVSBzcGVjaWZpYyBiaXRzICovCi0jZGVmaW5lIE9NQVAyNDMwX1BNX1dLREVQX01QVV9FTl9NRE0JCQkoMSA8PCA1KQotI2RlZmluZSBPTUFQMjRYWF9QTV9XS0RFUF9NUFVfRU5fRFNQCQkJKDEgPDwgMikKKyNkZWZpbmUgT01BUDI0MzBfUE1fV0tERVBfTVBVX0VOX01ETV9TSElGVAkJNQorI2RlZmluZSBPTUFQMjQzMF9QTV9XS0RFUF9NUFVfRU5fTURNX01BU0sJCSgxIDw8IDUpCisjZGVmaW5lIE9NQVAyNFhYX1BNX1dLREVQX01QVV9FTl9EU1BfU0hJRlQJCTIKKyNkZWZpbmUgT01BUDI0WFhfUE1fV0tERVBfTVBVX0VOX0RTUF9NQVNLCQkoMSA8PCAyKQogCiAvKiBQTV9FVkdFTkNUUkxfTVBVIHNwZWNpZmljIGJpdHMgKi8KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9wcm0tcmVnYml0cy0zNHh4LmggYi9hcmNoL2FybS9tYWNoLW9tYXAyL3BybS1yZWdiaXRzLTM0eHguaAppbmRleCBiNDY4NmJjLi41YjVlY2ZlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL3BybS1yZWdiaXRzLTM0eHguaAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3BybS1yZWdiaXRzLTM0eHguaApAQCAtNjgsNyArNjgsOCBAQAogI2RlZmluZSBPTUFQMzQzMF9WUElOSURMRQkJCQkoMSA8PCAwKQogCiAvKiBQTV9XS0RFUF9JVkEyLCBQTV9XS0RFUF9NUFUgc2hhcmVkIGJpdHMgKi8KLSNkZWZpbmUgT01BUDM0MzBfRU5fUEVSCQkJCQkoMSA8PCA3KQorI2RlZmluZSBPTUFQMzQzMF9FTl9QRVJfU0hJRlQJCQkJNworI2RlZmluZSBPTUFQMzQzMF9FTl9QRVJfTUFTSwkJCQkoMSA8PCA3KQogCiAvKiBQTV9QV1NUQ1RSTF9JVkEyLCBQTV9QV1NUQ1RSTF9NUFUsIFBNX1BXU1RDVFJMX0NPUkUgc2hhcmVkIGJpdHMgKi8KICNkZWZpbmUgT01BUDM0MzBfTUVNT1JZQ0hBTkdFCQkJCSgxIDw8IDMpCkBAIC03Nyw3ICs3OCw3IEBACiAjZGVmaW5lIE9NQVAzNDMwX0xPR0lDU1RBVEVTVAkJCQkoMSA8PCAyKQogCiAvKiBQTV9QUkVQV1NUU1RfSVZBMiwgUE1fUFJFUFdTVFNUX0NPUkUgc2hhcmVkIGJpdHMgKi8KLSNkZWZpbmUgT01BUDM0MzBfTEFTVExPR0lDU1RBVEVFTlRFUkVECQkJCSgxIDw8IDIpCisjZGVmaW5lIE9NQVAzNDMwX0xBU1RMT0dJQ1NUQVRFRU5URVJFRAkJCSgxIDw8IDIpCiAKIC8qCiAgKiBQTV9QUkVQV1NUU1RfSVZBMiwgUE1fUFJFUFdTVFNUX01QVSwgUE1fUFJFUFdTVFNUX0NPUkUsCkBAIC0yNzgsOCArMjc5LDEwIEBACiAjZGVmaW5lIE9NQVAzNDMwX0VNVUxBVElPTl9NUFVfUlNUCQkJKDEgPDwgMTEpCiAKIC8qIFBNX1dLREVQX01QVSBzcGVjaWZpYyBiaXRzICovCi0jZGVmaW5lIE9NQVAzNDMwX1BNX1dLREVQX01QVV9FTl9EU1MJCQkoMSA8PCA1KQotI2RlZmluZSBPTUFQMzQzMF9QTV9XS0RFUF9NUFVfRU5fSVZBMgkJCSgxIDw8IDIpCisjZGVmaW5lIE9NQVAzNDMwX1BNX1dLREVQX01QVV9FTl9EU1NfU0hJRlQJCTUKKyNkZWZpbmUgT01BUDM0MzBfUE1fV0tERVBfTVBVX0VOX0RTU19NQVNLCQkoMSA8PCA1KQorI2RlZmluZSBPTUFQMzQzMF9QTV9XS0RFUF9NUFVfRU5fSVZBMl9TSElGVAkJMgorI2RlZmluZSBPTUFQMzQzMF9QTV9XS0RFUF9NUFVfRU5fSVZBMl9NQVNLCQkoMSA8PCAyKQogCiAvKiBQTV9FVkdFTkNUUkxfTVBVICovCiAjZGVmaW5lIE9NQVAzNDMwX09GRkxPQURNT0RFX1NISUZUCQkJMwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9wcm0uaCBiL2FyY2gvYXJtL21hY2gtb21hcDIvcHJtLmgKaW5kZXggYmJmNDFmYy4uZTRkYzRiMSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9wcm0uaAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3BybS5oCkBAIC0xOCw3ICsxOCw3IEBACiAKICNpZm5kZWYgX19BU1NFTUJMRVJfXwogI2RlZmluZSBPTUFQX1BSTV9SRUdBRERSKG1vZHVsZSwgcmVnKQkJCQkJXAotCSh2b2lkIF9faW9tZW0gKilJT19BRERSRVNTKE9NQVAyX1BSTV9CQVNFICsgKG1vZHVsZSkgKyAocmVnKSkKKwkJCUlPX0FERFJFU1MoT01BUDJfUFJNX0JBU0UgKyAobW9kdWxlKSArIChyZWcpKQogI2Vsc2UKICNkZWZpbmUgT01BUDI0MjBfUFJNX1JFR0FERFIobW9kdWxlLCByZWcpCQkJCVwKIAkJCUlPX0FERFJFU1MoT01BUDI0MjBfUFJNX0JBU0UgKyAobW9kdWxlKSArIChyZWcpKQpAQCAtMzA1LDcgKzMwNSw4IEBACiAgKiAzNDMwOiBQTV9XS0RFUF9JVkEyLCBQTV9XS0RFUF9HRlgsIFBNX1dLREVQX0RTUywgUE1fV0tERVBfQ0FNLAogICoJIFBNX1dLREVQX1BFUgogICovCi0jZGVmaW5lIE9NQVBfRU5fV0tVUAkJCQkJKDEgPDwgNCkKKyNkZWZpbmUgT01BUF9FTl9XS1VQX1NISUZUCQkJCTQKKyNkZWZpbmUgT01BUF9FTl9XS1VQX01BU0sJCQkJKDEgPDwgNCkKIAogLyoKICAqIDI0WFg6IFBNX1BXU1RDVFJMX01QVSwgUE1fUFdTVENUUkxfQ09SRSwgUE1fUFdTVENUUkxfR0ZYLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9zZXJpYWwuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvc2VyaWFsLmMKaW5kZXggN2Q5NDQ0YS4uNGRjZjM5YzIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvc2VyaWFsLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9zZXJpYWwuYwpAQCAtMyw3ICszLDcgQEAKICAqCiAgKiBPTUFQMiBzZXJpYWwgc3VwcG9ydC4KICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUgTm9raWEgQ29ycG9yYXRpb24KKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA4IE5va2lhIENvcnBvcmF0aW9uCiAgKiBBdXRob3I6IFBhdWwgTXVuZHQgPHBhdWwubXVuZHRAbm9raWEuY29tPgogICoKICAqIEJhc2VkIG9mZiBvZiBhcmNoL2FybS9tYWNoLW9tYXAvb21hcDEvc2VyaWFsLmMKQEAgLTIyLDM4ICsyMiwzNCBAQAogI2luY2x1ZGUgPG1hY2gvY29tbW9uLmg+CiAjaW5jbHVkZSA8bWFjaC9ib2FyZC5oPgogCi1zdGF0aWMgc3RydWN0IGNsayAqIHVhcnQxX2ljayA9IE5VTEw7Ci1zdGF0aWMgc3RydWN0IGNsayAqIHVhcnQxX2ZjayA9IE5VTEw7Ci1zdGF0aWMgc3RydWN0IGNsayAqIHVhcnQyX2ljayA9IE5VTEw7Ci1zdGF0aWMgc3RydWN0IGNsayAqIHVhcnQyX2ZjayA9IE5VTEw7Ci1zdGF0aWMgc3RydWN0IGNsayAqIHVhcnQzX2ljayA9IE5VTEw7Ci1zdGF0aWMgc3RydWN0IGNsayAqIHVhcnQzX2ZjayA9IE5VTEw7CitzdGF0aWMgc3RydWN0IGNsayAqdWFydF9pY2tbT01BUF9NQVhfTlJfUE9SVFNdOworc3RhdGljIHN0cnVjdCBjbGsgKnVhcnRfZmNrW09NQVBfTUFYX05SX1BPUlRTXTsKIAogc3RhdGljIHN0cnVjdCBwbGF0X3NlcmlhbDgyNTBfcG9ydCBzZXJpYWxfcGxhdGZvcm1fZGF0YVtdID0gewogCXsKLQkJLm1lbWJhc2UJPSAoY2hhciAqKUlPX0FERFJFU1MoT01BUF9VQVJUMV9CQVNFKSwKLQkJLm1hcGJhc2UJPSAodW5zaWduZWQgbG9uZylPTUFQX1VBUlQxX0JBU0UsCisJCS5tZW1iYXNlCT0gSU9fQUREUkVTUyhPTUFQX1VBUlQxX0JBU0UpLAorCQkubWFwYmFzZQk9IE9NQVBfVUFSVDFfQkFTRSwKIAkJLmlycQkJPSA3MiwKIAkJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GLAogCQkuaW90eXBlCQk9IFVQSU9fTUVNLAogCQkucmVnc2hpZnQJPSAyLAotCQkudWFydGNsawk9IE9NQVAxNlhYX0JBU0VfQkFVRCAqIDE2LAorCQkudWFydGNsawk9IE9NQVAyNFhYX0JBU0VfQkFVRCAqIDE2LAogCX0sIHsKLQkJLm1lbWJhc2UJPSAoY2hhciAqKUlPX0FERFJFU1MoT01BUF9VQVJUMl9CQVNFKSwKLQkJLm1hcGJhc2UJPSAodW5zaWduZWQgbG9uZylPTUFQX1VBUlQyX0JBU0UsCisJCS5tZW1iYXNlCT0gSU9fQUREUkVTUyhPTUFQX1VBUlQyX0JBU0UpLAorCQkubWFwYmFzZQk9IE9NQVBfVUFSVDJfQkFTRSwKIAkJLmlycQkJPSA3MywKIAkJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GLAogCQkuaW90eXBlCQk9IFVQSU9fTUVNLAogCQkucmVnc2hpZnQJPSAyLAotCQkudWFydGNsawk9IE9NQVAxNlhYX0JBU0VfQkFVRCAqIDE2LAorCQkudWFydGNsawk9IE9NQVAyNFhYX0JBU0VfQkFVRCAqIDE2LAogCX0sIHsKLQkJLm1lbWJhc2UJPSAoY2hhciAqKUlPX0FERFJFU1MoT01BUF9VQVJUM19CQVNFKSwKLQkJLm1hcGJhc2UJPSAodW5zaWduZWQgbG9uZylPTUFQX1VBUlQzX0JBU0UsCisJCS5tZW1iYXNlCT0gSU9fQUREUkVTUyhPTUFQX1VBUlQzX0JBU0UpLAorCQkubWFwYmFzZQk9IE9NQVBfVUFSVDNfQkFTRSwKIAkJLmlycQkJPSA3NCwKIAkJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GLAogCQkuaW90eXBlCQk9IFVQSU9fTUVNLAogCQkucmVnc2hpZnQJPSAyLAotCQkudWFydGNsawk9IE9NQVAxNlhYX0JBU0VfQkFVRCAqIDE2LAorCQkudWFydGNsawk9IE9NQVAyNFhYX0JBU0VfQkFVRCAqIDE2LAogCX0sIHsKIAkJLmZsYWdzCQk9IDAKIAl9CkBAIC03MCw3ICs2Niw3IEBACiAJCQkJICAgIGludCB2YWx1ZSkKIHsKIAlvZmZzZXQgPDw9IHAtPnJlZ3NoaWZ0OwotCV9fcmF3X3dyaXRlYih2YWx1ZSwgKHVuc2lnbmVkIGxvbmcpKHAtPm1lbWJhc2UgKyBvZmZzZXQpKTsKKwlfX3Jhd193cml0ZWIodmFsdWUsIHAtPm1lbWJhc2UgKyBvZmZzZXQpOwogfQogCiAvKgpAQCAtODYsMTAgKzgyLDI3IEBACiAJc2VyaWFsX3dyaXRlX3JlZyhwLCBVQVJUX09NQVBfU1lTQywgKDB4MDIgPDwgMykgfCAoMSA8PCAyKSB8ICgxIDw8IDApKTsKIH0KIAotdm9pZCBfX2luaXQgb21hcF9zZXJpYWxfaW5pdCgpCit2b2lkIG9tYXBfc2VyaWFsX2VuYWJsZV9jbG9ja3MoaW50IGVuYWJsZSkKK3sKKwlpbnQgaTsKKwlmb3IgKGkgPSAwOyBpIDwgT01BUF9NQVhfTlJfUE9SVFM7IGkrKykgeworCQlpZiAodWFydF9pY2tbaV0gJiYgdWFydF9mY2tbaV0pIHsKKwkJCWlmIChlbmFibGUpIHsKKwkJCQljbGtfZW5hYmxlKHVhcnRfaWNrW2ldKTsKKwkJCQljbGtfZW5hYmxlKHVhcnRfZmNrW2ldKTsKKwkJCX0gZWxzZSB7CisJCQkJY2xrX2Rpc2FibGUodWFydF9pY2tbaV0pOworCQkJCWNsa19kaXNhYmxlKHVhcnRfZmNrW2ldKTsKKwkJCX0KKwkJfQorCX0KK30KKwordm9pZCBfX2luaXQgb21hcF9zZXJpYWxfaW5pdCh2b2lkKQogewogCWludCBpOwogCWNvbnN0IHN0cnVjdCBvbWFwX3VhcnRfY29uZmlnICppbmZvOworCWNoYXIgbmFtZVsxNl07CiAKIAkvKgogCSAqIE1ha2Ugc3VyZSB0aGUgc2VyaWFsIHBvcnRzIGFyZSBtdXhlZCBvbiBhdCB0aGlzIHBvaW50LgpAQCAtOTcsOCArMTEwLDcgQEAKIAkgKiBpZiBub3QgbmVlZGVkLgogCSAqLwogCi0JaW5mbyA9IG9tYXBfZ2V0X2NvbmZpZyhPTUFQX1RBR19VQVJULAotCQkJICAgICAgIHN0cnVjdCBvbWFwX3VhcnRfY29uZmlnKTsKKwlpbmZvID0gb21hcF9nZXRfY29uZmlnKE9NQVBfVEFHX1VBUlQsIHN0cnVjdCBvbWFwX3VhcnRfY29uZmlnKTsKIAogCWlmIChpbmZvID09IE5VTEwpCiAJCXJldHVybjsKQEAgLTEwNyw1OCArMTE5LDI2IEBACiAJCXN0cnVjdCBwbGF0X3NlcmlhbDgyNTBfcG9ydCAqcCA9IHNlcmlhbF9wbGF0Zm9ybV9kYXRhICsgaTsKIAogCQlpZiAoIShpbmZvLT5lbmFibGVkX3VhcnRzICYgKDEgPDwgaSkpKSB7Ci0JCQlwLT5tZW1iYXNlID0gMDsKKwkJCXAtPm1lbWJhc2UgPSBOVUxMOwogCQkJcC0+bWFwYmFzZSA9IDA7CiAJCQljb250aW51ZTsKIAkJfQogCi0JCXN3aXRjaCAoaSkgewotCQljYXNlIDA6Ci0JCQl1YXJ0MV9pY2sgPSBjbGtfZ2V0KE5VTEwsICJ1YXJ0MV9pY2siKTsKLQkJCWlmIChJU19FUlIodWFydDFfaWNrKSkKLQkJCQlwcmludGsoIkNvdWxkIG5vdCBnZXQgdWFydDFfaWNrXG4iKTsKLQkJCWVsc2UgewotCQkJCWNsa19lbmFibGUodWFydDFfaWNrKTsKLQkJCX0KKwkJc3ByaW50ZihuYW1lLCAidWFydCVkX2ljayIsIGkrMSk7CisJCXVhcnRfaWNrW2ldID0gY2xrX2dldChOVUxMLCBuYW1lKTsKKwkJaWYgKElTX0VSUih1YXJ0X2lja1tpXSkpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiQ291bGQgbm90IGdldCB1YXJ0JWRfaWNrXG4iLCBpKzEpOworCQkJdWFydF9pY2tbaV0gPSBOVUxMOworCQl9IGVsc2UKKwkJCWNsa19lbmFibGUodWFydF9pY2tbaV0pOwogCi0JCQl1YXJ0MV9mY2sgPSBjbGtfZ2V0KE5VTEwsICJ1YXJ0MV9mY2siKTsKLQkJCWlmIChJU19FUlIodWFydDFfZmNrKSkKLQkJCQlwcmludGsoIkNvdWxkIG5vdCBnZXQgdWFydDFfZmNrXG4iKTsKLQkJCWVsc2UgewotCQkJCWNsa19lbmFibGUodWFydDFfZmNrKTsKLQkJCX0KLQkJCWJyZWFrOwotCQljYXNlIDE6Ci0JCQl1YXJ0Ml9pY2sgPSBjbGtfZ2V0KE5VTEwsICJ1YXJ0Ml9pY2siKTsKLQkJCWlmIChJU19FUlIodWFydDJfaWNrKSkKLQkJCQlwcmludGsoIkNvdWxkIG5vdCBnZXQgdWFydDJfaWNrXG4iKTsKLQkJCWVsc2UgewotCQkJCWNsa19lbmFibGUodWFydDJfaWNrKTsKLQkJCX0KLQotCQkJdWFydDJfZmNrID0gY2xrX2dldChOVUxMLCAidWFydDJfZmNrIik7Ci0JCQlpZiAoSVNfRVJSKHVhcnQyX2ZjaykpCi0JCQkJcHJpbnRrKCJDb3VsZCBub3QgZ2V0IHVhcnQyX2Zja1xuIik7Ci0JCQllbHNlIHsKLQkJCQljbGtfZW5hYmxlKHVhcnQyX2Zjayk7Ci0JCQl9Ci0JCQlicmVhazsKLQkJY2FzZSAyOgotCQkJdWFydDNfaWNrID0gY2xrX2dldChOVUxMLCAidWFydDNfaWNrIik7Ci0JCQlpZiAoSVNfRVJSKHVhcnQzX2ljaykpCi0JCQkJcHJpbnRrKCJDb3VsZCBub3QgZ2V0IHVhcnQzX2lja1xuIik7Ci0JCQllbHNlIHsKLQkJCQljbGtfZW5hYmxlKHVhcnQzX2ljayk7Ci0JCQl9Ci0KLQkJCXVhcnQzX2ZjayA9IGNsa19nZXQoTlVMTCwgInVhcnQzX2ZjayIpOwotCQkJaWYgKElTX0VSUih1YXJ0M19mY2spKQotCQkJCXByaW50aygiQ291bGQgbm90IGdldCB1YXJ0M19mY2tcbiIpOwotCQkJZWxzZSB7Ci0JCQkJY2xrX2VuYWJsZSh1YXJ0M19mY2spOwotCQkJfQotCQkJYnJlYWs7Ci0JCX0KKwkJc3ByaW50ZihuYW1lLCAidWFydCVkX2ZjayIsIGkrMSk7CisJCXVhcnRfZmNrW2ldID0gY2xrX2dldChOVUxMLCBuYW1lKTsKKwkJaWYgKElTX0VSUih1YXJ0X2Zja1tpXSkpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiQ291bGQgbm90IGdldCB1YXJ0JWRfZmNrXG4iLCBpKzEpOworCQkJdWFydF9mY2tbaV0gPSBOVUxMOworCQl9IGVsc2UKKwkJCWNsa19lbmFibGUodWFydF9mY2tbaV0pOwogCiAJCW9tYXBfc2VyaWFsX3Jlc2V0KHApOwogCX0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvc2xlZXAuUyBiL2FyY2gvYXJtL21hY2gtb21hcDIvc2xlZXAuUwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODdhNzA2Zi4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL3NsZWVwLlMKKysrIC9kZXYvbnVsbApAQCAtMSwxMjggKzAsMCBAQAotLyoKLSAqIGxpbnV4L2FyY2gvYXJtL21hY2gtb21hcDIvc2xlZXAuUwotICoKLSAqIChDKSBDb3B5cmlnaHQgMjAwNAotICogVGV4YXMgSW5zdHJ1bWVudHMsIDx3d3cudGkuY29tPgotICogUmljaGFyZCBXb29kcnVmZiA8ci13b29kcnVmZjJAdGkuY29tPgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgotICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiAvUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAotICogTUEgMDIxMTEtMTMwNyBVU0EKLSAqLwotCi0jaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgotI2luY2x1ZGUgPGFzbS9hc3NlbWJsZXIuaD4KLSNpbmNsdWRlIDxtYWNoL2lvLmg+Ci0jaW5jbHVkZSA8bWFjaC9wbS5oPgotCi0jaW5jbHVkZSAic2RyYy5oIgotCi0vKiBGaXJzdCBhZGRyZXNzIG9mIHJlc2VydmVkIGFkZHJlc3Mgc3BhY2U/ICBhcHBhcmVudGx5IHZhbGlkIGZvciBPTUFQMiAmIDMgKi8KLSNkZWZpbmUgQV9TRFJDMF9WCQkoMHhDMDAwMDAwMCkKLQotCS50ZXh0Ci0KLS8qCi0gKiBGb3JjZXMgT01BUCBpbnRvIGlkbGUgc3RhdGUKLSAqCi0gKiBvbWFwMjR4eF9pZGxlX2xvb3Bfc3VzcGVuZCgpIC0gVGhpcyBiaXQgb2YgY29kZSBqdXN0IGV4ZWN1dGVzIHRoZSBXRkkKLSAqIGZvciBub3JtYWwgaWRsZXMuCi0gKgotICogTm90ZTogVGhpcyBjb2RlIGdldCdzIGNvcGllZCB0byBpbnRlcm5hbCBTUkFNIGF0IGJvb3QuIFdoZW4gdGhlIE9NQVAKLSAqCSB3YWtlcyB1cCBpdCBjb250aW51ZXMgZXhlY3V0aW9uIGF0IHRoZSBwb2ludCBpdCB3ZW50IHRvIHNsZWVwLgotICovCi1FTlRSWShvbWFwMjR4eF9pZGxlX2xvb3Bfc3VzcGVuZCkKLQlzdG1mZAlzcCEsIHtyMCwgbHJ9CQlAIHNhdmUgcmVnaXN0ZXJzIG9uIHN0YWNrCi0JbW92CXIwLCAjMAkJCUAgY2xlYXIgZm9yIG1jciBzZXR1cAotCW1jcglwMTUsIDAsIHIwLCBjNywgYzAsIDQJQCB3YWl0IGZvciBpbnRlcnJ1cHQKLQlsZG1mZAlzcCEsIHtyMCwgcGN9CQlAIHJlc3RvcmUgcmVncyBhbmQgcmV0dXJuCi0KLUVOVFJZKG9tYXAyNHh4X2lkbGVfbG9vcF9zdXNwZW5kX3N6KQotCS53b3JkCS4gLSBvbWFwMjR4eF9pZGxlX2xvb3Bfc3VzcGVuZAotCi0vKgotICogb21hcDI0MnhfY3B1X3N1c3BlbmQoKSAtIEZvcmNlcyBPTUFQIGludG8gZGVlcCBzbGVlcCBzdGF0ZSBieSBjb21wbGV0aW5nCi0gKiBTRFJDIHNodXRkb3duIHRoZW4gQVJNIHNodXRkb3duLiAgVXBvbiB3YWtlIE1QVSBpcyBiYWNrIG9uIHNvIGp1c3QgcmVzdG9yZQotICogU0RSQy4KLSAqCi0gKiBJbnB1dDoKLSAqIFIwIDoJRExMIGN0cmwgdmFsdWUgcHJlLVNsZWVwCi0gKiBSMSA6IFByb2Nlc3NvcitSZXZpc2lvbgotICoJMjQyMDogMHgyMSA9IDI0MnhFUzEsIDB4MjYgPSAyNDJ4RVMyLjIKLSAqCTI0MzA6IDB4MzEgPSAyNDMwRVMxLCAweDMyID0gMjQzMEVTMgotICoKLSAqIFRoZSBpZiB0aGUgRFBMTCBpcyBnb2luZyB0byBBdXRvSWRsZS4gSXQgc2VlbXMgbGlrZSB0aGUgRFBMTCBtYXkgYmUgYmFjayBvbgotICogd2hlbiB3ZSBnZXQgY2FsbGVkLCBidXQgdGhlIERMTCBwcm9iYWJseSBpc24ndC4gIFdlIHdpbGwgd2FpdCBhIGJpdCBtb3JlIGluCi0gKiBjYXNlIHRoZSBEUExMIGlzbid0IHF1aXRlIHRoZXJlIHlldC4gVGhlIGNvZGUgd2lsbCB3YWl0IG9uIERMTCBmb3IgRERSIGV2ZW4KLSAqIGlmIGluIHVubG9ja2VkIG1vZGUuCi0gKgotICogRm9yIGxlc3MgdGhhbiAyNDJ4LUVTMi4yIHVwb24gd2FrZSBmcm9tIGEgc2xlZXAgbW9kZSB3aGVyZSB0aGUgZXh0ZXJuYWwKLSAqIG9zY2lsbGF0b3Igd2FzIHN0b3BwZWQsIGEgdGltaW5nIGJ1ZyBleGlzdHMgd2hlcmUgYSBub24tc3RhYmlsaXplZCAxMk1IegotICogY2xvY2sgY2FuIHBhc3MgaW50byB0aGUgUFJDTSBjYW4gY2F1c2UgcHJvYmxlbXMgYXQgRFNQIGFuZCBJVkEuCi0gKiBUbyB3b3JrIGFyb3VuZCB0aGlzIHRoZSBjb2RlIHdpbGwgc3dpdGNoIHRvIHRoZSAzMmtIeiBzb3VyY2UgcHJpb3IgdG8gc2xlZXAuCi0gKiBQb3N0IHNsZWVwIHdlIHdpbGwgc2hpZnQgYmFjayB0byB1c2luZyB0aGUgRFBMTC4gIEFwcGFyZW50bHksCi0gKiBDTV9JRExFU1RfQ0xLR0VOIGRvZXMgbm90IHJlZmxlY3QgdGhlIGZ1bGwgY2xvY2sgY2hhbmdlIHNvIHlvdSBuZWVkIHRvIHdhaXQKLSAqIDN4MTJNSHogKyAzeDMya0h6IGNsb2NrcyBmb3IgYSBmdWxsIHN3aXRjaC4KLSAqCi0gKiBUaGUgRExMIGxvYWQgdmFsdWUgaXMgbm90IGtlcHQgaW4gUkVURU5USU9OIG9yIE9GRi4JSXQgbmVlZHMgdG8gYmUgcmVzdG9yZWQKLSAqIGF0IHdha2UKLSAqLwotRU5UUlkob21hcDI0eHhfY3B1X3N1c3BlbmQpCi0Jc3RtZmQJc3AhLCB7cjAgLSByMTIsIGxyfQlAIHNhdmUgcmVnaXN0ZXJzIG9uIHN0YWNrCi0JbW92CXIzLCAjMHgwCQlAIGNsZWFyIGZvciBtcmMgY2FsbAotCW1jcglwMTUsIDAsIHIzLCBjNywgYzEwLCA0CUAgbWVtb3J5IGJhcnJpZXIsIGhvcGUgU0RSL0REUiBmaW5pc2hlZAotCW5vcAotCW5vcAotCWxkcglyMywgQV9TRFJDX1BPV0VSCUAgYWRkciBvZiBzZHJjIHBvd2VyCi0JbGRyCXI0LCBbcjNdCQlAIHZhbHVlIG9mIHNkcmMgcG93ZXIKLQlvcnIJcjQsIHI0LCAjMHg0MAkJQCBlbmFibGUgc2VsZiByZWZyZXNoIG9uIGlkbGUgcmVxCi0JbW92CXI1LCAjMHgyMDAwCQlAIHNldCBkZWxheSAoRFBMTCByZWxvY2sgKyBETEwgcmVsb2NrKQotCXN0cglyNCwgW3IzXQkJQCBtYWtlIGl0IHNvCi0JbW92CXIyLCAjMAotCW5vcAotCW1jcglwMTUsIDAsIHIyLCBjNywgYzAsIDQJQCB3YWl0IGZvciBpbnRlcnJ1cHQKLQlub3AKLWxvb3A6Ci0Jc3VicwlyNSwgcjUsICMweDEJCUAgYXdha2UsIHdhaXQganVzdCBhIGJpdAotCWJuZQlsb29wCi0KLQkvKiBUaGUgRFBMTCBoYXMgb24gYmVmb3JlIHdlIHRha2UgdGhlIEREUiBvdXQgb2Ygc2VsZiByZWZyZXNoICovCi0JYmljCXI0LCByNCwgIzB4NDAJCUAgbm93IGNsZWFyIHNlbGYgcmVmcmVzaCBiaXQuCi0Jc3RyCXI0LCBbcjNdCQlAIHB1dCB2bGF1ZSBiYWNrLgotCWxkcglyNCwgQV9TRFJDMAkJQCBtYWtlIGEgY2xvY2sgaGFwcGVuCi0JbGRyCXI0LCBbcjRdCi0Jbm9wCQkJCUAgc3RhcnQgYXV0byByZWZyZXNoIG9ubHkgYWZ0ZXIgY2xrIG9rCi0JbW92cwlyMCwgcjAJCQlAIHNlZSBpZiBERFIgb3IgU0RSCi0JbGRybmUJcjEsIEFfU0RSQ19ETExBX0NUUkxfUwlAIGdldCBhZGRyIG9mIERMTCBjdHJsCi0Jc3RybmUJcjAsIFtyMV0JCUAgcmV3cml0ZSBETExBIHRvIGZvcmNlIERMTCByZWxvYWQKLQlhZGRuZQlyMSwgcjEsICMweDgJCUAgbW92ZSB0byBETExCCi0Jc3RybmUJcjAsIFtyMV0JCUAgcmV3cml0ZSBETExCIHRvIGZvcmNlIERMTCByZWxvYWQKLQotCW1vdglyNSwgIzB4MTAwMAotbG9vcDI6Ci0Jc3VicwlyNSwgcjUsICMweDEKLQlibmUJbG9vcDIKLQkvKiByZXN1bWUqLwotCWxkbWZkCXNwISwge3IwIC0gcjEyLCBwY30JQCByZXN0b3JlIHJlZ3MgYW5kIHJldHVybgotCi1BX1NEUkNfUE9XRVI6Ci0JLndvcmQgT01BUDI0MlhfU0RSQ19SRUdBRERSKFNEUkNfUE9XRVIpCi1BX1NEUkMwOgotCS53b3JkIEFfU0RSQzBfVgotQV9TRFJDX0RMTEFfQ1RSTF9TOgotCS53b3JkIE9NQVAyNDJYX1NEUkNfUkVHQUREUihTRFJDX0RMTEFfQ1RSTCkKLQotRU5UUlkob21hcDI0eHhfY3B1X3N1c3BlbmRfc3opCi0JLndvcmQJLiAtIG9tYXAyNHh4X2NwdV9zdXNwZW5kCi0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvc2xlZXAyNHh4LlMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3NsZWVwMjR4eC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQzMzM2YjkKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3NsZWVwMjR4eC5TCkBAIC0wLDAgKzEsMTI2IEBACisvKgorICogbGludXgvYXJjaC9hcm0vbWFjaC1vbWFwMi9zbGVlcC5TCisgKgorICogKEMpIENvcHlyaWdodCAyMDA0CisgKiBUZXhhcyBJbnN0cnVtZW50cywgPHd3dy50aS5jb20+CisgKiBSaWNoYXJkIFdvb2RydWZmIDxyLXdvb2RydWZmMkB0aS5jb20+CisgKgorICogKEMpIENvcHlyaWdodCAyMDA2IE5va2lhIENvcnBvcmF0aW9uCisgKiBGaXhlZCBpZGxlIGxvb3Agc2xlZXAKKyAqIElnb3IgU3RvcHBhIDxpZ29yLnN0b3BwYUBub2tpYS5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIC9QVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisgKiBNQSAwMjExMS0xMzA3IFVTQQorICovCisKKyNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CisjaW5jbHVkZSA8YXNtL2Fzc2VtYmxlci5oPgorI2luY2x1ZGUgPG1hY2gvaW8uaD4KKyNpbmNsdWRlIDxtYWNoL3BtLmg+CisKKyNpbmNsdWRlIDxtYWNoL29tYXAyNHh4Lmg+CisKKyNpbmNsdWRlICJzZHJjLmgiCisKKy8qIEZpcnN0IGFkZHJlc3Mgb2YgcmVzZXJ2ZWQgYWRkcmVzcyBzcGFjZT8gIGFwcGFyZW50bHkgdmFsaWQgZm9yIE9NQVAyICYgMyAqLworI2RlZmluZSBBX1NEUkMwX1YJCSgweEMwMDAwMDAwKQorCisJLnRleHQKKworLyoKKyAqIEZvcmNlcyBPTUFQIGludG8gaWRsZSBzdGF0ZQorICoKKyAqIG9tYXAyNHh4X2lkbGVfbG9vcF9zdXNwZW5kKCkgLSBUaGlzIGJpdCBvZiBjb2RlIGp1c3QgZXhlY3V0ZXMgdGhlIFdGSQorICogZm9yIG5vcm1hbCBpZGxlcy4KKyAqCisgKiBOb3RlOiBUaGlzIGNvZGUgZ2V0J3MgY29waWVkIHRvIGludGVybmFsIFNSQU0gYXQgYm9vdC4gV2hlbiB0aGUgT01BUAorICoJIHdha2VzIHVwIGl0IGNvbnRpbnVlcyBleGVjdXRpb24gYXQgdGhlIHBvaW50IGl0IHdlbnQgdG8gc2xlZXAuCisgKi8KK0VOVFJZKG9tYXAyNHh4X2lkbGVfbG9vcF9zdXNwZW5kKQorCXN0bWZkCXNwISwge3IwLCBscn0JCUAgc2F2ZSByZWdpc3RlcnMgb24gc3RhY2sKKwltb3YJcjAsICMwCQkJQCBjbGVhciBmb3IgbWNyIHNldHVwCisJbWNyCXAxNSwgMCwgcjAsIGM3LCBjMCwgNAlAIHdhaXQgZm9yIGludGVycnVwdAorCWxkbWZkCXNwISwge3IwLCBwY30JCUAgcmVzdG9yZSByZWdzIGFuZCByZXR1cm4KKworRU5UUlkob21hcDI0eHhfaWRsZV9sb29wX3N1c3BlbmRfc3opCisJLndvcmQJLiAtIG9tYXAyNHh4X2lkbGVfbG9vcF9zdXNwZW5kCisKKy8qCisgKiBvbWFwMjR4eF9jcHVfc3VzcGVuZCgpIC0gRm9yY2VzIE9NQVAgaW50byBkZWVwIHNsZWVwIHN0YXRlIGJ5IGNvbXBsZXRpbmcKKyAqIFNEUkMgc2h1dGRvd24gdGhlbiBBUk0gc2h1dGRvd24uICBVcG9uIHdha2UgTVBVIGlzIGJhY2sgb24gc28ganVzdCByZXN0b3JlCisgKiBTRFJDLgorICoKKyAqIElucHV0OgorICogUjAgOglETEwgY3RybCB2YWx1ZSBwcmUtU2xlZXAKKyAqIFIxIDogU0RSQ19ETExBX0NUUkwKKyAqIFIyIDogU0RSQ19QT1dFUgorICoKKyAqIFRoZSBpZiB0aGUgRFBMTCBpcyBnb2luZyB0byBBdXRvSWRsZS4gSXQgc2VlbXMgbGlrZSB0aGUgRFBMTCBtYXkgYmUgYmFjayBvbgorICogd2hlbiB3ZSBnZXQgY2FsbGVkLCBidXQgdGhlIERMTCBwcm9iYWJseSBpc24ndC4gIFdlIHdpbGwgd2FpdCBhIGJpdCBtb3JlIGluCisgKiBjYXNlIHRoZSBEUExMIGlzbid0IHF1aXRlIHRoZXJlIHlldC4gVGhlIGNvZGUgd2lsbCB3YWl0IG9uIERMTCBmb3IgRERSIGV2ZW4KKyAqIGlmIGluIHVubG9ja2VkIG1vZGUuCisgKgorICogRm9yIGxlc3MgdGhhbiAyNDJ4LUVTMi4yIHVwb24gd2FrZSBmcm9tIGEgc2xlZXAgbW9kZSB3aGVyZSB0aGUgZXh0ZXJuYWwKKyAqIG9zY2lsbGF0b3Igd2FzIHN0b3BwZWQsIGEgdGltaW5nIGJ1ZyBleGlzdHMgd2hlcmUgYSBub24tc3RhYmlsaXplZCAxMk1IegorICogY2xvY2sgY2FuIHBhc3MgaW50byB0aGUgUFJDTSBjYW4gY2F1c2UgcHJvYmxlbXMgYXQgRFNQIGFuZCBJVkEuCisgKiBUbyB3b3JrIGFyb3VuZCB0aGlzIHRoZSBjb2RlIHdpbGwgc3dpdGNoIHRvIHRoZSAzMmtIeiBzb3VyY2UgcHJpb3IgdG8gc2xlZXAuCisgKiBQb3N0IHNsZWVwIHdlIHdpbGwgc2hpZnQgYmFjayB0byB1c2luZyB0aGUgRFBMTC4gIEFwcGFyZW50bHksCisgKiBDTV9JRExFU1RfQ0xLR0VOIGRvZXMgbm90IHJlZmxlY3QgdGhlIGZ1bGwgY2xvY2sgY2hhbmdlIHNvIHlvdSBuZWVkIHRvIHdhaXQKKyAqIDN4MTJNSHogKyAzeDMya0h6IGNsb2NrcyBmb3IgYSBmdWxsIHN3aXRjaC4KKyAqCisgKiBUaGUgRExMIGxvYWQgdmFsdWUgaXMgbm90IGtlcHQgaW4gUkVURU5USU9OIG9yIE9GRi4JSXQgbmVlZHMgdG8gYmUgcmVzdG9yZWQKKyAqIGF0IHdha2UKKyAqLworRU5UUlkob21hcDI0eHhfY3B1X3N1c3BlbmQpCisJc3RtZmQJc3AhLCB7cjAgLSByMTIsIGxyfQlAIHNhdmUgcmVnaXN0ZXJzIG9uIHN0YWNrCisJbW92CXIzLCAjMHgwCQlAIGNsZWFyIGZvciBtY3IgY2FsbAorCW1jcglwMTUsIDAsIHIzLCBjNywgYzEwLCA0CUAgbWVtb3J5IGJhcnJpZXIsIGhvcGUgU0RSL0REUiBmaW5pc2hlZAorCW5vcAorCW5vcAorCWxkcglyNCwgW3IyXQkJQCByZWFkIFNEUkNfUE9XRVIKKwlvcnIJcjQsIHI0LCAjMHg0MAkJQCBlbmFibGUgc2VsZiByZWZyZXNoIG9uIGlkbGUgcmVxCisJbW92CXI1LCAjMHgyMDAwCQlAIHNldCBkZWxheSAoRFBMTCByZWxvY2sgKyBETEwgcmVsb2NrKQorCXN0cglyNCwgW3IyXQkJQCBtYWtlIGl0IHNvCisJbW92CXIyLCAjMAorCW5vcAorCW1jcglwMTUsIDAsIHIyLCBjNywgYzAsIDQJQCB3YWl0IGZvciBpbnRlcnJ1cHQKKwlub3AKK2xvb3A6CisJc3VicwlyNSwgcjUsICMweDEJCUAgYXdha2UsIHdhaXQganVzdCBhIGJpdAorCWJuZQlsb29wCisKKwkvKiBUaGUgRFBMTCBoYXMgdG8gYmUgb24gYmVmb3JlIHdlIHRha2UgdGhlIEREUiBvdXQgb2Ygc2VsZiByZWZyZXNoICovCisJYmljCXI0LCByNCwgIzB4NDAJCUAgbm93IGNsZWFyIHNlbGYgcmVmcmVzaCBiaXQuCisJc3RyCXI0LCBbcjJdCQlAIHdyaXRlIHRvIFNEUkNfUE9XRVIKKwlsZHIJcjQsIEFfU0RSQzAJCUAgbWFrZSBhIGNsb2NrIGhhcHBlbgorCWxkcglyNCwgW3I0XQkJQCByZWFkIEFfU0RSQzAKKwlub3AJCQkJQCBzdGFydCBhdXRvIHJlZnJlc2ggb25seSBhZnRlciBjbGsgb2sKKwltb3ZzCXIwLCByMAkJCUAgc2VlIGlmIEREUiBvciBTRFIKKwlzdHJuZQlyMCwgW3IxXQkJQCByZXdyaXRlIERMTEEgdG8gZm9yY2UgRExMIHJlbG9hZAorCWFkZG5lCXIxLCByMSwgIzB4OAkJQCBtb3ZlIHRvIERMTEIKKwlzdHJuZQlyMCwgW3IxXQkJQCByZXdyaXRlIERMTEIgdG8gZm9yY2UgRExMIHJlbG9hZAorCisJbW92CXI1LCAjMHgxMDAwCitsb29wMjoKKwlzdWJzCXI1LCByNSwgIzB4MQorCWJuZQlsb29wMgorCS8qIHJlc3VtZSovCisJbGRtZmQJc3AhLCB7cjAgLSByMTIsIHBjfQlAIHJlc3RvcmUgcmVncyBhbmQgcmV0dXJuCisKK0FfU0RSQzA6CisJLndvcmQgQV9TRFJDMF9WCisKK0VOVFJZKG9tYXAyNHh4X2NwdV9zdXNwZW5kX3N6KQorCS53b3JkCS4gLSBvbWFwMjR4eF9jcHVfc3VzcGVuZApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9zcmFtMzR4eC5TIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9zcmFtMzR4eC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjNzE0NjEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3NyYW0zNHh4LlMKQEAgLTAsMCArMSwxNzkgQEAKKy8qCisgKiBsaW51eC9hcmNoL2FybS9tYWNoLW9tYXAzL3NyYW0uUworICoKKyAqIE9tYXAzIHNwZWNpZmljIGZ1bmN0aW9ucyB0aGF0IG5lZWQgdG8gYmUgcnVuIGluIGludGVybmFsIFNSQU0KKyAqCisgKiAoQykgQ29weXJpZ2h0IDIwMDcKKyAqIFRleGFzIEluc3RydW1lbnRzIEluYy4KKyAqIFJhamVuZHJhIE5heWFrIDxybmF5YWtAdGkuY29tPgorICoKKyAqIChDKSBDb3B5cmlnaHQgMjAwNAorICogVGV4YXMgSW5zdHJ1bWVudHMsIDx3d3cudGkuY29tPgorICogUmljaGFyZCBXb29kcnVmZiA8ci13b29kcnVmZjJAdGkuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiAvUFVSUE9TRS4gU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisgKiBNQSAwMjExMS0xMzA3IFVTQQorICovCisjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgorI2luY2x1ZGUgPGFzbS9hc3NlbWJsZXIuaD4KKyNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CisKKyNpbmNsdWRlIDxtYWNoL2lvLmg+CisKKyNpbmNsdWRlICJzZHJjLmgiCisjaW5jbHVkZSAiY20uaCIKKworCS50ZXh0CisKKy8qCisgKiBDaGFuZ2UgZnJlcXVlbmN5IG9mIGNvcmUgZHBsbAorICogcjAgPSBzZHJjX3Jmcl9jdHJsIHIxID0gc2RyY19hY3RpbV9jdHJsYSByMiA9IHNkcmNfYWN0aW1fY3RybGIgcjMgPSBNMgorICovCitFTlRSWShvbWFwM19zcmFtX2NvbmZpZ3VyZV9jb3JlX2RwbGwpCisJc3RtZmQJc3AhLCB7cjEtcjEyLCBscn0JQCBzdG9yZSByZWdzIHRvIHN0YWNrCisJY21wCXIzLCAjMHgyCisJYmxuZQljb25maWd1cmVfc2RyYworCWNtcAlyMywgIzB4MgorCWJsbmUJbG9ja19kbGwKKwljbXAJcjMsICMweDEKKwlibG5lCXVubG9ja19kbGwKKwlibAlzZHJhbV9pbl9zZWxmcmVmcmVzaAlAIHB1dCB0aGUgU0RSQU0gaW4gc2VsZiByZWZyZXNoCisJYmwgCWNvbmZpZ3VyZV9jb3JlX2RwbGwKKwlibAllbmFibGVfc2RyYworCWNtcAlyMywgIzB4MQorCWJsbmUJd2FpdF9kbGxfdW5sb2NrCisJY21wCXIzLCAjMHgyCisJYmxuZQl3YWl0X2RsbF9sb2NrCisJY21wCXIzLCAjMHgxCisJYmxuZQljb25maWd1cmVfc2RyYworCW1vdiAJcjAsICMwIAkJCUAgcmV0dXJuIHZhbHVlCisJbGRtZmQJc3AhLCB7cjEtcjEyLCBwY30JQCByZXN0b3JlIHJlZ3MgYW5kIHJldHVybgordW5sb2NrX2RsbDoKKwlsZHIJcjQsIG9tYXAzX3NkcmNfZGxsYV9jdHJsCisJbGRyCXI1LCBbcjRdCisJb3JyCXI1LCByNSwgIzB4NAorCXN0cglyNSwgW3I0XQorCWJ4CWxyCitsb2NrX2RsbDoKKwlsZHIJcjQsIG9tYXAzX3NkcmNfZGxsYV9jdHJsCisJbGRyCXI1LCBbcjRdCisJYmljCXI1LCByNSwgIzB4NAorCXN0cglyNSwgW3I0XQorCWJ4CWxyCitzZHJhbV9pbl9zZWxmcmVmcmVzaDoKKwltb3YJcjUsICMweDAJCUAgTW92ZSAwIHRvIFI1CisJbWNyCXAxNSwgMCwgcjUsIGM3LCBjMTAsIDUJQCBtZW1vcnkgYmFycmllcgorCWxkcglyNCwgb21hcDNfc2RyY19wb3dlcglAIHJlYWQgdGhlIFNEUkNfUE9XRVIgcmVnaXN0ZXIKKwlsZHIJcjUsIFtyNF0JCUAgcmVhZCB0aGUgY29udGVudHMgb2YgU0RSQ19QT1dFUgorCW9yciAJcjUsIHI1LCAjMHg0MAkJQCBlbmFibGUgc2VsZiByZWZyZXNoIG9uIGlkbGUgcmVxCisJc3RyIAlyNSwgW3I0XQkJQCB3cml0ZSBiYWNrIHRvIFNEUkNfUE9XRVIgcmVnaXN0ZXIKKwlsZHIJcjQsIG9tYXAzX2NtX2ljbGtlbjFfY29yZQlAIHJlYWQgdGhlIENNX0lDTEtFTjFfQ09SRSByZWcKKwlsZHIJcjUsIFtyNF0KKwliaWMJcjUsIHI1LCAjMHgyCQlAIGRpc2FibGUgaWNsayBiaXQgZm9yIFNSREMKKwlzdHIgCXI1LCBbcjRdCit3YWl0X3NkcmNfaWRsZToKKwlsZHIgCXI0LCBvbWFwM19jbV9pZGxlc3QxX2NvcmUKKwlsZHIgCXI1LCBbcjRdCisJYW5kIAlyNSwgcjUsICMweDIJCUAgY2hlY2sgZm9yIFNEUkMgaWRsZQorCWNtcCAJcjUsICMyCisJYm5lIAl3YWl0X3NkcmNfaWRsZQorCWJ4IAlscgorY29uZmlndXJlX2NvcmVfZHBsbDoKKwlsZHIgCXI0LCBvbWFwM19jbV9jbGtzZWwxX3BsbAorCWxkcglyNSwgW3I0XQorCWxkcglyNiwgY29yZV9tMl9tYXNrX3ZhbAlAIG1vZGlmeSBtMiBmb3IgY29yZSBkcGxsCisJYW5kCXI1LCByNSwgcjYKKwlvcnIJcjUsIHI1LCByMywgbHNsICMweDFCCUAgcjMgY29udGFpbnMgdGhlIE0yIHZhbAorCXN0cglyNSwgW3I0XQorCW1vdiAJcjUsICMweDgwMAkJQCB3YWl0IGZvciB0aGUgY2xvY2sgdG8gc3RhYmlsaXNlCisJY21wCXIzLCAjMgorCWJuZQl3YWl0X2Nsa19zdGFibGUKKwlieAlscgord2FpdF9jbGtfc3RhYmxlOgorCXN1YnMgCXI1LCByNSwgIzEKKwlibmUJd2FpdF9jbGtfc3RhYmxlCisJbm9wCisJbm9wCisJbm9wCisJbm9wCisJbm9wCisJbm9wCisJbm9wCisJbm9wCisJbm9wCisJbm9wCisJYngJbHIKK2VuYWJsZV9zZHJjOgorCWxkciAJcjQsIG9tYXAzX2NtX2ljbGtlbjFfY29yZQorCWxkcglyNSwgW3I0XQorCW9yciAJcjUsIHI1LCAjMHgyCQlAIGVuYWJsZSBpY2xrIGJpdCBmb3IgU0RSQworCXN0ciAJcjUsIFtyNF0KK3dhaXRfc2RyY19pZGxlMToKKwlsZHIgCXI0LCBvbWFwM19jbV9pZGxlc3QxX2NvcmUKKwlsZHIJcjUsIFtyNF0KKwlhbmQgCXI1LCByNSwgIzB4MgorCWNtcAlyNSwgIzAKKwlibmUJd2FpdF9zZHJjX2lkbGUxCisJbGRyCXI0LCBvbWFwM19zZHJjX3Bvd2VyCisJbGRyCXI1LCBbcjRdCisJYmljIAlyNSwgcjUsICMweDQwCisJc3RyIAlyNSwgW3I0XQorCWJ4CWxyCit3YWl0X2RsbF9sb2NrOgorCWxkcglyNCwgb21hcDNfc2RyY19kbGxhX3N0YXR1cworCWxkcglyNSwgW3I0XQorCWFuZCAJcjUsIHI1LCAjMHg0CisJY21wCXI1LCAjMHg0CisJYm5lCXdhaXRfZGxsX2xvY2sKKwlieAlscgord2FpdF9kbGxfdW5sb2NrOgorCWxkcglyNCwgb21hcDNfc2RyY19kbGxhX3N0YXR1cworCWxkcglyNSwgW3I0XQorCWFuZAlyNSwgcjUsICMweDQKKwljbXAJcjUsICMweDAKKwlibmUJd2FpdF9kbGxfdW5sb2NrCisJYngJbHIKK2NvbmZpZ3VyZV9zZHJjOgorCWxkcglyNCwgb21hcDNfc2RyY19yZnJfY3RybAorCXN0cglyMCwgW3I0XQorCWxkcglyNCwgb21hcDNfc2RyY19hY3RpbV9jdHJsYQorCXN0cglyMSwgW3I0XQorCWxkcglyNCwgb21hcDNfc2RyY19hY3RpbV9jdHJsYgorCXN0cglyMiwgW3I0XQorCWJ4CWxyCisKK29tYXAzX3NkcmNfcG93ZXI6CisJLndvcmQgT01BUDM0WFhfU0RSQ19SRUdBRERSKFNEUkNfUE9XRVIpCitvbWFwM19jbV9jbGtzZWwxX3BsbDoKKwkud29yZCBPTUFQMzRYWF9DTV9SRUdBRERSKFBMTF9NT0QsIENNX0NMS1NFTDEpCitvbWFwM19jbV9pZGxlc3QxX2NvcmU6CisJLndvcmQgT01BUDM0WFhfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSURMRVNUKQorb21hcDNfY21faWNsa2VuMV9jb3JlOgorCS53b3JkIE9NQVAzNFhYX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpCitvbWFwM19zZHJjX3Jmcl9jdHJsOgorCS53b3JkIE9NQVAzNFhYX1NEUkNfUkVHQUREUihTRFJDX1JGUl9DVFJMXzApCitvbWFwM19zZHJjX2FjdGltX2N0cmxhOgorCS53b3JkIE9NQVAzNFhYX1NEUkNfUkVHQUREUihTRFJDX0FDVElNX0NUUkxfQV8wKQorb21hcDNfc2RyY19hY3RpbV9jdHJsYjoKKwkud29yZCBPTUFQMzRYWF9TRFJDX1JFR0FERFIoU0RSQ19BQ1RJTV9DVFJMX0JfMCkKK29tYXAzX3NkcmNfZGxsYV9zdGF0dXM6CisJLndvcmQgT01BUDM0WFhfU0RSQ19SRUdBRERSKFNEUkNfRExMQV9TVEFUVVMpCitvbWFwM19zZHJjX2RsbGFfY3RybDoKKwkud29yZCBPTUFQMzRYWF9TRFJDX1JFR0FERFIoU0RSQ19ETExBX0NUUkwpCitjb3JlX20yX21hc2tfdmFsOgorCS53b3JkIDB4MDdGRkZGRkYKKworRU5UUlkob21hcDNfc3JhbV9jb25maWd1cmVfY29yZV9kcGxsX3N6KQorCS53b3JkCS4gLSBvbWFwM19zcmFtX2NvbmZpZ3VyZV9jb3JlX2RwbGwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2NtLXgyNzAuYyBiL2FyY2gvYXJtL21hY2gtcHhhL2NtLXgyNzAuYwppbmRleCBhODJkYWQxLi5kZjgzYjk3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9jbS14MjcwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvY20teDI3MC5jCkBAIC0xNjIsNyArMTYyLDcgQEAKIAlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmNteDI3MF9ydGNfZGV2aWNlKTsKIH0KICNlbHNlCi1zdGF0aWMgaW5saW5lIHZvaWQgY214Mnh4X2luaXRfcnRjKHZvaWQpIHt9CitzdGF0aWMgaW5saW5lIHZvaWQgY214MjcwX2luaXRfcnRjKHZvaWQpIHt9CiAjZW5kaWYKIAogLyogMjcwMEcgZ3JhcGhpY3MgKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2NwdWZyZXEtcHhhMnh4LmMgYi9hcmNoL2FybS9tYWNoLXB4YS9jcHVmcmVxLXB4YTJ4eC5jCmluZGV4IGQ4MjUyOGUuLjFmMjcyZWEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2NwdWZyZXEtcHhhMnh4LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvY3B1ZnJlcS1weGEyeHguYwpAQCAtMzM1LDkgKzMzNSw2IEBACiAJCXB4YTI3eF9ndWVzc19tYXhfZnJlcSgpOwogCiAJLyogc2V0IGRlZmF1bHQgcG9saWN5IGFuZCBjcHVpbmZvICovCi0JcG9saWN5LT5nb3Zlcm5vciA9IENQVUZSRVFfREVGQVVMVF9HT1ZFUk5PUjsKLQlpZiAoY3B1X2lzX3B4YTI1eCgpKQotCQlwb2xpY3ktPnBvbGljeSA9IENQVUZSRVFfUE9MSUNZX1BFUkZPUk1BTkNFOwogCXBvbGljeS0+Y3B1aW5mby50cmFuc2l0aW9uX2xhdGVuY3kgPSAxMDAwOyAvKiBGSVhNRTogMSBtcywgYXNzdW1lZCAqLwogCXBvbGljeS0+Y3VyID0gZ2V0X2Nsa19mcmVxdWVuY3lfa2h6KDApOwkgICAvKiBjdXJyZW50IGZyZXEgKi8KIAlwb2xpY3ktPm1pbiA9IHBvbGljeS0+bWF4ID0gcG9saWN5LT5jdXI7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9jcHVmcmVxLXB4YTN4eC5jIGIvYXJjaC9hcm0vbWFjaC1weGEvY3B1ZnJlcS1weGEzeHguYwppbmRleCAxZWEwYzljLi45NjhjODMwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9jcHVmcmVxLXB4YTN4eC5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2NwdWZyZXEtcHhhM3h4LmMKQEAgLTIxMCw3ICsyMTAsNiBAQAogCWludCByZXQgPSAtRUlOVkFMOwogCiAJLyogc2V0IGRlZmF1bHQgcG9saWN5IGFuZCBjcHVpbmZvICovCi0JcG9saWN5LT5nb3Zlcm5vciA9IENQVUZSRVFfREVGQVVMVF9HT1ZFUk5PUjsKIAlwb2xpY3ktPmNwdWluZm8ubWluX2ZyZXEgPSAxMDQwMDA7CiAJcG9saWN5LT5jcHVpbmZvLm1heF9mcmVxID0gKGNwdV9pc19weGEzMjAoKSkgPyA4MDYwMDAgOiA2MjQwMDA7CiAJcG9saWN5LT5jcHVpbmZvLnRyYW5zaXRpb25fbGF0ZW5jeSA9IDEwMDA7IC8qIEZJWE1FOiAxIG1zLCBhc3N1bWVkICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvY2FtZXJhLmggYi9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvY2FtZXJhLmgKaW5kZXggMzk1MTZjZS4uMzFhYmU2ZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL2NhbWVyYS5oCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9jYW1lcmEuaApAQCAtMzYsOCArMzYsNiBAQAogCiBzdHJ1Y3QgcHhhY2FtZXJhX3BsYXRmb3JtX2RhdGEgewogCWludCAoKmluaXQpKHN0cnVjdCBkZXZpY2UgKik7Ci0JaW50ICgqcG93ZXIpKHN0cnVjdCBkZXZpY2UgKiwgaW50KTsKLQlpbnQgKCpyZXNldCkoc3RydWN0IGRldmljZSAqLCBpbnQpOwogCiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1bnNpZ25lZCBsb25nIG1jbGtfMTBraHo7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvcHhhM3h4X25hbmQuaCBiL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9weGEzeHhfbmFuZC5oCmluZGV4IGViNGIxOTAuLmViMzVmY2EgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9weGEzeHhfbmFuZC5oCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9weGEzeHhfbmFuZC5oCkBAIC00LDYgKzQsNDMgQEAKICNpbmNsdWRlIDxsaW51eC9tdGQvbXRkLmg+CiAjaW5jbHVkZSA8bGludXgvbXRkL3BhcnRpdGlvbnMuaD4KIAorc3RydWN0IHB4YTN4eF9uYW5kX3RpbWluZyB7CisJdW5zaWduZWQgaW50CXRDSDsgIC8qIEVuYWJsZSBzaWduYWwgaG9sZCB0aW1lICovCisJdW5zaWduZWQgaW50CXRDUzsgIC8qIEVuYWJsZSBzaWduYWwgc2V0dXAgdGltZSAqLworCXVuc2lnbmVkIGludAl0V0g7ICAvKiBORF9uV0UgaGlnaCBkdXJhdGlvbiAqLworCXVuc2lnbmVkIGludAl0V1A7ICAvKiBORF9uV0UgcHVsc2UgdGltZSAqLworCXVuc2lnbmVkIGludAl0Ukg7ICAvKiBORF9uUkUgaGlnaCBkdXJhdGlvbiAqLworCXVuc2lnbmVkIGludAl0UlA7ICAvKiBORF9uUkUgcHVsc2Ugd2lkdGggKi8KKwl1bnNpZ25lZCBpbnQJdFI7ICAgLyogTkRfbldFIGhpZ2ggdG8gTkRfblJFIGxvdyBmb3IgcmVhZCAqLworCXVuc2lnbmVkIGludAl0V0hSOyAvKiBORF9uV0UgaGlnaCB0byBORF9uUkUgbG93IGZvciBzdGF0dXMgcmVhZCAqLworCXVuc2lnbmVkIGludAl0QVI7ICAvKiBORF9BTEUgbG93IHRvIE5EX25SRSBsb3cgZGVsYXkgKi8KK307CisKK3N0cnVjdCBweGEzeHhfbmFuZF9jbWRzZXQgeworCXVpbnQxNl90CXJlYWQxOworCXVpbnQxNl90CXJlYWQyOworCXVpbnQxNl90CXByb2dyYW07CisJdWludDE2X3QJcmVhZF9zdGF0dXM7CisJdWludDE2X3QJcmVhZF9pZDsKKwl1aW50MTZfdAllcmFzZTsKKwl1aW50MTZfdAlyZXNldDsKKwl1aW50MTZfdAlsb2NrOworCXVpbnQxNl90CXVubG9jazsKKwl1aW50MTZfdAlsb2NrX3N0YXR1czsKK307CisKK3N0cnVjdCBweGEzeHhfbmFuZF9mbGFzaCB7CisJY29uc3Qgc3RydWN0IHB4YTN4eF9uYW5kX3RpbWluZyAqdGltaW5nOyAvKiBOQU5EIEZsYXNoIHRpbWluZyAqLworCWNvbnN0IHN0cnVjdCBweGEzeHhfbmFuZF9jbWRzZXQgKmNtZHNldDsKKworCXVpbnQzMl90IHBhZ2VfcGVyX2Jsb2NrOy8qIFBhZ2VzIHBlciBibG9jayAoUEdfUEVSX0JMSykgKi8KKwl1aW50MzJfdCBwYWdlX3NpemU7CS8qIFBhZ2Ugc2l6ZSBpbiBieXRlcyAoUEFHRV9TWikgKi8KKwl1aW50MzJfdCBmbGFzaF93aWR0aDsJLyogV2lkdGggb2YgRmxhc2ggbWVtb3J5IChEV0lEVEhfTSkgKi8KKwl1aW50MzJfdCBkZmNfd2lkdGg7CS8qIFdpZHRoIG9mIGZsYXNoIGNvbnRyb2xsZXIoRFdJRFRIX0MpICovCisJdWludDMyX3QgbnVtX2Jsb2NrczsJLyogTnVtYmVyIG9mIHBoeXNpY2FsIGJsb2NrcyBpbiBGbGFzaCAqLworCXVpbnQzMl90IGNoaXBfaWQ7Cit9OworCiBzdHJ1Y3QgcHhhM3h4X25hbmRfcGxhdGZvcm1fZGF0YSB7CiAKIAkvKiB0aGUgZGF0YSBmbGFzaCBidXMgaXMgc2hhcmVkIGJldHdlZW4gdGhlIFN0YXRpYyBNZW1vcnkKQEAgLTEyLDggKzQ5LDExIEBACiAJICovCiAJaW50CWVuYWJsZV9hcmJpdGVyOwogCi0Jc3RydWN0IG10ZF9wYXJ0aXRpb24gKnBhcnRzOwotCXVuc2lnbmVkIGludAlucl9wYXJ0czsKKwljb25zdCBzdHJ1Y3QgbXRkX3BhcnRpdGlvbgkJKnBhcnRzOworCXVuc2lnbmVkIGludAkJCQlucl9wYXJ0czsKKworCWNvbnN0IHN0cnVjdCBweGEzeHhfbmFuZF9mbGFzaCAqIAlmbGFzaDsKKwlzaXplX3QJCQkJCW51bV9mbGFzaDsKIH07CiAKIGV4dGVybiB2b2lkIHB4YTN4eF9zZXRfbmFuZF9pbmZvKHN0cnVjdCBweGEzeHhfbmFuZF9wbGF0Zm9ybV9kYXRhICppbmZvKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC90b3NhLmggYi9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvdG9zYS5oCmluZGV4IGE3MjgwM2YuLjhiY2U2ZDggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC90b3NhLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL3Rvc2EuaApAQCAtNTksOCArNTksNiBAQAogICogVEM2MzkzWEIgR1BJT3MKICAqLwogI2RlZmluZSBUT1NBX1RDNjM5M1hCX0dQSU9fQkFTRQkJKE5SX0JVSUxUSU5fR1BJTyArIDIgKiAxMikKLSNkZWZpbmUgVE9TQV9UQzYzOTNYQl9HUElPKGkpCQkoVE9TQV9UQzYzOTNYQl9HUElPX0JBU0UgKyAoaSkpCi0jZGVmaW5lIFRPU0FfVEM2MzkzWEJfR1BJT19CSVQoZ3BpbykJKDEgPDwgKGdwaW8gLSBUT1NBX1RDNjM5M1hCX0dQSU9fQkFTRSkpCiAKICNkZWZpbmUgVE9TQV9HUElPX1RHX09OCQkJKFRPU0FfVEM2MzkzWEJfR1BJT19CQVNFICsgMCkKICNkZWZpbmUgVE9TQV9HUElPX0xfTVVURQkJKFRPU0FfVEM2MzkzWEJfR1BJT19CQVNFICsgMSkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL3Rvc2EuYyBiL2FyY2gvYXJtL21hY2gtcHhhL3Rvc2EuYwppbmRleCAxMzBlMzdlLi5hNmM0Njk0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS90b3NhLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvdG9zYS5jCkBAIC03MDYsMTYgKzcwNiwzOSBAQAogCS5iYWRibG9ja19wYXR0ZXJuID0gJnRvc2FfdGM2MzkzeGJfbmFuZF9iYnQsCiB9OwogCi1zdGF0aWMgc3RydWN0IHRjNjM5M3hiX3BsYXRmb3JtX2RhdGEgdG9zYV90YzYzOTN4Yl9zZXR1cCA9IHsKK3N0YXRpYyBpbnQgdG9zYV90YzYzOTN4Yl9zZXR1cChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCit7CisJaW50IHJjOworCisJcmMgPSBncGlvX3JlcXVlc3QoVE9TQV9HUElPX0NBUkRfVkNDX09OLCAiQ0FSRF9WQ0NfT04iKTsKKwlpZiAocmMpCisJCWdvdG8gZXJyX3JlcTsKKworCXJjID0gZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KFRPU0FfR1BJT19DQVJEX1ZDQ19PTiwgMSk7CisJaWYgKHJjKQorCQlnb3RvIGVycl9kaXI7CisKKwlyZXR1cm4gcmM7CisKK2Vycl9kaXI6CisJZ3Bpb19mcmVlKFRPU0FfR1BJT19DQVJEX1ZDQ19PTik7CitlcnJfcmVxOgorCXJldHVybiByYzsKK30KKworc3RhdGljIHZvaWQgdG9zYV90YzYzOTN4Yl90ZWFyZG93bihzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCit7CisJZ3Bpb19mcmVlKFRPU0FfR1BJT19DQVJEX1ZDQ19PTik7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdGM2MzkzeGJfcGxhdGZvcm1fZGF0YSB0b3NhX3RjNjM5M3hiX2RhdGEgPSB7CiAJLnNjcl9wbGwyY3IJPSAweDBjYzEsCiAJLnNjcl9ncGVyCT0gMHgzMzAwLAotCS5zY3JfZ3BvX2Rzcgk9Ci0JCVRPU0FfVEM2MzkzWEJfR1BJT19CSVQoVE9TQV9HUElPX0NBUkRfVkNDX09OKSwKLQkuc2NyX2dwb19kb2Vjcgk9Ci0JCVRPU0FfVEM2MzkzWEJfR1BJT19CSVQoVE9TQV9HUElPX0NBUkRfVkNDX09OKSwKIAogCS5pcnFfYmFzZQk9IElSUV9CT0FSRF9TVEFSVCwKIAkuZ3Bpb19iYXNlCT0gVE9TQV9UQzYzOTNYQl9HUElPX0JBU0UsCisJLnNldHVwCQk9IHRvc2FfdGM2MzkzeGJfc2V0dXAsCisJLnRlYXJkb3duCT0gdG9zYV90YzYzOTN4Yl90ZWFyZG93biwKIAogCS5lbmFibGUJCT0gdG9zYV90YzYzOTN4Yl9lbmFibGUsCiAJLmRpc2FibGUJPSB0b3NhX3RjNjM5M3hiX2Rpc2FibGUsCkBAIC03MjMsNiArNzQ2LDggQEAKIAkucmVzdW1lCQk9IHRvc2FfdGM2MzkzeGJfcmVzdW1lLAogCiAJLm5hbmRfZGF0YQk9ICZ0b3NhX3RjNjM5M3hiX25hbmRfY29uZmlnLAorCisJLnJlc3VtZV9yZXN0b3JlID0gMSwKIH07CiAKIApAQCAtNzMwLDcgKzc1NSw3IEBACiAJLm5hbWUJPSAidGM2MzkzeGIiLAogCS5pZAk9IC0xLAogCS5kZXYJPSB7Ci0JCS5wbGF0Zm9ybV9kYXRhCT0gJnRvc2FfdGM2MzkzeGJfc2V0dXAsCisJCS5wbGF0Zm9ybV9kYXRhCT0gJnRvc2FfdGM2MzkzeGJfZGF0YSwKIAl9LAogCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRSh0YzYzOTN4Yl9yZXNvdXJjZXMpLAogCS5yZXNvdXJjZQk9IHRjNjM5M3hiX3Jlc291cmNlcywKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL3ZpcGVyLmMgYi9hcmNoL2FybS9tYWNoLXB4YS92aXBlci5jCmluZGV4IGQ3NjMyZjYuLjRiMzEyMGQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL3ZpcGVyLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvdmlwZXIuYwpAQCAtMjA0LDI1ICsyMDQsNTQgQEAKIAogLyogSW50ZXJydXB0IGhhbmRsaW5nICovCiBzdGF0aWMgdW5zaWduZWQgbG9uZyB2aXBlcl9pcnFfZW5hYmxlZF9tYXNrOworc3RhdGljIGNvbnN0IGludCB2aXBlcl9pc2FfaXJxc1tdID0geyAzLCA0LCA1LCA2LCA3LCAxMCwgMTEsIDEyLCA5LCAxNCwgMTUgfTsKK3N0YXRpYyBjb25zdCBpbnQgdmlwZXJfaXNhX2lycV9tYXBbXSA9IHsKKwkwLAkJLyogSVNBIGlycSAjMCwgaW52YWxpZCAqLworCTAsCQkvKiBJU0EgaXJxICMxLCBpbnZhbGlkICovCisJMCwJCS8qIElTQSBpcnEgIzIsIGludmFsaWQgKi8KKwkxIDw8IDAsCQkvKiBJU0EgaXJxICMzICovCisJMSA8PCAxLAkJLyogSVNBIGlycSAjNCAqLworCTEgPDwgMiwJCS8qIElTQSBpcnEgIzUgKi8KKwkxIDw8IDMsCQkvKiBJU0EgaXJxICM2ICovCisJMSA8PCA0LAkJLyogSVNBIGlycSAjNyAqLworCTAsCQkvKiBJU0EgaXJxICM4LCBpbnZhbGlkICovCisJMSA8PCA4LAkJLyogSVNBIGlycSAjOSAqLworCTEgPDwgNSwJCS8qIElTQSBpcnEgIzEwICovCisJMSA8PCA2LAkJLyogSVNBIGlycSAjMTEgKi8KKwkxIDw8IDcsCQkvKiBJU0EgaXJxICMxMiAqLworCTAsCQkvKiBJU0EgaXJxICMxMywgaW52YWxpZCAqLworCTEgPDwgOSwJCS8qIElTQSBpcnEgIzE0ICovCisJMSA8PCAxMCwJLyogSVNBIGlycSAjMTUgKi8KK307CisKK3N0YXRpYyBpbmxpbmUgaW50IHZpcGVyX2lycV90b19iaXRtYXNrKHVuc2lnbmVkIGludCBpcnEpCit7CisJcmV0dXJuIHZpcGVyX2lzYV9pcnFfbWFwW2lycSAtIFBYQV9JU0FfSVJRKDApXTsKK30KKworc3RhdGljIGlubGluZSBpbnQgdmlwZXJfYml0X3RvX2lycShpbnQgYml0KQoreworCXJldHVybiB2aXBlcl9pc2FfaXJxc1tiaXRdICsgUFhBX0lTQV9JUlEoMCk7Cit9CiAKIHN0YXRpYyB2b2lkIHZpcGVyX2Fja19pcnEodW5zaWduZWQgaW50IGlycSkKIHsKLQlpbnQgdmlwZXJfaXJxID0gaXJxIC0gUFhBX0lTQV9JUlEoMCk7CisJaW50IHZpcGVyX2lycSA9IHZpcGVyX2lycV90b19iaXRtYXNrKGlycSk7CiAKLQlpZiAodmlwZXJfaXJxIDwgOCkKLQkJVklQRVJfTE9fSVJRX1NUQVRVUyA9IDEgPDwgdmlwZXJfaXJxOworCWlmICh2aXBlcl9pcnEgJiAweGZmKQorCQlWSVBFUl9MT19JUlFfU1RBVFVTID0gdmlwZXJfaXJxOwogCWVsc2UKLQkJVklQRVJfSElfSVJRX1NUQVRVUyA9IDEgPDwgKHZpcGVyX2lycSAtIDgpOworCQlWSVBFUl9ISV9JUlFfU1RBVFVTID0gKHZpcGVyX2lycSA+PiA4KTsKIH0KIAogc3RhdGljIHZvaWQgdmlwZXJfbWFza19pcnEodW5zaWduZWQgaW50IGlycSkKIHsKLQl2aXBlcl9pcnFfZW5hYmxlZF9tYXNrICY9IH4oMSA8PCAoaXJxIC0gUFhBX0lTQV9JUlEoMCkpKTsKKwl2aXBlcl9pcnFfZW5hYmxlZF9tYXNrICY9IH4odmlwZXJfaXJxX3RvX2JpdG1hc2soaXJxKSk7CiB9CiAKIHN0YXRpYyB2b2lkIHZpcGVyX3VubWFza19pcnEodW5zaWduZWQgaW50IGlycSkKIHsKLQl2aXBlcl9pcnFfZW5hYmxlZF9tYXNrIHw9ICgxIDw8IChpcnEgLSBQWEFfSVNBX0lSUSgwKSkpOworCXZpcGVyX2lycV9lbmFibGVkX21hc2sgfD0gdmlwZXJfaXJxX3RvX2JpdG1hc2soaXJxKTsKIH0KIAogc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHZpcGVyX2lycV9wZW5kaW5nKHZvaWQpCkBAIC0yMzcsOCArMjY2LDEyIEBACiAKIAlwZW5kaW5nID0gdmlwZXJfaXJxX3BlbmRpbmcoKTsKIAlkbyB7CisJCS8qIHdlJ3JlIGluIGEgY2hhaW5lZCBpcnEgaGFuZGxlciwKKwkJICogc28gYWNrIHRoZSBpbnRlcnJ1cHQgYnkgaGFuZCAqLworCQlHRURSKFZJUEVSX0NQTERfR1BJTykgPSBHUElPX2JpdChWSVBFUl9DUExEX0dQSU8pOworCiAJCWlmIChsaWtlbHkocGVuZGluZykpIHsKLQkJCWlycSA9IFBYQV9JU0FfSVJRKDApICsgX19mZnMocGVuZGluZyk7CisJCQlpcnEgPSB2aXBlcl9iaXRfdG9faXJxKF9fZmZzKHBlbmRpbmcpKTsKIAkJCWdlbmVyaWNfaGFuZGxlX2lycShpcnEpOwogCQl9CiAJCXBlbmRpbmcgPSB2aXBlcl9pcnFfcGVuZGluZygpOwpAQCAtMjU0LDE1ICsyODcsMTQgQEAKIAogc3RhdGljIHZvaWQgX19pbml0IHZpcGVyX2luaXRfaXJxKHZvaWQpCiB7Ci0JY29uc3QgaW50IGlzYV9pcnFzW10gPSB7IDMsIDQsIDUsIDYsIDcsIDEwLCAxMSwgMTIsIDksIDE0LCAxNSB9OwotCWludCBpcnE7CisJaW50IGxldmVsOwogCWludCBpc2FfaXJxOwogCiAJcHhhMjV4X2luaXRfaXJxKCk7CiAKIAkvKiBzZXR1cCBJU0EgSVJRcyAqLwotCWZvciAoaXJxID0gMDsgaXJxIDwgQVJSQVlfU0laRShpc2FfaXJxcyk7IGlycSsrKSB7Ci0JCWlzYV9pcnEgPSBpc2FfaXJxc1tpcnFdOworCWZvciAobGV2ZWwgPSAwOyBsZXZlbCA8IEFSUkFZX1NJWkUodmlwZXJfaXNhX2lycXMpOyBsZXZlbCsrKSB7CisJCWlzYV9pcnEgPSB2aXBlcl9iaXRfdG9faXJxKGxldmVsKTsKIAkJc2V0X2lycV9jaGlwKGlzYV9pcnEsICZ2aXBlcl9pcnFfY2hpcCk7CiAJCXNldF9pcnFfaGFuZGxlcihpc2FfaXJxLCBoYW5kbGVfZWRnZV9pcnEpOwogCQlzZXRfaXJxX2ZsYWdzKGlzYV9pcnEsIElSUUZfVkFMSUQgfCBJUlFGX1BST0JFKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9iYXN0LWlycS5jIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2Jhc3QtaXJxLmMKaW5kZXggNzU3MzgwMC4uOWEzN2M4NyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2Jhc3QtaXJxLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2Jhc3QtaXJxLmMKQEAgLTM4LDcgKzM4LDcgQEAKICNpbmNsdWRlIDxtYWNoL2Jhc3QtbWFwLmg+CiAjaW5jbHVkZSA8bWFjaC9iYXN0LWlycS5oPgogCi0jaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC9pcnEuaD4KKyNpbmNsdWRlIDxwbGF0L2lycS5oPgogCiAjaWYgMAogI2luY2x1ZGUgPGFzbS9kZWJ1Zy1sbC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2Nsb2NrLmMgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvY2xvY2suYwppbmRleCBmZWY2NDZjLi40ZTA3OTQzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvY2xvY2suYworKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvY2xvY2suYwpAQCAtMzcsMTMgKzM3LDEzIEBACiAKICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CiAKLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MvcmVncy1zZXJpYWwuaD4KKyNpbmNsdWRlIDxwbGF0L3JlZ3Mtc2VyaWFsLmg+CiAjaW5jbHVkZSA8bWFjaC9yZWdzLWNsb2NrLmg+CiAjaW5jbHVkZSA8bWFjaC9yZWdzLWdwaW8uaD4KIAotI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvczNjMjQxMC5oPgotI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvY2xvY2suaD4KLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L2NwdS5oPgorI2luY2x1ZGUgPHBsYXQvczNjMjQxMC5oPgorI2luY2x1ZGUgPHBsYXQvY2xvY2suaD4KKyNpbmNsdWRlIDxwbGF0L2NwdS5oPgogCiBpbnQgczNjMjQxMF9jbGtjb25fZW5hYmxlKHN0cnVjdCBjbGsgKmNsaywgaW50IGVuYWJsZSkKIHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9kbWEuYyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9kbWEuYwppbmRleCA4NzMwNzk3Li43ZDkxNGE0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvZG1hLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2RtYS5jCkBAIC0yMCwxMCArMjAsMTAgQEAKICNpbmNsdWRlIDxhc20vZG1hLmg+CiAjaW5jbHVkZSA8bWFjaC9kbWEuaD4KIAotI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvY3B1Lmg+Ci0jaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC9kbWEuaD4KKyNpbmNsdWRlIDxwbGF0L2NwdS5oPgorI2luY2x1ZGUgPHBsYXQvZG1hLmg+CiAKLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MvcmVncy1zZXJpYWwuaD4KKyNpbmNsdWRlIDxwbGF0L3JlZ3Mtc2VyaWFsLmg+CiAjaW5jbHVkZSA8bWFjaC9yZWdzLWdwaW8uaD4KICNpbmNsdWRlIDxhc20vcGxhdC1zM2MvcmVncy1hYzk3Lmg+CiAjaW5jbHVkZSA8bWFjaC9yZWdzLW1lbS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TCmluZGV4IDY4MmRmMjMuLjRjMjlhODkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUworKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMKQEAgLTE0LDcgKzE0LDcgQEAKIAogI2luY2x1ZGUgPG1hY2gvbWFwLmg+CiAjaW5jbHVkZSA8bWFjaC9yZWdzLWdwaW8uaD4KLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MvcmVncy1zZXJpYWwuaD4KKyNpbmNsdWRlIDxwbGF0L3JlZ3Mtc2VyaWFsLmg+CiAKICNkZWZpbmUgUzNDMjQxMF9VQVJUMV9PRkYgKDB4NDAwMCkKICNkZWZpbmUgU0hJRlRfMjQ0MFRYRiAoMTQtOSkKQEAgLTk5LDQgKzk5LDQgQEAKIAogLyogaW5jbHVkZSB0aGUgcmVzZXQgb2YgdGhlIGNvZGUgd2hpY2ggd2lsbCBkbyB0aGUgd29yayAqLwogCi0jaW5jbHVkZSA8YXNtL3BsYXQtczNjL2RlYnVnLW1hY3JvLlM+CisjaW5jbHVkZSA8cGxhdC9kZWJ1Zy1tYWNyby5TPgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2luY2x1ZGUvbWFjaC9tYXAuaCBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9pbmNsdWRlL21hY2gvbWFwLmgKaW5kZXggNjRiZjdlOS4uMjNjNDcwYyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2luY2x1ZGUvbWFjaC9tYXAuaAorKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvaW5jbHVkZS9tYWNoL21hcC5oCkBAIC0xMyw3ICsxMyw3IEBACiAjaWZuZGVmIF9fQVNNX0FSQ0hfTUFQX0gKICNkZWZpbmUgX19BU01fQVJDSF9NQVBfSAogCi0jaW5jbHVkZSA8YXNtL3BsYXQtczNjL21hcC5oPgorI2luY2x1ZGUgPHBsYXQvbWFwLmg+CiAKICNkZWZpbmUgUzNDMjQxMF9BRERSKHgpCQlTM0NfQUREUih4KQogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvaW5jbHVkZS9tYWNoL3NwaS5oIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2luY2x1ZGUvbWFjaC9zcGkuaAppbmRleCA5MjFiMTNiLi40NmQ0NmY1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvaW5jbHVkZS9tYWNoL3NwaS5oCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9pbmNsdWRlL21hY2gvc3BpLmgKQEAgLTE4LDYgKzE4LDcgQEAKIAl1bnNpZ25lZCBpbnQJCSBudW1fY3M7CS8qIHRvdGFsIGNoaXBzZWxlY3RzICovCiAJaW50CQkJIGJ1c19udW07ICAgICAgIC8qIGJ1cyBudW1iZXIgdG8gdXNlLiAqLwogCisJdm9pZCAoKmdwaW9fc2V0dXApKHN0cnVjdCBzM2MyNDEwX3NwaV9pbmZvICpzcGksIGludCBlbmFibGUpOwogCXZvaWQgKCpzZXRfY3MpKHN0cnVjdCBzM2MyNDEwX3NwaV9pbmZvICpzcGksIGludCBjcywgaW50IHBvbCk7CiB9OwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvaW5jbHVkZS9tYWNoL3VuY29tcHJlc3MuaCBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9pbmNsdWRlL21hY2gvdW5jb21wcmVzcy5oCmluZGV4IDcwOGU0NzQuLmFiMzk0OTEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9pbmNsdWRlL21hY2gvdW5jb21wcmVzcy5oCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9pbmNsdWRlL21hY2gvdW5jb21wcmVzcy5oCkBAIC0yMSw3ICsyMSw3IEBACiAjdW5kZWYgUzNDMjQxMF9HUElPUkVHCiAjZGVmaW5lIFMzQzI0MTBfR1BJT1JFRyh4KSAoKFMzQzI0WFhfUEFfR1BJTyArICh4KSkpCiAKLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MvdW5jb21wcmVzcy5oPgorI2luY2x1ZGUgPHBsYXQvdW5jb21wcmVzcy5oPgogCiBzdGF0aWMgaW5saW5lIGludCBpc19hcm05MjYodm9pZCkKIHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9pcnEuYyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9pcnEuYwppbmRleCBmNWM1YzUzLi45MjE1MDM5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvaXJxLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2lycS5jCkBAIC0yNSw4ICsyNSw4IEBACiAjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CiAjaW5jbHVkZSA8bGludXgvc3lzZGV2Lmg+CiAKLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L2NwdS5oPgotI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvcG0uaD4KKyNpbmNsdWRlIDxwbGF0L2NwdS5oPgorI2luY2x1ZGUgPHBsYXQvcG0uaD4KIAogc3RhdGljIGludCBzM2MyNDEwX2lycV9hZGQoc3RydWN0IHN5c19kZXZpY2UgKnN5c2RldikKIHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9tYWNoLWFtbG01OTAwLmMgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC1hbWxtNTkwMC5jCmluZGV4IDUyN2Y4OGEuLmQwNjFmZWEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9tYWNoLWFtbG01OTAwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL21hY2gtYW1sbTU5MDAuYwpAQCAtNDgsMTIgKzQ4LDEyIEBACiAjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KICNpbmNsdWRlIDxtYWNoL2ZiLmg+CiAKLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MvcmVncy1zZXJpYWwuaD4KKyNpbmNsdWRlIDxwbGF0L3JlZ3Mtc2VyaWFsLmg+CiAjaW5jbHVkZSA8bWFjaC9yZWdzLWxjZC5oPgogI2luY2x1ZGUgPG1hY2gvcmVncy1ncGlvLmg+CiAKLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L2RldnMuaD4KLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L2NwdS5oPgorI2luY2x1ZGUgPHBsYXQvZGV2cy5oPgorI2luY2x1ZGUgPHBsYXQvY3B1Lmg+CiAKICNpZmRlZiBDT05GSUdfTVREX1BBUlRJVElPTlMKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL21hY2gtYmFzdC5jIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL21hY2gtYmFzdC5jCmluZGV4IGU0MzY4ZTYuLjhkYjljNzAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9tYWNoLWJhc3QuYworKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC1iYXN0LmMKQEAgLTM5LDcgKzM5LDcgQEAKICNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgogCiAvLyNpbmNsdWRlIDxhc20vZGVidWctbGwuaD4KLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MvcmVncy1zZXJpYWwuaD4KKyNpbmNsdWRlIDxwbGF0L3JlZ3Mtc2VyaWFsLmg+CiAjaW5jbHVkZSA8bWFjaC9yZWdzLWdwaW8uaD4KICNpbmNsdWRlIDxtYWNoL3JlZ3MtbWVtLmg+CiAjaW5jbHVkZSA8bWFjaC9yZWdzLWxjZC5oPgpAQCAtNTUsOSArNTUsOSBAQAogCiAjaW5jbHVkZSA8bGludXgvc2VyaWFsXzgyNTAuaD4KIAotI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvY2xvY2suaD4KLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L2RldnMuaD4KLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L2NwdS5oPgorI2luY2x1ZGUgPHBsYXQvY2xvY2suaD4KKyNpbmNsdWRlIDxwbGF0L2RldnMuaD4KKyNpbmNsdWRlIDxwbGF0L2NwdS5oPgogCiAjaW5jbHVkZSAidXNiLXNpbXRlYy5oIgogI2luY2x1ZGUgIm5vci1zaW10ZWMuaCIKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9tYWNoLWgxOTQwLmMgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC1oMTk0MC5jCmluZGV4IDg1ZTcxMGYuLjk4NzE2ZDAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9tYWNoLWgxOTQwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL21hY2gtaDE5NDAuYwpAQCAtMzAsNyArMzAsNyBAQAogI2luY2x1ZGUgPGFzbS9pcnEuaD4KICNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgogCi0jaW5jbHVkZSA8YXNtL3BsYXQtczNjL3JlZ3Mtc2VyaWFsLmg+CisjaW5jbHVkZSA8cGxhdC9yZWdzLXNlcmlhbC5oPgogI2luY2x1ZGUgPG1hY2gvcmVncy1sY2QuaD4KICNpbmNsdWRlIDxtYWNoL3JlZ3MtZ3Bpby5oPgogI2luY2x1ZGUgPG1hY2gvcmVncy1jbG9jay5oPgpAQCAtNDAsMTAgKzQwLDEwIEBACiAjaW5jbHVkZSA8bWFjaC9mYi5oPgogI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvdWRjLmg+CiAKLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L2Nsb2NrLmg+Ci0jaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC9kZXZzLmg+Ci0jaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC9jcHUuaD4KLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L3BtLmg+CisjaW5jbHVkZSA8cGxhdC9jbG9jay5oPgorI2luY2x1ZGUgPHBsYXQvZGV2cy5oPgorI2luY2x1ZGUgPHBsYXQvY3B1Lmg+CisjaW5jbHVkZSA8cGxhdC9wbS5oPgogCiBzdGF0aWMgc3RydWN0IG1hcF9kZXNjIGgxOTQwX2lvZGVzY1tdIF9faW5pdGRhdGEgPSB7CiAJWzBdID0gewpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL21hY2gtbjMwLmMgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC1uMzAuYwppbmRleCAzZWNlMmQwLi44MjUwNTUxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC1uMzAuYworKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC1uMzAuYwpAQCAtNDEsMTIgKzQxLDEyIEBACiAjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+CiAKICNpbmNsdWRlIDxhc20vcGxhdC1zM2MvaWljLmg+Ci0jaW5jbHVkZSA8YXNtL3BsYXQtczNjL3JlZ3Mtc2VyaWFsLmg+CisjaW5jbHVkZSA8cGxhdC9yZWdzLXNlcmlhbC5oPgogCi0jaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC9jbG9jay5oPgotI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvY3B1Lmg+Ci0jaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC9kZXZzLmg+Ci0jaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC9zM2MyNDEwLmg+CisjaW5jbHVkZSA8cGxhdC9jbG9jay5oPgorI2luY2x1ZGUgPHBsYXQvY3B1Lmg+CisjaW5jbHVkZSA8cGxhdC9kZXZzLmg+CisjaW5jbHVkZSA8cGxhdC9zM2MyNDEwLmg+CiAjaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC91ZGMuaD4KIAogc3RhdGljIHN0cnVjdCBtYXBfZGVzYyBuMzBfaW9kZXNjW10gX19pbml0ZGF0YSA9IHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9tYWNoLW90b20uYyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9tYWNoLW90b20uYwppbmRleCBjNGRmZTNlLi5kODI1NWNmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC1vdG9tLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL21hY2gtb3RvbS5jCkBAIC0yOSwxMyArMjksMTMgQEAKICNpbmNsdWRlIDxhc20vaXJxLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KIAotI2luY2x1ZGUgPGFzbS9wbGF0LXMzYy9yZWdzLXNlcmlhbC5oPgorI2luY2x1ZGUgPHBsYXQvcmVncy1zZXJpYWwuaD4KICNpbmNsdWRlIDxtYWNoL3JlZ3MtZ3Bpby5oPgogCi0jaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC9zM2MyNDEwLmg+Ci0jaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC9jbG9jay5oPgotI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvZGV2cy5oPgotI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvY3B1Lmg+CisjaW5jbHVkZSA8cGxhdC9zM2MyNDEwLmg+CisjaW5jbHVkZSA8cGxhdC9jbG9jay5oPgorI2luY2x1ZGUgPHBsYXQvZGV2cy5oPgorI2luY2x1ZGUgPHBsYXQvY3B1Lmg+CiAKIHN0YXRpYyBzdHJ1Y3QgbWFwX2Rlc2Mgb3RvbTExX2lvZGVzY1tdIF9faW5pdGRhdGEgPSB7CiAgIC8qIERldmljZSBhcmVhICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC1xdDI0MTAuYyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9tYWNoLXF0MjQxMC5jCmluZGV4IDk3YzEzMTkuLjY2MTgwN2UgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9tYWNoLXF0MjQxMC5jCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9tYWNoLXF0MjQxMC5jCkBAIC00OCwxNyArNDgsMTcgQEAKIAogI2luY2x1ZGUgPG1hY2gvcmVncy1ncGlvLmg+CiAjaW5jbHVkZSA8bWFjaC9sZWRzLWdwaW8uaD4KLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MvcmVncy1zZXJpYWwuaD4KKyNpbmNsdWRlIDxwbGF0L3JlZ3Mtc2VyaWFsLmg+CiAjaW5jbHVkZSA8bWFjaC9mYi5oPgogI2luY2x1ZGUgPGFzbS9wbGF0LXMzYy9uYW5kLmg+CiAjaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC91ZGMuaD4KICNpbmNsdWRlIDxtYWNoL3NwaS5oPgogI2luY2x1ZGUgPG1hY2gvc3BpLWdwaW8uaD4KIAotI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvY29tbW9uLXNtZGsuaD4KLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L2RldnMuaD4KLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L2NwdS5oPgotI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvcG0uaD4KKyNpbmNsdWRlIDxwbGF0L2NvbW1vbi1zbWRrLmg+CisjaW5jbHVkZSA8cGxhdC9kZXZzLmg+CisjaW5jbHVkZSA8cGxhdC9jcHUuaD4KKyNpbmNsdWRlIDxwbGF0L3BtLmg+CiAKIHN0YXRpYyBzdHJ1Y3QgbWFwX2Rlc2MgcXQyNDEwX2lvZGVzY1tdIF9faW5pdGRhdGEgPSB7CiAJeyAweGUwMDAwMDAwLCBfX3BoeXNfdG9fcGZuKFMzQzI0MTBfQ1MzKzB4MDEwMDAwMDApLCBTWl8xTSwgTVRfREVWSUNFIH0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9tYWNoLXNtZGsyNDEwLmMgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC1zbWRrMjQxMC5jCmluZGV4IGQ0OWU1OGEuLjE1MjUyN2IgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9tYWNoLXNtZGsyNDEwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL21hY2gtc21kazI0MTAuYwpAQCAtNDYsMTIgKzQ2LDEyIEBACiAjaW5jbHVkZSA8YXNtL2lycS5oPgogI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CiAKLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MvcmVncy1zZXJpYWwuaD4KKyNpbmNsdWRlIDxwbGF0L3JlZ3Mtc2VyaWFsLmg+CiAKLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L2RldnMuaD4KLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L2NwdS5oPgorI2luY2x1ZGUgPHBsYXQvZGV2cy5oPgorI2luY2x1ZGUgPHBsYXQvY3B1Lmg+CiAKLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L2NvbW1vbi1zbWRrLmg+CisjaW5jbHVkZSA8cGxhdC9jb21tb24tc21kay5oPgogCiBzdGF0aWMgc3RydWN0IG1hcF9kZXNjIHNtZGsyNDEwX2lvZGVzY1tdIF9faW5pdGRhdGEgPSB7CiAgIC8qIG5vdGhpbmcgaGVyZSB5ZXQgKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9tYWNoLXRjdF9oYW1tZXIuYyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9tYWNoLXRjdF9oYW1tZXIuYwppbmRleCBjYzJlNzlmLi4zMDlkY2Y0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC10Y3RfaGFtbWVyLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL21hY2gtdGN0X2hhbW1lci5jCkBAIC00NCw5ICs0NCw5IEBACiAjaW5jbHVkZSA8YXNtL2lycS5oPgogI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CiAKLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MvcmVncy1zZXJpYWwuaD4KLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L2RldnMuaD4KLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L2NwdS5oPgorI2luY2x1ZGUgPHBsYXQvcmVncy1zZXJpYWwuaD4KKyNpbmNsdWRlIDxwbGF0L2RldnMuaD4KKyNpbmNsdWRlIDxwbGF0L2NwdS5oPgogCiAjaWZkZWYgQ09ORklHX01URF9QQVJUSVRJT05TCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9tYWNoLXZyMTAwMC5jIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL21hY2gtdnIxMDAwLmMKaW5kZXggZWQzYWNiMC4uOTQxMzUzYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL21hY2gtdnIxMDAwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL21hY2gtdnIxMDAwLmMKQEAgLTQwLDEzICs0MCwxMyBAQAogI2luY2x1ZGUgPGFzbS9pcnEuaD4KICNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgogCi0jaW5jbHVkZSA8YXNtL3BsYXQtczNjL3JlZ3Mtc2VyaWFsLmg+CisjaW5jbHVkZSA8cGxhdC9yZWdzLXNlcmlhbC5oPgogI2luY2x1ZGUgPG1hY2gvcmVncy1ncGlvLmg+CiAjaW5jbHVkZSA8bWFjaC9sZWRzLWdwaW8uaD4KIAotI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvY2xvY2suaD4KLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L2RldnMuaD4KLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L2NwdS5oPgorI2luY2x1ZGUgPHBsYXQvY2xvY2suaD4KKyNpbmNsdWRlIDxwbGF0L2RldnMuaD4KKyNpbmNsdWRlIDxwbGF0L2NwdS5oPgogCiAjaW5jbHVkZSAidXNiLXNpbXRlYy5oIgogI2luY2x1ZGUgIm5vci1zaW10ZWMuaCIKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9wbS5jIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL3BtLmMKaW5kZXggNzMzZjhhMi4uYTY5NzBmNiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL3BtLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL3BtLmMKQEAgLTM0LDggKzM0LDggQEAKICNpbmNsdWRlIDxtYWNoL3JlZ3MtZ3Bpby5oPgogI2luY2x1ZGUgPG1hY2gvaDE5NDAuaD4KIAotI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvY3B1Lmg+Ci0jaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC9wbS5oPgorI2luY2x1ZGUgPHBsYXQvY3B1Lmg+CisjaW5jbHVkZSA8cGxhdC9wbS5oPgogCiAjaWZkZWYgQ09ORklHX1MzQzI0MTBfUE1fREVCVUcKIGV4dGVybiB2b2lkIHBtX2RiZyhjb25zdCBjaGFyICpmbXQsIC4uLik7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvczNjMjQxMC5jIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL3MzYzI0MTAuYwppbmRleCBiMWU2NThjLi5hYzc5YjUzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvczNjMjQxMC5jCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9zM2MyNDEwLmMKQEAgLTI5LDEyICsyOSwxMiBAQAogI2luY2x1ZGUgPGFzbS9pcnEuaD4KIAogI2luY2x1ZGUgPG1hY2gvcmVncy1jbG9jay5oPgotI2luY2x1ZGUgPGFzbS9wbGF0LXMzYy9yZWdzLXNlcmlhbC5oPgorI2luY2x1ZGUgPHBsYXQvcmVncy1zZXJpYWwuaD4KIAotI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvczNjMjQxMC5oPgotI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvY3B1Lmg+Ci0jaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC9kZXZzLmg+Ci0jaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC9jbG9jay5oPgorI2luY2x1ZGUgPHBsYXQvczNjMjQxMC5oPgorI2luY2x1ZGUgPHBsYXQvY3B1Lmg+CisjaW5jbHVkZSA8cGxhdC9kZXZzLmg+CisjaW5jbHVkZSA8cGxhdC9jbG9jay5oPgogCiAvKiBJbml0aWFsIElPIG1hcHBpbmdzICovCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9zbGVlcC5TIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL3NsZWVwLlMKaW5kZXggYmUzN2YyMi4uZGQ1YjYzOCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL3NsZWVwLlMKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL3NsZWVwLlMKQEAgLTMyLDcgKzMyLDcgQEAKICNpbmNsdWRlIDxtYWNoL3JlZ3MtZ3Bpby5oPgogI2luY2x1ZGUgPG1hY2gvcmVncy1jbG9jay5oPgogI2luY2x1ZGUgPG1hY2gvcmVncy1tZW0uaD4KLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MvcmVncy1zZXJpYWwuaD4KKyNpbmNsdWRlIDxwbGF0L3JlZ3Mtc2VyaWFsLmg+CiAKIAkvKiBzM2MyNDEwX2NwdV9zdXNwZW5kCiAJICoKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC91c2Itc2ltdGVjLmMgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvdXNiLXNpbXRlYy5jCmluZGV4IGViNmZjMGIuLjYwNzhmMDkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC91c2Itc2ltdGVjLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL3VzYi1zaW10ZWMuYwpAQCAtMzUsNyArMzUsNyBAQAogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KICNpbmNsdWRlIDxhc20vaXJxLmg+CiAKLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L2RldnMuaD4KKyNpbmNsdWRlIDxwbGF0L2RldnMuaD4KICNpbmNsdWRlICJ1c2Itc2ltdGVjLmgiCiAKIC8qIGNvbnRyb2wgcG93ZXIgYW5kIG1vbml0b3Igb3Zlci1jdXJyZW50IGV2ZW50cyBvbiB2YXJpb3VzIFNpbXRlYwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEyL2Nsb2NrLmMgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTIvY2xvY2suYwppbmRleCA1ZmJhYWM2Li45NmQ5ZWIxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0MTIvY2xvY2suYworKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTIvY2xvY2suYwpAQCAtMzcsMTMgKzM3LDEzIEBACiAKICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CiAKLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MvcmVncy1zZXJpYWwuaD4KKyNpbmNsdWRlIDxwbGF0L3JlZ3Mtc2VyaWFsLmg+CiAjaW5jbHVkZSA8bWFjaC9yZWdzLWNsb2NrLmg+CiAjaW5jbHVkZSA8bWFjaC9yZWdzLWdwaW8uaD4KIAotI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvczNjMjQxMi5oPgotI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvY2xvY2suaD4KLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L2NwdS5oPgorI2luY2x1ZGUgPHBsYXQvczNjMjQxMi5oPgorI2luY2x1ZGUgPHBsYXQvY2xvY2suaD4KKyNpbmNsdWRlIDxwbGF0L2NwdS5oPgogCiAvKiBXZSBjdXJyZW50bHkgaGF2ZSB0byBhc3N1bWUgdGhhdCB0aGUgc3lzdGVtIGlzIHJ1bm5pbmcKICAqIGZyb20gdGhlIFhUUGxsIGlucHV0LCBhbmQgdGhhdCBhbGwgKioqUkVGQ0xLcyBhcmUgYmVpbmcKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQxMi9kbWEuYyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMi9kbWEuYwppbmRleCBkY2ZmZjZiLi5iYTA1OTFlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0MTIvZG1hLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEyL2RtYS5jCkBAIC0yMSwxMCArMjEsMTAgQEAKICNpbmNsdWRlIDxhc20vZG1hLmg+CiAjaW5jbHVkZSA8bWFjaC9kbWEuaD4KIAotI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvZG1hLmg+Ci0jaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC9jcHUuaD4KKyNpbmNsdWRlIDxwbGF0L2RtYS5oPgorI2luY2x1ZGUgPHBsYXQvY3B1Lmg+CiAKLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MvcmVncy1zZXJpYWwuaD4KKyNpbmNsdWRlIDxwbGF0L3JlZ3Mtc2VyaWFsLmg+CiAjaW5jbHVkZSA8bWFjaC9yZWdzLWdwaW8uaD4KICNpbmNsdWRlIDxhc20vcGxhdC1zM2MvcmVncy1hYzk3Lmg+CiAjaW5jbHVkZSA8bWFjaC9yZWdzLW1lbS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEyL2lycS5jIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEyL2lycS5jCmluZGV4IDQxNzIwZjIuLjYwMDBjYTkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQxMi9pcnEuYworKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTIvaXJxLmMKQEAgLTM1LDkgKzM1LDkgQEAKICNpbmNsdWRlIDxtYWNoL3JlZ3MtZ3Bpby5oPgogI2luY2x1ZGUgPG1hY2gvcmVncy1wb3dlci5oPgogCi0jaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC9jcHUuaD4KLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L2lycS5oPgotI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvcG0uaD4KKyNpbmNsdWRlIDxwbGF0L2NwdS5oPgorI2luY2x1ZGUgPHBsYXQvaXJxLmg+CisjaW5jbHVkZSA8cGxhdC9wbS5oPgogCiAjZGVmaW5lIElOVE1TSyhzdGFydCwgZW5kKSAoKDEgPDwgKChlbmQpICsgMSAtIChzdGFydCkpKSAtIDEpCiAjZGVmaW5lIElOVE1TS19TVUIoc3RhcnQsIGVuZCkgKElOVE1TSyhzdGFydCwgZW5kKSA8PCAoKHN0YXJ0IC0gUzNDMjQxMF9JUlFTVUIoMCkpKSkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQxMi9tYWNoLWppdmUuYyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMi9tYWNoLWppdmUuYwppbmRleCBhZDk4MGExLi5iMDhmMThjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0MTIvbWFjaC1qaXZlLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEyL21hY2gtaml2ZS5jCkBAIC0zMCw3ICszMCw3IEBACiAjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvaXJxLmg+CiAKLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MvcmVncy1zZXJpYWwuaD4KKyNpbmNsdWRlIDxwbGF0L3JlZ3Mtc2VyaWFsLmg+CiAjaW5jbHVkZSA8YXNtL3BsYXQtczNjL25hbmQuaD4KICNpbmNsdWRlIDxhc20vcGxhdC1zM2MvaWljLmg+CiAKQEAgLTQ4LDEwICs0OCwxMCBAQAogI2luY2x1ZGUgPGxpbnV4L210ZC9uYW5kX2VjYy5oPgogI2luY2x1ZGUgPGxpbnV4L210ZC9wYXJ0aXRpb25zLmg+CiAKLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L2Nsb2NrLmg+Ci0jaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC9kZXZzLmg+Ci0jaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC9jcHUuaD4KLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L3BtLmg+CisjaW5jbHVkZSA8cGxhdC9jbG9jay5oPgorI2luY2x1ZGUgPHBsYXQvZGV2cy5oPgorI2luY2x1ZGUgPHBsYXQvY3B1Lmg+CisjaW5jbHVkZSA8cGxhdC9wbS5oPgogI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvdWRjLmg+CiAKIHN0YXRpYyBzdHJ1Y3QgbWFwX2Rlc2Mgaml2ZV9pb2Rlc2NbXSBfX2luaXRkYXRhID0gewpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEyL21hY2gtc21kazI0MTMuYyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMi9tYWNoLXNtZGsyNDEzLmMKaW5kZXggOGY4ZDkxMS4uYzcxOWI1YTcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQxMi9tYWNoLXNtZGsyNDEzLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEyL21hY2gtc21kazI0MTMuYwpAQCAtMzIsNyArMzIsNyBAQAogI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CiAKIC8vI2luY2x1ZGUgPGFzbS9kZWJ1Zy1sbC5oPgotI2luY2x1ZGUgPGFzbS9wbGF0LXMzYy9yZWdzLXNlcmlhbC5oPgorI2luY2x1ZGUgPHBsYXQvcmVncy1zZXJpYWwuaD4KICNpbmNsdWRlIDxtYWNoL3JlZ3MtZ3Bpby5oPgogI2luY2x1ZGUgPG1hY2gvcmVncy1sY2QuaD4KIApAQCAtNDAsMTMgKzQwLDEzIEBACiAjaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC91ZGMuaD4KICNpbmNsdWRlIDxtYWNoL2ZiLmg+CiAKLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L3MzYzI0MTAuaD4KLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L3MzYzI0MTIuaD4KLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L2Nsb2NrLmg+Ci0jaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC9kZXZzLmg+Ci0jaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC9jcHUuaD4KKyNpbmNsdWRlIDxwbGF0L3MzYzI0MTAuaD4KKyNpbmNsdWRlIDxwbGF0L3MzYzI0MTIuaD4KKyNpbmNsdWRlIDxwbGF0L2Nsb2NrLmg+CisjaW5jbHVkZSA8cGxhdC9kZXZzLmg+CisjaW5jbHVkZSA8cGxhdC9jcHUuaD4KIAotI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvY29tbW9uLXNtZGsuaD4KKyNpbmNsdWRlIDxwbGF0L2NvbW1vbi1zbWRrLmg+CiAKIHN0YXRpYyBzdHJ1Y3QgbWFwX2Rlc2Mgc21kazI0MTNfaW9kZXNjW10gX19pbml0ZGF0YSA9IHsKIH07CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0MTIvbWFjaC12c3Rtcy5jIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEyL21hY2gtdnN0bXMuYwppbmRleCBiYjliZjYzLi40Y2ZhMTlhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0MTIvbWFjaC12c3Rtcy5jCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMi9tYWNoLXZzdG1zLmMKQEAgLTMyLDcgKzMyLDcgQEAKICNpbmNsdWRlIDxhc20vaXJxLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KIAotI2luY2x1ZGUgPGFzbS9wbGF0LXMzYy9yZWdzLXNlcmlhbC5oPgorI2luY2x1ZGUgPHBsYXQvcmVncy1zZXJpYWwuaD4KICNpbmNsdWRlIDxtYWNoL3JlZ3MtZ3Bpby5oPgogI2luY2x1ZGUgPG1hY2gvcmVncy1sY2QuaD4KIApAQCAtNDEsMTEgKzQxLDExIEBACiAKICNpbmNsdWRlIDxhc20vcGxhdC1zM2MvbmFuZC5oPgogCi0jaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC9zM2MyNDEwLmg+Ci0jaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC9zM2MyNDEyLmg+Ci0jaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC9jbG9jay5oPgotI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvZGV2cy5oPgotI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvY3B1Lmg+CisjaW5jbHVkZSA8cGxhdC9zM2MyNDEwLmg+CisjaW5jbHVkZSA8cGxhdC9zM2MyNDEyLmg+CisjaW5jbHVkZSA8cGxhdC9jbG9jay5oPgorI2luY2x1ZGUgPHBsYXQvZGV2cy5oPgorI2luY2x1ZGUgPHBsYXQvY3B1Lmg+CiAKIAogc3RhdGljIHN0cnVjdCBtYXBfZGVzYyB2c3Rtc19pb2Rlc2NbXSBfX2luaXRkYXRhID0gewpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEyL3BtLmMgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTIvcG0uYwppbmRleCA5NTQwZWY3Li4yMTdlOWU0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0MTIvcG0uYworKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTIvcG0uYwpAQCAtMjgsMTAgKzI4LDEwIEBACiAjaW5jbHVkZSA8bWFjaC9yZWdzLWdwaW8uaD4KICNpbmNsdWRlIDxtYWNoL3JlZ3MtZHNjLmg+CiAKLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L2NwdS5oPgotI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvcG0uaD4KKyNpbmNsdWRlIDxwbGF0L2NwdS5oPgorI2luY2x1ZGUgPHBsYXQvcG0uaD4KIAotI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvczNjMjQxMi5oPgorI2luY2x1ZGUgPHBsYXQvczNjMjQxMi5oPgogCiBleHRlcm4gdm9pZCBzM2MyNDEyX3NsZWVwX2VudGVyKHZvaWQpOwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0MTIvczNjMjQxMi5jIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEyL3MzYzI0MTIuYwppbmRleCA0MjQ0MGZjLi4zMTM3NTljIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0MTIvczNjMjQxMi5jCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMi9zM2MyNDEyLmMKQEAgLTM0LDcgKzM0LDcgQEAKICNpbmNsdWRlIDxtYWNoL2lkbGUuaD4KIAogI2luY2x1ZGUgPG1hY2gvcmVncy1jbG9jay5oPgotI2luY2x1ZGUgPGFzbS9wbGF0LXMzYy9yZWdzLXNlcmlhbC5oPgorI2luY2x1ZGUgPHBsYXQvcmVncy1zZXJpYWwuaD4KICNpbmNsdWRlIDxtYWNoL3JlZ3MtcG93ZXIuaD4KICNpbmNsdWRlIDxtYWNoL3JlZ3MtZ3Bpby5oPgogI2luY2x1ZGUgPG1hY2gvcmVncy1ncGlvai5oPgpAQCAtNDIsMTEgKzQyLDExIEBACiAjaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC9yZWdzLXNwaS5oPgogI2luY2x1ZGUgPG1hY2gvcmVncy1zM2MyNDEyLmg+CiAKLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L3MzYzI0MTIuaD4KLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L2NwdS5oPgotI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvZGV2cy5oPgotI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvY2xvY2suaD4KLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L3BtLmg+CisjaW5jbHVkZSA8cGxhdC9zM2MyNDEyLmg+CisjaW5jbHVkZSA8cGxhdC9jcHUuaD4KKyNpbmNsdWRlIDxwbGF0L2RldnMuaD4KKyNpbmNsdWRlIDxwbGF0L2Nsb2NrLmg+CisjaW5jbHVkZSA8cGxhdC9wbS5oPgogCiAjaWZuZGVmIENPTkZJR19DUFVfUzNDMjQxMl9PTkxZCiB2b2lkIF9faW9tZW0gKnMzYzI0eHhfdmFfZ3BpbzIgPSBTM0MyNFhYX1ZBX0dQSU87CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0NDAvY2xvY2suYyBiL2FyY2gvYXJtL21hY2gtczNjMjQ0MC9jbG9jay5jCmluZGV4IDQwNTAzYTYuLmQxYzI5YjIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQ0MC9jbG9jay5jCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQ0MC9jbG9jay5jCkBAIC00MSw4ICs0MSw4IEBACiAKICNpbmNsdWRlIDxtYWNoL3JlZ3MtY2xvY2suaD4KIAotI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvY2xvY2suaD4KLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L2NwdS5oPgorI2luY2x1ZGUgPHBsYXQvY2xvY2suaD4KKyNpbmNsdWRlIDxwbGF0L2NwdS5oPgogCiAvKiBTM0MyNDQwIGV4dGVuZGVkIGNsb2NrIHN1cHBvcnQgKi8KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDQwL2RtYS5jIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDQwL2RtYS5jCmluZGV4IGNkZDRlNmUuLjMyMzAzZjYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQ0MC9kbWEuYworKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0NDAvZG1hLmMKQEAgLTIwLDEwICsyMCwxMCBAQAogI2luY2x1ZGUgPGFzbS9kbWEuaD4KICNpbmNsdWRlIDxtYWNoL2RtYS5oPgogCi0jaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC9kbWEuaD4KLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L2NwdS5oPgorI2luY2x1ZGUgPHBsYXQvZG1hLmg+CisjaW5jbHVkZSA8cGxhdC9jcHUuaD4KIAotI2luY2x1ZGUgPGFzbS9wbGF0LXMzYy9yZWdzLXNlcmlhbC5oPgorI2luY2x1ZGUgPHBsYXQvcmVncy1zZXJpYWwuaD4KICNpbmNsdWRlIDxtYWNoL3JlZ3MtZ3Bpby5oPgogI2luY2x1ZGUgPGFzbS9wbGF0LXMzYy9yZWdzLWFjOTcuaD4KICNpbmNsdWRlIDxtYWNoL3JlZ3MtbWVtLmg+CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0NDAvZHNjLmMgYi9hcmNoL2FybS9tYWNoLXMzYzI0NDAvZHNjLmMKaW5kZXggNGY3ZDA2Yi4uNTU0MDQ0MiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNDQwL2RzYy5jCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQ0MC9kc2MuYwpAQCAtMjcsOCArMjcsOCBAQAogI2luY2x1ZGUgPG1hY2gvcmVncy1ncGlvLmg+CiAjaW5jbHVkZSA8bWFjaC9yZWdzLWRzYy5oPgogCi0jaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC9jcHUuaD4KLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L3MzYzI0NDAuaD4KKyNpbmNsdWRlIDxwbGF0L2NwdS5oPgorI2luY2x1ZGUgPHBsYXQvczNjMjQ0MC5oPgogCiBpbnQgczNjMjQ0MF9zZXRfZHNjKHVuc2lnbmVkIGludCBwaW4sIHVuc2lnbmVkIGludCB2YWx1ZSkKIHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQ0MC9pcnEuYyBiL2FyY2gvYXJtL21hY2gtczNjMjQ0MC9pcnEuYwppbmRleCAzM2UzZWRlLi42M2M1YWI2NSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNDQwL2lycS5jCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQ0MC9pcnEuYwpAQCAtMzQsOSArMzQsOSBAQAogI2luY2x1ZGUgPG1hY2gvcmVncy1pcnEuaD4KICNpbmNsdWRlIDxtYWNoL3JlZ3MtZ3Bpby5oPgogCi0jaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC9jcHUuaD4KLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L3BtLmg+Ci0jaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC9pcnEuaD4KKyNpbmNsdWRlIDxwbGF0L2NwdS5oPgorI2luY2x1ZGUgPHBsYXQvcG0uaD4KKyNpbmNsdWRlIDxwbGF0L2lycS5oPgogCiAvKiBXRFQvQUM5NyAqLwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0NDAvbWFjaC1hbnViaXMuYyBiL2FyY2gvYXJtL21hY2gtczNjMjQ0MC9tYWNoLWFudWJpcy5jCmluZGV4IDE5ZWIwZTUyLi5lMmJlY2E0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0NDAvbWFjaC1hbnViaXMuYworKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0NDAvbWFjaC1hbnViaXMuYwpAQCAtMzUsNyArMzUsNyBAQAogI2luY2x1ZGUgPGFzbS9pcnEuaD4KICNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgogCi0jaW5jbHVkZSA8YXNtL3BsYXQtczNjL3JlZ3Mtc2VyaWFsLmg+CisjaW5jbHVkZSA8cGxhdC9yZWdzLXNlcmlhbC5oPgogI2luY2x1ZGUgPG1hY2gvcmVncy1ncGlvLmg+CiAjaW5jbHVkZSA8bWFjaC9yZWdzLW1lbS5oPgogI2luY2x1ZGUgPG1hY2gvcmVncy1sY2QuaD4KQEAgLTQ4LDkgKzQ4LDkgQEAKIAogI2luY2x1ZGUgPG5ldC9heDg4Nzk2Lmg+CiAKLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L2Nsb2NrLmg+Ci0jaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC9kZXZzLmg+Ci0jaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC9jcHUuaD4KKyNpbmNsdWRlIDxwbGF0L2Nsb2NrLmg+CisjaW5jbHVkZSA8cGxhdC9kZXZzLmg+CisjaW5jbHVkZSA8cGxhdC9jcHUuaD4KIAogI2RlZmluZSBDT1BZUklHSFQgIiwgKGMpIDIwMDUgU2ltdGVjIEVsZWN0cm9uaWNzIgogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0NDAvbWFjaC1hdDI0NDBldmIuYyBiL2FyY2gvYXJtL21hY2gtczNjMjQ0MC9tYWNoLWF0MjQ0MGV2Yi5jCmluZGV4IGYwZjBjYzYuLjY2ODc2YzYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQ0MC9tYWNoLWF0MjQ0MGV2Yi5jCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQ0MC9tYWNoLWF0MjQ0MGV2Yi5jCkBAIC0zMSw3ICszMSw3IEBACiAjaW5jbHVkZSA8YXNtL2lycS5oPgogI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CiAKLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MvcmVncy1zZXJpYWwuaD4KKyNpbmNsdWRlIDxwbGF0L3JlZ3Mtc2VyaWFsLmg+CiAjaW5jbHVkZSA8bWFjaC9yZWdzLWdwaW8uaD4KICNpbmNsdWRlIDxtYWNoL3JlZ3MtbWVtLmg+CiAjaW5jbHVkZSA8bWFjaC9yZWdzLWxjZC5oPgpAQCAtNDIsOSArNDIsOSBAQAogI2luY2x1ZGUgPGxpbnV4L210ZC9uYW5kX2VjYy5oPgogI2luY2x1ZGUgPGxpbnV4L210ZC9wYXJ0aXRpb25zLmg+CiAKLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L2Nsb2NrLmg+Ci0jaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC9kZXZzLmg+Ci0jaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC9jcHUuaD4KKyNpbmNsdWRlIDxwbGF0L2Nsb2NrLmg+CisjaW5jbHVkZSA8cGxhdC9kZXZzLmg+CisjaW5jbHVkZSA8cGxhdC9jcHUuaD4KIAogc3RhdGljIHN0cnVjdCBtYXBfZGVzYyBhdDI0NDBldmJfaW9kZXNjW10gX19pbml0ZGF0YSA9IHsKIAkvKiBOb3RoaW5nIGhlcmUgKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQ0MC9tYWNoLW5leGNvZGVyLmMgYi9hcmNoL2FybS9tYWNoLXMzYzI0NDAvbWFjaC1uZXhjb2Rlci5jCmluZGV4IDQ5ZTgyOGQuLmE1NDYzMDcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQ0MC9tYWNoLW5leGNvZGVyLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDQwL21hY2gtbmV4Y29kZXIuYwpAQCAtMzYsMTMgKzM2LDEzIEBACiAKIC8vI2luY2x1ZGUgPGFzbS9kZWJ1Zy1sbC5oPgogI2luY2x1ZGUgPG1hY2gvcmVncy1ncGlvLmg+Ci0jaW5jbHVkZSA8YXNtL3BsYXQtczNjL3JlZ3Mtc2VyaWFsLmg+CisjaW5jbHVkZSA8cGxhdC9yZWdzLXNlcmlhbC5oPgogCi0jaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC9zM2MyNDEwLmg+Ci0jaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC9zM2MyNDQwLmg+Ci0jaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC9jbG9jay5oPgotI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvZGV2cy5oPgotI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvY3B1Lmg+CisjaW5jbHVkZSA8cGxhdC9zM2MyNDEwLmg+CisjaW5jbHVkZSA8cGxhdC9zM2MyNDQwLmg+CisjaW5jbHVkZSA8cGxhdC9jbG9jay5oPgorI2luY2x1ZGUgPHBsYXQvZGV2cy5oPgorI2luY2x1ZGUgPHBsYXQvY3B1Lmg+CiAKIHN0YXRpYyBzdHJ1Y3QgbWFwX2Rlc2MgbmV4Y29kZXJfaW9kZXNjW10gX19pbml0ZGF0YSA9IHsKIAkvKiBub3RoaW5nIGhlcmUgeWV0ICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0NDAvbWFjaC1vc2lyaXMuYyBiL2FyY2gvYXJtL21hY2gtczNjMjQ0MC9tYWNoLW9zaXJpcy5jCmluZGV4IDg1MTQ0YWEuLjIzNjFkNjAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQ0MC9tYWNoLW9zaXJpcy5jCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQ0MC9tYWNoLW9zaXJpcy5jCkBAIC0zMyw3ICszMyw3IEBACiAjaW5jbHVkZSA8YXNtL2lycS5oPgogI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CiAKLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MvcmVncy1zZXJpYWwuaD4KKyNpbmNsdWRlIDxwbGF0L3JlZ3Mtc2VyaWFsLmg+CiAjaW5jbHVkZSA8bWFjaC9yZWdzLWdwaW8uaD4KICNpbmNsdWRlIDxtYWNoL3JlZ3MtbWVtLmg+CiAjaW5jbHVkZSA8bWFjaC9yZWdzLWxjZC5oPgpAQCAtNDQsOSArNDQsOSBAQAogI2luY2x1ZGUgPGxpbnV4L210ZC9uYW5kX2VjYy5oPgogI2luY2x1ZGUgPGxpbnV4L210ZC9wYXJ0aXRpb25zLmg+CiAKLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L2Nsb2NrLmg+Ci0jaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC9kZXZzLmg+Ci0jaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC9jcHUuaD4KKyNpbmNsdWRlIDxwbGF0L2Nsb2NrLmg+CisjaW5jbHVkZSA8cGxhdC9kZXZzLmg+CisjaW5jbHVkZSA8cGxhdC9jcHUuaD4KIAogLyogb25ib2FyZCBwZXJpaHBlcmFsIG1hcCAqLwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0NDAvbWFjaC1yeDM3MTUuYyBiL2FyY2gvYXJtL21hY2gtczNjMjQ0MC9tYWNoLXJ4MzcxNS5jCmluZGV4IGE0YzY5MDQuLjRkMTRjN2MgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQ0MC9tYWNoLXJ4MzcxNS5jCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQ0MC9tYWNoLXJ4MzcxNS5jCkBAIC0zNyw3ICszNyw3IEBACiAjaW5jbHVkZSA8YXNtL2lycS5oPgogI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CiAKLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MvcmVncy1zZXJpYWwuaD4KKyNpbmNsdWRlIDxwbGF0L3JlZ3Mtc2VyaWFsLmg+CiAjaW5jbHVkZSA8bWFjaC9yZWdzLWdwaW8uaD4KICNpbmNsdWRlIDxtYWNoL3JlZ3MtbGNkLmg+CiAKQEAgLTQ1LDEwICs0NSwxMCBAQAogI2luY2x1ZGUgPGFzbS9wbGF0LXMzYy9uYW5kLmg+CiAjaW5jbHVkZSA8bWFjaC9mYi5oPgogCi0jaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC9jbG9jay5oPgotI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvZGV2cy5oPgotI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvY3B1Lmg+Ci0jaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC9wbS5oPgorI2luY2x1ZGUgPHBsYXQvY2xvY2suaD4KKyNpbmNsdWRlIDxwbGF0L2RldnMuaD4KKyNpbmNsdWRlIDxwbGF0L2NwdS5oPgorI2luY2x1ZGUgPHBsYXQvcG0uaD4KIAogc3RhdGljIHN0cnVjdCBtYXBfZGVzYyByeDM3MTVfaW9kZXNjW10gX19pbml0ZGF0YSA9IHsKIAkvKiBkdW1wIElTQSBzcGFjZSBzb21ld2hlcmUgdW51c2VkICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0NDAvbWFjaC1zbWRrMjQ0MC5jIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDQwL21hY2gtc21kazI0NDAuYwppbmRleCA3YWM2MGI4Li5mZWZlYWFhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0NDAvbWFjaC1zbWRrMjQ0MC5jCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQ0MC9tYWNoLXNtZGsyNDQwLmMKQEAgLTMxLDIwICszMSwyMCBAQAogI2luY2x1ZGUgPGFzbS9pcnEuaD4KICNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgogCi0jaW5jbHVkZSA8YXNtL3BsYXQtczNjL3JlZ3Mtc2VyaWFsLmg+CisjaW5jbHVkZSA8cGxhdC9yZWdzLXNlcmlhbC5oPgogI2luY2x1ZGUgPG1hY2gvcmVncy1ncGlvLmg+CiAjaW5jbHVkZSA8bWFjaC9yZWdzLWxjZC5oPgogCiAjaW5jbHVkZSA8bWFjaC9pZGxlLmg+CiAjaW5jbHVkZSA8bWFjaC9mYi5oPgogCi0jaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC9zM2MyNDEwLmg+Ci0jaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC9zM2MyNDQwLmg+Ci0jaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC9jbG9jay5oPgotI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvZGV2cy5oPgotI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvY3B1Lmg+CisjaW5jbHVkZSA8cGxhdC9zM2MyNDEwLmg+CisjaW5jbHVkZSA8cGxhdC9zM2MyNDQwLmg+CisjaW5jbHVkZSA8cGxhdC9jbG9jay5oPgorI2luY2x1ZGUgPHBsYXQvZGV2cy5oPgorI2luY2x1ZGUgPHBsYXQvY3B1Lmg+CiAKLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L2NvbW1vbi1zbWRrLmg+CisjaW5jbHVkZSA8cGxhdC9jb21tb24tc21kay5oPgogCiBzdGF0aWMgc3RydWN0IG1hcF9kZXNjIHNtZGsyNDQwX2lvZGVzY1tdIF9faW5pdGRhdGEgPSB7CiAJLyogSVNBIElPIFNwYWNlIG1hcCAobWVtb3J5IHNwYWNlIHNlbGVjdGVkIGJ5IEEyNCkgKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQ0MC9zM2MyNDQwLmMgYi9hcmNoL2FybS9tYWNoLXMzYzI0NDAvczNjMjQ0MC5jCmluZGV4IGM4MWNkYjMuLmFjMWY3ZWEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQ0MC9zM2MyNDQwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDQwL3MzYzI0NDAuYwpAQCAtMjksOSArMjksOSBAQAogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KICNpbmNsdWRlIDxhc20vaXJxLmg+CiAKLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L3MzYzI0NDAuaD4KLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L2RldnMuaD4KLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L2NwdS5oPgorI2luY2x1ZGUgPHBsYXQvczNjMjQ0MC5oPgorI2luY2x1ZGUgPHBsYXQvZGV2cy5oPgorI2luY2x1ZGUgPHBsYXQvY3B1Lmg+CiAKIHN0YXRpYyBzdHJ1Y3Qgc3lzX2RldmljZSBzM2MyNDQwX3N5c2RldiA9IHsKIAkuY2xzCQk9ICZzM2MyNDQwX3N5c2NsYXNzLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDQyL2Nsb2NrLmMgYi9hcmNoL2FybS9tYWNoLXMzYzI0NDIvY2xvY2suYwppbmRleCAxOGYyY2U0Li5lYTFhYTFmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0NDIvY2xvY2suYworKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0NDIvY2xvY2suYwpAQCAtNDEsOCArNDEsOCBAQAogCiAjaW5jbHVkZSA8bWFjaC9yZWdzLWNsb2NrLmg+CiAKLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L2Nsb2NrLmg+Ci0jaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC9jcHUuaD4KKyNpbmNsdWRlIDxwbGF0L2Nsb2NrLmg+CisjaW5jbHVkZSA8cGxhdC9jcHUuaD4KIAogLyogUzNDMjQ0MiBleHRlbmRlZCBjbG9jayBzdXBwb3J0ICovCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQ0Mi9zM2MyNDQyLmMgYi9hcmNoL2FybS9tYWNoLXMzYzI0NDIvczNjMjQ0Mi5jCmluZGV4IGZiZjgyNjQuLjQ2NjNiZGMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQ0Mi9zM2MyNDQyLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDQyL3MzYzI0NDIuYwpAQCAtMTksOCArMTksOCBAQAogI2luY2x1ZGUgPGxpbnV4L3NlcmlhbF9jb3JlLmg+CiAjaW5jbHVkZSA8bGludXgvc3lzZGV2Lmg+CiAKLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L3MzYzI0NDIuaD4KLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L2NwdS5oPgorI2luY2x1ZGUgPHBsYXQvczNjMjQ0Mi5oPgorI2luY2x1ZGUgPHBsYXQvY3B1Lmg+CiAKIHN0YXRpYyBzdHJ1Y3Qgc3lzX2RldmljZSBzM2MyNDQyX3N5c2RldiA9IHsKIAkuY2xzCQk9ICZzM2MyNDQyX3N5c2NsYXNzLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDQzL2Nsb2NrLmMgYi9hcmNoL2FybS9tYWNoLXMzYzI0NDMvY2xvY2suYwppbmRleCA2MDNiNWVhLi4yZjYwYmY2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0NDMvY2xvY2suYworKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0NDMvY2xvY2suYwpAQCAtMzksOSArMzksOSBAQAogCiAjaW5jbHVkZSA8bWFjaC9yZWdzLXMzYzI0NDMtY2xvY2suaD4KIAotI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvczNjMjQ0My5oPgotI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvY2xvY2suaD4KLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L2NwdS5oPgorI2luY2x1ZGUgPHBsYXQvczNjMjQ0My5oPgorI2luY2x1ZGUgPHBsYXQvY2xvY2suaD4KKyNpbmNsdWRlIDxwbGF0L2NwdS5oPgogCiAvKiBXZSBjdXJyZW50bHkgaGF2ZSB0byBhc3N1bWUgdGhhdCB0aGUgc3lzdGVtIGlzIHJ1bm5pbmcKICAqIGZyb20gdGhlIFhUUGxsIGlucHV0LCBhbmQgdGhhdCBhbGwgKioqUkVGQ0xLcyBhcmUgYmVpbmcKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQ0My9kbWEuYyBiL2FyY2gvYXJtL21hY2gtczNjMjQ0My9kbWEuYwppbmRleCA1ZDllZTc3Li5mNzNjY2IyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0NDMvZG1hLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDQzL2RtYS5jCkBAIC0yMSwxMCArMjEsMTAgQEAKICNpbmNsdWRlIDxhc20vZG1hLmg+CiAjaW5jbHVkZSA8bWFjaC9kbWEuaD4KIAotI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvZG1hLmg+Ci0jaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC9jcHUuaD4KKyNpbmNsdWRlIDxwbGF0L2RtYS5oPgorI2luY2x1ZGUgPHBsYXQvY3B1Lmg+CiAKLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MvcmVncy1zZXJpYWwuaD4KKyNpbmNsdWRlIDxwbGF0L3JlZ3Mtc2VyaWFsLmg+CiAjaW5jbHVkZSA8bWFjaC9yZWdzLWdwaW8uaD4KICNpbmNsdWRlIDxhc20vcGxhdC1zM2MvcmVncy1hYzk3Lmg+CiAjaW5jbHVkZSA8bWFjaC9yZWdzLW1lbS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDQzL2lycS5jIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDQzL2lycS5jCmluZGV4IGU0NDM0MWQuLjBlMGQ2OTMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQ0My9pcnEuYworKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0NDMvaXJxLmMKQEAgLTM0LDkgKzM0LDkgQEAKICNpbmNsdWRlIDxtYWNoL3JlZ3MtaXJxLmg+CiAjaW5jbHVkZSA8bWFjaC9yZWdzLWdwaW8uaD4KIAotI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvY3B1Lmg+Ci0jaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC9wbS5oPgotI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvaXJxLmg+CisjaW5jbHVkZSA8cGxhdC9jcHUuaD4KKyNpbmNsdWRlIDxwbGF0L3BtLmg+CisjaW5jbHVkZSA8cGxhdC9pcnEuaD4KIAogI2RlZmluZSBJTlRNU0soc3RhcnQsIGVuZCkgKCgxIDw8ICgoZW5kKSArIDEgLSAoc3RhcnQpKSkgLSAxKQogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0NDMvbWFjaC1zbWRrMjQ0My5jIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDQzL21hY2gtc21kazI0NDMuYwppbmRleCBmMGQxMTlkLi5hN2ZlNjVmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0NDMvbWFjaC1zbWRrMjQ0My5jCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQ0My9tYWNoLXNtZGsyNDQzLmMKQEAgLTMxLDIwICszMSwyMCBAQAogI2luY2x1ZGUgPGFzbS9pcnEuaD4KICNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgogCi0jaW5jbHVkZSA8YXNtL3BsYXQtczNjL3JlZ3Mtc2VyaWFsLmg+CisjaW5jbHVkZSA8cGxhdC9yZWdzLXNlcmlhbC5oPgogI2luY2x1ZGUgPG1hY2gvcmVncy1ncGlvLmg+CiAjaW5jbHVkZSA8bWFjaC9yZWdzLWxjZC5oPgogCiAjaW5jbHVkZSA8bWFjaC9pZGxlLmg+CiAjaW5jbHVkZSA8bWFjaC9mYi5oPgogCi0jaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC9zM2MyNDEwLmg+Ci0jaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC9zM2MyNDQwLmg+Ci0jaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC9jbG9jay5oPgotI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvZGV2cy5oPgotI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvY3B1Lmg+CisjaW5jbHVkZSA8cGxhdC9zM2MyNDEwLmg+CisjaW5jbHVkZSA8cGxhdC9zM2MyNDQwLmg+CisjaW5jbHVkZSA8cGxhdC9jbG9jay5oPgorI2luY2x1ZGUgPHBsYXQvZGV2cy5oPgorI2luY2x1ZGUgPHBsYXQvY3B1Lmg+CiAKLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L2NvbW1vbi1zbWRrLmg+CisjaW5jbHVkZSA8cGxhdC9jb21tb24tc21kay5oPgogCiBzdGF0aWMgc3RydWN0IG1hcF9kZXNjIHNtZGsyNDQzX2lvZGVzY1tdIF9faW5pdGRhdGEgPSB7CiAJLyogSVNBIElPIFNwYWNlIG1hcCAobWVtb3J5IHNwYWNlIHNlbGVjdGVkIGJ5IEEyNCkgKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQ0My9zM2MyNDQzLmMgYi9hcmNoL2FybS9tYWNoLXMzYzI0NDMvczNjMjQ0My5jCmluZGV4IGM5NzNiNjguLmJiZWRkZjkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQ0My9zM2MyNDQzLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDQzL3MzYzI0NDMuYwpAQCAtMzIsOSArMzIsOSBAQAogI2luY2x1ZGUgPG1hY2gvcmVncy1zM2MyNDQzLWNsb2NrLmg+CiAjaW5jbHVkZSA8bWFjaC9yZXNldC5oPgogCi0jaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC9zM2MyNDQzLmg+Ci0jaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC9kZXZzLmg+Ci0jaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC9jcHUuaD4KKyNpbmNsdWRlIDxwbGF0L3MzYzI0NDMuaD4KKyNpbmNsdWRlIDxwbGF0L2RldnMuaD4KKyNpbmNsdWRlIDxwbGF0L2NwdS5oPgogCiBzdGF0aWMgc3RydWN0IG1hcF9kZXNjIHMzYzI0NDNfaW9kZXNjW10gX19pbml0ZGF0YSA9IHsKIAlJT0RFU0NfRU5UKFdBVENIRE9HKSwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc2ExMTAwL2NwdS1zYTExMDAuYyBiL2FyY2gvYXJtL21hY2gtc2ExMTAwL2NwdS1zYTExMDAuYwppbmRleCBmN2ZhMDM0Ny4uMjQ0ZDU5NSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zYTExMDAvY3B1LXNhMTEwMC5jCisrKyBiL2FyY2gvYXJtL21hY2gtc2ExMTAwL2NwdS1zYTExMDAuYwpAQCAtMjI0LDcgKzIyNCw2IEBACiAJaWYgKHBvbGljeS0+Y3B1ICE9IDApCiAJCXJldHVybiAtRUlOVkFMOwogCXBvbGljeS0+Y3VyID0gcG9saWN5LT5taW4gPSBwb2xpY3ktPm1heCA9IHNhMTF4MF9nZXRzcGVlZCgwKTsKLQlwb2xpY3ktPmdvdmVybm9yID0gQ1BVRlJFUV9ERUZBVUxUX0dPVkVSTk9SOwogCXBvbGljeS0+Y3B1aW5mby5taW5fZnJlcSA9IDU5MDAwOwogCXBvbGljeS0+Y3B1aW5mby5tYXhfZnJlcSA9IDI4NzAwMDsKIAlwb2xpY3ktPmNwdWluZm8udHJhbnNpdGlvbl9sYXRlbmN5ID0gQ1BVRlJFUV9FVEVSTkFMOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zYTExMDAvaW5jbHVkZS9tYWNoL2lkZS5oIGIvYXJjaC9hcm0vbWFjaC1zYTExMDAvaW5jbHVkZS9tYWNoL2lkZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0Yzk5YzhmLi4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL21hY2gtc2ExMTAwL2luY2x1ZGUvbWFjaC9pZGUuaAorKysgL2Rldi9udWxsCkBAIC0xLDc1ICswLDAgQEAKLS8qCi0gKiBhcmNoL2FybS9tYWNoLXNhMTEwMC9pbmNsdWRlL21hY2gvaWRlLmgKLSAqCi0gKiBDb3B5cmlnaHQgKGMpIDE5OTggSHVnbyBGaWVubmVzICYgTmljb2xhcyBQaXRyZQotICoKLSAqIDE4LWF1Zy0yMDAwOiBDbGVhbnVwIGJ5IEVyaWsgTW91dyAoSi5BLksuTW91d0BpdHMudHVkZWxmdC5ubCkKLSAqICAgICAgICAgICAgICBHZXQgcmlkIG9mIHRoZSBzcGVjaWFsIGlkZV9pbml0X2h3aWZfcG9ydHMoKSBmdW5jdGlvbnMKLSAqICAgICAgICAgICAgICBhbmQgbWFrZSBhIGdlbmVyYWxpc2VkIGZ1bmN0aW9uIHRoYXQgY2FuIGJlIHVzZWQgYnkgYWxsCi0gKiAgICAgICAgICAgICAgYXJjaGl0ZWN0dXJlcy4KLSAqLwotCi0jaW5jbHVkZSA8YXNtL2lycS5oPgotI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KLSNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgotCi0jZXJyb3IgIlRoaXMgY29kZSBpcyBicm9rZW4gYW5kIG5lZWRzIHVwZGF0ZSB0byBtYXRjaCB3aXRoIGN1cnJlbnQgaWRlIHN1cHBvcnQiCi0KLQotLyoKLSAqIFNldCB1cCBhIGh3IHN0cnVjdHVyZSBmb3IgYSBzcGVjaWZpZWQgZGF0YSBwb3J0LCBjb250cm9sIHBvcnQgYW5kIElSUS4KLSAqIFRoaXMgc2hvdWxkIGZvbGxvdyB3aGF0ZXZlciB0aGUgZGVmYXVsdCBpbnRlcmZhY2UgdXNlcy4KLSAqLwotc3RhdGljIGlubGluZSB2b2lkIGlkZV9pbml0X2h3aWZfcG9ydHMoaHdfcmVnc190ICpodywgdW5zaWduZWQgbG9uZyBkYXRhX3BvcnQsCi0JCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgY3RybF9wb3J0LCBpbnQgKmlycSkKLXsKLQl1bnNpZ25lZCBsb25nIHJlZyA9IGRhdGFfcG9ydDsKLQlpbnQgaTsKLQlpbnQgcmVnaW5jciA9IDE7Ci0KLQkvKiBUaGUgRW1wZWcgYm9hcmQgaGFzIHRoZSBmaXJzdCB0d28gYWRkcmVzcyBsaW5lcyB1bnVzZWQgKi8KLQlpZiAobWFjaGluZV9pc19lbXBlZygpKQotCQlyZWdpbmNyID0gMSA8PCAyOwotCi0JLyogVGhlIExBUlQgZG9lc24ndCB1c2UgQTAgZm9yIElERSAqLwotCWlmIChtYWNoaW5lX2lzX2xhcnQoKSkKLQkJcmVnaW5jciA9IDEgPDwgMTsKLQotCW1lbXNldChodywgMCwgc2l6ZW9mKCpodykpOwotCi0JZm9yIChpID0gMDsgaSA8PSA3OyBpKyspIHsKLQkJaHctPmlvX3BvcnRzX2FycmF5W2ldID0gcmVnOwotCQlyZWcgKz0gcmVnaW5jcjsKLQl9Ci0KLQlody0+aW9fcG9ydHMuY3RsX2FkZHIgPSBjdHJsX3BvcnQ7Ci0KLQlpZiAoaXJxKQotCQkqaXJxID0gMDsKLX0KLQotLyoKLSAqIFRoaXMgcmVnaXN0ZXJzIHRoZSBzdGFuZGFyZCBwb3J0cyBmb3IgdGhpcyBhcmNoaXRlY3R1cmUgd2l0aCB0aGUgSURFCi0gKiBkcml2ZXIuCi0gKi8KLXN0YXRpYyBfX2lubGluZV9fIHZvaWQKLWlkZV9pbml0X2RlZmF1bHRfaHdpZnModm9pZCkKLXsKLSAgICBpZiAobWFjaGluZV9pc19sYXJ0KCkpIHsKLSNpZmRlZiBDT05GSUdfU0ExMTAwX0xBUlQKLSAgICAgICAgaHdfcmVnc190IGh3OwotCi0gICAgICAgIC8qIEVuYWJsZSBHUElPIGFzIGludGVycnVwdCBsaW5lICovCi0gICAgICAgIEdQRFIgJj0gfkxBUlRfR1BJT19JREU7Ci0Jc2V0X2lycV90eXBlKExBUlRfSVJRX0lERSwgSVJRX1RZUEVfRURHRV9SSVNJTkcpOwotCi0gICAgICAgIC8qIHNldCBQQ01DSUEgaW50ZXJmYWNlIHRpbWluZyAqLwotICAgICAgICBNRUNSID0gMHgwMDA2MDAwNjsKLQotICAgICAgICAvKiBpbml0IHRoZSBpbnRlcmZhY2UgKi8KLQlpZGVfaW5pdF9od2lmX3BvcnRzKCZodywgUENNQ0lBX0lPXzBfQkFTRSArIDB4MDAwMCwgUENNQ0lBX0lPXzBfQkFTRSArIDB4MTAwMCwgTlVMTCk7Ci0gICAgICAgIGh3LmlycSA9IExBUlRfSVJRX0lERTsKLSAgICAgICAgaWRlX3JlZ2lzdGVyX2h3KCZodyk7Ci0jZW5kaWYKLSAgICB9Ci19CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9LY29uZmlnIGIvYXJjaC9hcm0vbW0vS2NvbmZpZwppbmRleCAzMzA4MTRkLi5kMTE5Mzg4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9LY29uZmlnCisrKyBiL2FyY2gvYXJtL21tL0tjb25maWcKQEAgLTQyOCw3ICs0MjgsNyBAQAogIyBBUk12NwogY29uZmlnIENQVV9WNwogCWJvb2wgIlN1cHBvcnQgQVJNIFY3IHByb2Nlc3NvciIKLQlkZXBlbmRzIG9uIEFSQ0hfSU5URUdSQVRPUiB8fCBNQUNIX1JFQUxWSUVXX0VCCisJZGVwZW5kcyBvbiBBUkNIX0lOVEVHUkFUT1IgfHwgTUFDSF9SRUFMVklFV19FQiB8fCBBUkNIX09NQVAzCiAJc2VsZWN0IENQVV8zMnY2SwogCXNlbGVjdCBDUFVfMzJ2NwogCXNlbGVjdCBDUFVfQUJSVF9FVjcKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9teGNfbmFuZC5oIGIvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL214Y19uYW5kLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmI5NzJkZgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9teGNfbmFuZC5oCkBAIC0wLDAgKzEsMjcgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwNC0yMDA3IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgMjAwOCBTYXNjaGEgSGF1ZXIsIGtlcm5lbEBwZW5ndXRyb25peC5kZQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMgorICogb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLAorICogTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgX19BU01fQVJDSF9OQU5EX0gKKyNkZWZpbmUgX19BU01fQVJDSF9OQU5EX0gKKworc3RydWN0IG14Y19uYW5kX3BsYXRmb3JtX2RhdGEgeworCWludCB3aWR0aDsJLyogZGF0YSBidXMgd2lkdGggaW4gYnl0ZXMgKi8KKwlpbnQgaHdfZWNjOwkvKiAwIGlmIHN1cHJlc3MgaGFyZHdhcmUgRUNDICovCit9OworI2VuZGlmIC8qIF9fQVNNX0FSQ0hfTkFORF9IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvS2NvbmZpZyBiL2FyY2gvYXJtL3BsYXQtb21hcC9LY29uZmlnCmluZGV4IGI5MTcyMDYuLmE5NGYwYzQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9LY29uZmlnCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9LY29uZmlnCkBAIC0xNSw2ICsxNSw5IEBACiBjb25maWcgQVJDSF9PTUFQMgogCWJvb2wgIlRJIE9NQVAyIgogCitjb25maWcgQVJDSF9PTUFQMworCWJvb2wgIlRJIE9NQVAzIgorCiBlbmRjaG9pY2UKIAogY29tbWVudCAiT01BUCBGZWF0dXJlIFNlbGVjdGlvbnMiCkBAIC0yOSw2ICszMiwzMCBAQAogCWRlcGVuZHMgb24gT01BUF9ERUJVR19ERVZJQ0VTCiAJZGVmYXVsdCB5IGlmIExFRFMgfHwgTEVEU19PTUFQX0RFQlVHCiAKK2NvbmZpZyBPTUFQX0RFQlVHX1BPV0VSRE9NQUlOCisJYm9vbCAiRW1pdCBkZWJ1ZyBtZXNzYWdlcyBmcm9tIHBvd2VyZG9tYWluIGxheWVyIgorCWRlcGVuZHMgb24gQVJDSF9PTUFQMiB8fCBBUkNIX09NQVAzCisJZGVmYXVsdCBuCisJaGVscAorCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byBjb21waWxlIGluIHBvd2VyZG9tYWluIGxheWVyCisJICBkZWJ1Z2dpbmcgbWVzc2FnZXMgZm9yIE9NQVAyLzMuICAgVGhlc2UgbWVzc2FnZXMgY2FuCisJICBwcm92aWRlIG1vcmUgZGV0YWlsIGFzIHRvIHdoeSBzb21lIHBvd2VyZG9tYWluIGNhbGxzCisJICBtYXkgYmUgZmFpbGluZywgYW5kIHdpbGwgYWxzbyBlbWl0IGEgZGVzY3JpcHRpdmUgbWVzc2FnZQorCSAgZm9yIGV2ZXJ5IHBvd2VyZG9tYWluIHJlZ2lzdGVyIHdyaXRlLiAgSG93ZXZlciwgdGhlCisJICBleHRyYSBkZXRhaWwgY29zdHMgc29tZSBtZW1vcnkuCisKK2NvbmZpZyBPTUFQX0RFQlVHX0NMT0NLRE9NQUlOCisJYm9vbCAiRW1pdCBkZWJ1ZyBtZXNzYWdlcyBmcm9tIGNsb2NrZG9tYWluIGxheWVyIgorCWRlcGVuZHMgb24gQVJDSF9PTUFQMiB8fCBBUkNIX09NQVAzCisJZGVmYXVsdCBuCisJaGVscAorCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byBjb21waWxlIGluIGNsb2NrZG9tYWluIGxheWVyCisJICBkZWJ1Z2dpbmcgbWVzc2FnZXMgZm9yIE9NQVAyLzMuICAgVGhlc2UgbWVzc2FnZXMgY2FuCisJICBwcm92aWRlIG1vcmUgZGV0YWlsIGFzIHRvIHdoeSBzb21lIGNsb2NrZG9tYWluIGNhbGxzCisJICBtYXkgYmUgZmFpbGluZywgYW5kIHdpbGwgYWxzbyBlbWl0IGEgZGVzY3JpcHRpdmUgbWVzc2FnZQorCSAgZm9yIGV2ZXJ5IGNsb2NrZG9tYWluIHJlZ2lzdGVyIHdyaXRlLiAgSG93ZXZlciwgdGhlCisJICBleHRyYSBkZXRhaWwgY29zdHMgc29tZSBtZW1vcnkuCisKIGNvbmZpZyBPTUFQX1JFU0VUX0NMT0NLUwogCWJvb2wgIlJlc2V0IHVudXNlZCBjbG9ja3MgZHVyaW5nIGJvb3QiCiAJZGVwZW5kcyBvbiBBUkNIX09NQVAKQEAgLTg4LDEzICsxMTUsMTMgQEAKIAogY29uZmlnIE9NQVBfMzJLX1RJTUVSCiAJYm9vbCAiVXNlIDMyS0h6IHRpbWVyIgotCWRlcGVuZHMgb24gQVJDSF9PTUFQMTZYWCB8fCBBUkNIX09NQVAyNFhYCisJZGVwZW5kcyBvbiBBUkNIX09NQVAxNlhYIHx8IEFSQ0hfT01BUDI0WFggfHwgQVJDSF9PTUFQMzRYWAogCWhlbHAKIAkgIFNlbGVjdCB0aGlzIG9wdGlvbiBpZiB5b3Ugd2FudCB0byBlbmFibGUgdGhlIE9NQVAgMzJLSHogdGltZXIuCiAJICBUaGlzIHRpbWVyIHNhdmVzIHBvd2VyIGNvbXBhcmVkIHRvIHRoZSBPTUFQX01QVV9USU1FUiwgYW5kIGhhcwogCSAgc3VwcG9ydCBmb3Igbm8gdGljayBkdXJpbmcgaWRsZS4gVGhlIDMyS0h6IHRpbWVyIHByb3ZpZGVzIGxlc3MKIAkgIGludHJhLXRpY2sgcmVzb2x1dGlvbiB0aGFuIE9NQVBfTVBVX1RJTUVSLiBUaGUgMzJLSHogdGltZXIgaXMKLQkgIGN1cnJlbnRseSBvbmx5IGF2YWlsYWJsZSBmb3IgT01BUDE2WFggYW5kIDI0WFguCisJICBjdXJyZW50bHkgb25seSBhdmFpbGFibGUgZm9yIE9NQVAxNlhYLCAyNFhYIGFuZCAzNFhYLgogCiBlbmRjaG9pY2UKIApAQCAtMTA5LDcgKzEzNiw3IEBACiAKIGNvbmZpZyBPTUFQX0RNX1RJTUVSCiAJYm9vbCAiVXNlIGR1YWwtbW9kZSB0aW1lciIKLQlkZXBlbmRzIG9uIEFSQ0hfT01BUDE2WFggfHwgQVJDSF9PTUFQMjRYWAorCWRlcGVuZHMgb24gQVJDSF9PTUFQMTZYWCB8fCBBUkNIX09NQVAyNFhYIHx8IEFSQ0hfT01BUDM0WFgKIAloZWxwCiAJIFNlbGVjdCB0aGlzIG9wdGlvbiBpZiB5b3Ugd2FudCB0byB1c2UgT01BUCBEdWFsLU1vZGUgdGltZXJzLgogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvTWFrZWZpbGUgYi9hcmNoL2FybS9wbGF0LW9tYXAvTWFrZWZpbGUKaW5kZXggMmM0MDUxYy4uZGVhZmY1OCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL01ha2VmaWxlCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9NYWtlZmlsZQpAQCAtNCw3ICs0LDcgQEAKIAogIyBDb21tb24gc3VwcG9ydAogb2JqLXkgOj0gY29tbW9uLm8gc3JhbS5vIGNsb2NrLm8gZGV2aWNlcy5vIGRtYS5vIG11eC5vIGdwaW8ubyBcCi0JIHVzYi5vIGZiLm8KKwkgdXNiLm8gZmIubyBpby5vCiBvYmotbSA6PQogb2JqLW4gOj0KIG9iai0gIDo9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvY29tbW9uLmMgYi9hcmNoL2FybS9wbGF0LW9tYXAvY29tbW9uLmMKaW5kZXggOGJkZjBlYS4uMDg0M2I4OCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2NvbW1vbi5jCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9jb21tb24uYwpAQCAtMjQ4LDYgKzI0OCw3IEBACiAKIHN0YXRpYyB2b2lkIF9faW5pdCBfX29tYXAyX3NldF9nbG9iYWxzKHZvaWQpCiB7CisJb21hcDJfc2V0X2dsb2JhbHNfdGFwKG9tYXAyX2dsb2JhbHMpOwogCW9tYXAyX3NldF9nbG9iYWxzX21lbW9yeShvbWFwMl9nbG9iYWxzKTsKIAlvbWFwMl9zZXRfZ2xvYmFsc19jb250cm9sKG9tYXAyX2dsb2JhbHMpOwogCW9tYXAyX3NldF9nbG9iYWxzX3ByY20ob21hcDJfZ2xvYmFscyk7CkBAIC0yNTgsMTIgKzI1OSwxMyBAQAogI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDI0MjApCiAKIHN0YXRpYyBzdHJ1Y3Qgb21hcF9nbG9iYWxzIG9tYXAyNDJ4X2dsb2JhbHMgPSB7Ci0JLnRhcAk9IChfX2ZvcmNlIHZvaWQgX19pb21lbSAqKU9NQVAyX0lPX0FERFJFU1MoMHg0ODAxNDAwMCksCi0JLnNkcmMJPSAoX19mb3JjZSB2b2lkIF9faW9tZW0gKilPTUFQMl9JT19BRERSRVNTKE9NQVAyNDIwX1NEUkNfQkFTRSksCi0JLnNtcwk9IChfX2ZvcmNlIHZvaWQgX19pb21lbSAqKU9NQVAyX0lPX0FERFJFU1MoT01BUDI0MjBfU01TX0JBU0UpLAotCS5jdHJsCT0gKF9fZm9yY2Ugdm9pZCBfX2lvbWVtICopT01BUDJfSU9fQUREUkVTUyhPTUFQMjQyMF9DVFJMX0JBU0UpLAotCS5wcm0JPSAoX19mb3JjZSB2b2lkIF9faW9tZW0gKilPTUFQMl9JT19BRERSRVNTKE9NQVAyNDIwX1BSTV9CQVNFKSwKLQkuY20JPSAoX19mb3JjZSB2b2lkIF9faW9tZW0gKilPTUFQMl9JT19BRERSRVNTKE9NQVAyNDIwX0NNX0JBU0UpLAorCS5jbGFzcwk9IE9NQVAyNDJYX0NMQVNTLAorCS50YXAJPSBPTUFQMl9JT19BRERSRVNTKDB4NDgwMTQwMDApLAorCS5zZHJjCT0gT01BUDJfSU9fQUREUkVTUyhPTUFQMjQyMF9TRFJDX0JBU0UpLAorCS5zbXMJPSBPTUFQMl9JT19BRERSRVNTKE9NQVAyNDIwX1NNU19CQVNFKSwKKwkuY3RybAk9IE9NQVAyX0lPX0FERFJFU1MoT01BUDI0MjBfQ1RSTF9CQVNFKSwKKwkucHJtCT0gT01BUDJfSU9fQUREUkVTUyhPTUFQMjQyMF9QUk1fQkFTRSksCisJLmNtCT0gT01BUDJfSU9fQUREUkVTUyhPTUFQMjQyMF9DTV9CQVNFKSwKIH07CiAKIHZvaWQgX19pbml0IG9tYXAyX3NldF9nbG9iYWxzXzI0Mngodm9pZCkKQEAgLTI3NiwxMiArMjc4LDEzIEBACiAjaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMjQzMCkKIAogc3RhdGljIHN0cnVjdCBvbWFwX2dsb2JhbHMgb21hcDI0M3hfZ2xvYmFscyA9IHsKLQkudGFwCT0gKF9fZm9yY2Ugdm9pZCBfX2lvbWVtICopT01BUDJfSU9fQUREUkVTUygweDQ5MDBhMDAwKSwKLQkuc2RyYwk9IChfX2ZvcmNlIHZvaWQgX19pb21lbSAqKU9NQVAyX0lPX0FERFJFU1MoT01BUDI0M1hfU0RSQ19CQVNFKSwKLQkuc21zCT0gKF9fZm9yY2Ugdm9pZCBfX2lvbWVtICopT01BUDJfSU9fQUREUkVTUyhPTUFQMjQzWF9TTVNfQkFTRSksCi0JLmN0cmwJPSAoX19mb3JjZSB2b2lkIF9faW9tZW0gKilPTUFQMl9JT19BRERSRVNTKE9NQVAyNDNYX0NUUkxfQkFTRSksCi0JLnBybQk9IChfX2ZvcmNlIHZvaWQgX19pb21lbSAqKU9NQVAyX0lPX0FERFJFU1MoT01BUDI0MzBfUFJNX0JBU0UpLAotCS5jbQk9IChfX2ZvcmNlIHZvaWQgX19pb21lbSAqKU9NQVAyX0lPX0FERFJFU1MoT01BUDI0MzBfQ01fQkFTRSksCisJLmNsYXNzCT0gT01BUDI0M1hfQ0xBU1MsCisJLnRhcAk9IE9NQVAyX0lPX0FERFJFU1MoMHg0OTAwYTAwMCksCisJLnNkcmMJPSBPTUFQMl9JT19BRERSRVNTKE9NQVAyNDNYX1NEUkNfQkFTRSksCisJLnNtcwk9IE9NQVAyX0lPX0FERFJFU1MoT01BUDI0M1hfU01TX0JBU0UpLAorCS5jdHJsCT0gT01BUDJfSU9fQUREUkVTUyhPTUFQMjQzWF9DVFJMX0JBU0UpLAorCS5wcm0JPSBPTUFQMl9JT19BRERSRVNTKE9NQVAyNDMwX1BSTV9CQVNFKSwKKwkuY20JPSBPTUFQMl9JT19BRERSRVNTKE9NQVAyNDMwX0NNX0JBU0UpLAogfTsKIAogdm9pZCBfX2luaXQgb21hcDJfc2V0X2dsb2JhbHNfMjQzeCh2b2lkKQpAQCAtMjk0LDEyICsyOTcsMTMgQEAKICNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAzNDMwKQogCiBzdGF0aWMgc3RydWN0IG9tYXBfZ2xvYmFscyBvbWFwMzQzeF9nbG9iYWxzID0gewotCS50YXAJPSAoX19mb3JjZSB2b2lkIF9faW9tZW0gKilPTUFQMl9JT19BRERSRVNTKDB4NDgzMEEwMDApLAotCS5zZHJjCT0gKF9fZm9yY2Ugdm9pZCBfX2lvbWVtICopT01BUDJfSU9fQUREUkVTUyhPTUFQMzQzWF9TRFJDX0JBU0UpLAotCS5zbXMJPSAoX19mb3JjZSB2b2lkIF9faW9tZW0gKilPTUFQMl9JT19BRERSRVNTKE9NQVAzNDNYX1NNU19CQVNFKSwKLQkuY3RybAk9IChfX2ZvcmNlIHZvaWQgX19pb21lbSAqKU9NQVAyX0lPX0FERFJFU1MoT01BUDM0M1hfQ1RSTF9CQVNFKSwKLQkucHJtCT0gKF9fZm9yY2Ugdm9pZCBfX2lvbWVtICopT01BUDJfSU9fQUREUkVTUyhPTUFQMzQzMF9QUk1fQkFTRSksCi0JLmNtCT0gKF9fZm9yY2Ugdm9pZCBfX2lvbWVtICopT01BUDJfSU9fQUREUkVTUyhPTUFQMzQzMF9DTV9CQVNFKSwKKwkuY2xhc3MJPSBPTUFQMzQzWF9DTEFTUywKKwkudGFwCT0gT01BUDJfSU9fQUREUkVTUygweDQ4MzBBMDAwKSwKKwkuc2RyYwk9IE9NQVAyX0lPX0FERFJFU1MoT01BUDM0M1hfU0RSQ19CQVNFKSwKKwkuc21zCT0gT01BUDJfSU9fQUREUkVTUyhPTUFQMzQzWF9TTVNfQkFTRSksCisJLmN0cmwJPSBPTUFQMl9JT19BRERSRVNTKE9NQVAzNDNYX0NUUkxfQkFTRSksCisJLnBybQk9IE9NQVAyX0lPX0FERFJFU1MoT01BUDM0MzBfUFJNX0JBU0UpLAorCS5jbQk9IE9NQVAyX0lPX0FERFJFU1MoT01BUDM0MzBfQ01fQkFTRSksCiB9OwogCiB2b2lkIF9faW5pdCBvbWFwMl9zZXRfZ2xvYmFsc18zNDN4KHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvZGV2aWNlcy5jIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2RldmljZXMuYwppbmRleCA5NzE4N2ZhLi4wY2IyYjIyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvZGV2aWNlcy5jCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9kZXZpY2VzLmMKQEAgLTIwLDE3ICsyMCwxNyBAQAogI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgogCiAjaW5jbHVkZSA8bWFjaC90Yy5oPgorI2luY2x1ZGUgPG1hY2gvY29udHJvbC5oPgogI2luY2x1ZGUgPG1hY2gvYm9hcmQuaD4KICNpbmNsdWRlIDxtYWNoL21tYy5oPgogI2luY2x1ZGUgPG1hY2gvbXV4Lmg+CiAjaW5jbHVkZSA8bWFjaC9ncGlvLmg+CiAjaW5jbHVkZSA8bWFjaC9tZW5lbGF1cy5oPgogI2luY2x1ZGUgPG1hY2gvbWNic3AuaD4KKyNpbmNsdWRlIDxtYWNoL2RzcF9jb21tb24uaD4KIAogI2lmCWRlZmluZWQoQ09ORklHX09NQVBfRFNQKSB8fCBkZWZpbmVkKENPTkZJR19PTUFQX0RTUF9NT0RVTEUpCiAKLSNpbmNsdWRlICIuLi9wbGF0LW9tYXAvZHNwL2RzcF9jb21tb24uaCIKLQogc3RhdGljIHN0cnVjdCBkc3BfcGxhdGZvcm1fZGF0YSBkc3BfcGRhdGEgPSB7CiAJLmtkZXZfbGlzdCA9IExJU1RfSEVBRF9JTklUKGRzcF9wZGF0YS5rZGV2X2xpc3QpLAogfTsKQEAgLTc2LDcgKzc2LDcgQEAKIHsKIAlzdGF0aWMgREVGSU5FX01VVEVYKGRzcF9wZGF0YV9sb2NrKTsKIAotCW11dGV4X2luaXQoJmtkZXYtPmxvY2spOworCXNwaW5fbG9ja19pbml0KCZrZGV2LT5sb2NrKTsKIAogCW11dGV4X2xvY2soJmRzcF9wZGF0YV9sb2NrKTsKIAlsaXN0X2FkZF90YWlsKCZrZGV2LT5lbnRyeSwgJmRzcF9wZGF0YS5rZGV2X2xpc3QpOwpAQCAtOTUsNiArOTUsMTAgQEAKIAogc3RhdGljIHZvaWQgb21hcF9pbml0X2twKHZvaWQpCiB7CisJLyogMjQzMCBhbmQgMzR4eCBrZXlwYWQgaXMgb24gVFdMNDAzMCAqLworCWlmIChjcHVfaXNfb21hcDI0MzAoKSB8fCBjcHVfaXNfb21hcDM0eHgoKSkKKwkJcmV0dXJuOworCiAJaWYgKG1hY2hpbmVfaXNfb21hcF9oMigpIHx8IG1hY2hpbmVfaXNfb21hcF9oMygpKSB7CiAJCW9tYXBfY2ZnX3JlZyhGMThfMTYxMF9LQkMwKTsKIAkJb21hcF9jZmdfcmVnKEQyMF8xNjEwX0tCQzEpOwpAQCAtMTU2LDEzICsxNjAsNiBAQAogewogCWludCBpOwogCi0JaWYgKHNpemUgPiBPTUFQX01BWF9NQ0JTUF9DT1VOVCkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJSZWdpc3RlcmVkIHRvbyBtYW55IE1jQlNQcyBwbGF0Zm9ybV9kYXRhLiIKLQkJCSIgVXNpbmcgbWF4aW11bSAoJWQpIGF2YWlsYWJsZS5cbiIsCi0JCQlPTUFQX01BWF9NQ0JTUF9DT1VOVCk7Ci0JCXNpemUgPSBPTUFQX01BWF9NQ0JTUF9DT1VOVDsKLQl9Ci0KIAlvbWFwX21jYnNwX2RldmljZXMgPSBremFsbG9jKHNpemUgKiBzaXplb2Yoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqKSwKIAkJCQkgICAgIEdGUF9LRVJORUwpOwogCWlmICghb21hcF9tY2JzcF9kZXZpY2VzKSB7CkBAIC01MzAsMTAgKzUyNyw2IEBACiAgKi8KIHN0YXRpYyBpbnQgX19pbml0IG9tYXBfaW5pdF9kZXZpY2VzKHZvaWQpCiB7Ci0vKgotICogTmVlZCB0byBlbmFibGUgcmVsZXZhbnQgb25jZSBmb3IgMjQzMCBTRFAKLSAqLwotI2lmbmRlZiBDT05GSUdfTUFDSF9PTUFQXzI0MzBTRFAKIAkvKiBwbGVhc2Uga2VlcCB0aGVzZSBjYWxscywgYW5kIHRoZWlyIGltcGxlbWVudGF0aW9ucyBhYm92ZSwKIAkgKiBpbiBhbHBoYWJldGljYWwgb3JkZXIgc28gdGhleSdyZSBlYXNpZXIgdG8gc29ydCB0aHJvdWdoLgogCSAqLwpAQCAtNTQzLDcgKzUzNiw2IEBACiAJb21hcF9pbml0X3V3aXJlKCk7CiAJb21hcF9pbml0X3dkdCgpOwogCW9tYXBfaW5pdF9ybmcoKTsKLSNlbmRpZgogCXJldHVybiAwOwogfQogYXJjaF9pbml0Y2FsbChvbWFwX2luaXRfZGV2aWNlcyk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvZG1hLmMgYi9hcmNoL2FybS9wbGF0LW9tYXAvZG1hLmMKaW5kZXggYTYzYjY0NC4uNTBmOGI0YSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2RtYS5jCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9kbWEuYwpAQCAtMTIzMyw3ICsxMjMzLDcgQEAKIAkvKiByZXF1ZXN0IGFuZCByZXNlcnZlIERNQSBjaGFubmVscyBmb3IgdGhlIGNoYWluICovCiAJZm9yIChpID0gMDsgaSA8IG5vX29mX2NoYW5zOyBpKyspIHsKIAkJZXJyID0gb21hcF9yZXF1ZXN0X2RtYShkZXZfaWQsIGRldl9uYW1lLAotCQkJCQljYWxsYmFjaywgMCwgJmNoYW5uZWxzW2ldKTsKKwkJCQkJY2FsbGJhY2ssIE5VTEwsICZjaGFubmVsc1tpXSk7CiAJCWlmIChlcnIgPCAwKSB7CiAJCQlpbnQgajsKIAkJCWZvciAoaiA9IDA7IGogPCBpOyBqKyspCkBAIC0yMjk3LDEzICsyMjk3LDEzIEBACiAJaW50IGNoLCByOwogCiAJaWYgKGNwdV9jbGFzc19pc19vbWFwMSgpKSB7Ci0JCW9tYXBfZG1hX2Jhc2UgPSAodm9pZCBfX2lvbWVtICopSU9fQUREUkVTUyhPTUFQMV9ETUFfQkFTRSk7CisJCW9tYXBfZG1hX2Jhc2UgPSBJT19BRERSRVNTKE9NQVAxX0RNQV9CQVNFKTsKIAkJZG1hX2xjaF9jb3VudCA9IE9NQVAxX0xPR0lDQUxfRE1BX0NIX0NPVU5UOwogCX0gZWxzZSBpZiAoY3B1X2lzX29tYXAyNHh4KCkpIHsKLQkJb21hcF9kbWFfYmFzZSA9ICh2b2lkIF9faW9tZW0gKilJT19BRERSRVNTKE9NQVAyNFhYX0RNQTRfQkFTRSk7CisJCW9tYXBfZG1hX2Jhc2UgPSBJT19BRERSRVNTKE9NQVAyNFhYX0RNQTRfQkFTRSk7CiAJCWRtYV9sY2hfY291bnQgPSBPTUFQX0RNQTRfTE9HSUNBTF9ETUFfQ0hfQ09VTlQ7CiAJfSBlbHNlIGlmIChjcHVfaXNfb21hcDM0eHgoKSkgewotCQlvbWFwX2RtYV9iYXNlID0gKHZvaWQgX19pb21lbSAqKUlPX0FERFJFU1MoT01BUDM0WFhfRE1BNF9CQVNFKTsKKwkJb21hcF9kbWFfYmFzZSA9IElPX0FERFJFU1MoT01BUDM0WFhfRE1BNF9CQVNFKTsKIAkJZG1hX2xjaF9jb3VudCA9IE9NQVBfRE1BNF9MT0dJQ0FMX0RNQV9DSF9DT1VOVDsKIAl9IGVsc2UgewogCQlwcl9lcnIoIkRNQSBpbml0IGZhaWxlZCBmb3IgdW5zdXBwb3J0ZWQgb21hcFxuIik7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvZG10aW1lci5jIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2RtdGltZXIuYwppbmRleCA2MDZmY2ZmLi45NjNjMzFjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvZG10aW1lci5jCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9kbXRpbWVyLmMKQEAgLTY5Myw3ICs2OTMsNyBAQAogCiAJZm9yIChpID0gMDsgaSA8IGRtX3RpbWVyX2NvdW50OyBpKyspIHsKIAkJdGltZXIgPSAmZG1fdGltZXJzW2ldOwotCQl0aW1lci0+aW9fYmFzZSA9ICh2b2lkIF9faW9tZW0gKilpb19wMnYodGltZXItPnBoeXNfYmFzZSk7CisJCXRpbWVyLT5pb19iYXNlID0gSU9fQUREUkVTUyh0aW1lci0+cGh5c19iYXNlKTsKICNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAyKSB8fCBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAzKQogCQlpZiAoY3B1X2NsYXNzX2lzX29tYXAyKCkpIHsKIAkJCWNoYXIgY2xrX25hbWVbMTZdOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL2dwaW8uYyBiL2FyY2gvYXJtL3BsYXQtb21hcC9ncGlvLmMKaW5kZXggNTkzNWFlNC4uODY3OWZiYyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2dwaW8uYworKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvZ3Bpby5jCkBAIC0yOCw3ICsyOCw3IEBACiAvKgogICogT01BUDE1MTAgR1BJTyByZWdpc3RlcnMKICAqLwotI2RlZmluZSBPTUFQMTUxMF9HUElPX0JBU0UJCSh2b2lkIF9faW9tZW0gKikweGZmZmNlMDAwCisjZGVmaW5lIE9NQVAxNTEwX0dQSU9fQkFTRQkJSU9fQUREUkVTUygweGZmZmNlMDAwKQogI2RlZmluZSBPTUFQMTUxMF9HUElPX0RBVEFfSU5QVVQJMHgwMAogI2RlZmluZSBPTUFQMTUxMF9HUElPX0RBVEFfT1VUUFVUCTB4MDQKICNkZWZpbmUgT01BUDE1MTBfR1BJT19ESVJfQ09OVFJPTAkweDA4CkBAIC00MiwxMCArNDIsMTAgQEAKIC8qCiAgKiBPTUFQMTYxMCBzcGVjaWZpYyBHUElPIHJlZ2lzdGVycwogICovCi0jZGVmaW5lIE9NQVAxNjEwX0dQSU8xX0JBU0UJCSh2b2lkIF9faW9tZW0gKikweGZmZmJlNDAwCi0jZGVmaW5lIE9NQVAxNjEwX0dQSU8yX0JBU0UJCSh2b2lkIF9faW9tZW0gKikweGZmZmJlYzAwCi0jZGVmaW5lIE9NQVAxNjEwX0dQSU8zX0JBU0UJCSh2b2lkIF9faW9tZW0gKikweGZmZmJiNDAwCi0jZGVmaW5lIE9NQVAxNjEwX0dQSU80X0JBU0UJCSh2b2lkIF9faW9tZW0gKikweGZmZmJiYzAwCisjZGVmaW5lIE9NQVAxNjEwX0dQSU8xX0JBU0UJCUlPX0FERFJFU1MoMHhmZmZiZTQwMCkKKyNkZWZpbmUgT01BUDE2MTBfR1BJTzJfQkFTRQkJSU9fQUREUkVTUygweGZmZmJlYzAwKQorI2RlZmluZSBPTUFQMTYxMF9HUElPM19CQVNFCQlJT19BRERSRVNTKDB4ZmZmYmI0MDApCisjZGVmaW5lIE9NQVAxNjEwX0dQSU80X0JBU0UJCUlPX0FERFJFU1MoMHhmZmZiYmMwMCkKICNkZWZpbmUgT01BUDE2MTBfR1BJT19SRVZJU0lPTgkJMHgwMDAwCiAjZGVmaW5lIE9NQVAxNjEwX0dQSU9fU1lTQ09ORklHCQkweDAwMTAKICNkZWZpbmUgT01BUDE2MTBfR1BJT19TWVNTVEFUVVMJCTB4MDAxNApAQCAtNjcsMTIgKzY3LDEyIEBACiAvKgogICogT01BUDczMCBzcGVjaWZpYyBHUElPIHJlZ2lzdGVycwogICovCi0jZGVmaW5lIE9NQVA3MzBfR1BJTzFfQkFTRQkJKHZvaWQgX19pb21lbSAqKTB4ZmZmYmMwMDAKLSNkZWZpbmUgT01BUDczMF9HUElPMl9CQVNFCQkodm9pZCBfX2lvbWVtICopMHhmZmZiYzgwMAotI2RlZmluZSBPTUFQNzMwX0dQSU8zX0JBU0UJCSh2b2lkIF9faW9tZW0gKikweGZmZmJkMDAwCi0jZGVmaW5lIE9NQVA3MzBfR1BJTzRfQkFTRQkJKHZvaWQgX19pb21lbSAqKTB4ZmZmYmQ4MDAKLSNkZWZpbmUgT01BUDczMF9HUElPNV9CQVNFCQkodm9pZCBfX2lvbWVtICopMHhmZmZiZTAwMAotI2RlZmluZSBPTUFQNzMwX0dQSU82X0JBU0UJCSh2b2lkIF9faW9tZW0gKikweGZmZmJlODAwCisjZGVmaW5lIE9NQVA3MzBfR1BJTzFfQkFTRQkJSU9fQUREUkVTUygweGZmZmJjMDAwKQorI2RlZmluZSBPTUFQNzMwX0dQSU8yX0JBU0UJCUlPX0FERFJFU1MoMHhmZmZiYzgwMCkKKyNkZWZpbmUgT01BUDczMF9HUElPM19CQVNFCQlJT19BRERSRVNTKDB4ZmZmYmQwMDApCisjZGVmaW5lIE9NQVA3MzBfR1BJTzRfQkFTRQkJSU9fQUREUkVTUygweGZmZmJkODAwKQorI2RlZmluZSBPTUFQNzMwX0dQSU81X0JBU0UJCUlPX0FERFJFU1MoMHhmZmZiZTAwMCkKKyNkZWZpbmUgT01BUDczMF9HUElPNl9CQVNFCQlJT19BRERSRVNTKDB4ZmZmYmU4MDApCiAjZGVmaW5lIE9NQVA3MzBfR1BJT19EQVRBX0lOUFVUCQkweDAwCiAjZGVmaW5lIE9NQVA3MzBfR1BJT19EQVRBX09VVFBVVAkweDA0CiAjZGVmaW5lIE9NQVA3MzBfR1BJT19ESVJfQ09OVFJPTAkweDA4CkBAIC04MywxNiArODMsMTYgQEAKIC8qCiAgKiBvbWFwMjR4eCBzcGVjaWZpYyBHUElPIHJlZ2lzdGVycwogICovCi0jZGVmaW5lIE9NQVAyNDJYX0dQSU8xX0JBU0UJCSh2b2lkIF9faW9tZW0gKikweDQ4MDE4MDAwCi0jZGVmaW5lIE9NQVAyNDJYX0dQSU8yX0JBU0UJCSh2b2lkIF9faW9tZW0gKikweDQ4MDFhMDAwCi0jZGVmaW5lIE9NQVAyNDJYX0dQSU8zX0JBU0UJCSh2b2lkIF9faW9tZW0gKikweDQ4MDFjMDAwCi0jZGVmaW5lIE9NQVAyNDJYX0dQSU80X0JBU0UJCSh2b2lkIF9faW9tZW0gKikweDQ4MDFlMDAwCisjZGVmaW5lIE9NQVAyNDJYX0dQSU8xX0JBU0UJCUlPX0FERFJFU1MoMHg0ODAxODAwMCkKKyNkZWZpbmUgT01BUDI0MlhfR1BJTzJfQkFTRQkJSU9fQUREUkVTUygweDQ4MDFhMDAwKQorI2RlZmluZSBPTUFQMjQyWF9HUElPM19CQVNFCQlJT19BRERSRVNTKDB4NDgwMWMwMDApCisjZGVmaW5lIE9NQVAyNDJYX0dQSU80X0JBU0UJCUlPX0FERFJFU1MoMHg0ODAxZTAwMCkKIAotI2RlZmluZSBPTUFQMjQzWF9HUElPMV9CQVNFCQkodm9pZCBfX2lvbWVtICopMHg0OTAwQzAwMAotI2RlZmluZSBPTUFQMjQzWF9HUElPMl9CQVNFCQkodm9pZCBfX2lvbWVtICopMHg0OTAwRTAwMAotI2RlZmluZSBPTUFQMjQzWF9HUElPM19CQVNFCQkodm9pZCBfX2lvbWVtICopMHg0OTAxMDAwMAotI2RlZmluZSBPTUFQMjQzWF9HUElPNF9CQVNFCQkodm9pZCBfX2lvbWVtICopMHg0OTAxMjAwMAotI2RlZmluZSBPTUFQMjQzWF9HUElPNV9CQVNFCQkodm9pZCBfX2lvbWVtICopMHg0ODBCNjAwMAorI2RlZmluZSBPTUFQMjQzWF9HUElPMV9CQVNFCQlJT19BRERSRVNTKDB4NDkwMEMwMDApCisjZGVmaW5lIE9NQVAyNDNYX0dQSU8yX0JBU0UJCUlPX0FERFJFU1MoMHg0OTAwRTAwMCkKKyNkZWZpbmUgT01BUDI0M1hfR1BJTzNfQkFTRQkJSU9fQUREUkVTUygweDQ5MDEwMDAwKQorI2RlZmluZSBPTUFQMjQzWF9HUElPNF9CQVNFCQlJT19BRERSRVNTKDB4NDkwMTIwMDApCisjZGVmaW5lIE9NQVAyNDNYX0dQSU81X0JBU0UJCUlPX0FERFJFU1MoMHg0ODBCNjAwMCkKIAogI2RlZmluZSBPTUFQMjRYWF9HUElPX1JFVklTSU9OCQkweDAwMDAKICNkZWZpbmUgT01BUDI0WFhfR1BJT19TWVNDT05GSUcJCTB4MDAxMApAQCAtMTIyLDEzICsxMjIsMTQgQEAKICAqIG9tYXAzNHh4IHNwZWNpZmljIEdQSU8gcmVnaXN0ZXJzCiAgKi8KIAotI2RlZmluZSBPTUFQMzRYWF9HUElPMV9CQVNFCQkodm9pZCBfX2lvbWVtICopMHg0ODMxMDAwMAotI2RlZmluZSBPTUFQMzRYWF9HUElPMl9CQVNFCQkodm9pZCBfX2lvbWVtICopMHg0OTA1MDAwMAotI2RlZmluZSBPTUFQMzRYWF9HUElPM19CQVNFCQkodm9pZCBfX2lvbWVtICopMHg0OTA1MjAwMAotI2RlZmluZSBPTUFQMzRYWF9HUElPNF9CQVNFCQkodm9pZCBfX2lvbWVtICopMHg0OTA1NDAwMAotI2RlZmluZSBPTUFQMzRYWF9HUElPNV9CQVNFCQkodm9pZCBfX2lvbWVtICopMHg0OTA1NjAwMAotI2RlZmluZSBPTUFQMzRYWF9HUElPNl9CQVNFCQkodm9pZCBfX2lvbWVtICopMHg0OTA1ODAwMAorI2RlZmluZSBPTUFQMzRYWF9HUElPMV9CQVNFCQlJT19BRERSRVNTKDB4NDgzMTAwMDApCisjZGVmaW5lIE9NQVAzNFhYX0dQSU8yX0JBU0UJCUlPX0FERFJFU1MoMHg0OTA1MDAwMCkKKyNkZWZpbmUgT01BUDM0WFhfR1BJTzNfQkFTRQkJSU9fQUREUkVTUygweDQ5MDUyMDAwKQorI2RlZmluZSBPTUFQMzRYWF9HUElPNF9CQVNFCQlJT19BRERSRVNTKDB4NDkwNTQwMDApCisjZGVmaW5lIE9NQVAzNFhYX0dQSU81X0JBU0UJCUlPX0FERFJFU1MoMHg0OTA1NjAwMCkKKyNkZWZpbmUgT01BUDM0WFhfR1BJTzZfQkFTRQkJSU9fQUREUkVTUygweDQ5MDU4MDAwKQogCisjZGVmaW5lIE9NQVBfTVBVSU9fVkJBU0UJCUlPX0FERFJFU1MoT01BUF9NUFVJT19CQVNFKQogCiBzdHJ1Y3QgZ3Bpb19iYW5rIHsKIAl2b2lkIF9faW9tZW0gKmJhc2U7CkBAIC0xNjAsNyArMTYxLDcgQEAKIAogI2lmZGVmIENPTkZJR19BUkNIX09NQVAxNlhYCiBzdGF0aWMgc3RydWN0IGdwaW9fYmFuayBncGlvX2JhbmtfMTYxMFs1XSA9IHsKLQl7IE9NQVBfTVBVSU9fQkFTRSwgICAgIElOVF9NUFVJTywJICAgIElIX01QVUlPX0JBU0UsICAgICBNRVRIT0RfTVBVSU99LAorCXsgT01BUF9NUFVJT19WQkFTRSwgICAgSU5UX01QVUlPLAkgICAgSUhfTVBVSU9fQkFTRSwgICAgIE1FVEhPRF9NUFVJT30sCiAJeyBPTUFQMTYxMF9HUElPMV9CQVNFLCBJTlRfR1BJT19CQU5LMSwJICAgIElIX0dQSU9fQkFTRSwgICAgICBNRVRIT0RfR1BJT18xNjEwIH0sCiAJeyBPTUFQMTYxMF9HUElPMl9CQVNFLCBJTlRfMTYxMF9HUElPX0JBTksyLCBJSF9HUElPX0JBU0UgKyAxNiwgTUVUSE9EX0dQSU9fMTYxMCB9LAogCXsgT01BUDE2MTBfR1BJTzNfQkFTRSwgSU5UXzE2MTBfR1BJT19CQU5LMywgSUhfR1BJT19CQVNFICsgMzIsIE1FVEhPRF9HUElPXzE2MTAgfSwKQEAgLTE3MCwxNCArMTcxLDE0IEBACiAKICNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMTVYWAogc3RhdGljIHN0cnVjdCBncGlvX2JhbmsgZ3Bpb19iYW5rXzE1MTBbMl0gPSB7Ci0JeyBPTUFQX01QVUlPX0JBU0UsICAgIElOVF9NUFVJTywgICAgICBJSF9NUFVJT19CQVNFLCBNRVRIT0RfTVBVSU8gfSwKKwl7IE9NQVBfTVBVSU9fVkJBU0UsICAgSU5UX01QVUlPLCAgICAgIElIX01QVUlPX0JBU0UsIE1FVEhPRF9NUFVJTyB9LAogCXsgT01BUDE1MTBfR1BJT19CQVNFLCBJTlRfR1BJT19CQU5LMSwgSUhfR1BJT19CQVNFLCAgTUVUSE9EX0dQSU9fMTUxMCB9CiB9OwogI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfQVJDSF9PTUFQNzMwCiBzdGF0aWMgc3RydWN0IGdwaW9fYmFuayBncGlvX2JhbmtfNzMwWzddID0gewotCXsgT01BUF9NUFVJT19CQVNFLCAgICAgSU5UXzczMF9NUFVJTywJICAgIElIX01QVUlPX0JBU0UsCU1FVEhPRF9NUFVJTyB9LAorCXsgT01BUF9NUFVJT19WQkFTRSwgICAgSU5UXzczMF9NUFVJTywJICAgIElIX01QVUlPX0JBU0UsCU1FVEhPRF9NUFVJTyB9LAogCXsgT01BUDczMF9HUElPMV9CQVNFLCAgSU5UXzczMF9HUElPX0JBTksxLCAgSUhfR1BJT19CQVNFLAlNRVRIT0RfR1BJT183MzAgfSwKIAl7IE9NQVA3MzBfR1BJTzJfQkFTRSwgIElOVF83MzBfR1BJT19CQU5LMiwgIElIX0dQSU9fQkFTRSArIDMyLAlNRVRIT0RfR1BJT183MzAgfSwKIAl7IE9NQVA3MzBfR1BJTzNfQkFTRSwgIElOVF83MzBfR1BJT19CQU5LMywgIElIX0dQSU9fQkFTRSArIDY0LAlNRVRIT0RfR1BJT183MzAgfSwKQEAgLTEzODksNyArMTM5MCw3IEBACiAKIAkJZ3Bpb19iYW5rX2NvdW50ID0gNTsKIAkJZ3Bpb19iYW5rID0gZ3Bpb19iYW5rXzE2MTA7Ci0JCXJldiA9IG9tYXBfcmVhZHcoZ3Bpb19iYW5rWzFdLmJhc2UgKyBPTUFQMTYxMF9HUElPX1JFVklTSU9OKTsKKwkJcmV2ID0gX19yYXdfcmVhZHcoZ3Bpb19iYW5rWzFdLmJhc2UgKyBPTUFQMTYxMF9HUElPX1JFVklTSU9OKTsKIAkJcHJpbnRrKEtFUk5fSU5GTyAiT01BUCBHUElPIGhhcmR3YXJlIHZlcnNpb24gJWQuJWRcbiIsCiAJCSAgICAgICAocmV2ID4+IDQpICYgMHgwZiwgcmV2ICYgMHgwZik7CiAJfQpAQCAtMTQwOCw3ICsxNDA5LDcgQEAKIAogCQlncGlvX2JhbmtfY291bnQgPSA0OwogCQlncGlvX2JhbmsgPSBncGlvX2JhbmtfMjQyeDsKLQkJcmV2ID0gb21hcF9yZWFkbChncGlvX2JhbmtbMF0uYmFzZSArIE9NQVAyNFhYX0dQSU9fUkVWSVNJT04pOworCQlyZXYgPSBfX3Jhd19yZWFkbChncGlvX2JhbmtbMF0uYmFzZSArIE9NQVAyNFhYX0dQSU9fUkVWSVNJT04pOwogCQlwcmludGsoS0VSTl9JTkZPICJPTUFQMjQyeCBHUElPIGhhcmR3YXJlIHZlcnNpb24gJWQuJWRcbiIsCiAJCQkocmV2ID4+IDQpICYgMHgwZiwgcmV2ICYgMHgwZik7CiAJfQpAQCAtMTQxNyw3ICsxNDE4LDcgQEAKIAogCQlncGlvX2JhbmtfY291bnQgPSA1OwogCQlncGlvX2JhbmsgPSBncGlvX2JhbmtfMjQzeDsKLQkJcmV2ID0gb21hcF9yZWFkbChncGlvX2JhbmtbMF0uYmFzZSArIE9NQVAyNFhYX0dQSU9fUkVWSVNJT04pOworCQlyZXYgPSBfX3Jhd19yZWFkbChncGlvX2JhbmtbMF0uYmFzZSArIE9NQVAyNFhYX0dQSU9fUkVWSVNJT04pOwogCQlwcmludGsoS0VSTl9JTkZPICJPTUFQMjQzeCBHUElPIGhhcmR3YXJlIHZlcnNpb24gJWQuJWRcbiIsCiAJCQkocmV2ID4+IDQpICYgMHgwZiwgcmV2ICYgMHgwZik7CiAJfQpAQCAtMTQyOCw3ICsxNDI5LDcgQEAKIAogCQlncGlvX2JhbmtfY291bnQgPSBPTUFQMzRYWF9OUl9HUElPUzsKIAkJZ3Bpb19iYW5rID0gZ3Bpb19iYW5rXzM0eHg7Ci0JCXJldiA9IG9tYXBfcmVhZGwoZ3Bpb19iYW5rWzBdLmJhc2UgKyBPTUFQMjRYWF9HUElPX1JFVklTSU9OKTsKKwkJcmV2ID0gX19yYXdfcmVhZGwoZ3Bpb19iYW5rWzBdLmJhc2UgKyBPTUFQMjRYWF9HUElPX1JFVklTSU9OKTsKIAkJcHJpbnRrKEtFUk5fSU5GTyAiT01BUDM0eHggR1BJTyBoYXJkd2FyZSB2ZXJzaW9uICVkLiVkXG4iLAogCQkJKHJldiA+PiA0KSAmIDB4MGYsIHJldiAmIDB4MGYpOwogCX0KQEAgLTE0MzcsMTAgKzE0MzgsOSBAQAogCQlpbnQgaiwgZ3Bpb19jb3VudCA9IDE2OwogCiAJCWJhbmsgPSAmZ3Bpb19iYW5rW2ldOwotCQliYW5rLT5iYXNlID0gSU9fQUREUkVTUyhiYW5rLT5iYXNlKTsKIAkJc3Bpbl9sb2NrX2luaXQoJmJhbmstPmxvY2spOwogCQlpZiAoYmFua19pc19tcHVpbyhiYW5rKSkKLQkJCW9tYXBfd3JpdGV3KDB4RkZGRiwgT01BUF9NUFVJT19CQVNFICsgT01BUF9NUFVJT19HUElPX01BU0tJVCk7CisJCQlfX3Jhd193cml0ZXcoMHhmZmZmLCBiYW5rLT5iYXNlICsgT01BUF9NUFVJT19HUElPX01BU0tJVCk7CiAJCWlmIChjcHVfaXNfb21hcDE1eHgoKSAmJiBiYW5rLT5tZXRob2QgPT0gTUVUSE9EX0dQSU9fMTUxMCkgewogCQkJX19yYXdfd3JpdGV3KDB4ZmZmZiwgYmFuay0+YmFzZSArIE9NQVAxNTEwX0dQSU9fSU5UX01BU0spOwogCQkJX19yYXdfd3JpdGV3KDB4MDAwMCwgYmFuay0+YmFzZSArIE9NQVAxNTEwX0dQSU9fSU5UX1NUQVRVUyk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL2JvYXJkLTI0MzBzZHAuaCBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvYm9hcmQtMjQzMHNkcC5oCmluZGV4IGNmMWRjMDIuLjEwZDQ0OWUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvYm9hcmQtMjQzMHNkcC5oCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvYm9hcmQtMjQzMHNkcC5oCkBAIC0zMCwxMCArMzAsMTIgQEAKICNkZWZpbmUgX19BU01fQVJDSF9PTUFQXzI0MzBTRFBfSAogCiAvKiBQbGFjZWhvbGRlciBmb3IgMjQzMFNEUCBzcGVjaWZpYyBkZWZpbmVzICovCi0jZGVmaW5lIE9NQVAyNFhYX0VUSFJfU1RBUlQJCSAweDA4MDAwMzAwCisjZGVmaW5lIE9NQVAyNFhYX0VUSFJfU1RBUlQJCTB4MDgwMDAzMDAKICNkZWZpbmUgT01BUDI0WFhfRVRIUl9HUElPX0lSUQkJMTQ5CiAjZGVmaW5lIFNEUDI0MzBfQ1MwX0JBU0UJCTB4MDQwMDAwMDAKIAotI2RlZmluZSBUV0w0MDMwX0lSUU5VTQkJCUlOVF8yNFhYX1NZU19OSVJRCisvKiBGdW5jdGlvbiBwcm90b3R5cGVzICovCitleHRlcm4gdm9pZCBzZHAyNDMwX2ZsYXNoX2luaXQodm9pZCk7CitleHRlcm4gdm9pZCBzZHAyNDMwX3VzYl9pbml0KHZvaWQpOwogCiAjZW5kaWYgLyogX19BU01fQVJDSF9PTUFQXzI0MzBTRFBfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9ib2FyZC1hcG9sbG9uLmggYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL2JvYXJkLWFwb2xsb24uaAppbmRleCBkNmYyYThlLi43MzFjODU4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL2JvYXJkLWFwb2xsb24uaAorKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL2JvYXJkLWFwb2xsb24uaApAQCAtMzEsNiArMzEsMTIgQEAKIAogZXh0ZXJuIHZvaWQgYXBvbGxvbl9tbWNfaW5pdCh2b2lkKTsKIAorc3RhdGljIGlubGluZSBpbnQgYXBvbGxvbl9wbHVzKHZvaWQpCit7CisJLyogVGhlIGFwb2xsb24gcGx1cyBoYXMgSURDT0RFIHJldmlzaW9uIDUgKi8KKwlyZXR1cm4gc3lzdGVtX3JldiAmIDB4YzA7Cit9CisKIC8qIFBsYWNlaG9sZGVyIGZvciBBUE9MTE9OIHNwZWNpZmljIGRlZmluZXMgKi8KICNkZWZpbmUgQVBPTExPTl9FVEhSX0dQSU9fSVJRCQk3NAogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL2JvYXJkLWg0LmggYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL2JvYXJkLWg0LmgKaW5kZXggMTQ3MGNkMy4uN2MzZmEwZjAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvYm9hcmQtaDQuaAorKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL2JvYXJkLWg0LmgKQEAgLTEsNyArMSw3IEBACiAvKgogICogYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9ib2FyZC1oNC5oCiAgKgotICogSGFyZHdhcmUgZGVmaW5pdGlvbnMgZm9yIFRJIE9NQVAxNjEwIEg0IGJvYXJkLgorICogSGFyZHdhcmUgZGVmaW5pdGlvbnMgZm9yIFRJIE9NQVAyNDIwIEg0IGJvYXJkLgogICoKICAqIEluaXRpYWwgY3JlYXRpb24gYnkgRGlyayBCZWhtZSA8ZGlyay5iZWhtZUBkZS5ib3NjaC5jb20+CiAgKgpAQCAtMjksNiArMjksOSBAQAogI2lmbmRlZiBfX0FTTV9BUkNIX09NQVBfSDRfSAogI2RlZmluZSBfX0FTTV9BUkNIX09NQVBfSDRfSAogCisvKiBNTUMgUHJvdG90eXBlcyAqLworZXh0ZXJuIHZvaWQgaDRfbW1jX2luaXQodm9pZCk7CisKIC8qIFBsYWNlaG9sZGVyIGZvciBINCBzcGVjaWZpYyBkZWZpbmVzICovCiAjZGVmaW5lIE9NQVAyNFhYX0VUSFJfR1BJT19JUlEJCTkyCiAjZW5kaWYgLyogIF9fQVNNX0FSQ0hfT01BUF9INF9IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL2JvYXJkLWxkcC5oIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9ib2FyZC1sZHAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NmUyNzQ2Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9ib2FyZC1sZHAuaApAQCAtMCwwICsxLDM2IEBACisvKgorICogYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9ib2FyZC1sZHAuaAorICoKKyAqIEhhcmR3YXJlIGRlZmluaXRpb25zIGZvciBUSSBPTUFQMyBMRFAuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRleGFzIEluc3RydW1lbnRzIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVECisgKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4KKyAqIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKKyAqIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyAqIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworCisjaWZuZGVmIF9fQVNNX0FSQ0hfT01BUF9MRFBfSAorI2RlZmluZSBfX0FTTV9BUkNIX09NQVBfTERQX0gKKworZXh0ZXJuIHZvaWQgdHdsNDAzMF9iY2lfYmF0dGVyeV9pbml0KHZvaWQpOworCisjZGVmaW5lIFRXTDQwMzBfSVJRTlVNCQlJTlRfMzRYWF9TWVNfTklSUQorCisjZW5kaWYgLyogX19BU01fQVJDSF9PTUFQX0xEUF9IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL2JvYXJkLW9tYXAzYmVhZ2xlLmggYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL2JvYXJkLW9tYXAzYmVhZ2xlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzA4MGQ1MgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvYm9hcmQtb21hcDNiZWFnbGUuaApAQCAtMCwwICsxLDMzIEBACisvKgorICogYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9ib2FyZC1vbWFwM2JlYWdsZS5oCisgKgorICogSGFyZHdhcmUgZGVmaW5pdGlvbnMgZm9yIFRJIE9NQVAzIEJFQUdMRS4KKyAqCisgKiBJbml0aWFsIGNyZWF0aW9uIGJ5IFN5ZWQgTW9oYW1tZWQgS2hhc2ltIDxraGFzaW1AdGkuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQKKyAqIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTgorICogTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgorICogVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworICogd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKyNpZm5kZWYgX19BU01fQVJDSF9PTUFQM19CRUFHTEVfSAorI2RlZmluZSBfX0FTTV9BUkNIX09NQVAzX0JFQUdMRV9ICisKKyNlbmRpZiAvKiBfX0FTTV9BUkNIX09NQVAzX0JFQUdMRV9IICovCisKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvYm9hcmQtb3Zlcm8uaCBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvYm9hcmQtb3Zlcm8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZWNhZTY2Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9ib2FyZC1vdmVyby5oCkBAIC0wLDAgKzEsMjYgQEAKKy8qCisgKiBib2FyZC1vdmVyby5oIChHdW1zdGl4IE92ZXJvKQorICoKKyAqIEluaXRpYWwgY29kZTogU3RldmUgU2Frb21hbiA8c3RldmVAc2Frb21hbi5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworICogd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKyNpZm5kZWYgX19BU01fQVJDSF9PVkVST19ICisjZGVmaW5lIF9fQVNNX0FSQ0hfT1ZFUk9fSAorCisjZGVmaW5lIE9WRVJPX0dQSU9fQlRfWEdBVEUJMTUKKyNkZWZpbmUgT1ZFUk9fR1BJT19XMldfTlJFU0VUCTE2CisjZGVmaW5lIE9WRVJPX0dQSU9fQlRfTlJFU0VUCTE2NAorI2RlZmluZSBPVkVST19HUElPX1VTQkhfQ1BFTgkxNjgKKyNkZWZpbmUgT1ZFUk9fR1BJT19VU0JIX05SRVNFVAkxODMKKworI2VuZGlmIC8qIF9fX19BU01fQVJDSF9PVkVST19IICovCisKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvYm9hcmQuaCBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvYm9hcmQuaAppbmRleCA1NDQ0NTY0Li5jMjNjMTJjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL2JvYXJkLmgKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9ib2FyZC5oCkBAIC00NSw2ICs0NSw4IEBACiAJdW5zaWduZWQgY292ZXI6MTsKIAkvKiA0IHdpcmUgc2lnbmFsaW5nIGlzIG9wdGlvbmFsLCBhbmQgaXMgb25seSB1c2VkIGZvciBTRC9TRElPICovCiAJdW5zaWduZWQgd2lyZTQ6MTsKKwkvKiB1c2UgdGhlIGludGVybmFsIGNsb2NrICovCisJdW5zaWduZWQgaW50ZXJuYWxfY2xvY2s6MTsKIAlzMTYgcG93ZXJfcGluOwogCXMxNiBzd2l0Y2hfcGluOwogCXMxNiB3cF9waW47CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL2Nsb2NrLmggYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL2Nsb2NrLmgKaW5kZXggOTJmN2M3Mi4uNzE5Mjk4NSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9jbG9jay5oCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvY2xvY2suaApAQCAtMTUsNiArMTUsNyBAQAogCiBzdHJ1Y3QgbW9kdWxlOwogc3RydWN0IGNsazsKK3N0cnVjdCBjbG9ja2RvbWFpbjsKIAogI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDIpIHx8IGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDMpCiAKQEAgLTc5LDYgKzgwLDggQEAKIAl1MzIJCQljbGtzZWxfbWFzazsKIAljb25zdCBzdHJ1Y3QgY2xrc2VsCSpjbGtzZWw7CiAJc3RydWN0IGRwbGxfZGF0YQkqZHBsbF9kYXRhOworCWNvbnN0IGNoYXIJCSpjbGtkbV9uYW1lOworCXN0cnVjdCBjbG9ja2RvbWFpbgkqY2xrZG07CiAjZWxzZQogCV9fdTgJCQlyYXRlX29mZnNldDsKIAlfX3U4CQkJc3JjX29mZnNldDsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvY2xvY2tkb21haW4uaCBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvY2xvY2tkb21haW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZjUxZjAxCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9jbG9ja2RvbWFpbi5oCkBAIC0wLDAgKzEsMTA2IEBACisvKgorICogbGludXgvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9jbG9ja2RvbWFpbi5oCisgKgorICogT01BUDIvMyBjbG9ja2RvbWFpbiBmcmFtZXdvcmsgZnVuY3Rpb25zCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRleGFzIEluc3RydW1lbnRzLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggTm9raWEgQ29ycG9yYXRpb24KKyAqCisgKiBXcml0dGVuIGJ5IFBhdWwgV2FsbXNsZXkKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpZm5kZWYgX19BU01fQVJNX0FSQ0hfT01BUF9DTE9DS0RPTUFJTl9ICisjZGVmaW5lIF9fQVNNX0FSTV9BUkNIX09NQVBfQ0xPQ0tET01BSU5fSAorCisjaW5jbHVkZSA8bWFjaC9wb3dlcmRvbWFpbi5oPgorI2luY2x1ZGUgPG1hY2gvY2xvY2suaD4KKyNpbmNsdWRlIDxtYWNoL2NwdS5oPgorCisvKiBDbG9ja2RvbWFpbiBjYXBhYmlsaXR5IGZsYWdzICovCisjZGVmaW5lIENMS0RNX0NBTl9GT1JDRV9TTEVFUAkJCSgxIDw8IDApCisjZGVmaW5lIENMS0RNX0NBTl9GT1JDRV9XQUtFVVAJCQkoMSA8PCAxKQorI2RlZmluZSBDTEtETV9DQU5fRU5BQkxFX0FVVE8JCQkoMSA8PCAyKQorI2RlZmluZSBDTEtETV9DQU5fRElTQUJMRV9BVVRPCQkJKDEgPDwgMykKKworI2RlZmluZSBDTEtETV9DQU5fSFdTVVAJCShDTEtETV9DQU5fRU5BQkxFX0FVVE8gfCBDTEtETV9DQU5fRElTQUJMRV9BVVRPKQorI2RlZmluZSBDTEtETV9DQU5fU1dTVVAJCShDTEtETV9DQU5fRk9SQ0VfU0xFRVAgfCBDTEtETV9DQU5fRk9SQ0VfV0FLRVVQKQorI2RlZmluZSBDTEtETV9DQU5fSFdTVVBfU1dTVVAJKENMS0RNX0NBTl9TV1NVUCB8IENMS0RNX0NBTl9IV1NVUCkKKworLyogT01BUDI0WFggQ01fQ0xLU1RDVFJMXyouQVVUT1NUQVRFXyogcmVnaXN0ZXIgYml0IHZhbHVlcyAqLworI2RlZmluZSBPTUFQMjRYWF9DTEtTVENUUkxfRElTQUJMRV9BVVRPCQkweDAKKyNkZWZpbmUgT01BUDI0WFhfQ0xLU1RDVFJMX0VOQUJMRV9BVVRPCQkweDEKKworLyogT01BUDNYWFggQ01fQ0xLU1RDVFJMXyouQ0xLVFJDVFJMXyogcmVnaXN0ZXIgYml0IHZhbHVlcyAqLworI2RlZmluZSBPTUFQMzRYWF9DTEtTVENUUkxfRElTQUJMRV9BVVRPCQkweDAKKyNkZWZpbmUgT01BUDM0WFhfQ0xLU1RDVFJMX0ZPUkNFX1NMRUVQCQkweDEKKyNkZWZpbmUgT01BUDM0WFhfQ0xLU1RDVFJMX0ZPUkNFX1dBS0VVUAkJMHgyCisjZGVmaW5lIE9NQVAzNFhYX0NMS1NUQ1RSTF9FTkFCTEVfQVVUTwkJMHgzCisKKy8qCisgKiBzdHJ1Y3QgY2xrZG1fcHdyZG1fYXV0b2RlcCAtIGEgcG93ZXJkb21haW4gdGhhdCBzaG91bGQgaGF2ZSB3a2RlcHMKKyAqIGFuZCBzbGVlcGRlcHMgYWRkZWQgd2hlbiBhIHBvd2VyZG9tYWluIHNob3VsZCBzdGF5IGFjdGl2ZSBpbiBod3N1cCBtb2RlOworICogYW5kIGNvbnZlcnNlbHksIHJlbW92ZWQgd2hlbiB0aGUgcG93ZXJkb21haW4gc2hvdWxkIGJlIGFsbG93ZWQgdG8gZ28KKyAqIGluYWN0aXZlIGluIGh3c3VwIG1vZGUuCisgKi8KK3N0cnVjdCBjbGtkbV9wd3JkbV9hdXRvZGVwIHsKKworCS8qIE5hbWUgb2YgdGhlIHBvd2VyZG9tYWluIHRvIGFkZCBhIHdrZGVwL3NsZWVwZGVwIG9uICovCisJY29uc3QgY2hhciAqcHdyZG1fbmFtZTsKKworCS8qIFBvd2VyZG9tYWluIHBvaW50ZXIgKGxvb2tlZCB1cCBhdCBjbGtkbV9pbml0KCkgdGltZSkgKi8KKwlzdHJ1Y3QgcG93ZXJkb21haW4gKnB3cmRtOworCisJLyogT01BUCBjaGlwIHR5cGVzIHRoYXQgdGhpcyBjbG9ja2RvbWFpbiBkZXAgaXMgdmFsaWQgb24gKi8KKwljb25zdCBzdHJ1Y3Qgb21hcF9jaGlwX2lkIG9tYXBfY2hpcDsKKworfTsKKworc3RydWN0IGNsb2NrZG9tYWluIHsKKworCS8qIENsb2NrZG9tYWluIG5hbWUgKi8KKwljb25zdCBjaGFyICpuYW1lOworCisJLyogUG93ZXJkb21haW4gZW5jbG9zaW5nIHRoaXMgY2xvY2tkb21haW4gKi8KKwljb25zdCBjaGFyICpwd3JkbV9uYW1lOworCisJLyogQ0xLVFJDVFJML0FVVE9TVEFURSBmaWVsZCBtYXNrIGluIENNX0NMS1NUQ1RSTCByZWcgKi8KKwljb25zdCB1MTYgY2xrdHJjdHJsX21hc2s7CisKKwkvKiBDbG9ja2RvbWFpbiBjYXBhYmlsaXR5IGZsYWdzICovCisJY29uc3QgdTggZmxhZ3M7CisKKwkvKiBPTUFQIGNoaXAgdHlwZXMgdGhhdCB0aGlzIGNsb2NrZG9tYWluIGlzIHZhbGlkIG9uICovCisJY29uc3Qgc3RydWN0IG9tYXBfY2hpcF9pZCBvbWFwX2NoaXA7CisKKwkvKiBVc2Vjb3VudCB0cmFja2luZyAqLworCWF0b21pY190IHVzZWNvdW50OworCisJLyogUG93ZXJkb21haW4gcG9pbnRlciBhc3NpZ25lZCBhdCBjbGtkbV9yZWdpc3RlcigpICovCisJc3RydWN0IHBvd2VyZG9tYWluICpwd3JkbTsKKworCXN0cnVjdCBsaXN0X2hlYWQgbm9kZTsKKworfTsKKwordm9pZCBjbGtkbV9pbml0KHN0cnVjdCBjbG9ja2RvbWFpbiAqKmNsa2Rtcywgc3RydWN0IGNsa2RtX3B3cmRtX2F1dG9kZXAgKmF1dG9kZXBzKTsKK2ludCBjbGtkbV9yZWdpc3RlcihzdHJ1Y3QgY2xvY2tkb21haW4gKmNsa2RtKTsKK2ludCBjbGtkbV91bnJlZ2lzdGVyKHN0cnVjdCBjbG9ja2RvbWFpbiAqY2xrZG0pOworc3RydWN0IGNsb2NrZG9tYWluICpjbGtkbV9sb29rdXAoY29uc3QgY2hhciAqbmFtZSk7CisKK2ludCBjbGtkbV9mb3JfZWFjaChpbnQgKCpmbikoc3RydWN0IGNsb2NrZG9tYWluICpjbGtkbSkpOworc3RydWN0IHBvd2VyZG9tYWluICpjbGtkbV9nZXRfcHdyZG0oc3RydWN0IGNsb2NrZG9tYWluICpjbGtkbSk7CisKK3ZvaWQgb21hcDJfY2xrZG1fYWxsb3dfaWRsZShzdHJ1Y3QgY2xvY2tkb21haW4gKmNsa2RtKTsKK3ZvaWQgb21hcDJfY2xrZG1fZGVueV9pZGxlKHN0cnVjdCBjbG9ja2RvbWFpbiAqY2xrZG0pOworCitpbnQgb21hcDJfY2xrZG1fd2FrZXVwKHN0cnVjdCBjbG9ja2RvbWFpbiAqY2xrZG0pOworaW50IG9tYXAyX2Nsa2RtX3NsZWVwKHN0cnVjdCBjbG9ja2RvbWFpbiAqY2xrZG0pOworCitpbnQgb21hcDJfY2xrZG1fY2xrX2VuYWJsZShzdHJ1Y3QgY2xvY2tkb21haW4gKmNsa2RtLCBzdHJ1Y3QgY2xrICpjbGspOworaW50IG9tYXAyX2Nsa2RtX2Nsa19kaXNhYmxlKHN0cnVjdCBjbG9ja2RvbWFpbiAqY2xrZG0sIHN0cnVjdCBjbGsgKmNsayk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9jb21tb24uaCBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvY29tbW9uLmgKaW5kZXggMDYwOTMxMS4uZWY3MGUyYiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9jb21tb24uaAorKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL2NvbW1vbi5oCkBAIC0zNCw2ICszNCw3IEBACiBleHRlcm4gdm9pZCBvbWFwX21hcF9jb21tb25faW8odm9pZCk7CiBleHRlcm4gc3RydWN0IHN5c190aW1lciBvbWFwX3RpbWVyOwogZXh0ZXJuIHZvaWQgb21hcF9zZXJpYWxfaW5pdCh2b2lkKTsKK2V4dGVybiB2b2lkIG9tYXBfc2VyaWFsX2VuYWJsZV9jbG9ja3MoaW50IGVuYWJsZSk7CiAjaWZkZWYgQ09ORklHX0kyQ19PTUFQCiBleHRlcm4gaW50IG9tYXBfcmVnaXN0ZXJfaTJjX2J1cyhpbnQgYnVzX2lkLCB1MzIgY2xrcmF0ZSwKIAkJCQkgc3RydWN0IGkyY19ib2FyZF9pbmZvIGNvbnN0ICppbmZvLApAQCAtNDksNiArNTAsNyBAQAogCiAvKiBJTyBiYXNlcyBmb3IgdmFyaW91cyBPTUFQIHByb2Nlc3NvcnMgKi8KIHN0cnVjdCBvbWFwX2dsb2JhbHMgeworCXUzMgkJY2xhc3M7CQkvKiBPTUFQIGNsYXNzIHRvIGRldGVjdCAqLwogCXZvaWQgX19pb21lbQkqdGFwOwkJLyogQ29udHJvbCBtb2R1bGUgSUQgY29kZSAqLwogCXZvaWQgX19pb21lbQkqc2RyYzsJCS8qIFNEUkFNIENvbnRyb2xsZXIgKi8KIAl2b2lkIF9faW9tZW0JKnNtczsJCS8qIFNEUkFNIE1lbW9yeSBTY2hlZHVsZXIgKi8KQEAgLTYyLDYgKzY0LDcgQEAKIHZvaWQgb21hcDJfc2V0X2dsb2JhbHNfMzQzeCh2b2lkKTsKIAogLyogVGhlc2UgZ2V0IGNhbGxlZCBmcm9tIG9tYXAyX3NldF9nbG9iYWxzX3h4eHgoKSwgZG8gbm90IGNhbGwgdGhlc2UgKi8KK3ZvaWQgb21hcDJfc2V0X2dsb2JhbHNfdGFwKHN0cnVjdCBvbWFwX2dsb2JhbHMgKik7CiB2b2lkIG9tYXAyX3NldF9nbG9iYWxzX21lbW9yeShzdHJ1Y3Qgb21hcF9nbG9iYWxzICopOwogdm9pZCBvbWFwMl9zZXRfZ2xvYmFsc19jb250cm9sKHN0cnVjdCBvbWFwX2dsb2JhbHMgKik7CiB2b2lkIG9tYXAyX3NldF9nbG9iYWxzX3ByY20oc3RydWN0IG9tYXBfZ2xvYmFscyAqKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvY29udHJvbC5oIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9jb250cm9sLmgKaW5kZXggZTNmZDYyZC4uZGM5ODg2NzYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvY29udHJvbC5oCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvY29udHJvbC5oCkBAIC0xLDEzICsxLDEwIEBACi0jaWZuZGVmIF9fQVNNX0FSQ0hfQ09OVFJPTF9ICi0jZGVmaW5lIF9fQVNNX0FSQ0hfQ09OVFJPTF9ICi0KIC8qCiAgKiBhcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL2NvbnRyb2wuaAogICoKICAqIE9NQVAyLzMgU3lzdGVtIENvbnRyb2wgTW9kdWxlIGRlZmluaXRpb25zCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDA3IFRleGFzIEluc3RydW1lbnRzLCBJbmMuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgTm9raWEgQ29ycG9yYXRpb24KKyAqIENvcHlyaWdodCAoQykgMjAwNy0yMDA4IFRleGFzIEluc3RydW1lbnRzLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOCBOb2tpYSBDb3Jwb3JhdGlvbgogICoKICAqIFdyaXR0ZW4gYnkgUGF1bCBXYWxtc2xleQogICoKQEAgLTE2LDE0ICsxMywyMyBAQAogICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KICAqLwogCisjaWZuZGVmIF9fQVNNX0FSQ0hfQ09OVFJPTF9ICisjZGVmaW5lIF9fQVNNX0FSQ0hfQ09OVFJPTF9ICisKICNpbmNsdWRlIDxtYWNoL2lvLmg+CiAKKyNpZm5kZWYgX19BU1NFTUJMWV9fCiAjZGVmaW5lIE9NQVAyNDJYX0NUUkxfUkVHQUREUihyZWcpCQkJCQlcCi0JKHZvaWQgX19pb21lbSAqKUlPX0FERFJFU1MoT01BUDI0MlhfQ1RSTF9CQVNFICsgKHJlZykpCisJSU9fQUREUkVTUyhPTUFQMjQyWF9DVFJMX0JBU0UgKyAocmVnKSkKICNkZWZpbmUgT01BUDI0M1hfQ1RSTF9SRUdBRERSKHJlZykJCQkJCVwKLQkodm9pZCBfX2lvbWVtICopSU9fQUREUkVTUyhPTUFQMjQzWF9DVFJMX0JBU0UgKyAocmVnKSkKKwlJT19BRERSRVNTKE9NQVAyNDNYX0NUUkxfQkFTRSArIChyZWcpKQogI2RlZmluZSBPTUFQMzQzWF9DVFJMX1JFR0FERFIocmVnKQkJCQkJXAotCSh2b2lkIF9faW9tZW0gKilJT19BRERSRVNTKE9NQVAzNDNYX0NUUkxfQkFTRSArIChyZWcpKQorCUlPX0FERFJFU1MoT01BUDM0M1hfQ1RSTF9CQVNFICsgKHJlZykpCisjZWxzZQorI2RlZmluZSBPTUFQMjQyWF9DVFJMX1JFR0FERFIocmVnKQlJT19BRERSRVNTKE9NQVAyNDJYX0NUUkxfQkFTRSArIChyZWcpKQorI2RlZmluZSBPTUFQMjQzWF9DVFJMX1JFR0FERFIocmVnKQlJT19BRERSRVNTKE9NQVAyNDNYX0NUUkxfQkFTRSArIChyZWcpKQorI2RlZmluZSBPTUFQMzQzWF9DVFJMX1JFR0FERFIocmVnKQlJT19BRERSRVNTKE9NQVAzNDNYX0NUUkxfQkFTRSArIChyZWcpKQorI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyAqLwogCiAvKgogICogQXMgZWxzZXdoZXJlLCB0aGUgIk9NQVAyXyIgcHJlZml4IGluZGljYXRlcyB0aGF0IHRoZSBtYWNybyBpcyB2YWxpZCBmb3IKQEAgLTEzNCw2ICsxNDAsNyBAQAogI2RlZmluZSBPTUFQMzQzWF9DT05UUk9MX1RFU1RfS0VZXzEzCShPTUFQMl9DT05UUk9MX0dFTkVSQUwgKyAweDAwZmMpCiAjZGVmaW5lIE9NQVAzNDNYX0NPTlRST0xfSVZBMl9CT09UQUREUgkoT01BUDJfQ09OVFJPTF9HRU5FUkFMICsgMHgwMTkwKQogI2RlZmluZSBPTUFQMzQzWF9DT05UUk9MX0lWQTJfQk9PVE1PRAkoT01BUDJfQ09OVFJPTF9HRU5FUkFMICsgMHgwMTk0KQorI2RlZmluZSBPTUFQMzQzWF9DT05UUk9MX1RFTVBfU0VOU09SCShPTUFQMl9DT05UUk9MX0dFTkVSQUwgKyAweDAyYjQpCiAKIC8qCiAgKiBSRVZJU0lUOiBUaGlzIGxpc3Qgb2YgcmVnaXN0ZXJzIGlzIG5vdCBjb21wcmVoZW5zaXZlIC0gdGhlcmUgYXJlIG1vcmUKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvY3B1LmggYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL2NwdS5oCmluZGV4IDA1YWVlMGUuLmUwNDY0MTggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvY3B1LmgKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9jcHUuaApAQCAtMzQ2LDkgKzM0NiwxNCBAQAogCQlnZXRfc2lsX3JldmlzaW9uKHN5c3RlbV9yZXYpCiAKIC8qIFZhcmlvdXMgc2lsaWNvbiBtYWNyb3MgZGVmaW5lZCBoZXJlICovCisjZGVmaW5lIE9NQVAyNDJYX0NMQVNTCQkweDI0MjAwMDAwCiAjZGVmaW5lIE9NQVAyNDIwX1JFVl9FUzFfMAkweDI0MjAwMDAwCiAjZGVmaW5lIE9NQVAyNDIwX1JFVl9FUzJfMAkweDI0MjAxMDAwCisKKyNkZWZpbmUgT01BUDI0M1hfQ0xBU1MJCTB4MjQzMDAwMDAKICNkZWZpbmUgT01BUDI0MzBfUkVWX0VTMV8wCTB4MjQzMDAwMDAKKworI2RlZmluZSBPTUFQMzQzWF9DTEFTUwkJMHgzNDMwMDAwMAogI2RlZmluZSBPTUFQMzQzMF9SRVZfRVMxXzAJMHgzNDMwMDAwMAogI2RlZmluZSBPTUFQMzQzMF9SRVZfRVMyXzAJMHgzNDMwMTAwMAogI2RlZmluZSBPTUFQMzQzMF9SRVZfRVMyXzEJMHgzNDMwMjAwMApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TCmluZGV4IDFiMDAzOWIuLjFiMTFmNWMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUworKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMKQEAgLTM1LDYgKzM1LDE4IEBACiAjaWZkZWYgQ09ORklHX09NQVBfTExfREVCVUdfVUFSVDMKIAkJYWRkCVxyeCwgXHJ4LCAjMHgwMDAwNDAwMAlAIFVBUlQgMwogI2VuZGlmCisKKyNlbGlmCUNPTkZJR19BUkNIX09NQVAzCisJCW1vdmVxCVxyeCwgIzB4NDgwMDAwMDAJQCBwaHlzaWNhbCBiYXNlIGFkZHJlc3MKKwkJbW92bmUJXHJ4LCAjMHhkODAwMDAwMAlAIHZpcnR1YWwgYmFzZQorCQlvcnIJXHJ4LCBccngsICMweDAwMDZhMDAwCisjaWZkZWYgQ09ORklHX09NQVBfTExfREVCVUdfVUFSVDIKKwkJYWRkCVxyeCwgXHJ4LCAjMHgwMDAwMjAwMAlAIFVBUlQgMgorI2VuZGlmCisjaWZkZWYgQ09ORklHX09NQVBfTExfREVCVUdfVUFSVDMKKwkJYWRkCVxyeCwgXHJ4LCAjMHgwMGZiMDAwMAlAIFVBUlQgMworCQlhZGQJXHJ4LCBccngsICMweDAwMDA2MDAwCisjZW5kaWYKICNlbmRpZgogCQkuZW5kbQogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL2VudHJ5LW1hY3JvLlMgYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL2VudHJ5LW1hY3JvLlMKaW5kZXggZDRlOTA0My4uMDMwMTE4ZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9lbnRyeS1tYWNyby5TCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvZW50cnktbWFjcm8uUwpAQCAtNTUsOSArNTUsMTcgQEAKIDE1MTA6CiAJCS5lbmRtCiAKLSNlbGlmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDI0WFgpCisjZW5kaWYKKyNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAyNFhYKSB8fCBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAzNFhYKQogCisjaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMjRYWCkKICNpbmNsdWRlIDxtYWNoL29tYXAyNHh4Lmg+CisjZW5kaWYKKyNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAzNFhYKQorI2luY2x1ZGUgPG1hY2gvb21hcDM0eHguaD4KKyNlbmRpZgorCisjZGVmaW5lIElOVENQU19TSVJfSVJRX09GRlNFVAkweDAwNDAJCS8qIEFjdGl2ZSBpbnRlcnJ1cHQgbnVtYmVyICovCiAKIAkJLm1hY3JvCWRpc2FibGVfZmlxCiAJCS5lbmRtCkBAIC03OSw3ICs4Nyw3IEBACiAJCWxkcglcaXJxbnIsIFtcYmFzZSwgIzB4ZDhdIC8qIElSUSBwZW5kaW5nIHJlZyAzICovCiAJCWNtcAlcaXJxbnIsICMweDAKIDIyMjI6Ci0JCWxkcm5lCVxpcnFuciwgW1xiYXNlLCAjSVJRX1NJUl9JUlFdCisJCWxkcm5lCVxpcnFuciwgW1xiYXNlLCAjSU5UQ1BTX1NJUl9JUlFfT0ZGU0VUXQogCiAJCS5lbmRtCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvZnBnYS5oIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9mcGdhLmgKaW5kZXggYzkyZTRiNC4uZjE4NjRhNiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9mcGdhLmgKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9mcGdhLmgKQEAgLTM0LDkgKzM0LDkgQEAKICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICovCiAvKiBtYXBzIGluIHRoZSBGUEdBIHJlZ2lzdGVycyBhbmQgdGhlIEVUSFIgcmVnaXN0ZXJzICovCi0jZGVmaW5lIEgyUDJfREJHX0ZQR0FfQkFTRQkJMHhFODAwMDAwMAkvKiBWQSAqLwotI2RlZmluZSBIMlAyX0RCR19GUEdBX1NJWkUJCVNaXzRLCQkvKiBTSVpFICovCi0jZGVmaW5lIEgyUDJfREJHX0ZQR0FfU1RBUlQJCTB4MDQwMDAwMDAJLyogUEEgKi8KKyNkZWZpbmUgSDJQMl9EQkdfRlBHQV9CQVNFCQlJT01FTSgweEU4MDAwMDAwKQkvKiBWQSAqLworI2RlZmluZSBIMlAyX0RCR19GUEdBX1NJWkUJCVNaXzRLCQkJLyogU0laRSAqLworI2RlZmluZSBIMlAyX0RCR19GUEdBX1NUQVJUCQkweDA0MDAwMDAwCQkvKiBQQSAqLwogCiAjZGVmaW5lIEgyUDJfREJHX0ZQR0FfRVRIUl9TVEFSVAkoSDJQMl9EQkdfRlBHQV9TVEFSVCArIDB4MzAwKQogI2RlZmluZSBIMlAyX0RCR19GUEdBX0ZQR0FfUkVWCQkoSDJQMl9EQkdfRlBHQV9CQVNFICsgMHgxMCkJLyogRlBHQSBSZXZpc2lvbiAqLwpAQCAtODUsOSArODUsOSBAQAogICogIE9NQVAtMTUxMCBGUEdBCiAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqLwotI2RlZmluZSBPTUFQMTUxMF9GUEdBX0JBU0UJCQkweEU4MDAwMDAwCS8qIFZpcnR1YWwgKi8KLSNkZWZpbmUgT01BUDE1MTBfRlBHQV9TSVpFCQkJU1pfNEsKLSNkZWZpbmUgT01BUDE1MTBfRlBHQV9TVEFSVAkJCTB4MDgwMDAwMDAJLyogUGh5c2ljYWwgKi8KKyNkZWZpbmUgT01BUDE1MTBfRlBHQV9CQVNFCQlJT01FTSgweEU4MDAwMDAwKQkvKiBWQSAqLworI2RlZmluZSBPTUFQMTUxMF9GUEdBX1NJWkUJCVNaXzRLCisjZGVmaW5lIE9NQVAxNTEwX0ZQR0FfU1RBUlQJCTB4MDgwMDAwMDAJCS8qIFBBICovCiAKIC8qIFJldmlzaW9uICovCiAjZGVmaW5lIE9NQVAxNTEwX0ZQR0FfUkVWX0xPVwkJCShPTUFQMTUxMF9GUEdBX0JBU0UgKyAweDApCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL2dwaW8uaCBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvZ3Bpby5oCmluZGV4IDhjNzFlMjguLjk4ZTkwMDggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvZ3Bpby5oCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvZ3Bpby5oCkBAIC0yOSw3ICsyOSw3IEBACiAjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxtYWNoL2lycXMuaD4KIAotI2RlZmluZSBPTUFQX01QVUlPX0JBU0UJCQkodm9pZCBfX2lvbWVtICopMHhmZmZiNTAwMAorI2RlZmluZSBPTUFQX01QVUlPX0JBU0UJCQkweGZmZmI1MDAwCiAKICNpZmRlZiBDT05GSUdfQVJDSF9PTUFQNzMwCiAjZGVmaW5lIE9NQVBfTVBVSU9fSU5QVVRfTEFUQ0gJCTB4MDAKQEAgLTc2LDYgKzc2LDggQEAKIGV4dGVybiB2b2lkIG9tYXBfc2V0X2dwaW9fZGlyZWN0aW9uKGludCBncGlvLCBpbnQgaXNfaW5wdXQpOwogZXh0ZXJuIHZvaWQgb21hcF9zZXRfZ3Bpb19kYXRhb3V0KGludCBncGlvLCBpbnQgZW5hYmxlKTsKIGV4dGVybiBpbnQgb21hcF9nZXRfZ3Bpb19kYXRhaW4oaW50IGdwaW8pOworZXh0ZXJuIHZvaWQgb21hcDJfZ3Bpb19wcmVwYXJlX2Zvcl9yZXRlbnRpb24odm9pZCk7CitleHRlcm4gdm9pZCBvbWFwMl9ncGlvX3Jlc3VtZV9hZnRlcl9yZXRlbnRpb24odm9pZCk7CiBleHRlcm4gdm9pZCBvbWFwX3NldF9ncGlvX2RlYm91bmNlKGludCBncGlvLCBpbnQgZW5hYmxlKTsKIGV4dGVybiB2b2lkIG9tYXBfc2V0X2dwaW9fZGVib3VuY2VfdGltZShpbnQgZ3BpbywgaW50IGVuYWJsZSk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvZ3BtYy5oIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9ncG1jLmgKaW5kZXggNmE4ZTA3Zi4uNDViNjc4NCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9ncG1jLmgKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9ncG1jLmgKQEAgLTExLDYgKzExLDkgQEAKICNpZm5kZWYgX19PTUFQMl9HUE1DX0gKICNkZWZpbmUgX19PTUFQMl9HUE1DX0gKIAorLyogTWF4aW11bSBOdW1iZXIgb2YgQ2hpcCBTZWxlY3RzICovCisjZGVmaW5lIEdQTUNfQ1NfTlVNCQk4CisKICNkZWZpbmUgR1BNQ19DU19DT05GSUcxCQkweDAwCiAjZGVmaW5lIEdQTUNfQ1NfQ09ORklHMgkJMHgwNAogI2RlZmluZSBHUE1DX0NTX0NPTkZJRzMJCTB4MDgKQEAgLTIyLDYgKzI1LDkgQEAKICNkZWZpbmUgR1BNQ19DU19OQU5EX0FERFJFU1MJMHgyMAogI2RlZmluZSBHUE1DX0NTX05BTkRfREFUQQkweDI0CiAKKyNkZWZpbmUgR1BNQ19DT05GSUcJCTB4NTAKKyNkZWZpbmUgR1BNQ19TVEFUVVMJCTB4NTQKKwogI2RlZmluZSBHUE1DX0NPTkZJRzFfV1JBUEJVUlNUX1NVUFAgICAgICgxIDw8IDMxKQogI2RlZmluZSBHUE1DX0NPTkZJRzFfUkVBRE1VTFRJUExFX1NVUFAgICgxIDw8IDMwKQogI2RlZmluZSBHUE1DX0NPTkZJRzFfUkVBRFRZUEVfQVNZTkMgICAgICgwIDw8IDI5KQpAQCAtNzgsOSArODQsMTQgQEAKIAl1MTYgYWNjZXNzOwkJLyogU3RhcnQtY3ljbGUgdG8gZmlyc3QgZGF0YSB2YWxpZCBkZWxheSAqLwogCXUxNiByZF9jeWNsZTsJCS8qIFRvdGFsIHJlYWQgY3ljbGUgdGltZSAqLwogCXUxNiB3cl9jeWNsZTsJCS8qIFRvdGFsIHdyaXRlIGN5Y2xlIHRpbWUgKi8KKworCS8qIFRoZSBmb2xsb3dpbmcgYXJlIG9ubHkgb24gT01BUDM0MzAgKi8KKwl1MTYgd3JfYWNjZXNzOwkJLyogV1JBQ0NFU1NUSU1FICovCisJdTE2IHdyX2RhdGFfbXV4X2J1czsJLyogV1JEQVRBT05BRE1VWEJVUyAqLwogfTsKIAogZXh0ZXJuIHVuc2lnbmVkIGludCBncG1jX25zX3RvX3RpY2tzKHVuc2lnbmVkIGludCB0aW1lX25zKTsKK2V4dGVybiB1bnNpZ25lZCBpbnQgZ3BtY190aWNrc190b19ucyh1bnNpZ25lZCBpbnQgdGlja3MpOwogZXh0ZXJuIHVuc2lnbmVkIGludCBncG1jX3JvdW5kX25zX3RvX3RpY2tzKHVuc2lnbmVkIGludCB0aW1lX25zKTsKIGV4dGVybiB1bnNpZ25lZCBsb25nIGdwbWNfZ2V0X2ZjbGtfcGVyaW9kKHZvaWQpOwogCkBAIC05Miw1ICsxMDMsNiBAQAogZXh0ZXJuIHZvaWQgZ3BtY19jc19mcmVlKGludCBjcyk7CiBleHRlcm4gaW50IGdwbWNfY3Nfc2V0X3Jlc2VydmVkKGludCBjcywgaW50IHJlc2VydmVkKTsKIGV4dGVybiBpbnQgZ3BtY19jc19yZXNlcnZlZChpbnQgY3MpOworZXh0ZXJuIHZvaWQgZ3BtY19pbml0KHZvaWQpOwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvaGFyZHdhcmUuaCBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvaGFyZHdhcmUuaAppbmRleCAwN2Y1ZDdmLi42NTg5ZGRiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL2hhcmR3YXJlLmgKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9oYXJkd2FyZS5oCkBAIC04OSw3ICs4OSw3IEBACiAjZGVmaW5lIERQTExfQ1RMCQkoMHhmZmZlY2YwMCkKIAogLyogRFNQIGNsb2NrIGNvbnRyb2wuIE11c3QgdXNlIF9fcmF3X3JlYWR3KCkgYW5kIF9fcmF3X3dyaXRldygpIHdpdGggdGhlc2UgKi8KLSNkZWZpbmUgRFNQX0NPTkZJR19SRUdfQkFTRSAgICAgKDB4ZTEwMDgwMDApCisjZGVmaW5lIERTUF9DT05GSUdfUkVHX0JBU0UgICAgIElPTUVNKDB4ZTEwMDgwMDApCiAjZGVmaW5lIERTUF9DS0NUTAkJKERTUF9DT05GSUdfUkVHX0JBU0UgKyAweDApCiAjZGVmaW5lIERTUF9JRExFQ1QxCQkoRFNQX0NPTkZJR19SRUdfQkFTRSArIDB4NCkKICNkZWZpbmUgRFNQX0lETEVDVDIJCShEU1BfQ09ORklHX1JFR19CQVNFICsgMHg4KQpAQCAtMjgyLDggKzI4Miw4IEBACiAKICNpbmNsdWRlICJvbWFwNzMwLmgiCiAjaW5jbHVkZSAib21hcDE1MTAuaCIKLSNpbmNsdWRlICJvbWFwMjR4eC5oIgogI2luY2x1ZGUgIm9tYXAxNnh4LmgiCisjaW5jbHVkZSAib21hcDI0eHguaCIKICNpbmNsdWRlICJvbWFwMzR4eC5oIgogCiAjaWZuZGVmIF9fQVNTRU1CTEVSX18KQEAgLTMyMiw2ICszMjIsMTQgQEAKICNpbmNsdWRlICJib2FyZC0yNDMwc2RwLmgiCiAjZW5kaWYKIAorI2lmZGVmIENPTkZJR19NQUNIX09NQVAzX0JFQUdMRQorI2luY2x1ZGUgImJvYXJkLW9tYXAzYmVhZ2xlLmgiCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19NQUNIX09NQVBfTERQCisjaW5jbHVkZSAiYm9hcmQtbGRwLmgiCisjZW5kaWYKKwogI2lmZGVmIENPTkZJR19NQUNIX09NQVBfQVBPTExPTgogI2luY2x1ZGUgImJvYXJkLWFwb2xsb24uaCIKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9pby5oIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9pby5oCmluZGV4IDJhMzBiN2QuLmFkYzgzYjcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvaW8uaAorKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL2lvLmgKQEAgLTU1LDE0ICs1NSwxMyBAQAogCiAjaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMSkKIAotI2RlZmluZSBJT19QSFlTCQkweEZGRkIwMDAwCi0jZGVmaW5lIElPX09GRlNFVAkweDAxMDAwMDAwCS8qIFZpcnR1YWwgSU8gPSAweGZlZmIwMDAwICovCi0jZGVmaW5lIElPX1NJWkUJCTB4NDAwMDAKLSNkZWZpbmUgSU9fVklSVAkJKElPX1BIWVMgLSBJT19PRkZTRVQpCi0jZGVmaW5lIElPX0FERFJFU1MocGEpCSgocGEpIC0gSU9fT0ZGU0VUKQotI2RlZmluZSBPTUFQMV9JT19BRERSRVNTKHBhKQkoKHBhKSAtIElPX09GRlNFVCkKLSNkZWZpbmUgaW9fcDJ2KHBhKQkoKHBhKSAtIElPX09GRlNFVCkKLSNkZWZpbmUgaW9fdjJwKHZhKQkoKHZhKSArIElPX09GRlNFVCkKKyNkZWZpbmUgSU9fUEhZUwkJCTB4RkZGQjAwMDAKKyNkZWZpbmUgSU9fT0ZGU0VUCQkweDAxMDAwMDAwCS8qIFZpcnR1YWwgSU8gPSAweGZlZmIwMDAwICovCisjZGVmaW5lIElPX1NJWkUJCQkweDQwMDAwCisjZGVmaW5lIElPX1ZJUlQJCQkoSU9fUEhZUyAtIElPX09GRlNFVCkKKyNkZWZpbmUgX19JT19BRERSRVNTKHBhKQkoKHBhKSAtIElPX09GRlNFVCkKKyNkZWZpbmUgX19PTUFQMV9JT19BRERSRVNTKHBhKQkoKHBhKSAtIElPX09GRlNFVCkKKyNkZWZpbmUgaW9fdjJwKHZhKQkJKCh2YSkgKyBJT19PRkZTRVQpCiAKICNlbGlmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDIpCiAKQEAgLTc0LDcgKzczLDYgQEAKICNkZWZpbmUgTDRfMjRYWF9WSVJUCTB4ZDgwMDAwMDAKICNkZWZpbmUgTDRfMjRYWF9TSVpFCVNaXzFNCQkvKiAxTUIgb2YgMTI4TUIgdXNlZCwgd2FudCAxTUIgc2VjdCAqLwogCi0jaWZkZWYgQ09ORklHX0FSQ0hfT01BUDI0MzAKICNkZWZpbmUgTDRfV0tfMjQzWF9QSFlTCQlMNF9XS18yNDNYX0JBU0UJCS8qIDB4NDkwMDAwMDAgKi8KICNkZWZpbmUgTDRfV0tfMjQzWF9WSVJUCQkweGQ5MDAwMDAwCiAjZGVmaW5lIEw0X1dLXzI0M1hfU0laRQkJU1pfMU0KQEAgLTg4LDEzICs4NiwxMCBAQAogI2RlZmluZSBPTUFQMjQzWF9TTVNfVklSVAkweEZDMDAwMDAwCiAjZGVmaW5lIE9NQVAyNDNYX1NNU19TSVpFCVNaXzFNCiAKLSNlbmRpZgotCi0jZGVmaW5lIElPX09GRlNFVAkweDkwMDAwMDAwCi0jZGVmaW5lIElPX0FERFJFU1MocGEpCSgocGEpICsgSU9fT0ZGU0VUKQkvKiBXb3JrcyBmb3IgTDMgYW5kIEw0ICovCi0jZGVmaW5lIE9NQVAyX0lPX0FERFJFU1MocGEpCSgocGEpICsgSU9fT0ZGU0VUKQkvKiBXb3JrcyBmb3IgTDMgYW5kIEw0ICovCi0jZGVmaW5lIGlvX3AydihwYSkJKChwYSkgKyBJT19PRkZTRVQpCS8qIFdvcmtzIGZvciBMMyBhbmQgTDQgKi8KLSNkZWZpbmUgaW9fdjJwKHZhKQkoKHZhKSAtIElPX09GRlNFVCkJLyogV29ya3MgZm9yIEwzIGFuZCBMNCAqLworI2RlZmluZSBJT19PRkZTRVQJCTB4OTAwMDAwMDAKKyNkZWZpbmUgX19JT19BRERSRVNTKHBhKQkoKHBhKSArIElPX09GRlNFVCkJLyogV29ya3MgZm9yIEwzIGFuZCBMNCAqLworI2RlZmluZSBfX09NQVAyX0lPX0FERFJFU1MocGEpCSgocGEpICsgSU9fT0ZGU0VUKQkvKiBXb3JrcyBmb3IgTDMgYW5kIEw0ICovCisjZGVmaW5lIGlvX3YycCh2YSkJCSgodmEpIC0gSU9fT0ZGU0VUKQkvKiBXb3JrcyBmb3IgTDMgYW5kIEw0ICovCiAKIC8qIERTUCAqLwogI2RlZmluZSBEU1BfTUVNXzI0WFhfUEhZUwlPTUFQMjQyMF9EU1BfTUVNX0JBU0UJLyogMHg1ODAwMDAwMCAqLwpAQCAtMTQ5LDkgKzE0NCw4IEBACiAKIAogI2RlZmluZSBJT19PRkZTRVQJCTB4OTAwMDAwMDAKLSNkZWZpbmUgSU9fQUREUkVTUyhwYSkJCSgocGEpICsgSU9fT0ZGU0VUKS8qIFdvcmtzIGZvciBMMyBhbmQgTDQgKi8KLSNkZWZpbmUgT01BUDJfSU9fQUREUkVTUyhwYSkJKChwYSkgKyBJT19PRkZTRVQpLyogV29ya3MgZm9yIEwzIGFuZCBMNCAqLwotI2RlZmluZSBpb19wMnYocGEpCQkoKHBhKSArIElPX09GRlNFVCkvKiBXb3JrcyBmb3IgTDMgYW5kIEw0ICovCisjZGVmaW5lIF9fSU9fQUREUkVTUyhwYSkJKChwYSkgKyBJT19PRkZTRVQpLyogV29ya3MgZm9yIEwzIGFuZCBMNCAqLworI2RlZmluZSBfX09NQVAyX0lPX0FERFJFU1MocGEpCSgocGEpICsgSU9fT0ZGU0VUKS8qIFdvcmtzIGZvciBMMyBhbmQgTDQgKi8KICNkZWZpbmUgaW9fdjJwKHZhKQkJKCh2YSkgLSBJT19PRkZTRVQpLyogV29ya3MgZm9yIEwzIGFuZCBMNCAqLwogCiAvKiBEU1AgKi8KQEAgLTE2Nyw3ICsxNjEsMTQgQEAKIAogI2VuZGlmCiAKLSNpZm5kZWYgX19BU1NFTUJMRVJfXworI2RlZmluZSBJT19BRERSRVNTKHBhKQkJSU9NRU0oX19JT19BRERSRVNTKHBhKSkKKyNkZWZpbmUgT01BUDFfSU9fQUREUkVTUyhwYSkJSU9NRU0oX19PTUFQMV9JT19BRERSRVNTKHBhKSkKKyNkZWZpbmUgT01BUDJfSU9fQUREUkVTUyhwYSkJSU9NRU0oX19PTUFQMl9JT19BRERSRVNTKHBhKSkKKworI2lmZGVmIF9fQVNTRU1CTEVSX18KKyNkZWZpbmUgSU9NRU0oeCkJCXgKKyNlbHNlCisjZGVmaW5lIElPTUVNKHgpCQkoKHZvaWQgX19mb3JjZSBfX2lvbWVtICopKHgpKQogCiAvKgogICogRnVuY3Rpb25zIHRvIGFjY2VzcyB0aGUgT01BUCBJTyByZWdpb24KQEAgLTE3OCwxMyArMTc5LDEzIEBACiAgKgkgLSBETyBOT1QgdXNlIGhhcmRjb2RlZCB2aXJ0dWFsIGFkZHJlc3NlcyB0byBhbGxvdyBjaGFuZ2luZyB0aGUKICAqCSAgIElPIGFkZHJlc3Mgc3BhY2UgYWdhaW4gaWYgbmVlZGVkCiAgKi8KLSNkZWZpbmUgb21hcF9yZWFkYihhKQkJKCoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAgKilJT19BRERSRVNTKGEpKQotI2RlZmluZSBvbWFwX3JlYWR3KGEpCQkoKih2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKUlPX0FERFJFU1MoYSkpCi0jZGVmaW5lIG9tYXBfcmVhZGwoYSkJCSgqKHZvbGF0aWxlIHVuc2lnbmVkIGludCAgICopSU9fQUREUkVTUyhhKSkKKyNkZWZpbmUgb21hcF9yZWFkYihhKQkJX19yYXdfcmVhZGIoSU9fQUREUkVTUyhhKSkKKyNkZWZpbmUgb21hcF9yZWFkdyhhKQkJX19yYXdfcmVhZHcoSU9fQUREUkVTUyhhKSkKKyNkZWZpbmUgb21hcF9yZWFkbChhKQkJX19yYXdfcmVhZGwoSU9fQUREUkVTUyhhKSkKIAotI2RlZmluZSBvbWFwX3dyaXRlYih2LGEpCSgqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgICopSU9fQUREUkVTUyhhKSA9ICh2KSkKLSNkZWZpbmUgb21hcF93cml0ZXcodixhKQkoKih2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKUlPX0FERFJFU1MoYSkgPSAodikpCi0jZGVmaW5lIG9tYXBfd3JpdGVsKHYsYSkJKCoodm9sYXRpbGUgdW5zaWduZWQgaW50ICAgKilJT19BRERSRVNTKGEpID0gKHYpKQorI2RlZmluZSBvbWFwX3dyaXRlYih2LGEpCV9fcmF3X3dyaXRlYih2LCBJT19BRERSRVNTKGEpKQorI2RlZmluZSBvbWFwX3dyaXRldyh2LGEpCV9fcmF3X3dyaXRldyh2LCBJT19BRERSRVNTKGEpKQorI2RlZmluZSBvbWFwX3dyaXRlbCh2LGEpCV9fcmF3X3dyaXRlbCh2LCBJT19BRERSRVNTKGEpKQogCiBleHRlcm4gdm9pZCBvbWFwMV9tYXBfY29tbW9uX2lvKHZvaWQpOwogZXh0ZXJuIHZvaWQgb21hcDFfaW5pdF9jb21tb25faHcodm9pZCk7CkBAIC0xOTIsNiArMTkzLDEyIEBACiBleHRlcm4gdm9pZCBvbWFwMl9tYXBfY29tbW9uX2lvKHZvaWQpOwogZXh0ZXJuIHZvaWQgb21hcDJfaW5pdF9jb21tb25faHcodm9pZCk7CiAKKyNkZWZpbmUgX19hcmNoX2lvcmVtYXAocCxzLHQpCW9tYXBfaW9yZW1hcChwLHMsdCkKKyNkZWZpbmUgX19hcmNoX2lvdW5tYXAodikJb21hcF9pb3VubWFwKHYpCisKK3ZvaWQgX19pb21lbSAqb21hcF9pb3JlbWFwKHVuc2lnbmVkIGxvbmcgcGh5cywgc2l6ZV90IHNpemUsIHVuc2lnbmVkIGludCB0eXBlKTsKK3ZvaWQgb21hcF9pb3VubWFwKHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkcik7CisKICNlbmRpZgogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvaXJxcy5oIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9pcnFzLmgKaW5kZXggNjJhYTdkZi4uYTI5MjlhYyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9pcnFzLmgKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9pcnFzLmgKQEAgLTEyNSw2ICsxMjUsNyBAQAogI2RlZmluZSBJTlRfVUFSVDIJCSgxNSArIElIMl9CQVNFKQogI2RlZmluZSBJTlRfQlRfTUNTSTFUWAkJKDE2ICsgSUgyX0JBU0UpCiAjZGVmaW5lIElOVF9CVF9NQ1NJMVJYCQkoMTcgKyBJSDJfQkFTRSkKKyNkZWZpbmUgSU5UX1NPU1NJX01BVENICQkoMTkgKyBJSDJfQkFTRSkKICNkZWZpbmUgSU5UX1VTQl9XMkZDCQkoMjAgKyBJSDJfQkFTRSkKICNkZWZpbmUgSU5UXzFXSVJFCQkoMjEgKyBJSDJfQkFTRSkKICNkZWZpbmUgSU5UX09TX1RJTUVSCQkoMjIgKyBJSDJfQkFTRSkKQEAgLTE3Niw2ICsxNzcsNyBAQAogI2RlZmluZSBJTlRfMTYxMF9ETUFfQ0gxNAkoNjEgKyBJSDJfQkFTRSkKICNkZWZpbmUgSU5UXzE2MTBfRE1BX0NIMTUJKDYyICsgSUgyX0JBU0UpCiAjZGVmaW5lIElOVF8xNjEwX05BTkQJCSg2MyArIElIMl9CQVNFKQorI2RlZmluZSBJTlRfMTYxMF9TSEExTUQ1CSg5MSArIElIMl9CQVNFKQogCiAvKgogICogT01BUC03MzAgc3BlY2lmaWMgSVJRIG51bWJlcnMgZm9yIGludGVycnVwdCBoYW5kbGVyIDIKQEAgLTI2MywxMiArMjY1LDE4IEBACiAjZGVmaW5lIElOVF8yNFhYX0dQVElNRVIxMAk0NgogI2RlZmluZSBJTlRfMjRYWF9HUFRJTUVSMTEJNDcKICNkZWZpbmUgSU5UXzI0WFhfR1BUSU1FUjEyCTQ4CisjZGVmaW5lIElOVF8yNFhYX1NIQTFNRDUJNTEKKyNkZWZpbmUgSU5UXzI0WFhfTUNCU1A0X0lSUV9UWAk1NAorI2RlZmluZSBJTlRfMjRYWF9NQ0JTUDRfSVJRX1JYCTU1CiAjZGVmaW5lIElOVF8yNFhYX0kyQzFfSVJRCTU2CiAjZGVmaW5lIElOVF8yNFhYX0kyQzJfSVJRCTU3CisjZGVmaW5lIElOVF8yNFhYX0hEUV9JUlEJNTgKICNkZWZpbmUgSU5UXzI0WFhfTUNCU1AxX0lSUV9UWAk1OQogI2RlZmluZSBJTlRfMjRYWF9NQ0JTUDFfSVJRX1JYCTYwCiAjZGVmaW5lIElOVF8yNFhYX01DQlNQMl9JUlFfVFgJNjIKICNkZWZpbmUgSU5UXzI0WFhfTUNCU1AyX0lSUV9SWAk2MworI2RlZmluZSBJTlRfMjRYWF9TUEkxX0lSUQk2NQorI2RlZmluZSBJTlRfMjRYWF9TUEkyX0lSUQk2NgogI2RlZmluZSBJTlRfMjRYWF9VQVJUMV9JUlEJNzIKICNkZWZpbmUgSU5UXzI0WFhfVUFSVDJfSVJRCTczCiAjZGVmaW5lIElOVF8yNFhYX1VBUlQzX0lSUQk3NApAQCAtMjc4LDcgKzI4Niw1OCBAQAogI2RlZmluZSBJTlRfMjRYWF9VU0JfSVJRX0hHRU4JNzgKICNkZWZpbmUgSU5UXzI0WFhfVVNCX0lSUV9IU09GCTc5CiAjZGVmaW5lIElOVF8yNFhYX1VTQl9JUlFfT1RHCTgwCisjZGVmaW5lIElOVF8yNFhYX01DQlNQNV9JUlFfVFgJODEKKyNkZWZpbmUgSU5UXzI0WFhfTUNCU1A1X0lSUV9SWAk4MgogI2RlZmluZSBJTlRfMjRYWF9NTUNfSVJRCTgzCisjZGVmaW5lIElOVF8yNFhYX01NQzJfSVJRCTg2CisjZGVmaW5lIElOVF8yNFhYX01DQlNQM19JUlFfVFgJODkKKyNkZWZpbmUgSU5UXzI0WFhfTUNCU1AzX0lSUV9SWAk5MAorI2RlZmluZSBJTlRfMjRYWF9TUEkzX0lSUQk5MQorCisjZGVmaW5lIElOVF8yNDNYX01DQlNQMl9JUlEJMTYKKyNkZWZpbmUgSU5UXzI0M1hfTUNCU1AzX0lSUQkxNworI2RlZmluZSBJTlRfMjQzWF9NQ0JTUDRfSVJRCTE4CisjZGVmaW5lIElOVF8yNDNYX01DQlNQNV9JUlEJMTkKKyNkZWZpbmUgSU5UXzI0M1hfTUNCU1AxX0lSUQk2NAorI2RlZmluZSBJTlRfMjQzWF9IU19VU0JfTUMJOTIKKyNkZWZpbmUgSU5UXzI0M1hfSFNfVVNCX0RNQQk5MworI2RlZmluZSBJTlRfMjQzWF9DQVJLSVRfSVJRCTk0CisKKyNkZWZpbmUgSU5UXzM0WFhfQkVOQ0hfTVBVX0VNVUwJMworI2RlZmluZSBJTlRfMzRYWF9TVF9NQ0JTUDJfSVJRCTQKKyNkZWZpbmUgSU5UXzM0WFhfU1RfTUNCU1AzX0lSUQk1CisjZGVmaW5lIElOVF8zNFhYX1NTTV9BQk9SVF9JUlEJNgorI2RlZmluZSBJTlRfMzRYWF9TWVNfTklSUQk3CisjZGVmaW5lIElOVF8zNFhYX0QyRF9GV19JUlEJOAorI2RlZmluZSBJTlRfMzRYWF9QUkNNX01QVV9JUlEJMTEKKyNkZWZpbmUgSU5UXzM0WFhfTUNCU1AxX0lSUQkxNgorI2RlZmluZSBJTlRfMzRYWF9NQ0JTUDJfSVJRCTE3CisjZGVmaW5lIElOVF8zNFhYX01DQlNQM19JUlEJMjIKKyNkZWZpbmUgSU5UXzM0WFhfTUNCU1A0X0lSUQkyMworI2RlZmluZSBJTlRfMzRYWF9DQU1fSVJRCTI0CisjZGVmaW5lIElOVF8zNFhYX01DQlNQNV9JUlEJMjcKKyNkZWZpbmUgSU5UXzM0WFhfR1BJT19CQU5LMQkyOQorI2RlZmluZSBJTlRfMzRYWF9HUElPX0JBTksyCTMwCisjZGVmaW5lIElOVF8zNFhYX0dQSU9fQkFOSzMJMzEKKyNkZWZpbmUgSU5UXzM0WFhfR1BJT19CQU5LNAkzMgorI2RlZmluZSBJTlRfMzRYWF9HUElPX0JBTks1CTMzCisjZGVmaW5lIElOVF8zNFhYX0dQSU9fQkFOSzYJMzQKKyNkZWZpbmUgSU5UXzM0WFhfVVNJTV9JUlEJMzUKKyNkZWZpbmUgSU5UXzM0WFhfV0RUM19JUlEJMzYKKyNkZWZpbmUgSU5UXzM0WFhfU1BJNF9JUlEJNDgKKyNkZWZpbmUgSU5UXzM0WFhfU0hBMU1ENTJfSVJRCTQ5CisjZGVmaW5lIElOVF8zNFhYX0ZQS0FfUkVBRFlfSVJRCTUwCisjZGVmaW5lIElOVF8zNFhYX1NIQTFNRDUxX0lSUQk1MQorI2RlZmluZSBJTlRfMzRYWF9STkdfSVJRCTUyCisjZGVmaW5lIElOVF8zNFhYX0kyQzNfSVJRCTYxCisjZGVmaW5lIElOVF8zNFhYX0ZQS0FfRVJST1JfSVJRCTY0CisjZGVmaW5lIElOVF8zNFhYX1BCSUFTX0lSUQk3NQorI2RlZmluZSBJTlRfMzRYWF9PSENJX0lSUQk3NgorI2RlZmluZSBJTlRfMzRYWF9FSENJX0lSUQk3NworI2RlZmluZSBJTlRfMzRYWF9UTExfSVJRCTc4CisjZGVmaW5lIElOVF8zNFhYX1BBUlRIQVNIX0lSUQk3OQorI2RlZmluZSBJTlRfMzRYWF9NTUMzX0lSUQk5NAorI2RlZmluZSBJTlRfMzRYWF9HUFQxMl9JUlEJOTUKIAogI2RlZmluZQlJTlRfMzRYWF9CRU5DSF9NUFVfRU1VTAkzCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvbWNic3AuaCBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvbWNic3AuaAppbmRleCA4ZmRiOTVlLi42YTBkMWEwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL21jYnNwLmgKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9tY2JzcC5oCkBAIC00Myw5ICs0MywxNSBAQAogCiAjZGVmaW5lIE9NQVAyNFhYX01DQlNQMV9CQVNFCTB4NDgwNzQwMDAKICNkZWZpbmUgT01BUDI0WFhfTUNCU1AyX0JBU0UJMHg0ODA3NjAwMAorI2RlZmluZSBPTUFQMjQzMF9NQ0JTUDNfQkFTRQkweDQ4MDhjMDAwCisjZGVmaW5lIE9NQVAyNDMwX01DQlNQNF9CQVNFCTB4NDgwOGUwMDAKKyNkZWZpbmUgT01BUDI0MzBfTUNCU1A1X0JBU0UJMHg0ODA5NjAwMAogCiAjZGVmaW5lIE9NQVAzNFhYX01DQlNQMV9CQVNFCTB4NDgwNzQwMDAKICNkZWZpbmUgT01BUDM0WFhfTUNCU1AyX0JBU0UJMHg0OTAyMjAwMAorI2RlZmluZSBPTUFQMzRYWF9NQ0JTUDNfQkFTRQkweDQ5MDI0MDAwCisjZGVmaW5lIE9NQVAzNFhYX01DQlNQNF9CQVNFCTB4NDkwMjYwMDAKKyNkZWZpbmUgT01BUDM0WFhfTUNCU1A1X0JBU0UJMHg0ODA5NjAwMAogCiAjaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMTVYWCkgfHwgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMTZYWCkgfHwgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQNzMwKQogCkBAIC04MSw5ICs4Nyw2IEBACiAjZGVmaW5lIE9NQVBfTUNCU1BfUkVHX1hDRVJHCTB4M0EKICNkZWZpbmUgT01BUF9NQ0JTUF9SRUdfWENFUkgJMHgzQwogCi0jZGVmaW5lIE9NQVBfTUFYX01DQlNQX0NPVU5UCTMKLSNkZWZpbmUgTUFYX01DQlNQX0NMT0NLUwkzCi0KICNkZWZpbmUgQVVESU9fTUNCU1BfREFUQVdSSVRFCShPTUFQMTUxMF9NQ0JTUDFfQkFTRSArIE9NQVBfTUNCU1BfUkVHX0RYUjEpCiAjZGVmaW5lIEFVRElPX01DQlNQX0RBVEFSRUFECShPTUFQMTUxMF9NQ0JTUDFfQkFTRSArIE9NQVBfTUNCU1BfUkVHX0RSUjEpCiAKQEAgLTkxLDEyICs5NCwxNCBAQAogI2RlZmluZSBBVURJT19ETUFfVFgJCU9NQVBfRE1BX01DQlNQMV9UWAogI2RlZmluZSBBVURJT19ETUFfUlgJCU9NQVBfRE1BX01DQlNQMV9SWAogCi0jZWxpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAyNFhYKQorI2VsaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMjRYWCkgfHwgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMzRYWCkKIAogI2RlZmluZSBPTUFQX01DQlNQX1JFR19EUlIyCTB4MDAKICNkZWZpbmUgT01BUF9NQ0JTUF9SRUdfRFJSMQkweDA0CiAjZGVmaW5lIE9NQVBfTUNCU1BfUkVHX0RYUjIJMHgwOAogI2RlZmluZSBPTUFQX01DQlNQX1JFR19EWFIxCTB4MEMKKyNkZWZpbmUgT01BUF9NQ0JTUF9SRUdfRFJSCTB4MDAKKyNkZWZpbmUgT01BUF9NQ0JTUF9SRUdfRFhSCTB4MDgKICNkZWZpbmUgT01BUF9NQ0JTUF9SRUdfU1BDUjIJMHgxMAogI2RlZmluZSBPTUFQX01DQlNQX1JFR19TUENSMQkweDE0CiAjZGVmaW5lIE9NQVBfTUNCU1BfUkVHX1JDUjIJMHgxOApAQCAtMTI0LDkgKzEyOSw5IEBACiAjZGVmaW5lIE9NQVBfTUNCU1BfUkVHX1JDRVJICTB4NzAKICNkZWZpbmUgT01BUF9NQ0JTUF9SRUdfWENFUkcJMHg3NAogI2RlZmluZSBPTUFQX01DQlNQX1JFR19YQ0VSSAkweDc4Ci0KLSNkZWZpbmUgT01BUF9NQVhfTUNCU1BfQ09VTlQJMgotI2RlZmluZSBNQVhfTUNCU1BfQ0xPQ0tTCTIKKyNkZWZpbmUgT01BUF9NQ0JTUF9SRUdfU1lTQ09OCTB4OEMKKyNkZWZpbmUgT01BUF9NQ0JTUF9SRUdfWENDUgkweEFDCisjZGVmaW5lIE9NQVBfTUNCU1BfUkVHX1JDQ1IJMHhCMAogCiAjZGVmaW5lIEFVRElPX01DQlNQX0RBVEFXUklURQkoT01BUDI0WFhfTUNCU1AyX0JBU0UgKyBPTUFQX01DQlNQX1JFR19EWFIxKQogI2RlZmluZSBBVURJT19NQ0JTUF9EQVRBUkVBRAkoT01BUDI0WFhfTUNCU1AyX0JBU0UgKyBPTUFQX01DQlNQX1JFR19EUlIxKQpAQCAtMTM3LDEwICsxNDIsNiBAQAogCiAjZW5kaWYKIAotI2RlZmluZSBPTUFQX01DQlNQX1JFQUQoYmFzZSwgcmVnKQkJX19yYXdfcmVhZHcoKGJhc2UpICsgT01BUF9NQ0JTUF9SRUdfIyNyZWcpCi0jZGVmaW5lIE9NQVBfTUNCU1BfV1JJVEUoYmFzZSwgcmVnLCB2YWwpCV9fcmF3X3dyaXRldygodmFsKSwgKGJhc2UpICsgT01BUF9NQ0JTUF9SRUdfIyNyZWcpCi0KLQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqIE1jQlNQIFNQQ1IxIGJpdCBkZWZpbml0aW9ucyAqKioqKioqKioqKioqKioqKioqKioqKi8KICNkZWZpbmUgUlJTVAkJCTB4MDAwMQogI2RlZmluZSBSUkRZCQkJMHgwMDAyCkBAIC0xNTEsNiArMTUyLDcgQEAKICNkZWZpbmUgRFhFTkEJCQkweDAwODAKICNkZWZpbmUgQ0xLU1RQKHZhbHVlKQkJKCh2YWx1ZSk8PDExKQkvKiBiaXRzIDExOjEyICovCiAjZGVmaW5lIFJKVVNUKHZhbHVlKQkJKCh2YWx1ZSk8PDEzKQkvKiBiaXRzIDEzOjE0ICovCisjZGVmaW5lIEFMQgkJCTB4ODAwMAogI2RlZmluZSBETEIJCQkweDgwMDAKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqIE1jQlNQIFNQQ1IyIGJpdCBkZWZpbml0aW9ucyAqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTIyOCw2ICsyMzAsMTcgQEAKICNkZWZpbmUgWFBBQkxLKHZhbHVlKQkJKCh2YWx1ZSk8PDUpCS8qIEJpdHMgNTo2ICovCiAjZGVmaW5lIFhQQkJMSyh2YWx1ZSkJCSgodmFsdWUpPDw3KQkvKiBCaXRzIDc6OCAqLwogCisvKioqKioqKioqKioqKioqKioqKioqKiogTWNCU1AgWENDUiBiaXQgZGVmaW5pdGlvbnMgKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNkZWZpbmUgRElMQgkJCTB4MDAyMAorI2RlZmluZSBYRE1BRU4JCQkweDAwMDgKKyNkZWZpbmUgWERJU0FCTEUJCTB4MDAwMQorCisvKioqKioqKioqKioqKioqKioqKioqKiBNY0JTUCBSQ0NSIGJpdCBkZWZpbml0aW9ucyAqKioqKioqKioqKioqKioqKioqKioqKioqLworI2RlZmluZSBSRE1BRU4JCQkweDAwMDgKKyNkZWZpbmUgUkRJU0FCTEUJCTB4MDAwMQorCisvKioqKioqKioqKioqKioqKioqKioqKiBNY0JTUCBTWVNDT05GSUcgYml0IGRlZmluaXRpb25zICoqKioqKioqKioqKioqKioqKioqLworI2RlZmluZSBTT0ZUUlNUCQkJMHgwMDAyCiAKIC8qIHdlIGRvbid0IGRvIG11bHRpY2hhbm5lbCBmb3Igbm93ICovCiBzdHJ1Y3Qgb21hcF9tY2JzcF9yZWdfY2ZnIHsKQEAgLTI2MCw2ICsyNzMsOCBAQAogCU9NQVBfTUNCU1AxID0gMCwKIAlPTUFQX01DQlNQMiwKIAlPTUFQX01DQlNQMywKKwlPTUFQX01DQlNQNCwKKwlPTUFQX01DQlNQNQogfSBvbWFwX21jYnNwX2lkOwogCiB0eXBlZGVmIGludCBfX2JpdHdpc2Ugb21hcF9tY2JzcF9pb190eXBlX3Q7CkBAIC0zMTEsMTIgKzMyNiwxMCBAQAogc3RydWN0IG9tYXBfbWNic3Bfb3BzIHsKIAl2b2lkICgqcmVxdWVzdCkodW5zaWduZWQgaW50KTsKIAl2b2lkICgqZnJlZSkodW5zaWduZWQgaW50KTsKLQlpbnQgKCpjaGVjaykodW5zaWduZWQgaW50KTsKIH07CiAKIHN0cnVjdCBvbWFwX21jYnNwX3BsYXRmb3JtX2RhdGEgewogCXVuc2lnbmVkIGxvbmcgcGh5c19iYXNlOwotCXUzMiB2aXJ0X2Jhc2U7CiAJdTggZG1hX3J4X3N5bmMsIGRtYV90eF9zeW5jOwogCXUxNiByeF9pcnEsIHR4X2lycTsKIAlzdHJ1Y3Qgb21hcF9tY2JzcF9vcHMgKm9wczsKQEAgLTMyNiw3ICszMzksNyBAQAogc3RydWN0IG9tYXBfbWNic3AgewogCXN0cnVjdCBkZXZpY2UgKmRldjsKIAl1bnNpZ25lZCBsb25nIHBoeXNfYmFzZTsKLQl1MzIgaW9fYmFzZTsKKwl2b2lkIF9faW9tZW0gKmlvX2Jhc2U7CiAJdTggaWQ7CiAJdTggZnJlZTsKIAlvbWFwX21jYnNwX3dvcmRfbGVuZ3RoIHJ4X3dvcmRfbGVuZ3RoOwpAQCAtMzU0LDYgKzM2Nyw4IEBACiAJc3RydWN0IG9tYXBfbWNic3BfcGxhdGZvcm1fZGF0YSAqcGRhdGE7CiAJc3RydWN0IGNsayAqY2xrOwogfTsKK2V4dGVybiBzdHJ1Y3Qgb21hcF9tY2JzcCAqKm1jYnNwX3B0cjsKK2V4dGVybiBpbnQgb21hcF9tY2JzcF9jb3VudDsKIAogaW50IG9tYXBfbWNic3BfaW5pdCh2b2lkKTsKIHZvaWQgb21hcF9tY2JzcF9yZWdpc3Rlcl9ib2FyZF9jZmcoc3RydWN0IG9tYXBfbWNic3BfcGxhdGZvcm1fZGF0YSAqY29uZmlnLApAQCAtMzc4LDUgKzM5Myw2IEBACiAvKiBQb2xsZWQgcmVhZC93cml0ZSBmdW5jdGlvbnMgKi8KIGludCBvbWFwX21jYnNwX3BvbGxyZWFkKHVuc2lnbmVkIGludCBpZCwgdTE2ICogYnVmKTsKIGludCBvbWFwX21jYnNwX3BvbGx3cml0ZSh1bnNpZ25lZCBpbnQgaWQsIHUxNiBidWYpOworaW50IG9tYXBfbWNic3Bfc2V0X2lvX3R5cGUodW5zaWduZWQgaW50IGlkLCBvbWFwX21jYnNwX2lvX3R5cGVfdCBpb190eXBlKTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL21lbW9yeS5oIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9tZW1vcnkuaAppbmRleCBhMzI1Y2FmLi5kNDBjYWM2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL21lbW9yeS5oCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvbWVtb3J5LmgKQEAgLTM4LDcgKzM4LDcgQEAKICAqLwogI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDEpCiAjZGVmaW5lIFBIWVNfT0ZGU0VUCQlVTCgweDEwMDAwMDAwKQotI2VsaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMikKKyNlbGlmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDIpIHx8IGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDMpCiAjZGVmaW5lIFBIWVNfT0ZGU0VUCQlVTCgweDgwMDAwMDAwKQogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvbXV4LmggYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL211eC5oCmluZGV4IDYxNGIyYzEuLjZiYmYxNzggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvbXV4LmgKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9tdXguaApAQCAtMTI1LDIwICsxMjUsNjQgQEAKIAkucHVfcGRfdmFsCT0gcHVsbF9tb2RlLAkJCQlcCiB9LAogCisvKiAyNHh4LzM0eHggbXV4IGJpdCBkZWZpbmVzICovCisjZGVmaW5lIE9NQVAyX1BVTExfRU5BCQkoMSA8PCAzKQorI2RlZmluZSBPTUFQMl9QVUxMX1VQCQkoMSA8PCA0KQorI2RlZmluZSBPTUFQMl9BTFRFTEVDVFJJQ0FMU0VMCSgxIDw8IDUpCiAKLSNkZWZpbmUgUFVMTF9ESVNBQkxFRAkwCi0jZGVmaW5lIFBVTExfRU5BQkxFRAkxCisvKiAzNHh4IHNwZWNpZmljIG11eCBiaXQgZGVmaW5lcyAqLworI2RlZmluZSBPTUFQM19JTlBVVF9FTgkJKDEgPDwgOCkKKyNkZWZpbmUgT01BUDNfT0ZGX0VOCQkoMSA8PCA5KQorI2RlZmluZSBPTUFQM19PRkZPVVRfRU4JCSgxIDw8IDEwKQorI2RlZmluZSBPTUFQM19PRkZPVVRfVkFMCSgxIDw8IDExKQorI2RlZmluZSBPTUFQM19PRkZfUFVMTF9FTgkoMSA8PCAxMikKKyNkZWZpbmUgT01BUDNfT0ZGX1BVTExfVVAJKDEgPDwgMTMpCisjZGVmaW5lIE9NQVAzX1dBS0VVUF9FTgkJKDEgPDwgMTQpCiAKLSNkZWZpbmUgUFVMTF9ET1dOCTAKLSNkZWZpbmUgUFVMTF9VUAkJMQorLyogMzR4eCBtdXggbW9kZSBvcHRpb25zIGZvciBlYWNoIHBpbi4gU2VlIFRSTSBmb3Igb3B0aW9ucyAqLworI2RlZmluZQlPTUFQMzRYWF9NVVhfTU9ERTAJMAorI2RlZmluZQlPTUFQMzRYWF9NVVhfTU9ERTEJMQorI2RlZmluZQlPTUFQMzRYWF9NVVhfTU9ERTIJMgorI2RlZmluZQlPTUFQMzRYWF9NVVhfTU9ERTMJMworI2RlZmluZQlPTUFQMzRYWF9NVVhfTU9ERTQJNAorI2RlZmluZQlPTUFQMzRYWF9NVVhfTU9ERTUJNQorI2RlZmluZQlPTUFQMzRYWF9NVVhfTU9ERTYJNgorI2RlZmluZQlPTUFQMzRYWF9NVVhfTU9ERTcJNworCisvKiAzNHh4IGFjdGl2ZSBwaW4gc3RhdGVzICovCisjZGVmaW5lIE9NQVAzNFhYX1BJTl9PVVRQVVQJCTAKKyNkZWZpbmUgT01BUDM0WFhfUElOX0lOUFVUCQlPTUFQM19JTlBVVF9FTgorI2RlZmluZSBPTUFQMzRYWF9QSU5fSU5QVVRfUFVMTFVQCShPTUFQMl9QVUxMX0VOQSB8IE9NQVAzX0lOUFVUX0VOIFwKKwkJCQkJCXwgT01BUDJfUFVMTF9VUCkKKyNkZWZpbmUgT01BUDM0WFhfUElOX0lOUFVUX1BVTExET1dOCShPTUFQMl9QVUxMX0VOQSB8IE9NQVAzX0lOUFVUX0VOKQorCisvKiAzNHh4IG9mZiBtb2RlIHN0YXRlcyAqLworI2RlZmluZSBPTUFQMzRYWF9QSU5fT0ZGX05PTkUgICAgICAgICAgIDAKKyNkZWZpbmUgT01BUDM0WFhfUElOX09GRl9PVVRQVVRfSElHSAkoT01BUDNfT0ZGX0VOIHwgT01BUDNfT0ZGT1VUX0VOIFwKKwkJCQkJCXwgT01BUDNfT0ZGT1VUX1ZBTCkKKyNkZWZpbmUgT01BUDM0WFhfUElOX09GRl9PVVRQVVRfTE9XCShPTUFQM19PRkZfRU4gfCBPTUFQM19PRkZPVVRfRU4pCisjZGVmaW5lIE9NQVAzNFhYX1BJTl9PRkZfSU5QVVRfUFVMTFVQCShPTUFQM19PRkZfRU4gfCBPTUFQM19PRkZfUFVMTF9FTiBcCisJCQkJCQl8IE9NQVAzX09GRl9QVUxMX1VQKQorI2RlZmluZSBPTUFQMzRYWF9QSU5fT0ZGX0lOUFVUX1BVTExET1dOCShPTUFQM19PRkZfRU4gfCBPTUFQM19PRkZfUFVMTF9FTikKKyNkZWZpbmUgT01BUDM0WFhfUElOX09GRl9XQUtFVVBFTkFCTEUJT01BUDNfV0FLRVVQX0VOCisKKyNkZWZpbmUgTVVYX0NGR18zNFhYKGRlc2MsIHJlZ19vZmZzZXQsIG11eF92YWx1ZSkgewkJXAorCS5uYW1lCQk9IGRlc2MsCQkJCQlcCisJLmRlYnVnCQk9IDAsCQkJCQlcCisJLm11eF9yZWcJPSByZWdfb2Zmc2V0LAkJCQlcCisJLm11eF92YWwJPSBtdXhfdmFsdWUJCQkJXAorfSwKIAogc3RydWN0IHBpbl9jb25maWcgewotCWNoYXIgKm5hbWU7Ci0JdW5zaWduZWQgY2hhciBidXN5OwotCXVuc2lnbmVkIGNoYXIgZGVidWc7CisJY2hhciAJCQkqbmFtZTsKKwljb25zdCB1bnNpZ25lZCBpbnQgCW11eF9yZWc7CisJdW5zaWduZWQgY2hhcgkJZGVidWc7CiAKLQljb25zdCBjaGFyICptdXhfcmVnX25hbWU7Ci0JY29uc3QgdW5zaWduZWQgaW50IG11eF9yZWc7CisjaWYJZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMzRYWCkKKwl1MTYJCQltdXhfdmFsOyAvKiBXYWtlLXVwLCBvZmYgbW9kZSwgcHVsbCwgbXV4IG1vZGUgKi8KKyNlbmRpZgorCisjaWYJZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMSkgfHwgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMjRYWCkKIAljb25zdCB1bnNpZ25lZCBjaGFyIG1hc2tfb2Zmc2V0OwogCWNvbnN0IHVuc2lnbmVkIGNoYXIgbWFzazsKIApAQCAtMTUwLDYgKzE5NCwxMiBAQAogCWNvbnN0IGNoYXIgKnB1X3BkX25hbWU7CiAJY29uc3QgdW5zaWduZWQgaW50IHB1X3BkX3JlZzsKIAljb25zdCB1bnNpZ25lZCBjaGFyIHB1X3BkX3ZhbDsKKyNlbmRpZgorCisjaWYJZGVmaW5lZChDT05GSUdfT01BUF9NVVhfREVCVUcpIHx8IGRlZmluZWQoQ09ORklHX09NQVBfTVVYX1dBUk5JTkdTKQorCWNvbnN0IGNoYXIgKm11eF9yZWdfbmFtZTsKKyNlbmRpZgorCiB9OwogCiBlbnVtIG9tYXA3MzBfaW5kZXggewpAQCAtNTkzLDYgKzY0MywxMTQgQEAKIAogfTsKIAorZW51bSBvbWFwMzR4eF9pbmRleCB7CisJLyogMzR4eCBJMkMgKi8KKwlLMjFfMzRYWF9JMkMxX1NDTCwKKwlKMjFfMzRYWF9JMkMxX1NEQSwKKwlBRjE1XzM0WFhfSTJDMl9TQ0wsCisJQUUxNV8zNFhYX0kyQzJfU0RBLAorCUFGMTRfMzRYWF9JMkMzX1NDTCwKKwlBRzE0XzM0WFhfSTJDM19TREEsCisJQUQyNl8zNFhYX0kyQzRfU0NMLAorCUFFMjZfMzRYWF9JMkM0X1NEQSwKKworCS8qIFBIWSAtIEhTVVNCOiAxMi1waW4gVUxQSSBQSFk6IFBvcnQgMSovCisJWThfMzQzMF9VU0IxSFNfUEhZX0NMSywKKwlZOV8zNDMwX1VTQjFIU19QSFlfU1RQLAorCUFBMTRfMzQzMF9VU0IxSFNfUEhZX0RJUiwKKwlBQTExXzM0MzBfVVNCMUhTX1BIWV9OWFQsCisJVzEzXzM0MzBfVVNCMUhTX1BIWV9EQVRBMCwKKwlXMTJfMzQzMF9VU0IxSFNfUEhZX0RBVEExLAorCVcxMV8zNDMwX1VTQjFIU19QSFlfREFUQTIsCisJWTExXzM0MzBfVVNCMUhTX1BIWV9EQVRBMywKKwlXOV8zNDMwX1VTQjFIU19QSFlfREFUQTQsCisJWTEyXzM0MzBfVVNCMUhTX1BIWV9EQVRBNSwKKwlXOF8zNDMwX1VTQjFIU19QSFlfREFUQTYsCisJWTEzXzM0MzBfVVNCMUhTX1BIWV9EQVRBNywKKworCS8qIFBIWSAtIEhTVVNCOiAxMi1waW4gVUxQSSBQSFk6IFBvcnQgMiovCisJQUE4XzM0MzBfVVNCMkhTX1BIWV9DTEssCisJQUExMF8zNDMwX1VTQjJIU19QSFlfU1RQLAorCUFBOV8zNDMwX1VTQjJIU19QSFlfRElSLAorCUFCMTFfMzQzMF9VU0IySFNfUEhZX05YVCwKKwlBQjEwXzM0MzBfVVNCMkhTX1BIWV9EQVRBMCwKKwlBQjlfMzQzMF9VU0IySFNfUEhZX0RBVEExLAorCVczXzM0MzBfVVNCMkhTX1BIWV9EQVRBMiwKKwlUNF8zNDMwX1VTQjJIU19QSFlfREFUQTMsCisJVDNfMzQzMF9VU0IySFNfUEhZX0RBVEE0LAorCVIzXzM0MzBfVVNCMkhTX1BIWV9EQVRBNSwKKwlSNF8zNDMwX1VTQjJIU19QSFlfREFUQTYsCisJVDJfMzQzMF9VU0IySFNfUEhZX0RBVEE3LAorCisKKwkvKiBUTEwgLSBIU1VTQjogMTItcGluIFRMTCBQb3J0IDEqLworCVk4XzM0MzBfVVNCMUhTX1RMTF9DTEssCisJWTlfMzQzMF9VU0IxSFNfVExMX1NUUCwKKwlBQTE0XzM0MzBfVVNCMUhTX1RMTF9ESVIsCisJQUExMV8zNDMwX1VTQjFIU19UTExfTlhULAorCVcxM18zNDMwX1VTQjFIU19UTExfREFUQTAsCisJVzEyXzM0MzBfVVNCMUhTX1RMTF9EQVRBMSwKKwlXMTFfMzQzMF9VU0IxSFNfVExMX0RBVEEyLAorCVkxMV8zNDMwX1VTQjFIU19UTExfREFUQTMsCisJVzlfMzQzMF9VU0IxSFNfVExMX0RBVEE0LAorCVkxMl8zNDMwX1VTQjFIU19UTExfREFUQTUsCisJVzhfMzQzMF9VU0IxSFNfVExMX0RBVEE2LAorCVkxM18zNDMwX1VTQjFIU19UTExfREFUQTcsCisKKwkvKiBUTEwgLSBIU1VTQjogMTItcGluIFRMTCBQb3J0IDIqLworCUFBOF8zNDMwX1VTQjJIU19UTExfQ0xLLAorCUFBMTBfMzQzMF9VU0IySFNfVExMX1NUUCwKKwlBQTlfMzQzMF9VU0IySFNfVExMX0RJUiwKKwlBQjExXzM0MzBfVVNCMkhTX1RMTF9OWFQsCisJQUIxMF8zNDMwX1VTQjJIU19UTExfREFUQTAsCisJQUI5XzM0MzBfVVNCMkhTX1RMTF9EQVRBMSwKKwlXM18zNDMwX1VTQjJIU19UTExfREFUQTIsCisJVDRfMzQzMF9VU0IySFNfVExMX0RBVEEzLAorCVQzXzM0MzBfVVNCMkhTX1RMTF9EQVRBNCwKKwlSM18zNDMwX1VTQjJIU19UTExfREFUQTUsCisJUjRfMzQzMF9VU0IySFNfVExMX0RBVEE2LAorCVQyXzM0MzBfVVNCMkhTX1RMTF9EQVRBNywKKworCS8qIFRMTCAtIEhTVVNCOiAxMi1waW4gVExMIFBvcnQgMyovCisJQUE2XzM0MzBfVVNCM0hTX1RMTF9DTEssCisJQUIzXzM0MzBfVVNCM0hTX1RMTF9TVFAsCisJQUEzXzM0MzBfVVNCM0hTX1RMTF9ESVIsCisJWTNfMzQzMF9VU0IzSFNfVExMX05YVCwKKwlBQTVfMzQzMF9VU0IzSFNfVExMX0RBVEEwLAorCVk0XzM0MzBfVVNCM0hTX1RMTF9EQVRBMSwKKwlZNV8zNDMwX1VTQjNIU19UTExfREFUQTIsCisJVzVfMzQzMF9VU0IzSFNfVExMX0RBVEEzLAorCUFCMTJfMzQzMF9VU0IzSFNfVExMX0RBVEE0LAorCUFCMTNfMzQzMF9VU0IzSFNfVExMX0RBVEE1LAorCUFBMTNfMzQzMF9VU0IzSFNfVExMX0RBVEE2LAorCUFBMTJfMzQzMF9VU0IzSFNfVExMX0RBVEE3LAorCisJLyogUEhZIEZTVVNCOiBGUyBTZXJpYWwgZm9yIFBvcnQgMSAobXVsdGlwbGUgUEhZIG1vZGVzIHN1cHBvcnRlZCkgKi8KKwlBRjEwXzM0MzBfVVNCMUZTX1BIWV9NTTFfUlhEUCwKKwlBRzlfMzQzMF9VU0IxRlNfUEhZX01NMV9SWERNLAorCVcxM18zNDMwX1VTQjFGU19QSFlfTU0xX1JYUkNWLAorCVcxMl8zNDMwX1VTQjFGU19QSFlfTU0xX1RYU0UwLAorCVcxMV8zNDMwX1VTQjFGU19QSFlfTU0xX1RYREFULAorCVkxMV8zNDMwX1VTQjFGU19QSFlfTU0xX1RYRU5fTiwKKworCS8qIFBIWSBGU1VTQjogRlMgU2VyaWFsIGZvciBQb3J0IDIgKG11bHRpcGxlIFBIWSBtb2RlcyBzdXBwb3J0ZWQpICovCisJQUY3XzM0MzBfVVNCMkZTX1BIWV9NTTJfUlhEUCwKKwlBSDdfMzQzMF9VU0IyRlNfUEhZX01NMl9SWERNLAorCUFCMTBfMzQzMF9VU0IyRlNfUEhZX01NMl9SWFJDViwKKwlBQjlfMzQzMF9VU0IyRlNfUEhZX01NMl9UWFNFMCwKKwlXM18zNDMwX1VTQjJGU19QSFlfTU0yX1RYREFULAorCVQ0XzM0MzBfVVNCMkZTX1BIWV9NTTJfVFhFTl9OLAorCisJLyogUEhZIEZTVVNCOiBGUyBTZXJpYWwgZm9yIFBvcnQgMyAobXVsdGlwbGUgUEhZIG1vZGVzIHN1cHBvcnRlZCkgKi8KKwlBSDNfMzQzMF9VU0IzRlNfUEhZX01NM19SWERQLAorCUFFM18zNDMwX1VTQjNGU19QSFlfTU0zX1JYRE0sCisJQUQxXzM0MzBfVVNCM0ZTX1BIWV9NTTNfUlhSQ1YsCisJQUUxXzM0MzBfVVNCM0ZTX1BIWV9NTTNfVFhTRTAsCisJQUQyXzM0MzBfVVNCM0ZTX1BIWV9NTTNfVFhEQVQsCisJQUMxXzM0MzBfVVNCM0ZTX1BIWV9NTTNfVFhFTl9OLAorCit9OworCiBzdHJ1Y3Qgb21hcF9tdXhfY2ZnIHsKIAlzdHJ1Y3QgcGluX2NvbmZpZwkqcGluczsKIAl1bnNpZ25lZCBsb25nCQlzaXplOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9vbWFwMTUxMC5oIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9vbWFwMTUxMC5oCmluZGV4IDUwNWEzOGEuLmQyNDAwNDYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvb21hcDE1MTAuaAorKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL29tYXAxNTEwLmgKQEAgLTQ0LDUgKzQ0LDcgQEAKICNkZWZpbmUgT01BUDE1MTBfRFNQUkVHX1NJWkUJU1pfMTI4SwogI2RlZmluZSBPTUFQMTUxMF9EU1BSRUdfU1RBUlQJMHhFMTAwMDAwMAogCisjZGVmaW5lIE9NQVAxNTEwX0RTUF9NTVVfQkFTRQkoMHhmZmZlZDIwMCkKKwogI2VuZGlmIC8qICBfX0FTTV9BUkNIX09NQVAxNVhYX0ggKi8KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9vbWFwMTZ4eC5oIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9vbWFwMTZ4eC5oCmluZGV4IGM2YzkzYWYuLjBlNjliNTAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvb21hcDE2eHguaAorKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL29tYXAxNnh4LmgKQEAgLTQ0LDYgKzQ0LDExIEBACiAjZGVmaW5lIE9NQVAxNlhYX0RTUFJFR19TSVpFCVNaXzEyOEsKICNkZWZpbmUgT01BUDE2WFhfRFNQUkVHX1NUQVJUCTB4RTEwMDAwMDAKIAorI2RlZmluZSBPTUFQMTZYWF9TRUNfQkFTRQkweEZGRkU0MDAwCisjZGVmaW5lIE9NQVAxNlhYX1NFQ19ERVMJKE9NQVAxNlhYX1NFQ19CQVNFICsgMHgwMDAwKQorI2RlZmluZSBPTUFQMTZYWF9TRUNfU0hBMU1ENQkoT01BUDE2WFhfU0VDX0JBU0UgKyAweDA4MDApCisjZGVmaW5lIE9NQVAxNlhYX1NFQ19STkcJKE9NQVAxNlhYX1NFQ19CQVNFICsgMHgxMDAwKQorCiAvKgogICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKiBJbnRlcnJ1cHRzCkBAIC0xOTAsNyArMTk1LDcgQEAKICNkZWZpbmUgV1NQUl9ESVNBQkxFXzAgICAgICAgICAoMHgwMDAwYWFhYSkKICNkZWZpbmUgV1NQUl9ESVNBQkxFXzEgICAgICAgICAoMHgwMDAwNTU1NSkKIAotLyogTWFpbGJveCAqLworI2RlZmluZSBPTUFQMTZYWF9EU1BfTU1VX0JBU0UJKDB4ZmZmZWQyMDApCiAjZGVmaW5lIE9NQVAxNlhYX01BSUxCT1hfQkFTRQkoMHhmZmZjZjAwMCkKIAogI2VuZGlmIC8qICBfX0FTTV9BUkNIX09NQVAxNlhYX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvb21hcDI0eHguaCBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvb21hcDI0eHguaAppbmRleCBiYjgzMTlkLi4yNDMzNWQ0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL29tYXAyNHh4LmgKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9vbWFwMjR4eC5oCkBAIC0zOSw3ICszOSw2IEBACiAvKiBpbnRlcnJ1cHQgY29udHJvbGxlciAqLwogI2RlZmluZSBPTUFQMjRYWF9JQ19CQVNFCShMNF8yNFhYX0JBU0UgKyAweGZlMDAwKQogI2RlZmluZSBPTUFQMjRYWF9JVkFfSU5UQ19CQVNFCTB4NDAwMDAwMDAKLSNkZWZpbmUgSVJRX1NJUl9JUlEJCTB4MDA0MAogCiAjZGVmaW5lIE9NQVAyNDIwX0NUUkxfQkFTRQlMNF8yNFhYX0JBU0UKICNkZWZpbmUgT01BUDI0MjBfMzJLU1lOQ1RfQkFTRQkoTDRfMjRYWF9CQVNFICsgMHg0MDAwKQpAQCAtNDgsNiArNDcsNyBAQAogI2RlZmluZSBPTUFQMjQyMF9QUk1fQkFTRQlPTUFQMjQyMF9DTV9CQVNFCiAjZGVmaW5lIE9NQVAyNDIwX1NEUkNfQkFTRQkoTDNfMjRYWF9CQVNFICsgMHg5MDAwKQogI2RlZmluZSBPTUFQMjQyMF9TTVNfQkFTRQkweDY4MDA4MDAwCisjZGVmaW5lIE9NQVAyNDIwX0dQTUNfQkFTRQkweDY4MDBhMDAwCiAKICNkZWZpbmUgT01BUDI0MzBfMzJLU1lOQ1RfQkFTRQkoTDRfV0tfMjQzWF9CQVNFICsgMHgyMDAwMCkKICNkZWZpbmUgT01BUDI0MzBfUFJDTV9CQVNFCShMNF9XS18yNDNYX0JBU0UgKyAweDYwMDApCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL29tYXBmYi5oIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9vbWFwZmIuaAppbmRleCBjYWUwMzdkLi5lYzY3ZmI0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL29tYXBmYi5oCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvb21hcGZiLmgKQEAgLTYyLDYgKzYyLDcgQEAKICNkZWZpbmUgT01BUEZCX0NBUFNfV0lORE9XX1BJWEVMX0RPVUJMRQkweDAwMDEwMDAwCiAjZGVmaW5lIE9NQVBGQl9DQVBTX1dJTkRPV19TQ0FMRQkweDAwMDIwMDAwCiAjZGVmaW5lIE9NQVBGQl9DQVBTX1dJTkRPV19PVkVSTEFZCTB4MDAwNDAwMDAKKyNkZWZpbmUgT01BUEZCX0NBUFNfV0lORE9XX1JPVEFURQkweDAwMDgwMDAwCiAjZGVmaW5lIE9NQVBGQl9DQVBTX1NFVF9CQUNLTElHSFQJMHgwMTAwMDAwMAogCiAvKiBWYWx1ZXMgZnJvbSBEU1AgbXVzdCBtYXAgdG8gbG93ZXIgMTYtYml0cyAqLwpAQCAtMzA1LDYgKzMwNiw3IEBACiAJCQkJCSAgIGludCBzY3JlZW5fd2lkdGgsCiAJCQkJCSAgIGludCBwb3NfeCwgaW50IHBvc195LCBpbnQgd2lkdGgsCiAJCQkJCSAgIGludCBoZWlnaHQsIGludCBjb2xvcl9tb2RlKTsKKwlpbnQJCSgqc2V0X3JvdGF0ZSkJICAoaW50IGFuZ2xlKTsKIAlpbnQJCSgqc2V0dXBfbWVtKQkgIChpbnQgcGxhbmUsIHNpemVfdCBzaXplLAogCQkJCQkgICBpbnQgbWVtX3R5cGUsIHVuc2lnbmVkIGxvbmcgKnBhZGRyKTsKIAlpbnQJCSgqbW1hcCkJCSAgKHN0cnVjdCBmYl9pbmZvICppbmZvLApAQCAtMzc0LDYgKzM3Niw3IEBACiBleHRlcm4gc3RydWN0IGxjZF9jdHJsIG9tYXAyX2Rpc3BfY3RybDsKICNlbmRpZgogCitleHRlcm4gdm9pZCBvbWFwZmJfcmVzZXJ2ZV9zZHJhbSh2b2lkKTsKIGV4dGVybiB2b2lkIG9tYXBmYl9yZWdpc3Rlcl9wYW5lbChzdHJ1Y3QgbGNkX3BhbmVsICpwYW5lbCk7CiBleHRlcm4gdm9pZCBvbWFwZmJfd3JpdGVfZmlyc3RfcGl4ZWwoc3RydWN0IG9tYXBmYl9kZXZpY2UgKmZiZGV2LCB1MTYgcGl4dmFsKTsKIGV4dGVybiB2b2lkIG9tYXBmYl9ub3RpZnlfY2xpZW50cyhzdHJ1Y3Qgb21hcGZiX2RldmljZSAqZmJkZXYsCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL29uZW5hbmQuaCBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvb25lbmFuZC5oCmluZGV4IGQ1N2YyMDIuLjQ2NDlkMzAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvb25lbmFuZC5oCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvb25lbmFuZC5oCkBAIC0xNiw2ICsxNiwxMCBAQAogCWludAkJCWdwaW9faXJxOwogCXN0cnVjdCBtdGRfcGFydGl0aW9uCSpwYXJ0czsKIAlpbnQJCQlucl9wYXJ0czsKLQlpbnQgICAgICAgICAgICAgICAgICAgICAoKm9uZW5hbmRfc2V0dXApKHZvaWQgX19pb21lbSAqKTsKKwlpbnQgICAgICAgICAgICAgICAgICAgICAoKm9uZW5hbmRfc2V0dXApKHZvaWQgX19pb21lbSAqLCBpbnQgZnJlcSk7CiAJaW50CQkJZG1hX2NoYW5uZWw7CiB9OworCitpbnQgb21hcDJfb25lbmFuZF9yZXBoYXNlKHZvaWQpOworCisjZGVmaW5lIE9ORU5BTkRfTUFYX1BBUlRJVElPTlMgOApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9wbS5oIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9wbS5oCmluZGV4IGJmYTA5MzIuLjc2OGViNmUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvcG0uaAorKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL3BtLmgKQEAgLTM5LDExICszOSwxMSBAQAogICogUmVnaXN0ZXIgYW5kIG9mZnNldCBkZWZpbml0aW9ucyB0byBiZSB1c2VkIGluIFBNIGFzc2VtYmxlciBjb2RlCiAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKi8KLSNkZWZpbmUgQ0xLR0VOX1JFR19BU01fQkFTRQkJaW9fcDJ2KDB4ZmZmZWNlMDApCisjZGVmaW5lIENMS0dFTl9SRUdfQVNNX0JBU0UJCUlPX0FERFJFU1MoMHhmZmZlY2UwMCkKICNkZWZpbmUgQVJNX0lETEVDVDFfQVNNX09GRlNFVAkJMHgwNAogI2RlZmluZSBBUk1fSURMRUNUMl9BU01fT0ZGU0VUCQkweDA4CiAKLSNkZWZpbmUgVENNSUZfQVNNX0JBU0UJCQlpb19wMnYoMHhmZmZlY2MwMCkKKyNkZWZpbmUgVENNSUZfQVNNX0JBU0UJCQlJT19BRERSRVNTKDB4ZmZmZWNjMDApCiAjZGVmaW5lIEVNSUZTX0NPTkZJR19BU01fT0ZGU0VUCQkweDBjCiAjZGVmaW5lIEVNSUZGX1NEUkFNX0NPTkZJR19BU01fT0ZGU0VUCTB4MjAKIApAQCAtMTM1LDcgKzEzNSw4IEBACiBleHRlcm4gdm9pZCBvbWFwNzMwX2NwdV9zdXNwZW5kKHVuc2lnbmVkIHNob3J0LCB1bnNpZ25lZCBzaG9ydCk7CiBleHRlcm4gdm9pZCBvbWFwMTUxMF9jcHVfc3VzcGVuZCh1bnNpZ25lZCBzaG9ydCwgdW5zaWduZWQgc2hvcnQpOwogZXh0ZXJuIHZvaWQgb21hcDE2MTBfY3B1X3N1c3BlbmQodW5zaWduZWQgc2hvcnQsIHVuc2lnbmVkIHNob3J0KTsKLWV4dGVybiB2b2lkIG9tYXAyNHh4X2NwdV9zdXNwZW5kKHUzMiBkbGxfY3RybCwgdTMyIGNwdV9yZXZpc2lvbik7CitleHRlcm4gdm9pZCBvbWFwMjR4eF9jcHVfc3VzcGVuZCh1MzIgZGxsX2N0cmwsIHZvaWQgX19pb21lbSAqc2RyY19kbGxhX2N0cmwsCisJCQkJCXZvaWQgX19pb21lbSAqc2RyY19wb3dlcik7CiBleHRlcm4gdm9pZCBvbWFwNzMwX2lkbGVfbG9vcF9zdXNwZW5kKHZvaWQpOwogZXh0ZXJuIHZvaWQgb21hcDE1MTBfaWRsZV9sb29wX3N1c3BlbmQodm9pZCk7CiBleHRlcm4gdm9pZCBvbWFwMTYxMF9pZGxlX2xvb3Bfc3VzcGVuZCh2b2lkKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvcG93ZXJkb21haW4uaCBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvcG93ZXJkb21haW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yODA2YTljCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9wb3dlcmRvbWFpbi5oCkBAIC0wLDAgKzEsMTY2IEBACisvKgorICogT01BUDIvMyBwb3dlcmRvbWFpbiBjb250cm9sCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA3LTggVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwNy04IE5va2lhIENvcnBvcmF0aW9uCisgKgorICogV3JpdHRlbiBieSBQYXVsIFdhbG1zbGV5CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaWZuZGVmIEFTTV9BUk1fQVJDSF9PTUFQX1BPV0VSRE9NQUlOCisjZGVmaW5lIEFTTV9BUk1fQVJDSF9PTUFQX1BPV0VSRE9NQUlOCisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKworI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KKworI2luY2x1ZGUgPG1hY2gvY3B1Lmg+CisKKworLyogUG93ZXJkb21haW4gYmFzaWMgcG93ZXIgc3RhdGVzICovCisjZGVmaW5lIFBXUkRNX1BPV0VSX09GRgkJMHgwCisjZGVmaW5lIFBXUkRNX1BPV0VSX1JFVAkJMHgxCisjZGVmaW5lIFBXUkRNX1BPV0VSX0lOQUNUSVZFCTB4MgorI2RlZmluZSBQV1JETV9QT1dFUl9PTgkJMHgzCisKKy8qIFBvd2VyZG9tYWluIGFsbG93YWJsZSBzdGF0ZSBiaXRmaWVsZHMgKi8KKyNkZWZpbmUgUFdSU1RTX09GRl9PTgkJKCgxIDw8IFBXUkRNX1BPV0VSX09GRikgfCBcCisJCQkJICgxIDw8IFBXUkRNX1BPV0VSX09OKSkKKworI2RlZmluZSBQV1JTVFNfT0ZGX1JFVAkJKCgxIDw8IFBXUkRNX1BPV0VSX09GRikgfCBcCisJCQkJICgxIDw8IFBXUkRNX1BPV0VSX1JFVCkpCisKKyNkZWZpbmUgUFdSU1RTX09GRl9SRVRfT04JKFBXUlNUU19PRkZfUkVUIHwgKDEgPDwgUFdSRE1fUE9XRVJfT04pKQorCisKKy8qIFBvd2VyZG9tYWluIGZsYWdzICovCisjZGVmaW5lIFBXUkRNX0hBU19IRFdSX1NBUgkoMSA8PCAwKSAvKiBoYXJkd2FyZSBzYXZlLWFuZC1yZXN0b3JlIHN1cHBvcnQgKi8KKworCisvKgorICogTnVtYmVyIG9mIG1lbW9yeSBiYW5rcyB0aGF0IGFyZSBwb3dlci1jb250cm9sbGFibGUuCU9uIE9NQVAzNDMwLCB0aGUKKyAqIG1heGltdW0gaXMgNC4KKyAqLworI2RlZmluZSBQV1JETV9NQVhfTUVNX0JBTktTCTQKKworLyoKKyAqIE1heGltdW0gbnVtYmVyIG9mIGNsb2NrZG9tYWlucyB0aGF0IGNhbiBiZSBhc3NvY2lhdGVkIHdpdGggYSBwb3dlcmRvbWFpbi4KKyAqIENPUkUgcG93ZXJkb21haW4gaXMgcHJvYmFibHkgdGhlIHdvcnN0IGNhc2UuCisgKi8KKyNkZWZpbmUgUFdSRE1fTUFYX0NMS0RNUwkzCisKKy8qIFhYWCBBIGNvbXBsZXRlbHkgYXJiaXRyYXJ5IG51bWJlci4gV2hhdCBpcyByZWFzb25hYmxlIGhlcmU/ICovCisjZGVmaW5lIFBXUkRNX1RSQU5TSVRJT05fQkFJTE9VVCAxMDAwMDAKKworc3RydWN0IGNsb2NrZG9tYWluOworc3RydWN0IHBvd2VyZG9tYWluOworCisvKiBFbmNvZGVzIGRlcGVuZGVuY2llcyBiZXR3ZWVuIHBvd2VyZG9tYWlucyAtIHN0YXRpY2FsbHkgZGVmaW5lZCAqLworc3RydWN0IHB3cmRtX2RlcCB7CisKKwkvKiBQb3dlcmRvbWFpbiBuYW1lICovCisJY29uc3QgY2hhciAqcHdyZG1fbmFtZTsKKworCS8qIFBvd2VyZG9tYWluIHBvaW50ZXIgLSByZXNvbHZlZCBieSB0aGUgcG93ZXJkb21haW4gY29kZSAqLworCXN0cnVjdCBwb3dlcmRvbWFpbiAqcHdyZG07CisKKwkvKiBGbGFncyB0byBtYXJrIE9NQVAgY2hpcCByZXN0cmljdGlvbnMsIGV0Yy4gKi8KKwljb25zdCBzdHJ1Y3Qgb21hcF9jaGlwX2lkIG9tYXBfY2hpcDsKKworfTsKKworc3RydWN0IHBvd2VyZG9tYWluIHsKKworCS8qIFBvd2VyZG9tYWluIG5hbWUgKi8KKwljb25zdCBjaGFyICpuYW1lOworCisJLyogdGhlIGFkZHJlc3Mgb2Zmc2V0IGZyb20gQ01fQkFTRS9QUk1fQkFTRSAqLworCWNvbnN0IHMxNiBwcmNtX29mZnM7CisKKwkvKiBVc2VkIHRvIHJlcHJlc2VudCB0aGUgT01BUCBjaGlwIHR5cGVzIGNvbnRhaW5pbmcgdGhpcyBwd3JkbSAqLworCWNvbnN0IHN0cnVjdCBvbWFwX2NoaXBfaWQgb21hcF9jaGlwOworCisJLyogQml0IHNoaWZ0IG9mIHRoaXMgcG93ZXJkb21haW4ncyBQTV9XS0RFUC9DTV9TTEVFUERFUCBiaXQgKi8KKwljb25zdCB1OCBkZXBfYml0OworCisJLyogUG93ZXJkb21haW5zIHRoYXQgY2FuIGJlIHRvbGQgdG8gd2FrZSB0aGlzIHBvd2VyZG9tYWluIHVwICovCisJc3RydWN0IHB3cmRtX2RlcCAqd2tkZXBfc3JjczsKKworCS8qIFBvd2VyZG9tYWlucyB0aGF0IGNhbiBiZSB0b2xkIHRvIGtlZXAgdGhpcyBwd3JkbSBmcm9tIGluYWN0aXZpdHkgKi8KKwlzdHJ1Y3QgcHdyZG1fZGVwICpzbGVlcGRlcF9zcmNzOworCisJLyogUG9zc2libGUgcG93ZXJkb21haW4gcG93ZXIgc3RhdGVzICovCisJY29uc3QgdTggcHdyc3RzOworCisJLyogUG9zc2libGUgbG9naWMgcG93ZXIgc3RhdGVzIHdoZW4gcHdyZG0gaW4gUkVURU5USU9OICovCisJY29uc3QgdTggcHdyc3RzX2xvZ2ljX3JldDsKKworCS8qIFBvd2VyZG9tYWluIGZsYWdzICovCisJY29uc3QgdTggZmxhZ3M7CisKKwkvKiBOdW1iZXIgb2Ygc29mdHdhcmUtY29udHJvbGxhYmxlIG1lbW9yeSBiYW5rcyBpbiB0aGlzIHBvd2VyZG9tYWluICovCisJY29uc3QgdTggYmFua3M7CisKKwkvKiBQb3NzaWJsZSBtZW1vcnkgYmFuayBwd3JzdGF0ZXMgd2hlbiBwd3JkbSBpbiBSRVRFTlRJT04gKi8KKwljb25zdCB1OCBwd3JzdHNfbWVtX3JldFtQV1JETV9NQVhfTUVNX0JBTktTXTsKKworCS8qIFBvc3NpYmxlIG1lbW9yeSBiYW5rIHB3cnN0YXRlcyB3aGVuIHB3cmRtIGlzIE9OICovCisJY29uc3QgdTggcHdyc3RzX21lbV9vbltQV1JETV9NQVhfTUVNX0JBTktTXTsKKworCS8qIENsb2NrZG9tYWlucyBpbiB0aGlzIHBvd2VyZG9tYWluICovCisJc3RydWN0IGNsb2NrZG9tYWluICpwd3JkbV9jbGtkbXNbUFdSRE1fTUFYX0NMS0RNU107CisKKwlzdHJ1Y3QgbGlzdF9oZWFkIG5vZGU7CisKK307CisKKwordm9pZCBwd3JkbV9pbml0KHN0cnVjdCBwb3dlcmRvbWFpbiAqKnB3cmRtX2xpc3QpOworCitpbnQgcHdyZG1fcmVnaXN0ZXIoc3RydWN0IHBvd2VyZG9tYWluICpwd3JkbSk7CitpbnQgcHdyZG1fdW5yZWdpc3RlcihzdHJ1Y3QgcG93ZXJkb21haW4gKnB3cmRtKTsKK3N0cnVjdCBwb3dlcmRvbWFpbiAqcHdyZG1fbG9va3VwKGNvbnN0IGNoYXIgKm5hbWUpOworCitpbnQgcHdyZG1fZm9yX2VhY2goaW50ICgqZm4pKHN0cnVjdCBwb3dlcmRvbWFpbiAqcHdyZG0pKTsKKworaW50IHB3cmRtX2FkZF9jbGtkbShzdHJ1Y3QgcG93ZXJkb21haW4gKnB3cmRtLCBzdHJ1Y3QgY2xvY2tkb21haW4gKmNsa2RtKTsKK2ludCBwd3JkbV9kZWxfY2xrZG0oc3RydWN0IHBvd2VyZG9tYWluICpwd3JkbSwgc3RydWN0IGNsb2NrZG9tYWluICpjbGtkbSk7CitpbnQgcHdyZG1fZm9yX2VhY2hfY2xrZG0oc3RydWN0IHBvd2VyZG9tYWluICpwd3JkbSwKKwkJCSBpbnQgKCpmbikoc3RydWN0IHBvd2VyZG9tYWluICpwd3JkbSwKKwkJCQkgICBzdHJ1Y3QgY2xvY2tkb21haW4gKmNsa2RtKSk7CisKK2ludCBwd3JkbV9hZGRfd2tkZXAoc3RydWN0IHBvd2VyZG9tYWluICpwd3JkbTEsIHN0cnVjdCBwb3dlcmRvbWFpbiAqcHdyZG0yKTsKK2ludCBwd3JkbV9kZWxfd2tkZXAoc3RydWN0IHBvd2VyZG9tYWluICpwd3JkbTEsIHN0cnVjdCBwb3dlcmRvbWFpbiAqcHdyZG0yKTsKK2ludCBwd3JkbV9yZWFkX3drZGVwKHN0cnVjdCBwb3dlcmRvbWFpbiAqcHdyZG0xLCBzdHJ1Y3QgcG93ZXJkb21haW4gKnB3cmRtMik7CitpbnQgcHdyZG1fYWRkX3NsZWVwZGVwKHN0cnVjdCBwb3dlcmRvbWFpbiAqcHdyZG0xLCBzdHJ1Y3QgcG93ZXJkb21haW4gKnB3cmRtMik7CitpbnQgcHdyZG1fZGVsX3NsZWVwZGVwKHN0cnVjdCBwb3dlcmRvbWFpbiAqcHdyZG0xLCBzdHJ1Y3QgcG93ZXJkb21haW4gKnB3cmRtMik7CitpbnQgcHdyZG1fcmVhZF9zbGVlcGRlcChzdHJ1Y3QgcG93ZXJkb21haW4gKnB3cmRtMSwgc3RydWN0IHBvd2VyZG9tYWluICpwd3JkbTIpOworCitpbnQgcHdyZG1fZ2V0X21lbV9iYW5rX2NvdW50KHN0cnVjdCBwb3dlcmRvbWFpbiAqcHdyZG0pOworCitpbnQgcHdyZG1fc2V0X25leHRfcHdyc3Qoc3RydWN0IHBvd2VyZG9tYWluICpwd3JkbSwgdTggcHdyc3QpOworaW50IHB3cmRtX3JlYWRfbmV4dF9wd3JzdChzdHJ1Y3QgcG93ZXJkb21haW4gKnB3cmRtKTsKK2ludCBwd3JkbV9yZWFkX3ByZXZfcHdyc3Qoc3RydWN0IHBvd2VyZG9tYWluICpwd3JkbSk7CitpbnQgcHdyZG1fY2xlYXJfYWxsX3ByZXZfcHdyc3Qoc3RydWN0IHBvd2VyZG9tYWluICpwd3JkbSk7CisKK2ludCBwd3JkbV9zZXRfbG9naWNfcmV0c3Qoc3RydWN0IHBvd2VyZG9tYWluICpwd3JkbSwgdTggcHdyc3QpOworaW50IHB3cmRtX3NldF9tZW1fb25zdChzdHJ1Y3QgcG93ZXJkb21haW4gKnB3cmRtLCB1OCBiYW5rLCB1OCBwd3JzdCk7CitpbnQgcHdyZG1fc2V0X21lbV9yZXRzdChzdHJ1Y3QgcG93ZXJkb21haW4gKnB3cmRtLCB1OCBiYW5rLCB1OCBwd3JzdCk7CisKK2ludCBwd3JkbV9yZWFkX2xvZ2ljX3B3cnN0KHN0cnVjdCBwb3dlcmRvbWFpbiAqcHdyZG0pOworaW50IHB3cmRtX3JlYWRfcHJldl9sb2dpY19wd3JzdChzdHJ1Y3QgcG93ZXJkb21haW4gKnB3cmRtKTsKK2ludCBwd3JkbV9yZWFkX21lbV9wd3JzdChzdHJ1Y3QgcG93ZXJkb21haW4gKnB3cmRtLCB1OCBiYW5rKTsKK2ludCBwd3JkbV9yZWFkX3ByZXZfbWVtX3B3cnN0KHN0cnVjdCBwb3dlcmRvbWFpbiAqcHdyZG0sIHU4IGJhbmspOworCitpbnQgcHdyZG1fZW5hYmxlX2hkd3Jfc2FyKHN0cnVjdCBwb3dlcmRvbWFpbiAqcHdyZG0pOworaW50IHB3cmRtX2Rpc2FibGVfaGR3cl9zYXIoc3RydWN0IHBvd2VyZG9tYWluICpwd3JkbSk7Citib29sIHB3cmRtX2hhc19oZHdyX3NhcihzdHJ1Y3QgcG93ZXJkb21haW4gKnB3cmRtKTsKKworaW50IHB3cmRtX3dhaXRfdHJhbnNpdGlvbihzdHJ1Y3QgcG93ZXJkb21haW4gKnB3cmRtKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL3NkcmMuaCBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvc2RyYy5oCmluZGV4IDc4N2I3YWMuLmE5OGM2YzMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvc2RyYy5oCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvc2RyYy5oCkBAIC0yNSw2ICsyNSw4IEBACiAjZGVmaW5lIFNEUkNfRExMQl9TVEFUVVMJMHgwNkMKICNkZWZpbmUgU0RSQ19QT1dFUgkJMHgwNzAKICNkZWZpbmUgU0RSQ19NUl8wCQkweDA4NAorI2RlZmluZSBTRFJDX0FDVElNX0NUUkxfQV8wCTB4MDljCisjZGVmaW5lIFNEUkNfQUNUSU1fQ1RSTF9CXzAJMHgwYTAKICNkZWZpbmUgU0RSQ19SRlJfQ1RSTF8wCQkweDBhNAogCiAvKgpAQCAtNjMsOSArNjUsOSBAQAogICovCiAKIAotI2RlZmluZSBPTUFQMjQyWF9TTVNfUkVHQUREUihyZWcpCSh2b2lkIF9faW9tZW0gKilJT19BRERSRVNTKE9NQVAyNDIwX1NNU19CQVNFICsgcmVnKQotI2RlZmluZSBPTUFQMjQzWF9TTVNfUkVHQUREUihyZWcpCSh2b2lkIF9faW9tZW0gKilJT19BRERSRVNTKE9NQVAyNDNYX1NNU19CQVNFICsgcmVnKQotI2RlZmluZSBPTUFQMzQzWF9TTVNfUkVHQUREUihyZWcpCSh2b2lkIF9faW9tZW0gKilJT19BRERSRVNTKE9NQVAzNDNYX1NNU19CQVNFICsgcmVnKQorI2RlZmluZSBPTUFQMjQyWF9TTVNfUkVHQUREUihyZWcpCUlPX0FERFJFU1MoT01BUDI0MjBfU01TX0JBU0UgKyByZWcpCisjZGVmaW5lIE9NQVAyNDNYX1NNU19SRUdBRERSKHJlZykJSU9fQUREUkVTUyhPTUFQMjQzWF9TTVNfQkFTRSArIHJlZykKKyNkZWZpbmUgT01BUDM0M1hfU01TX1JFR0FERFIocmVnKQlJT19BRERSRVNTKE9NQVAzNDNYX1NNU19CQVNFICsgcmVnKQogCiAvKiBTTVMgcmVnaXN0ZXIgb2Zmc2V0cyAtIHJlYWQvd3JpdGUgd2l0aCBzbXNfe3JlYWQsd3JpdGV9X3JlZygpICovCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvc2VyaWFsLmggYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL3NlcmlhbC5oCmluZGV4IGNjNmJmYTUuLjhhNjc2YTAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvc2VyaWFsLmgKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9zZXJpYWwuaApAQCAtMjAsMTggKzIwLDI0IEBACiAjZGVmaW5lIE9NQVBfVUFSVDFfQkFTRQkJMHg0ODA2YTAwMAogI2RlZmluZSBPTUFQX1VBUlQyX0JBU0UJCTB4NDgwNmMwMDAKICNkZWZpbmUgT01BUF9VQVJUM19CQVNFCQkweDQ4MDZlMDAwCisjZWxpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAzKQorLyogT01BUDMgc2VyaWFsIHBvcnRzICovCisjZGVmaW5lIE9NQVBfVUFSVDFfQkFTRQkJMHg0ODA2YTAwMAorI2RlZmluZSBPTUFQX1VBUlQyX0JBU0UJCTB4NDgwNmMwMDAKKyNkZWZpbmUgT01BUF9VQVJUM19CQVNFCQkweDQ5MDIwMDAwCiAjZW5kaWYKIAogI2RlZmluZSBPTUFQX01BWF9OUl9QT1JUUwkzCiAjZGVmaW5lIE9NQVAxNTEwX0JBU0VfQkFVRAkoMTIwMDAwMDAvMTYpCiAjZGVmaW5lIE9NQVAxNlhYX0JBU0VfQkFVRAkoNDgwMDAwMDAvMTYpCisjZGVmaW5lIE9NQVAyNFhYX0JBU0VfQkFVRAkoNDgwMDAwMDAvMTYpCiAKLSNkZWZpbmUgaXNfb21hcF9wb3J0KHApCSh7aW50IF9fcmV0ID0gMDsJCQlcCi0JCQlpZiAocCA9PSBJT19BRERSRVNTKE9NQVBfVUFSVDFfQkFTRSkgfHwJXAotCQkJICAgIHAgPT0gSU9fQUREUkVTUyhPTUFQX1VBUlQyX0JBU0UpIHx8CVwKLQkJCSAgICBwID09IElPX0FERFJFU1MoT01BUF9VQVJUM19CQVNFKSkJXAotCQkJCV9fcmV0ID0gMTsJCQlcCi0JCQlfX3JldDsJCQkJCVwKKyNkZWZpbmUgaXNfb21hcF9wb3J0KHB0KQkoe2ludCBfX3JldCA9IDA7CQkJXAorCQkJaWYgKChwdCktPnBvcnQubWFwYmFzZSA9PSBPTUFQX1VBUlQxX0JBU0UgfHwJXAorCQkJICAgIChwdCktPnBvcnQubWFwYmFzZSA9PSBPTUFQX1VBUlQyX0JBU0UgfHwJXAorCQkJICAgIChwdCktPnBvcnQubWFwYmFzZSA9PSBPTUFQX1VBUlQzX0JBU0UpCVwKKwkJCQlfX3JldCA9IDE7CQkJCVwKKwkJCV9fcmV0OwkJCQkJCVwKIAkJCX0pCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9zcmFtLmggYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL3NyYW0uaAppbmRleCBlMDkzMjM0Li5hYjM1ZDYyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL3NyYW0uaAorKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL3NyYW0uaApAQCAtMjEsNiArMjEsMTAgQEAKIAkJCQkgICAgICB1MzIgbWVtX3R5cGUpOwogZXh0ZXJuIHUzMiBvbWFwMl9zZXRfcHJjbSh1MzIgZHBsbF9jdHJsX3ZhbCwgdTMyIHNkcmNfcmZyX3ZhbCwgaW50IGJ5cGFzcyk7CiAKK2V4dGVybiB1MzIgb21hcDNfY29uZmlndXJlX2NvcmVfZHBsbCh1MzIgc2RyY19yZnJfY3RybCwKKwkJCQkgICAgIHUzMiBzZHJjX2FjdGltX2N0cmxhLAorCQkJCSAgICAgdTMyIHNkcmNfYWN0aW1fY3RybGIsIHUzMiBtMik7CisKIC8qIERvIG5vdCB1c2UgdGhlc2UgKi8KIGV4dGVybiB2b2lkIG9tYXAxX3NyYW1fcmVwcm9ncmFtX2Nsb2NrKHUzMiBja2N0bCwgdTMyIGRwbGxjdGwpOwogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgb21hcDFfc3JhbV9yZXByb2dyYW1fY2xvY2tfc3o7CkBAIC01Myw0ICs1NywxMCBAQAogCQkJCQkJdTMyIG1lbV90eXBlKTsKIGV4dGVybiB1bnNpZ25lZCBsb25nIG9tYXAyNDN4X3NyYW1fcmVwcm9ncmFtX3NkcmNfc3o7CiAKKworZXh0ZXJuIHUzMiBvbWFwM19zcmFtX2NvbmZpZ3VyZV9jb3JlX2RwbGwodTMyIHNkcmNfcmZyX2N0cmwsCisJCQkJCSAgdTMyIHNkcmNfYWN0aW1fY3RybGEsCisJCQkJCSAgdTMyIHNkcmNfYWN0aW1fY3RybGIsIHUzMiBtMik7CitleHRlcm4gdW5zaWduZWQgbG9uZyBvbWFwM19zcmFtX2NvbmZpZ3VyZV9jb3JlX2RwbGxfc3o7CisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9zeXN0ZW0uaCBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvc3lzdGVtLmgKaW5kZXggMDZhMjhjNy4uMDY5MjNmMiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9zeXN0ZW0uaAorKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL3N5c3RlbS5oCkBAIC00MCw3ICs0MCw3IEBACiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBhcmNoX3Jlc2V0KGNoYXIgbW9kZSkKIHsKLQlpZiAoIWNwdV9pc19vbWFwMjR4eCgpKQorCWlmICghY3B1X2NsYXNzX2lzX29tYXAyKCkpCiAJCW9tYXAxX2FyY2hfcmVzZXQobW9kZSk7CiAJZWxzZQogCQlvbWFwX3ByY21fYXJjaF9yZXNldChtb2RlKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9pby5jIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2lvLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWYzMjZlZgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9pby5jCkBAIC0wLDAgKzEsMTA3IEBACisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorCisjaW5jbHVkZSA8bWFjaC9vbWFwNzMwLmg+CisjaW5jbHVkZSA8bWFjaC9vbWFwMTUxMC5oPgorI2luY2x1ZGUgPG1hY2gvb21hcDE2eHguaD4KKyNpbmNsdWRlIDxtYWNoL29tYXAyNHh4Lmg+CisjaW5jbHVkZSA8bWFjaC9vbWFwMzR4eC5oPgorCisjZGVmaW5lIEJFVFdFRU4ocCxzdCxzeikJKChwKSA+PSAoc3QpICYmIChwKSA8ICgoc3QpICsgKHN6KSkpCisjZGVmaW5lIFhMQVRFKHAscHN0LHZzdCkJKCh2b2lkIF9faW9tZW0gKikoKHApIC0gKHBzdCkgKyAodnN0KSkpCisKKy8qCisgKiBJbnRlcmNlcHQgaW9yZW1hcCgpIHJlcXVlc3RzIGZvciBhZGRyZXNzZXMgaW4gb3VyIGZpeGVkIG1hcHBpbmcgcmVnaW9ucy4KKyAqLwordm9pZCBfX2lvbWVtICpvbWFwX2lvcmVtYXAodW5zaWduZWQgbG9uZyBwLCBzaXplX3Qgc2l6ZSwgdW5zaWduZWQgaW50IHR5cGUpCit7CisjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDEKKwlpZiAoY3B1X2NsYXNzX2lzX29tYXAxKCkpIHsKKwkJaWYgKEJFVFdFRU4ocCwgSU9fUEhZUywgSU9fU0laRSkpCisJCQlyZXR1cm4gWExBVEUocCwgSU9fUEhZUywgSU9fVklSVCk7CisJfQorCWlmIChjcHVfaXNfb21hcDczMCgpKSB7CisJCWlmIChCRVRXRUVOKHAsIE9NQVA3MzBfRFNQX0JBU0UsIE9NQVA3MzBfRFNQX1NJWkUpKQorCQkJcmV0dXJuIFhMQVRFKHAsIE9NQVA3MzBfRFNQX0JBU0UsIE9NQVA3MzBfRFNQX1NUQVJUKTsKKworCQlpZiAoQkVUV0VFTihwLCBPTUFQNzMwX0RTUFJFR19CQVNFLCBPTUFQNzMwX0RTUFJFR19TSVpFKSkKKwkJCXJldHVybiBYTEFURShwLCBPTUFQNzMwX0RTUFJFR19CQVNFLAorCQkJCQlPTUFQNzMwX0RTUFJFR19TVEFSVCk7CisJfQorCWlmIChjcHVfaXNfb21hcDE1eHgoKSkgeworCQlpZiAoQkVUV0VFTihwLCBPTUFQMTUxMF9EU1BfQkFTRSwgT01BUDE1MTBfRFNQX1NJWkUpKQorCQkJcmV0dXJuIFhMQVRFKHAsIE9NQVAxNTEwX0RTUF9CQVNFLCBPTUFQMTUxMF9EU1BfU1RBUlQpOworCisJCWlmIChCRVRXRUVOKHAsIE9NQVAxNTEwX0RTUFJFR19CQVNFLCBPTUFQMTUxMF9EU1BSRUdfU0laRSkpCisJCQlyZXR1cm4gWExBVEUocCwgT01BUDE1MTBfRFNQUkVHX0JBU0UsCisJCQkJCU9NQVAxNTEwX0RTUFJFR19TVEFSVCk7CisJfQorCWlmIChjcHVfaXNfb21hcDE2eHgoKSkgeworCQlpZiAoQkVUV0VFTihwLCBPTUFQMTZYWF9EU1BfQkFTRSwgT01BUDE2WFhfRFNQX1NJWkUpKQorCQkJcmV0dXJuIFhMQVRFKHAsIE9NQVAxNlhYX0RTUF9CQVNFLCBPTUFQMTZYWF9EU1BfU1RBUlQpOworCisJCWlmIChCRVRXRUVOKHAsIE9NQVAxNlhYX0RTUFJFR19CQVNFLCBPTUFQMTZYWF9EU1BSRUdfU0laRSkpCisJCQlyZXR1cm4gWExBVEUocCwgT01BUDE2WFhfRFNQUkVHX0JBU0UsCisJCQkJCU9NQVAxNlhYX0RTUFJFR19TVEFSVCk7CisJfQorI2VuZGlmCisjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDIKKwlpZiAoY3B1X2lzX29tYXAyNHh4KCkpIHsKKwkJaWYgKEJFVFdFRU4ocCwgTDNfMjRYWF9QSFlTLCBMM18yNFhYX1NJWkUpKQorCQkJcmV0dXJuIFhMQVRFKHAsIEwzXzI0WFhfUEhZUywgTDNfMjRYWF9WSVJUKTsKKwkJaWYgKEJFVFdFRU4ocCwgTDRfMjRYWF9QSFlTLCBMNF8yNFhYX1NJWkUpKQorCQkJcmV0dXJuIFhMQVRFKHAsIEw0XzI0WFhfUEhZUywgTDRfMjRYWF9WSVJUKTsKKwl9CisJaWYgKGNwdV9pc19vbWFwMjQyMCgpKSB7CisJCWlmIChCRVRXRUVOKHAsIERTUF9NRU1fMjRYWF9QSFlTLCBEU1BfTUVNXzI0WFhfU0laRSkpCisJCQlyZXR1cm4gWExBVEUocCwgRFNQX01FTV8yNFhYX1BIWVMsIERTUF9NRU1fMjRYWF9WSVJUKTsKKwkJaWYgKEJFVFdFRU4ocCwgRFNQX0lQSV8yNFhYX1BIWVMsIERTUF9JUElfMjRYWF9TSVpFKSkKKwkJCXJldHVybiBYTEFURShwLCBEU1BfSVBJXzI0WFhfUEhZUywgRFNQX0lQSV8yNFhYX1NJWkUpOworCQlpZiAoQkVUV0VFTihwLCBEU1BfTU1VXzI0WFhfUEhZUywgRFNQX01NVV8yNFhYX1NJWkUpKQorCQkJcmV0dXJuIFhMQVRFKHAsIERTUF9NTVVfMjRYWF9QSFlTLCBEU1BfTU1VXzI0WFhfVklSVCk7CisJfQorCWlmIChjcHVfaXNfb21hcDI0MzAoKSkgeworCQlpZiAoQkVUV0VFTihwLCBMNF9XS18yNDNYX1BIWVMsIEw0X1dLXzI0M1hfU0laRSkpCisJCQlyZXR1cm4gWExBVEUocCwgTDRfV0tfMjQzWF9QSFlTLCBMNF9XS18yNDNYX1ZJUlQpOworCQlpZiAoQkVUV0VFTihwLCBPTUFQMjQzWF9HUE1DX1BIWVMsIE9NQVAyNDNYX0dQTUNfU0laRSkpCisJCQlyZXR1cm4gWExBVEUocCwgT01BUDI0M1hfR1BNQ19QSFlTLCBPTUFQMjQzWF9HUE1DX1ZJUlQpOworCQlpZiAoQkVUV0VFTihwLCBPTUFQMjQzWF9TRFJDX1BIWVMsIE9NQVAyNDNYX1NEUkNfU0laRSkpCisJCQlyZXR1cm4gWExBVEUocCwgT01BUDI0M1hfU0RSQ19QSFlTLCBPTUFQMjQzWF9TRFJDX1ZJUlQpOworCQlpZiAoQkVUV0VFTihwLCBPTUFQMjQzWF9TTVNfUEhZUywgT01BUDI0M1hfU01TX1NJWkUpKQorCQkJcmV0dXJuIFhMQVRFKHAsIE9NQVAyNDNYX1NNU19QSFlTLCBPTUFQMjQzWF9TTVNfVklSVCk7CisJfQorI2VuZGlmCisjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDMKKwlpZiAoY3B1X2lzX29tYXAzNHh4KCkpIHsKKwkJaWYgKEJFVFdFRU4ocCwgTDNfMzRYWF9QSFlTLCBMM18zNFhYX1NJWkUpKQorCQkJcmV0dXJuIFhMQVRFKHAsIEwzXzM0WFhfUEhZUywgTDNfMzRYWF9WSVJUKTsKKwkJaWYgKEJFVFdFRU4ocCwgTDRfMzRYWF9QSFlTLCBMNF8zNFhYX1NJWkUpKQorCQkJcmV0dXJuIFhMQVRFKHAsIEw0XzM0WFhfUEhZUywgTDRfMzRYWF9WSVJUKTsKKwkJaWYgKEJFVFdFRU4ocCwgTDRfV0tfMzRYWF9QSFlTLCBMNF9XS18zNFhYX1NJWkUpKQorCQkJcmV0dXJuIFhMQVRFKHAsIEw0X1dLXzM0WFhfUEhZUywgTDRfV0tfMzRYWF9WSVJUKTsKKwkJaWYgKEJFVFdFRU4ocCwgT01BUDM0WFhfR1BNQ19QSFlTLCBPTUFQMzRYWF9HUE1DX1NJWkUpKQorCQkJcmV0dXJuIFhMQVRFKHAsIE9NQVAzNFhYX0dQTUNfUEhZUywgT01BUDM0WFhfR1BNQ19WSVJUKTsKKwkJaWYgKEJFVFdFRU4ocCwgT01BUDM0M1hfU01TX1BIWVMsIE9NQVAzNDNYX1NNU19TSVpFKSkKKwkJCXJldHVybiBYTEFURShwLCBPTUFQMzQzWF9TTVNfUEhZUywgT01BUDM0M1hfU01TX1ZJUlQpOworCQlpZiAoQkVUV0VFTihwLCBPTUFQMzQzWF9TRFJDX1BIWVMsIE9NQVAzNDNYX1NEUkNfU0laRSkpCisJCQlyZXR1cm4gWExBVEUocCwgT01BUDM0M1hfU0RSQ19QSFlTLCBPTUFQMzQzWF9TRFJDX1ZJUlQpOworCQlpZiAoQkVUV0VFTihwLCBMNF9QRVJfMzRYWF9QSFlTLCBMNF9QRVJfMzRYWF9TSVpFKSkKKwkJCXJldHVybiBYTEFURShwLCBMNF9QRVJfMzRYWF9QSFlTLCBMNF9QRVJfMzRYWF9WSVJUKTsKKwkJaWYgKEJFVFdFRU4ocCwgTDRfRU1VXzM0WFhfUEhZUywgTDRfRU1VXzM0WFhfU0laRSkpCisJCQlyZXR1cm4gWExBVEUocCwgTDRfRU1VXzM0WFhfUEhZUywgTDRfRU1VXzM0WFhfVklSVCk7CisJfQorI2VuZGlmCisKKwlyZXR1cm4gX19hcm1faW9yZW1hcChwLCBzaXplLCB0eXBlKTsKK30KK0VYUE9SVF9TWU1CT0wob21hcF9pb3JlbWFwKTsKKwordm9pZCBvbWFwX2lvdW5tYXAodm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyKQoreworCXVuc2lnbmVkIGxvbmcgdmlydCA9ICh1bnNpZ25lZCBsb25nKWFkZHI7CisKKwlpZiAodmlydCA+PSBWTUFMTE9DX1NUQVJUICYmIHZpcnQgPCBWTUFMTE9DX0VORCkKKwkJX19pb3VubWFwKGFkZHIpOworfQorRVhQT1JUX1NZTUJPTChvbWFwX2lvdW5tYXApOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL21jYnNwLmMgYi9hcmNoL2FybS9wbGF0LW9tYXAvbWNic3AuYwppbmRleCAwMTRkMjY1Li5hZjMzZmM3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvbWNic3AuYworKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvbWNic3AuYwpAQCAtMjcsNDMgKzI3LDY1IEBACiAjaW5jbHVkZSA8bWFjaC9kbWEuaD4KICNpbmNsdWRlIDxtYWNoL21jYnNwLmg+CiAKLXN0YXRpYyBzdHJ1Y3Qgb21hcF9tY2JzcCBtY2JzcFtPTUFQX01BWF9NQ0JTUF9DT1VOVF07CitzdHJ1Y3Qgb21hcF9tY2JzcCAqKm1jYnNwX3B0cjsKK2ludCBvbWFwX21jYnNwX2NvdW50OwogCi0jZGVmaW5lIG9tYXBfbWNic3BfY2hlY2tfdmFsaWRfaWQoaWQpCShtY2JzcFtpZF0ucGRhdGEgJiYgXAotCQkJCQltY2JzcFtpZF0ucGRhdGEtPm9wcyAmJiBcCi0JCQkJCW1jYnNwW2lkXS5wZGF0YS0+b3BzLT5jaGVjayAmJiBcCi0JCQkJCShtY2JzcFtpZF0ucGRhdGEtPm9wcy0+Y2hlY2soaWQpID09IDApKQordm9pZCBvbWFwX21jYnNwX3dyaXRlKHZvaWQgX19pb21lbSAqaW9fYmFzZSwgdTE2IHJlZywgdTMyIHZhbCkKK3sKKwlpZiAoY3B1X2NsYXNzX2lzX29tYXAxKCkgfHwgY3B1X2lzX29tYXAyNDIwKCkpCisJCV9fcmF3X3dyaXRldygodTE2KXZhbCwgaW9fYmFzZSArIHJlZyk7CisJZWxzZQorCQlfX3Jhd193cml0ZWwodmFsLCBpb19iYXNlICsgcmVnKTsKK30KKworaW50IG9tYXBfbWNic3BfcmVhZCh2b2lkIF9faW9tZW0gKmlvX2Jhc2UsIHUxNiByZWcpCit7CisJaWYgKGNwdV9jbGFzc19pc19vbWFwMSgpIHx8IGNwdV9pc19vbWFwMjQyMCgpKQorCQlyZXR1cm4gX19yYXdfcmVhZHcoaW9fYmFzZSArIHJlZyk7CisJZWxzZQorCQlyZXR1cm4gX19yYXdfcmVhZGwoaW9fYmFzZSArIHJlZyk7Cit9CisKKyNkZWZpbmUgT01BUF9NQ0JTUF9SRUFEKGJhc2UsIHJlZykgXAorCQkJb21hcF9tY2JzcF9yZWFkKGJhc2UsIE9NQVBfTUNCU1BfUkVHXyMjcmVnKQorI2RlZmluZSBPTUFQX01DQlNQX1dSSVRFKGJhc2UsIHJlZywgdmFsKSBcCisJCQlvbWFwX21jYnNwX3dyaXRlKGJhc2UsIE9NQVBfTUNCU1BfUkVHXyMjcmVnLCB2YWwpCisKKyNkZWZpbmUgb21hcF9tY2JzcF9jaGVja192YWxpZF9pZChpZCkJKGlkIDwgb21hcF9tY2JzcF9jb3VudCkKKyNkZWZpbmUgaWRfdG9fbWNic3BfcHRyKGlkKQkJbWNic3BfcHRyW2lkXTsKIAogc3RhdGljIHZvaWQgb21hcF9tY2JzcF9kdW1wX3JlZyh1OCBpZCkKIHsKLQlkZXZfZGJnKG1jYnNwW2lkXS5kZXYsICIqKioqIE1jQlNQJWQgcmVncyAqKioqXG4iLCBtY2JzcFtpZF0uaWQpOwotCWRldl9kYmcobWNic3BbaWRdLmRldiwgIkRSUjI6ICAweCUwNHhcbiIsCi0JCQlPTUFQX01DQlNQX1JFQUQobWNic3BbaWRdLmlvX2Jhc2UsIERSUjIpKTsKLQlkZXZfZGJnKG1jYnNwW2lkXS5kZXYsICJEUlIxOiAgMHglMDR4XG4iLAotCQkJT01BUF9NQ0JTUF9SRUFEKG1jYnNwW2lkXS5pb19iYXNlLCBEUlIxKSk7Ci0JZGV2X2RiZyhtY2JzcFtpZF0uZGV2LCAiRFhSMjogIDB4JTA0eFxuIiwKLQkJCU9NQVBfTUNCU1BfUkVBRChtY2JzcFtpZF0uaW9fYmFzZSwgRFhSMikpOwotCWRldl9kYmcobWNic3BbaWRdLmRldiwgIkRYUjE6ICAweCUwNHhcbiIsCi0JCQlPTUFQX01DQlNQX1JFQUQobWNic3BbaWRdLmlvX2Jhc2UsIERYUjEpKTsKLQlkZXZfZGJnKG1jYnNwW2lkXS5kZXYsICJTUENSMjogMHglMDR4XG4iLAotCQkJT01BUF9NQ0JTUF9SRUFEKG1jYnNwW2lkXS5pb19iYXNlLCBTUENSMikpOwotCWRldl9kYmcobWNic3BbaWRdLmRldiwgIlNQQ1IxOiAweCUwNHhcbiIsCi0JCQlPTUFQX01DQlNQX1JFQUQobWNic3BbaWRdLmlvX2Jhc2UsIFNQQ1IxKSk7Ci0JZGV2X2RiZyhtY2JzcFtpZF0uZGV2LCAiUkNSMjogIDB4JTA0eFxuIiwKLQkJCU9NQVBfTUNCU1BfUkVBRChtY2JzcFtpZF0uaW9fYmFzZSwgUkNSMikpOwotCWRldl9kYmcobWNic3BbaWRdLmRldiwgIlJDUjE6ICAweCUwNHhcbiIsCi0JCQlPTUFQX01DQlNQX1JFQUQobWNic3BbaWRdLmlvX2Jhc2UsIFJDUjEpKTsKLQlkZXZfZGJnKG1jYnNwW2lkXS5kZXYsICJYQ1IyOiAgMHglMDR4XG4iLAotCQkJT01BUF9NQ0JTUF9SRUFEKG1jYnNwW2lkXS5pb19iYXNlLCBYQ1IyKSk7Ci0JZGV2X2RiZyhtY2JzcFtpZF0uZGV2LCAiWENSMTogIDB4JTA0eFxuIiwKLQkJCU9NQVBfTUNCU1BfUkVBRChtY2JzcFtpZF0uaW9fYmFzZSwgWENSMSkpOwotCWRldl9kYmcobWNic3BbaWRdLmRldiwgIlNSR1IyOiAweCUwNHhcbiIsCi0JCQlPTUFQX01DQlNQX1JFQUQobWNic3BbaWRdLmlvX2Jhc2UsIFNSR1IyKSk7Ci0JZGV2X2RiZyhtY2JzcFtpZF0uZGV2LCAiU1JHUjE6IDB4JTA0eFxuIiwKLQkJCU9NQVBfTUNCU1BfUkVBRChtY2JzcFtpZF0uaW9fYmFzZSwgU1JHUjEpKTsKLQlkZXZfZGJnKG1jYnNwW2lkXS5kZXYsICJQQ1IwOiAgMHglMDR4XG4iLAotCQkJT01BUF9NQ0JTUF9SRUFEKG1jYnNwW2lkXS5pb19iYXNlLCBQQ1IwKSk7Ci0JZGV2X2RiZyhtY2JzcFtpZF0uZGV2LCAiKioqKioqKioqKioqKioqKioqKioqKipcbiIpOworCXN0cnVjdCBvbWFwX21jYnNwICptY2JzcCA9IGlkX3RvX21jYnNwX3B0cihpZCk7CisKKwlkZXZfZGJnKG1jYnNwLT5kZXYsICIqKioqIE1jQlNQJWQgcmVncyAqKioqXG4iLCBtY2JzcC0+aWQpOworCWRldl9kYmcobWNic3AtPmRldiwgIkRSUjI6ICAweCUwNHhcbiIsCisJCQlPTUFQX01DQlNQX1JFQUQobWNic3AtPmlvX2Jhc2UsIERSUjIpKTsKKwlkZXZfZGJnKG1jYnNwLT5kZXYsICJEUlIxOiAgMHglMDR4XG4iLAorCQkJT01BUF9NQ0JTUF9SRUFEKG1jYnNwLT5pb19iYXNlLCBEUlIxKSk7CisJZGV2X2RiZyhtY2JzcC0+ZGV2LCAiRFhSMjogIDB4JTA0eFxuIiwKKwkJCU9NQVBfTUNCU1BfUkVBRChtY2JzcC0+aW9fYmFzZSwgRFhSMikpOworCWRldl9kYmcobWNic3AtPmRldiwgIkRYUjE6ICAweCUwNHhcbiIsCisJCQlPTUFQX01DQlNQX1JFQUQobWNic3AtPmlvX2Jhc2UsIERYUjEpKTsKKwlkZXZfZGJnKG1jYnNwLT5kZXYsICJTUENSMjogMHglMDR4XG4iLAorCQkJT01BUF9NQ0JTUF9SRUFEKG1jYnNwLT5pb19iYXNlLCBTUENSMikpOworCWRldl9kYmcobWNic3AtPmRldiwgIlNQQ1IxOiAweCUwNHhcbiIsCisJCQlPTUFQX01DQlNQX1JFQUQobWNic3AtPmlvX2Jhc2UsIFNQQ1IxKSk7CisJZGV2X2RiZyhtY2JzcC0+ZGV2LCAiUkNSMjogIDB4JTA0eFxuIiwKKwkJCU9NQVBfTUNCU1BfUkVBRChtY2JzcC0+aW9fYmFzZSwgUkNSMikpOworCWRldl9kYmcobWNic3AtPmRldiwgIlJDUjE6ICAweCUwNHhcbiIsCisJCQlPTUFQX01DQlNQX1JFQUQobWNic3AtPmlvX2Jhc2UsIFJDUjEpKTsKKwlkZXZfZGJnKG1jYnNwLT5kZXYsICJYQ1IyOiAgMHglMDR4XG4iLAorCQkJT01BUF9NQ0JTUF9SRUFEKG1jYnNwLT5pb19iYXNlLCBYQ1IyKSk7CisJZGV2X2RiZyhtY2JzcC0+ZGV2LCAiWENSMTogIDB4JTA0eFxuIiwKKwkJCU9NQVBfTUNCU1BfUkVBRChtY2JzcC0+aW9fYmFzZSwgWENSMSkpOworCWRldl9kYmcobWNic3AtPmRldiwgIlNSR1IyOiAweCUwNHhcbiIsCisJCQlPTUFQX01DQlNQX1JFQUQobWNic3AtPmlvX2Jhc2UsIFNSR1IyKSk7CisJZGV2X2RiZyhtY2JzcC0+ZGV2LCAiU1JHUjE6IDB4JTA0eFxuIiwKKwkJCU9NQVBfTUNCU1BfUkVBRChtY2JzcC0+aW9fYmFzZSwgU1JHUjEpKTsKKwlkZXZfZGJnKG1jYnNwLT5kZXYsICJQQ1IwOiAgMHglMDR4XG4iLAorCQkJT01BUF9NQ0JTUF9SRUFEKG1jYnNwLT5pb19iYXNlLCBQQ1IwKSk7CisJZGV2X2RiZyhtY2JzcC0+ZGV2LCAiKioqKioqKioqKioqKioqKioqKioqKipcbiIpOwogfQogCiBzdGF0aWMgaXJxcmV0dXJuX3Qgb21hcF9tY2JzcF90eF9pcnFfaGFuZGxlcihpbnQgaXJxLCB2b2lkICpkZXZfaWQpCkBAIC0xMjYsMTYgKzE0OCwxOCBAQAogICovCiB2b2lkIG9tYXBfbWNic3BfY29uZmlnKHVuc2lnbmVkIGludCBpZCwgY29uc3Qgc3RydWN0IG9tYXBfbWNic3BfcmVnX2NmZyAqY29uZmlnKQogewotCXUzMiBpb19iYXNlOworCXN0cnVjdCBvbWFwX21jYnNwICptY2JzcDsKKwl2b2lkIF9faW9tZW0gKmlvX2Jhc2U7CiAKIAlpZiAoIW9tYXBfbWNic3BfY2hlY2tfdmFsaWRfaWQoaWQpKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiJXM6IEludmFsaWQgaWQgKCVkKVxuIiwgX19mdW5jX18sIGlkICsgMSk7CiAJCXJldHVybjsKIAl9CisJbWNic3AgPSBpZF90b19tY2JzcF9wdHIoaWQpOwogCi0JaW9fYmFzZSA9IG1jYnNwW2lkXS5pb19iYXNlOwotCWRldl9kYmcobWNic3BbaWRdLmRldiwgIkNvbmZpZ3VyaW5nIE1jQlNQJWQgIGlvX2Jhc2U6IDB4JTh4XG4iLAotCQkJbWNic3BbaWRdLmlkLCBpb19iYXNlKTsKKwlpb19iYXNlID0gbWNic3AtPmlvX2Jhc2U7CisJZGV2X2RiZyhtY2JzcC0+ZGV2LCAiQ29uZmlndXJpbmcgTWNCU1AlZCAgcGh5c19iYXNlOiAweCUwOGx4XG4iLAorCQkJbWNic3AtPmlkLCBtY2JzcC0+cGh5c19iYXNlKTsKIAogCS8qIFdlIHdyaXRlIHRoZSBnaXZlbiBjb25maWcgKi8KIAlPTUFQX01DQlNQX1dSSVRFKGlvX2Jhc2UsIFNQQ1IyLCBjb25maWctPnNwY3IyKTsKQEAgLTE1OCwyMyArMTgyLDI2IEBACiAgKi8KIGludCBvbWFwX21jYnNwX3NldF9pb190eXBlKHVuc2lnbmVkIGludCBpZCwgb21hcF9tY2JzcF9pb190eXBlX3QgaW9fdHlwZSkKIHsKKwlzdHJ1Y3Qgb21hcF9tY2JzcCAqbWNic3A7CisKIAlpZiAoIW9tYXBfbWNic3BfY2hlY2tfdmFsaWRfaWQoaWQpKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiJXM6IEludmFsaWQgaWQgKCVkKVxuIiwgX19mdW5jX18sIGlkICsgMSk7CiAJCXJldHVybiAtRU5PREVWOwogCX0KKwltY2JzcCA9IGlkX3RvX21jYnNwX3B0cihpZCk7CiAKLQlzcGluX2xvY2soJm1jYnNwW2lkXS5sb2NrKTsKKwlzcGluX2xvY2soJm1jYnNwLT5sb2NrKTsKIAotCWlmICghbWNic3BbaWRdLmZyZWUpIHsKLQkJZGV2X2VycihtY2JzcFtpZF0uZGV2LCAiTWNCU1AlZCBpcyBjdXJyZW50bHkgaW4gdXNlXG4iLAotCQkJbWNic3BbaWRdLmlkKTsKLQkJc3Bpbl91bmxvY2soJm1jYnNwW2lkXS5sb2NrKTsKKwlpZiAoIW1jYnNwLT5mcmVlKSB7CisJCWRldl9lcnIobWNic3AtPmRldiwgIk1jQlNQJWQgaXMgY3VycmVudGx5IGluIHVzZVxuIiwKKwkJCW1jYnNwLT5pZCk7CisJCXNwaW5fdW5sb2NrKCZtY2JzcC0+bG9jayk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCW1jYnNwW2lkXS5pb190eXBlID0gaW9fdHlwZTsKKwltY2JzcC0+aW9fdHlwZSA9IGlvX3R5cGU7CiAKLQlzcGluX3VubG9jaygmbWNic3BbaWRdLmxvY2spOworCXNwaW5fdW5sb2NrKCZtY2JzcC0+bG9jayk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTE4Miw1MyArMjA5LDYwIEBACiAKIGludCBvbWFwX21jYnNwX3JlcXVlc3QodW5zaWduZWQgaW50IGlkKQogeworCXN0cnVjdCBvbWFwX21jYnNwICptY2JzcDsKIAlpbnQgZXJyOwogCiAJaWYgKCFvbWFwX21jYnNwX2NoZWNrX3ZhbGlkX2lkKGlkKSkgewogCQlwcmludGsoS0VSTl9FUlIgIiVzOiBJbnZhbGlkIGlkICglZClcbiIsIF9fZnVuY19fLCBpZCArIDEpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CisJbWNic3AgPSBpZF90b19tY2JzcF9wdHIoaWQpOwogCi0JaWYgKG1jYnNwW2lkXS5wZGF0YS0+b3BzLT5yZXF1ZXN0KQotCQltY2JzcFtpZF0ucGRhdGEtPm9wcy0+cmVxdWVzdChpZCk7CisJaWYgKG1jYnNwLT5wZGF0YSAmJiBtY2JzcC0+cGRhdGEtPm9wcyAmJiBtY2JzcC0+cGRhdGEtPm9wcy0+cmVxdWVzdCkKKwkJbWNic3AtPnBkYXRhLT5vcHMtPnJlcXVlc3QoaWQpOwogCi0JY2xrX2VuYWJsZShtY2JzcFtpZF0uY2xrKTsKKwljbGtfZW5hYmxlKG1jYnNwLT5jbGspOwogCi0Jc3Bpbl9sb2NrKCZtY2JzcFtpZF0ubG9jayk7Ci0JaWYgKCFtY2JzcFtpZF0uZnJlZSkgewotCQlkZXZfZXJyKG1jYnNwW2lkXS5kZXYsICJNY0JTUCVkIGlzIGN1cnJlbnRseSBpbiB1c2VcbiIsCi0JCQltY2JzcFtpZF0uaWQpOwotCQlzcGluX3VubG9jaygmbWNic3BbaWRdLmxvY2spOworCXNwaW5fbG9jaygmbWNic3AtPmxvY2spOworCWlmICghbWNic3AtPmZyZWUpIHsKKwkJZGV2X2VycihtY2JzcC0+ZGV2LCAiTWNCU1AlZCBpcyBjdXJyZW50bHkgaW4gdXNlXG4iLAorCQkJbWNic3AtPmlkKTsKKwkJc3Bpbl91bmxvY2soJm1jYnNwLT5sb2NrKTsKIAkJcmV0dXJuIC0xOwogCX0KIAotCW1jYnNwW2lkXS5mcmVlID0gMDsKLQlzcGluX3VubG9jaygmbWNic3BbaWRdLmxvY2spOworCW1jYnNwLT5mcmVlID0gMDsKKwlzcGluX3VubG9jaygmbWNic3AtPmxvY2spOwogCi0JaWYgKG1jYnNwW2lkXS5pb190eXBlID09IE9NQVBfTUNCU1BfSVJRX0lPKSB7CisJLyoKKwkgKiBNYWtlIHN1cmUgdGhhdCB0cmFuc21pdHRlciwgcmVjZWl2ZXIgYW5kIHNhbXBsZS1yYXRlIGdlbmVyYXRvciBhcmUKKwkgKiBub3QgcnVubmluZyBiZWZvcmUgYWN0aXZhdGluZyBJUlFzLgorCSAqLworCU9NQVBfTUNCU1BfV1JJVEUobWNic3AtPmlvX2Jhc2UsIFNQQ1IxLCAwKTsKKwlPTUFQX01DQlNQX1dSSVRFKG1jYnNwLT5pb19iYXNlLCBTUENSMiwgMCk7CisKKwlpZiAobWNic3AtPmlvX3R5cGUgPT0gT01BUF9NQ0JTUF9JUlFfSU8pIHsKIAkJLyogV2UgbmVlZCB0byBnZXQgSVJRcyBoZXJlICovCi0JCWVyciA9IHJlcXVlc3RfaXJxKG1jYnNwW2lkXS50eF9pcnEsIG9tYXBfbWNic3BfdHhfaXJxX2hhbmRsZXIsCi0JCQkJCTAsICJNY0JTUCIsICh2b2lkICopICgmbWNic3BbaWRdKSk7CisJCWluaXRfY29tcGxldGlvbigmbWNic3AtPnR4X2lycV9jb21wbGV0aW9uKTsKKwkJZXJyID0gcmVxdWVzdF9pcnEobWNic3AtPnR4X2lycSwgb21hcF9tY2JzcF90eF9pcnFfaGFuZGxlciwKKwkJCQkJMCwgIk1jQlNQIiwgKHZvaWQgKiltY2JzcCk7CiAJCWlmIChlcnIgIT0gMCkgewotCQkJZGV2X2VycihtY2JzcFtpZF0uZGV2LCAiVW5hYmxlIHRvIHJlcXVlc3QgVFggSVJRICVkICIKLQkJCQkJImZvciBNY0JTUCVkXG4iLCBtY2JzcFtpZF0udHhfaXJxLAotCQkJCQltY2JzcFtpZF0uaWQpOworCQkJZGV2X2VycihtY2JzcC0+ZGV2LCAiVW5hYmxlIHRvIHJlcXVlc3QgVFggSVJRICVkICIKKwkJCQkJImZvciBNY0JTUCVkXG4iLCBtY2JzcC0+dHhfaXJxLAorCQkJCQltY2JzcC0+aWQpOwogCQkJcmV0dXJuIGVycjsKIAkJfQogCi0JCWluaXRfY29tcGxldGlvbigmKG1jYnNwW2lkXS50eF9pcnFfY29tcGxldGlvbikpOwotCi0JCWVyciA9IHJlcXVlc3RfaXJxKG1jYnNwW2lkXS5yeF9pcnEsIG9tYXBfbWNic3BfcnhfaXJxX2hhbmRsZXIsCi0JCQkJCTAsICJNY0JTUCIsICh2b2lkICopICgmbWNic3BbaWRdKSk7CisJCWluaXRfY29tcGxldGlvbigmbWNic3AtPnJ4X2lycV9jb21wbGV0aW9uKTsKKwkJZXJyID0gcmVxdWVzdF9pcnEobWNic3AtPnJ4X2lycSwgb21hcF9tY2JzcF9yeF9pcnFfaGFuZGxlciwKKwkJCQkJMCwgIk1jQlNQIiwgKHZvaWQgKiltY2JzcCk7CiAJCWlmIChlcnIgIT0gMCkgewotCQkJZGV2X2VycihtY2JzcFtpZF0uZGV2LCAiVW5hYmxlIHRvIHJlcXVlc3QgUlggSVJRICVkICIKLQkJCQkJImZvciBNY0JTUCVkXG4iLCBtY2JzcFtpZF0ucnhfaXJxLAotCQkJCQltY2JzcFtpZF0uaWQpOwotCQkJZnJlZV9pcnEobWNic3BbaWRdLnR4X2lycSwgKHZvaWQgKikgKCZtY2JzcFtpZF0pKTsKKwkJCWRldl9lcnIobWNic3AtPmRldiwgIlVuYWJsZSB0byByZXF1ZXN0IFJYIElSUSAlZCAiCisJCQkJCSJmb3IgTWNCU1AlZFxuIiwgbWNic3AtPnJ4X2lycSwKKwkJCQkJbWNic3AtPmlkKTsKKwkJCWZyZWVfaXJxKG1jYnNwLT50eF9pcnEsICh2b2lkICopbWNic3ApOwogCQkJcmV0dXJuIGVycjsKIAkJfQotCi0JCWluaXRfY29tcGxldGlvbigmKG1jYnNwW2lkXS5yeF9pcnFfY29tcGxldGlvbikpOwogCX0KIAogCXJldHVybiAwOwpAQCAtMjM3LDMxICsyNzEsMzQgQEAKIAogdm9pZCBvbWFwX21jYnNwX2ZyZWUodW5zaWduZWQgaW50IGlkKQogeworCXN0cnVjdCBvbWFwX21jYnNwICptY2JzcDsKKwogCWlmICghb21hcF9tY2JzcF9jaGVja192YWxpZF9pZChpZCkpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICIlczogSW52YWxpZCBpZCAoJWQpXG4iLCBfX2Z1bmNfXywgaWQgKyAxKTsKIAkJcmV0dXJuOwogCX0KKwltY2JzcCA9IGlkX3RvX21jYnNwX3B0cihpZCk7CiAKLQlpZiAobWNic3BbaWRdLnBkYXRhLT5vcHMtPmZyZWUpCi0JCW1jYnNwW2lkXS5wZGF0YS0+b3BzLT5mcmVlKGlkKTsKKwlpZiAobWNic3AtPnBkYXRhICYmIG1jYnNwLT5wZGF0YS0+b3BzICYmIG1jYnNwLT5wZGF0YS0+b3BzLT5mcmVlKQorCQltY2JzcC0+cGRhdGEtPm9wcy0+ZnJlZShpZCk7CiAKLQljbGtfZGlzYWJsZShtY2JzcFtpZF0uY2xrKTsKKwljbGtfZGlzYWJsZShtY2JzcC0+Y2xrKTsKIAotCXNwaW5fbG9jaygmbWNic3BbaWRdLmxvY2spOwotCWlmIChtY2JzcFtpZF0uZnJlZSkgewotCQlkZXZfZXJyKG1jYnNwW2lkXS5kZXYsICJNY0JTUCVkIHdhcyBub3QgcmVzZXJ2ZWRcbiIsCi0JCQltY2JzcFtpZF0uaWQpOwotCQlzcGluX3VubG9jaygmbWNic3BbaWRdLmxvY2spOworCXNwaW5fbG9jaygmbWNic3AtPmxvY2spOworCWlmIChtY2JzcC0+ZnJlZSkgeworCQlkZXZfZXJyKG1jYnNwLT5kZXYsICJNY0JTUCVkIHdhcyBub3QgcmVzZXJ2ZWRcbiIsCisJCQltY2JzcC0+aWQpOworCQlzcGluX3VubG9jaygmbWNic3AtPmxvY2spOwogCQlyZXR1cm47CiAJfQogCi0JbWNic3BbaWRdLmZyZWUgPSAxOwotCXNwaW5fdW5sb2NrKCZtY2JzcFtpZF0ubG9jayk7CisJbWNic3AtPmZyZWUgPSAxOworCXNwaW5fdW5sb2NrKCZtY2JzcC0+bG9jayk7CiAKLQlpZiAobWNic3BbaWRdLmlvX3R5cGUgPT0gT01BUF9NQ0JTUF9JUlFfSU8pIHsKKwlpZiAobWNic3AtPmlvX3R5cGUgPT0gT01BUF9NQ0JTUF9JUlFfSU8pIHsKIAkJLyogRnJlZSBJUlFzICovCi0JCWZyZWVfaXJxKG1jYnNwW2lkXS5yeF9pcnEsICh2b2lkICopICgmbWNic3BbaWRdKSk7Ci0JCWZyZWVfaXJxKG1jYnNwW2lkXS50eF9pcnEsICh2b2lkICopICgmbWNic3BbaWRdKSk7CisJCWZyZWVfaXJxKG1jYnNwLT5yeF9pcnEsICh2b2lkICopbWNic3ApOworCQlmcmVlX2lycShtY2JzcC0+dHhfaXJxLCAodm9pZCAqKW1jYnNwKTsKIAl9CiB9CiBFWFBPUlRfU1lNQk9MKG9tYXBfbWNic3BfZnJlZSk7CkBAIC0yNzMsMTggKzMxMCwxOSBAQAogICovCiB2b2lkIG9tYXBfbWNic3Bfc3RhcnQodW5zaWduZWQgaW50IGlkKQogewotCXUzMiBpb19iYXNlOworCXN0cnVjdCBvbWFwX21jYnNwICptY2JzcDsKKwl2b2lkIF9faW9tZW0gKmlvX2Jhc2U7CiAJdTE2IHc7CiAKIAlpZiAoIW9tYXBfbWNic3BfY2hlY2tfdmFsaWRfaWQoaWQpKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiJXM6IEludmFsaWQgaWQgKCVkKVxuIiwgX19mdW5jX18sIGlkICsgMSk7CiAJCXJldHVybjsKIAl9CisJbWNic3AgPSBpZF90b19tY2JzcF9wdHIoaWQpOworCWlvX2Jhc2UgPSBtY2JzcC0+aW9fYmFzZTsKIAotCWlvX2Jhc2UgPSBtY2JzcFtpZF0uaW9fYmFzZTsKLQotCW1jYnNwW2lkXS5yeF93b3JkX2xlbmd0aCA9IChPTUFQX01DQlNQX1JFQUQoaW9fYmFzZSwgUkNSMSkgPj4gNSkgJiAweDc7Ci0JbWNic3BbaWRdLnR4X3dvcmRfbGVuZ3RoID0gKE9NQVBfTUNCU1BfUkVBRChpb19iYXNlLCBYQ1IxKSA+PiA1KSAmIDB4NzsKKwltY2JzcC0+cnhfd29yZF9sZW5ndGggPSAoT01BUF9NQ0JTUF9SRUFEKGlvX2Jhc2UsIFJDUjEpID4+IDUpICYgMHg3OworCW1jYnNwLT50eF93b3JkX2xlbmd0aCA9IChPTUFQX01DQlNQX1JFQUQoaW9fYmFzZSwgWENSMSkgPj4gNSkgJiAweDc7CiAKIAkvKiBTdGFydCB0aGUgc2FtcGxlIGdlbmVyYXRvciAqLwogCXcgPSBPTUFQX01DQlNQX1JFQUQoaW9fYmFzZSwgU1BDUjIpOwpAQCAtMzEwLDcgKzM0OCw4IEBACiAKIHZvaWQgb21hcF9tY2JzcF9zdG9wKHVuc2lnbmVkIGludCBpZCkKIHsKLQl1MzIgaW9fYmFzZTsKKwlzdHJ1Y3Qgb21hcF9tY2JzcCAqbWNic3A7CisJdm9pZCBfX2lvbWVtICppb19iYXNlOwogCXUxNiB3OwogCiAJaWYgKCFvbWFwX21jYnNwX2NoZWNrX3ZhbGlkX2lkKGlkKSkgewpAQCAtMzE4LDcgKzM1Nyw4IEBACiAJCXJldHVybjsKIAl9CiAKLQlpb19iYXNlID0gbWNic3BbaWRdLmlvX2Jhc2U7CisJbWNic3AgPSBpZF90b19tY2JzcF9wdHIoaWQpOworCWlvX2Jhc2UgPSBtY2JzcC0+aW9fYmFzZTsKIAogCS8qIFJlc2V0IHRyYW5zbWl0dGVyICovCiAJdyA9IE9NQVBfTUNCU1BfUkVBRChpb19iYXNlLCBTUENSMik7CkBAIC0zMzcsMTQgKzM3NywxNyBAQAogLyogcG9sbGVkIG1jYnNwIGkvbyBvcGVyYXRpb25zICovCiBpbnQgb21hcF9tY2JzcF9wb2xsd3JpdGUodW5zaWduZWQgaW50IGlkLCB1MTYgYnVmKQogewotCXUzMiBiYXNlOworCXN0cnVjdCBvbWFwX21jYnNwICptY2JzcDsKKwl2b2lkIF9faW9tZW0gKmJhc2U7CiAKIAlpZiAoIW9tYXBfbWNic3BfY2hlY2tfdmFsaWRfaWQoaWQpKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiJXM6IEludmFsaWQgaWQgKCVkKVxuIiwgX19mdW5jX18sIGlkICsgMSk7CiAJCXJldHVybiAtRU5PREVWOwogCX0KIAotCWJhc2UgPSBtY2JzcFtpZF0uaW9fYmFzZTsKKwltY2JzcCA9IGlkX3RvX21jYnNwX3B0cihpZCk7CisJYmFzZSA9IG1jYnNwLT5pb19iYXNlOworCiAJd3JpdGV3KGJ1ZiwgYmFzZSArIE9NQVBfTUNCU1BfUkVHX0RYUjEpOwogCS8qIGlmIGZyYW1lIHN5bmMgZXJyb3IgLSBjbGVhciB0aGUgZXJyb3IgKi8KIAlpZiAocmVhZHcoYmFzZSArIE9NQVBfTUNCU1BfUkVHX1NQQ1IyKSAmIFhTWU5DX0VSUikgewpAQCAtMzY2LDggKzQwOSw4IEBACiAJCQkJICAgICAgIChYUlNUKSwKIAkJCQkgICAgICAgYmFzZSArIE9NQVBfTUNCU1BfUkVHX1NQQ1IyKTsKIAkJCQl1ZGVsYXkoMTApOwotCQkJCWRldl9lcnIobWNic3BbaWRdLmRldiwgIkNvdWxkIG5vdCB3cml0ZSB0byIKLQkJCQkJIiBNY0JTUCVkIFJlZ2lzdGVyXG4iLCBtY2JzcFtpZF0uaWQpOworCQkJCWRldl9lcnIobWNic3AtPmRldiwgIkNvdWxkIG5vdCB3cml0ZSB0byIKKwkJCQkJIiBNY0JTUCVkIFJlZ2lzdGVyXG4iLCBtY2JzcC0+aWQpOwogCQkJCXJldHVybiAtMjsKIAkJCX0KIAkJfQpAQCAtMzc5LDE0ICs0MjIsMTYgQEAKIAogaW50IG9tYXBfbWNic3BfcG9sbHJlYWQodW5zaWduZWQgaW50IGlkLCB1MTYgKmJ1ZikKIHsKLQl1MzIgYmFzZTsKKwlzdHJ1Y3Qgb21hcF9tY2JzcCAqbWNic3A7CisJdm9pZCBfX2lvbWVtICpiYXNlOwogCiAJaWYgKCFvbWFwX21jYnNwX2NoZWNrX3ZhbGlkX2lkKGlkKSkgewogCQlwcmludGsoS0VSTl9FUlIgIiVzOiBJbnZhbGlkIGlkICglZClcbiIsIF9fZnVuY19fLCBpZCArIDEpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CisJbWNic3AgPSBpZF90b19tY2JzcF9wdHIoaWQpOwogCi0JYmFzZSA9IG1jYnNwW2lkXS5pb19iYXNlOworCWJhc2UgPSBtY2JzcC0+aW9fYmFzZTsKIAkvKiBpZiBmcmFtZSBzeW5jIGVycm9yIC0gY2xlYXIgdGhlIGVycm9yICovCiAJaWYgKHJlYWR3KGJhc2UgKyBPTUFQX01DQlNQX1JFR19TUENSMSkgJiBSU1lOQ19FUlIpIHsKIAkJLyogY2xlYXIgZXJyb3IgKi8KQEAgLTQwNyw4ICs0NTIsOCBAQAogCQkJCSAgICAgICAoUlJTVCksCiAJCQkJICAgICAgIGJhc2UgKyBPTUFQX01DQlNQX1JFR19TUENSMSk7CiAJCQkJdWRlbGF5KDEwKTsKLQkJCQlkZXZfZXJyKG1jYnNwW2lkXS5kZXYsICJDb3VsZCBub3QgcmVhZCBmcm9tIgotCQkJCQkiIE1jQlNQJWQgUmVnaXN0ZXJcbiIsIG1jYnNwW2lkXS5pZCk7CisJCQkJZGV2X2VycihtY2JzcC0+ZGV2LCAiQ291bGQgbm90IHJlYWQgZnJvbSIKKwkJCQkJIiBNY0JTUCVkIFJlZ2lzdGVyXG4iLCBtY2JzcC0+aWQpOwogCQkJCXJldHVybiAtMjsKIAkJCX0KIAkJfQpAQCAtNDI0LDcgKzQ2OSw4IEBACiAgKi8KIHZvaWQgb21hcF9tY2JzcF94bWl0X3dvcmQodW5zaWduZWQgaW50IGlkLCB1MzIgd29yZCkKIHsKLQl1MzIgaW9fYmFzZTsKKwlzdHJ1Y3Qgb21hcF9tY2JzcCAqbWNic3A7CisJdm9pZCBfX2lvbWVtICppb19iYXNlOwogCW9tYXBfbWNic3Bfd29yZF9sZW5ndGggd29yZF9sZW5ndGg7CiAKIAlpZiAoIW9tYXBfbWNic3BfY2hlY2tfdmFsaWRfaWQoaWQpKSB7CkBAIC00MzIsMTAgKzQ3OCwxMSBAQAogCQlyZXR1cm47CiAJfQogCi0JaW9fYmFzZSA9IG1jYnNwW2lkXS5pb19iYXNlOwotCXdvcmRfbGVuZ3RoID0gbWNic3BbaWRdLnR4X3dvcmRfbGVuZ3RoOworCW1jYnNwID0gaWRfdG9fbWNic3BfcHRyKGlkKTsKKwlpb19iYXNlID0gbWNic3AtPmlvX2Jhc2U7CisJd29yZF9sZW5ndGggPSBtY2JzcC0+dHhfd29yZF9sZW5ndGg7CiAKLQl3YWl0X2Zvcl9jb21wbGV0aW9uKCYobWNic3BbaWRdLnR4X2lycV9jb21wbGV0aW9uKSk7CisJd2FpdF9mb3JfY29tcGxldGlvbigmbWNic3AtPnR4X2lycV9jb21wbGV0aW9uKTsKIAogCWlmICh3b3JkX2xlbmd0aCA+IE9NQVBfTUNCU1BfV09SRF8xNikKIAkJT01BUF9NQ0JTUF9XUklURShpb19iYXNlLCBEWFIyLCB3b3JkID4+IDE2KTsKQEAgLTQ0NSw3ICs0OTIsOCBAQAogCiB1MzIgb21hcF9tY2JzcF9yZWN2X3dvcmQodW5zaWduZWQgaW50IGlkKQogewotCXUzMiBpb19iYXNlOworCXN0cnVjdCBvbWFwX21jYnNwICptY2JzcDsKKwl2b2lkIF9faW9tZW0gKmlvX2Jhc2U7CiAJdTE2IHdvcmRfbHNiLCB3b3JkX21zYiA9IDA7CiAJb21hcF9tY2JzcF93b3JkX2xlbmd0aCB3b3JkX2xlbmd0aDsKIApAQCAtNDUzLDExICs1MDEsMTIgQEAKIAkJcHJpbnRrKEtFUk5fRVJSICIlczogSW52YWxpZCBpZCAoJWQpXG4iLCBfX2Z1bmNfXywgaWQgKyAxKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQorCW1jYnNwID0gaWRfdG9fbWNic3BfcHRyKGlkKTsKIAotCXdvcmRfbGVuZ3RoID0gbWNic3BbaWRdLnJ4X3dvcmRfbGVuZ3RoOwotCWlvX2Jhc2UgPSBtY2JzcFtpZF0uaW9fYmFzZTsKKwl3b3JkX2xlbmd0aCA9IG1jYnNwLT5yeF93b3JkX2xlbmd0aDsKKwlpb19iYXNlID0gbWNic3AtPmlvX2Jhc2U7CiAKLQl3YWl0X2Zvcl9jb21wbGV0aW9uKCYobWNic3BbaWRdLnJ4X2lycV9jb21wbGV0aW9uKSk7CisJd2FpdF9mb3JfY29tcGxldGlvbigmbWNic3AtPnJ4X2lycV9jb21wbGV0aW9uKTsKIAogCWlmICh3b3JkX2xlbmd0aCA+IE9NQVBfTUNCU1BfV09SRF8xNikKIAkJd29yZF9tc2IgPSBPTUFQX01DQlNQX1JFQUQoaW9fYmFzZSwgRFJSMik7CkBAIC00NjksNyArNTE4LDggQEAKIAogaW50IG9tYXBfbWNic3Bfc3BpX21hc3Rlcl94bWl0X3dvcmRfcG9sbCh1bnNpZ25lZCBpbnQgaWQsIHUzMiB3b3JkKQogewotCXUzMiBpb19iYXNlOworCXN0cnVjdCBvbWFwX21jYnNwICptY2JzcDsKKwl2b2lkIF9faW9tZW0gKmlvX2Jhc2U7CiAJb21hcF9tY2JzcF93b3JkX2xlbmd0aCB0eF93b3JkX2xlbmd0aDsKIAlvbWFwX21jYnNwX3dvcmRfbGVuZ3RoIHJ4X3dvcmRfbGVuZ3RoOwogCXUxNiBzcGNyMiwgc3BjcjEsIGF0dGVtcHRzID0gMCwgd29yZF9sc2IsIHdvcmRfbXNiID0gMDsKQEAgLTQ3OCwxMCArNTI4LDEwIEBACiAJCXByaW50ayhLRVJOX0VSUiAiJXM6IEludmFsaWQgaWQgKCVkKVxuIiwgX19mdW5jX18sIGlkICsgMSk7CiAJCXJldHVybiAtRU5PREVWOwogCX0KLQotCWlvX2Jhc2UgPSBtY2JzcFtpZF0uaW9fYmFzZTsKLQl0eF93b3JkX2xlbmd0aCA9IG1jYnNwW2lkXS50eF93b3JkX2xlbmd0aDsKLQlyeF93b3JkX2xlbmd0aCA9IG1jYnNwW2lkXS5yeF93b3JkX2xlbmd0aDsKKwltY2JzcCA9IGlkX3RvX21jYnNwX3B0cihpZCk7CisJaW9fYmFzZSA9IG1jYnNwLT5pb19iYXNlOworCXR4X3dvcmRfbGVuZ3RoID0gbWNic3AtPnR4X3dvcmRfbGVuZ3RoOworCXJ4X3dvcmRfbGVuZ3RoID0gbWNic3AtPnJ4X3dvcmRfbGVuZ3RoOwogCiAJaWYgKHR4X3dvcmRfbGVuZ3RoICE9IHJ4X3dvcmRfbGVuZ3RoKQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTQ5Niw4ICs1NDYsOCBAQAogCQkJdWRlbGF5KDEwKTsKIAkJCU9NQVBfTUNCU1BfV1JJVEUoaW9fYmFzZSwgU1BDUjIsIHNwY3IyIHwgWFJTVCk7CiAJCQl1ZGVsYXkoMTApOwotCQkJZGV2X2VycihtY2JzcFtpZF0uZGV2LCAiTWNCU1AlZCB0cmFuc21pdHRlciBub3QgIgotCQkJCSJyZWFkeVxuIiwgbWNic3BbaWRdLmlkKTsKKwkJCWRldl9lcnIobWNic3AtPmRldiwgIk1jQlNQJWQgdHJhbnNtaXR0ZXIgbm90ICIKKwkJCQkicmVhZHlcbiIsIG1jYnNwLT5pZCk7CiAJCQlyZXR1cm4gLUVBR0FJTjsKIAkJfQogCX0KQEAgLTUxNyw4ICs1NjcsOCBAQAogCQkJdWRlbGF5KDEwKTsKIAkJCU9NQVBfTUNCU1BfV1JJVEUoaW9fYmFzZSwgU1BDUjEsIHNwY3IxIHwgUlJTVCk7CiAJCQl1ZGVsYXkoMTApOwotCQkJZGV2X2VycihtY2JzcFtpZF0uZGV2LCAiTWNCU1AlZCByZWNlaXZlciBub3QgIgotCQkJCSJyZWFkeVxuIiwgbWNic3BbaWRdLmlkKTsKKwkJCWRldl9lcnIobWNic3AtPmRldiwgIk1jQlNQJWQgcmVjZWl2ZXIgbm90ICIKKwkJCQkicmVhZHlcbiIsIG1jYnNwLT5pZCk7CiAJCQlyZXR1cm4gLUVBR0FJTjsKIAkJfQogCX0KQEAgLTUzNCw3ICs1ODQsOSBAQAogCiBpbnQgb21hcF9tY2JzcF9zcGlfbWFzdGVyX3JlY3Zfd29yZF9wb2xsKHVuc2lnbmVkIGludCBpZCwgdTMyICp3b3JkKQogewotCXUzMiBpb19iYXNlLCBjbG9ja193b3JkID0gMDsKKwlzdHJ1Y3Qgb21hcF9tY2JzcCAqbWNic3A7CisJdTMyIGNsb2NrX3dvcmQgPSAwOworCXZvaWQgX19pb21lbSAqaW9fYmFzZTsKIAlvbWFwX21jYnNwX3dvcmRfbGVuZ3RoIHR4X3dvcmRfbGVuZ3RoOwogCW9tYXBfbWNic3Bfd29yZF9sZW5ndGggcnhfd29yZF9sZW5ndGg7CiAJdTE2IHNwY3IyLCBzcGNyMSwgYXR0ZW1wdHMgPSAwLCB3b3JkX2xzYiwgd29yZF9tc2IgPSAwOwpAQCAtNTQ0LDkgKzU5NiwxMSBAQAogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKLQlpb19iYXNlID0gbWNic3BbaWRdLmlvX2Jhc2U7Ci0JdHhfd29yZF9sZW5ndGggPSBtY2JzcFtpZF0udHhfd29yZF9sZW5ndGg7Ci0Jcnhfd29yZF9sZW5ndGggPSBtY2JzcFtpZF0ucnhfd29yZF9sZW5ndGg7CisJbWNic3AgPSBpZF90b19tY2JzcF9wdHIoaWQpOworCWlvX2Jhc2UgPSBtY2JzcC0+aW9fYmFzZTsKKworCXR4X3dvcmRfbGVuZ3RoID0gbWNic3AtPnR4X3dvcmRfbGVuZ3RoOworCXJ4X3dvcmRfbGVuZ3RoID0gbWNic3AtPnJ4X3dvcmRfbGVuZ3RoOwogCiAJaWYgKHR4X3dvcmRfbGVuZ3RoICE9IHJ4X3dvcmRfbGVuZ3RoKQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTU2MSw4ICs2MTUsOCBAQAogCQkJdWRlbGF5KDEwKTsKIAkJCU9NQVBfTUNCU1BfV1JJVEUoaW9fYmFzZSwgU1BDUjIsIHNwY3IyIHwgWFJTVCk7CiAJCQl1ZGVsYXkoMTApOwotCQkJZGV2X2VycihtY2JzcFtpZF0uZGV2LCAiTWNCU1AlZCB0cmFuc21pdHRlciBub3QgIgotCQkJCSJyZWFkeVxuIiwgbWNic3BbaWRdLmlkKTsKKwkJCWRldl9lcnIobWNic3AtPmRldiwgIk1jQlNQJWQgdHJhbnNtaXR0ZXIgbm90ICIKKwkJCQkicmVhZHlcbiIsIG1jYnNwLT5pZCk7CiAJCQlyZXR1cm4gLUVBR0FJTjsKIAkJfQogCX0KQEAgLTU4Miw4ICs2MzYsOCBAQAogCQkJdWRlbGF5KDEwKTsKIAkJCU9NQVBfTUNCU1BfV1JJVEUoaW9fYmFzZSwgU1BDUjEsIHNwY3IxIHwgUlJTVCk7CiAJCQl1ZGVsYXkoMTApOwotCQkJZGV2X2VycihtY2JzcFtpZF0uZGV2LCAiTWNCU1AlZCByZWNlaXZlciBub3QgIgotCQkJCSJyZWFkeVxuIiwgbWNic3BbaWRdLmlkKTsKKwkJCWRldl9lcnIobWNic3AtPmRldiwgIk1jQlNQJWQgcmVjZWl2ZXIgbm90ICIKKwkJCQkicmVhZHlcbiIsIG1jYnNwLT5pZCk7CiAJCQlyZXR1cm4gLUVBR0FJTjsKIAkJfQogCX0KQEAgLTYwOSw2ICs2NjMsNyBAQAogaW50IG9tYXBfbWNic3BfeG1pdF9idWZmZXIodW5zaWduZWQgaW50IGlkLCBkbWFfYWRkcl90IGJ1ZmZlciwKIAkJCQl1bnNpZ25lZCBpbnQgbGVuZ3RoKQogeworCXN0cnVjdCBvbWFwX21jYnNwICptY2JzcDsKIAlpbnQgZG1hX3R4X2NoOwogCWludCBzcmNfcG9ydCA9IDA7CiAJaW50IGRlc3RfcG9ydCA9IDA7CkBAIC02MTgsNTAgKzY3Myw1MSBAQAogCQlwcmludGsoS0VSTl9FUlIgIiVzOiBJbnZhbGlkIGlkICglZClcbiIsIF9fZnVuY19fLCBpZCArIDEpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CisJbWNic3AgPSBpZF90b19tY2JzcF9wdHIoaWQpOwogCi0JaWYgKG9tYXBfcmVxdWVzdF9kbWEobWNic3BbaWRdLmRtYV90eF9zeW5jLCAiTWNCU1AgVFgiLAorCWlmIChvbWFwX3JlcXVlc3RfZG1hKG1jYnNwLT5kbWFfdHhfc3luYywgIk1jQlNQIFRYIiwKIAkJCQlvbWFwX21jYnNwX3R4X2RtYV9jYWxsYmFjaywKLQkJCQkmbWNic3BbaWRdLAorCQkJCW1jYnNwLAogCQkJCSZkbWFfdHhfY2gpKSB7Ci0JCWRldl9lcnIobWNic3BbaWRdLmRldiwgIiBVbmFibGUgdG8gcmVxdWVzdCBETUEgY2hhbm5lbCBmb3IgIgorCQlkZXZfZXJyKG1jYnNwLT5kZXYsICIgVW5hYmxlIHRvIHJlcXVlc3QgRE1BIGNoYW5uZWwgZm9yICIKIAkJCQkiTWNCU1AlZCBUWC4gVHJ5aW5nIElSUSBiYXNlZCBUWFxuIiwKLQkJCQltY2JzcFtpZF0uaWQpOworCQkJCW1jYnNwLT5pZCk7CiAJCXJldHVybiAtRUFHQUlOOwogCX0KLQltY2JzcFtpZF0uZG1hX3R4X2xjaCA9IGRtYV90eF9jaDsKKwltY2JzcC0+ZG1hX3R4X2xjaCA9IGRtYV90eF9jaDsKIAotCWRldl9lcnIobWNic3BbaWRdLmRldiwgIk1jQlNQJWQgVFggRE1BIG9uIGNoYW5uZWwgJWRcbiIsIG1jYnNwW2lkXS5pZCwKKwlkZXZfZXJyKG1jYnNwLT5kZXYsICJNY0JTUCVkIFRYIERNQSBvbiBjaGFubmVsICVkXG4iLCBtY2JzcC0+aWQsCiAJCWRtYV90eF9jaCk7CiAKLQlpbml0X2NvbXBsZXRpb24oJihtY2JzcFtpZF0udHhfZG1hX2NvbXBsZXRpb24pKTsKKwlpbml0X2NvbXBsZXRpb24oJm1jYnNwLT50eF9kbWFfY29tcGxldGlvbik7CiAKIAlpZiAoY3B1X2NsYXNzX2lzX29tYXAxKCkpIHsKIAkJc3JjX3BvcnQgPSBPTUFQX0RNQV9QT1JUX1RJUEI7CiAJCWRlc3RfcG9ydCA9IE9NQVBfRE1BX1BPUlRfRU1JRkY7CiAJfQogCWlmIChjcHVfY2xhc3NfaXNfb21hcDIoKSkKLQkJc3luY19kZXYgPSBtY2JzcFtpZF0uZG1hX3R4X3N5bmM7CisJCXN5bmNfZGV2ID0gbWNic3AtPmRtYV90eF9zeW5jOwogCi0Jb21hcF9zZXRfZG1hX3RyYW5zZmVyX3BhcmFtcyhtY2JzcFtpZF0uZG1hX3R4X2xjaCwKKwlvbWFwX3NldF9kbWFfdHJhbnNmZXJfcGFyYW1zKG1jYnNwLT5kbWFfdHhfbGNoLAogCQkJCSAgICAgT01BUF9ETUFfREFUQV9UWVBFX1MxNiwKIAkJCQkgICAgIGxlbmd0aCA+PiAxLCAxLAogCQkJCSAgICAgT01BUF9ETUFfU1lOQ19FTEVNRU5ULAogCSBzeW5jX2RldiwgMCk7CiAKLQlvbWFwX3NldF9kbWFfZGVzdF9wYXJhbXMobWNic3BbaWRdLmRtYV90eF9sY2gsCisJb21hcF9zZXRfZG1hX2Rlc3RfcGFyYW1zKG1jYnNwLT5kbWFfdHhfbGNoLAogCQkJCSBzcmNfcG9ydCwKIAkJCQkgT01BUF9ETUFfQU1PREVfQ09OU1RBTlQsCi0JCQkJIG1jYnNwW2lkXS5waHlzX2Jhc2UgKyBPTUFQX01DQlNQX1JFR19EWFIxLAorCQkJCSBtY2JzcC0+cGh5c19iYXNlICsgT01BUF9NQ0JTUF9SRUdfRFhSMSwKIAkJCQkgMCwgMCk7CiAKLQlvbWFwX3NldF9kbWFfc3JjX3BhcmFtcyhtY2JzcFtpZF0uZG1hX3R4X2xjaCwKKwlvbWFwX3NldF9kbWFfc3JjX3BhcmFtcyhtY2JzcC0+ZG1hX3R4X2xjaCwKIAkJCQlkZXN0X3BvcnQsCiAJCQkJT01BUF9ETUFfQU1PREVfUE9TVF9JTkMsCiAJCQkJYnVmZmVyLAogCQkJCTAsIDApOwogCi0Jb21hcF9zdGFydF9kbWEobWNic3BbaWRdLmRtYV90eF9sY2gpOwotCXdhaXRfZm9yX2NvbXBsZXRpb24oJihtY2JzcFtpZF0udHhfZG1hX2NvbXBsZXRpb24pKTsKKwlvbWFwX3N0YXJ0X2RtYShtY2JzcC0+ZG1hX3R4X2xjaCk7CisJd2FpdF9mb3JfY29tcGxldGlvbigmbWNic3AtPnR4X2RtYV9jb21wbGV0aW9uKTsKIAogCXJldHVybiAwOwogfQpAQCAtNjcwLDYgKzcyNiw3IEBACiBpbnQgb21hcF9tY2JzcF9yZWN2X2J1ZmZlcih1bnNpZ25lZCBpbnQgaWQsIGRtYV9hZGRyX3QgYnVmZmVyLAogCQkJCXVuc2lnbmVkIGludCBsZW5ndGgpCiB7CisJc3RydWN0IG9tYXBfbWNic3AgKm1jYnNwOwogCWludCBkbWFfcnhfY2g7CiAJaW50IHNyY19wb3J0ID0gMDsKIAlpbnQgZGVzdF9wb3J0ID0gMDsKQEAgLTY3OSw1MCArNzM2LDUxIEBACiAJCXByaW50ayhLRVJOX0VSUiAiJXM6IEludmFsaWQgaWQgKCVkKVxuIiwgX19mdW5jX18sIGlkICsgMSk7CiAJCXJldHVybiAtRU5PREVWOwogCX0KKwltY2JzcCA9IGlkX3RvX21jYnNwX3B0cihpZCk7CiAKLQlpZiAob21hcF9yZXF1ZXN0X2RtYShtY2JzcFtpZF0uZG1hX3J4X3N5bmMsICJNY0JTUCBSWCIsCisJaWYgKG9tYXBfcmVxdWVzdF9kbWEobWNic3AtPmRtYV9yeF9zeW5jLCAiTWNCU1AgUlgiLAogCQkJCW9tYXBfbWNic3BfcnhfZG1hX2NhbGxiYWNrLAotCQkJCSZtY2JzcFtpZF0sCisJCQkJbWNic3AsCiAJCQkJJmRtYV9yeF9jaCkpIHsKLQkJZGV2X2VycihtY2JzcFtpZF0uZGV2LCAiVW5hYmxlIHRvIHJlcXVlc3QgRE1BIGNoYW5uZWwgZm9yICIKKwkJZGV2X2VycihtY2JzcC0+ZGV2LCAiVW5hYmxlIHRvIHJlcXVlc3QgRE1BIGNoYW5uZWwgZm9yICIKIAkJCQkiTWNCU1AlZCBSWC4gVHJ5aW5nIElSUSBiYXNlZCBSWFxuIiwKLQkJCQltY2JzcFtpZF0uaWQpOworCQkJCW1jYnNwLT5pZCk7CiAJCXJldHVybiAtRUFHQUlOOwogCX0KLQltY2JzcFtpZF0uZG1hX3J4X2xjaCA9IGRtYV9yeF9jaDsKKwltY2JzcC0+ZG1hX3J4X2xjaCA9IGRtYV9yeF9jaDsKIAotCWRldl9lcnIobWNic3BbaWRdLmRldiwgIk1jQlNQJWQgUlggRE1BIG9uIGNoYW5uZWwgJWRcbiIsIG1jYnNwW2lkXS5pZCwKKwlkZXZfZXJyKG1jYnNwLT5kZXYsICJNY0JTUCVkIFJYIERNQSBvbiBjaGFubmVsICVkXG4iLCBtY2JzcC0+aWQsCiAJCWRtYV9yeF9jaCk7CiAKLQlpbml0X2NvbXBsZXRpb24oJihtY2JzcFtpZF0ucnhfZG1hX2NvbXBsZXRpb24pKTsKKwlpbml0X2NvbXBsZXRpb24oJm1jYnNwLT5yeF9kbWFfY29tcGxldGlvbik7CiAKIAlpZiAoY3B1X2NsYXNzX2lzX29tYXAxKCkpIHsKIAkJc3JjX3BvcnQgPSBPTUFQX0RNQV9QT1JUX1RJUEI7CiAJCWRlc3RfcG9ydCA9IE9NQVBfRE1BX1BPUlRfRU1JRkY7CiAJfQogCWlmIChjcHVfY2xhc3NfaXNfb21hcDIoKSkKLQkJc3luY19kZXYgPSBtY2JzcFtpZF0uZG1hX3J4X3N5bmM7CisJCXN5bmNfZGV2ID0gbWNic3AtPmRtYV9yeF9zeW5jOwogCi0Jb21hcF9zZXRfZG1hX3RyYW5zZmVyX3BhcmFtcyhtY2JzcFtpZF0uZG1hX3J4X2xjaCwKKwlvbWFwX3NldF9kbWFfdHJhbnNmZXJfcGFyYW1zKG1jYnNwLT5kbWFfcnhfbGNoLAogCQkJCQlPTUFQX0RNQV9EQVRBX1RZUEVfUzE2LAogCQkJCQlsZW5ndGggPj4gMSwgMSwKIAkJCQkJT01BUF9ETUFfU1lOQ19FTEVNRU5ULAogCQkJCQlzeW5jX2RldiwgMCk7CiAKLQlvbWFwX3NldF9kbWFfc3JjX3BhcmFtcyhtY2JzcFtpZF0uZG1hX3J4X2xjaCwKKwlvbWFwX3NldF9kbWFfc3JjX3BhcmFtcyhtY2JzcC0+ZG1hX3J4X2xjaCwKIAkJCQlzcmNfcG9ydCwKIAkJCQlPTUFQX0RNQV9BTU9ERV9DT05TVEFOVCwKLQkJCQltY2JzcFtpZF0ucGh5c19iYXNlICsgT01BUF9NQ0JTUF9SRUdfRFJSMSwKKwkJCQltY2JzcC0+cGh5c19iYXNlICsgT01BUF9NQ0JTUF9SRUdfRFJSMSwKIAkJCQkwLCAwKTsKIAotCW9tYXBfc2V0X2RtYV9kZXN0X3BhcmFtcyhtY2JzcFtpZF0uZG1hX3J4X2xjaCwKKwlvbWFwX3NldF9kbWFfZGVzdF9wYXJhbXMobWNic3AtPmRtYV9yeF9sY2gsCiAJCQkJCWRlc3RfcG9ydCwKIAkJCQkJT01BUF9ETUFfQU1PREVfUE9TVF9JTkMsCiAJCQkJCWJ1ZmZlciwKIAkJCQkJMCwgMCk7CiAKLQlvbWFwX3N0YXJ0X2RtYShtY2JzcFtpZF0uZG1hX3J4X2xjaCk7Ci0Jd2FpdF9mb3JfY29tcGxldGlvbigmKG1jYnNwW2lkXS5yeF9kbWFfY29tcGxldGlvbikpOworCW9tYXBfc3RhcnRfZG1hKG1jYnNwLT5kbWFfcnhfbGNoKTsKKwl3YWl0X2Zvcl9jb21wbGV0aW9uKCZtY2JzcC0+cnhfZG1hX2NvbXBsZXRpb24pOwogCiAJcmV0dXJuIDA7CiB9CkBAIC03MzcsMTIgKzc5NSwxNCBAQAogdm9pZCBvbWFwX21jYnNwX3NldF9zcGlfbW9kZSh1bnNpZ25lZCBpbnQgaWQsCiAJCQkJY29uc3Qgc3RydWN0IG9tYXBfbWNic3Bfc3BpX2NmZyAqc3BpX2NmZykKIHsKKwlzdHJ1Y3Qgb21hcF9tY2JzcCAqbWNic3A7CiAJc3RydWN0IG9tYXBfbWNic3BfcmVnX2NmZyBtY2JzcF9jZmc7CiAKIAlpZiAoIW9tYXBfbWNic3BfY2hlY2tfdmFsaWRfaWQoaWQpKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiJXM6IEludmFsaWQgaWQgKCVkKVxuIiwgX19mdW5jX18sIGlkICsgMSk7CiAJCXJldHVybjsKIAl9CisJbWNic3AgPSBpZF90b19tY2JzcF9wdHIoaWQpOwogCiAJbWVtc2V0KCZtY2JzcF9jZmcsIDAsIHNpemVvZihzdHJ1Y3Qgb21hcF9tY2JzcF9yZWdfY2ZnKSk7CiAKQEAgLTgwMyw5ICs4NjMsMTAgQEAKICAqIE1jQlNQMSBhbmQgTWNCU1AzIGFyZSBkaXJlY3RseSBtYXBwZWQgb24gMTYxMCBhbmQgMTUxMC4KICAqIDczMCBoYXMgb25seSAyIE1jQlNQLCBhbmQgYm90aCBvZiB0aGVtIGFyZSBNUFUgcGVyaXBoZXJhbHMuCiAgKi8KLXN0YXRpYyBpbnQgX19pbml0IG9tYXBfbWNic3BfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3N0YXRpYyBpbnQgX19kZXZpbml0IG9tYXBfbWNic3BfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlzdHJ1Y3Qgb21hcF9tY2JzcF9wbGF0Zm9ybV9kYXRhICpwZGF0YSA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOworCXN0cnVjdCBvbWFwX21jYnNwICptY2JzcDsKIAlpbnQgaWQgPSBwZGV2LT5pZCAtIDE7CiAJaW50IHJldCA9IDA7CiAKQEAgLTgxOCw0NyArODc5LDYzIEBACiAKIAlkZXZfZGJnKCZwZGV2LT5kZXYsICJJbml0aWFsaXppbmcgT01BUCBNY0JTUCAoJWQpLlxuIiwgcGRldi0+aWQpOwogCi0JaWYgKGlkID49IE9NQVBfTUFYX01DQlNQX0NPVU5UKSB7CisJaWYgKGlkID49IG9tYXBfbWNic3BfY291bnQpIHsKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAiSW52YWxpZCBNY0JTUCBkZXZpY2UgaWQgKCVkKVxuIiwgaWQpOwogCQlyZXQgPSAtRUlOVkFMOwogCQlnb3RvIGV4aXQ7CiAJfQogCi0Jc3Bpbl9sb2NrX2luaXQoJm1jYnNwW2lkXS5sb2NrKTsKLQltY2JzcFtpZF0uaWQgPSBpZCArIDE7Ci0JbWNic3BbaWRdLmZyZWUgPSAxOwotCW1jYnNwW2lkXS5kbWFfdHhfbGNoID0gLTE7Ci0JbWNic3BbaWRdLmRtYV9yeF9sY2ggPSAtMTsKLQotCW1jYnNwW2lkXS5waHlzX2Jhc2UgPSBwZGF0YS0+cGh5c19iYXNlOwotCW1jYnNwW2lkXS5pb19iYXNlID0gcGRhdGEtPnZpcnRfYmFzZTsKLQkvKiBEZWZhdWx0IEkvTyBpcyBJUlEgYmFzZWQgKi8KLQltY2JzcFtpZF0uaW9fdHlwZSA9IE9NQVBfTUNCU1BfSVJRX0lPOwotCW1jYnNwW2lkXS50eF9pcnEgPSBwZGF0YS0+dHhfaXJxOwotCW1jYnNwW2lkXS5yeF9pcnEgPSBwZGF0YS0+cnhfaXJxOwotCW1jYnNwW2lkXS5kbWFfcnhfc3luYyA9IHBkYXRhLT5kbWFfcnhfc3luYzsKLQltY2JzcFtpZF0uZG1hX3R4X3N5bmMgPSBwZGF0YS0+ZG1hX3R4X3N5bmM7Ci0KLQlpZiAocGRhdGEtPmNsa19uYW1lKQotCQltY2JzcFtpZF0uY2xrID0gY2xrX2dldCgmcGRldi0+ZGV2LCBwZGF0YS0+Y2xrX25hbWUpOwotCWlmIChJU19FUlIobWNic3BbaWRdLmNsaykpIHsKLQkJbWNic3BbaWRdLmZyZWUgPSAwOwotCQlkZXZfZXJyKCZwZGV2LT5kZXYsCi0JCQkiSW52YWxpZCBjbG9jayBjb25maWd1cmF0aW9uIGZvciBNY0JTUCVkLlxuIiwKLQkJCW1jYnNwW2lkXS5pZCk7Ci0JCXJldCA9IC1FSU5WQUw7CisJbWNic3AgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgb21hcF9tY2JzcCksIEdGUF9LRVJORUwpOworCWlmICghbWNic3ApIHsKKwkJcmV0ID0gLUVOT01FTTsKIAkJZ290byBleGl0OwogCX0KKwltY2JzcF9wdHJbaWRdID0gbWNic3A7CiAKLQltY2JzcFtpZF0ucGRhdGEgPSBwZGF0YTsKLQltY2JzcFtpZF0uZGV2ID0gJnBkZXYtPmRldjsKLQlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCAmbWNic3BbaWRdKTsKKwlzcGluX2xvY2tfaW5pdCgmbWNic3AtPmxvY2spOworCW1jYnNwLT5pZCA9IGlkICsgMTsKKwltY2JzcC0+ZnJlZSA9IDE7CisJbWNic3AtPmRtYV90eF9sY2ggPSAtMTsKKwltY2JzcC0+ZG1hX3J4X2xjaCA9IC0xOwogCisJbWNic3AtPnBoeXNfYmFzZSA9IHBkYXRhLT5waHlzX2Jhc2U7CisJbWNic3AtPmlvX2Jhc2UgPSBpb3JlbWFwKHBkYXRhLT5waHlzX2Jhc2UsIFNaXzRLKTsKKwlpZiAoIW1jYnNwLT5pb19iYXNlKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gZXJyX2lvcmVtYXA7CisJfQorCisJLyogRGVmYXVsdCBJL08gaXMgSVJRIGJhc2VkICovCisJbWNic3AtPmlvX3R5cGUgPSBPTUFQX01DQlNQX0lSUV9JTzsKKwltY2JzcC0+dHhfaXJxID0gcGRhdGEtPnR4X2lycTsKKwltY2JzcC0+cnhfaXJxID0gcGRhdGEtPnJ4X2lycTsKKwltY2JzcC0+ZG1hX3J4X3N5bmMgPSBwZGF0YS0+ZG1hX3J4X3N5bmM7CisJbWNic3AtPmRtYV90eF9zeW5jID0gcGRhdGEtPmRtYV90eF9zeW5jOworCisJaWYgKHBkYXRhLT5jbGtfbmFtZSkKKwkJbWNic3AtPmNsayA9IGNsa19nZXQoJnBkZXYtPmRldiwgcGRhdGEtPmNsa19uYW1lKTsKKwlpZiAoSVNfRVJSKG1jYnNwLT5jbGspKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwKKwkJCSJJbnZhbGlkIGNsb2NrIGNvbmZpZ3VyYXRpb24gZm9yIE1jQlNQJWQuXG4iLAorCQkJbWNic3AtPmlkKTsKKwkJcmV0ID0gUFRSX0VSUihtY2JzcC0+Y2xrKTsKKwkJZ290byBlcnJfY2xrOworCX0KKworCW1jYnNwLT5wZGF0YSA9IHBkYXRhOworCW1jYnNwLT5kZXYgPSAmcGRldi0+ZGV2OworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIG1jYnNwKTsKKwlyZXR1cm4gMDsKKworZXJyX2NsazoKKwlpb3VubWFwKG1jYnNwLT5pb19iYXNlKTsKK2Vycl9pb3JlbWFwOgorCW1jYnNwLT5mcmVlID0gMDsKIGV4aXQ6CiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBvbWFwX21jYnNwX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQorc3RhdGljIGludCBfX2RldmV4aXQgb21hcF9tY2JzcF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlzdHJ1Y3Qgb21hcF9tY2JzcCAqbWNic3AgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKIApAQCAtODcyLDYgKzk0OSw4IEBACiAJCWNsa19kaXNhYmxlKG1jYnNwLT5jbGspOwogCQljbGtfcHV0KG1jYnNwLT5jbGspOwogCisJCWlvdW5tYXAobWNic3AtPmlvX2Jhc2UpOworCiAJCW1jYnNwLT5jbGsgPSBOVUxMOwogCQltY2JzcC0+ZnJlZSA9IDA7CiAJCW1jYnNwLT5kZXYgPSBOVUxMOwpAQCAtODgyLDcgKzk2MSw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG9tYXBfbWNic3BfZHJpdmVyID0gewogCS5wcm9iZQkJPSBvbWFwX21jYnNwX3Byb2JlLAotCS5yZW1vdmUJCT0gb21hcF9tY2JzcF9yZW1vdmUsCisJLnJlbW92ZQkJPSBfX2RldmV4aXRfcChvbWFwX21jYnNwX3JlbW92ZSksCiAJLmRyaXZlcgkJPSB7CiAJCS5uYW1lCT0gIm9tYXAtbWNic3AiLAogCX0sCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvc3JhbS5jIGIvYXJjaC9hcm0vcGxhdC1vbWFwL3NyYW0uYwppbmRleCBlMDAwM2UwLi45ZjlhOTIxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvc3JhbS5jCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9zcmFtLmMKQEAgLTI3MSw3ICsyNzEsNyBAQAogI2RlZmluZSBvbWFwMV9zcmFtX2luaXQoKQlkbyB7fSB3aGlsZSAoMCkKICNlbmRpZgogCi0jaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMikgfHwgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMykKKyNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAyKQogCiBzdGF0aWMgdm9pZCAoKl9vbWFwMl9zcmFtX2Rkcl9pbml0KSh1MzIgKnNsb3dfZGxsX2N0cmwsIHUzMiBmYXN0X2RsbF9jdHJsLAogCQkJICAgICAgdTMyIGJhc2VfY3MsIHUzMiBmb3JjZV91bmxvY2spOwpAQCAtMzUyLDIzICszNTIsMTkgQEAKIAogI2lmZGVmIENPTkZJR19BUkNIX09NQVAzCiAKLXN0YXRpYyB1MzIgKCpfb21hcDJfc3JhbV9yZXByb2dyYW1fZ3BtYykodTMyIHBlcmZfbGV2ZWwpOwotdTMyIG9tYXAyX3NyYW1fcmVwcm9ncmFtX2dwbWModTMyIHBlcmZfbGV2ZWwpCitzdGF0aWMgdTMyICgqX29tYXAzX3NyYW1fY29uZmlndXJlX2NvcmVfZHBsbCkodTMyIHNkcmNfcmZyX2N0cmwsCisJCQkJCSAgICAgIHUzMiBzZHJjX2FjdGltX2N0cmxhLAorCQkJCQkgICAgICB1MzIgc2RyY19hY3RpbV9jdHJsYiwKKwkJCQkJICAgICAgdTMyIG0yKTsKK3UzMiBvbWFwM19jb25maWd1cmVfY29yZV9kcGxsKHUzMiBzZHJjX3Jmcl9jdHJsLCB1MzIgc2RyY19hY3RpbV9jdHJsYSwKKwkJCSAgICAgIHUzMiBzZHJjX2FjdGltX2N0cmxiLCB1MzIgbTIpCiB7Ci0JaWYgKCFfb21hcDJfc3JhbV9yZXByb2dyYW1fZ3BtYykKKwlpZiAoIV9vbWFwM19zcmFtX2NvbmZpZ3VyZV9jb3JlX2RwbGwpCiAJCW9tYXBfc3JhbV9lcnJvcigpOwogCi0JcmV0dXJuIF9vbWFwMl9zcmFtX3JlcHJvZ3JhbV9ncG1jKHBlcmZfbGV2ZWwpOwotfQotCi1zdGF0aWMgdTMyICgqX29tYXAyX3NyYW1fY29uZmlndXJlX2NvcmVfZHBsbCkodTMyIG0sIHUzMiBuLAotCQkJCQkJdTMyIGZyZXFzZWwsIHUzMiBtMik7Ci11MzIgb21hcDJfc3JhbV9jb25maWd1cmVfY29yZV9kcGxsKHUzMiBtLCB1MzIgbiwgdTMyIGZyZXFzZWwsIHUzMiBtMikKLXsKLQlpZiAoIV9vbWFwMl9zcmFtX2NvbmZpZ3VyZV9jb3JlX2RwbGwpCi0JCW9tYXBfc3JhbV9lcnJvcigpOwotCi0JcmV0dXJuIF9vbWFwMl9zcmFtX2NvbmZpZ3VyZV9jb3JlX2RwbGwobSwgbiwgZnJlcXNlbCwgbTIpOworCXJldHVybiBfb21hcDNfc3JhbV9jb25maWd1cmVfY29yZV9kcGxsKHNkcmNfcmZyX2N0cmwsCisJCQkJCSAgICAgICBzZHJjX2FjdGltX2N0cmxhLAorCQkJCQkgICAgICAgc2RyY19hY3RpbV9jdHJsYiwgbTIpOwogfQogCiAvKiBSRVZJU0lUOiBTaG91bGQgdGhpcyBiZSBzYW1lIGFzIG9tYXAzNHh4X3NyYW1faW5pdCgpIGFmdGVyIG9mZi1pZGxlPyAqLwpAQCAtMzc2LDMxICszNzIsMTYgQEAKIHsKIAlvbWFwX3NyYW1fY2VpbCA9IG9tYXBfc3JhbV9iYXNlICsgb21hcF9zcmFtX3NpemU7CiAKLQlfb21hcDJfc3JhbV9yZXByb2dyYW1fZ3BtYyA9IG9tYXBfc3JhbV9wdXNoKG9tYXAzNHh4X3NyYW1fcmVwcm9ncmFtX2dwbWMsCi0JCW9tYXAzNHh4X3NyYW1fcmVwcm9ncmFtX2dwbWNfc3opOwotCi0JX29tYXAyX3NyYW1fY29uZmlndXJlX2NvcmVfZHBsbCA9Ci0JCQlvbWFwX3NyYW1fcHVzaChvbWFwMzR4eF9zcmFtX2NvbmZpZ3VyZV9jb3JlX2RwbGwsCi0JCQkJCW9tYXAzNHh4X3NyYW1fY29uZmlndXJlX2NvcmVfZHBsbF9zeik7CisJX29tYXAzX3NyYW1fY29uZmlndXJlX2NvcmVfZHBsbCA9CisJCW9tYXBfc3JhbV9wdXNoKG9tYXAzX3NyYW1fY29uZmlndXJlX2NvcmVfZHBsbCwKKwkJCSAgICAgICBvbWFwM19zcmFtX2NvbmZpZ3VyZV9jb3JlX2RwbGxfc3opOwogfQogCiBpbnQgX19pbml0IG9tYXAzNHh4X3NyYW1faW5pdCh2b2lkKQogewotCV9vbWFwMl9zcmFtX2Rkcl9pbml0ID0gb21hcF9zcmFtX3B1c2gob21hcDM0eHhfc3JhbV9kZHJfaW5pdCwKLQkJCQkJb21hcDM0eHhfc3JhbV9kZHJfaW5pdF9zeik7Ci0KLQlfb21hcDJfc3JhbV9yZXByb2dyYW1fc2RyYyA9IG9tYXBfc3JhbV9wdXNoKG9tYXAzNHh4X3NyYW1fcmVwcm9ncmFtX3NkcmMsCi0JCQkJCW9tYXAzNHh4X3NyYW1fcmVwcm9ncmFtX3NkcmNfc3opOwotCi0JX29tYXAyX3NldF9wcmNtID0gb21hcF9zcmFtX3B1c2gob21hcDM0eHhfc3JhbV9zZXRfcHJjbSwKLQkJCQkJb21hcDM0eHhfc3JhbV9zZXRfcHJjbV9zeik7Ci0KLQlfb21hcDJfc3JhbV9yZXByb2dyYW1fZ3BtYyA9IG9tYXBfc3JhbV9wdXNoKG9tYXAzNHh4X3NyYW1fcmVwcm9ncmFtX2dwbWMsCi0JCQkJCW9tYXAzNHh4X3NyYW1fcmVwcm9ncmFtX2dwbWNfc3opOwotCi0JX29tYXAyX3NyYW1fY29uZmlndXJlX2NvcmVfZHBsbCA9Ci0JCQkJb21hcF9zcmFtX3B1c2gob21hcDM0eHhfc3JhbV9jb25maWd1cmVfY29yZV9kcGxsLAotCQkJCQlvbWFwMzR4eF9zcmFtX2NvbmZpZ3VyZV9jb3JlX2RwbGxfc3opOworCV9vbWFwM19zcmFtX2NvbmZpZ3VyZV9jb3JlX2RwbGwgPQorCQlvbWFwX3NyYW1fcHVzaChvbWFwM19zcmFtX2NvbmZpZ3VyZV9jb3JlX2RwbGwsCisJCQkgICAgICAgb21hcDNfc3JhbV9jb25maWd1cmVfY29yZV9kcGxsX3N6KTsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zM2MvTWFrZWZpbGUgYi9hcmNoL2FybS9wbGF0LXMzYy9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMDNkN2IzCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vcGxhdC1zM2MvTWFrZWZpbGUKQEAgLTAsMCArMSwzIEBACisjIGR1bW15IG1ha2VmaWxlLCBjdXJyZW50bHkganVzdCBpbmNsdWRpbmcgYXNtL2FybS9wbGF0LXMzYy9pbmNsdWRlL3BsYXQKKworb2JqLW4JOj0gZHVtbXkubwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zM2MvaW5jbHVkZS9wbGF0L2RlYnVnLW1hY3JvLlMgYi9hcmNoL2FybS9wbGF0LXMzYy9pbmNsdWRlL3BsYXQvZGVidWctbWFjcm8uUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YWE3ZTJlCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vcGxhdC1zM2MvaW5jbHVkZS9wbGF0L2RlYnVnLW1hY3JvLlMKQEAgLTAsMCArMSw3NSBAQAorLyogbGludXgvaW5jbHVkZS9hc20tYXJtL3BsYXQtczNjL2RlYnVnLW1hY3JvLlMKKyAqCisgKiBDb3B5cmlnaHQgMjAwNSwgMjAwNyBTaW10ZWMgRWxlY3Ryb25pY3MKKyAqCWh0dHA6Ly9hcm1saW51eC5zaW10ZWMuY28udWsvCisgKglCZW4gRG9va3MgPGJlbkBzaW10ZWMuY28udWs+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyovCisKKyNpbmNsdWRlIDxwbGF0L3JlZ3Mtc2VyaWFsLmg+CisKKy8qIFRoZSBTM0MyNDQwIGltcGxlbWVudGF0aW9ucyBhcmUgdXNlZCBieSBkZWZhdWx0IGFzIHRoZXkgYXJlIHRoZQorICogbW9zdCB3aWRlbHkgcmUtdXNlZCAqLworCisJLm1hY3JvIGZpZm9fbGV2ZWxfczNjMjQ0MCByZCwgcngKKwkJbGRyCVxyZCwgWyBccngsICMgUzNDMjQxMF9VRlNUQVQgXQorCQlhbmQJXHJkLCBccmQsICNTM0MyNDQwX1VGU1RBVF9UWE1BU0sKKwkuZW5kbQorCisjaWZuZGVmIGZpZm9fbGV2ZWwKKyNkZWZpbmUgZmlmb19sZXZlbCBmaWZvX2xldmVsX3MzYzI0MTAKKyNlbmRpZgorCisJLm1hY3JvICBmaWZvX2Z1bGxfczNjMjQ0MCByZCwgcngKKwkJbGRyCVxyZCwgWyBccngsICMgUzNDMjQxMF9VRlNUQVQgXQorCQl0c3QJXHJkLCAjUzNDMjQ0MF9VRlNUQVRfVFhGVUxMCisJLmVuZG0KKworI2lmbmRlZiBmaWZvX2Z1bGwKKyNkZWZpbmUgZmlmb19mdWxsIGZpZm9fZnVsbF9zM2MyNDQwCisjZW5kaWYKKworCS5tYWNybwlzZW5kdWFydCxyZCxyeAorCQlzdHJiIAlccmQsIFtccngsICMgUzNDMjQxMF9VVFhIIF0KKwkuZW5kbQorCisJLm1hY3JvCWJ1c3l1YXJ0LCByZCwgcngKKwkJbGRyCVxyZCwgWyBccngsICMgUzNDMjQxMF9VRkNPTiBdCisJCXRzdAlccmQsICNTM0MyNDEwX1VGQ09OX0ZJRk9NT0RFCUAgZmlmbyBlbmFibGVkPworCQliZXEJMTAwMWYJCQkJQAorCQlAIEZJRk8gZW5hYmxlZC4uLgorMTAwMzoKKwkJZmlmb19mdWxsIFxyZCwgXHJ4CisJCWJuZQkxMDAzYgorCQliCTEwMDJmCisKKzEwMDE6CisJCUAgYnVzeSB3YWl0aW5nIGZvciBub24gZmlmbworCQlsZHIJXHJkLCBbIFxyeCwgIyBTM0MyNDEwX1VUUlNUQVQgXQorCQl0c3QJXHJkLCAjUzNDMjQxMF9VVFJTVEFUX1RYRkUKKwkJYmVxCTEwMDFiCisKKzEwMDI6CQlAIGV4aXQgYnVzeXVhcnQKKwkuZW5kbQorCisJLm1hY3JvCXdhaXR1YXJ0LHJkLHJ4CisJCWxkcglccmQsIFsgXHJ4LCAjIFMzQzI0MTBfVUZDT04gXQorCQl0c3QJXHJkLCAjUzNDMjQxMF9VRkNPTl9GSUZPTU9ERQlAIGZpZm8gZW5hYmxlZD8KKwkJYmVxCTEwMDFmCQkJCUAKKwkJQCBGSUZPIGVuYWJsZWQuLi4KKzEwMDM6CisJCWZpZm9fbGV2ZWwgXHJkLCBccngKKwkJdGVxCVxyZCwgIzAKKwkJYm5lCTEwMDNiCisJCWIJMTAwMmYKKzEwMDE6CisJCUAgaWRsZSB3YWl0aW5nIGZvciBub24gZmlmbworCQlsZHIJXHJkLCBbIFxyeCwgIyBTM0MyNDEwX1VUUlNUQVQgXQorCQl0c3QJXHJkLCAjUzNDMjQxMF9VVFJTVEFUX1RYRkUKKwkJYmVxCTEwMDFiCisKKzEwMDI6CQlAIGV4aXQgYnVzeXVhcnQKKwkuZW5kbQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL3BsYXQtczNjL21hcC5oIGIvYXJjaC9hcm0vcGxhdC1zM2MvaW5jbHVkZS9wbGF0L21hcC5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbmNsdWRlL2FzbS1hcm0vcGxhdC1zM2MvbWFwLmgKcmVuYW1lIHRvIGFyY2gvYXJtL3BsYXQtczNjL2luY2x1ZGUvcGxhdC9tYXAuaApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL3BsYXQtczNjL3JlZ3MtYWRjLmggYi9hcmNoL2FybS9wbGF0LXMzYy9pbmNsdWRlL3BsYXQvcmVncy1hZGMuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW5jbHVkZS9hc20tYXJtL3BsYXQtczNjL3JlZ3MtYWRjLmgKcmVuYW1lIHRvIGFyY2gvYXJtL3BsYXQtczNjL2luY2x1ZGUvcGxhdC9yZWdzLWFkYy5oCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vcGxhdC1zM2MvcmVncy1zZXJpYWwuaCBiL2FyY2gvYXJtL3BsYXQtczNjL2luY2x1ZGUvcGxhdC9yZWdzLXNlcmlhbC5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbmNsdWRlL2FzbS1hcm0vcGxhdC1zM2MvcmVncy1zZXJpYWwuaApyZW5hbWUgdG8gYXJjaC9hcm0vcGxhdC1zM2MvaW5jbHVkZS9wbGF0L3JlZ3Mtc2VyaWFsLmgKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9wbGF0LXMzYy9yZWdzLXRpbWVyLmggYi9hcmNoL2FybS9wbGF0LXMzYy9pbmNsdWRlL3BsYXQvcmVncy10aW1lci5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbmNsdWRlL2FzbS1hcm0vcGxhdC1zM2MvcmVncy10aW1lci5oCnJlbmFtZSB0byBhcmNoL2FybS9wbGF0LXMzYy9pbmNsdWRlL3BsYXQvcmVncy10aW1lci5oCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXMzYy9pbmNsdWRlL3BsYXQvdW5jb21wcmVzcy5oIGIvYXJjaC9hcm0vcGxhdC1zM2MvaW5jbHVkZS9wbGF0L3VuY29tcHJlc3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZGYwMDZiCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vcGxhdC1zM2MvaW5jbHVkZS9wbGF0L3VuY29tcHJlc3MuaApAQCAtMCwwICsxLDE1NSBAQAorLyogbGludXgvaW5jbHVkZS9hc20tYXJtL3BsYXQtczNjL3VuY29tcHJlc3MuaAorICoKKyAqIENvcHlyaWdodCAyMDAzLCAyMDA3IFNpbXRlYyBFbGVjdHJvbmljcworICoJaHR0cDovL2FybWxpbnV4LnNpbXRlYy5jby51ay8KKyAqCUJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4KKyAqCisgKiBTM0MgLSB1bmNvbXByZXNzIGNvZGUKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorKi8KKworI2lmbmRlZiBfX0FTTV9QTEFUX1VOQ09NUFJFU1NfSAorI2RlZmluZSBfX0FTTV9QTEFUX1VOQ09NUFJFU1NfSAorCit0eXBlZGVmIHVuc2lnbmVkIGludCB1cGZfdDsJLyogY2Fubm90IGluY2x1ZGUgbGludXgvc2VyaWFsX2NvcmUuaCAqLworCisvKiB1YXJ0IHNldHVwICovCisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgZmlmb19tYXNrOworc3RhdGljIHVuc2lnbmVkIGludCBmaWZvX21heDsKKworLyogZm9yd2FyZCBkZWNsZXJhdGlvbnMgKi8KKworc3RhdGljIHZvaWQgYXJjaF9kZXRlY3RfY3B1KHZvaWQpOworCisvKiBkZWZpbmVzIGZvciBVQVJUIHJlZ2lzdGVycyAqLworCisjaW5jbHVkZSA8cGxhdC9yZWdzLXNlcmlhbC5oPgorI2luY2x1ZGUgPGFzbS9wbGF0LXMzYy9yZWdzLXdhdGNoZG9nLmg+CisKKy8qIHdvcmtpbmcgaW4gcGh5c2ljYWwgc3BhY2UuLi4gKi8KKyN1bmRlZiBTM0MyNDEwX1dET0dSRUcKKyNkZWZpbmUgUzNDMjQxMF9XRE9HUkVHKHgpICgoUzNDMjRYWF9QQV9XQVRDSERPRyArICh4KSkpCisKKy8qIGhvdyBtYW55IGJ5dGVzIHdlIGFsbG93IGludG8gdGhlIEZJRk8gYXQgYSB0aW1lIGluIEZJRk8gbW9kZSAqLworI2RlZmluZSBGSUZPX01BWAkgKDE0KQorCisjZGVmaW5lIHVhcnRfYmFzZSBTM0MyNFhYX1BBX1VBUlQgKyAoMHg0MDAwKkNPTkZJR19TM0NfTE9XTEVWRUxfVUFSVF9QT1JUKQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkCit1YXJ0X3dyKHVuc2lnbmVkIGludCByZWcsIHVuc2lnbmVkIGludCB2YWwpCit7CisJdm9sYXRpbGUgdW5zaWduZWQgaW50ICpwdHI7CisKKwlwdHIgPSAodm9sYXRpbGUgdW5zaWduZWQgaW50ICopKHJlZyArIHVhcnRfYmFzZSk7CisJKnB0ciA9IHZhbDsKK30KKworc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgaW50Cit1YXJ0X3JkKHVuc2lnbmVkIGludCByZWcpCit7CisJdm9sYXRpbGUgdW5zaWduZWQgaW50ICpwdHI7CisKKwlwdHIgPSAodm9sYXRpbGUgdW5zaWduZWQgaW50ICopKHJlZyArIHVhcnRfYmFzZSk7CisJcmV0dXJuICpwdHI7Cit9CisKKy8qIHdlIGNhbiBkZWFsIHdpdGggdGhlIGNhc2UgdGhlIFVBUlRzIGFyZSBiZWluZyBydW4KKyAqIGluIEZJRk8gbW9kZSwgc28gdGhhdCB3ZSBkb24ndCBob2xkIHVwIG91ciBleGVjdXRpb24KKyAqIHdhaXRpbmcgZm9yIHR4IHRvIGhhcHBlbi4uLgorKi8KKworc3RhdGljIHZvaWQgcHV0YyhpbnQgY2gpCit7CisJaWYgKHVhcnRfcmQoUzNDMjQxMF9VRkNPTikgJiBTM0MyNDEwX1VGQ09OX0ZJRk9NT0RFKSB7CisJCWludCBsZXZlbDsKKworCQl3aGlsZSAoMSkgeworCQkJbGV2ZWwgPSB1YXJ0X3JkKFMzQzI0MTBfVUZTVEFUKTsKKwkJCWxldmVsICY9IGZpZm9fbWFzazsKKworCQkJaWYgKGxldmVsIDwgZmlmb19tYXgpCisJCQkJYnJlYWs7CisJCX0KKworCX0gZWxzZSB7CisJCS8qIG5vdCB1c2luZyBmaWZvcyAqLworCisJCXdoaWxlICgodWFydF9yZChTM0MyNDEwX1VUUlNUQVQpICYgUzNDMjQxMF9VVFJTVEFUX1RYRSkgIT0gUzNDMjQxMF9VVFJTVEFUX1RYRSkKKwkJCWJhcnJpZXIoKTsKKwl9CisKKwkvKiB3cml0ZSBieXRlIHRvIHRyYW5zbWlzc2lvbiByZWdpc3RlciAqLworCXVhcnRfd3IoUzNDMjQxMF9VVFhILCBjaCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBmbHVzaCh2b2lkKQoreworfQorCisjZGVmaW5lIF9fcmF3X3dyaXRlbChkLGFkKSBkbyB7ICooKHZvbGF0aWxlIHVuc2lnbmVkIGludCAqKShhZCkpID0gKGQpOyB9IHdoaWxlKDApCisKKy8qIENPTkZJR19TM0NfQk9PVF9XQVRDSERPRworICoKKyAqIFNpbXBsZSBib290LXRpbWUgd2F0Y2hkb2cgc2V0dXAsIHRvIHJlYm9vdCB0aGUgc3lzdGVtIGlmIHRoZXJlIGlzCisgKiBhbnkgcHJvYmxlbSB3aXRoIHRoZSBib290IHByb2Nlc3MKKyovCisKKyNpZmRlZiBDT05GSUdfUzNDX0JPT1RfV0FUQ0hET0cKKworI2RlZmluZSBXRE9HX0NPVU5UICgweGZmMDApCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBhcmNoX2RlY29tcF93ZG9nKHZvaWQpCit7CisJX19yYXdfd3JpdGVsKFdET0dfQ09VTlQsIFMzQzI0MTBfV1RDTlQpOworfQorCitzdGF0aWMgdm9pZCBhcmNoX2RlY29tcF93ZG9nX3N0YXJ0KHZvaWQpCit7CisJX19yYXdfd3JpdGVsKFdET0dfQ09VTlQsIFMzQzI0MTBfV1REQVQpOworCV9fcmF3X3dyaXRlbChXRE9HX0NPVU5ULCBTM0MyNDEwX1dUQ05UKTsKKwlfX3Jhd193cml0ZWwoUzNDMjQxMF9XVENPTl9FTkFCTEUgfCBTM0MyNDEwX1dUQ09OX0RJVjEyOCB8IFMzQzI0MTBfV1RDT05fUlNURU4gfCBTM0MyNDEwX1dUQ09OX1BSRVNDQUxFKDB4ODApLCBTM0MyNDEwX1dUQ09OKTsKK30KKworI2Vsc2UKKyNkZWZpbmUgYXJjaF9kZWNvbXBfd2RvZ19zdGFydCgpCisjZGVmaW5lIGFyY2hfZGVjb21wX3dkb2coKQorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfUzNDX0JPT1RfRVJST1JfUkVTRVQKKworc3RhdGljIHZvaWQgYXJjaF9kZWNvbXBfZXJyb3IoY29uc3QgY2hhciAqeCkKK3sKKwlwdXRzdHIoIlxuXG4iKTsKKwlwdXRzdHIoeCk7CisJcHV0c3RyKCJcblxuIC0tIFN5c3RlbSByZXNldHRpbmdcbiIpOworCisJX19yYXdfd3JpdGVsKDB4NDAwMCwgUzNDMjQxMF9XVERBVCk7CisJX19yYXdfd3JpdGVsKDB4NDAwMCwgUzNDMjQxMF9XVENOVCk7CisJX19yYXdfd3JpdGVsKFMzQzI0MTBfV1RDT05fRU5BQkxFIHwgUzNDMjQxMF9XVENPTl9ESVYxMjggfCBTM0MyNDEwX1dUQ09OX1JTVEVOIHwgUzNDMjQxMF9XVENPTl9QUkVTQ0FMRSgweDQwKSwgUzNDMjQxMF9XVENPTik7CisKKwl3aGlsZSgxKTsKK30KKworI2RlZmluZSBhcmNoX2Vycm9yIGFyY2hfZGVjb21wX2Vycm9yCisjZW5kaWYKKworc3RhdGljIHZvaWQgZXJyb3IoY2hhciAqZXJyKTsKKworc3RhdGljIHZvaWQKK2FyY2hfZGVjb21wX3NldHVwKHZvaWQpCit7CisJLyogd2UgbWF5IG5lZWQgdG8gc2V0dXAgdGhlIHVhcnQocykgaGVyZSBpZiB3ZSBhcmUgbm90IHJ1bm5pbmcKKwkgKiBvbiBhbiBCQVNULi4uIHRoZSBCQVNUIHdpbGwgaGF2ZSBsZWZ0IHRoZSB1YXJ0cyBjb25maWd1cmVkCisJICogYWZ0ZXIgY2FsbGluZyBsaW51eC4KKwkgKi8KKworCWFyY2hfZGV0ZWN0X2NwdSgpOworCWFyY2hfZGVjb21wX3dkb2dfc3RhcnQoKTsKK30KKworCisjZW5kaWYgLyogX19BU01fUExBVF9VTkNPTVBSRVNTX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9jbG9jay5jIGIvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2Nsb2NrLmMKaW5kZXggNDAwNTQxMy4uYTAwNWRkYiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2Nsb2NrLmMKKysrIGIvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2Nsb2NrLmMKQEAgLTQ3LDggKzQ3LDggQEAKICNpbmNsdWRlIDxtYWNoL3JlZ3MtY2xvY2suaD4KICNpbmNsdWRlIDxtYWNoL3JlZ3MtZ3Bpby5oPgogCi0jaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC9jbG9jay5oPgotI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvY3B1Lmg+CisjaW5jbHVkZSA8cGxhdC9jbG9jay5oPgorI2luY2x1ZGUgPHBsYXQvY3B1Lmg+CiAKIC8qIGNsb2NrIGluZm9ybWF0aW9uICovCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9jb21tb24tc21kay5jIGIvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2NvbW1vbi1zbWRrLmMKaW5kZXggZDUyOGY0Ni4uMzA5ODczNiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2NvbW1vbi1zbWRrLmMKKysrIGIvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2NvbW1vbi1zbWRrLmMKQEAgLTQwLDkgKzQwLDkgQEAKIAogI2luY2x1ZGUgPGFzbS9wbGF0LXMzYy9uYW5kLmg+CiAKLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L2NvbW1vbi1zbWRrLmg+Ci0jaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC9kZXZzLmg+Ci0jaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC9wbS5oPgorI2luY2x1ZGUgPHBsYXQvY29tbW9uLXNtZGsuaD4KKyNpbmNsdWRlIDxwbGF0L2RldnMuaD4KKyNpbmNsdWRlIDxwbGF0L3BtLmg+CiAKIC8qIExFRCBkZXZpY2VzICovCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9jcHUuYyBiL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9jcHUuYwppbmRleCA5YzYwN2JiLi4yMmEzMjk1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LXMzYzI0eHgvY3B1LmMKKysrIGIvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2NwdS5jCkBAIC00MiwxOCArNDIsMTggQEAKICNpbmNsdWRlIDxtYWNoL3N5c3RlbS1yZXNldC5oPgogCiAjaW5jbHVkZSA8bWFjaC9yZWdzLWdwaW8uaD4KLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MvcmVncy1zZXJpYWwuaD4KKyNpbmNsdWRlIDxwbGF0L3JlZ3Mtc2VyaWFsLmg+CiAKLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L2NwdS5oPgotI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvZGV2cy5oPgotI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvY2xvY2suaD4KLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L3MzYzI0MDAuaD4KLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L3MzYzI0MTAuaD4KLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L3MzYzI0MTIuaD4KKyNpbmNsdWRlIDxwbGF0L2NwdS5oPgorI2luY2x1ZGUgPHBsYXQvZGV2cy5oPgorI2luY2x1ZGUgPHBsYXQvY2xvY2suaD4KKyNpbmNsdWRlIDxwbGF0L3MzYzI0MDAuaD4KKyNpbmNsdWRlIDxwbGF0L3MzYzI0MTAuaD4KKyNpbmNsdWRlIDxwbGF0L3MzYzI0MTIuaD4KICNpbmNsdWRlICJzM2MyNDR4LmgiCi0jaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC9zM2MyNDQwLmg+Ci0jaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC9zM2MyNDQyLmg+Ci0jaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC9zM2MyNDQzLmg+CisjaW5jbHVkZSA8cGxhdC9zM2MyNDQwLmg+CisjaW5jbHVkZSA8cGxhdC9zM2MyNDQyLmg+CisjaW5jbHVkZSA8cGxhdC9zM2MyNDQzLmg+CiAKIHN0cnVjdCBjcHVfdGFibGUgewogCXVuc2lnbmVkIGxvbmcJaWRjb2RlOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2RldnMuYyBiL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9kZXZzLmMKaW5kZXggNmIxM2I1NC4uZTkzZjhiZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2RldnMuYworKysgYi9hcmNoL2FybS9wbGF0LXMzYzI0eHgvZGV2cy5jCkBAIC0yOCwxMSArMjgsMTEgQEAKICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CiAjaW5jbHVkZSA8YXNtL2lycS5oPgogCi0jaW5jbHVkZSA8YXNtL3BsYXQtczNjL3JlZ3Mtc2VyaWFsLmg+CisjaW5jbHVkZSA8cGxhdC9yZWdzLXNlcmlhbC5oPgogI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvdWRjLmg+CiAKLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L2RldnMuaD4KLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L2NwdS5oPgorI2luY2x1ZGUgPHBsYXQvZGV2cy5oPgorI2luY2x1ZGUgPHBsYXQvY3B1Lmg+CiAjaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC9yZWdzLXNwaS5oPgogCiAvKiBTZXJpYWwgcG9ydCByZWdpc3RyYXRpb25zICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXMzYzI0eHgvZG1hLmMgYi9hcmNoL2FybS9wbGF0LXMzYzI0eHgvZG1hLmMKaW5kZXggZDYzNDQ0Ni4uMWJhZjk0MSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2RtYS5jCisrKyBiL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9kbWEuYwpAQCAtMzYsNyArMzYsNyBAQAogI2luY2x1ZGUgPGFzbS9tYWNoL2RtYS5oPgogI2luY2x1ZGUgPG1hY2gvbWFwLmg+CiAKLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L2RtYS5oPgorI2luY2x1ZGUgPHBsYXQvZG1hLmg+CiAKIC8qIGlvIG1hcCBmb3IgZG1hICovCiBzdGF0aWMgdm9pZCBfX2lvbWVtICpkbWFfYmFzZTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9wbGF0LXMzYzI0eHgvY2xvY2suaCBiL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9pbmNsdWRlL3BsYXQvY2xvY2suaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW5jbHVkZS9hc20tYXJtL3BsYXQtczNjMjR4eC9jbG9jay5oCnJlbmFtZSB0byBhcmNoL2FybS9wbGF0LXMzYzI0eHgvaW5jbHVkZS9wbGF0L2Nsb2NrLmgKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9wbGF0LXMzYzI0eHgvY29tbW9uLXNtZGsuaCBiL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9pbmNsdWRlL3BsYXQvY29tbW9uLXNtZGsuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW5jbHVkZS9hc20tYXJtL3BsYXQtczNjMjR4eC9jb21tb24tc21kay5oCnJlbmFtZSB0byBhcmNoL2FybS9wbGF0LXMzYzI0eHgvaW5jbHVkZS9wbGF0L2NvbW1vbi1zbWRrLmgKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9wbGF0LXMzYzI0eHgvY3B1LmggYi9hcmNoL2FybS9wbGF0LXMzYzI0eHgvaW5jbHVkZS9wbGF0L2NwdS5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbmNsdWRlL2FzbS1hcm0vcGxhdC1zM2MyNHh4L2NwdS5oCnJlbmFtZSB0byBhcmNoL2FybS9wbGF0LXMzYzI0eHgvaW5jbHVkZS9wbGF0L2NwdS5oCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vcGxhdC1zM2MyNHh4L2RldnMuaCBiL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9pbmNsdWRlL3BsYXQvZGV2cy5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbmNsdWRlL2FzbS1hcm0vcGxhdC1zM2MyNHh4L2RldnMuaApyZW5hbWUgdG8gYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2luY2x1ZGUvcGxhdC9kZXZzLmgKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9wbGF0LXMzYzI0eHgvZG1hLmggYi9hcmNoL2FybS9wbGF0LXMzYzI0eHgvaW5jbHVkZS9wbGF0L2RtYS5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbmNsdWRlL2FzbS1hcm0vcGxhdC1zM2MyNHh4L2RtYS5oCnJlbmFtZSB0byBhcmNoL2FybS9wbGF0LXMzYzI0eHgvaW5jbHVkZS9wbGF0L2RtYS5oCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vcGxhdC1zM2MyNHh4L2lycS5oIGIvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2luY2x1ZGUvcGxhdC9pcnEuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW5jbHVkZS9hc20tYXJtL3BsYXQtczNjMjR4eC9pcnEuaApyZW5hbWUgdG8gYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2luY2x1ZGUvcGxhdC9pcnEuaApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL3BsYXQtczNjMjR4eC9wbS5oIGIvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2luY2x1ZGUvcGxhdC9wbS5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbmNsdWRlL2FzbS1hcm0vcGxhdC1zM2MyNHh4L3BtLmgKcmVuYW1lIHRvIGFyY2gvYXJtL3BsYXQtczNjMjR4eC9pbmNsdWRlL3BsYXQvcG0uaApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL3BsYXQtczNjMjR4eC9zM2MyNDAwLmggYi9hcmNoL2FybS9wbGF0LXMzYzI0eHgvaW5jbHVkZS9wbGF0L3MzYzI0MDAuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW5jbHVkZS9hc20tYXJtL3BsYXQtczNjMjR4eC9zM2MyNDAwLmgKcmVuYW1lIHRvIGFyY2gvYXJtL3BsYXQtczNjMjR4eC9pbmNsdWRlL3BsYXQvczNjMjQwMC5oCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vcGxhdC1zM2MyNHh4L3MzYzI0MTAuaCBiL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9pbmNsdWRlL3BsYXQvczNjMjQxMC5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbmNsdWRlL2FzbS1hcm0vcGxhdC1zM2MyNHh4L3MzYzI0MTAuaApyZW5hbWUgdG8gYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2luY2x1ZGUvcGxhdC9zM2MyNDEwLmgKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9wbGF0LXMzYzI0eHgvczNjMjQxMi5oIGIvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2luY2x1ZGUvcGxhdC9zM2MyNDEyLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGluY2x1ZGUvYXNtLWFybS9wbGF0LXMzYzI0eHgvczNjMjQxMi5oCnJlbmFtZSB0byBhcmNoL2FybS9wbGF0LXMzYzI0eHgvaW5jbHVkZS9wbGF0L3MzYzI0MTIuaApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL3BsYXQtczNjMjR4eC9zM2MyNDQwLmggYi9hcmNoL2FybS9wbGF0LXMzYzI0eHgvaW5jbHVkZS9wbGF0L3MzYzI0NDAuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW5jbHVkZS9hc20tYXJtL3BsYXQtczNjMjR4eC9zM2MyNDQwLmgKcmVuYW1lIHRvIGFyY2gvYXJtL3BsYXQtczNjMjR4eC9pbmNsdWRlL3BsYXQvczNjMjQ0MC5oCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vcGxhdC1zM2MyNHh4L3MzYzI0NDIuaCBiL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9pbmNsdWRlL3BsYXQvczNjMjQ0Mi5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbmNsdWRlL2FzbS1hcm0vcGxhdC1zM2MyNHh4L3MzYzI0NDIuaApyZW5hbWUgdG8gYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2luY2x1ZGUvcGxhdC9zM2MyNDQyLmgKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9wbGF0LXMzYzI0eHgvczNjMjQ0My5oIGIvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2luY2x1ZGUvcGxhdC9zM2MyNDQzLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGluY2x1ZGUvYXNtLWFybS9wbGF0LXMzYzI0eHgvczNjMjQ0My5oCnJlbmFtZSB0byBhcmNoL2FybS9wbGF0LXMzYzI0eHgvaW5jbHVkZS9wbGF0L3MzYzI0NDMuaApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2lycS5jIGIvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2lycS5jCmluZGV4IDU5MGZjNWEuLjk2M2Y3YTQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9pcnEuYworKysgYi9hcmNoL2FybS9wbGF0LXMzYzI0eHgvaXJxLmMKQEAgLTY1LDkgKzY1LDkgQEAKICNpbmNsdWRlIDxtYWNoL3JlZ3MtaXJxLmg+CiAjaW5jbHVkZSA8bWFjaC9yZWdzLWdwaW8uaD4KIAotI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvY3B1Lmg+Ci0jaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC9wbS5oPgotI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvaXJxLmg+CisjaW5jbHVkZSA8cGxhdC9jcHUuaD4KKyNpbmNsdWRlIDxwbGF0L3BtLmg+CisjaW5jbHVkZSA8cGxhdC9pcnEuaD4KIAogLyogd2FrZXVwIGlycSBjb250cm9sICovCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9wbS1zaW10ZWMuYyBiL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9wbS1zaW10ZWMuYwppbmRleCAwYTA3NGQzLi4yMWRmYTc0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LXMzYzI0eHgvcG0tc2ltdGVjLmMKKysrIGIvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L3BtLXNpbXRlYy5jCkBAIC0zMyw3ICszMyw3IEBACiAKICNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgogCi0jaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC9wbS5oPgorI2luY2x1ZGUgPHBsYXQvcG0uaD4KIAogI2RlZmluZSBDT1BZUklHSFQgIiwgKGMpIDIwMDUgU2ltdGVjIEVsZWN0cm9uaWNzIgogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXMzYzI0eHgvcG0uYyBiL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9wbS5jCmluZGV4IGQzOTM0YjEuLjhlZmI1N2EgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9wbS5jCisrKyBiL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9wbS5jCkBAIC00MCw3ICs0MCw3IEBACiAjaW5jbHVkZSA8YXNtL2NhY2hlZmx1c2guaD4KICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CiAKLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MvcmVncy1zZXJpYWwuaD4KKyNpbmNsdWRlIDxwbGF0L3JlZ3Mtc2VyaWFsLmg+CiAjaW5jbHVkZSA8bWFjaC9yZWdzLWNsb2NrLmg+CiAjaW5jbHVkZSA8bWFjaC9yZWdzLWdwaW8uaD4KICNpbmNsdWRlIDxtYWNoL3JlZ3MtbWVtLmg+CkBAIC00OCw3ICs0OCw3IEBACiAKICNpbmNsdWRlIDxhc20vbWFjaC90aW1lLmg+CiAKLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L3BtLmg+CisjaW5jbHVkZSA8cGxhdC9wbS5oPgogCiAvKiBmb3IgZXh0ZXJuYWwgdXNlICovCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9wd20tY2xvY2suYyBiL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9wd20tY2xvY2suYwppbmRleCAzMDZjYzljLi5iOGU4NTRmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LXMzYzI0eHgvcHdtLWNsb2NrLmMKKysrIGIvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L3B3bS1jbG9jay5jCkBAIC0yNCwxMCArMjQsMTAgQEAKICNpbmNsdWRlIDxtYWNoL3JlZ3MtY2xvY2suaD4KICNpbmNsdWRlIDxtYWNoL3JlZ3MtZ3Bpby5oPgogCi0jaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC9jbG9jay5oPgotI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvY3B1Lmg+CisjaW5jbHVkZSA8cGxhdC9jbG9jay5oPgorI2luY2x1ZGUgPHBsYXQvY3B1Lmg+CiAKLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MvcmVncy10aW1lci5oPgorI2luY2x1ZGUgPHBsYXQvcmVncy10aW1lci5oPgogCiAvKiBFYWNoIG9mIHRoZSB0aW1lcnMgMCB0aHJvdWdoIDUgZ28gdGhyb3VnaCB0aGUgZm9sbG93aW5nCiAgKiBjbG9jayB0cmVlLCB3aXRoIHRoZSBpbnB1dHMgZGVwZW5kaW5nIG9uIHRoZSB0aW1lcnMuCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXMzYzI0eHgvcHdtLmMgYi9hcmNoL2FybS9wbGF0LXMzYzI0eHgvcHdtLmMKaW5kZXggN2E5MmM5My4uZmViNzcwZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L3B3bS5jCisrKyBiL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9wd20uYwpAQCAtMTksOCArMTksOCBAQAogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8bGludXgvcHdtLmg+CiAKLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L2RldnMuaD4KLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MvcmVncy10aW1lci5oPgorI2luY2x1ZGUgPHBsYXQvZGV2cy5oPgorI2luY2x1ZGUgPHBsYXQvcmVncy10aW1lci5oPgogCiBzdHJ1Y3QgcHdtX2RldmljZSB7CiAJc3RydWN0IGxpc3RfaGVhZAkgbGlzdDsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9zM2MyNDR4LWNsb2NrLmMgYi9hcmNoL2FybS9wbGF0LXMzYzI0eHgvczNjMjQ0eC1jbG9jay5jCmluZGV4IDExOTY0N2EuLjdjMDk3NzMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9zM2MyNDR4LWNsb2NrLmMKKysrIGIvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L3MzYzI0NHgtY2xvY2suYwpAQCAtNDEsOCArNDEsOCBAQAogCiAjaW5jbHVkZSA8bWFjaC9yZWdzLWNsb2NrLmg+CiAKLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L2Nsb2NrLmg+Ci0jaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC9jcHUuaD4KKyNpbmNsdWRlIDxwbGF0L2Nsb2NrLmg+CisjaW5jbHVkZSA8cGxhdC9jcHUuaD4KIAogc3RhdGljIGludCBzM2MyNDQwX3NldHBhcmVudF9hcm1jbGsoc3RydWN0IGNsayAqY2xrLCBzdHJ1Y3QgY2xrICpwYXJlbnQpCiB7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXMzYzI0eHgvczNjMjQ0eC1pcnEuYyBiL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9zM2MyNDR4LWlycS5jCmluZGV4IDA2MDFjNWYuLjA5MDJhZmQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9zM2MyNDR4LWlycS5jCisrKyBiL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9zM2MyNDR4LWlycS5jCkBAIC0zNCw5ICszNCw5IEBACiAjaW5jbHVkZSA8bWFjaC9yZWdzLWlycS5oPgogI2luY2x1ZGUgPG1hY2gvcmVncy1ncGlvLmg+CiAKLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L2NwdS5oPgotI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvcG0uaD4KLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L2lycS5oPgorI2luY2x1ZGUgPHBsYXQvY3B1Lmg+CisjaW5jbHVkZSA8cGxhdC9wbS5oPgorI2luY2x1ZGUgPHBsYXQvaXJxLmg+CiAKIC8qIGNhbWVyYSBpcnEgKi8KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L3MzYzI0NHguYyBiL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9zM2MyNDR4LmMKaW5kZXggMTQ2ODYzYS4uYzAzNDRmYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L3MzYzI0NHguYworKysgYi9hcmNoL2FybS9wbGF0LXMzYzI0eHgvczNjMjQ0eC5jCkBAIC0zMCwxOCArMzAsMTggQEAKICNpbmNsdWRlIDxhc20vaXJxLmg+CiAKICNpbmNsdWRlIDxtYWNoL3JlZ3MtY2xvY2suaD4KLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MvcmVncy1zZXJpYWwuaD4KKyNpbmNsdWRlIDxwbGF0L3JlZ3Mtc2VyaWFsLmg+CiAjaW5jbHVkZSA8bWFjaC9yZWdzLWdwaW8uaD4KICNpbmNsdWRlIDxtYWNoL3JlZ3MtZ3Bpb2ouaD4KICNpbmNsdWRlIDxtYWNoL3JlZ3MtZHNjLmg+CiAKLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L3MzYzI0MTAuaD4KLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L3MzYzI0NDAuaD4KKyNpbmNsdWRlIDxwbGF0L3MzYzI0MTAuaD4KKyNpbmNsdWRlIDxwbGF0L3MzYzI0NDAuaD4KICNpbmNsdWRlICJzM2MyNDR4LmgiCi0jaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC9jbG9jay5oPgotI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvZGV2cy5oPgotI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvY3B1Lmg+Ci0jaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC9wbS5oPgorI2luY2x1ZGUgPHBsYXQvY2xvY2suaD4KKyNpbmNsdWRlIDxwbGF0L2RldnMuaD4KKyNpbmNsdWRlIDxwbGF0L2NwdS5oPgorI2luY2x1ZGUgPHBsYXQvcG0uaD4KIAogc3RhdGljIHN0cnVjdCBtYXBfZGVzYyBzM2MyNDR4X2lvZGVzY1tdIF9faW5pdGRhdGEgPSB7CiAJSU9ERVNDX0VOVChDTEtQV1IpLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L3NsZWVwLlMgYi9hcmNoL2FybS9wbGF0LXMzYzI0eHgvc2xlZXAuUwppbmRleCA0OTgxYTA4Yi4uNzY1OTRiMiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L3NsZWVwLlMKKysrIGIvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L3NsZWVwLlMKQEAgLTMyLDcgKzMyLDcgQEAKICNpbmNsdWRlIDxtYWNoL3JlZ3MtZ3Bpby5oPgogI2luY2x1ZGUgPG1hY2gvcmVncy1jbG9jay5oPgogI2luY2x1ZGUgPG1hY2gvcmVncy1tZW0uaD4KLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MvcmVncy1zZXJpYWwuaD4KKyNpbmNsdWRlIDxwbGF0L3JlZ3Mtc2VyaWFsLmg+CiAKIC8qIENPTkZJR19ERUJVR19SRVNVTUUgaXMgZGFuZ2Vyb3VzIGlmIHlvdXIgYm9vdGxvYWRlciBkb2VzIG5vdAogICogcmVzZXQgdGhlIFVBUlQgY29uZmlndXJhdGlvbiwgb25seSBlbmFibGUgaWYgeW91IHJlYWxseSBuZWVkIHRoaXMhCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXMzYzI0eHgvdGltZS5jIGIvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L3RpbWUuYwppbmRleCA2NGJmYTE5Li5jNTE5MTYyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LXMzYzI0eHgvdGltZS5jCisrKyBiL2FyY2gvYXJtL3BsYXQtczNjMjR4eC90aW1lLmMKQEAgLTMzLDEyICszMywxMiBAQAogCiAjaW5jbHVkZSA8YXNtL2lycS5oPgogI2luY2x1ZGUgPG1hY2gvbWFwLmg+Ci0jaW5jbHVkZSA8YXNtL3BsYXQtczNjL3JlZ3MtdGltZXIuaD4KKyNpbmNsdWRlIDxwbGF0L3JlZ3MtdGltZXIuaD4KICNpbmNsdWRlIDxtYWNoL3JlZ3MtaXJxLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvdGltZS5oPgogCi0jaW5jbHVkZSA8YXNtL3BsYXQtczNjMjR4eC9jbG9jay5oPgotI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvY3B1Lmg+CisjaW5jbHVkZSA8cGxhdC9jbG9jay5oPgorI2luY2x1ZGUgPHBsYXQvY3B1Lmg+CiAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIHRpbWVyX3N0YXJ0dmFsOwogc3RhdGljIHVuc2lnbmVkIGxvbmcgdGltZXJfdXNlY190aWNrczsKZGlmZiAtLWdpdCBhL2FyY2gvYXZyMzIvS2NvbmZpZyBiL2FyY2gvYXZyMzIvS2NvbmZpZwppbmRleCA3YzIzOWE5Li4zM2E1YjI5IDEwMDY0NAotLS0gYS9hcmNoL2F2cjMyL0tjb25maWcKKysrIGIvYXJjaC9hdnIzMi9LY29uZmlnCkBAIC03Miw2ICs3Miw4IEBACiAKIHNvdXJjZSAiaW5pdC9LY29uZmlnIgogCitzb3VyY2UgImtlcm5lbC9LY29uZmlnLmZyZWV6ZXIiCisKIG1lbnUgIlN5c3RlbSBUeXBlIGFuZCBmZWF0dXJlcyIKIAogc291cmNlICJrZXJuZWwvdGltZS9LY29uZmlnIgpkaWZmIC0tZ2l0IGEvYXJjaC9hdnIzMi9pbmNsdWRlL2FzbS9hLm91dC5oIGIvYXJjaC9hdnIzMi9pbmNsdWRlL2FzbS9hLm91dC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNDYzNzVhMy4uMDAwMDAwMAotLS0gYS9hcmNoL2F2cjMyL2luY2x1ZGUvYXNtL2Eub3V0LmgKKysrIC9kZXYvbnVsbApAQCAtMSwyMCArMCwwIEBACi0jaWZuZGVmIF9fQVNNX0FWUjMyX0FfT1VUX0gKLSNkZWZpbmUgX19BU01fQVZSMzJfQV9PVVRfSAotCi1zdHJ1Y3QgZXhlYwotewotICB1bnNpZ25lZCBsb25nIGFfaW5mbzsJCS8qIFVzZSBtYWNyb3MgTl9NQUdJQywgZXRjIGZvciBhY2Nlc3MgKi8KLSAgdW5zaWduZWQgYV90ZXh0OwkJLyogbGVuZ3RoIG9mIHRleHQsIGluIGJ5dGVzICovCi0gIHVuc2lnbmVkIGFfZGF0YTsJCS8qIGxlbmd0aCBvZiBkYXRhLCBpbiBieXRlcyAqLwotICB1bnNpZ25lZCBhX2JzczsJCS8qIGxlbmd0aCBvZiB1bmluaXRpYWxpemVkIGRhdGEgYXJlYSBmb3IgZmlsZSwgaW4gYnl0ZXMgKi8KLSAgdW5zaWduZWQgYV9zeW1zOwkJLyogbGVuZ3RoIG9mIHN5bWJvbCB0YWJsZSBkYXRhIGluIGZpbGUsIGluIGJ5dGVzICovCi0gIHVuc2lnbmVkIGFfZW50cnk7CQkvKiBzdGFydCBhZGRyZXNzICovCi0gIHVuc2lnbmVkIGFfdHJzaXplOwkJLyogbGVuZ3RoIG9mIHJlbG9jYXRpb24gaW5mbyBmb3IgdGV4dCwgaW4gYnl0ZXMgKi8KLSAgdW5zaWduZWQgYV9kcnNpemU7CQkvKiBsZW5ndGggb2YgcmVsb2NhdGlvbiBpbmZvIGZvciBkYXRhLCBpbiBieXRlcyAqLwotfTsKLQotI2RlZmluZSBOX1RSU0laRShhKQkoKGEpLmFfdHJzaXplKQotI2RlZmluZSBOX0RSU0laRShhKQkoKGEpLmFfZHJzaXplKQotI2RlZmluZSBOX1NZTVNJWkUoYSkJKChhKS5hX3N5bXMpCi0KLSNlbmRpZiAvKiBfX0FTTV9BVlIzMl9BX09VVF9IICovCmRpZmYgLS1naXQgYS9hcmNoL2F2cjMyL2luY2x1ZGUvYXNtL2VsZi5oIGIvYXJjaC9hdnIzMi9pbmNsdWRlL2FzbS9lbGYuaAppbmRleCA2NGNlNDBlLi5kNWQxZDQxIDEwMDY0NAotLS0gYS9hcmNoL2F2cjMyL2luY2x1ZGUvYXNtL2VsZi5oCisrKyBiL2FyY2gvYXZyMzIvaW5jbHVkZS9hc20vZWxmLmgKQEAgLTEwMyw2ICsxMDMsNiBAQAogCiAjZGVmaW5lIEVMRl9QTEFURk9STSAgKE5VTEwpCiAKLSNkZWZpbmUgU0VUX1BFUlNPTkFMSVRZKGV4LCBpYmNzMikgc2V0X3BlcnNvbmFsaXR5KFBFUl9MSU5VWF8zMkJJVCkKKyNkZWZpbmUgU0VUX1BFUlNPTkFMSVRZKGV4KSBzZXRfcGVyc29uYWxpdHkoUEVSX0xJTlVYXzMyQklUKQogCiAjZW5kaWYgLyogX19BU01fQVZSMzJfRUxGX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXZyMzIvaW5jbHVkZS9hc20vdGhyZWFkX2luZm8uaCBiL2FyY2gvYXZyMzIvaW5jbHVkZS9hc20vdGhyZWFkX2luZm8uaAppbmRleCAyOTRiMjVmLi40NDQyZjhkIDEwMDY0NAotLS0gYS9hcmNoL2F2cjMyL2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvLmgKKysrIGIvYXJjaC9hdnIzMi9pbmNsdWRlL2FzbS90aHJlYWRfaW5mby5oCkBAIC05Niw2ICs5Niw3IEBACiAjZGVmaW5lIF9USUZfTUVNRElFCQkoMSA8PCBUSUZfTUVNRElFKQogI2RlZmluZSBfVElGX1JFU1RPUkVfU0lHTUFTSwkoMSA8PCBUSUZfUkVTVE9SRV9TSUdNQVNLKQogI2RlZmluZSBfVElGX0NQVV9HT0lOR19UT19TTEVFUCAoMSA8PCBUSUZfQ1BVX0dPSU5HX1RPX1NMRUVQKQorI2RlZmluZSBfVElGX0ZSRUVaRQkJKDEgPDwgVElGX0ZSRUVaRSkKIAogLyogTm90ZTogVGhlIG1hc2tzIGJlbG93IG11c3QgbmV2ZXIgc3BhbiBtb3JlIHRoYW4gMTYgYml0cyEgKi8KIApkaWZmIC0tZ2l0IGEvYXJjaC9hdnIzMi9tYWNoLWF0MzJhcC9jcHVmcmVxLmMgYi9hcmNoL2F2cjMyL21hY2gtYXQzMmFwL2NwdWZyZXEuYwppbmRleCA1ZGQ4ZDI1Li5kODRlZmU0IDEwMDY0NAotLS0gYS9hcmNoL2F2cjMyL21hY2gtYXQzMmFwL2NwdWZyZXEuYworKysgYi9hcmNoL2F2cjMyL21hY2gtYXQzMmFwL2NwdWZyZXEuYwpAQCAtODcsNyArODcsNiBAQAogCXBvbGljeS0+Y3VyID0gYXQzMl9nZXRfc3BlZWQoMCk7CiAJcG9saWN5LT5taW4gPSBwb2xpY3ktPmNwdWluZm8ubWluX2ZyZXE7CiAJcG9saWN5LT5tYXggPSBwb2xpY3ktPmNwdWluZm8ubWF4X2ZyZXE7Ci0JcG9saWN5LT5nb3Zlcm5vciA9IENQVUZSRVFfREVGQVVMVF9HT1ZFUk5PUjsKIAogCXByaW50aygiY3B1ZnJlcTogQVQzMkFQIENQVSBmcmVxdWVuY3kgZHJpdmVyXG4iKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hdnIzMi9tYWNoLWF0MzJhcC9leHRpbnQuYyBiL2FyY2gvYXZyMzIvbWFjaC1hdDMyYXAvZXh0aW50LmMKaW5kZXggYzM2YTZkNS4uMzEwNDc3YiAxMDA2NDQKLS0tIGEvYXJjaC9hdnIzMi9tYWNoLWF0MzJhcC9leHRpbnQuYworKysgYi9hcmNoL2F2cjMyL21hY2gtYXQzMmFwL2V4dGludC5jCkBAIC0xOTEsNyArMTkxLDcgQEAKIAlzdHJ1Y3QgZWljICplaWM7CiAJc3RydWN0IHJlc291cmNlICpyZWdzOwogCXVuc2lnbmVkIGludCBpOwotCXVuc2lnbmVkIGludCBucl9pcnFzOworCXVuc2lnbmVkIGludCBucl9vZl9pcnFzOwogCXVuc2lnbmVkIGludCBpbnRfaXJxOwogCWludCByZXQ7CiAJdTMyIHBhdHRlcm47CkBAIC0yMjQsNyArMjI0LDcgQEAKIAllaWNfd3JpdGVsKGVpYywgSURSLCB+MFVMKTsKIAllaWNfd3JpdGVsKGVpYywgTU9ERSwgfjBVTCk7CiAJcGF0dGVybiA9IGVpY19yZWFkbChlaWMsIE1PREUpOwotCW5yX2lycXMgPSBmbHMocGF0dGVybik7CisJbnJfb2ZfaXJxcyA9IGZscyhwYXR0ZXJuKTsKIAogCS8qIFRyaWdnZXIgb24gbG93IGxldmVsIHVubGVzcyBvdmVycmlkZGVuIGJ5IGRyaXZlciAqLwogCWVpY193cml0ZWwoZWljLCBFREdFLCAwVUwpOwpAQCAtMjMyLDcgKzIzMiw3IEBACiAKIAllaWMtPmNoaXAgPSAmZWljX2NoaXA7CiAKLQlmb3IgKGkgPSAwOyBpIDwgbnJfaXJxczsgaSsrKSB7CisJZm9yIChpID0gMDsgaSA8IG5yX29mX2lycXM7IGkrKykgewogCQlzZXRfaXJxX2NoaXBfYW5kX2hhbmRsZXIoZWljLT5maXJzdF9pcnEgKyBpLCAmZWljX2NoaXAsCiAJCQkJCSBoYW5kbGVfbGV2ZWxfaXJxKTsKIAkJc2V0X2lycV9jaGlwX2RhdGEoZWljLT5maXJzdF9pcnEgKyBpLCBlaWMpOwpAQCAtMjU2LDcgKzI1Niw3IEBACiAJCSBlaWMtPnJlZ3MsIGludF9pcnEpOwogCWRldl9pbmZvKCZwZGV2LT5kZXYsCiAJCSAiSGFuZGxpbmcgJXUgZXh0ZXJuYWwgSVJRcywgc3RhcnRpbmcgd2l0aCBJUlEgJXVcbiIsCi0JCSBucl9pcnFzLCBlaWMtPmZpcnN0X2lycSk7CisJCSBucl9vZl9pcnFzLCBlaWMtPmZpcnN0X2lycSk7CiAKIAlyZXR1cm4gMDsKIApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9LY29uZmlnIGIvYXJjaC9ibGFja2Zpbi9LY29uZmlnCmluZGV4IDQxNTRmZjEuLjI5ZTcxZWQgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vS2NvbmZpZworKysgYi9hcmNoL2JsYWNrZmluL0tjb25maWcKQEAgLTY0LDggKzY0LDExIEBACiAJZGVwZW5kcyBvbiBPUFJPRklMRQogCiBzb3VyY2UgImluaXQvS2NvbmZpZyIKKwogc291cmNlICJrZXJuZWwvS2NvbmZpZy5wcmVlbXB0IgogCitzb3VyY2UgImtlcm5lbC9LY29uZmlnLmZyZWV6ZXIiCisKIG1lbnUgIkJsYWNrZmluIFByb2Nlc3NvciBPcHRpb25zIgogCiBjb21tZW50ICJQcm9jZXNzb3IgYW5kIEJvYXJkIFNldHRpbmdzIgpAQCAtMTYyLDE2ICsxNjUsMjggQEAKIGNvbmZpZyBCRjU2MQogCWJvb2wgIkJGNTYxIgogCWhlbHAKLQkgIE5vdCBTdXBwb3J0ZWQgWWV0IC0gV29yayBpbiBwcm9ncmVzcyAtIEJGNTYxIFByb2Nlc3NvciBTdXBwb3J0LgorCSAgQkY1NjEgUHJvY2Vzc29yIFN1cHBvcnQuCiAKIGVuZGNob2ljZQogCitjb25maWcgQkZfUkVWX01JTgorCWludAorCWRlZmF1bHQgMCBpZiAoQkY1MnggfHwgQkY1NHgpCisJZGVmYXVsdCAyIGlmIChCRjUzNyB8fCBCRjUzNiB8fCBCRjUzNCkKKwlkZWZhdWx0IDMgaWYgKEJGNTYxIHx8QkY1MzMgfHwgQkY1MzIgfHwgQkY1MzEpCisKK2NvbmZpZyBCRl9SRVZfTUFYCisJaW50CisJZGVmYXVsdCAyIGlmIChCRjUyeCB8fCBCRjU0eCkKKwlkZWZhdWx0IDMgaWYgKEJGNTM3IHx8IEJGNTM2IHx8IEJGNTM0KQorCWRlZmF1bHQgNSBpZiAoQkY1NjEpCisJZGVmYXVsdCA2IGlmIChCRjUzMyB8fCBCRjUzMiB8fCBCRjUzMSkKKwogY2hvaWNlCiAJcHJvbXB0ICJTaWxpY29uIFJldiIKLQlkZWZhdWx0IEJGX1JFVl8wXzEgaWYgQkY1MjcKLQlkZWZhdWx0IEJGX1JFVl8wXzIgaWYgQkY1MzcKLQlkZWZhdWx0IEJGX1JFVl8wXzMgaWYgQkY1MzMKLQlkZWZhdWx0IEJGX1JFVl8wXzAgaWYgQkY1NDkKKwlkZWZhdWx0IEJGX1JFVl8wXzEgaWYgKEJGNTJ4IHx8IEJGNTR4KQorCWRlZmF1bHQgQkZfUkVWXzBfMiBpZiAoQkY1MzQgfHwgQkY1MzYgfHwgQkY1MzcpCisJZGVmYXVsdCBCRl9SRVZfMF8zIGlmIChCRjUzMSB8fCBCRjUzMiB8fCBCRjUzMyB8fCBCRjU2MSkKIAogY29uZmlnIEJGX1JFVl8wXzAKIAlib29sICIwLjAiCkBAIC0xODMsNyArMTk4LDcgQEAKIAogY29uZmlnIEJGX1JFVl8wXzIKIAlib29sICIwLjIiCi0JZGVwZW5kcyBvbiAoQkY1MzcgfHwgQkY1MzYgfHwgQkY1MzQpCisJZGVwZW5kcyBvbiAoQkY1MnggfHwgQkY1MzcgfHwgQkY1MzYgfHwgQkY1MzQgfHwgQkY1NHgpCiAKIGNvbmZpZyBCRl9SRVZfMF8zCiAJYm9vbCAiMC4zIgpAQCAtMTk3LDYgKzIxMiwxMCBAQAogCWJvb2wgIjAuNSIKIAlkZXBlbmRzIG9uIChCRjU2MSB8fCBCRjUzMyB8fCBCRjUzMiB8fCBCRjUzMSkKIAorY29uZmlnIEJGX1JFVl8wXzYKKwlib29sICIwLjYiCisJZGVwZW5kcyBvbiAoQkY1MzMgfHwgQkY1MzIgfHwgQkY1MzEpCisKIGNvbmZpZyBCRl9SRVZfQU5ZCiAJYm9vbCAiYW55IgogCkBAIC0yNDksNyArMjY4LDcgQEAKIAogY29uZmlnIE1FTV9NVDQ4TEMzMk0xNkEyVEdfNzUKIAlib29sCi0JZGVwZW5kcyBvbiAoQkZJTjUyN19FWktJVCB8fCBCRklONTMyX0lQMFggfHwgQkxBQ0tTVEFNUCkKKwlkZXBlbmRzIG9uIChCRklONTI3X0VaS0lUIHx8IEJGSU41MzJfSVAwWCB8fCBCTEFDS1NUQU1QIHx8IEJGSU41MjZfRVpCUkQpCiAJZGVmYXVsdCB5CiAKIHNvdXJjZSAiYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTI3L0tjb25maWciCkBAIC0yODYsMTMgKzMwNSwyMCBAQAogCSAgbWVtb3J5IHJlZ2lvbiBpcyB1c2VkIHRvIGNhcHR1cmUgTlVMTCBwb2ludGVyIHJlZmVyZW5jZXMgYXMgd2VsbAogCSAgYXMgc29tZSBjb3JlIGtlcm5lbCBmdW5jdGlvbnMuCiAKK2NvbmZpZyBST01fQkFTRQorCWhleCAiS2VybmVsIFJPTSBCYXNlIgorCWRlZmF1bHQgIjB4MjAwNDAwMDAiCisJcmFuZ2UgMHgyMDAwMDAwMCAweDIwNDAwMDAwIGlmICEoQkY1NHggfHwgQkY1NjEpCisJcmFuZ2UgMHgyMDAwMDAwMCAweDMwMDAwMDAwIGlmIChCRjU0eCB8fCBCRjU2MSkKKwloZWxwCisKIGNvbW1lbnQgIkNsb2NrL1BMTCBTZXR1cCIKIAogY29uZmlnIENMS0lOX0haCiAJaW50ICJGcmVxdWVuY3kgb2YgdGhlIGNyeXN0YWwgb24gdGhlIGJvYXJkIGluIEh6IgogCWRlZmF1bHQgIjExMDU5MjAwIiBpZiBCRklONTMzX1NUQU1QCiAJZGVmYXVsdCAiMjcwMDAwMDAiIGlmIEJGSU41MzNfRVpLSVQKLQlkZWZhdWx0ICIyNTAwMDAwMCIgaWYgKEJGSU41MzdfU1RBTVAgfHwgQkZJTjUyN19FWktJVCB8fCBIODYwNl9IVlNJU1RFTUFTIHx8IEJMQUNLU1RBTVApCisJZGVmYXVsdCAiMjUwMDAwMDAiIGlmIChCRklONTM3X1NUQU1QIHx8IEJGSU41MjdfRVpLSVQgfHwgSDg2MDZfSFZTSVNURU1BUyB8fCBCTEFDS1NUQU1QIHx8IEJGSU41MjZfRVpCUkQpCiAJZGVmYXVsdCAiMzAwMDAwMDAiIGlmIEJGSU41NjFfRVpLSVQKIAlkZWZhdWx0ICIyNDU3NjAwMCIgaWYgUE5BVjEwCiAJZGVmYXVsdCAiMTAwMDAwMDAiIGlmIEJGSU41MzJfSVAwWApAQCAtMzMyLDcgKzM1OCw3IEBACiAJZGVmYXVsdCAiMjIiIGlmIEJGSU41MzNfQkxVRVRFQ0hOSVhfQ00KIAlkZWZhdWx0ICIyMCIgaWYgKEJGSU41MzdfQkxVRVRFQ0hOSVhfQ00gfHwgQkZJTjUyN19CTFVFVEVDSE5JWF9DTSB8fCBCRklONTYxX0JMVUVURUNITklYX0NNKQogCWRlZmF1bHQgIjIwIiBpZiBCRklONTYxX0VaS0lUCi0JZGVmYXVsdCAiMTYiIGlmIChIODYwNl9IVlNJU1RFTUFTIHx8IEJMQUNLU1RBTVApCisJZGVmYXVsdCAiMTYiIGlmIChIODYwNl9IVlNJU1RFTUFTIHx8IEJMQUNLU1RBTVAgfHwgQkZJTjUyNl9FWkJSRCkKIAloZWxwCiAJICBUaGlzIGNvbnRyb2xzIHRoZSBmcmVxdWVuY3kgb2YgdGhlIG9uLWNoaXAgUExMLiBUaGlzIGNhbiBiZSBiZXR3ZWVuIDEgYW5kIDY0LgogCSAgUExMIEZyZXF1ZW5jeSA9IChDcnlzdGFsIEZyZXF1ZW5jeSkgKiAodGhpcyBzZXR0aW5nKQpAQCAtMzY4LDE0ICszOTQsNiBAQAogCSAgVGhpcyBjYW4gYmUgYmV0d2VlbiAxIGFuZCAxNQogCSAgU3lzdGVtIENsb2NrID0gKFBMTCBmcmVxdWVuY3kpIC8gKHRoaXMgc2V0dGluZykKIAotY29uZmlnIE1BWF9NRU1fU0laRQotCWludCAiTWF4IFNEUkFNIE1lbW9yeSBTaXplIGluIE1CeXRlcyIKLQlkZXBlbmRzIG9uICFNUFUKLQlkZWZhdWx0IDUxMgotCWhlbHAKLQkgIFRoaXMgaXMgdGhlIG1heCBtZW1vcnkgc2l6ZSB0aGF0IHRoZSBrZXJuZWwgd2lsbCBjcmVhdGUgQ1BMQgotCSAgdGFibGVzIGZvci4gIFlvdXIgc3lzdGVtIHdpbGwgbm90IGJlIGFibGUgdG8gaGFuZGxlIGFueSBtb3JlLgotCiBjaG9pY2UKIAlwcm9tcHQgIkREUiBTRFJBTSBDaGlwIFR5cGUiCiAJZGVwZW5kcyBvbiBCRklOX0tFUk5FTF9DTE9DSwpAQCAtMzg5LDYgKzQwNywxNCBAQAogCWJvb2wgIk1UNDZWMzJNMTZfNUIiCiBlbmRjaG9pY2UKIAorY29uZmlnIE1BWF9NRU1fU0laRQorCWludCAiTWF4IFNEUkFNIE1lbW9yeSBTaXplIGluIE1CeXRlcyIKKwlkZXBlbmRzIG9uICFNUFUKKwlkZWZhdWx0IDUxMgorCWhlbHAKKwkgIFRoaXMgaXMgdGhlIG1heCBtZW1vcnkgc2l6ZSB0aGF0IHRoZSBrZXJuZWwgd2lsbCBjcmVhdGUgQ1BMQgorCSAgdGFibGVzIGZvci4gIFlvdXIgc3lzdGVtIHdpbGwgbm90IGJlIGFibGUgdG8gaGFuZGxlIGFueSBtb3JlLgorCiAjCiAjIE1heCAmIE1pbiBTcGVlZHMgZm9yIHZhcmlvdXMgQ2hpcHMKICMKQEAgLTQ1NSw4ICs0ODEsNiBAQAogCiBzb3VyY2Uga2VybmVsL3RpbWUvS2NvbmZpZwogCi1jb21tZW50ICJNZW1vcnkgU2V0dXAiCi0KIGNvbW1lbnQgIk1pc2MiCiAKIGNob2ljZQpAQCAtNjIyLDYgKzY0NiwxNSBAQAogCSAgSWYgZW5hYmxlZCwgdGhlIENQTEIgU3dpdGNoIFRhYmxlcyBhcmUgbGlua2VkCiAJICBpbnRvIEwxIGRhdGEgbWVtb3J5LiAobGVzcyBsYXRlbmN5KQogCitjb25maWcgQVBQX1NUQUNLX0wxCisJYm9vbCAiU3VwcG9ydCBsb2NhdGluZyBhcHBsaWNhdGlvbiBzdGFjayBpbiBMMSBTY3JhdGNoIE1lbW9yeSIKKwlkZWZhdWx0IHkKKwloZWxwCisJICBJZiBlbmFibGVkIHRoZSBhcHBsaWNhdGlvbiBzdGFjayBjYW4gYmUgbG9jYXRlZCBpbiBMMQorCSAgc2NyYXRjaCBtZW1vcnkgKGxlc3MgbGF0ZW5jeSkuCisKKwkgIEN1cnJlbnRseSBvbmx5IHdvcmtzIHdpdGggRkxBVCBiaW5hcmllcy4KKwogY29tbWVudCAiU3BlZWQgT3B0aW1pemF0aW9ucyIKIGNvbmZpZyBCRklOX0lOU19MT1dPVkVSSEVBRAogCWJvb2wgImluc1tid2xdIGxvdyBvdmVyaGVhZCwgaGlnaGVyIGludGVycnVwdCBsYXRlbmN5IgpAQCAtNzU1LDYgKzc4OCwxMyBAQAogCiBlbmRjaG9pY2UKIAorY29uZmlnIEJGSU5fTDJfQ0FDSEVBQkxFCisJYm9vbCAiQ2FjaGUgTDIgU1JBTSIKKwlkZXBlbmRzIG9uIChCRklOX0RDQUNIRSB8fCBCRklOX0lDQUNIRSkgJiYgKEJGNTR4IHx8IEJGNTYxKQorCWRlZmF1bHQgbgorCWhlbHAKKwkgIFNlbGVjdCB0byBtYWtlIEwyIFNSQU0gY2FjaGVhYmxlIGluIEwxIGRhdGEgYW5kIGluc3RydWN0aW9uIGNhY2hlLgorCiBjb25maWcgTVBVCiAJYm9vbCAiRW5hYmxlIHRoZSBtZW1vcnkgcHJvdGVjdGlvbiB1bml0IChFWFBFUklNRU5UQUwpIgogCWRlZmF1bHQgbgpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9LY29uZmlnLmRlYnVnIGIvYXJjaC9ibGFja2Zpbi9LY29uZmlnLmRlYnVnCmluZGV4IGM0Njg2MjQuLjNhZDI1OTggMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vS2NvbmZpZy5kZWJ1ZworKysgYi9hcmNoL2JsYWNrZmluL0tjb25maWcuZGVidWcKQEAgLTIsNiArMiwyMiBAQAogCiBzb3VyY2UgImxpYi9LY29uZmlnLmRlYnVnIgogCitjb25maWcgSEFWRV9BUkNIX0tHREIKKyAgICAgICBkZWZfYm9vbCB5CisKK2NvbmZpZyBERUJVR19WRVJCT1NFCisJYm9vbCAiVmVyYm9zZSBmYXVsdCBtZXNzYWdlcyIKKwlkZWZhdWx0IHkKKwlzZWxlY3QgUFJJTlRLCisJaGVscAorCSAgV2hlbiBhIHByb2dyYW0gY3Jhc2hlcyBkdWUgdG8gYW4gZXhjZXB0aW9uLCBvciB0aGUga2VybmVsIGRldGVjdHMKKwkgIGFuIGludGVybmFsIGVycm9yLCB0aGUga2VybmVsIGNhbiBwcmludCBhIG5vdCBzbyBicmllZiBtZXNzYWdlCisJICBleHBsYWluaW5nIHdoYXQgdGhlIHByb2JsZW0gd2FzLiBUaGlzIGRlYnVnZ2luZyBpbmZvcm1hdGlvbiBpcworCSAgdXNlZnVsIHRvIGRldmVsb3BlcnMgYW5kIGtlcm5lbCBoYWNrZXJzIHdoZW4gdHJhY2tpbmcgZG93biBwcm9ibGVtcywKKwkgIGJ1dCBtb3N0bHkgbWVhbmluZ2xlc3MgdG8gb3RoZXIgcGVvcGxlLiBUaGlzIGlzIGFsd2F5cyBoZWxwZnVsIGZvcgorCSAgZGVidWdnaW5nIGJ1dCBzZXJ2ZXMgbm8gcHVycG9zZSBvbiBhIHByb2R1Y3Rpb24gc3lzdGVtLgorCSAgTW9zdCBwZW9wbGUgc2hvdWxkIHNheSBOIGhlcmUuCisKIGNvbmZpZyBERUJVR19NTVJTCiAJYm9vbCAiR2VuZXJhdGUgQmxhY2tmaW4gTU1SIHRyZWUiCiAJc2VsZWN0IERFQlVHX0ZTCkBAIC0yMiw2ICszOCw0NCBAQAogCSAgaGFyZHdhcmUgZXJyb3IgaW50ZXJydXB0cyBhbmQgbmVlZCB0byBrbm93IHdoZXJlIHRoZXkgYXJlIGNvbWluZwogCSAgZnJvbS4KIAorY29uZmlnIERFQlVHX0RPVUJMRUZBVUxUCisJYm9vbCAiRGVidWcgRG91YmxlIEZhdWx0cyIKKwlkZWZhdWx0IG4KKwloZWxwCisJICBJZiBhbiBleGNlcHRpb24gaXMgY2F1c2VkIHdoaWxlIGV4ZWN1dGluZyBjb2RlIHdpdGhpbiB0aGUgZXhjZXB0aW9uCisJICBoYW5kbGVyLCB0aGUgTk1JIGhhbmRsZXIsIHRoZSByZXNldCB2ZWN0b3IsIG9yIGluIGVtdWxhdG9yIG1vZGUsCisJICBhIGRvdWJsZSBmYXVsdCBvY2N1cnMuIE9uIHRoZSBCbGFja2ZpbiwgdGhpcyBpcyBhIHVucmVjb3ZlcmFibGUKKwkgIGV2ZW50LiBZb3UgaGF2ZSB0d28gb3B0aW9uczoKKwkgIC0gUkVTRVQgZXhhY3RseSB3aGVuIGRvdWJsZSBmYXVsdCBvY2N1cnMuIFRoZSBleGNlcHRpbmcKKwkgICAgaW5zdHJ1Y3Rpb24gYWRkcmVzcyBpcyBzdG9yZWQgaW4gUkVUWCwgd2hlcmUgdGhlIG5leHQga2VybmVsCisJICAgIGJvb3Qgd2lsbCBwcmludCBpdCBvdXQuCisJICAtIFByaW50IGRlYnVnIG1lc3NhZ2UuIFRoaXMgaXMgbXVjaCBtb3JlIGVycm9yIHByb25lLCBhbHRob3VnaAorCSAgICBlYXNpZXIgdG8gaGFuZGxlLiBJdCBpcyBlcnJvciBwcm9uZSBzaW5jZToKKwkgICAgLSBUaGUgZXhjZXB0aW5nIGluc3RydWN0aW9uIGlzIG5vdCBjb21taXR0ZWQuCisJICAgIC0gQWxsIHdyaXRlYmFja3MgZnJvbSB0aGUgaW5zdHJ1Y3Rpb24gYXJlIHByZXZlbnRlZC4KKwkgICAgLSBUaGUgZ2VuZXJhdGVkIGV4Y2VwdGlvbiBpcyBub3QgdGFrZW4uCisJICAgIC0gVGhlIEVYQ0FVU0UgZmllbGQgaXMgdXBkYXRlZCB3aXRoIGFuIHVucmVjb3ZlcmFibGUgZXZlbnQKKwkgICAgVGhlIG9ubHkgd2F5IHRvIGNoZWNrIHRoaXMgaXMgdG8gc2VlIGlmIEVYQ0FVU0UgY29udGFpbnMgdGhlCisJICAgIHVucmVjb3ZlcmFibGUgZXZlbnQgdmFsdWUgYXQgZXZlcnkgZXhjZXB0aW9uIHJldHVybi4gQnkgc2VsZWN0aW5nCisJICAgIHRoaXMgb3B0aW9uLCB5b3UgYXJlIHNraXBwaW5nIG92ZXIgdGhlIGZhdWx0aW5nIGluc3RydWN0aW9uLCBhbmQgCisJICAgIGhvcGluZyB0aGluZ3Mgc3RheSB0b2dldGhlciBlbm91Z2ggdG8gcHJpbnQgb3V0IGEgZGVidWcgbWVzc2FnZS4KKworCSAgVGhpcyBkb2VzIGFkZCBhIGxpdHRsZSBrZXJuZWwgY29kZSwgYnV0IGlzIHRoZSBvbmx5IG1ldGhvZCB0byBkZWJ1ZworCSAgZG91YmxlIGZhdWx0cyAtIGlmIHVuc3VyZSBzYXkgIlkiCisKK2Nob2ljZQorCXByb21wdCAiRG91YmxlIEZhdWx0IEZhaWx1cmUgTWV0aG9kIgorCWRlZmF1bHQgREVCVUdfRE9VQkxFRkFVTFRfUFJJTlQKKwlkZXBlbmRzIG9uIERFQlVHX0RPVUJMRUZBVUxUCisKK2NvbmZpZyBERUJVR19ET1VCTEVGQVVMVF9QUklOVAorCWJvb2wgIlByaW50IgorCitjb25maWcgREVCVUdfRE9VQkxFRkFVTFRfUkVTRVQKKwlib29sICJSZXNldCIKKworZW5kY2hvaWNlCisKIGNvbmZpZyBERUJVR19JQ0FDSEVfQ0hFQ0sKIAlib29sICJDaGVjayBJbnN0cnVjdGlvbiBjYWNoZSBjb2hlcmVuY3kiCiAJZGVwZW5kcyBvbiBERUJVR19LRVJORUwKQEAgLTE0Myw2ICsxOTcsNyBAQAogY29uZmlnIEVBUkxZX1BSSU5USwogCWJvb2wgIkVhcmx5IHByaW50ayIgCiAJZGVmYXVsdCBuCisJc2VsZWN0IFNFUklBTF9DT1JFX0NPTlNPTEUKIAloZWxwCiAJICBUaGlzIG9wdGlvbiBlbmFibGVzIHNwZWNpYWwgY29uc29sZSBkcml2ZXJzIHdoaWNoIGFsbG93IHRoZSBrZXJuZWwKIAkgIHRvIHByaW50IG1lc3NhZ2VzIHZlcnkgZWFybHkgaW4gdGhlIGJvb3R1cCBwcm9jZXNzLgpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9NYWtlZmlsZSBiL2FyY2gvYmxhY2tmaW4vTWFrZWZpbGUKaW5kZXggZWFjMDUzMy4uNmJmNTA5NyAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9NYWtlZmlsZQorKysgYi9hcmNoL2JsYWNrZmluL01ha2VmaWxlCkBAIC02Nyw2ICs2Nyw3IEBACiByZXYtJChDT05GSUdfQkZfUkVWXzBfMykgIDo9IDAuMwogcmV2LSQoQ09ORklHX0JGX1JFVl8wXzQpICA6PSAwLjQKIHJldi0kKENPTkZJR19CRl9SRVZfMF81KSAgOj0gMC41CityZXYtJChDT05GSUdfQkZfUkVWXzBfNikgIDo9IDAuNgogcmV2LSQoQ09ORklHX0JGX1JFVl9OT05FKSA6PSBub25lCiByZXYtJChDT05GSUdfQkZfUkVWX0FOWSkgIDo9IGFueQogCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvQkY1MjYtRVpCUkRfZGVmY29uZmlnIGIvYXJjaC9ibGFja2Zpbi9jb25maWdzL0JGNTI2LUVaQlJEX2RlZmNvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NDQzYTQ3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9ibGFja2Zpbi9jb25maWdzL0JGNTI2LUVaQlJEX2RlZmNvbmZpZwpAQCAtMCwwICsxLDE0MjcgQEAKKyMKKyMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yNi4zCisjIFRodSBBdWcgMjggMTY6NDk6NTMgMjAwOAorIworIyBDT05GSUdfTU1VIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZQVSBpcyBub3Qgc2V0CitDT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15CisjIENPTkZJR19SV1NFTV9YQ0hHQUREX0FMR09SSVRITSBpcyBub3Qgc2V0CitDT05GSUdfQkxBQ0tGSU49eQorQ09ORklHX1pPTkVfRE1BPXkKK0NPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQ9eQorQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15CitDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CitDT05GSUdfR0VORVJJQ19JUlFfUFJPQkU9eQorQ09ORklHX0dFTkVSSUNfR1BJTz15CitDT05GSUdfRk9SQ0VfTUFYX1pPTkVPUkRFUj0xNAorQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKK0NPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCisKKyMKKyMgR2VuZXJhbCBzZXR1cAorIworQ09ORklHX0VYUEVSSU1FTlRBTD15CitDT05GSUdfQlJPS0VOX09OX1NNUD15CitDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCitDT05GSUdfTE9DQUxWRVJTSU9OPSIiCitDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQorQ09ORklHX1NZU1ZJUEM9eQorQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKKyMgQ09ORklHX1BPU0lYX01RVUVVRSBpcyBub3Qgc2V0CisjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CitDT05GSUdfSUtDT05GSUc9eQorQ09ORklHX0lLQ09ORklHX1BST0M9eQorQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKKyMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAorIyBDT05GSUdfR1JPVVBfU0NIRUQgaXMgbm90IHNldAorQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQorQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjI9eQorIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAorIyBDT05GSUdfTkFNRVNQQUNFUyBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQorQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKKyMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNDVEw9eQorQ09ORklHX0VNQkVEREVEPXkKK0NPTkZJR19VSUQxNj15CitDT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQorQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLPXkKK0NPTkZJR19LQUxMU1lNUz15CisjIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKK0NPTkZJR19IT1RQTFVHPXkKK0NPTkZJR19QUklOVEs9eQorQ09ORklHX0JVRz15CitDT05GSUdfRUxGX0NPUkU9eQorQ09ORklHX0NPTVBBVF9CUks9eQorQ09ORklHX0JBU0VfRlVMTD15CitDT05GSUdfRlVURVg9eQorQ09ORklHX0FOT05fSU5PREVTPXkKK0NPTkZJR19FUE9MTD15CitDT05GSUdfU0lHTkFMRkQ9eQorQ09ORklHX1RJTUVSRkQ9eQorQ09ORklHX0VWRU5URkQ9eQorQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKK0NPTkZJR19TTEFCPXkKKyMgQ09ORklHX1NMVUIgaXMgbm90IHNldAorIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAorIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9PUFJPRklMRT15CisjIENPTkZJR19IQVZFX0tQUk9CRVMgaXMgbm90IHNldAorIyBDT05GSUdfSEFWRV9LUkVUUFJPQkVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBVkVfRE1BX0FUVFJTIGlzIG5vdCBzZXQKK0NPTkZJR19TTEFCSU5GTz15CitDT05GSUdfUlRfTVVURVhFUz15CitDT05GSUdfVElOWV9TSE1FTT15CitDT05GSUdfQkFTRV9TTUFMTD0wCitDT05GSUdfTU9EVUxFUz15CisjIENPTkZJR19NT0RVTEVfRk9SQ0VfTE9BRCBpcyBub3Qgc2V0CitDT05GSUdfTU9EVUxFX1VOTE9BRD15CisjIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0CitDT05GSUdfS01PRD15CitDT05GSUdfQkxPQ0s9eQorIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfTFNGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKKworIworIyBJTyBTY2hlZHVsZXJzCisjCitDT05GSUdfSU9TQ0hFRF9OT09QPXkKKyMgQ09ORklHX0lPU0NIRURfQVMgaXMgbm90IHNldAorIyBDT05GSUdfSU9TQ0hFRF9ERUFETElORSBpcyBub3Qgc2V0CisjIENPTkZJR19JT1NDSEVEX0NGUSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX0FTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfTk9PUD15CitDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJub29wIgorQ09ORklHX0NMQVNTSUNfUkNVPXkKKyMgQ09ORklHX1BSRUVNUFRfTk9ORSBpcyBub3Qgc2V0CitDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlk9eQorIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0CisKKyMKKyMgQmxhY2tmaW4gUHJvY2Vzc29yIE9wdGlvbnMKKyMKKworIworIyBQcm9jZXNzb3IgYW5kIEJvYXJkIFNldHRpbmdzCisjCisjIENPTkZJR19CRjUyMiBpcyBub3Qgc2V0CisjIENPTkZJR19CRjUyMyBpcyBub3Qgc2V0CisjIENPTkZJR19CRjUyNCBpcyBub3Qgc2V0CisjIENPTkZJR19CRjUyNSBpcyBub3Qgc2V0CitDT05GSUdfQkY1MjY9eQorIyBDT05GSUdfQkY1MjcgaXMgbm90IHNldAorIyBDT05GSUdfQkY1MzEgaXMgbm90IHNldAorIyBDT05GSUdfQkY1MzIgaXMgbm90IHNldAorIyBDT05GSUdfQkY1MzMgaXMgbm90IHNldAorIyBDT05GSUdfQkY1MzQgaXMgbm90IHNldAorIyBDT05GSUdfQkY1MzYgaXMgbm90IHNldAorIyBDT05GSUdfQkY1MzcgaXMgbm90IHNldAorIyBDT05GSUdfQkY1NDIgaXMgbm90IHNldAorIyBDT05GSUdfQkY1NDQgaXMgbm90IHNldAorIyBDT05GSUdfQkY1NDcgaXMgbm90IHNldAorIyBDT05GSUdfQkY1NDggaXMgbm90IHNldAorIyBDT05GSUdfQkY1NDkgaXMgbm90IHNldAorIyBDT05GSUdfQkY1NjEgaXMgbm90IHNldAorQ09ORklHX0JGX1JFVl8wXzA9eQorIyBDT05GSUdfQkZfUkVWXzBfMSBpcyBub3Qgc2V0CisjIENPTkZJR19CRl9SRVZfMF8yIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JGX1JFVl8wXzMgaXMgbm90IHNldAorIyBDT05GSUdfQkZfUkVWXzBfNCBpcyBub3Qgc2V0CisjIENPTkZJR19CRl9SRVZfMF81IGlzIG5vdCBzZXQKKyMgQ09ORklHX0JGX1JFVl9BTlkgaXMgbm90IHNldAorIyBDT05GSUdfQkZfUkVWX05PTkUgaXMgbm90IHNldAorQ09ORklHX0JGNTJ4PXkKK0NPTkZJR19NRU1fTVQ0OExDMzJNMTZBMlRHXzc1PXkKKyMgQ09ORklHX0JGSU41MjdfRVpLSVQgaXMgbm90IHNldAorIyBDT05GSUdfQkZJTjUyN19CTFVFVEVDSE5JWF9DTSBpcyBub3Qgc2V0CitDT05GSUdfQkZJTjUyNl9FWkJSRD15CisKKyMKKyMgQkY1MjcgU3BlY2lmaWMgQ29uZmlndXJhdGlvbgorIworCisjCisjIEFsdGVybmF0aXZlIE11bHRpcGxleGluZyBTY2hlbWUKKyMKKyMgQ09ORklHX0JGNTI3X1NQT1JUMF9QT1JURiBpcyBub3Qgc2V0CitDT05GSUdfQkY1MjdfU1BPUlQwX1BPUlRHPXkKK0NPTkZJR19CRjUyN19TUE9SVDBfVFNDTEtfUEcxMD15CisjIENPTkZJR19CRjUyN19TUE9SVDBfVFNDTEtfUEcxNCBpcyBub3Qgc2V0CitDT05GSUdfQkY1MjdfVUFSVDFfUE9SVEY9eQorIyBDT05GSUdfQkY1MjdfVUFSVDFfUE9SVEcgaXMgbm90IHNldAorIyBDT05GSUdfQkY1MjdfTkFORF9EX1BPUlRGIGlzIG5vdCBzZXQKK0NPTkZJR19CRjUyN19OQU5EX0RfUE9SVEg9eQorCisjCisjIEludGVycnVwdCBQcmlvcml0eSBBc3NpZ25tZW50CisjCisKKyMKKyMgUHJpb3JpdHkKKyMKK0NPTkZJR19JUlFfUExMX1dBS0VVUD03CitDT05GSUdfSVJRX0RNQTBfRVJST1I9NworQ09ORklHX0lSUV9ETUFSMF9CTEs9NworQ09ORklHX0lSUV9ETUFSMV9CTEs9NworQ09ORklHX0lSUV9ETUFSMF9PVlI9NworQ09ORklHX0lSUV9ETUFSMV9PVlI9NworQ09ORklHX0lSUV9QUElfRVJST1I9NworQ09ORklHX0lSUV9NQUNfRVJST1I9NworQ09ORklHX0lSUV9TUE9SVDBfRVJST1I9NworQ09ORklHX0lSUV9TUE9SVDFfRVJST1I9NworQ09ORklHX0lSUV9VQVJUMF9FUlJPUj03CitDT05GSUdfSVJRX1VBUlQxX0VSUk9SPTcKK0NPTkZJR19JUlFfUlRDPTgKK0NPTkZJR19JUlFfUFBJPTgKK0NPTkZJR19JUlFfU1BPUlQwX1JYPTkKK0NPTkZJR19JUlFfU1BPUlQwX1RYPTkKK0NPTkZJR19JUlFfU1BPUlQxX1JYPTkKK0NPTkZJR19JUlFfU1BPUlQxX1RYPTkKK0NPTkZJR19JUlFfVFdJPTEwCitDT05GSUdfSVJRX1NQST0xMAorQ09ORklHX0lSUV9VQVJUMF9SWD0xMAorQ09ORklHX0lSUV9VQVJUMF9UWD0xMAorQ09ORklHX0lSUV9VQVJUMV9SWD0xMAorQ09ORklHX0lSUV9VQVJUMV9UWD0xMAorQ09ORklHX0lSUV9PUFRTRUM9MTEKK0NPTkZJR19JUlFfQ05UPTExCitDT05GSUdfSVJRX01BQ19SWD0xMQorQ09ORklHX0lSUV9QT1JUSF9JTlRBPTExCitDT05GSUdfSVJRX01BQ19UWD0xMQorQ09ORklHX0lSUV9QT1JUSF9JTlRCPTExCitDT05GSUdfSVJRX1RNUjA9MTIKK0NPTkZJR19JUlFfVE1SMT0xMgorQ09ORklHX0lSUV9UTVIyPTEyCitDT05GSUdfSVJRX1RNUjM9MTIKK0NPTkZJR19JUlFfVE1SND0xMgorQ09ORklHX0lSUV9UTVI1PTEyCitDT05GSUdfSVJRX1RNUjY9MTIKK0NPTkZJR19JUlFfVE1SNz0xMgorQ09ORklHX0lSUV9QT1JUR19JTlRBPTEyCitDT05GSUdfSVJRX1BPUlRHX0lOVEI9MTIKK0NPTkZJR19JUlFfTUVNX0RNQTA9MTMKK0NPTkZJR19JUlFfTUVNX0RNQTE9MTMKK0NPTkZJR19JUlFfV0FUQ0g9MTMKK0NPTkZJR19JUlFfUE9SVEZfSU5UQT0xMworQ09ORklHX0lSUV9QT1JURl9JTlRCPTEzCitDT05GSUdfSVJRX1NQSV9FUlJPUj03CitDT05GSUdfSVJRX05GQ19FUlJPUj03CitDT05GSUdfSVJRX0hETUFfRVJST1I9NworQ09ORklHX0lSUV9IRE1BPTcKK0NPTkZJR19JUlFfVVNCX0VJTlQ9MTAKK0NPTkZJR19JUlFfVVNCX0lOVDA9MTEKK0NPTkZJR19JUlFfVVNCX0lOVDE9MTEKK0NPTkZJR19JUlFfVVNCX0lOVDI9MTEKK0NPTkZJR19JUlFfVVNCX0RNQT0xMQorCisjCisjIEJvYXJkIGN1c3RvbWl6YXRpb25zCisjCisjIENPTkZJR19DTURMSU5FX0JPT0wgaXMgbm90IHNldAorQ09ORklHX0JPT1RfTE9BRD0weDEwMDAKKworIworIyBDbG9jay9QTEwgU2V0dXAKKyMKK0NPTkZJR19DTEtJTl9IWj0yNTAwMDAwMAorIyBDT05GSUdfQkZJTl9LRVJORUxfQ0xPQ0sgaXMgbm90IHNldAorQ09ORklHX01BWF9NRU1fU0laRT01MTIKK0NPTkZJR19NQVhfVkNPX0haPTQwMDAwMDAwMAorQ09ORklHX01JTl9WQ09fSFo9NTAwMDAwMDAKK0NPTkZJR19NQVhfU0NMS19IWj0xMzMzMzMzMzMKK0NPTkZJR19NSU5fU0NMS19IWj0yNzAwMDAwMAorCisjCisjIEtlcm5lbCBUaW1lci9TY2hlZHVsZXIKKyMKKyMgQ09ORklHX0haXzEwMCBpcyBub3Qgc2V0CitDT05GSUdfSFpfMjUwPXkKKyMgQ09ORklHX0haXzMwMCBpcyBub3Qgc2V0CisjIENPTkZJR19IWl8xMDAwIGlzIG5vdCBzZXQKK0NPTkZJR19IWj0yNTAKKyMgQ09ORklHX1NDSEVEX0hSVElDSyBpcyBub3Qgc2V0CitDT05GSUdfR0VORVJJQ19USU1FPXkKK0NPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKKyMgQ09ORklHX0NZQ0xFU19DTE9DS1NPVVJDRSBpcyBub3Qgc2V0CisjIENPTkZJR19USUNLX09ORVNIT1QgaXMgbm90IHNldAorIyBDT05GSUdfTk9fSFogaXMgbm90IHNldAorIyBDT05GSUdfSElHSF9SRVNfVElNRVJTIGlzIG5vdCBzZXQKK0NPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTX0JVSUxEPXkKKworIworIyBNZW1vcnkgU2V0dXAKKyMKKworIworIyBNaXNjCisjCitDT05GSUdfQkZJTl9TQ1JBVENIX1JFR19SRVROPXkKKyMgQ09ORklHX0JGSU5fU0NSQVRDSF9SRUdfUkVURSBpcyBub3Qgc2V0CisjIENPTkZJR19CRklOX1NDUkFUQ0hfUkVHX0NZQ0xFUyBpcyBub3Qgc2V0CisKKyMKKyMgQmxhY2tmaW4gS2VybmVsIE9wdGltaXphdGlvbnMKKyMKKworIworIyBNZW1vcnkgT3B0aW1pemF0aW9ucworIworQ09ORklHX0lfRU5UUllfTDE9eQorQ09ORklHX0VYQ1BUX0lSUV9TWVNDX0wxPXkKK0NPTkZJR19ET19JUlFfTDE9eQorQ09ORklHX0NPUkVfVElNRVJfSVJRX0wxPXkKK0NPTkZJR19JRExFX0wxPXkKKyMgQ09ORklHX1NDSEVEVUxFX0wxIGlzIG5vdCBzZXQKK0NPTkZJR19BUklUSE1FVElDX09QU19MMT15CitDT05GSUdfQUNDRVNTX09LX0wxPXkKKyMgQ09ORklHX01FTVNFVF9MMSBpcyBub3Qgc2V0CisjIENPTkZJR19NRU1DUFlfTDEgaXMgbm90IHNldAorIyBDT05GSUdfU1lTX0JGSU5fU1BJTkxPQ0tfTDEgaXMgbm90IHNldAorIyBDT05GSUdfSVBfQ0hFQ0tTVU1fTDEgaXMgbm90IHNldAorQ09ORklHX0NBQ0hFTElORV9BTElHTkVEX0wxPXkKKyMgQ09ORklHX1NZU0NBTExfVEFCX0wxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQTEJfU1dJVENIX1RBQl9MMSBpcyBub3Qgc2V0CisKKyMKKyMgU3BlZWQgT3B0aW1pemF0aW9ucworIworQ09ORklHX0JGSU5fSU5TX0xPV09WRVJIRUFEPXkKK0NPTkZJR19SQU1LRVJORUw9eQorIyBDT05GSUdfUk9NS0VSTkVMIGlzIG5vdCBzZXQKK0NPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKK0NPTkZJR19GTEFUTUVNX01BTlVBTD15CisjIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQQVJTRU1FTV9NQU5VQUwgaXMgbm90IHNldAorQ09ORklHX0ZMQVRNRU09eQorQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKKyMgQ09ORklHX1NQQVJTRU1FTV9TVEFUSUMgaXMgbm90IHNldAorIyBDT05GSUdfU1BBUlNFTUVNX1ZNRU1NQVBfRU5BQkxFIGlzIG5vdCBzZXQKK0NPTkZJR19QQUdFRkxBR1NfRVhURU5ERUQ9eQorQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKKyMgQ09ORklHX1JFU09VUkNFU182NEJJVCBpcyBub3Qgc2V0CitDT05GSUdfWk9ORV9ETUFfRkxBRz0xCitDT05GSUdfVklSVF9UT19CVVM9eQorQ09ORklHX0JGSU5fR1BUSU1FUlM9eQorQ09ORklHX0JGSU5fRE1BXzVYWD15CisjIENPTkZJR19ETUFfVU5DQUNIRURfNE0gaXMgbm90IHNldAorIyBDT05GSUdfRE1BX1VOQ0FDSEVEXzJNIGlzIG5vdCBzZXQKK0NPTkZJR19ETUFfVU5DQUNIRURfMU09eQorIyBDT05GSUdfRE1BX1VOQ0FDSEVEX05PTkUgaXMgbm90IHNldAorCisjCisjIENhY2hlIFN1cHBvcnQKKyMKK0NPTkZJR19CRklOX0lDQUNIRT15CitDT05GSUdfQkZJTl9EQ0FDSEU9eQorIyBDT05GSUdfQkZJTl9EQ0FDSEVfQkFOS0EgaXMgbm90IHNldAorIyBDT05GSUdfQkZJTl9JQ0FDSEVfTE9DSyBpcyBub3Qgc2V0CitDT05GSUdfQkZJTl9XQj15CisjIENPTkZJR19CRklOX1dUIGlzIG5vdCBzZXQKKyMgQ09ORklHX01QVSBpcyBub3Qgc2V0CisKKyMKKyMgQXN5bmNob25vdXMgTWVtb3J5IENvbmZpZ3VyYXRpb24KKyMKKworIworIyBFQklVX0FNR0NUTCBHbG9iYWwgQ29udHJvbAorIworQ09ORklHX0NfQU1DS0VOPXkKK0NPTkZJR19DX0NEUFJJTz15CisjIENPTkZJR19DX0FNQkVOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NfQU1CRU5fQjAgaXMgbm90IHNldAorIyBDT05GSUdfQ19BTUJFTl9CMF9CMSBpcyBub3Qgc2V0CisjIENPTkZJR19DX0FNQkVOX0IwX0IxX0IyIGlzIG5vdCBzZXQKK0NPTkZJR19DX0FNQkVOX0FMTD15CisKKyMKKyMgRUJJVV9BTUJDVEwgQ29udHJvbAorIworQ09ORklHX0JBTktfMD0weDdCQjAKK0NPTkZJR19CQU5LXzE9MHg1NTU0CitDT05GSUdfQkFOS18yPTB4N0JCMAorQ09ORklHX0JBTktfMz0weEZGQzAKKworIworIyBCdXMgb3B0aW9ucyAoUENJLCBQQ01DSUEsIEVJU0EsIE1DQSwgSVNBKQorIworIyBDT05GSUdfQVJDSF9TVVBQT1JUU19NU0kgaXMgbm90IHNldAorIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKKworIworIyBFeGVjdXRhYmxlIGZpbGUgZm9ybWF0cworIworQ09ORklHX0JJTkZNVF9FTEZfRkRQSUM9eQorQ09ORklHX0JJTkZNVF9GTEFUPXkKK0NPTkZJR19CSU5GTVRfWkZMQVQ9eQorIyBDT05GSUdfQklORk1UX1NIQVJFRF9GTEFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKKworIworIyBQb3dlciBtYW5hZ2VtZW50IG9wdGlvbnMKKyMKKyMgQ09ORklHX1BNIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX1NVU1BFTkRfUE9TU0lCTEU9eQorIyBDT05GSUdfUE1fV0FLRVVQX0JZX0dQSU8gaXMgbm90IHNldAorCisjCisjIENQVSBGcmVxdWVuY3kgc2NhbGluZworIworIyBDT05GSUdfQ1BVX0ZSRVEgaXMgbm90IHNldAorCisjCisjIE5ldHdvcmtpbmcKKyMKK0NPTkZJR19ORVQ9eQorCisjCisjIE5ldHdvcmtpbmcgb3B0aW9ucworIworQ09ORklHX1BBQ0tFVD15CisjIENPTkZJR19QQUNLRVRfTU1BUCBpcyBub3Qgc2V0CitDT05GSUdfVU5JWD15CitDT05GSUdfWEZSTT15CisjIENPTkZJR19YRlJNX1VTRVIgaXMgbm90IHNldAorIyBDT05GSUdfWEZSTV9TVUJfUE9MSUNZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGUk1fTUlHUkFURSBpcyBub3Qgc2V0CisjIENPTkZJR19YRlJNX1NUQVRJU1RJQ1MgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0CitDT05GSUdfSU5FVD15CisjIENPTkZJR19JUF9NVUxUSUNBU1QgaXMgbm90IHNldAorIyBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9GSUJfSEFTSD15CitDT05GSUdfSVBfUE5QPXkKKyMgQ09ORklHX0lQX1BOUF9ESENQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX1BOUF9CT09UUCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9QTlBfUkFSUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfSVBJUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAorIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0CitDT05GSUdfU1lOX0NPT0tJRVM9eQorIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQ9eQorQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTD15CitDT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVD15CisjIENPTkZJR19JTkVUX0xSTyBpcyBub3Qgc2V0CitDT05GSUdfSU5FVF9ESUFHPXkKK0NPTkZJR19JTkVUX1RDUF9ESUFHPXkKKyMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKK0NPTkZJR19UQ1BfQ09OR19DVUJJQz15CitDT05GSUdfREVGQVVMVF9UQ1BfQ09ORz0iY3ViaWMiCisjIENPTkZJR19UQ1BfTUQ1U0lHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQVjYgaXMgbm90IHNldAorIyBDT05GSUdfTkVUTEFCRUwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CisjIENPTkZJR19BVE0gaXMgbm90IHNldAorIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAorIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xMQzIgaXMgbm90IHNldAorIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1gyNSBpcyBub3Qgc2V0CisjIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0CisKKyMKKyMgTmV0d29yayB0ZXN0aW5nCisjCisjIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBTiBpcyBub3Qgc2V0CisjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKKworIworIyBXaXJlbGVzcworIworIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQzgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lFRUU4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKKworIworIyBEZXZpY2UgRHJpdmVycworIworCisjCisjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKKyMKK0NPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCitDT05GSUdfU1RBTkRBTE9ORT15CitDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CisjIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldAorIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAorIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKK0NPTkZJR19NVEQ9eQorIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DT05DQVQgaXMgbm90IHNldAorQ09ORklHX01URF9QQVJUSVRJT05TPXkKKyMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DTURMSU5FX1BBUlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9BUjdfUEFSVFMgaXMgbm90IHNldAorCisjCisjIFVzZXIgTW9kdWxlcyBBbmQgVHJhbnNsYXRpb24gTGF5ZXJzCisjCitDT05GSUdfTVREX0NIQVI9bQorQ09ORklHX01URF9CTEtERVZTPXkKK0NPTkZJR19NVERfQkxPQ0s9eQorIyBDT05GSUdfRlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GVEwgaXMgbm90IHNldAorIyBDT05GSUdfSU5GVEwgaXMgbm90IHNldAorIyBDT05GSUdfUkZEX0ZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19TU0ZEQyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfT09QUyBpcyBub3Qgc2V0CisKKyMKKyMgUkFNL1JPTS9GbGFzaCBjaGlwIGRyaXZlcnMKKyMKKyMgQ09ORklHX01URF9DRkkgaXMgbm90IHNldAorQ09ORklHX01URF9KRURFQ1BST0JFPW0KK0NPTkZJR19NVERfR0VOX1BST0JFPW0KKyMgQ09ORklHX01URF9DRklfQURWX09QVElPTlMgaXMgbm90IHNldAorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xPXkKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMj15CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzQ9eQorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzggaXMgbm90IHNldAorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE2IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8zMiBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NGSV9JMT15CitDT05GSUdfTVREX0NGSV9JMj15CisjIENPTkZJR19NVERfQ0ZJX0k0IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DRklfSTggaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NGSV9JTlRFTEVYVCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ0ZJX0FNRFNURCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ0ZJX1NUQUEgaXMgbm90IHNldAorQ09ORklHX01URF9SQU09eQorQ09ORklHX01URF9ST009bQorIyBDT05GSUdfTVREX0FCU0VOVCBpcyBub3Qgc2V0CisKKyMKKyMgTWFwcGluZyBkcml2ZXJzIGZvciBjaGlwIGFjY2VzcworIworQ09ORklHX01URF9DT01QTEVYX01BUFBJTkdTPXkKKyMgQ09ORklHX01URF9QSFlTTUFQIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9HUElPX0FERFIgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1VDTElOVVggaXMgbm90IHNldAorIyBDT05GSUdfTVREX1BMQVRSQU0gaXMgbm90IHNldAorCisjCisjIFNlbGYtY29udGFpbmVkIE1URCBkZXZpY2UgZHJpdmVycworIworIyBDT05GSUdfTVREX0RBVEFGTEFTSCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTTI1UDgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9TTFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUEhSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX01URFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQkxPQ0syTVREIGlzIG5vdCBzZXQKKworIworIyBEaXNrLU9uLUNoaXAgRGV2aWNlIERyaXZlcnMKKyMKKyMgQ09ORklHX01URF9ET0MyMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ET0MyMDAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ET0MyMDAxUExVUyBpcyBub3Qgc2V0CitDT05GSUdfTVREX05BTkQ9bQorIyBDT05GSUdfTVREX05BTkRfVkVSSUZZX1dSSVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9OQU5EX0VDQ19TTUMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX05BTkRfTVVTRVVNX0lEUyBpcyBub3Qgc2V0CitDT05GSUdfTVREX05BTkRfQkZJTj1tCitDT05GSUdfQkZJTl9OQU5EX0JBU0U9MHgyMDIxMjAwMAorQ09ORklHX0JGSU5fTkFORF9DTEU9MgorQ09ORklHX0JGSU5fTkFORF9BTEU9MQorQ09ORklHX0JGSU5fTkFORF9SRUFEWT0zCitDT05GSUdfTVREX05BTkRfSURTPW0KKyMgQ09ORklHX01URF9OQU5EX0JGNVhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9OQU5EX0RJU0tPTkNISVAgaXMgbm90IHNldAorIyBDT05GSUdfTVREX05BTkRfTkFORFNJTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTkFORF9QTEFURk9STSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQUxBVURBIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9PTkVOQU5EIGlzIG5vdCBzZXQKKworIworIyBVQkkgLSBVbnNvcnRlZCBibG9jayBpbWFnZXMKKyMKKyMgQ09ORklHX01URF9VQkkgaXMgbm90IHNldAorIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVj15CisjIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9MT09QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfVUIgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfUkFNPXkKK0NPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgorQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9NDA5NgorIyBDT05GSUdfQkxLX0RFVl9YSVAgaXMgbm90IHNldAorIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAorQ09ORklHX01JU0NfREVWSUNFUz15CisjIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAorIyBDT05GSUdfRU5DTE9TVVJFX1NFUlZJQ0VTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0lERT15CisjIENPTkZJR19JREUgaXMgbm90IHNldAorCisjCisjIFNDU0kgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RNQSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAorIyBDT05GSUdfQVRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX01EIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRERVZJQ0VTPXkKKyMgQ09ORklHX05FVERFVklDRVNfTVVMVElRVUVVRSBpcyBub3Qgc2V0CisjIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0CisjIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldAorIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RVTiBpcyBub3Qgc2V0CisjIENPTkZJR19WRVRIIGlzIG5vdCBzZXQKK0NPTkZJR19QSFlMSUI9eQorCisjCisjIE1JSSBQSFkgZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01BUlZFTExfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RBVklDT01fUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FTRU1JX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19MWFRfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NJQ0FEQV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfVklURVNTRV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfU01TQ19QSFkgaXMgbm90IHNldAorIyBDT05GSUdfQlJPQURDT01fUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lDUExVU19QSFkgaXMgbm90IHNldAorIyBDT05GSUdfUkVBTFRFS19QSFkgaXMgbm90IHNldAorIyBDT05GSUdfRklYRURfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX01ESU9fQklUQkFORyBpcyBub3Qgc2V0CitDT05GSUdfTkVUX0VUSEVSTkVUPXkKK0NPTkZJR19NSUk9eQorQ09ORklHX0JGSU5fTUFDPXkKK0NPTkZJR19CRklOX1RYX0RFU0NfTlVNPTEwCitDT05GSUdfQkZJTl9SWF9ERVNDX05VTT0yMAorQ09ORklHX0JGSU5fTUFDX1JNSUk9eQorIyBDT05GSUdfU01DOTFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNU0M5MTFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNOTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19FTkMyOEo2MCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfWk1JSSBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfUkdNSUkgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1RBSCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfRU1BQzQgaXMgbm90IHNldAorIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKK0NPTkZJR19ORVRERVZfMTAwMD15CisjIENPTkZJR19FMTAwMEVfRU5BQkxFRCBpcyBub3Qgc2V0CisjIENPTkZJR19BWDg4MTgwIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRERVZfMTAwMDA9eQorCisjCisjIFdpcmVsZXNzIExBTgorIworIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lXTFdJRklfTEVEUyBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIE5ldHdvcmsgQWRhcHRlcnMKKyMKKyMgQ09ORklHX1VTQl9DQVRDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9LQVdFVEggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1BFR0FTVVMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1JUTDgxNTAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1VTQk5FVCBpcyBub3Qgc2V0CisjIENPTkZJR19XQU4gaXMgbm90IHNldAorIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMSVAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAorIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0CisjIENPTkZJR19QSE9ORSBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKKyMKK0NPTkZJR19JTlBVVD15CisjIENPTkZJR19JTlBVVF9GRl9NRU1MRVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1BPTExERVYgaXMgbm90IHNldAorCisjCisjIFVzZXJsYW5kIGludGVyZmFjZXMKKyMKKyMgQ09ORklHX0lOUFVUX01PVVNFREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9FVkRFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgRGV2aWNlIERyaXZlcnMKKyMKKyMgQ09ORklHX0lOUFVUX0tFWUJPQVJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX01PVVNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1RBQkxFVCBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0CitDT05GSUdfSU5QVVRfTUlTQz15CisjIENPTkZJR19JTlBVVF9BVElfUkVNT1RFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0FUSV9SRU1PVEUyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0tFWVNQQU5fUkVNT1RFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1BPV0VSTUFURSBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9ZRUFMSU5LIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1VJTlBVVCBpcyBub3Qgc2V0CisjIENPTkZJR19UV0lfS0VZUEFEIGlzIG5vdCBzZXQKKworIworIyBIYXJkd2FyZSBJL08gcG9ydHMKKyMKKyMgQ09ORklHX1NFUklPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKKworIworIyBDaGFyYWN0ZXIgZGV2aWNlcworIworIyBDT05GSUdfQUQ5OTYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQSV9BRENfQkY1MzMgaXMgbm90IHNldAorIyBDT05GSUdfQkY1eHhfUFBJRkNEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JGSU5fU0lNUExFX1RJTUVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JGNXh4X1BQSSBpcyBub3Qgc2V0CisjIENPTkZJR19CRklOX1NQT1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JGSU5fVElNRVJfTEFURU5DWSBpcyBub3Qgc2V0CisjIENPTkZJR19UV0lfTENEIGlzIG5vdCBzZXQKK0NPTkZJR19TSU1QTEVfR1BJTz1tCitDT05GSUdfVlQ9eQorQ09ORklHX1ZUX0NPTlNPTEU9eQorQ09ORklHX0hXX0NPTlNPTEU9eQorIyBDT05GSUdfVlRfSFdfQ09OU09MRV9CSU5ESU5HIGlzIG5vdCBzZXQKK0NPTkZJR19ERVZLTUVNPXkKKyMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0CisKKyMKKyMgU2VyaWFsIGRyaXZlcnMKKyMKKyMgQ09ORklHX1NFUklBTF84MjUwIGlzIG5vdCBzZXQKKworIworIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0CisjCitDT05GSUdfU0VSSUFMX0JGSU49eQorQ09ORklHX1NFUklBTF9CRklOX0NPTlNPTEU9eQorQ09ORklHX1NFUklBTF9CRklOX0RNQT15CisjIENPTkZJR19TRVJJQUxfQkZJTl9QSU8gaXMgbm90IHNldAorIyBDT05GSUdfU0VSSUFMX0JGSU5fVUFSVDAgaXMgbm90IHNldAorQ09ORklHX1NFUklBTF9CRklOX1VBUlQxPXkKKyMgQ09ORklHX0JGSU5fVUFSVDFfQ1RTUlRTIGlzIG5vdCBzZXQKK0NPTkZJR19TRVJJQUxfQ09SRT15CitDT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15CisjIENPTkZJR19TRVJJQUxfQkZJTl9TUE9SVCBpcyBub3Qgc2V0CitDT05GSUdfVU5JWDk4X1BUWVM9eQorIyBDT05GSUdfTEVHQUNZX1BUWVMgaXMgbm90IHNldAorQ09ORklHX0JGSU5fT1RQPXkKKyMgQ09ORklHX0JGSU5fT1RQX1dSSVRFX0VOQUJMRSBpcyBub3Qgc2V0CisKKyMKKyMgQ0FOLCB0aGUgY2FyIGJ1cyBhbmQgaW5kdXN0cmlhbCBmaWVsZGJ1cworIworIyBDT05GSUdfQ0FONExJTlVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0CisjIENPTkZJR19IV19SQU5ET00gaXMgbm90IHNldAorIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAorIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0CisjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKK0NPTkZJR19JMkM9eQorQ09ORklHX0kyQ19CT0FSRElORk89eQorQ09ORklHX0kyQ19DSEFSREVWPW0KK0NPTkZJR19JMkNfSEVMUEVSX0FVVE89eQorCisjCisjIEkyQyBIYXJkd2FyZSBCdXMgc3VwcG9ydAorIworQ09ORklHX0kyQ19CTEFDS0ZJTl9UV0k9eQorQ09ORklHX0kyQ19CTEFDS0ZJTl9UV0lfQ0xLX0tIWj01MAorIyBDT05GSUdfSTJDX0dQSU8gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX09DT1JFUyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfUEFSUE9SVF9MSUdIVCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU0lNVEVDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19UQU9TX0VWTSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU1RVQiBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfVElOWV9VU0IgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1BDQV9QTEFURk9STSBpcyBub3Qgc2V0CisKKyMKKyMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CisjCisjIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRDUyNTIgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19FRVBST00gaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQ0Y4NTkxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTUFYNjg3NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0JVUyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQ0hJUCBpcyBub3Qgc2V0CitDT05GSUdfU1BJPXkKK0NPTkZJR19TUElfTUFTVEVSPXkKKworIworIyBTUEkgTWFzdGVyIENvbnRyb2xsZXIgRHJpdmVycworIworQ09ORklHX1NQSV9CRklOPXkKKyMgQ09ORklHX1NQSV9CSVRCQU5HIGlzIG5vdCBzZXQKKworIworIyBTUEkgUHJvdG9jb2wgTWFzdGVycworIworIyBDT05GSUdfU1BJX0FUMjUgaXMgbm90IHNldAorIyBDT05GSUdfU1BJX1NQSURFViBpcyBub3Qgc2V0CisjIENPTkZJR19TUElfVExFNjJYMCBpcyBub3Qgc2V0CisjIENPTkZJR19XMSBpcyBub3Qgc2V0CisjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAorQ09ORklHX0hXTU9OPXkKKyMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FENzQxOCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FETTEwMjEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRE0xMDI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURNMTAyNiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FETTEwMjkgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRE0xMDMxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURNOTI0MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FEVDc0NzAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRFQ3NDczIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQVRYUDEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19EUzE2MjEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19GNzE4MDVGIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRjcxODgyRkcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19GNzUzNzVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfR0w1MThTTSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0dMNTIwU00gaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19JVDg3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE02MyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNNzAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTc1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE03NyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNNzggaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE04MyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNODUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTg3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE05MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNOTIgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTkzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTUFYMTYxOSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX01BWDY2NTAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQzg3MzYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUEM4NzQyNyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0RNRTE3MzcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19TTVNDNDdNMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1NNU0M0N00xOTIgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19TTVNDNDdCMzk3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURTNzgyOCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1RITUM1MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1ZUMTIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4Mzc4MUQgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODM3OTFEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzNzkyRCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4Mzc5MyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4M0w3ODVUUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4M0w3ODZORyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzNjI3RUhGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAorIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0CisjIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKK0NPTkZJR19XQVRDSERPRz15CisjIENPTkZJR19XQVRDSERPR19OT1dBWU9VVCBpcyBub3Qgc2V0CisKKyMKKyMgV2F0Y2hkb2cgRGV2aWNlIERyaXZlcnMKKyMKKyMgQ09ORklHX1NPRlRfV0FUQ0hET0cgaXMgbm90IHNldAorQ09ORklHX0JGSU5fV0RUPXkKKworIworIyBVU0ItYmFzZWQgV2F0Y2hkb2cgQ2FyZHMKKyMKKyMgQ09ORklHX1VTQlBDV0FUQ0hET0cgaXMgbm90IHNldAorCisjCisjIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQorIworQ09ORklHX1NTQl9QT1NTSUJMRT15CisjIENPTkZJR19TU0IgaXMgbm90IHNldAorCisjCisjIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0CisjIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKKworIworIyBNdWx0aW1lZGlhIGRldmljZXMKKyMKKworIworIyBNdWx0aW1lZGlhIGNvcmUgc3VwcG9ydAorIworIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RWQl9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX01FRElBIGlzIG5vdCBzZXQKKworIworIyBNdWx0aW1lZGlhIGRyaXZlcnMKKyMKKyMgQ09ORklHX0RBQiBpcyBub3Qgc2V0CisKKyMKKyMgR3JhcGhpY3Mgc3VwcG9ydAorIworIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0wgaXMgbm90IHNldAorIyBDT05GSUdfRkIgaXMgbm90IHNldAorIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKKworIworIyBEaXNwbGF5IGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19ESVNQTEFZX1NVUFBPUlQgaXMgbm90IHNldAorCisjCisjIENvbnNvbGUgZGlzcGxheSBkcml2ZXIgc3VwcG9ydAorIworQ09ORklHX0RVTU1ZX0NPTlNPTEU9eQorCisjCisjIFNvdW5kCisjCitDT05GSUdfU09VTkQ9bQorCisjCisjIEFkdmFuY2VkIExpbnV4IFNvdW5kIEFyY2hpdGVjdHVyZQorIworQ09ORklHX1NORD1tCitDT05GSUdfU05EX1RJTUVSPW0KK0NPTkZJR19TTkRfUENNPW0KKyMgQ09ORklHX1NORF9TRVFVRU5DRVIgaXMgbm90IHNldAorQ09ORklHX1NORF9PU1NFTVVMPXkKK0NPTkZJR19TTkRfTUlYRVJfT1NTPW0KK0NPTkZJR19TTkRfUENNX09TUz1tCitDT05GSUdfU05EX1BDTV9PU1NfUExVR0lOUz15CisjIENPTkZJR19TTkRfRFlOQU1JQ19NSU5PUlMgaXMgbm90IHNldAorQ09ORklHX1NORF9TVVBQT1JUX09MRF9BUEk9eQorQ09ORklHX1NORF9WRVJCT1NFX1BST0NGUz15CisjIENPTkZJR19TTkRfVkVSQk9TRV9QUklOVEsgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0RFQlVHIGlzIG5vdCBzZXQKKworIworIyBHZW5lcmljIGRldmljZXMKKyMKKyMgQ09ORklHX1NORF9EVU1NWSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfTVRQQVYgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1NFUklBTF9VMTY1NTAgaXMgbm90IHNldAorIyBDT05GSUdfU05EX01QVTQwMSBpcyBub3Qgc2V0CisKKyMKKyMgU1BJIGRldmljZXMKKyMKKworIworIyBBTFNBIEJsYWNrZmluIGRldmljZXMKKyMKKyMgQ09ORklHX1NORF9CTEFDS0ZJTl9BRDE4MzYgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0JGSU5fQUQ3MzMxMSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfQkZJTl9BRDczMzIyIGlzIG5vdCBzZXQKKworIworIyBVU0IgZGV2aWNlcworIworIyBDT05GSUdfU05EX1VTQl9BVURJTyBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfVVNCX0NBSUFRIGlzIG5vdCBzZXQKKworIworIyBTeXN0ZW0gb24gQ2hpcCBhdWRpbyBzdXBwb3J0CisjCitDT05GSUdfU05EX1NPQz1tCitDT05GSUdfU05EX0JGNVhYX0kyUz1tCitDT05GSUdfU05EX0JGNVhYX1NPQ19TU00yNjAyPW0KKyMgQ09ORklHX1NORF9CRjVYWF9BQzk3IGlzIG5vdCBzZXQKK0NPTkZJR19TTkRfQkY1WFhfU09DX1NQT1JUPW0KK0NPTkZJR19TTkRfQkY1WFhfU09DX0kyUz1tCitDT05GSUdfU05EX0JGNVhYX1NQT1JUX05VTT0wCisKKyMKKyMgQUxTQSBTb0MgYXVkaW8gZm9yIEZyZWVzY2FsZSBTT0NzCisjCisKKyMKKyMgU29DIEF1ZGlvIGZvciB0aGUgVGV4YXMgSW5zdHJ1bWVudHMgT01BUAorIworQ09ORklHX1NORF9TT0NfU1NNMjYwMj1tCisKKyMKKyMgT3BlbiBTb3VuZCBTeXN0ZW0KKyMKKyMgQ09ORklHX1NPVU5EX1BSSU1FIGlzIG5vdCBzZXQKK0NPTkZJR19ISURfU1VQUE9SVD15CitDT05GSUdfSElEPXkKKyMgQ09ORklHX0hJRF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19ISURSQVcgaXMgbm90IHNldAorCisjCisjIFVTQiBJbnB1dCBEZXZpY2VzCisjCitDT05GSUdfVVNCX0hJRD15CisjIENPTkZJR19VU0JfSElESU5QVVRfUE9XRVJCT09LIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9GRiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSElEREVWIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfU1VQUE9SVD15CitDT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15CisjIENPTkZJR19VU0JfQVJDSF9IQVNfT0hDSSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQVJDSF9IQVNfRUhDSSBpcyBub3Qgc2V0CitDT05GSUdfVVNCPXkKKyMgQ09ORklHX1VTQl9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQU5OT1VOQ0VfTkVXX0RFVklDRVMgaXMgbm90IHNldAorCisjCisjIE1pc2NlbGxhbmVvdXMgVVNCIG9wdGlvbnMKKyMKKyMgQ09ORklHX1VTQl9ERVZJQ0VGUyBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0RFVklDRV9DTEFTUz15CisjIENPTkZJR19VU0JfRFlOQU1JQ19NSU5PUlMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09URyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1RHX1dISVRFTElTVCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX09UR19CTEFDS0xJU1RfSFVCPXkKKworIworIyBVU0IgSG9zdCBDb250cm9sbGVyIERyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9DNjdYMDBfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNQMTc2MF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTUDEzNjJfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TTDgxMV9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1I4QTY2NTk3X0hDRCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX01VU0JfSERSQz15CitDT05GSUdfVVNCX01VU0JfU09DPXkKKworIworIyBCbGFja2ZpbiBoaWdoIHNwZWVkIFVTQiBzdXBwb3J0CisjCitDT05GSUdfVVNCX01VU0JfSE9TVD15CisjIENPTkZJR19VU0JfTVVTQl9QRVJJUEhFUkFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9NVVNCX09URyBpcyBub3Qgc2V0CitDT05GSUdfVVNCX01VU0JfSERSQ19IQ0Q9eQorQ09ORklHX01VU0JfUElPX09OTFk9eQorQ09ORklHX1VTQl9NVVNCX0xPR0xFVkVMPTAKKworIworIyBVU0IgRGV2aWNlIENsYXNzIGRyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9BQ00gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1BSSU5URVIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1dETSBpcyBub3Qgc2V0CisKKyMKKyMgTk9URTogVVNCX1NUT1JBR0UgZW5hYmxlcyBTQ1NJLCBhbmQgJ1NDU0kgZGlzayBzdXBwb3J0JworIworCisjCisjIG1heSBhbHNvIGJlIG5lZWRlZDsgc2VlIFVTQl9TVE9SQUdFIEhlbHAgZm9yIG1vcmUgaW5mb3JtYXRpb24KKyMKKyMgQ09ORklHX1VTQl9MSUJVU1VBTCBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIEltYWdpbmcgZGV2aWNlcworIworIyBDT05GSUdfVVNCX01EQzgwMCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX01PTj15CisKKyMKKyMgVVNCIHBvcnQgZHJpdmVycworIworIyBDT05GSUdfVVNCX1NFUklBTCBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIE1pc2NlbGxhbmVvdXMgZHJpdmVycworIworIyBDT05GSUdfVVNCX0VNSTYyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9FTUkyNiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQURVVFVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BVUVSU1dBTEQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1JJTzUwMCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTEVHT1RPV0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0JFUlJZX0NIQVJHRSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9DWVBSRVNTX0NZN0M2MyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQ1lUSEVSTSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUEhJREdFVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSURNT1VTRSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRlRESV9FTEFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BUFBMRURJU1BMQVkgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NJU1VTQlZHQSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTEQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1RSQU5DRVZJQlJBVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JT1dBUlJJT1IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTSUdIVEZXIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAorIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FDQ0VTU0lCSUxJVFkgaXMgbm90IHNldAorQ09ORklHX1JUQ19MSUI9eQorQ09ORklHX1JUQ19DTEFTUz15CitDT05GSUdfUlRDX0hDVE9TWVM9eQorQ09ORklHX1JUQ19IQ1RPU1lTX0RFVklDRT0icnRjMCIKKyMgQ09ORklHX1JUQ19ERUJVRyBpcyBub3Qgc2V0CisKKyMKKyMgUlRDIGludGVyZmFjZXMKKyMKK0NPTkZJR19SVENfSU5URl9TWVNGUz15CitDT05GSUdfUlRDX0lOVEZfUFJPQz15CitDT05GSUdfUlRDX0lOVEZfREVWPXkKKyMgQ09ORklHX1JUQ19JTlRGX0RFVl9VSUVfRU1VTCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1RFU1QgaXMgbm90IHNldAorCisjCisjIEkyQyBSVEMgZHJpdmVycworIworIyBDT05GSUdfUlRDX0RSVl9EUzEzMDcgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzEzNzQgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE2NzIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NQVg2OTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUlM1QzM3MiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0lTTDEyMDggaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9YMTIwNSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1BDRjg1NjMgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTgzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQxVDgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUzM1MzkwQSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0ZNMzEzMCBpcyBub3Qgc2V0CisKKyMKKyMgU1BJIFJUQyBkcml2ZXJzCisjCisjIENPTkZJR19SVENfRFJWX01BWDY5MDIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SOTcwMSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JTNUMzNDggaXMgbm90IHNldAorCisjCisjIFBsYXRmb3JtIFJUQyBkcml2ZXJzCisjCisjIENPTkZJR19SVENfRFJWX0RTMTUxMSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTU1MyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTc0MiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1NUSzE3VEE4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQ4VDg2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQ4VDU5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfVjMwMjAgaXMgbm90IHNldAorCisjCisjIG9uLUNQVSBSVEMgZHJpdmVycworIworQ09ORklHX1JUQ19EUlZfQkZJTj15CisjIENPTkZJR19VSU8gaXMgbm90IHNldAorCisjCisjIEZpbGUgc3lzdGVtcworIworIyBDT05GSUdfRVhUMl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQzX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDRERVZfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRE5PVElGWSBpcyBub3Qgc2V0CitDT05GSUdfSU5PVElGWT15CitDT05GSUdfSU5PVElGWV9VU0VSPXkKKyMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAorCisjCisjIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKKyMKKyMgQ09ORklHX0lTTzk2NjBfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVURGX0ZTIGlzIG5vdCBzZXQKKworIworIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCisjCisjIENPTkZJR19NU0RPU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19WRkFUX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAorCisjCisjIFBzZXVkbyBmaWxlc3lzdGVtcworIworQ09ORklHX1BST0NfRlM9eQorQ09ORklHX1BST0NfU1lTQ1RMPXkKK0NPTkZJR19TWVNGUz15CisjIENPTkZJR19UTVBGUyBpcyBub3Qgc2V0CisjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAorIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAorCisjCisjIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKKyMKKyMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEZTUExVU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAorQ09ORklHX1lBRkZTX0ZTPW0KK0NPTkZJR19ZQUZGU19ZQUZGUzE9eQorIyBDT05GSUdfWUFGRlNfOUJZVEVfVEFHUyBpcyBub3Qgc2V0CisjIENPTkZJR19ZQUZGU19ET0VTX0VDQyBpcyBub3Qgc2V0CitDT05GSUdfWUFGRlNfWUFGRlMyPXkKK0NPTkZJR19ZQUZGU19BVVRPX1lBRkZTMj15CisjIENPTkZJR19ZQUZGU19ESVNBQkxFX0xBWllfTE9BRCBpcyBub3Qgc2V0CisjIENPTkZJR19ZQUZGU19ESVNBQkxFX1dJREVfVE5PREVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1lBRkZTX0FMV0FZU19DSEVDS19DSFVOS19FUkFTRUQgaXMgbm90IHNldAorQ09ORklHX1lBRkZTX1NIT1JUX05BTUVTX0lOX1JBTT15CitDT05GSUdfSkZGUzJfRlM9bQorQ09ORklHX0pGRlMyX0ZTX0RFQlVHPTAKK0NPTkZJR19KRkZTMl9GU19XUklURUJVRkZFUj15CisjIENPTkZJR19KRkZTMl9GU19XQlVGX1ZFUklGWSBpcyBub3Qgc2V0CisjIENPTkZJR19KRkZTMl9TVU1NQVJZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGRlMyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGRlMyX0NPTVBSRVNTSU9OX09QVElPTlMgaXMgbm90IHNldAorQ09ORklHX0pGRlMyX1pMSUI9eQorIyBDT05GSUdfSkZGUzJfTFpPIGlzIG5vdCBzZXQKK0NPTkZJR19KRkZTMl9SVElNRT15CisjIENPTkZJR19KRkZTMl9SVUJJTiBpcyBub3Qgc2V0CisjIENPTkZJR19DUkFNRlMgaXMgbm90IHNldAorIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CitDT05GSUdfTkZTX0ZTPW0KK0NPTkZJR19ORlNfVjM9eQorIyBDT05GSUdfTkZTX1YzX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORlNfVjQgaXMgbm90IHNldAorIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0CitDT05GSUdfTE9DS0Q9bQorQ09ORklHX0xPQ0tEX1Y0PXkKK0NPTkZJR19ORlNfQ09NTU9OPXkKK0NPTkZJR19TVU5SUEM9bQorIyBDT05GSUdfU1VOUlBDX0JJTkQzNCBpcyBub3Qgc2V0CisjIENPTkZJR19SUENTRUNfR1NTX0tSQjUgaXMgbm90IHNldAorIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0CitDT05GSUdfU01CX0ZTPW0KKyMgQ09ORklHX1NNQl9OTFNfREVGQVVMVCBpcyBub3Qgc2V0CisjIENPTkZJR19DSUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgUGFydGl0aW9uIFR5cGVzCisjCisjIENPTkZJR19QQVJUSVRJT05fQURWQU5DRUQgaXMgbm90IHNldAorQ09ORklHX01TRE9TX1BBUlRJVElPTj15CitDT05GSUdfTkxTPW0KK0NPTkZJR19OTFNfREVGQVVMVD0iaXNvODg1OS0xIgorIyBDT05GSUdfTkxTX0NPREVQQUdFXzQzNyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfNzM3IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV83NzUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODUyIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjEgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjkgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzNiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85MzIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzk0OSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODc0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzggaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTEgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0FTQ0lJIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzEgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8zIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV82IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfOSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8xMyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8xNCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8xNSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfS09JOF9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19LT0k4X1UgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX1VURjggaXMgbm90IHNldAorIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKKworIworIyBLZXJuZWwgaGFja2luZworIworIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAorQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQ9eQorQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKK0NPTkZJR19GUkFNRV9XQVJOPTEwMjQKKyMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19GUz15CisjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0tFUk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19CVUdWRVJCT1NFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX01NUlM9eQorQ09ORklHX0RFQlVHX0hVTlRfRk9SX1pFUk89eQorQ09ORklHX0RFQlVHX0JGSU5fSFdUUkFDRV9PTj15CitDT05GSUdfREVCVUdfQkZJTl9IV1RSQUNFX0NPTVBSRVNTSU9OX09GRj15CisjIENPTkZJR19ERUJVR19CRklOX0hXVFJBQ0VfQ09NUFJFU1NJT05fT05FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0JGSU5fSFdUUkFDRV9DT01QUkVTU0lPTl9UV08gaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0JGSU5fSFdUUkFDRV9DT01QUkVTU0lPTj0wCisjIENPTkZJR19ERUJVR19CRklOX0hXVFJBQ0VfRVhQQU5EIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0JGSU5fTk9fS0VSTl9IV1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19FQVJMWV9QUklOVEs9eQorQ09ORklHX0NQTEJfSU5GTz15CitDT05GSUdfQUNDRVNTX0NIRUNLPXkKKworIworIyBTZWN1cml0eSBvcHRpb25zCisjCisjIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKK0NPTkZJR19TRUNVUklUWT15CisjIENPTkZJR19TRUNVUklUWV9ORVRXT1JLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZX0NBUEFCSUxJVElFUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWV9ST09UUExVRyBpcyBub3Qgc2V0CitDT05GSUdfU0VDVVJJVFlfREVGQVVMVF9NTUFQX01JTl9BRERSPTAKK0NPTkZJR19DUllQVE89eQorCisjCisjIENyeXB0byBjb3JlIG9yIGhlbHBlcgorIworIyBDT05GSUdfQ1JZUFRPX01BTkFHRVIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19OVUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DUllQVEQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FVVEhFTkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RFU1QgaXMgbm90IHNldAorCisjCisjIEF1dGhlbnRpY2F0ZWQgRW5jcnlwdGlvbiB3aXRoIEFzc29jaWF0ZWQgRGF0YQorIworIyBDT05GSUdfQ1JZUFRPX0NDTSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0NNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TRVFJViBpcyBub3Qgc2V0CisKKyMKKyMgQmxvY2sgbW9kZXMKKyMKKyMgQ09ORklHX0NSWVBUT19DQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NUUiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ1RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19FQ0IgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0xSVyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fWFRTIGlzIG5vdCBzZXQKKworIworIyBIYXNoIG1vZGVzCisjCisjIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisKKyMKKyMgRGlnZXN0CisjCisjIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX01ENSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NIQTEgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NIQTI1NiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0hBNTEyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19UR1IxOTIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1dQNTEyIGlzIG5vdCBzZXQKKworIworIyBDaXBoZXJzCisjCisjIENPTkZJR19DUllQVE9fQUVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19BTlVCSVMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FSQzQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0JMT1dGSVNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQU1FTExJQSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0FTVDUgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NBU1Q2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19ERVMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0ZDUllQVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fS0hBWkFEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TQUxTQTIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TRUVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TRVJQRU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19URUEgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RXT0ZJU0ggaXMgbm90IHNldAorCisjCisjIENvbXByZXNzaW9uCisjCisjIENPTkZJR19DUllQVE9fREVGTEFURSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTFpPIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fSFc9eQorCisjCisjIExpYnJhcnkgcm91dGluZXMKKyMKK0NPTkZJR19CSVRSRVZFUlNFPXkKKyMgQ09ORklHX0dFTkVSSUNfRklORF9GSVJTVF9CSVQgaXMgbm90IHNldAorQ09ORklHX0NSQ19DQ0lUVD1tCisjIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0CisjIENPTkZJR19DUkNfSVRVX1QgaXMgbm90IHNldAorQ09ORklHX0NSQzMyPXkKKyMgQ09ORklHX0NSQzcgaXMgbm90IHNldAorIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKK0NPTkZJR19aTElCX0lORkxBVEU9eQorQ09ORklHX1pMSUJfREVGTEFURT1tCitDT05GSUdfUExJU1Q9eQorQ09ORklHX0hBU19JT01FTT15CitDT05GSUdfSEFTX0lPUE9SVD15CitDT05GSUdfSEFTX0RNQT15CmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvQkY1MjctRVpLSVRfZGVmY29uZmlnIGIvYXJjaC9ibGFja2Zpbi9jb25maWdzL0JGNTI3LUVaS0lUX2RlZmNvbmZpZwppbmRleCA2Njg1NGE4Li40YTJhNjYwIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvQkY1MjctRVpLSVRfZGVmY29uZmlnCisrKyBiL2FyY2gvYmxhY2tmaW4vY29uZmlncy9CRjUyNy1FWktJVF9kZWZjb25maWcKQEAgLTc3Miw3ICs3NzIsNyBAQAogIwogIyBDT05GSUdfQ0FONExJTlVYIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0Ci1DT05GSUdfSFdfUkFORE9NPXkKKyMgQ09ORklHX0hXX1JBTkRPTSBpcyBub3Qgc2V0CiAjIENPTkZJR19HRU5fUlRDIGlzIG5vdCBzZXQKICMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKICMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9jb25maWdzL0JGNTMzLUVaS0lUX2RlZmNvbmZpZyBiL2FyY2gvYmxhY2tmaW4vY29uZmlncy9CRjUzMy1FWktJVF9kZWZjb25maWcKaW5kZXggNmJjMTFkYi4uZGVlYjVlNCAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9jb25maWdzL0JGNTMzLUVaS0lUX2RlZmNvbmZpZworKysgYi9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvQkY1MzMtRVpLSVRfZGVmY29uZmlnCkBAIC02NzQsNyArNjc0LDcgQEAKICMKICMgQ09ORklHX0NBTjRMSU5VWCBpcyBub3Qgc2V0CiAjIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAotQ09ORklHX0hXX1JBTkRPTT15CisjIENPTkZJR19IV19SQU5ET00gaXMgbm90IHNldAogIyBDT05GSUdfR0VOX1JUQyBpcyBub3Qgc2V0CiAjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CiAjIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKQEAgLTc0MCw3ICs3NDAsNyBAQAogIwogIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKICMgQ09ORklHX0RWQl9DT1JFIGlzIG5vdCBzZXQKLUNPTkZJR19EQUI9eQorIyBDT05GSUdfREFCIGlzIG5vdCBzZXQKIAogIwogIyBHcmFwaGljcyBzdXBwb3J0CmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvQkY1MzMtU1RBTVBfZGVmY29uZmlnIGIvYXJjaC9ibGFja2Zpbi9jb25maWdzL0JGNTMzLVNUQU1QX2RlZmNvbmZpZwppbmRleCBkNzdkOTkxLi5jMjMyNjdlIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvQkY1MzMtU1RBTVBfZGVmY29uZmlnCisrKyBiL2FyY2gvYmxhY2tmaW4vY29uZmlncy9CRjUzMy1TVEFNUF9kZWZjb25maWcKQEAgLTY4MSw3ICs2ODEsNyBAQAogIwogIyBDT05GSUdfQ0FONExJTlVYIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0Ci1DT05GSUdfSFdfUkFORE9NPXkKKyMgQ09ORklHX0hXX1JBTkRPTSBpcyBub3Qgc2V0CiAjIENPTkZJR19HRU5fUlRDIGlzIG5vdCBzZXQKICMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKICMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9jb25maWdzL0JGNTM3LVNUQU1QX2RlZmNvbmZpZyBiL2FyY2gvYmxhY2tmaW4vY29uZmlncy9CRjUzNy1TVEFNUF9kZWZjb25maWcKaW5kZXggNWZkN2M0Yi4uNjNhMGY4NSAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9jb25maWdzL0JGNTM3LVNUQU1QX2RlZmNvbmZpZworKysgYi9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvQkY1MzctU1RBTVBfZGVmY29uZmlnCkBAIC03MzEsNyArNzMxLDcgQEAKICMgQ09ORklHX0NBTl9VTkNUV0lOQ0FOIGlzIG5vdCBzZXQKIENPTkZJR19DQU5fQkxBQ0tGSU49bQogIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKLUNPTkZJR19IV19SQU5ET009eQorIyBDT05GSUdfSFdfUkFORE9NIGlzIG5vdCBzZXQKICMgQ09ORklHX0dFTl9SVEMgaXMgbm90IHNldAogIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAogIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0CkBAIC04NzEsNyArODcxLDcgQEAKICMKICMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0CiAjIENPTkZJR19EVkJfQ09SRSBpcyBub3Qgc2V0Ci1DT05GSUdfREFCPXkKKyMgQ09ORklHX0RBQiBpcyBub3Qgc2V0CiAKICMKICMgR3JhcGhpY3Mgc3VwcG9ydApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9jb25maWdzL0JGNTQ4LUVaS0lUX2RlZmNvbmZpZyBiL2FyY2gvYmxhY2tmaW4vY29uZmlncy9CRjU0OC1FWktJVF9kZWZjb25maWcKaW5kZXggMzkwNjY5ZS4uYmY2MzY2MCAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9jb25maWdzL0JGNTQ4LUVaS0lUX2RlZmNvbmZpZworKysgYi9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvQkY1NDgtRVpLSVRfZGVmY29uZmlnCkBAIC04NTUsNyArODU1LDcgQEAKICMKICMgQ09ORklHX0NBTjRMSU5VWCBpcyBub3Qgc2V0CiAjIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAotQ09ORklHX0hXX1JBTkRPTT15CisjIENPTkZJR19IV19SQU5ET00gaXMgbm90IHNldAogIyBDT05GSUdfR0VOX1JUQyBpcyBub3Qgc2V0CiAjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CiAjIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKQEAgLTEwMDEsNyArMTAwMSw3IEBACiAjCiAjIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAogIyBDT05GSUdfRFZCX0NPUkUgaXMgbm90IHNldAotQ09ORklHX0RBQj15CisjIENPTkZJR19EQUIgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0RBQlVTQiBpcyBub3Qgc2V0CiAKICMKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vY29uZmlncy9CRjU2MS1FWktJVF9kZWZjb25maWcgYi9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvQkY1NjEtRVpLSVRfZGVmY29uZmlnCmluZGV4IDk3NmE0ZDcuLjNjNzBkNjIgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vY29uZmlncy9CRjU2MS1FWktJVF9kZWZjb25maWcKKysrIGIvYXJjaC9ibGFja2Zpbi9jb25maWdzL0JGNTYxLUVaS0lUX2RlZmNvbmZpZwpAQCAtNzE5LDcgKzcxOSw3IEBACiAjCiAjIENPTkZJR19DQU40TElOVVggaXMgbm90IHNldAogIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKLUNPTkZJR19IV19SQU5ET009eQorIyBDT05GSUdfSFdfUkFORE9NIGlzIG5vdCBzZXQKICMgQ09ORklHX0dFTl9SVEMgaXMgbm90IHNldAogIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAogIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0CkBAIC03ODUsNyArNzg1LDcgQEAKICMKICMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0CiAjIENPTkZJR19EVkJfQ09SRSBpcyBub3Qgc2V0Ci1DT05GSUdfREFCPXkKKyMgQ09ORklHX0RBQiBpcyBub3Qgc2V0CiAKICMKICMgR3JhcGhpY3Mgc3VwcG9ydApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9jb25maWdzL0NNLUJGNTI3X2RlZmNvbmZpZyBiL2FyY2gvYmxhY2tmaW4vY29uZmlncy9DTS1CRjUyN19kZWZjb25maWcKaW5kZXggMDc5OWFhOS4uYjZhMTQ2MyAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9jb25maWdzL0NNLUJGNTI3X2RlZmNvbmZpZworKysgYi9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvQ00tQkY1MjdfZGVmY29uZmlnCkBAIC02NzksNyArNjc5LDcgQEAKICMKICMgQ09ORklHX0NBTjRMSU5VWCBpcyBub3Qgc2V0CiAjIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAotQ09ORklHX0hXX1JBTkRPTT15CisjIENPTkZJR19IV19SQU5ET00gaXMgbm90IHNldAogIyBDT05GSUdfR0VOX1JUQyBpcyBub3Qgc2V0CiAjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CiAjIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vY29uZmlncy9DTS1CRjUzM19kZWZjb25maWcgYi9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvQ00tQkY1MzNfZGVmY29uZmlnCmluZGV4IDA5ZGVlYTQuLmMzYmE5MDYgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vY29uZmlncy9DTS1CRjUzM19kZWZjb25maWcKKysrIGIvYXJjaC9ibGFja2Zpbi9jb25maWdzL0NNLUJGNTMzX2RlZmNvbmZpZwpAQCAtNjcyLDcgKzY3Miw3IEBACiAjCiAjIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAogIyBDT05GSUdfRFZCX0NPUkUgaXMgbm90IHNldAotQ09ORklHX0RBQj15CisjIENPTkZJR19EQUIgaXMgbm90IHNldAogCiAjCiAjIEdyYXBoaWNzIHN1cHBvcnQKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vY29uZmlncy9DTS1CRjUzN0VfZGVmY29uZmlnIGIvYXJjaC9ibGFja2Zpbi9jb25maWdzL0NNLUJGNTM3RV9kZWZjb25maWcKaW5kZXggMjE5ZmMzNC4uY2RjNmI3ZiAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9jb25maWdzL0NNLUJGNTM3RV9kZWZjb25maWcKKysrIGIvYXJjaC9ibGFja2Zpbi9jb25maWdzL0NNLUJGNTM3RV9kZWZjb25maWcKQEAgLTcwMyw3ICs3MDMsNyBAQAogIwogIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKICMgQ09ORklHX0RWQl9DT1JFIGlzIG5vdCBzZXQKLUNPTkZJR19EQUI9eQorIyBDT05GSUdfREFCIGlzIG5vdCBzZXQKIAogIwogIyBHcmFwaGljcyBzdXBwb3J0CmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvQ00tQkY1MzdVX2RlZmNvbmZpZyBiL2FyY2gvYmxhY2tmaW4vY29uZmlncy9DTS1CRjUzN1VfZGVmY29uZmlnCmluZGV4IDk4NzNkNTguLmYwNzRiZGMgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vY29uZmlncy9DTS1CRjUzN1VfZGVmY29uZmlnCisrKyBiL2FyY2gvYmxhY2tmaW4vY29uZmlncy9DTS1CRjUzN1VfZGVmY29uZmlnCkBAIC02ODMsNyArNjgzLDcgQEAKICMKICMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0CiAjIENPTkZJR19EVkJfQ09SRSBpcyBub3Qgc2V0Ci1DT05GSUdfREFCPXkKKyMgQ09ORklHX0RBQiBpcyBub3Qgc2V0CiAKICMKICMgR3JhcGhpY3Mgc3VwcG9ydApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9jb25maWdzL0NNLUJGNTQ4X2RlZmNvbmZpZyBiL2FyY2gvYmxhY2tmaW4vY29uZmlncy9DTS1CRjU0OF9kZWZjb25maWcKaW5kZXggMGUzNjA1Zi4uNWM0NGZkYiAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9jb25maWdzL0NNLUJGNTQ4X2RlZmNvbmZpZworKysgYi9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvQ00tQkY1NDhfZGVmY29uZmlnCkBAIC03NjIsNyArNzYyLDcgQEAKICMKICMgQ09ORklHX0NBTjRMSU5VWCBpcyBub3Qgc2V0CiAjIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAotQ09ORklHX0hXX1JBTkRPTT15CisjIENPTkZJR19IV19SQU5ET00gaXMgbm90IHNldAogIyBDT05GSUdfR0VOX1JUQyBpcyBub3Qgc2V0CiAjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CiAjIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKQEAgLTkwOSw3ICs5MDksNyBAQAogIwogIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKICMgQ09ORklHX0RWQl9DT1JFIGlzIG5vdCBzZXQKLUNPTkZJR19EQUI9eQorIyBDT05GSUdfREFCIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9EQUJVU0IgaXMgbm90IHNldAogCiAjCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvQ00tQkY1NjFfZGVmY29uZmlnIGIvYXJjaC9ibGFja2Zpbi9jb25maWdzL0NNLUJGNTYxX2RlZmNvbmZpZwppbmRleCA1OWM3Y2RiLi4wODZmZTVkIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvQ00tQkY1NjFfZGVmY29uZmlnCisrKyBiL2FyY2gvYmxhY2tmaW4vY29uZmlncy9DTS1CRjU2MV9kZWZjb25maWcKQEAgLTY4NCw3ICs2ODQsNyBAQAogIwogIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKICMgQ09ORklHX0RWQl9DT1JFIGlzIG5vdCBzZXQKLUNPTkZJR19EQUI9eQorIyBDT05GSUdfREFCIGlzIG5vdCBzZXQKIAogIwogIyBHcmFwaGljcyBzdXBwb3J0CmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvSDg2MDZfZGVmY29uZmlnIGIvYXJjaC9ibGFja2Zpbi9jb25maWdzL0g4NjA2X2RlZmNvbmZpZwppbmRleCBiYTBiZWU5Li4xZmMzMWYxIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvSDg2MDZfZGVmY29uZmlnCisrKyBiL2FyY2gvYmxhY2tmaW4vY29uZmlncy9IODYwNl9kZWZjb25maWcKQEAgLTEsNiArMSw2IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjIuMTIKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yMi4xNAogIwogIyBDT05GSUdfTU1VIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZQVSBpcyBub3Qgc2V0CkBAIC0xOTIsNyArMTkyLDcgQEAKICMgQ09ORklHX0JGSU5fS0VSTkVMX0NMT0NLIGlzIG5vdCBzZXQKIENPTkZJR19NQVhfVkNPX0haPTQwMDAwMDAwMAogQ09ORklHX01JTl9WQ09fSFo9NTAwMDAwMDAKLUNPTkZJR19NQVhfU0NMS19IWj0xMzMwMDAwMDAKK0NPTkZJR19NQVhfU0NMS19IWj0xMzMzMzMzMzMKIENPTkZJR19NSU5fU0NMS19IWj0yNzAwMDAwMAogCiAjCkBAIC01MTYsNyArNTE2LDcgQEAKICMKICMgQ09ORklHX01URF9EQVRBRkxBU0ggaXMgbm90IHNldAogQ09ORklHX01URF9NMjVQODA9eQotQ09ORklHX00yNVBYWF9VU0VfRkFTVF9SRUFEPXkKKyMgQ09ORklHX00yNVBYWF9VU0VfRkFTVF9SRUFEIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9TTFJBTSBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUEhSQU0gaXMgbm90IHNldAogIyBDT05GSUdfTVREX01URFJBTSBpcyBub3Qgc2V0CkBAIC02MzUsMjUgKzYzNSwyNSBAQAogIyBDT05GSUdfSU5QVVRfTU9VU0VERVYgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfSk9ZREVWIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX1RTREVWIGlzIG5vdCBzZXQKLUNPTkZJR19JTlBVVF9FVkRFVj1tCitDT05GSUdfSU5QVVRfRVZERVY9eQogIyBDT05GSUdfSU5QVVRfRVZCVUcgaXMgbm90IHNldAogCiAjCiAjIElucHV0IERldmljZSBEcml2ZXJzCiAjCi0jIENPTkZJR19JTlBVVF9LRVlCT0FSRCBpcyBub3Qgc2V0CitDT05GSUdfSU5QVVRfS0VZQk9BUkQ9eQorIyBDT05GSUdfS0VZQk9BUkRfQVRLQkQgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfU1VOS0JEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX0xLS0JEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX1hUS0JEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX05FV1RPTiBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9TVE9XQVdBWSBpcyBub3Qgc2V0CitDT05GSUdfS0VZQk9BUkRfR1BJTz15CiAjIENPTkZJR19JTlBVVF9NT1VTRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9UQUJMRVQgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU4gaXMgbm90IHNldAotQ09ORklHX0lOUFVUX01JU0M9eQotIyBDT05GSUdfSU5QVVRfQVRJX1JFTU9URSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9BVElfUkVNT1RFMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9LRVlTUEFOX1JFTU9URSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9QT1dFUk1BVEUgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfWUVBTElOSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9VSU5QVVQgaXMgbm90IHNldAotIyBDT05GSUdfQkY1M1hfUEZCVVRUT05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX01JU0MgaXMgbm90IHNldAogCiAjCiAjIEhhcmR3YXJlIEkvTyBwb3J0cwpAQCAtNjgxLDcgKzY4MSwxNSBAQAogIwogIyBTZXJpYWwgZHJpdmVycwogIwotIyBDT05GSUdfU0VSSUFMXzgyNTAgaXMgbm90IHNldAorQ09ORklHX1NFUklBTF84MjUwPXkKKyMgQ09ORklHX1NFUklBTF84MjUwX0NPTlNPTEUgaXMgbm90IHNldAorQ09ORklHX1NFUklBTF84MjUwX05SX1VBUlRTPTQKK0NPTkZJR19TRVJJQUxfODI1MF9SVU5USU1FX1VBUlRTPTQKK0NPTkZJR19TRVJJQUxfODI1MF9FWFRFTkRFRD15CisjIENPTkZJR19TRVJJQUxfODI1MF9NQU5ZX1BPUlRTIGlzIG5vdCBzZXQKK0NPTkZJR19TRVJJQUxfODI1MF9TSEFSRV9JUlE9eQorIyBDT05GSUdfU0VSSUFMXzgyNTBfREVURUNUX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19TRVJJQUxfODI1MF9SU0EgaXMgbm90IHNldAogCiAjCiAjIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vYS5vdXQuaCBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vYS5vdXQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmMzZDY1Mi4uMDAwMDAwMAotLS0gYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2Eub3V0LmgKKysrIC9kZXYvbnVsbApAQCAtMSwxOSArMCwwIEBACi0jaWZuZGVmIF9fQkZJTl9BX09VVF9IX18KLSNkZWZpbmUgX19CRklOX0FfT1VUX0hfXwotCi1zdHJ1Y3QgZXhlYyB7Ci0JdW5zaWduZWQgbG9uZyBhX2luZm87CS8qIFVzZSBtYWNyb3MgTl9NQUdJQywgZXRjIGZvciBhY2Nlc3MgKi8KLQl1bnNpZ25lZCBhX3RleHQ7CS8qIGxlbmd0aCBvZiB0ZXh0LCBpbiBieXRlcyAqLwotCXVuc2lnbmVkIGFfZGF0YTsJLyogbGVuZ3RoIG9mIGRhdGEsIGluIGJ5dGVzICovCi0JdW5zaWduZWQgYV9ic3M7CQkvKiBsZW5ndGggb2YgdW5pbml0aWFsaXplZCBkYXRhIGFyZWEgZm9yIGZpbGUsIGluIGJ5dGVzICovCi0JdW5zaWduZWQgYV9zeW1zOwkvKiBsZW5ndGggb2Ygc3ltYm9sIHRhYmxlIGRhdGEgaW4gZmlsZSwgaW4gYnl0ZXMgKi8KLQl1bnNpZ25lZCBhX2VudHJ5OwkvKiBzdGFydCBhZGRyZXNzICovCi0JdW5zaWduZWQgYV90cnNpemU7CS8qIGxlbmd0aCBvZiByZWxvY2F0aW9uIGluZm8gZm9yIHRleHQsIGluIGJ5dGVzICovCi0JdW5zaWduZWQgYV9kcnNpemU7CS8qIGxlbmd0aCBvZiByZWxvY2F0aW9uIGluZm8gZm9yIGRhdGEsIGluIGJ5dGVzICovCi19OwotCi0jZGVmaW5lIE5fVFJTSVpFKGEpCSgoYSkuYV90cnNpemUpCi0jZGVmaW5lIE5fRFJTSVpFKGEpCSgoYSkuYV9kcnNpemUpCi0jZGVmaW5lIE5fU1lNU0laRShhKQkoKGEpLmFfc3ltcykKLQotI2VuZGlmCQkJCS8qIF9fQkZJTl9BX09VVF9IX18gKi8KZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vYmZpbi1nbG9iYWwuaCBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vYmZpbi1nbG9iYWwuaAppbmRleCA3YmE3MGRlLi41NmRjYjBhIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2JmaW4tZ2xvYmFsLmgKKysrIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9iZmluLWdsb2JhbC5oCkBAIC02Myw3ICs2Myw2IEBACiBleHRlcm4gdm9pZCBpbml0X2V4Y2VwdGlvbl92ZWN0b3JzKHZvaWQpOwogZXh0ZXJuIHZvaWQgcHJvZ3JhbV9JQVIodm9pZCk7CiAKLWV4dGVybiB2b2lkIGJmaW5fcmVzZXQodm9pZCk7CiBleHRlcm4gYXNtbGlua2FnZSB2b2lkIGxvd2VyX3RvX2lycTE0KHZvaWQpOwogZXh0ZXJuIGFzbWxpbmthZ2Ugdm9pZCBiZmluX3JldHVybl9mcm9tX2V4Y2VwdGlvbih2b2lkKTsKIGV4dGVybiBhc21saW5rYWdlIHZvaWQgZXZ0MTRfc29mdGlycSh2b2lkKTsKQEAgLTkyLDYgKzkxLDggQEAKIGV4dGVybiB2b2lkICpzcmFtX2FsbG9jX3dpdGhfbHNsKHNpemVfdCwgdW5zaWduZWQgbG9uZyk7CiBleHRlcm4gaW50IHNyYW1fZnJlZV93aXRoX2xzbChjb25zdCB2b2lkKik7CiAKK2V4dGVybiB2b2lkICppc3JhbV9tZW1jcHkodm9pZCAqZGVzdCwgY29uc3Qgdm9pZCAqc3JjLCBzaXplX3Qgbik7CisKIGV4dGVybiBjb25zdCBjaGFyIGJmaW5fYm9hcmRfbmFtZVtdOwogCiBleHRlcm4gdW5zaWduZWQgbG9uZyBiZmluX3NpY19pd3JbXTsKQEAgLTEwNCw3ICsxMDUsNyBAQAogCV9zdGV4dF9sMltdLCBfZXRleHRfbDJbXSwgX3NkYXRhX2wyW10sIF9lZGF0YV9sMltdLCBfc2Jzc19sMltdLAogCV9lYnNzX2wyW10sIF9sMl9sbWFfc3RhcnRbXTsKIAotLyogb25seSB1c2VkIHdoZW4gQ09ORklHX01URF9VQ0xJTlVYICovCisvKiBvbmx5IHVzZWQgd2hlbiBNVERfVUNMSU5VWCAqLwogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbWVtb3J5X210ZF9zdGFydCwgbWVtb3J5X210ZF9lbmQsIG10ZF9zaXplOwogCiAjaWZkZWYgQ09ORklHX0JGSU5fSUNBQ0hFX0xPQ0sKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vYmZyb20uaCBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vYmZyb20uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZmU4MDI0Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9iZnJvbS5oCkBAIC0wLDAgKzEsODUgQEAKKy8qIEJsYWNrZmluIG9uLWNoaXAgUk9NIEFQSQorICoKKyAqIENvcHlyaWdodCAyMDA4IEFuYWxvZyBEZXZpY2VzIEluYy4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCisgKi8KKworI2lmbmRlZiBfX0JGUk9NX0hfXworI2RlZmluZSBfX0JGUk9NX0hfXworCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworLyogUG9zc2libGUgc3lzY29udHJvbCBhY3Rpb24gZmxhZ3MgKi8KKyNkZWZpbmUgU1lTQ1RSTF9SRUFEICAgICAgICAweDAwMDAwMDAwICAgIC8qIHJlYWQgcmVnaXN0ZXJzICovCisjZGVmaW5lIFNZU0NUUkxfV1JJVEUgICAgICAgMHgwMDAwMDAwMSAgICAvKiB3cml0ZSByZWdpc3RlcnMgKi8KKyNkZWZpbmUgU1lTQ1RSTF9TWVNSRVNFVCAgICAweDAwMDAwMDAyICAgIC8qIHBlcmZvcm0gc3lzdGVtIHJlc2V0ICovCisjZGVmaW5lIFNZU0NUUkxfQ09SRVJFU0VUICAgMHgwMDAwMDAwNCAgICAvKiBwZXJmb3JtIGNvcmUgcmVzZXQgKi8KKyNkZWZpbmUgU1lTQ1RSTF9TT0ZUUkVTRVQgICAweDAwMDAwMDA2ICAgIC8qIHBlcmZvcm0gY29yZSBhbmQgc3lzdGVtIHJlc2V0ICovCisjZGVmaW5lIFNZU0NUUkxfVlJDVEwgICAgICAgMHgwMDAwMDAxMCAgICAvKiByZWFkL3dyaXRlIFZSX0NUTCByZWdpc3RlciAqLworI2RlZmluZSBTWVNDVFJMX0VYVFZPTFRBR0UgIDB4MDAwMDAwMjAgICAgLyogVkRESU5UIHN1cHBsaWVkIGV4dGVybmFsbHkgKi8KKyNkZWZpbmUgU1lTQ1RSTF9JTlRWT0xUQUdFICAweDAwMDAwMDAwICAgIC8qIFZERElOVCBnZW5lcmF0ZWQgYnkgb24tY2hpcCByZWd1bGF0b3IgKi8KKyNkZWZpbmUgU1lTQ1RSTF9PVFBWT0xUQUdFICAweDAwMDAwMDQwICAgIC8qIEZvciBGYWN0b3J5IFB1cnBvc2VzIE9ubHkgKi8KKyNkZWZpbmUgU1lTQ1RSTF9QTExDVEwgICAgICAweDAwMDAwMTAwICAgIC8qIHJlYWQvd3JpdGUgUExMX0NUTCByZWdpc3RlciAqLworI2RlZmluZSBTWVNDVFJMX1BMTERJViAgICAgIDB4MDAwMDAyMDAgICAgLyogcmVhZC93cml0ZSBQTExfRElWIHJlZ2lzdGVyICovCisjZGVmaW5lIFNZU0NUUkxfTE9DS0NOVCAgICAgMHgwMDAwMDQwMCAgICAvKiByZWFkL3dyaXRlIFBMTF9MT0NLQ05UIHJlZ2lzdGVyICovCisjZGVmaW5lIFNZU0NUUkxfUExMU1RBVCAgICAgMHgwMDAwMDgwMCAgICAvKiByZWFkL3dyaXRlIFBMTF9TVEFUIHJlZ2lzdGVyICovCisKK3R5cGVkZWYgc3RydWN0IEFESV9TWVNDVFJMX1ZBTFVFUyB7CisJdWludDE2X3QgdXdWckN0bDsKKwl1aW50MTZfdCB1d1BsbEN0bDsKKwl1aW50MTZfdCB1d1BsbERpdjsKKwl1aW50MTZfdCB1d1BsbExvY2tDbnQ7CisJdWludDE2X3QgdXdQbGxTdGF0OworfSBBRElfU1lTQ1RSTF9WQUxVRVM7CisKK3N0YXRpYyB1aW50MzJfdCAoKiBjb25zdCBiZnJvbV9TeXNDb250cm9sKSh1aW50MzJfdCBhY3Rpb25fZmxhZ3MsIEFESV9TWVNDVFJMX1ZBTFVFUyAqcG93ZXJfc2V0dGluZ3MsIHZvaWQgKnJlc2VydmVkKSA9ICh2b2lkICopMHhFRjAwMDAzODsKKworLyogV2UgbmVlZCBhIGRlZGljYXRlZCBmdW5jdGlvbiBzaW5jZSB3ZSBuZWVkIHRvIHNjcmV3IHdpdGggdGhlIHN0YWNrIHBvaW50ZXIKKyAqIHdoZW4gcmVzZXR0aW5nLiAgVGhlIG9uLWNoaXAgUk9NIHdpbGwgc2F2ZS9yZXN0b3JlIHJlZ2lzdGVycyBvbiB0aGUgc3RhY2sKKyAqIHdoZW4gZG9pbmcgYSBzeXN0ZW0gcmVzZXQsIHNvIHRoZSBzdGFjayBjYW5ub3QgYmUgb3V0c2lkZSBvZiB0aGUgY2hpcC4KKyAqLworX19hdHRyaWJ1dGVfXygoX19ub3JldHVybl9fKSkKK3N0YXRpYyBpbmxpbmUgdm9pZCBiZnJvbV9Tb2Z0UmVzZXQodm9pZCAqbmV3X3N0YWNrKQoreworCXdoaWxlICgxKQorCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygKKwkJCSJzcCA9ICVbc3RhY2tdOyIKKwkJCSJqdW1wICglW2Jmcm9tX3N5c2NvbnRyb2xdKTsiCisJCQk6IDogW2Jmcm9tX3N5c2NvbnRyb2xdICJwIihiZnJvbV9TeXNDb250cm9sKSwKKwkJCQkicTAiKFNZU0NUUkxfU09GVFJFU0VUKSwKKwkJCQkicTEiKDApLAorCQkJCSJxMiIoTlVMTCksCisJCQkJW3N0YWNrXSAicCIobmV3X3N0YWNrKQorCQkpOworfQorCisvKiBPVFAgRnVuY3Rpb25zICovCitzdGF0aWMgdWludDMyX3QgKCogY29uc3QgYmZyb21fT3RwQ29tbWFuZCkodWludDMyX3QgY29tbWFuZCwgdWludDMyX3QgdmFsdWUpID0gKHZvaWQgKikweEVGMDAwMDE4Oworc3RhdGljIHVpbnQzMl90ICgqIGNvbnN0IGJmcm9tX090cFJlYWQpKHVpbnQzMl90IHBhZ2UsIHVpbnQzMl90IGZsYWdzLCB1aW50NjRfdCAqcGFnZV9jb250ZW50KSA9ICh2b2lkICopMHhFRjAwMDAxQTsKK3N0YXRpYyB1aW50MzJfdCAoKiBjb25zdCBiZnJvbV9PdHBXcml0ZSkodWludDMyX3QgcGFnZSwgdWludDMyX3QgZmxhZ3MsIHVpbnQ2NF90ICpwYWdlX2NvbnRlbnQpID0gKHZvaWQgKikweEVGMDAwMDFDOworCisvKiBvdHAgY29tbWFuZDogZGVmaW5lcyBmb3IgImNvbW1hbmQiICovCisjZGVmaW5lIE9UUF9JTklUICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIE9UUF9DTE9TRSAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisKKy8qIG90cCByZWFkL3dyaXRlOiBkZWZpbmVzIGZvciAiZmxhZ3MiICovCisjZGVmaW5lIE9UUF9MT1dFUl9IQUxGICAgICAgICAgICAweDAwMDAwMDAwIC8qIHNlbGVjdCB1cHBlci9sb3dlciA2NC1iaXQgaGFsZiAoYml0IDApICovCisjZGVmaW5lIE9UUF9VUFBFUl9IQUxGICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIE9UUF9OT19FQ0MgICAgICAgICAgICAgICAweDAwMDAwMDEwIC8qIGRvIG5vdCB1c2UgRUNDICovCisjZGVmaW5lIE9UUF9MT0NLICAgICAgICAgICAgICAgICAweDAwMDAwMDIwIC8qIHNldHMgcGFnZSBwcm90ZWN0aW9uIGJpdCBmb3IgcGFnZSAqLworI2RlZmluZSBPVFBfQ0hFQ0tfRk9SX1BSRVZfV1JJVEUgMHgwMDAwMDA4MAorCisvKiBSZXR1cm4gdmFsdWVzIGZvciBhbGwgZnVuY3Rpb25zICovCisjZGVmaW5lIE9UUF9TVUNDRVNTICAgICAgICAgIDB4MDAwMDAwMDAKKyNkZWZpbmUgT1RQX01BU1RFUl9FUlJPUiAgICAgMHgwMDEKKyNkZWZpbmUgT1RQX1dSSVRFX0VSUk9SICAgICAgMHgwMDMKKyNkZWZpbmUgT1RQX1JFQURfRVJST1IgICAgICAgMHgwMDUKKyNkZWZpbmUgT1RQX0FDQ19WSU9fRVJST1IgICAgMHgwMDkKKyNkZWZpbmUgT1RQX0RBVEFfTVVMVF9FUlJPUiAgMHgwMTEKKyNkZWZpbmUgT1RQX0VDQ19NVUxUX0VSUk9SICAgMHgwMjEKKyNkZWZpbmUgT1RQX1BSRVZfV1JfRVJST1IgICAgMHgwNDEKKyNkZWZpbmUgT1RQX0RBVEFfU0JfV0FSTiAgICAgMHgxMDAKKyNkZWZpbmUgT1RQX0VDQ19TQl9XQVJOICAgICAgMHgyMDAKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2NhY2hlZmx1c2guaCBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vY2FjaGVmbHVzaC5oCmluZGV4IGQ4MWE3NzUuLjQ0MDM0MTUgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vY2FjaGVmbHVzaC5oCisrKyBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vY2FjaGVmbHVzaC5oCkBAIC0zMCwxMyArMzAsMTEgQEAKICNpZm5kZWYgX0JMQUNLRklOX0NBQ0hFRkxVU0hfSAogI2RlZmluZSBfQkxBQ0tGSU5fQ0FDSEVGTFVTSF9ICiAKLSNpbmNsdWRlIDxhc20vY3BsYi5oPgotCi1leHRlcm4gdm9pZCBibGFja2Zpbl9pY2FjaGVfZGNhY2hlX2ZsdXNoX3JhbmdlKHVuc2lnbmVkIGludCwgdW5zaWduZWQgaW50KTsKLWV4dGVybiB2b2lkIGJsYWNrZmluX2ljYWNoZV9mbHVzaF9yYW5nZSh1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGludCk7Ci1leHRlcm4gdm9pZCBibGFja2Zpbl9kY2FjaGVfZmx1c2hfcmFuZ2UodW5zaWduZWQgaW50LCB1bnNpZ25lZCBpbnQpOwotZXh0ZXJuIHZvaWQgYmxhY2tmaW5fZGNhY2hlX2ludmFsaWRhdGVfcmFuZ2UodW5zaWduZWQgaW50LCB1bnNpZ25lZCBpbnQpOwotZXh0ZXJuIHZvaWQgYmxhY2tmaW5fZGZsdXNoX3BhZ2Uodm9pZCAqKTsKK2V4dGVybiB2b2lkIGJsYWNrZmluX2ljYWNoZV9kY2FjaGVfZmx1c2hfcmFuZ2UodW5zaWduZWQgbG9uZyBzdGFydF9hZGRyZXNzLCB1bnNpZ25lZCBsb25nIGVuZF9hZGRyZXNzKTsKK2V4dGVybiB2b2lkIGJsYWNrZmluX2ljYWNoZV9mbHVzaF9yYW5nZSh1bnNpZ25lZCBsb25nIHN0YXJ0X2FkZHJlc3MsIHVuc2lnbmVkIGxvbmcgZW5kX2FkZHJlc3MpOworZXh0ZXJuIHZvaWQgYmxhY2tmaW5fZGNhY2hlX2ZsdXNoX3JhbmdlKHVuc2lnbmVkIGxvbmcgc3RhcnRfYWRkcmVzcywgdW5zaWduZWQgbG9uZyBlbmRfYWRkcmVzcyk7CitleHRlcm4gdm9pZCBibGFja2Zpbl9kY2FjaGVfaW52YWxpZGF0ZV9yYW5nZSh1bnNpZ25lZCBsb25nIHN0YXJ0X2FkZHJlc3MsIHVuc2lnbmVkIGxvbmcgZW5kX2FkZHJlc3MpOworZXh0ZXJuIHZvaWQgYmxhY2tmaW5fZGZsdXNoX3BhZ2Uodm9pZCAqcGFnZSk7CiAKICNkZWZpbmUgZmx1c2hfZGNhY2hlX21tYXBfbG9jayhtYXBwaW5nKQkJZG8geyB9IHdoaWxlICgwKQogI2RlZmluZSBmbHVzaF9kY2FjaGVfbW1hcF91bmxvY2sobWFwcGluZykJZG8geyB9IHdoaWxlICgwKQpAQCAtODcsNCArODUsMjEgQEAKICMgZGVmaW5lIGZsdXNoX2RjYWNoZV9wYWdlKHBhZ2UpCQkJZG8geyB9IHdoaWxlICgwKQogI2VuZGlmCiAKK2V4dGVybiB1bnNpZ25lZCBsb25nIHJlc2VydmVkX21lbV9kY2FjaGVfb247CitleHRlcm4gdW5zaWduZWQgbG9uZyByZXNlcnZlZF9tZW1faWNhY2hlX29uOworCitzdGF0aWMgaW5saW5lIGludCBiZmluX2FkZHJfZGNhY2hhYmxlKHVuc2lnbmVkIGxvbmcgYWRkcikKK3sKKyNpZmRlZiBDT05GSUdfQkZJTl9EQ0FDSEUKKwlpZiAoYWRkciA8IChfcmFtZW5kIC0gRE1BX1VOQ0FDSEVEX1JFR0lPTikpCisJCXJldHVybiAxOworI2VuZGlmCisKKwlpZiAocmVzZXJ2ZWRfbWVtX2RjYWNoZV9vbiAmJgorCQlhZGRyID49IF9yYW1lbmQgJiYgYWRkciA8IHBoeXNpY2FsX21lbV9lbmQpCisJCXJldHVybiAxOworCisJcmV0dXJuIDA7Cit9CisKICNlbmRpZgkJCQkvKiBfQkxBQ0tGSU5fSUNBQ0hFRkxVU0hfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9jcGxiLmggYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2NwbGIuaAppbmRleCAwNWQ2ZjA1Li45ZThiNDAzIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2NwbGIuaAorKysgYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2NwbGIuaApAQCAtNTUsNyArNTUsMTMgQEAKICNlbmRpZgogCiAjZGVmaW5lIEwxX0RNRU1PUlkgICAgICAgKENQTEJfTE9DSyB8IENQTEJfQ09NTU9OKQotI2RlZmluZSBMMl9NRU1PUlkgICAgICAgIChDUExCX0NPTU1PTikKKyNpZmRlZiBDT05GSUdfQkZJTl9MMl9DQUNIRUFCTEUKKyNkZWZpbmUgTDJfSU1FTU9SWSAgICAgICAgKFNEUkFNX0lHRU5FUklDKQorI2RlZmluZSBMMl9ETUVNT1JZICAgICAgICAoU0RSQU1fREdFTkVSSUMpCisjZWxzZQorI2RlZmluZSBMMl9JTUVNT1JZICAgICAgICAoQ1BMQl9DT01NT04pCisjZGVmaW5lIEwyX0RNRU1PUlkgICAgICAgIChDUExCX0NPTU1PTikKKyNlbmRpZgogI2RlZmluZSBTRFJBTV9ETk9OX0NIQkwgIChDUExCX0NPTU1PTikKICNkZWZpbmUgU0RSQU1fRUJJVSAgICAgICAoQ1BMQl9DT01NT04pCiAjZGVmaW5lIFNEUkFNX09PUFMgICAgICAgKENQTEJfVkFMSUQgfCBBTk9NQUxZXzA1MDAwMTU4X1dPUktBUk9VTkQgfCBDUExCX0xPQ0sgfCBDUExCX0RJUlRZKQpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9jcGxiaW5pdC5oIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9jcGxiaW5pdC5oCmluZGV4IDBlYjFjMWIuLmY4NDViNDEgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vY3BsYmluaXQuaAorKysgYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2NwbGJpbml0LmgKQEAgLTg3LDkgKzg3LDYgQEAKIAogI2VuZGlmIC8qIENPTkZJR19NUFUgKi8KIAotZXh0ZXJuIHVuc2lnbmVkIGxvbmcgcmVzZXJ2ZWRfbWVtX2RjYWNoZV9vbjsKLWV4dGVybiB1bnNpZ25lZCBsb25nIHJlc2VydmVkX21lbV9pY2FjaGVfb247Ci0KLWV4dGVybiB2b2lkIGdlbmVyYXRlX2NwbF90YWJsZXModm9pZCk7CitleHRlcm4gdm9pZCBnZW5lcmF0ZV9jcGxiX3RhYmxlcyh2b2lkKTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2NwdW1hc2suaCBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vY3B1bWFzay5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMjBhOGU5Li4wMDAwMDAwCi0tLSBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vY3B1bWFzay5oCisrKyAvZGV2L251bGwKQEAgLTEsNiArMCwwIEBACi0jaWZuZGVmIF9BU01fQkxBQ0tGSU5fQ1BVTUFTS19ICi0jZGVmaW5lIF9BU01fQkxBQ0tGSU5fQ1BVTUFTS19ICi0KLSNpbmNsdWRlIDxhc20tZ2VuZXJpYy9jcHVtYXNrLmg+Ci0KLSNlbmRpZgkJCQkvKiBfQVNNX0JMQUNLRklOX0NQVU1BU0tfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9kbWEtbWFwcGluZy5oIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9kbWEtbWFwcGluZy5oCmluZGV4IDFhMTNjMmYuLmVkZTc0OGQgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vZG1hLW1hcHBpbmcuaAorKysgYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2RtYS1tYXBwaW5nLmgKQEAgLTgwLDQgKzgwLDE1IEBACiBleHRlcm4gdm9pZCBkbWFfdW5tYXBfc2coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLAogCQkgICAgICBpbnQgbmh3ZW50cmllcywgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKTsKIAorc3RhdGljIGlubGluZSB2b2lkIGRtYV9zeW5jX3NpbmdsZV9mb3JfY3B1KHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkJZG1hX2FkZHJfdCBoYW5kbGUsIHNpemVfdCBzaXplLAorCQkJCQllbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIpCit7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBkbWFfc3luY19zaW5nbGVfZm9yX2RldmljZShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJCWRtYV9hZGRyX3QgaGFuZGxlLCBzaXplX3Qgc2l6ZSwKKwkJCQkJZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyKQoreworfQogI2VuZGlmCQkJCS8qIF9CTEFDS0ZJTl9ETUFfTUFQUElOR19IICovCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2VsZi5oIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9lbGYuaAppbmRleCA2N2EwM2E4YS4uY2RiZmNmYyAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9lbGYuaAorKysgYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2VsZi5oCkBAIC0xMjIsNiArMTIyLDYgQEAKIAogI2RlZmluZSBFTEZfUExBVEZPUk0gIChOVUxMKQogCi0jZGVmaW5lIFNFVF9QRVJTT05BTElUWShleCwgaWJjczIpIHNldF9wZXJzb25hbGl0eSgoaWJjczIpP1BFUl9TVlI0OlBFUl9MSU5VWCkKKyNkZWZpbmUgU0VUX1BFUlNPTkFMSVRZKGV4KSBzZXRfcGVyc29uYWxpdHkoUEVSX0xJTlVYKQogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vaW8uaCBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vaW8uaAppbmRleCBjYmJmN2ZmLi43ZGM3N2EyIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2lvLmgKKysrIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9pby5oCkBAIC0xMzQsNiArMTM0LDM2IEBACiBleHRlcm4gdm9pZCBkbWFfaW5zdyh1bnNpZ25lZCBsb25nIHBvcnQsIHZvaWQgKmFkZHIsIHVuc2lnbmVkIHNob3J0IGNvdW50KTsKIGV4dGVybiB2b2lkIGRtYV9pbnNsKHVuc2lnbmVkIGxvbmcgcG9ydCwgdm9pZCAqYWRkciwgdW5zaWduZWQgc2hvcnQgY291bnQpOwogCitzdGF0aWMgaW5saW5lIHZvaWQgcmVhZHNsKGNvbnN0IHZvaWQgX19pb21lbSAqYWRkciwgdm9pZCAqYnVmLCBpbnQgbGVuKQoreworCWluc2woKHVuc2lnbmVkIGxvbmcpYWRkciwgYnVmLCBsZW4pOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgcmVhZHN3KGNvbnN0IHZvaWQgX19pb21lbSAqYWRkciwgdm9pZCAqYnVmLCBpbnQgbGVuKQoreworCWluc3coKHVuc2lnbmVkIGxvbmcpYWRkciwgYnVmLCBsZW4pOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgcmVhZHNiKGNvbnN0IHZvaWQgX19pb21lbSAqYWRkciwgdm9pZCAqYnVmLCBpbnQgbGVuKQoreworCWluc2IoKHVuc2lnbmVkIGxvbmcpYWRkciwgYnVmLCBsZW4pOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgd3JpdGVzbChjb25zdCB2b2lkIF9faW9tZW0gKmFkZHIsIGNvbnN0IHZvaWQgKmJ1ZiwgaW50IGxlbikKK3sKKwlvdXRzbCgodW5zaWduZWQgbG9uZylhZGRyLCBidWYsIGxlbik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB3cml0ZXN3KGNvbnN0IHZvaWQgX19pb21lbSAqYWRkciwgY29uc3Qgdm9pZCAqYnVmLCBpbnQgbGVuKQoreworCW91dHN3KCh1bnNpZ25lZCBsb25nKWFkZHIsIGJ1ZiwgbGVuKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHdyaXRlc2IoY29uc3Qgdm9pZCBfX2lvbWVtICphZGRyLCBjb25zdCB2b2lkICpidWYsIGludCBsZW4pCit7CisJb3V0c2IoKHVuc2lnbmVkIGxvbmcpYWRkciwgYnVmLCBsZW4pOworfQorCiAvKgogICogTWFwIHNvbWUgcGh5c2ljYWwgYWRkcmVzcyByYW5nZSBpbnRvIHRoZSBrZXJuZWwgYWRkcmVzcyBzcGFjZS4KICAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9rZ2RiLmggYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2tnZGIuaAppbmRleCAwZjczODQ3Li4yNmViYWM2IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2tnZGIuaAorKysgYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2tnZGIuaApAQCAtMTI0LDkgKzEyNCwxNiBAQAogLyogTnVtYmVyIG9mIGJ5dGVzIG9mIHJlZ2lzdGVycy4gICovCiAjZGVmaW5lIE5VTVJFR0JZVEVTIEJGSU5fTlVNX1JFR1MqNAogCi0jZGVmaW5lIEJSRUFLUE9JTlQoKSBhc20oIiAgIEVYQ1BUIDI7Iik7Ci0jZGVmaW5lIEJSRUFLX0lOU1RSX1NJWkUgICAgICAgMgotI2RlZmluZSBIV19CUkVBS1BPSU5UX05VTQkJNgorc3RhdGljIGlubGluZSB2b2lkIGFyY2hfa2dkYl9icmVha3BvaW50KHZvaWQpCit7CisJYXNtKCIgICBFWENQVCAyOyIpOworfQorI2RlZmluZSBCUkVBS19JTlNUUl9TSVpFCTIKKyNkZWZpbmUgQ0FDSEVfRkxVU0hfSVNfU0FGRQkxCisjZGVmaW5lIEhXX0lOU1RfV0FUQ0hQT0lOVF9OVU0JNgorI2RlZmluZSBIV19XQVRDSFBPSU5UX05VTQk4CisjZGVmaW5lIFRZUEVfSU5TVF9XQVRDSFBPSU5UCTAKKyNkZWZpbmUgVFlQRV9EQVRBX1dBVENIUE9JTlQJMQogCiAvKiBJbnN0cnVjdGlvbiB3YXRjaHBvaW50IGFkZHJlc3MgY29udHJvbCByZWdpc3RlciBiaXRzIG1hc2sgKi8KICNkZWZpbmUgV1BQV1IJCTB4MQpAQCAtMTYzLDEwICsxNzAsMTEgQEAKICNkZWZpbmUgV1BEQUVOMQkJMHg4CiAjZGVmaW5lIFdQRENOVEVOMAkweDEwCiAjZGVmaW5lIFdQRENOVEVOMQkweDIwCisKICNkZWZpbmUgV1BEU1JDMAkJMHhjMAotI2RlZmluZSBXUERBQ0MwCQkweDMwMAorI2RlZmluZSBXUERBQ0MwX09GRlNFVAk4CiAjZGVmaW5lIFdQRFNSQzEJCTB4YzAwCi0jZGVmaW5lIFdQREFDQzEJCTB4MzAwMAorI2RlZmluZSBXUERBQ0MxX09GRlNFVAkxMgogCiAvKiBXYXRjaHBvaW50IHN0YXR1cyByZWdpc3RlciBiaXRzIG1hc2sgKi8KICNkZWZpbmUgU1RBVElBMAkJMHgxCkBAIC0xNzgsNyArMTg2LDQgQEAKICNkZWZpbmUgU1RBVERBMAkJMHg0MAogI2RlZmluZSBTVEFUREExCQkweDgwCiAKLWV4dGVybiB2b2lkIGtnZGJfcHJpbnQoY29uc3QgY2hhciAqZm10LCAuLi4pOwotZXh0ZXJuIHZvaWQgaW5pdF9rZ2RiX3VhcnQodm9pZCk7Ci0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9tbXVfY29udGV4dC5oIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9tbXVfY29udGV4dC5oCmluZGV4IDg1Mjk1NTIuLjM1NTkzZGQgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vbW11X2NvbnRleHQuaAorKysgYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL21tdV9jb250ZXh0LmgKQEAgLTQ1LDQ5ICs0NSwxMiBAQAogZXh0ZXJuIGludCBsMXNyYW1fZnJlZShjb25zdCB2b2lkKik7CiBleHRlcm4gdm9pZCAqbDFzcmFtX2FsbG9jX21heCh2b2lkKik7CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBlbnRlcl9sYXp5X3RsYihzdHJ1Y3QgbW1fc3RydWN0ICptbSwgc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCi17Ci19Ci0KLS8qIENhbGxlZCB3aGVuIGNyZWF0aW5nIGEgbmV3IGNvbnRleHQgZHVyaW5nIGZvcmsoKSBvciBleGVjdmUoKS4gICovCi1zdGF0aWMgaW5saW5lIGludAotaW5pdF9uZXdfY29udGV4dChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgc3RydWN0IG1tX3N0cnVjdCAqbW0pCi17Ci0jaWZkZWYgQ09ORklHX01QVQotCXVuc2lnbmVkIGxvbmcgcCA9IF9fZ2V0X2ZyZWVfcGFnZXMoR0ZQX0tFUk5FTCwgcGFnZV9tYXNrX29yZGVyKTsKLQltbS0+Y29udGV4dC5wYWdlX3J3eF9tYXNrID0gKHVuc2lnbmVkIGxvbmcgKilwOwotCW1lbXNldChtbS0+Y29udGV4dC5wYWdlX3J3eF9tYXNrLCAwLAotCSAgICAgICBwYWdlX21hc2tfbmVsdHMgKiAzICogc2l6ZW9mKGxvbmcpKTsKLSNlbmRpZgotCXJldHVybiAwOwotfQotCiBzdGF0aWMgaW5saW5lIHZvaWQgZnJlZV9sMXN0YWNrKHZvaWQpCiB7CiAJbnJfbDFzdGFja190YXNrcy0tOwogCWlmIChucl9sMXN0YWNrX3Rhc2tzID09IDApCiAJCWwxc3JhbV9mcmVlKGwxX3N0YWNrX2Jhc2UpOwogfQotc3RhdGljIGlubGluZSB2b2lkIGRlc3Ryb3lfY29udGV4dChzdHJ1Y3QgbW1fc3RydWN0ICptbSkKLXsKLQlzdHJ1Y3Qgc3JhbV9saXN0X3N0cnVjdCAqdG1wOwotCi0JaWYgKGN1cnJlbnRfbDFfc3RhY2tfc2F2ZSA9PSBtbS0+Y29udGV4dC5sMV9zdGFja19zYXZlKQotCQljdXJyZW50X2wxX3N0YWNrX3NhdmUgPSBOVUxMOwotCWlmIChtbS0+Y29udGV4dC5sMV9zdGFja19zYXZlKQotCQlmcmVlX2wxc3RhY2soKTsKLQotCXdoaWxlICgodG1wID0gbW0tPmNvbnRleHQuc3JhbV9saXN0KSkgewotCQltbS0+Y29udGV4dC5zcmFtX2xpc3QgPSB0bXAtPm5leHQ7Ci0JCXNyYW1fZnJlZSh0bXAtPmFkZHIpOwotCQlrZnJlZSh0bXApOwotCX0KLSNpZmRlZiBDT05GSUdfTVBVCi0JaWYgKGN1cnJlbnRfcnd4X21hc2sgPT0gbW0tPmNvbnRleHQucGFnZV9yd3hfbWFzaykKLQkJY3VycmVudF9yd3hfbWFzayA9IE5VTEw7Ci0JZnJlZV9wYWdlcygodW5zaWduZWQgbG9uZyltbS0+Y29udGV4dC5wYWdlX3J3eF9tYXNrLCBwYWdlX21hc2tfb3JkZXIpOwotI2VuZGlmCi19CiAKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZwogYWxsb2NfbDFzdGFjayh1bnNpZ25lZCBsb25nIGxlbmd0aCwgdW5zaWduZWQgbG9uZyAqc3RhY2tfYmFzZSkKQEAgLTEzNCw2ICs5Nyw3IEBACiAJfQogI2VuZGlmCiAKKyNpZmRlZiBDT05GSUdfQVBQX1NUQUNLX0wxCiAJLyogTDEgc3RhY2sgc3dpdGNoaW5nLiAgKi8KIAlpZiAoIW5leHRfbW0tPmNvbnRleHQubDFfc3RhY2tfc2F2ZSkKIAkJcmV0dXJuOwpAQCAtMTQ0LDYgKzEwOCw3IEBACiAJfQogCWN1cnJlbnRfbDFfc3RhY2tfc2F2ZSA9IG5leHRfbW0tPmNvbnRleHQubDFfc3RhY2tfc2F2ZTsKIAltZW1jcHkobDFfc3RhY2tfYmFzZSwgY3VycmVudF9sMV9zdGFja19zYXZlLCBsMV9zdGFja19sZW4pOworI2VuZGlmCiB9CiAKICNpZmRlZiBDT05GSUdfTVBVCkBAIC0xODAsNCArMTQ1LDQ0IEBACiB9CiAjZW5kaWYKIAorc3RhdGljIGlubGluZSB2b2lkIGVudGVyX2xhenlfdGxiKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykKK3sKK30KKworLyogQ2FsbGVkIHdoZW4gY3JlYXRpbmcgYSBuZXcgY29udGV4dCBkdXJpbmcgZm9yaygpIG9yIGV4ZWN2ZSgpLiAgKi8KK3N0YXRpYyBpbmxpbmUgaW50Citpbml0X25ld19jb250ZXh0KHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSkKK3sKKyNpZmRlZiBDT05GSUdfTVBVCisJdW5zaWduZWQgbG9uZyBwID0gX19nZXRfZnJlZV9wYWdlcyhHRlBfS0VSTkVMLCBwYWdlX21hc2tfb3JkZXIpOworCW1tLT5jb250ZXh0LnBhZ2Vfcnd4X21hc2sgPSAodW5zaWduZWQgbG9uZyAqKXA7CisJbWVtc2V0KG1tLT5jb250ZXh0LnBhZ2Vfcnd4X21hc2ssIDAsCisJICAgICAgIHBhZ2VfbWFza19uZWx0cyAqIDMgKiBzaXplb2YobG9uZykpOworI2VuZGlmCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBkZXN0cm95X2NvbnRleHQoc3RydWN0IG1tX3N0cnVjdCAqbW0pCit7CisJc3RydWN0IHNyYW1fbGlzdF9zdHJ1Y3QgKnRtcDsKKworI2lmZGVmIENPTkZJR19BUFBfU1RBQ0tfTDEKKwlpZiAoY3VycmVudF9sMV9zdGFja19zYXZlID09IG1tLT5jb250ZXh0LmwxX3N0YWNrX3NhdmUpCisJCWN1cnJlbnRfbDFfc3RhY2tfc2F2ZSA9IDA7CisJaWYgKG1tLT5jb250ZXh0LmwxX3N0YWNrX3NhdmUpCisJCWZyZWVfbDFzdGFjaygpOworI2VuZGlmCisKKwl3aGlsZSAoKHRtcCA9IG1tLT5jb250ZXh0LnNyYW1fbGlzdCkpIHsKKwkJbW0tPmNvbnRleHQuc3JhbV9saXN0ID0gdG1wLT5uZXh0OworCQlzcmFtX2ZyZWUodG1wLT5hZGRyKTsKKwkJa2ZyZWUodG1wKTsKKwl9CisjaWZkZWYgQ09ORklHX01QVQorCWlmIChjdXJyZW50X3J3eF9tYXNrID09IG1tLT5jb250ZXh0LnBhZ2Vfcnd4X21hc2spCisJCWN1cnJlbnRfcnd4X21hc2sgPSBOVUxMOworCWZyZWVfcGFnZXMoKHVuc2lnbmVkIGxvbmcpbW0tPmNvbnRleHQucGFnZV9yd3hfbWFzaywgcGFnZV9tYXNrX29yZGVyKTsKKyNlbmRpZgorfQorCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vcHJvY2Vzc29yLmggYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oCmluZGV4IDZmMzk5NWIuLmUzZTliNDEgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vcHJvY2Vzc29yLmgKKysrIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaApAQCAtMTM0LDYgKzEzNCwxMiBAQAogCXJldHVybiByZXZpZDsKIH0KIAorc3RhdGljIGlubGluZSB1aW50MTZfdCBfX3B1cmUgYmZpbl9jcHVpZCh2b2lkKQoreworCXJldHVybiAoYmZpbl9yZWFkX0NISVBJRCgpICYgQ0hJUElEX0ZBTUlMWSkgPj4gMTI7CisKK30KKwogc3RhdGljIGlubGluZSB1aW50MzJfdCBfX3B1cmUgYmZpbl9jb21waWxlZF9yZXZpZCh2b2lkKQogewogI2lmIGRlZmluZWQoQ09ORklHX0JGX1JFVl8wXzApCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL3B0cmFjZS5oIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9wdHJhY2UuaAppbmRleCBhNDVhODBlLi5lM2YwODZkIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL3B0cmFjZS5oCisrKyBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vcHRyYWNlLmgKQEAgLTE1OCw2ICsxNTgsOCBAQAogI2RlZmluZSBQVF9TRVFTVEFUIDgKICNkZWZpbmUgUFRfSVBFTkQgNAogCisjZGVmaW5lIFBUX09SSUdfUjAgMjA4CisjZGVmaW5lIFBUX09SSUdfUDAgMjEyCiAjZGVmaW5lIFBUX1NZU0NGRyAyMTYKICNkZWZpbmUgUFRfVEVYVF9BRERSIDIyMAogI2RlZmluZSBQVF9URVhUX0VORF9BRERSIDIyNApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS90aW1leC5oIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS90aW1leC5oCmluZGV4IDIyYjA4MDYuLjI0OGFlYjA2IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL3RpbWV4LmgKKysrIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS90aW1leC5oCkBAIC0xNiw3ICsxNiw3IEBACiBzdGF0aWMgaW5saW5lIGN5Y2xlc190IGdldF9jeWNsZXModm9pZCkKIHsKIAl1bnNpZ25lZCBsb25nIHRtcCwgdG1wMjsKLQlfX2FzbV9fKCIlMCA9IGN5Y2xlczsgJTEgPSBjeWNsZXMyOyIgOiAiPWQiKHRtcCksICI9ZCIodG1wMikpOworCV9fYXNtX18gX192b2xhdGlsZV9fKCIlMCA9IGN5Y2xlczsgJTEgPSBjeWNsZXMyOyIgOiAiPWQiKHRtcCksICI9ZCIodG1wMikpOwogCXJldHVybiB0bXAgfCAoKGN5Y2xlc190KXRtcDIgPDwgMzIpOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL3RyYXBzLmggYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL3RyYXBzLmgKaW5kZXggZjBlNWY5NC4uMzRmNzI5NSAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS90cmFwcy5oCisrKyBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vdHJhcHMuaApAQCAtNTksNiArNTksOSBAQAogCWxldmVsICIgICBvciBhIDE2LWJpdCByZWdpc3RlciBpcyBhY2Nlc3NlZCB3aXRoIGEgMzItYml0IGluc3RydWN0aW9uLlxuIgogI2RlZmluZSBIV0NfeDMobGV2ZWwpIFwKIAkiRXh0ZXJuYWwgTWVtb3J5IEFkZHJlc3NpbmcgRXJyb3JcbiIKKyNkZWZpbmUgRVhDXzB4MDQobGV2ZWwpIFwKKwkiVW5pbXBsbWVudGVkIGV4Y2VwdGlvbiBvY2N1cmVkXG4iIFwKKwlsZXZlbCAiIC0gTWF5YmUgeW91IGZvcmdvdCB0byBpbnN0YWxsIGEgY3VzdG9tIGV4Y2VwdGlvbiBoYW5kbGVyP1xuIgogI2RlZmluZSBIV0NfeDEyKGxldmVsKSBcCiAJIlBlcmZvcm1hbmNlIE1vbml0b3IgT3ZlcmZsb3dcbiIKICNkZWZpbmUgSFdDX3gxOChsZXZlbCkgXApAQCAtODQsNyArODcsNyBAQAogCWxldmVsICIgICBhIHBhcnRpY3VsYXIgcHJvY2Vzc29yIGltcGxlbWVudGF0aW9uLlxuIgogI2RlZmluZSBFWENfMHgyMihsZXZlbCkgXAogCSJJbGxlZ2FsIGluc3RydWN0aW9uIGNvbWJpbmF0aW9uXG4iIFwKLQlsZXZlbCAiIC0gU2VlIHNlY3Rpb24gZm9yIG11bHRpLWlzc3VlIHJ1bGVzIGluIHRoZSBBRFNQLUJGNTN4IEJsYWNrZmluXG4iIFwKKwlsZXZlbCAiIC0gU2VlIHNlY3Rpb24gZm9yIG11bHRpLWlzc3VlIHJ1bGVzIGluIHRoZSBCbGFja2ZpblxuIiBcCiAJbGV2ZWwgIiAgIFByb2Nlc3NvciBJbnN0cnVjdGlvbiBTZXQgUmVmZXJlbmNlLlxuIgogI2RlZmluZSBFWENfMHgyMyhsZXZlbCkgXAogCSJEYXRhIGFjY2VzcyBDUExCIHByb3RlY3Rpb24gdmlvbGF0aW9uXG4iIFwKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4va2VybmVsL2FzbS1vZmZzZXRzLmMgYi9hcmNoL2JsYWNrZmluL2tlcm5lbC9hc20tb2Zmc2V0cy5jCmluZGV4IDg4MWFmZTkuLjliYjg1ZGQgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4va2VybmVsL2FzbS1vZmZzZXRzLmMKKysrIGIvYXJjaC9ibGFja2Zpbi9rZXJuZWwvYXNtLW9mZnNldHMuYwpAQCAtNjAsNiArNjAsNyBAQAogCURFRklORShLRVJORUxfU1RBQ0tfU0laRSwgVEhSRUFEX1NJWkUpOwogCiAJLyogb2Zmc2V0cyBpbnRvIHRoZSBwdF9yZWdzICovCisJREVGSU5FKFBUX09SSUdfUjAsIG9mZnNldG9mKHN0cnVjdCBwdF9yZWdzLCBvcmlnX3IwKSk7CiAJREVGSU5FKFBUX09SSUdfUDAsIG9mZnNldG9mKHN0cnVjdCBwdF9yZWdzLCBvcmlnX3AwKSk7CiAJREVGSU5FKFBUX09SSUdfUEMsIG9mZnNldG9mKHN0cnVjdCBwdF9yZWdzLCBvcmlnX3BjKSk7CiAJREVGSU5FKFBUX1IwLCBvZmZzZXRvZihzdHJ1Y3QgcHRfcmVncywgcjApKTsKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4va2VybmVsL2JmaW5fZG1hXzV4eC5jIGIvYXJjaC9ibGFja2Zpbi9rZXJuZWwvYmZpbl9kbWFfNXh4LmMKaW5kZXggOTMyMjliMy4uMzM5MjkzZCAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9rZXJuZWwvYmZpbl9kbWFfNXh4LmMKKysrIGIvYXJjaC9ibGFja2Zpbi9rZXJuZWwvYmZpbl9kbWFfNXh4LmMKQEAgLTExNywxNSArMTE3LDE0IEBACiAKICNpZmRlZiBDT05GSUdfQkY1NHgKIAlpZiAoY2hhbm5lbCA+PSBDSF9VQVJUMl9SWCAmJiBjaGFubmVsIDw9IENIX1VBUlQzX1RYKSB7Ci0JCWlmIChzdHJuY21wKGRldmljZV9pZCwgIkJGSU5fVUFSVCIsIDkpID09IDApIHsKLQkJCWRtYV9jaFtjaGFubmVsXS5yZWdzLT5wZXJpcGhlcmFsX21hcCAmPSAweDBGRkY7Ci0JCQlkbWFfY2hbY2hhbm5lbF0ucmVncy0+cGVyaXBoZXJhbF9tYXAgfD0KKwkJdW5zaWduZWQgaW50IHBlcl9tYXA7CisJCXBlcl9tYXAgPSBkbWFfY2hbY2hhbm5lbF0ucmVncy0+cGVyaXBoZXJhbF9tYXAgJiAweEZGRjsKKwkJaWYgKHN0cm5jbXAoZGV2aWNlX2lkLCAiQkZJTl9VQVJUIiwgOSkgPT0gMCkKKwkJCWRtYV9jaFtjaGFubmVsXS5yZWdzLT5wZXJpcGhlcmFsX21hcCA9IHBlcl9tYXAgfAogCQkJCSgoY2hhbm5lbCAtIENIX1VBUlQyX1JYICsgMHhDKTw8MTIpOwotCQl9IGVsc2UgewotCQkJZG1hX2NoW2NoYW5uZWxdLnJlZ3MtPnBlcmlwaGVyYWxfbWFwICY9IDB4MEZGRjsKLQkJCWRtYV9jaFtjaGFubmVsXS5yZWdzLT5wZXJpcGhlcmFsX21hcCB8PQorCQllbHNlCisJCQlkbWFfY2hbY2hhbm5lbF0ucmVncy0+cGVyaXBoZXJhbF9tYXAgPSBwZXJfbWFwIHwKIAkJCQkoKGNoYW5uZWwgLSBDSF9VQVJUMl9SWCArIDB4Nik8PDEyKTsKLQkJfQogCX0KICNlbmRpZgogCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2tlcm5lbC9iZmluX2dwaW8uYyBiL2FyY2gvYmxhY2tmaW4va2VybmVsL2JmaW5fZ3Bpby5jCmluZGV4IGVjYmQxNDEuLjZlMDhmNDIgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4va2VybmVsL2JmaW5fZ3Bpby5jCisrKyBiL2FyY2gvYmxhY2tmaW4va2VybmVsL2JmaW5fZ3Bpby5jCkBAIC0yMzEsMTQgKzIzMSwxNCBAQAogfQogI2VuZGlmCiAKLXZvaWQgZ3Bpb19lcnJvcih1bnNpZ25lZCBncGlvKQorc3RhdGljIHZvaWQgZ3Bpb19lcnJvcih1bnNpZ25lZCBncGlvKQogewogCXByaW50ayhLRVJOX0VSUiAiYmZpbi1ncGlvOiBHUElPICVkIHdhc24ndCByZXF1ZXN0ZWQhXG4iLCBncGlvKTsKIH0KIAogc3RhdGljIHZvaWQgc2V0X2xhYmVsKHVuc2lnbmVkIHNob3J0IGlkZW50LCBjb25zdCBjaGFyICpsYWJlbCkKIHsKLQlpZiAobGFiZWwgJiYgc3RyX2lkZW50KSB7CisJaWYgKGxhYmVsKSB7CiAJCXN0cm5jcHkoc3RyX2lkZW50W2lkZW50XS5uYW1lLCBsYWJlbCwKIAkJCSBSRVNPVVJDRV9MQUJFTF9TSVpFKTsKIAkJc3RyX2lkZW50W2lkZW50XS5uYW1lW1JFU09VUkNFX0xBQkVMX1NJWkUgLSAxXSA9IDA7CkBAIC0yNDcsOSArMjQ3LDYgQEAKIAogc3RhdGljIGNoYXIgKmdldF9sYWJlbCh1bnNpZ25lZCBzaG9ydCBpZGVudCkKIHsKLQlpZiAoIXN0cl9pZGVudCkKLQkJcmV0dXJuICJVTktOT1dOIjsKLQogCXJldHVybiAoKnN0cl9pZGVudFtpZGVudF0ubmFtZSA/IHN0cl9pZGVudFtpZGVudF0ubmFtZSA6ICJVTktOT1dOIik7CiB9CiAKQEAgLTI2MCw3ICsyNTcsNyBAQAogCQlwcmludGsoS0VSTl9FUlIgIlBsZWFzZSBwcm92aWRlIG5vbmUtbnVsbCBsYWJlbFxuIik7CiAJfQogCi0JaWYgKGxhYmVsICYmIHN0cl9pZGVudCkKKwlpZiAobGFiZWwpCiAJCXJldHVybiBzdHJuY21wKHN0cl9pZGVudFtpZGVudF0ubmFtZSwKIAkJCQkgbGFiZWwsIHN0cmxlbihsYWJlbCkpOwogCWVsc2UKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4va2VybmVsL2NwbGItbXB1L2NwbGJpbml0LmMgYi9hcmNoL2JsYWNrZmluL2tlcm5lbC9jcGxiLW1wdS9jcGxiaW5pdC5jCmluZGV4IDQ4MDYwMTAuLjU1YWY3MjkgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4va2VybmVsL2NwbGItbXB1L2NwbGJpbml0LmMKKysrIGIvYXJjaC9ibGFja2Zpbi9rZXJuZWwvY3BsYi1tcHUvY3BsYmluaXQuYwpAQCAtMzYsNyArMzYsNyBAQAogaW50IGZpcnN0X3N3aXRjaGVkX2ljcGxiLCBmaXJzdF9zd2l0Y2hlZF9kY3BsYjsKIGludCBmaXJzdF9tYXNrX2RjcGxiOwogCi12b2lkIF9faW5pdCBnZW5lcmF0ZV9jcGxfdGFibGVzKHZvaWQpCit2b2lkIF9faW5pdCBnZW5lcmF0ZV9jcGxiX3RhYmxlcyh2b2lkKQogewogCWludCBpX2QsIGlfaTsKIAl1bnNpZ25lZCBsb25nIGFkZHI7CkBAIC04Myw4ICs4MywxOCBAQAogCWRjcGxiX3RibFtpX2RdLmFkZHIgPSBMMV9EQVRBX0FfU1RBUlQ7CiAJZGNwbGJfdGJsW2lfZCsrXS5kYXRhID0gTDFfRE1FTU9SWSB8IFBBR0VfU0laRV80TUI7CiAjZW5kaWYKKyNpZiBMMV9DT0RFX0xFTkdUSCA+IDAKIAlpY3BsYl90YmxbaV9pXS5hZGRyID0gTDFfQ09ERV9TVEFSVDsKIAlpY3BsYl90YmxbaV9pKytdLmRhdGEgPSBMMV9JTUVNT1JZIHwgUEFHRV9TSVpFXzRNQjsKKyNlbmRpZgorCisJLyogQ292ZXIgTDIgbWVtb3J5ICovCisjaWYgTDJfTEVOR1RIID4gMAorCWRjcGxiX3RibFtpX2RdLmFkZHIgPSBMMl9TVEFSVDsKKwlkY3BsYl90YmxbaV9kKytdLmRhdGEgPSBMMl9ETUVNT1JZIHwgUEFHRV9TSVpFXzFNQjsKKwlpY3BsYl90YmxbaV9pXS5hZGRyID0gTDJfU1RBUlQ7CisJaWNwbGJfdGJsW2lfaSsrXS5kYXRhID0gTDJfSU1FTU9SWSB8IFBBR0VfU0laRV8xTUI7CisjZW5kaWYKIAogCWZpcnN0X21hc2tfZGNwbGIgPSBpX2Q7CiAJZmlyc3Rfc3dpdGNoZWRfZGNwbGIgPSBpX2QgKyAoMSA8PCBwYWdlX21hc2tfb3JkZXIpOwpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9rZXJuZWwvY3BsYi1tcHUvY3BsYm1nci5jIGIvYXJjaC9ibGFja2Zpbi9rZXJuZWwvY3BsYi1tcHUvY3BsYm1nci5jCmluZGV4IDk5ZjI4MzEuLmJhYTUyZTIgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4va2VybmVsL2NwbGItbXB1L2NwbGJtZ3IuYworKysgYi9hcmNoL2JsYWNrZmluL2tlcm5lbC9jcGxiLW1wdS9jcGxibWdyLmMKQEAgLTIxLDYgKzIxLDcgQEAKICNpbmNsdWRlIDxsaW51eC9tbS5oPgogCiAjaW5jbHVkZSA8YXNtL2JsYWNrZmluLmg+CisjaW5jbHVkZSA8YXNtL2NhY2hlZmx1c2guaD4KICNpbmNsdWRlIDxhc20vY3BsYmluaXQuaD4KICNpbmNsdWRlIDxhc20vbW11X2NvbnRleHQuaD4KIApAQCAtMTQ0LDkgKzE0NSw3IEBACiAKIAlkX2RhdGEgPSBDUExCX1NVUFZfV1IgfCBDUExCX1ZBTElEIHwgQ1BMQl9ESVJUWSB8IFBBR0VfU0laRV80S0I7CiAjaWZkZWYgQ09ORklHX0JGSU5fRENBQ0hFCi0JaWYgKGFkZHIgPCBfcmFtZW5kIC0gRE1BX1VOQ0FDSEVEX1JFR0lPTiB8fAotCSAgICAocmVzZXJ2ZWRfbWVtX2RjYWNoZV9vbiAmJiBhZGRyID49IF9yYW1lbmQgJiYKLQkgICAgIGFkZHIgPCBwaHlzaWNhbF9tZW1fZW5kKSkgeworCWlmIChiZmluX2FkZHJfZGNhY2hhYmxlKGFkZHIpKSB7CiAJCWRfZGF0YSB8PSBDUExCX0wxX0NIQkwgfCBBTk9NQUxZXzA1MDAwMTU4X1dPUktBUk9VTkQ7CiAjaWZkZWYgQ09ORklHX0JGSU5fV1QKIAkJZF9kYXRhIHw9IENQTEJfTDFfQU9XIHwgQ1BMQl9XVDsKQEAgLTMyMiw5ICszMjEsMTEgQEAKIHZvaWQgZmx1c2hfc3dpdGNoZWRfY3BsYnModm9pZCkKIHsKIAlpbnQgaTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJbnJfY3BsYl9mbHVzaCsrOwogCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwogCWRpc2FibGVfaWNwbGIoKTsKIAlmb3IgKGkgPSBmaXJzdF9zd2l0Y2hlZF9pY3BsYjsgaSA8IE1BWF9DUExCUzsgaSsrKSB7CiAJCWljcGxiX3RibFtpXS5kYXRhID0gMDsKQEAgLTMzOCw2ICszMzksOCBAQAogCQliZmluX3dyaXRlMzIoRENQTEJfREFUQTAgKyBpICogNCwgMCk7CiAJfQogCWVuYWJsZV9kY3BsYigpOworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKwogfQogCiB2b2lkIHNldF9tYXNrX2RjcGxicyh1bnNpZ25lZCBsb25nICptYXNrcykKQEAgLTM0NSwxMCArMzQ4LDE1IEBACiAJaW50IGk7CiAJdW5zaWduZWQgbG9uZyBhZGRyID0gKHVuc2lnbmVkIGxvbmcpbWFza3M7CiAJdW5zaWduZWQgbG9uZyBkX2RhdGE7Ci0JY3VycmVudF9yd3hfbWFzayA9IG1hc2tzOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlpZiAoIW1hc2tzKQorCWlmICghbWFza3MpIHsKKwkJY3VycmVudF9yd3hfbWFzayA9IG1hc2tzOwogCQlyZXR1cm47CisJfQorCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCWN1cnJlbnRfcnd4X21hc2sgPSBtYXNrczsKIAogCWRfZGF0YSA9IENQTEJfU1VQVl9XUiB8IENQTEJfVkFMSUQgfCBDUExCX0RJUlRZIHwgUEFHRV9TSVpFXzRLQjsKICNpZmRlZiBDT05GSUdfQkZJTl9EQ0FDSEUKQEAgLTM2Nyw0ICszNzUsNSBAQAogCQlhZGRyICs9IFBBR0VfU0laRTsKIAl9CiAJZW5hYmxlX2RjcGxiKCk7CisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9rZXJuZWwvY3BsYi1ub21wdS9jcGxiaW5pdC5jIGIvYXJjaC9ibGFja2Zpbi9rZXJuZWwvY3BsYi1ub21wdS9jcGxiaW5pdC5jCmluZGV4IDcyOGY3MDguLjUxMmY4YzkgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4va2VybmVsL2NwbGItbm9tcHUvY3BsYmluaXQuYworKysgYi9hcmNoL2JsYWNrZmluL2tlcm5lbC9jcGxiLW5vbXB1L2NwbGJpbml0LmMKQEAgLTIzLDYgKzIzLDcgQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KIAogI2luY2x1ZGUgPGFzbS9ibGFja2Zpbi5oPgorI2luY2x1ZGUgPGFzbS9jYWNoZWZsdXNoLmg+CiAjaW5jbHVkZSA8YXNtL2NwbGIuaD4KICNpbmNsdWRlIDxhc20vY3BsYmluaXQuaD4KIApAQCAtMTY4LDggKzE2OSw4IEBACiAJCS5lbmQgPSBMMl9TVEFSVCArIEwyX0xFTkdUSCwKIAkJLnBzaXplID0gU0laRV8xTSwKIAkJLmF0dHIgPSBTV0lUQ0hfVCB8IElfQ1BMQiB8IERfQ1BMQiwKLQkJLmlfY29uZiA9IEwyX01FTU9SWSwKLQkJLmRfY29uZiA9IEwyX01FTU9SWSwKKwkJLmlfY29uZiA9IEwyX0lNRU1PUlksCisJCS5kX2NvbmYgPSBMMl9ETUVNT1JZLAogCQkudmFsaWQgPSAoTDJfTEVOR1RIID4gMCksCiAJCS5uYW1lID0gIkwyIE1lbW9yeSIsCiAJfSwKQEAgLTMwOCw3ICszMDksNyBAQAogCX0KIH0KIAotdm9pZCBfX2luaXQgZ2VuZXJhdGVfY3BsX3RhYmxlcyh2b2lkKQordm9pZCBfX2luaXQgZ2VuZXJhdGVfY3BsYl90YWJsZXModm9pZCkKIHsKIAogCXUxNiBpLCBqLCBwcm9jZXNzOwpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9rZXJuZWwvZWFybHlfcHJpbnRrLmMgYi9hcmNoL2JsYWNrZmluL2tlcm5lbC9lYXJseV9wcmludGsuYwppbmRleCA2MGY2N2Y5Li4xZjRlM2QyIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2tlcm5lbC9lYXJseV9wcmludGsuYworKysgYi9hcmNoL2JsYWNrZmluL2tlcm5lbC9lYXJseV9wcmludGsuYwpAQCAtMzUsNiArMzUsOSBAQAogZXh0ZXJuIHN0cnVjdCBjb25zb2xlICpiZmluX2Vhcmx5c2VyaWFsX2luaXQodW5zaWduZWQgaW50IHBvcnQsCiAJCQkJCQl1bnNpZ25lZCBpbnQgY2ZsYWcpOwogI2VuZGlmCisjaWZkZWYgQ09ORklHX0JGSU5fSlRBR19DT01NCitleHRlcm4gc3RydWN0IGNvbnNvbGUgKmJmaW5famNfZWFybHlfaW5pdCh2b2lkKTsKKyNlbmRpZgogCiBzdGF0aWMgc3RydWN0IGNvbnNvbGUgKmVhcmx5X2NvbnNvbGU7CiAKQEAgLTE0Miw2ICsxNDUsMTUgQEAKIAkJZWFybHlfY29uc29sZSA9IGVhcmx5c2VyaWFsX2luaXQoYnVmKTsKIAl9CiAjZW5kaWYKKworI2lmZGVmIENPTkZJR19CRklOX0pUQUdfQ09NTQorCS8qIENoZWNrIGZvciBCbGFja2ZpbiBKVEFHICovCisJaWYgKCFzdHJuY21wKGJ1ZiwgImp0YWciLCA0KSkgeworCQlidWYgKz0gNDsKKwkJZWFybHlfY29uc29sZSA9IGJmaW5famNfZWFybHlfaW5pdCgpOworCX0KKyNlbmRpZgorCiAjaWZkZWYgQ09ORklHX0ZCCiAJCS8qIFRPRE86IGFkZCBmcmFtZWJ1ZmZlciBjb25zb2xlIHN1cHBvcnQgKi8KICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9rZXJuZWwva2dkYi5jIGIvYXJjaC9ibGFja2Zpbi9rZXJuZWwva2dkYi5jCmluZGV4IGExZjk2NDEuLmI3OTVhMjAgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4va2VybmVsL2tnZGIuYworKysgYi9hcmNoL2JsYWNrZmluL2tlcm5lbC9rZ2RiLmMKQEAgLTEsMzIgKzEsOSBAQAogLyoKLSAqIEZpbGU6ICAgICAgICAgYXJjaC9ibGFja2Zpbi9rZXJuZWwva2dkYi5jCi0gKiBCYXNlZCBvbjoKLSAqIEF1dGhvcjogICAgICAgU29uaWMgWmhhbmcKKyAqIGFyY2gvYmxhY2tmaW4va2VybmVsL2tnZGIuYyAtIEJsYWNrZmluIGtnZGIgcGllY2VzCiAgKgotICogQ3JlYXRlZDoKLSAqIERlc2NyaXB0aW9uOgorICogQ29weXJpZ2h0IDIwMDUtMjAwOCBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogUmV2OiAgICAgICAgICAkSWQ6IGtnZGJfYmZpbl9saW51eC0yLjYueC5wYXRjaCA0OTM0IDIwMDctMDItMTMgMDk6MzI6MTFaIHNvbmljeiAkCi0gKgotICogTW9kaWZpZWQ6Ci0gKiAgICAgICAgICAgICAgIENvcHlyaWdodCAyMDA1LTIwMDYgQW5hbG9nIERldmljZXMgSW5jLgotICoKLSAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgdGhlIGZpbGUgQ09QWUlORywgb3Igd3JpdGUKLSAqIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgogICovCiAKICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KQEAgLTM5LDI0ICsxNiwyOSBAQAogI2luY2x1ZGUgPGxpbnV4L2tnZGIuaD4KICNpbmNsdWRlIDxsaW51eC9jb25zb2xlLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L2RlYnVnZ2VyLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9pcnEuaD4KKyNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogI2luY2x1ZGUgPGFzbS90cmFwcy5oPgogI2luY2x1ZGUgPGFzbS9ibGFja2Zpbi5oPgorI2luY2x1ZGUgPGFzbS9kbWEuaD4KIAogLyogUHV0IHRoZSBlcnJvciBjb2RlIGhlcmUganVzdCBpbiBjYXNlIHRoZSB1c2VyIGNhcmVzLiAgKi8KLWludCBnZGJfYmY1MzNlcnJjb2RlOworaW50IGdkYl9iZmluX2VycmNvZGU7CiAvKiBMaWtld2lzZSwgdGhlIHZlY3RvciBudW1iZXIgaGVyZSAoc2luY2UgR0RCIG9ubHkgZ2V0cyB0aGUgc2lnbmFsCiAgICBudW1iZXIgdGhyb3VnaCB0aGUgdXN1YWwgbWVhbnMsIGFuZCB0aGF0J3Mgbm90IHZlcnkgc3BlY2lmaWMpLiAgKi8KLWludCBnZGJfYmY1MzN2ZWN0b3IgPSAtMTsKK2ludCBnZGJfYmZpbl92ZWN0b3IgPSAtMTsKIAogI2lmIEtHREJfTUFYX05PX0NQVVMgIT0gOAogI2Vycm9yIGNoYW5nZSB0aGUgZGVmaW5pdGlvbiBvZiBzbGF2ZWNwdWxvY2tzCiAjZW5kaWYKIAotdm9pZCByZWdzX3RvX2dkYl9yZWdzKHVuc2lnbmVkIGxvbmcgKmdkYl9yZWdzLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKKyNpZmRlZiBDT05GSUdfQkZJTl9XRFQKKyMgZXJyb3IgIlBsZWFzZSB1bnNlbGVjdCBibGFja2ZpbiB3YXRjaGRvZyBkcml2ZXIgYmVmb3JlIGJ1aWxkIEtHREIuIgorI2VuZGlmCisKK3ZvaWQgcHRfcmVnc190b19nZGJfcmVncyh1bnNpZ25lZCBsb25nICpnZGJfcmVncywgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CiAJZ2RiX3JlZ3NbQkZJTl9SMF0gPSByZWdzLT5yMDsKIAlnZGJfcmVnc1tCRklOX1IxXSA9IHJlZ3MtPnIxOwpAQCAtMTMzLDcgKzExNSw3IEBACiAJZ2RiX3JlZ3NbQkZJTl9TRVFTVEFUXSA9IHAtPnRocmVhZC5zZXFzdGF0OwogfQogCi12b2lkIGdkYl9yZWdzX3RvX3JlZ3ModW5zaWduZWQgbG9uZyAqZ2RiX3JlZ3MsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQordm9pZCBnZGJfcmVnc190b19wdF9yZWdzKHVuc2lnbmVkIGxvbmcgKmdkYl9yZWdzLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKIAlyZWdzLT5yMCA9IGdkYl9yZWdzW0JGSU5fUjBdOwogCXJlZ3MtPnIxID0gZ2RiX3JlZ3NbQkZJTl9SMV07CkBAIC0xOTksMTcxICsxODEsMjA4IEBACiAJdW5zaWduZWQgaW50IGRhdGFhY2M6MjsKIAl1bnNpZ25lZCBzaG9ydCBjb3VudDsKIAl1bnNpZ25lZCBpbnQgYWRkcjsKLX0gYnJlYWtpbmZvW0hXX0JSRUFLUE9JTlRfTlVNXTsKK30gYnJlYWtpbmZvW0hXX1dBVENIUE9JTlRfTlVNXTsKIAotaW50IGtnZGJfYXJjaF9pbml0KHZvaWQpCi17Ci0JZGVidWdnZXJfc3RlcCA9IDA7Ci0KLQlrZ2RiX3JlbW92ZV9hbGxfaHdfYnJlYWsoKTsKLQlyZXR1cm4gMDsKLX0KLQotaW50IGtnZGJfc2V0X2h3X2JyZWFrKHVuc2lnbmVkIGxvbmcgYWRkcikKK2ludCBiZmluX3NldF9od19icmVhayh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBsZW4sIGVudW0ga2dkYl9icHR5cGUgdHlwZSkKIHsKIAlpbnQgYnJlYWtubzsKLQlmb3IgKGJyZWFrbm8gPSAwOyBicmVha25vIDwgSFdfQlJFQUtQT0lOVF9OVU07IGJyZWFrbm8rKykKLQkJaWYgKCFicmVha2luZm9bYnJlYWtub10ub2NjdXBpZWQpIHsKKwlpbnQgYmZpbl90eXBlOworCWludCBkYXRhYWNjID0gMDsKKworCXN3aXRjaCAodHlwZSkgeworCWNhc2UgQlBfSEFSRFdBUkVfQlJFQUtQT0lOVDoKKwkJYmZpbl90eXBlID0gVFlQRV9JTlNUX1dBVENIUE9JTlQ7CisJCWJyZWFrOworCWNhc2UgQlBfV1JJVEVfV0FUQ0hQT0lOVDoKKwkJZGF0YWFjYyA9IDE7CisJCWJmaW5fdHlwZSA9IFRZUEVfREFUQV9XQVRDSFBPSU5UOworCQlicmVhazsKKwljYXNlIEJQX1JFQURfV0FUQ0hQT0lOVDoKKwkJZGF0YWFjYyA9IDI7CisJCWJmaW5fdHlwZSA9IFRZUEVfREFUQV9XQVRDSFBPSU5UOworCQlicmVhazsKKwljYXNlIEJQX0FDQ0VTU19XQVRDSFBPSU5UOgorCQlkYXRhYWNjID0gMzsKKwkJYmZpbl90eXBlID0gVFlQRV9EQVRBX1dBVENIUE9JTlQ7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRU5PU1BDOworCX0KKworCS8qIEJlY2FzdWUgaGFyZHdhcmUgZGF0YSB3YXRjaHBvaW50IGltcGVsZW1lbnRlZCBpbiBjdXJyZW50CisJICogQmxhY2tmaW4gY2FuIG5vdCB0cmlnZ2VyIGFuIGV4Y2VwdGlvbiBldmVudCBhcyB0aGUgaGFyZHdhcmUKKwkgKiBpbnN0cmN0aW9uIHdhdGNocG9pbnQgZG9lcywgd2UgaWduYW9yZSBhbGwgZGF0YSB3YXRjaCBwb2ludCBoZXJlLgorCSAqIFRoZXkgY2FuIGJlIHR1cm5lZCBvbiBlYXNpbHkgYWZ0ZXIgZnV0dXJlIGJsYWNrZmluIGRlc2lnbgorCSAqIHN1cHBvcnRzIHRoaXMgZmVhdHVyZS4KKwkgKi8KKwlmb3IgKGJyZWFrbm8gPSAwOyBicmVha25vIDwgSFdfSU5TVF9XQVRDSFBPSU5UX05VTTsgYnJlYWtubysrKQorCQlpZiAoYmZpbl90eXBlID09IGJyZWFraW5mb1ticmVha25vXS50eXBlCisJCQkmJiAhYnJlYWtpbmZvW2JyZWFrbm9dLm9jY3VwaWVkKSB7CiAJCQlicmVha2luZm9bYnJlYWtub10ub2NjdXBpZWQgPSAxOwogCQkJYnJlYWtpbmZvW2JyZWFrbm9dLmVuYWJsZWQgPSAxOwotCQkJYnJlYWtpbmZvW2JyZWFrbm9dLnR5cGUgPSAxOwogCQkJYnJlYWtpbmZvW2JyZWFrbm9dLmFkZHIgPSBhZGRyOworCQkJYnJlYWtpbmZvW2JyZWFrbm9dLmRhdGFhY2MgPSBkYXRhYWNjOworCQkJYnJlYWtpbmZvW2JyZWFrbm9dLmNvdW50ID0gMDsKIAkJCXJldHVybiAwOwogCQl9CiAKIAlyZXR1cm4gLUVOT1NQQzsKIH0KIAotaW50IGtnZGJfcmVtb3ZlX2h3X2JyZWFrKHVuc2lnbmVkIGxvbmcgYWRkcikKK2ludCBiZmluX3JlbW92ZV9od19icmVhayh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBsZW4sIGVudW0ga2dkYl9icHR5cGUgdHlwZSkKIHsKIAlpbnQgYnJlYWtubzsKLQlmb3IgKGJyZWFrbm8gPSAwOyBicmVha25vIDwgSFdfQlJFQUtQT0lOVF9OVU07IGJyZWFrbm8rKykKLQkJaWYgKGJyZWFraW5mb1ticmVha25vXS5hZGRyID09IGFkZHIpCi0JCQltZW1zZXQoJihicmVha2luZm9bYnJlYWtub10pLCAwLCBzaXplb2Yoc3RydWN0IGh3X2JyZWFrcG9pbnQpKTsKKwlpbnQgYmZpbl90eXBlOworCisJc3dpdGNoICh0eXBlKSB7CisJY2FzZSBCUF9IQVJEV0FSRV9CUkVBS1BPSU5UOgorCQliZmluX3R5cGUgPSBUWVBFX0lOU1RfV0FUQ0hQT0lOVDsKKwkJYnJlYWs7CisJY2FzZSBCUF9XUklURV9XQVRDSFBPSU5UOgorCWNhc2UgQlBfUkVBRF9XQVRDSFBPSU5UOgorCWNhc2UgQlBfQUNDRVNTX1dBVENIUE9JTlQ6CisJCWJmaW5fdHlwZSA9IFRZUEVfREFUQV9XQVRDSFBPSU5UOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gMDsKKwl9CisJZm9yIChicmVha25vID0gMDsgYnJlYWtubyA8IEhXX1dBVENIUE9JTlRfTlVNOyBicmVha25vKyspCisJCWlmIChiZmluX3R5cGUgPT0gYnJlYWtpbmZvW2JyZWFrbm9dLnR5cGUKKwkJCSYmIGJyZWFraW5mb1ticmVha25vXS5vY2N1cGllZAorCQkJJiYgYnJlYWtpbmZvW2JyZWFrbm9dLmFkZHIgPT0gYWRkcikgeworCQkJYnJlYWtpbmZvW2JyZWFrbm9dLm9jY3VwaWVkID0gMDsKKwkJCWJyZWFraW5mb1ticmVha25vXS5lbmFibGVkID0gMDsKKwkJfQogCiAJcmV0dXJuIDA7CiB9CiAKLXZvaWQga2dkYl9yZW1vdmVfYWxsX2h3X2JyZWFrKHZvaWQpCi17Ci0JbWVtc2V0KGJyZWFraW5mbywgMCwgc2l6ZW9mKHN0cnVjdCBod19icmVha3BvaW50KSo4KTsKLX0KLQotLyoKLXZvaWQga2dkYl9zaG93X2luZm8odm9pZCkKLXsKLQlwcmludGsoS0VSTl9ERUJVRyAiaHdkOiB3cGlhMD0weCV4LCB3cGlhY250MD0lZCwgd3BpYWN0bD0weCV4LCB3cHN0YXQ9MHgleFxuIiwKLQkJYmZpbl9yZWFkX1dQSUEwKCksIGJmaW5fcmVhZF9XUElBQ05UMCgpLAotCQliZmluX3JlYWRfV1BJQUNUTCgpLCBiZmluX3JlYWRfV1BTVEFUKCkpOwotfQotKi8KLQotdm9pZCBrZ2RiX2NvcnJlY3RfaHdfYnJlYWsodm9pZCkKK3ZvaWQgYmZpbl9yZW1vdmVfYWxsX2h3X2JyZWFrKHZvaWQpCiB7CiAJaW50IGJyZWFrbm87Ci0JaW50IGNvcnJlY3RpdDsKLQl1aW50MzJfdCB3cGRhY3RsID0gYmZpbl9yZWFkX1dQREFDVEwoKTsKIAotCWNvcnJlY3RpdCA9IDA7Ci0JZm9yIChicmVha25vID0gMDsgYnJlYWtubyA8IEhXX0JSRUFLUE9JTlRfTlVNOyBicmVha25vKyspIHsKLQkJaWYgKGJyZWFraW5mb1ticmVha25vXS50eXBlID09IDEpIHsKKwltZW1zZXQoYnJlYWtpbmZvLCAwLCBzaXplb2Yoc3RydWN0IGh3X2JyZWFrcG9pbnQpKkhXX1dBVENIUE9JTlRfTlVNKTsKKworCWZvciAoYnJlYWtubyA9IDA7IGJyZWFrbm8gPCBIV19JTlNUX1dBVENIUE9JTlRfTlVNOyBicmVha25vKyspCisJCWJyZWFraW5mb1ticmVha25vXS50eXBlID0gVFlQRV9JTlNUX1dBVENIUE9JTlQ7CisJZm9yICg7IGJyZWFrbm8gPCBIV19XQVRDSFBPSU5UX05VTTsgYnJlYWtubysrKQorCQlicmVha2luZm9bYnJlYWtub10udHlwZSA9IFRZUEVfREFUQV9XQVRDSFBPSU5UOworfQorCit2b2lkIGJmaW5fY29ycmVjdF9od19icmVhayh2b2lkKQoreworCWludCBicmVha25vOworCXVuc2lnbmVkIGludCB3cGlhY3RsID0gMDsKKwl1bnNpZ25lZCBpbnQgd3BkYWN0bCA9IDA7CisJaW50IGVuYWJsZV93cCA9IDA7CisKKwlmb3IgKGJyZWFrbm8gPSAwOyBicmVha25vIDwgSFdfV0FUQ0hQT0lOVF9OVU07IGJyZWFrbm8rKykKKwkJaWYgKGJyZWFraW5mb1ticmVha25vXS5lbmFibGVkKSB7CisJCQllbmFibGVfd3AgPSAxOworCiAJCQlzd2l0Y2ggKGJyZWFrbm8pIHsKIAkJCWNhc2UgMDoKLQkJCQlpZiAoYnJlYWtpbmZvW2JyZWFrbm9dLmVuYWJsZWQgJiYgISh3cGRhY3RsICYgV1BJQUVOMCkpIHsKLQkJCQkJY29ycmVjdGl0ID0gMTsKLQkJCQkJd3BkYWN0bCAmPSB+KFdQSVJFTjAxfEVNVVNXMCk7Ci0JCQkJCXdwZGFjdGwgfD0gV1BJQUVOMHxXUElDTlRFTjA7Ci0JCQkJCWJmaW5fd3JpdGVfV1BJQTAoYnJlYWtpbmZvW2JyZWFrbm9dLmFkZHIpOwotCQkJCQliZmluX3dyaXRlX1dQSUFDTlQwKGJyZWFraW5mb1ticmVha25vXS5za2lwKTsKLQkJCQl9IGVsc2UgaWYgKCFicmVha2luZm9bYnJlYWtub10uZW5hYmxlZCAmJiAod3BkYWN0bCAmIFdQSUFFTjApKSB7Ci0JCQkJCWNvcnJlY3RpdCA9IDE7Ci0JCQkJCXdwZGFjdGwgJj0gfldQSUFFTjA7Ci0JCQkJfQorCQkJCXdwaWFjdGwgfD0gV1BJQUVOMHxXUElDTlRFTjA7CisJCQkJYmZpbl93cml0ZV9XUElBMChicmVha2luZm9bYnJlYWtub10uYWRkcik7CisJCQkJYmZpbl93cml0ZV9XUElBQ05UMChicmVha2luZm9bYnJlYWtub10uY291bnQKKwkJCQkJKyBicmVha2luZm8tPnNraXApOwogCQkJCWJyZWFrOwotCiAJCQljYXNlIDE6Ci0JCQkJaWYgKGJyZWFraW5mb1ticmVha25vXS5lbmFibGVkICYmICEod3BkYWN0bCAmIFdQSUFFTjEpKSB7Ci0JCQkJCWNvcnJlY3RpdCA9IDE7Ci0JCQkJCXdwZGFjdGwgJj0gfihXUElSRU4wMXxFTVVTVzEpOwotCQkJCQl3cGRhY3RsIHw9IFdQSUFFTjF8V1BJQ05URU4xOwotCQkJCQliZmluX3dyaXRlX1dQSUExKGJyZWFraW5mb1ticmVha25vXS5hZGRyKTsKLQkJCQkJYmZpbl93cml0ZV9XUElBQ05UMShicmVha2luZm9bYnJlYWtub10uc2tpcCk7Ci0JCQkJfSBlbHNlIGlmICghYnJlYWtpbmZvW2JyZWFrbm9dLmVuYWJsZWQgJiYgKHdwZGFjdGwgJiBXUElBRU4xKSkgewotCQkJCQljb3JyZWN0aXQgPSAxOwotCQkJCQl3cGRhY3RsICY9IH5XUElBRU4xOwotCQkJCX0KKwkJCQl3cGlhY3RsIHw9IFdQSUFFTjF8V1BJQ05URU4xOworCQkJCWJmaW5fd3JpdGVfV1BJQTEoYnJlYWtpbmZvW2JyZWFrbm9dLmFkZHIpOworCQkJCWJmaW5fd3JpdGVfV1BJQUNOVDEoYnJlYWtpbmZvW2JyZWFrbm9dLmNvdW50CisJCQkJCSsgYnJlYWtpbmZvLT5za2lwKTsKIAkJCQlicmVhazsKLQogCQkJY2FzZSAyOgotCQkJCWlmIChicmVha2luZm9bYnJlYWtub10uZW5hYmxlZCAmJiAhKHdwZGFjdGwgJiBXUElBRU4yKSkgewotCQkJCQljb3JyZWN0aXQgPSAxOwotCQkJCQl3cGRhY3RsICY9IH4oV1BJUkVOMjN8RU1VU1cyKTsKLQkJCQkJd3BkYWN0bCB8PSBXUElBRU4yfFdQSUNOVEVOMjsKLQkJCQkJYmZpbl93cml0ZV9XUElBMihicmVha2luZm9bYnJlYWtub10uYWRkcik7Ci0JCQkJCWJmaW5fd3JpdGVfV1BJQUNOVDIoYnJlYWtpbmZvW2JyZWFrbm9dLnNraXApOwotCQkJCX0gZWxzZSBpZiAoIWJyZWFraW5mb1ticmVha25vXS5lbmFibGVkICYmICh3cGRhY3RsICYgV1BJQUVOMikpIHsKLQkJCQkJY29ycmVjdGl0ID0gMTsKLQkJCQkJd3BkYWN0bCAmPSB+V1BJQUVOMjsKLQkJCQl9CisJCQkJd3BpYWN0bCB8PSBXUElBRU4yfFdQSUNOVEVOMjsKKwkJCQliZmluX3dyaXRlX1dQSUEyKGJyZWFraW5mb1ticmVha25vXS5hZGRyKTsKKwkJCQliZmluX3dyaXRlX1dQSUFDTlQyKGJyZWFraW5mb1ticmVha25vXS5jb3VudAorCQkJCQkrIGJyZWFraW5mby0+c2tpcCk7CiAJCQkJYnJlYWs7Ci0KIAkJCWNhc2UgMzoKLQkJCQlpZiAoYnJlYWtpbmZvW2JyZWFrbm9dLmVuYWJsZWQgJiYgISh3cGRhY3RsICYgV1BJQUVOMykpIHsKLQkJCQkJY29ycmVjdGl0ID0gMTsKLQkJCQkJd3BkYWN0bCAmPSB+KFdQSVJFTjIzfEVNVVNXMyk7Ci0JCQkJCXdwZGFjdGwgfD0gV1BJQUVOM3xXUElDTlRFTjM7Ci0JCQkJCWJmaW5fd3JpdGVfV1BJQTMoYnJlYWtpbmZvW2JyZWFrbm9dLmFkZHIpOwotCQkJCQliZmluX3dyaXRlX1dQSUFDTlQzKGJyZWFraW5mb1ticmVha25vXS5za2lwKTsKLQkJCQl9IGVsc2UgaWYgKCFicmVha2luZm9bYnJlYWtub10uZW5hYmxlZCAmJiAod3BkYWN0bCAmIFdQSUFFTjMpKSB7Ci0JCQkJCWNvcnJlY3RpdCA9IDE7Ci0JCQkJCXdwZGFjdGwgJj0gfldQSUFFTjM7Ci0JCQkJfQorCQkJCXdwaWFjdGwgfD0gV1BJQUVOM3xXUElDTlRFTjM7CisJCQkJYmZpbl93cml0ZV9XUElBMyhicmVha2luZm9bYnJlYWtub10uYWRkcik7CisJCQkJYmZpbl93cml0ZV9XUElBQ05UMyhicmVha2luZm9bYnJlYWtub10uY291bnQKKwkJCQkJKyBicmVha2luZm8tPnNraXApOwogCQkJCWJyZWFrOwogCQkJY2FzZSA0OgotCQkJCWlmIChicmVha2luZm9bYnJlYWtub10uZW5hYmxlZCAmJiAhKHdwZGFjdGwgJiBXUElBRU40KSkgewotCQkJCQljb3JyZWN0aXQgPSAxOwotCQkJCQl3cGRhY3RsICY9IH4oV1BJUkVONDV8RU1VU1c0KTsKLQkJCQkJd3BkYWN0bCB8PSBXUElBRU40fFdQSUNOVEVONDsKLQkJCQkJYmZpbl93cml0ZV9XUElBNChicmVha2luZm9bYnJlYWtub10uYWRkcik7Ci0JCQkJCWJmaW5fd3JpdGVfV1BJQUNOVDQoYnJlYWtpbmZvW2JyZWFrbm9dLnNraXApOwotCQkJCX0gZWxzZSBpZiAoIWJyZWFraW5mb1ticmVha25vXS5lbmFibGVkICYmICh3cGRhY3RsICYgV1BJQUVONCkpIHsKLQkJCQkJY29ycmVjdGl0ID0gMTsKLQkJCQkJd3BkYWN0bCAmPSB+V1BJQUVONDsKLQkJCQl9CisJCQkJd3BpYWN0bCB8PSBXUElBRU40fFdQSUNOVEVONDsKKwkJCQliZmluX3dyaXRlX1dQSUE0KGJyZWFraW5mb1ticmVha25vXS5hZGRyKTsKKwkJCQliZmluX3dyaXRlX1dQSUFDTlQ0KGJyZWFraW5mb1ticmVha25vXS5jb3VudAorCQkJCQkrIGJyZWFraW5mby0+c2tpcCk7CiAJCQkJYnJlYWs7CiAJCQljYXNlIDU6Ci0JCQkJaWYgKGJyZWFraW5mb1ticmVha25vXS5lbmFibGVkICYmICEod3BkYWN0bCAmIFdQSUFFTjUpKSB7Ci0JCQkJCWNvcnJlY3RpdCA9IDE7Ci0JCQkJCXdwZGFjdGwgJj0gfihXUElSRU40NXxFTVVTVzUpOwotCQkJCQl3cGRhY3RsIHw9IFdQSUFFTjV8V1BJQ05URU41OwotCQkJCQliZmluX3dyaXRlX1dQSUE1KGJyZWFraW5mb1ticmVha25vXS5hZGRyKTsKLQkJCQkJYmZpbl93cml0ZV9XUElBQ05UNShicmVha2luZm9bYnJlYWtub10uc2tpcCk7Ci0JCQkJfSBlbHNlIGlmICghYnJlYWtpbmZvW2JyZWFrbm9dLmVuYWJsZWQgJiYgKHdwZGFjdGwgJiBXUElBRU41KSkgewotCQkJCQljb3JyZWN0aXQgPSAxOwotCQkJCQl3cGRhY3RsICY9IH5XUElBRU41OwotCQkJCX0KKwkJCQl3cGlhY3RsIHw9IFdQSUFFTjV8V1BJQ05URU41OworCQkJCWJmaW5fd3JpdGVfV1BJQTUoYnJlYWtpbmZvW2JyZWFrbm9dLmFkZHIpOworCQkJCWJmaW5fd3JpdGVfV1BJQUNOVDUoYnJlYWtpbmZvW2JyZWFrbm9dLmNvdW50CisJCQkJCSsgYnJlYWtpbmZvLT5za2lwKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgNjoKKwkJCQl3cGRhY3RsIHw9IFdQREFFTjB8V1BEQ05URU4wfFdQRFNSQzA7CisJCQkJd3BkYWN0bCB8PSBicmVha2luZm9bYnJlYWtub10uZGF0YWFjYworCQkJCQk8PCBXUERBQ0MwX09GRlNFVDsKKwkJCQliZmluX3dyaXRlX1dQREEwKGJyZWFraW5mb1ticmVha25vXS5hZGRyKTsKKwkJCQliZmluX3dyaXRlX1dQREFDTlQwKGJyZWFraW5mb1ticmVha25vXS5jb3VudAorCQkJCQkrIGJyZWFraW5mby0+c2tpcCk7CisJCQkJYnJlYWs7CisJCQljYXNlIDc6CisJCQkJd3BkYWN0bCB8PSBXUERBRU4xfFdQRENOVEVOMXxXUERTUkMxOworCQkJCXdwZGFjdGwgfD0gYnJlYWtpbmZvW2JyZWFrbm9dLmRhdGFhY2MKKwkJCQkJPDwgV1BEQUNDMV9PRkZTRVQ7CisJCQkJYmZpbl93cml0ZV9XUERBMShicmVha2luZm9bYnJlYWtub10uYWRkcik7CisJCQkJYmZpbl93cml0ZV9XUERBQ05UMShicmVha2luZm9bYnJlYWtub10uY291bnQKKwkJCQkJKyBicmVha2luZm8tPnNraXApOwogCQkJCWJyZWFrOwogCQkJfQogCQl9Ci0JfQotCWlmIChjb3JyZWN0aXQpIHsKLQkJd3BkYWN0bCAmPSB+V1BBTkQ7Ci0JCXdwZGFjdGwgfD0gV1BQV1I7Ci0JCS8qcHJpbnRrKCJjb3JyZWN0X2h3X2JyZWFrOiB3cGRhY3RsPTB4JXhcbiIsIHdwZGFjdGwpOyovCisKKwkvKiBTaG91bGQgZW5hYmxlIFdQUFdSIGJpdCBmaXJzdCBiZWZvcmUgc2V0IGFueSBvdGhlcgorCSAqIFdQSUFDVEwgYW5kIFdQREFDVEwgYml0cyAqLworCWlmIChlbmFibGVfd3ApIHsKKwkJYmZpbl93cml0ZV9XUElBQ1RMKFdQUFdSKTsKKwkJQ1NZTkMoKTsKKwkJYmZpbl93cml0ZV9XUElBQ1RMKHdwaWFjdGx8V1BQV1IpOwogCQliZmluX3dyaXRlX1dQREFDVEwod3BkYWN0bCk7CiAJCUNTWU5DKCk7Ci0JCS8qa2dkYl9zaG93X2luZm8oKTsqLwogCX0KIH0KIAogdm9pZCBrZ2RiX2Rpc2FibGVfaHdfZGVidWcoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CiAJLyogRGlzYWJsZSBoYXJkd2FyZSBkZWJ1Z2dpbmcgd2hpbGUgd2UgYXJlIGluIGtnZGIgKi8KLQliZmluX3dyaXRlX1dQSUFDVEwoYmZpbl9yZWFkX1dQSUFDVEwoKSAmIH4weDEpOworCWJmaW5fd3JpdGVfV1BJQUNUTCgwKTsKKwliZmluX3dyaXRlX1dQREFDVEwoMCk7CiAJQ1NZTkMoKTsKIH0KIAotdm9pZCBrZ2RiX3Bvc3RfbWFzdGVyX2NvZGUoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIGludCBlVmVjdG9yLCBpbnQgZXJyX2NvZGUpCisjaWZkZWYgQ09ORklHX1NNUAordm9pZCBrZ2RiX3Bhc3NpdmVfY3B1X2NhbGxiYWNrKHZvaWQgKmluZm8pCiB7Ci0JLyogTWFzdGVyIHByb2Nlc3NvciBpcyBjb21wbGV0ZWx5IGluIHRoZSBkZWJ1Z2dlciAqLwotCWdkYl9iZjUzM3ZlY3RvciA9IGVWZWN0b3I7Ci0JZ2RiX2JmNTMzZXJyY29kZSA9IGVycl9jb2RlOworCWtnZGJfbm1pY2FsbGJhY2socmF3X3NtcF9wcm9jZXNzb3JfaWQoKSwgZ2V0X2lycV9yZWdzKCkpOwogfQogCi1pbnQga2dkYl9hcmNoX2hhbmRsZV9leGNlcHRpb24oaW50IGV4Y2VwdGlvblZlY3RvciwgaW50IHNpZ25vLAordm9pZCBrZ2RiX3JvdW5kdXBfY3B1cyh1bnNpZ25lZCBsb25nIGZsYWdzKQoreworCXNtcF9jYWxsX2Z1bmN0aW9uKGtnZGJfcGFzc2l2ZV9jcHVfY2FsbGJhY2ssIE5VTEwsIDAsIDApOworfQorCit2b2lkIGtnZGJfcm91bmR1cF9jcHUoaW50IGNwdSwgdW5zaWduZWQgbG9uZyBmbGFncykKK3sKKwlzbXBfY2FsbF9mdW5jdGlvbl9zaW5nbGUoY3B1LCBrZ2RiX3Bhc3NpdmVfY3B1X2NhbGxiYWNrLCBOVUxMLCAwLCAwKTsKK30KKyNlbmRpZgorCit2b2lkIGtnZGJfcG9zdF9wcmltYXJ5X2NvZGUoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIGludCBlVmVjdG9yLCBpbnQgZXJyX2NvZGUpCit7CisJLyogTWFzdGVyIHByb2Nlc3NvciBpcyBjb21wbGV0ZWx5IGluIHRoZSBkZWJ1Z2dlciAqLworCWdkYl9iZmluX3ZlY3RvciA9IGVWZWN0b3I7CisJZ2RiX2JmaW5fZXJyY29kZSA9IGVycl9jb2RlOworfQorCitpbnQga2dkYl9hcmNoX2hhbmRsZV9leGNlcHRpb24oaW50IHZlY3RvciwgaW50IHNpZ25vLAogCQkJICAgICAgIGludCBlcnJfY29kZSwgY2hhciAqcmVtY29tX2luX2J1ZmZlciwKIAkJCSAgICAgICBjaGFyICpyZW1jb21fb3V0X2J1ZmZlciwKLQkJCSAgICAgICBzdHJ1Y3QgcHRfcmVncyAqbGludXhfcmVncykKKwkJCSAgICAgICBzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKIAlsb25nIGFkZHI7CiAJbG9uZyBicmVha25vOwpAQCAtMzg1LDQ0ICs0MDQsNDAgQEAKIAkJLyogdHJ5IHRvIHJlYWQgb3B0aW9uYWwgcGFyYW1ldGVyLCBwYyB1bmNoYW5nZWQgaWYgbm8gcGFybSAqLwogCQlwdHIgPSAmcmVtY29tX2luX2J1ZmZlclsxXTsKIAkJaWYgKGtnZGJfaGV4MmxvbmcoJnB0ciwgJmFkZHIpKSB7Ci0JCQlsaW51eF9yZWdzLT5yZXR4ID0gYWRkcjsKKwkJCXJlZ3MtPnJldHggPSBhZGRyOwogCQl9Ci0JCW5ld1BDID0gbGludXhfcmVncy0+cmV0eDsKKwkJbmV3UEMgPSByZWdzLT5yZXR4OwogCiAJCS8qIGNsZWFyIHRoZSB0cmFjZSBiaXQgKi8KLQkJbGludXhfcmVncy0+c3lzY2ZnICY9IDB4ZmZmZmZmZmU7CisJCXJlZ3MtPnN5c2NmZyAmPSAweGZmZmZmZmZlOwogCiAJCS8qIHNldCB0aGUgdHJhY2UgYml0IGlmIHdlJ3JlIHN0ZXBwaW5nICovCiAJCWlmIChyZW1jb21faW5fYnVmZmVyWzBdID09ICdzJykgewotCQkJbGludXhfcmVncy0+c3lzY2ZnIHw9IDB4MTsKLQkJCWRlYnVnZ2VyX3N0ZXAgPSBsaW51eF9yZWdzLT5pcGVuZDsKLQkJCWRlYnVnZ2VyX3N0ZXAgPj49IDY7Ci0JCQlmb3IgKGkgPSAxMDsgaSA+IDA7IGktLSwgZGVidWdnZXJfc3RlcCA+Pj0gMSkKLQkJCQlpZiAoZGVidWdnZXJfc3RlcCAmIDEpCisJCQlyZWdzLT5zeXNjZmcgfD0gMHgxOworCQkJa2dkYl9zaW5nbGVfc3RlcCA9IHJlZ3MtPmlwZW5kOworCQkJa2dkYl9zaW5nbGVfc3RlcCA+Pj0gNjsKKwkJCWZvciAoaSA9IDEwOyBpID4gMDsgaS0tLCBrZ2RiX3NpbmdsZV9zdGVwID4+PSAxKQorCQkJCWlmIChrZ2RiX3NpbmdsZV9zdGVwICYgMSkKIAkJCQkJYnJlYWs7CiAJCQkvKiBpIGluZGljYXRlIGV2ZW50IHByaW9yaXR5IG9mIGN1cnJlbnQgc3RvcHBlZCBpbnN0cnVjdGlvbgogCQkJICogdXNlciBzcGFjZSBpbnN0cnVjdGlvbiBpcyAwLCBJVkcxNSBpcyAxLCBJVlRNUiBpcyAxMC4KLQkJCSAqIGRlYnVnZ2VyX3N0ZXAgPiAwIG1lYW5zIGluIHNpbmdsZSBzdGVwIG1vZGUKKwkJCSAqIGtnZGJfc2luZ2xlX3N0ZXAgPiAwIG1lYW5zIGluIHNpbmdsZSBzdGVwIG1vZGUKIAkJCSAqLwotCQkJZGVidWdnZXJfc3RlcCA9IGkgKyAxOwotCQl9IGVsc2UgewotCQkJZGVidWdnZXJfc3RlcCA9IDA7CisJCQlrZ2RiX3NpbmdsZV9zdGVwID0gaSArIDE7CiAJCX0KIAotCQl3cF9zdGF0dXMgPSBiZmluX3JlYWRfV1BTVEFUKCk7Ci0JCUNTWU5DKCk7Ci0KLQkJaWYgKGV4Y2VwdGlvblZlY3RvciA9PSBWRUNfV0FUQ0gpIHsKLQkJCWZvciAoYnJlYWtubyA9IDA7IGJyZWFrbm8gPCA2OyArK2JyZWFrbm8pIHsKKwkJaWYgKHZlY3RvciA9PSBWRUNfV0FUQ0gpIHsKKwkJCXdwX3N0YXR1cyA9IGJmaW5fcmVhZF9XUFNUQVQoKTsKKwkJCWZvciAoYnJlYWtubyA9IDA7IGJyZWFrbm8gPCBIV19XQVRDSFBPSU5UX05VTTsgYnJlYWtubysrKSB7CiAJCQkJaWYgKHdwX3N0YXR1cyAmICgxIDw8IGJyZWFrbm8pKSB7CiAJCQkJCWJyZWFraW5mby0+c2tpcCA9IDE7CiAJCQkJCWJyZWFrOwogCQkJCX0KIAkJCX0KKwkJCWJmaW5fd3JpdGVfV1BTVEFUKDApOwogCQl9Ci0JCWtnZGJfY29ycmVjdF9od19icmVhaygpOwogCi0JCWJmaW5fd3JpdGVfV1BTVEFUKDApOworCQliZmluX2NvcnJlY3RfaHdfYnJlYWsoKTsKIAogCQlyZXR1cm4gMDsKIAl9CQkJLyogc3dpdGNoICovCkBAIC00MzEsNSArNDQ2LDM4NSBAQAogCiBzdHJ1Y3Qga2dkYl9hcmNoIGFyY2hfa2dkYl9vcHMgPSB7CiAJLmdkYl9icHRfaW5zdHIgPSB7MHhhMX0sCisjaWZkZWYgQ09ORklHX1NNUAorCS5mbGFncyA9IEtHREJfSFdfQlJFQUtQT0lOVHxLR0RCX1RIUl9QUk9DX1NXQVAsCisjZWxzZQogCS5mbGFncyA9IEtHREJfSFdfQlJFQUtQT0lOVCwKKyNlbmRpZgorCS5zZXRfaHdfYnJlYWtwb2ludCA9IGJmaW5fc2V0X2h3X2JyZWFrLAorCS5yZW1vdmVfaHdfYnJlYWtwb2ludCA9IGJmaW5fcmVtb3ZlX2h3X2JyZWFrLAorCS5yZW1vdmVfYWxsX2h3X2JyZWFrID0gYmZpbl9yZW1vdmVfYWxsX2h3X2JyZWFrLAorCS5jb3JyZWN0X2h3X2JyZWFrID0gYmZpbl9jb3JyZWN0X2h3X2JyZWFrLAogfTsKKworc3RhdGljIGludCBoZXgoY2hhciBjaCkKK3sKKwlpZiAoKGNoID49ICdhJykgJiYgKGNoIDw9ICdmJykpCisJCXJldHVybiBjaCAtICdhJyArIDEwOworCWlmICgoY2ggPj0gJzAnKSAmJiAoY2ggPD0gJzknKSkKKwkJcmV0dXJuIGNoIC0gJzAnOworCWlmICgoY2ggPj0gJ0EnKSAmJiAoY2ggPD0gJ0YnKSkKKwkJcmV0dXJuIGNoIC0gJ0EnICsgMTA7CisJcmV0dXJuIC0xOworfQorCitzdGF0aWMgaW50IHZhbGlkYXRlX21lbW9yeV9hY2Nlc3NfYWRkcmVzcyh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBzaXplKQoreworCWludCBjcHUgPSByYXdfc21wX3Byb2Nlc3Nvcl9pZCgpOworCisJaWYgKHNpemUgPCAwKQorCQlyZXR1cm4gRUZBVUxUOworCWlmIChhZGRyID49IDB4MTAwMCAmJiAoYWRkciArIHNpemUpIDw9IHBoeXNpY2FsX21lbV9lbmQpCisJCXJldHVybiAwOworCWlmIChhZGRyID49IFNZU01NUl9CQVNFKQorCQlyZXR1cm4gMDsKKwlpZiAoYWRkciA+PSBBU1lOQ19CQU5LMF9CQVNFCisJICAgJiYgYWRkciArIHNpemUgPD0gQVNZTkNfQkFOSzNfQkFTRSArIEFTWU5DX0JBTkszX1NJWkUpCisJCXJldHVybiAwOworCWlmIChjcHUgPT0gMCkgeworCQlpZiAoYWRkciA+PSBMMV9TQ1JBVENIX1NUQVJUCisJCSAgICYmIChhZGRyICsgc2l6ZSA8PSBMMV9TQ1JBVENIX1NUQVJUICsgTDFfU0NSQVRDSF9MRU5HVEgpKQorCQkJcmV0dXJuIDA7CisjaWYgTDFfQ09ERV9MRU5HVEggIT0gMAorCQlpZiAoYWRkciA+PSBMMV9DT0RFX1NUQVJUCisJCSAgICYmIChhZGRyICsgc2l6ZSA8PSBMMV9DT0RFX1NUQVJUICsgTDFfQ09ERV9MRU5HVEgpKQorCQkJcmV0dXJuIDA7CisjZW5kaWYKKyNpZiBMMV9EQVRBX0FfTEVOR1RIICE9IDAKKwkJaWYgKGFkZHIgPj0gTDFfREFUQV9BX1NUQVJUCisJCSAgICYmIChhZGRyICsgc2l6ZSA8PSBMMV9EQVRBX0FfU1RBUlQgKyBMMV9EQVRBX0FfTEVOR1RIKSkKKwkJCXJldHVybiAwOworI2VuZGlmCisjaWYgTDFfREFUQV9CX0xFTkdUSCAhPSAwCisJCWlmIChhZGRyID49IEwxX0RBVEFfQl9TVEFSVAorCQkgICAmJiAoYWRkciArIHNpemUgPD0gTDFfREFUQV9CX1NUQVJUICsgTDFfREFUQV9CX0xFTkdUSCkpCisJCQlyZXR1cm4gMDsKKyNlbmRpZgorI2lmZGVmIENPTkZJR19TTVAKKwl9IGVsc2UgaWYgKGNwdSA9PSAxKSB7CisJCWlmIChhZGRyID49IENPUkVCX0wxX1NDUkFUQ0hfU1RBUlQKKwkJICAgJiYgKGFkZHIgKyBzaXplIDw9IENPUkVCX0wxX1NDUkFUQ0hfU1RBUlQKKwkJICAgKyBMMV9TQ1JBVENIX0xFTkdUSCkpCisJCQlyZXR1cm4gMDsKKyMgaWYgTDFfQ09ERV9MRU5HVEggIT0gMAorCQlpZiAoYWRkciA+PSBDT1JFQl9MMV9DT0RFX1NUQVJUCisJCSAgICYmIChhZGRyICsgc2l6ZSA8PSBDT1JFQl9MMV9DT0RFX1NUQVJUICsgTDFfQ09ERV9MRU5HVEgpKQorCQkJcmV0dXJuIDA7CisjIGVuZGlmCisjIGlmIEwxX0RBVEFfQV9MRU5HVEggIT0gMAorCQlpZiAoYWRkciA+PSBDT1JFQl9MMV9EQVRBX0FfU1RBUlQKKwkJICAgJiYgKGFkZHIgKyBzaXplIDw9IENPUkVCX0wxX0RBVEFfQV9TVEFSVCArIEwxX0RBVEFfQV9MRU5HVEgpKQorCQkJcmV0dXJuIDA7CisjIGVuZGlmCisjIGlmIEwxX0RBVEFfQl9MRU5HVEggIT0gMAorCQlpZiAoYWRkciA+PSBDT1JFQl9MMV9EQVRBX0JfU1RBUlQKKwkJICAgJiYgKGFkZHIgKyBzaXplIDw9IENPUkVCX0wxX0RBVEFfQl9TVEFSVCArIEwxX0RBVEFfQl9MRU5HVEgpKQorCQkJcmV0dXJuIDA7CisjIGVuZGlmCisjZW5kaWYKKwl9CisKKyNpZiBMMl9MRU5HVEggIT0gMAorCWlmIChhZGRyID49IEwyX1NUQVJUCisJICAgJiYgYWRkciArIHNpemUgPD0gTDJfU1RBUlQgKyBMMl9MRU5HVEgpCisJCXJldHVybiAwOworI2VuZGlmCisKKwlyZXR1cm4gRUZBVUxUOworfQorCisvKgorICogQ29udmVydCB0aGUgbWVtb3J5IHBvaW50ZWQgdG8gYnkgbWVtIGludG8gaGV4LCBwbGFjaW5nIHJlc3VsdCBpbiBidWYuCisgKiBSZXR1cm4gYSBwb2ludGVyIHRvIHRoZSBsYXN0IGNoYXIgcHV0IGluIGJ1ZiAobnVsbCkuIE1heSByZXR1cm4gYW4gZXJyb3IuCisgKi8KK2ludCBrZ2RiX21lbTJoZXgoY2hhciAqbWVtLCBjaGFyICpidWYsIGludCBjb3VudCkKK3sKKwljaGFyICp0bXA7CisJaW50IGVyciA9IDA7CisJdW5zaWduZWQgY2hhciAqcGNoOworCXVuc2lnbmVkIHNob3J0IG1tcjE2OworCXVuc2lnbmVkIGxvbmcgbW1yMzI7CisJaW50IGNwdSA9IHJhd19zbXBfcHJvY2Vzc29yX2lkKCk7CisKKwlpZiAodmFsaWRhdGVfbWVtb3J5X2FjY2Vzc19hZGRyZXNzKCh1bnNpZ25lZCBsb25nKW1lbSwgY291bnQpKQorCQlyZXR1cm4gRUZBVUxUOworCisJLyoKKwkgKiBXZSB1c2UgdGhlIHVwcGVyIGhhbGYgb2YgYnVmIGFzIGFuIGludGVybWVkaWF0ZSBidWZmZXIgZm9yIHRoZQorCSAqIHJhdyBtZW1vcnkgY29weS4gIEhleCBjb252ZXJzaW9uIHdpbGwgd29yayBhZ2FpbnN0IHRoaXMgb25lLgorCSAqLworCXRtcCA9IGJ1ZiArIGNvdW50OworCisJaWYgKCh1bnNpZ25lZCBpbnQpbWVtID49IFNZU01NUl9CQVNFKSB7IC8qYWNjZXNzIE1NUiByZWdpc3RlcnMqLworCQlzd2l0Y2ggKGNvdW50KSB7CisJCWNhc2UgMjoKKwkJCWlmICgodW5zaWduZWQgaW50KW1lbSAlIDIgPT0gMCkgeworCQkJCW1tcjE2ID0gKih1bnNpZ25lZCBzaG9ydCAqKW1lbTsKKwkJCQlwY2ggPSAodW5zaWduZWQgY2hhciAqKSZtbXIxNjsKKwkJCQkqdG1wKysgPSAqcGNoKys7CisJCQkJKnRtcCsrID0gKnBjaCsrOworCQkJCXRtcCAtPSAyOworCQkJfSBlbHNlCisJCQkJZXJyID0gRUZBVUxUOworCQkJYnJlYWs7CisJCWNhc2UgNDoKKwkJCWlmICgodW5zaWduZWQgaW50KW1lbSAlIDQgPT0gMCkgeworCQkJCW1tcjMyID0gKih1bnNpZ25lZCBsb25nICopbWVtOworCQkJCXBjaCA9ICh1bnNpZ25lZCBjaGFyICopJm1tcjMyOworCQkJCSp0bXArKyA9ICpwY2grKzsKKwkJCQkqdG1wKysgPSAqcGNoKys7CisJCQkJKnRtcCsrID0gKnBjaCsrOworCQkJCSp0bXArKyA9ICpwY2grKzsKKwkJCQl0bXAgLT0gNDsKKwkJCX0gZWxzZQorCQkJCWVyciA9IEVGQVVMVDsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJZXJyID0gRUZBVUxUOworCQl9CisJfSBlbHNlIGlmIChjcHUgPT0gMCAmJiAodW5zaWduZWQgaW50KW1lbSA+PSBMMV9DT0RFX1NUQVJUICYmCisJCSh1bnNpZ25lZCBpbnQpKG1lbSArIGNvdW50KSA8PSBMMV9DT0RFX1NUQVJUICsgTDFfQ09ERV9MRU5HVEgKKyNpZmRlZiBDT05GSUdfU01QCisJCXx8IGNwdSA9PSAxICYmICh1bnNpZ25lZCBpbnQpbWVtID49IENPUkVCX0wxX0NPREVfU1RBUlQgJiYKKwkJKHVuc2lnbmVkIGludCkobWVtICsgY291bnQpIDw9CisJCUNPUkVCX0wxX0NPREVfU1RBUlQgKyBMMV9DT0RFX0xFTkdUSAorI2VuZGlmCisJCSkgeworCQkvKiBhY2Nlc3MgTDEgaW5zdHJ1Y3Rpb24gU1JBTSovCisJCWlmIChkbWFfbWVtY3B5KHRtcCwgbWVtLCBjb3VudCkgPT0gTlVMTCkKKwkJCWVyciA9IEVGQVVMVDsKKwl9IGVsc2UKKwkJZXJyID0gcHJvYmVfa2VybmVsX3JlYWQodG1wLCBtZW0sIGNvdW50KTsKKworCWlmICghZXJyKSB7CisJCXdoaWxlIChjb3VudCA+IDApIHsKKwkJCWJ1ZiA9IHBhY2tfaGV4X2J5dGUoYnVmLCAqdG1wKTsKKwkJCXRtcCsrOworCQkJY291bnQtLTsKKwkJfQorCisJCSpidWYgPSAwOworCX0KKworCXJldHVybiBlcnI7Cit9CisKKy8qCisgKiBDb3B5IHRoZSBiaW5hcnkgYXJyYXkgcG9pbnRlZCB0byBieSBidWYgaW50byBtZW0uICBGaXggJCwgIywgYW5kCisgKiAweDdkIGVzY2FwZWQgd2l0aCAweDdkLiAgUmV0dXJuIGEgcG9pbnRlciB0byB0aGUgY2hhcmFjdGVyIGFmdGVyCisgKiB0aGUgbGFzdCBieXRlIHdyaXR0ZW4uCisgKi8KK2ludCBrZ2RiX2ViaW4ybWVtKGNoYXIgKmJ1ZiwgY2hhciAqbWVtLCBpbnQgY291bnQpCit7CisJY2hhciAqdG1wX29sZDsKKwljaGFyICp0bXBfbmV3OworCXVuc2lnbmVkIHNob3J0ICptbXIxNjsKKwl1bnNpZ25lZCBsb25nICptbXIzMjsKKwlpbnQgZXJyID0gMDsKKwlpbnQgc2l6ZSA9IDA7CisJaW50IGNwdSA9IHJhd19zbXBfcHJvY2Vzc29yX2lkKCk7CisKKwl0bXBfb2xkID0gdG1wX25ldyA9IGJ1ZjsKKworCXdoaWxlIChjb3VudC0tID4gMCkgeworCQlpZiAoKnRtcF9vbGQgPT0gMHg3ZCkKKwkJCSp0bXBfbmV3ID0gKigrK3RtcF9vbGQpIF4gMHgyMDsKKwkJZWxzZQorCQkJKnRtcF9uZXcgPSAqdG1wX29sZDsKKwkJdG1wX25ldysrOworCQl0bXBfb2xkKys7CisJCXNpemUrKzsKKwl9CisKKwlpZiAodmFsaWRhdGVfbWVtb3J5X2FjY2Vzc19hZGRyZXNzKCh1bnNpZ25lZCBsb25nKW1lbSwgc2l6ZSkpCisJCXJldHVybiBFRkFVTFQ7CisKKwlpZiAoKHVuc2lnbmVkIGludCltZW0gPj0gU1lTTU1SX0JBU0UpIHsgLyphY2Nlc3MgTU1SIHJlZ2lzdGVycyovCisJCXN3aXRjaCAoc2l6ZSkgeworCQljYXNlIDI6CisJCQlpZiAoKHVuc2lnbmVkIGludCltZW0gJSAyID09IDApIHsKKwkJCQltbXIxNiA9ICh1bnNpZ25lZCBzaG9ydCAqKWJ1ZjsKKwkJCQkqKHVuc2lnbmVkIHNob3J0ICopbWVtID0gKm1tcjE2OworCQkJfSBlbHNlCisJCQkJcmV0dXJuIEVGQVVMVDsKKwkJCWJyZWFrOworCQljYXNlIDQ6CisJCQlpZiAoKHVuc2lnbmVkIGludCltZW0gJSA0ID09IDApIHsKKwkJCQltbXIzMiA9ICh1bnNpZ25lZCBsb25nICopYnVmOworCQkJCSoodW5zaWduZWQgbG9uZyAqKW1lbSA9ICptbXIzMjsKKwkJCX0gZWxzZQorCQkJCXJldHVybiBFRkFVTFQ7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXJldHVybiBFRkFVTFQ7CisJCX0KKwl9IGVsc2UgaWYgKGNwdSA9PSAwICYmICh1bnNpZ25lZCBpbnQpbWVtID49IEwxX0NPREVfU1RBUlQgJiYKKwkJKHVuc2lnbmVkIGludCkobWVtICsgY291bnQpIDwgTDFfQ09ERV9TVEFSVCArIEwxX0NPREVfTEVOR1RICisjaWZkZWYgQ09ORklHX1NNUAorCQl8fCBjcHUgPT0gMSAmJiAodW5zaWduZWQgaW50KW1lbSA+PSBDT1JFQl9MMV9DT0RFX1NUQVJUICYmCisJCSh1bnNpZ25lZCBpbnQpKG1lbSArIGNvdW50KSA8PQorCQlDT1JFQl9MMV9DT0RFX1NUQVJUICsgTDFfQ09ERV9MRU5HVEgKKyNlbmRpZgorCQkpIHsKKwkJLyogYWNjZXNzIEwxIGluc3RydWN0aW9uIFNSQU0gKi8KKwkJaWYgKGRtYV9tZW1jcHkobWVtLCBidWYsIHNpemUpID09IE5VTEwpCisJCQllcnIgPSBFRkFVTFQ7CisJfSBlbHNlCisJCWVyciA9IHByb2JlX2tlcm5lbF93cml0ZShtZW0sIGJ1Ziwgc2l6ZSk7CisKKwlyZXR1cm4gZXJyOworfQorCisvKgorICogQ29udmVydCB0aGUgaGV4IGFycmF5IHBvaW50ZWQgdG8gYnkgYnVmIGludG8gYmluYXJ5IHRvIGJlIHBsYWNlZCBpbiBtZW0uCisgKiBSZXR1cm4gYSBwb2ludGVyIHRvIHRoZSBjaGFyYWN0ZXIgQUZURVIgdGhlIGxhc3QgYnl0ZSB3cml0dGVuLgorICogTWF5IHJldHVybiBhbiBlcnJvci4KKyAqLworaW50IGtnZGJfaGV4Mm1lbShjaGFyICpidWYsIGNoYXIgKm1lbSwgaW50IGNvdW50KQoreworCWNoYXIgKnRtcF9yYXc7CisJY2hhciAqdG1wX2hleDsKKwl1bnNpZ25lZCBzaG9ydCAqbW1yMTY7CisJdW5zaWduZWQgbG9uZyAqbW1yMzI7CisJaW50IGNwdSA9IHJhd19zbXBfcHJvY2Vzc29yX2lkKCk7CisKKwlpZiAodmFsaWRhdGVfbWVtb3J5X2FjY2Vzc19hZGRyZXNzKCh1bnNpZ25lZCBsb25nKW1lbSwgY291bnQpKQorCQlyZXR1cm4gRUZBVUxUOworCisJLyoKKwkgKiBXZSB1c2UgdGhlIHVwcGVyIGhhbGYgb2YgYnVmIGFzIGFuIGludGVybWVkaWF0ZSBidWZmZXIgZm9yIHRoZQorCSAqIHJhdyBtZW1vcnkgdGhhdCBpcyBjb252ZXJ0ZWQgZnJvbSBoZXguCisJICovCisJdG1wX3JhdyA9IGJ1ZiArIGNvdW50ICogMjsKKworCXRtcF9oZXggPSB0bXBfcmF3IC0gMTsKKwl3aGlsZSAodG1wX2hleCA+PSBidWYpIHsKKwkJdG1wX3Jhdy0tOworCQkqdG1wX3JhdyA9IGhleCgqdG1wX2hleC0tKTsKKwkJKnRtcF9yYXcgfD0gaGV4KCp0bXBfaGV4LS0pIDw8IDQ7CisJfQorCisJaWYgKCh1bnNpZ25lZCBpbnQpbWVtID49IFNZU01NUl9CQVNFKSB7IC8qYWNjZXNzIE1NUiByZWdpc3RlcnMqLworCQlzd2l0Y2ggKGNvdW50KSB7CisJCWNhc2UgMjoKKwkJCWlmICgodW5zaWduZWQgaW50KW1lbSAlIDIgPT0gMCkgeworCQkJCW1tcjE2ID0gKHVuc2lnbmVkIHNob3J0ICopdG1wX3JhdzsKKwkJCQkqKHVuc2lnbmVkIHNob3J0ICopbWVtID0gKm1tcjE2OworCQkJfSBlbHNlCisJCQkJcmV0dXJuIEVGQVVMVDsKKwkJCWJyZWFrOworCQljYXNlIDQ6CisJCQlpZiAoKHVuc2lnbmVkIGludCltZW0gJSA0ID09IDApIHsKKwkJCQltbXIzMiA9ICh1bnNpZ25lZCBsb25nICopdG1wX3JhdzsKKwkJCQkqKHVuc2lnbmVkIGxvbmcgKiltZW0gPSAqbW1yMzI7CisJCQl9IGVsc2UKKwkJCQlyZXR1cm4gRUZBVUxUOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlyZXR1cm4gRUZBVUxUOworCQl9CisJfSBlbHNlIGlmIChjcHUgPT0gMCAmJiAodW5zaWduZWQgaW50KW1lbSA+PSBMMV9DT0RFX1NUQVJUICYmCisJCSh1bnNpZ25lZCBpbnQpKG1lbSArIGNvdW50KSA8PSBMMV9DT0RFX1NUQVJUICsgTDFfQ09ERV9MRU5HVEgKKyNpZmRlZiBDT05GSUdfU01QCisJCXx8IGNwdSA9PSAxICYmICh1bnNpZ25lZCBpbnQpbWVtID49IENPUkVCX0wxX0NPREVfU1RBUlQgJiYKKwkJKHVuc2lnbmVkIGludCkobWVtICsgY291bnQpIDw9CisJCUNPUkVCX0wxX0NPREVfU1RBUlQgKyBMMV9DT0RFX0xFTkdUSAorI2VuZGlmCisJCSkgeworCQkvKiBhY2Nlc3MgTDEgaW5zdHJ1Y3Rpb24gU1JBTSAqLworCQlpZiAoZG1hX21lbWNweShtZW0sIHRtcF9yYXcsIGNvdW50KSA9PSBOVUxMKQorCQkJcmV0dXJuIEVGQVVMVDsKKwl9IGVsc2UKKwkJcmV0dXJuIHByb2JlX2tlcm5lbF93cml0ZShtZW0sIHRtcF9yYXcsIGNvdW50KTsKKwlyZXR1cm4gMDsKK30KKworaW50IGtnZGJfdmFsaWRhdGVfYnJlYWtfYWRkcmVzcyh1bnNpZ25lZCBsb25nIGFkZHIpCit7CisJaW50IGNwdSA9IHJhd19zbXBfcHJvY2Vzc29yX2lkKCk7CisKKwlpZiAoYWRkciA+PSAweDEwMDAgJiYgKGFkZHIgKyBCUkVBS19JTlNUUl9TSVpFKSA8PSBwaHlzaWNhbF9tZW1fZW5kKQorCQlyZXR1cm4gMDsKKwlpZiAoYWRkciA+PSBBU1lOQ19CQU5LMF9CQVNFCisJICAgJiYgYWRkciArIEJSRUFLX0lOU1RSX1NJWkUgPD0gQVNZTkNfQkFOSzNfQkFTRSArIEFTWU5DX0JBTkszX0JBU0UpCisJCXJldHVybiAwOworI2lmIEwxX0NPREVfTEVOR1RIICE9IDAKKwlpZiAoY3B1ID09IDAgJiYgYWRkciA+PSBMMV9DT0RFX1NUQVJUCisJICAgJiYgYWRkciArIEJSRUFLX0lOU1RSX1NJWkUgPD0gTDFfQ09ERV9TVEFSVCArIEwxX0NPREVfTEVOR1RIKQorCQlyZXR1cm4gMDsKKyMgaWZkZWYgQ09ORklHX1NNUAorCWVsc2UgaWYgKGNwdSA9PSAxICYmIGFkZHIgPj0gQ09SRUJfTDFfQ09ERV9TVEFSVAorCSAgICYmIGFkZHIgKyBCUkVBS19JTlNUUl9TSVpFIDw9IENPUkVCX0wxX0NPREVfU1RBUlQgKyBMMV9DT0RFX0xFTkdUSCkKKwkJcmV0dXJuIDA7CisjIGVuZGlmCisjZW5kaWYKKyNpZiBMMl9MRU5HVEggIT0gMAorCWlmIChhZGRyID49IEwyX1NUQVJUCisJICAgJiYgYWRkciArIEJSRUFLX0lOU1RSX1NJWkUgPD0gTDJfU1RBUlQgKyBMMl9MRU5HVEgpCisJCXJldHVybiAwOworI2VuZGlmCisKKwlyZXR1cm4gRUZBVUxUOworfQorCitpbnQga2dkYl9hcmNoX3NldF9icmVha3BvaW50KHVuc2lnbmVkIGxvbmcgYWRkciwgY2hhciAqc2F2ZWRfaW5zdHIpCit7CisJaW50IGVycjsKKwlpbnQgY3B1ID0gcmF3X3NtcF9wcm9jZXNzb3JfaWQoKTsKKworCWlmICgoY3B1ID09IDAgJiYgKHVuc2lnbmVkIGludClhZGRyID49IEwxX0NPREVfU1RBUlQKKwkJJiYgKHVuc2lnbmVkIGludCkoYWRkciArIEJSRUFLX0lOU1RSX1NJWkUpCisJCTwgTDFfQ09ERV9TVEFSVCArIEwxX0NPREVfTEVOR1RIKQorI2lmZGVmIENPTkZJR19TTVAKKwkJfHwgKGNwdSA9PSAxICYmICh1bnNpZ25lZCBpbnQpYWRkciA+PSBDT1JFQl9MMV9DT0RFX1NUQVJUCisJCSYmICh1bnNpZ25lZCBpbnQpKGFkZHIgKyBCUkVBS19JTlNUUl9TSVpFKQorCQk8IENPUkVCX0wxX0NPREVfU1RBUlQgKyBMMV9DT0RFX0xFTkdUSCkKKyNlbmRpZgorCQkpIHsKKwkJLyogYWNjZXNzIEwxIGluc3RydWN0aW9uIFNSQU0gKi8KKwkJaWYgKGRtYV9tZW1jcHkoc2F2ZWRfaW5zdHIsICh2b2lkICopYWRkciwgQlJFQUtfSU5TVFJfU0laRSkKKwkJCT09IE5VTEwpCisJCQlyZXR1cm4gLUVGQVVMVDsKKworCQlpZiAoZG1hX21lbWNweSgodm9pZCAqKWFkZHIsIGFyY2hfa2dkYl9vcHMuZ2RiX2JwdF9pbnN0ciwKKwkJCUJSRUFLX0lOU1RSX1NJWkUpID09IE5VTEwpCisJCQlyZXR1cm4gLUVGQVVMVDsKKworCQlyZXR1cm4gMDsKKwl9IGVsc2UgeworCQllcnIgPSBwcm9iZV9rZXJuZWxfcmVhZChzYXZlZF9pbnN0ciwgKGNoYXIgKilhZGRyLAorCQkJQlJFQUtfSU5TVFJfU0laRSk7CisJCWlmIChlcnIpCisJCQlyZXR1cm4gZXJyOworCisJCXJldHVybiBwcm9iZV9rZXJuZWxfd3JpdGUoKGNoYXIgKilhZGRyLAorCQkJYXJjaF9rZ2RiX29wcy5nZGJfYnB0X2luc3RyLCBCUkVBS19JTlNUUl9TSVpFKTsKKwl9Cit9CisKK2ludCBrZ2RiX2FyY2hfcmVtb3ZlX2JyZWFrcG9pbnQodW5zaWduZWQgbG9uZyBhZGRyLCBjaGFyICpidW5kbGUpCit7CisJaWYgKCh1bnNpZ25lZCBpbnQpYWRkciA+PSBMMV9DT0RFX1NUQVJUICYmCisJCSh1bnNpZ25lZCBpbnQpKGFkZHIgKyBCUkVBS19JTlNUUl9TSVpFKSA8CisJCQlMMV9DT0RFX1NUQVJUICsgTDFfQ09ERV9MRU5HVEgpIHsKKwkJLyogYWNjZXNzIEwxIGluc3RydWN0aW9uIFNSQU0gKi8KKwkJaWYgKGRtYV9tZW1jcHkoKHZvaWQgKilhZGRyLCBidW5kbGUsIEJSRUFLX0lOU1RSX1NJWkUpID09IE5VTEwpCisJCQlyZXR1cm4gLUVGQVVMVDsKKworCQlyZXR1cm4gMDsKKwl9IGVsc2UKKwkJcmV0dXJuIHByb2JlX2tlcm5lbF93cml0ZSgoY2hhciAqKWFkZHIsCisJCQkJKGNoYXIgKilidW5kbGUsIEJSRUFLX0lOU1RSX1NJWkUpOworfQorCitpbnQga2dkYl9hcmNoX2luaXQodm9pZCkKK3sKKwlrZ2RiX3NpbmdsZV9zdGVwID0gMDsKKworCWJmaW5fcmVtb3ZlX2FsbF9od19icmVhaygpOworCXJldHVybiAwOworfQorCit2b2lkIGtnZGJfYXJjaF9leGl0KHZvaWQpCit7Cit9CmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2tlcm5lbC9wdHJhY2UuYyBiL2FyY2gvYmxhY2tmaW4va2VybmVsL3B0cmFjZS5jCmluZGV4IGJmMWE1MWQuLjE0MGJmMDAgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4va2VybmVsL3B0cmFjZS5jCisrKyBiL2FyY2gvYmxhY2tmaW4va2VybmVsL3B0cmFjZS5jCkBAIC00Niw3ICs0Niw2IEBACiAjaW5jbHVkZSA8YXNtL2RtYS5oPgogI2luY2x1ZGUgPGFzbS9maXhlZF9jb2RlLmg+CiAKLSNkZWZpbmUgTUFYX1NIQVJFRF9MSUJTIDMKICNkZWZpbmUgVEVYVF9PRkZTRVQgMAogLyoKICAqIGRvZXMgbm90IHlldCBjYXRjaCBzaWduYWxzIHNlbnQgd2hlbiB0aGUgY2hpbGQgZGllcy4KQEAgLTE2MSwyMSArMTYwLDMyIEBACiAJc3RydWN0IHZtX2xpc3Rfc3RydWN0ICp2bWw7CiAJc3RydWN0IHNyYW1fbGlzdF9zdHJ1Y3QgKnNyYW1sOwogCisJLyogb3ZlcmZsb3cgKi8KKwlpZiAoc3RhcnQgKyBsZW4gPCBzdGFydCkKKwkJcmV0dXJuIC1FSU87CisKIAlmb3IgKHZtbCA9IGNoaWxkLT5tbS0+Y29udGV4dC52bWxpc3Q7IHZtbDsgdm1sID0gdm1sLT5uZXh0KQotCQlpZiAoc3RhcnQgPj0gdm1sLT52bWEtPnZtX3N0YXJ0ICYmIHN0YXJ0ICsgbGVuIDw9IHZtbC0+dm1hLT52bV9lbmQpCisJCWlmIChzdGFydCA+PSB2bWwtPnZtYS0+dm1fc3RhcnQgJiYgc3RhcnQgKyBsZW4gPCB2bWwtPnZtYS0+dm1fZW5kKQogCQkJcmV0dXJuIDA7CiAKIAlmb3IgKHNyYW1sID0gY2hpbGQtPm1tLT5jb250ZXh0LnNyYW1fbGlzdDsgc3JhbWw7IHNyYW1sID0gc3JhbWwtPm5leHQpCiAJCWlmIChzdGFydCA+PSAodW5zaWduZWQgbG9uZylzcmFtbC0+YWRkcgotCQkgICAgJiYgc3RhcnQgKyBsZW4gPD0gKHVuc2lnbmVkIGxvbmcpc3JhbWwtPmFkZHIgKyBzcmFtbC0+bGVuZ3RoKQorCQkgICAgJiYgc3RhcnQgKyBsZW4gPCAodW5zaWduZWQgbG9uZylzcmFtbC0+YWRkciArIHNyYW1sLT5sZW5ndGgpCiAJCQlyZXR1cm4gMDsKIAotCWlmIChzdGFydCA+PSBGSVhFRF9DT0RFX1NUQVJUICYmIHN0YXJ0ICsgbGVuIDw9IEZJWEVEX0NPREVfRU5EKQorCWlmIChzdGFydCA+PSBGSVhFRF9DT0RFX1NUQVJUICYmIHN0YXJ0ICsgbGVuIDwgRklYRURfQ09ERV9FTkQpCiAJCXJldHVybiAwOwogCiAJcmV0dXJuIC1FSU87CiB9CiAKK3ZvaWQgcHRyYWNlX2VuYWJsZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKmNoaWxkKQoreworCXVuc2lnbmVkIGxvbmcgdG1wOworCXRtcCA9IGdldF9yZWcoY2hpbGQsIFBUX1NZU0NGRykgfCAoVFJBQ0VfQklUUyk7CisJcHV0X3JlZyhjaGlsZCwgUFRfU1lTQ0ZHLCB0bXApOworfQorCiAvKgogICogQ2FsbGVkIGJ5IGtlcm5lbC9wdHJhY2UuYyB3aGVuIGRldGFjaGluZy4uCiAgKgpAQCAtMTkyLDE0ICsyMDIsMTIgQEAKIGxvbmcgYXJjaF9wdHJhY2Uoc3RydWN0IHRhc2tfc3RydWN0ICpjaGlsZCwgbG9uZyByZXF1ZXN0LCBsb25nIGFkZHIsIGxvbmcgZGF0YSkKIHsKIAlpbnQgcmV0OwotCWludCBhZGQgPSAwOwogCXVuc2lnbmVkIGxvbmcgX191c2VyICpkYXRhcCA9ICh1bnNpZ25lZCBsb25nIF9fdXNlciAqKWRhdGE7CiAKIAlzd2l0Y2ggKHJlcXVlc3QpIHsKIAkJLyogd2hlbiBJIGFuZCBEIHNwYWNlIGFyZSBzZXBhcmF0ZSwgdGhlc2Ugd2lsbCBuZWVkIHRvIGJlIGZpeGVkLiAqLwogCWNhc2UgUFRSQUNFX1BFRUtEQVRBOgogCQlwcl9kZWJ1ZygicHRyYWNlOiBQRUVLREFUQVxuIik7Ci0JCWFkZCA9IE1BWF9TSEFSRURfTElCUyAqIDQ7CS8qIHNwYWNlIGJldHdlZW4gdGV4dCBhbmQgZGF0YSAqLwogCQkvKiBmYWxsIHRocm91Z2ggKi8KIAljYXNlIFBUUkFDRV9QRUVLVEVYVDoJLyogcmVhZCB3b3JkIGF0IGxvY2F0aW9uIGFkZHIuICovCiAJCXsKQEAgLTIwNyw0MCArMjE1LDM1IEBACiAJCQlpbnQgY29waWVkOwogCiAJCQlyZXQgPSAtRUlPOwotCQkJcHJfZGVidWcoInB0cmFjZTogUEVFS1RFWFQgYXQgYWRkciAweCUwOGx4ICsgYWRkICVkICVsZFxuIiwgYWRkciwgYWRkLAotCQkJICAgICAgICAgc2l6ZW9mKGRhdGEpKTsKLQkJCWlmIChpc191c2VyX2FkZHJfdmFsaWQoY2hpbGQsIGFkZHIgKyBhZGQsIHNpemVvZih0bXApKSA8IDApCisJCQlwcl9kZWJ1ZygicHRyYWNlOiBQRUVLVEVYVCBhdCBhZGRyIDB4JTA4bHggKyAlbGRcbiIsIGFkZHIsIHNpemVvZihkYXRhKSk7CisJCQlpZiAoaXNfdXNlcl9hZGRyX3ZhbGlkKGNoaWxkLCBhZGRyLCBzaXplb2YodG1wKSkgPCAwKQogCQkJCWJyZWFrOwogCQkJcHJfZGVidWcoInB0cmFjZTogdXNlciBhZGRyZXNzIGlzIHZhbGlkXG4iKTsKIAotI2lmIEwxX0NPREVfTEVOR1RIICE9IDAKLQkJCWlmIChhZGRyICsgYWRkID49IEwxX0NPREVfU1RBUlQKLQkJCSAgICAmJiBhZGRyICsgYWRkICsgc2l6ZW9mKHRtcCkgPD0gTDFfQ09ERV9TVEFSVCArIEwxX0NPREVfTEVOR1RIKSB7Ci0JCQkJc2FmZV9kbWFfbWVtY3B5ICgmdG1wLCAoY29uc3Qgdm9pZCAqKShhZGRyICsgYWRkKSwgc2l6ZW9mKHRtcCkpOworCQkJaWYgKEwxX0NPREVfTEVOR1RIICE9IDAgJiYgYWRkciA+PSBMMV9DT0RFX1NUQVJUCisJCQkgICAgJiYgYWRkciArIHNpemVvZih0bXApIDw9IEwxX0NPREVfU1RBUlQgKyBMMV9DT0RFX0xFTkdUSCkgeworCQkJCXNhZmVfZG1hX21lbWNweSAoJnRtcCwgKGNvbnN0IHZvaWQgKikoYWRkciksIHNpemVvZih0bXApKTsKIAkJCQljb3BpZWQgPSBzaXplb2YodG1wKTsKLQkJCX0gZWxzZQotI2VuZGlmCi0jaWYgTDFfREFUQV9BX0xFTkdUSCAhPSAwCi0JCQlpZiAoYWRkciArIGFkZCA+PSBMMV9EQVRBX0FfU1RBUlQKLQkJCSAgICAmJiBhZGRyICsgYWRkICsgc2l6ZW9mKHRtcCkgPD0gTDFfREFUQV9BX1NUQVJUICsgTDFfREFUQV9BX0xFTkdUSCkgewotCQkJCW1lbWNweSgmdG1wLCAoY29uc3Qgdm9pZCAqKShhZGRyICsgYWRkKSwgc2l6ZW9mKHRtcCkpOworCisJCQl9IGVsc2UgaWYgKEwxX0RBVEFfQV9MRU5HVEggIT0gMCAmJiBhZGRyID49IEwxX0RBVEFfQV9TVEFSVAorCQkJICAgICYmIGFkZHIgKyBzaXplb2YodG1wKSA8PSBMMV9EQVRBX0FfU1RBUlQgKyBMMV9EQVRBX0FfTEVOR1RIKSB7CisJCQkJbWVtY3B5KCZ0bXAsIChjb25zdCB2b2lkICopKGFkZHIpLCBzaXplb2YodG1wKSk7CiAJCQkJY29waWVkID0gc2l6ZW9mKHRtcCk7Ci0JCQl9IGVsc2UKLSNlbmRpZgotI2lmIEwxX0RBVEFfQl9MRU5HVEggIT0gMAotCQkJaWYgKGFkZHIgKyBhZGQgPj0gTDFfREFUQV9CX1NUQVJUCi0JCQkgICAgJiYgYWRkciArIGFkZCArIHNpemVvZih0bXApIDw9IEwxX0RBVEFfQl9TVEFSVCArIEwxX0RBVEFfQl9MRU5HVEgpIHsKLQkJCQltZW1jcHkoJnRtcCwgKGNvbnN0IHZvaWQgKikoYWRkciArIGFkZCksIHNpemVvZih0bXApKTsKKworCQkJfSBlbHNlIGlmIChMMV9EQVRBX0JfTEVOR1RIICE9IDAgJiYgYWRkciA+PSBMMV9EQVRBX0JfU1RBUlQKKwkJCSAgICAmJiBhZGRyICsgc2l6ZW9mKHRtcCkgPD0gTDFfREFUQV9CX1NUQVJUICsgTDFfREFUQV9CX0xFTkdUSCkgeworCQkJCW1lbWNweSgmdG1wLCAoY29uc3Qgdm9pZCAqKShhZGRyKSwgc2l6ZW9mKHRtcCkpOwogCQkJCWNvcGllZCA9IHNpemVvZih0bXApOwotCQkJfSBlbHNlCi0jZW5kaWYKLQkJCWlmIChhZGRyICsgYWRkID49IEZJWEVEX0NPREVfU1RBUlQKLQkJCSAgICAmJiBhZGRyICsgYWRkICsgc2l6ZW9mKHRtcCkgPD0gRklYRURfQ09ERV9FTkQpIHsKLQkJCQltZW1jcHkoJnRtcCwgKGNvbnN0IHZvaWQgKikoYWRkciArIGFkZCksIHNpemVvZih0bXApKTsKKworCQkJfSBlbHNlIGlmIChhZGRyID49IEZJWEVEX0NPREVfU1RBUlQKKwkJCSAgICAmJiBhZGRyICsgc2l6ZW9mKHRtcCkgPD0gRklYRURfQ09ERV9FTkQpIHsKKwkJCQltZW1jcHkoJnRtcCwgKGNvbnN0IHZvaWQgKikoYWRkciksIHNpemVvZih0bXApKTsKIAkJCQljb3BpZWQgPSBzaXplb2YodG1wKTsKKwogCQkJfSBlbHNlCi0JCQkJY29waWVkID0gYWNjZXNzX3Byb2Nlc3Nfdm0oY2hpbGQsIGFkZHIgKyBhZGQsICZ0bXAsCisJCQkJY29waWVkID0gYWNjZXNzX3Byb2Nlc3Nfdm0oY2hpbGQsIGFkZHIsICZ0bXAsCiAJCQkJCQkJICAgc2l6ZW9mKHRtcCksIDApOworCiAJCQlwcl9kZWJ1ZygicHRyYWNlOiBjb3BpZWQgc2l6ZSAlZCBbMHglMDhseF1cbiIsIGNvcGllZCwgdG1wKTsKIAkJCWlmIChjb3BpZWQgIT0gc2l6ZW9mKHRtcCkpCiAJCQkJYnJlYWs7CkBAIC0yODQsNDcgKzI4Nyw0MyBAQAogCiAJCS8qIHdoZW4gSSBhbmQgRCBzcGFjZSBhcmUgc2VwYXJhdGUsIHRoaXMgd2lsbCBoYXZlIHRvIGJlIGZpeGVkLiAqLwogCWNhc2UgUFRSQUNFX1BPS0VEQVRBOgotCQlwcmludGsoS0VSTl9OT1RJQ0UgInB0cmFjZTogUFRSQUNFX1BFRUtEQVRBXG4iKTsKKwkJcHJfZGVidWcoInB0cmFjZTogUFRSQUNFX1BFRUtEQVRBXG4iKTsKIAkJLyogZmFsbCB0aHJvdWdoICovCiAJY2FzZSBQVFJBQ0VfUE9LRVRFWFQ6CS8qIHdyaXRlIHRoZSB3b3JkIGF0IGxvY2F0aW9uIGFkZHIuICovCiAJCXsKIAkJCWludCBjb3BpZWQ7CiAKIAkJCXJldCA9IC1FSU87Ci0JCQlwcl9kZWJ1ZygicHRyYWNlOiBQT0tFVEVYVCBhdCBhZGRyIDB4JTA4bHggKyBhZGQgJWQgJWxkIGJ5dGVzICVseFxuIiwKLQkJCSAgICAgICAgIGFkZHIsIGFkZCwgc2l6ZW9mKGRhdGEpLCBkYXRhKTsKLQkJCWlmIChpc191c2VyX2FkZHJfdmFsaWQoY2hpbGQsIGFkZHIgKyBhZGQsIHNpemVvZihkYXRhKSkgPCAwKQorCQkJcHJfZGVidWcoInB0cmFjZTogUE9LRVRFWFQgYXQgYWRkciAweCUwOGx4ICsgJWxkIGJ5dGVzICVseFxuIiwKKwkJCSAgICAgICAgIGFkZHIsIHNpemVvZihkYXRhKSwgZGF0YSk7CisJCQlpZiAoaXNfdXNlcl9hZGRyX3ZhbGlkKGNoaWxkLCBhZGRyLCBzaXplb2YoZGF0YSkpIDwgMCkKIAkJCQlicmVhazsKIAkJCXByX2RlYnVnKCJwdHJhY2U6IHVzZXIgYWRkcmVzcyBpcyB2YWxpZFxuIik7CiAKLSNpZiBMMV9DT0RFX0xFTkdUSCAhPSAwCi0JCQlpZiAoYWRkciArIGFkZCA+PSBMMV9DT0RFX1NUQVJUCi0JCQkgICAgJiYgYWRkciArIGFkZCArIHNpemVvZihkYXRhKSA8PSBMMV9DT0RFX1NUQVJUICsgTDFfQ09ERV9MRU5HVEgpIHsKLQkJCQlzYWZlX2RtYV9tZW1jcHkgKCh2b2lkICopKGFkZHIgKyBhZGQpLCAmZGF0YSwgc2l6ZW9mKGRhdGEpKTsKKwkJCWlmIChMMV9DT0RFX0xFTkdUSCAhPSAwICYmIGFkZHIgPj0gTDFfQ09ERV9TVEFSVAorCQkJICAgICYmIGFkZHIgKyBzaXplb2YoZGF0YSkgPD0gTDFfQ09ERV9TVEFSVCArIEwxX0NPREVfTEVOR1RIKSB7CisJCQkJc2FmZV9kbWFfbWVtY3B5ICgodm9pZCAqKShhZGRyKSwgJmRhdGEsIHNpemVvZihkYXRhKSk7CiAJCQkJY29waWVkID0gc2l6ZW9mKGRhdGEpOwotCQkJfSBlbHNlCi0jZW5kaWYKLSNpZiBMMV9EQVRBX0FfTEVOR1RIICE9IDAKLQkJCWlmIChhZGRyICsgYWRkID49IEwxX0RBVEFfQV9TVEFSVAotCQkJICAgICYmIGFkZHIgKyBhZGQgKyBzaXplb2YoZGF0YSkgPD0gTDFfREFUQV9BX1NUQVJUICsgTDFfREFUQV9BX0xFTkdUSCkgewotCQkJCW1lbWNweSgodm9pZCAqKShhZGRyICsgYWRkKSwgJmRhdGEsIHNpemVvZihkYXRhKSk7CisKKwkJCX0gZWxzZSBpZiAoTDFfREFUQV9BX0xFTkdUSCAhPSAwICYmIGFkZHIgPj0gTDFfREFUQV9BX1NUQVJUCisJCQkgICAgJiYgYWRkciArIHNpemVvZihkYXRhKSA8PSBMMV9EQVRBX0FfU1RBUlQgKyBMMV9EQVRBX0FfTEVOR1RIKSB7CisJCQkJbWVtY3B5KCh2b2lkICopKGFkZHIpLCAmZGF0YSwgc2l6ZW9mKGRhdGEpKTsKIAkJCQljb3BpZWQgPSBzaXplb2YoZGF0YSk7Ci0JCQl9IGVsc2UKLSNlbmRpZgotI2lmIEwxX0RBVEFfQl9MRU5HVEggIT0gMAotCQkJaWYgKGFkZHIgKyBhZGQgPj0gTDFfREFUQV9CX1NUQVJUCi0JCQkgICAgJiYgYWRkciArIGFkZCArIHNpemVvZihkYXRhKSA8PSBMMV9EQVRBX0JfU1RBUlQgKyBMMV9EQVRBX0JfTEVOR1RIKSB7Ci0JCQkJbWVtY3B5KCh2b2lkICopKGFkZHIgKyBhZGQpLCAmZGF0YSwgc2l6ZW9mKGRhdGEpKTsKKworCQkJfSBlbHNlIGlmIChMMV9EQVRBX0JfTEVOR1RIICE9IDAgJiYgYWRkciA+PSBMMV9EQVRBX0JfU1RBUlQKKwkJCSAgICAmJiBhZGRyICsgc2l6ZW9mKGRhdGEpIDw9IEwxX0RBVEFfQl9TVEFSVCArIEwxX0RBVEFfQl9MRU5HVEgpIHsKKwkJCQltZW1jcHkoKHZvaWQgKikoYWRkciksICZkYXRhLCBzaXplb2YoZGF0YSkpOwogCQkJCWNvcGllZCA9IHNpemVvZihkYXRhKTsKLQkJCX0gZWxzZQotI2VuZGlmCi0JCQlpZiAoYWRkciArIGFkZCA+PSBGSVhFRF9DT0RFX1NUQVJUCi0JCQkgICAgJiYgYWRkciArIGFkZCArIHNpemVvZihkYXRhKSA8PSBGSVhFRF9DT0RFX0VORCkgewotCQkJCW1lbWNweSgodm9pZCAqKShhZGRyICsgYWRkKSwgJmRhdGEsIHNpemVvZihkYXRhKSk7CisKKwkJCX0gZWxzZSBpZiAoYWRkciA+PSBGSVhFRF9DT0RFX1NUQVJUCisJCQkgICAgJiYgYWRkciArIHNpemVvZihkYXRhKSA8PSBGSVhFRF9DT0RFX0VORCkgeworCQkJCW1lbWNweSgodm9pZCAqKShhZGRyKSwgJmRhdGEsIHNpemVvZihkYXRhKSk7CiAJCQkJY29waWVkID0gc2l6ZW9mKGRhdGEpOworCiAJCQl9IGVsc2UKLQkJCQljb3BpZWQgPSBhY2Nlc3NfcHJvY2Vzc192bShjaGlsZCwgYWRkciArIGFkZCwgJmRhdGEsCisJCQkJY29waWVkID0gYWNjZXNzX3Byb2Nlc3Nfdm0oY2hpbGQsIGFkZHIsICZkYXRhLAogCQkJCQkJCSAgIHNpemVvZihkYXRhKSwgMSk7CisKIAkJCXByX2RlYnVnKCJwdHJhY2U6IGNvcGllZCBzaXplICVkXG4iLCBjb3BpZWQpOwogCQkJaWYgKGNvcGllZCAhPSBzaXplb2YoZGF0YSkpCiAJCQkJYnJlYWs7CkBAIC0zNTEsMjkgKzM1MCwyMiBAQAogCQlicmVhazsKIAogCWNhc2UgUFRSQUNFX1NZU0NBTEw6CS8qIGNvbnRpbnVlIGFuZCBzdG9wIGF0IG5leHQgKHJldHVybiBmcm9tKSBzeXNjYWxsICovCi0JY2FzZSBQVFJBQ0VfQ09OVDoKLQkJewkJLyogcmVzdGFydCBhZnRlciBzaWduYWwuICovCi0JCQlsb25nIHRtcDsKKwljYXNlIFBUUkFDRV9DT05UOgkvKiByZXN0YXJ0IGFmdGVyIHNpZ25hbC4gKi8KKwkJcHJfZGVidWcoInB0cmFjZTogc3lzY2FsbC9jb250XG4iKTsKIAotCQkJcHJfZGVidWcoInB0cmFjZV9jb250XG4iKTsKLQotCQkJcmV0ID0gLUVJTzsKLQkJCWlmICghdmFsaWRfc2lnbmFsKGRhdGEpKQotCQkJCWJyZWFrOwotCQkJaWYgKHJlcXVlc3QgPT0gUFRSQUNFX1NZU0NBTEwpCi0JCQkJc2V0X3Rza190aHJlYWRfZmxhZyhjaGlsZCwgVElGX1NZU0NBTExfVFJBQ0UpOwotCQkJZWxzZQotCQkJCWNsZWFyX3Rza190aHJlYWRfZmxhZyhjaGlsZCwgVElGX1NZU0NBTExfVFJBQ0UpOwotCi0JCQljaGlsZC0+ZXhpdF9jb2RlID0gZGF0YTsKLQkJCS8qIG1ha2Ugc3VyZSB0aGUgc2luZ2xlIHN0ZXAgYml0IGlzIG5vdCBzZXQuICovCi0JCQl0bXAgPSBnZXRfcmVnKGNoaWxkLCBQVF9TWVNDRkcpICYgfihUUkFDRV9CSVRTKTsKLQkJCXB1dF9yZWcoY2hpbGQsIFBUX1NZU0NGRywgdG1wKTsKLQkJCXByX2RlYnVnKCJiZWZvcmUgd2FrZV91cF9wcm9jZXNzXG4iKTsKLQkJCXdha2VfdXBfcHJvY2VzcyhjaGlsZCk7Ci0JCQlyZXQgPSAwOworCQlyZXQgPSAtRUlPOworCQlpZiAoIXZhbGlkX3NpZ25hbChkYXRhKSkKIAkJCWJyZWFrOwotCQl9CisJCWlmIChyZXF1ZXN0ID09IFBUUkFDRV9TWVNDQUxMKQorCQkJc2V0X3Rza190aHJlYWRfZmxhZyhjaGlsZCwgVElGX1NZU0NBTExfVFJBQ0UpOworCQllbHNlCisJCQljbGVhcl90c2tfdGhyZWFkX2ZsYWcoY2hpbGQsIFRJRl9TWVNDQUxMX1RSQUNFKTsKKwkJY2hpbGQtPmV4aXRfY29kZSA9IGRhdGE7CisJCXB0cmFjZV9kaXNhYmxlKGNoaWxkKTsKKwkJcHJfZGVidWcoInB0cmFjZTogYmVmb3JlIHdha2VfdXBfcHJvY2Vzc1xuIik7CisJCXdha2VfdXBfcHJvY2VzcyhjaGlsZCk7CisJCXJldCA9IDA7CisJCWJyZWFrOwogCiAJLyoKIAkgKiBtYWtlIHRoZSBjaGlsZCBleGl0LiAgQmVzdCBJIGNhbiBkbyBpcyBzZW5kIGl0IGEgc2lna2lsbC4KQEAgLTM4MSw1NSArMzczLDM3IEBACiAJICogZXhpdC4KIAkgKi8KIAljYXNlIFBUUkFDRV9LSUxMOgotCQl7Ci0JCQlsb25nIHRtcDsKLQkJCXJldCA9IDA7Ci0JCQlpZiAoY2hpbGQtPmV4aXRfc3RhdGUgPT0gRVhJVF9aT01CSUUpCS8qIGFscmVhZHkgZGVhZCAqLwotCQkJCWJyZWFrOwotCQkJY2hpbGQtPmV4aXRfY29kZSA9IFNJR0tJTEw7Ci0JCQkvKiBtYWtlIHN1cmUgdGhlIHNpbmdsZSBzdGVwIGJpdCBpcyBub3Qgc2V0LiAqLwotCQkJdG1wID0gZ2V0X3JlZyhjaGlsZCwgUFRfU1lTQ0ZHKSAmIH4oVFJBQ0VfQklUUyk7Ci0JCQlwdXRfcmVnKGNoaWxkLCBQVF9TWVNDRkcsIHRtcCk7Ci0JCQl3YWtlX3VwX3Byb2Nlc3MoY2hpbGQpOworCQlyZXQgPSAwOworCQlpZiAoY2hpbGQtPmV4aXRfc3RhdGUgPT0gRVhJVF9aT01CSUUpCS8qIGFscmVhZHkgZGVhZCAqLwogCQkJYnJlYWs7Ci0JCX0KKwkJY2hpbGQtPmV4aXRfY29kZSA9IFNJR0tJTEw7CisJCXB0cmFjZV9kaXNhYmxlKGNoaWxkKTsKKwkJd2FrZV91cF9wcm9jZXNzKGNoaWxkKTsKKwkJYnJlYWs7CiAKLQljYXNlIFBUUkFDRV9TSU5HTEVTVEVQOgotCQl7CQkvKiBzZXQgdGhlIHRyYXAgZmxhZy4gKi8KLQkJCWxvbmcgdG1wOwotCi0JCQlwcl9kZWJ1Zygic2luZ2xlIHN0ZXBcbiIpOwotCQkJcmV0ID0gLUVJTzsKLQkJCWlmICghdmFsaWRfc2lnbmFsKGRhdGEpKQotCQkJCWJyZWFrOwotCQkJY2xlYXJfdHNrX3RocmVhZF9mbGFnKGNoaWxkLCBUSUZfU1lTQ0FMTF9UUkFDRSk7Ci0KLQkJCXRtcCA9IGdldF9yZWcoY2hpbGQsIFBUX1NZU0NGRykgfCAoVFJBQ0VfQklUUyk7Ci0JCQlwdXRfcmVnKGNoaWxkLCBQVF9TWVNDRkcsIHRtcCk7Ci0KLQkJCWNoaWxkLT5leGl0X2NvZGUgPSBkYXRhOwotCQkJLyogZ2l2ZSBpdCBhIGNoYW5jZSB0byBydW4uICovCi0JCQl3YWtlX3VwX3Byb2Nlc3MoY2hpbGQpOwotCQkJcmV0ID0gMDsKKwljYXNlIFBUUkFDRV9TSU5HTEVTVEVQOgkvKiBzZXQgdGhlIHRyYXAgZmxhZy4gKi8KKwkJcHJfZGVidWcoInB0cmFjZTogc2luZ2xlIHN0ZXBcbiIpOworCQlyZXQgPSAtRUlPOworCQlpZiAoIXZhbGlkX3NpZ25hbChkYXRhKSkKIAkJCWJyZWFrOwotCQl9CisJCWNsZWFyX3Rza190aHJlYWRfZmxhZyhjaGlsZCwgVElGX1NZU0NBTExfVFJBQ0UpOworCQlwdHJhY2VfZW5hYmxlKGNoaWxkKTsKKwkJY2hpbGQtPmV4aXRfY29kZSA9IGRhdGE7CisJCXdha2VfdXBfcHJvY2VzcyhjaGlsZCk7CisJCXJldCA9IDA7CisJCWJyZWFrOwogCiAJY2FzZSBQVFJBQ0VfR0VUUkVHUzoKLQkJewotCi0JCQkvKiBHZXQgYWxsIGdwIHJlZ3MgZnJvbSB0aGUgY2hpbGQuICovCi0JCQlyZXQgPSBwdHJhY2VfZ2V0cmVncyhjaGlsZCwgZGF0YXApOwotCQkJYnJlYWs7Ci0JCX0KKwkJLyogR2V0IGFsbCBncCByZWdzIGZyb20gdGhlIGNoaWxkLiAqLworCQlyZXQgPSBwdHJhY2VfZ2V0cmVncyhjaGlsZCwgZGF0YXApOworCQlicmVhazsKIAogCWNhc2UgUFRSQUNFX1NFVFJFR1M6Ci0JCXsKLQkJCXByaW50ayhLRVJOX05PVElDRQotCQkJICAgICAgICJwdHJhY2U6IFNFVFJFR1M6ICoqKiogTk9UIElNUExFTUVOVEVEICoqKlxuIik7Ci0JCQkvKiBTZXQgYWxsIGdwIHJlZ3MgaW4gdGhlIGNoaWxkLiAqLwotCQkJcmV0ID0gMDsKLQkJCWJyZWFrOwotCQl9CisJCXByaW50ayhLRVJOX1dBUk5JTkcgInB0cmFjZTogU0VUUkVHUzogKioqKiBOT1QgSU1QTEVNRU5URUQgKioqXG4iKTsKKwkJLyogU2V0IGFsbCBncCByZWdzIGluIHRoZSBjaGlsZC4gKi8KKwkJcmV0ID0gMDsKKwkJYnJlYWs7CisKIAlkZWZhdWx0OgogCQlyZXQgPSBwdHJhY2VfcmVxdWVzdChjaGlsZCwgcmVxdWVzdCwgYWRkciwgZGF0YSk7CiAJCWJyZWFrOwpAQCAtNDQwLDcgKzQxNCw2IEBACiAKIGFzbWxpbmthZ2Ugdm9pZCBzeXNjYWxsX3RyYWNlKHZvaWQpCiB7Ci0KIAlpZiAoIXRlc3RfdGhyZWFkX2ZsYWcoVElGX1NZU0NBTExfVFJBQ0UpKQogCQlyZXR1cm47CiAKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4va2VybmVsL3JlYm9vdC5jIGIvYXJjaC9ibGFja2Zpbi9rZXJuZWwvcmVib290LmMKaW5kZXggMzY3ZTJkYy4uYWU5N2NhNCAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9rZXJuZWwvcmVib290LmMKKysrIGIvYXJjaC9ibGFja2Zpbi9rZXJuZWwvcmVib290LmMKQEAgLTEwLDYgKzEwLDcgQEAKICNpbmNsdWRlIDxhc20vYmZpbi1nbG9iYWwuaD4KICNpbmNsdWRlIDxhc20vcmVib290Lmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgorI2luY2x1ZGUgPGFzbS9iZnJvbS5oPgogCiAvKiBBIHN5c3RlbSBzb2Z0IHJlc2V0IG1ha2VzIGV4dGVybmFsIG1lbW9yeSB1bnVzYWJsZSBzbyBmb3JjZQogICogdGhpcyBmdW5jdGlvbiBpbnRvIEwxLiAgV2UgdXNlIHRoZSBjb21waWxlciBzc3luYyBoZXJlIHJhdGhlcgpAQCAtMjAsNyArMjEsNyBAQAogICogdGhlIGNvcmUgcmVzZXQuCiAgKi8KIF9fYXR0cmlidXRlX18oKGwxX3RleHQpKQotdm9pZCBiZmluX3Jlc2V0KHZvaWQpCitzdGF0aWMgdm9pZCBiZmluX3Jlc2V0KHZvaWQpCiB7CiAJLyogV2FpdCBmb3IgY29tcGxldGlvbiBvZiAic3lzdGVtIiBldmVudHMgc3VjaCBhcyBjYWNoZSBsaW5lCiAJICogbGluZSBmaWxscyBzbyB0aGF0IHdlIGF2b2lkIGluZmluaXRlIHN0YWxscyBsYXRlciBvbiBhcwpAQCAtMzQsMTUgKzM1LDE1IEBACiAJCWJmaW5fd3JpdGVfU1dSU1QoMHg3KTsKIAogCQkvKiBEdWUgdG8gdGhlIHdheSByZXNldCBpcyBoYW5kbGVkIGluIHRoZSBoYXJkd2FyZSwgd2UgbmVlZAotCQkgKiB0byBkZWxheSBmb3IgNyBTQ0xLUy4gIFRoZSBvbmx5IHJlbGlhYmxlIHdheSB0byBkbyB0aGlzIGlzCi0JCSAqIHRvIGNhbGN1bGF0ZSB0aGUgQ0NMSy9TQ0xLIHJhdGlvIGFuZCBtdWx0aXBseSA3LiAgRm9yIG5vdywKKwkJICogdG8gZGVsYXkgZm9yIDEwIFNDTEtTLiAgVGhlIG9ubHkgcmVsaWFibGUgd2F5IHRvIGRvIHRoaXMgaXMKKwkJICogdG8gY2FsY3VsYXRlIHRoZSBDQ0xLL1NDTEsgcmF0aW8gYW5kIG11bHRpcGx5IDEwLiAgRm9yIG5vdywKIAkJICogd2UnbGwgYXNzdW1lIHdvcnNlIGNhc2Ugd2hpY2ggaXMgYSAxOjE1IHJhdGlvLgogCQkgKi8KIAkJYXNtKAogCQkJIkxTRVRVUCAoMWYsIDFmKSBMQzAgPSAlMFxuIgogCQkJIjE6IG5vcDsiCiAJCQk6Ci0JCQk6ICJhIiAoMTUgKiA3KQorCQkJOiAiYSIgKDE1ICogMTApCiAJCQk6ICJMQzAiLCAiTEIwIiwgIkxUMCIKIAkJKTsKIApAQCAtNzQsNyArNzUsMTQgQEAKIHsKIAluYXRpdmVfbWFjaGluZV9yZXN0YXJ0KGNtZCk7CiAJbG9jYWxfaXJxX2Rpc2FibGUoKTsKLQliZmluX3Jlc2V0KCk7CisJaWYgKEFOT01BTFlfMDUwMDAzNTMgfHwgQU5PTUFMWV8wNTAwMDM4NikKKwkJYmZpbl9yZXNldCgpOworCWVsc2UKKwkJLyogdGhlIGJvb3Ryb20gY2hlY2tzIHRvIHNlZSBob3cgaXQgd2FzIHJlc2V0IGFuZCB3aWxsCisJCSAqIGF1dG9tYXRpY2FsbHkgcGVyZm9ybSBhIHNvZnR3YXJlIHJlc2V0IGZvciB1cyB3aGVuCisJCSAqIGl0IHN0YXJ0cyBleGVjdXRpbmcgYm9vdAorCQkgKi8KKwkJYXNtKCJyYWlzZSAxOyIpOwogfQogCiBfX2F0dHJpYnV0ZV9fKCh3ZWFrKSkKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4va2VybmVsL3NldHVwLmMgYi9hcmNoL2JsYWNrZmluL2tlcm5lbC9zZXR1cC5jCmluZGV4IDdhODJkMTAuLjdmMzVkMTAgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4va2VybmVsL3NldHVwLmMKKysrIGIvYXJjaC9ibGFja2Zpbi9rZXJuZWwvc2V0dXAuYwpAQCAtNDIsNiArNDIsNyBAQAogRVhQT1JUX1NZTUJPTChtZW1vcnlfZW5kKTsKIEVYUE9SVF9TWU1CT0wocGh5c2ljYWxfbWVtX2VuZCk7CiBFWFBPUlRfU1lNQk9MKF9yYW1lbmQpOworRVhQT1JUX1NZTUJPTChyZXNlcnZlZF9tZW1fZGNhY2hlX29uKTsKIAogI2lmZGVmIENPTkZJR19NVERfVUNMSU5VWAogdW5zaWduZWQgbG9uZyBtZW1vcnlfbXRkX2VuZCwgbWVtb3J5X210ZF9zdGFydCwgbXRkX3NpemU7CkBAIC01Miw3ICs1Myw4IEBACiAjZW5kaWYKIAogY2hhciBfX2luaXRkYXRhIGNvbW1hbmRfbGluZVtDT01NQU5EX0xJTkVfU0laRV07Ci11bnNpZ25lZCBpbnQgX19pbml0ZGF0YSAqX19yZXR4Owordm9pZCBfX2luaXRkYXRhICppbml0X3JldHgsICppbml0X3NhdmVkX3JldHgsICppbml0X3NhdmVkX3NlcXN0YXQsCisJKmluaXRfc2F2ZWRfaWNwbGJfZmF1bHRfYWRkciwgKmluaXRfc2F2ZWRfZGNwbGJfZmF1bHRfYWRkcjsKIAogLyogYm9vdCBtZW1tYXAsIGZvciBwYXJzaW5nICJtZW1tYXA9IiAqLwogI2RlZmluZSBCRklOX01FTU1BUF9NQVgJCTEyOCAvKiBudW1iZXIgb2YgZW50cmllcyBpbiBiZmluX21lbW1hcCAqLwpAQCAtNzcsMTAgKzc5LDEwIEBACiBzdGF0aWMgc3RydWN0IGJmaW5fbWVtbWFwX2VudHJ5ICpvdmVybGFwX2xpc3RbQkZJTl9NRU1NQVBfTUFYXSBfX2luaXRkYXRhOwogc3RhdGljIHN0cnVjdCBiZmluX21lbW1hcF9lbnRyeSBuZXdfbWFwW0JGSU5fTUVNTUFQX01BWF0gX19pbml0ZGF0YTsKIAotdm9pZCBfX2luaXQgYmY1M3hfY2FjaGVfaW5pdCh2b2lkKQordm9pZCBfX2luaXQgYmZpbl9jYWNoZV9pbml0KHZvaWQpCiB7CiAjaWYgZGVmaW5lZChDT05GSUdfQkZJTl9EQ0FDSEUpIHx8IGRlZmluZWQoQ09ORklHX0JGSU5fSUNBQ0hFKQotCWdlbmVyYXRlX2NwbF90YWJsZXMoKTsKKwlnZW5lcmF0ZV9jcGxiX3RhYmxlcygpOwogI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfQkZJTl9JQ0FDSEUKQEAgLTEwMCw3ICsxMDIsNyBAQAogI2VuZGlmCiB9CiAKLXZvaWQgX19pbml0IGJmNTN4X3JlbG9jYXRlX2wxX21lbSh2b2lkKQordm9pZCBfX2luaXQgYmZpbl9yZWxvY2F0ZV9sMV9tZW0odm9pZCkKIHsKIAl1bnNpZ25lZCBsb25nIGwxX2NvZGVfbGVuZ3RoOwogCXVuc2lnbmVkIGxvbmcgbDFfZGF0YV9hX2xlbmd0aDsKQEAgLTQxMCw3ICs0MTIsNyBAQAogICogIFtfcmFtYmFzZSwgX3JhbXN0YXJ0XToJCWtlcm5lbCBpbWFnZQogICogIFttZW1vcnlfc3RhcnQsIG1lbW9yeV9lbmRdOgkJZHluYW1pYyBtZW1vcnkgbWFuYWdlZCBieSBrZXJuZWwKICAqICBbbWVtb3J5X2VuZCwgX3JhbWVuZF06CQlyZXNlcnZlZCBtZW1vcnkKLSAqICAJW21lb3J5X210ZF9zdGFydChtZW1vcnlfZW5kKSwKKyAqICAJW21lbW9yeV9tdGRfc3RhcnQobWVtb3J5X2VuZCksCiAgKiAgCQltZW1vcnlfbXRkX3N0YXJ0ICsgbXRkX3NpemVdOglyb290ZnMgKGlmIGFueSkKICAqCVtfcmFtZW5kIC0gRE1BX1VOQ0FDSEVEX1JFR0lPTiwKICAqCQlfcmFtZW5kXToJCQl1bmNhY2hlZCBETUEgcmVnaW9uCkBAIC03ODIsMTYgKzc4NCwyNSBAQAogCiAJX2JmaW5fc3dyc3QgPSBiZmluX3JlYWRfU1dSU1QoKTsKIAotCS8qIElmIHdlIGRvdWJsZSBmYXVsdCwgcmVzZXQgdGhlIHN5c3RlbSAtIG90aGVyd2lzZSB3ZSBoYW5nIGZvcmV2ZXIgKi8KLQliZmluX3dyaXRlX1NXUlNUKERPVUJMRV9GQVVMVCk7CisjaWZkZWYgQ09ORklHX0RFQlVHX0RPVUJMRUZBVUxUX1BSSU5UCisJYmZpbl93cml0ZV9TV1JTVChfYmZpbl9zd3JzdCAmIH5ET1VCTEVfRkFVTFQpOworI2VuZGlmCisjaWZkZWYgQ09ORklHX0RFQlVHX0RPVUJMRUZBVUxUX1JFU0VUCisJYmZpbl93cml0ZV9TV1JTVChfYmZpbl9zd3JzdCB8IERPVUJMRV9GQVVMVCk7CisjZW5kaWYKIAotCWlmIChfYmZpbl9zd3JzdCAmIFJFU0VUX0RPVUJMRSkKLQkJLyoKLQkJICogZG9uJ3QgZGVjb2RlIHRoZSBhZGRyZXNzLCBzaW5jZSB5b3UgZG9uJ3Qga25vdyBpZiB0aGlzCi0JCSAqIGtlcm5lbCdzIHN5bWJvbCBtYXAgaXMgdGhlIHNhbWUgYXMgdGhlIGNyYXNoaW5nIGtlcm5lbAotCQkgKi8KLQkJcHJpbnRrKEtFUk5fSU5GTyAiUmVjb3ZlcmluZyBmcm9tIERvdWJsZSBGYXVsdCBldmVudCBhdCAlcEZcbiIsIF9fcmV0eCk7Ci0JZWxzZSBpZiAoX2JmaW5fc3dyc3QgJiBSRVNFVF9XRE9HKQorCWlmIChfYmZpbl9zd3JzdCAmIFJFU0VUX0RPVUJMRSkgeworCQlwcmludGsoS0VSTl9FTUVSRyAiUmVjb3ZlcmluZyBmcm9tIERPVUJMRSBGQVVMVCBldmVudFxuIik7CisjaWZkZWYgQ09ORklHX0RFQlVHX0RPVUJMRUZBVUxUCisJCS8qIFdlIGFzc3VtZSB0aGUgY3Jhc2hpbmcga2VybmVsLCBhbmQgdGhlIGN1cnJlbnQgc3ltYm9sIHRhYmxlIG1hdGNoICovCisJCXByaW50ayhLRVJOX0VNRVJHICIgV2hpbGUgaGFuZGxpbmcgZXhjZXB0aW9uIChFWENBVVNFID0gMHgleCkgYXQgJXBGXG4iLAorCQkJKGludClpbml0X3NhdmVkX3NlcXN0YXQgJiBTRVFTVEFUX0VYQ0FVU0UsIGluaXRfc2F2ZWRfcmV0eCk7CisJCXByaW50ayhLRVJOX05PVElDRSAiICAgRENQTEJfRkFVTFRfQUREUjogJXBGXG4iLCBpbml0X3NhdmVkX2RjcGxiX2ZhdWx0X2FkZHIpOworCQlwcmludGsoS0VSTl9OT1RJQ0UgIiAgIElDUExCX0ZBVUxUX0FERFI6ICVwRlxuIiwgaW5pdF9zYXZlZF9pY3BsYl9mYXVsdF9hZGRyKTsKKyNlbmRpZgorCQlwcmludGsoS0VSTl9OT1RJQ0UgIiBUaGUgaW5zdHJ1Y3Rpb24gYXQgJXBGIGNhdXNlZCBhIGRvdWJsZSBleGNlcHRpb25cbiIsCisJCQlpbml0X3JldHgpOworCX0gZWxzZSBpZiAoX2JmaW5fc3dyc3QgJiBSRVNFVF9XRE9HKQogCQlwcmludGsoS0VSTl9JTkZPICJSZWNvdmVyaW5nIGZyb20gV2F0Y2hkb2cgZXZlbnRcbiIpOwogCWVsc2UgaWYgKF9iZmluX3N3cnN0ICYgUkVTRVRfU09GVFdBUkUpCiAJCXByaW50ayhLRVJOX05PVElDRSAiUmVzZXQgY2F1c2VkIGJ5IFNvZnR3YXJlIHJlc2V0XG4iKTsKQEAgLTgwMywxNyArODE0LDI0IEBACiAJCXByaW50ayhLRVJOX0lORk8gIkNvbXBpbGVkIGZvciBBRFNQLSVzIFJldiBub25lXG4iLCBDUFUpOwogCWVsc2UKIAkJcHJpbnRrKEtFUk5fSU5GTyAiQ29tcGlsZWQgZm9yIEFEU1AtJXMgUmV2IDAuJWRcbiIsIENQVSwgYmZpbl9jb21waWxlZF9yZXZpZCgpKTsKLQlpZiAoYmZpbl9yZXZpZCgpICE9IGJmaW5fY29tcGlsZWRfcmV2aWQoKSkgewotCQlpZiAoYmZpbl9jb21waWxlZF9yZXZpZCgpID09IC0xKQotCQkJcHJpbnRrKEtFUk5fRVJSICJXYXJuaW5nOiBDb21waWxlZCBmb3IgUmV2IG5vbmUsIGJ1dCBydW5uaW5nIG9uIFJldiAlZFxuIiwKLQkJCSAgICAgICBiZmluX3JldmlkKCkpOwotCQllbHNlIGlmIChiZmluX2NvbXBpbGVkX3JldmlkKCkgIT0gMHhmZmZmKQotCQkJcHJpbnRrKEtFUk5fRVJSICJXYXJuaW5nOiBDb21waWxlZCBmb3IgUmV2ICVkLCBidXQgcnVubmluZyBvbiBSZXYgJWRcbiIsCi0JCQkgICAgICAgYmZpbl9jb21waWxlZF9yZXZpZCgpLCBiZmluX3JldmlkKCkpOworCisJaWYgKHVubGlrZWx5KENQVUlEICE9IGJmaW5fY3B1aWQoKSkpCisJCXByaW50ayhLRVJOX0VSUiAiRVJST1I6IE5vdCBydW5uaW5nIG9uIEFEU1AtJXM6IHVua25vd24gQ1BVSUQgMHglMDR4IFJldiAwLiVkXG4iLAorCQkJQ1BVLCBiZmluX2NwdWlkKCksIGJmaW5fcmV2aWQoKSk7CisJZWxzZSB7CisJCWlmIChiZmluX3JldmlkKCkgIT0gYmZpbl9jb21waWxlZF9yZXZpZCgpKSB7CisJCQlpZiAoYmZpbl9jb21waWxlZF9yZXZpZCgpID09IC0xKQorCQkJCXByaW50ayhLRVJOX0VSUiAiV2FybmluZzogQ29tcGlsZWQgZm9yIFJldiBub25lLCBidXQgcnVubmluZyBvbiBSZXYgJWRcbiIsCisJCQkJICAgICAgIGJmaW5fcmV2aWQoKSk7CisJCQllbHNlIGlmIChiZmluX2NvbXBpbGVkX3JldmlkKCkgIT0gMHhmZmZmKQorCQkJCXByaW50ayhLRVJOX0VSUiAiV2FybmluZzogQ29tcGlsZWQgZm9yIFJldiAlZCwgYnV0IHJ1bm5pbmcgb24gUmV2ICVkXG4iLAorCQkJCSAgICAgICBiZmluX2NvbXBpbGVkX3JldmlkKCksIGJmaW5fcmV2aWQoKSk7CisJCX0KKwkJaWYgKGJmaW5fcmV2aWQoKSA8PSBDT05GSUdfQkZfUkVWX01JTiB8fCBiZmluX3JldmlkKCkgPiBDT05GSUdfQkZfUkVWX01BWCkKKwkJCXByaW50ayhLRVJOX0VSUiAiV2FybmluZzogVW5zdXBwb3J0ZWQgQ2hpcCBSZXZpc2lvbiBBRFNQLSVzIFJldiAwLiVkIGRldGVjdGVkXG4iLAorCQkJICAgICAgIENQVSwgYmZpbl9yZXZpZCgpKTsKIAl9Ci0JaWYgKGJmaW5fcmV2aWQoKSA8IFNVUFBPUlRFRF9SRVZJRCkKLQkJcHJpbnRrKEtFUk5fRVJSICJXYXJuaW5nOiBVbnN1cHBvcnRlZCBDaGlwIFJldmlzaW9uIEFEU1AtJXMgUmV2IDAuJWQgZGV0ZWN0ZWRcbiIsCi0JCSAgICAgICBDUFUsIGJmaW5fcmV2aWQoKSk7CisKIAlwcmludGsoS0VSTl9JTkZPICJCbGFja2ZpbiBMaW51eCBzdXBwb3J0IGJ5IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy9cbiIpOwogCiAJcHJpbnRrKEtFUk5fSU5GTyAiUHJvY2Vzc29yIFNwZWVkOiAlbHUgTUh6IGNvcmUgY2xvY2sgYW5kICVsdSBNSHogU3lzdGVtIENsb2NrXG4iLApAQCAtODUwLDcgKzg2OCw3IEBACiAJCSE9IFNBRkVfVVNFUl9JTlNUUlVDVElPTiAtIEZJWEVEX0NPREVfU1RBUlQpOwogCiAJaW5pdF9leGNlcHRpb25fdmVjdG9ycygpOwotCWJmNTN4X2NhY2hlX2luaXQoKTsKKwliZmluX2NhY2hlX2luaXQoKTsKIH0KIAogc3RhdGljIGludCBfX2luaXQgdG9wb2xvZ3lfaW5pdCh2b2lkKQpAQCAtOTg2LDEzICsxMDA0LDE4IEBACiAJfQogCiAJc2VxX3ByaW50ZihtLCAicHJvY2Vzc29yXHQ6ICVkXG4iCi0JCSJ2ZW5kb3JfaWRcdDogJXNcbiIKLQkJImNwdSBmYW1pbHlcdDogMHgleFxuIgotCQkibW9kZWwgbmFtZVx0OiBBRFNQLSVzICVsdShNSHogQ0NMSykgJWx1KE1IeiBTQ0xLKSAoJXMpXG4iCisJCSJ2ZW5kb3JfaWRcdDogJXNcbiIsCisJCSoodW5zaWduZWQgaW50ICopdiwKKwkJdmVuZG9yKTsKKworCWlmIChDUFVJRCA9PSBiZmluX2NwdWlkKCkpCisJCXNlcV9wcmludGYobSwgImNwdSBmYW1pbHlcdDogMHglMDR4XG4iLCBDUFVJRCk7CisJZWxzZQorCQlzZXFfcHJpbnRmKG0sICJjcHUgZmFtaWx5XHQ6IENvbXBpbGVkIGZvcjoweCUwNHgsIHJ1bm5pbmcgb246MHglMDR4XG4iLAorCQkJQ1BVSUQsIGJmaW5fY3B1aWQoKSk7CisKKwlzZXFfcHJpbnRmKG0sICJtb2RlbCBuYW1lXHQ6IEFEU1AtJXMgJWx1KE1IeiBDQ0xLKSAlbHUoTUh6IFNDTEspICglcylcbiIKIAkJInN0ZXBwaW5nXHQ6ICVkXG4iLAotCQkwLAotCQl2ZW5kb3IsCi0JCShiZmluX3JlYWRfQ0hJUElEKCkgJiBDSElQSURfRkFNSUxZKSwKIAkJY3B1LCBjY2xrLzEwMDAwMDAsIHNjbGsvMTAwMDAwMCwKICNpZmRlZiBDT05GSUdfTVBVCiAJCSJtcHUgb24iLApAQCAtMTAzOCw3ICsxMDYxLDcgQEAKIAlpZiAoKGJmaW5fcmVhZF9ETUVNX0NPTlRST0woKSAmIChFTkRDUExCIHwgRE1DX0VOQUJMRSkpICE9IChFTkRDUExCIHwgRE1DX0VOQUJMRSkpCiAJCWRjYWNoZV9zaXplID0gMDsKIAotCWlmICgoYmZpbl9yZWFkX0lNRU1fQ09OVFJPTCgpICYgKElNQyB8IEVOSUNQTEIpKSA9PSAoSU1DIHwgRU5JQ1BMQikpCisJaWYgKChiZmluX3JlYWRfSU1FTV9DT05UUk9MKCkgJiAoSU1DIHwgRU5JQ1BMQikpICE9IChJTUMgfCBFTklDUExCKSkKIAkJaWNhY2hlX3NpemUgPSAwOwogCiAJc2VxX3ByaW50ZihtLCAiY2FjaGUgc2l6ZVx0OiAlZCBLQihMMSBpY2FjaGUpICIKQEAgLTExMjcsMTIgKzExNTAsMTggQEAKIAogc3RhdGljIHZvaWQgKmNfc3RhcnQoc3RydWN0IHNlcV9maWxlICptLCBsb2ZmX3QgKnBvcykKIHsKLQlyZXR1cm4gKnBvcyA8IE5SX0NQVVMgPyAoKHZvaWQgKikweDEyMzQ1Njc4KSA6IE5VTEw7CisJaWYgKCpwb3MgPT0gMCkKKwkJKnBvcyA9IGZpcnN0X2NwdShjcHVfb25saW5lX21hcCk7CisJaWYgKCpwb3MgPj0gbnVtX29ubGluZV9jcHVzKCkpCisJCXJldHVybiBOVUxMOworCisJcmV0dXJuIHBvczsKIH0KIAogc3RhdGljIHZvaWQgKmNfbmV4dChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYsIGxvZmZfdCAqcG9zKQogewotCSsrKnBvczsKKwkqcG9zID0gbmV4dF9jcHUoKnBvcywgY3B1X29ubGluZV9tYXApOworCiAJcmV0dXJuIGNfc3RhcnQobSwgcG9zKTsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9rZXJuZWwvdHJhcHMuYyBiL2FyY2gvYmxhY2tmaW4va2VybmVsL3RyYXBzLmMKaW5kZXggOWE5ZDUwOC4uMWFhMmM3OCAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9rZXJuZWwvdHJhcHMuYworKysgYi9hcmNoL2JsYWNrZmluL2tlcm5lbC90cmFwcy5jCkBAIC0zNCwyMCArMzQsMTkgQEAKICNpbmNsdWRlIDxsaW51eC9mcy5oPgogI2luY2x1ZGUgPGFzbS90cmFwcy5oPgogI2luY2x1ZGUgPGFzbS9jYWNoZWZsdXNoLmg+CisjaW5jbHVkZSA8YXNtL2NwbGIuaD4KICNpbmNsdWRlIDxhc20vYmxhY2tmaW4uaD4KICNpbmNsdWRlIDxhc20vaXJxX2hhbmRsZXIuaD4KICNpbmNsdWRlIDxsaW51eC9pcnEuaD4KICNpbmNsdWRlIDxhc20vdHJhY2UuaD4KICNpbmNsdWRlIDxhc20vZml4ZWRfY29kZS5oPgotI2luY2x1ZGUgPGFzbS9kbWEuaD4KIAogI2lmZGVmIENPTkZJR19LR0RCCi0jIGluY2x1ZGUgPGxpbnV4L2RlYnVnZ2VyLmg+CiAjIGluY2x1ZGUgPGxpbnV4L2tnZGIuaD4KIAogIyBkZWZpbmUgQ0hLX0RFQlVHR0VSX1RSQVAoKSBcCiAJZG8geyBcCi0JCUNIS19ERUJVR0dFUih0cmFwbnIsIHNpZywgaW5mby5zaV9jb2RlLCBmcCwgKTsgXAorCQlrZ2RiX2hhbmRsZV9leGNlcHRpb24odHJhcG5yLCBzaWcsIGluZm8uc2lfY29kZSwgZnApOyBcCiAJfSB3aGlsZSAoMCkKICMgZGVmaW5lIENIS19ERUJVR0dFUl9UUkFQX01BWUJFKCkgXAogCWRvIHsgXApAQCAtNTksNiArNTgsMTUgQEAKICMgZGVmaW5lIENIS19ERUJVR0dFUl9UUkFQX01BWUJFKCkgZG8geyB9IHdoaWxlICgwKQogI2VuZGlmCiAKKworI2lmZGVmIENPTkZJR19WRVJCT1NFX0RFQlVHCisjZGVmaW5lIHZlcmJvc2VfcHJpbnRrKGZtdCwgYXJnLi4uKSBcCisJcHJpbnRrKGZtdCwgIyNhcmcpCisjZWxzZQorI2RlZmluZSB2ZXJib3NlX3ByaW50ayhmbXQsIGFyZy4uLikgXAorCSh7IGlmICgwKSBwcmludGsoZm10LCAjI2FyZyk7IDA7IH0pCisjZW5kaWYKKwogLyogSW5pdGlhdGUgdGhlIGV2ZW50IHRhYmxlIGhhbmRsZXIgKi8KIHZvaWQgX19pbml0IHRyYXBfaW5pdCh2b2lkKQogewpAQCAtNjcsMTAgKzc1LDE5IEBACiAJQ1NZTkMoKTsKIH0KIAotdW5zaWduZWQgbG9uZyBzYXZlZF9pY3BsYl9mYXVsdF9hZGRyLCBzYXZlZF9kY3BsYl9mYXVsdF9hZGRyOworLyoKKyAqIFVzZWQgdG8gc2F2ZSB0aGUgUkVUWCwgU0VRU1RBVCwgSS9EIENQTEIgRkFVTFQgQUREUgorICogdmFsdWVzIGFjcm9zcyB0aGUgdHJhbnNpdGlvbiBmcm9tIGV4Y2VwdGlvbiB0byBJUlE1LgorICogV2UgcHV0IHRoZXNlIGluIEwxLCBzbyB0aGV5IGFyZSBnb2luZyB0byBiZSBpbiBhIHZhbGlkCisgKiBsb2NhdGlvbiBkdXJpbmcgZXhjZXB0aW9uIGNvbnRleHQKKyAqLworX19hdHRyaWJ1dGVfXygobDFfZGF0YSkpCit1bnNpZ25lZCBsb25nIHNhdmVkX3JldHgsIHNhdmVkX3NlcXN0YXQsCisJc2F2ZWRfaWNwbGJfZmF1bHRfYWRkciwgc2F2ZWRfZGNwbGJfZmF1bHRfYWRkcjsKIAogc3RhdGljIHZvaWQgZGVjb2RlX2FkZHJlc3MoY2hhciAqYnVmLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MpCiB7CisjaWZkZWYgQ09ORklHX0RFQlVHX1ZFUkJPU0UKIAlzdHJ1Y3Qgdm1fbGlzdF9zdHJ1Y3QgKnZtbDsKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnA7CiAJc3RydWN0IG1tX3N0cnVjdCAqbW07CkBAIC0xNzgsMTYgKzE5NSwzOSBAQAogCiBkb25lOgogCXdyaXRlX3VubG9ja19pcnFyZXN0b3JlKCZ0YXNrbGlzdF9sb2NrLCBmbGFncyk7CisjZWxzZQorCXNwcmludGYoYnVmLCAiICIpOworI2VuZGlmCiB9CiAKIGFzbWxpbmthZ2Ugdm9pZCBkb3VibGVfZmF1bHRfYyhzdHJ1Y3QgcHRfcmVncyAqZnApCiB7CiAJY29uc29sZV92ZXJib3NlKCk7CiAJb29wc19pbl9wcm9ncmVzcyA9IDE7CisjaWZkZWYgQ09ORklHX0RFQlVHX1ZFUkJPU0UKIAlwcmludGsoS0VSTl9FTUVSRyAiXG4iIEtFUk5fRU1FUkcgIkRvdWJsZSBGYXVsdFxuIik7Ci0JZHVtcF9iZmluX3Byb2Nlc3MoZnApOwotCWR1bXBfYmZpbl9tZW0oZnApOwotCXNob3dfcmVncyhmcCk7CisjaWZkZWYgQ09ORklHX0RFQlVHX0RPVUJMRUZBVUxUX1BSSU5UCisJaWYgKCgobG9uZylmcC0+c2Vxc3RhdCAmICBTRVFTVEFUX0VYQ0FVU0UpID09IFZFQ19VTkNPVikgeworCQljaGFyIGJ1ZlsxNTBdOworCQlkZWNvZGVfYWRkcmVzcyhidWYsIHNhdmVkX3JldHgpOworCQlwcmludGsoS0VSTl9FTUVSRyAiV2hpbGUgaGFuZGxpbmcgZXhjZXB0aW9uIChFWENBVVNFID0gMHgleCkgYXQgJXM6XG4iLAorCQkJKGludClzYXZlZF9zZXFzdGF0ICYgU0VRU1RBVF9FWENBVVNFLCBidWYpOworCQlkZWNvZGVfYWRkcmVzcyhidWYsIHNhdmVkX2RjcGxiX2ZhdWx0X2FkZHIpOworCQlwcmludGsoS0VSTl9OT1RJQ0UgIiAgIERDUExCX0ZBVUxUX0FERFI6ICVzXG4iLCBidWYpOworCQlkZWNvZGVfYWRkcmVzcyhidWYsIHNhdmVkX2ljcGxiX2ZhdWx0X2FkZHIpOworCQlwcmludGsoS0VSTl9OT1RJQ0UgIiAgIElDUExCX0ZBVUxUX0FERFI6ICVzXG4iLCBidWYpOworCisJCWRlY29kZV9hZGRyZXNzKGJ1ZiwgZnAtPnJldHgpOworCQlwcmludGsoS0VSTl9OT1RJQ0UgIlRoZSBpbnN0cnVjdGlvbiBhdCAlcyBjYXVzZWQgYSBkb3VibGUgZXhjZXB0aW9uXG4iLAorCQkJYnVmKTsKKwl9IGVsc2UKKyNlbmRpZgorCXsKKwkJZHVtcF9iZmluX3Byb2Nlc3MoZnApOworCQlkdW1wX2JmaW5fbWVtKGZwKTsKKwkJc2hvd19yZWdzKGZwKTsKKwl9CisjZW5kaWYKIAlwYW5pYygiRG91YmxlIEZhdWx0IC0gdW5yZWNvdmVyYWJsZSBldmVudFxuIik7CiAKIH0KQEAgLTI1OSwzNCArMjk5LDQyIEBACiAJCQlyZXR1cm47CiAJCWVsc2UKIAkJCWJyZWFrOwotI2lmZGVmIENPTkZJR19LR0RCCi0JY2FzZSBWRUNfRVhDUFQwMiA6CQkgLyogZ2RiIGNvbm5lY3Rpb24gKi8KLQkJaW5mby5zaV9jb2RlID0gVFJBUF9JTExUUkFQOwotCQlzaWcgPSBTSUdUUkFQOwotCQlDSEtfREVCVUdHRVJfVFJBUCgpOwotCQlyZXR1cm47Ci0jZWxzZQotCS8qIDB4MDIgLSBVc2VyIERlZmluZWQsIENhdWdodCBieSBkZWZhdWx0ICovCi0jZW5kaWYKIAkvKiAweDAzIC0gVXNlciBEZWZpbmVkLCB1c2Vyc3BhY2Ugc3RhY2sgb3ZlcmZsb3cgKi8KIAljYXNlIFZFQ19FWENQVDAzOgogCQlpbmZvLnNpX2NvZGUgPSBTRUdWX1NUQUNLRkxPVzsKIAkJc2lnID0gU0lHU0VHVjsKLQkJcHJpbnRrKEtFUk5fTk9USUNFIEVYQ18weDAzKEtFUk5fTk9USUNFKSk7Ci0JCUNIS19ERUJVR0dFUl9UUkFQKCk7CisJCXZlcmJvc2VfcHJpbnRrKEtFUk5fTk9USUNFIEVYQ18weDAzKEtFUk5fTk9USUNFKSk7CisJCUNIS19ERUJVR0dFUl9UUkFQX01BWUJFKCk7CiAJCWJyZWFrOwotCS8qIDB4MDQgLSBVc2VyIERlZmluZWQsIENhdWdodCBieSBkZWZhdWx0ICovCi0JLyogMHgwNSAtIFVzZXIgRGVmaW5lZCwgQ2F1Z2h0IGJ5IGRlZmF1bHQgKi8KLQkvKiAweDA2IC0gVXNlciBEZWZpbmVkLCBDYXVnaHQgYnkgZGVmYXVsdCAqLwotCS8qIDB4MDcgLSBVc2VyIERlZmluZWQsIENhdWdodCBieSBkZWZhdWx0ICovCi0JLyogMHgwOCAtIFVzZXIgRGVmaW5lZCwgQ2F1Z2h0IGJ5IGRlZmF1bHQgKi8KLQkvKiAweDA5IC0gVXNlciBEZWZpbmVkLCBDYXVnaHQgYnkgZGVmYXVsdCAqLwotCS8qIDB4MEEgLSBVc2VyIERlZmluZWQsIENhdWdodCBieSBkZWZhdWx0ICovCi0JLyogMHgwQiAtIFVzZXIgRGVmaW5lZCwgQ2F1Z2h0IGJ5IGRlZmF1bHQgKi8KLQkvKiAweDBDIC0gVXNlciBEZWZpbmVkLCBDYXVnaHQgYnkgZGVmYXVsdCAqLwotCS8qIDB4MEQgLSBVc2VyIERlZmluZWQsIENhdWdodCBieSBkZWZhdWx0ICovCi0JLyogMHgwRSAtIFVzZXIgRGVmaW5lZCwgQ2F1Z2h0IGJ5IGRlZmF1bHQgKi8KLQkvKiAweDBGIC0gVXNlciBEZWZpbmVkLCBDYXVnaHQgYnkgZGVmYXVsdCAqLworCS8qIDB4MDIgLSBLR0RCIGluaXRpYWwgY29ubmVjdGlvbiBhbmQgYnJlYWsgc2lnbmFsIHRyYXAgKi8KKwljYXNlIFZFQ19FWENQVDAyOgorI2lmZGVmIENPTkZJR19LR0RCCisJCWluZm8uc2lfY29kZSA9IFRSQVBfSUxMVFJBUDsKKwkJc2lnID0gU0lHVFJBUDsKKwkJQ0hLX0RFQlVHR0VSX1RSQVAoKTsKKwkJcmV0dXJuOworI2VuZGlmCisJLyogMHgwNCAtIFVzZXIgRGVmaW5lZCAqLworCS8qIDB4MDUgLSBVc2VyIERlZmluZWQgKi8KKwkvKiAweDA2IC0gVXNlciBEZWZpbmVkICovCisJLyogMHgwNyAtIFVzZXIgRGVmaW5lZCAqLworCS8qIDB4MDggLSBVc2VyIERlZmluZWQgKi8KKwkvKiAweDA5IC0gVXNlciBEZWZpbmVkICovCisJLyogMHgwQSAtIFVzZXIgRGVmaW5lZCAqLworCS8qIDB4MEIgLSBVc2VyIERlZmluZWQgKi8KKwkvKiAweDBDIC0gVXNlciBEZWZpbmVkICovCisJLyogMHgwRCAtIFVzZXIgRGVmaW5lZCAqLworCS8qIDB4MEUgLSBVc2VyIERlZmluZWQgKi8KKwkvKiAweDBGIC0gVXNlciBEZWZpbmVkICovCisJLyogSWYgd2UgZ290IGhlcmUsIGl0IGlzIG1vc3QgbGlrZWx5IHRoYXQgc29tZW9uZSB3YXMgdHJ5aW5nIHRvIHVzZSBhCisJICogY3VzdG9tIGV4Y2VwdGlvbiBoYW5kbGVyLCBhbmQgaXQgaXMgbm90IGFjdHVhbGx5IGluc3RhbGxlZCBwcm9wZXJseQorCSAqLworCWNhc2UgVkVDX0VYQ1BUMDQgLi4uIFZFQ19FWENQVDE1OgorCQlpbmZvLnNpX2NvZGUgPSBJTExfSUxMUEFSQU9QOworCQlzaWcgPSBTSUdJTEw7CisJCXZlcmJvc2VfcHJpbnRrKEtFUk5fTk9USUNFIEVYQ18weDA0KEtFUk5fTk9USUNFKSk7CisJCUNIS19ERUJVR0dFUl9UUkFQX01BWUJFKCk7CisJCWJyZWFrOwogCS8qIDB4MTAgSFcgU2luZ2xlIHN0ZXAsIGhhbmRsZWQgaGVyZSAqLwogCWNhc2UgVkVDX1NURVA6CiAJCWluZm8uc2lfY29kZSA9IFRSQVBfU1RFUDsKQEAgLTMwMSw4ICszNDksOCBAQAogCWNhc2UgVkVDX09WRkxPVzoKIAkJaW5mby5zaV9jb2RlID0gVFJBUF9UUkFDRUZMT1c7CiAJCXNpZyA9IFNJR1RSQVA7Ci0JCXByaW50ayhLRVJOX05PVElDRSBFWENfMHgxMShLRVJOX05PVElDRSkpOwotCQlDSEtfREVCVUdHRVJfVFJBUCgpOworCQl2ZXJib3NlX3ByaW50ayhLRVJOX05PVElDRSBFWENfMHgxMShLRVJOX05PVElDRSkpOworCQlDSEtfREVCVUdHRVJfVFJBUF9NQVlCRSgpOwogCQlicmVhazsKIAkvKiAweDEyIC0gUmVzZXJ2ZWQsIENhdWdodCBieSBkZWZhdWx0ICovCiAJLyogMHgxMyAtIFJlc2VydmVkLCBDYXVnaHQgYnkgZGVmYXVsdCAqLwpAQCAtMzIzLDQ0ICszNzEsNDMgQEAKIAljYXNlIFZFQ19VTkRFRl9JOgogCQlpbmZvLnNpX2NvZGUgPSBJTExfSUxMT1BDOwogCQlzaWcgPSBTSUdJTEw7Ci0JCXByaW50ayhLRVJOX05PVElDRSBFWENfMHgyMShLRVJOX05PVElDRSkpOwotCQlDSEtfREVCVUdHRVJfVFJBUCgpOworCQl2ZXJib3NlX3ByaW50ayhLRVJOX05PVElDRSBFWENfMHgyMShLRVJOX05PVElDRSkpOworCQlDSEtfREVCVUdHRVJfVFJBUF9NQVlCRSgpOwogCQlicmVhazsKIAkvKiAweDIyIC0gSWxsZWdhbCBJbnN0cnVjdGlvbiBDb21iaW5hdGlvbiwgaGFuZGxlZCBoZXJlICovCiAJY2FzZSBWRUNfSUxHQUxfSToKIAkJaW5mby5zaV9jb2RlID0gSUxMX0lMTFBBUkFPUDsKIAkJc2lnID0gU0lHSUxMOwotCQlwcmludGsoS0VSTl9OT1RJQ0UgRVhDXzB4MjIoS0VSTl9OT1RJQ0UpKTsKLQkJQ0hLX0RFQlVHR0VSX1RSQVAoKTsKKwkJdmVyYm9zZV9wcmludGsoS0VSTl9OT1RJQ0UgRVhDXzB4MjIoS0VSTl9OT1RJQ0UpKTsKKwkJQ0hLX0RFQlVHR0VSX1RSQVBfTUFZQkUoKTsKIAkJYnJlYWs7CiAJLyogMHgyMyAtIERhdGEgQ1BMQiBwcm90ZWN0aW9uIHZpb2xhdGlvbiwgaGFuZGxlZCBoZXJlICovCiAJY2FzZSBWRUNfQ1BMQl9WTDoKIAkJaW5mby5zaV9jb2RlID0gSUxMX0NQTEJfVkk7CiAJCXNpZyA9IFNJR0JVUzsKLQkJcHJpbnRrKEtFUk5fTk9USUNFIEVYQ18weDIzKEtFUk5fTk9USUNFKSk7Ci0JCUNIS19ERUJVR0dFUl9UUkFQKCk7CisJCXZlcmJvc2VfcHJpbnRrKEtFUk5fTk9USUNFIEVYQ18weDIzKEtFUk5fTk9USUNFKSk7CisJCUNIS19ERUJVR0dFUl9UUkFQX01BWUJFKCk7CiAJCWJyZWFrOwogCS8qIDB4MjQgLSBEYXRhIGFjY2VzcyBtaXNhbGlnbmVkLCBoYW5kbGVkIGhlcmUgKi8KIAljYXNlIFZFQ19NSVNBTElfRDoKIAkJaW5mby5zaV9jb2RlID0gQlVTX0FEUkFMTjsKIAkJc2lnID0gU0lHQlVTOwotCQlwcmludGsoS0VSTl9OT1RJQ0UgRVhDXzB4MjQoS0VSTl9OT1RJQ0UpKTsKLQkJQ0hLX0RFQlVHR0VSX1RSQVAoKTsKKwkJdmVyYm9zZV9wcmludGsoS0VSTl9OT1RJQ0UgRVhDXzB4MjQoS0VSTl9OT1RJQ0UpKTsKKwkJQ0hLX0RFQlVHR0VSX1RSQVBfTUFZQkUoKTsKIAkJYnJlYWs7CiAJLyogMHgyNSAtIFVucmVjb3ZlcmFibGUgRXZlbnQsIGhhbmRsZWQgaGVyZSAqLwogCWNhc2UgVkVDX1VOQ09WOgogCQlpbmZvLnNpX2NvZGUgPSBJTExfSUxMRVhDUFQ7CiAJCXNpZyA9IFNJR0lMTDsKLQkJcHJpbnRrKEtFUk5fTk9USUNFIEVYQ18weDI1KEtFUk5fTk9USUNFKSk7Ci0JCUNIS19ERUJVR0dFUl9UUkFQKCk7CisJCXZlcmJvc2VfcHJpbnRrKEtFUk5fTk9USUNFIEVYQ18weDI1KEtFUk5fTk9USUNFKSk7CisJCUNIS19ERUJVR0dFUl9UUkFQX01BWUJFKCk7CiAJCWJyZWFrOwogCS8qIDB4MjYgLSBEYXRhIENQTEIgTWlzcywgbm9ybWFsIGNhc2UgaXMgaGFuZGxlZCBpbiBfY3BsYl9oZHIsCiAJCWVycm9yIGNhc2UgaXMgaGFuZGxlZCBoZXJlICovCiAJY2FzZSBWRUNfQ1BMQl9NOgogCQlpbmZvLnNpX2NvZGUgPSBCVVNfQURSQUxOOwogCQlzaWcgPSBTSUdCVVM7Ci0JCXByaW50ayhLRVJOX05PVElDRSBFWENfMHgyNihLRVJOX05PVElDRSkpOwotCQlDSEtfREVCVUdHRVJfVFJBUCgpOworCQl2ZXJib3NlX3ByaW50ayhLRVJOX05PVElDRSBFWENfMHgyNihLRVJOX05PVElDRSkpOwogCQlicmVhazsKIAkvKiAweDI3IC0gRGF0YSBDUExCIE11bHRpcGxlIEhpdHMgLSBMaW51eCBUcmFwIFplcm8sIGhhbmRsZWQgaGVyZSAqLwogCWNhc2UgVkVDX0NQTEJfTUhJVDoKQEAgLTM2OCwxMSArNDE1LDExIEBACiAJCXNpZyA9IFNJR1NFR1Y7CiAjaWZkZWYgQ09ORklHX0RFQlVHX0hVTlRfRk9SX1pFUk8KIAkJaWYgKHNhdmVkX2RjcGxiX2ZhdWx0X2FkZHIgPCBGSVhFRF9DT0RFX1NUQVJUKQotCQkJcHJpbnRrKEtFUk5fTk9USUNFICJOVUxMIHBvaW50ZXIgYWNjZXNzXG4iKTsKKwkJCXZlcmJvc2VfcHJpbnRrKEtFUk5fTk9USUNFICJOVUxMIHBvaW50ZXIgYWNjZXNzXG4iKTsKIAkJZWxzZQogI2VuZGlmCi0JCQlwcmludGsoS0VSTl9OT1RJQ0UgRVhDXzB4MjcoS0VSTl9OT1RJQ0UpKTsKLQkJQ0hLX0RFQlVHR0VSX1RSQVAoKTsKKwkJCXZlcmJvc2VfcHJpbnRrKEtFUk5fTk9USUNFIEVYQ18weDI3KEtFUk5fTk9USUNFKSk7CisJCUNIS19ERUJVR0dFUl9UUkFQX01BWUJFKCk7CiAJCWJyZWFrOwogCS8qIDB4MjggLSBFbXVsYXRpb24gV2F0Y2hwb2ludCwgaGFuZGxlZCBoZXJlICovCiAJY2FzZSBWRUNfV0FUQ0g6CkBAIC0zOTAsOCArNDM3LDggQEAKIAljYXNlIFZFQ19JU1RSVV9WTDogICAgICAvKiBBRFNQLUJGNTM1IG9ubHkgKE1IKSAqLwogCQlpbmZvLnNpX2NvZGUgPSBCVVNfT1BGRVRDSDsKIAkJc2lnID0gU0lHQlVTOwotCQlwcmludGsoS0VSTl9OT1RJQ0UgIkJGNTM1OiBWRUNfSVNUUlVfVkxcbiIpOwotCQlDSEtfREVCVUdHRVJfVFJBUCgpOworCQl2ZXJib3NlX3ByaW50ayhLRVJOX05PVElDRSAiQkY1MzU6IFZFQ19JU1RSVV9WTFxuIik7CisJCUNIS19ERUJVR0dFUl9UUkFQX01BWUJFKCk7CiAJCWJyZWFrOwogI2Vsc2UKIAkvKiAweDI5IC0gUmVzZXJ2ZWQsIENhdWdodCBieSBkZWZhdWx0ICovCkBAIC00MDAsMjIgKzQ0NywyMSBAQAogCWNhc2UgVkVDX01JU0FMSV9JOgogCQlpbmZvLnNpX2NvZGUgPSBCVVNfQURSQUxOOwogCQlzaWcgPSBTSUdCVVM7Ci0JCXByaW50ayhLRVJOX05PVElDRSBFWENfMHgyQShLRVJOX05PVElDRSkpOwotCQlDSEtfREVCVUdHRVJfVFJBUCgpOworCQl2ZXJib3NlX3ByaW50ayhLRVJOX05PVElDRSBFWENfMHgyQShLRVJOX05PVElDRSkpOworCQlDSEtfREVCVUdHRVJfVFJBUF9NQVlCRSgpOwogCQlicmVhazsKIAkvKiAweDJCIC0gSW5zdHJ1Y3Rpb24gQ1BMQiBwcm90ZWN0aW9uIHZpb2xhdGlvbiwgaGFuZGxlZCBoZXJlICovCiAJY2FzZSBWRUNfQ1BMQl9JX1ZMOgogCQlpbmZvLnNpX2NvZGUgPSBJTExfQ1BMQl9WSTsKIAkJc2lnID0gU0lHQlVTOwotCQlwcmludGsoS0VSTl9OT1RJQ0UgRVhDXzB4MkIoS0VSTl9OT1RJQ0UpKTsKLQkJQ0hLX0RFQlVHR0VSX1RSQVAoKTsKKwkJdmVyYm9zZV9wcmludGsoS0VSTl9OT1RJQ0UgRVhDXzB4MkIoS0VSTl9OT1RJQ0UpKTsKKwkJQ0hLX0RFQlVHR0VSX1RSQVBfTUFZQkUoKTsKIAkJYnJlYWs7CiAJLyogMHgyQyAtIEluc3RydWN0aW9uIENQTEIgbWlzcywgaGFuZGxlZCBpbiBfY3BsYl9oZHIgKi8KIAljYXNlIFZFQ19DUExCX0lfTToKIAkJaW5mby5zaV9jb2RlID0gSUxMX0NQTEJfTUlTUzsKIAkJc2lnID0gU0lHQlVTOwotCQlwcmludGsoS0VSTl9OT1RJQ0UgRVhDXzB4MkMoS0VSTl9OT1RJQ0UpKTsKLQkJQ0hLX0RFQlVHR0VSX1RSQVAoKTsKKwkJdmVyYm9zZV9wcmludGsoS0VSTl9OT1RJQ0UgRVhDXzB4MkMoS0VSTl9OT1RJQ0UpKTsKIAkJYnJlYWs7CiAJLyogMHgyRCAtIEluc3RydWN0aW9uIENQTEIgTXVsdGlwbGUgSGl0cywgaGFuZGxlZCBoZXJlICovCiAJY2FzZSBWRUNfQ1BMQl9JX01ISVQ6CkBAIC00MjMsMTggKzQ2OSwxOCBAQAogCQlzaWcgPSBTSUdTRUdWOwogI2lmZGVmIENPTkZJR19ERUJVR19IVU5UX0ZPUl9aRVJPCiAJCWlmIChzYXZlZF9pY3BsYl9mYXVsdF9hZGRyIDwgRklYRURfQ09ERV9TVEFSVCkKLQkJCXByaW50ayhLRVJOX05PVElDRSAiSnVtcCB0byBOVUxMIGFkZHJlc3NcbiIpOworCQkJdmVyYm9zZV9wcmludGsoS0VSTl9OT1RJQ0UgIkp1bXAgdG8gTlVMTCBhZGRyZXNzXG4iKTsKIAkJZWxzZQogI2VuZGlmCi0JCQlwcmludGsoS0VSTl9OT1RJQ0UgRVhDXzB4MkQoS0VSTl9OT1RJQ0UpKTsKLQkJQ0hLX0RFQlVHR0VSX1RSQVAoKTsKKwkJCXZlcmJvc2VfcHJpbnRrKEtFUk5fTk9USUNFIEVYQ18weDJEKEtFUk5fTk9USUNFKSk7CisJCUNIS19ERUJVR0dFUl9UUkFQX01BWUJFKCk7CiAJCWJyZWFrOwogCS8qIDB4MkUgLSBJbGxlZ2FsIHVzZSBvZiBTdXBlcnZpc29yIFJlc291cmNlLCBoYW5kbGVkIGhlcmUgKi8KIAljYXNlIFZFQ19JTExfUkVTOgogCQlpbmZvLnNpX2NvZGUgPSBJTExfUFJWT1BDOwogCQlzaWcgPSBTSUdJTEw7Ci0JCXByaW50ayhLRVJOX05PVElDRSBFWENfMHgyRShLRVJOX05PVElDRSkpOwotCQlDSEtfREVCVUdHRVJfVFJBUCgpOworCQl2ZXJib3NlX3ByaW50ayhLRVJOX05PVElDRSBFWENfMHgyRShLRVJOX05PVElDRSkpOworCQlDSEtfREVCVUdHRVJfVFJBUF9NQVlCRSgpOwogCQlicmVhazsKIAkvKiAweDJGIC0gUmVzZXJ2ZWQsIENhdWdodCBieSBkZWZhdWx0ICovCiAJLyogMHgzMCAtIFJlc2VydmVkLCBDYXVnaHQgYnkgZGVmYXVsdCAqLwpAQCAtNDYxLDE3ICs1MDcsMTcgQEAKIAkJY2FzZSAoU0VRU1RBVF9IV0VSUkNBVVNFX1NZU1RFTV9NTVIpOgogCQkJaW5mby5zaV9jb2RlID0gQlVTX0FEUkFMTjsKIAkJCXNpZyA9IFNJR0JVUzsKLQkJCXByaW50ayhLRVJOX05PVElDRSBIV0NfeDIoS0VSTl9OT1RJQ0UpKTsKKwkJCXZlcmJvc2VfcHJpbnRrKEtFUk5fTk9USUNFIEhXQ194MihLRVJOX05PVElDRSkpOwogCQkJYnJlYWs7CiAJCS8qIEV4dGVybmFsIE1lbW9yeSBBZGRyZXNzaW5nIEVycm9yICovCiAJCWNhc2UgKFNFUVNUQVRfSFdFUlJDQVVTRV9FWFRFUk5fQUREUik6CiAJCQlpbmZvLnNpX2NvZGUgPSBCVVNfQURSRVJSOwogCQkJc2lnID0gU0lHQlVTOwotCQkJcHJpbnRrKEtFUk5fTk9USUNFIEhXQ194MyhLRVJOX05PVElDRSkpOworCQkJdmVyYm9zZV9wcmludGsoS0VSTl9OT1RJQ0UgSFdDX3gzKEtFUk5fTk9USUNFKSk7CiAJCQlicmVhazsKIAkJLyogUGVyZm9ybWFuY2UgTW9uaXRvciBPdmVyZmxvdyAqLwogCQljYXNlIChTRVFTVEFUX0hXRVJSQ0FVU0VfUEVSRl9GTE9XKToKLQkJCXByaW50ayhLRVJOX05PVElDRSBIV0NfeDEyKEtFUk5fTk9USUNFKSk7CisJCQl2ZXJib3NlX3ByaW50ayhLRVJOX05PVElDRSBIV0NfeDEyKEtFUk5fTk9USUNFKSk7CiAJCQlicmVhazsKIAkJLyogUkFJU0UgNSBpbnN0cnVjdGlvbiAqLwogCQljYXNlIChTRVFTVEFUX0hXRVJSQ0FVU0VfUkFJU0VfNSk6CkBAIC00ODEsMjEgKzUyNywyNSBAQAogCQkJcHJpbnRrKEtFUk5fTk9USUNFIEhXQ19kZWZhdWx0KEtFUk5fTk9USUNFKSk7CiAJCQlicmVhazsKIAkJfQotCQlDSEtfREVCVUdHRVJfVFJBUCgpOworCQlDSEtfREVCVUdHRVJfVFJBUF9NQVlCRSgpOwogCQlicmVhazsKKwkvKgorCSAqIFdlIHNob3VsZCBiZSBoYW5kbGluZyBhbGwga25vd24gZXhjZXB0aW9uIHR5cGVzIGFib3ZlLAorCSAqIGlmIHdlIGdldCBoZXJlIHdlIGhpdCBhIHJlc2VydmVkIG9uZSwgc28gcGFuaWMKKwkgKi8KIAlkZWZhdWx0OgotCQlpbmZvLnNpX2NvZGUgPSBUUkFQX0lMTFRSQVA7Ci0JCXNpZyA9IFNJR1RSQVA7Ci0JCXByaW50ayhLRVJOX0VNRVJHICJDYXVnaHQgVW5oYW5kbGVkIEV4Y2VwdGlvbiwgY29kZSA9ICUwOGx4XG4iLAorCQlvb3BzX2luX3Byb2dyZXNzID0gMTsKKwkJaW5mby5zaV9jb2RlID0gSUxMX0lMTFBBUkFPUDsKKwkJc2lnID0gU0lHSUxMOworCQl2ZXJib3NlX3ByaW50ayhLRVJOX0VNRVJHICJDYXVnaHQgVW5oYW5kbGVkIEV4Y2VwdGlvbiwgY29kZSA9ICUwOGx4XG4iLAogCQkJKGZwLT5zZXFzdGF0ICYgU0VRU1RBVF9FWENBVVNFKSk7Ci0JCUNIS19ERUJVR0dFUl9UUkFQKCk7CisJCUNIS19ERUJVR0dFUl9UUkFQX01BWUJFKCk7CiAJCWJyZWFrOwogCX0KIAogCUJVR19PTihzaWcgPT0gMCk7CiAKIAlpZiAoc2lnICE9IFNJR1RSQVApIHsKLQkJdW5zaWduZWQgbG9uZyAqc3RhY2s7CiAJCWR1bXBfYmZpbl9wcm9jZXNzKGZwKTsKIAkJZHVtcF9iZmluX21lbShmcCk7CiAJCXNob3dfcmVncyhmcCk7CkBAIC01MDMsNyArNTUzLDcgQEAKIAkJLyogUHJpbnQgb3V0IHRoZSB0cmFjZSBidWZmZXIgaWYgaXQgbWFrZXMgc2Vuc2UgKi8KICNpZm5kZWYgQ09ORklHX0RFQlVHX0JGSU5fTk9fS0VSTl9IV1RSQUNFCiAJCWlmICh0cmFwbnIgPT0gVkVDX0NQTEJfSV9NIHx8IHRyYXBuciA9PSBWRUNfQ1BMQl9NKQotCQkJcHJpbnRrKEtFUk5fTk9USUNFICJObyB0cmFjZSBzaW5jZSB5b3UgZG8gbm90IGhhdmUgIgorCQkJdmVyYm9zZV9wcmludGsoS0VSTl9OT1RJQ0UgIk5vIHRyYWNlIHNpbmNlIHlvdSBkbyBub3QgaGF2ZSAiCiAJCQkJIkNPTkZJR19ERUJVR19CRklOX05PX0tFUk5fSFdUUkFDRSBlbmFibGVkXG4iCiAJCQkJS0VSTl9OT1RJQ0UgIlxuIik7CiAJCWVsc2UKQEAgLTUxMiwyMCArNTYyLDIyIEBACiAKIAkJaWYgKG9vcHNfaW5fcHJvZ3Jlc3MpIHsKIAkJCS8qIER1bXAgdGhlIGN1cnJlbnQga2VybmVsIHN0YWNrICovCi0JCQlwcmludGsoS0VSTl9OT1RJQ0UgIlxuIiBLRVJOX05PVElDRSAiS2VybmVsIFN0YWNrXG4iKTsKKwkJCXZlcmJvc2VfcHJpbnRrKEtFUk5fTk9USUNFICJcbiIgS0VSTl9OT1RJQ0UgIktlcm5lbCBTdGFja1xuIik7CiAJCQlzaG93X3N0YWNrKGN1cnJlbnQsIE5VTEwpOwotCiAJCQlwcmludF9tb2R1bGVzKCk7CiAjaWZuZGVmIENPTkZJR19BQ0NFU1NfQ0hFQ0sKLQkJCXByaW50ayhLRVJOX0VNRVJHICJQbGVhc2UgdHVybiBvbiAiCisJCQl2ZXJib3NlX3ByaW50ayhLRVJOX0VNRVJHICJQbGVhc2UgdHVybiBvbiAiCiAJCQkgICAgICAgIkNPTkZJR19BQ0NFU1NfQ0hFQ0tcbiIpOwogI2VuZGlmCiAJCQlwYW5pYygiS2VybmVsIGV4Y2VwdGlvbiIpOwogCQl9IGVsc2UgeworI2lmZGVmIENPTkZJR19WRVJCT1NFX0RFQlVHCisJCQl1bnNpZ25lZCBsb25nICpzdGFjazsKIAkJCS8qIER1bXAgdGhlIHVzZXIgc3BhY2Ugc3RhY2sgKi8KIAkJCXN0YWNrID0gKHVuc2lnbmVkIGxvbmcgKilyZHVzcCgpOwotCQkJcHJpbnRrKEtFUk5fTk9USUNFICJVc2Vyc3BhY2UgU3RhY2tcbiIpOworCQkJdmVyYm9zZV9wcmludGsoS0VSTl9OT1RJQ0UgIlVzZXJzcGFjZSBTdGFja1xuIik7CiAJCQlzaG93X3N0YWNrKE5VTEwsIHN0YWNrKTsKKyNlbmRpZgogCQl9CiAJfQogCkBAIC01NDYsNyArNTk4LDcgQEAKICAqIFNpbWlsYXIgdG8gZ2V0X3VzZXIsIGRvIHNvbWUgYWRkcmVzcyBjaGVja2luZywgdGhlbiBkZXJlZmVyZW5jZQogICogUmV0dXJuIHRydWUgb24gc3VjZXNzLCBmYWxzZSBvbiBiYWQgYWRkcmVzcwogICovCi1ib29sIGdldF9pbnN0cnVjdGlvbih1bnNpZ25lZCBzaG9ydCAqdmFsLCB1bnNpZ25lZCBzaG9ydCAqYWRkcmVzcykKK3N0YXRpYyBib29sIGdldF9pbnN0cnVjdGlvbih1bnNpZ25lZCBzaG9ydCAqdmFsLCB1bnNpZ25lZCBzaG9ydCAqYWRkcmVzcykKIHsKIAogCXVuc2lnbmVkIGxvbmcgYWRkcjsKQEAgLTU5Miw3ICs2NDQsNyBAQAogCiAjaWYgTDFfQ09ERV9MRU5HVEggIT0gMAogCWlmIChhZGRyID49IEwxX0NPREVfU1RBUlQgJiYgKGFkZHIgKyAyKSA8PSAoTDFfQ09ERV9TVEFSVCArIEwxX0NPREVfTEVOR1RIKSkgewotCQlkbWFfbWVtY3B5KHZhbCwgYWRkcmVzcywgMik7CisJCWlzcmFtX21lbWNweSh2YWwsIGFkZHJlc3MsIDIpOwogCQlyZXR1cm4gdHJ1ZTsKIAl9CiAjZW5kaWYKQEAgLTYwNyw0NSArNjU5LDQ4IEBACiAgKiBUaGVzZSBhcmUgdGhlIG5vcm1hbCBpbnN0cnVjdGlvbnMgd2hpY2ggY2F1c2UgY2hhbmdlIG9mIGZsb3csIHdoaWNoCiAgKiB3b3VsZCBiZSBhdCB0aGUgc291cmNlIG9mIHRoZSB0cmFjZSBidWZmZXIKICAqLwotdm9pZCBkZWNvZGVfaW5zdHJ1Y3Rpb24odW5zaWduZWQgc2hvcnQgKmFkZHJlc3MpCisjaWZkZWYgQ09ORklHX0RFQlVHX1ZFUkJPU0UKK3N0YXRpYyB2b2lkIGRlY29kZV9pbnN0cnVjdGlvbih1bnNpZ25lZCBzaG9ydCAqYWRkcmVzcykKIHsKIAl1bnNpZ25lZCBzaG9ydCBvcGNvZGU7CiAKIAlpZiAoZ2V0X2luc3RydWN0aW9uKCZvcGNvZGUsIGFkZHJlc3MpKSB7CiAJCWlmIChvcGNvZGUgPT0gMHgwMDEwKQotCQkJcHJpbnRrKCJSVFMiKTsKKwkJCXZlcmJvc2VfcHJpbnRrKCJSVFMiKTsKIAkJZWxzZSBpZiAob3Bjb2RlID09IDB4MDAxMSkKLQkJCXByaW50aygiUlRJIik7CisJCQl2ZXJib3NlX3ByaW50aygiUlRJIik7CiAJCWVsc2UgaWYgKG9wY29kZSA9PSAweDAwMTIpCi0JCQlwcmludGsoIlJUWCIpOworCQkJdmVyYm9zZV9wcmludGsoIlJUWCIpOwogCQllbHNlIGlmIChvcGNvZGUgPj0gMHgwMDUwICYmIG9wY29kZSA8PSAweDAwNTcpCi0JCQlwcmludGsoIkpVTVAgKFAlaSkiLCBvcGNvZGUgJiA3KTsKKwkJCXZlcmJvc2VfcHJpbnRrKCJKVU1QIChQJWkpIiwgb3Bjb2RlICYgNyk7CiAJCWVsc2UgaWYgKG9wY29kZSA+PSAweDAwNjAgJiYgb3Bjb2RlIDw9IDB4MDA2NykKLQkJCXByaW50aygiQ0FMTCAoUCVpKSIsIG9wY29kZSAmIDcpOworCQkJdmVyYm9zZV9wcmludGsoIkNBTEwgKFAlaSkiLCBvcGNvZGUgJiA3KTsKIAkJZWxzZSBpZiAob3Bjb2RlID49IDB4MDA3MCAmJiBvcGNvZGUgPD0gMHgwMDc3KQotCQkJcHJpbnRrKCJDQUxMIChQQytQJWkpIiwgb3Bjb2RlICYgNyk7CisJCQl2ZXJib3NlX3ByaW50aygiQ0FMTCAoUEMrUCVpKSIsIG9wY29kZSAmIDcpOwogCQllbHNlIGlmIChvcGNvZGUgPj0gMHgwMDgwICYmIG9wY29kZSA8PSAweDAwODcpCi0JCQlwcmludGsoIkpVTVAgKFBDK1AlaSkiLCBvcGNvZGUgJiA3KTsKKwkJCXZlcmJvc2VfcHJpbnRrKCJKVU1QIChQQytQJWkpIiwgb3Bjb2RlICYgNyk7CiAJCWVsc2UgaWYgKChvcGNvZGUgPj0gMHgxMDAwICYmIG9wY29kZSA8PSAweDEzRkYpIHx8IChvcGNvZGUgPj0gMHgxODAwICYmIG9wY29kZSA8PSAweDFCRkYpKQotCQkJcHJpbnRrKCJJRiAhQ0MgSlVNUCIpOworCQkJdmVyYm9zZV9wcmludGsoIklGICFDQyBKVU1QIik7CiAJCWVsc2UgaWYgKChvcGNvZGUgPj0gMHgxNDAwICYmIG9wY29kZSA8PSAweDE3ZmYpIHx8IChvcGNvZGUgPj0gMHgxYzAwICYmIG9wY29kZSA8PSAweDFmZmYpKQotCQkJcHJpbnRrKCJJRiBDQyBKVU1QIik7CisJCQl2ZXJib3NlX3ByaW50aygiSUYgQ0MgSlVNUCIpOwogCQllbHNlIGlmIChvcGNvZGUgPj0gMHgyMDAwICYmIG9wY29kZSA8PSAweDJmZmYpCi0JCQlwcmludGsoIkpVTVAuUyIpOworCQkJdmVyYm9zZV9wcmludGsoIkpVTVAuUyIpOwogCQllbHNlIGlmIChvcGNvZGUgPj0gMHhlMDgwICYmIG9wY29kZSA8PSAweGUwZmYpCi0JCQlwcmludGsoIkxTRVRVUCIpOworCQkJdmVyYm9zZV9wcmludGsoIkxTRVRVUCIpOwogCQllbHNlIGlmIChvcGNvZGUgPj0gMHhlMjAwICYmIG9wY29kZSA8PSAweGUyZmYpCi0JCQlwcmludGsoIkpVTVAuTCIpOworCQkJdmVyYm9zZV9wcmludGsoIkpVTVAuTCIpOwogCQllbHNlIGlmIChvcGNvZGUgPj0gMHhlMzAwICYmIG9wY29kZSA8PSAweGUzZmYpCi0JCQlwcmludGsoIkNBTEwgcGNyZWwiKTsKKwkJCXZlcmJvc2VfcHJpbnRrKCJDQUxMIHBjcmVsIik7CiAJCWVsc2UKLQkJCXByaW50aygiMHglMDR4Iiwgb3Bjb2RlKTsKKwkJCXZlcmJvc2VfcHJpbnRrKCIweCUwNHgiLCBvcGNvZGUpOwogCX0KIAogfQorI2VuZGlmCiAKIHZvaWQgZHVtcF9iZmluX3RyYWNlX2J1ZmZlcih2b2lkKQogeworI2lmZGVmIENPTkZJR19ERUJVR19WRVJCT1NFCiAjaWZkZWYgQ09ORklHX0RFQlVHX0JGSU5fSFdUUkFDRV9PTgogCWludCB0ZmxhZ3MsIGkgPSAwOwogCWNoYXIgYnVmWzE1MF07CkBAIC03MDEsNiArNzU2LDcgQEAKIAogCXRyYWNlX2J1ZmZlcl9yZXN0b3JlKHRmbGFncyk7CiAjZW5kaWYKKyNlbmRpZgogfQogRVhQT1JUX1NZTUJPTChkdW1wX2JmaW5fdHJhY2VfYnVmZmVyKTsKIApAQCAtNzA4LDcgKzc2NCw3IEBACiAgKiBDaGVja3MgdG8gc2VlIGlmIHRoZSBhZGRyZXNzIHBvaW50ZWQgdG8gaXMgZWl0aGVyIGEKICAqIDE2LWJpdCBDQUxMIGluc3RydWN0aW9uLCBvciBhIDMyLWJpdCBDQUxMIGluc3RydWN0aW9uCiAgKi8KLWJvb2wgaXNfYmZpbl9jYWxsKHVuc2lnbmVkIHNob3J0ICphZGRyKQorc3RhdGljIGJvb2wgaXNfYmZpbl9jYWxsKHVuc2lnbmVkIHNob3J0ICphZGRyKQogewogCXVuc2lnbmVkIHNob3J0IG9wY29kZSA9IDAsICppbnNfYWRkcjsKIAlpbnNfYWRkciA9ICh1bnNpZ25lZCBzaG9ydCAqKWFkZHI7CkBAIC03MzAsOCArNzg2LDEwIEBACiAJcmV0dXJuIGZhbHNlOwogCiB9CisKIHZvaWQgc2hvd19zdGFjayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIHVuc2lnbmVkIGxvbmcgKnN0YWNrKQogeworI2lmZGVmIENPTkZJR19QUklOVEsKIAl1bnNpZ25lZCBpbnQgKmFkZHIsICplbmRzdGFjaywgKmZwID0gMCwgKmZyYW1lOwogCXVuc2lnbmVkIHNob3J0ICppbnNfYWRkcjsKIAljaGFyIGJ1ZlsxNTBdOwpAQCAtNzU2LDggKzgxNCwxMCBAQAogCX0gZWxzZQogCQllbmRzdGFjayA9ICh1bnNpZ25lZCBpbnQgKilQQUdFX0FMSUdOKCh1bnNpZ25lZCBpbnQpc3RhY2spOwogCisJcHJpbnRrKEtFUk5fTk9USUNFICJTdGFjayBpbmZvOlxuIik7CiAJZGVjb2RlX2FkZHJlc3MoYnVmLCAodW5zaWduZWQgaW50KXN0YWNrKTsKLQlwcmludGsoS0VSTl9OT1RJQ0UgIlN0YWNrIGluZm86XG4iIEtFUk5fTk9USUNFICIgU1A6IFsweCVwXSAlc1xuIiwgc3RhY2ssIGJ1Zik7CisJcHJpbnRrKEtFUk5fTk9USUNFICIgU1A6IFsweCVwXSAlc1xuIiwgc3RhY2ssIGJ1Zik7CisKIAlhZGRyID0gKHVuc2lnbmVkIGludCAqKSgodW5zaWduZWQgaW50KXN0YWNrICYgfjB4M0YpOwogCiAJLyogRmlyc3QgdGhpbmcgaXMgdG8gbG9vayBmb3IgYSBmcmFtZSBwb2ludGVyICovCkBAIC04NDgsNyArOTA4LDcgQEAKIAkJaWYgKCFqKQogCQkJcHJpbnRrKCJcbiIpOwogCX0KLQorI2VuZGlmCiB9CiAKIHZvaWQgZHVtcF9zdGFjayh2b2lkKQpAQCAtODY2LDM4ICs5MjYsMzkgQEAKIAogdm9pZCBkdW1wX2JmaW5fcHJvY2VzcyhzdHJ1Y3QgcHRfcmVncyAqZnApCiB7CisjaWZkZWYgQ09ORklHX0RFQlVHX1ZFUkJPU0UKIAkvKiBXZSBzaG91bGQgYmUgYWJsZSB0byBsb29rIGF0IGZwLT5pcGVuZCwgYnV0IHdlIGRvbid0IHB1c2ggaXQgb24gdGhlCiAJICogc3RhY2sgYWxsIHRoZSB0aW1lLCBzbyBkbyB0aGlzIHVudGlsIHdlIGZpeCB0aGF0ICovCiAJdW5zaWduZWQgaW50IGNvbnRleHQgPSBiZmluX3JlYWRfSVBFTkQoKTsKIAogCWlmIChvb3BzX2luX3Byb2dyZXNzKQotCQlwcmludGsoS0VSTl9FTUVSRyAiS2VybmVsIE9PUFMgaW4gcHJvZ3Jlc3NcbiIpOworCQl2ZXJib3NlX3ByaW50ayhLRVJOX0VNRVJHICJLZXJuZWwgT09QUyBpbiBwcm9ncmVzc1xuIik7CiAKIAlpZiAoY29udGV4dCAmIDB4MDAyMCAmJiAoZnAtPnNlcXN0YXQgJiBTRVFTVEFUX0VYQ0FVU0UpID09IFZFQ19IV0VSUikKLQkJcHJpbnRrKEtFUk5fTk9USUNFICJIVyBFcnJvciBjb250ZXh0XG4iKTsKKwkJdmVyYm9zZV9wcmludGsoS0VSTl9OT1RJQ0UgIkhXIEVycm9yIGNvbnRleHRcbiIpOwogCWVsc2UgaWYgKGNvbnRleHQgJiAweDAwMjApCi0JCXByaW50ayhLRVJOX05PVElDRSAiRGVmZXJyZWQgRXhjZXB0aW9uIGNvbnRleHRcbiIpOworCQl2ZXJib3NlX3ByaW50ayhLRVJOX05PVElDRSAiRGVmZXJyZWQgRXhjZXB0aW9uIGNvbnRleHRcbiIpOwogCWVsc2UgaWYgKGNvbnRleHQgJiAweDNGQzApCi0JCXByaW50ayhLRVJOX05PVElDRSAiSW50ZXJydXB0IGNvbnRleHRcbiIpOworCQl2ZXJib3NlX3ByaW50ayhLRVJOX05PVElDRSAiSW50ZXJydXB0IGNvbnRleHRcbiIpOwogCWVsc2UgaWYgKGNvbnRleHQgJiAweDQwMDApCi0JCXByaW50ayhLRVJOX05PVElDRSAiRGVmZXJyZWQgSW50ZXJydXB0IGNvbnRleHRcbiIpOworCQl2ZXJib3NlX3ByaW50ayhLRVJOX05PVElDRSAiRGVmZXJyZWQgSW50ZXJydXB0IGNvbnRleHRcbiIpOwogCWVsc2UgaWYgKGNvbnRleHQgJiAweDgwMDApCi0JCXByaW50ayhLRVJOX05PVElDRSAiS2VybmVsIHByb2Nlc3MgY29udGV4dFxuIik7CisJCXZlcmJvc2VfcHJpbnRrKEtFUk5fTk9USUNFICJLZXJuZWwgcHJvY2VzcyBjb250ZXh0XG4iKTsKIAogCS8qIEJlY2F1c2Ugd2UgYXJlIGNyYXNoaW5nLCBhbmQgcG9pbnRlcnMgY291bGQgYmUgYmFkLCB3ZSBjaGVjayB0aGluZ3MKIAkgKiBwcmV0dHkgY2xvc2VseSBiZWZvcmUgd2UgdXNlIHRoZW0KIAkgKi8KIAlpZiAoKHVuc2lnbmVkIGxvbmcpY3VycmVudCA+PSBGSVhFRF9DT0RFX1NUQVJUICYmCiAJICAgICEoKHVuc2lnbmVkIGxvbmcpY3VycmVudCAmIDB4MykgJiYgY3VycmVudC0+cGlkKSB7Ci0JCXByaW50ayhLRVJOX05PVElDRSAiQ1VSUkVOVCBQUk9DRVNTOlxuIik7CisJCXZlcmJvc2VfcHJpbnRrKEtFUk5fTk9USUNFICJDVVJSRU5UIFBST0NFU1M6XG4iKTsKIAkJaWYgKGN1cnJlbnQtPmNvbW0gPj0gKGNoYXIgKilGSVhFRF9DT0RFX1NUQVJUKQotCQkJcHJpbnRrKEtFUk5fTk9USUNFICJDT01NPSVzIFBJRD0lZFxuIiwKKwkJCXZlcmJvc2VfcHJpbnRrKEtFUk5fTk9USUNFICJDT01NPSVzIFBJRD0lZFxuIiwKIAkJCQljdXJyZW50LT5jb21tLCBjdXJyZW50LT5waWQpOwogCQllbHNlCi0JCQlwcmludGsoS0VSTl9OT1RJQ0UgIkNPTU09IGludmFsaWRcbiIpOworCQkJdmVyYm9zZV9wcmludGsoS0VSTl9OT1RJQ0UgIkNPTU09IGludmFsaWRcbiIpOwogCiAJCWlmICghKCh1bnNpZ25lZCBsb25nKWN1cnJlbnQtPm1tICYgMHgzKSAmJiAodW5zaWduZWQgbG9uZyljdXJyZW50LT5tbSA+PSBGSVhFRF9DT0RFX1NUQVJUKQotCQkJcHJpbnRrKEtFUk5fTk9USUNFICAiVEVYVCA9IDB4JXAtMHglcCAgICAgICAgREFUQSA9IDB4JXAtMHglcFxuIgorCQkJdmVyYm9zZV9wcmludGsoS0VSTl9OT1RJQ0UgICJURVhUID0gMHglcC0weCVwICAgICAgICBEQVRBID0gMHglcC0weCVwXG4iCiAJCQkJS0VSTl9OT1RJQ0UgIiBCU1MgPSAweCVwLTB4JXAgIFVTRVItU1RBQ0sgPSAweCVwXG4iCiAJCQkJS0VSTl9OT1RJQ0UgIlxuIiwKIAkJCQkodm9pZCAqKWN1cnJlbnQtPm1tLT5zdGFydF9jb2RlLApAQCAtOTA4LDM4ICs5NjksNDAgQEAKIAkJCQkodm9pZCAqKWN1cnJlbnQtPm1tLT5icmssCiAJCQkJKHZvaWQgKiljdXJyZW50LT5tbS0+c3RhcnRfc3RhY2spOwogCQllbHNlCi0JCQlwcmludGsoS0VSTl9OT1RJQ0UgImludmFsaWQgbW1cbiIpOworCQkJdmVyYm9zZV9wcmludGsoS0VSTl9OT1RJQ0UgImludmFsaWQgbW1cbiIpOwogCX0gZWxzZQotCQlwcmludGsoS0VSTl9OT1RJQ0UgIlxuIiBLRVJOX05PVElDRQorCQl2ZXJib3NlX3ByaW50ayhLRVJOX05PVElDRSAiXG4iIEtFUk5fTk9USUNFCiAJCSAgICAgIk5vIFZhbGlkIHByb2Nlc3MgaW4gY3VycmVudCBjb250ZXh0XG4iKTsKKyNlbmRpZgogfQogCiB2b2lkIGR1bXBfYmZpbl9tZW0oc3RydWN0IHB0X3JlZ3MgKmZwKQogeworI2lmZGVmIENPTkZJR19ERUJVR19WRVJCT1NFCiAJdW5zaWduZWQgc2hvcnQgKmFkZHIsICplcnJhZGRyLCB2YWwgPSAwLCBlcnIgPSAwOwogCWNoYXIgc3RpID0gMCwgYnVmWzZdOwogCiAJZXJyYWRkciA9ICh2b2lkICopZnAtPnBjOwogCi0JcHJpbnRrKEtFUk5fTk9USUNFICJyZXR1cm4gYWRkcmVzczogWzB4JXBdOyBjb250ZW50cyBvZjoiLCBlcnJhZGRyKTsKKwl2ZXJib3NlX3ByaW50ayhLRVJOX05PVElDRSAicmV0dXJuIGFkZHJlc3M6IFsweCVwXTsgY29udGVudHMgb2Y6IiwgZXJyYWRkcik7CiAKIAlmb3IgKGFkZHIgPSAodW5zaWduZWQgc2hvcnQgKikoKHVuc2lnbmVkIGxvbmcpZXJyYWRkciAmIH4weEYpIC0gMHgxMDsKIAkgICAgIGFkZHIgPCAodW5zaWduZWQgc2hvcnQgKikoKHVuc2lnbmVkIGxvbmcpZXJyYWRkciAmIH4weEYpICsgMHgxMDsKIAkgICAgIGFkZHIrKykgewogCQlpZiAoISgodW5zaWduZWQgbG9uZylhZGRyICYgMHhGKSkKLQkJCXByaW50aygiXG4iIEtFUk5fTk9USUNFICIweCVwOiAiLCBhZGRyKTsKKwkJCXZlcmJvc2VfcHJpbnRrKCJcbiIgS0VSTl9OT1RJQ0UgIjB4JXA6ICIsIGFkZHIpOwogCi0JCWlmIChnZXRfaW5zdHJ1Y3Rpb24oJnZhbCwgYWRkcikpIHsKKwkJaWYgKCFnZXRfaW5zdHJ1Y3Rpb24oJnZhbCwgYWRkcikpIHsKIAkJCQl2YWwgPSAwOwogCQkJCXNwcmludGYoYnVmLCAiPz8/PyIpOwogCQl9IGVsc2UKIAkJCXNwcmludGYoYnVmLCAiJTA0eCIsIHZhbCk7CiAKIAkJaWYgKGFkZHIgPT0gZXJyYWRkcikgewotCQkJcHJpbnRrKCJbJXNdIiwgYnVmKTsKKwkJCXZlcmJvc2VfcHJpbnRrKCJbJXNdIiwgYnVmKTsKIAkJCWVyciA9IHZhbDsKIAkJfSBlbHNlCi0JCQlwcmludGsoIiAlcyAiLCBidWYpOworCQkJdmVyYm9zZV9wcmludGsoIiAlcyAiLCBidWYpOwogCiAJCS8qIERvIGFueSBwcmV2aW91cyBpbnN0cnVjdGlvbnMgdHVybiBvbiBpbnRlcnJ1cHRzPyAqLwogCQlpZiAoYWRkciA8PSBlcnJhZGRyICYmCQkJCS8qIGluIHRoZSBwYXN0ICovCkBAIC05NDgsMTQgKzEwMTEsMTQgQEAKIAkJCXN0aSA9IDE7CiAJfQogCi0JcHJpbnRrKCJcbiIpOworCXZlcmJvc2VfcHJpbnRrKCJcbiIpOwogCiAJLyogSGFyZHdhcmUgZXJyb3IgaW50ZXJydXB0cyBjYW4gYmUgZGVmZXJyZWQgKi8KIAlpZiAodW5saWtlbHkoc3RpICYmIChmcC0+c2Vxc3RhdCAmIFNFUVNUQVRfRVhDQVVTRSkgPT0gVkVDX0hXRVJSICYmCiAJICAgIG9vcHNfaW5fcHJvZ3Jlc3MpKXsKLQkJcHJpbnRrKEtFUk5fTk9USUNFICJMb29rcyBsaWtlIHRoaXMgd2FzIGEgZGVmZXJyZWQgZXJyb3IgLSBzb3JyeVxuIik7CisJCXZlcmJvc2VfcHJpbnRrKEtFUk5fTk9USUNFICJMb29rcyBsaWtlIHRoaXMgd2FzIGEgZGVmZXJyZWQgZXJyb3IgLSBzb3JyeVxuIik7CiAjaWZuZGVmIENPTkZJR19ERUJVR19IV0VSUgotCQlwcmludGsoS0VSTl9OT1RJQ0UgIlRoZSByZW1haW5pbmcgbWVzc2FnZSBtYXkgYmUgbWVhbmluZ2xlc3NcbiIKKwkJdmVyYm9zZV9wcmludGsoS0VSTl9OT1RJQ0UgIlRoZSByZW1haW5pbmcgbWVzc2FnZSBtYXkgYmUgbWVhbmluZ2xlc3NcbiIKIAkJCUtFUk5fTk9USUNFICJZb3Ugc2hvdWxkIGVuYWJsZSBDT05GSUdfREVCVUdfSFdFUlIgdG8gZ2V0IGEiCiAJCQkgIiBiZXR0ZXIgaWRlYSB3aGVyZSBpdCBjYW1lIGZyb21cbiIpOwogI2Vsc2UKQEAgLTk2OSwzNCArMTAzMiw0NyBAQAogCQkJLyogQW5kIHRoZSBsYXN0IFJFVEkgcG9pbnRzIHRvIHRoZSBjdXJyZW50IHVzZXJzcGFjZSBjb250ZXh0ICovCiAJCQlpZiAoKGZwICsgMSktPnBjID49IGN1cnJlbnQtPm1tLT5zdGFydF9jb2RlICYmCiAJCQkgICAgKGZwICsgMSktPnBjIDw9IGN1cnJlbnQtPm1tLT5lbmRfY29kZSkgewotCQkJCXByaW50ayhLRVJOX05PVElDRSAiSXQgbWlnaHQgYmUgYmV0dGVyIHRvIGxvb2sgYXJvdW5kIGhlcmUgOiBcbiIpOwotCQkJCXByaW50ayhLRVJOX05PVElDRSAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIik7CisJCQkJdmVyYm9zZV9wcmludGsoS0VSTl9OT1RJQ0UgIkl0IG1pZ2h0IGJlIGJldHRlciB0byBsb29rIGFyb3VuZCBoZXJlIDogXG4iKTsKKwkJCQl2ZXJib3NlX3ByaW50ayhLRVJOX05PVElDRSAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIik7CiAJCQkJc2hvd19yZWdzKGZwICsgMSk7Ci0JCQkJcHJpbnRrKEtFUk5fTk9USUNFICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iKTsKKwkJCQl2ZXJib3NlX3ByaW50ayhLRVJOX05PVElDRSAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIik7CiAJCQl9CiAJCX0KICNlbmRpZgogCX0KKyNlbmRpZgogfQogCiB2b2lkIHNob3dfcmVncyhzdHJ1Y3QgcHRfcmVncyAqZnApCiB7CisjaWZkZWYgQ09ORklHX0RFQlVHX1ZFUkJPU0UKIAljaGFyIGJ1ZiBbMTUwXTsKIAlzdHJ1Y3QgaXJxYWN0aW9uICphY3Rpb247CiAJdW5zaWduZWQgaW50IGk7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCXByaW50ayhLRVJOX05PVElDRSAiXG4iIEtFUk5fTk9USUNFICJTRVFVRU5DRVIgU1RBVFVTOlx0XHQlc1xuIiwgcHJpbnRfdGFpbnRlZCgpKTsKLQlwcmludGsoS0VSTl9OT1RJQ0UgIiBTRVFTVEFUOiAlMDhseCAgSVBFTkQ6ICUwNGx4ICBTWVNDRkc6ICUwNGx4XG4iLAorCXZlcmJvc2VfcHJpbnRrKEtFUk5fTk9USUNFICJcbiIgS0VSTl9OT1RJQ0UgIlNFUVVFTkNFUiBTVEFUVVM6XHRcdCVzXG4iLCBwcmludF90YWludGVkKCkpOworCXZlcmJvc2VfcHJpbnRrKEtFUk5fTk9USUNFICIgU0VRU1RBVDogJTA4bHggIElQRU5EOiAlMDRseCAgU1lTQ0ZHOiAlMDRseFxuIiwKIAkJKGxvbmcpZnAtPnNlcXN0YXQsIGZwLT5pcGVuZCwgZnAtPnN5c2NmZyk7Ci0JcHJpbnRrKEtFUk5fTk9USUNFICIgIEhXRVJSQ0FVU0U6IDB4JWx4XG4iLAotCQkoZnAtPnNlcXN0YXQgJiBTRVFTVEFUX0hXRVJSQ0FVU0UpID4+IDE0KTsKLQlwcmludGsoS0VSTl9OT1RJQ0UgIiAgRVhDQVVTRSAgIDogMHglbHhcbiIsCisJaWYgKChmcC0+c2Vxc3RhdCAmIFNFUVNUQVRfRVhDQVVTRSkgPT0gVkVDX0hXRVJSKSB7CisJCXZlcmJvc2VfcHJpbnRrKEtFUk5fTk9USUNFICIgIEhXRVJSQ0FVU0U6IDB4JWx4XG4iLAorCQkJKGZwLT5zZXFzdGF0ICYgU0VRU1RBVF9IV0VSUkNBVVNFKSA+PiAxNCk7CisjaWZkZWYgRUJJVV9FUlJNU1QKKwkJLyogSWYgdGhlIGVycm9yIHdhcyBmcm9tIHRoZSBFQklVLCBwcmludCBpdCBvdXQgKi8KKwkJaWYgKGJmaW5fcmVhZF9FQklVX0VSUk1TVCgpICYgQ09SRV9FUlJPUikgeworCQkJdmVyYm9zZV9wcmludGsoS0VSTl9OT1RJQ0UgIiAgRUJJVSBFcnJvciBSZWFzb24gIDogMHglMDR4XG4iLAorCQkJCWJmaW5fcmVhZF9FQklVX0VSUk1TVCgpKTsKKwkJCXZlcmJvc2VfcHJpbnRrKEtFUk5fTk9USUNFICIgIEVCSVUgRXJyb3IgQWRkcmVzcyA6IDB4JTA4eFxuIiwKKwkJCQliZmluX3JlYWRfRUJJVV9FUlJBREQoKSk7CisJCX0KKyNlbmRpZgorCX0KKwl2ZXJib3NlX3ByaW50ayhLRVJOX05PVElDRSAiICBFWENBVVNFICAgOiAweCVseFxuIiwKIAkJZnAtPnNlcXN0YXQgJiBTRVFTVEFUX0VYQ0FVU0UpOwogCWZvciAoaSA9IDY7IGkgPD0gMTUgOyBpKyspIHsKIAkJaWYgKGZwLT5pcGVuZCAmICgxIDw8IGkpKSB7CiAJCQlkZWNvZGVfYWRkcmVzcyhidWYsIGJmaW5fcmVhZDMyKEVWVDAgKyA0KmkpKTsKLQkJCXByaW50ayhLRVJOX05PVElDRSAiICBwaHlzaWNhbCBJVkclaSBhc3NlcnRlZCA6ICVzXG4iLCBpLCBidWYpOworCQkJdmVyYm9zZV9wcmludGsoS0VSTl9OT1RJQ0UgIiAgcGh5c2ljYWwgSVZHJWkgYXNzZXJ0ZWQgOiAlc1xuIiwgaSwgYnVmKTsKIAkJfQogCX0KIApAQCAtMTAwOSw2NCArMTA4NSw2NSBAQAogCQkJCWdvdG8gdW5sb2NrOwogCiAJCQlkZWNvZGVfYWRkcmVzcyhidWYsICh1bnNpZ25lZCBpbnQpYWN0aW9uLT5oYW5kbGVyKTsKLQkJCXByaW50ayhLRVJOX05PVElDRSAiICBsb2dpY2FsIGlycSAlM2QgbWFwcGVkICA6ICVzIiwgaSwgYnVmKTsKKwkJCXZlcmJvc2VfcHJpbnRrKEtFUk5fTk9USUNFICIgIGxvZ2ljYWwgaXJxICUzZCBtYXBwZWQgIDogJXMiLCBpLCBidWYpOwogCQkJZm9yIChhY3Rpb24gPSBhY3Rpb24tPm5leHQ7IGFjdGlvbjsgYWN0aW9uID0gYWN0aW9uLT5uZXh0KSB7CiAJCQkJZGVjb2RlX2FkZHJlc3MoYnVmLCAodW5zaWduZWQgaW50KWFjdGlvbi0+aGFuZGxlcik7Ci0JCQkJcHJpbnRrKCIsICVzIiwgYnVmKTsKKwkJCQl2ZXJib3NlX3ByaW50aygiLCAlcyIsIGJ1Zik7CiAJCQl9Ci0JCQlwcmludGsoIlxuIik7CisJCQl2ZXJib3NlX3ByaW50aygiXG4iKTsKIHVubG9jazoKIAkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlycV9kZXNjW2ldLmxvY2ssIGZsYWdzKTsKIAkJfQogCX0KIAogCWRlY29kZV9hZGRyZXNzKGJ1ZiwgZnAtPnJldGUpOwotCXByaW50ayhLRVJOX05PVElDRSAiIFJFVEU6ICVzXG4iLCBidWYpOworCXZlcmJvc2VfcHJpbnRrKEtFUk5fTk9USUNFICIgUkVURTogJXNcbiIsIGJ1Zik7CiAJZGVjb2RlX2FkZHJlc3MoYnVmLCBmcC0+cmV0bik7Ci0JcHJpbnRrKEtFUk5fTk9USUNFICIgUkVUTjogJXNcbiIsIGJ1Zik7CisJdmVyYm9zZV9wcmludGsoS0VSTl9OT1RJQ0UgIiBSRVROOiAlc1xuIiwgYnVmKTsKIAlkZWNvZGVfYWRkcmVzcyhidWYsIGZwLT5yZXR4KTsKLQlwcmludGsoS0VSTl9OT1RJQ0UgIiBSRVRYOiAlc1xuIiwgYnVmKTsKKwl2ZXJib3NlX3ByaW50ayhLRVJOX05PVElDRSAiIFJFVFg6ICVzXG4iLCBidWYpOwogCWRlY29kZV9hZGRyZXNzKGJ1ZiwgZnAtPnJldHMpOwotCXByaW50ayhLRVJOX05PVElDRSAiIFJFVFM6ICVzXG4iLCBidWYpOworCXZlcmJvc2VfcHJpbnRrKEtFUk5fTk9USUNFICIgUkVUUzogJXNcbiIsIGJ1Zik7CiAJZGVjb2RlX2FkZHJlc3MoYnVmLCBmcC0+cGMpOwotCXByaW50ayhLRVJOX05PVElDRSAiIFBDICA6ICVzXG4iLCBidWYpOworCXZlcmJvc2VfcHJpbnRrKEtFUk5fTk9USUNFICIgUEMgIDogJXNcbiIsIGJ1Zik7CiAKIAlpZiAoKChsb25nKWZwLT5zZXFzdGF0ICYgIFNFUVNUQVRfRVhDQVVTRSkgJiYKIAkgICAgKCgobG9uZylmcC0+c2Vxc3RhdCAmIFNFUVNUQVRfRVhDQVVTRSkgIT0gVkVDX0hXRVJSKSkgewogCQlkZWNvZGVfYWRkcmVzcyhidWYsIHNhdmVkX2RjcGxiX2ZhdWx0X2FkZHIpOwotCQlwcmludGsoS0VSTl9OT1RJQ0UgIkRDUExCX0ZBVUxUX0FERFI6ICVzXG4iLCBidWYpOworCQl2ZXJib3NlX3ByaW50ayhLRVJOX05PVElDRSAiRENQTEJfRkFVTFRfQUREUjogJXNcbiIsIGJ1Zik7CiAJCWRlY29kZV9hZGRyZXNzKGJ1Ziwgc2F2ZWRfaWNwbGJfZmF1bHRfYWRkcik7Ci0JCXByaW50ayhLRVJOX05PVElDRSAiSUNQTEJfRkFVTFRfQUREUjogJXNcbiIsIGJ1Zik7CisJCXZlcmJvc2VfcHJpbnRrKEtFUk5fTk9USUNFICJJQ1BMQl9GQVVMVF9BRERSOiAlc1xuIiwgYnVmKTsKIAl9CiAKLQlwcmludGsoS0VSTl9OT1RJQ0UgIlxuIiBLRVJOX05PVElDRSAiUFJPQ0VTU09SIFNUQVRFOlxuIik7Ci0JcHJpbnRrKEtFUk5fTk9USUNFICIgUjAgOiAlMDhseCAgICBSMSA6ICUwOGx4ICAgIFIyIDogJTA4bHggICAgUjMgOiAlMDhseFxuIiwKKwl2ZXJib3NlX3ByaW50ayhLRVJOX05PVElDRSAiXG4iIEtFUk5fTk9USUNFICJQUk9DRVNTT1IgU1RBVEU6XG4iKTsKKwl2ZXJib3NlX3ByaW50ayhLRVJOX05PVElDRSAiIFIwIDogJTA4bHggICAgUjEgOiAlMDhseCAgICBSMiA6ICUwOGx4ICAgIFIzIDogJTA4bHhcbiIsCiAJCWZwLT5yMCwgZnAtPnIxLCBmcC0+cjIsIGZwLT5yMyk7Ci0JcHJpbnRrKEtFUk5fTk9USUNFICIgUjQgOiAlMDhseCAgICBSNSA6ICUwOGx4ICAgIFI2IDogJTA4bHggICAgUjcgOiAlMDhseFxuIiwKKwl2ZXJib3NlX3ByaW50ayhLRVJOX05PVElDRSAiIFI0IDogJTA4bHggICAgUjUgOiAlMDhseCAgICBSNiA6ICUwOGx4ICAgIFI3IDogJTA4bHhcbiIsCiAJCWZwLT5yNCwgZnAtPnI1LCBmcC0+cjYsIGZwLT5yNyk7Ci0JcHJpbnRrKEtFUk5fTk9USUNFICIgUDAgOiAlMDhseCAgICBQMSA6ICUwOGx4ICAgIFAyIDogJTA4bHggICAgUDMgOiAlMDhseFxuIiwKKwl2ZXJib3NlX3ByaW50ayhLRVJOX05PVElDRSAiIFAwIDogJTA4bHggICAgUDEgOiAlMDhseCAgICBQMiA6ICUwOGx4ICAgIFAzIDogJTA4bHhcbiIsCiAJCWZwLT5wMCwgZnAtPnAxLCBmcC0+cDIsIGZwLT5wMyk7Ci0JcHJpbnRrKEtFUk5fTk9USUNFICIgUDQgOiAlMDhseCAgICBQNSA6ICUwOGx4ICAgIEZQIDogJTA4bHggICAgU1AgOiAlMDhseFxuIiwKKwl2ZXJib3NlX3ByaW50ayhLRVJOX05PVElDRSAiIFA0IDogJTA4bHggICAgUDUgOiAlMDhseCAgICBGUCA6ICUwOGx4ICAgIFNQIDogJTA4bHhcbiIsCiAJCWZwLT5wNCwgZnAtPnA1LCBmcC0+ZnAsIChsb25nKWZwKTsKLQlwcmludGsoS0VSTl9OT1RJQ0UgIiBMQjA6ICUwOGx4ICAgIExUMDogJTA4bHggICAgTEMwOiAlMDhseFxuIiwKKwl2ZXJib3NlX3ByaW50ayhLRVJOX05PVElDRSAiIExCMDogJTA4bHggICAgTFQwOiAlMDhseCAgICBMQzA6ICUwOGx4XG4iLAogCQlmcC0+bGIwLCBmcC0+bHQwLCBmcC0+bGMwKTsKLQlwcmludGsoS0VSTl9OT1RJQ0UgIiBMQjE6ICUwOGx4ICAgIExUMTogJTA4bHggICAgTEMxOiAlMDhseFxuIiwKKwl2ZXJib3NlX3ByaW50ayhLRVJOX05PVElDRSAiIExCMTogJTA4bHggICAgTFQxOiAlMDhseCAgICBMQzE6ICUwOGx4XG4iLAogCQlmcC0+bGIxLCBmcC0+bHQxLCBmcC0+bGMxKTsKLQlwcmludGsoS0VSTl9OT1RJQ0UgIiBCMCA6ICUwOGx4ICAgIEwwIDogJTA4bHggICAgTTAgOiAlMDhseCAgICBJMCA6ICUwOGx4XG4iLAorCXZlcmJvc2VfcHJpbnRrKEtFUk5fTk9USUNFICIgQjAgOiAlMDhseCAgICBMMCA6ICUwOGx4ICAgIE0wIDogJTA4bHggICAgSTAgOiAlMDhseFxuIiwKIAkJZnAtPmIwLCBmcC0+bDAsIGZwLT5tMCwgZnAtPmkwKTsKLQlwcmludGsoS0VSTl9OT1RJQ0UgIiBCMSA6ICUwOGx4ICAgIEwxIDogJTA4bHggICAgTTEgOiAlMDhseCAgICBJMSA6ICUwOGx4XG4iLAorCXZlcmJvc2VfcHJpbnRrKEtFUk5fTk9USUNFICIgQjEgOiAlMDhseCAgICBMMSA6ICUwOGx4ICAgIE0xIDogJTA4bHggICAgSTEgOiAlMDhseFxuIiwKIAkJZnAtPmIxLCBmcC0+bDEsIGZwLT5tMSwgZnAtPmkxKTsKLQlwcmludGsoS0VSTl9OT1RJQ0UgIiBCMiA6ICUwOGx4ICAgIEwyIDogJTA4bHggICAgTTIgOiAlMDhseCAgICBJMiA6ICUwOGx4XG4iLAorCXZlcmJvc2VfcHJpbnRrKEtFUk5fTk9USUNFICIgQjIgOiAlMDhseCAgICBMMiA6ICUwOGx4ICAgIE0yIDogJTA4bHggICAgSTIgOiAlMDhseFxuIiwKIAkJZnAtPmIyLCBmcC0+bDIsIGZwLT5tMiwgZnAtPmkyKTsKLQlwcmludGsoS0VSTl9OT1RJQ0UgIiBCMyA6ICUwOGx4ICAgIEwzIDogJTA4bHggICAgTTMgOiAlMDhseCAgICBJMyA6ICUwOGx4XG4iLAorCXZlcmJvc2VfcHJpbnRrKEtFUk5fTk9USUNFICIgQjMgOiAlMDhseCAgICBMMyA6ICUwOGx4ICAgIE0zIDogJTA4bHggICAgSTMgOiAlMDhseFxuIiwKIAkJZnAtPmIzLCBmcC0+bDMsIGZwLT5tMywgZnAtPmkzKTsKLQlwcmludGsoS0VSTl9OT1RJQ0UgIkEwLnc6ICUwOGx4ICAgQTAueDogJTA4bHggICBBMS53OiAlMDhseCAgIEExLng6ICUwOGx4XG4iLAorCXZlcmJvc2VfcHJpbnRrKEtFUk5fTk9USUNFICJBMC53OiAlMDhseCAgIEEwLng6ICUwOGx4ICAgQTEudzogJTA4bHggICBBMS54OiAlMDhseFxuIiwKIAkJZnAtPmEwdywgZnAtPmEweCwgZnAtPmExdywgZnAtPmExeCk7CiAKLQlwcmludGsoS0VSTl9OT1RJQ0UgIlVTUCA6ICUwOGx4ICBBU1RBVDogJTA4bHhcbiIsCisJdmVyYm9zZV9wcmludGsoS0VSTl9OT1RJQ0UgIlVTUCA6ICUwOGx4ICBBU1RBVDogJTA4bHhcbiIsCiAJCXJkdXNwKCksIGZwLT5hc3RhdCk7CiAKLQlwcmludGsoS0VSTl9OT1RJQ0UgIlxuIik7CisJdmVyYm9zZV9wcmludGsoS0VSTl9OT1RJQ0UgIlxuIik7CisjZW5kaWYKIH0KIAogI2lmZGVmIENPTkZJR19TWVNfQkZJTl9TUElOTE9DS19MMQpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTI3L2JvYXJkcy9LY29uZmlnIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTI3L2JvYXJkcy9LY29uZmlnCmluZGV4IDhiZjllNTguLmRmMjI0ZDAgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUyNy9ib2FyZHMvS2NvbmZpZworKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MjcvYm9hcmRzL0tjb25maWcKQEAgLTE0LDQgKzE0LDkgQEAKIAloZWxwCiAJICBDTS1CRjUyNyBzdXBwb3J0IGZvciBFVkFMLSBhbmQgREVWLUJvYXJkLgogCitjb25maWcgQkZJTjUyNl9FWkJSRAorCWJvb2wgIkJGNTI2LUVaQlJEIgorCWhlbHAKKwkgIEJGNTI2LUVaQlJEL0VaS0lUIExpdGUgYm9hcmQgc3VwcG9ydC4KKwogZW5kY2hvaWNlCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MjcvYm9hcmRzL01ha2VmaWxlIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTI3L2JvYXJkcy9NYWtlZmlsZQppbmRleCA3YmE3ZDI1Li5lYjZlZDMzIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MjcvYm9hcmRzL01ha2VmaWxlCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUyNy9ib2FyZHMvTWFrZWZpbGUKQEAgLTQsMyArNCw0IEBACiAKIG9iai0kKENPTkZJR19CRklONTI3X0VaS0lUKSAgICAgICAgICAgICs9IGV6a2l0Lm8KIG9iai0kKENPTkZJR19CRklONTI3X0JMVUVURUNITklYX0NNKSAgICs9IGNtX2JmNTI3Lm8KK29iai0kKENPTkZJR19CRklONTI2X0VaQlJEKSAgICAgICAgICAgICs9IGV6YnJkLm8KZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUyNy9ib2FyZHMvY21fYmY1MjcuYyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUyNy9ib2FyZHMvY21fYmY1MjcuYwppbmRleCBkMjJiYzc3Li45ZWE0NDBiIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MjcvYm9hcmRzL2NtX2JmNTI3LmMKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTI3L2JvYXJkcy9jbV9iZjUyNy5jCkBAIC00MywxMCArNDMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2lycS5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L3VzYi9zbDgxMS5oPgotI2lmIGRlZmluZWQoQ09ORklHX1VTQl9NVVNCX0hEUkMpIHx8IGRlZmluZWQoQ09ORklHX1VTQl9NVVNCX0hEUkNfTU9EVUxFKQogI2luY2x1ZGUgPGxpbnV4L3VzYi9tdXNiLmg+Ci0jZW5kaWYKLSNpbmNsdWRlIDxhc20vY3BsYi5oPgogI2luY2x1ZGUgPGFzbS9kbWEuaD4KICNpbmNsdWRlIDxhc20vYmZpbjV4eF9zcGkuaD4KICNpbmNsdWRlIDxhc20vcmVib290Lmg+CkBAIC0xMzAsNiArMTI3LDE2IEBACiAJfSwKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgbXVzYl9oZHJjX2NvbmZpZyBtdXNiX2NvbmZpZyA9IHsKKwkubXVsdGlwb2ludAk9IDAsCisJLmR5bl9maWZvCT0gMCwKKwkuc29mdF9jb24JPSAxLAorCS5kbWEJCT0gMSwKKwkubnVtX2Vwcwk9IDcsCisJLmRtYV9jaGFubmVscwk9IDcsCisJLmdwaW9fdnJzZWwJPSBHUElPX1BGMTEsCit9OworCiBzdGF0aWMgc3RydWN0IG11c2JfaGRyY19wbGF0Zm9ybV9kYXRhIG11c2JfcGxhdCA9IHsKICNpZiBkZWZpbmVkKENPTkZJR19VU0JfTVVTQl9PVEcpCiAJLm1vZGUJCT0gTVVTQl9PVEcsCkBAIC0xMzgsNyArMTQ1LDcgQEAKICNlbGlmIGRlZmluZWQoQ09ORklHX1VTQl9HQURHRVRfTVVTQl9IRFJDKQogCS5tb2RlCQk9IE1VU0JfUEVSSVBIRVJBTCwKICNlbmRpZgotCS5tdWx0aXBvaW50CT0gMCwKKwkuY29uZmlnCQk9ICZtdXNiX2NvbmZpZywKIH07CiAKIHN0YXRpYyB1NjQgbXVzYl9kbWFtYXNrID0gfih1MzIpMDsKQEAgLTIwMSw3ICsyMDgsNyBAQAogCXsKIAkJLm5hbWUgPSAibGludXgga2VybmVsKG5hbmQpIiwKIAkJLm9mZnNldCA9IDAsCi0JCS5zaXplID0gNCAqIFNJWkVfMU0sCisJCS5zaXplID0gNCAqIDEwMjQgKiAxMDI0LAogCX0sCiAJewogCQkubmFtZSA9ICJmaWxlIHN5c3RlbShuYW5kKSIsCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MjcvYm9hcmRzL2V6YnJkLmMgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MjcvYm9hcmRzL2V6YnJkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzZjODdiNgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUyNy9ib2FyZHMvZXpicmQuYwpAQCAtMCwwICsxLDczNCBAQAorLyoKKyAqIEZpbGU6ICAgICAgICAgYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTI3L2JvYXJkcy9lemJyZC5jCisgKiBCYXNlZCBvbjogICAgIGFyY2gvYmxhY2tmaW4vbWFjaC1iZjUzNy9ib2FyZHMvc3RhbXAuYworICogQXV0aG9yOiAgICAgICBBaWRhbiBXaWxsaWFtcyA8YWlkYW5AbmljdGEuY29tLmF1PgorICoKKyAqIENyZWF0ZWQ6CisgKiBEZXNjcmlwdGlvbjoKKyAqCisgKiBNb2RpZmllZDoKKyAqICAgICAgICAgICAgICAgQ29weXJpZ2h0IDIwMDUgTmF0aW9uYWwgSUNUIEF1c3RyYWxpYSAoTklDVEEpCisgKiAgICAgICAgICAgICAgIENvcHlyaWdodCAyMDA0LTIwMDggQW5hbG9nIERldmljZXMgSW5jLgorICoKKyAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgdGhlIGZpbGUgQ09QWUlORywgb3Igd3JpdGUKKyAqIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvbXRkLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL3BhcnRpdGlvbnMuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvcGh5c21hcC5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGkuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGkvZmxhc2guaD4KKworI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPGxpbnV4L2lycS5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi9tdXNiLmg+CisjaW5jbHVkZSA8YXNtL2RtYS5oPgorI2luY2x1ZGUgPGFzbS9iZmluNXh4X3NwaS5oPgorI2luY2x1ZGUgPGFzbS9yZWJvb3QuaD4KKyNpbmNsdWRlIDxhc20vbmFuZC5oPgorI2luY2x1ZGUgPGFzbS9wb3J0bXV4Lmg+CisjaW5jbHVkZSA8YXNtL2RwbWMuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGkvYWQ3ODc3Lmg+CisKKy8qCisgKiBOYW1lIHRoZSBCb2FyZCBmb3IgdGhlIC9wcm9jL2NwdWluZm8KKyAqLworY29uc3QgY2hhciBiZmluX2JvYXJkX25hbWVbXSA9ICJCRjUyNi1FWkJSRCI7CisKKy8qCisgKiAgRHJpdmVyIG5lZWRzIHRvIGtub3cgYWRkcmVzcywgaXJxIGFuZCBmbGFnIHBpbi4KKyAqLworCisjaWYgZGVmaW5lZChDT05GSUdfVVNCX01VU0JfSERSQykgfHwgZGVmaW5lZChDT05GSUdfVVNCX01VU0JfSERSQ19NT0RVTEUpCitzdGF0aWMgc3RydWN0IHJlc291cmNlIG11c2JfcmVzb3VyY2VzW10gPSB7CisJWzBdID0geworCQkuc3RhcnQJPSAweGZmYzAzODAwLAorCQkuZW5kCT0gMHhmZmMwM2NmZiwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwlbMV0gPSB7CS8qIGdlbmVyYWwgSVJRICovCisJCS5zdGFydAk9IElSUV9VU0JfSU5UMCwKKwkJLmVuZAk9IElSUV9VU0JfSU5UMCwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEgfCBJT1JFU09VUkNFX0lSUV9ISUdITEVWRUwsCisJfSwKKwlbMl0gPSB7CS8qIERNQSBJUlEgKi8KKwkJLnN0YXJ0CT0gSVJRX1VTQl9ETUEsCisJCS5lbmQJPSBJUlFfVVNCX0RNQSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEgfCBJT1JFU09VUkNFX0lSUV9ISUdITEVWRUwsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgbXVzYl9oZHJjX2NvbmZpZyBtdXNiX2NvbmZpZyA9IHsKKwkubXVsdGlwb2ludAk9IDAsCisJLmR5bl9maWZvCT0gMCwKKwkuc29mdF9jb24JPSAxLAorCS5kbWEJCT0gMSwKKwkubnVtX2Vwcwk9IDcsCisJLmRtYV9jaGFubmVscwk9IDcsCisJLmdwaW9fdnJzZWwJPSBHUElPX1BHMTMsCit9OworCitzdGF0aWMgc3RydWN0IG11c2JfaGRyY19wbGF0Zm9ybV9kYXRhIG11c2JfcGxhdCA9IHsKKyNpZiBkZWZpbmVkKENPTkZJR19VU0JfTVVTQl9PVEcpCisJLm1vZGUJCT0gTVVTQl9PVEcsCisjZWxpZiBkZWZpbmVkKENPTkZJR19VU0JfTVVTQl9IRFJDX0hDRCkKKwkubW9kZQkJPSBNVVNCX0hPU1QsCisjZWxpZiBkZWZpbmVkKENPTkZJR19VU0JfR0FER0VUX01VU0JfSERSQykKKwkubW9kZQkJPSBNVVNCX1BFUklQSEVSQUwsCisjZW5kaWYKKwkuY29uZmlnCQk9ICZtdXNiX2NvbmZpZywKK307CisKK3N0YXRpYyB1NjQgbXVzYl9kbWFtYXNrID0gfih1MzIpMDsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXVzYl9kZXZpY2UgPSB7CisJLm5hbWUJCT0gIm11c2JfaGRyYyIsCisJLmlkCQk9IDAsCisJLmRldiA9IHsKKwkJLmRtYV9tYXNrCQk9ICZtdXNiX2RtYW1hc2ssCisJCS5jb2hlcmVudF9kbWFfbWFzawk9IDB4ZmZmZmZmZmYsCisJCS5wbGF0Zm9ybV9kYXRhCQk9ICZtdXNiX3BsYXQsCisJfSwKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUobXVzYl9yZXNvdXJjZXMpLAorCS5yZXNvdXJjZQk9IG11c2JfcmVzb3VyY2VzLAorfTsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChDT05GSUdfTVREX1BIWVNNQVApIHx8IGRlZmluZWQoQ09ORklHX01URF9QSFlTTUFQX01PRFVMRSkKK3N0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiBlemJyZF9wYXJ0aXRpb25zW10gPSB7CisJeworCQkubmFtZSAgICAgICA9ICJib290bG9hZGVyKG5vcikiLAorCQkuc2l6ZSAgICAgICA9IDB4NDAwMDAsCisJCS5vZmZzZXQgICAgID0gMCwKKwl9LCB7CisJCS5uYW1lICAgICAgID0gImxpbnV4IGtlcm5lbChub3IpIiwKKwkJLnNpemUgICAgICAgPSAweDFDMDAwMCwKKwkJLm9mZnNldCAgICAgPSBNVERQQVJUX09GU19BUFBFTkQsCisJfSwgeworCQkubmFtZSAgICAgICA9ICJmaWxlIHN5c3RlbShub3IpIiwKKwkJLnNpemUgICAgICAgPSBNVERQQVJUX1NJWl9GVUxMLAorCQkub2Zmc2V0ICAgICA9IE1URFBBUlRfT0ZTX0FQUEVORCwKKwl9Cit9OworCitzdGF0aWMgc3RydWN0IHBoeXNtYXBfZmxhc2hfZGF0YSBlemJyZF9mbGFzaF9kYXRhID0geworCS53aWR0aCAgICAgID0gMiwKKwkucGFydHMgICAgICA9IGV6YnJkX3BhcnRpdGlvbnMsCisJLm5yX3BhcnRzICAgPSBBUlJBWV9TSVpFKGV6YnJkX3BhcnRpdGlvbnMpLAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBlemJyZF9mbGFzaF9yZXNvdXJjZSA9IHsKKwkuc3RhcnQgPSAweDIwMDAwMDAwLAorCS5lbmQgICA9IDB4MjAzZmZmZmYsCisJLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBlemJyZF9mbGFzaF9kZXZpY2UgPSB7CisJLm5hbWUgICAgICAgICAgPSAicGh5c21hcC1mbGFzaCIsCisJLmlkICAgICAgICAgICAgPSAwLAorCS5kZXYgPSB7CisJCS5wbGF0Zm9ybV9kYXRhID0gJmV6YnJkX2ZsYXNoX2RhdGEsCisJfSwKKwkubnVtX3Jlc291cmNlcyA9IDEsCisJLnJlc291cmNlICAgICAgPSAmZXpicmRfZmxhc2hfcmVzb3VyY2UsCit9OworI2VuZGlmCisKKyNpZiBkZWZpbmVkKENPTkZJR19NVERfTkFORF9CRjVYWCkgfHwgZGVmaW5lZChDT05GSUdfTVREX05BTkRfQkY1WFhfTU9EVUxFKQorc3RhdGljIHN0cnVjdCBtdGRfcGFydGl0aW9uIHBhcnRpdGlvbl9pbmZvW10gPSB7CisJeworCQkubmFtZSA9ICJsaW51eCBrZXJuZWwobmFuZCkiLAorCQkub2Zmc2V0ID0gMCwKKwkJLnNpemUgPSA0ICogMTAyNCAqIDEwMjQsCisJfSwKKwl7CisJCS5uYW1lID0gImZpbGUgc3lzdGVtKG5hbmQpIiwKKwkJLm9mZnNldCA9IE1URFBBUlRfT0ZTX0FQUEVORCwKKwkJLnNpemUgPSBNVERQQVJUX1NJWl9GVUxMLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IGJmNXh4X25hbmRfcGxhdGZvcm0gYmY1eHhfbmFuZF9wbGF0Zm9ybSA9IHsKKwkucGFnZV9zaXplID0gTkZDX1BHX1NJWkVfMjU2LAorCS5kYXRhX3dpZHRoID0gTkZDX05XSURUSF84LAorCS5wYXJ0aXRpb25zID0gcGFydGl0aW9uX2luZm8sCisJLm5yX3BhcnRpdGlvbnMgPSBBUlJBWV9TSVpFKHBhcnRpdGlvbl9pbmZvKSwKKwkucmRfZGx5ID0gMywKKwkud3JfZGx5ID0gMywKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgYmY1eHhfbmFuZF9yZXNvdXJjZXNbXSA9IHsKKwl7CisJCS5zdGFydCA9IE5GQ19DVEwsCisJCS5lbmQgPSBORkNfREFUQV9SRCArIDIsCisJCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJeworCQkuc3RhcnQgPSBDSF9ORkMsCisJCS5lbmQgPSBDSF9ORkMsCisJCS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBiZjV4eF9uYW5kX2RldmljZSA9IHsKKwkubmFtZSA9ICJiZjV4eC1uYW5kIiwKKwkuaWQgPSAwLAorCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRShiZjV4eF9uYW5kX3Jlc291cmNlcyksCisJLnJlc291cmNlID0gYmY1eHhfbmFuZF9yZXNvdXJjZXMsCisJLmRldiA9IHsKKwkJLnBsYXRmb3JtX2RhdGEgPSAmYmY1eHhfbmFuZF9wbGF0Zm9ybSwKKwl9LAorfTsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChDT05GSUdfUlRDX0RSVl9CRklOKSB8fCBkZWZpbmVkKENPTkZJR19SVENfRFJWX0JGSU5fTU9EVUxFKQorc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgcnRjX2RldmljZSA9IHsKKwkubmFtZSA9ICJydGMtYmZpbiIsCisJLmlkICAgPSAtMSwKK307CisjZW5kaWYKKworCisjaWYgZGVmaW5lZChDT05GSUdfQkZJTl9NQUMpIHx8IGRlZmluZWQoQ09ORklHX0JGSU5fTUFDX01PRFVMRSkKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGJmaW5fbWFjX2RldmljZSA9IHsKKwkubmFtZSA9ICJiZmluX21hYyIsCit9OworI2VuZGlmCisKKyNpZiBkZWZpbmVkKENPTkZJR19NVERfTTI1UDgwKSBcCisJfHwgZGVmaW5lZChDT05GSUdfTVREX00yNVA4MF9NT0RVTEUpCitzdGF0aWMgc3RydWN0IG10ZF9wYXJ0aXRpb24gYmZpbl9zcGlfZmxhc2hfcGFydGl0aW9uc1tdID0geworCXsKKwkJLm5hbWUgPSAiYm9vdGxvYWRlcihzcGkpIiwKKwkJLnNpemUgPSAweDAwMDQwMDAwLAorCQkub2Zmc2V0ID0gMCwKKwkJLm1hc2tfZmxhZ3MgPSBNVERfQ0FQX1JPTQorCX0sIHsKKwkJLm5hbWUgPSAibGludXgga2VybmVsKHNwaSkiLAorCQkuc2l6ZSA9IE1URFBBUlRfU0laX0ZVTEwsCisJCS5vZmZzZXQgPSBNVERQQVJUX09GU19BUFBFTkQsCisJfQorfTsKKworc3RhdGljIHN0cnVjdCBmbGFzaF9wbGF0Zm9ybV9kYXRhIGJmaW5fc3BpX2ZsYXNoX2RhdGEgPSB7CisJLm5hbWUgPSAibTI1cDgwIiwKKwkucGFydHMgPSBiZmluX3NwaV9mbGFzaF9wYXJ0aXRpb25zLAorCS5ucl9wYXJ0cyA9IEFSUkFZX1NJWkUoYmZpbl9zcGlfZmxhc2hfcGFydGl0aW9ucyksCisJLnR5cGUgPSAibTI1cDE2IiwKK307CisKKy8qIFNQSSBmbGFzaCBjaGlwIChtMjVwNjQpICovCitzdGF0aWMgc3RydWN0IGJmaW41eHhfc3BpX2NoaXAgc3BpX2ZsYXNoX2NoaXBfaW5mbyA9IHsKKwkuZW5hYmxlX2RtYSA9IDAsICAgICAgICAgLyogdXNlIGRtYSB0cmFuc2ZlciB3aXRoIHRoaXMgY2hpcCovCisJLmJpdHNfcGVyX3dvcmQgPSA4LAorfTsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChDT05GSUdfU1BJX0FEQ19CRjUzMykgXAorCXx8IGRlZmluZWQoQ09ORklHX1NQSV9BRENfQkY1MzNfTU9EVUxFKQorLyogU1BJIEFEQyBjaGlwICovCitzdGF0aWMgc3RydWN0IGJmaW41eHhfc3BpX2NoaXAgc3BpX2FkY19jaGlwX2luZm8gPSB7CisJLmVuYWJsZV9kbWEgPSAxLCAgICAgICAgIC8qIHVzZSBkbWEgdHJhbnNmZXIgd2l0aCB0aGlzIGNoaXAqLworCS5iaXRzX3Blcl93b3JkID0gMTYsCit9OworI2VuZGlmCisKKyNpZiBkZWZpbmVkKENPTkZJR19TUElfTU1DKSB8fCBkZWZpbmVkKENPTkZJR19TUElfTU1DX01PRFVMRSkKK3N0YXRpYyBzdHJ1Y3QgYmZpbjV4eF9zcGlfY2hpcCBzcGlfbW1jX2NoaXBfaW5mbyA9IHsKKwkuZW5hYmxlX2RtYSA9IDEsCisJLmJpdHNfcGVyX3dvcmQgPSA4LAorfTsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChDT05GSUdfUEJYKQorc3RhdGljIHN0cnVjdCBiZmluNXh4X3NwaV9jaGlwIHNwaV9zaTN4eHhfY2hpcF9pbmZvID0geworCS5jdGxfcmVnCT0gMHg0LCAvKiBzZW5kIHplcm8gKi8KKwkuZW5hYmxlX2RtYQk9IDAsCisJLmJpdHNfcGVyX3dvcmQJPSA4LAorCS5jc19jaGFuZ2VfcGVyX3dvcmQgPSAxLAorfTsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChDT05GSUdfVE9VQ0hTQ1JFRU5fQUQ3ODc3KSB8fCBkZWZpbmVkKENPTkZJR19UT1VDSFNDUkVFTl9BRDc4NzdfTU9EVUxFKQorc3RhdGljIHN0cnVjdCBiZmluNXh4X3NwaV9jaGlwIHNwaV9hZDc4NzdfY2hpcF9pbmZvID0geworCS5lbmFibGVfZG1hID0gMCwKKwkuYml0c19wZXJfd29yZCA9IDE2LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBhZDc4NzdfcGxhdGZvcm1fZGF0YSBiZmluX2FkNzg3N190c19pbmZvID0geworCS5tb2RlbAkJCT0gNzg3NywKKwkudnJlZl9kZWxheV91c2Vjcwk9IDUwLAkvKiBpbnRlcm5hbCwgbm8gY2FwYWNpdG9yICovCisJLnhfcGxhdGVfb2htcwkJPSA0MTksCisJLnlfcGxhdGVfb2htcwkJPSA0ODYsCisJLnByZXNzdXJlX21heAkJPSAxMDAwLAorCS5wcmVzc3VyZV9taW4JCT0gMCwKKwkuc3RvcGFjcV9wb2xhcml0eSAJPSAxLAorCS5maXJzdF9jb252ZXJzaW9uX2RlbGF5ID0gMywKKwkuYWNxdWlzaXRpb25fdGltZSAJPSAxLAorCS5hdmVyYWdpbmcgCQk9IDEsCisJLnBlbl9kb3duX2FjY19pbnRlcnZhbCAJPSAxLAorfTsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChDT05GSUdfU05EX1NPQ19XTTg3MzEpIHx8IGRlZmluZWQoQ09ORklHX1NORF9TT0NfV004NzMxX01PRFVMRSkgXAorCSAmJiBkZWZpbmVkKENPTkZJR19TTkRfU09DX1dNODczMV9TUEkpCitzdGF0aWMgc3RydWN0IGJmaW41eHhfc3BpX2NoaXAgc3BpX3dtODczMV9jaGlwX2luZm8gPSB7CisJLmVuYWJsZV9kbWEgPSAwLAorCS5iaXRzX3Blcl93b3JkID0gMTYsCit9OworI2VuZGlmCisKKyNpZiBkZWZpbmVkKENPTkZJR19TUElfU1BJREVWKSB8fCBkZWZpbmVkKENPTkZJR19TUElfU1BJREVWX01PRFVMRSkKK3N0YXRpYyBzdHJ1Y3QgYmZpbjV4eF9zcGlfY2hpcCBzcGlkZXZfY2hpcF9pbmZvID0geworCS5lbmFibGVfZG1hID0gMCwKKwkuYml0c19wZXJfd29yZCA9IDgsCit9OworI2VuZGlmCisKKyNpZiBkZWZpbmVkKENPTkZJR19GQl9CRklOX0xRMDM1UTEpIHx8IGRlZmluZWQoQ09ORklHX0ZCX0JGSU5fTFEwMzVRMV9NT0RVTEUpCitzdGF0aWMgc3RydWN0IGJmaW41eHhfc3BpX2NoaXAgbHEwMzVxMV9zcGlfY2hpcF9pbmZvID0geworCS5lbmFibGVfZG1hID0gMCwKKwkuYml0c19wZXJfd29yZCA9IDgsCit9OworI2VuZGlmCisKK3N0YXRpYyBzdHJ1Y3Qgc3BpX2JvYXJkX2luZm8gYmZpbl9zcGlfYm9hcmRfaW5mb1tdIF9faW5pdGRhdGEgPSB7CisjaWYgZGVmaW5lZChDT05GSUdfTVREX00yNVA4MCkgXAorCXx8IGRlZmluZWQoQ09ORklHX01URF9NMjVQODBfTU9EVUxFKQorCXsKKwkJLyogdGhlIG1vZGFsaWFzIG11c3QgYmUgdGhlIHNhbWUgYXMgc3BpIGRldmljZSBkcml2ZXIgbmFtZSAqLworCQkubW9kYWxpYXMgPSAibTI1cDgwIiwgLyogTmFtZSBvZiBzcGlfZHJpdmVyIGZvciB0aGlzIGRldmljZSAqLworCQkubWF4X3NwZWVkX2h6ID0gMjUwMDAwMDAsICAgICAvKiBtYXggc3BpIGNsb2NrIChTQ0spIHNwZWVkIGluIEhaICovCisJCS5idXNfbnVtID0gMCwgLyogRnJhbWV3b3JrIGJ1cyBudW1iZXIgKi8KKwkJLmNoaXBfc2VsZWN0ID0gMSwgLyogRnJhbWV3b3JrIGNoaXAgc2VsZWN0LiBPbiBTVEFNUDUzNyBpdCBpcyBTUElTU0VMMSovCisJCS5wbGF0Zm9ybV9kYXRhID0gJmJmaW5fc3BpX2ZsYXNoX2RhdGEsCisJCS5jb250cm9sbGVyX2RhdGEgPSAmc3BpX2ZsYXNoX2NoaXBfaW5mbywKKwkJLm1vZGUgPSBTUElfTU9ERV8zLAorCX0sCisjZW5kaWYKKworI2lmIGRlZmluZWQoQ09ORklHX1NQSV9BRENfQkY1MzMpIFwKKwl8fCBkZWZpbmVkKENPTkZJR19TUElfQURDX0JGNTMzX01PRFVMRSkKKwl7CisJCS5tb2RhbGlhcyA9ICJiZmluX3NwaV9hZGMiLCAvKiBOYW1lIG9mIHNwaV9kcml2ZXIgZm9yIHRoaXMgZGV2aWNlICovCisJCS5tYXhfc3BlZWRfaHogPSA2MjUwMDAwLCAgICAgLyogbWF4IHNwaSBjbG9jayAoU0NLKSBzcGVlZCBpbiBIWiAqLworCQkuYnVzX251bSA9IDAsIC8qIEZyYW1ld29yayBidXMgbnVtYmVyICovCisJCS5jaGlwX3NlbGVjdCA9IDEsIC8qIEZyYW1ld29yayBjaGlwIHNlbGVjdC4gKi8KKwkJLnBsYXRmb3JtX2RhdGEgPSBOVUxMLCAvKiBObyBzcGlfZHJpdmVyIHNwZWNpZmljIGNvbmZpZyAqLworCQkuY29udHJvbGxlcl9kYXRhID0gJnNwaV9hZGNfY2hpcF9pbmZvLAorCX0sCisjZW5kaWYKKworI2lmIGRlZmluZWQoQ09ORklHX1NQSV9NTUMpIHx8IGRlZmluZWQoQ09ORklHX1NQSV9NTUNfTU9EVUxFKQorCXsKKwkJLm1vZGFsaWFzID0gInNwaV9tbWNfZHVtbXkiLAorCQkubWF4X3NwZWVkX2h6ID0gMjUwMDAwMDAsICAgICAvKiBtYXggc3BpIGNsb2NrIChTQ0spIHNwZWVkIGluIEhaICovCisJCS5idXNfbnVtID0gMCwKKwkJLmNoaXBfc2VsZWN0ID0gMCwKKwkJLnBsYXRmb3JtX2RhdGEgPSBOVUxMLAorCQkuY29udHJvbGxlcl9kYXRhID0gJnNwaV9tbWNfY2hpcF9pbmZvLAorCQkubW9kZSA9IFNQSV9NT0RFXzMsCisJfSwKKwl7CisJCS5tb2RhbGlhcyA9ICJzcGlfbW1jIiwKKwkJLm1heF9zcGVlZF9oeiA9IDI1MDAwMDAwLCAgICAgLyogbWF4IHNwaSBjbG9jayAoU0NLKSBzcGVlZCBpbiBIWiAqLworCQkuYnVzX251bSA9IDAsCisJCS5jaGlwX3NlbGVjdCA9IENPTkZJR19TUElfTU1DX0NTX0NIQU4sCisJCS5wbGF0Zm9ybV9kYXRhID0gTlVMTCwKKwkJLmNvbnRyb2xsZXJfZGF0YSA9ICZzcGlfbW1jX2NoaXBfaW5mbywKKwkJLm1vZGUgPSBTUElfTU9ERV8zLAorCX0sCisjZW5kaWYKKyNpZiBkZWZpbmVkKENPTkZJR19QQlgpCisJeworCQkubW9kYWxpYXMgPSAiZnhzLXNwaSIsCisJCS5tYXhfc3BlZWRfaHogPSAxMjUwMDAwMCwgICAgIC8qIG1heCBzcGkgY2xvY2sgKFNDSykgc3BlZWQgaW4gSFogKi8KKwkJLmJ1c19udW0gPSAwLAorCQkuY2hpcF9zZWxlY3QgPSA4IC0gQ09ORklHX0oxMV9KVU1QRVIsCisJCS5jb250cm9sbGVyX2RhdGEgPSAmc3BpX3NpM3h4eF9jaGlwX2luZm8sCisJCS5tb2RlID0gU1BJX01PREVfMywKKwl9LAorCXsKKwkJLm1vZGFsaWFzID0gImZ4by1zcGkiLAorCQkubWF4X3NwZWVkX2h6ID0gMTI1MDAwMDAsICAgICAvKiBtYXggc3BpIGNsb2NrIChTQ0spIHNwZWVkIGluIEhaICovCisJCS5idXNfbnVtID0gMCwKKwkJLmNoaXBfc2VsZWN0ID0gOCAtIENPTkZJR19KMTlfSlVNUEVSLAorCQkuY29udHJvbGxlcl9kYXRhID0gJnNwaV9zaTN4eHhfY2hpcF9pbmZvLAorCQkubW9kZSA9IFNQSV9NT0RFXzMsCisJfSwKKyNlbmRpZgorI2lmIGRlZmluZWQoQ09ORklHX1RPVUNIU0NSRUVOX0FENzg3NykgfHwgZGVmaW5lZChDT05GSUdfVE9VQ0hTQ1JFRU5fQUQ3ODc3X01PRFVMRSkKKwl7CisJCS5tb2RhbGlhcwkJPSAiYWQ3ODc3IiwKKwkJLnBsYXRmb3JtX2RhdGEJCT0gJmJmaW5fYWQ3ODc3X3RzX2luZm8sCisJCS5pcnEJCQk9IElSUV9QRjgsCisJCS5tYXhfc3BlZWRfaHoJPSAxMjUwMDAwMCwgICAgIC8qIG1heCBzcGkgY2xvY2sgKFNDSykgc3BlZWQgaW4gSFogKi8KKwkJLmJ1c19udW0JPSAwLAorCQkuY2hpcF9zZWxlY3QgID0gMiwKKwkJLmNvbnRyb2xsZXJfZGF0YSA9ICZzcGlfYWQ3ODc3X2NoaXBfaW5mbywKKwl9LAorI2VuZGlmCisjaWYgZGVmaW5lZChDT05GSUdfU05EX1NPQ19XTTg3MzEpIHx8IGRlZmluZWQoQ09ORklHX1NORF9TT0NfV004NzMxX01PRFVMRSkgXAorCSAmJiBkZWZpbmVkKENPTkZJR19TTkRfU09DX1dNODczMV9TUEkpCisJeworCQkubW9kYWxpYXMJPSAid204NzMxIiwKKwkJLm1heF9zcGVlZF9oegk9IDMxMjUwMDAsICAgICAvKiBtYXggc3BpIGNsb2NrIChTQ0spIHNwZWVkIGluIEhaICovCisJCS5idXNfbnVtCT0gMCwKKwkJLmNoaXBfc2VsZWN0ICAgID0gNSwKKwkJLmNvbnRyb2xsZXJfZGF0YSA9ICZzcGlfd204NzMxX2NoaXBfaW5mbywKKwkJLm1vZGUgPSBTUElfTU9ERV8wLAorCX0sCisjZW5kaWYKKyNpZiBkZWZpbmVkKENPTkZJR19TUElfU1BJREVWKSB8fCBkZWZpbmVkKENPTkZJR19TUElfU1BJREVWX01PRFVMRSkKKwl7CisJCS5tb2RhbGlhcyA9ICJzcGlkZXYiLAorCQkubWF4X3NwZWVkX2h6ID0gMzEyNTAwMCwgICAgIC8qIG1heCBzcGkgY2xvY2sgKFNDSykgc3BlZWQgaW4gSFogKi8KKwkJLmJ1c19udW0gPSAwLAorCQkuY2hpcF9zZWxlY3QgPSAxLAorCQkuY29udHJvbGxlcl9kYXRhID0gJnNwaWRldl9jaGlwX2luZm8sCisJfSwKKyNlbmRpZgorI2lmIGRlZmluZWQoQ09ORklHX0ZCX0JGSU5fTFEwMzVRMSkgfHwgZGVmaW5lZChDT05GSUdfRkJfQkZJTl9MUTAzNVExX01PRFVMRSkKKwl7CisJCS5tb2RhbGlhcyA9ICJiZmluLWxxMDM1cTEtc3BpIiwKKwkJLm1heF9zcGVlZF9oeiA9IDIwMDAwMDAwLCAgICAgLyogbWF4IHNwaSBjbG9jayAoU0NLKSBzcGVlZCBpbiBIWiAqLworCQkuYnVzX251bSA9IDAsCisJCS5jaGlwX3NlbGVjdCA9IDEsCisJCS5jb250cm9sbGVyX2RhdGEgPSAmbHEwMzVxMV9zcGlfY2hpcF9pbmZvLAorCQkubW9kZSA9IFNQSV9DUEhBIHwgU1BJX0NQT0wsCisJfSwKKyNlbmRpZgorfTsKKworI2lmIGRlZmluZWQoQ09ORklHX1NQSV9CRklOKSB8fCBkZWZpbmVkKENPTkZJR19TUElfQkZJTl9NT0RVTEUpCisvKiBTUEkgY29udHJvbGxlciBkYXRhICovCitzdGF0aWMgc3RydWN0IGJmaW41eHhfc3BpX21hc3RlciBiZmluX3NwaTBfaW5mbyA9IHsKKwkubnVtX2NoaXBzZWxlY3QgPSA4LAorCS5lbmFibGVfZG1hID0gMSwgIC8qIG1hc3RlciBoYXMgdGhlIGFiaWxpdHkgdG8gZG8gZG1hIHRyYW5zZmVyICovCisJLnBpbl9yZXEgPSB7UF9TUEkwX1NDSywgUF9TUEkwX01JU08sIFBfU1BJMF9NT1NJLCAwfSwKK307CisKKy8qIFNQSSAoMCkgKi8KK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgYmZpbl9zcGkwX3Jlc291cmNlW10gPSB7CisJWzBdID0geworCQkuc3RhcnQgPSBTUEkwX1JFR0JBU0UsCisJCS5lbmQgICA9IFNQSTBfUkVHQkFTRSArIDB4RkYsCisJCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAorCQl9LAorCVsxXSA9IHsKKwkJLnN0YXJ0ID0gQ0hfU1BJLAorCQkuZW5kICAgPSBDSF9TUEksCisJCS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBiZmluX3NwaTBfZGV2aWNlID0geworCS5uYW1lID0gImJmaW4tc3BpIiwKKwkuaWQgPSAwLCAvKiBCdXMgbnVtYmVyICovCisJLm51bV9yZXNvdXJjZXMgPSBBUlJBWV9TSVpFKGJmaW5fc3BpMF9yZXNvdXJjZSksCisJLnJlc291cmNlID0gYmZpbl9zcGkwX3Jlc291cmNlLAorCS5kZXYgPSB7CisJCS5wbGF0Zm9ybV9kYXRhID0gJmJmaW5fc3BpMF9pbmZvLCAvKiBQYXNzZWQgdG8gZHJpdmVyICovCisJfSwKK307CisjZW5kaWYgIC8qIHNwaSBtYXN0ZXIgYW5kIGRldmljZXMgKi8KKworI2lmIGRlZmluZWQoQ09ORklHX1NFUklBTF9CRklOKSB8fCBkZWZpbmVkKENPTkZJR19TRVJJQUxfQkZJTl9NT0RVTEUpCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGJmaW5fdWFydF9yZXNvdXJjZXNbXSA9IHsKKyNpZmRlZiBDT05GSUdfU0VSSUFMX0JGSU5fVUFSVDAKKwl7CisJCS5zdGFydCA9IDB4RkZDMDA0MDAsCisJCS5lbmQgPSAweEZGQzAwNEZGLAorCQkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwKKwl9LAorI2VuZGlmCisjaWZkZWYgQ09ORklHX1NFUklBTF9CRklOX1VBUlQxCisJeworCQkuc3RhcnQgPSAweEZGQzAyMDAwLAorCQkuZW5kID0gMHhGRkMwMjBGRiwKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKyNlbmRpZgorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYmZpbl91YXJ0X2RldmljZSA9IHsKKwkubmFtZSA9ICJiZmluLXVhcnQiLAorCS5pZCA9IDEsCisJLm51bV9yZXNvdXJjZXMgPSBBUlJBWV9TSVpFKGJmaW5fdWFydF9yZXNvdXJjZXMpLAorCS5yZXNvdXJjZSA9IGJmaW5fdWFydF9yZXNvdXJjZXMsCit9OworI2VuZGlmCisKKyNpZiBkZWZpbmVkKENPTkZJR19CRklOX1NJUikgfHwgZGVmaW5lZChDT05GSUdfQkZJTl9TSVJfTU9EVUxFKQorc3RhdGljIHN0cnVjdCByZXNvdXJjZSBiZmluX3Npcl9yZXNvdXJjZXNbXSA9IHsKKyNpZmRlZiBDT05GSUdfQkZJTl9TSVIwCisJeworCQkuc3RhcnQgPSAweEZGQzAwNDAwLAorCQkuZW5kID0gMHhGRkMwMDRGRiwKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKyNlbmRpZgorI2lmZGVmIENPTkZJR19CRklOX1NJUjEKKwl7CisJCS5zdGFydCA9IDB4RkZDMDIwMDAsCisJCS5lbmQgPSAweEZGQzAyMEZGLAorCQkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwKKwl9LAorI2VuZGlmCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBiZmluX3Npcl9kZXZpY2UgPSB7CisJLm5hbWUgPSAiYmZpbl9zaXIiLAorCS5pZCA9IDAsCisJLm51bV9yZXNvdXJjZXMgPSBBUlJBWV9TSVpFKGJmaW5fc2lyX3Jlc291cmNlcyksCisJLnJlc291cmNlID0gYmZpbl9zaXJfcmVzb3VyY2VzLAorfTsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChDT05GSUdfSTJDX0JMQUNLRklOX1RXSSkgfHwgZGVmaW5lZChDT05GSUdfSTJDX0JMQUNLRklOX1RXSV9NT0RVTEUpCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGJmaW5fdHdpMF9yZXNvdXJjZVtdID0geworCVswXSA9IHsKKwkJLnN0YXJ0ID0gVFdJMF9SRUdCQVNFLAorCQkuZW5kICAgPSBUV0kwX1JFR0JBU0UsCisJCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJWzFdID0geworCQkuc3RhcnQgPSBJUlFfVFdJLAorCQkuZW5kICAgPSBJUlFfVFdJLAorCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgaTJjX2JmaW5fdHdpX2RldmljZSA9IHsKKwkubmFtZSA9ICJpMmMtYmZpbi10d2kiLAorCS5pZCA9IDAsCisJLm51bV9yZXNvdXJjZXMgPSBBUlJBWV9TSVpFKGJmaW5fdHdpMF9yZXNvdXJjZSksCisJLnJlc291cmNlID0gYmZpbl90d2kwX3Jlc291cmNlLAorfTsKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX0kyQ19CT0FSRElORk8KK3N0YXRpYyBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gX19pbml0ZGF0YSBiZmluX2kyY19ib2FyZF9pbmZvW10gPSB7CisjaWYgZGVmaW5lZChDT05GSUdfVFdJX0xDRCkgfHwgZGVmaW5lZChDT05GSUdfVFdJX0xDRF9NT0RVTEUpCisJeworCQlJMkNfQk9BUkRfSU5GTygicGNmODU3NF9sY2QiLCAweDIyKSwKKwl9LAorI2VuZGlmCisjaWYgZGVmaW5lZChDT05GSUdfVFdJX0tFWVBBRCkgfHwgZGVmaW5lZChDT05GSUdfVFdJX0tFWVBBRF9NT0RVTEUpCisJeworCQlJMkNfQk9BUkRfSU5GTygicGNmODU3NF9rZXlwYWQiLCAweDI3KSwKKwkJLmlycSA9IElSUV9QRjgsCisJfSwKKyNlbmRpZgorfTsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChDT05GSUdfU0VSSUFMX0JGSU5fU1BPUlQpIHx8IGRlZmluZWQoQ09ORklHX1NFUklBTF9CRklOX1NQT1JUX01PRFVMRSkKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGJmaW5fc3BvcnQwX3VhcnRfZGV2aWNlID0geworCS5uYW1lID0gImJmaW4tc3BvcnQtdWFydCIsCisJLmlkID0gMCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGJmaW5fc3BvcnQxX3VhcnRfZGV2aWNlID0geworCS5uYW1lID0gImJmaW4tc3BvcnQtdWFydCIsCisJLmlkID0gMSwKK307CisjZW5kaWYKKworI2lmIGRlZmluZWQoQ09ORklHX0tFWUJPQVJEX0dQSU8pIHx8IGRlZmluZWQoQ09ORklHX0tFWUJPQVJEX0dQSU9fTU9EVUxFKQorI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpb19rZXlzLmg+CisKK3N0YXRpYyBzdHJ1Y3QgZ3Bpb19rZXlzX2J1dHRvbiBiZmluX2dwaW9fa2V5c190YWJsZVtdID0geworCXtCVE5fMCwgR1BJT19QRzAsIDEsICJncGlvLWtleXM6IEJUTjAifSwKKwl7QlROXzEsIEdQSU9fUEcxMywgMSwgImdwaW8ta2V5czogQlROMSJ9LAorfTsKKworc3RhdGljIHN0cnVjdCBncGlvX2tleXNfcGxhdGZvcm1fZGF0YSBiZmluX2dwaW9fa2V5c19kYXRhID0geworCS5idXR0b25zICAgICAgICA9IGJmaW5fZ3Bpb19rZXlzX3RhYmxlLAorCS5uYnV0dG9ucyAgICAgICA9IEFSUkFZX1NJWkUoYmZpbl9ncGlvX2tleXNfdGFibGUpLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYmZpbl9kZXZpY2VfZ3Bpb2tleXMgPSB7CisJLm5hbWUgICAgICA9ICJncGlvLWtleXMiLAorCS5kZXYgPSB7CisJCS5wbGF0Zm9ybV9kYXRhID0gJmJmaW5fZ3Bpb19rZXlzX2RhdGEsCisJfSwKK307CisjZW5kaWYKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBiZmluX2dwaW9zX3Jlc291cmNlcyA9IHsKKwkuc3RhcnQgPSAwLAorCS5lbmQgICA9IE1BWF9CTEFDS0ZJTl9HUElPUyAtIDEsCisJLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEsCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBiZmluX2dwaW9zX2RldmljZSA9IHsKKwkubmFtZSA9ICJzaW1wbGUtZ3BpbyIsCisJLmlkID0gLTEsCisJLm51bV9yZXNvdXJjZXMgPSAxLAorCS5yZXNvdXJjZSA9ICZiZmluX2dwaW9zX3Jlc291cmNlcywKK307CisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgY2Nsa192bGV2X2RhdGFzaGVldFtdID0KK3sKKwlWUlBBSVIoVkxFVl8xMDAsIDQwMDAwMDAwMCksCisJVlJQQUlSKFZMRVZfMTA1LCA0MjYwMDAwMDApLAorCVZSUEFJUihWTEVWXzExMCwgNTAwMDAwMDAwKSwKKwlWUlBBSVIoVkxFVl8xMTUsIDUzMzAwMDAwMCksCisJVlJQQUlSKFZMRVZfMTIwLCA2MDAwMDAwMDApLAorfTsKKworc3RhdGljIHN0cnVjdCBiZmluX2RwbWNfcGxhdGZvcm1fZGF0YSBiZmluX2RtcGNfdnJlZ19kYXRhID0geworCS50dXBsZV90YWIgPSBjY2xrX3ZsZXZfZGF0YXNoZWV0LAorCS50YWJzaXplID0gQVJSQVlfU0laRShjY2xrX3ZsZXZfZGF0YXNoZWV0KSwKKwkudnJfc2V0dGxpbmdfdGltZSA9IDI1IC8qIHVzICovLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYmZpbl9kcG1jID0geworCS5uYW1lID0gImJmaW4gZHBtYyIsCisJLmRldiA9IHsKKwkJLnBsYXRmb3JtX2RhdGEgPSAmYmZpbl9kbXBjX3ZyZWdfZGF0YSwKKwl9LAorfTsKKworI2lmIGRlZmluZWQoQ09ORklHX0ZCX0JGSU5fTFEwMzVRMSkgfHwgZGVmaW5lZChDT05GSUdfRkJfQkZJTl9MUTAzNVExX01PRFVMRSkKKyNpbmNsdWRlIDxhc20vYmZpbi1scTAzNXExLmg+CisKK3N0YXRpYyBzdHJ1Y3QgYmZpbl9scTAzNXExZmJfZGlzcF9pbmZvIGJmaW5fbHEwMzVxMV9kYXRhID0geworCS5tb2RlID0gCUxRMDM1X05PUk0gfCBMUTAzNV9SR0IgfCBMUTAzNV9STCB8IExRMDM1X1RCLAorCS51c2VfYmwgPSAJMSwKKwkuZ3Bpb19ibCA9CUdQSU9fUEcxMiwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgYmZpbl9scTAzNXExX3Jlc291cmNlc1tdID0geworCXsKKwkJLnN0YXJ0ID0gSVJRX1BQSV9FUlJPUiwKKwkJLmVuZCA9IElSUV9QUElfRVJST1IsCisJCS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBiZmluX2xxMDM1cTFfZGV2aWNlID0geworCS5uYW1lCQk9ICJiZmluLWxxMDM1cTEiLAorCS5pZAkJPSAtMSwKKwkubnVtX3Jlc291cmNlcyAJPSBBUlJBWV9TSVpFKGJmaW5fbHEwMzVxMV9yZXNvdXJjZXMpLAorCS5yZXNvdXJjZSAJPSBiZmluX2xxMDM1cTFfcmVzb3VyY2VzLAorCS5kZXYJCT0geworCQkucGxhdGZvcm1fZGF0YSA9ICZiZmluX2xxMDM1cTFfZGF0YSwKKwl9LAorfTsKKyNlbmRpZgorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqc3RhbXBfZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7CisKKwkmYmZpbl9kcG1jLAorCisjaWYgZGVmaW5lZChDT05GSUdfTVREX05BTkRfQkY1WFgpIHx8IGRlZmluZWQoQ09ORklHX01URF9OQU5EX0JGNVhYX01PRFVMRSkKKwkmYmY1eHhfbmFuZF9kZXZpY2UsCisjZW5kaWYKKworI2lmIGRlZmluZWQoQ09ORklHX1JUQ19EUlZfQkZJTikgfHwgZGVmaW5lZChDT05GSUdfUlRDX0RSVl9CRklOX01PRFVMRSkKKwkmcnRjX2RldmljZSwKKyNlbmRpZgorCisjaWYgZGVmaW5lZChDT05GSUdfVVNCX01VU0JfSERSQykgfHwgZGVmaW5lZChDT05GSUdfVVNCX01VU0JfSERSQ19NT0RVTEUpCisJJm11c2JfZGV2aWNlLAorI2VuZGlmCisKKyNpZiBkZWZpbmVkKENPTkZJR19CRklOX01BQykgfHwgZGVmaW5lZChDT05GSUdfQkZJTl9NQUNfTU9EVUxFKQorCSZiZmluX21hY19kZXZpY2UsCisjZW5kaWYKKworI2lmIGRlZmluZWQoQ09ORklHX1NQSV9CRklOKSB8fCBkZWZpbmVkKENPTkZJR19TUElfQkZJTl9NT0RVTEUpCisJJmJmaW5fc3BpMF9kZXZpY2UsCisjZW5kaWYKKworI2lmIGRlZmluZWQoQ09ORklHX1NFUklBTF9CRklOKSB8fCBkZWZpbmVkKENPTkZJR19TRVJJQUxfQkZJTl9NT0RVTEUpCisJJmJmaW5fdWFydF9kZXZpY2UsCisjZW5kaWYKKworI2lmIGRlZmluZWQoQ09ORklHX0ZCX0JGSU5fTFEwMzVRMSkgfHwgZGVmaW5lZChDT05GSUdfRkJfQkZJTl9MUTAzNVExX01PRFVMRSkKKwkmYmZpbl9scTAzNXExX2RldmljZSwKKyNlbmRpZgorCisjaWYgZGVmaW5lZChDT05GSUdfQkZJTl9TSVIpIHx8IGRlZmluZWQoQ09ORklHX0JGSU5fU0lSX01PRFVMRSkKKwkmYmZpbl9zaXJfZGV2aWNlLAorI2VuZGlmCisKKyNpZiBkZWZpbmVkKENPTkZJR19JMkNfQkxBQ0tGSU5fVFdJKSB8fCBkZWZpbmVkKENPTkZJR19JMkNfQkxBQ0tGSU5fVFdJX01PRFVMRSkKKwkmaTJjX2JmaW5fdHdpX2RldmljZSwKKyNlbmRpZgorCisjaWYgZGVmaW5lZChDT05GSUdfU0VSSUFMX0JGSU5fU1BPUlQpIHx8IGRlZmluZWQoQ09ORklHX1NFUklBTF9CRklOX1NQT1JUX01PRFVMRSkKKwkmYmZpbl9zcG9ydDBfdWFydF9kZXZpY2UsCisJJmJmaW5fc3BvcnQxX3VhcnRfZGV2aWNlLAorI2VuZGlmCisKKyNpZiBkZWZpbmVkKENPTkZJR19LRVlCT0FSRF9HUElPKSB8fCBkZWZpbmVkKENPTkZJR19LRVlCT0FSRF9HUElPX01PRFVMRSkKKwkmYmZpbl9kZXZpY2VfZ3Bpb2tleXMsCisjZW5kaWYKKworI2lmIGRlZmluZWQoQ09ORklHX01URF9QSFlTTUFQKSB8fCBkZWZpbmVkKENPTkZJR19NVERfUEhZU01BUF9NT0RVTEUpCisJJmV6YnJkX2ZsYXNoX2RldmljZSwKKyNlbmRpZgorCisJJmJmaW5fZ3Bpb3NfZGV2aWNlLAorfTsKKworc3RhdGljIGludCBfX2luaXQgc3RhbXBfaW5pdCh2b2lkKQoreworCXByaW50ayhLRVJOX0lORk8gIiVzKCk6IHJlZ2lzdGVyaW5nIGRldmljZSByZXNvdXJjZXNcbiIsIF9fZnVuY19fKTsKKworI2lmZGVmIENPTkZJR19JMkNfQk9BUkRJTkZPCisJaTJjX3JlZ2lzdGVyX2JvYXJkX2luZm8oMCwgYmZpbl9pMmNfYm9hcmRfaW5mbywKKwkJCQlBUlJBWV9TSVpFKGJmaW5faTJjX2JvYXJkX2luZm8pKTsKKyNlbmRpZgorCisJcGxhdGZvcm1fYWRkX2RldmljZXMoc3RhbXBfZGV2aWNlcywgQVJSQVlfU0laRShzdGFtcF9kZXZpY2VzKSk7CisJc3BpX3JlZ2lzdGVyX2JvYXJkX2luZm8oYmZpbl9zcGlfYm9hcmRfaW5mbywgQVJSQVlfU0laRShiZmluX3NwaV9ib2FyZF9pbmZvKSk7CisJcmV0dXJuIDA7Cit9CisKK2FyY2hfaW5pdGNhbGwoc3RhbXBfaW5pdCk7CisKK3ZvaWQgbmF0aXZlX21hY2hpbmVfcmVzdGFydChjaGFyICpjbWQpCit7CisJLyogd29ya2Fyb3VuZCByZWJvb3QgaGFuZyB3aGVuIGJvb3RpbmcgZnJvbSBTUEkgKi8KKwlpZiAoKGJmaW5fcmVhZF9TWVNDUigpICYgMHg3KSA9PSAweDMpCisJCWJmaW5fZ3Bpb19yZXNldF9zcGkwX3NzZWwxKCk7Cit9CisKK3ZvaWQgYmZpbl9nZXRfZXRoZXJfYWRkcihjaGFyICphZGRyKQoreworCS8qIHRoZSBNQUMgaXMgc3RvcmVkIGluIE9UUCBtZW1vcnkgcGFnZSAweERGICovCisJdTMyIHJldDsKKwl1NjQgb3RwX21hYzsKKwl1MzIgKCpvdHBfcmVhZCkodTMyIHBhZ2UsIHUzMiBmbGFncywgdTY0ICpwYWdlX2NvbnRlbnQpID0gKHZvaWQgKikweEVGMDAwMDFBOworCisJcmV0ID0gb3RwX3JlYWQoMHhERiwgMHgwMCwgJm90cF9tYWMpOworCWlmICghKHJldCAmIDB4MSkpIHsKKwkJY2hhciAqb3RwX21hY19wID0gKGNoYXIgKikmb3RwX21hYzsKKwkJZm9yIChyZXQgPSAwOyByZXQgPCA2OyArK3JldCkKKwkJCWFkZHJbcmV0XSA9IG90cF9tYWNfcFs1IC0gcmV0XTsKKwl9Cit9CitFWFBPUlRfU1lNQk9MKGJmaW5fZ2V0X2V0aGVyX2FkZHIpOwpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTI3L2JvYXJkcy9lemtpdC5jIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTI3L2JvYXJkcy9lemtpdC5jCmluZGV4IDc2MmY3NTQuLjhlZTJiNzQgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUyNy9ib2FyZHMvZXpraXQuYworKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MjcvYm9hcmRzL2V6a2l0LmMKQEAgLTQyLDEwICs0Miw3IEBACiAjaW5jbHVkZSA8bGludXgvaXJxLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvdXNiL3NsODExLmg+Ci0jaWYgZGVmaW5lZChDT05GSUdfVVNCX01VU0JfSERSQykgfHwgZGVmaW5lZChDT05GSUdfVVNCX01VU0JfSERSQ19NT0RVTEUpCiAjaW5jbHVkZSA8bGludXgvdXNiL211c2IuaD4KLSNlbmRpZgotI2luY2x1ZGUgPGFzbS9jcGxiLmg+CiAjaW5jbHVkZSA8YXNtL2RtYS5oPgogI2luY2x1ZGUgPGFzbS9iZmluNXh4X3NwaS5oPgogI2luY2x1ZGUgPGFzbS9yZWJvb3QuaD4KQEAgLTEyOSw2ICsxMjYsMTYgQEAKIAl9LAogfTsKIAorc3RhdGljIHN0cnVjdCBtdXNiX2hkcmNfY29uZmlnIG11c2JfY29uZmlnID0geworCS5tdWx0aXBvaW50CT0gMCwKKwkuZHluX2ZpZm8JPSAwLAorCS5zb2Z0X2Nvbgk9IDEsCisJLmRtYQkJPSAxLAorCS5udW1fZXBzCT0gNywKKwkuZG1hX2NoYW5uZWxzCT0gNywKKwkuZ3Bpb192cnNlbAk9IEdQSU9fUEcxMywKK307CisKIHN0YXRpYyBzdHJ1Y3QgbXVzYl9oZHJjX3BsYXRmb3JtX2RhdGEgbXVzYl9wbGF0ID0gewogI2lmIGRlZmluZWQoQ09ORklHX1VTQl9NVVNCX09URykKIAkubW9kZQkJPSBNVVNCX09URywKQEAgLTEzNyw3ICsxNDQsNyBAQAogI2VsaWYgZGVmaW5lZChDT05GSUdfVVNCX0dBREdFVF9NVVNCX0hEUkMpCiAJLm1vZGUJCT0gTVVTQl9QRVJJUEhFUkFMLAogI2VuZGlmCi0JLm11bHRpcG9pbnQJPSAwLAorCS5jb25maWcJCT0gJm11c2JfY29uZmlnLAogfTsKIAogc3RhdGljIHU2NCBtdXNiX2RtYW1hc2sgPSB+KHUzMikwOwpAQCAtMjE4LDcgKzIyNSw3IEBACiAJewogCQkubmFtZSA9ICJsaW51eCBrZXJuZWwobmFuZCkiLAogCQkub2Zmc2V0ID0gMCwKLQkJLnNpemUgPSA0ICogU0laRV8xTSwKKwkJLnNpemUgPSA0ICogMTAyNCAqIDEwMjQsCiAJfSwKIAl7CiAJCS5uYW1lID0gImZpbGUgc3lzdGVtKG5hbmQpIiwKQEAgLTg0Niw2ICs4NTMsMzggQEAKIH07CiAjZW5kaWYKIAorI2lmIGRlZmluZWQoQ09ORklHX0pPWVNUSUNLX0JGSU5fUk9UQVJZKSB8fCBkZWZpbmVkKENPTkZJR19KT1lTVElDS19CRklOX1JPVEFSWV9NT0RVTEUpCisjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KKyNpbmNsdWRlIDxhc20vYmZpbl9yb3RhcnkuaD4KKworc3RhdGljIHN0cnVjdCBiZmluX3JvdGFyeV9wbGF0Zm9ybV9kYXRhIGJmaW5fcm90YXJ5X2RhdGEgPSB7CisJLyoucm90YXJ5X3VwX2tleSAgICAgPSBLRVlfVVAsKi8KKwkvKi5yb3RhcnlfZG93bl9rZXkgICA9IEtFWV9ET1dOLCovCisJLnJvdGFyeV9yZWxfY29kZSAgID0gUkVMX1dIRUVMLAorCS5yb3RhcnlfYnV0dG9uX2tleSA9IEtFWV9FTlRFUiwKKwkuZGVib3VuY2UJICAgPSAxMCwJLyogMC4uMTcgKi8KKwkubW9kZQkJICAgPSBST1RfUVVBRF9FTkMgfCBST1RfREVCRSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgYmZpbl9yb3RhcnlfcmVzb3VyY2VzW10gPSB7CisJeworCQkuc3RhcnQgPSBJUlFfQ05ULAorCQkuZW5kID0gSVJRX0NOVCwKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGJmaW5fcm90YXJ5X2RldmljZSA9IHsKKwkubmFtZQkJPSAiYmZpbi1yb3RhcnkiLAorCS5pZAkJPSAtMSwKKwkubnVtX3Jlc291cmNlcyAJPSBBUlJBWV9TSVpFKGJmaW5fcm90YXJ5X3Jlc291cmNlcyksCisJLnJlc291cmNlIAk9IGJmaW5fcm90YXJ5X3Jlc291cmNlcywKKwkuZGV2CQk9IHsKKwkJLnBsYXRmb3JtX2RhdGEgPSAmYmZpbl9yb3RhcnlfZGF0YSwKKwl9LAorfTsKKyNlbmRpZgorCiBzdGF0aWMgc3RydWN0IHJlc291cmNlIGJmaW5fZ3Bpb3NfcmVzb3VyY2VzID0gewogCS5zdGFydCA9IDAsCiAJLmVuZCAgID0gTUFYX0JMQUNLRklOX0dQSU9TIC0gMSwKQEAgLTk2Miw2ICsxMDAxLDEwIEBACiAJJmJmaW5fZGV2aWNlX2dwaW9rZXlzLAogI2VuZGlmCiAKKyNpZiBkZWZpbmVkKENPTkZJR19KT1lTVElDS19CRklOX1JPVEFSWSkgfHwgZGVmaW5lZChDT05GSUdfSk9ZU1RJQ0tfQkZJTl9ST1RBUllfTU9EVUxFKQorCSZiZmluX3JvdGFyeV9kZXZpY2UsCisjZW5kaWYKKwogI2lmIGRlZmluZWQoQ09ORklHX01URF9QSFlTTUFQKSB8fCBkZWZpbmVkKENPTkZJR19NVERfUEhZU01BUF9NT0RVTEUpCiAJJmV6a2l0X2ZsYXNoX2RldmljZSwKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTI3L2hlYWQuUyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUyNy9oZWFkLlMKaW5kZXggMjhjNDg2MS4uMGViMWRhOCAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTI3L2hlYWQuUworKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MjcvaGVhZC5TCkBAIC04Nyw2ICs4Nyw5IEBACiAJcjEgPSBQTExfQllQQVNTOyAgICAgICAgICAgICAgICAgLyogQnlwYXNzIHRoZSBQTEw/ICAgICAgICAgICAgICAgICAqLwogCXIxID0gcjEgPDwgODsgICAgICAgICAgICAgICAgICAgIC8qIFNoaWZ0IGl0IG92ZXIgICAgICAgICAgICAgICAgICAgKi8KIAlyMCA9IHIxIHwgcjA7ICAgICAgICAgICAgICAgICAgICAvKiBhZGQgdGhlbSBhbGwgdG9nZXRoZXIgICAgICAgICAgICovCisjaWZkZWYgQU5PTUFMWV8wNTAwMDI2NQorCUJJVFNFVChyMCwgMTUpOyAgICAgICAgICAgICAgICAgIC8qIEFkZCAyNTAgbVYgb2YgaHlzdGVyZXNpcyB0byBTUE9SVCBpbnB1dCBwaW5zICovCisjZW5kaWYKIAogCXAwLmggPSBoaShQTExfQ1RMKTsKIAlwMC5sID0gbG8oUExMX0NUTCk7ICAgICAgICAgICAgICAvKiBMb2FkIHRoZSBhZGRyZXNzICAgICAgICAgICAgICAgICovCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MjcvaW5jbHVkZS9tYWNoL2Fub21hbHkuaCBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUyNy9pbmNsdWRlL21hY2gvYW5vbWFseS5oCmluZGV4IGI3YjE2NmYuLjYyMzczZTYgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUyNy9pbmNsdWRlL21hY2gvYW5vbWFseS5oCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUyNy9pbmNsdWRlL21hY2gvYW5vbWFseS5oCkBAIC03LDEyICs3LDI0IEBACiAgKi8KIAogLyogVGhpcyBmaWxlIHNob3VsZSBiZSB1cCB0byBkYXRlIHdpdGg6Ci0gKiAgLSBSZXZpc2lvbiBDLCAwMS8yNS8yMDA4OyBBRFNQLUJGNTI3IEJsYWNrZmluIFByb2Nlc3NvciBBbm9tYWx5IExpc3QKKyAqICAtIFJldmlzaW9uIEIsIDA4LzEyLzIwMDg7IEFEU1AtQkY1MjYgQmxhY2tmaW4gUHJvY2Vzc29yIEFub21hbHkgTGlzdAorICogIC0gUmV2aXNpb24gRSwgMDgvMTgvMjAwODsgQURTUC1CRjUyNyBCbGFja2ZpbiBQcm9jZXNzb3IgQW5vbWFseSBMaXN0CiAgKi8KIAogI2lmbmRlZiBfTUFDSF9BTk9NQUxZX0hfCiAjZGVmaW5lIF9NQUNIX0FOT01BTFlfSF8KIAorI2lmIGRlZmluZWQoX19BRFNQQkY1MjJfXykgfHwgZGVmaW5lZChfX0FEU1BCRjUyNF9fKSB8fCBkZWZpbmVkKF9fQURTUEJGNTI2X18pCisjIGRlZmluZSBBTk9NQUxZX0JGNTI2IDEKKyNlbHNlCisjIGRlZmluZSBBTk9NQUxZX0JGNTI2IDAKKyNlbmRpZgorI2lmIGRlZmluZWQoX19BRFNQQkY1MjNfXykgfHwgZGVmaW5lZChfX0FEU1BCRjUyNV9fKSB8fCBkZWZpbmVkKF9fQURTUEJGNTI3X18pCisjIGRlZmluZSBBTk9NQUxZX0JGNTI3IDEKKyNlbHNlCisjIGRlZmluZSBBTk9NQUxZX0JGNTI3IDAKKyNlbmRpZgorCiAvKiBNdWx0aS1Jc3N1ZSBJbnN0cnVjdGlvbiB3aXRoIGRzcDMyc2hpZnRpbW0gaW4gc2xvdDEgYW5kIFAtcmVnIFN0b3JlIGluIHNsb3QyIE5vdCBTdXBwb3J0ZWQgKi8KICNkZWZpbmUgQU5PTUFMWV8wNTAwMDA3NCAoMSkKIC8qIERNQV9SVU4gQml0IElzIE5vdCBWYWxpZCBhZnRlciBhIFBlcmlwaGVyYWwgUmVjZWl2ZSBDaGFubmVsIERNQSBTdG9wcyAqLwpAQCAtMjMsNjggKzM1LDEyNCBAQAogI2RlZmluZSBBTk9NQUxZXzA1MDAwMjQ1ICgxKQogLyogU2Vuc2l0aXZpdHkgVG8gTm9pc2Ugd2l0aCBTbG93IElucHV0IEVkZ2UgUmF0ZXMgb24gRXh0ZXJuYWwgU1BPUlQgVFggYW5kIFJYIENsb2NrcyAqLwogI2RlZmluZSBBTk9NQUxZXzA1MDAwMjY1ICgxKQotLyogTmV3IEZlYXR1cmU6IEVNQUMgVFggRE1BIFdvcmQgQWxpZ25tZW50ICovCi0jZGVmaW5lIEFOT01BTFlfMDUwMDAyODUgKDEpCisvKiBGYWxzZSBIYXJkd2FyZSBFcnJvcnMgQ2F1c2VkIGJ5IEZldGNoZXMgYXQgdGhlIEJvdW5kYXJ5IG9mIFJlc2VydmVkIE1lbW9yeSAqLworI2RlZmluZSBBTk9NQUxZXzA1MDAwMzEwICgxKQogLyogRXJyb3JzIHdoZW4gU1NZTkMsIENTWU5DLCBvciBMb2FkcyB0byBMVCwgTEIgYW5kIExDIFJlZ2lzdGVycyBBcmUgSW50ZXJydXB0ZWQgKi8KLSNkZWZpbmUgQU5PTUFMWV8wNTAwMDMxMiAoMSkKKyNkZWZpbmUgQU5PTUFMWV8wNTAwMDMxMiAoQU5PTUFMWV9CRjUyNykKKy8qIFBQSSBJcyBMZXZlbC1TZW5zaXRpdmUgb24gRmlyc3QgVHJhbnNmZXIgSW4gU2luZ2xlIEZyYW1lIFN5bmMgTW9kZXMgKi8KKyNkZWZpbmUgQU5PTUFMWV8wNTAwMDMxMyAoX19TSUxJQ09OX1JFVklTSU9OX18gPCAyKQogLyogSW5jb3JyZWN0IEFjY2VzcyBvZiBPVFBfU1RBVFVTIER1cmluZyBvdHBfd3JpdGUoKSBGdW5jdGlvbiAqLwotI2RlZmluZSBBTk9NQUxZXzA1MDAwMzI4ICgxKQorI2RlZmluZSBBTk9NQUxZXzA1MDAwMzI4IChBTk9NQUxZX0JGNTI3ICYmIF9fU0lMSUNPTl9SRVZJU0lPTl9fIDwgMikKIC8qIERpc2FsbG93ZWQgQ29uZmlndXJhdGlvbiBQcmV2ZW50cyBTdWJzZXF1ZW50IEFsbG93ZWQgQ29uZmlndXJhdGlvbiBvbiBIb3N0IERNQSBQb3J0ICovCi0jZGVmaW5lIEFOT01BTFlfMDUwMDAzMzcgKDEpCisjZGVmaW5lIEFOT01BTFlfMDUwMDAzMzcgKEFOT01BTFlfQkY1MjcgJiYgX19TSUxJQ09OX1JFVklTSU9OX18gPCAyKQogLyogRXRoZXJuZXQgTUFDIE1ESU8gUmVhZHMgRG8gTm90IE1lZXQgSUVFRSBTcGVjaWZpY2F0aW9uICovCi0jZGVmaW5lIEFOT01BTFlfMDUwMDAzNDEgKDEpCisjZGVmaW5lIEFOT01BTFlfMDUwMDAzNDEgKEFOT01BTFlfQkY1MjcgJiYgX19TSUxJQ09OX1JFVklTSU9OX18gPCAyKQogLyogVFdJIE1heSBOb3QgT3BlcmF0ZSBDb3JyZWN0bHkgVW5kZXIgQ2VydGFpbiBTaWduYWwgVGVybWluYXRpb24gQ29uZGl0aW9ucyAqLwotI2RlZmluZSBBTk9NQUxZXzA1MDAwMzQyICgxKQorI2RlZmluZSBBTk9NQUxZXzA1MDAwMzQyIChBTk9NQUxZX0JGNTI3ICYmIF9fU0lMSUNPTl9SRVZJU0lPTl9fIDwgMikKIC8qIFVTQiBDYWxpYnJhdGlvbiBWYWx1ZSBJcyBOb3QgSW5pdGlhbGl6ZWQgKi8KLSNkZWZpbmUgQU5PTUFMWV8wNTAwMDM0NiAoMSkKKyNkZWZpbmUgQU5PTUFMWV8wNTAwMDM0NiAoQU5PTUFMWV9CRjUyNyAmJiBfX1NJTElDT05fUkVWSVNJT05fXyA8IDIpCisvKiBVU0IgQ2FsaWJyYXRpb24gVmFsdWUgdG8gdXNlICovCisjZGVmaW5lIEFOT01BTFlfMDUwMDAzNDZfdmFsdWUgMHhFNTEwCiAvKiBQcmVib290IFJvdXRpbmUgSW5jb3JyZWN0bHkgQWx0ZXJzIFJlc2V0IFZhbHVlIG9mIFVTQiBSZWdpc3RlciAqLwotI2RlZmluZSBBTk9NQUxZXzA1MDAwMzQ3ICgxKQorI2RlZmluZSBBTk9NQUxZXzA1MDAwMzQ3IChBTk9NQUxZX0JGNTI3ICYmIF9fU0lMSUNPTl9SRVZJU0lPTl9fIDwgMikKIC8qIFNlY3VyaXR5IEZlYXR1cmVzIEFyZSBOb3QgRnVuY3Rpb25hbCAqLwotI2RlZmluZSBBTk9NQUxZXzA1MDAwMzQ4IChfX1NJTElDT05fUkVWSVNJT05fXyA8IDEpCisjZGVmaW5lIEFOT01BTFlfMDUwMDAzNDggKEFOT01BTFlfQkY1MjcgJiYgX19TSUxJQ09OX1JFVklTSU9OX18gPCAxKQorLyogYmZyb21fU3lzQ29udHJvbCgpIEZpcm13YXJlIEZ1bmN0aW9uIFBlcmZvcm1zIEltcHJvcGVyIFN5c3RlbSBSZXNldCAqLworI2RlZmluZSBBTk9NQUxZXzA1MDAwMzUzIChBTk9NQUxZX0JGNTI2KQogLyogUmVndWxhdG9yIFByb2dyYW1taW5nIEJsb2NrZWQgd2hlbiBIaWJlcm5hdGUgV2FrZXVwIFNvdXJjZSBSZW1haW5zIEFjdGl2ZSAqLwotI2RlZmluZSBBTk9NQUxZXzA1MDAwMzU1ICgxKQorI2RlZmluZSBBTk9NQUxZXzA1MDAwMzU1IChBTk9NQUxZX0JGNTI3ICYmIF9fU0lMSUNPTl9SRVZJU0lPTl9fIDwgMikKIC8qIFNlcmlhbCBQb3J0IChTUE9SVCkgTXVsdGljaGFubmVsIFRyYW5zbWl0IEZhaWx1cmUgd2hlbiBDaGFubmVsIDAgSXMgRGlzYWJsZWQgKi8KLSNkZWZpbmUgQU5PTUFMWV8wNTAwMDM1NyAoMSkKKyNkZWZpbmUgQU5PTUFMWV8wNTAwMDM1NyAoQU5PTUFMWV9CRjUyNyAmJiBfX1NJTElDT05fUkVWSVNJT05fXyA8IDIpCiAvKiBJbmNvcnJlY3QgUmV2aXNpb24gTnVtYmVyIGluIERTUElEIFJlZ2lzdGVyICovCi0jZGVmaW5lIEFOT01BTFlfMDUwMDAzNjQgKF9fU0lMSUNPTl9SRVZJU0lPTl9fID4gMCkKKyNkZWZpbmUgQU5PTUFMWV8wNTAwMDM2NCAoQU5PTUFMWV9CRjUyNyAmJiBfX1NJTElDT05fUkVWSVNJT05fXyA9PSAxKQogLyogUFBJIFVuZGVyZmxvdyBFcnJvciBHb2VzIFVuZGV0ZWN0ZWQgaW4gSVRVLVIgNjU2IE1vZGUgKi8KICNkZWZpbmUgQU5PTUFMWV8wNTAwMDM2NiAoMSkKLS8qIE5ldyBGZWF0dXJlOiBIaWdoZXIgRGVmYXVsdCBDQ0xLIFJhdGUgKi8KLSNkZWZpbmUgQU5PTUFMWV8wNTAwMDM2OCAoMSkKKy8qIEluY29ycmVjdCBEZWZhdWx0IENTRUwgVmFsdWUgaW4gUExMX0RJViAqLworI2RlZmluZSBBTk9NQUxZXzA1MDAwMzY4IChBTk9NQUxZX0JGNTI3ICYmIF9fU0lMSUNPTl9SRVZJU0lPTl9fIDwgMikKIC8qIFBvc3NpYmxlIFJFVFMgUmVnaXN0ZXIgQ29ycnVwdGlvbiB3aGVuIFN1YnJvdXRpbmUgSXMgdW5kZXIgNSBDeWNsZXMgaW4gRHVyYXRpb24gKi8KLSNkZWZpbmUgQU5PTUFMWV8wNTAwMDM3MSAoMSkKKyNkZWZpbmUgQU5PTUFMWV8wNTAwMDM3MSAoQU5PTUFMWV9CRjUyNyAmJiBfX1NJTElDT05fUkVWSVNJT05fXyA8IDIpCiAvKiBBdXRoZW50aWNhdGlvbiBGYWlscyBUbyBJbml0aWF0ZSAqLwotI2RlZmluZSBBTk9NQUxZXzA1MDAwMzc2IChfX1NJTElDT05fUkVWSVNJT05fXyA+IDApCisjZGVmaW5lIEFOT01BTFlfMDUwMDAzNzYgKEFOT01BTFlfQkY1MjcgJiYgX19TSUxJQ09OX1JFVklTSU9OX18gPCAyKQogLyogRGF0YSBSZWFkIEZyb20gTDMgTWVtb3J5IGJ5IFVTQiBETUEgTWF5IGJlIENvcnJ1cHRlZCAqLwotI2RlZmluZSBBTk9NQUxZXzA1MDAwMzgwICgxKQotLyogVVNCIEZ1bGwtc3BlZWQgTW9kZSBub3QgRnVsbHkgVGVzdGVkICovCi0jZGVmaW5lIEFOT01BTFlfMDUwMDAzODEgKDEpCi0vKiBOZXcgRmVhdHVyZTogQm9vdCBmcm9tIE9UUCBNZW1vcnkgKi8KLSNkZWZpbmUgQU5PTUFMWV8wNTAwMDM4NSAoMSkKLS8qIE5ldyBGZWF0dXJlOiBiZnJvbV9TeXNDb250cm9sKCkgUm91dGluZSAqLwotI2RlZmluZSBBTk9NQUxZXzA1MDAwMzg2ICgxKQotLyogTmV3IEZlYXR1cmU6IFByb2dyYW1tYWJsZSBQcmVib290IFNldHRpbmdzICovCi0jZGVmaW5lIEFOT01BTFlfMDUwMDAzODcgKDEpCisjZGVmaW5lIEFOT01BTFlfMDUwMDAzODAgKEFOT01BTFlfQkY1MjcgJiYgX19TSUxJQ09OX1JFVklTSU9OX18gPCAyKQorLyogOC1CaXQgTkFORCBGbGFzaCBCb290IE1vZGUgTm90IEZ1bmN0aW9uYWwgKi8KKyNkZWZpbmUgQU5PTUFMWV8wNTAwMDM4MiAoX19TSUxJQ09OX1JFVklTSU9OX18gPCAyKQorLyogSG9zdCBNdXN0IE5vdCBSZWFkIEJhY2sgRHVyaW5nIEhvc3QgRE1BIEJvb3QgKi8KKyNkZWZpbmUgQU5PTUFMWV8wNTAwMDM4NCAoQU5PTUFMWV9CRjUyNyAmJiBfX1NJTElDT05fUkVWSVNJT05fXyA8IDIpCisvKiBCb290IGZyb20gT1RQIE1lbW9yeSBOb3QgRnVuY3Rpb25hbCAqLworI2RlZmluZSBBTk9NQUxZXzA1MDAwMzg1IChBTk9NQUxZX0JGNTI3ICYmIF9fU0lMSUNPTl9SRVZJU0lPTl9fIDwgMikKKy8qIGJmcm9tX1N5c0NvbnRyb2woKSBGaXJtd2FyZSBSb3V0aW5lIE5vdCBGdW5jdGlvbmFsICovCisjZGVmaW5lIEFOT01BTFlfMDUwMDAzODYgKEFOT01BTFlfQkY1MjcgJiYgX19TSUxJQ09OX1JFVklTSU9OX18gPCAyKQorLyogUHJvZ3JhbW1hYmxlIFByZWJvb3QgU2V0dGluZ3MgTm90IEZ1bmN0aW9uYWwgKi8KKyNkZWZpbmUgQU5PTUFMWV8wNTAwMDM4NyAoQU5PTUFMWV9CRjUyNyAmJiBfX1NJTElDT05fUkVWSVNJT05fXyA8IDIpCisvKiBDUkMzMiBDaGVja3N1bSBTdXBwb3J0IE5vdCBGdW5jdGlvbmFsICovCisjZGVmaW5lIEFOT01BTFlfMDUwMDAzODggKF9fU0lMSUNPTl9SRVZJU0lPTl9fIDwgMikKIC8qIFJlc2V0IFZlY3RvciBNdXN0IE5vdCBCZSBpbiBTRFJBTSBNZW1vcnkgU3BhY2UgKi8KLSNkZWZpbmUgQU5PTUFMWV8wNTAwMDM4OSAoMSkKLS8qIE5ldyBGZWF0dXJlOiBwVGVtcEN1cnJlbnQgQWRkZWQgdG8gQURJX0JPT1RfREFUQSBTdHJ1Y3R1cmUgKi8KLSNkZWZpbmUgQU5PTUFMWV8wNTAwMDM5MiAoMSkKLS8qIE5ldyBGZWF0dXJlOiBkVGVtcEJ5dGVDb3VudCBWYWx1ZSBJbmNyZWFzZWQgaW4gQURJX0JPT1RfREFUQSBTdHJ1Y3R1cmUgKi8KLSNkZWZpbmUgQU5PTUFMWV8wNTAwMDM5MyAoMSkKLS8qIE5ldyBGZWF0dXJlOiBMb2cgQnVmZmVyIEZ1bmN0aW9uYWxpdHkgKi8KLSNkZWZpbmUgQU5PTUFMWV8wNTAwMDM5NCAoMSkKLS8qIE5ldyBGZWF0dXJlOiBIb29rIFJvdXRpbmUgRnVuY3Rpb25hbGl0eSAqLwotI2RlZmluZSBBTk9NQUxZXzA1MDAwMzk1ICgxKQotLyogTmV3IEZlYXR1cmU6IEhlYWRlciBJbmRpcmVjdCBCaXQgKi8KLSNkZWZpbmUgQU5PTUFMWV8wNTAwMDM5NiAoMSkKLS8qIE5ldyBGZWF0dXJlOiBCS19PTkVTLCBCS19aRVJPUywgYW5kIEJLX0RBVEVDT0RFIENvbnN0YW50cyAqLwotI2RlZmluZSBBTk9NQUxZXzA1MDAwMzk3ICgxKQotLyogTmV3IEZlYXR1cmU6IFNXUkVTRVQsIERGUkVTRVQgYW5kIFdEUkVTRVQgQml0cyBBZGRlZCB0byBTWVNDUiBSZWdpc3RlciAqLwotI2RlZmluZSBBTk9NQUxZXzA1MDAwMzk4ICgxKQotLyogTmV3IEZlYXR1cmU6IEJDT0RFX05PQk9PVCBBZGRlZCB0byBCQ09ERSBGaWVsZCBvZiBTWVNDUiBSZWdpc3RlciAqLwotI2RlZmluZSBBTk9NQUxZXzA1MDAwMzk5ICgxKQorI2RlZmluZSBBTk9NQUxZXzA1MDAwMzg5IChBTk9NQUxZX0JGNTI3ICYmIF9fU0lMSUNPTl9SRVZJU0lPTl9fIDwgMikKKy8qIHBUZW1wQ3VycmVudCBOb3QgUHJlc2VudCBpbiBBRElfQk9PVF9EQVRBIFN0cnVjdHVyZSAqLworI2RlZmluZSBBTk9NQUxZXzA1MDAwMzkyIChBTk9NQUxZX0JGNTI3ICYmIF9fU0lMSUNPTl9SRVZJU0lPTl9fIDwgMikKKy8qIERlcHJlY2F0ZWQgVmFsdWUgb2YgZFRlbXBCeXRlQ291bnQgaW4gQURJX0JPT1RfREFUQSBTdHJ1Y3R1cmUgKi8KKyNkZWZpbmUgQU5PTUFMWV8wNTAwMDM5MyAoQU5PTUFMWV9CRjUyNyAmJiBfX1NJTElDT05fUkVWSVNJT05fXyA8IDIpCisvKiBMb2cgQnVmZmVyIE5vdCBGdW5jdGlvbmFsICovCisjZGVmaW5lIEFOT01BTFlfMDUwMDAzOTQgKEFOT01BTFlfQkY1MjcgJiYgX19TSUxJQ09OX1JFVklTSU9OX18gPCAyKQorLyogSG9vayBSb3V0aW5lIE5vdCBGdW5jdGlvbmFsICovCisjZGVmaW5lIEFOT01BTFlfMDUwMDAzOTUgKEFOT01BTFlfQkY1MjcgJiYgX19TSUxJQ09OX1JFVklTSU9OX18gPCAyKQorLyogSGVhZGVyIEluZGlyZWN0IEJpdCBOb3QgRnVuY3Rpb25hbCAqLworI2RlZmluZSBBTk9NQUxZXzA1MDAwMzk2IChBTk9NQUxZX0JGNTI3ICYmIF9fU0lMSUNPTl9SRVZJU0lPTl9fIDwgMikKKy8qIEJLX09ORVMsIEJLX1pFUk9TLCBhbmQgQktfREFURUNPREUgQ29uc3RhbnRzIE5vdCBGdW5jdGlvbmFsICovCisjZGVmaW5lIEFOT01BTFlfMDUwMDAzOTcgKEFOT01BTFlfQkY1MjcgJiYgX19TSUxJQ09OX1JFVklTSU9OX18gPCAyKQorLyogU1dSRVNFVCwgREZSRVNFVCBhbmQgV0RSRVNFVCBCaXRzIGluIHRoZSBTWVNDUiBSZWdpc3RlciBOb3QgRnVuY3Rpb25hbCAqLworI2RlZmluZSBBTk9NQUxZXzA1MDAwMzk4IChBTk9NQUxZX0JGNTI3ICYmIF9fU0lMSUNPTl9SRVZJU0lPTl9fIDwgMikKKy8qIEJDT0RFX05PQk9PVCBpbiBCQ09ERSBGaWVsZCBvZiBTWVNDUiBSZWdpc3RlciBOb3QgRnVuY3Rpb25hbCAqLworI2RlZmluZSBBTk9NQUxZXzA1MDAwMzk5IChBTk9NQUxZX0JGNTI3ICYmIF9fU0lMSUNPTl9SRVZJU0lPTl9fIDwgMikKIC8qIFBQSSBEYXRhIFNpZ25hbHMgRDAgYW5kIEQ4IGRvIG5vdCBUcmlzdGF0ZSBBZnRlciBEaXNhYmxpbmcgUFBJICovCi0jZGVmaW5lIEFOT01BTFlfMDUwMDA0MDEgKDEpCisjZGVmaW5lIEFOT01BTFlfMDUwMDA0MDEgKF9fU0lMSUNPTl9SRVZJU0lPTl9fIDwgMikKKy8qIExldmVsLVNlbnNpdGl2ZSBFeHRlcm5hbCBHUElPIFdha2V1cHMgTWF5IENhdXNlIEluZGVmaW5pdGUgU3RhbGwgKi8KKyNkZWZpbmUgQU5PTUFMWV8wNTAwMDQwMyAoX19TSUxJQ09OX1JFVklTSU9OX18gPCAyKQorLyogTG9ja2JveCBTRVNSIERpc2FsbG93cyBDZXJ0YWluIFVzZXIgSW50ZXJydXB0cyAqLworI2RlZmluZSBBTk9NQUxZXzA1MDAwNDA0IChfX1NJTElDT05fUkVWSVNJT05fXyA8IDIpCisvKiBMb2NrYm94IFNFU1IgRmlybXdhcmUgRG9lcyBOb3QgU2F2ZS9SZXN0b3JlIEZ1bGwgQ29udGV4dCAqLworI2RlZmluZSBBTk9NQUxZXzA1MDAwNDA1ICgxKQorLyogTG9ja2JveCBTRVNSIEZpcm13YXJlIEFyZ3VtZW50cyBBcmUgTm90IFJldGFpbmVkIEFmdGVyIEZpcnN0IEluaXRpYWxpemF0aW9uICovCisjZGVmaW5lIEFOT01BTFlfMDUwMDA0MDcgKF9fU0lMSUNPTl9SRVZJU0lPTl9fIDwgMikKKy8qIExvY2tib3ggRmlybXdhcmUgTWVtb3J5IENsZWFudXAgUm91dGluZSBEb2VzIG5vdCBDbGVhciBSZWdpc3RlcnMgKi8KKyNkZWZpbmUgQU5PTUFMWV8wNTAwMDQwOCAoMSkKKy8qIExvY2tib3ggZmlybXdhcmUgbGVhdmVzIE1ETUEwIGNoYW5uZWwgZW5hYmxlZCAqLworI2RlZmluZSBBTk9NQUxZXzA1MDAwNDA5IChfX1NJTElDT05fUkVWSVNJT05fXyA8IDIpCisvKiBJbmNvcnJlY3QgRGVmYXVsdCBJbnRlcm5hbCBWb2x0YWdlIFJlZ3VsYXRvciBTZXR0aW5nICovCisjZGVmaW5lIEFOT01BTFlfMDUwMDA0MTAgKEFOT01BTFlfQkY1MjcgJiYgX19TSUxJQ09OX1JFVklTSU9OX18gPCAyKQorLyogYmZyb21fU3lzQ29udHJvbCgpIEZpcm13YXJlIEZ1bmN0aW9uIENhbm5vdCBiZSBVc2VkIHRvIEVudGVyIFBvd2VyIFNhdmluZyBNb2RlcyAqLworI2RlZmluZSBBTk9NQUxZXzA1MDAwNDExIChfX1NJTElDT05fUkVWSVNJT05fXyA8IDIpCisvKiBPVFBfQ0hFQ0tfRk9SX1BSRVZfV1JJVEUgQml0IGlzIE5vdCBGdW5jdGlvbmFsIGluIGJmcm9tX090cFdyaXRlKCkgQVBJICovCisjZGVmaW5lIEFOT01BTFlfMDUwMDA0MTQgKF9fU0lMSUNPTl9SRVZJU0lPTl9fIDwgMikKKy8qIERFQjJfVVJHRU5UIEJpdCBOb3QgRnVuY3Rpb25hbCAqLworI2RlZmluZSBBTk9NQUxZXzA1MDAwNDE1IChfX1NJTElDT05fUkVWSVNJT05fXyA8IDIpCisvKiBTcGVjdWxhdGl2ZSBGZXRjaGVzIENhbiBDYXVzZSBVbmRlc2lyZWQgRXh0ZXJuYWwgRklGTyBPcGVyYXRpb25zICovCisjZGVmaW5lIEFOT01BTFlfMDUwMDA0MTYgKDEpCisvKiBTUE9SVDAgSWdub3JlcyBFeHRlcm5hbCBUU0NMSzAgb24gUEcxNCBXaGVuIFRNUjYgaXMgYW4gT3V0cHV0ICovCisjZGVmaW5lIEFOT01BTFlfMDUwMDA0MTcgKEFOT01BTFlfQkY1MjcgJiYgX19TSUxJQ09OX1JFVklTSU9OX18gPCAyKQorLyogdFNGU1BFIGFuZCB0SEZTUEUgRG8gTm90IE1lZXQgRGF0YSBTaGVldCBTcGVjaWZpY2F0aW9ucyAqLworI2RlZmluZSBBTk9NQUxZXzA1MDAwNDE4IChfX1NJTElDT05fUkVWSVNJT05fXyA8IDIpCisvKiBVU0IgUExMX1NUQUJMRSBCaXQgTWF5IE5vdCBBY2N1cmF0ZWx5IFJlZmxlY3QgdGhlIFVTQiBQTEwncyBTdGF0dXMgKi8KKyNkZWZpbmUgQU5PTUFMWV8wNTAwMDQyMCAoX19TSUxJQ09OX1JFVklTSU9OX18gPCAyKQorLyogVFdJIEZhbGwgVGltZSAoVG9mKSBNYXkgVmlvbGF0ZSB0aGUgTWluaW11bSBJMkMgU3BlY2lmaWNhdGlvbiAqLworI2RlZmluZSBBTk9NQUxZXzA1MDAwNDIxICgxKQorLyogVFdJIElucHV0IENhcGFjaXRhbmNlIChDaSkgTWF5IFZpb2xhdGUgdGhlIE1heGltdW0gSTJDIFNwZWNpZmljYXRpb24gKi8KKyNkZWZpbmUgQU5PTUFMWV8wNTAwMDQyMiAoQU5PTUFMWV9CRjUyNyAmJiBfX1NJTElDT05fUkVWSVNJT05fXyA+IDEpCisvKiBDZXJ0YWluIEV0aGVybmV0IEZyYW1lcyBXaXRoIEVycm9ycyBhcmUgTWlzY2xhc3NpZmllZCBpbiBSTUlJIE1vZGUgKi8KKyNkZWZpbmUgQU5PTUFMWV8wNTAwMDQyMyAoX19TSUxJQ09OX1JFVklTSU9OX18gPCAyKQorLyogSW50ZXJuYWwgVm9sdGFnZSBSZWd1bGF0b3IgTm90IFRyaW1tZWQgKi8KKyNkZWZpbmUgQU5PTUFMWV8wNTAwMDQyNCAoQU5PTUFMWV9CRjUyNyAmJiBfX1NJTElDT05fUkVWSVNJT05fXyA8IDIpCisvKiBNdWx0aWNoYW5uZWwgU1BPUlQgQ2hhbm5lbCBNaXNhbGlnbm1lbnQgVW5kZXIgU3BlY2lmaWMgQ29uZmlndXJhdGlvbiAqLworI2RlZmluZSBBTk9NQUxZXzA1MDAwNDI1IChfX1NJTElDT05fUkVWSVNJT05fXyA8IDIpCisvKiBTcGVjdWxhdGl2ZSBGZXRjaGVzIG9mIEluZGlyZWN0LVBvaW50ZXIgSW5zdHJ1Y3Rpb25zIENhbiBDYXVzZSBTcHVyaW91cyBIYXJkd2FyZSBFcnJvcnMgKi8KKyNkZWZpbmUgQU5PTUFMWV8wNTAwMDQyNiAoMSkKKy8qIFdCX0VER0UgQml0IGluIE5GQ19JUlFTVEFUIEluY29ycmVjdGx5IFJlZmxlY3RzIEJ1ZmZlciBTdGF0dXMgSW5zdGVhZCBvZiBJUlEgU3RhdHVzICovCisjZGVmaW5lIEFOT01BTFlfMDUwMDA0MjkgKF9fU0lMSUNPTl9SRVZJU0lPTl9fIDwgMikKKy8qIFNvZnR3YXJlIFN5c3RlbSBSZXNldCBDb3JydXB0cyBQTExfTE9DS0NOVCBSZWdpc3RlciAqLworI2RlZmluZSBBTk9NQUxZXzA1MDAwNDMwIChBTk9NQUxZX0JGNTI3ICYmIF9fU0lMSUNPTl9SRVZJU0lPTl9fID4gMSkKKy8qIGJmcm9tX1N5c0NvbnRyb2woKSBEb2VzIE5vdCBDbGVhciBTSUNfSVdSMSBCZWZvcmUgRXhlY3V0aW5nIFBMTCBQcm9ncmFtbWluZyBTZXF1ZW5jZSAqLworI2RlZmluZSBBTk9NQUxZXzA1MDAwNDMyIChBTk9NQUxZX0JGNTI2KQogCiAvKiBBbm9tYWxpZXMgdGhhdCBkb24ndCBleGlzdCBvbiB0aGlzIHByb2MgKi8KICNkZWZpbmUgQU5PTUFMWV8wNTAwMDEyNSAoMCkKQEAgLTk3LDYgKzE2NSw4IEBACiAjZGVmaW5lIEFOT01BTFlfMDUwMDAyNjMgKDApCiAjZGVmaW5lIEFOT01BTFlfMDUwMDAyNjYgKDApCiAjZGVmaW5lIEFOT01BTFlfMDUwMDAyNzMgKDApCisjZGVmaW5lIEFOT01BTFlfMDUwMDAyODUgKDApCisjZGVmaW5lIEFOT01BTFlfMDUwMDAzMDcgKDApCiAjZGVmaW5lIEFOT01BTFlfMDUwMDAzMTEgKDApCiAjZGVmaW5lIEFOT01BTFlfMDUwMDAzMjMgKDApCiAjZGVmaW5lIEFOT01BTFlfMDUwMDAzNjMgKDApCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MjcvaW5jbHVkZS9tYWNoL2JmNTI3LmggYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MjcvaW5jbHVkZS9tYWNoL2JmNTI3LmgKaW5kZXggMDU2ZWI0Yi4uMTQ0ZjA4ZCAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTI3L2luY2x1ZGUvbWFjaC9iZjUyNy5oCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUyNy9pbmNsdWRlL21hY2gvYmY1MjcuaApAQCAtMzAsOCArMzAsNiBAQAogI2lmbmRlZiBfX01BQ0hfQkY1MjdfSF9fCiAjZGVmaW5lIF9fTUFDSF9CRjUyN19IX18KIAotI2RlZmluZSBTVVBQT1JURURfUkVWSUQgMgotCiAjZGVmaW5lIE9GRlNFVF8oeCkgKCh4KSAmIDB4MDAwMEZGRkYpCiAKIC8qc29tZSBtaXNjIGRlZmluZXMqLwpAQCAtMTEyLDE2ICsxMTAsMzEgQEAKIAogI2lmZGVmIENPTkZJR19CRjUyNwogI2RlZmluZSBDUFUgIkJGNTI3IgorI2RlZmluZSBDUFVJRCAweDI3ZTQKKyNlbmRpZgorI2lmZGVmIENPTkZJR19CRjUyNgorI2RlZmluZSBDUFUgIkJGNTI2IgorI2RlZmluZSBDUFVJRCAweDI3ZTQKICNlbmRpZgogI2lmZGVmIENPTkZJR19CRjUyNQogI2RlZmluZSBDUFUgIkJGNTI1IgorI2RlZmluZSBDUFVJRCAweDI3ZTQKKyNlbmRpZgorI2lmZGVmIENPTkZJR19CRjUyNAorI2RlZmluZSBDUFUgIkJGNTI0IgorI2RlZmluZSBDUFVJRCAweDI3ZTQKKyNlbmRpZgorI2lmZGVmIENPTkZJR19CRjUyMworI2RlZmluZSBDUFUgIkJGNTIzIgorI2RlZmluZSBDUFVJRCAweDI3ZTQKICNlbmRpZgogI2lmZGVmIENPTkZJR19CRjUyMgogI2RlZmluZSBDUFUgIkJGNTIyIgorI2RlZmluZSBDUFVJRCAweDI3ZTQKICNlbmRpZgorCiAjaWZuZGVmIENQVQotI2RlZmluZQlDUFUgIlVOS05PV04iCi0jZGVmaW5lIENQVUlEIDB4MAorI2Vycm9yIFVua25vd24gQ1BVIHR5cGUgLSBUaGlzIGtlcm5lbCBkb2Vzbid0IHNlZW0gdG8gYmUgY29uZmlndXJlZCBwcm9wZXJseQogI2VuZGlmCiAKICNlbmRpZgkJCQkvKiBfX01BQ0hfQkY1MjdfSF9fICAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTI3L2luY2x1ZGUvbWFjaC9iZmluX3NlcmlhbF81eHguaCBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUyNy9pbmNsdWRlL21hY2gvYmZpbl9zZXJpYWxfNXh4LmgKaW5kZXggMjUyNmI2ZS4uNzU3MjJkNiAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTI3L2luY2x1ZGUvbWFjaC9iZmluX3NlcmlhbF81eHguaAorKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MjcvaW5jbHVkZS9tYWNoL2JmaW5fc2VyaWFsXzV4eC5oCkBAIC03OCw2ICs3OCw5IEBACiAjICBkZWZpbmUgQ09ORklHX1VBUlQxX1JUU19QSU4gLTEKICMgZW5kaWYKICNlbmRpZgorCisjZGVmaW5lIEJGSU5fVUFSVF9UWF9GSUZPX1NJWkUJMgorCiAvKgogICogVGhlIHBpbiBjb25maWd1cmF0aW9uIGlzIGRpZmZlcmVudCBmcm9tIHNjaGVtYXRpYwogICovCkBAIC0xMTksNyArMTIyLDYgQEAKIAliZmluX3dyaXRlMTYodWFydC0+cG9ydC5tZW1iYXNlICsgT0ZGU0VUX0xTUiwgLTEpOwogfQogCi1zdHJ1Y3QgYmZpbl9zZXJpYWxfcG9ydCBiZmluX3NlcmlhbF9wb3J0c1tCRklOX1VBUlRfTlJfUE9SVFNdOwogc3RydWN0IGJmaW5fc2VyaWFsX3JlcyB7CiAJdW5zaWduZWQgbG9uZyB1YXJ0X2Jhc2VfYWRkcjsKIAlpbnQgdWFydF9pcnE7CkBAIC0xNjQsOCArMTY2LDYgQEAKICNlbmRpZgogfTsKIAotaW50IG5yX3BvcnRzID0gQVJSQVlfU0laRShiZmluX3NlcmlhbF9yZXNvdXJjZSk7Ci0KICNkZWZpbmUgRFJJVkVSX05BTUUgImJmaW4tdWFydCIKIAogc3RhdGljIHZvaWQgYmZpbl9zZXJpYWxfaHdfaW5pdChzdHJ1Y3QgYmZpbl9zZXJpYWxfcG9ydCAqdWFydCkKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUyNy9pbmNsdWRlL21hY2gvZGVmQkY1MnhfYmFzZS5oIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTI3L2luY2x1ZGUvbWFjaC9kZWZCRjUyeF9iYXNlLmgKaW5kZXggNmFjMmVkNy4uNjhiNTVkMCAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTI3L2luY2x1ZGUvbWFjaC9kZWZCRjUyeF9iYXNlLmgKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTI3L2luY2x1ZGUvbWFjaC9kZWZCRjUyeF9iYXNlLmgKQEAgLTE4NDAsNiArMTg0MCwzMyBAQAogCiAjZGVmaW5lICAgICAgICAgICAgICAgICBEUFJFU0NBTEUgIDB4ZiAgICAgICAgLyogTG9hZCBDb3VudGVyIFJlZ2lzdGVyICovCiAKKy8qIENOVF9DT01NQU5EIGJpdCBmaWVsZCBvcHRpb25zICovCisKKyNkZWZpbmUgVzFMQ05UX1pFUk8gICAweDAwMDEgICAvKiB3cml0ZSAxIHRvIGxvYWQgQ05UX0NPVU5URVIgd2l0aCB6ZXJvICovCisjZGVmaW5lIFcxTENOVF9NSU4gICAgMHgwMDA0ICAgLyogd3JpdGUgMSB0byBsb2FkIENOVF9DT1VOVEVSIGZyb20gQ05UX01JTiAqLworI2RlZmluZSBXMUxDTlRfTUFYICAgIDB4MDAwOCAgIC8qIHdyaXRlIDEgdG8gbG9hZCBDTlRfQ09VTlRFUiBmcm9tIENOVF9NQVggKi8KKworI2RlZmluZSBXMUxNSU5fWkVSTyAgIDB4MDAxMCAgIC8qIHdyaXRlIDEgdG8gbG9hZCBDTlRfTUlOIHdpdGggemVybyAqLworI2RlZmluZSBXMUxNSU5fQ05UICAgIDB4MDAyMCAgIC8qIHdyaXRlIDEgdG8gbG9hZCBDTlRfTUlOIGZyb20gQ05UX0NPVU5URVIgKi8KKyNkZWZpbmUgVzFMTUlOX01BWCAgICAweDAwODAgICAvKiB3cml0ZSAxIHRvIGxvYWQgQ05UX01JTiBmcm9tIENOVF9NQVggKi8KKworI2RlZmluZSBXMUxNQVhfWkVSTyAgIDB4MDEwMCAgIC8qIHdyaXRlIDEgdG8gbG9hZCBDTlRfTUFYIHdpdGggemVybyAqLworI2RlZmluZSBXMUxNQVhfQ05UICAgIDB4MDIwMCAgIC8qIHdyaXRlIDEgdG8gbG9hZCBDTlRfTUFYIGZyb20gQ05UX0NPVU5URVIgKi8KKyNkZWZpbmUgVzFMTUFYX01JTiAgICAweDA0MDAgICAvKiB3cml0ZSAxIHRvIGxvYWQgQ05UX01BWCBmcm9tIENOVF9NSU4gKi8KKworLyogQ05UX0NPTkZJRyBiaXQgZmllbGQgb3B0aW9ucyAqLworCisjZGVmaW5lIENOVE1PREVfUVVBREVOQyAgMHgwMDAwICAvKiBxdWFkcmF0dXJlIGVuY29kZXIgbW9kZSAqLworI2RlZmluZSBDTlRNT0RFX0JJTkVOQyAgIDB4MDEwMCAgLyogYmluYXJ5IGVuY29kZXIgbW9kZSAqLworI2RlZmluZSBDTlRNT0RFX1VEQ05UICAgIDB4MDIwMCAgLyogdXAvZG93biBjb3VudGVyIG1vZGUgKi8KKyNkZWZpbmUgQ05UTU9ERV9ESVJDTlQgICAweDA0MDAgIC8qIGRpcmVjdGlvbiBjb3VudGVyIG1vZGUgKi8KKyNkZWZpbmUgQ05UTU9ERV9ESVJUTVIgICAweDA1MDAgIC8qIGRpcmVjdGlvbiB0aW1lciBtb2RlICovCisKKyNkZWZpbmUgQk5ETU9ERV9DT01QICAgICAweDAwMDAgIC8qIGJvdW5kYXJ5IGNvbXBhcmUgbW9kZSAqLworI2RlZmluZSBCTkRNT0RFX1pFUk8gICAgIDB4MTAwMCAgLyogYm91bmRhcnkgY29tcGFyZSBhbmQgemVybyBtb2RlICovCisjZGVmaW5lIEJORE1PREVfQ0FQVCAgICAgMHgyMDAwICAvKiBib3VuZGFyeSBjYXB0dXJlIG1vZGUgKi8KKyNkZWZpbmUgQk5ETU9ERV9BRVhUICAgICAweDMwMDAgIC8qIGJvdW5kYXJ5IGF1dG8tZXh0ZW5kIG1vZGUgKi8KKwogLyogQml0IG1hc2tzIGZvciBPVFBfQ09OVFJPTCAqLwogCiAjZGVmaW5lICAgICAgICAgICAgICAgIEZVU0VfRkFERFIgIDB4MWZmICAgICAgLyogT1RQL0Z1c2UgQWRkcmVzcyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTI3L2luY2x1ZGUvbWFjaC9wb3J0bXV4LmggYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MjcvaW5jbHVkZS9tYWNoL3BvcnRtdXguaAppbmRleCBhZTRkMjA1Li43ZjZkYTJjMyAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTI3L2luY2x1ZGUvbWFjaC9wb3J0bXV4LmgKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTI3L2luY2x1ZGUvbWFjaC9wb3J0bXV4LmgKQEAgLTY3LDYgKzY3LDEwIEBACiAjZGVmaW5lIFBfVUFSVDFfUlgJKFBfREVGSU5FRCB8IFBfSURFTlQoR1BJT19QRzEzKSB8IFBfRlVOQ1QoMSkpCiAjZW5kaWYKIAorI2RlZmluZSBQX0NOVF9DWk0JKFBfREVGSU5FRCB8IFBfSURFTlQoR1BJT19QRjExKSB8IFBfRlVOQ1QoMykpCisjZGVmaW5lIFBfQ05UX0NERwkoUF9ERUZJTkVEIHwgUF9JREVOVChHUElPX1BGMTIpIHwgUF9GVU5DVCgzKSkKKyNkZWZpbmUgUF9DTlRfQ1VECShQX0RFRklORUQgfCBQX0lERU5UKEdQSU9fUEYxMykgfCBQX0ZVTkNUKDMpKQorCiAjZGVmaW5lIFBfSFdBSVQJCShQX0RPTlRDQVJFKQogCiAjZGVmaW5lIFBfU1BJMF9TUwkoUF9ERUZJTkVEIHwgUF9JREVOVChHUElPX1BHMSkgfCBQX0ZVTkNUKDApKQpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTMzL2JvYXJkcy9IODYwNi5jIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTMzL2JvYXJkcy9IODYwNi5jCmluZGV4IGM2NmE2OGYuLjcyYWMzYWM4ZSAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTMzL2JvYXJkcy9IODYwNi5jCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzMy9ib2FyZHMvSDg2MDYuYwpAQCAtOSw3ICs5LDcgQEAKICAqIE1vZGlmaWVkOgogICogICAgICAgICAgICAgICBDb3B5cmlnaHQgMjAwNSBOYXRpb25hbCBJQ1QgQXVzdHJhbGlhIChOSUNUQSkKICAqICAgICAgICAgICAgICAgQ29weXJpZ2h0IDIwMDQtMjAwNiBBbmFsb2cgRGV2aWNlcyBJbmMKLSAqCQkgQ29weXJpZ2h0IDIwMDcgSFYgU2lzdGVtYXMgUy5MLgorICoJCSBDb3B5cmlnaHQgMjAwNywyMDA4IEhWIFNpc3RlbWFzIFMuTC4KICAqCiAgKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwogICoKQEAgLTY0LDE4ICs2NCwxOCBAQAogc3RhdGljIHN0cnVjdCByZXNvdXJjZSBkbTkwMDBfcmVzb3VyY2VzW10gPSB7CiAJWzBdID0gewogCQkuc3RhcnQJPSAweDIwMzAwMDAwLAotCQkuZW5kCT0gMHgyMDMwMDAwMCArIDEsCisJCS5lbmQJPSAweDIwMzAwMDAyLAogCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKIAl9LAogCVsxXSA9IHsKLQkJLnN0YXJ0CT0gMHgyMDMwMDAwMCArIDQsCi0JCS5lbmQJPSAweDIwMzAwMDAwICsgNSwKKwkJLnN0YXJ0CT0gMHgyMDMwMDAwNCwKKwkJLmVuZAk9IDB4MjAzMDAwMDYsCiAJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAogCX0sCiAJWzJdID0gewogCQkuc3RhcnQJPSBJUlFfUEYxMCwKIAkJLmVuZAk9IElSUV9QRjEwLAotCQkuZmxhZ3MJPSAoSU9SRVNPVVJDRV9JUlEgfCBJT1JFU09VUkNFX0lSUV9ISUdIRURHRSksCisJCS5mbGFncwk9IChJT1JFU09VUkNFX0lSUSB8IElPUkVTT1VSQ0VfSVJRX0hJR0hFREdFIHwgSVJRRl9TSEFSRUQgfCBJUlFGX1RSSUdHRVJfSElHSCksCiAJfSwKIH07CiAKQEAgLTE0MCwxOCArMTQwLDIyIEBACiAjaWYgZGVmaW5lZChDT05GSUdfTVREX00yNVA4MCkgfHwgZGVmaW5lZChDT05GSUdfTVREX00yNVA4MF9NT0RVTEUpCiBzdGF0aWMgc3RydWN0IG10ZF9wYXJ0aXRpb24gYmZpbl9zcGlfZmxhc2hfcGFydGl0aW9uc1tdID0gewogCXsKLQkJLm5hbWUgPSAiYm9vdGxvYWRlcihzcGkpIiwKLQkJLnNpemUgPSAweDAwMDYwMDAwLAorCQkubmFtZSA9ICJib290bG9hZGVyIChzcGkpIiwKKwkJLnNpemUgPSAweDQwMDAwLAogCQkub2Zmc2V0ID0gMCwKIAkJLm1hc2tfZmxhZ3MgPSBNVERfQ0FQX1JPTQogCX0sIHsKLQkJLm5hbWUgPSAibGludXgga2VybmVsKHNwaSkiLAotCQkuc2l6ZSA9IDB4MTAwMDAwLAotCQkub2Zmc2V0ID0gMHg2MDAwMAorCQkubmFtZSA9ICJmcGdhIChzcGkpIiwKKwkJLnNpemUgPSAgIDB4MzAwMDAsCisJCS5vZmZzZXQgPSAweDQwMDAwCiAJfSwgewotCQkubmFtZSA9ICJmaWxlIHN5c3RlbShzcGkpIiwKLQkJLnNpemUgPSAweDZhMDAwMCwKLQkJLm9mZnNldCA9IDB4MDAxNjAwMDAsCisJCS5uYW1lID0gImxpbnV4IGtlcm5lbCAoc3BpKSIsCisJCS5zaXplID0gICAweDE1MDAwMCwKKwkJLm9mZnNldCA9ICAweDcwMDAwCisJfSwgeworCQkubmFtZSA9ICJqZmZzMiByb290IGZpbGUgc3lzdGVtIChzcGkpIiwKKwkJLnNpemUgPSAgIDB4NjQwMDAwLAorCQkub2Zmc2V0ID0gMHgxYzAwMDAsCiAJfQogfTsKIApAQCAtMzQwLDcgKzM0NCw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdF9zZXJpYWw4MjUwX3BvcnQgc2VyaWFsODI1MF9wbGF0Zm9ybV9kYXRhIFtdID0gewogCXsKLQkJLm1lbWJhc2UgPSAweDIwMjAwMDAwLAorCQkubWVtYmFzZSA9ICh2b2lkICopMHgyMDIwMDAwMCwKIAkJLm1hcGJhc2UgPSAweDIwMjAwMDAwLAogCQkuaXJxID0gSVJRX1BGOCwKIAkJLmZsYWdzID0gVVBGX0JPT1RfQVVUT0NPTkYgfCBVQVJUX0NPTkZJR19UWVBFLApAQCAtMzQ4LDcgKzM1Miw3IEBACiAJCS5yZWdzaGlmdCA9IDEsCiAJCS51YXJ0Y2xrID0gNjY2NjY2NjcsCiAJfSwgewotCQkubWVtYmFzZSA9IDB4MjAyMDAwMTAsCisJCS5tZW1iYXNlID0gKHZvaWQgKikweDIwMjAwMDEwLAogCQkubWFwYmFzZSA9IDB4MjAyMDAwMTAsCiAJCS5pcnEgPSBJUlFfUEY4LAogCQkuZmxhZ3MgPSBVUEZfQk9PVF9BVVRPQ09ORiB8IFVBUlRfQ09ORklHX1RZUEUsCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzMvaGVhZC5TIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTMzL2hlYWQuUwppbmRleCAwMWIyYjdlLi45ZmM5NWFhIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzMvaGVhZC5TCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzMy9oZWFkLlMKQEAgLTc4LDYgKzc4LDkgQEAKIAlyMSA9IFBMTF9CWVBBU1M7ICAgICAgICAgICAgICAgICAvKiBCeXBhc3MgdGhlIFBMTD8gICAgICAgICAgICAgICAgICovCiAJcjEgPSByMSA8PCA4OyAgICAgICAgICAgICAgICAgICAgLyogU2hpZnQgaXQgb3ZlciAgICAgICAgICAgICAgICAgICAqLwogCXIwID0gcjEgfCByMDsgICAgICAgICAgICAgICAgICAgIC8qIGFkZCB0aGVtIGFsbCB0b2dldGhlciAgICAgICAgICAgKi8KKyNpZmRlZiBBTk9NQUxZXzA1MDAwMjY1CisJQklUU0VUKHIwLCAxNSk7ICAgICAgICAgICAgICAgICAgLyogQWRkIDI1MCBtViBvZiBoeXN0ZXJlc2lzIHRvIFNQT1JUIGlucHV0IHBpbnMgKi8KKyNlbmRpZgogCiAJcDAuaCA9IGhpKFBMTF9DVEwpOwogCXAwLmwgPSBsbyhQTExfQ1RMKTsgICAgICAgICAgICAgIC8qIExvYWQgdGhlIGFkZHJlc3MgICAgICAgICAgICAgICAgKi8KZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzMy9pbmNsdWRlL21hY2gvYW5vbWFseS5oIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTMzL2luY2x1ZGUvbWFjaC9hbm9tYWx5LmgKaW5kZXggOGY3ZWExMS4uZjU0NGZjNSAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTMzL2luY2x1ZGUvbWFjaC9hbm9tYWx5LmgKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTMzL2luY2x1ZGUvbWFjaC9hbm9tYWx5LmgKQEAgLTcsNyArNyw3IEBACiAgKi8KIAogLyogVGhpcyBmaWxlIHNob3VsZSBiZSB1cCB0byBkYXRlIHdpdGg6Ci0gKiAgLSBSZXZpc2lvbiBDLCAwMi8wOC8yMDA4OyBBRFNQLUJGNTMxL0JGNTMyL0JGNTMzIEJsYWNrZmluIFByb2Nlc3NvciBBbm9tYWx5IExpc3QKKyAqICAtIFJldmlzaW9uIEQsIDA2LzE4LzIwMDg7IEFEU1AtQkY1MzEvQkY1MzIvQkY1MzMgQmxhY2tmaW4gUHJvY2Vzc29yIEFub21hbHkgTGlzdAogICovCiAKICNpZm5kZWYgX01BQ0hfQU5PTUFMWV9IXwpAQCAtOTcsMTEgKzk3LDExIEBACiAvKiBVQVJUIFNUQiBCaXQgSW5jb3JyZWN0bHkgQWZmZWN0cyBSZWNlaXZlciBTZXR0aW5nICovCiAjZGVmaW5lIEFOT01BTFlfMDUwMDAyMzEgKF9fU0lMSUNPTl9SRVZJU0lPTl9fIDwgNSkKIC8qIFBQSV9GUzMgSXMgTm90IERyaXZlbiBpbiAyIG9yIDMgSW50ZXJuYWwgRnJhbWUgU3luYyBUcmFuc21pdCBNb2RlcyAqLwotI2RlZmluZSBBTk9NQUxZXzA1MDAwMjMzIChfX1NJTElDT05fUkVWSVNJT05fXyA8IDQpCisjZGVmaW5lIEFOT01BTFlfMDUwMDAyMzMgKF9fU0lMSUNPTl9SRVZJU0lPTl9fIDwgNikKIC8qIEluY29ycmVjdCBSZXZpc2lvbiBOdW1iZXIgaW4gRFNQSUQgUmVnaXN0ZXIgKi8KICNkZWZpbmUgQU5PTUFMWV8wNTAwMDIzNCAoX19TSUxJQ09OX1JFVklTSU9OX18gPT0gNCkKIC8qIERGIEJpdCBpbiBQTExfQ1RMIFJlZ2lzdGVyIERvZXMgTm90IFJlc3BvbmQgdG8gSGFyZHdhcmUgUmVzZXQgKi8KLSNkZWZpbmUgQU5PTUFMWV8wNTAwMDI0MiAoX19TSUxJQ09OX1JFVklTSU9OX18gPCA0KQorI2RlZmluZSBBTk9NQUxZXzA1MDAwMjQyIChfX1NJTElDT05fUkVWSVNJT05fXyA8IDUpCiAvKiBJZiBJLUNhY2hlIElzIE9uLCBDU1lOQy9TU1lOQy9JRExFIEFyb3VuZCBDaGFuZ2Ugb2YgQ29udHJvbCBDYXVzZXMgRmFpbHVyZXMgKi8KICNkZWZpbmUgQU5PTUFMWV8wNTAwMDI0NCAoX19TSUxJQ09OX1JFVklTSU9OX18gPCA1KQogLyogU3B1cmlvdXMgSGFyZHdhcmUgRXJyb3IgZnJvbSBhbiBBY2Nlc3MgaW4gdGhlIFNoYWRvdyBvZiBhIENvbmRpdGlvbmFsIEJyYW5jaCAqLwpAQCAtMTMxLDcgKzEzMSw3IEBACiAvKiBDU1lOQy9TU1lOQy9JRExFIENhdXNlcyBJbmZpbml0ZSBTdGFsbCBpbiBQZW51bHRpbWF0ZSBJbnN0cnVjdGlvbiBpbiBIYXJkd2FyZSBMb29wICovCiAjZGVmaW5lIEFOT01BTFlfMDUwMDAyNjQgKF9fU0lMSUNPTl9SRVZJU0lPTl9fIDwgNSkKIC8qIFNlbnNpdGl2aXR5IFRvIE5vaXNlIHdpdGggU2xvdyBJbnB1dCBFZGdlIFJhdGVzIG9uIEV4dGVybmFsIFNQT1JUIFRYIGFuZCBSWCBDbG9ja3MgKi8KLSNkZWZpbmUgQU5PTUFMWV8wNTAwMDI2NSAoX19TSUxJQ09OX1JFVklTSU9OX18gPCA1KQorI2RlZmluZSBBTk9NQUxZXzA1MDAwMjY1ICgxKQogLyogSGlnaCBJL08gQWN0aXZpdHkgQ2F1c2VzIE91dHB1dCBWb2x0YWdlIG9mIEludGVybmFsIFZvbHRhZ2UgUmVndWxhdG9yIChWZGRpbnQpIHRvIEluY3JlYXNlICovCiAjZGVmaW5lIEFOT01BTFlfMDUwMDAyNjkgKF9fU0lMSUNPTl9SRVZJU0lPTl9fIDwgNSkKIC8qIEhpZ2ggSS9PIEFjdGl2aXR5IENhdXNlcyBPdXRwdXQgVm9sdGFnZSBvZiBJbnRlcm5hbCBWb2x0YWdlIFJlZ3VsYXRvciAoVmRkaW50KSB0byBEZWNyZWFzZSAqLwpAQCAtMTQxLDU2ICsxNDEsNTkgQEAKIC8qIENlcnRhaW4gRGF0YSBDYWNoZSBXcml0ZXRocm91Z2ggTW9kZXMgRmFpbCBmb3IgVmRkaW50IDw9IDAuOVYgKi8KICNkZWZpbmUgQU5PTUFMWV8wNTAwMDI3MiAoMSkKIC8qIFdyaXRlcyB0byBTeW5jaHJvbm91cyBTRFJBTSBNZW1vcnkgTWF5IEJlIExvc3QgKi8KLSNkZWZpbmUgQU5PTUFMWV8wNTAwMDI3MyAoMSkKKyNkZWZpbmUgQU5PTUFMWV8wNTAwMDI3MyAoX19TSUxJQ09OX1JFVklTSU9OX18gPCA2KQogLyogVGltaW5nIFJlcXVpcmVtZW50cyBDaGFuZ2UgZm9yIEV4dGVybmFsIEZyYW1lIFN5bmMgUFBJIE1vZGVzIHdpdGggTm9uLVplcm8gUFBJX0RFTEFZICovCiAjZGVmaW5lIEFOT01BTFlfMDUwMDAyNzYgKDEpCiAvKiBXcml0ZXMgdG8gYW4gSS9PIERhdGEgUmVnaXN0ZXIgT25lIFNDTEsgQ3ljbGUgYWZ0ZXIgYW4gRWRnZSBJcyBEZXRlY3RlZCBNYXkgQ2xlYXIgSW50ZXJydXB0ICovCi0jZGVmaW5lIEFOT01BTFlfMDUwMDAyNzcgKDEpCisjZGVmaW5lIEFOT01BTFlfMDUwMDAyNzcgKF9fU0lMSUNPTl9SRVZJU0lPTl9fIDwgNikKIC8qIERpc2FibGluZyBQZXJpcGhlcmFscyB3aXRoIERNQSBSdW5uaW5nIE1heSBDYXVzZSBETUEgU3lzdGVtIEluc3RhYmlsaXR5ICovCi0jZGVmaW5lIEFOT01BTFlfMDUwMDAyNzggKDEpCisjZGVmaW5lIEFOT01BTFlfMDUwMDAyNzggKF9fU0lMSUNPTl9SRVZJU0lPTl9fIDwgNikKIC8qIEZhbHNlIEhhcmR3YXJlIEVycm9yIEV4Y2VwdGlvbiBXaGVuIElTUiBDb250ZXh0IElzIE5vdCBSZXN0b3JlZCAqLwotI2RlZmluZSBBTk9NQUxZXzA1MDAwMjgxICgxKQorI2RlZmluZSBBTk9NQUxZXzA1MDAwMjgxIChfX1NJTElDT05fUkVWSVNJT05fXyA8IDYpCiAvKiBNZW1vcnkgRE1BIENvcnJ1cHRpb24gd2l0aCAzMi1CaXQgRGF0YSBhbmQgVHJhZmZpYyBDb250cm9sICovCi0jZGVmaW5lIEFOT01BTFlfMDUwMDAyODIgKDEpCisjZGVmaW5lIEFOT01BTFlfMDUwMDAyODIgKF9fU0lMSUNPTl9SRVZJU0lPTl9fIDwgNikKIC8qIFN5c3RlbSBNTVIgV3JpdGUgSXMgU3RhbGxlZCBJbmRlZmluaXRlbHkgV2hlbiBLaWxsZWQgaW4gYSBQYXJ0aWN1bGFyIFN0YWdlICovCi0jZGVmaW5lIEFOT01BTFlfMDUwMDAyODMgKDEpCisjZGVmaW5lIEFOT01BTFlfMDUwMDAyODMgKF9fU0lMSUNPTl9SRVZJU0lPTl9fIDwgNikKIC8qIFNQT1JUcyBNYXkgUmVjZWl2ZSBCYWQgRGF0YSBJZiBGSUZPcyBGaWxsIFVwICovCi0jZGVmaW5lIEFOT01BTFlfMDUwMDAyODggKDEpCisjZGVmaW5lIEFOT01BTFlfMDUwMDAyODggKF9fU0lMSUNPTl9SRVZJU0lPTl9fIDwgNikKIC8qIE1lbW9yeS1Uby1NZW1vcnkgRE1BIFNvdXJjZS9EZXN0aW5hdGlvbiBEZXNjcmlwdG9ycyBNdXN0IEJlIGluIFNhbWUgTWVtb3J5IFNwYWNlICovCi0jZGVmaW5lIEFOT01BTFlfMDUwMDAzMDEgKDEpCisjZGVmaW5lIEFOT01BTFlfMDUwMDAzMDEgKF9fU0lMSUNPTl9SRVZJU0lPTl9fIDwgNikKIC8qIFNTWU5DcyBBZnRlciBXcml0ZXMgVG8gRE1BIE1NUiBSZWdpc3RlcnMgTWF5IE5vdCBCZSBIYW5kbGVkIENvcnJlY3RseSAqLwogI2RlZmluZSBBTk9NQUxZXzA1MDAwMzAyIChfX1NJTElDT05fUkVWSVNJT05fXyA8IDUpCiAvKiBOZXcgRmVhdHVyZTogQWRkaXRpb25hbCBIeXN0ZXJlc2lzIG9uIFNQT1JUIElucHV0IFBpbnMgKE5vdCBBdmFpbGFibGUgT24gT2xkZXIgU2lsaWNvbikgKi8KICNkZWZpbmUgQU5PTUFMWV8wNTAwMDMwNSAoX19TSUxJQ09OX1JFVklTSU9OX18gPCA1KQogLyogTmV3IEZlYXR1cmU6IEFkZGl0aW9uYWwgUFBJIEZyYW1lIFN5bmMgU2FtcGxpbmcgT3B0aW9ucyAoTm90IEF2YWlsYWJsZSBPbiBPbGRlciBTaWxpY29uKSAqLwogI2RlZmluZSBBTk9NQUxZXzA1MDAwMzA2IChfX1NJTElDT05fUkVWSVNJT05fXyA8IDUpCisvKiBTQ0tFTE9XIEJpdCBEb2VzIE5vdCBNYWludGFpbiBTdGF0ZSBUaHJvdWdoIEhpYmVybmF0ZSAqLworI2RlZmluZSBBTk9NQUxZXzA1MDAwMzA3ICgxKQogLyogRmFsc2UgSGFyZHdhcmUgRXJyb3JzIENhdXNlZCBieSBGZXRjaGVzIGF0IHRoZSBCb3VuZGFyeSBvZiBSZXNlcnZlZCBNZW1vcnkgKi8KICNkZWZpbmUgQU5PTUFMWV8wNTAwMDMxMCAoMSkKIC8qIEVycm9uZW91cyBGbGFnIChHUElPKSBQaW4gT3BlcmF0aW9ucyB1bmRlciBTcGVjaWZpYyBTZXF1ZW5jZXMgKi8KLSNkZWZpbmUgQU5PTUFMWV8wNTAwMDMxMSAoMSkKKyNkZWZpbmUgQU5PTUFMWV8wNTAwMDMxMSAoX19TSUxJQ09OX1JFVklTSU9OX18gPCA2KQogLyogRXJyb3JzIFdoZW4gU1NZTkMsIENTWU5DLCBvciBMb2FkcyB0byBMVCwgTEIgYW5kIExDIFJlZ2lzdGVycyBBcmUgSW50ZXJydXB0ZWQgKi8KLSNkZWZpbmUgQU5PTUFMWV8wNTAwMDMxMiAoMSkKKyNkZWZpbmUgQU5PTUFMWV8wNTAwMDMxMiAoX19TSUxJQ09OX1JFVklTSU9OX18gPCA2KQogLyogUFBJIElzIExldmVsLVNlbnNpdGl2ZSBvbiBGaXJzdCBUcmFuc2ZlciAqLwotI2RlZmluZSBBTk9NQUxZXzA1MDAwMzEzICgxKQorI2RlZmluZSBBTk9NQUxZXzA1MDAwMzEzIChfX1NJTElDT05fUkVWSVNJT05fXyA8IDYpCiAvKiBLaWxsZWQgU3lzdGVtIE1NUiBXcml0ZSBDb21wbGV0ZXMgRXJyb25lb3VzbHkgT24gTmV4dCBTeXN0ZW0gTU1SIEFjY2VzcyAqLwotI2RlZmluZSBBTk9NQUxZXzA1MDAwMzE1ICgxKQorI2RlZmluZSBBTk9NQUxZXzA1MDAwMzE1IChfX1NJTElDT05fUkVWSVNJT05fXyA8IDYpCiAvKiBJbnRlcm5hbCBWb2x0YWdlIFJlZ3VsYXRvciBWYWx1ZXMgb2YgMS4wNVYsIDEuMTBWIGFuZCAxLjE1ViBOb3QgQWxsb3dlZCBmb3IgTFFGUCBQYWNrYWdlcyAqLwotI2RlZmluZSBBTk9NQUxZXzA1MDAwMzE5IChBTk9NQUxZX0JGNTMxIHx8IEFOT01BTFlfQkY1MzIpCisjZGVmaW5lIEFOT01BTFlfMDUwMDAzMTkgKChBTk9NQUxZX0JGNTMxIHx8IEFOT01BTFlfQkY1MzIpICYmIF9fU0lMSUNPTl9SRVZJU0lPTl9fIDwgNikKIC8qIFNlcmlhbCBQb3J0IChTUE9SVCkgTXVsdGljaGFubmVsIFRyYW5zbWl0IEZhaWx1cmUgd2hlbiBDaGFubmVsIDAgSXMgRGlzYWJsZWQgKi8KLSNkZWZpbmUgQU5PTUFMWV8wNTAwMDM1NyAoMSkKKyNkZWZpbmUgQU5PTUFMWV8wNTAwMDM1NyAoX19TSUxJQ09OX1JFVklTSU9OX18gPCA2KQogLyogVUFSVCBCcmVhayBTaWduYWwgSXNzdWVzICovCiAjZGVmaW5lIEFOT01BTFlfMDUwMDAzNjMgKF9fU0lMSUNPTl9SRVZJU0lPTl9fIDwgNSkKIC8qIFBQSSBVbmRlcmZsb3cgRXJyb3IgR29lcyBVbmRldGVjdGVkIGluIElUVS1SIDY1NiBNb2RlICovCiAjZGVmaW5lIEFOT01BTFlfMDUwMDAzNjYgKDEpCiAvKiBQb3NzaWJsZSBSRVRTIFJlZ2lzdGVyIENvcnJ1cHRpb24gd2hlbiBTdWJyb3V0aW5lIElzIHVuZGVyIDUgQ3ljbGVzIGluIER1cmF0aW9uICovCi0jZGVmaW5lIEFOT01BTFlfMDUwMDAzNzEgKDEpCisjZGVmaW5lIEFOT01BTFlfMDUwMDAzNzEgKF9fU0lMSUNPTl9SRVZJU0lPTl9fIDwgNikKIC8qIFBQSSBEb2VzIE5vdCBTdGFydCBQcm9wZXJseSBJbiBTcGVjaWZpYyBNb2RlICovCi0jZGVmaW5lIEFOT01BTFlfMDUwMDA0MDAgKF9fU0lMSUNPTl9SRVZJU0lPTl9fID49IDUpCisjZGVmaW5lIEFOT01BTFlfMDUwMDA0MDAgKF9fU0lMSUNPTl9SRVZJU0lPTl9fID09IDUpCiAvKiBTU1lOQyBTdGFsbHMgUHJvY2Vzc29yIHdoZW4gRXhlY3V0ZWQgZnJvbSBOb24tQ2FjaGVhYmxlIE1lbW9yeSAqLwotI2RlZmluZSBBTk9NQUxZXzA1MDAwNDAyIChfX1NJTElDT05fUkVWSVNJT05fXyA+PSA1KQorI2RlZmluZSBBTk9NQUxZXzA1MDAwNDAyIChfX1NJTElDT05fUkVWSVNJT05fXyA9PSA1KQogLyogTGV2ZWwtU2Vuc2l0aXZlIEV4dGVybmFsIEdQSU8gV2FrZXVwcyBNYXkgQ2F1c2UgSW5kZWZpbml0ZSBTdGFsbCAqLwogI2RlZmluZSBBTk9NQUxZXzA1MDAwNDAzICgxKQotCisvKiBTcGVjdWxhdGl2ZSBGZXRjaGVzIENhbiBDYXVzZSBVbmRlc2lyZWQgRXh0ZXJuYWwgRklGTyBPcGVyYXRpb25zICovCisjZGVmaW5lIEFOT01BTFlfMDUwMDA0MTYgKDEpCiAKIC8qIFRoZXNlIGFub21hbGllcyBoYXZlIGJlZW4gInBoYXNlZCIgb3V0IG9mIGFuYWxvZy5jb20gYW5vbWFseSBzaGVldHMgYW5kIGFyZQogICogaGVyZSB0byBzaG93IHJ1bm5pbmcgb24gb2xkZXIgc2lsaWNvbiBqdXN0IGlzbid0IGZlYXNpYmxlLgpAQCAtMjY4LDUgKzI3MSw3IEBACiAvKiBBbm9tYWxpZXMgdGhhdCBkb24ndCBleGlzdCBvbiB0aGlzIHByb2MgKi8KICNkZWZpbmUgQU5PTUFMWV8wNTAwMDI2NiAoMCkKICNkZWZpbmUgQU5PTUFMWV8wNTAwMDMyMyAoMCkKKyNkZWZpbmUgQU5PTUFMWV8wNTAwMDM1MyAoMSkKKyNkZWZpbmUgQU5PTUFMWV8wNTAwMDM4NiAoMSkKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzMvaW5jbHVkZS9tYWNoL2JmNTMzLmggYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzMvaW5jbHVkZS9tYWNoL2JmNTMzLmgKaW5kZXggMTJhNDE2OS4uZGZjOGMxYSAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTMzL2luY2x1ZGUvbWFjaC9iZjUzMy5oCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzMy9pbmNsdWRlL21hY2gvYmY1MzMuaApAQCAtMzAsOCArMzAsNiBAQAogI2lmbmRlZiBfX01BQ0hfQkY1MzNfSF9fCiAjZGVmaW5lIF9fTUFDSF9CRjUzM19IX18KIAotI2RlZmluZSBTVVBQT1JURURfUkVWSUQgMgotCiAjZGVmaW5lIE9GRlNFVF8oeCkgKCh4KSAmIDB4MDAwMEZGRkYpCiAKIC8qc29tZSBtaXNjIGRlZmluZXMqLwpAQCAtMTQzLDE5ICsxNDEsMTkgQEAKIAogI2lmZGVmIENPTkZJR19CRjUzMwogI2RlZmluZSBDUFUgIkJGNTMzIgotI2RlZmluZSBDUFVJRCAweDAyN2E1MDAwCisjZGVmaW5lIENQVUlEIDB4MjdhNQogI2VuZGlmCiAjaWZkZWYgQ09ORklHX0JGNTMyCiAjZGVmaW5lIENQVSAiQkY1MzIiCi0jZGVmaW5lIENQVUlEIDB4MDI3NUEwMDAKKyNkZWZpbmUgQ1BVSUQgMHgyNzVBCiAjZW5kaWYKICNpZmRlZiBDT05GSUdfQkY1MzEKICNkZWZpbmUgQ1BVICJCRjUzMSIKLSNkZWZpbmUgQ1BVSUQgMHgwMjdhNTAwMAorI2RlZmluZSBDUFVJRCAweDI3YTUKICNlbmRpZgorCiAjaWZuZGVmIENQVQotI2RlZmluZQlDUFUgIlVOS05PV04iCi0jZGVmaW5lIENQVUlEIDB4MAorI2Vycm9yIFVua25vd24gQ1BVIHR5cGUgLSBUaGlzIGtlcm5lbCBkb2Vzbid0IHNlZW0gdG8gYmUgY29uZmlndXJlZCBwcm9wZXJseQogI2VuZGlmCiAKICNlbmRpZgkJCQkvKiBfX01BQ0hfQkY1MzNfSF9fICAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTMzL2luY2x1ZGUvbWFjaC9iZmluX3NlcmlhbF81eHguaCBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzMy9pbmNsdWRlL21hY2gvYmZpbl9zZXJpYWxfNXh4LmgKaW5kZXggZWJmNTkyYi4uZjNkOWU0OSAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTMzL2luY2x1ZGUvbWFjaC9iZmluX3NlcmlhbF81eHguaAorKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzMvaW5jbHVkZS9tYWNoL2JmaW5fc2VyaWFsXzV4eC5oCkBAIC02OSw2ICs2OSw4IEBACiAjIGVuZGlmCiAjZW5kaWYKIAorI2RlZmluZSBCRklOX1VBUlRfVFhfRklGT19TSVpFCTIKKwogc3RydWN0IGJmaW5fc2VyaWFsX3BvcnQgewogICAgICAgICBzdHJ1Y3QgdWFydF9wb3J0ICAgICAgICBwb3J0OwogICAgICAgICB1bnNpZ25lZCBpbnQgICAgICAgICAgICBvbGRfc3RhdHVzOwpAQCAtODMsNyArODUsNyBAQAogCXVuc2lnbmVkIGludAkJcnhfZG1hX2NoYW5uZWw7CiAJc3RydWN0IHdvcmtfc3RydWN0CXR4X2RtYV93b3JrcXVldWU7CiAjZWxzZQotIyBpZiBBTk9NQUxZXzA1MDAwMjMwCisjIGlmIEFOT01BTFlfMDUwMDAzNjMKIAl1bnNpZ25lZCBpbnQgYW5vbWFseV90aHJlc2hvbGQ7CiAjIGVuZGlmCiAjZW5kaWYKQEAgLTExMSw3ICsxMTMsNiBAQAogCWJmaW5fd3JpdGUxNih1YXJ0LT5wb3J0Lm1lbWJhc2UgKyBPRkZTRVRfTFNSLCAtMSk7CiB9CiAKLXN0cnVjdCBiZmluX3NlcmlhbF9wb3J0IGJmaW5fc2VyaWFsX3BvcnRzW0JGSU5fVUFSVF9OUl9QT1JUU107CiBzdHJ1Y3QgYmZpbl9zZXJpYWxfcmVzIHsKIAl1bnNpZ25lZCBsb25nCXVhcnRfYmFzZV9hZGRyOwogCWludAkJdWFydF9pcnE7CkBAIC0xNDIsNyArMTQzLDYgQEAKIAogI2RlZmluZSBEUklWRVJfTkFNRSAiYmZpbi11YXJ0IgogCi1pbnQgbnJfcG9ydHMgPSBCRklOX1VBUlRfTlJfUE9SVFM7CiBzdGF0aWMgdm9pZCBiZmluX3NlcmlhbF9od19pbml0KHN0cnVjdCBiZmluX3NlcmlhbF9wb3J0ICp1YXJ0KQogewogCkBAIC0xNTgsNyArMTU4LDcgQEAKIAl9CiAJaWYgKHVhcnQtPnJ0c19waW4gPj0gMCkgewogCQlncGlvX3JlcXVlc3QodWFydC0+cnRzX3BpbiwgRFJJVkVSX05BTUUpOwotCQlncGlvX2RpcmVjdGlvbl9pbnB1dCh1YXJ0LT5ydHNfcGluLCAwKTsKKwkJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KHVhcnQtPnJ0c19waW4sIDApOwogCX0KICNlbmRpZgogfQpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM3L2JvYXJkcy9zdGFtcC5jIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM3L2JvYXJkcy9zdGFtcC5jCmluZGV4IDg0ODJkMjIuLjhkMzk0MzkgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzNy9ib2FyZHMvc3RhbXAuYworKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzcvYm9hcmRzL3N0YW1wLmMKQEAgLTUxLDcgKzUxLDYgQEAKICNpbmNsdWRlIDxhc20vcmVib290Lmg+CiAjaW5jbHVkZSA8YXNtL3BvcnRtdXguaD4KICNpbmNsdWRlIDxhc20vZHBtYy5oPgotI2luY2x1ZGUgPGxpbnV4L3NwaS9hZDc4NzcuaD4KIAogLyoKICAqIE5hbWUgdGhlIEJvYXJkIGZvciB0aGUgL3Byb2MvY3B1aW5mbwpAQCAtNTU1LDYgKzU1NCw3IEBACiAjZW5kaWYKIAogI2lmIGRlZmluZWQoQ09ORklHX1RPVUNIU0NSRUVOX0FENzg3NykgfHwgZGVmaW5lZChDT05GSUdfVE9VQ0hTQ1JFRU5fQUQ3ODc3X01PRFVMRSkKKyNpbmNsdWRlIDxsaW51eC9zcGkvYWQ3ODc3Lmg+CiBzdGF0aWMgc3RydWN0IGJmaW41eHhfc3BpX2NoaXAgc3BpX2FkNzg3N19jaGlwX2luZm8gPSB7CiAJLmVuYWJsZV9kbWEgPSAwLAogCS5iaXRzX3Blcl93b3JkID0gMTYsCkBAIC01NzUsNiArNTc1LDMwIEBACiB9OwogI2VuZGlmCiAKKyNpZiBkZWZpbmVkKENPTkZJR19UT1VDSFNDUkVFTl9BRDc4NzkpIHx8IGRlZmluZWQoQ09ORklHX1RPVUNIU0NSRUVOX0FENzg3OV9NT0RVTEUpCisjaW5jbHVkZSA8bGludXgvc3BpL2FkNzg3OS5oPgorc3RhdGljIGNvbnN0IHN0cnVjdCBhZDc4NzlfcGxhdGZvcm1fZGF0YSBiZmluX2FkNzg3OV90c19pbmZvID0geworCS5tb2RlbAkJCT0gNzg3OSwJLyogTW9kZWwgPSBBRDc4NzkgKi8KKwkueF9wbGF0ZV9vaG1zCQk9IDYyMCwJLyogNjIwIE9obSBmcm9tIHRoZSB0b3VjaCBkYXRhc2hlZXQgKi8KKwkucHJlc3N1cmVfbWF4CQk9IDEwMDAwLAorCS5wcmVzc3VyZV9taW4JCT0gMCwKKwkuZmlyc3RfY29udmVyc2lvbl9kZWxheSA9IDMsCS8qIHdhaXQgNTEydXMgYmVmb3JlIGRvIGEgZmlyc3QgY29udmVyc2lvbiAqLworCS5hY3F1aXNpdGlvbl90aW1lIAk9IDEsCS8qIDR1cyBhY3F1aXNpdGlvbiB0aW1lIHBlciBzYW1wbGUgKi8KKwkubWVkaWFuCQkJPSAyLAkvKiBkbyA4IG1lYXN1cmVtZW50cyAqLworCS5hdmVyYWdpbmcgCQk9IDEsCS8qIHRha2UgdGhlIGF2ZXJhZ2Ugb2YgNCBtaWRkbGUgc2FtcGxlcyAqLworCS5wZW5fZG93bl9hY2NfaW50ZXJ2YWwgCT0gMjU1LAkvKiA5LjQgbXMgKi8KKwkuZ3Bpb19vdXRwdXQJCT0gMSwJLyogY29uZmlndXJlIEFVWC9WQkFUL0dQSU8gYXMgR1BJTyBvdXRwdXQgKi8KKwkuZ3Bpb19kZWZhdWx0IAkJPSAxLAkvKiBEdXJpbmcgaW5pdGlhbGl6YXRpb24gc2V0IEdQSU8gPSBISUdIICovCit9OworI2VuZGlmCisKKyNpZiBkZWZpbmVkKENPTkZJR19UT1VDSFNDUkVFTl9BRDc4NzlfU1BJKSB8fCBkZWZpbmVkKENPTkZJR19UT1VDSFNDUkVFTl9BRDc4NzlfU1BJX01PRFVMRSkKK3N0YXRpYyBzdHJ1Y3QgYmZpbjV4eF9zcGlfY2hpcCBzcGlfYWQ3ODc5X2NoaXBfaW5mbyA9IHsKKwkuZW5hYmxlX2RtYSA9IDAsCisJLmJpdHNfcGVyX3dvcmQgPSAxNiwKK307CisjZW5kaWYKKwogI2lmIGRlZmluZWQoQ09ORklHX1NQSV9TUElERVYpIHx8IGRlZmluZWQoQ09ORklHX1NQSV9TUElERVZfTU9EVUxFKQogc3RhdGljIHN0cnVjdCBiZmluNXh4X3NwaV9jaGlwIHNwaWRldl9jaGlwX2luZm8gPSB7CiAJLmVuYWJsZV9kbWEgPSAwLApAQCAtNTgyLDYgKzYwNiwxMyBAQAogfTsKICNlbmRpZgogCisjaWYgZGVmaW5lZChDT05GSUdfRkJfQkZJTl9MUTAzNVExKSB8fCBkZWZpbmVkKENPTkZJR19GQl9CRklOX0xRMDM1UTFfTU9EVUxFKQorc3RhdGljIHN0cnVjdCBiZmluNXh4X3NwaV9jaGlwIGxxMDM1cTFfc3BpX2NoaXBfaW5mbyA9IHsKKwkuZW5hYmxlX2RtYQk9IDAsCisJLmJpdHNfcGVyX3dvcmQJPSA4LAorfTsKKyNlbmRpZgorCiAjaWYgZGVmaW5lZChDT05GSUdfTVREX0RBVEFGTEFTSCkgXAogCXx8IGRlZmluZWQoQ09ORklHX01URF9EQVRBRkxBU0hfTU9EVUxFKQogCkBAIC03MjEsNiArNzUyLDE4IEBACiAJCS5jb250cm9sbGVyX2RhdGEgPSAmc3BpX2FkNzg3N19jaGlwX2luZm8sCiAJfSwKICNlbmRpZgorI2lmIGRlZmluZWQoQ09ORklHX1RPVUNIU0NSRUVOX0FENzg3OV9TUEkpIHx8IGRlZmluZWQoQ09ORklHX1RPVUNIU0NSRUVOX0FENzg3OV9TUElfTU9EVUxFKQorCXsKKwkJLm1vZGFsaWFzID0gImFkNzg3OSIsCisJCS5wbGF0Zm9ybV9kYXRhID0gJmJmaW5fYWQ3ODc5X3RzX2luZm8sCisJCS5pcnEgPSBJUlFfUEY3LAorCQkubWF4X3NwZWVkX2h6ID0gNTAwMDAwMCwgICAgIC8qIG1heCBzcGkgY2xvY2sgKFNDSykgc3BlZWQgaW4gSFogKi8KKwkJLmJ1c19udW0gPSAwLAorCQkuY2hpcF9zZWxlY3QgPSAxLAorCQkuY29udHJvbGxlcl9kYXRhID0gJnNwaV9hZDc4NzlfY2hpcF9pbmZvLAorCQkubW9kZSA9IFNQSV9DUEhBIHwgU1BJX0NQT0wsCisJfSwKKyNlbmRpZgogI2lmIGRlZmluZWQoQ09ORklHX1NQSV9TUElERVYpIHx8IGRlZmluZWQoQ09ORklHX1NQSV9TUElERVZfTU9EVUxFKQogCXsKIAkJLm1vZGFsaWFzID0gInNwaWRldiIsCkBAIC03MzAsNiArNzczLDE2IEBACiAJCS5jb250cm9sbGVyX2RhdGEgPSAmc3BpZGV2X2NoaXBfaW5mbywKIAl9LAogI2VuZGlmCisjaWYgZGVmaW5lZChDT05GSUdfRkJfQkZJTl9MUTAzNVExKSB8fCBkZWZpbmVkKENPTkZJR19GQl9CRklOX0xRMDM1UTFfTU9EVUxFKQorCXsKKwkJLm1vZGFsaWFzID0gImJmaW4tbHEwMzVxMS1zcGkiLAorCQkubWF4X3NwZWVkX2h6ID0gMjAwMDAwMDAsICAgICAvKiBtYXggc3BpIGNsb2NrIChTQ0spIHNwZWVkIGluIEhaICovCisJCS5idXNfbnVtID0gMCwKKwkJLmNoaXBfc2VsZWN0ID0gMiwKKwkJLmNvbnRyb2xsZXJfZGF0YSA9ICZscTAzNXExX3NwaV9jaGlwX2luZm8sCisJCS5tb2RlID0gU1BJX0NQSEEgfCBTUElfQ1BPTCwKKwl9LAorI2VuZGlmCiB9OwogCiAjaWYgZGVmaW5lZChDT05GSUdfU1BJX0JGSU4pIHx8IGRlZmluZWQoQ09ORklHX1NQSV9CRklOX01PRFVMRSkKQEAgLTc3Nyw2ICs4MzAsMzQgQEAKIH07CiAjZW5kaWYKIAorI2lmIGRlZmluZWQoQ09ORklHX0ZCX0JGSU5fTFEwMzVRMSkgfHwgZGVmaW5lZChDT05GSUdfRkJfQkZJTl9MUTAzNVExX01PRFVMRSkKKyNpbmNsdWRlIDxhc20vYmZpbi1scTAzNXExLmg+CisKK3N0YXRpYyBzdHJ1Y3QgYmZpbl9scTAzNXExZmJfZGlzcF9pbmZvIGJmaW5fbHEwMzVxMV9kYXRhID0geworCS5tb2RlID0gCUxRMDM1X05PUk0gfCBMUTAzNV9SR0IgfCBMUTAzNV9STCB8IExRMDM1X1RCLAorCS51c2VfYmwgPSAJMCwJLyogbGV0IHNvbWV0aGluZyBlbHNlIGNvbnRyb2wgdGhlIExDRCBCbGFja2xpZ2h0ICovCisJLmdwaW9fYmwgPQlHUElPX1BGNywKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgYmZpbl9scTAzNXExX3Jlc291cmNlc1tdID0geworCXsKKwkJLnN0YXJ0ID0gSVJRX1BQSV9FUlJPUiwKKwkJLmVuZCA9IElSUV9QUElfRVJST1IsCisJCS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBiZmluX2xxMDM1cTFfZGV2aWNlID0geworCS5uYW1lCQk9ICJiZmluLWxxMDM1cTEiLAorCS5pZAkJPSAtMSwKKwkubnVtX3Jlc291cmNlcyAJPSBBUlJBWV9TSVpFKGJmaW5fbHEwMzVxMV9yZXNvdXJjZXMpLAorCS5yZXNvdXJjZSAJPSBiZmluX2xxMDM1cTFfcmVzb3VyY2VzLAorCS5kZXYJCT0geworCQkucGxhdGZvcm1fZGF0YSA9ICZiZmluX2xxMDM1cTFfZGF0YSwKKwl9LAorfTsKKyNlbmRpZgorCiAjaWYgZGVmaW5lZChDT05GSUdfU0VSSUFMX0JGSU4pIHx8IGRlZmluZWQoQ09ORklHX1NFUklBTF9CRklOX01PRFVMRSkKIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgYmZpbl91YXJ0X3Jlc291cmNlc1tdID0gewogI2lmZGVmIENPTkZJR19TRVJJQUxfQkZJTl9VQVJUMApAQCAtODU2LDcgKzkzNyw3IEBACiAjaWYgZGVmaW5lZChDT05GSUdfSk9ZU1RJQ0tfQUQ3MTQyKSB8fCBkZWZpbmVkKENPTkZJR19KT1lTVElDS19BRDcxNDJfTU9EVUxFKQogCXsKIAkJSTJDX0JPQVJEX0lORk8oImFkNzE0Ml9qb3lzdGljayIsIDB4MkMpLAotCQkuaXJxID0gNTUsCisJCS5pcnEgPSBJUlFfUEY1LAogCX0sCiAjZW5kaWYKICNpZiBkZWZpbmVkKENPTkZJR19UV0lfTENEKSB8fCBkZWZpbmVkKENPTkZJR19UV0lfTENEX01PRFVMRSkKQEAgLTg2Nyw3ICs5NDgsMTQgQEAKICNpZiBkZWZpbmVkKENPTkZJR19UV0lfS0VZUEFEKSB8fCBkZWZpbmVkKENPTkZJR19UV0lfS0VZUEFEX01PRFVMRSkKIAl7CiAJCUkyQ19CT0FSRF9JTkZPKCJwY2Y4NTc0X2tleXBhZCIsIDB4MjcpLAotCQkuaXJxID0gNzIsCisJCS5pcnEgPSBJUlFfUEc2LAorCX0sCisjZW5kaWYKKyNpZiBkZWZpbmVkKENPTkZJR19UT1VDSFNDUkVFTl9BRDc4NzlfSTJDKSB8fCBkZWZpbmVkKENPTkZJR19UT1VDSFNDUkVFTl9BRDc4NzlfSTJDX01PRFVMRSkKKwl7CisJCUkyQ19CT0FSRF9JTkZPKCJhZDc4NzkiLCAweDJGKSwKKwkJLmlycSA9IElSUV9QRzUsCisJCS5wbGF0Zm9ybV9kYXRhID0gKHZvaWQgKikmYmZpbl9hZDc4NzlfdHNfaW5mbywKIAl9LAogI2VuZGlmCiB9OwpAQCAtOTk3LDYgKzEwODUsMTAgQEAKIAkmYmZpbl9mYl9kZXZpY2UsCiAjZW5kaWYKIAorI2lmIGRlZmluZWQoQ09ORklHX0ZCX0JGSU5fTFEwMzVRMSkgfHwgZGVmaW5lZChDT05GSUdfRkJfQkZJTl9MUTAzNVExX01PRFVMRSkKKwkmYmZpbl9scTAzNXExX2RldmljZSwKKyNlbmRpZgorCiAjaWYgZGVmaW5lZChDT05GSUdfRkJfQkZJTl83MzkzKSB8fCBkZWZpbmVkKENPTkZJR19GQl9CRklOXzczOTNfTU9EVUxFKQogCSZiZmluX2ZiX2FkdjczOTNfZGV2aWNlLAogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzcvaGVhZC5TIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM3L2hlYWQuUwppbmRleCAxMmViNWNjLi5mNWM5NGJmIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzcvaGVhZC5TCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzNy9oZWFkLlMKQEAgLTg3LDYgKzg3LDkgQEAKIAlyMSA9IFBMTF9CWVBBU1M7ICAgICAgICAgICAgICAgICAvKiBCeXBhc3MgdGhlIFBMTD8gICAgICAgICAgICAgICAgICovCiAJcjEgPSByMSA8PCA4OyAgICAgICAgICAgICAgICAgICAgLyogU2hpZnQgaXQgb3ZlciAgICAgICAgICAgICAgICAgICAqLwogCXIwID0gcjEgfCByMDsgICAgICAgICAgICAgICAgICAgIC8qIGFkZCB0aGVtIGFsbCB0b2dldGhlciAgICAgICAgICAgKi8KKyNpZmRlZiBBTk9NQUxZXzA1MDAwMjY1CisJQklUU0VUKHIwLCAxNSk7ICAgICAgICAgICAgICAgICAgLyogQWRkIDI1MCBtViBvZiBoeXN0ZXJlc2lzIHRvIFNQT1JUIGlucHV0IHBpbnMgKi8KKyNlbmRpZgogCiAJcDAuaCA9IGhpKFBMTF9DVEwpOwogCXAwLmwgPSBsbyhQTExfQ1RMKTsgICAgICAgICAgICAgIC8qIExvYWQgdGhlIGFkZHJlc3MgICAgICAgICAgICAgICAgKi8KZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzNy9pbmNsdWRlL21hY2gvYW5vbWFseS5oIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM3L2luY2x1ZGUvbWFjaC9hbm9tYWx5LmgKaW5kZXggODQ2MGFiOS4uYzY4OTkyNCAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM3L2luY2x1ZGUvbWFjaC9hbm9tYWx5LmgKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM3L2luY2x1ZGUvbWFjaC9hbm9tYWx5LmgKQEAgLTE1OCw2ICsxNTgsOCBAQAogI2RlZmluZSBBTk9NQUxZXzA1MDAwMjY2ICgwKQogI2RlZmluZSBBTk9NQUxZXzA1MDAwMzExICgwKQogI2RlZmluZSBBTk9NQUxZXzA1MDAwMzIzICgwKQorI2RlZmluZSBBTk9NQUxZXzA1MDAwMzUzICgxKQogI2RlZmluZSBBTk9NQUxZXzA1MDAwMzYzICgwKQorI2RlZmluZSBBTk9NQUxZXzA1MDAwMzg2ICgxKQogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzNy9pbmNsdWRlL21hY2gvYmY1MzcuaCBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzNy9pbmNsdWRlL21hY2gvYmY1MzcuaAppbmRleCBjZmUyYTIyLi4yNGQ1YzlkIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzcvaW5jbHVkZS9tYWNoL2JmNTM3LmgKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM3L2luY2x1ZGUvbWFjaC9iZjUzNy5oCkBAIC0zMCw4ICszMCw2IEBACiAjaWZuZGVmIF9fTUFDSF9CRjUzN19IX18KICNkZWZpbmUgX19NQUNIX0JGNTM3X0hfXwogCi0jZGVmaW5lIFNVUFBPUlRFRF9SRVZJRCAyCi0KIC8qIE1hc2tzIGZvciBnZW5lcmljIEVSUk9SIElSUSBkZW11bHRpcGxleGluZyB1c2VkIGluIGludC1wcmlvcml0eS1zYy5jICovCiAKICNkZWZpbmUgU1BJX0VSUl9NQVNLIChUWENPTCB8IFJCU1kgfCBNT0RGIHwgVFhFKQkvKiBTUElfU1RBVCAqLwpAQCAtMTIzLDE5ICsxMjEsMTkgQEAKIAogI2lmZGVmIENPTkZJR19CRjUzNwogI2RlZmluZSBDUFUgIkJGNTM3IgotI2RlZmluZSBDUFVJRCAweDAyN2M4MDAwCisjZGVmaW5lIENQVUlEIDB4MjdjOAogI2VuZGlmCiAjaWZkZWYgQ09ORklHX0JGNTM2CiAjZGVmaW5lIENQVSAiQkY1MzYiCi0jZGVmaW5lIENQVUlEIDB4MDI3YzgwMDAKKyNkZWZpbmUgQ1BVSUQgMHgyN2M4CiAjZW5kaWYKICNpZmRlZiBDT05GSUdfQkY1MzQKICNkZWZpbmUgQ1BVICJCRjUzNCIKLSNkZWZpbmUgQ1BVSUQgMHgwMjdjNjAwMAorI2RlZmluZSBDUFVJRCAweDI3YzYKICNlbmRpZgorCiAjaWZuZGVmIENQVQotI2RlZmluZQlDUFUgIlVOS05PV04iCi0jZGVmaW5lIENQVUlEIDB4MAorI2Vycm9yIFVua25vd24gQ1BVIHR5cGUgLSBUaGlzIGtlcm5lbCBkb2Vzbid0IHNlZW0gdG8gYmUgY29uZmlndXJlZCBwcm9wZXJseQogI2VuZGlmCiAKICNlbmRpZgkJCQkvKiBfX01BQ0hfQkY1MzdfSF9fICAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM3L2luY2x1ZGUvbWFjaC9iZmluX3NlcmlhbF81eHguaCBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzNy9pbmNsdWRlL21hY2gvYmZpbl9zZXJpYWxfNXh4LmgKaW5kZXggMWJmNTZmZi4uYjNmODdlMSAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM3L2luY2x1ZGUvbWFjaC9iZmluX3NlcmlhbF81eHguaAorKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzcvaW5jbHVkZS9tYWNoL2JmaW5fc2VyaWFsXzV4eC5oCkBAIC03OCw2ICs3OCw5IEBACiAjICBkZWZpbmUgQ09ORklHX1VBUlQxX1JUU19QSU4gLTEKICMgZW5kaWYKICNlbmRpZgorCisjZGVmaW5lIEJGSU5fVUFSVF9UWF9GSUZPX1NJWkUJMgorCiAvKgogICogVGhlIHBpbiBjb25maWd1cmF0aW9uIGlzIGRpZmZlcmVudCBmcm9tIHNjaGVtYXRpYwogICovCkBAIC0xMTksNyArMTIyLDYgQEAKIAliZmluX3dyaXRlMTYodWFydC0+cG9ydC5tZW1iYXNlICsgT0ZGU0VUX0xTUiwgLTEpOwogfQogCi1zdHJ1Y3QgYmZpbl9zZXJpYWxfcG9ydCBiZmluX3NlcmlhbF9wb3J0c1tCRklOX1VBUlRfTlJfUE9SVFNdOwogc3RydWN0IGJmaW5fc2VyaWFsX3JlcyB7CiAJdW5zaWduZWQgbG9uZwl1YXJ0X2Jhc2VfYWRkcjsKIAlpbnQJCXVhcnRfaXJxOwpAQCAtMTY0LDggKzE2Niw2IEBACiAjZW5kaWYKIH07CiAKLWludCBucl9wb3J0cyA9IEFSUkFZX1NJWkUoYmZpbl9zZXJpYWxfcmVzb3VyY2UpOwotCiAjZGVmaW5lIERSSVZFUl9OQU1FICJiZmluLXVhcnQiCiAKIHN0YXRpYyB2b2lkIGJmaW5fc2VyaWFsX2h3X2luaXQoc3RydWN0IGJmaW5fc2VyaWFsX3BvcnQgKnVhcnQpCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvYm9hcmRzL2NtX2JmNTQ4LmMgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvYm9hcmRzL2NtX2JmNTQ4LmMKaW5kZXggY2U5MzRlZS4uMjQxOTJhYSAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2JvYXJkcy9jbV9iZjU0OC5jCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9ib2FyZHMvY21fYmY1NDguYwpAQCAtMzYsMTEgKzM2LDggQEAKICNpbmNsdWRlIDxsaW51eC9zcGkvZmxhc2guaD4KICNpbmNsdWRlIDxsaW51eC9pcnEuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KLSNpZiBkZWZpbmVkKENPTkZJR19VU0JfTVVTQl9IRFJDKSB8fCBkZWZpbmVkKENPTkZJR19VU0JfTVVTQl9IRFJDX01PRFVMRSkKICNpbmNsdWRlIDxsaW51eC91c2IvbXVzYi5oPgotI2VuZGlmCiAjaW5jbHVkZSA8YXNtL2JmaW41eHhfc3BpLmg+Ci0jaW5jbHVkZSA8YXNtL2NwbGIuaD4KICNpbmNsdWRlIDxhc20vZG1hLmg+CiAjaW5jbHVkZSA8YXNtL2dwaW8uaD4KICNpbmNsdWRlIDxhc20vbmFuZC5oPgpAQCAtMTc1LDYgKzE3Miw3IEBACiAJewogCQkuc3RhcnQgPSAweEZGQzAzMTAwLAogCQkuZW5kID0gMHhGRkMwMzFGRiwKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0sCiAJfSwKICNlbmRpZgogfTsKQEAgLTI2OCw2ICsyNjYsMTYgQEAKIAl9LAogfTsKIAorc3RhdGljIHN0cnVjdCBtdXNiX2hkcmNfY29uZmlnIG11c2JfY29uZmlnID0geworCS5tdWx0aXBvaW50CT0gMCwKKwkuZHluX2ZpZm8JPSAwLAorCS5zb2Z0X2Nvbgk9IDEsCisJLmRtYQkJPSAxLAorCS5udW1fZXBzCT0gNywKKwkuZG1hX2NoYW5uZWxzCT0gNywKKwkuZ3Bpb192cnNlbAk9IEdQSU9fUEg2LAorfTsKKwogc3RhdGljIHN0cnVjdCBtdXNiX2hkcmNfcGxhdGZvcm1fZGF0YSBtdXNiX3BsYXQgPSB7CiAjaWYgZGVmaW5lZChDT05GSUdfVVNCX01VU0JfT1RHKQogCS5tb2RlCQk9IE1VU0JfT1RHLApAQCAtMjc2LDcgKzI4NCw3IEBACiAjZWxpZiBkZWZpbmVkKENPTkZJR19VU0JfR0FER0VUX01VU0JfSERSQykKIAkubW9kZQkJPSBNVVNCX1BFUklQSEVSQUwsCiAjZW5kaWYKLQkubXVsdGlwb2ludAk9IDAsCisJLmNvbmZpZwkJPSAmbXVzYl9jb25maWcsCiB9OwogCiBzdGF0aWMgdTY0IG11c2JfZG1hbWFzayA9IH4odTMyKTA7CkBAIC0zMjEsMTIgKzMyOSwxMiBAQAogCXsKIAkJLm5hbWUgPSAibGludXgga2VybmVsKG5hbmQpIiwKIAkJLm9mZnNldCA9IDAsCi0JCS5zaXplID0gNCAqIFNJWkVfMU0sCisJCS5zaXplID0gNCAqIDEwMjQgKiAxMDI0LAogCX0sCiAJewogCQkubmFtZSA9ICJmaWxlIHN5c3RlbShuYW5kKSIsCi0JCS5vZmZzZXQgPSA0ICogU0laRV8xTSwKLQkJLnNpemUgPSAoMjU2IC0gNCkgKiBTSVpFXzFNLAorCQkub2Zmc2V0ID0gNCAqIDEwMjQgKiAxMDI0LAorCQkuc2l6ZSA9ICgyNTYgLSA0KSAqIDEwMjQgKiAxMDI0LAogCX0sCiB9OwogCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvYm9hcmRzL2V6a2l0LmMgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvYm9hcmRzL2V6a2l0LmMKaW5kZXggMzkzNTc2OS4uNTI4ODE4NyAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2JvYXJkcy9lemtpdC5jCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9ib2FyZHMvZXpraXQuYwpAQCAtMzgsMTEgKzM4LDggQEAKICNpbmNsdWRlIDxsaW51eC9pcnEuaD4KICNpbmNsdWRlIDxsaW51eC9pMmMuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KLSNpZiBkZWZpbmVkKENPTkZJR19VU0JfTVVTQl9IRFJDKSB8fCBkZWZpbmVkKENPTkZJR19VU0JfTVVTQl9IRFJDX01PRFVMRSkKICNpbmNsdWRlIDxsaW51eC91c2IvbXVzYi5oPgotI2VuZGlmCiAjaW5jbHVkZSA8YXNtL2JmaW41eHhfc3BpLmg+Ci0jaW5jbHVkZSA8YXNtL2NwbGIuaD4KICNpbmNsdWRlIDxhc20vZG1hLmg+CiAjaW5jbHVkZSA8YXNtL2dwaW8uaD4KICNpbmNsdWRlIDxhc20vbmFuZC5oPgpAQCAtMTg2LDYgKzE4MywzNyBAQAogfTsKICNlbmRpZgogCisjaWYgZGVmaW5lZChDT05GSUdfSk9ZU1RJQ0tfQkZJTl9ST1RBUlkpIHx8IGRlZmluZWQoQ09ORklHX0pPWVNUSUNLX0JGSU5fUk9UQVJZX01PRFVMRSkKKyNpbmNsdWRlIDxhc20vYmZpbl9yb3RhcnkuaD4KKworc3RhdGljIHN0cnVjdCBiZmluX3JvdGFyeV9wbGF0Zm9ybV9kYXRhIGJmaW5fcm90YXJ5X2RhdGEgPSB7CisJLyoucm90YXJ5X3VwX2tleSAgICAgPSBLRVlfVVAsKi8KKwkvKi5yb3RhcnlfZG93bl9rZXkgICA9IEtFWV9ET1dOLCovCisJLnJvdGFyeV9yZWxfY29kZSAgID0gUkVMX1dIRUVMLAorCS5yb3RhcnlfYnV0dG9uX2tleSA9IEtFWV9FTlRFUiwKKwkuZGVib3VuY2UJICAgPSAxMCwJLyogMC4uMTcgKi8KKwkubW9kZQkJICAgPSBST1RfUVVBRF9FTkMgfCBST1RfREVCRSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgYmZpbl9yb3RhcnlfcmVzb3VyY2VzW10gPSB7CisJeworCQkuc3RhcnQgPSBJUlFfQ05ULAorCQkuZW5kID0gSVJRX0NOVCwKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGJmaW5fcm90YXJ5X2RldmljZSA9IHsKKwkubmFtZQkJPSAiYmZpbi1yb3RhcnkiLAorCS5pZAkJPSAtMSwKKwkubnVtX3Jlc291cmNlcyAJPSBBUlJBWV9TSVpFKGJmaW5fcm90YXJ5X3Jlc291cmNlcyksCisJLnJlc291cmNlIAk9IGJmaW5fcm90YXJ5X3Jlc291cmNlcywKKwkuZGV2CQk9IHsKKwkJLnBsYXRmb3JtX2RhdGEgPSAmYmZpbl9yb3RhcnlfZGF0YSwKKwl9LAorfTsKKyNlbmRpZgorCiAjaWYgZGVmaW5lZChDT05GSUdfUlRDX0RSVl9CRklOKSB8fCBkZWZpbmVkKENPTkZJR19SVENfRFJWX0JGSU5fTU9EVUxFKQogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgcnRjX2RldmljZSA9IHsKIAkubmFtZSA9ICJydGMtYmZpbiIsCkBAIC0zMTQsNiArMzQyLDE2IEBACiAJfSwKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgbXVzYl9oZHJjX2NvbmZpZyBtdXNiX2NvbmZpZyA9IHsKKwkubXVsdGlwb2ludAk9IDAsCisJLmR5bl9maWZvCT0gMCwKKwkuc29mdF9jb24JPSAxLAorCS5kbWEJCT0gMSwKKwkubnVtX2Vwcwk9IDcsCisJLmRtYV9jaGFubmVscwk9IDcsCisJLmdwaW9fdnJzZWwJPSBHUElPX1BFNywKK307CisKIHN0YXRpYyBzdHJ1Y3QgbXVzYl9oZHJjX3BsYXRmb3JtX2RhdGEgbXVzYl9wbGF0ID0gewogI2lmIGRlZmluZWQoQ09ORklHX1VTQl9NVVNCX09URykKIAkubW9kZQkJPSBNVVNCX09URywKQEAgLTMyMiw3ICszNjAsNyBAQAogI2VsaWYgZGVmaW5lZChDT05GSUdfVVNCX0dBREdFVF9NVVNCX0hEUkMpCiAJLm1vZGUJCT0gTVVTQl9QRVJJUEhFUkFMLAogI2VuZGlmCi0JLm11bHRpcG9pbnQJPSAwLAorCS5jb25maWcJCT0gJm11c2JfY29uZmlnLAogfTsKIAogc3RhdGljIHU2NCBtdXNiX2RtYW1hc2sgPSB+KHUzMikwOwpAQCAtMzY3LDcgKzQwNSw3IEBACiAJewogCQkubmFtZSA9ICJsaW51eCBrZXJuZWwobmFuZCkiLAogCQkub2Zmc2V0ID0gMCwKLQkJLnNpemUgPSA0ICogU0laRV8xTSwKKwkJLnNpemUgPSA0ICogMTAyNCAqIDEwMjQsCiAJfSwKIAl7CiAJCS5uYW1lID0gImZpbGUgc3lzdGVtKG5hbmQpIiwKQEAgLTQyNCw3ICs0NjIsNyBAQAogCQkub2Zmc2V0ICAgICA9IDAsCiAJfSwgewogCQkubmFtZSAgICAgICA9ICJsaW51eCBrZXJuZWwobm9yKSIsCi0JCS5zaXplICAgICAgID0gMHgxQzAwMDAsCisJCS5zaXplICAgICAgID0gMHg0MDAwMDAsCiAJCS5vZmZzZXQgICAgID0gTVREUEFSVF9PRlNfQVBQRU5ELAogCX0sIHsKIAkJLm5hbWUgICAgICAgPSAiZmlsZSBzeXN0ZW0obm9yKSIsCkBAIC00NDEsNyArNDc5LDcgQEAKIAogc3RhdGljIHN0cnVjdCByZXNvdXJjZSBlemtpdF9mbGFzaF9yZXNvdXJjZSA9IHsKIAkuc3RhcnQgPSAweDIwMDAwMDAwLAotCS5lbmQgICA9IDB4MjBmZmZmZmYsCisJLmVuZCAgID0gMHgyMWZmZmZmZiwKIAkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwKIH07CiAKQEAgLTU1MSw3ICs1ODksNyBAQAogewogCS5tb2RhbGlhcwkJPSAiYWQ3ODc3IiwKIAkucGxhdGZvcm1fZGF0YQkJPSAmYmZpbl9hZDc4NzdfdHNfaW5mbywKLQkuaXJxCQkJPSBJUlFfUEoxMSwKKwkuaXJxCQkJPSBJUlFfUEoxMSwJLyogbmV3ZXIgYm9hcmRzIChSZXYgMS40KykgdXNlIElSUV9QQjQgKi8KIAkubWF4X3NwZWVkX2h6CQk9IDEyNTAwMDAwLCAgICAgLyogbWF4IHNwaSBjbG9jayAoU0NLKSBzcGVlZCBpbiBIWiAqLwogCS5idXNfbnVtCQk9IDAsCiAJLmNoaXBfc2VsZWN0ICAJCT0gMiwKQEAgLTgxMCw2ICs4NDgsMTAgQEAKIAkmYmY1NHhfa3BhZF9kZXZpY2UsCiAjZW5kaWYKIAorI2lmIGRlZmluZWQoQ09ORklHX0pPWVNUSUNLX0JGSU5fUk9UQVJZKSB8fCBkZWZpbmVkKENPTkZJR19KT1lTVElDS19CRklOX1JPVEFSWV9NT0RVTEUpCisJJmJmaW5fcm90YXJ5X2RldmljZSwKKyNlbmRpZgorCiAjaWYgZGVmaW5lZChDT05GSUdfSTJDX0JMQUNLRklOX1RXSSkgfHwgZGVmaW5lZChDT05GSUdfSTJDX0JMQUNLRklOX1RXSV9NT0RVTEUpCiAJJmkyY19iZmluX3R3aTBfZGV2aWNlLAogI2lmICFkZWZpbmVkKENPTkZJR19CRjU0MikKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9oZWFkLlMgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvaGVhZC5TCmluZGV4IDRkNWNmZWEuLjkzYjM2MWQgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9oZWFkLlMKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2hlYWQuUwpAQCAtNzMsMjUgKzczLDE5IEBACiAJd1twMF0gPSByMC5sOwogCXNzeW5jOwogCi0jaWYgZGVmaW5lZChDT05GSUdfQkY1NHgpCisJLyogZW5hYmxlIHNlbGYgcmVmcmVzaCB2aWEgU1JSRVEgKi8KIAlQMi5IID0gaGkoRUJJVV9SU1RDVEwpOwogCVAyLkwgPSBsbyhFQklVX1JTVENUTCk7CiAJUjAgPSBbUDJdOwogCUJJVFNFVCAoUjAsIDMpOwotI2Vsc2UKLQlQMi5IID0gaGkoRUJJVV9TREdDVEwpOwotCVAyLkwgPSBsbyhFQklVX1NER0NUTCk7Ci0JUjAgPSBbUDJdOwotCUJJVFNFVCAoUjAsIDI0KTsKLSNlbmRpZgogCVtQMl0gPSBSMDsKIAlTU1lOQzsKLSNpZiBkZWZpbmVkKENPTkZJR19CRjU0eCkKKworCS8qIHdhaXQgZm9yIFNSQUNLIGJpdCB0byBiZSBzZXQgKi8KIC5MU1JSX01PREU6CiAJUjAgPSBbUDJdOwogCUNDID0gQklUVFNUKFIwLCA0KTsKIAlpZiAhQ0MgSlVNUCAuTFNSUl9NT0RFOwotI2VuZGlmCiAKIAlyMCA9IENPTkZJR19WQ09fTVVMVCAmIDYzOyAgICAgICAvKiBMb2FkIHRoZSBWQ08gbXVsdGlwbGllciAgICAgICAgICovCiAJcjAgPSByMCA8PCA5OyAgICAgICAgICAgICAgICAgICAgLyogU2hpZnQgaXQgb3ZlciwgICAgICAgICAgICAgICAgICAqLwpAQCAtMTAwLDYgKzk0LDkgQEAKIAlyMSA9IFBMTF9CWVBBU1M7ICAgICAgICAgICAgICAgICAvKiBCeXBhc3MgdGhlIFBMTD8gICAgICAgICAgICAgICAgICovCiAJcjEgPSByMSA8PCA4OyAgICAgICAgICAgICAgICAgICAgLyogU2hpZnQgaXQgb3ZlciAgICAgICAgICAgICAgICAgICAqLwogCXIwID0gcjEgfCByMDsgICAgICAgICAgICAgICAgICAgIC8qIGFkZCB0aGVtIGFsbCB0b2dldGhlciAgICAgICAgICAgKi8KKyNpZmRlZiBBTk9NQUxZXzA1MDAwMjY1CisJQklUU0VUKHIwLCAxNSk7ICAgICAgICAgICAgICAgICAgLyogQWRkIDI1MCBtViBvZiBoeXN0ZXJlc2lzIHRvIFNQT1JUIGlucHV0IHBpbnMgKi8KKyNlbmRpZgogCiAJcDAuaCA9IGhpKFBMTF9DVEwpOwogCXAwLmwgPSBsbyhQTExfQ1RMKTsgICAgICAgICAgICAgIC8qIExvYWQgdGhlIGFkZHJlc3MgICAgICAgICAgICAgICAgKi8KQEAgLTEyMyw3ICsxMjAsNyBAQAogCXdbcDBdID0gcjAubDsKIAlzc3luYzsKIAotI2lmIGRlZmluZWQoQ09ORklHX0JGNTR4KQorCS8qIGRpc2FibGUgc2VsZiByZWZyZXNoIGJ5IGNsZWFyaW5nIFNSUkVRICovCiAJUDIuSCA9IGhpKEVCSVVfUlNUQ1RMKTsKIAlQMi5MID0gbG8oRUJJVV9SU1RDVEwpOwogCVIwID0gW1AyXTsKQEAgLTE1NSw0MSArMTUyLDYgQEAKIAlyMC5oID0gaGkobWVtX0REUkNUTDIpOwogCVtwMF0gPSByMDsKIAlzc3luYzsKLSNlbHNlCi0JcDAubCA9IGxvKEVCSVVfU0RSUkMpOwotCXAwLmggPSBoaShFQklVX1NEUlJDKTsKLQlyMCA9IG1lbV9TRFJSQzsKLQl3W3AwXSA9IHIwLmw7Ci0Jc3N5bmM7Ci0KLQlwMC5sID0gTE8oRUJJVV9TREJDVEwpOwotCXAwLmggPSBISShFQklVX1NEQkNUTCk7ICAgICAvKiBTRFJBTSBNZW1vcnkgQmFuayBDb250cm9sIFJlZ2lzdGVyICovCi0JcjAgPSBtZW1fU0RCQ1RMOwotCXdbcDBdID0gcjAubDsKLQlzc3luYzsKLQotCVAyLkggPSBoaShFQklVX1NER0NUTCk7Ci0JUDIuTCA9IGxvKEVCSVVfU0RHQ1RMKTsKLQlSMCA9IFtQMl07Ci0JQklUQ0xSIChSMCwgMjQpOwotCXAwLmggPSBoaShFQklVX1NEU1RBVCk7Ci0JcDAubCA9IGxvKEVCSVVfU0RTVEFUKTsKLQlyMi5sID0gd1twMF07Ci0JY2MgPSBiaXR0c3QocjIsMyk7Ci0JaWYgIWNjIGp1bXAgLkxza2lwOwotCU5PUDsKLQlCSVRTRVQgKFIwLCAyMyk7Ci0uTHNraXA6Ci0JW1AyXSA9IFIwOwotCVNTWU5DOwotCi0JUjAuTCA9IGxvKG1lbV9TREdDVEwpOwotCVIwLkggPSBoaShtZW1fU0RHQ1RMKTsKLQlSMSA9IFtwMl07Ci0JUjEgPSBSMSB8IFIwOwotCVtQMl0gPSBSMTsKLQlTU1lOQzsKLSNlbmRpZgogCiAJUlRTOwogRU5EUFJPQyhfc3RhcnRfZG1hX2NvZGUpCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvaW5jbHVkZS9tYWNoL2Fub21hbHkuaCBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9pbmNsdWRlL21hY2gvYW5vbWFseS5oCmluZGV4IDNhZDU5NjUuLjgxNmIwOTIgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9pbmNsdWRlL21hY2gvYW5vbWFseS5oCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9pbmNsdWRlL21hY2gvYW5vbWFseS5oCkBAIC0yLDE4ICsyLDE4IEBACiAgKiBGaWxlOiBpbmNsdWRlL2FzbS1ibGFja2Zpbi9tYWNoLWJmNTQ4L2Fub21hbHkuaAogICogQnVnczogRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMDcgQW5hbG9nIERldmljZXMgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMDggQW5hbG9nIERldmljZXMgSW5jLgogICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgogICovCiAKIC8qIFRoaXMgZmlsZSBzaG91bGUgYmUgdXAgdG8gZGF0ZSB3aXRoOgotICogIC0gUmV2aXNpb24gRSwgMTEvMjgvMjAwNzsgQURTUC1CRjU0Mi9CRjU0NC9CRjU0Ny9CRjU0OC9CRjU0OSBCbGFja2ZpbiBQcm9jZXNzb3IgQW5vbWFseSBMaXN0CisgKiAgLSBSZXZpc2lvbiBHLCAwOC8wNy8yMDA4OyBBRFNQLUJGNTQyL0JGNTQ0L0JGNTQ3L0JGNTQ4L0JGNTQ5IEJsYWNrZmluIFByb2Nlc3NvciBBbm9tYWx5IExpc3QKICAqLwogCiAjaWZuZGVmIF9NQUNIX0FOT01BTFlfSF8KICNkZWZpbmUgX01BQ0hfQU5PTUFMWV9IXwogCi0vKiBNdWx0aS1Jc3N1ZSBJbnN0cnVjdGlvbiB3aXRoIGRzcDMyc2hpZnRpbW0gaW4gc2xvdDEgYW5kIFAtcmVnIFN0b3JlIGluIHNsb3QgMiBOb3QgU3VwcG9ydGVkICovCisvKiBNdWx0aS1Jc3N1ZSBJbnN0cnVjdGlvbiB3aXRoIGRzcDMyc2hpZnRpbW0gaW4gc2xvdDEgYW5kIFAtcmVnIFN0b3JlIGluIHNsb3QyIE5vdCBTdXBwb3J0ZWQgKi8KICNkZWZpbmUgQU5PTUFMWV8wNTAwMDA3NCAoMSkKIC8qIERNQV9SVU4gQml0IElzIE5vdCBWYWxpZCBhZnRlciBhIFBlcmlwaGVyYWwgUmVjZWl2ZSBDaGFubmVsIERNQSBTdG9wcyAqLwogI2RlZmluZSBBTk9NQUxZXzA1MDAwMTE5ICgxKQpAQCAtMzYsMTQgKzM2LDE0IEBACiAvKiBUV0kgU2xhdmUgQm9vdCBNb2RlIElzIE5vdCBGdW5jdGlvbmFsICovCiAjZGVmaW5lIEFOT01BTFlfMDUwMDAzMjQgKF9fU0lMSUNPTl9SRVZJU0lPTl9fIDwgMSkKIC8qIEV4dGVybmFsIEZJRk8gQm9vdCBNb2RlIElzIE5vdCBGdW5jdGlvbmFsICovCi0jZGVmaW5lIEFOT01BTFlfMDUwMDAzMjUgKF9fU0lMSUNPTl9SRVZJU0lPTl9fIDwgMSkKKyNkZWZpbmUgQU5PTUFMWV8wNTAwMDMyNSAoX19TSUxJQ09OX1JFVklTSU9OX18gPCAyKQogLyogRGF0YSBMb3N0IFdoZW4gQ29yZSBhbmQgRE1BIEFjY2Vzc2VzIEFyZSBNYWRlIHRvIHRoZSBVU0IgRklGTyBTaW11bHRhbmVvdXNseSAqLwogI2RlZmluZSBBTk9NQUxZXzA1MDAwMzI3IChfX1NJTElDT05fUkVWSVNJT05fXyA8IDEpCiAvKiBJbmNvcnJlY3QgQWNjZXNzIG9mIE9UUF9TVEFUVVMgRHVyaW5nIG90cF93cml0ZSgpIEZ1bmN0aW9uICovCiAjZGVmaW5lIEFOT01BTFlfMDUwMDAzMjggKF9fU0lMSUNPTl9SRVZJU0lPTl9fIDwgMSkKIC8qIFN5bmNocm9ub3VzIEJ1cnN0IEZsYXNoIEJvb3QgTW9kZSBJcyBOb3QgRnVuY3Rpb25hbCAqLwogI2RlZmluZSBBTk9NQUxZXzA1MDAwMzI5IChfX1NJTElDT05fUkVWSVNJT05fXyA8IDEpCi0vKiBIb3N0IERNQSBCb290IE1vZGUgSXMgTm90IEZ1bmN0aW9uYWwgKi8KKy8qIEhvc3QgRE1BIEJvb3QgTW9kZXMgQXJlIE5vdCBGdW5jdGlvbmFsICovCiAjZGVmaW5lIEFOT01BTFlfMDUwMDAzMzAgKF9fU0lMSUNPTl9SRVZJU0lPTl9fIDwgMSkKIC8qIEluYWRlcXVhdGUgVGltaW5nIE1hcmdpbnMgb24gRERSIERRUyB0byBEUSBhbmQgRFFNIFNrZXcgKi8KICNkZWZpbmUgQU5PTUFMWV8wNTAwMDMzNCAoX19TSUxJQ09OX1JFVklTSU9OX18gPCAxKQpAQCAtNjEsMjYgKzYxLDEwMiBAQAogI2RlZmluZSBBTk9NQUxZXzA1MDAwMzQ0IChfX1NJTElDT05fUkVWSVNJT05fXyA8IDEpCiAvKiBVU0IgQ2FsaWJyYXRpb24gVmFsdWUgSXMgTm90IEludGlhbGl6ZWQgKi8KICNkZWZpbmUgQU5PTUFMWV8wNTAwMDM0NiAoX19TSUxJQ09OX1JFVklTSU9OX18gPCAxKQotLyogQm9vdCBST00gS2VybmVsIEluY29ycmVjdGx5IEFsdGVycyBSZXNldCBWYWx1ZSBvZiBVU0IgUmVnaXN0ZXIgKi8KKy8qIFVTQiBDYWxpYnJhdGlvbiBWYWx1ZSB0byB1c2UgKi8KKyNkZWZpbmUgQU5PTUFMWV8wNTAwMDM0Nl92YWx1ZSAweDU0MTEKKy8qIFByZWJvb3QgUm91dGluZSBJbmNvcnJlY3RseSBBbHRlcnMgUmVzZXQgVmFsdWUgb2YgVVNCIFJlZ2lzdGVyICovCiAjZGVmaW5lIEFOT01BTFlfMDUwMDAzNDcgKF9fU0lMSUNPTl9SRVZJU0lPTl9fIDwgMSkKIC8qIERhdGEgTG9zdCB3aGVuIENvcmUgUmVhZHMgU0RIIERhdGEgRklGTyAqLwogI2RlZmluZSBBTk9NQUxZXzA1MDAwMzQ5IChfX1NJTElDT05fUkVWSVNJT05fXyA8IDEpCiAvKiBQTEwgU3RhdHVzIFJlZ2lzdGVyIElzIEluYWNjdXJhdGUgKi8KICNkZWZpbmUgQU5PTUFMWV8wNTAwMDM1MSAoX19TSUxJQ09OX1JFVklTSU9OX18gPCAxKQorLyogYmZyb21fU3lzQ29udHJvbCgpIEZpcm13YXJlIEZ1bmN0aW9uIFBlcmZvcm1zIEltcHJvcGVyIFN5c3RlbSBSZXNldCAqLworI2RlZmluZSBBTk9NQUxZXzA1MDAwMzUzIChfX1NJTElDT05fUkVWSVNJT05fXyA8IDIpCisvKiBSZWd1bGF0b3IgUHJvZ3JhbW1pbmcgQmxvY2tlZCB3aGVuIEhpYmVybmF0ZSBXYWtldXAgU291cmNlIFJlbWFpbnMgQWN0aXZlICovCisjZGVmaW5lIEFOT01BTFlfMDUwMDAzNTUgKF9fU0lMSUNPTl9SRVZJU0lPTl9fIDwgMSkKKy8qIFN5c3RlbSBTdGFsbGVkIER1cmluZyBBIENvcmUgQWNjZXNzIFRvIEFNQyBXaGlsZSBBIENvcmUgQWNjZXNzIFRvIE5GQyBGSUZPIElzIFJlcXVpcmVkICovCisjZGVmaW5lIEFOT01BTFlfMDUwMDAzNTYgKF9fU0lMSUNPTl9SRVZJU0lPTl9fIDwgMSkKIC8qIFNlcmlhbCBQb3J0IChTUE9SVCkgTXVsdGljaGFubmVsIFRyYW5zbWl0IEZhaWx1cmUgd2hlbiBDaGFubmVsIDAgSXMgRGlzYWJsZWQgKi8KICNkZWZpbmUgQU5PTUFMWV8wNTAwMDM1NyAoMSkKIC8qIEV4dGVybmFsIE1lbW9yeSBSZWFkIEFjY2VzcyBIYW5ncyBDb3JlIFdpdGggUExMIEJ5cGFzcyAqLwogI2RlZmluZSBBTk9NQUxZXzA1MDAwMzYwICgxKQogLyogRE1BcyB0aGF0IEdvIFVyZ2VudCBkdXJpbmcgVGlnaHQgQ29yZSBXcml0ZXMgdG8gRXh0ZXJuYWwgTWVtb3J5IEFyZSBCbG9ja2VkICovCiAjZGVmaW5lIEFOT01BTFlfMDUwMDAzNjUgKDEpCisvKiBXVVJFU0VUIEJpdCBJbiBTWVNDUiBSZWdpc3RlciBEb2VzIE5vdCBQcm9wZXJseSBJbmRpY2F0ZSBIaWJlcm5hdGUgV2FrZS1VcCAqLworI2RlZmluZSBBTk9NQUxZXzA1MDAwMzY3IChfX1NJTElDT05fUkVWSVNJT05fXyA8IDEpCiAvKiBBZGRyZXNzaW5nIENvbmZsaWN0IGJldHdlZW4gQm9vdCBST00gYW5kIEFzeW5jaHJvbm91cyBNZW1vcnkgKi8KICNkZWZpbmUgQU5PTUFMWV8wNTAwMDM2OSAoMSkKKy8qIERlZmF1bHQgUExMIE1TRUwgYW5kIFNTRUwgU2V0dGluZ3MgQ2FuIENhdXNlIDQwME1IeiBQcm9kdWN0IFRvIFZpb2xhdGUgU3BlY2lmaWNhdGlvbnMgKi8KKyNkZWZpbmUgQU5PTUFMWV8wNTAwMDM3MCAoX19TSUxJQ09OX1JFVklTSU9OX18gPCAxKQogLyogUG9zc2libGUgUkVUUyBSZWdpc3RlciBDb3JydXB0aW9uIHdoZW4gU3Vicm91dGluZSBJcyB1bmRlciA1IEN5Y2xlcyBpbiBEdXJhdGlvbiAqLwotI2RlZmluZSBBTk9NQUxZXzA1MDAwMzcxICgxKQorI2RlZmluZSBBTk9NQUxZXzA1MDAwMzcxIChfX1NJTElDT05fUkVWSVNJT05fXyA8IDIpCisvKiBVU0IgRFAvRE0gRGF0YSBQaW5zIE1heSBMb3NlIFN0YXRlIFdoZW4gRW50ZXJpbmcgSGliZXJuYXRlICovCisjZGVmaW5lIEFOT01BTFlfMDUwMDAzNzIgKF9fU0lMSUNPTl9SRVZJU0lPTl9fIDwgMSkKIC8qIE1vYmlsZSBERFIgT3BlcmF0aW9uIE5vdCBGdW5jdGlvbmFsICovCiAjZGVmaW5lIEFOT01BTFlfMDUwMDAzNzcgKDEpCiAvKiBTZWN1cml0eS9BdXRoZW50aWNhdGlvbiBTcGVlZHBhdGggQ2F1c2VzIEF1dGhlbnRpY2F0aW9uIFRvIEZhaWwgVG8gSW5pdGlhdGUgKi8KLSNkZWZpbmUgQU5PTUFMWV8wNTAwMDM3OCAoMSkKKyNkZWZpbmUgQU5PTUFMWV8wNTAwMDM3OCAoX19TSUxJQ09OX1JFVklTSU9OX18gPCAyKQorLyogMTYtQml0IE5BTkQgRkxBU0ggQm9vdCBNb2RlIElzIE5vdCBGdW5jdGlvbmFsICovCisjZGVmaW5lIEFOT01BTFlfMDUwMDAzNzkgKDEpCisvKiA4LUJpdCBOQU5EIEZsYXNoIEJvb3QgTW9kZSBOb3QgRnVuY3Rpb25hbCAqLworI2RlZmluZSBBTk9NQUxZXzA1MDAwMzgyIChfX1NJTElDT05fUkVWSVNJT05fXyA8IDEpCisvKiBTb21lIEFUQVBJIE1vZGVzIEFyZSBOb3QgRnVuY3Rpb25hbCAqLworI2RlZmluZSBBTk9NQUxZXzA1MDAwMzgzICgxKQorLyogQm9vdCBmcm9tIE9UUCBNZW1vcnkgTm90IEZ1bmN0aW9uYWwgKi8KKyNkZWZpbmUgQU5PTUFMWV8wNTAwMDM4NSAoX19TSUxJQ09OX1JFVklTSU9OX18gPCAxKQorLyogYmZyb21fU3lzQ29udHJvbCgpIEZpcm13YXJlIFJvdXRpbmUgTm90IEZ1bmN0aW9uYWwgKi8KKyNkZWZpbmUgQU5PTUFMWV8wNTAwMDM4NiAoX19TSUxJQ09OX1JFVklTSU9OX18gPCAxKQorLyogUHJvZ3JhbW1hYmxlIFByZWJvb3QgU2V0dGluZ3MgTm90IEZ1bmN0aW9uYWwgKi8KKyNkZWZpbmUgQU5PTUFMWV8wNTAwMDM4NyAoX19TSUxJQ09OX1JFVklTSU9OX18gPCAxKQorLyogQ1JDMzIgQ2hlY2tzdW0gU3VwcG9ydCBOb3QgRnVuY3Rpb25hbCAqLworI2RlZmluZSBBTk9NQUxZXzA1MDAwMzg4IChfX1NJTElDT05fUkVWSVNJT05fXyA8IDEpCisvKiBSZXNldCBWZWN0b3IgTXVzdCBOb3QgQmUgaW4gU0RSQU0gTWVtb3J5IFNwYWNlICovCisjZGVmaW5lIEFOT01BTFlfMDUwMDAzODkgKF9fU0lMSUNPTl9SRVZJU0lPTl9fIDwgMSkKKy8qIENoYW5nZWQgTWVhbmluZyBvZiBCQ09ERSBGaWVsZCBpbiBTWVNDUiBSZWdpc3RlciAqLworI2RlZmluZSBBTk9NQUxZXzA1MDAwMzkwIChfX1NJTElDT05fUkVWSVNJT05fXyA8IDEpCisvKiBSZXBlYXRlZCBCb290IGZyb20gUGFnZS1Nb2RlIG9yIEJ1cnN0LU1vZGUgRmxhc2ggTWVtb3J5IE1heSBGYWlsICovCisjZGVmaW5lIEFOT01BTFlfMDUwMDAzOTEgKF9fU0lMSUNPTl9SRVZJU0lPTl9fIDwgMSkKKy8qIHBUZW1wQ3VycmVudCBOb3QgUHJlc2VudCBpbiBBRElfQk9PVF9EQVRBIFN0cnVjdHVyZSAqLworI2RlZmluZSBBTk9NQUxZXzA1MDAwMzkyIChfX1NJTElDT05fUkVWSVNJT05fXyA8IDEpCisvKiBEZXByZWNhdGVkIFZhbHVlIG9mIGRUZW1wQnl0ZUNvdW50IGluIEFESV9CT09UX0RBVEEgU3RydWN0dXJlICovCisjZGVmaW5lIEFOT01BTFlfMDUwMDAzOTMgKF9fU0lMSUNPTl9SRVZJU0lPTl9fIDwgMSkKKy8qIExvZyBCdWZmZXIgTm90IEZ1bmN0aW9uYWwgKi8KKyNkZWZpbmUgQU5PTUFMWV8wNTAwMDM5NCAoX19TSUxJQ09OX1JFVklTSU9OX18gPCAxKQorLyogSG9vayBSb3V0aW5lIE5vdCBGdW5jdGlvbmFsICovCisjZGVmaW5lIEFOT01BTFlfMDUwMDAzOTUgKF9fU0lMSUNPTl9SRVZJU0lPTl9fIDwgMSkKKy8qIEhlYWRlciBJbmRpcmVjdCBCaXQgTm90IEZ1bmN0aW9uYWwgKi8KKyNkZWZpbmUgQU5PTUFMWV8wNTAwMDM5NiAoX19TSUxJQ09OX1JFVklTSU9OX18gPCAxKQorLyogQktfT05FUywgQktfWkVST1MsIGFuZCBCS19EQVRFQ09ERSBDb25zdGFudHMgTm90IEZ1bmN0aW9uYWwgKi8KKyNkZWZpbmUgQU5PTUFMWV8wNTAwMDM5NyAoX19TSUxJQ09OX1JFVklTSU9OX18gPCAxKQorLyogTG9ja2JveCBTRVNSIERpc2FsbG93cyBDZXJ0YWluIFVzZXIgSW50ZXJydXB0cyAqLworI2RlZmluZSBBTk9NQUxZXzA1MDAwNDA0IChfX1NJTElDT05fUkVWSVNJT05fXyA8IDIpCisvKiBMb2NrYm94IFNFU1IgRmlybXdhcmUgRG9lcyBOb3QgU2F2ZS9SZXN0b3JlIEZ1bGwgQ29udGV4dCAqLworI2RlZmluZSBBTk9NQUxZXzA1MDAwNDA1ICgxKQorLyogTG9ja2JveCBTRVNSIEFyZ3VtZW50IENoZWNraW5nIERvZXMgTm90IENoZWNrIEwyIE1lbW9yeSBQcm90ZWN0aW9uIFJhbmdlICovCisjZGVmaW5lIEFOT01BTFlfMDUwMDA0MDYgKF9fU0lMSUNPTl9SRVZJU0lPTl9fIDwgMikKKy8qIExvY2tib3ggU0VTUiBGaXJtd2FyZSBBcmd1bWVudHMgQXJlIE5vdCBSZXRhaW5lZCBBZnRlciBGaXJzdCBJbml0aWFsaXphdGlvbiAqLworI2RlZmluZSBBTk9NQUxZXzA1MDAwNDA3IChfX1NJTElDT05fUkVWSVNJT05fXyA8IDIpCisvKiBMb2NrYm94IEZpcm13YXJlIE1lbW9yeSBDbGVhbnVwIFJvdXRpbmUgRG9lcyBub3QgQ2xlYXIgUmVnaXN0ZXJzICovCisjZGVmaW5lIEFOT01BTFlfMDUwMDA0MDggKDEpCisvKiBMb2NrYm94IGZpcm13YXJlIGxlYXZlcyBNRE1BMCBjaGFubmVsIGVuYWJsZWQgKi8KKyNkZWZpbmUgQU5PTUFMWV8wNTAwMDQwOSAoX19TSUxJQ09OX1JFVklTSU9OX18gPCAyKQorLyogYmZyb21fU3lzQ29udHJvbCgpIEZpcm13YXJlIEZ1bmN0aW9uIENhbm5vdCBiZSBVc2VkIHRvIEVudGVyIFBvd2VyIFNhdmluZyBNb2RlcyAqLworI2RlZmluZSBBTk9NQUxZXzA1MDAwNDExIChfX1NJTElDT05fUkVWSVNJT05fXyA8IDIpCisvKiBOQU5EIEJvb3QgTW9kZSBOb3QgQ29tcGF0aWJsZSBXaXRoIFNvbWUgTkFORCBGbGFzaCBEZXZpY2VzICovCisjZGVmaW5lIEFOT01BTFlfMDUwMDA0MTMgKF9fU0lMSUNPTl9SRVZJU0lPTl9fIDwgMikKKy8qIE9UUF9DSEVDS19GT1JfUFJFVl9XUklURSBCaXQgaXMgTm90IEZ1bmN0aW9uYWwgaW4gYmZyb21fT3RwV3JpdGUoKSBBUEkgKi8KKyNkZWZpbmUgQU5PTUFMWV8wNTAwMDQxNCAoX19TSUxJQ09OX1JFVklTSU9OX18gPCAyKQorLyogU3BlY3VsYXRpdmUgRmV0Y2hlcyBDYW4gQ2F1c2UgVW5kZXNpcmVkIEV4dGVybmFsIEZJRk8gT3BlcmF0aW9ucyAqLworI2RlZmluZSBBTk9NQUxZXzA1MDAwNDE2ICgxKQorLyogTXVsdGljaGFubmVsIFNQT1JUIENoYW5uZWwgTWlzYWxpZ25tZW50IFVuZGVyIFNwZWNpZmljIENvbmZpZ3VyYXRpb24gKi8KKyNkZWZpbmUgQU5PTUFMWV8wNTAwMDQyNSAoMSkKKy8qIFNwZWN1bGF0aXZlIEZldGNoZXMgb2YgSW5kaXJlY3QtUG9pbnRlciBJbnN0cnVjdGlvbnMgQ2FuIENhdXNlIFNwdXJpb3VzIEhhcmR3YXJlIEVycm9ycyAqLworI2RlZmluZSBBTk9NQUxZXzA1MDAwNDI2ICgxKQorLyogQ09SRV9FUFBJX1BSSU8gYml0IGFuZCBTWVNfRVBQSV9QUklPIGJpdCBpbiB0aGUgSE1ETUExX0NPTlRST0wgcmVnaXN0ZXIgYXJlIG5vdCBmdW5jdGlvbmFsICovCisjZGVmaW5lIEFOT01BTFlfMDUwMDA0MjcgKF9fU0lMSUNPTl9SRVZJU0lPTl9fIDwgMikKKy8qIFdCX0VER0UgQml0IGluIE5GQ19JUlFTVEFUIEluY29ycmVjdGx5IEJlaGF2ZXMgYXMgYSBCdWZmZXIgU3RhdHVzIEJpdCBJbnN0ZWFkIG9mIGFuIElSUSBTdGF0dXMgQml0ICovCisjZGVmaW5lIEFOT01BTFlfMDUwMDA0MjkgKF9fU0lMSUNPTl9SRVZJU0lPTl9fIDwgMikKKy8qIFNvZnR3YXJlIFN5c3RlbSBSZXNldCBDb3JydXB0cyBQTExfTE9DS0NOVCBSZWdpc3RlciAqLworI2RlZmluZSBBTk9NQUxZXzA1MDAwNDMwIChfX1NJTElDT05fUkVWSVNJT05fXyA+PSAyKQogCiAvKiBBbm9tYWxpZXMgdGhhdCBkb24ndCBleGlzdCBvbiB0aGlzIHByb2MgKi8KICNkZWZpbmUgQU5PTUFMWV8wNTAwMDEyNSAoMCkKQEAgLTkzLDYgKzE2OSw3IEBACiAjZGVmaW5lIEFOT01BTFlfMDUwMDAyNjMgKDApCiAjZGVmaW5lIEFOT01BTFlfMDUwMDAyNjYgKDApCiAjZGVmaW5lIEFOT01BTFlfMDUwMDAyNzMgKDApCisjZGVmaW5lIEFOT01BTFlfMDUwMDAzMDcgKDApCiAjZGVmaW5lIEFOT01BTFlfMDUwMDAzMTEgKDApCiAjZGVmaW5lIEFOT01BTFlfMDUwMDAzMjMgKDApCiAjZGVmaW5lIEFOT01BTFlfMDUwMDAzNjMgKDApCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvaW5jbHVkZS9tYWNoL2JmNTQ4LmggYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvaW5jbHVkZS9tYWNoL2JmNTQ4LmgKaW5kZXggZTc0ODU4OC4uNDlmOWI0MCAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2luY2x1ZGUvbWFjaC9iZjU0OC5oCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9pbmNsdWRlL21hY2gvYmY1NDguaApAQCAtMzAsOCArMzAsNiBAQAogI2lmbmRlZiBfX01BQ0hfQkY1NDhfSF9fCiAjZGVmaW5lIF9fTUFDSF9CRjU0OF9IX18KIAotI2RlZmluZSBTVVBQT1JURURfUkVWSUQgMAotCiAjZGVmaW5lIE9GRlNFVF8oeCkgKCh4KSAmIDB4MDAwMEZGRkYpCiAKIC8qc29tZSBtaXNjIGRlZmluZXMqLwpAQCAtMTA4LDIwICsxMDYsMjMgQEAKIAogI2lmIGRlZmluZWQoQ09ORklHX0JGNTQyKQogIyBkZWZpbmUgQ1BVICAgIkJGNTQyIgotIyBkZWZpbmUgQ1BVSUQgMHgwMjdjODAwMAorIyBkZWZpbmUgQ1BVSUQgMHgyN2RlCiAjZWxpZiBkZWZpbmVkKENPTkZJR19CRjU0NCkKLSMgZGVmaW5lIENQVSAiQkY1NDQiCi0jIGRlZmluZSBDUFVJRCAweDAyN2M4MDAwCisjIGRlZmluZSBDUFUgICAiQkY1NDQiCisjIGRlZmluZSBDUFVJRCAweDI3ZGUKICNlbGlmIGRlZmluZWQoQ09ORklHX0JGNTQ3KQotIyBkZWZpbmUgQ1BVICJCRjU0NyIKKyMgZGVmaW5lIENQVSAgICJCRjU0NyIKKyMgZGVmaW5lIENQVUlEIDB4MjdkZQogI2VsaWYgZGVmaW5lZChDT05GSUdfQkY1NDgpCi0jIGRlZmluZSBDUFUgIkJGNTQ4IgotIyBkZWZpbmUgQ1BVSUQgMHgwMjdjNjAwMAorIyBkZWZpbmUgQ1BVICAgIkJGNTQ4IgorIyBkZWZpbmUgQ1BVSUQgMHgyN2RlCiAjZWxpZiBkZWZpbmVkKENPTkZJR19CRjU0OSkKLSMgZGVmaW5lIENQVSAiQkY1NDkiCi0jZWxzZQotIyBkZWZpbmUgQ1BVICJVTktOT1dOIgotIyBkZWZpbmUgQ1BVSUQgMHgwCisjIGRlZmluZSBDUFUgICAiQkY1NDkiCisjIGRlZmluZSBDUFVJRCAweDI3ZGUKKyNlbmRpZgorCisjaWZuZGVmIENQVQorI2Vycm9yIFVua25vd24gQ1BVIHR5cGUgLSBUaGlzIGtlcm5lbCBkb2Vzbid0IHNlZW0gdG8gYmUgY29uZmlndXJlZCBwcm9wZXJseQogI2VuZGlmCiAKICNlbmRpZgkvKiBfX01BQ0hfQkY0OF9IX18gICovCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvaW5jbHVkZS9tYWNoL2JmaW5fc2VyaWFsXzV4eC5oIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2luY2x1ZGUvbWFjaC9iZmluX3NlcmlhbF81eHguaAppbmRleCA1ZTI5NDQ2Li5lNGNmMzVlIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvaW5jbHVkZS9tYWNoL2JmaW5fc2VyaWFsXzV4eC5oCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9pbmNsdWRlL21hY2gvYmZpbl9zZXJpYWxfNXh4LmgKQEAgLTgyLDYgKzgyLDkgQEAKICMgIGRlZmluZSBDT05GSUdfVUFSVDFfUlRTX1BJTiAtMQogIyBlbmRpZgogI2VuZGlmCisKKyNkZWZpbmUgQkZJTl9VQVJUX1RYX0ZJRk9fU0laRQkyCisKIC8qCiAgKiBUaGUgcGluIGNvbmZpZ3VyYXRpb24gaXMgZGlmZmVyZW50IGZyb20gc2NoZW1hdGljCiAgKi8KQEAgLTEwNSw3ICsxMDgsNiBAQAogI2VuZGlmCiB9OwogCi1zdHJ1Y3QgYmZpbl9zZXJpYWxfcG9ydCBiZmluX3NlcmlhbF9wb3J0c1tCRklOX1VBUlRfTlJfUE9SVFNdOwogc3RydWN0IGJmaW5fc2VyaWFsX3JlcyB7CiAJdW5zaWduZWQgbG9uZwl1YXJ0X2Jhc2VfYWRkcjsKIAlpbnQJCXVhcnRfaXJxOwpAQCAtMTcwLDggKzE3Miw2IEBACiAjZW5kaWYKIH07CiAKLWludCBucl9wb3J0cyA9IEFSUkFZX1NJWkUoYmZpbl9zZXJpYWxfcmVzb3VyY2UpOwotCiAjZGVmaW5lIERSSVZFUl9OQU1FICJiZmluLXVhcnQiCiAKIHN0YXRpYyB2b2lkIGJmaW5fc2VyaWFsX2h3X2luaXQoc3RydWN0IGJmaW5fc2VyaWFsX3BvcnQgKnVhcnQpCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvaW5jbHVkZS9tYWNoL21lbV9tYXAuaCBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9pbmNsdWRlL21hY2gvbWVtX21hcC5oCmluZGV4IGY5OWY0N2IuLmEyMjI4NDIgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9pbmNsdWRlL21hY2gvbWVtX21hcC5oCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9pbmNsdWRlL21hY2gvbWVtX21hcC5oCkBAIC05NCwxMyArOTQsMTMgQEAKICNlbmRpZiAvKkNPTkZJR19CRklOX0RDQUNIRSovCiAKIC8qIExldmVsIDIgTWVtb3J5ICovCi0jaWYgIWRlZmluZWQoQ09ORklHX0JGNTQyKQotIyBkZWZpbmUgTDJfU1RBUlQgICAgICAgICAgMHhGRUIwMDAwMAotIyBpZiBkZWZpbmVkKENPTkZJR19CRjU0NCkKLSMgIGRlZmluZSBMMl9MRU5HVEggICAgICAgIDB4MTAwMDAKLSMgZWxzZQotIyAgZGVmaW5lIEwyX0xFTkdUSCAgICAgICAgMHgyMDAwMAotIyBlbmRpZgorI2RlZmluZSBMMl9TVEFSVCAgICAgICAgICAgIDB4RkVCMDAwMDAKKyNpZiBkZWZpbmVkKENPTkZJR19CRjU0MikKKyMgZGVmaW5lIEwyX0xFTkdUSCAgICAgICAgICAwCisjZWxpZiBkZWZpbmVkKENPTkZJR19CRjU0NCkKKyMgZGVmaW5lIEwyX0xFTkdUSCAgICAgICAgICAweDEwMDAwCisjZWxzZQorIyBkZWZpbmUgTDJfTEVOR1RIICAgICAgICAgIDB4MjAwMDAKICNlbmRpZgogCiAvKiBTY3JhdGNoIFBhZCBNZW1vcnkgKi8KZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU2MS9oZWFkLlMgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1NjEvaGVhZC5TCmluZGV4IDc1ZWE2YTkuLjMxYTc3N2EgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU2MS9oZWFkLlMKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTYxL2hlYWQuUwpAQCAtNzcsNiArNzcsOSBAQAogCXIxID0gUExMX0JZUEFTUzsgICAgICAgICAgICAgICAgIC8qIEJ5cGFzcyB0aGUgUExMPyAgICAgICAgICAgICAgICAgKi8KIAlyMSA9IHIxIDw8IDg7ICAgICAgICAgICAgICAgICAgICAvKiBTaGlmdCBpdCBvdmVyICAgICAgICAgICAgICAgICAgICovCiAJcjAgPSByMSB8IHIwOyAgICAgICAgICAgICAgICAgICAgLyogYWRkIHRoZW0gYWxsIHRvZ2V0aGVyICAgICAgICAgICAqLworI2lmZGVmIEFOT01BTFlfMDUwMDAyNjUKKwlCSVRTRVQocjAsIDE1KTsgICAgICAgICAgICAgICAgICAvKiBBZGQgMjUwIG1WIG9mIGh5c3RlcmVzaXMgdG8gU1BPUlQgaW5wdXQgcGlucyAqLworI2VuZGlmCiAKIAlwMC5oID0gaGkoUExMX0NUTCk7CiAJcDAubCA9IGxvKFBMTF9DVEwpOyAgICAgICAgICAgICAgLyogTG9hZCB0aGUgYWRkcmVzcyAgICAgICAgICAgICAgICAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTYxL2luY2x1ZGUvbWFjaC9hbm9tYWx5LmggYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1NjEvaW5jbHVkZS9tYWNoL2Fub21hbHkuaAppbmRleCA1YzVkN2Q3Li4yMjk5MGRmIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1NjEvaW5jbHVkZS9tYWNoL2Fub21hbHkuaAorKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1NjEvaW5jbHVkZS9tYWNoL2Fub21hbHkuaApAQCAtMjcwLDUgKzI3MCw3IEBACiAjZGVmaW5lIEFOT01BTFlfMDUwMDAxODMgKDApCiAjZGVmaW5lIEFOT01BTFlfMDUwMDAyNzMgKDApCiAjZGVmaW5lIEFOT01BTFlfMDUwMDAzMTEgKDApCisjZGVmaW5lIEFOT01BTFlfMDUwMDAzNTMgKDEpCisjZGVmaW5lIEFOT01BTFlfMDUwMDAzODYgKDEpCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTYxL2luY2x1ZGUvbWFjaC9iZjU2MS5oIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTYxL2luY2x1ZGUvbWFjaC9iZjU2MS5oCmluZGV4IDNlZjllNWYuLjE4YjFiM2EgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU2MS9pbmNsdWRlL21hY2gvYmY1NjEuaAorKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1NjEvaW5jbHVkZS9tYWNoL2JmNTYxLmgKQEAgLTMwLDggKzMwLDYgQEAKICNpZm5kZWYgX19NQUNIX0JGNTYxX0hfXwogI2RlZmluZSBfX01BQ0hfQkY1NjFfSF9fCiAKLSNkZWZpbmUgU1VQUE9SVEVEX1JFVklECQkweDMKLQogI2RlZmluZSBPRkZTRVRfKHgpICgoeCkgJiAweDAwMDBGRkZGKQogCiAvKnNvbWUgbWlzYyBkZWZpbmVzKi8KQEAgLTIxMywxMSArMjExLDExIEBACiAKICNpZmRlZiBDT05GSUdfQkY1NjEKICNkZWZpbmUgQ1BVICJCRjU2MSIKLSNkZWZpbmUgQ1BVSUQgMHgwMjdiYjAwMAorI2RlZmluZSBDUFVJRCAweDI3YmIKICNlbmRpZgorCiAjaWZuZGVmIENQVQotI2RlZmluZSBDUFUgIlVOS05PV04iCi0jZGVmaW5lIENQVUlEIDB4MAorI2Vycm9yIFVua25vd24gQ1BVIHR5cGUgLSBUaGlzIGtlcm5lbCBkb2Vzbid0IHNlZW0gdG8gYmUgY29uZmlndXJlZCBwcm9wZXJseQogI2VuZGlmCiAKICNlbmRpZgkJCQkvKiBfX01BQ0hfQkY1NjFfSF9fICAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTYxL2luY2x1ZGUvbWFjaC9iZmluX3NlcmlhbF81eHguaCBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU2MS9pbmNsdWRlL21hY2gvYmZpbl9zZXJpYWxfNXh4LmgKaW5kZXggOGFhMDI3OC4uMDQzYmZjZiAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTYxL2luY2x1ZGUvbWFjaC9iZmluX3NlcmlhbF81eHguaAorKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1NjEvaW5jbHVkZS9tYWNoL2JmaW5fc2VyaWFsXzV4eC5oCkBAIC02OSw2ICs2OSw4IEBACiAjIGVuZGlmCiAjZW5kaWYKIAorI2RlZmluZSBCRklOX1VBUlRfVFhfRklGT19TSVpFCTIKKwogc3RydWN0IGJmaW5fc2VyaWFsX3BvcnQgewogICAgICAgICBzdHJ1Y3QgdWFydF9wb3J0ICAgICAgICBwb3J0OwogICAgICAgICB1bnNpZ25lZCBpbnQgICAgICAgICAgICBvbGRfc3RhdHVzOwpAQCAtODMsNyArODUsNyBAQAogCXVuc2lnbmVkIGludAkJcnhfZG1hX2NoYW5uZWw7CiAJc3RydWN0IHdvcmtfc3RydWN0CXR4X2RtYV93b3JrcXVldWU7CiAjZWxzZQotIyBpZiBBTk9NQUxZXzA1MDAwMjMwCisjIGlmIEFOT01BTFlfMDUwMDAzNjMKIAl1bnNpZ25lZCBpbnQgYW5vbWFseV90aHJlc2hvbGQ7CiAjIGVuZGlmCiAjZW5kaWYKQEAgLTExMSw3ICsxMTMsNiBAQAogCWJmaW5fd3JpdGUxNih1YXJ0LT5wb3J0Lm1lbWJhc2UgKyBPRkZTRVRfTFNSLCAtMSk7CiB9CiAKLXN0cnVjdCBiZmluX3NlcmlhbF9wb3J0IGJmaW5fc2VyaWFsX3BvcnRzW0JGSU5fVUFSVF9OUl9QT1JUU107CiBzdHJ1Y3QgYmZpbl9zZXJpYWxfcmVzIHsKIAl1bnNpZ25lZCBsb25nCXVhcnRfYmFzZV9hZGRyOwogCWludAkJdWFydF9pcnE7CkBAIC0xNDIsNyArMTQzLDYgQEAKIAogI2RlZmluZSBEUklWRVJfTkFNRSAiYmZpbi11YXJ0IgogCi1pbnQgbnJfcG9ydHMgPSBCRklOX1VBUlRfTlJfUE9SVFM7CiBzdGF0aWMgdm9pZCBiZmluX3NlcmlhbF9od19pbml0KHN0cnVjdCBiZmluX3NlcmlhbF9wb3J0ICp1YXJ0KQogewogCkBAIC0xNTgsNyArMTU4LDcgQEAKIAl9CiAJaWYgKHVhcnQtPnJ0c19waW4gPj0gMCkgewogCQlncGlvX3JlcXVlc3QodWFydC0+cnRzX3BpbiwgRFJJVkVSX05BTUUpOwotCQlncGlvX2RpcmVjdGlvbl9pbnB1dCh1YXJ0LT5ydHNfcGluLCAwKTsKKwkJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KHVhcnQtPnJ0c19waW4sIDApOwogCX0KICNlbmRpZgogfQpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTYxL2luY2x1ZGUvbWFjaC9tZW1fbWFwLmggYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1NjEvaW5jbHVkZS9tYWNoL21lbV9tYXAuaAppbmRleCBjMjZkODQ4Li5mMWQ0YzA2IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1NjEvaW5jbHVkZS9tYWNoL21lbV9tYXAuaAorKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1NjEvaW5jbHVkZS9tYWNoL21lbV9tYXAuaApAQCAtMzUsOSArMzUsMTYgQEAKIC8qIE1lbW9yeSBNYXAgZm9yIEFEU1AtQkY1NjEgcHJvY2Vzc29ycyAqLwogCiAjaWZkZWYgQ09ORklHX0JGNTYxCi0jZGVmaW5lIEwxX0NPREVfU1RBUlQgICAgIDB4RkZBMDAwMDAKLSNkZWZpbmUgTDFfREFUQV9BX1NUQVJUICAgICAweEZGODAwMDAwCi0jZGVmaW5lIEwxX0RBVEFfQl9TVEFSVCAgICAgMHhGRjkwMDAwMAorI2RlZmluZSBDT1JFQV9MMV9DT0RFX1NUQVJUICAgICAgIDB4RkZBMDAwMDAKKyNkZWZpbmUgQ09SRUFfTDFfREFUQV9BX1NUQVJUICAgICAweEZGODAwMDAwCisjZGVmaW5lIENPUkVBX0wxX0RBVEFfQl9TVEFSVCAgICAgMHhGRjkwMDAwMAorI2RlZmluZSBDT1JFQl9MMV9DT0RFX1NUQVJUICAgICAgIDB4RkY2MDAwMDAKKyNkZWZpbmUgQ09SRUJfTDFfREFUQV9BX1NUQVJUICAgICAweEZGNDAwMDAwCisjZGVmaW5lIENPUkVCX0wxX0RBVEFfQl9TVEFSVCAgICAgMHhGRjUwMDAwMAorCisjZGVmaW5lIEwxX0NPREVfU1RBUlQgICAgICAgQ09SRUFfTDFfQ09ERV9TVEFSVAorI2RlZmluZSBMMV9EQVRBX0FfU1RBUlQgICAgIENPUkVBX0wxX0RBVEFfQV9TVEFSVAorI2RlZmluZSBMMV9EQVRBX0JfU1RBUlQgICAgIENPUkVBX0wxX0RBVEFfQl9TVEFSVAogCiAjZGVmaW5lIEwxX0NPREVfTEVOR1RIICAgICAgMHg0MDAwCiAKQEAgLTcyLDcgKzc5LDEwIEBACiAKIC8qIFNjcmF0Y2ggUGFkIE1lbW9yeSAqLwogCi0jZGVmaW5lIEwxX1NDUkFUQ0hfU1RBUlQJMHhGRkIwMDAwMAorI2RlZmluZSBDT1JFQV9MMV9TQ1JBVENIX1NUQVJUCTB4RkZCMDAwMDAKKyNkZWZpbmUgQ09SRUJfTDFfU0NSQVRDSF9TVEFSVAkweEZGNzAwMDAwCisKKyNkZWZpbmUgTDFfU0NSQVRDSF9TVEFSVAlDT1JFQV9MMV9TQ1JBVENIX1NUQVJUCiAjZGVmaW5lIEwxX1NDUkFUQ0hfTEVOR1RICTB4MTAwMAogCiAjZW5kaWYJCQkJLyogX01FTV9NQVBfNTMzX0hfICovCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtY29tbW9uL2NhY2hlLlMgYi9hcmNoL2JsYWNrZmluL21hY2gtY29tbW9uL2NhY2hlLlMKaW5kZXggODVmOGM3OS4uZGI1MzIxOCAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWNvbW1vbi9jYWNoZS5TCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1jb21tb24vY2FjaGUuUwpAQCAtMSwxNDggKzEsOTEgQEAKIC8qCi0gKiBGaWxlOiAgICAgICAgIGFyY2gvYmxhY2tmaW4vbWFjaC1jb21tb24vY2FjaGUuUwotICogQmFzZWQgb246Ci0gKiBBdXRob3I6ICAgICAgIExHIFNvZnQgSW5kaWEKKyAqIEJsYWNrZmluIGNhY2hlIGNvbnRyb2wgY29kZQogICoKLSAqIENyZWF0ZWQ6Ci0gKiBEZXNjcmlwdGlvbjogIGNhY2hlIGNvbnRyb2wgc3VwcG9ydAorICogQ29weXJpZ2h0IDIwMDQtMjAwOCBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogTW9kaWZpZWQ6Ci0gKiAgICAgICAgICAgICAgIENvcHlyaWdodCAyMDA0LTIwMDYgQW5hbG9nIERldmljZXMgSW5jLgorICogRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCiAgKgotICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSB0aGUgZmlsZSBDT1BZSU5HLCBvciB3cml0ZQotICogdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KLSNpbmNsdWRlIDxhc20vY3BsYi5oPgotI2luY2x1ZGUgPGFzbS9lbnRyeS5oPgogI2luY2x1ZGUgPGFzbS9ibGFja2Zpbi5oPgogI2luY2x1ZGUgPGFzbS9jYWNoZS5oPgorI2luY2x1ZGUgPGFzbS9wYWdlLmg+CiAKIC50ZXh0CiAKLS8qCi0gKiBibGFja2Zpbl9jYWNoZV9mbHVzaF9yYW5nZShzdGFydCwgZW5kKQotICogSW52YWxpZGF0ZSBhbGwgY2FjaGUgbGluZXMgYXNzb2NvaWF0ZWQgd2l0aCB0aGlzCi0gKiBhcmVhIG9mIG1lbW9yeS4KKy8qIFNpbmNlIGFsbCBMMSBjYWNoZXMgd29yayB0aGUgc2FtZSB3YXksIHdlIHVzZSB0aGUgc2FtZSBtZXRob2QgZm9yIGZsdXNoaW5nCisgKiB0aGVtLiAgT25seSB0aGUgYWN0dWFsIGZsdXNoIGluc3RydWN0aW9uIGRpZmZlcnMuICBXZSB3cml0ZSB0aGlzIGluIGFzbSBhcworICogR0NDIGNhbiBiZSBoYXJkIHRvIGNvYXggaW50byB3cml0aW5nIG5pY2UgaGFyZHdhcmUgbG9vcHMuCiAgKgotICogc3RhcnQ6CVN0YXJ0IGFkZHJlc3MKLSAqIGVuZDoJCUVuZCBhZGRyZXNzCisgKiBBbHNvLCB3ZSBhc3N1bWUgdGhlIGZvbGxvd2luZyByZWdpc3RlciBzZXR1cDoKKyAqIFIwID0gc3RhcnQgYWRkcmVzcworICogUjEgPSBlbmQgYWRkcmVzcwogICovCi1FTlRSWShfYmxhY2tmaW5faWNhY2hlX2ZsdXNoX3JhbmdlKQorLm1hY3JvIGRvX2ZsdXNoIGZsdXNoaW5zOnJlcSBvcHRmbHVzaGlucyBvcHRub3BpbnMgbGFiZWwKKworCS8qIGVuZCA9ICgoZW5kIC0gMSkgJiAtTDFfQ0FDSEVfQllURVMpICsgTDFfQ0FDSEVfQllURVM7ICovCisJUjEgKz0gLTE7CiAJUjIgPSAtTDFfQ0FDSEVfQllURVM7Ci0JUjIgPSBSMCAmIFIyOwotCVAwID0gUjI7Ci0JUDEgPSBSMTsKLQlDU1lOQyhSMyk7Ci0JSUZMVVNIIFtQMF07CisJUjEgPSBSMSAmIFIyOworCVIxICs9IEwxX0NBQ0hFX0JZVEVTOworCisJLyogY291bnQgPSAoZW5kIC0gc3RhcnQpID4+IEwxX0NBQ0hFX1NISUZUICovCisJUjIgPSBSMSAtIFIwOworCVIyID4+PSBMMV9DQUNIRV9TSElGVDsKKwlQMSA9IFIyOworCisuaWZuYiBcbGFiZWwKK1xsYWJlbCA6CisuZW5kaWYKKwlQMCA9IFIwOworCUxTRVRVUCAoMWYsIDJmKSBMQzEgPSBQMTsKIDE6Ci0JSUZMVVNIIFtQMCsrXTsKLQlDQyA9IFAwIDwgUDEgKGl1KTsKLQlJRiBDQyBKVU1QIDFiIChicCk7Ci0JSUZMVVNIIFtQMF07Ci0JU1NZTkMoUjMpOworLmlmbmIgXG9wdGZsdXNoaW5zCisJXG9wdGZsdXNoaW5zIFtQMF07CisuZW5kaWYKKy5pZmIgXG9wdG5vcGlucworMjoKKy5lbmRpZgorCVxmbHVzaGlucyBbUDArK107CisuaWZuYiBcb3B0bm9waW5zCisyOiBcb3B0bm9waW5zOworLmVuZGlmCisKIAlSVFM7CisuZW5kbQorCisvKiBJbnZhbGlkYXRlIGFsbCBpbnN0cnVjdGlvbiBjYWNoZSBsaW5lcyBhc3NvY29pYXRlZCB3aXRoIHRoaXMgbWVtb3J5IGFyZWEgKi8KK0VOVFJZKF9ibGFja2Zpbl9pY2FjaGVfZmx1c2hfcmFuZ2UpCisJZG9fZmx1c2ggSUZMVVNILCAsIG5vcAogRU5EUFJPQyhfYmxhY2tmaW5faWNhY2hlX2ZsdXNoX3JhbmdlKQogCi0vKgotICogYmxhY2tmaW5faWNhY2hlX2RjYWNoZV9mbHVzaF9yYW5nZShzdGFydCwgZW5kKQotICogRkxVU0ggYWxsIGNhY2hlIGxpbmVzIGFzc29jb2lhdGVkIHdpdGggdGhpcwotICogYXJlYSBvZiBtZW1vcnkuCi0gKgotICogc3RhcnQ6CVN0YXJ0IGFkZHJlc3MKLSAqIGVuZDoJCUVuZCBhZGRyZXNzCi0gKi8KLQorLyogRmx1c2ggYWxsIGNhY2hlIGxpbmVzIGFzc29jb2lhdGVkIHdpdGggdGhpcyBhcmVhIG9mIG1lbW9yeS4gKi8KIEVOVFJZKF9ibGFja2Zpbl9pY2FjaGVfZGNhY2hlX2ZsdXNoX3JhbmdlKQotCVIyID0gLUwxX0NBQ0hFX0JZVEVTOwotCVIyID0gUjAgJiBSMjsKLQlQMCA9IFIyOwotCVAxID0gUjE7Ci0JQ1NZTkMoUjMpOwotCUlGTFVTSCBbUDBdOwotMToKLQlGTFVTSCBbUDBdOwotCUlGTFVTSCBbUDArK107Ci0JQ0MgPSBQMCA8IFAxIChpdSk7Ci0JSUYgQ0MgSlVNUCAxYiAoYnApOwotCUlGTFVTSCBbUDBdOwotCUZMVVNIIFtQMF07Ci0JU1NZTkMoUjMpOwotCVJUUzsKKwlkb19mbHVzaCBJRkxVU0gsIEZMVVNICiBFTkRQUk9DKF9ibGFja2Zpbl9pY2FjaGVfZGNhY2hlX2ZsdXNoX3JhbmdlKQogCiAvKiBUaHJvdyBhd2F5IGFsbCBELWNhY2hlZCBkYXRhIGluIHNwZWNpZmllZCByZWdpb24gd2l0aG91dCBhbnkgb2JsaWdhdGlvbiB0bwotICogd3JpdGUgdGhlbSBiYWNrLiBIb3dldmVyLCB3ZSBtdXN0IGNsZWFuIHRoZSBELWNhY2hlZCBlbnRyaWVzIGFyb3VuZCB0aGUKLSAqIGJvdW5kYXJpZXMgb2YgdGhlIHN0YXJ0IGFuZC9vciBlbmQgYWRkcmVzcyBpcyBub3QgY2FjaGUgYWxpZ25lZC4KLSAqCi0gKiBTdGFydDogc3RhcnQgYWRkcmVzcywKLSAqIGVuZCAgOiBlbmQgYWRkcmVzcy4KKyAqIHdyaXRlIHRoZW0gYmFjay4gIFNpbmNlIHRoZSBCbGFja2ZpbiBJU0EgZG9lcyBub3QgaGF2ZSBhbiAiaW52YWxpZGF0ZSIKKyAqIGluc3RydWN0aW9uLCB3ZSB1c2UgZmx1c2gvaW52YWxpZGF0ZS4gIFBlcmhhcHMgYXMgYSBzcGVlZCBvcHRpbWl6YXRpb24gd2UKKyAqIGNvdWxkIGJhbmcgb24gdGhlIERURVNUIE1NUnMgLi4uCiAgKi8KLQogRU5UUlkoX2JsYWNrZmluX2RjYWNoZV9pbnZhbGlkYXRlX3JhbmdlKQotCVIyID0gLUwxX0NBQ0hFX0JZVEVTOwotCVIyID0gUjAgJiBSMjsKLQlQMCA9IFIyOwotCVAxID0gUjE7Ci0JQ1NZTkMoUjMpOwotCUZMVVNISU5WW1AwXTsKLTE6Ci0JRkxVU0hJTlZbUDArK107Ci0JQ0MgPSBQMCA8IFAxIChpdSk7Ci0JSUYgQ0MgSlVNUCAxYiAoYnApOwotCi0JLyogSWYgdGhlIGRhdGEgY3Jvc3NlcyBhIGNhY2hlIGxpbmUsIHRoZW4gd2UnbGwgYmUgcG9pbnRpbmcgdG8KLQkgKiB0aGUgbGFzdCBjYWNoZSBsaW5lLCBidXQgd29uJ3QgaGF2ZSBmbHVzaGVkL2ludmFsaWRhdGVkIGl0IHlldCwKLQkgKiBzbyBkbyBvbmUgbW9yZS4KLQkgKi8KLQlGTFVTSElOVltQMF07Ci0JU1NZTkMoUjMpOwotCVJUUzsKKwlkb19mbHVzaCBGTFVTSElOVgogRU5EUFJPQyhfYmxhY2tmaW5fZGNhY2hlX2ludmFsaWRhdGVfcmFuZ2UpCiAKKy8qIEZsdXNoIGFsbCBkYXRhIGNhY2hlIGxpbmVzIGFzc29jb2lhdGVkIHdpdGggdGhpcyBtZW1vcnkgYXJlYSAqLwogRU5UUlkoX2JsYWNrZmluX2RjYWNoZV9mbHVzaF9yYW5nZSkKLQlSMiA9IC1MMV9DQUNIRV9CWVRFUzsKLQlSMiA9IFIwICYgUjI7Ci0JUDAgPSBSMjsKLQlQMSA9IFIxOwotCUNTWU5DKFIzKTsKLQlGTFVTSFtQMF07Ci0xOgotCUZMVVNIW1AwKytdOwotCUNDID0gUDAgPCBQMSAoaXUpOwotCUlGIENDIEpVTVAgMWIgKGJwKTsKLQotCS8qIElmIHRoZSBkYXRhIGNyb3NzZXMgYSBjYWNoZSBsaW5lLCB0aGVuIHdlJ2xsIGJlIHBvaW50aW5nIHRvCi0JICogdGhlIGxhc3QgY2FjaGUgbGluZSwgYnV0IHdvbid0IGhhdmUgZmx1c2hlZCBpdCB5ZXQsIHNvIGRvCi0JICogb25lIG1vcmUuCi0JICovCi0JRkxVU0hbUDBdOwotCVNTWU5DKFIzKTsKLQlSVFM7CisJZG9fZmx1c2ggRkxVU0gsICwgLCAuTGRmcgogRU5EUFJPQyhfYmxhY2tmaW5fZGNhY2hlX2ZsdXNoX3JhbmdlKQogCisvKiBPdXIgaGVhZGVycyBjb252ZXJ0IHRoZSBwYWdlIHN0cnVjdHVyZSB0byBhbiBhZGRyZXNzLCBzbyBqdXN0IG5lZWQgdG8gZmx1c2gKKyAqIGl0cyBjb250ZW50cyBsaWtlIG5vcm1hbC4gIFdlIGtub3cgdGhlIHN0YXJ0IGFkZHJlc3MgaXMgcGFnZSBhbGlnbmVkICh3aGljaAorICogZ3JlYXRlciB0aGFuIG91ciBjYWNoZSBhbGlnbm1lbnQpLCBhcyBpcyB0aGUgZW5kIGFkZHJlc3MuICBTbyBqdXN0IGp1bXAgaW50bworICogdGhlIG1pZGRsZSBvZiB0aGUgZGNhY2hlIGZsdXNoIGZ1bmN0aW9uLgorICovCiBFTlRSWShfYmxhY2tmaW5fZGZsdXNoX3BhZ2UpCiAJUDEgPSAxIDw8IChQQUdFX1NISUZUIC0gTDFfQ0FDSEVfU0hJRlQpOwotCVAwID0gUjA7Ci0JQ1NZTkMoUjMpOwotCUZMVVNIW1AwXTsKLQlMU0VUVVAgKC5MZmwxLCAuTGZsMSkgTEMwID0gUDE7Ci0uTGZsMToJRkxVU0ggW1AwKytdOwotCVNTWU5DKFIzKTsKLQlSVFM7CisJanVtcCAuTGRmcjsKIEVORFBST0MoX2JsYWNrZmluX2RmbHVzaF9wYWdlKQpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWNvbW1vbi9jcHVmcmVxLmMgYi9hcmNoL2JsYWNrZmluL21hY2gtY29tbW9uL2NwdWZyZXEuYwppbmRleCA3NWNkYWQyLi5jMjJjNDdiIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtY29tbW9uL2NwdWZyZXEuYworKysgYi9hcmNoL2JsYWNrZmluL21hY2gtY29tbW9uL2NwdWZyZXEuYwpAQCAtMTU4LDggKzE1OCw2IEBACiAJCQkJCQkgZHBtX3N0YXRlX3RhYmxlW2luZGV4XS50c2NhbGUpOwogCX0KIAotCXBvbGljeS0+Z292ZXJub3IgPSBDUFVGUkVRX0RFRkFVTFRfR09WRVJOT1I7Ci0KIAlwb2xpY3ktPmNwdWluZm8udHJhbnNpdGlvbl9sYXRlbmN5ID0gKGJmaW5fcmVhZF9QTExfTE9DS0NOVCgpIC8gKHNjbGsgLyAxMDAwMDAwKSkgKiAxMDAwOwogCS8qTm93ICxvbmx5IHN1cHBvcnQgb25lIGNwdSAqLwogCXBvbGljeS0+Y3VyID0gY2NsazsKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1jb21tb24vZW50cnkuUyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1jb21tb24vZW50cnkuUwppbmRleCA4NDdjMTcyLi5jMTNmYThkIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtY29tbW9uL2VudHJ5LlMKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWNvbW1vbi9lbnRyeS5TCkBAIC0xMjksNiArMTI5LDE4IEBACiAjZWxzZQogCWNhbGwgX19jcGxiX2hkcjsKICNlbmRpZgorCisjaWZkZWYgQ09ORklHX0RFQlVHX0RPVUJMRUZBVUxUCisJLyogV2hpbGUgd2Ugd2VyZSBwcm9jZXNzaW5nIHRoaXMsIGRpZCB3ZSBkb3VibGUgZmF1bHQ/ICovCisJcjcgPSBTRVFTVEFUOyAgICAgICAgICAgLyogcmVhc29uIGNvZGUgaXMgaW4gYml0IDU6MCAqLworCXI2LmwgPSBsbyhTRVFTVEFUX0VYQ0FVU0UpOworCXI2LmggPSBoaShTRVFTVEFUX0VYQ0FVU0UpOworCXI3ID0gcjcgJiByNjsKKwlyNiA9IDB4MjU7CisJQ0MgPSBSNyA9PSBSNjsKKwlpZiBDQyBKVU1QIF9kb3VibGVfZmF1bHQ7CisjZW5kaWYKKwogCURFQlVHX0hXVFJBQ0VfUkVTVE9SRShwNSwgcjcpCiAJUkVTVE9SRV9BTExfU1lTCiAJU1AgPSBFWF9TQ1JBVENIX1JFRzsKQEAgLTEzNiwxMSArMTQ4LDggQEAKIEVORFBST0MoX2V4X2ljcGxiX21pc3MpCiAKIEVOVFJZKF9leF9zeXNjYWxsKQotCShSNzo2LFA1OjQpID0gW3NwKytdOwotCUFTVEFUID0gW3NwKytdOwogCXJhaXNlIDE1OwkJLyogaW52b2tlZCBieSBUUkFQICMwLCBmb3Igc3lzIGNhbGwgKi8KLQlzcCA9IEVYX1NDUkFUQ0hfUkVHOwotCXJ0eAorCWp1bXAucyBfYmZpbl9yZXR1cm5fZnJvbV9leGNlcHRpb247CiBFTkRQUk9DKF9leF9zeXNjYWxsKQogCiBFTlRSWShfZXhfc29mdF9icCkKQEAgLTE4MSw4ICsxOTAsOCBAQAogCWlmIGNjIGp1bXAgLkxmaW5kX3ByaW9yaXR5X2RvbmU7CiAJanVtcC5zIC5MZmluZF9wcmlvcml0eV9zdGFydDsKIC5MZmluZF9wcmlvcml0eV9kb25lOgotCXA0LmwgPSBfZGVidWdnZXJfc3RlcDsKLQlwNC5oID0gX2RlYnVnZ2VyX3N0ZXA7CisJcDQubCA9IF9rZ2RiX3NpbmdsZV9zdGVwOworCXA0LmggPSBfa2dkYl9zaW5nbGVfc3RlcDsKIAlyNiA9IFtwNF07CiAJY2MgPSByNiA9PSAwOwogCWlmIGNjIGp1bXAgLkxkb19zaW5nbGVfc3RlcDsKQEAgLTI1MCw2ICsyNTksMjkgQEAKIAlSNz1MQzE7CiAJTEMxPVI3OwogI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfREVCVUdfRE9VQkxFRkFVTFQKKwkvKiBXaGlsZSB3ZSB3ZXJlIHByb2Nlc3NpbmcgdGhlIGN1cnJlbnQgZXhjZXB0aW9uLAorCSAqIGRpZCB3ZSBjYXVzZSBhbm90aGVyLCBhbmQgZG91YmxlIGZhdWx0PworCSAqLworCXI3ID0gU0VRU1RBVDsgICAgICAgICAgIC8qIHJlYXNvbiBjb2RlIGlzIGluIGJpdCA1OjAgKi8KKwlyNi5sID0gbG8oU0VRU1RBVF9FWENBVVNFKTsKKwlyNi5oID0gaGkoU0VRU1RBVF9FWENBVVNFKTsKKwlyNyA9IHI3ICYgcjY7CisJcjYgPSAweDI1OworCUNDID0gUjcgPT0gUjY7CisJaWYgQ0MgSlVNUCBfZG91YmxlX2ZhdWx0OworCisJLyogRGlkIHdlIGNhdXNlIGEgSFcgZXJyb3I/ICovCisJcDUubCA9IGxvKElMQVQpOworCXA1LmggPSBoaShJTEFUKTsKKwlyNiA9IFtwNV07CisJcjcgPSAweDIwOwkJLyogRGlkIEkganVzdCBjYXVzZSBhbnRoZXIgSFcgZXJyb3I/ICovCisJcjcgPSByNyAmIHIxOworCUNDID0gUjcgPT0gUjY7CisJaWYgQ0MgSlVNUCBfZG91YmxlX2ZhdWx0OworI2VuZGlmCisKIAkoUjc6NixQNTo0KSA9IFtzcCsrXTsKIAlBU1RBVCA9IFtzcCsrXTsKIAlzcCA9IEVYX1NDUkFUQ0hfUkVHOwpAQCAtMjkyLDYgKzMyNCwxNCBAQAogCVtwNF0gPSBwNTsKIAljc3luYzsKIAorI2lmbmRlZiBDT05GSUdfREVCVUdfRE9VQkxFRkFVTFQKKwkvKgorCSAqIFNhdmUgdGhlc2UgcmVnaXN0ZXJzLCBhcyB0aGV5IGFyZSBvbmx5IHZhbGlkIGluIGV4Y2VwdGlvbiBjb250ZXh0CisJICogICh3aGVyZSB3ZSBhcmUgbm93IC0gYXMgc29vbiBhcyB3ZSBkZWZlciB0byBJUlE1LCB0aGV5IGNhbiBjaGFuZ2UpCisJICogRENQTEJfU1RBVFVTIGFuZCBJQ1BMQl9TVEFUVVMgYXJlIGFsc28gb25seSB2YWxpZCBpbiBFVlQzLAorCSAqIGJ1dCB0aGV5IGFyZSBub3QgdmVyeSBpbnRlcmVzdGluZywgc28gZG9uJ3Qgc2F2ZSB0aGVtCisJICovCisKIAlwNC5sID0gbG8oRENQTEJfRkFVTFRfQUREUik7CiAJcDQuaCA9IGhpKERDUExCX0ZBVUxUX0FERFIpOwogCXI3ID0gW3A0XTsKQEAgLTMwNCwxMiArMzQ0LDExIEBACiAJcDUubCA9IF9zYXZlZF9pY3BsYl9mYXVsdF9hZGRyOwogCVtwNV0gPSByNzsKIAotCXA0LmwgPSBfZXhjcHRfc2F2ZWRfc3R1ZmY7Ci0JcDQuaCA9IF9leGNwdF9zYXZlZF9zdHVmZjsKLQogCXI2ID0gcmV0eDsKKwlwNC5sID0gX3NhdmVkX3JldHg7CisJcDQuaCA9IF9zYXZlZF9yZXR4OwogCVtwNF0gPSByNjsKLQorI2VuZGlmCiAJcjYgPSBTWVNDRkc7CiAJW3A0ICsgNF0gPSByNjsKIAlCSVRDTFIocjYsIDApOwpAQCAtMzI3LDU5ICszNjYsNTYgQEAKIAlyNiA9IDB4M2Y7CiAJc3RpIHI2OwogCi0JKFI3OjYsUDU6NCkgPSBbc3ArK107Ci0JQVNUQVQgPSBbc3ArK107Ci0JU1AgPSBFWF9TQ1JBVENIX1JFRzsKIAlyYWlzZSA1OwotCXJ0eDsKKwlqdW1wLnMgX2JmaW5fcmV0dXJuX2Zyb21fZXhjZXB0aW9uOwogRU5EUFJPQyhfZXhfdHJhcF9jKQogCiAvKiBXZSBqdXN0IHJlYWxpemVkIHdlIGdvdCBhbiBleGNlcHRpb24sIHdoaWxlIHdlIHdlcmUgcHJvY2Vzc2luZyBhIGRpZmZlcmVudAogICogZXhjZXB0aW9uLiBUaGlzIGlzIGEgdW5yZWNvdmVyYWJsZSBldmVudCwgc28gY3Jhc2gKICAqLwogRU5UUlkoX2RvdWJsZV9mYXVsdCkKLSAgICAgICAgLyogVHVybiBjYWNoZXMgJiBwcm90ZWN0aW9uIG9mZiwgdG8gZW5zdXJlIHdlIGRvbid0IGdldCBhbnkgbW9yZQotICAgICAgICAgKiBkb3VibGUgZXhjZXB0aW9ucwotICAgICAgICAgKi8KKwkvKiBUdXJuIGNhY2hlcyAmIHByb3RlY3Rpb24gb2ZmLCB0byBlbnN1cmUgd2UgZG9uJ3QgZ2V0IGFueSBtb3JlCisJICogZG91YmxlIGV4Y2VwdGlvbnMKKwkgKi8KIAotICAgICAgICBQNC5MID0gTE8oSU1FTV9DT05UUk9MKTsKLSAgICAgICAgUDQuSCA9IEhJKElNRU1fQ09OVFJPTCk7CisJUDQuTCA9IExPKElNRU1fQ09OVFJPTCk7CisJUDQuSCA9IEhJKElNRU1fQ09OVFJPTCk7CiAKLSAgICAgICAgUjUgPSBbUDRdOyAgICAgICAgICAgICAgLyogQ29udHJvbCBSZWdpc3RlciovCi0gICAgICAgIEJJVENMUihSNSxFTklDUExCX1ApOwotICAgICAgICBTU1lOQzsgICAgICAgICAgLyogU1NZTkMgcmVxdWlyZWQgYmVmb3JlIHdyaXRpbmcgdG8gSU1FTV9DT05UUk9MLiAqLwotICAgICAgICAuYWxpZ24gODsKLSAgICAgICAgW1A0XSA9IFI1OwotICAgICAgICBTU1lOQzsKKwlSNSA9IFtQNF07ICAgICAgICAgICAgICAvKiBDb250cm9sIFJlZ2lzdGVyKi8KKwlCSVRDTFIoUjUsRU5JQ1BMQl9QKTsKKwlTU1lOQzsgICAgICAgICAgLyogU1NZTkMgcmVxdWlyZWQgYmVmb3JlIHdyaXRpbmcgdG8gSU1FTV9DT05UUk9MLiAqLworCS5hbGlnbiA4OworCVtQNF0gPSBSNTsKKwlTU1lOQzsKIAotICAgICAgICBQNC5MID0gTE8oRE1FTV9DT05UUk9MKTsKLSAgICAgICAgUDQuSCA9IEhJKERNRU1fQ09OVFJPTCk7Ci0gICAgICAgIFI1ID0gW1A0XTsKLSAgICAgICAgQklUQ0xSKFI1LEVORENQTEJfUCk7Ci0gICAgICAgIFNTWU5DOyAgICAgICAgICAvKiBTU1lOQyByZXF1aXJlZCBiZWZvcmUgd3JpdGluZyB0byBETUVNX0NPTlRST0wuICovCi0gICAgICAgIC5hbGlnbiA4OwotICAgICAgICBbUDRdID0gUjU7Ci0gICAgICAgIFNTWU5DOworCVA0LkwgPSBMTyhETUVNX0NPTlRST0wpOworCVA0LkggPSBISShETUVNX0NPTlRST0wpOworCVI1ID0gW1A0XTsKKwlCSVRDTFIoUjUsRU5EQ1BMQl9QKTsKKwlTU1lOQzsgICAgICAgICAgLyogU1NZTkMgcmVxdWlyZWQgYmVmb3JlIHdyaXRpbmcgdG8gRE1FTV9DT05UUk9MLiAqLworCS5hbGlnbiA4OworCVtQNF0gPSBSNTsKKwlTU1lOQzsKIAotICAgICAgICAvKiBGaXggdXAgdGhlIHN0YWNrICovCi0gICAgICAgIChSNzo2LFA1OjQpID0gW3NwKytdOwotICAgICAgICBBU1RBVCA9IFtzcCsrXTsKLSAgICAgICAgU1AgPSBFWF9TQ1JBVENIX1JFRzsKKwkvKiBGaXggdXAgdGhlIHN0YWNrICovCisJKFI3OjYsUDU6NCkgPSBbc3ArK107CisJQVNUQVQgPSBbc3ArK107CisJU1AgPSBFWF9TQ1JBVENIX1JFRzsKIAotICAgICAgICAvKiBXZSBzaG91bGQgYmUgb3V0IG9mIHRoZSBleGNlcHRpb24gc3RhY2ssIGFuZCBiYWNrIGRvd24gaW50bwotICAgICAgICAgKiBrZXJuZWwgb3IgdXNlciBzcGFjZSBzdGFjawotICAgICAgICAgKi8KLSAgICAgICAgU0FWRV9BTExfU1lTCisJLyogV2Ugc2hvdWxkIGJlIG91dCBvZiB0aGUgZXhjZXB0aW9uIHN0YWNrLCBhbmQgYmFjayBkb3duIGludG8KKwkgKiBrZXJuZWwgb3IgdXNlciBzcGFjZSBzdGFjaworCSAqLworCVNBVkVfQUxMX1NZUwogCiAJLyogVGhlIGR1bXBpbmcgZnVuY3Rpb25zIGV4cGVjdCB0aGUgcmV0dXJuIGFkZHJlc3MgaW4gdGhlIFJFVEkKIAkgKiBzbG90LiAgKi8KIAlyNiA9IHJldHg7CiAJW3NwICsgUFRfUENdID0gcjY7CiAKLSAgICAgICAgcjAgPSBzcDsgICAgICAgIC8qIHN0YWNrIGZyYW1lIHB0X3JlZ3MgcG9pbnRlciBhcmd1bWVudCA9PT4gcjAgKi8KLSAgICAgICAgU1AgKz0gLTEyOwotICAgICAgICBjYWxsIF9kb3VibGVfZmF1bHRfYzsKLSAgICAgICAgU1AgKz0gMTI7CisJcjAgPSBzcDsgICAgICAgIC8qIHN0YWNrIGZyYW1lIHB0X3JlZ3MgcG9pbnRlciBhcmd1bWVudCA9PT4gcjAgKi8KKwlTUCArPSAtMTI7CisJY2FsbCBfZG91YmxlX2ZhdWx0X2M7CisJU1AgKz0gMTI7CiAuTF9kb3VibGVfZmF1bHRfcGFuaWM6CiAgICAgICAgIEpVTVAgLkxfZG91YmxlX2ZhdWx0X3BhbmljCiAKQEAgLTM4OCw4ICs0MjQsOCBAQAogRU5UUlkoX2V4Y2VwdGlvbl90b19sZXZlbDUpCiAJU0FWRV9BTExfU1lTCiAKLQlwNC5sID0gX2V4Y3B0X3NhdmVkX3N0dWZmOwotCXA0LmggPSBfZXhjcHRfc2F2ZWRfc3R1ZmY7CisJcDQubCA9IF9zYXZlZF9yZXR4OworCXA0LmggPSBfc2F2ZWRfcmV0eDsKIAlyNiA9IFtwNF07CiAJW3NwICsgUFRfUENdID0gcjY7CiAKQEAgLTQyMCw2ICs0NTYsMTcgQEAKIAljYWxsIF90cmFwX2M7CiAJU1AgKz0gMTI7CiAKKyNpZmRlZiBDT05GSUdfREVCVUdfRE9VQkxFRkFVTFQKKwkvKiBHcmFiIElMQVQgKi8KKwlwMi5sID0gbG8oSUxBVCk7CisJcDIuaCA9IGhpKElMQVQpOworCXIwID0gW3AyXTsKKwlyMSA9IDB4MjA7ICAvKiBEaWQgSSBqdXN0IGNhdXNlIGFudGhlciBIVyBlcnJvcj8gKi8KKwlyMCA9IHIwICYgcjE7CisJQ0MgPSBSMCA9PSBSMTsKKwlpZiBDQyBKVU1QIF9kb3VibGVfZmF1bHQ7CisjZW5kaWYKKwogCWNhbGwgX3JldF9mcm9tX2V4Y2VwdGlvbjsKIAlSRVNUT1JFX0FMTF9TWVMKIAlydGk7CkBAIC00MzYsNyArNDgzLDQ4IEBACiAJLyogVHJ5IHRvIGRlYWwgd2l0aCBzeXNjYWxscyBxdWlja2x5LiAgKi8KIAlbLS1zcF0gPSBBU1RBVDsKIAlbLS1zcF0gPSAoUjc6NixQNTo0KTsKKworI2lmIEFOT01BTFlfMDUwMDAyODMgfHwgQU5PTUFMWV8wNTAwMDMxNQorCWNjID0gcjcgPT0gcjc7CisJcDUuaCA9IEhJKENISVBJRCk7CisJcDUubCA9IExPKENISVBJRCk7CisJaWYgY2MganVtcCAxZjsKKwlyNy5sID0gV1twNV07CisxOgorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfREVCVUdfRE9VQkxFRkFVTFQKKwkvKgorCSAqIFNhdmUgdGhlc2UgcmVnaXN0ZXJzLCBhcyB0aGV5IGFyZSBvbmx5IHZhbGlkIGluIGV4Y2VwdGlvbiBjb250ZXh0CisJICogKHdoZXJlIHdlIGFyZSBub3cgLSBhcyBzb29uIGFzIHdlIGRlZmVyIHRvIElSUTUsIHRoZXkgY2FuIGNoYW5nZSkKKwkgKiBEQ1BMQl9TVEFUVVMgYW5kIElDUExCX1NUQVRVUyBhcmUgYWxzbyBvbmx5IHZhbGlkIGluIEVWVDMsCisJICogYnV0IHRoZXkgYXJlIG5vdCB2ZXJ5IGludGVyZXN0aW5nLCBzbyBkb24ndCBzYXZlIHRoZW0KKwkgKi8KKworCXA0LmwgPSBsbyhEQ1BMQl9GQVVMVF9BRERSKTsKKwlwNC5oID0gaGkoRENQTEJfRkFVTFRfQUREUik7CisJcjcgPSBbcDRdOworCXA1LmggPSBfc2F2ZWRfZGNwbGJfZmF1bHRfYWRkcjsKKwlwNS5sID0gX3NhdmVkX2RjcGxiX2ZhdWx0X2FkZHI7CisJW3A1XSA9IHI3OworCisJcjcgPSBbcDQgKyAoSUNQTEJfRkFVTFRfQUREUiAtIERDUExCX0ZBVUxUX0FERFIpXTsKKwlwNS5oID0gX3NhdmVkX2ljcGxiX2ZhdWx0X2FkZHI7CisJcDUubCA9IF9zYXZlZF9pY3BsYl9mYXVsdF9hZGRyOworCVtwNV0gPSByNzsKKworCXA0LmwgPSBfc2F2ZWRfcmV0eDsKKwlwNC5oID0gX3NhdmVkX3JldHg7CisJcjYgPSByZXR4OworCVtwNF0gPSByNjsKKwogCXI3ID0gU0VRU1RBVDsJCS8qIHJlYXNvbiBjb2RlIGlzIGluIGJpdCA1OjAgKi8KKwlwNC5sID0gX3NhdmVkX3NlcXN0YXQ7CisJcDQuaCA9IF9zYXZlZF9zZXFzdGF0OworCVtwNF0gPSByNzsKKyNlbHNlCisJcjcgPSBTRVFTVEFUOyAgICAgICAgICAgLyogcmVhc29uIGNvZGUgaXMgaW4gYml0IDU6MCAqLworI2VuZGlmCiAJcjYubCA9IGxvKFNFUVNUQVRfRVhDQVVTRSk7CiAJcjYuaCA9IGhpKFNFUVNUQVRfRVhDQVVTRSk7CiAJcjcgPSByNyAmIHI2OwpAQCAtNjE2LDYgKzcwNCw5IEBACiAJcnRzOwogRU5EUFJPQyhfc3lzdGVtX2NhbGwpCiAKKy8qIERvIG5vdCBtYXJrIGFzIEVOVFJZKCkgdG8gYXZvaWQgZXJyb3IgaW4gYXNzZW1ibGVyIC4uLgorICogdGhpcyBzeW1ib2wgbmVlZCBub3QgYmUgZ2xvYmFsIGFueXdheXMsIHNvIC4uLgorICovCiBfc3lzX3RyYWNlOgogCWNhbGwgX3N5c2NhbGxfdHJhY2U7CiAKQEAgLTk0MSw2ICsxMDMyLDE1IEBACiAJU0FWRV9BTExfU1lTCiAJdHJhY2VfYnVmZmVyX3N0b3AocDAscjApOwogCisjaWYgQU5PTUFMWV8wNTAwMDI4MyB8fCBBTk9NQUxZXzA1MDAwMzE1CisJY2MgPSByNSA9PSByNTsKKwlwNC5oID0gSEkoQ0hJUElEKTsKKwlwNC5sID0gTE8oQ0hJUElEKTsKKwlpZiBjYyBqdW1wIDFmOworCXI1LmwgPSBXW3A0XTsKKzE6CisjZW5kaWYKKwogCS8qIFR1cm4gY2FjaGVzIG9mZiwgdG8gZW5zdXJlIHdlIGRvbid0IGdldCBkb3VibGUgZXhjZXB0aW9ucyAqLwogCiAJUDQuTCA9IExPKElNRU1fQ09OVFJPTCk7CkBAIC05OTIsNyArMTA5MiwxMiBAQAogCSAqLwogCS5sb25nIF9leF9zeXNjYWxsICAgICAgIC8qIDB4MDAgLSBVc2VyIERlZmluZWQgLSBMaW51eCBTeXNjYWxsICovCiAJLmxvbmcgX2V4X3NvZnRfYnAgICAgICAgLyogMHgwMSAtIFVzZXIgRGVmaW5lZCAtIFNvZnR3YXJlIGJyZWFrcG9pbnQgKi8KKyNpZmRlZglDT05GSUdfS0dEQgorCS5sb25nIF9leF90cmFwX2MJLyogMHgwMiAtIFVzZXIgRGVmaW5lZCAtIEtHREIgaW5pdGlhbCBjb25uZWN0aW9uCisJCQkJCQkJIGFuZCBicmVhayBzaWduYWwgdHJhcCAqLworI2Vsc2UKIAkubG9uZyBfZXhfcmVwbGFjZWFibGUgICAvKiAweDAyIC0gVXNlciBEZWZpbmVkICovCisjZW5kaWYKIAkubG9uZyBfZXhfdHJhcF9jICAgICAgICAvKiAweDAzIC0gVXNlciBEZWZpbmVkIC0gdXNlcnNwYWNlIHN0YWNrIG92ZXJmbG93ICovCiAJLmxvbmcgX2V4X3RyYXBfYyAgICAgICAgLyogMHgwNCAtIFVzZXIgRGVmaW5lZCAtIGR1bXAgdHJhY2UgYnVmZmVyICovCiAJLmxvbmcgX2V4X3JlcGxhY2VhYmxlICAgLyogMHgwNSAtIFVzZXIgRGVmaW5lZCAqLwpAQCAtMTQzMiwxNSArMTUzNyw3IEBACiAJLnJlcHQgTlJfc3lzY2FsbHMtKC4tX3N5c19jYWxsX3RhYmxlKS80CiAJLmxvbmcgX3N5c19uaV9zeXNjYWxsCiAJLmVuZHIKLQotCS8qCi0JICogVXNlZCB0byBzYXZlIHRoZSByZWFsIFJFVFgsIElNQVNLIGFuZCBTWVNDRkcgd2hlbiB0ZW1wb3JhcmlseQotCSAqIHN0b3Jpbmcgc2FmZSB2YWx1ZXMgYWNyb3NzIHRoZSB0cmFuc2l0aW9uIGZyb20gZXhjZXB0aW9uIHRvIElSUTUuCi0JICovCi1fZXhjcHRfc2F2ZWRfc3R1ZmY6Ci0JLmxvbmcgMDsKLQkubG9uZyAwOwotCS5sb25nIDA7CitFTkQoX3N5c19jYWxsX3RhYmxlKQogCiBfZXhjZXB0aW9uX3N0YWNrOgogCS5yZXB0IDEwMjQKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1jb21tb24vaGVhZC5TIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWNvbW1vbi9oZWFkLlMKaW5kZXggMTkxYjRlOS4uZjEyM2E2MiAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWNvbW1vbi9oZWFkLlMKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWNvbW1vbi9oZWFkLlMKQEAgLTY4LDYgKzY4LDE2IEBACiAJTTIgPSByMDsKIAlNMyA9IHIwOwogCisJLyoKKwkgKiBDbGVhciBJVEVTVF9DT01NQU5EIGFuZCBEVEVTVF9DT01NQU5EIHJlZ2lzdGVycywKKwkgKiBMZWF2aW5nIHRoZXNlIGFzIG5vbi16ZXJvIGNhbiBjb25mdXNlIHRoZSBlbXVsYXRvcgorCSAqLworCXAwLkwgPSBMTyhEVEVTVF9DT01NQU5EKTsKKwlwMC5IID0gSEkoRFRFU1RfQ09NTUFORCk7CisJW3AwXSA9IFIwOworCVtwMCArIChJVEVTVF9DT01NQU5EIC0gRFRFU1RfQ09NTUFORCldID0gUjA7CisJQ1NZTkM7CisKIAl0cmFjZV9idWZmZXJfaW5pdChwMCxyMCk7CiAJUDAgPSBSMTsKIAlSMCA9IFIxOwpAQCAtOTAsMTIgKzEwMCw0NiBAQAogCVtwMF0gPSBSMDsKIAlTU1lOQzsKIAotCS8qIFNhdmUgUkVUWCwgaW4gY2FzZSBvZiBkb3VibGVmYXVsdCAqLwotCXAwLmwgPSBfX19yZXR4OwotCXAwLmggPSBfX19yZXR4OworCS8qIGluIGNhc2Ugb2YgZG91YmxlIGZhdWx0cywgc2F2ZSBhIGZldyB0aGluZ3MgKi8KKwlwMC5sID0gX2luaXRfcmV0eDsKKwlwMC5oID0gX2luaXRfcmV0eDsKIAlSMCA9IFJFVFg7CiAJW1AwXSA9IFIwOwogCisjaWZkZWYgQ09ORklHX0RFQlVHX0RPVUJMRUZBVUxUCisJLyogT25seSBzYXZlIHRoZXNlIGlmIHdlIGFyZSBzdG9yaW5nIHRoZW0sCisJICogVGhpcyBoYXBwZW5zIGhlcmUsIHNpbmNlIEwxIGdldHMgY2xvYmJlcmVkCisJICogYmVsb3cKKwkgKi8KKwlwMC5sID0gX3NhdmVkX3JldHg7CisJcDAuaCA9IF9zYXZlZF9yZXR4OworCXAxLmwgPSBfaW5pdF9zYXZlZF9yZXR4OworCXAxLmggPSBfaW5pdF9zYXZlZF9yZXR4OworCXIwID0gW3AwXTsKKwlbcDFdID0gcjA7CisKKwlwMC5sID0gX3NhdmVkX2RjcGxiX2ZhdWx0X2FkZHI7CisJcDAuaCA9IF9zYXZlZF9kY3BsYl9mYXVsdF9hZGRyOworCXAxLmwgPSBfaW5pdF9zYXZlZF9kY3BsYl9mYXVsdF9hZGRyOworCXAxLmggPSBfaW5pdF9zYXZlZF9kY3BsYl9mYXVsdF9hZGRyOworCXIwID0gW3AwXTsKKwlbcDFdID0gcjA7CisKKwlwMC5sID0gX3NhdmVkX2ljcGxiX2ZhdWx0X2FkZHI7CisJcDAuaCA9IF9zYXZlZF9pY3BsYl9mYXVsdF9hZGRyOworCXAxLmwgPSBfaW5pdF9zYXZlZF9pY3BsYl9mYXVsdF9hZGRyOworCXAxLmggPSBfaW5pdF9zYXZlZF9pY3BsYl9mYXVsdF9hZGRyOworCXIwID0gW3AwXTsKKwlbcDFdID0gcjA7CisKKwlwMC5sID0gX3NhdmVkX3NlcXN0YXQ7CisJcDAuaCA9IF9zYXZlZF9zZXFzdGF0OworCXAxLmwgPSBfaW5pdF9zYXZlZF9zZXFzdGF0OworCXAxLmggPSBfaW5pdF9zYXZlZF9zZXFzdGF0OworCXIwID0gW3AwXTsKKwlbcDFdID0gcjA7CisjZW5kaWYKKwogCS8qIEluaXRpYWxpemUgc3RhY2sgcG9pbnRlciAqLwogCXNwLmwgPSBsbyhJTklUSUFMX1NUQUNLKTsKIAlzcC5oID0gaGkoSU5JVElBTF9TVEFDSyk7CkBAIC0xMDcsNyArMTUxLDcgQEAKICNlbmRpZgogCiAJLyogUHV0IFRoZSBDb2RlIGZvciBQTEwgUHJvZ3JhbW1pbmcgYW5kIFNEUkFNIFByb2dyYW1taW5nIGluIEwxIElTUkFNICovCi0JY2FsbCBfYmY1M3hfcmVsb2NhdGVfbDFfbWVtOworCWNhbGwgX2JmaW5fcmVsb2NhdGVfbDFfbWVtOwogI2lmZGVmIENPTkZJR19CRklOX0tFUk5FTF9DTE9DSwogCWNhbGwgX3N0YXJ0X2RtYV9jb2RlOwogI2VuZGlmCkBAIC0xNjIsNiArMjA2LDYwIEBACiAJd1twMF0gPSByMDsKIAlzc3luYzsKIAorI2lmIEwxX0RBVEFfQV9MRU5HVEggPiAwCisJcjEubCA9IF9fc2Jzc19sMTsKKwlyMS5oID0gX19zYnNzX2wxOworCXIyLmwgPSBfX2Vic3NfbDE7CisJcjIuaCA9IF9fZWJzc19sMTsKKwlyMCA9IDAgKHopOworCXIyID0gcjIgLSByMTsKKwljYyA9IHIyID09IDA7CisJaWYgY2MganVtcCAuTF9hX2wxX2RvbmU7CisJcjIgPj49IDI7CisJcDEgPSByMTsKKwlwMiA9IHIyOworCWxzZXR1cCAoLkxfY2xlYXJfYV9sMSwgLkxfY2xlYXJfYV9sMSApIGxjMCA9IHAyOworLkxfY2xlYXJfYV9sMToKKwlbcDErK10gPSByMDsKKy5MX2FfbDFfZG9uZToKKyNlbmRpZgorCisjaWYgTDFfREFUQV9CX0xFTkdUSCA+IDAKKwlyMS5sID0gX19zYnNzX2JfbDE7CisJcjEuaCA9IF9fc2Jzc19iX2wxOworCXIyLmwgPSBfX2Vic3NfYl9sMTsKKwlyMi5oID0gX19lYnNzX2JfbDE7CisJcjAgPSAwICh6KTsKKwlyMiA9IHIyIC0gcjE7CisJY2MgPSByMiA9PSAwOworCWlmIGNjIGp1bXAgLkxfYl9sMV9kb25lOworCXIyID4+PSAyOworCXAxID0gcjE7CisJcDIgPSByMjsKKwlsc2V0dXAgKC5MX2NsZWFyX2JfbDEsIC5MX2NsZWFyX2JfbDEgKSBsYzAgPSBwMjsKKy5MX2NsZWFyX2JfbDE6CisJW3AxKytdID0gcjA7CisuTF9iX2wxX2RvbmU6CisjZW5kaWYKKworI2lmIEwyX0xFTkdUSCA+IDAKKwlyMS5sID0gX19zYnNzX2wyOworCXIxLmggPSBfX3Nic3NfbDI7CisJcjIubCA9IF9fZWJzc19sMjsKKwlyMi5oID0gX19lYnNzX2wyOworCXIwID0gMCAoeik7CisJcjIgPSByMiAtIHIxOworCWNjID0gcjIgPT0gMDsKKwlpZiBjYyBqdW1wIC5MX2wyX2RvbmU7CisJcjIgPj49IDI7CisJcDEgPSByMTsKKwlwMiA9IHIyOworCWxzZXR1cCAoLkxfY2xlYXJfbDIsIC5MX2NsZWFyX2wyICkgbGMwID0gcDI7CisuTF9jbGVhcl9sMjoKKwlbcDErK10gPSByMDsKKy5MX2wyX2RvbmU6CisjZW5kaWYKKwogCS8qIFplcm8gb3V0IHRoZSBic3MgcmVnaW9uCiAJICogTm90ZTogdGhpcyB3aWxsIGZhaWwgaWYgYnNzIGlzIDAgYnl0ZXMgLi4uCiAJICovCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtY29tbW9uL2ludGVycnVwdC5TIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWNvbW1vbi9pbnRlcnJ1cHQuUwppbmRleCBiMjdlNTlkLi40YTJlYzdhIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtY29tbW9uL2ludGVycnVwdC5TCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1jb21tb24vaW50ZXJydXB0LlMKQEAgLTE0Myw3ICsxNDMsNyBAQAogCWZwID0gMDsKICNlbmRpZgogCi0jaWYgQU5PTUFMWV8wNTAwMDI4MworI2lmIEFOT01BTFlfMDUwMDAyODMgfHwgQU5PTUFMWV8wNTAwMDMxNQogCWNjID0gcjcgPT0gcjc7CiAJcDUuaCA9IEhJKENISVBJRCk7CiAJcDUubCA9IExPKENISVBJRCk7CkBAIC0xNzksNyArMTc5LDE2IEBACiAJY2FsbCBfdHJhcF9jOwogCVNQICs9IDEyOwogCisjaWZkZWYgRUJJVV9FUlJNU1QKKwkvKiBtYWtlIHN1cmUgRUJJVV9FUlJNU1QgaXMgY2xlYXIgKi8KKwlwMC5sID0gTE8oRUJJVV9FUlJNU1QpOworCXAwLmggPSBISShFQklVX0VSUk1TVCk7CisJcjAubCA9IChDT1JFX0VSUk9SIHwgQ09SRV9NRVJST1IpOworCXdbcDBdID0gcjAubDsKKyNlbmRpZgorCiAJY2FsbCBfcmV0X2Zyb21fZXhjZXB0aW9uOworCiAuTGNvbW1vbl9yZXN0b3JlX2FsbF9zeXM6CiAJUkVTVE9SRV9BTExfU1lTCiAJcnRpOwpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWNvbW1vbi9pbnRzLXByaW9yaXR5LmMgYi9hcmNoL2JsYWNrZmluL21hY2gtY29tbW9uL2ludHMtcHJpb3JpdHkuYwppbmRleCA1ZmE1MzY3Li4zNGU4YTcyIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtY29tbW9uL2ludHMtcHJpb3JpdHkuYworKysgYi9hcmNoL2JsYWNrZmluL21hY2gtY29tbW9uL2ludHMtcHJpb3JpdHkuYwpAQCAtMjQzLDEyICsyNDMsMTQgQEAKICNlbmRpZgogCiBzdGF0aWMgc3RydWN0IGlycV9jaGlwIGJmaW5fY29yZV9pcnFjaGlwID0geworCS5uYW1lID0gIkNPUkUiLAogCS5hY2sgPSBiZmluX2Fja19ub29wLAogCS5tYXNrID0gYmZpbl9jb3JlX21hc2tfaXJxLAogCS51bm1hc2sgPSBiZmluX2NvcmVfdW5tYXNrX2lycSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgYmZpbl9pbnRlcm5hbF9pcnFjaGlwID0geworCS5uYW1lID0gIklOVE4iLAogCS5hY2sgPSBiZmluX2Fja19ub29wLAogCS5tYXNrID0gYmZpbl9pbnRlcm5hbF9tYXNrX2lycSwKIAkudW5tYXNrID0gYmZpbl9pbnRlcm5hbF91bm1hc2tfaXJxLApAQCAtMjc4LDYgKzI4MCw3IEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgYmZpbl9nZW5lcmljX2Vycm9yX2lycWNoaXAgPSB7CisJLm5hbWUgPSAiRVJST1IiLAogCS5hY2sgPSBiZmluX2Fja19ub29wLAogCS5tYXNrX2FjayA9IGJmaW5fZ2VuZXJpY19lcnJvcl9tYXNrX2lycSwKIAkubWFzayA9IGJmaW5fZ2VuZXJpY19lcnJvcl9tYXNrX2lycSwKQEAgLTM2MSw2ICszNjQsMTQgQEAKIH0KICNlbmRpZgkJCQkvKiBCRjUzN19HRU5FUklDX0VSUk9SX0lOVF9ERU1VWCAqLwogCitzdGF0aWMgaW5saW5lIHZvaWQgYmZpbl9zZXRfaXJxX2hhbmRsZXIodW5zaWduZWQgaXJxLCBpcnFfZmxvd19oYW5kbGVyX3QgaGFuZGxlKQoreworCXN0cnVjdCBpcnFfZGVzYyAqZGVzYyA9IGlycV9kZXNjICsgaXJxOworCS8qIE1heSBub3QgY2FsbCBnZW5lcmljIHNldF9pcnFfaGFuZGxlcigpIGR1ZSB0byBzcGlubG9jaworCSAgIHJlY3Vyc2lvbi4gKi8KKwlkZXNjLT5oYW5kbGVfaXJxID0gaGFuZGxlOworfQorCiAjaWYgIWRlZmluZWQoQ09ORklHX0JGNTR4KQogCiBzdGF0aWMgdW5zaWduZWQgc2hvcnQgZ3Bpb19lbmFibGVkW2dwaW9fYmFuayhNQVhfQkxBQ0tGSU5fR1BJT1MpXTsKQEAgLTQ3Myw5ICs0ODQsOSBAQAogCVNTWU5DKCk7CiAKIAlpZiAodHlwZSAmIChJUlFfVFlQRV9FREdFX1JJU0lORyB8IElSUV9UWVBFX0VER0VfRkFMTElORykpCi0JCXNldF9pcnFfaGFuZGxlcihpcnEsIGhhbmRsZV9lZGdlX2lycSk7CisJCWJmaW5fc2V0X2lycV9oYW5kbGVyKGlycSwgaGFuZGxlX2VkZ2VfaXJxKTsKIAllbHNlCi0JCXNldF9pcnFfaGFuZGxlcihpcnEsIGhhbmRsZV9sZXZlbF9pcnEpOworCQliZmluX3NldF9pcnFfaGFuZGxlcihpcnEsIGhhbmRsZV9sZXZlbF9pcnEpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC00OTUsNiArNTA2LDcgQEAKICNlbmRpZgogCiBzdGF0aWMgc3RydWN0IGlycV9jaGlwIGJmaW5fZ3Bpb19pcnFjaGlwID0geworCS5uYW1lID0gIkdQSU8iLAogCS5hY2sgPSBiZmluX2dwaW9fYWNrX2lycSwKIAkubWFzayA9IGJmaW5fZ3Bpb19tYXNrX2lycSwKIAkubWFza19hY2sgPSBiZmluX2dwaW9fbWFza19hY2tfaXJxLApAQCAtODA0LDEwICs4MTYsMTAgQEAKIAogCWlmICh0eXBlICYgKElSUV9UWVBFX0VER0VfUklTSU5HIHwgSVJRX1RZUEVfRURHRV9GQUxMSU5HKSkgewogCQlwaW50W2JhbmtdLT5lZGdlX3NldCA9IHBpbnRiaXQ7Ci0JCXNldF9pcnFfaGFuZGxlcihpcnEsIGhhbmRsZV9lZGdlX2lycSk7CisJCWJmaW5fc2V0X2lycV9oYW5kbGVyKGlycSwgaGFuZGxlX2VkZ2VfaXJxKTsKIAl9IGVsc2UgewogCQlwaW50W2JhbmtdLT5lZGdlX2NsZWFyID0gcGludGJpdDsKLQkJc2V0X2lycV9oYW5kbGVyKGlycSwgaGFuZGxlX2xldmVsX2lycSk7CisJCWJmaW5fc2V0X2lycV9oYW5kbGVyKGlycSwgaGFuZGxlX2xldmVsX2lycSk7CiAJfQogCiAJU1NZTkMoKTsKQEAgLTg4NCw2ICs4OTYsNyBAQAogI2VuZGlmCiAKIHN0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgYmZpbl9ncGlvX2lycWNoaXAgPSB7CisJLm5hbWUgPSAiR1BJTyIsCiAJLmFjayA9IGJmaW5fZ3Bpb19hY2tfaXJxLAogCS5tYXNrID0gYmZpbl9ncGlvX21hc2tfaXJxLAogCS5tYXNrX2FjayA9IGJmaW5fZ3Bpb19tYXNrX2Fja19pcnEsCkBAIC0xMTM2LDggKzExNDksNCBAQAogCQl2ZWMgPSBpdmctPmlycW5vOwogCX0KIAlhc21fZG9fSVJRKHZlYywgZnApOwotCi0jaWZkZWYgQ09ORklHX0tHREIKLQlrZ2RiX3Byb2Nlc3NfYnJlYWtwb2ludCgpOwotI2VuZGlmCiB9CmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21tL01ha2VmaWxlIGIvYXJjaC9ibGFja2Zpbi9tbS9NYWtlZmlsZQppbmRleCAyYTcyMDJjLi5kNDg5Zjg5IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21tL01ha2VmaWxlCisrKyBiL2FyY2gvYmxhY2tmaW4vbW0vTWFrZWZpbGUKQEAgLTIsNCArMiw0IEBACiAjIGFyY2gvYmxhY2tmaW4vbW0vTWFrZWZpbGUKICMKIAotb2JqLXkgOj0gYmxhY2tmaW5fc3JhbS5vIGluaXQubworb2JqLXkgOj0gc3JhbS1hbGxvYy5vIGlzcmFtLWRyaXZlci5vIGluaXQubwpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tbS9ibGFja2Zpbl9zcmFtLmMgYi9hcmNoL2JsYWNrZmluL21tL2JsYWNrZmluX3NyYW0uYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGY1ZTg4Ny4uMDAwMDAwMAotLS0gYS9hcmNoL2JsYWNrZmluL21tL2JsYWNrZmluX3NyYW0uYworKysgL2Rldi9udWxsCkBAIC0xLDgwNiArMCwwIEBACi0vKgotICogRmlsZTogICAgICAgICBhcmNoL2JsYWNrZmluL21tL2JsYWNrZmluX3NyYW0uYwotICogQmFzZWQgb246Ci0gKiBBdXRob3I6Ci0gKgotICogQ3JlYXRlZDoKLSAqIERlc2NyaXB0aW9uOiAgU1JBTSBkcml2ZXIgZm9yIEJsYWNrZmluIEFEU1AtQkY1eHgKLSAqCi0gKiBNb2RpZmllZDoKLSAqICAgICAgICAgICAgICAgQ29weXJpZ2h0IDIwMDQtMjAwNyBBbmFsb2cgRGV2aWNlcyBJbmMuCi0gKgotICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSB0aGUgZmlsZSBDT1BZSU5HLCBvciB3cml0ZQotICogdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8bGludXgvbWlzY2RldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgotI2luY2x1ZGUgPGxpbnV4L2ZjbnRsLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L3BvbGwuaD4KLSNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+Ci0jaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KLSNpbmNsdWRlIDxsaW51eC9ydGMuaD4KLSNpbmNsdWRlIDxhc20vYmxhY2tmaW4uaD4KLSNpbmNsdWRlICJibGFja2Zpbl9zcmFtLmgiCi0KLXN0YXRpYyBzcGlubG9ja190IGwxc3JhbV9sb2NrLCBsMV9kYXRhX3NyYW1fbG9jaywgbDFfaW5zdF9zcmFtX2xvY2s7Ci1zdGF0aWMgc3BpbmxvY2tfdCBsMl9zcmFtX2xvY2s7Ci0KLS8qIHRoZSBkYXRhIHN0cnVjdHVyZSBmb3IgTDEgc2NyYXRjaHBhZCBhbmQgREFUQSBTUkFNICovCi1zdHJ1Y3Qgc3JhbV9waWVjZSB7Ci0Jdm9pZCAqcGFkZHI7Ci0JaW50IHNpemU7Ci0JcGlkX3QgcGlkOwotCXN0cnVjdCBzcmFtX3BpZWNlICpuZXh0OwotfTsKLQotc3RhdGljIHN0cnVjdCBzcmFtX3BpZWNlIGZyZWVfbDFfc3NyYW1faGVhZCwgdXNlZF9sMV9zc3JhbV9oZWFkOwotCi0jaWYgTDFfREFUQV9BX0xFTkdUSCAhPSAwCi1zdGF0aWMgc3RydWN0IHNyYW1fcGllY2UgZnJlZV9sMV9kYXRhX0Ffc3JhbV9oZWFkLCB1c2VkX2wxX2RhdGFfQV9zcmFtX2hlYWQ7Ci0jZW5kaWYKLQotI2lmIEwxX0RBVEFfQl9MRU5HVEggIT0gMAotc3RhdGljIHN0cnVjdCBzcmFtX3BpZWNlIGZyZWVfbDFfZGF0YV9CX3NyYW1faGVhZCwgdXNlZF9sMV9kYXRhX0Jfc3JhbV9oZWFkOwotI2VuZGlmCi0KLSNpZiBMMV9DT0RFX0xFTkdUSCAhPSAwCi1zdGF0aWMgc3RydWN0IHNyYW1fcGllY2UgZnJlZV9sMV9pbnN0X3NyYW1faGVhZCwgdXNlZF9sMV9pbnN0X3NyYW1faGVhZDsKLSNlbmRpZgotCi0jaWYgTDJfTEVOR1RIICE9IDAKLXN0YXRpYyBzdHJ1Y3Qgc3JhbV9waWVjZSBmcmVlX2wyX3NyYW1faGVhZCwgdXNlZF9sMl9zcmFtX2hlYWQ7Ci0jZW5kaWYKLQotc3RhdGljIHN0cnVjdCBrbWVtX2NhY2hlICpzcmFtX3BpZWNlX2NhY2hlOwotCi0vKiBMMSBTY3JhdGNocGFkIFNSQU0gaW5pdGlhbGl6YXRpb24gZnVuY3Rpb24gKi8KLXN0YXRpYyB2b2lkIF9faW5pdCBsMXNyYW1faW5pdCh2b2lkKQotewotCWZyZWVfbDFfc3NyYW1faGVhZC5uZXh0ID0KLQkJa21lbV9jYWNoZV9hbGxvYyhzcmFtX3BpZWNlX2NhY2hlLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWZyZWVfbDFfc3NyYW1faGVhZC5uZXh0KSB7Ci0JCXByaW50ayhLRVJOX0lORk8iRmFpbCB0byBpbml0aWFsaXplIFNjcmF0Y2hwYWQgZGF0YSBTUkFNLlxuIik7Ci0JCXJldHVybjsKLQl9Ci0KLQlmcmVlX2wxX3NzcmFtX2hlYWQubmV4dC0+cGFkZHIgPSAodm9pZCAqKUwxX1NDUkFUQ0hfU1RBUlQ7Ci0JZnJlZV9sMV9zc3JhbV9oZWFkLm5leHQtPnNpemUgPSBMMV9TQ1JBVENIX0xFTkdUSDsKLQlmcmVlX2wxX3NzcmFtX2hlYWQubmV4dC0+cGlkID0gMDsKLQlmcmVlX2wxX3NzcmFtX2hlYWQubmV4dC0+bmV4dCA9IE5VTEw7Ci0KLQl1c2VkX2wxX3NzcmFtX2hlYWQubmV4dCA9IE5VTEw7Ci0KLQkvKiBtdXRleCBpbml0aWFsaXplICovCi0Jc3Bpbl9sb2NrX2luaXQoJmwxc3JhbV9sb2NrKTsKLQotCXByaW50ayhLRVJOX0lORk8gIkJsYWNrZmluIFNjcmF0Y2hwYWQgZGF0YSBTUkFNOiAlZCBLQlxuIiwKLQkgICAgICAgTDFfU0NSQVRDSF9MRU5HVEggPj4gMTApOwotfQotCi1zdGF0aWMgdm9pZCBfX2luaXQgbDFfZGF0YV9zcmFtX2luaXQodm9pZCkKLXsKLSNpZiBMMV9EQVRBX0FfTEVOR1RIICE9IDAKLQlmcmVlX2wxX2RhdGFfQV9zcmFtX2hlYWQubmV4dCA9Ci0JCWttZW1fY2FjaGVfYWxsb2Moc3JhbV9waWVjZV9jYWNoZSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFmcmVlX2wxX2RhdGFfQV9zcmFtX2hlYWQubmV4dCkgewotCQlwcmludGsoS0VSTl9JTkZPIkZhaWwgdG8gaW5pdGlhbGl6ZSBMMSBEYXRhIEEgU1JBTS5cbiIpOwotCQlyZXR1cm47Ci0JfQotCi0JZnJlZV9sMV9kYXRhX0Ffc3JhbV9oZWFkLm5leHQtPnBhZGRyID0KLQkJKHZvaWQgKilMMV9EQVRBX0FfU1RBUlQgKyAoX2Vic3NfbDEgLSBfc2RhdGFfbDEpOwotCWZyZWVfbDFfZGF0YV9BX3NyYW1faGVhZC5uZXh0LT5zaXplID0KLQkJTDFfREFUQV9BX0xFTkdUSCAtIChfZWJzc19sMSAtIF9zZGF0YV9sMSk7Ci0JZnJlZV9sMV9kYXRhX0Ffc3JhbV9oZWFkLm5leHQtPnBpZCA9IDA7Ci0JZnJlZV9sMV9kYXRhX0Ffc3JhbV9oZWFkLm5leHQtPm5leHQgPSBOVUxMOwotCi0JdXNlZF9sMV9kYXRhX0Ffc3JhbV9oZWFkLm5leHQgPSBOVUxMOwotCi0JcHJpbnRrKEtFUk5fSU5GTyAiQmxhY2tmaW4gTDEgRGF0YSBBIFNSQU06ICVkIEtCICglZCBLQiBmcmVlKVxuIiwKLQkJTDFfREFUQV9BX0xFTkdUSCA+PiAxMCwKLQkJZnJlZV9sMV9kYXRhX0Ffc3JhbV9oZWFkLm5leHQtPnNpemUgPj4gMTApOwotI2VuZGlmCi0jaWYgTDFfREFUQV9CX0xFTkdUSCAhPSAwCi0JZnJlZV9sMV9kYXRhX0Jfc3JhbV9oZWFkLm5leHQgPQotCQlrbWVtX2NhY2hlX2FsbG9jKHNyYW1fcGllY2VfY2FjaGUsIEdGUF9LRVJORUwpOwotCWlmICghZnJlZV9sMV9kYXRhX0Jfc3JhbV9oZWFkLm5leHQpIHsKLQkJcHJpbnRrKEtFUk5fSU5GTyJGYWlsIHRvIGluaXRpYWxpemUgTDEgRGF0YSBCIFNSQU0uXG4iKTsKLQkJcmV0dXJuOwotCX0KLQotCWZyZWVfbDFfZGF0YV9CX3NyYW1faGVhZC5uZXh0LT5wYWRkciA9Ci0JCSh2b2lkICopTDFfREFUQV9CX1NUQVJUICsgKF9lYnNzX2JfbDEgLSBfc2RhdGFfYl9sMSk7Ci0JZnJlZV9sMV9kYXRhX0Jfc3JhbV9oZWFkLm5leHQtPnNpemUgPQotCQlMMV9EQVRBX0JfTEVOR1RIIC0gKF9lYnNzX2JfbDEgLSBfc2RhdGFfYl9sMSk7Ci0JZnJlZV9sMV9kYXRhX0Jfc3JhbV9oZWFkLm5leHQtPnBpZCA9IDA7Ci0JZnJlZV9sMV9kYXRhX0Jfc3JhbV9oZWFkLm5leHQtPm5leHQgPSBOVUxMOwotCi0JdXNlZF9sMV9kYXRhX0Jfc3JhbV9oZWFkLm5leHQgPSBOVUxMOwotCi0JcHJpbnRrKEtFUk5fSU5GTyAiQmxhY2tmaW4gTDEgRGF0YSBCIFNSQU06ICVkIEtCICglZCBLQiBmcmVlKVxuIiwKLQkJTDFfREFUQV9CX0xFTkdUSCA+PiAxMCwKLQkJZnJlZV9sMV9kYXRhX0Jfc3JhbV9oZWFkLm5leHQtPnNpemUgPj4gMTApOwotI2VuZGlmCi0KLQkvKiBtdXRleCBpbml0aWFsaXplICovCi0Jc3Bpbl9sb2NrX2luaXQoJmwxX2RhdGFfc3JhbV9sb2NrKTsKLX0KLQotc3RhdGljIHZvaWQgX19pbml0IGwxX2luc3Rfc3JhbV9pbml0KHZvaWQpCi17Ci0jaWYgTDFfQ09ERV9MRU5HVEggIT0gMAotCWZyZWVfbDFfaW5zdF9zcmFtX2hlYWQubmV4dCA9Ci0JCWttZW1fY2FjaGVfYWxsb2Moc3JhbV9waWVjZV9jYWNoZSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFmcmVlX2wxX2luc3Rfc3JhbV9oZWFkLm5leHQpIHsKLQkJcHJpbnRrKEtFUk5fSU5GTyJGYWlsIHRvIGluaXRpYWxpemUgTDEgSW5zdHJ1Y3Rpb24gU1JBTS5cbiIpOwotCQlyZXR1cm47Ci0JfQotCi0JZnJlZV9sMV9pbnN0X3NyYW1faGVhZC5uZXh0LT5wYWRkciA9Ci0JCSh2b2lkICopTDFfQ09ERV9TVEFSVCArIChfZXRleHRfbDEgLSBfc3RleHRfbDEpOwotCWZyZWVfbDFfaW5zdF9zcmFtX2hlYWQubmV4dC0+c2l6ZSA9Ci0JCUwxX0NPREVfTEVOR1RIIC0gKF9ldGV4dF9sMSAtIF9zdGV4dF9sMSk7Ci0JZnJlZV9sMV9pbnN0X3NyYW1faGVhZC5uZXh0LT5waWQgPSAwOwotCWZyZWVfbDFfaW5zdF9zcmFtX2hlYWQubmV4dC0+bmV4dCA9IE5VTEw7Ci0KLQl1c2VkX2wxX2luc3Rfc3JhbV9oZWFkLm5leHQgPSBOVUxMOwotCi0JcHJpbnRrKEtFUk5fSU5GTyAiQmxhY2tmaW4gTDEgSW5zdHJ1Y3Rpb24gU1JBTTogJWQgS0IgKCVkIEtCIGZyZWUpXG4iLAotCQlMMV9DT0RFX0xFTkdUSCA+PiAxMCwKLQkJZnJlZV9sMV9pbnN0X3NyYW1faGVhZC5uZXh0LT5zaXplID4+IDEwKTsKLSNlbmRpZgotCi0JLyogbXV0ZXggaW5pdGlhbGl6ZSAqLwotCXNwaW5fbG9ja19pbml0KCZsMV9pbnN0X3NyYW1fbG9jayk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9faW5pdCBsMl9zcmFtX2luaXQodm9pZCkKLXsKLSNpZiBMMl9MRU5HVEggIT0gMAotCWZyZWVfbDJfc3JhbV9oZWFkLm5leHQgPQotCQlrbWVtX2NhY2hlX2FsbG9jKHNyYW1fcGllY2VfY2FjaGUsIEdGUF9LRVJORUwpOwotCWlmICghZnJlZV9sMl9zcmFtX2hlYWQubmV4dCkgewotCQlwcmludGsoS0VSTl9JTkZPIkZhaWwgdG8gaW5pdGlhbGl6ZSBMMiBTUkFNLlxuIik7Ci0JCXJldHVybjsKLQl9Ci0KLQlmcmVlX2wyX3NyYW1faGVhZC5uZXh0LT5wYWRkciA9ICh2b2lkICopTDJfU1RBUlQgKwotCQkoX2V0ZXh0X2wyIC0gX3N0ZXh0X2wyKSArIChfZWRhdGFfbDIgLSBfc2RhdGFfbDIpOwotCWZyZWVfbDJfc3JhbV9oZWFkLm5leHQtPnNpemUgPSBMMl9MRU5HVEggLQotCQkoX2V0ZXh0X2wyIC0gX3N0ZXh0X2wyKSArIChfZWRhdGFfbDIgLSBfc2RhdGFfbDIpOwotCWZyZWVfbDJfc3JhbV9oZWFkLm5leHQtPnBpZCA9IDA7Ci0JZnJlZV9sMl9zcmFtX2hlYWQubmV4dC0+bmV4dCA9IE5VTEw7Ci0KLQl1c2VkX2wyX3NyYW1faGVhZC5uZXh0ID0gTlVMTDsKLQotCXByaW50ayhLRVJOX0lORk8gIkJsYWNrZmluIEwyIFNSQU06ICVkIEtCICglZCBLQiBmcmVlKVxuIiwKLQkJTDJfTEVOR1RIID4+IDEwLAotCQlmcmVlX2wyX3NyYW1faGVhZC5uZXh0LT5zaXplID4+IDEwKTsKLSNlbmRpZgotCi0JLyogbXV0ZXggaW5pdGlhbGl6ZSAqLwotCXNwaW5fbG9ja19pbml0KCZsMl9zcmFtX2xvY2spOwotfQotdm9pZCBfX2luaXQgYmZpbl9zcmFtX2luaXQodm9pZCkKLXsKLQlzcmFtX3BpZWNlX2NhY2hlID0ga21lbV9jYWNoZV9jcmVhdGUoInNyYW1fcGllY2VfY2FjaGUiLAotCQkJCXNpemVvZihzdHJ1Y3Qgc3JhbV9waWVjZSksCi0JCQkJMCwgU0xBQl9QQU5JQywgTlVMTCk7Ci0KLQlsMXNyYW1faW5pdCgpOwotCWwxX2RhdGFfc3JhbV9pbml0KCk7Ci0JbDFfaW5zdF9zcmFtX2luaXQoKTsKLQlsMl9zcmFtX2luaXQoKTsKLX0KLQotLyogU1JBTSBhbGxvY2F0ZSBmdW5jdGlvbiAqLwotc3RhdGljIHZvaWQgKl9zcmFtX2FsbG9jKHNpemVfdCBzaXplLCBzdHJ1Y3Qgc3JhbV9waWVjZSAqcGZyZWVfaGVhZCwKLQkJc3RydWN0IHNyYW1fcGllY2UgKnB1c2VkX2hlYWQpCi17Ci0Jc3RydWN0IHNyYW1fcGllY2UgKnBzbG90LCAqcGxhc3QsICpwYXZhaWw7Ci0KLQlpZiAoc2l6ZSA8PSAwIHx8ICFwZnJlZV9oZWFkIHx8ICFwdXNlZF9oZWFkKQotCQlyZXR1cm4gTlVMTDsKLQotCS8qIEFsaWduIHRoZSBzaXplICovCi0Jc2l6ZSA9IChzaXplICsgMykgJiB+MzsKLQotCXBzbG90ID0gcGZyZWVfaGVhZC0+bmV4dDsKLQlwbGFzdCA9IHBmcmVlX2hlYWQ7Ci0KLQkvKiBzZWFyY2ggYW4gYXZhaWxhYmxlIHBpZWNlIHNsb3QgKi8KLQl3aGlsZSAocHNsb3QgIT0gTlVMTCAmJiBzaXplID4gcHNsb3QtPnNpemUpIHsKLQkJcGxhc3QgPSBwc2xvdDsKLQkJcHNsb3QgPSBwc2xvdC0+bmV4dDsKLQl9Ci0KLQlpZiAoIXBzbG90KQotCQlyZXR1cm4gTlVMTDsKLQotCWlmIChwc2xvdC0+c2l6ZSA9PSBzaXplKSB7Ci0JCXBsYXN0LT5uZXh0ID0gcHNsb3QtPm5leHQ7Ci0JCXBhdmFpbCA9IHBzbG90OwotCX0gZWxzZSB7Ci0JCXBhdmFpbCA9IGttZW1fY2FjaGVfYWxsb2Moc3JhbV9waWVjZV9jYWNoZSwgR0ZQX0tFUk5FTCk7Ci0KLQkJaWYgKCFwYXZhaWwpCi0JCQlyZXR1cm4gTlVMTDsKLQotCQlwYXZhaWwtPnBhZGRyID0gcHNsb3QtPnBhZGRyOwotCQlwYXZhaWwtPnNpemUgPSBzaXplOwotCQlwc2xvdC0+cGFkZHIgKz0gc2l6ZTsKLQkJcHNsb3QtPnNpemUgLT0gc2l6ZTsKLQl9Ci0KLQlwYXZhaWwtPnBpZCA9IGN1cnJlbnQtPnBpZDsKLQotCXBzbG90ID0gcHVzZWRfaGVhZC0+bmV4dDsKLQlwbGFzdCA9IHB1c2VkX2hlYWQ7Ci0KLQkvKiBpbnNlcnQgbmV3IHBpZWNlIGludG8gdXNlZCBwaWVjZSBsaXN0ICEhISAqLwotCXdoaWxlIChwc2xvdCAhPSBOVUxMICYmIHBhdmFpbC0+cGFkZHIgPCBwc2xvdC0+cGFkZHIpIHsKLQkJcGxhc3QgPSBwc2xvdDsKLQkJcHNsb3QgPSBwc2xvdC0+bmV4dDsKLQl9Ci0KLQlwYXZhaWwtPm5leHQgPSBwc2xvdDsKLQlwbGFzdC0+bmV4dCA9IHBhdmFpbDsKLQotCXJldHVybiBwYXZhaWwtPnBhZGRyOwotfQotCi0vKiBBbGxvY2F0ZSB0aGUgbGFyZ2VzdCBhdmFpbGFibGUgYmxvY2suICAqLwotc3RhdGljIHZvaWQgKl9zcmFtX2FsbG9jX21heChzdHJ1Y3Qgc3JhbV9waWVjZSAqcGZyZWVfaGVhZCwKLQkJCQlzdHJ1Y3Qgc3JhbV9waWVjZSAqcHVzZWRfaGVhZCwKLQkJCQl1bnNpZ25lZCBsb25nICpwc2l6ZSkKLXsKLQlzdHJ1Y3Qgc3JhbV9waWVjZSAqcHNsb3QsICpwbWF4OwotCi0JaWYgKCFwZnJlZV9oZWFkIHx8ICFwdXNlZF9oZWFkKQotCQlyZXR1cm4gTlVMTDsKLQotCXBtYXggPSBwc2xvdCA9IHBmcmVlX2hlYWQtPm5leHQ7Ci0KLQkvKiBzZWFyY2ggYW4gYXZhaWxhYmxlIHBpZWNlIHNsb3QgKi8KLQl3aGlsZSAocHNsb3QgIT0gTlVMTCkgewotCQlpZiAocHNsb3QtPnNpemUgPiBwbWF4LT5zaXplKQotCQkJcG1heCA9IHBzbG90OwotCQlwc2xvdCA9IHBzbG90LT5uZXh0OwotCX0KLQotCWlmICghcG1heCkKLQkJcmV0dXJuIE5VTEw7Ci0KLQkqcHNpemUgPSBwbWF4LT5zaXplOwotCi0JcmV0dXJuIF9zcmFtX2FsbG9jKCpwc2l6ZSwgcGZyZWVfaGVhZCwgcHVzZWRfaGVhZCk7Ci19Ci0KLS8qIFNSQU0gZnJlZSBmdW5jdGlvbiAqLwotc3RhdGljIGludCBfc3JhbV9mcmVlKGNvbnN0IHZvaWQgKmFkZHIsCi0JCQlzdHJ1Y3Qgc3JhbV9waWVjZSAqcGZyZWVfaGVhZCwKLQkJCXN0cnVjdCBzcmFtX3BpZWNlICpwdXNlZF9oZWFkKQotewotCXN0cnVjdCBzcmFtX3BpZWNlICpwc2xvdCwgKnBsYXN0LCAqcGF2YWlsOwotCi0JaWYgKCFwZnJlZV9oZWFkIHx8ICFwdXNlZF9oZWFkKQotCQlyZXR1cm4gLTE7Ci0KLQkvKiBzZWFyY2ggdGhlIHJlbGV2YW50IG1lbW9yeSBzbG90ICovCi0JcHNsb3QgPSBwdXNlZF9oZWFkLT5uZXh0OwotCXBsYXN0ID0gcHVzZWRfaGVhZDsKLQotCS8qIHNlYXJjaCBhbiBhdmFpbGFibGUgcGllY2Ugc2xvdCAqLwotCXdoaWxlIChwc2xvdCAhPSBOVUxMICYmIHBzbG90LT5wYWRkciAhPSBhZGRyKSB7Ci0JCXBsYXN0ID0gcHNsb3Q7Ci0JCXBzbG90ID0gcHNsb3QtPm5leHQ7Ci0JfQotCi0JaWYgKCFwc2xvdCkKLQkJcmV0dXJuIC0xOwotCi0JcGxhc3QtPm5leHQgPSBwc2xvdC0+bmV4dDsKLQlwYXZhaWwgPSBwc2xvdDsKLQlwYXZhaWwtPnBpZCA9IDA7Ci0KLQkvKiBpbnNlcnQgZnJlZSBwaWVjZXMgYmFjayB0byB0aGUgZnJlZSBsaXN0ICovCi0JcHNsb3QgPSBwZnJlZV9oZWFkLT5uZXh0OwotCXBsYXN0ID0gcGZyZWVfaGVhZDsKLQotCXdoaWxlIChwc2xvdCAhPSBOVUxMICYmIGFkZHIgPiBwc2xvdC0+cGFkZHIpIHsKLQkJcGxhc3QgPSBwc2xvdDsKLQkJcHNsb3QgPSBwc2xvdC0+bmV4dDsKLQl9Ci0KLQlpZiAocGxhc3QgIT0gcGZyZWVfaGVhZCAmJiBwbGFzdC0+cGFkZHIgKyBwbGFzdC0+c2l6ZSA9PSBwYXZhaWwtPnBhZGRyKSB7Ci0JCXBsYXN0LT5zaXplICs9IHBhdmFpbC0+c2l6ZTsKLQkJa21lbV9jYWNoZV9mcmVlKHNyYW1fcGllY2VfY2FjaGUsIHBhdmFpbCk7Ci0JfSBlbHNlIHsKLQkJcGF2YWlsLT5uZXh0ID0gcGxhc3QtPm5leHQ7Ci0JCXBsYXN0LT5uZXh0ID0gcGF2YWlsOwotCQlwbGFzdCA9IHBhdmFpbDsKLQl9Ci0KLQlpZiAocHNsb3QgJiYgcGxhc3QtPnBhZGRyICsgcGxhc3QtPnNpemUgPT0gcHNsb3QtPnBhZGRyKSB7Ci0JCXBsYXN0LT5zaXplICs9IHBzbG90LT5zaXplOwotCQlwbGFzdC0+bmV4dCA9IHBzbG90LT5uZXh0OwotCQlrbWVtX2NhY2hlX2ZyZWUoc3JhbV9waWVjZV9jYWNoZSwgcHNsb3QpOwotCX0KLQotCXJldHVybiAwOwotfQotCi1pbnQgc3JhbV9mcmVlKGNvbnN0IHZvaWQgKmFkZHIpCi17Ci0JaWYgKDApIHt9Ci0jaWYgTDFfQ09ERV9MRU5HVEggIT0gMAotCWVsc2UgaWYgKGFkZHIgPj0gKHZvaWQgKilMMV9DT0RFX1NUQVJUCi0JCSAmJiBhZGRyIDwgKHZvaWQgKikoTDFfQ09ERV9TVEFSVCArIEwxX0NPREVfTEVOR1RIKSkKLQkJcmV0dXJuIGwxX2luc3Rfc3JhbV9mcmVlKGFkZHIpOwotI2VuZGlmCi0jaWYgTDFfREFUQV9BX0xFTkdUSCAhPSAwCi0JZWxzZSBpZiAoYWRkciA+PSAodm9pZCAqKUwxX0RBVEFfQV9TVEFSVAotCQkgJiYgYWRkciA8ICh2b2lkICopKEwxX0RBVEFfQV9TVEFSVCArIEwxX0RBVEFfQV9MRU5HVEgpKQotCQlyZXR1cm4gbDFfZGF0YV9BX3NyYW1fZnJlZShhZGRyKTsKLSNlbmRpZgotI2lmIEwxX0RBVEFfQl9MRU5HVEggIT0gMAotCWVsc2UgaWYgKGFkZHIgPj0gKHZvaWQgKilMMV9EQVRBX0JfU1RBUlQKLQkJICYmIGFkZHIgPCAodm9pZCAqKShMMV9EQVRBX0JfU1RBUlQgKyBMMV9EQVRBX0JfTEVOR1RIKSkKLQkJcmV0dXJuIGwxX2RhdGFfQl9zcmFtX2ZyZWUoYWRkcik7Ci0jZW5kaWYKLSNpZiBMMl9MRU5HVEggIT0gMAotCWVsc2UgaWYgKGFkZHIgPj0gKHZvaWQgKilMMl9TVEFSVAotCQkgJiYgYWRkciA8ICh2b2lkICopKEwyX1NUQVJUICsgTDJfTEVOR1RIKSkKLQkJcmV0dXJuIGwyX3NyYW1fZnJlZShhZGRyKTsKLSNlbmRpZgotCWVsc2UKLQkJcmV0dXJuIC0xOwotfQotRVhQT1JUX1NZTUJPTChzcmFtX2ZyZWUpOwotCi12b2lkICpsMV9kYXRhX0Ffc3JhbV9hbGxvYyhzaXplX3Qgc2l6ZSkKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXZvaWQgKmFkZHIgPSBOVUxMOwotCi0JLyogYWRkIG11dGV4IG9wZXJhdGlvbiAqLwotCXNwaW5fbG9ja19pcnFzYXZlKCZsMV9kYXRhX3NyYW1fbG9jaywgZmxhZ3MpOwotCi0jaWYgTDFfREFUQV9BX0xFTkdUSCAhPSAwCi0JYWRkciA9IF9zcmFtX2FsbG9jKHNpemUsICZmcmVlX2wxX2RhdGFfQV9zcmFtX2hlYWQsCi0JCQkmdXNlZF9sMV9kYXRhX0Ffc3JhbV9oZWFkKTsKLSNlbmRpZgotCi0JLyogYWRkIG11dGV4IG9wZXJhdGlvbiAqLwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmwxX2RhdGFfc3JhbV9sb2NrLCBmbGFncyk7Ci0KLQlwcl9kZWJ1ZygiQWxsb2NhdGVkIGFkZHJlc3MgaW4gbDFfZGF0YV9BX3NyYW1fYWxsb2MgaXMgMHglbHgrMHglbHhcbiIsCi0JCSAobG9uZyB1bnNpZ25lZCBpbnQpYWRkciwgc2l6ZSk7Ci0KLQlyZXR1cm4gYWRkcjsKLX0KLUVYUE9SVF9TWU1CT0wobDFfZGF0YV9BX3NyYW1fYWxsb2MpOwotCi1pbnQgbDFfZGF0YV9BX3NyYW1fZnJlZShjb25zdCB2b2lkICphZGRyKQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IHJldDsKLQotCS8qIGFkZCBtdXRleCBvcGVyYXRpb24gKi8KLQlzcGluX2xvY2tfaXJxc2F2ZSgmbDFfZGF0YV9zcmFtX2xvY2ssIGZsYWdzKTsKLQotI2lmIEwxX0RBVEFfQV9MRU5HVEggIT0gMAotCXJldCA9IF9zcmFtX2ZyZWUoYWRkciwgJmZyZWVfbDFfZGF0YV9BX3NyYW1faGVhZCwKLQkJCSZ1c2VkX2wxX2RhdGFfQV9zcmFtX2hlYWQpOwotI2Vsc2UKLQlyZXQgPSAtMTsKLSNlbmRpZgotCi0JLyogYWRkIG11dGV4IG9wZXJhdGlvbiAqLwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmwxX2RhdGFfc3JhbV9sb2NrLCBmbGFncyk7Ci0KLQlyZXR1cm4gcmV0OwotfQotRVhQT1JUX1NZTUJPTChsMV9kYXRhX0Ffc3JhbV9mcmVlKTsKLQotdm9pZCAqbDFfZGF0YV9CX3NyYW1fYWxsb2Moc2l6ZV90IHNpemUpCi17Ci0jaWYgTDFfREFUQV9CX0xFTkdUSCAhPSAwCi0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQl2b2lkICphZGRyOwotCi0JLyogYWRkIG11dGV4IG9wZXJhdGlvbiAqLwotCXNwaW5fbG9ja19pcnFzYXZlKCZsMV9kYXRhX3NyYW1fbG9jaywgZmxhZ3MpOwotCi0JYWRkciA9IF9zcmFtX2FsbG9jKHNpemUsICZmcmVlX2wxX2RhdGFfQl9zcmFtX2hlYWQsCi0JCQkmdXNlZF9sMV9kYXRhX0Jfc3JhbV9oZWFkKTsKLQotCS8qIGFkZCBtdXRleCBvcGVyYXRpb24gKi8KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZsMV9kYXRhX3NyYW1fbG9jaywgZmxhZ3MpOwotCi0JcHJfZGVidWcoIkFsbG9jYXRlZCBhZGRyZXNzIGluIGwxX2RhdGFfQl9zcmFtX2FsbG9jIGlzIDB4JWx4KzB4JWx4XG4iLAotCQkgKGxvbmcgdW5zaWduZWQgaW50KWFkZHIsIHNpemUpOwotCi0JcmV0dXJuIGFkZHI7Ci0jZWxzZQotCXJldHVybiBOVUxMOwotI2VuZGlmCi19Ci1FWFBPUlRfU1lNQk9MKGwxX2RhdGFfQl9zcmFtX2FsbG9jKTsKLQotaW50IGwxX2RhdGFfQl9zcmFtX2ZyZWUoY29uc3Qgdm9pZCAqYWRkcikKLXsKLSNpZiBMMV9EQVRBX0JfTEVOR1RIICE9IDAKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWludCByZXQ7Ci0KLQkvKiBhZGQgbXV0ZXggb3BlcmF0aW9uICovCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmwxX2RhdGFfc3JhbV9sb2NrLCBmbGFncyk7Ci0KLQlyZXQgPSBfc3JhbV9mcmVlKGFkZHIsICZmcmVlX2wxX2RhdGFfQl9zcmFtX2hlYWQsCi0JCQkmdXNlZF9sMV9kYXRhX0Jfc3JhbV9oZWFkKTsKLQotCS8qIGFkZCBtdXRleCBvcGVyYXRpb24gKi8KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZsMV9kYXRhX3NyYW1fbG9jaywgZmxhZ3MpOwotCi0JcmV0dXJuIHJldDsKLSNlbHNlCi0JcmV0dXJuIC0xOwotI2VuZGlmCi19Ci1FWFBPUlRfU1lNQk9MKGwxX2RhdGFfQl9zcmFtX2ZyZWUpOwotCi12b2lkICpsMV9kYXRhX3NyYW1fYWxsb2Moc2l6ZV90IHNpemUpCi17Ci0Jdm9pZCAqYWRkciA9IGwxX2RhdGFfQV9zcmFtX2FsbG9jKHNpemUpOwotCi0JaWYgKCFhZGRyKQotCQlhZGRyID0gbDFfZGF0YV9CX3NyYW1fYWxsb2Moc2l6ZSk7Ci0KLQlyZXR1cm4gYWRkcjsKLX0KLUVYUE9SVF9TWU1CT0wobDFfZGF0YV9zcmFtX2FsbG9jKTsKLQotdm9pZCAqbDFfZGF0YV9zcmFtX3phbGxvYyhzaXplX3Qgc2l6ZSkKLXsKLQl2b2lkICphZGRyID0gbDFfZGF0YV9zcmFtX2FsbG9jKHNpemUpOwotCi0JaWYgKGFkZHIpCi0JCW1lbXNldChhZGRyLCAweDAwLCBzaXplKTsKLQotCXJldHVybiBhZGRyOwotfQotRVhQT1JUX1NZTUJPTChsMV9kYXRhX3NyYW1femFsbG9jKTsKLQotaW50IGwxX2RhdGFfc3JhbV9mcmVlKGNvbnN0IHZvaWQgKmFkZHIpCi17Ci0JaW50IHJldDsKLQlyZXQgPSBsMV9kYXRhX0Ffc3JhbV9mcmVlKGFkZHIpOwotCWlmIChyZXQgPT0gLTEpCi0JCXJldCA9IGwxX2RhdGFfQl9zcmFtX2ZyZWUoYWRkcik7Ci0JcmV0dXJuIHJldDsKLX0KLUVYUE9SVF9TWU1CT0wobDFfZGF0YV9zcmFtX2ZyZWUpOwotCi12b2lkICpsMV9pbnN0X3NyYW1fYWxsb2Moc2l6ZV90IHNpemUpCi17Ci0jaWYgTDFfQ09ERV9MRU5HVEggIT0gMAotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0Jdm9pZCAqYWRkcjsKLQotCS8qIGFkZCBtdXRleCBvcGVyYXRpb24gKi8KLQlzcGluX2xvY2tfaXJxc2F2ZSgmbDFfaW5zdF9zcmFtX2xvY2ssIGZsYWdzKTsKLQotCWFkZHIgPSBfc3JhbV9hbGxvYyhzaXplLCAmZnJlZV9sMV9pbnN0X3NyYW1faGVhZCwKLQkJCSZ1c2VkX2wxX2luc3Rfc3JhbV9oZWFkKTsKLQotCS8qIGFkZCBtdXRleCBvcGVyYXRpb24gKi8KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZsMV9pbnN0X3NyYW1fbG9jaywgZmxhZ3MpOwotCi0JcHJfZGVidWcoIkFsbG9jYXRlZCBhZGRyZXNzIGluIGwxX2luc3Rfc3JhbV9hbGxvYyBpcyAweCVseCsweCVseFxuIiwKLQkJIChsb25nIHVuc2lnbmVkIGludClhZGRyLCBzaXplKTsKLQotCXJldHVybiBhZGRyOwotI2Vsc2UKLQlyZXR1cm4gTlVMTDsKLSNlbmRpZgotfQotRVhQT1JUX1NZTUJPTChsMV9pbnN0X3NyYW1fYWxsb2MpOwotCi1pbnQgbDFfaW5zdF9zcmFtX2ZyZWUoY29uc3Qgdm9pZCAqYWRkcikKLXsKLSNpZiBMMV9DT0RFX0xFTkdUSCAhPSAwCi0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlpbnQgcmV0OwotCi0JLyogYWRkIG11dGV4IG9wZXJhdGlvbiAqLwotCXNwaW5fbG9ja19pcnFzYXZlKCZsMV9pbnN0X3NyYW1fbG9jaywgZmxhZ3MpOwotCi0JcmV0ID0gX3NyYW1fZnJlZShhZGRyLCAmZnJlZV9sMV9pbnN0X3NyYW1faGVhZCwKLQkJCSZ1c2VkX2wxX2luc3Rfc3JhbV9oZWFkKTsKLQotCS8qIGFkZCBtdXRleCBvcGVyYXRpb24gKi8KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZsMV9pbnN0X3NyYW1fbG9jaywgZmxhZ3MpOwotCi0JcmV0dXJuIHJldDsKLSNlbHNlCi0JcmV0dXJuIC0xOwotI2VuZGlmCi19Ci1FWFBPUlRfU1lNQk9MKGwxX2luc3Rfc3JhbV9mcmVlKTsKLQotLyogTDEgU2NyYXRjaHBhZCBtZW1vcnkgYWxsb2NhdGUgZnVuY3Rpb24gKi8KLXZvaWQgKmwxc3JhbV9hbGxvYyhzaXplX3Qgc2l6ZSkKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXZvaWQgKmFkZHI7Ci0KLQkvKiBhZGQgbXV0ZXggb3BlcmF0aW9uICovCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmwxc3JhbV9sb2NrLCBmbGFncyk7Ci0KLQlhZGRyID0gX3NyYW1fYWxsb2Moc2l6ZSwgJmZyZWVfbDFfc3NyYW1faGVhZCwKLQkJCSZ1c2VkX2wxX3NzcmFtX2hlYWQpOwotCi0JLyogYWRkIG11dGV4IG9wZXJhdGlvbiAqLwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmwxc3JhbV9sb2NrLCBmbGFncyk7Ci0KLQlyZXR1cm4gYWRkcjsKLX0KLQotLyogTDEgU2NyYXRjaHBhZCBtZW1vcnkgYWxsb2NhdGUgZnVuY3Rpb24gKi8KLXZvaWQgKmwxc3JhbV9hbGxvY19tYXgoc2l6ZV90ICpwc2l6ZSkKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXZvaWQgKmFkZHI7Ci0KLQkvKiBhZGQgbXV0ZXggb3BlcmF0aW9uICovCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmwxc3JhbV9sb2NrLCBmbGFncyk7Ci0KLQlhZGRyID0gX3NyYW1fYWxsb2NfbWF4KCZmcmVlX2wxX3NzcmFtX2hlYWQsCi0JCQkmdXNlZF9sMV9zc3JhbV9oZWFkLCBwc2l6ZSk7Ci0KLQkvKiBhZGQgbXV0ZXggb3BlcmF0aW9uICovCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbDFzcmFtX2xvY2ssIGZsYWdzKTsKLQotCXJldHVybiBhZGRyOwotfQotCi0vKiBMMSBTY3JhdGNocGFkIG1lbW9yeSBmcmVlIGZ1bmN0aW9uICovCi1pbnQgbDFzcmFtX2ZyZWUoY29uc3Qgdm9pZCAqYWRkcikKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWludCByZXQ7Ci0KLQkvKiBhZGQgbXV0ZXggb3BlcmF0aW9uICovCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmwxc3JhbV9sb2NrLCBmbGFncyk7Ci0KLQlyZXQgPSBfc3JhbV9mcmVlKGFkZHIsICZmcmVlX2wxX3NzcmFtX2hlYWQsCi0JCQkmdXNlZF9sMV9zc3JhbV9oZWFkKTsKLQotCS8qIGFkZCBtdXRleCBvcGVyYXRpb24gKi8KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZsMXNyYW1fbG9jaywgZmxhZ3MpOwotCi0JcmV0dXJuIHJldDsKLX0KLQotdm9pZCAqbDJfc3JhbV9hbGxvYyhzaXplX3Qgc2l6ZSkKLXsKLSNpZiBMMl9MRU5HVEggIT0gMAotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0Jdm9pZCAqYWRkcjsKLQotCS8qIGFkZCBtdXRleCBvcGVyYXRpb24gKi8KLQlzcGluX2xvY2tfaXJxc2F2ZSgmbDJfc3JhbV9sb2NrLCBmbGFncyk7Ci0KLQlhZGRyID0gX3NyYW1fYWxsb2Moc2l6ZSwgJmZyZWVfbDJfc3JhbV9oZWFkLAotCQkJJnVzZWRfbDJfc3JhbV9oZWFkKTsKLQotCS8qIGFkZCBtdXRleCBvcGVyYXRpb24gKi8KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZsMl9zcmFtX2xvY2ssIGZsYWdzKTsKLQotCXByX2RlYnVnKCJBbGxvY2F0ZWQgYWRkcmVzcyBpbiBsMl9zcmFtX2FsbG9jIGlzIDB4JWx4KzB4JWx4XG4iLAotCQkgKGxvbmcgdW5zaWduZWQgaW50KWFkZHIsIHNpemUpOwotCi0JcmV0dXJuIGFkZHI7Ci0jZWxzZQotCXJldHVybiBOVUxMOwotI2VuZGlmCi19Ci1FWFBPUlRfU1lNQk9MKGwyX3NyYW1fYWxsb2MpOwotCi12b2lkICpsMl9zcmFtX3phbGxvYyhzaXplX3Qgc2l6ZSkKLXsKLQl2b2lkICphZGRyID0gbDJfc3JhbV9hbGxvYyhzaXplKTsKLQotCWlmIChhZGRyKQotCQltZW1zZXQoYWRkciwgMHgwMCwgc2l6ZSk7Ci0KLQlyZXR1cm4gYWRkcjsKLX0KLUVYUE9SVF9TWU1CT0wobDJfc3JhbV96YWxsb2MpOwotCi1pbnQgbDJfc3JhbV9mcmVlKGNvbnN0IHZvaWQgKmFkZHIpCi17Ci0jaWYgTDJfTEVOR1RIICE9IDAKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWludCByZXQ7Ci0KLQkvKiBhZGQgbXV0ZXggb3BlcmF0aW9uICovCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmwyX3NyYW1fbG9jaywgZmxhZ3MpOwotCi0JcmV0ID0gX3NyYW1fZnJlZShhZGRyLCAmZnJlZV9sMl9zcmFtX2hlYWQsCi0JCQkmdXNlZF9sMl9zcmFtX2hlYWQpOwotCi0JLyogYWRkIG11dGV4IG9wZXJhdGlvbiAqLwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmwyX3NyYW1fbG9jaywgZmxhZ3MpOwotCi0JcmV0dXJuIHJldDsKLSNlbHNlCi0JcmV0dXJuIC0xOwotI2VuZGlmCi19Ci1FWFBPUlRfU1lNQk9MKGwyX3NyYW1fZnJlZSk7Ci0KLWludCBzcmFtX2ZyZWVfd2l0aF9sc2woY29uc3Qgdm9pZCAqYWRkcikKLXsKLQlzdHJ1Y3Qgc3JhbV9saXN0X3N0cnVjdCAqbHNsLCAqKnRtcDsKLQlzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IGN1cnJlbnQtPm1tOwotCi0JZm9yICh0bXAgPSAmbW0tPmNvbnRleHQuc3JhbV9saXN0OyAqdG1wOyB0bXAgPSAmKCp0bXApLT5uZXh0KQotCQlpZiAoKCp0bXApLT5hZGRyID09IGFkZHIpCi0JCQlnb3RvIGZvdW5kOwotCXJldHVybiAtMTsKLWZvdW5kOgotCWxzbCA9ICp0bXA7Ci0Jc3JhbV9mcmVlKGFkZHIpOwotCSp0bXAgPSBsc2wtPm5leHQ7Ci0Ja2ZyZWUobHNsKTsKLQotCXJldHVybiAwOwotfQotRVhQT1JUX1NZTUJPTChzcmFtX2ZyZWVfd2l0aF9sc2wpOwotCi12b2lkICpzcmFtX2FsbG9jX3dpdGhfbHNsKHNpemVfdCBzaXplLCB1bnNpZ25lZCBsb25nIGZsYWdzKQotewotCXZvaWQgKmFkZHIgPSBOVUxMOwotCXN0cnVjdCBzcmFtX2xpc3Rfc3RydWN0ICpsc2wgPSBOVUxMOwotCXN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gY3VycmVudC0+bW07Ci0KLQlsc2wgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgc3JhbV9saXN0X3N0cnVjdCksIEdGUF9LRVJORUwpOwotCWlmICghbHNsKQotCQlyZXR1cm4gTlVMTDsKLQotCWlmIChmbGFncyAmIEwxX0lOU1RfU1JBTSkKLQkJYWRkciA9IGwxX2luc3Rfc3JhbV9hbGxvYyhzaXplKTsKLQotCWlmIChhZGRyID09IE5VTEwgJiYgKGZsYWdzICYgTDFfREFUQV9BX1NSQU0pKQotCQlhZGRyID0gbDFfZGF0YV9BX3NyYW1fYWxsb2Moc2l6ZSk7Ci0KLQlpZiAoYWRkciA9PSBOVUxMICYmIChmbGFncyAmIEwxX0RBVEFfQl9TUkFNKSkKLQkJYWRkciA9IGwxX2RhdGFfQl9zcmFtX2FsbG9jKHNpemUpOwotCi0JaWYgKGFkZHIgPT0gTlVMTCAmJiAoZmxhZ3MgJiBMMl9TUkFNKSkKLQkJYWRkciA9IGwyX3NyYW1fYWxsb2Moc2l6ZSk7Ci0KLQlpZiAoYWRkciA9PSBOVUxMKSB7Ci0JCWtmcmVlKGxzbCk7Ci0JCXJldHVybiBOVUxMOwotCX0KLQlsc2wtPmFkZHIgPSBhZGRyOwotCWxzbC0+bGVuZ3RoID0gc2l6ZTsKLQlsc2wtPm5leHQgPSBtbS0+Y29udGV4dC5zcmFtX2xpc3Q7Ci0JbW0tPmNvbnRleHQuc3JhbV9saXN0ID0gbHNsOwotCXJldHVybiBhZGRyOwotfQotRVhQT1JUX1NZTUJPTChzcmFtX2FsbG9jX3dpdGhfbHNsKTsKLQotI2lmZGVmIENPTkZJR19QUk9DX0ZTCi0vKiBPbmNlIHdlIGdldCBhIHJlYWwgYWxsb2NhdG9yLCB3ZSdsbCB0aHJvdyBhbGwgb2YgdGhpcyBhd2F5LgotICogVW50aWwgdGhlbiwgd2UgbmVlZCBzb21lIHNvcnQgb2YgdmlzaWJpbGl0eSBpbnRvIHRoZSBMMSBhbGxvYy4KLSAqLwotLyogTmVlZCB0byBrZWVwIGxpbmUgb2Ygb3V0cHV0IHRoZSBzYW1lLiAgQ3VycmVudGx5LCB0aGF0IGlzIDQ0IGJ5dGVzCi0gKiAoaW5jbHVkaW5nIG5ld2xpbmUpLgotICovCi1zdGF0aWMgaW50IF9zcmFtX3Byb2NfcmVhZChjaGFyICpidWYsIGludCAqbGVuLCBpbnQgY291bnQsIGNvbnN0IGNoYXIgKmRlc2MsCi0JCXN0cnVjdCBzcmFtX3BpZWNlICpwZnJlZV9oZWFkLAotCQlzdHJ1Y3Qgc3JhbV9waWVjZSAqcHVzZWRfaGVhZCkKLXsKLQlzdHJ1Y3Qgc3JhbV9waWVjZSAqcHNsb3Q7Ci0KLQlpZiAoIXBmcmVlX2hlYWQgfHwgIXB1c2VkX2hlYWQpCi0JCXJldHVybiAtMTsKLQotCSpsZW4gKz0gc3ByaW50ZigmYnVmWypsZW5dLCAiLS0tIFNSQU0gJS0xNHMgU2l6ZSAgIFBJRCBTdGF0ZSAgICAgXG4iLCBkZXNjKTsKLQotCS8qIHNlYXJjaCB0aGUgcmVsZXZhbnQgbWVtb3J5IHNsb3QgKi8KLQlwc2xvdCA9IHB1c2VkX2hlYWQtPm5leHQ7Ci0KLQl3aGlsZSAocHNsb3QgIT0gTlVMTCkgewotCQkqbGVuICs9IHNwcmludGYoJmJ1ZlsqbGVuXSwgIiVwLSVwICUxMGkgJTVpICUtMTBzXG4iLAotCQkJcHNsb3QtPnBhZGRyLCBwc2xvdC0+cGFkZHIgKyBwc2xvdC0+c2l6ZSwKLQkJCXBzbG90LT5zaXplLCBwc2xvdC0+cGlkLCAiQUxMT0NBVEVEIik7Ci0KLQkJcHNsb3QgPSBwc2xvdC0+bmV4dDsKLQl9Ci0KLQlwc2xvdCA9IHBmcmVlX2hlYWQtPm5leHQ7Ci0KLQl3aGlsZSAocHNsb3QgIT0gTlVMTCkgewotCQkqbGVuICs9IHNwcmludGYoJmJ1ZlsqbGVuXSwgIiVwLSVwICUxMGkgJTVpICUtMTBzXG4iLAotCQkJcHNsb3QtPnBhZGRyLCBwc2xvdC0+cGFkZHIgKyBwc2xvdC0+c2l6ZSwKLQkJCXBzbG90LT5zaXplLCBwc2xvdC0+cGlkLCAiRlJFRSIpOwotCi0JCXBzbG90ID0gcHNsb3QtPm5leHQ7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci1zdGF0aWMgaW50IHNyYW1fcHJvY19yZWFkKGNoYXIgKmJ1ZiwgY2hhciAqKnN0YXJ0LCBvZmZfdCBvZmZzZXQsIGludCBjb3VudCwKLQkJaW50ICplb2YsIHZvaWQgKmRhdGEpCi17Ci0JaW50IGxlbiA9IDA7Ci0KLQlpZiAoX3NyYW1fcHJvY19yZWFkKGJ1ZiwgJmxlbiwgY291bnQsICJTY3JhdGNocGFkIiwKLQkJCSZmcmVlX2wxX3NzcmFtX2hlYWQsICZ1c2VkX2wxX3NzcmFtX2hlYWQpKQotCQlnb3RvIG5vdF9kb25lOwotI2lmIEwxX0RBVEFfQV9MRU5HVEggIT0gMAotCWlmIChfc3JhbV9wcm9jX3JlYWQoYnVmLCAmbGVuLCBjb3VudCwgIkwxIERhdGEgQSIsCi0JCQkmZnJlZV9sMV9kYXRhX0Ffc3JhbV9oZWFkLAotCQkJJnVzZWRfbDFfZGF0YV9BX3NyYW1faGVhZCkpCi0JCWdvdG8gbm90X2RvbmU7Ci0jZW5kaWYKLSNpZiBMMV9EQVRBX0JfTEVOR1RIICE9IDAKLQlpZiAoX3NyYW1fcHJvY19yZWFkKGJ1ZiwgJmxlbiwgY291bnQsICJMMSBEYXRhIEIiLAotCQkJJmZyZWVfbDFfZGF0YV9CX3NyYW1faGVhZCwKLQkJCSZ1c2VkX2wxX2RhdGFfQl9zcmFtX2hlYWQpKQotCQlnb3RvIG5vdF9kb25lOwotI2VuZGlmCi0jaWYgTDFfQ09ERV9MRU5HVEggIT0gMAotCWlmIChfc3JhbV9wcm9jX3JlYWQoYnVmLCAmbGVuLCBjb3VudCwgIkwxIEluc3RydWN0aW9uIiwKLQkJCSZmcmVlX2wxX2luc3Rfc3JhbV9oZWFkLCAmdXNlZF9sMV9pbnN0X3NyYW1faGVhZCkpCi0JCWdvdG8gbm90X2RvbmU7Ci0jZW5kaWYKLSNpZiBMMl9MRU5HVEggIT0gMAotCWlmIChfc3JhbV9wcm9jX3JlYWQoYnVmLCAmbGVuLCBjb3VudCwgIkwyIiwKLQkJCSZmcmVlX2wyX3NyYW1faGVhZCwgJnVzZWRfbDJfc3JhbV9oZWFkKSkKLQkJZ290byBub3RfZG9uZTsKLSNlbmRpZgotCi0JKmVvZiA9IDE7Ci0gbm90X2RvbmU6Ci0JcmV0dXJuIGxlbjsKLX0KLQotc3RhdGljIGludCBfX2luaXQgc3JhbV9wcm9jX2luaXQodm9pZCkKLXsKLQlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnB0cjsKLQlwdHIgPSBjcmVhdGVfcHJvY19lbnRyeSgic3JhbSIsIFNfSUZSRUcgfCBTX0lSVUdPLCBOVUxMKTsKLQlpZiAoIXB0cikgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJ1bmFibGUgdG8gY3JlYXRlIC9wcm9jL3NyYW1cbiIpOwotCQlyZXR1cm4gLTE7Ci0JfQotCXB0ci0+b3duZXIgPSBUSElTX01PRFVMRTsKLQlwdHItPnJlYWRfcHJvYyA9IHNyYW1fcHJvY19yZWFkOwotCXJldHVybiAwOwotfQotbGF0ZV9pbml0Y2FsbChzcmFtX3Byb2NfaW5pdCk7Ci0jZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbW0vaXNyYW0tZHJpdmVyLmMgYi9hcmNoL2JsYWNrZmluL21tL2lzcmFtLWRyaXZlci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIyOTEzZTcKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2JsYWNrZmluL21tL2lzcmFtLWRyaXZlci5jCkBAIC0wLDAgKzEsMjAxIEBACisvKgorICogRGVzY3JpcHRpb246IEluc3RydWN0aW9uIFNSQU0gYWNjZXNzb3IgZnVuY3Rpb25zIGZvciB0aGUgQmxhY2tmaW4KKyAqCisgKiBDb3B5cmlnaHQgMjAwOCBBbmFsb2cgRGV2aWNlcyBJbmMuCisgKgorICogQnVnczogRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIHRoZSBmaWxlIENPUFlJTkcsIG9yIHdyaXRlCisgKiB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisKKyNpbmNsdWRlIDxhc20vYmxhY2tmaW4uaD4KKworLyoKKyAqIElNUE9SVEFOVCBXQVJOSU5HIEFCT1VUIFRIRVNFIEZVTkNUSU9OUworICoKKyAqIFRoZSBlbXVsYXRvciB3aWxsIG5vdCBmdW5jdGlvbiBjb3JyZWN0bHkgaWYgYSB3cml0ZSBjb21tYW5kIGlzIGxlZnQgaW4KKyAqIElURVNUX0NPTU1BTkQgb3IgRFRFU1RfQ09NTUFORCBBTkQgYWNjZXNzIHRvIGNhY2hlIG1lbW9yeSBpcyBuZWVkZWQgYnkKKyAqIHRoZSBlbXVsYXRvci4gVG8gYXZvaWQgc3VjaCBwcm9ibGVtcywgZW5zdXJlIHRoYXQgYm90aCBJVEVTVF9DT01NQU5ECisgKiBhbmQgRFRFU1RfQ09NTUFORCBhcmUgemVybyB3aGVuIGV4aXRpbmcgdGhlc2UgZnVuY3Rpb25zLgorICovCisKKworLyoKKyAqIE9uIHRoZSBCbGFja2ZpbiwgTDEgaW5zdHJ1Y3Rpb24gc3JhbSAod2hpY2ggb3BlcmF0ZXMgYXQgY29yZSBzcGVlZHMpIGNhbiBub3QKKyAqIGJlIGFjY2Vzc2VkIGJ5IGEgbm9ybWFsIGNvcmUgbG9hZCwgc28gd2UgbmVlZCB0byBnbyB0aHJvdWdoIGEgZmV3IGhvb3BzIHRvCisgKiByZWFkL3dyaXRlIGl0LgorICogVG8gdHJ5IHRvIG1ha2UgaXQgZWFzaWVyIC0gd2UgZXhwb3J0IGEgbWVtY3B5IGludGVyZmFjZSwgd2hlcmUgZWl0aGVyIHNyYyBvcgorICogZGVzdCBjYW4gYmUgaW4gdGhpcyBzcGVjaWFsIEwxIG1lbW9yeSBhcmVhLgorICogVGhlIGxvdyBsZXZlbCByZWFkL3dyaXRlIGZ1bmN0aW9ucyBzaG91bGQgbm90IGJlIGV4cG9zZWQgdG8gdGhlIHJlc3Qgb2YgdGhlCisgKiBrZXJuZWwsIHNpbmNlIHRoZXkgb3BlcmF0ZSBvbiA2NC1iaXQgZGF0YSwgYW5kIG5lZWQgc3BlY2lmaWMgYWRkcmVzcyBhbGlnbm1lbnQKKyAqLworCitzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGR0ZXN0X2xvY2spOworCisvKiBUYWtlcyBhIHZvaWQgcG9pbnRlciAqLworI2RlZmluZSBJQUREUjJEVEVTVCh4KSBcCisJKHsgdW5zaWduZWQgbG9uZyBfX2FkZHIgPSAodW5zaWduZWQgbG9uZykoeCk7IFwKKwkJKF9fYWRkciAmIDB4NDdGOCkgICAgICAgIHwgLyogYWRkcmVzcyBiaXRzIDE0ICYgMTA6MyAqLyBcCisJCShfX2FkZHIgJiAweDA4MDApIDw8IDE1ICB8IC8qIGFkZHJlc3MgYml0ICAxMSAgICAgICAgKi8gXAorCQkoX19hZGRyICAmIDB4MzAwMCkgPDwgNCAgfCAvKiBhZGRyZXNzIGJpdHMgMTM6MTIgICAgICovIFwKKwkJKF9fYWRkciAgJiAweDgwMDApIDw8IDggIHwgLyogYWRkcmVzcyBiaXQgIDE1ICAgICAgICAqLyBcCisJCSgweDEwMDAwMDQpOyAgICAgICAgICAgICAgIC8qIGlzcmFtIGFjY2VzcyAgICAgICAgICAgKi8gXAorCX0pCisKKy8qIFRha2VzIGEgcG9pbnRlciwgYW5kIHJldHVybnMgdGhlIG9mZnNldCAoaW4gYml0cykgd2hpY2ggdGhpbmdzIHNob3VsZCBiZSBzaGlmdGVkICovCisjZGVmaW5lIEFERFIyT0ZGU0VUKHgpICgoKCh1bnNpZ25lZCBsb25nKSh4KSkgJiAweDcpICogOCkKKworLyogVGFrZXMgYSBwb2ludGVyLCBkZXRlcm1pbmVzIGlmIGl0IGlzIHRoZSBsYXN0IGJ5dGUgaW4gdGhlIGlzcmFtIDY0LWJpdCBkYXRhIHR5cGUgKi8KKyNkZWZpbmUgQUREUjJMQVNUKHgpICgoKCh1bnNpZ25lZCBsb25nKXgpICYgMHg3KSA9PSAweDcpCisKK3N0YXRpYyB2b2lkIGlzcmFtX3dyaXRlKGNvbnN0IHZvaWQgKmFkZHIsIHVpbnQ2NF90IGRhdGEpCit7CisJdWludDMyX3QgY21kOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpZiAoYWRkciA+PSAodm9pZCAqKShMMV9DT0RFX1NUQVJUICsgTDFfQ09ERV9MRU5HVEgpKQorCQlyZXR1cm47CisKKwljbWQgPSBJQUREUjJEVEVTVChhZGRyKSB8IDE7ICAgICAgICAgICAgIC8qIHdyaXRlICovCisKKwkvKgorCSAqIFdyaXRlcyB0byBEVEVTVF9EQVRBWzA6MV0gbmVlZCB0byBiZSBhdG9taWMgd2l0aCB3cml0ZSB0byBEVEVTVF9DT01NQU5ECisJICogV2hpbGUgaW4gZXhjZXB0aW9uIGNvbnRleHQgLSBhdG9taWNpdHkgaXMgZ3VhcmFudGVlZCBvciBkb3VibGUgZmF1bHQKKwkgKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSgmZHRlc3RfbG9jaywgZmxhZ3MpOworCisJYmZpbl93cml0ZV9EVEVTVF9EQVRBMChkYXRhICYgMHhGRkZGRkZGRik7CisJYmZpbl93cml0ZV9EVEVTVF9EQVRBMShkYXRhID4+IDMyKTsKKworCS8qIHVzZSB0aGUgYnVpbHRpbiwgc2luY2UgaW50ZXJydXB0cyBhcmUgYWxyZWFkeSB0dXJuZWQgb2ZmICovCisJX19idWlsdGluX2JmaW5fY3N5bmMoKTsKKwliZmluX3dyaXRlX0RURVNUX0NPTU1BTkQoY21kKTsKKwlfX2J1aWx0aW5fYmZpbl9jc3luYygpOworCisJYmZpbl93cml0ZV9EVEVTVF9DT01NQU5EKDApOworCV9fYnVpbHRpbl9iZmluX2NzeW5jKCk7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkdGVzdF9sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyB1aW50NjRfdCBpc3JhbV9yZWFkKGNvbnN0IHZvaWQgKmFkZHIpCit7CisJdWludDMyX3QgY21kOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdWludDY0X3QgcmV0OworCisJaWYgKGFkZHIgPiAodm9pZCAqKShMMV9DT0RFX1NUQVJUICsgTDFfQ09ERV9MRU5HVEgpKQorCQlyZXR1cm4gMDsKKworCWNtZCA9IElBRERSMkRURVNUKGFkZHIpIHwgMDsgICAgICAgICAgICAgIC8qIHJlYWQgKi8KKworCS8qCisJICogUmVhZHMgb2YgRFRFU1RfREFUQVswOjFdIG5lZWQgdG8gYmUgYXRvbWljIHdpdGggd3JpdGUgdG8gRFRFU1RfQ09NTUFORAorCSAqIFdoaWxlIGluIGV4Y2VwdGlvbiBjb250ZXh0IC0gYXRvbWljaXR5IGlzIGd1YXJhbnRlZWQgb3IgZG91YmxlIGZhdWx0CisJICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJmR0ZXN0X2xvY2ssIGZsYWdzKTsKKwkvKiB1c2UgdGhlIGJ1aWx0aW4sIHNpbmNlIGludGVycnVwdHMgYXJlIGFscmVhZHkgdHVybmVkIG9mZiAqLworCV9fYnVpbHRpbl9iZmluX2NzeW5jKCk7CisJYmZpbl93cml0ZV9EVEVTVF9DT01NQU5EKGNtZCk7CisJX19idWlsdGluX2JmaW5fY3N5bmMoKTsKKwlyZXQgPSBiZmluX3JlYWRfRFRFU1RfREFUQTAoKSB8ICgodWludDY0X3QpYmZpbl9yZWFkX0RURVNUX0RBVEExKCkgPDwgMzIpOworCisJYmZpbl93cml0ZV9EVEVTVF9DT01NQU5EKDApOworCV9fYnVpbHRpbl9iZmluX2NzeW5jKCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZHRlc3RfbG9jaywgZmxhZ3MpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGJvb2wgaXNyYW1fY2hlY2tfYWRkcihjb25zdCB2b2lkICphZGRyLCBzaXplX3QgbikKK3sKKwlpZiAoKGFkZHIgPj0gKHZvaWQgKilMMV9DT0RFX1NUQVJUKSAmJgorCSAgICAoYWRkciA8ICh2b2lkICopKEwxX0NPREVfU1RBUlQgKyBMMV9DT0RFX0xFTkdUSCkpKSB7CisJCWlmICgoYWRkciArIG4pID49ICh2b2lkICopKEwxX0NPREVfU1RBUlQgKyBMMV9DT0RFX0xFTkdUSCkpIHsKKwkJCXNob3dfc3RhY2soTlVMTCwgTlVMTCk7CisJCQlwcmludGsoS0VSTl9FUlIgImlzcmFtX21lbWNweTogY29weSBpbnZvbHZpbmcgJXAgbGVuZ3RoICIKKwkJCQkJIiglenUpIHRvbyBsb25nXG4iLCBhZGRyLCBuKTsKKwkJfQorCQlyZXR1cm4gdHJ1ZTsKKwl9CisJcmV0dXJuIGZhbHNlOworfQorCisvKgorICogVGhlIGlzcmFtX21lbWNweSgpIGZ1bmN0aW9uIGNvcGllcyBuIGJ5dGVzIGZyb20gbWVtb3J5IGFyZWEgc3JjIHRvIG1lbW9yeSBhcmVhIGRlc3QuCisgKiBUaGUgaXNyYW1fbWVtY3B5KCkgZnVuY3Rpb24gcmV0dXJucyBhIHBvaW50ZXIgdG8gZGVzdC4KKyAqIEVpdGhlciBkZXN0IG9yIHNyYyBjYW4gYmUgaW4gTDEgaW5zdHJ1Y3Rpb24gc3JhbS4KKyAqLwordm9pZCAqaXNyYW1fbWVtY3B5KHZvaWQgKmRlc3QsIGNvbnN0IHZvaWQgKnNyYywgc2l6ZV90IG4pCit7CisJdWludDY0X3QgZGF0YV9pbiA9IDAsIGRhdGFfb3V0ID0gMDsKKwlzaXplX3QgY291bnQ7CisJYm9vbCBkZXN0X2luX2wxLCBzcmNfaW5fbDEsIG5lZWRfZGF0YSwgcHV0X2RhdGE7CisJdW5zaWduZWQgY2hhciBieXRlLCAqc3JjX2J5dGUsICpkZXN0X2J5dGU7CisKKwlzcmNfYnl0ZSA9ICh1bnNpZ25lZCBjaGFyICopc3JjOworCWRlc3RfYnl0ZSA9ICh1bnNpZ25lZCBjaGFyICopZGVzdDsKKworCWRlc3RfaW5fbDEgPSBpc3JhbV9jaGVja19hZGRyKGRlc3QsIG4pOworCXNyY19pbl9sMSA9IGlzcmFtX2NoZWNrX2FkZHIoc3JjLCBuKTsKKworCW5lZWRfZGF0YSA9IHRydWU7CisJcHV0X2RhdGEgPSB0cnVlOworCWZvciAoY291bnQgPSAwOyBjb3VudCA8IG47IGNvdW50KyspIHsKKwkJaWYgKHNyY19pbl9sMSkgeworCQkJaWYgKG5lZWRfZGF0YSkgeworCQkJCWRhdGFfaW4gPSBpc3JhbV9yZWFkKHNyYyArIGNvdW50KTsKKwkJCQluZWVkX2RhdGEgPSBmYWxzZTsKKwkJCX0KKworCQkJaWYgKEFERFIyTEFTVChzcmMgKyBjb3VudCkpCisJCQkJbmVlZF9kYXRhID0gdHJ1ZTsKKworCQkJYnl0ZSA9ICh1bnNpZ25lZCBjaGFyKSgoZGF0YV9pbiA+PiBBRERSMk9GRlNFVChzcmMgKyBjb3VudCkpICYgMHhmZik7CisKKwkJfSBlbHNlIHsKKwkJCS8qIHNyYyBpcyBpbiBMMiBvciBMMyAtIHNvIGp1c3QgZGVyZWZlcmVuY2UqLworCQkJYnl0ZSA9IHNyY19ieXRlW2NvdW50XTsKKwkJfQorCisJCWlmIChkZXN0X2luX2wxKSB7CisJCQlpZiAocHV0X2RhdGEpIHsKKwkJCQlkYXRhX291dCA9IGlzcmFtX3JlYWQoZGVzdCArIGNvdW50KTsKKwkJCQlwdXRfZGF0YSA9IGZhbHNlOworCQkJfQorCisJCQlkYXRhX291dCAmPSB+KCh1aW50NjRfdCkweGZmIDw8IEFERFIyT0ZGU0VUKGRlc3QgKyBjb3VudCkpOworCQkJZGF0YV9vdXQgfD0gKCh1aW50NjRfdClieXRlIDw8IEFERFIyT0ZGU0VUKGRlc3QgKyBjb3VudCkpOworCisJCQlpZiAoQUREUjJMQVNUKGRlc3QgKyBjb3VudCkpIHsKKwkJCQlwdXRfZGF0YSA9IHRydWU7CisJCQkJaXNyYW1fd3JpdGUoZGVzdCArIGNvdW50LCBkYXRhX291dCk7CisJCQl9CisJCX0gZWxzZSB7CisJCQkvKiBkZXN0IGluIEwyIG9yIEwzIC0gc28ganVzdCBkZXJlZmVyZW5jZSAqLworCQkJZGVzdF9ieXRlW2NvdW50XSA9IGJ5dGU7CisJCX0KKwl9CisKKwkvKiBtYWtlIHN1cmUgd2UgZHVtcCB0aGUgbGFzdCBieXRlIGlmIG5lY2Vzc2FyeSAqLworCWlmIChkZXN0X2luX2wxICYmICFwdXRfZGF0YSkKKwkJaXNyYW1fd3JpdGUoZGVzdCArIGNvdW50LCBkYXRhX291dCk7CisKKwlyZXR1cm4gZGVzdDsKK30KK0VYUE9SVF9TWU1CT0woaXNyYW1fbWVtY3B5KTsKKwpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tbS9zcmFtLWFsbG9jLmMgYi9hcmNoL2JsYWNrZmluL21tL3NyYW0tYWxsb2MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZjFjYTY5Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9ibGFja2Zpbi9tbS9zcmFtLWFsbG9jLmMKQEAgLTAsMCArMSw4MDkgQEAKKy8qCisgKiBGaWxlOiAgICAgICAgIGFyY2gvYmxhY2tmaW4vbW0vc3JhbS1hbGxvYy5jCisgKiBCYXNlZCBvbjoKKyAqIEF1dGhvcjoKKyAqCisgKiBDcmVhdGVkOgorICogRGVzY3JpcHRpb246ICBTUkFNIGFsbG9jYXRvciBmb3IgQmxhY2tmaW4gTDEgYW5kIEwyIG1lbW9yeQorICoKKyAqIE1vZGlmaWVkOgorICogICAgICAgICAgICAgICBDb3B5cmlnaHQgMjAwNC0yMDA4IEFuYWxvZyBEZXZpY2VzIEluYy4KKyAqCisgKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIHRoZSBmaWxlIENPUFlJTkcsIG9yIHdyaXRlCisgKiB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9taXNjZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CisjaW5jbHVkZSA8bGludXgvZmNudGwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvcG9sbC5oPgorI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L3J0Yy5oPgorI2luY2x1ZGUgPGFzbS9ibGFja2Zpbi5oPgorI2luY2x1ZGUgImJsYWNrZmluX3NyYW0uaCIKKworc3RhdGljIHNwaW5sb2NrX3QgbDFzcmFtX2xvY2ssIGwxX2RhdGFfc3JhbV9sb2NrLCBsMV9pbnN0X3NyYW1fbG9jazsKK3N0YXRpYyBzcGlubG9ja190IGwyX3NyYW1fbG9jazsKKworLyogdGhlIGRhdGEgc3RydWN0dXJlIGZvciBMMSBzY3JhdGNocGFkIGFuZCBEQVRBIFNSQU0gKi8KK3N0cnVjdCBzcmFtX3BpZWNlIHsKKwl2b2lkICpwYWRkcjsKKwlpbnQgc2l6ZTsKKwlwaWRfdCBwaWQ7CisJc3RydWN0IHNyYW1fcGllY2UgKm5leHQ7Cit9OworCitzdGF0aWMgc3RydWN0IHNyYW1fcGllY2UgZnJlZV9sMV9zc3JhbV9oZWFkLCB1c2VkX2wxX3NzcmFtX2hlYWQ7CisKKyNpZiBMMV9EQVRBX0FfTEVOR1RIICE9IDAKK3N0YXRpYyBzdHJ1Y3Qgc3JhbV9waWVjZSBmcmVlX2wxX2RhdGFfQV9zcmFtX2hlYWQsIHVzZWRfbDFfZGF0YV9BX3NyYW1faGVhZDsKKyNlbmRpZgorCisjaWYgTDFfREFUQV9CX0xFTkdUSCAhPSAwCitzdGF0aWMgc3RydWN0IHNyYW1fcGllY2UgZnJlZV9sMV9kYXRhX0Jfc3JhbV9oZWFkLCB1c2VkX2wxX2RhdGFfQl9zcmFtX2hlYWQ7CisjZW5kaWYKKworI2lmIEwxX0NPREVfTEVOR1RIICE9IDAKK3N0YXRpYyBzdHJ1Y3Qgc3JhbV9waWVjZSBmcmVlX2wxX2luc3Rfc3JhbV9oZWFkLCB1c2VkX2wxX2luc3Rfc3JhbV9oZWFkOworI2VuZGlmCisKKyNpZiBMMl9MRU5HVEggIT0gMAorc3RhdGljIHN0cnVjdCBzcmFtX3BpZWNlIGZyZWVfbDJfc3JhbV9oZWFkLCB1c2VkX2wyX3NyYW1faGVhZDsKKyNlbmRpZgorCitzdGF0aWMgc3RydWN0IGttZW1fY2FjaGUgKnNyYW1fcGllY2VfY2FjaGU7CisKKy8qIEwxIFNjcmF0Y2hwYWQgU1JBTSBpbml0aWFsaXphdGlvbiBmdW5jdGlvbiAqLworc3RhdGljIHZvaWQgX19pbml0IGwxc3JhbV9pbml0KHZvaWQpCit7CisJZnJlZV9sMV9zc3JhbV9oZWFkLm5leHQgPQorCQlrbWVtX2NhY2hlX2FsbG9jKHNyYW1fcGllY2VfY2FjaGUsIEdGUF9LRVJORUwpOworCWlmICghZnJlZV9sMV9zc3JhbV9oZWFkLm5leHQpIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiRmFpbGVkIHRvIGluaXRpYWxpemUgU2NyYXRjaHBhZCBkYXRhIFNSQU1cbiIpOworCQlyZXR1cm47CisJfQorCisJZnJlZV9sMV9zc3JhbV9oZWFkLm5leHQtPnBhZGRyID0gKHZvaWQgKilMMV9TQ1JBVENIX1NUQVJUOworCWZyZWVfbDFfc3NyYW1faGVhZC5uZXh0LT5zaXplID0gTDFfU0NSQVRDSF9MRU5HVEg7CisJZnJlZV9sMV9zc3JhbV9oZWFkLm5leHQtPnBpZCA9IDA7CisJZnJlZV9sMV9zc3JhbV9oZWFkLm5leHQtPm5leHQgPSBOVUxMOworCisJdXNlZF9sMV9zc3JhbV9oZWFkLm5leHQgPSBOVUxMOworCisJLyogbXV0ZXggaW5pdGlhbGl6ZSAqLworCXNwaW5fbG9ja19pbml0KCZsMXNyYW1fbG9jayk7CisKKwlwcmludGsoS0VSTl9JTkZPICJCbGFja2ZpbiBTY3JhdGNocGFkIGRhdGEgU1JBTTogJWQgS0JcbiIsCisJICAgICAgIEwxX1NDUkFUQ0hfTEVOR1RIID4+IDEwKTsKK30KKworc3RhdGljIHZvaWQgX19pbml0IGwxX2RhdGFfc3JhbV9pbml0KHZvaWQpCit7CisjaWYgTDFfREFUQV9BX0xFTkdUSCAhPSAwCisJZnJlZV9sMV9kYXRhX0Ffc3JhbV9oZWFkLm5leHQgPQorCQlrbWVtX2NhY2hlX2FsbG9jKHNyYW1fcGllY2VfY2FjaGUsIEdGUF9LRVJORUwpOworCWlmICghZnJlZV9sMV9kYXRhX0Ffc3JhbV9oZWFkLm5leHQpIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiRmFpbGVkIHRvIGluaXRpYWxpemUgTDEgRGF0YSBBIFNSQU1cbiIpOworCQlyZXR1cm47CisJfQorCisJZnJlZV9sMV9kYXRhX0Ffc3JhbV9oZWFkLm5leHQtPnBhZGRyID0KKwkJKHZvaWQgKilMMV9EQVRBX0FfU1RBUlQgKyAoX2Vic3NfbDEgLSBfc2RhdGFfbDEpOworCWZyZWVfbDFfZGF0YV9BX3NyYW1faGVhZC5uZXh0LT5zaXplID0KKwkJTDFfREFUQV9BX0xFTkdUSCAtIChfZWJzc19sMSAtIF9zZGF0YV9sMSk7CisJZnJlZV9sMV9kYXRhX0Ffc3JhbV9oZWFkLm5leHQtPnBpZCA9IDA7CisJZnJlZV9sMV9kYXRhX0Ffc3JhbV9oZWFkLm5leHQtPm5leHQgPSBOVUxMOworCisJdXNlZF9sMV9kYXRhX0Ffc3JhbV9oZWFkLm5leHQgPSBOVUxMOworCisJcHJpbnRrKEtFUk5fSU5GTyAiQmxhY2tmaW4gTDEgRGF0YSBBIFNSQU06ICVkIEtCICglZCBLQiBmcmVlKVxuIiwKKwkJTDFfREFUQV9BX0xFTkdUSCA+PiAxMCwKKwkJZnJlZV9sMV9kYXRhX0Ffc3JhbV9oZWFkLm5leHQtPnNpemUgPj4gMTApOworI2VuZGlmCisjaWYgTDFfREFUQV9CX0xFTkdUSCAhPSAwCisJZnJlZV9sMV9kYXRhX0Jfc3JhbV9oZWFkLm5leHQgPQorCQlrbWVtX2NhY2hlX2FsbG9jKHNyYW1fcGllY2VfY2FjaGUsIEdGUF9LRVJORUwpOworCWlmICghZnJlZV9sMV9kYXRhX0Jfc3JhbV9oZWFkLm5leHQpIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiRmFpbGVkIHRvIGluaXRpYWxpemUgTDEgRGF0YSBCIFNSQU1cbiIpOworCQlyZXR1cm47CisJfQorCisJZnJlZV9sMV9kYXRhX0Jfc3JhbV9oZWFkLm5leHQtPnBhZGRyID0KKwkJKHZvaWQgKilMMV9EQVRBX0JfU1RBUlQgKyAoX2Vic3NfYl9sMSAtIF9zZGF0YV9iX2wxKTsKKwlmcmVlX2wxX2RhdGFfQl9zcmFtX2hlYWQubmV4dC0+c2l6ZSA9CisJCUwxX0RBVEFfQl9MRU5HVEggLSAoX2Vic3NfYl9sMSAtIF9zZGF0YV9iX2wxKTsKKwlmcmVlX2wxX2RhdGFfQl9zcmFtX2hlYWQubmV4dC0+cGlkID0gMDsKKwlmcmVlX2wxX2RhdGFfQl9zcmFtX2hlYWQubmV4dC0+bmV4dCA9IE5VTEw7CisKKwl1c2VkX2wxX2RhdGFfQl9zcmFtX2hlYWQubmV4dCA9IE5VTEw7CisKKwlwcmludGsoS0VSTl9JTkZPICJCbGFja2ZpbiBMMSBEYXRhIEIgU1JBTTogJWQgS0IgKCVkIEtCIGZyZWUpXG4iLAorCQlMMV9EQVRBX0JfTEVOR1RIID4+IDEwLAorCQlmcmVlX2wxX2RhdGFfQl9zcmFtX2hlYWQubmV4dC0+c2l6ZSA+PiAxMCk7CisjZW5kaWYKKworCS8qIG11dGV4IGluaXRpYWxpemUgKi8KKwlzcGluX2xvY2tfaW5pdCgmbDFfZGF0YV9zcmFtX2xvY2spOworfQorCitzdGF0aWMgdm9pZCBfX2luaXQgbDFfaW5zdF9zcmFtX2luaXQodm9pZCkKK3sKKyNpZiBMMV9DT0RFX0xFTkdUSCAhPSAwCisJZnJlZV9sMV9pbnN0X3NyYW1faGVhZC5uZXh0ID0KKwkJa21lbV9jYWNoZV9hbGxvYyhzcmFtX3BpZWNlX2NhY2hlLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWZyZWVfbDFfaW5zdF9zcmFtX2hlYWQubmV4dCkgeworCQlwcmludGsoS0VSTl9JTkZPICJGYWlsZWQgdG8gaW5pdGlhbGl6ZSBMMSBJbnN0cnVjdGlvbiBTUkFNXG4iKTsKKwkJcmV0dXJuOworCX0KKworCWZyZWVfbDFfaW5zdF9zcmFtX2hlYWQubmV4dC0+cGFkZHIgPQorCQkodm9pZCAqKUwxX0NPREVfU1RBUlQgKyAoX2V0ZXh0X2wxIC0gX3N0ZXh0X2wxKTsKKwlmcmVlX2wxX2luc3Rfc3JhbV9oZWFkLm5leHQtPnNpemUgPQorCQlMMV9DT0RFX0xFTkdUSCAtIChfZXRleHRfbDEgLSBfc3RleHRfbDEpOworCWZyZWVfbDFfaW5zdF9zcmFtX2hlYWQubmV4dC0+cGlkID0gMDsKKwlmcmVlX2wxX2luc3Rfc3JhbV9oZWFkLm5leHQtPm5leHQgPSBOVUxMOworCisJdXNlZF9sMV9pbnN0X3NyYW1faGVhZC5uZXh0ID0gTlVMTDsKKworCXByaW50ayhLRVJOX0lORk8gIkJsYWNrZmluIEwxIEluc3RydWN0aW9uIFNSQU06ICVkIEtCICglZCBLQiBmcmVlKVxuIiwKKwkJTDFfQ09ERV9MRU5HVEggPj4gMTAsCisJCWZyZWVfbDFfaW5zdF9zcmFtX2hlYWQubmV4dC0+c2l6ZSA+PiAxMCk7CisjZW5kaWYKKworCS8qIG11dGV4IGluaXRpYWxpemUgKi8KKwlzcGluX2xvY2tfaW5pdCgmbDFfaW5zdF9zcmFtX2xvY2spOworfQorCitzdGF0aWMgdm9pZCBfX2luaXQgbDJfc3JhbV9pbml0KHZvaWQpCit7CisjaWYgTDJfTEVOR1RIICE9IDAKKwlmcmVlX2wyX3NyYW1faGVhZC5uZXh0ID0KKwkJa21lbV9jYWNoZV9hbGxvYyhzcmFtX3BpZWNlX2NhY2hlLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWZyZWVfbDJfc3JhbV9oZWFkLm5leHQpIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiRmFpbGVkIHRvIGluaXRpYWxpemUgTDIgU1JBTVxuIik7CisJCXJldHVybjsKKwl9CisKKwlmcmVlX2wyX3NyYW1faGVhZC5uZXh0LT5wYWRkciA9ICh2b2lkICopTDJfU1RBUlQgKworCQkoX2V0ZXh0X2wyIC0gX3N0ZXh0X2wyKSArIChfZWRhdGFfbDIgLSBfc2RhdGFfbDIpOworCWZyZWVfbDJfc3JhbV9oZWFkLm5leHQtPnNpemUgPSBMMl9MRU5HVEggLQorCQkoX2V0ZXh0X2wyIC0gX3N0ZXh0X2wyKSArIChfZWRhdGFfbDIgLSBfc2RhdGFfbDIpOworCWZyZWVfbDJfc3JhbV9oZWFkLm5leHQtPnBpZCA9IDA7CisJZnJlZV9sMl9zcmFtX2hlYWQubmV4dC0+bmV4dCA9IE5VTEw7CisKKwl1c2VkX2wyX3NyYW1faGVhZC5uZXh0ID0gTlVMTDsKKworCXByaW50ayhLRVJOX0lORk8gIkJsYWNrZmluIEwyIFNSQU06ICVkIEtCICglZCBLQiBmcmVlKVxuIiwKKwkJTDJfTEVOR1RIID4+IDEwLAorCQlmcmVlX2wyX3NyYW1faGVhZC5uZXh0LT5zaXplID4+IDEwKTsKKyNlbmRpZgorCisJLyogbXV0ZXggaW5pdGlhbGl6ZSAqLworCXNwaW5fbG9ja19pbml0KCZsMl9zcmFtX2xvY2spOworfQordm9pZCBfX2luaXQgYmZpbl9zcmFtX2luaXQodm9pZCkKK3sKKwlzcmFtX3BpZWNlX2NhY2hlID0ga21lbV9jYWNoZV9jcmVhdGUoInNyYW1fcGllY2VfY2FjaGUiLAorCQkJCXNpemVvZihzdHJ1Y3Qgc3JhbV9waWVjZSksCisJCQkJMCwgU0xBQl9QQU5JQywgTlVMTCk7CisKKwlsMXNyYW1faW5pdCgpOworCWwxX2RhdGFfc3JhbV9pbml0KCk7CisJbDFfaW5zdF9zcmFtX2luaXQoKTsKKwlsMl9zcmFtX2luaXQoKTsKK30KKworLyogU1JBTSBhbGxvY2F0ZSBmdW5jdGlvbiAqLworc3RhdGljIHZvaWQgKl9zcmFtX2FsbG9jKHNpemVfdCBzaXplLCBzdHJ1Y3Qgc3JhbV9waWVjZSAqcGZyZWVfaGVhZCwKKwkJc3RydWN0IHNyYW1fcGllY2UgKnB1c2VkX2hlYWQpCit7CisJc3RydWN0IHNyYW1fcGllY2UgKnBzbG90LCAqcGxhc3QsICpwYXZhaWw7CisKKwlpZiAoc2l6ZSA8PSAwIHx8ICFwZnJlZV9oZWFkIHx8ICFwdXNlZF9oZWFkKQorCQlyZXR1cm4gTlVMTDsKKworCS8qIEFsaWduIHRoZSBzaXplICovCisJc2l6ZSA9IChzaXplICsgMykgJiB+MzsKKworCXBzbG90ID0gcGZyZWVfaGVhZC0+bmV4dDsKKwlwbGFzdCA9IHBmcmVlX2hlYWQ7CisKKwkvKiBzZWFyY2ggYW4gYXZhaWxhYmxlIHBpZWNlIHNsb3QgKi8KKwl3aGlsZSAocHNsb3QgIT0gTlVMTCAmJiBzaXplID4gcHNsb3QtPnNpemUpIHsKKwkJcGxhc3QgPSBwc2xvdDsKKwkJcHNsb3QgPSBwc2xvdC0+bmV4dDsKKwl9CisKKwlpZiAoIXBzbG90KQorCQlyZXR1cm4gTlVMTDsKKworCWlmIChwc2xvdC0+c2l6ZSA9PSBzaXplKSB7CisJCXBsYXN0LT5uZXh0ID0gcHNsb3QtPm5leHQ7CisJCXBhdmFpbCA9IHBzbG90OworCX0gZWxzZSB7CisJCXBhdmFpbCA9IGttZW1fY2FjaGVfYWxsb2Moc3JhbV9waWVjZV9jYWNoZSwgR0ZQX0tFUk5FTCk7CisKKwkJaWYgKCFwYXZhaWwpCisJCQlyZXR1cm4gTlVMTDsKKworCQlwYXZhaWwtPnBhZGRyID0gcHNsb3QtPnBhZGRyOworCQlwYXZhaWwtPnNpemUgPSBzaXplOworCQlwc2xvdC0+cGFkZHIgKz0gc2l6ZTsKKwkJcHNsb3QtPnNpemUgLT0gc2l6ZTsKKwl9CisKKwlwYXZhaWwtPnBpZCA9IGN1cnJlbnQtPnBpZDsKKworCXBzbG90ID0gcHVzZWRfaGVhZC0+bmV4dDsKKwlwbGFzdCA9IHB1c2VkX2hlYWQ7CisKKwkvKiBpbnNlcnQgbmV3IHBpZWNlIGludG8gdXNlZCBwaWVjZSBsaXN0ICEhISAqLworCXdoaWxlIChwc2xvdCAhPSBOVUxMICYmIHBhdmFpbC0+cGFkZHIgPCBwc2xvdC0+cGFkZHIpIHsKKwkJcGxhc3QgPSBwc2xvdDsKKwkJcHNsb3QgPSBwc2xvdC0+bmV4dDsKKwl9CisKKwlwYXZhaWwtPm5leHQgPSBwc2xvdDsKKwlwbGFzdC0+bmV4dCA9IHBhdmFpbDsKKworCXJldHVybiBwYXZhaWwtPnBhZGRyOworfQorCisvKiBBbGxvY2F0ZSB0aGUgbGFyZ2VzdCBhdmFpbGFibGUgYmxvY2suICAqLworc3RhdGljIHZvaWQgKl9zcmFtX2FsbG9jX21heChzdHJ1Y3Qgc3JhbV9waWVjZSAqcGZyZWVfaGVhZCwKKwkJCQlzdHJ1Y3Qgc3JhbV9waWVjZSAqcHVzZWRfaGVhZCwKKwkJCQl1bnNpZ25lZCBsb25nICpwc2l6ZSkKK3sKKwlzdHJ1Y3Qgc3JhbV9waWVjZSAqcHNsb3QsICpwbWF4OworCisJaWYgKCFwZnJlZV9oZWFkIHx8ICFwdXNlZF9oZWFkKQorCQlyZXR1cm4gTlVMTDsKKworCXBtYXggPSBwc2xvdCA9IHBmcmVlX2hlYWQtPm5leHQ7CisKKwkvKiBzZWFyY2ggYW4gYXZhaWxhYmxlIHBpZWNlIHNsb3QgKi8KKwl3aGlsZSAocHNsb3QgIT0gTlVMTCkgeworCQlpZiAocHNsb3QtPnNpemUgPiBwbWF4LT5zaXplKQorCQkJcG1heCA9IHBzbG90OworCQlwc2xvdCA9IHBzbG90LT5uZXh0OworCX0KKworCWlmICghcG1heCkKKwkJcmV0dXJuIE5VTEw7CisKKwkqcHNpemUgPSBwbWF4LT5zaXplOworCisJcmV0dXJuIF9zcmFtX2FsbG9jKCpwc2l6ZSwgcGZyZWVfaGVhZCwgcHVzZWRfaGVhZCk7Cit9CisKKy8qIFNSQU0gZnJlZSBmdW5jdGlvbiAqLworc3RhdGljIGludCBfc3JhbV9mcmVlKGNvbnN0IHZvaWQgKmFkZHIsCisJCQlzdHJ1Y3Qgc3JhbV9waWVjZSAqcGZyZWVfaGVhZCwKKwkJCXN0cnVjdCBzcmFtX3BpZWNlICpwdXNlZF9oZWFkKQoreworCXN0cnVjdCBzcmFtX3BpZWNlICpwc2xvdCwgKnBsYXN0LCAqcGF2YWlsOworCisJaWYgKCFwZnJlZV9oZWFkIHx8ICFwdXNlZF9oZWFkKQorCQlyZXR1cm4gLTE7CisKKwkvKiBzZWFyY2ggdGhlIHJlbGV2YW50IG1lbW9yeSBzbG90ICovCisJcHNsb3QgPSBwdXNlZF9oZWFkLT5uZXh0OworCXBsYXN0ID0gcHVzZWRfaGVhZDsKKworCS8qIHNlYXJjaCBhbiBhdmFpbGFibGUgcGllY2Ugc2xvdCAqLworCXdoaWxlIChwc2xvdCAhPSBOVUxMICYmIHBzbG90LT5wYWRkciAhPSBhZGRyKSB7CisJCXBsYXN0ID0gcHNsb3Q7CisJCXBzbG90ID0gcHNsb3QtPm5leHQ7CisJfQorCisJaWYgKCFwc2xvdCkKKwkJcmV0dXJuIC0xOworCisJcGxhc3QtPm5leHQgPSBwc2xvdC0+bmV4dDsKKwlwYXZhaWwgPSBwc2xvdDsKKwlwYXZhaWwtPnBpZCA9IDA7CisKKwkvKiBpbnNlcnQgZnJlZSBwaWVjZXMgYmFjayB0byB0aGUgZnJlZSBsaXN0ICovCisJcHNsb3QgPSBwZnJlZV9oZWFkLT5uZXh0OworCXBsYXN0ID0gcGZyZWVfaGVhZDsKKworCXdoaWxlIChwc2xvdCAhPSBOVUxMICYmIGFkZHIgPiBwc2xvdC0+cGFkZHIpIHsKKwkJcGxhc3QgPSBwc2xvdDsKKwkJcHNsb3QgPSBwc2xvdC0+bmV4dDsKKwl9CisKKwlpZiAocGxhc3QgIT0gcGZyZWVfaGVhZCAmJiBwbGFzdC0+cGFkZHIgKyBwbGFzdC0+c2l6ZSA9PSBwYXZhaWwtPnBhZGRyKSB7CisJCXBsYXN0LT5zaXplICs9IHBhdmFpbC0+c2l6ZTsKKwkJa21lbV9jYWNoZV9mcmVlKHNyYW1fcGllY2VfY2FjaGUsIHBhdmFpbCk7CisJfSBlbHNlIHsKKwkJcGF2YWlsLT5uZXh0ID0gcGxhc3QtPm5leHQ7CisJCXBsYXN0LT5uZXh0ID0gcGF2YWlsOworCQlwbGFzdCA9IHBhdmFpbDsKKwl9CisKKwlpZiAocHNsb3QgJiYgcGxhc3QtPnBhZGRyICsgcGxhc3QtPnNpemUgPT0gcHNsb3QtPnBhZGRyKSB7CisJCXBsYXN0LT5zaXplICs9IHBzbG90LT5zaXplOworCQlwbGFzdC0+bmV4dCA9IHBzbG90LT5uZXh0OworCQlrbWVtX2NhY2hlX2ZyZWUoc3JhbV9waWVjZV9jYWNoZSwgcHNsb3QpOworCX0KKworCXJldHVybiAwOworfQorCitpbnQgc3JhbV9mcmVlKGNvbnN0IHZvaWQgKmFkZHIpCit7CisKKyNpZiBMMV9DT0RFX0xFTkdUSCAhPSAwCisJaWYgKGFkZHIgPj0gKHZvaWQgKilMMV9DT0RFX1NUQVJUCisJCSAmJiBhZGRyIDwgKHZvaWQgKikoTDFfQ09ERV9TVEFSVCArIEwxX0NPREVfTEVOR1RIKSkKKwkJcmV0dXJuIGwxX2luc3Rfc3JhbV9mcmVlKGFkZHIpOworCWVsc2UKKyNlbmRpZgorI2lmIEwxX0RBVEFfQV9MRU5HVEggIT0gMAorCWlmIChhZGRyID49ICh2b2lkICopTDFfREFUQV9BX1NUQVJUCisJCSAmJiBhZGRyIDwgKHZvaWQgKikoTDFfREFUQV9BX1NUQVJUICsgTDFfREFUQV9BX0xFTkdUSCkpCisJCXJldHVybiBsMV9kYXRhX0Ffc3JhbV9mcmVlKGFkZHIpOworCWVsc2UKKyNlbmRpZgorI2lmIEwxX0RBVEFfQl9MRU5HVEggIT0gMAorCWlmIChhZGRyID49ICh2b2lkICopTDFfREFUQV9CX1NUQVJUCisJCSAmJiBhZGRyIDwgKHZvaWQgKikoTDFfREFUQV9CX1NUQVJUICsgTDFfREFUQV9CX0xFTkdUSCkpCisJCXJldHVybiBsMV9kYXRhX0Jfc3JhbV9mcmVlKGFkZHIpOworCWVsc2UKKyNlbmRpZgorI2lmIEwyX0xFTkdUSCAhPSAwCisJaWYgKGFkZHIgPj0gKHZvaWQgKilMMl9TVEFSVAorCQkgJiYgYWRkciA8ICh2b2lkICopKEwyX1NUQVJUICsgTDJfTEVOR1RIKSkKKwkJcmV0dXJuIGwyX3NyYW1fZnJlZShhZGRyKTsKKwllbHNlCisjZW5kaWYKKwkJcmV0dXJuIC0xOworfQorRVhQT1JUX1NZTUJPTChzcmFtX2ZyZWUpOworCit2b2lkICpsMV9kYXRhX0Ffc3JhbV9hbGxvYyhzaXplX3Qgc2l6ZSkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXZvaWQgKmFkZHIgPSBOVUxMOworCisJLyogYWRkIG11dGV4IG9wZXJhdGlvbiAqLworCXNwaW5fbG9ja19pcnFzYXZlKCZsMV9kYXRhX3NyYW1fbG9jaywgZmxhZ3MpOworCisjaWYgTDFfREFUQV9BX0xFTkdUSCAhPSAwCisJYWRkciA9IF9zcmFtX2FsbG9jKHNpemUsICZmcmVlX2wxX2RhdGFfQV9zcmFtX2hlYWQsCisJCQkmdXNlZF9sMV9kYXRhX0Ffc3JhbV9oZWFkKTsKKyNlbmRpZgorCisJLyogYWRkIG11dGV4IG9wZXJhdGlvbiAqLworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmwxX2RhdGFfc3JhbV9sb2NrLCBmbGFncyk7CisKKwlwcl9kZWJ1ZygiQWxsb2NhdGVkIGFkZHJlc3MgaW4gbDFfZGF0YV9BX3NyYW1fYWxsb2MgaXMgMHglbHgrMHglbHhcbiIsCisJCSAobG9uZyB1bnNpZ25lZCBpbnQpYWRkciwgc2l6ZSk7CisKKwlyZXR1cm4gYWRkcjsKK30KK0VYUE9SVF9TWU1CT0wobDFfZGF0YV9BX3NyYW1fYWxsb2MpOworCitpbnQgbDFfZGF0YV9BX3NyYW1fZnJlZShjb25zdCB2b2lkICphZGRyKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHJldDsKKworCS8qIGFkZCBtdXRleCBvcGVyYXRpb24gKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSgmbDFfZGF0YV9zcmFtX2xvY2ssIGZsYWdzKTsKKworI2lmIEwxX0RBVEFfQV9MRU5HVEggIT0gMAorCXJldCA9IF9zcmFtX2ZyZWUoYWRkciwgJmZyZWVfbDFfZGF0YV9BX3NyYW1faGVhZCwKKwkJCSZ1c2VkX2wxX2RhdGFfQV9zcmFtX2hlYWQpOworI2Vsc2UKKwlyZXQgPSAtMTsKKyNlbmRpZgorCisJLyogYWRkIG11dGV4IG9wZXJhdGlvbiAqLworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmwxX2RhdGFfc3JhbV9sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTChsMV9kYXRhX0Ffc3JhbV9mcmVlKTsKKwordm9pZCAqbDFfZGF0YV9CX3NyYW1fYWxsb2Moc2l6ZV90IHNpemUpCit7CisjaWYgTDFfREFUQV9CX0xFTkdUSCAhPSAwCisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl2b2lkICphZGRyOworCisJLyogYWRkIG11dGV4IG9wZXJhdGlvbiAqLworCXNwaW5fbG9ja19pcnFzYXZlKCZsMV9kYXRhX3NyYW1fbG9jaywgZmxhZ3MpOworCisJYWRkciA9IF9zcmFtX2FsbG9jKHNpemUsICZmcmVlX2wxX2RhdGFfQl9zcmFtX2hlYWQsCisJCQkmdXNlZF9sMV9kYXRhX0Jfc3JhbV9oZWFkKTsKKworCS8qIGFkZCBtdXRleCBvcGVyYXRpb24gKi8KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZsMV9kYXRhX3NyYW1fbG9jaywgZmxhZ3MpOworCisJcHJfZGVidWcoIkFsbG9jYXRlZCBhZGRyZXNzIGluIGwxX2RhdGFfQl9zcmFtX2FsbG9jIGlzIDB4JWx4KzB4JWx4XG4iLAorCQkgKGxvbmcgdW5zaWduZWQgaW50KWFkZHIsIHNpemUpOworCisJcmV0dXJuIGFkZHI7CisjZWxzZQorCXJldHVybiBOVUxMOworI2VuZGlmCit9CitFWFBPUlRfU1lNQk9MKGwxX2RhdGFfQl9zcmFtX2FsbG9jKTsKKworaW50IGwxX2RhdGFfQl9zcmFtX2ZyZWUoY29uc3Qgdm9pZCAqYWRkcikKK3sKKyNpZiBMMV9EQVRBX0JfTEVOR1RIICE9IDAKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCByZXQ7CisKKwkvKiBhZGQgbXV0ZXggb3BlcmF0aW9uICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJmwxX2RhdGFfc3JhbV9sb2NrLCBmbGFncyk7CisKKwlyZXQgPSBfc3JhbV9mcmVlKGFkZHIsICZmcmVlX2wxX2RhdGFfQl9zcmFtX2hlYWQsCisJCQkmdXNlZF9sMV9kYXRhX0Jfc3JhbV9oZWFkKTsKKworCS8qIGFkZCBtdXRleCBvcGVyYXRpb24gKi8KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZsMV9kYXRhX3NyYW1fbG9jaywgZmxhZ3MpOworCisJcmV0dXJuIHJldDsKKyNlbHNlCisJcmV0dXJuIC0xOworI2VuZGlmCit9CitFWFBPUlRfU1lNQk9MKGwxX2RhdGFfQl9zcmFtX2ZyZWUpOworCit2b2lkICpsMV9kYXRhX3NyYW1fYWxsb2Moc2l6ZV90IHNpemUpCit7CisJdm9pZCAqYWRkciA9IGwxX2RhdGFfQV9zcmFtX2FsbG9jKHNpemUpOworCisJaWYgKCFhZGRyKQorCQlhZGRyID0gbDFfZGF0YV9CX3NyYW1fYWxsb2Moc2l6ZSk7CisKKwlyZXR1cm4gYWRkcjsKK30KK0VYUE9SVF9TWU1CT0wobDFfZGF0YV9zcmFtX2FsbG9jKTsKKwordm9pZCAqbDFfZGF0YV9zcmFtX3phbGxvYyhzaXplX3Qgc2l6ZSkKK3sKKwl2b2lkICphZGRyID0gbDFfZGF0YV9zcmFtX2FsbG9jKHNpemUpOworCisJaWYgKGFkZHIpCisJCW1lbXNldChhZGRyLCAweDAwLCBzaXplKTsKKworCXJldHVybiBhZGRyOworfQorRVhQT1JUX1NZTUJPTChsMV9kYXRhX3NyYW1femFsbG9jKTsKKworaW50IGwxX2RhdGFfc3JhbV9mcmVlKGNvbnN0IHZvaWQgKmFkZHIpCit7CisJaW50IHJldDsKKwlyZXQgPSBsMV9kYXRhX0Ffc3JhbV9mcmVlKGFkZHIpOworCWlmIChyZXQgPT0gLTEpCisJCXJldCA9IGwxX2RhdGFfQl9zcmFtX2ZyZWUoYWRkcik7CisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0wobDFfZGF0YV9zcmFtX2ZyZWUpOworCit2b2lkICpsMV9pbnN0X3NyYW1fYWxsb2Moc2l6ZV90IHNpemUpCit7CisjaWYgTDFfQ09ERV9MRU5HVEggIT0gMAorCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdm9pZCAqYWRkcjsKKworCS8qIGFkZCBtdXRleCBvcGVyYXRpb24gKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSgmbDFfaW5zdF9zcmFtX2xvY2ssIGZsYWdzKTsKKworCWFkZHIgPSBfc3JhbV9hbGxvYyhzaXplLCAmZnJlZV9sMV9pbnN0X3NyYW1faGVhZCwKKwkJCSZ1c2VkX2wxX2luc3Rfc3JhbV9oZWFkKTsKKworCS8qIGFkZCBtdXRleCBvcGVyYXRpb24gKi8KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZsMV9pbnN0X3NyYW1fbG9jaywgZmxhZ3MpOworCisJcHJfZGVidWcoIkFsbG9jYXRlZCBhZGRyZXNzIGluIGwxX2luc3Rfc3JhbV9hbGxvYyBpcyAweCVseCsweCVseFxuIiwKKwkJIChsb25nIHVuc2lnbmVkIGludClhZGRyLCBzaXplKTsKKworCXJldHVybiBhZGRyOworI2Vsc2UKKwlyZXR1cm4gTlVMTDsKKyNlbmRpZgorfQorRVhQT1JUX1NZTUJPTChsMV9pbnN0X3NyYW1fYWxsb2MpOworCitpbnQgbDFfaW5zdF9zcmFtX2ZyZWUoY29uc3Qgdm9pZCAqYWRkcikKK3sKKyNpZiBMMV9DT0RFX0xFTkdUSCAhPSAwCisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgcmV0OworCisJLyogYWRkIG11dGV4IG9wZXJhdGlvbiAqLworCXNwaW5fbG9ja19pcnFzYXZlKCZsMV9pbnN0X3NyYW1fbG9jaywgZmxhZ3MpOworCisJcmV0ID0gX3NyYW1fZnJlZShhZGRyLCAmZnJlZV9sMV9pbnN0X3NyYW1faGVhZCwKKwkJCSZ1c2VkX2wxX2luc3Rfc3JhbV9oZWFkKTsKKworCS8qIGFkZCBtdXRleCBvcGVyYXRpb24gKi8KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZsMV9pbnN0X3NyYW1fbG9jaywgZmxhZ3MpOworCisJcmV0dXJuIHJldDsKKyNlbHNlCisJcmV0dXJuIC0xOworI2VuZGlmCit9CitFWFBPUlRfU1lNQk9MKGwxX2luc3Rfc3JhbV9mcmVlKTsKKworLyogTDEgU2NyYXRjaHBhZCBtZW1vcnkgYWxsb2NhdGUgZnVuY3Rpb24gKi8KK3ZvaWQgKmwxc3JhbV9hbGxvYyhzaXplX3Qgc2l6ZSkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXZvaWQgKmFkZHI7CisKKwkvKiBhZGQgbXV0ZXggb3BlcmF0aW9uICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJmwxc3JhbV9sb2NrLCBmbGFncyk7CisKKwlhZGRyID0gX3NyYW1fYWxsb2Moc2l6ZSwgJmZyZWVfbDFfc3NyYW1faGVhZCwKKwkJCSZ1c2VkX2wxX3NzcmFtX2hlYWQpOworCisJLyogYWRkIG11dGV4IG9wZXJhdGlvbiAqLworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmwxc3JhbV9sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gYWRkcjsKK30KKworLyogTDEgU2NyYXRjaHBhZCBtZW1vcnkgYWxsb2NhdGUgZnVuY3Rpb24gKi8KK3ZvaWQgKmwxc3JhbV9hbGxvY19tYXgoc2l6ZV90ICpwc2l6ZSkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXZvaWQgKmFkZHI7CisKKwkvKiBhZGQgbXV0ZXggb3BlcmF0aW9uICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJmwxc3JhbV9sb2NrLCBmbGFncyk7CisKKwlhZGRyID0gX3NyYW1fYWxsb2NfbWF4KCZmcmVlX2wxX3NzcmFtX2hlYWQsCisJCQkmdXNlZF9sMV9zc3JhbV9oZWFkLCBwc2l6ZSk7CisKKwkvKiBhZGQgbXV0ZXggb3BlcmF0aW9uICovCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbDFzcmFtX2xvY2ssIGZsYWdzKTsKKworCXJldHVybiBhZGRyOworfQorCisvKiBMMSBTY3JhdGNocGFkIG1lbW9yeSBmcmVlIGZ1bmN0aW9uICovCitpbnQgbDFzcmFtX2ZyZWUoY29uc3Qgdm9pZCAqYWRkcikKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCByZXQ7CisKKwkvKiBhZGQgbXV0ZXggb3BlcmF0aW9uICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJmwxc3JhbV9sb2NrLCBmbGFncyk7CisKKwlyZXQgPSBfc3JhbV9mcmVlKGFkZHIsICZmcmVlX2wxX3NzcmFtX2hlYWQsCisJCQkmdXNlZF9sMV9zc3JhbV9oZWFkKTsKKworCS8qIGFkZCBtdXRleCBvcGVyYXRpb24gKi8KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZsMXNyYW1fbG9jaywgZmxhZ3MpOworCisJcmV0dXJuIHJldDsKK30KKwordm9pZCAqbDJfc3JhbV9hbGxvYyhzaXplX3Qgc2l6ZSkKK3sKKyNpZiBMMl9MRU5HVEggIT0gMAorCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdm9pZCAqYWRkcjsKKworCS8qIGFkZCBtdXRleCBvcGVyYXRpb24gKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSgmbDJfc3JhbV9sb2NrLCBmbGFncyk7CisKKwlhZGRyID0gX3NyYW1fYWxsb2Moc2l6ZSwgJmZyZWVfbDJfc3JhbV9oZWFkLAorCQkJJnVzZWRfbDJfc3JhbV9oZWFkKTsKKworCS8qIGFkZCBtdXRleCBvcGVyYXRpb24gKi8KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZsMl9zcmFtX2xvY2ssIGZsYWdzKTsKKworCXByX2RlYnVnKCJBbGxvY2F0ZWQgYWRkcmVzcyBpbiBsMl9zcmFtX2FsbG9jIGlzIDB4JWx4KzB4JWx4XG4iLAorCQkgKGxvbmcgdW5zaWduZWQgaW50KWFkZHIsIHNpemUpOworCisJcmV0dXJuIGFkZHI7CisjZWxzZQorCXJldHVybiBOVUxMOworI2VuZGlmCit9CitFWFBPUlRfU1lNQk9MKGwyX3NyYW1fYWxsb2MpOworCit2b2lkICpsMl9zcmFtX3phbGxvYyhzaXplX3Qgc2l6ZSkKK3sKKwl2b2lkICphZGRyID0gbDJfc3JhbV9hbGxvYyhzaXplKTsKKworCWlmIChhZGRyKQorCQltZW1zZXQoYWRkciwgMHgwMCwgc2l6ZSk7CisKKwlyZXR1cm4gYWRkcjsKK30KK0VYUE9SVF9TWU1CT0wobDJfc3JhbV96YWxsb2MpOworCitpbnQgbDJfc3JhbV9mcmVlKGNvbnN0IHZvaWQgKmFkZHIpCit7CisjaWYgTDJfTEVOR1RIICE9IDAKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCByZXQ7CisKKwkvKiBhZGQgbXV0ZXggb3BlcmF0aW9uICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJmwyX3NyYW1fbG9jaywgZmxhZ3MpOworCisJcmV0ID0gX3NyYW1fZnJlZShhZGRyLCAmZnJlZV9sMl9zcmFtX2hlYWQsCisJCQkmdXNlZF9sMl9zcmFtX2hlYWQpOworCisJLyogYWRkIG11dGV4IG9wZXJhdGlvbiAqLworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmwyX3NyYW1fbG9jaywgZmxhZ3MpOworCisJcmV0dXJuIHJldDsKKyNlbHNlCisJcmV0dXJuIC0xOworI2VuZGlmCit9CitFWFBPUlRfU1lNQk9MKGwyX3NyYW1fZnJlZSk7CisKK2ludCBzcmFtX2ZyZWVfd2l0aF9sc2woY29uc3Qgdm9pZCAqYWRkcikKK3sKKwlzdHJ1Y3Qgc3JhbV9saXN0X3N0cnVjdCAqbHNsLCAqKnRtcDsKKwlzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IGN1cnJlbnQtPm1tOworCisJZm9yICh0bXAgPSAmbW0tPmNvbnRleHQuc3JhbV9saXN0OyAqdG1wOyB0bXAgPSAmKCp0bXApLT5uZXh0KQorCQlpZiAoKCp0bXApLT5hZGRyID09IGFkZHIpCisJCQlnb3RvIGZvdW5kOworCXJldHVybiAtMTsKK2ZvdW5kOgorCWxzbCA9ICp0bXA7CisJc3JhbV9mcmVlKGFkZHIpOworCSp0bXAgPSBsc2wtPm5leHQ7CisJa2ZyZWUobHNsKTsKKworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTChzcmFtX2ZyZWVfd2l0aF9sc2wpOworCit2b2lkICpzcmFtX2FsbG9jX3dpdGhfbHNsKHNpemVfdCBzaXplLCB1bnNpZ25lZCBsb25nIGZsYWdzKQoreworCXZvaWQgKmFkZHIgPSBOVUxMOworCXN0cnVjdCBzcmFtX2xpc3Rfc3RydWN0ICpsc2wgPSBOVUxMOworCXN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gY3VycmVudC0+bW07CisKKwlsc2wgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgc3JhbV9saXN0X3N0cnVjdCksIEdGUF9LRVJORUwpOworCWlmICghbHNsKQorCQlyZXR1cm4gTlVMTDsKKworCWlmIChmbGFncyAmIEwxX0lOU1RfU1JBTSkKKwkJYWRkciA9IGwxX2luc3Rfc3JhbV9hbGxvYyhzaXplKTsKKworCWlmIChhZGRyID09IE5VTEwgJiYgKGZsYWdzICYgTDFfREFUQV9BX1NSQU0pKQorCQlhZGRyID0gbDFfZGF0YV9BX3NyYW1fYWxsb2Moc2l6ZSk7CisKKwlpZiAoYWRkciA9PSBOVUxMICYmIChmbGFncyAmIEwxX0RBVEFfQl9TUkFNKSkKKwkJYWRkciA9IGwxX2RhdGFfQl9zcmFtX2FsbG9jKHNpemUpOworCisJaWYgKGFkZHIgPT0gTlVMTCAmJiAoZmxhZ3MgJiBMMl9TUkFNKSkKKwkJYWRkciA9IGwyX3NyYW1fYWxsb2Moc2l6ZSk7CisKKwlpZiAoYWRkciA9PSBOVUxMKSB7CisJCWtmcmVlKGxzbCk7CisJCXJldHVybiBOVUxMOworCX0KKwlsc2wtPmFkZHIgPSBhZGRyOworCWxzbC0+bGVuZ3RoID0gc2l6ZTsKKwlsc2wtPm5leHQgPSBtbS0+Y29udGV4dC5zcmFtX2xpc3Q7CisJbW0tPmNvbnRleHQuc3JhbV9saXN0ID0gbHNsOworCXJldHVybiBhZGRyOworfQorRVhQT1JUX1NZTUJPTChzcmFtX2FsbG9jX3dpdGhfbHNsKTsKKworI2lmZGVmIENPTkZJR19QUk9DX0ZTCisvKiBPbmNlIHdlIGdldCBhIHJlYWwgYWxsb2NhdG9yLCB3ZSdsbCB0aHJvdyBhbGwgb2YgdGhpcyBhd2F5LgorICogVW50aWwgdGhlbiwgd2UgbmVlZCBzb21lIHNvcnQgb2YgdmlzaWJpbGl0eSBpbnRvIHRoZSBMMSBhbGxvYy4KKyAqLworLyogTmVlZCB0byBrZWVwIGxpbmUgb2Ygb3V0cHV0IHRoZSBzYW1lLiAgQ3VycmVudGx5LCB0aGF0IGlzIDQ0IGJ5dGVzCisgKiAoaW5jbHVkaW5nIG5ld2xpbmUpLgorICovCitzdGF0aWMgaW50IF9zcmFtX3Byb2NfcmVhZChjaGFyICpidWYsIGludCAqbGVuLCBpbnQgY291bnQsIGNvbnN0IGNoYXIgKmRlc2MsCisJCXN0cnVjdCBzcmFtX3BpZWNlICpwZnJlZV9oZWFkLAorCQlzdHJ1Y3Qgc3JhbV9waWVjZSAqcHVzZWRfaGVhZCkKK3sKKwlzdHJ1Y3Qgc3JhbV9waWVjZSAqcHNsb3Q7CisKKwlpZiAoIXBmcmVlX2hlYWQgfHwgIXB1c2VkX2hlYWQpCisJCXJldHVybiAtMTsKKworCSpsZW4gKz0gc3ByaW50ZigmYnVmWypsZW5dLCAiLS0tIFNSQU0gJS0xNHMgU2l6ZSAgIFBJRCBTdGF0ZSAgICAgXG4iLCBkZXNjKTsKKworCS8qIHNlYXJjaCB0aGUgcmVsZXZhbnQgbWVtb3J5IHNsb3QgKi8KKwlwc2xvdCA9IHB1c2VkX2hlYWQtPm5leHQ7CisKKwl3aGlsZSAocHNsb3QgIT0gTlVMTCkgeworCQkqbGVuICs9IHNwcmludGYoJmJ1ZlsqbGVuXSwgIiVwLSVwICUxMGkgJTVpICUtMTBzXG4iLAorCQkJcHNsb3QtPnBhZGRyLCBwc2xvdC0+cGFkZHIgKyBwc2xvdC0+c2l6ZSwKKwkJCXBzbG90LT5zaXplLCBwc2xvdC0+cGlkLCAiQUxMT0NBVEVEIik7CisKKwkJcHNsb3QgPSBwc2xvdC0+bmV4dDsKKwl9CisKKwlwc2xvdCA9IHBmcmVlX2hlYWQtPm5leHQ7CisKKwl3aGlsZSAocHNsb3QgIT0gTlVMTCkgeworCQkqbGVuICs9IHNwcmludGYoJmJ1ZlsqbGVuXSwgIiVwLSVwICUxMGkgJTVpICUtMTBzXG4iLAorCQkJcHNsb3QtPnBhZGRyLCBwc2xvdC0+cGFkZHIgKyBwc2xvdC0+c2l6ZSwKKwkJCXBzbG90LT5zaXplLCBwc2xvdC0+cGlkLCAiRlJFRSIpOworCisJCXBzbG90ID0gcHNsb3QtPm5leHQ7CisJfQorCisJcmV0dXJuIDA7Cit9CitzdGF0aWMgaW50IHNyYW1fcHJvY19yZWFkKGNoYXIgKmJ1ZiwgY2hhciAqKnN0YXJ0LCBvZmZfdCBvZmZzZXQsIGludCBjb3VudCwKKwkJaW50ICplb2YsIHZvaWQgKmRhdGEpCit7CisJaW50IGxlbiA9IDA7CisKKwlpZiAoX3NyYW1fcHJvY19yZWFkKGJ1ZiwgJmxlbiwgY291bnQsICJTY3JhdGNocGFkIiwKKwkJCSZmcmVlX2wxX3NzcmFtX2hlYWQsICZ1c2VkX2wxX3NzcmFtX2hlYWQpKQorCQlnb3RvIG5vdF9kb25lOworI2lmIEwxX0RBVEFfQV9MRU5HVEggIT0gMAorCWlmIChfc3JhbV9wcm9jX3JlYWQoYnVmLCAmbGVuLCBjb3VudCwgIkwxIERhdGEgQSIsCisJCQkmZnJlZV9sMV9kYXRhX0Ffc3JhbV9oZWFkLAorCQkJJnVzZWRfbDFfZGF0YV9BX3NyYW1faGVhZCkpCisJCWdvdG8gbm90X2RvbmU7CisjZW5kaWYKKyNpZiBMMV9EQVRBX0JfTEVOR1RIICE9IDAKKwlpZiAoX3NyYW1fcHJvY19yZWFkKGJ1ZiwgJmxlbiwgY291bnQsICJMMSBEYXRhIEIiLAorCQkJJmZyZWVfbDFfZGF0YV9CX3NyYW1faGVhZCwKKwkJCSZ1c2VkX2wxX2RhdGFfQl9zcmFtX2hlYWQpKQorCQlnb3RvIG5vdF9kb25lOworI2VuZGlmCisjaWYgTDFfQ09ERV9MRU5HVEggIT0gMAorCWlmIChfc3JhbV9wcm9jX3JlYWQoYnVmLCAmbGVuLCBjb3VudCwgIkwxIEluc3RydWN0aW9uIiwKKwkJCSZmcmVlX2wxX2luc3Rfc3JhbV9oZWFkLCAmdXNlZF9sMV9pbnN0X3NyYW1faGVhZCkpCisJCWdvdG8gbm90X2RvbmU7CisjZW5kaWYKKyNpZiBMMl9MRU5HVEggIT0gMAorCWlmIChfc3JhbV9wcm9jX3JlYWQoYnVmLCAmbGVuLCBjb3VudCwgIkwyIiwKKwkJCSZmcmVlX2wyX3NyYW1faGVhZCwgJnVzZWRfbDJfc3JhbV9oZWFkKSkKKwkJZ290byBub3RfZG9uZTsKKyNlbmRpZgorCisJKmVvZiA9IDE7Cisgbm90X2RvbmU6CisJcmV0dXJuIGxlbjsKK30KKworc3RhdGljIGludCBfX2luaXQgc3JhbV9wcm9jX2luaXQodm9pZCkKK3sKKwlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnB0cjsKKwlwdHIgPSBjcmVhdGVfcHJvY19lbnRyeSgic3JhbSIsIFNfSUZSRUcgfCBTX0lSVUdPLCBOVUxMKTsKKwlpZiAoIXB0cikgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICJ1bmFibGUgdG8gY3JlYXRlIC9wcm9jL3NyYW1cbiIpOworCQlyZXR1cm4gLTE7CisJfQorCXB0ci0+b3duZXIgPSBUSElTX01PRFVMRTsKKwlwdHItPnJlYWRfcHJvYyA9IHNyYW1fcHJvY19yZWFkOworCXJldHVybiAwOworfQorbGF0ZV9pbml0Y2FsbChzcmFtX3Byb2NfaW5pdCk7CisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvY3Jpcy9LY29uZmlnIGIvYXJjaC9jcmlzL0tjb25maWcKaW5kZXggOTM4OWQzOC4uMDczMzVlNyAxMDA2NDQKLS0tIGEvYXJjaC9jcmlzL0tjb25maWcKKysrIGIvYXJjaC9jcmlzL0tjb25maWcKQEAgLTYyLDYgKzYyLDggQEAKIAogc291cmNlICJpbml0L0tjb25maWciCiAKK3NvdXJjZSAia2VybmVsL0tjb25maWcuZnJlZXplciIKKwogbWVudSAiR2VuZXJhbCBzZXR1cCIKIAogc291cmNlICJmcy9LY29uZmlnLmJpbmZtdCIKZGlmZiAtLWdpdCBhL2FyY2gvY3Jpcy9NYWtlZmlsZSBiL2FyY2gvY3Jpcy9NYWtlZmlsZQppbmRleCA4MzhjZDJhLi5jNmY1ZjVhIDEwMDY0NAotLS0gYS9hcmNoL2NyaXMvTWFrZWZpbGUKKysrIGIvYXJjaC9jcmlzL01ha2VmaWxlCkBAIC0xMCw2ICsxMCw4IEBACiAjIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKICMgZm9yIG1vcmUgZGV0YWlscy4KIAorS0JVSUxEX0RFRkNPTkZJRyA6PSBldHJheC0xMDBseF92Ml9kZWZjb25maWcKKwogYXJjaC15IDo9IHYxMAogYXJjaC0kKENPTkZJR19FVFJBWF9BUkNIX1YxMCkgOj0gdjEwCiBhcmNoLSQoQ09ORklHX0VUUkFYX0FSQ0hfVjMyKSA6PSB2MzIKZGlmZiAtLWdpdCBhL2FyY2gvY3Jpcy9hcmNoLXYxMC9ib290L2NvbXByZXNzZWQvTWFrZWZpbGUgYi9hcmNoL2NyaXMvYXJjaC12MTAvYm9vdC9jb21wcmVzc2VkL01ha2VmaWxlCmluZGV4IDA4ZDk0M2MuLjZmZTBmZmEgMTAwNjQ0Ci0tLSBhL2FyY2gvY3Jpcy9hcmNoLXYxMC9ib290L2NvbXByZXNzZWQvTWFrZWZpbGUKKysrIGIvYXJjaC9jcmlzL2FyY2gtdjEwL2Jvb3QvY29tcHJlc3NlZC9NYWtlZmlsZQpAQCAtNCw3ICs0LDcgQEAKIAogYXNmbGFncy15ICs9ICQoTElOVVhJTkNMVURFKQogY2NmbGFncy15ICs9IC1PMiAkKExJTlVYSU5DTFVERSkKLWxkZmxhZ3MteSArPSAtVCAkKHNyY3RyZWUpLyQob2JqKS9kZWNvbXByZXNzLmxkCitsZGZsYWdzLXkgKz0gLVQgJChzcmN0cmVlKS8kKHNyYykvZGVjb21wcmVzcy5sZHMKIE9CSkVDVFMgPSAkKG9iaikvaGVhZC5vICQob2JqKS9taXNjLm8KIE9CSkNPUFlGTEFHUyA9IC1PIGJpbmFyeSAtLXJlbW92ZS1zZWN0aW9uPS5ic3MKIApkaWZmIC0tZ2l0IGEvYXJjaC9jcmlzL2FyY2gtdjEwL2Jvb3QvY29tcHJlc3NlZC9kZWNvbXByZXNzLmxkIGIvYXJjaC9jcmlzL2FyY2gtdjEwL2Jvb3QvY29tcHJlc3NlZC9kZWNvbXByZXNzLmxkcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYXJjaC9jcmlzL2FyY2gtdjEwL2Jvb3QvY29tcHJlc3NlZC9kZWNvbXByZXNzLmxkCnJlbmFtZSB0byBhcmNoL2NyaXMvYXJjaC12MTAvYm9vdC9jb21wcmVzc2VkL2RlY29tcHJlc3MubGRzCmRpZmYgLS1naXQgYS9hcmNoL2NyaXMvYXJjaC12MTAvYm9vdC9yZXNjdWUvTWFrZWZpbGUgYi9hcmNoL2NyaXMvYXJjaC12MTAvYm9vdC9yZXNjdWUvTWFrZWZpbGUKaW5kZXggMDc2ODhkYS4uODJhYjU5YiAxMDA2NDQKLS0tIGEvYXJjaC9jcmlzL2FyY2gtdjEwL2Jvb3QvcmVzY3VlL01ha2VmaWxlCisrKyBiL2FyY2gvY3Jpcy9hcmNoLXYxMC9ib290L3Jlc2N1ZS9NYWtlZmlsZQpAQCAtNCw3ICs0LDcgQEAKIAogY2NmbGFncy15ICs9IC1PMiAkKExJTlVYSU5DTFVERSkKIGFzZmxhZ3MteSArPSAkKExJTlVYSU5DTFVERSkKLWxkZmxhZ3MteSArPSAtVCAkKHNyY3RyZWUpLyQob2JqKS9yZXNjdWUubGQKK2xkZmxhZ3MteSArPSAtVCAkKHNyY3RyZWUpLyQoc3JjKS9yZXNjdWUubGRzCiBPQkpDT1BZRkxBR1MgPSAtTyBiaW5hcnkgLS1yZW1vdmUtc2VjdGlvbj0uYnNzCiBvYmotJChDT05GSUdfRVRSQVhfQVhJU0ZMQVNITUFQKSA9IGhlYWQubwogT0JKRUNUIDo9ICQob2JqKS9oZWFkLm8KZGlmZiAtLWdpdCBhL2FyY2gvY3Jpcy9hcmNoLXYxMC9ib290L3Jlc2N1ZS9yZXNjdWUubGQgYi9hcmNoL2NyaXMvYXJjaC12MTAvYm9vdC9yZXNjdWUvcmVzY3VlLmxkcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYXJjaC9jcmlzL2FyY2gtdjEwL2Jvb3QvcmVzY3VlL3Jlc2N1ZS5sZApyZW5hbWUgdG8gYXJjaC9jcmlzL2FyY2gtdjEwL2Jvb3QvcmVzY3VlL3Jlc2N1ZS5sZHMKZGlmZiAtLWdpdCBhL2FyY2gvY3Jpcy9hcmNoLXYxMC9ib290L3Rvb2xzL2J1aWxkLmMgYi9hcmNoL2NyaXMvYXJjaC12MTAvYm9vdC90b29scy9idWlsZC5jCmluZGV4IDJmOWJiYjIuLmM4YWRlZjMgMTAwNjQ0Ci0tLSBhL2FyY2gvY3Jpcy9hcmNoLXYxMC9ib290L3Rvb2xzL2J1aWxkLmMKKysrIGIvYXJjaC9jcmlzL2FyY2gtdjEwL2Jvb3QvdG9vbHMvYnVpbGQuYwpAQCAtMzAsNyArMzAsNiBAQAogI2luY2x1ZGUgPHN5cy9zeXNtYWNyb3MuaD4KICNpbmNsdWRlIDx1bmlzdGQuaD4JLyogY29udGFpbnMgcmVhZC93cml0ZSAqLwogI2luY2x1ZGUgPGZjbnRsLmg+Ci0jaW5jbHVkZSA8bGludXgvYS5vdXQuaD4KICNpbmNsdWRlIDxlcnJuby5oPgogCiAjZGVmaW5lIE1JTklYX0hFQURFUiAzMgpkaWZmIC0tZ2l0IGEvYXJjaC9jcmlzL2FyY2gtdjEwL2RyaXZlcnMvZHMxMzAyLmMgYi9hcmNoL2NyaXMvYXJjaC12MTAvZHJpdmVycy9kczEzMDIuYwppbmRleCBjOWFhMzkwLi4zYmRmYWY0IDEwMDY0NAotLS0gYS9hcmNoL2NyaXMvYXJjaC12MTAvZHJpdmVycy9kczEzMDIuYworKysgYi9hcmNoL2NyaXMvYXJjaC12MTAvZHJpdmVycy9kczEzMDIuYwpAQCAtMjE1LDEyICsyMTUsMTIgQEAKIAogCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIAkKLQlCQ0RfVE9fQklOKHJ0Y190bS0+dG1fc2VjKTsKLQlCQ0RfVE9fQklOKHJ0Y190bS0+dG1fbWluKTsKLQlCQ0RfVE9fQklOKHJ0Y190bS0+dG1faG91cik7Ci0JQkNEX1RPX0JJTihydGNfdG0tPnRtX21kYXkpOwotCUJDRF9UT19CSU4ocnRjX3RtLT50bV9tb24pOwotCUJDRF9UT19CSU4ocnRjX3RtLT50bV95ZWFyKTsKKwlydGNfdG0tPnRtX3NlYyA9IGJjZDJiaW4ocnRjX3RtLT50bV9zZWMpOworCXJ0Y190bS0+dG1fbWluID0gYmNkMmJpbihydGNfdG0tPnRtX21pbik7CisJcnRjX3RtLT50bV9ob3VyID0gYmNkMmJpbihydGNfdG0tPnRtX2hvdXIpOworCXJ0Y190bS0+dG1fbWRheSA9IGJjZDJiaW4ocnRjX3RtLT50bV9tZGF5KTsKKwlydGNfdG0tPnRtX21vbiA9IGJjZDJiaW4ocnRjX3RtLT50bV9tb24pOworCXJ0Y190bS0+dG1feWVhciA9IGJjZDJiaW4ocnRjX3RtLT50bV95ZWFyKTsKIAogCS8qCiAJICogQWNjb3VudCBmb3IgZGlmZmVyZW5jZXMgYmV0d2VlbiBob3cgdGhlIFJUQyB1c2VzIHRoZSB2YWx1ZXMKQEAgLTI5NSwxMiArMjk1LDEyIEBACiAJCQllbHNlCiAJCQkJeXJzIC09IDE5MDA7CS8qIFJUQyAoNzAsIDcxLCAuLi4gOTkpICovCiAKLQkJCUJJTl9UT19CQ0Qoc2VjKTsKLQkJCUJJTl9UT19CQ0QobWluKTsKLQkJCUJJTl9UT19CQ0QoaHJzKTsKLQkJCUJJTl9UT19CQ0QoZGF5KTsKLQkJCUJJTl9UT19CQ0QobW9uKTsKLQkJCUJJTl9UT19CQ0QoeXJzKTsKKwkJCXNlYyA9IGJpbjJiY2Qoc2VjKTsKKwkJCW1pbiA9IGJpbjJiY2QobWluKTsKKwkJCWhycyA9IGJpbjJiY2QoaHJzKTsKKwkJCWRheSA9IGJpbjJiY2QoZGF5KTsKKwkJCW1vbiA9IGJpbjJiY2QobW9uKTsKKwkJCXlycyA9IGJpbjJiY2QoeXJzKTsKIAogCQkJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwogCQkJQ01PU19XUklURSh5cnMsIFJUQ19ZRUFSKTsKZGlmZiAtLWdpdCBhL2FyY2gvY3Jpcy9hcmNoLXYxMC9kcml2ZXJzL3BjZjg1NjMuYyBiL2FyY2gvY3Jpcy9hcmNoLXYxMC9kcml2ZXJzL3BjZjg1NjMuYwppbmRleCA4NzY5ZGM5MS4uMWU5MGMxYSAxMDA2NDQKLS0tIGEvYXJjaC9jcmlzL2FyY2gtdjEwL2RyaXZlcnMvcGNmODU2My5jCisrKyBiL2FyY2gvY3Jpcy9hcmNoLXYxMC9kcml2ZXJzL3BjZjg1NjMuYwpAQCAtMTIyLDcgKzEyMiw3IEBACiAJCSAgICAgICAiaW5mb3JtYXRpb24gaXMgbm8gbG9uZ2VyIGd1YXJhbnRlZWQhXG4iLCBQQ0Y4NTYzX05BTUUpOwogCX0KIAotCXRtLT50bV95ZWFyICA9IEJDRF9UT19CSU4odG0tPnRtX3llYXIpICsKKwl0bS0+dG1feWVhciAgPSBiY2QyYmluKHRtLT50bV95ZWFyKSArCiAJCSAgICAgICAoKHRtLT50bV9tb24gJiAweDgwKSA/IDEwMCA6IDApOwogCXRtLT50bV9zZWMgICY9IDB4N0Y7CiAJdG0tPnRtX21pbiAgJj0gMHg3RjsKQEAgLTEzMSwxMSArMTMxLDExIEBACiAJdG0tPnRtX3dkYXkgJj0gMHgwNzsgLyogTm90IGNvZGVkIGluIEJDRC4gKi8KIAl0bS0+dG1fbW9uICAmPSAweDFGOwogCi0JQkNEX1RPX0JJTih0bS0+dG1fc2VjKTsKLQlCQ0RfVE9fQklOKHRtLT50bV9taW4pOwotCUJDRF9UT19CSU4odG0tPnRtX2hvdXIpOwotCUJDRF9UT19CSU4odG0tPnRtX21kYXkpOwotCUJDRF9UT19CSU4odG0tPnRtX21vbik7CisJdG0tPnRtX3NlYyA9IGJjZDJiaW4odG0tPnRtX3NlYyk7CisJdG0tPnRtX21pbiA9IGJjZDJiaW4odG0tPnRtX21pbik7CisJdG0tPnRtX2hvdXIgPSBiY2QyYmluKHRtLT50bV9ob3VyKTsKKwl0bS0+dG1fbWRheSA9IGJjZDJiaW4odG0tPnRtX21kYXkpOworCXRtLT50bV9tb24gPSBiY2QyYmluKHRtLT50bV9tb24pOwogCXRtLT50bV9tb24tLTsgLyogTW9udGggaXMgMS4uMTIgaW4gUlRDIGJ1dCAwLi4xMSBpbiBsaW51eCAqLwogfQogCkBAIC0yODIsMTIgKzI4MiwxMiBAQAogCQljZW50dXJ5ID0gKHRtLnRtX3llYXIgPj0gMjAwMCkgPyAweDgwIDogMDsKIAkJdG0udG1feWVhciA9IHRtLnRtX3llYXIgJSAxMDA7CiAKLQkJQklOX1RPX0JDRCh0bS50bV95ZWFyKTsKLQkJQklOX1RPX0JDRCh0bS50bV9tb24pOwotCQlCSU5fVE9fQkNEKHRtLnRtX21kYXkpOwotCQlCSU5fVE9fQkNEKHRtLnRtX2hvdXIpOwotCQlCSU5fVE9fQkNEKHRtLnRtX21pbik7Ci0JCUJJTl9UT19CQ0QodG0udG1fc2VjKTsKKwkJdG0udG1feWVhciA9IGJpbjJiY2QodG0udG1feWVhcik7CisJCXRtLnRtX21vbiA9IGJpbjJiY2QodG0udG1fbW9uKTsKKwkJdG0udG1fbWRheSA9IGJpbjJiY2QodG0udG1fbWRheSk7CisJCXRtLnRtX2hvdXIgPSBiaW4yYmNkKHRtLnRtX2hvdXIpOworCQl0bS50bV9taW4gPSBiaW4yYmNkKHRtLnRtX21pbik7CisJCXRtLnRtX3NlYyA9IGJpbjJiY2QodG0udG1fc2VjKTsKIAkJdG0udG1fbW9uIHw9IGNlbnR1cnk7CiAKIAkJbXV0ZXhfbG9jaygmcnRjX2xvY2spOwpkaWZmIC0tZ2l0IGEvYXJjaC9jcmlzL2FyY2gtdjMyL2Jvb3QvY29tcHJlc3NlZC9NYWtlZmlsZSBiL2FyY2gvY3Jpcy9hcmNoLXYzMi9ib290L2NvbXByZXNzZWQvTWFrZWZpbGUKaW5kZXggZDYzMzVmMi4uNWExYjMxYyAxMDA2NDQKLS0tIGEvYXJjaC9jcmlzL2FyY2gtdjMyL2Jvb3QvY29tcHJlc3NlZC9NYWtlZmlsZQorKysgYi9hcmNoL2NyaXMvYXJjaC12MzIvYm9vdC9jb21wcmVzc2VkL01ha2VmaWxlCkBAIC00LDcgKzQsNyBAQAogCiBhc2ZsYWdzLXkgKz0gLUkgJChzcmN0cmVlKS9pbmNsdWRlL2FzbS9tYWNoLyAtSSAkKHNyY3RyZWUpL2luY2x1ZGUvYXNtL2FyY2gKIGNjZmxhZ3MteSArPSAtTzIgLUkgJChzcmN0cmVlKS9pbmNsdWRlL2FzbS9tYWNoLyAtSSAkKHNyY3RyZWUpL2luY2x1ZGUvYXNtL2FyY2gKLWxkZmxhZ3MteSArPSAtVCAkKHNyY3RyZWUpLyQob2JqKS9kZWNvbXByZXNzLmxkCitsZGZsYWdzLXkgKz0gLVQgJChzcmN0cmVlKS8kKHNyYykvZGVjb21wcmVzcy5sZHMKIE9CSkVDVFMgPSAkKG9iaikvaGVhZC5vICQob2JqKS9taXNjLm8KIE9CSkNPUFlGTEFHUyA9IC1PIGJpbmFyeSAtLXJlbW92ZS1zZWN0aW9uPS5ic3MKIApkaWZmIC0tZ2l0IGEvYXJjaC9jcmlzL2FyY2gtdjMyL2Jvb3QvY29tcHJlc3NlZC9kZWNvbXByZXNzLmxkIGIvYXJjaC9jcmlzL2FyY2gtdjMyL2Jvb3QvY29tcHJlc3NlZC9kZWNvbXByZXNzLmxkcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYXJjaC9jcmlzL2FyY2gtdjMyL2Jvb3QvY29tcHJlc3NlZC9kZWNvbXByZXNzLmxkCnJlbmFtZSB0byBhcmNoL2NyaXMvYXJjaC12MzIvYm9vdC9jb21wcmVzc2VkL2RlY29tcHJlc3MubGRzCmRpZmYgLS1naXQgYS9hcmNoL2NyaXMvYXJjaC12MzIvYm9vdC9yZXNjdWUvTWFrZWZpbGUgYi9hcmNoL2NyaXMvYXJjaC12MzIvYm9vdC9yZXNjdWUvTWFrZWZpbGUKaW5kZXggNDRhZTBhZC4uNTY2YWFjNiAxMDA2NDQKLS0tIGEvYXJjaC9jcmlzL2FyY2gtdjMyL2Jvb3QvcmVzY3VlL01ha2VmaWxlCisrKyBiL2FyY2gvY3Jpcy9hcmNoLXYzMi9ib290L3Jlc2N1ZS9NYWtlZmlsZQpAQCAtNyw3ICs3LDcgQEAKIAkJLUkgJChzcmN0cmVlKS9pbmNsdWRlL2FzbS9hcmNoCiBhc2ZsYWdzLXkgKz0gLUkgJChzcmN0cmVlKS9pbmNsdWRlL2FzbS9hcmNoL21hY2gvIC1JICQoc3JjdHJlZSkvaW5jbHVkZS9hc20vYXJjaAogTEQgPSBnY2MtY3JpcyAtbWxpbnV4IC1tYXJjaD12MzIgLW5vc3RkbGliCi1sZGZsYWdzLXkgKz0gLVQgJChzcmN0cmVlKS8kKG9iaikvcmVzY3VlLmxkCitsZGZsYWdzLXkgKz0gLVQgJChzcmN0cmVlKS8kKHNyYykvcmVzY3VlLmxkcwogTERQT1NURkxBR1MgPSAtbGdjYwogT0JKQ09QWUZMQUdTID0gLU8gYmluYXJ5IC0tcmVtb3ZlLXNlY3Rpb249LmJzcwogb2JqLSQoQ09ORklHX0VUUkFYX0FYSVNGTEFTSE1BUCkgPSBoZWFkLm8KZGlmZiAtLWdpdCBhL2FyY2gvY3Jpcy9hcmNoLXYzMi9ib290L3Jlc2N1ZS9yZXNjdWUubGQgYi9hcmNoL2NyaXMvYXJjaC12MzIvYm9vdC9yZXNjdWUvcmVzY3VlLmxkcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYXJjaC9jcmlzL2FyY2gtdjMyL2Jvb3QvcmVzY3VlL3Jlc2N1ZS5sZApyZW5hbWUgdG8gYXJjaC9jcmlzL2FyY2gtdjMyL2Jvb3QvcmVzY3VlL3Jlc2N1ZS5sZHMKZGlmZiAtLWdpdCBhL2FyY2gvY3Jpcy9hcmNoLXYzMi9kcml2ZXJzL3BjZjg1NjMuYyBiL2FyY2gvY3Jpcy9hcmNoLXYzMi9kcml2ZXJzL3BjZjg1NjMuYwppbmRleCBmMjYzYWI1Li5mNDQ3ODUwIDEwMDY0NAotLS0gYS9hcmNoL2NyaXMvYXJjaC12MzIvZHJpdmVycy9wY2Y4NTYzLmMKKysrIGIvYXJjaC9jcmlzL2FyY2gtdjMyL2RyaXZlcnMvcGNmODU2My5jCkBAIC0xMTgsNyArMTE4LDcgQEAKIAkJICAgICAgICJpbmZvcm1hdGlvbiBpcyBubyBsb25nZXIgZ3VhcmFudGVlZCFcbiIsIFBDRjg1NjNfTkFNRSk7CiAJfQogCi0JdG0tPnRtX3llYXIgID0gQkNEX1RPX0JJTih0bS0+dG1feWVhcikgKworCXRtLT50bV95ZWFyICA9IGJjZDJiaW4odG0tPnRtX3llYXIpICsKIAkJICAgICAgICgodG0tPnRtX21vbiAmIDB4ODApID8gMTAwIDogMCk7CiAJdG0tPnRtX3NlYyAgJj0gMHg3RjsKIAl0bS0+dG1fbWluICAmPSAweDdGOwpAQCAtMTI3LDExICsxMjcsMTEgQEAKIAl0bS0+dG1fd2RheSAmPSAweDA3OyAvKiBOb3QgY29kZWQgaW4gQkNELiAqLwogCXRtLT50bV9tb24gICY9IDB4MUY7CiAKLQlCQ0RfVE9fQklOKHRtLT50bV9zZWMpOwotCUJDRF9UT19CSU4odG0tPnRtX21pbik7Ci0JQkNEX1RPX0JJTih0bS0+dG1faG91cik7Ci0JQkNEX1RPX0JJTih0bS0+dG1fbWRheSk7Ci0JQkNEX1RPX0JJTih0bS0+dG1fbW9uKTsKKwl0bS0+dG1fc2VjID0gYmNkMmJpbih0bS0+dG1fc2VjKTsKKwl0bS0+dG1fbWluID0gYmNkMmJpbih0bS0+dG1fbWluKTsKKwl0bS0+dG1faG91ciA9IGJjZDJiaW4odG0tPnRtX2hvdXIpOworCXRtLT50bV9tZGF5ID0gYmNkMmJpbih0bS0+dG1fbWRheSk7CisJdG0tPnRtX21vbiA9IGJjZDJiaW4odG0tPnRtX21vbik7CiAJdG0tPnRtX21vbi0tOyAvKiBNb250aCBpcyAxLi4xMiBpbiBSVEMgYnV0IDAuLjExIGluIGxpbnV4ICovCiB9CiAKQEAgLTI3OSwxMiArMjc5LDEyIEBACiAJCWNlbnR1cnkgPSAodG0udG1feWVhciA+PSAyMDAwKSA/IDB4ODAgOiAwOwogCQl0bS50bV95ZWFyID0gdG0udG1feWVhciAlIDEwMDsKIAotCQlCSU5fVE9fQkNEKHRtLnRtX3llYXIpOwotCQlCSU5fVE9fQkNEKHRtLnRtX21vbik7Ci0JCUJJTl9UT19CQ0QodG0udG1fbWRheSk7Ci0JCUJJTl9UT19CQ0QodG0udG1faG91cik7Ci0JCUJJTl9UT19CQ0QodG0udG1fbWluKTsKLQkJQklOX1RPX0JDRCh0bS50bV9zZWMpOworCQl0bS50bV95ZWFyID0gYmluMmJjZCh0bS50bV95ZWFyKTsKKwkJdG0udG1fbW9uID0gYmluMmJjZCh0bS50bV9tb24pOworCQl0bS50bV9tZGF5ID0gYmluMmJjZCh0bS50bV9tZGF5KTsKKwkJdG0udG1faG91ciA9IGJpbjJiY2QodG0udG1faG91cik7CisJCXRtLnRtX21pbiA9IGJpbjJiY2QodG0udG1fbWluKTsKKwkJdG0udG1fc2VjID0gYmluMmJjZCh0bS50bV9zZWMpOwogCQl0bS50bV9tb24gfD0gY2VudHVyeTsKIAogCQltdXRleF9sb2NrKCZydGNfbG9jayk7CmRpZmYgLS1naXQgYS9hcmNoL2NyaXMvYXJjaC12MzIvbWFjaC1hMy9jcHVmcmVxLmMgYi9hcmNoL2NyaXMvYXJjaC12MzIvbWFjaC1hMy9jcHVmcmVxLmMKaW5kZXggOGU1YTNjYS4uZWUzOTFlYyAxMDA2NDQKLS0tIGEvYXJjaC9jcmlzL2FyY2gtdjMyL21hY2gtYTMvY3B1ZnJlcS5jCisrKyBiL2FyY2gvY3Jpcy9hcmNoLXYzMi9tYWNoLWEzL2NwdWZyZXEuYwpAQCAtODUsNyArODUsNiBAQAogCWludCByZXN1bHQ7CiAKIAkvKiBjcHVpbmZvIGFuZCBkZWZhdWx0IHBvbGljeSB2YWx1ZXMgKi8KLQlwb2xpY3ktPmdvdmVybm9yID0gQ1BVRlJFUV9ERUZBVUxUX0dPVkVSTk9SOwogCXBvbGljeS0+Y3B1aW5mby50cmFuc2l0aW9uX2xhdGVuY3kgPSAxMDAwMDAwOyAvKiAxbXMgKi8KIAlwb2xpY3ktPmN1ciA9IGNyaXNfZnJlcV9nZXRfY3B1X2ZyZXF1ZW5jeSgwKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9jcmlzL2FyY2gtdjMyL21hY2gtZnMvY3B1ZnJlcS5jIGIvYXJjaC9jcmlzL2FyY2gtdjMyL21hY2gtZnMvY3B1ZnJlcS5jCmluZGV4IGQ1NzYzMWMuLjU4YmQ3MWUgMTAwNjQ0Ci0tLSBhL2FyY2gvY3Jpcy9hcmNoLXYzMi9tYWNoLWZzL2NwdWZyZXEuYworKysgYi9hcmNoL2NyaXMvYXJjaC12MzIvbWFjaC1mcy9jcHVmcmVxLmMKQEAgLTgxLDcgKzgxLDYgQEAKIAlpbnQgcmVzdWx0OwogCiAJLyogY3B1aW5mbyBhbmQgZGVmYXVsdCBwb2xpY3kgdmFsdWVzICovCi0JcG9saWN5LT5nb3Zlcm5vciA9IENQVUZSRVFfREVGQVVMVF9HT1ZFUk5PUjsKIAlwb2xpY3ktPmNwdWluZm8udHJhbnNpdGlvbl9sYXRlbmN5ID0gMTAwMDAwMDsJLyogMW1zICovCiAJcG9saWN5LT5jdXIgPSBjcmlzX2ZyZXFfZ2V0X2NwdV9mcmVxdWVuY3koMCk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvY3Jpcy9hcnRwZWNfM19kZWZjb25maWcgYi9hcmNoL2NyaXMvY29uZmlncy9hcnRwZWNfM19kZWZjb25maWcKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFyY2gvY3Jpcy9hcnRwZWNfM19kZWZjb25maWcKcmVuYW1lIHRvIGFyY2gvY3Jpcy9jb25maWdzL2FydHBlY18zX2RlZmNvbmZpZwpkaWZmIC0tZ2l0IGEvYXJjaC9jcmlzL2FyY2gtdjEwL2RlZmNvbmZpZyBiL2FyY2gvY3Jpcy9jb25maWdzL2V0cmF4LTEwMGx4X2RlZmNvbmZpZwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYXJjaC9jcmlzL2FyY2gtdjEwL2RlZmNvbmZpZwpyZW5hbWUgdG8gYXJjaC9jcmlzL2NvbmZpZ3MvZXRyYXgtMTAwbHhfZGVmY29uZmlnCmRpZmYgLS1naXQgYS9hcmNoL2NyaXMvZGVmY29uZmlnIGIvYXJjaC9jcmlzL2NvbmZpZ3MvZXRyYXgtMTAwbHhfdjJfZGVmY29uZmlnCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBhcmNoL2NyaXMvZGVmY29uZmlnCnJlbmFtZSB0byBhcmNoL2NyaXMvY29uZmlncy9ldHJheC0xMDBseF92Ml9kZWZjb25maWcKZGlmZiAtLWdpdCBhL2FyY2gvY3Jpcy9ldHJheGZzX2RlZmNvbmZpZyBiL2FyY2gvY3Jpcy9jb25maWdzL2V0cmF4ZnNfZGVmY29uZmlnCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBhcmNoL2NyaXMvZXRyYXhmc19kZWZjb25maWcKcmVuYW1lIHRvIGFyY2gvY3Jpcy9jb25maWdzL2V0cmF4ZnNfZGVmY29uZmlnCmRpZmYgLS1naXQgYS9hcmNoL2NyaXMva2VybmVsL3RpbWUuYyBiL2FyY2gvY3Jpcy9rZXJuZWwvdGltZS5jCmluZGV4IGZmNGM2YWEuLjA3NGZlN2QgMTAwNjQ0Ci0tLSBhL2FyY2gvY3Jpcy9rZXJuZWwvdGltZS5jCisrKyBiL2FyY2gvY3Jpcy9rZXJuZWwvdGltZS5jCkBAIC0xMjcsNyArMTI3LDcgQEAKIAkJcmV0dXJuIDA7CiAKIAljbW9zX21pbnV0ZXMgPSBDTU9TX1JFQUQoUlRDX01JTlVURVMpOwotCUJDRF9UT19CSU4oY21vc19taW51dGVzKTsKKwljbW9zX21pbnV0ZXMgPSBiY2QyYmluKGNtb3NfbWludXRlcyk7CiAKIAkvKgogCSAqIHNpbmNlIHdlJ3JlIG9ubHkgYWRqdXN0aW5nIG1pbnV0ZXMgYW5kIHNlY29uZHMsCkBAIC0xNDIsOCArMTQyLDggQEAKIAlyZWFsX21pbnV0ZXMgJT0gNjA7CiAKIAlpZiAoYWJzKHJlYWxfbWludXRlcyAtIGNtb3NfbWludXRlcykgPCAzMCkgewotCQlCSU5fVE9fQkNEKHJlYWxfc2Vjb25kcyk7Ci0JCUJJTl9UT19CQ0QocmVhbF9taW51dGVzKTsKKwkJcmVhbF9zZWNvbmRzID0gYmluMmJjZChyZWFsX3NlY29uZHMpOworCQlyZWFsX21pbnV0ZXMgPSBiaW4yYmNkKHJlYWxfbWludXRlcyk7CiAJCUNNT1NfV1JJVEUocmVhbF9zZWNvbmRzLFJUQ19TRUNPTkRTKTsKIAkJQ01PU19XUklURShyZWFsX21pbnV0ZXMsUlRDX01JTlVURVMpOwogCX0gZWxzZSB7CkBAIC0xNzAsMTIgKzE3MCwxMiBAQAogCW1vbiA9IENNT1NfUkVBRChSVENfTU9OVEgpOwogCXllYXIgPSBDTU9TX1JFQUQoUlRDX1lFQVIpOwogCi0JQkNEX1RPX0JJTihzZWMpOwotCUJDRF9UT19CSU4obWluKTsKLQlCQ0RfVE9fQklOKGhvdXIpOwotCUJDRF9UT19CSU4oZGF5KTsKLQlCQ0RfVE9fQklOKG1vbik7Ci0JQkNEX1RPX0JJTih5ZWFyKTsKKwlzZWMgPSBiY2QyYmluKHNlYyk7CisJbWluID0gYmNkMmJpbihtaW4pOworCWhvdXIgPSBiY2QyYmluKGhvdXIpOworCWRheSA9IGJjZDJiaW4oZGF5KTsKKwltb24gPSBiY2QyYmluKG1vbik7CisJeWVhciA9IGJjZDJiaW4oeWVhcik7CiAKIAlpZiAoKHllYXIgKz0gMTkwMCkgPCAxOTcwKQogCQl5ZWFyICs9IDEwMDsKZGlmZiAtLWdpdCBhL2FyY2gvZnJ2L0tjb25maWcgYi9hcmNoL2Zydi9LY29uZmlnCmluZGV4IGE1YWFjMWIuLjlkMTU1MmEgMTAwNjQ0Ci0tLSBhL2FyY2gvZnJ2L0tjb25maWcKKysrIGIvYXJjaC9mcnYvS2NvbmZpZwpAQCAtNjYsNiArNjYsOCBAQAogCiBzb3VyY2UgImluaXQvS2NvbmZpZyIKIAorc291cmNlICJrZXJuZWwvS2NvbmZpZy5mcmVlemVyIgorCiAKIG1lbnUgIkZ1aml0c3UgRlItViBzeXN0ZW0gc2V0dXAiCiAKZGlmZiAtLWdpdCBhL2FyY2gvZnJ2L2tlcm5lbC9wbS5jIGIvYXJjaC9mcnYva2VybmVsL3BtLmMKaW5kZXggZDExMTNjNS4uYmU3MjJmYyAxMDA2NDQKLS0tIGEvYXJjaC9mcnYva2VybmVsL3BtLmMKKysrIGIvYXJjaC9mcnYva2VybmVsL3BtLmMKQEAgLTIxMSw3ICsyMTEsNyBAQAogCXJldHVybiB0cnlfc2V0X2Ntb2RlKG5ld19jbW9kZSk/OipsZW5wOwogfQogCi1zdGF0aWMgaW50IGNtb2RlX3N5c2N0bChjdGxfdGFibGUgKnRhYmxlLCBpbnQgX191c2VyICpuYW1lLCBpbnQgbmxlbiwKK3N0YXRpYyBpbnQgY21vZGVfc3lzY3RsKGN0bF90YWJsZSAqdGFibGUsCiAJCQl2b2lkIF9fdXNlciAqb2xkdmFsLCBzaXplX3QgX191c2VyICpvbGRsZW5wLAogCQkJdm9pZCBfX3VzZXIgKm5ld3ZhbCwgc2l6ZV90IG5ld2xlbikKIHsKQEAgLTMxNCw3ICszMTQsNyBAQAogCXJldHVybiB0cnlfc2V0X3AwKG5ld19wMCk/OipsZW5wOwogfQogCi1zdGF0aWMgaW50IHAwX3N5c2N0bChjdGxfdGFibGUgKnRhYmxlLCBpbnQgX191c2VyICpuYW1lLCBpbnQgbmxlbiwKK3N0YXRpYyBpbnQgcDBfc3lzY3RsKGN0bF90YWJsZSAqdGFibGUsCiAJCSAgICAgdm9pZCBfX3VzZXIgKm9sZHZhbCwgc2l6ZV90IF9fdXNlciAqb2xkbGVucCwKIAkJICAgICB2b2lkIF9fdXNlciAqbmV3dmFsLCBzaXplX3QgbmV3bGVuKQogewpAQCAtMzU4LDcgKzM1OCw3IEBACiAJcmV0dXJuIHRyeV9zZXRfY20obmV3X2NtKT86KmxlbnA7CiB9CiAKLXN0YXRpYyBpbnQgY21fc3lzY3RsKGN0bF90YWJsZSAqdGFibGUsIGludCBfX3VzZXIgKm5hbWUsIGludCBubGVuLAorc3RhdGljIGludCBjbV9zeXNjdGwoY3RsX3RhYmxlICp0YWJsZSwKIAkJICAgICB2b2lkIF9fdXNlciAqb2xkdmFsLCBzaXplX3QgX191c2VyICpvbGRsZW5wLAogCQkgICAgIHZvaWQgX191c2VyICpuZXd2YWwsIHNpemVfdCBuZXdsZW4pCiB7CmRpZmYgLS1naXQgYS9hcmNoL2Zydi9tYjkzMDkwLW1iMDAvcGNpLWRtYS1ub21tdS5jIGIvYXJjaC9mcnYvbWI5MzA5MC1tYjAwL3BjaS1kbWEtbm9tbXUuYwppbmRleCA2NGVlNThkLi41MmZmOWFlIDEwMDY0NAotLS0gYS9hcmNoL2Zydi9tYjkzMDkwLW1iMDAvcGNpLWRtYS1ub21tdS5jCisrKyBiL2FyY2gvZnJ2L21iOTMwOTAtbWIwMC9wY2ktZG1hLW5vbW11LmMKQEAgLTExMSw3ICsxMTEsNyBAQAogICogVGhlIDMyLWJpdCBidXMgYWRkcmVzcyB0byB1c2UgaXMgcmV0dXJuZWQuCiAgKgogICogT25jZSB0aGUgZGV2aWNlIGlzIGdpdmVuIHRoZSBkbWEgYWRkcmVzcywgdGhlIGRldmljZSBvd25zIHRoaXMgbWVtb3J5Ci0gKiB1bnRpbCBlaXRoZXIgcGNpX3VubWFwX3NpbmdsZSBvciBwY2lfZG1hX3N5bmNfc2luZ2xlIGlzIHBlcmZvcm1lZC4KKyAqIHVudGlsIGVpdGhlciBkbWFfdW5tYXBfc2luZ2xlIG9yIHBjaV9kbWFfc3luY19zaW5nbGUgaXMgcGVyZm9ybWVkLgogICovCiBkbWFfYWRkcl90IGRtYV9tYXBfc2luZ2xlKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqcHRyLCBzaXplX3Qgc2l6ZSwKIAkJCSAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKQpAQCAtMTI5LDcgKzEyOSw3IEBACiAvKgogICogTWFwIGEgc2V0IG9mIGJ1ZmZlcnMgZGVzY3JpYmVkIGJ5IHNjYXR0ZXJsaXN0IGluIHN0cmVhbWluZwogICogbW9kZSBmb3IgRE1BLiAgVGhpcyBpcyB0aGUgc2NhdGhlci1nYXRoZXIgdmVyc2lvbiBvZiB0aGUKLSAqIGFib3ZlIHBjaV9tYXBfc2luZ2xlIGludGVyZmFjZS4gIEhlcmUgdGhlIHNjYXR0ZXIgZ2F0aGVyIGxpc3QKKyAqIGFib3ZlIGRtYV9tYXBfc2luZ2xlIGludGVyZmFjZS4gIEhlcmUgdGhlIHNjYXR0ZXIgZ2F0aGVyIGxpc3QKICAqIGVsZW1lbnRzIGFyZSBlYWNoIHRhZ2dlZCB3aXRoIHRoZSBhcHByb3ByaWF0ZSBkbWEgYWRkcmVzcwogICogYW5kIGxlbmd0aC4gIFRoZXkgYXJlIG9idGFpbmVkIHZpYSBzZ19kbWFfe2FkZHJlc3MsbGVuZ3RofShTRykuCiAgKgpAQCAtMTM5LDcgKzEzOSw3IEBACiAgKiAgICAgICBUaGUgcm91dGluZSByZXR1cm5zIHRoZSBudW1iZXIgb2YgYWRkci9sZW5ndGggcGFpcnMgYWN0dWFsbHkKICAqICAgICAgIHVzZWQsIGF0IG1vc3QgbmVudHMuCiAgKgotICogRGV2aWNlIG93bmVyc2hpcCBpc3N1ZXMgYXMgbWVudGlvbmVkIGFib3ZlIGZvciBwY2lfbWFwX3NpbmdsZSBhcmUKKyAqIERldmljZSBvd25lcnNoaXAgaXNzdWVzIGFzIG1lbnRpb25lZCBhYm92ZSBmb3IgZG1hX21hcF9zaW5nbGUgYXJlCiAgKiB0aGUgc2FtZSBoZXJlLgogICovCiBpbnQgZG1hX21hcF9zZyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csIGludCBuZW50cywKQEAgLTE1OCwzICsxNTgsMjAgQEAKIH0KIAogRVhQT1JUX1NZTUJPTChkbWFfbWFwX3NnKTsKKworLyoKKyAqIE1hcCBhIHNpbmdsZSBwYWdlIG9mIHRoZSBpbmRpY2F0ZWQgc2l6ZSBmb3IgRE1BIGluIHN0cmVhbWluZyBtb2RlLgorICogVGhlIDMyLWJpdCBidXMgYWRkcmVzcyB0byB1c2UgaXMgcmV0dXJuZWQuCisgKgorICogRGV2aWNlIG93bmVyc2hpcCBpc3N1ZXMgYXMgbWVudGlvbmVkIGFib3ZlIGZvciBkbWFfbWFwX3NpbmdsZSBhcmUKKyAqIHRoZSBzYW1lIGhlcmUuCisgKi8KK2RtYV9hZGRyX3QgZG1hX21hcF9wYWdlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LAorCQkJc2l6ZV90IHNpemUsIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbikKK3sKKwlCVUdfT04oZGlyZWN0aW9uID09IERNQV9OT05FKTsKKwlmbHVzaF9kY2FjaGVfcGFnZShwYWdlKTsKKwlyZXR1cm4gKGRtYV9hZGRyX3QpIHBhZ2VfdG9fcGh5cyhwYWdlKSArIG9mZnNldDsKK30KKworRVhQT1JUX1NZTUJPTChkbWFfbWFwX3BhZ2UpOwpkaWZmIC0tZ2l0IGEvYXJjaC9mcnYvbWI5MzA5MC1tYjAwL3BjaS1kbWEuYyBiL2FyY2gvZnJ2L21iOTMwOTAtbWIwMC9wY2ktZG1hLmMKaW5kZXggNjYyZjdiMTIuLjNkZGVkZWIgMTAwNjQ0Ci0tLSBhL2FyY2gvZnJ2L21iOTMwOTAtbWIwMC9wY2ktZG1hLmMKKysrIGIvYXJjaC9mcnYvbWI5MzA5MC1tYjAwL3BjaS1kbWEuYwpAQCAtNjEsNyArNjEsNyBAQAogLyoKICAqIE1hcCBhIHNldCBvZiBidWZmZXJzIGRlc2NyaWJlZCBieSBzY2F0dGVybGlzdCBpbiBzdHJlYW1pbmcKICAqIG1vZGUgZm9yIERNQS4gIFRoaXMgaXMgdGhlIHNjYXRoZXItZ2F0aGVyIHZlcnNpb24gb2YgdGhlCi0gKiBhYm92ZSBwY2lfbWFwX3NpbmdsZSBpbnRlcmZhY2UuICBIZXJlIHRoZSBzY2F0dGVyIGdhdGhlciBsaXN0CisgKiBhYm92ZSBkbWFfbWFwX3NpbmdsZSBpbnRlcmZhY2UuICBIZXJlIHRoZSBzY2F0dGVyIGdhdGhlciBsaXN0CiAgKiBlbGVtZW50cyBhcmUgZWFjaCB0YWdnZWQgd2l0aCB0aGUgYXBwcm9wcmlhdGUgZG1hIGFkZHJlc3MKICAqIGFuZCBsZW5ndGguICBUaGV5IGFyZSBvYnRhaW5lZCB2aWEgc2dfZG1hX3thZGRyZXNzLGxlbmd0aH0oU0cpLgogICoKQEAgLTcxLDcgKzcxLDcgQEAKICAqICAgICAgIFRoZSByb3V0aW5lIHJldHVybnMgdGhlIG51bWJlciBvZiBhZGRyL2xlbmd0aCBwYWlycyBhY3R1YWxseQogICogICAgICAgdXNlZCwgYXQgbW9zdCBuZW50cy4KICAqCi0gKiBEZXZpY2Ugb3duZXJzaGlwIGlzc3VlcyBhcyBtZW50aW9uZWQgYWJvdmUgZm9yIHBjaV9tYXBfc2luZ2xlIGFyZQorICogRGV2aWNlIG93bmVyc2hpcCBpc3N1ZXMgYXMgbWVudGlvbmVkIGFib3ZlIGZvciBkbWFfbWFwX3NpbmdsZSBhcmUKICAqIHRoZSBzYW1lIGhlcmUuCiAgKi8KIGludCBkbWFfbWFwX3NnKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywgaW50IG5lbnRzLApAQCAtMTA1LDYgKzEwNSwxMyBAQAogCiBFWFBPUlRfU1lNQk9MKGRtYV9tYXBfc2cpOwogCisvKgorICogTWFwIGEgc2luZ2xlIHBhZ2Ugb2YgdGhlIGluZGljYXRlZCBzaXplIGZvciBETUEgaW4gc3RyZWFtaW5nIG1vZGUuCisgKiBUaGUgMzItYml0IGJ1cyBhZGRyZXNzIHRvIHVzZSBpcyByZXR1cm5lZC4KKyAqCisgKiBEZXZpY2Ugb3duZXJzaGlwIGlzc3VlcyBhcyBtZW50aW9uZWQgYWJvdmUgZm9yIGRtYV9tYXBfc2luZ2xlIGFyZQorICogdGhlIHNhbWUgaGVyZS4KKyAqLwogZG1hX2FkZHJfdCBkbWFfbWFwX3BhZ2Uoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBvZmZzZXQsCiAJCQlzaXplX3Qgc2l6ZSwgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKQogewpkaWZmIC0tZ2l0IGEvYXJjaC9mcnYvbWI5MzA5MC1tYjAwL3BjaS1mcnYuYyBiL2FyY2gvZnJ2L21iOTMwOTAtbWIwMC9wY2ktZnJ2LmMKaW5kZXggZWRhZTExNy4uNDNkNjc1MyAxMDA2NDQKLS0tIGEvYXJjaC9mcnYvbWI5MzA5MC1tYjAwL3BjaS1mcnYuYworKysgYi9hcmNoL2Zydi9tYjkzMDkwLW1iMDAvcGNpLWZydi5jCkBAIC0yMDEsMzggKzIwMSw2IEBACiAJcGNpYmlvc19hc3NpZ25fcmVzb3VyY2VzKCk7CiB9CiAKLWludCBwY2liaW9zX2VuYWJsZV9yZXNvdXJjZXMoc3RydWN0IHBjaV9kZXYgKmRldiwgaW50IG1hc2spCi17Ci0JdTE2IGNtZCwgb2xkX2NtZDsKLQlpbnQgaWR4OwotCXN0cnVjdCByZXNvdXJjZSAqcjsKLQotCXBjaV9yZWFkX2NvbmZpZ193b3JkKGRldiwgUENJX0NPTU1BTkQsICZjbWQpOwotCW9sZF9jbWQgPSBjbWQ7Ci0JZm9yKGlkeD0wOyBpZHg8NjsgaWR4KyspIHsKLQkJLyogT25seSBzZXQgdXAgdGhlIHJlcXVlc3RlZCBzdHVmZiAqLwotCQlpZiAoIShtYXNrICYgKDE8PGlkeCkpKQotCQkJY29udGludWU7Ci0KLQkJciA9ICZkZXYtPnJlc291cmNlW2lkeF07Ci0JCWlmICghci0+c3RhcnQgJiYgci0+ZW5kKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgIlBDSTogRGV2aWNlICVzIG5vdCBhdmFpbGFibGUgYmVjYXVzZSBvZiByZXNvdXJjZSBjb2xsaXNpb25zXG4iLCBwY2lfbmFtZShkZXYpKTsKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0JCWlmIChyLT5mbGFncyAmIElPUkVTT1VSQ0VfSU8pCi0JCQljbWQgfD0gUENJX0NPTU1BTkRfSU87Ci0JCWlmIChyLT5mbGFncyAmIElPUkVTT1VSQ0VfTUVNKQotCQkJY21kIHw9IFBDSV9DT01NQU5EX01FTU9SWTsKLQl9Ci0JaWYgKGRldi0+cmVzb3VyY2VbUENJX1JPTV9SRVNPVVJDRV0uc3RhcnQpCi0JCWNtZCB8PSBQQ0lfQ09NTUFORF9NRU1PUlk7Ci0JaWYgKGNtZCAhPSBvbGRfY21kKSB7Ci0JCXByaW50aygiUENJOiBFbmFibGluZyBkZXZpY2UgJXMgKCUwNHggLT4gJTA0eClcbiIsIHBjaV9uYW1lKGRldiksIG9sZF9jbWQsIGNtZCk7Ci0JCXBjaV93cml0ZV9jb25maWdfd29yZChkZXYsIFBDSV9DT01NQU5ELCBjbWQpOwotCX0KLQlyZXR1cm4gMDsKLX0KLQogLyoKICAqICBJZiB3ZSBzZXQgdXAgYSBkZXZpY2UgZm9yIGJ1cyBtYXN0ZXJpbmcsIHdlIG5lZWQgdG8gY2hlY2sgdGhlIGxhdGVuY3kKICAqICB0aW1lciBhcyBjZXJ0YWluIGNyYXBweSBCSU9TZXMgZm9yZ2V0IHRvIHNldCBpdCBwcm9wZXJseS4KZGlmZiAtLWdpdCBhL2FyY2gvZnJ2L21iOTMwOTAtbWIwMC9wY2ktZnJ2LmggYi9hcmNoL2Zydi9tYjkzMDkwLW1iMDAvcGNpLWZydi5oCmluZGV4IDBjN2JmMzkuLmYzZmU1NTkxIDEwMDY0NAotLS0gYS9hcmNoL2Zydi9tYjkzMDkwLW1iMDAvcGNpLWZydi5oCisrKyBiL2FyY2gvZnJ2L21iOTMwOTAtbWIwMC9wY2ktZnJ2LmgKQEAgLTI5LDcgKzI5LDYgQEAKIGV4dGVybiB1bnNpZ25lZCBpbnQgcGNpYmlvc19tYXhfbGF0ZW5jeTsKIAogdm9pZCBwY2liaW9zX3Jlc291cmNlX3N1cnZleSh2b2lkKTsKLWludCBwY2liaW9zX2VuYWJsZV9yZXNvdXJjZXMoc3RydWN0IHBjaV9kZXYgKiwgaW50KTsKIAogLyogcGNpLXZkay5jICovCiAKZGlmZiAtLWdpdCBhL2FyY2gvZnJ2L21iOTMwOTAtbWIwMC9wY2ktdmRrLmMgYi9hcmNoL2Zydi9tYjkzMDkwLW1iMDAvcGNpLXZkay5jCmluZGV4IGYwMDNjZmEuLjBmNDFjM2EgMTAwNjQ0Ci0tLSBhL2FyY2gvZnJ2L21iOTMwOTAtbWIwMC9wY2ktdmRrLmMKKysrIGIvYXJjaC9mcnYvbWI5MzA5MC1tYjAwL3BjaS12ZGsuYwpAQCAtNDEyLDcgKzQxMiw3IEBACiB7CiAJaW50IGVycjsKIAotCWlmICgoZXJyID0gcGNpYmlvc19lbmFibGVfcmVzb3VyY2VzKGRldiwgbWFzaykpIDwgMCkKKwlpZiAoKGVyciA9IHBjaV9lbmFibGVfcmVzb3VyY2VzKGRldiwgbWFzaykpIDwgMCkKIAkJcmV0dXJuIGVycjsKIAlpZiAoIWRldi0+bXNpX2VuYWJsZWQpCiAJCXBjaWJpb3NfZW5hYmxlX2lycShkZXYpOwpkaWZmIC0tZ2l0IGEvYXJjaC9mcnYvbW0vaW5pdC5jIGIvYXJjaC9mcnYvbW0vaW5pdC5jCmluZGV4IDFiODUxZGIuLjA3MDgyODQgMTAwNjQ0Ci0tLSBhL2FyY2gvZnJ2L21tL2luaXQuYworKysgYi9hcmNoL2Zydi9tbS9pbml0LmMKQEAgLTg3LDggKzg3LDYgQEAKIAogCQlwa21hcF9wYWdlX3RhYmxlID0gYWxsb2NfYm9vdG1lbV9wYWdlcyhQQUdFX1NJWkUpOwogCi0JCW1lbXNldChwa21hcF9wYWdlX3RhYmxlLCAwLCBQQUdFX1NJWkUpOwotCiAJCXBnZSA9IHN3YXBwZXJfcGdfZGlyICsgcGdkX2luZGV4X2soUEtNQVBfQkFTRSk7CiAJCXB1ZSA9IHB1ZF9vZmZzZXQocGdlLCBQS01BUF9CQVNFKTsKIAkJcG1lID0gcG1kX29mZnNldChwdWUsIFBLTUFQX0JBU0UpOwpkaWZmIC0tZ2l0IGEvYXJjaC9oODMwMC9LY29uZmlnIGIvYXJjaC9oODMwMC9LY29uZmlnCmluZGV4IDM5NmFiMDUuLmJkMTk5NTQgMTAwNjQ0Ci0tLSBhL2FyY2gvaDgzMDAvS2NvbmZpZworKysgYi9hcmNoL2g4MzAwL0tjb25maWcKQEAgLTYyLDEzICs2MiwxNCBAQAogCWJvb2wKIAlkZWZhdWx0IHkKIAorY29uZmlnIEdFTkVSSUNfQlVHCisgICAgICAgIGJvb2wKKyAgICAgICAgZGVwZW5kcyBvbiBCVUcKKwogY29uZmlnIFRJTUVfTE9XX1JFUwogCWJvb2wKIAlkZWZhdWx0IHkKIAotY29uZmlnIEFSQ0hfU1VQUE9SVFNfQU9VVAotCWRlZl9ib29sIHkKLQogY29uZmlnIE5PX0lPUE9SVAogCWRlZl9ib29sIHkKIApAQCAtODksNiArOTAsOCBAQAogCiBzb3VyY2UgImluaXQvS2NvbmZpZyIKIAorc291cmNlICJrZXJuZWwvS2NvbmZpZy5mcmVlemVyIgorCiBzb3VyY2UgImFyY2gvaDgzMDAvS2NvbmZpZy5jcHUiCiAKIG1lbnUgIkV4ZWN1dGFibGUgZmlsZSBmb3JtYXRzIgpkaWZmIC0tZ2l0IGEvYXJjaC9oODMwMC9LY29uZmlnLmNwdSBiL2FyY2gvaDgzMDAvS2NvbmZpZy5jcHUKaW5kZXggNTgyNzk3ZC4uYjY1ZGNmZSAxMDA2NDQKLS0tIGEvYXJjaC9oODMwMC9LY29uZmlnLmNwdQorKysgYi9hcmNoL2g4MzAwL0tjb25maWcuY3B1CkBAIC0xLDUgKzEsNyBAQAogbWVudSAiUHJvY2Vzc29yIHR5cGUgYW5kIGZlYXR1cmVzIgogCitzb3VyY2UgImtlcm5lbC90aW1lL0tjb25maWciCisKIGNob2ljZQogCXByb21wdCAiSDgvMzAwIHBsYXRmb3JtIgogCWRlZmF1bHQgSDgzMDBIX0dFTkVSSUMKQEAgLTExLDYgKzEzLDcgQEAKIAogY29uZmlnIEg4MzAwSF9BS0kzMDY4TkVUCiAJYm9vbCAiQUUtMzA2OC82OSIKKwlzZWxlY3QgQ09ORklHX0g4MzA2OAogCWhlbHAKIAkgIEFLSS1IOC8zMDY4RiAvIEFLSS1IOC8zMDY5RiBGbGFzaG1pY29tIExBTiBCb2FyZCBTdXBwb3J0CiAJICBNb3JlIEluZm9ybWF0aW9uLiAoSmFwYW5lc2UgT25seSkKQEAgLTIxLDYgKzI0LDcgQEAKIAogY29uZmlnIEg4MzAwSF9IOE1BWAogCWJvb2wgIkg4TUFYIgorCXNlbGVjdCBDT05GSUdfSDgzMDY4CiAJaGVscAogCSAgSDhNQVggRXZhbHVhdGlvbiBCb2FyZCBTdXBwb3J0CiAJICBNb3JlIEluZm9ybWF0aW9uLiAoSmFwYW5lc2UgT25seSkKQEAgLTI4LDYgKzMyLDcgQEAKIAogY29uZmlnIEg4MzAwSF9TSU0KIAlib29sICJIOC8zMDBIIFNpbXVsYXRvciIKKwlzZWxlY3QgQ09ORklHX0g4MzAwNwogCWhlbHAKIAkgIEdEQiBTaW11bGF0b3IgU3VwcG9ydAogCSAgTW9yZSBJbmZvcm1hdGlvbi4KQEAgLTQwLDYgKzQ1LDcgQEAKIAogY29uZmlnIEg4U19FRE9TSzI2NzQKIAlib29sICJFRE9TSy0yNjc0IgorCXNlbGVjdCBDT05GSUdfSDhTMjc2OAogCWhlbHAKIAkgIFJlbmVzYXMgRURPU0stMjY3NCBFdmFsdWF0aW9uIEJvYXJkIFN1cHBvcnQKIAkgIE1vcmUgSW5mb3JtYXRpb24uCkBAIC01NSw0NCArNjEsMzcgQEAKIAogZW5kY2hvaWNlCiAKLWlmIChIODMwMEhfR0VORVJJQyB8fCBIOFNfR0VORVJJQykKLW1lbnUgIkRldGFpbCBTZWxlY3Rpb24iCi1pZiAoSDgzMDBIX0dFTkVSSUMpCiBjaG9pY2UKIAlwcm9tcHQgIkNQVSBTZWxlY3Rpb24iCiAKIGNvbmZpZyBIODMwMDIKIAlib29sICJIOC8zMDAxLDMwMDIsMzAwMyIKKwlzZWxlY3QgQ1BVX0g4MzAwSAogCiBjb25maWcgSDgzMDA3CiAJYm9vbCAiSDgvMzAwNiwzMDA3IgorCXNlbGVjdCBDUFVfSDgzMDBICiAKIGNvbmZpZyBIODMwNDgKIAlib29sICJIOC8zMDQ0LDMwNDUsMzA0NiwzMDQ3LDMwNDgsMzA1MiIKKwlzZWxlY3QgQ1BVX0g4MzAwSAogCiBjb25maWcgSDgzMDY4CiAJYm9vbCAiSDgvMzA2NSwzMDY2LDMwNjcsMzA2OCwzMDY5IgotZW5kY2hvaWNlCi1lbmRpZgotCi1pZiAoSDhTX0dFTkVSSUMpCi1jaG9pY2UKLQlwcm9tcHQgIkNQVSBTZWxlY3Rpb24iCisJc2VsZWN0IENQVV9IODMwMEgKIAogY29uZmlnIEg4UzI2NzgKIAlib29sICJIOFMvMjY3MCwyNjczLDI2NzRSLDI2NzUsMjY3NiIKKwlzZWxlY3QgQ1BVX0g4UworCiBlbmRjaG9pY2UKLWVuZGlmCiAKIGNvbmZpZyBDUFVfQ0xPQ0sKIAlpbnQgIkNQVSBDbG9jayBGcmVxdWVuY3kgKC8xS0h6KSIKIAlkZWZhdWx0ICIyMDAwMCIKIAloZWxwCiAJICBDUFUgQ2xvY2sgRnJlcXVlbmN5IGRpdmlkZSB0byAxMDAwCi1lbmRtZW51Ci1lbmRpZgogCi1pZiAoSDgzMDBIX0dFTkVSSUMgfHwgSDhTX0dFTkVSSUMgfHwgSDgzMDBIX1NJTSB8fCBIOFNfU0lNIHx8IEg4U19FRE9TSzI2NzQpCiBjaG9pY2UKIAlwcm9tcHQgIktlcm5lbCBleGVjdXRlcyBmcm9tIgogCS0tLWhlbHAtLS0KQEAgLTEwNyw2NSArMTA2LDggQEAKIAlib29sICJST00iCiAJaGVscAogCSAgVGhlIGtlcm5lbCB3aWxsIGJlIHJlc2lkZW50IGluIEZMQVNIL1JPTSB3aGVuIHJ1bm5pbmcuCi0KIGVuZGNob2ljZQotZW5kaWYKIAotaWYgKEg4MzAwSF9BS0kzMDY4TkVUKQotY29uZmlnIEg4MzA2OAotCWJvb2wKLQlkZWZhdWx0IHkKLQotY29uZmlnIENQVV9DTE9DSwotCWludAotCWRlZmF1bHQgIjIwMDAwIgotCi1jb25maWcgUkFNS0VSTkVMCi0JYm9vbAotCWRlZmF1bHQgeQotZW5kaWYKLQotaWYgKEg4MzAwSF9IOE1BWCkKLWNvbmZpZyBIODMwNjgKLQlib29sCi0JZGVmYXVsdCB5Ci0KLWNvbmZpZyBDUFVfQ0xPQ0sKLQlpbnQKLQlkZWZhdWx0IDI1MDAwCi0KLWNvbmZpZyBSQU1LRVJORUwKLQlib29sCi0JZGVmYXVsdCB5Ci1lbmRpZgotCi1pZiAoSDgzMDBIX1NJTSkKLWNvbmZpZyBIODMwMDcKLQlib29sCi0JZGVmYXVsdCB5Ci0KLWNvbmZpZyBDUFVfQ0xPQ0sKLQlpbnQKLQlkZWZhdWx0ICIxNjAwMCIKLWVuZGlmCi0KLWlmIChIOFNfRURPU0syNjc0KQotY29uZmlnIEg4UzI2NzgKLQlib29sCi0JZGVmYXVsdCB5Ci1jb25maWcgQ1BVX0NMT0NLCi0JaW50Ci0JZGVmYXVsdCAzMzAwMAotZW5kaWYKLQotaWYgKEg4U19TSU0pCi1jb25maWcgSDhTMjY3OAotCWJvb2wKLQlkZWZhdWx0IHkKLWNvbmZpZyBDUFVfQ0xPQ0sKLQlpbnQKLQlkZWZhdWx0IDMzMDAwCi1lbmRpZgogCiBjb25maWcgQ1BVX0g4MzAwSAogCWJvb2wKQEAgLTE3Nyw2ICsxMTksNDkgQEAKIAlkZXBlbmRzIG9uIEg4UzI2NzgKIAlkZWZhdWx0IHkKIAorY2hvaWNlCisJcHJvbXB0ICJUaW1lciIKK2NvbmZpZyBIODMwMF9USU1FUjgKKwlib29sICI4Yml0IHRpbWVyICgyY2ggY2FzY2FkZSkiCisJZGVwZW5kcyBvbiAoSDgzMDA3IHx8IEg4MzA2OCB8fCBIOFMyNjc4KQorCitjb25maWcgSDgzMDBfVElNRVIxNgorCWJvb2wgIjE2Yml0IHRpbWVyIgorCWRlcGVuZHMgb24gKEg4MzAwNyB8fCBIODMwNjgpCisKK2NvbmZpZyBIODMwMF9JVFUKKwlib29sICJJVFUiCisJZGVwZW5kcyBvbiAoSDgzMDAyIHx8IEg4MzA0OCkKKworY29uZmlnIEg4MzAwX1RQVQorCWJvb2wgIlRQVSIKKwlkZXBlbmRzIG9uIEg4UzI2NzgKK2VuZGNob2ljZQorCitpZiBIODMwMF9USU1FUjgKK2Nob2ljZQorCXByb21wdCAiVGltZXIgQ2hhbm5lbCIKK2NvbmZpZyBIODMwMF9USU1FUjhfQ0gwCisJYm9vbCAiQ2hhbm5lbCAwIgorY29uZmlnIEg4MzAwX1RJTUVSOF9DSDIKKwlib29sICJDaGFubmVsIDIiCisJZGVwZW5kcyBvbiBDUFVfSDgzMDBICitlbmRjaG9pY2UKK2VuZGlmCisKK2NvbmZpZyBIODMwMF9USU1FUjE2X0NICisJaW50ICIxNmJpdCB0aW1lciBjaGFubmVsICgwIC0gMikiCisJZGVwZW5kcyBvbiBIODMwMF9USU1FUjE2CisJcmFuZ2UgMCAyCisKK2NvbmZpZyBIODMwMF9JVFVfQ0gKKwlpbnQgIklUVSBjaGFubmVsIgorCWRlcGVuZHMgb24gSDgzMDBfSVRVCisKK2NvbmZpZyBIODMwMF9UUFVfQ0gKKwlpbnQgIlRQVSBjaGFubmVsIgorCWRlcGVuZHMgb24gSDgzMDBfVFBVCisKIGNvbmZpZyBQUkVFTVBUCiAJYm9vbCAiUHJlZW1wdGlibGUgS2VybmVsIgogCWRlZmF1bHQgbgpkaWZmIC0tZ2l0IGEvYXJjaC9oODMwMC9pbmNsdWRlL2FzbS9hLm91dC5oIGIvYXJjaC9oODMwMC9pbmNsdWRlL2FzbS9hLm91dC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZWQ3ODBmLi4wMDAwMDAwCi0tLSBhL2FyY2gvaDgzMDAvaW5jbHVkZS9hc20vYS5vdXQuaAorKysgL2Rldi9udWxsCkBAIC0xLDIwICswLDAgQEAKLSNpZm5kZWYgX19IODMwMF9BX09VVF9IX18KLSNkZWZpbmUgX19IODMwMF9BX09VVF9IX18KLQotc3RydWN0IGV4ZWMKLXsKLSAgdW5zaWduZWQgbG9uZyBhX2luZm87CQkvKiBVc2UgbWFjcm9zIE5fTUFHSUMsIGV0YyBmb3IgYWNjZXNzICovCi0gIHVuc2lnbmVkIGFfdGV4dDsJCS8qIGxlbmd0aCBvZiB0ZXh0LCBpbiBieXRlcyAqLwotICB1bnNpZ25lZCBhX2RhdGE7CQkvKiBsZW5ndGggb2YgZGF0YSwgaW4gYnl0ZXMgKi8KLSAgdW5zaWduZWQgYV9ic3M7CQkvKiBsZW5ndGggb2YgdW5pbml0aWFsaXplZCBkYXRhIGFyZWEgZm9yIGZpbGUsIGluIGJ5dGVzICovCi0gIHVuc2lnbmVkIGFfc3ltczsJCS8qIGxlbmd0aCBvZiBzeW1ib2wgdGFibGUgZGF0YSBpbiBmaWxlLCBpbiBieXRlcyAqLwotICB1bnNpZ25lZCBhX2VudHJ5OwkJLyogc3RhcnQgYWRkcmVzcyAqLwotICB1bnNpZ25lZCBhX3Ryc2l6ZTsJCS8qIGxlbmd0aCBvZiByZWxvY2F0aW9uIGluZm8gZm9yIHRleHQsIGluIGJ5dGVzICovCi0gIHVuc2lnbmVkIGFfZHJzaXplOwkJLyogbGVuZ3RoIG9mIHJlbG9jYXRpb24gaW5mbyBmb3IgZGF0YSwgaW4gYnl0ZXMgKi8KLX07Ci0KLSNkZWZpbmUgTl9UUlNJWkUoYSkJKChhKS5hX3Ryc2l6ZSkKLSNkZWZpbmUgTl9EUlNJWkUoYSkJKChhKS5hX2Ryc2l6ZSkKLSNkZWZpbmUgTl9TWU1TSVpFKGEpCSgoYSkuYV9zeW1zKQotCi0jZW5kaWYgLyogX19IODMwMF9BX09VVF9IX18gKi8KZGlmZiAtLWdpdCBhL2FyY2gvaDgzMDAvaW5jbHVkZS9hc20vYnVnLmggYi9hcmNoL2g4MzAwL2luY2x1ZGUvYXNtL2J1Zy5oCmluZGV4IGVkZGRmNWIuLjg4N2MxOTcgMTAwNjQ0Ci0tLSBhL2FyY2gvaDgzMDAvaW5jbHVkZS9hc20vYnVnLmgKKysrIGIvYXJjaC9oODMwMC9pbmNsdWRlL2FzbS9idWcuaApAQCAtMSw0ICsxLDggQEAKICNpZm5kZWYgX0g4MzAwX0JVR19ICiAjZGVmaW5lIF9IODMwMF9CVUdfSAorCisvKiBhbHdheXMgdHJ1ZSAqLworI2RlZmluZSBpc192YWxpZF9idWdhZGRyKGFkZHIpICgxKQorCiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvYnVnLmg+CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvaDgzMDAvaW5jbHVkZS9hc20vZWxmLmggYi9hcmNoL2g4MzAwL2luY2x1ZGUvYXNtL2VsZi5oCmluZGV4IGE4YjU3ZDFmLi45NGUyMjg0IDEwMDY0NAotLS0gYS9hcmNoL2g4MzAwL2luY2x1ZGUvYXNtL2VsZi5oCisrKyBiL2FyY2gvaDgzMDAvaW5jbHVkZS9hc20vZWxmLmgKQEAgLTU1LDcgKzU1LDcgQEAKIAogI2RlZmluZSBFTEZfUExBVEZPUk0gIChOVUxMKQogCi0jZGVmaW5lIFNFVF9QRVJTT05BTElUWShleCwgaWJjczIpIHNldF9wZXJzb25hbGl0eShQRVJfTElOVVgpCisjZGVmaW5lIFNFVF9QRVJTT05BTElUWShleCkgc2V0X3BlcnNvbmFsaXR5KFBFUl9MSU5VWCkKIAogI2RlZmluZSBSX0g4X05PTkUgICAgICAgMAogI2RlZmluZSBSX0g4X0RJUjMyICAgICAgMQpkaWZmIC0tZ2l0IGEvYXJjaC9oODMwMC9pbmNsdWRlL2FzbS9pby5oIGIvYXJjaC9oODMwMC9pbmNsdWRlL2FzbS9pby5oCmluZGV4IDI2ZGM2Y2MuLjMzZTg0MmYgMTAwNjQ0Ci0tLSBhL2FyY2gvaDgzMDAvaW5jbHVkZS9hc20vaW8uaAorKysgYi9hcmNoL2g4MzAwL2luY2x1ZGUvYXNtL2lvLmgKQEAgLTI5NSw2ICsyOTUsNDAgQEAKICAgICAgICAgKih2b2xhdGlsZSB1bnNpZ25lZCBsb25nKilhZGRyID0gYjsKIH0KIAorc3RhdGljIF9faW5saW5lX18gdm9pZCBjdHJsX2JjbHIoaW50IGIsIHVuc2lnbmVkIGxvbmcgYWRkcikKK3sKKwlpZiAoX19idWlsdGluX2NvbnN0YW50X3AoYikpCisJCXN3aXRjaCAoYikgeworCQljYXNlIDA6IF9fYXNtX18oImJjbHIgIzAsQCUwIjo6InIiKGFkZHIpKTsgYnJlYWs7CisJCWNhc2UgMTogX19hc21fXygiYmNsciAjMSxAJTAiOjoiciIoYWRkcikpOyBicmVhazsKKwkJY2FzZSAyOiBfX2FzbV9fKCJiY2xyICMyLEAlMCI6OiJyIihhZGRyKSk7IGJyZWFrOworCQljYXNlIDM6IF9fYXNtX18oImJjbHIgIzMsQCUwIjo6InIiKGFkZHIpKTsgYnJlYWs7CisJCWNhc2UgNDogX19hc21fXygiYmNsciAjNCxAJTAiOjoiciIoYWRkcikpOyBicmVhazsKKwkJY2FzZSA1OiBfX2FzbV9fKCJiY2xyICM1LEAlMCI6OiJyIihhZGRyKSk7IGJyZWFrOworCQljYXNlIDY6IF9fYXNtX18oImJjbHIgIzYsQCUwIjo6InIiKGFkZHIpKTsgYnJlYWs7CisJCWNhc2UgNzogX19hc21fXygiYmNsciAjNyxAJTAiOjoiciIoYWRkcikpOyBicmVhazsKKwkJfQorCWVsc2UKKwkJX19hc21fXygiYmNsciAldzAsQCUxIjo6InIiKGIpLCAiciIoYWRkcikpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIGN0cmxfYnNldChpbnQgYiwgdW5zaWduZWQgbG9uZyBhZGRyKQoreworCWlmIChfX2J1aWx0aW5fY29uc3RhbnRfcChiKSkKKwkJc3dpdGNoIChiKSB7CisJCWNhc2UgMDogX19hc21fXygiYnNldCAjMCxAJTAiOjoiciIoYWRkcikpOyBicmVhazsKKwkJY2FzZSAxOiBfX2FzbV9fKCJic2V0ICMxLEAlMCI6OiJyIihhZGRyKSk7IGJyZWFrOworCQljYXNlIDI6IF9fYXNtX18oImJzZXQgIzIsQCUwIjo6InIiKGFkZHIpKTsgYnJlYWs7CisJCWNhc2UgMzogX19hc21fXygiYnNldCAjMyxAJTAiOjoiciIoYWRkcikpOyBicmVhazsKKwkJY2FzZSA0OiBfX2FzbV9fKCJic2V0ICM0LEAlMCI6OiJyIihhZGRyKSk7IGJyZWFrOworCQljYXNlIDU6IF9fYXNtX18oImJzZXQgIzUsQCUwIjo6InIiKGFkZHIpKTsgYnJlYWs7CisJCWNhc2UgNjogX19hc21fXygiYnNldCAjNixAJTAiOjoiciIoYWRkcikpOyBicmVhazsKKwkJY2FzZSA3OiBfX2FzbV9fKCJic2V0ICM3LEAlMCI6OiJyIihhZGRyKSk7IGJyZWFrOworCQl9CisJZWxzZQorCQlfX2FzbV9fKCJic2V0ICV3MCxAJTEiOjoiciIoYiksICJyIihhZGRyKSk7Cit9CisKIC8qIFBhZ2VzIHRvIHBoeXNpY2FsIGFkZHJlc3MuLi4gKi8KICNkZWZpbmUgcGFnZV90b19waHlzKHBhZ2UpICAgICAgKChwYWdlIC0gbWVtX21hcCkgPDwgUEFHRV9TSElGVCkKICNkZWZpbmUgcGFnZV90b19idXMocGFnZSkgICAgICAgKChwYWdlIC0gbWVtX21hcCkgPDwgUEFHRV9TSElGVCkKZGlmZiAtLWdpdCBhL2FyY2gvaDgzMDAvaW5jbHVkZS9hc20vbWQuaCBiL2FyY2gvaDgzMDAvaW5jbHVkZS9hc20vbWQuaAppbmRleCAxYTQ3ZGM2Li4xYjczMDBlIDEwMDY0NAotLS0gYS9hcmNoL2g4MzAwL2luY2x1ZGUvYXNtL21kLmgKKysrIGIvYXJjaC9oODMwMC9pbmNsdWRlL2FzbS9tZC5oCkBAIC0xLDQgKzEsNCBAQAotLyogJElkOiBtZC5oLHYgMS4xIDIwMDIvMTEvMTkgMDI6MDk6MjYgZ2VyZyBFeHAgJAorLyoKICAqIG1kLmg6IEhpZ2ggc3BlZWQgeG9yX2Jsb2NrIG9wZXJhdGlvbiBmb3IgUkFJRDQvNSAKICAqCiAgKi8KZGlmZiAtLWdpdCBhL2FyY2gvaDgzMDAvaW5jbHVkZS9hc20vc3lzdGVtLmggYi9hcmNoL2g4MzAwL2luY2x1ZGUvYXNtL3N5c3RlbS5oCmluZGV4IDRiOGU0NzUuLmQ5OGQ5NzYgMTAwNjQ0Ci0tLSBhL2FyY2gvaDgzMDAvaW5jbHVkZS9hc20vc3lzdGVtLmgKKysrIGIvYXJjaC9oODMwMC9pbmNsdWRlL2FzbS9zeXN0ZW0uaApAQCAtMTU1LDQgKzE1NSw2IEBACiAKICNkZWZpbmUgYXJjaF9hbGlnbl9zdGFjayh4KSAoeCkKIAordm9pZCBkaWUoY2hhciAqc3RyLCBzdHJ1Y3QgcHRfcmVncyAqZnAsIHVuc2lnbmVkIGxvbmcgZXJyKTsKKwogI2VuZGlmIC8qIF9IODMwMF9TWVNURU1fSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9oODMwMC9pbmNsdWRlL2FzbS90aHJlYWRfaW5mby5oIGIvYXJjaC9oODMwMC9pbmNsdWRlL2FzbS90aHJlYWRfaW5mby5oCmluZGV4IGFhZmQ0ZDMuLjcwMDAxNGQgMTAwNjQ0Ci0tLSBhL2FyY2gvaDgzMDAvaW5jbHVkZS9hc20vdGhyZWFkX2luZm8uaAorKysgYi9hcmNoL2g4MzAwL2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvLmgKQEAgLTg5LDYgKzg5LDcgQEAKIAkJCQkJICAgVElGX05FRURfUkVTQ0hFRCAqLwogI2RlZmluZSBUSUZfTUVNRElFCQk0CiAjZGVmaW5lIFRJRl9SRVNUT1JFX1NJR01BU0sJNQkvKiByZXN0b3JlIHNpZ25hbCBtYXNrIGluIGRvX3NpZ25hbCgpICovCisjZGVmaW5lIFRJRl9GUkVFWkUJCTE2CS8qIGlzIGZyZWV6aW5nIGZvciBzdXNwZW5kICovCiAKIC8qIGFzIGFib3ZlLCBidXQgYXMgYml0IHZhbHVlcyAqLwogI2RlZmluZSBfVElGX1NZU0NBTExfVFJBQ0UJKDE8PFRJRl9TWVNDQUxMX1RSQUNFKQpAQCAtOTYsNiArOTcsNyBAQAogI2RlZmluZSBfVElGX05FRURfUkVTQ0hFRAkoMTw8VElGX05FRURfUkVTQ0hFRCkKICNkZWZpbmUgX1RJRl9QT0xMSU5HX05SRkxBRwkoMTw8VElGX1BPTExJTkdfTlJGTEFHKQogI2RlZmluZSBfVElGX1JFU1RPUkVfU0lHTUFTSwkoMTw8VElGX1JFU1RPUkVfU0lHTUFTSykKKyNkZWZpbmUgX1RJRl9GUkVFWkUJCSgxPDxUSUZfRlJFRVpFKQogCiAjZGVmaW5lIF9USUZfV09SS19NQVNLCQkweDAwMDBGRkZFCS8qIHdvcmsgdG8gZG8gb24gaW50ZXJydXB0L2V4Y2VwdGlvbiByZXR1cm4gKi8KIApkaWZmIC0tZ2l0IGEvYXJjaC9oODMwMC9rZXJuZWwvTWFrZWZpbGUgYi9hcmNoL2g4MzAwL2tlcm5lbC9NYWtlZmlsZQppbmRleCA2YzI0OGMzLi44ZDRkMmE1IDEwMDY0NAotLS0gYS9hcmNoL2g4MzAwL2tlcm5lbC9NYWtlZmlsZQorKysgYi9hcmNoL2g4MzAwL2tlcm5lbC9NYWtlZmlsZQpAQCAtNyw2ICs3LDYgQEAKIG9iai15IDo9IHByb2Nlc3MubyB0cmFwcy5vIHB0cmFjZS5vIGlycS5vIFwKIAkgc3lzX2g4MzAwLm8gdGltZS5vIHNpZ25hbC5vIFwKICAgICAgICAgIHNldHVwLm8gZ3Bpby5vIGluaXRfdGFzay5vIHN5c2NhbGxzLm8gXAotCSBlbnRyeS5vCisJIGVudHJ5Lm8gdGltZXIvCiAKIG9iai0kKENPTkZJR19NT0RVTEVTKSArPSBtb2R1bGUubyBoODMwMF9rc3ltcy5vIApkaWZmIC0tZ2l0IGEvYXJjaC9oODMwMC9rZXJuZWwvbW9kdWxlLmMgYi9hcmNoL2g4MzAwL2tlcm5lbC9tb2R1bGUuYwppbmRleCA0ZmQ3MTM4Li5jZmM5MTI3IDEwMDY0NAotLS0gYS9hcmNoL2g4MzAwL2tlcm5lbC9tb2R1bGUuYworKysgYi9hcmNoL2g4MzAwL2tlcm5lbC9tb2R1bGUuYwpAQCAtMTE0LDkgKzExNCwxMCBAQAogCQkgICAgY29uc3QgRWxmX1NoZHIgKnNlY2hkcnMsCiAJCSAgICBzdHJ1Y3QgbW9kdWxlICptZSkKIHsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gbW9kdWxlX2J1Z19maW5hbGl6ZShoZHIsIHNlY2hkcnMsIG1lKTsKIH0KIAogdm9pZCBtb2R1bGVfYXJjaF9jbGVhbnVwKHN0cnVjdCBtb2R1bGUgKm1vZCkKIHsKKwltb2R1bGVfYnVnX2NsZWFudXAobW9kKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvaDgzMDAva2VybmVsL3Byb2Nlc3MuYyBiL2FyY2gvaDgzMDAva2VybmVsL3Byb2Nlc3MuYwppbmRleCBkZmJlN2FiLi5hOGVmNjU0IDEwMDY0NAotLS0gYS9hcmNoL2g4MzAwL2tlcm5lbC9wcm9jZXNzLmMKKysrIGIvYXJjaC9oODMwMC9rZXJuZWwvcHJvY2Vzcy5jCkBAIC0zNCw3ICszNCw2IEBACiAjaW5jbHVkZSA8bGludXgvcHRyYWNlLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3VzZXIuaD4KLSNpbmNsdWRlIDxsaW51eC9hLm91dC5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L3JlYm9vdC5oPgogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CmRpZmYgLS1naXQgYS9hcmNoL2g4MzAwL2tlcm5lbC90aW1lLmMgYi9hcmNoL2g4MzAwL2tlcm5lbC90aW1lLmMKaW5kZXggZTM3YzgzNS4uN2YyZDZjZiAxMDA2NDQKLS0tIGEvYXJjaC9oODMwMC9rZXJuZWwvdGltZS5jCisrKyBiL2FyY2gvaDgzMDAva2VybmVsL3RpbWUuYwpAQCAtMjcsMjcgKzI3LDIxIEBACiAjaW5jbHVkZSA8bGludXgvcHJvZmlsZS5oPgogCiAjaW5jbHVkZSA8YXNtL2lvLmg+Ci0jaW5jbHVkZSA8YXNtL3RhcmdldF90aW1lLmg+CisjaW5jbHVkZSA8YXNtL3RpbWVyLmg+CiAKICNkZWZpbmUJVElDS19TSVpFICh0aWNrX25zZWMgLyAxMDAwKQogCi0vKgotICogdGltZXJfaW50ZXJydXB0KCkgbmVlZHMgdG8ga2VlcCB1cCB0aGUgcmVhbC10aW1lIGNsb2NrLAotICogYXMgd2VsbCBhcyBjYWxsIHRoZSAiZG9fdGltZXIoKSIgcm91dGluZSBldmVyeSBjbG9ja3RpY2sKLSAqLwotc3RhdGljIHZvaWQgdGltZXJfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmR1bW15LCBzdHJ1Y3QgcHRfcmVncyAqIHJlZ3MpCit2b2lkIGg4MzAwX3RpbWVyX3RpY2sodm9pZCkKIHsKLQkvKiBtYXkgbmVlZCB0byBraWNrIHRoZSBoYXJkd2FyZSB0aW1lciAqLwotCXBsYXRmb3JtX3RpbWVyX2VvaSgpOwotCisJaWYgKGN1cnJlbnQtPnBpZCkKKwkJcHJvZmlsZV90aWNrKENQVV9QUk9GSUxJTkcpOworCXdyaXRlX3NlcWxvY2soJnh0aW1lX2xvY2spOwogCWRvX3RpbWVyKDEpOwotI2lmbmRlZiBDT05GSUdfU01QCi0JdXBkYXRlX3Byb2Nlc3NfdGltZXModXNlcl9tb2RlKHJlZ3MpKTsKLSNlbmRpZgotCXByb2ZpbGVfdGljayhDUFVfUFJPRklMSU5HKTsKKwl3cml0ZV9zZXF1bmxvY2soJnh0aW1lX2xvY2spOworCXVwZGF0ZV9wcm9jZXNzX3RpbWVzKHVzZXJfbW9kZShnZXRfaXJxX3JlZ3MoKSkpOwogfQogCi12b2lkIHRpbWVfaW5pdCh2b2lkKQordm9pZCBfX2luaXQgdGltZV9pbml0KHZvaWQpCiB7CiAJdW5zaWduZWQgaW50IHllYXIsIG1vbiwgZGF5LCBob3VyLCBtaW4sIHNlYzsKIApAQCAtNTcsMTIgKzUxLDEzIEBACiAJeWVhciA9IDE5ODA7CiAJbW9uID0gZGF5ID0gMTsKIAlob3VyID0gbWluID0gc2VjID0gMDsKLQlwbGF0Zm9ybV9nZXR0b2QgKCZ5ZWFyLCAmbW9uLCAmZGF5LCAmaG91ciwgJm1pbiwgJnNlYyk7Ci0KKyNpZmRlZiBDT05GSUdfSDgzMDBfR0VUVE9ECisJaDgzMDBfZ2V0dG9kICgmeWVhciwgJm1vbiwgJmRheSwgJmhvdXIsICZtaW4sICZzZWMpOworI2VuZGlmCiAJaWYgKCh5ZWFyICs9IDE5MDApIDwgMTk3MCkKIAkJeWVhciArPSAxMDA7CiAJeHRpbWUudHZfc2VjID0gbWt0aW1lKHllYXIsIG1vbiwgZGF5LCBob3VyLCBtaW4sIHNlYyk7CiAJeHRpbWUudHZfbnNlYyA9IDA7CiAKLQlwbGF0Zm9ybV90aW1lcl9zZXR1cCh0aW1lcl9pbnRlcnJ1cHQpOworCWg4MzAwX3RpbWVyX3NldHVwKCk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2g4MzAwL2tlcm5lbC90aW1lci9NYWtlZmlsZSBiL2FyY2gvaDgzMDAva2VybmVsL3RpbWVyL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlZjA1MTAKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2g4MzAwL2tlcm5lbC90aW1lci9NYWtlZmlsZQpAQCAtMCwwICsxLDYgQEAKKyMgaDgzMDAgaW50ZXJuYWwgdGltZXIgaGFuZGxlcgorCitvYmotJChDT05GSUdfSDgzMDBfVElNRVI4KSAgOj0gdGltZXI4Lm8KK29iai0kKENPTkZJR19IODMwMF9USU1FUjE2KSA6PSB0aW1lcjE2Lm8KK29iai0kKENPTkZJR19IODMwMF9JVFUpICAgICA6PSBpdHUubworb2JqLSQoQ09ORklHX0g4MzAwX1RQVSkgICAgIDo9IHRwdS5vCmRpZmYgLS1naXQgYS9hcmNoL2g4MzAwL2tlcm5lbC90aW1lci9pdHUuYyBiL2FyY2gvaDgzMDAva2VybmVsL3RpbWVyL2l0dS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQxYzkyNjUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2g4MzAwL2tlcm5lbC90aW1lci9pdHUuYwpAQCAtMCwwICsxLDgzIEBACisvKgorICogIGxpbnV4L2FyY2gvaDgzMDAva2VybmVsL3RpbWVyL2l0dS5jCisgKgorICogIFlvc2hpbm9yaSBTYXRvIDx5c2F0b0B1c2Vycy5zb3VyY2Vmb2dlLmpwPgorICoKKyAqICBJVFUgVGltZXIgSGFuZGxlcgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3BhcmFtLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvdGltZXguaD4KKworI2luY2x1ZGUgPGFzbS9zZWdtZW50Lmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL2lycS5oPgorI2luY2x1ZGUgPGFzbS9yZWdzMzA2eC5oPgorCisjaWYgQ09ORklHX0g4MzAwX0lUVV9DSCA9PSAwCisjZGVmaW5lIElUVUJBU0UJMHhmZmZmNjQKKyNkZWZpbmUgSVRVSVJRCTI0CisjZWxpZiBDT05GSUdfSDgzMDBfSVRVX0NIID09IDEKKyNkZWZpbmUgSVRVQkFTRQkweGZmZmY2ZQorI2RlZmluZSBJVFVJUlEJMjgKKyNlbGlmIENPTkZJR19IODMwMF9JVFVfQ0ggPT0gMgorI2RlZmluZSBJVFVCQVNFCTB4ZmZmZjc4CisjZGVmaW5lIElUVUlSUQkzMgorI2VsaWYgQ09ORklHX0g4MzAwX0lUVV9DSCA9PSAzCisjZGVmaW5lIElUVUJBU0UJMHhmZmZmODIKKyNkZWZpbmUgSVRVSVJRCTM2CisjZWxpZiBDT05GSUdfSDgzMDBfSVRVX0NIID09IDQKKyNkZWZpbmUgSVRVQkFTRQkweGZmZmY5MgorI2RlZmluZSBJVFVJUlEJNDAKKyNlbHNlCisjZXJyb3IgVW5rbm93biB0aW1lciBjaGFubmVsLgorI2VuZGlmCisKKyNkZWZpbmUgVENSCTAKKyNkZWZpbmUgVElPUgkxCisjZGVmaW5lIFRJRVIJMgorI2RlZmluZSBUU1IJMworI2RlZmluZSBUQ05UCTQKKyNkZWZpbmUgR1JBCTYKKyNkZWZpbmUgR1JCCTgKKworc3RhdGljIGlycXJldHVybl90IHRpbWVyX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpCit7CisJaDgzMDBfdGltZXJfdGljaygpOworCWN0cmxfYmNscihJTUZBLCBJVFVCQVNFICsgVFNSKTsKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaXJxYWN0aW9uIGl0dV9pcnEgPSB7CisJLm5hbWUJCT0gIml0dSIsCisJLmhhbmRsZXIJPSB0aW1lcl9pbnRlcnJ1cHQsCisJLmZsYWdzCQk9IElSUUZfRElTQUJMRUQgfCBJUlFGX1RJTUVSLAorCS5tYXNrCQk9IENQVV9NQVNLX05PTkUsCit9OworCitzdGF0aWMgY29uc3QgaW50IF9faW5pdGRhdGEgZGl2aWRlX3JhdGVbXSA9IHsxLCAyLCA0LCA4fTsKKwordm9pZCBfX2luaXQgaDgzMDBfdGltZXJfc2V0dXAodm9pZCkKK3sKKwl1bnNpZ25lZCBpbnQgZGl2OworCXVuc2lnbmVkIGludCBjbnQ7CisKKwljYWxjX3BhcmFtKGNudCwgZGl2LCBkaXZpZGVfcmF0ZSwgMHgxMDAwMCk7CisKKwlzZXR1cF9pcnEoSVRVSVJRLCAmaXR1X2lycSk7CisKKwkvKiBpbml0YWxpemUgdGltZXIgKi8KKwljdHJsX291dGIoMCwgVFNUUik7CisJY3RybF9vdXRiKENDTFIwIHwgZGl2LCBJVFVCQVNFICsgVENSKTsKKwljdHJsX291dGIoMHgwMSwgSVRVQkFTRSArIFRJRVIpOworCWN0cmxfb3V0dyhjbnQsIElUVUJBU0UgKyBHUkEpOworCWN0cmxfYnNldChDT05GSUdfSDgzMDBfSVRVX0NILCBUU1RSKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvaDgzMDAva2VybmVsL3RpbWVyL3RpbWVyMTYuYyBiL2FyY2gvaDgzMDAva2VybmVsL3RpbWVyL3RpbWVyMTYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMTQyNzFiCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9oODMwMC9rZXJuZWwvdGltZXIvdGltZXIxNi5jCkBAIC0wLDAgKzEsNzggQEAKKy8qCisgKiAgbGludXgvYXJjaC9oODMwMC9rZXJuZWwvdGltZXIvdGltZXIxNi5jCisgKgorICogIFlvc2hpbm9yaSBTYXRvIDx5c2F0b0B1c2Vycy5zb3VyY2Vmb2dlLmpwPgorICoKKyAqICAxNmJpdCBUaW1lciBIYW5kbGVyCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvcGFyYW0uaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC90aW1leC5oPgorCisjaW5jbHVkZSA8YXNtL3NlZ21lbnQuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vaXJxLmg+CisjaW5jbHVkZSA8YXNtL3JlZ3MzMDZ4Lmg+CisKKy8qIDE2Yml0IHRpbWVyICovCisjaWYgQ09ORklHX0g4MzAwX1RJTUVSMTZfQ0ggPT0gMAorI2RlZmluZSBfMTZCQVNFCTB4ZmZmZjc4CisjZGVmaW5lIF8xNklSUQkyNAorI2VsaWYgQ09ORklHX0g4MzAwX1RJTUVSMTZfQ0ggPT0gMQorI2RlZmluZSBfMTZCQVNFCTB4ZmZmZjgwCisjZGVmaW5lIF8xNklSUQkyOAorI2VsaWYgQ09ORklHX0g4MzAwX1RJTUVSMTZfQ0ggPT0gMgorI2RlZmluZSBfMTZCQVNFCTB4ZmZmZjg4CisjZGVmaW5lIF8xNklSUQkzMgorI2Vsc2UKKyNlcnJvciBVbmtub3duIHRpbWVyIGNoYW5uZWwuCisjZW5kaWYKKworI2RlZmluZSBUQ1IJMAorI2RlZmluZSBUSU9SCTEKKyNkZWZpbmUgVENOVAkyCisjZGVmaW5lIEdSQQk0CisjZGVmaW5lIEdSQgk2CisKKyNkZWZpbmUgSDgzMDBfVElNRVJfRlJFUSBDT05GSUdfQ1BVX0NMT0NLKjEwMDAwIC8qIFRpbWVyIGlucHV0IGZyZXEuICovCisKK3N0YXRpYyBpcnFyZXR1cm5fdCB0aW1lcl9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKQoreworCWg4MzAwX3RpbWVyX3RpY2soKTsKKwljdHJsX2JjbHIoQ09ORklHX0g4MzAwX1RJTUVSMTZfQ0gsIFRJU1JBKTsKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaXJxYWN0aW9uIHRpbWVyMTZfaXJxID0geworCS5uYW1lCQk9ICJ0aW1lci0xNiIsCisJLmhhbmRsZXIJPSB0aW1lcl9pbnRlcnJ1cHQsCisJLmZsYWdzCQk9IElSUUZfRElTQUJMRUQgfCBJUlFGX1RJTUVSLAorCS5tYXNrCQk9IENQVV9NQVNLX05PTkUsCit9OworCitzdGF0aWMgY29uc3QgaW50IF9faW5pdGRhdGEgZGl2aWRlX3JhdGVbXSA9IHsxLCAyLCA0LCA4fTsKKwordm9pZCBfX2luaXQgaDgzMDBfdGltZXJfc2V0dXAodm9pZCkKK3sKKwl1bnNpZ25lZCBpbnQgZGl2OworCXVuc2lnbmVkIGludCBjbnQ7CisKKwljYWxjX3BhcmFtKGNudCwgZGl2LCBkaXZpZGVfcmF0ZSwgMHgxMDAwMCk7CisKKwlzZXR1cF9pcnEoXzE2SVJRLCAmdGltZXIxNl9pcnEpOworCisJLyogaW5pdGFsaXplIHRpbWVyICovCisJY3RybF9vdXRiKDAsIFRTVFIpOworCWN0cmxfb3V0YihDQ0xSMCB8IGRpdiwgXzE2QkFTRSArIFRDUik7CisJY3RybF9vdXR3KGNudCwgXzE2QkFTRSArIEdSQSk7CisJY3RybF9ic2V0KDQgKyBDT05GSUdfSDgzMDBfVElNRVIxNl9DSCwgVElTUkEpOworCWN0cmxfYnNldChDT05GSUdfSDgzMDBfVElNRVIxNl9DSCwgVFNUUik7Cit9CmRpZmYgLS1naXQgYS9hcmNoL2g4MzAwL2tlcm5lbC90aW1lci90aW1lcjguYyBiL2FyY2gvaDgzMDAva2VybmVsL3RpbWVyL3RpbWVyOC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA1NTZkN2MKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2g4MzAwL2tlcm5lbC90aW1lci90aW1lcjguYwpAQCAtMCwwICsxLDEwMyBAQAorLyoKKyAqICBsaW51eC9hcmNoL2g4MzAwL2tlcm5lbC9jcHUvdGltZXIvdGltZXI4LmMKKyAqCisgKiAgWW9zaGlub3JpIFNhdG8gPHlzYXRvQHVzZXJzLnNvdXJjZWZvZ2UuanA+CisgKgorICogIDhiaXQgVGltZXIgSGFuZGxlcgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3BhcmFtLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvcHJvZmlsZS5oPgorCisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL2lycS5oPgorI2luY2x1ZGUgPGFzbS90aW1lci5oPgorI2lmIGRlZmluZWQoQ09ORklHX0NQVV9IODMwMEgpCisjaW5jbHVkZSA8YXNtL3JlZ3MzMDZ4Lmg+CisjZW5kaWYKKyNpZiBkZWZpbmVkKENPTkZJR19DUFVfSDhTKQorI2luY2x1ZGUgPGFzbS9yZWdzMjY3eC5oPgorI2VuZGlmCisKKy8qIDhiaXQgdGltZXIgeDIgKi8KKyNkZWZpbmUgQ01GQQk2CisKKyNpZiBkZWZpbmVkKENPTkZJR19IODMwMF9USU1FUjhfQ0gwKQorI2RlZmluZSBfOEJBU0UJXzhUQ1IwCisjaWZkZWYgQ09ORklHX0NQVV9IODMwMEgKKyNkZWZpbmUgXzhJUlEJMzYKKyNlbmRpZgorI2lmZGVmIENPTkZJR19DUFVfSDhTCisjZGVmaW5lIF84SVJRCTcyCisjZW5kaWYKKyNlbGlmIGRlZmluZWQoQ09ORklHX0g4MzAwX1RJTUVSOF9DSDIpCisjaWZkZWYgQ09ORklHX0NQVV9IODMwMEgKKyNkZWZpbmUgXzhCQVNFCV84VENSMgorI2RlZmluZSBfOElSUQk0MAorI2VuZGlmCisjZW5kaWYKKworI2lmbmRlZiBfOEJBU0UKKyNlcnJvciBVbmtub3duIHRpbWVyIGNoYW5uZWwuCisjZW5kaWYKKworI2RlZmluZSBfOFRDUgkwCisjZGVmaW5lIF84VENTUgkyCisjZGVmaW5lIFRDT1JBCTQKKyNkZWZpbmUgVENPUkIJNgorI2RlZmluZSBfOFRDTlQJOAorCisjZGVmaW5lIENNSUVBCTB4NDAKKyNkZWZpbmUgQ0NMUl9DTUEgMHgwOAorI2RlZmluZSBDS1MyCTB4MDQKKworLyoKKyAqIHRpbWVyX2ludGVycnVwdCgpIG5lZWRzIHRvIGtlZXAgdXAgdGhlIHJlYWwtdGltZSBjbG9jaywKKyAqIGFzIHdlbGwgYXMgY2FsbCB0aGUgImRvX3RpbWVyKCkiIHJvdXRpbmUgZXZlcnkgY2xvY2t0aWNrCisgKi8KKworc3RhdGljIGlycXJldHVybl90IHRpbWVyX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpCit7CisJaDgzMDBfdGltZXJfdGljaygpOworCWN0cmxfYmNscihDTUZBLCBfOEJBU0UgKyBfOFRDU1IpOworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIHN0cnVjdCBpcnFhY3Rpb24gdGltZXI4X2lycSA9IHsKKwkubmFtZQkJPSAidGltZXItOCIsCisJLmhhbmRsZXIJPSB0aW1lcl9pbnRlcnJ1cHQsCisJLmZsYWdzCQk9IElSUUZfRElTQUJMRUQgfCBJUlFGX1RJTUVSLAorCS5tYXNrCQk9IENQVV9NQVNLX05PTkUsCit9OworCitzdGF0aWMgY29uc3QgaW50IF9faW5pdGRhdGEgZGl2aWRlX3JhdGVbXSA9IHs4LCA2NCwgODE5Mn07CisKK3ZvaWQgX19pbml0IGg4MzAwX3RpbWVyX3NldHVwKHZvaWQpCit7CisJdW5zaWduZWQgaW50IGRpdjsKKwl1bnNpZ25lZCBpbnQgY250OworCisJY2FsY19wYXJhbShjbnQsIGRpdiwgZGl2aWRlX3JhdGUsIDB4MTAwMDApOworCWRpdisrOworCisJc2V0dXBfaXJxKF84SVJRLCAmdGltZXI4X2lycSk7CisKKyNpZiBkZWZpbmVkKENPTkZJR19DUFVfSDhTKQorCS8qIFRpbWVyIG1vZHVsZSBlbmFibGUgKi8KKwljdHJsX2JjbHIoMCwgTVNUUENSTCkKKyNlbmRpZgorCisJLyogaW5pdGFsaXplIHRpbWVyICovCisJY3RybF9vdXR3KGNudCwgXzhCQVNFICsgVENPUkEpOworCWN0cmxfb3V0dygweDAwMDAsIF84QkFTRSArIF84VENTUik7CisJY3RybF9vdXR3KChDTUlFQXxDQ0xSX0NNQXxDS1MyKSA8PCA4IHwgZGl2LAorCQkgIF84QkFTRSArIF84VENSKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvaDgzMDAva2VybmVsL3RpbWVyL3RwdS5jIGIvYXJjaC9oODMwMC9rZXJuZWwvdGltZXIvdHB1LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGY3ZjQ1MwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvaDgzMDAva2VybmVsL3RpbWVyL3RwdS5jCkBAIC0wLDAgKzEsMTAyIEBACisvKgorICogIGxpbnV4L2FyY2gvaDgzMDAva2VybmVsL3RpbWVyL3RwdS5jCisgKgorICogIFlvc2hpbm9yaSBTYXRvIDx5c2F0b0B1c2Vycy5zb3VyY2Vmb3JnZS5qcD4KKyAqCisgKiAgVFBVIFRpbWVyIEhhbmRsZXIKKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9wYXJhbS5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWV4Lmg+CisKKyNpbmNsdWRlIDxhc20vc2VnbWVudC5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS9pcnEuaD4KKyNpbmNsdWRlIDxhc20vcmVnczI2N3guaD4KKworLyogVFBVICovCisjaWYgQ09ORklHX0g4MzAwX1RQVV9DSCA9PSAwCisjZGVmaW5lIFRQVUJBU0UJMHhmZmZmZDAKKyNkZWZpbmUgVFBVSVJRCTQwCisjZWxpZiBDT05GSUdfSDgzMDBfVFBVX0NIID09IDEKKyNkZWZpbmUgVFBVQkFTRQkweGZmZmZlMAorI2RlZmluZSBUUFVJUlEJNDgKKyNlbGlmIENPTkZJR19IODMwMF9UUFVfQ0ggPT0gMgorI2RlZmluZSBUUFVCQVNFCTB4ZmZmZmYwCisjZGVmaW5lIFRQVUlSUQk1MgorI2VsaWYgQ09ORklHX0g4MzAwX1RQVV9DSCA9PSAzCisjZGVmaW5lIFRQVUJBU0UJMHhmZmZlODAKKyNkZWZpbmUgVFBVSVJRCTU2CisjZWxpZiBDT05GSUdfSDgzMDBfVFBVX0NIID09IDQKKyNkZWZpbmUgVFBVQkFTRQkweGZmZmU5MAorI2RlZmluZSBUUFVJUlEJNjQKKyNlbHNlCisjZXJyb3IgVW5rbm93biB0aW1lciBjaGFubmVsLgorI2VuZGlmCisKKyNkZWZpbmUgX1RDUgkwCisjZGVmaW5lIF9UTURSCTEKKyNkZWZpbmUgX1RJT1IJMgorI2RlZmluZSBfVElFUgk0CisjZGVmaW5lIF9UU1IJNQorI2RlZmluZSBfVENOVAk2CisjZGVmaW5lIF9HUkEJOAorI2RlZmluZSBfR1JCCTEwCisKKyNkZWZpbmUgQ0NMUjAJMHgyMAorCitzdGF0aWMgaXJxcmV0dXJuX3QgdGltZXJfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3sKKwloODMwMF90aW1lcl90aWNrKCk7CisJY3RybF9iY2xyKDAsIFRQVUJBU0UgKyBfVFNSKTsKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaXJxYWN0aW9uIHRwdV9pcnEgPSB7CisJLm5hbWUJCT0gInRwdSIsCisJLmhhbmRsZXIJPSB0aW1lcl9pbnRlcnJ1cHQsCisJLmZsYWdzCQk9IElSUUZfRElTQUJMRUQgfCBJUlFGX1RJTUVSLAorCS5tYXNrCQk9IENQVV9NQVNLX05PTkUsCit9OworCitjb25zdCBzdGF0aWMgaW50IF9faW5pdGRhdGEgZGl2aWRlX3JhdGVbXSA9IHsKKyNpZiBDT05GSUdfSDgzMDBfVFBVX0NIID09IDAKKwkxLDQsMTYsNjQsMCwwLDAsMCwKKyNlbGlmIChDT05GSUdfSDgzMDBfVFBVX0NIID09IDEpIHx8IChDT05GSUdfSDgzMDBfVFBVX0NIID09IDUpCisJMSw0LDE2LDY0LDAsMCwyNTYsMCwKKyNlbGlmIChDT05GSUdfSDgzMDBfVFBVX0NIID09IDIpIHx8IChDT05GSUdfSDgzMDBfVFBVX0NIID09IDQpCisJMSw0LDE2LDY0LDAsMCwwLDEwMjQsCisjZWxpZiBDT05GSUdfSDgzMDBfVFBVX0NIID09IDMKKwkxLDQsMTYsNjQsMCwxMDI0LDI1Niw0MDk2LAorI2VuZGlmCit9OworCit2b2lkIF9faW5pdCBoODMwMF90aW1lcl9zZXR1cCh2b2lkKQoreworCXVuc2lnbmVkIGludCBjbnQ7CisJdW5zaWduZWQgaW50IGRpdjsKKworCWNhbGNfcGFyYW0oY250LCBkaXYsIGRpdmlkZV9yYXRlLCAweDEwMDAwKTsKKworCXNldHVwX2lycShUUFVJUlEsICZ0cHVfaXJxKTsKKworCS8qIFRQVSBtb2R1bGUgZW5hYmxlZCAqLworCWN0cmxfYmNscigzLCBNU1RQQ1JIKTsKKworCWN0cmxfb3V0YigwLCBUU1RSKTsKKwljdHJsX291dGIoQ0NMUjAgfCBkaXYsIFRQVUJBU0UgKyBfVENSKTsKKwljdHJsX291dGIoMCwgVFBVQkFTRSArIF9UTURSKTsKKwljdHJsX291dHcoMCwgVFBVQkFTRSArIF9USU9SKTsKKwljdHJsX291dGIoMHgwMSwgVFBVQkFTRSArIF9USUVSKTsKKwljdHJsX291dHcoY250LCBUUFVCQVNFICsgX0dSQSk7CisJY3RybF9ic2V0KENPTkZJR19IODMwMF9UUFVfQ0gsIFRTVFIpOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9oODMwMC9rZXJuZWwvdHJhcHMuYyBiL2FyY2gvaDgzMDAva2VybmVsL3RyYXBzLmMKaW5kZXggZjhmN2Q3ZWEuLjNjMGI2NmIgMTAwNjQ0Ci0tLSBhL2FyY2gvaDgzMDAva2VybmVsL3RyYXBzLmMKKysrIGIvYXJjaC9oODMwMC9rZXJuZWwvdHJhcHMuYwpAQCAtMjAsMTIgKzIwLDE0IEBACiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvYnVnLmg+CiAKICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAjaW5jbHVkZSA8YXNtL2lycS5oPgogI2luY2x1ZGUgPGFzbS90cmFwcy5oPgogI2luY2x1ZGUgPGFzbS9wYWdlLmg+Ci0jaW5jbHVkZSA8YXNtL2dwaW8uaD4KKworc3RhdGljIERFRklORV9TUElOTE9DSyhkaWVfbG9jayk7CiAKIC8qCiAgKiB0aGlzIG11c3QgYmUgY2FsbGVkIHZlcnkgZWFybHkgYXMgdGhlIGtlcm5lbCBtaWdodApAQCAtOTQsMTYgKzk2LDE5IEBACiAJcHJpbnRrKCJcblxuIik7CiB9CiAKLXZvaWQgZGllX2lmX2tlcm5lbCAoY2hhciAqc3RyLCBzdHJ1Y3QgcHRfcmVncyAqZnAsIGludCBucikKK3ZvaWQgZGllKGNoYXIgKnN0ciwgc3RydWN0IHB0X3JlZ3MgKmZwLCB1bnNpZ25lZCBsb25nIGVycikKIHsKLQlleHRlcm4gaW50IGNvbnNvbGVfbG9nbGV2ZWw7CisJc3RhdGljIGludCBkaWVjb3VudDsKIAotCWlmICghKGZwLT5jY3IgJiBQU19TKSkKLQkJcmV0dXJuOworCW9vcHNfZW50ZXIoKTsKIAotCWNvbnNvbGVfbG9nbGV2ZWwgPSAxNTsKKwljb25zb2xlX3ZlcmJvc2UoKTsKKwlzcGluX2xvY2tfaXJxKCZkaWVfbG9jayk7CisJcmVwb3J0X2J1ZyhmcC0+cGMsIGZwKTsKKwlwcmludGsoS0VSTl9FTUVSRyAiJXM6ICUwNGx4IFsjJWRdICIsIHN0ciwgZXJyICYgMHhmZmZmLCArK2RpZWNvdW50KTsKIAlkdW1wKGZwKTsKIAorCXNwaW5fdW5sb2NrX2lycSgmZGllX2xvY2spOwogCWRvX2V4aXQoU0lHU0VHVik7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvaDgzMDAvbW0vZmF1bHQuYyBiL2FyY2gvaDgzMDAvbW0vZmF1bHQuYwppbmRleCAyOWU5YWY5Li4xZDA5MmFiIDEwMDY0NAotLS0gYS9hcmNoL2g4MzAwL21tL2ZhdWx0LmMKKysrIGIvYXJjaC9oODMwMC9tbS9mYXVsdC5jCkBAIC0yMCw4ICsyMCw2IEBACiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CiAKLWV4dGVybiB2b2lkIGRpZV9pZl9rZXJuZWwoY2hhciAqLCBzdHJ1Y3QgcHRfcmVncyAqLCBsb25nKTsKLQogLyoKICAqIFRoaXMgcm91dGluZSBoYW5kbGVzIHBhZ2UgZmF1bHRzLiAgSXQgZGV0ZXJtaW5lcyB0aGUgcHJvYmxlbSwgYW5kCiAgKiB0aGVuIHBhc3NlcyBpdCBvZmYgdG8gb25lIG9mIHRoZSBhcHByb3ByaWF0ZSByb3V0aW5lcy4KQEAgLTUwLDcgKzQ4LDggQEAKIAl9IGVsc2UKIAkJcHJpbnRrKEtFUk5fQUxFUlQgIlVuYWJsZSB0byBoYW5kbGUga2VybmVsIGFjY2VzcyIpOwogCXByaW50aygiIGF0IHZpcnR1YWwgYWRkcmVzcyAlMDhseFxuIixhZGRyZXNzKTsKLQlkaWVfaWZfa2VybmVsKCJPb3BzIiwgcmVncywgZXJyb3JfY29kZSk7CisJaWYgKCF1c2VyX21vZGUocmVncykpCisJCWRpZSgiT29wcyIsIHJlZ3MsIGVycm9yX2NvZGUpOwogCWRvX2V4aXQoU0lHS0lMTCk7CiAKIAlyZXR1cm4gMTsKZGlmZiAtLWdpdCBhL2FyY2gvaDgzMDAvcGxhdGZvcm0vaDgzMDBoL2FraTMwNjhuZXQvTWFrZWZpbGUgYi9hcmNoL2g4MzAwL3BsYXRmb3JtL2g4MzAwaC9ha2kzMDY4bmV0L01ha2VmaWxlCmluZGV4IGIwM2MzMjguLmI3ZmY3ODAgMTAwNjQ0Ci0tLSBhL2FyY2gvaDgzMDAvcGxhdGZvcm0vaDgzMDBoL2FraTMwNjhuZXQvTWFrZWZpbGUKKysrIGIvYXJjaC9oODMwMC9wbGF0Zm9ybS9oODMwMGgvYWtpMzA2OG5ldC9NYWtlZmlsZQpAQCAtMyw0ICszLDMgQEAKICMKIAogZXh0cmEteSA6PSBjcnQwX3JhbS5vCi1vYmoteSA6PSB0aW1lci5vCmRpZmYgLS1naXQgYS9hcmNoL2g4MzAwL3BsYXRmb3JtL2g4MzAwaC9ha2kzMDY4bmV0L3RpbWVyLmMgYi9hcmNoL2g4MzAwL3BsYXRmb3JtL2g4MzAwaC9ha2kzMDY4bmV0L3RpbWVyLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI3Y2Q4NWQuLjAwMDAwMDAKLS0tIGEvYXJjaC9oODMwMC9wbGF0Zm9ybS9oODMwMGgvYWtpMzA2OG5ldC90aW1lci5jCisrKyAvZGV2L251bGwKQEAgLTEsNTEgKzAsMCBAQAotLyoKLSAqICBsaW51eC9hcmNoL2g4MzAwL3BsYXRmb3JtL2g4MzAwaC9ha2kzMDY4bmV0L3RpbWVyLmMKLSAqCi0gKiAgWW9zaGlub3JpIFNhdG8gPHlzYXRvQHVzZXJzLnNvdXJjZWZvZ2UuanA+Ci0gKgotICogIFBsYXRmb3JtIGRlcGVuZCBUaW1lciBIYW5kbGVyCi0gKgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgotI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+Ci0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvcGFyYW0uaD4KLSNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KLSNpbmNsdWRlIDxsaW51eC9tbS5oPgotI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC90aW1leC5oPgotCi0jaW5jbHVkZSA8YXNtL3NlZ21lbnQuaD4KLSNpbmNsdWRlIDxhc20vaW8uaD4KLSNpbmNsdWRlIDxhc20vaXJxLmg+Ci0jaW5jbHVkZSA8YXNtL3JlZ3MzMDZ4Lmg+Ci0KLSNkZWZpbmUgQ01GQSA2Ci0KLSNkZWZpbmUgQ01JRUEgMHg0MAotI2RlZmluZSBDQ0xSX0NNQSAweDA4Ci0jZGVmaW5lIENMS19ESVY4MTkyIDB4MDMKLQotI2RlZmluZSBIODMwMF9USU1FUl9GUkVRIENPTkZJR19DUFVfQ0xPQ0sqMTAwMC84MTkyIC8qIFRpbWVyIGlucHV0IGZyZXEuICovCi0KLXZvaWQgX19pbml0IHBsYXRmb3JtX3RpbWVyX3NldHVwKGlycXJldHVybl90ICgqdGltZXJfaW50KShpbnQsIHZvaWQgKiwgc3RydWN0IHB0X3JlZ3MgKikpCi17Ci0JLyogc2V0dXAgOGJpdCB0aW1lciBjaDIgKi8KLQljdHJsX291dGIoSDgzMDBfVElNRVJfRlJFUSAvIEhaLCBUQ09SQTIpOyAgICAgIC8qIHNldCBpbnRlcnZhbCAqLwotCWN0cmxfb3V0YigweDAwLCBfOFRDU1IyKTsgICAgICAgICAgICAgICAgICAgICAgLyogbm8gb3V0cHV0ICovCi0JcmVxdWVzdF9pcnEoNDAsIHRpbWVyX2ludCwgMCwgInRpbWVyIiwgMCk7Ci0JY3RybF9vdXRiKENNSUVBfENDTFJfQ01BfENMS19ESVY4MTkyLCBfOFRDUjIpOyAvKiBzdGFydCBjb3VudCAqLwotfQotCi12b2lkIHBsYXRmb3JtX3RpbWVyX2VvaSh2b2lkKQotewotCSoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKV84VENTUjIgJj0gfigxIDw8IENNRkEpOwotfQotCi12b2lkIHBsYXRmb3JtX2dldHRvZChpbnQgKnllYXIsIGludCAqbW9uLCBpbnQgKmRheSwgaW50ICpob3VyLAotCQkgaW50ICptaW4sIGludCAqc2VjKQotewotCSp5ZWFyID0gKm1vbiA9ICpkYXkgPSAqaG91ciA9ICptaW4gPSAqc2VjID0gMDsKLX0KZGlmZiAtLWdpdCBhL2FyY2gvaDgzMDAvcGxhdGZvcm0vaDgzMDBoL2dlbmVyaWMvTWFrZWZpbGUgYi9hcmNoL2g4MzAwL3BsYXRmb3JtL2g4MzAwaC9nZW5lcmljL01ha2VmaWxlCmluZGV4IDMyYjk2NGEuLjJiMTJhMTcgMTAwNjQ0Ci0tLSBhL2FyY2gvaDgzMDAvcGxhdGZvcm0vaDgzMDBoL2dlbmVyaWMvTWFrZWZpbGUKKysrIGIvYXJjaC9oODMwMC9wbGF0Zm9ybS9oODMwMGgvZ2VuZXJpYy9NYWtlZmlsZQpAQCAtMyw0ICszLDMgQEAKICMKIAogZXh0cmEteSA6PSAgY3J0MF8kKE1PREVMKS5vCi1vYmoteSA6PSB0aW1lci5vCmRpZmYgLS1naXQgYS9hcmNoL2g4MzAwL3BsYXRmb3JtL2g4MzAwaC9nZW5lcmljL3RpbWVyLmMgYi9hcmNoL2g4MzAwL3BsYXRmb3JtL2g4MzAwaC9nZW5lcmljL3RpbWVyLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZmNWNlZmUwLi4wMDAwMDAwCi0tLSBhL2FyY2gvaDgzMDAvcGxhdGZvcm0vaDgzMDBoL2dlbmVyaWMvdGltZXIuYworKysgL2Rldi9udWxsCkBAIC0xLDk1ICswLDAgQEAKLS8qCi0gKiAgbGludXgvYXJjaC9oODMwMC9wbGF0Zm9ybS9oODMwMGgvZ2VuZXJpYy90aW1lci5jCi0gKgotICogIFlvc2hpbm9yaSBTYXRvIDx5c2F0b0B1c2Vycy5zb3VyY2Vmb3JnZS5qcD4KLSAqCi0gKiAgUGxhdGZvcm0gZGVwZW5kIFRpbWVyIEhhbmRsZXIKLSAqCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+Ci0jaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9wYXJhbS5oPgotI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgotI2luY2x1ZGUgPGxpbnV4L21tLmg+Ci0jaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Ci0KLSNpbmNsdWRlIDxhc20vc2VnbWVudC5oPgotI2luY2x1ZGUgPGFzbS9pby5oPgotI2luY2x1ZGUgPGFzbS9pcnEuaD4KLQotI2luY2x1ZGUgPGxpbnV4L3RpbWV4Lmg+Ci0KLSNpZiBkZWZpbmVkKENPTkZJR19IODMwMDcpIHx8IGRlZmluZWQoQ09ORklHX0g4MzA2OCkKLSNpbmNsdWRlIDxhc20vcmVnczMwNnguaD4KLSNkZWZpbmUgQ01GQSA2Ci0KLSNkZWZpbmUgQ01JRUEgMHg0MAotI2RlZmluZSBDQ0xSX0NNQSAweDA4Ci0jZGVmaW5lIENMS19ESVY4MTkyIDB4MDMKLQotI2RlZmluZSBIODMwMF9USU1FUl9GUkVRIENPTkZJR19DUFVfQ0xPQ0sqMTAwMC84MTkyIC8qIFRpbWVyIGlucHV0IGZyZXEuICovCi0KLXZvaWQgX19pbml0IHBsYXRmb3JtX3RpbWVyX3NldHVwKGlycXJldHVybl90ICgqdGltZXJfaW50KShpbnQsIHZvaWQgKiwgc3RydWN0IHB0X3JlZ3MgKikpCi17Ci0JLyogc2V0dXAgOGJpdCB0aW1lciBjaDIgKi8KLQljdHJsX291dGIoSDgzMDBfVElNRVJfRlJFUSAvIEhaLCBUQ09SQTIpOyAgICAgIC8qIHNldCBpbnRlcnZhbCAqLwotCWN0cmxfb3V0YigweDAwLCBfOFRDU1IyKTsgICAgICAgICAgICAgICAgICAgICAgLyogbm8gb3V0cHV0ICovCi0JcmVxdWVzdF9pcnEoNDAsIHRpbWVyX2ludCwgMCwgInRpbWVyIiwgMCk7Ci0JY3RybF9vdXRiKENNSUVBfENDTFJfQ01BfENMS19ESVY4MTkyLCBfOFRDUjIpOyAvKiBzdGFydCBjb3VudCAqLwotfQotCi12b2lkIHBsYXRmb3JtX3RpbWVyX2VvaSh2b2lkKQotewotCSoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKV84VENTUjIgJj0gfigxIDw8IENNRkEpOwotfQotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKENPTkZJR19IODMwMDIpIHx8IGRlZmluZWQoQ09ORklHX0g4MzA0OCkKLS8qIEZJWE1FISAqLwotI2RlZmluZSBUU1RSIDB4MDBmZmZmNjAKLSNkZWZpbmUgVFNOQyAweDAwZmZmZjYxCi0jZGVmaW5lIFRNRFIgMHgwMGZmZmY2MgotI2RlZmluZSBURkNSIDB4MDBmZmZmNjMKLSNkZWZpbmUgVE9FUiAweDAwZmZmZjkwCi0jZGVmaW5lIFRPQ1IgMHgwMGZmZmY5MQotLyogSVRVMCAqLwotI2RlZmluZSBUQ1IgIDB4MDBmZmZmNjQKLSNkZWZpbmUgVElPUiAweDAwZmZmZjY1Ci0jZGVmaW5lIFRJRVIgMHgwMGZmZmY2NgotI2RlZmluZSBUU1IgIDB4MDBmZmZmNjcKLSNkZWZpbmUgVENOVCAweDAwZmZmZjY4Ci0jZGVmaW5lIEdSQSAgMHgwMGZmZmY2YQotI2RlZmluZSBHUkIgIDB4MDBmZmZmNmMKLQotI2RlZmluZSBDQ0xSX0NNR1JBIDB4MjAKLSNkZWZpbmUgQ0xLX0RJVjggMHgwMwotCi0jZGVmaW5lIEg4MzAwX1RJTUVSX0ZSRVEgQ09ORklHX0NQVV9DTE9DSyoxMDAwLzggLyogVGltZXIgaW5wdXQgZnJlcS4gKi8KLQotdm9pZCBfX2luaXQgcGxhdGZvcm1fdGltZXJfc2V0dXAoaXJxcmV0dXJuX3QgKCp0aW1lcl9pbnQpKGludCwgdm9pZCAqLCBzdHJ1Y3QgcHRfcmVncyAqKSkKLXsKLQkqKHVuc2lnbmVkIHNob3J0ICopR1JBPSBIODMwMF9USU1FUl9GUkVRIC8gSFo7ICAvKiBzZXQgaW50ZXJ2YWwgKi8KLQkqKHVuc2lnbmVkIHNob3J0ICopVENOVD0wOyAgICAgICAgICAgICAgICAgICAgICAvKiBjbGVhciBjb3VudGVyICovCi0JY3RybF9vdXRiKDB4ODB8Q0NMUl9DTUdSQXxDTEtfRElWOCwgVENSKTsgICAgICAgLyogc2V0IElUVTAgY2xvY2sgKi8KLQljdHJsX291dGIoMHg4OCwgVElPUik7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBubyBvdXRwdXQgKi8KLQlyZXF1ZXN0X2lycSgyNiwgdGltZXJfaW50LCAwLCAidGltZXIiLCAwKTsKLQljdHJsX291dGIoMHhmOSwgVElFUik7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBjb21wYXJlIG1hdGNoIEdSQSBpbnRlcnJ1cHQgKi8KLQljdHJsX291dGIoY3RybF9pbmIoVFNOQykgJiB+MHgwMSwgVFNOQyk7ICAgICAgICAvKiBJVFUwIGFzeW5jICovCi0JY3RybF9vdXRiKGN0cmxfaW5iKFRNRFIpICYgfjB4MDEsIFRNRFIpOyAgICAgICAgLyogSVRVMCBub3JtYWwgbW9kZSAqLwotCWN0cmxfb3V0YihjdHJsX2luYihUU1RSKSB8IDB4MDEsIFRTVFIpOyAgICAgICAgIC8qIElUVTAgU3RhcnQgKi8KLQlyZXR1cm4gMDsKLX0KLQotdm9pZCBwbGF0Zm9ybV90aW1lcl9lb2kodm9pZCkKLXsKLQljdHJsX291dGIoY3RybF9pbmIoVFNSKSAmIH4weDAxLFRTUik7Ci19Ci0jZW5kaWYKLQotdm9pZCBwbGF0Zm9ybV9nZXR0b2QoaW50ICp5ZWFyLCBpbnQgKm1vbiwgaW50ICpkYXksIGludCAqaG91ciwKLQkJIGludCAqbWluLCBpbnQgKnNlYykKLXsKLQkqeWVhciA9ICptb24gPSAqZGF5ID0gKmhvdXIgPSAqbWluID0gKnNlYyA9IDA7Ci19CmRpZmYgLS1naXQgYS9hcmNoL2g4MzAwL3BsYXRmb3JtL2g4MzAwaC9oOG1heC9NYWtlZmlsZSBiL2FyY2gvaDgzMDAvcGxhdGZvcm0vaDgzMDBoL2g4bWF4L01ha2VmaWxlCmluZGV4IGIwM2MzMjguLmI3ZmY3ODAgMTAwNjQ0Ci0tLSBhL2FyY2gvaDgzMDAvcGxhdGZvcm0vaDgzMDBoL2g4bWF4L01ha2VmaWxlCisrKyBiL2FyY2gvaDgzMDAvcGxhdGZvcm0vaDgzMDBoL2g4bWF4L01ha2VmaWxlCkBAIC0zLDQgKzMsMyBAQAogIwogCiBleHRyYS15IDo9IGNydDBfcmFtLm8KLW9iai15IDo9IHRpbWVyLm8KZGlmZiAtLWdpdCBhL2FyY2gvaDgzMDAvcGxhdGZvcm0vaDgzMDBoL2g4bWF4L3RpbWVyLmMgYi9hcmNoL2g4MzAwL3BsYXRmb3JtL2g4MzAwaC9oOG1heC90aW1lci5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NWE1NzRhLi4wMDAwMDAwCi0tLSBhL2FyY2gvaDgzMDAvcGxhdGZvcm0vaDgzMDBoL2g4bWF4L3RpbWVyLmMKKysrIC9kZXYvbnVsbApAQCAtMSw1MiArMCwwIEBACi0vKgotICogIGxpbnV4L2FyY2gvaDgzMDAvcGxhdGZvcm0vaDgzMDBoL2g4bWF4L3RpbWVyLmMKLSAqCi0gKiAgWW9zaGlub3JpIFNhdG8gPHlzYXRvQHVzZXJzLnNvdXJjZWZvZ2UuanA+Ci0gKgotICogIFBsYXRmb3JtIGRlcGVuZCBUaW1lciBIYW5kbGVyCi0gKgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgotI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+Ci0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvcGFyYW0uaD4KLSNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KLSNpbmNsdWRlIDxsaW51eC9tbS5oPgotI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC90aW1leC5oPgotCi0jaW5jbHVkZSA8YXNtL3NlZ21lbnQuaD4KLSNpbmNsdWRlIDxhc20vaW8uaD4KLSNpbmNsdWRlIDxhc20vaXJxLmg+Ci0jaW5jbHVkZSA8YXNtL3JlZ3MzMDZ4Lmg+Ci0KLSNkZWZpbmUgQ01GQSA2Ci0KLSNkZWZpbmUgQ01JRUEgMHg0MAotI2RlZmluZSBDQ0xSX0NNQSAweDA4Ci0jZGVmaW5lIENMS19ESVY4MTkyIDB4MDMKLQotI2RlZmluZSBIODMwMF9USU1FUl9GUkVRIENPTkZJR19DUFVfQ0xPQ0sqMTAwMC84MTkyIC8qIFRpbWVyIGlucHV0IGZyZXEuICovCi0KLXZvaWQgX19pbml0IHBsYXRmb3JtX3RpbWVyX3NldHVwKGlycXJldHVybl90ICgqdGltZXJfaW50KShpbnQsIHZvaWQgKiwgc3RydWN0IHB0X3JlZ3MgKikpCi17Ci0JLyogc2V0dXAgOGJpdCB0aW1lciBjaDIgKi8KLQljdHJsX291dGIoSDgzMDBfVElNRVJfRlJFUSAvIEhaLCBUQ09SQTIpOyAgICAgIC8qIHNldCBpbnRlcnZhbCAqLwotCWN0cmxfb3V0YigweDAwLCBfOFRDU1IyKTsgICAgICAgICAgICAgICAgICAgICAgLyogbm8gb3V0cHV0ICovCi0JcmVxdWVzdF9pcnEoNDAsIHRpbWVyX2ludCwgMCwgInRpbWVyIiwgMCk7Ci0JY3RybF9vdXRiKENNSUVBfENDTFJfQ01BfENMS19ESVY4MTkyLCBfOFRDUjIpOyAvKiBzdGFydCBjb3VudCAqLwotfQotCi12b2lkIHBsYXRmb3JtX3RpbWVyX2VvaSh2b2lkKQotewotCSoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKV84VENTUjIgJj0gfigxIDw8IENNRkEpOwotfQotCi12b2lkIHBsYXRmb3JtX2dldHRvZChpbnQgKnllYXIsIGludCAqbW9uLCBpbnQgKmRheSwgaW50ICpob3VyLAotCQkgaW50ICptaW4sIGludCAqc2VjKQotewotCSp5ZWFyID0gKm1vbiA9ICpkYXkgPSAqaG91ciA9ICptaW4gPSAqc2VjID0gMDsKLX0KLQpkaWZmIC0tZ2l0IGEvYXJjaC9oODMwMC9wbGF0Zm9ybS9oOHMvZWRvc2syNjc0L01ha2VmaWxlIGIvYXJjaC9oODMwMC9wbGF0Zm9ybS9oOHMvZWRvc2syNjc0L01ha2VmaWxlCmluZGV4IGY3NjM2NTQuLjhlMzQ5NzIgMTAwNjQ0Ci0tLSBhL2FyY2gvaDgzMDAvcGxhdGZvcm0vaDhzL2Vkb3NrMjY3NC9NYWtlZmlsZQorKysgYi9hcmNoL2g4MzAwL3BsYXRmb3JtL2g4cy9lZG9zazI2NzQvTWFrZWZpbGUKQEAgLTMsNCArMywzIEBACiAjCiAKIGV4dHJhLXkgOj0gY3J0MF8kKE1PREVMKS5vCi1vYmoteSA6PSB0aW1lci5vCmRpZmYgLS1naXQgYS9hcmNoL2g4MzAwL3BsYXRmb3JtL2g4cy9lZG9zazI2NzQvdGltZXIuYyBiL2FyY2gvaDgzMDAvcGxhdGZvcm0vaDhzL2Vkb3NrMjY3NC90aW1lci5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZmIxNDI0Li4wMDAwMDAwCi0tLSBhL2FyY2gvaDgzMDAvcGxhdGZvcm0vaDhzL2Vkb3NrMjY3NC90aW1lci5jCisrKyAvZGV2L251bGwKQEAgLTEsNTQgKzAsMCBAQAotLyoKLSAqICBsaW51eC9hcmNoL2g4MzAwL3BsYXRmb3JtL2g4cy9lZG9zazI2NzQvdGltZXIuYwotICoKLSAqICBZb3NoaW5vcmkgU2F0byA8eXNhdG9AdXNlcnMuc291cmNlZm9yZ2UuanA+Ci0gKgotICogIFBsYXRmb3JtIGRlcGVuZCBUaW1lciBIYW5kbGVyCi0gKgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgotI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+Ci0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvcGFyYW0uaD4KLSNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KLSNpbmNsdWRlIDxsaW51eC9tbS5oPgotI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC90aW1leC5oPgotCi0jaW5jbHVkZSA8YXNtL3NlZ21lbnQuaD4KLSNpbmNsdWRlIDxhc20vaW8uaD4KLSNpbmNsdWRlIDxhc20vaXJxLmg+Ci0jaW5jbHVkZSA8YXNtL3JlZ3MyNjd4Lmg+Ci0KLSNkZWZpbmUgQ01GQSA2Ci0KLSNkZWZpbmUgQ01JRUEgMHg0MAotI2RlZmluZSBDQ0xSX0NNQSAweDA4Ci0jZGVmaW5lIENMS19ESVY4MTkyIDB4MDMKLQotI2RlZmluZSBIODMwMF9USU1FUl9GUkVRIENPTkZJR19DUFVfQ0xPQ0sqMTAwMC84MTkyIC8qIFRpbWVyIGlucHV0IGZyZXEuICovCi0KLXZvaWQgX19pbml0IHBsYXRmb3JtX3RpbWVyX3NldHVwKGlycXJldHVybl90ICgqdGltZXJfaW50KShpbnQsIHZvaWQgKiwgc3RydWN0IHB0X3JlZ3MgKikpCi17Ci0JLyogOGJpdCB0aW1lciBtb2R1bGUgZW5hYmxlZCAqLwotCWN0cmxfb3V0YihjdHJsX2luYihNU1RQQ1JMKSAmIH4weDAxLCBNU1RQQ1JMKTsKLQkvKiBzZXR1cCA4Yml0IHRpbWVyIGNoMSAqLwotCWN0cmxfb3V0YihIODMwMF9USU1FUl9GUkVRIC8gSFosIF84VENPUkExKTsgICAgICAvKiBzZXQgaW50ZXJ2YWwgKi8KLQljdHJsX291dGIoMHgwMCwgXzhUQ1NSMSk7ICAgICAgICAgICAgICAgICAgICAgICAgLyogbm8gb3V0cHV0ICovCi0JcmVxdWVzdF9pcnEoNzYsIHRpbWVyX2ludCwgMCwgInRpbWVyIiAsMCk7Ci0JY3RybF9vdXRiKENNSUVBfENDTFJfQ01BfENMS19ESVY4MTkyLCBfOFRDUjEpOyAgIC8qIHN0YXJ0IGNvdW50ICovCi19Ci0KLXZvaWQgcGxhdGZvcm1fdGltZXJfZW9pKHZvaWQpCi17Ci0JKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopXzhUQ1NSMSAmPSB+KDEgPDwgQ01GQSk7Ci19Ci0KLXZvaWQgcGxhdGZvcm1fZ2V0dG9kKGludCAqeWVhciwgaW50ICptb24sIGludCAqZGF5LCBpbnQgKmhvdXIsCi0JCSBpbnQgKm1pbiwgaW50ICpzZWMpCi17Ci0vKiBGSVhNRSEgbm90IFJUQyBzdXBwb3J0ICovCi0JKnllYXIgPSAqbW9uID0gKmRheSA9ICpob3VyID0gKm1pbiA9ICpzZWMgPSAwOwotfQpkaWZmIC0tZ2l0IGEvYXJjaC9oODMwMC9wbGF0Zm9ybS9oOHMvZ2VuZXJpYy9NYWtlZmlsZSBiL2FyY2gvaDgzMDAvcGxhdGZvcm0vaDhzL2dlbmVyaWMvTWFrZWZpbGUKaW5kZXggMDU1ZDUzYS4uNDRiNDY4NSAxMDA2NDQKLS0tIGEvYXJjaC9oODMwMC9wbGF0Zm9ybS9oOHMvZ2VuZXJpYy9NYWtlZmlsZQorKysgYi9hcmNoL2g4MzAwL3BsYXRmb3JtL2g4cy9nZW5lcmljL01ha2VmaWxlCkBAIC0zLDQgKzMsMyBAQAogIwogCiBleHRyYS15ID0gIGNydDBfJChNT0RFTCkubwotb2JqLXkgOj0gdGltZXIubwpkaWZmIC0tZ2l0IGEvYXJjaC9oODMwMC9wbGF0Zm9ybS9oOHMvZ2VuZXJpYy90aW1lci5jIGIvYXJjaC9oODMwMC9wbGF0Zm9ybS9oOHMvZ2VuZXJpYy90aW1lci5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMjIxMWM2Li4wMDAwMDAwCi0tLSBhL2FyY2gvaDgzMDAvcGxhdGZvcm0vaDhzL2dlbmVyaWMvdGltZXIuYworKysgL2Rldi9udWxsCkBAIC0xLDUzICswLDAgQEAKLS8qCi0gKiAgbGludXgvYXJjaC9oODMwMC9wbGF0Zm9ybS9oOHMvZ2VuZXJpYy90aW1lci5jCi0gKgotICogIFlvc2hpbm9yaSBTYXRvIDx5c2F0b0B1c2Vycy5zb3VyY2Vmb3JnZS5qcD4KLSAqCi0gKiAgUGxhdGZvcm0gZGVwZW5kIFRpbWVyIEhhbmRsZXIKLSAqCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+Ci0jaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9wYXJhbS5oPgotI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgotI2luY2x1ZGUgPGxpbnV4L21tLmg+Ci0jaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L3RpbWV4Lmg+Ci0KLSNpbmNsdWRlIDxhc20vc2VnbWVudC5oPgotI2luY2x1ZGUgPGFzbS9pby5oPgotI2luY2x1ZGUgPGFzbS9pcnEuaD4KLSNpbmNsdWRlIDxhc20vcmVnczI2N3guaD4KLQotI2RlZmluZSBDTUZBIDYKLQotI2RlZmluZSBDTUlFQSAweDQwCi0jZGVmaW5lIENDTFJfQ01BIDB4MDgKLSNkZWZpbmUgQ0xLX0RJVjgxOTIgMHgwMwotCi0jZGVmaW5lIEg4MzAwX1RJTUVSX0ZSRVEgQ09ORklHX0NQVV9DTE9DSyoxMDAwLzgxOTIgLyogVGltZXIgaW5wdXQgZnJlcS4gKi8KLQotdm9pZCBfX2luaXQgcGxhdGZvcm1fdGltZXJfc2V0dXAoaXJxcmV0dXJuX3QgKCp0aW1lcl9pbnQpKGludCwgdm9pZCAqLCBzdHJ1Y3QgcHRfcmVncyAqKSkKLXsKLQkvKiA4Yml0IHRpbWVyIG1vZHVsZSBlbmFibGVkICovCi0JY3RybF9vdXRiKGN0cmxfaW5iKE1TVFBDUkwpICYgfjB4MDEsIE1TVFBDUkwpOwotCS8qIHNldHVwIDhiaXQgdGltZXIgY2gxICovCi0JY3RybF9vdXRiKEg4MzAwX1RJTUVSX0ZSRVEgLyBIWiwgXzhUQ09SQTEpOyAgICAgIC8qIHNldCBpbnRlcnZhbCAqLwotCWN0cmxfb3V0YigweDAwLCBfOFRDU1IxKTsgICAgICAgICAgICAgICAgICAgICAgICAvKiBubyBvdXRwdXQgKi8KLQlyZXF1ZXN0X2lycSg3NiwgdGltZXJfaW50LCAwLCAidGltZXIiICwwKTsKLQljdHJsX291dGIoQ01JRUF8Q0NMUl9DTUF8Q0xLX0RJVjgxOTIsIF84VENSMSk7ICAgLyogc3RhcnQgY291bnQgKi8KLX0KLQotdm9pZCBwbGF0Zm9ybV90aW1lcl9lb2kodm9pZCkKLXsKLQkqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKilfOFRDU1IxICY9IH4oMSA8PCBDTUZBKTsKLX0KLQotdm9pZCBwbGF0Zm9ybV9nZXR0b2QoaW50ICp5ZWFyLCBpbnQgKm1vbiwgaW50ICpkYXksIGludCAqaG91ciwKLQkJIGludCAqbWluLCBpbnQgKnNlYykKLXsKLQkqeWVhciA9ICptb24gPSAqZGF5ID0gKmhvdXIgPSAqbWluID0gKnNlYyA9IDA7Ci19CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvS2NvbmZpZyBiL2FyY2gvaWE2NC9LY29uZmlnCmluZGV4IDQ4ZTQ5NmYuLjkxMmM1N2QgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9LY29uZmlnCisrKyBiL2FyY2gvaWE2NC9LY29uZmlnCkBAIC03LDYgKzcsOCBAQAogCiBzb3VyY2UgImluaXQvS2NvbmZpZyIKIAorc291cmNlICJrZXJuZWwvS2NvbmZpZy5mcmVlemVyIgorCiBtZW51ICJQcm9jZXNzb3IgdHlwZSBhbmQgZmVhdHVyZXMiCiAKIGNvbmZpZyBJQTY0CkBAIC02MCwxNCArNjIsNiBAQAogCWJvb2wKIAlkZWZhdWx0IHkKIAotY29uZmlnIEFSQ0hfSEFTX0lMT0cyX1UzMgotCWJvb2wKLQlkZWZhdWx0IG4KLQotY29uZmlnIEFSQ0hfSEFTX0lMT0cyX1U2NAotCWJvb2wKLQlkZWZhdWx0IG4KLQogY29uZmlnIEhVR0VUTEJfUEFHRV9TSVpFX1ZBUklBQkxFCiAJYm9vbAogCWRlcGVuZHMgb24gSFVHRVRMQl9QQUdFCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvaHAvY29tbW9uL3NiYV9pb21tdS5jIGIvYXJjaC9pYTY0L2hwL2NvbW1vbi9zYmFfaW9tbXUuYwppbmRleCA0OTU2YmU0Li5kOThmMGY0IDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvaHAvY29tbW9uL3NiYV9pb21tdS5jCisrKyBiL2FyY2gvaWE2NC9ocC9jb21tb24vc2JhX2lvbW11LmMKQEAgLTIwNzAsMTQgKzIwNzAsMTMgQEAKIAlpZiAoIWlhNjRfcGxhdGZvcm1faXMoImhwengxIikgJiYgIWlhNjRfcGxhdGZvcm1faXMoImhwengxX3N3aW90bGIiKSkKIAkJcmV0dXJuIDA7CiAKLSNpZiBkZWZpbmVkKENPTkZJR19JQTY0X0dFTkVSSUMpICYmIGRlZmluZWQoQ09ORklHX0NSQVNIX0RVTVApICYmIFwKLSAgICAgICAgZGVmaW5lZChDT05GSUdfUFJPQ19GUykKKyNpZiBkZWZpbmVkKENPTkZJR19JQTY0X0dFTkVSSUMpCiAJLyogSWYgd2UgYXJlIGJvb3RpbmcgYSBrZHVtcCBrZXJuZWwsIHRoZSBzYmFfaW9tbXUgd2lsbAogCSAqIGNhdXNlIGRldmljZXMgdGhhdCB3ZXJlIG5vdCBzaHV0ZG93biBwcm9wZXJseSB0byBNQ0EKIAkgKiBhcyBzb29uIGFzIHRoZXkgYXJlIHR1cm5lZCBiYWNrIG9uLiAgT3VyIG9ubHkgb3B0aW9uIGZvcgogCSAqIGEgc3VjY2Vzc2Z1bCBrZHVtcCBrZXJuZWwgYm9vdCBpcyB0byB1c2UgdGhlIHN3aW90bGIuCiAJICovCi0JaWYgKGVsZmNvcmVoZHJfYWRkciA8IEVMRkNPUkVfQUREUl9NQVgpIHsKKwlpZiAoaXNfa2R1bXBfa2VybmVsKCkpIHsKIAkJaWYgKHN3aW90bGJfbGF0ZV9pbml0X3dpdGhfZGVmYXVsdF9zaXplKDY0ICogKDE8PDIwKSkgIT0gMCkKIAkJCXBhbmljKCJVbmFibGUgdG8gaW5pdGlhbGl6ZSBzb2Z0d2FyZSBJL08gVExCOiIKIAkJCQkgICIgVHJ5IG1hY2h2ZWM9ZGlnIGJvb3Qgb3B0aW9uIik7CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvaWEzMi9iaW5mbXRfZWxmMzIuYyBiL2FyY2gvaWE2NC9pYTMyL2JpbmZtdF9lbGYzMi5jCmluZGV4IDRmMGMzMGMuLmY5MmJkYWEgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9pYTMyL2JpbmZtdF9lbGYzMi5jCisrKyBiL2FyY2gvaWE2NC9pYTMyL2JpbmZtdF9lbGYzMi5jCkBAIC00MSw3ICs0MSw3IEBACiAjZGVmaW5lIGVsZl9tYXAJCQkJZWxmMzJfbWFwCiAKICN1bmRlZiBTRVRfUEVSU09OQUxJVFkKLSNkZWZpbmUgU0VUX1BFUlNPTkFMSVRZKGV4LCBpYmNzMikJZWxmMzJfc2V0X3BlcnNvbmFsaXR5KCkKKyNkZWZpbmUgU0VUX1BFUlNPTkFMSVRZKGV4KQllbGYzMl9zZXRfcGVyc29uYWxpdHkoKQogCiAjZGVmaW5lIGVsZl9yZWFkX2ltcGxpZXNfZXhlYyhleCwgaGF2ZV9wdF9nbnVfc3RhY2spCSghKGhhdmVfcHRfZ251X3N0YWNrKSkKIApkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2lhMzIvaWEzMl9lbnRyeS5TIGIvYXJjaC9pYTY0L2lhMzIvaWEzMl9lbnRyeS5TCmluZGV4IGZmODhjNDguLjUzNTA1YmIgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9pYTMyL2lhMzJfZW50cnkuUworKysgYi9hcmNoL2lhNjQvaWEzMi9pYTMyX2VudHJ5LlMKQEAgLTI1MSw4ICsyNTEsOCBAQAogCWRhdGE4IGNvbXBhdF9zeXNfc2V0cmxpbWl0CSAgLyogNzUgKi8KIAlkYXRhOCBjb21wYXRfc3lzX29sZF9nZXRybGltaXQKIAlkYXRhOCBjb21wYXRfc3lzX2dldHJ1c2FnZQotCWRhdGE4IHN5czMyX2dldHRpbWVvZmRheQotCWRhdGE4IHN5czMyX3NldHRpbWVvZmRheQorCWRhdGE4IGNvbXBhdF9zeXNfZ2V0dGltZW9mZGF5CisJZGF0YTggY29tcGF0X3N5c19zZXR0aW1lb2ZkYXkKIAlkYXRhOCBzeXMzMl9nZXRncm91cHMxNgkgIC8qIDgwICovCiAJZGF0YTggc3lzMzJfc2V0Z3JvdXBzMTYKIAlkYXRhOCBzeXMzMl9vbGRfc2VsZWN0CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvaWEzMi9pYTMycHJpdi5oIGIvYXJjaC9pYTY0L2lhMzIvaWEzMnByaXYuaAppbmRleCBkZDBjNTM2Li4wZjE1MzQ5IDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvaWEzMi9pYTMycHJpdi5oCisrKyBiL2FyY2gvaWE2NC9pYTMyL2lhMzJwcml2LmgKQEAgLTMzMiw4ICszMzIsOCBAQAogI2RlZmluZSBFTEZfUExBVEZPUk0JTlVMTAogCiAjaWZkZWYgX19LRVJORUxfXwotIyBkZWZpbmUgU0VUX1BFUlNPTkFMSVRZKEVYLElCQ1MyKQkJCQlcCi0JKGN1cnJlbnQtPnBlcnNvbmFsaXR5ID0gKElCQ1MyKSA/IFBFUl9TVlI0IDogUEVSX0xJTlVYKQorIyBkZWZpbmUgU0VUX1BFUlNPTkFMSVRZKEVYKQkJCQlcCisJKGN1cnJlbnQtPnBlcnNvbmFsaXR5ID0gUEVSX0xJTlVYKQogI2VuZGlmCiAKICNkZWZpbmUgSUEzMl9FRkxBRwkweDIwMApkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2lhMzIvc3lzX2lhMzIuYyBiL2FyY2gvaWE2NC9pYTMyL3N5c19pYTMyLmMKaW5kZXggYmYxOTZjYi4uZjQ0MzBiYiAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2lhMzIvc3lzX2lhMzIuYworKysgYi9hcmNoL2lhNjQvaWEzMi9zeXNfaWEzMi5jCkBAIC0xMTgsNDEgKzExOCw2IEBACiAJcmV0dXJuIGVycm9yOwogfQogCi1pbnQgY3BfY29tcGF0X3N0YXQoc3RydWN0IGtzdGF0ICpzdGF0LCBzdHJ1Y3QgY29tcGF0X3N0YXQgX191c2VyICp1YnVmKQotewotCWNvbXBhdF9pbm9fdCBpbm87Ci0JaW50IGVycjsKLQotCWlmICgodTY0KSBzdGF0LT5zaXplID4gTUFYX05PTl9MRlMgfHwKLQkgICAgIW9sZF92YWxpZF9kZXYoc3RhdC0+ZGV2KSB8fAotCSAgICAhb2xkX3ZhbGlkX2RldihzdGF0LT5yZGV2KSkKLQkJcmV0dXJuIC1FT1ZFUkZMT1c7Ci0KLQlpbm8gPSBzdGF0LT5pbm87Ci0JaWYgKHNpemVvZihpbm8pIDwgc2l6ZW9mKHN0YXQtPmlubykgJiYgaW5vICE9IHN0YXQtPmlubykKLQkJcmV0dXJuIC1FT1ZFUkZMT1c7Ci0KLQlpZiAoY2xlYXJfdXNlcih1YnVmLCBzaXplb2YoKnVidWYpKSkKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0KLQllcnIgID0gX19wdXRfdXNlcihvbGRfZW5jb2RlX2RldihzdGF0LT5kZXYpLCAmdWJ1Zi0+c3RfZGV2KTsKLQllcnIgfD0gX19wdXRfdXNlcihpbm8sICZ1YnVmLT5zdF9pbm8pOwotCWVyciB8PSBfX3B1dF91c2VyKHN0YXQtPm1vZGUsICZ1YnVmLT5zdF9tb2RlKTsKLQllcnIgfD0gX19wdXRfdXNlcihzdGF0LT5ubGluaywgJnVidWYtPnN0X25saW5rKTsKLQllcnIgfD0gX19wdXRfdXNlcihoaWdoMmxvd3VpZChzdGF0LT51aWQpLCAmdWJ1Zi0+c3RfdWlkKTsKLQllcnIgfD0gX19wdXRfdXNlcihoaWdoMmxvd2dpZChzdGF0LT5naWQpLCAmdWJ1Zi0+c3RfZ2lkKTsKLQllcnIgfD0gX19wdXRfdXNlcihvbGRfZW5jb2RlX2RldihzdGF0LT5yZGV2KSwgJnVidWYtPnN0X3JkZXYpOwotCWVyciB8PSBfX3B1dF91c2VyKHN0YXQtPnNpemUsICZ1YnVmLT5zdF9zaXplKTsKLQllcnIgfD0gX19wdXRfdXNlcihzdGF0LT5hdGltZS50dl9zZWMsICZ1YnVmLT5zdF9hdGltZSk7Ci0JZXJyIHw9IF9fcHV0X3VzZXIoc3RhdC0+YXRpbWUudHZfbnNlYywgJnVidWYtPnN0X2F0aW1lX25zZWMpOwotCWVyciB8PSBfX3B1dF91c2VyKHN0YXQtPm10aW1lLnR2X3NlYywgJnVidWYtPnN0X210aW1lKTsKLQllcnIgfD0gX19wdXRfdXNlcihzdGF0LT5tdGltZS50dl9uc2VjLCAmdWJ1Zi0+c3RfbXRpbWVfbnNlYyk7Ci0JZXJyIHw9IF9fcHV0X3VzZXIoc3RhdC0+Y3RpbWUudHZfc2VjLCAmdWJ1Zi0+c3RfY3RpbWUpOwotCWVyciB8PSBfX3B1dF91c2VyKHN0YXQtPmN0aW1lLnR2X25zZWMsICZ1YnVmLT5zdF9jdGltZV9uc2VjKTsKLQllcnIgfD0gX19wdXRfdXNlcihzdGF0LT5ibGtzaXplLCAmdWJ1Zi0+c3RfYmxrc2l6ZSk7Ci0JZXJyIHw9IF9fcHV0X3VzZXIoc3RhdC0+YmxvY2tzLCAmdWJ1Zi0+c3RfYmxvY2tzKTsKLQlyZXR1cm4gZXJyOwotfQogCiAjaWYgUEFHRV9TSElGVCA+IElBMzJfUEFHRV9TSElGVAogCkBAIC0xMTQ4LDY4ICsxMTEzLDEyIEBACiAJcmV0dXJuIHJldHZhbDsKIH0KIAotc3RhdGljIGlubGluZSBsb25nCi1nZXRfdHYzMiAoc3RydWN0IHRpbWV2YWwgKm8sIHN0cnVjdCBjb21wYXRfdGltZXZhbCBfX3VzZXIgKmkpCi17Ci0JcmV0dXJuICghYWNjZXNzX29rKFZFUklGWV9SRUFELCBpLCBzaXplb2YoKmkpKSB8fAotCQkoX19nZXRfdXNlcihvLT50dl9zZWMsICZpLT50dl9zZWMpIHwgX19nZXRfdXNlcihvLT50dl91c2VjLCAmaS0+dHZfdXNlYykpKTsKLX0KLQotc3RhdGljIGlubGluZSBsb25nCi1wdXRfdHYzMiAoc3RydWN0IGNvbXBhdF90aW1ldmFsIF9fdXNlciAqbywgc3RydWN0IHRpbWV2YWwgKmkpCi17Ci0JcmV0dXJuICghYWNjZXNzX29rKFZFUklGWV9XUklURSwgbywgc2l6ZW9mKCpvKSkgfHwKLQkJKF9fcHV0X3VzZXIoaS0+dHZfc2VjLCAmby0+dHZfc2VjKSB8IF9fcHV0X3VzZXIoaS0+dHZfdXNlYywgJm8tPnR2X3VzZWMpKSk7Ci19Ci0KIGFzbWxpbmthZ2UgdW5zaWduZWQgbG9uZwogc3lzMzJfYWxhcm0gKHVuc2lnbmVkIGludCBzZWNvbmRzKQogewogCXJldHVybiBhbGFybV9zZXRpdGltZXIoc2Vjb25kcyk7CiB9CiAKLS8qIFRyYW5zbGF0aW9ucyBkdWUgdG8gdGltZV90IHNpemUgZGlmZmVyZW5jZXMuICBXaGljaCBhZmZlY3RzIGFsbAotICAgc29ydHMgb2YgdGhpbmdzLCBsaWtlIHRpbWV2YWwgYW5kIGl0aW1lcnZhbC4gICovCi0KLWV4dGVybiBzdHJ1Y3QgdGltZXpvbmUgc3lzX3R6OwotCi1hc21saW5rYWdlIGxvbmcKLXN5czMyX2dldHRpbWVvZmRheSAoc3RydWN0IGNvbXBhdF90aW1ldmFsIF9fdXNlciAqdHYsIHN0cnVjdCB0aW1lem9uZSBfX3VzZXIgKnR6KQotewotCWlmICh0dikgewotCQlzdHJ1Y3QgdGltZXZhbCBrdHY7Ci0JCWRvX2dldHRpbWVvZmRheSgma3R2KTsKLQkJaWYgKHB1dF90djMyKHR2LCAma3R2KSkKLQkJCXJldHVybiAtRUZBVUxUOwotCX0KLQlpZiAodHopIHsKLQkJaWYgKGNvcHlfdG9fdXNlcih0eiwgJnN5c190eiwgc2l6ZW9mKHN5c190eikpKQotCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JfQotCXJldHVybiAwOwotfQotCi1hc21saW5rYWdlIGxvbmcKLXN5czMyX3NldHRpbWVvZmRheSAoc3RydWN0IGNvbXBhdF90aW1ldmFsIF9fdXNlciAqdHYsIHN0cnVjdCB0aW1lem9uZSBfX3VzZXIgKnR6KQotewotCXN0cnVjdCB0aW1ldmFsIGt0djsKLQlzdHJ1Y3QgdGltZXNwZWMga3RzOwotCXN0cnVjdCB0aW1lem9uZSBrdHo7Ci0KLQlpZiAodHYpIHsKLQkJaWYgKGdldF90djMyKCZrdHYsIHR2KSkKLQkJCXJldHVybiAtRUZBVUxUOwotCQlrdHMudHZfc2VjID0ga3R2LnR2X3NlYzsKLQkJa3RzLnR2X25zZWMgPSBrdHYudHZfdXNlYyAqIDEwMDA7Ci0JfQotCWlmICh0eikgewotCQlpZiAoY29weV9mcm9tX3VzZXIoJmt0eiwgdHosIHNpemVvZihrdHopKSkKLQkJCXJldHVybiAtRUZBVUxUOwotCX0KLQotCXJldHVybiBkb19zeXNfc2V0dGltZW9mZGF5KHR2ID8gJmt0cyA6IE5VTEwsIHR6ID8gJmt0eiA6IE5VTEwpOwotfQotCiBzdHJ1Y3Qgc2VsX2FyZ19zdHJ1Y3QgewogCXVuc2lnbmVkIGludCBuOwogCXVuc2lnbmVkIGludCBpbnA7CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvaW5jbHVkZS9hc20vYS5vdXQuaCBiL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9hLm91dC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxOTNkY2ZiLi4wMDAwMDAwCi0tLSBhL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9hLm91dC5oCisrKyAvZGV2L251bGwKQEAgLTEsMzIgKzAsMCBAQAotI2lmbmRlZiBfQVNNX0lBNjRfQV9PVVRfSAotI2RlZmluZSBfQVNNX0lBNjRfQV9PVVRfSAotCi0vKgotICogTm8gYS5vdXQgZm9ybWF0IGhhcyBiZWVuIChvciBzaG91bGQgYmUpIGRlZmluZWQgc28gdGhpcyBmaWxlIGlzCi0gKiBqdXN0IGEgZHVtbXkgdGhhdCBhbGxvd3MgdXMgdG8gZ2V0IGJpbmZtdF9lbGYgY29tcGlsZWQuICBJdAotICogcHJvYmFibHkgd291bGQgYmUgYmV0dGVyIHRvIGNsZWFuIHVwIGJpbmZtdF9lbGYuYyBzbyBpdCBkb2VzIG5vdAotICogbmVjZXNzYXJpbHkgZGVwZW5kIG9uIHRoZXJlIGJlaW5nIGEub3V0IHN1cHBvcnQuCi0gKgotICogTW9kaWZpZWQgMTk5OC0yMDAyCi0gKglEYXZpZCBNb3NiZXJnZXItVGFuZyA8ZGF2aWRtQGhwbC5ocC5jb20+LCBIZXdsZXR0LVBhY2thcmQgQ28uCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0KLXN0cnVjdCBleGVjIHsKLQl1bnNpZ25lZCBsb25nIGFfaW5mbzsKLQl1bnNpZ25lZCBsb25nIGFfdGV4dDsKLQl1bnNpZ25lZCBsb25nIGFfZGF0YTsKLQl1bnNpZ25lZCBsb25nIGFfYnNzOwotCXVuc2lnbmVkIGxvbmcgYV9lbnRyeTsKLX07Ci0KLSNkZWZpbmUgTl9UWFRBRERSKHgpCTAKLSNkZWZpbmUgTl9EQVRBRERSKHgpCTAKLSNkZWZpbmUgTl9CU1NBRERSKHgpCTAKLSNkZWZpbmUgTl9EUlNJWkUoeCkJMAotI2RlZmluZSBOX1RSU0laRSh4KQkwCi0jZGVmaW5lIE5fU1lNU0laRSh4KQkwCi0jZGVmaW5lIE5fVFhUT0ZGKHgpCTAKLQotI2VuZGlmIC8qIF9BU01fSUE2NF9BX09VVF9IICovCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvaW5jbHVkZS9hc20vZWxmLmggYi9hcmNoL2lhNjQvaW5jbHVkZS9hc20vZWxmLmgKaW5kZXggMmFjYjZiNi4uODZlZGRlZSAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL2VsZi5oCisrKyBiL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9lbGYuaApAQCAtMjAyLDcgKzIwMiw3IEBACiAgICByZWxldmFudCB1bnRpbCB3ZSBoYXZlIHJlYWwgaGFyZHdhcmUgdG8gcGxheSB3aXRoLi4uICovCiAjZGVmaW5lIEVMRl9QTEFURk9STQlOVUxMCiAKLSNkZWZpbmUgU0VUX1BFUlNPTkFMSVRZKGV4LCBpYmNzMikJc2V0X3BlcnNvbmFsaXR5KFBFUl9MSU5VWCkKKyNkZWZpbmUgU0VUX1BFUlNPTkFMSVRZKGV4KQlzZXRfcGVyc29uYWxpdHkoUEVSX0xJTlVYKQogI2RlZmluZSBlbGZfcmVhZF9pbXBsaWVzX2V4ZWMoZXgsIGV4ZWN1dGFibGVfc3RhY2spCQkJCQlcCiAJKChleGVjdXRhYmxlX3N0YWNrIT1FWFNUQUNLX0RJU0FCTEVfWCkgJiYgKChleCkuZV9mbGFncyAmIEVGX0lBXzY0X0xJTlVYX0VYRUNVVEFCTEVfU1RBQ0spICE9IDApCiAKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oIGIvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgKaW5kZXggMWVmZTUxMy4uODVkYjEyNCAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgKKysrIGIvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgKQEAgLTEzMiw3ICsxMzIsNyBAQAogI2RlZmluZSBHUEZOX0lPU0FQSUMgICAgICAgICg0VUwgPDwgNjApIC8qIElPU0FQSUMgYmFzZSAqLwogI2RlZmluZSBHUEZOX0xFR0FDWV9JTyAgICAgICg1VUwgPDwgNjApIC8qIExlZ2FjeSBJL08gYmFzZSAqLwogI2RlZmluZSBHUEZOX0dGVyAgICAgICAgKDZVTCA8PCA2MCkgLyogR3Vlc3QgRmlybXdhcmUgKi8KLSNkZWZpbmUgR1BGTl9ISUdIX01NSU8gICAgICAoN1VMIDw8IDYwKSAvKiBIaWdoIE1NSU8gcmFuZ2UgKi8KKyNkZWZpbmUgR1BGTl9QSFlTX01NSU8gICAgICAoN1VMIDw8IDYwKSAvKiBEaXJlY3RlZCBNTUlPIFJhbmdlICovCiAKICNkZWZpbmUgR1BGTl9JT19NQVNLICAgICAgICAoN1VMIDw8IDYwKSAvKiBHdWVzdCBwZm4gaXMgSS9PIHR5cGUgKi8KICNkZWZpbmUgR1BGTl9JTlZfTUFTSyAgICAgICAoMVVMIDw8IDYzKSAvKiBHdWVzdCBwZm4gaXMgaW52YWxpZCAqLwpAQCAtNDEzLDYgKzQxMywxMCBAQAogCXN0cnVjdCBrdm1faW9hcGljICp2aW9hcGljOwogCXN0cnVjdCBrdm1fdm1fc3RhdCBzdGF0OwogCXN0cnVjdCBrdm1fc2FsX2RhdGEgcmR2X3NhbF9kYXRhOworCisJc3RydWN0IGxpc3RfaGVhZCBhc3NpZ25lZF9kZXZfaGVhZDsKKwlzdHJ1Y3QgZG1hcl9kb21haW4gKmludGVsX2lvbW11X2RvbWFpbjsKKwlzdHJ1Y3QgaGxpc3RfaGVhZCBpcnFfYWNrX25vdGlmaWVyX2xpc3Q7CiB9OwogCiB1bmlvbiBjcHVpZDNfdCB7CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvaW5jbHVkZS9hc20vc3RhdGZzLmggYi9hcmNoL2lhNjQvaW5jbHVkZS9hc20vc3RhdGZzLmgKaW5kZXggODExMDk3OS4uMWU1ODk2NiAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL3N0YXRmcy5oCisrKyBiL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9zdGF0ZnMuaApAQCAtOCw1NSArOCwxMyBAQAogICoJRGF2aWQgTW9zYmVyZ2VyLVRhbmcgPGRhdmlkbUBocGwuaHAuY29tPiwgSGV3bGV0dC1QYWNrYXJkIENvCiAgKi8KIAotI2lmbmRlZiBfX0tFUk5FTF9TVFJJQ1RfTkFNRVMKLSMgaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLXR5cGVkZWYgX19rZXJuZWxfZnNpZF90CWZzaWRfdDsKLSNlbmRpZgotCiAvKgotICogVGhpcyBpcyB1Z2x5IC0tLSB3ZSdyZSBhbHJlYWR5IDY0LWJpdCwgc28ganVzdCBkdXBsaWNhdGUgdGhlIGRlZmluaXRpb25zCisgKiBXZSBuZWVkIGNvbXBhdF9zdGF0ZnM2NCB0byBiZSBwYWNrZWQsIGJlY2F1c2UgdGhlIGkzODYgQUJJIHdvbid0CisgKiBhZGQgcGFkZGluZyBhdCB0aGUgZW5kIHRvIGJyaW5nIGl0IHRvIGEgbXVsdGlwbGUgb2YgOCBieXRlcywgYnV0CisgKiB0aGUgSUE2NCBBQkkgd2lsbC4KICAqLwotc3RydWN0IHN0YXRmcyB7Ci0JbG9uZyBmX3R5cGU7Ci0JbG9uZyBmX2JzaXplOwotCWxvbmcgZl9ibG9ja3M7Ci0JbG9uZyBmX2JmcmVlOwotCWxvbmcgZl9iYXZhaWw7Ci0JbG9uZyBmX2ZpbGVzOwotCWxvbmcgZl9mZnJlZTsKLQlfX2tlcm5lbF9mc2lkX3QgZl9mc2lkOwotCWxvbmcgZl9uYW1lbGVuOwotCWxvbmcgZl9mcnNpemU7Ci0JbG9uZyBmX3NwYXJlWzVdOwotfTsKKyNkZWZpbmUgQVJDSF9QQUNLX0NPTVBBVF9TVEFURlM2NCBfX2F0dHJpYnV0ZV9fKChwYWNrZWQsYWxpZ25lZCg0KSkpCiAKLQotc3RydWN0IHN0YXRmczY0IHsKLQlsb25nIGZfdHlwZTsKLQlsb25nIGZfYnNpemU7Ci0JbG9uZyBmX2Jsb2NrczsKLQlsb25nIGZfYmZyZWU7Ci0JbG9uZyBmX2JhdmFpbDsKLQlsb25nIGZfZmlsZXM7Ci0JbG9uZyBmX2ZmcmVlOwotCV9fa2VybmVsX2ZzaWRfdCBmX2ZzaWQ7Ci0JbG9uZyBmX25hbWVsZW47Ci0JbG9uZyBmX2Zyc2l6ZTsKLQlsb25nIGZfc3BhcmVbNV07Ci19OwotCi1zdHJ1Y3QgY29tcGF0X3N0YXRmczY0IHsKLQlfX3UzMiBmX3R5cGU7Ci0JX191MzIgZl9ic2l6ZTsKLQlfX3U2NCBmX2Jsb2NrczsKLQlfX3U2NCBmX2JmcmVlOwotCV9fdTY0IGZfYmF2YWlsOwotCV9fdTY0IGZfZmlsZXM7Ci0JX191NjQgZl9mZnJlZTsKLQlfX2tlcm5lbF9mc2lkX3QgZl9mc2lkOwotCV9fdTMyIGZfbmFtZWxlbjsKLQlfX3UzMiBmX2Zyc2l6ZTsKLQlfX3UzMiBmX3NwYXJlWzVdOwotfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9zdGF0ZnMuaD4KIAogI2VuZGlmIC8qIF9BU01fSUE2NF9TVEFURlNfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2tlcm5lbC9jcmFzaF9kdW1wLmMgYi9hcmNoL2lhNjQva2VybmVsL2NyYXNoX2R1bXAuYwppbmRleCBkYTYwZTkwLi4yM2U5MTI5IDEwMDY0NAotLS0gYS9hcmNoL2lhNjQva2VybmVsL2NyYXNoX2R1bXAuYworKysgYi9hcmNoL2lhNjQva2VybmVsL2NyYXNoX2R1bXAuYwpAQCAtOCwxMCArOCwxNCBAQAogCiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2NyYXNoX2R1bXAuaD4KIAogI2luY2x1ZGUgPGFzbS9wYWdlLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KIAorLyogU3RvcmVzIHRoZSBwaHlzaWNhbCBhZGRyZXNzIG9mIGVsZiBoZWFkZXIgb2YgY3Jhc2ggaW1hZ2UuICovCit1bnNpZ25lZCBsb25nIGxvbmcgZWxmY29yZWhkcl9hZGRyID0gRUxGQ09SRV9BRERSX01BWDsKKwogLyoqCiAgKiBjb3B5X29sZG1lbV9wYWdlIC0gY29weSBvbmUgcGFnZSBmcm9tICJvbGRtZW0iCiAgKiBAcGZuOiBwYWdlIGZyYW1lIG51bWJlciB0byBiZSBjb3BpZWQKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9rZXJuZWwvZWZpLmMgYi9hcmNoL2lhNjQva2VybmVsL2VmaS5jCmluZGV4IDUxYjc1Y2UuLmVmYWZmMTUgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9rZXJuZWwvZWZpLmMKKysrIGIvYXJjaC9pYTY0L2tlcm5lbC9lZmkuYwpAQCAtMTMzNSw3ICsxMzM1LDcgQEAKIH0KICNlbmRpZgogCi0jaWZkZWYgQ09ORklHX1BST0NfVk1DT1JFCisjaWZkZWYgQ09ORklHX0NSQVNIX0RVTVAKIC8qIGxvY2F0ZSB0aGUgc2l6ZSBmaW5kIGEgdGhlIGRlc2NyaXB0b3IgYXQgYSBjZXJ0YWluIGFkZHJlc3MgKi8KIHVuc2lnbmVkIGxvbmcgX19pbml0CiB2bWNvcmVfZmluZF9kZXNjcmlwdG9yX3NpemUgKHVuc2lnbmVkIGxvbmcgYWRkcmVzcykKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9rZXJuZWwvc2V0dXAuYyBiL2FyY2gvaWE2NC9rZXJuZWwvc2V0dXAuYwppbmRleCBkZTYzNmIyLi45MTZiYTg5IDEwMDY0NAotLS0gYS9hcmNoL2lhNjQva2VybmVsL3NldHVwLmMKKysrIGIvYXJjaC9pYTY0L2tlcm5lbC9zZXR1cC5jCkBAIC0zNTIsNyArMzUyLDcgQEAKIAl9CiAjZW5kaWYKIAotI2lmZGVmIENPTkZJR19QUk9DX1ZNQ09SRQorI2lmZGVmIENPTkZJR19DUkFTSF9LRVJORUwKIAlpZiAocmVzZXJ2ZV9lbGZjb3JlaGRyKCZyc3ZkX3JlZ2lvbltuXS5zdGFydCwKIAkJCSAgICAgICAmcnN2ZF9yZWdpb25bbl0uZW5kKSA9PSAwKQogCQluKys7CkBAIC00NzgsNyArNDc4LDEyIEBACiB9CiBlYXJseV9wYXJhbSgibm9tY2EiLCBzZXR1cF9ub21jYSk7CiAKLSNpZmRlZiBDT05GSUdfUFJPQ19WTUNPUkUKKy8qCisgKiBOb3RlOiBlbGZjb3JlaGRyX2FkZHIgaXMgbm90IGp1c3QgbGltaXRlZCB0byB2bWNvcmUuIEl0IGlzIGFsc28gdXNlZCBieQorICogaXNfa2R1bXBfa2VybmVsKCkgdG8gZGV0ZXJtaW5lIGlmIHdlIGFyZSBib290aW5nIGFmdGVyIGEgcGFuaWMuIEhlbmNlCisgKiBpZmRlZiBpdCB1bmRlciBDT05GSUdfQ1JBU0hfRFVNUCBhbmQgbm90IENPTkZJR19QUk9DX1ZNQ09SRS4KKyAqLworI2lmZGVmIENPTkZJR19DUkFTSF9EVU1QCiAvKiBlbGZjb3JlaGRyPSBzcGVjaWZpZXMgdGhlIGxvY2F0aW9uIG9mIGVsZiBjb3JlIGhlYWRlcgogICogc3RvcmVkIGJ5IHRoZSBjcmFzaGVkIGtlcm5lbC4KICAqLwpAQCAtNTAyLDExICs1MDcsMTEgQEAKIAkgKiB0byB3b3JrIHByb3Blcmx5LgogCSAqLwogCi0JaWYgKGVsZmNvcmVoZHJfYWRkciA+PSBFTEZDT1JFX0FERFJfTUFYKQorCWlmICghaXNfdm1jb3JlX3VzYWJsZSgpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWlmICgobGVuZ3RoID0gdm1jb3JlX2ZpbmRfZGVzY3JpcHRvcl9zaXplKGVsZmNvcmVoZHJfYWRkcikpID09IDApIHsKLQkJZWxmY29yZWhkcl9hZGRyID0gRUxGQ09SRV9BRERSX01BWDsKKwkJdm1jb3JlX3VudXNhYmxlKCk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2t2bS9LY29uZmlnIGIvYXJjaC9pYTY0L2t2bS9LY29uZmlnCmluZGV4IDc5MTRlNDguLjhlOTlmZWQgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9rdm0vS2NvbmZpZworKysgYi9hcmNoL2lhNjQva3ZtL0tjb25maWcKQEAgLTQ2LDQgKzQ2LDYgQEAKIGNvbmZpZyBLVk1fVFJBQ0UKICAgICAgICBib29sCiAKK3NvdXJjZSBkcml2ZXJzL3ZpcnRpby9LY29uZmlnCisKIGVuZGlmICMgVklSVFVBTElaQVRJT04KZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9rdm0vTWFrZWZpbGUgYi9hcmNoL2lhNjQva3ZtL01ha2VmaWxlCmluZGV4IGJmMjJmYjkuLmNmMzdmOGYgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9rdm0vTWFrZWZpbGUKKysrIGIvYXJjaC9pYTY0L2t2bS9NYWtlZmlsZQpAQCAtNDQsNyArNDQsMTEgQEAKIEVYVFJBX0FGTEFHUyArPSAtSXZpcnQva3ZtIC1JYXJjaC9pYTY0L2t2bS8KIAogY29tbW9uLW9ianMgPSAkKGFkZHByZWZpeCAuLi8uLi8uLi92aXJ0L2t2bS8sIGt2bV9tYWluLm8gaW9hcGljLm8gXAotCQljb2FsZXNjZWRfbW1pby5vKQorCQljb2FsZXNjZWRfbW1pby5vIGlycV9jb21tLm8pCisKK2lmZXEgKCQoQ09ORklHX0RNQVIpLHkpCitjb21tb24tb2JqcyArPSAkKGFkZHByZWZpeCAuLi8uLi8uLi92aXJ0L2t2bS8sIHZ0ZC5vKQorZW5kaWYKIAoga3ZtLW9ianMgOj0gJChjb21tb24tb2Jqcykga3ZtLWlhNjQubyBrdm1fZncubwogb2JqLSQoQ09ORklHX0tWTSkgKz0ga3ZtLm8KZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9rdm0vaXJxLmggYi9hcmNoL2lhNjQva3ZtL2lycS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2Nzg2ZTgKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2lhNjQva3ZtL2lycS5oCkBAIC0wLDAgKzEsMzEgQEAKKy8qCisgKiBpcnEuaDogSW4ta2VybmVsIGludGVycnVwdCBjb250cm9sbGVyIHJlbGF0ZWQgZGVmaW5pdGlvbnMKKyAqIENvcHlyaWdodCAoYykgMjAwOCwgSW50ZWwgQ29ycG9yYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCisgKiB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAqIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICogbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKKyAqIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUKKyAqIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBLgorICoKKyAqIEF1dGhvcnM6CisgKiAgIFhpYW50YW8gWmhhbmcgPHhpYW50YW8uemhhbmdAaW50ZWwuY29tPgorICoKKyAqLworCisjaWZuZGVmIF9fSVJRX0gKKyNkZWZpbmUgX19JUlFfSAorCitzdGF0aWMgaW5saW5lIGludCBpcnFjaGlwX2luX2tlcm5lbChzdHJ1Y3Qga3ZtICprdm0pCit7CisJcmV0dXJuIDE7Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2t2bS9rdm0taWE2NC5jIGIvYXJjaC9pYTY0L2t2bS9rdm0taWE2NC5jCmluZGV4IGNkMGQxYTcuLmMwNjk5ZjAgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9rdm0va3ZtLWlhNjQuYworKysgYi9hcmNoL2lhNjQva3ZtL2t2bS1pYTY0LmMKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KICNpbmNsdWRlIDxsaW51eC9ocnRpbWVyLmg+CiAjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVsLWlvbW11Lmg+CiAKICNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgogI2luY2x1ZGUgPGFzbS9nY2NfaW50cmluLmg+CkBAIC00NSw2ICs0Niw3IEBACiAjaW5jbHVkZSAiaW9kZXYuaCIKICNpbmNsdWRlICJpb2FwaWMuaCIKICNpbmNsdWRlICJsYXBpYy5oIgorI2luY2x1ZGUgImlycS5oIgogCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBrdm1fdm1tX2Jhc2U7CiBzdGF0aWMgdW5zaWduZWQgbG9uZyBrdm1fdnNhX2Jhc2U7CkBAIC0xNzksMTIgKzE4MSwxNiBAQAogCXN3aXRjaCAoZXh0KSB7CiAJY2FzZSBLVk1fQ0FQX0lSUUNISVA6CiAJY2FzZSBLVk1fQ0FQX1VTRVJfTUVNT1JZOgorCWNhc2UgS1ZNX0NBUF9NUF9TVEFURToKIAogCQlyID0gMTsKIAkJYnJlYWs7CiAJY2FzZSBLVk1fQ0FQX0NPQUxFU0NFRF9NTUlPOgogCQlyID0gS1ZNX0NPQUxFU0NFRF9NTUlPX1BBR0VfT0ZGU0VUOwogCQlicmVhazsKKwljYXNlIEtWTV9DQVBfSU9NTVU6CisJCXIgPSBpbnRlbF9pb21tdV9mb3VuZCgpOworCQlicmVhazsKIAlkZWZhdWx0OgogCQlyID0gMDsKIAl9CkBAIC03NzEsNiArNzc3LDcgQEAKIAkgKi8KIAlrdm1fYnVpbGRfaW9fcG10KGt2bSk7CiAKKwlJTklUX0xJU1RfSEVBRCgma3ZtLT5hcmNoLmFzc2lnbmVkX2Rldl9oZWFkKTsKIH0KIAogc3RydWN0ICBrdm0gKmt2bV9hcmNoX2NyZWF0ZV92bSh2b2lkKQpAQCAtMTMzNCw2ICsxMzQxLDEwIEBACiAKIHZvaWQga3ZtX2FyY2hfZGVzdHJveV92bShzdHJ1Y3Qga3ZtICprdm0pCiB7CisJa3ZtX2lvbW11X3VubWFwX2d1ZXN0KGt2bSk7CisjaWZkZWYgIEtWTV9DQVBfREVWSUNFX0FTU0lHTk1FTlQKKwlrdm1fZnJlZV9hbGxfYXNzaWduZWRfZGV2aWNlcyhrdm0pOworI2VuZGlmCiAJa2ZyZWUoa3ZtLT5hcmNoLnZpb2FwaWMpOwogCWt2bV9yZWxlYXNlX3ZtX3BhZ2VzKGt2bSk7CiAJa3ZtX2ZyZWVfcGh5c21lbShrdm0pOwpAQCAtMTQzNSwxNyArMTQ0NiwyNCBAQAogCQlpbnQgdXNlcl9hbGxvYykKIHsKIAl1bnNpZ25lZCBsb25nIGk7Ci0Jc3RydWN0IHBhZ2UgKnBhZ2U7CisJdW5zaWduZWQgbG9uZyBwZm47CiAJaW50IG5wYWdlcyA9IG1lbS0+bWVtb3J5X3NpemUgPj4gUEFHRV9TSElGVDsKIAlzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICptZW1zbG90ID0gJmt2bS0+bWVtc2xvdHNbbWVtLT5zbG90XTsKIAl1bnNpZ25lZCBsb25nIGJhc2VfZ2ZuID0gbWVtc2xvdC0+YmFzZV9nZm47CiAKIAlmb3IgKGkgPSAwOyBpIDwgbnBhZ2VzOyBpKyspIHsKLQkJcGFnZSA9IGdmbl90b19wYWdlKGt2bSwgYmFzZV9nZm4gKyBpKTsKLQkJa3ZtX3NldF9wbXRfZW50cnkoa3ZtLCBiYXNlX2dmbiArIGksCi0JCQkJcGFnZV90b19wZm4ocGFnZSkgPDwgUEFHRV9TSElGVCwKLQkJCQlfUEFHRV9BUl9SV1h8X1BBR0VfTUFfV0IpOwotCQltZW1zbG90LT5ybWFwW2ldID0gKHVuc2lnbmVkIGxvbmcpcGFnZTsKKwkJcGZuID0gZ2ZuX3RvX3Bmbihrdm0sIGJhc2VfZ2ZuICsgaSk7CisJCWlmICgha3ZtX2lzX21taW9fcGZuKHBmbikpIHsKKwkJCWt2bV9zZXRfcG10X2VudHJ5KGt2bSwgYmFzZV9nZm4gKyBpLAorCQkJCQlwZm4gPDwgUEFHRV9TSElGVCwKKwkJCQlfUEFHRV9BUl9SV1ggfCBfUEFHRV9NQV9XQik7CisJCQltZW1zbG90LT5ybWFwW2ldID0gKHVuc2lnbmVkIGxvbmcpcGZuX3RvX3BhZ2UocGZuKTsKKwkJfSBlbHNlIHsKKwkJCWt2bV9zZXRfcG10X2VudHJ5KGt2bSwgYmFzZV9nZm4gKyBpLAorCQkJCQlHUEZOX1BIWVNfTU1JTyB8IChwZm4gPDwgUEFHRV9TSElGVCksCisJCQkJCV9QQUdFX01BX1VDKTsKKwkJCW1lbXNsb3QtPnJtYXBbaV0gPSAwOworCQkJfQogCX0KIAogCXJldHVybiAwOwpAQCAtMTc4OSwxMSArMTgwNyw0MyBAQAogaW50IGt2bV9hcmNoX3ZjcHVfaW9jdGxfZ2V0X21wc3RhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAogCQkJCSAgICBzdHJ1Y3Qga3ZtX21wX3N0YXRlICptcF9zdGF0ZSkKIHsKLQlyZXR1cm4gLUVJTlZBTDsKKwl2Y3B1X2xvYWQodmNwdSk7CisJbXBfc3RhdGUtPm1wX3N0YXRlID0gdmNwdS0+YXJjaC5tcF9zdGF0ZTsKKwl2Y3B1X3B1dCh2Y3B1KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2Y3B1X3Jlc2V0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKK3sKKwlpbnQgcjsKKwlsb25nIHBzcjsKKwlsb2NhbF9pcnFfc2F2ZShwc3IpOworCXIgPSBrdm1faW5zZXJ0X3ZtbV9tYXBwaW5nKHZjcHUpOworCWlmIChyKQorCQlnb3RvIGZhaWw7CisKKwl2Y3B1LT5hcmNoLmxhdW5jaGVkID0gMDsKKwlrdm1fYXJjaF92Y3B1X3VuaW5pdCh2Y3B1KTsKKwlyID0ga3ZtX2FyY2hfdmNwdV9pbml0KHZjcHUpOworCWlmIChyKQorCQlnb3RvIGZhaWw7CisKKwlrdm1fcHVyZ2Vfdm1tX21hcHBpbmcodmNwdSk7CisJciA9IDA7CitmYWlsOgorCWxvY2FsX2lycV9yZXN0b3JlKHBzcik7CisJcmV0dXJuIHI7CiB9CiAKIGludCBrdm1fYXJjaF92Y3B1X2lvY3RsX3NldF9tcHN0YXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKIAkJCQkgICAgc3RydWN0IGt2bV9tcF9zdGF0ZSAqbXBfc3RhdGUpCiB7Ci0JcmV0dXJuIC1FSU5WQUw7CisJaW50IHIgPSAwOworCisJdmNwdV9sb2FkKHZjcHUpOworCXZjcHUtPmFyY2gubXBfc3RhdGUgPSBtcF9zdGF0ZS0+bXBfc3RhdGU7CisJaWYgKHZjcHUtPmFyY2gubXBfc3RhdGUgPT0gS1ZNX01QX1NUQVRFX1VOSU5JVElBTElaRUQpCisJCXIgPSB2Y3B1X3Jlc2V0KHZjcHUpOworCXZjcHVfcHV0KHZjcHUpOworCXJldHVybiByOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2t2bS9rdm1fbWluc3RhdGUuaCBiL2FyY2gvaWE2NC9rdm0va3ZtX21pbnN0YXRlLmgKaW5kZXggMTM5ODBkOS4uMmNjNDFkMSAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2t2bS9rdm1fbWluc3RhdGUuaAorKysgYi9hcmNoL2lhNjQva3ZtL2t2bV9taW5zdGF0ZS5oCkBAIC01MCwyNyArNTAsMTggQEAKIAogI2RlZmluZSBQQUxfVlNBX1NZTkNfUkVBRAkJCQkJCVwKIAkvKiBiZWdpbiB0byBjYWxsIHBhbCB2cHMgc3luY19yZWFkICovCQkJCVwKK3subWlpOwkJCQkJCQkJCVwKIAlhZGQgcjI1ID0gVk1NX1ZQRF9CQVNFX09GRlNFVCwgcjIxOwkJCQlcCi0JYWRkcyByMjAgPSBWTU1fVkNQVV9WU0FfQkFTRV9PRkZTRVQsIHIyMTsgIC8qIGVudHJ5IHBvaW50ICovCVwKLQk7OwkJCQkJCQkJXAotCWxkOCByMjUgPSBbcjI1XTsgICAgICAvKiByZWFkIHZwZCBiYXNlICovCQkJXAotCWxkOCByMjAgPSBbcjIwXTsJCQkJCQlcCi0JOzsJCQkJCQkJCVwKLQlhZGQgcjIwID0gUEFMX1ZQU19TWU5DX1JFQUQscjIwOwkJCQlcCi0JOzsJCQkJCQkJCVwKLXsgLm1paTsJCQkJCQkJCQlcCiAJbm9wIDB4MDsJCQkJCQkJXAotCW1vdiByMjQgPSBpcDsJCQkJCQkJXAotCW1vdiBiMCA9IHIyMDsJCQkJCQkJXAorCW1vdiByMjQ9aXA7CQkJCQkJCVwKKwk7OwkJCQkJCQkJXAorfQkJCQkJCQkJCVwKK3subW1iCQkJCQkJCQkJXAorCWFkZCByMjQ9MHgyMCwgcjI0OwkJCQkJCVwKKwlsZDggcjI1ID0gW3IyNV07ICAgICAgLyogcmVhZCB2cGQgYmFzZSAqLwkJCVwKKwlici5jb25kLnNwdGsga3ZtX3Zwc19zeW5jX3JlYWQ7CQkvKmNhbGwgdGhlIHNlcnZpY2UqLwlcCiAJOzsJCQkJCQkJCVwKIH07CQkJCQkJCQkJXAoteyAubW1iOwkJCQkJCQkJCVwKLQlhZGQgcjI0ID0gMHgyMCwgcjI0OwkJCQkJCVwKLQlub3AgMHgwOwkJCQkJCQlcCi0JYnIuY29uZC5zcHRrIGIwOyAgICAgICAgLyogIGNhbGwgdGhlIHNlcnZpY2UgKi8JCQlcCi0JOzsJCQkJCQkJCVwKLX07Ci0KIAogCiAjZGVmaW5lIEtWTV9NSU5TVEFURV9HRVRfQ1VSUkVOVChyZWcpICAgbW92IHJlZz1yMjEKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9rdm0vb3B0dmZhdWx0LlMgYi9hcmNoL2lhNjQva3ZtL29wdHZmYXVsdC5TCmluZGV4IGU0ZjE1ZDYuLjYzNGFiYWQgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9rdm0vb3B0dmZhdWx0LlMKKysrIGIvYXJjaC9pYTY0L2t2bS9vcHR2ZmF1bHQuUwpAQCAtMSw5ICsxLDEyIEBACiAvKgotICogYXJjaC9pYTY0L3ZteC9vcHR2ZmF1bHQuUworICogYXJjaC9pYTY0L2t2bS9vcHR2ZmF1bHQuUwogICogb3B0aW1pemUgdmlydHVhbGl6YXRpb24gZmF1bHQgaGFuZGxlcgogICoKICAqIENvcHlyaWdodCAoQykgMjAwNiBJbnRlbCBDbwogICoJWHVlZmVpIFh1IChBbnRob255IFh1KSA8YW50aG9ueS54dUBpbnRlbC5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDggSW50ZWwgQ28KKyAqICAgICAgQWRkIHRoZSBzdXBwb3J0IGZvciBUdWt3aWxhIHByb2Nlc3NvcnMuCisgKglYaWFudGFvIFpoYW5nIDx4aWFudGFvLnpoYW5nQGludGVsLmNvbT4KICAqLwogCiAjaW5jbHVkZSA8YXNtL2FzbW1hY3JvLmg+CkBAIC0yMCw2ICsyMyw5OCBAQAogI2RlZmluZSBBQ0NFX01PVl9UT19QU1IKICNkZWZpbmUgQUNDRV9USEFTSAogCisjZGVmaW5lIFZNWF9WUFNfU1lOQ19SRUFECQkJXAorCWFkZCByMTY9Vk1NX1ZQRF9CQVNFX09GRlNFVCxyMjE7CVwKKwltb3YgcjE3ID0gYjA7CQkJCVwKKwltb3YgcjE4ID0gcjI0OwkJCQlcCisJbW92IHIxOSA9IHIyNTsJCQkJXAorCW1vdiByMjAgPSByMzE7CQkJCVwKKwk7OwkJCQkJXAorey5taWk7CQkJCQkJXAorCWxkOCByMTYgPSBbcjE2XTsJCQlcCisJbm9wIDB4MDsJCQkJXAorCW1vdiByMjQgPSBpcDsJCQkJXAorCTs7CQkJCQlcCit9OwkJCQkJCVwKK3subW1iOwkJCQkJCVwKKwlhZGQgcjI0PTB4MjAsIHIyNDsJCQlcCisJbW92IHIyNSA9cjE2OwkJCQlcCisJYnIuc3B0ay5tYW55IGt2bV92cHNfc3luY19yZWFkOwkJXAorfTsJCQkJCQlcCisJbW92IGIwID0gcjE3OwkJCQlcCisJbW92IHIyNCA9IHIxODsJCQkJXAorCW1vdiByMjUgPSByMTk7CQkJCVwKKwltb3YgcjMxID0gcjIwCisKK0VOVFJZKGt2bV92cHNfZW50cnkpCisJYWRkcyByMjkgPSBWTU1fVkNQVV9WU0FfQkFTRV9PRkZTRVQscjIxCisJOzsKKwlsZDggcjI5ID0gW3IyOV0KKwk7OworCWFkZCByMjkgPSByMjksIHIzMAorCTs7CisJbW92IGIwID0gcjI5CisJYnIuc3B0ay5tYW55IGIwCitFTkQoa3ZtX3Zwc19lbnRyeSkKKworLyoKKyAqCUlucHV0czoKKyAqCXIyNCA6IHJldHVybiBhZGRyZXNzCisgKiAgCXIyNSA6IHZwZAorICoJcjI5IDogc2NyYXRjaAorICoKKyAqLworR0xPQkFMX0VOVFJZKGt2bV92cHNfc3luY19yZWFkKQorCW1vdmwgcjMwID0gUEFMX1ZQU19TWU5DX1JFQUQKKwk7OworCWJyLnNwdGsubWFueSBrdm1fdnBzX2VudHJ5CitFTkQoa3ZtX3Zwc19zeW5jX3JlYWQpCisKKy8qCisgKglJbnB1dHM6CisgKglyMjQgOiByZXR1cm4gYWRkcmVzcworICogIAlyMjUgOiB2cGQKKyAqCXIyOSA6IHNjcmF0Y2gKKyAqCisgKi8KK0dMT0JBTF9FTlRSWShrdm1fdnBzX3N5bmNfd3JpdGUpCisJbW92bCByMzAgPSBQQUxfVlBTX1NZTkNfV1JJVEUKKwk7OworCWJyLnNwdGsubWFueSBrdm1fdnBzX2VudHJ5CitFTkQoa3ZtX3Zwc19zeW5jX3dyaXRlKQorCisvKgorICoJSW5wdXRzOgorICoJcjIzIDogcHIKKyAqCXIyNCA6IGd1ZXN0IGIwCisgKiAgCXIyNSA6IHZwZAorICoKKyAqLworR0xPQkFMX0VOVFJZKGt2bV92cHNfcmVzdW1lX25vcm1hbCkKKwltb3ZsIHIzMCA9IFBBTF9WUFNfUkVTVU1FX05PUk1BTAorCTs7CisJbW92IHByPXIyMywtMgorCWJyLnNwdGsubWFueSBrdm1fdnBzX2VudHJ5CitFTkQoa3ZtX3Zwc19yZXN1bWVfbm9ybWFsKQorCisvKgorICoJSW5wdXRzOgorICoJcjIzIDogcHIKKyAqCXIyNCA6IGd1ZXN0IGIwCisgKiAgCXIyNSA6IHZwZAorICoJcjE3IDogaXNyCisgKi8KK0dMT0JBTF9FTlRSWShrdm1fdnBzX3Jlc3VtZV9oYW5kbGVyKQorCW1vdmwgcjMwID0gUEFMX1ZQU19SRVNVTUVfSEFORExFUgorCTs7CisJbGQ4IHIyNz1bcjI1XQorCXNociByMTc9cjE3LElBNjRfSVNSX0lSX0JJVAorCTs7CisJZGVwIHIyNz1yMTcscjI3LDYzLDEgICAvLyBiaXQgNjMgb2YgcjI3IGluZGljYXRlIHdoZXRoZXIgZW5hYmxlIENGTEUKKwltb3YgcHI9cjIzLC0yCisJYnIuc3B0ay5tYW55IGt2bV92cHNfZW50cnkKK0VORChrdm1fdnBzX3Jlc3VtZV9oYW5kbGVyKQorCiAvL21vdiByMT1hcjMKIEdMT0JBTF9FTlRSWShrdm1fYXNtX21vdl9mcm9tX2FyKQogI2lmbmRlZiBBQ0NFX01PVl9GUk9NX0FSCkBAIC0xNTcsMTEgKzI1MiwxMSBAQAogI2lmbmRlZiBBQ0NFX1JTTQogCWJyLm1hbnkga3ZtX3ZpcnR1YWxpemF0aW9uX2ZhdWx0X2JhY2sKICNlbmRpZgotCWFkZCByMTY9Vk1NX1ZQRF9CQVNFX09GRlNFVCxyMjEKKwlWTVhfVlBTX1NZTkNfUkVBRAorCTs7CiAJZXh0ci51IHIyNj1yMjUsNiwyMQogCWV4dHIudSByMjc9cjI1LDMxLDIKIAk7OwotCWxkOCByMTY9W3IxNl0KIAlleHRyLnUgcjI4PXIyNSwzNiwxCiAJZGVwIHIyNj1yMjcscjI2LDIxLDIKIAk7OwpAQCAtMTk2LDcgKzI5MSw3IEBACiAJdGJpdC5ueiBwNixwMD1yMjMsMAogCTs7CiAJdGJpdC56Lm9yIHA2LHAwPXIyNixJQTY0X1BTUl9EVF9CSVQKLQkocDYpIGJyLmRwdGsga3ZtX3Jlc3VtZV90b19ndWVzdAorCShwNikgYnIuZHB0ayBrdm1fcmVzdW1lX3RvX2d1ZXN0X3dpdGhfc3luYwogCTs7CiAJYWRkIHIyNj1WTU1fVkNQVV9NRVRBX1JSMF9PRkZTRVQscjIxCiAJYWRkIHIyNz1WTU1fVkNQVV9NRVRBX1JSMF9PRkZTRVQrOCxyMjEKQEAgLTIxMiw3ICszMDcsNyBAQAogCW1vdiBycltyMjhdPXIyNwogCTs7CiAJc3Jsei5kCi0JYnIubWFueSBrdm1fcmVzdW1lX3RvX2d1ZXN0CisJYnIubWFueSBrdm1fcmVzdW1lX3RvX2d1ZXN0X3dpdGhfc3luYwogRU5EKGt2bV9hc21fcnNtKQogCiAKQEAgLTIyMSwxMSArMzE2LDExIEBACiAjaWZuZGVmIEFDQ0VfU1NNCiAJYnIubWFueSBrdm1fdmlydHVhbGl6YXRpb25fZmF1bHRfYmFjawogI2VuZGlmCi0JYWRkIHIxNj1WTU1fVlBEX0JBU0VfT0ZGU0VULHIyMQorCVZNWF9WUFNfU1lOQ19SRUFECisJOzsKIAlleHRyLnUgcjI2PXIyNSw2LDIxCiAJZXh0ci51IHIyNz1yMjUsMzEsMgogCTs7Ci0JbGQ4IHIxNj1bcjE2XQogCWV4dHIudSByMjg9cjI1LDM2LDEKIAlkZXAgcjI2PXIyNyxyMjYsMjEsMgogCTs7ICAvL3IyNiBpcyBpbW0yNApAQCAtMjcxLDcgKzM2Niw3IEBACiAJdGJpdC5ueiBwNixwMD1yMjksSUE2NF9QU1JfSV9CSVQKIAk7OwogCXRiaXQuei5vciBwNixwMD1yMTksSUE2NF9QU1JfSV9CSVQKLQkocDYpIGJyLmRwdGsga3ZtX3Jlc3VtZV90b19ndWVzdAorCShwNikgYnIuZHB0ayBrdm1fcmVzdW1lX3RvX2d1ZXN0X3dpdGhfc3luYwogCTs7CiAJYWRkIHIyOT1WUERfVlRQUl9TVEFSVF9PRkZTRVQscjE2CiAJYWRkIHIzMD1WUERfVkhQSV9TVEFSVF9PRkZTRVQscjE2CkBAIC0yODYsNyArMzgxLDcgQEAKIAk7OwogCWNtcC5ndCBwNixwMD1yMzAscjE3CiAJKHA2KSBici5kcG50LmZldyBrdm1fYXNtX2Rpc3BhdGNoX3ZleGlycQotCWJyLm1hbnkga3ZtX3Jlc3VtZV90b19ndWVzdAorCWJyLm1hbnkga3ZtX3Jlc3VtZV90b19ndWVzdF93aXRoX3N5bmMKIEVORChrdm1fYXNtX3NzbSkKIAogCkBAIC0yOTUsMTAgKzM5MCw5IEBACiAjaWZuZGVmIEFDQ0VfTU9WX1RPX1BTUgogCWJyLm1hbnkga3ZtX3ZpcnR1YWxpemF0aW9uX2ZhdWx0X2JhY2sKICNlbmRpZgotCWFkZCByMTY9Vk1NX1ZQRF9CQVNFX09GRlNFVCxyMjEKLQlleHRyLnUgcjI2PXIyNSwxMyw3IC8vcjIKKwlWTVhfVlBTX1NZTkNfUkVBRAogCTs7Ci0JbGQ4IHIxNj1bcjE2XQorCWV4dHIudSByMjY9cjI1LDEzLDcgLy9yMgogCWFkZGwgcjIwPUBncHJlbChhc21fbW92X2Zyb21fcmVnKSxncAogCTs7CiAJYWRkcyByMzA9a3ZtX2FzbV9tb3ZfdG9fcHNyX2JhY2stYXNtX21vdl9mcm9tX3JlZyxyMjAKQEAgLTM3NCw3ICs0NjgsNyBAQAogCTs7CiAJdGJpdC5uei5vciBwNixwMD1yMTcsSUE2NF9QU1JfSV9CSVQKIAl0Yml0Lnoub3IgcDYscDA9cjMwLElBNjRfUFNSX0lfQklUCi0JKHA2KSBici5kcG50LmZldyBrdm1fcmVzdW1lX3RvX2d1ZXN0CisJKHA2KSBici5kcG50LmZldyBrdm1fcmVzdW1lX3RvX2d1ZXN0X3dpdGhfc3luYwogCTs7CiAJYWRkIHIyOT1WUERfVlRQUl9TVEFSVF9PRkZTRVQscjE2CiAJYWRkIHIzMD1WUERfVkhQSV9TVEFSVF9PRkZTRVQscjE2CkBAIC0zODksMTMgKzQ4MywyOSBAQAogCTs7CiAJY21wLmd0IHA2LHAwPXIzMCxyMTcKIAkocDYpIGJyLmRwbnQuZmV3IGt2bV9hc21fZGlzcGF0Y2hfdmV4aXJxCi0JYnIubWFueSBrdm1fcmVzdW1lX3RvX2d1ZXN0CisJYnIubWFueSBrdm1fcmVzdW1lX3RvX2d1ZXN0X3dpdGhfc3luYwogRU5EKGt2bV9hc21fbW92X3RvX3BzcikKIAogCiBFTlRSWShrdm1fYXNtX2Rpc3BhdGNoX3ZleGlycSkKIC8vaW5jcmVtZW50IGlpcAorCW1vdiByMTcgPSBiMAorCW1vdiByMTggPSByMzEKK3subWlpCisJYWRkIHIyNT1WTU1fVlBEX0JBU0VfT0ZGU0VULHIyMQorCW5vcCAweDAKKwltb3YgcjI0ID0gaXAKKwk7OworfQorey5tbWIKKwlhZGQgcjI0ID0gMHgyMCwgcjI0CisJbGQ4IHIyNSA9IFtyMjVdCisJYnIuc3B0ay5tYW55IGt2bV92cHNfc3luY193cml0ZQorfQorCW1vdiBiMCA9cjE3CiAJbW92IHIxNj1jci5pcHNyCisJbW92IHIzMSA9IHIxOAorCW1vdiByMTkgPSAzNwogCTs7CiAJZXh0ci51IHIxNz1yMTYsSUE2NF9QU1JfUklfQklULDIKIAl0Yml0Lm56IHA2LHA3PXIxNixJQTY0X1BTUl9SSV9CSVQrMQpAQCAtNDM1LDI1ICs1NDUsMzEgQEAKIAk7Owoga3ZtX2FzbV90aGFzaF9iYWNrMToKIAlzaHIudSByMjM9cjE5LDYxCQkvLyBnZXQgUlIgbnVtYmVyCi0JYWRkcyByMjU9Vk1NX1ZDUFVfVlJSMF9PRkZTRVQscjIxCS8vIGdldCB2Y3B1LT5hcmNoLnZyclswXSdzIGFkZHIKKwlhZGRzIHIyOD1WTU1fVkNQVV9WUlIwX09GRlNFVCxyMjEJLy8gZ2V0IHZjcHUtPmFyY2gudnJyWzBdJ3MgYWRkcgogCWFkZHMgcjE2PVZNTV9WUERfVlBUQV9PRkZTRVQscjE2CS8vIGdldCB2cHRhCiAJOzsKLQlzaGxhZGQgcjI3PXIyMywzLHIyNQkvLyBnZXQgdmNwdS0+YXJjaC52cnJbcjIzXSdzIGFkZHIKKwlzaGxhZGQgcjI3PXIyMywzLHIyOAkvLyBnZXQgdmNwdS0+YXJjaC52cnJbcjIzXSdzIGFkZHIKIAlsZDggcjE3PVtyMTZdCQkvLyBnZXQgUFRBCiAJbW92IHIyNj0xCiAJOzsKLQlleHRyLnUgcjI5PXIxNywyLDYJCS8vIGdldCBwdGEuc2l6ZQotCWxkOCByMjU9W3IyN10JCS8vIGdldCB2Y3B1LT5hcmNoLnZycltyMjNdJ3MgdmFsdWUKKwlleHRyLnUgcjI5PXIxNywyLDYJLy8gZ2V0IHB0YS5zaXplCisJbGQ4IHIyOD1bcjI3XQkJLy8gZ2V0IHZjcHUtPmFyY2gudnJyW3IyM10ncyB2YWx1ZQogCTs7Ci0JZXh0ci51IHIyNT1yMjUsMiw2CQkvLyBnZXQgcnIucHMKKwltb3YgYjA9cjI0CisJLy9GYWxsYmFjayB0byBDIGlmIHB0YS52ZiBpcyBzZXQKKwl0Yml0Lm56IHA2LHAwPXIxNywgOAorCTs7CisJKHA2KSBtb3YgcjI0PUVWRU5UX1RIQVNICisJKHA2KSBici5jb25kLmRwbnQubWFueSBrdm1fdmlydHVhbGl6YXRpb25fZmF1bHRfYmFjaworCWV4dHIudSByMjg9cjI4LDIsNgkvLyBnZXQgcnIucHMKIAlzaGwgcjIyPXIyNixyMjkJCS8vIDFVTCA8PCBwdGEuc2l6ZQogCTs7Ci0Jc2hyLnUgcjIzPXIxOSxyMjUJCS8vIHZhZGRyID4+IHJyLnBzCisJc2hyLnUgcjIzPXIxOSxyMjgJLy8gdmFkZHIgPj4gcnIucHMKIAlhZGRzIHIyNj0zLHIyOQkJLy8gcHRhLnNpemUgKyAzCiAJc2hsIHIyNz1yMTcsMwkJLy8gcHRhIDw8IDMKIAk7OwogCXNobCByMjM9cjIzLDMJCS8vICh2YWRkciA+PiByci5wcykgPDwgMwotCXNoci51IHIyNz1yMjcscjI2CQkvLyAocHRhIDw8IDMpID4+IChwdGEuc2l6ZSszKQorCXNoci51IHIyNz1yMjcscjI2CS8vIChwdGEgPDwgMykgPj4gKHB0YS5zaXplKzMpCiAJbW92bCByMTY9Nzw8NjEKIAk7OwogCWFkZHMgcjIyPS0xLHIyMgkJLy8gKDFVTCA8PCBwdGEuc2l6ZSkgLSAxCkBAIC03MjQsNiArODQwLDI5IEBACiAgKiByMzE6IHByCiAgKiByMjQ6IGIwCiAgKi8KK0VOVFJZKGt2bV9yZXN1bWVfdG9fZ3Vlc3Rfd2l0aF9zeW5jKQorCWFkZHMgcjE5PVZNTV9WUERfQkFTRV9PRkZTRVQscjIxCisJbW92IHIxNiA9IHIzMQorCW1vdiByMTcgPSByMjQKKwk7Oworey5taWkKKwlsZDggcjI1ID1bcjE5XQorCW5vcCAweDAKKwltb3YgcjI0ID0gaXAKKwk7OworfQorey5tbWIKKwlhZGQgcjI0ID0weDIwLCByMjQKKwlub3AgMHgwCisJYnIuc3B0ay5tYW55IGt2bV92cHNfc3luY193cml0ZQorfQorCisJbW92IHIzMSA9IHIxNgorCW1vdiByMjQgPXIxNworCTs7CisJYnIuc3B0ay5tYW55IGt2bV9yZXN1bWVfdG9fZ3Vlc3QKK0VORChrdm1fcmVzdW1lX3RvX2d1ZXN0X3dpdGhfc3luYykKKwogRU5UUlkoa3ZtX3Jlc3VtZV90b19ndWVzdCkKIAlhZGRzIHIxNiA9IFZNTV9WQ1BVX1NBVkVEX0dQX09GRlNFVCxyMjEKIAk7OwpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2t2bS9wcm9jZXNzLmMgYi9hcmNoL2lhNjQva3ZtL3Byb2Nlc3MuYwppbmRleCA1YTMzZjdlLi4zNDE3NzgzIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQva3ZtL3Byb2Nlc3MuYworKysgYi9hcmNoL2lhNjQva3ZtL3Byb2Nlc3MuYwpAQCAtOTYyLDkgKzk2Miw5IEBACiB2b2lkIHZtbV90cmFuc2l0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKIAlpYTY0X2NhbGxfdnNhKFBBTF9WUFNfU0FWRSwgKHVuc2lnbmVkIGxvbmcpdmNwdS0+YXJjaC52cGQsCi0JCQkwLCAwLCAwLCAwLCAwLCAwKTsKKwkJCTEsIDAsIDAsIDAsIDAsIDApOwogCXZtbV90cmFtcG9saW5lKCZ2Y3B1LT5hcmNoLmd1ZXN0LCAmdmNwdS0+YXJjaC5ob3N0KTsKIAlpYTY0X2NhbGxfdnNhKFBBTF9WUFNfUkVTVE9SRSwgKHVuc2lnbmVkIGxvbmcpdmNwdS0+YXJjaC52cGQsCi0JCQkJCQkwLCAwLCAwLCAwLCAwLCAwKTsKKwkJCQkJCTEsIDAsIDAsIDAsIDAsIDApOwogCWt2bV9kb19yZXN1bWVfb3AodmNwdSk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva3ZtL3ZjcHUuaCBiL2FyY2gvaWE2NC9rdm0vdmNwdS5oCmluZGV4IGIwZmNmYjYuLjM0MWUzZmUgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9rdm0vdmNwdS5oCisrKyBiL2FyY2gvaWE2NC9rdm0vdmNwdS5oCkBAIC0zMTMsMjEgKzMxMywyMSBAQAogCXRycC0+cmlkID0gcmlkOwogfQogCi1leHRlcm4gdTY0IGt2bV9sb29rdXBfbXBhKHU2NCBncGZuKTsKLWV4dGVybiB1NjQga3ZtX2dwYV90b19tcGEodTY0IGdwYSk7CitleHRlcm4gdTY0IGt2bV9nZXRfbXB0X2VudHJ5KHU2NCBncGZuKTsKIAotLyogUmV0dXJuIEkvTyB0eXBlIGlmIHRyeWUgKi8KLSNkZWZpbmUgX19ncGZuX2lzX2lvKGdwZm4pCQkJXAotCSh7CQkJCQkJXAotCSB1NjQgcHRlLCByZXQgPSAwOwkJCVwKLQkgcHRlID0ga3ZtX2xvb2t1cF9tcGEoZ3Bmbik7CQlcCi0JIGlmICghKHB0ZSAmIEdQRk5fSU5WX01BU0spKQkJXAotCSByZXQgPSBwdGUgJiBHUEZOX0lPX01BU0s7CVwKLQkgcmV0OwkJCQkJXAotCSB9KQotCisvKiBSZXR1cm4gSS8gKi8KK3N0YXRpYyBpbmxpbmUgdTY0IF9fZ3Bmbl9pc19pbyh1NjQgZ3BmbikKK3sKKwl1NjQgIHB0ZTsKKwlwdGUgPSBrdm1fZ2V0X21wdF9lbnRyeShncGZuKTsKKwlpZiAoIShwdGUgJiBHUEZOX0lOVl9NQVNLKSkgeworCQlwdGUgPSBwdGUgJiBHUEZOX0lPX01BU0s7CisJCWlmIChwdGUgIT0gR1BGTl9QSFlTX01NSU8pCisJCQlyZXR1cm4gcHRlOworCX0KKwlyZXR1cm4gMDsKK30KICNlbmRpZgotCiAjZGVmaW5lIElBNjRfTk9fRkFVTFQJMAogI2RlZmluZSBJQTY0X0ZBVUxUCTEKIApkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2t2bS92bW1faXZ0LlMgYi9hcmNoL2lhNjQva3ZtL3ZtbV9pdnQuUwppbmRleCAzZWU1ZjQ4Li5jMWQ3MjUxIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQva3ZtL3ZtbV9pdnQuUworKysgYi9hcmNoL2lhNjQva3ZtL3ZtbV9pdnQuUwpAQCAtMTI2MSwxMSArMTI2MSw2IEBACiAgICAgYWRkcyByMTk9Vk1NX1ZQRF9WUFNSX09GRlNFVCxyMTgKICAgICA7OwogICAgIGxkOCByMTk9W3IxOV0gICAgICAgIC8vdnBzcgotICAgIGFkZHMgcjIwPVZNTV9WQ1BVX1ZTQV9CQVNFX09GRlNFVCxyMjEKLSAgICA7OwotICAgIGxkOCByMjA9W3IyMF0KLSAgICA7OwotLy92c2Ffc3luY193cml0ZV9zdGFydAogICAgIG1vdiByMjU9cjE4CiAgICAgYWRkcyByMTY9IFZNTV9WQ1BVX0dQX09GRlNFVCxyMjEKICAgICA7OwpAQCAtMTI3NCwxMCArMTI2OSw3IEBACiAgICAgOzsKICAgICBhZGQgIHIyND1yMjQscjE2CiAgICAgOzsKLSAgICBhZGQgcjE2PVBBTF9WUFNfU1lOQ19XUklURSxyMjAKLSAgICA7OwotICAgIG1vdiBiMD1yMTYKLSAgICBici5jb25kLnNwdGsgYjAgICAgICAgICAvLyBjYWxsIHRoZSBzZXJ2aWNlCisgICAgYnIuc3B0ay5tYW55ICBrdm1fdnBzX3N5bmNfd3JpdGUgICAgICAgLy8gY2FsbCB0aGUgc2VydmljZQogICAgIDs7CiBFTkQoaWE2NF9sZWF2ZV9oeXBlcnZpc29yKQogLy8gZmFsbCB0aHJvdWdoCkBAIC0xMjg4LDI4ICsxMjgwLDE1IEBACiAgKiAgcjE3OmNyLmlzcgogICogIHIxODp2cGQKICAqICByMTk6dnBzcgotICogIHIyMDpfX3ZzYV9iYXNlCiAgKiAgcjIyOmIwCiAgKiAgcjIzOnByZWRpY2F0ZQogICovCiAgICAgbW92IHIyND1yMjIKICAgICBtb3YgcjI1PXIxOAogICAgIHRiaXQubnogcDEscDIgPSByMTksSUE2NF9QU1JfSUNfQklUICAgICAgICAvLyBwMT12cHNyLmljCisgICAgKHAxKSBici5jb25kLnNwdGsuZmV3IGt2bV92cHNfcmVzdW1lX25vcm1hbAorICAgIChwMikgYnIuY29uZC5zcHRrLm1hbnkga3ZtX3Zwc19yZXN1bWVfaGFuZGxlcgogICAgIDs7Ci0gICAgKHAxKSBhZGQgcjI5PVBBTF9WUFNfUkVTVU1FX05PUk1BTCxyMjAKLSAgICAocDEpIGJyLnNwdGsubWFueSBpYTY0X3ZtbV9lbnRyeV9vdXQKLSAgICA7OwotICAgIHRiaXQubnogcDEscDIgPSByMTcsSUE2NF9JU1JfSVJfQklUCQkvL3AxPWNyLmlzci5pcgotICAgIDs7Ci0gICAgKHAxKSBhZGQgcjI5PVBBTF9WUFNfUkVTVU1FX05PUk1BTCxyMjAKLSAgICAocDIpIGFkZCByMjk9UEFMX1ZQU19SRVNVTUVfSEFORExFUixyMjAKLSAgICAocDIpIGxkOCByMjY9W3IyNV0KLSAgICA7OwotaWE2NF92bW1fZW50cnlfb3V0OgotICAgIG1vdiBwcj1yMjMsLTIKLSAgICBtb3YgYjA9cjI5Ci0gICAgOzsKLSAgICBici5jb25kLnNwdGsgYjAgICAgICAgICAgICAgLy8gY2FsbCBwYWwgc2VydmljZQogRU5EKGlhNjRfdm1tX2VudHJ5KQogCiAKQEAgLTEzNzYsNiArMTM1NSw5IEBACiAgICAgLy9zZXQgdXAgaXBzciwgaWlwLCB2cGQudnBzciwgZGNyCiAgICAgLy8gRm9yIElQU1I6IGl0L2R0L3J0PTEsIGkvaWM9MSwgc2k9MSwgdm0vYm49MQogICAgIC8vIEZvciBEQ1I6IGFsbCBiaXRzIDAKKyAgICBic3cuMAorICAgIDs7CisgICAgbW92IHIyMSA9cjEzCiAgICAgYWRkcyByMTQ9LVZNTV9QVF9SRUdTX1NJWkUsIHIxMgogICAgIDs7CiAgICAgbW92bCByNj0weDUwMTAwODgyNjAwMCAgICAgIC8vIElQU1IgZHQvcnQvaXQ6MTtpL2ljOjEsIHNpOjEsIHZtL2JuOjEKQEAgLTEzODcsMTIgKzEzNjksNiBAQAogICAgIDs7CiAgICAgc3Jsei5pCiAgICAgOzsKLSAgICBic3cuMAotICAgIDs7Ci0gICAgbW92IHIyMSA9cjEzCi0gICAgOzsKLSAgICBic3cuMQotICAgIDs7CiAgICAgbW92IGFyLnJzYyA9IDAKICAgICA7OwogICAgIGZsdXNocnMKQEAgLTE0MDYsMTIgKzEzODIsOSBAQAogICAgIGxkOCByMSA9IFtyMjBdCiAgICAgOzsKICAgICBtb3YgY3IuaWlwPXI0Ci0gICAgOzsKICAgICBhZGRzIHIxNj1WTU1fVlBEX0JBU0VfT0ZGU0VULHIxMwotICAgIGFkZHMgcjIwPVZNTV9WQ1BVX1ZTQV9CQVNFX09GRlNFVCxyMTMKICAgICA7OwogICAgIGxkOCByMTg9W3IxNl0KLSAgICBsZDggcjIwPVtyMjBdCiAgICAgOzsKICAgICBhZGRzIHIxOT1WTU1fVlBEX1ZQU1JfT0ZGU0VULHIxOAogICAgIDs7CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva3ZtL3Z0bGIuYyBiL2FyY2gvaWE2NC9rdm0vdnRsYi5jCmluZGV4IGRlZjQ1NzYuLmUyMmI5MzMgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9rdm0vdnRsYi5jCisrKyBiL2FyY2gvaWE2NC9rdm0vdnRsYi5jCkBAIC0zOTAsNyArMzkwLDcgQEAKIAogdTY0IHRyYW5zbGF0ZV9waHlfcHRlKHU2NCAqcHRlLCB1NjQgaXRpciwgdTY0IHZhKQogewotCXU2NCBwcywgcHNfbWFzaywgcGFkZHIsIG1hZGRyOworCXU2NCBwcywgcHNfbWFzaywgcGFkZHIsIG1hZGRyLCBpb19tYXNrOwogCXVuaW9uIHB0ZV9mbGFncyBwaHlfcHRlOwogCiAJcHMgPSBpdGlyX3BzKGl0aXIpOwpAQCAtMzk4LDggKzM5OCw5IEBACiAJcGh5X3B0ZS52YWwgPSAqcHRlOwogCXBhZGRyID0gKnB0ZTsKIAlwYWRkciA9ICgocGFkZHIgJiBfUEFHRV9QUE5fTUFTSykgJiBwc19tYXNrKSB8ICh2YSAmIH5wc19tYXNrKTsKLQltYWRkciA9IGt2bV9sb29rdXBfbXBhKHBhZGRyID4+IFBBR0VfU0hJRlQpOwotCWlmIChtYWRkciAmIEdQRk5fSU9fTUFTSykgeworCW1hZGRyID0ga3ZtX2dldF9tcHRfZW50cnkocGFkZHIgPj4gUEFHRV9TSElGVCk7CisJaW9fbWFzayA9IG1hZGRyICYgR1BGTl9JT19NQVNLOworCWlmIChpb19tYXNrICYmIChpb19tYXNrICE9IEdQRk5fUEhZU19NTUlPKSkgewogCQkqcHRlIHw9IFZUTEJfUFRFX0lPOwogCQlyZXR1cm4gLTE7CiAJfQpAQCAtNDE4LDcgKzQxOSw3IEBACiAJCQkJCQl1NjQgaWZhLCBpbnQgdHlwZSkKIHsKIAl1NjQgcHM7Ci0JdTY0IHBoeV9wdGU7CisJdTY0IHBoeV9wdGUsIGlvX21hc2ssIGluZGV4OwogCXVuaW9uIGlhNjRfcnIgdnJyLCBtcnI7CiAJaW50IHJldCA9IDA7CiAKQEAgLTQyNiwxMyArNDI3LDE2IEBACiAJdnJyLnZhbCA9IHZjcHVfZ2V0X3JyKHYsIGlmYSk7CiAJbXJyLnZhbCA9IGlhNjRfZ2V0X3JyKGlmYSk7CiAKKwlpbmRleCA9IChwdGUgJiBfUEFHRV9QUE5fTUFTSykgPj4gUEFHRV9TSElGVDsKKwlpb19tYXNrID0ga3ZtX2dldF9tcHRfZW50cnkoaW5kZXgpICYgR1BGTl9JT19NQVNLOwogCXBoeV9wdGUgPSB0cmFuc2xhdGVfcGh5X3B0ZSgmcHRlLCBpdGlyLCBpZmEpOwogCiAJLyogRW5zdXJlIFdCIGF0dHJpYnV0ZSBpZiBwdGUgaXMgcmVsYXRlZCB0byBhIG5vcm1hbCBtZW0gcGFnZSwKIAkgKiB3aGljaCBpcyByZXF1aXJlZCBieSB2Z2EgYWNjZWxlcmF0aW9uIHNpbmNlIHFlbXUgbWFwcyBzaGFyZWQKIAkgKiB2cmFtIGJ1ZmZlciB3aXRoIFdCLgogCSAqLwotCWlmICghKHB0ZSAmIFZUTEJfUFRFX0lPKSAmJiAoKHB0ZSAmIF9QQUdFX01BX01BU0spICE9IF9QQUdFX01BX05BVCkpIHsKKwlpZiAoIShwdGUgJiBWVExCX1BURV9JTykgJiYgKChwdGUgJiBfUEFHRV9NQV9NQVNLKSAhPSBfUEFHRV9NQV9OQVQpICYmCisJCQlpb19tYXNrICE9IEdQRk5fUEhZU19NTUlPKSB7CiAJCXB0ZSAmPSB+X1BBR0VfTUFfTUFTSzsKIAkJcGh5X3B0ZSAmPSB+X1BBR0VfTUFfTUFTSzsKIAl9CkBAIC01NjYsMTIgKzU3MCwxOSBAQAogCX0KIH0KIAotdTY0IGt2bV9sb29rdXBfbXBhKHU2NCBncGZuKQordTY0IGt2bV9nZXRfbXB0X2VudHJ5KHU2NCBncGZuKQogewogCXU2NCAqYmFzZSA9ICh1NjQgKikgS1ZNX1AyTV9CQVNFOwogCXJldHVybiAqKGJhc2UgKyBncGZuKTsKIH0KIAordTY0IGt2bV9sb29rdXBfbXBhKHU2NCBncGZuKQoreworCXU2NCBtYWRkcjsKKwltYWRkciA9IGt2bV9nZXRfbXB0X2VudHJ5KGdwZm4pOworCXJldHVybiBtYWRkciZfUEFHRV9QUE5fTUFTSzsKK30KKwogdTY0IGt2bV9ncGFfdG9fbXBhKHU2NCBncGEpCiB7CiAJdTY0IHB0ZSA9IGt2bV9sb29rdXBfbXBhKGdwYSA+PiBQQUdFX1NISUZUKTsKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9tbS9pbml0LmMgYi9hcmNoL2lhNjQvbW0vaW5pdC5jCmluZGV4IDIwMDEwMGUuLjA1NGJjZDkgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9tbS9pbml0LmMKKysrIGIvYXJjaC9pYTY0L21tL2luaXQuYwpAQCAtMjEsNyArMjEsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgogI2luY2x1ZGUgPGxpbnV4L2tleGVjLmg+CiAKLSNpbmNsdWRlIDxhc20vYS5vdXQuaD4KICNpbmNsdWRlIDxhc20vZG1hLmg+CiAjaW5jbHVkZSA8YXNtL2lhMzIuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KQEAgLTcwMSwyMyArNzAwLDYgQEAKIAogCXJldHVybiByZXQ7CiB9Ci0jaWZkZWYgQ09ORklHX01FTU9SWV9IT1RSRU1PVkUKLWludCByZW1vdmVfbWVtb3J5KHU2NCBzdGFydCwgdTY0IHNpemUpCi17Ci0JdW5zaWduZWQgbG9uZyBzdGFydF9wZm4sIGVuZF9wZm47Ci0JdW5zaWduZWQgbG9uZyB0aW1lb3V0ID0gMTIwICogSFo7Ci0JaW50IHJldDsKLQlzdGFydF9wZm4gPSBzdGFydCA+PiBQQUdFX1NISUZUOwotCWVuZF9wZm4gPSBzdGFydF9wZm4gKyAoc2l6ZSA+PiBQQUdFX1NISUZUKTsKLQlyZXQgPSBvZmZsaW5lX3BhZ2VzKHN0YXJ0X3BmbiwgZW5kX3BmbiwgdGltZW91dCk7Ci0JaWYgKHJldCkKLQkJZ290byBvdXQ7Ci0JLyogd2UgY2FuIGZyZWUgbWVtX21hcCBhdCB0aGlzIHBvaW50ICovCi1vdXQ6Ci0JcmV0dXJuIHJldDsKLX0KLUVYUE9SVF9TWU1CT0xfR1BMKHJlbW92ZV9tZW1vcnkpOwotI2VuZGlmIC8qIENPTkZJR19NRU1PUllfSE9UUkVNT1ZFICovCiAjZW5kaWYKIAogLyoKZGlmZiAtLWdpdCBhL2FyY2gvbTMyci9LY29uZmlnIGIvYXJjaC9tMzJyL0tjb25maWcKaW5kZXggZjU3MTEzZi4uZGJhZWQ0YSAxMDA2NDQKLS0tIGEvYXJjaC9tMzJyL0tjb25maWcKKysrIGIvYXJjaC9tMzJyL0tjb25maWcKQEAgLTM2LDE1ICszNiwxNCBAQAogY29uZmlnIE5PX0RNQQogCWRlZl9ib29sIHkKIAotY29uZmlnIEFSQ0hfU1VQUE9SVFNfQU9VVAotCWRlZl9ib29sIHkKLQogY29uZmlnIEhaCiAJaW50CiAJZGVmYXVsdCAxMDAKIAogc291cmNlICJpbml0L0tjb25maWciCiAKK3NvdXJjZSAia2VybmVsL0tjb25maWcuZnJlZXplciIKKwogCiBtZW51ICJQcm9jZXNzb3IgdHlwZSBhbmQgZmVhdHVyZXMiCiAKZGlmZiAtLWdpdCBhL2FyY2gvbTMyci9rZXJuZWwvcHJvY2Vzcy5jIGIvYXJjaC9tMzJyL2tlcm5lbC9wcm9jZXNzLmMKaW5kZXggNWJlNGZhYS4uNzEwM2Q5MSAxMDA2NDQKLS0tIGEvYXJjaC9tMzJyL2tlcm5lbC9wcm9jZXNzLmMKKysrIGIvYXJjaC9tMzJyL2tlcm5lbC9wcm9jZXNzLmMKQEAgLTExLDcgKzExLDcgQEAKICN1bmRlZiBERUJVR19QUk9DRVNTCiAjaWZkZWYgREVCVUdfUFJPQ0VTUwogI2RlZmluZSBEUFJJTlRLKGZtdCwgYXJncy4uLikgIHByaW50aygiJXM6JWQ6JXM6ICIgZm10LCBfX0ZJTEVfXywgX19MSU5FX18sIFwKLSAgX19GVU5DVElPTl9fLCAjI2FyZ3MpCisgIF9fZnVuY19fLCAjI2FyZ3MpCiAjZWxzZQogI2RlZmluZSBEUFJJTlRLKGZtdCwgYXJncy4uLikKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9tMzJyL2tlcm5lbC9zbXBib290LmMgYi9hcmNoL20zMnIva2VybmVsL3NtcGJvb3QuYwppbmRleCBmYzI5OTQ4Li4zOWNiNmRhIDEwMDY0NAotLS0gYS9hcmNoL20zMnIva2VybmVsL3NtcGJvb3QuYworKysgYi9hcmNoL20zMnIva2VybmVsL3NtcGJvb3QuYwpAQCAtNDAsNiArNDAsNyBAQAogICovCiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9jcHUuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KZGlmZiAtLWdpdCBhL2FyY2gvbTMyci9tbS9kaXNjb250aWcuYyBiL2FyY2gvbTMyci9tbS9kaXNjb250aWcuYwppbmRleCBjYmMzYzRjLi43ZGFmODk3IDEwMDY0NAotLS0gYS9hcmNoL20zMnIvbW0vZGlzY29udGlnLmMKKysrIGIvYXJjaC9tMzJyL21tL2Rpc2NvbnRpZy5jCkBAIC0xMTEsOSArMTExLDkgQEAKIAkJCQlpbml0cmRfc3RhcnQsIElOSVRSRF9TSVpFKTsKIAkJfSBlbHNlIHsKIAkJCXByaW50aygiaW5pdHJkIGV4dGVuZHMgYmV5b25kIGVuZCBvZiBtZW1vcnkgIgotCQkJCSIoMHglMDhseCA+IDB4JTA4bHgpXG5kaXNhYmxpbmcgaW5pdHJkXG4iLAorCQkJCSIoMHglMDhseCA+IDB4JTA4bGx4KVxuZGlzYWJsaW5nIGluaXRyZFxuIiwKIAkJCQlJTklUUkRfU1RBUlQgKyBJTklUUkRfU0laRSwKLQkJCQlQRk5fUEhZUyhtYXhfbG93X3BmbikpOworCQkJICAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKVBGTl9QSFlTKG1heF9sb3dfcGZuKSk7CiAKIAkJCWluaXRyZF9zdGFydCA9IDA7CiAJCX0KZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9LY29uZmlnIGIvYXJjaC9tNjhrL0tjb25maWcKaW5kZXggOGM1ZTFkZS4uODM2ZmI2NiAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL0tjb25maWcKKysrIGIvYXJjaC9tNjhrL0tjb25maWcKQEAgLTUsNiArNSw3IEBACiBjb25maWcgTTY4SwogCWJvb2wKIAlkZWZhdWx0IHkKKwlzZWxlY3QgSEFWRV9BT1VUCiAJc2VsZWN0IEhBVkVfSURFCiAKIGNvbmZpZyBNTVUKQEAgLTUzLDkgKzU0LDYgQEAKIGNvbmZpZyBOT19ETUEKIAlkZWZfYm9vbCBTVU4zCiAKLWNvbmZpZyBBUkNIX1NVUFBPUlRTX0FPVVQKLQlkZWZfYm9vbCB5Ci0KIGNvbmZpZyBIWgogCWludAogCWRlZmF1bHQgMTAwCkBAIC02NCw2ICs2Miw4IEBACiAKIHNvdXJjZSAiaW5pdC9LY29uZmlnIgogCitzb3VyY2UgImtlcm5lbC9LY29uZmlnLmZyZWV6ZXIiCisKIG1lbnUgIlBsYXRmb3JtIGRlcGVuZGVudCBzZXR1cCIKIAogY29uZmlnIEVJU0EKQEAgLTEwNywyMSArMTA3LDkgQEAKIAkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgbW9kdWxlcywgY2hvb3NlIE0gaGVyZTogdGhlCiAJICBtb2R1bGVzIHdpbGwgYmUgY2FsbGVkIHBjbWNpYV9jb3JlIGFuZCBkcy4KIAotY29uZmlnIFNVTjMKLQlib29sICJTdW4zIHN1cHBvcnQiCi0Jc2VsZWN0IE02ODAyMAotCXNlbGVjdCBNTVVfU1VOMyBpZiBNTVUKLQloZWxwCi0JICBUaGlzIG9wdGlvbiBlbmFibGVzIHN1cHBvcnQgZm9yIHRoZSBTdW4gMyBzZXJpZXMgb2Ygd29ya3N0YXRpb25zCi0JICAoMy81MCwgMy82MCwgMy8xeHgsIDMvMnh4IHN5c3RlbXMpLiBFbmFibGluZyB0aGlzIG9wdGlvbiByZXF1aXJlcwotCSAgdGhhdCBhbGwgb3RoZXIgaGFyZHdhcmUgdHlwZXMgbXVzdCBiZSBkaXNhYmxlZCwgYXMgU3VuIDMga2VybmVscwotCSAgYXJlIGluY29tcGF0aWJsZSB3aXRoIGFsbCBvdGhlciBtNjhrIHRhcmdldHMgKGluY2x1ZGluZyBTdW4gM3ghKS4KLQotCSAgSWYgeW91IGRvbid0IHdhbnQgdG8gY29tcGlsZSBhIGtlcm5lbCBleGNsdXNpdmVseSBmb3IgYSBTdW4gMywgc2F5IE4uCi0KIGNvbmZpZyBBTUlHQQogCWJvb2wgIkFtaWdhIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiAhTU1VX1NVTjMKKwlzZWxlY3QgTU1VX01PVE9ST0xBIGlmIE1NVQogCWhlbHAKIAkgIFRoaXMgb3B0aW9uIGVuYWJsZXMgc3VwcG9ydCBmb3IgdGhlIEFtaWdhIHNlcmllcyBvZiBjb21wdXRlcnMuIElmCiAJICB5b3UgcGxhbiB0byB1c2UgdGhpcyBrZXJuZWwgb24gYW4gQW1pZ2EsIHNheSBZIGhlcmUgYW5kIGJyb3dzZSB0aGUKQEAgLTEyOSwzMyArMTE3LDE2IEBACiAKIGNvbmZpZyBBVEFSSQogCWJvb2wgIkF0YXJpIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiAhTU1VX1NVTjMKKwlzZWxlY3QgTU1VX01PVE9ST0xBIGlmIE1NVQogCWhlbHAKIAkgIFRoaXMgb3B0aW9uIGVuYWJsZXMgc3VwcG9ydCBmb3IgdGhlIDY4MDAwLWJhc2VkIEF0YXJpIHNlcmllcyBvZgogCSAgY29tcHV0ZXJzIChpbmNsdWRpbmcgdGhlIFRULCBGYWxjb24gYW5kIE1lZHVzYSkuIElmIHlvdSBwbGFuIHRvIHVzZQogCSAgdGhpcyBrZXJuZWwgb24gYW4gQXRhcmksIHNheSBZIGhlcmUgYW5kIGJyb3dzZSB0aGUgbWF0ZXJpYWwKIAkgIGF2YWlsYWJsZSBpbiA8ZmlsZTpEb2N1bWVudGF0aW9uL202OGs+OyBvdGhlcndpc2Ugc2F5IE4uCiAKLWNvbmZpZyBIQURFUwotCWJvb2wgIkhhZGVzIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBBVEFSSSAmJiBCUk9LRU4KLQloZWxwCi0JICBUaGlzIG9wdGlvbiBlbmFibGVzIHN1cHBvcnQgZm9yIHRoZSBIYWRlcyBBdGFyaSBjbG9uZS4gSWYgeW91IHBsYW4KLQkgIHRvIHVzZSB0aGlzIGtlcm5lbCBvbiBhIEhhZGVzLCBzYXkgWSBoZXJlOyBvdGhlcndpc2Ugc2F5IE4uCi0KLWNvbmZpZyBQQ0kKLQlib29sCi0JZGVwZW5kcyBvbiBIQURFUwotCWRlZmF1bHQgeQotCWhlbHAKLQkgIEZpbmQgb3V0IHdoZXRoZXIgeW91IGhhdmUgYSBQQ0kgbW90aGVyYm9hcmQuIFBDSSBpcyB0aGUgbmFtZSBvZiBhCi0JICBidXMgc3lzdGVtLCBpLmUuIHRoZSB3YXkgdGhlIENQVSB0YWxrcyB0byB0aGUgb3RoZXIgc3R1ZmYgaW5zaWRlCi0JICB5b3VyIGJveC4gT3RoZXIgYnVzIHN5c3RlbXMgYXJlIElTQSwgRUlTQSwgTWljcm9DaGFubmVsIChNQ0EpIG9yCi0JICBWRVNBLiBJZiB5b3UgaGF2ZSBQQ0ksIHNheSBZLCBvdGhlcndpc2UgTi4KLQogY29uZmlnIE1BQwogCWJvb2wgIk1hY2ludG9zaCBzdXBwb3J0IgotCWRlcGVuZHMgb24gIU1NVV9TVU4zCisJc2VsZWN0IE1NVV9NT1RPUk9MQSBpZiBNTVUKIAloZWxwCiAJICBUaGlzIG9wdGlvbiBlbmFibGVzIHN1cHBvcnQgZm9yIHRoZSBBcHBsZSBNYWNpbnRvc2ggc2VyaWVzIG9mCiAJICBjb21wdXRlcnMgKHllcywgdGhlcmUgaXMgZXhwZXJpbWVudGFsIHN1cHBvcnQgbm93LCBhdCBsZWFzdCBmb3IgcGFydApAQCAtMTc2LDE0ICsxNDcsMTQgQEAKIAogY29uZmlnIEFQT0xMTwogCWJvb2wgIkFwb2xsbyBzdXBwb3J0IgotCWRlcGVuZHMgb24gIU1NVV9TVU4zCisJc2VsZWN0IE1NVV9NT1RPUk9MQSBpZiBNTVUKIAloZWxwCiAJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIHJ1biBMaW51eCBvbiBhbiBNQzY4MHgwLWJhc2VkIEFwb2xsbwogCSAgRG9tYWluIHdvcmtzdGF0aW9uIHN1Y2ggYXMgdGhlIEROMzUwMC4KIAogY29uZmlnIFZNRQogCWJvb2wgIlZNRSAoTW90b3JvbGEgYW5kIEJWTSkgc3VwcG9ydCIKLQlkZXBlbmRzIG9uICFNTVVfU1VOMworCXNlbGVjdCBNTVVfTU9UT1JPTEEgaWYgTU1VCiAJaGVscAogCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byBidWlsZCBhIGtlcm5lbCBmb3IgYSA2ODB4MCBiYXNlZCBWTUUKIAkgIGJvYXJkLiAgQm9hcmRzIGN1cnJlbnRseSBzdXBwb3J0ZWQgaW5jbHVkZSBNb3Rvcm9sYSBib2FyZHMgTVZNRTE0NywKQEAgLTIyMCw3ICsxOTEsNyBAQAogCiBjb25maWcgSFAzMDAKIAlib29sICJIUDkwMDAvMzAwIGFuZCBIUDkwMDAvNDAwIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiAhTU1VX1NVTjMKKwlzZWxlY3QgTU1VX01PVE9ST0xBIGlmIE1NVQogCWhlbHAKIAkgIFRoaXMgb3B0aW9uIGVuYWJsZXMgc3VwcG9ydCBmb3IgdGhlIEhQOTAwMC8zMDAgYW5kIEhQOTAwMC80MDAgc2VyaWVzCiAJICBvZiB3b3Jrc3RhdGlvbnMuIFN1cHBvcnQgZm9yIHRoZXNlIG1hY2hpbmVzIGlzIHN0aWxsIHNvbWV3aGF0CkBAIC0yMzksNyArMjEwLDcgQEAKIAogY29uZmlnIFNVTjNYCiAJYm9vbCAiU3VuM3ggc3VwcG9ydCIKLQlkZXBlbmRzIG9uICFNTVVfU1VOMworCXNlbGVjdCBNTVVfTU9UT1JPTEEgaWYgTU1VCiAJc2VsZWN0IE02ODAzMAogCWhlbHAKIAkgIFRoaXMgb3B0aW9uIGVuYWJsZXMgc3VwcG9ydCBmb3IgdGhlIFN1biAzeCBzZXJpZXMgb2Ygd29ya3N0YXRpb25zLgpAQCAtMjUyLDcgKzIyMyw3IEBACiAKIGNvbmZpZyBRNDAKIAlib29sICJRNDAvUTYwIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiAhTU1VX1NVTjMKKwlzZWxlY3QgTU1VX01PVE9ST0xBIGlmIE1NVQogCWhlbHAKIAkgIFRoZSBRNDAgaXMgYSBNb3Rvcm9sYSA2ODA0MC1iYXNlZCBzdWNjZXNzb3IgdG8gdGhlIFNpbmNsYWlyIFFMCiAJICBtYW51ZmFjdHVyZWQgaW4gR2VybWFueS4gIFRoZXJlIGlzIGFuIG9mZmljaWFsIFE0MCBob21lIHBhZ2UgYXQKQEAgLTI2MCw2ICsyMzEsMTkgQEAKIAkgIFE2MC4gU2VsZWN0IHlvdXIgQ1BVIGJlbG93LiAgRm9yIDY4TEMwNjAgZG9uJ3QgZm9yZ2V0IHRvIGVuYWJsZSBGUFUKIAkgIGVtdWxhdGlvbi4KIAorY29uZmlnIFNVTjMKKwlib29sICJTdW4zIHN1cHBvcnQiCisJZGVwZW5kcyBvbiAhTU1VX01PVE9ST0xBCisJc2VsZWN0IE1NVV9TVU4zIGlmIE1NVQorCXNlbGVjdCBNNjgwMjAKKwloZWxwCisJICBUaGlzIG9wdGlvbiBlbmFibGVzIHN1cHBvcnQgZm9yIHRoZSBTdW4gMyBzZXJpZXMgb2Ygd29ya3N0YXRpb25zCisJICAoMy81MCwgMy82MCwgMy8xeHgsIDMvMnh4IHN5c3RlbXMpLiBFbmFibGluZyB0aGlzIG9wdGlvbiByZXF1aXJlcworCSAgdGhhdCBhbGwgb3RoZXIgaGFyZHdhcmUgdHlwZXMgbXVzdCBiZSBkaXNhYmxlZCwgYXMgU3VuIDMga2VybmVscworCSAgYXJlIGluY29tcGF0aWJsZSB3aXRoIGFsbCBvdGhlciBtNjhrIHRhcmdldHMgKGluY2x1ZGluZyBTdW4gM3ghKS4KKworCSAgSWYgeW91IGRvbid0IHdhbnQgdG8gY29tcGlsZSBhIGtlcm5lbCBleGNsdXNpdmVseSBmb3IgYSBTdW4gMywgc2F5IE4uCisKIGNvbW1lbnQgIlByb2Nlc3NvciB0eXBlIgogCiBjb25maWcgTTY4MDIwCkBAIC0yOTcsMTAgKzI4MSwxMCBAQAogY29uZmlnIE1NVV9NT1RPUk9MQQogCWJvb2wKIAlkZXBlbmRzIG9uIE1NVSAmJiAhTU1VX1NVTjMKLQlkZWZhdWx0IHkKIAogY29uZmlnIE1NVV9TVU4zCiAJYm9vbAorCWRlcGVuZHMgb24gTU1VICYmICFNTVVfTU9UT1JPTEEKIAogY29uZmlnIE02OEtGUFVfRU1VCiAJYm9vbCAiTWF0aCBlbXVsYXRpb24gc3VwcG9ydCAoRVhQRVJJTUVOVEFMKSIKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9hbWlnYS9jb25maWcuYyBiL2FyY2gvbTY4ay9hbWlnYS9jb25maWcuYwppbmRleCBkZjY3OWQ5Li4wYTNmOWU4IDEwMDY0NAotLS0gYS9hcmNoL202OGsvYW1pZ2EvY29uZmlnLmMKKysrIGIvYXJjaC9tNjhrL2FtaWdhL2NvbmZpZy5jCkBAIC0yNCw2ICsyNCw3IEBACiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvem9ycm8uaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXlib2FyZC5oPgogCiAjaW5jbHVkZSA8YXNtL2Jvb3RpbmZvLmg+CiAjaW5jbHVkZSA8YXNtL3NldHVwLmg+CkBAIC05ODQsMyArOTg1LDExIEBACiAKIAlyZXR1cm4gbGVuOwogfQorCisvKgorICogVGhlIEFtaWdhIGtleWJvYXJkIGRyaXZlciBuZWVkcyBrZXlfbWFwcywgYnV0IHdlIGNhbm5vdCBleHBvcnQgaXQgaW4KKyAqIGRyaXZlcnMvY2hhci9kZWZrZXltYXAuYywgYXMgaXQgaXMgYXV0b2dlbmVyYXRlZAorICovCisjaWZkZWYgQ09ORklHX0hXX0NPTlNPTEUKK0VYUE9SVF9TWU1CT0xfR1BMKGtleV9tYXBzKTsKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2F0YXJpL01ha2VmaWxlIGIvYXJjaC9tNjhrL2F0YXJpL01ha2VmaWxlCmluZGV4IDJjZDkwNWUuLjBjYWM3MjMgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9hdGFyaS9NYWtlZmlsZQorKysgYi9hcmNoL202OGsvYXRhcmkvTWFrZWZpbGUKQEAgLTUsNyArNSw0IEBACiBvYmoteQkJOj0gY29uZmlnLm8gdGltZS5vIGRlYnVnLm8gYXRhaW50cy5vIHN0ZG1hLm8gXAogCQkJYXRhc291bmQubyBzdHJhbS5vCiAKLWlmZXEgKCQoQ09ORklHX1BDSSkseSkKLW9iai0kKENPTkZJR19IQURFUykJKz0gaGFkZXMtcGNpLm8KLWVuZGlmCiBvYmotJChDT05GSUdfQVRBUklfS0JEX0NPUkUpCSs9IGF0YWtleWIubwpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2F0YXJpL2F0YWludHMuYyBiL2FyY2gvbTY4ay9hdGFyaS9hdGFpbnRzLmMKaW5kZXggYjQ1NTkzYS4uZGJhNGFmYSAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL2F0YXJpL2F0YWludHMuYworKysgYi9hcmNoL202OGsvYXRhcmkvYXRhaW50cy5jCkBAIC00MDcsMTAgKzQwNyw4IEBACiAJCSAqIGdldHMgb3ZlcnJ1bnMpCiAJCSAqLwogCi0JCWlmICghTUFDSF9JU19IQURFUykgewotCQkJdmVjdG9yc1tWRUNfSU5UMl0gPSBmYWxjb25faGJsaGFuZGxlcjsKLQkJCXZlY3RvcnNbVkVDX0lOVDRdID0gZmFsY29uX2hibGhhbmRsZXI7Ci0JCX0KKwkJdmVjdG9yc1tWRUNfSU5UMl0gPSBmYWxjb25faGJsaGFuZGxlcjsKKwkJdmVjdG9yc1tWRUNfSU5UNF0gPSBmYWxjb25faGJsaGFuZGxlcjsKIAl9CiAKIAlpZiAoQVRBUklIV19QUkVTRU5UKFBDTV84QklUKSAmJiBBVEFSSUhXX1BSRVNFTlQoTUlDUk9XSVJFKSkgewpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2F0YXJpL2F0YWtleWIuYyBiL2FyY2gvbTY4ay9hdGFyaS9hdGFrZXliLmMKaW5kZXggYmI5NTlmYi4uYzAzOGI3YyAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL2F0YXJpL2F0YWtleWIuYworKysgYi9hcmNoL202OGsvYXRhcmkvYXRha2V5Yi5jCkBAIC02MzUsMTUgKzYzNSwzIEBACiAJcmV0dXJuIDA7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChhdGFyaV9rZXliX2luaXQpOwotCi1pbnQgYXRhcmlfa2JkX3RyYW5zbGF0ZSh1bnNpZ25lZCBjaGFyIGtleWNvZGUsIHVuc2lnbmVkIGNoYXIgKmtleWNvZGVwLCBjaGFyIHJhd19tb2RlKQotewotI2lmZGVmIENPTkZJR19NQUdJQ19TWVNSUQotCS8qIEFMVCtIRUxQIHByZXNzZWQ/ICovCi0JaWYgKChrZXljb2RlID09IDk4KSAmJiAoKHNoaWZ0X3N0YXRlICYgMHhmZikgPT0gOCkpCi0JCSprZXljb2RlcCA9IDB4ZmY7Ci0JZWxzZQotI2VuZGlmCi0JCSprZXljb2RlcCA9IGtleWNvZGU7Ci0JcmV0dXJuIDE7Ci19CmRpZmYgLS1naXQgYS9hcmNoL202OGsvYXRhcmkvY29uZmlnLmMgYi9hcmNoL202OGsvYXRhcmkvY29uZmlnLmMKaW5kZXggNTk0NWUxNS4uYWYwMzE4NSAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL2F0YXJpL2NvbmZpZy5jCisrKyBiL2FyY2gvbTY4ay9hdGFyaS9jb25maWcuYwpAQCAtMjMxLDcgKzIzMSw3IEBACiAJICovCiAKIAlwcmludGsoIkF0YXJpIGhhcmR3YXJlIGZvdW5kOiAiKTsKLQlpZiAoTUFDSF9JU19NRURVU0EgfHwgTUFDSF9JU19IQURFUykgeworCWlmIChNQUNIX0lTX01FRFVTQSkgewogCQkvKiBUaGVyZSdzIG5vIEF0YXJpIHZpZGVvIGhhcmR3YXJlIG9uIHRoZSBNZWR1c2EsIGJ1dCBhbGwgdGhlCiAJCSAqIGFkZHJlc3NlcyBiZWxvdyBnZW5lcmF0ZSBhIERUQUNLIHNvIG5vIGJ1cyBlcnJvciBvY2N1cnMhICovCiAJfSBlbHNlIGlmIChod3JlZ19wcmVzZW50KGYwMzBfeHJlZykpIHsKQEAgLTI2OSwxMCArMjY5LDYgQEAKIAkJQVRBUklIV19TRVQoU0NTSV9ETUEpOwogCQlwcmludGsoIlRUX1NDU0lfRE1BICIpOwogCX0KLQlpZiAoIU1BQ0hfSVNfSEFERVMgJiYgaHdyZWdfcHJlc2VudCgmc3RfZG1hLmRtYV9oaSkpIHsKLQkJQVRBUklIV19TRVQoU1RORF9ETUEpOwotCQlwcmludGsoIlNUTkRfRE1BICIpOwotCX0KIAkvKgogCSAqIFRoZSBTVC1ETUEgYWRkcmVzcyByZWdpc3RlcnMgYXJlbid0IHJlYWRhYmxlCiAJICogb24gYWxsIE1lZHVzYXMsIHNvIHRoZSB0ZXN0IGJlbG93IG1heSBmYWlsCkBAIC0yOTQsMTIgKzI5MCwxMSBAQAogCQlBVEFSSUhXX1NFVChZTV8yMTQ5KTsKIAkJcHJpbnRrKCJZTTIxNDkgIik7CiAJfQotCWlmICghTUFDSF9JU19NRURVU0EgJiYgIU1BQ0hfSVNfSEFERVMgJiYKLQkJaHdyZWdfcHJlc2VudCgmdHRfZG1hc25kLmN0cmwpKSB7CisJaWYgKCFNQUNIX0lTX01FRFVTQSAmJiBod3JlZ19wcmVzZW50KCZ0dF9kbWFzbmQuY3RybCkpIHsKIAkJQVRBUklIV19TRVQoUENNXzhCSVQpOwogCQlwcmludGsoIlBDTSAiKTsKIAl9Ci0JaWYgKCFNQUNIX0lTX0hBREVTICYmIGh3cmVnX3ByZXNlbnQoJmZhbGNvbl9jb2RlYy51bnVzZWQ1KSkgeworCWlmIChod3JlZ19wcmVzZW50KCZmYWxjb25fY29kZWMudW51c2VkNSkpIHsKIAkJQVRBUklIV19TRVQoQ09ERUMpOwogCQlwcmludGsoIkNPREVDICIpOwogCX0KQEAgLTMxMyw3ICszMDgsNyBAQAogCSAgICAodHRfc2NjX2RtYS5kbWFfY3RybCA9IDB4MDEsICh0dF9zY2NfZG1hLmRtYV9jdHJsICYgMSkgPT0gMSkgJiYKIAkgICAgKHR0X3NjY19kbWEuZG1hX2N0cmwgPSAweDAwLCAodHRfc2NjX2RtYS5kbWFfY3RybCAmIDEpID09IDApCiAjZWxzZQotCSAgICAhTUFDSF9JU19NRURVU0EgJiYgIU1BQ0hfSVNfSEFERVMKKwkgICAgIU1BQ0hfSVNfTUVEVVNBCiAjZW5kaWYKIAkgICAgKSB7CiAJCUFUQVJJSFdfU0VUKFNDQ19ETUEpOwpAQCAtMzI3LDEwICszMjIsNyBAQAogCQlBVEFSSUhXX1NFVChTVF9FU0NDKTsKIAkJcHJpbnRrKCJTVF9FU0NDICIpOwogCX0KLQlpZiAoTUFDSF9JU19IQURFUykgewotCQlBVEFSSUhXX1NFVChWTUUpOwotCQlwcmludGsoIlZNRSAiKTsKLQl9IGVsc2UgaWYgKGh3cmVnX3ByZXNlbnQoJnR0X3NjdS5zeXNfbWFzaykpIHsKKwlpZiAoaHdyZWdfcHJlc2VudCgmdHRfc2N1LnN5c19tYXNrKSkgewogCQlBVEFSSUhXX1NFVChTQ1UpOwogCQkvKiBBc3N1bWUgYSBWTUUgYnVzIGlmIHRoZXJlJ3MgYSBTQ1UgKi8KIAkJQVRBUklIV19TRVQoVk1FKTsKQEAgLTM0MCw3ICszMzIsNyBAQAogCQlBVEFSSUhXX1NFVChBTkFMT0dfSk9ZKTsKIAkJcHJpbnRrKCJBTkFMT0dfSk9ZICIpOwogCX0KLQlpZiAoIU1BQ0hfSVNfSEFERVMgJiYgaHdyZWdfcHJlc2VudChibGl0dGVyLmhhbGZ0b25lKSkgeworCWlmIChod3JlZ19wcmVzZW50KGJsaXR0ZXIuaGFsZnRvbmUpKSB7CiAJCUFUQVJJSFdfU0VUKEJMSVRURVIpOwogCQlwcmludGsoIkJMSVRURVIgIik7CiAJfQpAQCAtMzQ5LDggKzM0MSw3IEBACiAJCXByaW50aygiSURFICIpOwogCX0KICNpZiAxIC8qIFRoaXMgbWF5YmUgd3JvbmcgKi8KLQlpZiAoIU1BQ0hfSVNfTUVEVVNBICYmICFNQUNIX0lTX0hBREVTICYmCi0JICAgIGh3cmVnX3ByZXNlbnQoJnR0X21pY3Jvd2lyZS5kYXRhKSAmJgorCWlmICghTUFDSF9JU19NRURVU0EgJiYgaHdyZWdfcHJlc2VudCgmdHRfbWljcm93aXJlLmRhdGEpICYmCiAJICAgIGh3cmVnX3ByZXNlbnQoJnR0X21pY3Jvd2lyZS5tYXNrKSAmJgogCSAgICAodHRfbWljcm93aXJlLm1hc2sgPSAweDdmZiwKIAkgICAgIHVkZWxheSgxKSwKQEAgLTM2OSwxOSArMzYwLDE4IEBACiAJCW1hY2hfaHdjbGsgPSBhdGFyaV90dF9od2NsazsKIAkJbWFjaF9zZXRfY2xvY2tfbW1zcyA9IGF0YXJpX3R0X3NldF9jbG9ja19tbXNzOwogCX0KLQlpZiAoIU1BQ0hfSVNfSEFERVMgJiYgaHdyZWdfcHJlc2VudCgmbXN0ZV9ydGMuc2VjX29uZXMpKSB7CisJaWYgKGh3cmVnX3ByZXNlbnQoJm1zdGVfcnRjLnNlY19vbmVzKSkgewogCQlBVEFSSUhXX1NFVChNU1RFX0NMSyk7CiAJCXByaW50aygiTVNURV9DTEsgIik7CiAJCW1hY2hfaHdjbGsgPSBhdGFyaV9tc3RlX2h3Y2xrOwogCQltYWNoX3NldF9jbG9ja19tbXNzID0gYXRhcmlfbXN0ZV9zZXRfY2xvY2tfbW1zczsKIAl9Ci0JaWYgKCFNQUNIX0lTX01FRFVTQSAmJiAhTUFDSF9JU19IQURFUyAmJgotCSAgICBod3JlZ19wcmVzZW50KCZkbWFfd2QuZmRjX3NwZWVkKSAmJgorCWlmICghTUFDSF9JU19NRURVU0EgJiYgaHdyZWdfcHJlc2VudCgmZG1hX3dkLmZkY19zcGVlZCkgJiYKIAkgICAgaHdyZWdfd3JpdGUoJmRtYV93ZC5mZGNfc3BlZWQsIDApKSB7CiAJCUFUQVJJSFdfU0VUKEZEQ1NQRUVEKTsKIAkJcHJpbnRrKCJGRENfU1BFRUQgIik7CiAJfQotCWlmICghTUFDSF9JU19IQURFUyAmJiAhQVRBUklIV19QUkVTRU5UKFNUX1NDU0kpKSB7CisJaWYgKCFBVEFSSUhXX1BSRVNFTlQoU1RfU0NTSSkpIHsKIAkJQVRBUklIV19TRVQoQUNTSSk7CiAJCXByaW50aygiQUNTSSAiKTsKIAl9CkBAIC00NDksNyArNDM5LDcgQEAKIAkgKiAweEZGeHh4eHh4IC0+IDB4MDB4eHh4eHgsIHNvIHRoYXQgdGhlIGZpcnN0IDE2TUIgaXMgYWNjZXNzaWJsZQogCSAqIGluIHRoZSBsYXN0IDE2TUIgb2YgdGhlIGFkZHJlc3Mgc3BhY2UuCiAJICovCi0JdG9zX3ZlcnNpb24gPSAoTUFDSF9JU19NRURVU0EgfHwgTUFDSF9JU19IQURFUykgPworCXRvc192ZXJzaW9uID0gKE1BQ0hfSVNfTUVEVVNBKSA/CiAJCQkweGZmZiA6ICoodW5zaWduZWQgc2hvcnQgKikweGZmMDAwMDAyOwogCWF0YXJpX3J0Y195ZWFyX29mZnNldCA9ICh0b3NfdmVyc2lvbiA8IDB4MzA2KSA/IDcwIDogNjg7CiB9CkBAIC01MTEsOCArNTAxLDcgQEAKIAkgKiBPbiB0aGUgTWVkdXNhLCBwaHlzLiAweDQgbWF5IGNvbnRhaW4gZ2FyYmFnZSBiZWNhdXNlIGl0J3Mgbm8KIAkgKiBST00uICBTZWUgYWJvdmUgZm9yIGV4cGxhbmF0aW9uIHdoeSB3ZSBjYW5ub3QgdXNlIFBUT1YoNCkuCiAJICovCi0JcmVzZXRfYWRkciA9IE1BQ0hfSVNfSEFERVMgPyAweDdmZTAwMDMwIDoKLQkJICAgICBNQUNIX0lTX01FRFVTQSB8fCBNQUNIX0lTX0FCNDAgPyAweGUwMDAzMCA6CisJcmVzZXRfYWRkciA9IE1BQ0hfSVNfTUVEVVNBIHx8IE1BQ0hfSVNfQUI0MCA/IDB4ZTAwMDMwIDoKIAkJICAgICAqKHVuc2lnbmVkIGxvbmcgKikgMHhmZjAwMDAwNDsKIAogCS8qIHJlc2V0IEFDSUEgZm9yIHN3aXRjaCBvZmYgT3ZlclNjYW4sIGlmIGl0J3MgYWN0aXZlICovCkBAIC02MDYsOCArNTk1LDYgQEAKIAkJaWYgKE1BQ0hfSVNfTUVEVVNBKQogCQkJLyogTWVkdXNhIGhhcyBUVCBfTUNIIGNvb2tpZSAqLwogCQkJc3RyY2F0KG1vZGVsLCAiTWVkdXNhIik7Ci0JCWVsc2UgaWYgKE1BQ0hfSVNfSEFERVMpCi0JCQlzdHJjYXQobW9kZWwsICJIYWRlcyIpOwogCQllbHNlCiAJCQlzdHJjYXQobW9kZWwsICJUVCIpOwogCQlicmVhazsKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9hdGFyaS9oYWRlcy1wY2kuYyBiL2FyY2gvbTY4ay9hdGFyaS9oYWRlcy1wY2kuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmJiYWJjMC4uMDAwMDAwMAotLS0gYS9hcmNoL202OGsvYXRhcmkvaGFkZXMtcGNpLmMKKysrIC9kZXYvbnVsbApAQCAtMSw0NDAgKzAsMCBAQAotLyoKLSAqIGhhZGVzLXBjaS5jIC0gSGFyZHdhcmUgc3BlY2lmaWMgUENJIEJJT1MgZnVuY3Rpb25zIHRoZSBIYWRlcyBBdGFyaSBjbG9uZS4KLSAqCi0gKiBXcml0dGVuIGJ5IFdvdXQgS2xhcmVuLgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+Ci0KLSNpZiAwCi0jIGRlZmluZSBEQkdfREVWUyhhcmdzKQkJcHJpbnRrIGFyZ3MKLSNlbHNlCi0jIGRlZmluZSBEQkdfREVWUyhhcmdzKQotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKENPTkZJR19QQ0kpICYmIGRlZmluZWQoQ09ORklHX0hBREVTKQotCi0jaW5jbHVkZSA8bGludXgvc2xhYi5oPgotI2luY2x1ZGUgPGxpbnV4L21tLmg+Ci0jaW5jbHVkZSA8bGludXgvcGNpLmg+Ci0KLSNpbmNsdWRlIDxhc20vYXRhcmlody5oPgotI2luY2x1ZGUgPGFzbS9hdGFyaWludHMuaD4KLSNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+Ci0jaW5jbHVkZSA8YXNtL3BjaS5oPgotCi0jZGVmaW5lIEhBREVTX01FTV9CQVNFCQkweDgwMDAwMDAwCi0jZGVmaW5lIEhBREVTX01FTV9TSVpFCQkweDIwMDAwMDAwCi0jZGVmaW5lIEhBREVTX0NPTkZJR19CQVNFCTB4QTAwMDAwMDAKLSNkZWZpbmUgSEFERVNfQ09ORklHX1NJWkUJMHgxMDAwMDAwMAotI2RlZmluZSBIQURFU19JT19CQVNFCQkweEIwMDAwMDAwCi0jZGVmaW5lIEhBREVTX0lPX1NJWkUJCTB4MTAwMDAwMDAKLSNkZWZpbmUgSEFERVNfVklSVF9JT19TSVpFCTB4MDAwMTAwMDAJLyogT25seSA2NGsgaXMgcmVtYXBwZWQgYW5kIGFjdHVhbGx5IHVzZWQuICovCi0KLSNkZWZpbmUgTl9TTE9UUwkJCQk0CQkJLyogTnVtYmVyIG9mIFBDSSBzbG90cy4gKi8KLQotc3RhdGljIGNvbnN0IGNoYXIgcGNpX21lbV9uYW1lW10gPSAiUENJIG1lbW9yeSBzcGFjZSI7Ci1zdGF0aWMgY29uc3QgY2hhciBwY2lfaW9fbmFtZVtdID0gIlBDSSBJL08gc3BhY2UiOwotc3RhdGljIGNvbnN0IGNoYXIgcGNpX2NvbmZpZ19uYW1lW10gPSAiUENJIGNvbmZpZyBzcGFjZSI7Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgY29uZmlnX3NwYWNlID0gewotICAgIC5uYW1lID0gcGNpX2NvbmZpZ19uYW1lLAotICAgIC5zdGFydCA9IEhBREVTX0NPTkZJR19CQVNFLAotICAgIC5lbmQgPSBIQURFU19DT05GSUdfQkFTRSArIEhBREVTX0NPTkZJR19TSVpFIC0gMQotfTsKLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgaW9fc3BhY2UgPSB7Ci0gICAgLm5hbWUgPSBwY2lfaW9fbmFtZSwKLSAgICAuc3RhcnQgPSBIQURFU19JT19CQVNFLAotICAgIC5lbmQgPSBIQURFU19JT19CQVNFICsgSEFERVNfSU9fU0laRSAtIDEKLX07Ci0KLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBsb25nIHBjaV9jb25mX2Jhc2VfcGh5c1tdID0gewotICAgIDB4QTAwODAwMDAsIDB4QTAwNDAwMDAsIDB4QTAwMjAwMDAsIDB4QTAwMTAwMDAKLX07Ci1zdGF0aWMgdW5zaWduZWQgbG9uZyBwY2lfY29uZl9iYXNlX3ZpcnRbTl9TTE9UU107Ci1zdGF0aWMgdW5zaWduZWQgbG9uZyBwY2lfaW9fYmFzZV92aXJ0OwotCi0vKgotICogc3RhdGljIHZvaWQgKm1rX2NvbmZfYWRkcih1bnNpZ25lZCBjaGFyIGJ1cywgdW5zaWduZWQgY2hhciBkZXZpY2VfZm4sCi0gKgkJCSAgICAgdW5zaWduZWQgY2hhciB3aGVyZSkKLSAqCi0gKiBDYWxjdWxhdGUgdGhlIGFkZHJlc3Mgb2YgdGhlIFBDSSBjb25maWd1cmF0aW9uIGFyZWEgb2YgdGhlIGdpdmVuCi0gKiBkZXZpY2UuCi0gKgotICogQlVHOiBib2FyZHMgd2l0aCBtdWx0aXBsZSBmdW5jdGlvbnMgYXJlIHByb2JhYmx5IG5vdCBjb3JyZWN0bHkKLSAqIHN1cHBvcnRlZC4KLSAqLwotCi1zdGF0aWMgdm9pZCAqbWtfY29uZl9hZGRyKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGludCB3aGVyZSkKLXsKLQlpbnQgZGV2aWNlID0gZGV2LT5kZXZmbiA+PiAzLCBmdW5jdGlvbiA9IGRldi0+ZGV2Zm4gJiA3OwotCXZvaWQgKnJlc3VsdDsKLQotCURCR19ERVZTKCgibWtfY29uZl9hZGRyKGJ1cz0lZCAsZGV2aWNlX2ZuPTB4JXgsIHdoZXJlPTB4JXgsIHBjaV9hZGRyPTB4JXApXG4iLAotCQkgIGRldi0+YnVzLT5udW1iZXIsIGRldi0+ZGV2Zm4sIHdoZXJlLCBwY2lfYWRkcikpOwotCi0JaWYgKGRldmljZSA+IDMpCi0JewotCQlEQkdfREVWUygoIm1rX2NvbmZfYWRkcjogZGV2aWNlICglZCkgPiAzLCByZXR1cm5pbmcgTlVMTFxuIiwgZGV2aWNlKSk7Ci0JCXJldHVybiBOVUxMOwotCX0KLQotCWlmIChkZXYtPmJ1cy0+bnVtYmVyICE9IDApCi0JewotCQlEQkdfREVWUygoIm1rX2NvbmZfYWRkcjogYnVzICglZCkgPiAwLCByZXR1cm5pbmcgTlVMTFxuIiwgZGV2aWNlKSk7Ci0JCXJldHVybiBOVUxMOwotCX0KLQotCXJlc3VsdCA9ICh2b2lkICopIChwY2lfY29uZl9iYXNlX3ZpcnRbZGV2aWNlXSB8IChmdW5jdGlvbiA8PCA4KSB8ICh3aGVyZSkpOwotCURCR19ERVZTKCgibWtfY29uZl9hZGRyOiByZXR1cm5pbmcgcGNpX2FkZHIgMHglbHhcbiIsICh1bnNpZ25lZCBsb25nKSByZXN1bHQpKTsKLQlyZXR1cm4gcmVzdWx0OwotfQotCi1zdGF0aWMgaW50IGhhZGVzX3JlYWRfY29uZmlnX2J5dGUoc3RydWN0IHBjaV9kZXYgKmRldiwgaW50IHdoZXJlLCB1OCAqdmFsdWUpCi17Ci0Jdm9sYXRpbGUgdW5zaWduZWQgY2hhciAqcGNpX2FkZHI7Ci0KLQkqdmFsdWUgPSAweGZmOwotCi0JaWYgKChwY2lfYWRkciA9ICh1bnNpZ25lZCBjaGFyICopIG1rX2NvbmZfYWRkcihkZXYsIHdoZXJlKSkgPT0gTlVMTCkKLQkJcmV0dXJuIFBDSUJJT1NfREVWSUNFX05PVF9GT1VORDsKLQotCSp2YWx1ZSA9ICpwY2lfYWRkcjsKLQotCXJldHVybiBQQ0lCSU9TX1NVQ0NFU1NGVUw7Ci19Ci0KLXN0YXRpYyBpbnQgaGFkZXNfcmVhZF9jb25maWdfd29yZChzdHJ1Y3QgcGNpX2RldiAqZGV2LCBpbnQgd2hlcmUsIHUxNiAqdmFsdWUpCi17Ci0Jdm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgKnBjaV9hZGRyOwotCi0JKnZhbHVlID0gMHhmZmZmOwotCi0JaWYgKHdoZXJlICYgMHgxKQotCQlyZXR1cm4gUENJQklPU19CQURfUkVHSVNURVJfTlVNQkVSOwotCi0JaWYgKChwY2lfYWRkciA9ICh1bnNpZ25lZCBzaG9ydCAqKSBta19jb25mX2FkZHIoZGV2LCB3aGVyZSkpID09IE5VTEwpCi0JCXJldHVybiBQQ0lCSU9TX0RFVklDRV9OT1RfRk9VTkQ7Ci0KLQkqdmFsdWUgPSBsZTE2X3RvX2NwdSgqcGNpX2FkZHIpOwotCi0JcmV0dXJuIFBDSUJJT1NfU1VDQ0VTU0ZVTDsKLX0KLQotc3RhdGljIGludCBoYWRlc19yZWFkX2NvbmZpZ19kd29yZChzdHJ1Y3QgcGNpX2RldiAqZGV2LCBpbnQgd2hlcmUsIHUzMiAqdmFsdWUpCi17Ci0Jdm9sYXRpbGUgdW5zaWduZWQgaW50ICpwY2lfYWRkcjsKLQl1bnNpZ25lZCBjaGFyIGhlYWRlcl90eXBlOwotCWludCByZXN1bHQ7Ci0KLQkqdmFsdWUgPSAweGZmZmZmZmZmOwotCi0JaWYgKHdoZXJlICYgMHgzKQotCQlyZXR1cm4gUENJQklPU19CQURfUkVHSVNURVJfTlVNQkVSOwotCi0JaWYgKChwY2lfYWRkciA9ICh1bnNpZ25lZCBpbnQgKikgbWtfY29uZl9hZGRyKGRldiwgd2hlcmUpKSA9PSBOVUxMKQotCQlyZXR1cm4gUENJQklPU19ERVZJQ0VfTk9UX0ZPVU5EOwotCi0JKnZhbHVlID0gbGUzMl90b19jcHUoKnBjaV9hZGRyKTsKLQotCS8qCi0JICogQ2hlY2sgaWYgdGhlIHZhbHVlIGlzIGFuIGFkZHJlc3Mgb24gdGhlIGJ1cy4gSWYgdHJ1ZSwgYWRkIHRoZQotCSAqIGJhc2UgYWRkcmVzcyBvZiB0aGUgUENJIG1lbW9yeSBvciBQQ0kgSS9PIGFyZWEgb24gdGhlIEhhZGVzLgotCSAqLwotCi0JaWYgKChyZXN1bHQgPSBoYWRlc19yZWFkX2NvbmZpZ19ieXRlKGRldiwgUENJX0hFQURFUl9UWVBFLAotCQkJCQkgICAgICZoZWFkZXJfdHlwZSkpICE9IFBDSUJJT1NfU1VDQ0VTU0ZVTCkKLQkJcmV0dXJuIHJlc3VsdDsKLQotCWlmICgoKHdoZXJlID49IFBDSV9CQVNFX0FERFJFU1NfMCkgJiYgKHdoZXJlIDw9IFBDSV9CQVNFX0FERFJFU1NfMSkpIHx8Ci0JICAgICgoaGVhZGVyX3R5cGUgIT0gUENJX0hFQURFUl9UWVBFX0JSSURHRSkgJiYgKCh3aGVyZSA+PSBQQ0lfQkFTRV9BRERSRVNTXzIpICYmCi0JCQkJCQkJICh3aGVyZSA8PSBQQ0lfQkFTRV9BRERSRVNTXzUpKSkpCi0JewotCQlpZiAoKCp2YWx1ZSAmIFBDSV9CQVNFX0FERFJFU1NfU1BBQ0UpID09IFBDSV9CQVNFX0FERFJFU1NfU1BBQ0VfSU8pCi0JCXsKLQkJCS8qCi0JCQkgKiBCYXNlIGFkZHJlc3MgcmVnaXN0ZXIgdGhhdCBjb250YWlucyBhbiBJL08gYWRkcmVzcy4gSWYgdGhlCi0JCQkgKiBhZGRyZXNzIGlzIHZhbGlkIG9uIHRoZSBIYWRlcyAoMCA8PSAqdmFsdWUgPCBIQURFU19WSVJUX0lPX1NJWkUpLAotCQkJICogYWRkICdwY2lfaW9fYmFzZV92aXJ0JyB0byB0aGUgdmFsdWUuCi0JCQkgKi8KLQotCQkJaWYgKCp2YWx1ZSA8IEhBREVTX1ZJUlRfSU9fU0laRSkKLQkJCQkqdmFsdWUgKz0gcGNpX2lvX2Jhc2VfdmlydDsKLQkJfQotCQllbHNlCi0JCXsKLQkJCS8qCi0JCQkgKiBCYXNlIGFkZHJlc3MgcmVnaXN0ZXIgdGhhdCBjb250YWlucyBhbiBtZW1vcnkgYWRkcmVzcy4gSWYgdGhlCi0JCQkgKiBhZGRyZXNzIGlzIHZhbGlkIG9uIHRoZSBIYWRlcyAoMCA8PSAqdmFsdWUgPCBIQURFU19NRU1fU0laRSksCi0JCQkgKiBhZGQgSEFERVNfTUVNX0JBU0UgdG8gdGhlIHZhbHVlLgotCQkJICovCi0KLQkJCWlmICgqdmFsdWUgPT0gMCkKLQkJCXsKLQkJCQkvKgotCQkJCSAqIEJhc2UgYWRkcmVzcyBpcyAwLiBUZXN0IGlmIHRoaXMgYmFzZQotCQkJCSAqIGFkZHJlc3MgcmVnaXN0ZXIgaXMgdXNlZC4KLQkJCQkgKi8KLQotCQkJCSpwY2lfYWRkciA9IDB4ZmZmZmZmZmY7Ci0JCQkJaWYgKCpwY2lfYWRkciAhPSAwKQotCQkJCXsKLQkJCQkJKnBjaV9hZGRyID0gKnZhbHVlOwotCQkJCQlpZiAoKnZhbHVlIDwgSEFERVNfTUVNX1NJWkUpCi0JCQkJCQkqdmFsdWUgKz0gSEFERVNfTUVNX0JBU0U7Ci0JCQkJfQotCQkJfQotCQkJZWxzZQotCQkJewotCQkJCWlmICgqdmFsdWUgPCBIQURFU19NRU1fU0laRSkKLQkJCQkJKnZhbHVlICs9IEhBREVTX01FTV9CQVNFOwotCQkJfQotCQl9Ci0JfQotCi0JcmV0dXJuIFBDSUJJT1NfU1VDQ0VTU0ZVTDsKLX0KLQotc3RhdGljIGludCBoYWRlc193cml0ZV9jb25maWdfYnl0ZShzdHJ1Y3QgcGNpX2RldiAqZGV2LCBpbnQgd2hlcmUsIHU4IHZhbHVlKQotewotCXZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKnBjaV9hZGRyOwotCi0JaWYgKChwY2lfYWRkciA9ICh1bnNpZ25lZCBjaGFyICopIG1rX2NvbmZfYWRkcihkZXYsIHdoZXJlKSkgPT0gTlVMTCkKLQkJcmV0dXJuIFBDSUJJT1NfREVWSUNFX05PVF9GT1VORDsKLQotCSpwY2lfYWRkciA9IHZhbHVlOwotCi0JcmV0dXJuIFBDSUJJT1NfU1VDQ0VTU0ZVTDsKLX0KLQotc3RhdGljIGludCBoYWRlc193cml0ZV9jb25maWdfd29yZChzdHJ1Y3QgcGNpX2RldiAqZGV2LCBpbnQgd2hlcmUsIHUxNiB2YWx1ZSkKLXsKLQl2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqcGNpX2FkZHI7Ci0KLQlpZiAoKHBjaV9hZGRyID0gKHVuc2lnbmVkIHNob3J0ICopIG1rX2NvbmZfYWRkcihkZXYsIHdoZXJlKSkgPT0gTlVMTCkKLQkJcmV0dXJuIFBDSUJJT1NfREVWSUNFX05PVF9GT1VORDsKLQotCSpwY2lfYWRkciA9IGNwdV90b19sZTE2KHZhbHVlKTsKLQotCXJldHVybiBQQ0lCSU9TX1NVQ0NFU1NGVUw7Ci19Ci0KLXN0YXRpYyBpbnQgaGFkZXNfd3JpdGVfY29uZmlnX2R3b3JkKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGludCB3aGVyZSwgdTMyIHZhbHVlKQotewotCXZvbGF0aWxlIHVuc2lnbmVkIGludCAqcGNpX2FkZHI7Ci0JdW5zaWduZWQgY2hhciBoZWFkZXJfdHlwZTsKLQlpbnQgcmVzdWx0OwotCi0JaWYgKChwY2lfYWRkciA9ICh1bnNpZ25lZCBpbnQgKikgbWtfY29uZl9hZGRyKGRldiwgd2hlcmUpKSA9PSBOVUxMKQotCQlyZXR1cm4gUENJQklPU19ERVZJQ0VfTk9UX0ZPVU5EOwotCi0JLyoKLQkgKiBDaGVjayBpZiB0aGUgdmFsdWUgaXMgYW4gYWRkcmVzcyBvbiB0aGUgYnVzLiBJZiB0cnVlLCBzdWJ0cmFjdCB0aGUKLQkgKiBiYXNlIGFkZHJlc3Mgb2YgdGhlIFBDSSBtZW1vcnkgb3IgUENJIEkvTyBhcmVhIG9uIHRoZSBIYWRlcy4KLQkgKi8KLQotCWlmICgocmVzdWx0ID0gaGFkZXNfcmVhZF9jb25maWdfYnl0ZShkZXYsIFBDSV9IRUFERVJfVFlQRSwKLQkJCQkJICAgICAmaGVhZGVyX3R5cGUpKSAhPSBQQ0lCSU9TX1NVQ0NFU1NGVUwpCi0JCXJldHVybiByZXN1bHQ7Ci0KLQlpZiAoKCh3aGVyZSA+PSBQQ0lfQkFTRV9BRERSRVNTXzApICYmICh3aGVyZSA8PSBQQ0lfQkFTRV9BRERSRVNTXzEpKSB8fAotCSAgICAoKGhlYWRlcl90eXBlICE9IFBDSV9IRUFERVJfVFlQRV9CUklER0UpICYmICgod2hlcmUgPj0gUENJX0JBU0VfQUREUkVTU18yKSAmJgotCQkJCQkJCSAod2hlcmUgPD0gUENJX0JBU0VfQUREUkVTU181KSkpKQotCXsKLQkJaWYgKCh2YWx1ZSAmIFBDSV9CQVNFX0FERFJFU1NfU1BBQ0UpID09Ci0JCSAgICBQQ0lfQkFTRV9BRERSRVNTX1NQQUNFX0lPKQotCQl7Ci0JCQkvKgotCQkJICogSS9PIGFkZHJlc3MuIENoZWNrIGlmIHRoZSBhZGRyZXNzIGlzIHZhbGlkIGFkZHJlc3Mgb24KLQkJCSAqIHRoZSBIYWRlcyAocGNpX2lvX2Jhc2VfdmlydCA8PSB2YWx1ZSA8IHBjaV9pb19iYXNlX3ZpcnQgKwotCQkJICogSEFERVNfVklSVF9JT19TSVpFKSBvciBpZiB0aGUgdmFsdWUgaXMgMHhmZmZmZmZmZi4gSWYgbm90Ci0JCQkgKiB0cnVlIGRvIG5vdCB3cml0ZSB0aGUgYmFzZSBhZGRyZXNzIHJlZ2lzdGVyLiBJZiBpdCBpcyBhCi0JCQkgKiB2YWxpZCBiYXNlIGFkZHJlc3Mgc3VidHJhY3QgJ3BjaV9pb19iYXNlX3ZpcnQnIGZyb20gdGhlIHZhbHVlLgotCQkJICovCi0KLQkJCWlmICgodmFsdWUgPj0gcGNpX2lvX2Jhc2VfdmlydCkgJiYgKHZhbHVlIDwgKHBjaV9pb19iYXNlX3ZpcnQgKwotCQkJCQkJCQkJCQkJCQkgSEFERVNfVklSVF9JT19TSVpFKSkpCi0JCQkJdmFsdWUgLT0gcGNpX2lvX2Jhc2VfdmlydDsKLQkJCWVsc2UKLQkJCXsKLQkJCQlpZiAodmFsdWUgIT0gMHhmZmZmZmZmZikKLQkJCQkJcmV0dXJuIFBDSUJJT1NfU0VUX0ZBSUxFRDsKLQkJCX0KLQkJfQotCQllbHNlCi0JCXsKLQkJCS8qCi0JCQkgKiBNZW1vcnkgYWRkcmVzcy4gQ2hlY2sgaWYgdGhlIGFkZHJlc3MgaXMgdmFsaWQgYWRkcmVzcyBvbgotCQkJICogdGhlIEhhZGVzIChIQURFU19NRU1fQkFTRSA8PSB2YWx1ZSA8IEhBREVTX01FTV9CQVNFICsgSEFERVNfTUVNX1NJWkUpIG9yCi0JCQkgKiBpZiB0aGUgdmFsdWUgaXMgMHhmZmZmZmZmZi4gSWYgbm90IHRydWUgZG8gbm90IHdyaXRlCi0JCQkgKiB0aGUgYmFzZSBhZGRyZXNzIHJlZ2lzdGVyLiBJZiBpdCBpcyBhIHZhbGlkIGJhc2UgYWRkcmVzcwotCQkJICogc3VidHJhY3QgSEFERVNfTUVNX0JBU0UgZnJvbSB0aGUgdmFsdWUuCi0JCQkgKi8KLQotCQkJaWYgKCh2YWx1ZSA+PSBIQURFU19NRU1fQkFTRSkgJiYgKHZhbHVlIDwgKEhBREVTX01FTV9CQVNFICsgSEFERVNfTUVNX1NJWkUpKSkKLQkJCQl2YWx1ZSAtPSBIQURFU19NRU1fQkFTRTsKLQkJCWVsc2UKLQkJCXsKLQkJCQlpZiAodmFsdWUgIT0gMHhmZmZmZmZmZikKLQkJCQkJcmV0dXJuIFBDSUJJT1NfU0VUX0ZBSUxFRDsKLQkJCX0KLQkJfQotCX0KLQotCSpwY2lfYWRkciA9IGNwdV90b19sZTMyKHZhbHVlKTsKLQotCXJldHVybiBQQ0lCSU9TX1NVQ0NFU1NGVUw7Ci19Ci0KLS8qCi0gKiBzdGF0aWMgaW5saW5lIHZvaWQgaGFkZXNfZml4dXAodm9pZCkKLSAqCi0gKiBBc3NpZ24gSVJRIG51bWJlcnMgYXMgdXNlZCBieSBMaW51eCB0byB0aGUgaW50ZXJydXB0IHBpbnMKLSAqIG9mIHRoZSBQQ0kgY2FyZHMuCi0gKi8KLQotc3RhdGljIHZvaWQgX19pbml0IGhhZGVzX2ZpeHVwKGludCBwY2lfbW9kaWZ5KQotewotCWNoYXIgaXJxX3RhYls0XSA9IHsKLQkJWzBdID0gSVJRX1RUX01GUF9JTzAsCQkvKiBTbG90IDAuICovCi0JCVsxXSA9IElSUV9UVF9NRlBfSU8xLAkJLyogU2xvdCAxLiAqLwotCQlbMl0gPSBJUlFfVFRfTUZQX1NDQywJCS8qIFNsb3QgMi4gKi8KLQkJWzNdID0gSVJRX1RUX01GUF9TQ1NJRE1BCS8qIFNsb3QgMy4gKi8KLQl9OwotCXN0cnVjdCBwY2lfZGV2ICpkZXYgPSBOVUxMOwotCXVuc2lnbmVkIGNoYXIgc2xvdDsKLQotCS8qCi0JICogR28gdGhyb3VnaCBhbGwgZGV2aWNlcywgZml4aW5nIHVwIGlycXMgYXMgd2Ugc2VlIGZpdDoKLQkgKi8KLQotCXdoaWxlICgoZGV2ID0gcGNpX2dldF9kZXZpY2UoUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgZGV2KSkgIT0gTlVMTCkKLQl7Ci0JCWlmIChkZXYtPmNsYXNzID4+IDE2ICE9IFBDSV9CQVNFX0NMQVNTX0JSSURHRSkKLQkJewotCQkJc2xvdCA9IFBDSV9TTE9UKGRldi0+ZGV2Zm4pOwkvKiBEZXRlcm1pbmUgc2xvdCBudW1iZXIuICovCi0JCQlkZXYtPmlycSA9IGlycV90YWJbc2xvdF07Ci0JCQlpZiAocGNpX21vZGlmeSkKLQkJCQlwY2lfd3JpdGVfY29uZmlnX2J5dGUoZGV2LCBQQ0lfSU5URVJSVVBUX0xJTkUsIGRldi0+aXJxKTsKLQkJfQotCX0KLX0KLQotLyoKLSAqIHN0YXRpYyB2b2lkIGhhZGVzX2NvbmZfZGV2aWNlKHN0cnVjdCBwY2lfZGV2ICpkZXYpCi0gKgotICogTWFjaGluZSBkZXBlbmRlbnQgQ29uZmlndXJlIHRoZSBnaXZlbiBkZXZpY2UuCi0gKgotICogUGFyYW1ldGVyczoKLSAqCi0gKiBkZXYJCS0gdGhlIHBjaSBkZXZpY2UuCi0gKi8KLQotc3RhdGljIHZvaWQgX19pbml0IGhhZGVzX2NvbmZfZGV2aWNlKHN0cnVjdCBwY2lfZGV2ICpkZXYpCi17Ci0JcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGRldiwgUENJX0NBQ0hFX0xJTkVfU0laRSwgMCk7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgcGNpX29wcyBoYWRlc19wY2lfb3BzID0gewotCS5yZWFkX2J5dGUgPQloYWRlc19yZWFkX2NvbmZpZ19ieXRlLAotCS5yZWFkX3dvcmQgPQloYWRlc19yZWFkX2NvbmZpZ193b3JkLAotCS5yZWFkX2R3b3JkID0JaGFkZXNfcmVhZF9jb25maWdfZHdvcmQsCi0JLndyaXRlX2J5dGUgPQloYWRlc193cml0ZV9jb25maWdfYnl0ZSwKLQkud3JpdGVfd29yZCA9CWhhZGVzX3dyaXRlX2NvbmZpZ193b3JkLAotCS53cml0ZV9kd29yZCA9CWhhZGVzX3dyaXRlX2NvbmZpZ19kd29yZAotfTsKLQotLyoKLSAqIHN0cnVjdCBwY2lfYnVzX2luZm8gKmluaXRfaGFkZXNfcGNpKHZvaWQpCi0gKgotICogTWFjaGluZSBzcGVjaWZpYyBpbml0aWFsaXNhdGlvbjoKLSAqCi0gKiAtIEFsbG9jYXRlIGFuZCBpbml0aWFsaXNlIGEgJ3BjaV9idXNfaW5mbycgc3RydWN0dXJlCi0gKiAtIEluaXRpYWxpc2UgaGFyZHdhcmUKLSAqCi0gKiBSZXN1bHQ6IHBvaW50ZXIgdG8gJ3BjaV9idXNfaW5mbycgc3RydWN0dXJlLgotICovCi0KLXN0cnVjdCBwY2lfYnVzX2luZm8gKiBfX2luaXQgaW5pdF9oYWRlc19wY2kodm9pZCkKLXsKLQlzdHJ1Y3QgcGNpX2J1c19pbmZvICpidXM7Ci0JaW50IGk7Ci0KLQkvKgotCSAqIFJlbWFwIEkvTyBhbmQgY29uZmlndXJhdGlvbiBzcGFjZS4KLQkgKi8KLQotCXBjaV9pb19iYXNlX3ZpcnQgPSAodW5zaWduZWQgbG9uZykgaW9yZW1hcChIQURFU19JT19CQVNFLCBIQURFU19WSVJUX0lPX1NJWkUpOwotCi0JZm9yIChpID0gMDsgaSA8IE5fU0xPVFM7IGkrKykKLQkJcGNpX2NvbmZfYmFzZV92aXJ0W2ldID0gKHVuc2lnbmVkIGxvbmcpIGlvcmVtYXAocGNpX2NvbmZfYmFzZV9waHlzW2ldLCAweDEwMDAwKTsKLQotCS8qCi0JICogQWxsb2NhdGUgbWVtb3J5IGZvciBidXMgaW5mbyBzdHJ1Y3R1cmUuCi0JICovCi0KLQlidXMgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgcGNpX2J1c19pbmZvKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKHVubGlrZWx5KCFidXMpKQotCQlnb3RvIGlvdW5tYXBfYmFzZV92aXJ0OwotCi0JLyoKLQkgKiBDbGFpbSByZXNvdXJjZXMuIFRoZSBtNjhrIGhhcyBubyBzZXBhcmF0ZSBJL08gc3BhY2UsIGJvdGgKLQkgKiBQQ0kgbWVtb3J5IHNwYWNlIGFuZCBQQ0kgSS9PIHNwYWNlIGFyZSBpbiBtZW1vcnkgc3BhY2UuIFRoZXJlZm9yZQotCSAqIHRoZSBJL08gcmVzb3VyY2VzIGFyZSByZXF1ZXN0ZWQgaW4gbWVtb3J5IHNwYWNlIGFzIHdlbGwuCi0JICovCi0KLQlpZiAodW5saWtlbHkocmVxdWVzdF9yZXNvdXJjZSgmaW9tZW1fcmVzb3VyY2UsICZjb25maWdfc3BhY2UpICE9IDApKQotCQlnb3RvIGZyZWVfYnVzOwotCi0JaWYgKHVubGlrZWx5KHJlcXVlc3RfcmVzb3VyY2UoJmlvbWVtX3Jlc291cmNlLCAmaW9fc3BhY2UpICE9IDApKQotCQlnb3RvIHJlbGVhc2VfY29uZmlnX3NwYWNlOwotCi0JYnVzLT5tZW1fc3BhY2Uuc3RhcnQgPSBIQURFU19NRU1fQkFTRTsKLQlidXMtPm1lbV9zcGFjZS5lbmQgPSBIQURFU19NRU1fQkFTRSArIEhBREVTX01FTV9TSVpFIC0gMTsKLQlidXMtPm1lbV9zcGFjZS5uYW1lID0gcGNpX21lbV9uYW1lOwotI2lmIDEKLQlpZiAodW5saWtlbHkocmVxdWVzdF9yZXNvdXJjZSgmaW9tZW1fcmVzb3VyY2UsICZidXMtPm1lbV9zcGFjZSkgIT0gMCkpCi0JCWdvdG8gcmVsZWFzZV9pb19zcGFjZTsKLSNlbmRpZgotCWJ1cy0+aW9fc3BhY2Uuc3RhcnQgPSBwY2lfaW9fYmFzZV92aXJ0OwotCWJ1cy0+aW9fc3BhY2UuZW5kID0gcGNpX2lvX2Jhc2VfdmlydCArIEhBREVTX1ZJUlRfSU9fU0laRSAtIDE7Ci0JYnVzLT5pb19zcGFjZS5uYW1lID0gcGNpX2lvX25hbWU7Ci0jaWYgMQotCWlmICh1bmxpa2VseShyZXF1ZXN0X3Jlc291cmNlKCZpb3BvcnRfcmVzb3VyY2UsICZidXMtPmlvX3NwYWNlKSAhPSAwKSkKLQkJZ290byByZWxlYXNlX2J1c19tZW1fc3BhY2U7Ci0jZW5kaWYKLQkvKgotCSAqIFNldCBoYXJkd2FyZSBkZXBlbmRlbnQgZnVuY3Rpb25zLgotCSAqLwotCi0JYnVzLT5tNjhrX3BjaV9vcHMgPSAmaGFkZXNfcGNpX29wczsKLQlidXMtPmZpeHVwID0gaGFkZXNfZml4dXA7Ci0JYnVzLT5jb25mX2RldmljZSA9IGhhZGVzX2NvbmZfZGV2aWNlOwotCi0JLyoKLQkgKiBTZWxlY3QgaGlnaCB0byBsb3cgZWRnZSBmb3IgUENJIGludGVycnVwdHMuCi0JICovCi0KLQl0dF9tZnAuYWN0aXZlX2VkZ2UgJj0gfjB4Mjc7Ci0KLQlyZXR1cm4gYnVzOwotCi1yZWxlYXNlX2J1c19tZW1fc3BhY2U6Ci0JcmVsZWFzZV9yZXNvdXJjZSgmYnVzLT5tZW1fc3BhY2UpOwotcmVsZWFzZV9pb19zcGFjZToKLQlyZWxlYXNlX3Jlc291cmNlKCZpb19zcGFjZSk7Ci1yZWxlYXNlX2NvbmZpZ19zcGFjZToKLQlyZWxlYXNlX3Jlc291cmNlKCZjb25maWdfc3BhY2UpOwotZnJlZV9idXM6Ci0Ja2ZyZWUoYnVzKTsKLWlvdW5tYXBfYmFzZV92aXJ0OgotCWlvdW5tYXAoKHZvaWQgKilwY2lfaW9fYmFzZV92aXJ0KTsKLQotCWZvciAoaSA9IDA7IGkgPCBOX1NMT1RTOyBpKyspCi0JCWlvdW5tYXAoKHZvaWQgKilwY2lfY29uZl9iYXNlX3ZpcnRbaV0pOwotCi0JcmV0dXJuIE5VTEw7Ci19Ci0jZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9hdGFyaS90aW1lLmMgYi9hcmNoL202OGsvYXRhcmkvdGltZS5jCmluZGV4IGUwZDNjOGIuLjFlZGRlMjcgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9hdGFyaS90aW1lLmMKKysrIGIvYXJjaC9tNjhrL2F0YXJpL3RpbWUuYwpAQCAtMjAsNiArMjAsOSBAQAogCiAjaW5jbHVkZSA8YXNtL2F0YXJpaW50cy5oPgogCitERUZJTkVfU1BJTkxPQ0socnRjX2xvY2spOworRVhQT1JUX1NZTUJPTF9HUEwocnRjX2xvY2spOworCiB2b2lkIF9faW5pdAogYXRhcmlfc2NoZWRfaW5pdChpcnFfaGFuZGxlcl90IHRpbWVyX3JvdXRpbmUpCiB7CkBAIC0xOTEsMTMgKzE5NCwxNCBAQAogICAgICAgICB9CiAKICAgICAgICAgaWYgKCEoY3RybCAmIFJUQ19ETV9CSU5BUlkpKSB7Ci0gICAgICAgICAgICBCSU5fVE9fQkNEKHNlYyk7Ci0gICAgICAgICAgICBCSU5fVE9fQkNEKG1pbik7Ci0gICAgICAgICAgICBCSU5fVE9fQkNEKGhvdXIpOwotICAgICAgICAgICAgQklOX1RPX0JDRChkYXkpOwotICAgICAgICAgICAgQklOX1RPX0JDRChtb24pOwotICAgICAgICAgICAgQklOX1RPX0JDRCh5ZWFyKTsKLSAgICAgICAgICAgIGlmICh3ZGF5ID49IDApIEJJTl9UT19CQ0Qod2RheSk7CisJICAgIHNlYyA9IGJpbjJiY2Qoc2VjKTsKKwkgICAgbWluID0gYmluMmJjZChtaW4pOworCSAgICBob3VyID0gYmluMmJjZChob3VyKTsKKwkgICAgZGF5ID0gYmluMmJjZChkYXkpOworCSAgICBtb24gPSBiaW4yYmNkKG1vbik7CisJICAgIHllYXIgPSBiaW4yYmNkKHllYXIpOworCSAgICBpZiAod2RheSA+PSAwKQorCQl3ZGF5ID0gYmluMmJjZCh3ZGF5KTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMjUyLDEzICsyNTYsMTMgQEAKIAl9CiAKIAlpZiAoIShjdHJsICYgUlRDX0RNX0JJTkFSWSkpIHsKLSAgICAgICAgICAgIEJDRF9UT19CSU4oc2VjKTsKLSAgICAgICAgICAgIEJDRF9UT19CSU4obWluKTsKLSAgICAgICAgICAgIEJDRF9UT19CSU4oaG91cik7Ci0gICAgICAgICAgICBCQ0RfVE9fQklOKGRheSk7Ci0gICAgICAgICAgICBCQ0RfVE9fQklOKG1vbik7Ci0gICAgICAgICAgICBCQ0RfVE9fQklOKHllYXIpOwotICAgICAgICAgICAgQkNEX1RPX0JJTih3ZGF5KTsKKwkgICAgc2VjID0gYmNkMmJpbihzZWMpOworCSAgICBtaW4gPSBiY2QyYmluKG1pbik7CisJICAgIGhvdXIgPSBiY2QyYmluKGhvdXIpOworCSAgICBkYXkgPSBiY2QyYmluKGRheSk7CisJICAgIG1vbiA9IGJjZDJiaW4obW9uKTsKKwkgICAgeWVhciA9IGJjZDJiaW4oeWVhcik7CisJICAgIHdkYXkgPSBiY2QyYmluKHdkYXkpOwogICAgICAgICB9CiAKICAgICAgICAgaWYgKCEoY3RybCAmIFJUQ18yNEgpKSB7CkBAIC0zMTgsNyArMzIyLDcgQEAKIAogICAgIHJ0Y19taW51dGVzID0gUlRDX1JFQUQgKFJUQ19NSU5VVEVTKTsKICAgICBpZiAoIShzYXZlX2NvbnRyb2wgJiBSVENfRE1fQklOQVJZKSkKLSAgICAgICAgQkNEX1RPX0JJTiAocnRjX21pbnV0ZXMpOworCXJ0Y19taW51dGVzID0gYmNkMmJpbihydGNfbWludXRlcyk7CiAKICAgICAvKiBTaW5jZSB3ZSdyZSBvbmx5IGFkanVzdGluZyBtaW51dGVzIGFuZCBzZWNvbmRzLCBkb24ndCBpbnRlcmZlcmUKICAgICAgICB3aXRoIGhvdXIgb3ZlcmZsb3cuICBUaGlzIGF2b2lkcyBtZXNzaW5nIHdpdGggdW5rbm93biB0aW1lIHpvbmVzCkBAIC0zMjksOCArMzMzLDggQEAKICAgICAgICAgewogICAgICAgICAgICAgaWYgKCEoc2F2ZV9jb250cm9sICYgUlRDX0RNX0JJTkFSWSkpCiAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBCSU5fVE9fQkNEIChyZWFsX3NlY29uZHMpOwotICAgICAgICAgICAgICAgICAgICBCSU5fVE9fQkNEIChyZWFsX21pbnV0ZXMpOworCQkgICAgcmVhbF9zZWNvbmRzID0gYmluMmJjZChyZWFsX3NlY29uZHMpOworCQkgICAgcmVhbF9taW51dGVzID0gYmluMmJjZChyZWFsX21pbnV0ZXMpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIFJUQ19XUklURSAoUlRDX1NFQ09ORFMsIHJlYWxfc2Vjb25kcyk7CiAgICAgICAgICAgICBSVENfV1JJVEUgKFJUQ19NSU5VVEVTLCByZWFsX21pbnV0ZXMpOwpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2J2bWU2MDAwL2NvbmZpZy5jIGIvYXJjaC9tNjhrL2J2bWU2MDAwL2NvbmZpZy5jCmluZGV4IDk0MzNhODguLjY1YzkyMDQgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9idm1lNjAwMC9jb25maWcuYworKysgYi9hcmNoL202OGsvYnZtZTYwMDAvY29uZmlnLmMKQEAgLTI1LDYgKzI1LDcgQEAKICNpbmNsdWRlIDxsaW51eC9nZW5oZC5oPgogI2luY2x1ZGUgPGxpbnV4L3J0Yy5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2JjZC5oPgogCiAjaW5jbHVkZSA8YXNtL2Jvb3RpbmZvLmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgpAQCAtNDYsOSArNDcsNiBAQAogZXh0ZXJuIHZvaWQgYnZtZTYwMDBfd2FpdGJ1dCh2b2lkKTsKIHZvaWQgYnZtZTYwMDBfc2V0X3ZlY3RvcnMgKHZvaWQpOwogCi1zdGF0aWMgdW5zaWduZWQgY2hhciBiY2QyYmluICh1bnNpZ25lZCBjaGFyIGIpOwotc3RhdGljIHVuc2lnbmVkIGNoYXIgYmluMmJjZCAodW5zaWduZWQgY2hhciBiKTsKLQogLyogU2F2ZSB0aWNrIGhhbmRsZXIgcm91dGluZSBwb2ludGVyLCB3aWxsIHBvaW50IHRvIGRvX3RpbWVyKCkgaW4KICAqIGtlcm5lbC9zY2hlZC5jLCBjYWxsZWQgdmlhIGJ2bWU2MDAwX3Byb2Nlc3NfaW50KCkgKi8KIApAQCAtMjY0LDE3ICsyNjIsNiBAQAogICAgIHJldHVybiB2OwogfQogCi1zdGF0aWMgdW5zaWduZWQgY2hhciBiY2QyYmluICh1bnNpZ25lZCBjaGFyIGIpCi17Ci0JcmV0dXJuICgoYj4+NCkqMTAgKyAoYiYxNSkpOwotfQotCi1zdGF0aWMgdW5zaWduZWQgY2hhciBiaW4yYmNkICh1bnNpZ25lZCBjaGFyIGIpCi17Ci0JcmV0dXJuICgoKGIvMTApKjE2KSArIChiJTEwKSk7Ci19Ci0KLQogLyoKICAqIExvb2tzIGxpa2Ugb3AgaXMgbm9uLXplcm8gZm9yIHNldHRpbmcgdGhlIGNsb2NrLCBhbmQgemVybyBmb3IKICAqIHJlYWRpbmcgdGhlIGNsb2NrLgpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2J2bWU2MDAwL3J0Yy5jIGIvYXJjaC9tNjhrL2J2bWU2MDAwL3J0Yy5jCmluZGV4IGU4YWMzZjcuLmM1MGJlYzggMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9idm1lNjAwMC9ydGMuYworKysgYi9hcmNoL202OGsvYnZtZTYwMDAvcnRjLmMKQEAgLTE4LDcgKzE4LDYgQEAKICNpbmNsdWRlIDxsaW51eC9wb2xsLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvbWMxNDY4MThydGMuaD4JLyogRm9yIHN0cnVjdCBydGNfdGltZSBhbmQgaW9jdGxzLCBldGMgKi8KLSNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L2JjZC5oPgogI2luY2x1ZGUgPGFzbS9idm1lNjAwMGh3Lmg+CiAKQEAgLTU3LDE2ICs1NiwxNiBAQAogCQlydGMtPm1zciA9IDB4NDA7CiAJCW1lbXNldCgmd3RpbWUsIDAsIHNpemVvZihzdHJ1Y3QgcnRjX3RpbWUpKTsKIAkJZG8gewotCQkJd3RpbWUudG1fc2VjID0gIEJDRDJCSU4ocnRjLT5iY2Rfc2VjKTsKLQkJCXd0aW1lLnRtX21pbiA9ICBCQ0QyQklOKHJ0Yy0+YmNkX21pbik7Ci0JCQl3dGltZS50bV9ob3VyID0gQkNEMkJJTihydGMtPmJjZF9ocik7Ci0JCQl3dGltZS50bV9tZGF5ID0gIEJDRDJCSU4ocnRjLT5iY2RfZG9tKTsKLQkJCXd0aW1lLnRtX21vbiA9ICBCQ0QyQklOKHJ0Yy0+YmNkX210aCktMTsKLQkJCXd0aW1lLnRtX3llYXIgPSBCQ0QyQklOKHJ0Yy0+YmNkX3llYXIpOworCQkJd3RpbWUudG1fc2VjID0gIGJjZDJiaW4ocnRjLT5iY2Rfc2VjKTsKKwkJCXd0aW1lLnRtX21pbiA9ICBiY2QyYmluKHJ0Yy0+YmNkX21pbik7CisJCQl3dGltZS50bV9ob3VyID0gYmNkMmJpbihydGMtPmJjZF9ocik7CisJCQl3dGltZS50bV9tZGF5ID0gIGJjZDJiaW4ocnRjLT5iY2RfZG9tKTsKKwkJCXd0aW1lLnRtX21vbiA9ICBiY2QyYmluKHJ0Yy0+YmNkX210aCktMTsKKwkJCXd0aW1lLnRtX3llYXIgPSBiY2QyYmluKHJ0Yy0+YmNkX3llYXIpOwogCQkJaWYgKHd0aW1lLnRtX3llYXIgPCA3MCkKIAkJCQl3dGltZS50bV95ZWFyICs9IDEwMDsKLQkJCXd0aW1lLnRtX3dkYXkgPSBCQ0QyQklOKHJ0Yy0+YmNkX2RvdyktMTsKLQkJfSB3aGlsZSAod3RpbWUudG1fc2VjICE9IEJDRDJCSU4ocnRjLT5iY2Rfc2VjKSk7CisJCQl3dGltZS50bV93ZGF5ID0gYmNkMmJpbihydGMtPmJjZF9kb3cpLTE7CisJCX0gd2hpbGUgKHd0aW1lLnRtX3NlYyAhPSBiY2QyYmluKHJ0Yy0+YmNkX3NlYykpOwogCQlydGMtPm1zciA9IG1zcjsKIAkJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogCQlyZXR1cm4gY29weV90b191c2VyKGFyZ3AsICZ3dGltZSwgc2l6ZW9mIHd0aW1lKSA/CkBAIC0xMTQsMTQgKzExMywxNCBAQAogCiAJCXJ0Yy0+dDBjcl9ydG1yID0geXJzJTQ7CiAJCXJ0Yy0+YmNkX3Rlbm1zID0gMDsKLQkJcnRjLT5iY2Rfc2VjICAgPSBCSU4yQkNEKHNlYyk7Ci0JCXJ0Yy0+YmNkX21pbiAgID0gQklOMkJDRChtaW4pOwotCQlydGMtPmJjZF9ociAgICA9IEJJTjJCQ0QoaHJzKTsKLQkJcnRjLT5iY2RfZG9tICAgPSBCSU4yQkNEKGRheSk7Ci0JCXJ0Yy0+YmNkX210aCAgID0gQklOMkJDRChtb24pOwotCQlydGMtPmJjZF95ZWFyICA9IEJJTjJCQ0QoeXJzJTEwMCk7CisJCXJ0Yy0+YmNkX3NlYyAgID0gYmluMmJjZChzZWMpOworCQlydGMtPmJjZF9taW4gICA9IGJpbjJiY2QobWluKTsKKwkJcnRjLT5iY2RfaHIgICAgPSBiaW4yYmNkKGhycyk7CisJCXJ0Yy0+YmNkX2RvbSAgID0gYmluMmJjZChkYXkpOworCQlydGMtPmJjZF9tdGggICA9IGJpbjJiY2QobW9uKTsKKwkJcnRjLT5iY2RfeWVhciAgPSBiaW4yYmNkKHlycyUxMDApOwogCQlpZiAocnRjX3RtLnRtX3dkYXkgPj0gMCkKLQkJCXJ0Yy0+YmNkX2RvdyA9IEJJTjJCQ0QocnRjX3RtLnRtX3dkYXkrMSk7CisJCQlydGMtPmJjZF9kb3cgPSBiaW4yYmNkKHJ0Y190bS50bV93ZGF5KzEpOwogCQlydGMtPnQwY3JfcnRtciA9IHlycyU0IHwgMHgwODsKIAogCQlydGMtPm1zciA9IG1zcjsKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9rZXJuZWwvTWFrZWZpbGUgYi9hcmNoL202OGsva2VybmVsL01ha2VmaWxlCmluZGV4IDNhN2Y2MjIuLjU1ZDVkNmIgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9rZXJuZWwvTWFrZWZpbGUKKysrIGIvYXJjaC9tNjhrL2tlcm5lbC9NYWtlZmlsZQpAQCAtMTQsNSArMTQsNCBAQAogCiBkZXZyZXMteSA9IC4uLy4uLy4uL2tlcm5lbC9pcnEvZGV2cmVzLm8KIAotb2JqLSQoQ09ORklHX1BDSSkJKz0gYmlvczMyLm8KIG9iai15JChDT05GSUdfTU1VX1NVTjMpICs9IGRtYS5vCSMgbm8sIGl0J3Mgbm90IGEgdHlwbwpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2tlcm5lbC9iaW9zMzIuYyBiL2FyY2gvbTY4ay9rZXJuZWwvYmlvczMyLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFmMTcwYzJiLi4wMDAwMDAwCi0tLSBhL2FyY2gvbTY4ay9rZXJuZWwvYmlvczMyLmMKKysrIC9kZXYvbnVsbApAQCAtMSw1MTQgKzAsMCBAQAotLyoKLSAqIGJpb3MzMi5jIC0gUENJIEJJT1MgZnVuY3Rpb25zIGZvciBtNjhrIHN5c3RlbXMuCi0gKgotICogV3JpdHRlbiBieSBXb3V0IEtsYXJlbi4KLSAqCi0gKiBCYXNlZCBvbiB0aGUgREVDIEFscGhhIGJpb3MzMi5jIGJ5IERhdmUgUnVzbGluZyBhbmQgRGF2aWQgTW9zYmVyZ2VyLgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0KLSNpZiAwCi0jIGRlZmluZSBEQkdfREVWUyhhcmdzKQkJcHJpbnRrIGFyZ3MKLSNlbHNlCi0jIGRlZmluZSBEQkdfREVWUyhhcmdzKQotI2VuZGlmCi0KLSNpZmRlZiBDT05GSUdfUENJCi0KLS8qCi0gKiBQQ0kgc3VwcG9ydCBmb3IgTGludXgvbTY4ay4gQ3VycmVudGx5IG9ubHkgdGhlIEhhZGVzIGlzIHN1cHBvcnRlZC4KLSAqCi0gKiBUaGUgc3VwcG9ydCBmb3IgUENJIGJyaWRnZXMgaW4gdGhlIERFQyBBbHBoYSB2ZXJzaW9uIGhhcwotICogYmVlbiByZW1vdmVkIGluIHRoaXMgdmVyc2lvbi4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgvcGNpLmg+Ci0jaW5jbHVkZSA8bGludXgvc2xhYi5oPgotI2luY2x1ZGUgPGxpbnV4L21tLmg+Ci0KLSNpbmNsdWRlIDxhc20vaW8uaD4KLSNpbmNsdWRlIDxhc20vcGNpLmg+Ci0jaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KLQotI2RlZmluZSBLQgkJMTAyNAotI2RlZmluZSBNQgkJKDEwMjQqS0IpCi0jZGVmaW5lIEdCCQkoMTAyNCpNQikKLQotI2RlZmluZSBNQUpPUl9SRVYJMAotI2RlZmluZSBNSU5PUl9SRVYJNQotCi0vKgotICogQWxpZ24gVkFMIHRvIEFMSUdOLCB3aGljaCBtdXN0IGJlIGEgcG93ZXIgb2YgdHdvLgotICovCi0KLSNkZWZpbmUgQUxJR04odmFsLGFsaWduKQkoKCh2YWwpICsgKChhbGlnbikgLSAxKSkgJiB+KChhbGlnbikgLSAxKSkKLQotLyoKLSAqIE9mZnNldHMgcmVsYXRpdmUgdG8gdGhlIEkvTyBhbmQgbWVtb3J5IGJhc2UgYWRkcmVzc2VzIGZyb20gd2hlcmUgcmVzb3VyY2VzCi0gKiBhcmUgYWxsb2NhdGVkLgotICovCi0KLSNkZWZpbmUgSU9fQUxMT0NfT0ZGU0VUCQkweDAwMDA0MDAwCi0jZGVmaW5lIE1FTV9BTExPQ19PRkZTRVQJMHgwNDAwMDAwMAotCi0vKgotICogRGVjbGFyYXRpb25zIG9mIGhhcmR3YXJlIHNwZWNpZmljIGluaXRpYWxpc2F0aW9uIGZ1bmN0aW9ucy4KLSAqLwotCi1leHRlcm4gc3RydWN0IHBjaV9idXNfaW5mbyAqaW5pdF9oYWRlc19wY2kodm9pZCk7Ci0KLS8qCi0gKiBCdXMgaW5mbyBzdHJ1Y3R1cmUgb2YgdGhlIFBDSSBidXMuIEEgcG9pbnRlciB0byB0aGlzIHN0cnVjdHVyZSBpcwotICogcHV0IGluIHRoZSBzeXNkYXRhIG1lbWJlciBvZiB0aGUgcGNpX2J1cyBzdHJ1Y3R1cmUuCi0gKi8KLQotc3RhdGljIHN0cnVjdCBwY2lfYnVzX2luZm8gKmJ1c19pbmZvOwotCi1zdGF0aWMgaW50IHBjaV9tb2RpZnkgPSAxOwkJLyogSWYgc2V0LCBsYXlvdXQgdGhlIFBDSSBidXMgb3Vyc2VsZi4gKi8KLXN0YXRpYyBpbnQgc2tpcF92Z2E7CQkJLyogSWYgc2V0IGRvIG5vdCBtb2RpZnkgYmFzZSBhZGRyZXNzZXMKLQkJCQkJICAgb2YgdmdhIGNhcmRzLiovCi1zdGF0aWMgaW50IGRpc2FibGVfcGNpX2J1cnN0OwkJLyogSWYgc2V0IGRvIG5vdCBhbGxvdyBQQ0kgYnVyc3RzLiAqLwotCi1zdGF0aWMgdW5zaWduZWQgaW50IGlvX2Jhc2U7Ci1zdGF0aWMgdW5zaWduZWQgaW50IG1lbV9iYXNlOwotCi0vKgotICogc3RhdGljIHZvaWQgZGlzYWJsZV9kZXYoc3RydWN0IHBjaV9kZXYgKmRldikKLSAqCi0gKiBEaXNhYmxlIFBDSSBkZXZpY2UgREVWIHNvIHRoYXQgaXQgZG9lcyBub3QgcmVzcG9uZCB0byBJL08gb3IgbWVtb3J5Ci0gKiBhY2Nlc3Nlcy4KLSAqCi0gKiBQYXJhbWV0ZXJzOgotICoKLSAqIGRldgktIGRldmljZSB0byBkaXNhYmxlLgotICovCi0KLXN0YXRpYyB2b2lkIF9faW5pdCBkaXNhYmxlX2RldihzdHJ1Y3QgcGNpX2RldiAqZGV2KQotewotCXVuc2lnbmVkIHNob3J0IGNtZDsKLQotCWlmICgoKGRldi0+Y2xhc3MgPj4gOCA9PSBQQ0lfQ0xBU1NfTk9UX0RFRklORURfVkdBKSB8fAotCSAgICAgKGRldi0+Y2xhc3MgPj4gOCA9PSBQQ0lfQ0xBU1NfRElTUExBWV9WR0EpIHx8Ci0JICAgICAoZGV2LT5jbGFzcyA+PiA4ID09IFBDSV9DTEFTU19ESVNQTEFZX1hHQSkpICYmIHNraXBfdmdhKQotCQlyZXR1cm47Ci0KLQlwY2lfcmVhZF9jb25maWdfd29yZChkZXYsIFBDSV9DT01NQU5ELCAmY21kKTsKLQotCWNtZCAmPSAoflBDSV9DT01NQU5EX0lPICYgflBDSV9DT01NQU5EX01FTU9SWSAmIH5QQ0lfQ09NTUFORF9NQVNURVIpOwotCXBjaV93cml0ZV9jb25maWdfd29yZChkZXYsIFBDSV9DT01NQU5ELCBjbWQpOwotfQotCi0vKgotICogc3RhdGljIHZvaWQgbGF5b3V0X2RldihzdHJ1Y3QgcGNpX2RldiAqZGV2KQotICoKLSAqIExheW91dCBtZW1vcnkgYW5kIEkvTyBmb3IgYSBkZXZpY2UuCi0gKgotICogUGFyYW1ldGVyczoKLSAqCi0gKiBkZXZpY2UJLSBkZXZpY2UgdG8gbGF5b3V0IG1lbW9yeSBhbmQgSS9PIGZvci4KLSAqLwotCi1zdGF0aWMgdm9pZCBfX2luaXQgbGF5b3V0X2RldihzdHJ1Y3QgcGNpX2RldiAqZGV2KQotewotCXVuc2lnbmVkIHNob3J0IGNtZDsKLQl1bnNpZ25lZCBpbnQgYmFzZSwgbWFzaywgc2l6ZSwgcmVnOwotCXVuc2lnbmVkIGludCBhbGlnbnRvOwotCWludCBpOwotCi0JLyoKLQkgKiBTa2lwIHZpZGVvIGNhcmRzIGlmIHJlcXVlc3RlZC4KLQkgKi8KLQotCWlmICgoKGRldi0+Y2xhc3MgPj4gOCA9PSBQQ0lfQ0xBU1NfTk9UX0RFRklORURfVkdBKSB8fAotCSAgICAgKGRldi0+Y2xhc3MgPj4gOCA9PSBQQ0lfQ0xBU1NfRElTUExBWV9WR0EpIHx8Ci0JICAgICAoZGV2LT5jbGFzcyA+PiA4ID09IFBDSV9DTEFTU19ESVNQTEFZX1hHQSkpICYmIHNraXBfdmdhKQotCQlyZXR1cm47Ci0KLQlwY2lfcmVhZF9jb25maWdfd29yZChkZXYsIFBDSV9DT01NQU5ELCAmY21kKTsKLQotCWZvciAocmVnID0gUENJX0JBU0VfQUREUkVTU18wLCBpID0gMDsgcmVnIDw9IFBDSV9CQVNFX0FERFJFU1NfNTsgcmVnICs9IDQsIGkrKykKLQl7Ci0JCS8qCi0JCSAqIEZpZ3VyZSBvdXQgaG93IG11Y2ggc3BhY2UgYW5kIG9mIHdoYXQgdHlwZSB0aGlzCi0JCSAqIGRldmljZSB3YW50cy4KLQkJICovCi0KLQkJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChkZXYsIHJlZywgMHhmZmZmZmZmZik7Ci0JCXBjaV9yZWFkX2NvbmZpZ19kd29yZChkZXYsIHJlZywgJmJhc2UpOwotCi0JCWlmICghYmFzZSkKLQkJewotCQkJLyogdGhpcyBiYXNlLWFkZHJlc3MgcmVnaXN0ZXIgaXMgdW51c2VkICovCi0JCQlkZXYtPnJlc291cmNlW2ldLnN0YXJ0ID0gMDsKLQkJCWRldi0+cmVzb3VyY2VbaV0uZW5kID0gMDsKLQkJCWRldi0+cmVzb3VyY2VbaV0uZmxhZ3MgPSAwOwotCQkJY29udGludWU7Ci0JCX0KLQotCQkvKgotCQkgKiBXZSd2ZSByZWFkIHRoZSBiYXNlIGFkZHJlc3MgcmVnaXN0ZXIgYmFjayBhZnRlcgotCQkgKiB3cml0aW5nIGFsbCBvbmVzIGFuZCBzbyBub3cgd2UgbXVzdCBkZWNvZGUgaXQuCi0JCSAqLwotCi0JCWlmIChiYXNlICYgUENJX0JBU0VfQUREUkVTU19TUEFDRV9JTykKLQkJewotCQkJLyoKLQkJCSAqIEkvTyBzcGFjZSBiYXNlIGFkZHJlc3MgcmVnaXN0ZXIuCi0JCQkgKi8KLQotCQkJY21kIHw9IFBDSV9DT01NQU5EX0lPOwotCi0JCQliYXNlICY9IFBDSV9CQVNFX0FERFJFU1NfSU9fTUFTSzsKLQkJCW1hc2sgPSAofmJhc2UgPDwgMSkgfCAweDE7Ci0JCQlzaXplID0gKG1hc2sgJiBiYXNlKSAmIDB4ZmZmZmZmZmY7Ci0KLQkJCS8qCi0JCQkgKiBBbGlnbiB0byBtdWx0aXBsZSBvZiBzaXplIG9mIG1pbmltdW0gYmFzZS4KLQkJCSAqLwotCi0JCQlhbGlnbnRvID0gbWF4X3QodW5zaWduZWQgaW50LCAweDA0MCwgc2l6ZSk7Ci0JCQliYXNlID0gQUxJR04oaW9fYmFzZSwgYWxpZ250byk7Ci0JCQlpb19iYXNlID0gYmFzZSArIHNpemU7Ci0JCQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKGRldiwgcmVnLCBiYXNlIHwgUENJX0JBU0VfQUREUkVTU19TUEFDRV9JTyk7Ci0KLQkJCWRldi0+cmVzb3VyY2VbaV0uc3RhcnQgPSBiYXNlOwotCQkJZGV2LT5yZXNvdXJjZVtpXS5lbmQgPSBkZXYtPnJlc291cmNlW2ldLnN0YXJ0ICsgc2l6ZSAtIDE7Ci0JCQlkZXYtPnJlc291cmNlW2ldLmZsYWdzID0gSU9SRVNPVVJDRV9JTyB8IFBDSV9CQVNFX0FERFJFU1NfU1BBQ0VfSU87Ci0KLQkJCURCR19ERVZTKCgibGF5b3V0X2RldjogSU8gYWRkcmVzczogJWxYXG4iLCBiYXNlKSk7Ci0JCX0KLQkJZWxzZQotCQl7Ci0JCQl1bnNpZ25lZCBpbnQgdHlwZTsKLQotCQkJLyoKLQkJCSAqIE1lbW9yeSBzcGFjZSBiYXNlIGFkZHJlc3MgcmVnaXN0ZXIuCi0JCQkgKi8KLQotCQkJY21kIHw9IFBDSV9DT01NQU5EX01FTU9SWTsKLQkJCXR5cGUgPSBiYXNlICYgUENJX0JBU0VfQUREUkVTU19NRU1fVFlQRV9NQVNLOwotCQkJYmFzZSAmPSBQQ0lfQkFTRV9BRERSRVNTX01FTV9NQVNLOwotCQkJbWFzayA9ICh+YmFzZSA8PCAxKSB8IDB4MTsKLQkJCXNpemUgPSAobWFzayAmIGJhc2UpICYgMHhmZmZmZmZmZjsKLQkJCXN3aXRjaCAodHlwZSkKLQkJCXsKLQkJCWNhc2UgUENJX0JBU0VfQUREUkVTU19NRU1fVFlQRV8zMjoKLQkJCWNhc2UgUENJX0JBU0VfQUREUkVTU19NRU1fVFlQRV82NDoKLQkJCQlicmVhazsKLQotCQkJY2FzZSBQQ0lfQkFTRV9BRERSRVNTX01FTV9UWVBFXzFNOgotCQkJCXByaW50aygiYmlvczMyIFdBUk5JTkc6IHNsb3QgJWQsIGZ1bmN0aW9uICVkICIKLQkJCQkgICAgICAgInJlcXVlc3RzIG1lbW9yeSBiZWxvdyAxTUItLS1kb24ndCAiCi0JCQkJICAgICAgICJrbm93IGhvdyB0byBkbyB0aGF0LlxuIiwKLQkJCQkgICAgICAgUENJX1NMT1QoZGV2LT5kZXZmbiksCi0JCQkJICAgICAgIFBDSV9GVU5DKGRldi0+ZGV2Zm4pKTsKLQkJCQljb250aW51ZTsKLQkJCX0KLQotCQkJLyoKLQkJCSAqIEFsaWduIHRvIG11bHRpcGxlIG9mIHNpemUgb2YgbWluaW11bSBiYXNlLgotCQkJICovCi0KLQkJCWFsaWdudG8gPSBtYXhfdCh1bnNpZ25lZCBpbnQsIDB4MTAwMCwgc2l6ZSk7Ci0JCQliYXNlID0gQUxJR04obWVtX2Jhc2UsIGFsaWdudG8pOwotCQkJbWVtX2Jhc2UgPSBiYXNlICsgc2l6ZTsKLQkJCXBjaV93cml0ZV9jb25maWdfZHdvcmQoZGV2LCByZWcsIGJhc2UpOwotCi0JCQlkZXYtPnJlc291cmNlW2ldLnN0YXJ0ID0gYmFzZTsKLQkJCWRldi0+cmVzb3VyY2VbaV0uZW5kID0gZGV2LT5yZXNvdXJjZVtpXS5zdGFydCArIHNpemUgLSAxOwotCQkJZGV2LT5yZXNvdXJjZVtpXS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNOwotCi0JCQlpZiAodHlwZSA9PSBQQ0lfQkFTRV9BRERSRVNTX01FTV9UWVBFXzY0KQotCQkJewotCQkJCS8qCi0JCQkJICogNjQtYml0IGFkZHJlc3MsIHNldCB0aGUgaGlnaGVzdCAzMiBiaXRzCi0JCQkJICogdG8gemVyby4KLQkJCQkgKi8KLQotCQkJCXJlZyArPSA0OwotCQkJCXBjaV93cml0ZV9jb25maWdfZHdvcmQoZGV2LCByZWcsIDApOwotCi0JCQkJaSsrOwotCQkJCWRldi0+cmVzb3VyY2VbaV0uc3RhcnQgPSAwOwotCQkJCWRldi0+cmVzb3VyY2VbaV0uZW5kID0gMDsKLQkJCQlkZXYtPnJlc291cmNlW2ldLmZsYWdzID0gMDsKLQkJCX0KLQkJfQotCX0KLQotCS8qCi0JICogRW5hYmxlIGRldmljZToKLQkgKi8KLQotCWlmIChkZXYtPmNsYXNzID4+IDggPT0gUENJX0NMQVNTX05PVF9ERUZJTkVEIHx8Ci0JICAgIGRldi0+Y2xhc3MgPj4gOCA9PSBQQ0lfQ0xBU1NfTk9UX0RFRklORURfVkdBIHx8Ci0JICAgIGRldi0+Y2xhc3MgPj4gOCA9PSBQQ0lfQ0xBU1NfRElTUExBWV9WR0EgfHwKLQkgICAgZGV2LT5jbGFzcyA+PiA4ID09IFBDSV9DTEFTU19ESVNQTEFZX1hHQSkKLQl7Ci0JCS8qCi0JCSAqIEFsbCBvZiB0aGVzZSAobWF5KSBoYXZlIEkvTyBzY2F0dGVyZWQgYWxsIGFyb3VuZAotCQkgKiBhbmQgbWF5IG5vdCB1c2UgaS9vLWJhc2UgYWRkcmVzcyByZWdpc3RlcnMgYXQgYWxsLgotCQkgKiBTbyB3ZSBqdXN0IGhhdmUgdG8gYWx3YXlzIGVuYWJsZSBJL08gdG8gdGhlc2UKLQkJICogZGV2aWNlcy4KLQkJICovCi0JCWNtZCB8PSBQQ0lfQ09NTUFORF9JTzsKLQl9Ci0KLQlwY2lfd3JpdGVfY29uZmlnX3dvcmQoZGV2LCBQQ0lfQ09NTUFORCwgY21kIHwgUENJX0NPTU1BTkRfTUFTVEVSKTsKLQotCXBjaV93cml0ZV9jb25maWdfYnl0ZShkZXYsIFBDSV9MQVRFTkNZX1RJTUVSLCAoZGlzYWJsZV9wY2lfYnVyc3QpID8gMCA6IDMyKTsKLQotCWlmIChidXNfaW5mbyAhPSBOVUxMKQotCQlidXNfaW5mby0+Y29uZl9kZXZpY2UoZGV2KTsJLyogTWFjaGluZSBkZXBlbmRlbnQgY29uZmlndXJhdGlvbi4gKi8KLQotCURCR19ERVZTKCgibGF5b3V0X2RldjogYnVzICVkICBzbG90IDB4JXggIFZJRCAweCV4ICBESUQgMHgleCAgY2xhc3MgMHgleFxuIiwKLQkJICBkZXYtPmJ1cy0+bnVtYmVyLCBQQ0lfU0xPVChkZXYtPmRldmZuKSwgZGV2LT52ZW5kb3IsIGRldi0+ZGV2aWNlLCBkZXYtPmNsYXNzKSk7Ci19Ci0KLS8qCi0gKiBzdGF0aWMgdm9pZCBsYXlvdXRfYnVzKHN0cnVjdCBwY2lfYnVzICpidXMpCi0gKgotICogTGF5b3V0IG1lbW9yeSBhbmQgSS9PIGZvciBhbGwgZGV2aWNlcyBvbiB0aGUgZ2l2ZW4gYnVzLgotICoKLSAqIFBhcmFtZXRlcnM6Ci0gKgotICogYnVzCS0gYnVzLgotICovCi0KLXN0YXRpYyB2b2lkIF9faW5pdCBsYXlvdXRfYnVzKHN0cnVjdCBwY2lfYnVzICpidXMpCi17Ci0JdW5zaWduZWQgaW50IGJpbywgYm1lbTsKLQlzdHJ1Y3QgcGNpX2RldiAqZGV2OwotCi0JREJHX0RFVlMoKCJsYXlvdXRfYnVzOiBzdGFydGluZyBidXMgJWRcbiIsIGJ1cy0+bnVtYmVyKSk7Ci0KLQlpZiAoIWJ1cy0+ZGV2aWNlcyAmJiAhYnVzLT5jaGlsZHJlbikKLQkJcmV0dXJuOwotCi0JLyoKLQkgKiBBbGlnbiB0aGUgY3VycmVudCBiYXNlcyBvbiBhcHByb3ByaWF0ZSBib3VuZGFyaWVzICg0SyBmb3IKLQkgKiBJTyBhbmQgMU1CIGZvciBtZW1vcnkpLgotCSAqLwotCi0JYmlvID0gaW9fYmFzZSA9IEFMSUdOKGlvX2Jhc2UsIDQqS0IpOwotCWJtZW0gPSBtZW1fYmFzZSA9IEFMSUdOKG1lbV9iYXNlLCAxKk1CKTsKLQotCS8qCi0JICogUENJIGRldmljZXMgbWlnaHQgaGF2ZSBiZWVuIHNldHVwIGJ5IGEgUENJIEJJT1MgZW11bGF0aW9uCi0JICogcnVubmluZyB1bmRlciBUT1MuIEluIHRoZXNlIGNhc2VzIHRoZXJlIGlzIGEKLQkgKiB3aW5kb3cgZHVyaW5nIHdoaWNoIHR3byBkZXZpY2VzIG1heSBoYXZlIGFuIG92ZXJsYXBwaW5nCi0JICogYWRkcmVzcyByYW5nZS4gVG8gYXZvaWQgdGhpcyBjYXVzaW5nIHRyb3VibGUsIHdlIGZpcnN0Ci0JICogdHVybiBvZmYgdGhlIEkvTyBhbmQgbWVtb3J5IGFkZHJlc3MgZGVjb2RlcnMgZm9yIGFsbCBQQ0kKLQkgKiBkZXZpY2VzLiAgVGhleSdsbCBiZSByZS1lbmFibGVkIG9ubHkgb25jZSBhbGwgYWRkcmVzcwotCSAqIGRlY29kZXJzIGFyZSBwcm9ncmFtbWVkIGNvbnNpc3RlbnRseS4KLQkgKi8KLQotCURCR19ERVZTKCgibGF5b3V0X2J1czogZGlzYWJsZV9kZXYgZm9yIGJ1cyAlZFxuIiwgYnVzLT5udW1iZXIpKTsKLQotCWZvciAoZGV2ID0gYnVzLT5kZXZpY2VzOyBkZXY7IGRldiA9IGRldi0+c2libGluZykKLQl7Ci0JCWlmICgoZGV2LT5jbGFzcyA+PiAxNiAhPSBQQ0lfQkFTRV9DTEFTU19CUklER0UpIHx8Ci0JCSAgICAoZGV2LT5jbGFzcyA+PiA4ID09IFBDSV9DTEFTU19CUklER0VfUENNQ0lBKSkKLQkJCWRpc2FibGVfZGV2KGRldik7Ci0JfQotCi0JLyoKLQkgKiBBbGxvY2F0ZSBzcGFjZSB0byBlYWNoIGRldmljZToKLQkgKi8KLQotCURCR19ERVZTKCgibGF5b3V0X2J1czogc3RhcnRpbmcgYnVzICVkIGRldmljZXNcbiIsIGJ1cy0+bnVtYmVyKSk7Ci0KLQlmb3IgKGRldiA9IGJ1cy0+ZGV2aWNlczsgZGV2OyBkZXYgPSBkZXYtPnNpYmxpbmcpCi0JewotCQlpZiAoKGRldi0+Y2xhc3MgPj4gMTYgIT0gUENJX0JBU0VfQ0xBU1NfQlJJREdFKSB8fAotCQkgICAgKGRldi0+Y2xhc3MgPj4gOCA9PSBQQ0lfQ0xBU1NfQlJJREdFX1BDTUNJQSkpCi0JCQlsYXlvdXRfZGV2KGRldik7Ci0JfQotCi0JREJHX0RFVlMoKCJsYXlvdXRfYnVzOiBidXMgJWQgZmluaXNoZWRcbiIsIGJ1cy0+bnVtYmVyKSk7Ci19Ci0KLS8qCi0gKiBzdGF0aWMgdm9pZCBwY2liaW9zX2ZpeHVwKHZvaWQpCi0gKgotICogTGF5b3V0IG1lbW9yeSBhbmQgSS9PIG9mIGFsbCBkZXZpY2VzIG9uIHRoZSBQQ0kgYnVzIGlmICdwY2lfbW9kaWZ5JyBpcwotICogdHJ1ZS4gVGhpcyBtaWdodCBiZSBuZWNlc3NhcnkgYmVjYXVzZSBub3QgZXZlcnkgbTY4ayBtYWNoaW5lIHdpdGggYSBQQ0kKLSAqIGJ1cyBoYXMgYSBQQ0kgQklPUy4gVGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgY2FsbGVkIHJpZ2h0IGFmdGVyCi0gKiBwY2lfc2Nhbl9idXMoKSBpbiBwY2liaW9zX2luaXQoKS4KLSAqLwotCi1zdGF0aWMgdm9pZCBfX2luaXQgcGNpYmlvc19maXh1cCh2b2lkKQotewotCWlmIChwY2lfbW9kaWZ5KQotCXsKLQkJLyoKLQkJICogU2V0IGJhc2UgYWRkcmVzc2VzIGZvciBhbGxvY2F0aW9uIG9mIEkvTyBhbmQgbWVtb3J5IHNwYWNlLgotCQkgKi8KLQotCQlpb19iYXNlID0gYnVzX2luZm8tPmlvX3NwYWNlLnN0YXJ0ICsgSU9fQUxMT0NfT0ZGU0VUOwotCQltZW1fYmFzZSA9IGJ1c19pbmZvLT5tZW1fc3BhY2Uuc3RhcnQgKyBNRU1fQUxMT0NfT0ZGU0VUOwotCi0JCS8qCi0JCSAqIFNjYW4gdGhlIHRyZWUsIGFsbG9jYXRpbmcgUENJIG1lbW9yeSBhbmQgSS9PIHNwYWNlLgotCQkgKi8KLQotCQlsYXlvdXRfYnVzKHBjaV9idXNfYihwY2lfcm9vdC5uZXh0KSk7Ci0JfQotCi0JLyoKLQkgKiBGaXggaW50ZXJydXB0IGFzc2lnbm1lbnRzLCBldGMuCi0JICovCi0KLQlidXNfaW5mby0+Zml4dXAocGNpX21vZGlmeSk7Ci19Ci0KLS8qCi0gKiBzdGF0aWMgdm9pZCBwY2liaW9zX2NsYWltX3Jlc291cmNlcyhzdHJ1Y3QgcGNpX2J1cyAqYnVzKQotICoKLSAqIENsYWltIGFsbCByZXNvdXJjZXMgdGhhdCBhcmUgYXNzaWduZWQgdG8gZGV2aWNlcyBvbiB0aGUgZ2l2ZW4gYnVzLgotICoKLSAqIFBhcmFtZXRlcnM6Ci0gKgotICogYnVzCS0gYnVzLgotICovCi0KLXN0YXRpYyB2b2lkIF9faW5pdCBwY2liaW9zX2NsYWltX3Jlc291cmNlcyhzdHJ1Y3QgcGNpX2J1cyAqYnVzKQotewotCXN0cnVjdCBwY2lfZGV2ICpkZXY7Ci0JaW50IGk7Ci0KLQl3aGlsZSAoYnVzKQotCXsKLQkJZm9yIChkZXYgPSBidXMtPmRldmljZXM7IChkZXYgIT0gTlVMTCk7IGRldiA9IGRldi0+c2libGluZykKLQkJewotCQkJZm9yIChpID0gMDsgaSA8IFBDSV9OVU1fUkVTT1VSQ0VTOyBpKyspCi0JCQl7Ci0JCQkJc3RydWN0IHJlc291cmNlICpyID0gJmRldi0+cmVzb3VyY2VbaV07Ci0JCQkJc3RydWN0IHJlc291cmNlICpwcjsKLQkJCQlzdHJ1Y3QgcGNpX2J1c19pbmZvICpidXNfaW5mbyA9IChzdHJ1Y3QgcGNpX2J1c19pbmZvICopIGRldi0+c3lzZGF0YTsKLQotCQkJCWlmICgoci0+c3RhcnQgPT0gMCkgfHwgKHItPnBhcmVudCAhPSBOVUxMKSkKLQkJCQkJY29udGludWU7Ci0jaWYgMQotCQkJCWlmIChyLT5mbGFncyAmIElPUkVTT1VSQ0VfSU8pCi0JCQkJCXByID0gJmJ1c19pbmZvLT5pb19zcGFjZTsKLQkJCQllbHNlCi0JCQkJCXByID0gJmJ1c19pbmZvLT5tZW1fc3BhY2U7Ci0jZWxzZQotCQkJCWlmIChyLT5mbGFncyAmIElPUkVTT1VSQ0VfSU8pCi0JCQkJCXByID0gJmlvcG9ydF9yZXNvdXJjZTsKLQkJCQllbHNlCi0JCQkJCXByID0gJmlvbWVtX3Jlc291cmNlOwotI2VuZGlmCi0JCQkJaWYgKHJlcXVlc3RfcmVzb3VyY2UocHIsIHIpIDwgMCkKLQkJCQl7Ci0JCQkJCXByaW50ayhLRVJOX0VSUiAiUENJOiBBZGRyZXNzIHNwYWNlIGNvbGxpc2lvbiBvbiByZWdpb24gJWQgb2YgZGV2aWNlICVzXG4iLCBpLCBkZXYtPm5hbWUpOwotCQkJCX0KLQkJCX0KLQkJfQotCi0JCWlmIChidXMtPmNoaWxkcmVuKQotCQkJcGNpYmlvc19jbGFpbV9yZXNvdXJjZXMoYnVzLT5jaGlsZHJlbik7Ci0KLQkJYnVzID0gYnVzLT5uZXh0OwotCX0KLX0KLQotLyoKLSAqIGludCBwY2liaW9zX2Fzc2lnbl9yZXNvdXJjZShzdHJ1Y3QgcGNpX2RldiAqZGV2LCBpbnQgaSkKLSAqCi0gKiBBc3NpZ24gYSBuZXcgYWRkcmVzcyB0byBhIFBDSSByZXNvdXJjZS4KLSAqCi0gKiBQYXJhbWV0ZXJzOgotICoKLSAqIGRldgktIGRldmljZS4KLSAqIGkJLSByZXNvdXJjZS4KLSAqCi0gKiBSZXN1bHQ6IDAgaWYgc3VjY2Vzc2Z1bC4KLSAqLwotCi1pbnQgX19pbml0IHBjaWJpb3NfYXNzaWduX3Jlc291cmNlKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGludCBpKQotewotCXN0cnVjdCByZXNvdXJjZSAqciA9ICZkZXYtPnJlc291cmNlW2ldOwotCXN0cnVjdCByZXNvdXJjZSAqcHIgPSBwY2lfZmluZF9wYXJlbnRfcmVzb3VyY2UoZGV2LCByKTsKLQl1bnNpZ25lZCBsb25nIHNpemUgPSByLT5lbmQgKyAxOwotCi0JaWYgKCFwcikKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlpZiAoci0+ZmxhZ3MgJiBJT1JFU09VUkNFX0lPKQotCXsKLQkJaWYgKHNpemUgPiAweDEwMCkKLQkJCXJldHVybiAtRUZCSUc7Ci0KLQkJaWYgKGFsbG9jYXRlX3Jlc291cmNlKHByLCByLCBzaXplLCBidXNfaW5mby0+aW9fc3BhY2Uuc3RhcnQgKwotCQkJCSAgICAgIElPX0FMTE9DX09GRlNFVCwgIGJ1c19pbmZvLT5pb19zcGFjZS5lbmQsIDEwMjQpKQotCQkJcmV0dXJuIC1FQlVTWTsKLQl9Ci0JZWxzZQotCXsKLQkJaWYgKGFsbG9jYXRlX3Jlc291cmNlKHByLCByLCBzaXplLCBidXNfaW5mby0+bWVtX3NwYWNlLnN0YXJ0ICsKLQkJCQkgICAgICBNRU1fQUxMT0NfT0ZGU0VULCBidXNfaW5mby0+bWVtX3NwYWNlLmVuZCwgc2l6ZSkpCi0JCQlyZXR1cm4gLUVCVVNZOwotCX0KLQotCWlmIChpIDwgNikKLQkJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChkZXYsIFBDSV9CQVNFX0FERFJFU1NfMCArIDQgKiBpLCByLT5zdGFydCk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotdm9pZCBfX2luaXQgcGNpYmlvc19maXh1cF9idXMoc3RydWN0IHBjaV9idXMgKmJ1cykKLXsKLQlzdHJ1Y3QgcGNpX2RldiAqZGV2OwotCXZvaWQgKnN5c2RhdGE7Ci0KLQlzeXNkYXRhID0gKGJ1cy0+cGFyZW50KSA/IGJ1cy0+cGFyZW50LT5zeXNkYXRhIDogYnVzLT5zeXNkYXRhOwotCi0JZm9yIChkZXYgPSBidXMtPmRldmljZXM7IChkZXYgIT0gTlVMTCk7IGRldiA9IGRldi0+c2libGluZykKLQkJZGV2LT5zeXNkYXRhID0gc3lzZGF0YTsKLX0KLQotdm9pZCBfX2luaXQgcGNpYmlvc19pbml0KHZvaWQpCi17Ci0JcHJpbnRrKCJMaW51eC9tNjhrIFBDSSBCSU9TMzIgcmV2aXNpb24gJXguJTAyeFxuIiwgTUFKT1JfUkVWLCBNSU5PUl9SRVYpOwotCi0JYnVzX2luZm8gPSBOVUxMOwotI2lmZGVmIENPTkZJR19IQURFUwotCWlmIChNQUNIX0lTX0hBREVTKQotCQlidXNfaW5mbyA9IGluaXRfaGFkZXNfcGNpKCk7Ci0jZW5kaWYKLQlpZiAoYnVzX2luZm8gIT0gTlVMTCkKLQl7Ci0JCXByaW50aygiUENJOiBQcm9iaW5nIFBDSSBoYXJkd2FyZVxuIik7Ci0JCXBjaV9zY2FuX2J1cygwLCBidXNfaW5mby0+bTY4a19wY2lfb3BzLCBidXNfaW5mbyk7Ci0JCXBjaWJpb3NfZml4dXAoKTsKLQkJcGNpYmlvc19jbGFpbV9yZXNvdXJjZXMocGNpX3Jvb3QpOwotCX0KLQllbHNlCi0JCXByaW50aygiUENJOiBObyBQQ0kgYnVzIGRldGVjdGVkXG4iKTsKLX0KLQotY2hhciAqIF9faW5pdCBwY2liaW9zX3NldHVwKGNoYXIgKnN0cikKLXsKLQlpZiAoIXN0cmNtcChzdHIsICJub21vZGlmeSIpKQotCXsKLQkJcGNpX21vZGlmeSA9IDA7Ci0JCXJldHVybiBOVUxMOwotCX0KLQllbHNlIGlmICghc3RyY21wKHN0ciwgInNraXB2Z2EiKSkKLQl7Ci0JCXNraXBfdmdhID0gMTsKLQkJcmV0dXJuIE5VTEw7Ci0JfQotCWVsc2UgaWYgKCFzdHJjbXAoc3RyLCAibm9idXJzdCIpKQotCXsKLQkJZGlzYWJsZV9wY2lfYnVyc3QgPSAxOwotCQlyZXR1cm4gTlVMTDsKLQl9Ci0KLQlyZXR1cm4gc3RyOwotfQotI2VuZGlmIC8qIENPTkZJR19QQ0kgKi8KZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9rZXJuZWwvZG1hLmMgYi9hcmNoL202OGsva2VybmVsL2RtYS5jCmluZGV4IDZmOGMwODAuLjJiYjQyNDUgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9rZXJuZWwvZG1hLmMKKysrIGIvYXJjaC9tNjhrL2tlcm5lbC9kbWEuYwpAQCAtNjYsOCArNjYsOCBAQAogfQogRVhQT1JUX1NZTUJPTChkbWFfZnJlZV9jb2hlcmVudCk7CiAKLWlubGluZSB2b2lkIGRtYV9zeW5jX3NpbmdsZV9mb3JfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKmRldiwgZG1hX2FkZHJfdCBoYW5kbGUsIHNpemVfdCBzaXplLAotCQkJCSAgICAgICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIpCit2b2lkIGRtYV9zeW5jX3NpbmdsZV9mb3JfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKmRldiwgZG1hX2FkZHJfdCBoYW5kbGUsCisJCQkJc2l6ZV90IHNpemUsIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcikKIHsKIAlzd2l0Y2ggKGRpcikgewogCWNhc2UgRE1BX1RPX0RFVklDRToKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9rZXJuZWwvaW50cy5jIGIvYXJjaC9tNjhrL2tlcm5lbC9pbnRzLmMKaW5kZXggZGVkN2RkMi4uN2U4YTBkMyAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL2tlcm5lbC9pbnRzLmMKKysrIGIvYXJjaC9tNjhrL2tlcm5lbC9pbnRzLmMKQEAgLTQyOSw4ICs0MjksOSBAQAogCXJldHVybiAwOwogfQogCisjaWZkZWYgQ09ORklHX1BST0NfRlMKIHZvaWQgaW5pdF9pcnFfcHJvYyh2b2lkKQogewogCS8qIEluc2VydCAvcHJvYy9pcnEgZHJpdmVyIGhlcmUgKi8KIH0KLQorI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL202OGsva2VybmVsL3Byb2Nlc3MuYyBiL2FyY2gvbTY4ay9rZXJuZWwvcHJvY2Vzcy5jCmluZGV4IDc4ODhjZGYuLjMwNDJjMmIgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9rZXJuZWwvcHJvY2Vzcy5jCisrKyBiL2FyY2gvbTY4ay9rZXJuZWwvcHJvY2Vzcy5jCkBAIC03OCw3ICs3OCw3IEBACiBzdGF0aWMgdm9pZCBkZWZhdWx0X2lkbGUodm9pZCkKIHsKIAlpZiAoIW5lZWRfcmVzY2hlZCgpKQotI2lmIGRlZmluZWQoTUFDSF9BVEFSSV9PTkxZKSAmJiAhZGVmaW5lZChDT05GSUdfSEFERVMpCisjaWYgZGVmaW5lZChNQUNIX0FUQVJJX09OTFkpCiAJCS8qIGJsb2NrIG91dCBIU1lOQyBvbiB0aGUgYXRhcmkgKGZhbGNvbikgKi8KIAkJX19hc21fXygic3RvcCAjMHgyMjAwIiA6IDogOiAiY2MiKTsKICNlbHNlCmRpZmYgLS1naXQgYS9hcmNoL202OGsva2VybmVsL3RyYXBzLmMgYi9hcmNoL202OGsva2VybmVsL3RyYXBzLmMKaW5kZXggNzViODM0MC4uNmQ4MTNkZSAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL2tlcm5lbC90cmFwcy5jCisrKyBiL2FyY2gvbTY4ay9rZXJuZWwvdHJhcHMuYwpAQCAtODgzLDggKzg4Myw3IEBACiAJCQlpZiAoaSAlIDUgPT0gMCkKIAkJCQlwcmludGsoIlxuICAgICAgICIpOwogI2VuZGlmCi0JCQlwcmludGsoIiBbPCUwOGx4Pl0iLCBhZGRyKTsKLQkJCXByaW50X3N5bWJvbCgiICVzXG4iLCBhZGRyKTsKKwkJCXByaW50aygiIFs8JTA4bHg+XSAlcFNcbiIsIGFkZHIsICh2b2lkICopYWRkcik7CiAJCQlpKys7CiAJCX0KIAl9CkBAIC05MDAsMTAgKzg5OSw4IEBACiAJaW50IGk7CiAKIAlwcmludF9tb2R1bGVzKCk7Ci0JcHJpbnRrKCJQQzogWzwlMDhseD5dIixyZWdzLT5wYyk7Ci0JcHJpbnRfc3ltYm9sKCIgJXMiLCByZWdzLT5wYyk7Ci0JcHJpbnRrKCJcblNSOiAlMDR4ICBTUDogJXAgIGEyOiAlMDhseFxuIiwKLQkgICAgICAgcmVncy0+c3IsIHJlZ3MsIHJlZ3MtPmEyKTsKKwlwcmludGsoIlBDOiBbPCUwOGx4Pl0gJXBTXG4iLCByZWdzLT5wYywgKHZvaWQgKilyZWdzLT5wYyk7CisJcHJpbnRrKCJTUjogJTA0eCAgU1A6ICVwICBhMjogJTA4bHhcbiIsIHJlZ3MtPnNyLCByZWdzLCByZWdzLT5hMik7CiAJcHJpbnRrKCJkMDogJTA4bHggICAgZDE6ICUwOGx4ICAgIGQyOiAlMDhseCAgICBkMzogJTA4bHhcbiIsCiAJICAgICAgIHJlZ3MtPmQwLCByZWdzLT5kMSwgcmVncy0+ZDIsIHJlZ3MtPmQzKTsKIAlwcmludGsoImQ0OiAlMDhseCAgICBkNTogJTA4bHggICAgYTA6ICUwOGx4ICAgIGExOiAlMDhseFxuIiwKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9rZXJuZWwvdm1saW51eC1zdGQubGRzIGIvYXJjaC9tNjhrL2tlcm5lbC92bWxpbnV4LXN0ZC5sZHMKaW5kZXggOTliMDc4NC4uZjg0NmQ0ZSAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL2tlcm5lbC92bWxpbnV4LXN0ZC5sZHMKKysrIGIvYXJjaC9tNjhrL2tlcm5lbC92bWxpbnV4LXN0ZC5sZHMKQEAgLTM0LDEwICszNCwxMCBAQAogCUNPTlNUUlVDVE9SUwogCX0KIAotICAuYnNzIDogeyAqKC5ic3MpIH0JCS8qIEJTUyAqLwotCiAgIC4gPSBBTElHTigxNik7Ci0gIC5kYXRhLmNhY2hlbGluZV9hbGlnbmVkIDogeyAqKC5kYXRhLmNhY2hlbGluZV9hbGlnbmVkKSB9IDpkYXRhCisgIC5kYXRhLmNhY2hlbGluZV9hbGlnbmVkIDogeyAqKC5kYXRhLmNhY2hlbGluZV9hbGlnbmVkKSB9CisKKyAgLmJzcyA6IHsgKiguYnNzKSB9CQkvKiBCU1MgKi8KIAogICBfZWRhdGEgPSAuOwkJCS8qIEVuZCBvZiBkYXRhIHNlY3Rpb24gKi8KIApAQCAtNDgsNyArNDgsNyBAQAogCV9zaW5pdHRleHQgPSAuOwogCUlOSVRfVEVYVAogCV9laW5pdHRleHQgPSAuOwotICB9CisgIH0gOmRhdGEKICAgLmluaXQuZGF0YSA6IHsgSU5JVF9EQVRBIH0KICAgLiA9IEFMSUdOKDE2KTsKICAgX19zZXR1cF9zdGFydCA9IC47CkBAIC03NCw2ICs3NCw3IEBACiAgIC5pbml0LnJhbWZzIDogeyAqKC5pbml0LnJhbWZzKSB9CiAgIF9faW5pdHJhbWZzX2VuZCA9IC47CiAjZW5kaWYKKyAgTk9URVMKICAgLiA9IEFMSUdOKDgxOTIpOwogICBfX2luaXRfZW5kID0gLjsKIApkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL21tL2ttYXAuYyBiL2FyY2gvbTY4ay9tbS9rbWFwLmMKaW5kZXggNDZiN2Q2MC4uZGY2MjBhYyAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL21tL2ttYXAuYworKysgYi9hcmNoL202OGsvbW0va21hcC5jCkBAIC02Niw4ICs2NiwxMCBAQAogCWZvciAocCA9ICZpb2xpc3Q7ICh0bXAgPSAqcCkgOyBwID0gJnRtcC0+bmV4dCkgewogCQlpZiAoc2l6ZSArIGFkZHIgPCAodW5zaWduZWQgbG9uZyl0bXAtPmFkZHIpCiAJCQlicmVhazsKLQkJaWYgKGFkZHIgPiBLTUFQX0VORC1zaXplKQorCQlpZiAoYWRkciA+IEtNQVBfRU5ELXNpemUpIHsKKwkJCWtmcmVlKGFyZWEpOwogCQkJcmV0dXJuIE5VTEw7CisJCX0KIAkJYWRkciA9IHRtcC0+c2l6ZSArICh1bnNpZ25lZCBsb25nKXRtcC0+YWRkcjsKIAl9CiAJYXJlYS0+YWRkciA9ICh2b2lkICopYWRkcjsKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9tdm1lMTZ4L3J0Yy5jIGIvYXJjaC9tNjhrL212bWUxNngvcnRjLmMKaW5kZXggNDMyYTlmMS4uY2VhNWUzZSAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL212bWUxNngvcnRjLmMKKysrIGIvYXJjaC9tNjhrL212bWUxNngvcnRjLmMKQEAgLTUyLDE1ICs1MiwxNSBAQAogCQkvKiBFbnN1cmUgY2xvY2sgYW5kIHJlYWwtdGltZS1tb2RlLXJlZ2lzdGVyIGFyZSBhY2Nlc3NpYmxlICovCiAJCXJ0Yy0+Y3RybCA9IFJUQ19SRUFEOwogCQltZW1zZXQoJnd0aW1lLCAwLCBzaXplb2Yoc3RydWN0IHJ0Y190aW1lKSk7Ci0JCXd0aW1lLnRtX3NlYyA9ICBCQ0QyQklOKHJ0Yy0+YmNkX3NlYyk7Ci0JCXd0aW1lLnRtX21pbiA9ICBCQ0QyQklOKHJ0Yy0+YmNkX21pbik7Ci0JCXd0aW1lLnRtX2hvdXIgPSBCQ0QyQklOKHJ0Yy0+YmNkX2hyKTsKLQkJd3RpbWUudG1fbWRheSA9ICBCQ0QyQklOKHJ0Yy0+YmNkX2RvbSk7Ci0JCXd0aW1lLnRtX21vbiA9ICBCQ0QyQklOKHJ0Yy0+YmNkX210aCktMTsKLQkJd3RpbWUudG1feWVhciA9IEJDRDJCSU4ocnRjLT5iY2RfeWVhcik7CisJCXd0aW1lLnRtX3NlYyA9ICBiY2QyYmluKHJ0Yy0+YmNkX3NlYyk7CisJCXd0aW1lLnRtX21pbiA9ICBiY2QyYmluKHJ0Yy0+YmNkX21pbik7CisJCXd0aW1lLnRtX2hvdXIgPSBiY2QyYmluKHJ0Yy0+YmNkX2hyKTsKKwkJd3RpbWUudG1fbWRheSA9ICBiY2QyYmluKHJ0Yy0+YmNkX2RvbSk7CisJCXd0aW1lLnRtX21vbiA9ICBiY2QyYmluKHJ0Yy0+YmNkX210aCktMTsKKwkJd3RpbWUudG1feWVhciA9IGJjZDJiaW4ocnRjLT5iY2RfeWVhcik7CiAJCWlmICh3dGltZS50bV95ZWFyIDwgNzApCiAJCQl3dGltZS50bV95ZWFyICs9IDEwMDsKLQkJd3RpbWUudG1fd2RheSA9IEJDRDJCSU4ocnRjLT5iY2RfZG93KS0xOworCQl3dGltZS50bV93ZGF5ID0gYmNkMmJpbihydGMtPmJjZF9kb3cpLTE7CiAJCXJ0Yy0+Y3RybCA9IDA7CiAJCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIAkJcmV0dXJuIGNvcHlfdG9fdXNlcihhcmdwLCAmd3RpbWUsIHNpemVvZiB3dGltZSkgPwpAQCAtMTA0LDEyICsxMDQsMTIgQEAKIAkJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwogCQlydGMtPmN0cmwgICAgID0gUlRDX1dSSVRFOwogCi0JCXJ0Yy0+YmNkX3NlYyAgPSBCSU4yQkNEKHNlYyk7Ci0JCXJ0Yy0+YmNkX21pbiAgPSBCSU4yQkNEKG1pbik7Ci0JCXJ0Yy0+YmNkX2hyICAgPSBCSU4yQkNEKGhycyk7Ci0JCXJ0Yy0+YmNkX2RvbSAgPSBCSU4yQkNEKGRheSk7Ci0JCXJ0Yy0+YmNkX210aCAgPSBCSU4yQkNEKG1vbik7Ci0JCXJ0Yy0+YmNkX3llYXIgPSBCSU4yQkNEKHlycyUxMDApOworCQlydGMtPmJjZF9zZWMgID0gYmluMmJjZChzZWMpOworCQlydGMtPmJjZF9taW4gID0gYmluMmJjZChtaW4pOworCQlydGMtPmJjZF9ociAgID0gYmluMmJjZChocnMpOworCQlydGMtPmJjZF9kb20gID0gYmluMmJjZChkYXkpOworCQlydGMtPmJjZF9tdGggID0gYmluMmJjZChtb24pOworCQlydGMtPmJjZF95ZWFyID0gYmluMmJjZCh5cnMlMTAwKTsKIAogCQlydGMtPmN0cmwgICAgID0gMDsKIAkJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL3E0MC9jb25maWcuYyBiL2FyY2gvbTY4ay9xNDAvY29uZmlnLmMKaW5kZXggYmU5ZGUyZi4uOWM3ZWVmYSAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL3E0MC9jb25maWcuYworKysgYi9hcmNoL202OGsvcTQwL2NvbmZpZy5jCkBAIC0yMyw2ICsyMyw3IEBACiAjaW5jbHVkZSA8bGludXgvc2VyaWFsX3JlZy5oPgogI2luY2x1ZGUgPGxpbnV4L3J0Yy5oPgogI2luY2x1ZGUgPGxpbnV4L3Z0X2tlcm4uaD4KKyNpbmNsdWRlIDxsaW51eC9iY2QuaD4KIAogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9ydGMuaD4KQEAgLTIxNiwxNyArMjE3LDYgQEAKIH0KIAogCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGNoYXIgYmNkMmJpbih1bnNpZ25lZCBjaGFyIGIpCi17Ci0JcmV0dXJuIChiID4+IDQpICogMTAgKyAoYiAmIDE1KTsKLX0KLQotc3RhdGljIGlubGluZSB1bnNpZ25lZCBjaGFyIGJpbjJiY2QodW5zaWduZWQgY2hhciBiKQotewotCXJldHVybiAoYiAvIDEwKSAqIDE2ICsgKGIgJSAxMCk7Ci19Ci0KLQogc3RhdGljIHVuc2lnbmVkIGxvbmcgcTQwX2dldHRpbWVvZmZzZXQodm9pZCkKIHsKIAlyZXR1cm4gNTAwMCAqIChxbF90aWNrcyAhPSAwKTsKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9zdW4zeC90aW1lLmMgYi9hcmNoL202OGsvc3VuM3gvdGltZS5jCmluZGV4IGY1ZWFhZmIuLjUzNmEwNGEgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9zdW4zeC90aW1lLmMKKysrIGIvYXJjaC9tNjhrL3N1bjN4L3RpbWUuYwpAQCAtNDcsMjMgKzQ3LDIzIEBACiAKIAlpZihzZXQpIHsKIAkJaC0+Y3NyIHw9IENfV1JJVEU7Ci0JCWgtPnNlYyA9IEJJTjJCQ0QodC0+dG1fc2VjKTsKLQkJaC0+bWluID0gQklOMkJDRCh0LT50bV9taW4pOwotCQloLT5ob3VyID0gQklOMkJDRCh0LT50bV9ob3VyKTsKLQkJaC0+d2RheSA9IEJJTjJCQ0QodC0+dG1fd2RheSk7Ci0JCWgtPm1kYXkgPSBCSU4yQkNEKHQtPnRtX21kYXkpOwotCQloLT5tb250aCA9IEJJTjJCQ0QodC0+dG1fbW9uKTsKLQkJaC0+eWVhciA9IEJJTjJCQ0QodC0+dG1feWVhcik7CisJCWgtPnNlYyA9IGJpbjJiY2QodC0+dG1fc2VjKTsKKwkJaC0+bWluID0gYmluMmJjZCh0LT50bV9taW4pOworCQloLT5ob3VyID0gYmluMmJjZCh0LT50bV9ob3VyKTsKKwkJaC0+d2RheSA9IGJpbjJiY2QodC0+dG1fd2RheSk7CisJCWgtPm1kYXkgPSBiaW4yYmNkKHQtPnRtX21kYXkpOworCQloLT5tb250aCA9IGJpbjJiY2QodC0+dG1fbW9uKTsKKwkJaC0+eWVhciA9IGJpbjJiY2QodC0+dG1feWVhcik7CiAJCWgtPmNzciAmPSB+Q19XUklURTsKIAl9IGVsc2UgewogCQloLT5jc3IgfD0gQ19SRUFEOwotCQl0LT50bV9zZWMgPSBCQ0QyQklOKGgtPnNlYyk7Ci0JCXQtPnRtX21pbiA9IEJDRDJCSU4oaC0+bWluKTsKLQkJdC0+dG1faG91ciA9IEJDRDJCSU4oaC0+aG91cik7Ci0JCXQtPnRtX3dkYXkgPSBCQ0QyQklOKGgtPndkYXkpOwotCQl0LT50bV9tZGF5ID0gQkNEMkJJTihoLT5tZGF5KTsKLQkJdC0+dG1fbW9uID0gQkNEMkJJTihoLT5tb250aCk7Ci0JCXQtPnRtX3llYXIgPSBCQ0QyQklOKGgtPnllYXIpOworCQl0LT50bV9zZWMgPSBiY2QyYmluKGgtPnNlYyk7CisJCXQtPnRtX21pbiA9IGJjZDJiaW4oaC0+bWluKTsKKwkJdC0+dG1faG91ciA9IGJjZDJiaW4oaC0+aG91cik7CisJCXQtPnRtX3dkYXkgPSBiY2QyYmluKGgtPndkYXkpOworCQl0LT50bV9tZGF5ID0gYmNkMmJpbihoLT5tZGF5KTsKKwkJdC0+dG1fbW9uID0gYmNkMmJpbihoLT5tb250aCk7CisJCXQtPnRtX3llYXIgPSBiY2QyYmluKGgtPnllYXIpOwogCQloLT5jc3IgJj0gfkNfUkVBRDsKIAl9CiAKZGlmZiAtLWdpdCBhL2FyY2gvbTY4a25vbW11L0tjb25maWcgYi9hcmNoL202OGtub21tdS9LY29uZmlnCmluZGV4IDJlNzUxNWUuLjc2YjY2ZmUgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4a25vbW11L0tjb25maWcKKysrIGIvYXJjaC9tNjhrbm9tbXUvS2NvbmZpZwpAQCAtNzMsMTEgKzczLDEwIEBACiBjb25maWcgTk9fSU9QT1JUCiAJZGVmX2Jvb2wgeQogCi1jb25maWcgQVJDSF9TVVBQT1JUU19BT1VUCi0JZGVmX2Jvb2wgeQotCiBzb3VyY2UgImluaXQvS2NvbmZpZyIKIAorc291cmNlICJrZXJuZWwvS2NvbmZpZy5mcmVlemVyIgorCiBtZW51ICJQcm9jZXNzb3IgdHlwZSBhbmQgZmVhdHVyZXMiCiAKIGNob2ljZQpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrbm9tbXUvaW5jbHVkZS9hc20vYS5vdXQuaCBiL2FyY2gvbTY4a25vbW11L2luY2x1ZGUvYXNtL2Eub3V0LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNlMThlZjkuLjAwMDAwMDAKLS0tIGEvYXJjaC9tNjhrbm9tbXUvaW5jbHVkZS9hc20vYS5vdXQuaAorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLSNpbmNsdWRlIDxhc20tbTY4ay9hLm91dC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrbm9tbXUvaW5jbHVkZS9hc20vZWxmLmggYi9hcmNoL202OGtub21tdS9pbmNsdWRlL2FzbS9lbGYuaAppbmRleCAyN2YwZWM3Li5iODA0NjgzIDEwMDY0NAotLS0gYS9hcmNoL202OGtub21tdS9pbmNsdWRlL2FzbS9lbGYuaAorKysgYi9hcmNoL202OGtub21tdS9pbmNsdWRlL2FzbS9lbGYuaApAQCAtMTA1LDYgKzEwNSw2IEBACiAKICNkZWZpbmUgRUxGX1BMQVRGT1JNICAoTlVMTCkKIAotI2RlZmluZSBTRVRfUEVSU09OQUxJVFkoZXgsIGliY3MyKSBzZXRfcGVyc29uYWxpdHkoKGliY3MyKT9QRVJfU1ZSNDpQRVJfTElOVVgpCisjZGVmaW5lIFNFVF9QRVJTT05BTElUWShleCkgc2V0X3BlcnNvbmFsaXR5KFBFUl9MSU5VWCkKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL202OGtub21tdS9pbmNsdWRlL2FzbS90aHJlYWRfaW5mby5oIGIvYXJjaC9tNjhrbm9tbXUvaW5jbHVkZS9hc20vdGhyZWFkX2luZm8uaAppbmRleCAwYzliYzA5Li44MjUyOWY0IDEwMDY0NAotLS0gYS9hcmNoL202OGtub21tdS9pbmNsdWRlL2FzbS90aHJlYWRfaW5mby5oCisrKyBiL2FyY2gvbTY4a25vbW11L2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvLmgKQEAgLTg0LDEyICs4NCwxNCBAQAogI2RlZmluZSBUSUZfUE9MTElOR19OUkZMQUcJMwkvKiB0cnVlIGlmIHBvbGxfaWRsZSgpIGlzIHBvbGxpbmcKIAkJCQkJICAgVElGX05FRURfUkVTQ0hFRCAqLwogI2RlZmluZSBUSUZfTUVNRElFCQk0CisjZGVmaW5lIFRJRl9GUkVFWkUJCTE2CS8qIGlzIGZyZWV6aW5nIGZvciBzdXNwZW5kICovCiAKIC8qIGFzIGFib3ZlLCBidXQgYXMgYml0IHZhbHVlcyAqLwogI2RlZmluZSBfVElGX1NZU0NBTExfVFJBQ0UJKDE8PFRJRl9TWVNDQUxMX1RSQUNFKQogI2RlZmluZSBfVElGX1NJR1BFTkRJTkcJCSgxPDxUSUZfU0lHUEVORElORykKICNkZWZpbmUgX1RJRl9ORUVEX1JFU0NIRUQJKDE8PFRJRl9ORUVEX1JFU0NIRUQpCiAjZGVmaW5lIF9USUZfUE9MTElOR19OUkZMQUcJKDE8PFRJRl9QT0xMSU5HX05SRkxBRykKKyNkZWZpbmUgX1RJRl9GUkVFWkUJCSgxPDxUSUZfRlJFRVpFKQogCiAjZGVmaW5lIF9USUZfV09SS19NQVNLCQkweDAwMDBGRkZFCS8qIHdvcmsgdG8gZG8gb24gaW50ZXJydXB0L2V4Y2VwdGlvbiByZXR1cm4gKi8KIApkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrbm9tbXUva2VybmVsL3Byb2Nlc3MuYyBiL2FyY2gvbTY4a25vbW11L2tlcm5lbC9wcm9jZXNzLmMKaW5kZXggNDc1MDJkNS4uM2YyZDc3NCAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrbm9tbXUva2VybmVsL3Byb2Nlc3MuYworKysgYi9hcmNoL202OGtub21tdS9rZXJuZWwvcHJvY2Vzcy5jCkBAIC0yNSw3ICsyNSw2IEBACiAjaW5jbHVkZSA8bGludXgvcHRyYWNlLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3VzZXIuaD4KLSNpbmNsdWRlIDxsaW51eC9hLm91dC5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L3JlYm9vdC5oPgogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CmRpZmYgLS1naXQgYS9hcmNoL202OGtub21tdS9rZXJuZWwvdHJhcHMuYyBiL2FyY2gvbTY4a25vbW11L2tlcm5lbC90cmFwcy5jCmluZGV4IDQ2ZjhmOWQuLjVkNWQ1NmIgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4a25vbW11L2tlcm5lbC90cmFwcy5jCisrKyBiL2FyY2gvbTY4a25vbW11L2tlcm5lbC90cmFwcy5jCkBAIC0yMiw3ICsyMiw2IEBACiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGxpbnV4L2Eub3V0Lmg+CiAjaW5jbHVkZSA8bGludXgvdXNlci5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9LY29uZmlnIGIvYXJjaC9taXBzL0tjb25maWcKaW5kZXggY2Q1ZmJmNi4uNWYxNDliMCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL0tjb25maWcKKysrIGIvYXJjaC9taXBzL0tjb25maWcKQEAgLTUyLDYgKzUyLDcgQEAKIAlzZWxlY3QgU1NCCiAJc2VsZWN0IFNTQl9EUklWRVJfTUlQUwogCXNlbGVjdCBTU0JfRFJJVkVSX0VYVElGCisJc2VsZWN0IFNTQl9FTUJFRERFRAogCXNlbGVjdCBTU0JfUENJQ09SRV9IT1NUTU9ERSBpZiBQQ0kKIAlzZWxlY3QgR0VORVJJQ19HUElPCiAJc2VsZWN0IFNZU19IQVNfRUFSTFlfUFJJTlRLCkBAIC0xODg0LDYgKzE4ODUsOCBAQAogCSAgYWRkIGluaXRyZCBvciBpbml0cmFtZnMgaW1hZ2UgdG8gdGhlIGtlcm5lbCBpbWFnZS4KIAkgIE90aGVyd2lzZSwgc2F5IE4uCiAKK3NvdXJjZSAia2VybmVsL0tjb25maWcuZnJlZXplciIKKwogbWVudSAiQnVzIG9wdGlvbnMgKFBDSSwgUENNQ0lBLCBFSVNBLCBJU0EsIFRDKSIKIAogY29uZmlnIEhXX0hBU19FSVNBCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvYmNtNDd4eC9ncGlvLmMgYi9hcmNoL21pcHMvYmNtNDd4eC9ncGlvLmMKaW5kZXggZjVhNTNhYy4uOWI3OTg4MCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2JjbTQ3eHgvZ3Bpby5jCisrKyBiL2FyY2gvbWlwcy9iY200N3h4L2dwaW8uYwpAQCAtMTIsNjggKzEyLDUxIEBACiAjaW5jbHVkZSA8YXNtL21hY2gtYmNtNDd4eC9iY200N3h4Lmg+CiAjaW5jbHVkZSA8YXNtL21hY2gtYmNtNDd4eC9ncGlvLmg+CiAKLWludCBiY200N3h4X2dwaW9fdG9faXJxKHVuc2lnbmVkIGdwaW8pCisjaWYgKEJDTTQ3WFhfQ0hJUENPX0dQSU9fTElORVMgPiBCQ000N1hYX0VYVElGX0dQSU9fTElORVMpCitzdGF0aWMgREVDTEFSRV9CSVRNQVAoZ3Bpb19pbl91c2UsIEJDTTQ3WFhfQ0hJUENPX0dQSU9fTElORVMpOworI2Vsc2UKK3N0YXRpYyBERUNMQVJFX0JJVE1BUChncGlvX2luX3VzZSwgQkNNNDdYWF9FWFRJRl9HUElPX0xJTkVTKTsKKyNlbmRpZgorCitpbnQgZ3Bpb19yZXF1ZXN0KHVuc2lnbmVkIGdwaW8sIGNvbnN0IGNoYXIgKnRhZykKIHsKLQlpZiAoc3NiX2JjbTQ3eHguY2hpcGNvLmRldikKKwlpZiAoc3NiX2NoaXBjb19hdmFpbGFibGUoJnNzYl9iY200N3h4LmNoaXBjbykgJiYKKwkgICAgKCh1bnNpZ25lZClncGlvID49IEJDTTQ3WFhfQ0hJUENPX0dQSU9fTElORVMpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChzc2JfZXh0aWZfYXZhaWxhYmxlKCZzc2JfYmNtNDd4eC5leHRpZikgJiYKKwkgICAgKCh1bnNpZ25lZClncGlvID49IEJDTTQ3WFhfRVhUSUZfR1BJT19MSU5FUykpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKHRlc3RfYW5kX3NldF9iaXQoZ3BpbywgZ3Bpb19pbl91c2UpKQorCQlyZXR1cm4gLUVCVVNZOworCisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MKGdwaW9fcmVxdWVzdCk7CisKK3ZvaWQgZ3Bpb19mcmVlKHVuc2lnbmVkIGdwaW8pCit7CisJaWYgKHNzYl9jaGlwY29fYXZhaWxhYmxlKCZzc2JfYmNtNDd4eC5jaGlwY28pICYmCisJICAgICgodW5zaWduZWQpZ3BpbyA+PSBCQ000N1hYX0NISVBDT19HUElPX0xJTkVTKSkKKwkJcmV0dXJuOworCisJaWYgKHNzYl9leHRpZl9hdmFpbGFibGUoJnNzYl9iY200N3h4LmV4dGlmKSAmJgorCSAgICAoKHVuc2lnbmVkKWdwaW8gPj0gQkNNNDdYWF9FWFRJRl9HUElPX0xJTkVTKSkKKwkJcmV0dXJuOworCisJY2xlYXJfYml0KGdwaW8sIGdwaW9faW5fdXNlKTsKK30KK0VYUE9SVF9TWU1CT0woZ3Bpb19mcmVlKTsKKworaW50IGdwaW9fdG9faXJxKHVuc2lnbmVkIGdwaW8pCit7CisJaWYgKHNzYl9jaGlwY29fYXZhaWxhYmxlKCZzc2JfYmNtNDd4eC5jaGlwY28pKQogCQlyZXR1cm4gc3NiX21pcHNfaXJxKHNzYl9iY200N3h4LmNoaXBjby5kZXYpICsgMjsKLQllbHNlIGlmIChzc2JfYmNtNDd4eC5leHRpZi5kZXYpCisJZWxzZSBpZiAoc3NiX2V4dGlmX2F2YWlsYWJsZSgmc3NiX2JjbTQ3eHguZXh0aWYpKQogCQlyZXR1cm4gc3NiX21pcHNfaXJxKHNzYl9iY200N3h4LmV4dGlmLmRldikgKyAyOwogCWVsc2UKIAkJcmV0dXJuIC1FSU5WQUw7CiB9Ci1FWFBPUlRfU1lNQk9MX0dQTChiY200N3h4X2dwaW9fdG9faXJxKTsKLQotaW50IGJjbTQ3eHhfZ3Bpb19nZXRfdmFsdWUodW5zaWduZWQgZ3BpbykKLXsKLQlpZiAoc3NiX2JjbTQ3eHguY2hpcGNvLmRldikKLQkJcmV0dXJuIHNzYl9jaGlwY29fZ3Bpb19pbigmc3NiX2JjbTQ3eHguY2hpcGNvLCAxIDw8IGdwaW8pOwotCWVsc2UgaWYgKHNzYl9iY200N3h4LmV4dGlmLmRldikKLQkJcmV0dXJuIHNzYl9leHRpZl9ncGlvX2luKCZzc2JfYmNtNDd4eC5leHRpZiwgMSA8PCBncGlvKTsKLQllbHNlCi0JCXJldHVybiAwOwotfQotRVhQT1JUX1NZTUJPTF9HUEwoYmNtNDd4eF9ncGlvX2dldF92YWx1ZSk7Ci0KLXZvaWQgYmNtNDd4eF9ncGlvX3NldF92YWx1ZSh1bnNpZ25lZCBncGlvLCBpbnQgdmFsdWUpCi17Ci0JaWYgKHNzYl9iY200N3h4LmNoaXBjby5kZXYpCi0JCXNzYl9jaGlwY29fZ3Bpb19vdXQoJnNzYl9iY200N3h4LmNoaXBjbywKLQkJCQkgICAgMSA8PCBncGlvLAotCQkJCSAgICB2YWx1ZSA/IDEgPDwgZ3BpbyA6IDApOwotCWVsc2UgaWYgKHNzYl9iY200N3h4LmV4dGlmLmRldikKLQkJc3NiX2V4dGlmX2dwaW9fb3V0KCZzc2JfYmNtNDd4eC5leHRpZiwKLQkJCQkgICAxIDw8IGdwaW8sCi0JCQkJICAgdmFsdWUgPyAxIDw8IGdwaW8gOiAwKTsKLX0KLUVYUE9SVF9TWU1CT0xfR1BMKGJjbTQ3eHhfZ3Bpb19zZXRfdmFsdWUpOwotCi1pbnQgYmNtNDd4eF9ncGlvX2RpcmVjdGlvbl9pbnB1dCh1bnNpZ25lZCBncGlvKQotewotCWlmIChzc2JfYmNtNDd4eC5jaGlwY28uZGV2ICYmIChncGlvIDwgQkNNNDdYWF9DSElQQ09fR1BJT19MSU5FUykpCi0JCXNzYl9jaGlwY29fZ3Bpb19vdXRlbigmc3NiX2JjbTQ3eHguY2hpcGNvLAotCQkJCSAgICAgIDEgPDwgZ3BpbywgMCk7Ci0JZWxzZSBpZiAoc3NiX2JjbTQ3eHguZXh0aWYuZGV2ICYmIChncGlvIDwgQkNNNDdYWF9FWFRJRl9HUElPX0xJTkVTKSkKLQkJc3NiX2V4dGlmX2dwaW9fb3V0ZW4oJnNzYl9iY200N3h4LmV4dGlmLAotCQkJCSAgICAgMSA8PCBncGlvLCAwKTsKLQllbHNlCi0JCXJldHVybiAtRUlOVkFMOwotCXJldHVybiAwOwotfQotRVhQT1JUX1NZTUJPTF9HUEwoYmNtNDd4eF9ncGlvX2RpcmVjdGlvbl9pbnB1dCk7Ci0KLWludCBiY200N3h4X2dwaW9fZGlyZWN0aW9uX291dHB1dCh1bnNpZ25lZCBncGlvLCBpbnQgdmFsdWUpCi17Ci0JYmNtNDd4eF9ncGlvX3NldF92YWx1ZShncGlvLCB2YWx1ZSk7Ci0KLQlpZiAoc3NiX2JjbTQ3eHguY2hpcGNvLmRldiAmJiAoZ3BpbyA8IEJDTTQ3WFhfQ0hJUENPX0dQSU9fTElORVMpKQotCQlzc2JfY2hpcGNvX2dwaW9fb3V0ZW4oJnNzYl9iY200N3h4LmNoaXBjbywKLQkJCQkgICAgICAxIDw8IGdwaW8sIDEgPDwgZ3Bpbyk7Ci0JZWxzZSBpZiAoc3NiX2JjbTQ3eHguZXh0aWYuZGV2ICYmIChncGlvIDwgQkNNNDdYWF9FWFRJRl9HUElPX0xJTkVTKSkKLQkJc3NiX2V4dGlmX2dwaW9fb3V0ZW4oJnNzYl9iY200N3h4LmV4dGlmLAotCQkJCSAgICAgMSA8PCBncGlvLCAxIDw8IGdwaW8pOwotCWVsc2UKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JcmV0dXJuIDA7Ci19Ci1FWFBPUlRfU1lNQk9MX0dQTChiY200N3h4X2dwaW9fZGlyZWN0aW9uX291dHB1dCk7CitFWFBPUlRfU1lNQk9MX0dQTChncGlvX3RvX2lycSk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9iY200N3h4L3NldHVwLmMgYi9hcmNoL21pcHMvYmNtNDd4eC9zZXR1cC5jCmluZGV4IDhkMzZmMTguLjJmNTgwZmEgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9iY200N3h4L3NldHVwLmMKKysrIGIvYXJjaC9taXBzL2JjbTQ3eHgvc2V0dXAuYwpAQCAtMjcsNiArMjcsNyBAQAogCiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9zc2Ivc3NiLmg+CisjaW5jbHVkZSA8bGludXgvc3NiL3NzYl9lbWJlZGRlZC5oPgogI2luY2x1ZGUgPGFzbS9ib290aW5mby5oPgogI2luY2x1ZGUgPGFzbS9yZWJvb3QuaD4KICNpbmNsdWRlIDxhc20vdGltZS5oPgpAQCAtNDEsNyArNDIsNyBAQAogCXByaW50ayhLRVJOX0FMRVJUICJQbGVhc2Ugc3RhbmQgYnkgd2hpbGUgcmVib290aW5nIHRoZSBzeXN0ZW0uLi5cbiIpOwogCWxvY2FsX2lycV9kaXNhYmxlKCk7CiAJLyogU2V0IHRoZSB3YXRjaGRvZyB0aW1lciB0byByZXNldCBpbW1lZGlhdGVseSAqLwotCXNzYl9jaGlwY29fd2F0Y2hkb2dfdGltZXJfc2V0KCZzc2JfYmNtNDd4eC5jaGlwY28sIDEpOworCXNzYl93YXRjaGRvZ190aW1lcl9zZXQoJnNzYl9iY200N3h4LCAxKTsKIAl3aGlsZSAoMSkKIAkJY3B1X3JlbGF4KCk7CiB9CkBAIC01MCw3ICs1MSw3IEBACiB7CiAJLyogRGlzYWJsZSBpbnRlcnJ1cHRzIGFuZCB3YXRjaGRvZyBhbmQgc3BpbiBmb3JldmVyICovCiAJbG9jYWxfaXJxX2Rpc2FibGUoKTsKLQlzc2JfY2hpcGNvX3dhdGNoZG9nX3RpbWVyX3NldCgmc3NiX2JjbTQ3eHguY2hpcGNvLCAwKTsKKwlzc2Jfd2F0Y2hkb2dfdGltZXJfc2V0KCZzc2JfYmNtNDd4eCwgMCk7CiAJd2hpbGUgKDEpCiAJCWNwdV9yZWxheCgpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2JjbTQ3eHgvd2d0NjM0dS5jIGIvYXJjaC9taXBzL2JjbTQ3eHgvd2d0NjM0dS5jCmluZGV4IGQxZDkwYzllLi5lZjAwZTdmIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvYmNtNDd4eC93Z3Q2MzR1LmMKKysrIGIvYXJjaC9taXBzL2JjbTQ3eHgvd2d0NjM0dS5jCkBAIC0xMSw2ICsxMSw5IEBACiAjaW5jbHVkZSA8bGludXgvbGVkcy5oPgogI2luY2x1ZGUgPGxpbnV4L210ZC9waHlzbWFwLmg+CiAjaW5jbHVkZSA8bGludXgvc3NiL3NzYi5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L3JlYm9vdC5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KICNpbmNsdWRlIDxhc20vbWFjaC1iY200N3h4L2JjbTQ3eHguaD4KIAogLyogR1BJTyBkZWZpbml0aW9ucyBmb3IgdGhlIFdHVDYzNFUgKi8KQEAgLTk5LDYgKzEwMiwzMCBAQAogCSZ3Z3Q2MzR1X2dwaW9fbGVkcywKIH07CiAKK3N0YXRpYyBpcnFyZXR1cm5fdCBncGlvX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICppZ25vcmVkKQoreworCWludCBzdGF0ZTsKKworCS8qIEludGVycnVwdHMgYXJlIHNoYXJlZCwgY2hlY2sgaWYgdGhlIGN1cnJlbnQgb25lIGlzCisJICAgYSBHUElPIGludGVycnVwdC4gKi8KKwlpZiAoIXNzYl9jaGlwY29faXJxX3N0YXR1cygmc3NiX2JjbTQ3eHguY2hpcGNvLAorCQkJCSAgIFNTQl9DSElQQ09fSVJRX0dQSU8pKQorCQlyZXR1cm4gSVJRX05PTkU7CisKKwlzdGF0ZSA9IGdwaW9fZ2V0X3ZhbHVlKFdHVDYzNFVfR1BJT19SRVNFVCk7CisKKwkvKiBJbnRlcnJ1cHQgYXJlIGxldmVsIHRyaWdnZXJlZCwgcmV2ZXJ0IHRoZSBpbnRlcnJ1cHQgcG9sYXJpdHkKKwkgICB0byBjbGVhciB0aGUgaW50ZXJydXB0LiAqLworCWdwaW9fcG9sYXJpdHkoV0dUNjM0VV9HUElPX1JFU0VULCBzdGF0ZSk7CisKKwlpZiAoIXN0YXRlKSB7CisJCXByaW50ayhLRVJOX0lORk8gIlJlc2V0IGJ1dHRvbiBwcmVzc2VkIik7CisJCWN0cmxfYWx0X2RlbCgpOworCX0KKworCXJldHVybiBJUlFfSEFORExFRDsKK30KKwogc3RhdGljIGludCBfX2luaXQgd2d0NjM0dV9pbml0KHZvaWQpCiB7CiAJLyogVGhlcmUgaXMgbm8gZWFzeSB3YXkgdG8gZGV0ZWN0IHRoYXQgd2UgYXJlIHJ1bm5pbmcgb24gYSBXR1Q2MzRVCkBAIC0xMTIsNiArMTM5LDE5IEBACiAJICAgICgoZXQwbWFjWzFdID09IDB4MDkgJiYgZXQwbWFjWzJdID09IDB4NWIpIHx8CiAJICAgICAoZXQwbWFjWzFdID09IDB4MGYgJiYgZXQwbWFjWzJdID09IDB4YjUpKSkgewogCQlzdHJ1Y3Qgc3NiX21pcHNjb3JlICptY29yZSA9ICZzc2JfYmNtNDd4eC5taXBzY29yZTsKKworCQlwcmludGsoS0VSTl9JTkZPICJXR1Q2MzRVIG1hY2hpbmUgZGV0ZWN0ZWQuXG4iKTsKKworCQlpZiAoIXJlcXVlc3RfaXJxKGdwaW9fdG9faXJxKFdHVDYzNFVfR1BJT19SRVNFVCksCisJCQkJIGdwaW9faW50ZXJydXB0LCBJUlFGX1NIQVJFRCwKKwkJCQkgIldHVDYzNFUgR1BJTyIsICZzc2JfYmNtNDd4eC5jaGlwY28pKSB7CisJCQlncGlvX2RpcmVjdGlvbl9pbnB1dChXR1Q2MzRVX0dQSU9fUkVTRVQpOworCQkJZ3Bpb19pbnRtYXNrKFdHVDYzNFVfR1BJT19SRVNFVCwgMSk7CisJCQlzc2JfY2hpcGNvX2lycV9tYXNrKCZzc2JfYmNtNDd4eC5jaGlwY28sCisJCQkJCSAgICBTU0JfQ0hJUENPX0lSUV9HUElPLAorCQkJCQkgICAgU1NCX0NISVBDT19JUlFfR1BJTyk7CisJCX0KKwogCQl3Z3Q2MzR1X2ZsYXNoX2RhdGEud2lkdGggPSBtY29yZS0+Zmxhc2hfYnVzd2lkdGg7CiAJCXdndDYzNHVfZmxhc2hfcmVzb3VyY2Uuc3RhcnQgPSBtY29yZS0+Zmxhc2hfd2luZG93OwogCQl3Z3Q2MzR1X2ZsYXNoX3Jlc291cmNlLmVuZCA9IG1jb3JlLT5mbGFzaF93aW5kb3cKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9kZWMvdGltZS5jIGIvYXJjaC9taXBzL2RlYy90aW1lLmMKaW5kZXggMzk2NWZkYS4uMTM1OWMwMyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2RlYy90aW1lLmMKKysrIGIvYXJjaC9taXBzL2RlYy90aW1lLmMKQEAgLTQ1LDEyICs0NSwxMiBAQAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJ0Y19sb2NrLCBmbGFncyk7CiAKIAlpZiAoIShDTU9TX1JFQUQoUlRDX0NPTlRST0wpICYgUlRDX0RNX0JJTkFSWSkgfHwgUlRDX0FMV0FZU19CQ0QpIHsKLQkJc2VjID0gQkNEMkJJTihzZWMpOwotCQltaW4gPSBCQ0QyQklOKG1pbik7Ci0JCWhvdXIgPSBCQ0QyQklOKGhvdXIpOwotCQlkYXkgPSBCQ0QyQklOKGRheSk7Ci0JCW1vbiA9IEJDRDJCSU4obW9uKTsKLQkJeWVhciA9IEJDRDJCSU4oeWVhcik7CisJCXNlYyA9IGJjZDJiaW4oc2VjKTsKKwkJbWluID0gYmNkMmJpbihtaW4pOworCQlob3VyID0gYmNkMmJpbihob3VyKTsKKwkJZGF5ID0gYmNkMmJpbihkYXkpOworCQltb24gPSBiY2QyYmluKG1vbik7CisJCXllYXIgPSBiY2QyYmluKHllYXIpOwogCX0KIAogCXllYXIgKz0gcmVhbF95ZWFyIC0gNzIgKyAyMDAwOwpAQCAtODMsNyArODMsNyBAQAogCiAJY21vc19taW51dGVzID0gQ01PU19SRUFEKFJUQ19NSU5VVEVTKTsKIAlpZiAoIShzYXZlX2NvbnRyb2wgJiBSVENfRE1fQklOQVJZKSB8fCBSVENfQUxXQVlTX0JDRCkKLQkJY21vc19taW51dGVzID0gQkNEMkJJTihjbW9zX21pbnV0ZXMpOworCQljbW9zX21pbnV0ZXMgPSBiY2QyYmluKGNtb3NfbWludXRlcyk7CiAKIAkvKgogCSAqIHNpbmNlIHdlJ3JlIG9ubHkgYWRqdXN0aW5nIG1pbnV0ZXMgYW5kIHNlY29uZHMsCkBAIC05OSw4ICs5OSw4IEBACiAKIAlpZiAoYWJzKHJlYWxfbWludXRlcyAtIGNtb3NfbWludXRlcykgPCAzMCkgewogCQlpZiAoIShzYXZlX2NvbnRyb2wgJiBSVENfRE1fQklOQVJZKSB8fCBSVENfQUxXQVlTX0JDRCkgewotCQkJcmVhbF9zZWNvbmRzID0gQklOMkJDRChyZWFsX3NlY29uZHMpOwotCQkJcmVhbF9taW51dGVzID0gQklOMkJDRChyZWFsX21pbnV0ZXMpOworCQkJcmVhbF9zZWNvbmRzID0gYmluMmJjZChyZWFsX3NlY29uZHMpOworCQkJcmVhbF9taW51dGVzID0gYmluMmJjZChyZWFsX21pbnV0ZXMpOwogCQl9CiAJCUNNT1NfV1JJVEUocmVhbF9zZWNvbmRzLCBSVENfU0VDT05EUyk7CiAJCUNNT1NfV1JJVEUocmVhbF9taW51dGVzLCBSVENfTUlOVVRFUyk7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvZW1tYTJyaC9jb21tb24vaXJxLmMgYi9hcmNoL21pcHMvZW1tYTJyaC9jb21tb24vaXJxLmMKaW5kZXggZDk1NjA0Ny4uOTFjYmQ5NSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2VtbWEycmgvY29tbW9uL2lycS5jCisrKyBiL2FyY2gvbWlwcy9lbW1hMnJoL2NvbW1vbi9pcnEuYwpAQCAtMjksNyArMjksNiBAQAogCiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogI2luY2x1ZGUgPGFzbS9taXBzcmVncy5oPgotI2luY2x1ZGUgPGFzbS9kZWJ1Zy5oPgogI2luY2x1ZGUgPGFzbS9hZGRyc3BhY2UuaD4KICNpbmNsdWRlIDxhc20vYm9vdGluZm8uaD4KIApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2VtbWEycmgvY29tbW9uL3Byb20uYyBiL2FyY2gvbWlwcy9lbW1hMnJoL2NvbW1vbi9wcm9tLmMKaW5kZXggNWU5MmIzYS4uZTE0YTJlMyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2VtbWEycmgvY29tbW9uL3Byb20uYworKysgYi9hcmNoL21pcHMvZW1tYTJyaC9jb21tb24vcHJvbS5jCkBAIC0zMCw3ICszMCw2IEBACiAjaW5jbHVkZSA8YXNtL2FkZHJzcGFjZS5oPgogI2luY2x1ZGUgPGFzbS9ib290aW5mby5oPgogI2luY2x1ZGUgPGFzbS9lbW1hMnJoL2VtbWEycmguaD4KLSNpbmNsdWRlIDxhc20vZGVidWcuaD4KIAogY29uc3QgY2hhciAqZ2V0X3N5c3RlbV90eXBlKHZvaWQpCiB7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvZW1tYTJyaC9tYXJrZWlucy9wbGF0Zm9ybS5jIGIvYXJjaC9taXBzL2VtbWEycmgvbWFya2VpbnMvcGxhdGZvcm0uYwppbmRleCBkNzA2MjdkLi5mYjljZGEyIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvZW1tYTJyaC9tYXJrZWlucy9wbGF0Zm9ybS5jCisrKyBiL2FyY2gvbWlwcy9lbW1hMnJoL21hcmtlaW5zL3BsYXRmb3JtLmMKQEAgLTM1LDcgKzM1LDYgQEAKICNpbmNsdWRlIDxhc20vaXJxLmg+CiAjaW5jbHVkZSA8YXNtL3JlYm9vdC5oPgogI2luY2x1ZGUgPGFzbS90cmFwcy5oPgotI2luY2x1ZGUgPGFzbS9kZWJ1Zy5oPgogCiAjaW5jbHVkZSA8YXNtL2VtbWEycmgvZW1tYTJyaC5oPgogCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vYS5vdXQuaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9hLm91dC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYWQ4MzcxLi4wMDAwMDAwCi0tLSBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9hLm91dC5oCisrKyAvZGV2L251bGwKQEAgLTEsMzUgKzAsMCBAQAotLyoKLSAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCi0gKiBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIENvcHlyaWdodCAoQykgMTk5NCAtIDE5OTksIDIwMDMgYnkgUmFsZiBCYWVjaGxlCi0gKi8KLSNpZm5kZWYgX0FTTV9BX09VVF9ICi0jZGVmaW5lIF9BU01fQV9PVVRfSAotCi0jaWZkZWYgX19LRVJORUxfXwotCi0KLSNlbmRpZgotCi1zdHJ1Y3QgZXhlYwotewotCXVuc2lnbmVkIGxvbmcgYV9pbmZvOwkvKiBVc2UgbWFjcm9zIE5fTUFHSUMsIGV0YyBmb3IgYWNjZXNzICovCi0JdW5zaWduZWQgYV90ZXh0OwkvKiBsZW5ndGggb2YgdGV4dCwgaW4gYnl0ZXMgKi8KLQl1bnNpZ25lZCBhX2RhdGE7CS8qIGxlbmd0aCBvZiBkYXRhLCBpbiBieXRlcyAqLwotCXVuc2lnbmVkIGFfYnNzOwkJLyogbGVuZ3RoIG9mIHVuaW5pdGlhbGl6ZWQgZGF0YSBhcmVhIGZvcgotCQkJCSAgICBmaWxlLCBpbiBieXRlcyAqLwotCXVuc2lnbmVkIGFfc3ltczsJLyogbGVuZ3RoIG9mIHN5bWJvbCB0YWJsZSBkYXRhIGluIGZpbGUsCi0JCQkJICAgaW4gYnl0ZXMgKi8KLQl1bnNpZ25lZCBhX2VudHJ5OwkvKiBzdGFydCBhZGRyZXNzICovCi0JdW5zaWduZWQgYV90cnNpemU7CS8qIGxlbmd0aCBvZiByZWxvY2F0aW9uIGluZm8gZm9yIHRleHQsIGluCi0JCQkJICAgIGJ5dGVzICovCi0JdW5zaWduZWQgYV9kcnNpemU7CS8qIGxlbmd0aCBvZiByZWxvY2F0aW9uIGluZm8gZm9yIGRhdGEsIGluIGJ5dGVzICovCi19OwotCi0jZGVmaW5lIE5fVFJTSVpFKGEpCSgoYSkuYV90cnNpemUpCi0jZGVmaW5lIE5fRFJTSVpFKGEpCSgoYSkuYV9kcnNpemUpCi0jZGVmaW5lIE5fU1lNU0laRShhKQkoKGEpLmFfc3ltcykKLQotI2VuZGlmIC8qIF9BU01fQV9PVVRfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9jZXZ0LXI0ay5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2NldnQtcjRrLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGluY2x1ZGUvYXNtLW1pcHMvY2V2dC1yNGsuaApyZW5hbWUgdG8gYXJjaC9taXBzL2luY2x1ZGUvYXNtL2NldnQtcjRrLmgKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9lbGYuaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9lbGYuaAppbmRleCBmNjlmN2FjLi5hOGVhYzE2IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vZWxmLmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2VsZi5oCkBAIC0yNDcsMTAgKzI0Nyw4IEBACiAKICNpZmRlZiBDT05GSUdfMzJCSVQKIAotI2RlZmluZSBTRVRfUEVSU09OQUxJVFkoZXgsIGliY3MyKQkJCQkJXAorI2RlZmluZSBTRVRfUEVSU09OQUxJVFkoZXgpCQkJCQkJXAogZG8gewkJCQkJCQkJCVwKLQlpZiAoaWJjczIpCQkJCQkJCVwKLQkJc2V0X3BlcnNvbmFsaXR5KFBFUl9TVlI0KTsJCQkJXAogCXNldF9wZXJzb25hbGl0eShQRVJfTElOVVgpOwkJCQkJXAogCQkJCQkJCQkJXAogCWN1cnJlbnQtPnRocmVhZC5hYmkgPSAmbWlwc19hYmk7CQkJCVwKQEAgLTI5Niw3ICsyOTQsNyBAQAogI2RlZmluZSBfX1NFVF9QRVJTT05BTElUWTMyKGV4KQlkbyB7IH0gd2hpbGUgKDApCiAjZW5kaWYKIAotI2RlZmluZSBTRVRfUEVSU09OQUxJVFkoZXgsIGliY3MyKQkJCQkJXAorI2RlZmluZSBTRVRfUEVSU09OQUxJVFkoZXgpCQkJCQkJXAogZG8gewkJCQkJCQkJCVwKIAljbGVhcl90aHJlYWRfZmxhZyhUSUZfMzJCSVRfUkVHUyk7CQkJCVwKIAljbGVhcl90aHJlYWRfZmxhZyhUSUZfMzJCSVRfQUREUik7CQkJCVwKQEAgLTMwNiw5ICszMDQsNyBAQAogCWVsc2UJCQkJCQkJCVwKIAkJY3VycmVudC0+dGhyZWFkLmFiaSA9ICZtaXBzX2FiaTsJCQlcCiAJCQkJCQkJCQlcCi0JaWYgKGliY3MyKQkJCQkJCQlcCi0JCXNldF9wZXJzb25hbGl0eShQRVJfU1ZSNCk7CQkJCVwKLQllbHNlIGlmIChjdXJyZW50LT5wZXJzb25hbGl0eSAhPSBQRVJfTElOVVgzMikJCQlcCisJaWYgKGN1cnJlbnQtPnBlcnNvbmFsaXR5ICE9IFBFUl9MSU5VWDMyKQkJCVwKIAkJc2V0X3BlcnNvbmFsaXR5KFBFUl9MSU5VWCk7CQkJCVwKIH0gd2hpbGUgKDApCiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWJjbTQ3eHgvZ3Bpby5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtYmNtNDd4eC9ncGlvLmgKaW5kZXggY2ZjOGY0ZC4uZDhmZjRjZCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtYmNtNDd4eC9ncGlvLmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtYmNtNDd4eC9ncGlvLmgKQEAgLTksNDcgKzksNDYgQEAKICNpZm5kZWYgX19CQ000N1hYX0dQSU9fSAogI2RlZmluZSBfX0JDTTQ3WFhfR1BJT19ICiAKKyNpbmNsdWRlIDxsaW51eC9zc2Ivc3NiX2VtYmVkZGVkLmg+CisjaW5jbHVkZSA8YXNtL21hY2gtYmNtNDd4eC9iY200N3h4Lmg+CisKICNkZWZpbmUgQkNNNDdYWF9FWFRJRl9HUElPX0xJTkVTCTUKICNkZWZpbmUgQkNNNDdYWF9DSElQQ09fR1BJT19MSU5FUwkxNgogCi1leHRlcm4gaW50IGJjbTQ3eHhfZ3Bpb190b19pcnEodW5zaWduZWQgZ3Bpbyk7Ci1leHRlcm4gaW50IGJjbTQ3eHhfZ3Bpb19nZXRfdmFsdWUodW5zaWduZWQgZ3Bpbyk7Ci1leHRlcm4gdm9pZCBiY200N3h4X2dwaW9fc2V0X3ZhbHVlKHVuc2lnbmVkIGdwaW8sIGludCB2YWx1ZSk7Ci1leHRlcm4gaW50IGJjbTQ3eHhfZ3Bpb19kaXJlY3Rpb25faW5wdXQodW5zaWduZWQgZ3Bpbyk7Ci1leHRlcm4gaW50IGJjbTQ3eHhfZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KHVuc2lnbmVkIGdwaW8sIGludCB2YWx1ZSk7Ci0KLXN0YXRpYyBpbmxpbmUgaW50IGdwaW9fcmVxdWVzdCh1bnNpZ25lZCBncGlvLCBjb25zdCBjaGFyICpsYWJlbCkKLXsKLSAgICAgICByZXR1cm4gMDsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGdwaW9fZnJlZSh1bnNpZ25lZCBncGlvKQotewotfQotCi1zdGF0aWMgaW5saW5lIGludCBncGlvX3RvX2lycSh1bnNpZ25lZCBncGlvKQotewotCXJldHVybiBiY200N3h4X2dwaW9fdG9faXJxKGdwaW8pOwotfQorZXh0ZXJuIGludCBncGlvX3JlcXVlc3QodW5zaWduZWQgZ3BpbywgY29uc3QgY2hhciAqbGFiZWwpOworZXh0ZXJuIHZvaWQgZ3Bpb19mcmVlKHVuc2lnbmVkIGdwaW8pOworZXh0ZXJuIGludCBncGlvX3RvX2lycSh1bnNpZ25lZCBncGlvKTsKIAogc3RhdGljIGlubGluZSBpbnQgZ3Bpb19nZXRfdmFsdWUodW5zaWduZWQgZ3BpbykKIHsKLQlyZXR1cm4gYmNtNDd4eF9ncGlvX2dldF92YWx1ZShncGlvKTsKKwlyZXR1cm4gc3NiX2dwaW9faW4oJnNzYl9iY200N3h4LCAxIDw8IGdwaW8pOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgZ3Bpb19zZXRfdmFsdWUodW5zaWduZWQgZ3BpbywgaW50IHZhbHVlKQogewotCWJjbTQ3eHhfZ3Bpb19zZXRfdmFsdWUoZ3BpbywgdmFsdWUpOworCXNzYl9ncGlvX291dCgmc3NiX2JjbTQ3eHgsIDEgPDwgZ3BpbywgdmFsdWUgPyAxIDw8IGdwaW8gOiAwKTsKIH0KIAogc3RhdGljIGlubGluZSBpbnQgZ3Bpb19kaXJlY3Rpb25faW5wdXQodW5zaWduZWQgZ3BpbykKIHsKLQlyZXR1cm4gYmNtNDd4eF9ncGlvX2RpcmVjdGlvbl9pbnB1dChncGlvKTsKKwlyZXR1cm4gc3NiX2dwaW9fb3V0ZW4oJnNzYl9iY200N3h4LCAxIDw8IGdwaW8sIDApOwogfQogCiBzdGF0aWMgaW5saW5lIGludCBncGlvX2RpcmVjdGlvbl9vdXRwdXQodW5zaWduZWQgZ3BpbywgaW50IHZhbHVlKQogewotCXJldHVybiBiY200N3h4X2dwaW9fZGlyZWN0aW9uX291dHB1dChncGlvLCB2YWx1ZSk7CisJcmV0dXJuIHNzYl9ncGlvX291dGVuKCZzc2JfYmNtNDd4eCwgMSA8PCBncGlvLCAxIDw8IGdwaW8pOworfQorCitzdGF0aWMgaW50IGdwaW9faW50bWFzayh1bnNpZ25lZCBncGlvLCBpbnQgdmFsdWUpCit7CisJcmV0dXJuIHNzYl9ncGlvX2ludG1hc2soJnNzYl9iY200N3h4LCAxIDw8IGdwaW8sCisJCQkJdmFsdWUgPyAxIDw8IGdwaW8gOiAwKTsKK30KKworc3RhdGljIGludCBncGlvX3BvbGFyaXR5KHVuc2lnbmVkIGdwaW8sIGludCB2YWx1ZSkKK3sKKwlyZXR1cm4gc3NiX2dwaW9fcG9sYXJpdHkoJnNzYl9iY200N3h4LCAxIDw8IGdwaW8sCisJCQkJIHZhbHVlID8gMSA8PCBncGlvIDogMCk7CiB9CiAKIApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtYmNtNDd4eC93YXIuaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWJjbTQ3eHgvd2FyLmgKaW5kZXggNGEyYjc5OC4uODdjZDQ2NSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtYmNtNDd4eC93YXIuaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1iY200N3h4L3dhci5oCkBAIC01LDggKzUsOCBAQAogICoKICAqIENvcHlyaWdodCAoQykgMjAwMiwgMjAwNCwgMjAwNyBieSBSYWxmIEJhZWNobGUgPHJhbGZAbGludXgtbWlwcy5vcmc+CiAgKi8KLSNpZm5kZWYgX19BU01fTUlQU19NQUNIX0JDTTk0N1hYX1dBUl9ICi0jZGVmaW5lIF9fQVNNX01JUFNfTUFDSF9CQ005NDdYWF9XQVJfSAorI2lmbmRlZiBfX0FTTV9NSVBTX01BQ0hfQkNNNDdYWF9XQVJfSAorI2RlZmluZSBfX0FTTV9NSVBTX01BQ0hfQkNNNDdYWF9XQVJfSAogCiAjZGVmaW5lIFI0NjAwX1YxX0lOREVYX0lDQUNIRU9QX1dBUgkwCiAjZGVmaW5lIFI0NjAwX1YxX0hJVF9DQUNIRU9QX1dBUgkwCkBAIC0yMiw0ICsyMiw0IEBACiAjZGVmaW5lIFIxMDAwMF9MTFNDX1dBUgkJCTAKICNkZWZpbmUgTUlQUzM0S19NSVNTRURfSVRMQl9XQVIJCTAKIAotI2VuZGlmIC8qIF9fQVNNX01JUFNfTUFDSF9CQ005NDdYWF9XQVJfSCAqLworI2VuZGlmIC8qIF9fQVNNX01JUFNfTUFDSF9CQ000N1hYX1dBUl9IICovCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1nZW5lcmljL2lkZS5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtZ2VuZXJpYy9pZGUuaAppbmRleCA3MzAwOGY3Li45YzkzYTViIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1nZW5lcmljL2lkZS5oCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWdlbmVyaWMvaWRlLmgKQEAgLTE5LDM1ICsxOSw2IEBACiAjaW5jbHVkZSA8bGludXgvc3RkZGVmLmg+CiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgogCi1zdGF0aWMgX19pbmxpbmVfXyBpbnQgaWRlX3Byb2JlX2xlZ2FjeSh2b2lkKQotewotI2lmZGVmIENPTkZJR19QQ0kKLQlzdHJ1Y3QgcGNpX2RldiAqZGV2OwotCS8qCi0JICogVGhpcyBjYW4gYmUgY2FsbGVkIG9uIHRoZSBpZGVfc2V0dXAoKSBwYXRoLCBzdXBlci1lYXJseSBpbgotCSAqIGJvb3QuICBCdXQgdGhlIGRvd25fcmVhZCgpIHdpbGwgZW5hYmxlIGxvY2FsIGludGVycnVwdHMsCi0JICogd2hpY2ggY2FuIGNhdXNlIHNvbWUgbWFjaGluZXMgdG8gY3Jhc2guICBTbyBoZXJlIHdlIGRldGVjdAotCSAqIGFuZCBmbGFnIHRoYXQgc2l0dWF0aW9uIGFuZCBiYWlsIG91dCBlYXJseS4KLQkgKi8KLQlpZiAobm9fcGNpX2RldmljZXMoKSkKLQkJcmV0dXJuIDA7Ci0JZGV2ID0gcGNpX2dldF9jbGFzcyhQQ0lfQ0xBU1NfQlJJREdFX0VJU0EgPDwgOCwgTlVMTCk7Ci0JaWYgKGRldikKLQkJZ290byBmb3VuZDsKLQlkZXYgPSBwY2lfZ2V0X2NsYXNzKFBDSV9DTEFTU19CUklER0VfSVNBIDw8IDgsIE5VTEwpOwotCWlmIChkZXYpCi0JCWdvdG8gZm91bmQ7Ci0JcmV0dXJuIDA7Ci1mb3VuZDoKLQlwY2lfZGV2X3B1dChkZXYpOwotCXJldHVybiAxOwotI2VsaWYgZGVmaW5lZChDT05GSUdfRUlTQSkgfHwgZGVmaW5lZChDT05GSUdfSVNBKQotCXJldHVybiAxOwotI2Vsc2UKLQlyZXR1cm4gMDsKLSNlbmRpZgotfQotCiAvKiBNSVBTIHBvcnQgYW5kIG1lbW9yeS1tYXBwZWQgSS9PIHN0cmluZyBvcGVyYXRpb25zLiAgKi8KIHN0YXRpYyBpbmxpbmUgdm9pZCBfX2lkZV9mbHVzaF9wcm9sb2d1ZSh2b2lkKQogewpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtaXAyMi9kczEyODYuaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWlwMjIvZHMxMjg2LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYxOWYxZWEuLjAwMDAwMDAKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtaXAyMi9kczEyODYuaAorKysgL2Rldi9udWxsCkBAIC0xLDE4ICswLDAgQEAKLS8qCi0gKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQotICogZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTgsIDIwMDEsIDAzIGJ5IFJhbGYgQmFlY2hsZQotICoKLSAqIFJUQyByb3V0aW5lcyBmb3IgUEMgc3R5bGUgYXR0YWNoZWQgRGFsbGFzIGNoaXAuCi0gKi8KLSNpZm5kZWYgX19BU01fTUFDSF9JUDIyX0RTMTI4Nl9ICi0jZGVmaW5lIF9fQVNNX01BQ0hfSVAyMl9EUzEyODZfSAotCi0jaW5jbHVkZSA8YXNtL3NnaS9ocGMzLmg+Ci0KLSNkZWZpbmUgcnRjX3JlYWQocmVnKQkJKGhwYzNjMC0+cnRjcmVnc1socmVnKV0gJiAweGZmKQotI2RlZmluZSBydGNfd3JpdGUoZGF0YSwgcmVnKQlkbyB7IGhwYzNjMC0+cnRjcmVnc1socmVnKV0gPSAoZGF0YSk7IH0gd2hpbGUoMCkKLQotI2VuZGlmIC8qIF9fQVNNX01BQ0hfSVAyMl9EUzEyODZfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtaXAyOC9kczEyODYuaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWlwMjgvZHMxMjg2LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ3MWJiOWEuLjAwMDAwMDAKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtaXAyOC9kczEyODYuaAorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotI2lmbmRlZiBfX0FTTV9NQUNIX0lQMjhfRFMxMjg2X0gKLSNkZWZpbmUgX19BU01fTUFDSF9JUDI4X0RTMTI4Nl9ICi0jaW5jbHVkZSA8YXNtL21hY2gtaXAyMi9kczEyODYuaD4KLSNlbmRpZiAvKiBfX0FTTV9NQUNIX0lQMjhfRFMxMjg2X0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYzE0NjgxOC10aW1lLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWMxNDY4MTgtdGltZS5oCmluZGV4IGNkYzM3OWEuLjE5OWI0NTcgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYzE0NjgxOC10aW1lLmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21jMTQ2ODE4LXRpbWUuaApAQCAtNDQsNyArNDQsNyBAQAogCiAJY21vc19taW51dGVzID0gQ01PU19SRUFEKFJUQ19NSU5VVEVTKTsKIAlpZiAoIShzYXZlX2NvbnRyb2wgJiBSVENfRE1fQklOQVJZKSB8fCBSVENfQUxXQVlTX0JDRCkKLQkJQkNEX1RPX0JJTihjbW9zX21pbnV0ZXMpOworCQljbW9zX21pbnV0ZXMgPSBiY2QyYmluKGNtb3NfbWludXRlcyk7CiAKIAkvKgogCSAqIHNpbmNlIHdlJ3JlIG9ubHkgYWRqdXN0aW5nIG1pbnV0ZXMgYW5kIHNlY29uZHMsCkBAIC02MCw4ICs2MCw4IEBACiAKIAlpZiAoYWJzKHJlYWxfbWludXRlcyAtIGNtb3NfbWludXRlcykgPCAzMCkgewogCQlpZiAoIShzYXZlX2NvbnRyb2wgJiBSVENfRE1fQklOQVJZKSB8fCBSVENfQUxXQVlTX0JDRCkgewotCQkJQklOX1RPX0JDRChyZWFsX3NlY29uZHMpOwotCQkJQklOX1RPX0JDRChyZWFsX21pbnV0ZXMpOworCQkJcmVhbF9zZWNvbmRzID0gYmluMmJjZChyZWFsX3NlY29uZHMpOworCQkJcmVhbF9taW51dGVzID0gYmluMmJjZChyZWFsX21pbnV0ZXMpOwogCQl9CiAJCUNNT1NfV1JJVEUocmVhbF9zZWNvbmRzLCBSVENfU0VDT05EUyk7CiAJCUNNT1NfV1JJVEUocmVhbF9taW51dGVzLCBSVENfTUlOVVRFUyk7CkBAIC0xMDMsMTIgKzEwMywxMiBAQAogCX0gd2hpbGUgKHNlYyAhPSBDTU9TX1JFQUQoUlRDX1NFQ09ORFMpKTsKIAogCWlmICghKENNT1NfUkVBRChSVENfQ09OVFJPTCkgJiBSVENfRE1fQklOQVJZKSB8fCBSVENfQUxXQVlTX0JDRCkgewotCQlCQ0RfVE9fQklOKHNlYyk7Ci0JCUJDRF9UT19CSU4obWluKTsKLQkJQkNEX1RPX0JJTihob3VyKTsKLQkJQkNEX1RPX0JJTihkYXkpOwotCQlCQ0RfVE9fQklOKG1vbik7Ci0JCUJDRF9UT19CSU4oeWVhcik7CisJCXNlYyA9IGJjZDJiaW4oc2VjKTsKKwkJbWluID0gYmNkMmJpbihtaW4pOworCQlob3VyID0gYmNkMmJpbihob3VyKTsKKwkJZGF5ID0gYmNkMmJpbihkYXkpOworCQltb24gPSBiY2QyYmluKG1vbik7CisJCXllYXIgPSBiY2QyYmluKHllYXIpOwogCX0KIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZydGNfbG9jaywgZmxhZ3MpOwogCXllYXIgPSBtYzE0NjgxOF9kZWNvZGVfeWVhcih5ZWFyKTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9zcGlubG9jay5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3NwaW5sb2NrLmgKaW5kZXggNWQ5OGEzYy4uMWExZjMyMCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3NwaW5sb2NrLmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3NwaW5sb2NrLmgKQEAgLTE0Nyw3ICsxNDcsNyBAQAogCQkiCW9yaQklW3RpY2tldF0sICVbdGlja2V0XSwgMHgyMDAwCQlcbiIKIAkJIgl4b3JpCSVbdGlja2V0XSwgJVt0aWNrZXRdLCAweDIwMDAJCVxuIgogCQkiCXNjCSVbdGlja2V0XSwgJVt0aWNrZXRfcHRyXQkJXG4iCi0JCSIJYmVxemwJJVt0aWNrZXRdLCAyZgkJCQlcbiIKKwkJIgliZXF6bAklW3RpY2tldF0sIDFiCQkJCVxuIgogCQk6IFt0aWNrZXRfcHRyXSAiK20iIChsb2NrLT5sb2NrKSwKIAkJICBbdGlja2V0XSAiPSZyIiAodG1wKSk7CiAJfSBlbHNlIHsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvbGludXgzMi5jIGIvYXJjaC9taXBzL2tlcm5lbC9saW51eDMyLmMKaW5kZXggMmZlZmIxNC4uYWEyYzU1ZSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9saW51eDMyLmMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC9saW51eDMyLmMKQEAgLTYzLDQxICs2Myw2IEBACiAjZGVmaW5lIG1lcmdlXzY0KHIxLCByMikgKCgoKHIyKSAmIDB4ZmZmZmZmZmZVTCkgPDwgMzIpICsgKChyMSkgJiAweGZmZmZmZmZmVUwpKQogI2VuZGlmCiAKLS8qCi0gKiBSZXZhbGlkYXRlIHRoZSBpbm9kZS4gVGhpcyBpcyByZXF1aXJlZCBmb3IgcHJvcGVyIE5GUyBhdHRyaWJ1dGUgY2FjaGluZy4KLSAqLwotCi1pbnQgY3BfY29tcGF0X3N0YXQoc3RydWN0IGtzdGF0ICpzdGF0LCBzdHJ1Y3QgY29tcGF0X3N0YXQgX191c2VyICpzdGF0YnVmKQotewotCXN0cnVjdCBjb21wYXRfc3RhdCB0bXA7Ci0KLQlpZiAoIW5ld192YWxpZF9kZXYoc3RhdC0+ZGV2KSB8fCAhbmV3X3ZhbGlkX2RldihzdGF0LT5yZGV2KSkKLQkJcmV0dXJuIC1FT1ZFUkZMT1c7Ci0KLQltZW1zZXQoJnRtcCwgMCwgc2l6ZW9mKHRtcCkpOwotCXRtcC5zdF9kZXYgPSBuZXdfZW5jb2RlX2RldihzdGF0LT5kZXYpOwotCXRtcC5zdF9pbm8gPSBzdGF0LT5pbm87Ci0JaWYgKHNpemVvZih0bXAuc3RfaW5vKSA8IHNpemVvZihzdGF0LT5pbm8pICYmIHRtcC5zdF9pbm8gIT0gc3RhdC0+aW5vKQotCQlyZXR1cm4gLUVPVkVSRkxPVzsKLQl0bXAuc3RfbW9kZSA9IHN0YXQtPm1vZGU7Ci0JdG1wLnN0X25saW5rID0gc3RhdC0+bmxpbms7Ci0JU0VUX1VJRCh0bXAuc3RfdWlkLCBzdGF0LT51aWQpOwotCVNFVF9HSUQodG1wLnN0X2dpZCwgc3RhdC0+Z2lkKTsKLQl0bXAuc3RfcmRldiA9IG5ld19lbmNvZGVfZGV2KHN0YXQtPnJkZXYpOwotCXRtcC5zdF9zaXplID0gc3RhdC0+c2l6ZTsKLQl0bXAuc3RfYXRpbWUgPSBzdGF0LT5hdGltZS50dl9zZWM7Ci0JdG1wLnN0X210aW1lID0gc3RhdC0+bXRpbWUudHZfc2VjOwotCXRtcC5zdF9jdGltZSA9IHN0YXQtPmN0aW1lLnR2X3NlYzsKLSNpZmRlZiBTVEFUX0hBVkVfTlNFQwotCXRtcC5zdF9hdGltZV9uc2VjID0gc3RhdC0+YXRpbWUudHZfbnNlYzsKLQl0bXAuc3RfbXRpbWVfbnNlYyA9IHN0YXQtPm10aW1lLnR2X25zZWM7Ci0JdG1wLnN0X2N0aW1lX25zZWMgPSBzdGF0LT5jdGltZS50dl9uc2VjOwotI2VuZGlmCi0JdG1wLnN0X2Jsb2NrcyA9IHN0YXQtPmJsb2NrczsKLQl0bXAuc3RfYmxrc2l6ZSA9IHN0YXQtPmJsa3NpemU7Ci0JcmV0dXJuIGNvcHlfdG9fdXNlcihzdGF0YnVmLCAmdG1wLCBzaXplb2YodG1wKSkgPyAtRUZBVUxUIDogMDsKLX0KLQogYXNtbGlua2FnZSB1bnNpZ25lZCBsb25nCiBzeXMzMl9tbWFwMih1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgbGVuLCB1bnNpZ25lZCBsb25nIHByb3QsCiAgICAgICAgICB1bnNpZ25lZCBsb25nIGZsYWdzLCB1bnNpZ25lZCBsb25nIGZkLCB1bnNpZ25lZCBsb25nIHBnb2ZmKQpAQCAtMTY4LDcyICsxMzMsNiBAQAogCXJldHVybiBzeXNfZnRydW5jYXRlKGZkLCBtZXJnZV82NChhMiwgYTMpKTsKIH0KIAotc3RhdGljIGlubGluZSBsb25nCi1nZXRfdHYzMihzdHJ1Y3QgdGltZXZhbCAqbywgc3RydWN0IGNvbXBhdF90aW1ldmFsIF9fdXNlciAqaSkKLXsKLQlyZXR1cm4gKCFhY2Nlc3Nfb2soVkVSSUZZX1JFQUQsIGksIHNpemVvZigqaSkpIHx8Ci0JCShfX2dldF91c2VyKG8tPnR2X3NlYywgJmktPnR2X3NlYykgfAotCQkgX19nZXRfdXNlcihvLT50dl91c2VjLCAmaS0+dHZfdXNlYykpKTsKLX0KLQotc3RhdGljIGlubGluZSBsb25nCi1wdXRfdHYzMihzdHJ1Y3QgY29tcGF0X3RpbWV2YWwgX191c2VyICpvLCBzdHJ1Y3QgdGltZXZhbCAqaSkKLXsKLQlyZXR1cm4gKCFhY2Nlc3Nfb2soVkVSSUZZX1dSSVRFLCBvLCBzaXplb2YoKm8pKSB8fAotCQkoX19wdXRfdXNlcihpLT50dl9zZWMsICZvLT50dl9zZWMpIHwKLQkJIF9fcHV0X3VzZXIoaS0+dHZfdXNlYywgJm8tPnR2X3VzZWMpKSk7Ci19Ci0KLWV4dGVybiBzdHJ1Y3QgdGltZXpvbmUgc3lzX3R6OwotCi1hc21saW5rYWdlIGludAotc3lzMzJfZ2V0dGltZW9mZGF5KHN0cnVjdCBjb21wYXRfdGltZXZhbCBfX3VzZXIgKnR2LCBzdHJ1Y3QgdGltZXpvbmUgX191c2VyICp0eikKLXsKLQlpZiAodHYpIHsKLQkJc3RydWN0IHRpbWV2YWwga3R2OwotCQlkb19nZXR0aW1lb2ZkYXkoJmt0dik7Ci0JCWlmIChwdXRfdHYzMih0diwgJmt0dikpCi0JCQlyZXR1cm4gLUVGQVVMVDsKLQl9Ci0JaWYgKHR6KSB7Ci0JCWlmIChjb3B5X3RvX3VzZXIodHosICZzeXNfdHosIHNpemVvZihzeXNfdHopKSkKLQkJCXJldHVybiAtRUZBVUxUOwotCX0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGlubGluZSBsb25nIGdldF90czMyKHN0cnVjdCB0aW1lc3BlYyAqbywgc3RydWN0IGNvbXBhdF90aW1ldmFsIF9fdXNlciAqaSkKLXsKLQlsb25nIHVzZWM7Ci0KLQlpZiAoIWFjY2Vzc19vayhWRVJJRllfUkVBRCwgaSwgc2l6ZW9mKCppKSkpCi0JCXJldHVybiAtRUZBVUxUOwotCWlmIChfX2dldF91c2VyKG8tPnR2X3NlYywgJmktPnR2X3NlYykpCi0JCXJldHVybiAtRUZBVUxUOwotCWlmIChfX2dldF91c2VyKHVzZWMsICZpLT50dl91c2VjKSkKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0Jby0+dHZfbnNlYyA9IHVzZWMgKiAxMDAwOwotCQlyZXR1cm4gMDsKLX0KLQotYXNtbGlua2FnZSBpbnQKLXN5czMyX3NldHRpbWVvZmRheShzdHJ1Y3QgY29tcGF0X3RpbWV2YWwgX191c2VyICp0diwgc3RydWN0IHRpbWV6b25lIF9fdXNlciAqdHopCi17Ci0Jc3RydWN0IHRpbWVzcGVjIGt0czsKLQlzdHJ1Y3QgdGltZXpvbmUga3R6OwotCi0gCWlmICh0dikgewotCQlpZiAoZ2V0X3RzMzIoJmt0cywgdHYpKQotCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JfQotCWlmICh0eikgewotCQlpZiAoY29weV9mcm9tX3VzZXIoJmt0eiwgdHosIHNpemVvZihrdHopKSkKLQkJCXJldHVybiAtRUZBVUxUOwotCX0KLQotCXJldHVybiBkb19zeXNfc2V0dGltZW9mZGF5KHR2ID8gJmt0cyA6IE5VTEwsIHR6ID8gJmt0eiA6IE5VTEwpOwotfQotCiBhc21saW5rYWdlIGludCBzeXMzMl9sbHNlZWsodW5zaWduZWQgaW50IGZkLCB1bnNpZ25lZCBpbnQgb2Zmc2V0X2hpZ2gsCiAJCQkgICAgdW5zaWduZWQgaW50IG9mZnNldF9sb3csIGxvZmZfdCBfX3VzZXIgKiByZXN1bHQsCiAJCQkgICAgdW5zaWduZWQgaW50IG9yaWdpbikKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvcHJvYy5jIGIvYXJjaC9taXBzL2tlcm5lbC9wcm9jLmMKaW5kZXggNzViYjEzMC4uMjY3NjBjYSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9wcm9jLmMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC9wcm9jLmMKQEAgLTM5LDcgKzM5LDcgQEAKIAlzZXFfcHJpbnRmKG0sICJwcm9jZXNzb3JcdFx0OiAlbGRcbiIsIG4pOwogCXNwcmludGYoZm10LCAiY3B1IG1vZGVsXHRcdDogJSVzIFYlJWQuJSVkJXNcbiIsCiAJICAgICAgICBjcHVfZGF0YVtuXS5vcHRpb25zICYgTUlQU19DUFVfRlBVID8gIiAgRlBVIFYlZC4lZCIgOiAiIik7Ci0Jc2VxX3ByaW50ZihtLCBmbXQsIF9fY3B1X25hbWVbc21wX3Byb2Nlc3Nvcl9pZCgpXSwKKwlzZXFfcHJpbnRmKG0sIGZtdCwgX19jcHVfbmFtZVtuXSwKIAkgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVyc2lvbiA+PiA0KSAmIDB4MGYsIHZlcnNpb24gJiAweDBmLAogCSAgICAgICAgICAgICAgICAgICAgICAgICAgIChmcF92ZXJzID4+IDQpICYgMHgwZiwgZnBfdmVycyAmIDB4MGYpOwogCXNlcV9wcmludGYobSwgIkJvZ29NSVBTXHRcdDogJWx1LiUwMmx1XG4iLApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC9wcm9jZXNzLmMgYi9hcmNoL21pcHMva2VybmVsL3Byb2Nlc3MuYwppbmRleCAyMmZjMTliLi5jYTJlNDAyIDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL3Byb2Nlc3MuYworKysgYi9hcmNoL21pcHMva2VybmVsL3Byb2Nlc3MuYwpAQCAtMjIsNyArMjIsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3BlcnNvbmFsaXR5Lmg+CiAjaW5jbHVkZSA8bGludXgvc3lzLmg+CiAjaW5jbHVkZSA8bGludXgvdXNlci5oPgotI2luY2x1ZGUgPGxpbnV4L2Eub3V0Lmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2NvbXBsZXRpb24uaD4KICNpbmNsdWRlIDxsaW51eC9rYWxsc3ltcy5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC9ydGx4LmMgYi9hcmNoL21pcHMva2VybmVsL3J0bHguYwppbmRleCBkZmQ4NjhiLi40Y2U5M2FhIDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL3J0bHguYworKysgYi9hcmNoL21pcHMva2VybmVsL3J0bHguYwpAQCAtNTIyLDggKzUyMiw4IEBACiAJCWF0b21pY19zZXQoJmNoYW5uZWxfd3FzW2ldLmluX29wZW4sIDApOwogCQltdXRleF9pbml0KCZjaGFubmVsX3dxc1tpXS5tdXRleCk7CiAKLQkJZGV2ID0gZGV2aWNlX2NyZWF0ZV9kcnZkYXRhKG10X2NsYXNzLCBOVUxMLCBNS0RFVihtYWpvciwgaSksCi0JCQkJCSAgICBOVUxMLCAiJXMlZCIsIG1vZHVsZV9uYW1lLCBpKTsKKwkJZGV2ID0gZGV2aWNlX2NyZWF0ZShtdF9jbGFzcywgTlVMTCwgTUtERVYobWFqb3IsIGkpLCBOVUxMLAorCQkJCSAgICAiJXMlZCIsIG1vZHVsZV9uYW1lLCBpKTsKIAkJaWYgKElTX0VSUihkZXYpKSB7CiAJCQllcnIgPSBQVFJfRVJSKGRldik7CiAJCQlnb3RvIG91dF9jaHJkZXY7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL3NjYWxsNjQtbjMyLlMgYi9hcmNoL21pcHMva2VybmVsL3NjYWxsNjQtbjMyLlMKaW5kZXggMzI0YzU0OS4uZTI2NmIzYSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9zY2FsbDY0LW4zMi5TCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvc2NhbGw2NC1uMzIuUwpAQCAtMjE0LDcgKzIxNCw3IEBACiAJUFRSCXN5c19mY2hvd24KIAlQVFIJc3lzX2xjaG93bgogCVBUUglzeXNfdW1hc2sKLQlQVFIJc3lzMzJfZ2V0dGltZW9mZGF5CisJUFRSCWNvbXBhdF9zeXNfZ2V0dGltZW9mZGF5CiAJUFRSCWNvbXBhdF9zeXNfZ2V0cmxpbWl0CQkvKiA2MDk1ICovCiAJUFRSCWNvbXBhdF9zeXNfZ2V0cnVzYWdlCiAJUFRSCWNvbXBhdF9zeXNfc3lzaW5mbwpAQCAtMjc5LDcgKzI3OSw3IEBACiAJUFRSCXN5c19jaHJvb3QKIAlQVFIJc3lzX3N5bmMKIAlQVFIJc3lzX2FjY3QKLQlQVFIJc3lzMzJfc2V0dGltZW9mZGF5CisJUFRSCWNvbXBhdF9zeXNfc2V0dGltZW9mZGF5CiAJUFRSCWNvbXBhdF9zeXNfbW91bnQJCS8qIDYxNjAgKi8KIAlQVFIJc3lzX3Vtb3VudAogCVBUUglzeXNfc3dhcG9uCmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL3NjYWxsNjQtbzMyLlMgYi9hcmNoL21pcHMva2VybmVsL3NjYWxsNjQtbzMyLlMKaW5kZXggODVmZWRhYy4uNmM3ZWY4MyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9zY2FsbDY0LW8zMi5TCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvc2NhbGw2NC1vMzIuUwpAQCAtMjgzLDggKzI4Myw4IEBACiAJUFRSCWNvbXBhdF9zeXNfc2V0cmxpbWl0CQkvKiA0MDc1ICovCiAJUFRSCWNvbXBhdF9zeXNfZ2V0cmxpbWl0CiAJUFRSCWNvbXBhdF9zeXNfZ2V0cnVzYWdlCi0JUFRSCXN5czMyX2dldHRpbWVvZmRheQotCVBUUglzeXMzMl9zZXR0aW1lb2ZkYXkKKwlQVFIJY29tcGF0X3N5c19nZXR0aW1lb2ZkYXkKKwlQVFIJY29tcGF0X3N5c19zZXR0aW1lb2ZkYXkKIAlQVFIJc3lzX2dldGdyb3VwcwkJCS8qIDQwODAgKi8KIAlQVFIJc3lzX3NldGdyb3VwcwogCVBUUglzeXNfbmlfc3lzY2FsbAkJCS8qIG9sZF9zZWxlY3QgKi8KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvc3lzY2FsbC5jIGIvYXJjaC9taXBzL2tlcm5lbC9zeXNjYWxsLmMKaW5kZXggMzQzMDE1YS4uMzc5NzBkOSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9zeXNjYWxsLmMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC9zeXNjYWxsLmMKQEAgLTcsNyArNyw2IEBACiAgKiBDb3B5cmlnaHQgKEMpIDE5OTksIDIwMDAgU2lsaWNvbiBHcmFwaGljcywgSW5jLgogICogQ29weXJpZ2h0IChDKSAyMDAxIE1JUFMgVGVjaG5vbG9naWVzLCBJbmMuCiAgKi8KLSNpbmNsdWRlIDxsaW51eC9hLm91dC5oPgogI2luY2x1ZGUgPGxpbnV4L2NhcGFiaWxpdHkuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvdm1saW51eC5sZHMuUyBiL2FyY2gvbWlwcy9rZXJuZWwvdm1saW51eC5sZHMuUwppbmRleCBhZmIxMTlmLi41ODczOGM4IDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL3ZtbGludXgubGRzLlMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC92bWxpbnV4Lmxkcy5TCkBAIC0xMDQsNyArMTA0LDcgQEAKIAkuID0gQUxJR04oX1BBR0VfU0laRSk7CiAJX19ub3NhdmVfZW5kID0gLjsKIAotCS4gPSBBTElHTigzMik7CisJLiA9IEFMSUdOKDEgPDwgQ09ORklHX01JUFNfTDFfQ0FDSEVfU0hJRlQpOwogCS5kYXRhLmNhY2hlbGluZV9hbGlnbmVkIDogewogCQkqKC5kYXRhLmNhY2hlbGluZV9hbGlnbmVkKQogCX0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9sYXNhdC9zeXNjdGwuYyBiL2FyY2gvbWlwcy9sYXNhdC9zeXNjdGwuYwppbmRleCA4NjY4ODFlLi44Zjg4ODg2IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbGFzYXQvc3lzY3RsLmMKKysrIGIvYXJjaC9taXBzL2xhc2F0L3N5c2N0bC5jCkBAIC0zOCwxNCArMzgsMTMgQEAKICNlbmRpZgogCiAvKiBTdHJhdGVneSBmdW5jdGlvbiB0byB3cml0ZSBFRVBST00gYWZ0ZXIgY2hhbmdpbmcgc3RyaW5nIGVudHJ5ICovCi1pbnQgc3lzY3RsX2xhc2F0c3RyaW5nKGN0bF90YWJsZSAqdGFibGUsIGludCAqbmFtZSwgaW50IG5sZW4sCitpbnQgc3lzY3RsX2xhc2F0c3RyaW5nKGN0bF90YWJsZSAqdGFibGUsCiAJCXZvaWQgKm9sZHZhbCwgc2l6ZV90ICpvbGRsZW5wLAogCQl2b2lkICpuZXd2YWwsIHNpemVfdCBuZXdsZW4pCiB7CiAJaW50IHI7CiAKLQlyID0gc3lzY3RsX3N0cmluZyh0YWJsZSwgbmFtZSwKLQkJCSAgbmxlbiwgb2xkdmFsLCBvbGRsZW5wLCBuZXd2YWwsIG5ld2xlbik7CisJciA9IHN5c2N0bF9zdHJpbmcodGFibGUsIG9sZHZhbCwgb2xkbGVucCwgbmV3dmFsLCBuZXdsZW4pOwogCWlmIChyIDwgMCkKIAkJcmV0dXJuIHI7CiAKQEAgLTExMywxMyArMTEyLDEzIEBACiAjZW5kaWYKIAogLyogU3lzY3RsIGZvciBzZXR0aW5nIHRoZSBJUCBhZGRyZXNzZXMgKi8KLWludCBzeXNjdGxfbGFzYXRfaW50dmVjKGN0bF90YWJsZSAqdGFibGUsIGludCAqbmFtZSwgaW50IG5sZW4sCitpbnQgc3lzY3RsX2xhc2F0X2ludHZlYyhjdGxfdGFibGUgKnRhYmxlLAogCQkgICAgdm9pZCAqb2xkdmFsLCBzaXplX3QgKm9sZGxlbnAsCiAJCSAgICB2b2lkICpuZXd2YWwsIHNpemVfdCBuZXdsZW4pCiB7CiAJaW50IHI7CiAKLQlyID0gc3lzY3RsX2ludHZlYyh0YWJsZSwgbmFtZSwgbmxlbiwgb2xkdmFsLCBvbGRsZW5wLCBuZXd2YWwsIG5ld2xlbik7CisJciA9IHN5c2N0bF9pbnR2ZWModGFibGUsIG9sZHZhbCwgb2xkbGVucCwgbmV3dmFsLCBuZXdsZW4pOwogCWlmIChyIDwgMCkKIAkJcmV0dXJuIHI7CiAKQEAgLTEzMSw3ICsxMzAsNyBAQAogCiAjaWZkZWYgQ09ORklHX0RTMTYwMwogLyogU2FtZSBmb3IgUlRDICovCi1pbnQgc3lzY3RsX2xhc2F0X3J0YyhjdGxfdGFibGUgKnRhYmxlLCBpbnQgKm5hbWUsIGludCBubGVuLAoraW50IHN5c2N0bF9sYXNhdF9ydGMoY3RsX3RhYmxlICp0YWJsZSwKIAkJICAgIHZvaWQgKm9sZHZhbCwgc2l6ZV90ICpvbGRsZW5wLAogCQkgICAgdm9pZCAqbmV3dmFsLCBzaXplX3QgbmV3bGVuKQogewpAQCAtMTQwLDcgKzEzOSw3IEBACiAJcnRjdG1wID0gcmVhZF9wZXJzaXN0ZW50X2Nsb2NrKCk7CiAJaWYgKHJ0Y3RtcCA8IDApCiAJCXJ0Y3RtcCA9IDA7Ci0JciA9IHN5c2N0bF9pbnR2ZWModGFibGUsIG5hbWUsIG5sZW4sIG9sZHZhbCwgb2xkbGVucCwgbmV3dmFsLCBuZXdsZW4pOworCXIgPSBzeXNjdGxfaW50dmVjKHRhYmxlLCBvbGR2YWwsIG9sZGxlbnAsIG5ld3ZhbCwgbmV3bGVuKTsKIAlpZiAociA8IDApCiAJCXJldHVybiByOwogCWlmIChuZXd2YWwgJiYgbmV3bGVuKQpAQCAtMjExLDEzICsyMTAsMTMgQEAKIH0KICNlbmRpZgogCi1zdGF0aWMgaW50IHN5c2N0bF9sYXNhdF9wcmlkKGN0bF90YWJsZSAqdGFibGUsIGludCAqbmFtZSwgaW50IG5sZW4sCitzdGF0aWMgaW50IHN5c2N0bF9sYXNhdF9wcmlkKGN0bF90YWJsZSAqdGFibGUsCiAJCQkJICAgICB2b2lkICpvbGR2YWwsIHNpemVfdCAqb2xkbGVucCwKIAkJCQkgICAgIHZvaWQgKm5ld3ZhbCwgc2l6ZV90IG5ld2xlbikKIHsKIAlpbnQgcjsKIAotCXIgPSBzeXNjdGxfaW50dmVjKHRhYmxlLCBuYW1lLCBubGVuLCBvbGR2YWwsIG9sZGxlbnAsIG5ld3ZhbCwgbmV3bGVuKTsKKwlyID0gc3lzY3RsX2ludHZlYyh0YWJsZSwgb2xkdmFsLCBvbGRsZW5wLCBuZXd2YWwsIG5ld2xlbik7CiAJaWYgKHIgPCAwKQogCQlyZXR1cm4gcjsKIAlpZiAobmV3dmFsICYmIG5ld2xlbikgewpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3BjaS9maXh1cC1lbW1hMnJoLmMgYi9hcmNoL21pcHMvcGNpL2ZpeHVwLWVtbWEycmguYwppbmRleCBhMjcwNTg5Li44NDZlYWU5IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvcGNpL2ZpeHVwLWVtbWEycmguYworKysgYi9hcmNoL21pcHMvcGNpL2ZpeHVwLWVtbWEycmguYwpAQCAtMjksNyArMjksNiBAQAogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogCiAjaW5jbHVkZSA8YXNtL2Jvb3RpbmZvLmg+Ci0jaW5jbHVkZSA8YXNtL2RlYnVnLmg+CiAKICNpbmNsdWRlIDxhc20vZW1tYTJyaC9lbW1hMnJoLmg+CiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9wY2kvb3BzLXBueDg1NTAuYyBiL2FyY2gvbWlwcy9wY2kvb3BzLXBueDg1NTAuYwppbmRleCAwZTE2MGQ5ZjAuLjFlNjIxM2YgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9wY2kvb3BzLXBueDg1NTAuYworKysgYi9hcmNoL21pcHMvcGNpL29wcy1wbng4NTUwLmMKQEAgLTI5LDggKzI5LDYgQEAKIAogI2luY2x1ZGUgPGFzbS9tYWNoLXBueDg1NTAvcGNpLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gtcG54ODU1MC9nbGIuaD4KLSNpbmNsdWRlIDxhc20vZGVidWcuaD4KLQogCiBzdGF0aWMgaW5saW5lIHZvaWQgY2xlYXJfc3RhdHVzKHZvaWQpCiB7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvcGNpL3BjaS1lbW1hMnJoLmMgYi9hcmNoL21pcHMvcGNpL3BjaS1lbW1hMnJoLmMKaW5kZXggZDk5NTkxYS4uNzcyZTI4MyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3BjaS9wY2ktZW1tYTJyaC5jCisrKyBiL2FyY2gvbWlwcy9wY2kvcGNpLWVtbWEycmguYwpAQCAtMjksNyArMjksNiBAQAogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogCiAjaW5jbHVkZSA8YXNtL2Jvb3RpbmZvLmg+Ci0jaW5jbHVkZSA8YXNtL2RlYnVnLmg+CiAKICNpbmNsdWRlIDxhc20vZW1tYTJyaC9lbW1hMnJoLmg+CiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9wY2kvcGNpLmMgYi9hcmNoL21pcHMvcGNpL3BjaS5jCmluZGV4IGM3ZmU2ZWMuLmEzNzdlOWQgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9wY2kvcGNpLmMKKysrIGIvYXJjaC9taXBzL3BjaS9wY2kuYwpAQCAtMzQsNiArMzQsOCBAQAogdW5zaWduZWQgbG9uZyBQQ0lCSU9TX01JTl9JTwk9IDB4MDAwMDsKIHVuc2lnbmVkIGxvbmcgUENJQklPU19NSU5fTUVNCT0gMDsKIAorc3RhdGljIGludCBwY2lfaW5pdGlhbGl6ZWQ7CisKIC8qCiAgKiBXZSBuZWVkIHRvIGF2b2lkIGNvbGxpc2lvbnMgd2l0aCBgbWlycm9yZWQnIFZHQSBwb3J0cwogICogYW5kIG90aGVyIHN0cmFuZ2UgSVNBIGhhcmR3YXJlLCBzbyB3ZSBhbHdheXMgd2FudCB0aGUKQEAgLTc0LDYgKzc2LDQyIEBACiAJcmVzLT5zdGFydCA9IHN0YXJ0OwogfQogCitzdGF0aWMgdm9pZCBfX2RldmluaXQgcGNpYmlvc19zY2FuYnVzKHN0cnVjdCBwY2lfY29udHJvbGxlciAqaG9zZSkKK3sKKwlzdGF0aWMgaW50IG5leHRfYnVzbm87CisJc3RhdGljIGludCBuZWVkX2RvbWFpbl9pbmZvOworCXN0cnVjdCBwY2lfYnVzICpidXM7CisKKwlpZiAoIWhvc2UtPmlvbW11KQorCQlQQ0lfRE1BX0JVU19JU19QSFlTID0gMTsKKworCWlmIChob3NlLT5nZXRfYnVzbm8gJiYgcGNpX3Byb2JlX29ubHkpCisJCW5leHRfYnVzbm8gPSAoKmhvc2UtPmdldF9idXNubykoKTsKKworCWJ1cyA9IHBjaV9zY2FuX2J1cyhuZXh0X2J1c25vLCBob3NlLT5wY2lfb3BzLCBob3NlKTsKKwlob3NlLT5idXMgPSBidXM7CisKKwluZWVkX2RvbWFpbl9pbmZvID0gbmVlZF9kb21haW5faW5mbyB8fCBob3NlLT5pbmRleDsKKwlob3NlLT5uZWVkX2RvbWFpbl9pbmZvID0gbmVlZF9kb21haW5faW5mbzsKKwlpZiAoYnVzKSB7CisJCW5leHRfYnVzbm8gPSBidXMtPnN1Ym9yZGluYXRlICsgMTsKKwkJLyogRG9uJ3QgYWxsb3cgOC1iaXQgYnVzIG51bWJlciBvdmVyZmxvdyBpbnNpZGUgdGhlIGhvc2UgLQorCQkgICByZXNlcnZlIHNvbWUgc3BhY2UgZm9yIGJyaWRnZXMuICovCisJCWlmIChuZXh0X2J1c25vID4gMjI0KSB7CisJCQluZXh0X2J1c25vID0gMDsKKwkJCW5lZWRfZG9tYWluX2luZm8gPSAxOworCQl9CisKKwkJaWYgKCFwY2lfcHJvYmVfb25seSkgeworCQkJcGNpX2J1c19zaXplX2JyaWRnZXMoYnVzKTsKKwkJCXBjaV9idXNfYXNzaWduX3Jlc291cmNlcyhidXMpOworCQkJcGNpX2VuYWJsZV9icmlkZ2VzKGJ1cyk7CisJCX0KKwl9Cit9CisKK3N0YXRpYyBERUZJTkVfTVVURVgocGNpX3NjYW5fbXV0ZXgpOworCiB2b2lkIF9fZGV2aW5pdCByZWdpc3Rlcl9wY2lfY29udHJvbGxlcihzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgKmhvc2UpCiB7CiAJaWYgKHJlcXVlc3RfcmVzb3VyY2UoJmlvbWVtX3Jlc291cmNlLCBob3NlLT5tZW1fcmVzb3VyY2UpIDwgMCkKQEAgLTkzLDYgKzEzMSwxNyBAQAogCQlwcmludGsoS0VSTl9XQVJOSU5HCiAJCSAgICAgICAicmVnaXN0ZXJpbmcgUENJIGNvbnRyb2xsZXIgd2l0aCBpb19tYXBfYmFzZSB1bnNldFxuIik7CiAJfQorCisJLyoKKwkgKiBTY2FuIHRoZSBidXMgaWYgaXQgaXMgcmVnaXN0ZXIgYWZ0ZXIgdGhlIFBDSSBzdWJzeXN0ZW0KKwkgKiBpbml0aWFsaXphdGlvbi4KKwkgKi8KKwlpZiAocGNpX2luaXRpYWxpemVkKSB7CisJCW11dGV4X2xvY2soJnBjaV9zY2FuX211dGV4KTsKKwkJcGNpYmlvc19zY2FuYnVzKGhvc2UpOworCQltdXRleF91bmxvY2soJnBjaV9zY2FuX211dGV4KTsKKwl9CisKIAlyZXR1cm47CiAKIG91dDoKQEAgLTEyNSwzOCArMTc0LDE1IEBACiBzdGF0aWMgaW50IF9faW5pdCBwY2liaW9zX2luaXQodm9pZCkKIHsKIAlzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgKmhvc2U7Ci0Jc3RydWN0IHBjaV9idXMgKmJ1czsKLQlpbnQgbmV4dF9idXNubzsKLQlpbnQgbmVlZF9kb21haW5faW5mbyA9IDA7CiAKIAkvKiBTY2FuIGFsbCBvZiB0aGUgcmVjb3JkZWQgUENJIGNvbnRyb2xsZXJzLiAgKi8KLQlmb3IgKG5leHRfYnVzbm8gPSAwLCBob3NlID0gaG9zZV9oZWFkOyBob3NlOyBob3NlID0gaG9zZS0+bmV4dCkgeworCWZvciAoaG9zZSA9IGhvc2VfaGVhZDsgaG9zZTsgaG9zZSA9IGhvc2UtPm5leHQpCisJCXBjaWJpb3Nfc2NhbmJ1cyhob3NlKTsKIAotCQlpZiAoIWhvc2UtPmlvbW11KQotCQkJUENJX0RNQV9CVVNfSVNfUEhZUyA9IDE7Ci0KLQkJaWYgKGhvc2UtPmdldF9idXNubyAmJiBwY2lfcHJvYmVfb25seSkKLQkJCW5leHRfYnVzbm8gPSAoKmhvc2UtPmdldF9idXNubykoKTsKLQotCQlidXMgPSBwY2lfc2Nhbl9idXMobmV4dF9idXNubywgaG9zZS0+cGNpX29wcywgaG9zZSk7Ci0JCWhvc2UtPmJ1cyA9IGJ1czsKLQkJbmVlZF9kb21haW5faW5mbyA9IG5lZWRfZG9tYWluX2luZm8gfHwgaG9zZS0+aW5kZXg7Ci0JCWhvc2UtPm5lZWRfZG9tYWluX2luZm8gPSBuZWVkX2RvbWFpbl9pbmZvOwotCQlpZiAoYnVzKSB7Ci0JCQluZXh0X2J1c25vID0gYnVzLT5zdWJvcmRpbmF0ZSArIDE7Ci0JCQkvKiBEb24ndCBhbGxvdyA4LWJpdCBidXMgbnVtYmVyIG92ZXJmbG93IGluc2lkZSB0aGUgaG9zZSAtCi0JCQkgICByZXNlcnZlIHNvbWUgc3BhY2UgZm9yIGJyaWRnZXMuICovCi0JCQlpZiAobmV4dF9idXNubyA+IDIyNCkgewotCQkJCW5leHRfYnVzbm8gPSAwOwotCQkJCW5lZWRfZG9tYWluX2luZm8gPSAxOwotCQkJfQotCQl9Ci0JfQotCi0JaWYgKCFwY2lfcHJvYmVfb25seSkKLQkJcGNpX2Fzc2lnbl91bmFzc2lnbmVkX3Jlc291cmNlcygpOwogCXBjaV9maXh1cF9pcnFzKGNvbW1vbl9zd2l6emxlLCBwY2liaW9zX21hcF9pcnEpOwogCisJcGNpX2luaXRpYWxpemVkID0gMTsKKwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvcG1jLXNpZXJyYS95b3NlbWl0ZS9zZXR1cC5jIGIvYXJjaC9taXBzL3BtYy1zaWVycmEveW9zZW1pdGUvc2V0dXAuYwppbmRleCA2NTM3ZDkwLi4yZDNjMGRjIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvcG1jLXNpZXJyYS95b3NlbWl0ZS9zZXR1cC5jCisrKyBiL2FyY2gvbWlwcy9wbWMtc2llcnJhL3lvc2VtaXRlL3NldHVwLmMKQEAgLTc5LDE0ICs3OSwxNCBAQAogCS8qIFN0b3AgdGhlIHVwZGF0ZSB0byB0aGUgdGltZSAqLwogCW00OHQzN19iYXNlLT5jb250cm9sID0gMHg0MDsKIAotCXllYXIgPSBCQ0QyQklOKG00OHQzN19iYXNlLT55ZWFyKTsKLQl5ZWFyICs9IEJDRDJCSU4obTQ4dDM3X2Jhc2UtPmNlbnR1cnkpICogMTAwOworCXllYXIgPSBiY2QyYmluKG00OHQzN19iYXNlLT55ZWFyKTsKKwl5ZWFyICs9IGJjZDJiaW4obTQ4dDM3X2Jhc2UtPmNlbnR1cnkpICogMTAwOwogCi0JbW9udGggPSBCQ0QyQklOKG00OHQzN19iYXNlLT5tb250aCk7Ci0JZGF5ID0gQkNEMkJJTihtNDh0MzdfYmFzZS0+ZGF0ZSk7Ci0JaG91ciA9IEJDRDJCSU4obTQ4dDM3X2Jhc2UtPmhvdXIpOwotCW1pbiA9IEJDRDJCSU4obTQ4dDM3X2Jhc2UtPm1pbik7Ci0Jc2VjID0gQkNEMkJJTihtNDh0MzdfYmFzZS0+c2VjKTsKKwltb250aCA9IGJjZDJiaW4obTQ4dDM3X2Jhc2UtPm1vbnRoKTsKKwlkYXkgPSBiY2QyYmluKG00OHQzN19iYXNlLT5kYXRlKTsKKwlob3VyID0gYmNkMmJpbihtNDh0MzdfYmFzZS0+aG91cik7CisJbWluID0gYmNkMmJpbihtNDh0MzdfYmFzZS0+bWluKTsKKwlzZWMgPSBiY2QyYmluKG00OHQzN19iYXNlLT5zZWMpOwogCiAJLyogU3RhcnQgdGhlIHVwZGF0ZSB0byB0aGUgdGltZSBhZ2FpbiAqLwogCW00OHQzN19iYXNlLT5jb250cm9sID0gMHgwMDsKQEAgLTExMywyMiArMTEzLDIyIEBACiAJbTQ4dDM3X2Jhc2UtPmNvbnRyb2wgPSAweDgwOwogCiAJLyogeWVhciAqLwotCW00OHQzN19iYXNlLT55ZWFyID0gQklOMkJDRCh0bS50bV95ZWFyICUgMTAwKTsKLQltNDh0MzdfYmFzZS0+Y2VudHVyeSA9IEJJTjJCQ0QodG0udG1feWVhciAvIDEwMCk7CisJbTQ4dDM3X2Jhc2UtPnllYXIgPSBiaW4yYmNkKHRtLnRtX3llYXIgJSAxMDApOworCW00OHQzN19iYXNlLT5jZW50dXJ5ID0gYmluMmJjZCh0bS50bV95ZWFyIC8gMTAwKTsKIAogCS8qIG1vbnRoICovCi0JbTQ4dDM3X2Jhc2UtPm1vbnRoID0gQklOMkJDRCh0bS50bV9tb24pOworCW00OHQzN19iYXNlLT5tb250aCA9IGJpbjJiY2QodG0udG1fbW9uKTsKIAogCS8qIGRheSAqLwotCW00OHQzN19iYXNlLT5kYXRlID0gQklOMkJDRCh0bS50bV9tZGF5KTsKKwltNDh0MzdfYmFzZS0+ZGF0ZSA9IGJpbjJiY2QodG0udG1fbWRheSk7CiAKIAkvKiBob3VyL21pbi9zZWMgKi8KLQltNDh0MzdfYmFzZS0+aG91ciA9IEJJTjJCQ0QodG0udG1faG91cik7Ci0JbTQ4dDM3X2Jhc2UtPm1pbiA9IEJJTjJCQ0QodG0udG1fbWluKTsKLQltNDh0MzdfYmFzZS0+c2VjID0gQklOMkJDRCh0bS50bV9zZWMpOworCW00OHQzN19iYXNlLT5ob3VyID0gYmluMmJjZCh0bS50bV9ob3VyKTsKKwltNDh0MzdfYmFzZS0+bWluID0gYmluMmJjZCh0bS50bV9taW4pOworCW00OHQzN19iYXNlLT5zZWMgPSBiaW4yYmNkKHRtLnRtX3NlYyk7CiAKIAkvKiBkYXkgb2Ygd2VlayAtLSBub3QgcmVhbGx5IHVzZWQsIGJ1dCBsZXQncyBrZWVwIGl0IHVwLXRvLWRhdGUgKi8KLQltNDh0MzdfYmFzZS0+ZGF5ID0gQklOMkJDRCh0bS50bV93ZGF5ICsgMSk7CisJbTQ4dDM3X2Jhc2UtPmRheSA9IGJpbjJiY2QodG0udG1fd2RheSArIDEpOwogCiAJLyogZGlzYWJsZSB3cml0aW5nICovCiAJbTQ4dDM3X2Jhc2UtPmNvbnRyb2wgPSAweDAwOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3JiNTMyL3RpbWUuYyBiL2FyY2gvbWlwcy9yYjUzMi90aW1lLmMKaW5kZXggOGU3YTQ2OC4uMTM3N2Q1OSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3JiNTMyL3RpbWUuYworKysgYi9hcmNoL21pcHMvcmI1MzIvdGltZS5jCkBAIC0yOCw3ICsyOCw2IEBACiAjaW5jbHVkZSA8bGludXgvdGltZXguaD4KIAogI2luY2x1ZGUgPGFzbS9taXBzcmVncy5oPgotI2luY2x1ZGUgPGFzbS9kZWJ1Zy5oPgogI2luY2x1ZGUgPGFzbS90aW1lLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gtcmMzMjQzNC9yYzMyNDM0Lmg+CiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9zZ2ktaXAyMi9pcDIyLXBsYXRmb3JtLmMgYi9hcmNoL21pcHMvc2dpLWlwMjIvaXAyMi1wbGF0Zm9ybS5jCmluZGV4IDUyNDg2YzRkLi5kZWRkYmYwIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvc2dpLWlwMjIvaXAyMi1wbGF0Zm9ybS5jCisrKyBiL2FyY2gvbWlwcy9zZ2ktaXAyMi9pcDIyLXBsYXRmb3JtLmMKQEAgLTE5MiwzICsxOTIsMTggQEAKIH0KIAogZGV2aWNlX2luaXRjYWxsKHNnaV9idXR0b25fZGV2aW5pdCk7CisKK3N0YXRpYyBpbnQgX19pbml0IHNnaV9kczEyODZfZGV2aW5pdCh2b2lkKQoreworCXN0cnVjdCByZXNvdXJjZSByZXM7CisKKwltZW1zZXQoJnJlcywgMCwgc2l6ZW9mKHJlcykpOworCXJlcy5zdGFydCA9IEhQQzNfQ0hJUDBfQkFTRSArIG9mZnNldG9mKHN0cnVjdCBocGMzX3JlZ3MsIHJ0Y3JlZ3MpOworCXJlcy5lbmQgPSByZXMuc3RhcnQgKyBzaXplb2YoaHBjM2MwLT5ydGNyZWdzKSAtIDE7CisJcmVzLmZsYWdzID0gSU9SRVNPVVJDRV9NRU07CisKKwlyZXR1cm4gSVNfRVJSKHBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcl9zaW1wbGUoInJ0Yy1kczEyODYiLCAtMSwKKwkJCQkJCSAgICAgICZyZXMsIDEpKTsKK30KKworZGV2aWNlX2luaXRjYWxsKHNnaV9kczEyODZfZGV2aW5pdCk7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvc2dpLWlwMjIvaXAyMi1zZXR1cC5jIGIvYXJjaC9taXBzL3NnaS1pcDIyL2lwMjItc2V0dXAuYwppbmRleCA4OTZhMWVmLi5iOWE5MzEzIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvc2dpLWlwMjIvaXAyMi1zZXR1cC5jCisrKyBiL2FyY2gvbWlwcy9zZ2ktaXAyMi9pcDIyLXNldHVwLmMKQEAgLTQsNyArNCw2IEBACiAgKiBDb3B5cmlnaHQgKEMpIDE5OTYgRGF2aWQgUy4gTWlsbGVyIChkbUBlbmdyLnNnaS5jb20pCiAgKiBDb3B5cmlnaHQgKEMpIDE5OTcsIDE5OTggUmFsZiBCYWVjaGxlIChyYWxmQGdudS5vcmcpCiAgKi8KLSNpbmNsdWRlIDxsaW51eC9kczEyODYuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgva2Rldl90Lmg+CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvc2dpLWlwMjIvaXAyMi10aW1lLmMgYi9hcmNoL21pcHMvc2dpLWlwMjIvaXAyMi10aW1lLmMKaW5kZXggMTBlNTA1NC4uM2RjYjI3ZSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3NnaS1pcDIyL2lwMjItdGltZS5jCisrKyBiL2FyY2gvbWlwcy9zZ2ktaXAyMi9pcDIyLXRpbWUuYwpAQCAtMTAsNyArMTAsNiBAQAogICogQ29weXJpZ2h0IChDKSAyMDAzLCAwNiBSYWxmIEJhZWNobGUgKHJhbGZAbGludXgtbWlwcy5vcmcpCiAgKi8KICNpbmNsdWRlIDxsaW51eC9iY2QuaD4KLSNpbmNsdWRlIDxsaW51eC9kczEyODYuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvaXJxLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CkBAIC0yOSw2OSArMjgsNiBAQAogI2luY2x1ZGUgPGFzbS9zZ2kvaHBjMy5oPgogI2luY2x1ZGUgPGFzbS9zZ2kvaXAyMi5oPgogCi0vKgotICogTm90ZSB0aGF0IG1rdGltZSB1c2VzIG1vbnRoIGZyb20gMSB0byAxMiB3aGlsZSBydGNfdGltZV90b190bQotICogdXNlcyAwIHRvIDExLgotICovCi11bnNpZ25lZCBsb25nIHJlYWRfcGVyc2lzdGVudF9jbG9jayh2b2lkKQotewotCXVuc2lnbmVkIGludCB5cnMsIG1vbiwgZGF5LCBocnMsIG1pbiwgc2VjOwotCXVuc2lnbmVkIGludCBzYXZlX2NvbnRyb2w7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZydGNfbG9jaywgZmxhZ3MpOwotCXNhdmVfY29udHJvbCA9IGhwYzNjMC0+cnRjcmVnc1tSVENfQ01EXSAmIDB4ZmY7Ci0JaHBjM2MwLT5ydGNyZWdzW1JUQ19DTURdID0gc2F2ZV9jb250cm9sIHwgUlRDX1RFOwotCi0Jc2VjID0gQkNEMkJJTihocGMzYzAtPnJ0Y3JlZ3NbUlRDX1NFQ09ORFNdICYgMHhmZik7Ci0JbWluID0gQkNEMkJJTihocGMzYzAtPnJ0Y3JlZ3NbUlRDX01JTlVURVNdICYgMHhmZik7Ci0JaHJzID0gQkNEMkJJTihocGMzYzAtPnJ0Y3JlZ3NbUlRDX0hPVVJTXSAmIDB4M2YpOwotCWRheSA9IEJDRDJCSU4oaHBjM2MwLT5ydGNyZWdzW1JUQ19EQVRFXSAmIDB4ZmYpOwotCW1vbiA9IEJDRDJCSU4oaHBjM2MwLT5ydGNyZWdzW1JUQ19NT05USF0gJiAweDFmKTsKLQl5cnMgPSBCQ0QyQklOKGhwYzNjMC0+cnRjcmVnc1tSVENfWUVBUl0gJiAweGZmKTsKLQotCWhwYzNjMC0+cnRjcmVnc1tSVENfQ01EXSA9IHNhdmVfY29udHJvbDsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZydGNfbG9jaywgZmxhZ3MpOwotCi0JaWYgKHlycyA8IDQ1KQotCQl5cnMgKz0gMzA7Ci0JaWYgKCh5cnMgKz0gNDApIDwgNzApCi0JCXlycyArPSAxMDA7Ci0KLQlyZXR1cm4gbWt0aW1lKHlycyArIDE5MDAsIG1vbiwgZGF5LCBocnMsIG1pbiwgc2VjKTsKLX0KLQotaW50IHJ0Y19taXBzX3NldF90aW1lKHVuc2lnbmVkIGxvbmcgdGltKQotewotCXN0cnVjdCBydGNfdGltZSB0bTsKLQl1bnNpZ25lZCBpbnQgc2F2ZV9jb250cm9sOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlydGNfdGltZV90b190bSh0aW0sICZ0bSk7Ci0KLQl0bS50bV9tb24gKz0gMTsJCS8qIHRtX21vbiBzdGFydHMgYXQgemVybyAqLwotCXRtLnRtX3llYXIgLT0gNDA7Ci0JaWYgKHRtLnRtX3llYXIgPj0gMTAwKQotCQl0bS50bV95ZWFyIC09IDEwMDsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZydGNfbG9jaywgZmxhZ3MpOwotCXNhdmVfY29udHJvbCA9IGhwYzNjMC0+cnRjcmVnc1tSVENfQ01EXSAmIDB4ZmY7Ci0JaHBjM2MwLT5ydGNyZWdzW1JUQ19DTURdID0gc2F2ZV9jb250cm9sIHwgUlRDX1RFOwotCi0JaHBjM2MwLT5ydGNyZWdzW1JUQ19ZRUFSXSA9IEJJTjJCQ0QodG0udG1feWVhcik7Ci0JaHBjM2MwLT5ydGNyZWdzW1JUQ19NT05USF0gPSBCSU4yQkNEKHRtLnRtX21vbik7Ci0JaHBjM2MwLT5ydGNyZWdzW1JUQ19EQVRFXSA9IEJJTjJCQ0QodG0udG1fbWRheSk7Ci0JaHBjM2MwLT5ydGNyZWdzW1JUQ19IT1VSU10gPSBCSU4yQkNEKHRtLnRtX2hvdXIpOwotCWhwYzNjMC0+cnRjcmVnc1tSVENfTUlOVVRFU10gPSBCSU4yQkNEKHRtLnRtX21pbik7Ci0JaHBjM2MwLT5ydGNyZWdzW1JUQ19TRUNPTkRTXSA9IEJJTjJCQ0QodG0udG1fc2VjKTsKLQlocGMzYzAtPnJ0Y3JlZ3NbUlRDX0hVTkRSRURUSF9TRUNPTkRdID0gMDsKLQotCWhwYzNjMC0+cnRjcmVnc1tSVENfQ01EXSA9IHNhdmVfY29udHJvbDsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZydGNfbG9jaywgZmxhZ3MpOwotCi0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyB1bnNpZ25lZCBsb25nIGRvc2FtcGxlKHZvaWQpCiB7CiAJdTMyIGN0MCwgY3QxOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3NnaS1pcDI3L2lwMjctdGltZXIuYyBiL2FyY2gvbWlwcy9zZ2ktaXAyNy9pcDI3LXRpbWVyLmMKaW5kZXggOGI0ZTg1NC4uMTMyN2MyNyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3NnaS1pcDI3L2lwMjctdGltZXIuYworKysgYi9hcmNoL21pcHMvc2dpLWlwMjcvaXAyNy10aW1lci5jCkBAIC0xMywxMiArMTMsMTIgQEAKICNpbmNsdWRlIDxsaW51eC90aW1lLmg+CiAjaW5jbHVkZSA8bGludXgvdGltZXguaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogCiAjaW5jbHVkZSA8YXNtL3RpbWUuaD4KICNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgogI2luY2x1ZGUgPGFzbS9zZ2lhbGliLmg+CiAjaW5jbHVkZSA8YXNtL3NuL2lvYzMuaD4KLSNpbmNsdWRlIDxhc20vbTQ4dDM1Lmg+CiAjaW5jbHVkZSA8YXNtL3NuL2tsY29uZmlnLmg+CiAjaW5jbHVkZSA8YXNtL3NuL2FyY2guaD4KICNpbmNsdWRlIDxhc20vc24vYWRkcnMuaD4KQEAgLTI4LDUxICsyOCw2IEBACiAKICNkZWZpbmUgVElDS19TSVpFICh0aWNrX25zZWMgLyAxMDAwKQogCi0jaWYgMAotc3RhdGljIGludCBzZXRfcnRjX21tc3ModW5zaWduZWQgbG9uZyBub3d0aW1lKQotewotCWludCByZXR2YWwgPSAwOwotCWludCByZWFsX3NlY29uZHMsIHJlYWxfbWludXRlcywgY21vc19taW51dGVzOwotCXN0cnVjdCBtNDh0MzVfcnRjICpydGM7Ci0JbmFzaWRfdCBuaWQ7Ci0KLQluaWQgPSBnZXRfbmFzaWQoKTsKLQlydGMgPSAoc3RydWN0IG00OHQzNV9ydGMgKikoS0xfQ09ORklHX0NIX0NPTlNfSU5GTyhuaWQpLT5tZW1vcnlfYmFzZSArCi0JCQkJCQkJSU9DM19CWVRFQlVTX0RFVjApOwotCi0JcnRjLT5jb250cm9sIHw9IE00OFQzNV9SVENfUkVBRDsKLQljbW9zX21pbnV0ZXMgPSBCQ0QyQklOKHJ0Yy0+bWluKTsKLQlydGMtPmNvbnRyb2wgJj0gfk00OFQzNV9SVENfUkVBRDsKLQotCS8qCi0JICogU2luY2Ugd2UncmUgb25seSBhZGp1c3RpbmcgbWludXRlcyBhbmQgc2Vjb25kcywgZG9uJ3QgaW50ZXJmZXJlIHdpdGgKLQkgKiBob3VyIG92ZXJmbG93LiBUaGlzIGF2b2lkcyBtZXNzaW5nIHdpdGggdW5rbm93biB0aW1lIHpvbmVzIGJ1dAotCSAqIHJlcXVpcmVzIHlvdXIgUlRDIG5vdCB0byBiZSBvZmYgYnkgbW9yZSB0aGFuIDE1IG1pbnV0ZXMKLQkgKi8KLQlyZWFsX3NlY29uZHMgPSBub3d0aW1lICUgNjA7Ci0JcmVhbF9taW51dGVzID0gbm93dGltZSAvIDYwOwotCWlmICgoKGFicyhyZWFsX21pbnV0ZXMgLSBjbW9zX21pbnV0ZXMpICsgMTUpLzMwKSAmIDEpCi0JCXJlYWxfbWludXRlcyArPSAzMDsJLyogY29ycmVjdCBmb3IgaGFsZiBob3VyIHRpbWUgem9uZSAqLwotCXJlYWxfbWludXRlcyAlPSA2MDsKLQotCWlmIChhYnMocmVhbF9taW51dGVzIC0gY21vc19taW51dGVzKSA8IDMwKSB7Ci0JCXJlYWxfc2Vjb25kcyA9IEJJTjJCQ0QocmVhbF9zZWNvbmRzKTsKLQkJcmVhbF9taW51dGVzID0gQklOMkJDRChyZWFsX21pbnV0ZXMpOwotCQlydGMtPmNvbnRyb2wgfD0gTTQ4VDM1X1JUQ19TRVQ7Ci0JCXJ0Yy0+c2VjID0gcmVhbF9zZWNvbmRzOwotCQlydGMtPm1pbiA9IHJlYWxfbWludXRlczsKLQkJcnRjLT5jb250cm9sICY9IH5NNDhUMzVfUlRDX1NFVDsKLQl9IGVsc2UgewotCQlwcmludGsoS0VSTl9XQVJOSU5HCi0JCSAgICAgICAic2V0X3J0Y19tbXNzOiBjYW4ndCB1cGRhdGUgZnJvbSAlZCB0byAlZFxuIiwKLQkJICAgICAgIGNtb3NfbWludXRlcywgcmVhbF9taW51dGVzKTsKLQkJcmV0dmFsID0gLTE7Ci0JfQotCi0JcmV0dXJuIHJldHZhbDsKLX0KLSNlbmRpZgotCiAvKiBJbmNsdWRlcyBmb3IgaW9jM19pbml0KCkuICAqLwogI2luY2x1ZGUgPGFzbS9zbi90eXBlcy5oPgogI2luY2x1ZGUgPGFzbS9zbi9zbjAvYWRkcnMuaD4KQEAgLTgwLDM3ICszNSw2IEBACiAjaW5jbHVkZSA8YXNtL3NuL3NuMC9odWJpby5oPgogI2luY2x1ZGUgPGFzbS9wY2kvYnJpZGdlLmg+CiAKLXVuc2lnbmVkIGxvbmcgcmVhZF9wZXJzaXN0ZW50X2Nsb2NrKHZvaWQpCi17Ci0gICAgICAgIHVuc2lnbmVkIGludCB5ZWFyLCBtb250aCwgZGF0ZSwgaG91ciwgbWluLCBzZWM7Ci0Jc3RydWN0IG00OHQzNV9ydGMgKnJ0YzsKLQluYXNpZF90IG5pZDsKLQotCW5pZCA9IGdldF9uYXNpZCgpOwotCXJ0YyA9IChzdHJ1Y3QgbTQ4dDM1X3J0YyAqKShLTF9DT05GSUdfQ0hfQ09OU19JTkZPKG5pZCktPm1lbW9yeV9iYXNlICsKLQkJCQkJCQlJT0MzX0JZVEVCVVNfREVWMCk7Ci0KLQlydGMtPmNvbnRyb2wgfD0gTTQ4VDM1X1JUQ19SRUFEOwotCXNlYyA9IHJ0Yy0+c2VjOwotCW1pbiA9IHJ0Yy0+bWluOwotCWhvdXIgPSBydGMtPmhvdXI7Ci0JZGF0ZSA9IHJ0Yy0+ZGF0ZTsKLQltb250aCA9IHJ0Yy0+bW9udGg7Ci0JeWVhciA9IHJ0Yy0+eWVhcjsKLQlydGMtPmNvbnRyb2wgJj0gfk00OFQzNV9SVENfUkVBRDsKLQotICAgICAgICBzZWMgPSBCQ0QyQklOKHNlYyk7Ci0gICAgICAgIG1pbiA9IEJDRDJCSU4obWluKTsKLSAgICAgICAgaG91ciA9IEJDRDJCSU4oaG91cik7Ci0gICAgICAgIGRhdGUgPSBCQ0QyQklOKGRhdGUpOwotICAgICAgICBtb250aCA9IEJDRDJCSU4obW9udGgpOwotICAgICAgICB5ZWFyID0gQkNEMkJJTih5ZWFyKTsKLQotICAgICAgICB5ZWFyICs9IDE5NzA7Ci0KLSAgICAgICAgcmV0dXJuIG1rdGltZSh5ZWFyLCBtb250aCwgZGF0ZSwgaG91ciwgbWluLCBzZWMpOwotfQotCiBzdGF0aWMgdm9pZCBlbmFibGVfcnRfaXJxKHVuc2lnbmVkIGludCBpcnEpCiB7CiB9CkBAIC0yODYsNiArMjEwLDcgQEAKIAogdm9pZCBfX2NwdWluaXQgaHViX3J0Y19pbml0KGNub2RlaWRfdCBjbm9kZSkKIHsKKwogCS8qCiAJICogV2Ugb25seSBuZWVkIHRvIGluaXRpYWxpemUgdGhlIGN1cnJlbnQgbm9kZS4KIAkgKiBJZiB0aGlzIGlzIG5vdCB0aGUgY3VycmVudCBub2RlIHRoZW4gaXQgaXMgYSBjcHVsZXNzCkBAIC0zMDEsMyArMjI2LDIzIEBACiAJCUxPQ0FMX0hVQl9TKFBJX1JUX1BFTkRfQiwgMCk7CiAJfQogfQorCitzdGF0aWMgaW50IF9faW5pdCBzZ2lfaXAyN19ydGNfZGV2aW5pdCh2b2lkKQoreworCXN0cnVjdCByZXNvdXJjZSByZXM7CisKKwltZW1zZXQoJnJlcywgMCwgc2l6ZW9mKHJlcykpOworCXJlcy5zdGFydCA9IFhQSFlTQUREUihLTF9DT05GSUdfQ0hfQ09OU19JTkZPKG1hc3Rlcl9uYXNpZCktPm1lbW9yeV9iYXNlICsKKwkJCSAgICAgIElPQzNfQllURUJVU19ERVYwKTsKKwlyZXMuZW5kID0gcmVzLnN0YXJ0ICsgMzI3Njc7CisJcmVzLmZsYWdzID0gSU9SRVNPVVJDRV9NRU07CisKKwlyZXR1cm4gSVNfRVJSKHBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcl9zaW1wbGUoInJ0Yy1tNDh0MzUiLCAtMSwKKwkJCQkJCSAgICAgICZyZXMsIDEpKTsKK30KKworLyoKKyAqIGtsdWRnZSBtYWtlIHRoaXMgYSBkZXZpY2VfaW5pdGNhbGwgYWZ0ZXIgaW9jMyByZXNvdXJjZSBjb25mbGljdHMKKyAqIGFyZSByZXNvbHZlZAorICovCitsYXRlX2luaXRjYWxsKHNnaV9pcDI3X3J0Y19kZXZpbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9zZ2ktaXAzMi9pcDMyLXBsYXRmb3JtLmMgYi9hcmNoL21pcHMvc2dpLWlwMzIvaXAzMi1wbGF0Zm9ybS5jCmluZGV4IDNkNjM3MjEuLjUxMWU5ZmYgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9zZ2ktaXAzMi9pcDMyLXBsYXRmb3JtLmMKKysrIGIvYXJjaC9taXBzL3NnaS1pcDMyL2lwMzItcGxhdGZvcm0uYwpAQCAtOTAsNiArOTAsMjIgQEAKIAogZGV2aWNlX2luaXRjYWxsKHNnaW8yYnRuc19kZXZpbml0KTsKIAorc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzZ2lvMl9jbW9zX3JzcmNbXSA9IHsKKwl7CisJCS5zdGFydCA9IDB4NzAsCisJCS5lbmQgICA9IDB4NzEsCisJCS5mbGFncyA9IElPUkVTT1VSQ0VfSU8KKwl9Cit9OworCitzdGF0aWMgX19pbml0IGludCBzZ2lvMl9jbW9zX2RldmluaXQodm9pZCkKK3sKKwlyZXR1cm4gSVNfRVJSKHBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcl9zaW1wbGUoInJ0Y19jbW9zIiwgLTEsCisJCQkJCQkgICAgICBzZ2lvMl9jbW9zX3JzcmMsIDEpKTsKK30KKworZGV2aWNlX2luaXRjYWxsKHNnaW8yX2Ntb3NfZGV2aW5pdCk7CisKIE1PRFVMRV9BVVRIT1IoIlJhbGYgQmFlY2hsZSA8cmFsZkBsaW51eC1taXBzLm9yZz4iKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIE1PRFVMRV9ERVNDUklQVElPTigiODI1MCBVQVJUIHByb2JlIGRyaXZlciBmb3IgU0dJIElQMzIgYWthIE8yIik7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvc2dpLWlwMzIvaXAzMi1zZXR1cC5jIGIvYXJjaC9taXBzL3NnaS1pcDMyL2lwMzItc2V0dXAuYwppbmRleCAxMDI0YmY0Li5jNWE1ZDRhIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvc2dpLWlwMzIvaXAzMi1zZXR1cC5jCisrKyBiL2FyY2gvbWlwcy9zZ2ktaXAzMi9pcDMyLXNldHVwLmMKQEAgLTYyLDExICs2Miw2IEBACiB9CiAjZW5kaWYKIAotdW5zaWduZWQgbG9uZyByZWFkX3BlcnNpc3RlbnRfY2xvY2sodm9pZCkKLXsKLQlyZXR1cm4gbWMxNDY4MThfZ2V0X2Ntb3NfdGltZSgpOwotfQotCiAvKiBBbiBhcmJpdHJhcnkgdGltZTsgdGhpcyBjYW4gYmUgZGVjcmVhc2VkIGlmIHJlbGlhYmlsaXR5IGxvb2tzIGdvb2QgKi8KICNkZWZpbmUgV0FJVF9NUyAxMAogCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvc2lieXRlL2NvbW1vbi9zYl90YnByb2YuYyBiL2FyY2gvbWlwcy9zaWJ5dGUvY29tbW9uL3NiX3RicHJvZi5jCmluZGV4IDY2ZTNlM2YuLjYzN2ExOTQgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9zaWJ5dGUvY29tbW9uL3NiX3RicHJvZi5jCisrKyBiL2FyY2gvbWlwcy9zaWJ5dGUvY29tbW9uL3NiX3RicHJvZi5jCkBAIC01NzYsOCArNTc2LDcgQEAKIAogCXRiX2NsYXNzID0gdGJjOwogCi0JZGV2ID0gZGV2aWNlX2NyZWF0ZV9kcnZkYXRhKHRiYywgTlVMTCwgTUtERVYoU0JQUk9GX1RCX01BSk9SLCAwKSwKLQkJCQkgICAgTlVMTCwgInRiIik7CisJZGV2ID0gZGV2aWNlX2NyZWF0ZSh0YmMsIE5VTEwsIE1LREVWKFNCUFJPRl9UQl9NQUpPUiwgMCksIE5VTEwsICJ0YiIpOwogCWlmIChJU19FUlIoZGV2KSkgewogCQllcnIgPSBQVFJfRVJSKGRldik7CiAJCWdvdG8gb3V0X2NsYXNzOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3NpYnl0ZS9zd2FybS9ydGNfbTQxdDgxLmMgYi9hcmNoL21pcHMvc2lieXRlL3N3YXJtL3J0Y19tNDF0ODEuYwppbmRleCAyNmZiZmY0Li5iNzMyNjAwIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvc2lieXRlL3N3YXJtL3J0Y19tNDF0ODEuYworKysgYi9hcmNoL21pcHMvc2lieXRlL3N3YXJtL3J0Y19tNDF0ODEuYwpAQCAtMTU2LDMyICsxNTYsMzIgQEAKIAkgKi8KIAogCXNwaW5fbG9ja19pcnFzYXZlKCZydGNfbG9jaywgZmxhZ3MpOwotCXRtLnRtX3NlYyA9IEJJTjJCQ0QodG0udG1fc2VjKTsKKwl0bS50bV9zZWMgPSBiaW4yYmNkKHRtLnRtX3NlYyk7CiAJbTQxdDgxX3dyaXRlKE00MVQ4MVJFR19TQywgdG0udG1fc2VjKTsKIAotCXRtLnRtX21pbiA9IEJJTjJCQ0QodG0udG1fbWluKTsKKwl0bS50bV9taW4gPSBiaW4yYmNkKHRtLnRtX21pbik7CiAJbTQxdDgxX3dyaXRlKE00MVQ4MVJFR19NTiwgdG0udG1fbWluKTsKIAotCXRtLnRtX2hvdXIgPSBCSU4yQkNEKHRtLnRtX2hvdXIpOworCXRtLnRtX2hvdXIgPSBiaW4yYmNkKHRtLnRtX2hvdXIpOwogCXRtLnRtX2hvdXIgPSAodG0udG1faG91ciAmIDB4M2YpIHwgKG00MXQ4MV9yZWFkKE00MVQ4MVJFR19IUikgJiAweGMwKTsKIAltNDF0ODFfd3JpdGUoTTQxVDgxUkVHX0hSLCB0bS50bV9ob3VyKTsKIAogCS8qIHRtX3dkYXkgc3RhcnRzIGZyb20gMCB0byA2ICovCiAJaWYgKHRtLnRtX3dkYXkgPT0gMCkgdG0udG1fd2RheSA9IDc7Ci0JdG0udG1fd2RheSA9IEJJTjJCQ0QodG0udG1fd2RheSk7CisJdG0udG1fd2RheSA9IGJpbjJiY2QodG0udG1fd2RheSk7CiAJbTQxdDgxX3dyaXRlKE00MVQ4MVJFR19EWSwgdG0udG1fd2RheSk7CiAKLQl0bS50bV9tZGF5ID0gQklOMkJDRCh0bS50bV9tZGF5KTsKKwl0bS50bV9tZGF5ID0gYmluMmJjZCh0bS50bV9tZGF5KTsKIAltNDF0ODFfd3JpdGUoTTQxVDgxUkVHX0RULCB0bS50bV9tZGF5KTsKIAogCS8qIHRtX21vbiBzdGFydHMgZnJvbSAwLCAqaWNrKiAqLwogCXRtLnRtX21vbiArKzsKLQl0bS50bV9tb24gPSBCSU4yQkNEKHRtLnRtX21vbik7CisJdG0udG1fbW9uID0gYmluMmJjZCh0bS50bV9tb24pOwogCW00MXQ4MV93cml0ZShNNDFUODFSRUdfTU8sIHRtLnRtX21vbik7CiAKIAkvKiB3ZSBkb24ndCBkbyBjZW50dXJ5LCBldmVyeXRoaW5nIGlzIGJleW9uZCAyMDAwICovCiAJdG0udG1feWVhciAlPSAxMDA7Ci0JdG0udG1feWVhciA9IEJJTjJCQ0QodG0udG1feWVhcik7CisJdG0udG1feWVhciA9IGJpbjJiY2QodG0udG1feWVhcik7CiAJbTQxdDgxX3dyaXRlKE00MVQ4MVJFR19ZUiwgdG0udG1feWVhcik7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcnRjX2xvY2ssIGZsYWdzKTsKIApAQCAtMjA5LDEyICsyMDksMTIgQEAKIAl5ZWFyID0gbTQxdDgxX3JlYWQoTTQxVDgxUkVHX1lSKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZydGNfbG9jaywgZmxhZ3MpOwogCi0Jc2VjID0gQkNEMkJJTihzZWMpOwotCW1pbiA9IEJDRDJCSU4obWluKTsKLQlob3VyID0gQkNEMkJJTihob3VyKTsKLQlkYXkgPSBCQ0QyQklOKGRheSk7Ci0JbW9uID0gQkNEMkJJTihtb24pOwotCXllYXIgPSBCQ0QyQklOKHllYXIpOworCXNlYyA9IGJjZDJiaW4oc2VjKTsKKwltaW4gPSBiY2QyYmluKG1pbik7CisJaG91ciA9IGJjZDJiaW4oaG91cik7CisJZGF5ID0gYmNkMmJpbihkYXkpOworCW1vbiA9IGJjZDJiaW4obW9uKTsKKwl5ZWFyID0gYmNkMmJpbih5ZWFyKTsKIAogCXllYXIgKz0gMjAwMDsKIApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3NpYnl0ZS9zd2FybS9ydGNfeGljb3IxMjQxLmMgYi9hcmNoL21pcHMvc2lieXRlL3N3YXJtL3J0Y194aWNvcjEyNDEuYwppbmRleCBmZjNlNWRhLi40NDM4YjIxIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvc2lieXRlL3N3YXJtL3J0Y194aWNvcjEyNDEuYworKysgYi9hcmNoL21pcHMvc2lieXRlL3N3YXJtL3J0Y194aWNvcjEyNDEuYwpAQCAtMTI0LDE4ICsxMjQsMTggQEAKIAl4aWNvcl93cml0ZShYMTI0MVJFR19TUiwgWDEyNDFSRUdfU1JfV0VMIHwgWDEyNDFSRUdfU1JfUldFTCk7CiAKIAkvKiB0cml2aWFsIG9uZXMgKi8KLQl0bS50bV9zZWMgPSBCSU4yQkNEKHRtLnRtX3NlYyk7CisJdG0udG1fc2VjID0gYmluMmJjZCh0bS50bV9zZWMpOwogCXhpY29yX3dyaXRlKFgxMjQxUkVHX1NDLCB0bS50bV9zZWMpOwogCi0JdG0udG1fbWluID0gQklOMkJDRCh0bS50bV9taW4pOworCXRtLnRtX21pbiA9IGJpbjJiY2QodG0udG1fbWluKTsKIAl4aWNvcl93cml0ZShYMTI0MVJFR19NTiwgdG0udG1fbWluKTsKIAotCXRtLnRtX21kYXkgPSBCSU4yQkNEKHRtLnRtX21kYXkpOworCXRtLnRtX21kYXkgPSBiaW4yYmNkKHRtLnRtX21kYXkpOwogCXhpY29yX3dyaXRlKFgxMjQxUkVHX0RULCB0bS50bV9tZGF5KTsKIAogCS8qIHRtX21vbiBzdGFydHMgZnJvbSAwLCAqaWNrKiAqLwogCXRtLnRtX21vbiArKzsKLQl0bS50bV9tb24gPSBCSU4yQkNEKHRtLnRtX21vbik7CisJdG0udG1fbW9uID0gYmluMmJjZCh0bS50bV9tb24pOwogCXhpY29yX3dyaXRlKFgxMjQxUkVHX01PLCB0bS50bV9tb24pOwogCiAJLyogeWVhciBpcyBzcGxpdCAqLwpAQCAtMTQ4LDcgKzE0OCw3IEBACiAJdG1wID0geGljb3JfcmVhZChYMTI0MVJFR19IUik7CiAJaWYgKHRtcCAmIFgxMjQxUkVHX0hSX01JTCkgewogCQkvKiAyNCBob3VyIGZvcm1hdCAqLwotCQl0bS50bV9ob3VyID0gQklOMkJDRCh0bS50bV9ob3VyKTsKKwkJdG0udG1faG91ciA9IGJpbjJiY2QodG0udG1faG91cik7CiAJCXRtcCA9ICh0bXAgJiB+MHgzZikgfCAodG0udG1faG91ciAmIDB4M2YpOwogCX0gZWxzZSB7CiAJCS8qIDEyIGhvdXIgZm9ybWF0LCB3aXRoIDB4MiBmb3IgcG0gKi8KQEAgLTE1Nyw3ICsxNTcsNyBAQAogCQkJdG1wIHw9IDB4MjA7CiAJCQl0bS50bV9ob3VyIC09IDEyOwogCQl9Ci0JCXRtLnRtX2hvdXIgPSBCSU4yQkNEKHRtLnRtX2hvdXIpOworCQl0bS50bV9ob3VyID0gYmluMmJjZCh0bS50bV9ob3VyKTsKIAkJdG1wIHw9IHRtLnRtX2hvdXI7CiAJfQogCXhpY29yX3dyaXRlKFgxMjQxUkVHX0hSLCB0bXApOwpAQCAtMTkxLDEzICsxOTEsMTMgQEAKIAl5MmsgPSB4aWNvcl9yZWFkKFgxMjQxUkVHX1kySyk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcnRjX2xvY2ssIGZsYWdzKTsKIAotCXNlYyA9IEJDRDJCSU4oc2VjKTsKLQltaW4gPSBCQ0QyQklOKG1pbik7Ci0JaG91ciA9IEJDRDJCSU4oaG91cik7Ci0JZGF5ID0gQkNEMkJJTihkYXkpOwotCW1vbiA9IEJDRDJCSU4obW9uKTsKLQl5ZWFyID0gQkNEMkJJTih5ZWFyKTsKLQl5MmsgPSBCQ0QyQklOKHkyayk7CisJc2VjID0gYmNkMmJpbihzZWMpOworCW1pbiA9IGJjZDJiaW4obWluKTsKKwlob3VyID0gYmNkMmJpbihob3VyKTsKKwlkYXkgPSBiY2QyYmluKGRheSk7CisJbW9uID0gYmNkMmJpbihtb24pOworCXllYXIgPSBiY2QyYmluKHllYXIpOworCXkyayA9IGJjZDJiaW4oeTJrKTsKIAogCXllYXIgKz0gKHkyayAqIDEwMCk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvbW4xMDMwMC9LY29uZmlnIGIvYXJjaC9tbjEwMzAwL0tjb25maWcKaW5kZXggZTg1NjIxOC4uOWE5ZjQzMyAxMDA2NDQKLS0tIGEvYXJjaC9tbjEwMzAwL0tjb25maWcKKysrIGIvYXJjaC9tbjEwMzAwL0tjb25maWcKQEAgLTUzLDkgKzUzLDYgQEAKIGNvbmZpZyBBUkNIX0hBU19JTE9HMl9VMzIKIAlkZWZfYm9vbCB5CiAKLWNvbmZpZyBBUkNIX1NVUFBPUlRTX0FPVVQKLQlkZWZfYm9vbCBuCi0KICMgVXNlIHRoZSBnZW5lcmljIGludGVycnVwdCBoYW5kbGluZyBjb2RlIGluIGtlcm5lbC9pcnEvCiBjb25maWcgR0VORVJJQ19IQVJESVJRUwogCWRlZl9ib29sIHkKQEAgLTcxLDYgKzY4LDggQEAKIAogc291cmNlICJpbml0L0tjb25maWciCiAKK3NvdXJjZSAia2VybmVsL0tjb25maWcuZnJlZXplciIKKwogCiBtZW51ICJNYXRzdXNoaXRhIE1OMTAzMDAgc3lzdGVtIHNldHVwIgogCmRpZmYgLS1naXQgYS9hcmNoL21uMTAzMDAva2VybmVsL3J0Yy5jIGIvYXJjaC9tbjEwMzAwL2tlcm5lbC9ydGMuYwppbmRleCAwNDJmNzkyLi43OTc4NDcwIDEwMDY0NAotLS0gYS9hcmNoL21uMTAzMDAva2VybmVsL3J0Yy5jCisrKyBiL2FyY2gvbW4xMDMwMC9rZXJuZWwvcnRjLmMKQEAgLTY3LDcgKzY3LDcgQEAKIAogCWNtb3NfbWludXRlcyA9IENNT1NfUkVBRChSVENfTUlOVVRFUyk7CiAJaWYgKCEoc2F2ZV9jb250cm9sICYgUlRDX0RNX0JJTkFSWSkgfHwgUlRDX0FMV0FZU19CQ0QpCi0JCUJDRF9UT19CSU4oY21vc19taW51dGVzKTsKKwkJY21vc19taW51dGVzID0gYmNkMmJpbihjbW9zX21pbnV0ZXMpOwogCiAJLyoKIAkgKiBzaW5jZSB3ZSdyZSBvbmx5IGFkanVzdGluZyBtaW51dGVzIGFuZCBzZWNvbmRzLApAQCAtODQsOCArODQsOCBAQAogCiAJaWYgKGFicyhyZWFsX21pbnV0ZXMgLSBjbW9zX21pbnV0ZXMpIDwgMzApIHsKIAkJaWYgKCEoc2F2ZV9jb250cm9sICYgUlRDX0RNX0JJTkFSWSkgfHwgUlRDX0FMV0FZU19CQ0QpIHsKLQkJCUJJTl9UT19CQ0QocmVhbF9zZWNvbmRzKTsKLQkJCUJJTl9UT19CQ0QocmVhbF9taW51dGVzKTsKKwkJCXJlYWxfc2Vjb25kcyA9IGJpbjJiY2QocmVhbF9zZWNvbmRzKTsKKwkJCXJlYWxfbWludXRlcyA9IGJpbjJiY2QocmVhbF9taW51dGVzKTsKIAkJfQogCQlDTU9TX1dSSVRFKHJlYWxfc2Vjb25kcywgUlRDX1NFQ09ORFMpOwogCQlDTU9TX1dSSVRFKHJlYWxfbWludXRlcywgUlRDX01JTlVURVMpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wYXJpc2MvS2NvbmZpZyBiL2FyY2gvcGFyaXNjL0tjb25maWcKaW5kZXggYTdkNGZkMzUuLjJiZDFmNmUgMTAwNjQ0Ci0tLSBhL2FyY2gvcGFyaXNjL0tjb25maWcKKysrIGIvYXJjaC9wYXJpc2MvS2NvbmZpZwpAQCAtNzYsOSArNzYsNiBAQAogCWJvb2wKIAlkZWZhdWx0IHkKIAotY29uZmlnIEFSQ0hfU1VQUE9SVFNfQU9VVAotCWRlZl9ib29sIHkKLQogIyB1bmxlc3MgeW91IHdhbnQgdG8gaW1wbGVtZW50IEFDUEkgb24gUEEtUklTQyAuLi4gOy0pCiBjb25maWcgUE0KIAlib29sCkBAIC05Myw2ICs5MCw4IEBACiAKIHNvdXJjZSAiaW5pdC9LY29uZmlnIgogCitzb3VyY2UgImtlcm5lbC9LY29uZmlnLmZyZWV6ZXIiCisKIAogbWVudSAiUHJvY2Vzc29yIHR5cGUgYW5kIGZlYXR1cmVzIgogCmRpZmYgLS1naXQgYS9hcmNoL3BhcmlzYy9rZXJuZWwvYmluZm10X2VsZjMyLmMgYi9hcmNoL3BhcmlzYy9rZXJuZWwvYmluZm10X2VsZjMyLmMKaW5kZXggZWNiMTBhNC4uZjYxNjkyZCAxMDA2NDQKLS0tIGEvYXJjaC9wYXJpc2Mva2VybmVsL2JpbmZtdF9lbGYzMi5jCisrKyBiL2FyY2gvcGFyaXNjL2tlcm5lbC9iaW5mbXRfZWxmMzIuYwpAQCAtODUsNyArODUsNyBAQAogICogY291bGQgc2V0IGEgcHJvY2Vzc29yIGRlcGVuZGVudCBmbGFnIGluIHRoZSB0aHJlYWRfc3RydWN0LgogICovCiAKLSNkZWZpbmUgU0VUX1BFUlNPTkFMSVRZKGV4LCBpYmNzMikgXAorI2RlZmluZSBTRVRfUEVSU09OQUxJVFkoZXgpIFwKIAlzZXRfdGhyZWFkX2ZsYWcoVElGXzMyQklUKTsgXAogCWN1cnJlbnQtPnRocmVhZC5tYXBfYmFzZSA9IERFRkFVTFRfTUFQX0JBU0UzMjsgXAogCWN1cnJlbnQtPnRocmVhZC50YXNrX3NpemUgPSBERUZBVUxUX1RBU0tfU0laRTMyIFwKZGlmZiAtLWdpdCBhL2FyY2gvcGFyaXNjL2tlcm5lbC9zeXNfcGFyaXNjMzIuYyBiL2FyY2gvcGFyaXNjL2tlcm5lbC9zeXNfcGFyaXNjMzIuYwppbmRleCA3MWVmZDZhLi4wODM4MTU1IDEwMDY0NAotLS0gYS9hcmNoL3BhcmlzYy9rZXJuZWwvc3lzX3BhcmlzYzMyLmMKKysrIGIvYXJjaC9wYXJpc2Mva2VybmVsL3N5c19wYXJpc2MzMi5jCkBAIC0xNzksMTExICsxNzksNiBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQKLXB1dF9jb21wYXRfdGltZXZhbChzdHJ1Y3QgY29tcGF0X3RpbWV2YWwgX191c2VyICp1LCBzdHJ1Y3QgdGltZXZhbCAqdCkKLXsKLQlzdHJ1Y3QgY29tcGF0X3RpbWV2YWwgdDMyOwotCXQzMi50dl9zZWMgPSB0LT50dl9zZWM7Ci0JdDMyLnR2X3VzZWMgPSB0LT50dl91c2VjOwotCXJldHVybiBjb3B5X3RvX3VzZXIodSwgJnQzMiwgc2l6ZW9mIHQzMik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgbG9uZyBnZXRfdHMzMihzdHJ1Y3QgdGltZXNwZWMgKm8sIHN0cnVjdCBjb21wYXRfdGltZXZhbCBfX3VzZXIgKmkpCi17Ci0JbG9uZyB1c2VjOwotCi0JaWYgKF9fZ2V0X3VzZXIoby0+dHZfc2VjLCAmaS0+dHZfc2VjKSkKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0JaWYgKF9fZ2V0X3VzZXIodXNlYywgJmktPnR2X3VzZWMpKQotCQlyZXR1cm4gLUVGQVVMVDsKLQlvLT50dl9uc2VjID0gdXNlYyAqIDEwMDA7Ci0JcmV0dXJuIDA7Ci19Ci0KLWFzbWxpbmthZ2UgaW50Ci1zeXMzMl9nZXR0aW1lb2ZkYXkoc3RydWN0IGNvbXBhdF90aW1ldmFsIF9fdXNlciAqdHYsIHN0cnVjdCB0aW1lem9uZSBfX3VzZXIgKnR6KQotewotICAgIGV4dGVybiB2b2lkIGRvX2dldHRpbWVvZmRheShzdHJ1Y3QgdGltZXZhbCAqdHYpOwotCi0gICAgaWYgKHR2KSB7Ci0JICAgIHN0cnVjdCB0aW1ldmFsIGt0djsKLQkgICAgZG9fZ2V0dGltZW9mZGF5KCZrdHYpOwotCSAgICBpZiAocHV0X2NvbXBhdF90aW1ldmFsKHR2LCAma3R2KSkKLQkJICAgIHJldHVybiAtRUZBVUxUOwotICAgIH0KLSAgICBpZiAodHopIHsKLQkgICAgZXh0ZXJuIHN0cnVjdCB0aW1lem9uZSBzeXNfdHo7Ci0JICAgIGlmIChjb3B5X3RvX3VzZXIodHosICZzeXNfdHosIHNpemVvZihzeXNfdHopKSkKLQkJICAgIHJldHVybiAtRUZBVUxUOwotICAgIH0KLSAgICByZXR1cm4gMDsKLX0KLQotYXNtbGlua2FnZSAKLWludCBzeXMzMl9zZXR0aW1lb2ZkYXkoc3RydWN0IGNvbXBhdF90aW1ldmFsIF9fdXNlciAqdHYsIHN0cnVjdCB0aW1lem9uZSBfX3VzZXIgKnR6KQotewotCXN0cnVjdCB0aW1lc3BlYyBrdHM7Ci0Jc3RydWN0IHRpbWV6b25lIGt0ejsKLQotIAlpZiAodHYpIHsKLQkJaWYgKGdldF90czMyKCZrdHMsIHR2KSkKLQkJCXJldHVybiAtRUZBVUxUOwotCX0KLQlpZiAodHopIHsKLQkJaWYgKGNvcHlfZnJvbV91c2VyKCZrdHosIHR6LCBzaXplb2Yoa3R6KSkpCi0JCQlyZXR1cm4gLUVGQVVMVDsKLQl9Ci0KLQlyZXR1cm4gZG9fc3lzX3NldHRpbWVvZmRheSh0diA/ICZrdHMgOiBOVUxMLCB0eiA/ICZrdHogOiBOVUxMKTsKLX0KLQotaW50IGNwX2NvbXBhdF9zdGF0KHN0cnVjdCBrc3RhdCAqc3RhdCwgc3RydWN0IGNvbXBhdF9zdGF0IF9fdXNlciAqc3RhdGJ1ZikKLXsKLQljb21wYXRfaW5vX3QgaW5vOwotCWludCBlcnI7Ci0KLQlpZiAoc3RhdC0+c2l6ZSA+IE1BWF9OT05fTEZTIHx8ICFuZXdfdmFsaWRfZGV2KHN0YXQtPmRldikgfHwKLQkgICAgIW5ld192YWxpZF9kZXYoc3RhdC0+cmRldikpCi0JCXJldHVybiAtRU9WRVJGTE9XOwotCi0JaW5vID0gc3RhdC0+aW5vOwotCWlmIChzaXplb2YoaW5vKSA8IHNpemVvZihzdGF0LT5pbm8pICYmIGlubyAhPSBzdGF0LT5pbm8pCi0JCXJldHVybiAtRU9WRVJGTE9XOwotCi0JZXJyICA9IHB1dF91c2VyKG5ld19lbmNvZGVfZGV2KHN0YXQtPmRldiksICZzdGF0YnVmLT5zdF9kZXYpOwotCWVyciB8PSBwdXRfdXNlcihpbm8sICZzdGF0YnVmLT5zdF9pbm8pOwotCWVyciB8PSBwdXRfdXNlcihzdGF0LT5tb2RlLCAmc3RhdGJ1Zi0+c3RfbW9kZSk7Ci0JZXJyIHw9IHB1dF91c2VyKHN0YXQtPm5saW5rLCAmc3RhdGJ1Zi0+c3RfbmxpbmspOwotCWVyciB8PSBwdXRfdXNlcigwLCAmc3RhdGJ1Zi0+c3RfcmVzZXJ2ZWQxKTsKLQllcnIgfD0gcHV0X3VzZXIoMCwgJnN0YXRidWYtPnN0X3Jlc2VydmVkMik7Ci0JZXJyIHw9IHB1dF91c2VyKG5ld19lbmNvZGVfZGV2KHN0YXQtPnJkZXYpLCAmc3RhdGJ1Zi0+c3RfcmRldik7Ci0JZXJyIHw9IHB1dF91c2VyKHN0YXQtPnNpemUsICZzdGF0YnVmLT5zdF9zaXplKTsKLQllcnIgfD0gcHV0X3VzZXIoc3RhdC0+YXRpbWUudHZfc2VjLCAmc3RhdGJ1Zi0+c3RfYXRpbWUpOwotCWVyciB8PSBwdXRfdXNlcihzdGF0LT5hdGltZS50dl9uc2VjLCAmc3RhdGJ1Zi0+c3RfYXRpbWVfbnNlYyk7Ci0JZXJyIHw9IHB1dF91c2VyKHN0YXQtPm10aW1lLnR2X3NlYywgJnN0YXRidWYtPnN0X210aW1lKTsKLQllcnIgfD0gcHV0X3VzZXIoc3RhdC0+bXRpbWUudHZfbnNlYywgJnN0YXRidWYtPnN0X210aW1lX25zZWMpOwotCWVyciB8PSBwdXRfdXNlcihzdGF0LT5jdGltZS50dl9zZWMsICZzdGF0YnVmLT5zdF9jdGltZSk7Ci0JZXJyIHw9IHB1dF91c2VyKHN0YXQtPmN0aW1lLnR2X25zZWMsICZzdGF0YnVmLT5zdF9jdGltZV9uc2VjKTsKLQllcnIgfD0gcHV0X3VzZXIoc3RhdC0+Ymxrc2l6ZSwgJnN0YXRidWYtPnN0X2Jsa3NpemUpOwotCWVyciB8PSBwdXRfdXNlcihzdGF0LT5ibG9ja3MsICZzdGF0YnVmLT5zdF9ibG9ja3MpOwotCWVyciB8PSBwdXRfdXNlcigwLCAmc3RhdGJ1Zi0+X191bnVzZWQxKTsKLQllcnIgfD0gcHV0X3VzZXIoMCwgJnN0YXRidWYtPl9fdW51c2VkMik7Ci0JZXJyIHw9IHB1dF91c2VyKDAsICZzdGF0YnVmLT5fX3VudXNlZDMpOwotCWVyciB8PSBwdXRfdXNlcigwLCAmc3RhdGJ1Zi0+X191bnVzZWQ0KTsKLQllcnIgfD0gcHV0X3VzZXIoMCwgJnN0YXRidWYtPl9fdW51c2VkNSk7Ci0JZXJyIHw9IHB1dF91c2VyKDAsICZzdGF0YnVmLT5zdF9mc3R5cGUpOyAvKiBub3QgYXZhaWwgKi8KLQllcnIgfD0gcHV0X3VzZXIoMCwgJnN0YXRidWYtPnN0X3JlYWxkZXYpOyAvKiBub3QgYXZhaWwgKi8KLQllcnIgfD0gcHV0X3VzZXIoMCwgJnN0YXRidWYtPnN0X2Jhc2Vtb2RlKTsgLyogbm90IGF2YWlsICovCi0JZXJyIHw9IHB1dF91c2VyKDAsICZzdGF0YnVmLT5zdF9zcGFyZXNob3J0KTsKLQllcnIgfD0gcHV0X3VzZXIoc3RhdC0+dWlkLCAmc3RhdGJ1Zi0+c3RfdWlkKTsKLQllcnIgfD0gcHV0X3VzZXIoc3RhdC0+Z2lkLCAmc3RhdGJ1Zi0+c3RfZ2lkKTsKLQllcnIgfD0gcHV0X3VzZXIoMCwgJnN0YXRidWYtPnN0X3NwYXJlNFswXSk7Ci0JZXJyIHw9IHB1dF91c2VyKDAsICZzdGF0YnVmLT5zdF9zcGFyZTRbMV0pOwotCWVyciB8PSBwdXRfdXNlcigwLCAmc3RhdGJ1Zi0+c3Rfc3BhcmU0WzJdKTsKLQotCXJldHVybiBlcnI7Ci19Ci0KIC8qKiogY29waWVkIGZyb20gbWlwczY0ICoqKi8KIC8qCiAgKiBPb28sIG5hc3R5LiAgV2UgbmVlZCBoZXJlIHRvIGZyb2IgMzItYml0IHVuc2lnbmVkIGxvbmdzIHRvCmRpZmYgLS1naXQgYS9hcmNoL3BhcmlzYy9rZXJuZWwvc3lzY2FsbF90YWJsZS5TIGIvYXJjaC9wYXJpc2Mva2VybmVsL3N5c2NhbGxfdGFibGUuUwppbmRleCA2YjVhYzM4Li5jN2U1OWY1IDEwMDY0NAotLS0gYS9hcmNoL3BhcmlzYy9rZXJuZWwvc3lzY2FsbF90YWJsZS5TCisrKyBiL2FyY2gvcGFyaXNjL2tlcm5lbC9zeXNjYWxsX3RhYmxlLlMKQEAgLTE0OSw4ICsxNDksOCBAQAogCUVOVFJZX0NPTVAoZ2V0cmxpbWl0KQogCUVOVFJZX0NPTVAoZ2V0cnVzYWdlKQogCS8qIHN0cnVjdCB0aW1ldmFsIGFuZCB0aW1lem9uZSBhcmUgbWF5YmU/PyBjb25zaXN0ZW50IHdpZGUgYW5kIG5hcnJvdyAqLwotCUVOVFJZX0RJRkYoZ2V0dGltZW9mZGF5KQotCUVOVFJZX0RJRkYoc2V0dGltZW9mZGF5KQorCUVOVFJZX0NPTVAoZ2V0dGltZW9mZGF5KQorCUVOVFJZX0NPTVAoc2V0dGltZW9mZGF5KQogCUVOVFJZX1NBTUUoZ2V0Z3JvdXBzKQkJLyogODAgKi8KIAlFTlRSWV9TQU1FKHNldGdyb3VwcykKIAkvKiBzdHJ1Y3Qgc29ja2V0YWRkci4uLiAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL0tjb25maWcgYi9hcmNoL3Bvd2VycGMvS2NvbmZpZwppbmRleCA1ODdkYTVlLi45MzkxMTk5IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvS2NvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvS2NvbmZpZwpAQCAtMjIsNiArMjIsOSBAQAogY29uZmlnIFBQQ19NRVJHRQogCWRlZl9ib29sIHkKIAorY29uZmlnIEFSQ0hfUEhZU19BRERSX1RfNjRCSVQKKyAgICAgICBkZWZfYm9vbCBQUEM2NCB8fCBQSFlTXzY0QklUCisKIGNvbmZpZyBNTVUKIAlib29sCiAJZGVmYXVsdCB5CkBAIC0yMjcsNiArMjMwLDggQEAKIAogc291cmNlICJpbml0L0tjb25maWciCiAKK3NvdXJjZSAia2VybmVsL0tjb25maWcuZnJlZXplciIKKwogc291cmNlICJhcmNoL3Bvd2VycGMvc3lzZGV2L0tjb25maWciCiBzb3VyY2UgImFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvS2NvbmZpZyIKIApAQCAtNDE1LDggKzQyMCwxMSBAQAogCiBjb25maWcgRk9SQ0VfTUFYX1pPTkVPUkRFUgogCWludCAiTWF4aW11bSB6b25lIG9yZGVyIgorCXJhbmdlIDkgNjQgaWYgUFBDXzY0S19QQUdFUwogCWRlZmF1bHQgIjkiIGlmIFBQQ182NEtfUEFHRVMKKwlyYW5nZSAxMyA2NCBpZiBQUEM2NCAmJiAhUFBDXzY0S19QQUdFUwogCWRlZmF1bHQgIjEzIiBpZiBQUEM2NCAmJiAhUFBDXzY0S19QQUdFUworCXJhbmdlIDExIDY0CiAJZGVmYXVsdCAiMTEiCiAJaGVscAogCSAgVGhlIGtlcm5lbCBtZW1vcnkgYWxsb2NhdG9yIGRpdmlkZXMgcGh5c2ljYWxseSBjb250aWd1b3VzIG1lbW9yeQpAQCAtODA2LDYgKzgxNCwxOSBAQAogZW5kbWVudQogCiBpZiBQUEM2NAorY29uZmlnIFJFTE9DQVRBQkxFCisJYm9vbCAiQnVpbGQgYSByZWxvY2F0YWJsZSBrZXJuZWwiCisJaGVscAorCSAgVGhpcyBidWlsZHMgYSBrZXJuZWwgaW1hZ2UgdGhhdCBpcyBjYXBhYmxlIG9mIHJ1bm5pbmcgYW55d2hlcmUKKwkgIGluIHRoZSBSTUEgKHJlYWwgbWVtb3J5IGFyZWEpIGF0IGFueSAxNmstYWxpZ25lZCBiYXNlIGFkZHJlc3MuCisJICBUaGUga2VybmVsIGlzIGxpbmtlZCBhcyBhIHBvc2l0aW9uLWluZGVwZW5kZW50IGV4ZWN1dGFibGUgKFBJRSkKKwkgIGFuZCBjb250YWlucyBkeW5hbWljIHJlbG9jYXRpb25zIHdoaWNoIGFyZSBwcm9jZXNzZWQgZWFybHkKKwkgIGluIHRoZSBib290dXAgcHJvY2Vzcy4KKworCSAgT25lIHVzZSBpcyBmb3IgdGhlIGtleGVjIG9uIHBhbmljIGNhc2Ugd2hlcmUgdGhlIHJlY292ZXJ5IGtlcm5lbAorCSAgbXVzdCBsaXZlIGF0IGEgZGlmZmVyZW50IHBoeXNpY2FsIGFkZHJlc3MgdGhhbiB0aGUgcHJpbWFyeQorCSAga2VybmVsLgorCiBjb25maWcgUEFHRV9PRkZTRVQKIAloZXgKIAlkZWZhdWx0ICIweGMwMDAwMDAwMDAwMDAwMDAiCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvS2NvbmZpZy5kZWJ1ZyBiL2FyY2gvcG93ZXJwYy9LY29uZmlnLmRlYnVnCmluZGV4IDRlYmM1MmEuLjE1ZWIyNzggMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9LY29uZmlnLmRlYnVnCisrKyBiL2FyY2gvcG93ZXJwYy9LY29uZmlnLmRlYnVnCkBAIC01MSw2ICs1MSwxMSBAQAogCWRlcGVuZHMgb24gREVCVUdfS0VSTkVMCiAJZGVmYXVsdCBuCiAKK2NvbmZpZyBNU0lfQklUTUFQX1NFTEZURVNUCisJYm9vbCAiUnVuIHNlbGYtdGVzdHMgb2YgdGhlIE1TSSBiaXRtYXAgY29kZS4iCisJZGVwZW5kcyBvbiBERUJVR19LRVJORUwKKwlkZWZhdWx0IG4KKwogY29uZmlnIFhNT04KIAlib29sICJJbmNsdWRlIHhtb24ga2VybmVsIGRlYnVnZ2VyIgogCWRlcGVuZHMgb24gREVCVUdfS0VSTkVMCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvTWFrZWZpbGUgYi9hcmNoL3Bvd2VycGMvTWFrZWZpbGUKaW5kZXggYzZiZTE5ZS4uMjRkZDFhMyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL01ha2VmaWxlCisrKyBiL2FyY2gvcG93ZXJwYy9NYWtlZmlsZQpAQCAtNjMsNyArNjMsOSBAQAogb3ZlcnJpZGUgQVIJOj0gR05VVEFSR0VUPWVsZiQoQ09ORklHX1dPUkRfU0laRSktcG93ZXJwYyAkKEFSKQogZW5kaWYKIAotTERGTEFHU192bWxpbnV4CTo9IC1Cc3RhdGljCitMREZMQUdTX3ZtbGludXgteXkgOj0gLUJzdGF0aWMKK0xERkxBR1Nfdm1saW51eC0kKENPTkZJR19QUEM2NCkkKENPTkZJR19SRUxPQ0FUQUJMRSkgOj0gLXBpZQorTERGTEFHU192bWxpbnV4CTo9ICQoTERGTEFHU192bWxpbnV4LXl5KQogCiBDRkxBR1MtJChDT05GSUdfUFBDNjQpCTo9IC1tbWluaW1hbC10b2MgLW10cmFjZWJhY2s9bm9uZSAgLW1jYWxsLWFpeGRlc2MKIENGTEFHUy0kKENPTkZJR19QUEMzMikJOj0gLWZmaXhlZC1yMiAtbW11bHRpcGxlCkBAIC0xMDIsNyArMTA0LDEwIEBACiBLQlVJTERfQ0ZMQUdTICs9ICQoY2FsbCBjYy1vcHRpb24sLW1uby1hbHRpdmVjKQogCiAjIE5vIFNQRSBpbnN0cnVjdGlvbiB3aGVuIGJ1aWxkaW5nIGtlcm5lbAorIyAoV2UgdXNlIGFsbCBhdmFpbGFibGUgb3B0aW9ucyB0byBoZWxwIHNlbWktYnJva2VuIGNvbXBpbGVycykKIEtCVUlMRF9DRkxBR1MgKz0gJChjYWxsIGNjLW9wdGlvbiwtbW5vLXNwZSkKK0tCVUlMRF9DRkxBR1MgKz0gJChjYWxsIGNjLW9wdGlvbiwtbXNwZT1ubykKK0tCVUlMRF9DRkxBR1MgKz0gJChjYWxsIGNjLW9wdGlvbiwtbWFiaT1uby1zcGUpCiAKICMgRW5hYmxlIHVuaXQtYXQtYS10aW1lIG1vZGUgd2hlbiBwb3NzaWJsZS4gSXQgc2hyaW5rcyB0aGUKICMga2VybmVsIGNvbnNpZGVyYWJseS4KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L01ha2VmaWxlIGIvYXJjaC9wb3dlcnBjL2Jvb3QvTWFrZWZpbGUKaW5kZXggNjVkMWE4NC4uYWFjMTQwNiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvTWFrZWZpbGUKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvTWFrZWZpbGUKQEAgLTMxMCw4ICszMTAsMTEgQEAKICQob2JqKS92bWxpbnV4LnN0cmlwOiB2bWxpbnV4CiAJJChTVFJJUCkgLXMgLVIgLmNvbW1lbnQgJDwgLW8gJEAKIAorIyBUaGUgaXNlcmllcyBoeXBlcnZpc29yIHdvbid0IHRha2UgYW4gRVRfRFlOIGV4ZWN1dGFibGUsIHNvIHRoaXMKKyMgY2hhbmdlcyB0aGUgdHlwZSAoYnl0ZSAxNykgaW4gdGhlIGZpbGUgdG8gRVRfRVhFQyAoMikuCiAkKG9iaikvekltYWdlLmlzZXJpZXM6IHZtbGludXgKIAkkKFNUUklQKSAtcyAtUiAuY29tbWVudCAkPCAtbyAkQAorCXByaW50ZiAiXHgwMiIgfCBkZCBvZj0kQCBjb252PW5vdHJ1bmMgYnM9MSBzZWVrPTE3CiAKICQob2JqKS91SW1hZ2U6IHZtbGludXggJCh3cmFwcGVyYml0cykKIAkkKGNhbGwgaWZfY2hhbmdlZCx3cmFwLHVib290KQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvYWRkbm90ZS5jIGIvYXJjaC9wb3dlcnBjL2Jvb3QvYWRkbm90ZS5jCmluZGV4IGIxZTU2MTEuLmRjYzlhYjIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2FkZG5vdGUuYworKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9hZGRub3RlLmMKQEAgLTExLDcgKzExLDEyIEBACiAgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KICAqIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAgKgotICogVXNhZ2U6IGFkZG5vdGUgekltYWdlCisgKiBVc2FnZTogYWRkbm90ZSB6SW1hZ2UgW25vdGUuZWxmXQorICoKKyAqIElmIG5vdGUuZWxmIGlzIHN1cHBsaWVkLCBpdCBpcyB0aGUgbmFtZSBvZiBhbiBFTEYgZmlsZSB0aGF0IGNvbnRhaW5zCisgKiBhbiBSUEEgbm90ZSB0byB1c2UgaW5zdGVhZCBvZiB0aGUgYnVpbHQtaW4gb25lLiAgQWx0ZXJuYXRpdmVseSwgdGhlCisgKiBub3RlLmVsZiBmaWxlIG1heSBiZSBlbXB0eSwgaW4gd2hpY2ggY2FzZSB0aGUgYnVpbHQtaW4gUlBBIG5vdGUgaXMKKyAqIHVzZWQgKHRoaXMgaXMgdG8gc2ltcGxpZnkgaG93IHRoaXMgaXMgaW52b2tlZCBmcm9tIHRoZSB3cmFwcGVyIHNjcmlwdCkuCiAgKi8KICNpbmNsdWRlIDxzdGRpby5oPgogI2luY2x1ZGUgPHN0ZGxpYi5oPgpAQCAtNDMsMjcgKzQ4LDI5IEBACiAgKi8KICNkZWZpbmUgTl9SUEFfREVTQ1IJOAogdW5zaWduZWQgaW50IHJwYW5vdGVbTl9SUEFfREVTQ1JdID0gewotCTAsCQkJLyogbHBhcmFmZmluaXR5ICovCi0JNjQsCQkJLyogbWluX3Jtb19zaXplICovCisJMSwJCQkvKiBscGFyYWZmaW5pdHkgKi8KKwkxMjgsCQkJLyogbWluX3Jtb19zaXplICovCiAJMCwJCQkvKiBtaW5fcm1vX3BlcmNlbnQgKi8KLQk0MCwJCQkvKiBtYXhfcGZ0X3NpemUgKi8KKwk0NiwJCQkvKiBtYXhfcGZ0X3NpemUgKi8KIAkxLAkJCS8qIHNwbHBhciAqLwogCS0xLAkJCS8qIG1pbl9sb2FkICovCi0JMCwJCQkvKiBuZXdfbWVtX2RlZiAqLwotCTEsCQkJLyogaWdub3JlX215X2NsaWVudF9jb25maWcgKi8KKwkxLAkJCS8qIG5ld19tZW1fZGVmICovCisJMCwJCQkvKiBpZ25vcmVfbXlfY2xpZW50X2NvbmZpZyAqLwogfTsKIAogI2RlZmluZSBST1VORFVQKGxlbikJKCgobGVuKSArIDMpICYgfjMpCiAKIHVuc2lnbmVkIGNoYXIgYnVmWzUxMl07Cit1bnNpZ25lZCBjaGFyIG5vdGVidWZbNTEyXTsKIAotI2RlZmluZSBHRVRfMTZCRShvZmYpCSgoYnVmW29mZl0gPDwgOCkgKyAoYnVmWyhvZmYpKzFdKSkKLSNkZWZpbmUgR0VUXzMyQkUob2ZmKQkoKEdFVF8xNkJFKG9mZikgPDwgMTYpICsgR0VUXzE2QkUoKG9mZikrMikpCisjZGVmaW5lIEdFVF8xNkJFKGIsIG9mZikJKCgoYilbb2ZmXSA8PCA4KSArICgoYilbKG9mZikrMV0pKQorI2RlZmluZSBHRVRfMzJCRShiLCBvZmYpCSgoR0VUXzE2QkUoKGIpLCAob2ZmKSkgPDwgMTYpICsgXAorCQkJCSBHRVRfMTZCRSgoYiksIChvZmYpKzIpKQogCi0jZGVmaW5lIFBVVF8xNkJFKG9mZiwgdikJKGJ1ZltvZmZdID0gKCh2KSA+PiA4KSAmIDB4ZmYsIFwKLQkJCQkgYnVmWyhvZmYpICsgMV0gPSAodikgJiAweGZmKQotI2RlZmluZSBQVVRfMzJCRShvZmYsIHYpCShQVVRfMTZCRSgob2ZmKSwgKHYpID4+IDE2KSwgXAotCQkJCSBQVVRfMTZCRSgob2ZmKSArIDIsICh2KSkpCisjZGVmaW5lIFBVVF8xNkJFKGIsIG9mZiwgdikJKChiKVtvZmZdID0gKCh2KSA+PiA4KSAmIDB4ZmYsIFwKKwkJCQkgKGIpWyhvZmYpICsgMV0gPSAodikgJiAweGZmKQorI2RlZmluZSBQVVRfMzJCRShiLCBvZmYsIHYpCShQVVRfMTZCRSgoYiksIChvZmYpLCAodikgPj4gMTYpLCBcCisJCQkJIFBVVF8xNkJFKChiKSwgKG9mZikgKyAyLCAodikpKQogCiAvKiBTdHJ1Y3R1cmUgb2YgYW4gRUxGIGZpbGUgKi8KICNkZWZpbmUgRV9JREVOVAkJMAkvKiBFTEYgaGVhZGVyICovCkBAIC04OCwxNSArOTUsNzEgQEAKIAogdW5zaWduZWQgY2hhciBlbGZfbWFnaWNbNF0gPSB7IDB4N2YsICdFJywgJ0wnLCAnRicgfTsKIAordW5zaWduZWQgY2hhciAqcmVhZF9ycGFub3RlKGNvbnN0IGNoYXIgKmZuYW1lLCBpbnQgKm5ucCkKK3sKKwlpbnQgbm90ZWZkLCBuciwgaTsKKwlpbnQgcGgsIHBzLCBucDsKKwlpbnQgbm90ZSwgbm90ZXNpemU7CisKKwlub3RlZmQgPSBvcGVuKGZuYW1lLCBPX1JET05MWSk7CisJaWYgKG5vdGVmZCA8IDApIHsKKwkJcGVycm9yKGZuYW1lKTsKKwkJZXhpdCgxKTsKKwl9CisJbnIgPSByZWFkKG5vdGVmZCwgbm90ZWJ1Ziwgc2l6ZW9mKG5vdGVidWYpKTsKKwlpZiAobnIgPCAwKSB7CisJCXBlcnJvcigicmVhZCBub3RlIik7CisJCWV4aXQoMSk7CisJfQorCWlmIChuciA9PSAwKQkJLyogZW1wdHkgZmlsZSAqLworCQlyZXR1cm4gTlVMTDsKKwlpZiAobnIgPCBFX0hTSVpFIHx8CisJICAgIG1lbWNtcCgmbm90ZWJ1ZltFX0lERU5UK0VJX01BR0lDXSwgZWxmX21hZ2ljLCA0KSAhPSAwIHx8CisJICAgIG5vdGVidWZbRV9JREVOVCtFSV9DTEFTU10gIT0gRUxGQ0xBU1MzMiB8fAorCSAgICBub3RlYnVmW0VfSURFTlQrRUlfREFUQV0gIT0gRUxGREFUQTJNU0IpCisJCWdvdG8gbm90ZWxmOworCWNsb3NlKG5vdGVmZCk7CisKKwkvKiBub3cgbG9vayBmb3IgdGhlIFJQQS1ub3RlICovCisJcGggPSBHRVRfMzJCRShub3RlYnVmLCBFX1BIT0ZGKTsKKwlwcyA9IEdFVF8xNkJFKG5vdGVidWYsIEVfUEhFTlRTSVpFKTsKKwlucCA9IEdFVF8xNkJFKG5vdGVidWYsIEVfUEhOVU0pOworCWlmIChwaCA8IEVfSFNJWkUgfHwgcHMgPCBQSF9IU0laRSB8fCBucCA8IDEpCisJCWdvdG8gbm90ZWxmOworCisJZm9yIChpID0gMDsgaSA8IG5wOyArK2ksIHBoICs9IHBzKSB7CisJCWlmIChHRVRfMzJCRShub3RlYnVmLCBwaCArIFBIX1RZUEUpICE9IFBUX05PVEUpCisJCQljb250aW51ZTsKKwkJbm90ZSA9IEdFVF8zMkJFKG5vdGVidWYsIHBoICsgUEhfT0ZGU0VUKTsKKwkJbm90ZXNpemUgPSBHRVRfMzJCRShub3RlYnVmLCBwaCArIFBIX0ZJTEVTWik7CisJCWlmIChub3Rlc2l6ZSA8IDM0IHx8IG5vdGUgKyBub3Rlc2l6ZSA+IG5yKQorCQkJY29udGludWU7CisJCWlmIChHRVRfMzJCRShub3RlYnVmLCBub3RlKSAhPSBzdHJsZW4ocnBhbmFtZSkgKyAxIHx8CisJCSAgICBHRVRfMzJCRShub3RlYnVmLCBub3RlICsgOCkgIT0gMHgxMjc1OTk5OSB8fAorCQkgICAgc3RyY21wKChjaGFyICopJm5vdGVidWZbbm90ZSArIDEyXSwgcnBhbmFtZSkgIT0gMCkKKwkJCWNvbnRpbnVlOworCQkvKiBsb29rcyBsaWtlIGFuIFJQQSBub3RlLCByZXR1cm4gaXQgKi8KKwkJKm5ucCA9IG5vdGVzaXplOworCQlyZXR1cm4gJm5vdGVidWZbbm90ZV07CisJfQorCS8qIG5vIFJQQSBub3RlIGZvdW5kICovCisJcmV0dXJuIE5VTEw7CisKKyBub3RlbGY6CisJZnByaW50ZihzdGRlcnIsICIlcyBpcyBub3QgYSBiaWctZW5kaWFuIDMyLWJpdCBFTEYgaW1hZ2VcbiIsIGZuYW1lKTsKKwlleGl0KDEpOworfQorCiBpbnQKIG1haW4oaW50IGFjLCBjaGFyICoqYXYpCiB7CiAJaW50IGZkLCBuLCBpOwogCWludCBwaCwgcHMsIG5wOwogCWludCBubm90ZSwgbm5vdGUyLCBuczsKKwl1bnNpZ25lZCBjaGFyICpycGFwOwogCi0JaWYgKGFjICE9IDIpIHsKLQkJZnByaW50ZihzdGRlcnIsICJVc2FnZTogJXMgZWxmLWZpbGVcbiIsIGF2WzBdKTsKKwlpZiAoYWMgIT0gMiAmJiBhYyAhPSAzKSB7CisJCWZwcmludGYoc3RkZXJyLCAiVXNhZ2U6ICVzIGVsZi1maWxlIFtycGFub3RlLmVsZl1cbiIsIGF2WzBdKTsKIAkJZXhpdCgxKTsKIAl9CiAJZmQgPSBvcGVuKGF2WzFdLCBPX1JEV1IpOwpAQCAtMTA3LDYgKzE3MCw3IEBACiAKIAlubm90ZSA9IDEyICsgUk9VTkRVUChzdHJsZW4oYXJjaCkgKyAxKSArIHNpemVvZihkZXNjcik7CiAJbm5vdGUyID0gMTIgKyBST1VORFVQKHN0cmxlbihycGFuYW1lKSArIDEpICsgc2l6ZW9mKHJwYW5vdGUpOworCXJwYXAgPSBOVUxMOwogCiAJbiA9IHJlYWQoZmQsIGJ1Ziwgc2l6ZW9mKGJ1ZikpOwogCWlmIChuIDwgMCkgewpAQCAtMTI0LDE2ICsxODgsMTkgQEAKIAkJZXhpdCgxKTsKIAl9CiAKLQlwaCA9IEdFVF8zMkJFKEVfUEhPRkYpOwotCXBzID0gR0VUXzE2QkUoRV9QSEVOVFNJWkUpOwotCW5wID0gR0VUXzE2QkUoRV9QSE5VTSk7CisJaWYgKGFjID09IDMpCisJCXJwYXAgPSByZWFkX3JwYW5vdGUoYXZbMl0sICZubm90ZTIpOworCisJcGggPSBHRVRfMzJCRShidWYsIEVfUEhPRkYpOworCXBzID0gR0VUXzE2QkUoYnVmLCBFX1BIRU5UU0laRSk7CisJbnAgPSBHRVRfMTZCRShidWYsIEVfUEhOVU0pOwogCWlmIChwaCA8IEVfSFNJWkUgfHwgcHMgPCBQSF9IU0laRSB8fCBucCA8IDEpCiAJCWdvdG8gbm90ZWxmOwogCWlmIChwaCArIChucCArIDIpICogcHMgKyBubm90ZSArIG5ub3RlMiA+IG4pCiAJCWdvdG8gbm9zcGFjZTsKIAogCWZvciAoaSA9IDA7IGkgPCBucDsgKytpKSB7Ci0JCWlmIChHRVRfMzJCRShwaCArIFBIX1RZUEUpID09IFBUX05PVEUpIHsKKwkJaWYgKEdFVF8zMkJFKGJ1ZiwgcGggKyBQSF9UWVBFKSA9PSBQVF9OT1RFKSB7CiAJCQlmcHJpbnRmKHN0ZGVyciwgIiVzIGFscmVhZHkgaGFzIGEgbm90ZSBlbnRyeVxuIiwKIAkJCQlhdlsxXSk7CiAJCQlleGl0KDApOwpAQCAtMTQ4LDM3ICsyMTUsNDIgQEAKIAogCS8qIGZpbGwgaW4gdGhlIHByb2dyYW0gaGVhZGVyIGVudHJ5ICovCiAJbnMgPSBwaCArIDIgKiBwczsKLQlQVVRfMzJCRShwaCArIFBIX1RZUEUsIFBUX05PVEUpOwotCVBVVF8zMkJFKHBoICsgUEhfT0ZGU0VULCBucyk7Ci0JUFVUXzMyQkUocGggKyBQSF9GSUxFU1osIG5ub3RlKTsKKwlQVVRfMzJCRShidWYsIHBoICsgUEhfVFlQRSwgUFRfTk9URSk7CisJUFVUXzMyQkUoYnVmLCBwaCArIFBIX09GRlNFVCwgbnMpOworCVBVVF8zMkJFKGJ1ZiwgcGggKyBQSF9GSUxFU1osIG5ub3RlKTsKIAogCS8qIGZpbGwgaW4gdGhlIG5vdGUgYXJlYSB3ZSBwb2ludCB0byAqLwogCS8qIFhYWCB3ZSBzaG91bGQgcHJvYmFibHkgbWFrZSB0aGlzIGEgcHJvcGVyIHNlY3Rpb24gKi8KLQlQVVRfMzJCRShucywgc3RybGVuKGFyY2gpICsgMSk7Ci0JUFVUXzMyQkUobnMgKyA0LCBOX0RFU0NSICogNCk7Ci0JUFVUXzMyQkUobnMgKyA4LCAweDEyNzUpOworCVBVVF8zMkJFKGJ1ZiwgbnMsIHN0cmxlbihhcmNoKSArIDEpOworCVBVVF8zMkJFKGJ1ZiwgbnMgKyA0LCBOX0RFU0NSICogNCk7CisJUFVUXzMyQkUoYnVmLCBucyArIDgsIDB4MTI3NSk7CiAJc3RyY3B5KChjaGFyICopICZidWZbbnMgKyAxMl0sIGFyY2gpOwogCW5zICs9IDEyICsgc3RybGVuKGFyY2gpICsgMTsKIAlmb3IgKGkgPSAwOyBpIDwgTl9ERVNDUjsgKytpLCBucyArPSA0KQotCQlQVVRfMzJCRShucywgZGVzY3JbaV0pOworCQlQVVRfMzJCRShidWYsIG5zLCBkZXNjcltpXSk7CiAKIAkvKiBmaWxsIGluIHRoZSBzZWNvbmQgcHJvZ3JhbSBoZWFkZXIgZW50cnkgYW5kIHRoZSBSUEEgbm90ZSBhcmVhICovCiAJcGggKz0gcHM7Ci0JUFVUXzMyQkUocGggKyBQSF9UWVBFLCBQVF9OT1RFKTsKLQlQVVRfMzJCRShwaCArIFBIX09GRlNFVCwgbnMpOwotCVBVVF8zMkJFKHBoICsgUEhfRklMRVNaLCBubm90ZTIpOworCVBVVF8zMkJFKGJ1ZiwgcGggKyBQSF9UWVBFLCBQVF9OT1RFKTsKKwlQVVRfMzJCRShidWYsIHBoICsgUEhfT0ZGU0VULCBucyk7CisJUFVUXzMyQkUoYnVmLCBwaCArIFBIX0ZJTEVTWiwgbm5vdGUyKTsKIAogCS8qIGZpbGwgaW4gdGhlIG5vdGUgYXJlYSB3ZSBwb2ludCB0byAqLwotCVBVVF8zMkJFKG5zLCBzdHJsZW4ocnBhbmFtZSkgKyAxKTsKLQlQVVRfMzJCRShucyArIDQsIHNpemVvZihycGFub3RlKSk7Ci0JUFVUXzMyQkUobnMgKyA4LCAweDEyNzU5OTk5KTsKLQlzdHJjcHkoKGNoYXIgKikgJmJ1ZltucyArIDEyXSwgcnBhbmFtZSk7Ci0JbnMgKz0gMTIgKyBST1VORFVQKHN0cmxlbihycGFuYW1lKSArIDEpOwotCWZvciAoaSA9IDA7IGkgPCBOX1JQQV9ERVNDUjsgKytpLCBucyArPSA0KQotCQlQVVRfMzJCRShucywgcnBhbm90ZVtpXSk7CisJaWYgKHJwYXApIHsKKwkJLyogUlBBIG5vdGUgc3VwcGxpZWQgaW4gZmlsZSwganVzdCBjb3B5IHRoZSB3aG9sZSB0aGluZyBvdmVyICovCisJCW1lbWNweShidWYgKyBucywgcnBhcCwgbm5vdGUyKTsKKwl9IGVsc2UgeworCQlQVVRfMzJCRShidWYsIG5zLCBzdHJsZW4ocnBhbmFtZSkgKyAxKTsKKwkJUFVUXzMyQkUoYnVmLCBucyArIDQsIHNpemVvZihycGFub3RlKSk7CisJCVBVVF8zMkJFKGJ1ZiwgbnMgKyA4LCAweDEyNzU5OTk5KTsKKwkJc3RyY3B5KChjaGFyICopICZidWZbbnMgKyAxMl0sIHJwYW5hbWUpOworCQlucyArPSAxMiArIFJPVU5EVVAoc3RybGVuKHJwYW5hbWUpICsgMSk7CisJCWZvciAoaSA9IDA7IGkgPCBOX1JQQV9ERVNDUjsgKytpLCBucyArPSA0KQorCQkJUFVUXzMyQkUoYnVmLCBucywgcnBhbm90ZVtpXSk7CisJfQogCiAJLyogVXBkYXRlIHRoZSBudW1iZXIgb2YgcHJvZ3JhbSBoZWFkZXJzICovCi0JUFVUXzE2QkUoRV9QSE5VTSwgbnAgKyAyKTsKKwlQVVRfMTZCRShidWYsIEVfUEhOVU0sIG5wICsgMik7CiAKIAkvKiB3cml0ZSBiYWNrICovCiAJbHNlZWsoZmQsIChsb25nKSAwLCBTRUVLX1NFVCk7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdGMtc3JjL01ha2VmaWxlLmR0YyBiL2FyY2gvcG93ZXJwYy9ib290L2R0Yy1zcmMvTWFrZWZpbGUuZHRjCmluZGV4IGQ2MDdmZGIuLjZkZGY5ZWMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2R0Yy1zcmMvTWFrZWZpbGUuZHRjCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0Yy1zcmMvTWFrZWZpbGUuZHRjCkBAIC01LDIxICs1LDUgQEAKICMKIERUQ19TUkNTID0gZHRjLmMgZmxhdHRyZWUuYyBmc3RyZWUuYyBkYXRhLmMgbGl2ZXRyZWUuYyB0cmVlc291cmNlLmMgc3JjcG9zLmMgXAogCWNoZWNrcy5jCi1EVENfRVhUUkEgPSBkdGMuaCBzcmNwb3MuaAotRFRDX0xFWEZJTEVTID0gZHRjLWxleGVyLmwKLURUQ19CSVNPTkZJTEVTID0gZHRjLXBhcnNlci55Ci0KLURUQ19MRVhfU1JDUyA9ICQoRFRDX0xFWEZJTEVTOiUubD0lLmxleC5jKQotRFRDX0JJU09OX1NSQ1MgPSAkKERUQ19CSVNPTkZJTEVTOiUueT0lLnRhYi5jKQotRFRDX0JJU09OX0lOQ0xVREVTID0gJChEVENfQklTT05GSUxFUzolLnk9JS50YWIuaCkKLQotRFRDX0dFTl9TUkNTID0gJChEVENfTEVYX1NSQ1MpICQoRFRDX0JJU09OX1NSQ1MpCi1EVENfR0VOX0FMTCA9ICQoRFRDX0dFTl9TUkNTKSAkKERUQ19CSVNPTl9JTkNMVURFUykKK0RUQ19HRU5fU1JDUyA9IGR0Yy1sZXhlci5sZXguYyBkdGMtcGFyc2VyLnRhYi5jCiBEVENfT0JKUyA9ICQoRFRDX1NSQ1M6JS5jPSUubykgJChEVENfR0VOX1NSQ1M6JS5jPSUubykKLQotRFRDX0NMRUFORklMRVMgPSAkKERUQ19HRU5fQUxMKQotCi0jIFdlIGFzc3VtZSB0aGUgY29udGFpbmluZyBNYWtlZmlsZSBzeXN0ZW0gY2FuIGRvIGF1dG8tZGVwZW5kZW5jaWVzIGZvciBtb3N0Ci0jIHRoaW5ncywgYnV0IHdlIHN1cHBseSB0aGUgZGVwZW5kZW5jaWVzIG9uIGdlbmVyYXRlZCBoZWFkZXIgZmlsZXMgZXhwbGljaXRseQotCi0kKGFkZHByZWZpeCAkKERUQ19vYmpkaXIpLywkKERUQ19HRU5fU1JDUzolLmM9JS5vKSk6ICQoYWRkcHJlZml4ICQoRFRDX29iamRpcikvLCQoRFRDX0JJU09OX0lOQ0xVREVTKSkKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0Yy1zcmMvY2hlY2tzLmMgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdGMtc3JjL2NoZWNrcy5jCmluZGV4IDJjZTk2MWMuLjk1NDg1NzkgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2R0Yy1zcmMvY2hlY2tzLmMKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRjLXNyYy9jaGVja3MuYwpAQCAtMjQyLDYgKzI0Miw0MiBAQAogfQogTk9ERV9DSEVDSyhkdXBsaWNhdGVfcHJvcGVydHlfbmFtZXMsIE5VTEwsIEVSUk9SKTsKIAorI2RlZmluZSBMT1dFUkNBU0UJImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6IgorI2RlZmluZSBVUFBFUkNBU0UJIkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaIgorI2RlZmluZSBESUdJVFMJCSIwMTIzNDU2Nzg5IgorI2RlZmluZSBQUk9QTk9ERUNIQVJTCUxPV0VSQ0FTRSBVUFBFUkNBU0UgRElHSVRTICIsLl8rKiM/LSIKKworc3RhdGljIHZvaWQgY2hlY2tfbm9kZV9uYW1lX2NoYXJzKHN0cnVjdCBjaGVjayAqYywgc3RydWN0IG5vZGUgKmR0LAorCQkJCSAgc3RydWN0IG5vZGUgKm5vZGUpCit7CisJaW50IG4gPSBzdHJzcG4obm9kZS0+bmFtZSwgYy0+ZGF0YSk7CisKKwlpZiAobiA8IHN0cmxlbihub2RlLT5uYW1lKSkKKwkJRkFJTChjLCAiQmFkIGNoYXJhY3RlciAnJWMnIGluIG5vZGUgJXMiLAorCQkgICAgIG5vZGUtPm5hbWVbbl0sIG5vZGUtPmZ1bGxwYXRoKTsKK30KK05PREVfQ0hFQ0sobm9kZV9uYW1lX2NoYXJzLCBQUk9QTk9ERUNIQVJTICJAIiwgRVJST1IpOworCitzdGF0aWMgdm9pZCBjaGVja19ub2RlX25hbWVfZm9ybWF0KHN0cnVjdCBjaGVjayAqYywgc3RydWN0IG5vZGUgKmR0LAorCQkJCSAgIHN0cnVjdCBub2RlICpub2RlKQoreworCWlmIChzdHJjaHIoZ2V0X3VuaXRuYW1lKG5vZGUpLCAnQCcpKQorCQlGQUlMKGMsICJOb2RlICVzIGhhcyBtdWx0aXBsZSAnQCcgY2hhcmFjdGVycyBpbiBuYW1lIiwKKwkJICAgICBub2RlLT5mdWxscGF0aCk7Cit9CitOT0RFX0NIRUNLKG5vZGVfbmFtZV9mb3JtYXQsIE5VTEwsIEVSUk9SLCAmbm9kZV9uYW1lX2NoYXJzKTsKKworc3RhdGljIHZvaWQgY2hlY2tfcHJvcGVydHlfbmFtZV9jaGFycyhzdHJ1Y3QgY2hlY2sgKmMsIHN0cnVjdCBub2RlICpkdCwKKwkJCQkgICAgICBzdHJ1Y3Qgbm9kZSAqbm9kZSwgc3RydWN0IHByb3BlcnR5ICpwcm9wKQoreworCWludCBuID0gc3Ryc3BuKHByb3AtPm5hbWUsIGMtPmRhdGEpOworCisJaWYgKG4gPCBzdHJsZW4ocHJvcC0+bmFtZSkpCisJCUZBSUwoYywgIkJhZCBjaGFyYWN0ZXIgJyVjJyBpbiBwcm9wZXJ0eSBuYW1lIFwiJXNcIiwgbm9kZSAlcyIsCisJCSAgICAgcHJvcC0+bmFtZVtuXSwgcHJvcC0+bmFtZSwgbm9kZS0+ZnVsbHBhdGgpOworfQorUFJPUF9DSEVDSyhwcm9wZXJ0eV9uYW1lX2NoYXJzLCBQUk9QTk9ERUNIQVJTLCBFUlJPUik7CisKIHN0YXRpYyB2b2lkIGNoZWNrX2V4cGxpY2l0X3BoYW5kbGVzKHN0cnVjdCBjaGVjayAqYywgc3RydWN0IG5vZGUgKnJvb3QsCiAJCQkJCSAgc3RydWN0IG5vZGUgKm5vZGUpCiB7CkBAIC0yODAsMTYgKzMxNiwyOSBAQAogc3RhdGljIHZvaWQgY2hlY2tfbmFtZV9wcm9wZXJ0aWVzKHN0cnVjdCBjaGVjayAqYywgc3RydWN0IG5vZGUgKnJvb3QsCiAJCQkJICBzdHJ1Y3Qgbm9kZSAqbm9kZSkKIHsKLQlzdHJ1Y3QgcHJvcGVydHkgKnByb3A7CisJc3RydWN0IHByb3BlcnR5ICoqcHAsICpwcm9wID0gTlVMTDsKIAotCXByb3AgPSBnZXRfcHJvcGVydHkobm9kZSwgIm5hbWUiKTsKKwlmb3IgKHBwID0gJm5vZGUtPnByb3BsaXN0OyAqcHA7IHBwID0gJigoKnBwKS0+bmV4dCkpCisJCWlmIChzdHJlcSgoKnBwKS0+bmFtZSwgIm5hbWUiKSkgeworCQkJcHJvcCA9ICpwcDsKKwkJCWJyZWFrOworCQl9CisKIAlpZiAoIXByb3ApCiAJCXJldHVybjsgLyogTm8gbmFtZSBwcm9wZXJ0eSwgdGhhdCdzIGZpbmUgKi8KIAogCWlmICgocHJvcC0+dmFsLmxlbiAhPSBub2RlLT5iYXNlbmFtZWxlbisxKQotCSAgICB8fCAobWVtY21wKHByb3AtPnZhbC52YWwsIG5vZGUtPm5hbWUsIG5vZGUtPmJhc2VuYW1lbGVuKSAhPSAwKSkKKwkgICAgfHwgKG1lbWNtcChwcm9wLT52YWwudmFsLCBub2RlLT5uYW1lLCBub2RlLT5iYXNlbmFtZWxlbikgIT0gMCkpIHsKIAkJRkFJTChjLCAiXCJuYW1lXCIgcHJvcGVydHkgaW4gJXMgaXMgaW5jb3JyZWN0IChcIiVzXCIgaW5zdGVhZCIKIAkJICAgICAiIG9mIGJhc2Ugbm9kZSBuYW1lKSIsIG5vZGUtPmZ1bGxwYXRoLCBwcm9wLT52YWwudmFsKTsKKwl9IGVsc2UgeworCQkvKiBUaGUgbmFtZSBwcm9wZXJ0eSBpcyBjb3JyZWN0LCBhbmQgdGhlcmVmb3JlIHJlZHVuZGFudC4KKwkJICogRGVsZXRlIGl0ICovCisJCSpwcCA9IHByb3AtPm5leHQ7CisJCWZyZWUocHJvcC0+bmFtZSk7CisJCWRhdGFfZnJlZShwcm9wLT52YWwpOworCQlmcmVlKHByb3ApOworCX0KIH0KIENIRUNLX0lTX1NUUklORyhuYW1lX2lzX3N0cmluZywgIm5hbWUiLCBFUlJPUik7CiBOT0RFX0NIRUNLKG5hbWVfcHJvcGVydGllcywgTlVMTCwgRVJST1IsICZuYW1lX2lzX3N0cmluZyk7CkBAIC0zMDEsMjMgKzM1MCwyMyBAQAogc3RhdGljIHZvaWQgZml4dXBfcGhhbmRsZV9yZWZlcmVuY2VzKHN0cnVjdCBjaGVjayAqYywgc3RydWN0IG5vZGUgKmR0LAogCQkJCSAgICAgc3RydWN0IG5vZGUgKm5vZGUsIHN0cnVjdCBwcm9wZXJ0eSAqcHJvcCkKIHsKLSAgICAgIHN0cnVjdCBtYXJrZXIgKm0gPSBwcm9wLT52YWwubWFya2VyczsKLSAgICAgIHN0cnVjdCBub2RlICpyZWZub2RlOwotICAgICAgY2VsbF90IHBoYW5kbGU7CisJc3RydWN0IG1hcmtlciAqbSA9IHByb3AtPnZhbC5tYXJrZXJzOworCXN0cnVjdCBub2RlICpyZWZub2RlOworCWNlbGxfdCBwaGFuZGxlOwogCi0gICAgICBmb3JfZWFjaF9tYXJrZXJfb2ZfdHlwZShtLCBSRUZfUEhBTkRMRSkgewotCSAgICAgIGFzc2VydChtLT5vZmZzZXQgKyBzaXplb2YoY2VsbF90KSA8PSBwcm9wLT52YWwubGVuKTsKKwlmb3JfZWFjaF9tYXJrZXJfb2ZfdHlwZShtLCBSRUZfUEhBTkRMRSkgeworCQlhc3NlcnQobS0+b2Zmc2V0ICsgc2l6ZW9mKGNlbGxfdCkgPD0gcHJvcC0+dmFsLmxlbik7CiAKLQkgICAgICByZWZub2RlID0gZ2V0X25vZGVfYnlfcmVmKGR0LCBtLT5yZWYpOwotCSAgICAgIGlmICghIHJlZm5vZGUpIHsKLQkJICAgICAgRkFJTChjLCAiUmVmZXJlbmNlIHRvIG5vbi1leGlzdGVudCBub2RlIG9yIGxhYmVsIFwiJXNcIlxuIiwKLQkJCSAgIG0tPnJlZik7Ci0JCSAgICAgIGNvbnRpbnVlOwotCSAgICAgIH0KKwkJcmVmbm9kZSA9IGdldF9ub2RlX2J5X3JlZihkdCwgbS0+cmVmKTsKKwkJaWYgKCEgcmVmbm9kZSkgeworCQkJRkFJTChjLCAiUmVmZXJlbmNlIHRvIG5vbi1leGlzdGVudCBub2RlIG9yIGxhYmVsIFwiJXNcIlxuIiwKKwkJCSAgICAgbS0+cmVmKTsKKwkJCWNvbnRpbnVlOworCQl9CiAKLQkgICAgICBwaGFuZGxlID0gZ2V0X25vZGVfcGhhbmRsZShkdCwgcmVmbm9kZSk7Ci0JICAgICAgKigoY2VsbF90ICopKHByb3AtPnZhbC52YWwgKyBtLT5vZmZzZXQpKSA9IGNwdV90b19iZTMyKHBoYW5kbGUpOwotICAgICAgfQorCQlwaGFuZGxlID0gZ2V0X25vZGVfcGhhbmRsZShkdCwgcmVmbm9kZSk7CisJCSooKGNlbGxfdCAqKShwcm9wLT52YWwudmFsICsgbS0+b2Zmc2V0KSkgPSBjcHVfdG9fZmR0MzIocGhhbmRsZSk7CisJfQogfQogQ0hFQ0socGhhbmRsZV9yZWZlcmVuY2VzLCBOVUxMLCBOVUxMLCBmaXh1cF9waGFuZGxlX3JlZmVyZW5jZXMsIE5VTEwsIEVSUk9SLAogICAgICAgJmR1cGxpY2F0ZV9ub2RlX25hbWVzLCAmZXhwbGljaXRfcGhhbmRsZXMpOwpAQCAtNDk4LDYgKzU0Nyw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgY2hlY2sgKmNoZWNrX3RhYmxlW10gPSB7CiAJJmR1cGxpY2F0ZV9ub2RlX25hbWVzLCAmZHVwbGljYXRlX3Byb3BlcnR5X25hbWVzLAorCSZub2RlX25hbWVfY2hhcnMsICZub2RlX25hbWVfZm9ybWF0LCAmcHJvcGVydHlfbmFtZV9jaGFycywKIAkmbmFtZV9pc19zdHJpbmcsICZuYW1lX3Byb3BlcnRpZXMsCiAJJmV4cGxpY2l0X3BoYW5kbGVzLAogCSZwaGFuZGxlX3JlZmVyZW5jZXMsICZwYXRoX3JlZmVyZW5jZXMsCkBAIC01MTEsMTAgKzU2MSw3IEBACiAJJm9ic29sZXRlX2Nob3Nlbl9pbnRlcnJ1cHRfY29udHJvbGxlciwKIH07CiAKLWludCBjaGVja19zZW1hbnRpY3Moc3RydWN0IG5vZGUgKmR0LCBpbnQgb3V0dmVyc2lvbiwgaW50IGJvb3RfY3B1aWRfcGh5cyk7Ci0KLXZvaWQgcHJvY2Vzc19jaGVja3MoaW50IGZvcmNlLCBzdHJ1Y3QgYm9vdF9pbmZvICpiaSwKLQkJICAgIGludCBjaGVja2ZsYWcsIGludCBvdXR2ZXJzaW9uLCBpbnQgYm9vdF9jcHVpZF9waHlzKQordm9pZCBwcm9jZXNzX2NoZWNrcyhpbnQgZm9yY2UsIHN0cnVjdCBib290X2luZm8gKmJpKQogewogCXN0cnVjdCBub2RlICpkdCA9IGJpLT5kdDsKIAlpbnQgaTsKQEAgLTUzNywyMTQgKzU4NCw0IEBACiAJCQkJIm91dHB1dCBmb3JjZWRcbiIpOwogCQl9CiAJfQotCi0JaWYgKGNoZWNrZmxhZykgewotCQlpZiAoZXJyb3IpIHsKLQkJCWZwcmludGYoc3RkZXJyLCAiV2FybmluZzogU2tpcHBpbmcgc2VtYW50aWMgY2hlY2tzIGR1ZSB0byBzdHJ1Y3R1cmFsIGVycm9yc1xuIik7Ci0JCX0gZWxzZSB7Ci0JCQlpZiAoIWNoZWNrX3NlbWFudGljcyhiaS0+ZHQsIG91dHZlcnNpb24sCi0JCQkJCSAgICAgYm9vdF9jcHVpZF9waHlzKSkKLQkJCQlmcHJpbnRmKHN0ZGVyciwgIldhcm5pbmc6IElucHV0IHRyZWUgaGFzIHNlbWFudGljIGVycm9yc1xuIik7Ci0JCX0KLQl9Ci19Ci0KLS8qCi0gKiBTZW1hbnRpYyBjaGVjayBmdW5jdGlvbnMKLSAqLwotCi0jZGVmaW5lIEVSUk1TRyguLi4pIGlmIChxdWlldCA8IDIpIGZwcmludGYoc3RkZXJyLCAiRVJST1I6ICIgX19WQV9BUkdTX18pCi0jZGVmaW5lIFdBUk5NU0coLi4uKSBpZiAocXVpZXQgPCAxKSBmcHJpbnRmKHN0ZGVyciwgIldhcm5pbmc6ICIgX19WQV9BUkdTX18pCi0KLSNkZWZpbmUgRE9fRVJSKC4uLikgZG8ge0VSUk1TRyhfX1ZBX0FSR1NfXyk7IG9rID0gMDsgfSB3aGlsZSAoMCkKLQotI2RlZmluZSBDSEVDS19IQVZFKG5vZGUsIHByb3BuYW1lKSBcCi0JZG8geyBcCi0JCWlmICghIChwcm9wID0gZ2V0X3Byb3BlcnR5KChub2RlKSwgKHByb3BuYW1lKSkpKSBcCi0JCQlET19FUlIoIk1pc3NpbmcgXCIlc1wiIHByb3BlcnR5IGluICVzXG4iLCAocHJvcG5hbWUpLCBcCi0JCQkJKG5vZGUpLT5mdWxscGF0aCk7IFwKLQl9IHdoaWxlICgwKTsKLQotI2RlZmluZSBDSEVDS19IQVZFX1dBUk4obm9kZSwgcHJvcG5hbWUpIFwKLQlkbyB7IFwKLQkJaWYgKCEgKHByb3AgID0gZ2V0X3Byb3BlcnR5KChub2RlKSwgKHByb3BuYW1lKSkpKSBcCi0JCQlXQVJOTVNHKCIlcyBoYXMgbm8gXCIlc1wiIHByb3BlcnR5XG4iLCBcCi0JCQkJKG5vZGUpLT5mdWxscGF0aCwgKHByb3BuYW1lKSk7IFwKLQl9IHdoaWxlICgwKQotCi0jZGVmaW5lIENIRUNLX0hBVkVfU1RSSU5HKG5vZGUsIHByb3BuYW1lKSBcCi0JZG8geyBcCi0JCUNIRUNLX0hBVkUoKG5vZGUpLCAocHJvcG5hbWUpKTsgXAotCQlpZiAocHJvcCAmJiAhZGF0YV9pc19vbmVfc3RyaW5nKHByb3AtPnZhbCkpIFwKLQkJCURPX0VSUigiXCIlc1wiIHByb3BlcnR5IGluICVzIGlzIG5vdCBhIHN0cmluZ1xuIiwgXAotCQkJCShwcm9wbmFtZSksIChub2RlKS0+ZnVsbHBhdGgpOyBcCi0JfSB3aGlsZSAoMCkKLQotI2RlZmluZSBDSEVDS19IQVZFX1NUUkVRKG5vZGUsIHByb3BuYW1lLCB2YWx1ZSkgXAotCWRvIHsgXAotCQlDSEVDS19IQVZFX1NUUklORygobm9kZSksIChwcm9wbmFtZSkpOyBcCi0JCWlmIChwcm9wICYmICFzdHJlcShwcm9wLT52YWwudmFsLCAodmFsdWUpKSkgXAotCQkJRE9fRVJSKCIlcyBoYXMgd3JvbmcgJXMsICVzIChzaG91bGQgYmUgJXNcbiIsIFwKLQkJCQkobm9kZSktPmZ1bGxwYXRoLCAocHJvcG5hbWUpLCBcCi0JCQkJcHJvcC0+dmFsLnZhbCwgKHZhbHVlKSk7IFwKLQl9IHdoaWxlICgwKQotCi0jZGVmaW5lIENIRUNLX0hBVkVfT05FQ0VMTChub2RlLCBwcm9wbmFtZSkgXAotCWRvIHsgXAotCQlDSEVDS19IQVZFKChub2RlKSwgKHByb3BuYW1lKSk7IFwKLQkJaWYgKHByb3AgJiYgKHByb3AtPnZhbC5sZW4gIT0gc2l6ZW9mKGNlbGxfdCkpKSBcCi0JCQlET19FUlIoIlwiJXNcIiBwcm9wZXJ0eSBpbiAlcyBoYXMgd3Jvbmcgc2l6ZSAlZCAoc2hvdWxkIGJlIDEgY2VsbClcbiIsIChwcm9wbmFtZSksIChub2RlKS0+ZnVsbHBhdGgsIHByb3AtPnZhbC5sZW4pOyBcCi0JfSB3aGlsZSAoMCkKLQotI2RlZmluZSBDSEVDS19IQVZFX1dBUk5fT05FQ0VMTChub2RlLCBwcm9wbmFtZSkgXAotCWRvIHsgXAotCQlDSEVDS19IQVZFX1dBUk4oKG5vZGUpLCAocHJvcG5hbWUpKTsgXAotCQlpZiAocHJvcCAmJiAocHJvcC0+dmFsLmxlbiAhPSBzaXplb2YoY2VsbF90KSkpIFwKLQkJCURPX0VSUigiXCIlc1wiIHByb3BlcnR5IGluICVzIGhhcyB3cm9uZyBzaXplICVkIChzaG91bGQgYmUgMSBjZWxsKVxuIiwgKHByb3BuYW1lKSwgKG5vZGUpLT5mdWxscGF0aCwgcHJvcC0+dmFsLmxlbik7IFwKLQl9IHdoaWxlICgwKQotCi0jZGVmaW5lIENIRUNLX0hBVkVfV0FSTl9QSEFORExFKHhub2RlLCBwcm9wbmFtZSwgcm9vdCkgXAotCWRvIHsgXAotCQlzdHJ1Y3Qgbm9kZSAqcmVmOyBcCi0JCUNIRUNLX0hBVkVfV0FSTl9PTkVDRUxMKCh4bm9kZSksIChwcm9wbmFtZSkpOyBcCi0JCWlmIChwcm9wKSB7XAotCQkJY2VsbF90IHBoYW5kbGUgPSBwcm9wdmFsX2NlbGwocHJvcCk7IFwKLQkJCWlmICgocGhhbmRsZSA9PSAwKSB8fCAocGhhbmRsZSA9PSAtMSkpIHsgXAotCQkJCURPX0VSUigiXCIlc1wiIHByb3BlcnR5IGluICVzIGNvbnRhaW5zIGFuIGludmFsaWQgcGhhbmRsZSAleFxuIiwgKHByb3BuYW1lKSwgKHhub2RlKS0+ZnVsbHBhdGgsIHBoYW5kbGUpOyBcCi0JCQl9IGVsc2UgeyBcCi0JCQkJcmVmID0gZ2V0X25vZGVfYnlfcGhhbmRsZSgocm9vdCksIHByb3B2YWxfY2VsbChwcm9wKSk7IFwKLQkJCQlpZiAoISByZWYpIFwKLQkJCQkJRE9fRVJSKCJcIiVzXCIgcHJvcGVydHkgaW4gJXMgcmVmZXJzIHRvIG5vbi1leGlzdGFudCBwaGFuZGxlICV4XG4iLCAocHJvcG5hbWUpLCAoeG5vZGUpLT5mdWxscGF0aCwgcHJvcHZhbF9jZWxsKHByb3ApKTsgXAotCQkJfSBcCi0JCX0gXAotCX0gd2hpbGUgKDApCi0KLSNkZWZpbmUgQ0hFQ0tfSEFWRV9XQVJOX1NUUklORyhub2RlLCBwcm9wbmFtZSkgXAotCWRvIHsgXAotCQlDSEVDS19IQVZFX1dBUk4oKG5vZGUpLCAocHJvcG5hbWUpKTsgXAotCQlpZiAocHJvcCAmJiAhZGF0YV9pc19vbmVfc3RyaW5nKHByb3AtPnZhbCkpIFwKLQkJCURPX0VSUigiXCIlc1wiIHByb3BlcnR5IGluICVzIGlzIG5vdCBhIHN0cmluZ1xuIiwgXAotCQkJCShwcm9wbmFtZSksIChub2RlKS0+ZnVsbHBhdGgpOyBcCi0JfSB3aGlsZSAoMCkKLQotc3RhdGljIGludCBjaGVja19yb290KHN0cnVjdCBub2RlICpyb290KQotewotCXN0cnVjdCBwcm9wZXJ0eSAqcHJvcDsKLQlpbnQgb2sgPSAxOwotCi0JQ0hFQ0tfSEFWRV9TVFJJTkcocm9vdCwgIm1vZGVsIik7Ci0JQ0hFQ0tfSEFWRV9XQVJOKHJvb3QsICJjb21wYXRpYmxlIik7Ci0KLQlyZXR1cm4gb2s7Ci19Ci0KLXN0YXRpYyBpbnQgY2hlY2tfY3B1cyhzdHJ1Y3Qgbm9kZSAqcm9vdCwgaW50IG91dHZlcnNpb24sIGludCBib290X2NwdWlkX3BoeXMpCi17Ci0Jc3RydWN0IG5vZGUgKmNwdXMsICpjcHU7Ci0Jc3RydWN0IHByb3BlcnR5ICpwcm9wOwotCXN0cnVjdCBub2RlICpib290Y3B1ID0gTlVMTDsKLQlpbnQgb2sgPSAxOwotCi0JY3B1cyA9IGdldF9zdWJub2RlKHJvb3QsICJjcHVzIik7Ci0JaWYgKCEgY3B1cykgewotCQlFUlJNU0coIk1pc3NpbmcgL2NwdXMgbm9kZVxuIik7Ci0JCXJldHVybiAwOwotCX0KLQotCWlmIChjcHVzLT5hZGRyX2NlbGxzICE9IDEpCi0JCURPX0VSUigiJXMgaGFzIGJhZCAjYWRkcmVzcy1jZWxscyB2YWx1ZSAlZCAoc2hvdWxkIGJlIDEpXG4iLAotCQkgICAgICAgY3B1cy0+ZnVsbHBhdGgsIGNwdXMtPmFkZHJfY2VsbHMpOwotCWlmIChjcHVzLT5zaXplX2NlbGxzICE9IDApCi0JCURPX0VSUigiJXMgaGFzIGJhZCAjc2l6ZS1jZWxscyB2YWx1ZSAlZCAoc2hvdWxkIGJlIDApXG4iLAotCQkgICAgICAgY3B1cy0+ZnVsbHBhdGgsIGNwdXMtPnNpemVfY2VsbHMpOwotCi0JZm9yX2VhY2hfY2hpbGQoY3B1cywgY3B1KSB7Ci0JCUNIRUNLX0hBVkVfU1RSRVEoY3B1LCAiZGV2aWNlX3R5cGUiLCAiY3B1Iik7Ci0KLQkJQ0hFQ0tfSEFWRV9PTkVDRUxMKGNwdSwgInJlZyIpOwotCQlpZiAocHJvcCkgewotCQkJY2VsbF90IHVuaXRudW07Ci0JCQljaGFyICplcHRyOwotCi0JCQl1bml0bnVtID0gc3RydG9sKGdldF91bml0bmFtZShjcHUpLCAmZXB0ciwgMTYpOwotCQkJaWYgKCplcHRyKSB7Ci0JCQkJV0FSTk1TRygiJXMgaGFzIGJhZCBmb3JtYXQgdW5pdCBuYW1lICVzIChzaG91bGQgYmUgQ1BVIG51bWJlclxuIiwKLQkJCQkJY3B1LT5mdWxscGF0aCwgZ2V0X3VuaXRuYW1lKGNwdSkpOwotCQkJfSBlbHNlIGlmICh1bml0bnVtICE9IHByb3B2YWxfY2VsbChwcm9wKSkgewotCQkJCVdBUk5NU0coIiVzIHVuaXQgbmFtZSBcIiVzXCIgZG9lcyBub3QgbWF0Y2ggXCJyZWdcIiBwcm9wZXJ0eSA8JXg+XG4iLAotCQkJCSAgICAgICBjcHUtPmZ1bGxwYXRoLCBnZXRfdW5pdG5hbWUoY3B1KSwKLQkJCQkgICAgICAgcHJvcHZhbF9jZWxsKHByb3ApKTsKLQkJCX0KLQkJfQotCi0vKiAJCUNIRUNLX0hBVkVfT05FQ0VMTChjcHUsICJkLWNhY2hlLWxpbmUtc2l6ZSIpOyAqLwotLyogCQlDSEVDS19IQVZFX09ORUNFTEwoY3B1LCAiaS1jYWNoZS1saW5lLXNpemUiKTsgKi8KLQkJQ0hFQ0tfSEFWRV9PTkVDRUxMKGNwdSwgImQtY2FjaGUtc2l6ZSIpOwotCQlDSEVDS19IQVZFX09ORUNFTEwoY3B1LCAiaS1jYWNoZS1zaXplIik7Ci0KLQkJQ0hFQ0tfSEFWRV9XQVJOX09ORUNFTEwoY3B1LCAiY2xvY2stZnJlcXVlbmN5Iik7Ci0JCUNIRUNLX0hBVkVfV0FSTl9PTkVDRUxMKGNwdSwgInRpbWViYXNlLWZyZXF1ZW5jeSIpOwotCi0JCXByb3AgPSBnZXRfcHJvcGVydHkoY3B1LCAibGludXgsYm9vdC1jcHUiKTsKLQkJaWYgKHByb3ApIHsKLQkJCWlmIChwcm9wLT52YWwubGVuKQotCQkJCVdBUk5NU0coIlwibGludXgsYm9vdC1jcHVcIiBwcm9wZXJ0eSBpbiAlcyBpcyBub24tZW1wdHlcbiIsCi0JCQkJCWNwdS0+ZnVsbHBhdGgpOwotCQkJaWYgKGJvb3RjcHUpCi0JCQkJRE9fRVJSKCJNdWx0aXBsZSBib290IGNwdXMgKCVzIGFuZCAlcylcbiIsCi0JCQkJICAgICAgIGJvb3RjcHUtPmZ1bGxwYXRoLCBjcHUtPmZ1bGxwYXRoKTsKLQkJCWVsc2UKLQkJCQlib290Y3B1ID0gY3B1OwotCQl9Ci0JfQotCi0JaWYgKG91dHZlcnNpb24gPCAyKSB7Ci0JCWlmICghIGJvb3RjcHUpCi0JCQlXQVJOTVNHKCJObyBjcHUgaGFzIFwibGludXgsYm9vdC1jcHVcIiBwcm9wZXJ0eVxuIik7Ci0JfSBlbHNlIHsKLQkJaWYgKGJvb3RjcHUpCi0JCQlXQVJOTVNHKCJcImxpbnV4LGJvb3QtY3B1XCIgcHJvcGVydHkgaXMgZGVwcmVjYXRlZCBpbiBibG9iIHZlcnNpb24gMiBvciBoaWdoZXJcbiIpOwotCQlpZiAoYm9vdF9jcHVpZF9waHlzID09IDB4ZmVlZGJlZWYpCi0JCQlXQVJOTVNHKCJwaHlzaWNhbCBib290IENQVSBub3Qgc2V0LiAgVXNlIC1iIG9wdGlvbiB0byBzZXRcbiIpOwotCX0KLQotCXJldHVybiBvazsKLX0KLQotc3RhdGljIGludCBjaGVja19tZW1vcnkoc3RydWN0IG5vZGUgKnJvb3QpCi17Ci0Jc3RydWN0IG5vZGUgKm1lbTsKLQlzdHJ1Y3QgcHJvcGVydHkgKnByb3A7Ci0JaW50IG5ub2RlcyA9IDA7Ci0JaW50IG9rID0gMTsKLQotCWZvcl9lYWNoX2NoaWxkKHJvb3QsIG1lbSkgewotCQlpZiAoISBzdHJuZXEobWVtLT5uYW1lLCAibWVtb3J5IiwgbWVtLT5iYXNlbmFtZWxlbikpCi0JCQljb250aW51ZTsKLQotCQlubm9kZXMrKzsKLQotCQlDSEVDS19IQVZFX1NUUkVRKG1lbSwgImRldmljZV90eXBlIiwgIm1lbW9yeSIpOwotCQlDSEVDS19IQVZFKG1lbSwgInJlZyIpOwotCX0KLQotCWlmIChubm9kZXMgPT0gMCkgewotCQlFUlJNU0coIk5vIG1lbW9yeSBub2Rlc1xuIik7Ci0JCXJldHVybiAwOwotCX0KLQotCXJldHVybiBvazsKLX0KLQotaW50IGNoZWNrX3NlbWFudGljcyhzdHJ1Y3Qgbm9kZSAqZHQsIGludCBvdXR2ZXJzaW9uLCBpbnQgYm9vdF9jcHVpZF9waHlzKQotewotCWludCBvayA9IDE7Ci0KLQlvayA9IG9rICYmIGNoZWNrX3Jvb3QoZHQpOwotCW9rID0gb2sgJiYgY2hlY2tfY3B1cyhkdCwgb3V0dmVyc2lvbiwgYm9vdF9jcHVpZF9waHlzKTsKLQlvayA9IG9rICYmIGNoZWNrX21lbW9yeShkdCk7Ci0JaWYgKCEgb2spCi0JCXJldHVybiAwOwotCi0JcmV0dXJuIDE7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdGMtc3JjL2RhdGEuYyBiL2FyY2gvcG93ZXJwYy9ib290L2R0Yy1zcmMvZGF0YS5jCmluZGV4IGE5NDcxOGMuLmRkMmUzZDMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2R0Yy1zcmMvZGF0YS5jCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0Yy1zcmMvZGF0YS5jCkBAIC0zMiw4ICszMiw2IEBACiAJCW0gPSBubTsKIAl9CiAKLQlhc3NlcnQoIWQudmFsIHx8IGQuYXNpemUpOwotCiAJaWYgKGQudmFsKQogCQlmcmVlKGQudmFsKTsKIH0KQEAgLTQzLDkgKzQxLDYgQEAKIAlzdHJ1Y3QgZGF0YSBuZDsKIAlpbnQgbmV3c2l6ZTsKIAotCS8qIHdlIG11c3Qgc3RhcnQgd2l0aCBhbiBhbGxvY2F0ZWQgZGF0dW0gKi8KLQlhc3NlcnQoIWQudmFsIHx8IGQuYXNpemUpOwotCiAJaWYgKHhsZW4gPT0gMCkKIAkJcmV0dXJuIGQ7CiAKQEAgLTU2LDExICs1MSw4IEBACiAJd2hpbGUgKChkLmxlbiArIHhsZW4pID4gbmV3c2l6ZSkKIAkJbmV3c2l6ZSAqPSAyOwogCi0JbmQuYXNpemUgPSBuZXdzaXplOwogCW5kLnZhbCA9IHhyZWFsbG9jKGQudmFsLCBuZXdzaXplKTsKIAotCWFzc2VydChuZC5hc2l6ZSA+PSAoZC5sZW4gKyB4bGVuKSk7Ci0KIAlyZXR1cm4gbmQ7CiB9CiAKQEAgLTgzLDE2ICs3NSwxMSBAQAogCWxvbmcgdmFsOwogCiAJeFszXSA9ICdcMCc7Ci0JeFswXSA9IHNbKCppKV07Ci0JaWYgKHhbMF0pIHsKLQkJeFsxXSA9IHNbKCppKSsxXTsKLQkJaWYgKHhbMV0pCi0JCQl4WzJdID0gc1soKmkpKzJdOwotCX0KKwlzdHJuY3B5KHgsIHMgKyAqaSwgMyk7CiAKIAl2YWwgPSBzdHJ0b2woeCwgJmVuZHgsIDgpOwotCWlmICgoZW5keCAtIHgpID09IDApCi0JCWZwcmludGYoc3RkZXJyLCAiRW1wdHkgXFxubm4gZXNjYXBlXG4iKTsKKworCWFzc2VydChlbmR4ID4geCk7CiAKIAkoKmkpICs9IGVuZHggLSB4OwogCXJldHVybiB2YWw7CkBAIC0xMDUsMTMgKzkyLDExIEBACiAJbG9uZyB2YWw7CiAKIAl4WzJdID0gJ1wwJzsKLQl4WzBdID0gc1soKmkpXTsKLQlpZiAoeFswXSkKLQkJeFsxXSA9IHNbKCppKSsxXTsKKwlzdHJuY3B5KHgsIHMgKyAqaSwgMik7CiAKIAl2YWwgPSBzdHJ0b2woeCwgJmVuZHgsIDE2KTsKLQlpZiAoKGVuZHggLSB4KSA9PSAwKQotCQlmcHJpbnRmKHN0ZGVyciwgIkVtcHR5IFxceCBlc2NhcGVcbiIpOworCWlmICghKGVuZHggID4geCkpCisJCWRpZSgiXFx4IHVzZWQgd2l0aCBubyBmb2xsb3dpbmcgaGV4IGRpZ2l0c1xuIik7CiAKIAkoKmkpICs9IGVuZHggLSB4OwogCXJldHVybiB2YWw7CkBAIC0xODIsMTQgKzE2NywyOSBAQAogCXJldHVybiBkOwogfQogCi1zdHJ1Y3QgZGF0YSBkYXRhX2NvcHlfZmlsZShGSUxFICpmLCBzaXplX3QgbGVuKQorc3RydWN0IGRhdGEgZGF0YV9jb3B5X2ZpbGUoRklMRSAqZiwgc2l6ZV90IG1heGxlbikKIHsKLQlzdHJ1Y3QgZGF0YSBkOworCXN0cnVjdCBkYXRhIGQgPSBlbXB0eV9kYXRhOwogCi0JZCA9IGRhdGFfZ3Jvd19mb3IoZW1wdHlfZGF0YSwgbGVuKTsKKwl3aGlsZSAoIWZlb2YoZikgJiYgKGQubGVuIDwgbWF4bGVuKSkgeworCQlzaXplX3QgY2h1bmtzaXplLCByZXQ7CiAKLQlkLmxlbiA9IGxlbjsKLQlmcmVhZChkLnZhbCwgbGVuLCAxLCBmKTsKKwkJaWYgKG1heGxlbiA9PSAtMSkKKwkJCWNodW5rc2l6ZSA9IDQwOTY7CisJCWVsc2UKKwkJCWNodW5rc2l6ZSA9IG1heGxlbiAtIGQubGVuOworCisJCWQgPSBkYXRhX2dyb3dfZm9yKGQsIGNodW5rc2l6ZSk7CisJCXJldCA9IGZyZWFkKGQudmFsICsgZC5sZW4sIDEsIGNodW5rc2l6ZSwgZik7CisKKwkJaWYgKGZlcnJvcihmKSkKKwkJCWRpZSgiRXJyb3IgcmVhZGluZyBmaWxlIGludG8gZGF0YTogJXMiLCBzdHJlcnJvcihlcnJubykpOworCisJCWlmIChkLmxlbiArIHJldCA8IGQubGVuKQorCQkJZGllKCJPdmVyZmxvdyByZWFkaW5nIGZpbGUgaW50byBkYXRhXG4iKTsKKworCQlkLmxlbiArPSByZXQ7CisJfQogCiAJcmV0dXJuIGQ7CiB9CkBAIC0yNDcsNyArMjQ3LDcgQEAKIAogc3RydWN0IGRhdGEgZGF0YV9hcHBlbmRfY2VsbChzdHJ1Y3QgZGF0YSBkLCBjZWxsX3Qgd29yZCkKIHsKLQljZWxsX3QgYmV3b3JkID0gY3B1X3RvX2JlMzIod29yZCk7CisJY2VsbF90IGJld29yZCA9IGNwdV90b19mZHQzMih3b3JkKTsKIAogCXJldHVybiBkYXRhX2FwcGVuZF9kYXRhKGQsICZiZXdvcmQsIHNpemVvZihiZXdvcmQpKTsKIH0KQEAgLTI1NiwxNSArMjU2LDE1IEBACiB7CiAJc3RydWN0IGZkdF9yZXNlcnZlX2VudHJ5IGJlcmU7CiAKLQliZXJlLmFkZHJlc3MgPSBjcHVfdG9fYmU2NChyZS0+YWRkcmVzcyk7Ci0JYmVyZS5zaXplID0gY3B1X3RvX2JlNjQocmUtPnNpemUpOworCWJlcmUuYWRkcmVzcyA9IGNwdV90b19mZHQ2NChyZS0+YWRkcmVzcyk7CisJYmVyZS5zaXplID0gY3B1X3RvX2ZkdDY0KHJlLT5zaXplKTsKIAogCXJldHVybiBkYXRhX2FwcGVuZF9kYXRhKGQsICZiZXJlLCBzaXplb2YoYmVyZSkpOwogfQogCi1zdHJ1Y3QgZGF0YSBkYXRhX2FwcGVuZF9hZGRyKHN0cnVjdCBkYXRhIGQsIHU2NCBhZGRyKQorc3RydWN0IGRhdGEgZGF0YV9hcHBlbmRfYWRkcihzdHJ1Y3QgZGF0YSBkLCB1aW50NjRfdCBhZGRyKQogewotCXU2NCBiZWFkZHIgPSBjcHVfdG9fYmU2NChhZGRyKTsKKwl1aW50NjRfdCBiZWFkZHIgPSBjcHVfdG9fZmR0NjQoYWRkcik7CiAKIAlyZXR1cm4gZGF0YV9hcHBlbmRfZGF0YShkLCAmYmVhZGRyLCBzaXplb2YoYmVhZGRyKSk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdGMtc3JjL2R0Yy1sZXhlci5sIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRjLXNyYy9kdGMtbGV4ZXIubAppbmRleCBjODExYjIyLi40NGRiZmQzIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC9kdGMtc3JjL2R0Yy1sZXhlci5sCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0Yy1zcmMvZHRjLWxleGVyLmwKQEAgLTI4LDYgKzI4LDEwIEBACiBQUk9QTk9ERUNIQVIJW2EtekEtWjAtOSwuXysqIz9ALV0KIFBBVEhDSEFSCSh7UFJPUE5PREVDSEFSfXxbL10pCiBMQUJFTAkJW2EtekEtWl9dW2EtekEtWjAtOV9dKgorU1RSSU5HCQlcIihbXlxcIl18XFwuKSpcIgorV1MJCVtbOnNwYWNlOl1dCitDT01NRU5UCQkiLyoiKFteKl18XCorW14qL10pKlwqKyIvIgorTElORUNPTU1FTlQJIi8vIi4qXG4KIAogJXsKICNpbmNsdWRlICJkdGMuaCIKQEAgLTUyLDI5ICs1NiwyNiBAQAogCQkJCURQUklOVCgiPFYxPlxuIik7IFwKIAkJCQlCRUdJTihWMSk7IFwKIAkJCX0KKworc3RhdGljIHZvaWQgcHVzaF9pbnB1dF9maWxlKGNvbnN0IGNoYXIgKmZpbGVuYW1lKTsKK3N0YXRpYyBpbnQgcG9wX2lucHV0X2ZpbGUodm9pZCk7CiAlfQogCiAlJQotPCo+Ii9pbmNsdWRlLyIJCUJFR0lOKElOQ0xVREUpOwotCi08SU5DTFVERT5cIlteIlxuXSpcIgl7Ci0JCQl5eXRleHRbc3RybGVuKHl5dGV4dCkgLSAxXSA9IDA7Ci0JCQlpZiAoIXB1c2hfaW5wdXRfZmlsZSh5eXRleHQgKyAxKSkgewotCQkJCS8qIFNvbWUgdW5yZWNvdmVyYWJsZSBlcnJvci4qLwotCQkJCWV4aXQoMSk7Ci0JCQl9Ci0JCQlCRUdJTl9ERUZBVUxUKCk7Cis8Kj4iL2luY2x1ZGUvIntXU30qe1NUUklOR30geworCQkJY2hhciAqbmFtZSA9IHN0cmNocih5eXRleHQsICdcIicpICsgMTsKKwkJCXl5dGV4dFt5eWxlbmctMV0gPSAnXDAnOworCQkJcHVzaF9pbnB1dF9maWxlKG5hbWUpOwogCQl9CiAKLQogPCo+PDxFT0Y+PgkJewogCQkJaWYgKCFwb3BfaW5wdXRfZmlsZSgpKSB7CiAJCQkJeXl0ZXJtaW5hdGUoKTsKIAkJCX0KIAkJfQogCi08Kj5cIihbXlxcIl18XFwuKSpcIgl7Ci0JCQl5eWxsb2MuZmlsZW51bSA9IHNyY3Bvc19maWxlbnVtOworPCo+e1NUUklOR30JeworCQkJeXlsbG9jLmZpbGUgPSBzcmNwb3NfZmlsZTsKIAkJCXl5bGxvYy5maXJzdF9saW5lID0geXlsaW5lbm87CiAJCQlEUFJJTlQoIlN0cmluZzogJXNcbiIsIHl5dGV4dCk7CiAJCQl5eWx2YWwuZGF0YSA9IGRhdGFfY29weV9lc2NhcGVfc3RyaW5nKHl5dGV4dCsxLApAQCAtODQsNyArODUsNyBAQAogCQl9CiAKIDwqPiIvZHRzLXYxLyIJewotCQkJeXlsbG9jLmZpbGVudW0gPSBzcmNwb3NfZmlsZW51bTsKKwkJCXl5bGxvYy5maWxlID0gc3JjcG9zX2ZpbGU7CiAJCQl5eWxsb2MuZmlyc3RfbGluZSA9IHl5bGluZW5vOwogCQkJRFBSSU5UKCJLZXl3b3JkOiAvZHRzLXYxL1xuIik7CiAJCQlkdHNfdmVyc2lvbiA9IDE7CkBAIC05Myw3ICs5NCw3IEBACiAJCX0KIAogPCo+Ii9tZW1yZXNlcnZlLyIJewotCQkJeXlsbG9jLmZpbGVudW0gPSBzcmNwb3NfZmlsZW51bTsKKwkJCXl5bGxvYy5maWxlID0gc3JjcG9zX2ZpbGU7CiAJCQl5eWxsb2MuZmlyc3RfbGluZSA9IHl5bGluZW5vOwogCQkJRFBSSU5UKCJLZXl3b3JkOiAvbWVtcmVzZXJ2ZS9cbiIpOwogCQkJQkVHSU5fREVGQVVMVCgpOwpAQCAtMTAxLDcgKzEwMiw3IEBACiAJCX0KIAogPCo+e0xBQkVMfToJewotCQkJeXlsbG9jLmZpbGVudW0gPSBzcmNwb3NfZmlsZW51bTsKKwkJCXl5bGxvYy5maWxlID0gc3JjcG9zX2ZpbGU7CiAJCQl5eWxsb2MuZmlyc3RfbGluZSA9IHl5bGluZW5vOwogCQkJRFBSSU5UKCJMYWJlbDogJXNcbiIsIHl5dGV4dCk7CiAJCQl5eWx2YWwubGFiZWxyZWYgPSBzdHJkdXAoeXl0ZXh0KTsKQEAgLTExMCw3ICsxMTEsNyBAQAogCQl9CiAKIDxJTklUSUFMPltib2RoXSMgewotCQkJeXlsbG9jLmZpbGVudW0gPSBzcmNwb3NfZmlsZW51bTsKKwkJCXl5bGxvYy5maWxlID0gc3JjcG9zX2ZpbGU7CiAJCQl5eWxsb2MuZmlyc3RfbGluZSA9IHl5bGluZW5vOwogCQkJaWYgKCp5eXRleHQgPT0gJ2InKQogCQkJCXl5bHZhbC5jYmFzZSA9IDI7CkBAIC0xMjUsNyArMTI2LDcgQEAKIAkJfQogCiA8SU5JVElBTD5bMC05YS1mQS1GXSsJewotCQkJeXlsbG9jLmZpbGVudW0gPSBzcmNwb3NfZmlsZW51bTsKKwkJCXl5bGxvYy5maWxlID0gc3JjcG9zX2ZpbGU7CiAJCQl5eWxsb2MuZmlyc3RfbGluZSA9IHl5bGluZW5vOwogCQkJeXlsdmFsLmxpdGVyYWwgPSBzdHJkdXAoeXl0ZXh0KTsKIAkJCURQUklOVCgiTGl0ZXJhbDogJyVzJ1xuIiwgeXlsdmFsLmxpdGVyYWwpOwpAQCAtMTMzLDcgKzEzNCw3IEBACiAJCX0KIAogPFYxPlswLTldK3wwW3hYXVswLTlhLWZBLUZdKyAgICAgIHsKLQkJCXl5bGxvYy5maWxlbnVtID0gc3JjcG9zX2ZpbGVudW07CisJCQl5eWxsb2MuZmlsZSA9IHNyY3Bvc19maWxlOwogCQkJeXlsbG9jLmZpcnN0X2xpbmUgPSB5eWxpbmVubzsKIAkJCXl5bHZhbC5saXRlcmFsID0gc3RyZHVwKHl5dGV4dCk7CiAJCQlEUFJJTlQoIkxpdGVyYWw6ICclcydcbiIsIHl5bHZhbC5saXRlcmFsKTsKQEAgLTE0MSw3ICsxNDIsNyBAQAogCQl9CiAKIFwme0xBQkVMfQl7CS8qIGxhYmVsIHJlZmVyZW5jZSAqLwotCQkJeXlsbG9jLmZpbGVudW0gPSBzcmNwb3NfZmlsZW51bTsKKwkJCXl5bGxvYy5maWxlID0gc3JjcG9zX2ZpbGU7CiAJCQl5eWxsb2MuZmlyc3RfbGluZSA9IHl5bGluZW5vOwogCQkJRFBSSU5UKCJSZWY6ICVzXG4iLCB5eXRleHQrMSk7CiAJCQl5eWx2YWwubGFiZWxyZWYgPSBzdHJkdXAoeXl0ZXh0KzEpOwpAQCAtMTQ5LDcgKzE1MCw3IEBACiAJCX0KIAogIiZ7LyJ7UEFUSENIQVJ9K1x9CXsJLyogbmV3LXN0eWxlIHBhdGggcmVmZXJlbmNlICovCi0JCQl5eWxsb2MuZmlsZW51bSA9IHNyY3Bvc19maWxlbnVtOworCQkJeXlsbG9jLmZpbGUgPSBzcmNwb3NfZmlsZTsKIAkJCXl5bGxvYy5maXJzdF9saW5lID0geXlsaW5lbm87CiAJCQl5eXRleHRbeXlsZW5nLTFdID0gJ1wwJzsKIAkJCURQUklOVCgiUmVmOiAlc1xuIiwgeXl0ZXh0KzIpOwpAQCAtMTU4LDcgKzE1OSw3IEBACiAJCX0KIAogPElOSVRJQUw+IiYvIntQQVRIQ0hBUn0rIHsJLyogb2xkLXN0eWxlIHBhdGggcmVmZXJlbmNlICovCi0JCQl5eWxsb2MuZmlsZW51bSA9IHNyY3Bvc19maWxlbnVtOworCQkJeXlsbG9jLmZpbGUgPSBzcmNwb3NfZmlsZTsKIAkJCXl5bGxvYy5maXJzdF9saW5lID0geXlsaW5lbm87CiAJCQlEUFJJTlQoIlJlZjogJXNcbiIsIHl5dGV4dCsxKTsKIAkJCXl5bHZhbC5sYWJlbHJlZiA9IHN0cmR1cCh5eXRleHQrMSk7CkBAIC0xNjYsNyArMTY3LDcgQEAKIAkJfQogCiA8QllURVNUUklORz5bMC05YS1mQS1GXXsyfSB7Ci0JCQl5eWxsb2MuZmlsZW51bSA9IHNyY3Bvc19maWxlbnVtOworCQkJeXlsbG9jLmZpbGUgPSBzcmNwb3NfZmlsZTsKIAkJCXl5bGxvYy5maXJzdF9saW5lID0geXlsaW5lbm87CiAJCQl5eWx2YWwuYnl0ZSA9IHN0cnRvbCh5eXRleHQsIE5VTEwsIDE2KTsKIAkJCURQUklOVCgiQnl0ZTogJTAyeFxuIiwgKGludCl5eWx2YWwuYnl0ZSk7CkBAIC0xNzQsNyArMTc1LDcgQEAKIAkJfQogCiA8QllURVNUUklORz4iXSIJewotCQkJeXlsbG9jLmZpbGVudW0gPSBzcmNwb3NfZmlsZW51bTsKKwkJCXl5bGxvYy5maWxlID0gc3JjcG9zX2ZpbGU7CiAJCQl5eWxsb2MuZmlyc3RfbGluZSA9IHl5bGluZW5vOwogCQkJRFBSSU5UKCIvQllURVNUUklOR1xuIik7CiAJCQlCRUdJTl9ERUZBVUxUKCk7CkBAIC0xODIsNyArMTgzLDcgQEAKIAkJfQogCiA8UFJPUE5PREVOQU1FPntQUk9QTk9ERUNIQVJ9KyB7Ci0JCQl5eWxsb2MuZmlsZW51bSA9IHNyY3Bvc19maWxlbnVtOworCQkJeXlsbG9jLmZpbGUgPSBzcmNwb3NfZmlsZTsKIAkJCXl5bGxvYy5maXJzdF9saW5lID0geXlsaW5lbm87CiAJCQlEUFJJTlQoIlByb3BOb2RlTmFtZTogJXNcbiIsIHl5dGV4dCk7CiAJCQl5eWx2YWwucHJvcG5vZGVuYW1lID0gc3RyZHVwKHl5dGV4dCk7CkBAIC0xOTAsMjAgKzE5MSwxOSBAQAogCQkJcmV0dXJuIERUX1BST1BOT0RFTkFNRTsKIAkJfQogCi0KLTwqPltbOnNwYWNlOl1dKwkvKiBlYXQgd2hpdGVzcGFjZSAqLwotCi08Kj4iLyoiKFteKl18XCorW14qL10pKlwqKyIvIgl7Ci0JCQl5eWxsb2MuZmlsZW51bSA9IHNyY3Bvc19maWxlbnVtOworIi9pbmNiaW4vIgl7CisJCQl5eWxsb2MuZmlsZSA9IHNyY3Bvc19maWxlOwogCQkJeXlsbG9jLmZpcnN0X2xpbmUgPSB5eWxpbmVubzsKLQkJCURQUklOVCgiQ29tbWVudDogJXNcbiIsIHl5dGV4dCk7Ci0JCQkvKiBlYXQgY29tbWVudHMgKi8KKwkJCURQUklOVCgiQmluYXJ5IEluY2x1ZGVcbiIpOworCQkJcmV0dXJuIERUX0lOQ0JJTjsKIAkJfQogCi08Kj4iLy8iLipcbgkvKiBlYXQgbGluZSBjb21tZW50cyAqLworPCo+e1dTfSsJLyogZWF0IHdoaXRlc3BhY2UgKi8KKzwqPntDT01NRU5UfSsJLyogZWF0IEMtc3R5bGUgY29tbWVudHMgKi8KKzwqPntMSU5FQ09NTUVOVH0rIC8qIGVhdCBDKystc3R5bGUgY29tbWVudHMgKi8KIAogPCo+LgkJewotCQkJeXlsbG9jLmZpbGVudW0gPSBzcmNwb3NfZmlsZW51bTsKKwkJCXl5bGxvYy5maWxlID0gc3JjcG9zX2ZpbGU7CiAJCQl5eWxsb2MuZmlyc3RfbGluZSA9IHl5bGluZW5vOwogCQkJRFBSSU5UKCJDaGFyOiAlYyAoXFx4JTAyeClcbiIsIHl5dGV4dFswXSwKIAkJCQkodW5zaWduZWQpeXl0ZXh0WzBdKTsKQEAgLTIyNywxNCArMjI3LDEzIEBACiAgKi8KIAogc3RydWN0IGluY2xfZmlsZSB7Ci0JaW50IGZpbGVudW07Ci0JRklMRSAqZmlsZTsKKwlzdHJ1Y3QgZHRjX2ZpbGUgKmZpbGU7CiAJWVlfQlVGRkVSX1NUQVRFIHl5X3ByZXZfYnVmOwogCWludCB5eV9wcmV2X2xpbmVubzsKIAlzdHJ1Y3QgaW5jbF9maWxlICpwcmV2OwogfTsKIAotc3RydWN0IGluY2xfZmlsZSAqaW5jbF9maWxlX3N0YWNrOworc3RhdGljIHN0cnVjdCBpbmNsX2ZpbGUgKmluY2xfZmlsZV9zdGFjazsKIAogCiAvKgpAQCAtMjQ1LDM2ICsyNDQsMzQgQEAKIHN0YXRpYyBpbnQgaW5jbF9kZXB0aCA9IDA7CiAKIAotaW50IHB1c2hfaW5wdXRfZmlsZShjb25zdCBjaGFyICpmaWxlbmFtZSkKK3N0YXRpYyB2b2lkIHB1c2hfaW5wdXRfZmlsZShjb25zdCBjaGFyICpmaWxlbmFtZSkKIHsKLQlGSUxFICpmOwogCXN0cnVjdCBpbmNsX2ZpbGUgKmluY2xfZmlsZTsKKwlzdHJ1Y3QgZHRjX2ZpbGUgKm5ld2ZpbGU7CisJc3RydWN0IHNlYXJjaF9wYXRoIHNlYXJjaCwgKnNlYXJjaHB0ciA9IE5VTEw7CiAKLQlpZiAoIWZpbGVuYW1lKSB7Ci0JCXl5ZXJyb3IoIk5vIGluY2x1ZGUgZmlsZSBuYW1lIGdpdmVuLiIpOwotCQlyZXR1cm4gMDsKKwlhc3NlcnQoZmlsZW5hbWUpOworCisJaWYgKGluY2xfZGVwdGgrKyA+PSBNQVhfSU5DTFVERV9ERVBUSCkKKwkJZGllKCJJbmNsdWRlcyBuZXN0ZWQgdG9vIGRlZXBseSIpOworCisJaWYgKHNyY3Bvc19maWxlKSB7CisJCXNlYXJjaC5kaXIgPSBzcmNwb3NfZmlsZS0+ZGlyOworCQlzZWFyY2gubmV4dCA9IE5VTEw7CisJCXNlYXJjaC5wcmV2ID0gTlVMTDsKKwkJc2VhcmNocHRyID0gJnNlYXJjaDsKIAl9CiAKLQlpZiAoaW5jbF9kZXB0aCsrID49IE1BWF9JTkNMVURFX0RFUFRIKSB7Ci0JCXl5ZXJyb3IoIkluY2x1ZGVzIG5lc3RlZCB0b28gZGVlcGx5Iik7Ci0JCXJldHVybiAwOwotCX0KKwluZXdmaWxlID0gZHRjX29wZW5fZmlsZShmaWxlbmFtZSwgc2VhcmNocHRyKTsKIAotCWYgPSBkdGNfb3Blbl9maWxlKGZpbGVuYW1lKTsKLQotCWluY2xfZmlsZSA9IG1hbGxvYyhzaXplb2Yoc3RydWN0IGluY2xfZmlsZSkpOwotCWlmICghaW5jbF9maWxlKSB7Ci0JCXl5ZXJyb3IoIkNhbiBub3QgYWxsb2NhdGUgaW5jbHVkZSBmaWxlIHNwYWNlLiIpOwotCQlyZXR1cm4gMDsKLQl9CisJaW5jbF9maWxlID0geG1hbGxvYyhzaXplb2Yoc3RydWN0IGluY2xfZmlsZSkpOwogCiAJLyoKIAkgKiBTYXZlIGN1cnJlbnQgY29udGV4dC4KIAkgKi8KIAlpbmNsX2ZpbGUtPnl5X3ByZXZfYnVmID0gWVlfQ1VSUkVOVF9CVUZGRVI7CiAJaW5jbF9maWxlLT55eV9wcmV2X2xpbmVubyA9IHl5bGluZW5vOwotCWluY2xfZmlsZS0+ZmlsZW51bSA9IHNyY3Bvc19maWxlbnVtOwotCWluY2xfZmlsZS0+ZmlsZSA9IHl5aW47CisJaW5jbF9maWxlLT5maWxlID0gc3JjcG9zX2ZpbGU7CiAJaW5jbF9maWxlLT5wcmV2ID0gaW5jbF9maWxlX3N0YWNrOwogCiAJaW5jbF9maWxlX3N0YWNrID0gaW5jbF9maWxlOwpAQCAtMjgyLDIzICsyNzksMjEgQEAKIAkvKgogCSAqIEVzdGFibGlzaCBuZXcgY29udGV4dC4KIAkgKi8KLQlzcmNwb3NfZmlsZW51bSA9IGxvb2t1cF9maWxlX25hbWUoZmlsZW5hbWUsIDApOworCXNyY3Bvc19maWxlID0gbmV3ZmlsZTsKIAl5eWxpbmVubyA9IDE7Ci0JeXlpbiA9IGY7CisJeXlpbiA9IG5ld2ZpbGUtPmZpbGU7CiAJeXlfc3dpdGNoX3RvX2J1ZmZlcih5eV9jcmVhdGVfYnVmZmVyKHl5aW4sIFlZX0JVRl9TSVpFKSk7Ci0KLQlyZXR1cm4gMTsKIH0KIAogCi1pbnQgcG9wX2lucHV0X2ZpbGUodm9pZCkKK3N0YXRpYyBpbnQgcG9wX2lucHV0X2ZpbGUodm9pZCkKIHsKIAlzdHJ1Y3QgaW5jbF9maWxlICppbmNsX2ZpbGU7CiAKIAlpZiAoaW5jbF9maWxlX3N0YWNrID09IDApCiAJCXJldHVybiAwOwogCi0JZmNsb3NlKHl5aW4pOworCWR0Y19jbG9zZV9maWxlKHNyY3Bvc19maWxlKTsKIAogCS8qCiAJICogUG9wLgpAQCAtMzEzLDE2ICszMDgsMTMgQEAKIAl5eV9kZWxldGVfYnVmZmVyKFlZX0NVUlJFTlRfQlVGRkVSKTsKIAl5eV9zd2l0Y2hfdG9fYnVmZmVyKGluY2xfZmlsZS0+eXlfcHJldl9idWYpOwogCXl5bGluZW5vID0gaW5jbF9maWxlLT55eV9wcmV2X2xpbmVubzsKLQlzcmNwb3NfZmlsZW51bSA9IGluY2xfZmlsZS0+ZmlsZW51bTsKLQl5eWluID0gaW5jbF9maWxlLT5maWxlOworCXNyY3Bvc19maWxlID0gaW5jbF9maWxlLT5maWxlOworCXl5aW4gPSBpbmNsX2ZpbGUtPmZpbGUgPyBpbmNsX2ZpbGUtPmZpbGUtPmZpbGUgOiBOVUxMOwogCiAJLyoKIAkgKiBGcmVlIG9sZCBzdGF0ZS4KIAkgKi8KIAlmcmVlKGluY2xfZmlsZSk7CiAKLQlpZiAoWVlfQ1VSUkVOVF9CVUZGRVIgPT0gMCkKLQkJcmV0dXJuIDA7Ci0KIAlyZXR1cm4gMTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0Yy1zcmMvZHRjLWxleGVyLmxleC5jX3NoaXBwZWQgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdGMtc3JjL2R0Yy1sZXhlci5sZXguY19zaGlwcGVkCmluZGV4IGQwZjc0MjQuLmFjMzkyY2IgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2R0Yy1zcmMvZHRjLWxleGVyLmxleC5jX3NoaXBwZWQKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRjLXNyYy9kdGMtbGV4ZXIubGV4LmNfc2hpcHBlZApAQCAtOSw3ICs5LDcgQEAKICNkZWZpbmUgRkxFWF9TQ0FOTkVSCiAjZGVmaW5lIFlZX0ZMRVhfTUFKT1JfVkVSU0lPTiAyCiAjZGVmaW5lIFlZX0ZMRVhfTUlOT1JfVkVSU0lPTiA1Ci0jZGVmaW5lIFlZX0ZMRVhfU1VCTUlOT1JfVkVSU0lPTiAzMworI2RlZmluZSBZWV9GTEVYX1NVQk1JTk9SX1ZFUlNJT04gMzQKICNpZiBZWV9GTEVYX1NVQk1JTk9SX1ZFUlNJT04gPiAwCiAjZGVmaW5lIEZMRVhfQkVUQQogI2VuZGlmCkBAIC0zMSw3ICszMSw3IEBACiAKIC8qIEM5OSBzeXN0ZW1zIGhhdmUgPGludHR5cGVzLmg+LiBOb24tQzk5IHN5c3RlbXMgbWF5IG9yIG1heSBub3QuICovCiAKLSNpZiBfX1NURENfVkVSU0lPTl9fID49IDE5OTkwMUwKKyNpZiBkZWZpbmVkIChfX1NURENfVkVSU0lPTl9fKSAmJiBfX1NURENfVkVSU0lPTl9fID49IDE5OTkwMUwKIAogLyogQzk5IHNheXMgdG8gZGVmaW5lIF9fU1REQ19MSU1JVF9NQUNST1MgYmVmb3JlIGluY2x1ZGluZyBzdGRpbnQuaCwKICAqIGlmIHlvdSB3YW50IHRoZSBsaW1pdCAobWF4L21pbikgbWFjcm9zIGZvciBpbnQgdHlwZXMuIApAQCAtOTQsMTEgKzk0LDEyIEBACiAKICNlbHNlCS8qICEgX19jcGx1c3BsdXMgKi8KIAotI2lmIF9fU1REQ19fCisvKiBDOTkgcmVxdWlyZXMgX19TVERDX18gdG8gYmUgZGVmaW5lZCBhcyAxLiAqLworI2lmIGRlZmluZWQgKF9fU1REQ19fKQogCiAjZGVmaW5lIFlZX1VTRV9DT05TVAogCi0jZW5kaWYJLyogX19TVERDX18gKi8KKyNlbmRpZgkvKiBkZWZpbmVkIChfX1NURENfXykgKi8KICNlbmRpZgkvKiAhIF9fY3BsdXNwbHVzICovCiAKICNpZmRlZiBZWV9VU0VfQ09OU1QKQEAgLTE5NCwxMSArMTk1LDEzIEBACiAvKiBUaGUgZm9sbG93aW5nIGlzIGJlY2F1c2Ugd2UgY2Fubm90IHBvcnRhYmx5IGdldCBvdXIgaGFuZHMgb24gc2l6ZV90CiAgKiAod2l0aG91dCBhdXRvY29uZidzIGhlbHAsIHdoaWNoIGlzbid0IGF2YWlsYWJsZSBiZWNhdXNlIHdlIHdhbnQKICAqIGZsZXgtZ2VuZXJhdGVkIHNjYW5uZXJzIHRvIGNvbXBpbGUgb24gdGhlaXIgb3duKS4KKyAqIEdpdmVuIHRoYXQgdGhlIHN0YW5kYXJkIGhhcyBkZWNyZWVkIHRoYXQgc2l6ZV90IGV4aXN0cyBzaW5jZSAxOTg5LAorICogSSBndWVzcyB3ZSBjYW4gYWZmb3JkIHRvIGRlcGVuZCBvbiBpdC4gTWFub2ouCiAgKi8KIAogI2lmbmRlZiBZWV9UWVBFREVGX1lZX1NJWkVfVAogI2RlZmluZSBZWV9UWVBFREVGX1lZX1NJWkVfVAotdHlwZWRlZiB1bnNpZ25lZCBpbnQgeXlfc2l6ZV90OwordHlwZWRlZiBzaXplX3QgeXlfc2l6ZV90OwogI2VuZGlmCiAKICNpZm5kZWYgWVlfU1RSVUNUX1lZX0JVRkZFUl9TVEFURQpAQCAtMzQ5LDcgKzM1Miw3IEBACiAKIC8qIEJlZ2luIHVzZXIgc2VjdDMgKi8KIAotI2RlZmluZSB5eXdyYXAoKSAxCisjZGVmaW5lIHl5d3JhcChuKSAxCiAjZGVmaW5lIFlZX1NLSVBfWVlXUkFQCiAKIHR5cGVkZWYgdW5zaWduZWQgY2hhciBZWV9DSEFSOwpAQCAtMzg5LDE5ICszOTIsMjAgQEAKIAlmbGV4X2ludDMyX3QgeXlfdmVyaWZ5OwogCWZsZXhfaW50MzJfdCB5eV9ueHQ7CiAJfTsKLXN0YXRpYyB5eWNvbnN0IGZsZXhfaW50MTZfdCB5eV9hY2NlcHRbOTRdID0KK3N0YXRpYyB5eWNvbnN0IGZsZXhfaW50MTZfdCB5eV9hY2NlcHRbMTA0XSA9CiAgICAgeyAgIDAsCiAgICAgICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsCi0gICAgICAgMjEsICAgMTksICAgMTYsICAgMTYsICAgMTksICAgMTksICAgMTksICAgIDgsICAgIDgsICAgMTksCi0gICAgICAgIDgsICAgMTksICAgMTksICAgMTksICAgMTksICAgMTQsICAgMTUsICAgMTUsICAgMTksICAgIDksCi0gICAgICAgIDksICAgMTYsICAgIDAsICAgIDMsICAgIDAsICAgIDAsICAgMTAsICAgIDAsICAgIDAsICAgIDAsCi0gICAgICAgIDAsICAgIDAsICAgIDAsICAgIDgsICAgIDgsICAgIDYsICAgIDAsICAgIDcsICAgIDAsICAgIDIsCi0gICAgICAgIDAsICAgMTMsICAgMTMsICAgMTUsICAgMTUsICAgIDksICAgIDAsICAgMTIsICAgMTAsICAgIDAsCi0gICAgICAgIDAsICAgIDAsICAgIDAsICAgMTgsICAgIDAsICAgIDAsICAgIDAsICAgIDIsICAgIDksICAgIDAsCi0gICAgICAgMTcsICAgIDAsICAgIDAsICAgIDAsICAgMTEsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsCi0gICAgICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDQsICAgIDAsICAgIDAsICAgIDEsICAgIDAsICAgIDAsCi0gICAgICAgIDAsICAgIDUsICAgIDAKKyAgICAgICAyMSwgICAxOSwgICAxNiwgICAxNiwgICAxOSwgICAxOSwgICAxOSwgICAgNywgICAgNywgICAxOSwKKyAgICAgICAgNywgICAxOSwgICAxOSwgICAxOSwgICAxOSwgICAxMywgICAxNCwgICAxNCwgICAxOSwgICAgOCwKKyAgICAgICAgOCwgICAxNiwgICAgMCwgICAgMiwgICAgMCwgICAgMCwgICAgOSwgICAgMCwgICAgMCwgICAgMCwKKyAgICAgICAgMCwgICAgMCwgICAgMCwgICAgNywgICAgNywgICAgNSwgICAgMCwgICAgNiwgICAgMCwgICAxMiwKKyAgICAgICAxMiwgICAxNCwgICAxNCwgICAgOCwgICAgMCwgICAxMSwgICAgOSwgICAgMCwgICAgMCwgICAgMCwKKyAgICAgICAgMCwgICAxOCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgOCwgICAgMCwgICAxNywgICAgMCwKKyAgICAgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAxMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwKKyAgICAgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMywgICAxNSwKKyAgICAgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMSwgICAgMCwKIAorICAgICAgICAwLCAgICA0LCAgICAwCiAgICAgfSA7CiAKIHN0YXRpYyB5eWNvbnN0IGZsZXhfaW50MzJfdCB5eV9lY1syNTZdID0KQEAgLTQ0NCwxMjIgKzQ0OCwxMjYgQEAKICAgICAgICAgNywgICAgNywgICAgNywgICAgOCwgICAgMQogICAgIH0gOwogCi1zdGF0aWMgeXljb25zdCBmbGV4X2ludDE2X3QgeXlfYmFzZVsxMDddID0KK3N0YXRpYyB5eWNvbnN0IGZsZXhfaW50MTZfdCB5eV9iYXNlWzExN10gPQogICAgIHsgICAwLAotICAgICAgICAwLCAgICAwLCAgIDMyLCAgICAwLCAgIDUzLCAgICAwLCAgIDc2LCAgICAwLCAgMTA4LCAgMTExLAotICAgICAgMjgwLCAgMjg4LCAgIDM3LCAgIDM5LCAgIDMzLCAgIDM2LCAgMTA2LCAgICAwLCAgMTIzLCAgMTQ2LAotICAgICAgMjU1LCAgMjUxLCAgIDQ1LCAgICAwLCAgMTU5LCAgMjg4LCAgICAwLCAgIDUzLCAgMTA4LCAgMTcyLAotICAgICAgMTE0LCAgMTI3LCAgMTU4LCAgMjg4LCAgMjQ1LCAgICAwLCAgICAwLCAgMjM0LCAgMjM1LCAgMjM2LAotICAgICAgMTk3LCAgMTk1LCAgMTk5LCAgICAwLCAgICAwLCAgMjg4LCAgICAwLCAgMjg4LCAgMTYwLCAgMjg4LAotICAgICAgMTgzLCAgMjg4LCAgICAwLCAgICAwLCAgMTgzLCAgMTgyLCAgICAwLCAgICAwLCAgICAwLCAgICAwLAotICAgICAgMjA0LCAgMTg5LCAgMjA3LCAgMjg4LCAgMTc5LCAgMTg3LCAgMTgwLCAgMTk0LCAgICAwLCAgMTcxLAotICAgICAgMjg4LCAgMTk2LCAgMTc4LCAgMTc0LCAgMjg4LCAgMTY5LCAgMTY5LCAgMTc3LCAgMTY1LCAgMTUzLAotICAgICAgMTQzLCAgMTU1LCAgMTM3LCAgMTE4LCAgMjg4LCAgMTIyLCAgIDQyLCAgMjg4LCAgIDM2LCAgIDM2LAotICAgICAgIDQwLCAgMjg4LCAgMjg4LCAgMjEyLCAgMjE4LCAgMjIzLCAgMjI5LCAgMjM0LCAgMjM5LCAgMjQ1LAorICAgICAgICAwLCAgICAwLCAgIDMwLCAgICAwLCAgIDQ0LCAgICAwLCAgIDY3LCAgICAwLCAgIDk3LCAgMTA1LAorICAgICAgMzAyLCAgMzAzLCAgIDM1LCAgIDQ0LCAgIDQwLCAgIDk0LCAgMTEyLCAgICAwLCAgMTI5LCAgMTUyLAorICAgICAgMjk2LCAgMjk1LCAgMTU5LCAgICAwLCAgMTc2LCAgMzAzLCAgICAwLCAgMTE2LCAgIDk1LCAgMTY1LAorICAgICAgIDQ5LCAgIDQ2LCAgMTAyLCAgMzAzLCAgMjk2LCAgICAwLCAgICAwLCAgMjg4LCAgMjkwLCAgMjkzLAorICAgICAgMjY0LCAgMjY2LCAgMjcwLCAgICAwLCAgICAwLCAgMzAzLCAgICAwLCAgMzAzLCAgMjY0LCAgMzAzLAorICAgICAgICAwLCAgICAwLCAgMTk1LCAgMTAxLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgMjg0LCAgMTI1LAorICAgICAgMjc3LCAgMjY1LCAgMjI1LCAgMjMwLCAgMjE2LCAgMjE4LCAgICAwLCAgMjAyLCAgMjI0LCAgMjIxLAorICAgICAgMjE3LCAgMTA3LCAgMTk2LCAgMTg4LCAgMzAzLCAgMjA2LCAgMTc5LCAgMTg2LCAgMTc4LCAgMTg1LAorICAgICAgMTgzLCAgMTYyLCAgMTYxLCAgMTUwLCAgMTY5LCAgMTYwLCAgMTQ1LCAgMTI1LCAgMzAzLCAgMzAzLAorICAgICAgMTM3LCAgMTA5LCAgMTkwLCAgMTAzLCAgMjAzLCAgMTY3LCAgMTA4LCAgMTk3LCAgMzAzLCAgMTIzLAogCi0gICAgICAyNTEsICAyNTUsICAyNjIsICAyNzAsICAyNzUsICAyODAKKyAgICAgICAyOSwgIDMwMywgIDMwMywgIDIxNSwgIDIyMSwgIDIyNiwgIDIyOSwgIDIzNCwgIDI0MCwgIDI0NiwKKyAgICAgIDI1MCwgIDI1NywgIDI2NSwgIDI3MCwgIDI3NSwgIDI4MgogICAgIH0gOwogCi1zdGF0aWMgeXljb25zdCBmbGV4X2ludDE2X3QgeXlfZGVmWzEwN10gPQorc3RhdGljIHl5Y29uc3QgZmxleF9pbnQxNl90IHl5X2RlZlsxMTddID0KICAgICB7ICAgMCwKLSAgICAgICA5MywgICAgMSwgICAgMSwgICAgMywgICAgMywgICAgNSwgICA5MywgICAgNywgICAgMywgICAgMywKLSAgICAgICA5MywgICA5MywgICA5MywgICA5MywgICA5NCwgICA5NSwgICA5MywgICA5NiwgICA5MywgICAxOSwKLSAgICAgICAxOSwgICAyMCwgICA5NywgICA5OCwgICAyMCwgICA5MywgICA5OSwgIDEwMCwgICA5NSwgICA5MywKLSAgICAgICA5MywgICA5MywgICA5NCwgICA5MywgICA5NCwgIDEwMSwgIDEwMiwgICA5MywgIDEwMywgIDEwNCwKLSAgICAgICA5MywgICA5MywgICA5MywgICA5NiwgICAxOSwgICA5MywgICAyMCwgICA5MywgICA5NywgICA5MywKLSAgICAgICA5NywgICA5MywgICAyMCwgICA5OSwgIDEwMCwgICA5MywgIDEwNSwgIDEwMSwgIDEwMiwgIDEwNiwKLSAgICAgIDEwMywgIDEwMywgIDEwNCwgICA5MywgICA5MywgICA5MywgICA5MywgICA5NCwgIDEwNSwgIDEwNiwKLSAgICAgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywKLSAgICAgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywKLSAgICAgICA5MywgICA5MywgICAgMCwgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywKKyAgICAgIDEwMywgICAgMSwgICAgMSwgICAgMywgICAgMywgICAgNSwgIDEwMywgICAgNywgICAgMywgICAgMywKKyAgICAgIDEwMywgIDEwMywgIDEwMywgIDEwMywgIDEwNCwgIDEwNSwgIDEwMywgIDEwNiwgIDEwMywgICAxOSwKKyAgICAgICAxOSwgICAyMCwgIDEwMywgIDEwNywgICAyMCwgIDEwMywgIDEwOCwgIDEwOSwgIDEwNSwgIDEwMywKKyAgICAgIDEwMywgIDEwMywgIDEwNCwgIDEwMywgIDEwNCwgIDExMCwgIDExMSwgIDEwMywgIDExMiwgIDExMywKKyAgICAgIDEwMywgIDEwMywgIDEwMywgIDEwNiwgICAxOSwgIDEwMywgICAyMCwgIDEwMywgIDEwMywgIDEwMywKKyAgICAgICAyMCwgIDEwOCwgIDEwOSwgIDEwMywgIDExNCwgIDExMCwgIDExMSwgIDExNSwgIDExMiwgIDExMiwKKyAgICAgIDExMywgIDEwMywgIDEwMywgIDEwMywgIDEwMywgIDEwMywgIDExNCwgIDExNSwgIDEwMywgIDEwMywKKyAgICAgIDEwMywgIDEwMywgIDEwMywgIDEwMywgIDEwMywgIDEwMywgIDEwMywgIDEwMywgIDEwMywgIDEwMywKKyAgICAgIDEwMywgIDEwMywgIDEwMywgIDEwMywgIDEwMywgIDEwMywgIDEwMywgIDEwMywgIDEwMywgIDEwMywKKyAgICAgIDEwMywgIDEwMywgIDEwMywgIDEwMywgIDEwMywgIDExNiwgIDEwMywgIDExNiwgIDEwMywgIDExNiwKIAotICAgICAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzCisgICAgICAxMDMsICAxMDMsICAgIDAsICAxMDMsICAxMDMsICAxMDMsICAxMDMsICAxMDMsICAxMDMsICAxMDMsCisgICAgICAxMDMsICAxMDMsICAxMDMsICAxMDMsICAxMDMsICAxMDMKICAgICB9IDsKIAotc3RhdGljIHl5Y29uc3QgZmxleF9pbnQxNl90IHl5X254dFszMjRdID0KK3N0YXRpYyB5eWNvbnN0IGZsZXhfaW50MTZfdCB5eV9ueHRbMzM5XSA9CiAgICAgeyAgIDAsCiAgICAgICAgMTIsICAgMTMsICAgMTQsICAgMTUsICAgMTIsICAgMTYsICAgMTIsICAgMTIsICAgMTIsICAgMTcsCiAgICAgICAgMTgsICAgMTgsICAgMTgsICAgMTIsICAgMTksICAgMjAsICAgMjAsICAgMTIsICAgMTIsICAgMjEsCiAgICAgICAgMTksICAgMjEsICAgMTksICAgMjIsICAgMjAsICAgMjAsICAgMjAsICAgMjAsICAgMjAsICAgMjAsCi0gICAgICAgMjAsICAgMjAsICAgMjAsICAgMTIsICAgMTIsICAgMjMsICAgMzQsICAgMTIsICAgMzIsICAgMzIsCi0gICAgICAgMzIsICAgMzIsICAgMTIsICAgMTIsICAgMTIsICAgMzYsICAgMjAsICAgMzMsICAgNTAsICAgOTIsCi0gICAgICAgMzUsICAgMjAsICAgMjAsICAgMjAsICAgMjAsICAgMjAsICAgMTUsICAgNTQsICAgOTEsICAgNTQsCi0gICAgICAgNTQsICAgNTQsICAgNTEsICAgMjQsICAgMjQsICAgMjQsICAgNDYsICAgMjUsICAgOTAsICAgMzgsCi0gICAgICAgODksICAgMjYsICAgMjUsICAgMjUsICAgMjUsICAgMjUsICAgMTIsICAgMTMsICAgMTQsICAgMTUsCi0gICAgICAgMjcsICAgMTIsICAgMjcsICAgMjcsICAgMjcsICAgMTcsICAgMjcsICAgMjcsICAgMjcsICAgMTIsCi0gICAgICAgMjgsICAgMjgsICAgMjgsICAgMTIsICAgMTIsICAgMjgsICAgMjgsICAgMjgsICAgMjgsICAgMjgsCisgICAgICAgMjAsICAgMjAsICAgMjAsICAgMTIsICAgMTIsICAgMTIsICAgMzIsICAgMzIsICAxMDIsICAgMjMsCisgICAgICAgMTIsICAgMTIsICAgMTIsICAgMzQsICAgMjAsICAgMzIsICAgMzIsICAgMzIsICAgMzIsICAgMjAsCisgICAgICAgMjAsICAgMjAsICAgMjAsICAgMjAsICAgMjQsICAgMjQsICAgMjQsICAgMzUsICAgMjUsICAgNTQsCisgICAgICAgNTQsICAgNTQsICAgMjYsICAgMjUsICAgMjUsICAgMjUsICAgMjUsICAgMTIsICAgMTMsICAgMTQsCisgICAgICAgMTUsICAgMjcsICAgMTIsICAgMjcsICAgMjcsICAgMjcsICAgMjMsICAgMjcsICAgMjcsICAgMjcsCisgICAgICAgMTIsICAgMjgsICAgMjgsICAgMjgsICAgMTIsICAgMTIsICAgMjgsICAgMjgsICAgMjgsICAgMjgsCisgICAgICAgMjgsICAgMjgsICAgMjgsICAgMjgsICAgMjgsICAgMjgsICAgMjgsICAgMjgsICAgMjgsICAgMjgsCiAKLSAgICAgICAyOCwgICAyOCwgICAyOCwgICAyOCwgICAyOCwgICAyOCwgICAyOCwgICAyOCwgICAyOCwgICAxMiwKLSAgICAgICAxMiwgICAxNSwgICAzOSwgICAyOSwgICAxNSwgICA0MCwgICAyOSwgICA5MywgICAzMCwgICAzMSwKLSAgICAgICAzMSwgICAzMCwgICAzMSwgICAzMSwgICA1NiwgICA1NiwgICA1NiwgICA0MSwgICAzMiwgICAzMiwKLSAgICAgICA0MiwgICA4OCwgICA0MywgICA0NSwgICA0NSwgICA0NSwgICA0NiwgICA0NSwgICA0NywgICA0NywKLSAgICAgICA4NywgICAzOCwgICA0NSwgICA0NSwgICA0NSwgICA0NSwgICA0NywgICA0NywgICA0NywgICA0NywKLSAgICAgICA0NywgICA0NywgICA0NywgICA0NywgICA0NywgICA0NywgICA0NywgICA0NywgICA0NywgICA4NiwKLSAgICAgICA0NywgICAzNCwgICAzMywgICA1MCwgICA4NSwgICA0NywgICA0NywgICA0NywgICA0NywgICA1MywKLSAgICAgICA1MywgICA1MywgICA4NCwgICA1MywgICA4MywgICAzNSwgICA4MiwgICA1MSwgICA1MywgICA1MywKLSAgICAgICA1MywgICA1MywgICA1NiwgICA1NiwgICA1NiwgICA5MywgICA2OCwgICA1NCwgICA1NywgICA1NCwKLSAgICAgICA1NCwgICA1NCwgICA1NiwgICA1NiwgICA1NiwgICA2MiwgICA0NiwgICAzNCwgICA3MSwgICA4MSwKKyAgICAgICAxMiwgICAxMiwgICAyOSwgICAzNiwgIDEwMywgICAzNCwgICAxNywgICAzMCwgICAzMSwgICAzMSwKKyAgICAgICAyOSwgICA1NCwgICA1NCwgICA1NCwgICAxNywgICAzMCwgICAzMSwgICAzMSwgICAzOSwgICAzNSwKKyAgICAgICA1MiwgICA0MCwgICA1MiwgICA1MiwgICA1MiwgIDEwMywgICA3OCwgICAzOCwgICAzOCwgICA0NiwKKyAgICAgIDEwMSwgICA2MCwgICA3OSwgICA0MSwgICA2OSwgICA5NywgICA0MiwgICA5NCwgICA0MywgICA0NSwKKyAgICAgICA0NSwgICA0NSwgICA0NiwgICA0NSwgICA0NywgICA0NywgICA5MywgICA5MiwgICA0NSwgICA0NSwKKyAgICAgICA0NSwgICA0NSwgICA0NywgICA0NywgICA0NywgICA0NywgICA0NywgICA0NywgICA0NywgICA0NywKKyAgICAgICA0NywgICA0NywgICA0NywgICA0NywgICA0NywgICAzOSwgICA0NywgICA5MSwgICA0MCwgICA5MCwKKyAgICAgICA5OSwgICA0NywgICA0NywgICA0NywgICA0NywgICA1NCwgICA1NCwgICA1NCwgICA4OSwgICA4OCwKKyAgICAgICA0MSwgICA1NSwgICA4NywgICA0OSwgIDEwMCwgICA0MywgICA1MSwgICA1MSwgICA1MSwgICA4NiwKKyAgICAgICA1MSwgICA5NSwgICA5NSwgICA5NiwgICA4NSwgICA1MSwgICA1MSwgICA1MSwgICA1MSwgICA1MiwKIAotICAgICAgIDgwLCAgIDc5LCAgIDc4LCAgIDc3LCAgIDc2LCAgIDc1LCAgIDc0LCAgIDczLCAgIDcyLCAgIDY0LAotICAgICAgIDYyLCAgIDM1LCAgIDMzLCAgIDMzLCAgIDMzLCAgIDMzLCAgIDMzLCAgIDMzLCAgIDMzLCAgIDMzLAotICAgICAgIDM3LCAgIDY3LCAgIDY2LCAgIDM3LCAgIDM3LCAgIDM3LCAgIDQ0LCAgIDY1LCAgIDQ0LCAgIDQ5LAotICAgICAgIDQ5LCAgIDQ5LCAgIDQ5LCAgIDQ5LCAgIDQ5LCAgIDQ5LCAgIDQ5LCAgIDUyLCAgIDY0LCAgIDUyLAotICAgICAgIDU0LCAgIDYyLCAgIDU0LCAgIDYwLCAgIDU0LCAgIDU0LCAgIDU1LCAgIDkzLCAgIDU1LCAgIDU1LAotICAgICAgIDU1LCAgIDU1LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDQ4LCAgIDU4LCAgIDU4LCAgIDU5LCAgIDQ4LAotICAgICAgIDU5LCAgIDU5LCAgIDYxLCAgIDYxLCAgIDYxLCAgIDYxLCAgIDYxLCAgIDYxLCAgIDYxLCAgIDYxLAotICAgICAgIDYzLCAgIDYzLCAgIDYzLCAgIDYzLCAgIDYzLCAgIDYzLCAgIDYzLCAgIDYzLCAgIDY5LCAgIDkzLAotICAgICAgIDY5LCAgIDcwLCAgIDcwLCAgIDcwLCAgIDkzLCAgIDcwLCAgIDcwLCAgIDExLCAgIDkzLCAgIDkzLAotICAgICAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLAorICAgICAgIDk5LCAgIDUyLCAgIDUyLCAgIDUyLCAgIDk1LCAgIDk1LCAgIDk2LCAgIDg0LCAgIDQ2LCAgIDgzLAorICAgICAgIDgyLCAgIDgxLCAgIDM5LCAgIDc5LCAgMTAwLCAgIDMzLCAgIDMzLCAgIDMzLCAgIDMzLCAgIDMzLAorICAgICAgIDMzLCAgIDMzLCAgIDMzLCAgIDM3LCAgIDgwLCAgIDc3LCAgIDM3LCAgIDM3LCAgIDM3LCAgIDQ0LAorICAgICAgIDQwLCAgIDQ0LCAgIDUwLCAgIDc2LCAgIDUwLCAgIDUyLCAgIDc1LCAgIDUyLCAgIDc0LCAgIDUyLAorICAgICAgIDUyLCAgIDUzLCAgIDczLCAgIDUzLCAgIDUzLCAgIDUzLCAgIDUzLCAgIDU2LCAgIDU2LCAgIDU2LAorICAgICAgIDcyLCAgIDU2LCAgIDU2LCAgIDU3LCAgIDcxLCAgIDU3LCAgIDU3LCAgIDU5LCAgIDU5LCAgIDU5LAorICAgICAgIDU5LCAgIDU5LCAgIDU5LCAgIDU5LCAgIDU5LCAgIDYxLCAgIDYxLCAgIDYxLCAgIDYxLCAgIDYxLAorICAgICAgIDYxLCAgIDYxLCAgIDYxLCAgIDY3LCAgIDcwLCAgIDY3LCAgIDY4LCAgIDY4LCAgIDY4LCAgIDYyLAorICAgICAgIDY4LCAgIDY4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LAorICAgICAgIDYwLCAgIDY2LCAgIDY1LCAgIDY0LCAgIDYzLCAgIDYyLCAgIDYwLCAgIDU4LCAgMTAzLCAgIDQ4LAogCi0gICAgICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsCi0gICAgICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsCi0gICAgICAgOTMsICAgOTMsICAgOTMKKyAgICAgICA0OCwgIDEwMywgICAxMSwgIDEwMywgIDEwMywgIDEwMywgIDEwMywgIDEwMywgIDEwMywgIDEwMywKKyAgICAgIDEwMywgIDEwMywgIDEwMywgIDEwMywgIDEwMywgIDEwMywgIDEwMywgIDEwMywgIDEwMywgIDEwMywKKyAgICAgIDEwMywgIDEwMywgIDEwMywgIDEwMywgIDEwMywgIDEwMywgIDEwMywgIDEwMywgIDEwMywgIDEwMywKKyAgICAgIDEwMywgIDEwMywgIDEwMywgIDEwMywgIDEwMywgIDEwMywgIDEwMywgIDEwMwogICAgIH0gOwogCi1zdGF0aWMgeXljb25zdCBmbGV4X2ludDE2X3QgeXlfY2hrWzMyNF0gPQorc3RhdGljIHl5Y29uc3QgZmxleF9pbnQxNl90IHl5X2Noa1szMzldID0KICAgICB7ICAgMCwKICAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKICAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKICAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKLSAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMywgICAxNSwgICAgMywgICAxMywgICAxMywKLSAgICAgICAxNCwgICAxNCwgICAgMywgICAgMywgICAgMywgICAxNiwgICAgMywgICAyMywgICAyMywgICA5MSwKLSAgICAgICAxNSwgICAgMywgICAgMywgICAgMywgICAgMywgICAgMywgICAgNSwgICAyOCwgICA5MCwgICAyOCwKLSAgICAgICAyOCwgICAyOCwgICAyMywgICAgNSwgICAgNSwgICAgNSwgICAyOCwgICAgNSwgICA4OSwgICAxNiwKLSAgICAgICA4NywgICAgNSwgICAgNSwgICAgNSwgICAgNSwgICAgNSwgICAgNywgICAgNywgICAgNywgICAgNywKKyAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMywgICAxMywgICAxMywgIDEwMSwgICAgMywKKyAgICAgICAgMywgICAgMywgICAgMywgICAxNSwgICAgMywgICAxNCwgICAxNCwgICAzMiwgICAzMiwgICAgMywKKyAgICAgICAgMywgICAgMywgICAgMywgICAgMywgICAgNSwgICAgNSwgICAgNSwgICAxNSwgICAgNSwgICAzMSwKKyAgICAgICAzMSwgICAzMSwgICAgNSwgICAgNSwgICAgNSwgICAgNSwgICAgNSwgICAgNywgICAgNywgICAgNywKKyAgICAgICAgNywgICAgNywgICAgNywgICAgNywgICAgNywgICAgNywgICAgNywgICAgNywgICAgNywgICAgNywKICAgICAgICAgNywgICAgNywgICAgNywgICAgNywgICAgNywgICAgNywgICAgNywgICAgNywgICAgNywgICAgNywKICAgICAgICAgNywgICAgNywgICAgNywgICAgNywgICAgNywgICAgNywgICAgNywgICAgNywgICAgNywgICAgNywKIAotICAgICAgICA3LCAgICA3LCAgICA3LCAgICA3LCAgICA3LCAgICA3LCAgICA3LCAgICA3LCAgICA3LCAgICA3LAotICAgICAgICA3LCAgICA5LCAgIDE3LCAgICA5LCAgIDEwLCAgIDE3LCAgIDEwLCAgIDI5LCAgICA5LCAgICA5LAotICAgICAgICA5LCAgIDEwLCAgIDEwLCAgIDEwLCAgIDMxLCAgIDMxLCAgIDMxLCAgIDE3LCAgIDMyLCAgIDMyLAotICAgICAgIDE3LCAgIDg2LCAgIDE3LCAgIDE5LCAgIDE5LCAgIDE5LCAgIDE5LCAgIDE5LCAgIDE5LCAgIDE5LAotICAgICAgIDg0LCAgIDI5LCAgIDE5LCAgIDE5LCAgIDE5LCAgIDE5LCAgIDE5LCAgIDE5LCAgIDE5LCAgIDE5LAotICAgICAgIDE5LCAgIDE5LCAgIDE5LCAgIDE5LCAgIDE5LCAgIDE5LCAgIDIwLCAgIDIwLCAgIDIwLCAgIDgzLAotICAgICAgIDIwLCAgIDMzLCAgIDQ5LCAgIDQ5LCAgIDgyLCAgIDIwLCAgIDIwLCAgIDIwLCAgIDIwLCAgIDI1LAotICAgICAgIDI1LCAgIDI1LCAgIDgxLCAgIDI1LCAgIDgwLCAgIDMzLCAgIDc5LCAgIDQ5LCAgIDI1LCAgIDI1LAotICAgICAgIDI1LCAgIDI1LCAgIDMwLCAgIDMwLCAgIDMwLCAgIDUxLCAgIDUxLCAgIDU1LCAgIDMwLCAgIDU1LAotICAgICAgIDU1LCAgIDU1LCAgIDU2LCAgIDU2LCAgIDU2LCAgIDYyLCAgIDU1LCAgIDY4LCAgIDYyLCAgIDc4LAorICAgICAgICA3LCAgICA3LCAgICA5LCAgIDE2LCAgIDI5LCAgIDMzLCAgICA5LCAgICA5LCAgICA5LCAgICA5LAorICAgICAgIDEwLCAgIDU0LCAgIDU0LCAgIDU0LCAgIDEwLCAgIDEwLCAgIDEwLCAgIDEwLCAgIDE3LCAgIDMzLAorICAgICAgIDI4LCAgIDE3LCAgIDI4LCAgIDI4LCAgIDI4LCAgMTAwLCAgIDcyLCAgIDE2LCAgIDI5LCAgIDI4LAorICAgICAgIDk3LCAgIDYwLCAgIDcyLCAgIDE3LCAgIDYwLCAgIDk0LCAgIDE3LCAgIDkyLCAgIDE3LCAgIDE5LAorICAgICAgIDE5LCAgIDE5LCAgIDE5LCAgIDE5LCAgIDE5LCAgIDE5LCAgIDkxLCAgIDg4LCAgIDE5LCAgIDE5LAorICAgICAgIDE5LCAgIDE5LCAgIDE5LCAgIDE5LCAgIDE5LCAgIDE5LCAgIDE5LCAgIDE5LCAgIDE5LCAgIDE5LAorICAgICAgIDE5LCAgIDE5LCAgIDIwLCAgIDIwLCAgIDIwLCAgIDIzLCAgIDIwLCAgIDg3LCAgIDIzLCAgIDg2LAorICAgICAgIDk2LCAgIDIwLCAgIDIwLCAgIDIwLCAgIDIwLCAgIDMwLCAgIDMwLCAgIDMwLCAgIDg1LCAgIDg0LAorICAgICAgIDIzLCAgIDMwLCAgIDgzLCAgIDIzLCAgIDk2LCAgIDIzLCAgIDI1LCAgIDI1LCAgIDI1LCAgIDgyLAorICAgICAgIDI1LCAgIDkzLCAgIDkzLCAgIDkzLCAgIDgxLCAgIDI1LCAgIDI1LCAgIDI1LCAgIDI1LCAgIDUzLAogCi0gICAgICAgNzcsICAgNzYsICAgNzQsICAgNzMsICAgNzIsICAgNzAsICAgNjcsICAgNjYsICAgNjUsICAgNjMsCi0gICAgICAgNjEsICAgNjgsICAgOTQsICAgOTQsICAgOTQsICAgOTQsICAgOTQsICAgOTQsICAgOTQsICAgOTQsCi0gICAgICAgOTUsICAgNDMsICAgNDIsICAgOTUsICAgOTUsICAgOTUsICAgOTYsICAgNDEsICAgOTYsICAgOTcsCi0gICAgICAgOTcsICAgOTcsICAgOTcsICAgOTcsICAgOTcsICAgOTcsICAgOTcsICAgOTgsICAgNDAsICAgOTgsCi0gICAgICAgOTksICAgMzksICAgOTksICAgMzgsICAgOTksICAgOTksICAxMDAsICAgMzUsICAxMDAsICAxMDAsCi0gICAgICAxMDAsICAxMDAsICAxMDEsICAxMDEsICAxMDEsICAgMjIsICAxMDEsICAxMDEsICAxMDIsICAgMjEsCi0gICAgICAxMDIsICAxMDIsICAxMDMsICAxMDMsICAxMDMsICAxMDMsICAxMDMsICAxMDMsICAxMDMsICAxMDMsCi0gICAgICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDUsICAgMTEsCi0gICAgICAxMDUsICAxMDYsICAxMDYsICAxMDYsICAgIDAsICAxMDYsICAxMDYsICAgOTMsICAgOTMsICAgOTMsCi0gICAgICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsCisgICAgICAgOTgsICAgNTMsICAgNTMsICAgNTMsICAgOTUsICAgOTUsICAgOTUsICAgODAsICAgNTMsICAgNzksCisgICAgICAgNzgsICAgNzcsICAgNzYsICAgNzQsICAgOTgsICAxMDQsICAxMDQsICAxMDQsICAxMDQsICAxMDQsCisgICAgICAxMDQsICAxMDQsICAxMDQsICAxMDUsICAgNzMsICAgNzEsICAxMDUsICAxMDUsICAxMDUsICAxMDYsCisgICAgICAgNzAsICAxMDYsICAxMDcsICAgNjksICAxMDcsICAxMDgsICAgNjgsICAxMDgsICAgNjYsICAxMDgsCisgICAgICAxMDgsICAxMDksICAgNjUsICAxMDksICAxMDksICAxMDksICAxMDksICAxMTAsICAxMTAsICAxMTAsCisgICAgICAgNjQsICAxMTAsICAxMTAsICAxMTEsICAgNjMsICAxMTEsICAxMTEsICAxMTIsICAxMTIsICAxMTIsCisgICAgICAxMTIsICAxMTIsICAxMTIsICAxMTIsICAxMTIsICAxMTMsICAxMTMsICAxMTMsICAxMTMsICAxMTMsCisgICAgICAxMTMsICAxMTMsICAxMTMsICAxMTQsICAgNjIsICAxMTQsICAxMTUsICAxMTUsICAxMTUsICAgNjEsCisgICAgICAxMTUsICAxMTUsICAxMTYsICAxMTYsICAxMTYsICAxMTYsICAxMTYsICAxMTYsICAxMTYsICAxMTYsCisgICAgICAgNTksICAgNDksICAgNDMsICAgNDIsICAgNDEsICAgNDAsICAgMzksICAgMzgsICAgMzUsICAgMjIsCiAKLSAgICAgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywKLSAgICAgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywKLSAgICAgICA5MywgICA5MywgICA5MworICAgICAgIDIxLCAgIDExLCAgMTAzLCAgMTAzLCAgMTAzLCAgMTAzLCAgMTAzLCAgMTAzLCAgMTAzLCAgMTAzLAorICAgICAgMTAzLCAgMTAzLCAgMTAzLCAgMTAzLCAgMTAzLCAgMTAzLCAgMTAzLCAgMTAzLCAgMTAzLCAgMTAzLAorICAgICAgMTAzLCAgMTAzLCAgMTAzLCAgMTAzLCAgMTAzLCAgMTAzLCAgMTAzLCAgMTAzLCAgMTAzLCAgMTAzLAorICAgICAgMTAzLCAgMTAzLCAgMTAzLCAgMTAzLCAgMTAzLCAgMTAzLCAgMTAzLCAgMTAzCiAgICAgfSA7CiAKIC8qIFRhYmxlIG9mIGJvb2xlYW5zLCB0cnVlIGlmIHJ1bGUgY291bGQgbWF0Y2ggZW9sLiAqLwogc3RhdGljIHl5Y29uc3QgZmxleF9pbnQzMl90IHl5X3J1bGVfY2FuX21hdGNoX2VvbFsyMV0gPQogICAgIHsgICAwLAotMCwgMCwgMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMSwgMSwgMSwgMCwgCisxLCAxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxLCAxLCAxLCAwLCAKICAgICAwLCAgICAgfTsKIAogc3RhdGljIHl5X3N0YXRlX3R5cGUgeXlfbGFzdF9hY2NlcHRpbmdfc3RhdGU7CkBAIC02MDAsNyArNjA4LDcgQEAKIAogCiAKLSNsaW5lIDMzICJkdGMtbGV4ZXIubCIKKyNsaW5lIDM3ICJkdGMtbGV4ZXIubCIKICNpbmNsdWRlICJkdGMuaCIKICNpbmNsdWRlICJzcmNwb3MuaCIKICNpbmNsdWRlICJkdGMtcGFyc2VyLnRhYi5oIgpAQCAtNjIzLDcgKzYzMSwxMCBAQAogCQkJCURQUklOVCgiPFYxPlxuIik7IFwKIAkJCQlCRUdJTihWMSk7IFwKIAkJCX0KLSNsaW5lIDYyNyAiZHRjLWxleGVyLmxleC5jIgorCitzdGF0aWMgdm9pZCBwdXNoX2lucHV0X2ZpbGUoY29uc3QgY2hhciAqZmlsZW5hbWUpOworc3RhdGljIGludCBwb3BfaW5wdXRfZmlsZSh2b2lkKTsKKyNsaW5lIDYzOCAiZHRjLWxleGVyLmxleC5jIgogCiAjZGVmaW5lIElOSVRJQUwgMAogI2RlZmluZSBJTkNMVURFIDEKQEAgLTY4NSw3ICs2OTYsNyBAQAogLyogVGhpcyB1c2VkIHRvIGJlIGFuIGZwdXRzKCksIGJ1dCBzaW5jZSB0aGUgc3RyaW5nIG1pZ2h0IGNvbnRhaW4gTlVMJ3MsCiAgKiB3ZSBub3cgdXNlIGZ3cml0ZSgpLgogICovCi0jZGVmaW5lIEVDSE8gKHZvaWQpIGZ3cml0ZSggeXl0ZXh0LCB5eWxlbmcsIDEsIHl5b3V0ICkKKyNkZWZpbmUgRUNITyBmd3JpdGUoIHl5dGV4dCwgeXlsZW5nLCAxLCB5eW91dCApCiAjZW5kaWYKIAogLyogR2V0cyBpbnB1dCBhbmQgc3R1ZmZzIGl0IGludG8gImJ1ZiIuICBudW1iZXIgb2YgY2hhcmFjdGVycyByZWFkLCBvciBZWV9OVUxMLApAQCAtNjk2LDcgKzcwNyw3IEBACiAJaWYgKCBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2lzX2ludGVyYWN0aXZlICkgXAogCQl7IFwKIAkJaW50IGMgPSAnKic7IFwKLQkJc2l6ZV90IG47IFwKKwkJaW50IG47IFwKIAkJZm9yICggbiA9IDA7IG4gPCBtYXhfc2l6ZSAmJiBcCiAJCQkgICAgIChjID0gZ2V0YyggeXlpbiApKSAhPSBFT0YgJiYgYyAhPSAnXG4nOyArK24gKSBcCiAJCQlidWZbbl0gPSAoY2hhcikgYzsgXApAQCAtNzc4LDkgKzc4OSw5IEBACiAJcmVnaXN0ZXIgY2hhciAqeXlfY3AsICp5eV9icDsKIAlyZWdpc3RlciBpbnQgeXlfYWN0OwogICAgIAotI2xpbmUgNTcgImR0Yy1sZXhlci5sIgorI2xpbmUgNjQgImR0Yy1sZXhlci5sIgogCi0jbGluZSA3ODQgImR0Yy1sZXhlci5sZXguYyIKKyNsaW5lIDc5NSAiZHRjLWxleGVyLmxleC5jIgogCiAJaWYgKCAhKHl5X2luaXQpICkKIAkJewpAQCAtODMzLDEzICs4NDQsMTMgQEAKIAkJCXdoaWxlICggeXlfY2hrW3l5X2Jhc2VbeXlfY3VycmVudF9zdGF0ZV0gKyB5eV9jXSAhPSB5eV9jdXJyZW50X3N0YXRlICkKIAkJCQl7CiAJCQkJeXlfY3VycmVudF9zdGF0ZSA9IChpbnQpIHl5X2RlZlt5eV9jdXJyZW50X3N0YXRlXTsKLQkJCQlpZiAoIHl5X2N1cnJlbnRfc3RhdGUgPj0gOTQgKQorCQkJCWlmICggeXlfY3VycmVudF9zdGF0ZSA+PSAxMDQgKQogCQkJCQl5eV9jID0geXlfbWV0YVsodW5zaWduZWQgaW50KSB5eV9jXTsKIAkJCQl9CiAJCQl5eV9jdXJyZW50X3N0YXRlID0geXlfbnh0W3l5X2Jhc2VbeXlfY3VycmVudF9zdGF0ZV0gKyAodW5zaWduZWQgaW50KSB5eV9jXTsKIAkJCSsreXlfY3A7CiAJCQl9Ci0JCXdoaWxlICggeXlfYmFzZVt5eV9jdXJyZW50X3N0YXRlXSAhPSAyODggKTsKKwkJd2hpbGUgKCB5eV9iYXNlW3l5X2N1cnJlbnRfc3RhdGVdICE9IDMwMyApOwogCiB5eV9maW5kX2FjdGlvbjoKIAkJeXlfYWN0ID0geXlfYWNjZXB0W3l5X2N1cnJlbnRfc3RhdGVdOwpAQCAtODc0LDIwICs4ODUsMTMgQEAKIAkJCWdvdG8geXlfZmluZF9hY3Rpb247CiAKIGNhc2UgMToKKy8qIHJ1bGUgMSBjYW4gbWF0Y2ggZW9sICovCiBZWV9SVUxFX1NFVFVQCi0jbGluZSA1OCAiZHRjLWxleGVyLmwiCi1CRUdJTihJTkNMVURFKTsKLQlZWV9CUkVBSwotY2FzZSAyOgotWVlfUlVMRV9TRVRVUAotI2xpbmUgNjAgImR0Yy1sZXhlci5sIgorI2xpbmUgNjUgImR0Yy1sZXhlci5sIgogewotCQkJeXl0ZXh0W3N0cmxlbih5eXRleHQpIC0gMV0gPSAwOwotCQkJaWYgKCFwdXNoX2lucHV0X2ZpbGUoeXl0ZXh0ICsgMSkpIHsKLQkJCQkvKiBTb21lIHVucmVjb3ZlcmFibGUgZXJyb3IuKi8KLQkJCQlleGl0KDEpOwotCQkJfQotCQkJQkVHSU5fREVGQVVMVCgpOworCQkJY2hhciAqbmFtZSA9IHN0cmNocih5eXRleHQsICdcIicpICsgMTsKKwkJCXl5dGV4dFt5eWxlbmctMV0gPSAnXDAnOworCQkJcHVzaF9pbnB1dF9maWxlKG5hbWUpOwogCQl9CiAJWVlfQlJFQUsKIGNhc2UgWVlfU1RBVEVfRU9GKElOSVRJQUwpOgpAQCAtODk1LDE5ICs4OTksMTkgQEAKIGNhc2UgWVlfU1RBVEVfRU9GKEJZVEVTVFJJTkcpOgogY2FzZSBZWV9TVEFURV9FT0YoUFJPUE5PREVOQU1FKToKIGNhc2UgWVlfU1RBVEVfRU9GKFYxKToKLSNsaW5lIDcwICJkdGMtbGV4ZXIubCIKKyNsaW5lIDcxICJkdGMtbGV4ZXIubCIKIHsKIAkJCWlmICghcG9wX2lucHV0X2ZpbGUoKSkgewogCQkJCXl5dGVybWluYXRlKCk7CiAJCQl9CiAJCX0KIAlZWV9CUkVBSwotY2FzZSAzOgotLyogcnVsZSAzIGNhbiBtYXRjaCBlb2wgKi8KK2Nhc2UgMjoKKy8qIHJ1bGUgMiBjYW4gbWF0Y2ggZW9sICovCiBZWV9SVUxFX1NFVFVQCi0jbGluZSA3NiAiZHRjLWxleGVyLmwiCisjbGluZSA3NyAiZHRjLWxleGVyLmwiCiB7Ci0JCQl5eWxsb2MuZmlsZW51bSA9IHNyY3Bvc19maWxlbnVtOworCQkJeXlsbG9jLmZpbGUgPSBzcmNwb3NfZmlsZTsKIAkJCXl5bGxvYy5maXJzdF9saW5lID0geXlsaW5lbm87CiAJCQlEUFJJTlQoIlN0cmluZzogJXNcbiIsIHl5dGV4dCk7CiAJCQl5eWx2YWwuZGF0YSA9IGRhdGFfY29weV9lc2NhcGVfc3RyaW5nKHl5dGV4dCsxLApAQCAtOTE2LDExICs5MjAsMTEgQEAKIAkJCXJldHVybiBEVF9TVFJJTkc7CiAJCX0KIAlZWV9CUkVBSwotY2FzZSA0OgorY2FzZSAzOgogWVlfUlVMRV9TRVRVUAotI2xpbmUgODYgImR0Yy1sZXhlci5sIgorI2xpbmUgODcgImR0Yy1sZXhlci5sIgogewotCQkJeXlsbG9jLmZpbGVudW0gPSBzcmNwb3NfZmlsZW51bTsKKwkJCXl5bGxvYy5maWxlID0gc3JjcG9zX2ZpbGU7CiAJCQl5eWxsb2MuZmlyc3RfbGluZSA9IHl5bGluZW5vOwogCQkJRFBSSU5UKCJLZXl3b3JkOiAvZHRzLXYxL1xuIik7CiAJCQlkdHNfdmVyc2lvbiA9IDE7CkBAIC05MjgsMjIgKzkzMiwyMiBAQAogCQkJcmV0dXJuIERUX1YxOwogCQl9CiAJWVlfQlJFQUsKLWNhc2UgNToKK2Nhc2UgNDoKIFlZX1JVTEVfU0VUVVAKLSNsaW5lIDk1ICJkdGMtbGV4ZXIubCIKKyNsaW5lIDk2ICJkdGMtbGV4ZXIubCIKIHsKLQkJCXl5bGxvYy5maWxlbnVtID0gc3JjcG9zX2ZpbGVudW07CisJCQl5eWxsb2MuZmlsZSA9IHNyY3Bvc19maWxlOwogCQkJeXlsbG9jLmZpcnN0X2xpbmUgPSB5eWxpbmVubzsKIAkJCURQUklOVCgiS2V5d29yZDogL21lbXJlc2VydmUvXG4iKTsKIAkJCUJFR0lOX0RFRkFVTFQoKTsKIAkJCXJldHVybiBEVF9NRU1SRVNFUlZFOwogCQl9CiAJWVlfQlJFQUsKLWNhc2UgNjoKK2Nhc2UgNToKIFlZX1JVTEVfU0VUVVAKLSNsaW5lIDEwMyAiZHRjLWxleGVyLmwiCisjbGluZSAxMDQgImR0Yy1sZXhlci5sIgogewotCQkJeXlsbG9jLmZpbGVudW0gPSBzcmNwb3NfZmlsZW51bTsKKwkJCXl5bGxvYy5maWxlID0gc3JjcG9zX2ZpbGU7CiAJCQl5eWxsb2MuZmlyc3RfbGluZSA9IHl5bGluZW5vOwogCQkJRFBSSU5UKCJMYWJlbDogJXNcbiIsIHl5dGV4dCk7CiAJCQl5eWx2YWwubGFiZWxyZWYgPSBzdHJkdXAoeXl0ZXh0KTsKQEAgLTk1MSwxMSArOTU1LDExIEBACiAJCQlyZXR1cm4gRFRfTEFCRUw7CiAJCX0KIAlZWV9CUkVBSwotY2FzZSA3OgorY2FzZSA2OgogWVlfUlVMRV9TRVRVUAotI2xpbmUgMTEyICJkdGMtbGV4ZXIubCIKKyNsaW5lIDExMyAiZHRjLWxleGVyLmwiCiB7Ci0JCQl5eWxsb2MuZmlsZW51bSA9IHNyY3Bvc19maWxlbnVtOworCQkJeXlsbG9jLmZpbGUgPSBzcmNwb3NfZmlsZTsKIAkJCXl5bGxvYy5maXJzdF9saW5lID0geXlsaW5lbm87CiAJCQlpZiAoKnl5dGV4dCA9PSAnYicpCiAJCQkJeXlsdmFsLmNiYXNlID0gMjsKQEAgLTk2OSw0NCArOTczLDQ0IEBACiAJCQlyZXR1cm4gRFRfQkFTRTsKIAkJfQogCVlZX0JSRUFLCi1jYXNlIDg6CitjYXNlIDc6CiBZWV9SVUxFX1NFVFVQCi0jbGluZSAxMjcgImR0Yy1sZXhlci5sIgorI2xpbmUgMTI4ICJkdGMtbGV4ZXIubCIKIHsKLQkJCXl5bGxvYy5maWxlbnVtID0gc3JjcG9zX2ZpbGVudW07CisJCQl5eWxsb2MuZmlsZSA9IHNyY3Bvc19maWxlOwogCQkJeXlsbG9jLmZpcnN0X2xpbmUgPSB5eWxpbmVubzsKIAkJCXl5bHZhbC5saXRlcmFsID0gc3RyZHVwKHl5dGV4dCk7CiAJCQlEUFJJTlQoIkxpdGVyYWw6ICclcydcbiIsIHl5bHZhbC5saXRlcmFsKTsKIAkJCXJldHVybiBEVF9MRUdBQ1lMSVRFUkFMOwogCQl9CiAJWVlfQlJFQUsKLWNhc2UgOToKK2Nhc2UgODoKIFlZX1JVTEVfU0VUVVAKLSNsaW5lIDEzNSAiZHRjLWxleGVyLmwiCisjbGluZSAxMzYgImR0Yy1sZXhlci5sIgogewotCQkJeXlsbG9jLmZpbGVudW0gPSBzcmNwb3NfZmlsZW51bTsKKwkJCXl5bGxvYy5maWxlID0gc3JjcG9zX2ZpbGU7CiAJCQl5eWxsb2MuZmlyc3RfbGluZSA9IHl5bGluZW5vOwogCQkJeXlsdmFsLmxpdGVyYWwgPSBzdHJkdXAoeXl0ZXh0KTsKIAkJCURQUklOVCgiTGl0ZXJhbDogJyVzJ1xuIiwgeXlsdmFsLmxpdGVyYWwpOwogCQkJcmV0dXJuIERUX0xJVEVSQUw7CiAJCX0KIAlZWV9CUkVBSwotY2FzZSAxMDoKK2Nhc2UgOToKIFlZX1JVTEVfU0VUVVAKLSNsaW5lIDE0MyAiZHRjLWxleGVyLmwiCisjbGluZSAxNDQgImR0Yy1sZXhlci5sIgogewkvKiBsYWJlbCByZWZlcmVuY2UgKi8KLQkJCXl5bGxvYy5maWxlbnVtID0gc3JjcG9zX2ZpbGVudW07CisJCQl5eWxsb2MuZmlsZSA9IHNyY3Bvc19maWxlOwogCQkJeXlsbG9jLmZpcnN0X2xpbmUgPSB5eWxpbmVubzsKIAkJCURQUklOVCgiUmVmOiAlc1xuIiwgeXl0ZXh0KzEpOwogCQkJeXlsdmFsLmxhYmVscmVmID0gc3RyZHVwKHl5dGV4dCsxKTsKIAkJCXJldHVybiBEVF9SRUY7CiAJCX0KIAlZWV9CUkVBSwotY2FzZSAxMToKK2Nhc2UgMTA6CiBZWV9SVUxFX1NFVFVQCi0jbGluZSAxNTEgImR0Yy1sZXhlci5sIgorI2xpbmUgMTUyICJkdGMtbGV4ZXIubCIKIHsJLyogbmV3LXN0eWxlIHBhdGggcmVmZXJlbmNlICovCi0JCQl5eWxsb2MuZmlsZW51bSA9IHNyY3Bvc19maWxlbnVtOworCQkJeXlsbG9jLmZpbGUgPSBzcmNwb3NfZmlsZTsKIAkJCXl5bGxvYy5maXJzdF9saW5lID0geXlsaW5lbm87CiAJCQl5eXRleHRbeXlsZW5nLTFdID0gJ1wwJzsKIAkJCURQUklOVCgiUmVmOiAlc1xuIiwgeXl0ZXh0KzIpOwpAQCAtMTAxNCw0NCArMTAxOCw0NCBAQAogCQkJcmV0dXJuIERUX1JFRjsKIAkJfQogCVlZX0JSRUFLCi1jYXNlIDEyOgorY2FzZSAxMToKIFlZX1JVTEVfU0VUVVAKLSNsaW5lIDE2MCAiZHRjLWxleGVyLmwiCisjbGluZSAxNjEgImR0Yy1sZXhlci5sIgogewkvKiBvbGQtc3R5bGUgcGF0aCByZWZlcmVuY2UgKi8KLQkJCXl5bGxvYy5maWxlbnVtID0gc3JjcG9zX2ZpbGVudW07CisJCQl5eWxsb2MuZmlsZSA9IHNyY3Bvc19maWxlOwogCQkJeXlsbG9jLmZpcnN0X2xpbmUgPSB5eWxpbmVubzsKIAkJCURQUklOVCgiUmVmOiAlc1xuIiwgeXl0ZXh0KzEpOwogCQkJeXlsdmFsLmxhYmVscmVmID0gc3RyZHVwKHl5dGV4dCsxKTsKIAkJCXJldHVybiBEVF9SRUY7CiAJCX0KIAlZWV9CUkVBSwotY2FzZSAxMzoKK2Nhc2UgMTI6CiBZWV9SVUxFX1NFVFVQCi0jbGluZSAxNjggImR0Yy1sZXhlci5sIgorI2xpbmUgMTY5ICJkdGMtbGV4ZXIubCIKIHsKLQkJCXl5bGxvYy5maWxlbnVtID0gc3JjcG9zX2ZpbGVudW07CisJCQl5eWxsb2MuZmlsZSA9IHNyY3Bvc19maWxlOwogCQkJeXlsbG9jLmZpcnN0X2xpbmUgPSB5eWxpbmVubzsKIAkJCXl5bHZhbC5ieXRlID0gc3RydG9sKHl5dGV4dCwgTlVMTCwgMTYpOwogCQkJRFBSSU5UKCJCeXRlOiAlMDJ4XG4iLCAoaW50KXl5bHZhbC5ieXRlKTsKIAkJCXJldHVybiBEVF9CWVRFOwogCQl9CiAJWVlfQlJFQUsKLWNhc2UgMTQ6CitjYXNlIDEzOgogWVlfUlVMRV9TRVRVUAotI2xpbmUgMTc2ICJkdGMtbGV4ZXIubCIKKyNsaW5lIDE3NyAiZHRjLWxleGVyLmwiCiB7Ci0JCQl5eWxsb2MuZmlsZW51bSA9IHNyY3Bvc19maWxlbnVtOworCQkJeXlsbG9jLmZpbGUgPSBzcmNwb3NfZmlsZTsKIAkJCXl5bGxvYy5maXJzdF9saW5lID0geXlsaW5lbm87CiAJCQlEUFJJTlQoIi9CWVRFU1RSSU5HXG4iKTsKIAkJCUJFR0lOX0RFRkFVTFQoKTsKIAkJCXJldHVybiAnXSc7CiAJCX0KIAlZWV9CUkVBSwotY2FzZSAxNToKK2Nhc2UgMTQ6CiBZWV9SVUxFX1NFVFVQCi0jbGluZSAxODQgImR0Yy1sZXhlci5sIgorI2xpbmUgMTg1ICJkdGMtbGV4ZXIubCIKIHsKLQkJCXl5bGxvYy5maWxlbnVtID0gc3JjcG9zX2ZpbGVudW07CisJCQl5eWxsb2MuZmlsZSA9IHNyY3Bvc19maWxlOwogCQkJeXlsbG9jLmZpcnN0X2xpbmUgPSB5eWxpbmVubzsKIAkJCURQUklOVCgiUHJvcE5vZGVOYW1lOiAlc1xuIiwgeXl0ZXh0KTsKIAkJCXl5bHZhbC5wcm9wbm9kZW5hbWUgPSBzdHJkdXAoeXl0ZXh0KTsKQEAgLTEwNTksMzQgKzEwNjMsMzkgQEAKIAkJCXJldHVybiBEVF9QUk9QTk9ERU5BTUU7CiAJCX0KIAlZWV9CUkVBSworY2FzZSAxNToKK1lZX1JVTEVfU0VUVVAKKyNsaW5lIDE5NCAiZHRjLWxleGVyLmwiCit7CisJCQl5eWxsb2MuZmlsZSA9IHNyY3Bvc19maWxlOworCQkJeXlsbG9jLmZpcnN0X2xpbmUgPSB5eWxpbmVubzsKKwkJCURQUklOVCgiQmluYXJ5IEluY2x1ZGVcbiIpOworCQkJcmV0dXJuIERUX0lOQ0JJTjsKKwkJfQorCVlZX0JSRUFLCiBjYXNlIDE2OgogLyogcnVsZSAxNiBjYW4gbWF0Y2ggZW9sICovCiBZWV9SVUxFX1NFVFVQCi0jbGluZSAxOTQgImR0Yy1sZXhlci5sIgorI2xpbmUgMjAxICJkdGMtbGV4ZXIubCIKIC8qIGVhdCB3aGl0ZXNwYWNlICovCiAJWVlfQlJFQUsKIGNhc2UgMTc6CiAvKiBydWxlIDE3IGNhbiBtYXRjaCBlb2wgKi8KIFlZX1JVTEVfU0VUVVAKLSNsaW5lIDE5NiAiZHRjLWxleGVyLmwiCi17Ci0JCQl5eWxsb2MuZmlsZW51bSA9IHNyY3Bvc19maWxlbnVtOwotCQkJeXlsbG9jLmZpcnN0X2xpbmUgPSB5eWxpbmVubzsKLQkJCURQUklOVCgiQ29tbWVudDogJXNcbiIsIHl5dGV4dCk7Ci0JCQkvKiBlYXQgY29tbWVudHMgKi8KLQkJfQorI2xpbmUgMjAyICJkdGMtbGV4ZXIubCIKKy8qIGVhdCBDLXN0eWxlIGNvbW1lbnRzICovCiAJWVlfQlJFQUsKIGNhc2UgMTg6CiAvKiBydWxlIDE4IGNhbiBtYXRjaCBlb2wgKi8KIFlZX1JVTEVfU0VUVVAKICNsaW5lIDIwMyAiZHRjLWxleGVyLmwiCi0vKiBlYXQgbGluZSBjb21tZW50cyAqLworLyogZWF0IEMrKy1zdHlsZSBjb21tZW50cyAqLwogCVlZX0JSRUFLCiBjYXNlIDE5OgogWVlfUlVMRV9TRVRVUAogI2xpbmUgMjA1ICJkdGMtbGV4ZXIubCIKIHsKLQkJCXl5bGxvYy5maWxlbnVtID0gc3JjcG9zX2ZpbGVudW07CisJCQl5eWxsb2MuZmlsZSA9IHNyY3Bvc19maWxlOwogCQkJeXlsbG9jLmZpcnN0X2xpbmUgPSB5eWxpbmVubzsKIAkJCURQUklOVCgiQ2hhcjogJWMgKFxceCUwMngpXG4iLCB5eXRleHRbMF0sCiAJCQkJKHVuc2lnbmVkKXl5dGV4dFswXSk7CkBAIC0xMTA3LDcgKzExMTYsNyBAQAogI2xpbmUgMjIyICJkdGMtbGV4ZXIubCIKIEVDSE87CiAJWVlfQlJFQUsKLSNsaW5lIDExMTEgImR0Yy1sZXhlci5sZXguYyIKKyNsaW5lIDExMjAgImR0Yy1sZXhlci5sZXguYyIKIAogCWNhc2UgWVlfRU5EX09GX0JVRkZFUjoKIAkJewpAQCAtMTM2MCw2ICsxMzY5LDE0IEBACiAJZWxzZQogCQlyZXRfdmFsID0gRU9CX0FDVF9DT05USU5VRV9TQ0FOOwogCisJaWYgKCh5eV9zaXplX3QpICgoeXlfbl9jaGFycykgKyBudW1iZXJfdG9fbW92ZSkgPiBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2J1Zl9zaXplKSB7CisJCS8qIEV4dGVuZCB0aGUgYXJyYXkgYnkgNTAlLCBwbHVzIHRoZSBudW1iZXIgd2UgcmVhbGx5IG5lZWQuICovCisJCXl5X3NpemVfdCBuZXdfc2l6ZSA9ICh5eV9uX2NoYXJzKSArIG51bWJlcl90b19tb3ZlICsgKCh5eV9uX2NoYXJzKSA+PiAxKTsKKwkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWYgPSAoY2hhciAqKSB5eXJlYWxsb2MoKHZvaWQgKikgWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWYsbmV3X3NpemUgICk7CisJCWlmICggISBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1ZiApCisJCQlZWV9GQVRBTF9FUlJPUiggIm91dCBvZiBkeW5hbWljIG1lbW9yeSBpbiB5eV9nZXRfbmV4dF9idWZmZXIoKSIgKTsKKwl9CisKIAkoeXlfbl9jaGFycykgKz0gbnVtYmVyX3RvX21vdmU7CiAJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWZbKHl5X25fY2hhcnMpXSA9IFlZX0VORF9PRl9CVUZGRVJfQ0hBUjsKIAlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1ZlsoeXlfbl9jaGFycykgKyAxXSA9IFlZX0VORF9PRl9CVUZGRVJfQ0hBUjsKQEAgLTEzODksNyArMTQwNiw3IEBACiAJCXdoaWxlICggeXlfY2hrW3l5X2Jhc2VbeXlfY3VycmVudF9zdGF0ZV0gKyB5eV9jXSAhPSB5eV9jdXJyZW50X3N0YXRlICkKIAkJCXsKIAkJCXl5X2N1cnJlbnRfc3RhdGUgPSAoaW50KSB5eV9kZWZbeXlfY3VycmVudF9zdGF0ZV07Ci0JCQlpZiAoIHl5X2N1cnJlbnRfc3RhdGUgPj0gOTQgKQorCQkJaWYgKCB5eV9jdXJyZW50X3N0YXRlID49IDEwNCApCiAJCQkJeXlfYyA9IHl5X21ldGFbKHVuc2lnbmVkIGludCkgeXlfY107CiAJCQl9CiAJCXl5X2N1cnJlbnRfc3RhdGUgPSB5eV9ueHRbeXlfYmFzZVt5eV9jdXJyZW50X3N0YXRlXSArICh1bnNpZ25lZCBpbnQpIHl5X2NdOwpAQCAtMTQxNywxMSArMTQzNCwxMSBAQAogCXdoaWxlICggeXlfY2hrW3l5X2Jhc2VbeXlfY3VycmVudF9zdGF0ZV0gKyB5eV9jXSAhPSB5eV9jdXJyZW50X3N0YXRlICkKIAkJewogCQl5eV9jdXJyZW50X3N0YXRlID0gKGludCkgeXlfZGVmW3l5X2N1cnJlbnRfc3RhdGVdOwotCQlpZiAoIHl5X2N1cnJlbnRfc3RhdGUgPj0gOTQgKQorCQlpZiAoIHl5X2N1cnJlbnRfc3RhdGUgPj0gMTA0ICkKIAkJCXl5X2MgPSB5eV9tZXRhWyh1bnNpZ25lZCBpbnQpIHl5X2NdOwogCQl9CiAJeXlfY3VycmVudF9zdGF0ZSA9IHl5X254dFt5eV9iYXNlW3l5X2N1cnJlbnRfc3RhdGVdICsgKHVuc2lnbmVkIGludCkgeXlfY107Ci0JeXlfaXNfamFtID0gKHl5X2N1cnJlbnRfc3RhdGUgPT0gOTMpOworCXl5X2lzX2phbSA9ICh5eV9jdXJyZW50X3N0YXRlID09IDEwMyk7CiAKIAlyZXR1cm4geXlfaXNfamFtID8gMCA6IHl5X2N1cnJlbnRfc3RhdGU7CiB9CkBAIC0xNzQzLDcgKzE3NjAsOSBAQAogCQkoeXlfYnVmZmVyX3N0YWNrKSA9IChzdHJ1Y3QgeXlfYnVmZmVyX3N0YXRlKiopeXlhbGxvYwogCQkJCQkJCQkobnVtX3RvX2FsbG9jICogc2l6ZW9mKHN0cnVjdCB5eV9idWZmZXJfc3RhdGUqKQogCQkJCQkJCQkpOwotCQkKKwkJaWYgKCAhICh5eV9idWZmZXJfc3RhY2spICkKKwkJCVlZX0ZBVEFMX0VSUk9SKCAib3V0IG9mIGR5bmFtaWMgbWVtb3J5IGluIHl5ZW5zdXJlX2J1ZmZlcl9zdGFjaygpIiApOworCQkJCQkJCQkgIAogCQltZW1zZXQoKHl5X2J1ZmZlcl9zdGFjayksIDAsIG51bV90b19hbGxvYyAqIHNpemVvZihzdHJ1Y3QgeXlfYnVmZmVyX3N0YXRlKikpOwogCQkJCQogCQkoeXlfYnVmZmVyX3N0YWNrX21heCkgPSBudW1fdG9fYWxsb2M7CkBAIC0xNzYxLDYgKzE3ODAsOCBAQAogCQkJCQkJCQkoKHl5X2J1ZmZlcl9zdGFjayksCiAJCQkJCQkJCW51bV90b19hbGxvYyAqIHNpemVvZihzdHJ1Y3QgeXlfYnVmZmVyX3N0YXRlKikKIAkJCQkJCQkJKTsKKwkJaWYgKCAhICh5eV9idWZmZXJfc3RhY2spICkKKwkJCVlZX0ZBVEFMX0VSUk9SKCAib3V0IG9mIGR5bmFtaWMgbWVtb3J5IGluIHl5ZW5zdXJlX2J1ZmZlcl9zdGFjaygpIiApOwogCiAJCS8qIHplcm8gb25seSB0aGUgbmV3IHNsb3RzLiovCiAJCW1lbXNldCgoeXlfYnVmZmVyX3N0YWNrKSArICh5eV9idWZmZXJfc3RhY2tfbWF4KSwgMCwgZ3Jvd19zaXplICogc2l6ZW9mKHN0cnVjdCB5eV9idWZmZXJfc3RhdGUqKSk7CkBAIC0yMDcyLDE0ICsyMDkzLDEzIEBACiAgKi8KIAogc3RydWN0IGluY2xfZmlsZSB7Ci0JaW50IGZpbGVudW07Ci0JRklMRSAqZmlsZTsKKwlzdHJ1Y3QgZHRjX2ZpbGUgKmZpbGU7CiAJWVlfQlVGRkVSX1NUQVRFIHl5X3ByZXZfYnVmOwogCWludCB5eV9wcmV2X2xpbmVubzsKIAlzdHJ1Y3QgaW5jbF9maWxlICpwcmV2OwogfTsKIAotc3RydWN0IGluY2xfZmlsZSAqaW5jbF9maWxlX3N0YWNrOworc3RhdGljIHN0cnVjdCBpbmNsX2ZpbGUgKmluY2xfZmlsZV9zdGFjazsKIAogCiAvKgpAQCAtMjA5MCwzNiArMjExMCwzNCBAQAogc3RhdGljIGludCBpbmNsX2RlcHRoID0gMDsKIAogCi1pbnQgcHVzaF9pbnB1dF9maWxlKGNvbnN0IGNoYXIgKmZpbGVuYW1lKQorc3RhdGljIHZvaWQgcHVzaF9pbnB1dF9maWxlKGNvbnN0IGNoYXIgKmZpbGVuYW1lKQogewotCUZJTEUgKmY7CiAJc3RydWN0IGluY2xfZmlsZSAqaW5jbF9maWxlOworCXN0cnVjdCBkdGNfZmlsZSAqbmV3ZmlsZTsKKwlzdHJ1Y3Qgc2VhcmNoX3BhdGggc2VhcmNoLCAqc2VhcmNocHRyID0gTlVMTDsKIAotCWlmICghZmlsZW5hbWUpIHsKLQkJeXllcnJvcigiTm8gaW5jbHVkZSBmaWxlIG5hbWUgZ2l2ZW4uIik7Ci0JCXJldHVybiAwOworCWFzc2VydChmaWxlbmFtZSk7CisKKwlpZiAoaW5jbF9kZXB0aCsrID49IE1BWF9JTkNMVURFX0RFUFRIKQorCQlkaWUoIkluY2x1ZGVzIG5lc3RlZCB0b28gZGVlcGx5Iik7CisKKwlpZiAoc3JjcG9zX2ZpbGUpIHsKKwkJc2VhcmNoLmRpciA9IHNyY3Bvc19maWxlLT5kaXI7CisJCXNlYXJjaC5uZXh0ID0gTlVMTDsKKwkJc2VhcmNoLnByZXYgPSBOVUxMOworCQlzZWFyY2hwdHIgPSAmc2VhcmNoOwogCX0KIAotCWlmIChpbmNsX2RlcHRoKysgPj0gTUFYX0lOQ0xVREVfREVQVEgpIHsKLQkJeXllcnJvcigiSW5jbHVkZXMgbmVzdGVkIHRvbyBkZWVwbHkiKTsKLQkJcmV0dXJuIDA7Ci0JfQorCW5ld2ZpbGUgPSBkdGNfb3Blbl9maWxlKGZpbGVuYW1lLCBzZWFyY2hwdHIpOwogCi0JZiA9IGR0Y19vcGVuX2ZpbGUoZmlsZW5hbWUpOwotCi0JaW5jbF9maWxlID0gbWFsbG9jKHNpemVvZihzdHJ1Y3QgaW5jbF9maWxlKSk7Ci0JaWYgKCFpbmNsX2ZpbGUpIHsKLQkJeXllcnJvcigiQ2FuIG5vdCBhbGxvY2F0ZSBpbmNsdWRlIGZpbGUgc3BhY2UuIik7Ci0JCXJldHVybiAwOwotCX0KKwlpbmNsX2ZpbGUgPSB4bWFsbG9jKHNpemVvZihzdHJ1Y3QgaW5jbF9maWxlKSk7CiAKIAkvKgogCSAqIFNhdmUgY3VycmVudCBjb250ZXh0LgogCSAqLwogCWluY2xfZmlsZS0+eXlfcHJldl9idWYgPSBZWV9DVVJSRU5UX0JVRkZFUjsKIAlpbmNsX2ZpbGUtPnl5X3ByZXZfbGluZW5vID0geXlsaW5lbm87Ci0JaW5jbF9maWxlLT5maWxlbnVtID0gc3JjcG9zX2ZpbGVudW07Ci0JaW5jbF9maWxlLT5maWxlID0geXlpbjsKKwlpbmNsX2ZpbGUtPmZpbGUgPSBzcmNwb3NfZmlsZTsKIAlpbmNsX2ZpbGUtPnByZXYgPSBpbmNsX2ZpbGVfc3RhY2s7CiAKIAlpbmNsX2ZpbGVfc3RhY2sgPSBpbmNsX2ZpbGU7CkBAIC0yMTI3LDIzICsyMTQ1LDIxIEBACiAJLyoKIAkgKiBFc3RhYmxpc2ggbmV3IGNvbnRleHQuCiAJICovCi0Jc3JjcG9zX2ZpbGVudW0gPSBsb29rdXBfZmlsZV9uYW1lKGZpbGVuYW1lLCAwKTsKKwlzcmNwb3NfZmlsZSA9IG5ld2ZpbGU7CiAJeXlsaW5lbm8gPSAxOwotCXl5aW4gPSBmOworCXl5aW4gPSBuZXdmaWxlLT5maWxlOwogCXl5X3N3aXRjaF90b19idWZmZXIoeXlfY3JlYXRlX2J1ZmZlcih5eWluLFlZX0JVRl9TSVpFKSk7Ci0KLQlyZXR1cm4gMTsKIH0KIAogCi1pbnQgcG9wX2lucHV0X2ZpbGUodm9pZCkKK3N0YXRpYyBpbnQgcG9wX2lucHV0X2ZpbGUodm9pZCkKIHsKIAlzdHJ1Y3QgaW5jbF9maWxlICppbmNsX2ZpbGU7CiAKIAlpZiAoaW5jbF9maWxlX3N0YWNrID09IDApCiAJCXJldHVybiAwOwogCi0JZmNsb3NlKHl5aW4pOworCWR0Y19jbG9zZV9maWxlKHNyY3Bvc19maWxlKTsKIAogCS8qCiAJICogUG9wLgpAQCAtMjE1OCwxNyArMjE3NCwxNCBAQAogCXl5X2RlbGV0ZV9idWZmZXIoWVlfQ1VSUkVOVF9CVUZGRVIpOwogCXl5X3N3aXRjaF90b19idWZmZXIoaW5jbF9maWxlLT55eV9wcmV2X2J1Zik7CiAJeXlsaW5lbm8gPSBpbmNsX2ZpbGUtPnl5X3ByZXZfbGluZW5vOwotCXNyY3Bvc19maWxlbnVtID0gaW5jbF9maWxlLT5maWxlbnVtOwotCXl5aW4gPSBpbmNsX2ZpbGUtPmZpbGU7CisJc3JjcG9zX2ZpbGUgPSBpbmNsX2ZpbGUtPmZpbGU7CisJeXlpbiA9IGluY2xfZmlsZS0+ZmlsZSA/IGluY2xfZmlsZS0+ZmlsZS0+ZmlsZSA6IE5VTEw7CiAKIAkvKgogCSAqIEZyZWUgb2xkIHN0YXRlLgogCSAqLwogCWZyZWUoaW5jbF9maWxlKTsKIAotCWlmIChZWV9DVVJSRU5UX0JVRkZFUiA9PSAwKQotCQlyZXR1cm4gMDsKLQogCXJldHVybiAxOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdGMtc3JjL2R0Yy1wYXJzZXIudGFiLmNfc2hpcHBlZCBiL2FyY2gvcG93ZXJwYy9ib290L2R0Yy1zcmMvZHRjLXBhcnNlci50YWIuY19zaGlwcGVkCmluZGV4IDI4ZTZlYzAuLjI3MTI5MzcgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2R0Yy1zcmMvZHRjLXBhcnNlci50YWIuY19zaGlwcGVkCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0Yy1zcmMvZHRjLXBhcnNlci50YWIuY19zaGlwcGVkCkBAIC03NSw3ICs3NSw4IEBACiAgICAgIERUX0JZVEUgPSAyNjQsCiAgICAgIERUX1NUUklORyA9IDI2NSwKICAgICAgRFRfTEFCRUwgPSAyNjYsCi0gICAgIERUX1JFRiA9IDI2NworICAgICBEVF9SRUYgPSAyNjcsCisgICAgIERUX0lOQ0JJTiA9IDI2OAogICAgfTsKICNlbmRpZgogLyogVG9rZW5zLiAgKi8KQEAgLTg5LDYgKzkwLDcgQEAKICNkZWZpbmUgRFRfU1RSSU5HIDI2NQogI2RlZmluZSBEVF9MQUJFTCAyNjYKICNkZWZpbmUgRFRfUkVGIDI2NworI2RlZmluZSBEVF9JTkNCSU4gMjY4CiAKIAogCkBAIC05NiwxNCArOTgsMTcgQEAKIC8qIENvcHkgdGhlIGZpcnN0IHBhcnQgb2YgdXNlciBkZWNsYXJhdGlvbnMuICAqLwogI2xpbmUgMjMgImR0Yy1wYXJzZXIueSIKIAorI2luY2x1ZGUgPHN0ZGlvLmg+CisKICNpbmNsdWRlICJkdGMuaCIKICNpbmNsdWRlICJzcmNwb3MuaCIKIAotaW50IHl5bGV4KHZvaWQpOwotdW5zaWduZWQgbG9uZyBsb25nIGV2YWxfbGl0ZXJhbChjb25zdCBjaGFyICpzLCBpbnQgYmFzZSwgaW50IGJpdHMpOworZXh0ZXJuIGludCB5eWxleCh2b2lkKTsKIAogZXh0ZXJuIHN0cnVjdCBib290X2luZm8gKnRoZV9ib290X2luZm87CitleHRlcm4gaW50IHRyZWVzb3VyY2VfZXJyb3I7CiAKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGxvbmcgZXZhbF9saXRlcmFsKGNvbnN0IGNoYXIgKnMsIGludCBiYXNlLCBpbnQgYml0cyk7CiAKIAogLyogRW5hYmxpbmcgdHJhY2VzLiAgKi8KQEAgLTEyNiwxNiArMTMxLDE2IEBACiAKICNpZiAhIGRlZmluZWQgWVlTVFlQRSAmJiAhIGRlZmluZWQgWVlTVFlQRV9JU19ERUNMQVJFRAogdHlwZWRlZiB1bmlvbiBZWVNUWVBFCi0jbGluZSAzNCAiZHRjLXBhcnNlci55IgorI2xpbmUgMzcgImR0Yy1wYXJzZXIueSIKIHsKIAljaGFyICpwcm9wbm9kZW5hbWU7CiAJY2hhciAqbGl0ZXJhbDsKIAljaGFyICpsYWJlbHJlZjsKIAl1bnNpZ25lZCBpbnQgY2Jhc2U7Ci0JdTggYnl0ZTsKKwl1aW50OF90IGJ5dGU7CiAJc3RydWN0IGRhdGEgZGF0YTsKIAotCXU2NCBhZGRyOworCXVpbnQ2NF90IGFkZHI7CiAJY2VsbF90IGNlbGw7CiAJc3RydWN0IHByb3BlcnR5ICpwcm9wOwogCXN0cnVjdCBwcm9wZXJ0eSAqcHJvcGxpc3Q7CkBAIC0xNDQsNyArMTQ5LDcgQEAKIAlzdHJ1Y3QgcmVzZXJ2ZV9pbmZvICpyZTsKIH0KIC8qIExpbmUgMTg3IG9mIHlhY2MuYy4gICovCi0jbGluZSAxNDggImR0Yy1wYXJzZXIudGFiLmMiCisjbGluZSAxNTMgImR0Yy1wYXJzZXIudGFiLmMiCiAJWVlTVFlQRTsKICMgZGVmaW5lIHl5c3R5cGUgWVlTVFlQRSAvKiBvYnNvbGVzY2VudDsgd2lsbCBiZSB3aXRoZHJhd24gKi8KICMgZGVmaW5lIFlZU1RZUEVfSVNfREVDTEFSRUQgMQpAQCAtMTY5LDcgKzE3NCw3IEBACiAKIAogLyogTGluZSAyMTYgb2YgeWFjYy5jLiAgKi8KLSNsaW5lIDE3MyAiZHRjLXBhcnNlci50YWIuYyIKKyNsaW5lIDE3OCAiZHRjLXBhcnNlci50YWIuYyIKIAogI2lmZGVmIHNob3J0CiAjIHVuZGVmIHNob3J0CkBAIC0zODYsMjAgKzM5MSwyMCBAQAogLyogWVlGSU5BTCAtLSBTdGF0ZSBudW1iZXIgb2YgdGhlIHRlcm1pbmF0aW9uIHN0YXRlLiAgKi8KICNkZWZpbmUgWVlGSU5BTCAgOQogLyogWVlMQVNUIC0tIExhc3QgaW5kZXggaW4gWVlUQUJMRS4gICovCi0jZGVmaW5lIFlZTEFTVCAgIDYwCisjZGVmaW5lIFlZTEFTVCAgIDczCiAKIC8qIFlZTlRPS0VOUyAtLSBOdW1iZXIgb2YgdGVybWluYWxzLiAgKi8KLSNkZWZpbmUgWVlOVE9LRU5TICAyNAorI2RlZmluZSBZWU5UT0tFTlMgIDI3CiAvKiBZWU5OVFMgLS0gTnVtYmVyIG9mIG5vbnRlcm1pbmFscy4gICovCiAjZGVmaW5lIFlZTk5UUyAgMjAKIC8qIFlZTlJVTEVTIC0tIE51bWJlciBvZiBydWxlcy4gICovCi0jZGVmaW5lIFlZTlJVTEVTICA0MworI2RlZmluZSBZWU5SVUxFUyAgNDUKIC8qIFlZTlJVTEVTIC0tIE51bWJlciBvZiBzdGF0ZXMuICAqLwotI2RlZmluZSBZWU5TVEFURVMgIDY3CisjZGVmaW5lIFlZTlNUQVRFUyAgNzYKIAogLyogWVlUUkFOU0xBVEUoWVlMRVgpIC0tIEJpc29uIHN5bWJvbCBudW1iZXIgY29ycmVzcG9uZGluZyB0byBZWUxFWC4gICovCiAjZGVmaW5lIFlZVU5ERUZUT0sgIDIKLSNkZWZpbmUgWVlNQVhVVE9LICAgMjY3CisjZGVmaW5lIFlZTUFYVVRPSyAgIDI2OAogCiAjZGVmaW5lIFlZVFJBTlNMQVRFKFlZWCkJCQkJCQlcCiAgICgodW5zaWduZWQgaW50KSAoWVlYKSA8PSBZWU1BWFVUT0sgPyB5eXRyYW5zbGF0ZVtZWVhdIDogWVlVTkRFRlRPSykKQEAgLTQxMSwxNSArNDE2LDE1IEBACiAgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKICAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAogICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCi0gICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgMjMsICAgIDE0LCAgICAgMiwgICAgMTUsICAgICAyLCAgICAgMiwKLSAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgIDEzLAotICAgICAgMTksICAgIDE4LCAgICAyMCwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisgICAgICAyNCwgICAgMjYsICAgICAyLCAgICAgMiwgICAgMjUsICAgIDE1LCAgICAgMiwgICAgMTYsICAgICAyLCAgICAgMiwKKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgIDE0LAorICAgICAgMjAsICAgIDE5LCAgICAyMSwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCiAgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKICAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAotICAgICAgIDIsICAgIDIxLCAgICAgMiwgICAgMjIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisgICAgICAgMiwgICAgMjIsICAgICAyLCAgICAyMywgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKICAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAogICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCi0gICAgICAgMiwgICAgIDIsICAgICAyLCAgICAxNiwgICAgIDIsICAgIDE3LCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgIDE3LCAgICAgMiwgICAgMTgsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAogICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCiAgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKICAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLApAQCAtNDMzLDcgKzQzOCw3IEBACiAgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKICAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAogICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDEsICAgICAyLCAgICAgMywgICAgIDQsCi0gICAgICAgNSwgICAgIDYsICAgICA3LCAgICAgOCwgICAgIDksICAgIDEwLCAgICAxMSwgICAgMTIKKyAgICAgICA1LCAgICAgNiwgICAgIDcsICAgICA4LCAgICAgOSwgICAgMTAsICAgIDExLCAgICAxMiwgICAgMTMKIH07CiAKICNpZiBZWURFQlVHCkBAIC00NDMsMzcgKzQ0OCwzOSBAQAogewogICAgICAgIDAsICAgICAwLCAgICAgMywgICAgIDgsICAgIDExLCAgICAxMiwgICAgMTUsICAgIDIxLCAgICAyMiwgICAgMjUsCiAgICAgICAyNywgICAgMzQsICAgIDM2LCAgICAzOCwgICAgNDEsICAgIDQ3LCAgICA0OCwgICAgNTEsICAgIDU3LCAgICA2MSwKLSAgICAgIDY0LCAgICA2OSwgICAgNzQsICAgIDc3LCAgICA4MCwgICAgODEsICAgIDg0LCAgICA4NywgICAgODgsICAgIDkxLAotICAgICAgOTQsICAgIDk3LCAgICA5OCwgICAxMDAsICAgMTAyLCAgIDEwNSwgICAxMDYsICAgMTA5LCAgIDExMiwgICAxMTMsCi0gICAgIDExNiwgICAxMTksICAgMTIzLCAgIDEyNAorICAgICAgNjQsICAgIDY5LCAgICA3NCwgICAgNzcsICAgIDg3LCAgICA5MywgICAgOTYsICAgIDk3LCAgIDEwMCwgICAxMDMsCisgICAgIDEwNCwgICAxMDcsICAgMTEwLCAgIDExMywgICAxMTQsICAgMTE2LCAgIDExOCwgICAxMjEsICAgMTIyLCAgIDEyNSwKKyAgICAgMTI4LCAgIDEyOSwgICAxMzIsICAgMTM1LCAgIDEzOSwgICAxNDAKIH07CiAKIC8qIFlZUkhTIC0tIEEgYC0xJy1zZXBhcmF0ZWQgbGlzdCBvZiB0aGUgcnVsZXMnIFJIUy4gICovCiBzdGF0aWMgY29uc3QgeXl0eXBlX2ludDggeXlyaHNbXSA9CiB7Ci0gICAgICAyNSwgICAgIDAsICAgIC0xLCAgICAgMywgICAgMTMsICAgIDI2LCAgICAzMSwgICAgLTEsICAgIDI4LCAgICAzMSwKLSAgICAgIC0xLCAgICAtMSwgICAgMjcsICAgIDI2LCAgICAtMSwgICAgNDMsICAgICA0LCAgICAzMCwgICAgMzAsICAgIDEzLAotICAgICAgLTEsICAgIC0xLCAgICAyOSwgICAgMjgsICAgIC0xLCAgICAyNywgICAgLTEsICAgIDQzLCAgICAgNCwgICAgMzAsCi0gICAgICAxNCwgICAgMzAsICAgIDEzLCAgICAtMSwgICAgIDYsICAgIC0xLCAgICAgNywgICAgLTEsICAgIDE1LCAgICAzMiwKLSAgICAgIC0xLCAgICAxNiwgICAgMzMsICAgIDQxLCAgICAxNywgICAgMTMsICAgIC0xLCAgICAtMSwgICAgMzMsICAgIDM0LAotICAgICAgLTEsICAgIDQzLCAgICAgNSwgICAgMTgsICAgIDM1LCAgICAxMywgICAgLTEsICAgIDQzLCAgICAgNSwgICAgMTMsCi0gICAgICAtMSwgICAgMzYsICAgIDEwLCAgICAtMSwgICAgMzYsICAgIDE5LCAgICAzNywgICAgMjAsICAgIC0xLCAgICAzNiwKLSAgICAgIDIxLCAgICA0MCwgICAgMjIsICAgIC0xLCAgICAzNiwgICAgMTIsICAgIC0xLCAgICAzNSwgICAgMTEsICAgIC0xLAotICAgICAgLTEsICAgIDM1LCAgICAyMywgICAgLTEsICAgIDM2LCAgICAxMSwgICAgLTEsICAgIC0xLCAgICAzNywgICAgMzksCi0gICAgICAtMSwgICAgMzcsICAgIDEyLCAgICAtMSwgICAgMzcsICAgIDExLCAgICAtMSwgICAgLTEsICAgICA4LCAgICAtMSwKLSAgICAgICA2LCAgICAtMSwgICAgMzgsICAgICA3LCAgICAtMSwgICAgLTEsICAgIDQwLCAgICAgOSwgICAgLTEsICAgIDQwLAotICAgICAgMTEsICAgIC0xLCAgICAtMSwgICAgNDIsICAgIDQxLCAgICAtMSwgICAgNDIsICAgIDM0LCAgICAtMSwgICAgNDMsCi0gICAgICAgNSwgICAgMzIsICAgIC0xLCAgICAtMSwgICAgMTEsICAgIC0xCisgICAgICAyOCwgICAgIDAsICAgIC0xLCAgICAgMywgICAgMTQsICAgIDI5LCAgICAzNCwgICAgLTEsICAgIDMxLCAgICAzNCwKKyAgICAgIC0xLCAgICAtMSwgICAgMzAsICAgIDI5LCAgICAtMSwgICAgNDYsICAgICA0LCAgICAzMywgICAgMzMsICAgIDE0LAorICAgICAgLTEsICAgIC0xLCAgICAzMiwgICAgMzEsICAgIC0xLCAgICAzMCwgICAgLTEsICAgIDQ2LCAgICAgNCwgICAgMzMsCisgICAgICAxNSwgICAgMzMsICAgIDE0LCAgICAtMSwgICAgIDYsICAgIC0xLCAgICAgNywgICAgLTEsICAgIDE2LCAgICAzNSwKKyAgICAgIC0xLCAgICAxNywgICAgMzYsICAgIDQ0LCAgICAxOCwgICAgMTQsICAgIC0xLCAgICAtMSwgICAgMzYsICAgIDM3LAorICAgICAgLTEsICAgIDQ2LCAgICAgNSwgICAgMTksICAgIDM4LCAgICAxNCwgICAgLTEsICAgIDQ2LCAgICAgNSwgICAgMTQsCisgICAgICAtMSwgICAgMzksICAgIDEwLCAgICAtMSwgICAgMzksICAgIDIwLCAgICA0MCwgICAgMjEsICAgIC0xLCAgICAzOSwKKyAgICAgIDIyLCAgICA0MywgICAgMjMsICAgIC0xLCAgICAzOSwgICAgMTIsICAgIC0xLCAgICAzOSwgICAgMTMsICAgIDI0LAorICAgICAgMTAsICAgIDI1LCAgICAzMywgICAgMjUsICAgIDMzLCAgICAyNiwgICAgLTEsICAgIDM5LCAgICAxMywgICAgMjQsCisgICAgICAxMCwgICAgMjYsICAgIC0xLCAgICAzOCwgICAgMTEsICAgIC0xLCAgICAtMSwgICAgMzgsICAgIDI1LCAgICAtMSwKKyAgICAgIDM5LCAgICAxMSwgICAgLTEsICAgIC0xLCAgICA0MCwgICAgNDIsICAgIC0xLCAgICA0MCwgICAgMTIsICAgIC0xLAorICAgICAgNDAsICAgIDExLCAgICAtMSwgICAgLTEsICAgICA4LCAgICAtMSwgICAgIDYsICAgIC0xLCAgICA0MSwgICAgIDcsCisgICAgICAtMSwgICAgLTEsICAgIDQzLCAgICAgOSwgICAgLTEsICAgIDQzLCAgICAxMSwgICAgLTEsICAgIC0xLCAgICA0NSwKKyAgICAgIDQ0LCAgICAtMSwgICAgNDUsICAgIDM3LCAgICAtMSwgICAgNDYsICAgICA1LCAgICAzNSwgICAgLTEsICAgIC0xLAorICAgICAgMTEsICAgIC0xCiB9OwogCiAvKiBZWVJMSU5FW1lZTl0gLS0gc291cmNlIGxpbmUgd2hlcmUgcnVsZSBudW1iZXIgWVlOIHdhcyBkZWZpbmVkLiAgKi8KIHN0YXRpYyBjb25zdCB5eXR5cGVfdWludDE2IHl5cmxpbmVbXSA9CiB7Ci0gICAgICAgMCwgICAgODUsICAgIDg1LCAgICA4OSwgICAgOTcsICAgMTAwLCAgIDEwNywgICAxMTUsICAgMTE4LCAgIDEyNSwKLSAgICAgMTI5LCAgIDEzNiwgICAxNDAsICAgMTQ3LCAgIDE1NCwgICAxNjIsICAgMTY1LCAgIDE3MiwgICAxNzYsICAgMTgzLAotICAgICAxODcsICAgMTkxLCAgIDE5NSwgICAxOTksICAgMjA3LCAgIDIxMCwgICAyMTQsICAgMjIyLCAgIDIyNSwgICAyMjksCi0gICAgIDIzNCwgICAyNDIsICAgMjQ1LCAgIDI0OSwgICAyNTMsICAgMjYxLCAgIDI2NCwgICAyNjgsICAgMjc2LCAgIDI3OSwKLSAgICAgMjgzLCAgIDI5MSwgICAyOTksICAgMzAyCisgICAgICAgMCwgICAgODksICAgIDg5LCAgICA5MywgICAxMDEsICAgMTA0LCAgIDExMSwgICAxMTksICAgMTIyLCAgIDEyOSwKKyAgICAgMTMzLCAgIDE0MCwgICAxNDQsICAgMTUxLCAgIDE1OCwgICAxNjYsICAgMTY5LCAgIDE3NiwgICAxODAsICAgMTg3LAorICAgICAxOTEsICAgMTk1LCAgIDE5OSwgICAyMDMsICAgMjIwLCAgIDIzMSwgICAyMzksICAgMjQyLCAgIDI0NiwgICAyNTQsCisgICAgIDI1NywgICAyNjEsICAgMjY2LCAgIDI3NCwgICAyNzcsICAgMjgxLCAgIDI4NSwgICAyOTMsICAgMjk2LCAgIDMwMCwKKyAgICAgMzA4LCAgIDMxMSwgICAzMTUsICAgMzIzLCAgIDMzMSwgICAzMzQKIH07CiAjZW5kaWYKIApAQCAtNDg0LDEyICs0OTEsMTIgQEAKIHsKICAgIiRlbmQiLCAiZXJyb3IiLCAiJHVuZGVmaW5lZCIsICJEVF9WMSIsICJEVF9NRU1SRVNFUlZFIiwKICAgIkRUX1BST1BOT0RFTkFNRSIsICJEVF9MSVRFUkFMIiwgIkRUX0xFR0FDWUxJVEVSQUwiLCAiRFRfQkFTRSIsCi0gICJEVF9CWVRFIiwgIkRUX1NUUklORyIsICJEVF9MQUJFTCIsICJEVF9SRUYiLCAiJzsnIiwgIictJyIsICInLyciLCAiJ3snIiwKLSAgIid9JyIsICInPSciLCAiJzwnIiwgIic+JyIsICInWyciLCAiJ10nIiwgIicsJyIsICIkYWNjZXB0IiwgInNvdXJjZWZpbGUiLAotICAibWVtcmVzZXJ2ZXMiLCAibWVtcmVzZXJ2ZSIsICJ2MF9tZW1yZXNlcnZlcyIsICJ2MF9tZW1yZXNlcnZlIiwgImFkZHIiLAotICAiZGV2aWNldHJlZSIsICJub2RlZGVmIiwgInByb3BsaXN0IiwgInByb3BkZWYiLCAicHJvcGRhdGEiLAotICAicHJvcGRhdGFwcmVmaXgiLCAiY2VsbGxpc3QiLCAiY2VsbGJhc2UiLCAiY2VsbHZhbCIsICJieXRlc3RyaW5nIiwKLSAgInN1Ym5vZGVzIiwgInN1Ym5vZGUiLCAibGFiZWwiLCAwCisgICJEVF9CWVRFIiwgIkRUX1NUUklORyIsICJEVF9MQUJFTCIsICJEVF9SRUYiLCAiRFRfSU5DQklOIiwgIic7JyIsICInLSciLAorICAiJy8nIiwgIid7JyIsICInfSciLCAiJz0nIiwgIic8JyIsICInPiciLCAiJ1snIiwgIiddJyIsICInKCciLCAiJywnIiwKKyAgIicpJyIsICIkYWNjZXB0IiwgInNvdXJjZWZpbGUiLCAibWVtcmVzZXJ2ZXMiLCAibWVtcmVzZXJ2ZSIsCisgICJ2MF9tZW1yZXNlcnZlcyIsICJ2MF9tZW1yZXNlcnZlIiwgImFkZHIiLCAiZGV2aWNldHJlZSIsICJub2RlZGVmIiwKKyAgInByb3BsaXN0IiwgInByb3BkZWYiLCAicHJvcGRhdGEiLCAicHJvcGRhdGFwcmVmaXgiLCAiY2VsbGxpc3QiLAorICAiY2VsbGJhc2UiLCAiY2VsbHZhbCIsICJieXRlc3RyaW5nIiwgInN1Ym5vZGVzIiwgInN1Ym5vZGUiLCAibGFiZWwiLCAwCiB9OwogI2VuZGlmCiAKQEAgLTQ5OSwxOSArNTA2LDE5IEBACiBzdGF0aWMgY29uc3QgeXl0eXBlX3VpbnQxNiB5eXRva251bVtdID0KIHsKICAgICAgICAwLCAgIDI1NiwgICAyNTcsICAgMjU4LCAgIDI1OSwgICAyNjAsICAgMjYxLCAgIDI2MiwgICAyNjMsICAgMjY0LAotICAgICAyNjUsICAgMjY2LCAgIDI2NywgICAgNTksICAgIDQ1LCAgICA0NywgICAxMjMsICAgMTI1LCAgICA2MSwgICAgNjAsCi0gICAgICA2MiwgICAgOTEsICAgIDkzLCAgICA0NAorICAgICAyNjUsICAgMjY2LCAgIDI2NywgICAyNjgsICAgIDU5LCAgICA0NSwgICAgNDcsICAgMTIzLCAgIDEyNSwgICAgNjEsCisgICAgICA2MCwgICAgNjIsICAgIDkxLCAgICA5MywgICAgNDAsICAgIDQ0LCAgICA0MQogfTsKICMgZW5kaWYKIAogLyogWVlSMVtZWU5dIC0tIFN5bWJvbCBudW1iZXIgb2Ygc3ltYm9sIHRoYXQgcnVsZSBZWU4gZGVyaXZlcy4gICovCiBzdGF0aWMgY29uc3QgeXl0eXBlX3VpbnQ4IHl5cjFbXSA9CiB7Ci0gICAgICAgMCwgICAgMjQsICAgIDI1LCAgICAyNSwgICAgMjYsICAgIDI2LCAgICAyNywgICAgMjgsICAgIDI4LCAgICAyOSwKLSAgICAgIDI5LCAgICAzMCwgICAgMzAsICAgIDMxLCAgICAzMiwgICAgMzMsICAgIDMzLCAgICAzNCwgICAgMzQsICAgIDM1LAotICAgICAgMzUsICAgIDM1LCAgICAzNSwgICAgMzUsICAgIDM2LCAgICAzNiwgICAgMzYsICAgIDM3LCAgICAzNywgICAgMzcsCi0gICAgICAzNywgICAgMzgsICAgIDM4LCAgICAzOSwgICAgMzksICAgIDQwLCAgICA0MCwgICAgNDAsICAgIDQxLCAgICA0MSwKLSAgICAgIDQxLCAgICA0MiwgICAgNDMsICAgIDQzCisgICAgICAgMCwgICAgMjcsICAgIDI4LCAgICAyOCwgICAgMjksICAgIDI5LCAgICAzMCwgICAgMzEsICAgIDMxLCAgICAzMiwKKyAgICAgIDMyLCAgICAzMywgICAgMzMsICAgIDM0LCAgICAzNSwgICAgMzYsICAgIDM2LCAgICAzNywgICAgMzcsICAgIDM4LAorICAgICAgMzgsICAgIDM4LCAgICAzOCwgICAgMzgsICAgIDM4LCAgICAzOCwgICAgMzksICAgIDM5LCAgICAzOSwgICAgNDAsCisgICAgICA0MCwgICAgNDAsICAgIDQwLCAgICA0MSwgICAgNDEsICAgIDQyLCAgICA0MiwgICAgNDMsICAgIDQzLCAgICA0MywKKyAgICAgIDQ0LCAgICA0NCwgICAgNDQsICAgIDQ1LCAgICA0NiwgICAgNDYKIH07CiAKIC8qIFlZUjJbWVlOXSAtLSBOdW1iZXIgb2Ygc3ltYm9scyBjb21wb3NpbmcgcmlnaHQgaGFuZCBzaWRlIG9mIHJ1bGUgWVlOLiAgKi8KQEAgLTUxOSw5ICs1MjYsOSBAQAogewogICAgICAgIDAsICAgICAyLCAgICAgNCwgICAgIDIsICAgICAwLCAgICAgMiwgICAgIDUsICAgICAwLCAgICAgMiwgICAgIDEsCiAgICAgICAgNiwgICAgIDEsICAgICAxLCAgICAgMiwgICAgIDUsICAgICAwLCAgICAgMiwgICAgIDUsICAgICAzLCAgICAgMiwKLSAgICAgICA0LCAgICAgNCwgICAgIDIsICAgICAyLCAgICAgMCwgICAgIDIsICAgICAyLCAgICAgMCwgICAgIDIsICAgICAyLAotICAgICAgIDIsICAgICAwLCAgICAgMSwgICAgIDEsICAgICAyLCAgICAgMCwgICAgIDIsICAgICAyLCAgICAgMCwgICAgIDIsCi0gICAgICAgMiwgICAgIDMsICAgICAwLCAgICAgMQorICAgICAgIDQsICAgICA0LCAgICAgMiwgICAgIDksICAgICA1LCAgICAgMiwgICAgIDAsICAgICAyLCAgICAgMiwgICAgIDAsCisgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMCwgICAgIDEsICAgICAxLCAgICAgMiwgICAgIDAsICAgICAyLCAgICAgMiwKKyAgICAgICAwLCAgICAgMiwgICAgIDIsICAgICAzLCAgICAgMCwgICAgIDEKIH07CiAKIC8qIFlZREVGQUNUW1NUQVRFLU5BTUVdIC0tIERlZmF1bHQgcnVsZSB0byByZWR1Y2Ugd2l0aCBpbiBzdGF0ZQpAQCAtNTI5LDgxICs1MzYsODYgQEAKICAgIG1lYW5zIHRoZSBkZWZhdWx0IGlzIGFuIGVycm9yLiAgKi8KIHN0YXRpYyBjb25zdCB5eXR5cGVfdWludDggeXlkZWZhY3RbXSA9CiB7Ci0gICAgICAgNywgICAgIDAsICAgIDQzLCAgICAgMCwgICAgIDksICAgICAwLCAgICAgNywgICAgIDAsICAgICA0LCAgICAgMSwKKyAgICAgICA3LCAgICAgMCwgICAgNDUsICAgICAwLCAgICAgOSwgICAgIDAsICAgICA3LCAgICAgMCwgICAgIDQsICAgICAxLAogICAgICAgIDAsICAgICAzLCAgICAgOCwgICAgIDAsICAgICAwLCAgICAgNCwgICAgIDAsICAgIDE1LCAgICAxMywgICAgMTEsCi0gICAgICAxMiwgICAgIDAsICAgICAyLCAgICAgNSwgICAgIDAsICAgIDM4LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAxNiwKLSAgICAgICAwLCAgICAzOCwgICAgIDAsICAgICAwLCAgICAgNiwgICAgIDAsICAgIDQwLCAgICAzOSwgICAgIDAsICAgIDEwLAotICAgICAgMTQsICAgIDE4LCAgICAyNCwgICAgNDEsICAgICAwLCAgICAgMCwgICAgMjMsICAgIDE3LCAgICAyNSwgICAgMTksCi0gICAgICAyNiwgICAgMjIsICAgIDI3LCAgICAzNSwgICAgMzEsICAgICAwLCAgICAzMywgICAgMzIsICAgIDMwLCAgICAyOSwKLSAgICAgIDIwLCAgICAgMCwgICAgMjgsICAgIDM2LCAgICAzNywgICAgMjEsICAgIDM0CisgICAgICAxMiwgICAgIDAsICAgICAyLCAgICAgNSwgICAgIDAsICAgIDQwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAxNiwKKyAgICAgICAwLCAgICA0MCwgICAgIDAsICAgICAwLCAgICAgNiwgICAgIDAsICAgIDQyLCAgICA0MSwgICAgIDAsICAgIDEwLAorICAgICAgMTQsICAgIDE4LCAgICAyNiwgICAgNDMsICAgICAwLCAgICAgMCwgICAgMjUsICAgIDE3LCAgICAyNywgICAgMTksCisgICAgICAyOCwgICAgMjIsICAgICAwLCAgICAyOSwgICAgMzcsICAgICAwLCAgICAzMywgICAgIDAsICAgICAwLCAgICAzNSwKKyAgICAgIDM0LCAgICAzMiwgICAgMzEsICAgIDIwLCAgICAgMCwgICAgMzAsICAgIDM4LCAgICAzOSwgICAgMjEsICAgICAwLAorICAgICAgMjQsICAgIDM2LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAyMwogfTsKIAogLyogWVlERUZHT1RPW05URVJNLU5VTV0uICAqLwogc3RhdGljIGNvbnN0IHl5dHlwZV9pbnQ4IHl5ZGVmZ290b1tdID0KIHsKICAgICAgIC0xLCAgICAgMywgICAgMTQsICAgICA0LCAgICAgNSwgICAgIDYsICAgIDI3LCAgICAxMSwgICAgMTgsICAgIDI1LAotICAgICAgMjksICAgIDQ0LCAgICA0NSwgICAgNTQsICAgIDYxLCAgICA2MiwgICAgNTUsICAgIDMwLCAgICAzMSwgICAgIDcKKyAgICAgIDI5LCAgICA0NCwgICAgNDUsICAgIDU2LCAgICA2NCwgICAgNjUsICAgIDU3LCAgICAzMCwgICAgMzEsICAgICA3CiB9OwogCiAvKiBZWVBBQ1RbU1RBVEUtTlVNXSAtLSBJbmRleCBpbiBZWVRBQkxFIG9mIHRoZSBwb3J0aW9uIGRlc2NyaWJpbmcKICAgIFNUQVRFLU5VTS4gICovCi0jZGVmaW5lIFlZUEFDVF9OSU5GIC0xMworI2RlZmluZSBZWVBBQ1RfTklORiAtMTQKIHN0YXRpYyBjb25zdCB5eXR5cGVfaW50OCB5eXBhY3RbXSA9CiB7Ci0gICAgICAyMywgICAgMTEsICAgLTEzLCAgICAzNywgICAtMTMsICAgIC00LCAgICAxOCwgICAgMzksICAgIDE4LCAgIC0xMywKLSAgICAgIDI4LCAgIC0xMywgICAtMTMsICAgIDM0LCAgICAtNCwgICAgMTgsICAgIDQxLCAgIC0xMywgICAtMTMsICAgLTEzLAotICAgICAtMTMsICAgIDI1LCAgIC0xMywgICAtMTMsICAgIDM0LCAgICAtMywgICAgMzQsICAgIDMzLCAgICAzNCwgICAtMTMsCi0gICAgICAzMCwgICAgLTMsICAgIDQzLCAgICAzNiwgICAtMTMsICAgIDM4LCAgIC0xMywgICAtMTMsICAgIDIwLCAgIC0xMywKLSAgICAgLTEzLCAgIC0xMywgICAtMTMsICAgLTEzLCAgICAgMiwgICAgIDksICAgLTEzLCAgIC0xMywgICAtMTMsICAgLTEzLAotICAgICAtMTMsICAgLTEzLCAgIC0xMywgICAtMTMsICAgIC0yLCAgICAtNiwgICAtMTMsICAgLTEzLCAgIC0xMywgICAtMTMsCi0gICAgIC0xMywgICAgNDUsICAgLTEzLCAgIC0xMywgICAtMTMsICAgLTEzLCAgIC0xMworICAgICAgMzAsICAgLTExLCAgIC0xNCwgICAgIDcsICAgLTE0LCAgICAtMSwgICAgMjcsICAgIDEzLCAgICAyNywgICAtMTQsCisgICAgICAgOCwgICAtMTQsICAgLTE0LCAgICA0MCwgICAgLTEsICAgIDI3LCAgICAzNSwgICAtMTQsICAgLTE0LCAgIC0xNCwKKyAgICAgLTE0LCAgICAyMSwgICAtMTQsICAgLTE0LCAgICA0MCwgICAgMjQsICAgIDQwLCAgICAyOCwgICAgNDAsICAgLTE0LAorICAgICAgMzIsICAgIDI0LCAgICA0NiwgICAgMzgsICAgLTE0LCAgICAzOSwgICAtMTQsICAgLTE0LCAgICAyNiwgICAtMTQsCisgICAgIC0xNCwgICAtMTQsICAgLTE0LCAgIC0xNCwgICAgLTksICAgIDEwLCAgIC0xNCwgICAtMTQsICAgLTE0LCAgIC0xNCwKKyAgICAgLTE0LCAgIC0xNCwgICAgMzEsICAgLTE0LCAgIC0xNCwgICAgNDQsICAgIC0yLCAgICAgMywgICAgMjMsICAgLTE0LAorICAgICAtMTQsICAgLTE0LCAgIC0xNCwgICAtMTQsICAgIDUwLCAgIC0xNCwgICAtMTQsICAgLTE0LCAgIC0xNCwgICAgNDAsCisgICAgIC0xNCwgICAtMTQsICAgIDMzLCAgICA0MCwgICAgMzYsICAgLTE0CiB9OwogCiAvKiBZWVBHT1RPW05URVJNLU5VTV0uICAqLwogc3RhdGljIGNvbnN0IHl5dHlwZV9pbnQ4IHl5cGdvdG9bXSA9CiB7Ci0gICAgIC0xMywgICAtMTMsICAgIDM1LCAgICAyNywgICAgNDcsICAgLTEzLCAgIC0xMiwgICAgNDAsICAgIDE3LCAgIC0xMywKLSAgICAgIDI2LCAgIC0xMywgICAtMTMsICAgLTEzLCAgIC0xMywgICAtMTMsICAgLTEzLCAgICAyOSwgICAtMTMsICAgIC04CisgICAgIC0xNCwgICAtMTQsICAgIDQ4LCAgICAyOSwgICAgNTMsICAgLTE0LCAgIC0xMywgICAgNDcsICAgIDM0LCAgIC0xNCwKKyAgICAgIDM3LCAgIC0xNCwgICAtMTQsICAgLTE0LCAgIC0xNCwgICAtMTQsICAgLTE0LCAgICA0MiwgICAtMTQsICAgIC03CiB9OwogCiAvKiBZWVRBQkxFW1lZUEFDVFtTVEFURS1OVU1dXS4gIFdoYXQgdG8gZG8gaW4gc3RhdGUgU1RBVEUtTlVNLiAgSWYKICAgIHBvc2l0aXZlLCBzaGlmdCB0aGF0IHRva2VuLiAgSWYgbmVnYXRpdmUsIHJlZHVjZSB0aGUgcnVsZSB3aGljaAogICAgbnVtYmVyIGlzIHRoZSBvcHBvc2l0ZS4gIElmIHplcm8sIGRvIHdoYXQgWVlERUZBQ1Qgc2F5cy4KICAgIElmIFlZVEFCTEVfTklORiwgc3ludGF4IGVycm9yLiAgKi8KLSNkZWZpbmUgWVlUQUJMRV9OSU5GIC00MworI2RlZmluZSBZWVRBQkxFX05JTkYgLTQ1CiBzdGF0aWMgY29uc3QgeXl0eXBlX2ludDggeXl0YWJsZVtdID0KIHsKLSAgICAgIDE2LCAgICAyMSwgICAtNDIsICAgIDYzLCAgICA1NiwgICAgNjQsICAgIDU3LCAgICAxNiwgICAgIDIsICAgIDU4LAotICAgICAgNTksICAgIDEwLCAgICAyOCwgICAgNDYsICAgIDMzLCAgICA0NywgICAgNjUsICAgIDMyLCAgICA2MCwgICAgNDksCi0gICAgICA1MCwgICAgNTEsICAgLTQyLCAgICAzMiwgICAgIDgsICAgIDQ4LCAgICAgMSwgICAtNDIsICAgIDUyLCAgICAgMiwKLSAgICAgIDUzLCAgICAxOSwgICAgMjAsICAgIDQxLCAgICAgMiwgICAgMTUsICAgIDE3LCAgICAgOSwgICAgNDIsICAgIDI2LAotICAgICAgMTksICAgIDIwLCAgICAxNSwgICAgMTMsICAgIDE3LCAgICAyNCwgICAgMzQsICAgIDM1LCAgICAzOCwgICAgMzksCi0gICAgICAyMywgICAgNDAsICAgIDY2LCAgICAxMiwgICAgMjIsICAgIDQzLCAgICAgMCwgICAgMzYsICAgICAwLCAgICAgMCwKLSAgICAgIDM3CisgICAgICAyMSwgICAgMTYsICAgIDQ2LCAgICAgOCwgICAgNTksICAgIDQ3LCAgICA2MCwgICAgIDksICAgIDE2LCAgICA2MSwKKyAgICAgIDYyLCAgICAyOCwgICAgNjYsICAgIDMzLCAgICA2NywgICAgMTAsICAgIDQ4LCAgICAxMywgICAgMzIsICAgIDYzLAorICAgICAgNDksICAgIDUwLCAgICA1MSwgICAgNTIsICAgIDMyLCAgICAxNywgICAgNjgsICAgIDE5LCAgICAyMCwgICAtNDQsCisgICAgICA1MywgICAtNDQsICAgIDU0LCAgICAgMSwgICAtNDQsICAgICAyLCAgICAyNiwgICAgMTUsICAgICAyLCAgICAyNCwKKyAgICAgIDQxLCAgICAgMiwgICAgMzQsICAgIDE3LCAgICAxNSwgICAgNDIsICAgIDE5LCAgICAyMCwgICAgNjksICAgIDcwLAorICAgICAgMzUsICAgIDM4LCAgICAzOSwgICAgNDAsICAgIDU4LCAgICA1NSwgICAgNzIsICAgIDcxLCAgICA3MywgICAgMTIsCisgICAgICA3NCwgICAgMjIsICAgIDc1LCAgICAyMywgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDM2LCAgICAgMCwKKyAgICAgICAwLCAgICAgMCwgICAgNDMsICAgIDM3CiB9OwogCiBzdGF0aWMgY29uc3QgeXl0eXBlX2ludDggeXljaGVja1tdID0KIHsKLSAgICAgICA4LCAgICAxMywgICAgIDUsICAgICA5LCAgICAgNiwgICAgMTEsICAgICA4LCAgICAxNSwgICAgMTEsICAgIDExLAotICAgICAgMTIsICAgIDE1LCAgICAyNCwgICAgMTEsICAgIDI2LCAgICAxMywgICAgMjIsICAgIDI1LCAgICAyMCwgICAgMTAsCi0gICAgICAxMSwgICAgMTIsICAgICA0LCAgICAzMSwgICAgMTMsICAgIDIzLCAgICAgMywgICAgIDQsICAgIDE5LCAgICAxMSwKLSAgICAgIDIxLCAgICAgNiwgICAgIDcsICAgIDEzLCAgICAxMSwgICAgIDgsICAgIDE2LCAgICAgMCwgICAgMTgsICAgIDE0LAotICAgICAgIDYsICAgICA3LCAgICAxNSwgICAgIDQsICAgIDE2LCAgICAgNCwgICAgMTMsICAgIDE3LCAgICAgNSwgICAgMTMsCi0gICAgICAxNSwgICAgMTMsICAgICA3LCAgICAgNiwgICAgMTQsICAgIDM4LCAgICAtMSwgICAgMzEsICAgIC0xLCAgICAtMSwKLSAgICAgIDMxCisgICAgICAxMywgICAgIDgsICAgIDExLCAgICAxNCwgICAgIDYsICAgIDE0LCAgICAgOCwgICAgIDAsICAgIDE1LCAgICAxMSwKKyAgICAgIDEyLCAgICAyNCwgICAgIDksICAgIDI2LCAgICAxMSwgICAgMTYsICAgIDI1LCAgICAgNCwgICAgMjUsICAgIDIxLAorICAgICAgMTAsICAgIDExLCAgICAxMiwgICAgMTMsICAgIDMxLCAgICAxNywgICAgMjMsICAgICA2LCAgICAgNywgICAgIDUsCisgICAgICAyMCwgICAgIDQsICAgIDIyLCAgICAgMywgICAgIDQsICAgIDExLCAgICAxNSwgICAgIDgsICAgIDExLCAgICAgNCwKKyAgICAgIDE0LCAgICAxMSwgICAgMTQsICAgIDE3LCAgICAxNSwgICAgMTksICAgICA2LCAgICAgNywgICAgMjUsICAgIDI2LAorICAgICAgMTgsICAgICA1LCAgICAxNCwgICAgMTQsICAgIDEwLCAgICAyNCwgICAgNjksICAgICA3LCAgICAyNSwgICAgIDYsCisgICAgICA3MywgICAgMTQsICAgIDI2LCAgICAxNSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDMxLCAgICAtMSwKKyAgICAgIC0xLCAgICAtMSwgICAgMzgsICAgIDMxCiB9OwogCiAvKiBZWVNUT1NbU1RBVEUtTlVNXSAtLSBUaGUgKGludGVybmFsIG51bWJlciBvZiB0aGUpIGFjY2Vzc2luZwogICAgc3ltYm9sIG9mIHN0YXRlIFNUQVRFLU5VTS4gICovCiBzdGF0aWMgY29uc3QgeXl0eXBlX3VpbnQ4IHl5c3Rvc1tdID0KIHsKLSAgICAgICAwLCAgICAgMywgICAgMTEsICAgIDI1LCAgICAyNywgICAgMjgsICAgIDI5LCAgICA0MywgICAgMTMsICAgICAwLAotICAgICAgMTUsICAgIDMxLCAgICAyOCwgICAgIDQsICAgIDI2LCAgICAyNywgICAgNDMsICAgIDE2LCAgICAzMiwgICAgIDYsCi0gICAgICAgNywgICAgMzAsICAgIDMxLCAgICAyNiwgICAgIDQsICAgIDMzLCAgICAxNCwgICAgMzAsICAgIDMwLCAgICAzNCwKLSAgICAgIDQxLCAgICA0MiwgICAgNDMsICAgIDMwLCAgICAxMywgICAgMTcsICAgIDM0LCAgICA0MSwgICAgIDUsICAgIDEzLAotICAgICAgMTMsICAgIDEzLCAgICAxOCwgICAgMzIsICAgIDM1LCAgICAzNiwgICAgMTEsICAgIDEzLCAgICAyMywgICAgMTAsCi0gICAgICAxMSwgICAgMTIsICAgIDE5LCAgICAyMSwgICAgMzcsICAgIDQwLCAgICAgNiwgICAgIDgsICAgIDExLCAgICAxMiwKLSAgICAgIDIwLCAgICAzOCwgICAgMzksICAgICA5LCAgICAxMSwgICAgMjIsICAgICA3CisgICAgICAgMCwgICAgIDMsICAgIDExLCAgICAyOCwgICAgMzAsICAgIDMxLCAgICAzMiwgICAgNDYsICAgIDE0LCAgICAgMCwKKyAgICAgIDE2LCAgICAzNCwgICAgMzEsICAgICA0LCAgICAyOSwgICAgMzAsICAgIDQ2LCAgICAxNywgICAgMzUsICAgICA2LAorICAgICAgIDcsICAgIDMzLCAgICAzNCwgICAgMjksICAgICA0LCAgICAzNiwgICAgMTUsICAgIDMzLCAgICAzMywgICAgMzcsCisgICAgICA0NCwgICAgNDUsICAgIDQ2LCAgICAzMywgICAgMTQsICAgIDE4LCAgICAzNywgICAgNDQsICAgICA1LCAgICAxNCwKKyAgICAgIDE0LCAgICAxNCwgICAgMTksICAgIDM1LCAgICAzOCwgICAgMzksICAgIDExLCAgICAxNCwgICAgMjUsICAgIDEwLAorICAgICAgMTEsICAgIDEyLCAgICAxMywgICAgMjAsICAgIDIyLCAgICAyNCwgICAgNDAsICAgIDQzLCAgICAxMCwgICAgIDYsCisgICAgICAgOCwgICAgMTEsICAgIDEyLCAgICAyMSwgICAgNDEsICAgIDQyLCAgICAgOSwgICAgMTEsICAgIDIzLCAgICAyNSwKKyAgICAgIDI2LCAgICAgNywgICAgMzMsICAgIDI1LCAgICAzMywgICAgMjYKIH07CiAKICNkZWZpbmUgeXllcnJvawkJKHl5ZXJyc3RhdHVzID0gMCkKQEAgLTE0NDAsMjg5ICsxNDUyLDMyMyBAQAogICBzd2l0Y2ggKHl5bikKICAgICB7CiAgICAgICAgIGNhc2UgMjoKLSNsaW5lIDg2ICJkdGMtcGFyc2VyLnkiCisjbGluZSA5MCAiZHRjLXBhcnNlci55IgogICAgIHsKLQkJCXRoZV9ib290X2luZm8gPSBidWlsZF9ib290X2luZm8oKHl5dnNwWygzKSAtICg0KV0ucmUpLCAoeXl2c3BbKDQpIC0gKDQpXS5ub2RlKSk7CisJCQl0aGVfYm9vdF9pbmZvID0gYnVpbGRfYm9vdF9pbmZvKCh5eXZzcFsoMykgLSAoNCldLnJlKSwgKHl5dnNwWyg0KSAtICg0KV0ubm9kZSksIDApOwogCQk7fQogICAgIGJyZWFrOwogCiAgIGNhc2UgMzoKLSNsaW5lIDkwICJkdGMtcGFyc2VyLnkiCisjbGluZSA5NCAiZHRjLXBhcnNlci55IgogICAgIHsKLQkJCXRoZV9ib290X2luZm8gPSBidWlsZF9ib290X2luZm8oKHl5dnNwWygxKSAtICgyKV0ucmUpLCAoeXl2c3BbKDIpIC0gKDIpXS5ub2RlKSk7CisJCQl0aGVfYm9vdF9pbmZvID0gYnVpbGRfYm9vdF9pbmZvKCh5eXZzcFsoMSkgLSAoMildLnJlKSwgKHl5dnNwWygyKSAtICgyKV0ubm9kZSksIDApOwogCQk7fQogICAgIGJyZWFrOwogCiAgIGNhc2UgNDoKLSNsaW5lIDk3ICJkdGMtcGFyc2VyLnkiCisjbGluZSAxMDEgImR0Yy1wYXJzZXIueSIKICAgICB7CiAJCQkoeXl2YWwucmUpID0gTlVMTDsKIAkJO30KICAgICBicmVhazsKIAogICBjYXNlIDU6Ci0jbGluZSAxMDEgImR0Yy1wYXJzZXIueSIKKyNsaW5lIDEwNSAiZHRjLXBhcnNlci55IgogICAgIHsKIAkJCSh5eXZhbC5yZSkgPSBjaGFpbl9yZXNlcnZlX2VudHJ5KCh5eXZzcFsoMSkgLSAoMildLnJlKSwgKHl5dnNwWygyKSAtICgyKV0ucmUpKTsKIAkJO30KICAgICBicmVhazsKIAogICBjYXNlIDY6Ci0jbGluZSAxMDggImR0Yy1wYXJzZXIueSIKKyNsaW5lIDExMiAiZHRjLXBhcnNlci55IgogICAgIHsKIAkJCSh5eXZhbC5yZSkgPSBidWlsZF9yZXNlcnZlX2VudHJ5KCh5eXZzcFsoMykgLSAoNSldLmFkZHIpLCAoeXl2c3BbKDQpIC0gKDUpXS5hZGRyKSwgKHl5dnNwWygxKSAtICg1KV0ubGFiZWxyZWYpKTsKIAkJO30KICAgICBicmVhazsKIAogICBjYXNlIDc6Ci0jbGluZSAxMTUgImR0Yy1wYXJzZXIueSIKKyNsaW5lIDExOSAiZHRjLXBhcnNlci55IgogICAgIHsKIAkJCSh5eXZhbC5yZSkgPSBOVUxMOwogCQk7fQogICAgIGJyZWFrOwogCiAgIGNhc2UgODoKLSNsaW5lIDExOSAiZHRjLXBhcnNlci55IgorI2xpbmUgMTIzICJkdGMtcGFyc2VyLnkiCiAgICAgewogCQkJKHl5dmFsLnJlKSA9IGNoYWluX3Jlc2VydmVfZW50cnkoKHl5dnNwWygxKSAtICgyKV0ucmUpLCAoeXl2c3BbKDIpIC0gKDIpXS5yZSkpOwogCQk7fQogICAgIGJyZWFrOwogCiAgIGNhc2UgOToKLSNsaW5lIDEyNiAiZHRjLXBhcnNlci55IgorI2xpbmUgMTMwICJkdGMtcGFyc2VyLnkiCiAgICAgewogCQkJKHl5dmFsLnJlKSA9ICh5eXZzcFsoMSkgLSAoMSldLnJlKTsKIAkJO30KICAgICBicmVhazsKIAogICBjYXNlIDEwOgotI2xpbmUgMTMwICJkdGMtcGFyc2VyLnkiCisjbGluZSAxMzQgImR0Yy1wYXJzZXIueSIKICAgICB7CiAJCQkoeXl2YWwucmUpID0gYnVpbGRfcmVzZXJ2ZV9lbnRyeSgoeXl2c3BbKDMpIC0gKDYpXS5hZGRyKSwgKHl5dnNwWyg1KSAtICg2KV0uYWRkcikgLSAoeXl2c3BbKDMpIC0gKDYpXS5hZGRyKSArIDEsICh5eXZzcFsoMSkgLSAoNildLmxhYmVscmVmKSk7CiAJCTt9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxMToKLSNsaW5lIDEzNyAiZHRjLXBhcnNlci55IgorI2xpbmUgMTQxICJkdGMtcGFyc2VyLnkiCiAgICAgewogCQkJKHl5dmFsLmFkZHIpID0gZXZhbF9saXRlcmFsKCh5eXZzcFsoMSkgLSAoMSldLmxpdGVyYWwpLCAwLCA2NCk7CiAJCTt9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxMjoKLSNsaW5lIDE0MSAiZHRjLXBhcnNlci55IgorI2xpbmUgMTQ1ICJkdGMtcGFyc2VyLnkiCiAgICAgewogCQkJKHl5dmFsLmFkZHIpID0gZXZhbF9saXRlcmFsKCh5eXZzcFsoMSkgLSAoMSldLmxpdGVyYWwpLCAxNiwgNjQpOwogCQk7fQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTM6Ci0jbGluZSAxNDggImR0Yy1wYXJzZXIueSIKKyNsaW5lIDE1MiAiZHRjLXBhcnNlci55IgogICAgIHsKIAkJCSh5eXZhbC5ub2RlKSA9IG5hbWVfbm9kZSgoeXl2c3BbKDIpIC0gKDIpXS5ub2RlKSwgIiIsIE5VTEwpOwogCQk7fQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTQ6Ci0jbGluZSAxNTUgImR0Yy1wYXJzZXIueSIKKyNsaW5lIDE1OSAiZHRjLXBhcnNlci55IgogICAgIHsKIAkJCSh5eXZhbC5ub2RlKSA9IGJ1aWxkX25vZGUoKHl5dnNwWygyKSAtICg1KV0ucHJvcGxpc3QpLCAoeXl2c3BbKDMpIC0gKDUpXS5ub2RlbGlzdCkpOwogCQk7fQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTU6Ci0jbGluZSAxNjIgImR0Yy1wYXJzZXIueSIKKyNsaW5lIDE2NiAiZHRjLXBhcnNlci55IgogICAgIHsKIAkJCSh5eXZhbC5wcm9wbGlzdCkgPSBOVUxMOwogCQk7fQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTY6Ci0jbGluZSAxNjYgImR0Yy1wYXJzZXIueSIKKyNsaW5lIDE3MCAiZHRjLXBhcnNlci55IgogICAgIHsKIAkJCSh5eXZhbC5wcm9wbGlzdCkgPSBjaGFpbl9wcm9wZXJ0eSgoeXl2c3BbKDIpIC0gKDIpXS5wcm9wKSwgKHl5dnNwWygxKSAtICgyKV0ucHJvcGxpc3QpKTsKIAkJO30KICAgICBicmVhazsKIAogICBjYXNlIDE3OgotI2xpbmUgMTczICJkdGMtcGFyc2VyLnkiCisjbGluZSAxNzcgImR0Yy1wYXJzZXIueSIKICAgICB7CiAJCQkoeXl2YWwucHJvcCkgPSBidWlsZF9wcm9wZXJ0eSgoeXl2c3BbKDIpIC0gKDUpXS5wcm9wbm9kZW5hbWUpLCAoeXl2c3BbKDQpIC0gKDUpXS5kYXRhKSwgKHl5dnNwWygxKSAtICg1KV0ubGFiZWxyZWYpKTsKIAkJO30KICAgICBicmVhazsKIAogICBjYXNlIDE4OgotI2xpbmUgMTc3ICJkdGMtcGFyc2VyLnkiCisjbGluZSAxODEgImR0Yy1wYXJzZXIueSIKICAgICB7CiAJCQkoeXl2YWwucHJvcCkgPSBidWlsZF9wcm9wZXJ0eSgoeXl2c3BbKDIpIC0gKDMpXS5wcm9wbm9kZW5hbWUpLCBlbXB0eV9kYXRhLCAoeXl2c3BbKDEpIC0gKDMpXS5sYWJlbHJlZikpOwogCQk7fQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTk6Ci0jbGluZSAxODQgImR0Yy1wYXJzZXIueSIKKyNsaW5lIDE4OCAiZHRjLXBhcnNlci55IgogICAgIHsKIAkJCSh5eXZhbC5kYXRhKSA9IGRhdGFfbWVyZ2UoKHl5dnNwWygxKSAtICgyKV0uZGF0YSksICh5eXZzcFsoMikgLSAoMildLmRhdGEpKTsKIAkJO30KICAgICBicmVhazsKIAogICBjYXNlIDIwOgotI2xpbmUgMTg4ICJkdGMtcGFyc2VyLnkiCi0gICAgewotCQkJKHl5dmFsLmRhdGEpID0gZGF0YV9tZXJnZSgoeXl2c3BbKDEpIC0gKDQpXS5kYXRhKSwgKHl5dnNwWygzKSAtICg0KV0uZGF0YSkpOwotCQk7fQotICAgIGJyZWFrOwotCi0gIGNhc2UgMjE6CiAjbGluZSAxOTIgImR0Yy1wYXJzZXIueSIKICAgICB7CiAJCQkoeXl2YWwuZGF0YSkgPSBkYXRhX21lcmdlKCh5eXZzcFsoMSkgLSAoNCldLmRhdGEpLCAoeXl2c3BbKDMpIC0gKDQpXS5kYXRhKSk7CiAJCTt9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAyMjoKKyAgY2FzZSAyMToKICNsaW5lIDE5NiAiZHRjLXBhcnNlci55IgogICAgIHsKKwkJCSh5eXZhbC5kYXRhKSA9IGRhdGFfbWVyZ2UoKHl5dnNwWygxKSAtICg0KV0uZGF0YSksICh5eXZzcFsoMykgLSAoNCldLmRhdGEpKTsKKwkJO30KKyAgICBicmVhazsKKworICBjYXNlIDIyOgorI2xpbmUgMjAwICJkdGMtcGFyc2VyLnkiCisgICAgewogCQkJKHl5dmFsLmRhdGEpID0gZGF0YV9hZGRfbWFya2VyKCh5eXZzcFsoMSkgLSAoMildLmRhdGEpLCBSRUZfUEFUSCwgKHl5dnNwWygyKSAtICgyKV0ubGFiZWxyZWYpKTsKIAkJO30KICAgICBicmVhazsKIAogICBjYXNlIDIzOgotI2xpbmUgMjAwICJkdGMtcGFyc2VyLnkiCisjbGluZSAyMDQgImR0Yy1wYXJzZXIueSIKKyAgICB7CisJCQlzdHJ1Y3Qgc2VhcmNoX3BhdGggcGF0aCA9IHsgc3JjcG9zX2ZpbGUtPmRpciwgTlVMTCwgTlVMTCB9OworCQkJc3RydWN0IGR0Y19maWxlICpmaWxlID0gZHRjX29wZW5fZmlsZSgoeXl2c3BbKDQpIC0gKDkpXS5kYXRhKS52YWwsICZwYXRoKTsKKwkJCXN0cnVjdCBkYXRhIGQgPSBlbXB0eV9kYXRhOworCisJCQlpZiAoKHl5dnNwWyg2KSAtICg5KV0uYWRkcikgIT0gMCkKKwkJCQlpZiAoZnNlZWsoZmlsZS0+ZmlsZSwgKHl5dnNwWyg2KSAtICg5KV0uYWRkciksIFNFRUtfU0VUKSAhPSAwKQorCQkJCQl5eWVycm9yZigiQ291bGRuJ3Qgc2VlayB0byBvZmZzZXQgJWxsdSBpbiBcIiVzXCI6ICVzIiwKKwkJCQkJCSAodW5zaWduZWQgbG9uZyBsb25nKSh5eXZzcFsoNikgLSAoOSldLmFkZHIpLAorCQkJCQkJICh5eXZzcFsoNCkgLSAoOSldLmRhdGEpLnZhbCwgc3RyZXJyb3IoZXJybm8pKTsKKworCQkJZCA9IGRhdGFfY29weV9maWxlKGZpbGUtPmZpbGUsICh5eXZzcFsoOCkgLSAoOSldLmFkZHIpKTsKKworCQkJKHl5dmFsLmRhdGEpID0gZGF0YV9tZXJnZSgoeXl2c3BbKDEpIC0gKDkpXS5kYXRhKSwgZCk7CisJCQlkdGNfY2xvc2VfZmlsZShmaWxlKTsKKwkJO30KKyAgICBicmVhazsKKworICBjYXNlIDI0OgorI2xpbmUgMjIxICJkdGMtcGFyc2VyLnkiCisgICAgeworCQkJc3RydWN0IHNlYXJjaF9wYXRoIHBhdGggPSB7IHNyY3Bvc19maWxlLT5kaXIsIE5VTEwsIE5VTEwgfTsKKwkJCXN0cnVjdCBkdGNfZmlsZSAqZmlsZSA9IGR0Y19vcGVuX2ZpbGUoKHl5dnNwWyg0KSAtICg1KV0uZGF0YSkudmFsLCAmcGF0aCk7CisJCQlzdHJ1Y3QgZGF0YSBkID0gZW1wdHlfZGF0YTsKKworCQkJZCA9IGRhdGFfY29weV9maWxlKGZpbGUtPmZpbGUsIC0xKTsKKworCQkJKHl5dmFsLmRhdGEpID0gZGF0YV9tZXJnZSgoeXl2c3BbKDEpIC0gKDUpXS5kYXRhKSwgZCk7CisJCQlkdGNfY2xvc2VfZmlsZShmaWxlKTsKKwkJO30KKyAgICBicmVhazsKKworICBjYXNlIDI1OgorI2xpbmUgMjMyICJkdGMtcGFyc2VyLnkiCiAgICAgewogCQkJKHl5dmFsLmRhdGEpID0gZGF0YV9hZGRfbWFya2VyKCh5eXZzcFsoMSkgLSAoMildLmRhdGEpLCBMQUJFTCwgKHl5dnNwWygyKSAtICgyKV0ubGFiZWxyZWYpKTsKIAkJO30KICAgICBicmVhazsKIAotICBjYXNlIDI0OgotI2xpbmUgMjA3ICJkdGMtcGFyc2VyLnkiCisgIGNhc2UgMjY6CisjbGluZSAyMzkgImR0Yy1wYXJzZXIueSIKICAgICB7CiAJCQkoeXl2YWwuZGF0YSkgPSBlbXB0eV9kYXRhOwogCQk7fQogICAgIGJyZWFrOwogCi0gIGNhc2UgMjU6Ci0jbGluZSAyMTEgImR0Yy1wYXJzZXIueSIKKyAgY2FzZSAyNzoKKyNsaW5lIDI0MyAiZHRjLXBhcnNlci55IgogICAgIHsKIAkJCSh5eXZhbC5kYXRhKSA9ICh5eXZzcFsoMSkgLSAoMildLmRhdGEpOwogCQk7fQogICAgIGJyZWFrOwogCi0gIGNhc2UgMjY6Ci0jbGluZSAyMTUgImR0Yy1wYXJzZXIueSIKKyAgY2FzZSAyODoKKyNsaW5lIDI0NyAiZHRjLXBhcnNlci55IgogICAgIHsKIAkJCSh5eXZhbC5kYXRhKSA9IGRhdGFfYWRkX21hcmtlcigoeXl2c3BbKDEpIC0gKDIpXS5kYXRhKSwgTEFCRUwsICh5eXZzcFsoMikgLSAoMildLmxhYmVscmVmKSk7CiAJCTt9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAyNzoKLSNsaW5lIDIyMiAiZHRjLXBhcnNlci55IgorICBjYXNlIDI5OgorI2xpbmUgMjU0ICJkdGMtcGFyc2VyLnkiCiAgICAgewogCQkJKHl5dmFsLmRhdGEpID0gZW1wdHlfZGF0YTsKIAkJO30KICAgICBicmVhazsKIAotICBjYXNlIDI4OgotI2xpbmUgMjI2ICJkdGMtcGFyc2VyLnkiCisgIGNhc2UgMzA6CisjbGluZSAyNTggImR0Yy1wYXJzZXIueSIKICAgICB7CiAJCQkoeXl2YWwuZGF0YSkgPSBkYXRhX2FwcGVuZF9jZWxsKCh5eXZzcFsoMSkgLSAoMildLmRhdGEpLCAoeXl2c3BbKDIpIC0gKDIpXS5jZWxsKSk7CiAJCTt9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAyOToKLSNsaW5lIDIzMCAiZHRjLXBhcnNlci55IgorICBjYXNlIDMxOgorI2xpbmUgMjYyICJkdGMtcGFyc2VyLnkiCiAgICAgewogCQkJKHl5dmFsLmRhdGEpID0gZGF0YV9hcHBlbmRfY2VsbChkYXRhX2FkZF9tYXJrZXIoKHl5dnNwWygxKSAtICgyKV0uZGF0YSksIFJFRl9QSEFORExFLAogCQkJCQkJCSAgICAgICh5eXZzcFsoMikgLSAoMildLmxhYmVscmVmKSksIC0xKTsKIAkJO30KICAgICBicmVhazsKIAotICBjYXNlIDMwOgotI2xpbmUgMjM1ICJkdGMtcGFyc2VyLnkiCisgIGNhc2UgMzI6CisjbGluZSAyNjcgImR0Yy1wYXJzZXIueSIKICAgICB7CiAJCQkoeXl2YWwuZGF0YSkgPSBkYXRhX2FkZF9tYXJrZXIoKHl5dnNwWygxKSAtICgyKV0uZGF0YSksIExBQkVMLCAoeXl2c3BbKDIpIC0gKDIpXS5sYWJlbHJlZikpOwogCQk7fQogICAgIGJyZWFrOwogCi0gIGNhc2UgMzE6Ci0jbGluZSAyNDIgImR0Yy1wYXJzZXIueSIKKyAgY2FzZSAzMzoKKyNsaW5lIDI3NCAiZHRjLXBhcnNlci55IgogICAgIHsKIAkJCSh5eXZhbC5jYmFzZSkgPSAxNjsKIAkJO30KICAgICBicmVhazsKIAotICBjYXNlIDMzOgotI2xpbmUgMjUwICJkdGMtcGFyc2VyLnkiCisgIGNhc2UgMzU6CisjbGluZSAyODIgImR0Yy1wYXJzZXIueSIKICAgICB7CiAJCQkoeXl2YWwuY2VsbCkgPSBldmFsX2xpdGVyYWwoKHl5dnNwWygxKSAtICgxKV0ubGl0ZXJhbCksIDAsIDMyKTsKIAkJO30KICAgICBicmVhazsKIAotICBjYXNlIDM0OgotI2xpbmUgMjU0ICJkdGMtcGFyc2VyLnkiCisgIGNhc2UgMzY6CisjbGluZSAyODYgImR0Yy1wYXJzZXIueSIKICAgICB7CiAJCQkoeXl2YWwuY2VsbCkgPSBldmFsX2xpdGVyYWwoKHl5dnNwWygyKSAtICgyKV0ubGl0ZXJhbCksICh5eXZzcFsoMSkgLSAoMildLmNiYXNlKSwgMzIpOwogCQk7fQogICAgIGJyZWFrOwogCi0gIGNhc2UgMzU6Ci0jbGluZSAyNjEgImR0Yy1wYXJzZXIueSIKKyAgY2FzZSAzNzoKKyNsaW5lIDI5MyAiZHRjLXBhcnNlci55IgogICAgIHsKIAkJCSh5eXZhbC5kYXRhKSA9IGVtcHR5X2RhdGE7CiAJCTt9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAzNjoKLSNsaW5lIDI2NSAiZHRjLXBhcnNlci55IgorICBjYXNlIDM4OgorI2xpbmUgMjk3ICJkdGMtcGFyc2VyLnkiCiAgICAgewogCQkJKHl5dmFsLmRhdGEpID0gZGF0YV9hcHBlbmRfYnl0ZSgoeXl2c3BbKDEpIC0gKDIpXS5kYXRhKSwgKHl5dnNwWygyKSAtICgyKV0uYnl0ZSkpOwogCQk7fQogICAgIGJyZWFrOwogCi0gIGNhc2UgMzc6Ci0jbGluZSAyNjkgImR0Yy1wYXJzZXIueSIKKyAgY2FzZSAzOToKKyNsaW5lIDMwMSAiZHRjLXBhcnNlci55IgogICAgIHsKIAkJCSh5eXZhbC5kYXRhKSA9IGRhdGFfYWRkX21hcmtlcigoeXl2c3BbKDEpIC0gKDIpXS5kYXRhKSwgTEFCRUwsICh5eXZzcFsoMikgLSAoMildLmxhYmVscmVmKSk7CiAJCTt9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAzODoKLSNsaW5lIDI3NiAiZHRjLXBhcnNlci55IgorICBjYXNlIDQwOgorI2xpbmUgMzA4ICJkdGMtcGFyc2VyLnkiCiAgICAgewogCQkJKHl5dmFsLm5vZGVsaXN0KSA9IE5VTEw7CiAJCTt9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAzOToKLSNsaW5lIDI4MCAiZHRjLXBhcnNlci55IgorICBjYXNlIDQxOgorI2xpbmUgMzEyICJkdGMtcGFyc2VyLnkiCiAgICAgewogCQkJKHl5dmFsLm5vZGVsaXN0KSA9IGNoYWluX25vZGUoKHl5dnNwWygxKSAtICgyKV0ubm9kZSksICh5eXZzcFsoMikgLSAoMildLm5vZGVsaXN0KSk7CiAJCTt9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSA0MDoKLSNsaW5lIDI4NCAiZHRjLXBhcnNlci55IgorICBjYXNlIDQyOgorI2xpbmUgMzE2ICJkdGMtcGFyc2VyLnkiCiAgICAgewotCQkJeXllcnJvcigic3ludGF4IGVycm9yOiBwcm9wZXJ0aWVzIG11c3QgcHJlY2VkZSBzdWJub2Rlc1xuIik7CisJCQl5eWVycm9yKCJzeW50YXggZXJyb3I6IHByb3BlcnRpZXMgbXVzdCBwcmVjZWRlIHN1Ym5vZGVzIik7CiAJCQlZWUVSUk9SOwogCQk7fQogICAgIGJyZWFrOwogCi0gIGNhc2UgNDE6Ci0jbGluZSAyOTIgImR0Yy1wYXJzZXIueSIKKyAgY2FzZSA0MzoKKyNsaW5lIDMyNCAiZHRjLXBhcnNlci55IgogICAgIHsKIAkJCSh5eXZhbC5ub2RlKSA9IG5hbWVfbm9kZSgoeXl2c3BbKDMpIC0gKDMpXS5ub2RlKSwgKHl5dnNwWygyKSAtICgzKV0ucHJvcG5vZGVuYW1lKSwgKHl5dnNwWygxKSAtICgzKV0ubGFiZWxyZWYpKTsKIAkJO30KICAgICBicmVhazsKIAotICBjYXNlIDQyOgotI2xpbmUgMjk5ICJkdGMtcGFyc2VyLnkiCisgIGNhc2UgNDQ6CisjbGluZSAzMzEgImR0Yy1wYXJzZXIueSIKICAgICB7CiAJCQkoeXl2YWwubGFiZWxyZWYpID0gTlVMTDsKIAkJO30KICAgICBicmVhazsKIAotICBjYXNlIDQzOgotI2xpbmUgMzAzICJkdGMtcGFyc2VyLnkiCisgIGNhc2UgNDU6CisjbGluZSAzMzUgImR0Yy1wYXJzZXIueSIKICAgICB7CiAJCQkoeXl2YWwubGFiZWxyZWYpID0gKHl5dnNwWygxKSAtICgxKV0ubGFiZWxyZWYpOwogCQk7fQpAQCAtMTczMCw3ICsxNzc2LDcgQEAKIAogCiAvKiBMaW5lIDEyNjcgb2YgeWFjYy5jLiAgKi8KLSNsaW5lIDE3MzQgImR0Yy1wYXJzZXIudGFiLmMiCisjbGluZSAxNzgwICJkdGMtcGFyc2VyLnRhYi5jIgogICAgICAgZGVmYXVsdDogYnJlYWs7CiAgICAgfQogICBZWV9TWU1CT0xfUFJJTlQgKCItPiAkJCA9IiwgeXlyMVt5eW5dLCAmeXl2YWwsICZ5eWxvYyk7CkBAIC0xOTUwLDIxICsxOTk2LDMyIEBACiB9CiAKIAotI2xpbmUgMzA4ICJkdGMtcGFyc2VyLnkiCisjbGluZSAzNDAgImR0Yy1wYXJzZXIueSIKIAogCi12b2lkIHl5ZXJyb3IgKGNoYXIgY29uc3QgKnMpCit2b2lkIHl5ZXJyb3JmKGNoYXIgY29uc3QgKnMsIC4uLikKIHsKLQljb25zdCBjaGFyICpmbmFtZSA9IHNyY3Bvc19maWxlbmFtZV9mb3JfbnVtKHl5bGxvYy5maWxlbnVtKTsKKwljb25zdCBjaGFyICpmbmFtZSA9IHNyY3Bvc19maWxlID8gc3JjcG9zX2ZpbGUtPm5hbWUgOiAiPG5vLWZpbGU+IjsKKwl2YV9saXN0IHZhOworCXZhX3N0YXJ0KHZhLCBzKTsKIAogCWlmIChzdHJjbXAoZm5hbWUsICItIikgPT0gMCkKIAkJZm5hbWUgPSAic3RkaW4iOwogCi0JZnByaW50ZihzdGRlcnIsICIlczolZCAlc1xuIiwKLQkJZm5hbWUsIHl5bGxvYy5maXJzdF9saW5lLCBzKTsKKwlmcHJpbnRmKHN0ZGVyciwgIiVzOiVkICIsIGZuYW1lLCB5eWxsb2MuZmlyc3RfbGluZSk7CisJdmZwcmludGYoc3RkZXJyLCBzLCB2YSk7CisJZnByaW50ZihzdGRlcnIsICJcbiIpOworCisJdHJlZXNvdXJjZV9lcnJvciA9IDE7CisJdmFfZW5kKHZhKTsKIH0KIAotdW5zaWduZWQgbG9uZyBsb25nIGV2YWxfbGl0ZXJhbChjb25zdCBjaGFyICpzLCBpbnQgYmFzZSwgaW50IGJpdHMpCit2b2lkIHl5ZXJyb3IgKGNoYXIgY29uc3QgKnMpCit7CisJeXllcnJvcmYoIiVzIiwgcyk7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGxvbmcgZXZhbF9saXRlcmFsKGNvbnN0IGNoYXIgKnMsIGludCBiYXNlLCBpbnQgYml0cykKIHsKIAl1bnNpZ25lZCBsb25nIGxvbmcgdmFsOwogCWNoYXIgKmU7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdGMtc3JjL2R0Yy1wYXJzZXIudGFiLmhfc2hpcHBlZCBiL2FyY2gvcG93ZXJwYy9ib290L2R0Yy1zcmMvZHRjLXBhcnNlci50YWIuaF9zaGlwcGVkCmluZGV4IDQ3MDdiMDIuLmJhOTkxMDAgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2R0Yy1zcmMvZHRjLXBhcnNlci50YWIuaF9zaGlwcGVkCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0Yy1zcmMvZHRjLXBhcnNlci50YWIuaF9zaGlwcGVkCkBAIC00OCw3ICs0OCw4IEBACiAgICAgIERUX0JZVEUgPSAyNjQsCiAgICAgIERUX1NUUklORyA9IDI2NSwKICAgICAgRFRfTEFCRUwgPSAyNjYsCi0gICAgIERUX1JFRiA9IDI2NworICAgICBEVF9SRUYgPSAyNjcsCisgICAgIERUX0lOQ0JJTiA9IDI2OAogICAgfTsKICNlbmRpZgogLyogVG9rZW5zLiAgKi8KQEAgLTYyLDIyICs2MywyMyBAQAogI2RlZmluZSBEVF9TVFJJTkcgMjY1CiAjZGVmaW5lIERUX0xBQkVMIDI2NgogI2RlZmluZSBEVF9SRUYgMjY3CisjZGVmaW5lIERUX0lOQ0JJTiAyNjgKIAogCiAKIAogI2lmICEgZGVmaW5lZCBZWVNUWVBFICYmICEgZGVmaW5lZCBZWVNUWVBFX0lTX0RFQ0xBUkVECiB0eXBlZGVmIHVuaW9uIFlZU1RZUEUKLSNsaW5lIDM0ICJkdGMtcGFyc2VyLnkiCisjbGluZSAzNyAiZHRjLXBhcnNlci55IgogewogCWNoYXIgKnByb3Bub2RlbmFtZTsKIAljaGFyICpsaXRlcmFsOwogCWNoYXIgKmxhYmVscmVmOwogCXVuc2lnbmVkIGludCBjYmFzZTsKLQl1OCBieXRlOworCXVpbnQ4X3QgYnl0ZTsKIAlzdHJ1Y3QgZGF0YSBkYXRhOwogCi0JdTY0IGFkZHI7CisJdWludDY0X3QgYWRkcjsKIAljZWxsX3QgY2VsbDsKIAlzdHJ1Y3QgcHJvcGVydHkgKnByb3A7CiAJc3RydWN0IHByb3BlcnR5ICpwcm9wbGlzdDsKQEAgLTg2LDcgKzg4LDcgQEAKIAlzdHJ1Y3QgcmVzZXJ2ZV9pbmZvICpyZTsKIH0KIC8qIExpbmUgMTQ4OSBvZiB5YWNjLmMuICAqLwotI2xpbmUgOTAgImR0Yy1wYXJzZXIudGFiLmgiCisjbGluZSA5MiAiZHRjLXBhcnNlci50YWIuaCIKIAlZWVNUWVBFOwogIyBkZWZpbmUgeXlzdHlwZSBZWVNUWVBFIC8qIG9ic29sZXNjZW50OyB3aWxsIGJlIHdpdGhkcmF3biAqLwogIyBkZWZpbmUgWVlTVFlQRV9JU19ERUNMQVJFRCAxCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdGMtc3JjL2R0Yy1wYXJzZXIueSBiL2FyY2gvcG93ZXJwYy9ib290L2R0Yy1zcmMvZHRjLXBhcnNlci55CmluZGV4IDAwMmVhN2YuLmIyYWI1NjIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2R0Yy1zcmMvZHRjLXBhcnNlci55CisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0Yy1zcmMvZHRjLXBhcnNlci55CkBAIC0yMSwxNCArMjEsMTcgQEAKICVsb2NhdGlvbnMKIAogJXsKKyNpbmNsdWRlIDxzdGRpby5oPgorCiAjaW5jbHVkZSAiZHRjLmgiCiAjaW5jbHVkZSAic3JjcG9zLmgiCiAKLWludCB5eWxleCh2b2lkKTsKLXVuc2lnbmVkIGxvbmcgbG9uZyBldmFsX2xpdGVyYWwoY29uc3QgY2hhciAqcywgaW50IGJhc2UsIGludCBiaXRzKTsKK2V4dGVybiBpbnQgeXlsZXgodm9pZCk7CiAKIGV4dGVybiBzdHJ1Y3QgYm9vdF9pbmZvICp0aGVfYm9vdF9pbmZvOworZXh0ZXJuIGludCB0cmVlc291cmNlX2Vycm9yOwogCitzdGF0aWMgdW5zaWduZWQgbG9uZyBsb25nIGV2YWxfbGl0ZXJhbChjb25zdCBjaGFyICpzLCBpbnQgYmFzZSwgaW50IGJpdHMpOwogJX0KIAogJXVuaW9uIHsKQEAgLTM2LDEwICszOSwxMCBAQAogCWNoYXIgKmxpdGVyYWw7CiAJY2hhciAqbGFiZWxyZWY7CiAJdW5zaWduZWQgaW50IGNiYXNlOwotCXU4IGJ5dGU7CisJdWludDhfdCBieXRlOwogCXN0cnVjdCBkYXRhIGRhdGE7CiAKLQl1NjQgYWRkcjsKKwl1aW50NjRfdCBhZGRyOwogCWNlbGxfdCBjZWxsOwogCXN0cnVjdCBwcm9wZXJ0eSAqcHJvcDsKIAlzdHJ1Y3QgcHJvcGVydHkgKnByb3BsaXN0OwpAQCAtNTgsNiArNjEsNyBAQAogJXRva2VuIDxkYXRhPiBEVF9TVFJJTkcKICV0b2tlbiA8bGFiZWxyZWY+IERUX0xBQkVMCiAldG9rZW4gPGxhYmVscmVmPiBEVF9SRUYKKyV0b2tlbiBEVF9JTkNCSU4KIAogJXR5cGUgPGRhdGE+IHByb3BkYXRhCiAldHlwZSA8ZGF0YT4gcHJvcGRhdGFwcmVmaXgKQEAgLTg0LDExICs4OCwxMSBAQAogc291cmNlZmlsZToKIAkgIERUX1YxICc7JyBtZW1yZXNlcnZlcyBkZXZpY2V0cmVlCiAJCXsKLQkJCXRoZV9ib290X2luZm8gPSBidWlsZF9ib290X2luZm8oJDMsICQ0KTsKKwkJCXRoZV9ib290X2luZm8gPSBidWlsZF9ib290X2luZm8oJDMsICQ0LCAwKTsKIAkJfQogCXwgdjBfbWVtcmVzZXJ2ZXMgZGV2aWNldHJlZQogCQl7Ci0JCQl0aGVfYm9vdF9pbmZvID0gYnVpbGRfYm9vdF9pbmZvKCQxLCAkMik7CisJCQl0aGVfYm9vdF9pbmZvID0gYnVpbGRfYm9vdF9pbmZvKCQxLCAkMiwgMCk7CiAJCX0KIAk7CiAKQEAgLTE5Niw2ICsyMDAsMzQgQEAKIAkJewogCQkJJCQgPSBkYXRhX2FkZF9tYXJrZXIoJDEsIFJFRl9QQVRILCAkMik7CiAJCX0KKwl8IHByb3BkYXRhcHJlZml4IERUX0lOQ0JJTiAnKCcgRFRfU1RSSU5HICcsJyBhZGRyICcsJyBhZGRyICcpJworCQl7CisJCQlzdHJ1Y3Qgc2VhcmNoX3BhdGggcGF0aCA9IHsgc3JjcG9zX2ZpbGUtPmRpciwgTlVMTCwgTlVMTCB9OworCQkJc3RydWN0IGR0Y19maWxlICpmaWxlID0gZHRjX29wZW5fZmlsZSgkNC52YWwsICZwYXRoKTsKKwkJCXN0cnVjdCBkYXRhIGQgPSBlbXB0eV9kYXRhOworCisJCQlpZiAoJDYgIT0gMCkKKwkJCQlpZiAoZnNlZWsoZmlsZS0+ZmlsZSwgJDYsIFNFRUtfU0VUKSAhPSAwKQorCQkJCQl5eWVycm9yZigiQ291bGRuJ3Qgc2VlayB0byBvZmZzZXQgJWxsdSBpbiBcIiVzXCI6ICVzIiwKKwkJCQkJCSAodW5zaWduZWQgbG9uZyBsb25nKSQ2LAorCQkJCQkJICQ0LnZhbCwgc3RyZXJyb3IoZXJybm8pKTsKKworCQkJZCA9IGRhdGFfY29weV9maWxlKGZpbGUtPmZpbGUsICQ4KTsKKworCQkJJCQgPSBkYXRhX21lcmdlKCQxLCBkKTsKKwkJCWR0Y19jbG9zZV9maWxlKGZpbGUpOworCQl9CisJfCBwcm9wZGF0YXByZWZpeCBEVF9JTkNCSU4gJygnIERUX1NUUklORyAnKScKKwkJeworCQkJc3RydWN0IHNlYXJjaF9wYXRoIHBhdGggPSB7IHNyY3Bvc19maWxlLT5kaXIsIE5VTEwsIE5VTEwgfTsKKwkJCXN0cnVjdCBkdGNfZmlsZSAqZmlsZSA9IGR0Y19vcGVuX2ZpbGUoJDQudmFsLCAmcGF0aCk7CisJCQlzdHJ1Y3QgZGF0YSBkID0gZW1wdHlfZGF0YTsKKworCQkJZCA9IGRhdGFfY29weV9maWxlKGZpbGUtPmZpbGUsIC0xKTsKKworCQkJJCQgPSBkYXRhX21lcmdlKCQxLCBkKTsKKwkJCWR0Y19jbG9zZV9maWxlKGZpbGUpOworCQl9CiAJfCBwcm9wZGF0YSBEVF9MQUJFTAogCQl7CiAJCQkkJCA9IGRhdGFfYWRkX21hcmtlcigkMSwgTEFCRUwsICQyKTsKQEAgLTI4Miw3ICszMTQsNyBAQAogCQl9CiAJfCBzdWJub2RlIHByb3BkZWYKIAkJewotCQkJeXllcnJvcigic3ludGF4IGVycm9yOiBwcm9wZXJ0aWVzIG11c3QgcHJlY2VkZSBzdWJub2Rlc1xuIik7CisJCQl5eWVycm9yKCJzeW50YXggZXJyb3I6IHByb3BlcnRpZXMgbXVzdCBwcmVjZWRlIHN1Ym5vZGVzIik7CiAJCQlZWUVSUk9SOwogCQl9CiAJOwpAQCAtMzA3LDE4ICszMzksMjkgQEAKIAogJSUKIAotdm9pZCB5eWVycm9yIChjaGFyIGNvbnN0ICpzKQordm9pZCB5eWVycm9yZihjaGFyIGNvbnN0ICpzLCAuLi4pCiB7Ci0JY29uc3QgY2hhciAqZm5hbWUgPSBzcmNwb3NfZmlsZW5hbWVfZm9yX251bSh5eWxsb2MuZmlsZW51bSk7CisJY29uc3QgY2hhciAqZm5hbWUgPSBzcmNwb3NfZmlsZSA/IHNyY3Bvc19maWxlLT5uYW1lIDogIjxuby1maWxlPiI7CisJdmFfbGlzdCB2YTsKKwl2YV9zdGFydCh2YSwgcyk7CiAKIAlpZiAoc3RyY21wKGZuYW1lLCAiLSIpID09IDApCiAJCWZuYW1lID0gInN0ZGluIjsKIAotCWZwcmludGYoc3RkZXJyLCAiJXM6JWQgJXNcbiIsCi0JCWZuYW1lLCB5eWxsb2MuZmlyc3RfbGluZSwgcyk7CisJZnByaW50ZihzdGRlcnIsICIlczolZCAiLCBmbmFtZSwgeXlsbG9jLmZpcnN0X2xpbmUpOworCXZmcHJpbnRmKHN0ZGVyciwgcywgdmEpOworCWZwcmludGYoc3RkZXJyLCAiXG4iKTsKKworCXRyZWVzb3VyY2VfZXJyb3IgPSAxOworCXZhX2VuZCh2YSk7CiB9CiAKLXVuc2lnbmVkIGxvbmcgbG9uZyBldmFsX2xpdGVyYWwoY29uc3QgY2hhciAqcywgaW50IGJhc2UsIGludCBiaXRzKQordm9pZCB5eWVycm9yIChjaGFyIGNvbnN0ICpzKQoreworCXl5ZXJyb3JmKCIlcyIsIHMpOworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBsb25nIGV2YWxfbGl0ZXJhbChjb25zdCBjaGFyICpzLCBpbnQgYmFzZSwgaW50IGJpdHMpCiB7CiAJdW5zaWduZWQgbG9uZyBsb25nIHZhbDsKIAljaGFyICplOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRjLXNyYy9kdGMuYyBiL2FyY2gvcG93ZXJwYy9ib290L2R0Yy1zcmMvZHRjLmMKaW5kZXggMDExMzFkNy4uZDhmZDQzYiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRjLXNyYy9kdGMuYworKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdGMtc3JjL2R0Yy5jCkBAIC01NSw3ICs1NSw3IEBACiAJcmV0dXJuIHN0cjsKIH0KIAotdm9pZCBmaWxsX2Z1bGxwYXRocyhzdHJ1Y3Qgbm9kZSAqdHJlZSwgY29uc3QgY2hhciAqcHJlZml4KQorc3RhdGljIHZvaWQgZmlsbF9mdWxscGF0aHMoc3RydWN0IG5vZGUgKnRyZWUsIGNvbnN0IGNoYXIgKnByZWZpeCkKIHsKIAlzdHJ1Y3Qgbm9kZSAqY2hpbGQ7CiAJY29uc3QgY2hhciAqdW5pdDsKQEAgLTEwNiw3ICsxMDYsNyBAQAogCWZwcmludGYoc3RkZXJyLCAiXHRcdEZvcmNlIC0gdHJ5IHRvIHByb2R1Y2Ugb3V0cHV0IGV2ZW4gaWYgdGhlIGlucHV0IHRyZWUgaGFzIGVycm9yc1xuIik7CiAJZnByaW50ZihzdGRlcnIsICJcdC12XG4iKTsKIAlmcHJpbnRmKHN0ZGVyciwgIlx0XHRQcmludCBEVEMgdmVyc2lvbiBhbmQgZXhpdFxuIik7Ci0JZXhpdCgyKTsKKwlleGl0KDMpOwogfQogCiBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQpAQCAtMTE4LDEwICsxMTgsOSBAQAogCWludCBmb3JjZSA9IDAsIGNoZWNrID0gMDsKIAljb25zdCBjaGFyICphcmc7CiAJaW50IG9wdDsKLQlGSUxFICppbmYgPSBOVUxMOwogCUZJTEUgKm91dGYgPSBOVUxMOwogCWludCBvdXR2ZXJzaW9uID0gREVGQVVMVF9GRFRfVkVSU0lPTjsKLQlpbnQgYm9vdF9jcHVpZF9waHlzID0gMHhmZWVkYmVlZjsKKwlsb25nIGxvbmcgY21kbGluZV9ib290X2NwdWlkID0gLTE7CiAKIAlxdWlldCAgICAgID0gMDsKIAlyZXNlcnZlbnVtID0gMDsKQEAgLTE2MSwxMSArMTYwLDExIEBACiAJCQlxdWlldCsrOwogCQkJYnJlYWs7CiAJCWNhc2UgJ2InOgotCQkJYm9vdF9jcHVpZF9waHlzID0gc3RydG9sKG9wdGFyZywgTlVMTCwgMCk7CisJCQljbWRsaW5lX2Jvb3RfY3B1aWQgPSBzdHJ0b2xsKG9wdGFyZywgTlVMTCwgMCk7CiAJCQlicmVhazsKIAkJY2FzZSAndic6Ci0JCSAgICBwcmludGYoIlZlcnNpb246ICVzXG4iLCBEVENfVkVSU0lPTik7Ci0JCSAgICBleGl0KDApOworCQkJcHJpbnRmKCJWZXJzaW9uOiAlc1xuIiwgRFRDX1ZFUlNJT04pOworCQkJZXhpdCgwKTsKIAkJY2FzZSAnaCc6CiAJCWRlZmF1bHQ6CiAJCQl1c2FnZSgpOwpAQCAtMTgwLDMxICsxNzksMjcgQEAKIAkJYXJnID0gYXJndltvcHRpbmRdOwogCiAJLyogbWluc2l6ZSBhbmQgcGFkc2l6ZSBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlICovCi0JaWYgKChtaW5zaXplKSAmJiAocGFkc2l6ZSkpIHsKKwlpZiAobWluc2l6ZSAmJiBwYWRzaXplKQogCQlkaWUoIkNhbid0IHNldCBib3RoIC1wIGFuZCAtU1xuIik7Ci0JfQogCiAJZnByaW50ZihzdGRlcnIsICJEVEM6ICVzLT4lcyAgb24gZmlsZSBcIiVzXCJcbiIsCiAJCWluZm9ybSwgb3V0Zm9ybSwgYXJnKTsKIAotCWlmIChzdHJlcShpbmZvcm0sICJkdHMiKSkgeworCWlmIChzdHJlcShpbmZvcm0sICJkdHMiKSkKIAkJYmkgPSBkdF9mcm9tX3NvdXJjZShhcmcpOwotCX0gZWxzZSBpZiAoc3RyZXEoaW5mb3JtLCAiZnMiKSkgeworCWVsc2UgaWYgKHN0cmVxKGluZm9ybSwgImZzIikpCiAJCWJpID0gZHRfZnJvbV9mcyhhcmcpOwotCX0gZWxzZSBpZihzdHJlcShpbmZvcm0sICJkdGIiKSkgewotCQlpbmYgPSBkdGNfb3Blbl9maWxlKGFyZyk7Ci0JCWJpID0gZHRfZnJvbV9ibG9iKGluZik7Ci0JfSBlbHNlIHsKKwllbHNlIGlmKHN0cmVxKGluZm9ybSwgImR0YiIpKQorCQliaSA9IGR0X2Zyb21fYmxvYihhcmcpOworCWVsc2UKIAkJZGllKCJVbmtub3duIGlucHV0IGZvcm1hdCBcIiVzXCJcbiIsIGluZm9ybSk7Ci0JfQogCi0JaWYgKGluZiAmJiAoaW5mICE9IHN0ZGluKSkKLQkJZmNsb3NlKGluZik7CisJaWYgKGNtZGxpbmVfYm9vdF9jcHVpZCAhPSAtMSkKKwkJYmktPmJvb3RfY3B1aWRfcGh5cyA9IGNtZGxpbmVfYm9vdF9jcHVpZDsKIAotCWlmICghIGJpIHx8ICEgYmktPmR0KQotCQlkaWUoIkNvdWxkbid0IHJlYWQgaW5wdXQgdHJlZVxuIik7CisJZmlsbF9mdWxscGF0aHMoYmktPmR0LCAiIik7CisJcHJvY2Vzc19jaGVja3MoZm9yY2UsIGJpKTsKIAotCXByb2Nlc3NfY2hlY2tzKGZvcmNlLCBiaSwgY2hlY2ssIG91dHZlcnNpb24sIGJvb3RfY3B1aWRfcGh5cyk7CiAKIAlpZiAoc3RyZXEob3V0bmFtZSwgIi0iKSkgewogCQlvdXRmID0gc3Rkb3V0OwpAQCAtMjE4LDkgKzIxMyw5IEBACiAJaWYgKHN0cmVxKG91dGZvcm0sICJkdHMiKSkgewogCQlkdF90b19zb3VyY2Uob3V0ZiwgYmkpOwogCX0gZWxzZSBpZiAoc3RyZXEob3V0Zm9ybSwgImR0YiIpKSB7Ci0JCWR0X3RvX2Jsb2Iob3V0ZiwgYmksIG91dHZlcnNpb24sIGJvb3RfY3B1aWRfcGh5cyk7CisJCWR0X3RvX2Jsb2Iob3V0ZiwgYmksIG91dHZlcnNpb24pOwogCX0gZWxzZSBpZiAoc3RyZXEob3V0Zm9ybSwgImFzbSIpKSB7Ci0JCWR0X3RvX2FzbShvdXRmLCBiaSwgb3V0dmVyc2lvbiwgYm9vdF9jcHVpZF9waHlzKTsKKwkJZHRfdG9fYXNtKG91dGYsIGJpLCBvdXR2ZXJzaW9uKTsKIAl9IGVsc2UgaWYgKHN0cmVxKG91dGZvcm0sICJudWxsIikpIHsKIAkJLyogZG8gbm90aGluZyAqLwogCX0gZWxzZSB7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdGMtc3JjL2R0Yy5oIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRjLXNyYy9kdGMuaAppbmRleCA2NTI4MTc3Li4wOGQ1NGM4IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC9kdGMtc3JjL2R0Yy5oCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0Yy1zcmMvZHRjLmgKQEAgLTMwLDEwICszMCw4IEBACiAjaW5jbHVkZSA8Y3R5cGUuaD4KICNpbmNsdWRlIDxlcnJuby5oPgogI2luY2x1ZGUgPHVuaXN0ZC5oPgotI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KLSNpbmNsdWRlIDxlbmRpYW4uaD4KLSNpbmNsdWRlIDxieXRlc3dhcC5oPgogCisjaW5jbHVkZSA8bGliZmR0X2Vudi5oPgogI2luY2x1ZGUgPGZkdC5oPgogCiAjZGVmaW5lIERFRkFVTFRfRkRUX1ZFUlNJT04JMTcKQEAgLTc1LDI1ICs3Myw4IEBACiAJcmV0dXJuIG5ldzsKIH0KIAotdHlwZWRlZiB1aW50OF90IHU4OwotdHlwZWRlZiB1aW50MTZfdCB1MTY7Ci10eXBlZGVmIHVpbnQzMl90IHUzMjsKLXR5cGVkZWYgdWludDY0X3QgdTY0OwotdHlwZWRlZiB1MzIgY2VsbF90OwordHlwZWRlZiB1aW50MzJfdCBjZWxsX3Q7CiAKLSNkZWZpbmUgY3B1X3RvX2JlMTYoeCkJaHRvbnMoeCkKLSNkZWZpbmUgYmUxNl90b19jcHUoeCkJbnRvaHMoeCkKLQotI2RlZmluZSBjcHVfdG9fYmUzMih4KQlodG9ubCh4KQotI2RlZmluZSBiZTMyX3RvX2NwdSh4KQludG9obCh4KQotCi0jaWYgX19CWVRFX09SREVSID09IF9fQklHX0VORElBTgotI2RlZmluZSBjcHVfdG9fYmU2NCh4KQkoeCkKLSNkZWZpbmUgYmU2NF90b19jcHUoeCkJKHgpCi0jZWxzZQotI2RlZmluZSBjcHVfdG9fYmU2NCh4KQlic3dhcF82NCh4KQotI2RlZmluZSBiZTY0X3RvX2NwdSh4KQlic3dhcF82NCh4KQotI2VuZGlmCiAKICNkZWZpbmUgc3RyZXEoYSwgYikJKHN0cmNtcCgoYSksIChiKSkgPT0gMCkKICNkZWZpbmUgc3RybmVxKGEsIGIsIG4pCShzdHJuY21wKChhKSwgKGIpLCAobikpID09IDApCkBAIC0xMTgsNyArOTksNiBAQAogc3RydWN0IGRhdGEgewogCWludCBsZW47CiAJY2hhciAqdmFsOwotCWludCBhc2l6ZTsKIAlzdHJ1Y3QgbWFya2VyICptYXJrZXJzOwogfTsKIApAQCAtMTQ1LDcgKzEyNSw3IEBACiBzdHJ1Y3QgZGF0YSBkYXRhX21lcmdlKHN0cnVjdCBkYXRhIGQxLCBzdHJ1Y3QgZGF0YSBkMik7CiBzdHJ1Y3QgZGF0YSBkYXRhX2FwcGVuZF9jZWxsKHN0cnVjdCBkYXRhIGQsIGNlbGxfdCB3b3JkKTsKIHN0cnVjdCBkYXRhIGRhdGFfYXBwZW5kX3JlKHN0cnVjdCBkYXRhIGQsIGNvbnN0IHN0cnVjdCBmZHRfcmVzZXJ2ZV9lbnRyeSAqcmUpOwotc3RydWN0IGRhdGEgZGF0YV9hcHBlbmRfYWRkcihzdHJ1Y3QgZGF0YSBkLCB1NjQgYWRkcik7CitzdHJ1Y3QgZGF0YSBkYXRhX2FwcGVuZF9hZGRyKHN0cnVjdCBkYXRhIGQsIHVpbnQ2NF90IGFkZHIpOwogc3RydWN0IGRhdGEgZGF0YV9hcHBlbmRfYnl0ZShzdHJ1Y3QgZGF0YSBkLCB1aW50OF90IGJ5dGUpOwogc3RydWN0IGRhdGEgZGF0YV9hcHBlbmRfemVyb2VzKHN0cnVjdCBkYXRhIGQsIGludCBsZW4pOwogc3RydWN0IGRhdGEgZGF0YV9hcHBlbmRfYWxpZ24oc3RydWN0IGRhdGEgZCwgaW50IGFsaWduKTsKQEAgLTIyMyw3ICsyMDMsNyBAQAogCWNoYXIgKmxhYmVsOwogfTsKIAotc3RydWN0IHJlc2VydmVfaW5mbyAqYnVpbGRfcmVzZXJ2ZV9lbnRyeSh1NjQgc3RhcnQsIHU2NCBsZW4sIGNoYXIgKmxhYmVsKTsKK3N0cnVjdCByZXNlcnZlX2luZm8gKmJ1aWxkX3Jlc2VydmVfZW50cnkodWludDY0X3Qgc3RhcnQsIHVpbnQ2NF90IGxlbiwgY2hhciAqbGFiZWwpOwogc3RydWN0IHJlc2VydmVfaW5mbyAqY2hhaW5fcmVzZXJ2ZV9lbnRyeShzdHJ1Y3QgcmVzZXJ2ZV9pbmZvICpmaXJzdCwKIAkJCQkJIHN0cnVjdCByZXNlcnZlX2luZm8gKmxpc3QpOwogc3RydWN0IHJlc2VydmVfaW5mbyAqYWRkX3Jlc2VydmVfZW50cnkoc3RydWN0IHJlc2VydmVfaW5mbyAqbGlzdCwKQEAgLTIzMywyNCArMjEzLDIyIEBACiBzdHJ1Y3QgYm9vdF9pbmZvIHsKIAlzdHJ1Y3QgcmVzZXJ2ZV9pbmZvICpyZXNlcnZlbGlzdDsKIAlzdHJ1Y3Qgbm9kZSAqZHQ7CQkvKiB0aGUgZGV2aWNlIHRyZWUgKi8KKwl1aW50MzJfdCBib290X2NwdWlkX3BoeXM7CiB9OwogCiBzdHJ1Y3QgYm9vdF9pbmZvICpidWlsZF9ib290X2luZm8oc3RydWN0IHJlc2VydmVfaW5mbyAqcmVzZXJ2ZWxpc3QsCi0JCQkJICBzdHJ1Y3Qgbm9kZSAqdHJlZSk7CisJCQkJICBzdHJ1Y3Qgbm9kZSAqdHJlZSwgdWludDMyX3QgYm9vdF9jcHVpZF9waHlzKTsKIAogLyogQ2hlY2tzICovCiAKLXZvaWQgcHJvY2Vzc19jaGVja3MoaW50IGZvcmNlLCBzdHJ1Y3QgYm9vdF9pbmZvICpiaSwKLQkJICAgIGludCBjaGVja2ZsYWcsIGludCBvdXR2ZXJzaW9uLCBpbnQgYm9vdF9jcHVpZF9waHlzKTsKK3ZvaWQgcHJvY2Vzc19jaGVja3MoaW50IGZvcmNlLCBzdHJ1Y3QgYm9vdF9pbmZvICpiaSk7CiAKIC8qIEZsYXR0ZW5lZCB0cmVlcyAqLwogCi12b2lkIGR0X3RvX2Jsb2IoRklMRSAqZiwgc3RydWN0IGJvb3RfaW5mbyAqYmksIGludCB2ZXJzaW9uLAotCQlpbnQgYm9vdF9jcHVpZF9waHlzKTsKLXZvaWQgZHRfdG9fYXNtKEZJTEUgKmYsIHN0cnVjdCBib290X2luZm8gKmJpLCBpbnQgdmVyc2lvbiwKLQkgICAgICAgaW50IGJvb3RfY3B1aWRfcGh5cyk7Cit2b2lkIGR0X3RvX2Jsb2IoRklMRSAqZiwgc3RydWN0IGJvb3RfaW5mbyAqYmksIGludCB2ZXJzaW9uKTsKK3ZvaWQgZHRfdG9fYXNtKEZJTEUgKmYsIHN0cnVjdCBib290X2luZm8gKmJpLCBpbnQgdmVyc2lvbik7CiAKLXN0cnVjdCBib290X2luZm8gKmR0X2Zyb21fYmxvYihGSUxFICpmKTsKK3N0cnVjdCBib290X2luZm8gKmR0X2Zyb21fYmxvYihjb25zdCBjaGFyICpmbmFtZSk7CiAKIC8qIFRyZWUgc291cmNlICovCiAKQEAgLTI2NCw2ICsyNDIsNSBAQAogLyogbWlzYyAqLwogCiBjaGFyICpqb2luX3BhdGgoY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqbmFtZSk7Ci12b2lkIGZpbGxfZnVsbHBhdGhzKHN0cnVjdCBub2RlICp0cmVlLCBjb25zdCBjaGFyICpwcmVmaXgpOwogCiAjZW5kaWYgLyogX0RUQ19IICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdGMtc3JjL2ZsYXR0cmVlLmMgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdGMtc3JjL2ZsYXR0cmVlLmMKaW5kZXggYTdjZmI4NC4uNzZhY2QyOCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRjLXNyYy9mbGF0dHJlZS5jCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0Yy1zcmMvZmxhdHRyZWUuYwpAQCAtMTksNiArMTksNyBAQAogICovCiAKICNpbmNsdWRlICJkdGMuaCIKKyNpbmNsdWRlICJzcmNwb3MuaCIKIAogI2RlZmluZSBGVEZfRlVMTFBBVEgJMHgxCiAjZGVmaW5lIEZURl9WQVJBTElHTgkweDIKQEAgLTE2MiwyOCArMTYzLDE4IEBACiB7CiAJRklMRSAqZiA9IGU7CiAJaW50IG9mZiA9IDA7Ci0Jc3RydWN0IG1hcmtlciAqbTsKKwlzdHJ1Y3QgbWFya2VyICptID0gZC5tYXJrZXJzOwogCi0JbSA9IGQubWFya2VyczsKLQl3aGlsZSAobSkgewotCQlpZiAobS0+dHlwZSA9PSBMQUJFTCkKLQkJCWVtaXRfb2Zmc2V0X2xhYmVsKGYsIG0tPnJlZiwgbS0+b2Zmc2V0KTsKLQkJbSA9IG0tPm5leHQ7Ci0JfQorCWZvcl9lYWNoX21hcmtlcl9vZl90eXBlKG0sIExBQkVMKQorCQllbWl0X29mZnNldF9sYWJlbChmLCBtLT5yZWYsIG0tPm9mZnNldCk7CiAKLQl3aGlsZSAoKGQubGVuIC0gb2ZmKSA+PSBzaXplb2YodTMyKSkgeworCXdoaWxlICgoZC5sZW4gLSBvZmYpID49IHNpemVvZih1aW50MzJfdCkpIHsKIAkJZnByaW50ZihmLCAiXHQubG9uZ1x0MHgleFxuIiwKLQkJCWJlMzJfdG9fY3B1KCooKHUzMiAqKShkLnZhbCtvZmYpKSkpOwotCQlvZmYgKz0gc2l6ZW9mKHUzMik7CisJCQlmZHQzMl90b19jcHUoKigodWludDMyX3QgKikoZC52YWwrb2ZmKSkpKTsKKwkJb2ZmICs9IHNpemVvZih1aW50MzJfdCk7CiAJfQogCi0JaWYgKChkLmxlbiAtIG9mZikgPj0gc2l6ZW9mKHUxNikpIHsKLQkJZnByaW50ZihmLCAiXHQuc2hvcnRcdDB4JWh4XG4iLAotCQkJYmUxNl90b19jcHUoKigodTE2ICopKGQudmFsK29mZikpKSk7Ci0JCW9mZiArPSBzaXplb2YodTE2KTsKLQl9Ci0KLQlpZiAoKGQubGVuIC0gb2ZmKSA+PSAxKSB7CisJd2hpbGUgKChkLmxlbiAtIG9mZikgPj0gMSkgewogCQlmcHJpbnRmKGYsICJcdC5ieXRlXHQweCVoaHhcbiIsIGQudmFsW29mZl0pOwogCQlvZmYgKz0gMTsKIAl9CkBAIC0zMzYsMjkgKzMyNywyOCBAQAogCiAJbWVtc2V0KGZkdCwgMHhmZiwgc2l6ZW9mKCpmZHQpKTsKIAotCWZkdC0+bWFnaWMgPSBjcHVfdG9fYmUzMihGRFRfTUFHSUMpOwotCWZkdC0+dmVyc2lvbiA9IGNwdV90b19iZTMyKHZpLT52ZXJzaW9uKTsKLQlmZHQtPmxhc3RfY29tcF92ZXJzaW9uID0gY3B1X3RvX2JlMzIodmktPmxhc3RfY29tcF92ZXJzaW9uKTsKKwlmZHQtPm1hZ2ljID0gY3B1X3RvX2ZkdDMyKEZEVF9NQUdJQyk7CisJZmR0LT52ZXJzaW9uID0gY3B1X3RvX2ZkdDMyKHZpLT52ZXJzaW9uKTsKKwlmZHQtPmxhc3RfY29tcF92ZXJzaW9uID0gY3B1X3RvX2ZkdDMyKHZpLT5sYXN0X2NvbXBfdmVyc2lvbik7CiAKIAkvKiBSZXNlcnZlIG1hcCBzaG91bGQgYmUgZG91Ymxld29yZCBhbGlnbmVkICovCiAJcmVzZXJ2ZV9vZmYgPSBBTElHTih2aS0+aGRyX3NpemUsIDgpOwogCi0JZmR0LT5vZmZfbWVtX3Jzdm1hcCA9IGNwdV90b19iZTMyKHJlc2VydmVfb2ZmKTsKLQlmZHQtPm9mZl9kdF9zdHJ1Y3QgPSBjcHVfdG9fYmUzMihyZXNlcnZlX29mZiArIHJlc2VydmVzaXplKTsKLQlmZHQtPm9mZl9kdF9zdHJpbmdzID0gY3B1X3RvX2JlMzIocmVzZXJ2ZV9vZmYgKyByZXNlcnZlc2l6ZQorCWZkdC0+b2ZmX21lbV9yc3ZtYXAgPSBjcHVfdG9fZmR0MzIocmVzZXJ2ZV9vZmYpOworCWZkdC0+b2ZmX2R0X3N0cnVjdCA9IGNwdV90b19mZHQzMihyZXNlcnZlX29mZiArIHJlc2VydmVzaXplKTsKKwlmZHQtPm9mZl9kdF9zdHJpbmdzID0gY3B1X3RvX2ZkdDMyKHJlc2VydmVfb2ZmICsgcmVzZXJ2ZXNpemUKIAkJCQkJICArIGR0c2l6ZSk7Ci0JZmR0LT50b3RhbHNpemUgPSBjcHVfdG9fYmUzMihyZXNlcnZlX29mZiArIHJlc2VydmVzaXplICsgZHRzaXplICsgc3Ryc2l6ZSk7CisJZmR0LT50b3RhbHNpemUgPSBjcHVfdG9fZmR0MzIocmVzZXJ2ZV9vZmYgKyByZXNlcnZlc2l6ZSArIGR0c2l6ZSArIHN0cnNpemUpOwogCiAJaWYgKHZpLT5mbGFncyAmIEZURl9CT09UQ1BVSUQpCi0JCWZkdC0+Ym9vdF9jcHVpZF9waHlzID0gY3B1X3RvX2JlMzIoYm9vdF9jcHVpZF9waHlzKTsKKwkJZmR0LT5ib290X2NwdWlkX3BoeXMgPSBjcHVfdG9fZmR0MzIoYm9vdF9jcHVpZF9waHlzKTsKIAlpZiAodmktPmZsYWdzICYgRlRGX1NUUlRBQlNJWkUpCi0JCWZkdC0+c2l6ZV9kdF9zdHJpbmdzID0gY3B1X3RvX2JlMzIoc3Ryc2l6ZSk7CisJCWZkdC0+c2l6ZV9kdF9zdHJpbmdzID0gY3B1X3RvX2ZkdDMyKHN0cnNpemUpOwogCWlmICh2aS0+ZmxhZ3MgJiBGVEZfU1RSVUNUU0laRSkKLQkJZmR0LT5zaXplX2R0X3N0cnVjdCA9IGNwdV90b19iZTMyKGR0c2l6ZSk7CisJCWZkdC0+c2l6ZV9kdF9zdHJ1Y3QgPSBjcHVfdG9fZmR0MzIoZHRzaXplKTsKIH0KIAotdm9pZCBkdF90b19ibG9iKEZJTEUgKmYsIHN0cnVjdCBib290X2luZm8gKmJpLCBpbnQgdmVyc2lvbiwKLQkJaW50IGJvb3RfY3B1aWRfcGh5cykKK3ZvaWQgZHRfdG9fYmxvYihGSUxFICpmLCBzdHJ1Y3QgYm9vdF9pbmZvICpiaSwgaW50IHZlcnNpb24pCiB7CiAJc3RydWN0IHZlcnNpb25faW5mbyAqdmkgPSBOVUxMOwogCWludCBpOwpAQCAtMzgzLDI2ICszNzMsMjYgQEAKIAogCS8qIE1ha2UgaGVhZGVyICovCiAJbWFrZV9mZHRfaGVhZGVyKCZmZHQsIHZpLCByZXNlcnZlYnVmLmxlbiwgZHRidWYubGVuLCBzdHJidWYubGVuLAotCQkJYm9vdF9jcHVpZF9waHlzKTsKKwkJCWJpLT5ib290X2NwdWlkX3BoeXMpOwogCiAJLyoKIAkgKiBJZiB0aGUgdXNlciBhc2tlZCBmb3IgbW9yZSBzcGFjZSB0aGFuIGlzIHVzZWQsIGFkanVzdCB0aGUgdG90YWxzaXplLgogCSAqLwogCWlmIChtaW5zaXplID4gMCkgewotCQlwYWRsZW4gPSBtaW5zaXplIC0gYmUzMl90b19jcHUoZmR0LnRvdGFsc2l6ZSk7CisJCXBhZGxlbiA9IG1pbnNpemUgLSBmZHQzMl90b19jcHUoZmR0LnRvdGFsc2l6ZSk7CiAJCWlmICgocGFkbGVuIDwgMCkgJiYgKHF1aWV0IDwgMSkpCiAJCQlmcHJpbnRmKHN0ZGVyciwKIAkJCQkiV2FybmluZzogYmxvYiBzaXplICVkID49IG1pbmltdW0gc2l6ZSAlZFxuIiwKLQkJCQliZTMyX3RvX2NwdShmZHQudG90YWxzaXplKSwgbWluc2l6ZSk7CisJCQkJZmR0MzJfdG9fY3B1KGZkdC50b3RhbHNpemUpLCBtaW5zaXplKTsKIAl9CiAKIAlpZiAocGFkc2l6ZSA+IDApCiAJCXBhZGxlbiA9IHBhZHNpemU7CiAKIAlpZiAocGFkbGVuID4gMCkgewotCQlpbnQgdHNpemUgPSBiZTMyX3RvX2NwdShmZHQudG90YWxzaXplKTsKKwkJaW50IHRzaXplID0gZmR0MzJfdG9fY3B1KGZkdC50b3RhbHNpemUpOwogCQl0c2l6ZSArPSBwYWRsZW47Ci0JCWZkdC50b3RhbHNpemUgPSBjcHVfdG9fYmUzMih0c2l6ZSk7CisJCWZkdC50b3RhbHNpemUgPSBjcHVfdG9fZmR0MzIodHNpemUpOwogCX0KIAogCS8qCkBAIC00MTAsNyArNDAwLDcgQEAKIAkgKiB0aGUgcmVzZXJ2ZSBidWZmZXIsIGFkZCB0aGUgcmVzZXJ2ZSBtYXAgdGVybWluYXRpbmcgemVyb2VzLAogCSAqIHRoZSBkZXZpY2UgdHJlZSBpdHNlbGYsIGFuZCBmaW5hbGx5IHRoZSBzdHJpbmdzLgogCSAqLwotCWJsb2IgPSBkYXRhX2FwcGVuZF9kYXRhKGJsb2IsICZmZHQsIHNpemVvZihmZHQpKTsKKwlibG9iID0gZGF0YV9hcHBlbmRfZGF0YShibG9iLCAmZmR0LCB2aS0+aGRyX3NpemUpOwogCWJsb2IgPSBkYXRhX2FwcGVuZF9hbGlnbihibG9iLCA4KTsKIAlibG9iID0gZGF0YV9tZXJnZShibG9iLCByZXNlcnZlYnVmKTsKIAlibG9iID0gZGF0YV9hcHBlbmRfemVyb2VzKGJsb2IsIHNpemVvZihzdHJ1Y3QgZmR0X3Jlc2VydmVfZW50cnkpKTsKQEAgLTQ0OSw3ICs0MzksNyBAQAogCX0KIH0KIAotdm9pZCBkdF90b19hc20oRklMRSAqZiwgc3RydWN0IGJvb3RfaW5mbyAqYmksIGludCB2ZXJzaW9uLCBpbnQgYm9vdF9jcHVpZF9waHlzKQordm9pZCBkdF90b19hc20oRklMRSAqZiwgc3RydWN0IGJvb3RfaW5mbyAqYmksIGludCB2ZXJzaW9uKQogewogCXN0cnVjdCB2ZXJzaW9uX2luZm8gKnZpID0gTlVMTDsKIAlpbnQgaTsKQEAgLTQ4OSw3ICs0NzksNyBAQAogCiAJaWYgKHZpLT5mbGFncyAmIEZURl9CT09UQ1BVSUQpCiAJCWZwcmludGYoZiwgIlx0LmxvbmdcdCVpXHRcdFx0XHRcdC8qIGJvb3RfY3B1aWRfcGh5cyAqL1xuIiwKLQkJCWJvb3RfY3B1aWRfcGh5cyk7CisJCQliaS0+Ym9vdF9jcHVpZF9waHlzKTsKIAogCWlmICh2aS0+ZmxhZ3MgJiBGVEZfU1RSVEFCU0laRSkKIAkJZnByaW50ZihmLCAiXHQubG9uZ1x0XyVzX3N0cmluZ3NfZW5kIC0gXyVzX3N0cmluZ3Nfc3RhcnRcdC8qIHNpemVfZHRfc3RyaW5ncyAqL1xuIiwKQEAgLTU3OSwxNSArNTY5LDE1IEBACiAJaW5iLT5wdHIgKz0gbGVuOwogfQogCi1zdGF0aWMgdTMyIGZsYXRfcmVhZF93b3JkKHN0cnVjdCBpbmJ1ZiAqaW5iKQorc3RhdGljIHVpbnQzMl90IGZsYXRfcmVhZF93b3JkKHN0cnVjdCBpbmJ1ZiAqaW5iKQogewotCXUzMiB2YWw7CisJdWludDMyX3QgdmFsOwogCiAJYXNzZXJ0KCgoaW5iLT5wdHIgLSBpbmItPmJhc2UpICUgc2l6ZW9mKHZhbCkpID09IDApOwogCiAJZmxhdF9yZWFkX2NodW5rKGluYiwgJnZhbCwgc2l6ZW9mKHZhbCkpOwogCi0JcmV0dXJuIGJlMzJfdG9fY3B1KHZhbCk7CisJcmV0dXJuIGZkdDMyX3RvX2NwdSh2YWwpOwogfQogCiBzdGF0aWMgdm9pZCBmbGF0X3JlYWxpZ24oc3RydWN0IGluYnVmICppbmIsIGludCBhbGlnbikKQEAgLTYxNSw3ICs2MDUsNyBAQAogCiAJaW5iLT5wdHIgKz0gbGVuOwogCi0JZmxhdF9yZWFsaWduKGluYiwgc2l6ZW9mKHUzMikpOworCWZsYXRfcmVhbGlnbihpbmIsIHNpemVvZih1aW50MzJfdCkpOwogCiAJcmV0dXJuIHN0cjsKIH0KQEAgLTYzMiw3ICs2MjIsNyBAQAogCiAJZmxhdF9yZWFkX2NodW5rKGluYiwgZC52YWwsIGxlbik7CiAKLQlmbGF0X3JlYWxpZ24oaW5iLCBzaXplb2YodTMyKSk7CisJZmxhdF9yZWFsaWduKGluYiwgc2l6ZW9mKHVpbnQzMl90KSk7CiAKIAlyZXR1cm4gZDsKIH0KQEAgLTY1OSw3ICs2NDksNyBAQAogc3RhdGljIHN0cnVjdCBwcm9wZXJ0eSAqZmxhdF9yZWFkX3Byb3BlcnR5KHN0cnVjdCBpbmJ1ZiAqZHRidWYsCiAJCQkJCSAgIHN0cnVjdCBpbmJ1ZiAqc3RyYnVmLCBpbnQgZmxhZ3MpCiB7Ci0JdTMyIHByb3BsZW4sIHN0cm9mZjsKKwl1aW50MzJfdCBwcm9wbGVuLCBzdHJvZmY7CiAJY2hhciAqbmFtZTsKIAlzdHJ1Y3QgZGF0YSB2YWw7CiAKQEAgLTY5Myw4ICs2ODMsOCBAQAogCXAgPSBpbmItPnB0cjsKIAl3aGlsZSAoMSkgewogCQlmbGF0X3JlYWRfY2h1bmsoaW5iLCAmcmUsIHNpemVvZihyZSkpOwotCQlyZS5hZGRyZXNzICA9IGJlNjRfdG9fY3B1KHJlLmFkZHJlc3MpOwotCQlyZS5zaXplID0gYmU2NF90b19jcHUocmUuc2l6ZSk7CisJCXJlLmFkZHJlc3MgID0gZmR0NjRfdG9fY3B1KHJlLmFkZHJlc3MpOworCQlyZS5zaXplID0gZmR0NjRfdG9fY3B1KHJlLnNpemUpOwogCQlpZiAocmUuc2l6ZSA9PSAwKQogCQkJYnJlYWs7CiAKQEAgLTcwOCw3NyArNjk4LDM3IEBACiAKIHN0YXRpYyBjaGFyICpub2RlbmFtZV9mcm9tX3BhdGgoY29uc3QgY2hhciAqcHBhdGgsIGNvbnN0IGNoYXIgKmNwYXRoKQogewotCWNvbnN0IGNoYXIgKmxzbGFzaDsKIAlpbnQgcGxlbjsKIAotCWxzbGFzaCA9IHN0cnJjaHIoY3BhdGgsICcvJyk7Ci0JaWYgKCEgbHNsYXNoKQotCQlyZXR1cm4gTlVMTDsKKwlwbGVuID0gc3RybGVuKHBwYXRoKTsKIAotCXBsZW4gPSBsc2xhc2ggLSBjcGF0aDsKKwlpZiAoIXN0cm5lcShwcGF0aCwgY3BhdGgsIHBsZW4pKQorCQlkaWUoIlBhdGggXCIlc1wiIGlzIG5vdCB2YWxpZCBhcyBhIGNoaWxkIG9mIFwiJXNcIlxuIiwKKwkJICAgIGNwYXRoLCBwcGF0aCk7CiAKLQlpZiAoc3RyZXEoY3BhdGgsICIvIikgJiYgc3RyZXEocHBhdGgsICIiKSkKLQkJcmV0dXJuICIiOworCS8qIHJvb3Qgbm9kZSBpcyBhIHNwZWNpYWwgY2FzZSAqLworCWlmICghc3RyZXEocHBhdGgsICIvIikpCisJCXBsZW4rKzsKIAotCWlmICgocGxlbiA9PSAwKSAmJiBzdHJlcShwcGF0aCwgIi8iKSkKLQkJcmV0dXJuIHN0cmR1cChsc2xhc2grMSk7Ci0KLQlpZiAoISBzdHJuZXEocHBhdGgsIGNwYXRoLCBwbGVuKSkKLQkJcmV0dXJuIE5VTEw7Ci0KLQlyZXR1cm4gc3RyZHVwKGxzbGFzaCsxKTsKLX0KLQotc3RhdGljIGNvbnN0IGNoYXIgUFJPUENIQVJbXSA9ICJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ekFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaMDEyMzQ1Njc4OSwuXysqIz8tIjsKLXN0YXRpYyBjb25zdCBjaGFyIFVOSVRDSEFSW10gPSAiMDEyMzQ1Njc4OWFiY2RlZiwiOwotCi1zdGF0aWMgaW50IGNoZWNrX25vZGVfbmFtZShjb25zdCBjaGFyICpuYW1lKQotewotCWNvbnN0IGNoYXIgKmF0cG9zOwotCWludCBiYXNlbmFtZWxlbjsKLQotCWF0cG9zID0gc3RycmNocihuYW1lLCAnQCcpOwotCi0JaWYgKGF0cG9zKQotCQliYXNlbmFtZWxlbiA9IGF0cG9zIC0gbmFtZTsKLQllbHNlCi0JCWJhc2VuYW1lbGVuID0gc3RybGVuKG5hbWUpOwotCi0JaWYgKHN0cnNwbihuYW1lLCBQUk9QQ0hBUikgPCBiYXNlbmFtZWxlbikKLQkJcmV0dXJuIC0xOwotCi0JaWYgKGF0cG9zCi0JICAgICYmICgoYmFzZW5hbWVsZW4gKyAxICsgc3Ryc3BuKGF0cG9zKzEsIFVOSVRDSEFSKSkgPCBzdHJsZW4obmFtZSkpKQotCQlyZXR1cm4gLTE7Ci0KLQlyZXR1cm4gYmFzZW5hbWVsZW47CisJcmV0dXJuIHN0cmR1cChjcGF0aCArIHBsZW4pOwogfQogCiBzdGF0aWMgc3RydWN0IG5vZGUgKnVuZmxhdHRlbl90cmVlKHN0cnVjdCBpbmJ1ZiAqZHRidWYsCiAJCQkJICAgc3RydWN0IGluYnVmICpzdHJidWYsCi0JCQkJICAgY29uc3QgY2hhciAqcGFyZW50X3BhdGgsIGludCBmbGFncykKKwkJCQkgICBjb25zdCBjaGFyICpwYXJlbnRfZmxhdG5hbWUsIGludCBmbGFncykKIHsKIAlzdHJ1Y3Qgbm9kZSAqbm9kZTsKLQl1MzIgdmFsOworCWNoYXIgKmZsYXRuYW1lOworCXVpbnQzMl90IHZhbDsKIAogCW5vZGUgPSBidWlsZF9ub2RlKE5VTEwsIE5VTEwpOwogCi0JaWYgKGZsYWdzICYgRlRGX0ZVTExQQVRIKSB7Ci0JCW5vZGUtPmZ1bGxwYXRoID0gZmxhdF9yZWFkX3N0cmluZyhkdGJ1Zik7Ci0JCW5vZGUtPm5hbWUgPSBub2RlbmFtZV9mcm9tX3BhdGgocGFyZW50X3BhdGgsIG5vZGUtPmZ1bGxwYXRoKTsKKwlmbGF0bmFtZSA9IGZsYXRfcmVhZF9zdHJpbmcoZHRidWYpOwogCi0JCWlmICghIG5vZGUtPm5hbWUpCi0JCQlkaWUoIlBhdGggXCIlc1wiIGlzIG5vdCB2YWxpZCBhcyBhIGNoaWxkIG9mIFwiJXNcIlxuIiwKLQkJCSAgICBub2RlLT5mdWxscGF0aCwgcGFyZW50X3BhdGgpOwotCX0gZWxzZSB7Ci0JCW5vZGUtPm5hbWUgPSBmbGF0X3JlYWRfc3RyaW5nKGR0YnVmKTsKLQkJbm9kZS0+ZnVsbHBhdGggPSBqb2luX3BhdGgocGFyZW50X3BhdGgsIG5vZGUtPm5hbWUpOwotCX0KLQotCW5vZGUtPmJhc2VuYW1lbGVuID0gY2hlY2tfbm9kZV9uYW1lKG5vZGUtPm5hbWUpOwotCWlmIChub2RlLT5iYXNlbmFtZWxlbiA8IDApIHsKLQkJZnByaW50ZihzdGRlcnIsICJXYXJuaW5nIFwiJXNcIiBoYXMgaW5jb3JyZWN0IGZvcm1hdFxuIiwgbm9kZS0+bmFtZSk7Ci0JfQorCWlmIChmbGFncyAmIEZURl9GVUxMUEFUSCkKKwkJbm9kZS0+bmFtZSA9IG5vZGVuYW1lX2Zyb21fcGF0aChwYXJlbnRfZmxhdG5hbWUsIGZsYXRuYW1lKTsKKwllbHNlCisJCW5vZGUtPm5hbWUgPSBmbGF0bmFtZTsKIAogCWRvIHsKIAkJc3RydWN0IHByb3BlcnR5ICpwcm9wOwpAQCAtNzk1LDggKzc0NSw3IEBACiAJCQlicmVhazsKIAogCQljYXNlIEZEVF9CRUdJTl9OT0RFOgotCQkJY2hpbGQgPSB1bmZsYXR0ZW5fdHJlZShkdGJ1ZixzdHJidWYsIG5vZGUtPmZ1bGxwYXRoLAotCQkJCQkgICAgICAgZmxhZ3MpOworCQkJY2hpbGQgPSB1bmZsYXR0ZW5fdHJlZShkdGJ1ZixzdHJidWYsIGZsYXRuYW1lLCBmbGFncyk7CiAJCQlhZGRfY2hpbGQobm9kZSwgY2hpbGQpOwogCQkJYnJlYWs7CiAKQEAgLTgyNSwxMCArNzc0LDExIEBACiB9CiAKIAotc3RydWN0IGJvb3RfaW5mbyAqZHRfZnJvbV9ibG9iKEZJTEUgKmYpCitzdHJ1Y3QgYm9vdF9pbmZvICpkdF9mcm9tX2Jsb2IoY29uc3QgY2hhciAqZm5hbWUpCiB7Ci0JdTMyIG1hZ2ljLCB0b3RhbHNpemUsIHZlcnNpb24sIHNpemVfc3RyLCBzaXplX2R0OwotCXUzMiBvZmZfZHQsIG9mZl9zdHIsIG9mZl9tZW1fcnN2bWFwOworCXN0cnVjdCBkdGNfZmlsZSAqZHRjZjsKKwl1aW50MzJfdCBtYWdpYywgdG90YWxzaXplLCB2ZXJzaW9uLCBzaXplX2R0LCBib290X2NwdWlkX3BoeXM7CisJdWludDMyX3Qgb2ZmX2R0LCBvZmZfc3RyLCBvZmZfbWVtX3Jzdm1hcDsKIAlpbnQgcmM7CiAJY2hhciAqYmxvYjsKIAlzdHJ1Y3QgZmR0X2hlYWRlciAqZmR0OwpAQCAtODM4LDU0ICs3ODgsNTYgQEAKIAlpbnQgc2l6ZWxlZnQ7CiAJc3RydWN0IHJlc2VydmVfaW5mbyAqcmVzZXJ2ZWxpc3Q7CiAJc3RydWN0IG5vZGUgKnRyZWU7Ci0JdTMyIHZhbDsKKwl1aW50MzJfdCB2YWw7CiAJaW50IGZsYWdzID0gMDsKIAotCXJjID0gZnJlYWQoJm1hZ2ljLCBzaXplb2YobWFnaWMpLCAxLCBmKTsKLQlpZiAoZmVycm9yKGYpKQorCWR0Y2YgPSBkdGNfb3Blbl9maWxlKGZuYW1lLCBOVUxMKTsKKworCXJjID0gZnJlYWQoJm1hZ2ljLCBzaXplb2YobWFnaWMpLCAxLCBkdGNmLT5maWxlKTsKKwlpZiAoZmVycm9yKGR0Y2YtPmZpbGUpKQogCQlkaWUoIkVycm9yIHJlYWRpbmcgRFQgYmxvYiBtYWdpYyBudW1iZXI6ICVzXG4iLAogCQkgICAgc3RyZXJyb3IoZXJybm8pKTsKIAlpZiAocmMgPCAxKSB7Ci0JCWlmIChmZW9mKGYpKQorCQlpZiAoZmVvZihkdGNmLT5maWxlKSkKIAkJCWRpZSgiRU9GIHJlYWRpbmcgRFQgYmxvYiBtYWdpYyBudW1iZXJcbiIpOwogCQllbHNlCiAJCQlkaWUoIk15c3RlcmlvdXMgc2hvcnQgcmVhZCByZWFkaW5nIG1hZ2ljIG51bWJlclxuIik7CiAJfQogCi0JbWFnaWMgPSBiZTMyX3RvX2NwdShtYWdpYyk7CisJbWFnaWMgPSBmZHQzMl90b19jcHUobWFnaWMpOwogCWlmIChtYWdpYyAhPSBGRFRfTUFHSUMpCiAJCWRpZSgiQmxvYiBoYXMgaW5jb3JyZWN0IG1hZ2ljIG51bWJlclxuIik7CiAKLQlyYyA9IGZyZWFkKCZ0b3RhbHNpemUsIHNpemVvZih0b3RhbHNpemUpLCAxLCBmKTsKLQlpZiAoZmVycm9yKGYpKQorCXJjID0gZnJlYWQoJnRvdGFsc2l6ZSwgc2l6ZW9mKHRvdGFsc2l6ZSksIDEsIGR0Y2YtPmZpbGUpOworCWlmIChmZXJyb3IoZHRjZi0+ZmlsZSkpCiAJCWRpZSgiRXJyb3IgcmVhZGluZyBEVCBibG9iIHNpemU6ICVzXG4iLCBzdHJlcnJvcihlcnJubykpOwogCWlmIChyYyA8IDEpIHsKLQkJaWYgKGZlb2YoZikpCisJCWlmIChmZW9mKGR0Y2YtPmZpbGUpKQogCQkJZGllKCJFT0YgcmVhZGluZyBEVCBibG9iIHNpemVcbiIpOwogCQllbHNlCiAJCQlkaWUoIk15c3RlcmlvdXMgc2hvcnQgcmVhZCByZWFkaW5nIGJsb2Igc2l6ZVxuIik7CiAJfQogCi0JdG90YWxzaXplID0gYmUzMl90b19jcHUodG90YWxzaXplKTsKKwl0b3RhbHNpemUgPSBmZHQzMl90b19jcHUodG90YWxzaXplKTsKIAlpZiAodG90YWxzaXplIDwgRkRUX1YxX1NJWkUpCiAJCWRpZSgiRFQgYmxvYiBzaXplICglZCkgaXMgdG9vIHNtYWxsXG4iLCB0b3RhbHNpemUpOwogCiAJYmxvYiA9IHhtYWxsb2ModG90YWxzaXplKTsKIAogCWZkdCA9IChzdHJ1Y3QgZmR0X2hlYWRlciAqKWJsb2I7Ci0JZmR0LT5tYWdpYyA9IGNwdV90b19iZTMyKG1hZ2ljKTsKLQlmZHQtPnRvdGFsc2l6ZSA9IGNwdV90b19iZTMyKHRvdGFsc2l6ZSk7CisJZmR0LT5tYWdpYyA9IGNwdV90b19mZHQzMihtYWdpYyk7CisJZmR0LT50b3RhbHNpemUgPSBjcHVfdG9fZmR0MzIodG90YWxzaXplKTsKIAogCXNpemVsZWZ0ID0gdG90YWxzaXplIC0gc2l6ZW9mKG1hZ2ljKSAtIHNpemVvZih0b3RhbHNpemUpOwogCXAgPSBibG9iICsgc2l6ZW9mKG1hZ2ljKSAgKyBzaXplb2YodG90YWxzaXplKTsKIAogCXdoaWxlIChzaXplbGVmdCkgewotCQlpZiAoZmVvZihmKSkKKwkJaWYgKGZlb2YoZHRjZi0+ZmlsZSkpCiAJCQlkaWUoIkVPRiBiZWZvcmUgcmVhZGluZyAlZCBieXRlcyBvZiBEVCBibG9iXG4iLAogCQkJICAgIHRvdGFsc2l6ZSk7CiAKLQkJcmMgPSBmcmVhZChwLCAxLCBzaXplbGVmdCwgZik7Ci0JCWlmIChmZXJyb3IoZikpCisJCXJjID0gZnJlYWQocCwgMSwgc2l6ZWxlZnQsIGR0Y2YtPmZpbGUpOworCQlpZiAoZmVycm9yKGR0Y2YtPmZpbGUpKQogCQkJZGllKCJFcnJvciByZWFkaW5nIERUIGJsb2I6ICVzXG4iLAogCQkJICAgIHN0cmVycm9yKGVycm5vKSk7CiAKQEAgLTg5MywxOSArODQ1LDExIEBACiAJCXAgKz0gcmM7CiAJfQogCi0Jb2ZmX2R0ID0gYmUzMl90b19jcHUoZmR0LT5vZmZfZHRfc3RydWN0KTsKLQlvZmZfc3RyID0gYmUzMl90b19jcHUoZmR0LT5vZmZfZHRfc3RyaW5ncyk7Ci0Jb2ZmX21lbV9yc3ZtYXAgPSBiZTMyX3RvX2NwdShmZHQtPm9mZl9tZW1fcnN2bWFwKTsKLQl2ZXJzaW9uID0gYmUzMl90b19jcHUoZmR0LT52ZXJzaW9uKTsKLQotCWZwcmludGYoc3RkZXJyLCAiXHRtYWdpYzpcdFx0XHQweCV4XG4iLCBtYWdpYyk7Ci0JZnByaW50ZihzdGRlcnIsICJcdHRvdGFsc2l6ZTpcdFx0JWRcbiIsIHRvdGFsc2l6ZSk7Ci0JZnByaW50ZihzdGRlcnIsICJcdG9mZl9kdF9zdHJ1Y3Q6XHRcdDB4JXhcbiIsIG9mZl9kdCk7Ci0JZnByaW50ZihzdGRlcnIsICJcdG9mZl9kdF9zdHJpbmdzOlx0XHQweCV4XG4iLCBvZmZfc3RyKTsKLQlmcHJpbnRmKHN0ZGVyciwgIlx0b2ZmX21lbV9yc3ZtYXA6XHRcdDB4JXhcbiIsIG9mZl9tZW1fcnN2bWFwKTsKLQlmcHJpbnRmKHN0ZGVyciwgIlx0dmVyc2lvbjpcdFx0MHgleFxuIiwgdmVyc2lvbiApOwotCWZwcmludGYoc3RkZXJyLCAiXHRsYXN0X2NvbXBfdmVyc2lvbjpcdDB4JXhcbiIsCi0JCWJlMzJfdG9fY3B1KGZkdC0+bGFzdF9jb21wX3ZlcnNpb24pKTsKKwlvZmZfZHQgPSBmZHQzMl90b19jcHUoZmR0LT5vZmZfZHRfc3RydWN0KTsKKwlvZmZfc3RyID0gZmR0MzJfdG9fY3B1KGZkdC0+b2ZmX2R0X3N0cmluZ3MpOworCW9mZl9tZW1fcnN2bWFwID0gZmR0MzJfdG9fY3B1KGZkdC0+b2ZmX21lbV9yc3ZtYXApOworCXZlcnNpb24gPSBmZHQzMl90b19jcHUoZmR0LT52ZXJzaW9uKTsKKwlib290X2NwdWlkX3BoeXMgPSBmZHQzMl90b19jcHUoZmR0LT5ib290X2NwdWlkX3BoeXMpOwogCiAJaWYgKG9mZl9tZW1fcnN2bWFwID49IHRvdGFsc2l6ZSkKIAkJZGllKCJNZW0gUmVzZXJ2ZSBzdHJ1Y3R1cmUgb2Zmc2V0IGV4Y2VlZHMgdG90YWwgc2l6ZVxuIik7CkBAIC05MTYsMjEgKzg2MCwxNyBAQAogCWlmIChvZmZfc3RyID4gdG90YWxzaXplKQogCQlkaWUoIlN0cmluZyB0YWJsZSBvZmZzZXQgZXhjZWVkcyB0b3RhbCBzaXplXG4iKTsKIAotCWlmICh2ZXJzaW9uID49IDIpCi0JCWZwcmludGYoc3RkZXJyLCAiXHRib290X2NwdWlkX3BoeXM6XHQweCV4XG4iLAotCQkJYmUzMl90b19jcHUoZmR0LT5ib290X2NwdWlkX3BoeXMpKTsKLQotCXNpemVfc3RyID0gLTE7CiAJaWYgKHZlcnNpb24gPj0gMykgewotCQlzaXplX3N0ciA9IGJlMzJfdG9fY3B1KGZkdC0+c2l6ZV9kdF9zdHJpbmdzKTsKLQkJZnByaW50ZihzdGRlcnIsICJcdHNpemVfZHRfc3RyaW5nczpcdCVkXG4iLCBzaXplX3N0cik7CisJCXVpbnQzMl90IHNpemVfc3RyID0gZmR0MzJfdG9fY3B1KGZkdC0+c2l6ZV9kdF9zdHJpbmdzKTsKIAkJaWYgKG9mZl9zdHIrc2l6ZV9zdHIgPiB0b3RhbHNpemUpCiAJCQlkaWUoIlN0cmluZyB0YWJsZSBleHRlbmRzIHBhc3QgdG90YWwgc2l6ZVxuIik7CisJCWluYnVmX2luaXQoJnN0cmJ1ZiwgYmxvYiArIG9mZl9zdHIsIGJsb2IgKyBvZmZfc3RyICsgc2l6ZV9zdHIpOworCX0gZWxzZSB7CisJCWluYnVmX2luaXQoJnN0cmJ1ZiwgYmxvYiArIG9mZl9zdHIsIGJsb2IgKyB0b3RhbHNpemUpOwogCX0KIAogCWlmICh2ZXJzaW9uID49IDE3KSB7Ci0JCXNpemVfZHQgPSBiZTMyX3RvX2NwdShmZHQtPnNpemVfZHRfc3RydWN0KTsKLQkJZnByaW50ZihzdGRlcnIsICJcdHNpemVfZHRfc3RydWN0Olx0XHQlZFxuIiwgc2l6ZV9kdCk7CisJCXNpemVfZHQgPSBmZHQzMl90b19jcHUoZmR0LT5zaXplX2R0X3N0cnVjdCk7CiAJCWlmIChvZmZfZHQrc2l6ZV9kdCA+IHRvdGFsc2l6ZSkKIAkJCWRpZSgiU3RydWN0dXJlIGJsb2NrIGV4dGVuZHMgcGFzdCB0b3RhbCBzaXplXG4iKTsKIAl9CkBAIC05NDQsMTAgKzg4NCw2IEBACiAJaW5idWZfaW5pdCgmbWVtcmVzdmJ1ZiwKIAkJICAgYmxvYiArIG9mZl9tZW1fcnN2bWFwLCBibG9iICsgdG90YWxzaXplKTsKIAlpbmJ1Zl9pbml0KCZkdGJ1ZiwgYmxvYiArIG9mZl9kdCwgYmxvYiArIHRvdGFsc2l6ZSk7Ci0JaWYgKHNpemVfc3RyID49IDApCi0JCWluYnVmX2luaXQoJnN0cmJ1ZiwgYmxvYiArIG9mZl9zdHIsIGJsb2IgKyBvZmZfc3RyICsgc2l6ZV9zdHIpOwotCWVsc2UKLQkJaW5idWZfaW5pdCgmc3RyYnVmLCBibG9iICsgb2ZmX3N0ciwgYmxvYiArIHRvdGFsc2l6ZSk7CiAKIAlyZXNlcnZlbGlzdCA9IGZsYXRfcmVhZF9tZW1fcmVzZXJ2ZSgmbWVtcmVzdmJ1Zik7CiAKQEAgLTk2NCw1ICs5MDAsNyBAQAogCiAJZnJlZShibG9iKTsKIAotCXJldHVybiBidWlsZF9ib290X2luZm8ocmVzZXJ2ZWxpc3QsIHRyZWUpOworCWR0Y19jbG9zZV9maWxlKGR0Y2YpOworCisJcmV0dXJuIGJ1aWxkX2Jvb3RfaW5mbyhyZXNlcnZlbGlzdCwgdHJlZSwgYm9vdF9jcHVpZF9waHlzKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0Yy1zcmMvZnN0cmVlLmMgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdGMtc3JjL2ZzdHJlZS5jCmluZGV4IDJhMTYwYTQuLjc2NmIyNjkgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2R0Yy1zcmMvZnN0cmVlLmMKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRjLXNyYy9mc3RyZWUuYwpAQCAtMzEsOCArMzEsOCBAQAogCXN0cnVjdCBub2RlICp0cmVlOwogCiAJZCA9IG9wZW5kaXIoZGlybmFtZSk7Ci0JaWYgKCEgZCkKLQkJZGllKCJvcGVuZGlyKCk6ICVzXG4iLCBzdHJlcnJvcihlcnJubykpOworCWlmICghZCkKKwkJZGllKCJDb3VsZG4ndCBvcGVuZGlyKCkgXCIlc1wiOiAlc1xuIiwgZGlybmFtZSwgc3RyZXJyb3IoZXJybm8pKTsKIAogCXRyZWUgPSBidWlsZF9ub2RlKE5VTEwsIE5VTEwpOwogCkBAIC04Nyw4ICs4Nyw2IEBACiAJdHJlZSA9IHJlYWRfZnN0cmVlKGRpcm5hbWUpOwogCXRyZWUgPSBuYW1lX25vZGUodHJlZSwgIiIsIE5VTEwpOwogCi0JZmlsbF9mdWxscGF0aHModHJlZSwgIiIpOwotCi0JcmV0dXJuIGJ1aWxkX2Jvb3RfaW5mbyhOVUxMLCB0cmVlKTsKKwlyZXR1cm4gYnVpbGRfYm9vdF9pbmZvKE5VTEwsIHRyZWUsIDApOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdGMtc3JjL2xpYmZkdF9lbnYuaCBiL2FyY2gvcG93ZXJwYy9ib290L2R0Yy1zcmMvbGliZmR0X2Vudi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0OWJmNjAKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdGMtc3JjL2xpYmZkdF9lbnYuaApAQCAtMCwwICsxLDIzIEBACisjaWZuZGVmIF9MSUJGRFRfRU5WX0gKKyNkZWZpbmUgX0xJQkZEVF9FTlZfSAorCisjaW5jbHVkZSA8c3RkZGVmLmg+CisjaW5jbHVkZSA8c3RkaW50Lmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNkZWZpbmUgX0IobikJKCh1bnNpZ25lZCBsb25nIGxvbmcpKCh1aW50OF90ICopJngpW25dKQorc3RhdGljIGlubGluZSB1aW50MzJfdCBmZHQzMl90b19jcHUodWludDMyX3QgeCkKK3sKKwlyZXR1cm4gKF9CKDApIDw8IDI0KSB8IChfQigxKSA8PCAxNikgfCAoX0IoMikgPDwgOCkgfCBfQigzKTsKK30KKyNkZWZpbmUgY3B1X3RvX2ZkdDMyKHgpIGZkdDMyX3RvX2NwdSh4KQorCitzdGF0aWMgaW5saW5lIHVpbnQ2NF90IGZkdDY0X3RvX2NwdSh1aW50NjRfdCB4KQoreworCXJldHVybiAoX0IoMCkgPDwgNTYpIHwgKF9CKDEpIDw8IDQ4KSB8IChfQigyKSA8PCA0MCkgfCAoX0IoMykgPDwgMzIpCisJCXwgKF9CKDQpIDw8IDI0KSB8IChfQig1KSA8PCAxNikgfCAoX0IoNikgPDwgOCkgfCBfQig3KTsKK30KKyNkZWZpbmUgY3B1X3RvX2ZkdDY0KHgpIGZkdDY0X3RvX2NwdSh4KQorI3VuZGVmIF9CCisKKyNlbmRpZiAvKiBfTElCRkRUX0VOVl9IICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdGMtc3JjL2xpdmV0cmVlLmMgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdGMtc3JjL2xpdmV0cmVlLmMKaW5kZXggNmJhMDg0Ni4uMGNhM2RlNSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRjLXNyYy9saXZldHJlZS5jCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0Yy1zcmMvbGl2ZXRyZWUuYwpAQCAtMTE1LDYgKzExNSw3IEBACiAJc3RydWN0IG5vZGUgKipwOwogCiAJY2hpbGQtPm5leHRfc2libGluZyA9IE5VTEw7CisJY2hpbGQtPnBhcmVudCA9IHBhcmVudDsKIAogCXAgPSAmcGFyZW50LT5jaGlsZHJlbjsKIAl3aGlsZSAoKnApCkBAIC0xMjMsNyArMTI0LDggQEAKIAkqcCA9IGNoaWxkOwogfQogCi1zdHJ1Y3QgcmVzZXJ2ZV9pbmZvICpidWlsZF9yZXNlcnZlX2VudHJ5KHU2NCBhZGRyZXNzLCB1NjQgc2l6ZSwgY2hhciAqbGFiZWwpCitzdHJ1Y3QgcmVzZXJ2ZV9pbmZvICpidWlsZF9yZXNlcnZlX2VudHJ5KHVpbnQ2NF90IGFkZHJlc3MsIHVpbnQ2NF90IHNpemUsCisJCQkJCSBjaGFyICpsYWJlbCkKIHsKIAlzdHJ1Y3QgcmVzZXJ2ZV9pbmZvICpuZXcgPSB4bWFsbG9jKHNpemVvZigqbmV3KSk7CiAKQEAgLTE2NSwxMyArMTY3LDE0IEBACiB9CiAKIHN0cnVjdCBib290X2luZm8gKmJ1aWxkX2Jvb3RfaW5mbyhzdHJ1Y3QgcmVzZXJ2ZV9pbmZvICpyZXNlcnZlbGlzdCwKLQkJCQkgIHN0cnVjdCBub2RlICp0cmVlKQorCQkJCSAgc3RydWN0IG5vZGUgKnRyZWUsIHVpbnQzMl90IGJvb3RfY3B1aWRfcGh5cykKIHsKIAlzdHJ1Y3QgYm9vdF9pbmZvICpiaTsKIAogCWJpID0geG1hbGxvYyhzaXplb2YoKmJpKSk7CiAJYmktPnJlc2VydmVsaXN0ID0gcmVzZXJ2ZWxpc3Q7CiAJYmktPmR0ID0gdHJlZTsKKwliaS0+Ym9vdF9jcHVpZF9waHlzID0gYm9vdF9jcHVpZF9waHlzOwogCiAJcmV0dXJuIGJpOwogfQpAQCAtMjAyLDcgKzIwNSw3IEBACiBjZWxsX3QgcHJvcHZhbF9jZWxsKHN0cnVjdCBwcm9wZXJ0eSAqcHJvcCkKIHsKIAlhc3NlcnQocHJvcC0+dmFsLmxlbiA9PSBzaXplb2YoY2VsbF90KSk7Ci0JcmV0dXJuIGJlMzJfdG9fY3B1KCooKGNlbGxfdCAqKXByb3AtPnZhbC52YWwpKTsKKwlyZXR1cm4gZmR0MzJfdG9fY3B1KCooKGNlbGxfdCAqKXByb3AtPnZhbC52YWwpKTsKIH0KIAogc3RydWN0IG5vZGUgKmdldF9zdWJub2RlKHN0cnVjdCBub2RlICpub2RlLCBjb25zdCBjaGFyICpub2RlbmFtZSkKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0Yy1zcmMvc3JjcG9zLmMgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdGMtc3JjL3NyY3Bvcy5jCmluZGV4IDM1MmIwZmUuLjk2NDFiNzYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2R0Yy1zcmMvc3JjcG9zLmMKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRjLXNyYy9zcmNwb3MuYwpAQCAtMjAsODYgKzIwLDk3IEBACiAjaW5jbHVkZSAiZHRjLmgiCiAjaW5jbHVkZSAic3JjcG9zLmgiCiAKLQotLyoKLSAqIFJlY29yZCB0aGUgY29tcGxldGUgdW5pcXVlIHNldCBvZiBvcGVuZWQgZmlsZSBuYW1lcy4KLSAqIFByaW1hcmlseSB1c2VkIHRvIGNhY2hlIHNvdXJjZSBwb3NpdGlvbiBmaWxlIG5hbWVzLgotICovCi0jZGVmaW5lIE1BWF9OX0ZJTEVfTkFNRVMJKDEwMCkKLQotY29uc3QgY2hhciAqZmlsZV9uYW1lc1tNQVhfTl9GSUxFX05BTUVTXTsKLXN0YXRpYyBpbnQgbl9maWxlX25hbWVzID0gMDsKLQogLyoKICAqIExpa2UgeXlsaW5lbm8sIHRoaXMgaXMgdGhlIGN1cnJlbnQgb3BlbiBmaWxlIHBvcy4KICAqLwogCi1pbnQgc3JjcG9zX2ZpbGVudW0gPSAtMTsKK3N0cnVjdCBkdGNfZmlsZSAqc3JjcG9zX2ZpbGU7CiAKLQotCi1GSUxFICpkdGNfb3Blbl9maWxlKGNvbnN0IGNoYXIgKmZuYW1lKQorc3RhdGljIGludCBkdGNfb3Blbl9vbmUoc3RydWN0IGR0Y19maWxlICpmaWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqc2VhcmNoLAorICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZm5hbWUpCiB7Ci0JRklMRSAqZjsKKwljaGFyICpmdWxsbmFtZTsKIAotCWlmIChsb29rdXBfZmlsZV9uYW1lKGZuYW1lLCAxKSA8IDApCi0JCWRpZSgiVG9vIG1hbnkgZmlsZXMgb3BlbmVkXG4iKTsKKwlpZiAoc2VhcmNoKSB7CisJCWZ1bGxuYW1lID0geG1hbGxvYyhzdHJsZW4oc2VhcmNoKSArIHN0cmxlbihmbmFtZSkgKyAyKTsKIAotCWlmIChzdHJlcShmbmFtZSwgIi0iKSkKLQkJZiA9IHN0ZGluOwotCWVsc2UKLQkJZiA9IGZvcGVuKGZuYW1lLCAiciIpOworCQlzdHJjcHkoZnVsbG5hbWUsIHNlYXJjaCk7CisJCXN0cmNhdChmdWxsbmFtZSwgIi8iKTsKKwkJc3RyY2F0KGZ1bGxuYW1lLCBmbmFtZSk7CisJfSBlbHNlIHsKKwkJZnVsbG5hbWUgPSBzdHJkdXAoZm5hbWUpOworCX0KIAotCWlmICghIGYpCi0JCWRpZSgiQ291bGRuJ3Qgb3BlbiBcIiVzXCI6ICVzXG4iLCBmbmFtZSwgc3RyZXJyb3IoZXJybm8pKTsKKwlmaWxlLT5maWxlID0gZm9wZW4oZnVsbG5hbWUsICJyIik7CisJaWYgKCFmaWxlLT5maWxlKSB7CisJCWZyZWUoZnVsbG5hbWUpOworCQlyZXR1cm4gMDsKKwl9CiAKLQlyZXR1cm4gZjsKKwlmaWxlLT5uYW1lID0gZnVsbG5hbWU7CisJcmV0dXJuIDE7CiB9CiAKIAotCi0vKgotICogTG9jYXRlIGFuZCBvcHRpb25hbGx5IGFkZCBmaWxlbmFtZSBmbmFtZSBpbiB0aGUgZmlsZV9uYW1lc1tdIGFycmF5LgotICoKLSAqIElmIHRoZSBmaWxlbmFtZSBpcyBjdXJyZW50bHkgbm90IGluIHRoZSBhcnJheSBhbmQgdGhlIGJvb2xlYW4KLSAqIGFkZF9pdCBpcyBub24temVybywgYW4gYXR0ZW1wdCB0byBhZGQgdGhlIGZpbGVuYW1lIHdpbGwgYmUgbWFkZS4KLSAqCi0gKiBSZXR1cm5zOwotICogICAgSW5kZXggWzAuLk1BWF9OX0ZJTEVfTkFNRVMpIHdoZXJlIHRoZSBmaWxlbmFtZSBpcyBrZXB0Ci0gKiAgICAtMSBpZiB0aGUgbmFtZSBjYW4gbm90IGJlIHJlY29yZGVkCi0gKi8KLQotaW50IGxvb2t1cF9maWxlX25hbWUoY29uc3QgY2hhciAqZm5hbWUsIGludCBhZGRfaXQpCitzdHJ1Y3QgZHRjX2ZpbGUgKmR0Y19vcGVuX2ZpbGUoY29uc3QgY2hhciAqZm5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IHNlYXJjaF9wYXRoICpzZWFyY2gpCiB7Ci0JaW50IGk7CisJc3RhdGljIGNvbnN0IHN0cnVjdCBzZWFyY2hfcGF0aCBkZWZhdWx0X3NlYXJjaCA9IHsgTlVMTCwgTlVMTCwgTlVMTCB9OwogCi0JZm9yIChpID0gMDsgaSA8IG5fZmlsZV9uYW1lczsgaSsrKSB7Ci0JCWlmIChzdHJjbXAoZmlsZV9uYW1lc1tpXSwgZm5hbWUpID09IDApCi0JCQlyZXR1cm4gaTsKKwlzdHJ1Y3QgZHRjX2ZpbGUgKmZpbGU7CisJY29uc3QgY2hhciAqc2xhc2g7CisKKwlmaWxlID0geG1hbGxvYyhzaXplb2Yoc3RydWN0IGR0Y19maWxlKSk7CisKKwlzbGFzaCA9IHN0cnJjaHIoZm5hbWUsICcvJyk7CisJaWYgKHNsYXNoKSB7CisJCWNoYXIgKmRpciA9IHhtYWxsb2Moc2xhc2ggLSBmbmFtZSArIDEpOworCisJCW1lbWNweShkaXIsIGZuYW1lLCBzbGFzaCAtIGZuYW1lKTsKKwkJZGlyW3NsYXNoIC0gZm5hbWVdID0gMDsKKwkJZmlsZS0+ZGlyID0gZGlyOworCX0gZWxzZSB7CisJCWZpbGUtPmRpciA9IE5VTEw7CiAJfQogCi0JaWYgKGFkZF9pdCkgewotCQlpZiAobl9maWxlX25hbWVzIDwgTUFYX05fRklMRV9OQU1FUykgewotCQkJZmlsZV9uYW1lc1tuX2ZpbGVfbmFtZXNdID0gc3RyZHVwKGZuYW1lKTsKLQkJCXJldHVybiBuX2ZpbGVfbmFtZXMrKzsKLQkJfQorCWlmIChzdHJlcShmbmFtZSwgIi0iKSkgeworCQlmaWxlLT5uYW1lID0gInN0ZGluIjsKKwkJZmlsZS0+ZmlsZSA9IHN0ZGluOworCQlyZXR1cm4gZmlsZTsKIAl9CiAKLQlyZXR1cm4gLTE7CisJaWYgKGZuYW1lWzBdID09ICcvJykgeworCQlmaWxlLT5maWxlID0gZm9wZW4oZm5hbWUsICJyIik7CisJCWlmICghZmlsZS0+ZmlsZSkKKwkJCWdvdG8gZmFpbDsKKworCQlmaWxlLT5uYW1lID0gc3RyZHVwKGZuYW1lKTsKKwkJcmV0dXJuIGZpbGU7CisJfQorCisJaWYgKCFzZWFyY2gpCisJCXNlYXJjaCA9ICZkZWZhdWx0X3NlYXJjaDsKKworCXdoaWxlIChzZWFyY2gpIHsKKwkJaWYgKGR0Y19vcGVuX29uZShmaWxlLCBzZWFyY2gtPmRpciwgZm5hbWUpKQorCQkJcmV0dXJuIGZpbGU7CisKKwkJaWYgKGVycm5vICE9IEVOT0VOVCkKKwkJCWdvdG8gZmFpbDsKKworCQlzZWFyY2ggPSBzZWFyY2gtPm5leHQ7CisJfQorCitmYWlsOgorCWRpZSgiQ291bGRuJ3Qgb3BlbiBcIiVzXCI6ICVzXG4iLCBmbmFtZSwgc3RyZXJyb3IoZXJybm8pKTsKIH0KIAotCi1jb25zdCBjaGFyICpzcmNwb3NfZmlsZW5hbWVfZm9yX251bShpbnQgZmlsZW51bSkKK3ZvaWQgZHRjX2Nsb3NlX2ZpbGUoc3RydWN0IGR0Y19maWxlICpmaWxlKQogewotCWlmICgwIDw9IGZpbGVudW0gJiYgZmlsZW51bSA8IG5fZmlsZV9uYW1lcykgewotCQlyZXR1cm4gZmlsZV9uYW1lc1tmaWxlbnVtXTsKLQl9CisJaWYgKGZjbG9zZShmaWxlLT5maWxlKSkKKwkJZGllKCJFcnJvciBjbG9zaW5nIFwiJXNcIjogJXNcbiIsIGZpbGUtPm5hbWUsIHN0cmVycm9yKGVycm5vKSk7CiAKLQlyZXR1cm4gMDsKLX0KLQotCi1jb25zdCBjaGFyICpzcmNwb3NfZ2V0X2ZpbGVuYW1lKHZvaWQpCi17Ci0JcmV0dXJuIHNyY3Bvc19maWxlbmFtZV9mb3JfbnVtKHNyY3Bvc19maWxlbnVtKTsKKwlmcmVlKGZpbGUtPmRpcik7CisJZnJlZShmaWxlKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0Yy1zcmMvc3JjcG9zLmggYi9hcmNoL3Bvd2VycGMvYm9vdC9kdGMtc3JjL3NyY3Bvcy5oCmluZGV4IGNlN2FiNWIuLmUxN2M3YzAgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2R0Yy1zcmMvc3JjcG9zLmgKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRjLXNyYy9zcmNwb3MuaApAQCAtMjIsMTMgKzIyLDIxIEBACiAgKiBhcnJheSBvZiBhbGwgb3BlbmVkIGZpbGVuYW1lcy4KICAqLwogCisjaW5jbHVkZSA8c3RkaW8uaD4KKworc3RydWN0IGR0Y19maWxlIHsKKwljaGFyICpkaXI7CisJY29uc3QgY2hhciAqbmFtZTsKKwlGSUxFICpmaWxlOworfTsKKwogI2lmICEgZGVmaW5lZChZWUxUWVBFKSAmJiAhIGRlZmluZWQoWVlMVFlQRV9JU19ERUNMQVJFRCkKIHR5cGVkZWYgc3RydWN0IFlZTFRZUEUgewogICAgIGludCBmaXJzdF9saW5lOwogICAgIGludCBmaXJzdF9jb2x1bW47CiAgICAgaW50IGxhc3RfbGluZTsKICAgICBpbnQgbGFzdF9jb2x1bW47Ci0gICAgaW50IGZpbGVudW07CisgICAgc3RydWN0IGR0Y19maWxlICpmaWxlOwogfSBZWUxUWVBFOwogCiAjZGVmaW5lIFlZTFRZUEVfSVNfREVDTEFSRUQJMQpAQCAtNDgsNyArNTYsNyBAQAogCSAgKEN1cnJlbnQpLmZpcnN0X2NvbHVtbiA9IFlZUkhTTE9DIChSaHMsIDEpLmZpcnN0X2NvbHVtbjsJXAogCSAgKEN1cnJlbnQpLmxhc3RfbGluZSAgICA9IFlZUkhTTE9DIChSaHMsIE4pLmxhc3RfbGluZTsJCVwKIAkgIChDdXJyZW50KS5sYXN0X2NvbHVtbiAgPSBZWVJIU0xPQyAoUmhzLCBOKS5sYXN0X2NvbHVtbjsJXAotCSAgKEN1cnJlbnQpLmZpbGVudW0gICAgICA9IFlZUkhTTE9DIChSaHMsIE4pLmZpbGVudW07CQlcCisJICAoQ3VycmVudCkuZmlsZSAgICAgICAgID0gWVlSSFNMT0MgKFJocywgTikuZmlsZTsJCVwKIAl9CQkJCQkJCQlcCiAgICAgICBlbHNlCQkJCQkJCQlcCiAJewkJCQkJCQkJXApAQCAtNTYsMjAgKzY0LDIyIEBACiAJICAgIFlZUkhTTE9DIChSaHMsIDApLmxhc3RfbGluZTsJCQkJXAogCSAgKEN1cnJlbnQpLmZpcnN0X2NvbHVtbiA9IChDdXJyZW50KS5sYXN0X2NvbHVtbiA9CQlcCiAJICAgIFlZUkhTTE9DIChSaHMsIDApLmxhc3RfY29sdW1uOwkJCQlcCi0JICAoQ3VycmVudCkuZmlsZW51bSAgICAgID0gWVlSSFNMT0MgKFJocywgMCkuZmlsZW51bTsJCVwKKwkgIChDdXJyZW50KS5maWxlICAgICAgICAgPSBZWVJIU0xPQyAoUmhzLCAwKS5maWxlOwkJXAogCX0JCQkJCQkJCVwKICAgICB3aGlsZSAoWVlJRCAoMCkpCiAKIAogCiBleHRlcm4gdm9pZCB5eWVycm9yKGNoYXIgY29uc3QgKik7CitleHRlcm4gdm9pZCB5eWVycm9yZihjaGFyIGNvbnN0ICosIC4uLikgX19hdHRyaWJ1dGVfXygoZm9ybWF0KHByaW50ZiwgMSwgMikpKTsKIAotZXh0ZXJuIGludCBzcmNwb3NfZmlsZW51bTsKK2V4dGVybiBzdHJ1Y3QgZHRjX2ZpbGUgKnNyY3Bvc19maWxlOwogCi1leHRlcm4gaW50IHB1c2hfaW5wdXRfZmlsZShjb25zdCBjaGFyICpmaWxlbmFtZSk7Ci1leHRlcm4gaW50IHBvcF9pbnB1dF9maWxlKHZvaWQpOworc3RydWN0IHNlYXJjaF9wYXRoIHsKKwljb25zdCBjaGFyICpkaXI7IC8qIE5VTEwgZm9yIGN1cnJlbnQgZGlyZWN0b3J5ICovCisJc3RydWN0IHNlYXJjaF9wYXRoICpwcmV2LCAqbmV4dDsKK307CiAKLWV4dGVybiBGSUxFICpkdGNfb3Blbl9maWxlKGNvbnN0IGNoYXIgKmZuYW1lKTsKLWV4dGVybiBpbnQgbG9va3VwX2ZpbGVfbmFtZShjb25zdCBjaGFyICpmbmFtZSwgaW50IGFkZF9pdCk7Ci1leHRlcm4gY29uc3QgY2hhciAqc3JjcG9zX2ZpbGVuYW1lX2Zvcl9udW0oaW50IGZpbGVudW0pOwotY29uc3QgY2hhciAqc3JjcG9zX2dldF9maWxlbmFtZSh2b2lkKTsKK2V4dGVybiBzdHJ1Y3QgZHRjX2ZpbGUgKmR0Y19vcGVuX2ZpbGUoY29uc3QgY2hhciAqZm5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBzZWFyY2hfcGF0aCAqc2VhcmNoKTsKK2V4dGVybiB2b2lkIGR0Y19jbG9zZV9maWxlKHN0cnVjdCBkdGNfZmlsZSAqZmlsZSk7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdGMtc3JjL3RyZWVzb3VyY2UuYyBiL2FyY2gvcG93ZXJwYy9ib290L2R0Yy1zcmMvdHJlZXNvdXJjZS5jCmluZGV4IGE2YTc3NjcuLmViZWI2ZWIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2R0Yy1zcmMvdHJlZXNvdXJjZS5jCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0Yy1zcmMvdHJlZXNvdXJjZS5jCkBAIC0yMywyMCArMjMsMjMgQEAKIAogZXh0ZXJuIEZJTEUgKnl5aW47CiBleHRlcm4gaW50IHl5cGFyc2Uodm9pZCk7Ci1leHRlcm4gdm9pZCB5eWVycm9yKGNoYXIgY29uc3QgKik7CiAKIHN0cnVjdCBib290X2luZm8gKnRoZV9ib290X2luZm87CitpbnQgdHJlZXNvdXJjZV9lcnJvcjsKIAogc3RydWN0IGJvb3RfaW5mbyAqZHRfZnJvbV9zb3VyY2UoY29uc3QgY2hhciAqZm5hbWUpCiB7CiAJdGhlX2Jvb3RfaW5mbyA9IE5VTEw7CisJdHJlZXNvdXJjZV9lcnJvciA9IDA7CiAKLQlwdXNoX2lucHV0X2ZpbGUoZm5hbWUpOworCXNyY3Bvc19maWxlID0gZHRjX29wZW5fZmlsZShmbmFtZSwgTlVMTCk7CisJeXlpbiA9IHNyY3Bvc19maWxlLT5maWxlOwogCiAJaWYgKHl5cGFyc2UoKSAhPSAwKQotCQlyZXR1cm4gTlVMTDsKKwkJZGllKCJVbmFibGUgdG8gcGFyc2UgaW5wdXQgdHJlZVxuIik7CiAKLQlmaWxsX2Z1bGxwYXRocyh0aGVfYm9vdF9pbmZvLT5kdCwgIiIpOworCWlmICh0cmVlc291cmNlX2Vycm9yKQorCQlkaWUoIlN5bnRheCBlcnJvciBwYXJzaW5nIGlucHV0IHRyZWVcbiIpOwogCiAJcmV0dXJuIHRoZV9ib290X2luZm87CiB9CkBAIC0xNDQsNyArMTQ3LDcgQEAKIAkJCW0gPSBtLT5uZXh0OwogCQl9CiAKLQkJZnByaW50ZihmLCAiMHgleCIsIGJlMzJfdG9fY3B1KCpjcCsrKSk7CisJCWZwcmludGYoZiwgIjB4JXgiLCBmZHQzMl90b19jcHUoKmNwKyspKTsKIAkJaWYgKCh2b2lkICopY3AgPj0gcHJvcGVuZCkKIAkJCWJyZWFrOwogCQlmcHJpbnRmKGYsICIgIik7CkBAIC0xNzMsNyArMTc2LDcgQEAKIAkJfQogCiAJCWZwcmludGYoZiwgIiUwMmhoeCIsICpicCsrKTsKLQkJaWYgKCh2b2lkICopYnAgPj0gcHJvcGVuZCkKKwkJaWYgKChjb25zdCB2b2lkICopYnAgPj0gcHJvcGVuZCkKIAkJCWJyZWFrOwogCQlmcHJpbnRmKGYsICIgIik7CiAJfQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRjLXNyYy92ZXJzaW9uX2dlbi5oIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRjLXNyYy92ZXJzaW9uX2dlbi5oCmluZGV4IDZjMzQzMDMuLjY1OGZmNDIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2R0Yy1zcmMvdmVyc2lvbl9nZW4uaAorKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdGMtc3JjL3ZlcnNpb25fZ2VuLmgKQEAgLTEgKzEgQEAKLSNkZWZpbmUgRFRDX1ZFUlNJT04gIkRUQyAxLjAuMC1nZDZmOWI2MmYiCisjZGVmaW5lIERUQ19WRVJTSU9OICJEVEMgMS4yLjAiCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvYXJjaGVzLmR0cyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9hcmNoZXMuZHRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ5MTEzYjEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvYXJjaGVzLmR0cwpAQCAtMCwwICsxLDI5MyBAQAorLyoKKyAqIERldmljZSBUcmVlIFNvdXJjZSBmb3IgQU1DQyBBcmNoZXMgKGR1YWwgNDYwR1QgYm9hcmQpCisgKgorICogKEMpIENvcHlyaWdodCAyMDA4IEFwcGxpZWQgTWljcm8gQ2lyY3VpdHMgQ29ycG9yYXRpb24KKyAqIFZpY3RvciBHYWxsYXJkbyA8dmdhbGxhcmRvQGFtY2MuY29tPgorICogQWRhbSBHcmFoYW0gPGFncmFoYW1AYW1jYy5jb20+CisgKgorICogQmFzZWQgb24gdGhlIGdsYWNpZXIuZHRzIGZpbGUKKyAqICAgU3RlZmFuIFJvZXNlIDxzckBkZW54LmRlPgorICogICBDb3B5cmlnaHQgMjAwOCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nCisgKgorICogU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKKyAqIHByb2plY3QuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorICogTUEgMDIxMTEtMTMwNyBVU0EKKyAqLworCisvZHRzLXYxLzsKKworLyB7CisJI2FkZHJlc3MtY2VsbHMgPSA8Mj47CisJI3NpemUtY2VsbHMgPSA8MT47CisJbW9kZWwgPSAiYW1jYyxhcmNoZXMiOworCWNvbXBhdGlibGUgPSAiYW1jYyxhcmNoZXMiOworCWRjci1wYXJlbnQgPSA8JnsvY3B1cy9jcHVAMH0+OworCisJYWxpYXNlcyB7CisJCWV0aGVybmV0MCA9ICZFTUFDMDsKKwkJZXRoZXJuZXQxID0gJkVNQUMxOworCQlldGhlcm5ldDIgPSAmRU1BQzI7CisJCXNlcmlhbDAgPSAmVUFSVDA7CisJfTsKKworCWNwdXMgeworCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJI3NpemUtY2VsbHMgPSA8MD47CisKKwkJY3B1QDAgeworCQkJZGV2aWNlX3R5cGUgPSAiY3B1IjsKKwkJCW1vZGVsID0gIlBvd2VyUEMsNDYwR1QiOworCQkJcmVnID0gPDB4MDAwMDAwMDA+OworCQkJY2xvY2stZnJlcXVlbmN5ID0gPDA+OyAvKiBGaWxsZWQgaW4gYnkgVS1Cb290ICovCisJCQl0aW1lYmFzZS1mcmVxdWVuY3kgPSA8MD47IC8qIEZpbGxlZCBpbiBieSBVLUJvb3QgKi8KKwkJCWktY2FjaGUtbGluZS1zaXplID0gPDMyPjsKKwkJCWQtY2FjaGUtbGluZS1zaXplID0gPDMyPjsKKwkJCWktY2FjaGUtc2l6ZSA9IDwzMjc2OD47CisJCQlkLWNhY2hlLXNpemUgPSA8MzI3Njg+OworCQkJZGNyLWNvbnRyb2xsZXI7CisJCQlkY3ItYWNjZXNzLW1ldGhvZCA9ICJuYXRpdmUiOworCQl9OworCX07CisKKwltZW1vcnkgeworCQlkZXZpY2VfdHlwZSA9ICJtZW1vcnkiOworCQlyZWcgPSA8MHgwMDAwMDAwMCAweDAwMDAwMDAwIDB4MDAwMDAwMDA+OyAvKiBGaWxsZWQgaW4gYnkgVS1Cb290ICovCisJfTsKKworCVVJQzA6IGludGVycnVwdC1jb250cm9sbGVyMCB7CisJCWNvbXBhdGlibGUgPSAiaWJtLHVpYy00NjBndCIsImlibSx1aWMiOworCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKKwkJY2VsbC1pbmRleCA9IDwwPjsKKwkJZGNyLXJlZyA9IDwweDBjMCAweDAwOT47CisJCSNhZGRyZXNzLWNlbGxzID0gPDA+OworCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJI2ludGVycnVwdC1jZWxscyA9IDwyPjsKKwl9OworCisJVUlDMTogaW50ZXJydXB0LWNvbnRyb2xsZXIxIHsKKwkJY29tcGF0aWJsZSA9ICJpYm0sdWljLTQ2MGd0IiwiaWJtLHVpYyI7CisJCWludGVycnVwdC1jb250cm9sbGVyOworCQljZWxsLWluZGV4ID0gPDE+OworCQlkY3ItcmVnID0gPDB4MGQwIDB4MDA5PjsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8MD47CisJCSNzaXplLWNlbGxzID0gPDA+OworCQkjaW50ZXJydXB0LWNlbGxzID0gPDI+OworCQlpbnRlcnJ1cHRzID0gPDB4MWUgMHg0IDB4MWYgMHg0PjsgLyogY2FzY2FkZSAqLworCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZVSUMwPjsKKwl9OworCisJVUlDMjogaW50ZXJydXB0LWNvbnRyb2xsZXIyIHsKKwkJY29tcGF0aWJsZSA9ICJpYm0sdWljLTQ2MGd0IiwiaWJtLHVpYyI7CisJCWludGVycnVwdC1jb250cm9sbGVyOworCQljZWxsLWluZGV4ID0gPDI+OworCQlkY3ItcmVnID0gPDB4MGUwIDB4MDA5PjsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8MD47CisJCSNzaXplLWNlbGxzID0gPDA+OworCQkjaW50ZXJydXB0LWNlbGxzID0gPDI+OworCQlpbnRlcnJ1cHRzID0gPDB4YSAweDQgMHhiIDB4ND47IC8qIGNhc2NhZGUgKi8KKwkJaW50ZXJydXB0LXBhcmVudCA9IDwmVUlDMD47CisJfTsKKworCVVJQzM6IGludGVycnVwdC1jb250cm9sbGVyMyB7CisJCWNvbXBhdGlibGUgPSAiaWJtLHVpYy00NjBndCIsImlibSx1aWMiOworCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKKwkJY2VsbC1pbmRleCA9IDwzPjsKKwkJZGNyLXJlZyA9IDwweDBmMCAweDAwOT47CisJCSNhZGRyZXNzLWNlbGxzID0gPDA+OworCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJI2ludGVycnVwdC1jZWxscyA9IDwyPjsKKwkJaW50ZXJydXB0cyA9IDwweDEwIDB4NCAweDExIDB4ND47IC8qIGNhc2NhZGUgKi8KKwkJaW50ZXJydXB0LXBhcmVudCA9IDwmVUlDMD47CisJfTsKKworCVNEUjA6IHNkciB7CisJCWNvbXBhdGlibGUgPSAiaWJtLHNkci00NjBndCI7CisJCWRjci1yZWcgPSA8MHgwMGUgMHgwMDI+OworCX07CisKKwlDUFIwOiBjcHIgeworCQljb21wYXRpYmxlID0gImlibSxjcHItNDYwZ3QiOworCQlkY3ItcmVnID0gPDB4MDBjIDB4MDAyPjsKKwl9OworCisJcGxiIHsKKwkJY29tcGF0aWJsZSA9ICJpYm0scGxiLTQ2MGd0IiwgImlibSxwbGI0IjsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8Mj47CisJCSNzaXplLWNlbGxzID0gPDE+OworCQlyYW5nZXM7CisJCWNsb2NrLWZyZXF1ZW5jeSA9IDwwPjsgLyogRmlsbGVkIGluIGJ5IFUtQm9vdCAqLworCisJCVNEUkFNMDogc2RyYW0geworCQkJY29tcGF0aWJsZSA9ICJpYm0sc2RyYW0tNDYwZ3QiLCAiaWJtLHNkcmFtLTQwNWdwIjsKKwkJCWRjci1yZWcgPSA8MHgwMTAgMHgwMDI+OworCQl9OworCisJCU1BTDA6IG1jbWFsIHsKKwkJCWNvbXBhdGlibGUgPSAiaWJtLG1jbWFsLTQ2MGd0IiwgImlibSxtY21hbDIiOworCQkJZGNyLXJlZyA9IDwweDE4MCAweDA2Mj47CisJCQludW0tdHgtY2hhbnMgPSA8Mz47CisJCQludW0tcngtY2hhbnMgPSA8MjQ+OworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MD47CisJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8JlVJQzI+OworCQkJaW50ZXJydXB0cyA9IDwJLypUWEVPQiovIDB4NiAweDQKKwkJCQkJLypSWEVPQiovIDB4NyAweDQKKwkJCQkJLypTRVJSKi8gIDB4MyAweDQKKwkJCQkJLypUWERFKi8gIDB4NCAweDQKKwkJCQkJLypSWERFKi8gIDB4NSAweDQ+OworCQkJZGVzYy1iYXNlLWFkZHItaGlnaCA9IDwweDg+OworCQl9OworCisJCVBPQjA6IG9wYiB7CisJCQljb21wYXRpYmxlID0gImlibSxvcGItNDYwZ3QiLCAiaWJtLG9wYiI7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDE+OworCQkJcmFuZ2VzID0gPDB4YjAwMDAwMDAgMHgwMDAwMDAwNCAweGIwMDAwMDAwIDB4NTAwMDAwMDA+OworCQkJY2xvY2stZnJlcXVlbmN5ID0gPDA+OyAvKiBGaWxsZWQgaW4gYnkgVS1Cb290ICovCisKKwkJCUVCQzA6IGViYyB7CisJCQkJY29tcGF0aWJsZSA9ICJpYm0sZWJjLTQ2MGd0IiwgImlibSxlYmMiOworCQkJCWRjci1yZWcgPSA8MHgwMTIgMHgwMDI+OworCQkJCSNhZGRyZXNzLWNlbGxzID0gPDI+OworCQkJCSNzaXplLWNlbGxzID0gPDE+OworCQkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwwPjsgLyogRmlsbGVkIGluIGJ5IFUtQm9vdCAqLworCQkJCS8qIHJhbmdlcyBwcm9wZXJ0eSBpcyBzdXBwbGllZCBieSBVLUJvb3QgKi8KKwkJCQlpbnRlcnJ1cHRzID0gPDB4NiAweDQ+OworCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JlVJQzE+OworCQkJfTsKKworCQkJVUFSVDA6IHNlcmlhbEBlZjYwMDMwMCB7CisJCQkJZGV2aWNlX3R5cGUgPSAic2VyaWFsIjsKKwkJCQljb21wYXRpYmxlID0gIm5zMTY1NTAiOworCQkJCXJlZyA9IDwweGVmNjAwMzAwIDB4MDAwMDAwMDg+OworCQkJCXZpcnR1YWwtcmVnID0gPDB4ZWY2MDAzMDA+OworCQkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwwPjsgLyogRmlsbGVkIGluIGJ5IFUtQm9vdCAqLworCQkJCWN1cnJlbnQtc3BlZWQgPSA8MD47IC8qIEZpbGxlZCBpbiBieSBVLUJvb3QgKi8KKwkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZVSUMxPjsKKwkJCQlpbnRlcnJ1cHRzID0gPDB4MSAweDQ+OworCQkJfTsKKworCQkJSUlDMDogaTJjQGVmNjAwNzAwIHsKKwkJCQljb21wYXRpYmxlID0gImlibSxpaWMtNDYwZ3QiLCAiaWJtLGlpYyI7CisJCQkJcmVnID0gPDB4ZWY2MDA3MDAgMHgwMDAwMDAxND47CisJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmVUlDMD47CisJCQkJaW50ZXJydXB0cyA9IDwweDIgMHg0PjsKKwkJCX07CisKKwkJCUlJQzE6IGkyY0BlZjYwMDgwMCB7CisJCQkJY29tcGF0aWJsZSA9ICJpYm0saWljLTQ2MGd0IiwgImlibSxpaWMiOworCQkJCXJlZyA9IDwweGVmNjAwODAwIDB4MDAwMDAwMTQ+OworCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JlVJQzA+OworCQkJCWludGVycnVwdHMgPSA8MHgzIDB4ND47CisJCQl9OworCisJCQlUQUgwOiBlbWFjLXRhaEBlZjYwMTM1MCB7CisJCQkJY29tcGF0aWJsZSA9ICJpYm0sdGFoLTQ2MGd0IiwgImlibSx0YWgiOworCQkJCXJlZyA9IDwweGVmNjAxMzUwIDB4MDAwMDAwMzA+OworCQkJfTsKKworCQkJVEFIMTogZW1hYy10YWhAZWY2MDE0NTAgeworCQkJCWNvbXBhdGlibGUgPSAiaWJtLHRhaC00NjBndCIsICJpYm0sdGFoIjsKKwkJCQlyZWcgPSA8MHhlZjYwMTQ1MCAweDAwMDAwMDMwPjsKKwkJCX07CisKKwkJCUVNQUMwOiBldGhlcm5ldEBlZjYwMGUwMCB7CisJCQkJZGV2aWNlX3R5cGUgPSAibmV0d29yayI7CisJCQkJY29tcGF0aWJsZSA9ICJpYm0sZW1hYy00NjBndCIsICJpYm0sZW1hYzRzeW5jIjsKKwkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZFTUFDMD47CisJCQkJaW50ZXJydXB0cyA9IDwweDAgMHgxPjsKKwkJCQkjaW50ZXJydXB0LWNlbGxzID0gPDE+OworCQkJCSNhZGRyZXNzLWNlbGxzID0gPDA+OworCQkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJCWludGVycnVwdC1tYXAgPSA8LypTdGF0dXMqLyAweDAgJlVJQzIgMHgxMCAweDQKKwkJCQkJCSAvKldha2UqLyAgIDB4MSAmVUlDMiAweDE0IDB4ND47CisJCQkJcmVnID0gPDB4ZWY2MDBlMDAgMHgwMDAwMDBjND47CisJCQkJbG9jYWwtbWFjLWFkZHJlc3MgPSBbMDAwMDAwMDAwMDAwXTsgLyogRmlsbGVkIGluIGJ5IFUtQm9vdCAqLworCQkJCW1hbC1kZXZpY2UgPSA8Jk1BTDA+OworCQkJCW1hbC10eC1jaGFubmVsID0gPDA+OworCQkJCW1hbC1yeC1jaGFubmVsID0gPDA+OworCQkJCWNlbGwtaW5kZXggPSA8MD47CisJCQkJbWF4LWZyYW1lLXNpemUgPSA8OTAwMD47CisJCQkJcngtZmlmby1zaXplID0gPDQwOTY+OworCQkJCXR4LWZpZm8tc2l6ZSA9IDwyMDQ4PjsKKwkJCQlwaHktbW9kZSA9ICJzZ21paSI7CisJCQkJcGh5LW1hcCA9IDwweGZmZmZmZmZmPjsKKwkJCQlncGNzLWFkZHJlc3MgPSA8MHgwMDAwMDAwYT47CisJCQkJdGFoLWRldmljZSA9IDwmVEFIMD47CisJCQkJdGFoLWNoYW5uZWwgPSA8MD47CisJCQkJaGFzLWludmVydGVkLXN0YWNyLW9jOworCQkJCWhhcy1uZXctc3RhY3Itc3Rhb3BjOworCQkJfTsKKworCQkJRU1BQzE6IGV0aGVybmV0QGVmNjAwZjAwIHsKKwkJCQlkZXZpY2VfdHlwZSA9ICJuZXR3b3JrIjsKKwkJCQljb21wYXRpYmxlID0gImlibSxlbWFjLTQ2MGd0IiwgImlibSxlbWFjNHN5bmMiOworCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JkVNQUMxPjsKKwkJCQlpbnRlcnJ1cHRzID0gPDB4MCAweDE+OworCQkJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8MT47CisJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MD47CisJCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQkJaW50ZXJydXB0LW1hcCA9IDwvKlN0YXR1cyovIDB4MCAmVUlDMiAweDExIDB4NAorCQkJCQkJIC8qV2FrZSovICAgMHgxICZVSUMyIDB4MTUgMHg0PjsKKwkJCQlyZWcgPSA8MHhlZjYwMGYwMCAweDAwMDAwMGM0PjsKKwkJCQlsb2NhbC1tYWMtYWRkcmVzcyA9IFswMDAwMDAwMDAwMDBdOyAvKiBGaWxsZWQgaW4gYnkgVS1Cb290ICovCisJCQkJbWFsLWRldmljZSA9IDwmTUFMMD47CisJCQkJbWFsLXR4LWNoYW5uZWwgPSA8MT47CisJCQkJbWFsLXJ4LWNoYW5uZWwgPSA8OD47CisJCQkJY2VsbC1pbmRleCA9IDwxPjsKKwkJCQltYXgtZnJhbWUtc2l6ZSA9IDw5MDAwPjsKKwkJCQlyeC1maWZvLXNpemUgPSA8NDA5Nj47CisJCQkJdHgtZmlmby1zaXplID0gPDIwNDg+OworCQkJCXBoeS1tb2RlID0gInNnbWlpIjsKKwkJCQlwaHktbWFwID0gPDB4MDAwMDAwMDA+OworCQkJCWdwY3MtYWRkcmVzcyA9IDwweDAwMDAwMDBiPjsKKwkJCQl0YWgtZGV2aWNlID0gPCZUQUgxPjsKKwkJCQl0YWgtY2hhbm5lbCA9IDwxPjsKKwkJCQloYXMtaW52ZXJ0ZWQtc3RhY3Itb2M7CisJCQkJaGFzLW5ldy1zdGFjci1zdGFvcGM7CisJCQkJbWRpby1kZXZpY2UgPSA8JkVNQUMwPjsKKwkJCX07CisKKwkJCUVNQUMyOiBldGhlcm5ldEBlZjYwMTEwMCB7CisJCQkJZGV2aWNlX3R5cGUgPSAibmV0d29yayI7CisJCQkJY29tcGF0aWJsZSA9ICJpYm0sZW1hYy00NjBndCIsICJpYm0sZW1hYzRzeW5jIjsKKwkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZFTUFDMj47CisJCQkJaW50ZXJydXB0cyA9IDwweDAgMHgxPjsKKwkJCQkjaW50ZXJydXB0LWNlbGxzID0gPDE+OworCQkJCSNhZGRyZXNzLWNlbGxzID0gPDA+OworCQkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJCWludGVycnVwdC1tYXAgPSA8LypTdGF0dXMqLyAweDAgJlVJQzIgMHgxMiAweDQKKwkJCQkJCSAvKldha2UqLyAgIDB4MSAmVUlDMiAweDE2IDB4ND47CisJCQkJcmVnID0gPDB4ZWY2MDExMDAgMHgwMDAwMDBjND47CisJCQkJbG9jYWwtbWFjLWFkZHJlc3MgPSBbMDAwMDAwMDAwMDAwXTsgLyogRmlsbGVkIGluIGJ5IFUtQm9vdCAqLworCQkJCW1hbC1kZXZpY2UgPSA8Jk1BTDA+OworCQkJCW1hbC10eC1jaGFubmVsID0gPDI+OworCQkJCW1hbC1yeC1jaGFubmVsID0gPDE2PjsKKwkJCQljZWxsLWluZGV4ID0gPDI+OworCQkJCW1heC1mcmFtZS1zaXplID0gPDkwMDA+OworCQkJCXJ4LWZpZm8tc2l6ZSA9IDw0MDk2PjsKKwkJCQl0eC1maWZvLXNpemUgPSA8MjA0OD47CisJCQkJcGh5LW1vZGUgPSAic2dtaWkiOworCQkJCXBoeS1tYXAgPSA8MHgwMDAwMDAwMT47CisJCQkJZ3Bjcy1hZGRyZXNzID0gPDB4MDAwMDAwMEM+OworCQkJCWhhcy1pbnZlcnRlZC1zdGFjci1vYzsKKwkJCQloYXMtbmV3LXN0YWNyLXN0YW9wYzsKKwkJCQltZGlvLWRldmljZSA9IDwmRU1BQzA+OworCQkJfTsKKwkJfTsKKwl9OworfTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9hc3A4MzR4LXJlZGJvb3QuZHRzIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL2FzcDgzNHgtcmVkYm9vdC5kdHMKaW5kZXggOGIxYmIwZS4uNjIzNWZjYSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL2FzcDgzNHgtcmVkYm9vdC5kdHMKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL2FzcDgzNHgtcmVkYm9vdC5kdHMKQEAgLTEzMCwyNCArMTMwLDI4IEBACiAJCQlkbWEtY2hhbm5lbEAwIHsKIAkJCQljb21wYXRpYmxlID0gImZzbCxtcGM4MzQ3LWRtYS1jaGFubmVsIiwgImZzbCxlbG8tZG1hLWNoYW5uZWwiOwogCQkJCXJlZyA9IDwwIDB4ODA+OworCQkJCWNlbGwtaW5kZXggPSA8MD47CiAJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CiAJCQkJaW50ZXJydXB0cyA9IDw3MSA4PjsKIAkJCX07CiAJCQlkbWEtY2hhbm5lbEA4MCB7CiAJCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODM0Ny1kbWEtY2hhbm5lbCIsICJmc2wsZWxvLWRtYS1jaGFubmVsIjsKIAkJCQlyZWcgPSA8MHg4MCAweDgwPjsKKwkJCQljZWxsLWluZGV4ID0gPDE+OwogCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OwogCQkJCWludGVycnVwdHMgPSA8NzEgOD47CiAJCQl9OwogCQkJZG1hLWNoYW5uZWxAMTAwIHsKIAkJCQljb21wYXRpYmxlID0gImZzbCxtcGM4MzQ3LWRtYS1jaGFubmVsIiwgImZzbCxlbG8tZG1hLWNoYW5uZWwiOwogCQkJCXJlZyA9IDwweDEwMCAweDgwPjsKKwkJCQljZWxsLWluZGV4ID0gPDI+OwogCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OwogCQkJCWludGVycnVwdHMgPSA8NzEgOD47CiAJCQl9OwogCQkJZG1hLWNoYW5uZWxAMTgwIHsKIAkJCQljb21wYXRpYmxlID0gImZzbCxtcGM4MzQ3LWRtYS1jaGFubmVsIiwgImZzbCxlbG8tZG1hLWNoYW5uZWwiOwogCQkJCXJlZyA9IDwweDE4MCAweDI4PjsKKwkJCQljZWxsLWluZGV4ID0gPDM+OwogCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OwogCQkJCWludGVycnVwdHMgPSA8NzEgOD47CiAJCQl9OwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL2dlZl9zYmM2MTAuZHRzIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL2dlZl9zYmM2MTAuZHRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZlZDYwODMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvZ2VmX3NiYzYxMC5kdHMKQEAgLTAsMCArMSwyOTMgQEAKKy8qCisgKiBHRSBGYW51YyBTQkM2MTAgRGV2aWNlIFRyZWUgU291cmNlCisgKgorICogQ29weXJpZ2h0IDIwMDggR0UgRmFudWMgSW50ZWxsaWdlbnQgUGxhdGZvcm1zIEVtYmVkZGVkIFN5c3RlbXMsIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIEJhc2VkIG9uOiBTQlMgQ002IERldmljZSBUcmVlIFNvdXJjZQorICogQ29weXJpZ2h0IDIwMDcgU0JTIFRlY2hub2xvZ2llcyBHbWJIICYgQ28uIEtHCisgKiBBbmQ6IG1wYzg2NDFfaHBjbi5kdHMgKE1QQzg2NDEgSFBDTiBEZXZpY2UgVHJlZSBTb3VyY2UpCisgKiBDb3B5cmlnaHQgMjAwNiBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciBJbmMuCisgKi8KKworLyoKKyAqIENvbXBpbGVkIHdpdGggZHRjIC1JIGR0cyAtTyBkdGIgLW8gZ2VmX3NiYzYxMC5kdGIgZ2VmX3NiYzYxMC5kdHMKKyAqLworCisvZHRzLXYxLzsKKworLyB7CisJbW9kZWwgPSAiR0VGX1NCQzYxMCI7CisJY29tcGF0aWJsZSA9ICJnZWYsc2JjNjEwIjsKKwkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkjc2l6ZS1jZWxscyA9IDwxPjsKKworCWFsaWFzZXMgeworCQlldGhlcm5ldDAgPSAmZW5ldDA7CisJCWV0aGVybmV0MSA9ICZlbmV0MTsKKwkJc2VyaWFsMCA9ICZzZXJpYWwwOworCQlzZXJpYWwxID0gJnNlcmlhbDE7CisJCXBjaTAgPSAmcGNpMDsKKwl9OworCisJY3B1cyB7CisJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwwPjsKKworCQlQb3dlclBDLDg2NDFAMCB7CisJCQlkZXZpY2VfdHlwZSA9ICJjcHUiOworCQkJcmVnID0gPDA+OworCQkJZC1jYWNoZS1saW5lLXNpemUgPSA8MzI+OwkvLyAzMiBieXRlcworCQkJaS1jYWNoZS1saW5lLXNpemUgPSA8MzI+OwkvLyAzMiBieXRlcworCQkJZC1jYWNoZS1zaXplID0gPDMyNzY4PjsJCS8vIEwxLCAzMksKKwkJCWktY2FjaGUtc2l6ZSA9IDwzMjc2OD47CQkvLyBMMSwgMzJLCisJCQl0aW1lYmFzZS1mcmVxdWVuY3kgPSA8MD47CS8vIEZyb20gdWJvb3QKKwkJCWJ1cy1mcmVxdWVuY3kgPSA8MD47CQkvLyBGcm9tIHVib290CisJCQljbG9jay1mcmVxdWVuY3kgPSA8MD47CQkvLyBGcm9tIHVib290CisJCX07CisJCVBvd2VyUEMsODY0MUAxIHsKKwkJCWRldmljZV90eXBlID0gImNwdSI7CisJCQlyZWcgPSA8MT47CisJCQlkLWNhY2hlLWxpbmUtc2l6ZSA9IDwzMj47CS8vIDMyIGJ5dGVzCisJCQlpLWNhY2hlLWxpbmUtc2l6ZSA9IDwzMj47CS8vIDMyIGJ5dGVzCisJCQlkLWNhY2hlLXNpemUgPSA8MzI3Njg+OwkJLy8gTDEsIDMySworCQkJaS1jYWNoZS1zaXplID0gPDMyNzY4PjsJCS8vIEwxLCAzMksKKwkJCXRpbWViYXNlLWZyZXF1ZW5jeSA9IDwwPjsJLy8gRnJvbSB1Ym9vdAorCQkJYnVzLWZyZXF1ZW5jeSA9IDwwPjsJCS8vIEZyb20gdWJvb3QKKwkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwwPjsJCS8vIEZyb20gdWJvb3QKKwkJfTsKKwl9OworCisJbWVtb3J5IHsKKwkJZGV2aWNlX3R5cGUgPSAibWVtb3J5IjsKKwkJcmVnID0gPDB4MCAweDQwMDAwMDAwPjsJLy8gc2V0IGJ5IHVib290CisJfTsKKworCWxvY2FsYnVzQGZlZjA1MDAwIHsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8Mj47CisJCSNzaXplLWNlbGxzID0gPDE+OworCQljb21wYXRpYmxlID0gImZzbCxtcGM4NjQxLWxvY2FsYnVzIiwgInNpbXBsZS1idXMiOworCQlyZWcgPSA8MHhmODAwNTAwMCAweDEwMDA+OworCQlpbnRlcnJ1cHRzID0gPDE5IDI+OworCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKworCQlyYW5nZXMgPSA8MCAwIDB4ZmYwMDAwMDAgMHgwMTAwMDAwMCAgICAgLy8gMTZNQiBCb290IGZsYXNoCisJCQkgIDEgMCAweGU4MDAwMDAwIDB4MDgwMDAwMDAgICAgIC8vIFBhZ2VkIEZsYXNoIDAKKwkJCSAgMiAwIDB4ZTAwMDAwMDAgMHgwODAwMDAwMCAgICAgLy8gUGFnZWQgRmxhc2ggMQorCQkJICAzIDAgMHhmYzEwMDAwMCAweDAwMDIwMDAwICAgICAvLyBOVlJBTQorCQkJICA0IDAgMHhmYzAwMDAwMCAweDAwMDA4MDAwICAgICAvLyBGUEdBCisJCQkgIDUgMCAweGZjMDA4MDAwIDB4MDAwMDgwMDAgICAgIC8vIEFGSVggRlBHQQorCQkJICA2IDAgMHhmZDAwMDAwMCAweDAwODAwMDAwICAgICAvLyBJTyBGUEdBICg4LWJpdCkKKwkJCSAgNyAwIDB4ZmQ4MDAwMDAgMHgwMDgwMDAwMD47ICAgLy8gSU8gRlBHQSAoMzItYml0KQorCisJCWZwZ2FANCwwIHsKKwkJCWNvbXBhdGlibGUgPSAiZ2VmLGZwZ2EtcmVncyI7CisJCQlyZWcgPSA8MHg0IDB4MCAweDQwPjsKKwkJfTsKKwkJZ2VmX3BpYzogcGljQDQsNDAwMCB7CisJCQkjaW50ZXJydXB0LWNlbGxzID0gPDE+OworCQkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CisJCQljb21wYXRpYmxlID0gImdlZixmcGdhLXBpYyI7CisJCQlyZWcgPSA8MHg0IDB4NDAwMCAweDIwPjsKKwkJCWludGVycnVwdHMgPSA8MHg4CisJCQkJICAgICAgMHg5PjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCisJCX07CisJfTsKKworCXNvY0BmZWYwMDAwMCB7CisJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJI2ludGVycnVwdC1jZWxscyA9IDwyPjsKKwkJZGV2aWNlX3R5cGUgPSAic29jIjsKKwkJY29tcGF0aWJsZSA9ICJzaW1wbGUtYnVzIjsKKwkJcmFuZ2VzID0gPDB4MCAweGZlZjAwMDAwIDB4MDAxMDAwMDA+OworCQlyZWcgPSA8MHhmZWYwMDAwMCAweDEwMDAwMD47CS8vIENDU1JCQVIgMU0KKwkJYnVzLWZyZXF1ZW5jeSA9IDwwPjsKKworCQlpMmMxOiBpMmNAMzAwMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJY29tcGF0aWJsZSA9ICJmc2wtaTJjIjsKKwkJCXJlZyA9IDwweDMwMDAgMHgxMDA+OworCQkJaW50ZXJydXB0cyA9IDwweDJiIDB4Mj47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCWRmc3JyOworCisJCQlldGlANmIgeworCQkJCWNvbXBhdGlibGUgPSAiZGFsbGFzLGRzMTY4MiI7CisJCQkJcmVnID0gPDB4NmI+OworCQkJfTsKKwkJfTsKKworCQlpMmMyOiBpMmNAMzEwMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJY29tcGF0aWJsZSA9ICJmc2wtaTJjIjsKKwkJCXJlZyA9IDwweDMxMDAgMHgxMDA+OworCQkJaW50ZXJydXB0cyA9IDwweDJiIDB4Mj47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCWRmc3JyOworCQl9OworCisJCWRtYUAyMTMwMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDE+OworCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODY0MS1kbWEiLCAiZnNsLGVsb3BsdXMtZG1hIjsKKwkJCXJlZyA9IDwweDIxMzAwIDB4ND47CisJCQlyYW5nZXMgPSA8MHgwIDB4MjExMDAgMHgyMDA+OworCQkJY2VsbC1pbmRleCA9IDwwPjsKKwkJCWRtYS1jaGFubmVsQDAgeworCQkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzg2NDEtZG1hLWNoYW5uZWwiLAorCQkJCQkgICAiZnNsLGVsb3BsdXMtZG1hLWNoYW5uZWwiOworCQkJCXJlZyA9IDwweDAgMHg4MD47CisJCQkJY2VsbC1pbmRleCA9IDwwPjsKKwkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCQlpbnRlcnJ1cHRzID0gPDIwIDI+OworCQkJfTsKKwkJCWRtYS1jaGFubmVsQDgwIHsKKwkJCQljb21wYXRpYmxlID0gImZzbCxtcGM4NjQxLWRtYS1jaGFubmVsIiwKKwkJCQkJICAgImZzbCxlbG9wbHVzLWRtYS1jaGFubmVsIjsKKwkJCQlyZWcgPSA8MHg4MCAweDgwPjsKKwkJCQljZWxsLWluZGV4ID0gPDE+OworCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJCWludGVycnVwdHMgPSA8MjEgMj47CisJCQl9OworCQkJZG1hLWNoYW5uZWxAMTAwIHsKKwkJCQljb21wYXRpYmxlID0gImZzbCxtcGM4NjQxLWRtYS1jaGFubmVsIiwKKwkJCQkJICAgImZzbCxlbG9wbHVzLWRtYS1jaGFubmVsIjsKKwkJCQlyZWcgPSA8MHgxMDAgMHg4MD47CisJCQkJY2VsbC1pbmRleCA9IDwyPjsKKwkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCQlpbnRlcnJ1cHRzID0gPDIyIDI+OworCQkJfTsKKwkJCWRtYS1jaGFubmVsQDE4MCB7CisJCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODY0MS1kbWEtY2hhbm5lbCIsCisJCQkJCSAgICJmc2wsZWxvcGx1cy1kbWEtY2hhbm5lbCI7CisJCQkJcmVnID0gPDB4MTgwIDB4ODA+OworCQkJCWNlbGwtaW5kZXggPSA8Mz47CisJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCQkJaW50ZXJydXB0cyA9IDwyMyAyPjsKKwkJCX07CisJCX07CisKKwkJbWRpb0AyNDUyMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci1tZGlvIjsKKwkJCXJlZyA9IDwweDI0NTIwIDB4MjA+OworCisJCQlwaHkwOiBldGhlcm5ldC1waHlAMCB7CisJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmZ2VmX3BpYz47CisJCQkJaW50ZXJydXB0cyA9IDwweDkgMHg0PjsKKwkJCQlyZWcgPSA8MT47CisJCQl9OworCQkJcGh5MjogZXRoZXJuZXQtcGh5QDIgeworCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JmdlZl9waWM+OworCQkJCWludGVycnVwdHMgPSA8MHg4IDB4ND47CisJCQkJcmVnID0gPDM+OworCQkJfTsKKwkJfTsKKworCQllbmV0MDogZXRoZXJuZXRAMjQwMDAgeworCQkJZGV2aWNlX3R5cGUgPSAibmV0d29yayI7CisJCQltb2RlbCA9ICJlVFNFQyI7CisJCQljb21wYXRpYmxlID0gImdpYW5mYXIiOworCQkJcmVnID0gPDB4MjQwMDAgMHgxMDAwPjsKKwkJCWxvY2FsLW1hYy1hZGRyZXNzID0gWyAwMCAwMCAwMCAwMCAwMCAwMCBdOworCQkJaW50ZXJydXB0cyA9IDwweDFkIDB4MiAweDFlIDB4MiAweDIyIDB4Mj47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCXBoeS1oYW5kbGUgPSA8JnBoeTA+OworCQkJcGh5LWNvbm5lY3Rpb24tdHlwZSA9ICJnbWlpIjsKKwkJfTsKKworCQllbmV0MTogZXRoZXJuZXRAMjYwMDAgeworCQkJZGV2aWNlX3R5cGUgPSAibmV0d29yayI7CisJCQltb2RlbCA9ICJlVFNFQyI7CisJCQljb21wYXRpYmxlID0gImdpYW5mYXIiOworCQkJcmVnID0gPDB4MjYwMDAgMHgxMDAwPjsKKwkJCWxvY2FsLW1hYy1hZGRyZXNzID0gWyAwMCAwMCAwMCAwMCAwMCAwMCBdOworCQkJaW50ZXJydXB0cyA9IDwweDFmIDB4MiAweDIwIDB4MiAweDIxIDB4Mj47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCXBoeS1oYW5kbGUgPSA8JnBoeTI+OworCQkJcGh5LWNvbm5lY3Rpb24tdHlwZSA9ICJnbWlpIjsKKwkJfTsKKworCQlzZXJpYWwwOiBzZXJpYWxANDUwMCB7CisJCQljZWxsLWluZGV4ID0gPDA+OworCQkJZGV2aWNlX3R5cGUgPSAic2VyaWFsIjsKKwkJCWNvbXBhdGlibGUgPSAibnMxNjU1MCI7CisJCQlyZWcgPSA8MHg0NTAwIDB4MTAwPjsKKwkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwwPjsKKwkJCWludGVycnVwdHMgPSA8MHgyYSAweDI+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCX07CisKKwkJc2VyaWFsMTogc2VyaWFsQDQ2MDAgeworCQkJY2VsbC1pbmRleCA9IDwxPjsKKwkJCWRldmljZV90eXBlID0gInNlcmlhbCI7CisJCQljb21wYXRpYmxlID0gIm5zMTY1NTAiOworCQkJcmVnID0gPDB4NDYwMCAweDEwMD47CisJCQljbG9jay1mcmVxdWVuY3kgPSA8MD47CisJCQlpbnRlcnJ1cHRzID0gPDB4MWMgMHgyPjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQl9OworCisJCW1waWM6IHBpY0A0MDAwMCB7CisJCQljbG9jay1mcmVxdWVuY3kgPSA8MD47CisJCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDA+OworCQkJI2ludGVycnVwdC1jZWxscyA9IDwyPjsKKwkJCXJlZyA9IDwweDQwMDAwIDB4NDAwMDA+OworCQkJY29tcGF0aWJsZSA9ICJjaHJwLG9wZW4tcGljIjsKKwkJCWRldmljZV90eXBlID0gIm9wZW4tcGljIjsKKwkJfTsKKworCQlnbG9iYWwtdXRpbGl0aWVzQGUwMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzg2NDEtZ3V0cyI7CisJCQlyZWcgPSA8MHhlMDAwMCAweDEwMDA+OworCQkJZnNsLGhhcy1yc3RjcjsKKwkJfTsKKwl9OworCisJcGNpMDogcGNpZUBmZWYwODAwMCB7CisJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzg2NDEtcGNpZSI7CisJCWRldmljZV90eXBlID0gInBjaSI7CisJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8MT47CisJCSNzaXplLWNlbGxzID0gPDI+OworCQkjYWRkcmVzcy1jZWxscyA9IDwzPjsKKwkJcmVnID0gPDB4ZmVmMDgwMDAgMHgxMDAwPjsKKwkJYnVzLXJhbmdlID0gPDB4MCAweGZmPjsKKwkJcmFuZ2VzID0gPDB4MDIwMDAwMDAgMHgwIDB4ODAwMDAwMDAgMHg4MDAwMDAwMCAweDAgMHg0MDAwMDAwMAorCQkJICAweDAxMDAwMDAwIDB4MCAweDAwMDAwMDAwIDB4ZmUwMDAwMDAgMHgwIDB4MDA0MDAwMDA+OworCQljbG9jay1mcmVxdWVuY3kgPSA8MzMzMzMzMzM+OworCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJaW50ZXJydXB0cyA9IDwweDE4IDB4Mj47CisJCWludGVycnVwdC1tYXAtbWFzayA9IDwweGY4MDAgMHgwIDB4MCAweDc+OworCQlpbnRlcnJ1cHQtbWFwID0gPAorCQkJMHgwMDAwIDB4MCAweDAgMHgxICZtcGljIDB4MCAweDEKKwkJCTB4MDAwMCAweDAgMHgwIDB4MiAmbXBpYyAweDEgMHgxCisJCQkweDAwMDAgMHgwIDB4MCAweDMgJm1waWMgMHgyIDB4MQorCQkJMHgwMDAwIDB4MCAweDAgMHg0ICZtcGljIDB4MyAweDEKKwkJPjsKKworCQlwY2llQDAgeworCQkJcmVnID0gPDAgMCAwIDAgMD47CisJCQkjc2l6ZS1jZWxscyA9IDwyPjsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDM+OworCQkJZGV2aWNlX3R5cGUgPSAicGNpIjsKKwkJCXJhbmdlcyA9IDwweDAyMDAwMDAwIDB4MCAweDgwMDAwMDAwCisJCQkJICAweDAyMDAwMDAwIDB4MCAweDgwMDAwMDAwCisJCQkJICAweDAgMHg0MDAwMDAwMAorCisJCQkJICAweDAxMDAwMDAwIDB4MCAweDAwMDAwMDAwCisJCQkJICAweDAxMDAwMDAwIDB4MCAweDAwMDAwMDAwCisJCQkJICAweDAgMHgwMDQwMDAwMD47CisJCX07CisJfTsKK307CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvZ2xhY2llci5kdHMgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvZ2xhY2llci5kdHMKaW5kZXggMjRjZjBkYi4uZjM3ODdhMiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL2dsYWNpZXIuZHRzCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9nbGFjaWVyLmR0cwpAQCAtMTQsNyArMTQsNyBAQAogCSNhZGRyZXNzLWNlbGxzID0gPDI+OwogCSNzaXplLWNlbGxzID0gPDE+OwogCW1vZGVsID0gImFtY2MsZ2xhY2llciI7Ci0JY29tcGF0aWJsZSA9ICJhbWNjLGdsYWNpZXIiLCAiYW1jYyxjYW55b25sYW5kcyI7CisJY29tcGF0aWJsZSA9ICJhbWNjLGdsYWNpZXIiOwogCWRjci1wYXJlbnQgPSA8JnsvY3B1cy9jcHVAMH0+OwogCiAJYWxpYXNlcyB7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbWdjb2dlLmR0cyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tZ2NvZ2UuZHRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYzMzI1NWEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbWdjb2dlLmR0cwpAQCAtMCwwICsxLDE3NCBAQAorLyoKKyAqIERldmljZSBUcmVlIGZvciB0aGUgTUdDT0dFIHBsYXR0Zm9ybSBmcm9tIGtleW1pbGUKKyAqCisgKiBDb3B5cmlnaHQgMjAwOCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nIEdtYkgKKyAqIEhlaWtvIFNjaG9jaGVyIDxoc0BkZW54LmRlPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworL2R0cy12MS87CisvIHsKKwltb2RlbCA9ICJNR0NPR0UiOworCWNvbXBhdGlibGUgPSAia2V5bWlsZSxtZ2NvZ2UiOworCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCSNzaXplLWNlbGxzID0gPDE+OworCisJYWxpYXNlcyB7CisJCWV0aGVybmV0MCA9ICZldGgwOworCQlzZXJpYWwwID0gJnNtYzI7CisJfTsKKworCWNwdXMgeworCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJI3NpemUtY2VsbHMgPSA8MD47CisKKwkJUG93ZXJQQyw4MjQ3QDAgeworCQkJZGV2aWNlX3R5cGUgPSAiY3B1IjsKKwkJCXJlZyA9IDwwPjsKKwkJCWQtY2FjaGUtbGluZS1zaXplID0gPDMyPjsKKwkJCWktY2FjaGUtbGluZS1zaXplID0gPDMyPjsKKwkJCWQtY2FjaGUtc2l6ZSA9IDwxNjM4ND47CisJCQlpLWNhY2hlLXNpemUgPSA8MTYzODQ+OworCQkJdGltZWJhc2UtZnJlcXVlbmN5ID0gPDA+OyAvKiBGaWxsZWQgaW4gYnkgVS1Cb290ICovCisJCQljbG9jay1mcmVxdWVuY3kgPSA8MD47IC8qIEZpbGxlZCBpbiBieSBVLUJvb3QgKi8KKwkJCWJ1cy1mcmVxdWVuY3kgPSA8MD47IC8qIEZpbGxlZCBpbiBieSBVLUJvb3QgKi8KKwkJfTsKKwl9OworCisJbG9jYWxidXNAZjAwMTAxMDAgeworCQljb21wYXRpYmxlID0gImZzbCxtcGM4MjQ3LWxvY2FsYnVzIiwKKwkJICAgICAgICAgICAgICJmc2wscHEyLWxvY2FsYnVzIiwKKwkJICAgICAgICAgICAgICJzaW1wbGUtYnVzIjsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8Mj47CisJCSNzaXplLWNlbGxzID0gPDE+OworCQlyZWcgPSA8MHhmMDAxMDEwMCAweDQwPjsKKworCQlyYW5nZXMgPSA8MCAwIDB4ZmUwMDAwMDAgMHgwMDQwMDAwMAorCQkJICA1IDAgMHg1MDAwMDAwMCAweDIwMDAwMDAwCisJCQk+OyAvKiBGaWxsZWQgaW4gYnkgVS1Cb290ICovCisKKwkJZmxhc2hAMCwwIHsKKwkJCWNvbXBhdGlibGUgPSAiY2ZpLWZsYXNoIjsKKwkJCXJlZyA9IDwwIDB4MCAweDQwMDAwMD47CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDE+OworCQkJYmFuay13aWR0aCA9IDwxPjsKKwkJCWRldmljZS13aWR0aCA9IDwxPjsKKwkJCXBhcnRpdGlvbkAwIHsKKwkJCQlsYWJlbCA9ICJ1LWJvb3QiOworCQkJCXJlZyA9IDwwIDB4NDAwMDA+OworCQkJfTsKKwkJCXBhcnRpdGlvbkA0MDAwMCB7CisJCQkJbGFiZWwgPSAiZW52IjsKKwkJCQlyZWcgPSA8MHg0MDAwMCAweDIwMDAwPjsKKwkJCX07CisJCQlwYXJ0aXRpb25ANjAwMDAgeworCQkJCWxhYmVsID0gImtlcm5lbCI7CisJCQkJcmVnID0gPDB4NjAwMDAgMHgyMjAwMDA+OworCQkJfTsKKwkJCXBhcnRpdGlvbkAyODAwMDAgeworCQkJCWxhYmVsID0gImR0YiI7CisJCQkJcmVnID0gPDB4MjgwMDAwIDB4MjAwMDA+OworCQkJfTsKKwkJfTsKKworCQlmbGFzaEA1LDAgeworCQkJY29tcGF0aWJsZSA9ICJjZmktZmxhc2giOworCQkJcmVnID0gPDUgMHgwIDB4MjAwMDAwMD47CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDE+OworCQkJYmFuay13aWR0aCA9IDwyPjsKKwkJCWRldmljZS13aWR0aCA9IDwyPjsKKwkJCXBhcnRpdGlvbkAwIHsKKwkJCQlsYWJlbCA9ICJyYW1kaXNrIjsKKwkJCQlyZWcgPSA8MCAweDdhMDAwMD47CisJCQl9OworCQkJcGFydGl0aW9uQDdhMDAwMCB7CisJCQkJbGFiZWwgPSAidXNlciI7CisJCQkJcmVnID0gPDB4N2EwMDAwIDB4MTg2MDAwMD47CisJCQl9OworCQl9OworCX07CisKKwltZW1vcnkgeworCQlkZXZpY2VfdHlwZSA9ICJtZW1vcnkiOworCQlyZWcgPSA8MCAwPjsgLyogRmlsbGVkIGluIGJ5IFUtQm9vdCAqLworCX07CisKKwlzb2NAZjAwMDAwMDAgeworCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJI3NpemUtY2VsbHMgPSA8MT47CisJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzgyNDctaW1tciIsICJmc2wscHEyLXNvYyIsICJzaW1wbGUtYnVzIjsKKwkJcmFuZ2VzID0gPDB4MDAwMDAwMDAgMHhmMDAwMDAwMCAweDAwMDUzMDAwPjsKKworCQkvLyBUZW1wb3JhcnkgdW50aWwgY29kZSBzdG9wcyBkZXBlbmRpbmcgb24gaXQuCisJCWRldmljZV90eXBlID0gInNvYyI7CisKKwkJY3BtQDExOWMwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MT47CisJCQkjaW50ZXJydXB0LWNlbGxzID0gPDI+OworCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODI0Ny1jcG0iLCAiZnNsLGNwbTIiLAorCQkJCQkic2ltcGxlLWJ1cyI7CisJCQlyZWcgPSA8MHgxMTljMCAweDMwPjsKKwkJCXJhbmdlczsKKworCQkJbXVyYW0geworCQkJCWNvbXBhdGlibGUgPSAiZnNsLGNwbS1tdXJhbSI7CisJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkJI3NpemUtY2VsbHMgPSA8MT47CisJCQkJcmFuZ2VzID0gPDAgMCAweDEwMDAwPjsKKworCQkJCWRhdGFAMCB7CisJCQkJCWNvbXBhdGlibGUgPSAiZnNsLGNwbS1tdXJhbS1kYXRhIjsKKwkJCQkJcmVnID0gPDB4ODAgMHgxZjgwIDB4OTgwMCAweDgwMD47CisJCQkJfTsKKwkJCX07CisKKwkJCWJyZ0AxMTlmMCB7CisJCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODI0Ny1icmciLAorCQkJCSAgICAgICAgICAgICAiZnNsLGNwbTItYnJnIiwKKwkJCQkgICAgICAgICAgICAgImZzbCxjcG0tYnJnIjsKKwkJCQlyZWcgPSA8MHgxMTlmMCAweDEwIDB4MTE1ZjAgMHgxMD47CisJCQl9OworCisJCQkvKiBNb25pdG9yIHBvcnQvU01DMiAqLworCQkJc21jMjogc2VyaWFsQDExYTkwIHsKKwkJCQlkZXZpY2VfdHlwZSA9ICJzZXJpYWwiOworCQkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzgyNDctc21jLXVhcnQiLAorCQkJCSAgICAgICAgICAgICAiZnNsLGNwbTItc21jLXVhcnQiOworCQkJCXJlZyA9IDwweDExYTkwIDB4MjAgMHg4OGZjIDB4MDI+OworCQkJCWludGVycnVwdHMgPSA8NSA4PjsKKwkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZQSUM+OworCQkJCWZzbCxjcG0tYnJnID0gPDI+OworCQkJCWZzbCxjcG0tY29tbWFuZCA9IDwweDIxMjAwMDAwPjsKKwkJCQljdXJyZW50LXNwZWVkID0gPDA+OyAvKiBGaWxsZWQgaW4gYnkgVS1Cb290ICovCisJCQl9OworCisJCQlldGgwOiBldGhlcm5ldEAxMWE2MCB7CisJCQkJZGV2aWNlX3R5cGUgPSAibmV0d29yayI7CisJCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODI0Ny1zY2MtZW5ldCIsCisJCQkJICAgICAgICAgICAgICJmc2wsY3BtMi1zY2MtZW5ldCI7CisJCQkJcmVnID0gPDB4MTFhNjAgMHgyMCAweDgzMDAgMHgxMDAgMHgxMTM5MCAxPjsKKwkJCQlsb2NhbC1tYWMtYWRkcmVzcyA9IFsgMDAgMDAgMDAgMDAgMDAgMDAgXTsgLyogRmlsbGVkIGluIGJ5IFUtQm9vdCAqLworCQkJCWludGVycnVwdHMgPSA8NDMgOD47CisJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmUElDPjsKKwkJCQlsaW51eCxuZXR3b3JrLWluZGV4ID0gPDA+OworCQkJCWZzbCxjcG0tY29tbWFuZCA9IDwweGNlMDAwMDA+OworCQkJCWZpeGVkLWxpbmsgPSA8MCAwIDEwIDAgMD47CisJCQl9OworCisJCX07CisKKwkJUElDOiBpbnRlcnJ1cHQtY29udHJvbGxlckAxMGMwMCB7CisJCQkjaW50ZXJydXB0LWNlbGxzID0gPDI+OworCQkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CisJCQlyZWcgPSA8MHgxMGMwMCAweDgwPjsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzgyNDctcGljIiwgImZzbCxwcTItcGljIjsKKwkJfTsKKwl9OworfTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tZ3N1dmQuZHRzIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21nc3V2ZC5kdHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTRmYzUzYQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tZ3N1dmQuZHRzCkBAIC0wLDAgKzEsMTYzIEBACisvKgorICogTUdTVVZEIERldmljZSBUcmVlIFNvdXJjZQorICoKKyAqIENvcHlyaWdodCAyMDA4IERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcgR21iSAorICogSGVpa28gU2Nob2NoZXIgPGhzQGRlbnguZGU+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgorICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisvZHRzLXYxLzsKKy8geworCW1vZGVsID0gIk1HU1VWRCI7CisJY29tcGF0aWJsZSA9ICJrZXltaWxlLG1nc3V2ZCI7CisJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJI3NpemUtY2VsbHMgPSA8MT47CisKKwljcHVzIHsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCSNzaXplLWNlbGxzID0gPDA+OworCisJCVBvd2VyUEMsODUyQDAgeworCQkJZGV2aWNlX3R5cGUgPSAiY3B1IjsKKwkJCXJlZyA9IDwwPjsKKwkJCWQtY2FjaGUtbGluZS1zaXplID0gPDE2PjsKKwkJCWktY2FjaGUtbGluZS1zaXplID0gPDE2PjsKKwkJCWQtY2FjaGUtc2l6ZSA9IDw4MTkyPjsKKwkJCWktY2FjaGUtc2l6ZSA9IDw4MTkyPjsKKwkJCXRpbWViYXNlLWZyZXF1ZW5jeSA9IDwwPjsJLyogRmlsbGVkIGluIGJ5IHUtYm9vdCAqLworCQkJYnVzLWZyZXF1ZW5jeSA9IDwwPjsJCS8qIEZpbGxlZCBpbiBieSB1LWJvb3QgKi8KKwkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwwPjsJCS8qIEZpbGxlZCBpbiBieSB1LWJvb3QgKi8KKwkJCWludGVycnVwdHMgPSA8MTUgMj47CQkvKiBkZWNyZW1lbnRlciBpbnRlcnJ1cHQgKi8KKwkJCWludGVycnVwdC1wYXJlbnQgPSA8JlBJQz47CisJCX07CisJfTsKKworCW1lbW9yeSB7CisJCWRldmljZV90eXBlID0gIm1lbW9yeSI7CisJCXJlZyA9IDwwMDAwMDAwMCAweDQwMDAwMDA+OyAgLyogRmlsbGVkIGluIGJ5IHUtYm9vdCAqLworCX07CisKKwlsb2NhbGJ1c0BmZmYwMDEwMCB7CisJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzg1Mi1sb2NhbGJ1cyIsICJmc2wscHExLWxvY2FsYnVzIiwgInNpbXBsZS1idXMiOworCQkjYWRkcmVzcy1jZWxscyA9IDwyPjsKKwkJI3NpemUtY2VsbHMgPSA8MT47CisJCXJlZyA9IDwweGZmZjAwMTAwIDB4NDA+OworCisJCXJhbmdlcyA9IDwwIDAgMHhmMDAwMDAwMCAweDAxMDAwMDAwPjsgIC8qIEZpbGxlZCBpbiBieSB1LWJvb3QgKi8KKworCQlmbGFzaEAwLDAgeworCQkJY29tcGF0aWJsZSA9ICJjZmktZmxhc2giOworCQkJcmVnID0gPDAgMCAweDEwMDAwMDA+OworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJCWJhbmstd2lkdGggPSA8MT47CisJCQlkZXZpY2Utd2lkdGggPSA8MT47CisJCQlwYXJ0aXRpb25AMCB7CisJCQkJbGFiZWwgPSAidS1ib290IjsKKwkJCQlyZWcgPSA8MCAweDgwMDAwPjsKKwkJCX07CisJCQlwYXJ0aXRpb25AODAwMDAgeworCQkJCWxhYmVsID0gImVudiI7CisJCQkJcmVnID0gPDB4ODAwMDAgMHgyMDAwMD47CisJCQl9OworCQkJcGFydGl0aW9uQGEwMDAwIHsKKwkJCQlsYWJlbCA9ICJrZXJuZWwiOworCQkJCXJlZyA9IDwweGEwMDAwIDB4MWUwMDAwPjsKKwkJCX07CisJCQlwYXJ0aXRpb25AMjgwMDAwIHsKKwkJCQlsYWJlbCA9ICJkdGIiOworCQkJCXJlZyA9IDwweDI4MDAwMCAweDIwMDAwPjsKKwkJCX07CisJCQlwYXJ0aXRpb25AMmEwMDAwIHsKKwkJCSAgICAgICAgbGFiZWwgPSAicm9vdCI7CisJCQkgICAgICAgIHJlZyA9IDwweDJhMDAwMCAweDUwMDAwMD47CisJCQl9OworCQkJcGFydGl0aW9uQDdhMDAwMCB7CisJCQkgICAgICAgIGxhYmVsID0gInVzZXIiOworCQkJICAgICAgICByZWcgPSA8MHg3YTAwMDAgMHg4NjAwMDA+OworCQkJfTsKKwkJfTsKKwl9OworCisJc29jQGZmZjAwMDAwIHsKKwkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODUyIiwgImZzbCxwcTEtc29jIiwgInNpbXBsZS1idXMiOworCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJI3NpemUtY2VsbHMgPSA8MT47CisJCWRldmljZV90eXBlID0gInNvYyI7CisJCXJhbmdlcyA9IDwwIDB4ZmZmMDAwMDAgMHgwMDAwNDAwMD47CisKKwkJUElDOiBpbnRlcnJ1cHQtY29udHJvbGxlckAwIHsKKwkJCWludGVycnVwdC1jb250cm9sbGVyOworCQkJI2ludGVycnVwdC1jZWxscyA9IDwyPjsKKwkJCXJlZyA9IDwwIDI0PjsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzg1Mi1waWMiLCAiZnNsLHBxMS1waWMiOworCQl9OworCisJCWNwbUA5YzAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzg1Mi1jcG0iLCAiZnNsLGNwbTEiLCAic2ltcGxlLWJ1cyI7CisJCQlpbnRlcnJ1cHRzID0gPDA+OwkvKiBjcG0gZXJyb3IgaW50ZXJydXB0ICovCisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZDUE1fUElDPjsKKwkJCXJlZyA9IDwweDljMCAxMD47CisJCQlyYW5nZXM7CisKKwkJCW11cmFtQDIwMDAgeworCQkJCWNvbXBhdGlibGUgPSAiZnNsLGNwbS1tdXJhbSI7CisJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkJI3NpemUtY2VsbHMgPSA8MT47CisJCQkJcmFuZ2VzID0gPDAgMHgyMDAwIDB4MjAwMD47CisKKwkJCQlkYXRhQDAgeworCQkJCQljb21wYXRpYmxlID0gImZzbCxjcG0tbXVyYW0tZGF0YSI7CisJCQkJCXJlZyA9IDwweDgwMCAweDE4MDA+OworCQkJCX07CisJCQl9OworCisJCQlicmdAOWYwIHsKKwkJCQljb21wYXRpYmxlID0gImZzbCxtcGM4NTItYnJnIiwKKwkJCQkgICAgICAgICAgICAgImZzbCxjcG0xLWJyZyIsCisJCQkJICAgICAgICAgICAgICJmc2wsY3BtLWJyZyI7CisJCQkJcmVnID0gPDB4OWYwIDB4MTA+OworCQkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwwPjsgLyogRmlsbGVkIGluIGJ5IHUtYm9vdCAqLworCQkJfTsKKworCQkJQ1BNX1BJQzogaW50ZXJydXB0LWNvbnRyb2xsZXJAOTMwIHsKKwkJCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKKwkJCQkjaW50ZXJydXB0LWNlbGxzID0gPDE+OworCQkJCWludGVycnVwdHMgPSA8NSAyIDAgMj47CisJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmUElDPjsKKwkJCQlyZWcgPSA8MHg5MzAgMHgyMD47CisJCQkJY29tcGF0aWJsZSA9ICJmc2wsY3BtMS1waWMiOworCQkJfTsKKworCQkJLyogTU9OLTEgKi8KKwkJCXNlcmlhbEBhODAgeworCQkJCWRldmljZV90eXBlID0gInNlcmlhbCI7CisJCQkJY29tcGF0aWJsZSA9ICJmc2wsY3BtMS1zbWMtdWFydCI7CisJCQkJcmVnID0gPDB4YTgwIDB4MTAgMHgzZmMwIDB4NDA+OworCQkJCWludGVycnVwdHMgPSA8ND47CisJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmQ1BNX1BJQz47CisJCQkJZnNsLGNwbS1icmcgPSA8MT47CisJCQkJZnNsLGNwbS1jb21tYW5kID0gPDB4MDA5MD47CisJCQkJY3VycmVudC1zcGVlZCA9IDwwPjsgLyogRmlsbGVkIGluIGJ5IHUtYm9vdCAqLworCQkJfTsKKworCQkJZXRoZXJuZXRAYTQwIHsKKwkJCQlkZXZpY2VfdHlwZSA9ICJuZXR3b3JrIjsKKwkJCQljb21wYXRpYmxlICA9ICJmc2wsbXBjODY2LXNjYy1lbmV0IiwKKwkJCQkgICAgICAgICAgICAgICJmc2wsY3BtMS1zY2MtZW5ldCI7CisJCQkJcmVnID0gPDB4YTQwIDB4MTggMHgzZTAwIDB4MTAwPjsKKwkJCQlsb2NhbC1tYWMtYWRkcmVzcyA9IFsgMDAgMDAgMDAgMDAgMDAgMDAgXTsgIC8qIEZpbGxlZCBpbiBieSB1LWJvb3QgKi8KKwkJCQlpbnRlcnJ1cHRzID0gPDI4PjsKKwkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZDUE1fUElDPjsKKwkJCQlmc2wsY3BtLWNvbW1hbmQgPSA8MHg4MD47CisJCQkJZml4ZWQtbGluayA9IDwwIDAgMTAgMCAwPjsKKwkJCX07CisJCX07CisJfTsKK307CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjNTEyMWFkcy5kdHMgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjNTEyMWFkcy5kdHMKaW5kZXggMWY5MDM2Yy4uYzJiOGRiZiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzUxMjFhZHMuZHRzCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM1MTIxYWRzLmR0cwpAQCAtNDAzLDcgKzQwMyw4IEBACiAJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8MT47CiAJCSNzaXplLWNlbGxzID0gPDI+OwogCQkjYWRkcmVzcy1jZWxscyA9IDwzPjsKLQkJcmVnID0gPDB4ODAwMDg1MDAgMHgxMDA+OworCQlyZWcgPSA8MHg4MDAwODUwMCAweDEwMAkJLyogaW50ZXJuYWwgcmVnaXN0ZXJzICovCisJCSAgICAgICAweDgwMDA4MzAwIDB4OD47CQkvKiBjb25maWcgc3BhY2UgYWNjZXNzIHJlZ2lzdGVycyAqLwogCQljb21wYXRpYmxlID0gImZzbCxtcGM1MTIxLXBjaSI7CiAJCWRldmljZV90eXBlID0gInBjaSI7CiAJfTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4MzEzZXJkYi5kdHMgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODMxM2VyZGIuZHRzCmluZGV4IDJhOTRhZTAuLjc0N2YyNzYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4MzEzZXJkYi5kdHMKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzgzMTNlcmRiLmR0cwpAQCAtMTc2LDI0ICsxNzYsMjggQEAKIAkJCWRtYS1jaGFubmVsQDAgewogCQkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzgzMTMtZG1hLWNoYW5uZWwiLCAiZnNsLGVsby1kbWEtY2hhbm5lbCI7CiAJCQkJcmVnID0gPDAgMHg4MD47CisJCQkJY2VsbC1pbmRleCA9IDwwPjsKIAkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKIAkJCQlpbnRlcnJ1cHRzID0gPDcxIDg+OwogCQkJfTsKIAkJCWRtYS1jaGFubmVsQDgwIHsKIAkJCQljb21wYXRpYmxlID0gImZzbCxtcGM4MzEzLWRtYS1jaGFubmVsIiwgImZzbCxlbG8tZG1hLWNoYW5uZWwiOwogCQkJCXJlZyA9IDwweDgwIDB4ODA+OworCQkJCWNlbGwtaW5kZXggPSA8MT47CiAJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CiAJCQkJaW50ZXJydXB0cyA9IDw3MSA4PjsKIAkJCX07CiAJCQlkbWEtY2hhbm5lbEAxMDAgewogCQkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzgzMTMtZG1hLWNoYW5uZWwiLCAiZnNsLGVsby1kbWEtY2hhbm5lbCI7CiAJCQkJcmVnID0gPDB4MTAwIDB4ODA+OworCQkJCWNlbGwtaW5kZXggPSA8Mj47CiAJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CiAJCQkJaW50ZXJydXB0cyA9IDw3MSA4PjsKIAkJCX07CiAJCQlkbWEtY2hhbm5lbEAxODAgewogCQkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzgzMTMtZG1hLWNoYW5uZWwiLCAiZnNsLGVsby1kbWEtY2hhbm5lbCI7CiAJCQkJcmVnID0gPDB4MTgwIDB4Mjg+OworCQkJCWNlbGwtaW5kZXggPSA8Mz47CiAJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CiAJCQkJaW50ZXJydXB0cyA9IDw3MSA4PjsKIAkJCX07CkBAIC0zNTksNyArMzYzLDggQEAKIAkJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8MT47CiAJCQkjc2l6ZS1jZWxscyA9IDwyPjsKIAkJCSNhZGRyZXNzLWNlbGxzID0gPDM+OwotCQkJcmVnID0gPDB4ZTAwMDg1MDAgMHgxMDA+OworCQkJcmVnID0gPDB4ZTAwMDg1MDAgMHgxMDAJCS8qIGludGVybmFsIHJlZ2lzdGVycyAqLworCQkJICAgICAgIDB4ZTAwMDgzMDAgMHg4PjsJCS8qIGNvbmZpZyBzcGFjZSBhY2Nlc3MgcmVnaXN0ZXJzICovCiAJCQljb21wYXRpYmxlID0gImZzbCxtcGM4MzQ5LXBjaSI7CiAJCQlkZXZpY2VfdHlwZSA9ICJwY2kiOwogCQl9OwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzgzMTVlcmRiLmR0cyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4MzE1ZXJkYi5kdHMKaW5kZXggZjcwNDUxMy4uNzQ0OWU1NGMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4MzE1ZXJkYi5kdHMKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzgzMTVlcmRiLmR0cwpAQCAtMTQ0LDI0ICsxNDQsMjggQEAKIAkJCWRtYS1jaGFubmVsQDAgewogCQkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzgzMTUtZG1hLWNoYW5uZWwiLCAiZnNsLGVsby1kbWEtY2hhbm5lbCI7CiAJCQkJcmVnID0gPDAgMHg4MD47CisJCQkJY2VsbC1pbmRleCA9IDwwPjsKIAkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKIAkJCQlpbnRlcnJ1cHRzID0gPDcxIDg+OwogCQkJfTsKIAkJCWRtYS1jaGFubmVsQDgwIHsKIAkJCQljb21wYXRpYmxlID0gImZzbCxtcGM4MzE1LWRtYS1jaGFubmVsIiwgImZzbCxlbG8tZG1hLWNoYW5uZWwiOwogCQkJCXJlZyA9IDwweDgwIDB4ODA+OworCQkJCWNlbGwtaW5kZXggPSA8MT47CiAJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CiAJCQkJaW50ZXJydXB0cyA9IDw3MSA4PjsKIAkJCX07CiAJCQlkbWEtY2hhbm5lbEAxMDAgewogCQkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzgzMTUtZG1hLWNoYW5uZWwiLCAiZnNsLGVsby1kbWEtY2hhbm5lbCI7CiAJCQkJcmVnID0gPDB4MTAwIDB4ODA+OworCQkJCWNlbGwtaW5kZXggPSA8Mj47CiAJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CiAJCQkJaW50ZXJydXB0cyA9IDw3MSA4PjsKIAkJCX07CiAJCQlkbWEtY2hhbm5lbEAxODAgewogCQkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzgzMTUtZG1hLWNoYW5uZWwiLCAiZnNsLGVsby1kbWEtY2hhbm5lbCI7CiAJCQkJcmVnID0gPDB4MTgwIDB4Mjg+OworCQkJCWNlbGwtaW5kZXggPSA8Mz47CiAJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CiAJCQkJaW50ZXJydXB0cyA9IDw3MSA4PjsKIAkJCX07CkBAIC0zMTQsNyArMzE4LDggQEAKIAkJI2ludGVycnVwdC1jZWxscyA9IDwxPjsKIAkJI3NpemUtY2VsbHMgPSA8Mj47CiAJCSNhZGRyZXNzLWNlbGxzID0gPDM+OwotCQlyZWcgPSA8MHhlMDAwODUwMCAweDEwMD47CisJCXJlZyA9IDwweGUwMDA4NTAwIDB4MTAwCQkvKiBpbnRlcm5hbCByZWdpc3RlcnMgKi8KKwkJICAgICAgIDB4ZTAwMDgzMDAgMHg4PjsJCS8qIGNvbmZpZyBzcGFjZSBhY2Nlc3MgcmVnaXN0ZXJzICovCiAJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzgzNDktcGNpIjsKIAkJZGV2aWNlX3R5cGUgPSAicGNpIjsKIAl9OwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzgzMnhfbWRzLmR0cyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4MzJ4X21kcy5kdHMKaW5kZXggZmJjOTMwNC4uZTRjYzE3NiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzgzMnhfbWRzLmR0cworKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODMyeF9tZHMuZHRzCkBAIC0xMjcsMjQgKzEyNywyOCBAQAogCQkJZG1hLWNoYW5uZWxAMCB7CiAJCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODMyMy1kbWEtY2hhbm5lbCIsICJmc2wsZWxvLWRtYS1jaGFubmVsIjsKIAkJCQlyZWcgPSA8MCAweDgwPjsKKwkJCQljZWxsLWluZGV4ID0gPDA+OwogCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OwogCQkJCWludGVycnVwdHMgPSA8NzEgOD47CiAJCQl9OwogCQkJZG1hLWNoYW5uZWxAODAgewogCQkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzgzMjMtZG1hLWNoYW5uZWwiLCAiZnNsLGVsby1kbWEtY2hhbm5lbCI7CiAJCQkJcmVnID0gPDB4ODAgMHg4MD47CisJCQkJY2VsbC1pbmRleCA9IDwxPjsKIAkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKIAkJCQlpbnRlcnJ1cHRzID0gPDcxIDg+OwogCQkJfTsKIAkJCWRtYS1jaGFubmVsQDEwMCB7CiAJCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODMyMy1kbWEtY2hhbm5lbCIsICJmc2wsZWxvLWRtYS1jaGFubmVsIjsKIAkJCQlyZWcgPSA8MHgxMDAgMHg4MD47CisJCQkJY2VsbC1pbmRleCA9IDwyPjsKIAkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKIAkJCQlpbnRlcnJ1cHRzID0gPDcxIDg+OwogCQkJfTsKIAkJCWRtYS1jaGFubmVsQDE4MCB7CiAJCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODMyMy1kbWEtY2hhbm5lbCIsICJmc2wsZWxvLWRtYS1jaGFubmVsIjsKIAkJCQlyZWcgPSA8MHgxODAgMHgyOD47CisJCQkJY2VsbC1pbmRleCA9IDwzPjsKIAkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKIAkJCQlpbnRlcnJ1cHRzID0gPDcxIDg+OwogCQkJfTsKQEAgLTQxOSw3ICs0MjMsOCBAQAogCQkjaW50ZXJydXB0LWNlbGxzID0gPDE+OwogCQkjc2l6ZS1jZWxscyA9IDwyPjsKIAkJI2FkZHJlc3MtY2VsbHMgPSA8Mz47Ci0JCXJlZyA9IDwweGUwMDA4NTAwIDB4MTAwPjsKKwkJcmVnID0gPDB4ZTAwMDg1MDAgMHgxMDAJCS8qIGludGVybmFsIHJlZ2lzdGVycyAqLworCQkgICAgICAgMHhlMDAwODMwMCAweDg+OwkJLyogY29uZmlnIHNwYWNlIGFjY2VzcyByZWdpc3RlcnMgKi8KIAkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODM0OS1wY2kiOwogCQlkZXZpY2VfdHlwZSA9ICJwY2kiOwogCX07CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODMyeF9yZGIuZHRzIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzgzMnhfcmRiLmR0cwppbmRleCBiMTU3ZDE4Li4yMjZmZjA2IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODMyeF9yZGIuZHRzCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4MzJ4X3JkYi5kdHMKQEAgLTEwNSwyNCArMTA1LDI4IEBACiAJCQlkbWEtY2hhbm5lbEAwIHsKIAkJCQljb21wYXRpYmxlID0gImZzbCxtcGM4MzIzLWRtYS1jaGFubmVsIiwgImZzbCxlbG8tZG1hLWNoYW5uZWwiOwogCQkJCXJlZyA9IDwwIDB4ODA+OworCQkJCWNlbGwtaW5kZXggPSA8MD47CiAJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CiAJCQkJaW50ZXJydXB0cyA9IDw3MSA4PjsKIAkJCX07CiAJCQlkbWEtY2hhbm5lbEA4MCB7CiAJCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODMyMy1kbWEtY2hhbm5lbCIsICJmc2wsZWxvLWRtYS1jaGFubmVsIjsKIAkJCQlyZWcgPSA8MHg4MCAweDgwPjsKKwkJCQljZWxsLWluZGV4ID0gPDE+OwogCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OwogCQkJCWludGVycnVwdHMgPSA8NzEgOD47CiAJCQl9OwogCQkJZG1hLWNoYW5uZWxAMTAwIHsKIAkJCQljb21wYXRpYmxlID0gImZzbCxtcGM4MzIzLWRtYS1jaGFubmVsIiwgImZzbCxlbG8tZG1hLWNoYW5uZWwiOwogCQkJCXJlZyA9IDwweDEwMCAweDgwPjsKKwkJCQljZWxsLWluZGV4ID0gPDI+OwogCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OwogCQkJCWludGVycnVwdHMgPSA8NzEgOD47CiAJCQl9OwogCQkJZG1hLWNoYW5uZWxAMTgwIHsKIAkJCQljb21wYXRpYmxlID0gImZzbCxtcGM4MzIzLWRtYS1jaGFubmVsIiwgImZzbCxlbG8tZG1hLWNoYW5uZWwiOwogCQkJCXJlZyA9IDwweDE4MCAweDI4PjsKKwkJCQljZWxsLWluZGV4ID0gPDM+OwogCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OwogCQkJCWludGVycnVwdHMgPSA8NzEgOD47CiAJCQl9OwpAQCAtMzI3LDcgKzMzMSw4IEBACiAJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8MT47CiAJCSNzaXplLWNlbGxzID0gPDI+OwogCQkjYWRkcmVzcy1jZWxscyA9IDwzPjsKLQkJcmVnID0gPDB4ZTAwMDg1MDAgMHgxMDA+OworCQlyZWcgPSA8MHhlMDAwODUwMCAweDEwMAkJLyogaW50ZXJuYWwgcmVnaXN0ZXJzICovCisJCSAgICAgICAweGUwMDA4MzAwIDB4OD47CQkvKiBjb25maWcgc3BhY2UgYWNjZXNzIHJlZ2lzdGVycyAqLwogCQljb21wYXRpYmxlID0gImZzbCxtcGM4MzQ5LXBjaSI7CiAJCWRldmljZV90eXBlID0gInBjaSI7CiAJfTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4MzQ5ZW1pdHguZHRzIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzgzNDllbWl0eC5kdHMKaW5kZXggNzAwZTA3Ni4uNWNlZGYzNyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzgzNDllbWl0eC5kdHMKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzgzNDllbWl0eC5kdHMKQEAgLTEwNiwyNCArMTA2LDI4IEBACiAJCQlkbWEtY2hhbm5lbEAwIHsKIAkJCQljb21wYXRpYmxlID0gImZzbCxtcGM4MzQ5LWRtYS1jaGFubmVsIiwgImZzbCxlbG8tZG1hLWNoYW5uZWwiOwogCQkJCXJlZyA9IDwwIDB4ODA+OworCQkJCWNlbGwtaW5kZXggPSA8MD47CiAJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CiAJCQkJaW50ZXJydXB0cyA9IDw3MSA4PjsKIAkJCX07CiAJCQlkbWEtY2hhbm5lbEA4MCB7CiAJCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODM0OS1kbWEtY2hhbm5lbCIsICJmc2wsZWxvLWRtYS1jaGFubmVsIjsKIAkJCQlyZWcgPSA8MHg4MCAweDgwPjsKKwkJCQljZWxsLWluZGV4ID0gPDE+OwogCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OwogCQkJCWludGVycnVwdHMgPSA8NzEgOD47CiAJCQl9OwogCQkJZG1hLWNoYW5uZWxAMTAwIHsKIAkJCQljb21wYXRpYmxlID0gImZzbCxtcGM4MzQ5LWRtYS1jaGFubmVsIiwgImZzbCxlbG8tZG1hLWNoYW5uZWwiOwogCQkJCXJlZyA9IDwweDEwMCAweDgwPjsKKwkJCQljZWxsLWluZGV4ID0gPDI+OwogCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OwogCQkJCWludGVycnVwdHMgPSA8NzEgOD47CiAJCQl9OwogCQkJZG1hLWNoYW5uZWxAMTgwIHsKIAkJCQljb21wYXRpYmxlID0gImZzbCxtcGM4MzQ5LWRtYS1jaGFubmVsIiwgImZzbCxlbG8tZG1hLWNoYW5uZWwiOwogCQkJCXJlZyA9IDwweDE4MCAweDI4PjsKKwkJCQljZWxsLWluZGV4ID0gPDM+OwogCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OwogCQkJCWludGVycnVwdHMgPSA8NzEgOD47CiAJCQl9OwpAQCAtMjUwLDcgKzI1NCw4IEBACiAJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8MT47CiAJCSNzaXplLWNlbGxzID0gPDI+OwogCQkjYWRkcmVzcy1jZWxscyA9IDwzPjsKLQkJcmVnID0gPDB4ZTAwMDg1MDAgMHgxMDA+OworCQlyZWcgPSA8MHhlMDAwODUwMCAweDEwMAkJLyogaW50ZXJuYWwgcmVnaXN0ZXJzICovCisJCSAgICAgICAweGUwMDA4MzAwIDB4OD47CQkvKiBjb25maWcgc3BhY2UgYWNjZXNzIHJlZ2lzdGVycyAqLwogCQljb21wYXRpYmxlID0gImZzbCxtcGM4MzQ5LXBjaSI7CiAJCWRldmljZV90eXBlID0gInBjaSI7CiAJfTsKQEAgLTI3Niw3ICsyODEsOCBAQAogCQkjaW50ZXJydXB0LWNlbGxzID0gPDE+OwogCQkjc2l6ZS1jZWxscyA9IDwyPjsKIAkJI2FkZHJlc3MtY2VsbHMgPSA8Mz47Ci0JCXJlZyA9IDwweGUwMDA4NjAwIDB4MTAwPjsKKwkJcmVnID0gPDB4ZTAwMDg2MDAgMHgxMDAJCS8qIGludGVybmFsIHJlZ2lzdGVycyAqLworCQkgICAgICAgMHhlMDAwODM4MCAweDg+OwkJLyogY29uZmlnIHNwYWNlIGFjY2VzcyByZWdpc3RlcnMgKi8KIAkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODM0OS1wY2kiOwogCQlkZXZpY2VfdHlwZSA9ICJwY2kiOwogCX07CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODM0OWVtaXR4Z3AuZHRzIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzgzNDllbWl0eGdwLmR0cwppbmRleCBjZGQzMDYzLi44MWFlMWQzIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODM0OWVtaXR4Z3AuZHRzCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4MzQ5ZW1pdHhncC5kdHMKQEAgLTEwNCwyNCArMTA0LDI4IEBACiAJCQlkbWEtY2hhbm5lbEAwIHsKIAkJCQljb21wYXRpYmxlID0gImZzbCxtcGM4MzQ5LWRtYS1jaGFubmVsIiwgImZzbCxlbG8tZG1hLWNoYW5uZWwiOwogCQkJCXJlZyA9IDwwIDB4ODA+OworCQkJCWNlbGwtaW5kZXggPSA8MD47CiAJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CiAJCQkJaW50ZXJydXB0cyA9IDw3MSA4PjsKIAkJCX07CiAJCQlkbWEtY2hhbm5lbEA4MCB7CiAJCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODM0OS1kbWEtY2hhbm5lbCIsICJmc2wsZWxvLWRtYS1jaGFubmVsIjsKIAkJCQlyZWcgPSA8MHg4MCAweDgwPjsKKwkJCQljZWxsLWluZGV4ID0gPDE+OwogCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OwogCQkJCWludGVycnVwdHMgPSA8NzEgOD47CiAJCQl9OwogCQkJZG1hLWNoYW5uZWxAMTAwIHsKIAkJCQljb21wYXRpYmxlID0gImZzbCxtcGM4MzQ5LWRtYS1jaGFubmVsIiwgImZzbCxlbG8tZG1hLWNoYW5uZWwiOwogCQkJCXJlZyA9IDwweDEwMCAweDgwPjsKKwkJCQljZWxsLWluZGV4ID0gPDI+OwogCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OwogCQkJCWludGVycnVwdHMgPSA8NzEgOD47CiAJCQl9OwogCQkJZG1hLWNoYW5uZWxAMTgwIHsKIAkJCQljb21wYXRpYmxlID0gImZzbCxtcGM4MzQ5LWRtYS1jaGFubmVsIiwgImZzbCxlbG8tZG1hLWNoYW5uZWwiOwogCQkJCXJlZyA9IDwweDE4MCAweDI4PjsKKwkJCQljZWxsLWluZGV4ID0gPDM+OwogCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OwogCQkJCWludGVycnVwdHMgPSA8NzEgOD47CiAJCQl9OwpAQCAtMjI0LDcgKzIyOCw4IEBACiAJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8MT47CiAJCSNzaXplLWNlbGxzID0gPDI+OwogCQkjYWRkcmVzcy1jZWxscyA9IDwzPjsKLQkJcmVnID0gPDB4ZTAwMDg2MDAgMHgxMDA+OworCQlyZWcgPSA8MHhlMDAwODYwMCAweDEwMAkJLyogaW50ZXJuYWwgcmVnaXN0ZXJzICovCisJCSAgICAgICAweGUwMDA4MzgwIDB4OD47CQkvKiBjb25maWcgc3BhY2UgYWNjZXNzIHJlZ2lzdGVycyAqLwogCQljb21wYXRpYmxlID0gImZzbCxtcGM4MzQ5LXBjaSI7CiAJCWRldmljZV90eXBlID0gInBjaSI7CiAJfTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4MzR4X21kcy5kdHMgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODM0eF9tZHMuZHRzCmluZGV4IDc4MzI0MWMuLjA0YmZkZTMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4MzR4X21kcy5kdHMKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzgzNHhfbWRzLmR0cwpAQCAtMTE2LDI0ICsxMTYsMjggQEAKIAkJCWRtYS1jaGFubmVsQDAgewogCQkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzgzNDktZG1hLWNoYW5uZWwiLCAiZnNsLGVsby1kbWEtY2hhbm5lbCI7CiAJCQkJcmVnID0gPDAgMHg4MD47CisJCQkJY2VsbC1pbmRleCA9IDwwPjsKIAkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKIAkJCQlpbnRlcnJ1cHRzID0gPDcxIDg+OwogCQkJfTsKIAkJCWRtYS1jaGFubmVsQDgwIHsKIAkJCQljb21wYXRpYmxlID0gImZzbCxtcGM4MzQ5LWRtYS1jaGFubmVsIiwgImZzbCxlbG8tZG1hLWNoYW5uZWwiOwogCQkJCXJlZyA9IDwweDgwIDB4ODA+OworCQkJCWNlbGwtaW5kZXggPSA8MT47CiAJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CiAJCQkJaW50ZXJydXB0cyA9IDw3MSA4PjsKIAkJCX07CiAJCQlkbWEtY2hhbm5lbEAxMDAgewogCQkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzgzNDktZG1hLWNoYW5uZWwiLCAiZnNsLGVsby1kbWEtY2hhbm5lbCI7CiAJCQkJcmVnID0gPDB4MTAwIDB4ODA+OworCQkJCWNlbGwtaW5kZXggPSA8Mj47CiAJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CiAJCQkJaW50ZXJydXB0cyA9IDw3MSA4PjsKIAkJCX07CiAJCQlkbWEtY2hhbm5lbEAxODAgewogCQkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzgzNDktZG1hLWNoYW5uZWwiLCAiZnNsLGVsby1kbWEtY2hhbm5lbCI7CiAJCQkJcmVnID0gPDB4MTgwIDB4Mjg+OworCQkJCWNlbGwtaW5kZXggPSA8Mz47CiAJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CiAJCQkJaW50ZXJydXB0cyA9IDw3MSA4PjsKIAkJCX07CkBAIC0zMTEsNyArMzE1LDggQEAKIAkJI2ludGVycnVwdC1jZWxscyA9IDwxPjsKIAkJI3NpemUtY2VsbHMgPSA8Mj47CiAJCSNhZGRyZXNzLWNlbGxzID0gPDM+OwotCQlyZWcgPSA8MHhlMDAwODUwMCAweDEwMD47CisJCXJlZyA9IDwweGUwMDA4NTAwIDB4MTAwCQkvKiBpbnRlcm5hbCByZWdpc3RlcnMgKi8KKwkJICAgICAgIDB4ZTAwMDgzMDAgMHg4PjsJCS8qIGNvbmZpZyBzcGFjZSBhY2Nlc3MgcmVnaXN0ZXJzICovCiAJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzgzNDktcGNpIjsKIAkJZGV2aWNlX3R5cGUgPSAicGNpIjsKIAl9OwpAQCAtMzcyLDcgKzM3Nyw4IEBACiAJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8MT47CiAJCSNzaXplLWNlbGxzID0gPDI+OwogCQkjYWRkcmVzcy1jZWxscyA9IDwzPjsKLQkJcmVnID0gPDB4ZTAwMDg2MDAgMHgxMDA+OworCQlyZWcgPSA8MHhlMDAwODYwMCAweDEwMAkJLyogaW50ZXJuYWwgcmVnaXN0ZXJzICovCisJCSAgICAgICAweGUwMDA4MzgwIDB4OD47CQkvKiBjb25maWcgc3BhY2UgYWNjZXNzIHJlZ2lzdGVycyAqLwogCQljb21wYXRpYmxlID0gImZzbCxtcGM4MzQ5LXBjaSI7CiAJCWRldmljZV90eXBlID0gInBjaSI7CiAJfTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4MzZ4X21kcy5kdHMgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODM2eF9tZHMuZHRzCmluZGV4IGEzYjc2YTcuLjY2YTEyZDIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4MzZ4X21kcy5kdHMKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzgzNnhfbWRzLmR0cwpAQCAtNTIsOSArNTIsMjYgQEAKIAkJcmVnID0gPDB4MDAwMDAwMDAgMHgxMDAwMDAwMD47CiAJfTsKIAotCWJjc3JAZjgwMDAwMDAgewotCQlkZXZpY2VfdHlwZSA9ICJib2FyZC1jb250cm9sIjsKLQkJcmVnID0gPDB4ZjgwMDAwMDAgMHg4MDAwPjsKKwlsb2NhbGJ1c0BlMDAwNTAwMCB7CisJCSNhZGRyZXNzLWNlbGxzID0gPDI+OworCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODM2MC1sb2NhbGJ1cyIsICJmc2wscHEycHJvLWxvY2FsYnVzIiwKKwkJCSAgICAgInNpbXBsZS1idXMiOworCQlyZWcgPSA8MHhlMDAwNTAwMCAweGQ4PjsKKwkJcmFuZ2VzID0gPDAgMCAweGZlMDAwMDAwIDB4MDIwMDAwMDAKKwkJICAgICAgICAgIDEgMCAweGY4MDAwMDAwIDB4MDAwMDgwMDA+OworCisJCWZsYXNoQDAsMCB7CisJCQljb21wYXRpYmxlID0gImNmaS1mbGFzaCI7CisJCQlyZWcgPSA8MCAwIDB4MjAwMDAwMD47CisJCQliYW5rLXdpZHRoID0gPDI+OworCQkJZGV2aWNlLXdpZHRoID0gPDE+OworCQl9OworCisJCWJjc3JAMSwwIHsKKwkJCWRldmljZV90eXBlID0gImJvYXJkLWNvbnRyb2wiOworCQkJcmVnID0gPDEgMCAweDgwMDA+OworCQl9OwogCX07CiAKIAlzb2M4MzYwQGUwMDAwMDAwIHsKQEAgLTEzMSwyNCArMTQ4LDI4IEBACiAJCQlkbWEtY2hhbm5lbEAwIHsKIAkJCQljb21wYXRpYmxlID0gImZzbCxtcGM4MzYwLWRtYS1jaGFubmVsIiwgImZzbCxlbG8tZG1hLWNoYW5uZWwiOwogCQkJCXJlZyA9IDwwIDB4ODA+OworCQkJCWNlbGwtaW5kZXggPSA8MD47CiAJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CiAJCQkJaW50ZXJydXB0cyA9IDw3MSA4PjsKIAkJCX07CiAJCQlkbWEtY2hhbm5lbEA4MCB7CiAJCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODM2MC1kbWEtY2hhbm5lbCIsICJmc2wsZWxvLWRtYS1jaGFubmVsIjsKIAkJCQlyZWcgPSA8MHg4MCAweDgwPjsKKwkJCQljZWxsLWluZGV4ID0gPDE+OwogCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OwogCQkJCWludGVycnVwdHMgPSA8NzEgOD47CiAJCQl9OwogCQkJZG1hLWNoYW5uZWxAMTAwIHsKIAkJCQljb21wYXRpYmxlID0gImZzbCxtcGM4MzYwLWRtYS1jaGFubmVsIiwgImZzbCxlbG8tZG1hLWNoYW5uZWwiOwogCQkJCXJlZyA9IDwweDEwMCAweDgwPjsKKwkJCQljZWxsLWluZGV4ID0gPDI+OwogCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OwogCQkJCWludGVycnVwdHMgPSA8NzEgOD47CiAJCQl9OwogCQkJZG1hLWNoYW5uZWxAMTgwIHsKIAkJCQljb21wYXRpYmxlID0gImZzbCxtcGM4MzYwLWRtYS1jaGFubmVsIiwgImZzbCxlbG8tZG1hLWNoYW5uZWwiOwogCQkJCXJlZyA9IDwweDE4MCAweDI4PjsKKwkJCQljZWxsLWluZGV4ID0gPDM+OwogCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OwogCQkJCWludGVycnVwdHMgPSA8NzEgOD47CiAJCQl9OwpAQCAtNDA1LDcgKzQyNiw4IEBACiAJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8MT47CiAJCSNzaXplLWNlbGxzID0gPDI+OwogCQkjYWRkcmVzcy1jZWxscyA9IDwzPjsKLQkJcmVnID0gPDB4ZTAwMDg1MDAgMHgxMDA+OworCQlyZWcgPSA8MHhlMDAwODUwMCAweDEwMAkJLyogaW50ZXJuYWwgcmVnaXN0ZXJzICovCisJCSAgICAgICAweGUwMDA4MzAwIDB4OD47CQkvKiBjb25maWcgc3BhY2UgYWNjZXNzIHJlZ2lzdGVycyAqLwogCQljb21wYXRpYmxlID0gImZzbCxtcGM4MzQ5LXBjaSI7CiAJCWRldmljZV90eXBlID0gInBjaSI7CiAJfTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4MzZ4X3Jkay5kdHMgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODM2eF9yZGsuZHRzCmluZGV4IDg5YzkyMDIuLmRlY2FkZjMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4MzZ4X3Jkay5kdHMKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzgzNnhfcmRrLmR0cwpAQCAtMTI1LDI0ICsxMjUsMjggQEAKIAkJCWRtYS1jaGFubmVsQDAgewogCQkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzgzNjAtZG1hLWNoYW5uZWwiLCAiZnNsLGVsby1kbWEtY2hhbm5lbCI7CiAJCQkJcmVnID0gPDAgMHg4MD47CisJCQkJY2VsbC1pbmRleCA9IDwwPjsKIAkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKIAkJCQlpbnRlcnJ1cHRzID0gPDcxIDg+OwogCQkJfTsKIAkJCWRtYS1jaGFubmVsQDgwIHsKIAkJCQljb21wYXRpYmxlID0gImZzbCxtcGM4MzYwLWRtYS1jaGFubmVsIiwgImZzbCxlbG8tZG1hLWNoYW5uZWwiOwogCQkJCXJlZyA9IDwweDgwIDB4ODA+OworCQkJCWNlbGwtaW5kZXggPSA8MT47CiAJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CiAJCQkJaW50ZXJydXB0cyA9IDw3MSA4PjsKIAkJCX07CiAJCQlkbWEtY2hhbm5lbEAxMDAgewogCQkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzgzNjAtZG1hLWNoYW5uZWwiLCAiZnNsLGVsby1kbWEtY2hhbm5lbCI7CiAJCQkJcmVnID0gPDB4MTAwIDB4ODA+OworCQkJCWNlbGwtaW5kZXggPSA8Mj47CiAJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CiAJCQkJaW50ZXJydXB0cyA9IDw3MSA4PjsKIAkJCX07CiAJCQlkbWEtY2hhbm5lbEAxODAgewogCQkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzgzNjAtZG1hLWNoYW5uZWwiLCAiZnNsLGVsby1kbWEtY2hhbm5lbCI7CiAJCQkJcmVnID0gPDB4MTgwIDB4Mjg+OworCQkJCWNlbGwtaW5kZXggPSA8Mz47CiAJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CiAJCQkJaW50ZXJydXB0cyA9IDw3MSA4PjsKIAkJCX07CkBAIC0zODMsNiArMzg3LDE4IEBACiAJCQlkZXZpY2Utd2lkdGggPSA8MT47CiAJCX07CiAKKwkJdXBtQDEsMCB7CisJCQljb21wYXRpYmxlID0gImZzbCx1cG0tbmFuZCI7CisJCQlyZWcgPSA8MSAwIDE+OworCQkJZnNsLHVwbS1hZGRyLW9mZnNldCA9IDwxNj47CisJCQlmc2wsdXBtLWNtZC1vZmZzZXQgPSA8OD47CisJCQlncGlvcyA9IDwmcWVfcGlvX2UgMTggMD47CisKKwkJCWZsYXNoIHsKKwkJCQljb21wYXRpYmxlID0gInN0bSxuYW5kNTEyLWEiOworCQkJfTsKKwkJfTsKKwogCQlkaXNwbGF5QDIsMCB7CiAJCQlkZXZpY2VfdHlwZSA9ICJkaXNwbGF5IjsKIAkJCWNvbXBhdGlibGUgPSAiZnVqaXRzdSxNQjg2Mjc3IiwgImZ1aml0c3UsbWludCI7CkBAIC00MDUsNyArNDIxLDggQEAKIAkJI2ludGVycnVwdC1jZWxscyA9IDwxPjsKIAkJZGV2aWNlX3R5cGUgPSAicGNpIjsKIAkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODM2MC1wY2kiLCAiZnNsLG1wYzgzNDktcGNpIjsKLQkJcmVnID0gPDB4ZTAwMDg1MDAgMHgxMDA+OworCQlyZWcgPSA8MHhlMDAwODUwMCAweDEwMAkJLyogaW50ZXJuYWwgcmVnaXN0ZXJzICovCisJCSAgICAgICAweGUwMDA4MzAwIDB4OD47CQkvKiBjb25maWcgc3BhY2UgYWNjZXNzIHJlZ2lzdGVycyAqLwogCQlyYW5nZXMgPSA8MHgwMjAwMDAwMCAwIDB4OTAwMDAwMDAgMHg5MDAwMDAwMCAwIDB4MTAwMDAwMDAKIAkJCSAgMHg0MjAwMDAwMCAwIDB4ODAwMDAwMDAgMHg4MDAwMDAwMCAwIDB4MTAwMDAwMDAKIAkJCSAgMHgwMTAwMDAwMCAwIDB4ZTAzMDAwMDAgMHhlMDMwMDAwMCAwIDB4MDAxMDAwMDA+OwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzgzNzdfbWRzLmR0cyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4Mzc3X21kcy5kdHMKaW5kZXggNDMyNzgyYi4uMDQ4NDU2MSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzgzNzdfbWRzLmR0cworKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODM3N19tZHMuZHRzCkBAIC0xMzYsNiArMTM2LDEzIEBACiAJCQlpbnRlcnJ1cHRzID0gPDE0IDB4OD47CiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKIAkJCWRmc3JyOworCisJCQlydGNANjggeworCQkJCWNvbXBhdGlibGUgPSAiZGFsbGFzLGRzMTM3NCI7CisJCQkJcmVnID0gPDB4Njg+OworCQkJCWludGVycnVwdHMgPSA8MTkgMHg4PjsKKwkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKKwkJCX07CiAJCX07CiAKIAkJaTJjQDMxMDAgewpAQCAtMjQ2LDI0ICsyNTMsMjggQEAKIAkJCWRtYS1jaGFubmVsQDAgewogCQkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzgzNzctZG1hLWNoYW5uZWwiLCAiZnNsLGVsby1kbWEtY2hhbm5lbCI7CiAJCQkJcmVnID0gPDAgMHg4MD47CisJCQkJY2VsbC1pbmRleCA9IDwwPjsKIAkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKIAkJCQlpbnRlcnJ1cHRzID0gPDB4NDcgOD47CiAJCQl9OwogCQkJZG1hLWNoYW5uZWxAODAgewogCQkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzgzNzctZG1hLWNoYW5uZWwiLCAiZnNsLGVsby1kbWEtY2hhbm5lbCI7CiAJCQkJcmVnID0gPDB4ODAgMHg4MD47CisJCQkJY2VsbC1pbmRleCA9IDwxPjsKIAkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKIAkJCQlpbnRlcnJ1cHRzID0gPDB4NDcgOD47CiAJCQl9OwogCQkJZG1hLWNoYW5uZWxAMTAwIHsKIAkJCQljb21wYXRpYmxlID0gImZzbCxtcGM4Mzc3LWRtYS1jaGFubmVsIiwgImZzbCxlbG8tZG1hLWNoYW5uZWwiOwogCQkJCXJlZyA9IDwweDEwMCAweDgwPjsKKwkJCQljZWxsLWluZGV4ID0gPDI+OwogCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OwogCQkJCWludGVycnVwdHMgPSA8MHg0NyA4PjsKIAkJCX07CiAJCQlkbWEtY2hhbm5lbEAxODAgewogCQkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzgzNzctZG1hLWNoYW5uZWwiLCAiZnNsLGVsby1kbWEtY2hhbm5lbCI7CiAJCQkJcmVnID0gPDB4MTgwIDB4Mjg+OworCQkJCWNlbGwtaW5kZXggPSA8Mz47CiAJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CiAJCQkJaW50ZXJydXB0cyA9IDwweDQ3IDg+OwogCQkJfTsKQEAgLTM3NCw3ICszODUsOCBAQAogCQkjaW50ZXJydXB0LWNlbGxzID0gPDE+OwogCQkjc2l6ZS1jZWxscyA9IDwyPjsKIAkJI2FkZHJlc3MtY2VsbHMgPSA8Mz47Ci0JCXJlZyA9IDwweGUwMDA4NTAwIDB4MTAwPjsKKwkJcmVnID0gPDB4ZTAwMDg1MDAgMHgxMDAJCS8qIGludGVybmFsIHJlZ2lzdGVycyAqLworCQkgICAgICAgMHhlMDAwODMwMCAweDg+OwkJLyogY29uZmlnIHNwYWNlIGFjY2VzcyByZWdpc3RlcnMgKi8KIAkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODM0OS1wY2kiOwogCQlkZXZpY2VfdHlwZSA9ICJwY2kiOwogCX07CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODM3N19yZGIuZHRzIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzgzNzdfcmRiLmR0cwppbmRleCBlZDEzN2FhLi41MzE5MWJhIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODM3N19yZGIuZHRzCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4Mzc3X3JkYi5kdHMKQEAgLTE1NSwyNCArMTU1LDI4IEBACiAJCQlkbWEtY2hhbm5lbEAwIHsKIAkJCQljb21wYXRpYmxlID0gImZzbCxtcGM4Mzc3LWRtYS1jaGFubmVsIiwgImZzbCxlbG8tZG1hLWNoYW5uZWwiOwogCQkJCXJlZyA9IDwwIDB4ODA+OworCQkJCWNlbGwtaW5kZXggPSA8MD47CiAJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CiAJCQkJaW50ZXJydXB0cyA9IDw3MSA4PjsKIAkJCX07CiAJCQlkbWEtY2hhbm5lbEA4MCB7CiAJCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODM3Ny1kbWEtY2hhbm5lbCIsICJmc2wsZWxvLWRtYS1jaGFubmVsIjsKIAkJCQlyZWcgPSA8MHg4MCAweDgwPjsKKwkJCQljZWxsLWluZGV4ID0gPDE+OwogCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OwogCQkJCWludGVycnVwdHMgPSA8NzEgOD47CiAJCQl9OwogCQkJZG1hLWNoYW5uZWxAMTAwIHsKIAkJCQljb21wYXRpYmxlID0gImZzbCxtcGM4Mzc3LWRtYS1jaGFubmVsIiwgImZzbCxlbG8tZG1hLWNoYW5uZWwiOwogCQkJCXJlZyA9IDwweDEwMCAweDgwPjsKKwkJCQljZWxsLWluZGV4ID0gPDI+OwogCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OwogCQkJCWludGVycnVwdHMgPSA8NzEgOD47CiAJCQl9OwogCQkJZG1hLWNoYW5uZWxAMTgwIHsKIAkJCQljb21wYXRpYmxlID0gImZzbCxtcGM4Mzc3LWRtYS1jaGFubmVsIiwgImZzbCxlbG8tZG1hLWNoYW5uZWwiOwogCQkJCXJlZyA9IDwweDE4MCAweDI4PjsKKwkJCQljZWxsLWluZGV4ID0gPDM+OwogCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OwogCQkJCWludGVycnVwdHMgPSA8NzEgOD47CiAJCQl9OwpAQCAtMzE1LDcgKzMxOSw4IEBACiAJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8MT47CiAJCSNzaXplLWNlbGxzID0gPDI+OwogCQkjYWRkcmVzcy1jZWxscyA9IDwzPjsKLQkJcmVnID0gPDB4ZTAwMDg1MDAgMHgxMDA+OworCQlyZWcgPSA8MHhlMDAwODUwMCAweDEwMAkJLyogaW50ZXJuYWwgcmVnaXN0ZXJzICovCisJCSAgICAgICAweGUwMDA4MzAwIDB4OD47CQkvKiBjb25maWcgc3BhY2UgYWNjZXNzIHJlZ2lzdGVycyAqLwogCQljb21wYXRpYmxlID0gImZzbCxtcGM4MzQ5LXBjaSI7CiAJCWRldmljZV90eXBlID0gInBjaSI7CiAJfTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4Mzc4X21kcy5kdHMgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODM3OF9tZHMuZHRzCmluZGV4IGVkMzJjOGQuLjY3YTA4ZDIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4Mzc4X21kcy5kdHMKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzgzNzhfbWRzLmR0cwpAQCAtMTM2LDYgKzEzNiwxMyBAQAogCQkJaW50ZXJydXB0cyA9IDwxNCAweDg+OwogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CiAJCQlkZnNycjsKKworCQkJcnRjQDY4IHsKKwkJCQljb21wYXRpYmxlID0gImRhbGxhcyxkczEzNzQiOworCQkJCXJlZyA9IDwweDY4PjsKKwkJCQlpbnRlcnJ1cHRzID0gPDE5IDB4OD47CisJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CisJCQl9OwogCQl9OwogCiAJCWkyY0AzMTAwIHsKQEAgLTE3MCwyNCArMTc3LDI4IEBACiAJCQlkbWEtY2hhbm5lbEAwIHsKIAkJCQljb21wYXRpYmxlID0gImZzbCxtcGM4Mzc4LWRtYS1jaGFubmVsIiwgImZzbCxlbG8tZG1hLWNoYW5uZWwiOwogCQkJCXJlZyA9IDwwIDB4ODA+OworCQkJCWNlbGwtaW5kZXggPSA8MD47CiAJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CiAJCQkJaW50ZXJydXB0cyA9IDw3MSA4PjsKIAkJCX07CiAJCQlkbWEtY2hhbm5lbEA4MCB7CiAJCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODM3OC1kbWEtY2hhbm5lbCIsICJmc2wsZWxvLWRtYS1jaGFubmVsIjsKIAkJCQlyZWcgPSA8MHg4MCAweDgwPjsKKwkJCQljZWxsLWluZGV4ID0gPDE+OwogCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OwogCQkJCWludGVycnVwdHMgPSA8NzEgOD47CiAJCQl9OwogCQkJZG1hLWNoYW5uZWxAMTAwIHsKIAkJCQljb21wYXRpYmxlID0gImZzbCxtcGM4Mzc4LWRtYS1jaGFubmVsIiwgImZzbCxlbG8tZG1hLWNoYW5uZWwiOwogCQkJCXJlZyA9IDwweDEwMCAweDgwPjsKKwkJCQljZWxsLWluZGV4ID0gPDI+OwogCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OwogCQkJCWludGVycnVwdHMgPSA8NzEgOD47CiAJCQl9OwogCQkJZG1hLWNoYW5uZWxAMTgwIHsKIAkJCQljb21wYXRpYmxlID0gImZzbCxtcGM4Mzc4LWRtYS1jaGFubmVsIiwgImZzbCxlbG8tZG1hLWNoYW5uZWwiOwogCQkJCXJlZyA9IDwweDE4MCAweDI4PjsKKwkJCQljZWxsLWluZGV4ID0gPDM+OwogCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OwogCQkJCWludGVycnVwdHMgPSA8NzEgOD47CiAJCQl9OwpAQCAtMzYwLDcgKzM3MSw4IEBACiAJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8MT47CiAJCSNzaXplLWNlbGxzID0gPDI+OwogCQkjYWRkcmVzcy1jZWxscyA9IDwzPjsKLQkJcmVnID0gPDB4ZTAwMDg1MDAgMHgxMDA+OworCQlyZWcgPSA8MHhlMDAwODUwMCAweDEwMAkJLyogaW50ZXJuYWwgcmVnaXN0ZXJzICovCisJCSAgICAgICAweGUwMDA4MzAwIDB4OD47CQkvKiBjb25maWcgc3BhY2UgYWNjZXNzIHJlZ2lzdGVycyAqLwogCQljb21wYXRpYmxlID0gImZzbCxtcGM4MzQ5LXBjaSI7CiAJCWRldmljZV90eXBlID0gInBjaSI7CiAJfTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4Mzc4X3JkYi5kdHMgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODM3OF9yZGIuZHRzCmluZGV4IDM0YTdmMmYuLjRhMDkxNTMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4Mzc4X3JkYi5kdHMKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzgzNzhfcmRiLmR0cwpAQCAtMTU1LDI0ICsxNTUsMjggQEAKIAkJCWRtYS1jaGFubmVsQDAgewogCQkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzgzNzgtZG1hLWNoYW5uZWwiLCAiZnNsLGVsby1kbWEtY2hhbm5lbCI7CiAJCQkJcmVnID0gPDAgMHg4MD47CisJCQkJY2VsbC1pbmRleCA9IDwwPjsKIAkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKIAkJCQlpbnRlcnJ1cHRzID0gPDcxIDg+OwogCQkJfTsKIAkJCWRtYS1jaGFubmVsQDgwIHsKIAkJCQljb21wYXRpYmxlID0gImZzbCxtcGM4Mzc4LWRtYS1jaGFubmVsIiwgImZzbCxlbG8tZG1hLWNoYW5uZWwiOwogCQkJCXJlZyA9IDwweDgwIDB4ODA+OworCQkJCWNlbGwtaW5kZXggPSA8MT47CiAJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CiAJCQkJaW50ZXJydXB0cyA9IDw3MSA4PjsKIAkJCX07CiAJCQlkbWEtY2hhbm5lbEAxMDAgewogCQkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzgzNzgtZG1hLWNoYW5uZWwiLCAiZnNsLGVsby1kbWEtY2hhbm5lbCI7CiAJCQkJcmVnID0gPDB4MTAwIDB4ODA+OworCQkJCWNlbGwtaW5kZXggPSA8Mj47CiAJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CiAJCQkJaW50ZXJydXB0cyA9IDw3MSA4PjsKIAkJCX07CiAJCQlkbWEtY2hhbm5lbEAxODAgewogCQkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzgzNzgtZG1hLWNoYW5uZWwiLCAiZnNsLGVsby1kbWEtY2hhbm5lbCI7CiAJCQkJcmVnID0gPDB4MTgwIDB4Mjg+OworCQkJCWNlbGwtaW5kZXggPSA8Mz47CiAJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CiAJCQkJaW50ZXJydXB0cyA9IDw3MSA4PjsKIAkJCX07CkBAIC0zMDEsNyArMzA1LDggQEAKIAkJI2ludGVycnVwdC1jZWxscyA9IDwxPjsKIAkJI3NpemUtY2VsbHMgPSA8Mj47CiAJCSNhZGRyZXNzLWNlbGxzID0gPDM+OwotCQlyZWcgPSA8MHhlMDAwODUwMCAweDEwMD47CisJCXJlZyA9IDwweGUwMDA4NTAwIDB4MTAwCQkvKiBpbnRlcm5hbCByZWdpc3RlcnMgKi8KKwkJICAgICAgIDB4ZTAwMDgzMDAgMHg4PjsJCS8qIGNvbmZpZyBzcGFjZSBhY2Nlc3MgcmVnaXN0ZXJzICovCiAJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzgzNDktcGNpIjsKIAkJZGV2aWNlX3R5cGUgPSAicGNpIjsKIAl9OwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzgzNzlfbWRzLmR0cyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4Mzc5X21kcy5kdHMKaW5kZXggZjRkYjllZC4uMzIzMzcwYSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzgzNzlfbWRzLmR0cworKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODM3OV9tZHMuZHRzCkBAIC0xMzYsNiArMTM2LDEzIEBACiAJCQlpbnRlcnJ1cHRzID0gPDE0IDB4OD47CiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKIAkJCWRmc3JyOworCisJCQlydGNANjggeworCQkJCWNvbXBhdGlibGUgPSAiZGFsbGFzLGRzMTM3NCI7CisJCQkJcmVnID0gPDB4Njg+OworCQkJCWludGVycnVwdHMgPSA8MTkgMHg4PjsKKwkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKKwkJCX07CiAJCX07CiAKIAkJaTJjQDMxMDAgewpAQCAtMTcwLDI0ICsxNzcsMjggQEAKIAkJCWRtYS1jaGFubmVsQDAgewogCQkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzgzNzktZG1hLWNoYW5uZWwiLCAiZnNsLGVsby1kbWEtY2hhbm5lbCI7CiAJCQkJcmVnID0gPDAgMHg4MD47CisJCQkJY2VsbC1pbmRleCA9IDwwPjsKIAkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKIAkJCQlpbnRlcnJ1cHRzID0gPDcxIDg+OwogCQkJfTsKIAkJCWRtYS1jaGFubmVsQDgwIHsKIAkJCQljb21wYXRpYmxlID0gImZzbCxtcGM4Mzc5LWRtYS1jaGFubmVsIiwgImZzbCxlbG8tZG1hLWNoYW5uZWwiOwogCQkJCXJlZyA9IDwweDgwIDB4ODA+OworCQkJCWNlbGwtaW5kZXggPSA8MT47CiAJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CiAJCQkJaW50ZXJydXB0cyA9IDw3MSA4PjsKIAkJCX07CiAJCQlkbWEtY2hhbm5lbEAxMDAgewogCQkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzgzNzktZG1hLWNoYW5uZWwiLCAiZnNsLGVsby1kbWEtY2hhbm5lbCI7CiAJCQkJcmVnID0gPDB4MTAwIDB4ODA+OworCQkJCWNlbGwtaW5kZXggPSA8Mj47CiAJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CiAJCQkJaW50ZXJydXB0cyA9IDw3MSA4PjsKIAkJCX07CiAJCQlkbWEtY2hhbm5lbEAxODAgewogCQkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzgzNzktZG1hLWNoYW5uZWwiLCAiZnNsLGVsby1kbWEtY2hhbm5lbCI7CiAJCQkJcmVnID0gPDB4MTgwIDB4Mjg+OworCQkJCWNlbGwtaW5kZXggPSA8Mz47CiAJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CiAJCQkJaW50ZXJydXB0cyA9IDw3MSA4PjsKIAkJCX07CkBAIC0zODgsNyArMzk5LDggQEAKIAkJI2ludGVycnVwdC1jZWxscyA9IDwxPjsKIAkJI3NpemUtY2VsbHMgPSA8Mj47CiAJCSNhZGRyZXNzLWNlbGxzID0gPDM+OwotCQlyZWcgPSA8MHhlMDAwODUwMCAweDEwMD47CisJCXJlZyA9IDwweGUwMDA4NTAwIDB4MTAwCQkvKiBpbnRlcm5hbCByZWdpc3RlcnMgKi8KKwkJICAgICAgIDB4ZTAwMDgzMDAgMHg4PjsJCS8qIGNvbmZpZyBzcGFjZSBhY2Nlc3MgcmVnaXN0ZXJzICovCiAJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzgzNDktcGNpIjsKIAkJZGV2aWNlX3R5cGUgPSAicGNpIjsKIAl9OwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzgzNzlfcmRiLmR0cyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4Mzc5X3JkYi5kdHMKaW5kZXggZTRkNzAzMC4uYmJkODg0YSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzgzNzlfcmRiLmR0cworKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODM3OV9yZGIuZHRzCkBAIC0xNTUsMjQgKzE1NSwyOCBAQAogCQkJZG1hLWNoYW5uZWxAMCB7CiAJCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODM3OS1kbWEtY2hhbm5lbCIsICJmc2wsZWxvLWRtYS1jaGFubmVsIjsKIAkJCQlyZWcgPSA8MCAweDgwPjsKKwkJCQljZWxsLWluZGV4ID0gPDA+OwogCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OwogCQkJCWludGVycnVwdHMgPSA8NzEgOD47CiAJCQl9OwogCQkJZG1hLWNoYW5uZWxAODAgewogCQkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzgzNzktZG1hLWNoYW5uZWwiLCAiZnNsLGVsby1kbWEtY2hhbm5lbCI7CiAJCQkJcmVnID0gPDB4ODAgMHg4MD47CisJCQkJY2VsbC1pbmRleCA9IDwxPjsKIAkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKIAkJCQlpbnRlcnJ1cHRzID0gPDcxIDg+OwogCQkJfTsKIAkJCWRtYS1jaGFubmVsQDEwMCB7CiAJCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODM3OS1kbWEtY2hhbm5lbCIsICJmc2wsZWxvLWRtYS1jaGFubmVsIjsKIAkJCQlyZWcgPSA8MHgxMDAgMHg4MD47CisJCQkJY2VsbC1pbmRleCA9IDwyPjsKIAkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKIAkJCQlpbnRlcnJ1cHRzID0gPDcxIDg+OwogCQkJfTsKIAkJCWRtYS1jaGFubmVsQDE4MCB7CiAJCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODM3OS1kbWEtY2hhbm5lbCIsICJmc2wsZWxvLWRtYS1jaGFubmVsIjsKIAkJCQlyZWcgPSA8MHgxODAgMHgyOD47CisJCQkJY2VsbC1pbmRleCA9IDwzPjsKIAkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKIAkJCQlpbnRlcnJ1cHRzID0gPDcxIDg+OwogCQkJfTsKQEAgLTMyOSw3ICszMzMsOCBAQAogCQkjaW50ZXJydXB0LWNlbGxzID0gPDE+OwogCQkjc2l6ZS1jZWxscyA9IDwyPjsKIAkJI2FkZHJlc3MtY2VsbHMgPSA8Mz47Ci0JCXJlZyA9IDwweGUwMDA4NTAwIDB4MTAwPjsKKwkJcmVnID0gPDB4ZTAwMDg1MDAgMHgxMDAJCS8qIGludGVybmFsIHJlZ2lzdGVycyAqLworCQkgICAgICAgMHhlMDAwODMwMCAweDg+OwkJLyogY29uZmlnIHNwYWNlIGFjY2VzcyByZWdpc3RlcnMgKi8KIAkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODM0OS1wY2kiOwogCQlkZXZpY2VfdHlwZSA9ICJwY2kiOwogCX07CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODUzNmRzLmR0cyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4NTM2ZHMuZHRzCmluZGV4IDE1MDVkNjguLjkzZmRkOTkgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4NTM2ZHMuZHRzCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4NTM2ZHMuZHRzCkBAIC05MSw2ICs5MSw4IEBACiAJCQlydGNANjggewogCQkJCWNvbXBhdGlibGUgPSAiZGFsbGFzLGRzMzIzMiI7CiAJCQkJcmVnID0gPDB4Njg+OworCQkJCWludGVycnVwdHMgPSA8MCAweDE+OworCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwogCQkJfTsKIAkJfTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzg2MTBfaHBjZC5kdHMgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODYxMF9ocGNkLmR0cwppbmRleCA1ODRhNGYxLi5mNzI0ZDcyIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODYxMF9ocGNkLmR0cworKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODYxMF9ocGNkLmR0cwpAQCAtMjA3LDcgKzIwNyw3IEBACiAJCQlyZWcgPSA8MHhlNDAwMCAweDEwMD47CiAJCX07CiAKLQkJaTJzQDE2MDAwIHsKKwkJc3NpQDE2MDAwIHsKIAkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzg2MTAtc3NpIjsKIAkJCWNlbGwtaW5kZXggPSA8MD47CiAJCQlyZWcgPSA8MHgxNjAwMCAweDEwMD47CkBAIC0yMTUsNiArMjE1LDggQEAKIAkJCWludGVycnVwdHMgPSA8NjIgMj47CiAJCQlmc2wsbW9kZSA9ICJpMnMtc2xhdmUiOwogCQkJY29kZWMtaGFuZGxlID0gPCZjczQyNzA+OworCQkJZnNsLHBsYXliYWNrLWRtYSA9IDwmZG1hMDA+OworCQkJZnNsLGNhcHR1cmUtZG1hID0gPCZkbWEwMT47CiAJCX07CiAKIAkJc3NpQDE2MTAwIHsKQEAgLTIzMywxNyArMjM1LDE3IEBACiAJCQlyZWcgPSA8MHgyMTMwMCAweDQ+OyAvKiBETUEgZ2VuZXJhbCBzdGF0dXMgcmVnaXN0ZXIgKi8KIAkJCXJhbmdlcyA9IDwweDAgMHgyMTEwMCAweDIwMD47CiAKLQkJCWRtYS1jaGFubmVsQDAgeworCQkJZG1hMDA6IGRtYS1jaGFubmVsQDAgewogCQkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzg2MTAtZG1hLWNoYW5uZWwiLAotCQkJCQkiZnNsLGVsb3BsdXMtZG1hLWNoYW5uZWwiOworCQkJCQkiZnNsLHNzaS1kbWEtY2hhbm5lbCI7CiAJCQkJY2VsbC1pbmRleCA9IDwwPjsKIAkJCQlyZWcgPSA8MHgwIDB4ODA+OwogCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwogCQkJCWludGVycnVwdHMgPSA8MjAgMj47CiAJCQl9OwotCQkJZG1hLWNoYW5uZWxAMSB7CisJCQlkbWEwMTogZG1hLWNoYW5uZWxAMSB7CiAJCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODYxMC1kbWEtY2hhbm5lbCIsCi0JCQkJCSJmc2wsZWxvcGx1cy1kbWEtY2hhbm5lbCI7CisJCQkJCSJmc2wsc3NpLWRtYS1jaGFubmVsIjsKIAkJCQljZWxsLWluZGV4ID0gPDE+OwogCQkJCXJlZyA9IDwweDgwIDB4ODA+OwogCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL3NiYzgzNDkuZHRzIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL3NiYzgzNDkuZHRzCmluZGV4IDQ1Zjc4OWIuLjBmOTQxZjMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9zYmM4MzQ5LmR0cworKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvc2JjODM0OS5kdHMKQEAgLTEwNywyNCArMTA3LDI4IEBACiAJCQlkbWEtY2hhbm5lbEAwIHsKIAkJCQljb21wYXRpYmxlID0gImZzbCxtcGM4MzQ5LWRtYS1jaGFubmVsIiwgImZzbCxlbG8tZG1hLWNoYW5uZWwiOwogCQkJCXJlZyA9IDwwIDB4ODA+OworCQkJCWNlbGwtaW5kZXggPSA8MD47CiAJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CiAJCQkJaW50ZXJydXB0cyA9IDw3MSA4PjsKIAkJCX07CiAJCQlkbWEtY2hhbm5lbEA4MCB7CiAJCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODM0OS1kbWEtY2hhbm5lbCIsICJmc2wsZWxvLWRtYS1jaGFubmVsIjsKIAkJCQlyZWcgPSA8MHg4MCAweDgwPjsKKwkJCQljZWxsLWluZGV4ID0gPDE+OwogCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OwogCQkJCWludGVycnVwdHMgPSA8NzEgOD47CiAJCQl9OwogCQkJZG1hLWNoYW5uZWxAMTAwIHsKIAkJCQljb21wYXRpYmxlID0gImZzbCxtcGM4MzQ5LWRtYS1jaGFubmVsIiwgImZzbCxlbG8tZG1hLWNoYW5uZWwiOwogCQkJCXJlZyA9IDwweDEwMCAweDgwPjsKKwkJCQljZWxsLWluZGV4ID0gPDI+OwogCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OwogCQkJCWludGVycnVwdHMgPSA8NzEgOD47CiAJCQl9OwogCQkJZG1hLWNoYW5uZWxAMTgwIHsKIAkJCQljb21wYXRpYmxlID0gImZzbCxtcGM4MzQ5LWRtYS1jaGFubmVsIiwgImZzbCxlbG8tZG1hLWNoYW5uZWwiOwogCQkJCXJlZyA9IDwweDE4MCAweDI4PjsKKwkJCQljZWxsLWluZGV4ID0gPDM+OwogCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OwogCQkJCWludGVycnVwdHMgPSA8NzEgOD47CiAJCQl9OwpAQCAtMjY4LDcgKzI3Miw4IEBACiAJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8MT47CiAJCSNzaXplLWNlbGxzID0gPDI+OwogCQkjYWRkcmVzcy1jZWxscyA9IDwzPjsKLQkJcmVnID0gPDB4ZTAwMDg1MDAgMHgxMDA+OworCQlyZWcgPSA8MHhlMDAwODUwMCAweDEwMAkJLyogaW50ZXJuYWwgcmVnaXN0ZXJzICovCisJCSAgICAgICAweGUwMDA4MzAwIDB4OD47CQkvKiBjb25maWcgc3BhY2UgYWNjZXNzIHJlZ2lzdGVycyAqLwogCQljb21wYXRpYmxlID0gImZzbCxtcGM4MzQ5LXBjaSI7CiAJCWRldmljZV90eXBlID0gInBjaSI7CiAJfTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9zZXF1b2lhLmR0cyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9zZXF1b2lhLmR0cwppbmRleCA3MmQxNWYwLi4zYjI5NWU4IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvc2VxdW9pYS5kdHMKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL3NlcXVvaWEuZHRzCkBAIC0yNDYsMTMgKzI0NiwyMiBAQAogCSAgIAkJfTsKIAogCQkJSUlDMDogaTJjQGVmNjAwNzAwIHsKKwkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCQkjc2l6ZS1jZWxscyA9IDwwPjsKIAkJCQljb21wYXRpYmxlID0gImlibSxpaWMtNDQwZXB4IiwgImlibSxpaWMiOwogCQkJCXJlZyA9IDwweGVmNjAwNzAwIDB4MDAwMDAwMTQ+OwogCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JlVJQzA+OwogCQkJCWludGVycnVwdHMgPSA8MHgyIDB4ND47CisKKwkJCQlod21vbkA0OCB7CisJCQkJCWNvbXBhdGlibGUgPSAiYWRpLGFkNzQxNCI7CisJCQkJCXJlZyA9IDwweDQ4PjsKKwkJCQl9OwogCQkJfTsKIAogCQkJSUlDMTogaTJjQGVmNjAwODAwIHsKKwkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCQkjc2l6ZS1jZWxscyA9IDwwPjsKIAkJCQljb21wYXRpYmxlID0gImlibSxpaWMtNDQwZXB4IiwgImlibSxpaWMiOwogCQkJCXJlZyA9IDwweGVmNjAwODAwIDB4MDAwMDAwMTQ+OwogCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JlVJQzA+OwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL3lvc2VtaXRlLmR0cyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy95b3NlbWl0ZS5kdHMKaW5kZXggZTM5NDIyYS4uMWZhM2NiNCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL3lvc2VtaXRlLmR0cworKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMveW9zZW1pdGUuZHRzCkBAIC0xNSw3ICsxNSw3IEBACiAJI2FkZHJlc3MtY2VsbHMgPSA8Mj47CiAJI3NpemUtY2VsbHMgPSA8MT47CiAJbW9kZWwgPSAiYW1jYyx5b3NlbWl0ZSI7Ci0JY29tcGF0aWJsZSA9ICJhbWNjLHlvc2VtaXRlIiwiYW1jYyxiYW1ib28iOworCWNvbXBhdGlibGUgPSAiYW1jYyx5b3NlbWl0ZSI7CiAJZGNyLXBhcmVudCA9IDwmey9jcHVzL2NwdUAwfT47CiAKIAlhbGlhc2VzIHsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2VsZl91dGlsLmMgYi9hcmNoL3Bvd2VycGMvYm9vdC9lbGZfdXRpbC5jCmluZGV4IDc0NTRhYTQuLjE1NjdhMGMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2VsZl91dGlsLmMKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZWxmX3V0aWwuYwpAQCAtMjcsNyArMjcsOCBAQAogCSAgICAgIGVsZjY0LT5lX2lkZW50W0VJX01BRzNdICA9PSBFTEZNQUczCSYmCiAJICAgICAgZWxmNjQtPmVfaWRlbnRbRUlfQ0xBU1NdID09IEVMRkNMQVNTNjQJJiYKIAkgICAgICBlbGY2NC0+ZV9pZGVudFtFSV9EQVRBXSAgPT0gRUxGREFUQTJNU0IJJiYKLQkgICAgICBlbGY2NC0+ZV90eXBlICAgICAgICAgICAgPT0gRVRfRVhFQwkmJgorCSAgICAgIChlbGY2NC0+ZV90eXBlICAgICAgICAgICAgPT0gRVRfRVhFQyB8fAorCSAgICAgICBlbGY2NC0+ZV90eXBlICAgICAgICAgICAgPT0gRVRfRFlOKQkmJgogCSAgICAgIGVsZjY0LT5lX21hY2hpbmUgICAgICAgICA9PSBFTV9QUEM2NCkpCiAJCXJldHVybiAwOwogCkBAIC01OCw3ICs1OSw4IEBACiAJICAgICAgZWxmMzItPmVfaWRlbnRbRUlfTUFHM10gID09IEVMRk1BRzMJJiYKIAkgICAgICBlbGYzMi0+ZV9pZGVudFtFSV9DTEFTU10gPT0gRUxGQ0xBU1MzMgkmJgogCSAgICAgIGVsZjMyLT5lX2lkZW50W0VJX0RBVEFdICA9PSBFTEZEQVRBMk1TQgkmJgotCSAgICAgIGVsZjMyLT5lX3R5cGUgICAgICAgICAgICA9PSBFVF9FWEVDCSYmCisJICAgICAgKGVsZjMyLT5lX3R5cGUgICAgICAgICAgICA9PSBFVF9FWEVDIHx8CisJICAgICAgIGVsZjMyLT5lX3R5cGUgICAgICAgICAgICA9PSBFVF9EWU4pICAgICAgJiYKIAkgICAgICBlbGYzMi0+ZV9tYWNoaW5lICAgICAgICAgPT0gRU1fUFBDKSkKIAkJcmV0dXJuIDA7CiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2xpYmZkdC9NYWtlZmlsZS5saWJmZHQgYi9hcmNoL3Bvd2VycGMvYm9vdC9saWJmZHQvTWFrZWZpbGUubGliZmR0CmluZGV4IDgyZjljNmEuLjZjNDJhY2YgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2xpYmZkdC9NYWtlZmlsZS5saWJmZHQKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvbGliZmR0L01ha2VmaWxlLmxpYmZkdApAQCAtMywxMiArMyw2IEBACiAjIFRoaXMgaXMgbm90IGEgY29tcGxldGUgTWFrZWZpbGUgb2YgaXRzZWxmLiAgSW5zdGVhZCwgaXQgaXMgZGVzaWduZWQgdG8KICMgYmUgZWFzaWx5IGVtYmVkZGFibGUgaW50byBvdGhlciBzeXN0ZW1zIG9mIE1ha2VmaWxlcy4KICMKLUxJQkZEVF9TUkNTID0gZmR0LmMgZmR0X3JvLmMgZmR0X3dpcC5jIGZkdF9zdy5jIGZkdF9ydy5jIGZkdF9zdHJlcnJvci5jCiBMSUJGRFRfSU5DTFVERVMgPSBmZHQuaCBsaWJmZHQuaAotTElCRkRUX0VYVFJBID0gbGliZmR0X2ludGVybmFsLmgKLUxJQkZEVF9MSUIgPSBsaWJmZHQvbGliZmR0LmEKLQorTElCRkRUX1NSQ1MgPSBmZHQuYyBmZHRfcm8uYyBmZHRfd2lwLmMgZmR0X3N3LmMgZmR0X3J3LmMgZmR0X3N0cmVycm9yLmMKIExJQkZEVF9PQkpTID0gJChMSUJGRFRfU1JDUzolLmM9JS5vKQotCi0kKExJQkZEVF9vYmpkaXIpLyQoTElCRkRUX0xJQik6ICQoYWRkcHJlZml4ICQoTElCRkRUX29iamRpcikvLCQoTElCRkRUX09CSlMpKQotCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9saWJmZHQvZmR0LmMgYi9hcmNoL3Bvd2VycGMvYm9vdC9saWJmZHQvZmR0LmMKaW5kZXggNTg2YTM2MS4uMmFjYWVjNSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvbGliZmR0L2ZkdC5jCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2xpYmZkdC9mZHQuYwpAQCAtNjMsNyArNjMsNyBAQAogCQkJcmV0dXJuIC1GRFRfRVJSX0JBRFZFUlNJT047CiAJCWlmIChmZHRfbGFzdF9jb21wX3ZlcnNpb24oZmR0KSA+IEZEVF9MQVNUX1NVUFBPUlRFRF9WRVJTSU9OKQogCQkJcmV0dXJuIC1GRFRfRVJSX0JBRFZFUlNJT047Ci0JfSBlbHNlIGlmIChmZHRfbWFnaWMoZmR0KSA9PSBTV19NQUdJQykgeworCX0gZWxzZSBpZiAoZmR0X21hZ2ljKGZkdCkgPT0gRkRUX1NXX01BR0lDKSB7CiAJCS8qIFVuZmluaXNoZWQgc2VxdWVudGlhbC13cml0ZSBibG9iICovCiAJCWlmIChmZHRfc2l6ZV9kdF9zdHJ1Y3QoZmR0KSA9PSAwKQogCQkJcmV0dXJuIC1GRFRfRVJSX0JBRFNUQVRFOwpAQCAtNzYsNyArNzYsNyBAQAogCiBjb25zdCB2b2lkICpmZHRfb2Zmc2V0X3B0cihjb25zdCB2b2lkICpmZHQsIGludCBvZmZzZXQsIGludCBsZW4pCiB7Ci0JY29uc3Qgdm9pZCAqcDsKKwljb25zdCBjaGFyICpwOwogCiAJaWYgKGZkdF92ZXJzaW9uKGZkdCkgPj0gMHgxMSkKIAkJaWYgKCgob2Zmc2V0ICsgbGVuKSA8IG9mZnNldCkKQEAgLTEyNCwxMSArMTI0LDU5IEBACiAJfQogCiAJaWYgKG5leHRvZmZzZXQpCi0JCSpuZXh0b2Zmc2V0ID0gQUxJR04ob2Zmc2V0LCBGRFRfVEFHU0laRSk7CisJCSpuZXh0b2Zmc2V0ID0gRkRUX1RBR0FMSUdOKG9mZnNldCk7CiAKIAlyZXR1cm4gdGFnOwogfQogCitpbnQgX2ZkdF9jaGVja19ub2RlX29mZnNldChjb25zdCB2b2lkICpmZHQsIGludCBvZmZzZXQpCit7CisJaWYgKChvZmZzZXQgPCAwKSB8fCAob2Zmc2V0ICUgRkRUX1RBR1NJWkUpCisJICAgIHx8IChmZHRfbmV4dF90YWcoZmR0LCBvZmZzZXQsICZvZmZzZXQpICE9IEZEVF9CRUdJTl9OT0RFKSkKKwkJcmV0dXJuIC1GRFRfRVJSX0JBRE9GRlNFVDsKKworCXJldHVybiBvZmZzZXQ7Cit9CisKK2ludCBmZHRfbmV4dF9ub2RlKGNvbnN0IHZvaWQgKmZkdCwgaW50IG9mZnNldCwgaW50ICpkZXB0aCkKK3sKKwlpbnQgbmV4dG9mZnNldCA9IDA7CisJdWludDMyX3QgdGFnOworCisJaWYgKG9mZnNldCA+PSAwKQorCQlpZiAoKG5leHRvZmZzZXQgPSBfZmR0X2NoZWNrX25vZGVfb2Zmc2V0KGZkdCwgb2Zmc2V0KSkgPCAwKQorCQkJcmV0dXJuIG5leHRvZmZzZXQ7CisKKwlkbyB7CisJCW9mZnNldCA9IG5leHRvZmZzZXQ7CisJCXRhZyA9IGZkdF9uZXh0X3RhZyhmZHQsIG9mZnNldCwgJm5leHRvZmZzZXQpOworCisJCXN3aXRjaCAodGFnKSB7CisJCWNhc2UgRkRUX1BST1A6CisJCWNhc2UgRkRUX05PUDoKKwkJCWJyZWFrOworCisJCWNhc2UgRkRUX0JFR0lOX05PREU6CisJCQlpZiAoZGVwdGgpCisJCQkJKCpkZXB0aCkrKzsKKwkJCWJyZWFrOworCisJCWNhc2UgRkRUX0VORF9OT0RFOgorCQkJaWYgKGRlcHRoKQorCQkJCSgqZGVwdGgpLS07CisJCQlicmVhazsKKworCQljYXNlIEZEVF9FTkQ6CisJCQlyZXR1cm4gLUZEVF9FUlJfTk9URk9VTkQ7CisKKwkJZGVmYXVsdDoKKwkJCXJldHVybiAtRkRUX0VSUl9CQURTVFJVQ1RVUkU7CisJCX0KKwl9IHdoaWxlICh0YWcgIT0gRkRUX0JFR0lOX05PREUpOworCisJcmV0dXJuIG9mZnNldDsKK30KKwogY29uc3QgY2hhciAqX2ZkdF9maW5kX3N0cmluZyhjb25zdCBjaGFyICpzdHJ0YWIsIGludCB0YWJzaXplLCBjb25zdCBjaGFyICpzKQogewogCWludCBsZW4gPSBzdHJsZW4ocykgKyAxOwpAQCAtMTM2LDE3ICsxODQsMTQgQEAKIAljb25zdCBjaGFyICpwOwogCiAJZm9yIChwID0gc3RydGFiOyBwIDw9IGxhc3Q7IHArKykKLQkJaWYgKG1lbWVxKHAsIHMsIGxlbikpCisJCWlmIChtZW1jbXAocCwgcywgbGVuKSA9PSAwKQogCQkJcmV0dXJuIHA7CiAJcmV0dXJuIE5VTEw7CiB9CiAKIGludCBmZHRfbW92ZShjb25zdCB2b2lkICpmZHQsIHZvaWQgKmJ1ZiwgaW50IGJ1ZnNpemUpCiB7Ci0JaW50IGVyciA9IGZkdF9jaGVja19oZWFkZXIoZmR0KTsKLQotCWlmIChlcnIpCi0JCXJldHVybiBlcnI7CisJRkRUX0NIRUNLX0hFQURFUihmZHQpOwogCiAJaWYgKGZkdF90b3RhbHNpemUoZmR0KSA+IGJ1ZnNpemUpCiAJCXJldHVybiAtRkRUX0VSUl9OT1NQQUNFOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvbGliZmR0L2ZkdF9yby5jIGIvYXJjaC9wb3dlcnBjL2Jvb3QvbGliZmR0L2ZkdF9yby5jCmluZGV4IDEyYTM3ZDUuLjEyOWI1MzIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2xpYmZkdC9mZHRfcm8uYworKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9saWJmZHQvZmR0X3JvLmMKQEAgLTU1LDE3ICs1NSwxMCBAQAogCiAjaW5jbHVkZSAibGliZmR0X2ludGVybmFsLmgiCiAKLSNkZWZpbmUgQ0hFQ0tfSEVBREVSKGZkdCkgXAotCXsgXAotCQlpbnQgZXJyOyBcCi0JCWlmICgoZXJyID0gZmR0X2NoZWNrX2hlYWRlcihmZHQpKSAhPSAwKSBcCi0JCQlyZXR1cm4gZXJyOyBcCi0JfQotCi1zdGF0aWMgaW50IG5vZGVuYW1lX2VxKGNvbnN0IHZvaWQgKmZkdCwgaW50IG9mZnNldCwKLQkJICAgICAgIGNvbnN0IGNoYXIgKnMsIGludCBsZW4pCitzdGF0aWMgaW50IF9mZHRfbm9kZW5hbWVfZXEoY29uc3Qgdm9pZCAqZmR0LCBpbnQgb2Zmc2V0LAorCQkJICAgIGNvbnN0IGNoYXIgKnMsIGludCBsZW4pCiB7Ci0JY29uc3QgY2hhciAqcCA9IGZkdF9vZmZzZXRfcHRyKGZkdCwgb2Zmc2V0LCBsZW4rMSk7CisJY29uc3QgY2hhciAqcCA9IGZkdF9vZmZzZXRfcHRyKGZkdCwgb2Zmc2V0ICsgRkRUX1RBR1NJWkUsIGxlbisxKTsKIAogCWlmICghIHApCiAJCS8qIHNob3J0IG1hdGNoICovCkBAIC04NCwxMiArNzcsMTIgQEAKIAogY29uc3QgY2hhciAqZmR0X3N0cmluZyhjb25zdCB2b2lkICpmZHQsIGludCBzdHJvZmZzZXQpCiB7Ci0JcmV0dXJuIChjaGFyICopZmR0ICsgZmR0X29mZl9kdF9zdHJpbmdzKGZkdCkgKyBzdHJvZmZzZXQ7CisJcmV0dXJuIChjb25zdCBjaGFyICopZmR0ICsgZmR0X29mZl9kdF9zdHJpbmdzKGZkdCkgKyBzdHJvZmZzZXQ7CiB9CiAKIGludCBmZHRfZ2V0X21lbV9yc3YoY29uc3Qgdm9pZCAqZmR0LCBpbnQgbiwgdWludDY0X3QgKmFkZHJlc3MsIHVpbnQ2NF90ICpzaXplKQogewotCUNIRUNLX0hFQURFUihmZHQpOworCUZEVF9DSEVDS19IRUFERVIoZmR0KTsKIAkqYWRkcmVzcyA9IGZkdDY0X3RvX2NwdShfZmR0X21lbV9yc3YoZmR0LCBuKS0+YWRkcmVzcyk7CiAJKnNpemUgPSBmZHQ2NF90b19jcHUoX2ZkdF9tZW1fcnN2KGZkdCwgbiktPnNpemUpOwogCXJldHVybiAwOwpAQCAtMTA0LDUwICs5NywyNCBAQAogCXJldHVybiBpOwogfQogCi1pbnQgZmR0X3N1Ym5vZGVfb2Zmc2V0X25hbWVsZW4oY29uc3Qgdm9pZCAqZmR0LCBpbnQgcGFyZW50b2Zmc2V0LAoraW50IGZkdF9zdWJub2RlX29mZnNldF9uYW1lbGVuKGNvbnN0IHZvaWQgKmZkdCwgaW50IG9mZnNldCwKIAkJCSAgICAgICBjb25zdCBjaGFyICpuYW1lLCBpbnQgbmFtZWxlbikKIHsKLQlpbnQgbGV2ZWwgPSAwOwotCXVpbnQzMl90IHRhZzsKLQlpbnQgb2Zmc2V0LCBuZXh0b2Zmc2V0OworCWludCBkZXB0aDsKIAotCUNIRUNLX0hFQURFUihmZHQpOworCUZEVF9DSEVDS19IRUFERVIoZmR0KTsKIAotCXRhZyA9IGZkdF9uZXh0X3RhZyhmZHQsIHBhcmVudG9mZnNldCwgJm5leHRvZmZzZXQpOwotCWlmICh0YWcgIT0gRkRUX0JFR0lOX05PREUpCi0JCXJldHVybiAtRkRUX0VSUl9CQURPRkZTRVQ7CisJZm9yIChkZXB0aCA9IDA7CisJICAgICBvZmZzZXQgPj0gMDsKKwkgICAgIG9mZnNldCA9IGZkdF9uZXh0X25vZGUoZmR0LCBvZmZzZXQsICZkZXB0aCkpIHsKKwkJaWYgKGRlcHRoIDwgMCkKKwkJCXJldHVybiAtRkRUX0VSUl9OT1RGT1VORDsKKwkJZWxzZSBpZiAoKGRlcHRoID09IDEpCisJCQkgJiYgX2ZkdF9ub2RlbmFtZV9lcShmZHQsIG9mZnNldCwgbmFtZSwgbmFtZWxlbikpCisJCQlyZXR1cm4gb2Zmc2V0OworCX0KIAotCWRvIHsKLQkJb2Zmc2V0ID0gbmV4dG9mZnNldDsKLQkJdGFnID0gZmR0X25leHRfdGFnKGZkdCwgb2Zmc2V0LCAmbmV4dG9mZnNldCk7Ci0KLQkJc3dpdGNoICh0YWcpIHsKLQkJY2FzZSBGRFRfRU5EOgotCQkJcmV0dXJuIC1GRFRfRVJSX1RSVU5DQVRFRDsKLQotCQljYXNlIEZEVF9CRUdJTl9OT0RFOgotCQkJbGV2ZWwrKzsKLQkJCWlmIChsZXZlbCAhPSAxKQotCQkJCWNvbnRpbnVlOwotCQkJaWYgKG5vZGVuYW1lX2VxKGZkdCwgb2Zmc2V0K0ZEVF9UQUdTSVpFLCBuYW1lLCBuYW1lbGVuKSkKLQkJCQkvKiBGb3VuZCBpdCEgKi8KLQkJCQlyZXR1cm4gb2Zmc2V0OwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBGRFRfRU5EX05PREU6Ci0JCQlsZXZlbC0tOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBGRFRfUFJPUDoKLQkJY2FzZSBGRFRfTk9QOgotCQkJYnJlYWs7Ci0KLQkJZGVmYXVsdDoKLQkJCXJldHVybiAtRkRUX0VSUl9CQURTVFJVQ1RVUkU7Ci0JCX0KLQl9IHdoaWxlIChsZXZlbCA+PSAwKTsKLQotCXJldHVybiAtRkRUX0VSUl9OT1RGT1VORDsKKwlyZXR1cm4gb2Zmc2V0OyAvKiBlcnJvciAqLwogfQogCiBpbnQgZmR0X3N1Ym5vZGVfb2Zmc2V0KGNvbnN0IHZvaWQgKmZkdCwgaW50IHBhcmVudG9mZnNldCwKQEAgLTE2Miw3ICsxMjksNyBAQAogCWNvbnN0IGNoYXIgKnAgPSBwYXRoOwogCWludCBvZmZzZXQgPSAwOwogCi0JQ0hFQ0tfSEVBREVSKGZkdCk7CisJRkRUX0NIRUNLX0hFQURFUihmZHQpOwogCiAJaWYgKCpwYXRoICE9ICcvJykKIAkJcmV0dXJuIC1GRFRfRVJSX0JBRFBBVEg7CkBAIC0xOTAsMTYgKzE1NywxMiBAQAogCiBjb25zdCBjaGFyICpmZHRfZ2V0X25hbWUoY29uc3Qgdm9pZCAqZmR0LCBpbnQgbm9kZW9mZnNldCwgaW50ICpsZW4pCiB7Ci0JY29uc3Qgc3RydWN0IGZkdF9ub2RlX2hlYWRlciAqbmg7CisJY29uc3Qgc3RydWN0IGZkdF9ub2RlX2hlYWRlciAqbmggPSBfZmR0X29mZnNldF9wdHIoZmR0LCBub2Rlb2Zmc2V0KTsKIAlpbnQgZXJyOwogCi0JaWYgKChlcnIgPSBmZHRfY2hlY2tfaGVhZGVyKGZkdCkpICE9IDApCi0JCWdvdG8gZmFpbDsKLQotCWVyciA9IC1GRFRfRVJSX0JBRE9GRlNFVDsKLQluaCA9IGZkdF9vZmZzZXRfcHRyKGZkdCwgbm9kZW9mZnNldCwgc2l6ZW9mKCpuaCkpOwotCWlmICghbmggfHwgKGZkdDMyX3RvX2NwdShuaC0+dGFnKSAhPSBGRFRfQkVHSU5fTk9ERSkpCi0JCWdvdG8gZmFpbDsKKwlpZiAoKChlcnIgPSBmZHRfY2hlY2tfaGVhZGVyKGZkdCkpICE9IDApCisJICAgIHx8ICgoZXJyID0gX2ZkdF9jaGVja19ub2RlX29mZnNldChmZHQsIG5vZGVvZmZzZXQpKSA8IDApKQorCQkJZ290byBmYWlsOwogCiAJaWYgKGxlbikKIAkJKmxlbiA9IHN0cmxlbihuaC0+bmFtZSk7CkBAIC0yMjIsMTcgKzE4NSwxMSBAQAogCWludCBvZmZzZXQsIG5leHRvZmZzZXQ7CiAJaW50IGVycjsKIAotCWlmICgoZXJyID0gZmR0X2NoZWNrX2hlYWRlcihmZHQpKSAhPSAwKQotCQlnb3RvIGZhaWw7CisJaWYgKCgoZXJyID0gZmR0X2NoZWNrX2hlYWRlcihmZHQpKSAhPSAwKQorCSAgICB8fCAoKGVyciA9IF9mZHRfY2hlY2tfbm9kZV9vZmZzZXQoZmR0LCBub2Rlb2Zmc2V0KSkgPCAwKSkKKwkJCWdvdG8gZmFpbDsKIAotCWVyciA9IC1GRFRfRVJSX0JBRE9GRlNFVDsKLQlpZiAobm9kZW9mZnNldCAlIEZEVF9UQUdTSVpFKQotCQlnb3RvIGZhaWw7Ci0KLQl0YWcgPSBmZHRfbmV4dF90YWcoZmR0LCBub2Rlb2Zmc2V0LCAmbmV4dG9mZnNldCk7Ci0JaWYgKHRhZyAhPSBGRFRfQkVHSU5fTk9ERSkKLQkJZ290byBmYWlsOwotCisJbmV4dG9mZnNldCA9IGVycjsKIAlkbyB7CiAJCW9mZnNldCA9IG5leHRvZmZzZXQ7CiAKQEAgLTI1Myw3ICsyMTAsNyBAQAogCQkJaWYgKCEgcHJvcCkKIAkJCQlnb3RvIGZhaWw7CiAJCQluYW1lc3Ryb2ZmID0gZmR0MzJfdG9fY3B1KHByb3AtPm5hbWVvZmYpOwotCQkJaWYgKHN0cmVxKGZkdF9zdHJpbmcoZmR0LCBuYW1lc3Ryb2ZmKSwgbmFtZSkpIHsKKwkJCWlmIChzdHJjbXAoZmR0X3N0cmluZyhmZHQsIG5hbWVzdHJvZmYpLCBuYW1lKSA9PSAwKSB7CiAJCQkJLyogRm91bmQgaXQhICovCiAJCQkJaW50IGxlbiA9IGZkdDMyX3RvX2NwdShwcm9wLT5sZW4pOwogCQkJCXByb3AgPSBmZHRfb2Zmc2V0X3B0cihmZHQsIG9mZnNldCwKQEAgLTMwNywxMTUgKzI2NCw5MSBAQAogCiBpbnQgZmR0X2dldF9wYXRoKGNvbnN0IHZvaWQgKmZkdCwgaW50IG5vZGVvZmZzZXQsIGNoYXIgKmJ1ZiwgaW50IGJ1ZmxlbikKIHsKLQl1aW50MzJfdCB0YWc7Ci0JaW50IHAgPSAwLCBvdmVyZmxvdyA9IDA7Ci0JaW50IG9mZnNldCwgbmV4dG9mZnNldCwgbmFtZWxlbjsKKwlpbnQgcGRlcHRoID0gMCwgcCA9IDA7CisJaW50IG9mZnNldCwgZGVwdGgsIG5hbWVsZW47CiAJY29uc3QgY2hhciAqbmFtZTsKIAotCUNIRUNLX0hFQURFUihmZHQpOwotCi0JdGFnID0gZmR0X25leHRfdGFnKGZkdCwgMCwgJm5leHRvZmZzZXQpOwotCWlmICh0YWcgIT0gRkRUX0JFR0lOX05PREUpCi0JCXJldHVybiAtRkRUX0VSUl9CQURTVFJVQ1RVUkU7CisJRkRUX0NIRUNLX0hFQURFUihmZHQpOwogCiAJaWYgKGJ1ZmxlbiA8IDIpCiAJCXJldHVybiAtRkRUX0VSUl9OT1NQQUNFOwotCWJ1ZlswXSA9ICcvJzsKLQlwID0gMTsKIAotCXdoaWxlIChuZXh0b2Zmc2V0IDw9IG5vZGVvZmZzZXQpIHsKLQkJb2Zmc2V0ID0gbmV4dG9mZnNldDsKLQkJdGFnID0gZmR0X25leHRfdGFnKGZkdCwgb2Zmc2V0LCAmbmV4dG9mZnNldCk7Ci0JCXN3aXRjaCAodGFnKSB7Ci0JCWNhc2UgRkRUX0VORDoKLQkJCXJldHVybiAtRkRUX0VSUl9CQURPRkZTRVQ7CisJZm9yIChvZmZzZXQgPSAwLCBkZXB0aCA9IDA7CisJICAgICAob2Zmc2V0ID49IDApICYmIChvZmZzZXQgPD0gbm9kZW9mZnNldCk7CisJICAgICBvZmZzZXQgPSBmZHRfbmV4dF9ub2RlKGZkdCwgb2Zmc2V0LCAmZGVwdGgpKSB7CisJCWlmIChwZGVwdGggPCBkZXB0aCkKKwkJCWNvbnRpbnVlOyAvKiBvdmVyZmxvd2VkIGJ1ZmZlciAqLwogCi0JCWNhc2UgRkRUX0JFR0lOX05PREU6Ci0JCQluYW1lID0gZmR0X2dldF9uYW1lKGZkdCwgb2Zmc2V0LCAmbmFtZWxlbik7Ci0JCQlpZiAoIW5hbWUpCi0JCQkJcmV0dXJuIG5hbWVsZW47Ci0JCQlpZiAob3ZlcmZsb3cgfHwgKChwICsgbmFtZWxlbiArIDEpID4gYnVmbGVuKSkgewotCQkJCW92ZXJmbG93Kys7Ci0JCQkJYnJlYWs7Ci0JCQl9CisJCXdoaWxlIChwZGVwdGggPiBkZXB0aCkgeworCQkJZG8geworCQkJCXAtLTsKKwkJCX0gd2hpbGUgKGJ1ZltwLTFdICE9ICcvJyk7CisJCQlwZGVwdGgtLTsKKwkJfQorCisJCW5hbWUgPSBmZHRfZ2V0X25hbWUoZmR0LCBvZmZzZXQsICZuYW1lbGVuKTsKKwkJaWYgKCFuYW1lKQorCQkJcmV0dXJuIG5hbWVsZW47CisJCWlmICgocCArIG5hbWVsZW4gKyAxKSA8PSBidWZsZW4pIHsKIAkJCW1lbWNweShidWYgKyBwLCBuYW1lLCBuYW1lbGVuKTsKIAkJCXAgKz0gbmFtZWxlbjsKIAkJCWJ1ZltwKytdID0gJy8nOwotCQkJYnJlYWs7CisJCQlwZGVwdGgrKzsKKwkJfQogCi0JCWNhc2UgRkRUX0VORF9OT0RFOgotCQkJaWYgKG92ZXJmbG93KSB7Ci0JCQkJb3ZlcmZsb3ctLTsKLQkJCQlicmVhazsKLQkJCX0KLQkJCWRvIHsKKwkJaWYgKG9mZnNldCA9PSBub2Rlb2Zmc2V0KSB7CisJCQlpZiAocGRlcHRoIDwgKGRlcHRoICsgMSkpCisJCQkJcmV0dXJuIC1GRFRfRVJSX05PU1BBQ0U7CisKKwkJCWlmIChwID4gMSkgLyogc3BlY2lhbCBjYXNlIHNvIHRoYXQgcm9vdCBwYXRoIGlzICIvIiwgbm90ICIiICovCiAJCQkJcC0tOwotCQkJfSB3aGlsZSAgKGJ1ZltwLTFdICE9ICcvJyk7Ci0JCQlicmVhazsKLQotCQljYXNlIEZEVF9QUk9QOgotCQljYXNlIEZEVF9OT1A6Ci0JCQlicmVhazsKLQotCQlkZWZhdWx0OgotCQkJcmV0dXJuIC1GRFRfRVJSX0JBRFNUUlVDVFVSRTsKKwkJCWJ1ZltwXSA9ICdcMCc7CisJCQlyZXR1cm4gcDsKIAkJfQogCX0KIAotCWlmIChvdmVyZmxvdykKLQkJcmV0dXJuIC1GRFRfRVJSX05PU1BBQ0U7CisJaWYgKChvZmZzZXQgPT0gLUZEVF9FUlJfTk9URk9VTkQpIHx8IChvZmZzZXQgPj0gMCkpCisJCXJldHVybiAtRkRUX0VSUl9CQURPRkZTRVQ7CisJZWxzZSBpZiAob2Zmc2V0ID09IC1GRFRfRVJSX0JBRE9GRlNFVCkKKwkJcmV0dXJuIC1GRFRfRVJSX0JBRFNUUlVDVFVSRTsKIAotCWlmIChwID4gMSkgLyogc3BlY2lhbCBjYXNlIHNvIHRoYXQgcm9vdCBwYXRoIGlzICIvIiwgbm90ICIiICovCi0JCXAtLTsKLQlidWZbcF0gPSAnXDAnOwotCXJldHVybiBwOworCXJldHVybiBvZmZzZXQ7IC8qIGVycm9yIGZyb20gZmR0X25leHRfbm9kZSgpICovCiB9CiAKIGludCBmZHRfc3VwZXJub2RlX2F0ZGVwdGhfb2Zmc2V0KGNvbnN0IHZvaWQgKmZkdCwgaW50IG5vZGVvZmZzZXQsCiAJCQkJIGludCBzdXBlcm5vZGVkZXB0aCwgaW50ICpub2RlZGVwdGgpCiB7Ci0JaW50IGxldmVsID0gLTE7Ci0JdWludDMyX3QgdGFnOwotCWludCBvZmZzZXQsIG5leHRvZmZzZXQgPSAwOworCWludCBvZmZzZXQsIGRlcHRoOwogCWludCBzdXBlcm5vZGVvZmZzZXQgPSAtRkRUX0VSUl9JTlRFUk5BTDsKIAotCUNIRUNLX0hFQURFUihmZHQpOworCUZEVF9DSEVDS19IRUFERVIoZmR0KTsKIAogCWlmIChzdXBlcm5vZGVkZXB0aCA8IDApCiAJCXJldHVybiAtRkRUX0VSUl9OT1RGT1VORDsKIAotCWRvIHsKLQkJb2Zmc2V0ID0gbmV4dG9mZnNldDsKLQkJdGFnID0gZmR0X25leHRfdGFnKGZkdCwgb2Zmc2V0LCAmbmV4dG9mZnNldCk7Ci0JCXN3aXRjaCAodGFnKSB7Ci0JCWNhc2UgRkRUX0VORDoKLQkJCXJldHVybiAtRkRUX0VSUl9CQURPRkZTRVQ7CisJZm9yIChvZmZzZXQgPSAwLCBkZXB0aCA9IDA7CisJICAgICAob2Zmc2V0ID49IDApICYmIChvZmZzZXQgPD0gbm9kZW9mZnNldCk7CisJICAgICBvZmZzZXQgPSBmZHRfbmV4dF9ub2RlKGZkdCwgb2Zmc2V0LCAmZGVwdGgpKSB7CisJCWlmIChkZXB0aCA9PSBzdXBlcm5vZGVkZXB0aCkKKwkJCXN1cGVybm9kZW9mZnNldCA9IG9mZnNldDsKIAotCQljYXNlIEZEVF9CRUdJTl9OT0RFOgotCQkJbGV2ZWwrKzsKLQkJCWlmIChsZXZlbCA9PSBzdXBlcm5vZGVkZXB0aCkKLQkJCQlzdXBlcm5vZGVvZmZzZXQgPSBvZmZzZXQ7Ci0JCQlicmVhazsKKwkJaWYgKG9mZnNldCA9PSBub2Rlb2Zmc2V0KSB7CisJCQlpZiAobm9kZWRlcHRoKQorCQkJCSpub2RlZGVwdGggPSBkZXB0aDsKIAotCQljYXNlIEZEVF9FTkRfTk9ERToKLQkJCWxldmVsLS07Ci0JCQlicmVhazsKLQotCQljYXNlIEZEVF9QUk9QOgotCQljYXNlIEZEVF9OT1A6Ci0JCQlicmVhazsKLQotCQlkZWZhdWx0OgotCQkJcmV0dXJuIC1GRFRfRVJSX0JBRFNUUlVDVFVSRTsKKwkJCWlmIChzdXBlcm5vZGVkZXB0aCA+IGRlcHRoKQorCQkJCXJldHVybiAtRkRUX0VSUl9OT1RGT1VORDsKKwkJCWVsc2UKKwkJCQlyZXR1cm4gc3VwZXJub2Rlb2Zmc2V0OwogCQl9Ci0JfSB3aGlsZSAob2Zmc2V0IDwgbm9kZW9mZnNldCk7CisJfQogCi0JaWYgKG5vZGVkZXB0aCkKLQkJKm5vZGVkZXB0aCA9IGxldmVsOworCWlmICgob2Zmc2V0ID09IC1GRFRfRVJSX05PVEZPVU5EKSB8fCAob2Zmc2V0ID49IDApKQorCQlyZXR1cm4gLUZEVF9FUlJfQkFET0ZGU0VUOworCWVsc2UgaWYgKG9mZnNldCA9PSAtRkRUX0VSUl9CQURPRkZTRVQpCisJCXJldHVybiAtRkRUX0VSUl9CQURTVFJVQ1RVUkU7CiAKLQlpZiAoc3VwZXJub2RlZGVwdGggPiBsZXZlbCkKLQkJcmV0dXJuIC1GRFRfRVJSX05PVEZPVU5EOwotCXJldHVybiBzdXBlcm5vZGVvZmZzZXQ7CisJcmV0dXJuIG9mZnNldDsgLyogZXJyb3IgZnJvbSBmZHRfbmV4dF9ub2RlKCkgKi8KIH0KIAogaW50IGZkdF9ub2RlX2RlcHRoKGNvbnN0IHZvaWQgKmZkdCwgaW50IG5vZGVvZmZzZXQpCkBAIC00NDMsNTEgKzM3NiwyNyBAQAogCQkJCSAgY29uc3QgY2hhciAqcHJvcG5hbWUsCiAJCQkJICBjb25zdCB2b2lkICpwcm9wdmFsLCBpbnQgcHJvcGxlbikKIHsKLQl1aW50MzJfdCB0YWc7Ci0JaW50IG9mZnNldCwgbmV4dG9mZnNldDsKKwlpbnQgb2Zmc2V0OwogCWNvbnN0IHZvaWQgKnZhbDsKIAlpbnQgbGVuOwogCi0JQ0hFQ0tfSEVBREVSKGZkdCk7Ci0KLQlpZiAoc3RhcnRvZmZzZXQgPj0gMCkgewotCQl0YWcgPSBmZHRfbmV4dF90YWcoZmR0LCBzdGFydG9mZnNldCwgJm5leHRvZmZzZXQpOwotCQlpZiAodGFnICE9IEZEVF9CRUdJTl9OT0RFKQotCQkJcmV0dXJuIC1GRFRfRVJSX0JBRE9GRlNFVDsKLQl9IGVsc2UgewotCQluZXh0b2Zmc2V0ID0gMDsKLQl9CisJRkRUX0NIRUNLX0hFQURFUihmZHQpOwogCiAJLyogRklYTUU6IFRoZSBhbGdvcml0aG0gaGVyZSBpcyBwcmV0dHkgaG9ycmlibGU6IHdlIHNjYW4gZWFjaAogCSAqIHByb3BlcnR5IG9mIGEgbm9kZSBpbiBmZHRfZ2V0cHJvcCgpLCB0aGVuIGlmIHRoYXQgZGlkbid0CiAJICogZmluZCB3aGF0IHdlIHdhbnQsIHdlIHNjYW4gb3ZlciB0aGVtIGFnYWluIG1ha2luZyBvdXIgd2F5CiAJICogdG8gdGhlIG5leHQgbm9kZS4gIFN0aWxsIGl0J3MgdGhlIGVhc2llc3QgdG8gaW1wbGVtZW50CiAJICogYXBwcm9hY2g7IHBlcmZvcm1hbmNlIGNhbiBjb21lIGxhdGVyLiAqLwotCWRvIHsKLQkJb2Zmc2V0ID0gbmV4dG9mZnNldDsKLQkJdGFnID0gZmR0X25leHRfdGFnKGZkdCwgb2Zmc2V0LCAmbmV4dG9mZnNldCk7CisJZm9yIChvZmZzZXQgPSBmZHRfbmV4dF9ub2RlKGZkdCwgc3RhcnRvZmZzZXQsIE5VTEwpOworCSAgICAgb2Zmc2V0ID49IDA7CisJICAgICBvZmZzZXQgPSBmZHRfbmV4dF9ub2RlKGZkdCwgb2Zmc2V0LCBOVUxMKSkgeworCQl2YWwgPSBmZHRfZ2V0cHJvcChmZHQsIG9mZnNldCwgcHJvcG5hbWUsICZsZW4pOworCQlpZiAodmFsICYmIChsZW4gPT0gcHJvcGxlbikKKwkJICAgICYmIChtZW1jbXAodmFsLCBwcm9wdmFsLCBsZW4pID09IDApKQorCQkJcmV0dXJuIG9mZnNldDsKKwl9CiAKLQkJc3dpdGNoICh0YWcpIHsKLQkJY2FzZSBGRFRfQkVHSU5fTk9ERToKLQkJCXZhbCA9IGZkdF9nZXRwcm9wKGZkdCwgb2Zmc2V0LCBwcm9wbmFtZSwgJmxlbik7Ci0JCQlpZiAodmFsCi0JCQkgICAgJiYgKGxlbiA9PSBwcm9wbGVuKQotCQkJICAgICYmIChtZW1jbXAodmFsLCBwcm9wdmFsLCBsZW4pID09IDApKQotCQkJCXJldHVybiBvZmZzZXQ7Ci0JCQlicmVhazsKLQotCQljYXNlIEZEVF9QUk9QOgotCQljYXNlIEZEVF9FTkQ6Ci0JCWNhc2UgRkRUX0VORF9OT0RFOgotCQljYXNlIEZEVF9OT1A6Ci0JCQlicmVhazsKLQotCQlkZWZhdWx0OgotCQkJcmV0dXJuIC1GRFRfRVJSX0JBRFNUUlVDVFVSRTsKLQkJfQotCX0gd2hpbGUgKHRhZyAhPSBGRFRfRU5EKTsKLQotCXJldHVybiAtRkRUX0VSUl9OT1RGT1VORDsKKwlyZXR1cm4gb2Zmc2V0OyAvKiBlcnJvciBmcm9tIGZkdF9uZXh0X25vZGUoKSAqLwogfQogCiBpbnQgZmR0X25vZGVfb2Zmc2V0X2J5X3BoYW5kbGUoY29uc3Qgdm9pZCAqZmR0LCB1aW50MzJfdCBwaGFuZGxlKQpAQCAtNDk5LDEwICs0MDgsMTAgQEAKIAkJCQkJICAgICAmcGhhbmRsZSwgc2l6ZW9mKHBoYW5kbGUpKTsKIH0KIAotaW50IF9zdHJpbmdsaXN0X2NvbnRhaW5zKGNvbnN0IHZvaWQgKnN0cmxpc3QsIGludCBsaXN0bGVuLCBjb25zdCBjaGFyICpzdHIpCitpbnQgX3N0cmluZ2xpc3RfY29udGFpbnMoY29uc3QgY2hhciAqc3RybGlzdCwgaW50IGxpc3RsZW4sIGNvbnN0IGNoYXIgKnN0cikKIHsKIAlpbnQgbGVuID0gc3RybGVuKHN0cik7Ci0JY29uc3Qgdm9pZCAqcDsKKwljb25zdCBjaGFyICpwOwogCiAJd2hpbGUgKGxpc3RsZW4gPj0gbGVuKSB7CiAJCWlmIChtZW1jbXAoc3RyLCBzdHJsaXN0LCBsZW4rMSkgPT0gMCkKQEAgLTUzNCw1MCArNDQzLDI0IEBACiBpbnQgZmR0X25vZGVfb2Zmc2V0X2J5X2NvbXBhdGlibGUoY29uc3Qgdm9pZCAqZmR0LCBpbnQgc3RhcnRvZmZzZXQsCiAJCQkJICBjb25zdCBjaGFyICpjb21wYXRpYmxlKQogewotCXVpbnQzMl90IHRhZzsKLQlpbnQgb2Zmc2V0LCBuZXh0b2Zmc2V0OwotCWludCBlcnI7CisJaW50IG9mZnNldCwgZXJyOwogCi0JQ0hFQ0tfSEVBREVSKGZkdCk7Ci0KLQlpZiAoc3RhcnRvZmZzZXQgPj0gMCkgewotCQl0YWcgPSBmZHRfbmV4dF90YWcoZmR0LCBzdGFydG9mZnNldCwgJm5leHRvZmZzZXQpOwotCQlpZiAodGFnICE9IEZEVF9CRUdJTl9OT0RFKQotCQkJcmV0dXJuIC1GRFRfRVJSX0JBRE9GRlNFVDsKLQl9IGVsc2UgewotCQluZXh0b2Zmc2V0ID0gMDsKLQl9CisJRkRUX0NIRUNLX0hFQURFUihmZHQpOwogCiAJLyogRklYTUU6IFRoZSBhbGdvcml0aG0gaGVyZSBpcyBwcmV0dHkgaG9ycmlibGU6IHdlIHNjYW4gZWFjaAogCSAqIHByb3BlcnR5IG9mIGEgbm9kZSBpbiBmZHRfbm9kZV9jaGVja19jb21wYXRpYmxlKCksIHRoZW4gaWYKIAkgKiB0aGF0IGRpZG4ndCBmaW5kIHdoYXQgd2Ugd2FudCwgd2Ugc2NhbiBvdmVyIHRoZW0gYWdhaW4KIAkgKiBtYWtpbmcgb3VyIHdheSB0byB0aGUgbmV4dCBub2RlLiAgU3RpbGwgaXQncyB0aGUgZWFzaWVzdCB0bwogCSAqIGltcGxlbWVudCBhcHByb2FjaDsgcGVyZm9ybWFuY2UgY2FuIGNvbWUgbGF0ZXIuICovCi0JZG8gewotCQlvZmZzZXQgPSBuZXh0b2Zmc2V0OwotCQl0YWcgPSBmZHRfbmV4dF90YWcoZmR0LCBvZmZzZXQsICZuZXh0b2Zmc2V0KTsKKwlmb3IgKG9mZnNldCA9IGZkdF9uZXh0X25vZGUoZmR0LCBzdGFydG9mZnNldCwgTlVMTCk7CisJICAgICBvZmZzZXQgPj0gMDsKKwkgICAgIG9mZnNldCA9IGZkdF9uZXh0X25vZGUoZmR0LCBvZmZzZXQsIE5VTEwpKSB7CisJCWVyciA9IGZkdF9ub2RlX2NoZWNrX2NvbXBhdGlibGUoZmR0LCBvZmZzZXQsIGNvbXBhdGlibGUpOworCQlpZiAoKGVyciA8IDApICYmIChlcnIgIT0gLUZEVF9FUlJfTk9URk9VTkQpKQorCQkJcmV0dXJuIGVycjsKKwkJZWxzZSBpZiAoZXJyID09IDApCisJCQlyZXR1cm4gb2Zmc2V0OworCX0KIAotCQlzd2l0Y2ggKHRhZykgewotCQljYXNlIEZEVF9CRUdJTl9OT0RFOgotCQkJZXJyID0gZmR0X25vZGVfY2hlY2tfY29tcGF0aWJsZShmZHQsIG9mZnNldCwKLQkJCQkJCQljb21wYXRpYmxlKTsKLQkJCWlmICgoZXJyIDwgMCkKLQkJCSAgICAmJiAoZXJyICE9IC1GRFRfRVJSX05PVEZPVU5EKSkKLQkJCQlyZXR1cm4gZXJyOwotCQkJZWxzZSBpZiAoZXJyID09IDApCi0JCQkJcmV0dXJuIG9mZnNldDsKLQkJCWJyZWFrOwotCi0JCWNhc2UgRkRUX1BST1A6Ci0JCWNhc2UgRkRUX0VORDoKLQkJY2FzZSBGRFRfRU5EX05PREU6Ci0JCWNhc2UgRkRUX05PUDoKLQkJCWJyZWFrOwotCi0JCWRlZmF1bHQ6Ci0JCQlyZXR1cm4gLUZEVF9FUlJfQkFEU1RSVUNUVVJFOwotCQl9Ci0JfSB3aGlsZSAodGFnICE9IEZEVF9FTkQpOwotCi0JcmV0dXJuIC1GRFRfRVJSX05PVEZPVU5EOworCXJldHVybiBvZmZzZXQ7IC8qIGVycm9yIGZyb20gZmR0X25leHRfbm9kZSgpICovCiB9CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9saWJmZHQvZmR0X3J3LmMgYi9hcmNoL3Bvd2VycGMvYm9vdC9saWJmZHQvZmR0X3J3LmMKaW5kZXggNjY3M2Y4ZS4uOGU3ZWM0YyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvbGliZmR0L2ZkdF9ydy5jCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2xpYmZkdC9mZHRfcncuYwpAQCAtNTUsMTAgKzU1LDEwIEBACiAKICNpbmNsdWRlICJsaWJmZHRfaW50ZXJuYWwuaCIKIAotc3RhdGljIGludCBfYmxvY2tzX21pc29yZGVyZWQoY29uc3Qgdm9pZCAqZmR0LAorc3RhdGljIGludCBfZmR0X2Jsb2Nrc19taXNvcmRlcmVkKGNvbnN0IHZvaWQgKmZkdCwKIAkJCSAgICAgIGludCBtZW1fcnN2X3NpemUsIGludCBzdHJ1Y3Rfc2l6ZSkKIHsKLQlyZXR1cm4gKGZkdF9vZmZfbWVtX3Jzdm1hcChmZHQpIDwgQUxJR04oc2l6ZW9mKHN0cnVjdCBmZHRfaGVhZGVyKSwgOCkpCisJcmV0dXJuIChmZHRfb2ZmX21lbV9yc3ZtYXAoZmR0KSA8IEZEVF9BTElHTihzaXplb2Yoc3RydWN0IGZkdF9oZWFkZXIpLCA4KSkKIAkJfHwgKGZkdF9vZmZfZHRfc3RydWN0KGZkdCkgPAogCQkgICAgKGZkdF9vZmZfbWVtX3Jzdm1hcChmZHQpICsgbWVtX3Jzdl9zaXplKSkKIAkJfHwgKGZkdF9vZmZfZHRfc3RyaW5ncyhmZHQpIDwKQEAgLTY3LDE2ICs2NywxNCBAQAogCQkgICAgKGZkdF9vZmZfZHRfc3RyaW5ncyhmZHQpICsgZmR0X3NpemVfZHRfc3RyaW5ncyhmZHQpKSk7CiB9CiAKLXN0YXRpYyBpbnQgcndfY2hlY2tfaGVhZGVyKHZvaWQgKmZkdCkKK3N0YXRpYyBpbnQgX2ZkdF9yd19jaGVja19oZWFkZXIodm9pZCAqZmR0KQogewotCWludCBlcnI7CisJRkRUX0NIRUNLX0hFQURFUihmZHQpOwogCi0JaWYgKChlcnIgPSBmZHRfY2hlY2tfaGVhZGVyKGZkdCkpKQotCQlyZXR1cm4gZXJyOwogCWlmIChmZHRfdmVyc2lvbihmZHQpIDwgMTcpCiAJCXJldHVybiAtRkRUX0VSUl9CQURWRVJTSU9OOwotCWlmIChfYmxvY2tzX21pc29yZGVyZWQoZmR0LCBzaXplb2Yoc3RydWN0IGZkdF9yZXNlcnZlX2VudHJ5KSwKLQkJCSAgICAgICBmZHRfc2l6ZV9kdF9zdHJ1Y3QoZmR0KSkpCisJaWYgKF9mZHRfYmxvY2tzX21pc29yZGVyZWQoZmR0LCBzaXplb2Yoc3RydWN0IGZkdF9yZXNlcnZlX2VudHJ5KSwKKwkJCQkgICBmZHRfc2l6ZV9kdF9zdHJ1Y3QoZmR0KSkpCiAJCXJldHVybiAtRkRUX0VSUl9CQURMQVlPVVQ7CiAJaWYgKGZkdF92ZXJzaW9uKGZkdCkgPiAxNykKIAkJZmR0X3NldF92ZXJzaW9uKGZkdCwgMTcpOwpAQCAtODQsMzYgKzgyLDM3IEBACiAJcmV0dXJuIDA7CiB9CiAKLSNkZWZpbmUgUldfQ0hFQ0tfSEVBREVSKGZkdCkgXAorI2RlZmluZSBGRFRfUldfQ0hFQ0tfSEVBREVSKGZkdCkgXAogCXsgXAogCQlpbnQgZXJyOyBcCi0JCWlmICgoZXJyID0gcndfY2hlY2tfaGVhZGVyKGZkdCkpICE9IDApIFwKKwkJaWYgKChlcnIgPSBfZmR0X3J3X2NoZWNrX2hlYWRlcihmZHQpKSAhPSAwKSBcCiAJCQlyZXR1cm4gZXJyOyBcCiAJfQogCi1zdGF0aWMgaW5saW5lIGludCBfYmxvYl9kYXRhX3NpemUodm9pZCAqZmR0KQorc3RhdGljIGlubGluZSBpbnQgX2ZkdF9kYXRhX3NpemUodm9pZCAqZmR0KQogewogCXJldHVybiBmZHRfb2ZmX2R0X3N0cmluZ3MoZmR0KSArIGZkdF9zaXplX2R0X3N0cmluZ3MoZmR0KTsKIH0KIAotc3RhdGljIGludCBfYmxvYl9zcGxpY2Uodm9pZCAqZmR0LCB2b2lkICpwLCBpbnQgb2xkbGVuLCBpbnQgbmV3bGVuKQorc3RhdGljIGludCBfZmR0X3NwbGljZSh2b2lkICpmZHQsIHZvaWQgKnNwbGljZXBvaW50LCBpbnQgb2xkbGVuLCBpbnQgbmV3bGVuKQogewotCXZvaWQgKmVuZCA9IGZkdCArIF9ibG9iX2RhdGFfc2l6ZShmZHQpOworCWNoYXIgKnAgPSBzcGxpY2Vwb2ludDsKKwljaGFyICplbmQgPSAoY2hhciAqKWZkdCArIF9mZHRfZGF0YV9zaXplKGZkdCk7CiAKIAlpZiAoKChwICsgb2xkbGVuKSA8IHApIHx8ICgocCArIG9sZGxlbikgPiBlbmQpKQogCQlyZXR1cm4gLUZEVF9FUlJfQkFET0ZGU0VUOwotCWlmICgoZW5kIC0gb2xkbGVuICsgbmV3bGVuKSA+IChmZHQgKyBmZHRfdG90YWxzaXplKGZkdCkpKQorCWlmICgoZW5kIC0gb2xkbGVuICsgbmV3bGVuKSA+ICgoY2hhciAqKWZkdCArIGZkdF90b3RhbHNpemUoZmR0KSkpCiAJCXJldHVybiAtRkRUX0VSUl9OT1NQQUNFOwogCW1lbW1vdmUocCArIG5ld2xlbiwgcCArIG9sZGxlbiwgZW5kIC0gcCAtIG9sZGxlbik7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgX2Jsb2Jfc3BsaWNlX21lbV9yc3Yodm9pZCAqZmR0LCBzdHJ1Y3QgZmR0X3Jlc2VydmVfZW50cnkgKnAsCi0JCQkJaW50IG9sZG4sIGludCBuZXduKQorc3RhdGljIGludCBfZmR0X3NwbGljZV9tZW1fcnN2KHZvaWQgKmZkdCwgc3RydWN0IGZkdF9yZXNlcnZlX2VudHJ5ICpwLAorCQkJICAgICAgIGludCBvbGRuLCBpbnQgbmV3bikKIHsKIAlpbnQgZGVsdGEgPSAobmV3biAtIG9sZG4pICogc2l6ZW9mKCpwKTsKIAlpbnQgZXJyOwotCWVyciA9IF9ibG9iX3NwbGljZShmZHQsIHAsIG9sZG4gKiBzaXplb2YoKnApLCBuZXduICogc2l6ZW9mKCpwKSk7CisJZXJyID0gX2ZkdF9zcGxpY2UoZmR0LCBwLCBvbGRuICogc2l6ZW9mKCpwKSwgbmV3biAqIHNpemVvZigqcCkpOwogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CiAJZmR0X3NldF9vZmZfZHRfc3RydWN0KGZkdCwgZmR0X29mZl9kdF9zdHJ1Y3QoZmR0KSArIGRlbHRhKTsKQEAgLTEyMSwxMyArMTIwLDEzIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgX2Jsb2Jfc3BsaWNlX3N0cnVjdCh2b2lkICpmZHQsIHZvaWQgKnAsCi0JCQkgICAgICAgaW50IG9sZGxlbiwgaW50IG5ld2xlbikKK3N0YXRpYyBpbnQgX2ZkdF9zcGxpY2Vfc3RydWN0KHZvaWQgKmZkdCwgdm9pZCAqcCwKKwkJCSAgICAgIGludCBvbGRsZW4sIGludCBuZXdsZW4pCiB7CiAJaW50IGRlbHRhID0gbmV3bGVuIC0gb2xkbGVuOwogCWludCBlcnI7CiAKLQlpZiAoKGVyciA9IF9ibG9iX3NwbGljZShmZHQsIHAsIG9sZGxlbiwgbmV3bGVuKSkpCisJaWYgKChlcnIgPSBfZmR0X3NwbGljZShmZHQsIHAsIG9sZGxlbiwgbmV3bGVuKSkpCiAJCXJldHVybiBlcnI7CiAKIAlmZHRfc2V0X3NpemVfZHRfc3RydWN0KGZkdCwgZmR0X3NpemVfZHRfc3RydWN0KGZkdCkgKyBkZWx0YSk7CkBAIC0xMzUsMTkgKzEzNCwyMCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IF9ibG9iX3NwbGljZV9zdHJpbmcodm9pZCAqZmR0LCBpbnQgbmV3bGVuKQorc3RhdGljIGludCBfZmR0X3NwbGljZV9zdHJpbmcodm9pZCAqZmR0LCBpbnQgbmV3bGVuKQogewotCXZvaWQgKnAgPSBmZHQgKyBmZHRfb2ZmX2R0X3N0cmluZ3MoZmR0KSArIGZkdF9zaXplX2R0X3N0cmluZ3MoZmR0KTsKKwl2b2lkICpwID0gKGNoYXIgKilmZHQKKwkJKyBmZHRfb2ZmX2R0X3N0cmluZ3MoZmR0KSArIGZkdF9zaXplX2R0X3N0cmluZ3MoZmR0KTsKIAlpbnQgZXJyOwogCi0JaWYgKChlcnIgPSBfYmxvYl9zcGxpY2UoZmR0LCBwLCAwLCBuZXdsZW4pKSkKKwlpZiAoKGVyciA9IF9mZHRfc3BsaWNlKGZkdCwgcCwgMCwgbmV3bGVuKSkpCiAJCXJldHVybiBlcnI7CiAKIAlmZHRfc2V0X3NpemVfZHRfc3RyaW5ncyhmZHQsIGZkdF9zaXplX2R0X3N0cmluZ3MoZmR0KSArIG5ld2xlbik7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgX2ZpbmRfYWRkX3N0cmluZyh2b2lkICpmZHQsIGNvbnN0IGNoYXIgKnMpCitzdGF0aWMgaW50IF9mZHRfZmluZF9hZGRfc3RyaW5nKHZvaWQgKmZkdCwgY29uc3QgY2hhciAqcykKIHsKIAljaGFyICpzdHJ0YWIgPSAoY2hhciAqKWZkdCArIGZkdF9vZmZfZHRfc3RyaW5ncyhmZHQpOwogCWNvbnN0IGNoYXIgKnA7CkBAIC0xNjEsNyArMTYxLDcgQEAKIAkJcmV0dXJuIChwIC0gc3RydGFiKTsKIAogCW5ldyA9IHN0cnRhYiArIGZkdF9zaXplX2R0X3N0cmluZ3MoZmR0KTsKLQllcnIgPSBfYmxvYl9zcGxpY2Vfc3RyaW5nKGZkdCwgbGVuKTsKKwllcnIgPSBfZmR0X3NwbGljZV9zdHJpbmcoZmR0LCBsZW4pOwogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CiAKQEAgLTE3NCwxMSArMTc0LDEwIEBACiAJc3RydWN0IGZkdF9yZXNlcnZlX2VudHJ5ICpyZTsKIAlpbnQgZXJyOwogCi0JaWYgKChlcnIgPSByd19jaGVja19oZWFkZXIoZmR0KSkpCi0JCXJldHVybiBlcnI7CisJRkRUX1JXX0NIRUNLX0hFQURFUihmZHQpOwogCiAJcmUgPSBfZmR0X21lbV9yc3ZfdyhmZHQsIGZkdF9udW1fbWVtX3JzdihmZHQpKTsKLQllcnIgPSBfYmxvYl9zcGxpY2VfbWVtX3JzdihmZHQsIHJlLCAwLCAxKTsKKwllcnIgPSBfZmR0X3NwbGljZV9tZW1fcnN2KGZkdCwgcmUsIDAsIDEpOwogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CiAKQEAgLTE5MiwxOSArMTkxLDE5IEBACiAJc3RydWN0IGZkdF9yZXNlcnZlX2VudHJ5ICpyZSA9IF9mZHRfbWVtX3Jzdl93KGZkdCwgbik7CiAJaW50IGVycjsKIAotCWlmICgoZXJyID0gcndfY2hlY2tfaGVhZGVyKGZkdCkpKQotCQlyZXR1cm4gZXJyOworCUZEVF9SV19DSEVDS19IRUFERVIoZmR0KTsKKwogCWlmIChuID49IGZkdF9udW1fbWVtX3JzdihmZHQpKQogCQlyZXR1cm4gLUZEVF9FUlJfTk9URk9VTkQ7CiAKLQllcnIgPSBfYmxvYl9zcGxpY2VfbWVtX3JzdihmZHQsIHJlLCAxLCAwKTsKKwllcnIgPSBfZmR0X3NwbGljZV9tZW1fcnN2KGZkdCwgcmUsIDEsIDApOwogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgX3Jlc2l6ZV9wcm9wZXJ0eSh2b2lkICpmZHQsIGludCBub2Rlb2Zmc2V0LCBjb25zdCBjaGFyICpuYW1lLCBpbnQgbGVuLAotCQkJICAgIHN0cnVjdCBmZHRfcHJvcGVydHkgKipwcm9wKQorc3RhdGljIGludCBfZmR0X3Jlc2l6ZV9wcm9wZXJ0eSh2b2lkICpmZHQsIGludCBub2Rlb2Zmc2V0LCBjb25zdCBjaGFyICpuYW1lLAorCQkJCWludCBsZW4sIHN0cnVjdCBmZHRfcHJvcGVydHkgKipwcm9wKQogewogCWludCBvbGRsZW47CiAJaW50IGVycjsKQEAgLTIxMywzNiArMjEyLDMzIEBACiAJaWYgKCEgKCpwcm9wKSkKIAkJcmV0dXJuIG9sZGxlbjsKIAotCWlmICgoZXJyID0gX2Jsb2Jfc3BsaWNlX3N0cnVjdChmZHQsICgqcHJvcCktPmRhdGEsCi0JCQkJICAgICAgIEFMSUdOKG9sZGxlbiwgRkRUX1RBR1NJWkUpLAotCQkJCSAgICAgICBBTElHTihsZW4sIEZEVF9UQUdTSVpFKSkpKQorCWlmICgoZXJyID0gX2ZkdF9zcGxpY2Vfc3RydWN0KGZkdCwgKCpwcm9wKS0+ZGF0YSwgRkRUX1RBR0FMSUdOKG9sZGxlbiksCisJCQkJICAgICAgRkRUX1RBR0FMSUdOKGxlbikpKSkKIAkJcmV0dXJuIGVycjsKIAogCSgqcHJvcCktPmxlbiA9IGNwdV90b19mZHQzMihsZW4pOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IF9hZGRfcHJvcGVydHkodm9pZCAqZmR0LCBpbnQgbm9kZW9mZnNldCwgY29uc3QgY2hhciAqbmFtZSwgaW50IGxlbiwKLQkJCSBzdHJ1Y3QgZmR0X3Byb3BlcnR5ICoqcHJvcCkKK3N0YXRpYyBpbnQgX2ZkdF9hZGRfcHJvcGVydHkodm9pZCAqZmR0LCBpbnQgbm9kZW9mZnNldCwgY29uc3QgY2hhciAqbmFtZSwKKwkJCSAgICAgaW50IGxlbiwgc3RydWN0IGZkdF9wcm9wZXJ0eSAqKnByb3ApCiB7Ci0JdWludDMyX3QgdGFnOwogCWludCBwcm9wbGVuOwogCWludCBuZXh0b2Zmc2V0OwogCWludCBuYW1lc3Ryb2ZmOwogCWludCBlcnI7CiAKLQl0YWcgPSBmZHRfbmV4dF90YWcoZmR0LCBub2Rlb2Zmc2V0LCAmbmV4dG9mZnNldCk7Ci0JaWYgKHRhZyAhPSBGRFRfQkVHSU5fTk9ERSkKLQkJcmV0dXJuIC1GRFRfRVJSX0JBRE9GRlNFVDsKKwlpZiAoKG5leHRvZmZzZXQgPSBfZmR0X2NoZWNrX25vZGVfb2Zmc2V0KGZkdCwgbm9kZW9mZnNldCkpIDwgMCkKKwkJcmV0dXJuIG5leHRvZmZzZXQ7CiAKLQluYW1lc3Ryb2ZmID0gX2ZpbmRfYWRkX3N0cmluZyhmZHQsIG5hbWUpOworCW5hbWVzdHJvZmYgPSBfZmR0X2ZpbmRfYWRkX3N0cmluZyhmZHQsIG5hbWUpOwogCWlmIChuYW1lc3Ryb2ZmIDwgMCkKIAkJcmV0dXJuIG5hbWVzdHJvZmY7CiAKIAkqcHJvcCA9IF9mZHRfb2Zmc2V0X3B0cl93KGZkdCwgbmV4dG9mZnNldCk7Ci0JcHJvcGxlbiA9IHNpemVvZigqKnByb3ApICsgQUxJR04obGVuLCBGRFRfVEFHU0laRSk7CisJcHJvcGxlbiA9IHNpemVvZigqKnByb3ApICsgRkRUX1RBR0FMSUdOKGxlbik7CiAKLQllcnIgPSBfYmxvYl9zcGxpY2Vfc3RydWN0KGZkdCwgKnByb3AsIDAsIHByb3BsZW4pOworCWVyciA9IF9mZHRfc3BsaWNlX3N0cnVjdChmZHQsICpwcm9wLCAwLCBwcm9wbGVuKTsKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwogCkBAIC0yNTIsMTggKzI0OCw0MCBAQAogCXJldHVybiAwOwogfQogCitpbnQgZmR0X3NldF9uYW1lKHZvaWQgKmZkdCwgaW50IG5vZGVvZmZzZXQsIGNvbnN0IGNoYXIgKm5hbWUpCit7CisJY2hhciAqbmFtZXA7CisJaW50IG9sZGxlbiwgbmV3bGVuOworCWludCBlcnI7CisKKwlGRFRfUldfQ0hFQ0tfSEVBREVSKGZkdCk7CisKKwluYW1lcCA9IChjaGFyICopKHVpbnRwdHJfdClmZHRfZ2V0X25hbWUoZmR0LCBub2Rlb2Zmc2V0LCAmb2xkbGVuKTsKKwlpZiAoIW5hbWVwKQorCQlyZXR1cm4gb2xkbGVuOworCisJbmV3bGVuID0gc3RybGVuKG5hbWUpOworCisJZXJyID0gX2ZkdF9zcGxpY2Vfc3RydWN0KGZkdCwgbmFtZXAsIEZEVF9UQUdBTElHTihvbGRsZW4rMSksCisJCQkJIEZEVF9UQUdBTElHTihuZXdsZW4rMSkpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwltZW1jcHkobmFtZXAsIG5hbWUsIG5ld2xlbisxKTsKKwlyZXR1cm4gMDsKK30KKwogaW50IGZkdF9zZXRwcm9wKHZvaWQgKmZkdCwgaW50IG5vZGVvZmZzZXQsIGNvbnN0IGNoYXIgKm5hbWUsCiAJCWNvbnN0IHZvaWQgKnZhbCwgaW50IGxlbikKIHsKIAlzdHJ1Y3QgZmR0X3Byb3BlcnR5ICpwcm9wOwogCWludCBlcnI7CiAKLQlpZiAoKGVyciA9IHJ3X2NoZWNrX2hlYWRlcihmZHQpKSkKLQkJcmV0dXJuIGVycjsKKwlGRFRfUldfQ0hFQ0tfSEVBREVSKGZkdCk7CiAKLQllcnIgPSBfcmVzaXplX3Byb3BlcnR5KGZkdCwgbm9kZW9mZnNldCwgbmFtZSwgbGVuLCAmcHJvcCk7CisJZXJyID0gX2ZkdF9yZXNpemVfcHJvcGVydHkoZmR0LCBub2Rlb2Zmc2V0LCBuYW1lLCBsZW4sICZwcm9wKTsKIAlpZiAoZXJyID09IC1GRFRfRVJSX05PVEZPVU5EKQotCQllcnIgPSBfYWRkX3Byb3BlcnR5KGZkdCwgbm9kZW9mZnNldCwgbmFtZSwgbGVuLCAmcHJvcCk7CisJCWVyciA9IF9mZHRfYWRkX3Byb3BlcnR5KGZkdCwgbm9kZW9mZnNldCwgbmFtZSwgbGVuLCAmcHJvcCk7CiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIApAQCAtMjc2LDE0ICsyOTQsMTQgQEAKIAlzdHJ1Y3QgZmR0X3Byb3BlcnR5ICpwcm9wOwogCWludCBsZW4sIHByb3BsZW47CiAKLQlSV19DSEVDS19IRUFERVIoZmR0KTsKKwlGRFRfUldfQ0hFQ0tfSEVBREVSKGZkdCk7CiAKIAlwcm9wID0gZmR0X2dldF9wcm9wZXJ0eV93KGZkdCwgbm9kZW9mZnNldCwgbmFtZSwgJmxlbik7CiAJaWYgKCEgcHJvcCkKIAkJcmV0dXJuIGxlbjsKIAotCXByb3BsZW4gPSBzaXplb2YoKnByb3ApICsgQUxJR04obGVuLCBGRFRfVEFHU0laRSk7Ci0JcmV0dXJuIF9ibG9iX3NwbGljZV9zdHJ1Y3QoZmR0LCBwcm9wLCBwcm9wbGVuLCAwKTsKKwlwcm9wbGVuID0gc2l6ZW9mKCpwcm9wKSArIEZEVF9UQUdBTElHTihsZW4pOworCXJldHVybiBfZmR0X3NwbGljZV9zdHJ1Y3QoZmR0LCBwcm9wLCBwcm9wbGVuLCAwKTsKIH0KIAogaW50IGZkdF9hZGRfc3Vibm9kZV9uYW1lbGVuKHZvaWQgKmZkdCwgaW50IHBhcmVudG9mZnNldCwKQEAgLTI5Niw3ICszMTQsNyBAQAogCXVpbnQzMl90IHRhZzsKIAl1aW50MzJfdCAqZW5kdGFnOwogCi0JUldfQ0hFQ0tfSEVBREVSKGZkdCk7CisJRkRUX1JXX0NIRUNLX0hFQURFUihmZHQpOwogCiAJb2Zmc2V0ID0gZmR0X3N1Ym5vZGVfb2Zmc2V0X25hbWVsZW4oZmR0LCBwYXJlbnRvZmZzZXQsIG5hbWUsIG5hbWVsZW4pOwogCWlmIChvZmZzZXQgPj0gMCkKQEAgLTMwOSwxOSArMzI3LDE5IEBACiAJZG8gewogCQlvZmZzZXQgPSBuZXh0b2Zmc2V0OwogCQl0YWcgPSBmZHRfbmV4dF90YWcoZmR0LCBvZmZzZXQsICZuZXh0b2Zmc2V0KTsKLQl9IHdoaWxlICh0YWcgPT0gRkRUX1BST1ApOworCX0gd2hpbGUgKCh0YWcgPT0gRkRUX1BST1ApIHx8ICh0YWcgPT0gRkRUX05PUCkpOwogCiAJbmggPSBfZmR0X29mZnNldF9wdHJfdyhmZHQsIG9mZnNldCk7Ci0Jbm9kZWxlbiA9IHNpemVvZigqbmgpICsgQUxJR04obmFtZWxlbisxLCBGRFRfVEFHU0laRSkgKyBGRFRfVEFHU0laRTsKKwlub2RlbGVuID0gc2l6ZW9mKCpuaCkgKyBGRFRfVEFHQUxJR04obmFtZWxlbisxKSArIEZEVF9UQUdTSVpFOwogCi0JZXJyID0gX2Jsb2Jfc3BsaWNlX3N0cnVjdChmZHQsIG5oLCAwLCBub2RlbGVuKTsKKwllcnIgPSBfZmR0X3NwbGljZV9zdHJ1Y3QoZmR0LCBuaCwgMCwgbm9kZWxlbik7CiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIAogCW5oLT50YWcgPSBjcHVfdG9fZmR0MzIoRkRUX0JFR0lOX05PREUpOwotCW1lbXNldChuaC0+bmFtZSwgMCwgQUxJR04obmFtZWxlbisxLCBGRFRfVEFHU0laRSkpOworCW1lbXNldChuaC0+bmFtZSwgMCwgRkRUX1RBR0FMSUdOKG5hbWVsZW4rMSkpOwogCW1lbWNweShuaC0+bmFtZSwgbmFtZSwgbmFtZWxlbik7Ci0JZW5kdGFnID0gKHVpbnQzMl90ICopKCh2b2lkICopbmggKyBub2RlbGVuIC0gRkRUX1RBR1NJWkUpOworCWVuZHRhZyA9ICh1aW50MzJfdCAqKSgoY2hhciAqKW5oICsgbm9kZWxlbiAtIEZEVF9UQUdTSVpFKTsKIAkqZW5kdGFnID0gY3B1X3RvX2ZkdDMyKEZEVF9FTkRfTk9ERSk7CiAKIAlyZXR1cm4gb2Zmc2V0OwpAQCAtMzM2LDM2ICszNTQsMzYgQEAKIHsKIAlpbnQgZW5kb2Zmc2V0OwogCi0JUldfQ0hFQ0tfSEVBREVSKGZkdCk7CisJRkRUX1JXX0NIRUNLX0hFQURFUihmZHQpOwogCiAJZW5kb2Zmc2V0ID0gX2ZkdF9ub2RlX2VuZF9vZmZzZXQoZmR0LCBub2Rlb2Zmc2V0KTsKIAlpZiAoZW5kb2Zmc2V0IDwgMCkKIAkJcmV0dXJuIGVuZG9mZnNldDsKIAotCXJldHVybiBfYmxvYl9zcGxpY2Vfc3RydWN0KGZkdCwgX2ZkdF9vZmZzZXRfcHRyX3coZmR0LCBub2Rlb2Zmc2V0KSwKLQkJCQkgICBlbmRvZmZzZXQgLSBub2Rlb2Zmc2V0LCAwKTsKKwlyZXR1cm4gX2ZkdF9zcGxpY2Vfc3RydWN0KGZkdCwgX2ZkdF9vZmZzZXRfcHRyX3coZmR0LCBub2Rlb2Zmc2V0KSwKKwkJCQkgIGVuZG9mZnNldCAtIG5vZGVvZmZzZXQsIDApOwogfQogCi1zdGF0aWMgdm9pZCBfcGFja2Jsb2Nrcyhjb25zdCB2b2lkICpmZHQsIHZvaWQgKmJ1ZiwKLQkJICAgICAgIGludCBtZW1fcnN2X3NpemUsIGludCBzdHJ1Y3Rfc2l6ZSkKK3N0YXRpYyB2b2lkIF9mZHRfcGFja2Jsb2Nrcyhjb25zdCBjaGFyICpvbGQsIGNoYXIgKm5ldywKKwkJCSAgICBpbnQgbWVtX3Jzdl9zaXplLCBpbnQgc3RydWN0X3NpemUpCiB7CiAJaW50IG1lbV9yc3Zfb2ZmLCBzdHJ1Y3Rfb2ZmLCBzdHJpbmdzX29mZjsKIAotCW1lbV9yc3Zfb2ZmID0gQUxJR04oc2l6ZW9mKHN0cnVjdCBmZHRfaGVhZGVyKSwgOCk7CisJbWVtX3Jzdl9vZmYgPSBGRFRfQUxJR04oc2l6ZW9mKHN0cnVjdCBmZHRfaGVhZGVyKSwgOCk7CiAJc3RydWN0X29mZiA9IG1lbV9yc3Zfb2ZmICsgbWVtX3Jzdl9zaXplOwogCXN0cmluZ3Nfb2ZmID0gc3RydWN0X29mZiArIHN0cnVjdF9zaXplOwogCi0JbWVtbW92ZShidWYgKyBtZW1fcnN2X29mZiwgZmR0ICsgZmR0X29mZl9tZW1fcnN2bWFwKGZkdCksIG1lbV9yc3Zfc2l6ZSk7Ci0JZmR0X3NldF9vZmZfbWVtX3Jzdm1hcChidWYsIG1lbV9yc3Zfb2ZmKTsKKwltZW1tb3ZlKG5ldyArIG1lbV9yc3Zfb2ZmLCBvbGQgKyBmZHRfb2ZmX21lbV9yc3ZtYXAob2xkKSwgbWVtX3Jzdl9zaXplKTsKKwlmZHRfc2V0X29mZl9tZW1fcnN2bWFwKG5ldywgbWVtX3Jzdl9vZmYpOwogCi0JbWVtbW92ZShidWYgKyBzdHJ1Y3Rfb2ZmLCBmZHQgKyBmZHRfb2ZmX2R0X3N0cnVjdChmZHQpLCBzdHJ1Y3Rfc2l6ZSk7Ci0JZmR0X3NldF9vZmZfZHRfc3RydWN0KGJ1Ziwgc3RydWN0X29mZik7Ci0JZmR0X3NldF9zaXplX2R0X3N0cnVjdChidWYsIHN0cnVjdF9zaXplKTsKKwltZW1tb3ZlKG5ldyArIHN0cnVjdF9vZmYsIG9sZCArIGZkdF9vZmZfZHRfc3RydWN0KG9sZCksIHN0cnVjdF9zaXplKTsKKwlmZHRfc2V0X29mZl9kdF9zdHJ1Y3QobmV3LCBzdHJ1Y3Rfb2ZmKTsKKwlmZHRfc2V0X3NpemVfZHRfc3RydWN0KG5ldywgc3RydWN0X3NpemUpOwogCi0JbWVtbW92ZShidWYgKyBzdHJpbmdzX29mZiwgZmR0ICsgZmR0X29mZl9kdF9zdHJpbmdzKGZkdCksCi0JCWZkdF9zaXplX2R0X3N0cmluZ3MoZmR0KSk7Ci0JZmR0X3NldF9vZmZfZHRfc3RyaW5ncyhidWYsIHN0cmluZ3Nfb2ZmKTsKLQlmZHRfc2V0X3NpemVfZHRfc3RyaW5ncyhidWYsIGZkdF9zaXplX2R0X3N0cmluZ3MoZmR0KSk7CisJbWVtbW92ZShuZXcgKyBzdHJpbmdzX29mZiwgb2xkICsgZmR0X29mZl9kdF9zdHJpbmdzKG9sZCksCisJCWZkdF9zaXplX2R0X3N0cmluZ3Mob2xkKSk7CisJZmR0X3NldF9vZmZfZHRfc3RyaW5ncyhuZXcsIHN0cmluZ3Nfb2ZmKTsKKwlmZHRfc2V0X3NpemVfZHRfc3RyaW5ncyhuZXcsIGZkdF9zaXplX2R0X3N0cmluZ3Mob2xkKSk7CiB9CiAKIGludCBmZHRfb3Blbl9pbnRvKGNvbnN0IHZvaWQgKmZkdCwgdm9pZCAqYnVmLCBpbnQgYnVmc2l6ZSkKQEAgLTM3MywxMSArMzkxLDExIEBACiAJaW50IGVycjsKIAlpbnQgbWVtX3Jzdl9zaXplLCBzdHJ1Y3Rfc2l6ZTsKIAlpbnQgbmV3c2l6ZTsKLQl2b2lkICp0bXA7CisJY29uc3QgY2hhciAqZmR0c3RhcnQgPSBmZHQ7CisJY29uc3QgY2hhciAqZmR0ZW5kID0gZmR0c3RhcnQgKyBmZHRfdG90YWxzaXplKGZkdCk7CisJY2hhciAqdG1wOwogCi0JZXJyID0gZmR0X2NoZWNrX2hlYWRlcihmZHQpOwotCWlmIChlcnIpCi0JCXJldHVybiBlcnI7CisJRkRUX0NIRUNLX0hFQURFUihmZHQpOwogCiAJbWVtX3Jzdl9zaXplID0gKGZkdF9udW1fbWVtX3JzdihmZHQpKzEpCiAJCSogc2l6ZW9mKHN0cnVjdCBmZHRfcmVzZXJ2ZV9lbnRyeSk7CkBAIC0zOTAsNyArNDA4LDcgQEAKIAkJCTsKIAl9CiAKLQlpZiAoIV9ibG9ja3NfbWlzb3JkZXJlZChmZHQsIG1lbV9yc3Zfc2l6ZSwgc3RydWN0X3NpemUpKSB7CisJaWYgKCFfZmR0X2Jsb2Nrc19taXNvcmRlcmVkKGZkdCwgbWVtX3Jzdl9zaXplLCBzdHJ1Y3Rfc2l6ZSkpIHsKIAkJLyogbm8gZnVydGhlciB3b3JrIG5lY2Vzc2FyeSAqLwogCQllcnIgPSBmZHRfbW92ZShmZHQsIGJ1ZiwgYnVmc2l6ZSk7CiAJCWlmIChlcnIpCkBAIC00MDIsMjIgKzQyMCwyMyBAQAogCX0KIAogCS8qIE5lZWQgdG8gcmVvcmRlciAqLwotCW5ld3NpemUgPSBBTElHTihzaXplb2Yoc3RydWN0IGZkdF9oZWFkZXIpLCA4KSArIG1lbV9yc3Zfc2l6ZQorCW5ld3NpemUgPSBGRFRfQUxJR04oc2l6ZW9mKHN0cnVjdCBmZHRfaGVhZGVyKSwgOCkgKyBtZW1fcnN2X3NpemUKIAkJKyBzdHJ1Y3Rfc2l6ZSArIGZkdF9zaXplX2R0X3N0cmluZ3MoZmR0KTsKIAogCWlmIChidWZzaXplIDwgbmV3c2l6ZSkKIAkJcmV0dXJuIC1GRFRfRVJSX05PU1BBQ0U7CiAKLQlpZiAoKChidWYgKyBuZXdzaXplKSA8PSBmZHQpCi0JICAgIHx8IChidWYgPj0gKGZkdCArIGZkdF90b3RhbHNpemUoZmR0KSkpKSB7Ci0JCXRtcCA9IGJ1ZjsKLQl9IGVsc2UgewotCQl0bXAgPSAodm9pZCAqKWZkdCArIGZkdF90b3RhbHNpemUoZmR0KTsKLQkJaWYgKCh0bXAgKyBuZXdzaXplKSA+IChidWYgKyBidWZzaXplKSkKKwkvKiBGaXJzdCBhdHRlbXB0IHRvIGJ1aWxkIGNvbnZlcnRlZCB0cmVlIGF0IGJlZ2lubmluZyBvZiBidWZmZXIgKi8KKwl0bXAgPSBidWY7CisJLyogQnV0IGlmIHRoYXQgb3ZlcmxhcHMgd2l0aCB0aGUgb2xkIHRyZWUuLi4gKi8KKwlpZiAoKCh0bXAgKyBuZXdzaXplKSA+IGZkdHN0YXJ0KSAmJiAodG1wIDwgZmR0ZW5kKSkgeworCQkvKiBUcnkgcmlnaHQgYWZ0ZXIgdGhlIG9sZCB0cmVlIGluc3RlYWQgKi8KKwkJdG1wID0gKGNoYXIgKikodWludHB0cl90KWZkdGVuZDsKKwkJaWYgKCh0bXAgKyBuZXdzaXplKSA+ICgoY2hhciAqKWJ1ZiArIGJ1ZnNpemUpKQogCQkJcmV0dXJuIC1GRFRfRVJSX05PU1BBQ0U7CiAJfQogCi0JX3BhY2tibG9ja3MoZmR0LCB0bXAsIG1lbV9yc3Zfc2l6ZSwgc3RydWN0X3NpemUpOworCV9mZHRfcGFja2Jsb2NrcyhmZHQsIHRtcCwgbWVtX3Jzdl9zaXplLCBzdHJ1Y3Rfc2l6ZSk7CiAJbWVtbW92ZShidWYsIHRtcCwgbmV3c2l6ZSk7CiAKIAlmZHRfc2V0X21hZ2ljKGJ1ZiwgRkRUX01BR0lDKTsKQEAgLTQzMiwxNiArNDUxLDEzIEBACiBpbnQgZmR0X3BhY2sodm9pZCAqZmR0KQogewogCWludCBtZW1fcnN2X3NpemU7Ci0JaW50IGVycjsKIAotCWVyciA9IHJ3X2NoZWNrX2hlYWRlcihmZHQpOwotCWlmIChlcnIpCi0JCXJldHVybiBlcnI7CisJRkRUX1JXX0NIRUNLX0hFQURFUihmZHQpOwogCiAJbWVtX3Jzdl9zaXplID0gKGZkdF9udW1fbWVtX3JzdihmZHQpKzEpCiAJCSogc2l6ZW9mKHN0cnVjdCBmZHRfcmVzZXJ2ZV9lbnRyeSk7Ci0JX3BhY2tibG9ja3MoZmR0LCBmZHQsIG1lbV9yc3Zfc2l6ZSwgZmR0X3NpemVfZHRfc3RydWN0KGZkdCkpOwotCWZkdF9zZXRfdG90YWxzaXplKGZkdCwgX2Jsb2JfZGF0YV9zaXplKGZkdCkpOworCV9mZHRfcGFja2Jsb2NrcyhmZHQsIGZkdCwgbWVtX3Jzdl9zaXplLCBmZHRfc2l6ZV9kdF9zdHJ1Y3QoZmR0KSk7CisJZmR0X3NldF90b3RhbHNpemUoZmR0LCBfZmR0X2RhdGFfc2l6ZShmZHQpKTsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvbGliZmR0L2ZkdF9zdHJlcnJvci5jIGIvYXJjaC9wb3dlcnBjL2Jvb3QvbGliZmR0L2ZkdF9zdHJlcnJvci5jCmluZGV4IGY5ZDMyZWYuLmU2YzNjZWUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2xpYmZkdC9mZHRfc3RyZXJyb3IuYworKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9saWJmZHQvZmR0X3N0cmVycm9yLmMKQEAgLTU1LDI5ICs1NSwyOSBAQAogCiAjaW5jbHVkZSAibGliZmR0X2ludGVybmFsLmgiCiAKLXN0cnVjdCBlcnJ0YWJlbnQgeworc3RydWN0IGZkdF9lcnJ0YWJlbnQgewogCWNvbnN0IGNoYXIgKnN0cjsKIH07CiAKLSNkZWZpbmUgRVJSVEFCRU5UKHZhbCkgXAorI2RlZmluZSBGRFRfRVJSVEFCRU5UKHZhbCkgXAogCVsodmFsKV0gPSB7IC5zdHIgPSAjdmFsLCB9CiAKLXN0YXRpYyBzdHJ1Y3QgZXJydGFiZW50IGVycnRhYmxlW10gPSB7Ci0JRVJSVEFCRU5UKEZEVF9FUlJfTk9URk9VTkQpLAotCUVSUlRBQkVOVChGRFRfRVJSX0VYSVNUUyksCi0JRVJSVEFCRU5UKEZEVF9FUlJfTk9TUEFDRSksCitzdGF0aWMgc3RydWN0IGZkdF9lcnJ0YWJlbnQgZmR0X2VycnRhYmxlW10gPSB7CisJRkRUX0VSUlRBQkVOVChGRFRfRVJSX05PVEZPVU5EKSwKKwlGRFRfRVJSVEFCRU5UKEZEVF9FUlJfRVhJU1RTKSwKKwlGRFRfRVJSVEFCRU5UKEZEVF9FUlJfTk9TUEFDRSksCiAKLQlFUlJUQUJFTlQoRkRUX0VSUl9CQURPRkZTRVQpLAotCUVSUlRBQkVOVChGRFRfRVJSX0JBRFBBVEgpLAotCUVSUlRBQkVOVChGRFRfRVJSX0JBRFNUQVRFKSwKKwlGRFRfRVJSVEFCRU5UKEZEVF9FUlJfQkFET0ZGU0VUKSwKKwlGRFRfRVJSVEFCRU5UKEZEVF9FUlJfQkFEUEFUSCksCisJRkRUX0VSUlRBQkVOVChGRFRfRVJSX0JBRFNUQVRFKSwKIAotCUVSUlRBQkVOVChGRFRfRVJSX1RSVU5DQVRFRCksCi0JRVJSVEFCRU5UKEZEVF9FUlJfQkFETUFHSUMpLAotCUVSUlRBQkVOVChGRFRfRVJSX0JBRFZFUlNJT04pLAotCUVSUlRBQkVOVChGRFRfRVJSX0JBRFNUUlVDVFVSRSksCi0JRVJSVEFCRU5UKEZEVF9FUlJfQkFETEFZT1VUKSwKKwlGRFRfRVJSVEFCRU5UKEZEVF9FUlJfVFJVTkNBVEVEKSwKKwlGRFRfRVJSVEFCRU5UKEZEVF9FUlJfQkFETUFHSUMpLAorCUZEVF9FUlJUQUJFTlQoRkRUX0VSUl9CQURWRVJTSU9OKSwKKwlGRFRfRVJSVEFCRU5UKEZEVF9FUlJfQkFEU1RSVUNUVVJFKSwKKwlGRFRfRVJSVEFCRU5UKEZEVF9FUlJfQkFETEFZT1VUKSwKIH07Ci0jZGVmaW5lIEVSUlRBQlNJWkUJKHNpemVvZihlcnJ0YWJsZSkgLyBzaXplb2YoZXJydGFibGVbMF0pKQorI2RlZmluZSBGRFRfRVJSVEFCU0laRQkoc2l6ZW9mKGZkdF9lcnJ0YWJsZSkgLyBzaXplb2YoZmR0X2VycnRhYmxlWzBdKSkKIAogY29uc3QgY2hhciAqZmR0X3N0cmVycm9yKGludCBlcnJ2YWwpCiB7CkBAIC04NSw4ICs4NSw4IEBACiAJCXJldHVybiAiPHZhbGlkIG9mZnNldC9sZW5ndGg+IjsKIAllbHNlIGlmIChlcnJ2YWwgPT0gMCkKIAkJcmV0dXJuICI8bm8gZXJyb3I+IjsKLQllbHNlIGlmIChlcnJ2YWwgPiAtRVJSVEFCU0laRSkgewotCQljb25zdCBjaGFyICpzID0gZXJydGFibGVbLWVycnZhbF0uc3RyOworCWVsc2UgaWYgKGVycnZhbCA+IC1GRFRfRVJSVEFCU0laRSkgeworCQljb25zdCBjaGFyICpzID0gZmR0X2VycnRhYmxlWy1lcnJ2YWxdLnN0cjsKIAogCQlpZiAocykKIAkJCXJldHVybiBzOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvbGliZmR0L2ZkdF9zdy5jIGIvYXJjaC9wb3dlcnBjL2Jvb3QvbGliZmR0L2ZkdF9zdy5jCmluZGV4IGRkYTJkZTMuLjY5ODMyOWUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2xpYmZkdC9mZHRfc3cuYworKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9saWJmZHQvZmR0X3N3LmMKQEAgLTU1LDE0ICs1NSwyMiBAQAogCiAjaW5jbHVkZSAibGliZmR0X2ludGVybmFsLmgiCiAKLXN0YXRpYyBpbnQgY2hlY2tfaGVhZGVyX3N3KHZvaWQgKmZkdCkKK3N0YXRpYyBpbnQgX2ZkdF9zd19jaGVja19oZWFkZXIodm9pZCAqZmR0KQogewotCWlmIChmZHRfbWFnaWMoZmR0KSAhPSBTV19NQUdJQykKKwlpZiAoZmR0X21hZ2ljKGZkdCkgIT0gRkRUX1NXX01BR0lDKQogCQlyZXR1cm4gLUZEVF9FUlJfQkFETUFHSUM7CisJLyogRklYTUU6IHNob3VsZCBjaGVjayBtb3JlIGRldGFpbHMgYWJvdXQgdGhlIGhlYWRlciBzdGF0ZSAqLwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCAqZ3JhYl9zcGFjZSh2b2lkICpmZHQsIGludCBsZW4pCisjZGVmaW5lIEZEVF9TV19DSEVDS19IRUFERVIoZmR0KSBcCisJeyBcCisJCWludCBlcnI7IFwKKwkJaWYgKChlcnIgPSBfZmR0X3N3X2NoZWNrX2hlYWRlcihmZHQpKSAhPSAwKSBcCisJCQlyZXR1cm4gZXJyOyBcCisJfQorCitzdGF0aWMgdm9pZCAqX2ZkdF9ncmFiX3NwYWNlKHZvaWQgKmZkdCwgaW50IGxlbikKIHsKIAlpbnQgb2Zmc2V0ID0gZmR0X3NpemVfZHRfc3RydWN0KGZkdCk7CiAJaW50IHNwYWNlbGVmdDsKQEAgLTg2LDEzICs5NCwxMyBAQAogCiAJbWVtc2V0KGJ1ZiwgMCwgYnVmc2l6ZSk7CiAKLQlmZHRfc2V0X21hZ2ljKGZkdCwgU1dfTUFHSUMpOworCWZkdF9zZXRfbWFnaWMoZmR0LCBGRFRfU1dfTUFHSUMpOwogCWZkdF9zZXRfdmVyc2lvbihmZHQsIEZEVF9MQVNUX1NVUFBPUlRFRF9WRVJTSU9OKTsKIAlmZHRfc2V0X2xhc3RfY29tcF92ZXJzaW9uKGZkdCwgRkRUX0ZJUlNUX1NVUFBPUlRFRF9WRVJTSU9OKTsKIAlmZHRfc2V0X3RvdGFsc2l6ZShmZHQsICBidWZzaXplKTsKIAotCWZkdF9zZXRfb2ZmX21lbV9yc3ZtYXAoZmR0LCBBTElHTihzaXplb2Yoc3RydWN0IGZkdF9oZWFkZXIpLAotCQkJCQkgIHNpemVvZihzdHJ1Y3QgZmR0X3Jlc2VydmVfZW50cnkpKSk7CisJZmR0X3NldF9vZmZfbWVtX3Jzdm1hcChmZHQsIEZEVF9BTElHTihzaXplb2Yoc3RydWN0IGZkdF9oZWFkZXIpLAorCQkJCQkgICAgICBzaXplb2Yoc3RydWN0IGZkdF9yZXNlcnZlX2VudHJ5KSkpOwogCWZkdF9zZXRfb2ZmX2R0X3N0cnVjdChmZHQsIGZkdF9vZmZfbWVtX3Jzdm1hcChmZHQpKTsKIAlmZHRfc2V0X29mZl9kdF9zdHJpbmdzKGZkdCwgYnVmc2l6ZSk7CiAKQEAgLTEwMiwxMSArMTEwLDEwIEBACiBpbnQgZmR0X2FkZF9yZXNlcnZlbWFwX2VudHJ5KHZvaWQgKmZkdCwgdWludDY0X3QgYWRkciwgdWludDY0X3Qgc2l6ZSkKIHsKIAlzdHJ1Y3QgZmR0X3Jlc2VydmVfZW50cnkgKnJlOwotCWludCBlcnIgPSBjaGVja19oZWFkZXJfc3coZmR0KTsKIAlpbnQgb2Zmc2V0OwogCi0JaWYgKGVycikKLQkJcmV0dXJuIGVycjsKKwlGRFRfU1dfQ0hFQ0tfSEVBREVSKGZkdCk7CisKIAlpZiAoZmR0X3NpemVfZHRfc3RydWN0KGZkdCkpCiAJCXJldHVybiAtRkRUX0VSUl9CQURTVEFURTsKIApAQCAtMTE0LDcgKzEyMSw3IEBACiAJaWYgKChvZmZzZXQgKyBzaXplb2YoKnJlKSkgPiBmZHRfdG90YWxzaXplKGZkdCkpCiAJCXJldHVybiAtRkRUX0VSUl9OT1NQQUNFOwogCi0JcmUgPSAoc3RydWN0IGZkdF9yZXNlcnZlX2VudHJ5ICopKGZkdCArIG9mZnNldCk7CisJcmUgPSAoc3RydWN0IGZkdF9yZXNlcnZlX2VudHJ5ICopKChjaGFyICopZmR0ICsgb2Zmc2V0KTsKIAlyZS0+YWRkcmVzcyA9IGNwdV90b19mZHQ2NChhZGRyKTsKIAlyZS0+c2l6ZSA9IGNwdV90b19mZHQ2NChzaXplKTsKIApAQCAtMTMxLDEzICsxMzgsMTEgQEAKIGludCBmZHRfYmVnaW5fbm9kZSh2b2lkICpmZHQsIGNvbnN0IGNoYXIgKm5hbWUpCiB7CiAJc3RydWN0IGZkdF9ub2RlX2hlYWRlciAqbmg7Ci0JaW50IGVyciA9IGNoZWNrX2hlYWRlcl9zdyhmZHQpOwogCWludCBuYW1lbGVuID0gc3RybGVuKG5hbWUpICsgMTsKIAotCWlmIChlcnIpCi0JCXJldHVybiBlcnI7CisJRkRUX1NXX0NIRUNLX0hFQURFUihmZHQpOwogCi0JbmggPSBncmFiX3NwYWNlKGZkdCwgc2l6ZW9mKCpuaCkgKyBBTElHTihuYW1lbGVuLCBGRFRfVEFHU0laRSkpOworCW5oID0gX2ZkdF9ncmFiX3NwYWNlKGZkdCwgc2l6ZW9mKCpuaCkgKyBGRFRfVEFHQUxJR04obmFtZWxlbikpOwogCWlmICghIG5oKQogCQlyZXR1cm4gLUZEVF9FUlJfTk9TUEFDRTsKIApAQCAtMTQ5LDEyICsxNTQsMTAgQEAKIGludCBmZHRfZW5kX25vZGUodm9pZCAqZmR0KQogewogCXVpbnQzMl90ICplbjsKLQlpbnQgZXJyID0gY2hlY2tfaGVhZGVyX3N3KGZkdCk7CiAKLQlpZiAoZXJyKQotCQlyZXR1cm4gZXJyOworCUZEVF9TV19DSEVDS19IRUFERVIoZmR0KTsKIAotCWVuID0gZ3JhYl9zcGFjZShmZHQsIEZEVF9UQUdTSVpFKTsKKwllbiA9IF9mZHRfZ3JhYl9zcGFjZShmZHQsIEZEVF9UQUdTSVpFKTsKIAlpZiAoISBlbikKIAkJcmV0dXJuIC1GRFRfRVJSX05PU1BBQ0U7CiAKQEAgLTE2Miw3ICsxNjUsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGZpbmRfYWRkX3N0cmluZyh2b2lkICpmZHQsIGNvbnN0IGNoYXIgKnMpCitzdGF0aWMgaW50IF9mZHRfZmluZF9hZGRfc3RyaW5nKHZvaWQgKmZkdCwgY29uc3QgY2hhciAqcykKIHsKIAljaGFyICpzdHJ0YWIgPSAoY2hhciAqKWZkdCArIGZkdF90b3RhbHNpemUoZmR0KTsKIAljb25zdCBjaGFyICpwOwpAQCAtMTg4LDE3ICsxOTEsMTUgQEAKIGludCBmZHRfcHJvcGVydHkodm9pZCAqZmR0LCBjb25zdCBjaGFyICpuYW1lLCBjb25zdCB2b2lkICp2YWwsIGludCBsZW4pCiB7CiAJc3RydWN0IGZkdF9wcm9wZXJ0eSAqcHJvcDsKLQlpbnQgZXJyID0gY2hlY2tfaGVhZGVyX3N3KGZkdCk7CiAJaW50IG5hbWVvZmY7CiAKLQlpZiAoZXJyKQotCQlyZXR1cm4gZXJyOworCUZEVF9TV19DSEVDS19IRUFERVIoZmR0KTsKIAotCW5hbWVvZmYgPSBmaW5kX2FkZF9zdHJpbmcoZmR0LCBuYW1lKTsKKwluYW1lb2ZmID0gX2ZkdF9maW5kX2FkZF9zdHJpbmcoZmR0LCBuYW1lKTsKIAlpZiAobmFtZW9mZiA9PSAwKQogCQlyZXR1cm4gLUZEVF9FUlJfTk9TUEFDRTsKIAotCXByb3AgPSBncmFiX3NwYWNlKGZkdCwgc2l6ZW9mKCpwcm9wKSArIEFMSUdOKGxlbiwgRkRUX1RBR1NJWkUpKTsKKwlwcm9wID0gX2ZkdF9ncmFiX3NwYWNlKGZkdCwgc2l6ZW9mKCpwcm9wKSArIEZEVF9UQUdBTElHTihsZW4pKTsKIAlpZiAoISBwcm9wKQogCQlyZXR1cm4gLUZEVF9FUlJfTk9TUEFDRTsKIApAQCAtMjExLDE4ICsyMTIsMTYgQEAKIAogaW50IGZkdF9maW5pc2godm9pZCAqZmR0KQogewotCWludCBlcnIgPSBjaGVja19oZWFkZXJfc3coZmR0KTsKIAljaGFyICpwID0gKGNoYXIgKilmZHQ7CiAJdWludDMyX3QgKmVuZDsKIAlpbnQgb2xkc3Ryb2Zmc2V0LCBuZXdzdHJvZmZzZXQ7CiAJdWludDMyX3QgdGFnOwogCWludCBvZmZzZXQsIG5leHRvZmZzZXQ7CiAKLQlpZiAoZXJyKQotCQlyZXR1cm4gZXJyOworCUZEVF9TV19DSEVDS19IRUFERVIoZmR0KTsKIAogCS8qIEFkZCB0ZXJtaW5hdG9yICovCi0JZW5kID0gZ3JhYl9zcGFjZShmZHQsIHNpemVvZigqZW5kKSk7CisJZW5kID0gX2ZkdF9ncmFiX3NwYWNlKGZkdCwgc2l6ZW9mKCplbmQpKTsKIAlpZiAoISBlbmQpCiAJCXJldHVybiAtRkRUX0VSUl9OT1NQQUNFOwogCSplbmQgPSBjcHVfdG9fZmR0MzIoRkRUX0VORCk7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9saWJmZHQvZmR0X3dpcC5jIGIvYXJjaC9wb3dlcnBjL2Jvb3QvbGliZmR0L2ZkdF93aXAuYwppbmRleCA4OGUyNGI4Li5hNDY1MmM2IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC9saWJmZHQvZmR0X3dpcC5jCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2xpYmZkdC9mZHRfd2lwLmMKQEAgLTcyLDExICs3MiwxMSBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBub3BfcmVnaW9uKHZvaWQgKnN0YXJ0LCBpbnQgbGVuKQorc3RhdGljIHZvaWQgX2ZkdF9ub3BfcmVnaW9uKHZvaWQgKnN0YXJ0LCBpbnQgbGVuKQogewogCXVpbnQzMl90ICpwOwogCi0JZm9yIChwID0gc3RhcnQ7ICh2b2lkICopcCA8IChzdGFydCArIGxlbik7IHArKykKKwlmb3IgKHAgPSBzdGFydDsgKGNoYXIgKilwIDwgKChjaGFyICopc3RhcnQgKyBsZW4pOyBwKyspCiAJCSpwID0gY3B1X3RvX2ZkdDMyKEZEVF9OT1ApOwogfQogCkBAIC04OSw3ICs4OSw3IEBACiAJaWYgKCEgcHJvcCkKIAkJcmV0dXJuIGxlbjsKIAotCW5vcF9yZWdpb24ocHJvcCwgbGVuICsgc2l6ZW9mKCpwcm9wKSk7CisJX2ZkdF9ub3BfcmVnaW9uKHByb3AsIGxlbiArIHNpemVvZigqcHJvcCkpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xMzksNiArMTM5LDcgQEAKIAlpZiAoZW5kb2Zmc2V0IDwgMCkKIAkJcmV0dXJuIGVuZG9mZnNldDsKIAotCW5vcF9yZWdpb24oZmR0X29mZnNldF9wdHJfdyhmZHQsIG5vZGVvZmZzZXQsIDApLCBlbmRvZmZzZXQgLSBub2Rlb2Zmc2V0KTsKKwlfZmR0X25vcF9yZWdpb24oZmR0X29mZnNldF9wdHJfdyhmZHQsIG5vZGVvZmZzZXQsIDApLAorCQkJZW5kb2Zmc2V0IC0gbm9kZW9mZnNldCk7CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9saWJmZHQvbGliZmR0LmggYi9hcmNoL3Bvd2VycGMvYm9vdC9saWJmZHQvbGliZmR0LmgKaW5kZXggNmIyZmI5Mi4uY2U4MGU0ZiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvbGliZmR0L2xpYmZkdC5oCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2xpYmZkdC9saWJmZHQuaApAQCAtMTI1LDEyICsxMjUsMTggQEAKIGNvbnN0IHZvaWQgKmZkdF9vZmZzZXRfcHRyKGNvbnN0IHZvaWQgKmZkdCwgaW50IG9mZnNldCwgaW50IGNoZWNrbGVuKTsKIHN0YXRpYyBpbmxpbmUgdm9pZCAqZmR0X29mZnNldF9wdHJfdyh2b2lkICpmZHQsIGludCBvZmZzZXQsIGludCBjaGVja2xlbikKIHsKLQlyZXR1cm4gKHZvaWQgKilmZHRfb2Zmc2V0X3B0cihmZHQsIG9mZnNldCwgY2hlY2tsZW4pOworCXJldHVybiAodm9pZCAqKSh1aW50cHRyX3QpZmR0X29mZnNldF9wdHIoZmR0LCBvZmZzZXQsIGNoZWNrbGVuKTsKIH0KIAogdWludDMyX3QgZmR0X25leHRfdGFnKGNvbnN0IHZvaWQgKmZkdCwgaW50IG9mZnNldCwgaW50ICpuZXh0b2Zmc2V0KTsKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBUcmF2ZXJzYWwgZnVuY3Rpb25zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbnQgZmR0X25leHRfbm9kZShjb25zdCB2b2lkICpmZHQsIGludCBvZmZzZXQsIGludCAqZGVwdGgpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIC8qIEdlbmVyYWwgZnVuY3Rpb25zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKQEAgLTIwNyw3ICsyMTMsNyBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qKgotICogZmR0X3N0cmluZyAtIHJldHJlaXZlIGEgc3RyaW5nIGZyb20gdGhlIHN0cmluZ3MgYmxvY2sgb2YgYSBkZXZpY2UgdHJlZQorICogZmR0X3N0cmluZyAtIHJldHJpZXZlIGEgc3RyaW5nIGZyb20gdGhlIHN0cmluZ3MgYmxvY2sgb2YgYSBkZXZpY2UgdHJlZQogICogQGZkdDogcG9pbnRlciB0byB0aGUgZGV2aWNlIHRyZWUgYmxvYgogICogQHN0cm9mZnNldDogb2Zmc2V0IG9mIHRoZSBzdHJpbmcgd2l0aGluIHRoZSBzdHJpbmdzIGJsb2NrIChuYXRpdmUgZW5kaWFuKQogICoKQEAgLTIyMSw3ICsyMjcsNyBAQAogY29uc3QgY2hhciAqZmR0X3N0cmluZyhjb25zdCB2b2lkICpmZHQsIGludCBzdHJvZmZzZXQpOwogCiAvKioKLSAqIGZkdF9udW1fbWVtX3JzdiAtIHJldHJlaXZlIHRoZSBudW1iZXIgb2YgbWVtb3J5IHJlc2VydmUgbWFwIGVudHJpZXMKKyAqIGZkdF9udW1fbWVtX3JzdiAtIHJldHJpZXZlIHRoZSBudW1iZXIgb2YgbWVtb3J5IHJlc2VydmUgbWFwIGVudHJpZXMKICAqIEBmZHQ6IHBvaW50ZXIgdG8gdGhlIGRldmljZSB0cmVlIGJsb2IKICAqCiAgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgZW50cmllcyBpbiB0aGUgZGV2aWNlIHRyZWUgYmxvYidzIG1lbW9yeQpAQCAtMjM0LDcgKzI0MCw3IEBACiBpbnQgZmR0X251bV9tZW1fcnN2KGNvbnN0IHZvaWQgKmZkdCk7CiAKIC8qKgotICogZmR0X2dldF9tZW1fcnN2IC0gcmV0cmVpdmUgb25lIG1lbW9yeSByZXNlcnZlIG1hcCBlbnRyeQorICogZmR0X2dldF9tZW1fcnN2IC0gcmV0cmlldmUgb25lIG1lbW9yeSByZXNlcnZlIG1hcCBlbnRyeQogICogQGZkdDogcG9pbnRlciB0byB0aGUgZGV2aWNlIHRyZWUgYmxvYgogICogQGFkZHJlc3MsIEBzaXplOiBwb2ludGVycyB0byA2NC1iaXQgdmFyaWFibGVzCiAgKgpAQCAtMzE0LDcgKzMyMCw3IEBACiBpbnQgZmR0X3BhdGhfb2Zmc2V0KGNvbnN0IHZvaWQgKmZkdCwgY29uc3QgY2hhciAqcGF0aCk7CiAKIC8qKgotICogZmR0X2dldF9uYW1lIC0gcmV0cmVpdmUgdGhlIG5hbWUgb2YgYSBnaXZlbiBub2RlCisgKiBmZHRfZ2V0X25hbWUgLSByZXRyaWV2ZSB0aGUgbmFtZSBvZiBhIGdpdmVuIG5vZGUKICAqIEBmZHQ6IHBvaW50ZXIgdG8gdGhlIGRldmljZSB0cmVlIGJsb2IKICAqIEBub2Rlb2Zmc2V0OiBzdHJ1Y3R1cmUgYmxvY2sgb2Zmc2V0IG9mIHRoZSBzdGFydGluZyBub2RlCiAgKiBAbGVucDogcG9pbnRlciB0byBhbiBpbnRlZ2VyIHZhcmlhYmxlICh3aWxsIGJlIG92ZXJ3cml0dGVuKSBvciBOVUxMCkBAIC0zNDYsNyArMzUyLDcgQEAKICAqIGZkdF9nZXRfcHJvcGVydHkoKSByZXRyaWV2ZXMgYSBwb2ludGVyIHRvIHRoZSBmZHRfcHJvcGVydHkKICAqIHN0cnVjdHVyZSB3aXRoaW4gdGhlIGRldmljZSB0cmVlIGJsb2IgY29ycmVzcG9uZGluZyB0byB0aGUgcHJvcGVydHkKICAqIG5hbWVkICduYW1lJyBvZiB0aGUgbm9kZSBhdCBvZmZzZXQgbm9kZW9mZnNldC4gIElmIGxlbnAgaXMKLSAqIG5vbi1OVUxMLCB0aGUgbGVuZ3RoIG9mIHRoZSBwcm9wZXJ0eSB2YWx1ZSBhbHNvIHJldHVybmVkLCBpbiB0aGUKKyAqIG5vbi1OVUxMLCB0aGUgbGVuZ3RoIG9mIHRoZSBwcm9wZXJ0eSB2YWx1ZSBpcyBhbHNvIHJldHVybmVkLCBpbiB0aGUKICAqIGludGVnZXIgcG9pbnRlZCB0byBieSBsZW5wLgogICoKICAqIHJldHVybnM6CkBAIC0zNjksOCArMzc1LDggQEAKIAkJCQkJCSAgICAgIGNvbnN0IGNoYXIgKm5hbWUsCiAJCQkJCQkgICAgICBpbnQgKmxlbnApCiB7Ci0JcmV0dXJuIChzdHJ1Y3QgZmR0X3Byb3BlcnR5ICopZmR0X2dldF9wcm9wZXJ0eShmZHQsIG5vZGVvZmZzZXQsCi0JCQkJCQkgICAgICAgbmFtZSwgbGVucCk7CisJcmV0dXJuIChzdHJ1Y3QgZmR0X3Byb3BlcnR5ICopKHVpbnRwdHJfdCkKKwkJZmR0X2dldF9wcm9wZXJ0eShmZHQsIG5vZGVvZmZzZXQsIG5hbWUsIGxlbnApOwogfQogCiAvKioKQEAgLTM4Myw3ICszODksNyBAQAogICogZmR0X2dldHByb3AoKSByZXRyaWV2ZXMgYSBwb2ludGVyIHRvIHRoZSB2YWx1ZSBvZiB0aGUgcHJvcGVydHkKICAqIG5hbWVkICduYW1lJyBvZiB0aGUgbm9kZSBhdCBvZmZzZXQgbm9kZW9mZnNldCAodGhpcyB3aWxsIGJlIGEKICAqIHBvaW50ZXIgdG8gd2l0aGluIHRoZSBkZXZpY2UgYmxvYiBpdHNlbGYsIG5vdCBhIGNvcHkgb2YgdGhlIHZhbHVlKS4KLSAqIElmIGxlbnAgaXMgbm9uLU5VTEwsIHRoZSBsZW5ndGggb2YgdGhlIHByb3BlcnR5IHZhbHVlIGFsc28KKyAqIElmIGxlbnAgaXMgbm9uLU5VTEwsIHRoZSBsZW5ndGggb2YgdGhlIHByb3BlcnR5IHZhbHVlIGlzIGFsc28KICAqIHJldHVybmVkLCBpbiB0aGUgaW50ZWdlciBwb2ludGVkIHRvIGJ5IGxlbnAuCiAgKgogICogcmV0dXJuczoKQEAgLTQwNSwxMSArNDExLDExIEBACiBzdGF0aWMgaW5saW5lIHZvaWQgKmZkdF9nZXRwcm9wX3codm9pZCAqZmR0LCBpbnQgbm9kZW9mZnNldCwKIAkJCQkgIGNvbnN0IGNoYXIgKm5hbWUsIGludCAqbGVucCkKIHsKLQlyZXR1cm4gKHZvaWQgKilmZHRfZ2V0cHJvcChmZHQsIG5vZGVvZmZzZXQsIG5hbWUsIGxlbnApOworCXJldHVybiAodm9pZCAqKSh1aW50cHRyX3QpZmR0X2dldHByb3AoZmR0LCBub2Rlb2Zmc2V0LCBuYW1lLCBsZW5wKTsKIH0KIAogLyoqCi0gKiBmZHRfZ2V0X3BoYW5kbGUgLSByZXRyZWl2ZSB0aGUgcGhhbmRsZSBvZiBhIGdpdmVuIG5vZGUKKyAqIGZkdF9nZXRfcGhhbmRsZSAtIHJldHJpZXZlIHRoZSBwaGFuZGxlIG9mIGEgZ2l2ZW4gbm9kZQogICogQGZkdDogcG9pbnRlciB0byB0aGUgZGV2aWNlIHRyZWUgYmxvYgogICogQG5vZGVvZmZzZXQ6IHN0cnVjdHVyZSBibG9jayBvZmZzZXQgb2YgdGhlIG5vZGUKICAqCkBAIC00MTcsNyArNDIzLDcgQEAKICAqIHN0cnVjdHVyZSBibG9jayBvZmZzZXQgbm9kZW9mZnNldC4KICAqCiAgKiByZXR1cm5zOgotICoJdGhlIHBoYW5kbGUgb2YgdGhlIG5vZGUgYXQgbm9kZW9mZnNldCwgb24gc3VjY2VzICghPSAwLCAhPSAtMSkKKyAqCXRoZSBwaGFuZGxlIG9mIHRoZSBub2RlIGF0IG5vZGVvZmZzZXQsIG9uIHN1Y2Nlc3MgKCE9IDAsICE9IC0xKQogICoJMCwgaWYgdGhlIG5vZGUgaGFzIG5vIHBoYW5kbGUsIG9yIGFub3RoZXIgZXJyb3Igb2NjdXJzCiAgKi8KIHVpbnQzMl90IGZkdF9nZXRfcGhhbmRsZShjb25zdCB2b2lkICpmZHQsIGludCBub2Rlb2Zmc2V0KTsKQEAgLTUxNiw3ICs1MjIsNyBAQAogICogc3RydWN0dXJlIGZyb20gdGhlIHN0YXJ0IHRvIG5vZGVvZmZzZXQsICp0d2ljZSouCiAgKgogICogcmV0dXJuczoKLSAqCXN0dWN0dXJlIGJsb2NrIG9mZnNldCBvZiB0aGUgcGFyZW50IG9mIHRoZSBub2RlIGF0IG5vZGVvZmZzZXQKKyAqCXN0cnVjdHVyZSBibG9jayBvZmZzZXQgb2YgdGhlIHBhcmVudCBvZiB0aGUgbm9kZSBhdCBub2Rlb2Zmc2V0CiAgKgkJKD49MCksIG9uIHN1Y2Nlc3MKICAqIAktRkRUX0VSUl9CQURPRkZTRVQsIG5vZGVvZmZzZXQgZG9lcyBub3QgcmVmZXIgdG8gYSBCRUdJTl9OT0RFIHRhZwogICoJLUZEVF9FUlJfQkFETUFHSUMsCkBAIC01NzMsNyArNTc5LDcgQEAKICAqIEBmZHQ6IHBvaW50ZXIgdG8gdGhlIGRldmljZSB0cmVlIGJsb2IKICAqIEBwaGFuZGxlOiBwaGFuZGxlIHZhbHVlCiAgKgotICogZmR0X25vZGVfb2Zmc2V0X2J5X3Byb3BfdmFsdWUoKSByZXR1cm5zIHRoZSBvZmZzZXQgb2YgdGhlIG5vZGUKKyAqIGZkdF9ub2RlX29mZnNldF9ieV9waGFuZGxlKCkgcmV0dXJucyB0aGUgb2Zmc2V0IG9mIHRoZSBub2RlCiAgKiB3aGljaCBoYXMgdGhlIGdpdmVuIHBoYW5kbGUgdmFsdWUuICBJZiB0aGVyZSBpcyBtb3JlIHRoYW4gb25lIG5vZGUKICAqIGluIHRoZSB0cmVlIHdpdGggdGhlIGdpdmVuIHBoYW5kbGUgKGFuIGludmFsaWQgdHJlZSksIHJlc3VsdHMgYXJlCiAgKiB1bmRlZmluZWQuCkBAIC02NTUsOCArNjYxLDY1IEBACiAvKiBXcml0ZS1pbi1wbGFjZSBmdW5jdGlvbnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCisvKioKKyAqIGZkdF9zZXRwcm9wX2lucGxhY2UgLSBjaGFuZ2UgYSBwcm9wZXJ0eSdzIHZhbHVlLCBidXQgbm90IGl0cyBzaXplCisgKiBAZmR0OiBwb2ludGVyIHRvIHRoZSBkZXZpY2UgdHJlZSBibG9iCisgKiBAbm9kZW9mZnNldDogb2Zmc2V0IG9mIHRoZSBub2RlIHdob3NlIHByb3BlcnR5IHRvIGNoYW5nZQorICogQG5hbWU6IG5hbWUgb2YgdGhlIHByb3BlcnR5IHRvIGNoYW5nZQorICogQHZhbDogcG9pbnRlciB0byBkYXRhIHRvIHJlcGxhY2UgdGhlIHByb3BlcnR5IHZhbHVlIHdpdGgKKyAqIEBsZW46IGxlbmd0aCBvZiB0aGUgcHJvcGVydHkgdmFsdWUKKyAqCisgKiBmZHRfc2V0cHJvcF9pbnBsYWNlKCkgcmVwbGFjZXMgdGhlIHZhbHVlIG9mIGEgZ2l2ZW4gcHJvcGVydHkgd2l0aAorICogdGhlIGRhdGEgaW4gdmFsLCBvZiBsZW5ndGggbGVuLiAgVGhpcyBmdW5jdGlvbiBjYW5ub3QgY2hhbmdlIHRoZQorICogc2l6ZSBvZiBhIHByb3BlcnR5LCBhbmQgc28gd2lsbCBvbmx5IHdvcmsgaWYgbGVuIGlzIGVxdWFsIHRvIHRoZQorICogY3VycmVudCBsZW5ndGggb2YgdGhlIHByb3BlcnR5LgorICoKKyAqIFRoaXMgZnVuY3Rpb24gd2lsbCBhbHRlciBvbmx5IHRoZSBieXRlcyBpbiB0aGUgYmxvYiB3aGljaCBjb250YWluCisgKiB0aGUgZ2l2ZW4gcHJvcGVydHkgdmFsdWUsIGFuZCB3aWxsIG5vdCBhbHRlciBvciBtb3ZlIGFueSBvdGhlciBwYXJ0CisgKiBvZiB0aGUgdHJlZS4KKyAqCisgKiByZXR1cm5zOgorICoJMCwgb24gc3VjY2VzcworICoJLUZEVF9FUlJfTk9TUEFDRSwgaWYgbGVuIGlzIG5vdCBlcXVhbCB0byB0aGUgcHJvcGVydHkncyBjdXJyZW50IGxlbmd0aAorICoJLUZEVF9FUlJfTk9URk9VTkQsIG5vZGUgZG9lcyBub3QgaGF2ZSB0aGUgbmFtZWQgcHJvcGVydHkKKyAqCS1GRFRfRVJSX0JBRE9GRlNFVCwgbm9kZW9mZnNldCBkaWQgbm90IHBvaW50IHRvIEZEVF9CRUdJTl9OT0RFIHRhZworICoJLUZEVF9FUlJfQkFETUFHSUMsCisgKgktRkRUX0VSUl9CQURWRVJTSU9OLAorICoJLUZEVF9FUlJfQkFEU1RBVEUsCisgKgktRkRUX0VSUl9CQURTVFJVQ1RVUkUsCisgKgktRkRUX0VSUl9UUlVOQ0FURUQsIHN0YW5kYXJkIG1lYW5pbmdzCisgKi8KIGludCBmZHRfc2V0cHJvcF9pbnBsYWNlKHZvaWQgKmZkdCwgaW50IG5vZGVvZmZzZXQsIGNvbnN0IGNoYXIgKm5hbWUsCiAJCQljb25zdCB2b2lkICp2YWwsIGludCBsZW4pOworCisvKioKKyAqIGZkdF9zZXRwcm9wX2lucGxhY2VfY2VsbCAtIGNoYW5nZSB0aGUgdmFsdWUgb2YgYSBzaW5nbGUtY2VsbCBwcm9wZXJ0eQorICogQGZkdDogcG9pbnRlciB0byB0aGUgZGV2aWNlIHRyZWUgYmxvYgorICogQG5vZGVvZmZzZXQ6IG9mZnNldCBvZiB0aGUgbm9kZSB3aG9zZSBwcm9wZXJ0eSB0byBjaGFuZ2UKKyAqIEBuYW1lOiBuYW1lIG9mIHRoZSBwcm9wZXJ0eSB0byBjaGFuZ2UKKyAqIEB2YWw6IGNlbGwgKDMyLWJpdCBpbnRlZ2VyKSB2YWx1ZSB0byByZXBsYWNlIHRoZSBwcm9wZXJ0eSB3aXRoCisgKgorICogZmR0X3NldHByb3BfaW5wbGFjZV9jZWxsKCkgcmVwbGFjZXMgdGhlIHZhbHVlIG9mIGEgZ2l2ZW4gcHJvcGVydHkKKyAqIHdpdGggdGhlIDMyLWJpdCBpbnRlZ2VyIGNlbGwgdmFsdWUgaW4gdmFsLCBjb252ZXJ0aW5nIHZhbCB0bworICogYmlnLWVuZGlhbiBpZiBuZWNlc3NhcnkuICBUaGlzIGZ1bmN0aW9uIGNhbm5vdCBjaGFuZ2UgdGhlIHNpemUgb2YgYQorICogcHJvcGVydHksIGFuZCBzbyB3aWxsIG9ubHkgd29yayBpZiB0aGUgcHJvcGVydHkgYWxyZWFkeSBleGlzdHMgYW5kCisgKiBoYXMgbGVuZ3RoIDQuCisgKgorICogVGhpcyBmdW5jdGlvbiB3aWxsIGFsdGVyIG9ubHkgdGhlIGJ5dGVzIGluIHRoZSBibG9iIHdoaWNoIGNvbnRhaW4KKyAqIHRoZSBnaXZlbiBwcm9wZXJ0eSB2YWx1ZSwgYW5kIHdpbGwgbm90IGFsdGVyIG9yIG1vdmUgYW55IG90aGVyIHBhcnQKKyAqIG9mIHRoZSB0cmVlLgorICoKKyAqIHJldHVybnM6CisgKgkwLCBvbiBzdWNjZXNzCisgKgktRkRUX0VSUl9OT1NQQUNFLCBpZiB0aGUgcHJvcGVydHkncyBsZW5ndGggaXMgbm90IGVxdWFsIHRvIDQKKyAgKgktRkRUX0VSUl9OT1RGT1VORCwgbm9kZSBkb2VzIG5vdCBoYXZlIHRoZSBuYW1lZCBwcm9wZXJ0eQorICoJLUZEVF9FUlJfQkFET0ZGU0VULCBub2Rlb2Zmc2V0IGRpZCBub3QgcG9pbnQgdG8gRkRUX0JFR0lOX05PREUgdGFnCisgKgktRkRUX0VSUl9CQURNQUdJQywKKyAqCS1GRFRfRVJSX0JBRFZFUlNJT04sCisgKgktRkRUX0VSUl9CQURTVEFURSwKKyAqCS1GRFRfRVJSX0JBRFNUUlVDVFVSRSwKKyAqCS1GRFRfRVJSX1RSVU5DQVRFRCwgc3RhbmRhcmQgbWVhbmluZ3MKKyAqLwogc3RhdGljIGlubGluZSBpbnQgZmR0X3NldHByb3BfaW5wbGFjZV9jZWxsKHZvaWQgKmZkdCwgaW50IG5vZGVvZmZzZXQsCiAJCQkJCSAgIGNvbnN0IGNoYXIgKm5hbWUsIHVpbnQzMl90IHZhbCkKIHsKQEAgLTY2NCw3ICs3MjcsNTQgQEAKIAlyZXR1cm4gZmR0X3NldHByb3BfaW5wbGFjZShmZHQsIG5vZGVvZmZzZXQsIG5hbWUsICZ2YWwsIHNpemVvZih2YWwpKTsKIH0KIAorLyoqCisgKiBmZHRfbm9wX3Byb3BlcnR5IC0gcmVwbGFjZSBhIHByb3BlcnR5IHdpdGggbm9wIHRhZ3MKKyAqIEBmZHQ6IHBvaW50ZXIgdG8gdGhlIGRldmljZSB0cmVlIGJsb2IKKyAqIEBub2Rlb2Zmc2V0OiBvZmZzZXQgb2YgdGhlIG5vZGUgd2hvc2UgcHJvcGVydHkgdG8gbm9wCisgKiBAbmFtZTogbmFtZSBvZiB0aGUgcHJvcGVydHkgdG8gbm9wCisgKgorICogZmR0X25vcF9wcm9wZXJ0eSgpIHdpbGwgcmVwbGFjZSBhIGdpdmVuIHByb3BlcnR5J3MgcmVwcmVzZW50YXRpb24KKyAqIGluIHRoZSBibG9iIHdpdGggRkRUX05PUCB0YWdzLCBlZmZlY3RpdmVseSByZW1vdmluZyBpdCBmcm9tIHRoZQorICogdHJlZS4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHdpbGwgYWx0ZXIgb25seSB0aGUgYnl0ZXMgaW4gdGhlIGJsb2Igd2hpY2ggY29udGFpbgorICogdGhlIHByb3BlcnR5LCBhbmQgd2lsbCBub3QgYWx0ZXIgb3IgbW92ZSBhbnkgb3RoZXIgcGFydCBvZiB0aGUKKyAqIHRyZWUuCisgKgorICogcmV0dXJuczoKKyAqCTAsIG9uIHN1Y2Nlc3MKKyAqCS1GRFRfRVJSX05PVEZPVU5ELCBub2RlIGRvZXMgbm90IGhhdmUgdGhlIG5hbWVkIHByb3BlcnR5CisgKgktRkRUX0VSUl9CQURPRkZTRVQsIG5vZGVvZmZzZXQgZGlkIG5vdCBwb2ludCB0byBGRFRfQkVHSU5fTk9ERSB0YWcKKyAqCS1GRFRfRVJSX0JBRE1BR0lDLAorICoJLUZEVF9FUlJfQkFEVkVSU0lPTiwKKyAqCS1GRFRfRVJSX0JBRFNUQVRFLAorICoJLUZEVF9FUlJfQkFEU1RSVUNUVVJFLAorICoJLUZEVF9FUlJfVFJVTkNBVEVELCBzdGFuZGFyZCBtZWFuaW5ncworICovCiBpbnQgZmR0X25vcF9wcm9wZXJ0eSh2b2lkICpmZHQsIGludCBub2Rlb2Zmc2V0LCBjb25zdCBjaGFyICpuYW1lKTsKKworLyoqCisgKiBmZHRfbm9wX25vZGUgLSByZXBsYWNlIGEgbm9kZSAoc3VidHJlZSkgd2l0aCBub3AgdGFncworICogQGZkdDogcG9pbnRlciB0byB0aGUgZGV2aWNlIHRyZWUgYmxvYgorICogQG5vZGVvZmZzZXQ6IG9mZnNldCBvZiB0aGUgbm9kZSB0byBub3AKKyAqCisgKiBmZHRfbm9wX25vZGUoKSB3aWxsIHJlcGxhY2UgYSBnaXZlbiBub2RlJ3MgcmVwcmVzZW50YXRpb24gaW4gdGhlCisgKiBibG9iLCBpbmNsdWRpbmcgYWxsIGl0cyBzdWJub2RlcywgaWYgYW55LCB3aXRoIEZEVF9OT1AgdGFncywKKyAqIGVmZmVjdGl2ZWx5IHJlbW92aW5nIGl0IGZyb20gdGhlIHRyZWUuCisgKgorICogVGhpcyBmdW5jdGlvbiB3aWxsIGFsdGVyIG9ubHkgdGhlIGJ5dGVzIGluIHRoZSBibG9iIHdoaWNoIGNvbnRhaW4KKyAqIHRoZSBub2RlIGFuZCBpdHMgcHJvcGVydGllcyBhbmQgc3Vibm9kZXMsIGFuZCB3aWxsIG5vdCBhbHRlciBvcgorICogbW92ZSBhbnkgb3RoZXIgcGFydCBvZiB0aGUgdHJlZS4KKyAqCisgKiByZXR1cm5zOgorICoJMCwgb24gc3VjY2VzcworICoJLUZEVF9FUlJfQkFET0ZGU0VULCBub2Rlb2Zmc2V0IGRpZCBub3QgcG9pbnQgdG8gRkRUX0JFR0lOX05PREUgdGFnCisgKgktRkRUX0VSUl9CQURNQUdJQywKKyAqCS1GRFRfRVJSX0JBRFZFUlNJT04sCisgKgktRkRUX0VSUl9CQURTVEFURSwKKyAqCS1GRFRfRVJSX0JBRFNUUlVDVFVSRSwKKyAqCS1GRFRfRVJSX1RSVU5DQVRFRCwgc3RhbmRhcmQgbWVhbmluZ3MKKyAqLwogaW50IGZkdF9ub3Bfbm9kZSh2b2lkICpmZHQsIGludCBub2Rlb2Zmc2V0KTsKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC02OTMsMjMgKzgwMywyNjggQEAKIGludCBmZHRfb3Blbl9pbnRvKGNvbnN0IHZvaWQgKmZkdCwgdm9pZCAqYnVmLCBpbnQgYnVmc2l6ZSk7CiBpbnQgZmR0X3BhY2sodm9pZCAqZmR0KTsKIAorLyoqCisgKiBmZHRfYWRkX21lbV9yc3YgLSBhZGQgb25lIG1lbW9yeSByZXNlcnZlIG1hcCBlbnRyeQorICogQGZkdDogcG9pbnRlciB0byB0aGUgZGV2aWNlIHRyZWUgYmxvYgorICogQGFkZHJlc3MsIEBzaXplOiA2NC1iaXQgdmFsdWVzIChuYXRpdmUgZW5kaWFuKQorICoKKyAqIEFkZHMgYSByZXNlcnZlIG1hcCBlbnRyeSB0byB0aGUgZ2l2ZW4gYmxvYiByZXNlcnZpbmcgYSByZWdpb24gYXQKKyAqIGFkZHJlc3MgYWRkcmVzcyBvZiBsZW5ndGggc2l6ZS4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHdpbGwgaW5zZXJ0IGRhdGEgaW50byB0aGUgcmVzZXJ2ZSBtYXAgYW5kIHdpbGwKKyAqIHRoZXJlZm9yZSBjaGFuZ2UgdGhlIGluZGV4ZXMgb2Ygc29tZSBlbnRyaWVzIGluIHRoZSB0YWJsZS4KKyAqCisgKiByZXR1cm5zOgorICoJMCwgb24gc3VjY2VzcworICoJLUZEVF9FUlJfTk9TUEFDRSwgdGhlcmUgaXMgaW5zdWZmaWNpZW50IGZyZWUgc3BhY2UgaW4gdGhlIGJsb2IgdG8KKyAqCQljb250YWluIHRoZSBuZXcgcmVzZXJ2YXRpb24gZW50cnkKKyAqCS1GRFRfRVJSX0JBRE1BR0lDLAorICoJLUZEVF9FUlJfQkFEVkVSU0lPTiwKKyAqCS1GRFRfRVJSX0JBRFNUQVRFLAorICoJLUZEVF9FUlJfQkFEU1RSVUNUVVJFLAorICoJLUZEVF9FUlJfQkFETEFZT1VULAorICoJLUZEVF9FUlJfVFJVTkNBVEVELCBzdGFuZGFyZCBtZWFuaW5ncworICovCiBpbnQgZmR0X2FkZF9tZW1fcnN2KHZvaWQgKmZkdCwgdWludDY0X3QgYWRkcmVzcywgdWludDY0X3Qgc2l6ZSk7CisKKy8qKgorICogZmR0X2RlbF9tZW1fcnN2IC0gcmVtb3ZlIGEgbWVtb3J5IHJlc2VydmUgbWFwIGVudHJ5CisgKiBAZmR0OiBwb2ludGVyIHRvIHRoZSBkZXZpY2UgdHJlZSBibG9iCisgKiBAbjogZW50cnkgdG8gcmVtb3ZlCisgKgorICogZmR0X2RlbF9tZW1fcnN2KCkgcmVtb3ZlcyB0aGUgbi10aCBtZW1vcnkgcmVzZXJ2ZSBtYXAgZW50cnkgZnJvbQorICogdGhlIGJsb2IuCisgKgorICogVGhpcyBmdW5jdGlvbiB3aWxsIGRlbGV0ZSBkYXRhIGZyb20gdGhlIHJlc2VydmF0aW9uIHRhYmxlIGFuZCB3aWxsCisgKiB0aGVyZWZvcmUgY2hhbmdlIHRoZSBpbmRleGVzIG9mIHNvbWUgZW50cmllcyBpbiB0aGUgdGFibGUuCisgKgorICogcmV0dXJuczoKKyAqCTAsIG9uIHN1Y2Nlc3MKKyAqCS1GRFRfRVJSX05PVEZPVU5ELCB0aGVyZSBpcyBubyBlbnRyeSBvZiB0aGUgZ2l2ZW4gaW5kZXggKGkuZS4gdGhlcmUKKyAqCQlhcmUgbGVzcyB0aGFuIG4rMSByZXNlcnZlIG1hcCBlbnRyaWVzKQorICoJLUZEVF9FUlJfQkFETUFHSUMsCisgKgktRkRUX0VSUl9CQURWRVJTSU9OLAorICoJLUZEVF9FUlJfQkFEU1RBVEUsCisgKgktRkRUX0VSUl9CQURTVFJVQ1RVUkUsCisgKgktRkRUX0VSUl9CQURMQVlPVVQsCisgKgktRkRUX0VSUl9UUlVOQ0FURUQsIHN0YW5kYXJkIG1lYW5pbmdzCisgKi8KIGludCBmZHRfZGVsX21lbV9yc3Yodm9pZCAqZmR0LCBpbnQgbik7CiAKKy8qKgorICogZmR0X3NldF9uYW1lIC0gY2hhbmdlIHRoZSBuYW1lIG9mIGEgZ2l2ZW4gbm9kZQorICogQGZkdDogcG9pbnRlciB0byB0aGUgZGV2aWNlIHRyZWUgYmxvYgorICogQG5vZGVvZmZzZXQ6IHN0cnVjdHVyZSBibG9jayBvZmZzZXQgb2YgYSBub2RlCisgKiBAbmFtZTogbmFtZSB0byBnaXZlIHRoZSBub2RlCisgKgorICogZmR0X3NldF9uYW1lKCkgcmVwbGFjZXMgdGhlIG5hbWUgKGluY2x1ZGluZyB1bml0IGFkZHJlc3MsIGlmIGFueSkKKyAqIG9mIHRoZSBnaXZlbiBub2RlIHdpdGggdGhlIGdpdmVuIHN0cmluZy4gIE5PVEU6IHRoaXMgZnVuY3Rpb24gY2FuJ3QKKyAqIGVmZmljaWVudGx5IGNoZWNrIGlmIHRoZSBuZXcgbmFtZSBpcyB1bmlxdWUgYW1vbmdzdCB0aGUgZ2l2ZW4KKyAqIG5vZGUncyBzaWJsaW5nczsgcmVzdWx0cyBhcmUgdW5kZWZpbmVkIGlmIHRoaXMgZnVuY3Rpb24gaXMgaW52b2tlZAorICogd2l0aCBhIG5hbWUgZXF1YWwgdG8gb25lIG9mIHRoZSBnaXZlbiBub2RlJ3Mgc2libGluZ3MuCisgKgorICogVGhpcyBmdW5jdGlvbiBtYXkgaW5zZXJ0IG9yIGRlbGV0ZSBkYXRhIGZyb20gdGhlIGJsb2IsIGFuZCB3aWxsCisgKiB0aGVyZWZvcmUgY2hhbmdlIHRoZSBvZmZzZXRzIG9mIHNvbWUgZXhpc3Rpbmcgbm9kZXMuCisgKgorICogcmV0dXJuczoKKyAqCTAsIG9uIHN1Y2Nlc3MKKyAqCS1GRFRfRVJSX05PU1BBQ0UsIHRoZXJlIGlzIGluc3VmZmljaWVudCBmcmVlIHNwYWNlIGluIHRoZSBibG9iCisgKgkJdG8gY29udGFpbiB0aGUgbmV3IG5hbWUKKyAqCS1GRFRfRVJSX0JBRE9GRlNFVCwgbm9kZW9mZnNldCBkaWQgbm90IHBvaW50IHRvIEZEVF9CRUdJTl9OT0RFIHRhZworICoJLUZEVF9FUlJfQkFETUFHSUMsCisgKgktRkRUX0VSUl9CQURWRVJTSU9OLAorICoJLUZEVF9FUlJfQkFEU1RBVEUsIHN0YW5kYXJkIG1lYW5pbmdzCisgKi8KK2ludCBmZHRfc2V0X25hbWUodm9pZCAqZmR0LCBpbnQgbm9kZW9mZnNldCwgY29uc3QgY2hhciAqbmFtZSk7CisKKy8qKgorICogZmR0X3NldHByb3AgLSBjcmVhdGUgb3IgY2hhbmdlIGEgcHJvcGVydHkKKyAqIEBmZHQ6IHBvaW50ZXIgdG8gdGhlIGRldmljZSB0cmVlIGJsb2IKKyAqIEBub2Rlb2Zmc2V0OiBvZmZzZXQgb2YgdGhlIG5vZGUgd2hvc2UgcHJvcGVydHkgdG8gY2hhbmdlCisgKiBAbmFtZTogbmFtZSBvZiB0aGUgcHJvcGVydHkgdG8gY2hhbmdlCisgKiBAdmFsOiBwb2ludGVyIHRvIGRhdGEgdG8gc2V0IHRoZSBwcm9wZXJ0eSB2YWx1ZSB0bworICogQGxlbjogbGVuZ3RoIG9mIHRoZSBwcm9wZXJ0eSB2YWx1ZQorICoKKyAqIGZkdF9zZXRwcm9wKCkgc2V0cyB0aGUgdmFsdWUgb2YgdGhlIG5hbWVkIHByb3BlcnR5IGluIHRoZSBnaXZlbgorICogbm9kZSB0byB0aGUgZ2l2ZW4gdmFsdWUgYW5kIGxlbmd0aCwgY3JlYXRpbmcgdGhlIHByb3BlcnR5IGlmIGl0CisgKiBkb2VzIG5vdCBhbHJlYWR5IGV4aXN0LgorICoKKyAqIFRoaXMgZnVuY3Rpb24gbWF5IGluc2VydCBvciBkZWxldGUgZGF0YSBmcm9tIHRoZSBibG9iLCBhbmQgd2lsbAorICogdGhlcmVmb3JlIGNoYW5nZSB0aGUgb2Zmc2V0cyBvZiBzb21lIGV4aXN0aW5nIG5vZGVzLgorICoKKyAqIHJldHVybnM6CisgKgkwLCBvbiBzdWNjZXNzCisgKgktRkRUX0VSUl9OT1NQQUNFLCB0aGVyZSBpcyBpbnN1ZmZpY2llbnQgZnJlZSBzcGFjZSBpbiB0aGUgYmxvYiB0bworICoJCWNvbnRhaW4gdGhlIG5ldyBwcm9wZXJ0eSB2YWx1ZQorICoJLUZEVF9FUlJfQkFET0ZGU0VULCBub2Rlb2Zmc2V0IGRpZCBub3QgcG9pbnQgdG8gRkRUX0JFR0lOX05PREUgdGFnCisgKgktRkRUX0VSUl9CQURMQVlPVVQsCisgKgktRkRUX0VSUl9CQURNQUdJQywKKyAqCS1GRFRfRVJSX0JBRFZFUlNJT04sCisgKgktRkRUX0VSUl9CQURTVEFURSwKKyAqCS1GRFRfRVJSX0JBRFNUUlVDVFVSRSwKKyAqCS1GRFRfRVJSX0JBRExBWU9VVCwKKyAqCS1GRFRfRVJSX1RSVU5DQVRFRCwgc3RhbmRhcmQgbWVhbmluZ3MKKyAqLwogaW50IGZkdF9zZXRwcm9wKHZvaWQgKmZkdCwgaW50IG5vZGVvZmZzZXQsIGNvbnN0IGNoYXIgKm5hbWUsCiAJCWNvbnN0IHZvaWQgKnZhbCwgaW50IGxlbik7CisKKy8qKgorICogZmR0X3NldHByb3BfY2VsbCAtIHNldCBhIHByb3BlcnR5IHRvIGEgc2luZ2xlIGNlbGwgdmFsdWUKKyAqIEBmZHQ6IHBvaW50ZXIgdG8gdGhlIGRldmljZSB0cmVlIGJsb2IKKyAqIEBub2Rlb2Zmc2V0OiBvZmZzZXQgb2YgdGhlIG5vZGUgd2hvc2UgcHJvcGVydHkgdG8gY2hhbmdlCisgKiBAbmFtZTogbmFtZSBvZiB0aGUgcHJvcGVydHkgdG8gY2hhbmdlCisgKiBAdmFsOiAzMi1iaXQgaW50ZWdlciB2YWx1ZSBmb3IgdGhlIHByb3BlcnR5IChuYXRpdmUgZW5kaWFuKQorICoKKyAqIGZkdF9zZXRwcm9wX2NlbGwoKSBzZXRzIHRoZSB2YWx1ZSBvZiB0aGUgbmFtZWQgcHJvcGVydHkgaW4gdGhlCisgKiBnaXZlbiBub2RlIHRvIHRoZSBnaXZlbiBjZWxsIHZhbHVlIChjb252ZXJ0aW5nIHRvIGJpZy1lbmRpYW4gaWYKKyAqIG5lY2Vzc2FyeSksIG9yIGNyZWF0ZXMgYSBuZXcgcHJvcGVydHkgd2l0aCB0aGF0IHZhbHVlIGlmIGl0IGRvZXMKKyAqIG5vdCBhbHJlYWR5IGV4aXN0LgorICoKKyAqIFRoaXMgZnVuY3Rpb24gbWF5IGluc2VydCBvciBkZWxldGUgZGF0YSBmcm9tIHRoZSBibG9iLCBhbmQgd2lsbAorICogdGhlcmVmb3JlIGNoYW5nZSB0aGUgb2Zmc2V0cyBvZiBzb21lIGV4aXN0aW5nIG5vZGVzLgorICoKKyAqIHJldHVybnM6CisgKgkwLCBvbiBzdWNjZXNzCisgKgktRkRUX0VSUl9OT1NQQUNFLCB0aGVyZSBpcyBpbnN1ZmZpY2llbnQgZnJlZSBzcGFjZSBpbiB0aGUgYmxvYiB0bworICoJCWNvbnRhaW4gdGhlIG5ldyBwcm9wZXJ0eSB2YWx1ZQorICoJLUZEVF9FUlJfQkFET0ZGU0VULCBub2Rlb2Zmc2V0IGRpZCBub3QgcG9pbnQgdG8gRkRUX0JFR0lOX05PREUgdGFnCisgKgktRkRUX0VSUl9CQURMQVlPVVQsCisgKgktRkRUX0VSUl9CQURNQUdJQywKKyAqCS1GRFRfRVJSX0JBRFZFUlNJT04sCisgKgktRkRUX0VSUl9CQURTVEFURSwKKyAqCS1GRFRfRVJSX0JBRFNUUlVDVFVSRSwKKyAqCS1GRFRfRVJSX0JBRExBWU9VVCwKKyAqCS1GRFRfRVJSX1RSVU5DQVRFRCwgc3RhbmRhcmQgbWVhbmluZ3MKKyAqLwogc3RhdGljIGlubGluZSBpbnQgZmR0X3NldHByb3BfY2VsbCh2b2lkICpmZHQsIGludCBub2Rlb2Zmc2V0LCBjb25zdCBjaGFyICpuYW1lLAogCQkJCSAgIHVpbnQzMl90IHZhbCkKIHsKIAl2YWwgPSBjcHVfdG9fZmR0MzIodmFsKTsKIAlyZXR1cm4gZmR0X3NldHByb3AoZmR0LCBub2Rlb2Zmc2V0LCBuYW1lLCAmdmFsLCBzaXplb2YodmFsKSk7CiB9CisKKy8qKgorICogZmR0X3NldHByb3Bfc3RyaW5nIC0gc2V0IGEgcHJvcGVydHkgdG8gYSBzdHJpbmcgdmFsdWUKKyAqIEBmZHQ6IHBvaW50ZXIgdG8gdGhlIGRldmljZSB0cmVlIGJsb2IKKyAqIEBub2Rlb2Zmc2V0OiBvZmZzZXQgb2YgdGhlIG5vZGUgd2hvc2UgcHJvcGVydHkgdG8gY2hhbmdlCisgKiBAbmFtZTogbmFtZSBvZiB0aGUgcHJvcGVydHkgdG8gY2hhbmdlCisgKiBAc3RyOiBzdHJpbmcgdmFsdWUgZm9yIHRoZSBwcm9wZXJ0eQorICoKKyAqIGZkdF9zZXRwcm9wX3N0cmluZygpIHNldHMgdGhlIHZhbHVlIG9mIHRoZSBuYW1lZCBwcm9wZXJ0eSBpbiB0aGUKKyAqIGdpdmVuIG5vZGUgdG8gdGhlIGdpdmVuIHN0cmluZyB2YWx1ZSAodXNpbmcgdGhlIGxlbmd0aCBvZiB0aGUKKyAqIHN0cmluZyB0byBkZXRlcm1pbmUgdGhlIG5ldyBsZW5ndGggb2YgdGhlIHByb3BlcnR5KSwgb3IgY3JlYXRlcyBhCisgKiBuZXcgcHJvcGVydHkgd2l0aCB0aGF0IHZhbHVlIGlmIGl0IGRvZXMgbm90IGFscmVhZHkgZXhpc3QuCisgKgorICogVGhpcyBmdW5jdGlvbiBtYXkgaW5zZXJ0IG9yIGRlbGV0ZSBkYXRhIGZyb20gdGhlIGJsb2IsIGFuZCB3aWxsCisgKiB0aGVyZWZvcmUgY2hhbmdlIHRoZSBvZmZzZXRzIG9mIHNvbWUgZXhpc3Rpbmcgbm9kZXMuCisgKgorICogcmV0dXJuczoKKyAqCTAsIG9uIHN1Y2Nlc3MKKyAqCS1GRFRfRVJSX05PU1BBQ0UsIHRoZXJlIGlzIGluc3VmZmljaWVudCBmcmVlIHNwYWNlIGluIHRoZSBibG9iIHRvCisgKgkJY29udGFpbiB0aGUgbmV3IHByb3BlcnR5IHZhbHVlCisgKgktRkRUX0VSUl9CQURPRkZTRVQsIG5vZGVvZmZzZXQgZGlkIG5vdCBwb2ludCB0byBGRFRfQkVHSU5fTk9ERSB0YWcKKyAqCS1GRFRfRVJSX0JBRExBWU9VVCwKKyAqCS1GRFRfRVJSX0JBRE1BR0lDLAorICoJLUZEVF9FUlJfQkFEVkVSU0lPTiwKKyAqCS1GRFRfRVJSX0JBRFNUQVRFLAorICoJLUZEVF9FUlJfQkFEU1RSVUNUVVJFLAorICoJLUZEVF9FUlJfQkFETEFZT1VULAorICoJLUZEVF9FUlJfVFJVTkNBVEVELCBzdGFuZGFyZCBtZWFuaW5ncworICovCiAjZGVmaW5lIGZkdF9zZXRwcm9wX3N0cmluZyhmZHQsIG5vZGVvZmZzZXQsIG5hbWUsIHN0cikgXAogCWZkdF9zZXRwcm9wKChmZHQpLCAobm9kZW9mZnNldCksIChuYW1lKSwgKHN0ciksIHN0cmxlbihzdHIpKzEpCisKKy8qKgorICogZmR0X2RlbHByb3AgLSBkZWxldGUgYSBwcm9wZXJ0eQorICogQGZkdDogcG9pbnRlciB0byB0aGUgZGV2aWNlIHRyZWUgYmxvYgorICogQG5vZGVvZmZzZXQ6IG9mZnNldCBvZiB0aGUgbm9kZSB3aG9zZSBwcm9wZXJ0eSB0byBub3AKKyAqIEBuYW1lOiBuYW1lIG9mIHRoZSBwcm9wZXJ0eSB0byBub3AKKyAqCisgKiBmZHRfZGVsX3Byb3BlcnR5KCkgd2lsbCBkZWxldGUgdGhlIGdpdmVuIHByb3BlcnR5LgorICoKKyAqIFRoaXMgZnVuY3Rpb24gd2lsbCBkZWxldGUgZGF0YSBmcm9tIHRoZSBibG9iLCBhbmQgd2lsbCB0aGVyZWZvcmUKKyAqIGNoYW5nZSB0aGUgb2Zmc2V0cyBvZiBzb21lIGV4aXN0aW5nIG5vZGVzLgorICoKKyAqIHJldHVybnM6CisgKgkwLCBvbiBzdWNjZXNzCisgKgktRkRUX0VSUl9OT1RGT1VORCwgbm9kZSBkb2VzIG5vdCBoYXZlIHRoZSBuYW1lZCBwcm9wZXJ0eQorICoJLUZEVF9FUlJfQkFET0ZGU0VULCBub2Rlb2Zmc2V0IGRpZCBub3QgcG9pbnQgdG8gRkRUX0JFR0lOX05PREUgdGFnCisgKgktRkRUX0VSUl9CQURMQVlPVVQsCisgKgktRkRUX0VSUl9CQURNQUdJQywKKyAqCS1GRFRfRVJSX0JBRFZFUlNJT04sCisgKgktRkRUX0VSUl9CQURTVEFURSwKKyAqCS1GRFRfRVJSX0JBRFNUUlVDVFVSRSwKKyAqCS1GRFRfRVJSX1RSVU5DQVRFRCwgc3RhbmRhcmQgbWVhbmluZ3MKKyAqLwogaW50IGZkdF9kZWxwcm9wKHZvaWQgKmZkdCwgaW50IG5vZGVvZmZzZXQsIGNvbnN0IGNoYXIgKm5hbWUpOworCisvKioKKyAqIGZkdF9hZGRfc3Vibm9kZV9uYW1lbGVuIC0gY3JlYXRlcyBhIG5ldyBub2RlIGJhc2VkIG9uIHN1YnN0cmluZworICogQGZkdDogcG9pbnRlciB0byB0aGUgZGV2aWNlIHRyZWUgYmxvYgorICogQHBhcmVudG9mZnNldDogc3RydWN0dXJlIGJsb2NrIG9mZnNldCBvZiBhIG5vZGUKKyAqIEBuYW1lOiBuYW1lIG9mIHRoZSBzdWJub2RlIHRvIGxvY2F0ZQorICogQG5hbWVsZW46IG51bWJlciBvZiBjaGFyYWN0ZXJzIG9mIG5hbWUgdG8gY29uc2lkZXIKKyAqCisgKiBJZGVudGljYWwgdG8gZmR0X2FkZF9zdWJub2RlKCksIGJ1dCB1c2Ugb25seSB0aGUgZmlyc3QgbmFtZWxlbgorICogY2hhcmFjdGVycyBvZiBuYW1lIGFzIHRoZSBuYW1lIG9mIHRoZSBuZXcgbm9kZS4gIFRoaXMgaXMgdXNlZnVsIGZvcgorICogY3JlYXRpbmcgc3Vibm9kZXMgYmFzZWQgb24gYSBwb3J0aW9uIG9mIGEgbGFyZ2VyIHN0cmluZywgc3VjaCBhcyBhCisgKiBmdWxsIHBhdGguCisgKi8KIGludCBmZHRfYWRkX3N1Ym5vZGVfbmFtZWxlbih2b2lkICpmZHQsIGludCBwYXJlbnRvZmZzZXQsCiAJCQkgICAgY29uc3QgY2hhciAqbmFtZSwgaW50IG5hbWVsZW4pOworCisvKioKKyAqIGZkdF9hZGRfc3Vibm9kZSAtIGNyZWF0ZXMgYSBuZXcgbm9kZQorICogQGZkdDogcG9pbnRlciB0byB0aGUgZGV2aWNlIHRyZWUgYmxvYgorICogQHBhcmVudG9mZnNldDogc3RydWN0dXJlIGJsb2NrIG9mZnNldCBvZiBhIG5vZGUKKyAqIEBuYW1lOiBuYW1lIG9mIHRoZSBzdWJub2RlIHRvIGxvY2F0ZQorICoKKyAqIGZkdF9hZGRfc3Vibm9kZSgpIGNyZWF0ZXMgYSBuZXcgbm9kZSBhcyBhIHN1Ym5vZGUgb2YgdGhlIG5vZGUgYXQKKyAqIHN0cnVjdHVyZSBibG9jayBvZmZzZXQgcGFyZW50b2Zmc2V0LCB3aXRoIHRoZSBnaXZlbiBuYW1lICh3aGljaAorICogc2hvdWxkIGluY2x1ZGUgdGhlIHVuaXQgYWRkcmVzcywgaWYgYW55KS4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHdpbGwgaW5zZXJ0IGRhdGEgaW50byB0aGUgYmxvYiwgYW5kIHdpbGwgdGhlcmVmb3JlCisgKiBjaGFuZ2UgdGhlIG9mZnNldHMgb2Ygc29tZSBleGlzdGluZyBub2Rlcy4KKworICogcmV0dXJuczoKKyAqCXN0cnVjdHVyZSBibG9jayBvZmZzZXQgb2YgdGhlIGNyZWF0ZWQgbm9kZWVxdWVzdGVkIHN1Ym5vZGUgKD49MCksIG9uIHN1Y2Nlc3MKKyAqCS1GRFRfRVJSX05PVEZPVU5ELCBpZiB0aGUgcmVxdWVzdGVkIHN1Ym5vZGUgZG9lcyBub3QgZXhpc3QKKyAqCS1GRFRfRVJSX0JBRE9GRlNFVCwgaWYgcGFyZW50b2Zmc2V0IGRpZCBub3QgcG9pbnQgdG8gYW4gRkRUX0JFR0lOX05PREUgdGFnCisgKgktRkRUX0VSUl9FWElTVFMsIGlmIHRoZSBub2RlIGF0IHBhcmVudG9mZnNldCBhbHJlYWR5IGhhcyBhIHN1Ym5vZGUgb2YKKyAqCQl0aGUgZ2l2ZW4gbmFtZQorICoJLUZEVF9FUlJfTk9TUEFDRSwgaWYgdGhlcmUgaXMgaW5zdWZmaWNpZW50IGZyZWUgc3BhY2UgaW4gdGhlCisgKgkJYmxvYiB0byBjb250YWluIHRoZSBuZXcgbm9kZQorICoJLUZEVF9FUlJfTk9TUEFDRQorICoJLUZEVF9FUlJfQkFETEFZT1VUCisgKiAgICAgIC1GRFRfRVJSX0JBRE1BR0lDLAorICoJLUZEVF9FUlJfQkFEVkVSU0lPTiwKKyAqCS1GRFRfRVJSX0JBRFNUQVRFLAorICoJLUZEVF9FUlJfQkFEU1RSVUNUVVJFLAorICoJLUZEVF9FUlJfVFJVTkNBVEVELCBzdGFuZGFyZCBtZWFuaW5ncy4KKyAqLwogaW50IGZkdF9hZGRfc3Vibm9kZSh2b2lkICpmZHQsIGludCBwYXJlbnRvZmZzZXQsIGNvbnN0IGNoYXIgKm5hbWUpOworCisvKioKKyAqIGZkdF9kZWxfbm9kZSAtIGRlbGV0ZSBhIG5vZGUgKHN1YnRyZWUpCisgKiBAZmR0OiBwb2ludGVyIHRvIHRoZSBkZXZpY2UgdHJlZSBibG9iCisgKiBAbm9kZW9mZnNldDogb2Zmc2V0IG9mIHRoZSBub2RlIHRvIG5vcAorICoKKyAqIGZkdF9kZWxfbm9kZSgpIHdpbGwgcmVtb3ZlIHRoZSBnaXZlbiBub2RlLCBpbmNsdWRpbmcgYWxsIGl0cworICogc3Vibm9kZXMgaWYgYW55LCBmcm9tIHRoZSBibG9iLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gd2lsbCBkZWxldGUgZGF0YSBmcm9tIHRoZSBibG9iLCBhbmQgd2lsbCB0aGVyZWZvcmUKKyAqIGNoYW5nZSB0aGUgb2Zmc2V0cyBvZiBzb21lIGV4aXN0aW5nIG5vZGVzLgorICoKKyAqIHJldHVybnM6CisgKgkwLCBvbiBzdWNjZXNzCisgKgktRkRUX0VSUl9CQURPRkZTRVQsIG5vZGVvZmZzZXQgZGlkIG5vdCBwb2ludCB0byBGRFRfQkVHSU5fTk9ERSB0YWcKKyAqCS1GRFRfRVJSX0JBRExBWU9VVCwKKyAqCS1GRFRfRVJSX0JBRE1BR0lDLAorICoJLUZEVF9FUlJfQkFEVkVSU0lPTiwKKyAqCS1GRFRfRVJSX0JBRFNUQVRFLAorICoJLUZEVF9FUlJfQkFEU1RSVUNUVVJFLAorICoJLUZEVF9FUlJfVFJVTkNBVEVELCBzdGFuZGFyZCBtZWFuaW5ncworICovCiBpbnQgZmR0X2RlbF9ub2RlKHZvaWQgKmZkdCwgaW50IG5vZGVvZmZzZXQpOwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2xpYmZkdC9saWJmZHRfaW50ZXJuYWwuaCBiL2FyY2gvcG93ZXJwYy9ib290L2xpYmZkdC9saWJmZHRfaW50ZXJuYWwuaAppbmRleCAxZTYwOTM2Li40NmViOTNlIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC9saWJmZHQvbGliZmR0X2ludGVybmFsLmgKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvbGliZmR0L2xpYmZkdF9pbnRlcm5hbC5oCkBAIC01MiwzOCArNTIsNDQgQEAKICAqLwogI2luY2x1ZGUgPGZkdC5oPgogCi0jZGVmaW5lIEFMSUdOKHgsIGEpCSgoKHgpICsgKGEpIC0gMSkgJiB+KChhKSAtIDEpKQotI2RlZmluZSBQQUxJR04ocCwgYSkJKCh2b2lkICopQUxJR04oKHVuc2lnbmVkIGxvbmcpKHApLCAoYSkpKQorI2RlZmluZSBGRFRfQUxJR04oeCwgYSkJCSgoKHgpICsgKGEpIC0gMSkgJiB+KChhKSAtIDEpKQorI2RlZmluZSBGRFRfVEFHQUxJR04oeCkJCShGRFRfQUxJR04oKHgpLCBGRFRfVEFHU0laRSkpCiAKLSNkZWZpbmUgbWVtZXEocCwgcSwgbikJKG1lbWNtcCgocCksIChxKSwgKG4pKSA9PSAwKQotI2RlZmluZSBzdHJlcShwLCBxKQkoc3RyY21wKChwKSwgKHEpKSA9PSAwKQorI2RlZmluZSBGRFRfQ0hFQ0tfSEVBREVSKGZkdCkgXAorCXsgXAorCQlpbnQgZXJyOyBcCisJCWlmICgoZXJyID0gZmR0X2NoZWNrX2hlYWRlcihmZHQpKSAhPSAwKSBcCisJCQlyZXR1cm4gZXJyOyBcCisJfQogCiB1aW50MzJfdCBfZmR0X25leHRfdGFnKGNvbnN0IHZvaWQgKmZkdCwgaW50IHN0YXJ0b2Zmc2V0LCBpbnQgKm5leHRvZmZzZXQpOworaW50IF9mZHRfY2hlY2tfbm9kZV9vZmZzZXQoY29uc3Qgdm9pZCAqZmR0LCBpbnQgb2Zmc2V0KTsKIGNvbnN0IGNoYXIgKl9mZHRfZmluZF9zdHJpbmcoY29uc3QgY2hhciAqc3RydGFiLCBpbnQgdGFic2l6ZSwgY29uc3QgY2hhciAqcyk7CiBpbnQgX2ZkdF9ub2RlX2VuZF9vZmZzZXQodm9pZCAqZmR0LCBpbnQgbm9kZW9mZnNldCk7CiAKIHN0YXRpYyBpbmxpbmUgY29uc3Qgdm9pZCAqX2ZkdF9vZmZzZXRfcHRyKGNvbnN0IHZvaWQgKmZkdCwgaW50IG9mZnNldCkKIHsKLQlyZXR1cm4gZmR0ICsgZmR0X29mZl9kdF9zdHJ1Y3QoZmR0KSArIG9mZnNldDsKKwlyZXR1cm4gKGNvbnN0IGNoYXIgKilmZHQgKyBmZHRfb2ZmX2R0X3N0cnVjdChmZHQpICsgb2Zmc2V0OwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgKl9mZHRfb2Zmc2V0X3B0cl93KHZvaWQgKmZkdCwgaW50IG9mZnNldCkKIHsKLQlyZXR1cm4gKHZvaWQgKilfZmR0X29mZnNldF9wdHIoZmR0LCBvZmZzZXQpOworCXJldHVybiAodm9pZCAqKSh1aW50cHRyX3QpX2ZkdF9vZmZzZXRfcHRyKGZkdCwgb2Zmc2V0KTsKIH0KIAogc3RhdGljIGlubGluZSBjb25zdCBzdHJ1Y3QgZmR0X3Jlc2VydmVfZW50cnkgKl9mZHRfbWVtX3Jzdihjb25zdCB2b2lkICpmZHQsIGludCBuKQogewogCWNvbnN0IHN0cnVjdCBmZHRfcmVzZXJ2ZV9lbnRyeSAqcnN2X3RhYmxlID0KLQkJZmR0ICsgZmR0X29mZl9tZW1fcnN2bWFwKGZkdCk7CisJCShjb25zdCBzdHJ1Y3QgZmR0X3Jlc2VydmVfZW50cnkgKikKKwkJKChjb25zdCBjaGFyICopZmR0ICsgZmR0X29mZl9tZW1fcnN2bWFwKGZkdCkpOwogCiAJcmV0dXJuIHJzdl90YWJsZSArIG47CiB9CiBzdGF0aWMgaW5saW5lIHN0cnVjdCBmZHRfcmVzZXJ2ZV9lbnRyeSAqX2ZkdF9tZW1fcnN2X3codm9pZCAqZmR0LCBpbnQgbikKIHsKLQlyZXR1cm4gKHZvaWQgKilfZmR0X21lbV9yc3YoZmR0LCBuKTsKKwlyZXR1cm4gKHZvaWQgKikodWludHB0cl90KV9mZHRfbWVtX3JzdihmZHQsIG4pOwogfQogCi0jZGVmaW5lIFNXX01BR0lDCQkofkZEVF9NQUdJQykKKyNkZWZpbmUgRkRUX1NXX01BR0lDCQkofkZEVF9NQUdJQykKIAogI2VuZGlmIC8qIF9MSUJGRFRfSU5URVJOQUxfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvbGliZmR0X2Vudi5oIGIvYXJjaC9wb3dlcnBjL2Jvb3QvbGliZmR0X2Vudi5oCmluZGV4IGE0YjBmYzkuLmM4OWZkYjEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2xpYmZkdF9lbnYuaAorKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9saWJmZHRfZW52LmgKQEAgLTYsNiArNiw3IEBACiAKIHR5cGVkZWYgdTMyIHVpbnQzMl90OwogdHlwZWRlZiB1NjQgdWludDY0X3Q7Cit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgdWludHB0cl90OwogCiAjZGVmaW5lIGZkdDE2X3RvX2NwdSh4KQkJKHgpCiAjZGVmaW5lIGNwdV90b19mZHQxNih4KQkJKHgpCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC93cmFwcGVyIGIvYXJjaC9wb3dlcnBjL2Jvb3Qvd3JhcHBlcgppbmRleCA5NjVjMjM3Li5lZTBkYzQxIDEwMDc1NQotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC93cmFwcGVyCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L3dyYXBwZXIKQEAgLTMwNyw3ICszMDcsOSBAQAogIyBwb3N0LXByb2Nlc3NpbmcgbmVlZGVkIGZvciBzb21lIHBsYXRmb3JtcwogY2FzZSAiJHBsYXRmb3JtIiBpbgogcHNlcmllc3xjaHJwKQotICAgICRvYmpiaW4vYWRkbm90ZSAiJG9maWxlIgorICAgICR7Q1JPU1N9b2JqY29weSAtTyBiaW5hcnkgLWogLmZha2VlbGYgIiRrZXJuZWwiICIkb2ZpbGUiLnJwYW5vdGUKKyAgICAkb2JqYmluL2FkZG5vdGUgIiRvZmlsZSIgIiRvZmlsZSIucnBhbm90ZQorICAgIHJtIC1yICIkb2ZpbGUiLnJwYW5vdGUKICAgICA7OwogY29mZikKICAgICAke0NST1NTfW9iamNvcHkgLU8gYWl4Y29mZi1yczYwMDAgLS1zZXQtc3RhcnQgIiRlbnRyeSIgIiRvZmlsZSIKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzQ0eC9hcmNoZXNfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNDR4L2FyY2hlc19kZWZjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzBmNDYwNwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzQ0eC9hcmNoZXNfZGVmY29uZmlnCkBAIC0wLDAgKzEsNzY3IEBACisjCisjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjctcmM1CisjIFdlZCBPY3QgIDEgMTU6NTQ6NTcgMjAwOAorIworIyBDT05GSUdfUFBDNjQgaXMgbm90IHNldAorCisjCisjIFByb2Nlc3NvciBzdXBwb3J0CisjCisjIENPTkZJR182eHggaXMgbm90IHNldAorIyBDT05GSUdfUFBDXzg1eHggaXMgbm90IHNldAorIyBDT05GSUdfUFBDXzh4eCBpcyBub3Qgc2V0CisjIENPTkZJR180MHggaXMgbm90IHNldAorQ09ORklHXzQ0eD15CisjIENPTkZJR19FMjAwIGlzIG5vdCBzZXQKK0NPTkZJR19QUENfRlBVPXkKK0NPTkZJR180eHg9eQorQ09ORklHX0JPT0tFPXkKK0NPTkZJR19QVEVfNjRCSVQ9eQorQ09ORklHX1BIWVNfNjRCSVQ9eQorIyBDT05GSUdfUFBDX01NX1NMSUNFUyBpcyBub3Qgc2V0CitDT05GSUdfTk9UX0NPSEVSRU5UX0NBQ0hFPXkKK0NPTkZJR19QUEMzMj15CitDT05GSUdfV09SRF9TSVpFPTMyCitDT05GSUdfUFBDX01FUkdFPXkKK0NPTkZJR19NTVU9eQorQ09ORklHX0dFTkVSSUNfQ01PU19VUERBVEU9eQorQ09ORklHX0dFTkVSSUNfVElNRT15CitDT05GSUdfR0VORVJJQ19USU1FX1ZTWVNDQUxMPXkKK0NPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKK0NPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKKyMgQ09ORklHX0hBVkVfU0VUVVBfUEVSX0NQVV9BUkVBIGlzIG5vdCBzZXQKK0NPTkZJR19JUlFfUEVSX0NQVT15CitDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKK0NPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15CitDT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKK0NPTkZJR19SV1NFTV9YQ0hHQUREX0FMR09SSVRITT15CitDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyPXkKK0NPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQorQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKK0NPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQ9eQorIyBDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUyBpcyBub3Qgc2V0CitDT05GSUdfUFBDPXkKK0NPTkZJR19FQVJMWV9QUklOVEs9eQorQ09ORklHX0dFTkVSSUNfTlZSQU09eQorQ09ORklHX1NDSEVEX05PX05PX09NSVRfRlJBTUVfUE9JTlRFUj15CitDT05GSUdfQVJDSF9NQVlfSEFWRV9QQ19GREM9eQorQ09ORklHX1BQQ19PRj15CitDT05GSUdfT0Y9eQorQ09ORklHX1BQQ19VREJHXzE2NTUwPXkKKyMgQ09ORklHX0dFTkVSSUNfVEJTWU5DIGlzIG5vdCBzZXQKK0NPTkZJR19BVURJVF9BUkNIPXkKK0NPTkZJR19HRU5FUklDX0JVRz15CisjIENPTkZJR19ERUZBVUxUX1VJTUFHRSBpcyBub3Qgc2V0CitDT05GSUdfUFBDX0RDUl9OQVRJVkU9eQorIyBDT05GSUdfUFBDX0RDUl9NTUlPIGlzIG5vdCBzZXQKK0NPTkZJR19QUENfRENSPXkKK0NPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCisKKyMKKyMgR2VuZXJhbCBzZXR1cAorIworQ09ORklHX0VYUEVSSU1FTlRBTD15CitDT05GSUdfQlJPS0VOX09OX1NNUD15CitDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCitDT05GSUdfTE9DQUxWRVJTSU9OPSIiCitDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQorQ09ORklHX1NXQVA9eQorQ09ORklHX1NZU1ZJUEM9eQorQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKK0NPTkZJR19QT1NJWF9NUVVFVUU9eQorIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0CisjIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAorIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAorQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKKyMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAorIyBDT05GSUdfR1JPVVBfU0NIRUQgaXMgbm90IHNldAorQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQorQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjI9eQorIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAorIyBDT05GSUdfTkFNRVNQQUNFUyBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQorQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKKyMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNDVEw9eQorQ09ORklHX0VNQkVEREVEPXkKK0NPTkZJR19TWVNDVExfU1lTQ0FMTD15CitDT05GSUdfS0FMTFNZTVM9eQorIyBDT05GSUdfS0FMTFNZTVNfQUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAorQ09ORklHX0hPVFBMVUc9eQorQ09ORklHX1BSSU5USz15CitDT05GSUdfQlVHPXkKK0NPTkZJR19FTEZfQ09SRT15CitDT05GSUdfQ09NUEFUX0JSSz15CitDT05GSUdfQkFTRV9GVUxMPXkKK0NPTkZJR19GVVRFWD15CitDT05GSUdfQU5PTl9JTk9ERVM9eQorQ09ORklHX0VQT0xMPXkKK0NPTkZJR19TSUdOQUxGRD15CitDT05GSUdfVElNRVJGRD15CitDT05GSUdfRVZFTlRGRD15CitDT05GSUdfU0hNRU09eQorQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKK0NPTkZJR19TTFVCX0RFQlVHPXkKKyMgQ09ORklHX1NMQUIgaXMgbm90IHNldAorQ09ORklHX1NMVUI9eQorIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAorIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9PUFJPRklMRT15CisjIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTPXkKK0NPTkZJR19IQVZFX0lPUkVNQVBfUFJPVD15CitDT05GSUdfSEFWRV9LUFJPQkVTPXkKK0NPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQorQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQorIyBDT05GSUdfSEFWRV9ETUFfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfVVNFX0dFTkVSSUNfU01QX0hFTFBFUlMgaXMgbm90IHNldAorIyBDT05GSUdfSEFWRV9DTEsgaXMgbm90IHNldAorQ09ORklHX1BST0NfUEFHRV9NT05JVE9SPXkKKyMgQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQgaXMgbm90IHNldAorQ09ORklHX1NMQUJJTkZPPXkKK0NPTkZJR19SVF9NVVRFWEVTPXkKKyMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAorQ09ORklHX0JBU0VfU01BTEw9MAorQ09ORklHX01PRFVMRVM9eQorIyBDT05GSUdfTU9EVUxFX0ZPUkNFX0xPQUQgaXMgbm90IHNldAorQ09ORklHX01PRFVMRV9VTkxPQUQ9eQorIyBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRCBpcyBub3Qgc2V0CisjIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0CisjIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAorQ09ORklHX0tNT0Q9eQorQ09ORklHX0JMT0NLPXkKK0NPTkZJR19MQkQ9eQorIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19MU0YgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAorCisjCisjIElPIFNjaGVkdWxlcnMKKyMKK0NPTkZJR19JT1NDSEVEX05PT1A9eQorQ09ORklHX0lPU0NIRURfQVM9eQorQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQorQ09ORklHX0lPU0NIRURfQ0ZRPXkKK0NPTkZJR19ERUZBVUxUX0FTPXkKKyMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImFudGljaXBhdG9yeSIKK0NPTkZJR19DTEFTU0lDX1JDVT15CitDT05GSUdfUFBDNHh4X1BDSV9FWFBSRVNTPXkKKworIworIyBQbGF0Zm9ybSBzdXBwb3J0CisjCisjIENPTkZJR19QUENfQ0VMTCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfQ0VMTF9OQVRJVkUgaXMgbm90IHNldAorIyBDT05GSUdfUFEyQURTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JBTUJPTyBpcyBub3Qgc2V0CisjIENPTkZJR19FQk9OWSBpcyBub3Qgc2V0CisjIENPTkZJR19TQU00NDBFUCBpcyBub3Qgc2V0CisjIENPTkZJR19TRVFVT0lBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RBSVNIQU4gaXMgbm90IHNldAorIyBDT05GSUdfS0FUTUFJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JBSU5JRVIgaXMgbm90IHNldAorIyBDT05GSUdfV0FSUCBpcyBub3Qgc2V0CitDT05GSUdfQVJDSEVTPXkKKyMgQ09ORklHX0NBTllPTkxBTkRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dMQUNJRVIgaXMgbm90IHNldAorIyBDT05GSUdfWU9TRU1JVEUgaXMgbm90IHNldAorIyBDT05GSUdfWElMSU5YX1ZJUlRFWDQ0MF9HRU5FUklDX0JPQVJEIGlzIG5vdCBzZXQKK0NPTkZJR19QUEM0NHhfU0lNUExFPXkKK0NPTkZJR180NjBFWD15CisjIENPTkZJR19JUElDIGlzIG5vdCBzZXQKKyMgQ09ORklHX01QSUMgaXMgbm90IHNldAorIyBDT05GSUdfTVBJQ19XRUlSRCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfSTgyNTkgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX1JUQVMgaXMgbm90IHNldAorIyBDT05GSUdfTU1JT19OVlJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfTVBDMTA2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ185NzBfTkFQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19JTkRJUkVDVF9JTyBpcyBub3Qgc2V0CisjIENPTkZJR19HRU5FUklDX0lPTUFQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9GUkVRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZTTF9VTEkxNTc1IGlzIG5vdCBzZXQKKworIworIyBLZXJuZWwgb3B0aW9ucworIworIyBDT05GSUdfSElHSE1FTSBpcyBub3Qgc2V0CitDT05GSUdfVElDS19PTkVTSE9UPXkKK0NPTkZJR19OT19IWj15CitDT05GSUdfSElHSF9SRVNfVElNRVJTPXkKK0NPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTX0JVSUxEPXkKKyMgQ09ORklHX0haXzEwMCBpcyBub3Qgc2V0CitDT05GSUdfSFpfMjUwPXkKKyMgQ09ORklHX0haXzMwMCBpcyBub3Qgc2V0CisjIENPTkZJR19IWl8xMDAwIGlzIG5vdCBzZXQKK0NPTkZJR19IWj0yNTAKK0NPTkZJR19TQ0hFRF9IUlRJQ0s9eQorQ09ORklHX1BSRUVNUFRfTk9ORT15CisjIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWSBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKK0NPTkZJR19CSU5GTVRfRUxGPXkKKyMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BVEhfRU1VTEFUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lPTU1VX0hFTFBFUiBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUc9eQorQ09ORklHX0FSQ0hfSEFTX1dBTEtfTUVNT1JZPXkKK0NPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUkVNT1ZFPXkKK0NPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKK0NPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15CitDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CitDT05GSUdfRkxBVE1FTV9NQU5VQUw9eQorIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0CisjIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKK0NPTkZJR19GTEFUTUVNPXkKK0NPTkZJR19GTEFUX05PREVfTUVNX01BUD15CisjIENPTkZJR19TUEFSU0VNRU1fU1RBVElDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQQVJTRU1FTV9WTUVNTUFQX0VOQUJMRSBpcyBub3Qgc2V0CitDT05GSUdfUEFHRUZMQUdTX0VYVEVOREVEPXkKK0NPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00CitDT05GSUdfTUlHUkFUSU9OPXkKK0NPTkZJR19SRVNPVVJDRVNfNjRCSVQ9eQorQ09ORklHX1pPTkVfRE1BX0ZMQUc9MQorQ09ORklHX0JPVU5DRT15CitDT05GSUdfVklSVF9UT19CVVM9eQorQ09ORklHX0ZPUkNFX01BWF9aT05FT1JERVI9MTEKK0NPTkZJR19QUk9DX0RFVklDRVRSRUU9eQorQ09ORklHX0NNRExJTkVfQk9PTD15CitDT05GSUdfQ01ETElORT0iIgorQ09ORklHX0VYVFJBX1RBUkdFVFM9IiIKK0NPTkZJR19TRUNDT01QPXkKK0NPTkZJR19JU0FfRE1BX0FQST15CisKKyMKKyMgQnVzIG9wdGlvbnMKKyMKK0NPTkZJR19aT05FX0RNQT15CitDT05GSUdfUFBDX0lORElSRUNUX1BDST15CitDT05GSUdfNHh4X1NPQz15CitDT05GSUdfUFBDX1BDSV9DSE9JQ0U9eQorQ09ORklHX1BDST15CitDT05GSUdfUENJX0RPTUFJTlM9eQorQ09ORklHX1BDSV9TWVNDQUxMPXkKKyMgQ09ORklHX1BDSUVQT1JUQlVTIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX1NVUFBPUlRTX01TST15CisjIENPTkZJR19QQ0lfTVNJIGlzIG5vdCBzZXQKK0NPTkZJR19QQ0lfTEVHQUNZPXkKKyMgQ09ORklHX1BDSV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0NBUkQgaXMgbm90IHNldAorIyBDT05GSUdfSE9UUExVR19QQ0kgaXMgbm90IHNldAorIyBDT05GSUdfSEFTX1JBUElESU8gaXMgbm90IHNldAorCisjCisjIEFkdmFuY2VkIHNldHVwCisjCisjIENPTkZJR19BRFZBTkNFRF9PUFRJT05TIGlzIG5vdCBzZXQKKworIworIyBEZWZhdWx0IHNldHRpbmdzIGZvciBhZHZhbmNlZCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIHVzZWQKKyMKK0NPTkZJR19MT1dNRU1fU0laRT0weDMwMDAwMDAwCitDT05GSUdfUEFHRV9PRkZTRVQ9MHhjMDAwMDAwMAorQ09ORklHX0tFUk5FTF9TVEFSVD0weGMwMDAwMDAwCitDT05GSUdfUEhZU0lDQUxfU1RBUlQ9MHgwMDAwMDAwMAorQ09ORklHX1RBU0tfU0laRT0weGMwMDAwMDAwCitDT05GSUdfQ09OU0lTVEVOVF9TVEFSVD0weGZmMTAwMDAwCitDT05GSUdfQ09OU0lTVEVOVF9TSVpFPTB4MDAyMDAwMDAKK0NPTkZJR19ORVQ9eQorCisjCisjIE5ldHdvcmtpbmcgb3B0aW9ucworIworQ09ORklHX1BBQ0tFVD15CisjIENPTkZJR19QQUNLRVRfTU1BUCBpcyBub3Qgc2V0CitDT05GSUdfVU5JWD15CisjIENPTkZJR19ORVRfS0VZIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUPXkKKyMgQ09ORklHX0lQX01VTFRJQ0FTVCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAorQ09ORklHX0lQX0ZJQl9IQVNIPXkKK0NPTkZJR19JUF9QTlA9eQorQ09ORklHX0lQX1BOUF9ESENQPXkKK0NPTkZJR19JUF9QTlBfQk9PVFA9eQorIyBDT05GSUdfSVBfUE5QX1JBUlAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0lQSVAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSUEQgaXMgbm90IHNldAorIyBDT05GSUdfU1lOX0NPT0tJRVMgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0xSTyBpcyBub3Qgc2V0CitDT05GSUdfSU5FVF9ESUFHPXkKK0NPTkZJR19JTkVUX1RDUF9ESUFHPXkKKyMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKK0NPTkZJR19UQ1BfQ09OR19DVUJJQz15CitDT05GSUdfREVGQVVMVF9UQ1BfQ09ORz0iY3ViaWMiCisjIENPTkZJR19UQ1BfTUQ1U0lHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQVjYgaXMgbm90IHNldAorIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CisjIENPTkZJR19BVE0gaXMgbm90IHNldAorIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAorIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xMQzIgaXMgbm90IHNldAorIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1gyNSBpcyBub3Qgc2V0CisjIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0CisKKyMKKyMgTmV0d29yayB0ZXN0aW5nCisjCisjIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBTiBpcyBub3Qgc2V0CisjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKKworIworIyBXaXJlbGVzcworIworIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQzgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lFRUU4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKKworIworIyBEZXZpY2UgRHJpdmVycworIworCisjCisjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKKyMKK0NPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCitDT05GSUdfU1RBTkRBTE9ORT15CitDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CitDT05GSUdfRldfTE9BREVSPXkKK0NPTkZJR19GSVJNV0FSRV9JTl9LRVJORUw9eQorQ09ORklHX0VYVFJBX0ZJUk1XQVJFPSIiCisjIENPTkZJR19ERUJVR19EUklWRVIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfREVWUkVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5vdCBzZXQKK0NPTkZJR19DT05ORUNUT1I9eQorQ09ORklHX1BST0NfRVZFTlRTPXkKKyMgQ09ORklHX01URCBpcyBub3Qgc2V0CitDT05GSUdfT0ZfREVWSUNFPXkKKyMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVY9eQorIyBDT05GSUdfQkxLX0RFVl9GRCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfQ1BRX0RBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19DUFFfQ0lTU19EQSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0RBQzk2MCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1VNRU0gaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfTE9PUCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1NYOCBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9SQU09eQorQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2CitDT05GSUdfQkxLX0RFVl9SQU1fU0laRT0zNTAwMAorIyBDT05GSUdfQkxLX0RFVl9YSVAgaXMgbm90IHNldAorIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAorIyBDT05GSUdfWElMSU5YX1NZU0FDRSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0hEIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JU0NfREVWSUNFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9JREU9eQorIyBDT05GSUdfSURFIGlzIG5vdCBzZXQKKworIworIyBTQ1NJIGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0kgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ETUEgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQSBpcyBub3Qgc2V0CisjIENPTkZJR19NRCBpcyBub3Qgc2V0CisjIENPTkZJR19GVVNJT04gaXMgbm90IHNldAorCisjCisjIElFRUUgMTM5NCAoRmlyZVdpcmUpIHN1cHBvcnQKKyMKKworIworIyBFbmFibGUgb25seSBvbmUgb2YgdGhlIHR3byBzdGFja3MsIHVubGVzcyB5b3Uga25vdyB3aGF0IHlvdSBhcmUgZG9pbmcKKyMKKyMgQ09ORklHX0ZJUkVXSVJFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lFRUUxMzk0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyTyBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNJTlRPU0hfRFJJVkVSUyBpcyBub3Qgc2V0CitDT05GSUdfTkVUREVWSUNFUz15CisjIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0CisjIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldAorIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RVTiBpcyBub3Qgc2V0CisjIENPTkZJR19WRVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19QSFlMSUIgaXMgbm90IHNldAorQ09ORklHX05FVF9FVEhFUk5FVD15CisjIENPTkZJR19NSUkgaXMgbm90IHNldAorIyBDT05GSUdfSEFQUFlNRUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NVTkdFTSBpcyBub3Qgc2V0CisjIENPTkZJR19DQVNTSU5JIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9WRU5ET1JfM0NPTSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfVFVMSVAgaXMgbm90IHNldAorIyBDT05GSUdfSFAxMDAgaXMgbm90IHNldAorQ09ORklHX0lCTV9ORVdfRU1BQz15CitDT05GSUdfSUJNX05FV19FTUFDX1JYQj0yNTYKK0NPTkZJR19JQk1fTkVXX0VNQUNfVFhCPTI1NgorQ09ORklHX0lCTV9ORVdfRU1BQ19QT0xMX1dFSUdIVD0zMgorQ09ORklHX0lCTV9ORVdfRU1BQ19SWF9DT1BZX1RIUkVTSE9MRD0yNTYKK0NPTkZJR19JQk1fTkVXX0VNQUNfUlhfU0tCX0hFQURST09NPTAKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfWk1JSSBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfUkdNSUkgaXMgbm90IHNldAorQ09ORklHX0lCTV9ORVdfRU1BQ19UQUg9eQorQ09ORklHX0lCTV9ORVdfRU1BQ19FTUFDND15CisjIENPTkZJR19ORVRfUENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRERVZfMTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAorIyBDT05GSUdfVFIgaXMgbm90IHNldAorCisjCisjIFdpcmVsZXNzIExBTgorIworIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lXTFdJRklfTEVEUyBpcyBub3Qgc2V0CisjIENPTkZJR19XQU4gaXMgbm90IHNldAorIyBDT05GSUdfRkRESSBpcyBub3Qgc2V0CisjIENPTkZJR19ISVBQSSBpcyBub3Qgc2V0CisjIENPTkZJR19QUFAgaXMgbm90IHNldAorIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0CisjIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BIT05FIGlzIG5vdCBzZXQKKworIworIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfSU5QVVQgaXMgbm90IHNldAorCisjCisjIEhhcmR3YXJlIEkvTyBwb3J0cworIworIyBDT05GSUdfU0VSSU8gaXMgbm90IHNldAorIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAorCisjCisjIENoYXJhY3RlciBkZXZpY2VzCisjCisjIENPTkZJR19WVCBpcyBub3Qgc2V0CitDT05GSUdfREVWS01FTT15CisjIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAorIyBDT05GSUdfTk9aT01JIGlzIG5vdCBzZXQKKworIworIyBTZXJpYWwgZHJpdmVycworIworQ09ORklHX1NFUklBTF84MjUwPXkKK0NPTkZJR19TRVJJQUxfODI1MF9DT05TT0xFPXkKKyMgQ09ORklHX1NFUklBTF84MjUwX1BDSSBpcyBub3Qgc2V0CitDT05GSUdfU0VSSUFMXzgyNTBfTlJfVUFSVFM9NAorQ09ORklHX1NFUklBTF84MjUwX1JVTlRJTUVfVUFSVFM9NAorQ09ORklHX1NFUklBTF84MjUwX0VYVEVOREVEPXkKKyMgQ09ORklHX1NFUklBTF84MjUwX01BTllfUE9SVFMgaXMgbm90IHNldAorQ09ORklHX1NFUklBTF84MjUwX1NIQVJFX0lSUT15CisjIENPTkZJR19TRVJJQUxfODI1MF9ERVRFQ1RfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFUklBTF84MjUwX1JTQSBpcyBub3Qgc2V0CisKKyMKKyMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAorIworIyBDT05GSUdfU0VSSUFMX1VBUlRMSVRFIGlzIG5vdCBzZXQKK0NPTkZJR19TRVJJQUxfQ09SRT15CitDT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15CisjIENPTkZJR19TRVJJQUxfSlNNIGlzIG5vdCBzZXQKK0NPTkZJR19TRVJJQUxfT0ZfUExBVEZPUk09eQorQ09ORklHX1VOSVg5OF9QVFlTPXkKK0NPTkZJR19MRUdBQ1lfUFRZUz15CitDT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKKyMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0CisjIENPTkZJR19IV19SQU5ET00gaXMgbm90IHNldAorIyBDT05GSUdfTlZSQU0gaXMgbm90IHNldAorIyBDT05GSUdfR0VOX1JUQyBpcyBub3Qgc2V0CisjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CisjIENPTkZJR19BUFBMSUNPTSBpcyBub3Qgc2V0CisjIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAorQ09ORklHX0RFVlBPUlQ9eQorIyBDT05GSUdfSTJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQSSBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9XQU5UX09QVElPTkFMX0dQSU9MSUI9eQorIyBDT05GSUdfR1BJT0xJQiBpcyBub3Qgc2V0CisjIENPTkZJR19XMSBpcyBub3Qgc2V0CisjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAorIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAorIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0CisjIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKKworIworIyBTb25pY3MgU2lsaWNvbiBCYWNrcGxhbmUKKyMKK0NPTkZJR19TU0JfUE9TU0lCTEU9eQorIyBDT05GSUdfU1NCIGlzIG5vdCBzZXQKKworIworIyBNdWx0aWZ1bmN0aW9uIGRldmljZSBkcml2ZXJzCisjCisjIENPTkZJR19NRkRfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAorIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CisKKyMKKyMgTXVsdGltZWRpYSBkZXZpY2VzCisjCisKKyMKKyMgTXVsdGltZWRpYSBjb3JlIHN1cHBvcnQKKyMKKyMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0CisjIENPTkZJR19EVkJfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19NRURJQSBpcyBub3Qgc2V0CisKKyMKKyMgTXVsdGltZWRpYSBkcml2ZXJzCisjCitDT05GSUdfREFCPXkKKworIworIyBHcmFwaGljcyBzdXBwb3J0CisjCisjIENPTkZJR19BR1AgaXMgbm90IHNldAorIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKK0NPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTD1tCisjIENPTkZJR19GQiBpcyBub3Qgc2V0CisjIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAorCisjCisjIERpc3BsYXkgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX0RJU1BMQVlfU1VQUE9SVCBpcyBub3Qgc2V0CisjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1VQUE9SVCBpcyBub3Qgc2V0CisjIENPTkZJR19NTUMgaXMgbm90IHNldAorIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldAorIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAorIyBDT05GSUdfQUNDRVNTSUJJTElUWSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkZJTklCQU5EIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VEQUMgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0NMQVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldAorIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKKworIworIyBGaWxlIHN5c3RlbXMKKyMKK0NPTkZJR19FWFQyX0ZTPXkKKyMgQ09ORklHX0VYVDJfRlNfWEFUVFIgaXMgbm90IHNldAorIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAorIyBDT05GSUdfRVhUM19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQ0REVWX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAorIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19ETk9USUZZPXkKK0NPTkZJR19JTk9USUZZPXkKK0NPTkZJR19JTk9USUZZX1VTRVI9eQorIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAorIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVVE9GUzRfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0CisKKyMKKyMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcworIworIyBDT05GSUdfSVNPOTY2MF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19VREZfRlMgaXMgbm90IHNldAorCisjCisjIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKKyMKKyMgQ09ORklHX01TRE9TX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZGQVRfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTlRGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgUHNldWRvIGZpbGVzeXN0ZW1zCisjCitDT05GSUdfUFJPQ19GUz15CitDT05GSUdfUFJPQ19LQ09SRT15CitDT05GSUdfUFJPQ19TWVNDVEw9eQorQ09ORklHX1NZU0ZTPXkKK0NPTkZJR19UTVBGUz15CisjIENPTkZJR19UTVBGU19QT1NJWF9BQ0wgaXMgbm90IHNldAorIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBNaXNjZWxsYW5lb3VzIGZpbGVzeXN0ZW1zCisjCisjIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19DUkFNRlM9eQorIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19PTUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKK0NPTkZJR19ORlNfRlM9eQorQ09ORklHX05GU19WMz15CisjIENPTkZJR19ORlNfVjNfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GU19WNCBpcyBub3Qgc2V0CitDT05GSUdfUk9PVF9ORlM9eQorIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0CitDT05GSUdfTE9DS0Q9eQorQ09ORklHX0xPQ0tEX1Y0PXkKK0NPTkZJR19ORlNfQ09NTU9OPXkKK0NPTkZJR19TVU5SUEM9eQorIyBDT05GSUdfUlBDU0VDX0dTU19LUkI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAorIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NJRlMgaXMgbm90IHNldAorIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBQYXJ0aXRpb24gVHlwZXMKKyMKKyMgQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRCBpcyBub3Qgc2V0CitDT05GSUdfTVNET1NfUEFSVElUSU9OPXkKKyMgQ09ORklHX05MUyBpcyBub3Qgc2V0CisjIENPTkZJR19ETE0gaXMgbm90IHNldAorCisjCisjIExpYnJhcnkgcm91dGluZXMKKyMKK0NPTkZJR19CSVRSRVZFUlNFPXkKKyMgQ09ORklHX0dFTkVSSUNfRklORF9GSVJTVF9CSVQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDX0NDSVRUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQ19UMTBESUYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDX0lUVV9UIGlzIG5vdCBzZXQKK0NPTkZJR19DUkMzMj15CisjIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0CitDT05GSUdfWkxJQl9JTkZMQVRFPXkKK0NPTkZJR19QTElTVD15CitDT05GSUdfSEFTX0lPTUVNPXkKK0NPTkZJR19IQVNfSU9QT1JUPXkKK0NPTkZJR19IQVNfRE1BPXkKK0NPTkZJR19IQVZFX0xNQj15CisKKyMKKyMgS2VybmVsIGhhY2tpbmcKKyMKKyMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKK0NPTkZJR19FTkFCTEVfV0FSTl9ERVBSRUNBVEVEPXkKK0NPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CitDT05GSUdfRlJBTUVfV0FSTj0xMDI0CitDT05GSUdfTUFHSUNfU1lTUlE9eQorIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0ZTPXkKKyMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0tFUk5FTD15CisjIENPTkZJR19ERUJVR19TSElSUSBpcyBub3Qgc2V0CitDT05GSUdfREVURUNUX1NPRlRMT0NLVVA9eQorIyBDT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUMgaXMgbm90IHNldAorQ09ORklHX0JPT1RQQVJBTV9TT0ZUTE9DS1VQX1BBTklDX1ZBTFVFPTAKK0NPTkZJR19TQ0hFRF9ERUJVRz15CisjIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJTUVSX1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX09CSkVDVFMgaXMgbm90IHNldAorIyBDT05GSUdfU0xVQl9ERUJVR19PTiBpcyBub3Qgc2V0CisjIENPTkZJR19TTFVCX1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAorIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX01VVEVYRVMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTE9DS0lOR19BUElfU0VMRlRFU1RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQlVHVkVSQk9TRSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19JTkZPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1ZNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1dSSVRFQ09VTlQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTUVNT1JZX0lOSVQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0CisjIENPTkZJR19CT09UX1BSSU5US19ERUxBWSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAorQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLPXkKK0NPTkZJR19IQVZFX0ZUUkFDRT15CitDT05GSUdfSEFWRV9EWU5BTUlDX0ZUUkFDRT15CisjIENPTkZJR19GVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfU0NIRURfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPTlRFWFRfU1dJVENIX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0FSQ0hfS0dEQj15CisjIENPTkZJR19LR0RCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NUQUNLT1ZFUkZMT1cgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0UgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfUEFHRUFMTE9DIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPREVfUEFUQ0hJTkdfU0VMRlRFU1QgaXMgbm90IHNldAorIyBDT05GSUdfRlRSX0ZJWFVQX1NFTEZURVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX01TSV9CSVRNQVBfU0VMRlRFU1QgaXMgbm90IHNldAorIyBDT05GSUdfWE1PTiBpcyBub3Qgc2V0CisjIENPTkZJR19JUlFTVEFDS1MgaXMgbm90IHNldAorIyBDT05GSUdfVklSUV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19CRElfU1dJVENIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19FQVJMWV9ERUJVRyBpcyBub3Qgc2V0CisKKyMKKyMgU2VjdXJpdHkgb3B0aW9ucworIworIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE8gaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0NMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJUlRVQUxJWkFUSU9OIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgvYXNwODM0N19kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84M3h4L2FzcDgzNDdfZGVmY29uZmlnCmluZGV4IDVlNjc4MGEuLjBiMWZhMjBmIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy84M3h4L2FzcDgzNDdfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgvYXNwODM0N19kZWZjb25maWcKQEAgLTE2NCwxMSArMTY0LDExIEBACiAjCiBDT05GSUdfUFBDX01VTFRJUExBVEZPUk09eQogQ09ORklHX0NMQVNTSUMzMj15Ci1DT05GSUdfUFBDX0NIUlA9eQorIyBDT05GSUdfUFBDX0NIUlAgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX1BNQUMgaXMgbm90IHNldAogIyBDT05GSUdfTVBDNTEyMV9BRFMgaXMgbm90IHNldAogIyBDT05GSUdfTVBDNTEyMV9HRU5FUklDIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19NUEM1Mnh4IGlzIG5vdCBzZXQKLUNPTkZJR19QUENfUE1BQz15CiAjIENPTkZJR19QUENfQ0VMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfQ0VMTF9OQVRJVkUgaXMgbm90IHNldAogIyBDT05GSUdfUFBDXzgyeHggaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9tcGM4MzEzX3JkYl9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84M3h4L21wYzgzMTNfcmRiX2RlZmNvbmZpZwppbmRleCAyMDI4MzM3Li5iN2VhZTJiIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy84M3h4L21wYzgzMTNfcmRiX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84M3h4L21wYzgzMTNfcmRiX2RlZmNvbmZpZwpAQCAtMTYzLDExICsxNjMsMTEgQEAKICMKIENPTkZJR19QUENfTVVMVElQTEFURk9STT15CiBDT05GSUdfQ0xBU1NJQzMyPXkKLUNPTkZJR19QUENfQ0hSUD15CisjIENPTkZJR19QUENfQ0hSUCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfUE1BQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NUEM1MTIxX0FEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NUEM1MTIxX0dFTkVSSUMgaXMgbm90IHNldAogIyBDT05GSUdfUFBDX01QQzUyeHggaXMgbm90IHNldAotQ09ORklHX1BQQ19QTUFDPXkKICMgQ09ORklHX1BQQ19DRUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19DRUxMX05BVElWRSBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfODJ4eCBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy84M3h4L21wYzgzMTVfcmRiX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgvbXBjODMxNV9yZGJfZGVmY29uZmlnCmluZGV4IGRkODBlYjAuLmIwYTI3YTYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgvbXBjODMxNV9yZGJfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgvbXBjODMxNV9yZGJfZGVmY29uZmlnCkBAIC0xNjMsMTEgKzE2MywxMSBAQAogIwogQ09ORklHX1BQQ19NVUxUSVBMQVRGT1JNPXkKIENPTkZJR19DTEFTU0lDMzI9eQotQ09ORklHX1BQQ19DSFJQPXkKKyMgQ09ORklHX1BQQ19DSFJQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19QTUFDIGlzIG5vdCBzZXQKICMgQ09ORklHX01QQzUxMjFfQURTIGlzIG5vdCBzZXQKICMgQ09ORklHX01QQzUxMjFfR0VORVJJQyBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfTVBDNTJ4eCBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDX1BNQUM9eQogIyBDT05GSUdfUFBDX0NFTEwgaXMgbm90IHNldAogIyBDT05GSUdfUFBDX0NFTExfTkFUSVZFIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ184Mnh4IGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgvbXBjODMyeF9tZHNfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9tcGM4MzJ4X21kc19kZWZjb25maWcKaW5kZXggYmRmNTBjOC4uYWQ4MjViYyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9tcGM4MzJ4X21kc19kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9tcGM4MzJ4X21kc19kZWZjb25maWcKQEAgLTE2MywxMSArMTYzLDExIEBACiAjCiBDT05GSUdfUFBDX01VTFRJUExBVEZPUk09eQogQ09ORklHX0NMQVNTSUMzMj15Ci1DT05GSUdfUFBDX0NIUlA9eQorIyBDT05GSUdfUFBDX0NIUlAgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX1BNQUMgaXMgbm90IHNldAogIyBDT05GSUdfTVBDNTEyMV9BRFMgaXMgbm90IHNldAogIyBDT05GSUdfTVBDNTEyMV9HRU5FUklDIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19NUEM1Mnh4IGlzIG5vdCBzZXQKLUNPTkZJR19QUENfUE1BQz15CiAjIENPTkZJR19QUENfQ0VMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfQ0VMTF9OQVRJVkUgaXMgbm90IHNldAogIyBDT05GSUdfUFBDXzgyeHggaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9tcGM4MzJ4X3JkYl9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84M3h4L21wYzgzMnhfcmRiX2RlZmNvbmZpZwppbmRleCA0ZWVmOGM5Li4zODI2NzUwIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy84M3h4L21wYzgzMnhfcmRiX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84M3h4L21wYzgzMnhfcmRiX2RlZmNvbmZpZwpAQCAtMTYzLDExICsxNjMsMTEgQEAKICMKIENPTkZJR19QUENfTVVMVElQTEFURk9STT15CiBDT05GSUdfQ0xBU1NJQzMyPXkKLUNPTkZJR19QUENfQ0hSUD15CisjIENPTkZJR19QUENfQ0hSUCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfUE1BQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NUEM1MTIxX0FEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NUEM1MTIxX0dFTkVSSUMgaXMgbm90IHNldAogIyBDT05GSUdfUFBDX01QQzUyeHggaXMgbm90IHNldAotQ09ORklHX1BQQ19QTUFDPXkKICMgQ09ORklHX1BQQ19DRUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19DRUxMX05BVElWRSBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfODJ4eCBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy84M3h4L21wYzgzNHhfaXR4X2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgvbXBjODM0eF9pdHhfZGVmY29uZmlnCmluZGV4IDhkNjUxMzkuLjkwYWFiMzQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgvbXBjODM0eF9pdHhfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgvbXBjODM0eF9pdHhfZGVmY29uZmlnCkBAIC0xNjMsMTEgKzE2MywxMSBAQAogIwogQ09ORklHX1BQQ19NVUxUSVBMQVRGT1JNPXkKIENPTkZJR19DTEFTU0lDMzI9eQotQ09ORklHX1BQQ19DSFJQPXkKKyMgQ09ORklHX1BQQ19DSFJQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19QTUFDIGlzIG5vdCBzZXQKICMgQ09ORklHX01QQzUxMjFfQURTIGlzIG5vdCBzZXQKICMgQ09ORklHX01QQzUxMjFfR0VORVJJQyBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfTVBDNTJ4eCBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDX1BNQUM9eQogIyBDT05GSUdfUFBDX0NFTEwgaXMgbm90IHNldAogIyBDT05GSUdfUFBDX0NFTExfTkFUSVZFIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ184Mnh4IGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgvbXBjODM0eF9pdHhncF9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84M3h4L21wYzgzNHhfaXR4Z3BfZGVmY29uZmlnCmluZGV4IGE4YWZhMzkuLjc0NThhMjQyIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy84M3h4L21wYzgzNHhfaXR4Z3BfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgvbXBjODM0eF9pdHhncF9kZWZjb25maWcKQEAgLTE2MywxMSArMTYzLDExIEBACiAjCiBDT05GSUdfUFBDX01VTFRJUExBVEZPUk09eQogQ09ORklHX0NMQVNTSUMzMj15Ci1DT05GSUdfUFBDX0NIUlA9eQorIyBDT05GSUdfUFBDX0NIUlAgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX1BNQUMgaXMgbm90IHNldAogIyBDT05GSUdfTVBDNTEyMV9BRFMgaXMgbm90IHNldAogIyBDT05GSUdfTVBDNTEyMV9HRU5FUklDIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19NUEM1Mnh4IGlzIG5vdCBzZXQKLUNPTkZJR19QUENfUE1BQz15CiAjIENPTkZJR19QUENfQ0VMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfQ0VMTF9OQVRJVkUgaXMgbm90IHNldAogIyBDT05GSUdfUFBDXzgyeHggaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9tcGM4MzR4X21kc19kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84M3h4L21wYzgzNHhfbWRzX2RlZmNvbmZpZwppbmRleCAyNGMzMjBhLi4xYTkyNzk4IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy84M3h4L21wYzgzNHhfbWRzX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84M3h4L21wYzgzNHhfbWRzX2RlZmNvbmZpZwpAQCAtMTYzLDExICsxNjMsMTEgQEAKICMKIENPTkZJR19QUENfTVVMVElQTEFURk9STT15CiBDT05GSUdfQ0xBU1NJQzMyPXkKLUNPTkZJR19QUENfQ0hSUD15CisjIENPTkZJR19QUENfQ0hSUCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfUE1BQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NUEM1MTIxX0FEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NUEM1MTIxX0dFTkVSSUMgaXMgbm90IHNldAogIyBDT05GSUdfUFBDX01QQzUyeHggaXMgbm90IHNldAotQ09ORklHX1BQQ19QTUFDPXkKICMgQ09ORklHX1BQQ19DRUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19DRUxMX05BVElWRSBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfODJ4eCBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy84M3h4L21wYzgzNnhfbWRzX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgvbXBjODM2eF9tZHNfZGVmY29uZmlnCmluZGV4IGUwMjllOWUuLjAzZDhjZWQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgvbXBjODM2eF9tZHNfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgvbXBjODM2eF9tZHNfZGVmY29uZmlnCkBAIC0xNjMsMTEgKzE2MywxMSBAQAogIwogQ09ORklHX1BQQ19NVUxUSVBMQVRGT1JNPXkKIENPTkZJR19DTEFTU0lDMzI9eQotQ09ORklHX1BQQ19DSFJQPXkKKyMgQ09ORklHX1BQQ19DSFJQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19QTUFDIGlzIG5vdCBzZXQKICMgQ09ORklHX01QQzUxMjFfQURTIGlzIG5vdCBzZXQKICMgQ09ORklHX01QQzUxMjFfR0VORVJJQyBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfTVBDNTJ4eCBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDX1BNQUM9eQogIyBDT05GSUdfUFBDX0NFTEwgaXMgbm90IHNldAogIyBDT05GSUdfUFBDX0NFTExfTkFUSVZFIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ184Mnh4IGlzIG5vdCBzZXQKQEAgLTM4Myw3ICszODMsODQgQEAKICMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAotIyBDT05GSUdfTVREIGlzIG5vdCBzZXQKK0NPTkZJR19NVEQ9eQorIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DT05DQVQgaXMgbm90IHNldAorQ09ORklHX01URF9QQVJUSVRJT05TPXkKKyMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ01ETElORV9QQVJUUz15CisjIENPTkZJR19NVERfT0ZfUEFSVFMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0FSN19QQVJUUyBpcyBub3Qgc2V0CisKKyMKKyMgVXNlciBNb2R1bGVzIEFuZCBUcmFuc2xhdGlvbiBMYXllcnMKKyMKK0NPTkZJR19NVERfQ0hBUj15CitDT05GSUdfTVREX0JMS0RFVlM9eQorQ09ORklHX01URF9CTE9DSz15CisjIENPTkZJR19GVEwgaXMgbm90IHNldAorIyBDT05GSUdfTkZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19SRkRfRlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NTRkRDIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9PT1BTIGlzIG5vdCBzZXQKKworIworIyBSQU0vUk9NL0ZsYXNoIGNoaXAgZHJpdmVycworIworQ09ORklHX01URF9DRkk9eQorIyBDT05GSUdfTVREX0pFREVDUFJPQkUgaXMgbm90IHNldAorQ09ORklHX01URF9HRU5fUFJPQkU9eQorIyBDT05GSUdfTVREX0NGSV9BRFZfT1BUSU9OUyBpcyBub3Qgc2V0CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE9eQorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8yPXkKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfND15CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfOCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMTYgaXMgbm90IHNldAorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzMyIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX0kxPXkKK0NPTkZJR19NVERfQ0ZJX0kyPXkKKyMgQ09ORklHX01URF9DRklfSTQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NGSV9JOCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ0ZJX0lOVEVMRVhUIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX0FNRFNURD15CisjIENPTkZJR19NVERfQ0ZJX1NUQUEgaXMgbm90IHNldAorQ09ORklHX01URF9DRklfVVRJTD15CisjIENPTkZJR19NVERfUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ST00gaXMgbm90IHNldAorIyBDT05GSUdfTVREX0FCU0VOVCBpcyBub3Qgc2V0CisKKyMKKyMgTWFwcGluZyBkcml2ZXJzIGZvciBjaGlwIGFjY2VzcworIworIyBDT05GSUdfTVREX0NPTVBMRVhfTUFQUElOR1MgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1BIWVNNQVAgaXMgbm90IHNldAorQ09ORklHX01URF9QSFlTTUFQX09GPXkKKyMgQ09ORklHX01URF9JTlRFTF9WUl9OT1IgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1BMQVRSQU0gaXMgbm90IHNldAorCisjCisjIFNlbGYtY29udGFpbmVkIE1URCBkZXZpY2UgZHJpdmVycworIworIyBDT05GSUdfTVREX1BNQzU1MSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfU0xSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX1BIUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NVERSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX0JMT0NLMk1URCBpcyBub3Qgc2V0CisKKyMKKyMgRGlzay1Pbi1DaGlwIERldmljZSBEcml2ZXJzCisjCisjIENPTkZJR19NVERfRE9DMjAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfRE9DMjAwMSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfRE9DMjAwMVBMVVMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX05BTkQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX09ORU5BTkQgaXMgbm90IHNldAorCisjCisjIFVCSSAtIFVuc29ydGVkIGJsb2NrIGltYWdlcworIworIyBDT05GSUdfTVREX1VCSSBpcyBub3Qgc2V0CiBDT05GSUdfT0ZfREVWSUNFPXkKIENPTkZJR19PRl9JMkM9eQogIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy84M3h4L21wYzgzNnhfcmRrX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgvbXBjODM2eF9yZGtfZGVmY29uZmlnCmluZGV4IDdkNjc0YmUuLmNkZjg0MTcgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgvbXBjODM2eF9yZGtfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgvbXBjODM2eF9yZGtfZGVmY29uZmlnCkBAIC0xNjQsMTEgKzE2NCwxMSBAQAogIwogQ09ORklHX1BQQ19NVUxUSVBMQVRGT1JNPXkKIENPTkZJR19DTEFTU0lDMzI9eQotQ09ORklHX1BQQ19DSFJQPXkKKyMgQ09ORklHX1BQQ19DSFJQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19QTUFDIGlzIG5vdCBzZXQKICMgQ09ORklHX01QQzUxMjFfQURTIGlzIG5vdCBzZXQKICMgQ09ORklHX01QQzUxMjFfR0VORVJJQyBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfTVBDNTJ4eCBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDX1BNQUM9eQogIyBDT05GSUdfUFBDX0NFTEwgaXMgbm90IHNldAogIyBDT05GSUdfUFBDX0NFTExfTkFUSVZFIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ184Mnh4IGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgvbXBjODM3eF9tZHNfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9tcGM4Mzd4X21kc19kZWZjb25maWcKaW5kZXggZGU0NzIwMi4uOTdlMDJkNyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9tcGM4Mzd4X21kc19kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9tcGM4Mzd4X21kc19kZWZjb25maWcKQEAgLTE2NCwxMSArMTY0LDExIEBACiAjCiBDT05GSUdfUFBDX01VTFRJUExBVEZPUk09eQogQ09ORklHX0NMQVNTSUMzMj15Ci1DT05GSUdfUFBDX0NIUlA9eQorIyBDT05GSUdfUFBDX0NIUlAgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX1BNQUMgaXMgbm90IHNldAogIyBDT05GSUdfTVBDNTEyMV9BRFMgaXMgbm90IHNldAogIyBDT05GSUdfTVBDNTEyMV9HRU5FUklDIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19NUEM1Mnh4IGlzIG5vdCBzZXQKLUNPTkZJR19QUENfUE1BQz15CiAjIENPTkZJR19QUENfQ0VMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfQ0VMTF9OQVRJVkUgaXMgbm90IHNldAogIyBDT05GSUdfUFBDXzgyeHggaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9tcGM4Mzd4X3JkYl9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84M3h4L21wYzgzN3hfcmRiX2RlZmNvbmZpZwppbmRleCBlOGQyZDY5Li41YWMzMzA1IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy84M3h4L21wYzgzN3hfcmRiX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84M3h4L21wYzgzN3hfcmRiX2RlZmNvbmZpZwpAQCAtMTY0LDExICsxNjQsMTEgQEAKICMKIENPTkZJR19QUENfTVVMVElQTEFURk9STT15CiBDT05GSUdfQ0xBU1NJQzMyPXkKLUNPTkZJR19QUENfQ0hSUD15CisjIENPTkZJR19QUENfQ0hSUCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfUE1BQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NUEM1MTIxX0FEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NUEM1MTIxX0dFTkVSSUMgaXMgbm90IHNldAogIyBDT05GSUdfUFBDX01QQzUyeHggaXMgbm90IHNldAotQ09ORklHX1BQQ19QTUFDPXkKICMgQ09ORklHX1BQQ19DRUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19DRUxMX05BVElWRSBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfODJ4eCBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy84M3h4L3NiYzgzNHhfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9zYmM4MzR4X2RlZmNvbmZpZwppbmRleCA5MjQ1YTY3Li5jMzU5Y2MyIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy84M3h4L3NiYzgzNHhfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgvc2JjODM0eF9kZWZjb25maWcKQEAgLTE2MiwxMSArMTYyLDExIEBACiAjCiBDT05GSUdfUFBDX01VTFRJUExBVEZPUk09eQogQ09ORklHX0NMQVNTSUMzMj15Ci1DT05GSUdfUFBDX0NIUlA9eQorIyBDT05GSUdfUFBDX0NIUlAgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX1BNQUMgaXMgbm90IHNldAogIyBDT05GSUdfTVBDNTEyMV9BRFMgaXMgbm90IHNldAogIyBDT05GSUdfTVBDNTEyMV9HRU5FUklDIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19NUEM1Mnh4IGlzIG5vdCBzZXQKLUNPTkZJR19QUENfUE1BQz15CiAjIENPTkZJR19QUENfQ0VMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfQ0VMTF9OQVRJVkUgaXMgbm90IHNldAogIyBDT05GSUdfUFBDXzgyeHggaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODZ4eC9nZWZfc2JjNjEwX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzg2eHgvZ2VmX3NiYzYxMF9kZWZjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzEyZDdhZgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzg2eHgvZ2VmX3NiYzYxMF9kZWZjb25maWcKQEAgLTAsMCArMSwxNjU3IEBACisjCisjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjYtcmM1CisjIFdlZCBKdW4gMTEgMTI6MDY6NTMgMjAwOAorIworIyBDT05GSUdfUFBDNjQgaXMgbm90IHNldAorCisjCisjIFByb2Nlc3NvciBzdXBwb3J0CisjCitDT05GSUdfNnh4PXkKKyMgQ09ORklHX1BQQ184NXh4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ184eHggaXMgbm90IHNldAorIyBDT05GSUdfNDB4IGlzIG5vdCBzZXQKKyMgQ09ORklHXzQ0eCBpcyBub3Qgc2V0CisjIENPTkZJR19FMjAwIGlzIG5vdCBzZXQKK0NPTkZJR19QUENfRlBVPXkKK0NPTkZJR19BTFRJVkVDPXkKK0NPTkZJR19QUENfU1REX01NVT15CitDT05GSUdfUFBDX1NURF9NTVVfMzI9eQorIyBDT05GSUdfUFBDX01NX1NMSUNFUyBpcyBub3Qgc2V0CitDT05GSUdfU01QPXkKK0NPTkZJR19OUl9DUFVTPTIKK0NPTkZJR19QUEMzMj15CitDT05GSUdfV09SRF9TSVpFPTMyCitDT05GSUdfUFBDX01FUkdFPXkKK0NPTkZJR19NTVU9eQorQ09ORklHX0dFTkVSSUNfQ01PU19VUERBVEU9eQorQ09ORklHX0dFTkVSSUNfVElNRT15CitDT05GSUdfR0VORVJJQ19USU1FX1ZTWVNDQUxMPXkKK0NPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKK0NPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKKyMgQ09ORklHX0hBVkVfU0VUVVBfUEVSX0NQVV9BUkVBIGlzIG5vdCBzZXQKK0NPTkZJR19JUlFfUEVSX0NQVT15CitDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKK0NPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQorQ09ORklHX1JXU0VNX1hDSEdBRERfQUxHT1JJVEhNPXkKK0NPTkZJR19HRU5FUklDX0xPQ0tCUkVBSz15CitDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyPXkKK0NPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQorQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKK0NPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQ9eQorIyBDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUyBpcyBub3Qgc2V0CitDT05GSUdfUFBDPXkKK0NPTkZJR19FQVJMWV9QUklOVEs9eQorQ09ORklHX0dFTkVSSUNfTlZSQU09eQorQ09ORklHX1NDSEVEX05PX05PX09NSVRfRlJBTUVfUE9JTlRFUj15CitDT05GSUdfQVJDSF9NQVlfSEFWRV9QQ19GREM9eQorQ09ORklHX1BQQ19PRj15CitDT05GSUdfT0Y9eQorQ09ORklHX1BQQ19VREJHXzE2NTUwPXkKK0NPTkZJR19HRU5FUklDX1RCU1lOQz15CitDT05GSUdfQVVESVRfQVJDSD15CitDT05GSUdfR0VORVJJQ19CVUc9eQorQ09ORklHX0RFRkFVTFRfVUlNQUdFPXkKKyMgQ09ORklHX1BQQ19EQ1JfTkFUSVZFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19EQ1JfTU1JTyBpcyBub3Qgc2V0CitDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgorCisjCisjIEdlbmVyYWwgc2V0dXAKKyMKK0NPTkZJR19FWFBFUklNRU5UQUw9eQorQ09ORklHX0xPQ0tfS0VSTkVMPXkKK0NPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKK0NPTkZJR19MT0NBTFZFUlNJT049IiIKK0NPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15CitDT05GSUdfU1dBUD15CitDT05GSUdfU1lTVklQQz15CitDT05GSUdfU1lTVklQQ19TWVNDVEw9eQorQ09ORklHX1BPU0lYX01RVUVVRT15CitDT05GSUdfQlNEX1BST0NFU1NfQUNDVD15CitDT05GSUdfQlNEX1BST0NFU1NfQUNDVF9WMz15CisjIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAorQ09ORklHX0lLQ09ORklHPXkKK0NPTkZJR19JS0NPTkZJR19QUk9DPXkKK0NPTkZJR19MT0dfQlVGX1NISUZUPTE0CisjIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKK0NPTkZJR19HUk9VUF9TQ0hFRD15CitDT05GSUdfRkFJUl9HUk9VUF9TQ0hFRD15CisjIENPTkZJR19SVF9HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CitDT05GSUdfVVNFUl9TQ0hFRD15CisjIENPTkZJR19DR1JPVVBfU0NIRUQgaXMgbm90IHNldAorQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQorQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjI9eQorQ09ORklHX1JFTEFZPXkKKyMgQ09ORklHX05BTUVTUEFDRVMgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKK0NPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCisjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0CitDT05GSUdfU1lTQ1RMPXkKK0NPTkZJR19FTUJFRERFRD15CitDT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQorQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLPXkKK0NPTkZJR19LQUxMU1lNUz15CisjIENPTkZJR19LQUxMU1lNU19BTEwgaXMgbm90IHNldAorIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0CitDT05GSUdfSE9UUExVRz15CitDT05GSUdfUFJJTlRLPXkKK0NPTkZJR19CVUc9eQorQ09ORklHX0VMRl9DT1JFPXkKK0NPTkZJR19DT01QQVRfQlJLPXkKK0NPTkZJR19CQVNFX0ZVTEw9eQorQ09ORklHX0ZVVEVYPXkKK0NPTkZJR19BTk9OX0lOT0RFUz15CitDT05GSUdfRVBPTEw9eQorQ09ORklHX1NJR05BTEZEPXkKK0NPTkZJR19USU1FUkZEPXkKK0NPTkZJR19FVkVOVEZEPXkKK0NPTkZJR19TSE1FTT15CitDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQorQ09ORklHX1NMQUI9eQorIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CisjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0CisjIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX09QUk9GSUxFPXkKKyMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfS1BST0JFUz15CitDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKKyMgQ09ORklHX0hBVkVfRE1BX0FUVFJTIGlzIG5vdCBzZXQKK0NPTkZJR19QUk9DX1BBR0VfTU9OSVRPUj15CitDT05GSUdfU0xBQklORk89eQorQ09ORklHX1JUX01VVEVYRVM9eQorIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0CitDT05GSUdfQkFTRV9TTUFMTD0wCitDT05GSUdfTU9EVUxFUz15CisjIENPTkZJR19NT0RVTEVfRk9SQ0VfTE9BRCBpcyBub3Qgc2V0CitDT05GSUdfTU9EVUxFX1VOTE9BRD15CisjIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0CitDT05GSUdfS01PRD15CitDT05GSUdfU1RPUF9NQUNISU5FPXkKK0NPTkZJR19CTE9DSz15CisjIENPTkZJR19MQkQgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19MU0YgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAorCisjCisjIElPIFNjaGVkdWxlcnMKKyMKK0NPTkZJR19JT1NDSEVEX05PT1A9eQorQ09ORklHX0lPU0NIRURfQVM9eQorQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQorQ09ORklHX0lPU0NIRURfQ0ZRPXkKKyMgQ09ORklHX0RFRkFVTFRfQVMgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9DRlE9eQorIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImNmcSIKK0NPTkZJR19DTEFTU0lDX1JDVT15CisKKyMKKyMgUGxhdGZvcm0gc3VwcG9ydAorIworQ09ORklHX1BQQ19NVUxUSVBMQVRGT1JNPXkKK0NPTkZJR19DTEFTU0lDMzI9eQorIyBDT05GSUdfUFBDX0NIUlAgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX1BNQUMgaXMgbm90IHNldAorIyBDT05GSUdfUFBDXzgyeHggaXMgbm90IHNldAorIyBDT05GSUdfUFBDXzgzeHggaXMgbm90IHNldAorQ09ORklHX1BQQ184Nnh4PXkKKyMgQ09ORklHX1BQQ19NUEM1MTJ4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19NUEM1MTIxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19DRUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19DRUxMX05BVElWRSBpcyBub3Qgc2V0CisjIENPTkZJR19QUTJBRFMgaXMgbm90IHNldAorIyBDT05GSUdfTVBDODY0MV9IUENOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NCQzg2NDFEIGlzIG5vdCBzZXQKKyMgQ09ORklHX01QQzg2MTBfSFBDRCBpcyBub3Qgc2V0CitDT05GSUdfR0VGX1NCQzYxMD15CitDT05GSUdfTVBDODY0MT15CisjIENPTkZJR19JUElDIGlzIG5vdCBzZXQKK0NPTkZJR19NUElDPXkKKyMgQ09ORklHX01QSUNfV0VJUkQgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0k4MjU5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19SVEFTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NSU9fTlZSQU0gaXMgbm90IHNldAorIyBDT05GSUdfUFBDX01QQzEwNiBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfOTcwX05BUCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfSU5ESVJFQ1RfSU8gaXMgbm90IHNldAorIyBDT05GSUdfR0VORVJJQ19JT01BUCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfRlJFUSBpcyBub3Qgc2V0CisjIENPTkZJR19GU0xfVUxJMTU3NSBpcyBub3Qgc2V0CisKKyMKKyMgS2VybmVsIG9wdGlvbnMKKyMKKyMgQ09ORklHX0hJR0hNRU0gaXMgbm90IHNldAorQ09ORklHX1RJQ0tfT05FU0hPVD15CisjIENPTkZJR19OT19IWiBpcyBub3Qgc2V0CitDT05GSUdfSElHSF9SRVNfVElNRVJTPXkKK0NPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTX0JVSUxEPXkKKyMgQ09ORklHX0haXzEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19IWl8yNTAgaXMgbm90IHNldAorIyBDT05GSUdfSFpfMzAwIGlzIG5vdCBzZXQKK0NPTkZJR19IWl8xMDAwPXkKK0NPTkZJR19IWj0xMDAwCisjIENPTkZJR19TQ0hFRF9IUlRJQ0sgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVF9OT05FIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZIGlzIG5vdCBzZXQKK0NPTkZJR19QUkVFTVBUPXkKKyMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKK0NPTkZJR19CSU5GTVRfRUxGPXkKK0NPTkZJR19CSU5GTVRfTUlTQz1tCisjIENPTkZJR19JT01NVV9IRUxQRVIgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHPXkKK0NPTkZJR19BUkNIX0hBU19XQUxLX01FTU9SWT15CitDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFJFTU9WRT15CitDT05GSUdfSVJRX0FMTF9DUFVTPXkKK0NPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKK0NPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15CitDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CitDT05GSUdfRkxBVE1FTV9NQU5VQUw9eQorIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0CisjIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKK0NPTkZJR19GTEFUTUVNPXkKK0NPTkZJR19GTEFUX05PREVfTUVNX01BUD15CisjIENPTkZJR19TUEFSU0VNRU1fU1RBVElDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQQVJTRU1FTV9WTUVNTUFQX0VOQUJMRSBpcyBub3Qgc2V0CitDT05GSUdfUEFHRUZMQUdTX0VYVEVOREVEPXkKK0NPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00CisjIENPTkZJR19SRVNPVVJDRVNfNjRCSVQgaXMgbm90IHNldAorQ09ORklHX1pPTkVfRE1BX0ZMQUc9MQorQ09ORklHX0JPVU5DRT15CitDT05GSUdfVklSVF9UT19CVVM9eQorQ09ORklHX0ZPUkNFX01BWF9aT05FT1JERVI9MTEKKyMgQ09ORklHX1BST0NfREVWSUNFVFJFRSBpcyBub3Qgc2V0CisjIENPTkZJR19DTURMSU5FX0JPT0wgaXMgbm90IHNldAorIyBDT05GSUdfUE0gaXMgbm90IHNldAorQ09ORklHX1NFQ0NPTVA9eQorQ09ORklHX0lTQV9ETUFfQVBJPXkKKworIworIyBCdXMgb3B0aW9ucworIworQ09ORklHX1pPTkVfRE1BPXkKK0NPTkZJR19HRU5FUklDX0lTQV9ETUE9eQorQ09ORklHX1BQQ19JTkRJUkVDVF9QQ0k9eQorQ09ORklHX0ZTTF9TT0M9eQorQ09ORklHX0ZTTF9QQ0k9eQorQ09ORklHX1BDST15CitDT05GSUdfUENJX0RPTUFJTlM9eQorQ09ORklHX1BDSV9TWVNDQUxMPXkKK0NPTkZJR19QQ0lFUE9SVEJVUz15CitDT05GSUdfUENJRUFFUj15CisjIENPTkZJR19QQ0lFQVNQTSBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9TVVBQT1JUU19NU0k9eQorIyBDT05GSUdfUENJX01TSSBpcyBub3Qgc2V0CitDT05GSUdfUENJX0xFR0FDWT15CitDT05GSUdfUENJX0RFQlVHPXkKKyMgQ09ORklHX1BDQ0FSRCBpcyBub3Qgc2V0CisjIENPTkZJR19IT1RQTFVHX1BDSSBpcyBub3Qgc2V0CitDT05GSUdfSEFTX1JBUElESU89eQorIyBDT05GSUdfUkFQSURJTyBpcyBub3Qgc2V0CisKKyMKKyMgQWR2YW5jZWQgc2V0dXAKKyMKKyMgQ09ORklHX0FEVkFOQ0VEX09QVElPTlMgaXMgbm90IHNldAorCisjCisjIERlZmF1bHQgc2V0dGluZ3MgZm9yIGFkdmFuY2VkIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgdXNlZAorIworQ09ORklHX0xPV01FTV9TSVpFPTB4MzAwMDAwMDAKK0NPTkZJR19QQUdFX09GRlNFVD0weGMwMDAwMDAwCitDT05GSUdfS0VSTkVMX1NUQVJUPTB4YzAwMDAwMDAKK0NPTkZJR19QSFlTSUNBTF9TVEFSVD0weDAwMDAwMDAwCitDT05GSUdfVEFTS19TSVpFPTB4YzAwMDAwMDAKKworIworIyBOZXR3b3JraW5nCisjCitDT05GSUdfTkVUPXkKKworIworIyBOZXR3b3JraW5nIG9wdGlvbnMKKyMKK0NPTkZJR19QQUNLRVQ9eQorQ09ORklHX1BBQ0tFVF9NTUFQPXkKK0NPTkZJR19VTklYPXkKK0NPTkZJR19YRlJNPXkKK0NPTkZJR19YRlJNX1VTRVI9bQorIyBDT05GSUdfWEZSTV9TVUJfUE9MSUNZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGUk1fTUlHUkFURSBpcyBub3Qgc2V0CisjIENPTkZJR19YRlJNX1NUQVRJU1RJQ1MgaXMgbm90IHNldAorQ09ORklHX05FVF9LRVk9bQorIyBDT05GSUdfTkVUX0tFWV9NSUdSQVRFIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUPXkKK0NPTkZJR19JUF9NVUxUSUNBU1Q9eQorQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUj15CitDT05GSUdfQVNLX0lQX0ZJQl9IQVNIPXkKKyMgQ09ORklHX0lQX0ZJQl9UUklFIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9GSUJfSEFTSD15CitDT05GSUdfSVBfTVVMVElQTEVfVEFCTEVTPXkKK0NPTkZJR19JUF9ST1VURV9NVUxUSVBBVEg9eQorQ09ORklHX0lQX1JPVVRFX1ZFUkJPU0U9eQorQ09ORklHX0lQX1BOUD15CitDT05GSUdfSVBfUE5QX0RIQ1A9eQorQ09ORklHX0lQX1BOUF9CT09UUD15CitDT05GSUdfSVBfUE5QX1JBUlA9eQorQ09ORklHX05FVF9JUElQPW0KK0NPTkZJR19ORVRfSVBHUkU9bQorQ09ORklHX05FVF9JUEdSRV9CUk9BRENBU1Q9eQorQ09ORklHX0lQX01ST1VURT15CitDT05GSUdfSVBfUElNU01fVjE9eQorQ09ORklHX0lQX1BJTVNNX1YyPXkKKyMgQ09ORklHX0FSUEQgaXMgbm90IHNldAorQ09ORklHX1NZTl9DT09LSUVTPXkKK0NPTkZJR19JTkVUX0FIPW0KK0NPTkZJR19JTkVUX0VTUD1tCitDT05GSUdfSU5FVF9JUENPTVA9bQorQ09ORklHX0lORVRfWEZSTV9UVU5ORUw9bQorQ09ORklHX0lORVRfVFVOTkVMPW0KK0NPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQ9eQorQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTD15CitDT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVD15CisjIENPTkZJR19JTkVUX0xSTyBpcyBub3Qgc2V0CitDT05GSUdfSU5FVF9ESUFHPXkKK0NPTkZJR19JTkVUX1RDUF9ESUFHPXkKKyMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKK0NPTkZJR19UQ1BfQ09OR19DVUJJQz15CitDT05GSUdfREVGQVVMVF9UQ1BfQ09ORz0iY3ViaWMiCisjIENPTkZJR19UQ1BfTUQ1U0lHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX1ZTIGlzIG5vdCBzZXQKK0NPTkZJR19JUFY2PW0KKyMgQ09ORklHX0lQVjZfUFJJVkFDWSBpcyBub3Qgc2V0CisjIENPTkZJR19JUFY2X1JPVVRFUl9QUkVGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQVjZfT1BUSU1JU1RJQ19EQUQgaXMgbm90IHNldAorQ09ORklHX0lORVQ2X0FIPW0KK0NPTkZJR19JTkVUNl9FU1A9bQorQ09ORklHX0lORVQ2X0lQQ09NUD1tCisjIENPTkZJR19JUFY2X01JUDYgaXMgbm90IHNldAorQ09ORklHX0lORVQ2X1hGUk1fVFVOTkVMPW0KK0NPTkZJR19JTkVUNl9UVU5ORUw9bQorQ09ORklHX0lORVQ2X1hGUk1fTU9ERV9UUkFOU1BPUlQ9bQorQ09ORklHX0lORVQ2X1hGUk1fTU9ERV9UVU5ORUw9bQorQ09ORklHX0lORVQ2X1hGUk1fTU9ERV9CRUVUPW0KKyMgQ09ORklHX0lORVQ2X1hGUk1fTU9ERV9ST1VURU9QVElNSVpBVElPTiBpcyBub3Qgc2V0CitDT05GSUdfSVBWNl9TSVQ9bQorQ09ORklHX0lQVjZfTkRJU0NfTk9ERVRZUEU9eQorQ09ORklHX0lQVjZfVFVOTkVMPW0KKyMgQ09ORklHX0lQVjZfTVVMVElQTEVfVEFCTEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQVjZfTVJPVVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVExBQkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVFdPUktfU0VDTUFSSyBpcyBub3Qgc2V0CitDT05GSUdfTkVURklMVEVSPXkKKyMgQ09ORklHX05FVEZJTFRFUl9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfTkVURklMVEVSX0FEVkFOQ0VEPXkKK0NPTkZJR19CUklER0VfTkVURklMVEVSPXkKKworIworIyBDb3JlIE5ldGZpbHRlciBDb25maWd1cmF0aW9uCisjCisjIENPTkZJR19ORVRGSUxURVJfTkVUTElOS19RVUVVRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfTkVUTElOS19MT0cgaXMgbm90IHNldAorIyBDT05GSUdfTkZfQ09OTlRSQUNLIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRGSUxURVJfWFRBQkxFUz1tCisjIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0NMQVNTSUZZIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfRFNDUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX01BUksgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9ORlFVRVVFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTkZMT0cgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9SQVRFRVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9UQ1BNU1MgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9UQ1BPUFRTVFJJUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ09NTUVOVCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfRENDUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfRFNDUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfRVNQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9JUFJBTkdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9MRU5HVEggaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0xJTUlUIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9NQUMgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX01BUksgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX09XTkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9QT0xJQ1kgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX01VTFRJUE9SVCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUEhZU0RFViBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUEtUVFlQRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUVVPVEEgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1JBVEVFU1QgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1JFQUxNIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9TVEFUSVNUSUMgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NUUklORyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfVENQTVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9USU1FIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9VMzIgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0hBU0hMSU1JVCBpcyBub3Qgc2V0CisKKyMKKyMgSVA6IE5ldGZpbHRlciBDb25maWd1cmF0aW9uCisjCitDT05GSUdfSVBfTkZfUVVFVUU9bQorQ09ORklHX0lQX05GX0lQVEFCTEVTPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9SRUNFTlQ9bQorQ09ORklHX0lQX05GX01BVENIX0VDTj1tCisjIENPTkZJR19JUF9ORl9NQVRDSF9BSCBpcyBub3Qgc2V0CitDT05GSUdfSVBfTkZfTUFUQ0hfVFRMPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9BRERSVFlQRT1tCitDT05GSUdfSVBfTkZfRklMVEVSPW0KK0NPTkZJR19JUF9ORl9UQVJHRVRfUkVKRUNUPW0KK0NPTkZJR19JUF9ORl9UQVJHRVRfTE9HPW0KK0NPTkZJR19JUF9ORl9UQVJHRVRfVUxPRz1tCitDT05GSUdfSVBfTkZfTUFOR0xFPW0KK0NPTkZJR19JUF9ORl9UQVJHRVRfRUNOPW0KKyMgQ09ORklHX0lQX05GX1RBUkdFVF9UVEwgaXMgbm90IHNldAorQ09ORklHX0lQX05GX1JBVz1tCitDT05GSUdfSVBfTkZfQVJQVEFCTEVTPW0KK0NPTkZJR19JUF9ORl9BUlBGSUxURVI9bQorQ09ORklHX0lQX05GX0FSUF9NQU5HTEU9bQorCisjCisjIElQdjY6IE5ldGZpbHRlciBDb25maWd1cmF0aW9uCisjCitDT05GSUdfSVA2X05GX1FVRVVFPW0KK0NPTkZJR19JUDZfTkZfSVBUQUJMRVM9bQorQ09ORklHX0lQNl9ORl9NQVRDSF9SVD1tCitDT05GSUdfSVA2X05GX01BVENIX09QVFM9bQorQ09ORklHX0lQNl9ORl9NQVRDSF9GUkFHPW0KK0NPTkZJR19JUDZfTkZfTUFUQ0hfSEw9bQorQ09ORklHX0lQNl9ORl9NQVRDSF9JUFY2SEVBREVSPW0KKyMgQ09ORklHX0lQNl9ORl9NQVRDSF9BSCBpcyBub3Qgc2V0CisjIENPTkZJR19JUDZfTkZfTUFUQ0hfTUggaXMgbm90IHNldAorQ09ORklHX0lQNl9ORl9NQVRDSF9FVUk2ND1tCitDT05GSUdfSVA2X05GX0ZJTFRFUj1tCitDT05GSUdfSVA2X05GX1RBUkdFVF9MT0c9bQorIyBDT05GSUdfSVA2X05GX1RBUkdFVF9SRUpFQ1QgaXMgbm90IHNldAorQ09ORklHX0lQNl9ORl9NQU5HTEU9bQorIyBDT05GSUdfSVA2X05GX1RBUkdFVF9ITCBpcyBub3Qgc2V0CitDT05GSUdfSVA2X05GX1JBVz1tCisKKyMKKyMgQnJpZGdlOiBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbgorIworIyBDT05GSUdfQlJJREdFX05GX0VCVEFCTEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAorQ09ORklHX0lQX1NDVFA9bQorIyBDT05GSUdfU0NUUF9EQkdfTVNHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDVFBfREJHX09CSkNOVCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1RQX0hNQUNfTk9ORSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1RQX0hNQUNfU0hBMSBpcyBub3Qgc2V0CitDT05GSUdfU0NUUF9ITUFDX01ENT15CitDT05GSUdfVElQQz1tCisjIENPTkZJR19USVBDX0FEVkFOQ0VEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJUENfREVCVUcgaXMgbm90IHNldAorQ09ORklHX0FUTT1tCitDT05GSUdfQVRNX0NMSVA9bQorIyBDT05GSUdfQVRNX0NMSVBfTk9fSUNNUCBpcyBub3Qgc2V0CitDT05GSUdfQVRNX0xBTkU9bQorQ09ORklHX0FUTV9NUE9BPW0KK0NPTkZJR19BVE1fQlIyNjg0PW0KKyMgQ09ORklHX0FUTV9CUjI2ODRfSVBGSUxURVIgaXMgbm90IHNldAorQ09ORklHX0JSSURHRT1tCitDT05GSUdfVkxBTl84MDIxUT1tCisjIENPTkZJR19ERUNORVQgaXMgbm90IHNldAorQ09ORklHX0xMQz1tCisjIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQWCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0CisjIENPTkZJR19YMjUgaXMgbm90IHNldAorIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0CisjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAorQ09ORklHX1dBTl9ST1VURVI9bQorQ09ORklHX05FVF9TQ0hFRD15CisKKyMKKyMgUXVldWVpbmcvU2NoZWR1bGluZworIworQ09ORklHX05FVF9TQ0hfQ0JRPW0KK0NPTkZJR19ORVRfU0NIX0hUQj1tCitDT05GSUdfTkVUX1NDSF9IRlNDPW0KK0NPTkZJR19ORVRfU0NIX0FUTT1tCitDT05GSUdfTkVUX1NDSF9QUklPPW0KKyMgQ09ORklHX05FVF9TQ0hfUlIgaXMgbm90IHNldAorQ09ORklHX05FVF9TQ0hfUkVEPW0KK0NPTkZJR19ORVRfU0NIX1NGUT1tCitDT05GSUdfTkVUX1NDSF9URVFMPW0KK0NPTkZJR19ORVRfU0NIX1RCRj1tCitDT05GSUdfTkVUX1NDSF9HUkVEPW0KK0NPTkZJR19ORVRfU0NIX0RTTUFSSz1tCitDT05GSUdfTkVUX1NDSF9ORVRFTT1tCisKKyMKKyMgQ2xhc3NpZmljYXRpb24KKyMKK0NPTkZJR19ORVRfQ0xTPXkKKyMgQ09ORklHX05FVF9DTFNfQkFTSUMgaXMgbm90IHNldAorQ09ORklHX05FVF9DTFNfVENJTkRFWD1tCitDT05GSUdfTkVUX0NMU19ST1VURTQ9bQorQ09ORklHX05FVF9DTFNfUk9VVEU9eQorQ09ORklHX05FVF9DTFNfRlc9bQorQ09ORklHX05FVF9DTFNfVTMyPW0KKyMgQ09ORklHX0NMU19VMzJfUEVSRiBpcyBub3Qgc2V0CisjIENPTkZJR19DTFNfVTMyX01BUksgaXMgbm90IHNldAorQ09ORklHX05FVF9DTFNfUlNWUD1tCitDT05GSUdfTkVUX0NMU19SU1ZQNj1tCisjIENPTkZJR19ORVRfQ0xTX0ZMT1cgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0VNQVRDSCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfQ0xTX0FDVCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfQ0xTX0lORCBpcyBub3Qgc2V0CitDT05GSUdfTkVUX1NDSF9GSUZPPXkKKworIworIyBOZXR3b3JrIHRlc3RpbmcKKyMKK0NPTkZJR19ORVRfUEtUR0VOPW0KKyMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBTiBpcyBub3Qgc2V0CisjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKK0NPTkZJR19GSUJfUlVMRVM9eQorCisjCisjIFdpcmVsZXNzCisjCisjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAorIyBDT05GSUdfTUFDODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfSUVFRTgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldAorCisjCisjIERldmljZSBEcml2ZXJzCisjCisKKyMKKyMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucworIworQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKK0NPTkZJR19TVEFOREFMT05FPXkKK0NPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKKyMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19EUklWRVIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfREVWUkVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CitDT05GSUdfTVREPXkKKyMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NPTkNBVD15CitDT05GSUdfTVREX1BBUlRJVElPTlM9eQorIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NNRExJTkVfUEFSVFMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX09GX1BBUlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9BUjdfUEFSVFMgaXMgbm90IHNldAorCisjCisjIFVzZXIgTW9kdWxlcyBBbmQgVHJhbnNsYXRpb24gTGF5ZXJzCisjCitDT05GSUdfTVREX0NIQVI9eQorQ09ORklHX01URF9CTEtERVZTPXkKK0NPTkZJR19NVERfQkxPQ0s9eQorIyBDT05GSUdfRlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GVEwgaXMgbm90IHNldAorIyBDT05GSUdfSU5GVEwgaXMgbm90IHNldAorIyBDT05GSUdfUkZEX0ZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19TU0ZEQyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfT09QUyBpcyBub3Qgc2V0CisKKyMKKyMgUkFNL1JPTS9GbGFzaCBjaGlwIGRyaXZlcnMKKyMKK0NPTkZJR19NVERfQ0ZJPXkKKyMgQ09ORklHX01URF9KRURFQ1BST0JFIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfR0VOX1BST0JFPXkKK0NPTkZJR19NVERfQ0ZJX0FEVl9PUFRJT05TPXkKKyMgQ09ORklHX01URF9DRklfTk9TV0FQIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DRklfQkVfQllURV9TV0FQIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX0xFX0JZVEVfU1dBUD15CisjIENPTkZJR19NVERfQ0ZJX0dFT01FVFJZIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMT15CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzI9eQorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF80PXkKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF84IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xNiBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMzIgaXMgbm90IHNldAorQ09ORklHX01URF9DRklfSTE9eQorQ09ORklHX01URF9DRklfSTI9eQorIyBDT05GSUdfTVREX0NGSV9JNCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ0ZJX0k4IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9PVFAgaXMgbm90IHNldAorQ09ORklHX01URF9DRklfSU5URUxFWFQ9eQorQ09ORklHX01URF9DRklfQU1EU1REPXkKKyMgQ09ORklHX01URF9DRklfU1RBQSBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NGSV9VVElMPXkKKyMgQ09ORklHX01URF9SQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX1JPTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQUJTRU5UIGlzIG5vdCBzZXQKKworIworIyBNYXBwaW5nIGRyaXZlcnMgZm9yIGNoaXAgYWNjZXNzCisjCisjIENPTkZJR19NVERfQ09NUExFWF9NQVBQSU5HUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUEhZU01BUCBpcyBub3Qgc2V0CitDT05GSUdfTVREX1BIWVNNQVBfT0Y9eQorIyBDT05GSUdfTVREX0lOVEVMX1ZSX05PUiBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUExBVFJBTSBpcyBub3Qgc2V0CisKKyMKKyMgU2VsZi1jb250YWluZWQgTVREIGRldmljZSBkcml2ZXJzCisjCisjIENPTkZJR19NVERfUE1DNTUxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9TTFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUEhSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX01URFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQkxPQ0syTVREIGlzIG5vdCBzZXQKKworIworIyBEaXNrLU9uLUNoaXAgRGV2aWNlIERyaXZlcnMKKyMKKyMgQ09ORklHX01URF9ET0MyMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ET0MyMDAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ET0MyMDAxUExVUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTkFORCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfT05FTkFORCBpcyBub3Qgc2V0CisKKyMKKyMgVUJJIC0gVW5zb3J0ZWQgYmxvY2sgaW1hZ2VzCisjCisjIENPTkZJR19NVERfVUJJIGlzIG5vdCBzZXQKK0NPTkZJR19PRl9ERVZJQ0U9eQorQ09ORklHX09GX0kyQz15CisjIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWPXkKKyMgQ09ORklHX0JMS19ERVZfRkQgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0NQUV9EQSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfQ1BRX0NJU1NfREEgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9EQUM5NjAgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9VTUVNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9MT09QPW0KK0NPTkZJR19CTEtfREVWX0NSWVBUT0xPT1A9bQorQ09ORklHX0JMS19ERVZfTkJEPW0KKyMgQ09ORklHX0JMS19ERVZfU1g4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfVUIgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfUkFNPXkKK0NPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgorQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9MTMxMDcyCisjIENPTkZJR19CTEtfREVWX1hJUCBpcyBub3Qgc2V0CisjIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0CitDT05GSUdfTUlTQ19ERVZJQ0VTPXkKKyMgQ09ORklHX1BIQU5UT00gaXMgbm90IHNldAorIyBDT05GSUdfRUVQUk9NXzkzQ1g2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NHSV9JT0M0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJRk1fQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19FTkNMT1NVUkVfU0VSVklDRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfSURFPXkKKyMgQ09ORklHX0lERSBpcyBub3Qgc2V0CisKKyMKKyMgU0NTSSBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0CitDT05GSUdfU0NTST15CitDT05GSUdfU0NTSV9ETUE9eQorIyBDT05GSUdfU0NTSV9UR1QgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX1BST0NfRlM9eQorCisjCisjIFNDU0kgc3VwcG9ydCB0eXBlIChkaXNrLCB0YXBlLCBDRC1ST00pCisjCitDT05GSUdfQkxLX0RFVl9TRD15CitDT05GSUdfQ0hSX0RFVl9TVD15CisjIENPTkZJR19DSFJfREVWX09TU1QgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfU1I9eQorIyBDT05GSUdfQkxLX0RFVl9TUl9WRU5ET1IgaXMgbm90IHNldAorIyBDT05GSUdfQ0hSX0RFVl9TRyBpcyBub3Qgc2V0CisjIENPTkZJR19DSFJfREVWX1NDSCBpcyBub3Qgc2V0CisKKyMKKyMgU29tZSBTQ1NJIGRldmljZXMgKGUuZy4gQ0QganVrZWJveCkgc3VwcG9ydCBtdWx0aXBsZSBMVU5zCisjCisjIENPTkZJR19TQ1NJX01VTFRJX0xVTiBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0NPTlNUQU5UUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0xPR0dJTkcgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TQ0FOX0FTWU5DIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX1dBSVRfU0NBTj1tCisKKyMKKyMgU0NTSSBUcmFuc3BvcnRzCisjCisjIENPTkZJR19TQ1NJX1NQSV9BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0ZDX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfSVNDU0lfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TQVNfTElCU0FTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU1JQX0FUVFJTIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX0xPV0xFVkVMPXkKKyMgQ09ORklHX0lTQ1NJX1RDUCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWXzNXX1hYWFhfUkFJRCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJXzNXXzlYWFggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BQ0FSRCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0FBQ1JBSUQgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BSUM3WFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQUlDN1hYWF9PTEQgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BSUM3OVhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQUlDOTRYWCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RQVF9JMk8gaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BRFZBTlNZUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0FSQ01TUiBpcyBub3Qgc2V0CisjIENPTkZJR19NRUdBUkFJRF9ORVdHRU4gaXMgbm90IHNldAorIyBDT05GSUdfTUVHQVJBSURfTEVHQUNZIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FR0FSQUlEX1NBUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0hQVElPUCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0JVU0xPR0lDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfRE1YMzE5MUQgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9FQVRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfRlVUVVJFX0RPTUFJTiBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0dEVEggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9JUFMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9JTklUSU8gaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9JTklBMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTVZTQVMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TVEVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU1lNNTNDOFhYXzIgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9JUFIgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9RTE9HSUNfMTI4MCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1FMQV9GQyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1FMQV9JU0NTSSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0xQRkMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9EQzM5NXggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9EQzM5MFQgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9OU1AzMiBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU1JQIGlzIG5vdCBzZXQKK0NPTkZJR19BVEE9eQorIyBDT05GSUdfQVRBX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKK0NPTkZJR19TQVRBX1BNUD15CisjIENPTkZJR19TQVRBX0FIQ0kgaXMgbm90IHNldAorIyBDT05GSUdfU0FUQV9TSUwyNCBpcyBub3Qgc2V0CisjIENPTkZJR19TQVRBX0ZTTCBpcyBub3Qgc2V0CitDT05GSUdfQVRBX1NGRj15CisjIENPTkZJR19TQVRBX1NWVyBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFfUElJWCBpcyBub3Qgc2V0CisjIENPTkZJR19TQVRBX01WIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBVEFfTlYgaXMgbm90IHNldAorIyBDT05GSUdfUERDX0FETUEgaXMgbm90IHNldAorIyBDT05GSUdfU0FUQV9RU1RPUiBpcyBub3Qgc2V0CisjIENPTkZJR19TQVRBX1BST01JU0UgaXMgbm90IHNldAorIyBDT05GSUdfU0FUQV9TWDQgaXMgbm90IHNldAorQ09ORklHX1NBVEFfU0lMPXkKKyMgQ09ORklHX1NBVEFfU0lTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBVEFfVUxJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBVEFfVklBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBVEFfVklURVNTRSBpcyBub3Qgc2V0CisjIENPTkZJR19TQVRBX0lOSUMxNjJYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfQUxJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfQU1EIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfQVJUT1AgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9BVElJWFAgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9DTUQ2NDBfUENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfQ01ENjRYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfQ1M1NTIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfQ1M1NTMwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfQ1lQUkVTUyBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0VGQVIgaXMgbm90IHNldAorIyBDT05GSUdfQVRBX0dFTkVSSUMgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9IUFQzNjYgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9IUFQzN1ggaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9IUFQzWDJOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfSFBUM1gzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfSVQ4MjFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfSVQ4MjEzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfSk1JQ1JPTiBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1RSSUZMRVggaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9NQVJWRUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfTVBJSVggaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9PTERQSUlYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfTkVUQ0VMTCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX05JTkpBMzIgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9OUzg3NDEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfTlM4NzQxNSBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX09QVEkgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9PUFRJRE1BIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfUERDX09MRCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1JBRElTWVMgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9SWjEwMDAgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9TQzEyMDAgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9TRVJWRVJXT1JLUyBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1BEQzIwMjdYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfU0lMNjgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfU0lTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfVklBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfV0lOQk9ORCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1BMQVRGT1JNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfU0NIIGlzIG5vdCBzZXQKKyMgQ09ORklHX01EIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZVU0lPTiBpcyBub3Qgc2V0CisKKyMKKyMgSUVFRSAxMzk0IChGaXJlV2lyZSkgc3VwcG9ydAorIworIyBDT05GSUdfRklSRVdJUkUgaXMgbm90IHNldAorIyBDT05GSUdfSUVFRTEzOTQgaXMgbm90IHNldAorIyBDT05GSUdfSTJPIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0lOVE9TSF9EUklWRVJTIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRERVZJQ0VTPXkKKyMgQ09ORklHX05FVERFVklDRVNfTVVMVElRVUVVRSBpcyBub3Qgc2V0CitDT05GSUdfRFVNTVk9bQorQ09ORklHX0JPTkRJTkc9bQorIyBDT05GSUdfTUFDVkxBTiBpcyBub3Qgc2V0CisjIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAorQ09ORklHX1RVTj1tCisjIENPTkZJR19WRVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ05FVCBpcyBub3Qgc2V0CitDT05GSUdfUEhZTElCPXkKKworIworIyBNSUkgUEhZIGRldmljZSBkcml2ZXJzCisjCitDT05GSUdfTUFSVkVMTF9QSFk9eQorIyBDT05GSUdfREFWSUNPTV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfUVNFTUlfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xYVF9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfQ0lDQURBX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19WSVRFU1NFX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19TTVNDX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19CUk9BRENPTV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfSUNQTFVTX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19SRUFMVEVLX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19GSVhFRF9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfTURJT19CSVRCQU5HIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRfRVRIRVJORVQ9eQorQ09ORklHX01JST15CisjIENPTkZJR19IQVBQWU1FQUwgaXMgbm90IHNldAorIyBDT05GSUdfU1VOR0VNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBU1NJTkkgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1ZFTkRPUl8zQ09NIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9UVUxJUCBpcyBub3Qgc2V0CisjIENPTkZJR19IUDEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfWk1JSSBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfUkdNSUkgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1RBSCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfRU1BQzQgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1BDSSBpcyBub3Qgc2V0CisjIENPTkZJR19CNDQgaXMgbm90IHNldAorQ09ORklHX05FVERFVl8xMDAwPXkKKyMgQ09ORklHX0FDRU5JQyBpcyBub3Qgc2V0CisjIENPTkZJR19ETDJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0UxMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0UxMDAwRSBpcyBub3Qgc2V0CisjIENPTkZJR19FMTAwMEVfRU5BQkxFRCBpcyBub3Qgc2V0CisjIENPTkZJR19JUDEwMDAgaXMgbm90IHNldAorIyBDT05GSUdfSUdCIGlzIG5vdCBzZXQKKyMgQ09ORklHX05TODM4MjAgaXMgbm90IHNldAorIyBDT05GSUdfSEFNQUNISSBpcyBub3Qgc2V0CisjIENPTkZJR19ZRUxMT1dGSU4gaXMgbm90IHNldAorIyBDT05GSUdfUjgxNjkgaXMgbm90IHNldAorIyBDT05GSUdfU0lTMTkwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NLR0UgaXMgbm90IHNldAorIyBDT05GSUdfU0tZMiBpcyBub3Qgc2V0CisjIENPTkZJR19WSUFfVkVMT0NJVFkgaXMgbm90IHNldAorIyBDT05GSUdfVElHT04zIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JOWDIgaXMgbm90IHNldAorQ09ORklHX0dJQU5GQVI9eQorIyBDT05GSUdfR0ZBUl9OQVBJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FMQTNYWFggaXMgbm90IHNldAorIyBDT05GSUdfQVRMMSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAorIyBDT05GSUdfVFIgaXMgbm90IHNldAorCisjCisjIFdpcmVsZXNzIExBTgorIworIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lXTFdJRklfTEVEUyBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIE5ldHdvcmsgQWRhcHRlcnMKKyMKKyMgQ09ORklHX1VTQl9DQVRDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9LQVdFVEggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1BFR0FTVVMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1JUTDgxNTAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1VTQk5FVCBpcyBub3Qgc2V0CisjIENPTkZJR19XQU4gaXMgbm90IHNldAorQ09ORklHX0FUTV9EUklWRVJTPXkKKyMgQ09ORklHX0FUTV9EVU1NWSBpcyBub3Qgc2V0CisjIENPTkZJR19BVE1fVENQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTV9MQU5BSSBpcyBub3Qgc2V0CisjIENPTkZJR19BVE1fRU5JIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTV9GSVJFU1RSRUFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTV9aQVRNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTV9OSUNTVEFSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTV9JRFQ3NzI1MiBpcyBub3Qgc2V0CisjIENPTkZJR19BVE1fQU1CQVNTQURPUiBpcyBub3Qgc2V0CisjIENPTkZJR19BVE1fSE9SSVpPTiBpcyBub3Qgc2V0CisjIENPTkZJR19BVE1fSUEgaXMgbm90IHNldAorIyBDT05GSUdfQVRNX0ZPUkUyMDBFX01BWUJFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTV9IRSBpcyBub3Qgc2V0CisjIENPTkZJR19GRERJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJUFBJIGlzIG5vdCBzZXQKK0NPTkZJR19QUFA9bQorQ09ORklHX1BQUF9NVUxUSUxJTks9eQorQ09ORklHX1BQUF9GSUxURVI9eQorQ09ORklHX1BQUF9BU1lOQz1tCitDT05GSUdfUFBQX1NZTkNfVFRZPW0KK0NPTkZJR19QUFBfREVGTEFURT1tCitDT05GSUdfUFBQX0JTRENPTVA9bQorIyBDT05GSUdfUFBQX01QUEUgaXMgbm90IHNldAorQ09ORklHX1BQUE9FPW0KK0NPTkZJR19QUFBPQVRNPW0KKyMgQ09ORklHX1BQUE9MMlRQIGlzIG5vdCBzZXQKK0NPTkZJR19TTElQPW0KK0NPTkZJR19TTElQX0NPTVBSRVNTRUQ9eQorQ09ORklHX1NMSEM9bQorQ09ORklHX1NMSVBfU01BUlQ9eQorQ09ORklHX1NMSVBfTU9ERV9TTElQNj15CisjIENPTkZJR19ORVRfRkMgaXMgbm90IHNldAorQ09ORklHX05FVENPTlNPTEU9eQorIyBDT05GSUdfTkVUQ09OU09MRV9EWU5BTUlDIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRQT0xMPXkKK0NPTkZJR19ORVRQT0xMX1RSQVA9eQorQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVI9eQorIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0CisjIENPTkZJR19QSE9ORSBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKKyMKK0NPTkZJR19JTlBVVD15CisjIENPTkZJR19JTlBVVF9GRl9NRU1MRVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1BPTExERVYgaXMgbm90IHNldAorCisjCisjIFVzZXJsYW5kIGludGVyZmFjZXMKKyMKK0NPTkZJR19JTlBVVF9NT1VTRURFVj15CitDT05GSUdfSU5QVVRfTU9VU0VERVZfUFNBVVg9eQorQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9YPTEwMjQKK0NPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWT03NjgKKyMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9FVkRFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgRGV2aWNlIERyaXZlcnMKKyMKKyMgQ09ORklHX0lOUFVUX0tFWUJPQVJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX01PVVNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1RBQkxFVCBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9NSVNDIGlzIG5vdCBzZXQKKworIworIyBIYXJkd2FyZSBJL08gcG9ydHMKKyMKKyMgQ09ORklHX1NFUklPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKKworIworIyBDaGFyYWN0ZXIgZGV2aWNlcworIworQ09ORklHX1ZUPXkKK0NPTkZJR19WVF9DT05TT0xFPXkKK0NPTkZJR19IV19DT05TT0xFPXkKKyMgQ09ORklHX1ZUX0hXX0NPTlNPTEVfQklORElORyBpcyBub3Qgc2V0CitDT05GSUdfREVWS01FTT15CisjIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAorIyBDT05GSUdfTk9aT01JIGlzIG5vdCBzZXQKKworIworIyBTZXJpYWwgZHJpdmVycworIworQ09ORklHX1NFUklBTF84MjUwPXkKK0NPTkZJR19TRVJJQUxfODI1MF9DT05TT0xFPXkKKyMgQ09ORklHX1NFUklBTF84MjUwX1BDSSBpcyBub3Qgc2V0CitDT05GSUdfU0VSSUFMXzgyNTBfTlJfVUFSVFM9MgorQ09ORklHX1NFUklBTF84MjUwX1JVTlRJTUVfVUFSVFM9MgorIyBDT05GSUdfU0VSSUFMXzgyNTBfRVhURU5ERUQgaXMgbm90IHNldAorCisjCisjIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKKyMKKyMgQ09ORklHX1NFUklBTF9VQVJUTElURSBpcyBub3Qgc2V0CitDT05GSUdfU0VSSUFMX0NPUkU9eQorQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQorIyBDT05GSUdfU0VSSUFMX0pTTSBpcyBub3Qgc2V0CisjIENPTkZJR19TRVJJQUxfT0ZfUExBVEZPUk0gaXMgbm90IHNldAorQ09ORklHX1VOSVg5OF9QVFlTPXkKKyMgQ09ORklHX0xFR0FDWV9QVFlTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0CitDT05GSUdfSFdfUkFORE9NPXkKKyMgQ09ORklHX05WUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0FQUExJQ09NIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAorIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CitDT05GSUdfREVWUE9SVD15CitDT05GSUdfSTJDPXkKK0NPTkZJR19JMkNfQk9BUkRJTkZPPXkKK0NPTkZJR19JMkNfQ0hBUkRFVj15CisKKyMKKyMgSTJDIEhhcmR3YXJlIEJ1cyBzdXBwb3J0CisjCisjIENPTkZJR19JMkNfQUxJMTUzNSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfQUxJMTU2MyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfQUxJMTVYMyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfQU1ENzU2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19BTUQ4MTExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19JODAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19JODEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19QSUlYNCBpcyBub3Qgc2V0CitDT05GSUdfSTJDX01QQz15CisjIENPTkZJR19JMkNfTkZPUkNFMiBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfT0NPUkVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19QQVJQT1JUX0xJR0hUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19QUk9TQVZBR0UgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NBVkFHRTQgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NJTVRFQyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU0lTNTU5NSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU0lTNjMwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TSVM5NlggaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1RBT1NfRVZNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TVFVCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19USU5ZX1VTQiBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfVklBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19WSUFQUk8gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1ZPT0RPTzMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1BDQV9QTEFURk9STSBpcyBub3Qgc2V0CisKKyMKKyMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CisjCitDT05GSUdfRFMxNjgyPXkKKyMgQ09ORklHX1NFTlNPUlNfRUVQUk9NIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0Y4NTc1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUENGODU5MSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX01BWDY4NzUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19CVVMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0NISVAgaXMgbm90IHNldAorIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1cxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CitDT05GSUdfSFdNT049eQorIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQUQ3NDE4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURNMTAyMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FETTEwMjUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRE0xMDI2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURNMTAyOSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FETTEwMzEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRE05MjQwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURUNzQ3MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FEVDc0NzMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BVFhQMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0RTMTYyMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0k1S19BTUIgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19GNzE4MDVGIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRjcxODgyRkcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19GNzUzNzVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfR0w1MThTTSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0dMNTIwU00gaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19JVDg3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE02MyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNNzUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTc3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE03OCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNODAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTgzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE04NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNODcgaXMgbm90IHNldAorQ09ORklHX1NFTlNPUlNfTE05MD15CitDT05GSUdfU0VOU09SU19MTTkyPXkKKyMgQ09ORklHX1NFTlNPUlNfTE05MyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX01BWDE2MTkgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19NQVg2NjUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUEM4NzM2MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDODc0MjcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19TSVM1NTk1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRE1FMTczNyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1NNU0M0N00xIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfU01TQzQ3TTE5MiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1NNU0M0N0IzOTcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRFM3ODI4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVEhNQzUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVklBNjg2QSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1ZUMTIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1ZUODIzMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4Mzc4MUQgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODM3OTFEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzNzkyRCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4Mzc5MyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4M0w3ODVUUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4M0w3ODZORyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzNjI3RUhGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAorIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0CitDT05GSUdfV0FUQ0hET0c9eQorIyBDT05GSUdfV0FUQ0hET0dfTk9XQVlPVVQgaXMgbm90IHNldAorCisjCisjIFdhdGNoZG9nIERldmljZSBEcml2ZXJzCisjCisjIENPTkZJR19TT0ZUX1dBVENIRE9HIGlzIG5vdCBzZXQKKworIworIyBQQ0ktYmFzZWQgV2F0Y2hkb2cgQ2FyZHMKKyMKKyMgQ09ORklHX1BDSVBDV0FUQ0hET0cgaXMgbm90IHNldAorIyBDT05GSUdfV0RUUENJIGlzIG5vdCBzZXQKKworIworIyBVU0ItYmFzZWQgV2F0Y2hkb2cgQ2FyZHMKKyMKKyMgQ09ORklHX1VTQlBDV0FUQ0hET0cgaXMgbm90IHNldAorCisjCisjIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQorIworQ09ORklHX1NTQl9QT1NTSUJMRT15CisjIENPTkZJR19TU0IgaXMgbm90IHNldAorCisjCisjIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0CisjIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKKworIworIyBNdWx0aW1lZGlhIGRldmljZXMKKyMKKworIworIyBNdWx0aW1lZGlhIGNvcmUgc3VwcG9ydAorIworIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RWQl9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX01FRElBIGlzIG5vdCBzZXQKKworIworIyBNdWx0aW1lZGlhIGRyaXZlcnMKKyMKK0NPTkZJR19EQUI9eQorIyBDT05GSUdfVVNCX0RBQlVTQiBpcyBub3Qgc2V0CisKKyMKKyMgR3JhcGhpY3Mgc3VwcG9ydAorIworIyBDT05GSUdfQUdQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CisjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CitDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0w9bQorIyBDT05GSUdfRkIgaXMgbm90IHNldAorIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKKworIworIyBEaXNwbGF5IGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19ESVNQTEFZX1NVUFBPUlQgaXMgbm90IHNldAorCisjCisjIENvbnNvbGUgZGlzcGxheSBkcml2ZXIgc3VwcG9ydAorIworQ09ORklHX1ZHQV9DT05TT0xFPXkKKyMgQ09ORklHX1ZHQUNPTl9TT0ZUX1NDUk9MTEJBQ0sgaXMgbm90IHNldAorQ09ORklHX0RVTU1ZX0NPTlNPTEU9eQorCisjCisjIFNvdW5kCisjCisjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CitDT05GSUdfSElEX1NVUFBPUlQ9eQorQ09ORklHX0hJRD15CisjIENPTkZJR19ISURfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKKworIworIyBVU0IgSW5wdXQgRGV2aWNlcworIworQ09ORklHX1VTQl9ISUQ9eQorIyBDT05GSUdfVVNCX0hJRElOUFVUX1BPV0VSQk9PSyBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfRkYgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0hJRERFViBpcyBub3Qgc2V0CitDT05GSUdfVVNCX1NVUFBPUlQ9eQorQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQorQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKK0NPTkZJR19VU0JfQVJDSF9IQVNfRUhDST15CitDT05GSUdfVVNCPXkKKyMgQ09ORklHX1VTQl9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQU5OT1VOQ0VfTkVXX0RFVklDRVMgaXMgbm90IHNldAorCisjCisjIE1pc2NlbGxhbmVvdXMgVVNCIG9wdGlvbnMKKyMKKyMgQ09ORklHX1VTQl9ERVZJQ0VGUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfREVWSUNFX0NMQVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9EWU5BTUlDX01JTk9SUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1RHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PVEdfV0hJVEVMSVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PVEdfQkxBQ0tMSVNUX0hVQiBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCisjCisjIENPTkZJR19VU0JfQzY3WDAwX0hDRCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0VIQ0lfSENEPXkKKyMgQ09ORklHX1VTQl9FSENJX1JPT1RfSFVCX1RUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9FSENJX1RUX05FV1NDSEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9FSENJX0ZTTCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRUhDSV9IQ0RfUFBDX09GIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNQMTc2MF9IQ0QgaXMgbm90IHNldAorQ09ORklHX1VTQl9PSENJX0hDRD15CisjIENPTkZJR19VU0JfT0hDSV9IQ0RfUFBDX09GIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fREVTQyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX01NSU8gaXMgbm90IHNldAorQ09ORklHX1VTQl9PSENJX0xJVFRMRV9FTkRJQU49eQorIyBDT05GSUdfVVNCX1VIQ0lfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TTDgxMV9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1I4QTY2NTk3X0hDRCBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIERldmljZSBDbGFzcyBkcml2ZXJzCisjCisjIENPTkZJR19VU0JfQUNNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9QUklOVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9XRE0gaXMgbm90IHNldAorCisjCisjIE5PVEU6IFVTQl9TVE9SQUdFIGVuYWJsZXMgU0NTSSwgYW5kICdTQ1NJIGRpc2sgc3VwcG9ydCcKKyMKKworIworIyBtYXkgYWxzbyBiZSBuZWVkZWQ7IHNlZSBVU0JfU1RPUkFHRSBIZWxwIGZvciBtb3JlIGluZm9ybWF0aW9uCisjCitDT05GSUdfVVNCX1NUT1JBR0U9eQorIyBDT05GSUdfVVNCX1NUT1JBR0VfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfREFUQUZBQiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9GUkVFQ09NIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0lTRDIwMCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9EUENNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX1VTQkFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX1NERFIwOSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9TRERSNTUgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfSlVNUFNIT1QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfQUxBVURBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX09ORVRPVUNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0tBUk1BIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0NZUFJFU1NfQVRBQ0IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xJQlVTVUFMIGlzIG5vdCBzZXQKKworIworIyBVU0IgSW1hZ2luZyBkZXZpY2VzCisjCisjIENPTkZJR19VU0JfTURDODAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9NSUNST1RFSyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTU9OIGlzIG5vdCBzZXQKKworIworIyBVU0IgcG9ydCBkcml2ZXJzCisjCisjIENPTkZJR19VU0JfU0VSSUFMIGlzIG5vdCBzZXQKKworIworIyBVU0IgTWlzY2VsbGFuZW91cyBkcml2ZXJzCisjCisjIENPTkZJR19VU0JfRU1JNjIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0VNSTI2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BRFVUVVggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FVRVJTV0FMRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUklPNTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MRUdPVE9XRVIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQkVSUllfQ0hBUkdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MRUQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0NZUFJFU1NfQ1k3QzYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9DWVRIRVJNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9QSElER0VUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JRE1PVVNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9GVERJX0VMQU4gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FQUExFRElTUExBWSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0lTVVNCVkdBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVFJBTkNFVklCUkFUT1IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lPV0FSUklPUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNJR0hURlcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FUTSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NQyBpcyBub3Qgc2V0CisjIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0CisjIENPTkZJR19BQ0NFU1NJQklMSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORklOSUJBTkQgaXMgbm90IHNldAorIyBDT05GSUdfRURBQyBpcyBub3Qgc2V0CitDT05GSUdfUlRDX0xJQj1tCitDT05GSUdfUlRDX0NMQVNTPW0KKworIworIyBSVEMgaW50ZXJmYWNlcworIworQ09ORklHX1JUQ19JTlRGX1NZU0ZTPXkKKyMgQ09ORklHX1JUQ19JTlRGX1BST0MgaXMgbm90IHNldAorQ09ORklHX1JUQ19JTlRGX0RFVj15CisjIENPTkZJR19SVENfSU5URl9ERVZfVUlFX0VNVUwgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9URVNUIGlzIG5vdCBzZXQKKworIworIyBJMkMgUlRDIGRyaXZlcnMKKyMKKyMgQ09ORklHX1JUQ19EUlZfRFMxMzA3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxMzc0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNjcyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTUFYNjkwMCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JTNUMzNzIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9JU0wxMjA4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfWDEyMDUgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUENGODU4MyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000MVQ4MCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1MzNTM5MEEgaXMgbm90IHNldAorCisjCisjIFNQSSBSVEMgZHJpdmVycworIworCisjCisjIFBsYXRmb3JtIFJUQyBkcml2ZXJzCisjCisjIENPTkZJR19SVENfRFJWX0NNT1MgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE1MTEgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE1NTMgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE3NDIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9TVEsxN1RBOCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000OFQ4NiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000OFQ1OSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1YzMDIwIGlzIG5vdCBzZXQKKworIworIyBvbi1DUFUgUlRDIGRyaXZlcnMKKyMKKyMgQ09ORklHX1JUQ19EUlZfUFBDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldAorIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKKworIworIyBGaWxlIHN5c3RlbXMKKyMKK0NPTkZJR19FWFQyX0ZTPXkKK0NPTkZJR19FWFQyX0ZTX1hBVFRSPXkKK0NPTkZJR19FWFQyX0ZTX1BPU0lYX0FDTD15CisjIENPTkZJR19FWFQyX0ZTX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDJfRlNfWElQIGlzIG5vdCBzZXQKK0NPTkZJR19FWFQzX0ZTPXkKK0NPTkZJR19FWFQzX0ZTX1hBVFRSPXkKK0NPTkZJR19FWFQzX0ZTX1BPU0lYX0FDTD15CisjIENPTkZJR19FWFQzX0ZTX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDRERVZfRlMgaXMgbm90IHNldAorQ09ORklHX0pCRD15CitDT05GSUdfRlNfTUJDQUNIRT15CisjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAorQ09ORklHX0ZTX1BPU0lYX0FDTD15CisjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAorQ09ORklHX0ROT1RJRlk9eQorQ09ORklHX0lOT1RJRlk9eQorQ09ORklHX0lOT1RJRllfVVNFUj15CisjIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0CisjIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKKworIworIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCisjCisjIENPTkZJR19JU085NjYwX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VERl9GUyBpcyBub3Qgc2V0CisKKyMKKyMgRE9TL0ZBVC9OVCBGaWxlc3lzdGVtcworIworQ09ORklHX0ZBVF9GUz15CitDT05GSUdfTVNET1NfRlM9eQorQ09ORklHX1ZGQVRfRlM9eQorQ09ORklHX0ZBVF9ERUZBVUxUX0NPREVQQUdFPTQzNworQ09ORklHX0ZBVF9ERUZBVUxUX0lPQ0hBUlNFVD0iaXNvODg1OS0xIgorIyBDT05GSUdfTlRGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgUHNldWRvIGZpbGVzeXN0ZW1zCisjCitDT05GSUdfUFJPQ19GUz15CitDT05GSUdfUFJPQ19LQ09SRT15CitDT05GSUdfUFJPQ19TWVNDVEw9eQorQ09ORklHX1NZU0ZTPXkKK0NPTkZJR19UTVBGUz15CisjIENPTkZJR19UTVBGU19QT1NJWF9BQ0wgaXMgbm90IHNldAorIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBNaXNjZWxsYW5lb3VzIGZpbGVzeXN0ZW1zCisjCisjIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGRlMyX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQU1GUyBpcyBub3Qgc2V0CisjIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKK0NPTkZJR19ORlNfRlM9eQorQ09ORklHX05GU19WMz15CisjIENPTkZJR19ORlNfVjNfQUNMIGlzIG5vdCBzZXQKK0NPTkZJR19ORlNfVjQ9eQorIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0CitDT05GSUdfUk9PVF9ORlM9eQorQ09ORklHX0xPQ0tEPXkKK0NPTkZJR19MT0NLRF9WND15CitDT05GSUdfTkZTX0NPTU1PTj15CitDT05GSUdfU1VOUlBDPXkKK0NPTkZJR19TVU5SUENfR1NTPXkKKyMgQ09ORklHX1NVTlJQQ19CSU5EMzQgaXMgbm90IHNldAorQ09ORklHX1JQQ1NFQ19HU1NfS1JCNT15CisjIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0CitDT05GSUdfQ0lGUz1tCisjIENPTkZJR19DSUZTX1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NJRlNfV0VBS19QV19IQVNIIGlzIG5vdCBzZXQKK0NPTkZJR19DSUZTX1hBVFRSPXkKK0NPTkZJR19DSUZTX1BPU0lYPXkKKyMgQ09ORklHX0NJRlNfREVCVUcyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NJRlNfRVhQRVJJTUVOVEFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgUGFydGl0aW9uIFR5cGVzCisjCisjIENPTkZJR19QQVJUSVRJT05fQURWQU5DRUQgaXMgbm90IHNldAorQ09ORklHX01TRE9TX1BBUlRJVElPTj15CitDT05GSUdfTkxTPXkKK0NPTkZJR19OTFNfREVGQVVMVD0iaXNvODg1OS0xIgorQ09ORklHX05MU19DT0RFUEFHRV80Mzc9bQorQ09ORklHX05MU19DT0RFUEFHRV83Mzc9bQorQ09ORklHX05MU19DT0RFUEFHRV83NzU9bQorQ09ORklHX05MU19DT0RFUEFHRV84NTA9bQorQ09ORklHX05MU19DT0RFUEFHRV84NTI9bQorQ09ORklHX05MU19DT0RFUEFHRV84NTU9bQorQ09ORklHX05MU19DT0RFUEFHRV84NTc9bQorQ09ORklHX05MU19DT0RFUEFHRV84NjA9bQorQ09ORklHX05MU19DT0RFUEFHRV84NjE9bQorQ09ORklHX05MU19DT0RFUEFHRV84NjI9bQorQ09ORklHX05MU19DT0RFUEFHRV84NjM9bQorQ09ORklHX05MU19DT0RFUEFHRV84NjQ9bQorQ09ORklHX05MU19DT0RFUEFHRV84NjU9bQorQ09ORklHX05MU19DT0RFUEFHRV84NjY9bQorQ09ORklHX05MU19DT0RFUEFHRV84Njk9bQorQ09ORklHX05MU19DT0RFUEFHRV85MzY9bQorQ09ORklHX05MU19DT0RFUEFHRV85NTA9bQorQ09ORklHX05MU19DT0RFUEFHRV85MzI9bQorQ09ORklHX05MU19DT0RFUEFHRV85NDk9bQorQ09ORklHX05MU19DT0RFUEFHRV84NzQ9bQorQ09ORklHX05MU19JU084ODU5Xzg9bQorQ09ORklHX05MU19DT0RFUEFHRV8xMjUwPW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfMTI1MT1tCitDT05GSUdfTkxTX0FTQ0lJPW0KK0NPTkZJR19OTFNfSVNPODg1OV8xPW0KK0NPTkZJR19OTFNfSVNPODg1OV8yPW0KK0NPTkZJR19OTFNfSVNPODg1OV8zPW0KK0NPTkZJR19OTFNfSVNPODg1OV80PW0KK0NPTkZJR19OTFNfSVNPODg1OV81PW0KK0NPTkZJR19OTFNfSVNPODg1OV82PW0KK0NPTkZJR19OTFNfSVNPODg1OV83PW0KK0NPTkZJR19OTFNfSVNPODg1OV85PW0KK0NPTkZJR19OTFNfSVNPODg1OV8xMz1tCitDT05GSUdfTkxTX0lTTzg4NTlfMTQ9bQorQ09ORklHX05MU19JU084ODU5XzE1PW0KK0NPTkZJR19OTFNfS09JOF9SPW0KK0NPTkZJR19OTFNfS09JOF9VPW0KK0NPTkZJR19OTFNfVVRGOD1tCisjIENPTkZJR19ETE0gaXMgbm90IHNldAorCisjCisjIExpYnJhcnkgcm91dGluZXMKKyMKK0NPTkZJR19CSVRSRVZFUlNFPXkKKyMgQ09ORklHX0dFTkVSSUNfRklORF9GSVJTVF9CSVQgaXMgbm90IHNldAorQ09ORklHX0NSQ19DQ0lUVD1tCisjIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0CisjIENPTkZJR19DUkNfSVRVX1QgaXMgbm90IHNldAorQ09ORklHX0NSQzMyPXkKKyMgQ09ORklHX0NSQzcgaXMgbm90IHNldAorQ09ORklHX0xJQkNSQzMyQz1tCitDT05GSUdfWkxJQl9JTkZMQVRFPW0KK0NPTkZJR19aTElCX0RFRkxBVEU9bQorQ09ORklHX1BMSVNUPXkKK0NPTkZJR19IQVNfSU9NRU09eQorQ09ORklHX0hBU19JT1BPUlQ9eQorQ09ORklHX0hBU19ETUE9eQorQ09ORklHX0hBVkVfTE1CPXkKKworIworIyBLZXJuZWwgaGFja2luZworIworIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAorQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQ9eQorQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKK0NPTkZJR19GUkFNRV9XQVJOPTEwMjQKK0NPTkZJR19NQUdJQ19TWVNSUT15CisjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19LRVJORUw9eQorIyBDT05GSUdfREVCVUdfU0hJUlEgaXMgbm90IHNldAorQ09ORklHX0RFVEVDVF9TT0ZUTE9DS1VQPXkKK0NPTkZJR19TQ0hFRF9ERUJVRz15CisjIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJTUVSX1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX09CSkVDVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU0xBQiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19NVVRFWEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0xPQ0tJTkdfQVBJX1NFTEZURVNUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0UgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0lORk89eQorIyBDT05GSUdfREVCVUdfVk0gaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfV1JJVEVDT1VOVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPT1RfUFJJTlRLX0RFTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAorIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TVEFDS09WRVJGTE9XIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1BBR0VBTExPQyBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdHRVI9eQorIyBDT05GSUdfWE1PTiBpcyBub3Qgc2V0CisjIENPTkZJR19JUlFTVEFDS1MgaXMgbm90IHNldAorIyBDT05GSUdfQkRJX1NXSVRDSCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfRUFSTFlfREVCVUcgaXMgbm90IHNldAorCisjCisjIFNlY3VyaXR5IG9wdGlvbnMKKyMKKyMgQ09ORklHX0tFWVMgaXMgbm90IHNldAorQ09ORklHX1NFQ1VSSVRZPXkKK0NPTkZJR19TRUNVUklUWV9ORVRXT1JLPXkKKyMgQ09ORklHX1NFQ1VSSVRZX05FVFdPUktfWEZSTSBpcyBub3Qgc2V0CitDT05GSUdfU0VDVVJJVFlfQ0FQQUJJTElUSUVTPXkKKyMgQ09ORklHX1NFQ1VSSVRZX0ZJTEVfQ0FQQUJJTElUSUVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZX1JPT1RQTFVHIGlzIG5vdCBzZXQKK0NPTkZJR19TRUNVUklUWV9ERUZBVUxUX01NQVBfTUlOX0FERFI9MAorQ09ORklHX0NSWVBUTz15CisKKyMKKyMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCisjCitDT05GSUdfQ1JZUFRPX0FMR0FQST15CitDT05GSUdfQ1JZUFRPX0FFQUQ9bQorQ09ORklHX0NSWVBUT19CTEtDSVBIRVI9eQorQ09ORklHX0NSWVBUT19IQVNIPXkKK0NPTkZJR19DUllQVE9fTUFOQUdFUj15CisjIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19OVUxMPW0KKyMgQ09ORklHX0NSWVBUT19DUllQVEQgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19BVVRIRU5DPW0KK0NPTkZJR19DUllQVE9fVEVTVD1tCisKKyMKKyMgQXV0aGVudGljYXRlZCBFbmNyeXB0aW9uIHdpdGggQXNzb2NpYXRlZCBEYXRhCisjCisjIENPTkZJR19DUllQVE9fQ0NNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HQ00gaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NFUUlWIGlzIG5vdCBzZXQKKworIworIyBCbG9jayBtb2RlcworIworQ09ORklHX0NSWVBUT19DQkM9eQorIyBDT05GSUdfQ1JZUFRPX0NUUiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ1RTIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fRUNCPW0KKyMgQ09ORklHX0NSWVBUT19MUlcgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19QQ0JDPW0KKyMgQ09ORklHX0NSWVBUT19YVFMgaXMgbm90IHNldAorCisjCisjIEhhc2ggbW9kZXMKKyMKK0NPTkZJR19DUllQVE9fSE1BQz15CisjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisKKyMKKyMgRGlnZXN0CisjCitDT05GSUdfQ1JZUFRPX0NSQzMyQz1tCitDT05GSUdfQ1JZUFRPX01END1tCitDT05GSUdfQ1JZUFRPX01ENT15CitDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDPW0KK0NPTkZJR19DUllQVE9fU0hBMT1tCitDT05GSUdfQ1JZUFRPX1NIQTI1Nj1tCitDT05GSUdfQ1JZUFRPX1NIQTUxMj1tCisjIENPTkZJR19DUllQVE9fVEdSMTkyIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fV1A1MTI9bQorCisjCisjIENpcGhlcnMKKyMKK0NPTkZJR19DUllQVE9fQUVTPW0KK0NPTkZJR19DUllQVE9fQU5VQklTPW0KK0NPTkZJR19DUllQVE9fQVJDND1tCitDT05GSUdfQ1JZUFRPX0JMT1dGSVNIPW0KKyMgQ09ORklHX0NSWVBUT19DQU1FTExJQSBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0NBU1Q1PW0KK0NPTkZJR19DUllQVE9fQ0FTVDY9bQorQ09ORklHX0NSWVBUT19ERVM9eQorIyBDT05GSUdfQ1JZUFRPX0ZDUllQVCBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0tIQVpBRD1tCisjIENPTkZJR19DUllQVE9fU0FMU0EyMCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0VFRCBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX1NFUlBFTlQ9bQorQ09ORklHX0NSWVBUT19URUE9bQorQ09ORklHX0NSWVBUT19UV09GSVNIPW0KK0NPTkZJR19DUllQVE9fVFdPRklTSF9DT01NT049bQorCisjCisjIENvbXByZXNzaW9uCisjCitDT05GSUdfQ1JZUFRPX0RFRkxBVEU9bQorIyBDT05GSUdfQ1JZUFRPX0xaTyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fSFcgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0NMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJUlRVQUxJWkFUSU9OIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzg2eHgvbXBjODYxMF9ocGNkX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzg2eHgvbXBjODYxMF9ocGNkX2RlZmNvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOThjNmVlCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODZ4eC9tcGM4NjEwX2hwY2RfZGVmY29uZmlnCkBAIC0wLDAgKzEsMTQ5NyBAQAorIworIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI3LXJjNAorIyBUaHUgQXVnIDIxIDAwOjUyOjEwIDIwMDgKKyMKKyMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKKworIworIyBQcm9jZXNzb3Igc3VwcG9ydAorIworQ09ORklHXzZ4eD15CisjIENPTkZJR19QUENfODV4eCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfOHh4IGlzIG5vdCBzZXQKKyMgQ09ORklHXzQweCBpcyBub3Qgc2V0CisjIENPTkZJR180NHggaXMgbm90IHNldAorIyBDT05GSUdfRTIwMCBpcyBub3Qgc2V0CitDT05GSUdfUFBDX0ZQVT15CitDT05GSUdfQUxUSVZFQz15CitDT05GSUdfUFBDX1NURF9NTVU9eQorQ09ORklHX1BQQ19TVERfTU1VXzMyPXkKKyMgQ09ORklHX1BQQ19NTV9TTElDRVMgaXMgbm90IHNldAorIyBDT05GSUdfU01QIGlzIG5vdCBzZXQKK0NPTkZJR19QUEMzMj15CitDT05GSUdfV09SRF9TSVpFPTMyCitDT05GSUdfUFBDX01FUkdFPXkKK0NPTkZJR19NTVU9eQorQ09ORklHX0dFTkVSSUNfQ01PU19VUERBVEU9eQorQ09ORklHX0dFTkVSSUNfVElNRT15CitDT05GSUdfR0VORVJJQ19USU1FX1ZTWVNDQUxMPXkKK0NPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKK0NPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKKyMgQ09ORklHX0hBVkVfU0VUVVBfUEVSX0NQVV9BUkVBIGlzIG5vdCBzZXQKK0NPTkZJR19JUlFfUEVSX0NQVT15CitDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKK0NPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15CitDT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKK0NPTkZJR19SV1NFTV9YQ0hHQUREX0FMR09SSVRITT15CitDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyPXkKK0NPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQorQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKK0NPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQ9eQorIyBDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUyBpcyBub3Qgc2V0CitDT05GSUdfUFBDPXkKK0NPTkZJR19FQVJMWV9QUklOVEs9eQorQ09ORklHX0dFTkVSSUNfTlZSQU09eQorQ09ORklHX1NDSEVEX05PX05PX09NSVRfRlJBTUVfUE9JTlRFUj15CitDT05GSUdfQVJDSF9NQVlfSEFWRV9QQ19GREM9eQorQ09ORklHX1BQQ19PRj15CitDT05GSUdfT0Y9eQorQ09ORklHX1BQQ19VREJHXzE2NTUwPXkKKyMgQ09ORklHX0dFTkVSSUNfVEJTWU5DIGlzIG5vdCBzZXQKK0NPTkZJR19BVURJVF9BUkNIPXkKK0NPTkZJR19HRU5FUklDX0JVRz15CitDT05GSUdfREVGQVVMVF9VSU1BR0U9eQorQ09ORklHX0hJQkVSTkFURV8zMj15CitDT05GSUdfQVJDSF9ISUJFUk5BVElPTl9QT1NTSUJMRT15CisjIENPTkZJR19QUENfRENSX05BVElWRSBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfRENSX01NSU8gaXMgbm90IHNldAorQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKKworIworIyBHZW5lcmFsIHNldHVwCisjCitDT05GSUdfRVhQRVJJTUVOVEFMPXkKK0NPTkZJR19CUk9LRU5fT05fU01QPXkKK0NPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKK0NPTkZJR19MT0NBTFZFUlNJT049IiIKK0NPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15CisjIENPTkZJR19TV0FQIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNWSVBDPXkKK0NPTkZJR19TWVNWSVBDX1NZU0NUTD15CisjIENPTkZJR19QT1NJWF9NUVVFVUUgaXMgbm90IHNldAorIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0CisjIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAorQ09ORklHX0lLQ09ORklHPXkKK0NPTkZJR19JS0NPTkZJR19QUk9DPXkKK0NPTkZJR19MT0dfQlVGX1NISUZUPTE0CisjIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKK0NPTkZJR19HUk9VUF9TQ0hFRD15CisjIENPTkZJR19GQUlSX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKK0NPTkZJR19VU0VSX1NDSEVEPXkKKyMgQ09ORklHX0NHUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CitDT05GSUdfU1lTRlNfREVQUkVDQVRFRD15CitDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMj15CisjIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0CisjIENPTkZJR19OQU1FU1BBQ0VTIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0lOSVRSRD15CitDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgorIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAorQ09ORklHX1NZU0NUTD15CitDT05GSUdfRU1CRURERUQ9eQorQ09ORklHX1NZU0NUTF9TWVNDQUxMPXkKK0NPTkZJR19LQUxMU1lNUz15CisjIENPTkZJR19LQUxMU1lNU19BTEwgaXMgbm90IHNldAorQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1M9eQorQ09ORklHX0hPVFBMVUc9eQorQ09ORklHX1BSSU5USz15CitDT05GSUdfQlVHPXkKKyMgQ09ORklHX0VMRl9DT1JFIGlzIG5vdCBzZXQKK0NPTkZJR19QQ1NQS1JfUExBVEZPUk09eQorQ09ORklHX0NPTVBBVF9CUks9eQorQ09ORklHX0JBU0VfRlVMTD15CitDT05GSUdfRlVURVg9eQorQ09ORklHX0FOT05fSU5PREVTPXkKK0NPTkZJR19FUE9MTD15CitDT05GSUdfU0lHTkFMRkQ9eQorQ09ORklHX1RJTUVSRkQ9eQorQ09ORklHX0VWRU5URkQ9eQorQ09ORklHX1NITUVNPXkKK0NPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CitDT05GSUdfU0xVQl9ERUJVRz15CisjIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKK0NPTkZJR19TTFVCPXkKKyMgQ09ORklHX1NMT0IgaXMgbm90IHNldAorIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfT1BST0ZJTEU9eQorIyBDT05GSUdfS1BST0JFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTUz15CitDT05GSUdfSEFWRV9JT1JFTUFQX1BST1Q9eQorQ09ORklHX0hBVkVfS1BST0JFUz15CitDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKK0NPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKKyMgQ09ORklHX0hBVkVfRE1BX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTRV9HRU5FUklDX1NNUF9IRUxQRVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBVkVfQ0xLIGlzIG5vdCBzZXQKK0NPTkZJR19QUk9DX1BBR0VfTU9OSVRPUj15CisjIENPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UIGlzIG5vdCBzZXQKK0NPTkZJR19TTEFCSU5GTz15CitDT05GSUdfUlRfTVVURVhFUz15CisjIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKK0NPTkZJR19CQVNFX1NNQUxMPTAKK0NPTkZJR19NT0RVTEVTPXkKKyMgQ09ORklHX01PRFVMRV9GT1JDRV9MT0FEIGlzIG5vdCBzZXQKK0NPTkZJR19NT0RVTEVfVU5MT0FEPXkKKyMgQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQgaXMgbm90IHNldAorIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAorIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKK0NPTkZJR19LTU9EPXkKK0NPTkZJR19CTE9DSz15CisjIENPTkZJR19MQkQgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19MU0YgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAorCisjCisjIElPIFNjaGVkdWxlcnMKKyMKK0NPTkZJR19JT1NDSEVEX05PT1A9eQorIyBDT05GSUdfSU9TQ0hFRF9BUyBpcyBub3Qgc2V0CitDT05GSUdfSU9TQ0hFRF9ERUFETElORT15CisjIENPTkZJR19JT1NDSEVEX0NGUSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX0FTIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX0RFQURMSU5FPXkKKyMgQ09ORklHX0RFRkFVTFRfQ0ZRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJkZWFkbGluZSIKK0NPTkZJR19DTEFTU0lDX1JDVT15CisKKyMKKyMgUGxhdGZvcm0gc3VwcG9ydAorIworQ09ORklHX1BQQ19NVUxUSVBMQVRGT1JNPXkKK0NPTkZJR19DTEFTU0lDMzI9eQorIyBDT05GSUdfUFBDX0NIUlAgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX1BNQUMgaXMgbm90IHNldAorIyBDT05GSUdfTVBDNTEyMV9BRFMgaXMgbm90IHNldAorIyBDT05GSUdfTVBDNTEyMV9HRU5FUklDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19NUEM1Mnh4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19DRUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19DRUxMX05BVElWRSBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfODJ4eCBpcyBub3Qgc2V0CisjIENPTkZJR19QUTJBRFMgaXMgbm90IHNldAorIyBDT05GSUdfUFBDXzgzeHggaXMgbm90IHNldAorQ09ORklHX1BQQ184Nnh4PXkKKyMgQ09ORklHX01QQzg2NDFfSFBDTiBpcyBub3Qgc2V0CisjIENPTkZJR19TQkM4NjQxRCBpcyBub3Qgc2V0CitDT05GSUdfTVBDODYxMF9IUENEPXkKK0NPTkZJR19NUEM4NjEwPXkKKyMgQ09ORklHX0VNQkVEREVENnh4IGlzIG5vdCBzZXQKK0NPTkZJR19QUENfTkFUSVZFPXkKKyMgQ09ORklHX1VEQkdfUlRBU19DT05TT0xFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQSUMgaXMgbm90IHNldAorQ09ORklHX01QSUM9eQorIyBDT05GSUdfTVBJQ19XRUlSRCBpcyBub3Qgc2V0CitDT05GSUdfUFBDX0k4MjU5PXkKK0NPTkZJR19QUENfUlRBUz15CisjIENPTkZJR19SVEFTX0VSUk9SX0xPR0dJTkcgaXMgbm90IHNldAorQ09ORklHX1JUQVNfUFJPQz15CisjIENPTkZJR19NTUlPX05WUkFNIGlzIG5vdCBzZXQKK0NPTkZJR19QUENfTVBDMTA2PXkKKyMgQ09ORklHX1BQQ185NzBfTkFQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19JTkRJUkVDVF9JTyBpcyBub3Qgc2V0CisjIENPTkZJR19HRU5FUklDX0lPTUFQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9GUkVRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQzYwMV9TWU5DX0ZJWCBpcyBub3Qgc2V0CisjIENPTkZJR19UQVUgaXMgbm90IHNldAorQ09ORklHX0ZTTF9VTEkxNTc1PXkKKworIworIyBLZXJuZWwgb3B0aW9ucworIworQ09ORklHX0hJR0hNRU09eQorQ09ORklHX1RJQ0tfT05FU0hPVD15CitDT05GSUdfTk9fSFo9eQorQ09ORklHX0hJR0hfUkVTX1RJTUVSUz15CitDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UU19CVUlMRD15CisjIENPTkZJR19IWl8xMDAgaXMgbm90IHNldAorIyBDT05GSUdfSFpfMjUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0haXzMwMCBpcyBub3Qgc2V0CitDT05GSUdfSFpfMTAwMD15CitDT05GSUdfSFo9MTAwMAorQ09ORklHX1NDSEVEX0hSVElDSz15CitDT05GSUdfUFJFRU1QVF9OT05FPXkKKyMgQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldAorQ09ORklHX0JJTkZNVF9FTEY9eQorIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAorIyBDT05GSUdfSU9NTVVfSEVMUEVSIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVRz15CitDT05GSUdfQVJDSF9IQVNfV0FMS19NRU1PUlk9eQorQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RSRU1PVkU9eQorIyBDT05GSUdfS0VYRUMgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQorQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKK0NPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKK0NPTkZJR19GTEFUTUVNX01BTlVBTD15CisjIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQQVJTRU1FTV9NQU5VQUwgaXMgbm90IHNldAorQ09ORklHX0ZMQVRNRU09eQorQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKKyMgQ09ORklHX1NQQVJTRU1FTV9TVEFUSUMgaXMgbm90IHNldAorIyBDT05GSUdfU1BBUlNFTUVNX1ZNRU1NQVBfRU5BQkxFIGlzIG5vdCBzZXQKK0NPTkZJR19QQUdFRkxBR1NfRVhURU5ERUQ9eQorQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKK0NPTkZJR19NSUdSQVRJT049eQorIyBDT05GSUdfUkVTT1VSQ0VTXzY0QklUIGlzIG5vdCBzZXQKK0NPTkZJR19aT05FX0RNQV9GTEFHPTEKK0NPTkZJR19CT1VOQ0U9eQorQ09ORklHX1ZJUlRfVE9fQlVTPXkKK0NPTkZJR19GT1JDRV9NQVhfWk9ORU9SREVSPTEyCitDT05GSUdfUFJPQ19ERVZJQ0VUUkVFPXkKKyMgQ09ORklHX0NNRExJTkVfQk9PTCBpcyBub3Qgc2V0CitDT05GSUdfRVhUUkFfVEFSR0VUUz0iIgorIyBDT05GSUdfUE0gaXMgbm90IHNldAorIyBDT05GSUdfU0VDQ09NUCBpcyBub3Qgc2V0CitDT05GSUdfSVNBX0RNQV9BUEk9eQorCisjCisjIEJ1cyBvcHRpb25zCisjCisjIENPTkZJR19JU0EgaXMgbm90IHNldAorQ09ORklHX1pPTkVfRE1BPXkKK0NPTkZJR19HRU5FUklDX0lTQV9ETUE9eQorQ09ORklHX1BQQ19JTkRJUkVDVF9QQ0k9eQorQ09ORklHX0ZTTF9TT0M9eQorQ09ORklHX0ZTTF9QQ0k9eQorQ09ORklHX1BQQ19QQ0lfQ0hPSUNFPXkKK0NPTkZJR19QQ0k9eQorQ09ORklHX1BDSV9ET01BSU5TPXkKK0NPTkZJR19QQ0lfU1lTQ0FMTD15CitDT05GSUdfUENJRVBPUlRCVVM9eQorQ09ORklHX1BDSUVBRVI9eQorIyBDT05GSUdfUENJRUFTUE0gaXMgbm90IHNldAorQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJPXkKKyMgQ09ORklHX1BDSV9NU0kgaXMgbm90IHNldAorQ09ORklHX1BDSV9MRUdBQ1k9eQorQ09ORklHX1BDSV9ERUJVRz15CisjIENPTkZJR19QQ0NBUkQgaXMgbm90IHNldAorIyBDT05GSUdfSE9UUExVR19QQ0kgaXMgbm90IHNldAorIyBDT05GSUdfSEFTX1JBUElESU8gaXMgbm90IHNldAorCisjCisjIEFkdmFuY2VkIHNldHVwCisjCisjIENPTkZJR19BRFZBTkNFRF9PUFRJT05TIGlzIG5vdCBzZXQKKworIworIyBEZWZhdWx0IHNldHRpbmdzIGZvciBhZHZhbmNlZCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIHVzZWQKKyMKK0NPTkZJR19MT1dNRU1fU0laRT0weDMwMDAwMDAwCitDT05GSUdfUEFHRV9PRkZTRVQ9MHhjMDAwMDAwMAorQ09ORklHX0tFUk5FTF9TVEFSVD0weGMwMDAwMDAwCitDT05GSUdfUEhZU0lDQUxfU1RBUlQ9MHgwMDAwMDAwMAorQ09ORklHX1RBU0tfU0laRT0weGMwMDAwMDAwCitDT05GSUdfTkVUPXkKKworIworIyBOZXR3b3JraW5nIG9wdGlvbnMKKyMKK0NPTkZJR19QQUNLRVQ9eQorIyBDT05GSUdfUEFDS0VUX01NQVAgaXMgbm90IHNldAorQ09ORklHX1VOSVg9eQorQ09ORklHX1hGUk09eQorQ09ORklHX1hGUk1fVVNFUj15CisjIENPTkZJR19YRlJNX1NVQl9QT0xJQ1kgaXMgbm90IHNldAorIyBDT05GSUdfWEZSTV9NSUdSQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGUk1fU1RBVElTVElDUyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfS0VZIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUPXkKKyMgQ09ORklHX0lQX01VTFRJQ0FTVCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAorQ09ORklHX0lQX0ZJQl9IQVNIPXkKK0NPTkZJR19JUF9QTlA9eQorQ09ORklHX0lQX1BOUF9ESENQPXkKK0NPTkZJR19JUF9QTlBfQk9PVFA9eQorQ09ORklHX0lQX1BOUF9SQVJQPXkKKyMgQ09ORklHX05FVF9JUElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9JUEdSRSBpcyBub3Qgc2V0CisjIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZTl9DT09LSUVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0CitDT05GSUdfSU5FVF9UVU5ORUw9eQorQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVD15CitDT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMPXkKK0NPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUPXkKKyMgQ09ORklHX0lORVRfTFJPIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUX0RJQUc9eQorQ09ORklHX0lORVRfVENQX0RJQUc9eQorIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAorQ09ORklHX1RDUF9DT05HX0NVQklDPXkKK0NPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKKyMgQ09ORklHX1RDUF9NRDVTSUcgaXMgbm90IHNldAorQ09ORklHX0lQVjY9eQorIyBDT05GSUdfSVBWNl9QUklWQUNZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQVjZfUk9VVEVSX1BSRUYgaXMgbm90IHNldAorIyBDT05GSUdfSVBWNl9PUFRJTUlTVElDX0RBRCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUNl9BSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUNl9FU1AgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVDZfSVBDT01QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQVjZfTUlQNiBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUNl9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUNl9UVU5ORUwgaXMgbm90IHNldAorQ09ORklHX0lORVQ2X1hGUk1fTU9ERV9UUkFOU1BPUlQ9eQorQ09ORklHX0lORVQ2X1hGUk1fTU9ERV9UVU5ORUw9eQorQ09ORklHX0lORVQ2X1hGUk1fTU9ERV9CRUVUPXkKKyMgQ09ORklHX0lORVQ2X1hGUk1fTU9ERV9ST1VURU9QVElNSVpBVElPTiBpcyBub3Qgc2V0CitDT05GSUdfSVBWNl9TSVQ9eQorQ09ORklHX0lQVjZfTkRJU0NfTk9ERVRZUEU9eQorIyBDT05GSUdfSVBWNl9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSVBWNl9NVUxUSVBMRV9UQUJMRVMgaXMgbm90IHNldAorIyBDT05GSUdfSVBWNl9NUk9VVEUgaXMgbm90IHNldAorIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CisjIENPTkZJR19BVE0gaXMgbm90IHNldAorIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAorIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xMQzIgaXMgbm90IHNldAorIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1gyNSBpcyBub3Qgc2V0CisjIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0CisKKyMKKyMgTmV0d29yayB0ZXN0aW5nCisjCisjIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBTiBpcyBub3Qgc2V0CisjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKKworIworIyBXaXJlbGVzcworIworIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQzgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lFRUU4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKKworIworIyBEZXZpY2UgRHJpdmVycworIworCisjCisjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKKyMKK0NPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCitDT05GSUdfU1RBTkRBTE9ORT15CitDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CitDT05GSUdfRldfTE9BREVSPXkKK0NPTkZJR19GSVJNV0FSRV9JTl9LRVJORUw9eQorQ09ORklHX0VYVFJBX0ZJUk1XQVJFPSIiCisjIENPTkZJR19ERUJVR19EUklWRVIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfREVWUkVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CitDT05GSUdfTVREPXkKKyMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ09OQ0FUIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfUEFSVElUSU9OUz15CisjIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NNRExJTkVfUEFSVFM9eQorIyBDT05GSUdfTVREX09GX1BBUlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9BUjdfUEFSVFMgaXMgbm90IHNldAorCisjCisjIFVzZXIgTW9kdWxlcyBBbmQgVHJhbnNsYXRpb24gTGF5ZXJzCisjCitDT05GSUdfTVREX0NIQVI9eQorQ09ORklHX01URF9CTEtERVZTPXkKK0NPTkZJR19NVERfQkxPQ0s9eQorIyBDT05GSUdfRlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GVEwgaXMgbm90IHNldAorIyBDT05GSUdfSU5GVEwgaXMgbm90IHNldAorIyBDT05GSUdfUkZEX0ZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19TU0ZEQyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfT09QUyBpcyBub3Qgc2V0CisKKyMKKyMgUkFNL1JPTS9GbGFzaCBjaGlwIGRyaXZlcnMKKyMKK0NPTkZJR19NVERfQ0ZJPXkKKyMgQ09ORklHX01URF9KRURFQ1BST0JFIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfR0VOX1BST0JFPXkKKyMgQ09ORklHX01URF9DRklfQURWX09QVElPTlMgaXMgbm90IHNldAorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xPXkKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMj15CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzQ9eQorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzggaXMgbm90IHNldAorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE2IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8zMiBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NGSV9JMT15CitDT05GSUdfTVREX0NGSV9JMj15CisjIENPTkZJR19NVERfQ0ZJX0k0IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DRklfSTggaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NGSV9JTlRFTEVYVCBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NGSV9BTURTVEQ9eQorIyBDT05GSUdfTVREX0NGSV9TVEFBIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX1VUSUw9eQorIyBDT05GSUdfTVREX1JBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUk9NIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9BQlNFTlQgaXMgbm90IHNldAorCisjCisjIE1hcHBpbmcgZHJpdmVycyBmb3IgY2hpcCBhY2Nlc3MKKyMKKyMgQ09ORklHX01URF9DT01QTEVYX01BUFBJTkdTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9QSFlTTUFQIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfUEhZU01BUF9PRj15CisjIENPTkZJR19NVERfSU5URUxfVlJfTk9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9QTEFUUkFNIGlzIG5vdCBzZXQKKworIworIyBTZWxmLWNvbnRhaW5lZCBNVEQgZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01URF9QTUM1NTEgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1NMUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9QSFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTVREUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9CTE9DSzJNVEQgaXMgbm90IHNldAorCisjCisjIERpc2stT24tQ2hpcCBEZXZpY2UgRHJpdmVycworIworIyBDT05GSUdfTVREX0RPQzIwMDAgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0RPQzIwMDEgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0RPQzIwMDFQTFVTIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfTkFORD15CisjIENPTkZJR19NVERfTkFORF9WRVJJRllfV1JJVEUgaXMgbm90IHNldAorIyBDT05GSUdfTVREX05BTkRfRUNDX1NNQyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTkFORF9NVVNFVU1fSURTIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfTkFORF9JRFM9eQorIyBDT05GSUdfTVREX05BTkRfRElTS09OQ0hJUCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTkFORF9DQUZFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9OQU5EX05BTkRTSU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX05BTkRfUExBVEZPUk0gaXMgbm90IHNldAorQ09ORklHX01URF9OQU5EX0ZTTF9FTEJDPXkKKyMgQ09ORklHX01URF9PTkVOQU5EIGlzIG5vdCBzZXQKKworIworIyBVQkkgLSBVbnNvcnRlZCBibG9jayBpbWFnZXMKKyMKKyMgQ09ORklHX01URF9VQkkgaXMgbm90IHNldAorQ09ORklHX09GX0RFVklDRT15CitDT05GSUdfT0ZfSTJDPXkKKyMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVY9eQorIyBDT05GSUdfQkxLX0RFVl9GRCBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNfRkxPUFBZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19DUFFfREEgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0NQUV9DSVNTX0RBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfREFDOTYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfVU1FTSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfTE9PUD15CisjIENPTkZJR19CTEtfREVWX0NSWVBUT0xPT1AgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9TWDggaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfUkFNPXkKK0NPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgorQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9MTMxMDcyCisjIENPTkZJR19CTEtfREVWX1hJUCBpcyBub3Qgc2V0CisjIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0hEIGlzIG5vdCBzZXQKK0NPTkZJR19NSVNDX0RFVklDRVM9eQorIyBDT05GSUdfUEhBTlRPTSBpcyBub3Qgc2V0CisjIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAorIyBDT05GSUdfU0dJX0lPQzQgaXMgbm90IHNldAorIyBDT05GSUdfVElGTV9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VOQ0xPU1VSRV9TRVJWSUNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19IUF9JTE8gaXMgbm90IHNldAorQ09ORklHX0hBVkVfSURFPXkKK0NPTkZJR19JREU9eQorIyBDT05GSUdfQkxLX0RFVl9JREUgaXMgbm90IHNldAorCisjCisjIFNDU0kgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAorQ09ORklHX1NDU0k9eQorQ09ORklHX1NDU0lfRE1BPXkKK0NPTkZJR19TQ1NJX1RHVD15CisjIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAorQ09ORklHX1NDU0lfUFJPQ19GUz15CisKKyMKKyMgU0NTSSBzdXBwb3J0IHR5cGUgKGRpc2ssIHRhcGUsIENELVJPTSkKKyMKK0NPTkZJR19CTEtfREVWX1NEPXkKKyMgQ09ORklHX0NIUl9ERVZfU1QgaXMgbm90IHNldAorIyBDT05GSUdfQ0hSX0RFVl9PU1NUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfU1IgaXMgbm90IHNldAorQ09ORklHX0NIUl9ERVZfU0c9eQorIyBDT05GSUdfQ0hSX0RFVl9TQ0ggaXMgbm90IHNldAorCisjCisjIFNvbWUgU0NTSSBkZXZpY2VzIChlLmcuIENEIGp1a2Vib3gpIHN1cHBvcnQgbXVsdGlwbGUgTFVOcworIworIyBDT05GSUdfU0NTSV9NVUxUSV9MVU4gaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9DT05TVEFOVFMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9MT0dHSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU0NBTl9BU1lOQyBpcyBub3Qgc2V0CitDT05GSUdfU0NTSV9XQUlUX1NDQU49bQorCisjCisjIFNDU0kgVHJhbnNwb3J0cworIworIyBDT05GSUdfU0NTSV9TUElfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9GQ19BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0lTQ1NJX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU0FTX0xJQlNBUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NSUF9BVFRSUyBpcyBub3Qgc2V0CitDT05GSUdfU0NTSV9MT1dMRVZFTD15CisjIENPTkZJR19JU0NTSV9UQ1AgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl8zV19YWFhYX1JBSUQgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV8zV185WFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQUNBUkQgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BQUNSQUlEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQUlDN1hYWCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0FJQzdYWFhfT0xEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQUlDNzlYWCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0FJQzk0WFggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9EUFRfSTJPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQURWQU5TWVMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BUkNNU1IgaXMgbm90IHNldAorIyBDT05GSUdfTUVHQVJBSURfTkVXR0VOIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FR0FSQUlEX0xFR0FDWSBpcyBub3Qgc2V0CisjIENPTkZJR19NRUdBUkFJRF9TQVMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9IUFRJT1AgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9CVVNMT0dJQyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RNWDMxOTFEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfRUFUQSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0ZVVFVSRV9ET01BSU4gaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9HRFRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfSVBTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfSU5JVElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfSU5JQTEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX01WU0FTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU1RFWCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NZTTUzQzhYWF8yIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfSVBSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfUUxPR0lDXzEyODAgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9RTEFfRkMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9RTEFfSVNDU0kgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9MUEZDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfREMzOTV4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfREMzOTBUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTlNQMzIgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX01FU0ggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9NQUM1M0M5NCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NSUCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RIIGlzIG5vdCBzZXQKK0NPTkZJR19BVEE9eQorIyBDT05GSUdfQVRBX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKK0NPTkZJR19TQVRBX1BNUD15CitDT05GSUdfU0FUQV9BSENJPXkKKyMgQ09ORklHX1NBVEFfU0lMMjQgaXMgbm90IHNldAorIyBDT05GSUdfU0FUQV9GU0wgaXMgbm90IHNldAorQ09ORklHX0FUQV9TRkY9eQorIyBDT05GSUdfU0FUQV9TVlcgaXMgbm90IHNldAorIyBDT05GSUdfQVRBX1BJSVggaXMgbm90IHNldAorIyBDT05GSUdfU0FUQV9NViBpcyBub3Qgc2V0CisjIENPTkZJR19TQVRBX05WIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BEQ19BRE1BIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBVEFfUVNUT1IgaXMgbm90IHNldAorIyBDT05GSUdfU0FUQV9QUk9NSVNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBVEFfU1g0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBVEFfU0lMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBVEFfU0lTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBVEFfVUxJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBVEFfVklBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBVEFfVklURVNTRSBpcyBub3Qgc2V0CisjIENPTkZJR19TQVRBX0lOSUMxNjJYIGlzIG5vdCBzZXQKK0NPTkZJR19QQVRBX0FMST15CisjIENPTkZJR19QQVRBX0FNRCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0FSVE9QIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfQVRJSVhQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfQ01ENjQwX1BDSSBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0NNRDY0WCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0NTNTUyMCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0NTNTUzMCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0NZUFJFU1MgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9FRkFSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQV9HRU5FUklDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfSFBUMzY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfSFBUMzdYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfSFBUM1gyTiBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0hQVDNYMyBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0lUODIxWCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0lUODIxMyBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0pNSUNST04gaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9UUklGTEVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfTUFSVkVMTCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX01QSUlYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfT0xEUElJWCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX05FVENFTEwgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9OSU5KQTMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfTlM4NzQxMCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX05TODc0MTUgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9PUFRJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfT1BUSURNQSBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1BEQ19PTEQgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9SQURJU1lTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfUloxMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfU0MxMjAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfU0VSVkVSV09SS1MgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9QREMyMDI3WCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1NJTDY4MCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1NJUyBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1ZJQSBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1dJTkJPTkQgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9QTEFURk9STSBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1NDSCBpcyBub3Qgc2V0CisjIENPTkZJR19NRCBpcyBub3Qgc2V0CisjIENPTkZJR19GVVNJT04gaXMgbm90IHNldAorCisjCisjIElFRUUgMTM5NCAoRmlyZVdpcmUpIHN1cHBvcnQKKyMKKworIworIyBFbmFibGUgb25seSBvbmUgb2YgdGhlIHR3byBzdGFja3MsIHVubGVzcyB5b3Uga25vdyB3aGF0IHlvdSBhcmUgZG9pbmcKKyMKKyMgQ09ORklHX0ZJUkVXSVJFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lFRUUxMzk0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyTyBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNJTlRPU0hfRFJJVkVSUyBpcyBub3Qgc2V0CitDT05GSUdfTkVUREVWSUNFUz15CitDT05GSUdfRFVNTVk9eQorIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNWTEFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0CisjIENPTkZJR19UVU4gaXMgbm90IHNldAorIyBDT05GSUdfVkVUSCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNORVQgaXMgbm90IHNldAorIyBDT05GSUdfUEhZTElCIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRfRVRIRVJORVQ9eQorIyBDT05GSUdfTUlJIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0UgaXMgbm90IHNldAorIyBDT05GSUdfQk1BQyBpcyBub3Qgc2V0CisjIENPTkZJR19IQVBQWU1FQUwgaXMgbm90IHNldAorIyBDT05GSUdfU1VOR0VNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBU1NJTkkgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1ZFTkRPUl8zQ09NIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRfVFVMSVA9eQorIyBDT05GSUdfREUyMTA0WCBpcyBub3Qgc2V0CisjIENPTkZJR19UVUxJUCBpcyBub3Qgc2V0CisjIENPTkZJR19ERTRYNSBpcyBub3Qgc2V0CisjIENPTkZJR19XSU5CT05EXzg0MCBpcyBub3Qgc2V0CisjIENPTkZJR19ETTkxMDIgaXMgbm90IHNldAorQ09ORklHX1VMSTUyNlg9eQorIyBDT05GSUdfSFAxMDAgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1pNSUkgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1JHTUlJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19UQUggaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX0VNQUM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9QQ0kgaXMgbm90IHNldAorIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVERFVl8xMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19UUiBpcyBub3Qgc2V0CisKKyMKKyMgV2lyZWxlc3MgTEFOCisjCisjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfSVdMV0lGSV9MRURTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBTiBpcyBub3Qgc2V0CisjIENPTkZJR19GRERJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJUFBJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQUCBpcyBub3Qgc2V0CisjIENPTkZJR19TTElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9GQyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0CisjIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BIT05FIGlzIG5vdCBzZXQKKworIworIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAorIworQ09ORklHX0lOUFVUPXkKKyMgQ09ORklHX0lOUFVUX0ZGX01FTUxFU1MgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfUE9MTERFViBpcyBub3Qgc2V0CisKKyMKKyMgVXNlcmxhbmQgaW50ZXJmYWNlcworIworIyBDT05GSUdfSU5QVVRfTU9VU0VERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfSk9ZREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0VWREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKKworIworIyBJbnB1dCBEZXZpY2UgRHJpdmVycworIworIyBDT05GSUdfSU5QVVRfS0VZQk9BUkQgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfTU9VU0UgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfVEFCTEVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX01JU0MgaXMgbm90IHNldAorCisjCisjIEhhcmR3YXJlIEkvTyBwb3J0cworIworQ09ORklHX1NFUklPPXkKK0NPTkZJR19TRVJJT19JODA0Mj15CitDT05GSUdfU0VSSU9fU0VSUE9SVD15CisjIENPTkZJR19TRVJJT19QQ0lQUzIgaXMgbm90IHNldAorQ09ORklHX1NFUklPX0xJQlBTMj15CisjIENPTkZJR19TRVJJT19SQVcgaXMgbm90IHNldAorIyBDT05GSUdfU0VSSU9fWElMSU5YX1hQU19QUzIgaXMgbm90IHNldAorIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAorCisjCisjIENoYXJhY3RlciBkZXZpY2VzCisjCitDT05GSUdfVlQ9eQorQ09ORklHX0NPTlNPTEVfVFJBTlNMQVRJT05TPXkKK0NPTkZJR19WVF9DT05TT0xFPXkKK0NPTkZJR19IV19DT05TT0xFPXkKKyMgQ09ORklHX1ZUX0hXX0NPTlNPTEVfQklORElORyBpcyBub3Qgc2V0CitDT05GSUdfREVWS01FTT15CisjIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAorIyBDT05GSUdfTk9aT01JIGlzIG5vdCBzZXQKKworIworIyBTZXJpYWwgZHJpdmVycworIworQ09ORklHX1NFUklBTF84MjUwPXkKK0NPTkZJR19TRVJJQUxfODI1MF9DT05TT0xFPXkKK0NPTkZJR19TRVJJQUxfODI1MF9QQ0k9eQorQ09ORklHX1NFUklBTF84MjUwX05SX1VBUlRTPTIKK0NPTkZJR19TRVJJQUxfODI1MF9SVU5USU1FX1VBUlRTPTIKK0NPTkZJR19TRVJJQUxfODI1MF9FWFRFTkRFRD15CitDT05GSUdfU0VSSUFMXzgyNTBfTUFOWV9QT1JUUz15CitDT05GSUdfU0VSSUFMXzgyNTBfU0hBUkVfSVJRPXkKK0NPTkZJR19TRVJJQUxfODI1MF9ERVRFQ1RfSVJRPXkKK0NPTkZJR19TRVJJQUxfODI1MF9SU0E9eQorCisjCisjIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKKyMKKyMgQ09ORklHX1NFUklBTF9VQVJUTElURSBpcyBub3Qgc2V0CitDT05GSUdfU0VSSUFMX0NPUkU9eQorQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQorIyBDT05GSUdfU0VSSUFMX1BNQUNaSUxPRyBpcyBub3Qgc2V0CisjIENPTkZJR19TRVJJQUxfSlNNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFUklBTF9PRl9QTEFURk9STSBpcyBub3Qgc2V0CitDT05GSUdfVU5JWDk4X1BUWVM9eQorIyBDT05GSUdfTEVHQUNZX1BUWVMgaXMgbm90IHNldAorIyBDT05GSUdfQlJJUV9QQU5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19IVkNfUlRBUyBpcyBub3Qgc2V0CisjIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAorIyBDT05GSUdfSFdfUkFORE9NIGlzIG5vdCBzZXQKKyMgQ09ORklHX05WUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0FQUExJQ09NIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAorIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CitDT05GSUdfREVWUE9SVD15CitDT05GSUdfSTJDPXkKK0NPTkZJR19JMkNfQk9BUkRJTkZPPXkKKyMgQ09ORklHX0kyQ19DSEFSREVWIGlzIG5vdCBzZXQKK0NPTkZJR19JMkNfSEVMUEVSX0FVVE89eQorCisjCisjIEkyQyBIYXJkd2FyZSBCdXMgc3VwcG9ydAorIworCisjCisjIFBDIFNNQnVzIGhvc3QgY29udHJvbGxlciBkcml2ZXJzCisjCisjIENPTkZJR19JMkNfQUxJMTUzNSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfQUxJMTU2MyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfQUxJMTVYMyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfQU1ENzU2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19BTUQ4MTExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19JODAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19JU0NIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19QSUlYNCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfTkZPUkNFMiBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU0lTNTU5NSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU0lTNjMwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TSVM5NlggaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1ZJQSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfVklBUFJPIGlzIG5vdCBzZXQKKworIworIyBNYWMgU01CdXMgaG9zdCBjb250cm9sbGVyIGRyaXZlcnMKKyMKKyMgQ09ORklHX0kyQ19IWURSQSBpcyBub3Qgc2V0CitDT05GSUdfSTJDX1BPV0VSTUFDPXkKKworIworIyBJMkMgc3lzdGVtIGJ1cyBkcml2ZXJzIChtb3N0bHkgZW1iZWRkZWQgLyBzeXN0ZW0tb24tY2hpcCkKKyMKK0NPTkZJR19JMkNfTVBDPXkKKyMgQ09ORklHX0kyQ19PQ09SRVMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NJTVRFQyBpcyBub3Qgc2V0CisKKyMKKyMgRXh0ZXJuYWwgSTJDL1NNQnVzIGFkYXB0ZXIgZHJpdmVycworIworIyBDT05GSUdfSTJDX1BBUlBPUlRfTElHSFQgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1RBT1NfRVZNIGlzIG5vdCBzZXQKKworIworIyBHcmFwaGljcyBhZGFwdGVyIEkyQy9EREMgY2hhbm5lbCBkcml2ZXJzCisjCisjIENPTkZJR19JMkNfVk9PRE9PMyBpcyBub3Qgc2V0CisKKyMKKyMgT3RoZXIgSTJDL1NNQnVzIGJ1cyBkcml2ZXJzCisjCisjIENPTkZJR19JMkNfUENBX1BMQVRGT1JNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TVFVCIGlzIG5vdCBzZXQKKworIworIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKKyMKKyMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0CisjIENPTkZJR19BVDI0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRUVQUk9NIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0Y4NTc1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDRjg1OTEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19NQVg2ODc1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQlVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19DSElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQSSBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9XQU5UX09QVElPTkFMX0dQSU9MSUI9eQorIyBDT05GSUdfR1BJT0xJQiBpcyBub3Qgc2V0CisjIENPTkZJR19XMSBpcyBub3Qgc2V0CisjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAorIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAorIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0CisjIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKKworIworIyBTb25pY3MgU2lsaWNvbiBCYWNrcGxhbmUKKyMKK0NPTkZJR19TU0JfUE9TU0lCTEU9eQorIyBDT05GSUdfU1NCIGlzIG5vdCBzZXQKKworIworIyBNdWx0aWZ1bmN0aW9uIGRldmljZSBkcml2ZXJzCisjCisjIENPTkZJR19NRkRfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAorIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CisKKyMKKyMgTXVsdGltZWRpYSBkZXZpY2VzCisjCisKKyMKKyMgTXVsdGltZWRpYSBjb3JlIHN1cHBvcnQKKyMKKyMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0CisjIENPTkZJR19EVkJfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19NRURJQSBpcyBub3Qgc2V0CisKKyMKKyMgTXVsdGltZWRpYSBkcml2ZXJzCisjCitDT05GSUdfREFCPXkKKworIworIyBHcmFwaGljcyBzdXBwb3J0CisjCisjIENPTkZJR19BR1AgaXMgbm90IHNldAorIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKK0NPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTD15CitDT05GSUdfRkI9eQorIyBDT05GSUdfRklSTVdBUkVfRURJRCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9EREMgaXMgbm90IHNldAorQ09ORklHX0ZCX0NGQl9GSUxMUkVDVD15CitDT05GSUdfRkJfQ0ZCX0NPUFlBUkVBPXkKK0NPTkZJR19GQl9DRkJfSU1BR0VCTElUPXkKKyMgQ09ORklHX0ZCX0NGQl9SRVZfUElYRUxTX0lOX0JZVEUgaXMgbm90IHNldAorIyBDT05GSUdfRkJfU1lTX0ZJTExSRUNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NZU19DT1BZQVJFQSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TWVNfSU1BR0VCTElUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0ZPUkVJR05fRU5ESUFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NZU19GT1BTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NWR0FMSUIgaXMgbm90IHNldAorIyBDT05GSUdfRkJfTUFDTU9ERVMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfQkFDS0xJR0hUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX01PREVfSEVMUEVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9USUxFQkxJVFRJTkcgaXMgbm90IHNldAorCisjCisjIEZyYW1lIGJ1ZmZlciBoYXJkd2FyZSBkcml2ZXJzCisjCisjIENPTkZJR19GQl9DSVJSVVMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfUE0yIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0NZQkVSMjAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9PRiBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9DT05UUk9MIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1BMQVRJTlVNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1ZBTEtZUklFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0NUNjU1NTAgaXMgbm90IHNldAorIyBDT05GSUdfRkJfQVNJTElBTlQgaXMgbm90IHNldAorIyBDT05GSUdfRkJfSU1TVFQgaXMgbm90IHNldAorIyBDT05GSUdfRkJfVkdBMTYgaXMgbm90IHNldAorIyBDT05GSUdfRkJfUzFEMTNYWFggaXMgbm90IHNldAorIyBDT05GSUdfRkJfTlZJRElBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1JJVkEgaXMgbm90IHNldAorIyBDT05GSUdfRkJfTUFUUk9YIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1JBREVPTiBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9BVFkxMjggaXMgbm90IHNldAorIyBDT05GSUdfRkJfQVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1MzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NBVkFHRSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TSVMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfTkVPTUFHSUMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfS1lSTyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl8zREZYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1ZPT0RPTzEgaXMgbm90IHNldAorIyBDT05GSUdfRkJfVlQ4NjIzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1RSSURFTlQgaXMgbm90IHNldAorIyBDT05GSUdfRkJfQVJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1BNMyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9DQVJNSU5FIGlzIG5vdCBzZXQKK0NPTkZJR19GQl9GU0xfRElVPXkKKyMgQ09ORklHX0ZCX0lCTV9HWFQ0NTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1ZJUlRVQUwgaXMgbm90IHNldAorIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKKworIworIyBEaXNwbGF5IGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19ESVNQTEFZX1NVUFBPUlQgaXMgbm90IHNldAorCisjCisjIENvbnNvbGUgZGlzcGxheSBkcml2ZXIgc3VwcG9ydAorIworQ09ORklHX1ZHQV9DT05TT0xFPXkKKyMgQ09ORklHX1ZHQUNPTl9TT0ZUX1NDUk9MTEJBQ0sgaXMgbm90IHNldAorQ09ORklHX0RVTU1ZX0NPTlNPTEU9eQorIyBDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRSBpcyBub3Qgc2V0CisjIENPTkZJR19MT0dPIGlzIG5vdCBzZXQKK0NPTkZJR19TT1VORD15CitDT05GSUdfU05EPXkKK0NPTkZJR19TTkRfVElNRVI9eQorQ09ORklHX1NORF9QQ009eQorIyBDT05GSUdfU05EX1NFUVVFTkNFUiBpcyBub3Qgc2V0CitDT05GSUdfU05EX09TU0VNVUw9eQorQ09ORklHX1NORF9NSVhFUl9PU1M9eQorQ09ORklHX1NORF9QQ01fT1NTPXkKK0NPTkZJR19TTkRfUENNX09TU19QTFVHSU5TPXkKKyMgQ09ORklHX1NORF9EWU5BTUlDX01JTk9SUyBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfU1VQUE9SVF9PTERfQVBJIGlzIG5vdCBzZXQKK0NPTkZJR19TTkRfVkVSQk9TRV9QUk9DRlM9eQorIyBDT05GSUdfU05EX1ZFUkJPU0VfUFJJTlRLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfU05EX0RSSVZFUlM9eQorIyBDT05GSUdfU05EX0RVTU1ZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9NVFBBViBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfU0VSSUFMX1UxNjU1MCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfTVBVNDAxIGlzIG5vdCBzZXQKK0NPTkZJR19TTkRfUENJPXkKKyMgQ09ORklHX1NORF9BRDE4ODkgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0FMUzMwMCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfQUxTNDAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfQUxJNTQ1MSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfQVRJSVhQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9BVElJWFBfTU9ERU0gaXMgbm90IHNldAorIyBDT05GSUdfU05EX0FVODgxMCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfQVU4ODIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9BVTg4MzAgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0FXMiBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfQVpUMzMyOCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfQlQ4N1ggaXMgbm90IHNldAorIyBDT05GSUdfU05EX0NBMDEwNiBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfQ01JUENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9PWFlHRU4gaXMgbm90IHNldAorIyBDT05GSUdfU05EX0NTNDI4MSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfQ1M0NlhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9DUzU1MzAgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0RBUkxBMjAgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0dJTkEyMCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfTEFZTEEyMCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfREFSTEEyNCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfR0lOQTI0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9MQVlMQTI0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9NT05BIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9NSUEgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0VDSE8zRyBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfSU5ESUdPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9JTkRJR09JTyBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfSU5ESUdPREogaXMgbm90IHNldAorIyBDT05GSUdfU05EX0VNVTEwSzEgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0VNVTEwSzFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9FTlMxMzcwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9FTlMxMzcxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9FUzE5MzggaXMgbm90IHNldAorIyBDT05GSUdfU05EX0VTMTk2OCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfRk04MDEgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0hEQV9JTlRFTCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfSERTUCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfSERTUE0gaXMgbm90IHNldAorIyBDT05GSUdfU05EX0hJRklFUiBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfSUNFMTcxMiBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfSUNFMTcyNCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfSU5URUw4WDAgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0lOVEVMOFgwTSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfS09SRzEyMTIgaXMgbm90IHNldAorIyBDT05GSUdfU05EX01BRVNUUk8zIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9NSVhBUlQgaXMgbm90IHNldAorIyBDT05GSUdfU05EX05NMjU2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9QQ1hIUiBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfUklQVElERSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfUk1FMzIgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1JNRTk2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9STUU5NjUyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9TT05JQ1ZJQkVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9UUklERU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9WSUE4MlhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9WSUE4MlhYX01PREVNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9WSVJUVU9TTyBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfVlgyMjIgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1lNRlBDSSBpcyBub3Qgc2V0CitDT05GSUdfU05EX1BQQz15CisjIENPTkZJR19TTkRfUE9XRVJNQUMgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0FPQSBpcyBub3Qgc2V0CitDT05GSUdfU05EX1NPQz15CitDT05GSUdfU05EX1NPQ19NUEM4NjEwPXkKK0NPTkZJR19TTkRfU09DX01QQzg2MTBfSFBDRD15CitDT05GSUdfU05EX1NPQ19DUzQyNzA9eQorQ09ORklHX1NORF9TT0NfQ1M0MjcwX1ZEMzNfRVJSQVRBPXkKKyMgQ09ORklHX1NPVU5EX1BSSU1FIGlzIG5vdCBzZXQKK0NPTkZJR19ISURfU1VQUE9SVD15CitDT05GSUdfSElEPXkKKyMgQ09ORklHX0hJRF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19ISURSQVcgaXMgbm90IHNldAorQ09ORklHX1VTQl9TVVBQT1JUPXkKK0NPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKK0NPTkZJR19VU0JfQVJDSF9IQVNfT0hDST15CitDT05GSUdfVVNCX0FSQ0hfSEFTX0VIQ0k9eQorIyBDT05GSUdfVVNCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PVEdfV0hJVEVMSVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PVEdfQkxBQ0tMSVNUX0hVQiBpcyBub3Qgc2V0CisKKyMKKyMgRW5hYmxlIEhvc3Qgb3IgR2FkZ2V0IHN1cHBvcnQgdG8gc2VlIEludmVudHJhIG9wdGlvbnMKKyMKKworIworIyBOT1RFOiBVU0JfU1RPUkFHRSBlbmFibGVzIFNDU0ksIGFuZCAnU0NTSSBkaXNrIHN1cHBvcnQnCisjCisjIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NQyBpcyBub3Qgc2V0CisjIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0CisjIENPTkZJR19BQ0NFU1NJQklMSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORklOSUJBTkQgaXMgbm90IHNldAorIyBDT05GSUdfRURBQyBpcyBub3Qgc2V0CitDT05GSUdfUlRDX0xJQj15CitDT05GSUdfUlRDX0NMQVNTPXkKK0NPTkZJR19SVENfSENUT1NZUz15CitDT05GSUdfUlRDX0hDVE9TWVNfREVWSUNFPSJydGMwIgorIyBDT05GSUdfUlRDX0RFQlVHIGlzIG5vdCBzZXQKKworIworIyBSVEMgaW50ZXJmYWNlcworIworQ09ORklHX1JUQ19JTlRGX1NZU0ZTPXkKK0NPTkZJR19SVENfSU5URl9QUk9DPXkKK0NPTkZJR19SVENfSU5URl9ERVY9eQorIyBDT05GSUdfUlRDX0lOVEZfREVWX1VJRV9FTVVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfVEVTVCBpcyBub3Qgc2V0CisKKyMKKyMgSTJDIFJUQyBkcml2ZXJzCisjCisjIENPTkZJR19SVENfRFJWX0RTMTMwNyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTM3NCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTY3MiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX01BWDY5MDAgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SUzVDMzcyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfSVNMMTIwOCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1gxMjA1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUENGODU2MyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1BDRjg1ODMgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDFUODAgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9TMzUzOTBBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRk0zMTMwIGlzIG5vdCBzZXQKKworIworIyBTUEkgUlRDIGRyaXZlcnMKKyMKKworIworIyBQbGF0Zm9ybSBSVEMgZHJpdmVycworIworQ09ORklHX1JUQ19EUlZfQ01PUz15CisjIENPTkZJR19SVENfRFJWX0RTMTUxMSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTU1MyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTc0MiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1NUSzE3VEE4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQ4VDg2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQ4VDU5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfVjMwMjAgaXMgbm90IHNldAorCisjCisjIG9uLUNQVSBSVEMgZHJpdmVycworIworIyBDT05GSUdfUlRDX0RSVl9QUEMgaXMgbm90IHNldAorIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19VSU8gaXMgbm90IHNldAorCisjCisjIEZpbGUgc3lzdGVtcworIworQ09ORklHX0VYVDJfRlM9eQorIyBDT05GSUdfRVhUMl9GU19YQVRUUiBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0CitDT05GSUdfRVhUM19GUz15CitDT05GSUdfRVhUM19GU19YQVRUUj15CisjIENPTkZJR19FWFQzX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQzX0ZTX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDRERVZfRlMgaXMgbm90IHNldAorQ09ORklHX0pCRD15CitDT05GSUdfRlNfTUJDQUNIRT15CisjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19ETk9USUZZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOT1RJRlkgaXMgbm90IHNldAorIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAorIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVVE9GUzRfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0CisKKyMKKyMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcworIworIyBDT05GSUdfSVNPOTY2MF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19VREZfRlMgaXMgbm90IHNldAorCisjCisjIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKKyMKKyMgQ09ORklHX01TRE9TX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZGQVRfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTlRGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgUHNldWRvIGZpbGVzeXN0ZW1zCisjCitDT05GSUdfUFJPQ19GUz15CitDT05GSUdfUFJPQ19LQ09SRT15CitDT05GSUdfUFJPQ19TWVNDVEw9eQorQ09ORklHX1NZU0ZTPXkKK0NPTkZJR19UTVBGUz15CisjIENPTkZJR19UTVBGU19QT1NJWF9BQ0wgaXMgbm90IHNldAorIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBNaXNjZWxsYW5lb3VzIGZpbGVzeXN0ZW1zCisjCisjIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGRlMyX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQU1GUyBpcyBub3Qgc2V0CisjIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX09NRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAorQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQorQ09ORklHX05GU19GUz15CitDT05GSUdfTkZTX1YzPXkKKyMgQ09ORklHX05GU19WM19BQ0wgaXMgbm90IHNldAorIyBDT05GSUdfTkZTX1Y0IGlzIG5vdCBzZXQKK0NPTkZJR19ST09UX05GUz15CitDT05GSUdfTkZTRD15CisjIENPTkZJR19ORlNEX1YzIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GU0RfVjQgaXMgbm90IHNldAorQ09ORklHX0xPQ0tEPXkKK0NPTkZJR19MT0NLRF9WND15CitDT05GSUdfRVhQT1JURlM9eQorQ09ORklHX05GU19DT01NT049eQorQ09ORklHX1NVTlJQQz15CisjIENPTkZJR19SUENTRUNfR1NTX0tSQjUgaXMgbm90IHNldAorIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0CisjIENPTkZJR19TTUJfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0CisjIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAorCisjCisjIFBhcnRpdGlvbiBUeXBlcworIworQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRD15CisjIENPTkZJR19BQ09STl9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfT1NGX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19BTUlHQV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfQVRBUklfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ19QQVJUSVRJT04gaXMgbm90IHNldAorQ09ORklHX01TRE9TX1BBUlRJVElPTj15CisjIENPTkZJR19CU0RfRElTS0xBQkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JTklYX1NVQlBBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19TT0xBUklTX1g4Nl9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfVU5JWFdBUkVfRElTS0xBQkVMIGlzIG5vdCBzZXQKK0NPTkZJR19MRE1fUEFSVElUSU9OPXkKKyMgQ09ORklHX0xETV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19TR0lfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VMVFJJWF9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfU1VOX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19LQVJNQV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfRUZJX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNWNjhfUEFSVElUSU9OIGlzIG5vdCBzZXQKK0NPTkZJR19OTFM9eQorQ09ORklHX05MU19ERUZBVUxUPSJpc284ODU5LTEiCisjIENPTkZJR19OTFNfQ09ERVBBR0VfNDM3IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV83MzcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzc3NSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODU3IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYyIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjMgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjYgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2OSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTM2IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85NTAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzMiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTQ5IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NzQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfOCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQVNDSUkgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8yIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzMgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV81IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzYgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV85IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzEzIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzE0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzE1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19LT0k4X1IgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0tPSThfVSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfVVRGOCBpcyBub3Qgc2V0CisjIENPTkZJR19ETE0gaXMgbm90IHNldAorCisjCisjIExpYnJhcnkgcm91dGluZXMKKyMKK0NPTkZJR19CSVRSRVZFUlNFPXkKKyMgQ09ORklHX0dFTkVSSUNfRklORF9GSVJTVF9CSVQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDX0NDSVRUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKK0NPTkZJR19DUkNfVDEwRElGPXkKKyMgQ09ORklHX0NSQ19JVFVfVCBpcyBub3Qgc2V0CitDT05GSUdfQ1JDMzI9eQorIyBDT05GSUdfQ1JDNyBpcyBub3Qgc2V0CisjIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAorQ09ORklHX1BMSVNUPXkKK0NPTkZJR19IQVNfSU9NRU09eQorQ09ORklHX0hBU19JT1BPUlQ9eQorQ09ORklHX0hBU19ETUE9eQorQ09ORklHX0hBVkVfTE1CPXkKKworIworIyBLZXJuZWwgaGFja2luZworIworIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAorQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQ9eQorQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKK0NPTkZJR19GUkFNRV9XQVJOPTEwMjQKKyMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0tFUk5FTD15CitDT05GSUdfREVCVUdfU0hJUlE9eQorQ09ORklHX0RFVEVDVF9TT0ZUTE9DS1VQPXkKKyMgQ09ORklHX0JPT1RQQVJBTV9TT0ZUTE9DS1VQX1BBTklDIGlzIG5vdCBzZXQKK0NPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQ19WQUxVRT0wCitDT05GSUdfU0NIRURfREVCVUc9eQorIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19USU1FUl9TVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19PQkpFQ1RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMVUJfREVCVUdfT04gaXMgbm90IHNldAorIyBDT05GSUdfU0xVQl9TVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19NVVRFWEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0xPQ0tJTkdfQVBJX1NFTEZURVNUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0hJR0hNRU0gaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0U9eQorQ09ORklHX0RFQlVHX0lORk89eQorIyBDT05GSUdfREVCVUdfVk0gaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfV1JJVEVDT1VOVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19NRU1PUllfSU5JVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPT1RfUFJJTlRLX0RFTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAorIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CitDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0s9eQorQ09ORklHX0hBVkVfRlRSQUNFPXkKK0NPTkZJR19IQVZFX0RZTkFNSUNfRlRSQUNFPXkKKyMgQ09ORklHX0ZUUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ0hFRF9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfQ09OVEVYVF9TV0lUQ0hfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKKyMgQ09ORklHX0tHREIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU1RBQ0tPVkVSRkxPVyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TVEFDS19VU0FHRSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19QQUdFQUxMT0MgaXMgbm90IHNldAorIyBDT05GSUdfQ09ERV9QQVRDSElOR19TRUxGVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19GVFJfRklYVVBfU0VMRlRFU1QgaXMgbm90IHNldAorIyBDT05GSUdfWE1PTiBpcyBub3Qgc2V0CisjIENPTkZJR19JUlFTVEFDS1MgaXMgbm90IHNldAorIyBDT05GSUdfQkRJX1NXSVRDSCBpcyBub3Qgc2V0CisjIENPTkZJR19CT09UWF9URVhUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19FQVJMWV9ERUJVRyBpcyBub3Qgc2V0CisKKyMKKyMgU2VjdXJpdHkgb3B0aW9ucworIworIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUyBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPPXkKKworIworIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKKyMKKyMgQ09ORklHX0NSWVBUT19NQU5BR0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTlVMTCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ1JZUFREIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19BVVRIRU5DIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19URVNUIGlzIG5vdCBzZXQKKworIworIyBBdXRoZW50aWNhdGVkIEVuY3J5cHRpb24gd2l0aCBBc3NvY2lhdGVkIERhdGEKKyMKKyMgQ09ORklHX0NSWVBUT19DQ00gaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dDTSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0VRSVYgaXMgbm90IHNldAorCisjCisjIEJsb2NrIG1vZGVzCisjCisjIENPTkZJR19DUllQVE9fQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DVFIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NUUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fRUNCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19MUlcgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1BDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1hUUyBpcyBub3Qgc2V0CisKKyMKKyMgSGFzaCBtb2RlcworIworIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorCisjCisjIERpZ2VzdAorIworIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19NRDUgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQxMjggaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDE2MCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMjU2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQzMjAgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NIQTEgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NIQTI1NiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0hBNTEyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19UR1IxOTIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1dQNTEyIGlzIG5vdCBzZXQKKworIworIyBDaXBoZXJzCisjCisjIENPTkZJR19DUllQVE9fQUVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19BTlVCSVMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FSQzQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0JMT1dGSVNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQU1FTExJQSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0FTVDUgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NBU1Q2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19ERVMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0ZDUllQVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fS0hBWkFEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TQUxTQTIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TRUVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TRVJQRU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19URUEgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RXT0ZJU0ggaXMgbm90IHNldAorCisjCisjIENvbXByZXNzaW9uCisjCisjIENPTkZJR19DUllQVE9fREVGTEFURSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTFpPIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fSFc9eQorIyBDT05GSUdfQ1JZUFRPX0RFVl9ISUZOXzc5NVggaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0RFVl9UQUxJVE9TIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19DTE9DSyBpcyBub3Qgc2V0CitDT05GSUdfUFBDX0xJQl9SSEVBUD15CisjIENPTkZJR19WSVJUVUFMSVpBVElPTiBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy84Nnh4L21wYzg2NDFfaHBjbl9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84Nnh4L21wYzg2NDFfaHBjbl9kZWZjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDQ0ZGRmOQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzg2eHgvbXBjODY0MV9ocGNuX2RlZmNvbmZpZwpAQCAtMCwwICsxLDE2NjYgQEAKKyMKKyMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yNy1yYzQKKyMgVGh1IEF1ZyAyMSAwMDo1MjoxMSAyMDA4CisjCisjIENPTkZJR19QUEM2NCBpcyBub3Qgc2V0CisKKyMKKyMgUHJvY2Vzc29yIHN1cHBvcnQKKyMKK0NPTkZJR182eHg9eQorIyBDT05GSUdfUFBDXzg1eHggaXMgbm90IHNldAorIyBDT05GSUdfUFBDXzh4eCBpcyBub3Qgc2V0CisjIENPTkZJR180MHggaXMgbm90IHNldAorIyBDT05GSUdfNDR4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0UyMDAgaXMgbm90IHNldAorQ09ORklHX1BQQ19GUFU9eQorQ09ORklHX0FMVElWRUM9eQorQ09ORklHX1BQQ19TVERfTU1VPXkKK0NPTkZJR19QUENfU1REX01NVV8zMj15CisjIENPTkZJR19QUENfTU1fU0xJQ0VTIGlzIG5vdCBzZXQKK0NPTkZJR19TTVA9eQorQ09ORklHX05SX0NQVVM9MgorQ09ORklHX1BQQzMyPXkKK0NPTkZJR19XT1JEX1NJWkU9MzIKK0NPTkZJR19QUENfTUVSR0U9eQorQ09ORklHX01NVT15CitDT05GSUdfR0VORVJJQ19DTU9TX1VQREFURT15CitDT05GSUdfR0VORVJJQ19USU1FPXkKK0NPTkZJR19HRU5FUklDX1RJTUVfVlNZU0NBTEw9eQorQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQorQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQorIyBDT05GSUdfSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUEgaXMgbm90IHNldAorQ09ORklHX0lSUV9QRVJfQ1BVPXkKK0NPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQorQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKK0NPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQorQ09ORklHX1JXU0VNX1hDSEdBRERfQUxHT1JJVEhNPXkKK0NPTkZJR19BUkNIX0hBU19JTE9HMl9VMzI9eQorQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15CitDT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQorQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVD15CisjIENPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTIGlzIG5vdCBzZXQKK0NPTkZJR19QUEM9eQorQ09ORklHX0VBUkxZX1BSSU5USz15CitDT05GSUdfR0VORVJJQ19OVlJBTT15CitDT05GSUdfU0NIRURfTk9fTk9fT01JVF9GUkFNRV9QT0lOVEVSPXkKK0NPTkZJR19BUkNIX01BWV9IQVZFX1BDX0ZEQz15CitDT05GSUdfUFBDX09GPXkKK0NPTkZJR19PRj15CitDT05GSUdfUFBDX1VEQkdfMTY1NTA9eQorQ09ORklHX0dFTkVSSUNfVEJTWU5DPXkKK0NPTkZJR19BVURJVF9BUkNIPXkKK0NPTkZJR19HRU5FUklDX0JVRz15CitDT05GSUdfREVGQVVMVF9VSU1BR0U9eQorIyBDT05GSUdfUFBDX0RDUl9OQVRJVkUgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0RDUl9NTUlPIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCisKKyMKKyMgR2VuZXJhbCBzZXR1cAorIworQ09ORklHX0VYUEVSSU1FTlRBTD15CitDT05GSUdfTE9DS19LRVJORUw9eQorQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgorQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgorQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKK0NPTkZJR19TV0FQPXkKK0NPTkZJR19TWVNWSVBDPXkKK0NPTkZJR19TWVNWSVBDX1NZU0NUTD15CitDT05GSUdfUE9TSVhfTVFVRVVFPXkKK0NPTkZJR19CU0RfUFJPQ0VTU19BQ0NUPXkKKyMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1RfVjMgaXMgbm90IHNldAorIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKK0NPTkZJR19BVURJVD15CisjIENPTkZJR19BVURJVFNZU0NBTEwgaXMgbm90IHNldAorQ09ORklHX0lLQ09ORklHPXkKK0NPTkZJR19JS0NPTkZJR19QUk9DPXkKK0NPTkZJR19MT0dfQlVGX1NISUZUPTE0CisjIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKK0NPTkZJR19HUk9VUF9TQ0hFRD15CisjIENPTkZJR19GQUlSX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKK0NPTkZJR19VU0VSX1NDSEVEPXkKKyMgQ09ORklHX0NHUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CitDT05GSUdfU1lTRlNfREVQUkVDQVRFRD15CitDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMj15CisjIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0CisjIENPTkZJR19OQU1FU1BBQ0VTIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0lOSVRSRD15CitDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgorIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAorQ09ORklHX1NZU0NUTD15CitDT05GSUdfRU1CRURERUQ9eQorQ09ORklHX1NZU0NUTF9TWVNDQUxMPXkKK0NPTkZJR19LQUxMU1lNUz15CitDT05GSUdfS0FMTFNZTVNfQUxMPXkKK0NPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTPXkKK0NPTkZJR19IT1RQTFVHPXkKK0NPTkZJR19QUklOVEs9eQorQ09ORklHX0JVRz15CitDT05GSUdfRUxGX0NPUkU9eQorQ09ORklHX1BDU1BLUl9QTEFURk9STT15CitDT05GSUdfQ09NUEFUX0JSSz15CitDT05GSUdfQkFTRV9GVUxMPXkKK0NPTkZJR19GVVRFWD15CitDT05GSUdfQU5PTl9JTk9ERVM9eQorQ09ORklHX0VQT0xMPXkKK0NPTkZJR19TSUdOQUxGRD15CitDT05GSUdfVElNRVJGRD15CitDT05GSUdfRVZFTlRGRD15CitDT05GSUdfU0hNRU09eQorQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKK0NPTkZJR19TTFVCX0RFQlVHPXkKKyMgQ09ORklHX1NMQUIgaXMgbm90IHNldAorQ09ORklHX1NMVUI9eQorIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAorIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9PUFJPRklMRT15CisjIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTPXkKK0NPTkZJR19IQVZFX0lPUkVNQVBfUFJPVD15CitDT05GSUdfSEFWRV9LUFJPQkVTPXkKK0NPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQorQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQorIyBDT05GSUdfSEFWRV9ETUFfQVRUUlMgaXMgbm90IHNldAorQ09ORklHX1VTRV9HRU5FUklDX1NNUF9IRUxQRVJTPXkKKyMgQ09ORklHX0hBVkVfQ0xLIGlzIG5vdCBzZXQKK0NPTkZJR19QUk9DX1BBR0VfTU9OSVRPUj15CisjIENPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UIGlzIG5vdCBzZXQKK0NPTkZJR19TTEFCSU5GTz15CitDT05GSUdfUlRfTVVURVhFUz15CisjIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKK0NPTkZJR19CQVNFX1NNQUxMPTAKK0NPTkZJR19NT0RVTEVTPXkKKyMgQ09ORklHX01PRFVMRV9GT1JDRV9MT0FEIGlzIG5vdCBzZXQKK0NPTkZJR19NT0RVTEVfVU5MT0FEPXkKK0NPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEPXkKK0NPTkZJR19NT0RWRVJTSU9OUz15CisjIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAorQ09ORklHX0tNT0Q9eQorQ09ORklHX1NUT1BfTUFDSElORT15CitDT05GSUdfQkxPQ0s9eQorQ09ORklHX0xCRD15CisjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xTRiBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0CisKKyMKKyMgSU8gU2NoZWR1bGVycworIworQ09ORklHX0lPU0NIRURfTk9PUD15CitDT05GSUdfSU9TQ0hFRF9BUz15CitDT05GSUdfSU9TQ0hFRF9ERUFETElORT15CitDT05GSUdfSU9TQ0hFRF9DRlE9eQorIyBDT05GSUdfREVGQVVMVF9BUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX0NGUT15CisjIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iY2ZxIgorQ09ORklHX0NMQVNTSUNfUkNVPXkKKworIworIyBQbGF0Zm9ybSBzdXBwb3J0CisjCitDT05GSUdfUFBDX01VTFRJUExBVEZPUk09eQorQ09ORklHX0NMQVNTSUMzMj15CisjIENPTkZJR19QUENfQ0hSUCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfUE1BQyBpcyBub3Qgc2V0CisjIENPTkZJR19NUEM1MTIxX0FEUyBpcyBub3Qgc2V0CisjIENPTkZJR19NUEM1MTIxX0dFTkVSSUMgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX01QQzUyeHggaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0NFTEwgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0NFTExfTkFUSVZFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ184Mnh4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BRMkFEUyBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfODN4eCBpcyBub3Qgc2V0CitDT05GSUdfUFBDXzg2eHg9eQorQ09ORklHX01QQzg2NDFfSFBDTj15CisjIENPTkZJR19TQkM4NjQxRCBpcyBub3Qgc2V0CisjIENPTkZJR19NUEM4NjEwX0hQQ0QgaXMgbm90IHNldAorQ09ORklHX01QQzg2NDE9eQorQ09ORklHX1BQQ19OQVRJVkU9eQorIyBDT05GSUdfVURCR19SVEFTX0NPTlNPTEUgaXMgbm90IHNldAorIyBDT05GSUdfSVBJQyBpcyBub3Qgc2V0CitDT05GSUdfTVBJQz15CisjIENPTkZJR19NUElDX1dFSVJEIGlzIG5vdCBzZXQKK0NPTkZJR19QUENfSTgyNTk9eQorQ09ORklHX1BQQ19SVEFTPXkKKyMgQ09ORklHX1JUQVNfRVJST1JfTE9HR0lORyBpcyBub3Qgc2V0CitDT05GSUdfUlRBU19QUk9DPXkKKyMgQ09ORklHX01NSU9fTlZSQU0gaXMgbm90IHNldAorQ09ORklHX1BQQ19NUEMxMDY9eQorIyBDT05GSUdfUFBDXzk3MF9OQVAgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0lORElSRUNUX0lPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dFTkVSSUNfSU9NQVAgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0ZSRVEgaXMgbm90IHNldAorIyBDT05GSUdfUFBDNjAxX1NZTkNfRklYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RBVSBpcyBub3Qgc2V0CitDT05GSUdfRlNMX1VMSTE1NzU9eQorCisjCisjIEtlcm5lbCBvcHRpb25zCisjCitDT05GSUdfSElHSE1FTT15CitDT05GSUdfVElDS19PTkVTSE9UPXkKK0NPTkZJR19OT19IWj15CitDT05GSUdfSElHSF9SRVNfVElNRVJTPXkKK0NPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTX0JVSUxEPXkKKyMgQ09ORklHX0haXzEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19IWl8yNTAgaXMgbm90IHNldAorIyBDT05GSUdfSFpfMzAwIGlzIG5vdCBzZXQKK0NPTkZJR19IWl8xMDAwPXkKK0NPTkZJR19IWj0xMDAwCitDT05GSUdfU0NIRURfSFJUSUNLPXkKK0NPTkZJR19QUkVFTVBUX05PTkU9eQorIyBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlkgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0CitDT05GSUdfQklORk1UX0VMRj15CitDT05GSUdfQklORk1UX01JU0M9bQorIyBDT05GSUdfSU9NTVVfSEVMUEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hPVFBMVUdfQ1BVIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVRz15CitDT05GSUdfQVJDSF9IQVNfV0FMS19NRU1PUlk9eQorQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RSRU1PVkU9eQorIyBDT05GSUdfS0VYRUMgaXMgbm90IHNldAorIyBDT05GSUdfSVJRX0FMTF9DUFVTIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKK0NPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15CitDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CitDT05GSUdfRkxBVE1FTV9NQU5VQUw9eQorIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0CisjIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKK0NPTkZJR19GTEFUTUVNPXkKK0NPTkZJR19GTEFUX05PREVfTUVNX01BUD15CisjIENPTkZJR19TUEFSU0VNRU1fU1RBVElDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQQVJTRU1FTV9WTUVNTUFQX0VOQUJMRSBpcyBub3Qgc2V0CitDT05GSUdfUEFHRUZMQUdTX0VYVEVOREVEPXkKK0NPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00CitDT05GSUdfTUlHUkFUSU9OPXkKKyMgQ09ORklHX1JFU09VUkNFU182NEJJVCBpcyBub3Qgc2V0CitDT05GSUdfWk9ORV9ETUFfRkxBRz0xCitDT05GSUdfQk9VTkNFPXkKK0NPTkZJR19WSVJUX1RPX0JVUz15CitDT05GSUdfRk9SQ0VfTUFYX1pPTkVPUkRFUj0xMQorQ09ORklHX1BST0NfREVWSUNFVFJFRT15CisjIENPTkZJR19DTURMSU5FX0JPT0wgaXMgbm90IHNldAorQ09ORklHX0VYVFJBX1RBUkdFVFM9IiIKKyMgQ09ORklHX1BNIGlzIG5vdCBzZXQKK0NPTkZJR19TRUNDT01QPXkKK0NPTkZJR19JU0FfRE1BX0FQST15CisKKyMKKyMgQnVzIG9wdGlvbnMKKyMKKyMgQ09ORklHX0lTQSBpcyBub3Qgc2V0CitDT05GSUdfWk9ORV9ETUE9eQorQ09ORklHX0dFTkVSSUNfSVNBX0RNQT15CitDT05GSUdfUFBDX0lORElSRUNUX1BDST15CitDT05GSUdfRlNMX1NPQz15CitDT05GSUdfRlNMX1BDST15CitDT05GSUdfUFBDX1BDSV9DSE9JQ0U9eQorQ09ORklHX1BDST15CitDT05GSUdfUENJX0RPTUFJTlM9eQorQ09ORklHX1BDSV9TWVNDQUxMPXkKKyMgQ09ORklHX1BDSUVQT1JUQlVTIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX1NVUFBPUlRTX01TST15CisjIENPTkZJR19QQ0lfTVNJIGlzIG5vdCBzZXQKK0NPTkZJR19QQ0lfTEVHQUNZPXkKKyMgQ09ORklHX1BDSV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0NBUkQgaXMgbm90IHNldAorIyBDT05GSUdfSE9UUExVR19QQ0kgaXMgbm90IHNldAorQ09ORklHX0hBU19SQVBJRElPPXkKKyMgQ09ORklHX1JBUElESU8gaXMgbm90IHNldAorCisjCisjIEFkdmFuY2VkIHNldHVwCisjCisjIENPTkZJR19BRFZBTkNFRF9PUFRJT05TIGlzIG5vdCBzZXQKKworIworIyBEZWZhdWx0IHNldHRpbmdzIGZvciBhZHZhbmNlZCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIHVzZWQKKyMKK0NPTkZJR19MT1dNRU1fU0laRT0weDMwMDAwMDAwCitDT05GSUdfUEFHRV9PRkZTRVQ9MHhjMDAwMDAwMAorQ09ORklHX0tFUk5FTF9TVEFSVD0weGMwMDAwMDAwCitDT05GSUdfUEhZU0lDQUxfU1RBUlQ9MHgwMDAwMDAwMAorQ09ORklHX1RBU0tfU0laRT0weGMwMDAwMDAwCitDT05GSUdfTkVUPXkKKworIworIyBOZXR3b3JraW5nIG9wdGlvbnMKKyMKK0NPTkZJR19QQUNLRVQ9eQorIyBDT05GSUdfUEFDS0VUX01NQVAgaXMgbm90IHNldAorQ09ORklHX1VOSVg9eQorQ09ORklHX1hGUk09eQorQ09ORklHX1hGUk1fVVNFUj15CisjIENPTkZJR19YRlJNX1NVQl9QT0xJQ1kgaXMgbm90IHNldAorIyBDT05GSUdfWEZSTV9NSUdSQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGUk1fU1RBVElTVElDUyBpcyBub3Qgc2V0CitDT05GSUdfTkVUX0tFWT1tCisjIENPTkZJR19ORVRfS0VZX01JR1JBVEUgaXMgbm90IHNldAorQ09ORklHX0lORVQ9eQorQ09ORklHX0lQX01VTFRJQ0FTVD15CitDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSPXkKK0NPTkZJR19BU0tfSVBfRklCX0hBU0g9eQorIyBDT05GSUdfSVBfRklCX1RSSUUgaXMgbm90IHNldAorQ09ORklHX0lQX0ZJQl9IQVNIPXkKK0NPTkZJR19JUF9NVUxUSVBMRV9UQUJMRVM9eQorQ09ORklHX0lQX1JPVVRFX01VTFRJUEFUSD15CitDT05GSUdfSVBfUk9VVEVfVkVSQk9TRT15CitDT05GSUdfSVBfUE5QPXkKK0NPTkZJR19JUF9QTlBfREhDUD15CitDT05GSUdfSVBfUE5QX0JPT1RQPXkKK0NPTkZJR19JUF9QTlBfUkFSUD15CitDT05GSUdfTkVUX0lQSVA9eQorQ09ORklHX05FVF9JUEdSRT15CitDT05GSUdfTkVUX0lQR1JFX0JST0FEQ0FTVD15CitDT05GSUdfSVBfTVJPVVRFPXkKK0NPTkZJR19JUF9QSU1TTV9WMT15CitDT05GSUdfSVBfUElNU01fVjI9eQorQ09ORklHX0FSUEQ9eQorIyBDT05GSUdfU1lOX0NPT0tJRVMgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUX1RVTk5FTD15CisjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9MUk8gaXMgbm90IHNldAorQ09ORklHX0lORVRfRElBRz15CitDT05GSUdfSU5FVF9UQ1BfRElBRz15CisjIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0CitDT05GSUdfVENQX0NPTkdfQ1VCSUM9eQorQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImN1YmljIgorIyBDT05GSUdfVENQX01ENVNJRyBpcyBub3Qgc2V0CitDT05GSUdfSVBWNj15CisjIENPTkZJR19JUFY2X1BSSVZBQ1kgaXMgbm90IHNldAorIyBDT05GSUdfSVBWNl9ST1VURVJfUFJFRiBpcyBub3Qgc2V0CisjIENPTkZJR19JUFY2X09QVElNSVNUSUNfREFEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVQ2X0FIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVQ2X0VTUCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUNl9JUENPTVAgaXMgbm90IHNldAorIyBDT05GSUdfSVBWNl9NSVA2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVQ2X1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVQ2X1RVTk5FTCBpcyBub3Qgc2V0CitDT05GSUdfSU5FVDZfWEZSTV9NT0RFX1RSQU5TUE9SVD15CitDT05GSUdfSU5FVDZfWEZSTV9NT0RFX1RVTk5FTD15CitDT05GSUdfSU5FVDZfWEZSTV9NT0RFX0JFRVQ9eQorIyBDT05GSUdfSU5FVDZfWEZSTV9NT0RFX1JPVVRFT1BUSU1JWkFUSU9OIGlzIG5vdCBzZXQKK0NPTkZJR19JUFY2X1NJVD15CitDT05GSUdfSVBWNl9ORElTQ19OT0RFVFlQRT15CisjIENPTkZJR19JUFY2X1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JUFY2X01VTFRJUExFX1RBQkxFUyBpcyBub3Qgc2V0CisjIENPTkZJR19JUFY2X01ST1VURSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRXT1JLX1NFQ01BUksgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAorQ09ORklHX0lQX1NDVFA9bQorIyBDT05GSUdfU0NUUF9EQkdfTVNHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDVFBfREJHX09CSkNOVCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1RQX0hNQUNfTk9ORSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1RQX0hNQUNfU0hBMSBpcyBub3Qgc2V0CitDT05GSUdfU0NUUF9ITUFDX01ENT15CisjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CisjIENPTkZJR19CUklER0UgaXMgbm90IHNldAorIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUNORVQgaXMgbm90IHNldAorIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0CisjIENPTkZJR19JUFggaXMgbm90IHNldAorIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAorIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xBUEIgaXMgbm90IHNldAorIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKKworIworIyBOZXR3b3JrIHRlc3RpbmcKKyMKKyMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAorIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAorIyBDT05GSUdfQ0FOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lSREEgaXMgbm90IHNldAorIyBDT05GSUdfQlQgaXMgbm90IHNldAorIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAorQ09ORklHX0ZJQl9SVUxFUz15CisKKyMKKyMgV2lyZWxlc3MKKyMKKyMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0CisjIENPTkZJR19NQUM4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19JRUVFODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CisKKyMKKyMgRGV2aWNlIERyaXZlcnMKKyMKKworIworIyBHZW5lcmljIERyaXZlciBPcHRpb25zCisjCitDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorQ09ORklHX1NUQU5EQUxPTkU9eQorQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQorQ09ORklHX0ZXX0xPQURFUj15CitDT05GSUdfRklSTVdBUkVfSU5fS0VSTkVMPXkKK0NPTkZJR19FWFRSQV9GSVJNV0FSRT0iIgorIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0RFVlJFUyBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0CisjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAorIyBDT05GSUdfTVREIGlzIG5vdCBzZXQKK0NPTkZJR19PRl9ERVZJQ0U9eQorQ09ORklHX09GX0kyQz15CisjIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWPXkKKyMgQ09ORklHX0JMS19ERVZfRkQgaXMgbm90IHNldAorIyBDT05GSUdfTUFDX0ZMT1BQWSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfQ1BRX0RBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19DUFFfQ0lTU19EQSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0RBQzk2MCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1VNRU0gaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0xPT1A9eQorIyBDT05GSUdfQkxLX0RFVl9DUllQVE9MT09QIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX05CRD15CisjIENPTkZJR19CTEtfREVWX1NYOCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1VCIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX1JBTT15CitDT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKK0NPTkZJR19CTEtfREVWX1JBTV9TSVpFPTEzMTA3MgorIyBDT05GSUdfQkxLX0RFVl9YSVAgaXMgbm90IHNldAorIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9IRCBpcyBub3Qgc2V0CitDT05GSUdfTUlTQ19ERVZJQ0VTPXkKKyMgQ09ORklHX1BIQU5UT00gaXMgbm90IHNldAorIyBDT05GSUdfRUVQUk9NXzkzQ1g2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NHSV9JT0M0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJRk1fQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19FTkNMT1NVUkVfU0VSVklDRVMgaXMgbm90IHNldAorIyBDT05GSUdfSFBfSUxPIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0lERT15CisjIENPTkZJR19JREUgaXMgbm90IHNldAorCisjCisjIFNDU0kgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAorQ09ORklHX1NDU0k9eQorQ09ORklHX1NDU0lfRE1BPXkKKyMgQ09ORklHX1NDU0lfVEdUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTkVUTElOSyBpcyBub3Qgc2V0CitDT05GSUdfU0NTSV9QUk9DX0ZTPXkKKworIworIyBTQ1NJIHN1cHBvcnQgdHlwZSAoZGlzaywgdGFwZSwgQ0QtUk9NKQorIworQ09ORklHX0JMS19ERVZfU0Q9eQorQ09ORklHX0NIUl9ERVZfU1Q9eQorIyBDT05GSUdfQ0hSX0RFVl9PU1NUIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX1NSPXkKKyMgQ09ORklHX0JMS19ERVZfU1JfVkVORE9SIGlzIG5vdCBzZXQKK0NPTkZJR19DSFJfREVWX1NHPXkKKyMgQ09ORklHX0NIUl9ERVZfU0NIIGlzIG5vdCBzZXQKKworIworIyBTb21lIFNDU0kgZGV2aWNlcyAoZS5nLiBDRCBqdWtlYm94KSBzdXBwb3J0IG11bHRpcGxlIExVTnMKKyMKK0NPTkZJR19TQ1NJX01VTFRJX0xVTj15CisjIENPTkZJR19TQ1NJX0NPTlNUQU5UUyBpcyBub3Qgc2V0CitDT05GSUdfU0NTSV9MT0dHSU5HPXkKKyMgQ09ORklHX1NDU0lfU0NBTl9BU1lOQyBpcyBub3Qgc2V0CitDT05GSUdfU0NTSV9XQUlUX1NDQU49bQorCisjCisjIFNDU0kgVHJhbnNwb3J0cworIworIyBDT05GSUdfU0NTSV9TUElfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9GQ19BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0lTQ1NJX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU0FTX0xJQlNBUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NSUF9BVFRSUyBpcyBub3Qgc2V0CitDT05GSUdfU0NTSV9MT1dMRVZFTD15CisjIENPTkZJR19JU0NTSV9UQ1AgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl8zV19YWFhYX1JBSUQgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV8zV185WFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQUNBUkQgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BQUNSQUlEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQUlDN1hYWCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0FJQzdYWFhfT0xEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQUlDNzlYWCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0FJQzk0WFggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9EUFRfSTJPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQURWQU5TWVMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BUkNNU1IgaXMgbm90IHNldAorIyBDT05GSUdfTUVHQVJBSURfTkVXR0VOIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FR0FSQUlEX0xFR0FDWSBpcyBub3Qgc2V0CisjIENPTkZJR19NRUdBUkFJRF9TQVMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9IUFRJT1AgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9CVVNMT0dJQyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RNWDMxOTFEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfRUFUQSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0ZVVFVSRV9ET01BSU4gaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9HRFRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfSVBTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfSU5JVElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfSU5JQTEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX01WU0FTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU1RFWCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NZTTUzQzhYWF8yIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfSVBSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfUUxPR0lDXzEyODAgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9RTEFfRkMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9RTEFfSVNDU0kgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9MUEZDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfREMzOTV4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfREMzOTBUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTlNQMzIgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX01FU0ggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9NQUM1M0M5NCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NSUCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RIIGlzIG5vdCBzZXQKK0NPTkZJR19BVEE9eQorIyBDT05GSUdfQVRBX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKK0NPTkZJR19TQVRBX1BNUD15CitDT05GSUdfU0FUQV9BSENJPXkKKyMgQ09ORklHX1NBVEFfU0lMMjQgaXMgbm90IHNldAorIyBDT05GSUdfU0FUQV9GU0wgaXMgbm90IHNldAorQ09ORklHX0FUQV9TRkY9eQorIyBDT05GSUdfU0FUQV9TVlcgaXMgbm90IHNldAorIyBDT05GSUdfQVRBX1BJSVggaXMgbm90IHNldAorIyBDT05GSUdfU0FUQV9NViBpcyBub3Qgc2V0CisjIENPTkZJR19TQVRBX05WIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BEQ19BRE1BIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBVEFfUVNUT1IgaXMgbm90IHNldAorIyBDT05GSUdfU0FUQV9QUk9NSVNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBVEFfU1g0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBVEFfU0lMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBVEFfU0lTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBVEFfVUxJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBVEFfVklBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBVEFfVklURVNTRSBpcyBub3Qgc2V0CisjIENPTkZJR19TQVRBX0lOSUMxNjJYIGlzIG5vdCBzZXQKK0NPTkZJR19QQVRBX0FMST15CisjIENPTkZJR19QQVRBX0FNRCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0FSVE9QIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfQVRJSVhQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfQ01ENjQwX1BDSSBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0NNRDY0WCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0NTNTUyMCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0NTNTUzMCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0NZUFJFU1MgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9FRkFSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQV9HRU5FUklDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfSFBUMzY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfSFBUMzdYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfSFBUM1gyTiBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0hQVDNYMyBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0lUODIxWCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0lUODIxMyBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0pNSUNST04gaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9UUklGTEVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfTUFSVkVMTCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX01QSUlYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfT0xEUElJWCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX05FVENFTEwgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9OSU5KQTMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfTlM4NzQxMCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX05TODc0MTUgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9PUFRJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfT1BUSURNQSBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1BEQ19PTEQgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9SQURJU1lTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfUloxMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfU0MxMjAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfU0VSVkVSV09SS1MgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9QREMyMDI3WCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1NJTDY4MCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1NJUyBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1ZJQSBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1dJTkJPTkQgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9QTEFURk9STSBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1NDSCBpcyBub3Qgc2V0CisjIENPTkZJR19NRCBpcyBub3Qgc2V0CisjIENPTkZJR19GVVNJT04gaXMgbm90IHNldAorCisjCisjIElFRUUgMTM5NCAoRmlyZVdpcmUpIHN1cHBvcnQKKyMKKworIworIyBFbmFibGUgb25seSBvbmUgb2YgdGhlIHR3byBzdGFja3MsIHVubGVzcyB5b3Uga25vdyB3aGF0IHlvdSBhcmUgZG9pbmcKKyMKKyMgQ09ORklHX0ZJUkVXSVJFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lFRUUxMzk0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyTyBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNJTlRPU0hfRFJJVkVSUyBpcyBub3Qgc2V0CitDT05GSUdfTkVUREVWSUNFUz15CitDT05GSUdfRFVNTVk9eQorIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNWTEFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0CisjIENPTkZJR19UVU4gaXMgbm90IHNldAorIyBDT05GSUdfVkVUSCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNORVQgaXMgbm90IHNldAorQ09ORklHX1BIWUxJQj15CisKKyMKKyMgTUlJIFBIWSBkZXZpY2UgZHJpdmVycworIworIyBDT05GSUdfTUFSVkVMTF9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfREFWSUNPTV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfUVNFTUlfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xYVF9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfQ0lDQURBX1BIWSBpcyBub3Qgc2V0CitDT05GSUdfVklURVNTRV9QSFk9eQorIyBDT05GSUdfU01TQ19QSFkgaXMgbm90IHNldAorIyBDT05GSUdfQlJPQURDT01fUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lDUExVU19QSFkgaXMgbm90IHNldAorIyBDT05GSUdfUkVBTFRFS19QSFkgaXMgbm90IHNldAorIyBDT05GSUdfRklYRURfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX01ESU9fQklUQkFORyBpcyBub3Qgc2V0CitDT05GSUdfTkVUX0VUSEVSTkVUPXkKK0NPTkZJR19NSUk9eQorIyBDT05GSUdfTUFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19CTUFDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBUFBZTUVBTCBpcyBub3Qgc2V0CisjIENPTkZJR19TVU5HRU0gaXMgbm90IHNldAorIyBDT05GSUdfQ0FTU0lOSSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfVkVORE9SXzNDT00gaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1RVTElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hQMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19aTUlJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19SR01JSSBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfVEFIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19FTUFDNCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfUENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CitDT05GSUdfTkVUREVWXzEwMDA9eQorIyBDT05GSUdfQUNFTklDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RMMksgaXMgbm90IHNldAorIyBDT05GSUdfRTEwMDAgaXMgbm90IHNldAorIyBDT05GSUdfRTEwMDBFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQMTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19JR0IgaXMgbm90IHNldAorIyBDT05GSUdfTlM4MzgyMCBpcyBub3Qgc2V0CisjIENPTkZJR19IQU1BQ0hJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1lFTExPV0ZJTiBpcyBub3Qgc2V0CisjIENPTkZJR19SODE2OSBpcyBub3Qgc2V0CisjIENPTkZJR19TSVMxOTAgaXMgbm90IHNldAorIyBDT05GSUdfU0tHRSBpcyBub3Qgc2V0CisjIENPTkZJR19TS1kyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJQV9WRUxPQ0lUWSBpcyBub3Qgc2V0CisjIENPTkZJR19USUdPTjMgaXMgbm90IHNldAorIyBDT05GSUdfQk5YMiBpcyBub3Qgc2V0CitDT05GSUdfR0lBTkZBUj15CisjIENPTkZJR19NVjY0M1hYX0VUSCBpcyBub3Qgc2V0CisjIENPTkZJR19RTEEzWFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTDEgaXMgbm90IHNldAorIyBDT05GSUdfQVRMMUUgaXMgbm90IHNldAorQ09ORklHX05FVERFVl8xMDAwMD15CisjIENPTkZJR19DSEVMU0lPX1QxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NIRUxTSU9fVDMgaXMgbm90IHNldAorIyBDT05GSUdfSVhHQkUgaXMgbm90IHNldAorIyBDT05GSUdfSVhHQiBpcyBub3Qgc2V0CisjIENPTkZJR19TMklPIGlzIG5vdCBzZXQKKyMgQ09ORklHX01ZUkkxMEdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVFhFTl9OSUMgaXMgbm90IHNldAorIyBDT05GSUdfTklVIGlzIG5vdCBzZXQKKyMgQ09ORklHX01MWDRfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19URUhVVEkgaXMgbm90IHNldAorIyBDT05GSUdfQk5YMlggaXMgbm90IHNldAorIyBDT05GSUdfU0ZDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RSIGlzIG5vdCBzZXQKKworIworIyBXaXJlbGVzcyBMQU4KKyMKKyMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19JV0xXSUZJX0xFRFMgaXMgbm90IHNldAorCisjCisjIFVTQiBOZXR3b3JrIEFkYXB0ZXJzCisjCisjIENPTkZJR19VU0JfQ0FUQyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfS0FXRVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9QRUdBU1VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9SVEw4MTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9VU0JORVQgaXMgbm90IHNldAorIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZEREkgaXMgbm90IHNldAorIyBDT05GSUdfSElQUEkgaXMgbm90IHNldAorIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMSVAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0ZDIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAorIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lTRE4gaXMgbm90IHNldAorIyBDT05GSUdfUEhPTkUgaXMgbm90IHNldAorCisjCisjIElucHV0IGRldmljZSBzdXBwb3J0CisjCitDT05GSUdfSU5QVVQ9eQorIyBDT05GSUdfSU5QVVRfRkZfTUVNTEVTUyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9QT0xMREVWIGlzIG5vdCBzZXQKKworIworIyBVc2VybGFuZCBpbnRlcmZhY2VzCisjCisjIENPTkZJR19JTlBVVF9NT1VTRURFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9KT1lERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfRVZERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfRVZCVUcgaXMgbm90IHNldAorCisjCisjIElucHV0IERldmljZSBEcml2ZXJzCisjCisjIENPTkZJR19JTlBVVF9LRVlCT0FSRCBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9NT1VTRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9UQUJMRVQgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU4gaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfTUlTQyBpcyBub3Qgc2V0CisKKyMKKyMgSGFyZHdhcmUgSS9PIHBvcnRzCisjCitDT05GSUdfU0VSSU89eQorQ09ORklHX1NFUklPX0k4MDQyPXkKK0NPTkZJR19TRVJJT19TRVJQT1JUPXkKKyMgQ09ORklHX1NFUklPX1BDSVBTMiBpcyBub3Qgc2V0CitDT05GSUdfU0VSSU9fTElCUFMyPXkKKyMgQ09ORklHX1NFUklPX1JBVyBpcyBub3Qgc2V0CisjIENPTkZJR19TRVJJT19YSUxJTlhfWFBTX1BTMiBpcyBub3Qgc2V0CisjIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgQ2hhcmFjdGVyIGRldmljZXMKKyMKK0NPTkZJR19WVD15CitDT05GSUdfQ09OU09MRV9UUkFOU0xBVElPTlM9eQorQ09ORklHX1ZUX0NPTlNPTEU9eQorQ09ORklHX0hXX0NPTlNPTEU9eQorIyBDT05GSUdfVlRfSFdfQ09OU09MRV9CSU5ESU5HIGlzIG5vdCBzZXQKK0NPTkZJR19ERVZLTUVNPXkKKyMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0CisjIENPTkZJR19OT1pPTUkgaXMgbm90IHNldAorCisjCisjIFNlcmlhbCBkcml2ZXJzCisjCitDT05GSUdfU0VSSUFMXzgyNTA9eQorQ09ORklHX1NFUklBTF84MjUwX0NPTlNPTEU9eQorQ09ORklHX1NFUklBTF84MjUwX1BDST15CitDT05GSUdfU0VSSUFMXzgyNTBfTlJfVUFSVFM9MgorQ09ORklHX1NFUklBTF84MjUwX1JVTlRJTUVfVUFSVFM9MgorQ09ORklHX1NFUklBTF84MjUwX0VYVEVOREVEPXkKK0NPTkZJR19TRVJJQUxfODI1MF9NQU5ZX1BPUlRTPXkKK0NPTkZJR19TRVJJQUxfODI1MF9TSEFSRV9JUlE9eQorQ09ORklHX1NFUklBTF84MjUwX0RFVEVDVF9JUlE9eQorQ09ORklHX1NFUklBTF84MjUwX1JTQT15CisKKyMKKyMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAorIworIyBDT05GSUdfU0VSSUFMX1VBUlRMSVRFIGlzIG5vdCBzZXQKK0NPTkZJR19TRVJJQUxfQ09SRT15CitDT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15CisjIENPTkZJR19TRVJJQUxfUE1BQ1pJTE9HIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFUklBTF9KU00gaXMgbm90IHNldAorIyBDT05GSUdfU0VSSUFMX09GX1BMQVRGT1JNIGlzIG5vdCBzZXQKK0NPTkZJR19VTklYOThfUFRZUz15CitDT05GSUdfTEVHQUNZX1BUWVM9eQorQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MjU2CisjIENPTkZJR19CUklRX1BBTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hWQ19SVEFTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0CisjIENPTkZJR19IV19SQU5ET00gaXMgbm90IHNldAorQ09ORklHX05WUkFNPXkKKyMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0FQUExJQ09NIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAorIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CitDT05GSUdfREVWUE9SVD15CitDT05GSUdfSTJDPXkKK0NPTkZJR19JMkNfQk9BUkRJTkZPPXkKKyMgQ09ORklHX0kyQ19DSEFSREVWIGlzIG5vdCBzZXQKK0NPTkZJR19JMkNfSEVMUEVSX0FVVE89eQorCisjCisjIEkyQyBIYXJkd2FyZSBCdXMgc3VwcG9ydAorIworCisjCisjIFBDIFNNQnVzIGhvc3QgY29udHJvbGxlciBkcml2ZXJzCisjCisjIENPTkZJR19JMkNfQUxJMTUzNSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfQUxJMTU2MyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfQUxJMTVYMyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfQU1ENzU2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19BTUQ4MTExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19JODAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19JU0NIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19QSUlYNCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfTkZPUkNFMiBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU0lTNTU5NSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU0lTNjMwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TSVM5NlggaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1ZJQSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfVklBUFJPIGlzIG5vdCBzZXQKKworIworIyBNYWMgU01CdXMgaG9zdCBjb250cm9sbGVyIGRyaXZlcnMKKyMKKyMgQ09ORklHX0kyQ19IWURSQSBpcyBub3Qgc2V0CitDT05GSUdfSTJDX1BPV0VSTUFDPXkKKworIworIyBJMkMgc3lzdGVtIGJ1cyBkcml2ZXJzIChtb3N0bHkgZW1iZWRkZWQgLyBzeXN0ZW0tb24tY2hpcCkKKyMKK0NPTkZJR19JMkNfTVBDPXkKKyMgQ09ORklHX0kyQ19PQ09SRVMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NJTVRFQyBpcyBub3Qgc2V0CisKKyMKKyMgRXh0ZXJuYWwgSTJDL1NNQnVzIGFkYXB0ZXIgZHJpdmVycworIworIyBDT05GSUdfSTJDX1BBUlBPUlRfTElHSFQgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1RBT1NfRVZNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19USU5ZX1VTQiBpcyBub3Qgc2V0CisKKyMKKyMgR3JhcGhpY3MgYWRhcHRlciBJMkMvRERDIGNoYW5uZWwgZHJpdmVycworIworIyBDT05GSUdfSTJDX1ZPT0RPTzMgaXMgbm90IHNldAorCisjCisjIE90aGVyIEkyQy9TTUJ1cyBidXMgZHJpdmVycworIworIyBDT05GSUdfSTJDX1BDQV9QTEFURk9STSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU1RVQiBpcyBub3Qgc2V0CisKKyMKKyMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CisjCisjIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAorIyBDT05GSUdfQVQyNCBpcyBub3Qgc2V0CitDT05GSUdfU0VOU09SU19FRVBST009eQorIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUENGODU5MSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX01BWDY4NzUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19CVVMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0NISVAgaXMgbm90IHNldAorIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX1dBTlRfT1BUSU9OQUxfR1BJT0xJQj15CisjIENPTkZJR19HUElPTElCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1cxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CisjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0CisjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAorIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAorCisjCisjIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQorIworQ09ORklHX1NTQl9QT1NTSUJMRT15CisjIENPTkZJR19TU0IgaXMgbm90IHNldAorCisjCisjIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01GRF9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0CisjIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKKworIworIyBNdWx0aW1lZGlhIGRldmljZXMKKyMKKworIworIyBNdWx0aW1lZGlhIGNvcmUgc3VwcG9ydAorIworIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKK0NPTkZJR19EVkJfQ09SRT1tCitDT05GSUdfVklERU9fTUVESUE9bQorCisjCisjIE11bHRpbWVkaWEgZHJpdmVycworIworIyBDT05GSUdfTUVESUFfQVRUQUNIIGlzIG5vdCBzZXQKK0NPTkZJR19NRURJQV9UVU5FUj1tCisjIENPTkZJR19NRURJQV9UVU5FUl9DVVNUT01JWkUgaXMgbm90IHNldAorQ09ORklHX01FRElBX1RVTkVSX1NJTVBMRT1tCitDT05GSUdfTUVESUFfVFVORVJfVERBODI5MD1tCitDT05GSUdfTUVESUFfVFVORVJfVERBOTg4Nz1tCitDT05GSUdfTUVESUFfVFVORVJfVEVBNTc2MT1tCitDT05GSUdfTUVESUFfVFVORVJfVEVBNTc2Nz1tCitDT05GSUdfTUVESUFfVFVORVJfTVQyMFhYPW0KK0NPTkZJR19NRURJQV9UVU5FUl9YQzIwMjg9bQorQ09ORklHX01FRElBX1RVTkVSX1hDNTAwMD1tCitDT05GSUdfRFZCX0NBUFRVUkVfRFJJVkVSUz15CisKKyMKKyMgU3VwcG9ydGVkIFNBQTcxNDYgYmFzZWQgUENJIEFkYXB0ZXJzCisjCisjIENPTkZJR19UVFBDSV9FRVBST00gaXMgbm90IHNldAorIyBDT05GSUdfRFZCX0JVREdFVF9DT1JFIGlzIG5vdCBzZXQKKworIworIyBTdXBwb3J0ZWQgVVNCIEFkYXB0ZXJzCisjCisjIENPTkZJR19EVkJfVVNCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RWQl9UVFVTQl9CVURHRVQgaXMgbm90IHNldAorIyBDT05GSUdfRFZCX1RUVVNCX0RFQyBpcyBub3Qgc2V0CisjIENPTkZJR19EVkJfQ0lORVJHWVQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RWQl9TSUFOT19TTVMxWFhYIGlzIG5vdCBzZXQKKworIworIyBTdXBwb3J0ZWQgRmxleENvcElJIChCMkMyKSBBZGFwdGVycworIworIyBDT05GSUdfRFZCX0IyQzJfRkxFWENPUCBpcyBub3Qgc2V0CisKKyMKKyMgU3VwcG9ydGVkIEJUODc4IEFkYXB0ZXJzCisjCisKKyMKKyMgU3VwcG9ydGVkIFBsdXRvMiBBZGFwdGVycworIworIyBDT05GSUdfRFZCX1BMVVRPMiBpcyBub3Qgc2V0CisKKyMKKyMgU3VwcG9ydGVkIERWQiBGcm9udGVuZHMKKyMKKworIworIyBDdXN0b21pc2UgRFZCIEZyb250ZW5kcworIworIyBDT05GSUdfRFZCX0ZFX0NVU1RPTUlTRSBpcyBub3Qgc2V0CisKKyMKKyMgRFZCLVMgKHNhdGVsbGl0ZSkgZnJvbnRlbmRzCisjCisjIENPTkZJR19EVkJfQ1gyNDExMCBpcyBub3Qgc2V0CisjIENPTkZJR19EVkJfQ1gyNDEyMyBpcyBub3Qgc2V0CisjIENPTkZJR19EVkJfTVQzMTIgaXMgbm90IHNldAorIyBDT05GSUdfRFZCX1M1SDE0MjAgaXMgbm90IHNldAorIyBDT05GSUdfRFZCX1NUVjAyOTkgaXMgbm90IHNldAorIyBDT05GSUdfRFZCX1REQTgwODMgaXMgbm90IHNldAorIyBDT05GSUdfRFZCX1REQTEwMDg2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0RWQl9WRVMxWDkzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RWQl9UVU5FUl9JVEQxMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RWQl9UREE4MjZYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RWQl9UVUE2MTAwIGlzIG5vdCBzZXQKKworIworIyBEVkItVCAodGVycmVzdHJpYWwpIGZyb250ZW5kcworIworIyBDT05GSUdfRFZCX1NQODg3MCBpcyBub3Qgc2V0CisjIENPTkZJR19EVkJfU1A4ODdYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RWQl9DWDIyNzAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RWQl9DWDIyNzAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RWQl9EUlgzOTdYRCBpcyBub3Qgc2V0CisjIENPTkZJR19EVkJfTDY0NzgxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RWQl9UREExMDA0WCBpcyBub3Qgc2V0CisjIENPTkZJR19EVkJfTlhUNjAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19EVkJfTVQzNTIgaXMgbm90IHNldAorIyBDT05GSUdfRFZCX1pMMTAzNTMgaXMgbm90IHNldAorIyBDT05GSUdfRFZCX0RJQjMwMDBNQiBpcyBub3Qgc2V0CisjIENPTkZJR19EVkJfRElCMzAwME1DIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RWQl9ESUI3MDAwTSBpcyBub3Qgc2V0CisjIENPTkZJR19EVkJfRElCNzAwMFAgaXMgbm90IHNldAorIyBDT05GSUdfRFZCX1REQTEwMDQ4IGlzIG5vdCBzZXQKKworIworIyBEVkItQyAoY2FibGUpIGZyb250ZW5kcworIworIyBDT05GSUdfRFZCX1ZFUzE4MjAgaXMgbm90IHNldAorIyBDT05GSUdfRFZCX1REQTEwMDIxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RWQl9UREExMDAyMyBpcyBub3Qgc2V0CisjIENPTkZJR19EVkJfU1RWMDI5NyBpcyBub3Qgc2V0CisKKyMKKyMgQVRTQyAoTm9ydGggQW1lcmljYW4vS29yZWFuIFRlcnJlc3RyaWFsL0NhYmxlIERUVikgZnJvbnRlbmRzCisjCisjIENPTkZJR19EVkJfTlhUMjAwWCBpcyBub3Qgc2V0CisjIENPTkZJR19EVkJfT1I1MTIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19EVkJfT1I1MTEzMiBpcyBub3Qgc2V0CisjIENPTkZJR19EVkJfQkNNMzUxMCBpcyBub3Qgc2V0CisjIENPTkZJR19EVkJfTEdEVDMzMFggaXMgbm90IHNldAorIyBDT05GSUdfRFZCX1M1SDE0MDkgaXMgbm90IHNldAorIyBDT05GSUdfRFZCX0FVODUyMiBpcyBub3Qgc2V0CisjIENPTkZJR19EVkJfUzVIMTQxMSBpcyBub3Qgc2V0CisKKyMKKyMgRGlnaXRhbCB0ZXJyZXN0cmlhbCBvbmx5IHR1bmVycy9QTEwKKyMKKyMgQ09ORklHX0RWQl9QTEwgaXMgbm90IHNldAorIyBDT05GSUdfRFZCX1RVTkVSX0RJQjAwNzAgaXMgbm90IHNldAorCisjCisjIFNFQyBjb250cm9sIGRldmljZXMgZm9yIERWQi1TCisjCisjIENPTkZJR19EVkJfTE5CUDIxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RWQl9JU0w2NDA1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0RWQl9JU0w2NDIxIGlzIG5vdCBzZXQKK0NPTkZJR19EQUI9eQorIyBDT05GSUdfVVNCX0RBQlVTQiBpcyBub3Qgc2V0CisKKyMKKyMgR3JhcGhpY3Mgc3VwcG9ydAorIworIyBDT05GSUdfQUdQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CisjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CitDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0w9eQorIyBDT05GSUdfRkIgaXMgbm90IHNldAorIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKKworIworIyBEaXNwbGF5IGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19ESVNQTEFZX1NVUFBPUlQgaXMgbm90IHNldAorCisjCisjIENvbnNvbGUgZGlzcGxheSBkcml2ZXIgc3VwcG9ydAorIworQ09ORklHX1ZHQV9DT05TT0xFPXkKKyMgQ09ORklHX1ZHQUNPTl9TT0ZUX1NDUk9MTEJBQ0sgaXMgbm90IHNldAorQ09ORklHX0RVTU1ZX0NPTlNPTEU9eQorQ09ORklHX1NPVU5EPXkKK0NPTkZJR19TTkQ9eQorQ09ORklHX1NORF9USU1FUj15CitDT05GSUdfU05EX1BDTT15CisjIENPTkZJR19TTkRfU0VRVUVOQ0VSIGlzIG5vdCBzZXQKK0NPTkZJR19TTkRfT1NTRU1VTD15CitDT05GSUdfU05EX01JWEVSX09TUz15CitDT05GSUdfU05EX1BDTV9PU1M9eQorQ09ORklHX1NORF9QQ01fT1NTX1BMVUdJTlM9eQorIyBDT05GSUdfU05EX0RZTkFNSUNfTUlOT1JTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9TVVBQT1JUX09MRF9BUEkgaXMgbm90IHNldAorQ09ORklHX1NORF9WRVJCT1NFX1BST0NGUz15CisjIENPTkZJR19TTkRfVkVSQk9TRV9QUklOVEsgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19TTkRfVk1BU1RFUj15CitDT05GSUdfU05EX0FDOTdfQ09ERUM9eQorQ09ORklHX1NORF9EUklWRVJTPXkKKyMgQ09ORklHX1NORF9EVU1NWSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfTVRQQVYgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1NFUklBTF9VMTY1NTAgaXMgbm90IHNldAorIyBDT05GSUdfU05EX01QVTQwMSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfQUM5N19QT1dFUl9TQVZFIGlzIG5vdCBzZXQKK0NPTkZJR19TTkRfUENJPXkKKyMgQ09ORklHX1NORF9BRDE4ODkgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0FMUzMwMCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfQUxTNDAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfQUxJNTQ1MSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfQVRJSVhQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9BVElJWFBfTU9ERU0gaXMgbm90IHNldAorIyBDT05GSUdfU05EX0FVODgxMCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfQVU4ODIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9BVTg4MzAgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0FXMiBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfQVpUMzMyOCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfQlQ4N1ggaXMgbm90IHNldAorIyBDT05GSUdfU05EX0NBMDEwNiBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfQ01JUENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9PWFlHRU4gaXMgbm90IHNldAorIyBDT05GSUdfU05EX0NTNDI4MSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfQ1M0NlhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9DUzU1MzAgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0RBUkxBMjAgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0dJTkEyMCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfTEFZTEEyMCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfREFSTEEyNCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfR0lOQTI0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9MQVlMQTI0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9NT05BIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9NSUEgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0VDSE8zRyBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfSU5ESUdPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9JTkRJR09JTyBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfSU5ESUdPREogaXMgbm90IHNldAorIyBDT05GSUdfU05EX0VNVTEwSzEgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0VNVTEwSzFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9FTlMxMzcwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9FTlMxMzcxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9FUzE5MzggaXMgbm90IHNldAorIyBDT05GSUdfU05EX0VTMTk2OCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfRk04MDEgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0hEQV9JTlRFTCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfSERTUCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfSERTUE0gaXMgbm90IHNldAorIyBDT05GSUdfU05EX0hJRklFUiBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfSUNFMTcxMiBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfSUNFMTcyNCBpcyBub3Qgc2V0CitDT05GSUdfU05EX0lOVEVMOFgwPXkKKyMgQ09ORklHX1NORF9JTlRFTDhYME0gaXMgbm90IHNldAorIyBDT05GSUdfU05EX0tPUkcxMjEyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9NQUVTVFJPMyBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfTUlYQVJUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9OTTI1NiBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfUENYSFIgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1JJUFRJREUgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1JNRTMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9STUU5NiBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfUk1FOTY1MiBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfU09OSUNWSUJFUyBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfVFJJREVOVCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfVklBODJYWCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfVklBODJYWF9NT0RFTSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfVklSVFVPU08gaXMgbm90IHNldAorIyBDT05GSUdfU05EX1ZYMjIyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9ZTUZQQ0kgaXMgbm90IHNldAorQ09ORklHX1NORF9QUEM9eQorIyBDT05GSUdfU05EX1BPV0VSTUFDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9BT0EgaXMgbm90IHNldAorQ09ORklHX1NORF9VU0I9eQorIyBDT05GSUdfU05EX1VTQl9BVURJTyBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfVVNCX1VTWDJZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9VU0JfQ0FJQVEgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1NPQyBpcyBub3Qgc2V0CisjIENPTkZJR19TT1VORF9QUklNRSBpcyBub3Qgc2V0CitDT05GSUdfQUM5N19CVVM9eQorQ09ORklHX0hJRF9TVVBQT1JUPXkKK0NPTkZJR19ISUQ9eQorIyBDT05GSUdfSElEX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRFJBVyBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIElucHV0IERldmljZXMKKyMKK0NPTkZJR19VU0JfSElEPXkKKyMgQ09ORklHX1VTQl9ISURJTlBVVF9QT1dFUkJPT0sgaXMgbm90IHNldAorIyBDT05GSUdfSElEX0ZGIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9ISURERVYgaXMgbm90IHNldAorQ09ORklHX1VTQl9TVVBQT1JUPXkKK0NPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKK0NPTkZJR19VU0JfQVJDSF9IQVNfT0hDST15CitDT05GSUdfVVNCX0FSQ0hfSEFTX0VIQ0k9eQorQ09ORklHX1VTQj15CisjIENPTkZJR19VU0JfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FOTk9VTkNFX05FV19ERVZJQ0VTIGlzIG5vdCBzZXQKKworIworIyBNaXNjZWxsYW5lb3VzIFVTQiBvcHRpb25zCisjCitDT05GSUdfVVNCX0RFVklDRUZTPXkKK0NPTkZJR19VU0JfREVWSUNFX0NMQVNTPXkKKyMgQ09ORklHX1VTQl9EWU5BTUlDX01JTk9SUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1RHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PVEdfV0hJVEVMSVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PVEdfQkxBQ0tMSVNUX0hVQiBpcyBub3Qgc2V0CitDT05GSUdfVVNCX01PTj15CisKKyMKKyMgVVNCIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCisjCisjIENPTkZJR19VU0JfQzY3WDAwX0hDRCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0VIQ0lfSENEPXkKKyMgQ09ORklHX1VTQl9FSENJX1JPT1RfSFVCX1RUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9FSENJX1RUX05FV1NDSEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9FSENJX0ZTTCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0VIQ0lfSENEX1BQQ19PRj15CisjIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTUDE3NjBfSENEIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfT0hDSV9IQ0Q9eQorQ09ORklHX1VTQl9PSENJX0hDRF9QUENfT0Y9eQorQ09ORklHX1VTQl9PSENJX0hDRF9QUENfT0ZfQkU9eQorQ09ORklHX1VTQl9PSENJX0hDRF9QUENfT0ZfTEU9eQorQ09ORklHX1VTQl9PSENJX0hDRF9QQ0k9eQorQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fREVTQz15CitDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9NTUlPPXkKK0NPTkZJR19VU0JfT0hDSV9MSVRUTEVfRU5ESUFOPXkKKyMgQ09ORklHX1VTQl9VSENJX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0w4MTFfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9SOEE2NjU5N19IQ0QgaXMgbm90IHNldAorCisjCisjIFVTQiBEZXZpY2UgQ2xhc3MgZHJpdmVycworIworIyBDT05GSUdfVVNCX0FDTSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUFJJTlRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfV0RNIGlzIG5vdCBzZXQKKworIworIyBOT1RFOiBVU0JfU1RPUkFHRSBlbmFibGVzIFNDU0ksIGFuZCAnU0NTSSBkaXNrIHN1cHBvcnQnCisjCisKKyMKKyMgbWF5IGFsc28gYmUgbmVlZGVkOyBzZWUgVVNCX1NUT1JBR0UgSGVscCBmb3IgbW9yZSBpbmZvcm1hdGlvbgorIworQ09ORklHX1VTQl9TVE9SQUdFPXkKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0RBVEFGQUIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfRlJFRUNPTSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9JU0QyMDAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfRFBDTSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9VU0JBVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9TRERSMDkgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjU1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0pVTVBTSE9UIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0FMQVVEQSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9PTkVUT1VDSCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9LQVJNQSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9TSUVSUkEgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfQ1lQUkVTU19BVEFDQiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTElCVVNVQUwgaXMgbm90IHNldAorCisjCisjIFVTQiBJbWFnaW5nIGRldmljZXMKKyMKKyMgQ09ORklHX1VTQl9NREM4MDAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX01JQ1JPVEVLIGlzIG5vdCBzZXQKKworIworIyBVU0IgcG9ydCBkcml2ZXJzCisjCisjIENPTkZJR19VU0JfU0VSSUFMIGlzIG5vdCBzZXQKKworIworIyBVU0IgTWlzY2VsbGFuZW91cyBkcml2ZXJzCisjCisjIENPTkZJR19VU0JfRU1JNjIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0VNSTI2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BRFVUVVggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1JJTzUwMCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTEVHT1RPV0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0JFUlJZX0NIQVJHRSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9DWVBSRVNTX0NZN0M2MyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQ1lUSEVSTSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUEhJREdFVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSURNT1VTRSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRlRESV9FTEFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BUFBMRURJU1BMQVkgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NJU1VTQlZHQSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTEQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1RSQU5DRVZJQlJBVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JT1dBUlJJT1IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTSUdIVEZXIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAorIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FDQ0VTU0lCSUxJVFkgaXMgbm90IHNldAorIyBDT05GSUdfSU5GSU5JQkFORCBpcyBub3Qgc2V0CisjIENPTkZJR19FREFDIGlzIG5vdCBzZXQKK0NPTkZJR19SVENfTElCPXkKK0NPTkZJR19SVENfQ0xBU1M9eQorQ09ORklHX1JUQ19IQ1RPU1lTPXkKK0NPTkZJR19SVENfSENUT1NZU19ERVZJQ0U9InJ0YzAiCisjIENPTkZJR19SVENfREVCVUcgaXMgbm90IHNldAorCisjCisjIFJUQyBpbnRlcmZhY2VzCisjCitDT05GSUdfUlRDX0lOVEZfU1lTRlM9eQorQ09ORklHX1JUQ19JTlRGX1BST0M9eQorQ09ORklHX1JUQ19JTlRGX0RFVj15CisjIENPTkZJR19SVENfSU5URl9ERVZfVUlFX0VNVUwgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9URVNUIGlzIG5vdCBzZXQKKworIworIyBJMkMgUlRDIGRyaXZlcnMKKyMKKyMgQ09ORklHX1JUQ19EUlZfRFMxMzA3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxMzc0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNjcyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTUFYNjkwMCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JTNUMzNzIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9JU0wxMjA4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfWDEyMDUgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUENGODU4MyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000MVQ4MCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1MzNTM5MEEgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9GTTMxMzAgaXMgbm90IHNldAorCisjCisjIFNQSSBSVEMgZHJpdmVycworIworCisjCisjIFBsYXRmb3JtIFJUQyBkcml2ZXJzCisjCitDT05GSUdfUlRDX0RSVl9DTU9TPXkKKyMgQ09ORklHX1JUQ19EUlZfRFMxNTExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNTUzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNzQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfU1RLMTdUQTggaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDhUODYgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDhUNTkgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9WMzAyMCBpcyBub3Qgc2V0CisKKyMKKyMgb24tQ1BVIFJUQyBkcml2ZXJzCisjCisjIENPTkZJR19SVENfRFJWX1BQQyBpcyBub3Qgc2V0CisjIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VJTyBpcyBub3Qgc2V0CisKKyMKKyMgRmlsZSBzeXN0ZW1zCisjCitDT05GSUdfRVhUMl9GUz15CisjIENPTkZJR19FWFQyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDJfRlNfWElQIGlzIG5vdCBzZXQKK0NPTkZJR19FWFQzX0ZTPXkKK0NPTkZJR19FWFQzX0ZTX1hBVFRSPXkKKyMgQ09ORklHX0VYVDNfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDNfRlNfU0VDVVJJVFkgaXMgbm90IHNldAorIyBDT05GSUdfRVhUNERFVl9GUyBpcyBub3Qgc2V0CitDT05GSUdfSkJEPXkKK0NPTkZJR19GU19NQkNBQ0hFPXkKKyMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAorIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19ETk9USUZZPXkKK0NPTkZJR19JTk9USUZZPXkKK0NPTkZJR19JTk9USUZZX1VTRVI9eQorIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAorIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVVE9GUzRfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0CisKKyMKKyMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcworIworQ09ORklHX0lTTzk2NjBfRlM9bQorQ09ORklHX0pPTElFVD15CitDT05GSUdfWklTT0ZTPXkKK0NPTkZJR19VREZfRlM9bQorQ09ORklHX1VERl9OTFM9eQorCisjCisjIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKKyMKK0NPTkZJR19GQVRfRlM9eQorQ09ORklHX01TRE9TX0ZTPW0KK0NPTkZJR19WRkFUX0ZTPXkKK0NPTkZJR19GQVRfREVGQVVMVF9DT0RFUEFHRT00MzcKK0NPTkZJR19GQVRfREVGQVVMVF9JT0NIQVJTRVQ9Imlzbzg4NTktMSIKK0NPTkZJR19OVEZTX0ZTPXkKKyMgQ09ORklHX05URlNfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfTlRGU19SVyBpcyBub3Qgc2V0CisKKyMKKyMgUHNldWRvIGZpbGVzeXN0ZW1zCisjCitDT05GSUdfUFJPQ19GUz15CitDT05GSUdfUFJPQ19LQ09SRT15CitDT05GSUdfUFJPQ19TWVNDVEw9eQorQ09ORklHX1NZU0ZTPXkKK0NPTkZJR19UTVBGUz15CisjIENPTkZJR19UTVBGU19QT1NJWF9BQ0wgaXMgbm90IHNldAorIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBNaXNjZWxsYW5lb3VzIGZpbGVzeXN0ZW1zCisjCitDT05GSUdfQURGU19GUz1tCisjIENPTkZJR19BREZTX0ZTX1JXIGlzIG5vdCBzZXQKK0NPTkZJR19BRkZTX0ZTPW0KK0NPTkZJR19IRlNfRlM9bQorQ09ORklHX0hGU1BMVVNfRlM9bQorQ09ORklHX0JFRlNfRlM9bQorIyBDT05GSUdfQkVGU19ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfQkZTX0ZTPW0KK0NPTkZJR19FRlNfRlM9bQorQ09ORklHX0NSQU1GUz15CitDT05GSUdfVlhGU19GUz1tCisjIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19PTUZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19IUEZTX0ZTPW0KK0NPTkZJR19RTlg0RlNfRlM9bQorIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAorQ09ORklHX1NZU1ZfRlM9bQorQ09ORklHX1VGU19GUz1tCisjIENPTkZJR19VRlNfRlNfV1JJVEUgaXMgbm90IHNldAorIyBDT05GSUdfVUZTX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKK0NPTkZJR19ORlNfRlM9eQorQ09ORklHX05GU19WMz15CisjIENPTkZJR19ORlNfVjNfQUNMIGlzIG5vdCBzZXQKK0NPTkZJR19ORlNfVjQ9eQorQ09ORklHX1JPT1RfTkZTPXkKK0NPTkZJR19ORlNEPXkKKyMgQ09ORklHX05GU0RfVjMgaXMgbm90IHNldAorIyBDT05GSUdfTkZTRF9WNCBpcyBub3Qgc2V0CitDT05GSUdfTE9DS0Q9eQorQ09ORklHX0xPQ0tEX1Y0PXkKK0NPTkZJR19FWFBPUlRGUz15CitDT05GSUdfTkZTX0NPTU1PTj15CitDT05GSUdfU1VOUlBDPXkKK0NPTkZJR19TVU5SUENfR1NTPXkKK0NPTkZJR19SUENTRUNfR1NTX0tSQjU9eQorIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0CisjIENPTkZJR19TTUJfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0CisjIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAorCisjCisjIFBhcnRpdGlvbiBUeXBlcworIworQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRD15CisjIENPTkZJR19BQ09STl9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfT1NGX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19BTUlHQV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfQVRBUklfUEFSVElUSU9OIGlzIG5vdCBzZXQKK0NPTkZJR19NQUNfUEFSVElUSU9OPXkKK0NPTkZJR19NU0RPU19QQVJUSVRJT049eQorIyBDT05GSUdfQlNEX0RJU0tMQUJFTCBpcyBub3Qgc2V0CisjIENPTkZJR19NSU5JWF9TVUJQQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfU09MQVJJU19YODZfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VOSVhXQVJFX0RJU0tMQUJFTCBpcyBub3Qgc2V0CisjIENPTkZJR19MRE1fUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NHSV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfVUxUUklYX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19TVU5fUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tBUk1BX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19FRklfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU1Y2OF9QQVJUSVRJT04gaXMgbm90IHNldAorQ09ORklHX05MUz15CitDT05GSUdfTkxTX0RFRkFVTFQ9Imlzbzg4NTktMSIKKyMgQ09ORklHX05MU19DT0RFUEFHRV80MzcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzczNyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfNzc1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODU1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYxIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY5IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85MzYgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzk1MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85NDkgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg3NCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV84IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUxIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19BU0NJSSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8xIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV80IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV83IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzkgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMTMgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMTQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMTUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0tPSThfUiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfS09JOF9VIGlzIG5vdCBzZXQKK0NPTkZJR19OTFNfVVRGOD1tCisjIENPTkZJR19ETE0gaXMgbm90IHNldAorCisjCisjIExpYnJhcnkgcm91dGluZXMKKyMKK0NPTkZJR19CSVRSRVZFUlNFPXkKKyMgQ09ORklHX0dFTkVSSUNfRklORF9GSVJTVF9CSVQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDX0NDSVRUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKK0NPTkZJR19DUkNfVDEwRElGPXkKK0NPTkZJR19DUkNfSVRVX1Q9bQorQ09ORklHX0NSQzMyPXkKKyMgQ09ORklHX0NSQzcgaXMgbm90IHNldAorQ09ORklHX0xJQkNSQzMyQz1tCitDT05GSUdfWkxJQl9JTkZMQVRFPXkKK0NPTkZJR19QTElTVD15CitDT05GSUdfSEFTX0lPTUVNPXkKK0NPTkZJR19IQVNfSU9QT1JUPXkKK0NPTkZJR19IQVNfRE1BPXkKK0NPTkZJR19IQVZFX0xNQj15CisKKyMKKyMgS2VybmVsIGhhY2tpbmcKKyMKKyMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKK0NPTkZJR19FTkFCTEVfV0FSTl9ERVBSRUNBVEVEPXkKK0NPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CitDT05GSUdfRlJBTUVfV0FSTj0xMDI0CisjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CisjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19LRVJORUw9eQorIyBDT05GSUdfREVCVUdfU0hJUlEgaXMgbm90IHNldAorQ09ORklHX0RFVEVDVF9TT0ZUTE9DS1VQPXkKKyMgQ09ORklHX0JPT1RQQVJBTV9TT0ZUTE9DS1VQX1BBTklDIGlzIG5vdCBzZXQKK0NPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQ19WQUxVRT0wCitDT05GSUdfU0NIRURfREVCVUc9eQorIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19USU1FUl9TVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19PQkpFQ1RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMVUJfREVCVUdfT04gaXMgbm90IHNldAorIyBDT05GSUdfU0xVQl9TVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19NVVRFWEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0xPQ0tJTkdfQVBJX1NFTEZURVNUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0hJR0hNRU0gaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQlVHVkVSQk9TRSBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfSU5GTz15CisjIENPTkZJR19ERUJVR19WTSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19XUklURUNPVU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX01FTU9SWV9JTklUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAorIyBDT05GSUdfQk9PVF9QUklOVEtfREVMQVkgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSz15CitDT05GSUdfSEFWRV9GVFJBQ0U9eQorQ09ORklHX0hBVkVfRFlOQU1JQ19GVFJBQ0U9eQorIyBDT05GSUdfRlRSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDSEVEX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19DT05URVhUX1NXSVRDSF9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9BUkNIX0tHREI9eQorIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TVEFDS09WRVJGTE9XIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1BBR0VBTExPQyBpcyBub3Qgc2V0CisjIENPTkZJR19DT0RFX1BBVENISU5HX1NFTEZURVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZUUl9GSVhVUF9TRUxGVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19YTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lSUVNUQUNLUyBpcyBub3Qgc2V0CisjIENPTkZJR19CRElfU1dJVENIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPT1RYX1RFWFQgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0VBUkxZX0RFQlVHIGlzIG5vdCBzZXQKKworIworIyBTZWN1cml0eSBvcHRpb25zCisjCisjIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZX0ZJTEVfQ0FQQUJJTElUSUVTIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE89eQorCisjCisjIENyeXB0byBjb3JlIG9yIGhlbHBlcgorIworQ09ORklHX0NSWVBUT19BTEdBUEk9eQorQ09ORklHX0NSWVBUT19CTEtDSVBIRVI9eQorQ09ORklHX0NSWVBUT19IQVNIPXkKK0NPTkZJR19DUllQVE9fTUFOQUdFUj15CisjIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX05VTEwgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NSWVBURCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQVVUSEVOQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVEVTVCBpcyBub3Qgc2V0CisKKyMKKyMgQXV0aGVudGljYXRlZCBFbmNyeXB0aW9uIHdpdGggQXNzb2NpYXRlZCBEYXRhCisjCisjIENPTkZJR19DUllQVE9fQ0NNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HQ00gaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NFUUlWIGlzIG5vdCBzZXQKKworIworIyBCbG9jayBtb2RlcworIworQ09ORklHX0NSWVBUT19DQkM9eQorIyBDT05GSUdfQ1JZUFRPX0NUUiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ1RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19FQ0IgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0xSVyBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX1BDQkM9bQorIyBDT05GSUdfQ1JZUFRPX1hUUyBpcyBub3Qgc2V0CisKKyMKKyMgSGFzaCBtb2RlcworIworQ09ORklHX0NSWVBUT19ITUFDPXkKKyMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKKworIworIyBEaWdlc3QKKyMKKyMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX01ENT15CisjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDEyOCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMTYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQyNTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDMyMCBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX1NIQTE9bQorIyBDT05GSUdfQ1JZUFRPX1NIQTI1NiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0hBNTEyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19UR1IxOTIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1dQNTEyIGlzIG5vdCBzZXQKKworIworIyBDaXBoZXJzCisjCisjIENPTkZJR19DUllQVE9fQUVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19BTlVCSVMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FSQzQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0JMT1dGSVNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQU1FTExJQSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0FTVDUgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NBU1Q2IGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fREVTPXkKKyMgQ09ORklHX0NSWVBUT19GQ1JZUFQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0tIQVpBRCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0FMU0EyMCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0VFRCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0VSUEVOVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVEVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19UV09GSVNIIGlzIG5vdCBzZXQKKworIworIyBDb21wcmVzc2lvbgorIworIyBDT05GSUdfQ1JZUFRPX0RFRkxBVEUgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0xaTyBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0hXPXkKKyMgQ09ORklHX0NSWVBUT19ERVZfSElGTl83OTVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19ERVZfVEFMSVRPUyBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfQ0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfVklSVFVBTElaQVRJT04gaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODZ4eC9zYmM4NjQxZF9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84Nnh4L3NiYzg2NDFkX2RlZmNvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOTAwZjhmCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODZ4eC9zYmM4NjQxZF9kZWZjb25maWcKQEAgLTAsMCArMSwxNDgxIEBACisjCisjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjctcmM0CisjIFRodSBBdWcgMjEgMDA6NTI6MTUgMjAwOAorIworIyBDT05GSUdfUFBDNjQgaXMgbm90IHNldAorCisjCisjIFByb2Nlc3NvciBzdXBwb3J0CisjCitDT05GSUdfNnh4PXkKKyMgQ09ORklHX1BQQ184NXh4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ184eHggaXMgbm90IHNldAorIyBDT05GSUdfNDB4IGlzIG5vdCBzZXQKKyMgQ09ORklHXzQ0eCBpcyBub3Qgc2V0CisjIENPTkZJR19FMjAwIGlzIG5vdCBzZXQKK0NPTkZJR19QUENfRlBVPXkKK0NPTkZJR19BTFRJVkVDPXkKK0NPTkZJR19QUENfU1REX01NVT15CitDT05GSUdfUFBDX1NURF9NTVVfMzI9eQorIyBDT05GSUdfUFBDX01NX1NMSUNFUyBpcyBub3Qgc2V0CitDT05GSUdfU01QPXkKK0NPTkZJR19OUl9DUFVTPTIKK0NPTkZJR19QUEMzMj15CitDT05GSUdfV09SRF9TSVpFPTMyCitDT05GSUdfUFBDX01FUkdFPXkKK0NPTkZJR19NTVU9eQorQ09ORklHX0dFTkVSSUNfQ01PU19VUERBVEU9eQorQ09ORklHX0dFTkVSSUNfVElNRT15CitDT05GSUdfR0VORVJJQ19USU1FX1ZTWVNDQUxMPXkKK0NPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKK0NPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKKyMgQ09ORklHX0hBVkVfU0VUVVBfUEVSX0NQVV9BUkVBIGlzIG5vdCBzZXQKK0NPTkZJR19JUlFfUEVSX0NQVT15CitDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKK0NPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15CitDT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKK0NPTkZJR19SV1NFTV9YQ0hHQUREX0FMR09SSVRITT15CitDT05GSUdfR0VORVJJQ19MT0NLQlJFQUs9eQorQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMj15CitDT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKK0NPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CitDT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUPXkKKyMgQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVMgaXMgbm90IHNldAorQ09ORklHX1BQQz15CitDT05GSUdfRUFSTFlfUFJJTlRLPXkKK0NPTkZJR19HRU5FUklDX05WUkFNPXkKK0NPTkZJR19TQ0hFRF9OT19OT19PTUlUX0ZSQU1FX1BPSU5URVI9eQorQ09ORklHX0FSQ0hfTUFZX0hBVkVfUENfRkRDPXkKK0NPTkZJR19QUENfT0Y9eQorQ09ORklHX09GPXkKK0NPTkZJR19QUENfVURCR18xNjU1MD15CitDT05GSUdfR0VORVJJQ19UQlNZTkM9eQorQ09ORklHX0FVRElUX0FSQ0g9eQorQ09ORklHX0dFTkVSSUNfQlVHPXkKK0NPTkZJR19ERUZBVUxUX1VJTUFHRT15CisjIENPTkZJR19QUENfRENSX05BVElWRSBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfRENSX01NSU8gaXMgbm90IHNldAorQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKKworIworIyBHZW5lcmFsIHNldHVwCisjCitDT05GSUdfRVhQRVJJTUVOVEFMPXkKK0NPTkZJR19MT0NLX0tFUk5FTD15CitDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCitDT05GSUdfTE9DQUxWRVJTSU9OPSIiCitDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQorQ09ORklHX1NXQVA9eQorQ09ORklHX1NZU1ZJUEM9eQorQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKK0NPTkZJR19QT1NJWF9NUVVFVUU9eQorQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1Q9eQorQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1RfVjM9eQorIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKK0NPTkZJR19JS0NPTkZJRz15CitDT05GSUdfSUtDT05GSUdfUFJPQz15CitDT05GSUdfTE9HX0JVRl9TSElGVD0xNAorIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0CitDT05GSUdfR1JPVVBfU0NIRUQ9eQorQ09ORklHX0ZBSVJfR1JPVVBfU0NIRUQ9eQorIyBDT05GSUdfUlRfR1JPVVBfU0NIRUQgaXMgbm90IHNldAorQ09ORklHX1VTRVJfU0NIRUQ9eQorIyBDT05GSUdfQ0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNGU19ERVBSRUNBVEVEPXkKK0NPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyPXkKK0NPTkZJR19SRUxBWT15CisjIENPTkZJR19OQU1FU1BBQ0VTIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0lOSVRSRD15CitDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgorIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAorQ09ORklHX1NZU0NUTD15CitDT05GSUdfRU1CRURERUQ9eQorQ09ORklHX1NZU0NUTF9TWVNDQUxMPXkKK0NPTkZJR19LQUxMU1lNUz15CisjIENPTkZJR19LQUxMU1lNU19BTEwgaXMgbm90IHNldAorIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0CitDT05GSUdfSE9UUExVRz15CitDT05GSUdfUFJJTlRLPXkKK0NPTkZJR19CVUc9eQorQ09ORklHX0VMRl9DT1JFPXkKK0NPTkZJR19QQ1NQS1JfUExBVEZPUk09eQorQ09ORklHX0NPTVBBVF9CUks9eQorQ09ORklHX0JBU0VfRlVMTD15CitDT05GSUdfRlVURVg9eQorQ09ORklHX0FOT05fSU5PREVTPXkKK0NPTkZJR19FUE9MTD15CitDT05GSUdfU0lHTkFMRkQ9eQorQ09ORklHX1RJTUVSRkQ9eQorQ09ORklHX0VWRU5URkQ9eQorQ09ORklHX1NITUVNPXkKK0NPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CitDT05GSUdfU0xBQj15CisjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMT0IgaXMgbm90IHNldAorIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfT1BST0ZJTEU9eQorIyBDT05GSUdfS1BST0JFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTUz15CitDT05GSUdfSEFWRV9JT1JFTUFQX1BST1Q9eQorQ09ORklHX0hBVkVfS1BST0JFUz15CitDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKK0NPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKKyMgQ09ORklHX0hBVkVfRE1BX0FUVFJTIGlzIG5vdCBzZXQKK0NPTkZJR19VU0VfR0VORVJJQ19TTVBfSEVMUEVSUz15CisjIENPTkZJR19IQVZFX0NMSyBpcyBub3Qgc2V0CitDT05GSUdfUFJPQ19QQUdFX01PTklUT1I9eQorIyBDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVCBpcyBub3Qgc2V0CitDT05GSUdfU0xBQklORk89eQorQ09ORklHX1JUX01VVEVYRVM9eQorIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0CitDT05GSUdfQkFTRV9TTUFMTD0wCitDT05GSUdfTU9EVUxFUz15CisjIENPTkZJR19NT0RVTEVfRk9SQ0VfTE9BRCBpcyBub3Qgc2V0CitDT05GSUdfTU9EVUxFX1VOTE9BRD15CisjIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0CitDT05GSUdfS01PRD15CitDT05GSUdfU1RPUF9NQUNISU5FPXkKK0NPTkZJR19CTE9DSz15CisjIENPTkZJR19MQkQgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19MU0YgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAorCisjCisjIElPIFNjaGVkdWxlcnMKKyMKK0NPTkZJR19JT1NDSEVEX05PT1A9eQorQ09ORklHX0lPU0NIRURfQVM9eQorQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQorQ09ORklHX0lPU0NIRURfQ0ZRPXkKKyMgQ09ORklHX0RFRkFVTFRfQVMgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9DRlE9eQorIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImNmcSIKK0NPTkZJR19DTEFTU0lDX1JDVT15CisKKyMKKyMgUGxhdGZvcm0gc3VwcG9ydAorIworQ09ORklHX1BQQ19NVUxUSVBMQVRGT1JNPXkKK0NPTkZJR19DTEFTU0lDMzI9eQorIyBDT05GSUdfUFBDX0NIUlAgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX1BNQUMgaXMgbm90IHNldAorIyBDT05GSUdfTVBDNTEyMV9BRFMgaXMgbm90IHNldAorIyBDT05GSUdfTVBDNTEyMV9HRU5FUklDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19NUEM1Mnh4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19DRUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19DRUxMX05BVElWRSBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfODJ4eCBpcyBub3Qgc2V0CisjIENPTkZJR19QUTJBRFMgaXMgbm90IHNldAorIyBDT05GSUdfUFBDXzgzeHggaXMgbm90IHNldAorQ09ORklHX1BQQ184Nnh4PXkKKyMgQ09ORklHX01QQzg2NDFfSFBDTiBpcyBub3Qgc2V0CitDT05GSUdfU0JDODY0MUQ9eQorIyBDT05GSUdfTVBDODYxMF9IUENEIGlzIG5vdCBzZXQKK0NPTkZJR19NUEM4NjQxPXkKK0NPTkZJR19QUENfTkFUSVZFPXkKKyMgQ09ORklHX1VEQkdfUlRBU19DT05TT0xFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQSUMgaXMgbm90IHNldAorQ09ORklHX01QSUM9eQorIyBDT05GSUdfTVBJQ19XRUlSRCBpcyBub3Qgc2V0CitDT05GSUdfUFBDX0k4MjU5PXkKK0NPTkZJR19QUENfUlRBUz15CisjIENPTkZJR19SVEFTX0VSUk9SX0xPR0dJTkcgaXMgbm90IHNldAorQ09ORklHX1JUQVNfUFJPQz15CisjIENPTkZJR19NTUlPX05WUkFNIGlzIG5vdCBzZXQKK0NPTkZJR19QUENfTVBDMTA2PXkKKyMgQ09ORklHX1BQQ185NzBfTkFQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19JTkRJUkVDVF9JTyBpcyBub3Qgc2V0CisjIENPTkZJR19HRU5FUklDX0lPTUFQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9GUkVRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQzYwMV9TWU5DX0ZJWCBpcyBub3Qgc2V0CisjIENPTkZJR19UQVUgaXMgbm90IHNldAorIyBDT05GSUdfRlNMX1VMSTE1NzUgaXMgbm90IHNldAorCisjCisjIEtlcm5lbCBvcHRpb25zCisjCisjIENPTkZJR19ISUdITUVNIGlzIG5vdCBzZXQKK0NPTkZJR19USUNLX09ORVNIT1Q9eQorIyBDT05GSUdfTk9fSFogaXMgbm90IHNldAorQ09ORklHX0hJR0hfUkVTX1RJTUVSUz15CitDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UU19CVUlMRD15CisjIENPTkZJR19IWl8xMDAgaXMgbm90IHNldAorQ09ORklHX0haXzI1MD15CisjIENPTkZJR19IWl8zMDAgaXMgbm90IHNldAorIyBDT05GSUdfSFpfMTAwMCBpcyBub3Qgc2V0CitDT05GSUdfSFo9MjUwCitDT05GSUdfU0NIRURfSFJUSUNLPXkKKyMgQ09ORklHX1BSRUVNUFRfTk9ORSBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWSBpcyBub3Qgc2V0CitDT05GSUdfUFJFRU1QVD15CisjIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfQklORk1UX0VMRj15CitDT05GSUdfQklORk1UX01JU0M9bQorIyBDT05GSUdfSU9NTVVfSEVMUEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hPVFBMVUdfQ1BVIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVRz15CitDT05GSUdfQVJDSF9IQVNfV0FMS19NRU1PUlk9eQorQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RSRU1PVkU9eQorIyBDT05GSUdfS0VYRUMgaXMgbm90IHNldAorQ09ORklHX0lSUV9BTExfQ1BVUz15CitDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CitDT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQorQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQorQ09ORklHX0ZMQVRNRU1fTUFOVUFMPXkKKyMgQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUwgaXMgbm90IHNldAorIyBDT05GSUdfU1BBUlNFTUVNX01BTlVBTCBpcyBub3Qgc2V0CitDT05GSUdfRkxBVE1FTT15CitDT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQorIyBDT05GSUdfU1BBUlNFTUVNX1NUQVRJQyBpcyBub3Qgc2V0CisjIENPTkZJR19TUEFSU0VNRU1fVk1FTU1BUF9FTkFCTEUgaXMgbm90IHNldAorQ09ORklHX1BBR0VGTEFHU19FWFRFTkRFRD15CitDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAorQ09ORklHX01JR1JBVElPTj15CisjIENPTkZJR19SRVNPVVJDRVNfNjRCSVQgaXMgbm90IHNldAorQ09ORklHX1pPTkVfRE1BX0ZMQUc9MQorQ09ORklHX0JPVU5DRT15CitDT05GSUdfVklSVF9UT19CVVM9eQorQ09ORklHX0ZPUkNFX01BWF9aT05FT1JERVI9MTEKKyMgQ09ORklHX1BST0NfREVWSUNFVFJFRSBpcyBub3Qgc2V0CisjIENPTkZJR19DTURMSU5FX0JPT0wgaXMgbm90IHNldAorQ09ORklHX0VYVFJBX1RBUkdFVFM9IiIKKyMgQ09ORklHX1BNIGlzIG5vdCBzZXQKK0NPTkZJR19TRUNDT01QPXkKK0NPTkZJR19JU0FfRE1BX0FQST15CisKKyMKKyMgQnVzIG9wdGlvbnMKKyMKKyMgQ09ORklHX0lTQSBpcyBub3Qgc2V0CitDT05GSUdfWk9ORV9ETUE9eQorQ09ORklHX0dFTkVSSUNfSVNBX0RNQT15CitDT05GSUdfUFBDX0lORElSRUNUX1BDST15CitDT05GSUdfRlNMX1NPQz15CitDT05GSUdfRlNMX1BDST15CitDT05GSUdfUFBDX1BDSV9DSE9JQ0U9eQorQ09ORklHX1BDST15CitDT05GSUdfUENJX0RPTUFJTlM9eQorQ09ORklHX1BDSV9TWVNDQUxMPXkKK0NPTkZJR19QQ0lFUE9SVEJVUz15CitDT05GSUdfUENJRUFFUj15CisjIENPTkZJR19QQ0lFQVNQTSBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9TVVBQT1JUU19NU0k9eQorIyBDT05GSUdfUENJX01TSSBpcyBub3Qgc2V0CitDT05GSUdfUENJX0xFR0FDWT15CisjIENPTkZJR19QQ0lfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hPVFBMVUdfUENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBU19SQVBJRElPIGlzIG5vdCBzZXQKKworIworIyBBZHZhbmNlZCBzZXR1cAorIworIyBDT05GSUdfQURWQU5DRURfT1BUSU9OUyBpcyBub3Qgc2V0CisKKyMKKyMgRGVmYXVsdCBzZXR0aW5ncyBmb3IgYWR2YW5jZWQgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSB1c2VkCisjCitDT05GSUdfTE9XTUVNX1NJWkU9MHgzMDAwMDAwMAorQ09ORklHX1BBR0VfT0ZGU0VUPTB4YzAwMDAwMDAKK0NPTkZJR19LRVJORUxfU1RBUlQ9MHhjMDAwMDAwMAorQ09ORklHX1BIWVNJQ0FMX1NUQVJUPTB4MDAwMDAwMDAKK0NPTkZJR19UQVNLX1NJWkU9MHhjMDAwMDAwMAorQ09ORklHX05FVD15CisKKyMKKyMgTmV0d29ya2luZyBvcHRpb25zCisjCitDT05GSUdfUEFDS0VUPXkKK0NPTkZJR19QQUNLRVRfTU1BUD15CitDT05GSUdfVU5JWD15CitDT05GSUdfWEZSTT15CitDT05GSUdfWEZSTV9VU0VSPW0KKyMgQ09ORklHX1hGUk1fU1VCX1BPTElDWSBpcyBub3Qgc2V0CisjIENPTkZJR19YRlJNX01JR1JBVEUgaXMgbm90IHNldAorIyBDT05GSUdfWEZSTV9TVEFUSVNUSUNTIGlzIG5vdCBzZXQKK0NPTkZJR19YRlJNX0lQQ09NUD1tCitDT05GSUdfTkVUX0tFWT1tCisjIENPTkZJR19ORVRfS0VZX01JR1JBVEUgaXMgbm90IHNldAorQ09ORklHX0lORVQ9eQorQ09ORklHX0lQX01VTFRJQ0FTVD15CitDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSPXkKK0NPTkZJR19BU0tfSVBfRklCX0hBU0g9eQorIyBDT05GSUdfSVBfRklCX1RSSUUgaXMgbm90IHNldAorQ09ORklHX0lQX0ZJQl9IQVNIPXkKK0NPTkZJR19JUF9NVUxUSVBMRV9UQUJMRVM9eQorQ09ORklHX0lQX1JPVVRFX01VTFRJUEFUSD15CitDT05GSUdfSVBfUk9VVEVfVkVSQk9TRT15CitDT05GSUdfSVBfUE5QPXkKK0NPTkZJR19JUF9QTlBfREhDUD15CitDT05GSUdfSVBfUE5QX0JPT1RQPXkKK0NPTkZJR19JUF9QTlBfUkFSUD15CitDT05GSUdfTkVUX0lQSVA9bQorQ09ORklHX05FVF9JUEdSRT1tCitDT05GSUdfTkVUX0lQR1JFX0JST0FEQ0FTVD15CitDT05GSUdfSVBfTVJPVVRFPXkKK0NPTkZJR19JUF9QSU1TTV9WMT15CitDT05GSUdfSVBfUElNU01fVjI9eQorIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0CitDT05GSUdfU1lOX0NPT0tJRVM9eQorQ09ORklHX0lORVRfQUg9bQorQ09ORklHX0lORVRfRVNQPW0KK0NPTkZJR19JTkVUX0lQQ09NUD1tCitDT05GSUdfSU5FVF9YRlJNX1RVTk5FTD1tCitDT05GSUdfSU5FVF9UVU5ORUw9bQorQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVD15CitDT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMPXkKK0NPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUPXkKKyMgQ09ORklHX0lORVRfTFJPIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUX0RJQUc9eQorQ09ORklHX0lORVRfVENQX0RJQUc9eQorIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAorQ09ORklHX1RDUF9DT05HX0NVQklDPXkKK0NPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKKyMgQ09ORklHX1RDUF9NRDVTSUcgaXMgbm90IHNldAorIyBDT05GSUdfSVBfVlMgaXMgbm90IHNldAorQ09ORklHX0lQVjY9bQorIyBDT05GSUdfSVBWNl9QUklWQUNZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQVjZfUk9VVEVSX1BSRUYgaXMgbm90IHNldAorIyBDT05GSUdfSVBWNl9PUFRJTUlTVElDX0RBRCBpcyBub3Qgc2V0CitDT05GSUdfSU5FVDZfQUg9bQorQ09ORklHX0lORVQ2X0VTUD1tCitDT05GSUdfSU5FVDZfSVBDT01QPW0KKyMgQ09ORklHX0lQVjZfTUlQNiBpcyBub3Qgc2V0CitDT05GSUdfSU5FVDZfWEZSTV9UVU5ORUw9bQorQ09ORklHX0lORVQ2X1RVTk5FTD1tCitDT05GSUdfSU5FVDZfWEZSTV9NT0RFX1RSQU5TUE9SVD1tCitDT05GSUdfSU5FVDZfWEZSTV9NT0RFX1RVTk5FTD1tCitDT05GSUdfSU5FVDZfWEZSTV9NT0RFX0JFRVQ9bQorIyBDT05GSUdfSU5FVDZfWEZSTV9NT0RFX1JPVVRFT1BUSU1JWkFUSU9OIGlzIG5vdCBzZXQKK0NPTkZJR19JUFY2X1NJVD1tCitDT05GSUdfSVBWNl9ORElTQ19OT0RFVFlQRT15CitDT05GSUdfSVBWNl9UVU5ORUw9bQorIyBDT05GSUdfSVBWNl9NVUxUSVBMRV9UQUJMRVMgaXMgbm90IHNldAorIyBDT05GSUdfSVBWNl9NUk9VVEUgaXMgbm90IHNldAorIyBDT05GSUdfTkVUTEFCRUwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRGSUxURVI9eQorIyBDT05GSUdfTkVURklMVEVSX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRGSUxURVJfQURWQU5DRUQ9eQorQ09ORklHX0JSSURHRV9ORVRGSUxURVI9eQorCisjCisjIENvcmUgTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24KKyMKKyMgQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LX1FVRVVFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LX0xPRyBpcyBub3Qgc2V0CisjIENPTkZJR19ORl9DT05OVFJBQ0sgaXMgbm90IHNldAorQ09ORklHX05FVEZJTFRFUl9YVEFCTEVTPW0KKyMgQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfQ0xBU1NJRlkgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9EU0NQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTUFSSyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX05GUVVFVUUgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9ORkxPRyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX1JBVEVFU1QgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX1RDUE1TUyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX1RDUE9QVFNUUklQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9DT01NRU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9EQ0NQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9EU0NQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9FU1AgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0lQUkFOR0UgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0xFTkdUSCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTElNSVQgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX01BQyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTUFSSyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfT1dORVIgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1BPTElDWSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTVVMVElQT1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9QSFlTREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9QS1RUWVBFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9RVU9UQSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUkFURUVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUkVBTE0gaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NUQVRJU1RJQyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfU1RSSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9UQ1BNU1MgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1RJTUUgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1UzMiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfSEFTSExJTUlUIGlzIG5vdCBzZXQKKworIworIyBJUDogTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24KKyMKK0NPTkZJR19JUF9ORl9RVUVVRT1tCitDT05GSUdfSVBfTkZfSVBUQUJMRVM9bQorQ09ORklHX0lQX05GX01BVENIX1JFQ0VOVD1tCitDT05GSUdfSVBfTkZfTUFUQ0hfRUNOPW0KKyMgQ09ORklHX0lQX05GX01BVENIX0FIIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9ORl9NQVRDSF9UVEw9bQorQ09ORklHX0lQX05GX01BVENIX0FERFJUWVBFPW0KK0NPTkZJR19JUF9ORl9GSUxURVI9bQorQ09ORklHX0lQX05GX1RBUkdFVF9SRUpFQ1Q9bQorQ09ORklHX0lQX05GX1RBUkdFVF9MT0c9bQorQ09ORklHX0lQX05GX1RBUkdFVF9VTE9HPW0KK0NPTkZJR19JUF9ORl9NQU5HTEU9bQorQ09ORklHX0lQX05GX1RBUkdFVF9FQ049bQorIyBDT05GSUdfSVBfTkZfVEFSR0VUX1RUTCBpcyBub3Qgc2V0CitDT05GSUdfSVBfTkZfUkFXPW0KKyMgQ09ORklHX0lQX05GX1NFQ1VSSVRZIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9ORl9BUlBUQUJMRVM9bQorQ09ORklHX0lQX05GX0FSUEZJTFRFUj1tCitDT05GSUdfSVBfTkZfQVJQX01BTkdMRT1tCisKKyMKKyMgSVB2NjogTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24KKyMKK0NPTkZJR19JUDZfTkZfUVVFVUU9bQorQ09ORklHX0lQNl9ORl9JUFRBQkxFUz1tCitDT05GSUdfSVA2X05GX01BVENIX1JUPW0KK0NPTkZJR19JUDZfTkZfTUFUQ0hfT1BUUz1tCitDT05GSUdfSVA2X05GX01BVENIX0ZSQUc9bQorQ09ORklHX0lQNl9ORl9NQVRDSF9ITD1tCitDT05GSUdfSVA2X05GX01BVENIX0lQVjZIRUFERVI9bQorIyBDT05GSUdfSVA2X05GX01BVENIX0FIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQNl9ORl9NQVRDSF9NSCBpcyBub3Qgc2V0CitDT05GSUdfSVA2X05GX01BVENIX0VVSTY0PW0KK0NPTkZJR19JUDZfTkZfRklMVEVSPW0KK0NPTkZJR19JUDZfTkZfVEFSR0VUX0xPRz1tCisjIENPTkZJR19JUDZfTkZfVEFSR0VUX1JFSkVDVCBpcyBub3Qgc2V0CitDT05GSUdfSVA2X05GX01BTkdMRT1tCisjIENPTkZJR19JUDZfTkZfVEFSR0VUX0hMIGlzIG5vdCBzZXQKK0NPTkZJR19JUDZfTkZfUkFXPW0KKyMgQ09ORklHX0lQNl9ORl9TRUNVUklUWSBpcyBub3Qgc2V0CisKKyMKKyMgQnJpZGdlOiBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbgorIworIyBDT05GSUdfQlJJREdFX05GX0VCVEFCTEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAorQ09ORklHX0lQX1NDVFA9bQorIyBDT05GSUdfU0NUUF9EQkdfTVNHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDVFBfREJHX09CSkNOVCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1RQX0hNQUNfTk9ORSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1RQX0hNQUNfU0hBMSBpcyBub3Qgc2V0CitDT05GSUdfU0NUUF9ITUFDX01ENT15CitDT05GSUdfVElQQz1tCisjIENPTkZJR19USVBDX0FEVkFOQ0VEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJUENfREVCVUcgaXMgbm90IHNldAorQ09ORklHX0FUTT1tCitDT05GSUdfQVRNX0NMSVA9bQorIyBDT05GSUdfQVRNX0NMSVBfTk9fSUNNUCBpcyBub3Qgc2V0CitDT05GSUdfQVRNX0xBTkU9bQorQ09ORklHX0FUTV9NUE9BPW0KK0NPTkZJR19BVE1fQlIyNjg0PW0KKyMgQ09ORklHX0FUTV9CUjI2ODRfSVBGSUxURVIgaXMgbm90IHNldAorQ09ORklHX1NUUD1tCitDT05GSUdfQlJJREdFPW0KK0NPTkZJR19WTEFOXzgwMjFRPW0KKyMgQ09ORklHX1ZMQU5fODAyMVFfR1ZSUCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUNORVQgaXMgbm90IHNldAorQ09ORklHX0xMQz1tCisjIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQWCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0CisjIENPTkZJR19YMjUgaXMgbm90IHNldAorIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0CisjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAorQ09ORklHX1dBTl9ST1VURVI9bQorQ09ORklHX05FVF9TQ0hFRD15CisKKyMKKyMgUXVldWVpbmcvU2NoZWR1bGluZworIworQ09ORklHX05FVF9TQ0hfQ0JRPW0KK0NPTkZJR19ORVRfU0NIX0hUQj1tCitDT05GSUdfTkVUX1NDSF9IRlNDPW0KK0NPTkZJR19ORVRfU0NIX0FUTT1tCitDT05GSUdfTkVUX1NDSF9QUklPPW0KK0NPTkZJR19ORVRfU0NIX1JFRD1tCitDT05GSUdfTkVUX1NDSF9TRlE9bQorQ09ORklHX05FVF9TQ0hfVEVRTD1tCitDT05GSUdfTkVUX1NDSF9UQkY9bQorQ09ORklHX05FVF9TQ0hfR1JFRD1tCitDT05GSUdfTkVUX1NDSF9EU01BUks9bQorQ09ORklHX05FVF9TQ0hfTkVURU09bQorCisjCisjIENsYXNzaWZpY2F0aW9uCisjCitDT05GSUdfTkVUX0NMUz15CisjIENPTkZJR19ORVRfQ0xTX0JBU0lDIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRfQ0xTX1RDSU5ERVg9bQorQ09ORklHX05FVF9DTFNfUk9VVEU0PW0KK0NPTkZJR19ORVRfQ0xTX1JPVVRFPXkKK0NPTkZJR19ORVRfQ0xTX0ZXPW0KK0NPTkZJR19ORVRfQ0xTX1UzMj1tCisjIENPTkZJR19DTFNfVTMyX1BFUkYgaXMgbm90IHNldAorIyBDT05GSUdfQ0xTX1UzMl9NQVJLIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRfQ0xTX1JTVlA9bQorQ09ORklHX05FVF9DTFNfUlNWUDY9bQorIyBDT05GSUdfTkVUX0NMU19GTE9XIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9FTUFUQ0ggaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0NMU19BQ1QgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0NMU19JTkQgaXMgbm90IHNldAorQ09ORklHX05FVF9TQ0hfRklGTz15CisKKyMKKyMgTmV0d29yayB0ZXN0aW5nCisjCitDT05GSUdfTkVUX1BLVEdFTj1tCisjIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0CisjIENPTkZJR19DQU4gaXMgbm90IHNldAorIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0CisjIENPTkZJR19CVCBpcyBub3Qgc2V0CisjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CitDT05GSUdfRklCX1JVTEVTPXkKKworIworIyBXaXJlbGVzcworIworIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQzgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lFRUU4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKKworIworIyBEZXZpY2UgRHJpdmVycworIworCisjCisjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKKyMKK0NPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCitDT05GSUdfU1RBTkRBTE9ORT15CitDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CisjIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0RFVlJFUyBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0CisjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAorQ09ORklHX01URD15CisjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAorQ09ORklHX01URF9DT05DQVQ9eQorQ09ORklHX01URF9QQVJUSVRJT05TPXkKKyMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DTURMSU5FX1BBUlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9PRl9QQVJUUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQVI3X1BBUlRTIGlzIG5vdCBzZXQKKworIworIyBVc2VyIE1vZHVsZXMgQW5kIFRyYW5zbGF0aW9uIExheWVycworIworQ09ORklHX01URF9DSEFSPXkKK0NPTkZJR19NVERfQkxLREVWUz15CitDT05GSUdfTVREX0JMT0NLPXkKKyMgQ09ORklHX0ZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JGRF9GVEwgaXMgbm90IHNldAorIyBDT05GSUdfU1NGREMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX09PUFMgaXMgbm90IHNldAorCisjCisjIFJBTS9ST00vRmxhc2ggY2hpcCBkcml2ZXJzCisjCitDT05GSUdfTVREX0NGST15CisjIENPTkZJR19NVERfSkVERUNQUk9CRSBpcyBub3Qgc2V0CitDT05GSUdfTVREX0dFTl9QUk9CRT15CitDT05GSUdfTVREX0NGSV9BRFZfT1BUSU9OUz15CisjIENPTkZJR19NVERfQ0ZJX05PU1dBUCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ0ZJX0JFX0JZVEVfU1dBUCBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NGSV9MRV9CWVRFX1NXQVA9eQorIyBDT05GSUdfTVREX0NGSV9HRU9NRVRSWSBpcyBub3Qgc2V0CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE9eQorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8yPXkKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfND15CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfOCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMTYgaXMgbm90IHNldAorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzMyIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX0kxPXkKK0NPTkZJR19NVERfQ0ZJX0kyPXkKKyMgQ09ORklHX01URF9DRklfSTQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NGSV9JOCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfT1RQIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX0lOVEVMRVhUPXkKKyMgQ09ORklHX01URF9DRklfQU1EU1REIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DRklfU1RBQSBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NGSV9VVElMPXkKKyMgQ09ORklHX01URF9SQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX1JPTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQUJTRU5UIGlzIG5vdCBzZXQKKworIworIyBNYXBwaW5nIGRyaXZlcnMgZm9yIGNoaXAgYWNjZXNzCisjCisjIENPTkZJR19NVERfQ09NUExFWF9NQVBQSU5HUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUEhZU01BUCBpcyBub3Qgc2V0CitDT05GSUdfTVREX1BIWVNNQVBfT0Y9eQorIyBDT05GSUdfTVREX0lOVEVMX1ZSX05PUiBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUExBVFJBTSBpcyBub3Qgc2V0CisKKyMKKyMgU2VsZi1jb250YWluZWQgTVREIGRldmljZSBkcml2ZXJzCisjCisjIENPTkZJR19NVERfUE1DNTUxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9TTFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUEhSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX01URFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQkxPQ0syTVREIGlzIG5vdCBzZXQKKworIworIyBEaXNrLU9uLUNoaXAgRGV2aWNlIERyaXZlcnMKKyMKKyMgQ09ORklHX01URF9ET0MyMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ET0MyMDAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ET0MyMDAxUExVUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTkFORCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfT05FTkFORCBpcyBub3Qgc2V0CisKKyMKKyMgVUJJIC0gVW5zb3J0ZWQgYmxvY2sgaW1hZ2VzCisjCisjIENPTkZJR19NVERfVUJJIGlzIG5vdCBzZXQKK0NPTkZJR19PRl9ERVZJQ0U9eQorQ09ORklHX09GX0kyQz15CisjIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWPXkKKyMgQ09ORklHX0JMS19ERVZfRkQgaXMgbm90IHNldAorIyBDT05GSUdfTUFDX0ZMT1BQWSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfQ1BRX0RBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19DUFFfQ0lTU19EQSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0RBQzk2MCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1VNRU0gaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0xPT1A9bQorQ09ORklHX0JMS19ERVZfQ1JZUFRPTE9PUD1tCitDT05GSUdfQkxLX0RFVl9OQkQ9bQorIyBDT05GSUdfQkxLX0RFVl9TWDggaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfUkFNPXkKK0NPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgorQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9NDA5NgorIyBDT05GSUdfQkxLX0RFVl9YSVAgaXMgbm90IHNldAorIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9IRCBpcyBub3Qgc2V0CitDT05GSUdfTUlTQ19ERVZJQ0VTPXkKKyMgQ09ORklHX1BIQU5UT00gaXMgbm90IHNldAorIyBDT05GSUdfRUVQUk9NXzkzQ1g2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NHSV9JT0M0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJRk1fQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19FTkNMT1NVUkVfU0VSVklDRVMgaXMgbm90IHNldAorIyBDT05GSUdfSFBfSUxPIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0lERT15CisjIENPTkZJR19JREUgaXMgbm90IHNldAorCisjCisjIFNDU0kgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RNQSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAorIyBDT05GSUdfQVRBIGlzIG5vdCBzZXQKK0NPTkZJR19NRD15CitDT05GSUdfQkxLX0RFVl9NRD15CitDT05GSUdfTURfTElORUFSPXkKK0NPTkZJR19NRF9SQUlEMD15CitDT05GSUdfTURfUkFJRDE9eQorQ09ORklHX01EX1JBSUQxMD15CisjIENPTkZJR19NRF9SQUlENDU2IGlzIG5vdCBzZXQKK0NPTkZJR19NRF9NVUxUSVBBVEg9eQorQ09ORklHX01EX0ZBVUxUWT15CitDT05GSUdfQkxLX0RFVl9ETT15CisjIENPTkZJR19ETV9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfRE1fQ1JZUFQ9eQorQ09ORklHX0RNX1NOQVBTSE9UPXkKK0NPTkZJR19ETV9NSVJST1I9eQorQ09ORklHX0RNX1pFUk89eQorIyBDT05GSUdfRE1fTVVMVElQQVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNX0RFTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNX1VFVkVOVCBpcyBub3Qgc2V0CisjIENPTkZJR19GVVNJT04gaXMgbm90IHNldAorCisjCisjIElFRUUgMTM5NCAoRmlyZVdpcmUpIHN1cHBvcnQKKyMKKworIworIyBFbmFibGUgb25seSBvbmUgb2YgdGhlIHR3byBzdGFja3MsIHVubGVzcyB5b3Uga25vdyB3aGF0IHlvdSBhcmUgZG9pbmcKKyMKKyMgQ09ORklHX0ZJUkVXSVJFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lFRUUxMzk0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyTyBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNJTlRPU0hfRFJJVkVSUyBpcyBub3Qgc2V0CitDT05GSUdfTkVUREVWSUNFUz15CitDT05GSUdfRFVNTVk9bQorQ09ORklHX0JPTkRJTkc9bQorIyBDT05GSUdfTUFDVkxBTiBpcyBub3Qgc2V0CisjIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAorQ09ORklHX1RVTj1tCisjIENPTkZJR19WRVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ05FVCBpcyBub3Qgc2V0CitDT05GSUdfUEhZTElCPXkKKworIworIyBNSUkgUEhZIGRldmljZSBkcml2ZXJzCisjCisjIENPTkZJR19NQVJWRUxMX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19EQVZJQ09NX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19RU0VNSV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfTFhUX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19DSUNBREFfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJVEVTU0VfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNU0NfUEhZIGlzIG5vdCBzZXQKK0NPTkZJR19CUk9BRENPTV9QSFk9eQorIyBDT05GSUdfSUNQTFVTX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19SRUFMVEVLX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19GSVhFRF9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfTURJT19CSVRCQU5HIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRfRVRIRVJORVQ9eQorQ09ORklHX01JST15CisjIENPTkZJR19NQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JNQUMgaXMgbm90IHNldAorIyBDT05GSUdfSEFQUFlNRUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NVTkdFTSBpcyBub3Qgc2V0CisjIENPTkZJR19DQVNTSU5JIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9WRU5ET1JfM0NPTSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfVFVMSVAgaXMgbm90IHNldAorIyBDT05GSUdfSFAxMDAgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1pNSUkgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1JHTUlJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19UQUggaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX0VNQUM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9QQ0kgaXMgbm90IHNldAorIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKK0NPTkZJR19ORVRERVZfMTAwMD15CisjIENPTkZJR19BQ0VOSUMgaXMgbm90IHNldAorIyBDT05GSUdfREwySyBpcyBub3Qgc2V0CisjIENPTkZJR19FMTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19FMTAwMEUgaXMgbm90IHNldAorIyBDT05GSUdfSVAxMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lHQiBpcyBub3Qgc2V0CisjIENPTkZJR19OUzgzODIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBTUFDSEkgaXMgbm90IHNldAorIyBDT05GSUdfWUVMTE9XRklOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1I4MTY5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NJUzE5MCBpcyBub3Qgc2V0CisjIENPTkZJR19TS0dFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NLWTIgaXMgbm90IHNldAorIyBDT05GSUdfVklBX1ZFTE9DSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJR09OMyBpcyBub3Qgc2V0CisjIENPTkZJR19CTlgyIGlzIG5vdCBzZXQKK0NPTkZJR19HSUFORkFSPXkKKyMgQ09ORklHX01WNjQzWFhfRVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FMQTNYWFggaXMgbm90IHNldAorIyBDT05GSUdfQVRMMSBpcyBub3Qgc2V0CisjIENPTkZJR19BVEwxRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAorIyBDT05GSUdfVFIgaXMgbm90IHNldAorCisjCisjIFdpcmVsZXNzIExBTgorIworIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lXTFdJRklfTEVEUyBpcyBub3Qgc2V0CisjIENPTkZJR19XQU4gaXMgbm90IHNldAorQ09ORklHX0FUTV9EUklWRVJTPXkKKyMgQ09ORklHX0FUTV9EVU1NWSBpcyBub3Qgc2V0CisjIENPTkZJR19BVE1fVENQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTV9MQU5BSSBpcyBub3Qgc2V0CisjIENPTkZJR19BVE1fRU5JIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTV9GSVJFU1RSRUFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTV9aQVRNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTV9OSUNTVEFSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTV9JRFQ3NzI1MiBpcyBub3Qgc2V0CisjIENPTkZJR19BVE1fQU1CQVNTQURPUiBpcyBub3Qgc2V0CisjIENPTkZJR19BVE1fSE9SSVpPTiBpcyBub3Qgc2V0CisjIENPTkZJR19BVE1fSUEgaXMgbm90IHNldAorIyBDT05GSUdfQVRNX0ZPUkUyMDBFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTV9IRSBpcyBub3Qgc2V0CisjIENPTkZJR19GRERJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJUFBJIGlzIG5vdCBzZXQKK0NPTkZJR19QUFA9bQorQ09ORklHX1BQUF9NVUxUSUxJTks9eQorQ09ORklHX1BQUF9GSUxURVI9eQorQ09ORklHX1BQUF9BU1lOQz1tCitDT05GSUdfUFBQX1NZTkNfVFRZPW0KK0NPTkZJR19QUFBfREVGTEFURT1tCitDT05GSUdfUFBQX0JTRENPTVA9bQorIyBDT05GSUdfUFBQX01QUEUgaXMgbm90IHNldAorQ09ORklHX1BQUE9FPW0KK0NPTkZJR19QUFBPQVRNPW0KKyMgQ09ORklHX1BQUE9MMlRQIGlzIG5vdCBzZXQKK0NPTkZJR19TTElQPW0KK0NPTkZJR19TTElQX0NPTVBSRVNTRUQ9eQorQ09ORklHX1NMSEM9bQorQ09ORklHX1NMSVBfU01BUlQ9eQorQ09ORklHX1NMSVBfTU9ERV9TTElQNj15CitDT05GSUdfTkVUQ09OU09MRT15CisjIENPTkZJR19ORVRDT05TT0xFX0RZTkFNSUMgaXMgbm90IHNldAorQ09ORklHX05FVFBPTEw9eQorQ09ORklHX05FVFBPTExfVFJBUD15CitDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUj15CisjIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BIT05FIGlzIG5vdCBzZXQKKworIworIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAorIworQ09ORklHX0lOUFVUPXkKKyMgQ09ORklHX0lOUFVUX0ZGX01FTUxFU1MgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfUE9MTERFViBpcyBub3Qgc2V0CisKKyMKKyMgVXNlcmxhbmQgaW50ZXJmYWNlcworIworQ09ORklHX0lOUFVUX01PVVNFREVWPXkKK0NPTkZJR19JTlBVVF9NT1VTRURFVl9QU0FVWD15CitDT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1g9MTAyNAorQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9ZPTc2OAorIyBDT05GSUdfSU5QVVRfSk9ZREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0VWREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKKworIworIyBJbnB1dCBEZXZpY2UgRHJpdmVycworIworIyBDT05GSUdfSU5QVVRfS0VZQk9BUkQgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfTU9VU0UgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfVEFCTEVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX01JU0MgaXMgbm90IHNldAorCisjCisjIEhhcmR3YXJlIEkvTyBwb3J0cworIworIyBDT05GSUdfU0VSSU8gaXMgbm90IHNldAorIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAorCisjCisjIENoYXJhY3RlciBkZXZpY2VzCisjCitDT05GSUdfVlQ9eQorQ09ORklHX0NPTlNPTEVfVFJBTlNMQVRJT05TPXkKK0NPTkZJR19WVF9DT05TT0xFPXkKK0NPTkZJR19IV19DT05TT0xFPXkKKyMgQ09ORklHX1ZUX0hXX0NPTlNPTEVfQklORElORyBpcyBub3Qgc2V0CitDT05GSUdfREVWS01FTT15CisjIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAorIyBDT05GSUdfTk9aT01JIGlzIG5vdCBzZXQKKworIworIyBTZXJpYWwgZHJpdmVycworIworQ09ORklHX1NFUklBTF84MjUwPXkKK0NPTkZJR19TRVJJQUxfODI1MF9DT05TT0xFPXkKKyMgQ09ORklHX1NFUklBTF84MjUwX1BDSSBpcyBub3Qgc2V0CitDT05GSUdfU0VSSUFMXzgyNTBfTlJfVUFSVFM9MgorQ09ORklHX1NFUklBTF84MjUwX1JVTlRJTUVfVUFSVFM9MgorIyBDT05GSUdfU0VSSUFMXzgyNTBfRVhURU5ERUQgaXMgbm90IHNldAorCisjCisjIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKKyMKKyMgQ09ORklHX1NFUklBTF9VQVJUTElURSBpcyBub3Qgc2V0CitDT05GSUdfU0VSSUFMX0NPUkU9eQorQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQorIyBDT05GSUdfU0VSSUFMX1BNQUNaSUxPRyBpcyBub3Qgc2V0CisjIENPTkZJR19TRVJJQUxfSlNNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFUklBTF9PRl9QTEFURk9STSBpcyBub3Qgc2V0CitDT05GSUdfVU5JWDk4X1BUWVM9eQorQ09ORklHX0xFR0FDWV9QVFlTPXkKK0NPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTI1NgorIyBDT05GSUdfQlJJUV9QQU5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19IVkNfUlRBUyBpcyBub3Qgc2V0CisjIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAorQ09ORklHX0hXX1JBTkRPTT1tCisjIENPTkZJR19OVlJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19HRU5fUlRDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0FQUExJQ09NIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAorIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CitDT05GSUdfREVWUE9SVD15CitDT05GSUdfSTJDPXkKK0NPTkZJR19JMkNfQk9BUkRJTkZPPXkKK0NPTkZJR19JMkNfQ0hBUkRFVj15CitDT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKKworIworIyBJMkMgSGFyZHdhcmUgQnVzIHN1cHBvcnQKKyMKKworIworIyBQQyBTTUJ1cyBob3N0IGNvbnRyb2xsZXIgZHJpdmVycworIworIyBDT05GSUdfSTJDX0FMSTE1MzUgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0FMSTE1NjMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0FMSTE1WDMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0FNRDc1NiBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfQU1EODExMSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfSTgwMSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfSVNDSCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfUElJWDQgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX05GT1JDRTIgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NJUzU1OTUgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NJUzYzMCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU0lTOTZYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19WSUEgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1ZJQVBSTyBpcyBub3Qgc2V0CisKKyMKKyMgTWFjIFNNQnVzIGhvc3QgY29udHJvbGxlciBkcml2ZXJzCisjCisjIENPTkZJR19JMkNfSFlEUkEgaXMgbm90IHNldAorQ09ORklHX0kyQ19QT1dFUk1BQz15CisKKyMKKyMgSTJDIHN5c3RlbSBidXMgZHJpdmVycyAobW9zdGx5IGVtYmVkZGVkIC8gc3lzdGVtLW9uLWNoaXApCisjCitDT05GSUdfSTJDX01QQz15CisjIENPTkZJR19JMkNfT0NPUkVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TSU1URUMgaXMgbm90IHNldAorCisjCisjIEV4dGVybmFsIEkyQy9TTUJ1cyBhZGFwdGVyIGRyaXZlcnMKKyMKKyMgQ09ORklHX0kyQ19QQVJQT1JUX0xJR0hUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19UQU9TX0VWTSBpcyBub3Qgc2V0CisKKyMKKyMgR3JhcGhpY3MgYWRhcHRlciBJMkMvRERDIGNoYW5uZWwgZHJpdmVycworIworIyBDT05GSUdfSTJDX1ZPT0RPTzMgaXMgbm90IHNldAorCisjCisjIE90aGVyIEkyQy9TTUJ1cyBidXMgZHJpdmVycworIworIyBDT05GSUdfSTJDX1BDQV9QTEFURk9STSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU1RVQiBpcyBub3Qgc2V0CisKKyMKKyMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CisjCisjIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAorIyBDT05GSUdfQVQyNCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0VFUFJPTSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAorIyBDT05GSUdfUENGODU3NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDQTk1MzkgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQ0Y4NTkxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTUFYNjg3NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0JVUyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQ0hJUCBpcyBub3Qgc2V0CisjIENPTkZJR19TUEkgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfV0FOVF9PUFRJT05BTF9HUElPTElCPXkKKyMgQ09ORklHX0dQSU9MSUIgaXMgbm90IHNldAorIyBDT05GSUdfVzEgaXMgbm90IHNldAorIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKK0NPTkZJR19IV01PTj15CisjIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRDc0MTQgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRDc0MTggaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRE0xMDIxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURNMTAyNSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FETTEwMjYgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRE0xMDI5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURNMTAzMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FETTkyNDAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRFQ3NDcwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURUNzQ3MyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FNUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FUWFAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRFMxNjIxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfSTVLX0FNQiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0Y3MTgwNUYgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19GNzE4ODJGRyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0Y3NTM3NVMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19HTDUxOFNNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfR0w1MjBTTSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0lUODcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE03NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNNzcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTc4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE04MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNODMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTg1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE04NyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNOTAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTkyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE05MyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX01BWDE2MTkgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19NQVg2NjUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUEM4NzM2MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDODc0MjcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19TSVM1NTk1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRE1FMTczNyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1NNU0M0N00xIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfU01TQzQ3TTE5MiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1NNU0M0N0IzOTcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRFM3ODI4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVEhNQzUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVklBNjg2QSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1ZUMTIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1ZUODIzMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4Mzc4MUQgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODM3OTFEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzNzkyRCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4Mzc5MyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4M0w3ODVUUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4M0w3ODZORyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzNjI3RUhGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAorIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0CisjIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKK0NPTkZJR19XQVRDSERPRz15CisjIENPTkZJR19XQVRDSERPR19OT1dBWU9VVCBpcyBub3Qgc2V0CisKKyMKKyMgV2F0Y2hkb2cgRGV2aWNlIERyaXZlcnMKKyMKK0NPTkZJR19TT0ZUX1dBVENIRE9HPW0KKyMgQ09ORklHX0FMSU03MTAxX1dEVCBpcyBub3Qgc2V0CisjIENPTkZJR184eHh4X1dEVCBpcyBub3Qgc2V0CisjIENPTkZJR19XQVRDSERPR19SVEFTIGlzIG5vdCBzZXQKKworIworIyBQQ0ktYmFzZWQgV2F0Y2hkb2cgQ2FyZHMKKyMKKyMgQ09ORklHX1BDSVBDV0FUQ0hET0cgaXMgbm90IHNldAorIyBDT05GSUdfV0RUUENJIGlzIG5vdCBzZXQKKworIworIyBTb25pY3MgU2lsaWNvbiBCYWNrcGxhbmUKKyMKK0NPTkZJR19TU0JfUE9TU0lCTEU9eQorIyBDT05GSUdfU1NCIGlzIG5vdCBzZXQKKworIworIyBNdWx0aWZ1bmN0aW9uIGRldmljZSBkcml2ZXJzCisjCisjIENPTkZJR19NRkRfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAorIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CisKKyMKKyMgTXVsdGltZWRpYSBkZXZpY2VzCisjCisKKyMKKyMgTXVsdGltZWRpYSBjb3JlIHN1cHBvcnQKKyMKKyMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0CisjIENPTkZJR19EVkJfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19NRURJQSBpcyBub3Qgc2V0CisKKyMKKyMgTXVsdGltZWRpYSBkcml2ZXJzCisjCitDT05GSUdfREFCPXkKKworIworIyBHcmFwaGljcyBzdXBwb3J0CisjCisjIENPTkZJR19BR1AgaXMgbm90IHNldAorIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKK0NPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTD1tCisjIENPTkZJR19GQiBpcyBub3Qgc2V0CisjIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAorCisjCisjIERpc3BsYXkgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX0RJU1BMQVlfU1VQUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgQ29uc29sZSBkaXNwbGF5IGRyaXZlciBzdXBwb3J0CisjCitDT05GSUdfVkdBX0NPTlNPTEU9eQorIyBDT05GSUdfVkdBQ09OX1NPRlRfU0NST0xMQkFDSyBpcyBub3Qgc2V0CitDT05GSUdfRFVNTVlfQ09OU09MRT15CisjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CitDT05GSUdfSElEX1NVUFBPUlQ9eQorQ09ORklHX0hJRD15CisjIENPTkZJR19ISURfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfU1VQUE9SVD15CitDT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15CitDT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0k9eQorQ09ORklHX1VTQl9BUkNIX0hBU19FSENJPXkKKyMgQ09ORklHX1VTQiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1RHX1dISVRFTElTVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1RHX0JMQUNLTElTVF9IVUIgaXMgbm90IHNldAorCisjCisjIEVuYWJsZSBIb3N0IG9yIEdhZGdldCBzdXBwb3J0IHRvIHNlZSBJbnZlbnRyYSBvcHRpb25zCisjCisKKyMKKyMgTk9URTogVVNCX1NUT1JBR0UgZW5hYmxlcyBTQ1NJLCBhbmQgJ1NDU0kgZGlzayBzdXBwb3J0JworIworIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0CisjIENPTkZJR19NTUMgaXMgbm90IHNldAorIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldAorIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAorIyBDT05GSUdfQUNDRVNTSUJJTElUWSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkZJTklCQU5EIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VEQUMgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0NMQVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldAorIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKKworIworIyBGaWxlIHN5c3RlbXMKKyMKK0NPTkZJR19FWFQyX0ZTPXkKK0NPTkZJR19FWFQyX0ZTX1hBVFRSPXkKK0NPTkZJR19FWFQyX0ZTX1BPU0lYX0FDTD15CisjIENPTkZJR19FWFQyX0ZTX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDJfRlNfWElQIGlzIG5vdCBzZXQKK0NPTkZJR19FWFQzX0ZTPXkKK0NPTkZJR19FWFQzX0ZTX1hBVFRSPXkKK0NPTkZJR19FWFQzX0ZTX1BPU0lYX0FDTD15CisjIENPTkZJR19FWFQzX0ZTX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDRERVZfRlMgaXMgbm90IHNldAorQ09ORklHX0pCRD15CisjIENPTkZJR19KQkRfREVCVUcgaXMgbm90IHNldAorQ09ORklHX0ZTX01CQ0FDSEU9eQorQ09ORklHX1JFSVNFUkZTX0ZTPW0KKyMgQ09ORklHX1JFSVNFUkZTX0NIRUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFSVNFUkZTX1BST0NfSU5GTyBpcyBub3Qgc2V0CitDT05GSUdfUkVJU0VSRlNfRlNfWEFUVFI9eQorQ09ORklHX1JFSVNFUkZTX0ZTX1BPU0lYX0FDTD15CisjIENPTkZJR19SRUlTRVJGU19GU19TRUNVUklUWSBpcyBub3Qgc2V0CisjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAorQ09ORklHX0ZTX1BPU0lYX0FDTD15CisjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorQ09ORklHX09DRlMyX0ZTPW0KK0NPTkZJR19PQ0ZTMl9GU19PMkNCPW0KK0NPTkZJR19PQ0ZTMl9GU19TVEFUUz15CitDT05GSUdfT0NGUzJfREVCVUdfTUFTS0xPRz15CisjIENPTkZJR19PQ0ZTMl9ERUJVR19GUyBpcyBub3Qgc2V0CitDT05GSUdfRE5PVElGWT15CitDT05GSUdfSU5PVElGWT15CitDT05GSUdfSU5PVElGWV9VU0VSPXkKKyMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKK0NPTkZJR19BVVRPRlNfRlM9bQorQ09ORklHX0FVVE9GUzRfRlM9bQorIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0CisKKyMKKyMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcworIworIyBDT05GSUdfSVNPOTY2MF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19VREZfRlMgaXMgbm90IHNldAorCisjCisjIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKKyMKKyMgQ09ORklHX01TRE9TX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZGQVRfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTlRGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgUHNldWRvIGZpbGVzeXN0ZW1zCisjCitDT05GSUdfUFJPQ19GUz15CitDT05GSUdfUFJPQ19LQ09SRT15CitDT05GSUdfUFJPQ19TWVNDVEw9eQorQ09ORklHX1NZU0ZTPXkKK0NPTkZJR19UTVBGUz15CisjIENPTkZJR19UTVBGU19QT1NJWF9BQ0wgaXMgbm90IHNldAorIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKK0NPTkZJR19DT05GSUdGU19GUz1tCisKKyMKKyMgTWlzY2VsbGFuZW91cyBmaWxlc3lzdGVtcworIworIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19KRkZTMl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUkFNRlMgaXMgbm90IHNldAorIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfTUlOSVhfRlM9bQorIyBDT05GSUdfT01GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfUk9NRlNfRlM9bQorIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAorQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQorQ09ORklHX05GU19GUz15CitDT05GSUdfTkZTX1YzPXkKKyMgQ09ORklHX05GU19WM19BQ0wgaXMgbm90IHNldAorQ09ORklHX05GU19WND15CitDT05GSUdfUk9PVF9ORlM9eQorIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0CitDT05GSUdfTE9DS0Q9eQorQ09ORklHX0xPQ0tEX1Y0PXkKK0NPTkZJR19ORlNfQ09NTU9OPXkKK0NPTkZJR19TVU5SUEM9eQorQ09ORklHX1NVTlJQQ19HU1M9eQorQ09ORklHX1JQQ1NFQ19HU1NfS1JCNT15CisjIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKK0NPTkZJR19TTUJfRlM9bQorQ09ORklHX1NNQl9OTFNfREVGQVVMVD15CitDT05GSUdfU01CX05MU19SRU1PVEU9ImNwNDM3IgorQ09ORklHX0NJRlM9bQorIyBDT05GSUdfQ0lGU19TVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19DSUZTX1dFQUtfUFdfSEFTSCBpcyBub3Qgc2V0CitDT05GSUdfQ0lGU19YQVRUUj15CitDT05GSUdfQ0lGU19QT1NJWD15CisjIENPTkZJR19DSUZTX0RFQlVHMiBpcyBub3Qgc2V0CisjIENPTkZJR19DSUZTX0VYUEVSSU1FTlRBTCBpcyBub3Qgc2V0CisjIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAorCisjCisjIFBhcnRpdGlvbiBUeXBlcworIworIyBDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEIGlzIG5vdCBzZXQKK0NPTkZJR19NQUNfUEFSVElUSU9OPXkKK0NPTkZJR19NU0RPU19QQVJUSVRJT049eQorQ09ORklHX05MUz1tCitDT05GSUdfTkxTX0RFRkFVTFQ9Imlzbzg4NTktMSIKK0NPTkZJR19OTFNfQ09ERVBBR0VfNDM3PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfNzM3PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfNzc1PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODUwPW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODUyPW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODU1PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODU3PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODYwPW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODYxPW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODYyPW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODYzPW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODY0PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODY1PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODY2PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODY5PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfOTM2PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfOTUwPW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfOTMyPW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfOTQ5PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODc0PW0KK0NPTkZJR19OTFNfSVNPODg1OV84PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfMTI1MD1tCitDT05GSUdfTkxTX0NPREVQQUdFXzEyNTE9bQorQ09ORklHX05MU19BU0NJST1tCitDT05GSUdfTkxTX0lTTzg4NTlfMT1tCitDT05GSUdfTkxTX0lTTzg4NTlfMj1tCitDT05GSUdfTkxTX0lTTzg4NTlfMz1tCitDT05GSUdfTkxTX0lTTzg4NTlfND1tCitDT05GSUdfTkxTX0lTTzg4NTlfNT1tCitDT05GSUdfTkxTX0lTTzg4NTlfNj1tCitDT05GSUdfTkxTX0lTTzg4NTlfNz1tCitDT05GSUdfTkxTX0lTTzg4NTlfOT1tCitDT05GSUdfTkxTX0lTTzg4NTlfMTM9bQorQ09ORklHX05MU19JU084ODU5XzE0PW0KK0NPTkZJR19OTFNfSVNPODg1OV8xNT1tCitDT05GSUdfTkxTX0tPSThfUj1tCitDT05GSUdfTkxTX0tPSThfVT1tCitDT05GSUdfTkxTX1VURjg9bQorIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKKworIworIyBMaWJyYXJ5IHJvdXRpbmVzCisjCitDT05GSUdfQklUUkVWRVJTRT15CisjIENPTkZJR19HRU5FUklDX0ZJTkRfRklSU1RfQklUIGlzIG5vdCBzZXQKK0NPTkZJR19DUkNfQ0NJVFQ9bQorIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDX1QxMERJRiBpcyBub3Qgc2V0CisjIENPTkZJR19DUkNfSVRVX1QgaXMgbm90IHNldAorQ09ORklHX0NSQzMyPXkKKyMgQ09ORklHX0NSQzcgaXMgbm90IHNldAorQ09ORklHX0xJQkNSQzMyQz1tCitDT05GSUdfWkxJQl9JTkZMQVRFPW0KK0NPTkZJR19aTElCX0RFRkxBVEU9bQorQ09ORklHX1BMSVNUPXkKK0NPTkZJR19IQVNfSU9NRU09eQorQ09ORklHX0hBU19JT1BPUlQ9eQorQ09ORklHX0hBU19ETUE9eQorQ09ORklHX0hBVkVfTE1CPXkKKworIworIyBLZXJuZWwgaGFja2luZworIworIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAorQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQ9eQorQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKK0NPTkZJR19GUkFNRV9XQVJOPTEwMjQKK0NPTkZJR19NQUdJQ19TWVNSUT15CisjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfRlM9eQorIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfS0VSTkVMPXkKKyMgQ09ORklHX0RFQlVHX1NISVJRIGlzIG5vdCBzZXQKK0NPTkZJR19ERVRFQ1RfU09GVExPQ0tVUD15CisjIENPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQyBpcyBub3Qgc2V0CitDT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUNfVkFMVUU9MAorQ09ORklHX1NDSEVEX0RFQlVHPXkKKyMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfVElNRVJfU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfT0JKRUNUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TTEFCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAorIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX01VVEVYRVMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTE9DS0lOR19BUElfU0VMRlRFU1RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQlVHVkVSQk9TRSBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfSU5GTz15CisjIENPTkZJR19ERUJVR19WTSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19XUklURUNPVU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX01FTU9SWV9JTklUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAorIyBDT05GSUdfQk9PVF9QUklOVEtfREVMQVkgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSz15CitDT05GSUdfSEFWRV9GVFJBQ0U9eQorQ09ORklHX0hBVkVfRFlOQU1JQ19GVFJBQ0U9eQorIyBDT05GSUdfRlRSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSRUVNUFRfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDSEVEX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19DT05URVhUX1NXSVRDSF9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9BUkNIX0tHREI9eQorIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TVEFDS09WRVJGTE9XIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1BBR0VBTExPQyBpcyBub3Qgc2V0CisjIENPTkZJR19DT0RFX1BBVENISU5HX1NFTEZURVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZUUl9GSVhVUF9TRUxGVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19YTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lSUVNUQUNLUyBpcyBub3Qgc2V0CisjIENPTkZJR19WSVJRX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JESV9TV0lUQ0ggaXMgbm90IHNldAorIyBDT05GSUdfQk9PVFhfVEVYVCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfRUFSTFlfREVCVUcgaXMgbm90IHNldAorCisjCisjIFNlY3VyaXR5IG9wdGlvbnMKKyMKKyMgQ09ORklHX0tFWVMgaXMgbm90IHNldAorQ09ORklHX1NFQ1VSSVRZPXkKK0NPTkZJR19TRUNVUklUWV9ORVRXT1JLPXkKKyMgQ09ORklHX1NFQ1VSSVRZX05FVFdPUktfWEZSTSBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUyBpcyBub3Qgc2V0CitDT05GSUdfU0VDVVJJVFlfREVGQVVMVF9NTUFQX01JTl9BRERSPTAKK0NPTkZJR19DUllQVE89eQorCisjCisjIENyeXB0byBjb3JlIG9yIGhlbHBlcgorIworQ09ORklHX0NSWVBUT19BTEdBUEk9eQorQ09ORklHX0NSWVBUT19BRUFEPW0KK0NPTkZJR19DUllQVE9fQkxLQ0lQSEVSPXkKK0NPTkZJR19DUllQVE9fSEFTSD15CitDT05GSUdfQ1JZUFRPX01BTkFHRVI9eQorIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fTlVMTD1tCisjIENPTkZJR19DUllQVE9fQ1JZUFREIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fQVVUSEVOQz1tCitDT05GSUdfQ1JZUFRPX1RFU1Q9bQorCisjCisjIEF1dGhlbnRpY2F0ZWQgRW5jcnlwdGlvbiB3aXRoIEFzc29jaWF0ZWQgRGF0YQorIworIyBDT05GSUdfQ1JZUFRPX0NDTSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0NNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TRVFJViBpcyBub3Qgc2V0CisKKyMKKyMgQmxvY2sgbW9kZXMKKyMKK0NPTkZJR19DUllQVE9fQ0JDPXkKKyMgQ09ORklHX0NSWVBUT19DVFIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NUUyBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0VDQj1tCisjIENPTkZJR19DUllQVE9fTFJXIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fUENCQz1tCisjIENPTkZJR19DUllQVE9fWFRTIGlzIG5vdCBzZXQKKworIworIyBIYXNoIG1vZGVzCisjCitDT05GSUdfQ1JZUFRPX0hNQUM9eQorIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorCisjCisjIERpZ2VzdAorIworQ09ORklHX0NSWVBUT19DUkMzMkM9bQorQ09ORklHX0NSWVBUT19NRDQ9bQorQ09ORklHX0NSWVBUT19NRDU9eQorQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQz1tCisjIENPTkZJR19DUllQVE9fUk1EMTI4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQxNjAgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDI1NiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMzIwIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fU0hBMT1tCitDT05GSUdfQ1JZUFRPX1NIQTI1Nj1tCitDT05GSUdfQ1JZUFRPX1NIQTUxMj1tCisjIENPTkZJR19DUllQVE9fVEdSMTkyIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fV1A1MTI9bQorCisjCisjIENpcGhlcnMKKyMKK0NPTkZJR19DUllQVE9fQUVTPW0KK0NPTkZJR19DUllQVE9fQU5VQklTPW0KK0NPTkZJR19DUllQVE9fQVJDND1tCitDT05GSUdfQ1JZUFRPX0JMT1dGSVNIPW0KKyMgQ09ORklHX0NSWVBUT19DQU1FTExJQSBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0NBU1Q1PW0KK0NPTkZJR19DUllQVE9fQ0FTVDY9bQorQ09ORklHX0NSWVBUT19ERVM9eQorIyBDT05GSUdfQ1JZUFRPX0ZDUllQVCBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0tIQVpBRD1tCisjIENPTkZJR19DUllQVE9fU0FMU0EyMCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0VFRCBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX1NFUlBFTlQ9bQorQ09ORklHX0NSWVBUT19URUE9bQorQ09ORklHX0NSWVBUT19UV09GSVNIPW0KK0NPTkZJR19DUllQVE9fVFdPRklTSF9DT01NT049bQorCisjCisjIENvbXByZXNzaW9uCisjCitDT05GSUdfQ1JZUFRPX0RFRkxBVEU9bQorIyBDT05GSUdfQ1JZUFRPX0xaTyBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0hXPXkKKyMgQ09ORklHX0NSWVBUT19ERVZfSElGTl83OTVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19ERVZfVEFMSVRPUyBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfQ0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfVklSVFVBTElaQVRJT04gaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvZXA4MjQ4ZV9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9lcDgyNDhlX2RlZmNvbmZpZwppbmRleCBlZjBjNmU4Li5jZDY5MWY3IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy9lcDgyNDhlX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9lcDgyNDhlX2RlZmNvbmZpZwpAQCAtMTUwLDExICsxNTAsMTEgQEAKICMKIENPTkZJR19QUENfTVVMVElQTEFURk9STT15CiBDT05GSUdfQ0xBU1NJQzMyPXkKLUNPTkZJR19QUENfQ0hSUD15CisjIENPTkZJR19QUENfQ0hSUCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfUE1BQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NUEM1MTIxX0FEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NUEM1MTIxX0dFTkVSSUMgaXMgbm90IHNldAogIyBDT05GSUdfUFBDX01QQzUyeHggaXMgbm90IHNldAotQ09ORklHX1BQQ19QTUFDPXkKICMgQ09ORklHX1BQQ19DRUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19DRUxMX05BVElWRSBpcyBub3Qgc2V0CiBDT05GSUdfUFBDXzgyeHg9eQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbWdjb2dlX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL21nY29nZV9kZWZjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2M5ZWFiYQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL21nY29nZV9kZWZjb25maWcKQEAgLTAsMCArMSw5MDAgQEAKKyMKKyMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yNi1yYzIKKyMgVGh1IE1heSAyMiAwODoxODo0NyAyMDA4CisjCisjIENPTkZJR19QUEM2NCBpcyBub3Qgc2V0CisKKyMKKyMgUHJvY2Vzc29yIHN1cHBvcnQKKyMKK0NPTkZJR182eHg9eQorIyBDT05GSUdfUFBDXzg1eHggaXMgbm90IHNldAorIyBDT05GSUdfUFBDXzh4eCBpcyBub3Qgc2V0CisjIENPTkZJR180MHggaXMgbm90IHNldAorIyBDT05GSUdfNDR4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0UyMDAgaXMgbm90IHNldAorQ09ORklHX1BQQ19GUFU9eQorQ09ORklHX1BQQ19TVERfTU1VPXkKK0NPTkZJR19QUENfU1REX01NVV8zMj15CisjIENPTkZJR19QUENfTU1fU0xJQ0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNUCBpcyBub3Qgc2V0CitDT05GSUdfUFBDMzI9eQorQ09ORklHX1dPUkRfU0laRT0zMgorQ09ORklHX1BQQ19NRVJHRT15CitDT05GSUdfTU1VPXkKK0NPTkZJR19HRU5FUklDX0NNT1NfVVBEQVRFPXkKK0NPTkZJR19HRU5FUklDX1RJTUU9eQorQ09ORklHX0dFTkVSSUNfVElNRV9WU1lTQ0FMTD15CitDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CitDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CisjIENPTkZJR19IQVZFX1NFVFVQX1BFUl9DUFVfQVJFQSBpcyBub3Qgc2V0CitDT05GSUdfSVJRX1BFUl9DUFU9eQorQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CitDT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKK0NPTkZJR19SV1NFTV9YQ0hHQUREX0FMR09SSVRITT15CitDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyPXkKK0NPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQorQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKK0NPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQ9eQorIyBDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUyBpcyBub3Qgc2V0CitDT05GSUdfUFBDPXkKK0NPTkZJR19FQVJMWV9QUklOVEs9eQorQ09ORklHX0dFTkVSSUNfTlZSQU09eQorQ09ORklHX1NDSEVEX05PX05PX09NSVRfRlJBTUVfUE9JTlRFUj15CitDT05GSUdfQVJDSF9NQVlfSEFWRV9QQ19GREM9eQorQ09ORklHX1BQQ19PRj15CitDT05GSUdfT0Y9eQorIyBDT05GSUdfUFBDX1VEQkdfMTY1NTAgaXMgbm90IHNldAorIyBDT05GSUdfR0VORVJJQ19UQlNZTkMgaXMgbm90IHNldAorQ09ORklHX0FVRElUX0FSQ0g9eQorQ09ORklHX0dFTkVSSUNfQlVHPXkKKyMgQ09ORklHX0RFRkFVTFRfVUlNQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19EQ1JfTkFUSVZFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19EQ1JfTU1JTyBpcyBub3Qgc2V0CitDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgorCisjCisjIEdlbmVyYWwgc2V0dXAKKyMKKyMgQ09ORklHX0VYUEVSSU1FTlRBTCBpcyBub3Qgc2V0CitDT05GSUdfQlJPS0VOX09OX1NNUD15CitDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCitDT05GSUdfTE9DQUxWRVJTSU9OPSIiCitDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQorQ09ORklHX1NXQVA9eQorQ09ORklHX1NZU1ZJUEM9eQorQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKKyMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAorIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKK0NPTkZJR19JS0NPTkZJRz15CitDT05GSUdfSUtDT05GSUdfUFJPQz15CitDT05GSUdfTE9HX0JVRl9TSElGVD0xNAorIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0CitDT05GSUdfU1lTRlNfREVQUkVDQVRFRD15CitDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMj15CisjIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0CisjIENPTkZJR19OQU1FU1BBQ0VTIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0lOSVRSRD15CitDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgorQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKK0NPTkZJR19TWVNDVEw9eQorQ09ORklHX0VNQkVEREVEPXkKK0NPTkZJR19TWVNDVExfU1lTQ0FMTD15CitDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0s9eQorQ09ORklHX0tBTExTWU1TPXkKK0NPTkZJR19LQUxMU1lNU19BTEw9eQorIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0CitDT05GSUdfSE9UUExVRz15CitDT05GSUdfUFJJTlRLPXkKK0NPTkZJR19CVUc9eQorQ09ORklHX0VMRl9DT1JFPXkKK0NPTkZJR19DT01QQVRfQlJLPXkKK0NPTkZJR19CQVNFX0ZVTEw9eQorQ09ORklHX0ZVVEVYPXkKK0NPTkZJR19BTk9OX0lOT0RFUz15CitDT05GSUdfRVBPTEw9eQorQ09ORklHX1NJR05BTEZEPXkKK0NPTkZJR19USU1FUkZEPXkKK0NPTkZJR19FVkVOVEZEPXkKK0NPTkZJR19TSE1FTT15CitDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQorQ09ORklHX1NMQUI9eQorIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CisjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0CisjIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX09QUk9GSUxFPXkKK0NPTkZJR19IQVZFX0tQUk9CRVM9eQorQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CisjIENPTkZJR19IQVZFX0RNQV9BVFRSUyBpcyBub3Qgc2V0CitDT05GSUdfUFJPQ19QQUdFX01PTklUT1I9eQorQ09ORklHX1NMQUJJTkZPPXkKK0NPTkZJR19SVF9NVVRFWEVTPXkKKyMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAorQ09ORklHX0JBU0VfU01BTEw9MAorIyBDT05GSUdfTU9EVUxFUyBpcyBub3Qgc2V0CitDT05GSUdfQkxPQ0s9eQorIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfTFNGIGlzIG5vdCBzZXQKKworIworIyBJTyBTY2hlZHVsZXJzCisjCitDT05GSUdfSU9TQ0hFRF9OT09QPXkKKyMgQ09ORklHX0lPU0NIRURfQVMgaXMgbm90IHNldAorQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQorIyBDT05GSUdfSU9TQ0hFRF9DRlEgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9BUyBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9ERUFETElORT15CisjIENPTkZJR19ERUZBVUxUX0NGUSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iZGVhZGxpbmUiCitDT05GSUdfQ0xBU1NJQ19SQ1U9eQorCisjCisjIFBsYXRmb3JtIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BQQ19NVUxUSVBMQVRGT1JNIGlzIG5vdCBzZXQKK0NPTkZJR19QUENfODJ4eD15CisjIENPTkZJR19QUENfODN4eCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfODZ4eCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfTVBDNTEyeCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfTVBDNTEyMSBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfQ0VMTCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfQ0VMTF9OQVRJVkUgaXMgbm90IHNldAorIyBDT05GSUdfTVBDODI3Ml9BRFMgaXMgbm90IHNldAorIyBDT05GSUdfUFEyRkFEUyBpcyBub3Qgc2V0CisjIENPTkZJR19FUDgyNDhFIGlzIG5vdCBzZXQKK0NPTkZJR19NR0NPR0U9eQorIyBDT05GSUdfUFEyQURTIGlzIG5vdCBzZXQKK0NPTkZJR184MjYwPXkKK0NPTkZJR184MjcyPXkKKyMgQ09ORklHX0lQSUMgaXMgbm90IHNldAorIyBDT05GSUdfTVBJQyBpcyBub3Qgc2V0CisjIENPTkZJR19NUElDX1dFSVJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19JODI1OSBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfUlRBUyBpcyBub3Qgc2V0CisjIENPTkZJR19NTUlPX05WUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19NUEMxMDYgaXMgbm90IHNldAorIyBDT05GSUdfUFBDXzk3MF9OQVAgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0lORElSRUNUX0lPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dFTkVSSUNfSU9NQVAgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0ZSRVEgaXMgbm90IHNldAorQ09ORklHX0NQTTI9eQorQ09ORklHX1BQQ19DUE1fTkVXX0JJTkRJTkc9eQorIyBDT05GSUdfRlNMX1VMSTE1NzUgaXMgbm90IHNldAorQ09ORklHX0NQTT15CisKKyMKKyMgS2VybmVsIG9wdGlvbnMKKyMKKyMgQ09ORklHX0hJR0hNRU0gaXMgbm90IHNldAorIyBDT05GSUdfVElDS19PTkVTSE9UIGlzIG5vdCBzZXQKKyMgQ09ORklHX05PX0haIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJR0hfUkVTX1RJTUVSUyBpcyBub3Qgc2V0CitDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UU19CVUlMRD15CisjIENPTkZJR19IWl8xMDAgaXMgbm90IHNldAorQ09ORklHX0haXzI1MD15CisjIENPTkZJR19IWl8zMDAgaXMgbm90IHNldAorIyBDT05GSUdfSFpfMTAwMCBpcyBub3Qgc2V0CitDT05GSUdfSFo9MjUwCisjIENPTkZJR19TQ0hFRF9IUlRJQ0sgaXMgbm90IHNldAorQ09ORklHX1BSRUVNUFRfTk9ORT15CisjIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWSBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKK0NPTkZJR19CSU5GTVRfRUxGPXkKK0NPTkZJR19CSU5GTVRfTUlTQz15CisjIENPTkZJR19JT01NVV9IRUxQRVIgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHPXkKK0NPTkZJR19BUkNIX0hBU19XQUxLX01FTU9SWT15CitDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFJFTU9WRT15CitDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CitDT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQorQ09ORklHX0ZMQVRNRU09eQorQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKKyMgQ09ORklHX1NQQVJTRU1FTV9TVEFUSUMgaXMgbm90IHNldAorIyBDT05GSUdfU1BBUlNFTUVNX1ZNRU1NQVBfRU5BQkxFIGlzIG5vdCBzZXQKK0NPTkZJR19QQUdFRkxBR1NfRVhURU5ERUQ9eQorQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKKyMgQ09ORklHX1JFU09VUkNFU182NEJJVCBpcyBub3Qgc2V0CitDT05GSUdfWk9ORV9ETUFfRkxBRz0xCitDT05GSUdfQk9VTkNFPXkKK0NPTkZJR19WSVJUX1RPX0JVUz15CitDT05GSUdfRk9SQ0VfTUFYX1pPTkVPUkRFUj0xMQorQ09ORklHX1BST0NfREVWSUNFVFJFRT15CisjIENPTkZJR19DTURMSU5FX0JPT0wgaXMgbm90IHNldAorIyBDT05GSUdfUE0gaXMgbm90IHNldAorIyBDT05GSUdfU0VDQ09NUCBpcyBub3Qgc2V0CitDT05GSUdfSVNBX0RNQV9BUEk9eQorCisjCisjIEJ1cyBvcHRpb25zCisjCitDT05GSUdfWk9ORV9ETUE9eQorQ09ORklHX0ZTTF9TT0M9eQorIyBDT05GSUdfUENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDSV9ET01BSU5TIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDSV9TWVNDQUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDQ0FSRCBpcyBub3Qgc2V0CisjIENPTkZJR19IQVNfUkFQSURJTyBpcyBub3Qgc2V0CisKKyMKKyMgQWR2YW5jZWQgc2V0dXAKKyMKKyMgQ09ORklHX0FEVkFOQ0VEX09QVElPTlMgaXMgbm90IHNldAorCisjCisjIERlZmF1bHQgc2V0dGluZ3MgZm9yIGFkdmFuY2VkIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgdXNlZAorIworQ09ORklHX0xPV01FTV9TSVpFPTB4MzAwMDAwMDAKK0NPTkZJR19QQUdFX09GRlNFVD0weGMwMDAwMDAwCitDT05GSUdfS0VSTkVMX1NUQVJUPTB4YzAwMDAwMDAKK0NPTkZJR19QSFlTSUNBTF9TVEFSVD0weDAwMDAwMDAwCitDT05GSUdfVEFTS19TSVpFPTB4YzAwMDAwMDAKKworIworIyBOZXR3b3JraW5nCisjCitDT05GSUdfTkVUPXkKKworIworIyBOZXR3b3JraW5nIG9wdGlvbnMKKyMKK0NPTkZJR19QQUNLRVQ9eQorIyBDT05GSUdfUEFDS0VUX01NQVAgaXMgbm90IHNldAorQ09ORklHX1VOSVg9eQorQ09ORklHX1hGUk09eQorIyBDT05GSUdfWEZSTV9VU0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAorQ09ORklHX0lORVQ9eQorQ09ORklHX0lQX01VTFRJQ0FTVD15CisjIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAorQ09ORklHX0lQX0ZJQl9IQVNIPXkKK0NPTkZJR19JUF9QTlA9eQorQ09ORklHX0lQX1BOUF9ESENQPXkKK0NPTkZJR19JUF9QTlBfQk9PVFA9eQorIyBDT05GSUdfSVBfUE5QX1JBUlAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0lQSVAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX01ST1VURSBpcyBub3Qgc2V0CitDT05GSUdfU1lOX0NPT0tJRVM9eQorIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQ9eQorQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTD15CitDT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVD15CisjIENPTkZJR19JTkVUX0xSTyBpcyBub3Qgc2V0CitDT05GSUdfSU5FVF9ESUFHPXkKK0NPTkZJR19JTkVUX1RDUF9ESUFHPXkKKyMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKK0NPTkZJR19UQ1BfQ09OR19DVUJJQz15CitDT05GSUdfREVGQVVMVF9UQ1BfQ09ORz0iY3ViaWMiCisjIENPTkZJR19JUF9WUyBpcyBub3Qgc2V0CisjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVFdPUktfU0VDTUFSSyBpcyBub3Qgc2V0CitDT05GSUdfTkVURklMVEVSPXkKKyMgQ09ORklHX05FVEZJTFRFUl9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfTkVURklMVEVSX0FEVkFOQ0VEPXkKKworIworIyBDb3JlIE5ldGZpbHRlciBDb25maWd1cmF0aW9uCisjCisjIENPTkZJR19ORVRGSUxURVJfTkVUTElOS19RVUVVRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfTkVUTElOS19MT0cgaXMgbm90IHNldAorIyBDT05GSUdfTkZfQ09OTlRSQUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVEFCTEVTIGlzIG5vdCBzZXQKKworIworIyBJUDogTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24KKyMKKyMgQ09ORklHX0lQX05GX1FVRVVFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX05GX0lQVEFCTEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX05GX0FSUFRBQkxFUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVE0gaXMgbm90IHNldAorIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAorIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xMQzIgaXMgbm90IHNldAorIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0CisKKyMKKyMgTmV0d29yayB0ZXN0aW5nCisjCisjIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBTiBpcyBub3Qgc2V0CisjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUIGlzIG5vdCBzZXQKKworIworIyBXaXJlbGVzcworIworIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQzgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lFRUU4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAorCisjCisjIERldmljZSBEcml2ZXJzCisjCisKKyMKKyMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucworIworQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKK0NPTkZJR19TVEFOREFMT05FPXkKK0NPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKKyMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19EUklWRVIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfREVWUkVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CitDT05GSUdfTVREPXkKKyMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NPTkNBVD15CitDT05GSUdfTVREX1BBUlRJVElPTlM9eQorIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAorQ09ORklHX01URF9DTURMSU5FX1BBUlRTPXkKK0NPTkZJR19NVERfT0ZfUEFSVFM9eQorIyBDT05GSUdfTVREX0FSN19QQVJUUyBpcyBub3Qgc2V0CisKKyMKKyMgVXNlciBNb2R1bGVzIEFuZCBUcmFuc2xhdGlvbiBMYXllcnMKKyMKK0NPTkZJR19NVERfQ0hBUj15CitDT05GSUdfTVREX0JMS0RFVlM9eQorIyBDT05GSUdfTVREX0JMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9CTE9DS19STyBpcyBub3Qgc2V0CisjIENPTkZJR19GVEwgaXMgbm90IHNldAorIyBDT05GSUdfTkZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19SRkRfRlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NTRkRDIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9PT1BTIGlzIG5vdCBzZXQKKworIworIyBSQU0vUk9NL0ZsYXNoIGNoaXAgZHJpdmVycworIworQ09ORklHX01URF9DRkk9eQorIyBDT05GSUdfTVREX0pFREVDUFJPQkUgaXMgbm90IHNldAorQ09ORklHX01URF9HRU5fUFJPQkU9eQorQ09ORklHX01URF9DRklfQURWX09QVElPTlM9eQorQ09ORklHX01URF9DRklfTk9TV0FQPXkKKyMgQ09ORklHX01URF9DRklfQkVfQllURV9TV0FQIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DRklfTEVfQllURV9TV0FQIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX0dFT01FVFJZPXkKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMT15CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzI9eQorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzggaXMgbm90IHNldAorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE2IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8zMiBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NGSV9JMT15CitDT05GSUdfTVREX0NGSV9JMj15CisjIENPTkZJR19NVERfQ0ZJX0k0IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DRklfSTggaXMgbm90IHNldAorIyBDT05GSUdfTVREX09UUCBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NGSV9JTlRFTEVYVD15CitDT05GSUdfTVREX0NGSV9BTURTVEQ9eQorIyBDT05GSUdfTVREX0NGSV9TVEFBIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX1VUSUw9eQorIyBDT05GSUdfTVREX1JBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUk9NIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9BQlNFTlQgaXMgbm90IHNldAorCisjCisjIE1hcHBpbmcgZHJpdmVycyBmb3IgY2hpcCBhY2Nlc3MKKyMKKyMgQ09ORklHX01URF9DT01QTEVYX01BUFBJTkdTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9QSFlTTUFQIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfUEhZU01BUF9PRj15CisjIENPTkZJR19NVERfUExBVFJBTSBpcyBub3Qgc2V0CisKKyMKKyMgU2VsZi1jb250YWluZWQgTVREIGRldmljZSBkcml2ZXJzCisjCisjIENPTkZJR19NVERfU0xSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX1BIUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NVERSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX0JMT0NLMk1URCBpcyBub3Qgc2V0CisKKyMKKyMgRGlzay1Pbi1DaGlwIERldmljZSBEcml2ZXJzCisjCisjIENPTkZJR19NVERfRE9DMjAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfRE9DMjAwMSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfRE9DMjAwMVBMVVMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX05BTkQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX09ORU5BTkQgaXMgbm90IHNldAorCisjCisjIFVCSSAtIFVuc29ydGVkIGJsb2NrIGltYWdlcworIworIyBDT05GSUdfTVREX1VCSSBpcyBub3Qgc2V0CitDT05GSUdfT0ZfREVWSUNFPXkKKyMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVY9eQorIyBDT05GSUdfQkxLX0RFVl9GRCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfTE9PUD15CisjIENPTkZJR19CTEtfREVWX0NSWVBUT0xPT1AgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfUkFNPXkKK0NPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgorQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9NDA5NgorIyBDT05GSUdfQkxLX0RFVl9YSVAgaXMgbm90IHNldAorIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAorIyBDT05GSUdfTUlTQ19ERVZJQ0VTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0lERT15CisjIENPTkZJR19JREUgaXMgbm90IHNldAorCisjCisjIFNDU0kgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RNQSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAorIyBDT05GSUdfQVRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX01EIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0lOVE9TSF9EUklWRVJTIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRERVZJQ0VTPXkKKyMgQ09ORklHX05FVERFVklDRVNfTVVMVElRVUVVRSBpcyBub3Qgc2V0CisjIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0CisjIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0CisjIENPTkZJR19UVU4gaXMgbm90IHNldAorIyBDT05GSUdfVkVUSCBpcyBub3Qgc2V0CitDT05GSUdfUEhZTElCPXkKKworIworIyBNSUkgUEhZIGRldmljZSBkcml2ZXJzCisjCisjIENPTkZJR19NQVJWRUxMX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19EQVZJQ09NX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19RU0VNSV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfTFhUX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19DSUNBREFfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJVEVTU0VfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNU0NfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JST0FEQ09NX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19JQ1BMVVNfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFQUxURUtfUEhZIGlzIG5vdCBzZXQKK0NPTkZJR19GSVhFRF9QSFk9eQorIyBDT05GSUdfTURJT19CSVRCQU5HIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRfRVRIRVJORVQ9eQorQ09ORklHX01JST15CisjIENPTkZJR19JQk1fTkVXX0VNQUNfWk1JSSBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfUkdNSUkgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1RBSCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfRU1BQzQgaXMgbm90IHNldAorIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKK0NPTkZJR19GU19FTkVUPXkKK0NPTkZJR19GU19FTkVUX0hBU19TQ0M9eQorIyBDT05GSUdfRlNfRU5FVF9IQVNfRkNDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZTX0VORVRfTURJT19GQ0MgaXMgbm90IHNldAorIyBDT05GSUdfTkVUREVWXzEwMDAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKKworIworIyBXaXJlbGVzcyBMQU4KKyMKKyMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19JV0xXSUZJX0xFRFMgaXMgbm90IHNldAorIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQUCBpcyBub3Qgc2V0CisjIENPTkZJR19TTElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0CisjIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BIT05FIGlzIG5vdCBzZXQKKworIworIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfSU5QVVQgaXMgbm90IHNldAorCisjCisjIEhhcmR3YXJlIEkvTyBwb3J0cworIworIyBDT05GSUdfU0VSSU8gaXMgbm90IHNldAorIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAorCisjCisjIENoYXJhY3RlciBkZXZpY2VzCisjCisjIENPTkZJR19WVCBpcyBub3Qgc2V0CitDT05GSUdfREVWS01FTT15CisjIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAorCisjCisjIFNlcmlhbCBkcml2ZXJzCisjCisjIENPTkZJR19TRVJJQUxfODI1MCBpcyBub3Qgc2V0CisKKyMKKyMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAorIworIyBDT05GSUdfU0VSSUFMX1VBUlRMSVRFIGlzIG5vdCBzZXQKK0NPTkZJR19TRVJJQUxfQ09SRT15CitDT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15CitDT05GSUdfU0VSSUFMX0NQTT15CitDT05GSUdfU0VSSUFMX0NQTV9DT05TT0xFPXkKKyMgQ09ORklHX1NFUklBTF9DUE1fU0NDMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRVJJQUxfQ1BNX1NDQzIgaXMgbm90IHNldAorIyBDT05GSUdfU0VSSUFMX0NQTV9TQ0MzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFUklBTF9DUE1fU0NDNCBpcyBub3Qgc2V0CitDT05GSUdfU0VSSUFMX0NQTV9TTUMxPXkKK0NPTkZJR19TRVJJQUxfQ1BNX1NNQzI9eQorQ09ORklHX1VOSVg5OF9QVFlTPXkKK0NPTkZJR19MRUdBQ1lfUFRZUz15CitDT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKKyMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0CitDT05GSUdfSFdfUkFORE9NPXkKKyMgQ09ORklHX05WUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dFTl9SVEMgaXMgbm90IHNldAorIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAorIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0CisjIENPTkZJR19JMkMgaXMgbm90IHNldAorIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1cxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CisjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0CisjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKKworIworIyBTb25pY3MgU2lsaWNvbiBCYWNrcGxhbmUKKyMKK0NPTkZJR19TU0JfUE9TU0lCTEU9eQorIyBDT05GSUdfU1NCIGlzIG5vdCBzZXQKKworIworIyBNdWx0aWZ1bmN0aW9uIGRldmljZSBkcml2ZXJzCisjCisjIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAorIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0CisKKyMKKyMgTXVsdGltZWRpYSBkZXZpY2VzCisjCisKKyMKKyMgTXVsdGltZWRpYSBjb3JlIHN1cHBvcnQKKyMKKyMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0CisjIENPTkZJR19EVkJfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19NRURJQSBpcyBub3Qgc2V0CisKKyMKKyMgTXVsdGltZWRpYSBkcml2ZXJzCisjCisjIENPTkZJR19EQUIgaXMgbm90IHNldAorCisjCisjIEdyYXBoaWNzIHN1cHBvcnQKKyMKKyMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfRElTUExBWV9TVVBQT1JUIGlzIG5vdCBzZXQKKworIworIyBTb3VuZAorIworIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NVUFBPUlQgaXMgbm90IHNldAorIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FDQ0VTU0lCSUxJVFkgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0NMQVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldAorIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKKworIworIyBGaWxlIHN5c3RlbXMKKyMKK0NPTkZJR19FWFQyX0ZTPXkKKyMgQ09ORklHX0VYVDJfRlNfWEFUVFIgaXMgbm90IHNldAorIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAorQ09ORklHX0VYVDNfRlM9eQorIyBDT05GSUdfRVhUM19GU19YQVRUUiBpcyBub3Qgc2V0CitDT05GSUdfSkJEPXkKKyMgQ09ORklHX0pCRF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CitDT05GSUdfRE5PVElGWT15CitDT05GSUdfSU5PVElGWT15CitDT05GSUdfSU5PVElGWV9VU0VSPXkKKyMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0CitDT05GSUdfQVVUT0ZTNF9GUz15CisjIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKKworIworIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCisjCisjIENPTkZJR19JU085NjYwX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VERl9GUyBpcyBub3Qgc2V0CisKKyMKKyMgRE9TL0ZBVC9OVCBGaWxlc3lzdGVtcworIworIyBDT05GSUdfTVNET1NfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVkZBVF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OVEZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBQc2V1ZG8gZmlsZXN5c3RlbXMKKyMKK0NPTkZJR19QUk9DX0ZTPXkKK0NPTkZJR19QUk9DX0tDT1JFPXkKK0NPTkZJR19QUk9DX1NZU0NUTD15CitDT05GSUdfU1lTRlM9eQorQ09ORklHX1RNUEZTPXkKKyMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAorIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAorCisjCisjIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKKyMKKyMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAorQ09ORklHX0pGRlMyX0ZTPXkKK0NPTkZJR19KRkZTMl9GU19ERUJVRz0wCitDT05GSUdfSkZGUzJfRlNfV1JJVEVCVUZGRVI9eQorIyBDT05GSUdfSkZGUzJfRlNfV0JVRl9WRVJJRlkgaXMgbm90IHNldAorIyBDT05GSUdfSkZGUzJfQ09NUFJFU1NJT05fT1BUSU9OUyBpcyBub3Qgc2V0CitDT05GSUdfSkZGUzJfWkxJQj15CisjIENPTkZJR19KRkZTMl9MWk8gaXMgbm90IHNldAorQ09ORklHX0pGRlMyX1JUSU1FPXkKKyMgQ09ORklHX0pGRlMyX1JVQklOIGlzIG5vdCBzZXQKK0NPTkZJR19DUkFNRlM9eQorIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CitDT05GSUdfTkZTX0ZTPXkKK0NPTkZJR19ORlNfVjM9eQorIyBDT05GSUdfTkZTX1YzX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKK0NPTkZJR19ST09UX05GUz15CitDT05GSUdfTE9DS0Q9eQorQ09ORklHX0xPQ0tEX1Y0PXkKK0NPTkZJR19ORlNfQ09NTU9OPXkKK0NPTkZJR19TVU5SUEM9eQorIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NJRlMgaXMgbm90IHNldAorIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAorCisjCisjIFBhcnRpdGlvbiBUeXBlcworIworQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRD15CisjIENPTkZJR19BQ09STl9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfT1NGX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19BTUlHQV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfQVRBUklfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ19QQVJUSVRJT04gaXMgbm90IHNldAorQ09ORklHX01TRE9TX1BBUlRJVElPTj15CisjIENPTkZJR19CU0RfRElTS0xBQkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JTklYX1NVQlBBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19TT0xBUklTX1g4Nl9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfVU5JWFdBUkVfRElTS0xBQkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xETV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfU0dJX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19VTFRSSVhfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NVTl9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfS0FSTUFfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VGSV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfU1lTVjY4X1BBUlRJVElPTiBpcyBub3Qgc2V0CitDT05GSUdfTkxTPXkKK0NPTkZJR19OTFNfREVGQVVMVD0iaXNvODg1OS0xIgorQ09ORklHX05MU19DT0RFUEFHRV80Mzc9eQorIyBDT05GSUdfTkxTX0NPREVQQUdFXzczNyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfNzc1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODU1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYxIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY5IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85MzYgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzk1MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85NDkgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg3NCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV84IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUxIGlzIG5vdCBzZXQKK0NPTkZJR19OTFNfQVNDSUk9eQorQ09ORklHX05MU19JU084ODU5XzE9eQorIyBDT05GSUdfTkxTX0lTTzg4NTlfMiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8zIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV82IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfOSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8xMyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8xNCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8xNSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfS09JOF9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19LT0k4X1UgaXMgbm90IHNldAorQ09ORklHX05MU19VVEY4PXkKKworIworIyBMaWJyYXJ5IHJvdXRpbmVzCisjCitDT05GSUdfQklUUkVWRVJTRT15CisjIENPTkZJR19HRU5FUklDX0ZJTkRfRklSU1RfQklUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQ19DQ0lUVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0CisjIENPTkZJR19DUkNfSVRVX1QgaXMgbm90IHNldAorQ09ORklHX0NSQzMyPXkKKyMgQ09ORklHX0NSQzcgaXMgbm90IHNldAorIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKK0NPTkZJR19aTElCX0lORkxBVEU9eQorQ09ORklHX1pMSUJfREVGTEFURT15CitDT05GSUdfUExJU1Q9eQorQ09ORklHX0hBU19JT01FTT15CitDT05GSUdfSEFTX0lPUE9SVD15CitDT05GSUdfSEFTX0RNQT15CitDT05GSUdfSEFWRV9MTUI9eQorCisjCisjIEtlcm5lbCBoYWNraW5nCisjCisjIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0CitDT05GSUdfRU5BQkxFX1dBUk5fREVQUkVDQVRFRD15CitDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQorQ09ORklHX0ZSQU1FX1dBUk49MTAyNAorQ09ORklHX01BR0lDX1NZU1JRPXkKKyMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19GUz15CisjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19LRVJORUw9eQorIyBDT05GSUdfREVCVUdfU0hJUlEgaXMgbm90IHNldAorIyBDT05GSUdfREVURUNUX1NPRlRMT0NLVVAgaXMgbm90IHNldAorIyBDT05GSUdfU0NIRURfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19USU1FUl9TVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19PQkpFQ1RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NMQUIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfUlRfTVVURVhFUyBpcyBub3Qgc2V0CisjIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTVVURVhFUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19MT0NLSU5HX0FQSV9TRUxGVEVTVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfQlVHVkVSQk9TRT15CitDT05GSUdfREVCVUdfSU5GTz15CisjIENPTkZJR19ERUJVR19WTSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19XUklURUNPVU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAorIyBDT05GSUdfQk9PVF9QUklOVEtfREVMQVkgaXMgbm90IHNldAorIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAorIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TVEFDS09WRVJGTE9XIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1BBR0VBTExPQyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR0dFUiBpcyBub3Qgc2V0CisjIENPTkZJR19LR0RCX0NPTlNPTEUgaXMgbm90IHNldAorIyBDT05GSUdfSVJRU1RBQ0tTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJUlFfREVCVUcgaXMgbm90IHNldAorQ09ORklHX0JESV9TV0lUQ0g9eQorIyBDT05GSUdfUFBDX0VBUkxZX0RFQlVHIGlzIG5vdCBzZXQKKworIworIyBTZWN1cml0eSBvcHRpb25zCisjCisjIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE89eQorCisjCisjIENyeXB0byBjb3JlIG9yIGhlbHBlcgorIworQ09ORklHX0NSWVBUT19BTEdBUEk9eQorQ09ORklHX0NSWVBUT19CTEtDSVBIRVI9eQorQ09ORklHX0NSWVBUT19NQU5BR0VSPXkKKyMgQ09ORklHX0NSWVBUT19OVUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DUllQVEQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FVVEhFTkMgaXMgbm90IHNldAorCisjCisjIEF1dGhlbnRpY2F0ZWQgRW5jcnlwdGlvbiB3aXRoIEFzc29jaWF0ZWQgRGF0YQorIworIyBDT05GSUdfQ1JZUFRPX0NDTSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0NNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TRVFJViBpcyBub3Qgc2V0CisKKyMKKyMgQmxvY2sgbW9kZXMKKyMKK0NPTkZJR19DUllQVE9fQ0JDPXkKKyMgQ09ORklHX0NSWVBUT19DVFIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NUUyBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0VDQj15CitDT05GSUdfQ1JZUFRPX1BDQkM9eQorCisjCisjIEhhc2ggbW9kZXMKKyMKKyMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKKworIworIyBEaWdlc3QKKyMKKyMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX01ENT15CisjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NIQTEgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NIQTI1NiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0hBNTEyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19UR1IxOTIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1dQNTEyIGlzIG5vdCBzZXQKKworIworIyBDaXBoZXJzCisjCisjIENPTkZJR19DUllQVE9fQUVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19BTlVCSVMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FSQzQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0JMT1dGSVNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQU1FTExJQSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0FTVDUgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NBU1Q2IGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fREVTPXkKKyMgQ09ORklHX0NSWVBUT19GQ1JZUFQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0tIQVpBRCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0VFRCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0VSUEVOVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVEVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19UV09GSVNIIGlzIG5vdCBzZXQKKworIworIyBDb21wcmVzc2lvbgorIworIyBDT05GSUdfQ1JZUFRPX0RFRkxBVEUgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0xaTyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fSFcgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0NMT0NLIGlzIG5vdCBzZXQKK0NPTkZJR19QUENfTElCX1JIRUFQPXkKKyMgQ09ORklHX1ZJUlRVQUxJWkFUSU9OIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzL21nc3V2ZF9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9tZ3N1dmRfZGVmY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNjZDZjZTQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9tZ3N1dmRfZGVmY29uZmlnCkBAIC0wLDAgKzEsODcyIEBACisjCisjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjYtcmMyCisjIFdlZCBNYXkgMjEgMTM6MzA6MzMgMjAwOAorIworIyBDT05GSUdfUFBDNjQgaXMgbm90IHNldAorCisjCisjIFByb2Nlc3NvciBzdXBwb3J0CisjCisjIENPTkZJR182eHggaXMgbm90IHNldAorIyBDT05GSUdfUFBDXzg1eHggaXMgbm90IHNldAorQ09ORklHX1BQQ184eHg9eQorIyBDT05GSUdfNDB4IGlzIG5vdCBzZXQKKyMgQ09ORklHXzQ0eCBpcyBub3Qgc2V0CisjIENPTkZJR19FMjAwIGlzIG5vdCBzZXQKK0NPTkZJR184eHg9eQorIyBDT05GSUdfUFBDX01NX1NMSUNFUyBpcyBub3Qgc2V0CitDT05GSUdfTk9UX0NPSEVSRU5UX0NBQ0hFPXkKK0NPTkZJR19QUEMzMj15CitDT05GSUdfV09SRF9TSVpFPTMyCitDT05GSUdfUFBDX01FUkdFPXkKK0NPTkZJR19NTVU9eQorQ09ORklHX0dFTkVSSUNfQ01PU19VUERBVEU9eQorQ09ORklHX0dFTkVSSUNfVElNRT15CitDT05GSUdfR0VORVJJQ19USU1FX1ZTWVNDQUxMPXkKK0NPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKK0NPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKKyMgQ09ORklHX0hBVkVfU0VUVVBfUEVSX0NQVV9BUkVBIGlzIG5vdCBzZXQKK0NPTkZJR19JUlFfUEVSX0NQVT15CitDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKK0NPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQorQ09ORklHX1JXU0VNX1hDSEdBRERfQUxHT1JJVEhNPXkKK0NPTkZJR19BUkNIX0hBU19JTE9HMl9VMzI9eQorQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15CitDT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQorQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVD15CisjIENPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTIGlzIG5vdCBzZXQKK0NPTkZJR19QUEM9eQorQ09ORklHX0VBUkxZX1BSSU5USz15CitDT05GSUdfR0VORVJJQ19OVlJBTT15CitDT05GSUdfU0NIRURfTk9fTk9fT01JVF9GUkFNRV9QT0lOVEVSPXkKK0NPTkZJR19BUkNIX01BWV9IQVZFX1BDX0ZEQz15CitDT05GSUdfUFBDX09GPXkKK0NPTkZJR19PRj15CisjIENPTkZJR19QUENfVURCR18xNjU1MCBpcyBub3Qgc2V0CisjIENPTkZJR19HRU5FUklDX1RCU1lOQyBpcyBub3Qgc2V0CitDT05GSUdfQVVESVRfQVJDSD15CisjIENPTkZJR19ERUZBVUxUX1VJTUFHRSBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfRENSX05BVElWRSBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfRENSX01NSU8gaXMgbm90IHNldAorQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKKworIworIyBHZW5lcmFsIHNldHVwCisjCitDT05GSUdfRVhQRVJJTUVOVEFMPXkKK0NPTkZJR19CUk9LRU5fT05fU01QPXkKK0NPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKK0NPTkZJR19MT0NBTFZFUlNJT049IiIKK0NPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15CisjIENPTkZJR19TV0FQIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNWSVBDPXkKK0NPTkZJR19TWVNWSVBDX1NZU0NUTD15CisjIENPTkZJR19QT1NJWF9NUVVFVUUgaXMgbm90IHNldAorIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0CisjIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAorIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAorQ09ORklHX0xPR19CVUZfU0hJRlQ9MTcKKyMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAorQ09ORklHX0dST1VQX1NDSEVEPXkKK0NPTkZJR19GQUlSX0dST1VQX1NDSEVEPXkKKyMgQ09ORklHX1JUX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKK0NPTkZJR19VU0VSX1NDSEVEPXkKKyMgQ09ORklHX0NHUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CitDT05GSUdfU1lTRlNfREVQUkVDQVRFRD15CitDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMj15CisjIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0CisjIENPTkZJR19OQU1FU1BBQ0VTIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0lOSVRSRD15CitDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgorIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAorQ09ORklHX1NZU0NUTD15CitDT05GSUdfRU1CRURERUQ9eQorIyBDT05GSUdfU1lTQ1RMX1NZU0NBTEwgaXMgbm90IHNldAorQ09ORklHX0tBTExTWU1TPXkKKyMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAorIyBDT05GSUdfSE9UUExVRyBpcyBub3Qgc2V0CitDT05GSUdfUFJJTlRLPXkKKyMgQ09ORklHX0JVRyBpcyBub3Qgc2V0CitDT05GSUdfRUxGX0NPUkU9eQorQ09ORklHX0NPTVBBVF9CUks9eQorIyBDT05GSUdfQkFTRV9GVUxMIGlzIG5vdCBzZXQKK0NPTkZJR19GVVRFWD15CitDT05GSUdfQU5PTl9JTk9ERVM9eQorIyBDT05GSUdfRVBPTEwgaXMgbm90IHNldAorQ09ORklHX1NJR05BTEZEPXkKK0NPTkZJR19USU1FUkZEPXkKK0NPTkZJR19FVkVOVEZEPXkKK0NPTkZJR19TSE1FTT15CisjIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUyBpcyBub3Qgc2V0CitDT05GSUdfU0xBQj15CisjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMT0IgaXMgbm90IHNldAorIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfT1BST0ZJTEU9eQorQ09ORklHX0hBVkVfS1BST0JFUz15CitDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKKyMgQ09ORklHX0hBVkVfRE1BX0FUVFJTIGlzIG5vdCBzZXQKK0NPTkZJR19QUk9DX1BBR0VfTU9OSVRPUj15CitDT05GSUdfU0xBQklORk89eQorQ09ORklHX1JUX01VVEVYRVM9eQorIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0CitDT05GSUdfQkFTRV9TTUFMTD0xCisjIENPTkZJR19NT0RVTEVTIGlzIG5vdCBzZXQKK0NPTkZJR19CTE9DSz15CisjIENPTkZJR19MQkQgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19MU0YgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAorCisjCisjIElPIFNjaGVkdWxlcnMKKyMKK0NPTkZJR19JT1NDSEVEX05PT1A9eQorQ09ORklHX0lPU0NIRURfQVM9eQorQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQorQ09ORklHX0lPU0NIRURfQ0ZRPXkKK0NPTkZJR19ERUZBVUxUX0FTPXkKKyMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImFudGljaXBhdG9yeSIKK0NPTkZJR19DTEFTU0lDX1JDVT15CisKKyMKKyMgUGxhdGZvcm0gc3VwcG9ydAorIworIyBDT05GSUdfUFBDX01QQzUxMnggaXMgbm90IHNldAorIyBDT05GSUdfUFBDX01QQzUxMjEgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0NFTEwgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0NFTExfTkFUSVZFIGlzIG5vdCBzZXQKK0NPTkZJR19DUE0xPXkKKyMgQ09ORklHX01QQzhYWEZBRFMgaXMgbm90IHNldAorIyBDT05GSUdfTVBDODZYQURTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01QQzg4NUFEUyBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfRVA4OFhDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19BRERFUjg3NSBpcyBub3Qgc2V0CitDT05GSUdfUFBDX01HU1VWRD15CisKKyMKKyMgTVBDOHh4IENQTSBPcHRpb25zCisjCisKKyMKKyMgR2VuZXJpYyBNUEM4eHggT3B0aW9ucworIworQ09ORklHXzh4eF9DT1BZQkFDSz15CitDT05GSUdfOHh4X0NQVTY9eQorQ09ORklHXzh4eF9DUFUxNT15CisjIENPTkZJR19OT19VQ09ERV9QQVRDSCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU09GX1VDT0RFX1BBVENIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TUElfVUNPREVfUEFUQ0ggaXMgbm90IHNldAorQ09ORklHX0kyQ19TUElfU01DMV9VQ09ERV9QQVRDSD15CitDT05GSUdfVUNPREVfUEFUQ0g9eQorIyBDT05GSUdfUFEyQURTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQSUMgaXMgbm90IHNldAorIyBDT05GSUdfTVBJQyBpcyBub3Qgc2V0CisjIENPTkZJR19NUElDX1dFSVJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19JODI1OSBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfUlRBUyBpcyBub3Qgc2V0CisjIENPTkZJR19NTUlPX05WUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19NUEMxMDYgaXMgbm90IHNldAorIyBDT05GSUdfUFBDXzk3MF9OQVAgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0lORElSRUNUX0lPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dFTkVSSUNfSU9NQVAgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0ZSRVEgaXMgbm90IHNldAorQ09ORklHX1BQQ19DUE1fTkVXX0JJTkRJTkc9eQorIyBDT05GSUdfRlNMX1VMSTE1NzUgaXMgbm90IHNldAorQ09ORklHX0NQTT15CisKKyMKKyMgS2VybmVsIG9wdGlvbnMKKyMKKyMgQ09ORklHX0hJR0hNRU0gaXMgbm90IHNldAorIyBDT05GSUdfVElDS19PTkVTSE9UIGlzIG5vdCBzZXQKKyMgQ09ORklHX05PX0haIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJR0hfUkVTX1RJTUVSUyBpcyBub3Qgc2V0CitDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UU19CVUlMRD15CisjIENPTkZJR19IWl8xMDAgaXMgbm90IHNldAorIyBDT05GSUdfSFpfMjUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0haXzMwMCBpcyBub3Qgc2V0CitDT05GSUdfSFpfMTAwMD15CitDT05GSUdfSFo9MTAwMAorIyBDT05GSUdfU0NIRURfSFJUSUNLIGlzIG5vdCBzZXQKK0NPTkZJR19QUkVFTVBUX05PTkU9eQorIyBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlkgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0CitDT05GSUdfQklORk1UX0VMRj15CisjIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0CitDT05GSUdfTUFUSF9FTVVMQVRJT049eQorIyBDT05GSUdfSU9NTVVfSEVMUEVSIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVRz15CitDT05GSUdfQVJDSF9IQVNfV0FMS19NRU1PUlk9eQorQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RSRU1PVkU9eQorQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQorQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKK0NPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKK0NPTkZJR19GTEFUTUVNX01BTlVBTD15CisjIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQQVJTRU1FTV9NQU5VQUwgaXMgbm90IHNldAorQ09ORklHX0ZMQVRNRU09eQorQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKKyMgQ09ORklHX1NQQVJTRU1FTV9TVEFUSUMgaXMgbm90IHNldAorIyBDT05GSUdfU1BBUlNFTUVNX1ZNRU1NQVBfRU5BQkxFIGlzIG5vdCBzZXQKK0NPTkZJR19QQUdFRkxBR1NfRVhURU5ERUQ9eQorQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKKyMgQ09ORklHX1JFU09VUkNFU182NEJJVCBpcyBub3Qgc2V0CitDT05GSUdfWk9ORV9ETUFfRkxBRz0xCitDT05GSUdfQk9VTkNFPXkKK0NPTkZJR19WSVJUX1RPX0JVUz15CitDT05GSUdfRk9SQ0VfTUFYX1pPTkVPUkRFUj0xMQorIyBDT05GSUdfUFJPQ19ERVZJQ0VUUkVFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NNRExJTkVfQk9PTCBpcyBub3Qgc2V0CisjIENPTkZJR19QTSBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNDT01QIGlzIG5vdCBzZXQKK0NPTkZJR19JU0FfRE1BX0FQST15CisKKyMKKyMgQnVzIG9wdGlvbnMKKyMKK0NPTkZJR19aT05FX0RNQT15CitDT05GSUdfRlNMX1NPQz15CisjIENPTkZJR19QQ0kgaXMgbm90IHNldAorIyBDT05GSUdfUENJX0RPTUFJTlMgaXMgbm90IHNldAorIyBDT05GSUdfUENJX1NZU0NBTEwgaXMgbm90IHNldAorIyBDT05GSUdfUENJX1FTUEFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBU19SQVBJRElPIGlzIG5vdCBzZXQKKworIworIyBBZHZhbmNlZCBzZXR1cAorIworIyBDT05GSUdfQURWQU5DRURfT1BUSU9OUyBpcyBub3Qgc2V0CisKKyMKKyMgRGVmYXVsdCBzZXR0aW5ncyBmb3IgYWR2YW5jZWQgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSB1c2VkCisjCitDT05GSUdfTE9XTUVNX1NJWkU9MHgzMDAwMDAwMAorQ09ORklHX1BBR0VfT0ZGU0VUPTB4YzAwMDAwMDAKK0NPTkZJR19LRVJORUxfU1RBUlQ9MHhjMDAwMDAwMAorQ09ORklHX1BIWVNJQ0FMX1NUQVJUPTB4MDAwMDAwMDAKK0NPTkZJR19UQVNLX1NJWkU9MHg4MDAwMDAwMAorQ09ORklHX0NPTlNJU1RFTlRfU1RBUlQ9MHhmZDAwMDAwMAorQ09ORklHX0NPTlNJU1RFTlRfU0laRT0weDAwMjAwMDAwCisKKyMKKyMgTmV0d29ya2luZworIworQ09ORklHX05FVD15CisKKyMKKyMgTmV0d29ya2luZyBvcHRpb25zCisjCitDT05GSUdfUEFDS0VUPXkKKyMgQ09ORklHX1BBQ0tFVF9NTUFQIGlzIG5vdCBzZXQKK0NPTkZJR19VTklYPXkKK0NPTkZJR19YRlJNPXkKKyMgQ09ORklHX1hGUk1fVVNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19YRlJNX1NVQl9QT0xJQ1kgaXMgbm90IHNldAorIyBDT05GSUdfWEZSTV9NSUdSQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGUk1fU1RBVElTVElDUyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfS0VZIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUPXkKK0NPTkZJR19JUF9NVUxUSUNBU1Q9eQorIyBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9GSUJfSEFTSD15CitDT05GSUdfSVBfUE5QPXkKKyMgQ09ORklHX0lQX1BOUF9ESENQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX1BOUF9CT09UUCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9QTlBfUkFSUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfSVBJUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAorIyBDT05GSUdfSVBfTVJPVVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSUEQgaXMgbm90IHNldAorQ09ORklHX1NZTl9DT09LSUVTPXkKKyMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0CitDT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUPXkKK0NPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUw9eQorQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQ9eQorIyBDT05GSUdfSU5FVF9MUk8gaXMgbm90IHNldAorQ09ORklHX0lORVRfRElBRz15CitDT05GSUdfSU5FVF9UQ1BfRElBRz15CisjIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0CitDT05GSUdfVENQX0NPTkdfQ1VCSUM9eQorQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImN1YmljIgorIyBDT05GSUdfVENQX01ENVNJRyBpcyBub3Qgc2V0CisjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVFdPUktfU0VDTUFSSyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAorIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJUEMgaXMgbm90IHNldAorIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CisjIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQWCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0CisjIENPTkZJR19YMjUgaXMgbm90IHNldAorIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0CisjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAorIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAorCisjCisjIE5ldHdvcmsgdGVzdGluZworIworIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0CisjIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0CisjIENPTkZJR19DQU4gaXMgbm90IHNldAorIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0CisjIENPTkZJR19CVCBpcyBub3Qgc2V0CisjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CisKKyMKKyMgV2lyZWxlc3MKKyMKKyMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0CisjIENPTkZJR19NQUM4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19JRUVFODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CisKKyMKKyMgRGV2aWNlIERyaXZlcnMKKyMKKworIworIyBHZW5lcmljIERyaXZlciBPcHRpb25zCisjCitDT05GSUdfU1RBTkRBTE9ORT15CitDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CisjIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0CisjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAorQ09ORklHX01URD15CisjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NPTkNBVCBpcyBub3Qgc2V0CitDT05GSUdfTVREX1BBUlRJVElPTlM9eQorIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAorQ09ORklHX01URF9DTURMSU5FX1BBUlRTPXkKK0NPTkZJR19NVERfT0ZfUEFSVFM9eQorIyBDT05GSUdfTVREX0FSN19QQVJUUyBpcyBub3Qgc2V0CisKKyMKKyMgVXNlciBNb2R1bGVzIEFuZCBUcmFuc2xhdGlvbiBMYXllcnMKKyMKK0NPTkZJR19NVERfQ0hBUj15CitDT05GSUdfTVREX0JMS0RFVlM9eQorQ09ORklHX01URF9CTE9DSz15CisjIENPTkZJR19GVEwgaXMgbm90IHNldAorIyBDT05GSUdfTkZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19SRkRfRlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NTRkRDIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9PT1BTIGlzIG5vdCBzZXQKKworIworIyBSQU0vUk9NL0ZsYXNoIGNoaXAgZHJpdmVycworIworQ09ORklHX01URF9DRkk9eQorIyBDT05GSUdfTVREX0pFREVDUFJPQkUgaXMgbm90IHNldAorQ09ORklHX01URF9HRU5fUFJPQkU9eQorQ09ORklHX01URF9DRklfQURWX09QVElPTlM9eQorQ09ORklHX01URF9DRklfTk9TV0FQPXkKKyMgQ09ORklHX01URF9DRklfQkVfQllURV9TV0FQIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DRklfTEVfQllURV9TV0FQIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX0dFT01FVFJZPXkKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMT15CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzI9eQorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzggaXMgbm90IHNldAorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE2IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8zMiBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NGSV9JMT15CitDT05GSUdfTVREX0NGSV9JMj15CisjIENPTkZJR19NVERfQ0ZJX0k0IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DRklfSTggaXMgbm90IHNldAorIyBDT05GSUdfTVREX09UUCBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NGSV9JTlRFTEVYVD15CitDT05GSUdfTVREX0NGSV9BTURTVEQ9eQorQ09ORklHX01URF9DRklfU1RBQT15CitDT05GSUdfTVREX0NGSV9VVElMPXkKKyMgQ09ORklHX01URF9SQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX1JPTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQUJTRU5UIGlzIG5vdCBzZXQKKworIworIyBNYXBwaW5nIGRyaXZlcnMgZm9yIGNoaXAgYWNjZXNzCisjCisjIENPTkZJR19NVERfQ09NUExFWF9NQVBQSU5HUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUEhZU01BUCBpcyBub3Qgc2V0CitDT05GSUdfTVREX1BIWVNNQVBfT0Y9eQorIyBDT05GSUdfTVREX0NGSV9GTEFHQURNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9QTEFUUkFNIGlzIG5vdCBzZXQKKworIworIyBTZWxmLWNvbnRhaW5lZCBNVEQgZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01URF9TTFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUEhSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX01URFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQkxPQ0syTVREIGlzIG5vdCBzZXQKKworIworIyBEaXNrLU9uLUNoaXAgRGV2aWNlIERyaXZlcnMKKyMKKyMgQ09ORklHX01URF9ET0MyMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ET0MyMDAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ET0MyMDAxUExVUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTkFORCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfT05FTkFORCBpcyBub3Qgc2V0CisKKyMKKyMgVUJJIC0gVW5zb3J0ZWQgYmxvY2sgaW1hZ2VzCisjCisjIENPTkZJR19NVERfVUJJIGlzIG5vdCBzZXQKK0NPTkZJR19PRl9ERVZJQ0U9eQorIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVj15CisjIENPTkZJR19CTEtfREVWX0ZEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9MT09QPXkKKyMgQ09ORklHX0JMS19ERVZfQ1JZUFRPTE9PUCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9SQU09eQorQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2CitDT05GSUdfQkxLX0RFVl9SQU1fU0laRT00MDk2CisjIENPTkZJR19CTEtfREVWX1hJUCBpcyBub3Qgc2V0CisjIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVNDX0RFVklDRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfSURFPXkKKyMgQ09ORklHX0lERSBpcyBub3Qgc2V0CisKKyMKKyMgU0NTSSBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfRE1BIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTkVUTElOSyBpcyBub3Qgc2V0CisjIENPTkZJR19BVEEgaXMgbm90IHNldAorIyBDT05GSUdfTUQgaXMgbm90IHNldAorIyBDT05GSUdfTUFDSU5UT1NIX0RSSVZFUlMgaXMgbm90IHNldAorQ09ORklHX05FVERFVklDRVM9eQorIyBDT05GSUdfTkVUREVWSUNFU19NVUxUSVFVRVVFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAorIyBDT05GSUdfTUFDVkxBTiBpcyBub3Qgc2V0CisjIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAorIyBDT05GSUdfVFVOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZFVEggaXMgbm90IHNldAorQ09ORklHX1BIWUxJQj15CisKKyMKKyMgTUlJIFBIWSBkZXZpY2UgZHJpdmVycworIworIyBDT05GSUdfTUFSVkVMTF9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfREFWSUNPTV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfUVNFTUlfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xYVF9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfQ0lDQURBX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19WSVRFU1NFX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19TTVNDX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19CUk9BRENPTV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfSUNQTFVTX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19SRUFMVEVLX1BIWSBpcyBub3Qgc2V0CitDT05GSUdfRklYRURfUEhZPXkKKyMgQ09ORklHX01ESU9fQklUQkFORyBpcyBub3Qgc2V0CitDT05GSUdfTkVUX0VUSEVSTkVUPXkKK0NPTkZJR19NSUk9eQorIyBDT05GSUdfSUJNX05FV19FTUFDX1pNSUkgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1JHTUlJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19UQUggaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX0VNQUM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CitDT05GSUdfRlNfRU5FVD15CitDT05GSUdfRlNfRU5FVF9IQVNfU0NDPXkKKyMgQ09ORklHX0ZTX0VORVRfSEFTX0ZFQyBpcyBub3Qgc2V0CisjIENPTkZJR19GU19FTkVUX01ESU9fRkVDIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVERFVl8xMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0CisKKyMKKyMgV2lyZWxlc3MgTEFOCisjCisjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfSVdMV0lGSV9MRURTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBTiBpcyBub3Qgc2V0CisjIENPTkZJR19QUFAgaXMgbm90IHNldAorIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0CisjIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BIT05FIGlzIG5vdCBzZXQKKworIworIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfSU5QVVQgaXMgbm90IHNldAorCisjCisjIEhhcmR3YXJlIEkvTyBwb3J0cworIworIyBDT05GSUdfU0VSSU8gaXMgbm90IHNldAorIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAorCisjCisjIENoYXJhY3RlciBkZXZpY2VzCisjCisjIENPTkZJR19WVCBpcyBub3Qgc2V0CitDT05GSUdfREVWS01FTT15CisjIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAorCisjCisjIFNlcmlhbCBkcml2ZXJzCisjCisjIENPTkZJR19TRVJJQUxfODI1MCBpcyBub3Qgc2V0CisKKyMKKyMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAorIworIyBDT05GSUdfU0VSSUFMX1VBUlRMSVRFIGlzIG5vdCBzZXQKK0NPTkZJR19TRVJJQUxfQ09SRT15CitDT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15CitDT05GSUdfU0VSSUFMX0NQTT15CitDT05GSUdfU0VSSUFMX0NQTV9DT05TT0xFPXkKKyMgQ09ORklHX1NFUklBTF9DUE1fU0NDMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRVJJQUxfQ1BNX1NDQzIgaXMgbm90IHNldAorIyBDT05GSUdfU0VSSUFMX0NQTV9TQ0MzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFUklBTF9DUE1fU0NDNCBpcyBub3Qgc2V0CitDT05GSUdfU0VSSUFMX0NQTV9TTUMxPXkKKyMgQ09ORklHX1NFUklBTF9DUE1fU01DMiBpcyBub3Qgc2V0CitDT05GSUdfVU5JWDk4X1BUWVM9eQorIyBDT05GSUdfTEVHQUNZX1BUWVMgaXMgbm90IHNldAorIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKK0NPTkZJR19IV19SQU5ET009eQorIyBDT05GSUdfTlZSQU0gaXMgbm90IHNldAorQ09ORklHX0dFTl9SVEM9eQorIyBDT05GSUdfR0VOX1JUQ19YIGlzIG5vdCBzZXQKKyMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAorIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkMgaXMgbm90IHNldAorIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1cxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CisjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0CisjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKKworIworIyBTb25pY3MgU2lsaWNvbiBCYWNrcGxhbmUKKyMKK0NPTkZJR19TU0JfUE9TU0lCTEU9eQorIyBDT05GSUdfU1NCIGlzIG5vdCBzZXQKKworIworIyBNdWx0aWZ1bmN0aW9uIGRldmljZSBkcml2ZXJzCisjCisjIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAorIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0CisKKyMKKyMgTXVsdGltZWRpYSBkZXZpY2VzCisjCisKKyMKKyMgTXVsdGltZWRpYSBjb3JlIHN1cHBvcnQKKyMKKyMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0CisjIENPTkZJR19EVkJfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19NRURJQSBpcyBub3Qgc2V0CisKKyMKKyMgTXVsdGltZWRpYSBkcml2ZXJzCisjCisjIENPTkZJR19EQUIgaXMgbm90IHNldAorCisjCisjIEdyYXBoaWNzIHN1cHBvcnQKKyMKKyMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfRElTUExBWV9TVVBQT1JUIGlzIG5vdCBzZXQKKworIworIyBTb3VuZAorIworIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NVUFBPUlQgaXMgbm90IHNldAorIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FDQ0VTU0lCSUxJVFkgaXMgbm90IHNldAorIyBDT05GSUdfRURBQyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfQ0xBU1MgaXMgbm90IHNldAorIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19VSU8gaXMgbm90IHNldAorCisjCisjIEZpbGUgc3lzdGVtcworIworQ09ORklHX0VYVDJfRlM9eQorQ09ORklHX0VYVDJfRlNfWEFUVFI9eQorIyBDT05GSUdfRVhUMl9GU19QT1NJWF9BQ0wgaXMgbm90IHNldAorIyBDT05GSUdfRVhUMl9GU19TRUNVUklUWSBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0CitDT05GSUdfRVhUM19GUz15CitDT05GSUdfRVhUM19GU19YQVRUUj15CisjIENPTkZJR19FWFQzX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQzX0ZTX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDRERVZfRlMgaXMgbm90IHNldAorQ09ORklHX0pCRD15CisjIENPTkZJR19KQkRfREVCVUcgaXMgbm90IHNldAorQ09ORklHX0ZTX01CQ0FDSEU9eQorIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAorQ09ORklHX0ROT1RJRlk9eQorQ09ORklHX0lOT1RJRlk9eQorQ09ORklHX0lOT1RJRllfVVNFUj15CisjIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0CisjIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKKworIworIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCisjCisjIENPTkZJR19JU085NjYwX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VERl9GUyBpcyBub3Qgc2V0CisKKyMKKyMgRE9TL0ZBVC9OVCBGaWxlc3lzdGVtcworIworIyBDT05GSUdfTVNET1NfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVkZBVF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OVEZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBQc2V1ZG8gZmlsZXN5c3RlbXMKKyMKK0NPTkZJR19QUk9DX0ZTPXkKKyMgQ09ORklHX1BST0NfS0NPUkUgaXMgbm90IHNldAorQ09ORklHX1BST0NfU1lTQ1RMPXkKK0NPTkZJR19TWVNGUz15CitDT05GSUdfVE1QRlM9eQorIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0CisjIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgTWlzY2VsbGFuZW91cyBmaWxlc3lzdGVtcworIworIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfSkZGUzJfRlM9eQorQ09ORklHX0pGRlMyX0ZTX0RFQlVHPTAKK0NPTkZJR19KRkZTMl9GU19XUklURUJVRkZFUj15CisjIENPTkZJR19KRkZTMl9GU19XQlVGX1ZFUklGWSBpcyBub3Qgc2V0CisjIENPTkZJR19KRkZTMl9TVU1NQVJZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGRlMyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGRlMyX0NPTVBSRVNTSU9OX09QVElPTlMgaXMgbm90IHNldAorQ09ORklHX0pGRlMyX1pMSUI9eQorIyBDT05GSUdfSkZGUzJfTFpPIGlzIG5vdCBzZXQKK0NPTkZJR19KRkZTMl9SVElNRT15CisjIENPTkZJR19KRkZTMl9SVUJJTiBpcyBub3Qgc2V0CitDT05GSUdfQ1JBTUZTPXkKKyMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAorQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQorQ09ORklHX05GU19GUz15CitDT05GSUdfTkZTX1YzPXkKKyMgQ09ORklHX05GU19WM19BQ0wgaXMgbm90IHNldAorIyBDT05GSUdfTkZTX1Y0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05GU0QgaXMgbm90IHNldAorQ09ORklHX1JPT1RfTkZTPXkKK0NPTkZJR19MT0NLRD15CitDT05GSUdfTE9DS0RfVjQ9eQorQ09ORklHX05GU19DT01NT049eQorQ09ORklHX1NVTlJQQz15CisjIENPTkZJR19TVU5SUENfQklORDM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JQQ1NFQ19HU1NfS1JCNSBpcyBub3Qgc2V0CisjIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DSUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgUGFydGl0aW9uIFR5cGVzCisjCitDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEPXkKKyMgQ09ORklHX0FDT1JOX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19PU0ZfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FNSUdBX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFSSV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfTUFDX1BBUlRJVElPTiBpcyBub3Qgc2V0CitDT05GSUdfTVNET1NfUEFSVElUSU9OPXkKKyMgQ09ORklHX0JTRF9ESVNLTEFCRUwgaXMgbm90IHNldAorIyBDT05GSUdfTUlOSVhfU1VCUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NPTEFSSVNfWDg2X1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19VTklYV0FSRV9ESVNLTEFCRUwgaXMgbm90IHNldAorIyBDT05GSUdfTERNX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19TR0lfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VMVFJJWF9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfU1VOX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19LQVJNQV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfRUZJX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNWNjhfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MUyBpcyBub3Qgc2V0CisjIENPTkZJR19ETE0gaXMgbm90IHNldAorCisjCisjIExpYnJhcnkgcm91dGluZXMKKyMKK0NPTkZJR19CSVRSRVZFUlNFPXkKKyMgQ09ORklHX0dFTkVSSUNfRklORF9GSVJTVF9CSVQgaXMgbm90IHNldAorQ09ORklHX0NSQ19DQ0lUVD15CisjIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0CisjIENPTkZJR19DUkNfSVRVX1QgaXMgbm90IHNldAorQ09ORklHX0NSQzMyPXkKKyMgQ09ORklHX0NSQzcgaXMgbm90IHNldAorIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKK0NPTkZJR19aTElCX0lORkxBVEU9eQorQ09ORklHX1pMSUJfREVGTEFURT15CitDT05GSUdfUExJU1Q9eQorQ09ORklHX0hBU19JT01FTT15CitDT05GSUdfSEFTX0lPUE9SVD15CitDT05GSUdfSEFTX0RNQT15CitDT05GSUdfSEFWRV9MTUI9eQorCisjCisjIEtlcm5lbCBoYWNraW5nCisjCisjIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0CitDT05GSUdfRU5BQkxFX1dBUk5fREVQUkVDQVRFRD15CitDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQorQ09ORklHX0ZSQU1FX1dBUk49MTAyNAorIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAorIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0ZTPXkKKyMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfS0VSTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAorIyBDT05GSUdfSVJRU1RBQ0tTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJUlFfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0VBUkxZX0RFQlVHIGlzIG5vdCBzZXQKKworIworIyBTZWN1cml0eSBvcHRpb25zCisjCisjIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZX0ZJTEVfQ0FQQUJJTElUSUVTIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE89eQorCisjCisjIENyeXB0byBjb3JlIG9yIGhlbHBlcgorIworIyBDT05GSUdfQ1JZUFRPX01BTkFHRVIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19OVUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DUllQVEQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FVVEhFTkMgaXMgbm90IHNldAorCisjCisjIEF1dGhlbnRpY2F0ZWQgRW5jcnlwdGlvbiB3aXRoIEFzc29jaWF0ZWQgRGF0YQorIworIyBDT05GSUdfQ1JZUFRPX0NDTSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0NNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TRVFJViBpcyBub3Qgc2V0CisKKyMKKyMgQmxvY2sgbW9kZXMKKyMKKyMgQ09ORklHX0NSWVBUT19DQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NUUiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ1RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19FQ0IgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0xSVyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fWFRTIGlzIG5vdCBzZXQKKworIworIyBIYXNoIG1vZGVzCisjCisjIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisKKyMKKyMgRGlnZXN0CisjCisjIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX01ENSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NIQTEgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NIQTI1NiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0hBNTEyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19UR1IxOTIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1dQNTEyIGlzIG5vdCBzZXQKKworIworIyBDaXBoZXJzCisjCisjIENPTkZJR19DUllQVE9fQUVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19BTlVCSVMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FSQzQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0JMT1dGSVNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQU1FTExJQSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0FTVDUgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NBU1Q2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19ERVMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0ZDUllQVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fS0hBWkFEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TQUxTQTIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TRUVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TRVJQRU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19URUEgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RXT0ZJU0ggaXMgbm90IHNldAorCisjCisjIENvbXByZXNzaW9uCisjCisjIENPTkZJR19DUllQVE9fREVGTEFURSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTFpPIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fSFc9eQorIyBDT05GSUdfUFBDX0NMT0NLIGlzIG5vdCBzZXQKK0NPTkZJR19QUENfTElCX1JIRUFQPXkKKyMgQ09ORklHX1ZJUlRVQUxJWkFUSU9OIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzL21wYzgyNzJfYWRzX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL21wYzgyNzJfYWRzX2RlZmNvbmZpZwppbmRleCA3YzQzNWM4Li5mZjZmN2M0IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy9tcGM4MjcyX2Fkc19kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbXBjODI3Ml9hZHNfZGVmY29uZmlnCkBAIC0xNTEsMTEgKzE1MSwxMSBAQAogIwogQ09ORklHX1BQQ19NVUxUSVBMQVRGT1JNPXkKIENPTkZJR19DTEFTU0lDMzI9eQotQ09ORklHX1BQQ19DSFJQPXkKKyMgQ09ORklHX1BQQ19DSFJQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19QTUFDIGlzIG5vdCBzZXQKICMgQ09ORklHX01QQzUxMjFfQURTIGlzIG5vdCBzZXQKICMgQ09ORklHX01QQzUxMjFfR0VORVJJQyBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfTVBDNTJ4eCBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDX1BNQUM9eQogIyBDT05GSUdfUFBDX0NFTEwgaXMgbm90IHNldAogIyBDT05GSUdfUFBDX0NFTExfTkFUSVZFIGlzIG5vdCBzZXQKIENPTkZJR19QUENfODJ4eD15CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy9tcGM4M3h4X2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL21wYzgzeHhfZGVmY29uZmlnCmluZGV4IDkxNmUzZGYuLjk5MWM5YmQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzL21wYzgzeHhfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL21wYzgzeHhfZGVmY29uZmlnCkBAIC0xNjYsMTEgKzE2NiwxMSBAQAogIwogQ09ORklHX1BQQ19NVUxUSVBMQVRGT1JNPXkKIENPTkZJR19DTEFTU0lDMzI9eQotQ09ORklHX1BQQ19DSFJQPXkKKyMgQ09ORklHX1BQQ19DSFJQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19QTUFDIGlzIG5vdCBzZXQKICMgQ09ORklHX01QQzUxMjFfQURTIGlzIG5vdCBzZXQKICMgQ09ORklHX01QQzUxMjFfR0VORVJJQyBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfTVBDNTJ4eCBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDX1BNQUM9eQogIyBDT05GSUdfUFBDX0NFTEwgaXMgbm90IHNldAogIyBDT05GSUdfUFBDX0NFTExfTkFUSVZFIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ184Mnh4IGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzL21wYzg2MTBfaHBjZF9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9tcGM4NjEwX2hwY2RfZGVmY29uZmlnCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYTk5OTA3Li4wMDAwMDAwCi0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzL21wYzg2MTBfaHBjZF9kZWZjb25maWcKKysrIC9kZXYvbnVsbApAQCAtMSwxNDk3ICswLDAgQEAKLSMKLSMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yNy1yYzQKLSMgVGh1IEF1ZyAyMSAwMDo1MjoxMCAyMDA4Ci0jCi0jIENPTkZJR19QUEM2NCBpcyBub3Qgc2V0Ci0KLSMKLSMgUHJvY2Vzc29yIHN1cHBvcnQKLSMKLUNPTkZJR182eHg9eQotIyBDT05GSUdfUFBDXzg1eHggaXMgbm90IHNldAotIyBDT05GSUdfUFBDXzh4eCBpcyBub3Qgc2V0Ci0jIENPTkZJR180MHggaXMgbm90IHNldAotIyBDT05GSUdfNDR4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0UyMDAgaXMgbm90IHNldAotQ09ORklHX1BQQ19GUFU9eQotQ09ORklHX0FMVElWRUM9eQotQ09ORklHX1BQQ19TVERfTU1VPXkKLUNPTkZJR19QUENfU1REX01NVV8zMj15Ci0jIENPTkZJR19QUENfTU1fU0xJQ0VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NNUCBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDMzI9eQotQ09ORklHX1dPUkRfU0laRT0zMgotQ09ORklHX1BQQ19NRVJHRT15Ci1DT05GSUdfTU1VPXkKLUNPTkZJR19HRU5FUklDX0NNT1NfVVBEQVRFPXkKLUNPTkZJR19HRU5FUklDX1RJTUU9eQotQ09ORklHX0dFTkVSSUNfVElNRV9WU1lTQ0FMTD15Ci1DT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15Ci1DT05GSUdfR0VORVJJQ19IQVJESVJRUz15Ci0jIENPTkZJR19IQVZFX1NFVFVQX1BFUl9DUFVfQVJFQSBpcyBub3Qgc2V0Ci1DT05GSUdfSVJRX1BFUl9DUFU9eQotQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15Ci1DT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQotQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15Ci1DT05GSUdfUldTRU1fWENIR0FERF9BTEdPUklUSE09eQotQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMj15Ci1DT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKLUNPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15Ci1DT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUPXkKLSMgQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVMgaXMgbm90IHNldAotQ09ORklHX1BQQz15Ci1DT05GSUdfRUFSTFlfUFJJTlRLPXkKLUNPTkZJR19HRU5FUklDX05WUkFNPXkKLUNPTkZJR19TQ0hFRF9OT19OT19PTUlUX0ZSQU1FX1BPSU5URVI9eQotQ09ORklHX0FSQ0hfTUFZX0hBVkVfUENfRkRDPXkKLUNPTkZJR19QUENfT0Y9eQotQ09ORklHX09GPXkKLUNPTkZJR19QUENfVURCR18xNjU1MD15Ci0jIENPTkZJR19HRU5FUklDX1RCU1lOQyBpcyBub3Qgc2V0Ci1DT05GSUdfQVVESVRfQVJDSD15Ci1DT05GSUdfR0VORVJJQ19CVUc9eQotQ09ORklHX0RFRkFVTFRfVUlNQUdFPXkKLUNPTkZJR19ISUJFUk5BVEVfMzI9eQotQ09ORklHX0FSQ0hfSElCRVJOQVRJT05fUE9TU0lCTEU9eQotIyBDT05GSUdfUFBDX0RDUl9OQVRJVkUgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0RDUl9NTUlPIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCi0KLSMKLSMgR2VuZXJhbCBzZXR1cAotIwotQ09ORklHX0VYUEVSSU1FTlRBTD15Ci1DT05GSUdfQlJPS0VOX09OX1NNUD15Ci1DT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCi1DT05GSUdfTE9DQUxWRVJTSU9OPSIiCi1DT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQotIyBDT05GSUdfU1dBUCBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTVklQQz15Ci1DT05GSUdfU1lTVklQQ19TWVNDVEw9eQotIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAotIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKLUNPTkZJR19JS0NPTkZJRz15Ci1DT05GSUdfSUtDT05GSUdfUFJPQz15Ci1DT05GSUdfTE9HX0JVRl9TSElGVD0xNAotIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0Ci1DT05GSUdfR1JPVVBfU0NIRUQ9eQotIyBDT05GSUdfRkFJUl9HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVF9HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0Ci1DT05GSUdfVVNFUl9TQ0hFRD15Ci0jIENPTkZJR19DR1JPVVBfU0NIRUQgaXMgbm90IHNldAotQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQotQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjI9eQotIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAotIyBDT05GSUdfTkFNRVNQQUNFUyBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVl9JTklUUkQ9eQotQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKLSMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKLUNPTkZJR19TWVNDVEw9eQotQ09ORklHX0VNQkVEREVEPXkKLUNPTkZJR19TWVNDVExfU1lTQ0FMTD15Ci1DT05GSUdfS0FMTFNZTVM9eQotIyBDT05GSUdfS0FMTFNZTVNfQUxMIGlzIG5vdCBzZXQKLUNPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTPXkKLUNPTkZJR19IT1RQTFVHPXkKLUNPTkZJR19QUklOVEs9eQotQ09ORklHX0JVRz15Ci0jIENPTkZJR19FTEZfQ09SRSBpcyBub3Qgc2V0Ci1DT05GSUdfUENTUEtSX1BMQVRGT1JNPXkKLUNPTkZJR19DT01QQVRfQlJLPXkKLUNPTkZJR19CQVNFX0ZVTEw9eQotQ09ORklHX0ZVVEVYPXkKLUNPTkZJR19BTk9OX0lOT0RFUz15Ci1DT05GSUdfRVBPTEw9eQotQ09ORklHX1NJR05BTEZEPXkKLUNPTkZJR19USU1FUkZEPXkKLUNPTkZJR19FVkVOVEZEPXkKLUNPTkZJR19TSE1FTT15Ci1DT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQotQ09ORklHX1NMVUJfREVCVUc9eQotIyBDT05GSUdfU0xBQiBpcyBub3Qgc2V0Ci1DT05GSUdfU0xVQj15Ci0jIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX09QUk9GSUxFPXkKLSMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldAotQ09ORklHX0hBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1M9eQotQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UPXkKLUNPTkZJR19IQVZFX0tQUk9CRVM9eQotQ09ORklHX0hBVkVfS1JFVFBST0JFUz15Ci1DT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15Ci0jIENPTkZJR19IQVZFX0RNQV9BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0VfR0VORVJJQ19TTVBfSEVMUEVSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQVZFX0NMSyBpcyBub3Qgc2V0Ci1DT05GSUdfUFJPQ19QQUdFX01PTklUT1I9eQotIyBDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVCBpcyBub3Qgc2V0Ci1DT05GSUdfU0xBQklORk89eQotQ09ORklHX1JUX01VVEVYRVM9eQotIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0Ci1DT05GSUdfQkFTRV9TTUFMTD0wCi1DT05GSUdfTU9EVUxFUz15Ci0jIENPTkZJR19NT0RVTEVfRk9SQ0VfTE9BRCBpcyBub3Qgc2V0Ci1DT05GSUdfTU9EVUxFX1VOTE9BRD15Ci0jIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEIGlzIG5vdCBzZXQKLSMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKLSMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0Ci1DT05GSUdfS01PRD15Ci1DT05GSUdfQkxPQ0s9eQotIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfTFNGIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKLQotIwotIyBJTyBTY2hlZHVsZXJzCi0jCi1DT05GSUdfSU9TQ0hFRF9OT09QPXkKLSMgQ09ORklHX0lPU0NIRURfQVMgaXMgbm90IHNldAotQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQotIyBDT05GSUdfSU9TQ0hFRF9DRlEgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9BUyBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9ERUFETElORT15Ci0jIENPTkZJR19ERUZBVUxUX0NGUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iZGVhZGxpbmUiCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotCi0jCi0jIFBsYXRmb3JtIHN1cHBvcnQKLSMKLUNPTkZJR19QUENfTVVMVElQTEFURk9STT15Ci1DT05GSUdfQ0xBU1NJQzMyPXkKLUNPTkZJR19QUENfQ0hSUD15Ci0jIENPTkZJR19NUEM1MTIxX0FEUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NUEM1MTIxX0dFTkVSSUMgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX01QQzUyeHggaXMgbm90IHNldAotQ09ORklHX1BQQ19QTUFDPXkKLSMgQ09ORklHX1BQQ19DRUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19DRUxMX05BVElWRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfODJ4eCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUTJBRFMgaXMgbm90IHNldAotIyBDT05GSUdfUFBDXzgzeHggaXMgbm90IHNldAotQ09ORklHX1BQQ184Nnh4PXkKLSMgQ09ORklHX01QQzg2NDFfSFBDTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQkM4NjQxRCBpcyBub3Qgc2V0Ci1DT05GSUdfTVBDODYxMF9IUENEPXkKLUNPTkZJR19NUEM4NjEwPXkKLSMgQ09ORklHX0VNQkVEREVENnh4IGlzIG5vdCBzZXQKLUNPTkZJR19QUENfTkFUSVZFPXkKLSMgQ09ORklHX1VEQkdfUlRBU19DT05TT0xFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQSUMgaXMgbm90IHNldAotQ09ORklHX01QSUM9eQotIyBDT05GSUdfTVBJQ19XRUlSRCBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDX0k4MjU5PXkKLUNPTkZJR19QUENfUlRBUz15Ci0jIENPTkZJR19SVEFTX0VSUk9SX0xPR0dJTkcgaXMgbm90IHNldAotQ09ORklHX1JUQVNfUFJPQz15Ci0jIENPTkZJR19NTUlPX05WUkFNIGlzIG5vdCBzZXQKLUNPTkZJR19QUENfTVBDMTA2PXkKLSMgQ09ORklHX1BQQ185NzBfTkFQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19JTkRJUkVDVF9JTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HRU5FUklDX0lPTUFQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9GUkVRIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQzYwMV9TWU5DX0ZJWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQVUgaXMgbm90IHNldAotQ09ORklHX0ZTTF9VTEkxNTc1PXkKLQotIwotIyBLZXJuZWwgb3B0aW9ucwotIwotQ09ORklHX0hJR0hNRU09eQotQ09ORklHX1RJQ0tfT05FU0hPVD15Ci1DT05GSUdfTk9fSFo9eQotQ09ORklHX0hJR0hfUkVTX1RJTUVSUz15Ci1DT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UU19CVUlMRD15Ci0jIENPTkZJR19IWl8xMDAgaXMgbm90IHNldAotIyBDT05GSUdfSFpfMjUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0haXzMwMCBpcyBub3Qgc2V0Ci1DT05GSUdfSFpfMTAwMD15Ci1DT05GSUdfSFo9MTAwMAotQ09ORklHX1NDSEVEX0hSVElDSz15Ci1DT05GSUdfUFJFRU1QVF9OT05FPXkKLSMgQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldAotQ09ORklHX0JJTkZNVF9FTEY9eQotIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAotIyBDT05GSUdfSU9NTVVfSEVMUEVSIGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVRz15Ci1DT05GSUdfQVJDSF9IQVNfV0FMS19NRU1PUlk9eQotQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RSRU1PVkU9eQotIyBDT05GSUdfS0VYRUMgaXMgbm90IHNldAotQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQotQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKLUNPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKLUNPTkZJR19GTEFUTUVNX01BTlVBTD15Ci0jIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQQVJTRU1FTV9NQU5VQUwgaXMgbm90IHNldAotQ09ORklHX0ZMQVRNRU09eQotQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKLSMgQ09ORklHX1NQQVJTRU1FTV9TVEFUSUMgaXMgbm90IHNldAotIyBDT05GSUdfU1BBUlNFTUVNX1ZNRU1NQVBfRU5BQkxFIGlzIG5vdCBzZXQKLUNPTkZJR19QQUdFRkxBR1NfRVhURU5ERUQ9eQotQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKLUNPTkZJR19NSUdSQVRJT049eQotIyBDT05GSUdfUkVTT1VSQ0VTXzY0QklUIGlzIG5vdCBzZXQKLUNPTkZJR19aT05FX0RNQV9GTEFHPTEKLUNPTkZJR19CT1VOQ0U9eQotQ09ORklHX1ZJUlRfVE9fQlVTPXkKLUNPTkZJR19GT1JDRV9NQVhfWk9ORU9SREVSPTEyCi1DT05GSUdfUFJPQ19ERVZJQ0VUUkVFPXkKLSMgQ09ORklHX0NNRExJTkVfQk9PTCBpcyBub3Qgc2V0Ci1DT05GSUdfRVhUUkFfVEFSR0VUUz0iIgotIyBDT05GSUdfUE0gaXMgbm90IHNldAotIyBDT05GSUdfU0VDQ09NUCBpcyBub3Qgc2V0Ci1DT05GSUdfSVNBX0RNQV9BUEk9eQotCi0jCi0jIEJ1cyBvcHRpb25zCi0jCi0jIENPTkZJR19JU0EgaXMgbm90IHNldAotQ09ORklHX1pPTkVfRE1BPXkKLUNPTkZJR19HRU5FUklDX0lTQV9ETUE9eQotQ09ORklHX1BQQ19JTkRJUkVDVF9QQ0k9eQotQ09ORklHX0ZTTF9TT0M9eQotQ09ORklHX0ZTTF9QQ0k9eQotQ09ORklHX1BQQ19QQ0lfQ0hPSUNFPXkKLUNPTkZJR19QQ0k9eQotQ09ORklHX1BDSV9ET01BSU5TPXkKLUNPTkZJR19QQ0lfU1lTQ0FMTD15Ci1DT05GSUdfUENJRVBPUlRCVVM9eQotQ09ORklHX1BDSUVBRVI9eQotIyBDT05GSUdfUENJRUFTUE0gaXMgbm90IHNldAotQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJPXkKLSMgQ09ORklHX1BDSV9NU0kgaXMgbm90IHNldAotQ09ORklHX1BDSV9MRUdBQ1k9eQotQ09ORklHX1BDSV9ERUJVRz15Ci0jIENPTkZJR19QQ0NBUkQgaXMgbm90IHNldAotIyBDT05GSUdfSE9UUExVR19QQ0kgaXMgbm90IHNldAotIyBDT05GSUdfSEFTX1JBUElESU8gaXMgbm90IHNldAotCi0jCi0jIEFkdmFuY2VkIHNldHVwCi0jCi0jIENPTkZJR19BRFZBTkNFRF9PUFRJT05TIGlzIG5vdCBzZXQKLQotIwotIyBEZWZhdWx0IHNldHRpbmdzIGZvciBhZHZhbmNlZCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIHVzZWQKLSMKLUNPTkZJR19MT1dNRU1fU0laRT0weDMwMDAwMDAwCi1DT05GSUdfUEFHRV9PRkZTRVQ9MHhjMDAwMDAwMAotQ09ORklHX0tFUk5FTF9TVEFSVD0weGMwMDAwMDAwCi1DT05GSUdfUEhZU0lDQUxfU1RBUlQ9MHgwMDAwMDAwMAotQ09ORklHX1RBU0tfU0laRT0weGMwMDAwMDAwCi1DT05GSUdfTkVUPXkKLQotIwotIyBOZXR3b3JraW5nIG9wdGlvbnMKLSMKLUNPTkZJR19QQUNLRVQ9eQotIyBDT05GSUdfUEFDS0VUX01NQVAgaXMgbm90IHNldAotQ09ORklHX1VOSVg9eQotQ09ORklHX1hGUk09eQotQ09ORklHX1hGUk1fVVNFUj15Ci0jIENPTkZJR19YRlJNX1NVQl9QT0xJQ1kgaXMgbm90IHNldAotIyBDT05GSUdfWEZSTV9NSUdSQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hGUk1fU1RBVElTVElDUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfS0VZIGlzIG5vdCBzZXQKLUNPTkZJR19JTkVUPXkKLSMgQ09ORklHX0lQX01VTFRJQ0FTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAotQ09ORklHX0lQX0ZJQl9IQVNIPXkKLUNPTkZJR19JUF9QTlA9eQotQ09ORklHX0lQX1BOUF9ESENQPXkKLUNPTkZJR19JUF9QTlBfQk9PVFA9eQotQ09ORklHX0lQX1BOUF9SQVJQPXkKLSMgQ09ORklHX05FVF9JUElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9JUEdSRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZTl9DT09LSUVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5FVF9UVU5ORUw9eQotQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVD15Ci1DT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMPXkKLUNPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUPXkKLSMgQ09ORklHX0lORVRfTFJPIGlzIG5vdCBzZXQKLUNPTkZJR19JTkVUX0RJQUc9eQotQ09ORklHX0lORVRfVENQX0RJQUc9eQotIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAotQ09ORklHX1RDUF9DT05HX0NVQklDPXkKLUNPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKLSMgQ09ORklHX1RDUF9NRDVTSUcgaXMgbm90IHNldAotQ09ORklHX0lQVjY9eQotIyBDT05GSUdfSVBWNl9QUklWQUNZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQVjZfUk9VVEVSX1BSRUYgaXMgbm90IHNldAotIyBDT05GSUdfSVBWNl9PUFRJTUlTVElDX0RBRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUNl9BSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUNl9FU1AgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVDZfSVBDT01QIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQVjZfTUlQNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUNl9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUNl9UVU5ORUwgaXMgbm90IHNldAotQ09ORklHX0lORVQ2X1hGUk1fTU9ERV9UUkFOU1BPUlQ9eQotQ09ORklHX0lORVQ2X1hGUk1fTU9ERV9UVU5ORUw9eQotQ09ORklHX0lORVQ2X1hGUk1fTU9ERV9CRUVUPXkKLSMgQ09ORklHX0lORVQ2X1hGUk1fTU9ERV9ST1VURU9QVElNSVpBVElPTiBpcyBub3Qgc2V0Ci1DT05GSUdfSVBWNl9TSVQ9eQotQ09ORklHX0lQVjZfTkRJU0NfTk9ERVRZUEU9eQotIyBDT05GSUdfSVBWNl9UVU5ORUwgaXMgbm90IHNldAotIyBDT05GSUdfSVBWNl9NVUxUSVBMRV9UQUJMRVMgaXMgbm90IHNldAotIyBDT05GSUdfSVBWNl9NUk9VVEUgaXMgbm90IHNldAotIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAotIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVE0gaXMgbm90IHNldAotIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAotIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xMQzIgaXMgbm90IHNldAotIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1gyNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0Ci0KLSMKLSMgTmV0d29yayB0ZXN0aW5nCi0jCi0jIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcwotIwotIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQzgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lFRUU4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRktJTEwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKLQotIwotIyBEZXZpY2UgRHJpdmVycwotIwotCi0jCi0jIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKLSMKLUNPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCi1DT05GSUdfU1RBTkRBTE9ORT15Ci1DT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15Ci1DT05GSUdfRldfTE9BREVSPXkKLUNPTkZJR19GSVJNV0FSRV9JTl9LRVJORUw9eQotQ09ORklHX0VYVFJBX0ZJUk1XQVJFPSIiCi0jIENPTkZJR19ERUJVR19EUklWRVIgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfREVWUkVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0Ci1DT05GSUdfTVREPXkKLSMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ09OQ0FUIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfUEFSVElUSU9OUz15Ci0jIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX0NNRExJTkVfUEFSVFM9eQotIyBDT05GSUdfTVREX09GX1BBUlRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9BUjdfUEFSVFMgaXMgbm90IHNldAotCi0jCi0jIFVzZXIgTW9kdWxlcyBBbmQgVHJhbnNsYXRpb24gTGF5ZXJzCi0jCi1DT05GSUdfTVREX0NIQVI9eQotQ09ORklHX01URF9CTEtERVZTPXkKLUNPTkZJR19NVERfQkxPQ0s9eQotIyBDT05GSUdfRlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05GVEwgaXMgbm90IHNldAotIyBDT05GSUdfSU5GVEwgaXMgbm90IHNldAotIyBDT05GSUdfUkZEX0ZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TU0ZEQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfT09QUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUkFNL1JPTS9GbGFzaCBjaGlwIGRyaXZlcnMKLSMKLUNPTkZJR19NVERfQ0ZJPXkKLSMgQ09ORklHX01URF9KRURFQ1BST0JFIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfR0VOX1BST0JFPXkKLSMgQ09ORklHX01URF9DRklfQURWX09QVElPTlMgaXMgbm90IHNldAotQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xPXkKLUNPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMj15Ci1DT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzQ9eQotIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzggaXMgbm90IHNldAotIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE2IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8zMiBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX0NGSV9JMT15Ci1DT05GSUdfTVREX0NGSV9JMj15Ci0jIENPTkZJR19NVERfQ0ZJX0k0IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9DRklfSTggaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NGSV9JTlRFTEVYVCBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX0NGSV9BTURTVEQ9eQotIyBDT05GSUdfTVREX0NGSV9TVEFBIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfQ0ZJX1VUSUw9eQotIyBDT05GSUdfTVREX1JBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUk9NIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9BQlNFTlQgaXMgbm90IHNldAotCi0jCi0jIE1hcHBpbmcgZHJpdmVycyBmb3IgY2hpcCBhY2Nlc3MKLSMKLSMgQ09ORklHX01URF9DT01QTEVYX01BUFBJTkdTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9QSFlTTUFQIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfUEhZU01BUF9PRj15Ci0jIENPTkZJR19NVERfSU5URUxfVlJfTk9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9QTEFUUkFNIGlzIG5vdCBzZXQKLQotIwotIyBTZWxmLWNvbnRhaW5lZCBNVEQgZGV2aWNlIGRyaXZlcnMKLSMKLSMgQ09ORklHX01URF9QTUM1NTEgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1NMUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9QSFJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTVREUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9CTE9DSzJNVEQgaXMgbm90IHNldAotCi0jCi0jIERpc2stT24tQ2hpcCBEZXZpY2UgRHJpdmVycwotIwotIyBDT05GSUdfTVREX0RPQzIwMDAgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0RPQzIwMDEgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0RPQzIwMDFQTFVTIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfTkFORD15Ci0jIENPTkZJR19NVERfTkFORF9WRVJJRllfV1JJVEUgaXMgbm90IHNldAotIyBDT05GSUdfTVREX05BTkRfRUNDX1NNQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTkFORF9NVVNFVU1fSURTIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfTkFORF9JRFM9eQotIyBDT05GSUdfTVREX05BTkRfRElTS09OQ0hJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTkFORF9DQUZFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9OQU5EX05BTkRTSU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX05BTkRfUExBVEZPUk0gaXMgbm90IHNldAotQ09ORklHX01URF9OQU5EX0ZTTF9FTEJDPXkKLSMgQ09ORklHX01URF9PTkVOQU5EIGlzIG5vdCBzZXQKLQotIwotIyBVQkkgLSBVbnNvcnRlZCBibG9jayBpbWFnZXMKLSMKLSMgQ09ORklHX01URF9VQkkgaXMgbm90IHNldAotQ09ORklHX09GX0RFVklDRT15Ci1DT05GSUdfT0ZfSTJDPXkKLSMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVY9eQotIyBDT05GSUdfQkxLX0RFVl9GRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNfRkxPUFBZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19DUFFfREEgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0NQUV9DSVNTX0RBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfREFDOTYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfVU1FTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfTE9PUD15Ci0jIENPTkZJR19CTEtfREVWX0NSWVBUT0xPT1AgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9TWDggaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfUkFNPXkKLUNPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgotQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9MTMxMDcyCi0jIENPTkZJR19CTEtfREVWX1hJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0hEIGlzIG5vdCBzZXQKLUNPTkZJR19NSVNDX0RFVklDRVM9eQotIyBDT05GSUdfUEhBTlRPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAotIyBDT05GSUdfU0dJX0lPQzQgaXMgbm90IHNldAotIyBDT05GSUdfVElGTV9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VOQ0xPU1VSRV9TRVJWSUNFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IUF9JTE8gaXMgbm90IHNldAotQ09ORklHX0hBVkVfSURFPXkKLUNPTkZJR19JREU9eQotIyBDT05GSUdfQkxLX0RFVl9JREUgaXMgbm90IHNldAotCi0jCi0jIFNDU0kgZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAotQ09ORklHX1NDU0k9eQotQ09ORklHX1NDU0lfRE1BPXkKLUNPTkZJR19TQ1NJX1RHVD15Ci0jIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAotQ09ORklHX1NDU0lfUFJPQ19GUz15Ci0KLSMKLSMgU0NTSSBzdXBwb3J0IHR5cGUgKGRpc2ssIHRhcGUsIENELVJPTSkKLSMKLUNPTkZJR19CTEtfREVWX1NEPXkKLSMgQ09ORklHX0NIUl9ERVZfU1QgaXMgbm90IHNldAotIyBDT05GSUdfQ0hSX0RFVl9PU1NUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfU1IgaXMgbm90IHNldAotQ09ORklHX0NIUl9ERVZfU0c9eQotIyBDT05GSUdfQ0hSX0RFVl9TQ0ggaXMgbm90IHNldAotCi0jCi0jIFNvbWUgU0NTSSBkZXZpY2VzIChlLmcuIENEIGp1a2Vib3gpIHN1cHBvcnQgbXVsdGlwbGUgTFVOcwotIwotIyBDT05GSUdfU0NTSV9NVUxUSV9MVU4gaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9DT05TVEFOVFMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9MT0dHSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU0NBTl9BU1lOQyBpcyBub3Qgc2V0Ci1DT05GSUdfU0NTSV9XQUlUX1NDQU49bQotCi0jCi0jIFNDU0kgVHJhbnNwb3J0cwotIwotIyBDT05GSUdfU0NTSV9TUElfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9GQ19BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0lTQ1NJX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU0FTX0xJQlNBUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NSUF9BVFRSUyBpcyBub3Qgc2V0Ci1DT05GSUdfU0NTSV9MT1dMRVZFTD15Ci0jIENPTkZJR19JU0NTSV9UQ1AgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl8zV19YWFhYX1JBSUQgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV8zV185WFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQUNBUkQgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9BQUNSQUlEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQUlDN1hYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0FJQzdYWFhfT0xEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQUlDNzlYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0FJQzk0WFggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9EUFRfSTJPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQURWQU5TWVMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9BUkNNU1IgaXMgbm90IHNldAotIyBDT05GSUdfTUVHQVJBSURfTkVXR0VOIGlzIG5vdCBzZXQKLSMgQ09ORklHX01FR0FSQUlEX0xFR0FDWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRUdBUkFJRF9TQVMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9IUFRJT1AgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9CVVNMT0dJQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RNWDMxOTFEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfRUFUQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0ZVVFVSRV9ET01BSU4gaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9HRFRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfSVBTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfSU5JVElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfSU5JQTEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX01WU0FTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU1RFWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NZTTUzQzhYWF8yIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfSVBSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfUUxPR0lDXzEyODAgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9RTEFfRkMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9RTEFfSVNDU0kgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9MUEZDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfREMzOTV4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfREMzOTBUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTlNQMzIgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX01FU0ggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9NQUM1M0M5NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NSUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RIIGlzIG5vdCBzZXQKLUNPTkZJR19BVEE9eQotIyBDT05GSUdfQVRBX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKLUNPTkZJR19TQVRBX1BNUD15Ci1DT05GSUdfU0FUQV9BSENJPXkKLSMgQ09ORklHX1NBVEFfU0lMMjQgaXMgbm90IHNldAotIyBDT05GSUdfU0FUQV9GU0wgaXMgbm90IHNldAotQ09ORklHX0FUQV9TRkY9eQotIyBDT05GSUdfU0FUQV9TVlcgaXMgbm90IHNldAotIyBDT05GSUdfQVRBX1BJSVggaXMgbm90IHNldAotIyBDT05GSUdfU0FUQV9NViBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQVRBX05WIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BEQ19BRE1BIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBVEFfUVNUT1IgaXMgbm90IHNldAotIyBDT05GSUdfU0FUQV9QUk9NSVNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBVEFfU1g0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBVEFfU0lMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBVEFfU0lTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBVEFfVUxJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBVEFfVklBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBVEFfVklURVNTRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQVRBX0lOSUMxNjJYIGlzIG5vdCBzZXQKLUNPTkZJR19QQVRBX0FMST15Ci0jIENPTkZJR19QQVRBX0FNRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0FSVE9QIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfQVRJSVhQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfQ01ENjQwX1BDSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0NNRDY0WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0NTNTUyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0NTNTUzMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0NZUFJFU1MgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9FRkFSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQV9HRU5FUklDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfSFBUMzY2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfSFBUMzdYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfSFBUM1gyTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0hQVDNYMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0lUODIxWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0lUODIxMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0pNSUNST04gaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9UUklGTEVYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfTUFSVkVMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX01QSUlYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfT0xEUElJWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX05FVENFTEwgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9OSU5KQTMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfTlM4NzQxMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX05TODc0MTUgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9PUFRJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfT1BUSURNQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX1BEQ19PTEQgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9SQURJU1lTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfUloxMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfU0MxMjAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfU0VSVkVSV09SS1MgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9QREMyMDI3WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX1NJTDY4MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX1NJUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX1ZJQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX1dJTkJPTkQgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9QTEFURk9STSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX1NDSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GVVNJT04gaXMgbm90IHNldAotCi0jCi0jIElFRUUgMTM5NCAoRmlyZVdpcmUpIHN1cHBvcnQKLSMKLQotIwotIyBFbmFibGUgb25seSBvbmUgb2YgdGhlIHR3byBzdGFja3MsIHVubGVzcyB5b3Uga25vdyB3aGF0IHlvdSBhcmUgZG9pbmcKLSMKLSMgQ09ORklHX0ZJUkVXSVJFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lFRUUxMzk0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNJTlRPU0hfRFJJVkVSUyBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUREVWSUNFUz15Ci1DT05GSUdfRFVNTVk9eQotIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNWTEFOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UVU4gaXMgbm90IHNldAotIyBDT05GSUdfVkVUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNORVQgaXMgbm90IHNldAotIyBDT05GSUdfUEhZTElCIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRfRVRIRVJORVQ9eQotIyBDT05GSUdfTUlJIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0UgaXMgbm90IHNldAotIyBDT05GSUdfQk1BQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQVBQWU1FQUwgaXMgbm90IHNldAotIyBDT05GSUdfU1VOR0VNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NBU1NJTkkgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1ZFTkRPUl8zQ09NIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRfVFVMSVA9eQotIyBDT05GSUdfREUyMTA0WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UVUxJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERTRYNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XSU5CT05EXzg0MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETTkxMDIgaXMgbm90IHNldAotQ09ORklHX1VMSTUyNlg9eQotIyBDT05GSUdfSFAxMDAgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX1pNSUkgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX1JHTUlJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19UQUggaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX0VNQUM0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9QQ0kgaXMgbm90IHNldAotIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVERFVl8xMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UUiBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCi0jIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfSVdMV0lGSV9MRURTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GRERJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJUFBJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9GQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BIT05FIGlzIG5vdCBzZXQKLQotIwotIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAotIwotQ09ORklHX0lOUFVUPXkKLSMgQ09ORklHX0lOUFVUX0ZGX01FTUxFU1MgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfUE9MTERFViBpcyBub3Qgc2V0Ci0KLSMKLSMgVXNlcmxhbmQgaW50ZXJmYWNlcwotIwotIyBDT05GSUdfSU5QVVRfTU9VU0VERVYgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfSk9ZREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0VWREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKLQotIwotIyBJbnB1dCBEZXZpY2UgRHJpdmVycwotIwotIyBDT05GSUdfSU5QVVRfS0VZQk9BUkQgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfTU9VU0UgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfVEFCTEVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX01JU0MgaXMgbm90IHNldAotCi0jCi0jIEhhcmR3YXJlIEkvTyBwb3J0cwotIwotQ09ORklHX1NFUklPPXkKLUNPTkZJR19TRVJJT19JODA0Mj15Ci1DT05GSUdfU0VSSU9fU0VSUE9SVD15Ci0jIENPTkZJR19TRVJJT19QQ0lQUzIgaXMgbm90IHNldAotQ09ORklHX1NFUklPX0xJQlBTMj15Ci0jIENPTkZJR19TRVJJT19SQVcgaXMgbm90IHNldAotIyBDT05GSUdfU0VSSU9fWElMSU5YX1hQU19QUzIgaXMgbm90IHNldAotIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAotCi0jCi0jIENoYXJhY3RlciBkZXZpY2VzCi0jCi1DT05GSUdfVlQ9eQotQ09ORklHX0NPTlNPTEVfVFJBTlNMQVRJT05TPXkKLUNPTkZJR19WVF9DT05TT0xFPXkKLUNPTkZJR19IV19DT05TT0xFPXkKLSMgQ09ORklHX1ZUX0hXX0NPTlNPTEVfQklORElORyBpcyBub3Qgc2V0Ci1DT05GSUdfREVWS01FTT15Ci0jIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAotIyBDT05GSUdfTk9aT01JIGlzIG5vdCBzZXQKLQotIwotIyBTZXJpYWwgZHJpdmVycwotIwotQ09ORklHX1NFUklBTF84MjUwPXkKLUNPTkZJR19TRVJJQUxfODI1MF9DT05TT0xFPXkKLUNPTkZJR19TRVJJQUxfODI1MF9QQ0k9eQotQ09ORklHX1NFUklBTF84MjUwX05SX1VBUlRTPTIKLUNPTkZJR19TRVJJQUxfODI1MF9SVU5USU1FX1VBUlRTPTIKLUNPTkZJR19TRVJJQUxfODI1MF9FWFRFTkRFRD15Ci1DT05GSUdfU0VSSUFMXzgyNTBfTUFOWV9QT1JUUz15Ci1DT05GSUdfU0VSSUFMXzgyNTBfU0hBUkVfSVJRPXkKLUNPTkZJR19TRVJJQUxfODI1MF9ERVRFQ1RfSVJRPXkKLUNPTkZJR19TRVJJQUxfODI1MF9SU0E9eQotCi0jCi0jIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKLSMKLSMgQ09ORklHX1NFUklBTF9VQVJUTElURSBpcyBub3Qgc2V0Ci1DT05GSUdfU0VSSUFMX0NPUkU9eQotQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQotIyBDT05GSUdfU0VSSUFMX1BNQUNaSUxPRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRVJJQUxfSlNNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFUklBTF9PRl9QTEFURk9STSBpcyBub3Qgc2V0Ci1DT05GSUdfVU5JWDk4X1BUWVM9eQotIyBDT05GSUdfTEVHQUNZX1BUWVMgaXMgbm90IHNldAotIyBDT05GSUdfQlJJUV9QQU5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IVkNfUlRBUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAotIyBDT05GSUdfSFdfUkFORE9NIGlzIG5vdCBzZXQKLSMgQ09ORklHX05WUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0FQUExJQ09NIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAotIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0Ci1DT05GSUdfREVWUE9SVD15Ci1DT05GSUdfSTJDPXkKLUNPTkZJR19JMkNfQk9BUkRJTkZPPXkKLSMgQ09ORklHX0kyQ19DSEFSREVWIGlzIG5vdCBzZXQKLUNPTkZJR19JMkNfSEVMUEVSX0FVVE89eQotCi0jCi0jIEkyQyBIYXJkd2FyZSBCdXMgc3VwcG9ydAotIwotCi0jCi0jIFBDIFNNQnVzIGhvc3QgY29udHJvbGxlciBkcml2ZXJzCi0jCi0jIENPTkZJR19JMkNfQUxJMTUzNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfQUxJMTU2MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfQUxJMTVYMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfQU1ENzU2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19BTUQ4MTExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19JODAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19JU0NIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19QSUlYNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfTkZPUkNFMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU0lTNTU5NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU0lTNjMwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TSVM5NlggaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1ZJQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfVklBUFJPIGlzIG5vdCBzZXQKLQotIwotIyBNYWMgU01CdXMgaG9zdCBjb250cm9sbGVyIGRyaXZlcnMKLSMKLSMgQ09ORklHX0kyQ19IWURSQSBpcyBub3Qgc2V0Ci1DT05GSUdfSTJDX1BPV0VSTUFDPXkKLQotIwotIyBJMkMgc3lzdGVtIGJ1cyBkcml2ZXJzIChtb3N0bHkgZW1iZWRkZWQgLyBzeXN0ZW0tb24tY2hpcCkKLSMKLUNPTkZJR19JMkNfTVBDPXkKLSMgQ09ORklHX0kyQ19PQ09SRVMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NJTVRFQyBpcyBub3Qgc2V0Ci0KLSMKLSMgRXh0ZXJuYWwgSTJDL1NNQnVzIGFkYXB0ZXIgZHJpdmVycwotIwotIyBDT05GSUdfSTJDX1BBUlBPUlRfTElHSFQgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1RBT1NfRVZNIGlzIG5vdCBzZXQKLQotIwotIyBHcmFwaGljcyBhZGFwdGVyIEkyQy9EREMgY2hhbm5lbCBkcml2ZXJzCi0jCi0jIENPTkZJR19JMkNfVk9PRE9PMyBpcyBub3Qgc2V0Ci0KLSMKLSMgT3RoZXIgSTJDL1NNQnVzIGJ1cyBkcml2ZXJzCi0jCi0jIENPTkZJR19JMkNfUENBX1BMQVRGT1JNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TVFVCIGlzIG5vdCBzZXQKLQotIwotIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKLSMKLSMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVDI0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRUVQUk9NIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0Y4NTc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1OTEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19NQVg2ODc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQlVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19DSElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQSSBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9XQU5UX09QVElPTkFMX0dQSU9MSUI9eQotIyBDT05GSUdfR1BJT0xJQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19XMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAotIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKLQotIwotIyBTb25pY3MgU2lsaWNvbiBCYWNrcGxhbmUKLSMKLUNPTkZJR19TU0JfUE9TU0lCTEU9eQotIyBDT05GSUdfU1NCIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aWZ1bmN0aW9uIGRldmljZSBkcml2ZXJzCi0jCi0jIENPTkZJR19NRkRfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAotIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGltZWRpYSBkZXZpY2VzCi0jCi0KLSMKLSMgTXVsdGltZWRpYSBjb3JlIHN1cHBvcnQKLSMKLSMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVkJfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSURFT19NRURJQSBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGltZWRpYSBkcml2ZXJzCi0jCi1DT05GSUdfREFCPXkKLQotIwotIyBHcmFwaGljcyBzdXBwb3J0Ci0jCi0jIENPTkZJR19BR1AgaXMgbm90IHNldAotIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKLUNPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTD15Ci1DT05GSUdfRkI9eQotIyBDT05GSUdfRklSTVdBUkVfRURJRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9EREMgaXMgbm90IHNldAotQ09ORklHX0ZCX0NGQl9GSUxMUkVDVD15Ci1DT05GSUdfRkJfQ0ZCX0NPUFlBUkVBPXkKLUNPTkZJR19GQl9DRkJfSU1BR0VCTElUPXkKLSMgQ09ORklHX0ZCX0NGQl9SRVZfUElYRUxTX0lOX0JZVEUgaXMgbm90IHNldAotIyBDT05GSUdfRkJfU1lTX0ZJTExSRUNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1NZU19DT1BZQVJFQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9TWVNfSU1BR0VCTElUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0ZPUkVJR05fRU5ESUFOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1NZU19GT1BTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1NWR0FMSUIgaXMgbm90IHNldAotIyBDT05GSUdfRkJfTUFDTU9ERVMgaXMgbm90IHNldAotIyBDT05GSUdfRkJfQkFDS0xJR0hUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX01PREVfSEVMUEVSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9USUxFQkxJVFRJTkcgaXMgbm90IHNldAotCi0jCi0jIEZyYW1lIGJ1ZmZlciBoYXJkd2FyZSBkcml2ZXJzCi0jCi0jIENPTkZJR19GQl9DSVJSVVMgaXMgbm90IHNldAotIyBDT05GSUdfRkJfUE0yIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0NZQkVSMjAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9PRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9DT05UUk9MIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1BMQVRJTlVNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1ZBTEtZUklFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0NUNjU1NTAgaXMgbm90IHNldAotIyBDT05GSUdfRkJfQVNJTElBTlQgaXMgbm90IHNldAotIyBDT05GSUdfRkJfSU1TVFQgaXMgbm90IHNldAotIyBDT05GSUdfRkJfVkdBMTYgaXMgbm90IHNldAotIyBDT05GSUdfRkJfUzFEMTNYWFggaXMgbm90IHNldAotIyBDT05GSUdfRkJfTlZJRElBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1JJVkEgaXMgbm90IHNldAotIyBDT05GSUdfRkJfTUFUUk9YIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1JBREVPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9BVFkxMjggaXMgbm90IHNldAotIyBDT05GSUdfRkJfQVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1MzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1NBVkFHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9TSVMgaXMgbm90IHNldAotIyBDT05GSUdfRkJfTkVPTUFHSUMgaXMgbm90IHNldAotIyBDT05GSUdfRkJfS1lSTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl8zREZYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1ZPT0RPTzEgaXMgbm90IHNldAotIyBDT05GSUdfRkJfVlQ4NjIzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1RSSURFTlQgaXMgbm90IHNldAotIyBDT05GSUdfRkJfQVJLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1BNMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9DQVJNSU5FIGlzIG5vdCBzZXQKLUNPTkZJR19GQl9GU0xfRElVPXkKLSMgQ09ORklHX0ZCX0lCTV9HWFQ0NTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1ZJUlRVQUwgaXMgbm90IHNldAotIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBEaXNwbGF5IGRldmljZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19ESVNQTEFZX1NVUFBPUlQgaXMgbm90IHNldAotCi0jCi0jIENvbnNvbGUgZGlzcGxheSBkcml2ZXIgc3VwcG9ydAotIwotQ09ORklHX1ZHQV9DT05TT0xFPXkKLSMgQ09ORklHX1ZHQUNPTl9TT0ZUX1NDUk9MTEJBQ0sgaXMgbm90IHNldAotQ09ORklHX0RVTU1ZX0NPTlNPTEU9eQotIyBDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MT0dPIGlzIG5vdCBzZXQKLUNPTkZJR19TT1VORD15Ci1DT05GSUdfU05EPXkKLUNPTkZJR19TTkRfVElNRVI9eQotQ09ORklHX1NORF9QQ009eQotIyBDT05GSUdfU05EX1NFUVVFTkNFUiBpcyBub3Qgc2V0Ci1DT05GSUdfU05EX09TU0VNVUw9eQotQ09ORklHX1NORF9NSVhFUl9PU1M9eQotQ09ORklHX1NORF9QQ01fT1NTPXkKLUNPTkZJR19TTkRfUENNX09TU19QTFVHSU5TPXkKLSMgQ09ORklHX1NORF9EWU5BTUlDX01JTk9SUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfU1VQUE9SVF9PTERfQVBJIGlzIG5vdCBzZXQKLUNPTkZJR19TTkRfVkVSQk9TRV9QUk9DRlM9eQotIyBDT05GSUdfU05EX1ZFUkJPU0VfUFJJTlRLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfU05EX0RSSVZFUlM9eQotIyBDT05GSUdfU05EX0RVTU1ZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9NVFBBViBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfU0VSSUFMX1UxNjU1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfTVBVNDAxIGlzIG5vdCBzZXQKLUNPTkZJR19TTkRfUENJPXkKLSMgQ09ORklHX1NORF9BRDE4ODkgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0FMUzMwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfQUxTNDAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfQUxJNTQ1MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfQVRJSVhQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9BVElJWFBfTU9ERU0gaXMgbm90IHNldAotIyBDT05GSUdfU05EX0FVODgxMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfQVU4ODIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9BVTg4MzAgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0FXMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfQVpUMzMyOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfQlQ4N1ggaXMgbm90IHNldAotIyBDT05GSUdfU05EX0NBMDEwNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfQ01JUENJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9PWFlHRU4gaXMgbm90IHNldAotIyBDT05GSUdfU05EX0NTNDI4MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfQ1M0NlhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9DUzU1MzAgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0RBUkxBMjAgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0dJTkEyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfTEFZTEEyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfREFSTEEyNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfR0lOQTI0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9MQVlMQTI0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9NT05BIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9NSUEgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0VDSE8zRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfSU5ESUdPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9JTkRJR09JTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfSU5ESUdPREogaXMgbm90IHNldAotIyBDT05GSUdfU05EX0VNVTEwSzEgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0VNVTEwSzFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9FTlMxMzcwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9FTlMxMzcxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9FUzE5MzggaXMgbm90IHNldAotIyBDT05GSUdfU05EX0VTMTk2OCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfRk04MDEgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0hEQV9JTlRFTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfSERTUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfSERTUE0gaXMgbm90IHNldAotIyBDT05GSUdfU05EX0hJRklFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfSUNFMTcxMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfSUNFMTcyNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfSU5URUw4WDAgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0lOVEVMOFgwTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfS09SRzEyMTIgaXMgbm90IHNldAotIyBDT05GSUdfU05EX01BRVNUUk8zIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9NSVhBUlQgaXMgbm90IHNldAotIyBDT05GSUdfU05EX05NMjU2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9QQ1hIUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfUklQVElERSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfUk1FMzIgaXMgbm90IHNldAotIyBDT05GSUdfU05EX1JNRTk2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9STUU5NjUyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9TT05JQ1ZJQkVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9UUklERU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9WSUE4MlhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9WSUE4MlhYX01PREVNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9WSVJUVU9TTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfVlgyMjIgaXMgbm90IHNldAotIyBDT05GSUdfU05EX1lNRlBDSSBpcyBub3Qgc2V0Ci1DT05GSUdfU05EX1BQQz15Ci0jIENPTkZJR19TTkRfUE9XRVJNQUMgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0FPQSBpcyBub3Qgc2V0Ci1DT05GSUdfU05EX1NPQz15Ci1DT05GSUdfU05EX1NPQ19NUEM4NjEwPXkKLUNPTkZJR19TTkRfU09DX01QQzg2MTBfSFBDRD15Ci1DT05GSUdfU05EX1NPQ19DUzQyNzA9eQotQ09ORklHX1NORF9TT0NfQ1M0MjcwX1ZEMzNfRVJSQVRBPXkKLSMgQ09ORklHX1NPVU5EX1BSSU1FIGlzIG5vdCBzZXQKLUNPTkZJR19ISURfU1VQUE9SVD15Ci1DT05GSUdfSElEPXkKLSMgQ09ORklHX0hJRF9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURSQVcgaXMgbm90IHNldAotQ09ORklHX1VTQl9TVVBQT1JUPXkKLUNPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKLUNPTkZJR19VU0JfQVJDSF9IQVNfT0hDST15Ci1DT05GSUdfVVNCX0FSQ0hfSEFTX0VIQ0k9eQotIyBDT05GSUdfVVNCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9PVEdfV0hJVEVMSVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9PVEdfQkxBQ0tMSVNUX0hVQiBpcyBub3Qgc2V0Ci0KLSMKLSMgRW5hYmxlIEhvc3Qgb3IgR2FkZ2V0IHN1cHBvcnQgdG8gc2VlIEludmVudHJhIG9wdGlvbnMKLSMKLQotIwotIyBOT1RFOiBVU0JfU1RPUkFHRSBlbmFibGVzIFNDU0ksIGFuZCAnU0NTSSBkaXNrIHN1cHBvcnQnCi0jCi0jIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKLSMgQ09ORklHX01NQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BQ0NFU1NJQklMSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORklOSUJBTkQgaXMgbm90IHNldAotIyBDT05GSUdfRURBQyBpcyBub3Qgc2V0Ci1DT05GSUdfUlRDX0xJQj15Ci1DT05GSUdfUlRDX0NMQVNTPXkKLUNPTkZJR19SVENfSENUT1NZUz15Ci1DT05GSUdfUlRDX0hDVE9TWVNfREVWSUNFPSJydGMwIgotIyBDT05GSUdfUlRDX0RFQlVHIGlzIG5vdCBzZXQKLQotIwotIyBSVEMgaW50ZXJmYWNlcwotIwotQ09ORklHX1JUQ19JTlRGX1NZU0ZTPXkKLUNPTkZJR19SVENfSU5URl9QUk9DPXkKLUNPTkZJR19SVENfSU5URl9ERVY9eQotIyBDT05GSUdfUlRDX0lOVEZfREVWX1VJRV9FTVVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfVEVTVCBpcyBub3Qgc2V0Ci0KLSMKLSMgSTJDIFJUQyBkcml2ZXJzCi0jCi0jIENPTkZJR19SVENfRFJWX0RTMTMwNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0RTMTM3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0RTMTY3MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX01BWDY5MDAgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9SUzVDMzcyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfSVNMMTIwOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1gxMjA1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfUENGODU2MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1BDRjg1ODMgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9NNDFUODAgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9TMzUzOTBBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRk0zMTMwIGlzIG5vdCBzZXQKLQotIwotIyBTUEkgUlRDIGRyaXZlcnMKLSMKLQotIwotIyBQbGF0Zm9ybSBSVEMgZHJpdmVycwotIwotQ09ORklHX1JUQ19EUlZfQ01PUz15Ci0jIENPTkZJR19SVENfRFJWX0RTMTUxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0RTMTU1MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0RTMTc0MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1NUSzE3VEE4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfTTQ4VDg2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfTTQ4VDU5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfVjMwMjAgaXMgbm90IHNldAotCi0jCi0jIG9uLUNQVSBSVEMgZHJpdmVycwotIwotIyBDT05GSUdfUlRDX0RSVl9QUEMgaXMgbm90IHNldAotIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VSU8gaXMgbm90IHNldAotCi0jCi0jIEZpbGUgc3lzdGVtcwotIwotQ09ORklHX0VYVDJfRlM9eQotIyBDT05GSUdfRVhUMl9GU19YQVRUUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0Ci1DT05GSUdfRVhUM19GUz15Ci1DT05GSUdfRVhUM19GU19YQVRUUj15Ci0jIENPTkZJR19FWFQzX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQzX0ZTX1NFQ1VSSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDRERVZfRlMgaXMgbm90IHNldAotQ09ORklHX0pCRD15Ci1DT05GSUdfRlNfTUJDQUNIRT15Ci0jIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETk9USUZZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOT1RJRlkgaXMgbm90IHNldAotIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAotIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVVE9GUzRfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcwotIwotIyBDT05GSUdfSVNPOTY2MF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VREZfRlMgaXMgbm90IHNldAotCi0jCi0jIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKLSMKLSMgQ09ORklHX01TRE9TX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZGQVRfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTlRGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUHNldWRvIGZpbGVzeXN0ZW1zCi0jCi1DT05GSUdfUFJPQ19GUz15Ci1DT05GSUdfUFJPQ19LQ09SRT15Ci1DT05GSUdfUFJPQ19TWVNDVEw9eQotQ09ORklHX1NZU0ZTPXkKLUNPTkZJR19UTVBGUz15Ci0jIENPTkZJR19UTVBGU19QT1NJWF9BQ0wgaXMgbm90IHNldAotIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBNaXNjZWxsYW5lb3VzIGZpbGVzeXN0ZW1zCi0jCi0jIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGRlMyX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQU1GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX09NRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQotQ09ORklHX05GU19GUz15Ci1DT05GSUdfTkZTX1YzPXkKLSMgQ09ORklHX05GU19WM19BQ0wgaXMgbm90IHNldAotIyBDT05GSUdfTkZTX1Y0IGlzIG5vdCBzZXQKLUNPTkZJR19ST09UX05GUz15Ci1DT05GSUdfTkZTRD15Ci0jIENPTkZJR19ORlNEX1YzIGlzIG5vdCBzZXQKLSMgQ09ORklHX05GU0RfVjQgaXMgbm90IHNldAotQ09ORklHX0xPQ0tEPXkKLUNPTkZJR19MT0NLRF9WND15Ci1DT05GSUdfRVhQT1JURlM9eQotQ09ORklHX05GU19DT01NT049eQotQ09ORklHX1NVTlJQQz15Ci0jIENPTkZJR19SUENTRUNfR1NTX0tSQjUgaXMgbm90IHNldAotIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTUJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAotCi0jCi0jIFBhcnRpdGlvbiBUeXBlcwotIwotQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRD15Ci0jIENPTkZJR19BQ09STl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfT1NGX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BTUlHQV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfQVRBUklfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ19QQVJUSVRJT04gaXMgbm90IHNldAotQ09ORklHX01TRE9TX1BBUlRJVElPTj15Ci0jIENPTkZJR19CU0RfRElTS0xBQkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JTklYX1NVQlBBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TT0xBUklTX1g4Nl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfVU5JWFdBUkVfRElTS0xBQkVMIGlzIG5vdCBzZXQKLUNPTkZJR19MRE1fUEFSVElUSU9OPXkKLSMgQ09ORklHX0xETV9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TR0lfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VMVFJJWF9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfU1VOX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LQVJNQV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfRUZJX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNWNjhfUEFSVElUSU9OIGlzIG5vdCBzZXQKLUNPTkZJR19OTFM9eQotQ09ORklHX05MU19ERUZBVUxUPSJpc284ODU5LTEiCi0jIENPTkZJR19OTFNfQ09ERVBBR0VfNDM3IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV83MzcgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzc3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODU3IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYyIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjMgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjYgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTM2IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85NTAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTQ5IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NzQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQVNDSUkgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8yIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzMgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV81IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzYgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV85IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzEzIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzE0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzE1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19LT0k4X1IgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0tPSThfVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfVVRGOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETE0gaXMgbm90IHNldAotCi0jCi0jIExpYnJhcnkgcm91dGluZXMKLSMKLUNPTkZJR19CSVRSRVZFUlNFPXkKLSMgQ09ORklHX0dFTkVSSUNfRklORF9GSVJTVF9CSVQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JDX0NDSVRUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKLUNPTkZJR19DUkNfVDEwRElGPXkKLSMgQ09ORklHX0NSQ19JVFVfVCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JDMzI9eQotIyBDT05GSUdfQ1JDNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAotQ09ORklHX1BMSVNUPXkKLUNPTkZJR19IQVNfSU9NRU09eQotQ09ORklHX0hBU19JT1BPUlQ9eQotQ09ORklHX0hBU19ETUE9eQotQ09ORklHX0hBVkVfTE1CPXkKLQotIwotIyBLZXJuZWwgaGFja2luZwotIwotIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAotQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQ9eQotQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKLUNPTkZJR19GUkFNRV9XQVJOPTEwMjQKLSMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAotQ09ORklHX0RFQlVHX0tFUk5FTD15Ci1DT05GSUdfREVCVUdfU0hJUlE9eQotQ09ORklHX0RFVEVDVF9TT0ZUTE9DS1VQPXkKLSMgQ09ORklHX0JPT1RQQVJBTV9TT0ZUTE9DS1VQX1BBTklDIGlzIG5vdCBzZXQKLUNPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQ19WQUxVRT0wCi1DT05GSUdfU0NIRURfREVCVUc9eQotIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19USU1FUl9TVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19PQkpFQ1RTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMVUJfREVCVUdfT04gaXMgbm90IHNldAotIyBDT05GSUdfU0xVQl9TVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19NVVRFWEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0xPQ0tJTkdfQVBJX1NFTEZURVNUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0hJR0hNRU0gaXMgbm90IHNldAotQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0U9eQotQ09ORklHX0RFQlVHX0lORk89eQotIyBDT05GSUdfREVCVUdfVk0gaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfV1JJVEVDT1VOVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19NRU1PUllfSU5JVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JPT1RfUFJJTlRLX0RFTEFZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAotIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAotIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0s9eQotQ09ORklHX0hBVkVfRlRSQUNFPXkKLUNPTkZJR19IQVZFX0RZTkFNSUNfRlRSQUNFPXkKLSMgQ09ORklHX0ZUUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ0hFRF9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfQ09OVEVYVF9TV0lUQ0hfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAotQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKLSMgQ09ORklHX0tHREIgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU1RBQ0tPVkVSRkxPVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TVEFDS19VU0FHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19QQUdFQUxMT0MgaXMgbm90IHNldAotIyBDT05GSUdfQ09ERV9QQVRDSElOR19TRUxGVEVTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GVFJfRklYVVBfU0VMRlRFU1QgaXMgbm90IHNldAotIyBDT05GSUdfWE1PTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUlFTVEFDS1MgaXMgbm90IHNldAotIyBDT05GSUdfQkRJX1NXSVRDSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CT09UWF9URVhUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19FQVJMWV9ERUJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VjdXJpdHkgb3B0aW9ucwotIwotIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUyBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPPXkKLQotIwotIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKLSMKLSMgQ09ORklHX0NSWVBUT19NQU5BR0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTlVMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ1JZUFREIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19BVVRIRU5DIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19URVNUIGlzIG5vdCBzZXQKLQotIwotIyBBdXRoZW50aWNhdGVkIEVuY3J5cHRpb24gd2l0aCBBc3NvY2lhdGVkIERhdGEKLSMKLSMgQ09ORklHX0NSWVBUT19DQ00gaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0dDTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0VRSVYgaXMgbm90IHNldAotCi0jCi0jIEJsb2NrIG1vZGVzCi0jCi0jIENPTkZJR19DUllQVE9fQ0JDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DVFIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fRUNCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19MUlcgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1BDQkMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1hUUyBpcyBub3Qgc2V0Ci0KLSMKLSMgSGFzaCBtb2RlcwotIwotIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAotCi0jCi0jIERpZ2VzdAotIwotIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19NRDUgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19STUQxMjggaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1JNRDE2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fUk1EMjU2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19STUQzMjAgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NIQTEgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NIQTI1NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0hBNTEyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19UR1IxOTIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1dQNTEyIGlzIG5vdCBzZXQKLQotIwotIyBDaXBoZXJzCi0jCi0jIENPTkZJR19DUllQVE9fQUVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19BTlVCSVMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0FSQzQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0JMT1dGSVNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DQU1FTExJQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ0FTVDUgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NBU1Q2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19ERVMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0ZDUllQVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fS0hBWkFEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TQUxTQTIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TRUVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TRVJQRU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19URUEgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RXT0ZJU0ggaXMgbm90IHNldAotCi0jCi0jIENvbXByZXNzaW9uCi0jCi0jIENPTkZJR19DUllQVE9fREVGTEFURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTFpPIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fSFc9eQotIyBDT05GSUdfQ1JZUFRPX0RFVl9ISUZOXzc5NVggaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0RFVl9UQUxJVE9TIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19DTE9DSyBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDX0xJQl9SSEVBUD15Ci0jIENPTkZJR19WSVJUVUFMSVpBVElPTiBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy9tcGM4NjQxX2hwY25fZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbXBjODY0MV9ocGNuX2RlZmNvbmZpZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWEwOWJlMy4uMDAwMDAwMAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy9tcGM4NjQxX2hwY25fZGVmY29uZmlnCisrKyAvZGV2L251bGwKQEAgLTEsMTY2NiArMCwwIEBACi0jCi0jIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjctcmM0Ci0jIFRodSBBdWcgMjEgMDA6NTI6MTEgMjAwOAotIwotIyBDT05GSUdfUFBDNjQgaXMgbm90IHNldAotCi0jCi0jIFByb2Nlc3NvciBzdXBwb3J0Ci0jCi1DT05GSUdfNnh4PXkKLSMgQ09ORklHX1BQQ184NXh4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ184eHggaXMgbm90IHNldAotIyBDT05GSUdfNDB4IGlzIG5vdCBzZXQKLSMgQ09ORklHXzQ0eCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FMjAwIGlzIG5vdCBzZXQKLUNPTkZJR19QUENfRlBVPXkKLUNPTkZJR19BTFRJVkVDPXkKLUNPTkZJR19QUENfU1REX01NVT15Ci1DT05GSUdfUFBDX1NURF9NTVVfMzI9eQotIyBDT05GSUdfUFBDX01NX1NMSUNFUyBpcyBub3Qgc2V0Ci1DT05GSUdfU01QPXkKLUNPTkZJR19OUl9DUFVTPTIKLUNPTkZJR19QUEMzMj15Ci1DT05GSUdfV09SRF9TSVpFPTMyCi1DT05GSUdfUFBDX01FUkdFPXkKLUNPTkZJR19NTVU9eQotQ09ORklHX0dFTkVSSUNfQ01PU19VUERBVEU9eQotQ09ORklHX0dFTkVSSUNfVElNRT15Ci1DT05GSUdfR0VORVJJQ19USU1FX1ZTWVNDQUxMPXkKLUNPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKLUNPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKLSMgQ09ORklHX0hBVkVfU0VUVVBfUEVSX0NQVV9BUkVBIGlzIG5vdCBzZXQKLUNPTkZJR19JUlFfUEVSX0NQVT15Ci1DT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKLUNPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15Ci1DT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKLUNPTkZJR19SV1NFTV9YQ0hHQUREX0FMR09SSVRITT15Ci1DT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyPXkKLUNPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQotQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKLUNPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQ9eQotIyBDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUyBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDPXkKLUNPTkZJR19FQVJMWV9QUklOVEs9eQotQ09ORklHX0dFTkVSSUNfTlZSQU09eQotQ09ORklHX1NDSEVEX05PX05PX09NSVRfRlJBTUVfUE9JTlRFUj15Ci1DT05GSUdfQVJDSF9NQVlfSEFWRV9QQ19GREM9eQotQ09ORklHX1BQQ19PRj15Ci1DT05GSUdfT0Y9eQotQ09ORklHX1BQQ19VREJHXzE2NTUwPXkKLUNPTkZJR19HRU5FUklDX1RCU1lOQz15Ci1DT05GSUdfQVVESVRfQVJDSD15Ci1DT05GSUdfR0VORVJJQ19CVUc9eQotQ09ORklHX0RFRkFVTFRfVUlNQUdFPXkKLSMgQ09ORklHX1BQQ19EQ1JfTkFUSVZFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19EQ1JfTU1JTyBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgotCi0jCi0jIEdlbmVyYWwgc2V0dXAKLSMKLUNPTkZJR19FWFBFUklNRU5UQUw9eQotQ09ORklHX0xPQ0tfS0VSTkVMPXkKLUNPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKLUNPTkZJR19MT0NBTFZFUlNJT049IiIKLUNPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15Ci1DT05GSUdfU1dBUD15Ci1DT05GSUdfU1lTVklQQz15Ci1DT05GSUdfU1lTVklQQ19TWVNDVEw9eQotQ09ORklHX1BPU0lYX01RVUVVRT15Ci1DT05GSUdfQlNEX1BST0NFU1NfQUNDVD15Ci0jIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUX1YzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0Ci1DT05GSUdfQVVESVQ9eQotIyBDT05GSUdfQVVESVRTWVNDQUxMIGlzIG5vdCBzZXQKLUNPTkZJR19JS0NPTkZJRz15Ci1DT05GSUdfSUtDT05GSUdfUFJPQz15Ci1DT05GSUdfTE9HX0JVRl9TSElGVD0xNAotIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0Ci1DT05GSUdfR1JPVVBfU0NIRUQ9eQotIyBDT05GSUdfRkFJUl9HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVF9HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0Ci1DT05GSUdfVVNFUl9TQ0hFRD15Ci0jIENPTkZJR19DR1JPVVBfU0NIRUQgaXMgbm90IHNldAotQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQotQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjI9eQotIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAotIyBDT05GSUdfTkFNRVNQQUNFUyBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVl9JTklUUkQ9eQotQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKLSMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKLUNPTkZJR19TWVNDVEw9eQotQ09ORklHX0VNQkVEREVEPXkKLUNPTkZJR19TWVNDVExfU1lTQ0FMTD15Ci1DT05GSUdfS0FMTFNZTVM9eQotQ09ORklHX0tBTExTWU1TX0FMTD15Ci1DT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUz15Ci1DT05GSUdfSE9UUExVRz15Ci1DT05GSUdfUFJJTlRLPXkKLUNPTkZJR19CVUc9eQotQ09ORklHX0VMRl9DT1JFPXkKLUNPTkZJR19QQ1NQS1JfUExBVEZPUk09eQotQ09ORklHX0NPTVBBVF9CUks9eQotQ09ORklHX0JBU0VfRlVMTD15Ci1DT05GSUdfRlVURVg9eQotQ09ORklHX0FOT05fSU5PREVTPXkKLUNPTkZJR19FUE9MTD15Ci1DT05GSUdfU0lHTkFMRkQ9eQotQ09ORklHX1RJTUVSRkQ9eQotQ09ORklHX0VWRU5URkQ9eQotQ09ORklHX1NITUVNPXkKLUNPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15Ci1DT05GSUdfU0xVQl9ERUJVRz15Ci0jIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKLUNPTkZJR19TTFVCPXkKLSMgQ09ORklHX1NMT0IgaXMgbm90IHNldAotIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAotQ09ORklHX0hBVkVfT1BST0ZJTEU9eQotIyBDT05GSUdfS1BST0JFUyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTUz15Ci1DT05GSUdfSEFWRV9JT1JFTUFQX1BST1Q9eQotQ09ORklHX0hBVkVfS1BST0JFUz15Ci1DT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKLUNPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKLSMgQ09ORklHX0hBVkVfRE1BX0FUVFJTIGlzIG5vdCBzZXQKLUNPTkZJR19VU0VfR0VORVJJQ19TTVBfSEVMUEVSUz15Ci0jIENPTkZJR19IQVZFX0NMSyBpcyBub3Qgc2V0Ci1DT05GSUdfUFJPQ19QQUdFX01PTklUT1I9eQotIyBDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVCBpcyBub3Qgc2V0Ci1DT05GSUdfU0xBQklORk89eQotQ09ORklHX1JUX01VVEVYRVM9eQotIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0Ci1DT05GSUdfQkFTRV9TTUFMTD0wCi1DT05GSUdfTU9EVUxFUz15Ci0jIENPTkZJR19NT0RVTEVfRk9SQ0VfTE9BRCBpcyBub3Qgc2V0Ci1DT05GSUdfTU9EVUxFX1VOTE9BRD15Ci1DT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRD15Ci1DT05GSUdfTU9EVkVSU0lPTlM9eQotIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKLUNPTkZJR19LTU9EPXkKLUNPTkZJR19TVE9QX01BQ0hJTkU9eQotQ09ORklHX0JMT0NLPXkKLUNPTkZJR19MQkQ9eQotIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MU0YgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAotCi0jCi0jIElPIFNjaGVkdWxlcnMKLSMKLUNPTkZJR19JT1NDSEVEX05PT1A9eQotQ09ORklHX0lPU0NIRURfQVM9eQotQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQotQ09ORklHX0lPU0NIRURfQ0ZRPXkKLSMgQ09ORklHX0RFRkFVTFRfQVMgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9DRlE9eQotIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImNmcSIKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0KLSMKLSMgUGxhdGZvcm0gc3VwcG9ydAotIwotQ09ORklHX1BQQ19NVUxUSVBMQVRGT1JNPXkKLUNPTkZJR19DTEFTU0lDMzI9eQotQ09ORklHX1BQQ19DSFJQPXkKLSMgQ09ORklHX01QQzUxMjFfQURTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01QQzUxMjFfR0VORVJJQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfTVBDNTJ4eCBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDX1BNQUM9eQotIyBDT05GSUdfUFBDX0NFTEwgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0NFTExfTkFUSVZFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ184Mnh4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BRMkFEUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfODN4eCBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDXzg2eHg9eQotQ09ORklHX01QQzg2NDFfSFBDTj15Ci0jIENPTkZJR19TQkM4NjQxRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NUEM4NjEwX0hQQ0QgaXMgbm90IHNldAotQ09ORklHX01QQzg2NDE9eQotQ09ORklHX1BQQ19OQVRJVkU9eQotIyBDT05GSUdfVURCR19SVEFTX0NPTlNPTEUgaXMgbm90IHNldAotIyBDT05GSUdfSVBJQyBpcyBub3Qgc2V0Ci1DT05GSUdfTVBJQz15Ci0jIENPTkZJR19NUElDX1dFSVJEIGlzIG5vdCBzZXQKLUNPTkZJR19QUENfSTgyNTk9eQotQ09ORklHX1BQQ19SVEFTPXkKLSMgQ09ORklHX1JUQVNfRVJST1JfTE9HR0lORyBpcyBub3Qgc2V0Ci1DT05GSUdfUlRBU19QUk9DPXkKLSMgQ09ORklHX01NSU9fTlZSQU0gaXMgbm90IHNldAotQ09ORklHX1BQQ19NUEMxMDY9eQotIyBDT05GSUdfUFBDXzk3MF9OQVAgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0lORElSRUNUX0lPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dFTkVSSUNfSU9NQVAgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0ZSRVEgaXMgbm90IHNldAotIyBDT05GSUdfUFBDNjAxX1NZTkNfRklYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RBVSBpcyBub3Qgc2V0Ci1DT05GSUdfRlNMX1VMSTE1NzU9eQotCi0jCi0jIEtlcm5lbCBvcHRpb25zCi0jCi1DT05GSUdfSElHSE1FTT15Ci1DT05GSUdfVElDS19PTkVTSE9UPXkKLUNPTkZJR19OT19IWj15Ci1DT05GSUdfSElHSF9SRVNfVElNRVJTPXkKLUNPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTX0JVSUxEPXkKLSMgQ09ORklHX0haXzEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IWl8yNTAgaXMgbm90IHNldAotIyBDT05GSUdfSFpfMzAwIGlzIG5vdCBzZXQKLUNPTkZJR19IWl8xMDAwPXkKLUNPTkZJR19IWj0xMDAwCi1DT05GSUdfU0NIRURfSFJUSUNLPXkKLUNPTkZJR19QUkVFTVBUX05PTkU9eQotIyBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlkgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0Ci1DT05GSUdfQklORk1UX0VMRj15Ci1DT05GSUdfQklORk1UX01JU0M9bQotIyBDT05GSUdfSU9NTVVfSEVMUEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hPVFBMVUdfQ1BVIGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVRz15Ci1DT05GSUdfQVJDSF9IQVNfV0FMS19NRU1PUlk9eQotQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RSRU1PVkU9eQotIyBDT05GSUdfS0VYRUMgaXMgbm90IHNldAotIyBDT05GSUdfSVJRX0FMTF9DUFVTIGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKLUNPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15Ci1DT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15Ci1DT05GSUdfRkxBVE1FTV9NQU5VQUw9eQotIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKLUNPTkZJR19GTEFUTUVNPXkKLUNPTkZJR19GTEFUX05PREVfTUVNX01BUD15Ci0jIENPTkZJR19TUEFSU0VNRU1fU1RBVElDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQQVJTRU1FTV9WTUVNTUFQX0VOQUJMRSBpcyBub3Qgc2V0Ci1DT05GSUdfUEFHRUZMQUdTX0VYVEVOREVEPXkKLUNPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00Ci1DT05GSUdfTUlHUkFUSU9OPXkKLSMgQ09ORklHX1JFU09VUkNFU182NEJJVCBpcyBub3Qgc2V0Ci1DT05GSUdfWk9ORV9ETUFfRkxBRz0xCi1DT05GSUdfQk9VTkNFPXkKLUNPTkZJR19WSVJUX1RPX0JVUz15Ci1DT05GSUdfRk9SQ0VfTUFYX1pPTkVPUkRFUj0xMQotQ09ORklHX1BST0NfREVWSUNFVFJFRT15Ci0jIENPTkZJR19DTURMSU5FX0JPT0wgaXMgbm90IHNldAotQ09ORklHX0VYVFJBX1RBUkdFVFM9IiIKLSMgQ09ORklHX1BNIGlzIG5vdCBzZXQKLUNPTkZJR19TRUNDT01QPXkKLUNPTkZJR19JU0FfRE1BX0FQST15Ci0KLSMKLSMgQnVzIG9wdGlvbnMKLSMKLSMgQ09ORklHX0lTQSBpcyBub3Qgc2V0Ci1DT05GSUdfWk9ORV9ETUE9eQotQ09ORklHX0dFTkVSSUNfSVNBX0RNQT15Ci1DT05GSUdfUFBDX0lORElSRUNUX1BDST15Ci1DT05GSUdfRlNMX1NPQz15Ci1DT05GSUdfRlNMX1BDST15Ci1DT05GSUdfUFBDX1BDSV9DSE9JQ0U9eQotQ09ORklHX1BDST15Ci1DT05GSUdfUENJX0RPTUFJTlM9eQotQ09ORklHX1BDSV9TWVNDQUxMPXkKLSMgQ09ORklHX1BDSUVQT1JUQlVTIGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX1NVUFBPUlRTX01TST15Ci0jIENPTkZJR19QQ0lfTVNJIGlzIG5vdCBzZXQKLUNPTkZJR19QQ0lfTEVHQUNZPXkKLSMgQ09ORklHX1BDSV9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0NBUkQgaXMgbm90IHNldAotIyBDT05GSUdfSE9UUExVR19QQ0kgaXMgbm90IHNldAotQ09ORklHX0hBU19SQVBJRElPPXkKLSMgQ09ORklHX1JBUElESU8gaXMgbm90IHNldAotCi0jCi0jIEFkdmFuY2VkIHNldHVwCi0jCi0jIENPTkZJR19BRFZBTkNFRF9PUFRJT05TIGlzIG5vdCBzZXQKLQotIwotIyBEZWZhdWx0IHNldHRpbmdzIGZvciBhZHZhbmNlZCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIHVzZWQKLSMKLUNPTkZJR19MT1dNRU1fU0laRT0weDMwMDAwMDAwCi1DT05GSUdfUEFHRV9PRkZTRVQ9MHhjMDAwMDAwMAotQ09ORklHX0tFUk5FTF9TVEFSVD0weGMwMDAwMDAwCi1DT05GSUdfUEhZU0lDQUxfU1RBUlQ9MHgwMDAwMDAwMAotQ09ORklHX1RBU0tfU0laRT0weGMwMDAwMDAwCi1DT05GSUdfTkVUPXkKLQotIwotIyBOZXR3b3JraW5nIG9wdGlvbnMKLSMKLUNPTkZJR19QQUNLRVQ9eQotIyBDT05GSUdfUEFDS0VUX01NQVAgaXMgbm90IHNldAotQ09ORklHX1VOSVg9eQotQ09ORklHX1hGUk09eQotQ09ORklHX1hGUk1fVVNFUj15Ci0jIENPTkZJR19YRlJNX1NVQl9QT0xJQ1kgaXMgbm90IHNldAotIyBDT05GSUdfWEZSTV9NSUdSQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hGUk1fU1RBVElTVElDUyBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUX0tFWT1tCi0jIENPTkZJR19ORVRfS0VZX01JR1JBVEUgaXMgbm90IHNldAotQ09ORklHX0lORVQ9eQotQ09ORklHX0lQX01VTFRJQ0FTVD15Ci1DT05GSUdfSVBfQURWQU5DRURfUk9VVEVSPXkKLUNPTkZJR19BU0tfSVBfRklCX0hBU0g9eQotIyBDT05GSUdfSVBfRklCX1RSSUUgaXMgbm90IHNldAotQ09ORklHX0lQX0ZJQl9IQVNIPXkKLUNPTkZJR19JUF9NVUxUSVBMRV9UQUJMRVM9eQotQ09ORklHX0lQX1JPVVRFX01VTFRJUEFUSD15Ci1DT05GSUdfSVBfUk9VVEVfVkVSQk9TRT15Ci1DT05GSUdfSVBfUE5QPXkKLUNPTkZJR19JUF9QTlBfREhDUD15Ci1DT05GSUdfSVBfUE5QX0JPT1RQPXkKLUNPTkZJR19JUF9QTlBfUkFSUD15Ci1DT05GSUdfTkVUX0lQSVA9eQotQ09ORklHX05FVF9JUEdSRT15Ci1DT05GSUdfTkVUX0lQR1JFX0JST0FEQ0FTVD15Ci1DT05GSUdfSVBfTVJPVVRFPXkKLUNPTkZJR19JUF9QSU1TTV9WMT15Ci1DT05GSUdfSVBfUElNU01fVjI9eQotQ09ORklHX0FSUEQ9eQotIyBDT05GSUdfU1lOX0NPT0tJRVMgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKLUNPTkZJR19JTkVUX1RVTk5FTD15Ci0jIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9MUk8gaXMgbm90IHNldAotQ09ORklHX0lORVRfRElBRz15Ci1DT05GSUdfSU5FVF9UQ1BfRElBRz15Ci0jIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0Ci1DT05GSUdfVENQX0NPTkdfQ1VCSUM9eQotQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImN1YmljIgotIyBDT05GSUdfVENQX01ENVNJRyBpcyBub3Qgc2V0Ci1DT05GSUdfSVBWNj15Ci0jIENPTkZJR19JUFY2X1BSSVZBQ1kgaXMgbm90IHNldAotIyBDT05GSUdfSVBWNl9ST1VURVJfUFJFRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFY2X09QVElNSVNUSUNfREFEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVQ2X0FIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVQ2X0VTUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUNl9JUENPTVAgaXMgbm90IHNldAotIyBDT05GSUdfSVBWNl9NSVA2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVQ2X1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVQ2X1RVTk5FTCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5FVDZfWEZSTV9NT0RFX1RSQU5TUE9SVD15Ci1DT05GSUdfSU5FVDZfWEZSTV9NT0RFX1RVTk5FTD15Ci1DT05GSUdfSU5FVDZfWEZSTV9NT0RFX0JFRVQ9eQotIyBDT05GSUdfSU5FVDZfWEZSTV9NT0RFX1JPVVRFT1BUSU1JWkFUSU9OIGlzIG5vdCBzZXQKLUNPTkZJR19JUFY2X1NJVD15Ci1DT05GSUdfSVBWNl9ORElTQ19OT0RFVFlQRT15Ci0jIENPTkZJR19JUFY2X1RVTk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFY2X01VTFRJUExFX1RBQkxFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFY2X01ST1VURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRXT1JLX1NFQ01BUksgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAotQ09ORklHX0lQX1NDVFA9bQotIyBDT05GSUdfU0NUUF9EQkdfTVNHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDVFBfREJHX09CSkNOVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1RQX0hNQUNfTk9ORSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1RQX0hNQUNfU0hBMSBpcyBub3Qgc2V0Ci1DT05GSUdfU0NUUF9ITUFDX01ENT15Ci0jIENPTkZJR19USVBDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CUklER0UgaXMgbm90IHNldAotIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUNORVQgaXMgbm90IHNldAotIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFggaXMgbm90IHNldAotIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAotIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0xBUEIgaXMgbm90IHNldAotIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKLQotIwotIyBOZXR3b3JrIHRlc3RpbmcKLSMKLSMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAotIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAotIyBDT05GSUdfQ0FOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lSREEgaXMgbm90IHNldAotIyBDT05GSUdfQlQgaXMgbm90IHNldAotIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAotQ09ORklHX0ZJQl9SVUxFUz15Ci0KLSMKLSMgV2lyZWxlc3MKLSMKLSMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUM4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JRUVFODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGV2aWNlIERyaXZlcnMKLSMKLQotIwotIyBHZW5lcmljIERyaXZlciBPcHRpb25zCi0jCi1DT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgotQ09ORklHX1NUQU5EQUxPTkU9eQotQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQotQ09ORklHX0ZXX0xPQURFUj15Ci1DT05GSUdfRklSTVdBUkVfSU5fS0VSTkVMPXkKLUNPTkZJR19FWFRSQV9GSVJNV0FSRT0iIgotIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0RFVlJFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAotIyBDT05GSUdfTVREIGlzIG5vdCBzZXQKLUNPTkZJR19PRl9ERVZJQ0U9eQotQ09ORklHX09GX0kyQz15Ci0jIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWPXkKLSMgQ09ORklHX0JMS19ERVZfRkQgaXMgbm90IHNldAotIyBDT05GSUdfTUFDX0ZMT1BQWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfQ1BRX0RBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19DUFFfQ0lTU19EQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0RBQzk2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1VNRU0gaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX0xPT1A9eQotIyBDT05GSUdfQkxLX0RFVl9DUllQVE9MT09QIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX05CRD15Ci0jIENPTkZJR19CTEtfREVWX1NYOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1VCIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX1JBTT15Ci1DT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKLUNPTkZJR19CTEtfREVWX1JBTV9TSVpFPTEzMTA3MgotIyBDT05GSUdfQkxLX0RFVl9YSVAgaXMgbm90IHNldAotIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9IRCBpcyBub3Qgc2V0Ci1DT05GSUdfTUlTQ19ERVZJQ0VTPXkKLSMgQ09ORklHX1BIQU5UT00gaXMgbm90IHNldAotIyBDT05GSUdfRUVQUk9NXzkzQ1g2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NHSV9JT0M0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJRk1fQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FTkNMT1NVUkVfU0VSVklDRVMgaXMgbm90IHNldAotIyBDT05GSUdfSFBfSUxPIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0lERT15Ci0jIENPTkZJR19JREUgaXMgbm90IHNldAotCi0jCi0jIFNDU0kgZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAotQ09ORklHX1NDU0k9eQotQ09ORklHX1NDU0lfRE1BPXkKLSMgQ09ORklHX1NDU0lfVEdUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTkVUTElOSyBpcyBub3Qgc2V0Ci1DT05GSUdfU0NTSV9QUk9DX0ZTPXkKLQotIwotIyBTQ1NJIHN1cHBvcnQgdHlwZSAoZGlzaywgdGFwZSwgQ0QtUk9NKQotIwotQ09ORklHX0JMS19ERVZfU0Q9eQotQ09ORklHX0NIUl9ERVZfU1Q9eQotIyBDT05GSUdfQ0hSX0RFVl9PU1NUIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX1NSPXkKLSMgQ09ORklHX0JMS19ERVZfU1JfVkVORE9SIGlzIG5vdCBzZXQKLUNPTkZJR19DSFJfREVWX1NHPXkKLSMgQ09ORklHX0NIUl9ERVZfU0NIIGlzIG5vdCBzZXQKLQotIwotIyBTb21lIFNDU0kgZGV2aWNlcyAoZS5nLiBDRCBqdWtlYm94KSBzdXBwb3J0IG11bHRpcGxlIExVTnMKLSMKLUNPTkZJR19TQ1NJX01VTFRJX0xVTj15Ci0jIENPTkZJR19TQ1NJX0NPTlNUQU5UUyBpcyBub3Qgc2V0Ci1DT05GSUdfU0NTSV9MT0dHSU5HPXkKLSMgQ09ORklHX1NDU0lfU0NBTl9BU1lOQyBpcyBub3Qgc2V0Ci1DT05GSUdfU0NTSV9XQUlUX1NDQU49bQotCi0jCi0jIFNDU0kgVHJhbnNwb3J0cwotIwotIyBDT05GSUdfU0NTSV9TUElfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9GQ19BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0lTQ1NJX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU0FTX0xJQlNBUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NSUF9BVFRSUyBpcyBub3Qgc2V0Ci1DT05GSUdfU0NTSV9MT1dMRVZFTD15Ci0jIENPTkZJR19JU0NTSV9UQ1AgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl8zV19YWFhYX1JBSUQgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV8zV185WFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQUNBUkQgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9BQUNSQUlEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQUlDN1hYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0FJQzdYWFhfT0xEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQUlDNzlYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0FJQzk0WFggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9EUFRfSTJPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQURWQU5TWVMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9BUkNNU1IgaXMgbm90IHNldAotIyBDT05GSUdfTUVHQVJBSURfTkVXR0VOIGlzIG5vdCBzZXQKLSMgQ09ORklHX01FR0FSQUlEX0xFR0FDWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRUdBUkFJRF9TQVMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9IUFRJT1AgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9CVVNMT0dJQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RNWDMxOTFEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfRUFUQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0ZVVFVSRV9ET01BSU4gaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9HRFRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfSVBTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfSU5JVElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfSU5JQTEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX01WU0FTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU1RFWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NZTTUzQzhYWF8yIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfSVBSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfUUxPR0lDXzEyODAgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9RTEFfRkMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9RTEFfSVNDU0kgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9MUEZDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfREMzOTV4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfREMzOTBUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTlNQMzIgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX01FU0ggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9NQUM1M0M5NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NSUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RIIGlzIG5vdCBzZXQKLUNPTkZJR19BVEE9eQotIyBDT05GSUdfQVRBX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKLUNPTkZJR19TQVRBX1BNUD15Ci1DT05GSUdfU0FUQV9BSENJPXkKLSMgQ09ORklHX1NBVEFfU0lMMjQgaXMgbm90IHNldAotIyBDT05GSUdfU0FUQV9GU0wgaXMgbm90IHNldAotQ09ORklHX0FUQV9TRkY9eQotIyBDT05GSUdfU0FUQV9TVlcgaXMgbm90IHNldAotIyBDT05GSUdfQVRBX1BJSVggaXMgbm90IHNldAotIyBDT05GSUdfU0FUQV9NViBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQVRBX05WIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BEQ19BRE1BIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBVEFfUVNUT1IgaXMgbm90IHNldAotIyBDT05GSUdfU0FUQV9QUk9NSVNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBVEFfU1g0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBVEFfU0lMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBVEFfU0lTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBVEFfVUxJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBVEFfVklBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBVEFfVklURVNTRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQVRBX0lOSUMxNjJYIGlzIG5vdCBzZXQKLUNPTkZJR19QQVRBX0FMST15Ci0jIENPTkZJR19QQVRBX0FNRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0FSVE9QIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfQVRJSVhQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfQ01ENjQwX1BDSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0NNRDY0WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0NTNTUyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0NTNTUzMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0NZUFJFU1MgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9FRkFSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQV9HRU5FUklDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfSFBUMzY2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfSFBUMzdYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfSFBUM1gyTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0hQVDNYMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0lUODIxWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0lUODIxMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0pNSUNST04gaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9UUklGTEVYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfTUFSVkVMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX01QSUlYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfT0xEUElJWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX05FVENFTEwgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9OSU5KQTMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfTlM4NzQxMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX05TODc0MTUgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9PUFRJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfT1BUSURNQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX1BEQ19PTEQgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9SQURJU1lTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfUloxMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfU0MxMjAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfU0VSVkVSV09SS1MgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9QREMyMDI3WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX1NJTDY4MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX1NJUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX1ZJQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX1dJTkJPTkQgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9QTEFURk9STSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX1NDSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GVVNJT04gaXMgbm90IHNldAotCi0jCi0jIElFRUUgMTM5NCAoRmlyZVdpcmUpIHN1cHBvcnQKLSMKLQotIwotIyBFbmFibGUgb25seSBvbmUgb2YgdGhlIHR3byBzdGFja3MsIHVubGVzcyB5b3Uga25vdyB3aGF0IHlvdSBhcmUgZG9pbmcKLSMKLSMgQ09ORklHX0ZJUkVXSVJFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lFRUUxMzk0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNJTlRPU0hfRFJJVkVSUyBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUREVWSUNFUz15Ci1DT05GSUdfRFVNTVk9eQotIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNWTEFOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UVU4gaXMgbm90IHNldAotIyBDT05GSUdfVkVUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNORVQgaXMgbm90IHNldAotQ09ORklHX1BIWUxJQj15Ci0KLSMKLSMgTUlJIFBIWSBkZXZpY2UgZHJpdmVycwotIwotIyBDT05GSUdfTUFSVkVMTF9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfREFWSUNPTV9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfUVNFTUlfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xYVF9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfQ0lDQURBX1BIWSBpcyBub3Qgc2V0Ci1DT05GSUdfVklURVNTRV9QSFk9eQotIyBDT05GSUdfU01TQ19QSFkgaXMgbm90IHNldAotIyBDT05GSUdfQlJPQURDT01fUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lDUExVU19QSFkgaXMgbm90IHNldAotIyBDT05GSUdfUkVBTFRFS19QSFkgaXMgbm90IHNldAotIyBDT05GSUdfRklYRURfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX01ESU9fQklUQkFORyBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUX0VUSEVSTkVUPXkKLUNPTkZJR19NSUk9eQotIyBDT05GSUdfTUFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTUFDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBUFBZTUVBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVU5HRU0gaXMgbm90IHNldAotIyBDT05GSUdfQ0FTU0lOSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfVkVORE9SXzNDT00gaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1RVTElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hQMTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19aTUlJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19SR01JSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfVEFIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19FTUFDNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfUENJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0I0NCBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUREVWXzEwMDA9eQotIyBDT05GSUdfQUNFTklDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RMMksgaXMgbm90IHNldAotIyBDT05GSUdfRTEwMDAgaXMgbm90IHNldAotIyBDT05GSUdfRTEwMDBFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQMTAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JR0IgaXMgbm90IHNldAotIyBDT05GSUdfTlM4MzgyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQU1BQ0hJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1lFTExPV0ZJTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SODE2OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSVMxOTAgaXMgbm90IHNldAotIyBDT05GSUdfU0tHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TS1kyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJQV9WRUxPQ0lUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19USUdPTjMgaXMgbm90IHNldAotIyBDT05GSUdfQk5YMiBpcyBub3Qgc2V0Ci1DT05GSUdfR0lBTkZBUj15Ci0jIENPTkZJR19NVjY0M1hYX0VUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19RTEEzWFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTDEgaXMgbm90IHNldAotIyBDT05GSUdfQVRMMUUgaXMgbm90IHNldAotQ09ORklHX05FVERFVl8xMDAwMD15Ci0jIENPTkZJR19DSEVMU0lPX1QxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NIRUxTSU9fVDMgaXMgbm90IHNldAotIyBDT05GSUdfSVhHQkUgaXMgbm90IHNldAotIyBDT05GSUdfSVhHQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TMklPIGlzIG5vdCBzZXQKLSMgQ09ORklHX01ZUkkxMEdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFhFTl9OSUMgaXMgbm90IHNldAotIyBDT05GSUdfTklVIGlzIG5vdCBzZXQKLSMgQ09ORklHX01MWDRfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19URUhVVEkgaXMgbm90IHNldAotIyBDT05GSUdfQk5YMlggaXMgbm90IHNldAotIyBDT05GSUdfU0ZDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RSIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKLSMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JV0xXSUZJX0xFRFMgaXMgbm90IHNldAotCi0jCi0jIFVTQiBOZXR3b3JrIEFkYXB0ZXJzCi0jCi0jIENPTkZJR19VU0JfQ0FUQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfS0FXRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9QRUdBU1VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9SVEw4MTUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9VU0JORVQgaXMgbm90IHNldAotIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZEREkgaXMgbm90IHNldAotIyBDT05GSUdfSElQUEkgaXMgbm90IHNldAotIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMSVAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0ZDIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAotIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lTRE4gaXMgbm90IHNldAotIyBDT05GSUdfUEhPTkUgaXMgbm90IHNldAotCi0jCi0jIElucHV0IGRldmljZSBzdXBwb3J0Ci0jCi1DT05GSUdfSU5QVVQ9eQotIyBDT05GSUdfSU5QVVRfRkZfTUVNTEVTUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9QT0xMREVWIGlzIG5vdCBzZXQKLQotIwotIyBVc2VybGFuZCBpbnRlcmZhY2VzCi0jCi0jIENPTkZJR19JTlBVVF9NT1VTRURFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9KT1lERVYgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfRVZERVYgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfRVZCVUcgaXMgbm90IHNldAotCi0jCi0jIElucHV0IERldmljZSBEcml2ZXJzCi0jCi0jIENPTkZJR19JTlBVVF9LRVlCT0FSRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9NT1VTRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9UQUJMRVQgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU4gaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfTUlTQyBpcyBub3Qgc2V0Ci0KLSMKLSMgSGFyZHdhcmUgSS9PIHBvcnRzCi0jCi1DT05GSUdfU0VSSU89eQotQ09ORklHX1NFUklPX0k4MDQyPXkKLUNPTkZJR19TRVJJT19TRVJQT1JUPXkKLSMgQ09ORklHX1NFUklPX1BDSVBTMiBpcyBub3Qgc2V0Ci1DT05GSUdfU0VSSU9fTElCUFMyPXkKLSMgQ09ORklHX1NFUklPX1JBVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRVJJT19YSUxJTlhfWFBTX1BTMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ2hhcmFjdGVyIGRldmljZXMKLSMKLUNPTkZJR19WVD15Ci1DT05GSUdfQ09OU09MRV9UUkFOU0xBVElPTlM9eQotQ09ORklHX1ZUX0NPTlNPTEU9eQotQ09ORklHX0hXX0NPTlNPTEU9eQotIyBDT05GSUdfVlRfSFdfQ09OU09MRV9CSU5ESU5HIGlzIG5vdCBzZXQKLUNPTkZJR19ERVZLTUVNPXkKLSMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OT1pPTUkgaXMgbm90IHNldAotCi0jCi0jIFNlcmlhbCBkcml2ZXJzCi0jCi1DT05GSUdfU0VSSUFMXzgyNTA9eQotQ09ORklHX1NFUklBTF84MjUwX0NPTlNPTEU9eQotQ09ORklHX1NFUklBTF84MjUwX1BDST15Ci1DT05GSUdfU0VSSUFMXzgyNTBfTlJfVUFSVFM9MgotQ09ORklHX1NFUklBTF84MjUwX1JVTlRJTUVfVUFSVFM9MgotQ09ORklHX1NFUklBTF84MjUwX0VYVEVOREVEPXkKLUNPTkZJR19TRVJJQUxfODI1MF9NQU5ZX1BPUlRTPXkKLUNPTkZJR19TRVJJQUxfODI1MF9TSEFSRV9JUlE9eQotQ09ORklHX1NFUklBTF84MjUwX0RFVEVDVF9JUlE9eQotQ09ORklHX1NFUklBTF84MjUwX1JTQT15Ci0KLSMKLSMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAotIwotIyBDT05GSUdfU0VSSUFMX1VBUlRMSVRFIGlzIG5vdCBzZXQKLUNPTkZJR19TRVJJQUxfQ09SRT15Ci1DT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15Ci0jIENPTkZJR19TRVJJQUxfUE1BQ1pJTE9HIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFUklBTF9KU00gaXMgbm90IHNldAotIyBDT05GSUdfU0VSSUFMX09GX1BMQVRGT1JNIGlzIG5vdCBzZXQKLUNPTkZJR19VTklYOThfUFRZUz15Ci1DT05GSUdfTEVHQUNZX1BUWVM9eQotQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MjU2Ci0jIENPTkZJR19CUklRX1BBTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hWQ19SVEFTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IV19SQU5ET00gaXMgbm90IHNldAotQ09ORklHX05WUkFNPXkKLSMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0FQUExJQ09NIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAotIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0Ci1DT05GSUdfREVWUE9SVD15Ci1DT05GSUdfSTJDPXkKLUNPTkZJR19JMkNfQk9BUkRJTkZPPXkKLSMgQ09ORklHX0kyQ19DSEFSREVWIGlzIG5vdCBzZXQKLUNPTkZJR19JMkNfSEVMUEVSX0FVVE89eQotCi0jCi0jIEkyQyBIYXJkd2FyZSBCdXMgc3VwcG9ydAotIwotCi0jCi0jIFBDIFNNQnVzIGhvc3QgY29udHJvbGxlciBkcml2ZXJzCi0jCi0jIENPTkZJR19JMkNfQUxJMTUzNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfQUxJMTU2MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfQUxJMTVYMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfQU1ENzU2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19BTUQ4MTExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19JODAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19JU0NIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19QSUlYNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfTkZPUkNFMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU0lTNTU5NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU0lTNjMwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TSVM5NlggaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1ZJQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfVklBUFJPIGlzIG5vdCBzZXQKLQotIwotIyBNYWMgU01CdXMgaG9zdCBjb250cm9sbGVyIGRyaXZlcnMKLSMKLSMgQ09ORklHX0kyQ19IWURSQSBpcyBub3Qgc2V0Ci1DT05GSUdfSTJDX1BPV0VSTUFDPXkKLQotIwotIyBJMkMgc3lzdGVtIGJ1cyBkcml2ZXJzIChtb3N0bHkgZW1iZWRkZWQgLyBzeXN0ZW0tb24tY2hpcCkKLSMKLUNPTkZJR19JMkNfTVBDPXkKLSMgQ09ORklHX0kyQ19PQ09SRVMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NJTVRFQyBpcyBub3Qgc2V0Ci0KLSMKLSMgRXh0ZXJuYWwgSTJDL1NNQnVzIGFkYXB0ZXIgZHJpdmVycwotIwotIyBDT05GSUdfSTJDX1BBUlBPUlRfTElHSFQgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1RBT1NfRVZNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19USU5ZX1VTQiBpcyBub3Qgc2V0Ci0KLSMKLSMgR3JhcGhpY3MgYWRhcHRlciBJMkMvRERDIGNoYW5uZWwgZHJpdmVycwotIwotIyBDT05GSUdfSTJDX1ZPT0RPTzMgaXMgbm90IHNldAotCi0jCi0jIE90aGVyIEkyQy9TTUJ1cyBidXMgZHJpdmVycwotIwotIyBDT05GSUdfSTJDX1BDQV9QTEFURk9STSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU1RVQiBpcyBub3Qgc2V0Ci0KLSMKLSMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0Ci0jCi0jIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAotIyBDT05GSUdfQVQyNCBpcyBub3Qgc2V0Ci1DT05GSUdfU0VOU09SU19FRVBST009eQotIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENGODU5MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX01BWDY4NzUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19CVVMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0NISVAgaXMgbm90IHNldAotIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX1dBTlRfT1BUSU9OQUxfR1BJT0xJQj15Ci0jIENPTkZJR19HUElPTElCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1cxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19IV01PTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAotIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAotCi0jCi0jIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQotIwotQ09ORklHX1NTQl9QT1NTSUJMRT15Ci0jIENPTkZJR19TU0IgaXMgbm90IHNldAotCi0jCi0jIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKLSMKLSMgQ09ORklHX01GRF9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aW1lZGlhIGRldmljZXMKLSMKLQotIwotIyBNdWx0aW1lZGlhIGNvcmUgc3VwcG9ydAotIwotIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKLUNPTkZJR19EVkJfQ09SRT1tCi1DT05GSUdfVklERU9fTUVESUE9bQotCi0jCi0jIE11bHRpbWVkaWEgZHJpdmVycwotIwotIyBDT05GSUdfTUVESUFfQVRUQUNIIGlzIG5vdCBzZXQKLUNPTkZJR19NRURJQV9UVU5FUj1tCi0jIENPTkZJR19NRURJQV9UVU5FUl9DVVNUT01JWkUgaXMgbm90IHNldAotQ09ORklHX01FRElBX1RVTkVSX1NJTVBMRT1tCi1DT05GSUdfTUVESUFfVFVORVJfVERBODI5MD1tCi1DT05GSUdfTUVESUFfVFVORVJfVERBOTg4Nz1tCi1DT05GSUdfTUVESUFfVFVORVJfVEVBNTc2MT1tCi1DT05GSUdfTUVESUFfVFVORVJfVEVBNTc2Nz1tCi1DT05GSUdfTUVESUFfVFVORVJfTVQyMFhYPW0KLUNPTkZJR19NRURJQV9UVU5FUl9YQzIwMjg9bQotQ09ORklHX01FRElBX1RVTkVSX1hDNTAwMD1tCi1DT05GSUdfRFZCX0NBUFRVUkVfRFJJVkVSUz15Ci0KLSMKLSMgU3VwcG9ydGVkIFNBQTcxNDYgYmFzZWQgUENJIEFkYXB0ZXJzCi0jCi0jIENPTkZJR19UVFBDSV9FRVBST00gaXMgbm90IHNldAotIyBDT05GSUdfRFZCX0JVREdFVF9DT1JFIGlzIG5vdCBzZXQKLQotIwotIyBTdXBwb3J0ZWQgVVNCIEFkYXB0ZXJzCi0jCi0jIENPTkZJR19EVkJfVVNCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RWQl9UVFVTQl9CVURHRVQgaXMgbm90IHNldAotIyBDT05GSUdfRFZCX1RUVVNCX0RFQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVkJfQ0lORVJHWVQyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RWQl9TSUFOT19TTVMxWFhYIGlzIG5vdCBzZXQKLQotIwotIyBTdXBwb3J0ZWQgRmxleENvcElJIChCMkMyKSBBZGFwdGVycwotIwotIyBDT05GSUdfRFZCX0IyQzJfRkxFWENPUCBpcyBub3Qgc2V0Ci0KLSMKLSMgU3VwcG9ydGVkIEJUODc4IEFkYXB0ZXJzCi0jCi0KLSMKLSMgU3VwcG9ydGVkIFBsdXRvMiBBZGFwdGVycwotIwotIyBDT05GSUdfRFZCX1BMVVRPMiBpcyBub3Qgc2V0Ci0KLSMKLSMgU3VwcG9ydGVkIERWQiBGcm9udGVuZHMKLSMKLQotIwotIyBDdXN0b21pc2UgRFZCIEZyb250ZW5kcwotIwotIyBDT05GSUdfRFZCX0ZFX0NVU1RPTUlTRSBpcyBub3Qgc2V0Ci0KLSMKLSMgRFZCLVMgKHNhdGVsbGl0ZSkgZnJvbnRlbmRzCi0jCi0jIENPTkZJR19EVkJfQ1gyNDExMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVkJfQ1gyNDEyMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVkJfTVQzMTIgaXMgbm90IHNldAotIyBDT05GSUdfRFZCX1M1SDE0MjAgaXMgbm90IHNldAotIyBDT05GSUdfRFZCX1NUVjAyOTkgaXMgbm90IHNldAotIyBDT05GSUdfRFZCX1REQTgwODMgaXMgbm90IHNldAotIyBDT05GSUdfRFZCX1REQTEwMDg2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0RWQl9WRVMxWDkzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RWQl9UVU5FUl9JVEQxMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RWQl9UREE4MjZYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RWQl9UVUE2MTAwIGlzIG5vdCBzZXQKLQotIwotIyBEVkItVCAodGVycmVzdHJpYWwpIGZyb250ZW5kcwotIwotIyBDT05GSUdfRFZCX1NQODg3MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVkJfU1A4ODdYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RWQl9DWDIyNzAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RWQl9DWDIyNzAyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RWQl9EUlgzOTdYRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVkJfTDY0NzgxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RWQl9UREExMDA0WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVkJfTlhUNjAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVkJfTVQzNTIgaXMgbm90IHNldAotIyBDT05GSUdfRFZCX1pMMTAzNTMgaXMgbm90IHNldAotIyBDT05GSUdfRFZCX0RJQjMwMDBNQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVkJfRElCMzAwME1DIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RWQl9ESUI3MDAwTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVkJfRElCNzAwMFAgaXMgbm90IHNldAotIyBDT05GSUdfRFZCX1REQTEwMDQ4IGlzIG5vdCBzZXQKLQotIwotIyBEVkItQyAoY2FibGUpIGZyb250ZW5kcwotIwotIyBDT05GSUdfRFZCX1ZFUzE4MjAgaXMgbm90IHNldAotIyBDT05GSUdfRFZCX1REQTEwMDIxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RWQl9UREExMDAyMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVkJfU1RWMDI5NyBpcyBub3Qgc2V0Ci0KLSMKLSMgQVRTQyAoTm9ydGggQW1lcmljYW4vS29yZWFuIFRlcnJlc3RyaWFsL0NhYmxlIERUVikgZnJvbnRlbmRzCi0jCi0jIENPTkZJR19EVkJfTlhUMjAwWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVkJfT1I1MTIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVkJfT1I1MTEzMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVkJfQkNNMzUxMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVkJfTEdEVDMzMFggaXMgbm90IHNldAotIyBDT05GSUdfRFZCX1M1SDE0MDkgaXMgbm90IHNldAotIyBDT05GSUdfRFZCX0FVODUyMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVkJfUzVIMTQxMSBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlnaXRhbCB0ZXJyZXN0cmlhbCBvbmx5IHR1bmVycy9QTEwKLSMKLSMgQ09ORklHX0RWQl9QTEwgaXMgbm90IHNldAotIyBDT05GSUdfRFZCX1RVTkVSX0RJQjAwNzAgaXMgbm90IHNldAotCi0jCi0jIFNFQyBjb250cm9sIGRldmljZXMgZm9yIERWQi1TCi0jCi0jIENPTkZJR19EVkJfTE5CUDIxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RWQl9JU0w2NDA1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0RWQl9JU0w2NDIxIGlzIG5vdCBzZXQKLUNPTkZJR19EQUI9eQotIyBDT05GSUdfVVNCX0RBQlVTQiBpcyBub3Qgc2V0Ci0KLSMKLSMgR3JhcGhpY3Mgc3VwcG9ydAotIwotIyBDT05GSUdfQUdQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RSTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0Ci1DT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0w9eQotIyBDT05GSUdfRkIgaXMgbm90IHNldAotIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBEaXNwbGF5IGRldmljZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19ESVNQTEFZX1NVUFBPUlQgaXMgbm90IHNldAotCi0jCi0jIENvbnNvbGUgZGlzcGxheSBkcml2ZXIgc3VwcG9ydAotIwotQ09ORklHX1ZHQV9DT05TT0xFPXkKLSMgQ09ORklHX1ZHQUNPTl9TT0ZUX1NDUk9MTEJBQ0sgaXMgbm90IHNldAotQ09ORklHX0RVTU1ZX0NPTlNPTEU9eQotQ09ORklHX1NPVU5EPXkKLUNPTkZJR19TTkQ9eQotQ09ORklHX1NORF9USU1FUj15Ci1DT05GSUdfU05EX1BDTT15Ci0jIENPTkZJR19TTkRfU0VRVUVOQ0VSIGlzIG5vdCBzZXQKLUNPTkZJR19TTkRfT1NTRU1VTD15Ci1DT05GSUdfU05EX01JWEVSX09TUz15Ci1DT05GSUdfU05EX1BDTV9PU1M9eQotQ09ORklHX1NORF9QQ01fT1NTX1BMVUdJTlM9eQotIyBDT05GSUdfU05EX0RZTkFNSUNfTUlOT1JTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9TVVBQT1JUX09MRF9BUEkgaXMgbm90IHNldAotQ09ORklHX1NORF9WRVJCT1NFX1BST0NGUz15Ci0jIENPTkZJR19TTkRfVkVSQk9TRV9QUklOVEsgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19TTkRfVk1BU1RFUj15Ci1DT05GSUdfU05EX0FDOTdfQ09ERUM9eQotQ09ORklHX1NORF9EUklWRVJTPXkKLSMgQ09ORklHX1NORF9EVU1NWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfTVRQQVYgaXMgbm90IHNldAotIyBDT05GSUdfU05EX1NFUklBTF9VMTY1NTAgaXMgbm90IHNldAotIyBDT05GSUdfU05EX01QVTQwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfQUM5N19QT1dFUl9TQVZFIGlzIG5vdCBzZXQKLUNPTkZJR19TTkRfUENJPXkKLSMgQ09ORklHX1NORF9BRDE4ODkgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0FMUzMwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfQUxTNDAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfQUxJNTQ1MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfQVRJSVhQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9BVElJWFBfTU9ERU0gaXMgbm90IHNldAotIyBDT05GSUdfU05EX0FVODgxMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfQVU4ODIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9BVTg4MzAgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0FXMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfQVpUMzMyOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfQlQ4N1ggaXMgbm90IHNldAotIyBDT05GSUdfU05EX0NBMDEwNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfQ01JUENJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9PWFlHRU4gaXMgbm90IHNldAotIyBDT05GSUdfU05EX0NTNDI4MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfQ1M0NlhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9DUzU1MzAgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0RBUkxBMjAgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0dJTkEyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfTEFZTEEyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfREFSTEEyNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfR0lOQTI0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9MQVlMQTI0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9NT05BIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9NSUEgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0VDSE8zRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfSU5ESUdPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9JTkRJR09JTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfSU5ESUdPREogaXMgbm90IHNldAotIyBDT05GSUdfU05EX0VNVTEwSzEgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0VNVTEwSzFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9FTlMxMzcwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9FTlMxMzcxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9FUzE5MzggaXMgbm90IHNldAotIyBDT05GSUdfU05EX0VTMTk2OCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfRk04MDEgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0hEQV9JTlRFTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfSERTUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfSERTUE0gaXMgbm90IHNldAotIyBDT05GSUdfU05EX0hJRklFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfSUNFMTcxMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfSUNFMTcyNCBpcyBub3Qgc2V0Ci1DT05GSUdfU05EX0lOVEVMOFgwPXkKLSMgQ09ORklHX1NORF9JTlRFTDhYME0gaXMgbm90IHNldAotIyBDT05GSUdfU05EX0tPUkcxMjEyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9NQUVTVFJPMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfTUlYQVJUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9OTTI1NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfUENYSFIgaXMgbm90IHNldAotIyBDT05GSUdfU05EX1JJUFRJREUgaXMgbm90IHNldAotIyBDT05GSUdfU05EX1JNRTMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9STUU5NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfUk1FOTY1MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfU09OSUNWSUJFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfVFJJREVOVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfVklBODJYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfVklBODJYWF9NT0RFTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfVklSVFVPU08gaXMgbm90IHNldAotIyBDT05GSUdfU05EX1ZYMjIyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9ZTUZQQ0kgaXMgbm90IHNldAotQ09ORklHX1NORF9QUEM9eQotIyBDT05GSUdfU05EX1BPV0VSTUFDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9BT0EgaXMgbm90IHNldAotQ09ORklHX1NORF9VU0I9eQotIyBDT05GSUdfU05EX1VTQl9BVURJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfVVNCX1VTWDJZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9VU0JfQ0FJQVEgaXMgbm90IHNldAotIyBDT05GSUdfU05EX1NPQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TT1VORF9QUklNRSBpcyBub3Qgc2V0Ci1DT05GSUdfQUM5N19CVVM9eQotQ09ORklHX0hJRF9TVVBQT1JUPXkKLUNPTkZJR19ISUQ9eQotIyBDT05GSUdfSElEX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRFJBVyBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIElucHV0IERldmljZXMKLSMKLUNPTkZJR19VU0JfSElEPXkKLSMgQ09ORklHX1VTQl9ISURJTlBVVF9QT1dFUkJPT0sgaXMgbm90IHNldAotIyBDT05GSUdfSElEX0ZGIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9ISURERVYgaXMgbm90IHNldAotQ09ORklHX1VTQl9TVVBQT1JUPXkKLUNPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKLUNPTkZJR19VU0JfQVJDSF9IQVNfT0hDST15Ci1DT05GSUdfVVNCX0FSQ0hfSEFTX0VIQ0k9eQotQ09ORklHX1VTQj15Ci0jIENPTkZJR19VU0JfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0FOTk9VTkNFX05FV19ERVZJQ0VTIGlzIG5vdCBzZXQKLQotIwotIyBNaXNjZWxsYW5lb3VzIFVTQiBvcHRpb25zCi0jCi1DT05GSUdfVVNCX0RFVklDRUZTPXkKLUNPTkZJR19VU0JfREVWSUNFX0NMQVNTPXkKLSMgQ09ORklHX1VTQl9EWU5BTUlDX01JTk9SUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfT1RHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9PVEdfV0hJVEVMSVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9PVEdfQkxBQ0tMSVNUX0hVQiBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX01PTj15Ci0KLSMKLSMgVVNCIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCi0jCi0jIENPTkZJR19VU0JfQzY3WDAwX0hDRCBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX0VIQ0lfSENEPXkKLSMgQ09ORklHX1VTQl9FSENJX1JPT1RfSFVCX1RUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9FSENJX1RUX05FV1NDSEVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9FSENJX0ZTTCBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX0VIQ0lfSENEX1BQQ19PRj15Ci0jIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0lTUDE3NjBfSENEIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfT0hDSV9IQ0Q9eQotQ09ORklHX1VTQl9PSENJX0hDRF9QUENfT0Y9eQotQ09ORklHX1VTQl9PSENJX0hDRF9QUENfT0ZfQkU9eQotQ09ORklHX1VTQl9PSENJX0hDRF9QUENfT0ZfTEU9eQotQ09ORklHX1VTQl9PSENJX0hDRF9QQ0k9eQotQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fREVTQz15Ci1DT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9NTUlPPXkKLUNPTkZJR19VU0JfT0hDSV9MSVRUTEVfRU5ESUFOPXkKLSMgQ09ORklHX1VTQl9VSENJX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0w4MTFfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9SOEE2NjU5N19IQ0QgaXMgbm90IHNldAotCi0jCi0jIFVTQiBEZXZpY2UgQ2xhc3MgZHJpdmVycwotIwotIyBDT05GSUdfVVNCX0FDTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUFJJTlRFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfV0RNIGlzIG5vdCBzZXQKLQotIwotIyBOT1RFOiBVU0JfU1RPUkFHRSBlbmFibGVzIFNDU0ksIGFuZCAnU0NTSSBkaXNrIHN1cHBvcnQnCi0jCi0KLSMKLSMgbWF5IGFsc28gYmUgbmVlZGVkOyBzZWUgVVNCX1NUT1JBR0UgSGVscCBmb3IgbW9yZSBpbmZvcm1hdGlvbgotIwotQ09ORklHX1VTQl9TVE9SQUdFPXkKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0RBVEFGQUIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfRlJFRUNPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9JU0QyMDAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfRFBDTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9VU0JBVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9TRERSMDkgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjU1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0pVTVBTSE9UIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0FMQVVEQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9PTkVUT1VDSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9LQVJNQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9TSUVSUkEgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfQ1lQUkVTU19BVEFDQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTElCVVNVQUwgaXMgbm90IHNldAotCi0jCi0jIFVTQiBJbWFnaW5nIGRldmljZXMKLSMKLSMgQ09ORklHX1VTQl9NREM4MDAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX01JQ1JPVEVLIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgcG9ydCBkcml2ZXJzCi0jCi0jIENPTkZJR19VU0JfU0VSSUFMIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgTWlzY2VsbGFuZW91cyBkcml2ZXJzCi0jCi0jIENPTkZJR19VU0JfRU1JNjIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0VNSTI2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9BRFVUVVggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1JJTzUwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTEVHT1RPV0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0JFUlJZX0NIQVJHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTEVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9DWVBSRVNTX0NZN0M2MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQ1lUSEVSTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUEhJREdFVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSURNT1VTRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfRlRESV9FTEFOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9BUFBMRURJU1BMQVkgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NJU1VTQlZHQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTEQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1RSQU5DRVZJQlJBVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JT1dBUlJJT1IgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1RFU1QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0lTSUdIVEZXIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAotIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKLSMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FDQ0VTU0lCSUxJVFkgaXMgbm90IHNldAotIyBDT05GSUdfSU5GSU5JQkFORCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FREFDIGlzIG5vdCBzZXQKLUNPTkZJR19SVENfTElCPXkKLUNPTkZJR19SVENfQ0xBU1M9eQotQ09ORklHX1JUQ19IQ1RPU1lTPXkKLUNPTkZJR19SVENfSENUT1NZU19ERVZJQ0U9InJ0YzAiCi0jIENPTkZJR19SVENfREVCVUcgaXMgbm90IHNldAotCi0jCi0jIFJUQyBpbnRlcmZhY2VzCi0jCi1DT05GSUdfUlRDX0lOVEZfU1lTRlM9eQotQ09ORklHX1JUQ19JTlRGX1BST0M9eQotQ09ORklHX1JUQ19JTlRGX0RFVj15Ci0jIENPTkZJR19SVENfSU5URl9ERVZfVUlFX0VNVUwgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9URVNUIGlzIG5vdCBzZXQKLQotIwotIyBJMkMgUlRDIGRyaXZlcnMKLSMKLSMgQ09ORklHX1JUQ19EUlZfRFMxMzA3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRFMxMzc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRFMxNjcyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfTUFYNjkwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1JTNUMzNzIgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9JU0wxMjA4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfWDEyMDUgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTYzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfUENGODU4MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX000MVQ4MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1MzNTM5MEEgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9GTTMxMzAgaXMgbm90IHNldAotCi0jCi0jIFNQSSBSVEMgZHJpdmVycwotIwotCi0jCi0jIFBsYXRmb3JtIFJUQyBkcml2ZXJzCi0jCi1DT05GSUdfUlRDX0RSVl9DTU9TPXkKLSMgQ09ORklHX1JUQ19EUlZfRFMxNTExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRFMxNTUzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRFMxNzQyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfU1RLMTdUQTggaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9NNDhUODYgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9NNDhUNTkgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9WMzAyMCBpcyBub3Qgc2V0Ci0KLSMKLSMgb24tQ1BVIFJUQyBkcml2ZXJzCi0jCi0jIENPTkZJR19SVENfRFJWX1BQQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VJTyBpcyBub3Qgc2V0Ci0KLSMKLSMgRmlsZSBzeXN0ZW1zCi0jCi1DT05GSUdfRVhUMl9GUz15Ci0jIENPTkZJR19FWFQyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDJfRlNfWElQIGlzIG5vdCBzZXQKLUNPTkZJR19FWFQzX0ZTPXkKLUNPTkZJR19FWFQzX0ZTX1hBVFRSPXkKLSMgQ09ORklHX0VYVDNfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDNfRlNfU0VDVVJJVFkgaXMgbm90IHNldAotIyBDT05GSUdfRVhUNERFVl9GUyBpcyBub3Qgc2V0Ci1DT05GSUdfSkJEPXkKLUNPTkZJR19GU19NQkNBQ0hFPXkKLSMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAotIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19ETk9USUZZPXkKLUNPTkZJR19JTk9USUZZPXkKLUNPTkZJR19JTk9USUZZX1VTRVI9eQotIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAotIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVVE9GUzRfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcwotIwotQ09ORklHX0lTTzk2NjBfRlM9bQotQ09ORklHX0pPTElFVD15Ci1DT05GSUdfWklTT0ZTPXkKLUNPTkZJR19VREZfRlM9bQotQ09ORklHX1VERl9OTFM9eQotCi0jCi0jIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKLSMKLUNPTkZJR19GQVRfRlM9eQotQ09ORklHX01TRE9TX0ZTPW0KLUNPTkZJR19WRkFUX0ZTPXkKLUNPTkZJR19GQVRfREVGQVVMVF9DT0RFUEFHRT00MzcKLUNPTkZJR19GQVRfREVGQVVMVF9JT0NIQVJTRVQ9Imlzbzg4NTktMSIKLUNPTkZJR19OVEZTX0ZTPXkKLSMgQ09ORklHX05URlNfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfTlRGU19SVyBpcyBub3Qgc2V0Ci0KLSMKLSMgUHNldWRvIGZpbGVzeXN0ZW1zCi0jCi1DT05GSUdfUFJPQ19GUz15Ci1DT05GSUdfUFJPQ19LQ09SRT15Ci1DT05GSUdfUFJPQ19TWVNDVEw9eQotQ09ORklHX1NZU0ZTPXkKLUNPTkZJR19UTVBGUz15Ci0jIENPTkZJR19UTVBGU19QT1NJWF9BQ0wgaXMgbm90IHNldAotIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBNaXNjZWxsYW5lb3VzIGZpbGVzeXN0ZW1zCi0jCi1DT05GSUdfQURGU19GUz1tCi0jIENPTkZJR19BREZTX0ZTX1JXIGlzIG5vdCBzZXQKLUNPTkZJR19BRkZTX0ZTPW0KLUNPTkZJR19IRlNfRlM9bQotQ09ORklHX0hGU1BMVVNfRlM9bQotQ09ORklHX0JFRlNfRlM9bQotIyBDT05GSUdfQkVGU19ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfQkZTX0ZTPW0KLUNPTkZJR19FRlNfRlM9bQotQ09ORklHX0NSQU1GUz15Ci1DT05GSUdfVlhGU19GUz1tCi0jIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19PTUZTX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19IUEZTX0ZTPW0KLUNPTkZJR19RTlg0RlNfRlM9bQotIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAotQ09ORklHX1NZU1ZfRlM9bQotQ09ORklHX1VGU19GUz1tCi0jIENPTkZJR19VRlNfRlNfV1JJVEUgaXMgbm90IHNldAotIyBDT05GSUdfVUZTX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKLUNPTkZJR19ORlNfRlM9eQotQ09ORklHX05GU19WMz15Ci0jIENPTkZJR19ORlNfVjNfQUNMIGlzIG5vdCBzZXQKLUNPTkZJR19ORlNfVjQ9eQotQ09ORklHX1JPT1RfTkZTPXkKLUNPTkZJR19ORlNEPXkKLSMgQ09ORklHX05GU0RfVjMgaXMgbm90IHNldAotIyBDT05GSUdfTkZTRF9WNCBpcyBub3Qgc2V0Ci1DT05GSUdfTE9DS0Q9eQotQ09ORklHX0xPQ0tEX1Y0PXkKLUNPTkZJR19FWFBPUlRGUz15Ci1DT05GSUdfTkZTX0NPTU1PTj15Ci1DT05GSUdfU1VOUlBDPXkKLUNPTkZJR19TVU5SUENfR1NTPXkKLUNPTkZJR19SUENTRUNfR1NTX0tSQjU9eQotIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTUJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAotCi0jCi0jIFBhcnRpdGlvbiBUeXBlcwotIwotQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRD15Ci0jIENPTkZJR19BQ09STl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfT1NGX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BTUlHQV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfQVRBUklfUEFSVElUSU9OIGlzIG5vdCBzZXQKLUNPTkZJR19NQUNfUEFSVElUSU9OPXkKLUNPTkZJR19NU0RPU19QQVJUSVRJT049eQotIyBDT05GSUdfQlNEX0RJU0tMQUJFTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSU5JWF9TVUJQQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfU09MQVJJU19YODZfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VOSVhXQVJFX0RJU0tMQUJFTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MRE1fUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NHSV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfVUxUUklYX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVU5fUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tBUk1BX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRklfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU1Y2OF9QQVJUSVRJT04gaXMgbm90IHNldAotQ09ORklHX05MUz15Ci1DT05GSUdfTkxTX0RFRkFVTFQ9Imlzbzg4NTktMSIKLSMgQ09ORklHX05MU19DT0RFUEFHRV80MzcgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzczNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfNzc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODU1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTcgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYxIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY5IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85MzYgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzk1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85NDkgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV84IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUxIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19BU0NJSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8xIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV80IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV83IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzkgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMTMgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMTQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMTUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0tPSThfUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfS09JOF9VIGlzIG5vdCBzZXQKLUNPTkZJR19OTFNfVVRGOD1tCi0jIENPTkZJR19ETE0gaXMgbm90IHNldAotCi0jCi0jIExpYnJhcnkgcm91dGluZXMKLSMKLUNPTkZJR19CSVRSRVZFUlNFPXkKLSMgQ09ORklHX0dFTkVSSUNfRklORF9GSVJTVF9CSVQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JDX0NDSVRUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKLUNPTkZJR19DUkNfVDEwRElGPXkKLUNPTkZJR19DUkNfSVRVX1Q9bQotQ09ORklHX0NSQzMyPXkKLSMgQ09ORklHX0NSQzcgaXMgbm90IHNldAotQ09ORklHX0xJQkNSQzMyQz1tCi1DT05GSUdfWkxJQl9JTkZMQVRFPXkKLUNPTkZJR19QTElTVD15Ci1DT05GSUdfSEFTX0lPTUVNPXkKLUNPTkZJR19IQVNfSU9QT1JUPXkKLUNPTkZJR19IQVNfRE1BPXkKLUNPTkZJR19IQVZFX0xNQj15Ci0KLSMKLSMgS2VybmVsIGhhY2tpbmcKLSMKLSMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKLUNPTkZJR19FTkFCTEVfV0FSTl9ERVBSRUNBVEVEPXkKLUNPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15Ci1DT05GSUdfRlJBTUVfV0FSTj0xMDI0Ci0jIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKLUNPTkZJR19ERUJVR19LRVJORUw9eQotIyBDT05GSUdfREVCVUdfU0hJUlEgaXMgbm90IHNldAotQ09ORklHX0RFVEVDVF9TT0ZUTE9DS1VQPXkKLSMgQ09ORklHX0JPT1RQQVJBTV9TT0ZUTE9DS1VQX1BBTklDIGlzIG5vdCBzZXQKLUNPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQ19WQUxVRT0wCi1DT05GSUdfU0NIRURfREVCVUc9eQotIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19USU1FUl9TVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19PQkpFQ1RTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMVUJfREVCVUdfT04gaXMgbm90IHNldAotIyBDT05GSUdfU0xVQl9TVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19NVVRFWEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0xPQ0tJTkdfQVBJX1NFTEZURVNUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0hJR0hNRU0gaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfQlVHVkVSQk9TRSBpcyBub3Qgc2V0Ci1DT05GSUdfREVCVUdfSU5GTz15Ci0jIENPTkZJR19ERUJVR19WTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19XUklURUNPVU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX01FTU9SWV9JTklUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAotIyBDT05GSUdfQk9PVF9QUklOVEtfREVMQVkgaXMgbm90IHNldAotIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKLUNPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSz15Ci1DT05GSUdfSEFWRV9GVFJBQ0U9eQotQ09ORklHX0hBVkVfRFlOQU1JQ19GVFJBQ0U9eQotIyBDT05GSUdfRlRSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDSEVEX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05URVhUX1NXSVRDSF9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9BUkNIX0tHREI9eQotIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TVEFDS09WRVJGTE9XIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1BBR0VBTExPQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT0RFX1BBVENISU5HX1NFTEZURVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZUUl9GSVhVUF9TRUxGVEVTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19YTU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lSUVNUQUNLUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRElfU1dJVENIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JPT1RYX1RFWFQgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0VBUkxZX0RFQlVHIGlzIG5vdCBzZXQKLQotIwotIyBTZWN1cml0eSBvcHRpb25zCi0jCi0jIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZX0ZJTEVfQ0FQQUJJTElUSUVTIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE89eQotCi0jCi0jIENyeXB0byBjb3JlIG9yIGhlbHBlcgotIwotQ09ORklHX0NSWVBUT19BTEdBUEk9eQotQ09ORklHX0NSWVBUT19CTEtDSVBIRVI9eQotQ09ORklHX0NSWVBUT19IQVNIPXkKLUNPTkZJR19DUllQVE9fTUFOQUdFUj15Ci0jIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX05VTEwgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NSWVBURCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQVVUSEVOQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVEVTVCBpcyBub3Qgc2V0Ci0KLSMKLSMgQXV0aGVudGljYXRlZCBFbmNyeXB0aW9uIHdpdGggQXNzb2NpYXRlZCBEYXRhCi0jCi0jIENPTkZJR19DUllQVE9fQ0NNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19HQ00gaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NFUUlWIGlzIG5vdCBzZXQKLQotIwotIyBCbG9jayBtb2RlcwotIwotQ09ORklHX0NSWVBUT19DQkM9eQotIyBDT05GSUdfQ1JZUFRPX0NUUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ1RTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19FQ0IgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0xSVyBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX1BDQkM9bQotIyBDT05GSUdfQ1JZUFRPX1hUUyBpcyBub3Qgc2V0Ci0KLSMKLSMgSGFzaCBtb2RlcwotIwotQ09ORklHX0NSWVBUT19ITUFDPXkKLSMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKLQotIwotIyBEaWdlc3QKLSMKLSMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX01ENT15Ci0jIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1JNRDEyOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fUk1EMTYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19STUQyNTYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1JNRDMyMCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX1NIQTE9bQotIyBDT05GSUdfQ1JZUFRPX1NIQTI1NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0hBNTEyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19UR1IxOTIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1dQNTEyIGlzIG5vdCBzZXQKLQotIwotIyBDaXBoZXJzCi0jCi0jIENPTkZJR19DUllQVE9fQUVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19BTlVCSVMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0FSQzQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0JMT1dGSVNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DQU1FTExJQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ0FTVDUgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NBU1Q2IGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fREVTPXkKLSMgQ09ORklHX0NSWVBUT19GQ1JZUFQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0tIQVpBRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0FMU0EyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0VFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0VSUEVOVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVEVBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19UV09GSVNIIGlzIG5vdCBzZXQKLQotIwotIyBDb21wcmVzc2lvbgotIwotIyBDT05GSUdfQ1JZUFRPX0RFRkxBVEUgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0xaTyBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX0hXPXkKLSMgQ09ORklHX0NSWVBUT19ERVZfSElGTl83OTVYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19ERVZfVEFMSVRPUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfQ0xPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfVklSVFVBTElaQVRJT04gaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbXBjODZ4eF9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9tcGM4Nnh4X2RlZmNvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZDRiZTgyMAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL21wYzg2eHhfZGVmY29uZmlnCkBAIC0wLDAgKzEsMTY0NiBAQAorIworIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI3LXJjNQorIyBUdWUgU2VwIDIzIDIzOjI4OjM4IDIwMDgKKyMKKyMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKKworIworIyBQcm9jZXNzb3Igc3VwcG9ydAorIworQ09ORklHXzZ4eD15CisjIENPTkZJR19QUENfODV4eCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfOHh4IGlzIG5vdCBzZXQKKyMgQ09ORklHXzQweCBpcyBub3Qgc2V0CisjIENPTkZJR180NHggaXMgbm90IHNldAorIyBDT05GSUdfRTIwMCBpcyBub3Qgc2V0CitDT05GSUdfUFBDX0ZQVT15CitDT05GSUdfQUxUSVZFQz15CitDT05GSUdfUFBDX1NURF9NTVU9eQorQ09ORklHX1BQQ19TVERfTU1VXzMyPXkKKyMgQ09ORklHX1BQQ19NTV9TTElDRVMgaXMgbm90IHNldAorQ09ORklHX1NNUD15CitDT05GSUdfTlJfQ1BVUz0yCitDT05GSUdfUFBDMzI9eQorQ09ORklHX1dPUkRfU0laRT0zMgorQ09ORklHX1BQQ19NRVJHRT15CitDT05GSUdfTU1VPXkKK0NPTkZJR19HRU5FUklDX0NNT1NfVVBEQVRFPXkKK0NPTkZJR19HRU5FUklDX1RJTUU9eQorQ09ORklHX0dFTkVSSUNfVElNRV9WU1lTQ0FMTD15CitDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CitDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CisjIENPTkZJR19IQVZFX1NFVFVQX1BFUl9DUFVfQVJFQSBpcyBub3Qgc2V0CitDT05GSUdfSVJRX1BFUl9DUFU9eQorQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CitDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQorQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15CitDT05GSUdfUldTRU1fWENIR0FERF9BTEdPUklUSE09eQorQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMj15CitDT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKK0NPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CitDT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUPXkKKyMgQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVMgaXMgbm90IHNldAorQ09ORklHX1BQQz15CitDT05GSUdfRUFSTFlfUFJJTlRLPXkKK0NPTkZJR19HRU5FUklDX05WUkFNPXkKK0NPTkZJR19TQ0hFRF9OT19OT19PTUlUX0ZSQU1FX1BPSU5URVI9eQorQ09ORklHX0FSQ0hfTUFZX0hBVkVfUENfRkRDPXkKK0NPTkZJR19QUENfT0Y9eQorQ09ORklHX09GPXkKK0NPTkZJR19QUENfVURCR18xNjU1MD15CitDT05GSUdfR0VORVJJQ19UQlNZTkM9eQorQ09ORklHX0FVRElUX0FSQ0g9eQorQ09ORklHX0dFTkVSSUNfQlVHPXkKK0NPTkZJR19ERUZBVUxUX1VJTUFHRT15CisjIENPTkZJR19QUENfRENSX05BVElWRSBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfRENSX01NSU8gaXMgbm90IHNldAorQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKKworIworIyBHZW5lcmFsIHNldHVwCisjCitDT05GSUdfRVhQRVJJTUVOVEFMPXkKK0NPTkZJR19MT0NLX0tFUk5FTD15CitDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCitDT05GSUdfTE9DQUxWRVJTSU9OPSIiCitDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQorQ09ORklHX1NXQVA9eQorQ09ORklHX1NZU1ZJUEM9eQorQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKK0NPTkZJR19QT1NJWF9NUVVFVUU9eQorQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1Q9eQorIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVF9WMyBpcyBub3Qgc2V0CisjIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAorQ09ORklHX0FVRElUPXkKKyMgQ09ORklHX0FVRElUU1lTQ0FMTCBpcyBub3Qgc2V0CitDT05GSUdfSUtDT05GSUc9eQorQ09ORklHX0lLQ09ORklHX1BST0M9eQorQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKKyMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAorQ09ORklHX0dST1VQX1NDSEVEPXkKKyMgQ09ORklHX0ZBSVJfR1JPVVBfU0NIRUQgaXMgbm90IHNldAorIyBDT05GSUdfUlRfR1JPVVBfU0NIRUQgaXMgbm90IHNldAorQ09ORklHX1VTRVJfU0NIRUQ9eQorIyBDT05GSUdfQ0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNGU19ERVBSRUNBVEVEPXkKK0NPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyPXkKKyMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX05BTUVTUEFDRVMgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKK0NPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCisjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0CitDT05GSUdfU1lTQ1RMPXkKK0NPTkZJR19FTUJFRERFRD15CitDT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQorQ09ORklHX0tBTExTWU1TPXkKK0NPTkZJR19LQUxMU1lNU19BTEw9eQorQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1M9eQorQ09ORklHX0hPVFBMVUc9eQorQ09ORklHX1BSSU5USz15CitDT05GSUdfQlVHPXkKK0NPTkZJR19FTEZfQ09SRT15CitDT05GSUdfQ09NUEFUX0JSSz15CitDT05GSUdfQkFTRV9GVUxMPXkKK0NPTkZJR19GVVRFWD15CitDT05GSUdfQU5PTl9JTk9ERVM9eQorQ09ORklHX0VQT0xMPXkKK0NPTkZJR19TSUdOQUxGRD15CitDT05GSUdfVElNRVJGRD15CitDT05GSUdfRVZFTlRGRD15CitDT05GSUdfU0hNRU09eQorQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKK0NPTkZJR19TTFVCX0RFQlVHPXkKKyMgQ09ORklHX1NMQUIgaXMgbm90IHNldAorQ09ORklHX1NMVUI9eQorIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAorIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9PUFJPRklMRT15CisjIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTPXkKK0NPTkZJR19IQVZFX0lPUkVNQVBfUFJPVD15CitDT05GSUdfSEFWRV9LUFJPQkVTPXkKK0NPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQorQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQorIyBDT05GSUdfSEFWRV9ETUFfQVRUUlMgaXMgbm90IHNldAorQ09ORklHX1VTRV9HRU5FUklDX1NNUF9IRUxQRVJTPXkKKyMgQ09ORklHX0hBVkVfQ0xLIGlzIG5vdCBzZXQKK0NPTkZJR19QUk9DX1BBR0VfTU9OSVRPUj15CisjIENPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UIGlzIG5vdCBzZXQKK0NPTkZJR19TTEFCSU5GTz15CitDT05GSUdfUlRfTVVURVhFUz15CisjIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKK0NPTkZJR19CQVNFX1NNQUxMPTAKK0NPTkZJR19NT0RVTEVTPXkKKyMgQ09ORklHX01PRFVMRV9GT1JDRV9MT0FEIGlzIG5vdCBzZXQKK0NPTkZJR19NT0RVTEVfVU5MT0FEPXkKK0NPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEPXkKK0NPTkZJR19NT0RWRVJTSU9OUz15CisjIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAorQ09ORklHX0tNT0Q9eQorQ09ORklHX1NUT1BfTUFDSElORT15CitDT05GSUdfQkxPQ0s9eQorQ09ORklHX0xCRD15CisjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xTRiBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0CisKKyMKKyMgSU8gU2NoZWR1bGVycworIworQ09ORklHX0lPU0NIRURfTk9PUD15CitDT05GSUdfSU9TQ0hFRF9BUz15CitDT05GSUdfSU9TQ0hFRF9ERUFETElORT15CitDT05GSUdfSU9TQ0hFRF9DRlE9eQorIyBDT05GSUdfREVGQVVMVF9BUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX0NGUT15CisjIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iY2ZxIgorQ09ORklHX0NMQVNTSUNfUkNVPXkKKyMgQ09ORklHX01QQzh4eHhfR1BJTyBpcyBub3Qgc2V0CisKKyMKKyMgUGxhdGZvcm0gc3VwcG9ydAorIworQ09ORklHX1BQQ19NVUxUSVBMQVRGT1JNPXkKK0NPTkZJR19DTEFTU0lDMzI9eQorIyBDT05GSUdfUFBDX0NIUlAgaXMgbm90IHNldAorIyBDT05GSUdfTVBDNTEyMV9BRFMgaXMgbm90IHNldAorIyBDT05GSUdfTVBDNTEyMV9HRU5FUklDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19NUEM1Mnh4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19QTUFDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19DRUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19DRUxMX05BVElWRSBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfODJ4eCBpcyBub3Qgc2V0CisjIENPTkZJR19QUTJBRFMgaXMgbm90IHNldAorIyBDT05GSUdfUFBDXzgzeHggaXMgbm90IHNldAorQ09ORklHX1BQQ184Nnh4PXkKK0NPTkZJR19NUEM4NjQxX0hQQ049eQorQ09ORklHX1NCQzg2NDFEPXkKK0NPTkZJR19NUEM4NjEwX0hQQ0Q9eQorQ09ORklHX0dFRl9TQkM2MTA9eQorQ09ORklHX01QQzg2NDE9eQorQ09ORklHX01QQzg2MTA9eQorIyBDT05GSUdfSVBJQyBpcyBub3Qgc2V0CitDT05GSUdfTVBJQz15CisjIENPTkZJR19NUElDX1dFSVJEIGlzIG5vdCBzZXQKK0NPTkZJR19QUENfSTgyNTk9eQorIyBDT05GSUdfUFBDX1JUQVMgaXMgbm90IHNldAorIyBDT05GSUdfTU1JT19OVlJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfTVBDMTA2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ185NzBfTkFQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19JTkRJUkVDVF9JTyBpcyBub3Qgc2V0CisjIENPTkZJR19HRU5FUklDX0lPTUFQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9GUkVRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RBVSBpcyBub3Qgc2V0CitDT05GSUdfRlNMX1VMSTE1NzU9eQorCisjCisjIEtlcm5lbCBvcHRpb25zCisjCitDT05GSUdfSElHSE1FTT15CitDT05GSUdfVElDS19PTkVTSE9UPXkKK0NPTkZJR19OT19IWj15CitDT05GSUdfSElHSF9SRVNfVElNRVJTPXkKK0NPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTX0JVSUxEPXkKKyMgQ09ORklHX0haXzEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19IWl8yNTAgaXMgbm90IHNldAorIyBDT05GSUdfSFpfMzAwIGlzIG5vdCBzZXQKK0NPTkZJR19IWl8xMDAwPXkKK0NPTkZJR19IWj0xMDAwCitDT05GSUdfU0NIRURfSFJUSUNLPXkKK0NPTkZJR19QUkVFTVBUX05PTkU9eQorIyBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlkgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0CitDT05GSUdfQklORk1UX0VMRj15CitDT05GSUdfQklORk1UX01JU0M9bQorIyBDT05GSUdfSU9NTVVfSEVMUEVSIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVRz15CitDT05GSUdfQVJDSF9IQVNfV0FMS19NRU1PUlk9eQorQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RSRU1PVkU9eQorIyBDT05GSUdfS0VYRUMgaXMgbm90IHNldAorIyBDT05GSUdfSVJRX0FMTF9DUFVTIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKK0NPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15CitDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CitDT05GSUdfRkxBVE1FTV9NQU5VQUw9eQorIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0CisjIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKK0NPTkZJR19GTEFUTUVNPXkKK0NPTkZJR19GTEFUX05PREVfTUVNX01BUD15CisjIENPTkZJR19TUEFSU0VNRU1fU1RBVElDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQQVJTRU1FTV9WTUVNTUFQX0VOQUJMRSBpcyBub3Qgc2V0CitDT05GSUdfUEFHRUZMQUdTX0VYVEVOREVEPXkKK0NPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00CitDT05GSUdfTUlHUkFUSU9OPXkKKyMgQ09ORklHX1JFU09VUkNFU182NEJJVCBpcyBub3Qgc2V0CitDT05GSUdfWk9ORV9ETUFfRkxBRz0xCitDT05GSUdfQk9VTkNFPXkKK0NPTkZJR19WSVJUX1RPX0JVUz15CitDT05GSUdfRk9SQ0VfTUFYX1pPTkVPUkRFUj0xMQorQ09ORklHX1BST0NfREVWSUNFVFJFRT15CisjIENPTkZJR19DTURMSU5FX0JPT0wgaXMgbm90IHNldAorQ09ORklHX0VYVFJBX1RBUkdFVFM9IiIKKyMgQ09ORklHX1BNIGlzIG5vdCBzZXQKK0NPTkZJR19TRUNDT01QPXkKK0NPTkZJR19JU0FfRE1BX0FQST15CisKKyMKKyMgQnVzIG9wdGlvbnMKKyMKK0NPTkZJR19aT05FX0RNQT15CitDT05GSUdfR0VORVJJQ19JU0FfRE1BPXkKK0NPTkZJR19QUENfSU5ESVJFQ1RfUENJPXkKK0NPTkZJR19GU0xfU09DPXkKK0NPTkZJR19GU0xfUENJPXkKK0NPTkZJR19QUENfUENJX0NIT0lDRT15CitDT05GSUdfUENJPXkKK0NPTkZJR19QQ0lfRE9NQUlOUz15CitDT05GSUdfUENJX1NZU0NBTEw9eQorIyBDT05GSUdfUENJRVBPUlRCVVMgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJPXkKKyMgQ09ORklHX1BDSV9NU0kgaXMgbm90IHNldAorQ09ORklHX1BDSV9MRUdBQ1k9eQorIyBDT05GSUdfUENJX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDQ0FSRCBpcyBub3Qgc2V0CisjIENPTkZJR19IT1RQTFVHX1BDSSBpcyBub3Qgc2V0CitDT05GSUdfSEFTX1JBUElESU89eQorIyBDT05GSUdfUkFQSURJTyBpcyBub3Qgc2V0CisKKyMKKyMgQWR2YW5jZWQgc2V0dXAKKyMKKyMgQ09ORklHX0FEVkFOQ0VEX09QVElPTlMgaXMgbm90IHNldAorCisjCisjIERlZmF1bHQgc2V0dGluZ3MgZm9yIGFkdmFuY2VkIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgdXNlZAorIworQ09ORklHX0xPV01FTV9TSVpFPTB4MzAwMDAwMDAKK0NPTkZJR19QQUdFX09GRlNFVD0weGMwMDAwMDAwCitDT05GSUdfS0VSTkVMX1NUQVJUPTB4YzAwMDAwMDAKK0NPTkZJR19QSFlTSUNBTF9TVEFSVD0weDAwMDAwMDAwCitDT05GSUdfVEFTS19TSVpFPTB4YzAwMDAwMDAKK0NPTkZJR19ORVQ9eQorCisjCisjIE5ldHdvcmtpbmcgb3B0aW9ucworIworQ09ORklHX1BBQ0tFVD15CisjIENPTkZJR19QQUNLRVRfTU1BUCBpcyBub3Qgc2V0CitDT05GSUdfVU5JWD15CitDT05GSUdfWEZSTT15CitDT05GSUdfWEZSTV9VU0VSPXkKKyMgQ09ORklHX1hGUk1fU1VCX1BPTElDWSBpcyBub3Qgc2V0CisjIENPTkZJR19YRlJNX01JR1JBVEUgaXMgbm90IHNldAorIyBDT05GSUdfWEZSTV9TVEFUSVNUSUNTIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRfS0VZPW0KKyMgQ09ORklHX05FVF9LRVlfTUlHUkFURSBpcyBub3Qgc2V0CitDT05GSUdfSU5FVD15CitDT05GSUdfSVBfTVVMVElDQVNUPXkKK0NPTkZJR19JUF9BRFZBTkNFRF9ST1VURVI9eQorQ09ORklHX0FTS19JUF9GSUJfSEFTSD15CisjIENPTkZJR19JUF9GSUJfVFJJRSBpcyBub3Qgc2V0CitDT05GSUdfSVBfRklCX0hBU0g9eQorQ09ORklHX0lQX01VTFRJUExFX1RBQkxFUz15CitDT05GSUdfSVBfUk9VVEVfTVVMVElQQVRIPXkKK0NPTkZJR19JUF9ST1VURV9WRVJCT1NFPXkKK0NPTkZJR19JUF9QTlA9eQorQ09ORklHX0lQX1BOUF9ESENQPXkKK0NPTkZJR19JUF9QTlBfQk9PVFA9eQorQ09ORklHX0lQX1BOUF9SQVJQPXkKK0NPTkZJR19ORVRfSVBJUD15CitDT05GSUdfTkVUX0lQR1JFPXkKK0NPTkZJR19ORVRfSVBHUkVfQlJPQURDQVNUPXkKK0NPTkZJR19JUF9NUk9VVEU9eQorQ09ORklHX0lQX1BJTVNNX1YxPXkKK0NPTkZJR19JUF9QSU1TTV9WMj15CitDT05GSUdfQVJQRD15CisjIENPTkZJR19TWU5fQ09PS0lFUyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAorQ09ORklHX0lORVRfVFVOTkVMPXkKKyMgQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0xSTyBpcyBub3Qgc2V0CitDT05GSUdfSU5FVF9ESUFHPXkKK0NPTkZJR19JTkVUX1RDUF9ESUFHPXkKKyMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKK0NPTkZJR19UQ1BfQ09OR19DVUJJQz15CitDT05GSUdfREVGQVVMVF9UQ1BfQ09ORz0iY3ViaWMiCisjIENPTkZJR19UQ1BfTUQ1U0lHIGlzIG5vdCBzZXQKK0NPTkZJR19JUFY2PXkKKyMgQ09ORklHX0lQVjZfUFJJVkFDWSBpcyBub3Qgc2V0CisjIENPTkZJR19JUFY2X1JPVVRFUl9QUkVGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQVjZfT1BUSU1JU1RJQ19EQUQgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVDZfQUggaXMgbm90IHNldAorIyBDT05GSUdfSU5FVDZfRVNQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVQ2X0lQQ09NUCBpcyBub3Qgc2V0CisjIENPTkZJR19JUFY2X01JUDYgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVDZfWEZSTV9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVDZfVFVOTkVMIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUNl9YRlJNX01PREVfVFJBTlNQT1JUPXkKK0NPTkZJR19JTkVUNl9YRlJNX01PREVfVFVOTkVMPXkKK0NPTkZJR19JTkVUNl9YRlJNX01PREVfQkVFVD15CisjIENPTkZJR19JTkVUNl9YRlJNX01PREVfUk9VVEVPUFRJTUlaQVRJT04gaXMgbm90IHNldAorQ09ORklHX0lQVjZfU0lUPXkKK0NPTkZJR19JUFY2X05ESVNDX05PREVUWVBFPXkKKyMgQ09ORklHX0lQVjZfVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQVjZfTVVMVElQTEVfVEFCTEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQVjZfTVJPVVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVFdPUktfU0VDTUFSSyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAorIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CitDT05GSUdfSVBfU0NUUD1tCisjIENPTkZJR19TQ1RQX0RCR19NU0cgaXMgbm90IHNldAorIyBDT05GSUdfU0NUUF9EQkdfT0JKQ05UIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDVFBfSE1BQ19OT05FIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDVFBfSE1BQ19TSEExIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1RQX0hNQUNfTUQ1PXkKKyMgQ09ORklHX1RJUEMgaXMgbm90IHNldAorIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CisjIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQWCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0CisjIENPTkZJR19YMjUgaXMgbm90IHNldAorIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0CisjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAorIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAorCisjCisjIE5ldHdvcmsgdGVzdGluZworIworIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0CisjIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0CisjIENPTkZJR19DQU4gaXMgbm90IHNldAorIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0CisjIENPTkZJR19CVCBpcyBub3Qgc2V0CisjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CitDT05GSUdfRklCX1JVTEVTPXkKKworIworIyBXaXJlbGVzcworIworIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQzgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lFRUU4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKKworIworIyBEZXZpY2UgRHJpdmVycworIworCisjCisjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKKyMKK0NPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCitDT05GSUdfU1RBTkRBTE9ORT15CitDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CitDT05GSUdfRldfTE9BREVSPXkKK0NPTkZJR19GSVJNV0FSRV9JTl9LRVJORUw9eQorQ09ORklHX0VYVFJBX0ZJUk1XQVJFPSIiCisjIENPTkZJR19ERUJVR19EUklWRVIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfREVWUkVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CisjIENPTkZJR19NVEQgaXMgbm90IHNldAorQ09ORklHX09GX0RFVklDRT15CitDT05GSUdfT0ZfSTJDPXkKKyMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVY9eQorIyBDT05GSUdfQkxLX0RFVl9GRCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfQ1BRX0RBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19DUFFfQ0lTU19EQSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0RBQzk2MCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1VNRU0gaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0xPT1A9eQorIyBDT05GSUdfQkxLX0RFVl9DUllQVE9MT09QIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX05CRD15CisjIENPTkZJR19CTEtfREVWX1NYOCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1VCIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX1JBTT15CitDT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKK0NPTkZJR19CTEtfREVWX1JBTV9TSVpFPTEzMTA3MgorIyBDT05GSUdfQkxLX0RFVl9YSVAgaXMgbm90IHNldAorIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9IRCBpcyBub3Qgc2V0CitDT05GSUdfTUlTQ19ERVZJQ0VTPXkKKyMgQ09ORklHX1BIQU5UT00gaXMgbm90IHNldAorIyBDT05GSUdfRUVQUk9NXzkzQ1g2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NHSV9JT0M0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJRk1fQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19FTkNMT1NVUkVfU0VSVklDRVMgaXMgbm90IHNldAorIyBDT05GSUdfSFBfSUxPIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0lERT15CisjIENPTkZJR19JREUgaXMgbm90IHNldAorCisjCisjIFNDU0kgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAorQ09ORklHX1NDU0k9eQorQ09ORklHX1NDU0lfRE1BPXkKKyMgQ09ORklHX1NDU0lfVEdUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTkVUTElOSyBpcyBub3Qgc2V0CitDT05GSUdfU0NTSV9QUk9DX0ZTPXkKKworIworIyBTQ1NJIHN1cHBvcnQgdHlwZSAoZGlzaywgdGFwZSwgQ0QtUk9NKQorIworQ09ORklHX0JMS19ERVZfU0Q9eQorQ09ORklHX0NIUl9ERVZfU1Q9eQorIyBDT05GSUdfQ0hSX0RFVl9PU1NUIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX1NSPXkKKyMgQ09ORklHX0JMS19ERVZfU1JfVkVORE9SIGlzIG5vdCBzZXQKK0NPTkZJR19DSFJfREVWX1NHPXkKKyMgQ09ORklHX0NIUl9ERVZfU0NIIGlzIG5vdCBzZXQKKworIworIyBTb21lIFNDU0kgZGV2aWNlcyAoZS5nLiBDRCBqdWtlYm94KSBzdXBwb3J0IG11bHRpcGxlIExVTnMKKyMKK0NPTkZJR19TQ1NJX01VTFRJX0xVTj15CisjIENPTkZJR19TQ1NJX0NPTlNUQU5UUyBpcyBub3Qgc2V0CitDT05GSUdfU0NTSV9MT0dHSU5HPXkKKyMgQ09ORklHX1NDU0lfU0NBTl9BU1lOQyBpcyBub3Qgc2V0CitDT05GSUdfU0NTSV9XQUlUX1NDQU49bQorCisjCisjIFNDU0kgVHJhbnNwb3J0cworIworIyBDT05GSUdfU0NTSV9TUElfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9GQ19BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0lTQ1NJX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU0FTX0xJQlNBUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NSUF9BVFRSUyBpcyBub3Qgc2V0CitDT05GSUdfU0NTSV9MT1dMRVZFTD15CisjIENPTkZJR19JU0NTSV9UQ1AgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl8zV19YWFhYX1JBSUQgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV8zV185WFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQUNBUkQgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BQUNSQUlEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQUlDN1hYWCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0FJQzdYWFhfT0xEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQUlDNzlYWCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0FJQzk0WFggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9EUFRfSTJPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQURWQU5TWVMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BUkNNU1IgaXMgbm90IHNldAorIyBDT05GSUdfTUVHQVJBSURfTkVXR0VOIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FR0FSQUlEX0xFR0FDWSBpcyBub3Qgc2V0CisjIENPTkZJR19NRUdBUkFJRF9TQVMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9IUFRJT1AgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9CVVNMT0dJQyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RNWDMxOTFEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfRUFUQSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0ZVVFVSRV9ET01BSU4gaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9HRFRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfSVBTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfSU5JVElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfSU5JQTEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX01WU0FTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU1RFWCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NZTTUzQzhYWF8yIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfSVBSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfUUxPR0lDXzEyODAgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9RTEFfRkMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9RTEFfSVNDU0kgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9MUEZDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfREMzOTV4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfREMzOTBUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTlNQMzIgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NSUCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RIIGlzIG5vdCBzZXQKK0NPTkZJR19BVEE9eQorIyBDT05GSUdfQVRBX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKK0NPTkZJR19TQVRBX1BNUD15CitDT05GSUdfU0FUQV9BSENJPXkKKyMgQ09ORklHX1NBVEFfU0lMMjQgaXMgbm90IHNldAorIyBDT05GSUdfU0FUQV9GU0wgaXMgbm90IHNldAorQ09ORklHX0FUQV9TRkY9eQorIyBDT05GSUdfU0FUQV9TVlcgaXMgbm90IHNldAorIyBDT05GSUdfQVRBX1BJSVggaXMgbm90IHNldAorIyBDT05GSUdfU0FUQV9NViBpcyBub3Qgc2V0CisjIENPTkZJR19TQVRBX05WIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BEQ19BRE1BIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBVEFfUVNUT1IgaXMgbm90IHNldAorIyBDT05GSUdfU0FUQV9QUk9NSVNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBVEFfU1g0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBVEFfU0lMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBVEFfU0lTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBVEFfVUxJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBVEFfVklBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBVEFfVklURVNTRSBpcyBub3Qgc2V0CisjIENPTkZJR19TQVRBX0lOSUMxNjJYIGlzIG5vdCBzZXQKK0NPTkZJR19QQVRBX0FMST15CisjIENPTkZJR19QQVRBX0FNRCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0FSVE9QIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfQVRJSVhQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfQ01ENjQwX1BDSSBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0NNRDY0WCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0NTNTUyMCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0NTNTUzMCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0NZUFJFU1MgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9FRkFSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQV9HRU5FUklDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfSFBUMzY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfSFBUMzdYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfSFBUM1gyTiBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0hQVDNYMyBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0lUODIxWCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0lUODIxMyBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0pNSUNST04gaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9UUklGTEVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfTUFSVkVMTCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX01QSUlYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfT0xEUElJWCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX05FVENFTEwgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9OSU5KQTMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfTlM4NzQxMCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX05TODc0MTUgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9PUFRJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfT1BUSURNQSBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1BEQ19PTEQgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9SQURJU1lTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfUloxMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfU0MxMjAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfU0VSVkVSV09SS1MgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9QREMyMDI3WCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1NJTDY4MCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1NJUyBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1ZJQSBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1dJTkJPTkQgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9QTEFURk9STSBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1NDSCBpcyBub3Qgc2V0CisjIENPTkZJR19NRCBpcyBub3Qgc2V0CisjIENPTkZJR19GVVNJT04gaXMgbm90IHNldAorCisjCisjIElFRUUgMTM5NCAoRmlyZVdpcmUpIHN1cHBvcnQKKyMKKworIworIyBFbmFibGUgb25seSBvbmUgb2YgdGhlIHR3byBzdGFja3MsIHVubGVzcyB5b3Uga25vdyB3aGF0IHlvdSBhcmUgZG9pbmcKKyMKKyMgQ09ORklHX0ZJUkVXSVJFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lFRUUxMzk0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyTyBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNJTlRPU0hfRFJJVkVSUyBpcyBub3Qgc2V0CitDT05GSUdfTkVUREVWSUNFUz15CitDT05GSUdfRFVNTVk9eQorIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNWTEFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0CisjIENPTkZJR19UVU4gaXMgbm90IHNldAorIyBDT05GSUdfVkVUSCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNORVQgaXMgbm90IHNldAorQ09ORklHX1BIWUxJQj15CisKKyMKKyMgTUlJIFBIWSBkZXZpY2UgZHJpdmVycworIworIyBDT05GSUdfTUFSVkVMTF9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfREFWSUNPTV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfUVNFTUlfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xYVF9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfQ0lDQURBX1BIWSBpcyBub3Qgc2V0CitDT05GSUdfVklURVNTRV9QSFk9eQorIyBDT05GSUdfU01TQ19QSFkgaXMgbm90IHNldAorIyBDT05GSUdfQlJPQURDT01fUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lDUExVU19QSFkgaXMgbm90IHNldAorIyBDT05GSUdfUkVBTFRFS19QSFkgaXMgbm90IHNldAorIyBDT05GSUdfRklYRURfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX01ESU9fQklUQkFORyBpcyBub3Qgc2V0CitDT05GSUdfTkVUX0VUSEVSTkVUPXkKK0NPTkZJR19NSUk9eQorIyBDT05GSUdfSEFQUFlNRUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NVTkdFTSBpcyBub3Qgc2V0CisjIENPTkZJR19DQVNTSU5JIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9WRU5ET1JfM0NPTSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfVFVMSVAgaXMgbm90IHNldAorIyBDT05GSUdfSFAxMDAgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1pNSUkgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1JHTUlJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19UQUggaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX0VNQUM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9QQ0kgaXMgbm90IHNldAorIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKK0NPTkZJR19ORVRERVZfMTAwMD15CisjIENPTkZJR19BQ0VOSUMgaXMgbm90IHNldAorIyBDT05GSUdfREwySyBpcyBub3Qgc2V0CisjIENPTkZJR19FMTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19FMTAwMEUgaXMgbm90IHNldAorIyBDT05GSUdfSVAxMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lHQiBpcyBub3Qgc2V0CisjIENPTkZJR19OUzgzODIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBTUFDSEkgaXMgbm90IHNldAorIyBDT05GSUdfWUVMTE9XRklOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1I4MTY5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NJUzE5MCBpcyBub3Qgc2V0CisjIENPTkZJR19TS0dFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NLWTIgaXMgbm90IHNldAorIyBDT05GSUdfVklBX1ZFTE9DSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJR09OMyBpcyBub3Qgc2V0CisjIENPTkZJR19CTlgyIGlzIG5vdCBzZXQKK0NPTkZJR19HSUFORkFSPXkKKyMgQ09ORklHX01WNjQzWFhfRVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FMQTNYWFggaXMgbm90IHNldAorIyBDT05GSUdfQVRMMSBpcyBub3Qgc2V0CisjIENPTkZJR19BVEwxRSBpcyBub3Qgc2V0CitDT05GSUdfTkVUREVWXzEwMDAwPXkKKyMgQ09ORklHX0NIRUxTSU9fVDEgaXMgbm90IHNldAorIyBDT05GSUdfQ0hFTFNJT19UMyBpcyBub3Qgc2V0CisjIENPTkZJR19JWEdCRSBpcyBub3Qgc2V0CisjIENPTkZJR19JWEdCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1MySU8gaXMgbm90IHNldAorIyBDT05GSUdfTVlSSTEwR0UgaXMgbm90IHNldAorIyBDT05GSUdfTkVUWEVOX05JQyBpcyBub3Qgc2V0CisjIENPTkZJR19OSVUgaXMgbm90IHNldAorIyBDT05GSUdfTUxYNF9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RFSFVUSSBpcyBub3Qgc2V0CisjIENPTkZJR19CTlgyWCBpcyBub3Qgc2V0CisjIENPTkZJR19TRkMgaXMgbm90IHNldAorIyBDT05GSUdfVFIgaXMgbm90IHNldAorCisjCisjIFdpcmVsZXNzIExBTgorIworIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lXTFdJRklfTEVEUyBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIE5ldHdvcmsgQWRhcHRlcnMKKyMKKyMgQ09ORklHX1VTQl9DQVRDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9LQVdFVEggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1BFR0FTVVMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1JUTDgxNTAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1VTQk5FVCBpcyBub3Qgc2V0CisjIENPTkZJR19XQU4gaXMgbm90IHNldAorIyBDT05GSUdfRkRESSBpcyBub3Qgc2V0CisjIENPTkZJR19ISVBQSSBpcyBub3Qgc2V0CisjIENPTkZJR19QUFAgaXMgbm90IHNldAorIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfRkMgaXMgbm90IHNldAorIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAorIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0CisjIENPTkZJR19QSE9ORSBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKKyMKK0NPTkZJR19JTlBVVD15CisjIENPTkZJR19JTlBVVF9GRl9NRU1MRVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1BPTExERVYgaXMgbm90IHNldAorCisjCisjIFVzZXJsYW5kIGludGVyZmFjZXMKKyMKKyMgQ09ORklHX0lOUFVUX01PVVNFREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9FVkRFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgRGV2aWNlIERyaXZlcnMKKyMKKyMgQ09ORklHX0lOUFVUX0tFWUJPQVJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX01PVVNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1RBQkxFVCBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9NSVNDIGlzIG5vdCBzZXQKKworIworIyBIYXJkd2FyZSBJL08gcG9ydHMKKyMKK0NPTkZJR19TRVJJTz15CitDT05GSUdfU0VSSU9fSTgwNDI9eQorQ09ORklHX1NFUklPX1NFUlBPUlQ9eQorIyBDT05GSUdfU0VSSU9fUENJUFMyIGlzIG5vdCBzZXQKK0NPTkZJR19TRVJJT19MSUJQUzI9eQorIyBDT05GSUdfU0VSSU9fUkFXIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFUklPX1hJTElOWF9YUFNfUFMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKKworIworIyBDaGFyYWN0ZXIgZGV2aWNlcworIworQ09ORklHX1ZUPXkKK0NPTkZJR19DT05TT0xFX1RSQU5TTEFUSU9OUz15CitDT05GSUdfVlRfQ09OU09MRT15CitDT05GSUdfSFdfQ09OU09MRT15CisjIENPTkZJR19WVF9IV19DT05TT0xFX0JJTkRJTkcgaXMgbm90IHNldAorQ09ORklHX0RFVktNRU09eQorIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX05PWk9NSSBpcyBub3Qgc2V0CisKKyMKKyMgU2VyaWFsIGRyaXZlcnMKKyMKK0NPTkZJR19TRVJJQUxfODI1MD15CitDT05GSUdfU0VSSUFMXzgyNTBfQ09OU09MRT15CitDT05GSUdfU0VSSUFMXzgyNTBfUENJPXkKK0NPTkZJR19TRVJJQUxfODI1MF9OUl9VQVJUUz0yCitDT05GSUdfU0VSSUFMXzgyNTBfUlVOVElNRV9VQVJUUz0yCitDT05GSUdfU0VSSUFMXzgyNTBfRVhURU5ERUQ9eQorQ09ORklHX1NFUklBTF84MjUwX01BTllfUE9SVFM9eQorQ09ORklHX1NFUklBTF84MjUwX1NIQVJFX0lSUT15CitDT05GSUdfU0VSSUFMXzgyNTBfREVURUNUX0lSUT15CitDT05GSUdfU0VSSUFMXzgyNTBfUlNBPXkKKworIworIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0CisjCisjIENPTkZJR19TRVJJQUxfVUFSVExJVEUgaXMgbm90IHNldAorQ09ORklHX1NFUklBTF9DT1JFPXkKK0NPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKKyMgQ09ORklHX1NFUklBTF9KU00gaXMgbm90IHNldAorIyBDT05GSUdfU0VSSUFMX09GX1BMQVRGT1JNIGlzIG5vdCBzZXQKK0NPTkZJR19VTklYOThfUFRZUz15CitDT05GSUdfTEVHQUNZX1BUWVM9eQorQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MjU2CisjIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAorIyBDT05GSUdfSFdfUkFORE9NIGlzIG5vdCBzZXQKK0NPTkZJR19OVlJBTT15CisjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CisjIENPTkZJR19BUFBMSUNPTSBpcyBub3Qgc2V0CisjIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAorQ09ORklHX0RFVlBPUlQ9eQorQ09ORklHX0kyQz15CitDT05GSUdfSTJDX0JPQVJESU5GTz15CisjIENPTkZJR19JMkNfQ0hBUkRFViBpcyBub3Qgc2V0CitDT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKKworIworIyBJMkMgSGFyZHdhcmUgQnVzIHN1cHBvcnQKKyMKKworIworIyBQQyBTTUJ1cyBob3N0IGNvbnRyb2xsZXIgZHJpdmVycworIworIyBDT05GSUdfSTJDX0FMSTE1MzUgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0FMSTE1NjMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0FMSTE1WDMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0FNRDc1NiBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfQU1EODExMSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfSTgwMSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfSVNDSCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfUElJWDQgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX05GT1JDRTIgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NJUzU1OTUgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NJUzYzMCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU0lTOTZYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19WSUEgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1ZJQVBSTyBpcyBub3Qgc2V0CisKKyMKKyMgSTJDIHN5c3RlbSBidXMgZHJpdmVycyAobW9zdGx5IGVtYmVkZGVkIC8gc3lzdGVtLW9uLWNoaXApCisjCitDT05GSUdfSTJDX01QQz15CisjIENPTkZJR19JMkNfT0NPUkVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TSU1URUMgaXMgbm90IHNldAorCisjCisjIEV4dGVybmFsIEkyQy9TTUJ1cyBhZGFwdGVyIGRyaXZlcnMKKyMKKyMgQ09ORklHX0kyQ19QQVJQT1JUX0xJR0hUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19UQU9TX0VWTSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfVElOWV9VU0IgaXMgbm90IHNldAorCisjCisjIEdyYXBoaWNzIGFkYXB0ZXIgSTJDL0REQyBjaGFubmVsIGRyaXZlcnMKKyMKKyMgQ09ORklHX0kyQ19WT09ET08zIGlzIG5vdCBzZXQKKworIworIyBPdGhlciBJMkMvU01CdXMgYnVzIGRyaXZlcnMKKyMKKyMgQ09ORklHX0kyQ19QQ0FfUExBVEZPUk0gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NUVUIgaXMgbm90IHNldAorCisjCisjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAorIworIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUMjQgaXMgbm90IHNldAorQ09ORklHX1NFTlNPUlNfRUVQUk9NPXkKKyMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0Y4NTc1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDRjg1OTEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19NQVg2ODc1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQlVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19DSElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQSSBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9XQU5UX09QVElPTkFMX0dQSU9MSUI9eQorIyBDT05GSUdfR1BJT0xJQiBpcyBub3Qgc2V0CisjIENPTkZJR19XMSBpcyBub3Qgc2V0CisjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAorIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAorIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0CisjIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKKworIworIyBTb25pY3MgU2lsaWNvbiBCYWNrcGxhbmUKKyMKK0NPTkZJR19TU0JfUE9TU0lCTEU9eQorIyBDT05GSUdfU1NCIGlzIG5vdCBzZXQKKworIworIyBNdWx0aWZ1bmN0aW9uIGRldmljZSBkcml2ZXJzCisjCisjIENPTkZJR19NRkRfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAorIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CisKKyMKKyMgTXVsdGltZWRpYSBkZXZpY2VzCisjCisKKyMKKyMgTXVsdGltZWRpYSBjb3JlIHN1cHBvcnQKKyMKKyMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0CitDT05GSUdfRFZCX0NPUkU9bQorQ09ORklHX1ZJREVPX01FRElBPW0KKworIworIyBNdWx0aW1lZGlhIGRyaXZlcnMKKyMKKyMgQ09ORklHX01FRElBX0FUVEFDSCBpcyBub3Qgc2V0CitDT05GSUdfTUVESUFfVFVORVI9bQorIyBDT05GSUdfTUVESUFfVFVORVJfQ1VTVE9NSVpFIGlzIG5vdCBzZXQKK0NPTkZJR19NRURJQV9UVU5FUl9TSU1QTEU9bQorQ09ORklHX01FRElBX1RVTkVSX1REQTgyOTA9bQorQ09ORklHX01FRElBX1RVTkVSX1REQTk4ODc9bQorQ09ORklHX01FRElBX1RVTkVSX1RFQTU3NjE9bQorQ09ORklHX01FRElBX1RVTkVSX1RFQTU3Njc9bQorQ09ORklHX01FRElBX1RVTkVSX01UMjBYWD1tCitDT05GSUdfTUVESUFfVFVORVJfWEMyMDI4PW0KK0NPTkZJR19NRURJQV9UVU5FUl9YQzUwMDA9bQorQ09ORklHX0RWQl9DQVBUVVJFX0RSSVZFUlM9eQorCisjCisjIFN1cHBvcnRlZCBTQUE3MTQ2IGJhc2VkIFBDSSBBZGFwdGVycworIworIyBDT05GSUdfVFRQQ0lfRUVQUk9NIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RWQl9CVURHRVRfQ09SRSBpcyBub3Qgc2V0CisKKyMKKyMgU3VwcG9ydGVkIFVTQiBBZGFwdGVycworIworIyBDT05GSUdfRFZCX1VTQiBpcyBub3Qgc2V0CisjIENPTkZJR19EVkJfVFRVU0JfQlVER0VUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RWQl9UVFVTQl9ERUMgaXMgbm90IHNldAorIyBDT05GSUdfRFZCX0NJTkVSR1lUMiBpcyBub3Qgc2V0CisjIENPTkZJR19EVkJfU0lBTk9fU01TMVhYWCBpcyBub3Qgc2V0CisKKyMKKyMgU3VwcG9ydGVkIEZsZXhDb3BJSSAoQjJDMikgQWRhcHRlcnMKKyMKKyMgQ09ORklHX0RWQl9CMkMyX0ZMRVhDT1AgaXMgbm90IHNldAorCisjCisjIFN1cHBvcnRlZCBCVDg3OCBBZGFwdGVycworIworCisjCisjIFN1cHBvcnRlZCBQbHV0bzIgQWRhcHRlcnMKKyMKKyMgQ09ORklHX0RWQl9QTFVUTzIgaXMgbm90IHNldAorCisjCisjIFN1cHBvcnRlZCBEVkIgRnJvbnRlbmRzCisjCisKKyMKKyMgQ3VzdG9taXNlIERWQiBGcm9udGVuZHMKKyMKKyMgQ09ORklHX0RWQl9GRV9DVVNUT01JU0UgaXMgbm90IHNldAorCisjCisjIERWQi1TIChzYXRlbGxpdGUpIGZyb250ZW5kcworIworIyBDT05GSUdfRFZCX0NYMjQxMTAgaXMgbm90IHNldAorIyBDT05GSUdfRFZCX0NYMjQxMjMgaXMgbm90IHNldAorIyBDT05GSUdfRFZCX01UMzEyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RWQl9TNUgxNDIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RWQl9TVFYwMjk5IGlzIG5vdCBzZXQKKyMgQ09ORklHX0RWQl9UREE4MDgzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RWQl9UREExMDA4NiBpcyBub3Qgc2V0CisjIENPTkZJR19EVkJfVkVTMVg5MyBpcyBub3Qgc2V0CisjIENPTkZJR19EVkJfVFVORVJfSVREMTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19EVkJfVERBODI2WCBpcyBub3Qgc2V0CisjIENPTkZJR19EVkJfVFVBNjEwMCBpcyBub3Qgc2V0CisKKyMKKyMgRFZCLVQgKHRlcnJlc3RyaWFsKSBmcm9udGVuZHMKKyMKKyMgQ09ORklHX0RWQl9TUDg4NzAgaXMgbm90IHNldAorIyBDT05GSUdfRFZCX1NQODg3WCBpcyBub3Qgc2V0CisjIENPTkZJR19EVkJfQ1gyMjcwMCBpcyBub3Qgc2V0CisjIENPTkZJR19EVkJfQ1gyMjcwMiBpcyBub3Qgc2V0CisjIENPTkZJR19EVkJfRFJYMzk3WEQgaXMgbm90IHNldAorIyBDT05GSUdfRFZCX0w2NDc4MSBpcyBub3Qgc2V0CisjIENPTkZJR19EVkJfVERBMTAwNFggaXMgbm90IHNldAorIyBDT05GSUdfRFZCX05YVDYwMDAgaXMgbm90IHNldAorIyBDT05GSUdfRFZCX01UMzUyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RWQl9aTDEwMzUzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RWQl9ESUIzMDAwTUIgaXMgbm90IHNldAorIyBDT05GSUdfRFZCX0RJQjMwMDBNQyBpcyBub3Qgc2V0CisjIENPTkZJR19EVkJfRElCNzAwME0gaXMgbm90IHNldAorIyBDT05GSUdfRFZCX0RJQjcwMDBQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RWQl9UREExMDA0OCBpcyBub3Qgc2V0CisKKyMKKyMgRFZCLUMgKGNhYmxlKSBmcm9udGVuZHMKKyMKKyMgQ09ORklHX0RWQl9WRVMxODIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RWQl9UREExMDAyMSBpcyBub3Qgc2V0CisjIENPTkZJR19EVkJfVERBMTAwMjMgaXMgbm90IHNldAorIyBDT05GSUdfRFZCX1NUVjAyOTcgaXMgbm90IHNldAorCisjCisjIEFUU0MgKE5vcnRoIEFtZXJpY2FuL0tvcmVhbiBUZXJyZXN0cmlhbC9DYWJsZSBEVFYpIGZyb250ZW5kcworIworIyBDT05GSUdfRFZCX05YVDIwMFggaXMgbm90IHNldAorIyBDT05GSUdfRFZCX09SNTEyMTEgaXMgbm90IHNldAorIyBDT05GSUdfRFZCX09SNTExMzIgaXMgbm90IHNldAorIyBDT05GSUdfRFZCX0JDTTM1MTAgaXMgbm90IHNldAorIyBDT05GSUdfRFZCX0xHRFQzMzBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RWQl9TNUgxNDA5IGlzIG5vdCBzZXQKKyMgQ09ORklHX0RWQl9BVTg1MjIgaXMgbm90IHNldAorIyBDT05GSUdfRFZCX1M1SDE0MTEgaXMgbm90IHNldAorCisjCisjIERpZ2l0YWwgdGVycmVzdHJpYWwgb25seSB0dW5lcnMvUExMCisjCisjIENPTkZJR19EVkJfUExMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RWQl9UVU5FUl9ESUIwMDcwIGlzIG5vdCBzZXQKKworIworIyBTRUMgY29udHJvbCBkZXZpY2VzIGZvciBEVkItUworIworIyBDT05GSUdfRFZCX0xOQlAyMSBpcyBub3Qgc2V0CisjIENPTkZJR19EVkJfSVNMNjQwNSBpcyBub3Qgc2V0CisjIENPTkZJR19EVkJfSVNMNjQyMSBpcyBub3Qgc2V0CitDT05GSUdfREFCPXkKKyMgQ09ORklHX1VTQl9EQUJVU0IgaXMgbm90IHNldAorCisjCisjIEdyYXBoaWNzIHN1cHBvcnQKKyMKKyMgQ09ORklHX0FHUCBpcyBub3Qgc2V0CisjIENPTkZJR19EUk0gaXMgbm90IHNldAorIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAorQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MPXkKKyMgQ09ORklHX0ZCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfRElTUExBWV9TVVBQT1JUIGlzIG5vdCBzZXQKKworIworIyBDb25zb2xlIGRpc3BsYXkgZHJpdmVyIHN1cHBvcnQKKyMKK0NPTkZJR19WR0FfQ09OU09MRT15CisjIENPTkZJR19WR0FDT05fU09GVF9TQ1JPTExCQUNLIGlzIG5vdCBzZXQKK0NPTkZJR19EVU1NWV9DT05TT0xFPXkKK0NPTkZJR19TT1VORD15CitDT05GSUdfU05EPXkKK0NPTkZJR19TTkRfVElNRVI9eQorQ09ORklHX1NORF9QQ009eQorIyBDT05GSUdfU05EX1NFUVVFTkNFUiBpcyBub3Qgc2V0CitDT05GSUdfU05EX09TU0VNVUw9eQorQ09ORklHX1NORF9NSVhFUl9PU1M9eQorQ09ORklHX1NORF9QQ01fT1NTPXkKK0NPTkZJR19TTkRfUENNX09TU19QTFVHSU5TPXkKKyMgQ09ORklHX1NORF9EWU5BTUlDX01JTk9SUyBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfU1VQUE9SVF9PTERfQVBJIGlzIG5vdCBzZXQKK0NPTkZJR19TTkRfVkVSQk9TRV9QUk9DRlM9eQorIyBDT05GSUdfU05EX1ZFUkJPU0VfUFJJTlRLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfU05EX1ZNQVNURVI9eQorQ09ORklHX1NORF9BQzk3X0NPREVDPXkKK0NPTkZJR19TTkRfRFJJVkVSUz15CisjIENPTkZJR19TTkRfRFVNTVkgaXMgbm90IHNldAorIyBDT05GSUdfU05EX01UUEFWIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9TRVJJQUxfVTE2NTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9NUFU0MDEgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0FDOTdfUE9XRVJfU0FWRSBpcyBub3Qgc2V0CitDT05GSUdfU05EX1BDST15CisjIENPTkZJR19TTkRfQUQxODg5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9BTFMzMDAgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0FMUzQwMDAgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0FMSTU0NTEgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0FUSUlYUCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfQVRJSVhQX01PREVNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9BVTg4MTAgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0FVODgyMCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfQVU4ODMwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9BVzIgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0FaVDMzMjggaXMgbm90IHNldAorIyBDT05GSUdfU05EX0JUODdYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9DQTAxMDYgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0NNSVBDSSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfT1hZR0VOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9DUzQyODEgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0NTNDZYWCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfQ1M1NTMwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9EQVJMQTIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9HSU5BMjAgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0xBWUxBMjAgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0RBUkxBMjQgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0dJTkEyNCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfTEFZTEEyNCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfTU9OQSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfTUlBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9FQ0hPM0cgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0lORElHTyBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfSU5ESUdPSU8gaXMgbm90IHNldAorIyBDT05GSUdfU05EX0lORElHT0RKIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9FTVUxMEsxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9FTVUxMEsxWCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfRU5TMTM3MCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfRU5TMTM3MSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfRVMxOTM4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9FUzE5NjggaXMgbm90IHNldAorIyBDT05GSUdfU05EX0ZNODAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9IREFfSU5URUwgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0hEU1AgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0hEU1BNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9ISUZJRVIgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0lDRTE3MTIgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0lDRTE3MjQgaXMgbm90IHNldAorQ09ORklHX1NORF9JTlRFTDhYMD15CisjIENPTkZJR19TTkRfSU5URUw4WDBNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9LT1JHMTIxMiBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfTUFFU1RSTzMgaXMgbm90IHNldAorIyBDT05GSUdfU05EX01JWEFSVCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfTk0yNTYgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1BDWEhSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9SSVBUSURFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9STUUzMiBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfUk1FOTYgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1JNRTk2NTIgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1NPTklDVklCRVMgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1RSSURFTlQgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1ZJQTgyWFggaXMgbm90IHNldAorIyBDT05GSUdfU05EX1ZJQTgyWFhfTU9ERU0gaXMgbm90IHNldAorIyBDT05GSUdfU05EX1ZJUlRVT1NPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9WWDIyMiBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfWU1GUENJIGlzIG5vdCBzZXQKK0NPTkZJR19TTkRfUFBDPXkKK0NPTkZJR19TTkRfVVNCPXkKKyMgQ09ORklHX1NORF9VU0JfQVVESU8gaXMgbm90IHNldAorIyBDT05GSUdfU05EX1VTQl9VU1gyWSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfVVNCX0NBSUFRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9TT0MgaXMgbm90IHNldAorIyBDT05GSUdfU09VTkRfUFJJTUUgaXMgbm90IHNldAorQ09ORklHX0FDOTdfQlVTPXkKK0NPTkZJR19ISURfU1VQUE9SVD15CitDT05GSUdfSElEPXkKKyMgQ09ORklHX0hJRF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19ISURSQVcgaXMgbm90IHNldAorCisjCisjIFVTQiBJbnB1dCBEZXZpY2VzCisjCitDT05GSUdfVVNCX0hJRD15CisjIENPTkZJR19VU0JfSElESU5QVVRfUE9XRVJCT09LIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9GRiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSElEREVWIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfU1VQUE9SVD15CitDT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15CitDT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0k9eQorQ09ORklHX1VTQl9BUkNIX0hBU19FSENJPXkKK0NPTkZJR19VU0I9eQorIyBDT05GSUdfVVNCX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BTk5PVU5DRV9ORVdfREVWSUNFUyBpcyBub3Qgc2V0CisKKyMKKyMgTWlzY2VsbGFuZW91cyBVU0Igb3B0aW9ucworIworQ09ORklHX1VTQl9ERVZJQ0VGUz15CitDT05GSUdfVVNCX0RFVklDRV9DTEFTUz15CisjIENPTkZJR19VU0JfRFlOQU1JQ19NSU5PUlMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09URyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1RHX1dISVRFTElTVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1RHX0JMQUNLTElTVF9IVUIgaXMgbm90IHNldAorQ09ORklHX1VTQl9NT049eQorCisjCisjIFVTQiBIb3N0IENvbnRyb2xsZXIgRHJpdmVycworIworIyBDT05GSUdfVVNCX0M2N1gwMF9IQ0QgaXMgbm90IHNldAorQ09ORklHX1VTQl9FSENJX0hDRD15CisjIENPTkZJR19VU0JfRUhDSV9ST09UX0hVQl9UVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRUhDSV9UVF9ORVdTQ0hFRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRUhDSV9GU0wgaXMgbm90IHNldAorQ09ORklHX1VTQl9FSENJX0hDRF9QUENfT0Y9eQorIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU1AxNzYwX0hDRCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX09IQ0lfSENEPXkKK0NPTkZJR19VU0JfT0hDSV9IQ0RfUFBDX09GPXkKK0NPTkZJR19VU0JfT0hDSV9IQ0RfUFBDX09GX0JFPXkKK0NPTkZJR19VU0JfT0hDSV9IQ0RfUFBDX09GX0xFPXkKK0NPTkZJR19VU0JfT0hDSV9IQ0RfUENJPXkKK0NPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX0RFU0M9eQorQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fTU1JTz15CitDT05GSUdfVVNCX09IQ0lfTElUVExFX0VORElBTj15CisjIENPTkZJR19VU0JfVUhDSV9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NMODExX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUjhBNjY1OTdfSENEIGlzIG5vdCBzZXQKKworIworIyBVU0IgRGV2aWNlIENsYXNzIGRyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9BQ00gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1BSSU5URVIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1dETSBpcyBub3Qgc2V0CisKKyMKKyMgTk9URTogVVNCX1NUT1JBR0UgZW5hYmxlcyBTQ1NJLCBhbmQgJ1NDU0kgZGlzayBzdXBwb3J0JworIworCisjCisjIG1heSBhbHNvIGJlIG5lZWRlZDsgc2VlIFVTQl9TVE9SQUdFIEhlbHAgZm9yIG1vcmUgaW5mb3JtYXRpb24KKyMKK0NPTkZJR19VU0JfU1RPUkFHRT15CisjIENPTkZJR19VU0JfU1RPUkFHRV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9EQVRBRkFCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0ZSRUVDT00gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfSVNEMjAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0RQQ00gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfVVNCQVQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjA5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX1NERFI1NSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9KVU1QU0hPVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9BTEFVREEgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfT05FVE9VQ0ggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfS0FSTUEgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfU0lFUlJBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0NZUFJFU1NfQVRBQ0IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xJQlVTVUFMIGlzIG5vdCBzZXQKKworIworIyBVU0IgSW1hZ2luZyBkZXZpY2VzCisjCisjIENPTkZJR19VU0JfTURDODAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9NSUNST1RFSyBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIHBvcnQgZHJpdmVycworIworIyBDT05GSUdfVVNCX1NFUklBTCBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIE1pc2NlbGxhbmVvdXMgZHJpdmVycworIworIyBDT05GSUdfVVNCX0VNSTYyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9FTUkyNiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQURVVFVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9SSU81MDAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xFR09UT1dFUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9CRVJSWV9DSEFSR0UgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xFRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQ1lQUkVTU19DWTdDNjMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0NZVEhFUk0gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1BISURHRVQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lETU9VU0UgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0ZURElfRUxBTiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQVBQTEVESVNQTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TSVNVU0JWR0EgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9UUkFOQ0VWSUJSQVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSU9XQVJSSU9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU0lHSFRGVyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NQyBpcyBub3Qgc2V0CisjIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0CisjIENPTkZJR19BQ0NFU1NJQklMSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORklOSUJBTkQgaXMgbm90IHNldAorIyBDT05GSUdfRURBQyBpcyBub3Qgc2V0CitDT05GSUdfUlRDX0xJQj15CitDT05GSUdfUlRDX0NMQVNTPXkKK0NPTkZJR19SVENfSENUT1NZUz15CitDT05GSUdfUlRDX0hDVE9TWVNfREVWSUNFPSJydGMwIgorIyBDT05GSUdfUlRDX0RFQlVHIGlzIG5vdCBzZXQKKworIworIyBSVEMgaW50ZXJmYWNlcworIworQ09ORklHX1JUQ19JTlRGX1NZU0ZTPXkKK0NPTkZJR19SVENfSU5URl9QUk9DPXkKK0NPTkZJR19SVENfSU5URl9ERVY9eQorIyBDT05GSUdfUlRDX0lOVEZfREVWX1VJRV9FTVVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfVEVTVCBpcyBub3Qgc2V0CisKKyMKKyMgSTJDIFJUQyBkcml2ZXJzCisjCisjIENPTkZJR19SVENfRFJWX0RTMTMwNyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTM3NCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTY3MiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX01BWDY5MDAgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SUzVDMzcyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfSVNMMTIwOCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1gxMjA1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUENGODU2MyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1BDRjg1ODMgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDFUODAgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9TMzUzOTBBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRk0zMTMwIGlzIG5vdCBzZXQKKworIworIyBTUEkgUlRDIGRyaXZlcnMKKyMKKworIworIyBQbGF0Zm9ybSBSVEMgZHJpdmVycworIworQ09ORklHX1JUQ19EUlZfQ01PUz15CisjIENPTkZJR19SVENfRFJWX0RTMTUxMSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTU1MyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTc0MiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1NUSzE3VEE4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQ4VDg2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQ4VDU5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfVjMwMjAgaXMgbm90IHNldAorCisjCisjIG9uLUNQVSBSVEMgZHJpdmVycworIworIyBDT05GSUdfUlRDX0RSVl9QUEMgaXMgbm90IHNldAorIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19VSU8gaXMgbm90IHNldAorCisjCisjIEZpbGUgc3lzdGVtcworIworQ09ORklHX0VYVDJfRlM9eQorIyBDT05GSUdfRVhUMl9GU19YQVRUUiBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0CitDT05GSUdfRVhUM19GUz15CitDT05GSUdfRVhUM19GU19YQVRUUj15CisjIENPTkZJR19FWFQzX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQzX0ZTX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDRERVZfRlMgaXMgbm90IHNldAorQ09ORklHX0pCRD15CitDT05GSUdfRlNfTUJDQUNIRT15CisjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CitDT05GSUdfRE5PVElGWT15CitDT05GSUdfSU5PVElGWT15CitDT05GSUdfSU5PVElGWV9VU0VSPXkKKyMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAorCisjCisjIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKKyMKK0NPTkZJR19JU085NjYwX0ZTPW0KK0NPTkZJR19KT0xJRVQ9eQorQ09ORklHX1pJU09GUz15CitDT05GSUdfVURGX0ZTPW0KK0NPTkZJR19VREZfTkxTPXkKKworIworIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCisjCitDT05GSUdfRkFUX0ZTPXkKK0NPTkZJR19NU0RPU19GUz1tCitDT05GSUdfVkZBVF9GUz15CitDT05GSUdfRkFUX0RFRkFVTFRfQ09ERVBBR0U9NDM3CitDT05GSUdfRkFUX0RFRkFVTFRfSU9DSEFSU0VUPSJpc284ODU5LTEiCitDT05GSUdfTlRGU19GUz15CisjIENPTkZJR19OVEZTX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX05URlNfUlcgaXMgbm90IHNldAorCisjCisjIFBzZXVkbyBmaWxlc3lzdGVtcworIworQ09ORklHX1BST0NfRlM9eQorQ09ORklHX1BST0NfS0NPUkU9eQorQ09ORklHX1BST0NfU1lTQ1RMPXkKK0NPTkZJR19TWVNGUz15CitDT05GSUdfVE1QRlM9eQorIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0CisjIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgTWlzY2VsbGFuZW91cyBmaWxlc3lzdGVtcworIworQ09ORklHX0FERlNfRlM9bQorIyBDT05GSUdfQURGU19GU19SVyBpcyBub3Qgc2V0CitDT05GSUdfQUZGU19GUz1tCitDT05GSUdfSEZTX0ZTPW0KK0NPTkZJR19IRlNQTFVTX0ZTPW0KK0NPTkZJR19CRUZTX0ZTPW0KKyMgQ09ORklHX0JFRlNfREVCVUcgaXMgbm90IHNldAorQ09ORklHX0JGU19GUz1tCitDT05GSUdfRUZTX0ZTPW0KK0NPTkZJR19DUkFNRlM9eQorQ09ORklHX1ZYRlNfRlM9bQorIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAorIyBDT05GSUdfT01GU19GUyBpcyBub3Qgc2V0CitDT05GSUdfSFBGU19GUz1tCitDT05GSUdfUU5YNEZTX0ZTPW0KKyMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNWX0ZTPW0KK0NPTkZJR19VRlNfRlM9bQorIyBDT05GSUdfVUZTX0ZTX1dSSVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VGU19ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CitDT05GSUdfTkZTX0ZTPXkKK0NPTkZJR19ORlNfVjM9eQorIyBDT05GSUdfTkZTX1YzX0FDTCBpcyBub3Qgc2V0CitDT05GSUdfTkZTX1Y0PXkKK0NPTkZJR19ST09UX05GUz15CitDT05GSUdfTkZTRD15CisjIENPTkZJR19ORlNEX1YzIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GU0RfVjQgaXMgbm90IHNldAorQ09ORklHX0xPQ0tEPXkKK0NPTkZJR19MT0NLRF9WND15CitDT05GSUdfRVhQT1JURlM9eQorQ09ORklHX05GU19DT01NT049eQorQ09ORklHX1NVTlJQQz15CitDT05GSUdfU1VOUlBDX0dTUz15CitDT05GSUdfUlBDU0VDX0dTU19LUkI1PXkKKyMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAorIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NJRlMgaXMgbm90IHNldAorIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBQYXJ0aXRpb24gVHlwZXMKKyMKK0NPTkZJR19QQVJUSVRJT05fQURWQU5DRUQ9eQorIyBDT05GSUdfQUNPUk5fUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX09TRl9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfQU1JR0FfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQVJJX1BBUlRJVElPTiBpcyBub3Qgc2V0CitDT05GSUdfTUFDX1BBUlRJVElPTj15CitDT05GSUdfTVNET1NfUEFSVElUSU9OPXkKKyMgQ09ORklHX0JTRF9ESVNLTEFCRUwgaXMgbm90IHNldAorIyBDT05GSUdfTUlOSVhfU1VCUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NPTEFSSVNfWDg2X1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19VTklYV0FSRV9ESVNLTEFCRUwgaXMgbm90IHNldAorIyBDT05GSUdfTERNX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19TR0lfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VMVFJJWF9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfU1VOX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19LQVJNQV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfRUZJX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNWNjhfUEFSVElUSU9OIGlzIG5vdCBzZXQKK0NPTkZJR19OTFM9eQorQ09ORklHX05MU19ERUZBVUxUPSJpc284ODU5LTEiCisjIENPTkZJR19OTFNfQ09ERVBBR0VfNDM3IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV83MzcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzc3NSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODU3IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYyIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjMgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjYgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2OSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTM2IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85NTAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzMiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTQ5IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NzQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfOCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQVNDSUkgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8yIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzMgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV81IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzYgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV85IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzEzIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzE0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzE1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19LT0k4X1IgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0tPSThfVSBpcyBub3Qgc2V0CitDT05GSUdfTkxTX1VURjg9bQorIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKKworIworIyBMaWJyYXJ5IHJvdXRpbmVzCisjCitDT05GSUdfQklUUkVWRVJTRT15CisjIENPTkZJR19HRU5FUklDX0ZJTkRfRklSU1RfQklUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQ19DQ0lUVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0CitDT05GSUdfQ1JDX1QxMERJRj15CitDT05GSUdfQ1JDX0lUVV9UPW0KK0NPTkZJR19DUkMzMj15CisjIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKK0NPTkZJR19MSUJDUkMzMkM9bQorQ09ORklHX1pMSUJfSU5GTEFURT15CitDT05GSUdfUExJU1Q9eQorQ09ORklHX0hBU19JT01FTT15CitDT05GSUdfSEFTX0lPUE9SVD15CitDT05GSUdfSEFTX0RNQT15CitDT05GSUdfSEFWRV9MTUI9eQorCisjCisjIEtlcm5lbCBoYWNraW5nCisjCisjIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0CitDT05GSUdfRU5BQkxFX1dBUk5fREVQUkVDQVRFRD15CitDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQorQ09ORklHX0ZSQU1FX1dBUk49MTAyNAorIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAorIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfS0VSTkVMPXkKKyMgQ09ORklHX0RFQlVHX1NISVJRIGlzIG5vdCBzZXQKK0NPTkZJR19ERVRFQ1RfU09GVExPQ0tVUD15CisjIENPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQyBpcyBub3Qgc2V0CitDT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUNfVkFMVUU9MAorQ09ORklHX1NDSEVEX0RFQlVHPXkKKyMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfVElNRVJfU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfT0JKRUNUUyBpcyBub3Qgc2V0CisjIENPTkZJR19TTFVCX0RFQlVHX09OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMVUJfU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfUlRfTVVURVhFUyBpcyBub3Qgc2V0CisjIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTVVURVhFUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19MT0NLSU5HX0FQSV9TRUxGVEVTVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19ISUdITUVNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0UgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0lORk89eQorIyBDT05GSUdfREVCVUdfVk0gaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfV1JJVEVDT1VOVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19NRU1PUllfSU5JVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPT1RfUFJJTlRLX0RFTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAorIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CitDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0s9eQorQ09ORklHX0hBVkVfRlRSQUNFPXkKK0NPTkZJR19IQVZFX0RZTkFNSUNfRlRSQUNFPXkKKyMgQ09ORklHX0ZUUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ0hFRF9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfQ09OVEVYVF9TV0lUQ0hfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKKyMgQ09ORklHX0tHREIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU1RBQ0tPVkVSRkxPVyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TVEFDS19VU0FHRSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19QQUdFQUxMT0MgaXMgbm90IHNldAorIyBDT05GSUdfQ09ERV9QQVRDSElOR19TRUxGVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19GVFJfRklYVVBfU0VMRlRFU1QgaXMgbm90IHNldAorIyBDT05GSUdfTVNJX0JJVE1BUF9TRUxGVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19YTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lSUVNUQUNLUyBpcyBub3Qgc2V0CisjIENPTkZJR19CRElfU1dJVENIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPT1RYX1RFWFQgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0VBUkxZX0RFQlVHIGlzIG5vdCBzZXQKKworIworIyBTZWN1cml0eSBvcHRpb25zCisjCisjIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZX0ZJTEVfQ0FQQUJJTElUSUVTIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE89eQorCisjCisjIENyeXB0byBjb3JlIG9yIGhlbHBlcgorIworQ09ORklHX0NSWVBUT19BTEdBUEk9eQorQ09ORklHX0NSWVBUT19CTEtDSVBIRVI9eQorQ09ORklHX0NSWVBUT19IQVNIPXkKK0NPTkZJR19DUllQVE9fTUFOQUdFUj15CisjIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX05VTEwgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NSWVBURCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQVVUSEVOQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVEVTVCBpcyBub3Qgc2V0CisKKyMKKyMgQXV0aGVudGljYXRlZCBFbmNyeXB0aW9uIHdpdGggQXNzb2NpYXRlZCBEYXRhCisjCisjIENPTkZJR19DUllQVE9fQ0NNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HQ00gaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NFUUlWIGlzIG5vdCBzZXQKKworIworIyBCbG9jayBtb2RlcworIworQ09ORklHX0NSWVBUT19DQkM9eQorIyBDT05GSUdfQ1JZUFRPX0NUUiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ1RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19FQ0IgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0xSVyBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX1BDQkM9bQorIyBDT05GSUdfQ1JZUFRPX1hUUyBpcyBub3Qgc2V0CisKKyMKKyMgSGFzaCBtb2RlcworIworQ09ORklHX0NSWVBUT19ITUFDPXkKKyMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKKworIworIyBEaWdlc3QKKyMKKyMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX01ENT15CisjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDEyOCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMTYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQyNTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDMyMCBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX1NIQTE9bQorIyBDT05GSUdfQ1JZUFRPX1NIQTI1NiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0hBNTEyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19UR1IxOTIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1dQNTEyIGlzIG5vdCBzZXQKKworIworIyBDaXBoZXJzCisjCisjIENPTkZJR19DUllQVE9fQUVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19BTlVCSVMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FSQzQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0JMT1dGSVNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQU1FTExJQSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0FTVDUgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NBU1Q2IGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fREVTPXkKKyMgQ09ORklHX0NSWVBUT19GQ1JZUFQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0tIQVpBRCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0FMU0EyMCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0VFRCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0VSUEVOVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVEVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19UV09GSVNIIGlzIG5vdCBzZXQKKworIworIyBDb21wcmVzc2lvbgorIworIyBDT05GSUdfQ1JZUFRPX0RFRkxBVEUgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0xaTyBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0hXPXkKKyMgQ09ORklHX0NSWVBUT19ERVZfSElGTl83OTVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19ERVZfVEFMSVRPUyBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfQ0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfVklSVFVBTElaQVRJT04gaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcHEyZmFkc19kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9wcTJmYWRzX2RlZmNvbmZpZwppbmRleCBiMzkwYjc0Li43ZTE3ODYyIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy9wcTJmYWRzX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9wcTJmYWRzX2RlZmNvbmZpZwpAQCAtMTUyLDExICsxNTIsMTEgQEAKICMKIENPTkZJR19QUENfTVVMVElQTEFURk9STT15CiBDT05GSUdfQ0xBU1NJQzMyPXkKLUNPTkZJR19QUENfQ0hSUD15CisjIENPTkZJR19QUENfQ0hSUCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfUE1BQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NUEM1MTIxX0FEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NUEM1MTIxX0dFTkVSSUMgaXMgbm90IHNldAogIyBDT05GSUdfUFBDX01QQzUyeHggaXMgbm90IHNldAotQ09ORklHX1BQQ19QTUFDPXkKICMgQ09ORklHX1BQQ19DRUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19DRUxMX05BVElWRSBpcyBub3Qgc2V0CiBDT05GSUdfUFBDXzgyeHg9eQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3Mvc2JjODY0MWRfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3Mvc2JjODY0MWRfZGVmY29uZmlnCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNTQ1NDIxLi4wMDAwMDAwCi0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzL3NiYzg2NDFkX2RlZmNvbmZpZworKysgL2Rldi9udWxsCkBAIC0xLDE0ODEgKzAsMCBAQAotIwotIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI3LXJjNAotIyBUaHUgQXVnIDIxIDAwOjUyOjE1IDIwMDgKLSMKLSMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKLQotIwotIyBQcm9jZXNzb3Igc3VwcG9ydAotIwotQ09ORklHXzZ4eD15Ci0jIENPTkZJR19QUENfODV4eCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfOHh4IGlzIG5vdCBzZXQKLSMgQ09ORklHXzQweCBpcyBub3Qgc2V0Ci0jIENPTkZJR180NHggaXMgbm90IHNldAotIyBDT05GSUdfRTIwMCBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDX0ZQVT15Ci1DT05GSUdfQUxUSVZFQz15Ci1DT05GSUdfUFBDX1NURF9NTVU9eQotQ09ORklHX1BQQ19TVERfTU1VXzMyPXkKLSMgQ09ORklHX1BQQ19NTV9TTElDRVMgaXMgbm90IHNldAotQ09ORklHX1NNUD15Ci1DT05GSUdfTlJfQ1BVUz0yCi1DT05GSUdfUFBDMzI9eQotQ09ORklHX1dPUkRfU0laRT0zMgotQ09ORklHX1BQQ19NRVJHRT15Ci1DT05GSUdfTU1VPXkKLUNPTkZJR19HRU5FUklDX0NNT1NfVVBEQVRFPXkKLUNPTkZJR19HRU5FUklDX1RJTUU9eQotQ09ORklHX0dFTkVSSUNfVElNRV9WU1lTQ0FMTD15Ci1DT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15Ci1DT05GSUdfR0VORVJJQ19IQVJESVJRUz15Ci0jIENPTkZJR19IQVZFX1NFVFVQX1BFUl9DUFVfQVJFQSBpcyBub3Qgc2V0Ci1DT05GSUdfSVJRX1BFUl9DUFU9eQotQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15Ci1DT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQotQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15Ci1DT05GSUdfUldTRU1fWENIR0FERF9BTEdPUklUSE09eQotQ09ORklHX0dFTkVSSUNfTE9DS0JSRUFLPXkKLUNPTkZJR19BUkNIX0hBU19JTE9HMl9VMzI9eQotQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15Ci1DT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQotQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVD15Ci0jIENPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTIGlzIG5vdCBzZXQKLUNPTkZJR19QUEM9eQotQ09ORklHX0VBUkxZX1BSSU5USz15Ci1DT05GSUdfR0VORVJJQ19OVlJBTT15Ci1DT05GSUdfU0NIRURfTk9fTk9fT01JVF9GUkFNRV9QT0lOVEVSPXkKLUNPTkZJR19BUkNIX01BWV9IQVZFX1BDX0ZEQz15Ci1DT05GSUdfUFBDX09GPXkKLUNPTkZJR19PRj15Ci1DT05GSUdfUFBDX1VEQkdfMTY1NTA9eQotQ09ORklHX0dFTkVSSUNfVEJTWU5DPXkKLUNPTkZJR19BVURJVF9BUkNIPXkKLUNPTkZJR19HRU5FUklDX0JVRz15Ci1DT05GSUdfREVGQVVMVF9VSU1BR0U9eQotIyBDT05GSUdfUFBDX0RDUl9OQVRJVkUgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0RDUl9NTUlPIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCi0KLSMKLSMgR2VuZXJhbCBzZXR1cAotIwotQ09ORklHX0VYUEVSSU1FTlRBTD15Ci1DT05GSUdfTE9DS19LRVJORUw9eQotQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgotQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgotQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKLUNPTkZJR19TV0FQPXkKLUNPTkZJR19TWVNWSVBDPXkKLUNPTkZJR19TWVNWSVBDX1NZU0NUTD15Ci1DT05GSUdfUE9TSVhfTVFVRVVFPXkKLUNPTkZJR19CU0RfUFJPQ0VTU19BQ0NUPXkKLUNPTkZJR19CU0RfUFJPQ0VTU19BQ0NUX1YzPXkKLSMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVURJVCBpcyBub3Qgc2V0Ci1DT05GSUdfSUtDT05GSUc9eQotQ09ORklHX0lLQ09ORklHX1BST0M9eQotQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKLSMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAotQ09ORklHX0dST1VQX1NDSEVEPXkKLUNPTkZJR19GQUlSX0dST1VQX1NDSEVEPXkKLSMgQ09ORklHX1JUX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKLUNPTkZJR19VU0VSX1NDSEVEPXkKLSMgQ09ORklHX0NHUk9VUF9TQ0hFRCBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTRlNfREVQUkVDQVRFRD15Ci1DT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMj15Ci1DT05GSUdfUkVMQVk9eQotIyBDT05GSUdfTkFNRVNQQUNFUyBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVl9JTklUUkQ9eQotQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKLSMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKLUNPTkZJR19TWVNDVEw9eQotQ09ORklHX0VNQkVEREVEPXkKLUNPTkZJR19TWVNDVExfU1lTQ0FMTD15Ci1DT05GSUdfS0FMTFNZTVM9eQotIyBDT05GSUdfS0FMTFNZTVNfQUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAotQ09ORklHX0hPVFBMVUc9eQotQ09ORklHX1BSSU5USz15Ci1DT05GSUdfQlVHPXkKLUNPTkZJR19FTEZfQ09SRT15Ci1DT05GSUdfUENTUEtSX1BMQVRGT1JNPXkKLUNPTkZJR19DT01QQVRfQlJLPXkKLUNPTkZJR19CQVNFX0ZVTEw9eQotQ09ORklHX0ZVVEVYPXkKLUNPTkZJR19BTk9OX0lOT0RFUz15Ci1DT05GSUdfRVBPTEw9eQotQ09ORklHX1NJR05BTEZEPXkKLUNPTkZJR19USU1FUkZEPXkKLUNPTkZJR19FVkVOVEZEPXkKLUNPTkZJR19TSE1FTT15Ci1DT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQotQ09ORklHX1NMQUI9eQotIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX09QUk9GSUxFPXkKLSMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldAotQ09ORklHX0hBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1M9eQotQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UPXkKLUNPTkZJR19IQVZFX0tQUk9CRVM9eQotQ09ORklHX0hBVkVfS1JFVFBST0JFUz15Ci1DT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15Ci0jIENPTkZJR19IQVZFX0RNQV9BVFRSUyBpcyBub3Qgc2V0Ci1DT05GSUdfVVNFX0dFTkVSSUNfU01QX0hFTFBFUlM9eQotIyBDT05GSUdfSEFWRV9DTEsgaXMgbm90IHNldAotQ09ORklHX1BST0NfUEFHRV9NT05JVE9SPXkKLSMgQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQgaXMgbm90IHNldAotQ09ORklHX1NMQUJJTkZPPXkKLUNPTkZJR19SVF9NVVRFWEVTPXkKLSMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAotQ09ORklHX0JBU0VfU01BTEw9MAotQ09ORklHX01PRFVMRVM9eQotIyBDT05GSUdfTU9EVUxFX0ZPUkNFX0xPQUQgaXMgbm90IHNldAotQ09ORklHX01PRFVMRV9VTkxPQUQ9eQotIyBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAotQ09ORklHX0tNT0Q9eQotQ09ORklHX1NUT1BfTUFDSElORT15Ci1DT05GSUdfQkxPQ0s9eQotIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfTFNGIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKLQotIwotIyBJTyBTY2hlZHVsZXJzCi0jCi1DT05GSUdfSU9TQ0hFRF9OT09QPXkKLUNPTkZJR19JT1NDSEVEX0FTPXkKLUNPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKLUNPTkZJR19JT1NDSEVEX0NGUT15Ci0jIENPTkZJR19ERUZBVUxUX0FTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfQ0ZRPXkKLSMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9JT1NDSEVEPSJjZnEiCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotCi0jCi0jIFBsYXRmb3JtIHN1cHBvcnQKLSMKLUNPTkZJR19QUENfTVVMVElQTEFURk9STT15Ci1DT05GSUdfQ0xBU1NJQzMyPXkKLUNPTkZJR19QUENfQ0hSUD15Ci0jIENPTkZJR19NUEM1MTIxX0FEUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NUEM1MTIxX0dFTkVSSUMgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX01QQzUyeHggaXMgbm90IHNldAotQ09ORklHX1BQQ19QTUFDPXkKLSMgQ09ORklHX1BQQ19DRUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19DRUxMX05BVElWRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfODJ4eCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUTJBRFMgaXMgbm90IHNldAotIyBDT05GSUdfUFBDXzgzeHggaXMgbm90IHNldAotQ09ORklHX1BQQ184Nnh4PXkKLSMgQ09ORklHX01QQzg2NDFfSFBDTiBpcyBub3Qgc2V0Ci1DT05GSUdfU0JDODY0MUQ9eQotIyBDT05GSUdfTVBDODYxMF9IUENEIGlzIG5vdCBzZXQKLUNPTkZJR19NUEM4NjQxPXkKLUNPTkZJR19QUENfTkFUSVZFPXkKLSMgQ09ORklHX1VEQkdfUlRBU19DT05TT0xFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQSUMgaXMgbm90IHNldAotQ09ORklHX01QSUM9eQotIyBDT05GSUdfTVBJQ19XRUlSRCBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDX0k4MjU5PXkKLUNPTkZJR19QUENfUlRBUz15Ci0jIENPTkZJR19SVEFTX0VSUk9SX0xPR0dJTkcgaXMgbm90IHNldAotQ09ORklHX1JUQVNfUFJPQz15Ci0jIENPTkZJR19NTUlPX05WUkFNIGlzIG5vdCBzZXQKLUNPTkZJR19QUENfTVBDMTA2PXkKLSMgQ09ORklHX1BQQ185NzBfTkFQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19JTkRJUkVDVF9JTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HRU5FUklDX0lPTUFQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9GUkVRIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQzYwMV9TWU5DX0ZJWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQVUgaXMgbm90IHNldAotIyBDT05GSUdfRlNMX1VMSTE1NzUgaXMgbm90IHNldAotCi0jCi0jIEtlcm5lbCBvcHRpb25zCi0jCi0jIENPTkZJR19ISUdITUVNIGlzIG5vdCBzZXQKLUNPTkZJR19USUNLX09ORVNIT1Q9eQotIyBDT05GSUdfTk9fSFogaXMgbm90IHNldAotQ09ORklHX0hJR0hfUkVTX1RJTUVSUz15Ci1DT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UU19CVUlMRD15Ci0jIENPTkZJR19IWl8xMDAgaXMgbm90IHNldAotQ09ORklHX0haXzI1MD15Ci0jIENPTkZJR19IWl8zMDAgaXMgbm90IHNldAotIyBDT05GSUdfSFpfMTAwMCBpcyBub3Qgc2V0Ci1DT05GSUdfSFo9MjUwCi1DT05GSUdfU0NIRURfSFJUSUNLPXkKLSMgQ09ORklHX1BSRUVNUFRfTk9ORSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWSBpcyBub3Qgc2V0Ci1DT05GSUdfUFJFRU1QVD15Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0Ci1DT05GSUdfQklORk1UX0VMRj15Ci1DT05GSUdfQklORk1UX01JU0M9bQotIyBDT05GSUdfSU9NTVVfSEVMUEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hPVFBMVUdfQ1BVIGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVRz15Ci1DT05GSUdfQVJDSF9IQVNfV0FMS19NRU1PUlk9eQotQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RSRU1PVkU9eQotIyBDT05GSUdfS0VYRUMgaXMgbm90IHNldAotQ09ORklHX0lSUV9BTExfQ1BVUz15Ci1DT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15Ci1DT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQotQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQotQ09ORklHX0ZMQVRNRU1fTUFOVUFMPXkKLSMgQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUwgaXMgbm90IHNldAotIyBDT05GSUdfU1BBUlNFTUVNX01BTlVBTCBpcyBub3Qgc2V0Ci1DT05GSUdfRkxBVE1FTT15Ci1DT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQotIyBDT05GSUdfU1BBUlNFTUVNX1NUQVRJQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUEFSU0VNRU1fVk1FTU1BUF9FTkFCTEUgaXMgbm90IHNldAotQ09ORklHX1BBR0VGTEFHU19FWFRFTkRFRD15Ci1DT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAotQ09ORklHX01JR1JBVElPTj15Ci0jIENPTkZJR19SRVNPVVJDRVNfNjRCSVQgaXMgbm90IHNldAotQ09ORklHX1pPTkVfRE1BX0ZMQUc9MQotQ09ORklHX0JPVU5DRT15Ci1DT05GSUdfVklSVF9UT19CVVM9eQotQ09ORklHX0ZPUkNFX01BWF9aT05FT1JERVI9MTEKLSMgQ09ORklHX1BST0NfREVWSUNFVFJFRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DTURMSU5FX0JPT0wgaXMgbm90IHNldAotQ09ORklHX0VYVFJBX1RBUkdFVFM9IiIKLSMgQ09ORklHX1BNIGlzIG5vdCBzZXQKLUNPTkZJR19TRUNDT01QPXkKLUNPTkZJR19JU0FfRE1BX0FQST15Ci0KLSMKLSMgQnVzIG9wdGlvbnMKLSMKLSMgQ09ORklHX0lTQSBpcyBub3Qgc2V0Ci1DT05GSUdfWk9ORV9ETUE9eQotQ09ORklHX0dFTkVSSUNfSVNBX0RNQT15Ci1DT05GSUdfUFBDX0lORElSRUNUX1BDST15Ci1DT05GSUdfRlNMX1NPQz15Ci1DT05GSUdfRlNMX1BDST15Ci1DT05GSUdfUFBDX1BDSV9DSE9JQ0U9eQotQ09ORklHX1BDST15Ci1DT05GSUdfUENJX0RPTUFJTlM9eQotQ09ORklHX1BDSV9TWVNDQUxMPXkKLUNPTkZJR19QQ0lFUE9SVEJVUz15Ci1DT05GSUdfUENJRUFFUj15Ci0jIENPTkZJR19QQ0lFQVNQTSBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9TVVBQT1JUU19NU0k9eQotIyBDT05GSUdfUENJX01TSSBpcyBub3Qgc2V0Ci1DT05GSUdfUENJX0xFR0FDWT15Ci0jIENPTkZJR19QQ0lfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hPVFBMVUdfUENJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBU19SQVBJRElPIGlzIG5vdCBzZXQKLQotIwotIyBBZHZhbmNlZCBzZXR1cAotIwotIyBDT05GSUdfQURWQU5DRURfT1BUSU9OUyBpcyBub3Qgc2V0Ci0KLSMKLSMgRGVmYXVsdCBzZXR0aW5ncyBmb3IgYWR2YW5jZWQgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSB1c2VkCi0jCi1DT05GSUdfTE9XTUVNX1NJWkU9MHgzMDAwMDAwMAotQ09ORklHX1BBR0VfT0ZGU0VUPTB4YzAwMDAwMDAKLUNPTkZJR19LRVJORUxfU1RBUlQ9MHhjMDAwMDAwMAotQ09ORklHX1BIWVNJQ0FMX1NUQVJUPTB4MDAwMDAwMDAKLUNPTkZJR19UQVNLX1NJWkU9MHhjMDAwMDAwMAotQ09ORklHX05FVD15Ci0KLSMKLSMgTmV0d29ya2luZyBvcHRpb25zCi0jCi1DT05GSUdfUEFDS0VUPXkKLUNPTkZJR19QQUNLRVRfTU1BUD15Ci1DT05GSUdfVU5JWD15Ci1DT05GSUdfWEZSTT15Ci1DT05GSUdfWEZSTV9VU0VSPW0KLSMgQ09ORklHX1hGUk1fU1VCX1BPTElDWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlJNX01JR1JBVEUgaXMgbm90IHNldAotIyBDT05GSUdfWEZSTV9TVEFUSVNUSUNTIGlzIG5vdCBzZXQKLUNPTkZJR19YRlJNX0lQQ09NUD1tCi1DT05GSUdfTkVUX0tFWT1tCi0jIENPTkZJR19ORVRfS0VZX01JR1JBVEUgaXMgbm90IHNldAotQ09ORklHX0lORVQ9eQotQ09ORklHX0lQX01VTFRJQ0FTVD15Ci1DT05GSUdfSVBfQURWQU5DRURfUk9VVEVSPXkKLUNPTkZJR19BU0tfSVBfRklCX0hBU0g9eQotIyBDT05GSUdfSVBfRklCX1RSSUUgaXMgbm90IHNldAotQ09ORklHX0lQX0ZJQl9IQVNIPXkKLUNPTkZJR19JUF9NVUxUSVBMRV9UQUJMRVM9eQotQ09ORklHX0lQX1JPVVRFX01VTFRJUEFUSD15Ci1DT05GSUdfSVBfUk9VVEVfVkVSQk9TRT15Ci1DT05GSUdfSVBfUE5QPXkKLUNPTkZJR19JUF9QTlBfREhDUD15Ci1DT05GSUdfSVBfUE5QX0JPT1RQPXkKLUNPTkZJR19JUF9QTlBfUkFSUD15Ci1DT05GSUdfTkVUX0lQSVA9bQotQ09ORklHX05FVF9JUEdSRT1tCi1DT05GSUdfTkVUX0lQR1JFX0JST0FEQ0FTVD15Ci1DT05GSUdfSVBfTVJPVVRFPXkKLUNPTkZJR19JUF9QSU1TTV9WMT15Ci1DT05GSUdfSVBfUElNU01fVjI9eQotIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0Ci1DT05GSUdfU1lOX0NPT0tJRVM9eQotQ09ORklHX0lORVRfQUg9bQotQ09ORklHX0lORVRfRVNQPW0KLUNPTkZJR19JTkVUX0lQQ09NUD1tCi1DT05GSUdfSU5FVF9YRlJNX1RVTk5FTD1tCi1DT05GSUdfSU5FVF9UVU5ORUw9bQotQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVD15Ci1DT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMPXkKLUNPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUPXkKLSMgQ09ORklHX0lORVRfTFJPIGlzIG5vdCBzZXQKLUNPTkZJR19JTkVUX0RJQUc9eQotQ09ORklHX0lORVRfVENQX0RJQUc9eQotIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAotQ09ORklHX1RDUF9DT05HX0NVQklDPXkKLUNPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKLSMgQ09ORklHX1RDUF9NRDVTSUcgaXMgbm90IHNldAotIyBDT05GSUdfSVBfVlMgaXMgbm90IHNldAotQ09ORklHX0lQVjY9bQotIyBDT05GSUdfSVBWNl9QUklWQUNZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQVjZfUk9VVEVSX1BSRUYgaXMgbm90IHNldAotIyBDT05GSUdfSVBWNl9PUFRJTUlTVElDX0RBRCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5FVDZfQUg9bQotQ09ORklHX0lORVQ2X0VTUD1tCi1DT05GSUdfSU5FVDZfSVBDT01QPW0KLSMgQ09ORklHX0lQVjZfTUlQNiBpcyBub3Qgc2V0Ci1DT05GSUdfSU5FVDZfWEZSTV9UVU5ORUw9bQotQ09ORklHX0lORVQ2X1RVTk5FTD1tCi1DT05GSUdfSU5FVDZfWEZSTV9NT0RFX1RSQU5TUE9SVD1tCi1DT05GSUdfSU5FVDZfWEZSTV9NT0RFX1RVTk5FTD1tCi1DT05GSUdfSU5FVDZfWEZSTV9NT0RFX0JFRVQ9bQotIyBDT05GSUdfSU5FVDZfWEZSTV9NT0RFX1JPVVRFT1BUSU1JWkFUSU9OIGlzIG5vdCBzZXQKLUNPTkZJR19JUFY2X1NJVD1tCi1DT05GSUdfSVBWNl9ORElTQ19OT0RFVFlQRT15Ci1DT05GSUdfSVBWNl9UVU5ORUw9bQotIyBDT05GSUdfSVBWNl9NVUxUSVBMRV9UQUJMRVMgaXMgbm90IHNldAotIyBDT05GSUdfSVBWNl9NUk9VVEUgaXMgbm90IHNldAotIyBDT05GSUdfTkVUTEFCRUwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRGSUxURVI9eQotIyBDT05GSUdfTkVURklMVEVSX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRGSUxURVJfQURWQU5DRUQ9eQotQ09ORklHX0JSSURHRV9ORVRGSUxURVI9eQotCi0jCi0jIENvcmUgTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24KLSMKLSMgQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LX1FVRVVFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LX0xPRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORl9DT05OVFJBQ0sgaXMgbm90IHNldAotQ09ORklHX05FVEZJTFRFUl9YVEFCTEVTPW0KLSMgQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfQ0xBU1NJRlkgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9EU0NQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTUFSSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX05GUVVFVUUgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9ORkxPRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX1JBVEVFU1QgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX1RDUE1TUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX1RDUE9QVFNUUklQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9DT01NRU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9EQ0NQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9EU0NQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9FU1AgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0lQUkFOR0UgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0xFTkdUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTElNSVQgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX01BQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTUFSSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfT1dORVIgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1BPTElDWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTVVMVElQT1JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9QSFlTREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9QS1RUWVBFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9RVU9UQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUkFURUVTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUkVBTE0gaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NDVFAgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NUQVRJU1RJQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfU1RSSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9UQ1BNU1MgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1RJTUUgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1UzMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfSEFTSExJTUlUIGlzIG5vdCBzZXQKLQotIwotIyBJUDogTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24KLSMKLUNPTkZJR19JUF9ORl9RVUVVRT1tCi1DT05GSUdfSVBfTkZfSVBUQUJMRVM9bQotQ09ORklHX0lQX05GX01BVENIX1JFQ0VOVD1tCi1DT05GSUdfSVBfTkZfTUFUQ0hfRUNOPW0KLSMgQ09ORklHX0lQX05GX01BVENIX0FIIGlzIG5vdCBzZXQKLUNPTkZJR19JUF9ORl9NQVRDSF9UVEw9bQotQ09ORklHX0lQX05GX01BVENIX0FERFJUWVBFPW0KLUNPTkZJR19JUF9ORl9GSUxURVI9bQotQ09ORklHX0lQX05GX1RBUkdFVF9SRUpFQ1Q9bQotQ09ORklHX0lQX05GX1RBUkdFVF9MT0c9bQotQ09ORklHX0lQX05GX1RBUkdFVF9VTE9HPW0KLUNPTkZJR19JUF9ORl9NQU5HTEU9bQotQ09ORklHX0lQX05GX1RBUkdFVF9FQ049bQotIyBDT05GSUdfSVBfTkZfVEFSR0VUX1RUTCBpcyBub3Qgc2V0Ci1DT05GSUdfSVBfTkZfUkFXPW0KLSMgQ09ORklHX0lQX05GX1NFQ1VSSVRZIGlzIG5vdCBzZXQKLUNPTkZJR19JUF9ORl9BUlBUQUJMRVM9bQotQ09ORklHX0lQX05GX0FSUEZJTFRFUj1tCi1DT05GSUdfSVBfTkZfQVJQX01BTkdMRT1tCi0KLSMKLSMgSVB2NjogTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24KLSMKLUNPTkZJR19JUDZfTkZfUVVFVUU9bQotQ09ORklHX0lQNl9ORl9JUFRBQkxFUz1tCi1DT05GSUdfSVA2X05GX01BVENIX1JUPW0KLUNPTkZJR19JUDZfTkZfTUFUQ0hfT1BUUz1tCi1DT05GSUdfSVA2X05GX01BVENIX0ZSQUc9bQotQ09ORklHX0lQNl9ORl9NQVRDSF9ITD1tCi1DT05GSUdfSVA2X05GX01BVENIX0lQVjZIRUFERVI9bQotIyBDT05GSUdfSVA2X05GX01BVENIX0FIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQNl9ORl9NQVRDSF9NSCBpcyBub3Qgc2V0Ci1DT05GSUdfSVA2X05GX01BVENIX0VVSTY0PW0KLUNPTkZJR19JUDZfTkZfRklMVEVSPW0KLUNPTkZJR19JUDZfTkZfVEFSR0VUX0xPRz1tCi0jIENPTkZJR19JUDZfTkZfVEFSR0VUX1JFSkVDVCBpcyBub3Qgc2V0Ci1DT05GSUdfSVA2X05GX01BTkdMRT1tCi0jIENPTkZJR19JUDZfTkZfVEFSR0VUX0hMIGlzIG5vdCBzZXQKLUNPTkZJR19JUDZfTkZfUkFXPW0KLSMgQ09ORklHX0lQNl9ORl9TRUNVUklUWSBpcyBub3Qgc2V0Ci0KLSMKLSMgQnJpZGdlOiBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbgotIwotIyBDT05GSUdfQlJJREdFX05GX0VCVEFCTEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAotQ09ORklHX0lQX1NDVFA9bQotIyBDT05GSUdfU0NUUF9EQkdfTVNHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDVFBfREJHX09CSkNOVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1RQX0hNQUNfTk9ORSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1RQX0hNQUNfU0hBMSBpcyBub3Qgc2V0Ci1DT05GSUdfU0NUUF9ITUFDX01ENT15Ci1DT05GSUdfVElQQz1tCi0jIENPTkZJR19USVBDX0FEVkFOQ0VEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJUENfREVCVUcgaXMgbm90IHNldAotQ09ORklHX0FUTT1tCi1DT05GSUdfQVRNX0NMSVA9bQotIyBDT05GSUdfQVRNX0NMSVBfTk9fSUNNUCBpcyBub3Qgc2V0Ci1DT05GSUdfQVRNX0xBTkU9bQotQ09ORklHX0FUTV9NUE9BPW0KLUNPTkZJR19BVE1fQlIyNjg0PW0KLSMgQ09ORklHX0FUTV9CUjI2ODRfSVBGSUxURVIgaXMgbm90IHNldAotQ09ORklHX1NUUD1tCi1DT05GSUdfQlJJREdFPW0KLUNPTkZJR19WTEFOXzgwMjFRPW0KLSMgQ09ORklHX1ZMQU5fODAyMVFfR1ZSUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUNORVQgaXMgbm90IHNldAotQ09ORklHX0xMQz1tCi0jIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19YMjUgaXMgbm90IHNldAotIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAotQ09ORklHX1dBTl9ST1VURVI9bQotQ09ORklHX05FVF9TQ0hFRD15Ci0KLSMKLSMgUXVldWVpbmcvU2NoZWR1bGluZwotIwotQ09ORklHX05FVF9TQ0hfQ0JRPW0KLUNPTkZJR19ORVRfU0NIX0hUQj1tCi1DT05GSUdfTkVUX1NDSF9IRlNDPW0KLUNPTkZJR19ORVRfU0NIX0FUTT1tCi1DT05GSUdfTkVUX1NDSF9QUklPPW0KLUNPTkZJR19ORVRfU0NIX1JFRD1tCi1DT05GSUdfTkVUX1NDSF9TRlE9bQotQ09ORklHX05FVF9TQ0hfVEVRTD1tCi1DT05GSUdfTkVUX1NDSF9UQkY9bQotQ09ORklHX05FVF9TQ0hfR1JFRD1tCi1DT05GSUdfTkVUX1NDSF9EU01BUks9bQotQ09ORklHX05FVF9TQ0hfTkVURU09bQotCi0jCi0jIENsYXNzaWZpY2F0aW9uCi0jCi1DT05GSUdfTkVUX0NMUz15Ci0jIENPTkZJR19ORVRfQ0xTX0JBU0lDIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRfQ0xTX1RDSU5ERVg9bQotQ09ORklHX05FVF9DTFNfUk9VVEU0PW0KLUNPTkZJR19ORVRfQ0xTX1JPVVRFPXkKLUNPTkZJR19ORVRfQ0xTX0ZXPW0KLUNPTkZJR19ORVRfQ0xTX1UzMj1tCi0jIENPTkZJR19DTFNfVTMyX1BFUkYgaXMgbm90IHNldAotIyBDT05GSUdfQ0xTX1UzMl9NQVJLIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRfQ0xTX1JTVlA9bQotQ09ORklHX05FVF9DTFNfUlNWUDY9bQotIyBDT05GSUdfTkVUX0NMU19GTE9XIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9FTUFUQ0ggaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0NMU19BQ1QgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0NMU19JTkQgaXMgbm90IHNldAotQ09ORklHX05FVF9TQ0hfRklGTz15Ci0KLSMKLSMgTmV0d29yayB0ZXN0aW5nCi0jCi1DT05GSUdfTkVUX1BLVEdFTj1tCi0jIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DQU4gaXMgbm90IHNldAotIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0Ci1DT05GSUdfRklCX1JVTEVTPXkKLQotIwotIyBXaXJlbGVzcwotIwotIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQzgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lFRUU4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRktJTEwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKLQotIwotIyBEZXZpY2UgRHJpdmVycwotIwotCi0jCi0jIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKLSMKLUNPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCi1DT05GSUdfU1RBTkRBTE9ORT15Ci1DT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15Ci0jIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0RFVlJFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAotQ09ORklHX01URD15Ci0jIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAotQ09ORklHX01URF9DT05DQVQ9eQotQ09ORklHX01URF9QQVJUSVRJT05TPXkKLSMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9DTURMSU5FX1BBUlRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9PRl9QQVJUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQVI3X1BBUlRTIGlzIG5vdCBzZXQKLQotIwotIyBVc2VyIE1vZHVsZXMgQW5kIFRyYW5zbGF0aW9uIExheWVycwotIwotQ09ORklHX01URF9DSEFSPXkKLUNPTkZJR19NVERfQkxLREVWUz15Ci1DT05GSUdfTVREX0JMT0NLPXkKLSMgQ09ORklHX0ZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JGRF9GVEwgaXMgbm90IHNldAotIyBDT05GSUdfU1NGREMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX09PUFMgaXMgbm90IHNldAotCi0jCi0jIFJBTS9ST00vRmxhc2ggY2hpcCBkcml2ZXJzCi0jCi1DT05GSUdfTVREX0NGST15Ci0jIENPTkZJR19NVERfSkVERUNQUk9CRSBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX0dFTl9QUk9CRT15Ci1DT05GSUdfTVREX0NGSV9BRFZfT1BUSU9OUz15Ci0jIENPTkZJR19NVERfQ0ZJX05PU1dBUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ0ZJX0JFX0JZVEVfU1dBUCBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX0NGSV9MRV9CWVRFX1NXQVA9eQotIyBDT05GSUdfTVREX0NGSV9HRU9NRVRSWSBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE9eQotQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8yPXkKLUNPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfND15Ci0jIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMTYgaXMgbm90IHNldAotIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzMyIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfQ0ZJX0kxPXkKLUNPTkZJR19NVERfQ0ZJX0kyPXkKLSMgQ09ORklHX01URF9DRklfSTQgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NGSV9JOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfT1RQIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfQ0ZJX0lOVEVMRVhUPXkKLSMgQ09ORklHX01URF9DRklfQU1EU1REIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9DRklfU1RBQSBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX0NGSV9VVElMPXkKLSMgQ09ORklHX01URF9SQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX1JPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQUJTRU5UIGlzIG5vdCBzZXQKLQotIwotIyBNYXBwaW5nIGRyaXZlcnMgZm9yIGNoaXAgYWNjZXNzCi0jCi0jIENPTkZJR19NVERfQ09NUExFWF9NQVBQSU5HUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUEhZU01BUCBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX1BIWVNNQVBfT0Y9eQotIyBDT05GSUdfTVREX0lOVEVMX1ZSX05PUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUExBVFJBTSBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VsZi1jb250YWluZWQgTVREIGRldmljZSBkcml2ZXJzCi0jCi0jIENPTkZJR19NVERfUE1DNTUxIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9TTFJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUEhSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX01URFJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQkxPQ0syTVREIGlzIG5vdCBzZXQKLQotIwotIyBEaXNrLU9uLUNoaXAgRGV2aWNlIERyaXZlcnMKLSMKLSMgQ09ORklHX01URF9ET0MyMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9ET0MyMDAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9ET0MyMDAxUExVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTkFORCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfT05FTkFORCBpcyBub3Qgc2V0Ci0KLSMKLSMgVUJJIC0gVW5zb3J0ZWQgYmxvY2sgaW1hZ2VzCi0jCi0jIENPTkZJR19NVERfVUJJIGlzIG5vdCBzZXQKLUNPTkZJR19PRl9ERVZJQ0U9eQotQ09ORklHX09GX0kyQz15Ci0jIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWPXkKLSMgQ09ORklHX0JMS19ERVZfRkQgaXMgbm90IHNldAotIyBDT05GSUdfTUFDX0ZMT1BQWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfQ1BRX0RBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19DUFFfQ0lTU19EQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0RBQzk2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1VNRU0gaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX0xPT1A9bQotQ09ORklHX0JMS19ERVZfQ1JZUFRPTE9PUD1tCi1DT05GSUdfQkxLX0RFVl9OQkQ9bQotIyBDT05GSUdfQkxLX0RFVl9TWDggaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfUkFNPXkKLUNPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgotQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9NDA5NgotIyBDT05GSUdfQkxLX0RFVl9YSVAgaXMgbm90IHNldAotIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9IRCBpcyBub3Qgc2V0Ci1DT05GSUdfTUlTQ19ERVZJQ0VTPXkKLSMgQ09ORklHX1BIQU5UT00gaXMgbm90IHNldAotIyBDT05GSUdfRUVQUk9NXzkzQ1g2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NHSV9JT0M0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJRk1fQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FTkNMT1NVUkVfU0VSVklDRVMgaXMgbm90IHNldAotIyBDT05GSUdfSFBfSUxPIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0lERT15Ci0jIENPTkZJR19JREUgaXMgbm90IHNldAotCi0jCi0jIFNDU0kgZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RNQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAotIyBDT05GSUdfQVRBIGlzIG5vdCBzZXQKLUNPTkZJR19NRD15Ci1DT05GSUdfQkxLX0RFVl9NRD15Ci1DT05GSUdfTURfTElORUFSPXkKLUNPTkZJR19NRF9SQUlEMD15Ci1DT05GSUdfTURfUkFJRDE9eQotQ09ORklHX01EX1JBSUQxMD15Ci0jIENPTkZJR19NRF9SQUlENDU2IGlzIG5vdCBzZXQKLUNPTkZJR19NRF9NVUxUSVBBVEg9eQotQ09ORklHX01EX0ZBVUxUWT15Ci1DT05GSUdfQkxLX0RFVl9ETT15Ci0jIENPTkZJR19ETV9ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfRE1fQ1JZUFQ9eQotQ09ORklHX0RNX1NOQVBTSE9UPXkKLUNPTkZJR19ETV9NSVJST1I9eQotQ09ORklHX0RNX1pFUk89eQotIyBDT05GSUdfRE1fTVVMVElQQVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RNX0RFTEFZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RNX1VFVkVOVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GVVNJT04gaXMgbm90IHNldAotCi0jCi0jIElFRUUgMTM5NCAoRmlyZVdpcmUpIHN1cHBvcnQKLSMKLQotIwotIyBFbmFibGUgb25seSBvbmUgb2YgdGhlIHR3byBzdGFja3MsIHVubGVzcyB5b3Uga25vdyB3aGF0IHlvdSBhcmUgZG9pbmcKLSMKLSMgQ09ORklHX0ZJUkVXSVJFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lFRUUxMzk0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNJTlRPU0hfRFJJVkVSUyBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUREVWSUNFUz15Ci1DT05GSUdfRFVNTVk9bQotQ09ORklHX0JPTkRJTkc9bQotIyBDT05GSUdfTUFDVkxBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAotQ09ORklHX1RVTj1tCi0jIENPTkZJR19WRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ05FVCBpcyBub3Qgc2V0Ci1DT05GSUdfUEhZTElCPXkKLQotIwotIyBNSUkgUEhZIGRldmljZSBkcml2ZXJzCi0jCi0jIENPTkZJR19NQVJWRUxMX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19EQVZJQ09NX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19RU0VNSV9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfTFhUX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSUNBREFfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJVEVTU0VfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NNU0NfUEhZIGlzIG5vdCBzZXQKLUNPTkZJR19CUk9BRENPTV9QSFk9eQotIyBDT05GSUdfSUNQTFVTX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUFMVEVLX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GSVhFRF9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfTURJT19CSVRCQU5HIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRfRVRIRVJORVQ9eQotQ09ORklHX01JST15Ci0jIENPTkZJR19NQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JNQUMgaXMgbm90IHNldAotIyBDT05GSUdfSEFQUFlNRUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NVTkdFTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DQVNTSU5JIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9WRU5ET1JfM0NPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfVFVMSVAgaXMgbm90IHNldAotIyBDT05GSUdfSFAxMDAgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX1pNSUkgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX1JHTUlJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19UQUggaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX0VNQUM0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9QQ0kgaXMgbm90IHNldAotIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKLUNPTkZJR19ORVRERVZfMTAwMD15Ci0jIENPTkZJR19BQ0VOSUMgaXMgbm90IHNldAotIyBDT05GSUdfREwySyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FMTAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FMTAwMEUgaXMgbm90IHNldAotIyBDT05GSUdfSVAxMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lHQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OUzgzODIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBTUFDSEkgaXMgbm90IHNldAotIyBDT05GSUdfWUVMTE9XRklOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1I4MTY5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NJUzE5MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TS0dFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NLWTIgaXMgbm90IHNldAotIyBDT05GSUdfVklBX1ZFTE9DSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJR09OMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTlgyIGlzIG5vdCBzZXQKLUNPTkZJR19HSUFORkFSPXkKLSMgQ09ORklHX01WNjQzWFhfRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FMQTNYWFggaXMgbm90IHNldAotIyBDT05GSUdfQVRMMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEwxRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAotIyBDT05GSUdfVFIgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzIExBTgotIwotIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lXTFdJRklfTEVEUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQU4gaXMgbm90IHNldAotQ09ORklHX0FUTV9EUklWRVJTPXkKLSMgQ09ORklHX0FUTV9EVU1NWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVE1fVENQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTV9MQU5BSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVE1fRU5JIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTV9GSVJFU1RSRUFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTV9aQVRNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTV9OSUNTVEFSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTV9JRFQ3NzI1MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVE1fQU1CQVNTQURPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVE1fSE9SSVpPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVE1fSUEgaXMgbm90IHNldAotIyBDT05GSUdfQVRNX0ZPUkUyMDBFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTV9IRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GRERJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJUFBJIGlzIG5vdCBzZXQKLUNPTkZJR19QUFA9bQotQ09ORklHX1BQUF9NVUxUSUxJTks9eQotQ09ORklHX1BQUF9GSUxURVI9eQotQ09ORklHX1BQUF9BU1lOQz1tCi1DT05GSUdfUFBQX1NZTkNfVFRZPW0KLUNPTkZJR19QUFBfREVGTEFURT1tCi1DT05GSUdfUFBQX0JTRENPTVA9bQotIyBDT05GSUdfUFBQX01QUEUgaXMgbm90IHNldAotQ09ORklHX1BQUE9FPW0KLUNPTkZJR19QUFBPQVRNPW0KLSMgQ09ORklHX1BQUE9MMlRQIGlzIG5vdCBzZXQKLUNPTkZJR19TTElQPW0KLUNPTkZJR19TTElQX0NPTVBSRVNTRUQ9eQotQ09ORklHX1NMSEM9bQotQ09ORklHX1NMSVBfU01BUlQ9eQotQ09ORklHX1NMSVBfTU9ERV9TTElQNj15Ci1DT05GSUdfTkVUQ09OU09MRT15Ci0jIENPTkZJR19ORVRDT05TT0xFX0RZTkFNSUMgaXMgbm90IHNldAotQ09ORklHX05FVFBPTEw9eQotQ09ORklHX05FVFBPTExfVFJBUD15Ci1DT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUj15Ci0jIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BIT05FIGlzIG5vdCBzZXQKLQotIwotIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAotIwotQ09ORklHX0lOUFVUPXkKLSMgQ09ORklHX0lOUFVUX0ZGX01FTUxFU1MgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfUE9MTERFViBpcyBub3Qgc2V0Ci0KLSMKLSMgVXNlcmxhbmQgaW50ZXJmYWNlcwotIwotQ09ORklHX0lOUFVUX01PVVNFREVWPXkKLUNPTkZJR19JTlBVVF9NT1VTRURFVl9QU0FVWD15Ci1DT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1g9MTAyNAotQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9ZPTc2OAotIyBDT05GSUdfSU5QVVRfSk9ZREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0VWREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKLQotIwotIyBJbnB1dCBEZXZpY2UgRHJpdmVycwotIwotIyBDT05GSUdfSU5QVVRfS0VZQk9BUkQgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfTU9VU0UgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfVEFCTEVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX01JU0MgaXMgbm90IHNldAotCi0jCi0jIEhhcmR3YXJlIEkvTyBwb3J0cwotIwotIyBDT05GSUdfU0VSSU8gaXMgbm90IHNldAotIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAotCi0jCi0jIENoYXJhY3RlciBkZXZpY2VzCi0jCi1DT05GSUdfVlQ9eQotQ09ORklHX0NPTlNPTEVfVFJBTlNMQVRJT05TPXkKLUNPTkZJR19WVF9DT05TT0xFPXkKLUNPTkZJR19IV19DT05TT0xFPXkKLSMgQ09ORklHX1ZUX0hXX0NPTlNPTEVfQklORElORyBpcyBub3Qgc2V0Ci1DT05GSUdfREVWS01FTT15Ci0jIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAotIyBDT05GSUdfTk9aT01JIGlzIG5vdCBzZXQKLQotIwotIyBTZXJpYWwgZHJpdmVycwotIwotQ09ORklHX1NFUklBTF84MjUwPXkKLUNPTkZJR19TRVJJQUxfODI1MF9DT05TT0xFPXkKLSMgQ09ORklHX1NFUklBTF84MjUwX1BDSSBpcyBub3Qgc2V0Ci1DT05GSUdfU0VSSUFMXzgyNTBfTlJfVUFSVFM9MgotQ09ORklHX1NFUklBTF84MjUwX1JVTlRJTUVfVUFSVFM9MgotIyBDT05GSUdfU0VSSUFMXzgyNTBfRVhURU5ERUQgaXMgbm90IHNldAotCi0jCi0jIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKLSMKLSMgQ09ORklHX1NFUklBTF9VQVJUTElURSBpcyBub3Qgc2V0Ci1DT05GSUdfU0VSSUFMX0NPUkU9eQotQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQotIyBDT05GSUdfU0VSSUFMX1BNQUNaSUxPRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRVJJQUxfSlNNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFUklBTF9PRl9QTEFURk9STSBpcyBub3Qgc2V0Ci1DT05GSUdfVU5JWDk4X1BUWVM9eQotQ09ORklHX0xFR0FDWV9QVFlTPXkKLUNPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTI1NgotIyBDT05GSUdfQlJJUV9QQU5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IVkNfUlRBUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAotQ09ORklHX0hXX1JBTkRPTT1tCi0jIENPTkZJR19OVlJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19HRU5fUlRDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0FQUExJQ09NIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAotIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0Ci1DT05GSUdfREVWUE9SVD15Ci1DT05GSUdfSTJDPXkKLUNPTkZJR19JMkNfQk9BUkRJTkZPPXkKLUNPTkZJR19JMkNfQ0hBUkRFVj15Ci1DT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKLQotIwotIyBJMkMgSGFyZHdhcmUgQnVzIHN1cHBvcnQKLSMKLQotIwotIyBQQyBTTUJ1cyBob3N0IGNvbnRyb2xsZXIgZHJpdmVycwotIwotIyBDT05GSUdfSTJDX0FMSTE1MzUgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0FMSTE1NjMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0FMSTE1WDMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0FNRDc1NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfQU1EODExMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfSTgwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfSVNDSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfUElJWDQgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX05GT1JDRTIgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NJUzU1OTUgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NJUzYzMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU0lTOTZYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19WSUEgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1ZJQVBSTyBpcyBub3Qgc2V0Ci0KLSMKLSMgTWFjIFNNQnVzIGhvc3QgY29udHJvbGxlciBkcml2ZXJzCi0jCi0jIENPTkZJR19JMkNfSFlEUkEgaXMgbm90IHNldAotQ09ORklHX0kyQ19QT1dFUk1BQz15Ci0KLSMKLSMgSTJDIHN5c3RlbSBidXMgZHJpdmVycyAobW9zdGx5IGVtYmVkZGVkIC8gc3lzdGVtLW9uLWNoaXApCi0jCi1DT05GSUdfSTJDX01QQz15Ci0jIENPTkZJR19JMkNfT0NPUkVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TSU1URUMgaXMgbm90IHNldAotCi0jCi0jIEV4dGVybmFsIEkyQy9TTUJ1cyBhZGFwdGVyIGRyaXZlcnMKLSMKLSMgQ09ORklHX0kyQ19QQVJQT1JUX0xJR0hUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19UQU9TX0VWTSBpcyBub3Qgc2V0Ci0KLSMKLSMgR3JhcGhpY3MgYWRhcHRlciBJMkMvRERDIGNoYW5uZWwgZHJpdmVycwotIwotIyBDT05GSUdfSTJDX1ZPT0RPTzMgaXMgbm90IHNldAotCi0jCi0jIE90aGVyIEkyQy9TTUJ1cyBidXMgZHJpdmVycwotIwotIyBDT05GSUdfSTJDX1BDQV9QTEFURk9STSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU1RVQiBpcyBub3Qgc2V0Ci0KLSMKLSMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0Ci0jCi0jIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAotIyBDT05GSUdfQVQyNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0VFUFJPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAotIyBDT05GSUdfUENGODU3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDQTk1MzkgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0Y4NTkxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTUFYNjg3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0JVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQ0hJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUEkgaXMgbm90IHNldAotQ09ORklHX0FSQ0hfV0FOVF9PUFRJT05BTF9HUElPTElCPXkKLSMgQ09ORklHX0dQSU9MSUIgaXMgbm90IHNldAotIyBDT05GSUdfVzEgaXMgbm90IHNldAotIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKLUNPTkZJR19IV01PTj15Ci0jIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRDc0MTQgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRDc0MTggaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRE0xMDIxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURNMTAyNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FETTEwMjYgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRE0xMDI5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURNMTAzMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FETTkyNDAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRFQ3NDcwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURUNzQ3MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FNUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FUWFAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRFMxNjIxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfSTVLX0FNQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0Y3MTgwNUYgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19GNzE4ODJGRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0Y3NTM3NVMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19HTDUxOFNNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfR0w1MjBTTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0lUODcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTYzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE03NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNNzcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTc4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE04MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNODMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTg1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE04NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNOTAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTkyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE05MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX01BWDE2MTkgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19NQVg2NjUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUEM4NzM2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDODc0MjcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19TSVM1NTk1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRE1FMTczNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1NNU0M0N00xIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfU01TQzQ3TTE5MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1NNU0M0N0IzOTcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRFM3ODI4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVEhNQzUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVklBNjg2QSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1ZUMTIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1ZUODIzMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4Mzc4MUQgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM3OTFEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzNzkyRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4Mzc5MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4M0w3ODVUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4M0w3ODZORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzNjI3RUhGIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKLUNPTkZJR19XQVRDSERPRz15Ci0jIENPTkZJR19XQVRDSERPR19OT1dBWU9VVCBpcyBub3Qgc2V0Ci0KLSMKLSMgV2F0Y2hkb2cgRGV2aWNlIERyaXZlcnMKLSMKLUNPTkZJR19TT0ZUX1dBVENIRE9HPW0KLSMgQ09ORklHX0FMSU03MTAxX1dEVCBpcyBub3Qgc2V0Ci0jIENPTkZJR184eHh4X1dEVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQVRDSERPR19SVEFTIGlzIG5vdCBzZXQKLQotIwotIyBQQ0ktYmFzZWQgV2F0Y2hkb2cgQ2FyZHMKLSMKLSMgQ09ORklHX1BDSVBDV0FUQ0hET0cgaXMgbm90IHNldAotIyBDT05GSUdfV0RUUENJIGlzIG5vdCBzZXQKLQotIwotIyBTb25pY3MgU2lsaWNvbiBCYWNrcGxhbmUKLSMKLUNPTkZJR19TU0JfUE9TU0lCTEU9eQotIyBDT05GSUdfU1NCIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aWZ1bmN0aW9uIGRldmljZSBkcml2ZXJzCi0jCi0jIENPTkZJR19NRkRfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAotIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGltZWRpYSBkZXZpY2VzCi0jCi0KLSMKLSMgTXVsdGltZWRpYSBjb3JlIHN1cHBvcnQKLSMKLSMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVkJfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSURFT19NRURJQSBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGltZWRpYSBkcml2ZXJzCi0jCi1DT05GSUdfREFCPXkKLQotIwotIyBHcmFwaGljcyBzdXBwb3J0Ci0jCi0jIENPTkZJR19BR1AgaXMgbm90IHNldAotIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKLUNPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTD1tCi0jIENPTkZJR19GQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAotCi0jCi0jIERpc3BsYXkgZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX0RJU1BMQVlfU1VQUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ29uc29sZSBkaXNwbGF5IGRyaXZlciBzdXBwb3J0Ci0jCi1DT05GSUdfVkdBX0NPTlNPTEU9eQotIyBDT05GSUdfVkdBQ09OX1NPRlRfU0NST0xMQkFDSyBpcyBub3Qgc2V0Ci1DT05GSUdfRFVNTVlfQ09OU09MRT15Ci0jIENPTkZJR19TT1VORCBpcyBub3Qgc2V0Ci1DT05GSUdfSElEX1NVUFBPUlQ9eQotQ09ORklHX0hJRD15Ci0jIENPTkZJR19ISURfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfU1VQUE9SVD15Ci1DT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15Ci1DT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0k9eQotQ09ORklHX1VTQl9BUkNIX0hBU19FSENJPXkKLSMgQ09ORklHX1VTQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfT1RHX1dISVRFTElTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfT1RHX0JMQUNLTElTVF9IVUIgaXMgbm90IHNldAotCi0jCi0jIEVuYWJsZSBIb3N0IG9yIEdhZGdldCBzdXBwb3J0IHRvIHNlZSBJbnZlbnRyYSBvcHRpb25zCi0jCi0KLSMKLSMgTk9URTogVVNCX1NUT1JBR0UgZW5hYmxlcyBTQ1NJLCBhbmQgJ1NDU0kgZGlzayBzdXBwb3J0JwotIwotIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTUMgaXMgbm90IHNldAotIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldAotIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAotIyBDT05GSUdfQUNDRVNTSUJJTElUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkZJTklCQU5EIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VEQUMgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0NMQVNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldAotIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKLQotIwotIyBGaWxlIHN5c3RlbXMKLSMKLUNPTkZJR19FWFQyX0ZTPXkKLUNPTkZJR19FWFQyX0ZTX1hBVFRSPXkKLUNPTkZJR19FWFQyX0ZTX1BPU0lYX0FDTD15Ci0jIENPTkZJR19FWFQyX0ZTX1NFQ1VSSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDJfRlNfWElQIGlzIG5vdCBzZXQKLUNPTkZJR19FWFQzX0ZTPXkKLUNPTkZJR19FWFQzX0ZTX1hBVFRSPXkKLUNPTkZJR19FWFQzX0ZTX1BPU0lYX0FDTD15Ci0jIENPTkZJR19FWFQzX0ZTX1NFQ1VSSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDRERVZfRlMgaXMgbm90IHNldAotQ09ORklHX0pCRD15Ci0jIENPTkZJR19KQkRfREVCVUcgaXMgbm90IHNldAotQ09ORklHX0ZTX01CQ0FDSEU9eQotQ09ORklHX1JFSVNFUkZTX0ZTPW0KLSMgQ09ORklHX1JFSVNFUkZTX0NIRUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFSVNFUkZTX1BST0NfSU5GTyBpcyBub3Qgc2V0Ci1DT05GSUdfUkVJU0VSRlNfRlNfWEFUVFI9eQotQ09ORklHX1JFSVNFUkZTX0ZTX1BPU0lYX0FDTD15Ci0jIENPTkZJR19SRUlTRVJGU19GU19TRUNVUklUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAotQ09ORklHX0ZTX1BPU0lYX0FDTD15Ci0jIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAotQ09ORklHX09DRlMyX0ZTPW0KLUNPTkZJR19PQ0ZTMl9GU19PMkNCPW0KLUNPTkZJR19PQ0ZTMl9GU19TVEFUUz15Ci1DT05GSUdfT0NGUzJfREVCVUdfTUFTS0xPRz15Ci0jIENPTkZJR19PQ0ZTMl9ERUJVR19GUyBpcyBub3Qgc2V0Ci1DT05GSUdfRE5PVElGWT15Ci1DT05GSUdfSU5PVElGWT15Ci1DT05GSUdfSU5PVElGWV9VU0VSPXkKLSMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKLUNPTkZJR19BVVRPRlNfRlM9bQotQ09ORklHX0FVVE9GUzRfRlM9bQotIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcwotIwotIyBDT05GSUdfSVNPOTY2MF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VREZfRlMgaXMgbm90IHNldAotCi0jCi0jIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKLSMKLSMgQ09ORklHX01TRE9TX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZGQVRfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTlRGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUHNldWRvIGZpbGVzeXN0ZW1zCi0jCi1DT05GSUdfUFJPQ19GUz15Ci1DT05GSUdfUFJPQ19LQ09SRT15Ci1DT05GSUdfUFJPQ19TWVNDVEw9eQotQ09ORklHX1NZU0ZTPXkKLUNPTkZJR19UTVBGUz15Ci0jIENPTkZJR19UTVBGU19QT1NJWF9BQ0wgaXMgbm90IHNldAotIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKLUNPTkZJR19DT05GSUdGU19GUz1tCi0KLSMKLSMgTWlzY2VsbGFuZW91cyBmaWxlc3lzdGVtcwotIwotIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRkZTMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkFNRlMgaXMgbm90IHNldAotIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0Ci1DT05GSUdfTUlOSVhfRlM9bQotIyBDT05GSUdfT01GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0Ci1DT05GSUdfUk9NRlNfRlM9bQotIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQotQ09ORklHX05GU19GUz15Ci1DT05GSUdfTkZTX1YzPXkKLSMgQ09ORklHX05GU19WM19BQ0wgaXMgbm90IHNldAotQ09ORklHX05GU19WND15Ci1DT05GSUdfUk9PVF9ORlM9eQotIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0Ci1DT05GSUdfTE9DS0Q9eQotQ09ORklHX0xPQ0tEX1Y0PXkKLUNPTkZJR19ORlNfQ09NTU9OPXkKLUNPTkZJR19TVU5SUEM9eQotQ09ORklHX1NVTlJQQ19HU1M9eQotQ09ORklHX1JQQ1NFQ19HU1NfS1JCNT15Ci0jIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKLUNPTkZJR19TTUJfRlM9bQotQ09ORklHX1NNQl9OTFNfREVGQVVMVD15Ci1DT05GSUdfU01CX05MU19SRU1PVEU9ImNwNDM3IgotQ09ORklHX0NJRlM9bQotIyBDT05GSUdfQ0lGU19TVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSUZTX1dFQUtfUFdfSEFTSCBpcyBub3Qgc2V0Ci1DT05GSUdfQ0lGU19YQVRUUj15Ci1DT05GSUdfQ0lGU19QT1NJWD15Ci0jIENPTkZJR19DSUZTX0RFQlVHMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSUZTX0VYUEVSSU1FTlRBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAotCi0jCi0jIFBhcnRpdGlvbiBUeXBlcwotIwotIyBDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEIGlzIG5vdCBzZXQKLUNPTkZJR19NQUNfUEFSVElUSU9OPXkKLUNPTkZJR19NU0RPU19QQVJUSVRJT049eQotQ09ORklHX05MUz1tCi1DT05GSUdfTkxTX0RFRkFVTFQ9Imlzbzg4NTktMSIKLUNPTkZJR19OTFNfQ09ERVBBR0VfNDM3PW0KLUNPTkZJR19OTFNfQ09ERVBBR0VfNzM3PW0KLUNPTkZJR19OTFNfQ09ERVBBR0VfNzc1PW0KLUNPTkZJR19OTFNfQ09ERVBBR0VfODUwPW0KLUNPTkZJR19OTFNfQ09ERVBBR0VfODUyPW0KLUNPTkZJR19OTFNfQ09ERVBBR0VfODU1PW0KLUNPTkZJR19OTFNfQ09ERVBBR0VfODU3PW0KLUNPTkZJR19OTFNfQ09ERVBBR0VfODYwPW0KLUNPTkZJR19OTFNfQ09ERVBBR0VfODYxPW0KLUNPTkZJR19OTFNfQ09ERVBBR0VfODYyPW0KLUNPTkZJR19OTFNfQ09ERVBBR0VfODYzPW0KLUNPTkZJR19OTFNfQ09ERVBBR0VfODY0PW0KLUNPTkZJR19OTFNfQ09ERVBBR0VfODY1PW0KLUNPTkZJR19OTFNfQ09ERVBBR0VfODY2PW0KLUNPTkZJR19OTFNfQ09ERVBBR0VfODY5PW0KLUNPTkZJR19OTFNfQ09ERVBBR0VfOTM2PW0KLUNPTkZJR19OTFNfQ09ERVBBR0VfOTUwPW0KLUNPTkZJR19OTFNfQ09ERVBBR0VfOTMyPW0KLUNPTkZJR19OTFNfQ09ERVBBR0VfOTQ5PW0KLUNPTkZJR19OTFNfQ09ERVBBR0VfODc0PW0KLUNPTkZJR19OTFNfSVNPODg1OV84PW0KLUNPTkZJR19OTFNfQ09ERVBBR0VfMTI1MD1tCi1DT05GSUdfTkxTX0NPREVQQUdFXzEyNTE9bQotQ09ORklHX05MU19BU0NJST1tCi1DT05GSUdfTkxTX0lTTzg4NTlfMT1tCi1DT05GSUdfTkxTX0lTTzg4NTlfMj1tCi1DT05GSUdfTkxTX0lTTzg4NTlfMz1tCi1DT05GSUdfTkxTX0lTTzg4NTlfND1tCi1DT05GSUdfTkxTX0lTTzg4NTlfNT1tCi1DT05GSUdfTkxTX0lTTzg4NTlfNj1tCi1DT05GSUdfTkxTX0lTTzg4NTlfNz1tCi1DT05GSUdfTkxTX0lTTzg4NTlfOT1tCi1DT05GSUdfTkxTX0lTTzg4NTlfMTM9bQotQ09ORklHX05MU19JU084ODU5XzE0PW0KLUNPTkZJR19OTFNfSVNPODg1OV8xNT1tCi1DT05GSUdfTkxTX0tPSThfUj1tCi1DT05GSUdfTkxTX0tPSThfVT1tCi1DT05GSUdfTkxTX1VURjg9bQotIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKLQotIwotIyBMaWJyYXJ5IHJvdXRpbmVzCi0jCi1DT05GSUdfQklUUkVWRVJTRT15Ci0jIENPTkZJR19HRU5FUklDX0ZJTkRfRklSU1RfQklUIGlzIG5vdCBzZXQKLUNPTkZJR19DUkNfQ0NJVFQ9bQotIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JDX1QxMERJRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkNfSVRVX1QgaXMgbm90IHNldAotQ09ORklHX0NSQzMyPXkKLSMgQ09ORklHX0NSQzcgaXMgbm90IHNldAotQ09ORklHX0xJQkNSQzMyQz1tCi1DT05GSUdfWkxJQl9JTkZMQVRFPW0KLUNPTkZJR19aTElCX0RFRkxBVEU9bQotQ09ORklHX1BMSVNUPXkKLUNPTkZJR19IQVNfSU9NRU09eQotQ09ORklHX0hBU19JT1BPUlQ9eQotQ09ORklHX0hBU19ETUE9eQotQ09ORklHX0hBVkVfTE1CPXkKLQotIwotIyBLZXJuZWwgaGFja2luZwotIwotIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAotQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQ9eQotQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKLUNPTkZJR19GUkFNRV9XQVJOPTEwMjQKLUNPTkZJR19NQUdJQ19TWVNSUT15Ci0jIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0Ci1DT05GSUdfREVCVUdfRlM9eQotIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0Ci1DT05GSUdfREVCVUdfS0VSTkVMPXkKLSMgQ09ORklHX0RFQlVHX1NISVJRIGlzIG5vdCBzZXQKLUNPTkZJR19ERVRFQ1RfU09GVExPQ0tVUD15Ci0jIENPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQyBpcyBub3Qgc2V0Ci1DT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUNfVkFMVUU9MAotQ09ORklHX1NDSEVEX0RFQlVHPXkKLSMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfVElNRVJfU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfT0JKRUNUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TTEFCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAotIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX01VVEVYRVMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTE9DS0lOR19BUElfU0VMRlRFU1RTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfQlVHVkVSQk9TRSBpcyBub3Qgc2V0Ci1DT05GSUdfREVCVUdfSU5GTz15Ci0jIENPTkZJR19ERUJVR19WTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19XUklURUNPVU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX01FTU9SWV9JTklUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAotIyBDT05GSUdfQk9PVF9QUklOVEtfREVMQVkgaXMgbm90IHNldAotIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKLUNPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSz15Ci1DT05GSUdfSEFWRV9GVFJBQ0U9eQotQ09ORklHX0hBVkVfRFlOQU1JQ19GVFJBQ0U9eQotIyBDT05GSUdfRlRSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDSEVEX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05URVhUX1NXSVRDSF9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9BUkNIX0tHREI9eQotIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TVEFDS09WRVJGTE9XIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1BBR0VBTExPQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT0RFX1BBVENISU5HX1NFTEZURVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZUUl9GSVhVUF9TRUxGVEVTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19YTU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lSUVNUQUNLUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSVJRX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JESV9TV0lUQ0ggaXMgbm90IHNldAotIyBDT05GSUdfQk9PVFhfVEVYVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfRUFSTFlfREVCVUcgaXMgbm90IHNldAotCi0jCi0jIFNlY3VyaXR5IG9wdGlvbnMKLSMKLSMgQ09ORklHX0tFWVMgaXMgbm90IHNldAotQ09ORklHX1NFQ1VSSVRZPXkKLUNPTkZJR19TRUNVUklUWV9ORVRXT1JLPXkKLSMgQ09ORklHX1NFQ1VSSVRZX05FVFdPUktfWEZSTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUyBpcyBub3Qgc2V0Ci1DT05GSUdfU0VDVVJJVFlfREVGQVVMVF9NTUFQX01JTl9BRERSPTAKLUNPTkZJR19DUllQVE89eQotCi0jCi0jIENyeXB0byBjb3JlIG9yIGhlbHBlcgotIwotQ09ORklHX0NSWVBUT19BTEdBUEk9eQotQ09ORklHX0NSWVBUT19BRUFEPW0KLUNPTkZJR19DUllQVE9fQkxLQ0lQSEVSPXkKLUNPTkZJR19DUllQVE9fSEFTSD15Ci1DT05GSUdfQ1JZUFRPX01BTkFHRVI9eQotIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fTlVMTD1tCi0jIENPTkZJR19DUllQVE9fQ1JZUFREIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fQVVUSEVOQz1tCi1DT05GSUdfQ1JZUFRPX1RFU1Q9bQotCi0jCi0jIEF1dGhlbnRpY2F0ZWQgRW5jcnlwdGlvbiB3aXRoIEFzc29jaWF0ZWQgRGF0YQotIwotIyBDT05GSUdfQ1JZUFRPX0NDTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fR0NNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TRVFJViBpcyBub3Qgc2V0Ci0KLSMKLSMgQmxvY2sgbW9kZXMKLSMKLUNPTkZJR19DUllQVE9fQ0JDPXkKLSMgQ09ORklHX0NSWVBUT19DVFIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NUUyBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX0VDQj1tCi0jIENPTkZJR19DUllQVE9fTFJXIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fUENCQz1tCi0jIENPTkZJR19DUllQVE9fWFRTIGlzIG5vdCBzZXQKLQotIwotIyBIYXNoIG1vZGVzCi0jCi1DT05GSUdfQ1JZUFRPX0hNQUM9eQotIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAotCi0jCi0jIERpZ2VzdAotIwotQ09ORklHX0NSWVBUT19DUkMzMkM9bQotQ09ORklHX0NSWVBUT19NRDQ9bQotQ09ORklHX0NSWVBUT19NRDU9eQotQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQz1tCi0jIENPTkZJR19DUllQVE9fUk1EMTI4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19STUQxNjAgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1JNRDI1NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fUk1EMzIwIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fU0hBMT1tCi1DT05GSUdfQ1JZUFRPX1NIQTI1Nj1tCi1DT05GSUdfQ1JZUFRPX1NIQTUxMj1tCi0jIENPTkZJR19DUllQVE9fVEdSMTkyIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fV1A1MTI9bQotCi0jCi0jIENpcGhlcnMKLSMKLUNPTkZJR19DUllQVE9fQUVTPW0KLUNPTkZJR19DUllQVE9fQU5VQklTPW0KLUNPTkZJR19DUllQVE9fQVJDND1tCi1DT05GSUdfQ1JZUFRPX0JMT1dGSVNIPW0KLSMgQ09ORklHX0NSWVBUT19DQU1FTExJQSBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX0NBU1Q1PW0KLUNPTkZJR19DUllQVE9fQ0FTVDY9bQotQ09ORklHX0NSWVBUT19ERVM9eQotIyBDT05GSUdfQ1JZUFRPX0ZDUllQVCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX0tIQVpBRD1tCi0jIENPTkZJR19DUllQVE9fU0FMU0EyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0VFRCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX1NFUlBFTlQ9bQotQ09ORklHX0NSWVBUT19URUE9bQotQ09ORklHX0NSWVBUT19UV09GSVNIPW0KLUNPTkZJR19DUllQVE9fVFdPRklTSF9DT01NT049bQotCi0jCi0jIENvbXByZXNzaW9uCi0jCi1DT05GSUdfQ1JZUFRPX0RFRkxBVEU9bQotIyBDT05GSUdfQ1JZUFRPX0xaTyBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX0hXPXkKLSMgQ09ORklHX0NSWVBUT19ERVZfSElGTl83OTVYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19ERVZfVEFMSVRPUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfQ0xPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfVklSVFVBTElaQVRJT04gaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2Eub3V0LmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vYS5vdXQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODljZWFkNi4uMDAwMDAwMAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vYS5vdXQuaAorKysgL2Rldi9udWxsCkBAIC0xLDIwICswLDAgQEAKLSNpZm5kZWYgX0FTTV9QT1dFUlBDX0FfT1VUX0gKLSNkZWZpbmUgX0FTTV9QT1dFUlBDX0FfT1VUX0gKLQotc3RydWN0IGV4ZWMKLXsKLQl1bnNpZ25lZCBsb25nIGFfaW5mbzsJLyogVXNlIG1hY3JvcyBOX01BR0lDLCBldGMgZm9yIGFjY2VzcyAqLwotCXVuc2lnbmVkIGFfdGV4dDsJLyogbGVuZ3RoIG9mIHRleHQsIGluIGJ5dGVzICovCi0JdW5zaWduZWQgYV9kYXRhOwkvKiBsZW5ndGggb2YgZGF0YSwgaW4gYnl0ZXMgKi8KLQl1bnNpZ25lZCBhX2JzczsJCS8qIGxlbmd0aCBvZiB1bmluaXRpYWxpemVkIGRhdGEgYXJlYSBmb3IgZmlsZSwgaW4gYnl0ZXMgKi8KLQl1bnNpZ25lZCBhX3N5bXM7CS8qIGxlbmd0aCBvZiBzeW1ib2wgdGFibGUgZGF0YSBpbiBmaWxlLCBpbiBieXRlcyAqLwotCXVuc2lnbmVkIGFfZW50cnk7CS8qIHN0YXJ0IGFkZHJlc3MgKi8KLQl1bnNpZ25lZCBhX3Ryc2l6ZTsJLyogbGVuZ3RoIG9mIHJlbG9jYXRpb24gaW5mbyBmb3IgdGV4dCwgaW4gYnl0ZXMgKi8KLQl1bnNpZ25lZCBhX2Ryc2l6ZTsJLyogbGVuZ3RoIG9mIHJlbG9jYXRpb24gaW5mbyBmb3IgZGF0YSwgaW4gYnl0ZXMgKi8KLX07Ci0KLSNkZWZpbmUgTl9UUlNJWkUoYSkJKChhKS5hX3Ryc2l6ZSkKLSNkZWZpbmUgTl9EUlNJWkUoYSkJKChhKS5hX2Ryc2l6ZSkKLSNkZWZpbmUgTl9TWU1TSVpFKGEpCSgoYSkuYV9zeW1zKQotCi0jZW5kaWYgLyogX0FTTV9QT1dFUlBDX0FfT1VUX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9jcHV0YWJsZS5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2NwdXRhYmxlLmgKaW5kZXggZWY4YTI0OC4uMWU5NGIwNyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2NwdXRhYmxlLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2NwdXRhYmxlLmgKQEAgLTYyLDYgKzYyLDcgQEAKIAlQUENfUE1DX0RFRkFVTFQgPSAwLAogCVBQQ19QTUNfSUJNID0gMSwKIAlQUENfUE1DX1BBNlQgPSAyLAorCVBQQ19QTUNfRzQgPSAzLAogfTsKIAogc3RydWN0IHB0X3JlZ3M7CkBAIC0xOTIsNiArMTkzLDcgQEAKICNkZWZpbmUgQ1BVX0ZUUl9OT19TTEJJRV9CCQlMT05HX0FTTV9DT05TVCgweDAwMDgwMDAwMDAwMDAwMDApCiAjZGVmaW5lIENQVV9GVFJfVlNYCQkJTE9OR19BU01fQ09OU1QoMHgwMDEwMDAwMDAwMDAwMDAwKQogI2RlZmluZSBDUFVfRlRSX1NBTwkJCUxPTkdfQVNNX0NPTlNUKDB4MDAyMDAwMDAwMDAwMDAwMCkKKyNkZWZpbmUgQ1BVX0ZUUl9DUF9VU0VfRENCVFoJCUxPTkdfQVNNX0NPTlNUKDB4MDA0MDAwMDAwMDAwMDAwMCkKIAogI2lmbmRlZiBfX0FTU0VNQkxZX18KIApAQCAtMzg3LDEwICszODksMTEgQEAKIAkgICAgQ1BVX0ZUUl9NTUNSQSB8IENQVV9GVFJfQ1RSTCkKICNkZWZpbmUgQ1BVX0ZUUlNfUE9XRVI0CShDUFVfRlRSX1VTRV9UQiB8IENQVV9GVFJfTFdTWU5DIHwgXAogCSAgICBDUFVfRlRSX0hQVEVfVEFCTEUgfCBDUFVfRlRSX1BQQ0FTX0FSQ0hfVjIgfCBDUFVfRlRSX0NUUkwgfCBcCi0JICAgIENQVV9GVFJfTU1DUkEpCisJICAgIENQVV9GVFJfTU1DUkEgfCBDUFVfRlRSX0NQX1VTRV9EQ0JUWikKICNkZWZpbmUgQ1BVX0ZUUlNfUFBDOTcwCShDUFVfRlRSX1VTRV9UQiB8IENQVV9GVFJfTFdTWU5DIHwgXAogCSAgICBDUFVfRlRSX0hQVEVfVEFCTEUgfCBDUFVfRlRSX1BQQ0FTX0FSQ0hfVjIgfCBDUFVfRlRSX0NUUkwgfCBcCi0JICAgIENQVV9GVFJfQUxUSVZFQ19DT01QIHwgQ1BVX0ZUUl9DQU5fTkFQIHwgQ1BVX0ZUUl9NTUNSQSkKKwkgICAgQ1BVX0ZUUl9BTFRJVkVDX0NPTVAgfCBDUFVfRlRSX0NBTl9OQVAgfCBDUFVfRlRSX01NQ1JBIHwgXAorCSAgICBDUFVfRlRSX0NQX1VTRV9EQ0JUWikKICNkZWZpbmUgQ1BVX0ZUUlNfUE9XRVI1CShDUFVfRlRSX1VTRV9UQiB8IENQVV9GVFJfTFdTWU5DIHwgXAogCSAgICBDUFVfRlRSX0hQVEVfVEFCTEUgfCBDUFVfRlRSX1BQQ0FTX0FSQ0hfVjIgfCBDUFVfRlRSX0NUUkwgfCBcCiAJICAgIENQVV9GVFJfTU1DUkEgfCBDUFVfRlRSX1NNVCB8IFwKQEAgLTQxMSw3ICs0MTQsOCBAQAogI2RlZmluZSBDUFVfRlRSU19DRUxMCShDUFVfRlRSX1VTRV9UQiB8IENQVV9GVFJfTFdTWU5DIHwgXAogCSAgICBDUFVfRlRSX0hQVEVfVEFCTEUgfCBDUFVfRlRSX1BQQ0FTX0FSQ0hfVjIgfCBDUFVfRlRSX0NUUkwgfCBcCiAJICAgIENQVV9GVFJfQUxUSVZFQ19DT01QIHwgQ1BVX0ZUUl9NTUNSQSB8IENQVV9GVFJfU01UIHwgXAotCSAgICBDUFVfRlRSX1BBVVNFX1pFUk8gfCBDUFVfRlRSX0NJX0xBUkdFX1BBR0UgfCBDUFVfRlRSX0NFTExfVEJfQlVHKQorCSAgICBDUFVfRlRSX1BBVVNFX1pFUk8gfCBDUFVfRlRSX0NJX0xBUkdFX1BBR0UgfCBcCisJICAgIENQVV9GVFJfQ0VMTF9UQl9CVUcgfCBDUFVfRlRSX0NQX1VTRV9EQ0JUWikKICNkZWZpbmUgQ1BVX0ZUUlNfUEE2VCAoQ1BVX0ZUUl9VU0VfVEIgfCBDUFVfRlRSX0xXU1lOQyB8IFwKIAkgICAgQ1BVX0ZUUl9IUFRFX1RBQkxFIHwgQ1BVX0ZUUl9QUENBU19BUkNIX1YyIHwgXAogCSAgICBDUFVfRlRSX0FMVElWRUNfQ09NUCB8IENQVV9GVFJfQ0lfTEFSR0VfUEFHRSB8IFwKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9kY3ItcmVncy5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2Rjci1yZWdzLmgKaW5kZXggZjE1Mjk2Yy4uODI4ZTNhYSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2Rjci1yZWdzLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2Rjci1yZWdzLmgKQEAgLTY4LDYgKzY4LDEzIEBACiAjZGVmaW5lIFNEUjBfVUFSVDMJCTB4MDEyMwogI2RlZmluZSBTRFIwX0NVU1QwCQkweDQwMDAKIAorLyogU0RSIGZvciA0MDVFWiAqLworI2RlZmluZSBEQ1JOX1NEUl9JQ0lOVFNUQVQJMHg0NTEwCisjZGVmaW5lIElDSU5UU1RBVF9JQ1JYCTB4ODAwMDAwMDAKKyNkZWZpbmUgSUNJTlRTVEFUX0lDVFgwCTB4NDAwMDAwMDAKKyNkZWZpbmUgSUNJTlRTVEFUX0lDVFgxIDB4MjAwMDAwMDAKKyNkZWZpbmUgSUNJTlRTVEFUX0lDVFgJMHg2MDAwMDAwMAorCiAvKiBTRFJzICg0NjBFWC80NjBHVCkgKi8KICNkZWZpbmUgU0RSMF9FVEhfQ0ZHCQkweDQxMDMKICNkZWZpbmUgU0RSMF9FVEhfQ0ZHX0VDUwkweDAwMDAwMTAwCS8qIEVNQUMgaW50IGNsayBzb3VyY2UgKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9kZXZpY2UuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9kZXZpY2UuaAppbmRleCAyMjhhYjJhLi5kZmQ1MDRjIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vZGV2aWNlLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2RldmljZS5oCkBAIC0xNiw5ICsxNiw2IEBACiAJLyogRE1BIG9wZXJhdGlvbnMgb24gdGhhdCBkZXZpY2UgKi8KIAlzdHJ1Y3QgZG1hX21hcHBpbmdfb3BzCSpkbWFfb3BzOwogCXZvaWQJCQkqZG1hX2RhdGE7Ci0KLQkvKiBOVU1BIG5vZGUgaWYgYXBwbGljYWJsZSAqLwotCWludAkJCW51bWFfbm9kZTsKIH07CiAKICNlbmRpZiAvKiBfQVNNX1BPV0VSUENfREVWSUNFX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9kbWEtbWFwcGluZy5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2RtYS1tYXBwaW5nLmgKaW5kZXggYzdjYTQ1Zi4uZmRkYjIyOSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2RtYS1tYXBwaW5nLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2RtYS1tYXBwaW5nLmgKQEAgLTQ0LDggKzQ0LDYgQEAKIAogI2VuZGlmIC8qICEgQ09ORklHX05PVF9DT0hFUkVOVF9DQUNIRSAqLwogCi0jaWZkZWYgQ09ORklHX1BQQzY0Ci0KIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBkZXZpY2VfdG9fbWFzayhzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CiAJaWYgKGRldi0+ZG1hX21hc2sgJiYgKmRldi0+ZG1hX21hc2spCkBAIC03Niw4ICs3NCwyNCBAQAogCQkJCXN0cnVjdCBkbWFfYXR0cnMgKmF0dHJzKTsKIAlpbnQJCSgqZG1hX3N1cHBvcnRlZCkoc3RydWN0IGRldmljZSAqZGV2LCB1NjQgbWFzayk7CiAJaW50CQkoKnNldF9kbWFfbWFzaykoc3RydWN0IGRldmljZSAqZGV2LCB1NjQgZG1hX21hc2spOworCWRtYV9hZGRyX3QgCSgqbWFwX3BhZ2UpKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHBhZ2UgKnBhZ2UsCisJCQkJdW5zaWduZWQgbG9uZyBvZmZzZXQsIHNpemVfdCBzaXplLAorCQkJCWVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbiwKKwkJCQlzdHJ1Y3QgZG1hX2F0dHJzICphdHRycyk7CisJdm9pZAkJKCp1bm1hcF9wYWdlKShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJZG1hX2FkZHJfdCBkbWFfYWRkcmVzcywgc2l6ZV90IHNpemUsCisJCQkJZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uLAorCQkJCXN0cnVjdCBkbWFfYXR0cnMgKmF0dHJzKTsKIH07CiAKKy8qCisgKiBBdmFpbGFibGUgZ2VuZXJpYyBzZXRzIG9mIG9wZXJhdGlvbnMKKyAqLworI2lmZGVmIENPTkZJR19QUEM2NAorZXh0ZXJuIHN0cnVjdCBkbWFfbWFwcGluZ19vcHMgZG1hX2lvbW11X29wczsKKyNlbmRpZgorZXh0ZXJuIHN0cnVjdCBkbWFfbWFwcGluZ19vcHMgZG1hX2RpcmVjdF9vcHM7CisKIHN0YXRpYyBpbmxpbmUgc3RydWN0IGRtYV9tYXBwaW5nX29wcyAqZ2V0X2RtYV9vcHMoc3RydWN0IGRldmljZSAqZGV2KQogewogCS8qIFdlIGRvbid0IGhhbmRsZSB0aGUgTlVMTCBkZXYgY2FzZSBmb3IgSVNBIGZvciBub3cuIFdlIGNvdWxkCkBAIC04NSw4ICs5OSwxOSBAQAogCSAqIG9ubHkgSVNBIERNQSBkZXZpY2Ugd2Ugc3VwcG9ydCBpcyB0aGUgZmxvcHB5IGFuZCB3ZSBoYXZlIGEgaGFjawogCSAqIGluIHRoZSBmbG9wcHkgZHJpdmVyIGRpcmVjdGx5IHRvIGdldCBhIGRldmljZSBmb3IgdXMuCiAJICovCi0JaWYgKHVubGlrZWx5KGRldiA9PSBOVUxMIHx8IGRldi0+YXJjaGRhdGEuZG1hX29wcyA9PSBOVUxMKSkKKworCWlmICh1bmxpa2VseShkZXYgPT0gTlVMTCkgfHwgZGV2LT5hcmNoZGF0YS5kbWFfb3BzID09IE5VTEwpIHsKKyNpZmRlZiBDT05GSUdfUFBDNjQKIAkJcmV0dXJuIE5VTEw7CisjZWxzZQorCQkvKiBVc2UgZGVmYXVsdCBvbiAzMi1iaXQgaWYgZG1hX29wcyBpcyBub3Qgc2V0IHVwICovCisJCS8qIFRPRE86IExvbmcgdGVybSwgd2Ugc2hvdWxkIGZpeCBkcml2ZXJzIHNvIHRoYXQgZGV2IGFuZAorCQkgKiBhcmNoZGF0YSBkbWFfb3BzIGFyZSBzZXQgdXAgZm9yIGFsbCBidXNlcy4KKwkJICovCisJCXJldHVybiAmZG1hX2RpcmVjdF9vcHM7CisjZW5kaWYKKwl9CisKIAlyZXR1cm4gZGV2LT5hcmNoZGF0YS5kbWFfb3BzOwogfQogCkBAIC0xMjMsNiArMTQ4LDEyIEBACiAJcmV0dXJuIDA7CiB9CiAKKy8qCisgKiBUT0RPOiBtYXBfL3VubWFwX3NpbmdsZSB3aWxsIGlkZWFsbHkgZ28gYXdheSwgdG8gYmUgY29tcGxldGVseQorICogcmVwbGFjZWQgYnkgbWFwL3VubWFwX3BhZ2UuICAgVW50aWwgdGhlbiwgd2UgYWxsb3cgZG1hX29wcyB0byBoYXZlCisgKiBvbmUgb3IgdGhlIG90aGVyLCBvciBib3RoIGJ5IGNoZWNraW5nIHRvIHNlZSBpZiB0aGUgc3BlY2lmaWMKKyAqIGZ1bmN0aW9uIHJlcXVlc3RlZCBleGlzdHM7IGFuZCBpZiBub3QsIGZhbGxpbmcgYmFjayBvbiB0aGUgb3RoZXIgc2V0LgorICovCiBzdGF0aWMgaW5saW5lIGRtYV9hZGRyX3QgZG1hX21hcF9zaW5nbGVfYXR0cnMoc3RydWN0IGRldmljZSAqZGV2LAogCQkJCQkgICAgICB2b2lkICpjcHVfYWRkciwKIAkJCQkJICAgICAgc2l6ZV90IHNpemUsCkBAIC0xMzIsNyArMTYzLDE0IEBACiAJc3RydWN0IGRtYV9tYXBwaW5nX29wcyAqZG1hX29wcyA9IGdldF9kbWFfb3BzKGRldik7CiAKIAlCVUdfT04oIWRtYV9vcHMpOwotCXJldHVybiBkbWFfb3BzLT5tYXBfc2luZ2xlKGRldiwgY3B1X2FkZHIsIHNpemUsIGRpcmVjdGlvbiwgYXR0cnMpOworCisJaWYgKGRtYV9vcHMtPm1hcF9zaW5nbGUpCisJCXJldHVybiBkbWFfb3BzLT5tYXBfc2luZ2xlKGRldiwgY3B1X2FkZHIsIHNpemUsIGRpcmVjdGlvbiwKKwkJCQkJICAgYXR0cnMpOworCisJcmV0dXJuIGRtYV9vcHMtPm1hcF9wYWdlKGRldiwgdmlydF90b19wYWdlKGNwdV9hZGRyKSwKKwkJCQkgKHVuc2lnbmVkIGxvbmcpY3B1X2FkZHIgJSBQQUdFX1NJWkUsIHNpemUsCisJCQkJIGRpcmVjdGlvbiwgYXR0cnMpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgZG1hX3VubWFwX3NpbmdsZV9hdHRycyhzdHJ1Y3QgZGV2aWNlICpkZXYsCkBAIC0xNDQsNyArMTgyLDEzIEBACiAJc3RydWN0IGRtYV9tYXBwaW5nX29wcyAqZG1hX29wcyA9IGdldF9kbWFfb3BzKGRldik7CiAKIAlCVUdfT04oIWRtYV9vcHMpOwotCWRtYV9vcHMtPnVubWFwX3NpbmdsZShkZXYsIGRtYV9hZGRyLCBzaXplLCBkaXJlY3Rpb24sIGF0dHJzKTsKKworCWlmIChkbWFfb3BzLT51bm1hcF9zaW5nbGUpIHsKKwkJZG1hX29wcy0+dW5tYXBfc2luZ2xlKGRldiwgZG1hX2FkZHIsIHNpemUsIGRpcmVjdGlvbiwgYXR0cnMpOworCQlyZXR1cm47CisJfQorCisJZG1hX29wcy0+dW5tYXBfcGFnZShkZXYsIGRtYV9hZGRyLCBzaXplLCBkaXJlY3Rpb24sIGF0dHJzKTsKIH0KIAogc3RhdGljIGlubGluZSBkbWFfYWRkcl90IGRtYV9tYXBfcGFnZV9hdHRycyhzdHJ1Y3QgZGV2aWNlICpkZXYsCkBAIC0xNTYsOCArMjAwLDEzIEBACiAJc3RydWN0IGRtYV9tYXBwaW5nX29wcyAqZG1hX29wcyA9IGdldF9kbWFfb3BzKGRldik7CiAKIAlCVUdfT04oIWRtYV9vcHMpOworCisJaWYgKGRtYV9vcHMtPm1hcF9wYWdlKQorCQlyZXR1cm4gZG1hX29wcy0+bWFwX3BhZ2UoZGV2LCBwYWdlLCBvZmZzZXQsIHNpemUsIGRpcmVjdGlvbiwKKwkJCQkJIGF0dHJzKTsKKwogCXJldHVybiBkbWFfb3BzLT5tYXBfc2luZ2xlKGRldiwgcGFnZV9hZGRyZXNzKHBhZ2UpICsgb2Zmc2V0LCBzaXplLAotCQkJZGlyZWN0aW9uLCBhdHRycyk7CisJCQkJICAgZGlyZWN0aW9uLCBhdHRycyk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBkbWFfdW5tYXBfcGFnZV9hdHRycyhzdHJ1Y3QgZGV2aWNlICpkZXYsCkBAIC0xNjksNiArMjE4LDEyIEBACiAJc3RydWN0IGRtYV9tYXBwaW5nX29wcyAqZG1hX29wcyA9IGdldF9kbWFfb3BzKGRldik7CiAKIAlCVUdfT04oIWRtYV9vcHMpOworCisJaWYgKGRtYV9vcHMtPnVubWFwX3BhZ2UpIHsKKwkJZG1hX29wcy0+dW5tYXBfcGFnZShkZXYsIGRtYV9hZGRyZXNzLCBzaXplLCBkaXJlY3Rpb24sIGF0dHJzKTsKKwkJcmV0dXJuOworCX0KKwogCWRtYV9vcHMtPnVubWFwX3NpbmdsZShkZXYsIGRtYV9hZGRyZXNzLCBzaXplLCBkaXJlY3Rpb24sIGF0dHJzKTsKIH0KIApAQCAtMjUzLDEyNiArMzA4LDYgQEAKIAlkbWFfdW5tYXBfc2dfYXR0cnMoZGV2LCBzZywgbmh3ZW50cmllcywgZGlyZWN0aW9uLCBOVUxMKTsKIH0KIAotLyoKLSAqIEF2YWlsYWJsZSBnZW5lcmljIHNldHMgb2Ygb3BlcmF0aW9ucwotICovCi1leHRlcm4gc3RydWN0IGRtYV9tYXBwaW5nX29wcyBkbWFfaW9tbXVfb3BzOwotZXh0ZXJuIHN0cnVjdCBkbWFfbWFwcGluZ19vcHMgZG1hX2RpcmVjdF9vcHM7Ci0KLSNlbHNlIC8qIENPTkZJR19QUEM2NCAqLwotCi0jZGVmaW5lIGRtYV9zdXBwb3J0ZWQoZGV2LCBtYXNrKQkoMSkKLQotc3RhdGljIGlubGluZSBpbnQgZG1hX3NldF9tYXNrKHN0cnVjdCBkZXZpY2UgKmRldiwgdTY0IGRtYV9tYXNrKQotewotCWlmICghZGV2LT5kbWFfbWFzayB8fCAhZG1hX3N1cHBvcnRlZChkZXYsIG1hc2spKQotCQlyZXR1cm4gLUVJTzsKLQotCSpkZXYtPmRtYV9tYXNrID0gZG1hX21hc2s7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkICpkbWFfYWxsb2NfY29oZXJlbnQoc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSwKLQkJCQkgICAgICAgZG1hX2FkZHJfdCAqIGRtYV9oYW5kbGUsCi0JCQkJICAgICAgIGdmcF90IGdmcCkKLXsKLSNpZmRlZiBDT05GSUdfTk9UX0NPSEVSRU5UX0NBQ0hFCi0JcmV0dXJuIF9fZG1hX2FsbG9jX2NvaGVyZW50KHNpemUsIGRtYV9oYW5kbGUsIGdmcCk7Ci0jZWxzZQotCXZvaWQgKnJldDsKLQkvKiBpZ25vcmUgcmVnaW9uIHNwZWNpZmllcnMgKi8KLQlnZnAgJj0gfihfX0dGUF9ETUEgfCBfX0dGUF9ISUdITUVNKTsKLQotCWlmIChkZXYgPT0gTlVMTCB8fCBkZXYtPmNvaGVyZW50X2RtYV9tYXNrIDwgMHhmZmZmZmZmZikKLQkJZ2ZwIHw9IEdGUF9ETUE7Ci0KLQlyZXQgPSAodm9pZCAqKV9fZ2V0X2ZyZWVfcGFnZXMoZ2ZwLCBnZXRfb3JkZXIoc2l6ZSkpOwotCi0JaWYgKHJldCAhPSBOVUxMKSB7Ci0JCW1lbXNldChyZXQsIDAsIHNpemUpOwotCQkqZG1hX2hhbmRsZSA9IHZpcnRfdG9fYnVzKHJldCk7Ci0JfQotCi0JcmV0dXJuIHJldDsKLSNlbmRpZgotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQKLWRtYV9mcmVlX2NvaGVyZW50KHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsIHZvaWQgKnZhZGRyLAotCQkgIGRtYV9hZGRyX3QgZG1hX2hhbmRsZSkKLXsKLSNpZmRlZiBDT05GSUdfTk9UX0NPSEVSRU5UX0NBQ0hFCi0JX19kbWFfZnJlZV9jb2hlcmVudChzaXplLCB2YWRkcik7Ci0jZWxzZQotCWZyZWVfcGFnZXMoKHVuc2lnbmVkIGxvbmcpdmFkZHIsIGdldF9vcmRlcihzaXplKSk7Ci0jZW5kaWYKLX0KLQotc3RhdGljIGlubGluZSBkbWFfYWRkcl90Ci1kbWFfbWFwX3NpbmdsZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKnB0ciwgc2l6ZV90IHNpemUsCi0JICAgICAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbikKLXsKLQlCVUdfT04oZGlyZWN0aW9uID09IERNQV9OT05FKTsKLQotCV9fZG1hX3N5bmMocHRyLCBzaXplLCBkaXJlY3Rpb24pOwotCi0JcmV0dXJuIHZpcnRfdG9fYnVzKHB0cik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBkbWFfdW5tYXBfc2luZ2xlKHN0cnVjdCBkZXZpY2UgKmRldiwgZG1hX2FkZHJfdCBkbWFfYWRkciwKLQkJCQkgICAgc2l6ZV90IHNpemUsCi0JCQkJICAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbikKLXsKLQkvKiBXZSBkbyBub3RoaW5nLiAqLwotfQotCi1zdGF0aWMgaW5saW5lIGRtYV9hZGRyX3QKLWRtYV9tYXBfcGFnZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBwYWdlICpwYWdlLAotCSAgICAgdW5zaWduZWQgbG9uZyBvZmZzZXQsIHNpemVfdCBzaXplLAotCSAgICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKQotewotCUJVR19PTihkaXJlY3Rpb24gPT0gRE1BX05PTkUpOwotCi0JX19kbWFfc3luY19wYWdlKHBhZ2UsIG9mZnNldCwgc2l6ZSwgZGlyZWN0aW9uKTsKLQotCXJldHVybiBwYWdlX3RvX2J1cyhwYWdlKSArIG9mZnNldDsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGRtYV91bm1hcF9wYWdlKHN0cnVjdCBkZXZpY2UgKmRldiwgZG1hX2FkZHJfdCBkbWFfYWRkcmVzcywKLQkJCQkgIHNpemVfdCBzaXplLAotCQkJCSAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKQotewotCS8qIFdlIGRvIG5vdGhpbmcuICovCi19Ci0KLXN0YXRpYyBpbmxpbmUgaW50Ci1kbWFfbWFwX3NnKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZ2wsIGludCBuZW50cywKLQkgICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24pCi17Ci0Jc3RydWN0IHNjYXR0ZXJsaXN0ICpzZzsKLQlpbnQgaTsKLQotCUJVR19PTihkaXJlY3Rpb24gPT0gRE1BX05PTkUpOwotCi0JZm9yX2VhY2hfc2coc2dsLCBzZywgbmVudHMsIGkpIHsKLQkJQlVHX09OKCFzZ19wYWdlKHNnKSk7Ci0JCV9fZG1hX3N5bmNfcGFnZShzZ19wYWdlKHNnKSwgc2ctPm9mZnNldCwgc2ctPmxlbmd0aCwgZGlyZWN0aW9uKTsKLQkJc2ctPmRtYV9hZGRyZXNzID0gcGFnZV90b19idXMoc2dfcGFnZShzZykpICsgc2ctPm9mZnNldDsKLQl9Ci0KLQlyZXR1cm4gbmVudHM7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBkbWFfdW5tYXBfc2coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLAotCQkJCWludCBuaHdlbnRyaWVzLAotCQkJCWVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbikKLXsKLQkvKiBXZSBkb24ndCBkbyBhbnl0aGluZyBoZXJlLiAqLwotfQotCi0jZW5kaWYgLyogQ09ORklHX1BQQzY0ICovCi0KIHN0YXRpYyBpbmxpbmUgdm9pZCBkbWFfc3luY19zaW5nbGVfZm9yX2NwdShzdHJ1Y3QgZGV2aWNlICpkZXYsCiAJCWRtYV9hZGRyX3QgZG1hX2hhbmRsZSwgc2l6ZV90IHNpemUsCiAJCWVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbikKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9lbGYuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9lbGYuaAppbmRleCA2NGM2ZWUyLi5kODEyOTI5IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vZWxmLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2VsZi5oCkBAIC0yMzIsNyArMjMyLDcgQEAKICNlbmRpZiAvKiBfX3Bvd2VycGM2NF9fICovCiAKICNpZmRlZiBfX3Bvd2VycGM2NF9fCi0jIGRlZmluZSBTRVRfUEVSU09OQUxJVFkoZXgsIGliY3MyKQkJCQlcCisjIGRlZmluZSBTRVRfUEVSU09OQUxJVFkoZXgpCQkJCQlcCiBkbyB7CQkJCQkJCQlcCiAJdW5zaWduZWQgbG9uZyBuZXdfZmxhZ3MgPSAwOwkJCQlcCiAJaWYgKChleCkuZV9pZGVudFtFSV9DTEFTU10gPT0gRUxGQ0xBU1MzMikJCVwKQEAgLTI1Niw3ICsyNTYsNyBAQAogIyBkZWZpbmUgZWxmX3JlYWRfaW1wbGllc19leGVjKGV4LCBleGVjX3N0aykgKHRlc3RfdGhyZWFkX2ZsYWcoVElGXzMyQklUKSA/IFwKIAkJKGV4ZWNfc3RrICE9IEVYU1RBQ0tfRElTQUJMRV9YKSA6IDApCiAjZWxzZSAKLSMgZGVmaW5lIFNFVF9QRVJTT05BTElUWShleCwgaWJjczIpIHNldF9wZXJzb25hbGl0eSgoaWJjczIpP1BFUl9TVlI0OlBFUl9MSU5VWCkKKyMgZGVmaW5lIFNFVF9QRVJTT05BTElUWShleCkgc2V0X3BlcnNvbmFsaXR5KFBFUl9MSU5VWCkKICNlbmRpZiAvKiBfX3Bvd2VycGM2NF9fICovCiAKIGV4dGVybiBpbnQgZGNhY2hlX2JzaXplOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2V4Y2VwdGlvbi5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2V4Y2VwdGlvbi5oCmluZGV4IDMyOTE0OGIuLmQzZDQ1MzQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9leGNlcHRpb24uaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vZXhjZXB0aW9uLmgKQEAgLTUzLDE0ICs1Myw4IEBACiAgKiBsb3cgaGFsZndvcmQgb2YgdGhlIGFkZHJlc3MsIGJ1dCBmb3IgS2R1bXAgd2UgbmVlZCB0aGUgd2hvbGUgbG93CiAgKiB3b3JkLgogICovCi0jaWZkZWYgQ09ORklHX0NSQVNIX0RVTVAKICNkZWZpbmUgTE9BRF9IQU5ETEVSKHJlZywgbGFiZWwpCQkJCQlcCi0Jb3JpcwlyZWcscmVnLChsYWJlbClAaDsJLyogdmlydCBhZGRyIG9mIGhhbmRsZXIgLi4uICovCVwKLQlvcmkJcmVnLHJlZywobGFiZWwpQGw7CS8qIC4uIGFuZCB0aGUgcmVzdCAqLwotI2Vsc2UKLSNkZWZpbmUgTE9BRF9IQU5ETEVSKHJlZywgbGFiZWwpCQkJCQlcCi0Jb3JpCXJlZyxyZWcsKGxhYmVsKUBsOwkvKiB2aXJ0IGFkZHIgb2YgaGFuZGxlciAuLi4gKi8KLSNlbmRpZgorCWFkZGkJcmVnLHJlZywobGFiZWwpLV9zdGV4dDsJLyogdmlydCBhZGRyIG9mIGhhbmRsZXIgLi4uICovCiAKICNkZWZpbmUgRVhDRVBUSU9OX1BST0xPR18xKGFyZWEpCQkJCVwKIAltZnNwcglyMTMsU1BSTl9TUFJHMzsJCS8qIGdldCBwYWNhIGFkZHJlc3MgaW50byByMTMgKi8JXApAQCAtNzIsMzcgKzY2LDEyIEBACiAJc3RkCXI5LGFyZWErRVhfUjEzKHIxMyk7CQkJCQlcCiAJbWZjcglyOQogCi0vKgotICogRXF1YWwgdG8gRVhDRVBUSU9OX1BST0xPR19QU0VSSUVTLCBleGNlcHQgdGhhdCBpdCBmb3JjZXMgNjRiaXQgbW9kZS4KLSAqIFRoZSBmaXJtd2FyZSBjYWxscyB0aGUgcmVnaXN0ZXJlZCBzeXN0ZW1fcmVzZXRfZndubWkgYW5kCi0gKiBtYWNoaW5lX2NoZWNrX2Z3bm1pIGhhbmRsZXJzIGluIDMyYml0IG1vZGUgaWYgdGhlIGNwdSBoYXBwZW5zIHRvIHJ1bgotICogYSAzMmJpdCBhcHBsaWNhdGlvbiBhdCB0aGUgdGltZSBvZiB0aGUgZXZlbnQuCi0gKiBUaGlzIGZpcm13YXJlIGJ1ZyBpcyBwcmVzZW50IG9uIFBPV0VSNCBhbmQgSlMyMC4KLSAqLwotI2RlZmluZSBFWENFUFRJT05fUFJPTE9HX1BTRVJJRVNfRk9SQ0VfNjRCSVQoYXJlYSwgbGFiZWwpCQlcCi0JRVhDRVBUSU9OX1BST0xPR18xKGFyZWEpOwkJCQkJXAotCWNscnJkaQlyMTIscjEzLDMyOwkJLyogZ2V0IGhpZ2ggcGFydCBvZiAmbGFiZWwgKi8JXAotCW1mbXNyCXIxMDsJCQkJCQkJXAotCS8qIGZvcmNlIDY0Yml0IG1vZGUgKi8JCQkJCQlcCi0JbGkJcjExLDU7CQkJLyogTVNSX1NGX0xHfE1TUl9JU0ZfTEcgKi8JXAotCXJsZGltaQlyMTAscjExLDYxLDA7CQkvKiBpbnNlcnQgaW50byB0b3AgMyBiaXRzICovCVwKLQkvKiBkb25lIDY0Yml0IG1vZGUgKi8JCQkJCQlcCi0JbWZzcHIJcjExLFNQUk5fU1JSMDsJCS8qIHNhdmUgU1JSMCAqLwkJCVwKLQlMT0FEX0hBTkRMRVIocjEyLGxhYmVsKQkJCQkJCVwKLQlvcmkJcjEwLHIxMCxNU1JfSVJ8TVNSX0RSfE1TUl9SSTsJCQkJXAotCW10c3ByCVNQUk5fU1JSMCxyMTI7CQkJCQkJXAotCW1mc3ByCXIxMixTUFJOX1NSUjE7CQkvKiBhbmQgU1JSMSAqLwkJCVwKLQltdHNwcglTUFJOX1NSUjEscjEwOwkJCQkJCVwKLQlyZmlkOwkJCQkJCQkJXAotCWIJLgkvKiBwcmV2ZW50IHNwZWN1bGF0aXZlIGV4ZWN1dGlvbiAqLwotCiAjZGVmaW5lIEVYQ0VQVElPTl9QUk9MT0dfUFNFUklFUyhhcmVhLCBsYWJlbCkJCQkJXAogCUVYQ0VQVElPTl9QUk9MT0dfMShhcmVhKTsJCQkJCVwKLQljbHJyZGkJcjEyLHIxMywzMjsJCS8qIGdldCBoaWdoIHBhcnQgb2YgJmxhYmVsICovCVwKLQltZm1zcglyMTA7CQkJCQkJCVwKKwlsZAlyMTIsUEFDQUtCQVNFKHIxMyk7CS8qIGdldCBoaWdoIHBhcnQgb2YgJmxhYmVsICovCVwKKwlsZAlyMTAsUEFDQUtNU1IocjEzKTsJLyogZ2V0IE1TUiB2YWx1ZSBmb3Iga2VybmVsICovCVwKIAltZnNwcglyMTEsU1BSTl9TUlIwOwkJLyogc2F2ZSBTUlIwICovCQkJXAogCUxPQURfSEFORExFUihyMTIsbGFiZWwpCQkJCQkJXAotCW9yaQlyMTAscjEwLE1TUl9JUnxNU1JfRFJ8TVNSX1JJOwkJCQlcCiAJbXRzcHIJU1BSTl9TUlIwLHIxMjsJCQkJCQlcCiAJbWZzcHIJcjEyLFNQUk5fU1JSMTsJCS8qIGFuZCBTUlIxICovCQkJXAogCW10c3ByCVNQUk5fU1JSMSxyMTA7CQkJCQkJXApAQCAtMjEwLDExICsxNzksMTAgQEAKIAlzdGQJcjEwLFBBQ0FfRVhHRU4rRVhfUjEzKHIxMyk7CQkJCVwKIAlzdGQJcjExLFBBQ0FfRVhHRU4rRVhfUjExKHIxMyk7CQkJCVwKIAlzdGQJcjEyLFBBQ0FfRVhHRU4rRVhfUjEyKHIxMyk7CQkJCVwKLQljbHJyZGkJcjEyLHIxMywzMjsJCS8qIGdldCBoaWdoIHBhcnQgb2YgJmxhYmVsICovCVwKLQltZm1zcglyMTA7CQkJCQkJCVwKKwlsZAlyMTIsUEFDQUtCQVNFKHIxMyk7CS8qIGdldCBoaWdoIHBhcnQgb2YgJmxhYmVsICovCVwKKwlsZAlyMTAsUEFDQUtNU1IocjEzKTsJLyogZ2V0IE1TUiB2YWx1ZSBmb3Iga2VybmVsICovCVwKIAltZnNwcglyMTEsU1BSTl9TUlIwOwkJLyogc2F2ZSBTUlIwICovCQkJXAogCUxPQURfSEFORExFUihyMTIsbGFiZWwjI19jb21tb24pCQkJCVwKLQlvcmkJcjEwLHIxMCxNU1JfSVJ8TVNSX0RSfE1TUl9SSTsJCQkJXAogCW10c3ByCVNQUk5fU1JSMCxyMTI7CQkJCQkJXAogCW1mc3ByCXIxMixTUFJOX1NSUjE7CQkvKiBhbmQgU1JSMSAqLwkJCVwKIAltdHNwcglTUFJOX1NSUjEscjEwOwkJCQkJCVwKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9mc2xfbGJjLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vZnNsX2xiYy5oCmluZGV4IDMwM2Y1NDguLjYzYTRmNzcgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9mc2xfbGJjLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2ZzbF9sYmMuaApAQCAtMjMsOSArMjMsOSBAQAogI2lmbmRlZiBfX0FTTV9GU0xfTEJDX0gKICNkZWZpbmUgX19BU01fRlNMX0xCQ19ICiAKKyNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KLSNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgogCiBzdHJ1Y3QgZnNsX2xiY19iYW5rIHsKIAlfX2JlMzIgYnI7ICAgICAgICAgICAgIC8qKjwgQmFzZSBSZWdpc3RlciAgKi8KQEAgLTIyNyw5ICsyMjcsNiBAQAogCXU4IHJlczhbMHhGMDBdOwogfTsKIAotZXh0ZXJuIHN0cnVjdCBmc2xfbGJjX3JlZ3MgX19pb21lbSAqZnNsX2xiY19yZWdzOwotZXh0ZXJuIHNwaW5sb2NrX3QgZnNsX2xiY19sb2NrOwotCiAvKgogICogRlNMIFVQTSByb3V0aW5lcwogICovCkBAIC0yNjgsNDQgKzI2NSw3IEBACiAJCWNwdV9yZWxheCgpOwogfQogCi0vKioKLSAqIGZzbF91cG1fcnVuX3BhdHRlcm4gLSBhY3R1YWxseSBydW4gYW4gVVBNIHBhdHRlcm4KLSAqIEB1cG06CXBvaW50ZXIgdG8gdGhlIGZzbF91cG0gc3RydWN0dXJlIG9idGFpbmVkIHZpYSBmc2xfdXBtX2ZpbmQKLSAqIEBpb19iYXNlOglyZW1hcHBlZCBwb2ludGVyIHRvIHdoZXJlIG1lbW9yeSBhY2Nlc3Mgc2hvdWxkIGhhcHBlbgotICogQG1hcjoJTUFSIHJlZ2lzdGVyIGNvbnRlbnQgZHVyaW5nIHBhdHRlcm4gZXhlY3V0aW9uCi0gKgotICogVGhpcyBmdW5jdGlvbiB0cmlnZ2VycyBkdW1teSB3cml0ZSB0byB0aGUgbWVtb3J5IHNwZWNpZmllZCBieSB0aGUgaW9fYmFzZSwKLSAqIHRodXMgVVBNIHBhdHRlcm4gYWN0dWFsbHkgZXhlY3V0ZWQuIE5vdGUgdGhhdCBtYXIgdXNhZ2UgZGVwZW5kcyBvbiB0aGUKLSAqIHByZS1wcm9ncmFtbWVkIEFNWCBiaXRzIGluIHRoZSBVUE0gUkFNLgotICovCi1zdGF0aWMgaW5saW5lIGludCBmc2xfdXBtX3J1bl9wYXR0ZXJuKHN0cnVjdCBmc2xfdXBtICp1cG0sCi0JCQkJICAgICAgdm9pZCBfX2lvbWVtICppb19iYXNlLCB1MzIgbWFyKQotewotCWludCByZXQgPSAwOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmZnNsX2xiY19sb2NrLCBmbGFncyk7Ci0KLQlvdXRfYmUzMigmZnNsX2xiY19yZWdzLT5tYXIsIG1hciA8PCAoMzIgLSB1cG0tPndpZHRoKSk7Ci0KLQlzd2l0Y2ggKHVwbS0+d2lkdGgpIHsKLQljYXNlIDg6Ci0JCW91dF84KGlvX2Jhc2UsIDB4MCk7Ci0JCWJyZWFrOwotCWNhc2UgMTY6Ci0JCW91dF9iZTE2KGlvX2Jhc2UsIDB4MCk7Ci0JCWJyZWFrOwotCWNhc2UgMzI6Ci0JCW91dF9iZTMyKGlvX2Jhc2UsIDB4MCk7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXJldCA9IC1FSU5WQUw7Ci0JCWJyZWFrOwotCX0KLQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmZzbF9sYmNfbG9jaywgZmxhZ3MpOwotCi0JcmV0dXJuIHJldDsKLX0KK2V4dGVybiBpbnQgZnNsX3VwbV9ydW5fcGF0dGVybihzdHJ1Y3QgZnNsX3VwbSAqdXBtLCB2b2lkIF9faW9tZW0gKmlvX2Jhc2UsCisJCQkgICAgICAgdTMyIG1hcik7CiAKICNlbmRpZiAvKiBfX0FTTV9GU0xfTEJDX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9oaWdobWVtLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vaGlnaG1lbS5oCmluZGV4IDVkOTliNjQ4Li45MWM1ODk1MiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2hpZ2htZW0uaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vaGlnaG1lbS5oCkBAIC04NCw3ICs4NCw3IEBACiAjaWZkZWYgQ09ORklHX0RFQlVHX0hJR0hNRU0KIAlCVUdfT04oIXB0ZV9ub25lKCooa21hcF9wdGUtaWR4KSkpOwogI2VuZGlmCi0Jc2V0X3B0ZV9hdCgmaW5pdF9tbSwgdmFkZHIsIGttYXBfcHRlLWlkeCwgbWtfcHRlKHBhZ2UsIHByb3QpKTsKKwlfX3NldF9wdGVfYXQoJmluaXRfbW0sIHZhZGRyLCBrbWFwX3B0ZS1pZHgsIG1rX3B0ZShwYWdlLCBwcm90KSk7CiAJZmx1c2hfdGxiX3BhZ2UoTlVMTCwgdmFkZHIpOwogCiAJcmV0dXJuICh2b2lkKikgdmFkZHI7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vaW8uaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9pby5oCmluZGV4IDc3YzdmYTAuLjA4MjY2ZDIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9pby5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9pby5oCkBAIC03MTEsNyArNzExLDcgQEAKIC8qCiAgKiBDaGFuZ2UgInN0cnVjdCBwYWdlIiB0byBwaHlzaWNhbCBhZGRyZXNzLgogICovCi0jZGVmaW5lIHBhZ2VfdG9fcGh5cyhwYWdlKQkocGFnZV90b19wZm4ocGFnZSkgPDwgUEFHRV9TSElGVCkKKyNkZWZpbmUgcGFnZV90b19waHlzKHBhZ2UpCSgocGh5c19hZGRyX3QpcGFnZV90b19wZm4ocGFnZSkgPDwgUEFHRV9TSElGVCkKIAogLyogV2UgZG8gTk9UIHdhbnQgdmlydHVhbCBtZXJnaW5nLCBpdCB3b3VsZCBwdXQgdG9vIG11Y2ggcHJlc3N1cmUgb24KICAqIG91ciBpb21tdSBhbGxvY2F0b3IuIEluc3RlYWQsIHdlIHdhbnQgZHJpdmVycyB0byBiZSBzbWFydCBlbm91Z2gKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9pcnEuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9pcnEuaAppbmRleCBhMzcyZjc2Li4wYTUxMzc2IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vaXJxLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2lycS5oCkBAIC0yMzYsMTUgKzIzNiwyNyBAQAogZXh0ZXJuIHVuc2lnbmVkIGludCBpcnFfY3JlYXRlX2RpcmVjdF9tYXBwaW5nKHN0cnVjdCBpcnFfaG9zdCAqaG9zdCk7CiAKIC8qKgotICogaXJxX3JhZGl4X3Jldm1hcCAtIEZpbmQgYSBsaW51eCB2aXJxIGZyb20gYSBodyBpcnEgbnVtYmVyLgorICogaXJxX3JhZGl4X3Jldm1hcF9pbnNlcnQgLSBJbnNlcnQgYSBodyBpcnEgdG8gbGludXggdmlycSBudW1iZXIgbWFwcGluZy4KKyAqIEBob3N0OiBob3N0IG93bmluZyB0aGlzIGhhcmR3YXJlIGludGVycnVwdAorICogQHZpcnE6IGxpbnV4IGlycSBudW1iZXIKKyAqIEBod2lycTogaGFyZHdhcmUgaXJxIG51bWJlciBpbiB0aGF0IGhvc3Qgc3BhY2UKKyAqCisgKiBUaGlzIGlzIGZvciB1c2UgYnkgaXJxIGNvbnRyb2xsZXJzIHRoYXQgdXNlIGEgcmFkaXggdHJlZSByZXZlcnNlCisgKiBtYXBwaW5nIGZvciBmYXN0IGxvb2t1cC4KKyAqLworZXh0ZXJuIHZvaWQgaXJxX3JhZGl4X3Jldm1hcF9pbnNlcnQoc3RydWN0IGlycV9ob3N0ICpob3N0LCB1bnNpZ25lZCBpbnQgdmlycSwKKwkJCQkgICAgaXJxX2h3X251bWJlcl90IGh3aXJxKTsKKworLyoqCisgKiBpcnFfcmFkaXhfcmV2bWFwX2xvb2t1cCAtIEZpbmQgYSBsaW51eCB2aXJxIGZyb20gYSBodyBpcnEgbnVtYmVyLgogICogQGhvc3Q6IGhvc3Qgb3duaW5nIHRoaXMgaGFyZHdhcmUgaW50ZXJydXB0CiAgKiBAaHdpcnE6IGhhcmR3YXJlIGlycSBudW1iZXIgaW4gdGhhdCBob3N0IHNwYWNlCiAgKgogICogVGhpcyBpcyBhIGZhc3QgcGF0aCwgZm9yIHVzZSBieSBpcnEgY29udHJvbGxlciBjb2RlIHRoYXQgdXNlcyByYWRpeCB0cmVlCiAgKiByZXZtYXBzCiAgKi8KLWV4dGVybiB1bnNpZ25lZCBpbnQgaXJxX3JhZGl4X3Jldm1hcChzdHJ1Y3QgaXJxX2hvc3QgKmhvc3QsCi0JCQkJICAgICBpcnFfaHdfbnVtYmVyX3QgaHdpcnEpOworZXh0ZXJuIHVuc2lnbmVkIGludCBpcnFfcmFkaXhfcmV2bWFwX2xvb2t1cChzdHJ1Y3QgaXJxX2hvc3QgKmhvc3QsCisJCQkJCSAgICBpcnFfaHdfbnVtYmVyX3QgaHdpcnEpOwogCiAvKioKICAqIGlycV9saW5lYXJfcmV2bWFwIC0gRmluZCBhIGxpbnV4IHZpcnEgZnJvbSBhIGh3IGlycSBudW1iZXIuCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20va3ZtX2hvc3QuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9rdm1faG9zdC5oCmluZGV4IDI2NTVlMmEuLjM0YjUyYjcgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9rdm1faG9zdC5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9rdm1faG9zdC5oCkBAIC04MSwxMSArODEsMTcgQEAKIAlzdHJ1Y3QgdGxiZSBzaGFkb3dfdGxiW1BQQzQ0eF9UTEJfU0laRV07CiAJLyogUGFnZXMgd2hpY2ggYXJlIHJlZmVyZW5jZWQgaW4gdGhlIHNoYWRvdyBUTEIuICovCiAJc3RydWN0IHBhZ2UgKnNoYWRvd19wYWdlc1tQUEM0NHhfVExCX1NJWkVdOwotCS8qIENvcHkgb2YgdGhlIGhvc3QncyBUTEIuICovCi0Jc3RydWN0IHRsYmUgaG9zdF90bGJbUFBDNDR4X1RMQl9TSVpFXTsKKworCS8qIFRyYWNrIHdoaWNoIFRMQiBlbnRyaWVzIHdlJ3ZlIG1vZGlmaWVkIGluIHRoZSBjdXJyZW50IGV4aXQuICovCisJdTggc2hhZG93X3RsYl9tb2RbUFBDNDR4X1RMQl9TSVpFXTsKIAogCXUzMiBob3N0X3N0YWNrOwogCXUzMiBob3N0X3BpZDsKKwl1MzIgaG9zdF9kYmNyMDsKKwl1MzIgaG9zdF9kYmNyMTsKKwl1MzIgaG9zdF9kYmNyMjsKKwl1MzIgaG9zdF9pYWNbNF07CisJdTMyIGhvc3RfbXNyOwogCiAJdTY0IGZwclszMl07CiAJdTMyIGdwclszMl07CkBAIC0xMjMsNyArMTI5LDExIEBACiAJdTMyIGl2b3JbMTZdOwogCXUzMiBpdnByOwogCXUzMiBwaXI7CisKKwl1MzIgc2hhZG93X3BpZDsKIAl1MzIgcGlkOworCXUzMiBzd2FwX3BpZDsKKwogCXUzMiBwdnI7CiAJdTMyIGNjcjA7CiAJdTMyIGNjcjE7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20va3ZtX3BwYy5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2t2bV9wcGMuaAppbmRleCBhOGIwNjg3Li44OTMxYmE3IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20va3ZtX3BwYy5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9rdm1fcHBjLmgKQEAgLTY0LDYgKzY0LDEwIEBACiBleHRlcm4gdm9pZCBrdm1wcGNfbW11X2ludmFsaWRhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBndmFfdCBlYWRkciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBndmFfdCBlZW5kLCB1MzIgYXNpZCk7CiBleHRlcm4gdm9pZCBrdm1wcGNfbW11X3ByaXZfc3dpdGNoKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IHVzZXJtb2RlKTsKK2V4dGVybiB2b2lkIGt2bXBwY19tbXVfc3dpdGNoX3BpZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiBwaWQpOworCisvKiBYWFggQm9vayBFIHNwZWNpZmljICovCitleHRlcm4gdm9pZCBrdm1wcGNfdGxiZV9zZXRfbW9kaWZpZWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBpbnQgaSk7CiAKIGV4dGVybiB2b2lkIGt2bXBwY19jaGVja19hbmRfZGVsaXZlcl9pbnRlcnJ1cHRzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CiAKQEAgLTkyLDQgKzk2LDEyIEBACiAJCWt2bV92Y3B1X2Jsb2NrKHZjcHUpOwogfQogCitzdGF0aWMgaW5saW5lIHZvaWQga3ZtcHBjX3NldF9waWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgbmV3X3BpZCkKK3sKKwlpZiAodmNwdS0+YXJjaC5waWQgIT0gbmV3X3BpZCkgeworCQl2Y3B1LT5hcmNoLnBpZCA9IG5ld19waWQ7CisJCXZjcHUtPmFyY2guc3dhcF9waWQgPSAxOworCX0KK30KKwogI2VuZGlmIC8qIF9fUE9XRVJQQ19LVk1fUFBDX0hfXyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL21hY2hkZXAuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9tYWNoZGVwLmgKaW5kZXggODkzYWFmZC4uMjc0MGM0NCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL21hY2hkZXAuaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vbWFjaGRlcC5oCkBAIC04OCw4ICs4OCw2IEBACiAJdW5zaWduZWQgbG9uZwkoKnRjZV9nZXQpKHN0cnVjdCBpb21tdV90YWJsZSAqdGJsLAogCQkJCSAgICBsb25nIGluZGV4KTsKIAl2b2lkCQkoKnRjZV9mbHVzaCkoc3RydWN0IGlvbW11X3RhYmxlICp0YmwpOwotCXZvaWQJCSgqcGNpX2RtYV9kZXZfc2V0dXApKHN0cnVjdCBwY2lfZGV2ICpkZXYpOwotCXZvaWQJCSgqcGNpX2RtYV9idXNfc2V0dXApKHN0cnVjdCBwY2lfYnVzICpidXMpOwogCiAJdm9pZCBfX2lvbWVtICoJKCppb3JlbWFwKShwaHlzX2FkZHJfdCBhZGRyLCB1bnNpZ25lZCBsb25nIHNpemUsCiAJCQkJICAgdW5zaWduZWQgbG9uZyBmbGFncyk7CkBAIC0xMDEsNiArOTksOSBAQAogI2VuZGlmCiAjZW5kaWYgLyogQ09ORklHX1BQQzY0ICovCiAKKwl2b2lkCQkoKnBjaV9kbWFfZGV2X3NldHVwKShzdHJ1Y3QgcGNpX2RldiAqZGV2KTsKKwl2b2lkCQkoKnBjaV9kbWFfYnVzX3NldHVwKShzdHJ1Y3QgcGNpX2J1cyAqYnVzKTsKKwogCWludAkJKCpwcm9iZSkodm9pZCk7CiAJdm9pZAkJKCpzZXR1cF9hcmNoKSh2b2lkKTsgLyogT3B0aW9uYWwsIG1heSBiZSBOVUxMICovCiAJdm9pZAkJKCppbml0X2Vhcmx5KSh2b2lkKTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9tbWFuLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vbW1hbi5oCmluZGV4IDkyMDlmNzUuLmU3Yjk5YmEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9tbWFuLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL21tYW4uaApAQCAtNDQsNyArNDQsNyBAQAogCiBzdGF0aWMgaW5saW5lIHBncHJvdF90IGFyY2hfdm1fZ2V0X3BhZ2VfcHJvdCh1bnNpZ25lZCBsb25nIHZtX2ZsYWdzKQogewotCXJldHVybiAodm1fZmxhZ3MgJiBWTV9TQU8pID8gX19wZ3Byb3QoX1BBR0VfU0FPKSA6IDA7CisJcmV0dXJuICh2bV9mbGFncyAmIFZNX1NBTykgPyBfX3BncHJvdChfUEFHRV9TQU8pIDogX19wZ3Byb3QoMCk7CiB9CiAjZGVmaW5lIGFyY2hfdm1fZ2V0X3BhZ2VfcHJvdCh2bV9mbGFncykgYXJjaF92bV9nZXRfcGFnZV9wcm90KHZtX2ZsYWdzKQogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vbW11LWhhc2g2NC5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL21tdS1oYXNoNjQuaAppbmRleCBjMmRmNTNjLi41YTQ0MTc0IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vbW11LWhhc2g2NC5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9tbXUtaGFzaDY0LmgKQEAgLTQzNyw3ICs0MzcsNyBAQAogCX0pCiAjZW5kaWYgLyogMSAqLwogCi0vKiBUaGlzIGlzIG9ubHkgdmFsaWQgZm9yIGFkZHJlc3NlcyA+PSBLRVJORUxCQVNFICovCisvKiBUaGlzIGlzIG9ubHkgdmFsaWQgZm9yIGFkZHJlc3NlcyA+PSBQQUdFX09GRlNFVCAqLwogc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGdldF9rZXJuZWxfdnNpZCh1bnNpZ25lZCBsb25nIGVhLCBpbnQgc3NpemUpCiB7CiAJaWYgKHNzaXplID09IE1NVV9TRUdTSVpFXzI1Nk0pCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vbXBpYy5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL21waWMuaAppbmRleCBmZTU2NmEzLi4zNGQ5YWM0IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vbXBpYy5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9tcGljLmgKQEAgLTUsNiArNSw3IEBACiAjaW5jbHVkZSA8bGludXgvaXJxLmg+CiAjaW5jbHVkZSA8bGludXgvc3lzZGV2Lmg+CiAjaW5jbHVkZSA8YXNtL2Rjci5oPgorI2luY2x1ZGUgPGFzbS9tc2lfYml0bWFwLmg+CiAKIC8qCiAgKiBHbG9iYWwgcmVnaXN0ZXJzCkBAIC0zMDEsOCArMzAyLDcgQEAKICNlbmRpZgogCiAjaWZkZWYgQ09ORklHX1BDSV9NU0kKLQlzcGlubG9ja190CQliaXRtYXBfbG9jazsKLQl1bnNpZ25lZCBsb25nCQkqaHdpcnFfYml0bWFwOworCXN0cnVjdCBtc2lfYml0bWFwCW1zaV9iaXRtYXA7CiAjZW5kaWYKIAogI2lmZGVmIENPTkZJR19NUElDX0JST0tFTl9SRUdSRUFECmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vbXNpX2JpdG1hcC5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL21zaV9iaXRtYXAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45N2FjM2Y0Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL21zaV9iaXRtYXAuaApAQCAtMCwwICsxLDM1IEBACisjaWZuZGVmIF9QT1dFUlBDX1NZU0RFVl9NU0lfQklUTUFQX0gKKyNkZWZpbmUgX1BPV0VSUENfU1lTREVWX01TSV9CSVRNQVBfSAorCisvKgorICogQ29weXJpZ2h0IDIwMDgsIE1pY2hhZWwgRWxsZXJtYW4sIElCTSBDb3Jwb3JhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMiBvZiB0aGUKKyAqIExpY2Vuc2UuCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9vZi5oPgorI2luY2x1ZGUgPGFzbS9pcnEuaD4KKworc3RydWN0IG1zaV9iaXRtYXAgeworCXN0cnVjdCBkZXZpY2Vfbm9kZQkqb2Zfbm9kZTsKKwl1bnNpZ25lZCBsb25nCQkqYml0bWFwOworCXNwaW5sb2NrX3QJCWxvY2s7CisJdW5zaWduZWQgaW50CQlpcnFfY291bnQ7Cit9OworCitpbnQgbXNpX2JpdG1hcF9hbGxvY19od2lycXMoc3RydWN0IG1zaV9iaXRtYXAgKmJtcCwgaW50IG51bSk7Cit2b2lkIG1zaV9iaXRtYXBfZnJlZV9od2lycXMoc3RydWN0IG1zaV9iaXRtYXAgKmJtcCwgdW5zaWduZWQgaW50IG9mZnNldCwKKwkJCSAgICB1bnNpZ25lZCBpbnQgbnVtKTsKK3ZvaWQgbXNpX2JpdG1hcF9yZXNlcnZlX2h3aXJxKHN0cnVjdCBtc2lfYml0bWFwICpibXAsIHVuc2lnbmVkIGludCBod2lycSk7CisKK2ludCBtc2lfYml0bWFwX3Jlc2VydmVfZHRfaHdpcnFzKHN0cnVjdCBtc2lfYml0bWFwICpibXApOworCitpbnQgbXNpX2JpdG1hcF9hbGxvYyhzdHJ1Y3QgbXNpX2JpdG1hcCAqYm1wLCB1bnNpZ25lZCBpbnQgaXJxX2NvdW50LAorCQkgICAgIHN0cnVjdCBkZXZpY2Vfbm9kZSAqb2Zfbm9kZSk7Cit2b2lkIG1zaV9iaXRtYXBfZnJlZShzdHJ1Y3QgbXNpX2JpdG1hcCAqYm1wKTsKKworI2VuZGlmIC8qIF9QT1dFUlBDX1NZU0RFVl9NU0lfQklUTUFQX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9vZl9kZXZpY2UuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9vZl9kZXZpY2UuaAppbmRleCAzYzEyMzk5Li5hNjRkZWJmIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vb2ZfZGV2aWNlLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL29mX2RldmljZS5oCkBAIC0yNCw4ICsyNCw1IEBACiBleHRlcm4gaW50IG9mX2RldmljZV91ZXZlbnQoc3RydWN0IGRldmljZSAqZGV2LAogCQkJICAgIHN0cnVjdCBrb2JqX3VldmVudF9lbnYgKmVudik7CiAKLS8qIFRoaXMgaXMganVzdCBoZXJlIGR1cmluZyB0aGUgdHJhbnNpdGlvbiAqLwotI2luY2x1ZGUgPGxpbnV4L29mX2RldmljZS5oPgotCiAjZW5kaWYgLyogX19LRVJORUxfXyAqLwogI2VuZGlmIC8qIF9BU01fUE9XRVJQQ19PRl9ERVZJQ0VfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL29mX3BsYXRmb3JtLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vb2ZfcGxhdGZvcm0uaAppbmRleCAxODY1OWVmLi41M2I0NjUwIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vb2ZfcGxhdGZvcm0uaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vb2ZfcGxhdGZvcm0uaApAQCAtMTEsOSArMTEsNiBAQAogICoKICAqLwogCi0vKiBUaGlzIGlzIGp1c3QgaGVyZSBkdXJpbmcgdGhlIHRyYW5zaXRpb24gKi8KLSNpbmNsdWRlIDxsaW51eC9vZl9wbGF0Zm9ybS5oPgotCiAvKiBQbGF0Zm9ybSBkcml2ZXJzIHJlZ2lzdGVyL3VucmVnaXN0ZXIgKi8KIHN0YXRpYyBpbmxpbmUgaW50IG9mX3JlZ2lzdGVyX3BsYXRmb3JtX2RyaXZlcihzdHJ1Y3Qgb2ZfcGxhdGZvcm1fZHJpdmVyICpkcnYpCiB7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcGFjYS5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BhY2EuaAppbmRleCA2NDkzYTM5Li4wODJiM2FlIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcGFjYS5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wYWNhLmgKQEAgLTYyLDYgKzYyLDggQEAKIAl1MTYgcGFjYV9pbmRleDsJCQkvKiBMb2dpY2FsIHByb2Nlc3NvciBudW1iZXIgKi8KIAogCXU2NCBrZXJuZWxfdG9jOwkJCS8qIEtlcm5lbCBUT0MgYWRkcmVzcyAqLworCXU2NCBrZXJuZWxiYXNlOwkJCS8qIEJhc2UgYWRkcmVzcyBvZiBrZXJuZWwgKi8KKwl1NjQga2VybmVsX21zcjsJCQkvKiBNU1Igd2hpbGUgcnVubmluZyBpbiBrZXJuZWwgKi8KIAl1NjQgc3RhYl9yZWFsOwkJCS8qIEFic29sdXRlIGFkZHJlc3Mgb2Ygc2VnbWVudCB0YWJsZSAqLwogCXU2NCBzdGFiX2FkZHI7CQkJLyogVmlydHVhbCBhZGRyZXNzIG9mIHNlZ21lbnQgdGFibGUgKi8KIAl2b2lkICplbWVyZ2VuY3lfc3A7CQkvKiBwb2ludGVyIHRvIGVtZXJnZW5jeSBzdGFjayAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BhZ2UuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wYWdlLmgKaW5kZXggZTA4ODU0NS4uNWFjNTFlNiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BhZ2UuaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcGFnZS5oCkBAIC0xMCw5ICsxMCwxMyBAQAogICogMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICAqLwogCisjaWZuZGVmIF9fQVNTRU1CTFlfXworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjZWxzZQorI2luY2x1ZGUgPGFzbS90eXBlcy5oPgorI2VuZGlmCiAjaW5jbHVkZSA8YXNtL2FzbS1jb21wYXQuaD4KICNpbmNsdWRlIDxhc20va2R1bXAuaD4KLSNpbmNsdWRlIDxhc20vdHlwZXMuaD4KIAogLyoKICAqIE9uIFBQQzMyIHBhZ2Ugc2l6ZSBpcyA0Sy4gRm9yIFBQQzY0IHdlIHN1cHBvcnQgZWl0aGVyIDRLIG9yIDY0SyBzb2Z0d2FyZQpAQCAtNzEsMTUgKzc1LDIxIEBACiAjZGVmaW5lIFBBR0VfT0ZGU0VUCUFTTV9DT05TVChDT05GSUdfUEFHRV9PRkZTRVQpCiAjZGVmaW5lIExPQURfT0ZGU0VUCUFTTV9DT05TVCgoQ09ORklHX0tFUk5FTF9TVEFSVC1DT05GSUdfUEhZU0lDQUxfU1RBUlQpKQogCi0jaWYgZGVmaW5lZChDT05GSUdfUkVMT0NBVEFCTEUpICYmIGRlZmluZWQoQ09ORklHX0ZMQVRNRU0pCisjaWYgZGVmaW5lZChDT05GSUdfUkVMT0NBVEFCTEUpCiAjaWZuZGVmIF9fQVNTRU1CTFlfXwogZXh0ZXJuIHBoeXNfYWRkcl90IG1lbXN0YXJ0X2FkZHI7CiBleHRlcm4gcGh5c19hZGRyX3Qga2VybnN0YXJ0X2FkZHI7CiAjZW5kaWYKICNkZWZpbmUgUEhZU0lDQUxfU1RBUlQJa2VybnN0YXJ0X2FkZHIKLSNkZWZpbmUgTUVNT1JZX1NUQVJUCW1lbXN0YXJ0X2FkZHIKICNlbHNlCiAjZGVmaW5lIFBIWVNJQ0FMX1NUQVJUCUFTTV9DT05TVChDT05GSUdfUEhZU0lDQUxfU1RBUlQpCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19QUEM2NAorI2RlZmluZSBNRU1PUllfU1RBUlQJMFVMCisjZWxpZiBkZWZpbmVkKENPTkZJR19SRUxPQ0FUQUJMRSkKKyNkZWZpbmUgTUVNT1JZX1NUQVJUCW1lbXN0YXJ0X2FkZHIKKyNlbHNlCiAjZGVmaW5lIE1FTU9SWV9TVEFSVAkoUEhZU0lDQUxfU1RBUlQgKyBQQUdFX09GRlNFVCAtIEtFUk5FTEJBU0UpCiAjZW5kaWYKIApAQCAtOTIsOCArMTAyLDggQEAKICNkZWZpbmUgcGZuX3RvX2thZGRyKHBmbikJX192YSgocGZuKSA8PCBQQUdFX1NISUZUKQogI2RlZmluZSB2aXJ0X2FkZHJfdmFsaWQoa2FkZHIpCXBmbl92YWxpZChfX3BhKGthZGRyKSA+PiBQQUdFX1NISUZUKQogCi0jZGVmaW5lIF9fdmEoeCkgKCh2b2lkICopKCh1bnNpZ25lZCBsb25nKSh4KSAtIFBIWVNJQ0FMX1NUQVJUICsgS0VSTkVMQkFTRSkpCi0jZGVmaW5lIF9fcGEoeCkgKCh1bnNpZ25lZCBsb25nKSh4KSArIFBIWVNJQ0FMX1NUQVJUIC0gS0VSTkVMQkFTRSkKKyNkZWZpbmUgX192YSh4KSAoKHZvaWQgKikoKHVuc2lnbmVkIGxvbmcpKHgpICsgUEFHRV9PRkZTRVQgLSBNRU1PUllfU1RBUlQpKQorI2RlZmluZSBfX3BhKHgpICgodW5zaWduZWQgbG9uZykoeCkgLSBQQUdFX09GRlNFVCArIE1FTU9SWV9TVEFSVCkKIAogLyoKICAqIFVuZm9ydHVuYXRlbHkgdGhlIFBMVCBpcyBpbiB0aGUgQlNTIGluIHRoZSBQUEMzMiBFTEYgQUJJLApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BhZ2VfMzIuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wYWdlXzMyLmgKaW5kZXggZWJmYWU1My4uZDc3MDcyYSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BhZ2VfMzIuaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcGFnZV8zMi5oCkBAIC0xMywxMCArMTMsMTYgQEAKICNkZWZpbmUgQVJDSF9LTUFMTE9DX01JTkFMSUdOCUwxX0NBQ0hFX0JZVEVTCiAjZW5kaWYKIAorI2lmZGVmIENPTkZJR19QVEVfNjRCSVQKKyNkZWZpbmUgUFRFX0ZMQUdTX09GRlNFVAk0CS8qIG9mZnNldCBvZiBQVEUgZmxhZ3MsIGluIGJ5dGVzICovCisjZWxzZQorI2RlZmluZSBQVEVfRkxBR1NfT0ZGU0VUCTAKKyNlbmRpZgorCiAjaWZuZGVmIF9fQVNTRU1CTFlfXwogLyoKICAqIFRoZSBiYXNpYyB0eXBlIG9mIGEgUFRFIC0gNjQgYml0cyBmb3IgdGhvc2UgQ1BVcyB3aXRoID4gMzIgYml0Ci0gKiBwaHlzaWNhbCBhZGRyZXNzaW5nLiAgRm9yIG5vdyB0aGlzIGp1c3QgdGhlIElCTSBQUEM0NDAuCisgKiBwaHlzaWNhbCBhZGRyZXNzaW5nLgogICovCiAjaWZkZWYgQ09ORklHX1BURV82NEJJVAogdHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgcHRlX2Jhc2ljX3Q7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcGNpLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcGNpLmgKaW5kZXggYTA1YTk0Mi4uMGU1MmM3OCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BjaS5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wY2kuaApAQCAtNjAsNiArNjAsMTQgQEAKIAlyZXR1cm4gY2hhbm5lbCA/IDE1IDogMTQ7CiB9CiAKKyNpZmRlZiBDT05GSUdfUENJCitleHRlcm4gdm9pZCBzZXRfcGNpX2RtYV9vcHMoc3RydWN0IGRtYV9tYXBwaW5nX29wcyAqZG1hX29wcyk7CitleHRlcm4gc3RydWN0IGRtYV9tYXBwaW5nX29wcyAqZ2V0X3BjaV9kbWFfb3BzKHZvaWQpOworI2Vsc2UJLyogQ09ORklHX1BDSSAqLworI2RlZmluZSBzZXRfcGNpX2RtYV9vcHMoZCkKKyNkZWZpbmUgZ2V0X3BjaV9kbWFfb3BzKCkJTlVMTAorI2VuZGlmCisKICNpZmRlZiBDT05GSUdfUFBDNjQKIAogLyoKQEAgLTcwLDkgKzc4LDYgQEAKICNkZWZpbmUgUENJX0RJU0FCTEVfTVdJCiAKICNpZmRlZiBDT05GSUdfUENJCi1leHRlcm4gdm9pZCBzZXRfcGNpX2RtYV9vcHMoc3RydWN0IGRtYV9tYXBwaW5nX29wcyAqZG1hX29wcyk7Ci1leHRlcm4gc3RydWN0IGRtYV9tYXBwaW5nX29wcyAqZ2V0X3BjaV9kbWFfb3BzKHZvaWQpOwotCiBzdGF0aWMgaW5saW5lIHZvaWQgcGNpX2RtYV9idXJzdF9hZHZpY2Uoc3RydWN0IHBjaV9kZXYgKnBkZXYsCiAJCQkJCWVudW0gcGNpX2RtYV9idXJzdF9zdHJhdGVneSAqc3RyYXQsCiAJCQkJCXVuc2lnbmVkIGxvbmcgKnN0cmF0ZWd5X3BhcmFtZXRlcikKQEAgLTg5LDkgKzk0LDYgQEAKIAkqc3RyYXQgPSBQQ0lfRE1BX0JVUlNUX01VTFRJUExFOwogCSpzdHJhdGVneV9wYXJhbWV0ZXIgPSBjYWNoZWxpbmVfc2l6ZTsKIH0KLSNlbHNlCS8qIENPTkZJR19QQ0kgKi8KLSNkZWZpbmUgc2V0X3BjaV9kbWFfb3BzKGQpCi0jZGVmaW5lIGdldF9wY2lfZG1hX29wcygpCU5VTEwKICNlbmRpZgogCiAjZWxzZSAvKiAzMi1iaXQgKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wZ3RhYmxlLXBwYzMyLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcGd0YWJsZS1wcGMzMi5oCmluZGV4IDZmZTM5ZTMuLjZhYjdjNjcgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wZ3RhYmxlLXBwYzMyLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BndGFibGUtcHBjMzIuaApAQCAtMjYxLDYgKzI2MSw3IEBACiAjZGVmaW5lIF9QQUdFX0hXRVhFQwkweDAwMDAwMDA0CQkvKiBIOiBFeGVjdXRlIHBlcm1pc3Npb24gKi8KICNkZWZpbmUgX1BBR0VfQUNDRVNTRUQJMHgwMDAwMDAwOAkJLyogUzogUGFnZSByZWZlcmVuY2VkICovCiAjZGVmaW5lIF9QQUdFX0RJUlRZCTB4MDAwMDAwMTAJCS8qIFM6IFBhZ2UgZGlydHkgKi8KKyNkZWZpbmUgX1BBR0VfU1BFQ0lBTAkweDAwMDAwMDIwCQkvKiBTOiBTcGVjaWFsIHBhZ2UgKi8KICNkZWZpbmUgX1BBR0VfVVNFUgkweDAwMDAwMDQwCQkvKiBTOiBVc2VyIHBhZ2UgKi8KICNkZWZpbmUgX1BBR0VfRU5ESUFOCTB4MDAwMDAwODAJCS8qIEg6IEUgYml0ICovCiAjZGVmaW5lIF9QQUdFX0dVQVJERUQJMHgwMDAwMDEwMAkJLyogSDogRyBiaXQgKi8KQEAgLTI3Niw2ICsyNzcsNyBAQAogLyogRVJQTiBpbiBhIFBURSBuZXZlciBnZXRzIGNsZWFyZWQsIGlnbm9yZSBpdCAqLwogI2RlZmluZSBfUFRFX05PTkVfTUFTSwkweGZmZmZmZmZmMDAwMDAwMDBVTEwKIAorI2RlZmluZSBfX0hBVkVfQVJDSF9QVEVfU1BFQ0lBTAogCiAjZWxpZiBkZWZpbmVkKENPTkZJR19GU0xfQk9PS0UpCiAvKgpAQCAtMzA1LDYgKzMwNyw3IEBACiAjZGVmaW5lIF9QQUdFX0NPSEVSRU5UCTB4MDAxMDAJLyogSDogTSBiaXQgKi8KICNkZWZpbmUgX1BBR0VfTk9fQ0FDSEUJMHgwMDIwMAkvKiBIOiBJIGJpdCAqLwogI2RlZmluZSBfUEFHRV9XUklURVRIUlUJMHgwMDQwMAkvKiBIOiBXIGJpdCAqLworI2RlZmluZSBfUEFHRV9TUEVDSUFMCTB4MDA4MDAgLyogUzogU3BlY2lhbCBwYWdlICovCiAKICNpZmRlZiBDT05GSUdfUFRFXzY0QklUCiAvKiBFUlBOIGluIGEgUFRFIG5ldmVyIGdldHMgY2xlYXJlZCwgaWdub3JlIGl0ICovCkBAIC0zMTUsNiArMzE4LDggQEAKICNkZWZpbmUgX1BNRF9QUkVTRU5UX01BU0sgKFBBR0VfTUFTSykKICNkZWZpbmUgX1BNRF9CQUQJKH5QQUdFX01BU0spCiAKKyNkZWZpbmUgX19IQVZFX0FSQ0hfUFRFX1NQRUNJQUwKKwogI2VsaWYgZGVmaW5lZChDT05GSUdfOHh4KQogLyogRGVmaW5pdGlvbnMgZm9yIDh4eCBlbWJlZGRlZCBjaGlwcy4gKi8KICNkZWZpbmUgX1BBR0VfUFJFU0VOVAkweDAwMDEJLyogUGFnZSBpcyB2YWxpZCAqLwpAQCAtMzYyLDggKzM2NywxNCBAQAogI2RlZmluZSBfUEFHRV9BQ0NFU1NFRAkweDEwMAkvKiBSOiBwYWdlIHJlZmVyZW5jZWQgKi8KICNkZWZpbmUgX1BBR0VfRVhFQwkweDIwMAkvKiBzb2Z0d2FyZTogaS1jYWNoZSBjb2hlcmVuY3kgcmVxdWlyZWQgKi8KICNkZWZpbmUgX1BBR0VfUlcJMHg0MDAJLyogc29mdHdhcmU6IHVzZXIgd3JpdGUgYWNjZXNzIGFsbG93ZWQgKi8KKyNkZWZpbmUgX1BBR0VfU1BFQ0lBTAkweDgwMAkvKiBzb2Z0d2FyZTogU3BlY2lhbCBwYWdlICovCiAKKyNpZmRlZiBDT05GSUdfUFRFXzY0QklUCisvKiBXZSBuZXZlciBjbGVhciB0aGUgaGlnaCB3b3JkIG9mIHRoZSBwdGUgKi8KKyNkZWZpbmUgX1BURV9OT05FX01BU0sJKDB4ZmZmZmZmZmYwMDAwMDAwMFVMTCB8IF9QQUdFX0hBU0hQVEUpCisjZWxzZQogI2RlZmluZSBfUFRFX05PTkVfTUFTSwlfUEFHRV9IQVNIUFRFCisjZW5kaWYKIAogI2RlZmluZSBfUE1EX1BSRVNFTlQJMAogI2RlZmluZSBfUE1EX1BSRVNFTlRfTUFTSyAoUEFHRV9NQVNLKQpAQCAtMzcyLDYgKzM4Myw4IEBACiAvKiBIYXNoIHRhYmxlIGJhc2VkIHBsYXRmb3JtcyBuZWVkIGF0b21pYyB1cGRhdGVzIG9mIHRoZSBsaW51eCBQVEUgKi8KICNkZWZpbmUgUFRFX0FUT01JQ19VUERBVEVTCTEKIAorI2RlZmluZSBfX0hBVkVfQVJDSF9QVEVfU1BFQ0lBTAorCiAjZW5kaWYKIAogLyoKQEAgLTQwNCw2ICs0MTcsOSBAQAogI2lmbmRlZiBfUEFHRV9XUklURVRIUlUKICNkZWZpbmUgX1BBR0VfV1JJVEVUSFJVCTAKICNlbmRpZgorI2lmbmRlZiBfUEFHRV9TUEVDSUFMCisjZGVmaW5lIF9QQUdFX1NQRUNJQUwJMAorI2VuZGlmCiAjaWZuZGVmIF9QTURfUFJFU0VOVF9NQVNLCiAjZGVmaW5lIF9QTURfUFJFU0VOVF9NQVNLCV9QTURfUFJFU0VOVAogI2VuZGlmCkBAIC00MTUsMTEgKzQzMSwxMSBAQAogI2RlZmluZSBfUEFHRV9DSEdfTUFTSwkoUEFHRV9NQVNLIHwgX1BBR0VfQUNDRVNTRUQgfCBfUEFHRV9ESVJUWSkKIAogCi0jZGVmaW5lIFBBR0VfUFJPVF9CSVRTCV9fcGdwcm90KF9QQUdFX0dVQVJERUQgfCBfUEFHRV9DT0hFUkVOVCB8IF9QQUdFX05PX0NBQ0hFIHwgXAotCQkJCSBfUEFHRV9XUklURVRIUlUgfCBfUEFHRV9FTkRJQU4gfCBcCi0JCQkJIF9QQUdFX1VTRVIgfCBfUEFHRV9BQ0NFU1NFRCB8IFwKLQkJCQkgX1BBR0VfUlcgfCBfUEFHRV9IV1dSSVRFIHwgX1BBR0VfRElSVFkgfCBcCi0JCQkJIF9QQUdFX0VYRUMgfCBfUEFHRV9IV0VYRUMpCisjZGVmaW5lIFBBR0VfUFJPVF9CSVRTCShfUEFHRV9HVUFSREVEIHwgX1BBR0VfQ09IRVJFTlQgfCBfUEFHRV9OT19DQUNIRSB8IFwKKwkJCSBfUEFHRV9XUklURVRIUlUgfCBfUEFHRV9FTkRJQU4gfCBcCisJCQkgX1BBR0VfVVNFUiB8IF9QQUdFX0FDQ0VTU0VEIHwgXAorCQkJIF9QQUdFX1JXIHwgX1BBR0VfSFdXUklURSB8IF9QQUdFX0RJUlRZIHwgXAorCQkJIF9QQUdFX0VYRUMgfCBfUEFHRV9IV0VYRUMpCiAvKgogICogTm90ZTogdGhlIF9QQUdFX0NPSEVSRU5UIGJpdCBhdXRvbWF0aWNhbGx5IGdldHMgc2V0IGluIHRoZSBoYXJkd2FyZQogICogUFRFIGlmIENPTkZJR19TTVAgaXMgZGVmaW5lZCAoaGFzaF9wYWdlIGRvZXMgdGhpcyk7IHRoZXJlIGlzIG5vIG5lZWQKQEAgLTUxNyw3ICs1MzMsOCBAQAogCiAjZGVmaW5lIHB0ZV9ub25lKHB0ZSkJCSgocHRlX3ZhbChwdGUpICYgfl9QVEVfTk9ORV9NQVNLKSA9PSAwKQogI2RlZmluZSBwdGVfcHJlc2VudChwdGUpCShwdGVfdmFsKHB0ZSkgJiBfUEFHRV9QUkVTRU5UKQotI2RlZmluZSBwdGVfY2xlYXIobW0sYWRkcixwdGVwKQlkbyB7IHNldF9wdGVfYXQoKG1tKSwgKGFkZHIpLCAocHRlcCksIF9fcHRlKDApKTsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgcHRlX2NsZWFyKG1tLCBhZGRyLCBwdGVwKSBcCisJZG8geyBwdGVfdXBkYXRlKHB0ZXAsIH5fUEFHRV9IQVNIUFRFLCAwKTsgfSB3aGlsZSAoMCkKIAogI2RlZmluZSBwbWRfbm9uZShwbWQpCQkoIXBtZF92YWwocG1kKSkKICNkZWZpbmUJcG1kX2JhZChwbWQpCQkocG1kX3ZhbChwbWQpICYgX1BNRF9CQUQpCkBAIC01MzMsNyArNTUwLDcgQEAKIHN0YXRpYyBpbmxpbmUgaW50IHB0ZV9kaXJ0eShwdGVfdCBwdGUpCQl7IHJldHVybiBwdGVfdmFsKHB0ZSkgJiBfUEFHRV9ESVJUWTsgfQogc3RhdGljIGlubGluZSBpbnQgcHRlX3lvdW5nKHB0ZV90IHB0ZSkJCXsgcmV0dXJuIHB0ZV92YWwocHRlKSAmIF9QQUdFX0FDQ0VTU0VEOyB9CiBzdGF0aWMgaW5saW5lIGludCBwdGVfZmlsZShwdGVfdCBwdGUpCQl7IHJldHVybiBwdGVfdmFsKHB0ZSkgJiBfUEFHRV9GSUxFOyB9Ci1zdGF0aWMgaW5saW5lIGludCBwdGVfc3BlY2lhbChwdGVfdCBwdGUpCXsgcmV0dXJuIDA7IH0KK3N0YXRpYyBpbmxpbmUgaW50IHB0ZV9zcGVjaWFsKHB0ZV90IHB0ZSkJeyByZXR1cm4gcHRlX3ZhbChwdGUpICYgX1BBR0VfU1BFQ0lBTDsgfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgcHRlX3VuY2FjaGUocHRlX3QgcHRlKSAgICAgICB7IHB0ZV92YWwocHRlKSB8PSBfUEFHRV9OT19DQUNIRTsgfQogc3RhdGljIGlubGluZSB2b2lkIHB0ZV9jYWNoZShwdGVfdCBwdGUpICAgICAgICAgeyBwdGVfdmFsKHB0ZSkgJj0gfl9QQUdFX05PX0NBQ0hFOyB9CkBAIC01NTIsMTAgKzU2OSwxMCBAQAogc3RhdGljIGlubGluZSBwdGVfdCBwdGVfbWt5b3VuZyhwdGVfdCBwdGUpIHsKIAlwdGVfdmFsKHB0ZSkgfD0gX1BBR0VfQUNDRVNTRUQ7IHJldHVybiBwdGU7IH0KIHN0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX21rc3BlY2lhbChwdGVfdCBwdGUpIHsKLQlyZXR1cm4gcHRlOyB9Ci1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgcHRlX3BncHJvdChwdGVfdCBwdGUpCisJcHRlX3ZhbChwdGUpIHw9IF9QQUdFX1NQRUNJQUw7IHJldHVybiBwdGU7IH0KK3N0YXRpYyBpbmxpbmUgcGdwcm90X3QgcHRlX3BncHJvdChwdGVfdCBwdGUpCiB7Ci0JcmV0dXJuIF9fcGdwcm90KHB0ZV92YWwocHRlKSkgJiBQQUdFX1BST1RfQklUUzsKKwlyZXR1cm4gX19wZ3Byb3QocHRlX3ZhbChwdGUpICYgUEFHRV9QUk9UX0JJVFMpOwogfQogCiBzdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV9tb2RpZnkocHRlX3QgcHRlLCBwZ3Byb3RfdCBuZXdwcm90KQpAQCAtNTc1LDYgKzU5MiwxMCBAQAogZXh0ZXJuIHZvaWQgYWRkX2hhc2hfcGFnZSh1bnNpZ25lZCBjb250ZXh0LCB1bnNpZ25lZCBsb25nIHZhLAogCQkJICB1bnNpZ25lZCBsb25nIHBtZHZhbCk7CiAKKy8qIEZsdXNoIGFuIGVudHJ5IGZyb20gdGhlIFRMQi9oYXNoIHRhYmxlICovCitleHRlcm4gdm9pZCBmbHVzaF9oYXNoX2VudHJ5KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwdGVfdCAqcHRlcCwKKwkJCSAgICAgdW5zaWduZWQgbG9uZyBhZGRyZXNzKTsKKwogLyoKICAqIEF0b21pYyBQVEUgdXBkYXRlcy4KICAqCkBAIC02MTIsOSArNjMzLDYgQEAKIAlyZXR1cm4gb2xkOwogfQogI2Vsc2UgLyogQ09ORklHX1BURV82NEJJVCAqLwotLyogVE9ETzogQ2hhbmdlIHRoYXQgdG8gb25seSBtb2RpZnkgdGhlIGxvdyB3b3JkIGFuZCBtb3ZlIHNldF9wdGVfYXQoKQotICogb3V0IG9mIGxpbmUKLSAqLwogc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGxvbmcgcHRlX3VwZGF0ZShwdGVfdCAqcCwKIAkJCQkJICAgIHVuc2lnbmVkIGxvbmcgY2xyLAogCQkJCQkgICAgdW5zaWduZWQgbG9uZyBzZXQpCkBAIC02NTIsMTQgKzY3MCwzNiBAQAogICogT24gbWFjaGluZXMgd2hpY2ggdXNlIGFuIE1NVSBoYXNoIHRhYmxlIHdlIGF2b2lkIGNoYW5naW5nIHRoZQogICogX1BBR0VfSEFTSFBURSBiaXQuCiAgKi8KKworc3RhdGljIGlubGluZSB2b2lkIF9fc2V0X3B0ZV9hdChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLAorCQkJICAgICAgcHRlX3QgKnB0ZXAsIHB0ZV90IHB0ZSkKK3sKKyNpZiAoX1BBR0VfSEFTSFBURSAhPSAwKSAmJiBkZWZpbmVkKENPTkZJR19TTVApICYmICFkZWZpbmVkKENPTkZJR19QVEVfNjRCSVQpCisJcHRlX3VwZGF0ZShwdGVwLCB+X1BBR0VfSEFTSFBURSwgcHRlX3ZhbChwdGUpICYgfl9QQUdFX0hBU0hQVEUpOworI2VsaWYgZGVmaW5lZChDT05GSUdfUFRFXzY0QklUKSAmJiBkZWZpbmVkKENPTkZJR19TTVApCisjaWYgX1BBR0VfSEFTSFBURSAhPSAwCisJaWYgKHB0ZV92YWwoKnB0ZXApICYgX1BBR0VfSEFTSFBURSkKKwkJZmx1c2hfaGFzaF9lbnRyeShtbSwgcHRlcCwgYWRkcik7CisjZW5kaWYKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygiXAorCQlzdHclVTAlWDAgJTIsJTBcblwKKwkJZWllaW9cblwKKwkJc3R3JVUwJVgwICVMMiwlMSIKKwk6ICI9bSIgKCpwdGVwKSwgIj1tIiAoKigodW5zaWduZWQgY2hhciAqKXB0ZXArNCkpCisJOiAiciIgKHB0ZSkgOiAibWVtb3J5Iik7CisjZWxzZQorCSpwdGVwID0gX19wdGUoKHB0ZV92YWwoKnB0ZXApICYgX1BBR0VfSEFTSFBURSkKKwkJICAgICAgfCAocHRlX3ZhbChwdGUpICYgfl9QQUdFX0hBU0hQVEUpKTsKKyNlbmRpZgorfQorCiBzdGF0aWMgaW5saW5lIHZvaWQgc2V0X3B0ZV9hdChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLAogCQkJICAgICAgcHRlX3QgKnB0ZXAsIHB0ZV90IHB0ZSkKIHsKLSNpZiBfUEFHRV9IQVNIUFRFICE9IDAKLQlwdGVfdXBkYXRlKHB0ZXAsIH5fUEFHRV9IQVNIUFRFLCBwdGVfdmFsKHB0ZSkgJiB+X1BBR0VfSEFTSFBURSk7Ci0jZWxzZQotCSpwdGVwID0gcHRlOworI2lmIGRlZmluZWQoQ09ORklHX1BURV82NEJJVCkgJiYgZGVmaW5lZChDT05GSUdfU01QKQorCVdBUk5fT04ocHRlX3ByZXNlbnQoKnB0ZXApKTsKICNlbmRpZgorCV9fc2V0X3B0ZV9hdChtbSwgYWRkciwgcHRlcCwgcHRlKTsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wZ3RhYmxlLXBwYzY0LmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcGd0YWJsZS1wcGM2NC5oCmluZGV4IDQ1OTdjNDkuLjRjMGE4YzYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wZ3RhYmxlLXBwYzY0LmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BndGFibGUtcHBjNjQuaApAQCAtMTE3LDEwICsxMTcsMTAgQEAKICNkZWZpbmUgUEFHRV9BR1AJX19wZ3Byb3QoX1BBR0VfQkFTRSB8IF9QQUdFX1dSRU5BQkxFIHwgX1BBR0VfTk9fQ0FDSEUpCiAjZGVmaW5lIEhBVkVfUEFHRV9BR1AKIAotI2RlZmluZSBQQUdFX1BST1RfQklUUwlfX3BncHJvdChfUEFHRV9HVUFSREVEIHwgX1BBR0VfQ09IRVJFTlQgfCBcCi0JCQkJIF9QQUdFX05PX0NBQ0hFIHwgX1BBR0VfV1JJVEVUSFJVIHwgXAotCQkJCSBfUEFHRV80S19QRk4gfCBfUEFHRV9SVyB8IF9QQUdFX1VTRVIgfCBcCi0gCQkJCSBfUEFHRV9BQ0NFU1NFRCB8IF9QQUdFX0RJUlRZIHwgX1BBR0VfRVhFQykKKyNkZWZpbmUgUEFHRV9QUk9UX0JJVFMJKF9QQUdFX0dVQVJERUQgfCBfUEFHRV9DT0hFUkVOVCB8IFwKKwkJCSBfUEFHRV9OT19DQUNIRSB8IF9QQUdFX1dSSVRFVEhSVSB8CQlcCisJCQkgX1BBR0VfNEtfUEZOIHwgX1BBR0VfUlcgfCBfUEFHRV9VU0VSIHwJCVwKKwkJCSBfUEFHRV9BQ0NFU1NFRCB8IF9QQUdFX0RJUlRZIHwgX1BBR0VfRVhFQykKIC8qIFBURUlEWCBuaWJibGUgKi8KICNkZWZpbmUgX1BURUlEWF9TRUNPTkRBUlkJMHg4CiAjZGVmaW5lIF9QVEVJRFhfR1JPVVBfSVgJMHg3CkBAIC0yNjQsOSArMjY0LDkgQEAKIAlyZXR1cm4gcHRlOyB9CiBzdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV9ta3NwZWNpYWwocHRlX3QgcHRlKSB7CiAJcHRlX3ZhbChwdGUpIHw9IF9QQUdFX1NQRUNJQUw7IHJldHVybiBwdGU7IH0KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBwdGVfcGdwcm90KHB0ZV90IHB0ZSkKK3N0YXRpYyBpbmxpbmUgcGdwcm90X3QgcHRlX3BncHJvdChwdGVfdCBwdGUpCiB7Ci0JcmV0dXJuIF9fcGdwcm90KHB0ZV92YWwocHRlKSkgJiBQQUdFX1BST1RfQklUUzsKKwlyZXR1cm4gX19wZ3Byb3QocHRlX3ZhbChwdGUpICYgUEFHRV9QUk9UX0JJVFMpOwogfQogCiAvKiBBdG9taWMgUFRFIHVwZGF0ZXMgKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wcGNfYXNtLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcHBjX2FzbS5oCmluZGV4IDA5NjY4OTkuLmM0YTAyOWMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wcGNfYXNtLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BwY19hc20uaApAQCAtMjY4LDcgKzI2OCw3IEBACiAgKiAgIExvYWRzIHRoZSB2YWx1ZSBvZiB0aGUgY29uc3RhbnQgZXhwcmVzc2lvbiAnZXhwcicgaW50byByZWdpc3RlciAncm4nCiAgKiAgIHVzaW5nIGltbWVkaWF0ZSBpbnN0cnVjdGlvbnMgb25seS4gIFVzZSB0aGlzIHdoZW4gaXQncyBpbXBvcnRhbnQgbm90CiAgKiAgIHRvIHJlZmVyZW5jZSBvdGhlciBkYXRhIChpLmUuIG9uIHBwYzY0IHdoZW4gdGhlIFRPQyBwb2ludGVyIGlzIG5vdAotICogICB2YWxpZCkuCisgKiAgIHZhbGlkKSBhbmQgd2hlbiAnZXhwcicgaXMgYSBjb25zdGFudCBvciBhYnNvbHV0ZSBhZGRyZXNzLgogICoKICAqIExPQURfUkVHX0FERFIocm4sIG5hbWUpCiAgKiAgIExvYWRzIHRoZSBhZGRyZXNzIG9mIGxhYmVsICduYW1lJyBpbnRvIHJlZ2lzdGVyICdybicuICBVc2UgdGhpcyB3aGVuCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcHMzYXYuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wczNhdi5oCmluZGV4IGZkYTk4NzEuLjVhYTIyY2YgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wczNhdi5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wczNhdi5oCkBAIC02NzgsNiArNjc4LDggQEAKIAl1OCBidWZbUFMzQVZfUEtUX0FWQl9QQVJBTV9NQVhfQlVGX1NJWkVdOwogfTsKIAorLyogY2hhbm5lbCBzdGF0dXMgKi8KK2V4dGVybiB1OCBwczNhdl9tb2RlX2NzX2luZm9bXTsKIAogLyoqIGNvbW1hbmQgc3RhdHVzICoqLwogI2RlZmluZSBQUzNBVl9TVEFUVVNfU1VDQ0VTUwkJCTB4MDAwMAkvKiBzdWNjZXNzICovCkBAIC03MzUsNiArNzM3LDcgQEAKIGV4dGVybiBpbnQgcHMzYXZfdmlkZW9fbW9kZTJyZXModTMyLCB1MzIgKiwgdTMyICopOwogZXh0ZXJuIGludCBwczNhdl92aWRlb19tdXRlKGludCk7CiBleHRlcm4gaW50IHBzM2F2X2F1ZGlvX211dGUoaW50KTsKK2V4dGVybiBpbnQgcHMzYXZfYXVkaW9fbXV0ZV9hbmFsb2coaW50KTsKIGV4dGVybiBpbnQgcHMzYXZfZGV2X29wZW4odm9pZCk7CiBleHRlcm4gaW50IHBzM2F2X2Rldl9jbG9zZSh2b2lkKTsKIGV4dGVybiB2b2lkIHBzM2F2X3JlZ2lzdGVyX2ZsaXBfY3RsKHZvaWQgKCpmbGlwX2N0bCkoaW50IG9uLCB2b2lkICpkYXRhKSwKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9yZWdfYm9va2UuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9yZWdfYm9va2UuaAppbmRleCBiZTk4MGY0Li42NzQ1Mzc2IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcmVnX2Jvb2tlLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3JlZ19ib29rZS5oCkBAIC0xMDksNiArMTA5LDcgQEAKICNkZWZpbmUgU1BSTl9FVlBSCTB4M0Q2CS8qIEV4Y2VwdGlvbiBWZWN0b3IgUHJlZml4IFJlZ2lzdGVyICovCiAjZGVmaW5lIFNQUk5fTDFDU1IwCTB4M0YyCS8qIEwxIENhY2hlIENvbnRyb2wgYW5kIFN0YXR1cyBSZWdpc3RlciAwICovCiAjZGVmaW5lIFNQUk5fTDFDU1IxCTB4M0YzCS8qIEwxIENhY2hlIENvbnRyb2wgYW5kIFN0YXR1cyBSZWdpc3RlciAxICovCisjZGVmaW5lIFNQUk5fTU1VQ1NSMAkweDNGNAkvKiBNTVUgQ29udHJvbCBhbmQgU3RhdHVzIFJlZ2lzdGVyIDAgKi8KICNkZWZpbmUgU1BSTl9QSVQJMHgzREIJLyogUHJvZ3JhbW1hYmxlIEludGVydmFsIFRpbWVyICovCiAjZGVmaW5lIFNQUk5fQlVDU1IJMHgzRjUJLyogQnJhbmNoIFVuaXQgQ29udHJvbCBhbmQgU3RhdHVzICovCiAjZGVmaW5lIFNQUk5fTDJDU1IwCTB4M0Y5CS8qIEwyIERhdGEgQ2FjaGUgQ29udHJvbCBhbmQgU3RhdHVzIFJlZ2lzdGVyIDAgKi8KQEAgLTQxMCw2ICs0MTEsMTIgQEAKICNkZWZpbmUgTDJDU1IwX0wyTE9BCTB4MDAwMDAwODAJLyogTDIgQ2FjaGUgTG9jayBPdmVyZmxvdyBBbGxvY2F0ZSAqLwogI2RlZmluZSBMMkNTUjBfTDJMTwkweDAwMDAwMDIwCS8qIEwyIENhY2hlIExvY2sgT3ZlcmZsb3cgKi8KIAorLyogQml0IGRlZmluaXRpb25zIGZvciBNTVVDU1IwICovCisjZGVmaW5lIE1NVUNTUjBfVExCMUZJCTB4MDAwMDAwMDIJLyogVExCMSBGbGFzaCBpbnZhbGlkYXRlICovCisjZGVmaW5lIE1NVUNTUjBfVExCMEZJCTB4MDAwMDAwMDQJLyogVExCMCBGbGFzaCBpbnZhbGlkYXRlICovCisjZGVmaW5lIE1NVUNTUjBfVExCMkZJCTB4MDAwMDAwNDAJLyogVExCMiBGbGFzaCBpbnZhbGlkYXRlICovCisjZGVmaW5lIE1NVUNTUjBfVExCM0ZJCTB4MDAwMDAwMjAJLyogVExCMyBGbGFzaCBpbnZhbGlkYXRlICovCisKIC8qIEJpdCBkZWZpbml0aW9ucyBmb3IgU0dSLiAqLwogI2RlZmluZSBTR1JfTk9STUFMCTAJCS8qIFNwZWN1bGF0aXZlIGZldGNoaW5nIGFsbG93ZWQuICovCiAjZGVmaW5lIFNHUl9HVUFSREVECTEJCS8qIFNwZWN1bGF0aXZlIGZldGNoaW5nIGRpc2FsbG93ZWQuICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vc2VjdGlvbnMuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9zZWN0aW9ucy5oCmluZGV4IDA3OTU2ZjMuLjZmYmNlNzIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9zZWN0aW9ucy5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9zZWN0aW9ucy5oCkBAIC0xOCw2ICsxOCwxMiBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW5saW5lIGludCBvdmVybGFwc19rZXJuZWxfdGV4dCh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCkKK3sKKwlyZXR1cm4gc3RhcnQgPCAodW5zaWduZWQgbG9uZylfX2luaXRfZW5kICYmCisJCSh1bnNpZ25lZCBsb25nKV9zdGV4dCA8IGVuZDsKK30KKwogI3VuZGVmIGRlcmVmZXJlbmNlX2Z1bmN0aW9uX2Rlc2NyaXB0b3IKIHN0YXRpYyBpbmxpbmUgdm9pZCAqZGVyZWZlcmVuY2VfZnVuY3Rpb25fZGVzY3JpcHRvcih2b2lkICpwdHIpCiB7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vc2ZwLW1hY2hpbmUuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9zZnAtbWFjaGluZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlZDM0ZjEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vc2ZwLW1hY2hpbmUuaApAQCAtMCwwICsxLDM1MyBAQAorLyogTWFjaGluZS1kZXBlbmRlbnQgc29mdHdhcmUgZmxvYXRpbmctcG9pbnQgZGVmaW5pdGlvbnMuICBQUEMgdmVyc2lvbi4KKyAgIENvcHlyaWdodCAoQykgMTk5NyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgQyBMaWJyYXJ5LgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZQorICAgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBDIExpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmCisgICBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgICA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorCisgICBBY3R1YWxseSwgdGhpcyBpcyBhIFBQQyAoMzJiaXQpIHZlcnNpb24sIHdyaXR0ZW4gYmFzZWQgb24gdGhlCisgICBpMzg2LCBzcGFyYywgYW5kIHNwYXJjNjQgdmVyc2lvbnMsIGJ5IG1lLAorICAgUGV0ZXIgTWF5ZGVsbCAocG1heWRlbGxAY2hpYXJrLmdyZWVuZW5kLm9yZy51aykuCisgICBDb21tZW50cyBhcmUgYnkgYW5kIGxhcmdlIGFsc28gbWluZSwgYWx0aG91Z2ggdGhleSBtYXkgYmUgaW5hY2N1cmF0ZS4KKworICAgSW4gcGlja2luZyBvdXQgYXNtIGZyYWdtZW50cyBJJ3ZlIGdvbmUgd2l0aCB0aGUgbG93ZXN0IGNvbW1vbgorICAgZGVub21pbmF0b3IsIHdoaWNoIGFsc28gaGFwcGVucyB0byBiZSB0aGUgaGFyZHdhcmUgSSBoYXZlIDotPgorICAgVGhhdCBpcywgYSBTUEFSQyB3aXRob3V0IGhhcmR3YXJlIG11bHRpcGx5IGFuZCBkaXZpZGUuCisgKi8KKworLyogYmFzaWMgd29yZCBzaXplIGRlZmluaXRpb25zICovCisjZGVmaW5lIF9GUF9XX1RZUEVfU0laRQkJMzIKKyNkZWZpbmUgX0ZQX1dfVFlQRQkJdW5zaWduZWQgbG9uZworI2RlZmluZSBfRlBfV1NfVFlQRQkJc2lnbmVkIGxvbmcKKyNkZWZpbmUgX0ZQX0lfVFlQRQkJbG9uZworCisjZGVmaW5lIF9fbGxfQgkJCSgoVVd0eXBlKSAxIDw8IChXX1RZUEVfU0laRSAvIDIpKQorI2RlZmluZSBfX2xsX2xvd3BhcnQodCkJCSgoVVd0eXBlKSAodCkgJiAoX19sbF9CIC0gMSkpCisjZGVmaW5lIF9fbGxfaGlnaHBhcnQodCkJKChVV3R5cGUpICh0KSA+PiAoV19UWVBFX1NJWkUgLyAyKSkKKworLyogWW91IGNhbiBvcHRpb25hbGx5IGNvZGUgc29tZSB0aGluZ3MgbGlrZSBhZGRpdGlvbiBpbiBhc20uIEZvcgorICogZXhhbXBsZSwgaTM4NiBkZWZpbmVzIF9fRlBfRlJBQ19BRERfMiBhcyBhc20uIElmIHlvdSBkb24ndAorICogdGhlbiB5b3UgZ2V0IGEgZnJhZ21lbnQgb2YgQyBjb2RlIFtpZiB5b3UgY2hhbmdlIGFuICNpZmRlZiAwCisgKiBpbiBvcC0yLmhdIG9yIGEgY2FsbCB0byBhZGRfc3NhYWFhIChzZWUgYmVsb3cpLgorICogR29vZCBwbGFjZXMgdG8gbG9vayBmb3IgYXNtIGZyYWdtZW50cyB0byB1c2UgYXJlIGdjYyBhbmQgZ2xpYmMuCisgKiBnY2MncyBsb25nbG9uZy5oIGlzIHVzZWZ1bC4KKyAqLworCisvKiBXZSBuZWVkIHRvIGtub3cgaG93IHRvIG11bHRpcGx5IGFuZCBkaXZpZGUuIElmIHRoZSBob3N0IHdvcmQgc2l6ZQorICogaXMgPj0gMipmcmFjYml0cyB5b3UgY2FuIHVzZSBGUF9NVUxfTUVBVF9uX2ltbSh0LFIsWCxZKSB3aGljaAorICogY29kZXMgdGhlIG11bHRpcGx5IHdpdGggd2hhdGV2ZXIgZ2NjIGRvZXMgdG8gJ2EgKiBiJy4KKyAqIF9GUF9NVUxfTUVBVF9uX3dpZGUodCxSLFgsWSxmKSBpcyB1c2VkIHdoZW4geW91IGhhdmUgYW4gYXNtCisgKiBmdW5jdGlvbiB0aGF0IGNhbiBtdWx0aXBseSB0d28gMVcgdmFsdWVzIGFuZCBnZXQgYSAyVyByZXN1bHQuCisgKiBPdGhlcndpc2UgeW91J3JlIHN0dWNrIHdpdGggX0ZQX01VTF9NRUFUX25faGFyZCh0LFIsWCxZKSB3aGljaAorICogZG9lcyBiaXRzaGlmdGluZyB0byBhdm9pZCBvdmVyZmxvdy4KKyAqIEZvciBkaXZpc2lvbiB0aGVyZSBpcyBGUF9ESVZfTUVBVF9uX2ltbSh0LFIsWCxZLGYpIGZvciB3b3JkIHNpemUKKyAqID49IDIqZnJhY2JpdHMsIHdoZXJlIGYgaXMgZWl0aGVyIF9GUF9ESVZfSEVMUF9pbW0gb3IKKyAqIF9GUF9ESVZfSEVMUF9sZGl2IChzZWUgb3AtMS5oKS4KKyAqIF9GUF9ESVZfTUVBVF91ZGl2KCkgaXMgaWYgeW91IGhhdmUgYXNtIHRvIGRvIDJXLzFXID0+ICgxVywgMVcpLgorICogW0dDQyBhbmQgZ2xpYmMgaGF2ZSBsb25nbG9uZy5oIHdoaWNoIGhhcyB0aGUgYXNtIG1hY3JvIHVkaXZfcXJubmQKKyAqIHRvIGRvIHRoaXMuXQorICogSW4gZ2VuZXJhbCwgJ24nIGlzIHRoZSBudW1iZXIgb2Ygd29yZHMgcmVxdWlyZWQgdG8gaG9sZCB0aGUgdHlwZSwKKyAqIGFuZCAndCcgaXMgZWl0aGVyIFMsIEQgb3IgUSBmb3Igc2luZ2xlL2RvdWJsZS9xdWFkLgorICogICAgICAgICAgIC0tIFBNTQorICovCisvKiBFeGFtcGxlOiBTUEFSQzY0OgorICogI2RlZmluZSBfRlBfTVVMX01FQVRfUyhSLFgsWSkJX0ZQX01VTF9NRUFUXzFfaW1tKFMsUixYLFkpCisgKiAjZGVmaW5lIF9GUF9NVUxfTUVBVF9EKFIsWCxZKQlfRlBfTVVMX01FQVRfMV93aWRlKEQsUixYLFksdW11bF9wcG1tKQorICogI2RlZmluZSBfRlBfTVVMX01FQVRfUShSLFgsWSkJX0ZQX01VTF9NRUFUXzJfd2lkZShRLFIsWCxZLHVtdWxfcHBtbSkKKyAqCisgKiAjZGVmaW5lIF9GUF9ESVZfTUVBVF9TKFIsWCxZKQlfRlBfRElWX01FQVRfMV9pbW0oUyxSLFgsWSxfRlBfRElWX0hFTFBfaW1tKQorICogI2RlZmluZSBfRlBfRElWX01FQVRfRChSLFgsWSkJX0ZQX0RJVl9NRUFUXzFfdWRpdihELFIsWCxZKQorICogI2RlZmluZSBfRlBfRElWX01FQVRfUShSLFgsWSkJX0ZQX0RJVl9NRUFUXzJfdWRpdl82NChRLFIsWCxZKQorICoKKyAqIEV4YW1wbGU6IGkzODY6CisgKiAjZGVmaW5lIF9GUF9NVUxfTUVBVF9TKFIsWCxZKSAgIF9GUF9NVUxfTUVBVF8xX3dpZGUoUyxSLFgsWSxfaTM4Nl9tdWxfMzJfNjQpCisgKiAjZGVmaW5lIF9GUF9NVUxfTUVBVF9EKFIsWCxZKSAgIF9GUF9NVUxfTUVBVF8yX3dpZGUoRCxSLFgsWSxfaTM4Nl9tdWxfMzJfNjQpCisgKgorICogI2RlZmluZSBfRlBfRElWX01FQVRfUyhSLFgsWSkgICBfRlBfRElWX01FQVRfMV91ZGl2KFMsUixYLFksX2kzODZfZGl2XzY0XzMyKQorICogI2RlZmluZSBfRlBfRElWX01FQVRfRChSLFgsWSkgICBfRlBfRElWX01FQVRfMl91ZGl2XzY0KEQsUixYLFkpCisgKi8KKworI2RlZmluZSBfRlBfTVVMX01FQVRfUyhSLFgsWSkgICBfRlBfTVVMX01FQVRfMV93aWRlKF9GUF9XRlJBQ0JJVFNfUyxSLFgsWSx1bXVsX3BwbW0pCisjZGVmaW5lIF9GUF9NVUxfTUVBVF9EKFIsWCxZKSAgIF9GUF9NVUxfTUVBVF8yX3dpZGUoX0ZQX1dGUkFDQklUU19ELFIsWCxZLHVtdWxfcHBtbSkKKworI2RlZmluZSBfRlBfRElWX01FQVRfUyhSLFgsWSkJX0ZQX0RJVl9NRUFUXzFfdWRpdihTLFIsWCxZKQorI2RlZmluZSBfRlBfRElWX01FQVRfRChSLFgsWSkJX0ZQX0RJVl9NRUFUXzJfdWRpdihELFIsWCxZKQorCisvKiBUaGVzZSBtYWNyb3MgZGVmaW5lIHdoYXQgTmFOIGxvb2tzIGxpa2UuIFRoZXkncmUgc3VwcG9zZWQgdG8gZXhwYW5kIHRvCisgKiBhIGNvbW1hLXNlcGFyYXRlZCBzZXQgb2YgMzJiaXQgdW5zaWduZWQgaW50cyB0aGF0IGVuY29kZSBOYU4uCisgKi8KKyNkZWZpbmUgX0ZQX05BTkZSQUNfUwkJKChfRlBfUU5BTkJJVF9TIDw8IDEpIC0gMSkKKyNkZWZpbmUgX0ZQX05BTkZSQUNfRAkJKChfRlBfUU5BTkJJVF9EIDw8IDEpIC0gMSksIC0xCisjZGVmaW5lIF9GUF9OQU5GUkFDX1EJCSgoX0ZQX1FOQU5CSVRfUSA8PCAxKSAtIDEpLCAtMSwgLTEsIC0xCisjZGVmaW5lIF9GUF9OQU5TSUdOX1MJCTAKKyNkZWZpbmUgX0ZQX05BTlNJR05fRAkJMAorI2RlZmluZSBfRlBfTkFOU0lHTl9RCQkwCisKKyNkZWZpbmUgX0ZQX0tFRVBOQU5GUkFDUCAxCisKKy8qIEV4Y2VwdGlvbiBmbGFncy4gIFdlIHVzZSB0aGUgYml0IHBvc2l0aW9ucyBvZiB0aGUgYXBwcm9wcmlhdGUgYml0cworICAgaW4gdGhlIEZQU0NSLCB3aGljaCBhbHNvIGNvcnJlc3BvbmQgdG8gdGhlIEZFXyogYml0cy4gIFRoaXMgbWFrZXMKKyAgIGV2ZXJ5dGhpbmcgZWFzaWVyIDstKS4gICovCisjZGVmaW5lIEZQX0VYX0lOVkFMSUQgICAgICAgICAoMSA8PCAoMzEgLSAyKSkKKyNkZWZpbmUgRlBfRVhfSU5WQUxJRF9TTkFOCUVGTEFHX1ZYU05BTgorI2RlZmluZSBGUF9FWF9JTlZBTElEX0lTSQlFRkxBR19WWElTSQorI2RlZmluZSBGUF9FWF9JTlZBTElEX0lESQlFRkxBR19WWElESQorI2RlZmluZSBGUF9FWF9JTlZBTElEX1pEWglFRkxBR19WWFpEWgorI2RlZmluZSBGUF9FWF9JTlZBTElEX0lNWglFRkxBR19WWElNWgorI2RlZmluZSBGUF9FWF9PVkVSRkxPVyAgICAgICAgKDEgPDwgKDMxIC0gMykpCisjZGVmaW5lIEZQX0VYX1VOREVSRkxPVyAgICAgICAoMSA8PCAoMzEgLSA0KSkKKyNkZWZpbmUgRlBfRVhfRElWWkVSTyAgICAgICAgICgxIDw8ICgzMSAtIDUpKQorI2RlZmluZSBGUF9FWF9JTkVYQUNUICAgICAgICAgKDEgPDwgKDMxIC0gNikpCisKKy8qIFRoaXMgbWFjcm8gYXBwZWFycyB0byBiZSBjYWxsZWQgd2hlbiBib3RoIFggYW5kIFkgYXJlIE5hTnMsIGFuZAorICogaGFzIHRvIGNob29zZSBvbmUgYW5kIGNvcHkgaXQgdG8gUi4gaTM4NiBnb2VzIGZvciB0aGUgbGFyZ2VyIG9mIHRoZQorICogdHdvLCBzcGFyYzY0IGp1c3QgcGlja3MgWS4gSSBkb24ndCB1bmRlcnN0YW5kIHRoaXMgYXQgYWxsIHNvIEknbGwKKyAqIGdvIHdpdGggc3BhcmM2NCBiZWNhdXNlIGl0J3Mgc2hvcnRlciA6LT4gICAtLSBQTU0KKyAqLworI2RlZmluZSBfRlBfQ0hPT1NFTkFOKGZzLCB3YywgUiwgWCwgWSwgT1ApCQlcCisgIGRvIHsJCQkJCQkJXAorICAgIFIjI19zID0gWSMjX3M7CQkJCQlcCisgICAgX0ZQX0ZSQUNfQ09QWV8jI3djKFIsWSk7CQkJCVwKKyAgICBSIyNfYyA9IEZQX0NMU19OQU47CQkJCQlcCisgIH0gd2hpbGUgKDApCisKKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisKKyNkZWZpbmUgX19GUFVfRlBTQ1IJKGN1cnJlbnQtPnRocmVhZC5mcHNjci52YWwpCisKKy8qIFdlIG9ubHkgYWN0dWFsbHkgd3JpdGUgdG8gdGhlIGRlc3RpbmF0aW9uIHJlZ2lzdGVyCisgKiBpZiBleGNlcHRpb25zIHNpZ25hbGxlZCAoaWYgYW55KSB3aWxsIG5vdCB0cmFwLgorICovCisjZGVmaW5lIF9fRlBVX0VOQUJMRURfRVhDIFwKKyh7CQkJCQkJXAorCShfX0ZQVV9GUFNDUiA+PiAzKSAmIDB4MWY7CVwKK30pCisKKyNkZWZpbmUgX19GUFVfVFJBUF9QKGJpdHMpIFwKKwkoKF9fRlBVX0VOQUJMRURfRVhDICYgKGJpdHMpKSAhPSAwKQorCisjZGVmaW5lIF9fRlBfUEFDS19TKHZhbCxYKQkJCVwKKyh7ICBpbnQgX19leGMgPSBfRlBfUEFDS19DQU5PTklDQUwoUywxLFgpOwlcCisgICAgaWYoIV9fZXhjIHx8ICFfX0ZQVV9UUkFQX1AoX19leGMpKQkJXAorICAgICAgICBfRlBfUEFDS19SQVdfMV9QKFMsdmFsLFgpOwkJXAorICAgIF9fZXhjOwkJCQkJXAorfSkKKworI2RlZmluZSBfX0ZQX1BBQ0tfRCh2YWwsWCkJCQlcCisgICBkbyB7CQkJCQkJCQkJXAorCV9GUF9QQUNLX0NBTk9OSUNBTChELCAyLCBYKTsJCQkJCVwKKwlpZiAoIUZQX0NVUl9FWENFUFRJT05TIHx8ICFfX0ZQVV9UUkFQX1AoRlBfQ1VSX0VYQ0VQVElPTlMpKQlcCisJCV9GUF9QQUNLX1JBV18yX1AoRCwgdmFsLCBYKTsJCQkJXAorICAgfSB3aGlsZSAoMCkKKworI2RlZmluZSBfX0ZQX1BBQ0tfRFModmFsLFgpCQkJCQkJCVwKKyAgIGRvIHsJCQkJCQkJCQkJXAorCSAgIEZQX0RFQ0xfUyhfX1gpOwkJCQkJCQlcCisJICAgRlBfQ09OVihTLCBELCAxLCAyLCBfX1gsIFgpOwkJCQkJCVwKKwkgICBfRlBfUEFDS19DQU5PTklDQUwoUywgMSwgX19YKTsJCQkJCVwKKwkgICBpZiAoIUZQX0NVUl9FWENFUFRJT05TIHx8ICFfX0ZQVV9UUkFQX1AoRlBfQ1VSX0VYQ0VQVElPTlMpKSB7CVwKKwkJICAgX0ZQX1VOUEFDS19DQU5PTklDQUwoUywgMSwgX19YKTsJCQkJXAorCQkgICBGUF9DT05WKEQsIFMsIDIsIDEsIFgsIF9fWCk7CQkJCQlcCisJCSAgIF9GUF9QQUNLX0NBTk9OSUNBTChELCAyLCBYKTsJCQkJCVwKKwkJICAgaWYgKCFGUF9DVVJfRVhDRVBUSU9OUyB8fCAhX19GUFVfVFJBUF9QKEZQX0NVUl9FWENFUFRJT05TKSkJXAorCQkgICBfRlBfUEFDS19SQVdfMl9QKEQsIHZhbCwgWCk7CQkJCQlcCisJICAgfQkJCQkJCQkJCVwKKyAgIH0gd2hpbGUgKDApCisKKy8qIE9idGFpbiB0aGUgY3VycmVudCByb3VuZGluZyBtb2RlLiAqLworI2RlZmluZSBGUF9ST1VORE1PREUJCQlcCisoewkJCQkJXAorCV9fRlBVX0ZQU0NSICYgMHgzOwkJXAorfSkKKworLyogdGhlIGFzbSBmcmFnbWVudHMgZ28gaGVyZTogYWxsIHRoZXNlIGFyZSB0YWtlbiBmcm9tIGdsaWJjLTIuMC41J3MKKyAqIHN0ZGxpYi9sb25nbG9uZy5oCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgorCisvKiBhZGRfc3NhYWFhIGlzIHVzZWQgaW4gb3AtMi5oIGFuZCBzaG91bGQgYmUgZXF1aXZhbGVudCB0bworICogI2RlZmluZSBhZGRfc3NhYWFhKHNoLHNsLGFoLGFsLGJoLGJsKSAoc2ggPSBhaCtiaCsgKCggc2wgPSBhbCtibCkgPCBhbCkpCisgKiBhZGRfc3NhYWFhKGhpZ2hfc3VtLCBsb3dfc3VtLCBoaWdoX2FkZGVuZF8xLCBsb3dfYWRkZW5kXzEsCisgKiBoaWdoX2FkZGVuZF8yLCBsb3dfYWRkZW5kXzIpIGFkZHMgdHdvIFVXdHlwZSBpbnRlZ2VycywgY29tcG9zZWQgYnkKKyAqIEhJR0hfQURERU5EXzEgYW5kIExPV19BRERFTkRfMSwgYW5kIEhJR0hfQURERU5EXzIgYW5kIExPV19BRERFTkRfMgorICogcmVzcGVjdGl2ZWx5LiAgVGhlIHJlc3VsdCBpcyBwbGFjZWQgaW4gSElHSF9TVU0gYW5kIExPV19TVU0uICBPdmVyZmxvdworICogKGkuZS4gY2Fycnkgb3V0KSBpcyBub3Qgc3RvcmVkIGFueXdoZXJlLCBhbmQgaXMgbG9zdC4KKyAqLworI2RlZmluZSBhZGRfc3NhYWFhKHNoLCBzbCwgYWgsIGFsLCBiaCwgYmwpCQkJCVwKKyAgZG8gewkJCQkJCQkJCVwKKyAgICBpZiAoX19idWlsdGluX2NvbnN0YW50X3AgKGJoKSAmJiAoYmgpID09IDApCQkJCVwKKyAgICAgIF9fYXNtX18gKCJ7YSVJNHxhZGQlSTRjfSAlMSwlMywlNFxuXHR7YXplfGFkZHplfSAlMCwlMiIJCVwKKwkgICAgIDogIj1yIiAoKFVTSXR5cGUpKHNoKSksCQkJCQlcCisJICAgICAgICI9JnIiICgoVVNJdHlwZSkoc2wpKQkJCQkJXAorCSAgICAgOiAiJXIiICgoVVNJdHlwZSkoYWgpKSwJCQkJCVwKKwkgICAgICAgIiVyIiAoKFVTSXR5cGUpKGFsKSksCQkJCQlcCisJICAgICAgICJySSIgKChVU0l0eXBlKShibCkpKTsJCQkJCVwKKyAgICBlbHNlIGlmIChfX2J1aWx0aW5fY29uc3RhbnRfcCAoYmgpICYmIChiaCkgPT1+KFVTSXR5cGUpIDApCQlcCisgICAgICBfX2FzbV9fICgie2ElSTR8YWRkJUk0Y30gJTEsJTMsJTRcblx0e2FtZXxhZGRtZX0gJTAsJTIiCQlcCisJICAgICA6ICI9ciIgKChVU0l0eXBlKShzaCkpLAkJCQkJXAorCSAgICAgICAiPSZyIiAoKFVTSXR5cGUpKHNsKSkJCQkJCVwKKwkgICAgIDogIiVyIiAoKFVTSXR5cGUpKGFoKSksCQkJCQlcCisJICAgICAgICIlciIgKChVU0l0eXBlKShhbCkpLAkJCQkJXAorCSAgICAgICAickkiICgoVVNJdHlwZSkoYmwpKSk7CQkJCQlcCisgICAgZWxzZQkJCQkJCQkJXAorICAgICAgX19hc21fXyAoInthJUk1fGFkZCVJNWN9ICUxLCU0LCU1XG5cdHthZXxhZGRlfSAlMCwlMiwlMyIJCVwKKwkgICAgIDogIj1yIiAoKFVTSXR5cGUpKHNoKSksCQkJCQlcCisJICAgICAgICI9JnIiICgoVVNJdHlwZSkoc2wpKQkJCQkJXAorCSAgICAgOiAiJXIiICgoVVNJdHlwZSkoYWgpKSwJCQkJCVwKKwkgICAgICAgInIiICgoVVNJdHlwZSkoYmgpKSwJCQkJCVwKKwkgICAgICAgIiVyIiAoKFVTSXR5cGUpKGFsKSksCQkJCQlcCisJICAgICAgICJySSIgKChVU0l0eXBlKShibCkpKTsJCQkJCVwKKyAgfSB3aGlsZSAoMCkKKworLyogc3ViX2RkbW1zcyBpcyB1c2VkIGluIG9wLTIuaCBhbmQgdWRpdm1vZHRpNC5jIGFuZCBzaG91bGQgYmUgZXF1aXZhbGVudCB0bworICogI2RlZmluZSBzdWJfZGRtbXNzKHNoLCBzbCwgYWgsIGFsLCBiaCwgYmwpIChzaCA9IGFoLWJoIC0gKChzbCA9IGFsLWJsKSA+IGFsKSkKKyAqIHN1Yl9kZG1tc3MoaGlnaF9kaWZmZXJlbmNlLCBsb3dfZGlmZmVyZW5jZSwgaGlnaF9taW51ZW5kLCBsb3dfbWludWVuZCwKKyAqIGhpZ2hfc3VidHJhaGVuZCwgbG93X3N1YnRyYWhlbmQpIHN1YnRyYWN0cyB0d28gdHdvLXdvcmQgVVd0eXBlIGludGVnZXJzLAorICogY29tcG9zZWQgYnkgSElHSF9NSU5VRU5EXzEgYW5kIExPV19NSU5VRU5EXzEsIGFuZCBISUdIX1NVQlRSQUhFTkRfMiBhbmQKKyAqIExPV19TVUJUUkFIRU5EXzIgcmVzcGVjdGl2ZWx5LiAgVGhlIHJlc3VsdCBpcyBwbGFjZWQgaW4gSElHSF9ESUZGRVJFTkNFCisgKiBhbmQgTE9XX0RJRkZFUkVOQ0UuICBPdmVyZmxvdyAoaS5lLiBjYXJyeSBvdXQpIGlzIG5vdCBzdG9yZWQgYW55d2hlcmUsCisgKiBhbmQgaXMgbG9zdC4KKyAqLworI2RlZmluZSBzdWJfZGRtbXNzKHNoLCBzbCwgYWgsIGFsLCBiaCwgYmwpCQkJCVwKKyAgZG8gewkJCQkJCQkJCVwKKyAgICBpZiAoX19idWlsdGluX2NvbnN0YW50X3AgKGFoKSAmJiAoYWgpID09IDApCQkJCVwKKyAgICAgIF9fYXNtX18gKCJ7c2YlSTN8c3ViZiVJM2N9ICUxLCU0LCUzXG5cdHtzZnplfHN1YmZ6ZX0gJTAsJTIiCVwKKwkgICAgICAgOiAiPXIiICgoVVNJdHlwZSkoc2gpKSwJCQkJCVwKKwkJICI9JnIiICgoVVNJdHlwZSkoc2wpKQkJCQkJXAorCSAgICAgICA6ICJyIiAoKFVTSXR5cGUpKGJoKSksCQkJCQlcCisJCSAickkiICgoVVNJdHlwZSkoYWwpKSwJCQkJCVwKKwkJICJyIiAoKFVTSXR5cGUpKGJsKSkpOwkJCQkJXAorICAgIGVsc2UgaWYgKF9fYnVpbHRpbl9jb25zdGFudF9wIChhaCkgJiYgKGFoKSA9PX4oVVNJdHlwZSkgMCkJCVwKKyAgICAgIF9fYXNtX18gKCJ7c2YlSTN8c3ViZiVJM2N9ICUxLCU0LCUzXG5cdHtzZm1lfHN1YmZtZX0gJTAsJTIiCVwKKwkgICAgICAgOiAiPXIiICgoVVNJdHlwZSkoc2gpKSwJCQkJCVwKKwkJICI9JnIiICgoVVNJdHlwZSkoc2wpKQkJCQkJXAorCSAgICAgICA6ICJyIiAoKFVTSXR5cGUpKGJoKSksCQkJCQlcCisJCSAickkiICgoVVNJdHlwZSkoYWwpKSwJCQkJCVwKKwkJICJyIiAoKFVTSXR5cGUpKGJsKSkpOwkJCQkJXAorICAgIGVsc2UgaWYgKF9fYnVpbHRpbl9jb25zdGFudF9wIChiaCkgJiYgKGJoKSA9PSAwKQkJCVwKKyAgICAgIF9fYXNtX18gKCJ7c2YlSTN8c3ViZiVJM2N9ICUxLCU0LCUzXG5cdHthbWV8YWRkbWV9ICUwLCUyIgkJXAorCSAgICAgICA6ICI9ciIgKChVU0l0eXBlKShzaCkpLAkJCQkJXAorCQkgIj0mciIgKChVU0l0eXBlKShzbCkpCQkJCQlcCisJICAgICAgIDogInIiICgoVVNJdHlwZSkoYWgpKSwJCQkJCVwKKwkJICJySSIgKChVU0l0eXBlKShhbCkpLAkJCQkJXAorCQkgInIiICgoVVNJdHlwZSkoYmwpKSk7CQkJCQlcCisgICAgZWxzZSBpZiAoX19idWlsdGluX2NvbnN0YW50X3AgKGJoKSAmJiAoYmgpID09fihVU0l0eXBlKSAwKQkJXAorICAgICAgX19hc21fXyAoIntzZiVJM3xzdWJmJUkzY30gJTEsJTQsJTNcblx0e2F6ZXxhZGR6ZX0gJTAsJTIiCQlcCisJICAgICAgIDogIj1yIiAoKFVTSXR5cGUpKHNoKSksCQkJCQlcCisJCSAiPSZyIiAoKFVTSXR5cGUpKHNsKSkJCQkJCVwKKwkgICAgICAgOiAiciIgKChVU0l0eXBlKShhaCkpLAkJCQkJXAorCQkgInJJIiAoKFVTSXR5cGUpKGFsKSksCQkJCQlcCisJCSAiciIgKChVU0l0eXBlKShibCkpKTsJCQkJCVwKKyAgICBlbHNlCQkJCQkJCQlcCisgICAgICBfX2FzbV9fICgie3NmJUk0fHN1YmYlSTRjfSAlMSwlNSwlNFxuXHR7c2ZlfHN1YmZlfSAlMCwlMywlMiIJXAorCSAgICAgICA6ICI9ciIgKChVU0l0eXBlKShzaCkpLAkJCQkJXAorCQkgIj0mciIgKChVU0l0eXBlKShzbCkpCQkJCQlcCisJICAgICAgIDogInIiICgoVVNJdHlwZSkoYWgpKSwJCQkJCVwKKwkJICJyIiAoKFVTSXR5cGUpKGJoKSksCQkJCQlcCisJCSAickkiICgoVVNJdHlwZSkoYWwpKSwJCQkJCVwKKwkJICJyIiAoKFVTSXR5cGUpKGJsKSkpOwkJCQkJXAorICB9IHdoaWxlICgwKQorCisvKiBhc20gZnJhZ21lbnRzIGZvciBtdWwgYW5kIGRpdiAqLworCisvKiB1bXVsX3BwbW0oaGlnaF9wcm9kLCBsb3dfcHJvZCwgbXVsdGlwbGVyLCBtdWx0aXBsaWNhbmQpIG11bHRpcGxpZXMgdHdvCisgKiBVV3R5cGUgaW50ZWdlcnMgTVVMVElQTEVSIGFuZCBNVUxUSVBMSUNBTkQsIGFuZCBnZW5lcmF0ZXMgYSB0d28gVVd0eXBlCisgKiB3b3JkIHByb2R1Y3QgaW4gSElHSF9QUk9EIGFuZCBMT1dfUFJPRC4KKyAqLworI2RlZmluZSB1bXVsX3BwbW0ocGgsIHBsLCBtMCwgbTEpCQkJCQlcCisgIGRvIHsJCQkJCQkJCQlcCisgICAgVVNJdHlwZSBfX20wID0gKG0wKSwgX19tMSA9IChtMSk7CQkJCQlcCisgICAgX19hc21fXyAoIm11bGh3dSAlMCwlMSwlMiIJCQkJCQlcCisJICAgICA6ICI9ciIgKChVU0l0eXBlKShwaCkpCQkJCQlcCisJICAgICA6ICIlciIgKF9fbTApLAkJCQkJCVwKKyAgICAgICAgICAgICAgICJyIiAoX19tMSkpOwkJCQkJCVwKKyAgICAocGwpID0gX19tMCAqIF9fbTE7CQkJCQkJCVwKKyAgfSB3aGlsZSAoMCkKKworLyogdWRpdl9xcm5uZChxdW90aWVudCwgcmVtYWluZGVyLCBoaWdoX251bWVyYXRvciwgbG93X251bWVyYXRvciwKKyAqIGRlbm9taW5hdG9yKSBkaXZpZGVzIGEgVURXdHlwZSwgY29tcG9zZWQgYnkgdGhlIFVXdHlwZSBpbnRlZ2VycworICogSElHSF9OVU1FUkFUT1IgYW5kIExPV19OVU1FUkFUT1IsIGJ5IERFTk9NSU5BVE9SIGFuZCBwbGFjZXMgdGhlIHF1b3RpZW50CisgKiBpbiBRVU9USUVOVCBhbmQgdGhlIHJlbWFpbmRlciBpbiBSRU1BSU5ERVIuICBISUdIX05VTUVSQVRPUiBtdXN0IGJlIGxlc3MKKyAqIHRoYW4gREVOT01JTkFUT1IgZm9yIGNvcnJlY3Qgb3BlcmF0aW9uLiAgSWYsIGluIGFkZGl0aW9uLCB0aGUgbW9zdAorICogc2lnbmlmaWNhbnQgYml0IG9mIERFTk9NSU5BVE9SIG11c3QgYmUgMSwgdGhlbiB0aGUgcHJlLXByb2Nlc3NvciBzeW1ib2wKKyAqIFVESVZfTkVFRFNfTk9STUFMSVpBVElPTiBpcyBkZWZpbmVkIHRvIDEuCisgKi8KKyNkZWZpbmUgdWRpdl9xcm5uZChxLCByLCBuMSwgbjAsIGQpCQkJCQlcCisgIGRvIHsJCQkJCQkJCQlcCisgICAgVVd0eXBlIF9fZDEsIF9fZDAsIF9fcTEsIF9fcTAsIF9fcjEsIF9fcjAsIF9fbTsJCQlcCisgICAgX19kMSA9IF9fbGxfaGlnaHBhcnQgKGQpOwkJCQkJCVwKKyAgICBfX2QwID0gX19sbF9sb3dwYXJ0IChkKTsJCQkJCQlcCisJCQkJCQkJCQlcCisgICAgX19yMSA9IChuMSkgJSBfX2QxOwkJCQkJCQlcCisgICAgX19xMSA9IChuMSkgLyBfX2QxOwkJCQkJCQlcCisgICAgX19tID0gKFVXdHlwZSkgX19xMSAqIF9fZDA7CQkJCQkJXAorICAgIF9fcjEgPSBfX3IxICogX19sbF9CIHwgX19sbF9oaWdocGFydCAobjApOwkJCQlcCisgICAgaWYgKF9fcjEgPCBfX20pCQkJCQkJCVwKKyAgICAgIHsJCQkJCQkJCQlcCisJX19xMS0tLCBfX3IxICs9IChkKTsJCQkJCQlcCisJaWYgKF9fcjEgPj0gKGQpKSAvKiB3ZSBkaWRuJ3QgZ2V0IGNhcnJ5IHdoZW4gYWRkaW5nIHRvIF9fcjEgKi8JXAorCSAgaWYgKF9fcjEgPCBfX20pCQkJCQkJXAorCSAgICBfX3ExLS0sIF9fcjEgKz0gKGQpOwkJCQkJXAorICAgICAgfQkJCQkJCQkJCVwKKyAgICBfX3IxIC09IF9fbTsJCQkJCQkJXAorCQkJCQkJCQkJXAorICAgIF9fcjAgPSBfX3IxICUgX19kMTsJCQkJCQkJXAorICAgIF9fcTAgPSBfX3IxIC8gX19kMTsJCQkJCQkJXAorICAgIF9fbSA9IChVV3R5cGUpIF9fcTAgKiBfX2QwOwkJCQkJCVwKKyAgICBfX3IwID0gX19yMCAqIF9fbGxfQiB8IF9fbGxfbG93cGFydCAobjApOwkJCQlcCisgICAgaWYgKF9fcjAgPCBfX20pCQkJCQkJCVwKKyAgICAgIHsJCQkJCQkJCQlcCisJX19xMC0tLCBfX3IwICs9IChkKTsJCQkJCQlcCisJaWYgKF9fcjAgPj0gKGQpKQkJCQkJCVwKKwkgIGlmIChfX3IwIDwgX19tKQkJCQkJCVwKKwkgICAgX19xMC0tLCBfX3IwICs9IChkKTsJCQkJCVwKKyAgICAgIH0JCQkJCQkJCQlcCisgICAgX19yMCAtPSBfX207CQkJCQkJCVwKKwkJCQkJCQkJCVwKKyAgICAocSkgPSAoVVd0eXBlKSBfX3ExICogX19sbF9CIHwgX19xMDsJCQkJXAorICAgIChyKSA9IF9fcjA7CQkJCQkJCQlcCisgIH0gd2hpbGUgKDApCisKKyNkZWZpbmUgVURJVl9ORUVEU19OT1JNQUxJWkFUSU9OIDEKKworI2RlZmluZSBhYm9ydCgpCQkJCQkJCQlcCisJcmV0dXJuIDAKKworI2lmZGVmIF9fQklHX0VORElBTgorI2RlZmluZSBfX0JZVEVfT1JERVIgX19CSUdfRU5ESUFOCisjZWxzZQorI2RlZmluZSBfX0JZVEVfT1JERVIgX19MSVRUTEVfRU5ESUFOCisjZW5kaWYKKworLyogRXhjZXB0aW9uIGZsYWdzLiAqLworI2RlZmluZSBFRkxBR19JTlZBTElECQkoMSA8PCAoMzEgLSAyKSkKKyNkZWZpbmUgRUZMQUdfT1ZFUkZMT1cJCSgxIDw8ICgzMSAtIDMpKQorI2RlZmluZSBFRkxBR19VTkRFUkZMT1cJCSgxIDw8ICgzMSAtIDQpKQorI2RlZmluZSBFRkxBR19ESVZaRVJPCQkoMSA8PCAoMzEgLSA1KSkKKyNkZWZpbmUgRUZMQUdfSU5FWEFDVAkJKDEgPDwgKDMxIC0gNikpCisKKyNkZWZpbmUgRUZMQUdfVlhTTkFOCQkoMSA8PCAoMzEgLSA3KSkKKyNkZWZpbmUgRUZMQUdfVlhJU0kJCSgxIDw8ICgzMSAtIDgpKQorI2RlZmluZSBFRkxBR19WWElESQkJKDEgPDwgKDMxIC0gOSkpCisjZGVmaW5lIEVGTEFHX1ZYWkRaCQkoMSA8PCAoMzEgLSAxMCkpCisjZGVmaW5lIEVGTEFHX1ZYSU1aCQkoMSA8PCAoMzEgLSAxMSkpCisjZGVmaW5lIEVGTEFHX1ZYVkMJCSgxIDw8ICgzMSAtIDEyKSkKKyNkZWZpbmUgRUZMQUdfVlhTT0ZUCQkoMSA8PCAoMzEgLSAyMSkpCisjZGVmaW5lIEVGTEFHX1ZYU1FSVAkJKDEgPDwgKDMxIC0gMjIpKQorI2RlZmluZSBFRkxBR19WWENWSQkJKDEgPDwgKDMxIC0gMjMpKQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3NtcC5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3NtcC5oCmluZGV4IDRkMjhlMWUuLjE4NjZjZWMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9zbXAuaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vc21wLmgKQEAgLTU2LDkgKzU2LDE2IEBACiAKICNkZWZpbmUgcmF3X3NtcF9wcm9jZXNzb3JfaWQoKQkoY3VycmVudF90aHJlYWRfaW5mbygpLT5jcHUpCiAjZGVmaW5lIGhhcmRfc21wX3Byb2Nlc3Nvcl9pZCgpIAkoc21wX2h3X2luZGV4W3NtcF9wcm9jZXNzb3JfaWQoKV0pCi0jZGVmaW5lIGdldF9oYXJkX3NtcF9wcm9jZXNzb3JfaWQoY3B1KQkoc21wX2h3X2luZGV4WyhjcHUpXSkKLSNkZWZpbmUgc2V0X2hhcmRfc21wX3Byb2Nlc3Nvcl9pZChjcHUsIHBoeXMpXAotCQkJCQkoc21wX2h3X2luZGV4WyhjcHUpXSA9IChwaHlzKSkKKworc3RhdGljIGlubGluZSBpbnQgZ2V0X2hhcmRfc21wX3Byb2Nlc3Nvcl9pZChpbnQgY3B1KQoreworCXJldHVybiBzbXBfaHdfaW5kZXhbY3B1XTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHNldF9oYXJkX3NtcF9wcm9jZXNzb3JfaWQoaW50IGNwdSwgaW50IHBoeXMpCit7CisJc21wX2h3X2luZGV4W2NwdV0gPSBwaHlzOworfQogI2VuZGlmCiAKIERFQ0xBUkVfUEVSX0NQVShjcHVtYXNrX3QsIGNwdV9zaWJsaW5nX21hcCk7CkBAIC04NiwxNSArOTMsMjEgQEAKIAogI2Vsc2UKIC8qIGZvciBVUCAqLwotI2RlZmluZSBoYXJkX3NtcF9wcm9jZXNzb3JfaWQoKQkJMAorI2RlZmluZSBoYXJkX3NtcF9wcm9jZXNzb3JfaWQoKQkJZ2V0X2hhcmRfc21wX3Byb2Nlc3Nvcl9pZCgwKQogI2RlZmluZSBzbXBfc2V0dXBfY3B1X21hcHMoKQogCiAjZW5kaWYgLyogQ09ORklHX1NNUCAqLwogCiAjaWZkZWYgQ09ORklHX1BQQzY0Ci0jZGVmaW5lIGdldF9oYXJkX3NtcF9wcm9jZXNzb3JfaWQoQ1BVKSAocGFjYVsoQ1BVKV0uaHdfY3B1X2lkKQotI2RlZmluZSBzZXRfaGFyZF9zbXBfcHJvY2Vzc29yX2lkKENQVSwgVkFMKSBcCi0JZG8geyAocGFjYVsoQ1BVKV0uaHdfY3B1X2lkID0gKFZBTCkpOyB9IHdoaWxlICgwKQorc3RhdGljIGlubGluZSBpbnQgZ2V0X2hhcmRfc21wX3Byb2Nlc3Nvcl9pZChpbnQgY3B1KQoreworCXJldHVybiBwYWNhW2NwdV0uaHdfY3B1X2lkOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc2V0X2hhcmRfc21wX3Byb2Nlc3Nvcl9pZChpbnQgY3B1LCBpbnQgcGh5cykKK3sKKwlwYWNhW2NwdV0uaHdfY3B1X2lkID0gcGh5czsKK30KIAogZXh0ZXJuIHZvaWQgc21wX3JlbGVhc2VfY3B1cyh2b2lkKTsKIApAQCAtMTAyLDEwICsxMTUsMTcgQEAKIC8qIDMyLWJpdCAqLwogI2lmbmRlZiBDT05GSUdfU01QCiBleHRlcm4gaW50IGJvb3RfY3B1aWRfcGh5czsKLSNkZWZpbmUgZ2V0X2hhcmRfc21wX3Byb2Nlc3Nvcl9pZChjcHUpIAlib290X2NwdWlkX3BoeXMKLSNkZWZpbmUgc2V0X2hhcmRfc21wX3Byb2Nlc3Nvcl9pZChjcHUsIHBoeXMpCi0jZW5kaWYKLSNlbmRpZgorc3RhdGljIGlubGluZSBpbnQgZ2V0X2hhcmRfc21wX3Byb2Nlc3Nvcl9pZChpbnQgY3B1KQoreworCXJldHVybiBib290X2NwdWlkX3BoeXM7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRfaGFyZF9zbXBfcHJvY2Vzc29yX2lkKGludCBjcHUsIGludCBwaHlzKQoreworCWJvb3RfY3B1aWRfcGh5cyA9IHBoeXM7Cit9CisjZW5kaWYgLyogIUNPTkZJR19TTVAgKi8KKyNlbmRpZiAvKiAhQ09ORklHX1BQQzY0ICovCiAKIGV4dGVybiBpbnQgc210X2VuYWJsZWRfYXRfYm9vdDsKIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3N0YXRmcy5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3N0YXRmcy5oCmluZGV4IDY3MDI0MDIuLjUyNDQ4MzQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9zdGF0ZnMuaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vc3RhdGZzLmgKQEAgLTEsNjAgKzEsNiBAQAogI2lmbmRlZiBfQVNNX1BPV0VSUENfU1RBVEZTX0gKICNkZWZpbmUgX0FTTV9QT1dFUlBDX1NUQVRGU19ICiAKLS8qIEZvciBwcGMzMiB3ZSBqdXN0IHVzZSB0aGUgZ2VuZXJpYyBkZWZpbml0aW9ucywgbm90IHNvIHNpbXBsZSBvbiBwcGM2NCAqLwotCi0jaWZuZGVmIF9fcG93ZXJwYzY0X18KICNpbmNsdWRlIDxhc20tZ2VuZXJpYy9zdGF0ZnMuaD4KLSNlbHNlCiAKLSNpZm5kZWYgX19LRVJORUxfU1RSSUNUX05BTUVTCi0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLXR5cGVkZWYgX19rZXJuZWxfZnNpZF90CWZzaWRfdDsKLSNlbmRpZgotCi0vKgotICogV2UncmUgYWxyZWFkeSA2NC1iaXQsIHNvIGR1cGxpY2F0ZSB0aGUgZGVmaW5pdGlvbgotICovCi1zdHJ1Y3Qgc3RhdGZzIHsKLQlsb25nIGZfdHlwZTsKLQlsb25nIGZfYnNpemU7Ci0JbG9uZyBmX2Jsb2NrczsKLQlsb25nIGZfYmZyZWU7Ci0JbG9uZyBmX2JhdmFpbDsKLQlsb25nIGZfZmlsZXM7Ci0JbG9uZyBmX2ZmcmVlOwotCV9fa2VybmVsX2ZzaWRfdCBmX2ZzaWQ7Ci0JbG9uZyBmX25hbWVsZW47Ci0JbG9uZyBmX2Zyc2l6ZTsKLQlsb25nIGZfc3BhcmVbNV07Ci19OwotCi1zdHJ1Y3Qgc3RhdGZzNjQgewotCWxvbmcgZl90eXBlOwotCWxvbmcgZl9ic2l6ZTsKLQlsb25nIGZfYmxvY2tzOwotCWxvbmcgZl9iZnJlZTsKLQlsb25nIGZfYmF2YWlsOwotCWxvbmcgZl9maWxlczsKLQlsb25nIGZfZmZyZWU7Ci0JX19rZXJuZWxfZnNpZF90IGZfZnNpZDsKLQlsb25nIGZfbmFtZWxlbjsKLQlsb25nIGZfZnJzaXplOwotCWxvbmcgZl9zcGFyZVs1XTsKLX07Ci0KLXN0cnVjdCBjb21wYXRfc3RhdGZzNjQgewotCV9fdTMyIGZfdHlwZTsKLQlfX3UzMiBmX2JzaXplOwotCV9fdTY0IGZfYmxvY2tzOwotCV9fdTY0IGZfYmZyZWU7Ci0JX191NjQgZl9iYXZhaWw7Ci0JX191NjQgZl9maWxlczsKLQlfX3U2NCBmX2ZmcmVlOwotCV9fa2VybmVsX2ZzaWRfdCBmX2ZzaWQ7Ci0JX191MzIgZl9uYW1lbGVuOwotCV9fdTMyIGZfZnJzaXplOwotCV9fdTMyIGZfc3BhcmVbNV07Ci19OwotI2VuZGlmIC8qICEgX19wb3dlcnBjNjRfXyAqLwogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vc3lzdGJsLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vc3lzdGJsLmgKaW5kZXggZjZjYzdhNC4uODAzZGVmMjMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9zeXN0YmwuaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vc3lzdGJsLmgKQEAgLTMyLDcgKzMyLDcgQEAKIENPTVBBVF9TWVMocHRyYWNlKQogU1lTQ0FMTF9TUFUoYWxhcm0pCiBPTERTWVMoZnN0YXQpCi1DT01QQVRfU1lTKHBhdXNlKQorU1lTQ0FMTChwYXVzZSkKIENPTVBBVF9TWVModXRpbWUpCiBTWVNDQUxMKG5pX3N5c2NhbGwpCiBTWVNDQUxMKG5pX3N5c2NhbGwpCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vdGxiZmx1c2guaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS90bGJmbHVzaC5oCmluZGV4IDM2MWNkNWMuLmEyYzZiZmQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS90bGJmbHVzaC5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS90bGJmbHVzaC5oCkBAIC0yOSw2ICsyOSw5IEBACiAjaW5jbHVkZSA8bGludXgvbW0uaD4KIAogZXh0ZXJuIHZvaWQgX3RsYmllKHVuc2lnbmVkIGxvbmcgYWRkcmVzcywgdW5zaWduZWQgaW50IHBpZCk7CitleHRlcm4gdm9pZCBfdGxiaWxfYWxsKHZvaWQpOworZXh0ZXJuIHZvaWQgX3RsYmlsX3BpZCh1bnNpZ25lZCBpbnQgcGlkKTsKK2V4dGVybiB2b2lkIF90bGJpbF92YSh1bnNpZ25lZCBsb25nIGFkZHJlc3MsIHVuc2lnbmVkIGludCBwaWQpOwogCiAjaWYgZGVmaW5lZChDT05GSUdfNDB4KSB8fCBkZWZpbmVkKENPTkZJR184eHgpCiAjZGVmaW5lIF90bGJpYSgpCWFzbSB2b2xhdGlsZSAoInRsYmlhOyBzeW5jIiA6IDogOiAibWVtb3J5IikKQEAgLTM4LDMxICs0MSwzMSBAQAogCiBzdGF0aWMgaW5saW5lIHZvaWQgZmx1c2hfdGxiX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQogewotCV90bGJpYSgpOworCV90bGJpbF9waWQobW0tPmNvbnRleHQuaWQpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgZmx1c2hfdGxiX3BhZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCiAJCQkJICB1bnNpZ25lZCBsb25nIHZtYWRkcikKIHsKLQlfdGxiaWUodm1hZGRyLCB2bWEgPyB2bWEtPnZtX21tLT5jb250ZXh0LmlkIDogMCk7CisJX3RsYmlsX3ZhKHZtYWRkciwgdm1hID8gdm1hLT52bV9tbS0+Y29udGV4dC5pZCA6IDApOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgZmx1c2hfdGxiX3BhZ2Vfbm9oYXNoKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAogCQkJCQkgdW5zaWduZWQgbG9uZyB2bWFkZHIpCiB7Ci0JX3RsYmllKHZtYWRkciwgdm1hID8gdm1hLT52bV9tbS0+Y29udGV4dC5pZCA6IDApOworCWZsdXNoX3RsYl9wYWdlKHZtYSwgdm1hZGRyKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIGZsdXNoX3RsYl9yYW5nZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKIAkJCQkgICB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCkKIHsKLQlfdGxiaWEoKTsKKwlfdGxiaWxfcGlkKHZtYS0+dm1fbW0tPmNvbnRleHQuaWQpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgZmx1c2hfdGxiX2tlcm5lbF9yYW5nZSh1bnNpZ25lZCBsb25nIHN0YXJ0LAogCQkJCQkgIHVuc2lnbmVkIGxvbmcgZW5kKQogewotCV90bGJpYSgpOworCV90bGJpbF9waWQoMCk7CiB9CiAKICNlbGlmIGRlZmluZWQoQ09ORklHX1BQQzMyKQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3R5cGVzLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vdHlwZXMuaAppbmRleCBkMzM3NGJjLi5jMDA0YzEzIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vdHlwZXMuaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vdHlwZXMuaApAQCAtNDgsMTQgKzQ4LDcgQEAKIAogdHlwZWRlZiBfX3ZlY3RvcjEyOCB2ZWN0b3IxMjg7CiAKLS8qIFBoeXNpY2FsIGFkZHJlc3MgdXNlZCBieSBzb21lIElPIGZ1bmN0aW9ucyAqLwotI2lmIGRlZmluZWQoQ09ORklHX1BQQzY0KSB8fCBkZWZpbmVkKENPTkZJR19QSFlTXzY0QklUKQotdHlwZWRlZiB1NjQgcGh5c19hZGRyX3Q7Ci0jZWxzZQotdHlwZWRlZiB1MzIgcGh5c19hZGRyX3Q7Ci0jZW5kaWYKLQotI2lmZGVmIF9fcG93ZXJwYzY0X18KKyNpZiBkZWZpbmVkKF9fcG93ZXJwYzY0X18pIHx8IGRlZmluZWQoQ09ORklHX1BIWVNfNjRCSVQpCiB0eXBlZGVmIHU2NCBkbWFfYWRkcl90OwogI2Vsc2UKIHR5cGVkZWYgdTMyIGRtYV9hZGRyX3Q7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsLy5naXRpZ25vcmUgYi9hcmNoL3Bvd2VycGMva2VybmVsLy5naXRpZ25vcmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzVmNjc2YwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvLmdpdGlnbm9yZQpAQCAtMCwwICsxIEBACit2bWxpbnV4LmxkcwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9NYWtlZmlsZSBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvTWFrZWZpbGUKaW5kZXggOTQ2ZGFlYS4uZmRiNTgyNSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9NYWtlZmlsZQorKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL01ha2VmaWxlCkBAIC0yOCwxMyArMjgsMTQgQEAKIG9iai15CQkJCTo9IGNwdXRhYmxlLm8gcHRyYWNlLm8gc3lzY2FsbHMubyBcCiAJCQkJICAgaXJxLm8gYWxpZ24ubyBzaWduYWxfMzIubyBwbWMubyB2ZHNvLm8gXAogCQkJCSAgIGluaXRfdGFzay5vIHByb2Nlc3MubyBzeXN0YmwubyBpZGxlLm8gXAotCQkJCSAgIHNpZ25hbC5vCisJCQkJICAgc2lnbmFsLm8gc3lzZnMubwogb2JqLXkJCQkJKz0gdmRzbzMyLwogb2JqLSQoQ09ORklHX1BQQzY0KQkJKz0gc2V0dXBfNjQubyBzeXNfcHBjMzIubyBcCiAJCQkJICAgc2lnbmFsXzY0Lm8gcHRyYWNlMzIubyBcCiAJCQkJICAgcGFjYS5vIGNwdV9zZXR1cF9wcGM5NzAubyBcCiAJCQkJICAgY3B1X3NldHVwX3BhNnQubyBcCi0JCQkJICAgZmlybXdhcmUubyBzeXNmcy5vIG52cmFtXzY0Lm8KKwkJCQkgICBmaXJtd2FyZS5vIG52cmFtXzY0Lm8KK29iajY0LSQoQ09ORklHX1JFTE9DQVRBQkxFKQkrPSByZWxvY182NC5vCiBvYmotJChDT05GSUdfUFBDNjQpCQkrPSB2ZHNvNjQvCiBvYmotJChDT05GSUdfQUxUSVZFQykJCSs9IHZlY2VtdS5vIHZlY3Rvci5vCiBvYmotJChDT05GSUdfUFBDXzk3MF9OQVApCSs9IGlkbGVfcG93ZXI0Lm8KQEAgLTY5LDEwICs3MCwxMCBAQAogZXh0cmEteQkJCQkrPSB2bWxpbnV4LmxkcwogCiBvYmoteQkJCQkrPSB0aW1lLm8gcHJvbS5vIHRyYXBzLm8gc2V0dXAtY29tbW9uLm8gXAotCQkJCSAgIHVkYmcubyBtaXNjLm8gaW8ubyBcCisJCQkJICAgdWRiZy5vIG1pc2MubyBpby5vIGRtYS5vIFwKIAkJCQkgICBtaXNjXyQoQ09ORklHX1dPUkRfU0laRSkubwogb2JqLSQoQ09ORklHX1BQQzMyKQkJKz0gZW50cnlfMzIubyBzZXR1cF8zMi5vCi1vYmotJChDT05GSUdfUFBDNjQpCQkrPSBkbWFfNjQubyBpb21tdS5vCitvYmotJChDT05GSUdfUFBDNjQpCQkrPSBkbWEtaW9tbXUubyBpb21tdS5vCiBvYmotJChDT05GSUdfS0dEQikJCSs9IGtnZGIubwogb2JqLSQoQ09ORklHX1BQQ19NVUxUSVBMQVRGT1JNKQkrPSBwcm9tX2luaXQubwogb2JqLSQoQ09ORklHX01PRFVMRVMpCQkrPSBwcGNfa3N5bXMubwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9hc20tb2Zmc2V0cy5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9hc20tb2Zmc2V0cy5jCmluZGV4IDkyNzY4ZDMuLjc1YzVkZDAgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvYXNtLW9mZnNldHMuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL2FzbS1vZmZzZXRzLmMKQEAgLTEyMiw2ICsxMjIsOCBAQAogCURFRklORShQQUNBU1RBQlJSLCBvZmZzZXRvZihzdHJ1Y3QgcGFjYV9zdHJ1Y3QsIHN0YWJfcnIpKTsKIAlERUZJTkUoUEFDQVIxLCBvZmZzZXRvZihzdHJ1Y3QgcGFjYV9zdHJ1Y3QsIHNhdmVkX3IxKSk7CiAJREVGSU5FKFBBQ0FUT0MsIG9mZnNldG9mKHN0cnVjdCBwYWNhX3N0cnVjdCwga2VybmVsX3RvYykpOworCURFRklORShQQUNBS0JBU0UsIG9mZnNldG9mKHN0cnVjdCBwYWNhX3N0cnVjdCwga2VybmVsYmFzZSkpOworCURFRklORShQQUNBS01TUiwgb2Zmc2V0b2Yoc3RydWN0IHBhY2Ffc3RydWN0LCBrZXJuZWxfbXNyKSk7CiAJREVGSU5FKFBBQ0FTT0ZUSVJRRU4sIG9mZnNldG9mKHN0cnVjdCBwYWNhX3N0cnVjdCwgc29mdF9lbmFibGVkKSk7CiAJREVGSU5FKFBBQ0FIQVJESVJRRU4sIG9mZnNldG9mKHN0cnVjdCBwYWNhX3N0cnVjdCwgaGFyZF9lbmFibGVkKSk7CiAJREVGSU5FKFBBQ0FTTEJDQUNIRSwgb2Zmc2V0b2Yoc3RydWN0IHBhY2Ffc3RydWN0LCBzbGJfY2FjaGUpKTsKQEAgLTM1MCwxNCArMzUyLDE1IEBACiAjZW5kaWYKIAogCURFRklORShQR0RfVEFCTEVfU0laRSwgUEdEX1RBQkxFX1NJWkUpOworCURFRklORShQVEVfU0laRSwgc2l6ZW9mKHB0ZV90KSk7CiAKICNpZmRlZiBDT05GSUdfS1ZNCiAJREVGSU5FKFRMQkVfQllURVMsIHNpemVvZihzdHJ1Y3QgdGxiZSkpOwogCiAJREVGSU5FKFZDUFVfSE9TVF9TVEFDSywgb2Zmc2V0b2Yoc3RydWN0IGt2bV92Y3B1LCBhcmNoLmhvc3Rfc3RhY2spKTsKIAlERUZJTkUoVkNQVV9IT1NUX1BJRCwgb2Zmc2V0b2Yoc3RydWN0IGt2bV92Y3B1LCBhcmNoLmhvc3RfcGlkKSk7Ci0JREVGSU5FKFZDUFVfSE9TVF9UTEIsIG9mZnNldG9mKHN0cnVjdCBrdm1fdmNwdSwgYXJjaC5ob3N0X3RsYikpOwogCURFRklORShWQ1BVX1NIQURPV19UTEIsIG9mZnNldG9mKHN0cnVjdCBrdm1fdmNwdSwgYXJjaC5zaGFkb3dfdGxiKSk7CisJREVGSU5FKFZDUFVfU0hBRE9XX01PRCwgb2Zmc2V0b2Yoc3RydWN0IGt2bV92Y3B1LCBhcmNoLnNoYWRvd190bGJfbW9kKSk7CiAJREVGSU5FKFZDUFVfR1BSUywgb2Zmc2V0b2Yoc3RydWN0IGt2bV92Y3B1LCBhcmNoLmdwcikpOwogCURFRklORShWQ1BVX0xSLCBvZmZzZXRvZihzdHJ1Y3Qga3ZtX3ZjcHUsIGFyY2gubHIpKTsKIAlERUZJTkUoVkNQVV9DUiwgb2Zmc2V0b2Yoc3RydWN0IGt2bV92Y3B1LCBhcmNoLmNyKSk7CkBAIC0zNjksNyArMzcyLDcgQEAKIAlERUZJTkUoVkNQVV9TUFJHNSwgb2Zmc2V0b2Yoc3RydWN0IGt2bV92Y3B1LCBhcmNoLnNwcmc1KSk7CiAJREVGSU5FKFZDUFVfU1BSRzYsIG9mZnNldG9mKHN0cnVjdCBrdm1fdmNwdSwgYXJjaC5zcHJnNikpOwogCURFRklORShWQ1BVX1NQUkc3LCBvZmZzZXRvZihzdHJ1Y3Qga3ZtX3ZjcHUsIGFyY2guc3ByZzcpKTsKLQlERUZJTkUoVkNQVV9QSUQsIG9mZnNldG9mKHN0cnVjdCBrdm1fdmNwdSwgYXJjaC5waWQpKTsKKwlERUZJTkUoVkNQVV9TSEFET1dfUElELCBvZmZzZXRvZihzdHJ1Y3Qga3ZtX3ZjcHUsIGFyY2guc2hhZG93X3BpZCkpOwogCiAJREVGSU5FKFZDUFVfTEFTVF9JTlNULCBvZmZzZXRvZihzdHJ1Y3Qga3ZtX3ZjcHUsIGFyY2gubGFzdF9pbnN0KSk7CiAJREVGSU5FKFZDUFVfRkFVTFRfREVBUiwgb2Zmc2V0b2Yoc3RydWN0IGt2bV92Y3B1LCBhcmNoLmZhdWx0X2RlYXIpKTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvYnRleHQuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvYnRleHQuYwppbmRleCBkOGYwMzI5Li4yNmU1ODYzIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL2J0ZXh0LmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9idGV4dC5jCkBAIC00NDIsMjggKzQ0MiwyNiBAQAogCiB2b2lkIGJ0ZXh0X2RyYXdoZXgodW5zaWduZWQgbG9uZyB2KQogewotCWNoYXIgKmhleF90YWJsZSA9ICIwMTIzNDU2Nzg5YWJjZGVmIjsKLQogCWlmICghYm9vdF90ZXh0X21hcHBlZCkKIAkJcmV0dXJuOwogI2lmZGVmIENPTkZJR19QUEM2NAotCWJ0ZXh0X2RyYXdjaGFyKGhleF90YWJsZVsodiA+PiA2MCkgJiAweDAwMDAwMDBGVUxdKTsKLQlidGV4dF9kcmF3Y2hhcihoZXhfdGFibGVbKHYgPj4gNTYpICYgMHgwMDAwMDAwRlVMXSk7Ci0JYnRleHRfZHJhd2NoYXIoaGV4X3RhYmxlWyh2ID4+IDUyKSAmIDB4MDAwMDAwMEZVTF0pOwotCWJ0ZXh0X2RyYXdjaGFyKGhleF90YWJsZVsodiA+PiA0OCkgJiAweDAwMDAwMDBGVUxdKTsKLQlidGV4dF9kcmF3Y2hhcihoZXhfdGFibGVbKHYgPj4gNDQpICYgMHgwMDAwMDAwRlVMXSk7Ci0JYnRleHRfZHJhd2NoYXIoaGV4X3RhYmxlWyh2ID4+IDQwKSAmIDB4MDAwMDAwMEZVTF0pOwotCWJ0ZXh0X2RyYXdjaGFyKGhleF90YWJsZVsodiA+PiAzNikgJiAweDAwMDAwMDBGVUxdKTsKLQlidGV4dF9kcmF3Y2hhcihoZXhfdGFibGVbKHYgPj4gMzIpICYgMHgwMDAwMDAwRlVMXSk7CisJYnRleHRfZHJhd2NoYXIoaGV4X2FzY19oaSh2ID4+IDU2KSk7CisJYnRleHRfZHJhd2NoYXIoaGV4X2FzY19sbyh2ID4+IDU2KSk7CisJYnRleHRfZHJhd2NoYXIoaGV4X2FzY19oaSh2ID4+IDQ4KSk7CisJYnRleHRfZHJhd2NoYXIoaGV4X2FzY19sbyh2ID4+IDQ4KSk7CisJYnRleHRfZHJhd2NoYXIoaGV4X2FzY19oaSh2ID4+IDQwKSk7CisJYnRleHRfZHJhd2NoYXIoaGV4X2FzY19sbyh2ID4+IDQwKSk7CisJYnRleHRfZHJhd2NoYXIoaGV4X2FzY19oaSh2ID4+IDMyKSk7CisJYnRleHRfZHJhd2NoYXIoaGV4X2FzY19sbyh2ID4+IDMyKSk7CiAjZW5kaWYKLQlidGV4dF9kcmF3Y2hhcihoZXhfdGFibGVbKHYgPj4gMjgpICYgMHgwMDAwMDAwRlVMXSk7Ci0JYnRleHRfZHJhd2NoYXIoaGV4X3RhYmxlWyh2ID4+IDI0KSAmIDB4MDAwMDAwMEZVTF0pOwotCWJ0ZXh0X2RyYXdjaGFyKGhleF90YWJsZVsodiA+PiAyMCkgJiAweDAwMDAwMDBGVUxdKTsKLQlidGV4dF9kcmF3Y2hhcihoZXhfdGFibGVbKHYgPj4gMTYpICYgMHgwMDAwMDAwRlVMXSk7Ci0JYnRleHRfZHJhd2NoYXIoaGV4X3RhYmxlWyh2ID4+IDEyKSAmIDB4MDAwMDAwMEZVTF0pOwotCWJ0ZXh0X2RyYXdjaGFyKGhleF90YWJsZVsodiA+PiAgOCkgJiAweDAwMDAwMDBGVUxdKTsKLQlidGV4dF9kcmF3Y2hhcihoZXhfdGFibGVbKHYgPj4gIDQpICYgMHgwMDAwMDAwRlVMXSk7Ci0JYnRleHRfZHJhd2NoYXIoaGV4X3RhYmxlWyh2ID4+ICAwKSAmIDB4MDAwMDAwMEZVTF0pOworCWJ0ZXh0X2RyYXdjaGFyKGhleF9hc2NfaGkodiA+PiAyNCkpOworCWJ0ZXh0X2RyYXdjaGFyKGhleF9hc2NfbG8odiA+PiAyNCkpOworCWJ0ZXh0X2RyYXdjaGFyKGhleF9hc2NfaGkodiA+PiAxNikpOworCWJ0ZXh0X2RyYXdjaGFyKGhleF9hc2NfbG8odiA+PiAxNikpOworCWJ0ZXh0X2RyYXdjaGFyKGhleF9hc2NfaGkodiA+PiA4KSk7CisJYnRleHRfZHJhd2NoYXIoaGV4X2FzY19sbyh2ID4+IDgpKTsKKwlidGV4dF9kcmF3Y2hhcihoZXhfYXNjX2hpKHYpKTsKKwlidGV4dF9kcmF3Y2hhcihoZXhfYXNjX2xvKHYpKTsKIAlidGV4dF9kcmF3Y2hhcignICcpOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL2NwdV9zZXR1cF9wcGM5NzAuUyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvY3B1X3NldHVwX3BwYzk3MC5TCmluZGV4IGJmMTE4YzMuLjI3ZjI1MDcgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvY3B1X3NldHVwX3BwYzk3MC5TCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvY3B1X3NldHVwX3BwYzk3MC5TCkBAIC0xMTAsNyArMTEwLDcgQEAKIAlpc3luYwogCiAJLyogU2F2ZSBhd2F5IGNwdSBzdGF0ZSAqLwotCUxPQURfUkVHX0lNTUVESUFURShyNSxjcHVfc3RhdGVfc3RvcmFnZSkKKwlMT0FEX1JFR19BRERSKHI1LGNwdV9zdGF0ZV9zdG9yYWdlKQogCiAJLyogU2F2ZSBISUQwLDEsNCBhbmQgNSAqLwogCW1mc3ByCXIzLFNQUk5fSElEMApAQCAtMTM0LDcgKzEzNCw3IEBACiAJcmxkaWNsLglyMCxyMCw0LDYzCiAJYmVxbHIKIAotCUxPQURfUkVHX0lNTUVESUFURShyNSxjcHVfc3RhdGVfc3RvcmFnZSkKKwlMT0FEX1JFR19BRERSKHI1LGNwdV9zdGF0ZV9zdG9yYWdlKQogCS8qIEJlZm9yZSBhY2Nlc3NpbmcgbWVtb3J5LCB3ZSBtYWtlIHN1cmUgcm1fY2kgaXMgY2xlYXIgKi8KIAlsaQlyMCwwCiAJbWZzcHIJcjMsU1BSTl9ISUQ0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL2NwdXRhYmxlLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL2NwdXRhYmxlLmMKaW5kZXggMjVjMjczYy4uZTcwZDA0OCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9jcHV0YWJsZS5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvY3B1dGFibGUuYwpAQCAtNjEwLDYgKzYxMCw3IEBACiAJCS5pY2FjaGVfYnNpemUJCT0gMzIsCiAJCS5kY2FjaGVfYnNpemUJCT0gMzIsCiAJCS5udW1fcG1jcwkJPSA0LAorCQkucG1jX3R5cGUJCT0gUFBDX1BNQ19JQk0sCiAJCS5jcHVfc2V0dXAJCT0gX19zZXR1cF9jcHVfNzUwY3gsCiAJCS5tYWNoaW5lX2NoZWNrCQk9IG1hY2hpbmVfY2hlY2tfZ2VuZXJpYywKIAkJLnBsYXRmb3JtCQk9ICJwcGM3NTAiLApAQCAtNjIzLDYgKzYyNCw3IEBACiAJCS5pY2FjaGVfYnNpemUJCT0gMzIsCiAJCS5kY2FjaGVfYnNpemUJCT0gMzIsCiAJCS5udW1fcG1jcwkJPSA0LAorCQkucG1jX3R5cGUJCT0gUFBDX1BNQ19JQk0sCiAJCS5jcHVfc2V0dXAJCT0gX19zZXR1cF9jcHVfNzUwY3gsCiAJCS5tYWNoaW5lX2NoZWNrCQk9IG1hY2hpbmVfY2hlY2tfZ2VuZXJpYywKIAkJLnBsYXRmb3JtCQk9ICJwcGM3NTAiLApAQCAtNjM2LDYgKzYzOCw3IEBACiAJCS5pY2FjaGVfYnNpemUJCT0gMzIsCiAJCS5kY2FjaGVfYnNpemUJCT0gMzIsCiAJCS5udW1fcG1jcwkJPSA0LAorCQkucG1jX3R5cGUJCT0gUFBDX1BNQ19JQk0sCiAJCS5jcHVfc2V0dXAJCT0gX19zZXR1cF9jcHVfNzUwY3gsCiAJCS5tYWNoaW5lX2NoZWNrCQk9IG1hY2hpbmVfY2hlY2tfZ2VuZXJpYywKIAkJLnBsYXRmb3JtCQk9ICJwcGM3NTAiLApAQCAtNjQ5LDYgKzY1Miw3IEBACiAJCS5pY2FjaGVfYnNpemUJCT0gMzIsCiAJCS5kY2FjaGVfYnNpemUJCT0gMzIsCiAJCS5udW1fcG1jcwkJPSA0LAorCQkucG1jX3R5cGUJCT0gUFBDX1BNQ19JQk0sCiAJCS5jcHVfc2V0dXAJCT0gX19zZXR1cF9jcHVfNzUwLAogCQkubWFjaGluZV9jaGVjawkJPSBtYWNoaW5lX2NoZWNrX2dlbmVyaWMsCiAJCS5wbGF0Zm9ybQkJPSAicHBjNzUwIiwKQEAgLTY2Miw2ICs2NjYsNyBAQAogCQkuaWNhY2hlX2JzaXplCQk9IDMyLAogCQkuZGNhY2hlX2JzaXplCQk9IDMyLAogCQkubnVtX3BtY3MJCT0gNCwKKwkJLnBtY190eXBlCQk9IFBQQ19QTUNfSUJNLAogCQkuY3B1X3NldHVwCQk9IF9fc2V0dXBfY3B1Xzc1MCwKIAkJLm1hY2hpbmVfY2hlY2sJCT0gbWFjaGluZV9jaGVja19nZW5lcmljLAogCQkucGxhdGZvcm0JCT0gInBwYzc1MCIsCkBAIC02NzUsNiArNjgwLDcgQEAKIAkJLmljYWNoZV9ic2l6ZQkJPSAzMiwKIAkJLmRjYWNoZV9ic2l6ZQkJPSAzMiwKIAkJLm51bV9wbWNzCQk9IDQsCisJCS5wbWNfdHlwZQkJPSBQUENfUE1DX0lCTSwKIAkJLmNwdV9zZXR1cAkJPSBfX3NldHVwX2NwdV83NTAsCiAJCS5tYWNoaW5lX2NoZWNrCQk9IG1hY2hpbmVfY2hlY2tfZ2VuZXJpYywKIAkJLnBsYXRmb3JtCQk9ICJwcGM3NTAiLApAQCAtNjg4LDYgKzY5NCw3IEBACiAJCS5pY2FjaGVfYnNpemUJCT0gMzIsCiAJCS5kY2FjaGVfYnNpemUJCT0gMzIsCiAJCS5udW1fcG1jcwkJPSA0LAorCQkucG1jX3R5cGUJCT0gUFBDX1BNQ19JQk0sCiAJCS5jcHVfc2V0dXAJCT0gX19zZXR1cF9jcHVfNzUwLAogCQkubWFjaGluZV9jaGVjawkJPSBtYWNoaW5lX2NoZWNrX2dlbmVyaWMsCiAJCS5wbGF0Zm9ybQkJPSAicHBjNzUwIiwKQEAgLTcwMSw2ICs3MDgsNyBAQAogCQkuaWNhY2hlX2JzaXplCQk9IDMyLAogCQkuZGNhY2hlX2JzaXplCQk9IDMyLAogCQkubnVtX3BtY3MJCT0gNCwKKwkJLnBtY190eXBlCQk9IFBQQ19QTUNfSUJNLAogCQkuY3B1X3NldHVwCQk9IF9fc2V0dXBfY3B1Xzc1MGZ4LAogCQkubWFjaGluZV9jaGVjawkJPSBtYWNoaW5lX2NoZWNrX2dlbmVyaWMsCiAJCS5wbGF0Zm9ybQkJPSAicHBjNzUwIiwKQEAgLTcxNCw2ICs3MjIsNyBAQAogCQkuaWNhY2hlX2JzaXplCQk9IDMyLAogCQkuZGNhY2hlX2JzaXplCQk9IDMyLAogCQkubnVtX3BtY3MJCT0gNCwKKwkJLnBtY190eXBlCQk9IFBQQ19QTUNfSUJNLAogCQkuY3B1X3NldHVwCQk9IF9fc2V0dXBfY3B1Xzc1MGZ4LAogCQkubWFjaGluZV9jaGVjawkJPSBtYWNoaW5lX2NoZWNrX2dlbmVyaWMsCiAJCS5wbGF0Zm9ybQkJPSAicHBjNzUwIiwKQEAgLTcyNyw2ICs3MzYsNyBAQAogCQkuaWNhY2hlX2JzaXplCQk9IDMyLAogCQkuZGNhY2hlX2JzaXplCQk9IDMyLAogCQkubnVtX3BtY3MJCT0gNCwKKwkJLnBtY190eXBlCQk9IFBQQ19QTUNfSUJNLAogCQkuY3B1X3NldHVwCQk9IF9fc2V0dXBfY3B1Xzc1MCwKIAkJLm1hY2hpbmVfY2hlY2sJCT0gbWFjaGluZV9jaGVja19nZW5lcmljLAogCQkucGxhdGZvcm0JCT0gInBwYzc1MCIsCkBAIC03NDEsNiArNzUxLDcgQEAKIAkJLmljYWNoZV9ic2l6ZQkJPSAzMiwKIAkJLmRjYWNoZV9ic2l6ZQkJPSAzMiwKIAkJLm51bV9wbWNzCQk9IDQsCisJCS5wbWNfdHlwZQkJPSBQUENfUE1DX0c0LAogCQkuY3B1X3NldHVwCQk9IF9fc2V0dXBfY3B1Xzc0MDAsCiAJCS5tYWNoaW5lX2NoZWNrCQk9IG1hY2hpbmVfY2hlY2tfZ2VuZXJpYywKIAkJLnBsYXRmb3JtCQk9ICJwcGM3NDAwIiwKQEAgLTc1NSw2ICs3NjYsNyBAQAogCQkuaWNhY2hlX2JzaXplCQk9IDMyLAogCQkuZGNhY2hlX2JzaXplCQk9IDMyLAogCQkubnVtX3BtY3MJCT0gNCwKKwkJLnBtY190eXBlCQk9IFBQQ19QTUNfRzQsCiAJCS5jcHVfc2V0dXAJCT0gX19zZXR1cF9jcHVfNzQwMCwKIAkJLm1hY2hpbmVfY2hlY2sJCT0gbWFjaGluZV9jaGVja19nZW5lcmljLAogCQkucGxhdGZvcm0JCT0gInBwYzc0MDAiLApAQCAtNzY5LDYgKzc4MSw3IEBACiAJCS5pY2FjaGVfYnNpemUJCT0gMzIsCiAJCS5kY2FjaGVfYnNpemUJCT0gMzIsCiAJCS5udW1fcG1jcwkJPSA0LAorCQkucG1jX3R5cGUJCT0gUFBDX1BNQ19HNCwKIAkJLmNwdV9zZXR1cAkJPSBfX3NldHVwX2NwdV83NDEwLAogCQkubWFjaGluZV9jaGVjawkJPSBtYWNoaW5lX2NoZWNrX2dlbmVyaWMsCiAJCS5wbGF0Zm9ybQkJPSAicHBjNzQwMCIsCkBAIC03ODMsNiArNzk2LDcgQEAKIAkJLmljYWNoZV9ic2l6ZQkJPSAzMiwKIAkJLmRjYWNoZV9ic2l6ZQkJPSAzMiwKIAkJLm51bV9wbWNzCQk9IDYsCisJCS5wbWNfdHlwZQkJPSBQUENfUE1DX0c0LAogCQkuY3B1X3NldHVwCQk9IF9fc2V0dXBfY3B1Xzc0NXgsCiAJCS5vcHJvZmlsZV9jcHVfdHlwZSAgICAgID0gInBwYy83NDUwIiwKIAkJLm9wcm9maWxlX3R5cGUJCT0gUFBDX09QUk9GSUxFX0c0LApAQCAtNzk5LDYgKzgxMyw3IEBACiAJCS5pY2FjaGVfYnNpemUJCT0gMzIsCiAJCS5kY2FjaGVfYnNpemUJCT0gMzIsCiAJCS5udW1fcG1jcwkJPSA2LAorCQkucG1jX3R5cGUJCT0gUFBDX1BNQ19HNCwKIAkJLmNwdV9zZXR1cAkJPSBfX3NldHVwX2NwdV83NDV4LAogCQkub3Byb2ZpbGVfY3B1X3R5cGUgICAgICA9ICJwcGMvNzQ1MCIsCiAJCS5vcHJvZmlsZV90eXBlCQk9IFBQQ19PUFJPRklMRV9HNCwKQEAgLTgxNSw2ICs4MzAsNyBAQAogCQkuaWNhY2hlX2JzaXplCQk9IDMyLAogCQkuZGNhY2hlX2JzaXplCQk9IDMyLAogCQkubnVtX3BtY3MJCT0gNiwKKwkJLnBtY190eXBlCQk9IFBQQ19QTUNfRzQsCiAJCS5jcHVfc2V0dXAJCT0gX19zZXR1cF9jcHVfNzQ1eCwKIAkJLm9wcm9maWxlX2NwdV90eXBlICAgICAgPSAicHBjLzc0NTAiLAogCQkub3Byb2ZpbGVfdHlwZQkJPSBQUENfT1BST0ZJTEVfRzQsCkBAIC04MzEsNiArODQ3LDcgQEAKIAkJLmljYWNoZV9ic2l6ZQkJPSAzMiwKIAkJLmRjYWNoZV9ic2l6ZQkJPSAzMiwKIAkJLm51bV9wbWNzCQk9IDYsCisJCS5wbWNfdHlwZQkJPSBQUENfUE1DX0c0LAogCQkuY3B1X3NldHVwCQk9IF9fc2V0dXBfY3B1Xzc0NXgsCiAJCS5vcHJvZmlsZV9jcHVfdHlwZSAgICAgID0gInBwYy83NDUwIiwKIAkJLm9wcm9maWxlX3R5cGUJCT0gUFBDX09QUk9GSUxFX0c0LApAQCAtODQ3LDYgKzg2NCw3IEBACiAJCS5pY2FjaGVfYnNpemUJCT0gMzIsCiAJCS5kY2FjaGVfYnNpemUJCT0gMzIsCiAJCS5udW1fcG1jcwkJPSA2LAorCQkucG1jX3R5cGUJCT0gUFBDX1BNQ19HNCwKIAkJLmNwdV9zZXR1cAkJPSBfX3NldHVwX2NwdV83NDV4LAogCQkub3Byb2ZpbGVfY3B1X3R5cGUgICAgICA9ICJwcGMvNzQ1MCIsCiAJCS5vcHJvZmlsZV90eXBlCQk9IFBQQ19PUFJPRklMRV9HNCwKQEAgLTg2Myw2ICs4ODEsNyBAQAogCQkuaWNhY2hlX2JzaXplCQk9IDMyLAogCQkuZGNhY2hlX2JzaXplCQk9IDMyLAogCQkubnVtX3BtY3MJCT0gNiwKKwkJLnBtY190eXBlCQk9IFBQQ19QTUNfRzQsCiAJCS5jcHVfc2V0dXAJCT0gX19zZXR1cF9jcHVfNzQ1eCwKIAkJLm9wcm9maWxlX2NwdV90eXBlICAgICAgPSAicHBjLzc0NTAiLAogCQkub3Byb2ZpbGVfdHlwZQkJPSBQUENfT1BST0ZJTEVfRzQsCkBAIC04NzksNiArODk4LDcgQEAKIAkJLmljYWNoZV9ic2l6ZQkJPSAzMiwKIAkJLmRjYWNoZV9ic2l6ZQkJPSAzMiwKIAkJLm51bV9wbWNzCQk9IDYsCisJCS5wbWNfdHlwZQkJPSBQUENfUE1DX0c0LAogCQkuY3B1X3NldHVwCQk9IF9fc2V0dXBfY3B1Xzc0NXgsCiAJCS5vcHJvZmlsZV9jcHVfdHlwZSAgICAgID0gInBwYy83NDUwIiwKIAkJLm9wcm9maWxlX3R5cGUJCT0gUFBDX09QUk9GSUxFX0c0LApAQCAtODk1LDYgKzkxNSw3IEBACiAJCS5pY2FjaGVfYnNpemUJCT0gMzIsCiAJCS5kY2FjaGVfYnNpemUJCT0gMzIsCiAJCS5udW1fcG1jcwkJPSA2LAorCQkucG1jX3R5cGUJCT0gUFBDX1BNQ19HNCwKIAkJLmNwdV9zZXR1cAkJPSBfX3NldHVwX2NwdV83NDV4LAogCQkub3Byb2ZpbGVfY3B1X3R5cGUgICAgICA9ICJwcGMvNzQ1MCIsCiAJCS5vcHJvZmlsZV90eXBlCQk9IFBQQ19PUFJPRklMRV9HNCwKQEAgLTkxMCw2ICs5MzEsNyBAQAogCQkuaWNhY2hlX2JzaXplCQk9IDMyLAogCQkuZGNhY2hlX2JzaXplCQk9IDMyLAogCQkubnVtX3BtY3MJCT0gNiwKKwkJLnBtY190eXBlCQk9IFBQQ19QTUNfRzQsCiAJCS5jcHVfc2V0dXAJCT0gX19zZXR1cF9jcHVfNzQ1eCwKIAkJLm9wcm9maWxlX2NwdV90eXBlICAgICAgPSAicHBjLzc0NTAiLAogCQkub3Byb2ZpbGVfdHlwZQkJPSBQUENfT1BST0ZJTEVfRzQsCkBAIC05MjYsNiArOTQ4LDcgQEAKIAkJLmljYWNoZV9ic2l6ZQkJPSAzMiwKIAkJLmRjYWNoZV9ic2l6ZQkJPSAzMiwKIAkJLm51bV9wbWNzCQk9IDYsCisJCS5wbWNfdHlwZQkJPSBQUENfUE1DX0c0LAogCQkuY3B1X3NldHVwCQk9IF9fc2V0dXBfY3B1Xzc0NXgsCiAJCS5vcHJvZmlsZV9jcHVfdHlwZSAgICAgID0gInBwYy83NDUwIiwKIAkJLm9wcm9maWxlX3R5cGUJCT0gUFBDX09QUk9GSUxFX0c0LApAQCAtOTQyLDYgKzk2NSw3IEBACiAJCS5pY2FjaGVfYnNpemUJCT0gMzIsCiAJCS5kY2FjaGVfYnNpemUJCT0gMzIsCiAJCS5udW1fcG1jcwkJPSA2LAorCQkucG1jX3R5cGUJCT0gUFBDX1BNQ19HNCwKIAkJLmNwdV9zZXR1cAkJPSBfX3NldHVwX2NwdV83NDV4LAogCQkub3Byb2ZpbGVfY3B1X3R5cGUgICAgICA9ICJwcGMvNzQ1MCIsCiAJCS5vcHJvZmlsZV90eXBlCQk9IFBQQ19PUFJPRklMRV9HNCwKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvY3Jhc2hfZHVtcC5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9jcmFzaF9kdW1wLmMKaW5kZXggYTMyM2M5Yi4uOTdlMDU2MyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9jcmFzaF9kdW1wLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9jcmFzaF9kdW1wLmMKQEAgLTI3LDYgKzI3LDkgQEAKICNkZWZpbmUgREJHKGZtdC4uLikKICNlbmRpZgogCisvKiBTdG9yZXMgdGhlIHBoeXNpY2FsIGFkZHJlc3Mgb2YgZWxmIGhlYWRlciBvZiBjcmFzaCBpbWFnZS4gKi8KK3Vuc2lnbmVkIGxvbmcgbG9uZyBlbGZjb3JlaGRyX2FkZHIgPSBFTEZDT1JFX0FERFJfTUFYOworCiB2b2lkIF9faW5pdCByZXNlcnZlX2tkdW1wX3RyYW1wb2xpbmUodm9pZCkKIHsKIAlsbWJfcmVzZXJ2ZSgwLCBLRFVNUF9SRVNFUlZFX0xJTUlUKTsKQEAgLTY2LDcgKzY5LDExIEBACiAJREJHKCIgPC0gc2V0dXBfa2R1bXBfdHJhbXBvbGluZSgpXG4iKTsKIH0KIAotI2lmZGVmIENPTkZJR19QUk9DX1ZNQ09SRQorLyoKKyAqIE5vdGU6IGVsZmNvcmVoZHJfYWRkciBpcyBub3QganVzdCBsaW1pdGVkIHRvIHZtY29yZS4gSXQgaXMgYWxzbyB1c2VkIGJ5CisgKiBpc19rZHVtcF9rZXJuZWwoKSB0byBkZXRlcm1pbmUgaWYgd2UgYXJlIGJvb3RpbmcgYWZ0ZXIgYSBwYW5pYy4gSGVuY2UKKyAqIGlmZGVmIGl0IHVuZGVyIENPTkZJR19DUkFTSF9EVU1QIGFuZCBub3QgQ09ORklHX1BST0NfVk1DT1JFLgorICovCiBzdGF0aWMgaW50IF9faW5pdCBwYXJzZV9lbGZjb3JlaGRyKGNoYXIgKnApCiB7CiAJaWYgKHApCkBAIC03NSw3ICs4Miw2IEBACiAJcmV0dXJuIDE7CiB9CiBfX3NldHVwKCJlbGZjb3JlaGRyPSIsIHBhcnNlX2VsZmNvcmVoZHIpOwotI2VuZGlmCiAKIHN0YXRpYyBpbnQgX19pbml0IHBhcnNlX3NhdmVtYXhtZW0oY2hhciAqcCkKIHsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvZG1hLWlvbW11LmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL2RtYS1pb21tdS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ5MjQ4ZjgKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL2RtYS1pb21tdS5jCkBAIC0wLDAgKzEsMTAzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2IEJlbmphbWluIEhlcnJlbnNjaG1pZHQsIElCTSBDb3Jwb3JhdGlvbgorICoKKyAqIFByb3ZpZGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbnMgb2YgdGhlIERNQSBtYXBwaW5nIGNhbGxiYWNrcyBmb3IKKyAqIGJ1c3NlcyB1c2luZyB0aGUgaW9tbXUgaW5mcmFzdHJ1Y3R1cmUKKyAqLworCisjaW5jbHVkZSA8YXNtL2lvbW11Lmg+CisKKy8qCisgKiBHZW5lcmljIGlvbW11IGltcGxlbWVudGF0aW9uCisgKi8KKworLyogQWxsb2NhdGVzIGEgY29udGlndW91cyByZWFsIGJ1ZmZlciBhbmQgY3JlYXRlcyBtYXBwaW5ncyBvdmVyIGl0LgorICogUmV0dXJucyB0aGUgdmlydHVhbCBhZGRyZXNzIG9mIHRoZSBidWZmZXIgYW5kIHNldHMgZG1hX2hhbmRsZQorICogdG8gdGhlIGRtYSBhZGRyZXNzIChtYXBwaW5nKSBvZiB0aGUgZmlyc3QgcGFnZS4KKyAqLworc3RhdGljIHZvaWQgKmRtYV9pb21tdV9hbGxvY19jb2hlcmVudChzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLAorCQkJCSAgICAgIGRtYV9hZGRyX3QgKmRtYV9oYW5kbGUsIGdmcF90IGZsYWcpCit7CisJcmV0dXJuIGlvbW11X2FsbG9jX2NvaGVyZW50KGRldiwgZGV2LT5hcmNoZGF0YS5kbWFfZGF0YSwgc2l6ZSwKKwkJCQkgICAgZG1hX2hhbmRsZSwgZGV2aWNlX3RvX21hc2soZGV2KSwgZmxhZywKKwkJCQkgICAgZGV2X3RvX25vZGUoZGV2KSk7Cit9CisKK3N0YXRpYyB2b2lkIGRtYV9pb21tdV9mcmVlX2NvaGVyZW50KHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsCisJCQkJICAgIHZvaWQgKnZhZGRyLCBkbWFfYWRkcl90IGRtYV9oYW5kbGUpCit7CisJaW9tbXVfZnJlZV9jb2hlcmVudChkZXYtPmFyY2hkYXRhLmRtYV9kYXRhLCBzaXplLCB2YWRkciwgZG1hX2hhbmRsZSk7Cit9CisKKy8qIENyZWF0ZXMgVENFcyBmb3IgYSB1c2VyIHByb3ZpZGVkIGJ1ZmZlci4gIFRoZSB1c2VyIGJ1ZmZlciBtdXN0IGJlCisgKiBjb250aWd1b3VzIHJlYWwga2VybmVsIHN0b3JhZ2UgKG5vdCB2bWFsbG9jKS4gIFRoZSBhZGRyZXNzIG9mIHRoZSBidWZmZXIKKyAqIHBhc3NlZCBoZXJlIGlzIHRoZSBrZXJuZWwgKHZpcnR1YWwpIGFkZHJlc3Mgb2YgdGhlIGJ1ZmZlci4gIFRoZSBidWZmZXIKKyAqIG5lZWQgbm90IGJlIHBhZ2UgYWxpZ25lZCwgdGhlIGRtYV9hZGRyX3QgcmV0dXJuZWQgd2lsbCBwb2ludCB0byB0aGUgc2FtZQorICogYnl0ZSB3aXRoaW4gdGhlIHBhZ2UgYXMgdmFkZHIuCisgKi8KK3N0YXRpYyBkbWFfYWRkcl90IGRtYV9pb21tdV9tYXBfc2luZ2xlKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqdmFkZHIsCisJCQkJICAgICAgIHNpemVfdCBzaXplLAorCQkJCSAgICAgICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24sCisJCQkJICAgICAgIHN0cnVjdCBkbWFfYXR0cnMgKmF0dHJzKQoreworCXJldHVybiBpb21tdV9tYXBfc2luZ2xlKGRldiwgZGV2LT5hcmNoZGF0YS5kbWFfZGF0YSwgdmFkZHIsIHNpemUsCisJCQkJZGV2aWNlX3RvX21hc2soZGV2KSwgZGlyZWN0aW9uLCBhdHRycyk7Cit9CisKKworc3RhdGljIHZvaWQgZG1hX2lvbW11X3VubWFwX3NpbmdsZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGRtYV9hZGRyX3QgZG1hX2hhbmRsZSwKKwkJCQkgICBzaXplX3Qgc2l6ZSwKKwkJCQkgICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24sCisJCQkJICAgc3RydWN0IGRtYV9hdHRycyAqYXR0cnMpCit7CisJaW9tbXVfdW5tYXBfc2luZ2xlKGRldi0+YXJjaGRhdGEuZG1hX2RhdGEsIGRtYV9oYW5kbGUsIHNpemUsIGRpcmVjdGlvbiwKKwkJCSAgIGF0dHJzKTsKK30KKworCitzdGF0aWMgaW50IGRtYV9pb21tdV9tYXBfc2coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnbGlzdCwKKwkJCSAgICBpbnQgbmVsZW1zLCBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24sCisJCQkgICAgc3RydWN0IGRtYV9hdHRycyAqYXR0cnMpCit7CisJcmV0dXJuIGlvbW11X21hcF9zZyhkZXYsIGRldi0+YXJjaGRhdGEuZG1hX2RhdGEsIHNnbGlzdCwgbmVsZW1zLAorCQkJICAgIGRldmljZV90b19tYXNrKGRldiksIGRpcmVjdGlvbiwgYXR0cnMpOworfQorCitzdGF0aWMgdm9pZCBkbWFfaW9tbXVfdW5tYXBfc2coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnbGlzdCwKKwkJaW50IG5lbGVtcywgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uLAorCQlzdHJ1Y3QgZG1hX2F0dHJzICphdHRycykKK3sKKwlpb21tdV91bm1hcF9zZyhkZXYtPmFyY2hkYXRhLmRtYV9kYXRhLCBzZ2xpc3QsIG5lbGVtcywgZGlyZWN0aW9uLAorCQkgICAgICAgYXR0cnMpOworfQorCisvKiBXZSBzdXBwb3J0IERNQSB0by9mcm9tIGFueSBtZW1vcnkgcGFnZSB2aWEgdGhlIGlvbW11ICovCitzdGF0aWMgaW50IGRtYV9pb21tdV9kbWFfc3VwcG9ydGVkKHN0cnVjdCBkZXZpY2UgKmRldiwgdTY0IG1hc2spCit7CisJc3RydWN0IGlvbW11X3RhYmxlICp0YmwgPSBkZXYtPmFyY2hkYXRhLmRtYV9kYXRhOworCisJaWYgKCF0YmwgfHwgdGJsLT5pdF9vZmZzZXQgPiBtYXNrKSB7CisJCXByaW50ayhLRVJOX0lORk8KKwkJICAgICAgICJXYXJuaW5nOiBJT01NVSBvZmZzZXQgdG9vIGJpZyBmb3IgZGV2aWNlIG1hc2tcbiIpOworCQlpZiAodGJsKQorCQkJcHJpbnRrKEtFUk5fSU5GTworCQkJICAgICAgICJtYXNrOiAweCUwOGx4LCB0YWJsZSBvZmZzZXQ6IDB4JTA4bHhcbiIsCisJCQkJbWFzaywgdGJsLT5pdF9vZmZzZXQpOworCQllbHNlCisJCQlwcmludGsoS0VSTl9JTkZPICJtYXNrOiAweCUwOGx4LCB0YWJsZSB1bmF2YWlsYWJsZVxuIiwKKwkJCQltYXNrKTsKKwkJcmV0dXJuIDA7CisJfSBlbHNlCisJCXJldHVybiAxOworfQorCitzdHJ1Y3QgZG1hX21hcHBpbmdfb3BzIGRtYV9pb21tdV9vcHMgPSB7CisJLmFsbG9jX2NvaGVyZW50CT0gZG1hX2lvbW11X2FsbG9jX2NvaGVyZW50LAorCS5mcmVlX2NvaGVyZW50CT0gZG1hX2lvbW11X2ZyZWVfY29oZXJlbnQsCisJLm1hcF9zaW5nbGUJPSBkbWFfaW9tbXVfbWFwX3NpbmdsZSwKKwkudW5tYXBfc2luZ2xlCT0gZG1hX2lvbW11X3VubWFwX3NpbmdsZSwKKwkubWFwX3NnCQk9IGRtYV9pb21tdV9tYXBfc2csCisJLnVubWFwX3NnCT0gZG1hX2lvbW11X3VubWFwX3NnLAorCS5kbWFfc3VwcG9ydGVkCT0gZG1hX2lvbW11X2RtYV9zdXBwb3J0ZWQsCit9OworRVhQT1JUX1NZTUJPTChkbWFfaW9tbXVfb3BzKTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvZG1hLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL2RtYS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE1NjJkYWYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL2RtYS5jCkBAIC0wLDAgKzEsMTMxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2IEJlbmphbWluIEhlcnJlbnNjaG1pZHQsIElCTSBDb3Jwb3JhdGlvbgorICoKKyAqIFByb3ZpZGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbnMgb2YgdGhlIERNQSBtYXBwaW5nIGNhbGxiYWNrcyBmb3IKKyAqIGRpcmVjdGx5IG1hcHBlZCBidXNzZXMuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CisjaW5jbHVkZSA8YXNtL2J1Zy5oPgorI2luY2x1ZGUgPGFzbS9hYnNfYWRkci5oPgorCisvKgorICogR2VuZXJpYyBkaXJlY3QgRE1BIGltcGxlbWVudGF0aW9uCisgKgorICogVGhpcyBpbXBsZW1lbnRhdGlvbiBzdXBwb3J0cyBhIHBlci1kZXZpY2Ugb2Zmc2V0IHRoYXQgY2FuIGJlIGFwcGxpZWQgaWYKKyAqIHRoZSBhZGRyZXNzIGF0IHdoaWNoIG1lbW9yeSBpcyB2aXNpYmxlIHRvIGRldmljZXMgaXMgbm90IDAuIFBsYXRmb3JtIGNvZGUKKyAqIGNhbiBzZXQgYXJjaGRhdGEuZG1hX2RhdGEgdG8gYW4gdW5zaWduZWQgbG9uZyBob2xkaW5nIHRoZSBvZmZzZXQuIEJ5CisgKiBkZWZhdWx0IHRoZSBvZmZzZXQgaXMgUENJX0RSQU1fT0ZGU0VULgorICovCisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGdldF9kbWFfZGlyZWN0X29mZnNldChzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJaWYgKGRldikKKwkJcmV0dXJuICh1bnNpZ25lZCBsb25nKWRldi0+YXJjaGRhdGEuZG1hX2RhdGE7CisKKwlyZXR1cm4gUENJX0RSQU1fT0ZGU0VUOworfQorCit2b2lkICpkbWFfZGlyZWN0X2FsbG9jX2NvaGVyZW50KHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsCisJCQkJZG1hX2FkZHJfdCAqZG1hX2hhbmRsZSwgZ2ZwX3QgZmxhZykKK3sKKwl2b2lkICpyZXQ7CisjaWZkZWYgQ09ORklHX05PVF9DT0hFUkVOVF9DQUNIRQorCXJldCA9IF9fZG1hX2FsbG9jX2NvaGVyZW50KHNpemUsIGRtYV9oYW5kbGUsIGZsYWcpOworCWlmIChyZXQgPT0gTlVMTCkKKwkJcmV0dXJuIE5VTEw7CisJKmRtYV9oYW5kbGUgKz0gZ2V0X2RtYV9kaXJlY3Rfb2Zmc2V0KGRldik7CisJcmV0dXJuIHJldDsKKyNlbHNlCisJc3RydWN0IHBhZ2UgKnBhZ2U7CisJaW50IG5vZGUgPSBkZXZfdG9fbm9kZShkZXYpOworCisJLyogaWdub3JlIHJlZ2lvbiBzcGVjaWZpZXJzICovCisJZmxhZyAgJj0gfihfX0dGUF9ISUdITUVNKTsKKworCXBhZ2UgPSBhbGxvY19wYWdlc19ub2RlKG5vZGUsIGZsYWcsIGdldF9vcmRlcihzaXplKSk7CisJaWYgKHBhZ2UgPT0gTlVMTCkKKwkJcmV0dXJuIE5VTEw7CisJcmV0ID0gcGFnZV9hZGRyZXNzKHBhZ2UpOworCW1lbXNldChyZXQsIDAsIHNpemUpOworCSpkbWFfaGFuZGxlID0gdmlydF90b19hYnMocmV0KSArIGdldF9kbWFfZGlyZWN0X29mZnNldChkZXYpOworCisJcmV0dXJuIHJldDsKKyNlbmRpZgorfQorCit2b2lkIGRtYV9kaXJlY3RfZnJlZV9jb2hlcmVudChzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLAorCQkJICAgICAgdm9pZCAqdmFkZHIsIGRtYV9hZGRyX3QgZG1hX2hhbmRsZSkKK3sKKyNpZmRlZiBDT05GSUdfTk9UX0NPSEVSRU5UX0NBQ0hFCisJX19kbWFfZnJlZV9jb2hlcmVudChzaXplLCB2YWRkcik7CisjZWxzZQorCWZyZWVfcGFnZXMoKHVuc2lnbmVkIGxvbmcpdmFkZHIsIGdldF9vcmRlcihzaXplKSk7CisjZW5kaWYKK30KKworc3RhdGljIGludCBkbWFfZGlyZWN0X21hcF9zZyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2dsLAorCQkJICAgICBpbnQgbmVudHMsIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbiwKKwkJCSAgICAgc3RydWN0IGRtYV9hdHRycyAqYXR0cnMpCit7CisJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZzsKKwlpbnQgaTsKKworCWZvcl9lYWNoX3NnKHNnbCwgc2csIG5lbnRzLCBpKSB7CisJCXNnLT5kbWFfYWRkcmVzcyA9IHNnX3BoeXMoc2cpICsgZ2V0X2RtYV9kaXJlY3Rfb2Zmc2V0KGRldik7CisJCXNnLT5kbWFfbGVuZ3RoID0gc2ctPmxlbmd0aDsKKwl9CisKKwlyZXR1cm4gbmVudHM7Cit9CisKK3N0YXRpYyB2b2lkIGRtYV9kaXJlY3RfdW5tYXBfc2coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLAorCQkJCWludCBuZW50cywgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uLAorCQkJCXN0cnVjdCBkbWFfYXR0cnMgKmF0dHJzKQoreworfQorCitzdGF0aWMgaW50IGRtYV9kaXJlY3RfZG1hX3N1cHBvcnRlZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHU2NCBtYXNrKQoreworI2lmZGVmIENPTkZJR19QUEM2NAorCS8qIENvdWxkIGJlIGltcHJvdmVkIHRvIGNoZWNrIGZvciBtZW1vcnkgdGhvdWdoIGl0IGJldHRlciBiZQorCSAqIGRvbmUgdmlhIHNvbWUgZ2xvYmFsIHNvIHBsYXRmb3JtcyBjYW4gc2V0IHRoZSBsaW1pdCBpbiBjYXNlCisJICogdGhleSBoYXZlIGxpbWl0ZWQgRE1BIHdpbmRvd3MKKwkgKi8KKwlyZXR1cm4gbWFzayA+PSBETUFfMzJCSVRfTUFTSzsKKyNlbHNlCisJcmV0dXJuIDE7CisjZW5kaWYKK30KKworc3RhdGljIGlubGluZSBkbWFfYWRkcl90IGRtYV9kaXJlY3RfbWFwX3BhZ2Uoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCQkgICAgIHN0cnVjdCBwYWdlICpwYWdlLAorCQkJCQkgICAgIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LAorCQkJCQkgICAgIHNpemVfdCBzaXplLAorCQkJCQkgICAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpciwKKwkJCQkJICAgICBzdHJ1Y3QgZG1hX2F0dHJzICphdHRycykKK3sKKwlCVUdfT04oZGlyID09IERNQV9OT05FKTsKKwlfX2RtYV9zeW5jX3BhZ2UocGFnZSwgb2Zmc2V0LCBzaXplLCBkaXIpOworCXJldHVybiBwYWdlX3RvX3BoeXMocGFnZSkgKyBvZmZzZXQgKyBnZXRfZG1hX2RpcmVjdF9vZmZzZXQoZGV2KTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGRtYV9kaXJlY3RfdW5tYXBfcGFnZShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJCSBkbWFfYWRkcl90IGRtYV9hZGRyZXNzLAorCQkJCQkgc2l6ZV90IHNpemUsCisJCQkJCSBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24sCisJCQkJCSBzdHJ1Y3QgZG1hX2F0dHJzICphdHRycykKK3sKK30KKworc3RydWN0IGRtYV9tYXBwaW5nX29wcyBkbWFfZGlyZWN0X29wcyA9IHsKKwkuYWxsb2NfY29oZXJlbnQJPSBkbWFfZGlyZWN0X2FsbG9jX2NvaGVyZW50LAorCS5mcmVlX2NvaGVyZW50CT0gZG1hX2RpcmVjdF9mcmVlX2NvaGVyZW50LAorCS5tYXBfc2cJCT0gZG1hX2RpcmVjdF9tYXBfc2csCisJLnVubWFwX3NnCT0gZG1hX2RpcmVjdF91bm1hcF9zZywKKwkuZG1hX3N1cHBvcnRlZAk9IGRtYV9kaXJlY3RfZG1hX3N1cHBvcnRlZCwKKwkubWFwX3BhZ2UJPSBkbWFfZGlyZWN0X21hcF9wYWdlLAorCS51bm1hcF9wYWdlCT0gZG1hX2RpcmVjdF91bm1hcF9wYWdlLAorfTsKK0VYUE9SVF9TWU1CT0woZG1hX2RpcmVjdF9vcHMpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9kbWFfNjQuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvZG1hXzY0LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFlNTcwOGUuLjAwMDAwMDAKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9kbWFfNjQuYworKysgL2Rldi9udWxsCkBAIC0xLDIwMCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA2IEJlbmphbWluIEhlcnJlbnNjaG1pZHQsIElCTSBDb3Jwb3JhdGlvbgotICoKLSAqIFByb3ZpZGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbnMgb2YgdGhlIERNQSBtYXBwaW5nIGNhbGxiYWNrcyBmb3IKLSAqIGRpcmVjdGx5IG1hcHBlZCBidXNzZXMgYW5kIGJ1c3NlcyB1c2luZyB0aGUgaW9tbXUgaW5mcmFzdHJ1Y3R1cmUKLSAqLwotCi0jaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KLSNpbmNsdWRlIDxhc20vYnVnLmg+Ci0jaW5jbHVkZSA8YXNtL2lvbW11Lmg+Ci0jaW5jbHVkZSA8YXNtL2Fic19hZGRyLmg+Ci0KLS8qCi0gKiBHZW5lcmljIGlvbW11IGltcGxlbWVudGF0aW9uCi0gKi8KLQotLyogQWxsb2NhdGVzIGEgY29udGlndW91cyByZWFsIGJ1ZmZlciBhbmQgY3JlYXRlcyBtYXBwaW5ncyBvdmVyIGl0LgotICogUmV0dXJucyB0aGUgdmlydHVhbCBhZGRyZXNzIG9mIHRoZSBidWZmZXIgYW5kIHNldHMgZG1hX2hhbmRsZQotICogdG8gdGhlIGRtYSBhZGRyZXNzIChtYXBwaW5nKSBvZiB0aGUgZmlyc3QgcGFnZS4KLSAqLwotc3RhdGljIHZvaWQgKmRtYV9pb21tdV9hbGxvY19jb2hlcmVudChzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLAotCQkJCSAgICAgIGRtYV9hZGRyX3QgKmRtYV9oYW5kbGUsIGdmcF90IGZsYWcpCi17Ci0JcmV0dXJuIGlvbW11X2FsbG9jX2NvaGVyZW50KGRldiwgZGV2LT5hcmNoZGF0YS5kbWFfZGF0YSwgc2l6ZSwKLQkJCQkgICAgZG1hX2hhbmRsZSwgZGV2aWNlX3RvX21hc2soZGV2KSwgZmxhZywKLQkJCQkgICAgZGV2LT5hcmNoZGF0YS5udW1hX25vZGUpOwotfQotCi1zdGF0aWMgdm9pZCBkbWFfaW9tbXVfZnJlZV9jb2hlcmVudChzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLAotCQkJCSAgICB2b2lkICp2YWRkciwgZG1hX2FkZHJfdCBkbWFfaGFuZGxlKQotewotCWlvbW11X2ZyZWVfY29oZXJlbnQoZGV2LT5hcmNoZGF0YS5kbWFfZGF0YSwgc2l6ZSwgdmFkZHIsIGRtYV9oYW5kbGUpOwotfQotCi0vKiBDcmVhdGVzIFRDRXMgZm9yIGEgdXNlciBwcm92aWRlZCBidWZmZXIuICBUaGUgdXNlciBidWZmZXIgbXVzdCBiZQotICogY29udGlndW91cyByZWFsIGtlcm5lbCBzdG9yYWdlIChub3Qgdm1hbGxvYykuICBUaGUgYWRkcmVzcyBvZiB0aGUgYnVmZmVyCi0gKiBwYXNzZWQgaGVyZSBpcyB0aGUga2VybmVsICh2aXJ0dWFsKSBhZGRyZXNzIG9mIHRoZSBidWZmZXIuICBUaGUgYnVmZmVyCi0gKiBuZWVkIG5vdCBiZSBwYWdlIGFsaWduZWQsIHRoZSBkbWFfYWRkcl90IHJldHVybmVkIHdpbGwgcG9pbnQgdG8gdGhlIHNhbWUKLSAqIGJ5dGUgd2l0aGluIHRoZSBwYWdlIGFzIHZhZGRyLgotICovCi1zdGF0aWMgZG1hX2FkZHJfdCBkbWFfaW9tbXVfbWFwX3NpbmdsZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKnZhZGRyLAotCQkJCSAgICAgICBzaXplX3Qgc2l6ZSwKLQkJCQkgICAgICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uLAotCQkJCSAgICAgICBzdHJ1Y3QgZG1hX2F0dHJzICphdHRycykKLXsKLQlyZXR1cm4gaW9tbXVfbWFwX3NpbmdsZShkZXYsIGRldi0+YXJjaGRhdGEuZG1hX2RhdGEsIHZhZGRyLCBzaXplLAotCQkJCWRldmljZV90b19tYXNrKGRldiksIGRpcmVjdGlvbiwgYXR0cnMpOwotfQotCi0KLXN0YXRpYyB2b2lkIGRtYV9pb21tdV91bm1hcF9zaW5nbGUoc3RydWN0IGRldmljZSAqZGV2LCBkbWFfYWRkcl90IGRtYV9oYW5kbGUsCi0JCQkJICAgc2l6ZV90IHNpemUsCi0JCQkJICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uLAotCQkJCSAgIHN0cnVjdCBkbWFfYXR0cnMgKmF0dHJzKQotewotCWlvbW11X3VubWFwX3NpbmdsZShkZXYtPmFyY2hkYXRhLmRtYV9kYXRhLCBkbWFfaGFuZGxlLCBzaXplLCBkaXJlY3Rpb24sCi0JCQkgICBhdHRycyk7Ci19Ci0KLQotc3RhdGljIGludCBkbWFfaW9tbXVfbWFwX3NnKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZ2xpc3QsCi0JCQkgICAgaW50IG5lbGVtcywgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uLAotCQkJICAgIHN0cnVjdCBkbWFfYXR0cnMgKmF0dHJzKQotewotCXJldHVybiBpb21tdV9tYXBfc2coZGV2LCBkZXYtPmFyY2hkYXRhLmRtYV9kYXRhLCBzZ2xpc3QsIG5lbGVtcywKLQkJCSAgICBkZXZpY2VfdG9fbWFzayhkZXYpLCBkaXJlY3Rpb24sIGF0dHJzKTsKLX0KLQotc3RhdGljIHZvaWQgZG1hX2lvbW11X3VubWFwX3NnKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZ2xpc3QsCi0JCWludCBuZWxlbXMsIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbiwKLQkJc3RydWN0IGRtYV9hdHRycyAqYXR0cnMpCi17Ci0JaW9tbXVfdW5tYXBfc2coZGV2LT5hcmNoZGF0YS5kbWFfZGF0YSwgc2dsaXN0LCBuZWxlbXMsIGRpcmVjdGlvbiwKLQkJICAgICAgIGF0dHJzKTsKLX0KLQotLyogV2Ugc3VwcG9ydCBETUEgdG8vZnJvbSBhbnkgbWVtb3J5IHBhZ2UgdmlhIHRoZSBpb21tdSAqLwotc3RhdGljIGludCBkbWFfaW9tbXVfZG1hX3N1cHBvcnRlZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHU2NCBtYXNrKQotewotCXN0cnVjdCBpb21tdV90YWJsZSAqdGJsID0gZGV2LT5hcmNoZGF0YS5kbWFfZGF0YTsKLQotCWlmICghdGJsIHx8IHRibC0+aXRfb2Zmc2V0ID4gbWFzaykgewotCQlwcmludGsoS0VSTl9JTkZPCi0JCSAgICAgICAiV2FybmluZzogSU9NTVUgb2Zmc2V0IHRvbyBiaWcgZm9yIGRldmljZSBtYXNrXG4iKTsKLQkJaWYgKHRibCkKLQkJCXByaW50ayhLRVJOX0lORk8KLQkJCSAgICAgICAibWFzazogMHglMDhseCwgdGFibGUgb2Zmc2V0OiAweCUwOGx4XG4iLAotCQkJCW1hc2ssIHRibC0+aXRfb2Zmc2V0KTsKLQkJZWxzZQotCQkJcHJpbnRrKEtFUk5fSU5GTyAibWFzazogMHglMDhseCwgdGFibGUgdW5hdmFpbGFibGVcbiIsCi0JCQkJbWFzayk7Ci0JCXJldHVybiAwOwotCX0gZWxzZQotCQlyZXR1cm4gMTsKLX0KLQotc3RydWN0IGRtYV9tYXBwaW5nX29wcyBkbWFfaW9tbXVfb3BzID0gewotCS5hbGxvY19jb2hlcmVudAk9IGRtYV9pb21tdV9hbGxvY19jb2hlcmVudCwKLQkuZnJlZV9jb2hlcmVudAk9IGRtYV9pb21tdV9mcmVlX2NvaGVyZW50LAotCS5tYXBfc2luZ2xlCT0gZG1hX2lvbW11X21hcF9zaW5nbGUsCi0JLnVubWFwX3NpbmdsZQk9IGRtYV9pb21tdV91bm1hcF9zaW5nbGUsCi0JLm1hcF9zZwkJPSBkbWFfaW9tbXVfbWFwX3NnLAotCS51bm1hcF9zZwk9IGRtYV9pb21tdV91bm1hcF9zZywKLQkuZG1hX3N1cHBvcnRlZAk9IGRtYV9pb21tdV9kbWFfc3VwcG9ydGVkLAotfTsKLUVYUE9SVF9TWU1CT0woZG1hX2lvbW11X29wcyk7Ci0KLS8qCi0gKiBHZW5lcmljIGRpcmVjdCBETUEgaW1wbGVtZW50YXRpb24KLSAqCi0gKiBUaGlzIGltcGxlbWVudGF0aW9uIHN1cHBvcnRzIGEgcGVyLWRldmljZSBvZmZzZXQgdGhhdCBjYW4gYmUgYXBwbGllZCBpZgotICogdGhlIGFkZHJlc3MgYXQgd2hpY2ggbWVtb3J5IGlzIHZpc2libGUgdG8gZGV2aWNlcyBpcyBub3QgMC4gUGxhdGZvcm0gY29kZQotICogY2FuIHNldCBhcmNoZGF0YS5kbWFfZGF0YSB0byBhbiB1bnNpZ25lZCBsb25nIGhvbGRpbmcgdGhlIG9mZnNldC4gQnkKLSAqIGRlZmF1bHQgdGhlIG9mZnNldCBpcyB6ZXJvLgotICovCi0KLXN0YXRpYyB1bnNpZ25lZCBsb25nIGdldF9kbWFfZGlyZWN0X29mZnNldChzdHJ1Y3QgZGV2aWNlICpkZXYpCi17Ci0JcmV0dXJuICh1bnNpZ25lZCBsb25nKWRldi0+YXJjaGRhdGEuZG1hX2RhdGE7Ci19Ci0KLXN0YXRpYyB2b2lkICpkbWFfZGlyZWN0X2FsbG9jX2NvaGVyZW50KHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsCi0JCQkJICAgICAgIGRtYV9hZGRyX3QgKmRtYV9oYW5kbGUsIGdmcF90IGZsYWcpCi17Ci0Jc3RydWN0IHBhZ2UgKnBhZ2U7Ci0Jdm9pZCAqcmV0OwotCWludCBub2RlID0gZGV2LT5hcmNoZGF0YS5udW1hX25vZGU7Ci0KLQlwYWdlID0gYWxsb2NfcGFnZXNfbm9kZShub2RlLCBmbGFnLCBnZXRfb3JkZXIoc2l6ZSkpOwotCWlmIChwYWdlID09IE5VTEwpCi0JCXJldHVybiBOVUxMOwotCXJldCA9IHBhZ2VfYWRkcmVzcyhwYWdlKTsKLQltZW1zZXQocmV0LCAwLCBzaXplKTsKLQkqZG1hX2hhbmRsZSA9IHZpcnRfdG9fYWJzKHJldCkgKyBnZXRfZG1hX2RpcmVjdF9vZmZzZXQoZGV2KTsKLQotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyB2b2lkIGRtYV9kaXJlY3RfZnJlZV9jb2hlcmVudChzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLAotCQkJCSAgICAgdm9pZCAqdmFkZHIsIGRtYV9hZGRyX3QgZG1hX2hhbmRsZSkKLXsKLQlmcmVlX3BhZ2VzKCh1bnNpZ25lZCBsb25nKXZhZGRyLCBnZXRfb3JkZXIoc2l6ZSkpOwotfQotCi1zdGF0aWMgZG1hX2FkZHJfdCBkbWFfZGlyZWN0X21hcF9zaW5nbGUoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpwdHIsCi0JCQkJCXNpemVfdCBzaXplLAotCQkJCQllbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24sCi0JCQkJCXN0cnVjdCBkbWFfYXR0cnMgKmF0dHJzKQotewotCXJldHVybiB2aXJ0X3RvX2FicyhwdHIpICsgZ2V0X2RtYV9kaXJlY3Rfb2Zmc2V0KGRldik7Ci19Ci0KLXN0YXRpYyB2b2lkIGRtYV9kaXJlY3RfdW5tYXBfc2luZ2xlKHN0cnVjdCBkZXZpY2UgKmRldiwgZG1hX2FkZHJfdCBkbWFfYWRkciwKLQkJCQkgICAgc2l6ZV90IHNpemUsCi0JCQkJICAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbiwKLQkJCQkgICAgc3RydWN0IGRtYV9hdHRycyAqYXR0cnMpCi17Ci19Ci0KLXN0YXRpYyBpbnQgZG1hX2RpcmVjdF9tYXBfc2coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnbCwKLQkJCSAgICAgaW50IG5lbnRzLCBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24sCi0JCQkgICAgIHN0cnVjdCBkbWFfYXR0cnMgKmF0dHJzKQotewotCXN0cnVjdCBzY2F0dGVybGlzdCAqc2c7Ci0JaW50IGk7Ci0KLQlmb3JfZWFjaF9zZyhzZ2wsIHNnLCBuZW50cywgaSkgewotCQlzZy0+ZG1hX2FkZHJlc3MgPSBzZ19waHlzKHNnKSArIGdldF9kbWFfZGlyZWN0X29mZnNldChkZXYpOwotCQlzZy0+ZG1hX2xlbmd0aCA9IHNnLT5sZW5ndGg7Ci0JfQotCi0JcmV0dXJuIG5lbnRzOwotfQotCi1zdGF0aWMgdm9pZCBkbWFfZGlyZWN0X3VubWFwX3NnKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywKLQkJCQlpbnQgbmVudHMsIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbiwKLQkJCQlzdHJ1Y3QgZG1hX2F0dHJzICphdHRycykKLXsKLX0KLQotc3RhdGljIGludCBkbWFfZGlyZWN0X2RtYV9zdXBwb3J0ZWQoc3RydWN0IGRldmljZSAqZGV2LCB1NjQgbWFzaykKLXsKLQkvKiBDb3VsZCBiZSBpbXByb3ZlZCB0byBjaGVjayBmb3IgbWVtb3J5IHRob3VnaCBpdCBiZXR0ZXIgYmUKLQkgKiBkb25lIHZpYSBzb21lIGdsb2JhbCBzbyBwbGF0Zm9ybXMgY2FuIHNldCB0aGUgbGltaXQgaW4gY2FzZQotCSAqIHRoZXkgaGF2ZSBsaW1pdGVkIERNQSB3aW5kb3dzCi0JICovCi0JcmV0dXJuIG1hc2sgPj0gRE1BXzMyQklUX01BU0s7Ci19Ci0KLXN0cnVjdCBkbWFfbWFwcGluZ19vcHMgZG1hX2RpcmVjdF9vcHMgPSB7Ci0JLmFsbG9jX2NvaGVyZW50CT0gZG1hX2RpcmVjdF9hbGxvY19jb2hlcmVudCwKLQkuZnJlZV9jb2hlcmVudAk9IGRtYV9kaXJlY3RfZnJlZV9jb2hlcmVudCwKLQkubWFwX3NpbmdsZQk9IGRtYV9kaXJlY3RfbWFwX3NpbmdsZSwKLQkudW5tYXBfc2luZ2xlCT0gZG1hX2RpcmVjdF91bm1hcF9zaW5nbGUsCi0JLm1hcF9zZwkJPSBkbWFfZGlyZWN0X21hcF9zZywKLQkudW5tYXBfc2cJPSBkbWFfZGlyZWN0X3VubWFwX3NnLAotCS5kbWFfc3VwcG9ydGVkCT0gZG1hX2RpcmVjdF9kbWFfc3VwcG9ydGVkLAotfTsKLUVYUE9SVF9TWU1CT0woZG1hX2RpcmVjdF9vcHMpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9lbnRyeV82NC5TIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9lbnRyeV82NC5TCmluZGV4IDJkODAyZTkuLmZkOGI0YmEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvZW50cnlfNjQuUworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL2VudHJ5XzY0LlMKQEAgLTUxMiwzMSArNTEyLDEyIEBACiAjZW5kaWYKIAogcmVzdG9yZToKLQlsZAlyNSxTT0ZURShyMSkKLSNpZmRlZiBDT05GSUdfUFBDX0lTRVJJRVMKIEJFR0lOX0ZXX0ZUUl9TRUNUSU9OCi0JY21wZGkJMCxyNSwwCi0JYmVxCTRmCi0JLyogQ2hlY2sgZm9yIHBlbmRpbmcgaW50ZXJydXB0cyAoaVNlcmllcykgKi8KLQlsZAlyMyxQQUNBTFBQQUNBUFRSKHIxMykKLQlsZAlyMyxMUFBBQ0FBTllJTlQocjMpCi0JY21wZGkJcjMsMAotCWJlcSsJNGYJCQkvKiBza2lwIGRvX0lSUSBpZiBubyBpbnRlcnJ1cHRzICovCi0KLQlsaQlyMywwCi0Jc3RiCXIzLFBBQ0FTT0ZUSVJRRU4ocjEzKQkvKiBlbnN1cmUgd2UgYXJlIHNvZnQtZGlzYWJsZWQgKi8KLSNpZmRlZiBDT05GSUdfVFJBQ0VfSVJRRkxBR1MKLQlibAkudHJhY2VfaGFyZGlycXNfb2ZmCi0JbWZtc3IJcjEwCi0jZW5kaWYKLQlvcmkJcjEwLHIxMCxNU1JfRUUKLQltdG1zcmQJcjEwCQkJLyogaGFyZC1lbmFibGUgYWdhaW4gKi8KLQlhZGRpCXIzLHIxLFNUQUNLX0ZSQU1FX09WRVJIRUFECi0JYmwJLmRvX0lSUQotCWIJLnJldF9mcm9tX2V4Y2VwdF9saXRlCQkvKiBsb29wIGJhY2sgYW5kIGhhbmRsZSBtb3JlICovCi00OgotRU5EX0ZXX0ZUUl9TRUNUSU9OX0lGU0VUKEZXX0ZFQVRVUkVfSVNFUklFUykKLSNlbmRpZgorCWxkCXI1LFNPRlRFKHIxKQorRldfRlRSX1NFQ1RJT05fRUxTRQorCWIJaXNlcmllc19jaGVja19wZW5kaW5nX2lycXMKK0FMVF9GV19GVFJfU0VDVElPTl9FTkRfSUZDTFIoRldfRkVBVFVSRV9JU0VSSUVTKQorMjoKIAlUUkFDRV9BTkRfUkVTVE9SRV9JUlEocjUpOwogCiAJLyogZXh0cmFjdCBFRSBiaXQgYW5kIHVzZSBpdCB0byByZXN0b3JlIHBhY2EtPmhhcmRfZW5hYmxlZCAqLwpAQCAtNTkyLDYgKzU3MywzMCBAQAogCXJmaWQKIAliCS4JLyogcHJldmVudCBzcGVjdWxhdGl2ZSBleGVjdXRpb24gKi8KIAoraXNlcmllc19jaGVja19wZW5kaW5nX2lycXM6CisjaWZkZWYgQ09ORklHX1BQQ19JU0VSSUVTCisJbGQJcjUsU09GVEUocjEpCisJY21wZGkJMCxyNSwwCisJYmVxCTJiCisJLyogQ2hlY2sgZm9yIHBlbmRpbmcgaW50ZXJydXB0cyAoaVNlcmllcykgKi8KKwlsZAlyMyxQQUNBTFBQQUNBUFRSKHIxMykKKwlsZAlyMyxMUFBBQ0FBTllJTlQocjMpCisJY21wZGkJcjMsMAorCWJlcSsJMmIJCQkvKiBza2lwIGRvX0lSUSBpZiBubyBpbnRlcnJ1cHRzICovCisKKwlsaQlyMywwCisJc3RiCXIzLFBBQ0FTT0ZUSVJRRU4ocjEzKQkvKiBlbnN1cmUgd2UgYXJlIHNvZnQtZGlzYWJsZWQgKi8KKyNpZmRlZiBDT05GSUdfVFJBQ0VfSVJRRkxBR1MKKwlibAkudHJhY2VfaGFyZGlycXNfb2ZmCisJbWZtc3IJcjEwCisjZW5kaWYKKwlvcmkJcjEwLHIxMCxNU1JfRUUKKwltdG1zcmQJcjEwCQkJLyogaGFyZC1lbmFibGUgYWdhaW4gKi8KKwlhZGRpCXIzLHIxLFNUQUNLX0ZSQU1FX09WRVJIRUFECisJYmwJLmRvX0lSUQorCWIJLnJldF9mcm9tX2V4Y2VwdF9saXRlCQkvKiBsb29wIGJhY2sgYW5kIGhhbmRsZSBtb3JlICovCisjZW5kaWYKKwogZG9fd29yazoKICNpZmRlZiBDT05GSUdfUFJFRU1QVAogCWFuZGkuCXIwLHIzLE1TUl9QUgkvKiBSZXR1cm5pbmcgdG8gdXNlciBtb2RlPyAqLwpAQCAtNjg1LDEwICs2OTAsNiBAQAogCXN0ZAlyNyxfREFSKHIxKQogCW1mZHNpc3IJcjgKIAlzdGQJcjgsX0RTSVNSKHIxKQotCW1mc3JyMAlyOQotCXN0ZAlyOSxfU1JSMChyMSkKLQltZnNycjEJcjEwCi0Jc3RkCXIxMCxfU1JSMShyMSkKIAogCS8qIFRlbXBvcmFyeSB3b3JrYXJvdW5kIHRvIGNsZWFyIENSIHVudGlsIFJUQVMgY2FuIGJlIG1vZGlmaWVkIHRvCiAJICogaWdub3JlIGFsbCBiaXRzLgpAQCAtNzQ5LDYgKzc1MCwxMCBAQAogCW1mc3ByCXI0LFNQUk5fU1BSRzMJICAgICAgICAvKiBHZXQgUEFDQSAqLwogCWNscmxkaQlyNCxyNCwyCQkJLyogY29udmVydCB0byByZWFsbW9kZSBhZGRyZXNzICovCiAKKwliY2wJMjAsMzEsJCs0CiswOgltZmxyCXIzCisJbGQJcjMsKDFmLTBiKShyMykJCS8qIGdldCAmLnJ0YXNfcmVzdG9yZV9yZWdzICovCisKIAltZm1zciAgIHI2CiAJbGkJcjAsTVNSX1JJCiAJYW5kYwlyNixyNixyMApAQCAtNzU2LDcgKzc2MSw2IEBACiAJbXRtc3JkICByNgogICAgICAgICAKICAgICAgICAgbGQJcjEsUEFDQVIxKHI0KSAgICAgICAgICAgLyogUmVzdG9yZSBvdXIgU1AgKi8KLQlMT0FEX1JFR19JTU1FRElBVEUocjMsLnJ0YXNfcmVzdG9yZV9yZWdzKQogICAgICAgICBsZAlyNCxQQUNBU0FWRURNU1IocjQpICAgICAvKiBSZXN0b3JlIG91ciBNU1IgKi8KIAogCW10c3ByCVNQUk5fU1JSMCxyMwpAQCAtNzY0LDYgKzc2OCw5IEBACiAJcmZpZAogCWIJLgkvKiBwcmV2ZW50IHNwZWN1bGF0aXZlIGV4ZWN1dGlvbiAqLwogCisJLmFsaWduCTMKKzE6CS5sbG9uZwkucnRhc19yZXN0b3JlX3JlZ3MKKwogX1NUQVRJQyhydGFzX3Jlc3RvcmVfcmVncykKIAkvKiByZWxvY2F0aW9uIGlzIG9uIGF0IHRoaXMgcG9pbnQgKi8KIAlSRVNUX0dQUigyLCByMSkJCQkvKiBSZXN0b3JlIHRoZSBUT0MgKi8KQEAgLTc4MywxMCArNzkwLDYgQEAKIAltdGRhcglyNwogCWxkCXI4LF9EU0lTUihyMSkKIAltdGRzaXNyCXI4Ci0JbGQJcjksX1NSUjAocjEpCi0JbXRzcnIwCXI5Ci0JbGQJcjEwLF9TUlIxKHIxKQotCW10c3JyMQlyMTAKIAogICAgICAgICBhZGRpCXIxLHIxLFJUQVNfRlJBTUVfU0laRQkvKiBVbnN0YWNrIG91ciBmcmFtZSAqLwogCWxkCXIwLDE2KHIxKQkJLyogZ2V0IHJldHVybiBhZGRyZXNzICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL2hlYWRfMzIuUyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvaGVhZF8zMi5TCmluZGV4IDhiYjY1NzUuLjBjMzI2ODIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvaGVhZF8zMi5TCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvaGVhZF8zMi5TCkBAIC0xMTAsNiArMTEwLDEyIEBACiAjaWZkZWYgQ09ORklHX1BQQ19NVUxUSVBMQVRGT1JNCiAJY21wd2kJMCxyNSwwCiAJYmVxCTFmCisKKwkvKiBmaW5kIG91dCB3aGVyZSB3ZSBhcmUgbm93ICovCisJYmNsCTIwLDMxLCQrNAorMDoJbWZscglyOAkJCS8qIHI4ID0gcnVudGltZSBhZGRyIGhlcmUgKi8KKwlhZGRpcwlyOCxyOCwoX3N0ZXh0IC0gMGIpQGhhCisJYWRkaQlyOCxyOCwoX3N0ZXh0IC0gMGIpQGwJLyogY3VycmVudCBydW50aW1lIGJhc2UgYWRkciAqLwogCWJsCXByb21faW5pdAogCXRyYXAKICNlbmRpZgpAQCAtMzY5LDEzICszNzUsMTMgQEAKIERhdGFBY2Nlc3M6CiAJRVhDRVBUSU9OX1BST0xPRwogCW1mc3ByCXIxMCxTUFJOX0RTSVNSCisJc3R3CXIxMCxfRFNJU1IocjExKQogCWFuZGlzLglyMCxyMTAsMHhhNDcwCQkvKiB3ZWlyZCBlcnJvcj8gKi8KIAlibmUJMWYJCQkvKiBpZiBub3QsIHRyeSB0byBwdXQgYSBQVEUgKi8KIAltZnNwcglyNCxTUFJOX0RBUgkJLyogaW50byB0aGUgaGFzaCB0YWJsZSAqLwogCXJsd2lubQlyMyxyMTAsMzItMTUsMjEsMjEJLyogRFNJU1JfU1RPUkUgLT4gX1BBR0VfUlcgKi8KIAlibAloYXNoX3BhZ2UKLTE6CXN0dwlyMTAsX0RTSVNSKHIxMSkKLQltcglyNSxyMTAKKzE6CWx3eglyNSxfRFNJU1IocjExKQkJLyogZ2V0IERTSVNSIHZhbHVlICovCiAJbWZzcHIJcjQsU1BSTl9EQVIKIAlFWENfWEZFUl9FRV9MSVRFKDB4MzAwLCBoYW5kbGVfcGFnZV9mYXVsdCkKIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9oZWFkXzY0LlMgYi9hcmNoL3Bvd2VycGMva2VybmVsL2hlYWRfNjQuUwppbmRleCBjYzhmYjQ3Li44NDg1NmJlIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL2hlYWRfNjQuUworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL2hlYWRfNjQuUwpAQCAtODIsNyArODIsMTEgQEAKIAkvKiBDYXRjaCBicmFuY2ggdG8gMCBpbiByZWFsIG1vZGUgKi8KIAl0cmFwCiAKLQkvKiBTZWNvbmRhcnkgcHJvY2Vzc29ycyBzcGluIG9uIHRoaXMgdmFsdWUgdW50aWwgaXQgZ29lcyB0byAxLiAqLworCS8qIFNlY29uZGFyeSBwcm9jZXNzb3JzIHNwaW4gb24gdGhpcyB2YWx1ZSB1bnRpbCBpdCBiZWNvbWVzIG5vbnplcm8uCisJICogV2hlbiBpdCBkb2VzIGl0IGNvbnRhaW5zIHRoZSByZWFsIGFkZHJlc3Mgb2YgdGhlIGRlc2NyaXB0b3IKKwkgKiBvZiB0aGUgZnVuY3Rpb24gdGhhdCB0aGUgY3B1IHNob3VsZCBqdW1wIHRvIHRvIGNvbnRpbnVlCisJICogaW5pdGlhbGl6YXRpb24uCisJICovCiAJLmdsb2JsICBfX3NlY29uZGFyeV9ob2xkX3NwaW5sb29wCiBfX3NlY29uZGFyeV9ob2xkX3NwaW5sb29wOgogCS5sbG9uZwkweDAKQEAgLTEwOSw4ICsxMTMsMTEgQEAKICAqIGJlZm9yZSB0aGUgYnVsayBvZiB0aGUga2VybmVsIGhhcyBiZWVuIHJlbG9jYXRlZC4gIFRoaXMgY29kZQogICogaXMgcmVsb2NhdGVkIHRvIHBoeXNpY2FsIGFkZHJlc3MgMHg2MCBiZWZvcmUgcHJvbV9pbml0IGlzIHJ1bi4KICAqIEFsbCBvZiBpdCBtdXN0IGZpdCBiZWxvdyB0aGUgZmlyc3QgZXhjZXB0aW9uIHZlY3RvciBhdCAweDEwMC4KKyAqIFVzZSAuZ2xvYmwgaGVyZSBub3QgX0dMT0JBTCBiZWNhdXNlIHdlIHdhbnQgX19zZWNvbmRhcnlfaG9sZAorICogdG8gYmUgdGhlIGFjdHVhbCB0ZXh0IGFkZHJlc3MsIG5vdCBhIGRlc2NyaXB0b3IuCiAgKi8KLV9HTE9CQUwoX19zZWNvbmRhcnlfaG9sZCkKKwkuZ2xvYmwJX19zZWNvbmRhcnlfaG9sZAorX19zZWNvbmRhcnlfaG9sZDoKIAltZm1zcglyMjQKIAlvcmkJcjI0LHIyNCxNU1JfUkkKIAltdG1zcmQJcjI0CQkJLyogUkkgb24gKi8KQEAgLTEyMSwxNiArMTI4LDE2IEBACiAJLyogVGVsbCB0aGUgbWFzdGVyIGNwdSB3ZSdyZSBoZXJlICovCiAJLyogUmVsb2NhdGlvbiBpcyBvZmYgJiB3ZSBhcmUgbG9jYXRlZCBhdCBhbiBhZGRyZXNzIGxlc3MgKi8KIAkvKiB0aGFuIDB4MTAwLCBzbyBvbmx5IG5lZWQgdG8gZ3JhYiBsb3cgb3JkZXIgb2Zmc2V0LiAgICAqLwotCXN0ZAlyMjQsX19zZWNvbmRhcnlfaG9sZF9hY2tub3dsZWRnZUBsKDApCisJc3RkCXIyNCxfX3NlY29uZGFyeV9ob2xkX2Fja25vd2xlZGdlLV9zdGV4dCgwKQogCXN5bmMKIAogCS8qIEFsbCBzZWNvbmRhcnkgY3B1cyB3YWl0IGhlcmUgdW50aWwgdG9sZCB0byBzdGFydC4gKi8KLTEwMDoJbGQJcjQsX19zZWNvbmRhcnlfaG9sZF9zcGlubG9vcEBsKDApCi0JY21wZGkJMCxyNCwxCi0JYm5lCTEwMGIKKzEwMDoJbGQJcjQsX19zZWNvbmRhcnlfaG9sZF9zcGlubG9vcC1fc3RleHQoMCkKKwljbXBkaQkwLHI0LDAKKwliZXEJMTAwYgogCiAjaWYgZGVmaW5lZChDT05GSUdfU01QKSB8fCBkZWZpbmVkKENPTkZJR19LRVhFQykKLQlMT0FEX1JFR19JTU1FRElBVEUocjQsIC5nZW5lcmljX3NlY29uZGFyeV9zbXBfaW5pdCkKKwlsZAlyNCwwKHI0KQkJLyogZGVyZWYgZnVuY3Rpb24gZGVzY3JpcHRvciAqLwogCW10Y3RyCXI0CiAJbXIJcjMscjI0CiAJYmN0cgpAQCAtMTQ3LDYgKzE1NCwxMCBAQAogLyoKICAqIFRoaXMgaXMgdGhlIHN0YXJ0IG9mIHRoZSBpbnRlcnJ1cHQgaGFuZGxlcnMgZm9yIHBTZXJpZXMKICAqIFRoaXMgY29kZSBydW5zIHdpdGggcmVsb2NhdGlvbiBvZmYuCisgKiBDb2RlIGZyb20gaGVyZSB0byBfX2VuZF9pbnRlcnJ1cHRzIGdldHMgY29waWVkIGRvd24gdG8gcmVhbAorICogYWRkcmVzcyAweDEwMCB3aGVuIHdlIGFyZSBydW5uaW5nIGEgcmVsb2NhdGFibGUga2VybmVsLgorICogVGhlcmVmb3JlIGFueSByZWxhdGl2ZSBicmFuY2hlcyBpbiB0aGlzIHNlY3Rpb24gbXVzdCBvbmx5CisgKiBicmFuY2ggdG8gbGFiZWxzIGluIHRoaXMgc2VjdGlvbi4KICAqLwogCS4gPSAweDEwMAogCS5nbG9ibCBfX3N0YXJ0X2ludGVycnVwdHMKQEAgLTIwMCw3ICsyMTEsMjAgQEAKIAltZnNwcglyMTAsU1BSTl9TUFJHMQogCXN0ZAlyMTAsUEFDQV9FWFNMQitFWF9SMTMocjEzKQogCW1mc3ByCXIxMixTUFJOX1NSUjEJCS8qIGFuZCBTUlIxICovCi0JYgkuc2xiX21pc3NfcmVhbG1vZGUJLyogUmVsLiBicmFuY2ggd29ya3MgaW4gcmVhbCBtb2RlICovCisjaWZuZGVmIENPTkZJR19SRUxPQ0FUQUJMRQorCWIJLnNsYl9taXNzX3JlYWxtb2RlCisjZWxzZQorCS8qCisJICogV2UgY2FuJ3QganVzdCB1c2UgYSBkaXJlY3QgYnJhbmNoIHRvIC5zbGJfbWlzc19yZWFsbW9kZQorCSAqIGJlY2F1c2UgdGhlIGRpc3RhbmNlIGZyb20gaGVyZSB0byB0aGVyZSBkZXBlbmRzIG9uIHdoZXJlCisJICogdGhlIGtlcm5lbCBlbmRzIHVwIGJlaW5nIHB1dC4KKwkgKi8KKwltZmN0cglyMTEKKwlsZAlyMTAsUEFDQUtCQVNFKHIxMykKKwlMT0FEX0hBTkRMRVIocjEwLCAuc2xiX21pc3NfcmVhbG1vZGUpCisJbXRjdHIJcjEwCisJYmN0cgorI2VuZGlmCiAKIAlTVERfRVhDRVBUSU9OX1BTRVJJRVMoMHg0MDAsIGluc3RydWN0aW9uX2FjY2VzcykKIApAQCAtMjI1LDcgKzI0OSwxNSBAQAogCW1mc3ByCXIxMCxTUFJOX1NQUkcxCiAJc3RkCXIxMCxQQUNBX0VYU0xCK0VYX1IxMyhyMTMpCiAJbWZzcHIJcjEyLFNQUk5fU1JSMQkJLyogYW5kIFNSUjEgKi8KLQliCS5zbGJfbWlzc19yZWFsbW9kZQkvKiBSZWwuIGJyYW5jaCB3b3JrcyBpbiByZWFsIG1vZGUgKi8KKyNpZm5kZWYgQ09ORklHX1JFTE9DQVRBQkxFCisJYgkuc2xiX21pc3NfcmVhbG1vZGUKKyNlbHNlCisJbWZjdHIJcjExCisJbGQJcjEwLFBBQ0FLQkFTRShyMTMpCisJTE9BRF9IQU5ETEVSKHIxMCwgLnNsYl9taXNzX3JlYWxtb2RlKQorCW10Y3RyCXIxMAorCWJjdHIKKyNlbmRpZgogCiAJTUFTS0FCTEVfRVhDRVBUSU9OX1BTRVJJRVMoMHg1MDAsIGhhcmR3YXJlX2ludGVycnVwdCkKIAlTVERfRVhDRVBUSU9OX1BTRVJJRVMoMHg2MDAsIGFsaWdubWVudCkKQEAgLTI0NCwxNCArMjc2LDEyIEBACiAJYmVxLQkxZgogRU5EX0ZUUl9TRUNUSU9OX0lGU0VUKENQVV9GVFJfUkVBTF9MRSkKIAltcglyOSxyMTMKLQltZm1zcglyMTAKIAltZnNwcglyMTMsU1BSTl9TUFJHMwogCW1mc3ByCXIxMSxTUFJOX1NSUjAKLQljbHJyZGkJcjEyLHIxMywzMgotCW9yaXMJcjEyLHIxMixzeXN0ZW1fY2FsbF9jb21tb25AaAotCW9yaQlyMTIscjEyLHN5c3RlbV9jYWxsX2NvbW1vbkBsCisJbGQJcjEyLFBBQ0FLQkFTRShyMTMpCisJbGQJcjEwLFBBQ0FLTVNSKHIxMykKKwlMT0FEX0hBTkRMRVIocjEyLCBzeXN0ZW1fY2FsbF9lbnRyeSkKIAltdHNwcglTUFJOX1NSUjAscjEyCi0Jb3JpCXIxMCxyMTAsTVNSX0lSfE1TUl9EUnxNU1JfUkkKIAltZnNwcglyMTIsU1BSTl9TUlIxCiAJbXRzcHIJU1BSTl9TUlIxLHIxMAogCXJmaWQKQEAgLTMyNSwxNiArMzU1LDMyIEBACiAJbWZzcHIJcjEyLFNQUk5fU1BSRzIKIAlFWENFUFRJT05fUFJPTE9HX1BTRVJJRVMoUEFDQV9FWFNMQiwgLmRvX3N0YWJfYm9sdGVkKQogCisjaWZkZWYgQ09ORklHX1BQQ19QU0VSSUVTCiAvKgotICogV2UgaGF2ZSBzb21lIHJvb20gaGVyZSAgd2UgdXNlIHRoYXQgdG8gcHV0Ci0gKiB0aGUgcGVyaWVzIHNsYiBtaXNzIHVzZXIgdHJhbXBvbGluZSBjb2RlIHNvIGl0J3MgcmVhc29uYWJseQotICogYXdheSBmcm9tIHNsYl9taXNzX3VzZXJfY29tbW9uIHRvIGF2b2lkIHByb2JsZW1zIHdpdGggcmZpZAotICoKKyAqIFZlY3RvcnMgZm9yIHRoZSBGV05NSSBvcHRpb24uICBTaGFyZSBjb21tb24gY29kZS4KKyAqLworCS5nbG9ibCBzeXN0ZW1fcmVzZXRfZndubWkKKyAgICAgIC5hbGlnbiA3CitzeXN0ZW1fcmVzZXRfZndubWk6CisJSE1UX01FRElVTQorCW10c3ByCVNQUk5fU1BSRzEscjEzCQkvKiBzYXZlIHIxMyAqLworCUVYQ0VQVElPTl9QUk9MT0dfUFNFUklFUyhQQUNBX0VYR0VOLCBzeXN0ZW1fcmVzZXRfY29tbW9uKQorCisJLmdsb2JsIG1hY2hpbmVfY2hlY2tfZndubWkKKyAgICAgIC5hbGlnbiA3CittYWNoaW5lX2NoZWNrX2Z3bm1pOgorCUhNVF9NRURJVU0KKwltdHNwcglTUFJOX1NQUkcxLHIxMwkJLyogc2F2ZSByMTMgKi8KKwlFWENFUFRJT05fUFJPTE9HX1BTRVJJRVMoUEFDQV9FWE1DLCBtYWNoaW5lX2NoZWNrX2NvbW1vbikKKworI2VuZGlmIC8qIENPTkZJR19QUENfUFNFUklFUyAqLworCisjaWZkZWYgX19ESVNBQkxFRF9fCisvKgogICogVGhpcyBpcyB1c2VkIGZvciB3aGVuIHRoZSBTTEIgbWlzcyBoYW5kbGVyIGhhcyB0byBnbyB2aXJ0dWFsLAogICogd2hpY2ggZG9lc24ndCBoYXBwZW4gZm9yIG5vdyBhbnltb3JlIGJ1dCB3aWxsIG9uY2Ugd2UgcmUtaW1wbGVtZW50CiAgKiBkeW5hbWljIFZTSURzIGZvciBzaGFyZWQgcGFnZSB0YWJsZXMKICAqLwotI2lmZGVmIF9fRElTQUJMRURfXwogc2xiX21pc3NfdXNlcl9wc2VyaWVzOgogCXN0ZAlyMTAsUEFDQV9FWEdFTitFWF9SMTAocjEzKQogCXN0ZAlyMTEsUEFDQV9FWEdFTitFWF9SMTEocjEzKQpAQCAtMzU3LDI1ICs0MDMsMTcgQEAKIAliCS4JCQkJLyogcHJldmVudCBzcGVjLiBleGVjdXRpb24gKi8KICNlbmRpZiAvKiBfX0RJU0FCTEVEX18gKi8KIAotI2lmZGVmIENPTkZJR19QUENfUFNFUklFUworCS5hbGlnbgk3CisJLmdsb2JsCV9fZW5kX2ludGVycnVwdHMKK19fZW5kX2ludGVycnVwdHM6CisKIC8qCi0gKiBWZWN0b3JzIGZvciB0aGUgRldOTUkgb3B0aW9uLiAgU2hhcmUgY29tbW9uIGNvZGUuCisgKiBDb2RlIGZyb20gaGVyZSBkb3duIHRvIF9fZW5kX2hhbmRsZXJzIGlzIGludm9rZWQgZnJvbSB0aGUKKyAqIGV4Y2VwdGlvbiBwcm9sb2dzIGFib3ZlLiAgQmVjYXVzZSB0aGUgcHJvbG9ncyBhc3NlbWJsZSB0aGUKKyAqIGFkZHJlc3NlcyBvZiB0aGVzZSBoYW5kbGVycyB1c2luZyB0aGUgTE9BRF9IQU5ETEVSIG1hY3JvLAorICogd2hpY2ggdXNlcyBhbiBhZGRpIGluc3RydWN0aW9uLCB0aGVzZSBoYW5kbGVycyBtdXN0IGJlIGluCisgKiB0aGUgZmlyc3QgMzJrIG9mIHRoZSBrZXJuZWwgaW1hZ2UuCiAgKi8KLQkuZ2xvYmwgc3lzdGVtX3Jlc2V0X2Z3bm1pCi0gICAgICAuYWxpZ24gNwotc3lzdGVtX3Jlc2V0X2Z3bm1pOgotCUhNVF9NRURJVU0KLQltdHNwcglTUFJOX1NQUkcxLHIxMwkJLyogc2F2ZSByMTMgKi8KLQlFWENFUFRJT05fUFJPTE9HX1BTRVJJRVNfRk9SQ0VfNjRCSVQoUEFDQV9FWEdFTiwgc3lzdGVtX3Jlc2V0X2NvbW1vbikKLQotCS5nbG9ibCBtYWNoaW5lX2NoZWNrX2Z3bm1pCi0gICAgICAuYWxpZ24gNwotbWFjaGluZV9jaGVja19md25taToKLQlITVRfTUVESVVNCi0JbXRzcHIJU1BSTl9TUFJHMSxyMTMJCS8qIHNhdmUgcjEzICovCi0JRVhDRVBUSU9OX1BST0xPR19QU0VSSUVTX0ZPUkNFXzY0QklUKFBBQ0FfRVhNQywgbWFjaGluZV9jaGVja19jb21tb24pCi0KLSNlbmRpZiAvKiBDT05GSUdfUFBDX1BTRVJJRVMgKi8KIAogLyoqKiBDb21tb24gaW50ZXJydXB0IGhhbmRsZXJzICoqKi8KIApAQCAtNDE0LDYgKzQ1MiwxMCBAQAogCVNURF9FWENFUFRJT05fQ09NTU9OKDB4MTgwMCwgY2JlX3RoZXJtYWwsIC5jYmVfdGhlcm1hbF9leGNlcHRpb24pCiAjZW5kaWYgLyogQ09ORklHX0NCRV9SQVMgKi8KIAorCS5hbGlnbgk3CitzeXN0ZW1fY2FsbF9lbnRyeToKKwliCXN5c3RlbV9jYWxsX2NvbW1vbgorCiAvKgogICogSGVyZSB3ZSBoYXZlIGRldGVjdGVkIHRoYXQgdGhlIGtlcm5lbCBzdGFjayBwb2ludGVyIGlzIGJhZC4KICAqIFI5IGNvbnRhaW5zIHRoZSBzYXZlZCBDUiwgcjEzIHBvaW50cyB0byB0aGUgcGFjYSwKQEAgLTQ1Nyw2NSArNDk5LDYgQEAKIAliCTFiCiAKIC8qCi0gKiBSZXR1cm4gZnJvbSBhbiBleGNlcHRpb24gd2l0aCBtaW5pbWFsIGNoZWNrcy4KLSAqIFRoZSBjYWxsZXIgaXMgYXNzdW1lZCB0byBoYXZlIGRvbmUgRVhDRVBUSU9OX1BST0xPR19DT01NT04uCi0gKiBJZiBpbnRlcnJ1cHRzIGhhdmUgYmVlbiBlbmFibGVkLCBvciBhbnl0aGluZyBoYXMgYmVlbgotICogZG9uZSB0aGF0IG1pZ2h0IGhhdmUgY2hhbmdlZCB0aGUgc2NoZWR1bGluZyBzdGF0dXMgb2YKLSAqIGFueSB0YXNrIG9yIHNlbnQgYW55IHRhc2sgYSBzaWduYWwsIHlvdSBzaG91bGQgdXNlCi0gKiByZXRfZnJvbV9leGNlcHQgb3IgcmV0X2Zyb21fZXhjZXB0X2xpdGUgaW5zdGVhZCBvZiB0aGlzLgotICovCi1mYXN0X2V4Y19yZXR1cm5faXJxOgkJCS8qIHJlc3RvcmVzIGlycSBzdGF0ZSB0b28gKi8KLQlsZAlyMyxTT0ZURShyMSkKLQlUUkFDRV9BTkRfUkVTVE9SRV9JUlEocjMpOwotCWxkCXIxMixfTVNSKHIxKQotCXJsZGljbAlyNCxyMTIsNDksNjMJCS8qIGdldCBNU1JfRUUgdG8gTFNCICovCi0Jc3RiCXI0LFBBQ0FIQVJESVJRRU4ocjEzKQkvKiByZXN0b3JlIHBhY2EtPmhhcmRfZW5hYmxlZCAqLwotCWIJMWYKLQotCS5nbG9ibAlmYXN0X2V4Y2VwdGlvbl9yZXR1cm4KLWZhc3RfZXhjZXB0aW9uX3JldHVybjoKLQlsZAlyMTIsX01TUihyMSkKLTE6CWxkCXIxMSxfTklQKHIxKQotCWFuZGkuCXIzLHIxMixNU1JfUkkJCS8qIGNoZWNrIGlmIFJJIGlzIHNldCAqLwotCWJlcS0JdW5yZWNvdl9mZXIKLQotI2lmZGVmIENPTkZJR19WSVJUX0NQVV9BQ0NPVU5USU5HCi0JYW5kaS4JcjMscjEyLE1TUl9QUgotCWJlcQkyZgotCUFDQ09VTlRfQ1BVX1VTRVJfRVhJVChyMywgcjQpCi0yOgotI2VuZGlmCi0KLQlsZAlyMyxfQ0NSKHIxKQotCWxkCXI0LF9MSU5LKHIxKQotCWxkCXI1LF9DVFIocjEpCi0JbGQJcjYsX1hFUihyMSkKLQltdGNyCXIzCi0JbXRscglyNAotCW10Y3RyCXI1Ci0JbXR4ZXIJcjYKLQlSRVNUX0dQUigwLCByMSkKLQlSRVNUXzhHUFJTKDIsIHIxKQotCi0JbWZtc3IJcjEwCi0JcmxkaWNsCXIxMCxyMTAsNDgsMQkJLyogY2xlYXIgRUUgKi8KLQlybGRpY3IJcjEwLHIxMCwxNiw2MQkJLyogY2xlYXIgUkkgKExFIGlzIDAgYWxyZWFkeSkgKi8KLQltdG1zcmQJcjEwLDEKLQotCW10c3ByCVNQUk5fU1JSMSxyMTIKLQltdHNwcglTUFJOX1NSUjAscjExCi0JUkVTVF80R1BSUygxMCwgcjEpCi0JbGQJcjEsR1BSMShyMSkKLQlyZmlkCi0JYgkuCS8qIHByZXZlbnQgc3BlY3VsYXRpdmUgZXhlY3V0aW9uICovCi0KLXVucmVjb3ZfZmVyOgotCWJsCS5zYXZlX252Z3BycwotMToJYWRkaQlyMyxyMSxTVEFDS19GUkFNRV9PVkVSSEVBRAotCWJsCS51bnJlY292ZXJhYmxlX2V4Y2VwdGlvbgotCWIJMWIKLQotLyoKICAqIEhlcmUgcjEzIHBvaW50cyB0byB0aGUgcGFjYSwgcjkgY29udGFpbnMgdGhlIHNhdmVkIENSLAogICogU1JSMCBhbmQgU1JSMSBhcmUgc2F2ZWQgaW4gcjExIGFuZCByMTIsCiAgKiByOSAtIHIxMyBhcmUgc2F2ZWQgaW4gcGFjYS0+ZXhnZW4uCkBAIC02MTYsNiArNTk5LDkgQEAKICAqLwogX0dMT0JBTChzbGJfbWlzc19yZWFsbW9kZSkKIAltZmxyCXIxMAorI2lmZGVmIENPTkZJR19SRUxPQ0FUQUJMRQorCW10Y3RyCXIxMQorI2VuZGlmCiAKIAlzdHcJcjksUEFDQV9FWFNMQitFWF9DQ1IocjEzKQkvKiBzYXZlIENSIGluIGV4Yy4gZnJhbWUgKi8KIAlzdGQJcjEwLFBBQ0FfRVhTTEIrRVhfTFIocjEzKQkvKiBzYXZlIExSICovCkBAIC02NjYsMTEgKzY1MiwxMCBAQAogRU5EX0ZXX0ZUUl9TRUNUSU9OX0lGU0VUKEZXX0ZFQVRVUkVfSVNFUklFUykKICNlbmRpZiAvKiBDT05GSUdfUFBDX0lTRVJJRVMgKi8KIAltZnNwcglyMTEsU1BSTl9TUlIwCi0JY2xycmRpCXIxMCxyMTMsMzIKKwlsZAlyMTAsUEFDQUtCQVNFKHIxMykKIAlMT0FEX0hBTkRMRVIocjEwLHVucmVjb3Zfc2xiKQogCW10c3ByCVNQUk5fU1JSMCxyMTAKLQltZm1zcglyMTAKLQlvcmkJcjEwLHIxMCxNU1JfSVJ8TVNSX0RSfE1TUl9SSQorCWxkCXIxMCxQQUNBS01TUihyMTMpCiAJbXRzcHIJU1BSTl9TUlIxLHIxMAogCXJmaWQKIAliCS4KQEAgLTc2Niw2ICs3NTEsODUgQEAKIAlibAkuYWx0aXZlY191bmF2YWlsYWJsZV9leGNlcHRpb24KIAliCS5yZXRfZnJvbV9leGNlcHQKIAorCS5hbGlnbgk3CisJLmdsb2JsIHZzeF91bmF2YWlsYWJsZV9jb21tb24KK3ZzeF91bmF2YWlsYWJsZV9jb21tb246CisJRVhDRVBUSU9OX1BST0xPR19DT01NT04oMHhmNDAsIFBBQ0FfRVhHRU4pCisjaWZkZWYgQ09ORklHX1ZTWAorQkVHSU5fRlRSX1NFQ1RJT04KKwlibmUJLmxvYWRfdXBfdnN4CisxOgorRU5EX0ZUUl9TRUNUSU9OX0lGU0VUKENQVV9GVFJfVlNYKQorI2VuZGlmCisJYmwJLnNhdmVfbnZncHJzCisJYWRkaQlyMyxyMSxTVEFDS19GUkFNRV9PVkVSSEVBRAorCUVOQUJMRV9JTlRTCisJYmwJLnZzeF91bmF2YWlsYWJsZV9leGNlcHRpb24KKwliCS5yZXRfZnJvbV9leGNlcHQKKworCS5hbGlnbgk3CisJLmdsb2JsCV9fZW5kX2hhbmRsZXJzCitfX2VuZF9oYW5kbGVyczoKKworLyoKKyAqIFJldHVybiBmcm9tIGFuIGV4Y2VwdGlvbiB3aXRoIG1pbmltYWwgY2hlY2tzLgorICogVGhlIGNhbGxlciBpcyBhc3N1bWVkIHRvIGhhdmUgZG9uZSBFWENFUFRJT05fUFJPTE9HX0NPTU1PTi4KKyAqIElmIGludGVycnVwdHMgaGF2ZSBiZWVuIGVuYWJsZWQsIG9yIGFueXRoaW5nIGhhcyBiZWVuCisgKiBkb25lIHRoYXQgbWlnaHQgaGF2ZSBjaGFuZ2VkIHRoZSBzY2hlZHVsaW5nIHN0YXR1cyBvZgorICogYW55IHRhc2sgb3Igc2VudCBhbnkgdGFzayBhIHNpZ25hbCwgeW91IHNob3VsZCB1c2UKKyAqIHJldF9mcm9tX2V4Y2VwdCBvciByZXRfZnJvbV9leGNlcHRfbGl0ZSBpbnN0ZWFkIG9mIHRoaXMuCisgKi8KK2Zhc3RfZXhjX3JldHVybl9pcnE6CQkJLyogcmVzdG9yZXMgaXJxIHN0YXRlIHRvbyAqLworCWxkCXIzLFNPRlRFKHIxKQorCVRSQUNFX0FORF9SRVNUT1JFX0lSUShyMyk7CisJbGQJcjEyLF9NU1IocjEpCisJcmxkaWNsCXI0LHIxMiw0OSw2MwkJLyogZ2V0IE1TUl9FRSB0byBMU0IgKi8KKwlzdGIJcjQsUEFDQUhBUkRJUlFFTihyMTMpCS8qIHJlc3RvcmUgcGFjYS0+aGFyZF9lbmFibGVkICovCisJYgkxZgorCisJLmdsb2JsCWZhc3RfZXhjZXB0aW9uX3JldHVybgorZmFzdF9leGNlcHRpb25fcmV0dXJuOgorCWxkCXIxMixfTVNSKHIxKQorMToJbGQJcjExLF9OSVAocjEpCisJYW5kaS4JcjMscjEyLE1TUl9SSQkJLyogY2hlY2sgaWYgUkkgaXMgc2V0ICovCisJYmVxLQl1bnJlY292X2ZlcgorCisjaWZkZWYgQ09ORklHX1ZJUlRfQ1BVX0FDQ09VTlRJTkcKKwlhbmRpLglyMyxyMTIsTVNSX1BSCisJYmVxCTJmCisJQUNDT1VOVF9DUFVfVVNFUl9FWElUKHIzLCByNCkKKzI6CisjZW5kaWYKKworCWxkCXIzLF9DQ1IocjEpCisJbGQJcjQsX0xJTksocjEpCisJbGQJcjUsX0NUUihyMSkKKwlsZAlyNixfWEVSKHIxKQorCW10Y3IJcjMKKwltdGxyCXI0CisJbXRjdHIJcjUKKwltdHhlcglyNgorCVJFU1RfR1BSKDAsIHIxKQorCVJFU1RfOEdQUlMoMiwgcjEpCisKKwltZm1zcglyMTAKKwlybGRpY2wJcjEwLHIxMCw0OCwxCQkvKiBjbGVhciBFRSAqLworCXJsZGljcglyMTAscjEwLDE2LDYxCQkvKiBjbGVhciBSSSAoTEUgaXMgMCBhbHJlYWR5KSAqLworCW10bXNyZAlyMTAsMQorCisJbXRzcHIJU1BSTl9TUlIxLHIxMgorCW10c3ByCVNQUk5fU1JSMCxyMTEKKwlSRVNUXzRHUFJTKDEwLCByMSkKKwlsZAlyMSxHUFIxKHIxKQorCXJmaWQKKwliCS4JLyogcHJldmVudCBzcGVjdWxhdGl2ZSBleGVjdXRpb24gKi8KKwordW5yZWNvdl9mZXI6CisJYmwJLnNhdmVfbnZncHJzCisxOglhZGRpCXIzLHIxLFNUQUNLX0ZSQU1FX09WRVJIRUFECisJYmwJLnVucmVjb3ZlcmFibGVfZXhjZXB0aW9uCisJYgkxYgorCiAjaWZkZWYgQ09ORklHX0FMVElWRUMKIC8qCiAgKiBsb2FkX3VwX2FsdGl2ZWModW51c2VkLCB1bnVzZWQsIHRzaykKQEAgLTg0MCwyMiArOTA0LDYgQEAKIAlibHIKICNlbmRpZiAvKiBDT05GSUdfQUxUSVZFQyAqLwogCi0JLmFsaWduCTcKLQkuZ2xvYmwgdnN4X3VuYXZhaWxhYmxlX2NvbW1vbgotdnN4X3VuYXZhaWxhYmxlX2NvbW1vbjoKLQlFWENFUFRJT05fUFJPTE9HX0NPTU1PTigweGY0MCwgUEFDQV9FWEdFTikKLSNpZmRlZiBDT05GSUdfVlNYCi1CRUdJTl9GVFJfU0VDVElPTgotCWJuZQkubG9hZF91cF92c3gKLTE6Ci1FTkRfRlRSX1NFQ1RJT05fSUZTRVQoQ1BVX0ZUUl9WU1gpCi0jZW5kaWYKLQlibAkuc2F2ZV9udmdwcnMKLQlhZGRpCXIzLHIxLFNUQUNLX0ZSQU1FX09WRVJIRUFECi0JRU5BQkxFX0lOVFMKLQlibAkudnN4X3VuYXZhaWxhYmxlX2V4Y2VwdGlvbgotCWIJLnJldF9mcm9tX2V4Y2VwdAotCiAjaWZkZWYgQ09ORklHX1ZTWAogLyoKICAqIGxvYWRfdXBfdnN4KHVudXNlZCwgdW51c2VkLCB0c2spCkBAIC0xMTc1LDExICsxMjIzLDE0IEBACiAJLyogdHVybiBvbiA2NC1iaXQgbW9kZSAqLwogCWJsCS5lbmFibGVfNjRiX21vZGUKIAorCS8qIGdldCB0aGUgVE9DIHBvaW50ZXIgKHJlYWwgYWRkcmVzcykgKi8KKwlibAkucmVsYXRpdmVfdG9jCisKIAkvKiBTZXQgdXAgYSBwYWNhIHZhbHVlIGZvciB0aGlzIHByb2Nlc3Nvci4gU2luY2Ugd2UgaGF2ZSB0aGUKIAkgKiBwaHlzaWNhbCBjcHUgaWQgaW4gcjI0LCB3ZSBuZWVkIHRvIHNlYXJjaCB0aGUgcGFjYXMgdG8gZmluZAogCSAqIHdoaWNoIGxvZ2ljYWwgaWQgbWFwcyB0byBvdXIgcGh5c2ljYWwgb25lLgogCSAqLwotCUxPQURfUkVHX0lNTUVESUFURShyMTMsIHBhY2EpCS8qIEdldCBiYXNlIHZhZGRyIG9mIHBhY2EgYXJyYXkJICovCisJTE9BRF9SRUdfQUREUihyMTMsIHBhY2EpCS8qIEdldCBiYXNlIHZhZGRyIG9mIHBhY2EgYXJyYXkJICovCiAJbGkJcjUsMAkJCS8qIGxvZ2ljYWwgY3B1IGlkICAgICAgICAgICAgICAgICovCiAxOglsaHoJcjYsUEFDQUhXQ1BVSUQocjEzKQkvKiBMb2FkIEhXIHByb2NpZCBmcm9tIHBhY2EgICAgICAqLwogCWNtcHcJcjYscjI0CQkJLyogQ29tcGFyZSB0byBvdXIgaWQgICAgICAgICAgICAgKi8KQEAgLTEyMDgsNyArMTI1OSw3IEBACiAJc3luYwkJCQkvKiBvcmRlciBwYWNhLnJ1biBhbmQgY3VyX2NwdV9zcGVjICovCiAKIAkvKiBTZWUgaWYgd2UgbmVlZCB0byBjYWxsIGEgY3B1IHN0YXRlIHJlc3RvcmUgaGFuZGxlciAqLwotCUxPQURfUkVHX0lNTUVESUFURShyMjMsIGN1cl9jcHVfc3BlYykKKwlMT0FEX1JFR19BRERSKHIyMywgY3VyX2NwdV9zcGVjKQogCWxkCXIyMywwKHIyMykKIAlsZAlyMjMsQ1BVX1NQRUNfUkVTVE9SRShyMjMpCiAJY21wZGkJMCxyMjMsMApAQCAtMTIyNCwxMCArMTI3NSwxNSBAQAogCWIJX19zZWNvbmRhcnlfc3RhcnQKICNlbmRpZgogCisvKgorICogVHVybiB0aGUgTU1VIG9mZi4KKyAqIEFzc3VtZXMgd2UncmUgbWFwcGVkIEVBID09IFJBIGlmIHRoZSBNTVUgaXMgb24uCisgKi8KIF9TVEFUSUMoX19tbXVfb2ZmKQogCW1mbXNyCXIzCiAJYW5kaS4JcjAscjMsTVNSX0lSfE1TUl9EUgogCWJlcWxyCisJbWZscglyNAogCWFuZGMJcjMscjMscjAKIAltdHNwcglTUFJOX1NSUjAscjQKIAltdHNwcglTUFJOX1NSUjEscjMKQEAgLTEyNDgsNiArMTMwNCwxOCBAQAogICoKICAqLwogX0dMT0JBTChfX3N0YXJ0X2luaXRpYWxpemF0aW9uX211bHRpcGxhdGZvcm0pCisJLyogTWFrZSBzdXJlIHdlIGFyZSBydW5uaW5nIGluIDY0IGJpdHMgbW9kZSAqLworCWJsCS5lbmFibGVfNjRiX21vZGUKKworCS8qIEdldCBUT0MgcG9pbnRlciAoY3VycmVudCBydW50aW1lIGFkZHJlc3MpICovCisJYmwJLnJlbGF0aXZlX3RvYworCisJLyogZmluZCBvdXQgd2hlcmUgd2UgYXJlIG5vdyAqLworCWJjbAkyMCwzMSwkKzQKKzA6CW1mbHIJcjI2CQkJLyogcjI2ID0gcnVudGltZSBhZGRyIGhlcmUgKi8KKwlhZGRpcwlyMjYscjI2LChfc3RleHQgLSAwYilAaGEKKwlhZGRpCXIyNixyMjYsKF9zdGV4dCAtIDBiKUBsCS8qIGN1cnJlbnQgcnVudGltZSBiYXNlIGFkZHIgKi8KKwogCS8qCiAJICogQXJlIHdlIGJvb3RlZCBmcm9tIGEgUFJPTSBPZi10eXBlIGNsaWVudC1pbnRlcmZhY2UgPwogCSAqLwpAQCAtMTI1OSw5ICsxMzI3LDYgQEAKIAltcglyMzEscjMKIAltcglyMzAscjQKIAotCS8qIE1ha2Ugc3VyZSB3ZSBhcmUgcnVubmluZyBpbiA2NCBiaXRzIG1vZGUgKi8KLQlibAkuZW5hYmxlXzY0Yl9tb2RlCi0KIAkvKiBTZXR1cCBzb21lIGNyaXRpY2FsIDk3MCBTUFJzIGJlZm9yZSBzd2l0Y2hpbmcgTU1VIG9mZiAqLwogCW1mc3ByCXIwLFNQUk5fUFZSCiAJc3J3aQlyMCxyMCwxNgpAQCAtMTI3Niw5ICsxMzQxLDcgQEAKIDE6CWJsCS5fX2NwdV9wcmVpbml0X3BwYzk3MAogMjoKIAotCS8qIFN3aXRjaCBvZmYgTU1VIGlmIG5vdCBhbHJlYWR5ICovCi0JTE9BRF9SRUdfSU1NRURJQVRFKHI0LCAuX19hZnRlcl9wcm9tX3N0YXJ0IC0gS0VSTkVMQkFTRSkKLQlhZGQJcjQscjQscjMwCisJLyogU3dpdGNoIG9mZiBNTVUgaWYgbm90IGFscmVhZHkgb2ZmICovCiAJYmwJLl9fbW11X29mZgogCWIJLl9fYWZ0ZXJfcHJvbV9zdGFydAogCkBAIC0xMjkzLDIyICsxMzU2LDE1IEBACiAJLyoKIAkgKiBBbGlnbiB0aGUgc3RhY2sgdG8gMTYtYnl0ZSBib3VuZGFyeQogCSAqIERlcGVuZGluZyBvbiB0aGUgc2l6ZSBhbmQgbGF5b3V0IG9mIHRoZSBFTEYgc2VjdGlvbnMgaW4gdGhlIGluaXRpYWwKLQkgKiBib290IGJpbmFyeSwgdGhlIHN0YWNrIHBvaW50ZXIgd2lsbCBiZSB1bmFsaWduZXQgb24gUG93ZXJNYWMKKwkgKiBib290IGJpbmFyeSwgdGhlIHN0YWNrIHBvaW50ZXIgbWF5IGJlIHVuYWxpZ25lZCBvbiBQb3dlck1hYwogCSAqLwogCXJsZGljcglyMSxyMSwwLDU5CiAKLQkvKiBNYWtlIHN1cmUgd2UgYXJlIHJ1bm5pbmcgaW4gNjQgYml0cyBtb2RlICovCi0JYmwJLmVuYWJsZV82NGJfbW9kZQotCi0JLyogcHV0IGEgcmVsb2NhdGlvbiBvZmZzZXQgaW50byByMyAqLwotCWJsCS5yZWxvY19vZmZzZXQKLQotCUxPQURfUkVHX0lNTUVESUFURShyMixfX3RvY19zdGFydCkKLQlhZGRpCXIyLHIyLDB4NDAwMAotCWFkZGkJcjIscjIsMHg0MDAwCi0KLQkvKiBSZWxvY2F0ZSB0aGUgVE9DIGZyb20gYSB2aXJ0IGFkZHIgdG8gYSByZWFsIGFkZHIgKi8KLQlhZGQJcjIscjIscjMKKyNpZmRlZiBDT05GSUdfUkVMT0NBVEFCTEUKKwkvKiBSZWxvY2F0ZSBjb2RlIGZvciB3aGVyZSB3ZSBhcmUgbm93ICovCisJbXIJcjMscjI2CisJYmwJLnJlbG9jYXRlCisjZW5kaWYKIAogCS8qIFJlc3RvcmUgcGFyYW1ldGVycyAqLwogCW1yCXIzLHIzMQpAQCAtMTMxOCw2MCArMTM3NCw1MSBAQAogCW1yCXI3LHIyNwogCiAJLyogRG8gYWxsIG9mIHRoZSBpbnRlcmFjdGlvbiB3aXRoIE9GIGNsaWVudCBpbnRlcmZhY2UgKi8KKwltcglyOCxyMjYKIAlibAkucHJvbV9pbml0CiAJLyogV2UgbmV2ZXIgcmV0dXJuICovCiAJdHJhcAogCiBfU1RBVElDKF9fYWZ0ZXJfcHJvbV9zdGFydCkKKyNpZmRlZiBDT05GSUdfUkVMT0NBVEFCTEUKKwkvKiBwcm9jZXNzIHJlbG9jYXRpb25zIGZvciB0aGUgZmluYWwgYWRkcmVzcyBvZiB0aGUga2VybmVsICovCisJbGlzCXIyNSxQQUdFX09GRlNFVEBoaWdoZXN0CS8qIGNvbXB1dGUgdmlydHVhbCBiYXNlIG9mIGtlcm5lbCAqLworCXNsZGkJcjI1LHIyNSwzMgorCW1yCXIzLHIyNQorCWJsCS5yZWxvY2F0ZQorI2VuZGlmCiAKIC8qCi0gKiBXZSBuZWVkIHRvIHJ1biB3aXRoIF9fc3RhcnQgYXQgcGh5c2ljYWwgYWRkcmVzcyBQSFlTSUNBTF9TVEFSVC4KKyAqIFdlIG5lZWQgdG8gcnVuIHdpdGggX3N0ZXh0IGF0IHBoeXNpY2FsIGFkZHJlc3MgUEhZU0lDQUxfU1RBUlQuCiAgKiBUaGlzIHdpbGwgbGVhdmUgc29tZSBjb2RlIGluIHRoZSBmaXJzdCAyNTZCIG9mCiAgKiByZWFsIG1lbW9yeSwgd2hpY2ggYXJlIHJlc2VydmVkIGZvciBzb2Z0d2FyZSB1c2UuCi0gKiBUaGUgcmVtYWluZGVyIG9mIHRoZSBmaXJzdCBwYWdlIGlzIGxvYWRlZCB3aXRoIHRoZSBmaXhlZAotICogaW50ZXJydXB0IHZlY3RvcnMuICBUaGUgbmV4dCB0d28gcGFnZXMgYXJlIGZpbGxlZCB3aXRoCi0gKiB1bmtub3duIGV4Y2VwdGlvbiBwbGFjZWhvbGRlcnMuCiAgKgogICogTm90ZTogVGhpcyBwcm9jZXNzIG92ZXJ3cml0ZXMgdGhlIE9GIGV4Y2VwdGlvbiB2ZWN0b3JzLgotICoJcjI2ID09IHJlbG9jYXRpb24gb2Zmc2V0Ci0gKglyMjcgPT0gS0VSTkVMQkFTRQogICovCi0JYmwJLnJlbG9jX29mZnNldAotCW1yCXIyNixyMwotCUxPQURfUkVHX0lNTUVESUFURShyMjcsIEtFUk5FTEJBU0UpCi0KLQlMT0FEX1JFR19JTU1FRElBVEUocjMsIFBIWVNJQ0FMX1NUQVJUKQkvKiB0YXJnZXQgYWRkciAqLwotCi0JLy8gWFhYIEZJWE1FOiBVc2UgcGh5cyByZXR1cm5lZCBieSBPRiAocjMwKQotCWFkZAlyNCxyMjcscjI2IAkJLyogc291cmNlIGFkZHIJCQkgKi8KLQkJCQkJLyogY3VycmVudCBhZGRyZXNzIG9mIF9zdGFydAkgKi8KLQkJCQkJLyogICBpLmUuIHdoZXJlIHdlIGFyZSBydW5uaW5nCSAqLwotCQkJCQkvKgl0aGUgc291cmNlIGFkZHIJCSAqLwotCi0JY21wZGkJcjQsMAkJCS8qIEluIHNvbWUgY2FzZXMgdGhlIGxvYWRlciBtYXkgICovCi0JYm5lCTFmCi0JYgkuc3RhcnRfaGVyZV9tdWx0aXBsYXRmb3JtIC8qIGhhdmUgYWxyZWFkeSBwdXQgdXMgYXQgemVybyAqLwotCQkJCQkvKiBzbyB3ZSBjYW4gc2tpcCB0aGUgY29weS4gICAgICAqLwotMToJTE9BRF9SRUdfSU1NRURJQVRFKHI1LGNvcHlfdG9faGVyZSkgLyogIyBieXRlcyBvZiBtZW1vcnkgdG8gY29weSAqLwotCXN1YglyNSxyNSxyMjcKLQorCWxpCXIzLDAJCQkvKiB0YXJnZXQgYWRkciAqLworCW1yLglyNCxyMjYJCQkvKiBJbiBzb21lIGNhc2VzIHRoZSBsb2FkZXIgbWF5ICAqLworCWJlcQk5ZgkJCS8qIGhhdmUgYWxyZWFkeSBwdXQgdXMgYXQgemVybyAqLworCWxpcwlyNSwoY29weV90b19oZXJlIC0gX3N0ZXh0KUBoYQorCWFkZGkJcjUscjUsKGNvcHlfdG9faGVyZSAtIF9zdGV4dClAbCAvKiAjIGJ5dGVzIG9mIG1lbW9yeSB0byBjb3B5ICovCiAJbGkJcjYsMHgxMDAJCS8qIFN0YXJ0IG9mZnNldCwgdGhlIGZpcnN0IDB4MTAwICovCiAJCQkJCS8qIGJ5dGVzIHdlcmUgY29waWVkIGVhcmxpZXIuCSAqLwogCiAJYmwJLmNvcHlfYW5kX2ZsdXNoCQkvKiBjb3B5IHRoZSBmaXJzdCBuIGJ5dGVzCSAqLwogCQkJCQkvKiB0aGlzIGluY2x1ZGVzIHRoZSBjb2RlIGJlaW5nCSAqLwogCQkJCQkvKiBleGVjdXRlZCBoZXJlLgkJICovCi0KLQlMT0FEX1JFR19JTU1FRElBVEUocjAsIDRmKQkvKiBKdW1wIHRvIHRoZSBjb3B5IG9mIHRoaXMgY29kZSAqLwotCW10Y3RyCXIwCQkJLyogdGhhdCB3ZSBqdXN0IG1hZGUvcmVsb2NhdGVkCSAqLworCWFkZGlzCXI4LHIzLCg0ZiAtIF9zdGV4dClAaGEJLyogSnVtcCB0byB0aGUgY29weSBvZiB0aGlzIGNvZGUgKi8KKwlhZGRpCXI4LHI4LCg0ZiAtIF9zdGV4dClAbAkvKiB0aGF0IHdlIGp1c3QgbWFkZSAqLworCW10Y3RyCXI4CiAJYmN0cgogCi00OglMT0FEX1JFR19JTU1FRElBVEUocjUsa2xpbWl0KQotCWFkZAlyNSxyNSxyMjYKLQlsZAlyNSwwKHI1KQkJLyogZ2V0IHRoZSB2YWx1ZSBvZiBrbGltaXQgKi8KLQlzdWIJcjUscjUscjI3Cis0OgkvKiBOb3cgY29weSB0aGUgcmVzdCBvZiB0aGUga2VybmVsIHVwIHRvIF9lbmQgKi8KKwlhZGRpcwlyNSxyMjYsKHBfZW5kIC0gX3N0ZXh0KUBoYQorCWxkCXI1LChwX2VuZCAtIF9zdGV4dClAbChyNSkJLyogZ2V0IF9lbmQgKi8KIAlibAkuY29weV9hbmRfZmx1c2gJCS8qIGNvcHkgdGhlIHJlc3QgKi8KLQliCS5zdGFydF9oZXJlX211bHRpcGxhdGZvcm0KKworOToJYgkuc3RhcnRfaGVyZV9tdWx0aXBsYXRmb3JtCisKK3BfZW5kOgkubGxvbmcJX2VuZCAtIF9zdGV4dAogCiAvKgogICogQ29weSByb3V0aW5lIHVzZWQgdG8gY29weSB0aGUga2VybmVsIHRvIHN0YXJ0IGF0IHBoeXNpY2FsIGFkZHJlc3MgMApAQCAtMTQzNiw2ICsxNDgzLDkgQEAKIAkvKiB0dXJuIG9uIDY0LWJpdCBtb2RlICovCiAJYmwJLmVuYWJsZV82NGJfbW9kZQogCisJLyogZ2V0IFRPQyBwb2ludGVyIChyZWFsIGFkZHJlc3MpICovCisJYmwJLnJlbGF0aXZlX3RvYworCiAJLyogQ29weSBzb21lIENQVSBzZXR0aW5ncyBmcm9tIENQVSAwICovCiAJYmwJLl9fcmVzdG9yZV9jcHVfcHBjOTcwCiAKQEAgLTE0NDUsMTAgKzE0OTUsMTAgQEAKIAltdG1zcmQJcjMJCQkvKiBSSSBvbiAqLwogCiAJLyogU2V0IHVwIGEgcGFjYSB2YWx1ZSBmb3IgdGhpcyBwcm9jZXNzb3IuICovCi0JTE9BRF9SRUdfSU1NRURJQVRFKHI0LCBwYWNhKQkvKiBHZXQgYmFzZSB2YWRkciBvZiBwYWNhIGFycmF5CSovCi0JbXVsbGkJcjEzLHIyNCxQQUNBX1NJWkUJIC8qIENhbGN1bGF0ZSB2YWRkciBvZiByaWdodCBwYWNhICovCisJTE9BRF9SRUdfQUREUihyNCxwYWNhKQkJLyogR2V0IGJhc2UgdmFkZHIgb2YgcGFjYSBhcnJheQkqLworCW11bGxpCXIxMyxyMjQsUEFDQV9TSVpFCS8qIENhbGN1bGF0ZSB2YWRkciBvZiByaWdodCBwYWNhICovCiAJYWRkCXIxMyxyMTMscjQJCS8qIGZvciB0aGlzIHByb2Nlc3Nvci4JCSovCi0JbXRzcHIJU1BSTl9TUFJHMyxyMTMJCSAvKiBTYXZlIHZhZGRyIG9mIHBhY2EgaW4gU1BSRzMJKi8KKwltdHNwcglTUFJOX1NQUkczLHIxMwkJLyogU2F2ZSB2YWRkciBvZiBwYWNhIGluIFNQUkczCSovCiAKIAkvKiBDcmVhdGUgYSB0ZW1wIGtlcm5lbCBzdGFjayBmb3IgdXNlIGJlZm9yZSByZWxvY2F0aW9uIGlzIG9uLgkqLwogCWxkCXIxLFBBQ0FFTUVSR1NQKHIxMykKQEAgLTE0NzYsOSArMTUyNiw2IEBACiAJLyogU2V0IHRocmVhZCBwcmlvcml0eSB0byBNRURJVU0gKi8KIAlITVRfTUVESVVNCiAKLQkvKiBMb2FkIFRPQyAqLwotCWxkCXIyLFBBQ0FUT0MocjEzKQotCiAJLyogRG8gZWFybHkgc2V0dXAgZm9yIHRoYXQgQ1BVIChzdGFiLCBzbGIsIGhhc2ggdGFibGUgcG9pbnRlcikgKi8KIAlibAkuZWFybHlfc2V0dXBfc2Vjb25kYXJ5CiAKQEAgLTE1MTUsOSArMTU2MiwxMSBAQAogCiAvKiAKICAqIFJ1bm5pbmcgd2l0aCByZWxvY2F0aW9uIG9uIGF0IHRoaXMgcG9pbnQuICBBbGwgd2Ugd2FudCB0byBkbyBpcwotICogemVybyB0aGUgc3RhY2sgYmFjay1jaGFpbiBwb2ludGVyIGJlZm9yZSBnb2luZyBpbnRvIEMgY29kZS4KKyAqIHplcm8gdGhlIHN0YWNrIGJhY2stY2hhaW4gcG9pbnRlciBhbmQgZ2V0IHRoZSBUT0MgdmlydHVhbCBhZGRyZXNzCisgKiBiZWZvcmUgZ29pbmcgaW50byBDIGNvZGUuCiAgKi8KIF9HTE9CQUwoc3RhcnRfc2Vjb25kYXJ5X3Byb2xvZykKKwlsZAlyMixQQUNBVE9DKHIxMykKIAlsaQlyMywwCiAJc3RkCXIzLDAocjEpCQkvKiBaZXJvIHRoZSBzdGFjayBmcmFtZSBwb2ludGVyCSovCiAJYmwJLnN0YXJ0X3NlY29uZGFyeQpAQCAtMTUyOSwzNCArMTU3OCw0NiBAQAogICovCiBfR0xPQkFMKGVuYWJsZV82NGJfbW9kZSkKIAltZm1zcglyMTEJCQkvKiBncmFiIHRoZSBjdXJyZW50IE1TUiAqLwotCWxpCXIxMiwxCi0JcmxkaWNyCXIxMixyMTIsTVNSX1NGX0xHLCg2My1NU1JfU0ZfTEcpCi0Jb3IJcjExLHIxMSxyMTIKLQlsaQlyMTIsMQotCXJsZGljcglyMTIscjEyLE1TUl9JU0ZfTEcsKDYzLU1TUl9JU0ZfTEcpCisJbGkJcjEyLChNU1JfU0YgfCBNU1JfSVNGKUBoaWdoZXN0CisJc2xkaQlyMTIscjEyLDQ4CiAJb3IJcjExLHIxMSxyMTIKIAltdG1zcmQJcjExCiAJaXN5bmMKIAlibHIKIAogLyoKKyAqIFRoaXMgcHV0cyB0aGUgVE9DIHBvaW50ZXIgaW50byByMiwgb2Zmc2V0IGJ5IDB4ODAwMCAoYXMgZXhwZWN0ZWQKKyAqIGJ5IHRoZSB0b29sY2hhaW4pLiAgSXQgY29tcHV0ZXMgdGhlIGNvcnJlY3QgdmFsdWUgZm9yIHdoZXJldmVyIHdlCisgKiBhcmUgcnVubmluZyBhdCB0aGUgbW9tZW50LCB1c2luZyBwb3NpdGlvbi1pbmRlcGVuZGVudCBjb2RlLgorICovCitfR0xPQkFMKHJlbGF0aXZlX3RvYykKKwltZmxyCXIwCisJYmNsCTIwLDMxLCQrNAorMDoJbWZscglyOQorCWxkCXIyLChwX3RvYyAtIDBiKShyOSkKKwlhZGQJcjIscjIscjkKKwltdGxyCXIwCisJYmxyCisKK3BfdG9jOgkubGxvbmcJX190b2Nfc3RhcnQgKyAweDgwMDAgLSAwYgorCisvKgogICogVGhpcyBpcyB3aGVyZSB0aGUgbWFpbiBrZXJuZWwgY29kZSBzdGFydHMuCiAgKi8KIF9JTklUX1NUQVRJQyhzdGFydF9oZXJlX211bHRpcGxhdGZvcm0pCi0JLyogZ2V0IGEgbmV3IG9mZnNldCwgbm93IHRoYXQgdGhlIGtlcm5lbCBoYXMgbW92ZWQuICovCi0JYmwJLnJlbG9jX29mZnNldAotCW1yCXIyNixyMworCS8qIHNldCB1cCB0aGUgVE9DIChyZWFsIGFkZHJlc3MpICovCisJYmwJLnJlbGF0aXZlX3RvYwogCiAJLyogQ2xlYXIgb3V0IHRoZSBCU1MuIEl0IG1heSBoYXZlIGJlZW4gZG9uZSBpbiBwcm9tX2luaXQsCiAJICogYWxyZWFkeSBidXQgdGhhdCdzIGlycmVsZXZhbnQgc2luY2UgcHJvbV9pbml0IHdpbGwgc29vbgogCSAqIGJlIGRldGFjaGVkIGZyb20gdGhlIGtlcm5lbCBjb21wbGV0ZWx5LiBCZXNpZGVzLCB3ZSBuZWVkCiAJICogdG8gY2xlYXIgaXQgbm93IGZvciBrZXhlYy1zdHlsZSBlbnRyeS4KIAkgKi8KLQlMT0FEX1JFR19JTU1FRElBVEUocjExLF9fYnNzX3N0b3ApCi0JTE9BRF9SRUdfSU1NRURJQVRFKHI4LF9fYnNzX3N0YXJ0KQorCUxPQURfUkVHX0FERFIocjExLF9fYnNzX3N0b3ApCisJTE9BRF9SRUdfQUREUihyOCxfX2Jzc19zdGFydCkKIAlzdWIJcjExLHIxMSxyOAkJLyogYnNzIHNpemUJCQkqLwogCWFkZGkJcjExLHIxMSw3CQkvKiByb3VuZCB1cCB0byBhbiBldmVuIGRvdWJsZSB3b3JkICovCi0JcmxkaWNsLiByMTEscjExLDYxLDMJCS8qIHNoaWZ0IHJpZ2h0IGJ5IDMJCSovCisJc3JkaS4JcjExLHIxMSwzCQkvKiBzaGlmdCByaWdodCBieSAzCQkqLwogCWJlcQk0ZgogCWFkZGkJcjgscjgsLTgKIAlsaQlyMCwwCkBAIC0xNTY5LDM1ICsxNjMwLDM1IEBACiAJb3JpCXI2LHI2LE1TUl9SSQogCW10bXNyZAlyNgkJCS8qIFJJIG9uICovCiAKLQkvKiBUaGUgZm9sbG93aW5nIGdldHMgdGhlIHN0YWNrIGFuZCBUT0Mgc2V0IHVwIHdpdGggdGhlIHJlZ3MgKi8KKyNpZmRlZiBDT05GSUdfUkVMT0NBVEFCTEUKKwkvKiBTYXZlIHRoZSBwaHlzaWNhbCBhZGRyZXNzIHdlJ3JlIHJ1bm5pbmcgYXQgaW4ga2VybnN0YXJ0X2FkZHIgKi8KKwlMT0FEX1JFR19BRERSKHI0LCBrZXJuc3RhcnRfYWRkcikKKwljbHJsZGkJcjAscjI1LDIKKwlzdGQJcjAsMChyNCkKKyNlbmRpZgorCisJLyogVGhlIGZvbGxvd2luZyBnZXRzIHRoZSBzdGFjayBzZXQgdXAgd2l0aCB0aGUgcmVncyAqLwogCS8qIHBvaW50aW5nIHRvIHRoZSByZWFsIGFkZHIgb2YgdGhlIGtlcm5lbCBzdGFjay4gIFRoaXMgaXMgICAqLwogCS8qIGFsbCBkb25lIHRvIHN1cHBvcnQgdGhlIEMgZnVuY3Rpb24gY2FsbCBiZWxvdyB3aGljaCBzZXRzICAqLwogCS8qIHVwIHRoZSBodGFiLiAgVGhpcyBpcyBkb25lIGJlY2F1c2Ugd2UgaGF2ZSByZWxvY2F0ZWQgdGhlICAqLwogCS8qIGtlcm5lbCBidXQgYXJlIHN0aWxsIHJ1bm5pbmcgaW4gcmVhbCBtb2RlLiAqLwogCi0JTE9BRF9SRUdfSU1NRURJQVRFKHIzLGluaXRfdGhyZWFkX3VuaW9uKQotCWFkZAlyMyxyMyxyMjYKKwlMT0FEX1JFR19BRERSKHIzLGluaXRfdGhyZWFkX3VuaW9uKQogCi0JLyogc2V0IHVwIGEgc3RhY2sgcG9pbnRlciAocGh5c2ljYWwgYWRkcmVzcykgKi8KKwkvKiBzZXQgdXAgYSBzdGFjayBwb2ludGVyICovCiAJYWRkaQlyMSxyMyxUSFJFQURfU0laRQogCWxpCXIwLDAKIAlzdGR1CXIwLC1TVEFDS19GUkFNRV9PVkVSSEVBRChyMSkKIAotCS8qIHNldCB1cCB0aGUgVE9DIChwaHlzaWNhbCBhZGRyZXNzKSAqLwotCUxPQURfUkVHX0lNTUVESUFURShyMixfX3RvY19zdGFydCkKLQlhZGRpCXIyLHIyLDB4NDAwMAotCWFkZGkJcjIscjIsMHg0MDAwCi0JYWRkCXIyLHIyLHIyNgotCiAJLyogRG8gdmVyeSBlYXJseSBrZXJuZWwgaW5pdGlhbGl6YXRpb25zLCBpbmNsdWRpbmcgaW5pdGlhbCBoYXNoIHRhYmxlLAogCSAqIHN0YWIgYW5kIHNsYiBzZXR1cCBiZWZvcmUgd2UgdHVybiBvbiByZWxvY2F0aW9uLgkqLwogCiAJLyogUmVzdG9yZSBwYXJhbWV0ZXJzIHBhc3NlZCBmcm9tIHByb21faW5pdC9rZXhlYyAqLwogCW1yCXIzLHIzMQotIAlibAkuZWFybHlfc2V0dXAKKwlibAkuZWFybHlfc2V0dXAJCS8qIGFsc28gc2V0cyByMTMgYW5kIFNQUkczICovCiAKLQlMT0FEX1JFR19JTU1FRElBVEUocjMsIC5zdGFydF9oZXJlX2NvbW1vbikKLQlMT0FEX1JFR19JTU1FRElBVEUocjQsIE1TUl9LRVJORUwpCisJTE9BRF9SRUdfQUREUihyMywgLnN0YXJ0X2hlcmVfY29tbW9uKQorCWxkCXI0LFBBQ0FLTVNSKHIxMykKIAltdHNwcglTUFJOX1NSUjAscjMKIAltdHNwcglTUFJOX1NSUjEscjQKIAlyZmlkCkBAIC0xNjA2LDIxICsxNjY3LDExIEBACiAJLyogVGhpcyBpcyB3aGVyZSBhbGwgcGxhdGZvcm1zIGNvbnZlcmdlIGV4ZWN1dGlvbiAqLwogX0lOSVRfR0xPQkFMKHN0YXJ0X2hlcmVfY29tbW9uKQogCS8qIHJlbG9jYXRpb24gaXMgb24gYXQgdGhpcyBwb2ludCAqLwotCi0JLyogVGhlIGZvbGxvd2luZyBjb2RlIHNldHMgdXAgdGhlIFNQIGFuZCBUT0Mgbm93IHRoYXQgd2UgYXJlICovCi0JLyogcnVubmluZyB3aXRoIHRyYW5zbGF0aW9uIGVuYWJsZWQuICovCi0KLQlMT0FEX1JFR19JTU1FRElBVEUocjMsaW5pdF90aHJlYWRfdW5pb24pCi0KLQkvKiBzZXQgdXAgdGhlIHN0YWNrICovCi0JYWRkaQlyMSxyMyxUSFJFQURfU0laRQotCWxpCXIwLDAKLQlzdGR1CXIwLC1TVEFDS19GUkFNRV9PVkVSSEVBRChyMSkKLQotCS8qIExvYWQgdGhlIFRPQyAqLwotCWxkCXIyLFBBQ0FUT0MocjEzKQogCXN0ZAlyMSxQQUNBS1NBVkUocjEzKQogCisJLyogTG9hZCB0aGUgVE9DICh2aXJ0dWFsIGFkZHJlc3MpICovCisJbGQJcjIsUEFDQVRPQyhyMTMpCisKIAlibAkuc2V0dXBfc3lzdGVtCiAKIAkvKiBMb2FkIHVwIHRoZSBrZXJuZWwgY29udGV4dCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9oZWFkX2ZzbF9ib29rZS5TIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9oZWFkX2ZzbF9ib29rZS5TCmluZGV4IDNjYjUyZmEuLjU5MDMwNGMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvaGVhZF9mc2xfYm9va2UuUworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL2hlYWRfZnNsX2Jvb2tlLlMKQEAgLTQyMiw3ICs0MjIsNiBAQAogICogICByMTIgaXMgcG9pbnRlciB0byB0aGUgcHRlCiAgKi8KICNpZmRlZiBDT05GSUdfUFRFXzY0QklUCi0jZGVmaW5lIFBURV9GTEFHU19PRkZTRVQJNAogI2RlZmluZSBGSU5EX1BURQlcCiAJcmx3aW5tCXIxMiwgcjEwLCAxMywgMTksIDI5OwkvKiBDb21wdXRlIHBnZGlyL3BtZCBvZmZzZXQgKi8JXAogCWx3engJcjExLCByMTIsIHIxMTsJCS8qIEdldCBwZ2QvcG1kIGVudHJ5ICovCQlcCkBAIC00MzEsNyArNDMwLDYgQEAKIAlybHdpbWkJcjEyLCByMTAsIDIzLCAyMCwgMjg7CS8qIENvbXB1dGUgcHRlIGFkZHJlc3MgKi8JXAogCWx3eglyMTEsIDQocjEyKTsJCS8qIEdldCBwdGUgZW50cnkgKi8KICNlbHNlCi0jZGVmaW5lIFBURV9GTEFHU19PRkZTRVQJMAogI2RlZmluZSBGSU5EX1BURQlcCiAJcmx3aW1pCXIxMSwgcjEwLCAxMiwgMjAsIDI5OwkvKiBDcmVhdGUgTDEgKHBnZGlyL3BtZCkgYWRkcmVzcyAqLwlcCiAJbHd6CXIxMSwgMChyMTEpOwkJLyogR2V0IEwxIGVudHJ5ICovCQkJXApAQCAtNTc5LDEzICs1NzcsMTkgQEAKIAogCUZJTkRfUFRFCiAJYW5kYy4JcjEzLHIxMyxyMTEJCS8qIENoZWNrIHBlcm1pc3Npb24gKi8KLQlibmUJMmYJCQkvKiBCYWlsIGlmIHBlcm1pc3Npb24gbWlzbWFjaCAqLwogCiAjaWZkZWYgQ09ORklHX1BURV82NEJJVAotCWx3eglyMTMsIDAocjEyKQorI2lmZGVmIENPTkZJR19TTVAKKwlzdWJmCXIxMCxyMTEscjEyCQkvKiBjcmVhdGUgZmFsc2UgZGF0YSBkZXAgKi8KKwlsd3p4CXIxMyxyMTEscjEwCQkvKiBHZXQgdXBwZXIgcHRlIGJpdHMgKi8KKyNlbHNlCisJbHd6CXIxMywwKHIxMikJCS8qIEdldCB1cHBlciBwdGUgYml0cyAqLworI2VuZGlmCiAjZW5kaWYKIAotCSAvKiBKdW1wIHRvIGNvbW1vbiB0bGIgbG9hZCAqLworCWJuZQkyZgkJCS8qIEJhaWwgaWYgcGVybWlzc2lvbi92YWxpZCBtaXNtYWNoICovCisKKwkvKiBKdW1wIHRvIGNvbW1vbiB0bGIgbG9hZCAqLwogCWIJZmluaXNoX3RsYl9sb2FkCiAyOgogCS8qIFRoZSBiYWlsb3V0LiAgUmVzdG9yZSByZWdpc3RlcnMgdG8gcHJlLWV4Y2VwdGlvbiBjb25kaXRpb25zCkBAIC02NDAsMTEgKzY0NCwxNyBAQAogCiAJRklORF9QVEUKIAlhbmRjLglyMTMscjEzLHIxMQkJLyogQ2hlY2sgcGVybWlzc2lvbiAqLwotCWJuZQkyZgkJCS8qIEJhaWwgaWYgcGVybWlzc2lvbiBtaXNtYWNoICovCiAKICNpZmRlZiBDT05GSUdfUFRFXzY0QklUCi0JbHd6CXIxMywgMChyMTIpCisjaWZkZWYgQ09ORklHX1NNUAorCXN1YmYJcjEwLHIxMSxyMTIJCS8qIGNyZWF0ZSBmYWxzZSBkYXRhIGRlcCAqLworCWx3engJcjEzLHIxMSxyMTAJCS8qIEdldCB1cHBlciBwdGUgYml0cyAqLworI2Vsc2UKKwlsd3oJcjEzLDAocjEyKQkJLyogR2V0IHVwcGVyIHB0ZSBiaXRzICovCiAjZW5kaWYKKyNlbmRpZgorCisJYm5lCTJmCQkJLyogQmFpbCBpZiBwZXJtaXNzaW9uIG1pc21hY2ggKi8KIAogCS8qIEp1bXAgdG8gY29tbW9uIFRMQiBsb2FkIHBvaW50ICovCiAJYglmaW5pc2hfdGxiX2xvYWQKQEAgLTcwMiw3ICs3MTIsNyBAQAogLyoKICAqIEJvdGggdGhlIGluc3RydWN0aW9uIGFuZCBkYXRhIFRMQiBtaXNzIGdldCB0byB0aGlzCiAgKiBwb2ludCB0byBsb2FkIHRoZSBUTEIuCi0gKglyMTAgLSBFQSBvZiBmYXVsdAorICoJcjEwIC0gYXZhaWxhYmxlIHRvIHVzZQogICoJcjExIC0gVExCIChpbmZvIGZyb20gTGludXggUFRFKQogICoJcjEyIC0gYXZhaWxhYmxlIHRvIHVzZQogICoJcjEzIC0gdXBwZXIgYml0cyBvZiBQVEUgKGlmIFBURV82NEJJVCkgb3IgYXZhaWxhYmxlIHRvIHVzZQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9pb21tdS5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9pb21tdS5jCmluZGV4IDU1MGExOTMuLmVhMWJhODkgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvaW9tbXUuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL2lvbW11LmMKQEAgLTUxLDE3ICs1MSw2IEBACiAKIHN0YXRpYyB2b2lkIF9faW9tbXVfZnJlZShzdHJ1Y3QgaW9tbXVfdGFibGUgKiwgZG1hX2FkZHJfdCwgdW5zaWduZWQgaW50KTsKIAotc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGlvbW11X251bV9wYWdlcyh1bnNpZ25lZCBsb25nIHZhZGRyLAotCQkJCQkgICAgdW5zaWduZWQgbG9uZyBzbGVuKQotewotCXVuc2lnbmVkIGxvbmcgbnBhZ2VzOwotCi0JbnBhZ2VzID0gSU9NTVVfUEFHRV9BTElHTih2YWRkciArIHNsZW4pIC0gKHZhZGRyICYgSU9NTVVfUEFHRV9NQVNLKTsKLQlucGFnZXMgPj49IElPTU1VX1BBR0VfU0hJRlQ7Ci0KLQlyZXR1cm4gbnBhZ2VzOwotfQotCiBzdGF0aWMgaW50IF9faW5pdCBzZXR1cF9wcm90ZWN0NGdiKGNoYXIgKnN0cikKIHsKIAlpZiAoc3RyY21wKHN0ciwgIm9uIikgPT0gMCkKQEAgLTMyNSw3ICszMTQsNyBAQAogCQl9CiAJCS8qIEFsbG9jYXRlIGlvbW11IGVudHJpZXMgZm9yIHRoYXQgc2VnbWVudCAqLwogCQl2YWRkciA9ICh1bnNpZ25lZCBsb25nKSBzZ192aXJ0KHMpOwotCQlucGFnZXMgPSBpb21tdV9udW1fcGFnZXModmFkZHIsIHNsZW4pOworCQlucGFnZXMgPSBpb21tdV9udW1fcGFnZXModmFkZHIsIHNsZW4sIElPTU1VX1BBR0VfU0laRSk7CiAJCWFsaWduID0gMDsKIAkJaWYgKElPTU1VX1BBR0VfU0hJRlQgPCBQQUdFX1NISUZUICYmIHNsZW4gPj0gUEFHRV9TSVpFICYmCiAJCSAgICAodmFkZHIgJiB+UEFHRV9NQVNLKSA9PSAwKQpAQCAtNDE4LDcgKzQwNyw4IEBACiAJCQl1bnNpZ25lZCBsb25nIHZhZGRyLCBucGFnZXM7CiAKIAkJCXZhZGRyID0gcy0+ZG1hX2FkZHJlc3MgJiBJT01NVV9QQUdFX01BU0s7Ci0JCQlucGFnZXMgPSBpb21tdV9udW1fcGFnZXMocy0+ZG1hX2FkZHJlc3MsIHMtPmRtYV9sZW5ndGgpOworCQkJbnBhZ2VzID0gaW9tbXVfbnVtX3BhZ2VzKHMtPmRtYV9hZGRyZXNzLCBzLT5kbWFfbGVuZ3RoLAorCQkJCQkJIElPTU1VX1BBR0VfU0laRSk7CiAJCQlfX2lvbW11X2ZyZWUodGJsLCB2YWRkciwgbnBhZ2VzKTsKIAkJCXMtPmRtYV9hZGRyZXNzID0gRE1BX0VSUk9SX0NPREU7CiAJCQlzLT5kbWFfbGVuZ3RoID0gMDsKQEAgLTQ1Miw3ICs0NDIsOCBAQAogCiAJCWlmIChzZy0+ZG1hX2xlbmd0aCA9PSAwKQogCQkJYnJlYWs7Ci0JCW5wYWdlcyA9IGlvbW11X251bV9wYWdlcyhkbWFfaGFuZGxlLCBzZy0+ZG1hX2xlbmd0aCk7CisJCW5wYWdlcyA9IGlvbW11X251bV9wYWdlcyhkbWFfaGFuZGxlLCBzZy0+ZG1hX2xlbmd0aCwKKwkJCQkJIElPTU1VX1BBR0VfU0laRSk7CiAJCV9faW9tbXVfZnJlZSh0YmwsIGRtYV9oYW5kbGUsIG5wYWdlcyk7CiAJCXNnID0gc2dfbmV4dChzZyk7CiAJfQpAQCAtNTg0LDcgKzU3NSw3IEBACiAJQlVHX09OKGRpcmVjdGlvbiA9PSBETUFfTk9ORSk7CiAKIAl1YWRkciA9ICh1bnNpZ25lZCBsb25nKXZhZGRyOwotCW5wYWdlcyA9IGlvbW11X251bV9wYWdlcyh1YWRkciwgc2l6ZSk7CisJbnBhZ2VzID0gaW9tbXVfbnVtX3BhZ2VzKHVhZGRyLCBzaXplLCBJT01NVV9QQUdFX1NJWkUpOwogCiAJaWYgKHRibCkgewogCQlhbGlnbiA9IDA7CkBAIC02MTcsNyArNjA4LDcgQEAKIAlCVUdfT04oZGlyZWN0aW9uID09IERNQV9OT05FKTsKIAogCWlmICh0YmwpIHsKLQkJbnBhZ2VzID0gaW9tbXVfbnVtX3BhZ2VzKGRtYV9oYW5kbGUsIHNpemUpOworCQlucGFnZXMgPSBpb21tdV9udW1fcGFnZXMoZG1hX2hhbmRsZSwgc2l6ZSwgSU9NTVVfUEFHRV9TSVpFKTsKIAkJaW9tbXVfZnJlZSh0YmwsIGRtYV9oYW5kbGUsIG5wYWdlcyk7CiAJfQogfQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9pcnEuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvaXJxLmMKaW5kZXggZDk3MmRlYy4uYWMyMjJkMCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9pcnEuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL2lycS5jCkBAIC00MzksOCArNDM5LDggQEAKIAogc3RhdGljIExJU1RfSEVBRChpcnFfaG9zdHMpOwogc3RhdGljIERFRklORV9TUElOTE9DSyhpcnFfYmlnX2xvY2spOwotc3RhdGljIERFRklORV9QRVJfQ1BVKHVuc2lnbmVkIGludCwgaXJxX3JhZGl4X3JlYWRlcik7Ci1zdGF0aWMgdW5zaWduZWQgaW50IGlycV9yYWRpeF93cml0ZXI7CitzdGF0aWMgdW5zaWduZWQgaW50IHJldm1hcF90cmVlc19hbGxvY2F0ZWQ7CitzdGF0aWMgREVGSU5FX01VVEVYKHJldm1hcF90cmVlc19tdXRleCk7CiBzdHJ1Y3QgaXJxX21hcF9lbnRyeSBpcnFfbWFwW05SX0lSUVNdOwogc3RhdGljIHVuc2lnbmVkIGludCBpcnFfdmlycV9jb3VudCA9IE5SX0lSUVM7CiBzdGF0aWMgc3RydWN0IGlycV9ob3N0ICppcnFfZGVmYXVsdF9ob3N0OwpAQCAtNTgzLDU3ICs1ODMsNiBAQAogCQlpcnFfdmlycV9jb3VudCA9IGNvdW50OwogfQogCi0vKiByYWRpeCB0cmVlIG5vdCBsb2NrbGVzcyBzYWZlICEgd2UgdXNlIGEgYnJsb2NrLXR5cGUgbWVjYW5pc20KLSAqIGZvciBub3csIHVudGlsIHdlIGNhbiB1c2UgYSBsb2NrbGVzcyByYWRpeCB0cmVlCi0gKi8KLXN0YXRpYyB2b2lkIGlycV9yYWRpeF93cmxvY2sodW5zaWduZWQgbG9uZyAqZmxhZ3MpCi17Ci0JdW5zaWduZWQgaW50IGNwdSwgb2s7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmaXJxX2JpZ19sb2NrLCAqZmxhZ3MpOwotCWlycV9yYWRpeF93cml0ZXIgPSAxOwotCXNtcF9tYigpOwotCWRvIHsKLQkJYmFycmllcigpOwotCQlvayA9IDE7Ci0JCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHsKLQkJCWlmIChwZXJfY3B1KGlycV9yYWRpeF9yZWFkZXIsIGNwdSkpIHsKLQkJCQlvayA9IDA7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCX0KLQkJaWYgKCFvaykKLQkJCWNwdV9yZWxheCgpOwotCX0gd2hpbGUoIW9rKTsKLX0KLQotc3RhdGljIHZvaWQgaXJxX3JhZGl4X3dydW5sb2NrKHVuc2lnbmVkIGxvbmcgZmxhZ3MpCi17Ci0Jc21wX3dtYigpOwotCWlycV9yYWRpeF93cml0ZXIgPSAwOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlycV9iaWdfbG9jaywgZmxhZ3MpOwotfQotCi1zdGF0aWMgdm9pZCBpcnFfcmFkaXhfcmRsb2NrKHVuc2lnbmVkIGxvbmcgKmZsYWdzKQotewotCWxvY2FsX2lycV9zYXZlKCpmbGFncyk7Ci0JX19nZXRfY3B1X3ZhcihpcnFfcmFkaXhfcmVhZGVyKSA9IDE7Ci0Jc21wX21iKCk7Ci0JaWYgKGxpa2VseShpcnFfcmFkaXhfd3JpdGVyID09IDApKQotCQlyZXR1cm47Ci0JX19nZXRfY3B1X3ZhcihpcnFfcmFkaXhfcmVhZGVyKSA9IDA7Ci0Jc21wX3dtYigpOwotCXNwaW5fbG9jaygmaXJxX2JpZ19sb2NrKTsKLQlfX2dldF9jcHVfdmFyKGlycV9yYWRpeF9yZWFkZXIpID0gMTsKLQlzcGluX3VubG9jaygmaXJxX2JpZ19sb2NrKTsKLX0KLQotc3RhdGljIHZvaWQgaXJxX3JhZGl4X3JkdW5sb2NrKHVuc2lnbmVkIGxvbmcgZmxhZ3MpCi17Ci0JX19nZXRfY3B1X3ZhcihpcnFfcmFkaXhfcmVhZGVyKSA9IDA7Ci0JbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwotfQotCiBzdGF0aWMgaW50IGlycV9zZXR1cF92aXJxKHN0cnVjdCBpcnFfaG9zdCAqaG9zdCwgdW5zaWduZWQgaW50IHZpcnEsCiAJCQkgICAgaXJxX2h3X251bWJlcl90IGh3aXJxKQogewpAQCAtNzg4LDcgKzczNyw2IEBACiB7CiAJc3RydWN0IGlycV9ob3N0ICpob3N0OwogCWlycV9od19udW1iZXJfdCBod2lycTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJaWYgKHZpcnEgPT0gTk9fSVJRKQogCQlyZXR1cm47CkBAIC04MjEsMTIgKzc2OSwxNiBAQAogCQkJaG9zdC0+cmV2bWFwX2RhdGEubGluZWFyLnJldm1hcFtod2lycV0gPSBOT19JUlE7CiAJCWJyZWFrOwogCWNhc2UgSVJRX0hPU1RfTUFQX1RSRUU6Ci0JCS8qIENoZWNrIGlmIHJhZGl4IHRyZWUgYWxsb2NhdGVkIHlldCAqLwotCQlpZiAoaG9zdC0+cmV2bWFwX2RhdGEudHJlZS5nZnBfbWFzayA9PSAwKQorCQkvKgorCQkgKiBDaGVjayBpZiByYWRpeCB0cmVlIGFsbG9jYXRlZCB5ZXQsIGlmIG5vdCB0aGVuIG5vdGhpbmcgdG8KKwkJICogcmVtb3ZlLgorCQkgKi8KKwkJc21wX3JtYigpOworCQlpZiAocmV2bWFwX3RyZWVzX2FsbG9jYXRlZCA8IDEpCiAJCQlicmVhazsKLQkJaXJxX3JhZGl4X3dybG9jaygmZmxhZ3MpOworCQltdXRleF9sb2NrKCZyZXZtYXBfdHJlZXNfbXV0ZXgpOwogCQlyYWRpeF90cmVlX2RlbGV0ZSgmaG9zdC0+cmV2bWFwX2RhdGEudHJlZSwgaHdpcnEpOwotCQlpcnFfcmFkaXhfd3J1bmxvY2soZmxhZ3MpOworCQltdXRleF91bmxvY2soJnJldm1hcF90cmVlc19tdXRleCk7CiAJCWJyZWFrOwogCX0KIApAQCAtODc1LDQ1ICs4MjcsNjQgQEAKIEVYUE9SVF9TWU1CT0xfR1BMKGlycV9maW5kX21hcHBpbmcpOwogCiAKLXVuc2lnbmVkIGludCBpcnFfcmFkaXhfcmV2bWFwKHN0cnVjdCBpcnFfaG9zdCAqaG9zdCwKLQkJCSAgICAgIGlycV9od19udW1iZXJfdCBod2lycSkKK3Vuc2lnbmVkIGludCBpcnFfcmFkaXhfcmV2bWFwX2xvb2t1cChzdHJ1Y3QgaXJxX2hvc3QgKmhvc3QsCisJCQkJICAgICBpcnFfaHdfbnVtYmVyX3QgaHdpcnEpCiB7Ci0Jc3RydWN0IHJhZGl4X3RyZWVfcm9vdCAqdHJlZTsKIAlzdHJ1Y3QgaXJxX21hcF9lbnRyeSAqcHRyOwogCXVuc2lnbmVkIGludCB2aXJxOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlXQVJOX09OKGhvc3QtPnJldm1hcF90eXBlICE9IElSUV9IT1NUX01BUF9UUkVFKTsKIAotCS8qIENoZWNrIGlmIHRoZSByYWRpeCB0cmVlIGV4aXN0IHlldC4gV2UgdGVzdCB0aGUgdmFsdWUgb2YKLQkgKiB0aGUgZ2ZwX21hc2sgZm9yIHRoYXQuIFNuZWFreSBidXQgc2F2ZXMgYW5vdGhlciBpbnQgaW4gdGhlCi0JICogc3RydWN0dXJlLiBJZiBub3QsIHdlIGZhbGxiYWNrIHRvIHNsb3cgbW9kZQorCS8qCisJICogQ2hlY2sgaWYgdGhlIHJhZGl4IHRyZWUgZXhpc3RzIGFuZCBoYXMgYmVlIGluaXRpYWxpemVkLgorCSAqIElmIG5vdCwgd2UgZmFsbGJhY2sgdG8gc2xvdyBtb2RlCiAJICovCi0JdHJlZSA9ICZob3N0LT5yZXZtYXBfZGF0YS50cmVlOwotCWlmICh0cmVlLT5nZnBfbWFzayA9PSAwKQorCWlmIChyZXZtYXBfdHJlZXNfYWxsb2NhdGVkIDwgMikKIAkJcmV0dXJuIGlycV9maW5kX21hcHBpbmcoaG9zdCwgaHdpcnEpOwogCiAJLyogTm93IHRyeSB0byByZXNvbHZlICovCi0JaXJxX3JhZGl4X3JkbG9jaygmZmxhZ3MpOwotCXB0ciA9IHJhZGl4X3RyZWVfbG9va3VwKHRyZWUsIGh3aXJxKTsKLQlpcnFfcmFkaXhfcmR1bmxvY2soZmxhZ3MpOworCS8qCisJICogTm8gcmN1X3JlYWRfbG9jayhpbmcpIG5lZWRlZCwgdGhlIHB0ciByZXR1cm5lZCBjYW4ndCBnbyB1bmRlciB1cworCSAqIGFzIGl0J3MgcmVmZXJlbmNpbmcgYW4gZW50cnkgaW4gdGhlIHN0YXRpYyBpcnFfbWFwIHRhYmxlLgorCSAqLworCXB0ciA9IHJhZGl4X3RyZWVfbG9va3VwKCZob3N0LT5yZXZtYXBfZGF0YS50cmVlLCBod2lycSk7CiAKLQkvKiBGb3VuZCBpdCwgcmV0dXJuICovCi0JaWYgKHB0cikgeworCS8qCisJICogSWYgZm91bmQgaW4gcmFkaXggdHJlZSwgdGhlbiBmaW5lLgorCSAqIEVsc2UgZmFsbGJhY2sgdG8gbGluZWFyIGxvb2t1cCAtIHRoaXMgc2hvdWxkIG5vdCBoYXBwZW4gaW4gcHJhY3RpY2UKKwkgKiBhcyBpdCBtZWFucyB0aGF0IHdlIGZhaWxlZCB0byBpbnNlcnQgdGhlIG5vZGUgaW4gdGhlIHJhZGl4IHRyZWUuCisJICovCisJaWYgKHB0cikKIAkJdmlycSA9IHB0ciAtIGlycV9tYXA7Ci0JCXJldHVybiB2aXJxOwotCX0KKwllbHNlCisJCXZpcnEgPSBpcnFfZmluZF9tYXBwaW5nKGhvc3QsIGh3aXJxKTsKIAotCS8qIElmIG5vdCB0aGVyZSwgdHJ5IHRvIGluc2VydCBpdCAqLwotCXZpcnEgPSBpcnFfZmluZF9tYXBwaW5nKGhvc3QsIGh3aXJxKTsKLQlpZiAodmlycSAhPSBOT19JUlEpIHsKLQkJaXJxX3JhZGl4X3dybG9jaygmZmxhZ3MpOwotCQlyYWRpeF90cmVlX2luc2VydCh0cmVlLCBod2lycSwgJmlycV9tYXBbdmlycV0pOwotCQlpcnFfcmFkaXhfd3J1bmxvY2soZmxhZ3MpOwotCX0KIAlyZXR1cm4gdmlycTsKIH0KIAordm9pZCBpcnFfcmFkaXhfcmV2bWFwX2luc2VydChzdHJ1Y3QgaXJxX2hvc3QgKmhvc3QsIHVuc2lnbmVkIGludCB2aXJxLAorCQkJICAgICBpcnFfaHdfbnVtYmVyX3QgaHdpcnEpCit7CisKKwlXQVJOX09OKGhvc3QtPnJldm1hcF90eXBlICE9IElSUV9IT1NUX01BUF9UUkVFKTsKKworCS8qCisJICogQ2hlY2sgaWYgdGhlIHJhZGl4IHRyZWUgZXhpc3RzIHlldC4KKwkgKiBJZiBub3QsIHRoZW4gdGhlIGlycSB3aWxsIGJlIGluc2VydGVkIGludG8gdGhlIHRyZWUgd2hlbiBpdCBnZXRzCisJICogaW5pdGlhbGl6ZWQuCisJICovCisJc21wX3JtYigpOworCWlmIChyZXZtYXBfdHJlZXNfYWxsb2NhdGVkIDwgMSkKKwkJcmV0dXJuOworCisJaWYgKHZpcnEgIT0gTk9fSVJRKSB7CisJCW11dGV4X2xvY2soJnJldm1hcF90cmVlc19tdXRleCk7CisJCXJhZGl4X3RyZWVfaW5zZXJ0KCZob3N0LT5yZXZtYXBfZGF0YS50cmVlLCBod2lycSwKKwkJCQkgICZpcnFfbWFwW3ZpcnFdKTsKKwkJbXV0ZXhfdW5sb2NrKCZyZXZtYXBfdHJlZXNfbXV0ZXgpOworCX0KK30KKwogdW5zaWduZWQgaW50IGlycV9saW5lYXJfcmV2bWFwKHN0cnVjdCBpcnFfaG9zdCAqaG9zdCwKIAkJCSAgICAgICBpcnFfaHdfbnVtYmVyX3QgaHdpcnEpCiB7CkBAIC0xMDIwLDE0ICs5OTEsNDQgQEAKIHN0YXRpYyBpbnQgaXJxX2xhdGVfaW5pdCh2b2lkKQogewogCXN0cnVjdCBpcnFfaG9zdCAqaDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVuc2lnbmVkIGludCBpOwogCi0JaXJxX3JhZGl4X3dybG9jaygmZmxhZ3MpOworCS8qCisJICogTm8gbXV0dWFsIGV4Y2x1c2lvbiB3aXRoIHJlc3BlY3QgdG8gYWNjZXNzb3JzIG9mIHRoZSB0cmVlIGlzIG5lZWRlZAorCSAqIGhlcmUgYXMgdGhlIHN5bmNocm9uaXphdGlvbiBpcyBkb25lIHZpYSB0aGUgc3RhdGUgdmFyaWFibGUKKwkgKiByZXZtYXBfdHJlZXNfYWxsb2NhdGVkLgorCSAqLwogCWxpc3RfZm9yX2VhY2hfZW50cnkoaCwgJmlycV9ob3N0cywgbGluaykgewogCQlpZiAoaC0+cmV2bWFwX3R5cGUgPT0gSVJRX0hPU1RfTUFQX1RSRUUpCi0JCQlJTklUX1JBRElYX1RSRUUoJmgtPnJldm1hcF9kYXRhLnRyZWUsIEdGUF9BVE9NSUMpOworCQkJSU5JVF9SQURJWF9UUkVFKCZoLT5yZXZtYXBfZGF0YS50cmVlLCBHRlBfS0VSTkVMKTsKIAl9Ci0JaXJxX3JhZGl4X3dydW5sb2NrKGZsYWdzKTsKKworCS8qCisJICogTWFrZSBzdXJlIHRoZSByYWRpeCB0cmVlcyBpbml0cyBhcmUgdmlzaWJsZSBiZWZvcmUgc2V0dGluZworCSAqIHRoZSBmbGFnCisJICovCisJc21wX3dtYigpOworCXJldm1hcF90cmVlc19hbGxvY2F0ZWQgPSAxOworCisJLyoKKwkgKiBJbnNlcnQgdGhlIHJldmVyc2UgbWFwcGluZyBmb3IgdGhvc2UgaW50ZXJydXB0cyBhbHJlYWR5IHByZXNlbnQKKwkgKiBpbiBpcnFfbWFwW10uCisJICovCisJbXV0ZXhfbG9jaygmcmV2bWFwX3RyZWVzX211dGV4KTsKKwlmb3IgKGkgPSAwOyBpIDwgaXJxX3ZpcnFfY291bnQ7IGkrKykgeworCQlpZiAoaXJxX21hcFtpXS5ob3N0ICYmCisJCSAgICAoaXJxX21hcFtpXS5ob3N0LT5yZXZtYXBfdHlwZSA9PSBJUlFfSE9TVF9NQVBfVFJFRSkpCisJCQlyYWRpeF90cmVlX2luc2VydCgmaXJxX21hcFtpXS5ob3N0LT5yZXZtYXBfZGF0YS50cmVlLAorCQkJCQkgIGlycV9tYXBbaV0uaHdpcnEsICZpcnFfbWFwW2ldKTsKKwl9CisJbXV0ZXhfdW5sb2NrKCZyZXZtYXBfdHJlZXNfbXV0ZXgpOworCisJLyoKKwkgKiBNYWtlIHN1cmUgdGhlIHJhZGl4IHRyZWVzIGluc2VydGlvbnMgYXJlIHZpc2libGUgYmVmb3JlIHNldHRpbmcKKwkgKiB0aGUgZmxhZworCSAqLworCXNtcF93bWIoKTsKKwlyZXZtYXBfdHJlZXNfYWxsb2NhdGVkID0gMjsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9scGFyY2ZnLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL2xwYXJjZmcuYwppbmRleCBiM2VlZjMwLi5kMDUxZThjIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL2xwYXJjZmcuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL2xwYXJjZmcuYwpAQCAtNTEwLDEwICs1MTAsMTAgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlwcl9kZWJ1ZygiJXM6IGN1cnJlbnRfZW50aXRsZWQgPSAlbHUsIGN1cnJlbnRfd2VpZ2h0ID0gJXVcbiIsCi0JICAgICAgICAgX19GVU5DVElPTl9fLCBwcHBfZGF0YS5lbnRpdGxlbWVudCwgcHBwX2RhdGEud2VpZ2h0KTsKKwkJIF9fZnVuY19fLCBwcHBfZGF0YS5lbnRpdGxlbWVudCwgcHBwX2RhdGEud2VpZ2h0KTsKIAogCXByX2RlYnVnKCIlczogbmV3X2VudGl0bGVkID0gJWx1LCBuZXdfd2VpZ2h0ID0gJXVcbiIsCi0JCSBfX0ZVTkNUSU9OX18sIG5ld19lbnRpdGxlZCwgbmV3X3dlaWdodCk7CisJCSBfX2Z1bmNfXywgbmV3X2VudGl0bGVkLCBuZXdfd2VpZ2h0KTsKIAogCXJldHZhbCA9IHBscGFyX2hjYWxsX25vcmV0cyhIX1NFVF9QUFAsIG5ld19lbnRpdGxlZCwgbmV3X3dlaWdodCk7CiAJcmV0dXJuIHJldHZhbDsKQEAgLTU1NiwxMCArNTU2LDEwIEBACiAJCXJldHVybiAtRUlOVkFMOwogCiAJcHJfZGVidWcoIiVzOiBjdXJyZW50X2VudGl0bGVkID0gJWx1LCBjdXJyZW50X3dlaWdodCA9ICV1XG4iLAotCSAgICAgICAgIF9fRlVOQ1RJT05fXywgbXBwX2RhdGEuZW50aXRsZWRfbWVtLCBtcHBfZGF0YS5tZW1fd2VpZ2h0KTsKKwkgICAgICAgICBfX2Z1bmNfXywgbXBwX2RhdGEuZW50aXRsZWRfbWVtLCBtcHBfZGF0YS5tZW1fd2VpZ2h0KTsKIAogCXByX2RlYnVnKCIlczogbmV3X2VudGl0bGVkID0gJWx1LCBuZXdfd2VpZ2h0ID0gJXVcbiIsCi0JICAgICAgICAgX19GVU5DVElPTl9fLCBuZXdfZW50aXRsZWQsIG5ld193ZWlnaHQpOworCQkgX19mdW5jX18sIG5ld19lbnRpdGxlZCwgbmV3X3dlaWdodCk7CiAKIAlyYyA9IHBscGFyX2hjYWxsX25vcmV0cyhIX1NFVF9NUFAsIG5ld19lbnRpdGxlZCwgbmV3X3dlaWdodCk7CiAJcmV0dXJuIHJjOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9taXNjLlMgYi9hcmNoL3Bvd2VycGMva2VybmVsL21pc2MuUwppbmRleCA4NWNiNmYzLi4yZDI5NzUyIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL21pc2MuUworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL21pc2MuUwpAQCAtMzEsMTEgKzMxLDE0IEBACiAJbWZscglyMAogCWJsCTFmCiAxOgltZmxyCXIzCi0JTE9BRF9SRUdfSU1NRURJQVRFKHI0LDFiKQorCVBQQ19MTAlyNCwoMmYtMWIpKHIzKQogCXN1YmYJcjMscjQscjMKIAltdGxyCXIwCiAJYmxyCiAKKwkuYWxpZ24JMworMjoJUFBDX0xPTkcgMWIKKwogLyoKICAqIGFkZF9yZWxvY19vZmZzZXQoeCkgcmV0dXJucyB4ICsgcmVsb2Nfb2Zmc2V0KCkuCiAgKi8KQEAgLTQzLDEyICs0NiwxNSBAQAogCW1mbHIJcjAKIAlibAkxZgogMToJbWZscglyNQotCUxPQURfUkVHX0lNTUVESUFURShyNCwxYikKKwlQUENfTEwJcjQsKDJmLTFiKShyNSkKIAlzdWJmCXI1LHI0LHI1CiAJYWRkCXIzLHIzLHI1CiAJbXRscglyMAogCWJscgogCisJLmFsaWduCTMKKzI6CVBQQ19MT05HIDFiCisKIF9HTE9CQUwoa2VybmVsX2V4ZWN2ZSkKIAlsaQlyMCxfX05SX2V4ZWN2ZQogCXNjCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL21pc2NfMzIuUyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvbWlzY18zMi5TCmluZGV4IDdhNmRmYmMuLjZhOWI0YmYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvbWlzY18zMi5TCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvbWlzY18zMi5TCkBAIC0yNzQsNiArMjc0LDEwIEBACiAvKgogICogRmx1c2ggTU1VIFRMQgogICovCisjaWZuZGVmIENPTkZJR19GU0xfQk9PS0UKK19HTE9CQUwoX3RsYmlsX2FsbCkKK19HTE9CQUwoX3RsYmlsX3BpZCkKKyNlbmRpZgogX0dMT0JBTChfdGxiaWEpCiAjaWYgZGVmaW5lZChDT05GSUdfNDB4KQogCXN5bmMJCQkvKiBGbHVzaCB0byBtZW1vcnkgYmVmb3JlIGNoYW5naW5nIG1hcHBpbmcgKi8KQEAgLTM0NCw2ICszNDgsOSBAQAogLyoKICAqIEZsdXNoIE1NVSBUTEIgZm9yIGEgcGFydGljdWxhciBhZGRyZXNzCiAgKi8KKyNpZm5kZWYgQ09ORklHX0ZTTF9CT09LRQorX0dMT0JBTChfdGxiaWxfdmEpCisjZW5kaWYKIF9HTE9CQUwoX3RsYmllKQogI2lmIGRlZmluZWQoQ09ORklHXzQweCkKIAkvKiBXZSBydW4gdGhlIHNlYXJjaCB3aXRoIGludGVycnVwdHMgZGlzYWJsZWQgYmVjYXVzZSB3ZSBoYXZlIHRvIGNoYW5nZQpAQCAtNDM2LDYgKzQ0Myw1MyBAQAogI2VuZGlmIC8qICEgQ09ORklHXzQweCAqLwogCWJscgogCisjaWYgZGVmaW5lZChDT05GSUdfRlNMX0JPT0tFKQorLyoKKyAqIEZsdXNoIE1NVSBUTEIsIGJ1dCBvbmx5IG9uIHRoZSBsb2NhbCBwcm9jZXNzb3IgKG5vIGJyb2FkY2FzdCkKKyAqLworX0dMT0JBTChfdGxiaWxfYWxsKQorI2RlZmluZSBNTVVDU1IwX1RMQkZJCShNTVVDU1IwX1RMQjBGSSB8IE1NVUNTUjBfVExCMUZJIHwgXAorCQkJIE1NVUNTUjBfVExCMkZJIHwgTU1VQ1NSMF9UTEIzRkkpCisJbGkJcjMsKE1NVUNTUjBfVExCRkkpQGwKKwltdHNwcglTUFJOX01NVUNTUjAsIHIzCisxOgorCW1mc3ByCXIzLFNQUk5fTU1VQ1NSMAorCWFuZGkuCXIzLHIzLE1NVUNTUjBfVExCRklAbAorCWJuZQkxYgorCWJscgorCisvKgorICogRmx1c2ggTU1VIFRMQiBmb3IgYSBwYXJ0aWN1bGFyIHByb2Nlc3MgaWQsIGJ1dCBvbmx5IG9uIHRoZSBsb2NhbCBwcm9jZXNzb3IKKyAqIChubyBicm9hZGNhc3QpCisgKi8KK19HTE9CQUwoX3RsYmlsX3BpZCkKKy8qIHdlIGN1cnJlbnRseSBkbyBhbiBpbnZhbGlkYXRlIGFsbCBzaW5jZSB3ZSBkb24ndCBoYXZlIHBlciBwaWQgaW52YWxpZGF0ZSAqLworCWxpCXIzLChNTVVDU1IwX1RMQkZJKUBsCisJbXRzcHIJU1BSTl9NTVVDU1IwLCByMworMToKKwltZnNwcglyMyxTUFJOX01NVUNTUjAKKwlhbmRpLglyMyxyMyxNTVVDU1IwX1RMQkZJQGwKKwlibmUJMWIKKwlibHIKKworLyoKKyAqIEZsdXNoIE1NVSBUTEIgZm9yIGEgcGFydGljdWxhciBhZGRyZXNzLCBidXQgb25seSBvbiB0aGUgbG9jYWwgcHJvY2Vzc29yCisgKiAobm8gYnJvYWRjYXN0KQorICovCitfR0xPQkFMKF90bGJpbF92YSkKKwlzbHdpCXI0LHI0LDE2CisJbXRzcHIJU1BSTl9NQVM2LHI0CQkvKiBhc3N1bWUgQVM9MCBmb3Igbm93ICovCisJdGxic3gJMCxyMworCW1mc3ByCXI0LFNQUk5fTUFTMQkJLyogY2hlY2sgdmFsaWQgKi8KKwlhbmRpcy4JcjMscjQsTUFTMV9WQUxJREBoCisJYmVxbHIKKwlybHdpbm0JcjQscjQsMCwxLDMxCisJbXRzcHIJU1BSTl9NQVMxLHI0CisJdGxid2UKKwlibHIKKyNlbmRpZiAvKiBDT05GSUdfRlNMX0JPT0tFICovCisKKwogLyoKICAqIEZsdXNoIGluc3RydWN0aW9uIGNhY2hlLgogICogVGhpcyBpcyBhIG5vLW9wIG9uIHRoZSA2MDEuCkBAIC04NDYsOCArOTAwLDEwIEBACiAJbGkJcjQsMAkJLyogbmV3IHNwICh1bnVzZWQpICovCiAJbGkJcjAsX19OUl9jbG9uZQogCXNjCi0JY21wd2kJMCxyMywwCQkvKiBwYXJlbnQgb3IgY2hpbGQ/ICovCi0JYm5lCTFmCQkvKiByZXR1cm4gaWYgcGFyZW50ICovCisJYm5zKwkxZgkJLyogZGlkIHN5c3RlbSBjYWxsIGluZGljYXRlIGVycm9yPyAqLworCW5lZwlyMyxyMwkJLyogaWYgc28sIG1ha2UgcmV0dXJuIGNvZGUgbmVnYXRpdmUgKi8KKzE6CWNtcHdpCTAscjMsMAkJLyogcGFyZW50IG9yIGNoaWxkPyAqLworCWJuZQkyZgkJLyogcmV0dXJuIGlmIHBhcmVudCAqLwogCWxpCXIwLDAJCS8qIG1ha2UgdG9wLWxldmVsIHN0YWNrIGZyYW1lICovCiAJc3R3dQlyMCwtMTYocjEpCiAJbXRscglyMzAJCS8qIGZuIGFkZHIgaW4gbHIgKi8KQEAgLTg1Nyw3ICs5MTMsNyBAQAogCWxpCXIwLF9fTlJfZXhpdAkvKiBleGl0IGlmIGZ1bmN0aW9uIHJldHVybnMgKi8KIAlsaQlyMywwCiAJc2MKLTE6CWx3eglyMzAsOChyMSkKKzI6CWx3eglyMzAsOChyMSkKIAlsd3oJcjMxLDEyKHIxKQogCWFkZGkJcjEscjEsMTYKIAlibHIKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvbWlzY182NC5TIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9taXNjXzY0LlMKaW5kZXggNGRkNzBjZi4uMzA1M2ZlNSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9taXNjXzY0LlMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9taXNjXzY0LlMKQEAgLTQyNiw4ICs0MjYsMTAgQEAKIAlsaQlyNCwwCQkvKiBuZXcgc3AgKHVudXNlZCkgKi8KIAlsaQlyMCxfX05SX2Nsb25lCiAJc2MKLQljbXBkaQkwLHIzLDAJCS8qIHBhcmVudCBvciBjaGlsZD8gKi8KLQlibmUJMWYJCS8qIHJldHVybiBpZiBwYXJlbnQgKi8KKwlibnMrCTFmCQkvKiBkaWQgc3lzdGVtIGNhbGwgaW5kaWNhdGUgZXJyb3I/ICovCisJbmVnCXIzLHIzCQkvKiBpZiBzbywgbWFrZSByZXR1cm4gY29kZSBuZWdhdGl2ZSAqLworMToJY21wZGkJMCxyMywwCQkvKiBwYXJlbnQgb3IgY2hpbGQ/ICovCisJYm5lCTJmCQkvKiByZXR1cm4gaWYgcGFyZW50ICovCiAJbGkJcjAsMAogCXN0ZHUJcjAsLVNUQUNLX0ZSQU1FX09WRVJIRUFEKHIxKQogCWxkCXIyLDgocjI5KQpAQCAtNDM4LDcgKzQ0MCw3IEBACiAJbGkJcjAsX19OUl9leGl0CS8qIGV4aXQgYWZ0ZXIgY2hpbGQgZXhpdHMgKi8KICAgICAgICAgbGkJcjMsMAogCXNjCi0xOglhZGRpCXIxLHIxLFNUQUNLX0ZSQU1FX09WRVJIRUFECQorMjoJYWRkaQlyMSxyMSxTVEFDS19GUkFNRV9PVkVSSEVBRAogCWxkCXIyOSwtMjQocjEpCiAJbGQJcjMwLC0xNihyMSkKIAlibHIKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvb2ZfZGV2aWNlLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL29mX2RldmljZS5jCmluZGV4IGU5YmU5MDguLjkzYWU1YjEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvb2ZfZGV2aWNlLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9vZl9kZXZpY2UuYwpAQCAtNzgsNyArNzgsNyBAQAogCWRldi0+ZGV2LnBhcmVudCA9IHBhcmVudDsKIAlkZXYtPmRldi5yZWxlYXNlID0gb2ZfcmVsZWFzZV9kZXY7CiAJZGV2LT5kZXYuYXJjaGRhdGEub2Zfbm9kZSA9IG5wOwotCWRldi0+ZGV2LmFyY2hkYXRhLm51bWFfbm9kZSA9IG9mX25vZGVfdG9fbmlkKG5wKTsKKwlzZXRfZGV2X25vZGUoJmRldi0+ZGV2LCBvZl9ub2RlX3RvX25pZChucCkpOwogCiAJaWYgKGJ1c19pZCkKIAkJc3RybGNweShkZXYtPmRldi5idXNfaWQsIGJ1c19pZCwgQlVTX0lEX1NJWkUpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9wYWNhLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3BhY2EuYwppbmRleCBjOWJmMTdlLi40OGEzNDcxIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3BhY2EuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3BhY2EuYwpAQCAtMTIsNiArMTIsNyBAQAogCiAjaW5jbHVkZSA8YXNtL2xwcGFjYS5oPgogI2luY2x1ZGUgPGFzbS9wYWNhLmg+CisjaW5jbHVkZSA8YXNtL3NlY3Rpb25zLmg+CiAKIC8qIFRoaXMgc3ltYm9sIGlzIHByb3ZpZGVkIGJ5IHRoZSBsaW5rZXIgLSBsZXQgaXQgZmlsbCBpbiB0aGUgcGFjYQogICogZmllbGQgY29ycmVjdGx5ICovCkBAIC03OSw2ICs4MCw4IEBACiAJCW5ld19wYWNhLT5sb2NrX3Rva2VuID0gMHg4MDAwOwogCQluZXdfcGFjYS0+cGFjYV9pbmRleCA9IGNwdTsKIAkJbmV3X3BhY2EtPmtlcm5lbF90b2MgPSBrZXJuZWxfdG9jOworCQluZXdfcGFjYS0+a2VybmVsYmFzZSA9ICh1bnNpZ25lZCBsb25nKSBfc3RleHQ7CisJCW5ld19wYWNhLT5rZXJuZWxfbXNyID0gTVNSX0tFUk5FTDsKIAkJbmV3X3BhY2EtPmh3X2NwdV9pZCA9IDB4ZmZmZjsKIAkJbmV3X3BhY2EtPnNsYl9zaGFkb3dfcHRyID0gJnNsYl9zaGFkb3dbY3B1XTsKIAkJbmV3X3BhY2EtPl9fY3VycmVudCA9ICZpbml0X3Rhc2s7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3BjaS1jb21tb24uYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcGNpLWNvbW1vbi5jCmluZGV4IGVhMGM2MWUuLjAxY2U4YzMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcGNpLWNvbW1vbi5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcGNpLWNvbW1vbi5jCkBAIC01Niw2ICs1NiwzNCBAQAogLyogRGVmYXVsdCBQQ0kgZmxhZ3MgaXMgMCAqLwogdW5zaWduZWQgaW50IHBwY19wY2lfZmxhZ3M7CiAKK3N0YXRpYyBzdHJ1Y3QgZG1hX21hcHBpbmdfb3BzICpwY2lfZG1hX29wczsKKwordm9pZCBzZXRfcGNpX2RtYV9vcHMoc3RydWN0IGRtYV9tYXBwaW5nX29wcyAqZG1hX29wcykKK3sKKwlwY2lfZG1hX29wcyA9IGRtYV9vcHM7Cit9CisKK3N0cnVjdCBkbWFfbWFwcGluZ19vcHMgKmdldF9wY2lfZG1hX29wcyh2b2lkKQoreworCXJldHVybiBwY2lfZG1hX29wczsKK30KK0VYUE9SVF9TWU1CT0woZ2V0X3BjaV9kbWFfb3BzKTsKKworaW50IHBjaV9zZXRfZG1hX21hc2soc3RydWN0IHBjaV9kZXYgKmRldiwgdTY0IG1hc2spCit7CisJcmV0dXJuIGRtYV9zZXRfbWFzaygmZGV2LT5kZXYsIG1hc2spOworfQorCitpbnQgcGNpX3NldF9jb25zaXN0ZW50X2RtYV9tYXNrKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHU2NCBtYXNrKQoreworCWludCByYzsKKworCXJjID0gZG1hX3NldF9tYXNrKCZkZXYtPmRldiwgbWFzayk7CisJZGV2LT5kZXYuY29oZXJlbnRfZG1hX21hc2sgPSBkZXYtPmRtYV9tYXNrOworCisJcmV0dXJuIHJjOworfQorCiBzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgKnBjaWJpb3NfYWxsb2NfY29udHJvbGxlcihzdHJ1Y3QgZGV2aWNlX25vZGUgKmRldikKIHsKIAlzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgKnBoYjsKQEAgLTE4MCw2ICsyMDgsMjYgQEAKIAlyZXR1cm4gc3RyOwogfQogCit2b2lkIF9fZGV2aW5pdCBwY2liaW9zX3NldHVwX25ld19kZXZpY2Uoc3RydWN0IHBjaV9kZXYgKmRldikKK3sKKwlzdHJ1Y3QgZGV2X2FyY2hkYXRhICpzZCA9ICZkZXYtPmRldi5hcmNoZGF0YTsKKworCXNkLT5vZl9ub2RlID0gcGNpX2RldmljZV90b19PRl9ub2RlKGRldik7CisKKwlEQkcoIlBDSTogZGV2aWNlICVzIE9GIG5vZGU6ICVzXG4iLCBwY2lfbmFtZShkZXYpLAorCSAgICBzZC0+b2Zfbm9kZSA/IHNkLT5vZl9ub2RlLT5mdWxsX25hbWUgOiAiPG5vbmU+Iik7CisKKwlzZC0+ZG1hX29wcyA9IHBjaV9kbWFfb3BzOworI2lmZGVmIENPTkZJR19QUEMzMgorCXNkLT5kbWFfZGF0YSA9ICh2b2lkICopUENJX0RSQU1fT0ZGU0VUOworI2VuZGlmCisJc2V0X2Rldl9ub2RlKCZkZXYtPmRldiwgcGNpYnVzX3RvX25vZGUoZGV2LT5idXMpKTsKKworCWlmIChwcGNfbWQucGNpX2RtYV9kZXZfc2V0dXApCisJCXBwY19tZC5wY2lfZG1hX2Rldl9zZXR1cChkZXYpOworfQorRVhQT1JUX1NZTUJPTChwY2liaW9zX3NldHVwX25ld19kZXZpY2UpOworCiAvKgogICogUmVhZHMgdGhlIGludGVycnVwdCBwaW4gdG8gZGV0ZXJtaW5lIGlmIGludGVycnVwdCBpcyB1c2UgYnkgY2FyZC4KICAqIElmIHRoZSBpbnRlcnJ1cHQgaXMgdXNlZCwgdGhlbiBnZXRzIHRoZSBpbnRlcnJ1cHQgbGluZSBmcm9tIHRoZQpAQCAtMzcxLDcgKzQxOSw3IEBACiAJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBOVUxMOwogCXN0cnVjdCByZXNvdXJjZSAqZm91bmQgPSBOVUxMOwogCXVuc2lnbmVkIGxvbmcgcHJvdCA9IHBncHJvdF92YWwocHJvdGVjdGlvbik7Ci0JdW5zaWduZWQgbG9uZyBvZmZzZXQgPSBwZm4gPDwgUEFHRV9TSElGVDsKKwlyZXNvdXJjZV9zaXplX3Qgb2Zmc2V0ID0gKChyZXNvdXJjZV9zaXplX3QpcGZuKSA8PCBQQUdFX1NISUZUOwogCWludCBpOwogCiAJaWYgKHBhZ2VfaXNfcmFtKHBmbikpCkBAIC00MjIsNyArNDcwLDggQEAKIGludCBwY2lfbW1hcF9wYWdlX3JhbmdlKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAogCQkJZW51bSBwY2lfbW1hcF9zdGF0ZSBtbWFwX3N0YXRlLCBpbnQgd3JpdGVfY29tYmluZSkKIHsKLQlyZXNvdXJjZV9zaXplX3Qgb2Zmc2V0ID0gdm1hLT52bV9wZ29mZiA8PCBQQUdFX1NISUZUOworCXJlc291cmNlX3NpemVfdCBvZmZzZXQgPQorCQkoKHJlc291cmNlX3NpemVfdCl2bWEtPnZtX3Bnb2ZmKSA8PCBQQUdFX1NISUZUOwogCXN0cnVjdCByZXNvdXJjZSAqcnA7CiAJaW50IHJldDsKIApAQCAtNzMxLDExICs3ODAsNiBAQAogCiAJcmVzLT5zdGFydCA9IChyZXMtPnN0YXJ0ICsgb2Zmc2V0KSAmIG1hc2s7CiAJcmVzLT5lbmQgPSAocmVzLT5lbmQgKyBvZmZzZXQpICYgbWFzazsKLQotCXByX2RlYnVnKCJQQ0k6JXMgICAgICAgICAgICAlMDE2bGx4LSUwMTZsbHhcbiIsCi0JCSBwY2lfbmFtZShkZXYpLAotCQkgKHVuc2lnbmVkIGxvbmcgbG9uZylyZXMtPnN0YXJ0LAotCQkgKHVuc2lnbmVkIGxvbmcgbG9uZylyZXMtPmVuZCk7CiB9CiAKIApAQCAtNzgxLDYgKzgyNSwxMSBAQAogCQkJICh1bnNpZ25lZCBpbnQpcmVzLT5mbGFncyk7CiAKIAkJZml4dXBfcmVzb3VyY2UocmVzLCBkZXYpOworCisJCXByX2RlYnVnKCJQQ0k6JXMgICAgICAgICAgICAlMDE2bGx4LSUwMTZsbHhcbiIsCisJCQkgcGNpX25hbWUoZGV2KSwKKwkJCSAodW5zaWduZWQgbG9uZyBsb25nKXJlcy0+c3RhcnQsCisJCQkgKHVuc2lnbmVkIGxvbmcgbG9uZylyZXMtPmVuZCk7CiAJfQogCiAJLyogQ2FsbCBtYWNoaW5lIHNwZWNpZmljIHJlc291cmNlIGZpeHVwICovCkBAIC03ODksNTggKzgzOCwxMjcgQEAKIH0KIERFQ0xBUkVfUENJX0ZJWFVQX0hFQURFUihQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCBwY2liaW9zX2ZpeHVwX3Jlc291cmNlcyk7CiAKLXN0YXRpYyB2b2lkIF9fZGV2aW5pdCBfX3BjaWJpb3NfZml4dXBfYnVzKHN0cnVjdCBwY2lfYnVzICpidXMpCisvKiBUaGlzIGZ1bmN0aW9uIHRyaWVzIHRvIGZpZ3VyZSBvdXQgaWYgYSBicmlkZ2UgcmVzb3VyY2UgaGFzIGJlZW4gaW5pdGlhbGl6ZWQKKyAqIGJ5IHRoZSBmaXJtd2FyZSBvciBub3QuIEl0IGRvZXNuJ3QgaGF2ZSB0byBiZSBhYnNvbHV0ZWx5IGJ1bGxldCBwcm9vZiwgYnV0CisgKiB0aGluZ3MgZ28gbW9yZSBzbW9vdGhseSB3aGVuIGl0IGdldHMgaXQgcmlnaHQuIEl0IHNob3VsZCBjb3ZlcnMgY2FzZXMgc3VjaAorICogYXMgQXBwbGUgImNsb3NlZCIgYnJpZGdlIHJlc291cmNlcyBhbmQgYmFyZS1tZXRhbCBwU2VyaWVzIHVuYXNzaWduZWQgYnJpZGdlcworICovCitzdGF0aWMgaW50IF9fZGV2aW5pdCBwY2liaW9zX3VuaW5pdGlhbGl6ZWRfYnJpZGdlX3Jlc291cmNlKHN0cnVjdCBwY2lfYnVzICpidXMsCisJCQkJCQkJICAgc3RydWN0IHJlc291cmNlICpyZXMpCiB7CiAJc3RydWN0IHBjaV9jb250cm9sbGVyICpob3NlID0gcGNpX2J1c190b19ob3N0KGJ1cyk7CiAJc3RydWN0IHBjaV9kZXYgKmRldiA9IGJ1cy0+c2VsZjsKKwlyZXNvdXJjZV9zaXplX3Qgb2Zmc2V0OworCXUxNiBjb21tYW5kOworCWludCBpOworCisJLyogV2UgZG9uJ3QgZG8gYW55dGhpbmcgaWYgUENJX1BST0JFX09OTFkgaXMgc2V0ICovCisJaWYgKHBwY19wY2lfZmxhZ3MgJiBQUENfUENJX1BST0JFX09OTFkpCisJCXJldHVybiAwOworCisJLyogSm9iIGlzIGEgYml0IGRpZmZlcmVudCBiZXR3ZWVuIG1lbW9yeSBhbmQgSU8gKi8KKwlpZiAocmVzLT5mbGFncyAmIElPUkVTT1VSQ0VfTUVNKSB7CisJCS8qIElmIHRoZSBCQVIgaXMgbm9uLTAgKHJlcyAhPSBwY2lfbWVtX29mZnNldCkgdGhlbiBpdCdzIHByb2JhYmx5IGJlZW4KKwkJICogaW5pdGlhbGl6ZWQgYnkgc29tZWJvZHkKKwkJICovCisJCWlmIChyZXMtPnN0YXJ0ICE9IGhvc2UtPnBjaV9tZW1fb2Zmc2V0KQorCQkJcmV0dXJuIDA7CisKKwkJLyogVGhlIEJBUiBpcyAwLCBsZXQncyBjaGVjayBpZiBtZW1vcnkgZGVjb2RpbmcgaXMgZW5hYmxlZCBvbgorCQkgKiB0aGUgYnJpZGdlLiBJZiBub3QsIHdlIGNvbnNpZGVyIGl0IHVuYXNzaWduZWQKKwkJICovCisJCXBjaV9yZWFkX2NvbmZpZ193b3JkKGRldiwgUENJX0NPTU1BTkQsICZjb21tYW5kKTsKKwkJaWYgKChjb21tYW5kICYgUENJX0NPTU1BTkRfTUVNT1JZKSA9PSAwKQorCQkJcmV0dXJuIDE7CisKKwkJLyogTWVtb3J5IGRlY29kaW5nIGlzIGVuYWJsZWQgYW5kIHRoZSBCQVIgaXMgMC4gSWYgYW55IG9mIHRoZSBicmlkZ2UKKwkJICogcmVzb3VyY2VzIGNvdmVycyB0aGF0IHN0YXJ0aW5nIGFkZHJlc3MgKDAgdGhlbiBpdCdzIGdvb2QgZW5vdWdoIGZvcgorCQkgKiB1cyBmb3IgbWVtb3J5CisJCSAqLworCQlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKSB7CisJCQlpZiAoKGhvc2UtPm1lbV9yZXNvdXJjZXNbaV0uZmxhZ3MgJiBJT1JFU09VUkNFX01FTSkgJiYKKwkJCSAgICBob3NlLT5tZW1fcmVzb3VyY2VzW2ldLnN0YXJ0ID09IGhvc2UtPnBjaV9tZW1fb2Zmc2V0KQorCQkJCXJldHVybiAwOworCQl9CisKKwkJLyogV2VsbCwgaXQgc3RhcnRzIGF0IDAgYW5kIHdlIGtub3cgaXQgd2lsbCBjb2xsaWRlIHNvIHdlIG1heSBhcworCQkgKiB3ZWxsIGNvbnNpZGVyIGl0IGFzIHVuYXNzaWduZWQuIFRoYXQgY292ZXJzIHRoZSBBcHBsZSBjYXNlLgorCQkgKi8KKwkJcmV0dXJuIDE7CisJfSBlbHNlIHsKKwkJLyogSWYgdGhlIEJBUiBpcyBub24tMCwgdGhlbiB3ZSBjb25zaWRlciBpdCBhc3NpZ25lZCAqLworCQlvZmZzZXQgPSAodW5zaWduZWQgbG9uZylob3NlLT5pb19iYXNlX3ZpcnQgLSBfSU9fQkFTRTsKKwkJaWYgKCgocmVzLT5zdGFydCAtIG9mZnNldCkgJiAweGZmZmZmZmZmdWwpICE9IDApCisJCQlyZXR1cm4gMDsKKworCQkvKiBIZXJlLCB3ZSBhcmUgYSBiaXQgZGlmZmVyZW50IHRoYW4gbWVtb3J5IGFzIHR5cGljYWxseSBJTyBzcGFjZQorCQkgKiBzdGFydGluZyBhdCBsb3cgYWRkcmVzc2VzIC1pcy0gdmFsaWQuIFdoYXQgd2UgZG8gaW5zdGVhZCBpZiB0aGF0CisJCSAqIHdlIGNvbnNpZGVyIGFzIHVuYXNzaWduZWQgYW55dGhpbmcgdGhhdCBkb2Vzbid0IGhhdmUgSU8gZW5hYmxlZAorCQkgKiBpbiB0aGUgUENJIGNvbW1hbmQgcmVnaXN0ZXIsIGFuZCB0aGF0J3MgaXQuCisJCSAqLworCQlwY2lfcmVhZF9jb25maWdfd29yZChkZXYsIFBDSV9DT01NQU5ELCAmY29tbWFuZCk7CisJCWlmIChjb21tYW5kICYgUENJX0NPTU1BTkRfSU8pCisJCQlyZXR1cm4gMDsKKworCQkvKiBJdCdzIHN0YXJ0aW5nIGF0IDAgYW5kIElPIGlzIGRpc2FibGVkIGluIHRoZSBicmlkZ2UsIGNvbnNpZGVyCisJCSAqIGl0IHVuYXNzaWduZWQKKwkJICovCisJCXJldHVybiAxOworCX0KK30KKworLyogRml4dXAgcmVzb3VyY2VzIG9mIGEgUENJPC0+UENJIGJyaWRnZSAqLworc3RhdGljIHZvaWQgX19kZXZpbml0IHBjaWJpb3NfZml4dXBfYnJpZGdlKHN0cnVjdCBwY2lfYnVzICpidXMpCit7CisJc3RydWN0IHJlc291cmNlICpyZXM7CisJaW50IGk7CisKKwlzdHJ1Y3QgcGNpX2RldiAqZGV2ID0gYnVzLT5zZWxmOworCisJZm9yIChpID0gMDsgaSA8IFBDSV9CVVNfTlVNX1JFU09VUkNFUzsgKytpKSB7CisJCWlmICgocmVzID0gYnVzLT5yZXNvdXJjZVtpXSkgPT0gTlVMTCkKKwkJCWNvbnRpbnVlOworCQlpZiAoIXJlcy0+ZmxhZ3MpCisJCQljb250aW51ZTsKKwkJaWYgKGkgPj0gMyAmJiBidXMtPnNlbGYtPnRyYW5zcGFyZW50KQorCQkJY29udGludWU7CisKKwkJcHJfZGVidWcoIlBDSTolcyBCdXMgcnNyYyAlZCAlMDE2bGx4LSUwMTZsbHggWyV4XSBmaXh1cC4uLlxuIiwKKwkJCSBwY2lfbmFtZShkZXYpLCBpLAorCQkJICh1bnNpZ25lZCBsb25nIGxvbmcpcmVzLT5zdGFydCxcCisJCQkgKHVuc2lnbmVkIGxvbmcgbG9uZylyZXMtPmVuZCwKKwkJCSAodW5zaWduZWQgaW50KXJlcy0+ZmxhZ3MpOworCisJCS8qIFBlcmZvcm0gZml4dXAgKi8KKwkJZml4dXBfcmVzb3VyY2UocmVzLCBkZXYpOworCisJCS8qIFRyeSB0byBkZXRlY3QgdW5pbml0aWFsaXplZCBQMlAgYnJpZGdlIHJlc291cmNlcywKKwkJICogYW5kIGNsZWFyIHRoZW0gb3V0IHNvIHRoZXkgZ2V0IHJlLWFzc2lnbmVkIGxhdGVyCisJCSAqLworCQlpZiAocGNpYmlvc191bmluaXRpYWxpemVkX2JyaWRnZV9yZXNvdXJjZShidXMsIHJlcykpIHsKKwkJCXJlcy0+ZmxhZ3MgPSAwOworCQkJcHJfZGVidWcoIlBDSTolcyAgICAgICAgICAgICh1bmFzc2lnbmVkKVxuIiwgcGNpX25hbWUoZGV2KSk7CisJCX0gZWxzZSB7CisKKwkJCXByX2RlYnVnKCJQQ0k6JXMgICAgICAgICAgICAlMDE2bGx4LSUwMTZsbHhcbiIsCisJCQkJIHBjaV9uYW1lKGRldiksCisJCQkJICh1bnNpZ25lZCBsb25nIGxvbmcpcmVzLT5zdGFydCwKKwkJCQkgKHVuc2lnbmVkIGxvbmcgbG9uZylyZXMtPmVuZCk7CisJCX0KKwl9Cit9CisKK3N0YXRpYyB2b2lkIF9fZGV2aW5pdCBfX3BjaWJpb3NfZml4dXBfYnVzKHN0cnVjdCBwY2lfYnVzICpidXMpCit7CisJc3RydWN0IHBjaV9kZXYgKmRldiA9IGJ1cy0+c2VsZjsKIAogCXByX2RlYnVnKCJQQ0k6IEZpeHVwIGJ1cyAlZCAoJXMpXG4iLCBidXMtPm51bWJlciwgZGV2ID8gcGNpX25hbWUoZGV2KSA6ICJQSEIiKTsKIAogCS8qIEZpeHVwIFBDSTwtPlBDSSBicmlkZ2VzLiBIb3N0IGJyaWRnZXMgYXJlIGhhbmRsZWQgc2VwYXJhdGVseSwgZm9yCiAJICogbm93IGRpZmZlcmVudGx5IGJldHdlZW4gMzIgYW5kIDY0IGJpdHMuCiAJICovCi0JaWYgKGRldiAhPSBOVUxMKSB7Ci0JCXN0cnVjdCByZXNvdXJjZSAqcmVzOwotCQlpbnQgaTsKLQotCQlmb3IgKGkgPSAwOyBpIDwgUENJX0JVU19OVU1fUkVTT1VSQ0VTOyArK2kpIHsKLQkJCWlmICgocmVzID0gYnVzLT5yZXNvdXJjZVtpXSkgPT0gTlVMTCkKLQkJCQljb250aW51ZTsKLQkJCWlmICghcmVzLT5mbGFncykKLQkJCQljb250aW51ZTsKLQkJCWlmIChpID49IDMgJiYgYnVzLT5zZWxmLT50cmFuc3BhcmVudCkKLQkJCQljb250aW51ZTsKLQkJCS8qIE9uIFBvd2VyTWFjLCBBcHBsZSBsZWF2ZXMgYnJpZGdlIHdpbmRvd3Mgb3BlbiBvdmVyCi0JCQkgKiBhbiBpbmFjY2Vzc2libGUgcmVnaW9uIG9mIG1lbW9yeSBzcGFjZSAoMC4uLmZmZmZmKQotCQkJICogd2hpY2ggaXMgc29tZXdoYXQgYm9ndXMsIGJ1dCB0aGF0J3Mgd2hhdCB0aGV5IHRoaW5rCi0JCQkgKiBtZWFucyBkaXNhYmxlZC4uLgotCQkJICoKLQkJCSAqIFdlIGNsZWFyIHRob3NlIHRvIGZvcmNlIHRoZW0gdG8gYmUgcmVhbGxvY2F0ZWQgbGF0ZXIKLQkJCSAqCi0JCQkgKiBXZSBkZXRlY3Qgc3VjaCByZWdpb25zIGJ5IHRoZSBmYWN0IHRoYXQgdGhlIGJhc2UgaXMKLQkJCSAqIGVxdWFsIHRvIHRoZSBwY2lfbWVtX29mZnNldCBvZiB0aGUgaG9zdCBicmlkZ2UgYW5kCi0JCQkgKiB0aGVpciBzaXplIGlzIHNtYWxsZXIgdGhhbiAxTS4KLQkJCSAqLwotCQkJaWYgKHJlcy0+ZmxhZ3MgJiBJT1JFU09VUkNFX01FTSAmJgotCQkJICAgIHJlcy0+c3RhcnQgPT0gaG9zZS0+cGNpX21lbV9vZmZzZXQgJiYKLQkJCSAgICByZXMtPmVuZCA8IDB4MTAwMDAwKSB7Ci0JCQkJcHJpbnRrKEtFUk5fSU5GTwotCQkJCSAgICAgICAiUENJOiBDbG9zaW5nIGJvZ3VzIEFwcGxlIEZpcm13YXJlIgotCQkJCSAgICAgICAiIHJlZ2lvbiAlZCBvbiBidXMgMHglMDJ4XG4iLAotCQkJCSAgICAgICBpLCBidXMtPm51bWJlcik7Ci0JCQkJcmVzLT5mbGFncyA9IDA7Ci0JCQkJY29udGludWU7Ci0JCQl9Ci0KLQkJCXByX2RlYnVnKCJQQ0k6JXMgQnVzIHJzcmMgJWQgJTAxNmxseC0lMDE2bGx4IFsleF0gZml4dXAuLi5cbiIsCi0JCQkJIHBjaV9uYW1lKGRldiksIGksCi0JCQkJICh1bnNpZ25lZCBsb25nIGxvbmcpcmVzLT5zdGFydCxcCi0JCQkJICh1bnNpZ25lZCBsb25nIGxvbmcpcmVzLT5lbmQsCi0JCQkJICh1bnNpZ25lZCBpbnQpcmVzLT5mbGFncyk7Ci0KLQkJCWZpeHVwX3Jlc291cmNlKHJlcywgZGV2KTsKLQkJfQotCX0KKwlpZiAoZGV2ICE9IE5VTEwpCisJCXBjaWJpb3NfZml4dXBfYnJpZGdlKGJ1cyk7CiAKIAkvKiBBZGRpdGlvbmFsIHNldHVwIHRoYXQgaXMgZGlmZmVyZW50IGJldHdlZW4gMzIgYW5kIDY0IGJpdHMgZm9yIG5vdyAqLwogCXBjaWJpb3NfZG9fYnVzX3NldHVwKGJ1cyk7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3BjaV8zMi5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wY2lfMzIuYwppbmRleCA4OGRiNGZmLi4xMzFiMWRmIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3BjaV8zMi5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcGNpXzMyLmMKQEAgLTUzLDEyICs1MywxOSBAQAogCiBzdGF0aWMgaW50IHBjaV9idXNfY291bnQ7CiAKKy8qIFRoaXMgd2lsbCByZW1haW4gTlVMTCBmb3Igbm93LCB1bnRpbCBpc2EtYnJpZGdlLmMgaXMgbWFkZSBjb21tb24KKyAqIHRvIGJvdGggMzItYml0IGFuZCA2NC1iaXQuCisgKi8KK3N0cnVjdCBwY2lfZGV2ICppc2FfYnJpZGdlX3BjaWRldjsKK0VYUE9SVF9TWU1CT0xfR1BMKGlzYV9icmlkZ2VfcGNpZGV2KTsKKwogc3RhdGljIHZvaWQKLWZpeHVwX2hpZGVfaG9zdF9yZXNvdXJjZV9mc2woc3RydWN0IHBjaV9kZXYqIGRldikKK2ZpeHVwX2hpZGVfaG9zdF9yZXNvdXJjZV9mc2woc3RydWN0IHBjaV9kZXYgKmRldikKIHsKIAlpbnQgaSwgY2xhc3MgPSBkZXYtPmNsYXNzID4+IDg7CiAKLQlpZiAoKGNsYXNzID09IFBDSV9DTEFTU19QUk9DRVNTT1JfUE9XRVJQQykgJiYKKwlpZiAoKGNsYXNzID09IFBDSV9DTEFTU19QUk9DRVNTT1JfUE9XRVJQQyB8fAorCSAgICAgY2xhc3MgPT0gUENJX0NMQVNTX0JSSURHRV9PVEhFUikgJiYKIAkJKGRldi0+aGRyX3R5cGUgPT0gUENJX0hFQURFUl9UWVBFX05PUk1BTCkgJiYKIAkJKGRldi0+YnVzLT5wYXJlbnQgPT0gTlVMTCkpIHsKIAkJZm9yIChpID0gMDsgaSA8IERFVklDRV9DT1VOVF9SRVNPVVJDRTsgaSsrKSB7CkBAIC00MjQsNiArNDMxLDcgQEAKIAl1bnNpZ25lZCBsb25nIGlvX29mZnNldDsKIAlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKIAlpbnQgaTsKKwlzdHJ1Y3QgcGNpX2RldiAqZGV2OwogCiAJLyogSG9va3VwIFBIQiByZXNvdXJjZXMgKi8KIAlpb19vZmZzZXQgPSAodW5zaWduZWQgbG9uZylob3NlLT5pb19iYXNlX3ZpcnQgLSBpc2FfaW9fYmFzZTsKQEAgLTQ1Nyw2ICs0NjUsMTIgQEAKIAkJCWJ1cy0+cmVzb3VyY2VbaSsxXSA9IHJlczsKIAkJfQogCX0KKworCWlmIChwcGNfbWQucGNpX2RtYV9idXNfc2V0dXApCisJCXBwY19tZC5wY2lfZG1hX2J1c19zZXR1cChidXMpOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShkZXYsICZidXMtPmRldmljZXMsIGJ1c19saXN0KQorCQlwY2liaW9zX3NldHVwX25ld19kZXZpY2UoZGV2KTsKIH0KIAogLyogdGhlIG5leHQgb25lIGlzIHN0b2xlbiBmcm9tIHRoZSBhbHBoYSBwb3J0Li4uICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3BjaV82NC5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wY2lfNjQuYwppbmRleCAzMGVlZGZjLi44MjQ3Y2ZmIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3BjaV82NC5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcGNpXzY0LmMKQEAgLTUyLDM1ICs1Miw2IEBACiAKIExJU1RfSEVBRChob3NlX2xpc3QpOwogCi1zdGF0aWMgc3RydWN0IGRtYV9tYXBwaW5nX29wcyAqcGNpX2RtYV9vcHM7Ci0KLXZvaWQgc2V0X3BjaV9kbWFfb3BzKHN0cnVjdCBkbWFfbWFwcGluZ19vcHMgKmRtYV9vcHMpCi17Ci0JcGNpX2RtYV9vcHMgPSBkbWFfb3BzOwotfQotCi1zdHJ1Y3QgZG1hX21hcHBpbmdfb3BzICpnZXRfcGNpX2RtYV9vcHModm9pZCkKLXsKLQlyZXR1cm4gcGNpX2RtYV9vcHM7Ci19Ci1FWFBPUlRfU1lNQk9MKGdldF9wY2lfZG1hX29wcyk7Ci0KLQotaW50IHBjaV9zZXRfZG1hX21hc2soc3RydWN0IHBjaV9kZXYgKmRldiwgdTY0IG1hc2spCi17Ci0JcmV0dXJuIGRtYV9zZXRfbWFzaygmZGV2LT5kZXYsIG1hc2spOwotfQotCi1pbnQgcGNpX3NldF9jb25zaXN0ZW50X2RtYV9tYXNrKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHU2NCBtYXNrKQotewotCWludCByYzsKLQotCXJjID0gZG1hX3NldF9tYXNrKCZkZXYtPmRldiwgbWFzayk7Ci0JZGV2LT5kZXYuY29oZXJlbnRfZG1hX21hc2sgPSBkZXYtPmRtYV9tYXNrOwotCi0JcmV0dXJuIHJjOwotfQotCiBzdGF0aWMgdm9pZCBmaXh1cF9icm9rZW5fcGNuZXQzMihzdHJ1Y3QgcGNpX2RldiogZGV2KQogewogCWlmICgoZGV2LT5jbGFzcz4+OCA9PSBQQ0lfQ0xBU1NfTkVUV09SS19FVEhFUk5FVCkpIHsKQEAgLTU0OCwyNiArNTE5LDYgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHBjaWJpb3NfbWFwX2lvX3NwYWNlKTsKIAotdm9pZCBfX2RldmluaXQgcGNpYmlvc19zZXR1cF9uZXdfZGV2aWNlKHN0cnVjdCBwY2lfZGV2ICpkZXYpCi17Ci0Jc3RydWN0IGRldl9hcmNoZGF0YSAqc2QgPSAmZGV2LT5kZXYuYXJjaGRhdGE7Ci0KLQlzZC0+b2Zfbm9kZSA9IHBjaV9kZXZpY2VfdG9fT0Zfbm9kZShkZXYpOwotCi0JREJHKCJQQ0k6IGRldmljZSAlcyBPRiBub2RlOiAlc1xuIiwgcGNpX25hbWUoZGV2KSwKLQkgICAgc2QtPm9mX25vZGUgPyBzZC0+b2Zfbm9kZS0+ZnVsbF9uYW1lIDogIjxub25lPiIpOwotCi0Jc2QtPmRtYV9vcHMgPSBwY2lfZG1hX29wczsKLSNpZmRlZiBDT05GSUdfTlVNQQotCXNkLT5udW1hX25vZGUgPSBwY2lidXNfdG9fbm9kZShkZXYtPmJ1cyk7Ci0jZWxzZQotCXNkLT5udW1hX25vZGUgPSAtMTsKLSNlbmRpZgotCWlmIChwcGNfbWQucGNpX2RtYV9kZXZfc2V0dXApCi0JCXBwY19tZC5wY2lfZG1hX2Rldl9zZXR1cChkZXYpOwotfQotRVhQT1JUX1NZTUJPTChwY2liaW9zX3NldHVwX25ld19kZXZpY2UpOwotCiB2b2lkIF9fZGV2aW5pdCBwY2liaW9zX2RvX2J1c19zZXR1cChzdHJ1Y3QgcGNpX2J1cyAqYnVzKQogewogCXN0cnVjdCBwY2lfZGV2ICpkZXY7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3BwY19rc3ltcy5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wcGNfa3N5bXMuYwppbmRleCBlMWVhNGZlLi44ZWRjMjM1IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3BwY19rc3ltcy5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHBjX2tzeW1zLmMKQEAgLTExOSw2ICsxMTksOSBAQAogRVhQT1JUX1NZTUJPTChmbHVzaF90bGJfa2VybmVsX3JhbmdlKTsKIEVYUE9SVF9TWU1CT0woZmx1c2hfdGxiX3BhZ2UpOwogRVhQT1JUX1NZTUJPTChfdGxiaWUpOworI2lmIGRlZmluZWQoQ09ORklHXzR4eCkgfHwgZGVmaW5lZChDT05GSUdfOHh4KSB8fCBkZWZpbmVkKENPTkZJR19GU0xfQk9PS0UpCitFWFBPUlRfU1lNQk9MKF90bGJpbF92YSk7CisjZW5kaWYKICNlbmRpZgogRVhQT1JUX1NZTUJPTChfX2ZsdXNoX2ljYWNoZV9yYW5nZSk7CiBFWFBPUlRfU1lNQk9MKGZsdXNoX2RjYWNoZV9yYW5nZSk7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3Byb20uYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHJvbS5jCmluZGV4IDg3ZDgzYzUuLjNhMmRjN2UgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHJvbS5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHJvbS5jCkBAIC04ODgsOSArODg4LDEwIEBACiAgKi8KIHN0YXRpYyBpbnQgX19pbml0IGVhcmx5X2luaXRfZHRfc2Nhbl9kcmNvbmZfbWVtb3J5KHVuc2lnbmVkIGxvbmcgbm9kZSkKIHsKLQljZWxsX3QgKmRtLCAqbHM7CisJY2VsbF90ICpkbSwgKmxzLCAqdXNtOwogCXVuc2lnbmVkIGxvbmcgbCwgbiwgZmxhZ3M7CiAJdTY0IGJhc2UsIHNpemUsIGxtYl9zaXplOworCXVuc2lnbmVkIGludCBpc19rZXhlY19rZHVtcCA9IDAsIHJuZ3M7CiAKIAlscyA9IChjZWxsX3QgKilvZl9nZXRfZmxhdF9kdF9wcm9wKG5vZGUsICJpYm0sbG1iLXNpemUiLCAmbCk7CiAJaWYgKGxzID09IE5VTEwgfHwgbCA8IGR0X3Jvb3Rfc2l6ZV9jZWxscyAqIHNpemVvZihjZWxsX3QpKQpAQCAtOTA1LDYgKzkwNiwxMiBAQAogCWlmIChsIDwgKG4gKiAoZHRfcm9vdF9hZGRyX2NlbGxzICsgNCkgKyAxKSAqIHNpemVvZihjZWxsX3QpKQogCQlyZXR1cm4gMDsKIAorCS8qIGNoZWNrIGlmIHRoaXMgaXMgYSBrZXhlYy9rZHVtcCBrZXJuZWwuICovCisJdXNtID0gKGNlbGxfdCAqKW9mX2dldF9mbGF0X2R0X3Byb3Aobm9kZSwgImxpbnV4LGRyY29uZi11c2FibGUtbWVtb3J5IiwKKwkJCQkJCSAmbCk7CisJaWYgKHVzbSAhPSBOVUxMKQorCQlpc19rZXhlY19rZHVtcCA9IDE7CisKIAlmb3IgKDsgbiAhPSAwOyAtLW4pIHsKIAkJYmFzZSA9IGR0X21lbV9uZXh0X2NlbGwoZHRfcm9vdF9hZGRyX2NlbGxzLCAmZG0pOwogCQlmbGFncyA9IGRtWzNdOwpAQCAtOTE1LDEzICs5MjIsMzQgQEAKIAkJaWYgKChmbGFncyAmIDB4ODApIHx8ICEoZmxhZ3MgJiAweDgpKQogCQkJY29udGludWU7CiAJCXNpemUgPSBsbWJfc2l6ZTsKLQkJaWYgKGlvbW11X2lzX29mZikgewotCQkJaWYgKGJhc2UgPj0gMHg4MDAwMDAwMHVsKQorCQlybmdzID0gMTsKKwkJaWYgKGlzX2tleGVjX2tkdW1wKSB7CisJCQkvKgorCQkJICogRm9yIGVhY2ggbG1iIGluIGlibSxkeW5hbWljLW1lbW9yeSwgYSBjb3JyZXNwb25kaW5nCisJCQkgKiBlbnRyeSBpbiBsaW51eCxkcmNvbmYtdXNhYmxlLW1lbW9yeSBwcm9wZXJ0eSBjb250YWlucworCQkJICogYSBjb3VudGVyICdwJyBmb2xsb3dlZCBieSAncCcgKGJhc2UsIHNpemUpIGR1cGxlLgorCQkJICogTm93IHJlYWQgdGhlIGNvdW50ZXIgZnJvbQorCQkJICogbGludXgsZHJjb25mLXVzYWJsZS1tZW1vcnkgcHJvcGVydHkKKwkJCSAqLworCQkJcm5ncyA9IGR0X21lbV9uZXh0X2NlbGwoZHRfcm9vdF9zaXplX2NlbGxzLCAmdXNtKTsKKwkJCWlmICghcm5ncykgLyogdGhlcmUgYXJlIG5vIChiYXNlLCBzaXplKSBkdXBsZSAqLwogCQkJCWNvbnRpbnVlOwotCQkJaWYgKChiYXNlICsgc2l6ZSkgPiAweDgwMDAwMDAwdWwpCi0JCQkJc2l6ZSA9IDB4ODAwMDAwMDB1bCAtIGJhc2U7CiAJCX0KLQkJbG1iX2FkZChiYXNlLCBzaXplKTsKKwkJZG8geworCQkJaWYgKGlzX2tleGVjX2tkdW1wKSB7CisJCQkJYmFzZSA9IGR0X21lbV9uZXh0X2NlbGwoZHRfcm9vdF9hZGRyX2NlbGxzLAorCQkJCQkJCSAmdXNtKTsKKwkJCQlzaXplID0gZHRfbWVtX25leHRfY2VsbChkdF9yb290X3NpemVfY2VsbHMsCisJCQkJCQkJICZ1c20pOworCQkJfQorCQkJaWYgKGlvbW11X2lzX29mZikgeworCQkJCWlmIChiYXNlID49IDB4ODAwMDAwMDB1bCkKKwkJCQkJY29udGludWU7CisJCQkJaWYgKChiYXNlICsgc2l6ZSkgPiAweDgwMDAwMDAwdWwpCisJCQkJCXNpemUgPSAweDgwMDAwMDAwdWwgLSBiYXNlOworCQkJfQorCQkJbG1iX2FkZChiYXNlLCBzaXplKTsKKwkJfSB3aGlsZSAoLS1ybmdzKTsKIAl9CiAJbG1iX2R1bXBfYWxsKCk7CiAJcmV0dXJuIDA7CkBAIC0xMTY0LDYgKzExOTIsOSBAQAogCiAJLyogUmVzZXJ2ZSBMTUIgcmVnaW9ucyB1c2VkIGJ5IGtlcm5lbCwgaW5pdHJkLCBkdCwgZXRjLi4uICovCiAJbG1iX3Jlc2VydmUoUEhZU0lDQUxfU1RBUlQsIF9fcGEoa2xpbWl0KSAtIFBIWVNJQ0FMX1NUQVJUKTsKKwkvKiBJZiByZWxvY2F0YWJsZSwgcmVzZXJ2ZSBmaXJzdCAzMmsgZm9yIGludGVycnVwdCB2ZWN0b3JzIGV0Yy4gKi8KKwlpZiAoUEhZU0lDQUxfU1RBUlQgPiBNRU1PUllfU1RBUlQpCisJCWxtYl9yZXNlcnZlKE1FTU9SWV9TVEFSVCwgMHg4MDAwKTsKIAlyZXNlcnZlX2tkdW1wX3RyYW1wb2xpbmUoKTsKIAlyZXNlcnZlX2NyYXNoa2VybmVsKCk7CiAJZWFybHlfcmVzZXJ2ZV9tZW0oKTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHJvbV9pbml0LmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3Byb21faW5pdC5jCmluZGV4IGI3Mjg0OWEuLjJmZGJjMTggMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHJvbV9pbml0LmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wcm9tX2luaXQuYwpAQCAtNzMyLDcgKzczMiw3IEBACiAJCQl1MzIJaWdub3JlX21lOwogCQl9IHJwYWRlc2M7CiAJfSBycGFub3RlOwotfSBmYWtlX2VsZiA9IHsKK30gZmFrZV9lbGYgX19zZWN0aW9uKC5mYWtlZWxmKSA9IHsKIAkuZWxmaGRyID0gewogCQkuZV9pZGVudCA9IHsgMHg3ZiwgJ0UnLCAnTCcsICdGJywKIAkJCSAgICAgRUxGQ0xBU1MzMiwgRUxGREFUQTJNU0IsIEVWX0NVUlJFTlQgfSwKQEAgLTc3NCwxMyArNzc0LDEzIEBACiAJCS50eXBlID0gMHgxMjc1OTk5OSwKIAkJLm5hbWUgPSAiSUJNLFJQQS1DbGllbnQtQ29uZmlnIiwKIAkJLnJwYWRlc2MgPSB7Ci0JCQkubHBhcl9hZmZpbml0eSA9IDAsCi0JCQkubWluX3Jtb19zaXplID0gNjQsCS8qIGluIG1lZ2FieXRlcyAqLworCQkJLmxwYXJfYWZmaW5pdHkgPSAxLAorCQkJLm1pbl9ybW9fc2l6ZSA9IDEyOCwJLyogaW4gbWVnYWJ5dGVzICovCiAJCQkubWluX3Jtb19wZXJjZW50ID0gMCwKLQkJCS5tYXhfcGZ0X3NpemUgPSA0OCwJLyogMl40OCBieXRlcyBtYXggUEZUIHNpemUgKi8KKwkJCS5tYXhfcGZ0X3NpemUgPSA0NiwJLyogMl40NiBieXRlcyBtYXggUEZUIHNpemUgKi8KIAkJCS5zcGxwYXIgPSAxLAogCQkJLm1pbl9sb2FkID0gfjBVLAotCQkJLm5ld19tZW1fZGVmID0gMAorCQkJLm5ld19tZW1fZGVmID0gMQogCQl9CiAJfQogfTsKQEAgLTEzMjEsNyArMTMyMSw3IEBACiAgKgogICogLS0gQ29ydAogICovCi1leHRlcm4gdm9pZCBfX3NlY29uZGFyeV9ob2xkKHZvaWQpOworZXh0ZXJuIGNoYXIgX19zZWNvbmRhcnlfaG9sZDsKIGV4dGVybiB1bnNpZ25lZCBsb25nIF9fc2Vjb25kYXJ5X2hvbGRfc3Bpbmxvb3A7CiBleHRlcm4gdW5zaWduZWQgbG9uZyBfX3NlY29uZGFyeV9ob2xkX2Fja25vd2xlZGdlOwogCkBAIC0xMzQyLDEzICsxMzQyLDcgQEAKIAkJPSAodm9pZCAqKSBMT1dfQUREUihfX3NlY29uZGFyeV9ob2xkX3NwaW5sb29wKTsKIAl1bnNpZ25lZCBsb25nICphY2tub3dsZWRnZQogCQk9ICh2b2lkICopIExPV19BRERSKF9fc2Vjb25kYXJ5X2hvbGRfYWNrbm93bGVkZ2UpOwotI2lmZGVmIENPTkZJR19QUEM2NAotCS8qIF9fc2Vjb25kYXJ5X2hvbGQgaXMgYWN0dWFsbHkgYSBkZXNjcmlwdG9yLCBub3QgdGhlIHRleHQgYWRkcmVzcyAqLwotCXVuc2lnbmVkIGxvbmcgc2Vjb25kYXJ5X2hvbGQKLQkJPSBfX3BhKCpQVFJSRUxPQygodW5zaWduZWQgbG9uZyAqKV9fc2Vjb25kYXJ5X2hvbGQpKTsKLSNlbHNlCiAJdW5zaWduZWQgbG9uZyBzZWNvbmRhcnlfaG9sZCA9IExPV19BRERSKF9fc2Vjb25kYXJ5X2hvbGQpOwotI2VuZGlmCiAKIAlwcm9tX2RlYnVnKCJwcm9tX2hvbGRfY3B1czogc3RhcnQuLi5cbiIpOwogCXByb21fZGVidWcoIiAgICAxKSBzcGlubG9vcCAgICAgICA9IDB4JXhcbiIsICh1bnNpZ25lZCBsb25nKXNwaW5sb29wKTsKQEAgLTIzMTUsMTMgKzIzMDksMTQgQEAKIAogdW5zaWduZWQgbG9uZyBfX2luaXQgcHJvbV9pbml0KHVuc2lnbmVkIGxvbmcgcjMsIHVuc2lnbmVkIGxvbmcgcjQsCiAJCQkgICAgICAgdW5zaWduZWQgbG9uZyBwcCwKLQkJCSAgICAgICB1bnNpZ25lZCBsb25nIHI2LCB1bnNpZ25lZCBsb25nIHI3KQorCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgcjYsIHVuc2lnbmVkIGxvbmcgcjcsCisJCQkgICAgICAgdW5zaWduZWQgbG9uZyBrYmFzZSkKIHsJCiAJc3RydWN0IHByb21fdCAqX3Byb207CiAJdW5zaWduZWQgbG9uZyBoZHI7Ci0JdW5zaWduZWQgbG9uZyBvZmZzZXQgPSByZWxvY19vZmZzZXQoKTsKIAogI2lmZGVmIENPTkZJR19QUEMzMgorCXVuc2lnbmVkIGxvbmcgb2Zmc2V0ID0gcmVsb2Nfb2Zmc2V0KCk7CiAJcmVsb2NfZ290MihvZmZzZXQpOwogI2VuZGlmCiAKQEAgLTIzNTUsOSArMjM1MCwxMSBAQAogCSAqLwogCVJFTE9DKG9mX3BsYXRmb3JtKSA9IHByb21fZmluZF9tYWNoaW5lX3R5cGUoKTsKIAorI2lmbmRlZiBDT05GSUdfUkVMT0NBVEFCTEUKIAkvKiBCYWlsIGlmIHRoaXMgaXMgYSBrZHVtcCBrZXJuZWwuICovCiAJaWYgKFBIWVNJQ0FMX1NUQVJUID4gMCkKIAkJcHJvbV9wYW5pYygiRXJyb3I6IFlvdSBjYW4ndCBib290IGEga2R1bXAga2VybmVsIGZyb20gT0YhXG4iKTsKKyNlbmRpZgogCiAJLyoKIAkgKiBDaGVjayBmb3IgYW4gaW5pdHJkCkBAIC0yMzc3LDcgKzIzNzQsNyBAQAogCSAqIENvcHkgdGhlIENQVSBob2xkIGNvZGUKIAkgKi8KIAlpZiAoUkVMT0Mob2ZfcGxhdGZvcm0pICE9IFBMQVRGT1JNX1BPV0VSTUFDKQotCQljb3B5X2FuZF9mbHVzaCgwLCBLRVJORUxCQVNFICsgb2Zmc2V0LCAweDEwMCwgMCk7CisJCWNvcHlfYW5kX2ZsdXNoKDAsIGtiYXNlLCAweDEwMCwgMCk7CiAKIAkvKgogCSAqIERvIGVhcmx5IHBhcnNpbmcgb2YgY29tbWFuZCBsaW5lCkBAIC0yNDgwLDcgKzI0NzcsNyBAQAogCXJlbG9jX2dvdDIoLW9mZnNldCk7CiAjZW5kaWYKIAotCV9fc3RhcnQoaGRyLCBLRVJORUxCQVNFICsgb2Zmc2V0LCAwKTsKKwlfX3N0YXJ0KGhkciwga2Jhc2UsIDApOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3JlbG9jXzY0LlMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3JlbG9jXzY0LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjQ3YTBlMQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcmVsb2NfNjQuUwpAQCAtMCwwICsxLDg3IEBACisvKgorICogQ29kZSB0byBwcm9jZXNzIGR5bmFtaWMgcmVsb2NhdGlvbnMgaW4gdGhlIGtlcm5lbC4KKyAqCisgKiBDb3B5cmlnaHQgMjAwOCBQYXVsIE1hY2tlcnJhcywgSUJNIENvcnAuCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgorICogIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2luY2x1ZGUgPGFzbS9wcGNfYXNtLmg+CisKK1JFTEEgPSA3CitSRUxBQ09VTlQgPSAweDZmZmZmZmY5CitSX1BQQzY0X1JFTEFUSVZFID0gMjIKKworLyoKKyAqIHIzID0gZGVzaXJlZCBmaW5hbCBhZGRyZXNzIG9mIGtlcm5lbAorICovCitfR0xPQkFMKHJlbG9jYXRlKQorCW1mbHIJcjAKKwliY2wJMjAsMzEsJCs0CiswOgltZmxyCXIxMgkJLyogcjEyIGhhcyBydW50aW1lIGFkZHIgb2YgbGFiZWwgMCAqLworCW10bHIJcjAKKwlsZAlyMTEsKHBfZHluIC0gMGIpKHIxMikKKwlhZGQJcjExLHIxMSxyMTIJLyogcjExIGhhcyBydW50aW1lIGFkZHIgb2YgLmR5bmFtaWMgc2VjdGlvbiAqLworCWxkCXI5LChwX3JlbGEgLSAwYikocjEyKQorCWFkZAlyOSxyOSxyMTIJLyogcjkgaGFzIHJ1bnRpbWUgYWRkciBvZiAucmVsYS5keW4gc2VjdGlvbiAqLworCWxkCXIxMCwocF9zdCAtIDBiKShyMTIpCisJYWRkCXIxMCxyMTAscjEyCS8qIHIxMCBoYXMgcnVudGltZSBhZGRyIG9mIF9zdGV4dCAqLworCisJLyoKKwkgKiBTY2FuIHRoZSBkeW5hbWljIHNlY3Rpb24gZm9yIHRoZSBSRUxBIGFuZCBSRUxBQ09VTlQgZW50cmllcy4KKwkgKi8KKwlsaQlyNywwCisJbGkJcjgsMAorMToJbGQJcjYsMChyMTEpCS8qIGdldCB0YWcgKi8KKwljbXBkaQlyNiwwCisJYmVxCTRmCQkvKiBlbmQgb2YgbGlzdCAqLworCWNtcGRpCXI2LFJFTEEKKwlibmUJMmYKKwlsZAlyNyw4KHIxMSkJLyogZ2V0IFJFTEEgcG9pbnRlciBpbiByNyAqLworCWIJM2YKKzI6CWFkZGlzCXI2LHI2LCgtUkVMQUNPVU5UKUBoYQorCWNtcGRpCXI2LFJFTEFDT1VOVEBsCisJYm5lCTNmCisJbGQJcjgsOChyMTEpCS8qIGdldCBSRUxBQ09VTlQgdmFsdWUgaW4gcjggKi8KKzM6CWFkZGkJcjExLHIxMSwxNgorCWIJMWIKKzQ6CWNtcGRpCXI3LDAJCS8qIGNoZWNrIHdlIGhhdmUgYm90aCBSRUxBIGFuZCBSRUxBQ09VTlQgKi8KKwljbXBkaQljcjEscjgsMAorCWJlcQk2ZgorCWJlcQljcjEsNmYKKworCS8qCisJICogV29yayBvdXQgbGlua3RpbWUgYWRkcmVzcyBvZiBfc3RleHQgYW5kIGhlbmNlIHRoZQorCSAqIHJlbG9jYXRpb24gb2Zmc2V0IHRvIGJlIGFwcGxpZWQuCisJICogY3VyX29mZnNldCBbcjddID0gcmVsYS5ydW4gW3I5XSAtIHJlbGEubGluayBbcjddCisJICogX3N0ZXh0LmxpbmsgW3IxMF0gPSBfc3RleHQucnVuIFtyMTBdIC0gY3VyX29mZnNldCBbcjddCisJICogZmluYWxfb2Zmc2V0IFtyM10gPSBfc3RleHQuZmluYWwgW3IzXSAtIF9zdGV4dC5saW5rIFtyMTBdCisJICovCisJc3ViZglyNyxyNyxyOQkvKiBjdXJfb2Zmc2V0ICovCisJc3ViZglyMTAscjcscjEwCisJc3ViZglyMyxyMTAscjMJLyogZmluYWxfb2Zmc2V0ICovCisKKwkvKgorCSAqIFJ1biB0aHJvdWdoIHRoZSBsaXN0IG9mIHJlbG9jYXRpb25zIGFuZCBwcm9jZXNzIHRoZQorCSAqIFJfUFBDNjRfUkVMQVRJVkUgb25lcy4KKwkgKi8KKwltdGN0cglyOAorNToJbHd6CXIwLDEyKDkpCS8qIEVMRjY0X1JfVFlQRShyZWxvYy0+cl9pbmZvKSAqLworCWNtcHdpCXIwLFJfUFBDNjRfUkVMQVRJVkUKKwlibmUJNmYKKwlsZAlyNiwwKHI5KQkvKiByZWxvYy0+cl9vZmZzZXQgKi8KKwlsZAlyMCwxNihyOSkJLyogcmVsb2MtPnJfYWRkZW5kICovCisJYWRkCXIwLHIwLHIzCisJc3RkeAlyMCxyNyxyNgorCWFkZGkJcjkscjksMjQKKwliZG56CTViCisKKzY6CWJscgorCitwX2R5bjoJLmxsb25nCV9fZHluYW1pY19zdGFydCAtIDBiCitwX3JlbGE6CS5sbG9uZwlfX3JlbGFfZHluX3N0YXJ0IC0gMGIKK3Bfc3Q6CS5sbG9uZwlfc3RleHQgLSAwYgorCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3NldHVwLWNvbW1vbi5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9zZXR1cC1jb21tb24uYwppbmRleCA5Y2M1YTUyLi41ZWM1NmZmIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3NldHVwLWNvbW1vbi5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvc2V0dXAtY29tbW9uLmMKQEAgLTI1NCw4ICsyNTQsMjEgQEAKIAkvKiBJZiB3ZSBhcmUgYSBGcmVlc2NhbGUgY29yZSBkbyBhIHNpbXBsZSBjaGVjayBzbwogCSAqIHdlIGRvbnQgaGF2ZSB0byBrZWVwIGFkZGluZyBjYXNlcyBpbiB0aGUgZnV0dXJlICovCiAJaWYgKFBWUl9WRVIocHZyKSAmIDB4ODAwMCkgewotCQltYWogPSBQVlJfTUFKKHB2cik7Ci0JCW1pbiA9IFBWUl9NSU4ocHZyKTsKKwkJc3dpdGNoIChQVlJfVkVSKHB2cikpIHsKKwkJY2FzZSAweDgwMDA6CS8qIDc0NDEvNzQ1MC83NDUxLCBWb3lhZ2VyICovCisJCWNhc2UgMHg4MDAxOgkvKiA3NDQ1Lzc0NTUsIEFwb2xsbyA2ICovCisJCWNhc2UgMHg4MDAyOgkvKiA3NDQ3Lzc0NTcsIEFwb2xsbyA3ICovCisJCWNhc2UgMHg4MDAzOgkvKiA3NDQ3QSwgQXBvbGxvIDcgUE0gKi8KKwkJY2FzZSAweDgwMDQ6CS8qIDc0NDgsIEFwb2xsbyA4ICovCisJCWNhc2UgMHg4MDBjOgkvKiA3NDEwLCBOaXRybyAqLworCQkJbWFqID0gKChwdnIgPj4gOCkgJiAweEYpOworCQkJbWluID0gUFZSX01JTihwdnIpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CS8qIGU1MDAvYm9vay1lICovCisJCQltYWogPSBQVlJfTUFKKHB2cik7CisJCQltaW4gPSBQVlJfTUlOKHB2cik7CisJCQlicmVhazsKKwkJfQogCX0gZWxzZSB7CiAJCXN3aXRjaCAoUFZSX1ZFUihwdnIpKSB7CiAJCQljYXNlIDB4MDAyMDoJLyogNDAzIGZhbWlseSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9zZXR1cF8zMi5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9zZXR1cF8zMi5jCmluZGV4IDA2NmU2NWMuLmMxYTI3NjIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvc2V0dXBfMzIuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3NldHVwXzMyLmMKQEAgLTExMSw3ICsxMTEsNyBAQAogICogVGhpcyBpcyBjYWxsZWQgdmVyeSBlYXJseSBvbiB0aGUgYm9vdCBwcm9jZXNzLCBhZnRlciBhIG1pbmltYWwKICAqIE1NVSBlbnZpcm9ubWVudCBoYXMgYmVlbiBzZXQgdXAgYnV0IGJlZm9yZSBNTVVfaW5pdCBpcyBjYWxsZWQuCiAgKi8KLW5vdHJhY2Ugdm9pZCBfX2luaXQgbWFjaGluZV9pbml0KHVuc2lnbmVkIGxvbmcgZHRfcHRyLCB1bnNpZ25lZCBsb25nIHBoeXMpCitub3RyYWNlIHZvaWQgX19pbml0IG1hY2hpbmVfaW5pdCh1bnNpZ25lZCBsb25nIGR0X3B0cikKIHsKIAkvKiBFbmFibGUgZWFybHkgZGVidWdnaW5nIGlmIGFueSBzcGVjaWZpZWQgKHNlZSB1ZGJnLmgpICovCiAJdWRiZ19lYXJseV9pbml0KCk7CkBAIC0yMDksMjMgKzIwOSwxMiBAQAogCiAjZW5kaWYgLyogQ09ORklHX05WUkFNICovCiAKLXN0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgY3B1LCBjcHVfZGV2aWNlcyk7Ci0KIGludCBfX2luaXQgcHBjX2luaXQodm9pZCkKIHsKLQlpbnQgY3B1OwotCiAJLyogY2xlYXIgdGhlIHByb2dyZXNzIGxpbmUgKi8KIAlpZiAocHBjX21kLnByb2dyZXNzKQogCQlwcGNfbWQucHJvZ3Jlc3MoIiAgICAgICAgICAgICAiLCAweGZmZmYpOwogCi0JLyogcmVnaXN0ZXIgQ1BVIGRldmljZXMgKi8KLQlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7Ci0JCXN0cnVjdCBjcHUgKmMgPSAmcGVyX2NwdShjcHVfZGV2aWNlcywgY3B1KTsKLQkJYy0+aG90cGx1Z2dhYmxlID0gMTsKLQkJcmVnaXN0ZXJfY3B1KGMsIGNwdSk7Ci0JfQotCiAJLyogY2FsbCBwbGF0Zm9ybSBpbml0ICovCiAJaWYgKHBwY19tZC5pbml0ICE9IE5VTEwpIHsKIAkJcHBjX21kLmluaXQoKTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvc2V0dXBfNjQuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvc2V0dXBfNjQuYwppbmRleCA4YjI1ZjUxLi44NDNjMGFmIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3NldHVwXzY0LmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9zZXR1cF82NC5jCkBAIC0yNTUsOSArMjU1LDExIEBACiAjZW5kaWYgLyogQ09ORklHX1NNUCAqLwogCiAjaWYgZGVmaW5lZChDT05GSUdfU01QKSB8fCBkZWZpbmVkKENPTkZJR19LRVhFQykKK2V4dGVybiB1bnNpZ25lZCBsb25nIF9fc2Vjb25kYXJ5X2hvbGRfc3Bpbmxvb3A7CitleHRlcm4gdm9pZCBnZW5lcmljX3NlY29uZGFyeV9zbXBfaW5pdCh2b2lkKTsKKwogdm9pZCBzbXBfcmVsZWFzZV9jcHVzKHZvaWQpCiB7Ci0JZXh0ZXJuIHVuc2lnbmVkIGxvbmcgX19zZWNvbmRhcnlfaG9sZF9zcGlubG9vcDsKIAl1bnNpZ25lZCBsb25nICpwdHI7CiAKIAlEQkcoIiAtPiBzbXBfcmVsZWFzZV9jcHVzKClcbiIpOwpAQCAtMjY2LDEyICsyNjgsMTEgQEAKIAkgKiBhbGwgbm93IHNvIHRoZXkgY2FuIHN0YXJ0IHRvIHNwaW4gb24gdGhlaXIgaW5kaXZpZHVhbCBwYWNhCiAJICogc3Bpbmxvb3BzLiBGb3Igbm9uIFNNUCBrZXJuZWxzLCB0aGUgc2Vjb25kYXJ5IGNwdXMgbmV2ZXIgZ2V0IG91dAogCSAqIG9mIHRoZSBjb21tb24gc3Bpbmxvb3AuCi0JICogVGhpcyBpcyB1c2VsZXNzIGJ1dCBoYXJtbGVzcyBvbiBpU2VyaWVzLCBzZWNvbmRhcmllcyBhcmUgYWxyZWFkeQotCSAqIHdhaXRpbmcgb24gdGhlaXIgcGFjYSBzcGlubG9vcHMuICovCisJICovCiAKIAlwdHIgID0gKHVuc2lnbmVkIGxvbmcgKikoKHVuc2lnbmVkIGxvbmcpJl9fc2Vjb25kYXJ5X2hvbGRfc3Bpbmxvb3AKIAkJCS0gUEhZU0lDQUxfU1RBUlQpOwotCSpwdHIgPSAxOworCSpwdHIgPSBfX3BhKGdlbmVyaWNfc2Vjb25kYXJ5X3NtcF9pbml0KTsKIAltYigpOwogCiAJREJHKCIgPC0gc21wX3JlbGVhc2VfY3B1cygpXG4iKTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvc21wLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3NtcC5jCmluZGV4IGMyN2IxMGEuLmZmOWY3MDEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvc21wLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9zbXAuYwpAQCAtMTAxLDggKzEwMSw3IEBACiAJCWdlbmVyaWNfc21wX2NhbGxfZnVuY3Rpb25faW50ZXJydXB0KCk7CiAJCWJyZWFrOwogCWNhc2UgUFBDX01TR19SRVNDSEVEVUxFOgotCQkvKiBYWFggRG8gd2UgaGF2ZSB0byBkbyB0aGlzPyAqLwotCQlzZXRfbmVlZF9yZXNjaGVkKCk7CisJCS8qIHdlIG5vdGljZSBuZWVkX3Jlc2NoZWQgb24gZXhpdCAqLwogCQlicmVhazsKIAljYXNlIFBQQ19NU0dfQ0FMTF9GVU5DX1NJTkdMRToKIAkJZ2VuZXJpY19zbXBfY2FsbF9mdW5jdGlvbl9zaW5nbGVfaW50ZXJydXB0KCk7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3NvZnRlbXU4eHguYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvc29mdGVtdTh4eC5jCmluZGV4IGM5MDZjNGIuLjIzYzhjNWUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvc29mdGVtdTh4eC5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvc29mdGVtdTh4eC5jCkBAIC0yMyw3ICsyMyw2IEBACiAjaW5jbHVkZSA8bGludXgvcHRyYWNlLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3VzZXIuaD4KLSNpbmNsdWRlIDxsaW51eC9hLm91dC5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogCiAjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvc3dzdXNwX2FzbTY0LlMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3N3c3VzcF9hc202NC5TCmluZGV4IGUwOTJjM2MuLjg2YWMxZDkgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvc3dzdXNwX2FzbTY0LlMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9zd3N1c3BfYXNtNjQuUwpAQCAtMTMzLDcgKzEzMyw3IEBACiAKIAljbXBkaQlyMTIsMAogCWJlcS0Jbm90aGluZ190b19jb3B5Ci0JbGkJcjE1LDUxMgorCWxpCXIxNSxQQUdFX1NJWkU+PjMKIGNvcHlsb29wOgogCWxkCXIxMyxwYmVfYWRkcmVzcyhyMTIpCiAJbGQJcjE0LHBiZV9vcmlnX2FkZHJlc3MocjEyKQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9zeXNfcHBjMzIuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvc3lzX3BwYzMyLmMKaW5kZXggZDk4NjM0Yy4uYmIxY2ZjZiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9zeXNfcHBjMzIuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3N5c19wcGMzMi5jCkBAIC02MSw0MiArNjEsNiBAQAogCXJldHVybiBjb21wYXRfc3lzX3NlbGVjdCgoaW50KW4sIGlucCwgb3V0cCwgZXhwLCBjb21wYXRfcHRyKHR2cF94KSk7CiB9CiAKLWludCBjcF9jb21wYXRfc3RhdChzdHJ1Y3Qga3N0YXQgKnN0YXQsIHN0cnVjdCBjb21wYXRfc3RhdCBfX3VzZXIgKnN0YXRidWYpCi17Ci0JY29tcGF0X2lub190IGlubzsKLQlsb25nIGVycjsKLQotCWlmIChzdGF0LT5zaXplID4gTUFYX05PTl9MRlMgfHwgIW5ld192YWxpZF9kZXYoc3RhdC0+ZGV2KSB8fAotCSAgICAhbmV3X3ZhbGlkX2RldihzdGF0LT5yZGV2KSkKLQkJcmV0dXJuIC1FT1ZFUkZMT1c7Ci0KLQlpbm8gPSBzdGF0LT5pbm87Ci0JaWYgKHNpemVvZihpbm8pIDwgc2l6ZW9mKHN0YXQtPmlubykgJiYgaW5vICE9IHN0YXQtPmlubykKLQkJcmV0dXJuIC1FT1ZFUkZMT1c7Ci0KLQllcnIgID0gYWNjZXNzX29rKFZFUklGWV9XUklURSwgc3RhdGJ1Ziwgc2l6ZW9mKCpzdGF0YnVmKSkgPyAwIDogLUVGQVVMVDsKLQllcnIgfD0gX19wdXRfdXNlcihuZXdfZW5jb2RlX2RldihzdGF0LT5kZXYpLCAmc3RhdGJ1Zi0+c3RfZGV2KTsKLQllcnIgfD0gX19wdXRfdXNlcihpbm8sICZzdGF0YnVmLT5zdF9pbm8pOwotCWVyciB8PSBfX3B1dF91c2VyKHN0YXQtPm1vZGUsICZzdGF0YnVmLT5zdF9tb2RlKTsKLQllcnIgfD0gX19wdXRfdXNlcihzdGF0LT5ubGluaywgJnN0YXRidWYtPnN0X25saW5rKTsKLQllcnIgfD0gX19wdXRfdXNlcihzdGF0LT51aWQsICZzdGF0YnVmLT5zdF91aWQpOwotCWVyciB8PSBfX3B1dF91c2VyKHN0YXQtPmdpZCwgJnN0YXRidWYtPnN0X2dpZCk7Ci0JZXJyIHw9IF9fcHV0X3VzZXIobmV3X2VuY29kZV9kZXYoc3RhdC0+cmRldiksICZzdGF0YnVmLT5zdF9yZGV2KTsKLQllcnIgfD0gX19wdXRfdXNlcihzdGF0LT5zaXplLCAmc3RhdGJ1Zi0+c3Rfc2l6ZSk7Ci0JZXJyIHw9IF9fcHV0X3VzZXIoc3RhdC0+YXRpbWUudHZfc2VjLCAmc3RhdGJ1Zi0+c3RfYXRpbWUpOwotCWVyciB8PSBfX3B1dF91c2VyKHN0YXQtPmF0aW1lLnR2X25zZWMsICZzdGF0YnVmLT5zdF9hdGltZV9uc2VjKTsKLQllcnIgfD0gX19wdXRfdXNlcihzdGF0LT5tdGltZS50dl9zZWMsICZzdGF0YnVmLT5zdF9tdGltZSk7Ci0JZXJyIHw9IF9fcHV0X3VzZXIoc3RhdC0+bXRpbWUudHZfbnNlYywgJnN0YXRidWYtPnN0X210aW1lX25zZWMpOwotCWVyciB8PSBfX3B1dF91c2VyKHN0YXQtPmN0aW1lLnR2X3NlYywgJnN0YXRidWYtPnN0X2N0aW1lKTsKLQllcnIgfD0gX19wdXRfdXNlcihzdGF0LT5jdGltZS50dl9uc2VjLCAmc3RhdGJ1Zi0+c3RfY3RpbWVfbnNlYyk7Ci0JZXJyIHw9IF9fcHV0X3VzZXIoc3RhdC0+Ymxrc2l6ZSwgJnN0YXRidWYtPnN0X2Jsa3NpemUpOwotCWVyciB8PSBfX3B1dF91c2VyKHN0YXQtPmJsb2NrcywgJnN0YXRidWYtPnN0X2Jsb2Nrcyk7Ci0JZXJyIHw9IF9fcHV0X3VzZXIoMCwgJnN0YXRidWYtPl9fdW51c2VkNFswXSk7Ci0JZXJyIHw9IF9fcHV0X3VzZXIoMCwgJnN0YXRidWYtPl9fdW51c2VkNFsxXSk7Ci0KLQlyZXR1cm4gZXJyOwotfQotCiAvKiBOb3RlOiBpdCBpcyBuZWNlc3NhcnkgdG8gdHJlYXQgb3B0aW9uIGFzIGFuIHVuc2lnbmVkIGludCwKICAqIHdpdGggdGhlIGNvcnJlc3BvbmRpbmcgY2FzdCB0byBhIHNpZ25lZCBpbnQgdG8gaW5zdXJlIHRoYXQgdGhlIAogICogcHJvcGVyIGNvbnZlcnNpb24gKHNpZ24gZXh0ZW5zaW9uKSBiZXR3ZWVuIHRoZSByZWdpc3RlciByZXByZXNlbnRhdGlvbiBvZiBhIHNpZ25lZCBpbnQgKG1zciBpbiAzMi1iaXQgbW9kZSkKQEAgLTEwNyw3NyArNzEsNiBAQAogCXJldHVybiBzeXNfc3lzZnMoKGludClvcHRpb24sIGFyZzEsIGFyZzIpOwogfQogCi1hc21saW5rYWdlIGxvbmcgY29tcGF0X3N5c19wYXVzZSh2b2lkKQotewotCWN1cnJlbnQtPnN0YXRlID0gVEFTS19JTlRFUlJVUFRJQkxFOwotCXNjaGVkdWxlKCk7Ci0JCi0JcmV0dXJuIC1FUkVTVEFSVE5PSEFORDsKLX0KLQotc3RhdGljIGlubGluZSBsb25nIGdldF90czMyKHN0cnVjdCB0aW1lc3BlYyAqbywgc3RydWN0IGNvbXBhdF90aW1ldmFsIF9fdXNlciAqaSkKLXsKLQlsb25nIHVzZWM7Ci0KLQlpZiAoIWFjY2Vzc19vayhWRVJJRllfUkVBRCwgaSwgc2l6ZW9mKCppKSkpCi0JCXJldHVybiAtRUZBVUxUOwotCWlmIChfX2dldF91c2VyKG8tPnR2X3NlYywgJmktPnR2X3NlYykpCi0JCXJldHVybiAtRUZBVUxUOwotCWlmIChfX2dldF91c2VyKHVzZWMsICZpLT50dl91c2VjKSkKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0Jby0+dHZfbnNlYyA9IHVzZWMgKiAxMDAwOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW5saW5lIGxvbmcgcHV0X3R2MzIoc3RydWN0IGNvbXBhdF90aW1ldmFsIF9fdXNlciAqbywgc3RydWN0IHRpbWV2YWwgKmkpCi17Ci0JcmV0dXJuICghYWNjZXNzX29rKFZFUklGWV9XUklURSwgbywgc2l6ZW9mKCpvKSkgfHwKLQkJKF9fcHV0X3VzZXIoaS0+dHZfc2VjLCAmby0+dHZfc2VjKSB8Ci0JCSBfX3B1dF91c2VyKGktPnR2X3VzZWMsICZvLT50dl91c2VjKSkpOwotfQotCi0KLQotCi0vKiBUcmFuc2xhdGlvbnMgZHVlIHRvIHRpbWVfdCBzaXplIGRpZmZlcmVuY2VzLiAgV2hpY2ggYWZmZWN0cyBhbGwKLSAgIHNvcnRzIG9mIHRoaW5ncywgbGlrZSB0aW1ldmFsIGFuZCBpdGltZXJ2YWwuICAqLwotZXh0ZXJuIHN0cnVjdCB0aW1lem9uZSBzeXNfdHo7Ci0KLWFzbWxpbmthZ2UgbG9uZyBjb21wYXRfc3lzX2dldHRpbWVvZmRheShzdHJ1Y3QgY29tcGF0X3RpbWV2YWwgX191c2VyICp0diwgc3RydWN0IHRpbWV6b25lIF9fdXNlciAqdHopCi17Ci0JaWYgKHR2KSB7Ci0JCXN0cnVjdCB0aW1ldmFsIGt0djsKLQkJZG9fZ2V0dGltZW9mZGF5KCZrdHYpOwotCQlpZiAocHV0X3R2MzIodHYsICZrdHYpKQotCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JfQotCWlmICh0eikgewotCQlpZiAoY29weV90b191c2VyKHR6LCAmc3lzX3R6LCBzaXplb2Yoc3lzX3R6KSkpCi0JCQlyZXR1cm4gLUVGQVVMVDsKLQl9Ci0JCi0JcmV0dXJuIDA7Ci19Ci0KLQotCi1hc21saW5rYWdlIGxvbmcgY29tcGF0X3N5c19zZXR0aW1lb2ZkYXkoc3RydWN0IGNvbXBhdF90aW1ldmFsIF9fdXNlciAqdHYsIHN0cnVjdCB0aW1lem9uZSBfX3VzZXIgKnR6KQotewotCXN0cnVjdCB0aW1lc3BlYyBrdHM7Ci0Jc3RydWN0IHRpbWV6b25lIGt0ejsKLQkKLSAJaWYgKHR2KSB7Ci0JCWlmIChnZXRfdHMzMigma3RzLCB0dikpCi0JCQlyZXR1cm4gLUVGQVVMVDsKLQl9Ci0JaWYgKHR6KSB7Ci0JCWlmIChjb3B5X2Zyb21fdXNlcigma3R6LCB0eiwgc2l6ZW9mKGt0eikpKQotCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JfQotCi0JcmV0dXJuIGRvX3N5c19zZXR0aW1lb2ZkYXkodHYgPyAma3RzIDogTlVMTCwgdHogPyAma3R6IDogTlVMTCk7Ci19Ci0KICNpZmRlZiBDT05GSUdfU1lTVklQQwogbG9uZyBjb21wYXRfc3lzX2lwYyh1MzIgY2FsbCwgdTMyIGZpcnN0LCB1MzIgc2Vjb25kLCB1MzIgdGhpcmQsIGNvbXBhdF91cHRyX3QgcHRyLAogCSAgICAgICB1MzIgZmlmdGgpCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3N5c2ZzLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3N5c2ZzLmMKaW5kZXggNTZkMTcyZC4uODZhMmZmYyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9zeXNmcy5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvc3lzZnMuYwpAQCAtMTUsMTggKzE1LDI0IEBACiAjaW5jbHVkZSA8YXNtL2Zpcm13YXJlLmg+CiAjaW5jbHVkZSA8YXNtL2h2Y2FsbC5oPgogI2luY2x1ZGUgPGFzbS9wcm9tLmg+Ci0jaW5jbHVkZSA8YXNtL3BhY2EuaD4KLSNpbmNsdWRlIDxhc20vbHBwYWNhLmg+CiAjaW5jbHVkZSA8YXNtL21hY2hkZXAuaD4KICNpbmNsdWRlIDxhc20vc21wLmg+CiAKKyNpZmRlZiBDT05GSUdfUFBDNjQKKyNpbmNsdWRlIDxhc20vcGFjYS5oPgorI2luY2x1ZGUgPGFzbS9scHBhY2EuaD4KKyNlbmRpZgorCiBzdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IGNwdSwgY3B1X2RldmljZXMpOwogCiBzdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IGtvYmplY3QgKiwgY2FjaGVfdG9wbGV2ZWwpOwogCi0vKiBTTVQgc3R1ZmYgKi8KKy8qCisgKiBTTVQgc25vb3plIGRlbGF5IHN0dWZmLCA2NC1iaXQgb25seSBmb3Igbm93CisgKi8KIAotI2lmZGVmIENPTkZJR19QUENfTVVMVElQTEFURk9STQorI2lmZGVmIENPTkZJR19QUEM2NAorCiAvKiBUaW1lIGluIG1pY3Jvc2Vjb25kcyB3ZSBkZWxheSBiZWZvcmUgc2xlZXBpbmcgaW4gdGhlIGlkbGUgbG9vcCAqLwogREVGSU5FX1BFUl9DUFUodW5zaWduZWQgbG9uZywgc210X3Nub296ZV9kZWxheSkgPSB7IDEwMCB9OwogCkBAIC0xMDYsNyArMTEyLDcgQEAKIH0KIF9fc2V0dXAoInNtdC1zbm9vemUtZGVsYXk9Iiwgc2V0dXBfc210X3Nub296ZV9kZWxheSk7CiAKLSNlbmRpZiAvKiBDT05GSUdfUFBDX01VTFRJUExBVEZPUk0gKi8KKyNlbmRpZiAvKiBDT05GSUdfUFBDNjQgKi8KIAogLyoKICAqIEVuYWJsaW5nIFBNQ3Mgd2lsbCBzbG93IHBhcnRpdGlvbiBjb250ZXh0IHN3aXRjaCB0aW1lcyBzbyB3ZSBvbmx5IGRvCkBAIC0xMTUsNyArMTIxLDcgQEAKIAogc3RhdGljIERFRklORV9QRVJfQ1BVKGNoYXIsIHBtY3NfZW5hYmxlZCk7CiAKLXZvaWQgcHBjNjRfZW5hYmxlX3BtY3Modm9pZCkKK3ZvaWQgcHBjX2VuYWJsZV9wbWNzKHZvaWQpCiB7CiAJLyogT25seSBuZWVkIHRvIGVuYWJsZSB0aGVtIG9uY2UgKi8KIAlpZiAoX19nZXRfY3B1X3ZhcihwbWNzX2VuYWJsZWQpKQpAQCAtMTI2LDggKzEzMiw5IEBACiAJaWYgKHBwY19tZC5lbmFibGVfcG1jcykKIAkJcHBjX21kLmVuYWJsZV9wbWNzKCk7CiB9Ci1FWFBPUlRfU1lNQk9MKHBwYzY0X2VuYWJsZV9wbWNzKTsKK0VYUE9SVF9TWU1CT0wocHBjX2VuYWJsZV9wbWNzKTsKIAorI2lmIGRlZmluZWQoQ09ORklHXzZ4eCkgfHwgZGVmaW5lZChDT05GSUdfUFBDNjQpCiAvKiBYWFggY29udmVydCB0byBydXN0eSdzIG9uX29uZV9jcHUgKi8KIHN0YXRpYyB1bnNpZ25lZCBsb25nIHJ1bl9vbl9jcHUodW5zaWduZWQgbG9uZyBjcHUsCiAJCQkgICAgICAgIHVuc2lnbmVkIGxvbmcgKCpmdW5jKSh1bnNpZ25lZCBsb25nKSwKQEAgLTE0Niw2ICsxNTMsNyBAQAogCiAJcmV0dXJuIHJldDsKIH0KKyNlbmRpZgogCiAjZGVmaW5lIFNZU0ZTX1BNQ1NFVFVQKE5BTUUsIEFERFJFU1MpIFwKIHN0YXRpYyB1bnNpZ25lZCBsb25nIHJlYWRfIyNOQU1FKHVuc2lnbmVkIGxvbmcganVuaykgXApAQCAtMTU0LDcgKzE2Miw3IEBACiB9IFwKIHN0YXRpYyB1bnNpZ25lZCBsb25nIHdyaXRlXyMjTkFNRSh1bnNpZ25lZCBsb25nIHZhbCkgXAogeyBcCi0JcHBjNjRfZW5hYmxlX3BtY3MoKTsgXAorCXBwY19lbmFibGVfcG1jcygpOyBcCiAJbXRzcHIoQUREUkVTUywgdmFsKTsgXAogCXJldHVybiAwOyBcCiB9IFwKQEAgLTE4NCwyOCArMTkyLDUzIEBACiAgKiB0aGF0IGFyZSBpbXBsZW1lbnRlZCBvbiB0aGUgY3VycmVudCBwcm9jZXNzb3IKICAqLwogCisjaWYgZGVmaW5lZChDT05GSUdfUFBDNjQpCisjZGVmaW5lIEhBU19QUENfUE1DX0NMQVNTSUMJMQorI2RlZmluZSBIQVNfUFBDX1BNQ19JQk0JCTEKKyNkZWZpbmUgSEFTX1BQQ19QTUNfUEE2VAkxCisjZWxpZiBkZWZpbmVkKENPTkZJR182eHgpCisjZGVmaW5lIEhBU19QUENfUE1DX0NMQVNTSUMJMQorI2RlZmluZSBIQVNfUFBDX1BNQ19JQk0JCTEKKyNkZWZpbmUgSEFTX1BQQ19QTUNfRzQJCTEKKyNlbmRpZgorCisKKyNpZmRlZiBIQVNfUFBDX1BNQ19DTEFTU0lDCiBTWVNGU19QTUNTRVRVUChtbWNyMCwgU1BSTl9NTUNSMCk7CiBTWVNGU19QTUNTRVRVUChtbWNyMSwgU1BSTl9NTUNSMSk7Ci1TWVNGU19QTUNTRVRVUChtbWNyYSwgU1BSTl9NTUNSQSk7CiBTWVNGU19QTUNTRVRVUChwbWMxLCBTUFJOX1BNQzEpOwogU1lTRlNfUE1DU0VUVVAocG1jMiwgU1BSTl9QTUMyKTsKIFNZU0ZTX1BNQ1NFVFVQKHBtYzMsIFNQUk5fUE1DMyk7CiBTWVNGU19QTUNTRVRVUChwbWM0LCBTUFJOX1BNQzQpOwogU1lTRlNfUE1DU0VUVVAocG1jNSwgU1BSTl9QTUM1KTsKIFNZU0ZTX1BNQ1NFVFVQKHBtYzYsIFNQUk5fUE1DNik7CisKKyNpZmRlZiBIQVNfUFBDX1BNQ19HNAorU1lTRlNfUE1DU0VUVVAobW1jcjIsIFNQUk5fTU1DUjIpOworI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfUFBDNjQKIFNZU0ZTX1BNQ1NFVFVQKHBtYzcsIFNQUk5fUE1DNyk7CiBTWVNGU19QTUNTRVRVUChwbWM4LCBTUFJOX1BNQzgpOworCitTWVNGU19QTUNTRVRVUChtbWNyYSwgU1BSTl9NTUNSQSk7CiBTWVNGU19QTUNTRVRVUChwdXJyLCBTUFJOX1BVUlIpOwogU1lTRlNfUE1DU0VUVVAoc3B1cnIsIFNQUk5fU1BVUlIpOwogU1lTRlNfUE1DU0VUVVAoZHNjciwgU1BSTl9EU0NSKTsKIAorc3RhdGljIFNZU0RFVl9BVFRSKG1tY3JhLCAwNjAwLCBzaG93X21tY3JhLCBzdG9yZV9tbWNyYSk7CitzdGF0aWMgU1lTREVWX0FUVFIoc3B1cnIsIDA2MDAsIHNob3dfc3B1cnIsIE5VTEwpOworc3RhdGljIFNZU0RFVl9BVFRSKGRzY3IsIDA2MDAsIHNob3dfZHNjciwgc3RvcmVfZHNjcik7CitzdGF0aWMgU1lTREVWX0FUVFIocHVyciwgMDYwMCwgc2hvd19wdXJyLCBzdG9yZV9wdXJyKTsKKyNlbmRpZiAvKiBDT05GSUdfUFBDNjQgKi8KKworI2lmZGVmIEhBU19QUENfUE1DX1BBNlQKIFNZU0ZTX1BNQ1NFVFVQKHBhNnRfcG1jMCwgU1BSTl9QQTZUX1BNQzApOwogU1lTRlNfUE1DU0VUVVAocGE2dF9wbWMxLCBTUFJOX1BBNlRfUE1DMSk7CiBTWVNGU19QTUNTRVRVUChwYTZ0X3BtYzIsIFNQUk5fUEE2VF9QTUMyKTsKIFNZU0ZTX1BNQ1NFVFVQKHBhNnRfcG1jMywgU1BSTl9QQTZUX1BNQzMpOwogU1lTRlNfUE1DU0VUVVAocGE2dF9wbWM0LCBTUFJOX1BBNlRfUE1DNCk7CiBTWVNGU19QTUNTRVRVUChwYTZ0X3BtYzUsIFNQUk5fUEE2VF9QTUM1KTsKLQogI2lmZGVmIENPTkZJR19ERUJVR19LRVJORUwKIFNZU0ZTX1BNQ1NFVFVQKGhpZDAsIFNQUk5fSElEMCk7CiBTWVNGU19QTUNTRVRVUChoaWQxLCBTUFJOX0hJRDEpOwpAQCAtMjM2LDI4ICsyNjksMzcgQEAKIFNZU0ZTX1BNQ1NFVFVQKHRzcjIsIFNQUk5fUEE2VF9UU1IyKTsKIFNZU0ZTX1BNQ1NFVFVQKHRzcjMsIFNQUk5fUEE2VF9UU1IzKTsKICNlbmRpZiAvKiBDT05GSUdfREVCVUdfS0VSTkVMICovCisjZW5kaWYgLyogSEFTX1BQQ19QTUNfUEE2VCAqLwogCi1zdGF0aWMgU1lTREVWX0FUVFIobW1jcmEsIDA2MDAsIHNob3dfbW1jcmEsIHN0b3JlX21tY3JhKTsKLXN0YXRpYyBTWVNERVZfQVRUUihzcHVyciwgMDYwMCwgc2hvd19zcHVyciwgTlVMTCk7Ci1zdGF0aWMgU1lTREVWX0FUVFIoZHNjciwgMDYwMCwgc2hvd19kc2NyLCBzdG9yZV9kc2NyKTsKLXN0YXRpYyBTWVNERVZfQVRUUihwdXJyLCAwNjAwLCBzaG93X3B1cnIsIHN0b3JlX3B1cnIpOwotCisjaWZkZWYgSEFTX1BQQ19QTUNfSUJNCiBzdGF0aWMgc3RydWN0IHN5c2Rldl9hdHRyaWJ1dGUgaWJtX2NvbW1vbl9hdHRyc1tdID0gewogCV9TWVNERVZfQVRUUihtbWNyMCwgMDYwMCwgc2hvd19tbWNyMCwgc3RvcmVfbW1jcjApLAogCV9TWVNERVZfQVRUUihtbWNyMSwgMDYwMCwgc2hvd19tbWNyMSwgc3RvcmVfbW1jcjEpLAogfTsKKyNlbmRpZiAvKiBIQVNfUFBDX1BNQ19HNCAqLwogCi1zdGF0aWMgc3RydWN0IHN5c2Rldl9hdHRyaWJ1dGUgaWJtX3BtY19hdHRyc1tdID0geworI2lmZGVmIEhBU19QUENfUE1DX0c0CitzdGF0aWMgc3RydWN0IHN5c2Rldl9hdHRyaWJ1dGUgZzRfY29tbW9uX2F0dHJzW10gPSB7CisJX1NZU0RFVl9BVFRSKG1tY3IwLCAwNjAwLCBzaG93X21tY3IwLCBzdG9yZV9tbWNyMCksCisJX1NZU0RFVl9BVFRSKG1tY3IxLCAwNjAwLCBzaG93X21tY3IxLCBzdG9yZV9tbWNyMSksCisJX1NZU0RFVl9BVFRSKG1tY3IyLCAwNjAwLCBzaG93X21tY3IyLCBzdG9yZV9tbWNyMiksCit9OworI2VuZGlmIC8qIEhBU19QUENfUE1DX0c0ICovCisKK3N0YXRpYyBzdHJ1Y3Qgc3lzZGV2X2F0dHJpYnV0ZSBjbGFzc2ljX3BtY19hdHRyc1tdID0gewogCV9TWVNERVZfQVRUUihwbWMxLCAwNjAwLCBzaG93X3BtYzEsIHN0b3JlX3BtYzEpLAogCV9TWVNERVZfQVRUUihwbWMyLCAwNjAwLCBzaG93X3BtYzIsIHN0b3JlX3BtYzIpLAogCV9TWVNERVZfQVRUUihwbWMzLCAwNjAwLCBzaG93X3BtYzMsIHN0b3JlX3BtYzMpLAogCV9TWVNERVZfQVRUUihwbWM0LCAwNjAwLCBzaG93X3BtYzQsIHN0b3JlX3BtYzQpLAogCV9TWVNERVZfQVRUUihwbWM1LCAwNjAwLCBzaG93X3BtYzUsIHN0b3JlX3BtYzUpLAogCV9TWVNERVZfQVRUUihwbWM2LCAwNjAwLCBzaG93X3BtYzYsIHN0b3JlX3BtYzYpLAorI2lmZGVmIENPTkZJR19QUEM2NAogCV9TWVNERVZfQVRUUihwbWM3LCAwNjAwLCBzaG93X3BtYzcsIHN0b3JlX3BtYzcpLAogCV9TWVNERVZfQVRUUihwbWM4LCAwNjAwLCBzaG93X3BtYzgsIHN0b3JlX3BtYzgpLAorI2VuZGlmCiB9OwogCisjaWZkZWYgSEFTX1BQQ19QTUNfUEE2VAogc3RhdGljIHN0cnVjdCBzeXNkZXZfYXR0cmlidXRlIHBhNnRfYXR0cnNbXSA9IHsKIAlfU1lTREVWX0FUVFIobW1jcjAsIDA2MDAsIHNob3dfbW1jcjAsIHN0b3JlX21tY3IwKSwKIAlfU1lTREVWX0FUVFIobW1jcjEsIDA2MDAsIHNob3dfbW1jcjEsIHN0b3JlX21tY3IxKSwKQEAgLTI5OCw2ICszNDAsOCBAQAogCV9TWVNERVZfQVRUUih0c3IzLCAwNjAwLCBzaG93X3RzcjMsIHN0b3JlX3RzcjMpLAogI2VuZGlmIC8qIENPTkZJR19ERUJVR19LRVJORUwgKi8KIH07CisjZW5kaWYgLyogSEFTX1BQQ19QTUNfUEE2VCAqLworI2VuZGlmIC8qIEhBU19QUENfUE1DX0NMQVNTSUMgKi8KIAogc3RydWN0IGNhY2hlX2Rlc2MgewogCXN0cnVjdCBrb2JqZWN0IGtvYmo7CkBAIC01ODgsMjMgKzYzMiwzNiBAQAogCXN0cnVjdCBzeXNkZXZfYXR0cmlidXRlICphdHRycywgKnBtY19hdHRyczsKIAlpbnQgaSwgbmF0dHJzOwogCisjaWZkZWYgQ09ORklHX1BQQzY0CiAJaWYgKCFmaXJtd2FyZV9oYXNfZmVhdHVyZShGV19GRUFUVVJFX0lTRVJJRVMpICYmCiAJCQljcHVfaGFzX2ZlYXR1cmUoQ1BVX0ZUUl9TTVQpKQogCQlzeXNkZXZfY3JlYXRlX2ZpbGUocywgJmF0dHJfc210X3Nub296ZV9kZWxheSk7CisjZW5kaWYKIAogCS8qIFBNQyBzdHVmZiAqLwogCXN3aXRjaCAoY3VyX2NwdV9zcGVjLT5wbWNfdHlwZSkgeworI2lmZGVmIEhBU19QUENfUE1DX0lCTQogCWNhc2UgUFBDX1BNQ19JQk06CiAJCWF0dHJzID0gaWJtX2NvbW1vbl9hdHRyczsKIAkJbmF0dHJzID0gc2l6ZW9mKGlibV9jb21tb25fYXR0cnMpIC8gc2l6ZW9mKHN0cnVjdCBzeXNkZXZfYXR0cmlidXRlKTsKLQkJcG1jX2F0dHJzID0gaWJtX3BtY19hdHRyczsKKwkJcG1jX2F0dHJzID0gY2xhc3NpY19wbWNfYXR0cnM7CiAJCWJyZWFrOworI2VuZGlmIC8qIEhBU19QUENfUE1DX0lCTSAqLworI2lmZGVmIEhBU19QUENfUE1DX0c0CisJY2FzZSBQUENfUE1DX0c0OgorCQlhdHRycyA9IGc0X2NvbW1vbl9hdHRyczsKKwkJbmF0dHJzID0gc2l6ZW9mKGc0X2NvbW1vbl9hdHRycykgLyBzaXplb2Yoc3RydWN0IHN5c2Rldl9hdHRyaWJ1dGUpOworCQlwbWNfYXR0cnMgPSBjbGFzc2ljX3BtY19hdHRyczsKKwkJYnJlYWs7CisjZW5kaWYgLyogSEFTX1BQQ19QTUNfRzQgKi8KKyNpZmRlZiBIQVNfUFBDX1BNQ19QQTZUCiAJY2FzZSBQUENfUE1DX1BBNlQ6CiAJCS8qIFBBIFNlbWkgc3RhcnRzIGNvdW50aW5nIGF0IFBNQzAgKi8KIAkJYXR0cnMgPSBwYTZ0X2F0dHJzOwogCQluYXR0cnMgPSBzaXplb2YocGE2dF9hdHRycykgLyBzaXplb2Yoc3RydWN0IHN5c2Rldl9hdHRyaWJ1dGUpOwogCQlwbWNfYXR0cnMgPSBOVUxMOwogCQlicmVhazsKKyNlbmRpZiAvKiBIQVNfUFBDX1BNQ19QQTZUICovCiAJZGVmYXVsdDoKIAkJYXR0cnMgPSBOVUxMOwogCQluYXR0cnMgPSAwOwpAQCAtNjE4LDYgKzY3NSw3IEBACiAJCWZvciAoaSA9IDA7IGkgPCBjdXJfY3B1X3NwZWMtPm51bV9wbWNzOyBpKyspCiAJCQlzeXNkZXZfY3JlYXRlX2ZpbGUocywgJnBtY19hdHRyc1tpXSk7CiAKKyNpZmRlZiBDT05GSUdfUFBDNjQKIAlpZiAoY3B1X2hhc19mZWF0dXJlKENQVV9GVFJfTU1DUkEpKQogCQlzeXNkZXZfY3JlYXRlX2ZpbGUocywgJmF0dHJfbW1jcmEpOwogCkBAIC02MjksNiArNjg3LDcgQEAKIAogCWlmIChjcHVfaGFzX2ZlYXR1cmUoQ1BVX0ZUUl9EU0NSKSkKIAkJc3lzZGV2X2NyZWF0ZV9maWxlKHMsICZhdHRyX2RzY3IpOworI2VuZGlmIC8qIENPTkZJR19QUEM2NCAqLwogCiAJY3JlYXRlX2NhY2hlX2luZm8ocyk7CiB9CkBAIC02NDEsMTYgKzcwMCw5IEBACiAJaW50IGNwdSA9IHN5c2Rldi0+aWQ7CiAKIAljYWNoZV9kZXNjID0gcGVyX2NwdShjYWNoZV9kZXNjLCBjcHUpOwotCWlmIChjYWNoZV9kZXNjICE9IE5VTEwpIHsKLQkJc3lzZnNfcmVtb3ZlX2ZpbGUoJmNhY2hlX2Rlc2MtPmtvYmosICZjYWNoZV9zaXplX2F0dHIuYXR0cik7Ci0JCXN5c2ZzX3JlbW92ZV9maWxlKCZjYWNoZV9kZXNjLT5rb2JqLCAmY2FjaGVfbGluZV9zaXplX2F0dHIuYXR0cik7Ci0JCXN5c2ZzX3JlbW92ZV9maWxlKCZjYWNoZV9kZXNjLT5rb2JqLCAmY2FjaGVfdHlwZV9hdHRyLmF0dHIpOwotCQlzeXNmc19yZW1vdmVfZmlsZSgmY2FjaGVfZGVzYy0+a29iaiwgJmNhY2hlX2xldmVsX2F0dHIuYXR0cik7Ci0JCXN5c2ZzX3JlbW92ZV9maWxlKCZjYWNoZV9kZXNjLT5rb2JqLCAmY2FjaGVfbnJfc2V0c19hdHRyLmF0dHIpOwotCQlzeXNmc19yZW1vdmVfZmlsZSgmY2FjaGVfZGVzYy0+a29iaiwgJmNhY2hlX2Fzc29jX2F0dHIuYXR0cik7Ci0KKwlpZiAoY2FjaGVfZGVzYyAhPSBOVUxMKQogCQlrb2JqZWN0X3B1dCgmY2FjaGVfZGVzYy0+a29iaik7Ci0JfQorCiAJY2FjaGVfdG9wbGV2ZWwgPSBwZXJfY3B1KGNhY2hlX3RvcGxldmVsLCBjcHUpOwogCWlmIChjYWNoZV90b3BsZXZlbCAhPSBOVUxMKQogCQlrb2JqZWN0X3B1dChjYWNoZV90b3BsZXZlbCk7CkBAIC02NzEsMTcgKzcyMywyOCBAQAogCiAJLyogUE1DIHN0dWZmICovCiAJc3dpdGNoIChjdXJfY3B1X3NwZWMtPnBtY190eXBlKSB7CisjaWZkZWYgSEFTX1BQQ19QTUNfSUJNCiAJY2FzZSBQUENfUE1DX0lCTToKIAkJYXR0cnMgPSBpYm1fY29tbW9uX2F0dHJzOwogCQluYXR0cnMgPSBzaXplb2YoaWJtX2NvbW1vbl9hdHRycykgLyBzaXplb2Yoc3RydWN0IHN5c2Rldl9hdHRyaWJ1dGUpOwotCQlwbWNfYXR0cnMgPSBpYm1fcG1jX2F0dHJzOworCQlwbWNfYXR0cnMgPSBjbGFzc2ljX3BtY19hdHRyczsKIAkJYnJlYWs7CisjZW5kaWYgLyogSEFTX1BQQ19QTUNfSUJNICovCisjaWZkZWYgSEFTX1BQQ19QTUNfRzQKKwljYXNlIFBQQ19QTUNfRzQ6CisJCWF0dHJzID0gZzRfY29tbW9uX2F0dHJzOworCQluYXR0cnMgPSBzaXplb2YoZzRfY29tbW9uX2F0dHJzKSAvIHNpemVvZihzdHJ1Y3Qgc3lzZGV2X2F0dHJpYnV0ZSk7CisJCXBtY19hdHRycyA9IGNsYXNzaWNfcG1jX2F0dHJzOworCQlicmVhazsKKyNlbmRpZiAvKiBIQVNfUFBDX1BNQ19HNCAqLworI2lmZGVmIEhBU19QUENfUE1DX1BBNlQKIAljYXNlIFBQQ19QTUNfUEE2VDoKIAkJLyogUEEgU2VtaSBzdGFydHMgY291bnRpbmcgYXQgUE1DMCAqLwogCQlhdHRycyA9IHBhNnRfYXR0cnM7CiAJCW5hdHRycyA9IHNpemVvZihwYTZ0X2F0dHJzKSAvIHNpemVvZihzdHJ1Y3Qgc3lzZGV2X2F0dHJpYnV0ZSk7CiAJCXBtY19hdHRycyA9IE5VTEw7CiAJCWJyZWFrOworI2VuZGlmIC8qIEhBU19QUENfUE1DX1BBNlQgKi8KIAlkZWZhdWx0OgogCQlhdHRycyA9IE5VTEw7CiAJCW5hdHRycyA9IDA7CkBAIC02OTUsNiArNzU4LDcgQEAKIAkJZm9yIChpID0gMDsgaSA8IGN1cl9jcHVfc3BlYy0+bnVtX3BtY3M7IGkrKykKIAkJCXN5c2Rldl9yZW1vdmVfZmlsZShzLCAmcG1jX2F0dHJzW2ldKTsKIAorI2lmZGVmIENPTkZJR19QUEM2NAogCWlmIChjcHVfaGFzX2ZlYXR1cmUoQ1BVX0ZUUl9NTUNSQSkpCiAJCXN5c2Rldl9yZW1vdmVfZmlsZShzLCAmYXR0cl9tbWNyYSk7CiAKQEAgLTcwNiw2ICs3NzAsNyBAQAogCiAJaWYgKGNwdV9oYXNfZmVhdHVyZShDUFVfRlRSX0RTQ1IpKQogCQlzeXNkZXZfcmVtb3ZlX2ZpbGUocywgJmF0dHJfZHNjcik7CisjZW5kaWYgLyogQ09ORklHX1BQQzY0ICovCiAKIAlyZW1vdmVfY2FjaGVfaW5mbyhzKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvdHJhcHMuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvdHJhcHMuYwppbmRleCA4MWNjYjhkZC4uZjVkZWY2YyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC90cmFwcy5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvdHJhcHMuYwpAQCAtMjMsNyArMjMsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3B0cmFjZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC91c2VyLmg+Ci0jaW5jbHVkZSA8bGludXgvYS5vdXQuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3Zpby5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC92aW8uYwppbmRleCAyNzUwZmJhLi40MzRjOTJhIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3Zpby5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvdmlvLmMKQEAgLTEyMzIsNyArMTIzMiw3IEBACiAJZWxzZQogCQl2aW9kZXYtPmRldi5hcmNoZGF0YS5kbWFfb3BzID0gJmRtYV9pb21tdV9vcHM7CiAJdmlvZGV2LT5kZXYuYXJjaGRhdGEuZG1hX2RhdGEgPSB2aW9fYnVpbGRfaW9tbXVfdGFibGUodmlvZGV2KTsKLQl2aW9kZXYtPmRldi5hcmNoZGF0YS5udW1hX25vZGUgPSBvZl9ub2RlX3RvX25pZChvZl9ub2RlKTsKKwlzZXRfZGV2X25vZGUoJnZpb2Rldi0+ZGV2LCBvZl9ub2RlX3RvX25pZChvZl9ub2RlKSk7CiAKIAkvKiBpbml0IGdlbmVyaWMgJ3N0cnVjdCBkZXZpY2UnIGZpZWxkczogKi8KIAl2aW9kZXYtPmRldi5wYXJlbnQgPSAmdmlvX2J1c19kZXZpY2UuZGV2OwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC92bWxpbnV4Lmxkcy5TIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC92bWxpbnV4Lmxkcy5TCmluZGV4IDlmNmMxY2EuLmIzOWMyN2UgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvdm1saW51eC5sZHMuUworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3ZtbGludXgubGRzLlMKQEAgLTE4Nyw2ICsxODcsMjQgQEAKIAkJKigubWFjaGluZS5kZXNjKQogCQlfX21hY2hpbmVfZGVzY19lbmQgPSAuIDsKIAl9CisJLiA9IEFMSUdOKDgpOworCS5keW5zeW0gOiBBVChBRERSKC5keW5zeW0pIC0gTE9BRF9PRkZTRVQpIHsgKiguZHluc3ltKSB9CisJLmR5bnN0ciA6IEFUKEFERFIoLmR5bnN0cikgLSBMT0FEX09GRlNFVCkgeyAqKC5keW5zdHIpIH0KKwkuZHluYW1pYyA6IEFUKEFERFIoLmR5bmFtaWMpIC0gTE9BRF9PRkZTRVQpCisJeworCQlfX2R5bmFtaWNfc3RhcnQgPSAuOworCQkqKC5keW5hbWljKQorCX0KKwkuaGFzaCA6IEFUKEFERFIoLmhhc2gpIC0gTE9BRF9PRkZTRVQpIHsgKiguaGFzaCkgfQorCS5pbnRlcnAgOiBBVChBRERSKC5pbnRlcnApIC0gTE9BRF9PRkZTRVQpIHsgKiguaW50ZXJwKSB9CisJLnJlbGEuZHluIDogQVQoQUREUigucmVsYS5keW4pIC0gTE9BRF9PRkZTRVQpCisJeworCQlfX3JlbGFfZHluX3N0YXJ0ID0gLjsKKwkJKigucmVsYSopCisJfQorCisJLyogRmFrZSBFTEYgaGVhZGVyIGNvbnRhaW5pbmcgUlBBIG5vdGU7IGZvciBhZGRub3RlICovCisJLmZha2VlbGYgOiBBVChBRERSKC5mYWtlZWxmKSAtIExPQURfT0ZGU0VUKSB7ICooLmZha2VlbGYpIH0KIAogCS8qIGZyZWVkIGFmdGVyIGluaXQgZW5kcyBoZXJlICovCiAJLiA9IEFMSUdOKFBBR0VfU0laRSk7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva3ZtLzQ0eF90bGIuYyBiL2FyY2gvcG93ZXJwYy9rdm0vNDR4X3RsYi5jCmluZGV4IDVhNTYwMmQuLjJlMjI3YTQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rdm0vNDR4X3RsYi5jCisrKyBiL2FyY2gvcG93ZXJwYy9rdm0vNDR4X3RsYi5jCkBAIC0xOSw2ICsxOSw3IEBACiAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUgPGxpbnV4L2t2bS5oPgogI2luY2x1ZGUgPGxpbnV4L2t2bV9ob3N0Lmg+CiAjaW5jbHVkZSA8bGludXgvaGlnaG1lbS5oPgogI2luY2x1ZGUgPGFzbS9tbXUtNDR4Lmg+CkBAIC0xMDksNyArMTEwLDYgQEAKIAlyZXR1cm4gdGxiZS0+d29yZDIgJiAoUFBDNDR4X1RMQl9TV3xQUEM0NHhfVExCX1VXKTsKIH0KIAotLyogTXVzdCBiZSBjYWxsZWQgd2l0aCBtbWFwX3NlbSBsb2NrZWQgZm9yIHdyaXRpbmcuICovCiBzdGF0aWMgdm9pZCBrdm1wcGNfNDR4X3NoYWRvd19yZWxlYXNlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGluZGV4KQogewpAQCAtMTI0LDYgKzEyNCwxMSBAQAogCX0KIH0KIAordm9pZCBrdm1wcGNfdGxiZV9zZXRfbW9kaWZpZWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBpbnQgaSkKK3sKKyAgICB2Y3B1LT5hcmNoLnNoYWRvd190bGJfbW9kW2ldID0gMTsKK30KKwogLyogQ2FsbGVyIG11c3QgZW5zdXJlIHRoYXQgdGhlIHNwZWNpZmllZCBndWVzdCBUTEIgZW50cnkgaXMgc2FmZSB0byBpbnNlcnQgaW50bwogICogdGhlIHNoYWRvdyBUTEIuICovCiB2b2lkIGt2bXBwY19tbXVfbWFwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IGd2YWRkciwgZ2ZuX3QgZ2ZuLCB1NjQgYXNpZCwKQEAgLTE0MiwxOSArMTQ3LDE2IEBACiAJc3RsYmUgPSAmdmNwdS0+YXJjaC5zaGFkb3dfdGxiW3ZpY3RpbV07CiAKIAkvKiBHZXQgcmVmZXJlbmNlIHRvIG5ldyBwYWdlLiAqLwotCWRvd25fcmVhZCgmY3VycmVudC0+bW0tPm1tYXBfc2VtKTsKIAluZXdfcGFnZSA9IGdmbl90b19wYWdlKHZjcHUtPmt2bSwgZ2ZuKTsKIAlpZiAoaXNfZXJyb3JfcGFnZShuZXdfcGFnZSkpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJDb3VsZG4ndCBnZXQgZ3Vlc3QgcGFnZSBmb3IgZ2ZuICVseCFcbiIsIGdmbik7CiAJCWt2bV9yZWxlYXNlX3BhZ2VfY2xlYW4obmV3X3BhZ2UpOwotCQl1cF9yZWFkKCZjdXJyZW50LT5tbS0+bW1hcF9zZW0pOwogCQlyZXR1cm47CiAJfQogCWhwYWRkciA9IHBhZ2VfdG9fcGh5cyhuZXdfcGFnZSk7CiAKIAkvKiBEcm9wIHJlZmVyZW5jZSB0byBvbGQgcGFnZS4gKi8KIAlrdm1wcGNfNDR4X3NoYWRvd19yZWxlYXNlKHZjcHUsIHZpY3RpbSk7Ci0JdXBfcmVhZCgmY3VycmVudC0+bW0tPm1tYXBfc2VtKTsKIAogCXZjcHUtPmFyY2guc2hhZG93X3BhZ2VzW3ZpY3RpbV0gPSBuZXdfcGFnZTsKIApAQCAtMTY0LDI3ICsxNjYsMzAgQEAKIAogCS8qIFhYWCB3aGF0IGFib3V0IEFTPyAqLwogCi0Jc3RsYmUtPnRpZCA9IGFzaWQgJiAweGZmOworCXN0bGJlLT50aWQgPSAhKGFzaWQgJiAweGZmKTsKIAogCS8qIEZvcmNlIFRTPTEgZm9yIGFsbCBndWVzdCBtYXBwaW5ncy4gKi8KIAkvKiBGb3Igbm93IHdlIGhhcmRjb2RlIDRLQiBtYXBwaW5ncywgYnV0IGl0IHdpbGwgYmUgaW1wb3J0YW50IHRvCiAJICogdXNlIGhvc3QgbGFyZ2UgcGFnZXMgaW4gdGhlIGZ1dHVyZS4gKi8KIAlzdGxiZS0+d29yZDAgPSAoZ3ZhZGRyICYgUEFHRV9NQVNLKSB8IFBQQzQ0eF9UTEJfVkFMSUQgfCBQUEM0NHhfVExCX1RTCiAJICAgICAgICAgICAgICAgfCBQUEM0NHhfVExCXzRLOwotCiAJc3RsYmUtPndvcmQxID0gKGhwYWRkciAmIDB4ZmZmZmZjMDApIHwgKChocGFkZHIgPj4gMzIpICYgMHhmKTsKIAlzdGxiZS0+d29yZDIgPSBrdm1wcGNfNDR4X3RsYl9zaGFkb3dfYXR0cmliKGZsYWdzLAogCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmNwdS0+YXJjaC5tc3IgJiBNU1JfUFIpOworCWt2bXBwY190bGJlX3NldF9tb2RpZmllZCh2Y3B1LCB2aWN0aW0pOworCisJS1ZNVFJBQ0VfNUQoU1RMQl9XUklURSwgdmNwdSwgdmljdGltLAorCQkJc3RsYmUtPnRpZCwgc3RsYmUtPndvcmQwLCBzdGxiZS0+d29yZDEsIHN0bGJlLT53b3JkMiwKKwkJCWhhbmRsZXIpOwogfQogCiB2b2lkIGt2bXBwY19tbXVfaW52YWxpZGF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGd2YV90IGVhZGRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3ZhX3QgZWVuZCwgdTMyIGFzaWQpCiB7Ci0JdW5zaWduZWQgaW50IHBpZCA9IGFzaWQgJiAweGZmOworCXVuc2lnbmVkIGludCBwaWQgPSAhKGFzaWQgJiAweGZmKTsKIAlpbnQgaTsKIAogCS8qIFhYWCBSZXBsYWNlIGxvb3Agd2l0aCBmYW5jeSBkYXRhIHN0cnVjdHVyZXMuICovCi0JZG93bl93cml0ZSgmY3VycmVudC0+bW0tPm1tYXBfc2VtKTsKIAlmb3IgKGkgPSAwOyBpIDw9IHRsYl80NHhfaHdhdGVyOyBpKyspIHsKIAkJc3RydWN0IHRsYmUgKnN0bGJlID0gJnZjcHUtPmFyY2guc2hhZG93X3RsYltpXTsKIAkJdW5zaWduZWQgaW50IHRpZDsKQEAgLTIwNCwyMSArMjA5LDM1IEBACiAKIAkJa3ZtcHBjXzQ0eF9zaGFkb3dfcmVsZWFzZSh2Y3B1LCBpKTsKIAkJc3RsYmUtPndvcmQwID0gMDsKKwkJa3ZtcHBjX3RsYmVfc2V0X21vZGlmaWVkKHZjcHUsIGkpOworCQlLVk1UUkFDRV81RChTVExCX0lOVkFMLCB2Y3B1LCBpLAorCQkJCXN0bGJlLT50aWQsIHN0bGJlLT53b3JkMCwgc3RsYmUtPndvcmQxLAorCQkJCXN0bGJlLT53b3JkMiwgaGFuZGxlcik7CiAJfQotCXVwX3dyaXRlKCZjdXJyZW50LT5tbS0+bW1hcF9zZW0pOwogfQogCi0vKiBJbnZhbGlkYXRlIGFsbCBtYXBwaW5ncywgc28gdGhhdCB3aGVuIHRoZXkgZmF1bHQgYmFjayBpbiB0aGV5IHdpbGwgZ2V0IHRoZQotICogcHJvcGVyIHBlcm1pc3Npb24gYml0cy4gKi8KKy8qIEludmFsaWRhdGUgYWxsIG1hcHBpbmdzIG9uIHRoZSBwcml2aWxlZ2Ugc3dpdGNoIGFmdGVyIFBJRCBoYXMgYmVlbiBjaGFuZ2VkLgorICogVGhlIGd1ZXN0IGFsd2F5cyBydW5zIHdpdGggUElEPTEsIHNvIHdlIG11c3QgY2xlYXIgdGhlIGVudGlyZSBUTEIgd2hlbgorICogc3dpdGNoaW5nIGFkZHJlc3Mgc3BhY2VzLiAqLwogdm9pZCBrdm1wcGNfbW11X3ByaXZfc3dpdGNoKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IHVzZXJtb2RlKQogewogCWludCBpOwogCi0JLyogWFhYIFJlcGxhY2UgbG9vcCB3aXRoIGZhbmN5IGRhdGEgc3RydWN0dXJlcy4gKi8KLQlkb3duX3dyaXRlKCZjdXJyZW50LT5tbS0+bW1hcF9zZW0pOwotCWZvciAoaSA9IDA7IGkgPD0gdGxiXzQ0eF9od2F0ZXI7IGkrKykgewotCQlrdm1wcGNfNDR4X3NoYWRvd19yZWxlYXNlKHZjcHUsIGkpOwotCQl2Y3B1LT5hcmNoLnNoYWRvd190bGJbaV0ud29yZDAgPSAwOworCWlmICh2Y3B1LT5hcmNoLnN3YXBfcGlkKSB7CisJCS8qIFhYWCBSZXBsYWNlIGxvb3Agd2l0aCBmYW5jeSBkYXRhIHN0cnVjdHVyZXMuICovCisJCWZvciAoaSA9IDA7IGkgPD0gdGxiXzQ0eF9od2F0ZXI7IGkrKykgeworCQkJc3RydWN0IHRsYmUgKnN0bGJlID0gJnZjcHUtPmFyY2guc2hhZG93X3RsYltpXTsKKworCQkJLyogRnV0dXJlIG9wdGltaXphdGlvbjogY2xlYXIgb25seSB1c2Vyc3BhY2UgbWFwcGluZ3MuICovCisJCQlrdm1wcGNfNDR4X3NoYWRvd19yZWxlYXNlKHZjcHUsIGkpOworCQkJc3RsYmUtPndvcmQwID0gMDsKKwkJCWt2bXBwY190bGJlX3NldF9tb2RpZmllZCh2Y3B1LCBpKTsKKwkJCUtWTVRSQUNFXzVEKFNUTEJfSU5WQUwsIHZjcHUsIGksCisJCQkgICAgICAgICAgICBzdGxiZS0+dGlkLCBzdGxiZS0+d29yZDAsIHN0bGJlLT53b3JkMSwKKwkJCSAgICAgICAgICAgIHN0bGJlLT53b3JkMiwgaGFuZGxlcik7CisJCX0KKwkJdmNwdS0+YXJjaC5zd2FwX3BpZCA9IDA7CiAJfQotCXVwX3dyaXRlKCZjdXJyZW50LT5tbS0+bW1hcF9zZW0pOworCisJdmNwdS0+YXJjaC5zaGFkb3dfcGlkID0gIXVzZXJtb2RlOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnIGIvYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnCmluZGV4IDZiMDc2MDEuLjUzYWFhNjYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZworKysgYi9hcmNoL3Bvd2VycGMva3ZtL0tjb25maWcKQEAgLTM3LDYgKzM3LDE3IEBACiAJICBQcm92aWRlcyBob3N0IHN1cHBvcnQgZm9yIEtWTSBvbiBCb29rIEUgUG93ZXJQQyBwcm9jZXNzb3JzLiBDdXJyZW50bHkKIAkgIHRoaXMgd29ya3Mgb24gNDQwIHByb2Nlc3NvcnMgb25seS4KIAorY29uZmlnIEtWTV9UUkFDRQorCWJvb2wgIktWTSB0cmFjZSBzdXBwb3J0IgorCWRlcGVuZHMgb24gS1ZNICYmIE1BUktFUlMgJiYgU1lTRlMKKwlzZWxlY3QgUkVMQVkKKwlzZWxlY3QgREVCVUdfRlMKKwlkZWZhdWx0IG4KKwktLS1oZWxwLS0tCisJICBUaGlzIG9wdGlvbiBhbGxvd3MgcmVhZGluZyBhIHRyYWNlIG9mIGt2bS1yZWxhdGVkIGV2ZW50cyB0aHJvdWdoCisJICByZWxheWZzLiAgTm90ZSB0aGUgQUJJIGlzIG5vdCBjb25zaWRlcmVkIHN0YWJsZSBhbmQgd2lsbCBiZQorCSAgbW9kaWZpZWQgaW4gZnV0dXJlIHVwZGF0ZXMuCisKIHNvdXJjZSBkcml2ZXJzL3ZpcnRpby9LY29uZmlnCiAKIGVuZGlmICMgVklSVFVBTElaQVRJT04KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rdm0vTWFrZWZpbGUgYi9hcmNoL3Bvd2VycGMva3ZtL01ha2VmaWxlCmluZGV4IDA0ZTM0NDkuLjJhNWQ0MzkgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rdm0vTWFrZWZpbGUKKysrIGIvYXJjaC9wb3dlcnBjL2t2bS9NYWtlZmlsZQpAQCAtNCw5ICs0LDExIEBACiAKIEVYVFJBX0NGTEFHUyArPSAtSXZpcnQva3ZtIC1JYXJjaC9wb3dlcnBjL2t2bQogCi1jb21tb24tb2JqcyA9ICQoYWRkcHJlZml4IC4uLy4uLy4uL3ZpcnQva3ZtLywga3ZtX21haW4ubyBjb2FsZXNjZWRfbW1pby5vKQorY29tbW9uLW9ianMteSA9ICQoYWRkcHJlZml4IC4uLy4uLy4uL3ZpcnQva3ZtLywga3ZtX21haW4ubyBjb2FsZXNjZWRfbW1pby5vKQogCi1rdm0tb2JqcyA6PSAkKGNvbW1vbi1vYmpzKSBwb3dlcnBjLm8gZW11bGF0ZS5vIGJvb2tlX2d1ZXN0Lm8KK2NvbW1vbi1vYmpzLSQoQ09ORklHX0tWTV9UUkFDRSkgICs9ICQoYWRkcHJlZml4IC4uLy4uLy4uL3ZpcnQva3ZtLywga3ZtX3RyYWNlLm8pCisKK2t2bS1vYmpzIDo9ICQoY29tbW9uLW9ianMteSkgcG93ZXJwYy5vIGVtdWxhdGUubyBib29rZV9ndWVzdC5vCiBvYmotJChDT05GSUdfS1ZNKSArPSBrdm0ubwogCiBBRkxBR1NfYm9va2VfaW50ZXJydXB0cy5vIDo9IC1JJChvYmopCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva3ZtL2Jvb2tlX2d1ZXN0LmMgYi9hcmNoL3Bvd2VycGMva3ZtL2Jvb2tlX2d1ZXN0LmMKaW5kZXggOWM4YWQ4NS4uN2IyNTkxZSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2t2bS9ib29rZV9ndWVzdC5jCisrKyBiL2FyY2gvcG93ZXJwYy9rdm0vYm9va2VfZ3Vlc3QuYwpAQCAtNDEwLDYgKzQxMCwyMSBAQAogCQlicmVhazsKIAl9CiAKKwljYXNlIEJPT0tFX0lOVEVSUlVQVF9ERUJVRzogeworCQl1MzIgZGJzcjsKKworCQl2Y3B1LT5hcmNoLnBjID0gbWZzcHIoU1BSTl9DU1JSMCk7CisKKwkJLyogY2xlYXIgSUFDIGV2ZW50cyBpbiBEQlNSIHJlZ2lzdGVyICovCisJCWRic3IgPSBtZnNwcihTUFJOX0RCU1IpOworCQlkYnNyICY9IERCU1JfSUFDMSB8IERCU1JfSUFDMiB8IERCU1JfSUFDMyB8IERCU1JfSUFDNDsKKwkJbXRzcHIoU1BSTl9EQlNSLCBkYnNyKTsKKworCQlydW4tPmV4aXRfcmVhc29uID0gS1ZNX0VYSVRfREVCVUc7CisJCXIgPSBSRVNVTUVfSE9TVDsKKwkJYnJlYWs7CisJfQorCiAJZGVmYXVsdDoKIAkJcHJpbnRrKEtFUk5fRU1FUkcgImV4aXRfbnIgJWRcbiIsIGV4aXRfbnIpOwogCQlCVUcoKTsKQEAgLTQ3MSw2ICs0ODYsOCBAQAogCXZjcHUtPmFyY2gubXNyID0gMDsKIAl2Y3B1LT5hcmNoLmdwclsxXSA9ICgxNjw8MjApIC0gODsgLyogLTggZm9yIHRoZSBjYWxsZWUtc2F2ZSBMUiBzbG90ICovCiAKKwl2Y3B1LT5hcmNoLnNoYWRvd19waWQgPSAxOworCiAJLyogRXllLWNhdGNoaW5nIG51bWJlciBzbyB3ZSBrbm93IGlmIHRoZSBndWVzdCB0YWtlcyBhbiBpbnRlcnJ1cHQKIAkgKiBiZWZvcmUgaXQncyBwcm9ncmFtbWVkIGl0cyBvd24gSVZQUi4gKi8KIAl2Y3B1LT5hcmNoLml2cHIgPSAweDU1NTUwMDAwOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2t2bS9ib29rZV9pbnRlcnJ1cHRzLlMgYi9hcmNoL3Bvd2VycGMva3ZtL2Jvb2tlX2ludGVycnVwdHMuUwppbmRleCAzYjY1M2I1Li45NWUxNjViIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva3ZtL2Jvb2tlX2ludGVycnVwdHMuUworKysgYi9hcmNoL3Bvd2VycGMva3ZtL2Jvb2tlX2ludGVycnVwdHMuUwpAQCAtNDIsNyArNDIsOCBAQAogI2RlZmluZSBIT1NUX1NUQUNLX0xSICAgKEhPU1RfU1RBQ0tfU0laRSArIDQpIC8qIEluIGNhbGxlciBzdGFjayBmcmFtZS4gKi8KIAogI2RlZmluZSBORUVEX0lOU1RfTUFTSyAoKDE8PEJPT0tFX0lOVEVSUlVQVF9QUk9HUkFNKSB8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICgxPDxCT09LRV9JTlRFUlJVUFRfRFRMQl9NSVNTKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICgxPDxCT09LRV9JTlRFUlJVUFRfRFRMQl9NSVNTKSB8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICgxPDxCT09LRV9JTlRFUlJVUFRfREVCVUcpKQogCiAjZGVmaW5lIE5FRURfREVBUl9NQVNLICgoMTw8Qk9PS0VfSU5URVJSVVBUX0RBVEFfU1RPUkFHRSkgfCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAoMTw8Qk9PS0VfSU5URVJSVVBUX0RUTEJfTUlTUykpCkBAIC0zMzEsNTAgKzMzMiw1NiBAQAogCiAJbWZzcHIJcjMsIFNQUk5fUElECiAJc3R3CXIzLCBWQ1BVX0hPU1RfUElEKHI0KQotCWx3eglyMywgVkNQVV9QSUQocjQpCisJbHd6CXIzLCBWQ1BVX1NIQURPV19QSUQocjQpCiAJbXRzcHIJU1BSTl9QSUQsIHIzCiAKLQkvKiBQcmV2ZW50IGFsbCBUTEIgdXBkYXRlcy4gKi8KKwkvKiBQcmV2ZW50IGFsbCBhc3luY2hyb25vdXMgVExCIHVwZGF0ZXMuICovCiAJbWZtc3IJcjUKIAlsaXMJcjYsIChNU1JfRUV8TVNSX0NFfE1TUl9NRXxNU1JfREUpQGgKIAlvcmkJcjYsIHI2LCAoTVNSX0VFfE1TUl9DRXxNU1JfTUV8TVNSX0RFKUBsCiAJYW5kYwlyNiwgcjUsIHI2CiAJbXRtc3IJcjYKIAotCS8qIFNhdmUgdGhlIGhvc3QncyBub24tcGlubmVkIFRMQiBtYXBwaW5ncywgYW5kIGxvYWQgdGhlIGd1ZXN0IG1hcHBpbmdzCi0JICogb3ZlciB0aGVtLiBMZWF2ZSB0aGUgaG9zdCdzICJwaW5uZWQiIGtlcm5lbCBtYXBwaW5ncyBpbiBwbGFjZS4gKi8KLQkvKiBYWFggb3B0aW1pemF0aW9uOiB1c2UgZ2VuZXJhdGlvbiBjb3VudCB0byBhdm9pZCBzd2FwcGluZyB1bm1vZGlmaWVkCi0JICogZW50cmllcy4gKi8KKwkvKiBMb2FkIHRoZSBndWVzdCBtYXBwaW5ncywgbGVhdmluZyB0aGUgaG9zdCdzICJwaW5uZWQiIGtlcm5lbCBtYXBwaW5ncworCSAqIGluIHBsYWNlLiAqLwogCW1mc3ByCXIxMCwgU1BSTl9NTVVDUgkJCS8qIFNhdmUgaG9zdCBNTVVDUi4gKi8KLQlsaXMJcjgsIHRsYl80NHhfaHdhdGVyQGhhCi0JbHd6CXI4LCB0bGJfNDR4X2h3YXRlckBsKHI4KQotCWFkZGkJcjMsIHI0LCBWQ1BVX0hPU1RfVExCIC0gNAotCWFkZGkJcjksIHI0LCBWQ1BVX1NIQURPV19UTEIgLSA0CisJbGkJcjUsIFBQQzQ0eF9UTEJfU0laRQorCWxpcwlyNSwgdGxiXzQ0eF9od2F0ZXJAaGEKKwlsd3oJcjUsIHRsYl80NHhfaHdhdGVyQGwocjUpCisJbXRjdHIJcjUKKwlhZGRpCXI5LCByNCwgVkNQVV9TSEFET1dfVExCCisJYWRkaQlyNSwgcjQsIFZDUFVfU0hBRE9XX01PRAorCWxpCXIzLCAwCisxOgorCWxiengJcjcsIHIzLCByNQorCWNtcHdpCXI3LCAwCisJYmVxCTNmCisKKwkvKiBMb2FkIGd1ZXN0IGVudHJ5LiAqLworCW11bGxpCXIxMSwgcjMsIFRMQkVfQllURVMKKwlhZGQJcjExLCByMTEsIHI5CisJbHd6CXI3LCAwKHIxMSkKKwltdHNwcglTUFJOX01NVUNSLCByNworCWx3eglyNywgNChyMTEpCisJdGxid2UJcjcsIHIzLCBQUEM0NHhfVExCX1BBR0VJRAorCWx3eglyNywgOChyMTEpCisJdGxid2UJcjcsIHIzLCBQUEM0NHhfVExCX1hMQVQKKwlsd3oJcjcsIDEyKHIxMSkKKwl0bGJ3ZQlyNywgcjMsIFBQQzQ0eF9UTEJfQVRUUklCCiszOgorCWFkZGkJcjMsIHIzLCAxICAgICAgICAgICAgICAgICAgICAgICAvKiBJbmNyZW1lbnQgaW5kZXguICovCisJYmRuegkxYgorCisJbXRzcHIJU1BSTl9NTVVDUiwgcjEwCQkJLyogUmVzdG9yZSBob3N0IE1NVUNSLiAqLworCisJLyogQ2xlYXIgYml0bWFwIG9mIG1vZGlmaWVkIFRMQiBlbnRyaWVzICovCisJbGkJcjUsIFBQQzQ0eF9UTEJfU0laRT4+MgorCW10Y3RyCXI1CisJYWRkaQlyNSwgcjQsIFZDUFVfU0hBRE9XX01PRCAtIDQKIAlsaQlyNiwgMAogMToKLQkvKiBTYXZlIGhvc3QgZW50cnkuICovCi0JdGxicmUJcjcsIHI2LCBQUEM0NHhfVExCX1BBR0VJRAotCW1mc3ByCXI1LCBTUFJOX01NVUNSCi0Jc3R3dQlyNSwgNChyMykKLQlzdHd1CXI3LCA0KHIzKQotCXRsYnJlCXI3LCByNiwgUFBDNDR4X1RMQl9YTEFUCi0Jc3R3dQlyNywgNChyMykKLQl0bGJyZQlyNywgcjYsIFBQQzQ0eF9UTEJfQVRUUklCCi0Jc3R3dQlyNywgNChyMykKLQkvKiBMb2FkIGd1ZXN0IGVudHJ5LiAqLwotCWx3enUJcjcsIDQocjkpCi0JbXRzcHIJU1BSTl9NTVVDUiwgcjcKLQlsd3p1CXI3LCA0KHI5KQotCXRsYndlCXI3LCByNiwgUFBDNDR4X1RMQl9QQUdFSUQKLQlsd3p1CXI3LCA0KHI5KQotCXRsYndlCXI3LCByNiwgUFBDNDR4X1RMQl9YTEFUCi0JbHd6dQlyNywgNChyOSkKLQl0bGJ3ZQlyNywgcjYsIFBQQzQ0eF9UTEJfQVRUUklCCi0JLyogSW5jcmVtZW50IGluZGV4LiAqLwotCWFkZGkJcjYsIHI2LCAxCi0JY21wdwlyNiwgcjgKLQlibHQJMWIKLQltdHNwcglTUFJOX01NVUNSLCByMTAJCQkvKiBSZXN0b3JlIGhvc3QgTU1VQ1IuICovCisJc3R3dQlyNiwgNChyNSkKKwliZG56CTFiCiAKIAlpY2NjaQkwLCAwIC8qIFhYWCBoYWNrICovCiAKQEAgLTQzMSw2ICs0MzgsMTQgQEAKIAlvcmlzCXIzLCByMywgS1ZNUFBDX01TUl9NQVNLQGgKIAlvcmkJcjMsIHIzLCBLVk1QUENfTVNSX01BU0tAbAogCW10c3JyMQlyMworCisJLyogQ2xlYXIgYW55IGRlYnVnIGV2ZW50cyB3aGljaCBvY2N1cnJlZCBzaW5jZSB3ZSBkaXNhYmxlZCBNU1JbREVdLgorCSAqIFhYWCBUaGlzIGdpdmVzIHVzIGEgMy1pbnN0cnVjdGlvbiB3aW5kb3cgaW4gd2hpY2ggYSBicmVha3BvaW50CisJICogaW50ZW5kZWQgZm9yIGd1ZXN0IGNvbnRleHQgY291bGQgZmlyZSBpbiB0aGUgaG9zdCBpbnN0ZWFkLiAqLworCWxpcwlyMywgMHhmZmZmCisJb3JpCXIzLCByMywgMHhmZmZmCisJbXRzcHIJU1BSTl9EQlNSLCByMworCiAJbHd6CXIzLCBWQ1BVX0dQUihyMykocjQpCiAJbHd6CXI0LCBWQ1BVX0dQUihyNCkocjQpCiAJcmZpCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva3ZtL2VtdWxhdGUuYyBiL2FyY2gvcG93ZXJwYy9rdm0vZW11bGF0ZS5jCmluZGV4IDhjNjA1ZDAuLjBmY2U0ZmIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rdm0vZW11bGF0ZS5jCisrKyBiL2FyY2gvcG93ZXJwYy9rdm0vZW11bGF0ZS5jCkBAIC0xNzAsNiArMTcwLDEwIEBACiAJCWt2bXBwY19tbXVfbWFwKHZjcHUsIGVhZGRyLCByYWRkciA+PiBQQUdFX1NISUZULCBhc2lkLCBmbGFncyk7CiAJfQogCisJS1ZNVFJBQ0VfNUQoR1RMQl9XUklURSwgdmNwdSwgaW5kZXgsCisJCQl0bGJlLT50aWQsIHRsYmUtPndvcmQwLCB0bGJlLT53b3JkMSwgdGxiZS0+d29yZDIsCisJCQloYW5kbGVyKTsKKwogCXJldHVybiBFTVVMQVRFX0RPTkU7CiB9CiAKQEAgLTUwNCw3ICs1MDgsNyBAQAogCQkJY2FzZSBTUFJOX01NVUNSOgogCQkJCXZjcHUtPmFyY2gubW11Y3IgPSB2Y3B1LT5hcmNoLmdwcltyc107IGJyZWFrOwogCQkJY2FzZSBTUFJOX1BJRDoKLQkJCQl2Y3B1LT5hcmNoLnBpZCA9IHZjcHUtPmFyY2guZ3ByW3JzXTsgYnJlYWs7CisJCQkJa3ZtcHBjX3NldF9waWQodmNwdSwgdmNwdS0+YXJjaC5ncHJbcnNdKTsgYnJlYWs7CiAJCQljYXNlIFNQUk5fQ0NSMDoKIAkJCQl2Y3B1LT5hcmNoLmNjcjAgPSB2Y3B1LT5hcmNoLmdwcltyc107IGJyZWFrOwogCQkJY2FzZSBTUFJOX0NDUjE6CkBAIC03NjUsNiArNzY5LDggQEAKIAkJYnJlYWs7CiAJfQogCisJS1ZNVFJBQ0VfM0QoUFBDX0lOU1RSLCB2Y3B1LCBpbnN0LCB2Y3B1LT5hcmNoLnBjLCBlbXVsYXRlZCwgZW50cnlleGl0KTsKKwogCWlmIChhZHZhbmNlKQogCQl2Y3B1LT5hcmNoLnBjICs9IDQ7IC8qIEFkdmFuY2UgcGFzdCBlbXVsYXRlZCBpbnN0cnVjdGlvbi4gKi8KIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2t2bS9wb3dlcnBjLmMgYi9hcmNoL3Bvd2VycGMva3ZtL3Bvd2VycGMuYwppbmRleCA1MzgyNmE1Li45MGE2ZmM0IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva3ZtL3Bvd2VycGMuYworKysgYi9hcmNoL3Bvd2VycGMva3ZtL3Bvd2VycGMuYwpAQCAtMjcsNiArMjcsNyBAQAogI2luY2x1ZGUgPGFzbS9jcHV0YWJsZS5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8YXNtL2t2bV9wcGMuaD4KKyNpbmNsdWRlIDxhc20vdGxiZmx1c2guaD4KIAogCiBnZm5fdCB1bmFsaWFzX2dmbihzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IGdmbikKQEAgLTIzOSwxOCArMjQwLDExNCBAQAogewogfQogCisvKiBOb3RlOiBjbGVhcmluZyBNU1JbREVdIGp1c3QgbWVhbnMgdGhhdCB0aGUgZGVidWcgaW50ZXJydXB0IHdpbGwgbm90IGJlCisgKiBkZWxpdmVyZWQgKmltbWVkaWF0ZWx5Ki4gSW5zdGVhZCwgaXQgc2ltcGx5IHNldHMgdGhlIGFwcHJvcHJpYXRlIERCU1IgYml0cy4KKyAqIElmIHRob3NlIERCU1IgYml0cyBhcmUgc3RpbGwgc2V0IHdoZW4gTVNSW0RFXSBpcyByZS1lbmFibGVkLCB0aGUgaW50ZXJydXB0CisgKiB3aWxsIGJlIGRlbGl2ZXJlZCBhcyBhbiAiaW1wcmVjaXNlIGRlYnVnIGV2ZW50IiAod2hpY2ggaXMgaW5kaWNhdGVkIGJ5CisgKiBEQlNSW0lERV0uCisgKi8KK3N0YXRpYyB2b2lkIGt2bXBwY19kaXNhYmxlX2RlYnVnX2ludGVycnVwdHModm9pZCkKK3sKKwltdG1zcihtZm1zcigpICYgfk1TUl9ERSk7Cit9CisKK3N0YXRpYyB2b2lkIGt2bXBwY19yZXN0b3JlX2hvc3RfZGVidWdfc3RhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQoreworCWt2bXBwY19kaXNhYmxlX2RlYnVnX2ludGVycnVwdHMoKTsKKworCW10c3ByKFNQUk5fSUFDMSwgdmNwdS0+YXJjaC5ob3N0X2lhY1swXSk7CisJbXRzcHIoU1BSTl9JQUMyLCB2Y3B1LT5hcmNoLmhvc3RfaWFjWzFdKTsKKwltdHNwcihTUFJOX0lBQzMsIHZjcHUtPmFyY2guaG9zdF9pYWNbMl0pOworCW10c3ByKFNQUk5fSUFDNCwgdmNwdS0+YXJjaC5ob3N0X2lhY1szXSk7CisJbXRzcHIoU1BSTl9EQkNSMSwgdmNwdS0+YXJjaC5ob3N0X2RiY3IxKTsKKwltdHNwcihTUFJOX0RCQ1IyLCB2Y3B1LT5hcmNoLmhvc3RfZGJjcjIpOworCW10c3ByKFNQUk5fREJDUjAsIHZjcHUtPmFyY2guaG9zdF9kYmNyMCk7CisJbXRtc3IodmNwdS0+YXJjaC5ob3N0X21zcik7Cit9CisKK3N0YXRpYyB2b2lkIGt2bXBwY19sb2FkX2d1ZXN0X2RlYnVnX3JlZ2lzdGVycyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCit7CisJc3RydWN0IGt2bV9ndWVzdF9kZWJ1ZyAqZGJnID0gJnZjcHUtPmd1ZXN0X2RlYnVnOworCXUzMiBkYmNyMCA9IDA7CisKKwl2Y3B1LT5hcmNoLmhvc3RfbXNyID0gbWZtc3IoKTsKKwlrdm1wcGNfZGlzYWJsZV9kZWJ1Z19pbnRlcnJ1cHRzKCk7CisKKwkvKiBTYXZlIGhvc3QgZGVidWcgcmVnaXN0ZXIgc3RhdGUuICovCisJdmNwdS0+YXJjaC5ob3N0X2lhY1swXSA9IG1mc3ByKFNQUk5fSUFDMSk7CisJdmNwdS0+YXJjaC5ob3N0X2lhY1sxXSA9IG1mc3ByKFNQUk5fSUFDMik7CisJdmNwdS0+YXJjaC5ob3N0X2lhY1syXSA9IG1mc3ByKFNQUk5fSUFDMyk7CisJdmNwdS0+YXJjaC5ob3N0X2lhY1szXSA9IG1mc3ByKFNQUk5fSUFDNCk7CisJdmNwdS0+YXJjaC5ob3N0X2RiY3IwID0gbWZzcHIoU1BSTl9EQkNSMCk7CisJdmNwdS0+YXJjaC5ob3N0X2RiY3IxID0gbWZzcHIoU1BSTl9EQkNSMSk7CisJdmNwdS0+YXJjaC5ob3N0X2RiY3IyID0gbWZzcHIoU1BSTl9EQkNSMik7CisKKwkvKiBzZXQgcmVnaXN0ZXJzIHVwIGZvciBndWVzdCAqLworCisJaWYgKGRiZy0+YnBbMF0pIHsKKwkJbXRzcHIoU1BSTl9JQUMxLCBkYmctPmJwWzBdKTsKKwkJZGJjcjAgfD0gREJDUjBfSUFDMSB8IERCQ1IwX0lETTsKKwl9CisJaWYgKGRiZy0+YnBbMV0pIHsKKwkJbXRzcHIoU1BSTl9JQUMyLCBkYmctPmJwWzFdKTsKKwkJZGJjcjAgfD0gREJDUjBfSUFDMiB8IERCQ1IwX0lETTsKKwl9CisJaWYgKGRiZy0+YnBbMl0pIHsKKwkJbXRzcHIoU1BSTl9JQUMzLCBkYmctPmJwWzJdKTsKKwkJZGJjcjAgfD0gREJDUjBfSUFDMyB8IERCQ1IwX0lETTsKKwl9CisJaWYgKGRiZy0+YnBbM10pIHsKKwkJbXRzcHIoU1BSTl9JQUM0LCBkYmctPmJwWzNdKTsKKwkJZGJjcjAgfD0gREJDUjBfSUFDNCB8IERCQ1IwX0lETTsKKwl9CisKKwltdHNwcihTUFJOX0RCQ1IwLCBkYmNyMCk7CisJbXRzcHIoU1BSTl9EQkNSMSwgMCk7CisJbXRzcHIoU1BSTl9EQkNSMiwgMCk7Cit9CisKIHZvaWQga3ZtX2FyY2hfdmNwdV9sb2FkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IGNwdSkKIHsKKwlpbnQgaTsKKworCWlmICh2Y3B1LT5ndWVzdF9kZWJ1Zy5lbmFibGVkKQorCQlrdm1wcGNfbG9hZF9ndWVzdF9kZWJ1Z19yZWdpc3RlcnModmNwdSk7CisKKwkvKiBNYXJrIGV2ZXJ5IGd1ZXN0IGVudHJ5IGluIHRoZSBzaGFkb3cgVExCIGVudHJ5IG1vZGlmaWVkLCBzbyB0aGF0IHRoZXkKKwkgKiB3aWxsIGFsbCBiZSByZWxvYWRlZCBvbiB0aGUgbmV4dCB2Y3B1IHJ1biAoaW5zdGVhZCBvZiBiZWluZworCSAqIGRlbWFuZC1mYXVsdGVkKS4gKi8KKwlmb3IgKGkgPSAwOyBpIDw9IHRsYl80NHhfaHdhdGVyOyBpKyspCisJCWt2bXBwY190bGJlX3NldF9tb2RpZmllZCh2Y3B1LCBpKTsKIH0KIAogdm9pZCBrdm1fYXJjaF92Y3B1X3B1dChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7CisJaWYgKHZjcHUtPmd1ZXN0X2RlYnVnLmVuYWJsZWQpCisJCWt2bXBwY19yZXN0b3JlX2hvc3RfZGVidWdfc3RhdGUodmNwdSk7CisKKwkvKiBEb24ndCBsZWF2ZSBndWVzdCBUTEIgZW50cmllcyByZXNpZGVudCB3aGVuIGJlaW5nIGRlLXNjaGVkdWxlZC4gKi8KKwkvKiBYWFggSXQgd291bGQgYmUgbmljZSB0byBkaWZmZXJlbnRpYXRlIGJldHdlZW4gaGVhdnl3ZWlnaHQgZXhpdCBhbmQKKwkgKiBzY2hlZF9vdXQgaGVyZSwgc2luY2Ugd2UgY291bGQgYXZvaWQgdGhlIFRMQiBmbHVzaCBmb3IgaGVhdnl3ZWlnaHQKKwkgKiBleGl0cy4gKi8KKwlfdGxiaWEoKTsKIH0KIAogaW50IGt2bV9hcmNoX3ZjcHVfaW9jdGxfZGVidWdfZ3Vlc3Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGt2bV9kZWJ1Z19ndWVzdCAqZGJnKQogewotCXJldHVybiAtRU5PVFNVUFA7CisJaW50IGk7CisKKwl2Y3B1LT5ndWVzdF9kZWJ1Zy5lbmFibGVkID0gZGJnLT5lbmFibGVkOworCWlmICh2Y3B1LT5ndWVzdF9kZWJ1Zy5lbmFibGVkKSB7CisJCWZvciAoaT0wOyBpIDwgQVJSQVlfU0laRSh2Y3B1LT5ndWVzdF9kZWJ1Zy5icCk7IGkrKykgeworCQkJaWYgKGRiZy0+YnJlYWtwb2ludHNbaV0uZW5hYmxlZCkKKwkJCQl2Y3B1LT5ndWVzdF9kZWJ1Zy5icFtpXSA9IGRiZy0+YnJlYWtwb2ludHNbaV0uYWRkcmVzczsKKwkJCWVsc2UKKwkJCQl2Y3B1LT5ndWVzdF9kZWJ1Zy5icFtpXSA9IDA7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHZvaWQga3ZtcHBjX2NvbXBsZXRlX2Rjcl9sb2FkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9saWIvY29weXBhZ2VfNjQuUyBiL2FyY2gvcG93ZXJwYy9saWIvY29weXBhZ2VfNjQuUwppbmRleCBmOTgzN2Y0Li43NWYzMjY3IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvbGliL2NvcHlwYWdlXzY0LlMKKysrIGIvYXJjaC9wb3dlcnBjL2xpYi9jb3B5cGFnZV82NC5TCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMiBQYXVsIE1hY2tlcnJhcywgSUJNIENvcnAuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggTWFyayBOZWxzb24sIElCTSBDb3JwLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCkBAIC04LDExMiArOCwxMDAgQEAKICAqLwogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KICNpbmNsdWRlIDxhc20vcHBjX2FzbS5oPgorI2luY2x1ZGUgPGFzbS9hc20tb2Zmc2V0cy5oPgorCisgICAgICAgIC5zZWN0aW9uICAgICAgICAiLnRvYyIsImF3IgorUFBDNjRfQ0FDSEVTOgorICAgICAgICAudGMgICAgICAgICAgICAgcHBjNjRfY2FjaGVzW1RDXSxwcGM2NF9jYWNoZXMKKyAgICAgICAgLnNlY3Rpb24gICAgICAgICIudGV4dCIKKwogCiBfR0xPQkFMKGNvcHlfNEtfcGFnZSkKLQlzdGQJcjMxLC04KDEpCi0Jc3RkCXIzMCwtMTYoMSkKLQlzdGQJcjI5LC0yNCgxKQotCXN0ZAlyMjgsLTMyKDEpCi0Jc3RkCXIyNywtNDAoMSkKLQlzdGQJcjI2LC00OCgxKQotCXN0ZAlyMjUsLTU2KDEpCi0Jc3RkCXIyNCwtNjQoMSkKLQlzdGQJcjIzLC03MigxKQotCXN0ZAlyMjIsLTgwKDEpCi0Jc3RkCXIyMSwtODgoMSkKLQlzdGQJcjIwLC05NigxKQotCWxpCXI1LDQwOTYvMzIgLSAxCisJbGkJcjUsNDA5NgkJLyogNEsgcGFnZSBzaXplICovCitCRUdJTl9GVFJfU0VDVElPTgorCWxkICAgICAgcjEwLFBQQzY0X0NBQ0hFU0B0b2MocjIpCisJbHd6CXIxMSxEQ0FDSEVMMUxPR0xJTkVTSVpFKHIxMCkJLyogbG9nMiBvZiBjYWNoZSBsaW5lIHNpemUgKi8KKwlsd3ogICAgIHIxMixEQ0FDSEVMMUxJTkVTSVpFKHIxMCkJLyogZ2V0IGNhY2hlIGxpbmUgc2l6ZSAqLworCWxpCXI5LDAKKwlzcmQJcjgscjUscjExCisKKwltdGN0cglyOAorc2V0dXA6CisJZGNidAlyOSxyNAorCWRjYnoJcjkscjMKKwlhZGQJcjkscjkscjEyCisJYmRueglzZXR1cAorRU5EX0ZUUl9TRUNUSU9OX0lGU0VUKENQVV9GVFJfQ1BfVVNFX0RDQlRaKQogCWFkZGkJcjMscjMsLTgKLQlsaQlyMTIsNQotMDoJYWRkaQlyNSxyNSwtMjQKLQltdGN0cglyMTIKLQlsZAlyMjIsNjQwKDQpCi0JbGQJcjIxLDUxMig0KQotCWxkCXIyMCwzODQoNCkKLQlsZAlyMTEsMjU2KDQpCi0JbGQJcjksMTI4KDQpCi0JbGQJcjcsMCg0KQotCWxkCXIyNSw2NDgoNCkKLQlsZAlyMjQsNTIwKDQpCi0JbGQJcjIzLDM5Mig0KQotCWxkCXIxMCwyNjQoNCkKLQlsZAlyOCwxMzYoNCkKLQlsZHUJcjYsOCg0KQotCWNtcHdpCXI1LDI0Ci0xOglzdGQJcjIyLDY0OCgzKQotCXN0ZAlyMjEsNTIwKDMpCi0Jc3RkCXIyMCwzOTIoMykKLQlzdGQJcjExLDI2NCgzKQotCXN0ZAlyOSwxMzYoMykKLQlzdGQJcjcsOCgzKQotCWxkCXIyOCw2NDgoNCkKLQlsZAlyMjcsNTIwKDQpCi0JbGQJcjI2LDM5Mig0KQotCWxkCXIzMSwyNjQoNCkKLQlsZAlyMzAsMTM2KDQpCi0JbGQJcjI5LDgoNCkKLQlzdGQJcjI1LDY1NigzKQotCXN0ZAlyMjQsNTI4KDMpCi0Jc3RkCXIyMyw0MDAoMykKLQlzdGQJcjEwLDI3MigzKQotCXN0ZAlyOCwxNDQoMykKLQlzdGQJcjYsMTYoMykKLQlsZAlyMjIsNjU2KDQpCi0JbGQJcjIxLDUyOCg0KQotCWxkCXIyMCw0MDAoNCkKLQlsZAlyMTEsMjcyKDQpCi0JbGQJcjksMTQ0KDQpCi0JbGQJcjcsMTYoNCkKLQlzdGQJcjI4LDY2NCgzKQotCXN0ZAlyMjcsNTM2KDMpCi0Jc3RkCXIyNiw0MDgoMykKLQlzdGQJcjMxLDI4MCgzKQotCXN0ZAlyMzAsMTUyKDMpCi0Jc3RkdQlyMjksMjQoMykKLQlsZAlyMjUsNjY0KDQpCi0JbGQJcjI0LDUzNig0KQotCWxkCXIyMyw0MDgoNCkKLQlsZAlyMTAsMjgwKDQpCi0JbGQJcjgsMTUyKDQpCi0JbGR1CXI2LDI0KDQpCisJc3JkaSAgICByOCxyNSw3CQkvKiBwYWdlIGlzIGNvcGllZCBpbiAxMjggYnl0ZSBzdHJpZGVzICovCisJYWRkaQlyOCxyOCwtMQkvKiBvbmUgc3RyaWRlIGNvcGllZCBvdXRzaWRlIGxvb3AgKi8KKworCW10Y3RyCXI4CisKKwlsZAlyNSwwKHI0KQorCWxkCXI2LDgocjQpCisJbGQJcjcsMTYocjQpCisJbGR1CXI4LDI0KHI0KQorMToJc3RkCXI1LDgocjMpCisJbGQJcjksOChyNCkKKwlzdGQJcjYsMTYocjMpCisJbGQJcjEwLDE2KHI0KQorCXN0ZAlyNywyNChyMykKKwlsZAlyMTEsMjQocjQpCisJc3RkCXI4LDMyKHIzKQorCWxkCXIxMiwzMihyNCkKKwlzdGQJcjksNDAocjMpCisJbGQJcjUsNDAocjQpCisJc3RkCXIxMCw0OChyMykKKwlsZAlyNiw0OChyNCkKKwlzdGQJcjExLDU2KHIzKQorCWxkCXI3LDU2KHI0KQorCXN0ZAlyMTIsNjQocjMpCisJbGQJcjgsNjQocjQpCisJc3RkCXI1LDcyKHIzKQorCWxkCXI5LDcyKHI0KQorCXN0ZAlyNiw4MChyMykKKwlsZAlyMTAsODAocjQpCisJc3RkCXI3LDg4KHIzKQorCWxkCXIxMSw4OChyNCkKKwlzdGQJcjgsOTYocjMpCisJbGQJcjEyLDk2KHI0KQorCXN0ZAlyOSwxMDQocjMpCisJbGQJcjUsMTA0KHI0KQorCXN0ZAlyMTAsMTEyKHIzKQorCWxkCXI2LDExMihyNCkKKwlzdGQJcjExLDEyMChyMykKKwlsZAlyNywxMjAocjQpCisJc3RkdQlyMTIsMTI4KHIzKQorCWxkdQlyOCwxMjgocjQpCiAJYmRuegkxYgotCXN0ZAlyMjIsNjQ4KDMpCi0Jc3RkCXIyMSw1MjAoMykKLQlzdGQJcjIwLDM5MigzKQotCXN0ZAlyMTEsMjY0KDMpCi0Jc3RkCXI5LDEzNigzKQotCXN0ZAlyNyw4KDMpCi0JYWRkaQlyNCxyNCw2NDAKLQlhZGRpCXIzLHIzLDY0OAotCWJnZQkwYgotCW10Y3RyCXI1Ci0JbGQJcjcsMCg0KQotCWxkCXI4LDgoNCkKLQlsZHUJcjksMTYoNCkKLTM6CWxkCXIxMCw4KDQpCi0Jc3RkCXI3LDgoMykKLQlsZAlyNywxNig0KQotCXN0ZAlyOCwxNigzKQotCWxkCXI4LDI0KDQpCi0Jc3RkCXI5LDI0KDMpCi0JbGR1CXI5LDMyKDQpCi0Jc3RkdQlyMTAsMzIoMykKLQliZG56CTNiCi00OglsZAlyMTAsOCg0KQotCXN0ZAlyNyw4KDMpCi0Jc3RkCXI4LDE2KDMpCi0Jc3RkCXI5LDI0KDMpCi0Jc3RkCXIxMCwzMigzKQotOToJbGQJcjIwLC05NigxKQotCWxkCXIyMSwtODgoMSkKLQlsZAlyMjIsLTgwKDEpCi0JbGQJcjIzLC03MigxKQotCWxkCXIyNCwtNjQoMSkKLQlsZAlyMjUsLTU2KDEpCi0JbGQJcjI2LC00OCgxKQotCWxkCXIyNywtNDAoMSkKLQlsZAlyMjgsLTMyKDEpCi0JbGQJcjI5LC0yNCgxKQotCWxkCXIzMCwtMTYoMSkKLQlsZAlyMzEsLTgoMSkKKworCXN0ZAlyNSw4KHIzKQorCWxkCXI5LDgocjQpCisJc3RkCXI2LDE2KHIzKQorCWxkCXIxMCwxNihyNCkKKwlzdGQJcjcsMjQocjMpCisJbGQJcjExLDI0KHI0KQorCXN0ZAlyOCwzMihyMykKKwlsZAlyMTIsMzIocjQpCisJc3RkCXI5LDQwKHIzKQorCWxkCXI1LDQwKHI0KQorCXN0ZAlyMTAsNDgocjMpCisJbGQJcjYsNDgocjQpCisJc3RkCXIxMSw1NihyMykKKwlsZAlyNyw1NihyNCkKKwlzdGQJcjEyLDY0KHIzKQorCWxkCXI4LDY0KHI0KQorCXN0ZAlyNSw3MihyMykKKwlsZAlyOSw3MihyNCkKKwlzdGQJcjYsODAocjMpCisJbGQJcjEwLDgwKHI0KQorCXN0ZAlyNyw4OChyMykKKwlsZAlyMTEsODgocjQpCisJc3RkCXI4LDk2KHIzKQorCWxkCXIxMiw5NihyNCkKKwlzdGQJcjksMTA0KHIzKQorCXN0ZAlyMTAsMTEyKHIzKQorCXN0ZAlyMTEsMTIwKHIzKQorCXN0ZAlyMTIsMTI4KHIzKQogCWJscgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2xpYi9kbWEtbm9uY29oZXJlbnQuYyBiL2FyY2gvcG93ZXJwYy9saWIvZG1hLW5vbmNvaGVyZW50LmMKaW5kZXggNWQ4MzkwNy4uMzE3MzRjMCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2xpYi9kbWEtbm9uY29oZXJlbnQuYworKysgYi9hcmNoL3Bvd2VycGMvbGliL2RtYS1ub25jb2hlcmVudC5jCkBAIC0yMDMsNyArMjAzLDcgQEAKIAkJLyoKIAkJICogU2V0IHRoZSAiZG1hIGhhbmRsZSIKIAkJICovCi0JCSpoYW5kbGUgPSBwYWdlX3RvX2J1cyhwYWdlKTsKKwkJKmhhbmRsZSA9IHBhZ2VfdG9fcGh5cyhwYWdlKTsKIAogCQlkbyB7CiAJCQlCVUdfT04oIXB0ZV9ub25lKCpwdGUpKTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9tYXRoLWVtdS9NYWtlZmlsZSBiL2FyY2gvcG93ZXJwYy9tYXRoLWVtdS9NYWtlZmlsZQppbmRleCAyOWJjOTEyLi4wM2FhOThkIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvbWF0aC1lbXUvTWFrZWZpbGUKKysrIGIvYXJjaC9wb3dlcnBjL21hdGgtZW11L01ha2VmaWxlCkBAIC00LDEzICs0LDE0IEBACiBvYmotJChDT05GSUdfTUFUSF9FTVVMQVRJT04pCSs9IGZhYnMubyBmYWRkLm8gZmFkZHMubyBmY21wby5vIGZjbXB1Lm8gXAogCQkJCQlmY3Rpdy5vIGZjdGl3ei5vIGZkaXYubyBmZGl2cy5vIFwKIAkJCQkJZm1hZGQubyBmbWFkZHMubyBmbXN1Yi5vIGZtc3Vicy5vIFwKLQkJCQkJZm11bC5vIGZtdWxzLm8gZm5hYnMubyBmbmVnLm8gdHlwZXMubyBcCisJCQkJCWZtdWwubyBmbXVscy5vIGZuYWJzLm8gZm5lZy5vIFwKIAkJCQkJZm5tYWRkLm8gZm5tYWRkcy5vIGZubXN1Yi5vIGZubXN1YnMubyBcCiAJCQkJCWZyZXMubyBmcnNwLm8gZnJzcXJ0ZS5vIGZzZWwubyBsZnMubyBcCiAJCQkJCWZzcXJ0Lm8JZnNxcnRzLm8gZnN1Yi5vIGZzdWJzLm8gXAogCQkJCQltY3Jmcy5vIG1mZnMubyBtdGZzYjAubyBtdGZzYjEubyBcCi0JCQkJCW10ZnNmLm8gbXRmc2ZpLm8gc3RmaXd4Lm8gc3Rmcy5vIFwKLQkJCQkJdWRpdm1vZHRpNC5vCisJCQkJCW10ZnNmLm8gbXRmc2ZpLm8gc3RmaXd4Lm8gc3Rmcy5vCiAKIENGTEFHU19mYWJzLm8gPSAtZm5vLWJ1aWx0aW4tZmFicwogQ0ZMQUdTX21hdGgubyA9IC1mbm8tYnVpbHRpbi1mYWJzCisKK0VYVFJBX0NGTEFHUyA9IC1JLiAtSWluY2x1ZGUvbWF0aC1lbXUgLXcKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9tYXRoLWVtdS9kb3VibGUuaCBiL2FyY2gvcG93ZXJwYy9tYXRoLWVtdS9kb3VibGUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmZiYThiNi4uMDAwMDAwMAotLS0gYS9hcmNoL3Bvd2VycGMvbWF0aC1lbXUvZG91YmxlLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMjkgKzAsMCBAQAotLyoKLSAqIERlZmluaXRpb25zIGZvciBJRUVFIERvdWJsZSBQcmVjaXNpb24KLSAqLwotCi0jaWYgX0ZQX1dfVFlQRV9TSVpFIDwgMzIKLSNlcnJvciAiSGVyZSdzIGEgbmlja2VsIGtpZC4gIEdvIGJ1eSB5b3Vyc2VsZiBhIHJlYWwgY29tcHV0ZXIuIgotI2VuZGlmCi0KLSNpZiBfRlBfV19UWVBFX1NJWkUgPCA2NAotI2RlZmluZSBfRlBfRlJBQ1RCSVRTX0QJCSgyICogX0ZQX1dfVFlQRV9TSVpFKQotI2Vsc2UKLSNkZWZpbmUgX0ZQX0ZSQUNUQklUU19ECQlfRlBfV19UWVBFX1NJWkUKLSNlbmRpZgotCi0jZGVmaW5lIF9GUF9GUkFDQklUU19ECQk1MwotI2RlZmluZSBfRlBfRlJBQ1hCSVRTX0QJCShfRlBfRlJBQ1RCSVRTX0QgLSBfRlBfRlJBQ0JJVFNfRCkKLSNkZWZpbmUgX0ZQX1dGUkFDQklUU19ECQkoX0ZQX1dPUktCSVRTICsgX0ZQX0ZSQUNCSVRTX0QpCi0jZGVmaW5lIF9GUF9XRlJBQ1hCSVRTX0QJKF9GUF9GUkFDVEJJVFNfRCAtIF9GUF9XRlJBQ0JJVFNfRCkKLSNkZWZpbmUgX0ZQX0VYUEJJVFNfRAkJMTEKLSNkZWZpbmUgX0ZQX0VYUEJJQVNfRAkJMTAyMwotI2RlZmluZSBfRlBfRVhQTUFYX0QJCTIwNDcKLQotI2RlZmluZSBfRlBfUU5BTkJJVF9ECQlcCi0JKChfRlBfV19UWVBFKTEgPDwgKChfRlBfRlJBQ0JJVFNfRC0yKSAlIF9GUF9XX1RZUEVfU0laRSkpCi0jZGVmaW5lIF9GUF9JTVBMQklUX0QJCVwKLQkoKF9GUF9XX1RZUEUpMSA8PCAoKF9GUF9GUkFDQklUU19ELTEpICUgX0ZQX1dfVFlQRV9TSVpFKSkKLSNkZWZpbmUgX0ZQX09WRVJGTE9XX0QJCVwKLQkoKF9GUF9XX1RZUEUpMSA8PCAoX0ZQX1dGUkFDQklUU19EICUgX0ZQX1dfVFlQRV9TSVpFKSkKLQotI2lmIF9GUF9XX1RZUEVfU0laRSA8IDY0Ci0KLXVuaW9uIF9GUF9VTklPTl9ECi17Ci0gIGRvdWJsZSBmbHQ7Ci0gIHN0cnVjdCB7Ci0jaWYgX19CWVRFX09SREVSID09IF9fQklHX0VORElBTgotICAgIHVuc2lnbmVkIHNpZ24gIDogMTsKLSAgICB1bnNpZ25lZCBleHAgICA6IF9GUF9FWFBCSVRTX0Q7Ci0gICAgdW5zaWduZWQgZnJhYzEgOiBfRlBfRlJBQ0JJVFNfRCAtIChfRlBfSU1QTEJJVF9EICE9IDApIC0gX0ZQX1dfVFlQRV9TSVpFOwotICAgIHVuc2lnbmVkIGZyYWMwIDogX0ZQX1dfVFlQRV9TSVpFOwotI2Vsc2UKLSAgICB1bnNpZ25lZCBmcmFjMCA6IF9GUF9XX1RZUEVfU0laRTsKLSAgICB1bnNpZ25lZCBmcmFjMSA6IF9GUF9GUkFDQklUU19EIC0gKF9GUF9JTVBMQklUX0QgIT0gMCkgLSBfRlBfV19UWVBFX1NJWkU7Ci0gICAgdW5zaWduZWQgZXhwICAgOiBfRlBfRVhQQklUU19EOwotICAgIHVuc2lnbmVkIHNpZ24gIDogMTsKLSNlbmRpZgotICB9IGJpdHMgX19hdHRyaWJ1dGVfXygocGFja2VkKSk7Ci19OwotCi0jZGVmaW5lIEZQX0RFQ0xfRChYKQkJX0ZQX0RFQ0woMixYKQotI2RlZmluZSBGUF9VTlBBQ0tfUkFXX0QoWCx2YWwpCV9GUF9VTlBBQ0tfUkFXXzIoRCxYLHZhbCkKLSNkZWZpbmUgRlBfUEFDS19SQVdfRCh2YWwsWCkJX0ZQX1BBQ0tfUkFXXzIoRCx2YWwsWCkKLQotI2RlZmluZSBGUF9VTlBBQ0tfRChYLHZhbCkJCVwKLSAgZG8gewkJCQkJXAotICAgIF9GUF9VTlBBQ0tfUkFXXzIoRCxYLHZhbCk7CQlcCi0gICAgX0ZQX1VOUEFDS19DQU5PTklDQUwoRCwyLFgpOwlcCi0gIH0gd2hpbGUgKDApCi0KLSNkZWZpbmUgRlBfUEFDS19EKHZhbCxYKQkJXAotICBkbyB7CQkJCQlcCi0gICAgX0ZQX1BBQ0tfQ0FOT05JQ0FMKEQsMixYKTsJCVwKLSAgICBfRlBfUEFDS19SQVdfMihELHZhbCxYKTsJCVwKLSAgfSB3aGlsZSAoMCkKLQotI2RlZmluZSBGUF9ORUdfRChSLFgpCQlfRlBfTkVHKEQsMixSLFgpCi0jZGVmaW5lIEZQX0FERF9EKFIsWCxZKQkJX0ZQX0FERChELDIsUixYLFkpCi0jZGVmaW5lIEZQX1NVQl9EKFIsWCxZKQkJX0ZQX1NVQihELDIsUixYLFkpCi0jZGVmaW5lIEZQX01VTF9EKFIsWCxZKQkJX0ZQX01VTChELDIsUixYLFkpCi0jZGVmaW5lIEZQX0RJVl9EKFIsWCxZKQkJX0ZQX0RJVihELDIsUixYLFkpCi0jZGVmaW5lIEZQX1NRUlRfRChSLFgpCQlfRlBfU1FSVChELDIsUixYKQotCi0jZGVmaW5lIEZQX0NNUF9EKHIsWCxZLHVuKQlfRlBfQ01QKEQsMixyLFgsWSx1bikKLSNkZWZpbmUgRlBfQ01QX0VRX0QocixYLFkpCV9GUF9DTVBfRVEoRCwyLHIsWCxZKQotCi0jZGVmaW5lIEZQX1RPX0lOVF9EKHIsWCxyc3oscnNnKSAgX0ZQX1RPX0lOVChELDIscixYLHJzeixyc2cpCi0jZGVmaW5lIEZQX0ZST01fSU5UX0QoWCxyLHJzLHJ0KSAgX0ZQX0ZST01fSU5UKEQsMixYLHIscnMscnQpCi0KLSNlbHNlCi0KLXVuaW9uIF9GUF9VTklPTl9ECi17Ci0gIGRvdWJsZSBmbHQ7Ci0gIHN0cnVjdCB7Ci0jaWYgX19CWVRFX09SREVSID09IF9fQklHX0VORElBTgotICAgIHVuc2lnbmVkIHNpZ24gOiAxOwotICAgIHVuc2lnbmVkIGV4cCAgOiBfRlBfRVhQQklUU19EOwotICAgIHVuc2lnbmVkIGxvbmcgZnJhYyA6IF9GUF9GUkFDQklUU19EIC0gKF9GUF9JTVBMQklUX0QgIT0gMCk7Ci0jZWxzZQotICAgIHVuc2lnbmVkIGxvbmcgZnJhYyA6IF9GUF9GUkFDQklUU19EIC0gKF9GUF9JTVBMQklUX0QgIT0gMCk7Ci0gICAgdW5zaWduZWQgZXhwICA6IF9GUF9FWFBCSVRTX0Q7Ci0gICAgdW5zaWduZWQgc2lnbiA6IDE7Ci0jZW5kaWYKLSAgfSBiaXRzIF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwotfTsKLQotI2RlZmluZSBGUF9ERUNMX0QoWCkJCV9GUF9ERUNMKDEsWCkKLSNkZWZpbmUgRlBfVU5QQUNLX1JBV19EKFgsdmFsKQlfRlBfVU5QQUNLX1JBV18xKEQsWCx2YWwpCi0jZGVmaW5lIEZQX1BBQ0tfUkFXX0QodmFsLFgpCV9GUF9QQUNLX1JBV18xKEQsdmFsLFgpCi0KLSNkZWZpbmUgRlBfVU5QQUNLX0QoWCx2YWwpCQlcCi0gIGRvIHsJCQkJCVwKLSAgICBfRlBfVU5QQUNLX1JBV18xKEQsWCx2YWwpOwkJXAotICAgIF9GUF9VTlBBQ0tfQ0FOT05JQ0FMKEQsMSxYKTsJXAotICB9IHdoaWxlICgwKQotCi0jZGVmaW5lIEZQX1BBQ0tfRCh2YWwsWCkJCVwKLSAgZG8gewkJCQkJXAotICAgIF9GUF9QQUNLX0NBTk9OSUNBTChELDEsWCk7CQlcCi0gICAgX0ZQX1BBQ0tfUkFXXzEoRCx2YWwsWCk7CQlcCi0gIH0gd2hpbGUgKDApCi0KLSNkZWZpbmUgRlBfTkVHX0QoUixYKQkJX0ZQX05FRyhELDEsUixYKQotI2RlZmluZSBGUF9BRERfRChSLFgsWSkJCV9GUF9BREQoRCwxLFIsWCxZKQotI2RlZmluZSBGUF9TVUJfRChSLFgsWSkJCV9GUF9TVUIoRCwxLFIsWCxZKQotI2RlZmluZSBGUF9NVUxfRChSLFgsWSkJCV9GUF9NVUwoRCwxLFIsWCxZKQotI2RlZmluZSBGUF9ESVZfRChSLFgsWSkJCV9GUF9ESVYoRCwxLFIsWCxZKQotI2RlZmluZSBGUF9TUVJUX0QoUixYKQkJX0ZQX1NRUlQoRCwxLFIsWCkKLQotLyogVGhlIGltcGxlbWVudGF0aW9uIG9mIF9GUF9NVUxfRCBhbmQgX0ZQX0RJVl9EIHNob3VsZCBiZSBjaG9zZW4gYnkKLSAgIHRoZSB0YXJnZXQgbWFjaGluZS4gICovCi0KLSNkZWZpbmUgRlBfQ01QX0QocixYLFksdW4pCV9GUF9DTVAoRCwxLHIsWCxZLHVuKQotI2RlZmluZSBGUF9DTVBfRVFfRChyLFgsWSkJX0ZQX0NNUF9FUShELDEscixYLFkpCi0KLSNkZWZpbmUgRlBfVE9fSU5UX0QocixYLHJzeixyc2cpICBfRlBfVE9fSU5UKEQsMSxyLFgscnN6LHJzZykKLSNkZWZpbmUgRlBfRlJPTV9JTlRfRChYLHIscnMscnQpICBfRlBfRlJPTV9JTlQoRCwxLFgscixycyxydCkKLQotI2VuZGlmIC8qIFdfVFlQRV9TSVpFIDwgNjQgKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9tYXRoLWVtdS9mYWRkLmMgYi9hcmNoL3Bvd2VycGMvbWF0aC1lbXUvZmFkZC5jCmluZGV4IDdiZWZiYmYuLjA0ZDNiNGEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9tYXRoLWVtdS9mYWRkLmMKKysrIGIvYXJjaC9wb3dlcnBjL21hdGgtZW11L2ZhZGQuYwpAQCAtMiw4ICsyLDkgQEAKICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAKLSNpbmNsdWRlICJzb2Z0LWZwLmgiCi0jaW5jbHVkZSAiZG91YmxlLmgiCisjaW5jbHVkZSA8YXNtL3NmcC1tYWNoaW5lLmg+CisjaW5jbHVkZSA8bWF0aC1lbXUvc29mdC1mcC5oPgorI2luY2x1ZGUgPG1hdGgtZW11L2RvdWJsZS5oPgogCiBpbnQKIGZhZGQodm9pZCAqZnJELCB2b2lkICpmckEsIHZvaWQgKmZyQikKQEAgLTExLDI4ICsxMiwyOCBAQAogCUZQX0RFQ0xfRChBKTsKIAlGUF9ERUNMX0QoQik7CiAJRlBfREVDTF9EKFIpOworCUZQX0RFQ0xfRVg7CiAJaW50IHJldCA9IDA7CiAKICNpZmRlZiBERUJVRwogCXByaW50aygiJXM6ICVwICVwICVwXG4iLCBfX2Z1bmNfXywgZnJELCBmckEsIGZyQik7CiAjZW5kaWYKIAotCV9fRlBfVU5QQUNLX0QoQSwgZnJBKTsKLQlfX0ZQX1VOUEFDS19EKEIsIGZyQik7CisJRlBfVU5QQUNLX0RQKEEsIGZyQSk7CisJRlBfVU5QQUNLX0RQKEIsIGZyQik7CiAKICNpZmRlZiBERUJVRwogCXByaW50aygiQTogJWxkICVsdSAlbHUgJWxkICglbGQpXG4iLCBBX3MsIEFfZjEsIEFfZjAsIEFfZSwgQV9jKTsKIAlwcmludGsoIkI6ICVsZCAlbHUgJWx1ICVsZCAoJWxkKVxuIiwgQl9zLCBCX2YxLCBCX2YwLCBCX2UsIEJfYyk7CiAjZW5kaWYKIAotCWlmIChBX3MgIT0gQl9zICYmIEFfYyA9PSBGUF9DTFNfSU5GICYmIEJfYyA9PSBGUF9DTFNfSU5GKQotCQlyZXQgfD0gRUZMQUdfVlhJU0k7Ci0KIAlGUF9BRERfRChSLCBBLCBCKTsKIAogI2lmZGVmIERFQlVHCiAJcHJpbnRrKCJEOiAlbGQgJWx1ICVsdSAlbGQgKCVsZClcbiIsIFJfcywgUl9mMSwgUl9mMCwgUl9lLCBSX2MpOwogI2VuZGlmCiAKLQlyZXR1cm4gKHJldCB8IF9fRlBfUEFDS19EKGZyRCwgUikpOworCV9fRlBfUEFDS19EKGZyRCwgUik7CisKKwlyZXR1cm4gRlBfQ1VSX0VYQ0VQVElPTlM7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbWF0aC1lbXUvZmFkZHMuYyBiL2FyY2gvcG93ZXJwYy9tYXRoLWVtdS9mYWRkcy5jCmluZGV4IDJiMzQ2YjMuLjU5MzBmNDAgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9tYXRoLWVtdS9mYWRkcy5jCisrKyBiL2FyY2gvcG93ZXJwYy9tYXRoLWVtdS9mYWRkcy5jCkBAIC0yLDkgKzIsMTAgQEAKICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAKLSNpbmNsdWRlICJzb2Z0LWZwLmgiCi0jaW5jbHVkZSAiZG91YmxlLmgiCi0jaW5jbHVkZSAic2luZ2xlLmgiCisjaW5jbHVkZSA8YXNtL3NmcC1tYWNoaW5lLmg+CisjaW5jbHVkZSA8bWF0aC1lbXUvc29mdC1mcC5oPgorI2luY2x1ZGUgPG1hdGgtZW11L2RvdWJsZS5oPgorI2luY2x1ZGUgPG1hdGgtZW11L3NpbmdsZS5oPgogCiBpbnQKIGZhZGRzKHZvaWQgKmZyRCwgdm9pZCAqZnJBLCB2b2lkICpmckIpCkBAIC0xMiwyOCArMTMsMjcgQEAKIAlGUF9ERUNMX0QoQSk7CiAJRlBfREVDTF9EKEIpOwogCUZQX0RFQ0xfRChSKTsKLQlpbnQgcmV0ID0gMDsKKwlGUF9ERUNMX0VYOwogCiAjaWZkZWYgREVCVUcKIAlwcmludGsoIiVzOiAlcCAlcCAlcFxuIiwgX19mdW5jX18sIGZyRCwgZnJBLCBmckIpOwogI2VuZGlmCiAKLQlfX0ZQX1VOUEFDS19EKEEsIGZyQSk7Ci0JX19GUF9VTlBBQ0tfRChCLCBmckIpOworCUZQX1VOUEFDS19EUChBLCBmckEpOworCUZQX1VOUEFDS19EUChCLCBmckIpOwogCiAjaWZkZWYgREVCVUcKIAlwcmludGsoIkE6ICVsZCAlbHUgJWx1ICVsZCAoJWxkKVxuIiwgQV9zLCBBX2YxLCBBX2YwLCBBX2UsIEFfYyk7CiAJcHJpbnRrKCJCOiAlbGQgJWx1ICVsdSAlbGQgKCVsZClcbiIsIEJfcywgQl9mMSwgQl9mMCwgQl9lLCBCX2MpOwogI2VuZGlmCiAKLQlpZiAoQV9zICE9IEJfcyAmJiBBX2MgPT0gRlBfQ0xTX0lORiAmJiBCX2MgPT0gRlBfQ0xTX0lORikKLQkJcmV0IHw9IEVGTEFHX1ZYSVNJOwotCiAJRlBfQUREX0QoUiwgQSwgQik7CiAKICNpZmRlZiBERUJVRwogCXByaW50aygiRDogJWxkICVsdSAlbHUgJWxkICglbGQpXG4iLCBSX3MsIFJfZjEsIFJfZjAsIFJfZSwgUl9jKTsKICNlbmRpZgogCi0JcmV0dXJuIChyZXQgfCBfX0ZQX1BBQ0tfRFMoZnJELCBSKSk7CisJX19GUF9QQUNLX0RTKGZyRCwgUik7CisKKwlyZXR1cm4gRlBfQ1VSX0VYQ0VQVElPTlM7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbWF0aC1lbXUvZmNtcG8uYyBiL2FyY2gvcG93ZXJwYy9tYXRoLWVtdS9mY21wby5jCmluZGV4IDM2ZDY4OTAuLmI1ZGM0NDkgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9tYXRoLWVtdS9mY21wby5jCisrKyBiL2FyY2gvcG93ZXJwYy9tYXRoLWVtdS9mY21wby5jCkBAIC0yLDE0ICsyLDE2IEBACiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogCi0jaW5jbHVkZSAic29mdC1mcC5oIgotI2luY2x1ZGUgImRvdWJsZS5oIgorI2luY2x1ZGUgPGFzbS9zZnAtbWFjaGluZS5oPgorI2luY2x1ZGUgPG1hdGgtZW11L3NvZnQtZnAuaD4KKyNpbmNsdWRlIDxtYXRoLWVtdS9kb3VibGUuaD4KIAogaW50CiBmY21wbyh1MzIgKmNjciwgaW50IGNyZkQsIHZvaWQgKmZyQSwgdm9pZCAqZnJCKQogewogCUZQX0RFQ0xfRChBKTsKIAlGUF9ERUNMX0QoQik7CisJRlBfREVDTF9FWDsKIAlpbnQgY29kZVs0XSA9IHsgKDEgPDwgMyksICgxIDw8IDEpLCAoMSA8PCAyKSwgKDEgPDwgMCkgfTsKIAlsb25nIGNtcDsKIAlpbnQgcmV0ID0gMDsKQEAgLTE4LDggKzIwLDggQEAKIAlwcmludGsoIiVzOiAlcCAoJTA4eCkgJWQgJXAgJXBcbiIsIF9fZnVuY19fLCBjY3IsICpjY3IsIGNyZkQsIGZyQSwgZnJCKTsKICNlbmRpZgogCi0JX19GUF9VTlBBQ0tfRChBLCBmckEpOwotCV9fRlBfVU5QQUNLX0QoQiwgZnJCKTsKKwlGUF9VTlBBQ0tfRFAoQSwgZnJBKTsKKwlGUF9VTlBBQ0tfRFAoQiwgZnJCKTsKIAogI2lmZGVmIERFQlVHCiAJcHJpbnRrKCJBOiAlbGQgJWx1ICVsdSAlbGQgKCVsZClcbiIsIEFfcywgQV9mMSwgQV9mMCwgQV9lLCBBX2MpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL21hdGgtZW11L2ZjbXB1LmMgYi9hcmNoL3Bvd2VycGMvbWF0aC1lbXUvZmNtcHUuYwppbmRleCA1M2Q5Mzg5Li5kNGZiMWJhIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvbWF0aC1lbXUvZmNtcHUuYworKysgYi9hcmNoL3Bvd2VycGMvbWF0aC1lbXUvZmNtcHUuYwpAQCAtMiwxNCArMiwxNiBAQAogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KIAotI2luY2x1ZGUgInNvZnQtZnAuaCIKLSNpbmNsdWRlICJkb3VibGUuaCIKKyNpbmNsdWRlIDxhc20vc2ZwLW1hY2hpbmUuaD4KKyNpbmNsdWRlIDxtYXRoLWVtdS9zb2Z0LWZwLmg+CisjaW5jbHVkZSA8bWF0aC1lbXUvZG91YmxlLmg+CiAKIGludAogZmNtcHUodTMyICpjY3IsIGludCBjcmZELCB2b2lkICpmckEsIHZvaWQgKmZyQikKIHsKIAlGUF9ERUNMX0QoQSk7CiAJRlBfREVDTF9EKEIpOworCUZQX0RFQ0xfRVg7CiAJaW50IGNvZGVbNF0gPSB7ICgxIDw8IDMpLCAoMSA8PCAxKSwgKDEgPDwgMiksICgxIDw8IDApIH07CiAJbG9uZyBjbXA7CiAKQEAgLTE3LDggKzE5LDggQEAKIAlwcmludGsoIiVzOiAlcCAoJTA4eCkgJWQgJXAgJXBcbiIsIF9fZnVuY19fLCBjY3IsICpjY3IsIGNyZkQsIGZyQSwgZnJCKTsKICNlbmRpZgogCi0JX19GUF9VTlBBQ0tfRChBLCBmckEpOwotCV9fRlBfVU5QQUNLX0QoQiwgZnJCKTsKKwlGUF9VTlBBQ0tfRFAoQSwgZnJBKTsKKwlGUF9VTlBBQ0tfRFAoQiwgZnJCKTsKIAogI2lmZGVmIERFQlVHCiAJcHJpbnRrKCJBOiAlbGQgJWx1ICVsdSAlbGQgKCVsZClcbiIsIEFfcywgQV9mMSwgQV9mMCwgQV9lLCBBX2MpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL21hdGgtZW11L2ZjdGl3LmMgYi9hcmNoL3Bvd2VycGMvbWF0aC1lbXUvZmN0aXcuYwppbmRleCBmY2Q3YTk1Li5mNjk0NDQwIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvbWF0aC1lbXUvZmN0aXcuYworKysgYi9hcmNoL3Bvd2VycGMvbWF0aC1lbXUvZmN0aXcuYwpAQCAtMiwxNiArMiwxOCBAQAogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KIAotI2luY2x1ZGUgInNvZnQtZnAuaCIKLSNpbmNsdWRlICJkb3VibGUuaCIKKyNpbmNsdWRlIDxhc20vc2ZwLW1hY2hpbmUuaD4KKyNpbmNsdWRlIDxtYXRoLWVtdS9zb2Z0LWZwLmg+CisjaW5jbHVkZSA8bWF0aC1lbXUvZG91YmxlLmg+CiAKIGludAogZmN0aXcodTMyICpmckQsIHZvaWQgKmZyQikKIHsKIAlGUF9ERUNMX0QoQik7CisJRlBfREVDTF9FWDsKIAl1bnNpZ25lZCBpbnQgcjsKIAotCV9fRlBfVU5QQUNLX0QoQiwgZnJCKTsKKwlGUF9VTlBBQ0tfRFAoQiwgZnJCKTsKIAlGUF9UT19JTlRfRChyLCBCLCAzMiwgMSk7CiAJZnJEWzFdID0gcjsKIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL21hdGgtZW11L2ZjdGl3ei5jIGIvYXJjaC9wb3dlcnBjL21hdGgtZW11L2ZjdGl3ei5jCmluZGV4IDE1MTRkNTkuLjcxZTc4MmYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9tYXRoLWVtdS9mY3Rpd3ouYworKysgYi9hcmNoL3Bvd2VycGMvbWF0aC1lbXUvZmN0aXd6LmMKQEAgLTIsMTMgKzIsMTUgQEAKICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAKLSNpbmNsdWRlICJzb2Z0LWZwLmgiCi0jaW5jbHVkZSAiZG91YmxlLmgiCisjaW5jbHVkZSA8YXNtL3NmcC1tYWNoaW5lLmg+CisjaW5jbHVkZSA8bWF0aC1lbXUvc29mdC1mcC5oPgorI2luY2x1ZGUgPG1hdGgtZW11L2RvdWJsZS5oPgogCiBpbnQKIGZjdGl3eih1MzIgKmZyRCwgdm9pZCAqZnJCKQogewogCUZQX0RFQ0xfRChCKTsKKwlGUF9ERUNMX0VYOwogCXUzMiBmcHNjcjsKIAl1bnNpZ25lZCBpbnQgcjsKIApAQCAtMTYsNyArMTgsNyBAQAogCV9fRlBVX0ZQU0NSICY9IH4oMyk7CiAJX19GUFVfRlBTQ1IgfD0gRlBfUk5EX1pFUk87CiAKLQlfX0ZQX1VOUEFDS19EKEIsIGZyQik7CisJRlBfVU5QQUNLX0RQKEIsIGZyQik7CiAJRlBfVE9fSU5UX0QociwgQiwgMzIsIDEpOwogCWZyRFsxXSA9IHI7CiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9tYXRoLWVtdS9mZGl2LmMgYi9hcmNoL3Bvd2VycGMvbWF0aC1lbXUvZmRpdi5jCmluZGV4IDE4YTIwZmUuLjJkYjE1MDkgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9tYXRoLWVtdS9mZGl2LmMKKysrIGIvYXJjaC9wb3dlcnBjL21hdGgtZW11L2ZkaXYuYwpAQCAtMiw4ICsyLDkgQEAKICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAKLSNpbmNsdWRlICJzb2Z0LWZwLmgiCi0jaW5jbHVkZSAiZG91YmxlLmgiCisjaW5jbHVkZSA8YXNtL3NmcC1tYWNoaW5lLmg+CisjaW5jbHVkZSA8bWF0aC1lbXUvc29mdC1mcC5oPgorI2luY2x1ZGUgPG1hdGgtZW11L2RvdWJsZS5oPgogCiBpbnQKIGZkaXYodm9pZCAqZnJELCB2b2lkICpmckEsIHZvaWQgKmZyQikKQEAgLTExLDE0ICsxMiwxNSBAQAogCUZQX0RFQ0xfRChBKTsKIAlGUF9ERUNMX0QoQik7CiAJRlBfREVDTF9EKFIpOworCUZQX0RFQ0xfRVg7CiAJaW50IHJldCA9IDA7CiAKICNpZmRlZiBERUJVRwogCXByaW50aygiJXM6ICVwICVwICVwXG4iLCBfX2Z1bmNfXywgZnJELCBmckEsIGZyQik7CiAjZW5kaWYKIAotCV9fRlBfVU5QQUNLX0QoQSwgZnJBKTsKLQlfX0ZQX1VOUEFDS19EKEIsIGZyQik7CisJRlBfVU5QQUNLX0RQKEEsIGZyQSk7CisJRlBfVU5QQUNLX0RQKEIsIGZyQik7CiAKICNpZmRlZiBERUJVRwogCXByaW50aygiQTogJWxkICVsdSAlbHUgJWxkICglbGQpXG4iLCBBX3MsIEFfZjEsIEFfZjAsIEFfZSwgQV9jKTsKQEAgLTQ5LDUgKzUxLDcgQEAKIAlwcmludGsoIkQ6ICVsZCAlbHUgJWx1ICVsZCAoJWxkKVxuIiwgUl9zLCBSX2YxLCBSX2YwLCBSX2UsIFJfYyk7CiAjZW5kaWYKIAotCXJldHVybiAocmV0IHwgX19GUF9QQUNLX0QoZnJELCBSKSk7CisJX19GUF9QQUNLX0QoZnJELCBSKTsKKworCXJldHVybiBGUF9DVVJfRVhDRVBUSU9OUzsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9tYXRoLWVtdS9mZGl2cy5jIGIvYXJjaC9wb3dlcnBjL21hdGgtZW11L2ZkaXZzLmMKaW5kZXggMjRmZWVkNi4uNzk3ZjZhOSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL21hdGgtZW11L2ZkaXZzLmMKKysrIGIvYXJjaC9wb3dlcnBjL21hdGgtZW11L2ZkaXZzLmMKQEAgLTIsOSArMiwxMCBAQAogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KIAotI2luY2x1ZGUgInNvZnQtZnAuaCIKLSNpbmNsdWRlICJkb3VibGUuaCIKLSNpbmNsdWRlICJzaW5nbGUuaCIKKyNpbmNsdWRlIDxhc20vc2ZwLW1hY2hpbmUuaD4KKyNpbmNsdWRlIDxtYXRoLWVtdS9zb2Z0LWZwLmg+CisjaW5jbHVkZSA8bWF0aC1lbXUvZG91YmxlLmg+CisjaW5jbHVkZSA8bWF0aC1lbXUvc2luZ2xlLmg+CiAKIGludAogZmRpdnModm9pZCAqZnJELCB2b2lkICpmckEsIHZvaWQgKmZyQikKQEAgLTEyLDE0ICsxMywxNSBAQAogCUZQX0RFQ0xfRChBKTsKIAlGUF9ERUNMX0QoQik7CiAJRlBfREVDTF9EKFIpOworCUZQX0RFQ0xfRVg7CiAJaW50IHJldCA9IDA7CiAKICNpZmRlZiBERUJVRwogCXByaW50aygiJXM6ICVwICVwICVwXG4iLCBfX2Z1bmNfXywgZnJELCBmckEsIGZyQik7CiAjZW5kaWYKIAotCV9fRlBfVU5QQUNLX0QoQSwgZnJBKTsKLQlfX0ZQX1VOUEFDS19EKEIsIGZyQik7CisJRlBfVU5QQUNLX0RQKEEsIGZyQSk7CisJRlBfVU5QQUNLX0RQKEIsIGZyQik7CiAKICNpZmRlZiBERUJVRwogCXByaW50aygiQTogJWxkICVsdSAlbHUgJWxkICglbGQpXG4iLCBBX3MsIEFfZjEsIEFfZjAsIEFfZSwgQV9jKTsKQEAgLTUxLDUgKzUzLDcgQEAKIAlwcmludGsoIkQ6ICVsZCAlbHUgJWx1ICVsZCAoJWxkKVxuIiwgUl9zLCBSX2YxLCBSX2YwLCBSX2UsIFJfYyk7CiAjZW5kaWYKIAotCXJldHVybiAocmV0IHwgX19GUF9QQUNLX0RTKGZyRCwgUikpOworCV9fRlBfUEFDS19EUyhmckQsIFIpOworCisJcmV0dXJuIEZQX0NVUl9FWENFUFRJT05TOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL21hdGgtZW11L2ZtYWRkLmMgYi9hcmNoL3Bvd2VycGMvbWF0aC1lbXUvZm1hZGQuYwppbmRleCBkZWRiNDY1Li45MjUzMTNhIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvbWF0aC1lbXUvZm1hZGQuYworKysgYi9hcmNoL3Bvd2VycGMvbWF0aC1lbXUvZm1hZGQuYwpAQCAtMiw4ICsyLDkgQEAKICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAKLSNpbmNsdWRlICJzb2Z0LWZwLmgiCi0jaW5jbHVkZSAiZG91YmxlLmgiCisjaW5jbHVkZSA8YXNtL3NmcC1tYWNoaW5lLmg+CisjaW5jbHVkZSA8bWF0aC1lbXUvc29mdC1mcC5oPgorI2luY2x1ZGUgPG1hdGgtZW11L2RvdWJsZS5oPgogCiBpbnQKIGZtYWRkKHZvaWQgKmZyRCwgdm9pZCAqZnJBLCB2b2lkICpmckIsIHZvaWQgKmZyQykKQEAgLTEzLDE1ICsxNCwxNiBAQAogCUZQX0RFQ0xfRChCKTsKIAlGUF9ERUNMX0QoQyk7CiAJRlBfREVDTF9EKFQpOworCUZQX0RFQ0xfRVg7CiAJaW50IHJldCA9IDA7CiAKICNpZmRlZiBERUJVRwogCXByaW50aygiJXM6ICVwICVwICVwICVwXG4iLCBfX2Z1bmNfXywgZnJELCBmckEsIGZyQiwgZnJDKTsKICNlbmRpZgogCi0JX19GUF9VTlBBQ0tfRChBLCBmckEpOwotCV9fRlBfVU5QQUNLX0QoQiwgZnJCKTsKLQlfX0ZQX1VOUEFDS19EKEMsIGZyQyk7CisJRlBfVU5QQUNLX0RQKEEsIGZyQSk7CisJRlBfVU5QQUNLX0RQKEIsIGZyQik7CisJRlBfVU5QQUNLX0RQKEMsIGZyQyk7CiAKICNpZmRlZiBERUJVRwogCXByaW50aygiQTogJWxkICVsdSAlbHUgJWxkICglbGQpXG4iLCBBX3MsIEFfZjEsIEFfZjAsIEFfZSwgQV9jKTsKQEAgLTQ0LDUgKzQ2LDcgQEAKIAlwcmludGsoIkQ6ICVsZCAlbHUgJWx1ICVsZCAoJWxkKVxuIiwgUl9zLCBSX2YxLCBSX2YwLCBSX2UsIFJfYyk7CiAjZW5kaWYKIAotCXJldHVybiAocmV0IHwgX19GUF9QQUNLX0QoZnJELCBSKSk7CisJX19GUF9QQUNLX0QoZnJELCBSKTsKKworCXJldHVybiBGUF9DVVJfRVhDRVBUSU9OUzsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9tYXRoLWVtdS9mbWFkZHMuYyBiL2FyY2gvcG93ZXJwYy9tYXRoLWVtdS9mbWFkZHMuYwppbmRleCA2YmJiNTZkLi5hZWE4MGVmIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvbWF0aC1lbXUvZm1hZGRzLmMKKysrIGIvYXJjaC9wb3dlcnBjL21hdGgtZW11L2ZtYWRkcy5jCkBAIC0yLDkgKzIsMTAgQEAKICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAKLSNpbmNsdWRlICJzb2Z0LWZwLmgiCi0jaW5jbHVkZSAiZG91YmxlLmgiCi0jaW5jbHVkZSAic2luZ2xlLmgiCisjaW5jbHVkZSA8YXNtL3NmcC1tYWNoaW5lLmg+CisjaW5jbHVkZSA8bWF0aC1lbXUvc29mdC1mcC5oPgorI2luY2x1ZGUgPG1hdGgtZW11L2RvdWJsZS5oPgorI2luY2x1ZGUgPG1hdGgtZW11L3NpbmdsZS5oPgogCiBpbnQKIGZtYWRkcyh2b2lkICpmckQsIHZvaWQgKmZyQSwgdm9pZCAqZnJCLCB2b2lkICpmckMpCkBAIC0xNCwxNSArMTUsMTYgQEAKIAlGUF9ERUNMX0QoQik7CiAJRlBfREVDTF9EKEMpOwogCUZQX0RFQ0xfRChUKTsKKwlGUF9ERUNMX0VYOwogCWludCByZXQgPSAwOwogCiAjaWZkZWYgREVCVUcKIAlwcmludGsoIiVzOiAlcCAlcCAlcCAlcFxuIiwgX19mdW5jX18sIGZyRCwgZnJBLCBmckIsIGZyQyk7CiAjZW5kaWYKIAotCV9fRlBfVU5QQUNLX0QoQSwgZnJBKTsKLQlfX0ZQX1VOUEFDS19EKEIsIGZyQik7Ci0JX19GUF9VTlBBQ0tfRChDLCBmckMpOworCUZQX1VOUEFDS19EUChBLCBmckEpOworCUZQX1VOUEFDS19EUChCLCBmckIpOworCUZQX1VOUEFDS19EUChDLCBmckMpOwogCiAjaWZkZWYgREVCVUcKIAlwcmludGsoIkE6ICVsZCAlbHUgJWx1ICVsZCAoJWxkKVxuIiwgQV9zLCBBX2YxLCBBX2YwLCBBX2UsIEFfYyk7CkBAIC00NSw1ICs0Nyw3IEBACiAJcHJpbnRrKCJEOiAlbGQgJWx1ICVsdSAlbGQgKCVsZClcbiIsIFJfcywgUl9mMSwgUl9mMCwgUl9lLCBSX2MpOwogI2VuZGlmCiAKLQlyZXR1cm4gKHJldCB8IF9fRlBfUEFDS19EUyhmckQsIFIpKTsKKwlfX0ZQX1BBQ0tfRFMoZnJELCBSKTsKKworCXJldHVybiBGUF9DVVJfRVhDRVBUSU9OUzsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9tYXRoLWVtdS9mbXN1Yi5jIGIvYXJjaC9wb3dlcnBjL21hdGgtZW11L2Ztc3ViLmMKaW5kZXggZjMxMWUyYy4uYTY0NGQ1MiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL21hdGgtZW11L2Ztc3ViLmMKKysrIGIvYXJjaC9wb3dlcnBjL21hdGgtZW11L2Ztc3ViLmMKQEAgLTIsOCArMiw5IEBACiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogCi0jaW5jbHVkZSAic29mdC1mcC5oIgotI2luY2x1ZGUgImRvdWJsZS5oIgorI2luY2x1ZGUgPGFzbS9zZnAtbWFjaGluZS5oPgorI2luY2x1ZGUgPG1hdGgtZW11L3NvZnQtZnAuaD4KKyNpbmNsdWRlIDxtYXRoLWVtdS9kb3VibGUuaD4KIAogaW50CiBmbXN1Yih2b2lkICpmckQsIHZvaWQgKmZyQSwgdm9pZCAqZnJCLCB2b2lkICpmckMpCkBAIC0xMywxNSArMTQsMTYgQEAKIAlGUF9ERUNMX0QoQik7CiAJRlBfREVDTF9EKEMpOwogCUZQX0RFQ0xfRChUKTsKKwlGUF9ERUNMX0VYOwogCWludCByZXQgPSAwOwogCiAjaWZkZWYgREVCVUcKIAlwcmludGsoIiVzOiAlcCAlcCAlcCAlcFxuIiwgX19mdW5jX18sIGZyRCwgZnJBLCBmckIsIGZyQyk7CiAjZW5kaWYKIAotCV9fRlBfVU5QQUNLX0QoQSwgZnJBKTsKLQlfX0ZQX1VOUEFDS19EKEIsIGZyQik7Ci0JX19GUF9VTlBBQ0tfRChDLCBmckMpOworCUZQX1VOUEFDS19EUChBLCBmckEpOworCUZQX1VOUEFDS19EUChCLCBmckIpOworCUZQX1VOUEFDS19EUChDLCBmckMpOwogCiAjaWZkZWYgREVCVUcKIAlwcmludGsoIkE6ICVsZCAlbHUgJWx1ICVsZCAoJWxkKVxuIiwgQV9zLCBBX2YxLCBBX2YwLCBBX2UsIEFfYyk7CkBAIC00Nyw1ICs0OSw3IEBACiAJcHJpbnRrKCJEOiAlbGQgJWx1ICVsdSAlbGQgKCVsZClcbiIsIFJfcywgUl9mMSwgUl9mMCwgUl9lLCBSX2MpOwogI2VuZGlmCiAKLQlyZXR1cm4gKHJldCB8IF9fRlBfUEFDS19EKGZyRCwgUikpOworCV9fRlBfUEFDS19EKGZyRCwgUik7CisKKwlyZXR1cm4gRlBfQ1VSX0VYQ0VQVElPTlM7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbWF0aC1lbXUvZm1zdWJzLmMgYi9hcmNoL3Bvd2VycGMvbWF0aC1lbXUvZm1zdWJzLmMKaW5kZXggODFhNzE2ZC4uMmZkZWViOSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL21hdGgtZW11L2Ztc3Vicy5jCisrKyBiL2FyY2gvcG93ZXJwYy9tYXRoLWVtdS9mbXN1YnMuYwpAQCAtMiw5ICsyLDEwIEBACiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogCi0jaW5jbHVkZSAic29mdC1mcC5oIgotI2luY2x1ZGUgImRvdWJsZS5oIgotI2luY2x1ZGUgInNpbmdsZS5oIgorI2luY2x1ZGUgPGFzbS9zZnAtbWFjaGluZS5oPgorI2luY2x1ZGUgPG1hdGgtZW11L3NvZnQtZnAuaD4KKyNpbmNsdWRlIDxtYXRoLWVtdS9kb3VibGUuaD4KKyNpbmNsdWRlIDxtYXRoLWVtdS9zaW5nbGUuaD4KIAogaW50CiBmbXN1YnModm9pZCAqZnJELCB2b2lkICpmckEsIHZvaWQgKmZyQiwgdm9pZCAqZnJDKQpAQCAtMTQsMTUgKzE1LDE2IEBACiAJRlBfREVDTF9EKEIpOwogCUZQX0RFQ0xfRChDKTsKIAlGUF9ERUNMX0QoVCk7CisJRlBfREVDTF9FWDsKIAlpbnQgcmV0ID0gMDsKIAogI2lmZGVmIERFQlVHCiAJcHJpbnRrKCIlczogJXAgJXAgJXAgJXBcbiIsIF9fZnVuY19fLCBmckQsIGZyQSwgZnJCLCBmckMpOwogI2VuZGlmCiAKLQlfX0ZQX1VOUEFDS19EKEEsIGZyQSk7Ci0JX19GUF9VTlBBQ0tfRChCLCBmckIpOwotCV9fRlBfVU5QQUNLX0QoQywgZnJDKTsKKwlGUF9VTlBBQ0tfRFAoQSwgZnJBKTsKKwlGUF9VTlBBQ0tfRFAoQiwgZnJCKTsKKwlGUF9VTlBBQ0tfRFAoQywgZnJDKTsKIAogI2lmZGVmIERFQlVHCiAJcHJpbnRrKCJBOiAlbGQgJWx1ICVsdSAlbGQgKCVsZClcbiIsIEFfcywgQV9mMSwgQV9mMCwgQV9lLCBBX2MpOwpAQCAtNDgsNSArNTAsNyBAQAogCXByaW50aygiRDogJWxkICVsdSAlbHUgJWxkICglbGQpXG4iLCBSX3MsIFJfZjEsIFJfZjAsIFJfZSwgUl9jKTsKICNlbmRpZgogCi0JcmV0dXJuIChyZXQgfCBfX0ZQX1BBQ0tfRFMoZnJELCBSKSk7CisJX19GUF9QQUNLX0RTKGZyRCwgUik7CisKKwlyZXR1cm4gRlBfQ1VSX0VYQ0VQVElPTlM7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbWF0aC1lbXUvZm11bC5jIGIvYXJjaC9wb3dlcnBjL21hdGgtZW11L2ZtdWwuYwppbmRleCAyZjNkMzI3Li4zOTFmZDE3IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvbWF0aC1lbXUvZm11bC5jCisrKyBiL2FyY2gvcG93ZXJwYy9tYXRoLWVtdS9mbXVsLmMKQEAgLTIsOCArMiw5IEBACiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogCi0jaW5jbHVkZSAic29mdC1mcC5oIgotI2luY2x1ZGUgImRvdWJsZS5oIgorI2luY2x1ZGUgPGFzbS9zZnAtbWFjaGluZS5oPgorI2luY2x1ZGUgPG1hdGgtZW11L3NvZnQtZnAuaD4KKyNpbmNsdWRlIDxtYXRoLWVtdS9kb3VibGUuaD4KIAogaW50CiBmbXVsKHZvaWQgKmZyRCwgdm9pZCAqZnJBLCB2b2lkICpmckIpCkBAIC0xMSwxNCArMTIsMTUgQEAKIAlGUF9ERUNMX0QoQSk7CiAJRlBfREVDTF9EKEIpOwogCUZQX0RFQ0xfRChSKTsKKwlGUF9ERUNMX0VYOwogCWludCByZXQgPSAwOwogCiAjaWZkZWYgREVCVUcKIAlwcmludGsoIiVzOiAlcCAlcCAlcFxuIiwgX19mdW5jX18sIGZyRCwgZnJBLCBmckIpOwogI2VuZGlmCiAKLQlfX0ZQX1VOUEFDS19EKEEsIGZyQSk7Ci0JX19GUF9VTlBBQ0tfRChCLCBmckIpOworCUZQX1VOUEFDS19EUChBLCBmckEpOworCUZQX1VOUEFDS19EUChCLCBmckIpOwogCiAjaWZkZWYgREVCVUcKIAlwcmludGsoIkE6ICVsZCAlbHUgJWx1ICVsZCAoJWxkKSBbJTA4bHguJTA4bHggJWx4XVxuIiwKQEAgLTM4LDUgKzQwLDcgQEAKIAkgICAgICAgUl9zLCBSX2YxLCBSX2YwLCBSX2UsIFJfYywgUl9mMSwgUl9mMCwgUl9lICsgMTAyMyk7CiAjZW5kaWYKIAotCXJldHVybiAocmV0IHwgX19GUF9QQUNLX0QoZnJELCBSKSk7CisJX19GUF9QQUNLX0QoZnJELCBSKTsKKworCXJldHVybiBGUF9DVVJfRVhDRVBUSU9OUzsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9tYXRoLWVtdS9mbXVscy5jIGIvYXJjaC9wb3dlcnBjL21hdGgtZW11L2ZtdWxzLmMKaW5kZXggOTYyYjU4OC4uMmQzZWM1ZiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL21hdGgtZW11L2ZtdWxzLmMKKysrIGIvYXJjaC9wb3dlcnBjL21hdGgtZW11L2ZtdWxzLmMKQEAgLTIsOSArMiwxMCBAQAogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KIAotI2luY2x1ZGUgInNvZnQtZnAuaCIKLSNpbmNsdWRlICJkb3VibGUuaCIKLSNpbmNsdWRlICJzaW5nbGUuaCIKKyNpbmNsdWRlIDxhc20vc2ZwLW1hY2hpbmUuaD4KKyNpbmNsdWRlIDxtYXRoLWVtdS9zb2Z0LWZwLmg+CisjaW5jbHVkZSA8bWF0aC1lbXUvZG91YmxlLmg+CisjaW5jbHVkZSA8bWF0aC1lbXUvc2luZ2xlLmg+CiAKIGludAogZm11bHModm9pZCAqZnJELCB2b2lkICpmckEsIHZvaWQgKmZyQikKQEAgLTEyLDE0ICsxMywxNSBAQAogCUZQX0RFQ0xfRChBKTsKIAlGUF9ERUNMX0QoQik7CiAJRlBfREVDTF9EKFIpOworCUZQX0RFQ0xfRVg7CiAJaW50IHJldCA9IDA7CiAKICNpZmRlZiBERUJVRwogCXByaW50aygiJXM6ICVwICVwICVwXG4iLCBfX2Z1bmNfXywgZnJELCBmckEsIGZyQik7CiAjZW5kaWYKIAotCV9fRlBfVU5QQUNLX0QoQSwgZnJBKTsKLQlfX0ZQX1VOUEFDS19EKEIsIGZyQik7CisJRlBfVU5QQUNLX0RQKEEsIGZyQSk7CisJRlBfVU5QQUNLX0RQKEIsIGZyQik7CiAKICNpZmRlZiBERUJVRwogCXByaW50aygiQTogJWxkICVsdSAlbHUgJWxkICglbGQpIFslMDhseC4lMDhseCAlbHhdXG4iLApAQCAtMzksNSArNDEsNyBAQAogCSAgICAgICBSX3MsIFJfZjEsIFJfZjAsIFJfZSwgUl9jLCBSX2YxLCBSX2YwLCBSX2UgKyAxMDIzKTsKICNlbmRpZgogCi0JcmV0dXJuIChyZXQgfCBfX0ZQX1BBQ0tfRFMoZnJELCBSKSk7CisJX19GUF9QQUNLX0RTKGZyRCwgUik7CisKKwlyZXR1cm4gRlBfQ1VSX0VYQ0VQVElPTlM7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbWF0aC1lbXUvZm5tYWRkLmMgYi9hcmNoL3Bvd2VycGMvbWF0aC1lbXUvZm5tYWRkLmMKaW5kZXggOGNmNzgyNy4uMjQ5N2I4NiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL21hdGgtZW11L2ZubWFkZC5jCisrKyBiL2FyY2gvcG93ZXJwYy9tYXRoLWVtdS9mbm1hZGQuYwpAQCAtMiw4ICsyLDkgQEAKICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAKLSNpbmNsdWRlICJzb2Z0LWZwLmgiCi0jaW5jbHVkZSAiZG91YmxlLmgiCisjaW5jbHVkZSA8YXNtL3NmcC1tYWNoaW5lLmg+CisjaW5jbHVkZSA8bWF0aC1lbXUvc29mdC1mcC5oPgorI2luY2x1ZGUgPG1hdGgtZW11L2RvdWJsZS5oPgogCiBpbnQKIGZubWFkZCh2b2lkICpmckQsIHZvaWQgKmZyQSwgdm9pZCAqZnJCLCB2b2lkICpmckMpCkBAIC0xMywxNSArMTQsMTYgQEAKIAlGUF9ERUNMX0QoQik7CiAJRlBfREVDTF9EKEMpOwogCUZQX0RFQ0xfRChUKTsKKwlGUF9ERUNMX0VYOwogCWludCByZXQgPSAwOwogCiAjaWZkZWYgREVCVUcKIAlwcmludGsoIiVzOiAlcCAlcCAlcCAlcFxuIiwgX19mdW5jX18sIGZyRCwgZnJBLCBmckIsIGZyQyk7CiAjZW5kaWYKIAotCV9fRlBfVU5QQUNLX0QoQSwgZnJBKTsKLQlfX0ZQX1VOUEFDS19EKEIsIGZyQik7Ci0JX19GUF9VTlBBQ0tfRChDLCBmckMpOworCUZQX1VOUEFDS19EUChBLCBmckEpOworCUZQX1VOUEFDS19EUChCLCBmckIpOworCUZQX1VOUEFDS19EUChDLCBmckMpOwogCiAjaWZkZWYgREVCVUcKIAlwcmludGsoIkE6ICVsZCAlbHUgJWx1ICVsZCAoJWxkKVxuIiwgQV9zLCBBX2YxLCBBX2YwLCBBX2UsIEFfYyk7CkBAIC00Nyw1ICs0OSw3IEBACiAJcHJpbnRrKCJEOiAlbGQgJWx1ICVsdSAlbGQgKCVsZClcbiIsIFJfcywgUl9mMSwgUl9mMCwgUl9lLCBSX2MpOwogI2VuZGlmCiAKLQlyZXR1cm4gKHJldCB8IF9fRlBfUEFDS19EKGZyRCwgUikpOworCV9fRlBfUEFDS19EKGZyRCwgUik7CisKKwlyZXR1cm4gRlBfQ1VSX0VYQ0VQVElPTlM7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbWF0aC1lbXUvZm5tYWRkcy5jIGIvYXJjaC9wb3dlcnBjL21hdGgtZW11L2ZubWFkZHMuYwppbmRleCBmMWM0ZjBmLi5lZTlkNzFlIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvbWF0aC1lbXUvZm5tYWRkcy5jCisrKyBiL2FyY2gvcG93ZXJwYy9tYXRoLWVtdS9mbm1hZGRzLmMKQEAgLTIsOSArMiwxMCBAQAogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KIAotI2luY2x1ZGUgInNvZnQtZnAuaCIKLSNpbmNsdWRlICJkb3VibGUuaCIKLSNpbmNsdWRlICJzaW5nbGUuaCIKKyNpbmNsdWRlIDxhc20vc2ZwLW1hY2hpbmUuaD4KKyNpbmNsdWRlIDxtYXRoLWVtdS9zb2Z0LWZwLmg+CisjaW5jbHVkZSA8bWF0aC1lbXUvZG91YmxlLmg+CisjaW5jbHVkZSA8bWF0aC1lbXUvc2luZ2xlLmg+CiAKIGludAogZm5tYWRkcyh2b2lkICpmckQsIHZvaWQgKmZyQSwgdm9pZCAqZnJCLCB2b2lkICpmckMpCkBAIC0xNCwxNSArMTUsMTYgQEAKIAlGUF9ERUNMX0QoQik7CiAJRlBfREVDTF9EKEMpOwogCUZQX0RFQ0xfRChUKTsKKwlGUF9ERUNMX0VYOwogCWludCByZXQgPSAwOwogCiAjaWZkZWYgREVCVUcKIAlwcmludGsoIiVzOiAlcCAlcCAlcCAlcFxuIiwgX19mdW5jX18sIGZyRCwgZnJBLCBmckIsIGZyQyk7CiAjZW5kaWYKIAotCV9fRlBfVU5QQUNLX0QoQSwgZnJBKTsKLQlfX0ZQX1VOUEFDS19EKEIsIGZyQik7Ci0JX19GUF9VTlBBQ0tfRChDLCBmckMpOworCUZQX1VOUEFDS19EUChBLCBmckEpOworCUZQX1VOUEFDS19EUChCLCBmckIpOworCUZQX1VOUEFDS19EUChDLCBmckMpOwogCiAjaWZkZWYgREVCVUcKIAlwcmludGsoIkE6ICVsZCAlbHUgJWx1ICVsZCAoJWxkKVxuIiwgQV9zLCBBX2YxLCBBX2YwLCBBX2UsIEFfYyk7CkBAIC00OCw1ICs1MCw3IEBACiAJcHJpbnRrKCJEOiAlbGQgJWx1ICVsdSAlbGQgKCVsZClcbiIsIFJfcywgUl9mMSwgUl9mMCwgUl9lLCBSX2MpOwogI2VuZGlmCiAKLQlyZXR1cm4gKHJldCB8IF9fRlBfUEFDS19EUyhmckQsIFIpKTsKKwlfX0ZQX1BBQ0tfRFMoZnJELCBSKTsKKworCXJldHVybiBGUF9DVVJfRVhDRVBUSU9OUzsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9tYXRoLWVtdS9mbm1zdWIuYyBiL2FyY2gvcG93ZXJwYy9tYXRoLWVtdS9mbm1zdWIuYwppbmRleCA5ODk0NGU2Li4zODg1YTc3IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvbWF0aC1lbXUvZm5tc3ViLmMKKysrIGIvYXJjaC9wb3dlcnBjL21hdGgtZW11L2ZubXN1Yi5jCkBAIC0yLDggKzIsOSBAQAogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KIAotI2luY2x1ZGUgInNvZnQtZnAuaCIKLSNpbmNsdWRlICJkb3VibGUuaCIKKyNpbmNsdWRlIDxhc20vc2ZwLW1hY2hpbmUuaD4KKyNpbmNsdWRlIDxtYXRoLWVtdS9zb2Z0LWZwLmg+CisjaW5jbHVkZSA8bWF0aC1lbXUvZG91YmxlLmg+CiAKIGludAogZm5tc3ViKHZvaWQgKmZyRCwgdm9pZCAqZnJBLCB2b2lkICpmckIsIHZvaWQgKmZyQykKQEAgLTEzLDE1ICsxNCwxNiBAQAogCUZQX0RFQ0xfRChCKTsKIAlGUF9ERUNMX0QoQyk7CiAJRlBfREVDTF9EKFQpOworCUZQX0RFQ0xfRVg7CiAJaW50IHJldCA9IDA7CiAKICNpZmRlZiBERUJVRwogCXByaW50aygiJXM6ICVwICVwICVwICVwXG4iLCBfX2Z1bmNfXywgZnJELCBmckEsIGZyQiwgZnJDKTsKICNlbmRpZgogCi0JX19GUF9VTlBBQ0tfRChBLCBmckEpOwotCV9fRlBfVU5QQUNLX0QoQiwgZnJCKTsKLQlfX0ZQX1VOUEFDS19EKEMsIGZyQyk7CisJRlBfVU5QQUNLX0RQKEEsIGZyQSk7CisJRlBfVU5QQUNLX0RQKEIsIGZyQik7CisJRlBfVU5QQUNLX0RQKEMsIGZyQyk7CiAKICNpZmRlZiBERUJVRwogCXByaW50aygiQTogJWxkICVsdSAlbHUgJWxkICglbGQpXG4iLCBBX3MsIEFfZjEsIEFfZjAsIEFfZSwgQV9jKTsKQEAgLTUwLDUgKzUyLDcgQEAKIAlwcmludGsoIkQ6ICVsZCAlbHUgJWx1ICVsZCAoJWxkKVxuIiwgUl9zLCBSX2YxLCBSX2YwLCBSX2UsIFJfYyk7CiAjZW5kaWYKIAotCXJldHVybiAocmV0IHwgX19GUF9QQUNLX0QoZnJELCBSKSk7CisJX19GUF9QQUNLX0QoZnJELCBSKTsKKworCXJldHVybiBGUF9DVVJfRVhDRVBUSU9OUzsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9tYXRoLWVtdS9mbm1zdWJzLmMgYi9hcmNoL3Bvd2VycGMvbWF0aC1lbXUvZm5tc3Vicy5jCmluZGV4IGIyMGY0ZWIuLmY4MzVkZmUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9tYXRoLWVtdS9mbm1zdWJzLmMKKysrIGIvYXJjaC9wb3dlcnBjL21hdGgtZW11L2ZubXN1YnMuYwpAQCAtMiw5ICsyLDEwIEBACiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogCi0jaW5jbHVkZSAic29mdC1mcC5oIgotI2luY2x1ZGUgImRvdWJsZS5oIgotI2luY2x1ZGUgInNpbmdsZS5oIgorI2luY2x1ZGUgPGFzbS9zZnAtbWFjaGluZS5oPgorI2luY2x1ZGUgPG1hdGgtZW11L3NvZnQtZnAuaD4KKyNpbmNsdWRlIDxtYXRoLWVtdS9kb3VibGUuaD4KKyNpbmNsdWRlIDxtYXRoLWVtdS9zaW5nbGUuaD4KIAogaW50CiBmbm1zdWJzKHZvaWQgKmZyRCwgdm9pZCAqZnJBLCB2b2lkICpmckIsIHZvaWQgKmZyQykKQEAgLTE0LDE1ICsxNSwxNiBAQAogCUZQX0RFQ0xfRChCKTsKIAlGUF9ERUNMX0QoQyk7CiAJRlBfREVDTF9EKFQpOworCUZQX0RFQ0xfRVg7CiAJaW50IHJldCA9IDA7CiAKICNpZmRlZiBERUJVRwogCXByaW50aygiJXM6ICVwICVwICVwICVwXG4iLCBfX2Z1bmNfXywgZnJELCBmckEsIGZyQiwgZnJDKTsKICNlbmRpZgogCi0JX19GUF9VTlBBQ0tfRChBLCBmckEpOwotCV9fRlBfVU5QQUNLX0QoQiwgZnJCKTsKLQlfX0ZQX1VOUEFDS19EKEMsIGZyQyk7CisJRlBfVU5QQUNLX0RQKEEsIGZyQSk7CisJRlBfVU5QQUNLX0RQKEIsIGZyQik7CisJRlBfVU5QQUNLX0RQKEMsIGZyQyk7CiAKICNpZmRlZiBERUJVRwogCXByaW50aygiQTogJWxkICVsdSAlbHUgJWxkICglbGQpXG4iLCBBX3MsIEFfZjEsIEFfZjAsIEFfZSwgQV9jKTsKQEAgLTUxLDUgKzUzLDcgQEAKIAlwcmludGsoIkQ6ICVsZCAlbHUgJWx1ICVsZCAoJWxkKVxuIiwgUl9zLCBSX2YxLCBSX2YwLCBSX2UsIFJfYyk7CiAjZW5kaWYKIAotCXJldHVybiAocmV0IHwgX19GUF9QQUNLX0RTKGZyRCwgUikpOworCV9fRlBfUEFDS19EUyhmckQsIFIpOworCisJcmV0dXJuIEZQX0NVUl9FWENFUFRJT05TOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL21hdGgtZW11L2Zyc3AuYyBiL2FyY2gvcG93ZXJwYy9tYXRoLWVtdS9mcnNwLmMKaW5kZXggNzI0Y2NiYy4uZGRjYzE0NiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL21hdGgtZW11L2Zyc3AuYworKysgYi9hcmNoL3Bvd2VycGMvbWF0aC1lbXUvZnJzcC5jCkBAIC0yLDI0ICsyLDI4IEBACiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogCi0jaW5jbHVkZSAic29mdC1mcC5oIgotI2luY2x1ZGUgImRvdWJsZS5oIgotI2luY2x1ZGUgInNpbmdsZS5oIgorI2luY2x1ZGUgPGFzbS9zZnAtbWFjaGluZS5oPgorI2luY2x1ZGUgPG1hdGgtZW11L3NvZnQtZnAuaD4KKyNpbmNsdWRlIDxtYXRoLWVtdS9kb3VibGUuaD4KKyNpbmNsdWRlIDxtYXRoLWVtdS9zaW5nbGUuaD4KIAogaW50CiBmcnNwKHZvaWQgKmZyRCwgdm9pZCAqZnJCKQogewogCUZQX0RFQ0xfRChCKTsKKwlGUF9ERUNMX0VYOwogCiAjaWZkZWYgREVCVUcKIAlwcmludGsoIiVzOiBEICVwLCBCICVwXG4iLCBfX2Z1bmNfXywgZnJELCBmckIpOwogI2VuZGlmCiAKLQlfX0ZQX1VOUEFDS19EKEIsIGZyQik7CisJRlBfVU5QQUNLX0RQKEIsIGZyQik7CiAKICNpZmRlZiBERUJVRwogCXByaW50aygiQjogJWxkICVsdSAlbHUgJWxkICglbGQpXG4iLCBCX3MsIEJfZjEsIEJfZjAsIEJfZSwgQl9jKTsKICNlbmRpZgogCi0JcmV0dXJuIF9fRlBfUEFDS19EUyhmckQsIEIpOworCV9fRlBfUEFDS19EUyhmckQsIEIpOworCisJcmV0dXJuIEZQX0NVUl9FWENFUFRJT05TOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL21hdGgtZW11L2ZzZWwuYyBiL2FyY2gvcG93ZXJwYy9tYXRoLWVtdS9mc2VsLmMKaW5kZXggZWNiNWYyOC4uMWIwYzE0NCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL21hdGgtZW11L2ZzZWwuYworKysgYi9hcmNoL3Bvd2VycGMvbWF0aC1lbXUvZnNlbC5jCkBAIC0yLDE5ICsyLDIxIEBACiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogCi0jaW5jbHVkZSAic29mdC1mcC5oIgotI2luY2x1ZGUgImRvdWJsZS5oIgorI2luY2x1ZGUgPGFzbS9zZnAtbWFjaGluZS5oPgorI2luY2x1ZGUgPG1hdGgtZW11L3NvZnQtZnAuaD4KKyNpbmNsdWRlIDxtYXRoLWVtdS9kb3VibGUuaD4KIAogaW50CiBmc2VsKHUzMiAqZnJELCB2b2lkICpmckEsIHUzMiAqZnJCLCB1MzIgKmZyQykKIHsKIAlGUF9ERUNMX0QoQSk7CisJRlBfREVDTF9FWDsKIAogI2lmZGVmIERFQlVHCiAJcHJpbnRrKCIlczogJXAgJXAgJXAgJXBcbiIsIF9fZnVuY19fLCBmckQsIGZyQSwgZnJCLCBmckMpOwogI2VuZGlmCiAKLQlfX0ZQX1VOUEFDS19EKEEsIGZyQSk7CisJRlBfVU5QQUNLX0RQKEEsIGZyQSk7CiAKICNpZmRlZiBERUJVRwogCXByaW50aygiQTogJWxkICVsdSAlbHUgJWxkICglbGQpXG4iLCBBX3MsIEFfZjEsIEFfZjAsIEFfZSwgQV9jKTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9tYXRoLWVtdS9mc3FydC5jIGIvYXJjaC9wb3dlcnBjL21hdGgtZW11L2ZzcXJ0LmMKaW5kZXggMzhlYzJiNy4uM2U5MDA3MiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL21hdGgtZW11L2ZzcXJ0LmMKKysrIGIvYXJjaC9wb3dlcnBjL21hdGgtZW11L2ZzcXJ0LmMKQEAgLTIsMjEgKzIsMjMgQEAKICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAKLSNpbmNsdWRlICJzb2Z0LWZwLmgiCi0jaW5jbHVkZSAiZG91YmxlLmgiCisjaW5jbHVkZSA8YXNtL3NmcC1tYWNoaW5lLmg+CisjaW5jbHVkZSA8bWF0aC1lbXUvc29mdC1mcC5oPgorI2luY2x1ZGUgPG1hdGgtZW11L2RvdWJsZS5oPgogCiBpbnQKIGZzcXJ0KHZvaWQgKmZyRCwgdm9pZCAqZnJCKQogewogCUZQX0RFQ0xfRChCKTsKIAlGUF9ERUNMX0QoUik7CisJRlBfREVDTF9FWDsKIAlpbnQgcmV0ID0gMDsKIAogI2lmZGVmIERFQlVHCiAJcHJpbnRrKCIlczogJXAgJXAgJXAgJXBcbiIsIF9fZnVuY19fLCBmckQsIGZyQik7CiAjZW5kaWYKIAotCV9fRlBfVU5QQUNLX0QoQiwgZnJCKTsKKwlGUF9VTlBBQ0tfRFAoQiwgZnJCKTsKIAogI2lmZGVmIERFQlVHCiAJcHJpbnRrKCJCOiAlbGQgJWx1ICVsdSAlbGQgKCVsZClcbiIsIEJfcywgQl9mMSwgQl9mMCwgQl9lLCBCX2MpOwpAQCAtMzMsNSArMzUsNyBAQAogCXByaW50aygiUjogJWxkICVsdSAlbHUgJWxkICglbGQpXG4iLCBSX3MsIFJfZjEsIFJfZjAsIFJfZSwgUl9jKTsKICNlbmRpZgogCi0JcmV0dXJuIChyZXQgfCBfX0ZQX1BBQ0tfRChmckQsIFIpKTsKKwlfX0ZQX1BBQ0tfRChmckQsIFIpOworCisJcmV0dXJuIEZQX0NVUl9FWENFUFRJT05TOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL21hdGgtZW11L2ZzcXJ0cy5jIGIvYXJjaC9wb3dlcnBjL21hdGgtZW11L2ZzcXJ0cy5jCmluZGV4IDMzNTI2M2UuLjI4NDNiZTkgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9tYXRoLWVtdS9mc3FydHMuYworKysgYi9hcmNoL3Bvd2VycGMvbWF0aC1lbXUvZnNxcnRzLmMKQEAgLTIsMjIgKzIsMjQgQEAKICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAKLSNpbmNsdWRlICJzb2Z0LWZwLmgiCi0jaW5jbHVkZSAiZG91YmxlLmgiCi0jaW5jbHVkZSAic2luZ2xlLmgiCisjaW5jbHVkZSA8YXNtL3NmcC1tYWNoaW5lLmg+CisjaW5jbHVkZSA8bWF0aC1lbXUvc29mdC1mcC5oPgorI2luY2x1ZGUgPG1hdGgtZW11L2RvdWJsZS5oPgorI2luY2x1ZGUgPG1hdGgtZW11L3NpbmdsZS5oPgogCiBpbnQKIGZzcXJ0cyh2b2lkICpmckQsIHZvaWQgKmZyQikKIHsKIAlGUF9ERUNMX0QoQik7CiAJRlBfREVDTF9EKFIpOworCUZQX0RFQ0xfRVg7CiAJaW50IHJldCA9IDA7CiAKICNpZmRlZiBERUJVRwogCXByaW50aygiJXM6ICVwICVwICVwICVwXG4iLCBfX2Z1bmNfXywgZnJELCBmckIpOwogI2VuZGlmCiAKLQlfX0ZQX1VOUEFDS19EKEIsIGZyQik7CisJRlBfVU5QQUNLX0RQKEIsIGZyQik7CiAKICNpZmRlZiBERUJVRwogCXByaW50aygiQjogJWxkICVsdSAlbHUgJWxkICglbGQpXG4iLCBCX3MsIEJfZjEsIEJfZjAsIEJfZSwgQl9jKTsKQEAgLTM0LDUgKzM2LDcgQEAKIAlwcmludGsoIlI6ICVsZCAlbHUgJWx1ICVsZCAoJWxkKVxuIiwgUl9zLCBSX2YxLCBSX2YwLCBSX2UsIFJfYyk7CiAjZW5kaWYKIAotCXJldHVybiAocmV0IHwgX19GUF9QQUNLX0RTKGZyRCwgUikpOworCV9fRlBfUEFDS19EUyhmckQsIFIpOworCisJcmV0dXJuIEZQX0NVUl9FWENFUFRJT05TOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL21hdGgtZW11L2ZzdWIuYyBiL2FyY2gvcG93ZXJwYy9tYXRoLWVtdS9mc3ViLmMKaW5kZXggMjA4ZDIwZi4uNzhiMDk0NCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL21hdGgtZW11L2ZzdWIuYworKysgYi9hcmNoL3Bvd2VycGMvbWF0aC1lbXUvZnN1Yi5jCkBAIC0yLDggKzIsOSBAQAogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KIAotI2luY2x1ZGUgInNvZnQtZnAuaCIKLSNpbmNsdWRlICJkb3VibGUuaCIKKyNpbmNsdWRlIDxhc20vc2ZwLW1hY2hpbmUuaD4KKyNpbmNsdWRlIDxtYXRoLWVtdS9zb2Z0LWZwLmg+CisjaW5jbHVkZSA8bWF0aC1lbXUvZG91YmxlLmg+CiAKIGludAogZnN1Yih2b2lkICpmckQsIHZvaWQgKmZyQSwgdm9pZCAqZnJCKQpAQCAtMTEsMTQgKzEyLDE1IEBACiAJRlBfREVDTF9EKEEpOwogCUZQX0RFQ0xfRChCKTsKIAlGUF9ERUNMX0QoUik7CisJRlBfREVDTF9FWDsKIAlpbnQgcmV0ID0gMDsKIAogI2lmZGVmIERFQlVHCiAJcHJpbnRrKCIlczogJXAgJXAgJXBcbiIsIF9fZnVuY19fLCBmckQsIGZyQSwgZnJCKTsKICNlbmRpZgogCi0JX19GUF9VTlBBQ0tfRChBLCBmckEpOwotCV9fRlBfVU5QQUNLX0QoQiwgZnJCKTsKKwlGUF9VTlBBQ0tfRFAoQSwgZnJBKTsKKwlGUF9VTlBBQ0tfRFAoQiwgZnJCKTsKIAogI2lmZGVmIERFQlVHCiAJcHJpbnRrKCJBOiAlbGQgJWx1ICVsdSAlbGQgKCVsZClcbiIsIEFfcywgQV9mMSwgQV9mMCwgQV9lLCBBX2MpOwpAQCAtMzcsNSArMzksNyBAQAogCXByaW50aygiRDogJWxkICVsdSAlbHUgJWxkICglbGQpXG4iLCBSX3MsIFJfZjEsIFJfZjAsIFJfZSwgUl9jKTsKICNlbmRpZgogCi0JcmV0dXJuIChyZXQgfCBfX0ZQX1BBQ0tfRChmckQsIFIpKTsKKwlfX0ZQX1BBQ0tfRChmckQsIFIpOworCisJcmV0dXJuIEZQX0NVUl9FWENFUFRJT05TOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL21hdGgtZW11L2ZzdWJzLmMgYi9hcmNoL3Bvd2VycGMvbWF0aC1lbXUvZnN1YnMuYwppbmRleCAwZTYxYjgwLi5kM2JmOTA4IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvbWF0aC1lbXUvZnN1YnMuYworKysgYi9hcmNoL3Bvd2VycGMvbWF0aC1lbXUvZnN1YnMuYwpAQCAtMiw5ICsyLDEwIEBACiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogCi0jaW5jbHVkZSAic29mdC1mcC5oIgotI2luY2x1ZGUgImRvdWJsZS5oIgotI2luY2x1ZGUgInNpbmdsZS5oIgorI2luY2x1ZGUgPGFzbS9zZnAtbWFjaGluZS5oPgorI2luY2x1ZGUgPG1hdGgtZW11L3NvZnQtZnAuaD4KKyNpbmNsdWRlIDxtYXRoLWVtdS9kb3VibGUuaD4KKyNpbmNsdWRlIDxtYXRoLWVtdS9zaW5nbGUuaD4KIAogaW50CiBmc3Vicyh2b2lkICpmckQsIHZvaWQgKmZyQSwgdm9pZCAqZnJCKQpAQCAtMTIsMTQgKzEzLDE1IEBACiAJRlBfREVDTF9EKEEpOwogCUZQX0RFQ0xfRChCKTsKIAlGUF9ERUNMX0QoUik7CisJRlBfREVDTF9FWDsKIAlpbnQgcmV0ID0gMDsKIAogI2lmZGVmIERFQlVHCiAJcHJpbnRrKCIlczogJXAgJXAgJXBcbiIsIF9fZnVuY19fLCBmckQsIGZyQSwgZnJCKTsKICNlbmRpZgogCi0JX19GUF9VTlBBQ0tfRChBLCBmckEpOwotCV9fRlBfVU5QQUNLX0QoQiwgZnJCKTsKKwlGUF9VTlBBQ0tfRFAoQSwgZnJBKTsKKwlGUF9VTlBBQ0tfRFAoQiwgZnJCKTsKIAogI2lmZGVmIERFQlVHCiAJcHJpbnRrKCJBOiAlbGQgJWx1ICVsdSAlbGQgKCVsZClcbiIsIEFfcywgQV9mMSwgQV9mMCwgQV9lLCBBX2MpOwpAQCAtMzgsNSArNDAsNyBAQAogCXByaW50aygiRDogJWxkICVsdSAlbHUgJWxkICglbGQpXG4iLCBSX3MsIFJfZjEsIFJfZjAsIFJfZSwgUl9jKTsKICNlbmRpZgogCi0JcmV0dXJuIChyZXQgfCBfX0ZQX1BBQ0tfRFMoZnJELCBSKSk7CisJX19GUF9QQUNLX0RTKGZyRCwgUik7CisKKwlyZXR1cm4gRlBfQ1VSX0VYQ0VQVElPTlM7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbWF0aC1lbXUvbGZkLmMgYi9hcmNoL3Bvd2VycGMvbWF0aC1lbXUvbGZkLmMKaW5kZXggNmVjOTBiNS4uNzlhYzc2ZCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL21hdGgtZW11L2xmZC5jCisrKyBiL2FyY2gvcG93ZXJwYy9tYXRoLWVtdS9sZmQuYwpAQCAtMiw4ICsyLDggQEAKICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAKLSNpbmNsdWRlICJzZnAtbWFjaGluZS5oIgotI2luY2x1ZGUgImRvdWJsZS5oIgorI2luY2x1ZGUgPGFzbS9zZnAtbWFjaGluZS5oPgorI2luY2x1ZGUgPG1hdGgtZW11L2RvdWJsZS5oPgogCiBpbnQKIGxmZCh2b2lkICpmckQsIHZvaWQgKmVhKQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL21hdGgtZW11L2xmcy5jIGIvYXJjaC9wb3dlcnBjL21hdGgtZW11L2xmcy5jCmluZGV4IDZmMThlYmUuLjQzNGVkMjcgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9tYXRoLWVtdS9sZnMuYworKysgYi9hcmNoL3Bvd2VycGMvbWF0aC1lbXUvbGZzLmMKQEAgLTIsMTUgKzIsMTcgQEAKICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAKLSNpbmNsdWRlICJzb2Z0LWZwLmgiCi0jaW5jbHVkZSAiZG91YmxlLmgiCi0jaW5jbHVkZSAic2luZ2xlLmgiCisjaW5jbHVkZSA8YXNtL3NmcC1tYWNoaW5lLmg+CisjaW5jbHVkZSA8bWF0aC1lbXUvc29mdC1mcC5oPgorI2luY2x1ZGUgPG1hdGgtZW11L2RvdWJsZS5oPgorI2luY2x1ZGUgPG1hdGgtZW11L3NpbmdsZS5oPgogCiBpbnQKIGxmcyh2b2lkICpmckQsIHZvaWQgKmVhKQogewogCUZQX0RFQ0xfRChSKTsKIAlGUF9ERUNMX1MoQSk7CisJRlBfREVDTF9FWDsKIAlmbG9hdCBmOwogCiAjaWZkZWYgREVCVUcKQEAgLTIwLDcgKzIyLDcgQEAKIAlpZiAoY29weV9mcm9tX3VzZXIoJmYsIGVhLCBzaXplb2YoZmxvYXQpKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKLQlfX0ZQX1VOUEFDS19TKEEsICZmKTsKKwlGUF9VTlBBQ0tfUyhBLCBmKTsKIAogI2lmZGVmIERFQlVHCiAJcHJpbnRrKCJBOiAlbGQgJWx1ICVsZCAoJWxkKSBbJTA4bHhdXG4iLCBBX3MsIEFfZiwgQV9lLCBBX2MsCkBAIC0zMyw1ICszNSwxMiBAQAogCXByaW50aygiUjogJWxkICVsdSAlbHUgJWxkICglbGQpXG4iLCBSX3MsIFJfZjEsIFJfZjAsIFJfZSwgUl9jKTsKICNlbmRpZgogCi0JcmV0dXJuIF9fRlBfUEFDS19EKGZyRCwgUik7CisJaWYgKFJfYyA9PSBGUF9DTFNfTkFOKSB7CisJCVJfZSA9IF9GUF9FWFBNQVhfRDsKKwkJX0ZQX1BBQ0tfUkFXXzJfUChELCBmckQsIFIpOworCX0gZWxzZSB7CisJCV9fRlBfUEFDS19EKGZyRCwgUik7CisJfQorCisJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbWF0aC1lbXUvbWF0aC5jIGIvYXJjaC9wb3dlcnBjL21hdGgtZW11L21hdGguYwppbmRleCAyOWU1NDVlLi4xNjRkNTU5IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvbWF0aC1lbXUvbWF0aC5jCisrKyBiL2FyY2gvcG93ZXJwYy9tYXRoLWVtdS9tYXRoLmMKQEAgLTgsOCArOCw4IEBACiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxhc20vcmVnLmg+CiAKLSNpbmNsdWRlICJzZnAtbWFjaGluZS5oIgotI2luY2x1ZGUgImRvdWJsZS5oIgorI2luY2x1ZGUgPGFzbS9zZnAtbWFjaGluZS5oPgorI2luY2x1ZGUgPG1hdGgtZW11L2RvdWJsZS5oPgogCiAjZGVmaW5lIEZMT0FURlVOQyh4KQlleHRlcm4gaW50IHgodm9pZCAqLCB2b2lkICosIHZvaWQgKiwgdm9pZCAqKQogCkBAIC0xNjgsNiArMTY4LDggQEAKIAkJCWZwc2NyIHw9IEZQU0NSX1pYOwogCQlpZiAoZWZsYWcgJiBFRkxBR19JTkVYQUNUKQogCQkJZnBzY3IgfD0gRlBTQ1JfWFg7CisJCWlmIChlZmxhZyAmIEVGTEFHX0lOVkFMSUQpCisJCQlmcHNjciB8PSBGUFNDUl9WWDsKIAkJaWYgKGVmbGFnICYgRUZMQUdfVlhTTkFOKQogCQkJZnBzY3IgfD0gRlBTQ1JfVlhTTkFOOwogCQlpZiAoZWZsYWcgJiBFRkxBR19WWElTSSkKQEAgLTE4OCw3ICsxOTAsNyBAQAogCQkJZnBzY3IgfD0gRlBTQ1JfVlhDVkk7CiAJfQogCi0JZnBzY3IgJj0gfihGUFNDUl9WWCk7CisvLwlmcHNjciAmPSB+KEZQU0NSX1ZYKTsKIAlpZiAoZnBzY3IgJiAoRlBTQ1JfVlhTTkFOIHwgRlBTQ1JfVlhJU0kgfCBGUFNDUl9WWElESSB8CiAJCSAgICAgRlBTQ1JfVlhaRFogfCBGUFNDUl9WWElNWiB8IEZQU0NSX1ZYVkMgfAogCQkgICAgIEZQU0NSX1ZYU09GVCB8IEZQU0NSX1ZYU1FSVCB8IEZQU0NSX1ZYQ1ZJKSkKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9tYXRoLWVtdS9tY3Jmcy5jIGIvYXJjaC9wb3dlcnBjL21hdGgtZW11L21jcmZzLmMKaW5kZXggNDFiYTI0Ny4uZTk0OGQ1NyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL21hdGgtZW11L21jcmZzLmMKKysrIGIvYXJjaC9wb3dlcnBjL21hdGgtZW11L21jcmZzLmMKQEAgLTIsNyArMiw4IEBACiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogCi0jaW5jbHVkZSAic29mdC1mcC5oIgorI2luY2x1ZGUgPGFzbS9zZnAtbWFjaGluZS5oPgorI2luY2x1ZGUgPG1hdGgtZW11L3NvZnQtZnAuaD4KIAogaW50CiBtY3Jmcyh1MzIgKmNjciwgdTMyIGNyZkQsIHUzMiBjcmZTKQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL21hdGgtZW11L21mZnMuYyBiL2FyY2gvcG93ZXJwYy9tYXRoLWVtdS9tZmZzLmMKaW5kZXggYjBlMjEwNi4uNTUyNmNmOSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL21hdGgtZW11L21mZnMuYworKysgYi9hcmNoL3Bvd2VycGMvbWF0aC1lbXUvbWZmcy5jCkBAIC0yLDcgKzIsOCBAQAogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KIAotI2luY2x1ZGUgInNvZnQtZnAuaCIKKyNpbmNsdWRlIDxhc20vc2ZwLW1hY2hpbmUuaD4KKyNpbmNsdWRlIDxtYXRoLWVtdS9zb2Z0LWZwLmg+CiAKIGludAogbWZmcyh1MzIgKmZyRCkKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9tYXRoLWVtdS9tdGZzYjAuYyBiL2FyY2gvcG93ZXJwYy9tYXRoLWVtdS9tdGZzYjAuYwppbmRleCBkMzA2MjM1Li5iYzk4NTU4IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvbWF0aC1lbXUvbXRmc2IwLmMKKysrIGIvYXJjaC9wb3dlcnBjL21hdGgtZW11L210ZnNiMC5jCkBAIC0yLDcgKzIsOCBAQAogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KIAotI2luY2x1ZGUgInNvZnQtZnAuaCIKKyNpbmNsdWRlIDxhc20vc2ZwLW1hY2hpbmUuaD4KKyNpbmNsdWRlIDxtYXRoLWVtdS9zb2Z0LWZwLmg+CiAKIGludAogbXRmc2IwKGludCBjcmJEKQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL21hdGgtZW11L210ZnNiMS5jIGIvYXJjaC9wb3dlcnBjL21hdGgtZW11L210ZnNiMS5jCmluZGV4IDJlOTQ4NzAuLmZlNmVkNWEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9tYXRoLWVtdS9tdGZzYjEuYworKysgYi9hcmNoL3Bvd2VycGMvbWF0aC1lbXUvbXRmc2IxLmMKQEAgLTIsNyArMiw4IEBACiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogCi0jaW5jbHVkZSAic29mdC1mcC5oIgorI2luY2x1ZGUgPGFzbS9zZnAtbWFjaGluZS5oPgorI2luY2x1ZGUgPG1hdGgtZW11L3NvZnQtZnAuaD4KIAogaW50CiBtdGZzYjEoaW50IGNyYkQpCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbWF0aC1lbXUvbXRmc2YuYyBiL2FyY2gvcG93ZXJwYy9tYXRoLWVtdS9tdGZzZi5jCmluZGV4IDQ4MDE0ZDguLmRiY2U5MmUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9tYXRoLWVtdS9tdGZzZi5jCisrKyBiL2FyY2gvcG93ZXJwYy9tYXRoLWVtdS9tdGZzZi5jCkBAIC0yLDEyICsyLDE0IEBACiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogCi0jaW5jbHVkZSAic29mdC1mcC5oIgorI2luY2x1ZGUgPGFzbS9zZnAtbWFjaGluZS5oPgorI2luY2x1ZGUgPG1hdGgtZW11L3NvZnQtZnAuaD4KIAogaW50CiBtdGZzZih1bnNpZ25lZCBpbnQgRk0sIHUzMiAqZnJCKQogewogCXUzMiBtYXNrOworCXUzMiBmcHNjcjsKIAogCWlmIChGTSA9PSAwKQogCQlyZXR1cm4gMDsKQEAgLTM3LDYgKzM5LDIyIEBACiAJX19GUFVfRlBTQ1IgJj0gfihtYXNrKTsKIAlfX0ZQVV9GUFNDUiB8PSAoZnJCWzFdICYgbWFzayk7CiAKKwlfX0ZQVV9GUFNDUiAmPSB+KEZQU0NSX1ZYKTsKKwlpZiAoX19GUFVfRlBTQ1IgJiAoRlBTQ1JfVlhTTkFOIHwgRlBTQ1JfVlhJU0kgfCBGUFNDUl9WWElESSB8CisJCSAgICAgRlBTQ1JfVlhaRFogfCBGUFNDUl9WWElNWiB8IEZQU0NSX1ZYVkMgfAorCQkgICAgIEZQU0NSX1ZYU09GVCB8IEZQU0NSX1ZYU1FSVCB8IEZQU0NSX1ZYQ1ZJKSkKKwkJX19GUFVfRlBTQ1IgfD0gRlBTQ1JfVlg7CisKKwlmcHNjciA9IF9fRlBVX0ZQU0NSOworCWZwc2NyICY9IH4oRlBTQ1JfRkVYKTsKKwlpZiAoKChmcHNjciAmIEZQU0NSX1ZYKSAmJiAoZnBzY3IgJiBGUFNDUl9WRSkpIHx8CisJICAgICgoZnBzY3IgJiBGUFNDUl9PWCkgJiYgKGZwc2NyICYgRlBTQ1JfT0UpKSB8fAorCSAgICAoKGZwc2NyICYgRlBTQ1JfVVgpICYmIChmcHNjciAmIEZQU0NSX1VFKSkgfHwKKwkgICAgKChmcHNjciAmIEZQU0NSX1pYKSAmJiAoZnBzY3IgJiBGUFNDUl9aRSkpIHx8CisJICAgICgoZnBzY3IgJiBGUFNDUl9YWCkgJiYgKGZwc2NyICYgRlBTQ1JfWEUpKSkKKwkJZnBzY3IgfD0gRlBTQ1JfRkVYOworCV9fRlBVX0ZQU0NSID0gZnBzY3I7CisKICNpZmRlZiBERUJVRwogCXByaW50aygiJXM6ICUwMnggJXA6ICUwOGx4XG4iLCBfX2Z1bmNfXywgRk0sIGZyQiwgX19GUFVfRlBTQ1IpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbWF0aC1lbXUvbXRmc2ZpLmMgYi9hcmNoL3Bvd2VycGMvbWF0aC1lbXUvbXRmc2ZpLmMKaW5kZXggMDMxZTIwMC4uZmQyYWNjMiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL21hdGgtZW11L210ZnNmaS5jCisrKyBiL2FyY2gvcG93ZXJwYy9tYXRoLWVtdS9tdGZzZmkuYwpAQCAtMiw3ICsyLDggQEAKICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAKLSNpbmNsdWRlICJzb2Z0LWZwLmgiCisjaW5jbHVkZSA8YXNtL3NmcC1tYWNoaW5lLmg+CisjaW5jbHVkZSA8bWF0aC1lbXUvc29mdC1mcC5oPgogCiBpbnQKIG10ZnNmaSh1bnNpZ25lZCBpbnQgY3JmRCwgdW5zaWduZWQgaW50IElNTSkKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9tYXRoLWVtdS9vcC0xLmggYi9hcmNoL3Bvd2VycGMvbWF0aC1lbXUvb3AtMS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjOTJmYTk1Li4wMDAwMDAwCi0tLSBhL2FyY2gvcG93ZXJwYy9tYXRoLWVtdS9vcC0xLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyNDUgKzAsMCBAQAotLyoKLSAqIEJhc2ljIG9uZS13b3JkIGZyYWN0aW9uIGRlY2xhcmF0aW9uIGFuZCBtYW5pcHVsYXRpb24uCi0gKi8KLQotI2RlZmluZSBfRlBfRlJBQ19ERUNMXzEoWCkJX0ZQX1dfVFlQRSBYIyNfZgotI2RlZmluZSBfRlBfRlJBQ19DT1BZXzEoRCxTKQkoRCMjX2YgPSBTIyNfZikKLSNkZWZpbmUgX0ZQX0ZSQUNfU0VUXzEoWCxJKQkoWCMjX2YgPSBJKQotI2RlZmluZSBfRlBfRlJBQ19ISUdIXzEoWCkJKFgjI19mKQotI2RlZmluZSBfRlBfRlJBQ19MT1dfMShYKQkoWCMjX2YpCi0jZGVmaW5lIF9GUF9GUkFDX1dPUkRfMShYLHcpCShYIyNfZikKLQotI2RlZmluZSBfRlBfRlJBQ19BRERJXzEoWCxJKQkoWCMjX2YgKz0gSSkKLSNkZWZpbmUgX0ZQX0ZSQUNfU0xMXzEoWCxOKQkJCVwKLSAgZG8gewkJCQkJCVwKLSAgICBpZiAoX19idWlsdGluX2NvbnN0YW50X3AoTikgJiYgKE4pID09IDEpCVwKLSAgICAgIFgjI19mICs9IFgjI19mOwkJCQlcCi0gICAgZWxzZQkJCQkJXAotICAgICAgWCMjX2YgPDw9IChOKTsJCQkJXAotICB9IHdoaWxlICgwKQotI2RlZmluZSBfRlBfRlJBQ19TUkxfMShYLE4pCShYIyNfZiA+Pj0gTikKLQotLyogUmlnaHQgc2hpZnQgd2l0aCBzdGlja3ktbHNiLiAgKi8KLSNkZWZpbmUgX0ZQX0ZSQUNfU1JTXzEoWCxOLHN6KQlfX0ZQX0ZSQUNfU1JTXzEoWCMjX2YsIE4sIHN6KQotCi0jZGVmaW5lIF9fRlBfRlJBQ19TUlNfMShYLE4sc3opCQkJCQkJXAotICAgKFggPSAoWCA+PiAoTikgfCAoX19idWlsdGluX2NvbnN0YW50X3AoTikgJiYgKE4pID09IDEJCVwKLQkJICAgICA/IFggJiAxIDogKFggPDwgKF9GUF9XX1RZUEVfU0laRSAtIChOKSkpICE9IDApKSkKLQotI2RlZmluZSBfRlBfRlJBQ19BRERfMShSLFgsWSkJKFIjI19mID0gWCMjX2YgKyBZIyNfZikKLSNkZWZpbmUgX0ZQX0ZSQUNfU1VCXzEoUixYLFkpCShSIyNfZiA9IFgjI19mIC0gWSMjX2YpCi0jZGVmaW5lIF9GUF9GUkFDX0NMWl8xKHosIFgpCV9fRlBfQ0xaKHosIFgjI19mKQotCi0vKiBQcmVkaWNhdGVzICovCi0jZGVmaW5lIF9GUF9GUkFDX05FR1BfMShYKQkoKF9GUF9XU19UWVBFKVgjI19mIDwgMCkKLSNkZWZpbmUgX0ZQX0ZSQUNfWkVST1BfMShYKQkoWCMjX2YgPT0gMCkKLSNkZWZpbmUgX0ZQX0ZSQUNfT1ZFUlBfMShmcyxYKQkoWCMjX2YgJiBfRlBfT1ZFUkZMT1dfIyNmcykKLSNkZWZpbmUgX0ZQX0ZSQUNfRVFfMShYLCBZKQkoWCMjX2YgPT0gWSMjX2YpCi0jZGVmaW5lIF9GUF9GUkFDX0dFXzEoWCwgWSkJKFgjI19mID49IFkjI19mKQotI2RlZmluZSBfRlBfRlJBQ19HVF8xKFgsIFkpCShYIyNfZiA+IFkjI19mKQotCi0jZGVmaW5lIF9GUF9aRVJPRlJBQ18xCQkwCi0jZGVmaW5lIF9GUF9NSU5GUkFDXzEJCTEKLQotLyoKLSAqIFVucGFjayB0aGUgcmF3IGJpdHMgb2YgYSBuYXRpdmUgZnAgdmFsdWUuICBEbyBub3QgY2xhc3NpZnkgb3IKLSAqIG5vcm1hbGl6ZSB0aGUgZGF0YS4KLSAqLwotCi0jZGVmaW5lIF9GUF9VTlBBQ0tfUkFXXzEoZnMsIFgsIHZhbCkJCQkJXAotICBkbyB7CQkJCQkJCQlcCi0gICAgdW5pb24gX0ZQX1VOSU9OXyMjZnMgX2ZsbzsgX2Zsby5mbHQgPSAodmFsKTsJCVwKLQkJCQkJCQkJXAotICAgIFgjI19mID0gX2Zsby5iaXRzLmZyYWM7CQkJCQlcCi0gICAgWCMjX2UgPSBfZmxvLmJpdHMuZXhwOwkJCQkJXAotICAgIFgjI19zID0gX2Zsby5iaXRzLnNpZ247CQkJCQlcCi0gIH0gd2hpbGUgKDApCi0KLQotLyoKLSAqIFJlcGFjayB0aGUgcmF3IGJpdHMgb2YgYSBuYXRpdmUgZnAgdmFsdWUuCi0gKi8KLQotI2RlZmluZSBfRlBfUEFDS19SQVdfMShmcywgdmFsLCBYKQkJCQlcCi0gIGRvIHsJCQkJCQkJCVwKLSAgICB1bmlvbiBfRlBfVU5JT05fIyNmcyBfZmxvOwkJCQkJXAotCQkJCQkJCQlcCi0gICAgX2Zsby5iaXRzLmZyYWMgPSBYIyNfZjsJCQkJCVwKLSAgICBfZmxvLmJpdHMuZXhwICA9IFgjI19lOwkJCQkJXAotICAgIF9mbG8uYml0cy5zaWduID0gWCMjX3M7CQkJCQlcCi0JCQkJCQkJCVwKLSAgICAodmFsKSA9IF9mbG8uZmx0OwkJCQkJCVwKLSAgfSB3aGlsZSAoMCkKLQotCi0vKgotICogTXVsdGlwbGljYXRpb24gYWxnb3JpdGhtczoKLSAqLwotCi0vKiBCYXNpYy4gIEFzc3VtaW5nIHRoZSBob3N0IHdvcmQgc2l6ZSBpcyA+PSAyKkZSQUNCSVRTLCB3ZSBjYW4gZG8gdGhlCi0gICBtdWx0aXBsaWNhdGlvbiBpbW1lZGlhdGVseS4gICovCi0KLSNkZWZpbmUgX0ZQX01VTF9NRUFUXzFfaW1tKGZzLCBSLCBYLCBZKQkJCQkJXAotICBkbyB7CQkJCQkJCQkJXAotICAgIFIjI19mID0gWCMjX2YgKiBZIyNfZjsJCQkJCQlcCi0gICAgLyogTm9ybWFsaXplIHNpbmNlIHdlIGtub3cgd2hlcmUgdGhlIG1zYiBvZiB0aGUgbXVsdGlwbGljYW5kcwlcCi0gICAgICAgd2VyZSAoYml0IEIpLCB3ZSBrbm93IHRoYXQgdGhlIG1zYiBvZiB0aGUgb2YgdGhlIHByb2R1Y3QgaXMJXAotICAgICAgIGF0IGVpdGhlciAyQiBvciAyQi0xLiAgKi8JCQkJCVwKLSAgICBfRlBfRlJBQ19TUlNfMShSLCBfRlBfV0ZSQUNCSVRTXyMjZnMtMSwgMipfRlBfV0ZSQUNCSVRTXyMjZnMpOwlcCi0gIH0gd2hpbGUgKDApCi0KLS8qIEdpdmVuIGEgMVcgKiAxVyA9PiAyVyBwcmltaXRpdmUsIGRvIHRoZSBleHRlbmRlZCBtdWx0aXBsaWNhdGlvbi4gICovCi0KLSNkZWZpbmUgX0ZQX01VTF9NRUFUXzFfd2lkZShmcywgUiwgWCwgWSwgZG9pdCkJCQkJXAotICBkbyB7CQkJCQkJCQkJXAotICAgIF9GUF9XX1RZUEUgX1pfZjAsIF9aX2YxOwkJCQkJCVwKLSAgICBkb2l0KF9aX2YxLCBfWl9mMCwgWCMjX2YsIFkjI19mKTsJCQkJCVwKLSAgICAvKiBOb3JtYWxpemUgc2luY2Ugd2Uga25vdyB3aGVyZSB0aGUgbXNiIG9mIHRoZSBtdWx0aXBsaWNhbmRzCVwKLSAgICAgICB3ZXJlIChiaXQgQiksIHdlIGtub3cgdGhhdCB0aGUgbXNiIG9mIHRoZSBvZiB0aGUgcHJvZHVjdCBpcwlcCi0gICAgICAgYXQgZWl0aGVyIDJCIG9yIDJCLTEuICAqLwkJCQkJXAotICAgIF9GUF9GUkFDX1NSU18yKF9aLCBfRlBfV0ZSQUNCSVRTXyMjZnMtMSwgMipfRlBfV0ZSQUNCSVRTXyMjZnMpOwlcCi0gICAgUiMjX2YgPSBfWl9mMDsJCQkJCQkJXAotICB9IHdoaWxlICgwKQotCi0vKiBGaW5hbGx5LCBhIHNpbXBsZSB3aWRlbmluZyBtdWx0aXBseSBhbGdvcml0aG0uICBXaGF0IGZ1biEgICovCi0KLSNkZWZpbmUgX0ZQX01VTF9NRUFUXzFfaGFyZChmcywgUiwgWCwgWSkJCQkJXAotICBkbyB7CQkJCQkJCQkJXAotICAgIF9GUF9XX1RZUEUgX3hoLCBfeGwsIF95aCwgX3lsLCBfel9mMCwgX3pfZjEsIF9hX2YwLCBfYV9mMTsJCVwKLQkJCQkJCQkJCVwKLSAgICAvKiBzcGxpdCB0aGUgd29yZHMgaW4gaGFsZiAqLwkJCQkJXAotICAgIF94aCA9IFgjI19mID4+IChfRlBfV19UWVBFX1NJWkUvMik7CQkJCQlcCi0gICAgX3hsID0gWCMjX2YgJiAoKChfRlBfV19UWVBFKTEgPDwgKF9GUF9XX1RZUEVfU0laRS8yKSkgLSAxKTsJCVwKLSAgICBfeWggPSBZIyNfZiA+PiAoX0ZQX1dfVFlQRV9TSVpFLzIpOwkJCQkJXAotICAgIF95bCA9IFkjI19mICYgKCgoX0ZQX1dfVFlQRSkxIDw8IChfRlBfV19UWVBFX1NJWkUvMikpIC0gMSk7CQlcCi0JCQkJCQkJCQlcCi0gICAgLyogbXVsdGlwbHkgdGhlIHBpZWNlcyAqLwkJCQkJCVwKLSAgICBfel9mMCA9IF94bCAqIF95bDsJCQkJCQkJXAotICAgIF9hX2YwID0gX3hoICogX3lsOwkJCQkJCQlcCi0gICAgX2FfZjEgPSBfeGwgKiBfeWg7CQkJCQkJCVwKLSAgICBfel9mMSA9IF94aCAqIF95aDsJCQkJCQkJXAotCQkJCQkJCQkJXAotICAgIC8qIHJlYXNzZW1ibGUgaW50byB0d28gZnVsbCB3b3JkcyAqLwkJCQlcCi0gICAgaWYgKChfYV9mMCArPSBfYV9mMSkgPCBfYV9mMSkJCQkJCVwKLSAgICAgIF96X2YxICs9IChfRlBfV19UWVBFKTEgPDwgKF9GUF9XX1RZUEVfU0laRS8yKTsJCQlcCi0gICAgX2FfZjEgPSBfYV9mMCA+PiAoX0ZQX1dfVFlQRV9TSVpFLzIpOwkJCQlcCi0gICAgX2FfZjAgPSBfYV9mMCA8PCAoX0ZQX1dfVFlQRV9TSVpFLzIpOwkJCQlcCi0gICAgX0ZQX0ZSQUNfQUREXzIoX3osIF96LCBfYSk7CQkJCQkJXAotCQkJCQkJCQkJXAotICAgIC8qIG5vcm1hbGl6ZSAqLwkJCQkJCQlcCi0gICAgX0ZQX0ZSQUNfU1JTXzIoX3osIF9GUF9XRlJBQ0JJVFNfIyNmcyAtIDEsIDIqX0ZQX1dGUkFDQklUU18jI2ZzKTsJXAotICAgIFIjI19mID0gX3pfZjA7CQkJCQkJCVwKLSAgfSB3aGlsZSAoMCkKLQotCi0vKgotICogRGl2aXNpb24gYWxnb3JpdGhtczoKLSAqLwotCi0vKiBCYXNpYy4gIEFzc3VtaW5nIHRoZSBob3N0IHdvcmQgc2l6ZSBpcyA+PSAyKkZSQUNCSVRTLCB3ZSBjYW4gZG8gdGhlCi0gICBkaXZpc2lvbiBpbW1lZGlhdGVseS4gIEdpdmUgdGhpcyBtYWNybyBlaXRoZXIgX0ZQX0RJVl9IRUxQX2ltbSBmb3IKLSAgIEMgcHJpbWl0aXZlcyBvciBfRlBfRElWX0hFTFBfbGRpdiBmb3IgdGhlIElTTyBmdW5jdGlvbi4gIFdoaWNoIHlvdQotICAgY2hvb3NlIHdpbGwgZGVwZW5kIG9uIHdoYXQgdGhlIGNvbXBpbGVyIGRvZXMgd2l0aCBkaXZyZW00LiAgKi8KLQotI2RlZmluZSBfRlBfRElWX01FQVRfMV9pbW0oZnMsIFIsIFgsIFksIGRvaXQpCQlcCi0gIGRvIHsJCQkJCQkJXAotICAgIF9GUF9XX1RZUEUgX3EsIF9yOwkJCQkJXAotICAgIFgjI19mIDw8PSAoWCMjX2YgPCBZIyNfZgkJCQlcCi0JICAgICAgID8gUiMjX2UtLSwgX0ZQX1dGUkFDQklUU18jI2ZzCQlcCi0JICAgICAgIDogX0ZQX1dGUkFDQklUU18jI2ZzIC0gMSk7CQlcCi0gICAgZG9pdChfcSwgX3IsIFgjI19mLCBZIyNfZik7CQkJCVwKLSAgICBSIyNfZiA9IF9xIHwgKF9yICE9IDApOwkJCQlcCi0gIH0gd2hpbGUgKDApCi0KLS8qIEdDQydzIGxvbmdsb25nLmggZGVmaW5lcyBhIDJXIC8gMVcgPT4gKDFXLDFXKSBwcmltaXRpdmUgdWRpdl9xcm5uZAotICAgdGhhdCBtYXkgYmUgdXNlZnVsIGluIHRoaXMgc2l0dWF0aW9uLiAgVGhpcyBmaXJzdCBpcyBmb3IgYSBwcmltaXRpdmUKLSAgIHRoYXQgcmVxdWlyZXMgbm9ybWFsaXphdGlvbiwgdGhlIHNlY29uZCBmb3Igb25lIHRoYXQgZG9lcyBub3QuICBMb29rCi0gICBmb3IgVURJVl9ORUVEU19OT1JNQUxJWkFUSU9OIHRvIHRlbGwgd2hpY2ggeW91ciBtYWNoaW5lIG5lZWRzLiAgKi8KLQotI2RlZmluZSBfRlBfRElWX01FQVRfMV91ZGl2X25vcm0oZnMsIFIsIFgsIFkpCQkJCVwKLSAgZG8gewkJCQkJCQkJCVwKLSAgICBfRlBfV19UWVBFIF9uaCwgX25sLCBfcSwgX3I7CQkJCQlcCi0JCQkJCQkJCQlcCi0gICAgLyogTm9ybWFsaXplIFkgLS0gaS5lLiBtYWtlIHRoZSBtb3N0IHNpZ25pZmljYW50IGJpdCBzZXQuICAqLwlcCi0gICAgWSMjX2YgPDw9IF9GUF9XRlJBQ1hCSVRTXyMjZnMgLSAxOwkJCQkJXAotCQkJCQkJCQkJXAotICAgIC8qIFNoaWZ0IFggb3AgY29ycmVzcG9uZGluZ2x5IGhpZ2gsIHRoYXQgaXMsIHVwIG9uZSBmdWxsIHdvcmQuICAqLwlcCi0gICAgaWYgKFgjI19mIDw9IFkjI19mKQkJCQkJCQlcCi0gICAgICB7CQkJCQkJCQkJXAotCV9ubCA9IDA7CQkJCQkJCVwKLQlfbmggPSBYIyNfZjsJCQkJCQkJXAotICAgICAgfQkJCQkJCQkJCVwKLSAgICBlbHNlCQkJCQkJCQlcCi0gICAgICB7CQkJCQkJCQkJXAotCVIjI19lKys7CQkJCQkJCVwKLQlfbmwgPSBYIyNfZiA8PCAoX0ZQX1dfVFlQRV9TSVpFLTEpOwkJCQlcCi0JX25oID0gWCMjX2YgPj4gMTsJCQkJCQlcCi0gICAgICB9CQkJCQkJCQkJXAotICAgIAkJCQkJCQkJCVwKLSAgICB1ZGl2X3Fybm5kKF9xLCBfciwgX25oLCBfbmwsIFkjI19mKTsJCQkJXAotICAgIFIjI19mID0gX3EgfCAoX3IgIT0gMCk7CQkJCQkJXAotICB9IHdoaWxlICgwKQotCi0jZGVmaW5lIF9GUF9ESVZfTUVBVF8xX3VkaXYoZnMsIFIsIFgsIFkpCQlcCi0gIGRvIHsJCQkJCQkJXAotICAgIF9GUF9XX1RZUEUgX25oLCBfbmwsIF9xLCBfcjsJCQlcCi0gICAgaWYgKFgjI19mIDwgWSMjX2YpCQkJCQlcCi0gICAgICB7CQkJCQkJCVwKLQlSIyNfZS0tOwkJCQkJXAotCV9ubCA9IFgjI19mIDw8IF9GUF9XRlJBQ0JJVFNfIyNmczsJCVwKLQlfbmggPSBYIyNfZiA+PiBfRlBfV0ZSQUNYQklUU18jI2ZzOwkJXAotICAgICAgfQkJCQkJCQlcCi0gICAgZWxzZQkJCQkJCVwKLSAgICAgIHsJCQkJCQkJXAotCV9ubCA9IFgjI19mIDw8IChfRlBfV0ZSQUNCSVRTXyMjZnMgLSAxKTsJXAotCV9uaCA9IFgjI19mID4+IChfRlBfV0ZSQUNYQklUU18jI2ZzICsgMSk7CVwKLSAgICAgIH0JCQkJCQkJXAotICAgIHVkaXZfcXJubmQoX3EsIF9yLCBfbmgsIF9ubCwgWSMjX2YpOwkJXAotICAgIFIjI19mID0gX3EgfCAoX3IgIT0gMCk7CQkJCVwKLSAgfSB3aGlsZSAoMCkKLQotCi0vKgotICogU3F1YXJlIHJvb3QgYWxnb3JpdGhtczoKLSAqIFdlIGhhdmUganVzdCBvbmUgcmlnaHQgbm93LCBtYXliZSBOZXd0b24gYXBwcm94aW1hdGlvbgotICogc2hvdWxkIGJlIGFkZGVkIGZvciB0aG9zZSBtYWNoaW5lcyB3aGVyZSBkaXZpc2lvbiBpcyBmYXN0LgotICovCi0KLSNkZWZpbmUgX0ZQX1NRUlRfTUVBVF8xKFIsIFMsIFQsIFgsIHEpCQkJXAotICBkbyB7CQkJCQkJCVwKLSAgICB3aGlsZSAocSkJCQkJCQlcCi0gICAgICB7CQkJCQkJCVwKLSAgICAgICAgVCMjX2YgPSBTIyNfZiArIHE7CQkJCVwKLSAgICAgICAgaWYgKFQjI19mIDw9IFgjI19mKQkJCQlcCi0gICAgICAgICAgewkJCQkJCVwKLSAgICAgICAgICAgIFMjI19mID0gVCMjX2YgKyBxOwkJCQlcCi0gICAgICAgICAgICBYIyNfZiAtPSBUIyNfZjsJCQkJXAotICAgICAgICAgICAgUiMjX2YgKz0gcTsJCQkJCVwKLSAgICAgICAgICB9CQkJCQkJXAotICAgICAgICBfRlBfRlJBQ19TTExfMShYLCAxKTsJCQkJXAotICAgICAgICBxID4+PSAxOwkJCQkJXAotICAgICAgfQkJCQkJCQlcCi0gIH0gd2hpbGUgKDApCi0KLS8qCi0gKiBBc3NlbWJseS9kaXNhc3NlbWJseSBmb3IgY29udmVydGluZyB0by9mcm9tIGludGVncmFsIHR5cGVzLgotICogTm8gc2hpZnRpbmcgb3Igb3ZlcmZsb3cgaGFuZGxlZCBoZXJlLgotICovCi0KLSNkZWZpbmUgX0ZQX0ZSQUNfQVNTRU1CTEVfMShyLCBYLCByc2l6ZSkJKHIgPSBYIyNfZikKLSNkZWZpbmUgX0ZQX0ZSQUNfRElTQVNTRU1CTEVfMShYLCByLCByc2l6ZSkJKFgjI19mID0gcikKLQotCi0vKgotICogQ29udmVydCBGUCB2YWx1ZXMgYmV0d2VlbiB3b3JkIHNpemVzCi0gKi8KLQotI2RlZmluZSBfRlBfRlJBQ19DT05WXzFfMShkZnMsIHNmcywgRCwgUykJCQkJXAotICBkbyB7CQkJCQkJCQkJXAotICAgIEQjI19mID0gUyMjX2Y7CQkJCQkJCVwKLSAgICBpZiAoX0ZQX1dGUkFDQklUU18jI3NmcyA+IF9GUF9XRlJBQ0JJVFNfIyNkZnMpCQkJXAotICAgICAgX0ZQX0ZSQUNfU1JTXzEoRCwgKF9GUF9XRlJBQ0JJVFNfIyNzZnMtX0ZQX1dGUkFDQklUU18jI2RmcyksCVwKLQkJICAgICBfRlBfV0ZSQUNCSVRTXyMjc2ZzKTsJCQkJXAotICAgIGVsc2UJCQkJCQkJCVwKLSAgICAgIEQjI19mIDw8PSBfRlBfV0ZSQUNCSVRTXyMjZGZzIC0gX0ZQX1dGUkFDQklUU18jI3NmczsJCVwKLSAgfSB3aGlsZSAoMCkKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9tYXRoLWVtdS9vcC0yLmggYi9hcmNoL3Bvd2VycGMvbWF0aC1lbXUvb3AtMi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZDZmMTdjLi4wMDAwMDAwCi0tLSBhL2FyY2gvcG93ZXJwYy9tYXRoLWVtdS9vcC0yLmgKKysrIC9kZXYvbnVsbApAQCAtMSw0MzQgKzAsMCBAQAotLyoKLSAqIEJhc2ljIHR3by13b3JkIGZyYWN0aW9uIGRlY2xhcmF0aW9uIGFuZCBtYW5pcHVsYXRpb24uCi0gKi8KLQotI2RlZmluZSBfRlBfRlJBQ19ERUNMXzIoWCkJX0ZQX1dfVFlQRSBYIyNfZjAsIFgjI19mMQotI2RlZmluZSBfRlBfRlJBQ19DT1BZXzIoRCxTKQkoRCMjX2YwID0gUyMjX2YwLCBEIyNfZjEgPSBTIyNfZjEpCi0jZGVmaW5lIF9GUF9GUkFDX1NFVF8yKFgsSSkJX19GUF9GUkFDX1NFVF8yKFgsIEkpCi0jZGVmaW5lIF9GUF9GUkFDX0hJR0hfMihYKQkoWCMjX2YxKQotI2RlZmluZSBfRlBfRlJBQ19MT1dfMihYKQkoWCMjX2YwKQotI2RlZmluZSBfRlBfRlJBQ19XT1JEXzIoWCx3KQkoWCMjX2YjI3cpCi0KLSNkZWZpbmUgX0ZQX0ZSQUNfU0xMXzIoWCxOKQkJCQkJCVwKLSAgZG8gewkJCQkJCQkJCVwKLSAgICBpZiAoKE4pIDwgX0ZQX1dfVFlQRV9TSVpFKQkJCQkJCVwKLSAgICAgIHsJCQkJCQkJCQlcCi0gICAgICAgIGlmIChfX2J1aWx0aW5fY29uc3RhbnRfcChOKSAmJiAoTikgPT0gMSkgCQkJXAotICAgICAgICAgIHsJCQkJCQkJCVwKLSAgICAgICAgICAgIFgjI19mMSA9IFgjI19mMSArIFgjI19mMSArICgoKF9GUF9XU19UWVBFKShYIyNfZjApKSA8IDApOwlcCi0gICAgICAgICAgICBYIyNfZjAgKz0gWCMjX2YwOwkJCQkJCVwKLSAgICAgICAgICB9CQkJCQkJCQlcCi0gICAgICAgIGVsc2UJCQkJCQkJCVwKLSAgICAgICAgICB7CQkJCQkJCQlcCi0JICAgIFgjI19mMSA9IFgjI19mMSA8PCAoTikgfCBYIyNfZjAgPj4gKF9GUF9XX1RZUEVfU0laRSAtIChOKSk7CVwKLQkgICAgWCMjX2YwIDw8PSAoTik7CQkJCQkJXAotCSAgfQkJCQkJCQkJXAotICAgICAgfQkJCQkJCQkJCVwKLSAgICBlbHNlCQkJCQkJCQlcCi0gICAgICB7CQkJCQkJCQkJXAotCVgjI19mMSA9IFgjI19mMCA8PCAoKE4pIC0gX0ZQX1dfVFlQRV9TSVpFKTsJCQlcCi0JWCMjX2YwID0gMDsJCQkJCQkJXAotICAgICAgfQkJCQkJCQkJCVwKLSAgfSB3aGlsZSAoMCkKLQotI2RlZmluZSBfRlBfRlJBQ19TUkxfMihYLE4pCQkJCQkJXAotICBkbyB7CQkJCQkJCQkJXAotICAgIGlmICgoTikgPCBfRlBfV19UWVBFX1NJWkUpCQkJCQkJXAotICAgICAgewkJCQkJCQkJCVwKLQlYIyNfZjAgPSBYIyNfZjAgPj4gKE4pIHwgWCMjX2YxIDw8IChfRlBfV19UWVBFX1NJWkUgLSAoTikpOwlcCi0JWCMjX2YxID4+PSAoTik7CQkJCQkJCVwKLSAgICAgIH0JCQkJCQkJCQlcCi0gICAgZWxzZQkJCQkJCQkJXAotICAgICAgewkJCQkJCQkJCVwKLQlYIyNfZjAgPSBYIyNfZjEgPj4gKChOKSAtIF9GUF9XX1RZUEVfU0laRSk7CQkJXAotCVgjI19mMSA9IDA7CQkJCQkJCVwKLSAgICAgIH0JCQkJCQkJCQlcCi0gIH0gd2hpbGUgKDApCi0KLS8qIFJpZ2h0IHNoaWZ0IHdpdGggc3RpY2t5LWxzYi4gICovCi0jZGVmaW5lIF9GUF9GUkFDX1NSU18yKFgsTixzeikJCQkJCQlcCi0gIGRvIHsJCQkJCQkJCQlcCi0gICAgaWYgKChOKSA8IF9GUF9XX1RZUEVfU0laRSkJCQkJCQlcCi0gICAgICB7CQkJCQkJCQkJXAotCVgjI19mMCA9IChYIyNfZjEgPDwgKF9GUF9XX1RZUEVfU0laRSAtIChOKSkgfCBYIyNfZjAgPj4gKE4pIHwJXAotCQkgIChfX2J1aWx0aW5fY29uc3RhbnRfcChOKSAmJiAoTikgPT0gMQkJCVwKLQkJICAgPyBYIyNfZjAgJiAxCQkJCQkJXAotCQkgICA6IChYIyNfZjAgPDwgKF9GUF9XX1RZUEVfU0laRSAtIChOKSkpICE9IDApKTsJXAotCVgjI19mMSA+Pj0gKE4pOwkJCQkJCQlcCi0gICAgICB9CQkJCQkJCQkJXAotICAgIGVsc2UJCQkJCQkJCVwKLSAgICAgIHsJCQkJCQkJCQlcCi0JWCMjX2YwID0gKFgjI19mMSA+PiAoKE4pIC0gX0ZQX1dfVFlQRV9TSVpFKSB8CQkJXAotCSAgICAgICAgICAoKChYIyNfZjEgPDwgKDIgKiBfRlBfV19UWVBFX1NJWkUgLSAoTikpKSB8CQlcCi0JCSAgIFgjI19mMCkgIT0gMCkpOwkJCQkJXAotCVgjI19mMSA9IDA7CQkJCQkJCVwKLSAgICAgIH0JCQkJCQkJCQlcCi0gIH0gd2hpbGUgKDApCi0KLSNkZWZpbmUgX0ZQX0ZSQUNfQURESV8yKFgsSSkgXAotICBfX0ZQX0ZSQUNfQURESV8yKFgjI19mMSwgWCMjX2YwLCBJKQotCi0jZGVmaW5lIF9GUF9GUkFDX0FERF8yKFIsWCxZKSBcCi0gIF9fRlBfRlJBQ19BRERfMihSIyNfZjEsIFIjI19mMCwgWCMjX2YxLCBYIyNfZjAsIFkjI19mMSwgWSMjX2YwKQotCi0jZGVmaW5lIF9GUF9GUkFDX1NVQl8yKFIsWCxZKSBcCi0gIF9fRlBfRlJBQ19TVUJfMihSIyNfZjEsIFIjI19mMCwgWCMjX2YxLCBYIyNfZjAsIFkjI19mMSwgWSMjX2YwKQotCi0jZGVmaW5lIF9GUF9GUkFDX0NMWl8yKFIsWCkJXAotICBkbyB7CQkJCVwKLSAgICBpZiAoWCMjX2YxKQkJCVwKLSAgICAgIF9fRlBfQ0xaKFIsWCMjX2YxKTsJXAotICAgIGVsc2UgCQkJXAotICAgIHsJCQkJXAotICAgICAgX19GUF9DTFooUixYIyNfZjApOwlcCi0gICAgICBSICs9IF9GUF9XX1RZUEVfU0laRTsJXAotICAgIH0JCQkJXAotICB9IHdoaWxlKDApCi0KLS8qIFByZWRpY2F0ZXMgKi8KLSNkZWZpbmUgX0ZQX0ZSQUNfTkVHUF8yKFgpCSgoX0ZQX1dTX1RZUEUpWCMjX2YxIDwgMCkKLSNkZWZpbmUgX0ZQX0ZSQUNfWkVST1BfMihYKQkoKFgjI19mMSB8IFgjI19mMCkgPT0gMCkKLSNkZWZpbmUgX0ZQX0ZSQUNfT1ZFUlBfMihmcyxYKQkoWCMjX2YxICYgX0ZQX09WRVJGTE9XXyMjZnMpCi0jZGVmaW5lIF9GUF9GUkFDX0VRXzIoWCwgWSkJKFgjI19mMSA9PSBZIyNfZjEgJiYgWCMjX2YwID09IFkjI19mMCkKLSNkZWZpbmUgX0ZQX0ZSQUNfR1RfMihYLCBZKQlcCi0gICgoWCMjX2YxID4gWSMjX2YxKSB8fCAoWCMjX2YxID09IFkjI19mMSAmJiBYIyNfZjAgPiBZIyNfZjApKQotI2RlZmluZSBfRlBfRlJBQ19HRV8yKFgsIFkpCVwKLSAgKChYIyNfZjEgPiBZIyNfZjEpIHx8IChYIyNfZjEgPT0gWSMjX2YxICYmIFgjI19mMCA+PSBZIyNfZjApKQotCi0jZGVmaW5lIF9GUF9aRVJPRlJBQ18yCQkwLCAwCi0jZGVmaW5lIF9GUF9NSU5GUkFDXzIJCTAsIDEKLQotLyoKLSAqIEludGVybmFscwotICovCi0KLSNkZWZpbmUgX19GUF9GUkFDX1NFVF8yKFgsSTEsSTApCShYIyNfZjAgPSBJMCwgWCMjX2YxID0gSTEpCi0KLSNkZWZpbmUgX19GUF9DTFpfMihSLCB4aCwgeGwpCVwKLSAgZG8gewkJCQlcCi0gICAgaWYgKHhoKQkJCVwKLSAgICAgIF9fRlBfQ0xaKFIseGwpOwkJXAotICAgIGVsc2UgCQkJXAotICAgIHsJCQkJXAotICAgICAgX19GUF9DTFooUix4bCk7CQlcCi0gICAgICBSICs9IF9GUF9XX1RZUEVfU0laRTsJXAotICAgIH0JCQkJXAotICB9IHdoaWxlKDApCi0KLSNpZiAwCi0KLSNpZm5kZWYgX19GUF9GUkFDX0FERElfMgotI2RlZmluZSBfX0ZQX0ZSQUNfQURESV8yKHhoLCB4bCwgaSkgXAotICAoeGggKz0gKCh4bCArPSBpKSA8IGkpKQotI2VuZGlmCi0jaWZuZGVmIF9fRlBfRlJBQ19BRERfMgotI2RlZmluZSBfX0ZQX0ZSQUNfQUREXzIocmgsIHJsLCB4aCwgeGwsIHloLCB5bCkgXAotICAocmggPSB4aCArIHloICsgKChybCA9IHhsICsgeWwpIDwgeGwpKQotI2VuZGlmCi0jaWZuZGVmIF9fRlBfRlJBQ19TVUJfMgotI2RlZmluZSBfX0ZQX0ZSQUNfU1VCXzIocmgsIHJsLCB4aCwgeGwsIHloLCB5bCkgXAotICAocmggPSB4aCAtIHloIC0gKChybCA9IHhsIC0geWwpID4geGwpKQotI2VuZGlmCi0KLSNlbHNlCi0KLSN1bmRlZiBfX0ZQX0ZSQUNfQURESV8yCi0jZGVmaW5lIF9fRlBfRlJBQ19BRERJXzIoeGgsIHhsLCBpKQlhZGRfc3NhYWFhKHhoLCB4bCwgeGgsIHhsLCAwLCBpKQotI3VuZGVmIF9fRlBfRlJBQ19BRERfMgotI2RlZmluZSBfX0ZQX0ZSQUNfQUREXzIJCQlhZGRfc3NhYWFhCi0jdW5kZWYgX19GUF9GUkFDX1NVQl8yCi0jZGVmaW5lIF9fRlBfRlJBQ19TVUJfMgkJCXN1Yl9kZG1tc3MKLQotI2VuZGlmCi0KLS8qCi0gKiBVbnBhY2sgdGhlIHJhdyBiaXRzIG9mIGEgbmF0aXZlIGZwIHZhbHVlLiAgRG8gbm90IGNsYXNzaWZ5IG9yCi0gKiBub3JtYWxpemUgdGhlIGRhdGEuCi0gKi8KLQotI2RlZmluZSBfRlBfVU5QQUNLX1JBV18yKGZzLCBYLCB2YWwpCQkJXAotICBkbyB7CQkJCQkJCVwKLSAgICB1bmlvbiBfRlBfVU5JT05fIyNmcyBfZmxvOyBfZmxvLmZsdCA9ICh2YWwpOwlcCi0JCQkJCQkJXAotICAgIFgjI19mMCA9IF9mbG8uYml0cy5mcmFjMDsJCQkJXAotICAgIFgjI19mMSA9IF9mbG8uYml0cy5mcmFjMTsJCQkJXAotICAgIFgjI19lICA9IF9mbG8uYml0cy5leHA7CQkJCVwKLSAgICBYIyNfcyAgPSBfZmxvLmJpdHMuc2lnbjsJCQkJXAotICB9IHdoaWxlICgwKQotCi0KLS8qCi0gKiBSZXBhY2sgdGhlIHJhdyBiaXRzIG9mIGEgbmF0aXZlIGZwIHZhbHVlLgotICovCi0KLSNkZWZpbmUgX0ZQX1BBQ0tfUkFXXzIoZnMsIHZhbCwgWCkJCQlcCi0gIGRvIHsJCQkJCQkJXAotICAgIHVuaW9uIF9GUF9VTklPTl8jI2ZzIF9mbG87CQkJCVwKLQkJCQkJCQlcCi0gICAgX2Zsby5iaXRzLmZyYWMwID0gWCMjX2YwOwkJCQlcCi0gICAgX2Zsby5iaXRzLmZyYWMxID0gWCMjX2YxOwkJCQlcCi0gICAgX2Zsby5iaXRzLmV4cCAgID0gWCMjX2U7CQkJCVwKLSAgICBfZmxvLmJpdHMuc2lnbiAgPSBYIyNfczsJCQkJXAotCQkJCQkJCVwKLSAgICAodmFsKSA9IF9mbG8uZmx0OwkJCQkJXAotICB9IHdoaWxlICgwKQotCi0KLS8qCi0gKiBNdWx0aXBsaWNhdGlvbiBhbGdvcml0aG1zOgotICovCi0KLS8qIEdpdmVuIGEgMVcgKiAxVyA9PiAyVyBwcmltaXRpdmUsIGRvIHRoZSBleHRlbmRlZCBtdWx0aXBsaWNhdGlvbi4gICovCi0KLSNkZWZpbmUgX0ZQX01VTF9NRUFUXzJfd2lkZShmcywgUiwgWCwgWSwgZG9pdCkJCQkJXAotICBkbyB7CQkJCQkJCQkJXAotICAgIF9GUF9GUkFDX0RFQ0xfNChfeik7IF9GUF9GUkFDX0RFQ0xfMihfYik7IF9GUF9GUkFDX0RFQ0xfMihfYyk7CVwKLQkJCQkJCQkJCVwKLSAgICBkb2l0KF9GUF9GUkFDX1dPUkRfNChfeiwxKSwgX0ZQX0ZSQUNfV09SRF80KF96LDApLCBYIyNfZjAsIFkjI19mMCk7IFwKLSAgICBkb2l0KF9iX2YxLCBfYl9mMCwgWCMjX2YwLCBZIyNfZjEpOwkJCQkJXAotICAgIGRvaXQoX2NfZjEsIF9jX2YwLCBYIyNfZjEsIFkjI19mMCk7CQkJCQlcCi0gICAgZG9pdChfRlBfRlJBQ19XT1JEXzQoX3osMyksIF9GUF9GUkFDX1dPUkRfNChfeiwyKSwgWCMjX2YxLCBZIyNfZjEpOyBcCi0JCQkJCQkJCQlcCi0gICAgX19GUF9GUkFDX0FERF80KF9GUF9GUkFDX1dPUkRfNChfeiwzKSxfRlBfRlJBQ19XT1JEXzQoX3osMiksCVwKLQkJICAgIF9GUF9GUkFDX1dPUkRfNChfeiwxKSxfRlBfRlJBQ19XT1JEXzQoX3osMCksCVwKLQkJICAgIDAsIF9iX2YxLCBfYl9mMCwgMCwJCQkJCVwKLQkJICAgIF9GUF9GUkFDX1dPUkRfNChfeiwzKSxfRlBfRlJBQ19XT1JEXzQoX3osMiksCVwKLQkJICAgIF9GUF9GUkFDX1dPUkRfNChfeiwxKSxfRlBfRlJBQ19XT1JEXzQoX3osMCkpOwlcCi0gICAgX19GUF9GUkFDX0FERF80KF9GUF9GUkFDX1dPUkRfNChfeiwzKSxfRlBfRlJBQ19XT1JEXzQoX3osMiksCVwKLQkJICAgIF9GUF9GUkFDX1dPUkRfNChfeiwxKSxfRlBfRlJBQ19XT1JEXzQoX3osMCksCVwKLQkJICAgIDAsIF9jX2YxLCBfY19mMCwgMCwJCQkJCVwKLQkJICAgIF9GUF9GUkFDX1dPUkRfNChfeiwzKSxfRlBfRlJBQ19XT1JEXzQoX3osMiksCVwKLQkJICAgIF9GUF9GUkFDX1dPUkRfNChfeiwxKSxfRlBfRlJBQ19XT1JEXzQoX3osMCkpOwlcCi0JCQkJCQkJCQlcCi0gICAgLyogTm9ybWFsaXplIHNpbmNlIHdlIGtub3cgd2hlcmUgdGhlIG1zYiBvZiB0aGUgbXVsdGlwbGljYW5kcwlcCi0gICAgICAgd2VyZSAoYml0IEIpLCB3ZSBrbm93IHRoYXQgdGhlIG1zYiBvZiB0aGUgb2YgdGhlIHByb2R1Y3QgaXMJXAotICAgICAgIGF0IGVpdGhlciAyQiBvciAyQi0xLiAgKi8JCQkJCVwKLSAgICBfRlBfRlJBQ19TUlNfNChfeiwgX0ZQX1dGUkFDQklUU18jI2ZzLTEsIDIqX0ZQX1dGUkFDQklUU18jI2ZzKTsJXAotICAgIFIjI19mMCA9IF9GUF9GUkFDX1dPUkRfNChfeiwwKTsJCQkJCVwKLSAgICBSIyNfZjEgPSBfRlBfRlJBQ19XT1JEXzQoX3osMSk7CQkJCQlcCi0gIH0gd2hpbGUgKDApCi0KLS8qIFRoaXMgbmV4dCBtYWNybyBhcHBlYXJzIHRvIGJlIHRvdGFsbHkgYnJva2VuLiBGb3J0dW5hdGVseSBub3doZXJlCi0gKiBzZWVtcyB0byB1c2UgaXQgOi0+IFRoZSBwcm9ibGVtIGlzIHRoYXQgd2UgZGVmaW5lIF96WzRdIGJ1dAotICogdGhlbiB1c2UgaXQgaW4gX0ZQX0ZSQUNfU1JTXzQsIHdoaWNoIHdpbGwgYXR0ZW1wdCB0byBhY2Nlc3MKLSAqIF96X2Zbbl0gd2hpY2ggd2lsbCBjYXVzZSBhbiBlcnJvci4gVGhlIGZpeCBwcm9iYWJseSBpbnZvbHZlcwotICogZGVjbGFyaW5nIGl0IHdpdGggX0ZQX0ZSQUNfREVDTF80LCBzZWUgcHJldmlvdXMgbWFjcm8uIC0tIFBNTSAwMi8xOTk4Ci0gKi8KLSNkZWZpbmUgX0ZQX01VTF9NRUFUXzJfZ21wKGZzLCBSLCBYLCBZKQkJCQkJXAotICBkbyB7CQkJCQkJCQkJXAotICAgIF9GUF9XX1RZUEUgX3hbMl0sIF95WzJdLCBfels0XTsJCQkJCVwKLSAgICBfeFswXSA9IFgjI19mMDsgX3hbMV0gPSBYIyNfZjE7CQkJCQlcCi0gICAgX3lbMF0gPSBZIyNfZjA7IF95WzFdID0gWSMjX2YxOwkJCQkJXAotCQkJCQkJCQkJXAotICAgIG1wbl9tdWxfbihfeiwgX3gsIF95LCAyKTsJCQkJCQlcCi0JCQkJCQkJCQlcCi0gICAgLyogTm9ybWFsaXplIHNpbmNlIHdlIGtub3cgd2hlcmUgdGhlIG1zYiBvZiB0aGUgbXVsdGlwbGljYW5kcwlcCi0gICAgICAgd2VyZSAoYml0IEIpLCB3ZSBrbm93IHRoYXQgdGhlIG1zYiBvZiB0aGUgb2YgdGhlIHByb2R1Y3QgaXMJXAotICAgICAgIGF0IGVpdGhlciAyQiBvciAyQi0xLiAgKi8JCQkJCVwKLSAgICBfRlBfRlJBQ19TUlNfNChfeiwgX0ZQX1dGUkFDQklUUyMjX2ZzLTEsIDIqX0ZQX1dGUkFDQklUU18jI2ZzKTsJXAotICAgIFIjI19mMCA9IF96WzBdOwkJCQkJCQlcCi0gICAgUiMjX2YxID0gX3pbMV07CQkJCQkJCVwKLSAgfSB3aGlsZSAoMCkKLQotCi0vKgotICogRGl2aXNpb24gYWxnb3JpdGhtczoKLSAqIFRoaXMgc2VlbXMgdG8gYmUgZ2l2aW5nIG1lIGRpZmZpY3VsdGllcyAtLSBQTU0KLSAqIExvb2ssIE5ldEJTRCBzZWVtcyB0byBiZSBhYmxlIHRvIGNvbW1lbnQgYWxnb3JpdGhtcy4gQ2FuJ3QgeW91PwotICogSSd2ZSB0aHJvd24gcHJpbnRrcyBhdCB0aGUgcHJvYmxlbS4KLSAqIFRoaXMgbm93IGFwcGVhcnMgdG8gd29yaywgYnV0IEkgc3RpbGwgZG9uJ3QgcmVhbGx5IGtub3cgd2h5LgotICogQWxzbywgSSBkb24ndCB0aGluayB0aGUgcmVzdWx0IGlzIHByb3Blcmx5IG5vcm1hbGlzZWQuLi4KLSAqLwotCi0jZGVmaW5lIF9GUF9ESVZfTUVBVF8yX3VkaXZfNjQoZnMsIFIsIFgsIFkpCQkJCVwKLSAgZG8gewkJCQkJCQkJCVwKLSAgICBleHRlcm4gdm9pZCBfZnBfdWRpdm1vZHRpNChfRlBfV19UWVBFIHFbMl0sIF9GUF9XX1RZUEUgclsyXSwJXAotCQkJICAgICAgIF9GUF9XX1RZUEUgbjEsIF9GUF9XX1RZUEUgbjAsCQlcCi0JCQkgICAgICAgX0ZQX1dfVFlQRSBkMSwgX0ZQX1dfVFlQRSBkMCk7CQlcCi0gICAgX0ZQX1dfVFlQRSBfbl9mMywgX25fZjIsIF9uX2YxLCBfbl9mMCwgX3JfZjEsIF9yX2YwOwkJXAotICAgIF9GUF9XX1RZUEUgX3FfZjEsIF9xX2YwLCBfbV9mMSwgX21fZjA7CQkJCVwKLSAgICBfRlBfV19UWVBFIF9ybWVtWzJdLCBfcW1lbVsyXTsJCQkJCVwKLSAgICAvKiBJIHRoaW5rIHRoaXMgY2hlY2sgaXMgdG8gZW5zdXJlIHRoYXQgdGhlIHJlc3VsdCBpcyBub3JtYWxpc2VkLiAgIFwKLSAgICAgKiBBc3N1bWluZyBYLFkgbm9ybWFsaXNlZCAoaWUgaW4gWzEuMCwyLjApKSBYL1kgd2lsbCBiZSBpbiAgICAgICAgIFwKLSAgICAgKiBbMC41LDIuMCkuIEZ1cnRoZXJtb3JlLCBpdCB3aWxsIGJlIGxlc3MgdGhhbiAxLjAgaWZmIFggPCBZLiAgICAgIFwKLSAgICAgKiBJbiB0aGlzIGNhc2Ugd2UgdHdlYWsgdGhpbmdzLiAodGhpcyBpcyBiYXNlZCBvbiBjb21tZW50cyBpbiAgICAgIFwKLSAgICAgKiB0aGUgTmV0QlNEIEZQVSBlbXVsYXRpb24gY29kZS4gKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgKiBXZSBrbm93IFgsWSBhcmUgbm9ybWFsaXNlZCBiZWNhdXNlIHdlIGVuc3VyZSB0aGlzIGFzIHBhcnQgb2YgICAgIFwKLSAgICAgKiB0aGUgdW5wYWNraW5nIHByb2Nlc3MuIC0tIFBNTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgKi8JCQkJCQkJCQlcCi0gICAgaWYgKF9GUF9GUkFDX0dUXzIoWCwgWSkpCQkJCQkJXAotICAgICAgewkJCQkJCQkJCVwKLS8qCVIjI19lKys7ICovCQkJCQkJCVwKLQlfbl9mMyA9IFgjI19mMSA+PiAxOwkJCQkJCVwKLQlfbl9mMiA9IFgjI19mMSA8PCAoX0ZQX1dfVFlQRV9TSVpFIC0gMSkgfCBYIyNfZjAgPj4gMTsJCVwKLQlfbl9mMSA9IFgjI19mMCA8PCAoX0ZQX1dfVFlQRV9TSVpFIC0gMSk7CQkJXAotCV9uX2YwID0gMDsJCQkJCQkJXAotICAgICAgfQkJCQkJCQkJCVwKLSAgICBlbHNlCQkJCQkJCQlcCi0gICAgICB7CQkJCQkJCQkJXAotCVIjI19lLS07CQkJCQkJCVwKLQlfbl9mMyA9IFgjI19mMTsJCQkJCQkJXAotCV9uX2YyID0gWCMjX2YwOwkJCQkJCQlcCi0JX25fZjEgPSBfbl9mMCA9IDA7CQkJCQkJXAotICAgICAgfQkJCQkJCQkJCVwKLQkJCQkJCQkJCVwKLSAgICAvKiBOb3JtYWxpemUsIGkuZS4gbWFrZSB0aGUgbW9zdCBzaWduaWZpY2FudCBiaXQgb2YgdGhlIAkJXAotICAgICAgIGRlbm9taW5hdG9yIHNldC4gIENIQU5HRUQ6IC0gMSB0byBub3RoaW5nIC0tIFBNTSAqLwkJXAotICAgIF9GUF9GUkFDX1NMTF8yKFksIF9GUF9XRlJBQ1hCSVRTXyMjZnMgLyogLTEgKi8pOwkJCVwKLQkJCQkJCQkJCVwKLSAgICAvKiBEbyB0aGUgMjU2LzEyOCBiaXQgZGl2aXNpb24gZ2l2ZW4gdGhlIDEyOC1iaXQgX2ZwX3VkaXZtb2R0ZjQgCVwKLSAgICAgICBwcmltaXRpdmUgc25hZ2dlZCBmcm9tIGxpYmdjYzIuYy4gICovCQkJCVwKLQkJCQkJCQkJCVwKLSAgICBfZnBfdWRpdm1vZHRpNChfcW1lbSwgX3JtZW0sIF9uX2YzLCBfbl9mMiwgMCwgWSMjX2YxKTsJCVwKLSAgICBfcV9mMSA9IF9xbWVtWzBdOwkJCQkJCQlcCi0gICAgdW11bF9wcG1tKF9tX2YxLCBfbV9mMCwgX3FfZjEsIFkjI19mMCk7CQkJCVwKLSAgICBfcl9mMSA9IF9ybWVtWzBdOwkJCQkJCQlcCi0gICAgX3JfZjAgPSBfbl9mMTsJCQkJCQkJXAotICAgIGlmIChfRlBfRlJBQ19HVF8yKF9tLCBfcikpCQkJCQkJXAotICAgICAgewkJCQkJCQkJCVwKLQlfcV9mMS0tOwkJCQkJCQlcCi0JX0ZQX0ZSQUNfQUREXzIoX3IsIF9yLCBZKTsJCQkJCVwKLQlpZiAoX0ZQX0ZSQUNfR0VfMihfciwgWSkgJiYgX0ZQX0ZSQUNfR1RfMihfbSwgX3IpKQkJXAotCSAgewkJCQkJCQkJXAotCSAgICBfcV9mMS0tOwkJCQkJCQlcCi0JICAgIF9GUF9GUkFDX0FERF8yKF9yLCBfciwgWSk7CQkJCQlcCi0JICB9CQkJCQkJCQlcCi0gICAgICB9CQkJCQkJCQkJXAotICAgIF9GUF9GUkFDX1NVQl8yKF9yLCBfciwgX20pOwkJCQkJCVwKLQkJCQkJCQkJCVwKLSAgICBfZnBfdWRpdm1vZHRpNChfcW1lbSwgX3JtZW0sIF9yX2YxLCBfcl9mMCwgMCwgWSMjX2YxKTsJCVwKLSAgICBfcV9mMCA9IF9xbWVtWzBdOwkJCQkJCQlcCi0gICAgdW11bF9wcG1tKF9tX2YxLCBfbV9mMCwgX3FfZjAsIFkjI19mMCk7CQkJCVwKLSAgICBfcl9mMSA9IF9ybWVtWzBdOwkJCQkJCQlcCi0gICAgX3JfZjAgPSBfbl9mMDsJCQkJCQkJXAotICAgIGlmIChfRlBfRlJBQ19HVF8yKF9tLCBfcikpCQkJCQkJXAotICAgICAgewkJCQkJCQkJCVwKLQlfcV9mMC0tOwkJCQkJCQlcCi0JX0ZQX0ZSQUNfQUREXzIoX3IsIF9yLCBZKTsJCQkJCVwKLQlpZiAoX0ZQX0ZSQUNfR0VfMihfciwgWSkgJiYgX0ZQX0ZSQUNfR1RfMihfbSwgX3IpKQkJXAotCSAgewkJCQkJCQkJXAotCSAgICBfcV9mMC0tOwkJCQkJCQlcCi0JICAgIF9GUF9GUkFDX0FERF8yKF9yLCBfciwgWSk7CQkJCQlcCi0JICB9CQkJCQkJCQlcCi0gICAgICB9CQkJCQkJCQkJXAotICAgIF9GUF9GUkFDX1NVQl8yKF9yLCBfciwgX20pOwkJCQkJCVwKLQkJCQkJCQkJCVwKLSAgICBSIyNfZjEgPSBfcV9mMTsJCQkJCQkJXAotICAgIFIjI19mMCA9IF9xX2YwIHwgKChfcl9mMSB8IF9yX2YwKSAhPSAwKTsJCQkJXAotICAgIC8qIGFkanVzdCBzbyBhbnN3ZXIgaXMgbm9ybWFsaXplZCBhZ2Fpbi4gSSdtIG5vdCBzdXJlIHdoYXQgdGhlIAlcCi0gICAgICogZmluYWwgc3ogcGFyYW0gc2hvdWxkIGJlLiBJbiBwcmFjdGljZSBpdCdzIG5ldmVyIHVzZWQgc2luY2UgICAgICBcCi0gICAgICogTiBpcyAxIHdoaWNoIGlzIGFsd2F5cyBnb2luZyB0byBiZSA8IF9GUF9XX1RZUEVfU0laRS4uLgkJXAotICAgICAqLwkJCQkJCQkJCVwKLSAgICAvKiBfRlBfRlJBQ19TUlNfMihSLDEsX0ZQX1dGUkFDQklUU18jI2ZzKTsJKi8JCQlcCi0gIH0gd2hpbGUgKDApCi0KLQotI2RlZmluZSBfRlBfRElWX01FQVRfMl9nbXAoZnMsIFIsIFgsIFkpCQkJCQlcCi0gIGRvIHsJCQkJCQkJCQlcCi0gICAgX0ZQX1dfVFlQRSBfeFs0XSwgX3lbMl0sIF96WzRdOwkJCQkJXAotICAgIF95WzBdID0gWSMjX2YwOyBfeVsxXSA9IFkjI19mMTsJCQkJCVwKLSAgICBfeFswXSA9IF94WzNdID0gMDsJCQkJCQkJXAotICAgIGlmIChfRlBfRlJBQ19HVF8yKFgsIFkpKQkJCQkJCVwKLSAgICAgIHsJCQkJCQkJCQlcCi0JUiMjX2UrKzsJCQkJCQkJXAotCV94WzFdID0gKFgjI19mMCA8PCAoX0ZQX1dGUkFDQklUUy0xIC0gX0ZQX1dfVFlQRV9TSVpFKSB8CVwKLQkJIFgjI19mMSA+PiAoX0ZQX1dfVFlQRV9TSVpFIC0JCQkJXAotCQkJICAgIChfRlBfV0ZSQUNCSVRTLTEgLSBfRlBfV19UWVBFX1NJWkUpKSk7CVwKLQlfeFsyXSA9IFgjI19mMSA8PCAoX0ZQX1dGUkFDQklUUy0xIC0gX0ZQX1dfVFlQRV9TSVpFKTsJCVwKLSAgICAgIH0JCQkJCQkJCQlcCi0gICAgZWxzZQkJCQkJCQkJXAotICAgICAgewkJCQkJCQkJCVwKLQlfeFsxXSA9IChYIyNfZjAgPDwgKF9GUF9XRlJBQ0JJVFMgLSBfRlBfV19UWVBFX1NJWkUpIHwJCVwKLQkJIFgjI19mMSA+PiAoX0ZQX1dfVFlQRV9TSVpFIC0JCQkJXAotCQkJICAgIChfRlBfV0ZSQUNCSVRTIC0gX0ZQX1dfVFlQRV9TSVpFKSkpOwlcCi0JX3hbMl0gPSBYIyNfZjEgPDwgKF9GUF9XRlJBQ0JJVFMgLSBfRlBfV19UWVBFX1NJWkUpOwkJXAotICAgICAgfQkJCQkJCQkJCVwKLQkJCQkJCQkJCVwKLSAgICAodm9pZCkgbXBuX2RpdnJlbSAoX3osIDAsIF94LCA0LCBfeSwgMik7CQkJCVwKLSAgICBSIyNfZjEgPSBfelsxXTsJCQkJCQkJXAotICAgIFIjI19mMCA9IF96WzBdIHwgKChfeFswXSB8IF94WzFdKSAhPSAwKTsJCQkJXAotICB9IHdoaWxlICgwKQotCi0KLS8qCi0gKiBTcXVhcmUgcm9vdCBhbGdvcml0aG1zOgotICogV2UgaGF2ZSBqdXN0IG9uZSByaWdodCBub3csIG1heWJlIE5ld3RvbiBhcHByb3hpbWF0aW9uCi0gKiBzaG91bGQgYmUgYWRkZWQgZm9yIHRob3NlIG1hY2hpbmVzIHdoZXJlIGRpdmlzaW9uIGlzIGZhc3QuCi0gKi8KLQotI2RlZmluZSBfRlBfU1FSVF9NRUFUXzIoUiwgUywgVCwgWCwgcSkJCQlcCi0gIGRvIHsJCQkJCQkJXAotICAgIHdoaWxlIChxKQkJCQkJCVwKLSAgICAgIHsJCQkJCQkJXAotICAgICAgICBUIyNfZjEgPSBTIyNfZjEgKyBxOwkJCQlcCi0gICAgICAgIGlmIChUIyNfZjEgPD0gWCMjX2YxKQkJCQlcCi0gICAgICAgICAgewkJCQkJCVwKLSAgICAgICAgICAgIFMjI19mMSA9IFQjI19mMSArIHE7CQkJXAotICAgICAgICAgICAgWCMjX2YxIC09IFQjI19mMTsJCQkJXAotICAgICAgICAgICAgUiMjX2YxICs9IHE7CQkJCVwKLSAgICAgICAgICB9CQkJCQkJXAotICAgICAgICBfRlBfRlJBQ19TTExfMihYLCAxKTsJCQkJXAotICAgICAgICBxID4+PSAxOwkJCQkJXAotICAgICAgfQkJCQkJCQlcCi0gICAgcSA9IChfRlBfV19UWVBFKTEgPDwgKF9GUF9XX1RZUEVfU0laRSAtIDEpOwkJXAotICAgIHdoaWxlIChxKQkJCQkJCVwKLSAgICAgIHsJCQkJCQkJXAotICAgICAgICBUIyNfZjAgPSBTIyNfZjAgKyBxOwkJCQlcCi0gICAgICAgIFQjI19mMSA9IFMjI19mMTsJCQkJXAotICAgICAgICBpZiAoVCMjX2YxIDwgWCMjX2YxIHx8IAkJCQlcCi0gICAgICAgICAgICAoVCMjX2YxID09IFgjI19mMSAmJiBUIyNfZjAgPCBYIyNfZjApKQlcCi0gICAgICAgICAgewkJCQkJCVwKLSAgICAgICAgICAgIFMjI19mMCA9IFQjI19mMCArIHE7CQkJXAotICAgICAgICAgICAgaWYgKCgoX0ZQX1dTX1RZUEUpVCMjX2YwKSA8IDAgJiYJCVwKLSAgICAgICAgICAgICAgICAoKF9GUF9XU19UWVBFKVMjI19mMCkgPj0gMCkJCVwKLSAgICAgICAgICAgICAgUyMjX2YxKys7CQkJCQlcCi0gICAgICAgICAgICBfRlBfRlJBQ19TVUJfMihYLCBYLCBUKTsJCQlcCi0gICAgICAgICAgICBSIyNfZjAgKz0gcTsJCQkJXAotICAgICAgICAgIH0JCQkJCQlcCi0gICAgICAgIF9GUF9GUkFDX1NMTF8yKFgsIDEpOwkJCQlcCi0gICAgICAgIHEgPj49IDE7CQkJCQlcCi0gICAgICB9CQkJCQkJCVwKLSAgfSB3aGlsZSAoMCkKLQotCi0vKgotICogQXNzZW1ibHkvZGlzYXNzZW1ibHkgZm9yIGNvbnZlcnRpbmcgdG8vZnJvbSBpbnRlZ3JhbCB0eXBlcy4KLSAqIE5vIHNoaWZ0aW5nIG9yIG92ZXJmbG93IGhhbmRsZWQgaGVyZS4KLSAqLwotCi0jZGVmaW5lIF9GUF9GUkFDX0FTU0VNQkxFXzIociwgWCwgcnNpemUpCVwKLSAgZG8gewkJCQkJCVwKLSAgICBpZiAocnNpemUgPD0gX0ZQX1dfVFlQRV9TSVpFKQkJXAotICAgICAgciA9IFgjI19mMDsJCQkJXAotICAgIGVsc2UJCQkJCVwKLSAgICAgIHsJCQkJCQlcCi0JciA9IFgjI19mMTsJCQkJXAotCXIgPDw9IF9GUF9XX1RZUEVfU0laRTsJCQlcCi0JciArPSBYIyNfZjA7CQkJCVwKLSAgICAgIH0JCQkJCQlcCi0gIH0gd2hpbGUgKDApCi0KLSNkZWZpbmUgX0ZQX0ZSQUNfRElTQVNTRU1CTEVfMihYLCByLCByc2l6ZSkJCQkJXAotICBkbyB7CQkJCQkJCQkJXAotICAgIFgjI19mMCA9IHI7CQkJCQkJCQlcCi0gICAgWCMjX2YxID0gKHJzaXplIDw9IF9GUF9XX1RZUEVfU0laRSA/IDAgOiByID4+IF9GUF9XX1RZUEVfU0laRSk7CVwKLSAgfSB3aGlsZSAoMCkKLQotLyoKLSAqIENvbnZlcnQgRlAgdmFsdWVzIGJldHdlZW4gd29yZCBzaXplcwotICovCi0KLSNkZWZpbmUgX0ZQX0ZSQUNfQ09OVl8xXzIoZGZzLCBzZnMsIEQsIFMpCQkJCVwKLSAgZG8gewkJCQkJCQkJCVwKLSAgICBfRlBfRlJBQ19TUlNfMihTLCAoX0ZQX1dGUkFDQklUU18jI3NmcyAtIF9GUF9XRlJBQ0JJVFNfIyNkZnMpLAlcCi0JCSAgIF9GUF9XRlJBQ0JJVFNfIyNzZnMpOwkJCQlcCi0gICAgRCMjX2YgPSBTIyNfZjA7CQkJCQkJCVwKLSAgfSB3aGlsZSAoMCkKLQotI2RlZmluZSBfRlBfRlJBQ19DT05WXzJfMShkZnMsIHNmcywgRCwgUykJCQkJXAotICBkbyB7CQkJCQkJCQkJXAotICAgIEQjI19mMCA9IFMjI19mOwkJCQkJCQlcCi0gICAgRCMjX2YxID0gMDsJCQkJCQkJCVwKLSAgICBfRlBfRlJBQ19TTExfMihELCAoX0ZQX1dGUkFDQklUU18jI2RmcyAtIF9GUF9XRlJBQ0JJVFNfIyNzZnMpKTsJXAotICB9IHdoaWxlICgwKQotCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbWF0aC1lbXUvb3AtNC5oIGIvYXJjaC9wb3dlcnBjL21hdGgtZW11L29wLTQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzlhZTYyNi4uMDAwMDAwMAotLS0gYS9hcmNoL3Bvd2VycGMvbWF0aC1lbXUvb3AtNC5oCisrKyAvZGV2L251bGwKQEAgLTEsMzE3ICswLDAgQEAKLS8qCi0gKiBCYXNpYyBmb3VyLXdvcmQgZnJhY3Rpb24gZGVjbGFyYXRpb24gYW5kIG1hbmlwdWxhdGlvbi4KLSAqCi0gKiBXaGVuIGFkZGluZyBxdWFkd29yZCBzdXBwb3J0IGZvciAzMiBiaXQgbWFjaGluZXMsIHdlIG5lZWQKLSAqIHRvIGJlIGEgbGl0dGxlIGNhcmVmdWwgYXMgZG91YmxlIG11bHRpcGx5IHVzZXMgc29tZSBvZiB0aGVzZQotICogbWFjcm9zOiAoaW4gb3AtMi5oKQotICogX0ZQX01VTF9NRUFUXzJfd2lkZSgpIHVzZXMgX0ZQX0ZSQUNfREVDTF80LCBfRlBfRlJBQ19XT1JEXzQsCi0gKiBfRlBfRlJBQ19BRERfNCwgX0ZQX0ZSQUNfU1JTXzQKLSAqIF9GUF9NVUxfTUVBVF8yX2dtcCgpIHVzZXMgX0ZQX0ZSQUNfU1JTXzQgKGFuZCBzaG91bGQgdXNlCi0gKiBfRlBfRlJBQ19ERUNMXzQ6IGl0IGFwcGVhcnMgdG8gYmUgYnJva2VuIGFuZCBpcyBub3QgdXNlZAotICogYW55d2hlcmUgYW55d2F5LiApCi0gKgotICogSSd2ZSBub3cgZml4ZWQgYWxsIHRoZSBtYWNyb3MgdGhhdCB3ZXJlIGhlcmUgZnJvbSB0aGUgc3BhcmM2NCBjb2RlLgotICogWypub25lKiBvZiB0aGUgc2hpZnQgbWFjcm9zIHdlcmUgY29ycmVjdCFdIC0tIFBNTSAwMi8xOTk4Ci0gKgotICogVGhlIG9ubHkgcXVhZHdvcmQgc3R1ZmYgdGhhdCByZW1haW5zIHRvIGJlIGNvZGVkIGlzOgotICogMSkgdGhlIGNvbnZlcnNpb24gdG8vZnJvbSBpbnRzLCB3aGljaCByZXF1aXJlcwotICogdGhhdCB3ZSBjaGVjayAoaW4gb3AtY29tbW9uLmgpIHRoYXQgdGhlIGZvbGxvd2luZyBkbyB0aGUgcmlnaHQgdGhpbmcKLSAqIGZvciBxdWFkd29yZHM6IF9GUF9UT19JTlQoUSw0LHIsWCxyc3oscnNnKSwgX0ZQX0ZST01fSU5UKFEsNCxYLHIscnMscnQpCi0gKiAyKSBtdWx0aXBseSwgZGl2aWRlIGFuZCBzcXJ0LCB3aGljaCByZXF1aXJlOgotICogX0ZQX01VTF9NRUFUXzRfKihSLFgsWSksIF9GUF9ESVZfTUVBVF80XyooUixYLFkpLCBfRlBfU1FSVF9NRUFUXzQoUixTLFQsWCxxKSwKLSAqIFRoaXMgYWxzbyBuZWVkcyBfRlBfTVVMX01FQVRfUSBhbmQgX0ZQX0RJVl9NRUFUX1EgdG8gYmUgZGVmaW5lZCB0bwotICogc29tZSBzdWl0YWJsZSBfRlBfTVVMX01FQVRfNF8qIG1hY3JvcyBpbiBzZnAtbWFjaGluZS5oLgotICogW3dlJ3JlIGZyZWUgdG8gY2hvb3NlIHdoYXRldmVyIEZQX01VTF9NRUFUXzRfKiBtYWNyb3Mgd2UgbmVlZCBmb3IKLSAqIHRoZXNlOyB0aGV5IGFyZSB1c2VkIG5vd2hlcmUgZWxzZS4gXQotICovCi0KLSNkZWZpbmUgX0ZQX0ZSQUNfREVDTF80KFgpCV9GUF9XX1RZUEUgWCMjX2ZbNF0KLSNkZWZpbmUgX0ZQX0ZSQUNfQ09QWV80KEQsUykJCQlcCi0gIChEIyNfZlswXSA9IFMjI19mWzBdLCBEIyNfZlsxXSA9IFMjI19mWzFdLAlcCi0gICBEIyNfZlsyXSA9IFMjI19mWzJdLCBEIyNfZlszXSA9IFMjI19mWzNdKQotLyogVGhlIF9GUF9GUkFDX1NFVF9uKFgsSSkgbWFjcm8gaXMgaW50ZW5kZWQgZm9yIHVzZSB3aXRoIGFub3RoZXIKLSAqIG1hY3JvIHN1Y2ggYXMgX0ZQX1pFUk9GUkFDX24gd2hpY2ggcmV0dXJucyBuIGNvbW1hIHNlcGFyYXRlZCB2YWx1ZXMuCi0gKiBUaGUgcmVzdWx0IGlzIHRoYXQgd2UgZ2V0IGFuIGV4cGFuc2lvbiBvZiBfX0ZQX0ZSQUNfU0VUX24oWCxJMCxJMSxJMixJMykKLSAqIHdoaWNoIGp1c3QgYXNzaWducyB0aGUgSW4gdmFsdWVzIHRvIHRoZSBhcnJheSBYIyNfZltdLgotICogVGhpcyBpcyB3aHkgdGhlIG51bWJlciBvZiBwYXJhbWV0ZXJzIGRvZXNuJ3QgYXBwZWFyIHRvIG1hdGNoCi0gKiBhdCBmaXJzdCBnbGFuY2UuLi4gICAgICAtLSBQTU0KLSAqLwotI2RlZmluZSBfRlBfRlJBQ19TRVRfNChYLEkpCV9fRlBfRlJBQ19TRVRfNChYLCBJKQotI2RlZmluZSBfRlBfRlJBQ19ISUdIXzQoWCkJKFgjI19mWzNdKQotI2RlZmluZSBfRlBfRlJBQ19MT1dfNChYKQkoWCMjX2ZbMF0pCi0jZGVmaW5lIF9GUF9GUkFDX1dPUkRfNChYLHcpCShYIyNfZlt3XSkKLQotI2RlZmluZSBfRlBfRlJBQ19TTExfNChYLE4pCQkJCQkJXAotICBkbyB7CQkJCQkJCQkJXAotICAgIF9GUF9JX1RZUEUgX3VwLCBfZG93biwgX3NraXAsIF9pOwkJCQkJXAotICAgIF9za2lwID0gKE4pIC8gX0ZQX1dfVFlQRV9TSVpFOwkJCQkJXAotICAgIF91cCA9IChOKSAlIF9GUF9XX1RZUEVfU0laRTsJCQkJCVwKLSAgICBfZG93biA9IF9GUF9XX1RZUEVfU0laRSAtIF91cDsJCQkJCVwKLSAgICBmb3IgKF9pID0gMzsgX2kgPiBfc2tpcDsgLS1faSkJCQkJCVwKLSAgICAgIFgjI19mW19pXSA9IFgjI19mW19pLV9za2lwXSA8PCBfdXAgfCBYIyNfZltfaS1fc2tpcC0xXSA+PiBfZG93bjsJXAotLyogYnVnZml4ZWQ6IHdhcyBYIyNfZltfaV0gPDw9IF91cDsgIC0tIFBNTSAwMi8xOTk4ICovICAgICAgICAgICAgICAgICAgXAotICAgIFgjI19mW19pXSA9IFgjI19mWzBdIDw8IF91cDsgCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGZvciAoLS1faTsgX2kgPj0gMDsgLS1faSkJCQkJCQlcCi0gICAgICBYIyNfZltfaV0gPSAwOwkJCQkJCQlcCi0gIH0gd2hpbGUgKDApCi0KLS8qIFRoaXMgb25lIHdhcyBicm9rZW4gdG9vICovCi0jZGVmaW5lIF9GUF9GUkFDX1NSTF80KFgsTikJCQkJCQlcCi0gIGRvIHsJCQkJCQkJCQlcCi0gICAgX0ZQX0lfVFlQRSBfdXAsIF9kb3duLCBfc2tpcCwgX2k7CQkJCQlcCi0gICAgX3NraXAgPSAoTikgLyBfRlBfV19UWVBFX1NJWkU7CQkJCQlcCi0gICAgX2Rvd24gPSAoTikgJSBfRlBfV19UWVBFX1NJWkU7CQkJCQlcCi0gICAgX3VwID0gX0ZQX1dfVFlQRV9TSVpFIC0gX2Rvd247CQkJCQlcCi0gICAgZm9yIChfaSA9IDA7IF9pIDwgMy1fc2tpcDsgKytfaSkJCQkJCVwKLSAgICAgIFgjI19mW19pXSA9IFgjI19mW19pK19za2lwXSA+PiBfZG93biB8IFgjI19mW19pK19za2lwKzFdIDw8IF91cDsJXAotICAgIFgjI19mW19pXSA9IFgjI19mWzNdID4+IF9kb3duOwkJCSAgICAgICAgIAlcCi0gICAgZm9yICgrK19pOyBfaSA8IDQ7ICsrX2kpCQkJCQkJXAotICAgICAgWCMjX2ZbX2ldID0gMDsJCQkJCQkJXAotICB9IHdoaWxlICgwKQotCi0KLS8qIFJpZ2h0IHNoaWZ0IHdpdGggc3RpY2t5LWxzYi4KLSAqIFdoYXQgdGhpcyBhY3R1YWxseSBtZWFucyBpcyB0aGF0IHdlIGRvIGEgc3RhbmRhcmQgcmlnaHQtc2hpZnQsCi0gKiBidXQgdGhhdCBpZiBhbnkgb2YgdGhlIGJpdHMgdGhhdCBmYWxsIG9mZiB0aGUgcmlnaHQgaGFuZCBzaWRlCi0gKiB3ZXJlIG9uZSB0aGVuIHdlIGFsd2F5cyBzZXQgdGhlIExTYml0LgotICovCi0jZGVmaW5lIF9GUF9GUkFDX1NSU180KFgsTixzaXplKQkJCQkJXAotICBkbyB7CQkJCQkJCQkJXAotICAgIF9GUF9JX1RZUEUgX3VwLCBfZG93biwgX3NraXAsIF9pOwkJCQkJXAotICAgIF9GUF9XX1RZUEUgX3M7CQkJCQkJCVwKLSAgICBfc2tpcCA9IChOKSAvIF9GUF9XX1RZUEVfU0laRTsJCQkJCVwKLSAgICBfZG93biA9IChOKSAlIF9GUF9XX1RZUEVfU0laRTsJCQkJCVwKLSAgICBfdXAgPSBfRlBfV19UWVBFX1NJWkUgLSBfZG93bjsJCQkJCVwKLSAgICBmb3IgKF9zID0gX2kgPSAwOyBfaSA8IF9za2lwOyArK19pKQkJCQkJXAotICAgICAgX3MgfD0gWCMjX2ZbX2ldOwkJCQkJCQlcCi0gICAgX3MgfD0gWCMjX2ZbX2ldIDw8IF91cDsJCQkJCQlcCi0vKiBzIGlzIG5vdyAhPSAwIGlmIHdlIHdhbnQgdG8gc2V0IHRoZSBMU2JpdCAqLyAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgZm9yIChfaSA9IDA7IF9pIDwgMy1fc2tpcDsgKytfaSkJCQkJCVwKLSAgICAgIFgjI19mW19pXSA9IFgjI19mW19pK19za2lwXSA+PiBfZG93biB8IFgjI19mW19pK19za2lwKzFdIDw8IF91cDsJXAotICAgIFgjI19mW19pXSA9IFgjI19mWzNdID4+IF9kb3duOwkJCQkJXAotICAgIGZvciAoKytfaTsgX2kgPCA0OyArK19pKQkJCQkJCVwKLSAgICAgIFgjI19mW19pXSA9IDA7CQkJCQkJCVwKLSAgICAvKiBkb24ndCBmaXggdGhlIExTQiB1bnRpbCB0aGUgdmVyeSBlbmQgd2hlbiB3ZSdyZSBzdXJlIGZbMF0gaXMgc3RhYmxlICovIFwKLSAgICBYIyNfZlswXSB8PSAoX3MgIT0gMCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgfSB3aGlsZSAoMCkKLQotI2RlZmluZSBfRlBfRlJBQ19BRERfNChSLFgsWSkJCQkJCQlcCi0gIF9fRlBfRlJBQ19BRERfNChSIyNfZlszXSwgUiMjX2ZbMl0sIFIjI19mWzFdLCBSIyNfZlswXSwJCVwKLQkJICBYIyNfZlszXSwgWCMjX2ZbMl0sIFgjI19mWzFdLCBYIyNfZlswXSwJCVwKLQkJICBZIyNfZlszXSwgWSMjX2ZbMl0sIFkjI19mWzFdLCBZIyNfZlswXSkKLQotI2RlZmluZSBfRlBfRlJBQ19TVUJfNChSLFgsWSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBfX0ZQX0ZSQUNfU1VCXzQoUiMjX2ZbM10sIFIjI19mWzJdLCBSIyNfZlsxXSwgUiMjX2ZbMF0sCQlcCi0JCSAgWCMjX2ZbM10sIFgjI19mWzJdLCBYIyNfZlsxXSwgWCMjX2ZbMF0sCQlcCi0JCSAgWSMjX2ZbM10sIFkjI19mWzJdLCBZIyNfZlsxXSwgWSMjX2ZbMF0pCi0KLSNkZWZpbmUgX0ZQX0ZSQUNfQURESV80KFgsSSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgX19GUF9GUkFDX0FERElfNChYIyNfZlszXSwgWCMjX2ZbMl0sIFgjI19mWzFdLCBYIyNfZlswXSwgSSkKLQotI2RlZmluZSBfRlBfWkVST0ZSQUNfNCAgMCwwLDAsMAotI2RlZmluZSBfRlBfTUlORlJBQ180ICAgMCwwLDAsMQotCi0jZGVmaW5lIF9GUF9GUkFDX1pFUk9QXzQoWCkgICAgICgoWCMjX2ZbMF0gfCBYIyNfZlsxXSB8IFgjI19mWzJdIHwgWCMjX2ZbM10pID09IDApCi0jZGVmaW5lIF9GUF9GUkFDX05FR1BfNChYKSAgICAgICgoX0ZQX1dTX1RZUEUpWCMjX2ZbM10gPCAwKQotI2RlZmluZSBfRlBfRlJBQ19PVkVSUF80KGZzLFgpICAoWCMjX2ZbMF0gJiBfRlBfT1ZFUkZMT1dfIyNmcykKLQotI2RlZmluZSBfRlBfRlJBQ19FUV80KFgsWSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gKFgjI19mWzBdID09IFkjI19mWzBdICYmIFgjI19mWzFdID09IFkjI19mWzFdICAgICAgICAgIFwKLSAgJiYgWCMjX2ZbMl0gPT0gWSMjX2ZbMl0gJiYgWCMjX2ZbM10gPT0gWSMjX2ZbM10pCi0KLSNkZWZpbmUgX0ZQX0ZSQUNfR1RfNChYLFkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotIChYIyNfZlszXSA+IFkjI19mWzNdIHx8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIChYIyNfZlszXSA9PSBZIyNfZlszXSAmJiAoWCMjX2ZbMl0gPiBZIyNfZlsyXSB8fCAgICAgIFwKLSAgIChYIyNfZlsyXSA9PSBZIyNfZlsyXSAmJiAoWCMjX2ZbMV0gPiBZIyNfZlsxXSB8fCAgICAgXAotICAgIChYIyNfZlsxXSA9PSBZIyNfZlsxXSAmJiBYIyNfZlswXSA+IFkjI19mWzBdKSAgICAgICBcCi0gICApKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgKSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICkKLQotI2RlZmluZSBfRlBfRlJBQ19HRV80KFgsWSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gKFgjI19mWzNdID4gWSMjX2ZbM10gfHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgKFgjI19mWzNdID09IFkjI19mWzNdICYmIChYIyNfZlsyXSA+IFkjI19mWzJdIHx8ICAgICAgXAotICAgKFgjI19mWzJdID09IFkjI19mWzJdICYmIChYIyNfZlsxXSA+IFkjI19mWzFdIHx8ICAgICBcCi0gICAgKFgjI19mWzFdID09IFkjI19mWzFdICYmIFgjI19mWzBdID49IFkjI19mWzBdKSAgICAgIFwKLSAgICkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICApKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gKQotCi0KLSNkZWZpbmUgX0ZQX0ZSQUNfQ0xaXzQoUixYKSAgICAgICAgICAgICBcCi0gIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGlmIChYIyNfZlszXSkgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIF9fRlBfQ0xaKFIsWCMjX2ZbM10pOyAgICAgICAgICAgXAotICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBlbHNlIGlmIChYIyNfZlsyXSkgICAgICAgICAgICAgICAgICBcCi0gICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBfX0ZQX0NMWihSLFgjI19mWzJdKTsgICAgICAgICAgIFwKLSAgICAgICAgUiArPSBfRlBfV19UWVBFX1NJWkU7ICAgICAgICAgICBcCi0gICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGVsc2UgaWYgKFgjI19mWzFdKSAgICAgICAgICAgICAgICAgIFwKLSAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIF9fRlBfQ0xaKFIsWCMjX2ZbMl0pOyAgICAgICAgICAgXAotICAgICAgICBSICs9IF9GUF9XX1RZUEVfU0laRSoyOyAgICAgICAgIFwKLSAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgX19GUF9DTFooUixYIyNfZlswXSk7ICAgICAgICAgICBcCi0gICAgICAgIFIgKz0gX0ZQX1dfVFlQRV9TSVpFKjM7ICAgICAgICAgXAotICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgfSB3aGlsZSgwKQotCi0KLSNkZWZpbmUgX0ZQX1VOUEFDS19SQVdfNChmcywgWCwgdmFsKSAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIHVuaW9uIF9GUF9VTklPTl8jI2ZzIF9mbG87IF9mbG8uZmx0ID0gKHZhbCk7ICAgICAgICAJXAotICAgIFgjI19mWzBdID0gX2Zsby5iaXRzLmZyYWMwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBYIyNfZlsxXSA9IF9mbG8uYml0cy5mcmFjMTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgWCMjX2ZbMl0gPSBfZmxvLmJpdHMuZnJhYzI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIFgjI19mWzNdID0gX2Zsby5iaXRzLmZyYWMzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBYIyNfZSAgPSBfZmxvLmJpdHMuZXhwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgWCMjX3MgID0gX2Zsby5iaXRzLnNpZ247ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICB9IHdoaWxlICgwKQotCi0jZGVmaW5lIF9GUF9QQUNLX1JBV180KGZzLCB2YWwsIFgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICB1bmlvbiBfRlBfVU5JT05fIyNmcyBfZmxvOwkJCQkJXAotICAgIF9mbG8uYml0cy5mcmFjMCA9IFgjI19mWzBdOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBfZmxvLmJpdHMuZnJhYzEgPSBYIyNfZlsxXTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgX2Zsby5iaXRzLmZyYWMyID0gWCMjX2ZbMl07ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIF9mbG8uYml0cy5mcmFjMyA9IFgjI19mWzNdOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBfZmxvLmJpdHMuZXhwICAgPSBYIyNfZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgX2Zsby5iaXRzLnNpZ24gID0gWCMjX3M7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICh2YWwpID0gX2Zsby5mbHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJXAotICB9IHdoaWxlICgwKQotCi0KLS8qCi0gKiBJbnRlcm5hbHMKLSAqLwotCi0jZGVmaW5lIF9fRlBfRlJBQ19TRVRfNChYLEkzLEkyLEkxLEkwKQkJCQkJXAotICAoWCMjX2ZbM10gPSBJMywgWCMjX2ZbMl0gPSBJMiwgWCMjX2ZbMV0gPSBJMSwgWCMjX2ZbMF0gPSBJMCkKLQotI2lmbmRlZiBfX0ZQX0ZSQUNfQUREXzQKLSNkZWZpbmUgX19GUF9GUkFDX0FERF80KHIzLHIyLHIxLHIwLHgzLHgyLHgxLHgwLHkzLHkyLHkxLHkwKQlcCi0gIGRvIHsJCQkJCQkJCVwKLSAgICBpbnQgX2MxLCBfYzIsIF9jMzsJCQkJCQlcCi0gICAgcjAgPSB4MCArIHkwOwkJCQkJCVwKLSAgICBfYzEgPSByMCA8IHgwOwkJCQkJCVwKLSAgICByMSA9IHgxICsgeTE7CQkJCQkJXAotICAgIF9jMiA9IHIxIDwgeDE7CQkJCQkJXAotICAgIHIxICs9IF9jMTsJCQkJCQkJXAotICAgIF9jMiB8PSByMSA8IF9jMTsJCQkJCQlcCi0gICAgcjIgPSB4MiArIHkyOwkJCQkJCVwKLSAgICBfYzMgPSByMiA8IHgyOwkJCQkJCVwKLSAgICByMiArPSBfYzI7CQkJCQkJCVwKLSAgICBfYzMgfD0gcjIgPCBfYzI7CQkJCQkJXAotICAgIHIzID0geDMgKyB5MyArIF9jMzsJCQkJCQlcCi0gIH0gd2hpbGUgKDApCi0jZW5kaWYKLQotI2lmbmRlZiBfX0ZQX0ZSQUNfU1VCXzQKLSNkZWZpbmUgX19GUF9GUkFDX1NVQl80KHIzLHIyLHIxLHIwLHgzLHgyLHgxLHgwLHkzLHkyLHkxLHkwKQlcCi0gIGRvIHsJCQkJCQkJCVwKLSAgICBpbnQgX2MxLCBfYzIsIF9jMzsJCQkJCQlcCi0gICAgcjAgPSB4MCAtIHkwOwkJCQkJCVwKLSAgICBfYzEgPSByMCA+IHgwOwkJCQkJCVwKLSAgICByMSA9IHgxIC0geTE7CQkJCQkJXAotICAgIF9jMiA9IHIxID4geDE7CQkJCQkJXAotICAgIHIxIC09IF9jMTsJCQkJCQkJXAotICAgIF9jMiB8PSByMSA+IF9jMTsJCQkJCQlcCi0gICAgcjIgPSB4MiAtIHkyOwkJCQkJCVwKLSAgICBfYzMgPSByMiA+IHgyOwkJCQkJCVwKLSAgICByMiAtPSBfYzI7CQkJCQkJCVwKLSAgICBfYzMgfD0gcjIgPiBfYzI7CQkJCQkJXAotICAgIHIzID0geDMgLSB5MyAtIF9jMzsJCQkJCQlcCi0gIH0gd2hpbGUgKDApCi0jZW5kaWYKLQotI2lmbmRlZiBfX0ZQX0ZSQUNfQURESV80Ci0vKiBJIGFsd2F5cyB3YW50ZWQgdG8gYmUgYSBsaXNwIHByb2dyYW1tZXIgOi0+ICovCi0jZGVmaW5lIF9fRlBfRlJBQ19BRERJXzQoeDMseDIseDEseDAsaSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICh4MyArPSAoKHgyICs9ICgoeDEgKz0gKCh4MCArPSBpKSA8IHgwKSkgPCB4MSkgPCB4MikpKQotI2VuZGlmCi0KLS8qIENvbnZlcnQgRlAgdmFsdWVzIGJldHdlZW4gd29yZCBzaXplcy4gVGhpcyBhcHBlYXJzIHRvIGJlIG1vcmUKLSAqIGNvbXBsaWNhdGVkIHRoYW4gSSdkIGhhdmUgZXhwZWN0ZWQgaXQgdG8gYmUsIHNvIHRoZXNlIG1pZ2h0IGJlCi0gKiB3cm9uZy4uLiBUaGVzZSBtYWNyb3MgYXJlIGluIGFueSBjYXNlIHNvbWV3aGF0IGJvZ3VzIGJlY2F1c2UgdGhleQotICogdXNlIGluZm9ybWF0aW9uIGFib3V0IHdoYXQgdmFyaW91cyBGUkFDX24gdmFyaWFibGVzIGxvb2sgbGlrZQotICogaW50ZXJuYWxseSBbZWcsIHRoYXQgMiB3b3JkIHZhcnMgYXJlIFhfZjAgYW5kIHhfZjFdLiBCdXQgc28gZG8KLSAqIHRoZSBvbmVzIGluIG9wLTIuaCBhbmQgb3AtMS5oLgotICovCi0jZGVmaW5lIF9GUF9GUkFDX0NPTlZfMV80KGRmcywgc2ZzLCBELCBTKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgIF9GUF9GUkFDX1NSU180KFMsIChfRlBfV0ZSQUNCSVRTXyMjc2ZzIC0gX0ZQX1dGUkFDQklUU18jI2RmcyksICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICBfRlBfV0ZSQUNCSVRTXyMjc2ZzKTsgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgIEQjI19mID0gUyMjX2ZbMF07ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICB9IHdoaWxlICgwKQotCi0jZGVmaW5lIF9GUF9GUkFDX0NPTlZfMl80KGRmcywgc2ZzLCBELCBTKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgIF9GUF9GUkFDX1NSU180KFMsIChfRlBfV0ZSQUNCSVRTXyMjc2ZzIC0gX0ZQX1dGUkFDQklUU18jI2RmcyksICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICBfRlBfV0ZSQUNCSVRTXyMjc2ZzKTsgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgIEQjI19mMCA9IFMjI19mWzBdOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICBEIyNfZjEgPSBTIyNfZlsxXTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgfSB3aGlsZSAoMCkKLQotLyogQXNzZW1ibHkvZGlzYXNzZW1ibHkgZm9yIGNvbnZlcnRpbmcgdG8vZnJvbSBpbnRlZ3JhbCB0eXBlcy4KLSAqIE5vIHNoaWZ0aW5nIG9yIG92ZXJmbG93IGhhbmRsZWQgaGVyZS4KLSAqLwotLyogUHV0IHRoZSBGUCB2YWx1ZSBYIGludG8gciwgd2hpY2ggaXMgYW4gaW50ZWdlciBvZiBzaXplIHJzaXplLiAqLwotI2RlZmluZSBfRlBfRlJBQ19BU1NFTUJMRV80KHIsIFgsIHJzaXplKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGlmIChyc2l6ZSA8PSBfRlBfV19UWVBFX1NJWkUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgciA9IFgjI19mWzBdOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGVsc2UgaWYgKHJzaXplIDw9IDIqX0ZQX1dfVFlQRV9TSVpFKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgciA9IFgjI19mWzFdOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgciA8PD0gX0ZQX1dfVFlQRV9TSVpFOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgciArPSBYIyNfZlswXTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGVsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgLyogSSdtIGZlZWxpbmcgbGF6eSBzbyB3ZSBkZWFsIHdpdGggaW50ID09IDN3b3JkcyAoaW1wbGF1c2libGUpKi8gXAotICAgICAgLyogYW5kIGludCA9PSA0d29yZHMgYXMgYSBzaW5nbGUgY2FzZS4gICAgICAgICAgICAgICAgICAgICAgICAgKi8gXAotICAgICAgciA9IFgjI19mWzNdOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgciA8PD0gX0ZQX1dfVFlQRV9TSVpFOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgciArPSBYIyNfZlsyXTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgciA8PD0gX0ZQX1dfVFlQRV9TSVpFOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgciArPSBYIyNfZlsxXTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgciA8PD0gX0ZQX1dfVFlQRV9TSVpFOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgciArPSBYIyNfZlswXTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICB9IHdoaWxlICgwKQotCi0vKiAiTm8gZGlzYXNzZW1ibGUgTnVtYmVyIEZpdmUhIiAqLwotLyogbW92ZSBhbiBpbnRlZ2VyIG9mIHNpemUgcnNpemUgaW50byBYJ3MgZnJhY3Rpb25hbCBwYXJ0LiBXZSByZWx5IG9uCi0gKiB0aGUgX2ZbXSBhcnJheSBjb25zaXN0aW5nIG9mIHdvcmRzIG9mIHNpemUgX0ZQX1dfVFlQRV9TSVpFIHRvIGF2b2lkCi0gKiBoYXZpbmcgdG8gbWFzayB0aGUgdmFsdWVzIHdlIHN0b3JlIGludG8gaXQuCi0gKi8KLSNkZWZpbmUgX0ZQX0ZSQUNfRElTQVNTRU1CTEVfNChYLCByLCByc2l6ZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBYIyNfZlswXSA9IHI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBYIyNfZlsxXSA9IChyc2l6ZSA8PSBfRlBfV19UWVBFX1NJWkUgPyAwIDogciA+PiBfRlBfV19UWVBFX1NJWkUpOyAgIFwKLSAgICBYIyNfZlsyXSA9IChyc2l6ZSA8PSAyKl9GUF9XX1RZUEVfU0laRSA/IDAgOiByID4+IDIqX0ZQX1dfVFlQRV9TSVpFKTsgXAotICAgIFgjI19mWzNdID0gKHJzaXplIDw9IDMqX0ZQX1dfVFlQRV9TSVpFID8gMCA6IHIgPj4gMypfRlBfV19UWVBFX1NJWkUpOyBcCi0gIH0gd2hpbGUgKDApCi0KLSNkZWZpbmUgX0ZQX0ZSQUNfQ09OVl80XzEoZGZzLCBzZnMsIEQsIFMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgRCMjX2ZbMF0gPSBTIyNfZjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgRCMjX2ZbMV0gPSBEIyNfZlsyXSA9IEQjI19mWzNdID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgX0ZQX0ZSQUNfU0xMXzQoRCwgKF9GUF9XRlJBQ0JJVFNfIyNkZnMgLSBfRlBfV0ZSQUNCSVRTXyMjc2ZzKSk7ICAgIFwKLSAgIH0gd2hpbGUgKDApCi0KLSNkZWZpbmUgX0ZQX0ZSQUNfQ09OVl80XzIoZGZzLCBzZnMsIEQsIFMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgRCMjX2ZbMF0gPSBTIyNfZjA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgRCMjX2ZbMV0gPSBTIyNfZjE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgRCMjX2ZbMl0gPSBEIyNfZlszXSA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgX0ZQX0ZSQUNfU0xMXzQoRCwgKF9GUF9XRlJBQ0JJVFNfIyNkZnMgLSBfRlBfV0ZSQUNCSVRTXyMjc2ZzKSk7ICAgIFwKLSAgIH0gd2hpbGUgKDApCi0KLS8qIEZJWE1FISBUaGlzIGhhcyB0byBiZSB3cml0dGVuICovCi0jZGVmaW5lIF9GUF9TUVJUX01FQVRfNChSLCBTLCBULCBYLCBxKQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL21hdGgtZW11L29wLWNvbW1vbi5oIGIvYXJjaC9wb3dlcnBjL21hdGgtZW11L29wLWNvbW1vbi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZmI4MmI2Li4wMDAwMDAwCi0tLSBhL2FyY2gvcG93ZXJwYy9tYXRoLWVtdS9vcC1jb21tb24uaAorKysgL2Rldi9udWxsCkBAIC0xLDY4OCArMCwwIEBACi0jZGVmaW5lIF9GUF9ERUNMKHdjLCBYKQkJCVwKLSAgX0ZQX0lfVFlQRSBYIyNfYywgWCMjX3MsIFgjI19lOwlcCi0gIF9GUF9GUkFDX0RFQ0xfIyN3YyhYKQotCi0vKgotICogRmluaXNoIHRydWVseSB1bnBhY2tpbmcgYSBuYXRpdmUgZnAgdmFsdWUgYnkgY2xhc3NpZnlpbmcgdGhlIGtpbmQKLSAqIG9mIGZwIHZhbHVlIGFuZCBub3JtYWxpemluZyBib3RoIHRoZSBleHBvbmVudCBhbmQgdGhlIGZyYWN0aW9uLgotICovCi0KLSNkZWZpbmUgX0ZQX1VOUEFDS19DQU5PTklDQUwoZnMsIHdjLCBYKQkJCQkJXAotZG8gewkJCQkJCQkJCVwKLSAgc3dpdGNoIChYIyNfZSkJCQkJCQkJXAotICB7CQkJCQkJCQkJXAotICBkZWZhdWx0OgkJCQkJCQkJXAotICAgIF9GUF9GUkFDX0hJR0hfIyN3YyhYKSB8PSBfRlBfSU1QTEJJVF8jI2ZzOwkJCQlcCi0gICAgX0ZQX0ZSQUNfU0xMXyMjd2MoWCwgX0ZQX1dPUktCSVRTKTsJCQkJCVwKLSAgICBYIyNfZSAtPSBfRlBfRVhQQklBU18jI2ZzOwkJCQkJCVwKLSAgICBYIyNfYyA9IEZQX0NMU19OT1JNQUw7CQkJCQkJXAotICAgIGJyZWFrOwkJCQkJCQkJXAotCQkJCQkJCQkJXAotICBjYXNlIDA6CQkJCQkJCQlcCi0gICAgaWYgKF9GUF9GUkFDX1pFUk9QXyMjd2MoWCkpCQkJCQkJXAotICAgICAgWCMjX2MgPSBGUF9DTFNfWkVSTzsJCQkJCQlcCi0gICAgZWxzZQkJCQkJCQkJXAotICAgICAgewkJCQkJCQkJCVwKLQkvKiBhIGRlbm9ybWFsaXplZCBudW1iZXIgKi8JCQkJCVwKLQlfRlBfSV9UWVBFIF9zaGlmdDsJCQkJCQlcCi0JX0ZQX0ZSQUNfQ0xaXyMjd2MoX3NoaWZ0LCBYKTsJCQkJCVwKLQlfc2hpZnQgLT0gX0ZQX0ZSQUNYQklUU18jI2ZzOwkJCQkJXAotCV9GUF9GUkFDX1NMTF8jI3djKFgsIChfc2hpZnQrX0ZQX1dPUktCSVRTKSk7CQkJXAotCVgjI19lIC09IF9GUF9FWFBCSUFTXyMjZnMgLSAxICsgX3NoaWZ0OwkJCQlcCi0JWCMjX2MgPSBGUF9DTFNfTk9STUFMOwkJCQkJCVwKLSAgICAgIH0JCQkJCQkJCQlcCi0gICAgYnJlYWs7CQkJCQkJCQlcCi0JCQkJCQkJCQlcCi0gIGNhc2UgX0ZQX0VYUE1BWF8jI2ZzOgkJCQkJCQlcCi0gICAgaWYgKF9GUF9GUkFDX1pFUk9QXyMjd2MoWCkpCQkJCQkJXAotICAgICAgWCMjX2MgPSBGUF9DTFNfSU5GOwkJCQkJCVwKLSAgICBlbHNlCQkJCQkJCQlcCi0gICAgICAvKiB3ZSBkb24ndCBkaWZmZXJlbnRpYXRlIGJldHdlZW4gc2lnbmFsaW5nIGFuZCBxdWlldCBuYW5zICovCVwKLSAgICAgIFgjI19jID0gRlBfQ0xTX05BTjsJCQkJCQlcCi0gICAgYnJlYWs7CQkJCQkJCQlcCi0gIH0JCQkJCQkJCQlcCi19IHdoaWxlICgwKQotCi0KLS8qCi0gKiBCZWZvcmUgcGFja2luZyB0aGUgYml0cyBiYWNrIGludG8gdGhlIG5hdGl2ZSBmcCByZXN1bHQsIHRha2UgY2FyZQotICogb2Ygc3VjaCBtdW5kYW5lIHRoaW5ncyBhcyByb3VuZGluZyBhbmQgb3ZlcmZsb3cuICBBbHNvLCBmb3Igc29tZQotICoga2luZHMgb2YgZnAgdmFsdWVzLCB0aGUgb3JpZ2luYWwgcGFydHMgbWF5IG5vdCBoYXZlIGJlZW4gZnVsbHkKLSAqIGV4dHJhY3RlZCAtLSBidXQgdGhhdCBpcyBvaywgd2UgY2FuIHJlZ2VuZXJhdGUgdGhlbSBub3cuCi0gKi8KLQotI2RlZmluZSBfRlBfUEFDS19DQU5PTklDQUwoZnMsIHdjLCBYKQkJCQlcCi0oe2ludCBfX3JldCA9IDA7CQkJCQkJXAotICBzd2l0Y2ggKFgjI19jKQkJCQkJCVwKLSAgewkJCQkJCQkJXAotICBjYXNlIEZQX0NMU19OT1JNQUw6CQkJCQkJXAotICAgIFgjI19lICs9IF9GUF9FWFBCSUFTXyMjZnM7CQkJCQlcCi0gICAgaWYgKFgjI19lID4gMCkJCQkJCQlcCi0gICAgICB7CQkJCQkJCQlcCi0JX19yZXQgfD0gX0ZQX1JPVU5EKHdjLCBYKTsJCQkJXAotCWlmIChfRlBfRlJBQ19PVkVSUF8jI3djKGZzLCBYKSkJCQkJXAotCSAgewkJCQkJCQlcCi0JICAgIF9GUF9GUkFDX1NSTF8jI3djKFgsIChfRlBfV09SS0JJVFMrMSkpOwkJXAotCSAgICBYIyNfZSsrOwkJCQkJCVwKLQkgIH0JCQkJCQkJXAotCWVsc2UJCQkJCQkJXAotCSAgX0ZQX0ZSQUNfU1JMXyMjd2MoWCwgX0ZQX1dPUktCSVRTKTsJCQlcCi0JaWYgKFgjI19lID49IF9GUF9FWFBNQVhfIyNmcykJCQkJXAotCSAgewkJCQkJCQlcCi0JICAgIC8qIG92ZXJmbG93IHRvIGluZmluaXR5ICovCQkJCVwKLQkgICAgWCMjX2UgPSBfRlBfRVhQTUFYXyMjZnM7CQkJCVwKLQkgICAgX0ZQX0ZSQUNfU0VUXyMjd2MoWCwgX0ZQX1pFUk9GUkFDXyMjd2MpOwkJXAotICAgICAgICAgICAgX19yZXQgfD0gRUZMQUdfT1ZFUkZMT1c7CQkJCVwKLQkgIH0JCQkJCQkJXAotICAgICAgfQkJCQkJCQkJXAotICAgIGVsc2UJCQkJCQkJXAotICAgICAgewkJCQkJCQkJXAotCS8qIHdlJ3ZlIGdvdCBhIGRlbm9ybWFsaXplZCBudW1iZXIgKi8JCQlcCi0JWCMjX2UgPSAtWCMjX2UgKyAxOwkJCQkJXAotCWlmIChYIyNfZSA8PSBfRlBfV0ZSQUNCSVRTXyMjZnMpCQkJXAotCSAgewkJCQkJCQlcCi0JICAgIF9GUF9GUkFDX1NSU18jI3djKFgsIFgjI19lLCBfRlBfV0ZSQUNCSVRTXyMjZnMpOwlcCi0JICAgIF9GUF9GUkFDX1NMTF8jI3djKFgsIDEpOwkJCQlcCi0JICAgIGlmIChfRlBfRlJBQ19PVkVSUF8jI3djKGZzLCBYKSkJCQlcCi0JICAgICAgewkJCQkJCQlcCi0JICAgICAgICBYIyNfZSA9IDE7CQkJCQlcCi0JICAgICAgICBfRlBfRlJBQ19TRVRfIyN3YyhYLCBfRlBfWkVST0ZSQUNfIyN3Yyk7CVwKLQkgICAgICB9CQkJCQkJCVwKLQkgICAgZWxzZQkJCQkJCVwKLQkgICAgICB7CQkJCQkJCVwKLQkJWCMjX2UgPSAwOwkJCQkJXAotCQlfRlBfRlJBQ19TUkxfIyN3YyhYLCBfRlBfV09SS0JJVFMrMSk7CQlcCi0gICAgICAgICAgICAgICAgX19yZXQgfD0gRUZMQUdfVU5ERVJGTE9XOwkJCVwKLQkgICAgICB9CQkJCQkJCVwKLQkgIH0JCQkJCQkJXAotCWVsc2UJCQkJCQkJXAotCSAgewkJCQkJCQlcCi0JICAgIC8qIHVuZGVyZmxvdyB0byB6ZXJvICovCQkJCVwKLQkgICAgWCMjX2UgPSAwOwkJCQkJCVwKLQkgICAgX0ZQX0ZSQUNfU0VUXyMjd2MoWCwgX0ZQX1pFUk9GUkFDXyMjd2MpOwkJXAotICAgICAgICAgICAgX19yZXQgfD0gRUZMQUdfVU5ERVJGTE9XOwkJCQlcCi0JICB9CQkJCQkJCVwKLSAgICAgIH0JCQkJCQkJCVwKLSAgICBicmVhazsJCQkJCQkJXAotCQkJCQkJCQlcCi0gIGNhc2UgRlBfQ0xTX1pFUk86CQkJCQkJXAotICAgIFgjI19lID0gMDsJCQkJCQkJXAotICAgIF9GUF9GUkFDX1NFVF8jI3djKFgsIF9GUF9aRVJPRlJBQ18jI3djKTsJCQlcCi0gICAgYnJlYWs7CQkJCQkJCVwKLQkJCQkJCQkJXAotICBjYXNlIEZQX0NMU19JTkY6CQkJCQkJXAotICAgIFgjI19lID0gX0ZQX0VYUE1BWF8jI2ZzOwkJCQkJXAotICAgIF9GUF9GUkFDX1NFVF8jI3djKFgsIF9GUF9aRVJPRlJBQ18jI3djKTsJCQlcCi0gICAgYnJlYWs7CQkJCQkJCVwKLQkJCQkJCQkJXAotICBjYXNlIEZQX0NMU19OQU46CQkJCQkJXAotICAgIFgjI19lID0gX0ZQX0VYUE1BWF8jI2ZzOwkJCQkJXAotICAgIGlmICghX0ZQX0tFRVBOQU5GUkFDUCkJCQkJCVwKLSAgICAgIHsJCQkJCQkJCVwKLQlfRlBfRlJBQ19TRVRfIyN3YyhYLCBfRlBfTkFORlJBQ18jI2ZzKTsJCQlcCi0JWCMjX3MgPSAwOwkJCQkJCVwKLSAgICAgIH0JCQkJCQkJCVwKLSAgICBlbHNlCQkJCQkJCVwKLSAgICAgIF9GUF9GUkFDX0hJR0hfIyN3YyhYKSB8PSBfRlBfUU5BTkJJVF8jI2ZzOwkJXAotICAgIGJyZWFrOwkJCQkJCQlcCi0gIH0JCQkJCQkJCVwKLSAgX19yZXQ7CQkJCQkJCVwKLX0pCi0KLQotLyoKLSAqIE1haW4gYWRkaXRpb24gcm91dGluZS4gIFRoZSBpbnB1dCB2YWx1ZXMgc2hvdWxkIGJlIGNvb2tlZC4KLSAqLwotCi0jZGVmaW5lIF9GUF9BREQoZnMsIHdjLCBSLCBYLCBZKQkJCQkJICAgICBcCi1kbyB7CQkJCQkJCQkJICAgICBcCi0gIHN3aXRjaCAoX0ZQX0NMU19DT01CSU5FKFgjI19jLCBZIyNfYykpCQkJCSAgICAgXAotICB7CQkJCQkJCQkJICAgICBcCi0gIGNhc2UgX0ZQX0NMU19DT01CSU5FKEZQX0NMU19OT1JNQUwsRlBfQ0xTX05PUk1BTCk6CQkJICAgICBcCi0gICAgewkJCQkJCQkJCSAgICAgXAotICAgICAgLyogc2hpZnQgdGhlIHNtYWxsZXIgbnVtYmVyIHNvIHRoYXQgaXRzIGV4cG9uZW50IG1hdGNoZXMgdGhlIGxhcmdlciAqLyBcCi0gICAgICBfRlBfSV9UWVBFIGRpZmYgPSBYIyNfZSAtIFkjI19lOwkJCQkJICAgICBcCi0JCQkJCQkJCQkgICAgIFwKLSAgICAgIGlmIChkaWZmIDwgMCkJCQkJCQkJICAgICBcCi0JewkJCQkJCQkJICAgICBcCi0JICBkaWZmID0gLWRpZmY7CQkJCQkJCSAgICAgXAotCSAgaWYgKGRpZmYgPD0gX0ZQX1dGUkFDQklUU18jI2ZzKQkJCQkgICAgIFwKLQkgICAgX0ZQX0ZSQUNfU1JTXyMjd2MoWCwgZGlmZiwgX0ZQX1dGUkFDQklUU18jI2ZzKTsJCSAgICAgXAotCSAgZWxzZSBpZiAoIV9GUF9GUkFDX1pFUk9QXyMjd2MoWCkpCQkJCSAgICAgXAotCSAgICBfRlBfRlJBQ19TRVRfIyN3YyhYLCBfRlBfTUlORlJBQ18jI3djKTsJCQkgICAgIFwKLQkgIGVsc2UJCQkJCQkJCSAgICAgXAotCSAgICBfRlBfRlJBQ19TRVRfIyN3YyhYLCBfRlBfWkVST0ZSQUNfIyN3Yyk7CQkJICAgICBcCi0JICBSIyNfZSA9IFkjI19lOwkJCQkJCSAgICAgXAotCX0JCQkJCQkJCSAgICAgXAotICAgICAgZWxzZQkJCQkJCQkJICAgICBcCi0JewkJCQkJCQkJICAgICBcCi0JICBpZiAoZGlmZiA+IDApCQkJCQkJCSAgICAgXAotCSAgICB7CQkJCQkJCQkgICAgIFwKLQkgICAgICBpZiAoZGlmZiA8PSBfRlBfV0ZSQUNCSVRTXyMjZnMpCQkJCSAgICAgXAotCSAgICAgICAgX0ZQX0ZSQUNfU1JTXyMjd2MoWSwgZGlmZiwgX0ZQX1dGUkFDQklUU18jI2ZzKTsJCSAgICAgXAotCSAgICAgIGVsc2UgaWYgKCFfRlBfRlJBQ19aRVJPUF8jI3djKFkpKQkJCQkgICAgIFwKLQkgICAgICAgIF9GUF9GUkFDX1NFVF8jI3djKFksIF9GUF9NSU5GUkFDXyMjd2MpOwkJCSAgICAgXAotCSAgICAgIGVsc2UJCQkJCQkJICAgICBcCi0JICAgICAgICBfRlBfRlJBQ19TRVRfIyN3YyhZLCBfRlBfWkVST0ZSQUNfIyN3Yyk7CQkgICAgIFwKLQkgICAgfQkJCQkJCQkJICAgICBcCi0JICBSIyNfZSA9IFgjI19lOwkJCQkJCSAgICAgXAotCX0JCQkJCQkJCSAgICAgXAotCQkJCQkJCQkJICAgICBcCi0gICAgICBSIyNfYyA9IEZQX0NMU19OT1JNQUw7CQkJCQkJICAgICBcCi0JCQkJCQkJCQkgICAgIFwKLSAgICAgIGlmIChYIyNfcyA9PSBZIyNfcykJCQkJCQkgICAgIFwKLQl7CQkJCQkJCQkgICAgIFwKLQkgIFIjI19zID0gWCMjX3M7CQkJCQkJICAgICBcCi0JICBfRlBfRlJBQ19BRERfIyN3YyhSLCBYLCBZKTsJCQkJCSAgICAgXAotCSAgaWYgKF9GUF9GUkFDX09WRVJQXyMjd2MoZnMsIFIpKQkJCQkgICAgIFwKLQkgICAgewkJCQkJCQkJICAgICBcCi0JICAgICAgX0ZQX0ZSQUNfU1JTXyMjd2MoUiwgMSwgX0ZQX1dGUkFDQklUU18jI2ZzKTsJCSAgICAgXAotCSAgICAgIFIjI19lKys7CQkJCQkJCSAgICAgXAotCSAgICB9CQkJCQkJCQkgICAgIFwKLQl9CQkJCQkJCQkgICAgIFwKLSAgICAgIGVsc2UJCQkJCQkJCSAgICAgXAotCXsJCQkJCQkJCSAgICAgXAotCSAgUiMjX3MgPSBYIyNfczsJCQkJCQkgICAgIFwKLQkgIF9GUF9GUkFDX1NVQl8jI3djKFIsIFgsIFkpOwkJCQkJICAgICBcCi0JICBpZiAoX0ZQX0ZSQUNfWkVST1BfIyN3YyhSKSkJCQkJCSAgICAgXAotCSAgICB7CQkJCQkJCQkgICAgIFwKLQkgICAgICAvKiByZXR1cm4gYW4gZXhhY3QgemVybyAqLwkJCQkgICAgIFwKLQkgICAgICBpZiAoRlBfUk9VTkRNT0RFID09IEZQX1JORF9NSU5GKQkJCQkgICAgIFwKLQkJUiMjX3MgfD0gWSMjX3M7CQkJCQkJICAgICBcCi0JICAgICAgZWxzZQkJCQkJCQkgICAgIFwKLQkJUiMjX3MgJj0gWSMjX3M7CQkJCQkJICAgICBcCi0JICAgICAgUiMjX2MgPSBGUF9DTFNfWkVSTzsJCQkJCSAgICAgXAotCSAgICB9CQkJCQkJCQkgICAgIFwKLQkgIGVsc2UJCQkJCQkJCSAgICAgXAotCSAgICB7CQkJCQkJCQkgICAgIFwKLQkgICAgICBpZiAoX0ZQX0ZSQUNfTkVHUF8jI3djKFIpKQkJCQkgICAgIFwKLQkJewkJCQkJCQkgICAgIFwKLQkJICBfRlBfRlJBQ19TVUJfIyN3YyhSLCBZLCBYKTsJCQkJICAgICBcCi0JCSAgUiMjX3MgPSBZIyNfczsJCQkJCSAgICAgXAotCQl9CQkJCQkJCSAgICAgXAotCQkJCQkJCQkJICAgICBcCi0JICAgICAgLyogcmVub3JtYWxpemUgYWZ0ZXIgc3VidHJhY3Rpb24gKi8JCQkgICAgIFwKLQkgICAgICBfRlBfRlJBQ19DTFpfIyN3YyhkaWZmLCBSKTsJCQkJICAgICBcCi0JICAgICAgZGlmZiAtPSBfRlBfV0ZSQUNYQklUU18jI2ZzOwkJCQkgICAgIFwKLQkgICAgICBpZiAoZGlmZikJCQkJCQkJICAgICBcCi0JCXsJCQkJCQkJICAgICBcCi0JCSAgUiMjX2UgLT0gZGlmZjsJCQkJCSAgICAgXAotCQkgIF9GUF9GUkFDX1NMTF8jI3djKFIsIGRpZmYpOwkJCQkgICAgIFwKLQkJfQkJCQkJCQkgICAgIFwKLQkgICAgfQkJCQkJCQkJICAgICBcCi0JfQkJCQkJCQkJICAgICBcCi0gICAgICBicmVhazsJCQkJCQkJCSAgICAgXAotICAgIH0JCQkJCQkJCQkgICAgIFwKLQkJCQkJCQkJCSAgICAgXAotICBjYXNlIF9GUF9DTFNfQ09NQklORShGUF9DTFNfTkFOLEZQX0NMU19OQU4pOgkJCQkgICAgIFwKLSAgICBfRlBfQ0hPT1NFTkFOKGZzLCB3YywgUiwgWCwgWSk7CQkJCQkgICAgIFwKLSAgICBicmVhazsJCQkJCQkJCSAgICAgXAotCQkJCQkJCQkJICAgICBcCi0gIGNhc2UgX0ZQX0NMU19DT01CSU5FKEZQX0NMU19OT1JNQUwsRlBfQ0xTX1pFUk8pOgkJCSAgICAgXAotICAgIFIjI19lID0gWCMjX2U7CQkJCQkJCSAgICAgXAotICBjYXNlIF9GUF9DTFNfQ09NQklORShGUF9DTFNfTkFOLEZQX0NMU19OT1JNQUwpOgkJCSAgICAgXAotICBjYXNlIF9GUF9DTFNfQ09NQklORShGUF9DTFNfTkFOLEZQX0NMU19JTkYpOgkJCQkgICAgIFwKLSAgY2FzZSBfRlBfQ0xTX0NPTUJJTkUoRlBfQ0xTX05BTixGUF9DTFNfWkVSTyk6CQkJCSAgICAgXAotICAgIF9GUF9GUkFDX0NPUFlfIyN3YyhSLCBYKTsJCQkJCQkgICAgIFwKLSAgICBSIyNfcyA9IFgjI19zOwkJCQkJCQkgICAgIFwKLSAgICBSIyNfYyA9IFgjI19jOwkJCQkJCQkgICAgIFwKLSAgICBicmVhazsJCQkJCQkJCSAgICAgXAotCQkJCQkJCQkJICAgICBcCi0gIGNhc2UgX0ZQX0NMU19DT01CSU5FKEZQX0NMU19aRVJPLEZQX0NMU19OT1JNQUwpOgkJCSAgICAgXAotICAgIFIjI19lID0gWSMjX2U7CQkJCQkJCSAgICAgXAotICBjYXNlIF9GUF9DTFNfQ09NQklORShGUF9DTFNfTk9STUFMLEZQX0NMU19OQU4pOgkJCSAgICAgXAotICBjYXNlIF9GUF9DTFNfQ09NQklORShGUF9DTFNfSU5GLEZQX0NMU19OQU4pOgkJCQkgICAgIFwKLSAgY2FzZSBfRlBfQ0xTX0NPTUJJTkUoRlBfQ0xTX1pFUk8sRlBfQ0xTX05BTik6CQkJCSAgICAgXAotICAgIF9GUF9GUkFDX0NPUFlfIyN3YyhSLCBZKTsJCQkJCQkgICAgIFwKLSAgICBSIyNfcyA9IFkjI19zOwkJCQkJCQkgICAgIFwKLSAgICBSIyNfYyA9IFkjI19jOwkJCQkJCQkgICAgIFwKLSAgICBicmVhazsJCQkJCQkJCSAgICAgXAotCQkJCQkJCQkJICAgICBcCi0gIGNhc2UgX0ZQX0NMU19DT01CSU5FKEZQX0NMU19JTkYsRlBfQ0xTX0lORik6CQkJCSAgICAgXAotICAgIGlmIChYIyNfcyAhPSBZIyNfcykJCQkJCQkJICAgICBcCi0gICAgICB7CQkJCQkJCQkJICAgICBcCi0JLyogK0lORiArIC1JTkYgPT4gTkFOICovCQkJCQkgICAgIFwKLQlfRlBfRlJBQ19TRVRfIyN3YyhSLCBfRlBfTkFORlJBQ18jI2ZzKTsJCQkJICAgICBcCi0JUiMjX3MgPSBYIyNfcyBeIFkjI19zOwkJCQkJCSAgICAgXAotCVIjI19jID0gRlBfQ0xTX05BTjsJCQkJCQkgICAgIFwKLQlicmVhazsJCQkJCQkJCSAgICAgXAotICAgICAgfQkJCQkJCQkJCSAgICAgXAotICAgIC8qIEZBTExUSFJVICovCQkJCQkJCSAgICAgXAotCQkJCQkJCQkJICAgICBcCi0gIGNhc2UgX0ZQX0NMU19DT01CSU5FKEZQX0NMU19JTkYsRlBfQ0xTX05PUk1BTCk6CQkJICAgICBcCi0gIGNhc2UgX0ZQX0NMU19DT01CSU5FKEZQX0NMU19JTkYsRlBfQ0xTX1pFUk8pOgkJCQkgICAgIFwKLSAgICBSIyNfcyA9IFgjI19zOwkJCQkJCQkgICAgIFwKLSAgICBSIyNfYyA9IEZQX0NMU19JTkY7CQkJCQkJCSAgICAgXAotICAgIGJyZWFrOwkJCQkJCQkJICAgICBcCi0JCQkJCQkJCQkgICAgIFwKLSAgY2FzZSBfRlBfQ0xTX0NPTUJJTkUoRlBfQ0xTX05PUk1BTCxGUF9DTFNfSU5GKToJCQkgICAgIFwKLSAgY2FzZSBfRlBfQ0xTX0NPTUJJTkUoRlBfQ0xTX1pFUk8sRlBfQ0xTX0lORik6CQkJCSAgICAgXAotICAgIFIjI19zID0gWSMjX3M7CQkJCQkJCSAgICAgXAotICAgIFIjI19jID0gRlBfQ0xTX0lORjsJCQkJCQkJICAgICBcCi0gICAgYnJlYWs7CQkJCQkJCQkgICAgIFwKLQkJCQkJCQkJCSAgICAgXAotICBjYXNlIF9GUF9DTFNfQ09NQklORShGUF9DTFNfWkVSTyxGUF9DTFNfWkVSTyk6CQkJICAgICBcCi0gICAgLyogbWFrZSBzdXJlIHRoZSBzaWduIGlzIGNvcnJlY3QgKi8JCQkJCSAgICAgXAotICAgIGlmIChGUF9ST1VORE1PREUgPT0gRlBfUk5EX01JTkYpCQkJCQkgICAgIFwKLSAgICAgIFIjI19zID0gWCMjX3MgfCBZIyNfczsJCQkJCQkgICAgIFwKLSAgICBlbHNlCQkJCQkJCQkgICAgIFwKLSAgICAgIFIjI19zID0gWCMjX3MgJiBZIyNfczsJCQkJCQkgICAgIFwKLSAgICBSIyNfYyA9IEZQX0NMU19aRVJPOwkJCQkJCSAgICAgXAotICAgIGJyZWFrOwkJCQkJCQkJICAgICBcCi0JCQkJCQkJCQkgICAgIFwKLSAgZGVmYXVsdDoJCQkJCQkJCSAgICAgXAotICAgIGFib3J0KCk7CQkJCQkJCQkgICAgIFwKLSAgfQkJCQkJCQkJCSAgICAgXAotfSB3aGlsZSAoMCkKLQotCi0vKgotICogTWFpbiBuZWdhdGlvbiByb3V0aW5lLiAgRklYTUUgLS0gd2hlbiB3ZSBjYXJlIGFib3V0IHNldHRpbmcgZXhjZXB0aW9uCi0gKiBiaXRzIHJlbGlhYmx5LCB0aGlzIHdpbGwgbm90IGRvLiAgV2Ugc2hvdWxkIGV4YW1pbmUgYWxsIG9mIHRoZSBmcCBjbGFzc2VzLgotICovCi0KLSNkZWZpbmUgX0ZQX05FRyhmcywgd2MsIFIsIFgpCQlcCi0gIGRvIHsJCQkJCVwKLSAgICBfRlBfRlJBQ19DT1BZXyMjd2MoUiwgWCk7CQlcCi0gICAgUiMjX2MgPSBYIyNfYzsJCQlcCi0gICAgUiMjX2UgPSBYIyNfZTsJCQlcCi0gICAgUiMjX3MgPSAxIF4gWCMjX3M7CQkJXAotICB9IHdoaWxlICgwKQotCi0KLS8qCi0gKiBNYWluIG11bHRpcGxpY2F0aW9uIHJvdXRpbmUuICBUaGUgaW5wdXQgdmFsdWVzIHNob3VsZCBiZSBjb29rZWQuCi0gKi8KLQotI2RlZmluZSBfRlBfTVVMKGZzLCB3YywgUiwgWCwgWSkJCQlcCi1kbyB7CQkJCQkJCVwKLSAgUiMjX3MgPSBYIyNfcyBeIFkjI19zOwkJCQlcCi0gIHN3aXRjaCAoX0ZQX0NMU19DT01CSU5FKFgjI19jLCBZIyNfYykpCQlcCi0gIHsJCQkJCQkJXAotICBjYXNlIF9GUF9DTFNfQ09NQklORShGUF9DTFNfTk9STUFMLEZQX0NMU19OT1JNQUwpOglcCi0gICAgUiMjX2MgPSBGUF9DTFNfTk9STUFMOwkJCQlcCi0gICAgUiMjX2UgPSBYIyNfZSArIFkjI19lICsgMTsJCQkJXAotCQkJCQkJCVwKLSAgICBfRlBfTVVMX01FQVRfIyNmcyhSLFgsWSk7CQkJCVwKLQkJCQkJCQlcCi0gICAgaWYgKF9GUF9GUkFDX09WRVJQXyMjd2MoZnMsIFIpKQkJCVwKLSAgICAgIF9GUF9GUkFDX1NSU18jI3djKFIsIDEsIF9GUF9XRlJBQ0JJVFNfIyNmcyk7CVwKLSAgICBlbHNlCQkJCQkJXAotICAgICAgUiMjX2UtLTsJCQkJCQlcCi0gICAgYnJlYWs7CQkJCQkJXAotCQkJCQkJCVwKLSAgY2FzZSBfRlBfQ0xTX0NPTUJJTkUoRlBfQ0xTX05BTixGUF9DTFNfTkFOKToJCVwKLSAgICBfRlBfQ0hPT1NFTkFOKGZzLCB3YywgUiwgWCwgWSk7CQkJXAotICAgIGJyZWFrOwkJCQkJCVwKLQkJCQkJCQlcCi0gIGNhc2UgX0ZQX0NMU19DT01CSU5FKEZQX0NMU19OQU4sRlBfQ0xTX05PUk1BTCk6CVwKLSAgY2FzZSBfRlBfQ0xTX0NPTUJJTkUoRlBfQ0xTX05BTixGUF9DTFNfSU5GKToJCVwKLSAgY2FzZSBfRlBfQ0xTX0NPTUJJTkUoRlBfQ0xTX05BTixGUF9DTFNfWkVSTyk6CQlcCi0gICAgUiMjX3MgPSBYIyNfczsJCQkJCVwKLQkJCQkJCQlcCi0gIGNhc2UgX0ZQX0NMU19DT01CSU5FKEZQX0NMU19JTkYsRlBfQ0xTX0lORik6CQlcCi0gIGNhc2UgX0ZQX0NMU19DT01CSU5FKEZQX0NMU19JTkYsRlBfQ0xTX05PUk1BTCk6CVwKLSAgY2FzZSBfRlBfQ0xTX0NPTUJJTkUoRlBfQ0xTX1pFUk8sRlBfQ0xTX05PUk1BTCk6CVwKLSAgY2FzZSBfRlBfQ0xTX0NPTUJJTkUoRlBfQ0xTX1pFUk8sRlBfQ0xTX1pFUk8pOglcCi0gICAgX0ZQX0ZSQUNfQ09QWV8jI3djKFIsIFgpOwkJCQlcCi0gICAgUiMjX2MgPSBYIyNfYzsJCQkJCVwKLSAgICBicmVhazsJCQkJCQlcCi0JCQkJCQkJXAotICBjYXNlIF9GUF9DTFNfQ09NQklORShGUF9DTFNfTk9STUFMLEZQX0NMU19OQU4pOglcCi0gIGNhc2UgX0ZQX0NMU19DT01CSU5FKEZQX0NMU19JTkYsRlBfQ0xTX05BTik6CQlcCi0gIGNhc2UgX0ZQX0NMU19DT01CSU5FKEZQX0NMU19aRVJPLEZQX0NMU19OQU4pOgkJXAotICAgIFIjI19zID0gWSMjX3M7CQkJCQlcCi0JCQkJCQkJXAotICBjYXNlIF9GUF9DTFNfQ09NQklORShGUF9DTFNfTk9STUFMLEZQX0NMU19JTkYpOglcCi0gIGNhc2UgX0ZQX0NMU19DT01CSU5FKEZQX0NMU19OT1JNQUwsRlBfQ0xTX1pFUk8pOglcCi0gICAgX0ZQX0ZSQUNfQ09QWV8jI3djKFIsIFkpOwkJCQlcCi0gICAgUiMjX2MgPSBZIyNfYzsJCQkJCVwKLSAgICBicmVhazsJCQkJCQlcCi0JCQkJCQkJXAotICBjYXNlIF9GUF9DTFNfQ09NQklORShGUF9DTFNfSU5GLEZQX0NMU19aRVJPKToJCVwKLSAgY2FzZSBfRlBfQ0xTX0NPTUJJTkUoRlBfQ0xTX1pFUk8sRlBfQ0xTX0lORik6CQlcCi0gICAgUiMjX2MgPSBGUF9DTFNfTkFOOwkJCQkJXAotICAgIF9GUF9GUkFDX1NFVF8jI3djKFIsIF9GUF9OQU5GUkFDXyMjZnMpOwkJXAotICAgIGJyZWFrOwkJCQkJCVwKLQkJCQkJCQlcCi0gIGRlZmF1bHQ6CQkJCQkJXAotICAgIGFib3J0KCk7CQkJCQkJXAotICB9CQkJCQkJCVwKLX0gd2hpbGUgKDApCi0KLQotLyoKLSAqIE1haW4gZGl2aXNpb24gcm91dGluZS4gIFRoZSBpbnB1dCB2YWx1ZXMgc2hvdWxkIGJlIGNvb2tlZC4KLSAqLwotCi0jZGVmaW5lIF9GUF9ESVYoZnMsIHdjLCBSLCBYLCBZKQkJCVwKLWRvIHsJCQkJCQkJXAotICBSIyNfcyA9IFgjI19zIF4gWSMjX3M7CQkJCVwKLSAgc3dpdGNoIChfRlBfQ0xTX0NPTUJJTkUoWCMjX2MsIFkjI19jKSkJCVwKLSAgewkJCQkJCQlcCi0gIGNhc2UgX0ZQX0NMU19DT01CSU5FKEZQX0NMU19OT1JNQUwsRlBfQ0xTX05PUk1BTCk6CVwKLSAgICBSIyNfYyA9IEZQX0NMU19OT1JNQUw7CQkJCVwKLSAgICBSIyNfZSA9IFgjI19lIC0gWSMjX2U7CQkJCVwKLQkJCQkJCQlcCi0gICAgX0ZQX0RJVl9NRUFUXyMjZnMoUixYLFkpOwkJCQlcCi0gICAgYnJlYWs7CQkJCQkJXAotCQkJCQkJCVwKLSAgY2FzZSBfRlBfQ0xTX0NPTUJJTkUoRlBfQ0xTX05BTixGUF9DTFNfTkFOKToJCVwKLSAgICBfRlBfQ0hPT1NFTkFOKGZzLCB3YywgUiwgWCwgWSk7CQkJXAotICAgIGJyZWFrOwkJCQkJCVwKLQkJCQkJCQlcCi0gIGNhc2UgX0ZQX0NMU19DT01CSU5FKEZQX0NMU19OQU4sRlBfQ0xTX05PUk1BTCk6CVwKLSAgY2FzZSBfRlBfQ0xTX0NPTUJJTkUoRlBfQ0xTX05BTixGUF9DTFNfSU5GKToJCVwKLSAgY2FzZSBfRlBfQ0xTX0NPTUJJTkUoRlBfQ0xTX05BTixGUF9DTFNfWkVSTyk6CQlcCi0gICAgUiMjX3MgPSBYIyNfczsJCQkJCVwKLSAgICBfRlBfRlJBQ19DT1BZXyMjd2MoUiwgWCk7CQkJCVwKLSAgICBSIyNfYyA9IFgjI19jOwkJCQkJXAotICAgIGJyZWFrOwkJCQkJCVwKLQkJCQkJCQlcCi0gIGNhc2UgX0ZQX0NMU19DT01CSU5FKEZQX0NMU19OT1JNQUwsRlBfQ0xTX05BTik6CVwKLSAgY2FzZSBfRlBfQ0xTX0NPTUJJTkUoRlBfQ0xTX0lORixGUF9DTFNfTkFOKToJCVwKLSAgY2FzZSBfRlBfQ0xTX0NPTUJJTkUoRlBfQ0xTX1pFUk8sRlBfQ0xTX05BTik6CQlcCi0gICAgUiMjX3MgPSBZIyNfczsJCQkJCVwKLSAgICBfRlBfRlJBQ19DT1BZXyMjd2MoUiwgWSk7CQkJCVwKLSAgICBSIyNfYyA9IFkjI19jOwkJCQkJXAotICAgIGJyZWFrOwkJCQkJCVwKLQkJCQkJCQlcCi0gIGNhc2UgX0ZQX0NMU19DT01CSU5FKEZQX0NMU19OT1JNQUwsRlBfQ0xTX0lORik6CVwKLSAgY2FzZSBfRlBfQ0xTX0NPTUJJTkUoRlBfQ0xTX1pFUk8sRlBfQ0xTX0lORik6CQlcCi0gIGNhc2UgX0ZQX0NMU19DT01CSU5FKEZQX0NMU19aRVJPLEZQX0NMU19OT1JNQUwpOglcCi0gICAgUiMjX2MgPSBGUF9DTFNfWkVSTzsJCQkJXAotICAgIGJyZWFrOwkJCQkJCVwKLQkJCQkJCQlcCi0gIGNhc2UgX0ZQX0NMU19DT01CSU5FKEZQX0NMU19OT1JNQUwsRlBfQ0xTX1pFUk8pOglcCi0gIGNhc2UgX0ZQX0NMU19DT01CSU5FKEZQX0NMU19JTkYsRlBfQ0xTX1pFUk8pOgkJXAotICBjYXNlIF9GUF9DTFNfQ09NQklORShGUF9DTFNfSU5GLEZQX0NMU19OT1JNQUwpOglcCi0gICAgUiMjX2MgPSBGUF9DTFNfSU5GOwkJCQkJXAotICAgIGJyZWFrOwkJCQkJCVwKLQkJCQkJCQlcCi0gIGNhc2UgX0ZQX0NMU19DT01CSU5FKEZQX0NMU19JTkYsRlBfQ0xTX0lORik6CQlcCi0gIGNhc2UgX0ZQX0NMU19DT01CSU5FKEZQX0NMU19aRVJPLEZQX0NMU19aRVJPKToJXAotICAgIFIjI19jID0gRlBfQ0xTX05BTjsJCQkJCVwKLSAgICBfRlBfRlJBQ19TRVRfIyN3YyhSLCBfRlBfTkFORlJBQ18jI2ZzKTsJCVwKLSAgICBicmVhazsJCQkJCQlcCi0JCQkJCQkJXAotICBkZWZhdWx0OgkJCQkJCVwKLSAgICBhYm9ydCgpOwkJCQkJCVwKLSAgfQkJCQkJCQlcCi19IHdoaWxlICgwKQotCi0KLS8qCi0gKiBNYWluIGRpZmZlcmVudGlhbCBjb21wYXJpc29uIHJvdXRpbmUuICBUaGUgaW5wdXRzIHNob3VsZCBiZSByYXcgbm90Ci0gKiBjb29rZWQuICBUaGUgcmV0dXJuIGlzIC0xLDAsMSBmb3Igbm9ybWFsIHZhbHVlcywgMiBvdGhlcndpc2UuCi0gKi8KLQotI2RlZmluZSBfRlBfQ01QKGZzLCB3YywgcmV0LCBYLCBZLCB1bikJCQkJCVwKLSAgZG8gewkJCQkJCQkJCVwKLSAgICAvKiBOQU5zIGFyZSB1bm9yZGVyZWQgKi8JCQkJCQlcCi0gICAgaWYgKChYIyNfZSA9PSBfRlBfRVhQTUFYXyMjZnMgJiYgIV9GUF9GUkFDX1pFUk9QXyMjd2MoWCkpCQlcCi0JfHwgKFkjI19lID09IF9GUF9FWFBNQVhfIyNmcyAmJiAhX0ZQX0ZSQUNfWkVST1BfIyN3YyhZKSkpCVwKLSAgICAgIHsJCQkJCQkJCQlcCi0JcmV0ID0gdW47CQkJCQkJCVwKLSAgICAgIH0JCQkJCQkJCQlcCi0gICAgZWxzZQkJCQkJCQkJXAotICAgICAgewkJCQkJCQkJCVwKLSAgICAgICAgaW50IF9feF96ZXJvID0gKCFYIyNfZSAmJiBfRlBfRlJBQ19aRVJPUF8jI3djKFgpKSA/IDEgOiAwOwlcCi0gICAgICAgIGludCBfX3lfemVybyA9ICghWSMjX2UgJiYgX0ZQX0ZSQUNfWkVST1BfIyN3YyhZKSkgPyAxIDogMDsJXAotCQkJCQkJCQkJXAotCWlmIChfX3hfemVybyAmJiBfX3lfemVybykJCQkJCVwKLQkgIHJldCA9IDA7CQkJCQkJCVwKLQllbHNlIGlmIChfX3hfemVybykJCQkJCQlcCi0JICByZXQgPSBZIyNfcyA/IDEgOiAtMTsJCQkJCQlcCi0JZWxzZSBpZiAoX195X3plcm8pCQkJCQkJXAotCSAgcmV0ID0gWCMjX3MgPyAtMSA6IDE7CQkJCQkJXAotCWVsc2UgaWYgKFgjI19zICE9IFkjI19zKQkJCQkJXAotCSAgcmV0ID0gWCMjX3MgPyAtMSA6IDE7CQkJCQkJXAotCWVsc2UgaWYgKFgjI19lID4gWSMjX2UpCQkJCQkJXAotCSAgcmV0ID0gWCMjX3MgPyAtMSA6IDE7CQkJCQkJXAotCWVsc2UgaWYgKFgjI19lIDwgWSMjX2UpCQkJCQkJXAotCSAgcmV0ID0gWCMjX3MgPyAxIDogLTE7CQkJCQkJXAotCWVsc2UgaWYgKF9GUF9GUkFDX0dUXyMjd2MoWCwgWSkpCQkJCVwKLQkgIHJldCA9IFgjI19zID8gLTEgOiAxOwkJCQkJCVwKLQllbHNlIGlmIChfRlBfRlJBQ19HVF8jI3djKFksIFgpKQkJCQlcCi0JICByZXQgPSBYIyNfcyA/IDEgOiAtMTsJCQkJCQlcCi0JZWxzZQkJCQkJCQkJXAotCSAgcmV0ID0gMDsJCQkJCQkJXAotICAgICAgfQkJCQkJCQkJCVwKLSAgfSB3aGlsZSAoMCkKLQotCi0vKiBTaW1wbGlmaWNhdGlvbiBmb3Igc3RyaWN0IGVxdWFsaXR5LiAgKi8KLQotI2RlZmluZSBfRlBfQ01QX0VRKGZzLCB3YywgcmV0LCBYLCBZKQkJCQkJICBcCi0gIGRvIHsJCQkJCQkJCQkgIFwKLSAgICAvKiBOQU5zIGFyZSB1bm9yZGVyZWQgKi8JCQkJCQkgIFwKLSAgICBpZiAoKFgjI19lID09IF9GUF9FWFBNQVhfIyNmcyAmJiAhX0ZQX0ZSQUNfWkVST1BfIyN3YyhYKSkJCSAgXAotCXx8IChZIyNfZSA9PSBfRlBfRVhQTUFYXyMjZnMgJiYgIV9GUF9GUkFDX1pFUk9QXyMjd2MoWSkpKQkgIFwKLSAgICAgIHsJCQkJCQkJCQkgIFwKLQlyZXQgPSAxOwkJCQkJCQkgIFwKLSAgICAgIH0JCQkJCQkJCQkgIFwKLSAgICBlbHNlCQkJCQkJCQkgIFwKLSAgICAgIHsJCQkJCQkJCQkgIFwKLQlyZXQgPSAhKFgjI19lID09IFkjI19lCQkJCQkJICBcCi0JCSYmIF9GUF9GUkFDX0VRXyMjd2MoWCwgWSkJCQkJICBcCi0JCSYmIChYIyNfcyA9PSBZIyNfcyB8fCAhWCMjX2UgJiYgX0ZQX0ZSQUNfWkVST1BfIyN3YyhYKSkpOyBcCi0gICAgICB9CQkJCQkJCQkJICBcCi0gIH0gd2hpbGUgKDApCi0KLS8qCi0gKiBNYWluIHNxdWFyZSByb290IHJvdXRpbmUuICBUaGUgaW5wdXQgdmFsdWUgc2hvdWxkIGJlIGNvb2tlZC4KLSAqLwotCi0jZGVmaW5lIF9GUF9TUVJUKGZzLCB3YywgUiwgWCkJCQkJCQlcCi1kbyB7CQkJCQkJCQkJXAotICAgIF9GUF9GUkFDX0RFQ0xfIyN3YyhUKTsgX0ZQX0ZSQUNfREVDTF8jI3djKFMpOwkJCVwKLSAgICBfRlBfV19UWVBFIHE7CQkJCQkJCVwKLSAgICBzd2l0Y2ggKFgjI19jKQkJCQkJCQlcCi0gICAgewkJCQkJCQkJCVwKLSAgICBjYXNlIEZQX0NMU19OQU46CQkJCQkJCVwKLSAgICAJUiMjX3MgPSAwOwkJCQkJCQlcCi0gICAgCVIjI19jID0gRlBfQ0xTX05BTjsJCQkJCQlcCi0gICAgCV9GUF9GUkFDX1NFVF8jI3djKFgsIF9GUF9aRVJPRlJBQ18jI3djKTsJCQlcCi0gICAgCWJyZWFrOwkJCQkJCQkJXAotICAgIGNhc2UgRlBfQ0xTX0lORjoJCQkJCQkJXAotICAgIAlpZiAoWCMjX3MpCQkJCQkJCVwKLSAgICAJICB7CQkJCQkJCQlcCi0gICAgCSAgICBSIyNfcyA9IDA7CQkJCQkJCVwKLQkgICAgUiMjX2MgPSBGUF9DTFNfTkFOOyAvKiBzTkFOICovCQkJCVwKLSAgICAJICB9CQkJCQkJCQlcCi0gICAgCWVsc2UJCQkJCQkJCVwKLSAgICAJICB7CQkJCQkJCQlcCi0gICAgCSAgICBSIyNfcyA9IDA7CQkJCQkJCVwKLSAgICAJICAgIFIjI19jID0gRlBfQ0xTX0lORjsgLyogc3FydCgraW5mKSA9ICtpbmYgKi8JCQlcCi0gICAgCSAgfQkJCQkJCQkJXAotICAgIAlicmVhazsJCQkJCQkJCVwKLSAgICBjYXNlIEZQX0NMU19aRVJPOgkJCQkJCQlcCi0JUiMjX3MgPSBYIyNfczsJCQkJCQkJXAotICAgIAlSIyNfYyA9IEZQX0NMU19aRVJPOyAvKiBzcXJ0KCstMCkgPSArLTAgKi8JCQlcCi0JYnJlYWs7CQkJCQkJCQlcCi0gICAgY2FzZSBGUF9DTFNfTk9STUFMOgkJCQkJCQlcCi0gICAgCVIjI19zID0gMDsJCQkJCQkJXAotICAgICAgICBpZiAoWCMjX3MpCQkJCQkJCVwKLSAgICAgICAgICB7CQkJCQkJCQlcCi0JICAgIFIjI19jID0gRlBfQ0xTX05BTjsgLyogc05BTiAqLwkJCQlcCi0JICAgIGJyZWFrOwkJCQkJCQlcCi0gICAgICAgICAgfQkJCQkJCQkJXAotICAgIAlSIyNfYyA9IEZQX0NMU19OT1JNQUw7CQkJCQkJXAotICAgICAgICBpZiAoWCMjX2UgJiAxKQkJCQkJCQlcCi0gICAgICAgICAgX0ZQX0ZSQUNfU0xMXyMjd2MoWCwgMSk7CQkJCQlcCi0gICAgICAgIFIjI19lID0gWCMjX2UgPj4gMTsJCQkJCQlcCi0gICAgICAgIF9GUF9GUkFDX1NFVF8jI3djKFMsIF9GUF9aRVJPRlJBQ18jI3djKTsJCQlcCi0gICAgICAgIF9GUF9GUkFDX1NFVF8jI3djKFIsIF9GUF9aRVJPRlJBQ18jI3djKTsJCQlcCi0gICAgICAgIHEgPSBfRlBfT1ZFUkZMT1dfIyNmczsJCQkJCQlcCi0gICAgICAgIF9GUF9GUkFDX1NMTF8jI3djKFgsIDEpOwkJCQkJXAotICAgICAgICBfRlBfU1FSVF9NRUFUXyMjd2MoUiwgUywgVCwgWCwgcSk7CQkJCVwKLSAgICAgICAgX0ZQX0ZSQUNfU1JMXyMjd2MoUiwgMSk7CQkJCQlcCi0gICAgfQkJCQkJCQkJCVwKLSAgfSB3aGlsZSAoMCkKLQotLyoKLSAqIENvbnZlcnQgZnJvbSBGUCB0byBpbnRlZ2VyCi0gKi8KLQotLyogIldoZW4gYSBOYU4sIGluZmluaXR5LCBsYXJnZSBwb3NpdGl2ZSBhcmd1bWVudCA+PSAyMTQ3NDgzNjQ4LjAsIG9yCi0gKiBsYXJnZSBuZWdhdGl2ZSBhcmd1bWVudCA8PSAtMjE0NzQ4MzY0OS4wIGlzIGNvbnZlcnRlZCB0byBhbiBpbnRlZ2VyLAotICogdGhlIGludmFsaWRfY3VycmVudCBiaXQuLi5zaG91bGQgYmUgc2V0IGFuZCBmcF9leGNlcHRpb25fSUVFRV83NTQgc2hvdWxkCi0gKiBiZSByYWlzZWQuIElmIHRoZSBmbG9hdGluZyBwb2ludCBpbnZhbGlkIHRyYXAgaXMgZGlzYWJsZWQsIG5vIHRyYXAgb2NjdXJzCi0gKiBhbmQgYSBudW1lcmljYWwgcmVzdWx0IGlzIGdlbmVyYXRlZDogaWYgdGhlIHNpZ24gYml0IG9mIHRoZSBvcGVyYW5kCi0gKiBpcyAwLCB0aGUgcmVzdWx0IGlzIDIxNDc0ODM2NDc7IGlmIHRoZSBzaWduIGJpdCBvZiB0aGUgb3BlcmFuZCBpcyAxLAotICogdGhlIHJlc3VsdCBpcyAtMjE0NzQ4MzY0OC4iCi0gKiBTaW1pbGFybHkgZm9yIGNvbnZlcnNpb24gdG8gZXh0ZW5kZWQgaW50cywgZXhjZXB0IHRoYXQgdGhlIGJvdW5kYXJpZXMKLSAqIGFyZSA+PSAyXjYzLCA8PSAtKDJeNjMgKyAxKSwgYW5kIHRoZSByZXN1bHRzIGFyZSAyXjYzICsgMSBmb3Igcz0wIGFuZAotICogLTJeNjMgZm9yIHM9MS4KLSAqIC0tIFNQQVJDIEFyY2hpdGVjdHVyZSBNYW51YWwgVjksIEFwcGVuZGl4IEIsIHdoaWNoIHNwZWNpZmllcyBob3cKLSAqIFNQQVJDcyByZXNvbHZlIGltcGxlbWVudGF0aW9uIGRlcGVuZGVuY2llcyBpbiB0aGUgSUVFRS03NTQgc3BlYy4KLSAqIEkgZG9uJ3QgYmVsaWV2ZSB0aGF0IHRoZSBjb2RlIGJlbG93IGZvbGxvd3MgdGhpcy4gSSdtIG5vdCBldmVuIHN1cmUKLSAqIGl0J3MgcmlnaHQhCi0gKiBJdCBkb2Vzbid0IGNvcGUgd2l0aCBuZWVkaW5nIHRvIGNvbnZlcnQgdG8gYW4gbiBiaXQgaW50ZWdlciB3aGVuIHRoZXJlCi0gKiBpcyBubyBuIGJpdCBpbnRlZ2VyIHR5cGUuIEZvcnR1bmF0ZWx5IGdjYyBwcm92aWRlcyBsb25nIGxvbmcgc28gdGhpcwotICogaXNuJ3QgYSBwcm9ibGVtIGZvciBzcGFyYzMyLgotICogSSBoYXZlLCBob3dldmVyLCBmaXhlZCBpdHMgTmFOIGhhbmRsaW5nIHRvIGNvbmZvcm0gYXMgYWJvdmUuCi0gKiAgICAgICAgIC0tIFBNTSAwMi8xOTk4Ci0gKiBOQjogcnNpZ25lZCBpcyBub3QgJ2lzIHIgZGVjbGFyZWQgc2lnbmVkPycgYnV0ICdzaG91bGQgdGhlIHZhbHVlIHN0b3JlZAotICogaW4gciBiZSBzaWduZWQgb3IgdW5zaWduZWQ/Jy4gciBpcyBhbHdheXMoPykgZGVjbGFyZWQgdW5zaWduZWQuCi0gKiBDb21tZW50cyBiZWxvdyBhcmUgbWluZSwgQlRXIC0tIFBNTQotICovCi0jZGVmaW5lIF9GUF9UT19JTlQoZnMsIHdjLCByLCBYLCByc2l6ZSwgcnNpZ25lZCkJCQlcCi0gIGRvIHsJCQkJCQkJCQlcCi0gICAgc3dpdGNoIChYIyNfYykJCQkJCQkJXAotICAgICAgewkJCQkJCQkJCVwKLSAgICAgIGNhc2UgRlBfQ0xTX05PUk1BTDoJCQkJCQlcCi0JaWYgKFgjI19lIDwgMCkJCQkJCQkJXAotCSAgewkJCQkJCQkJXAotCSAgLyogY2FzZSBGUF9DTFNfTkFOOiBzZWUgYWJvdmUhICovCQkJCVwKLQkgIGNhc2UgRlBfQ0xTX1pFUk86CQkJCQkJXAotCSAgICByID0gMDsJCQkJCQkJXAotCSAgfQkJCQkJCQkJXAotCWVsc2UgaWYgKFgjI19lID49IHJzaXplIC0gKHJzaWduZWQgIT0gMCkpCQkJXAotCSAgewkvKiBvdmVyZmxvdyAqLwkJCQkJCVwKLQkgIGNhc2UgRlBfQ0xTX05BTjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgIGNhc2UgRlBfQ0xTX0lORjoJCQkJCQlcCi0JICAgIGlmIChyc2lnbmVkKQkJCQkJCVwKLQkgICAgICB7CQkJCQkJCQlcCi0JCXIgPSAxOwkJCQkJCQlcCi0JCXIgPDw9IHJzaXplIC0gMTsJCQkJCVwKLQkJciAtPSAxIC0gWCMjX3M7CQkJCQkJXAotCSAgICAgIH0JCQkJCQkJCVwKLQkgICAgZWxzZQkJCQkJCQlcCi0JICAgICAgewkJCQkJCQkJXAotCQlyID0gMDsJCQkJCQkJXAotCQlpZiAoIVgjI19zKQkJCQkJCVwKLQkJICByID0gfnI7CQkJCQkJXAotCSAgICAgIH0JCQkJCQkJCVwKLQkgIH0JCQkJCQkJCVwKLQllbHNlCQkJCQkJCQlcCi0JICB7CQkJCQkJCQlcCi0JICAgIGlmIChfRlBfV19UWVBFX1NJWkUqd2MgPCByc2l6ZSkJCQkJXAotCSAgICAgIHsJCQkJCQkJCVwKLQkJX0ZQX0ZSQUNfQVNTRU1CTEVfIyN3YyhyLCBYLCByc2l6ZSk7CQkJXAotCQlyIDw8PSBYIyNfZSAtIF9GUF9XRlJBQ0JJVFNfIyNmczsJCQlcCi0JICAgICAgfQkJCQkJCQkJXAotCSAgICBlbHNlCQkJCQkJCVwKLQkgICAgICB7CQkJCQkJCQlcCi0JCWlmIChYIyNfZSA+PSBfRlBfV0ZSQUNCSVRTXyMjZnMpCQkJXAotCQkgIF9GUF9GUkFDX1NMTF8jI3djKFgsIChYIyNfZSAtIF9GUF9XRlJBQ0JJVFNfIyNmcyArIDEpKTtcCi0JCWVsc2UJCQkJCQkJXAotCQkgIF9GUF9GUkFDX1NSTF8jI3djKFgsIChfRlBfV0ZSQUNCSVRTXyMjZnMgLSBYIyNfZSAtIDEpKTtcCi0JCV9GUF9GUkFDX0FTU0VNQkxFXyMjd2MociwgWCwgcnNpemUpOwkJCVwKLQkgICAgICB9CQkJCQkJCQlcCi0JICAgIGlmIChyc2lnbmVkICYmIFgjI19zKQkJCQkJXAotCSAgICAgIHIgPSAtcjsJCQkJCQkJXAotCSAgfQkJCQkJCQkJXAotCWJyZWFrOwkJCQkJCQkJXAotICAgICAgfQkJCQkJCQkJCVwKLSAgfSB3aGlsZSAoMCkKLQotI2RlZmluZSBfRlBfRlJPTV9JTlQoZnMsIHdjLCBYLCByLCByc2l6ZSwgcnR5cGUpCQkJXAotICBkbyB7CQkJCQkJCQkJXAotICAgIGlmIChyKQkJCQkJCQkJXAotICAgICAgewkJCQkJCQkJCVwKLQlYIyNfYyA9IEZQX0NMU19OT1JNQUw7CQkJCQkJXAotCQkJCQkJCQkJXAotCWlmICgoWCMjX3MgPSAociA8IDApKSkJCQkJCQlcCi0JICByID0gLXI7CQkJCQkJCVwKLQkvKiBOb3RlIHRoYXQgYHInIGlzIG5vdyBjb25zaWRlcmVkIHVuc2lnbmVkLCBzbyB3ZSBkb24ndCBoYXZlCVwKLQkgICB0byB3b3JyeSBhYm91dCB0aGUgc2luZ2xlIHNpZ25lZCBvdmVyZmxvdyBjYXNlLiAgKi8JCVwKLQkJCQkJCQkJCVwKLQlpZiAocnNpemUgPD0gX0ZQX1dfVFlQRV9TSVpFKQkJCQkJXAotCSAgX19GUF9DTFooWCMjX2UsIHIpOwkJCQkJCVwKLQllbHNlCQkJCQkJCQlcCi0JICBfX0ZQX0NMWl8yKFgjI19lLCAoX0ZQX1dfVFlQRSkociA+PiBfRlBfV19UWVBFX1NJWkUpLCAJXAotCQkgICAgIChfRlBfV19UWVBFKXIpOwkJCQkJXAotCWlmIChyc2l6ZSA8IF9GUF9XX1RZUEVfU0laRSkJCQkJCVwKLQkJWCMjX2UgLT0gKF9GUF9XX1RZUEVfU0laRSAtIHJzaXplKTsJCQlcCi0JWCMjX2UgPSByc2l6ZSAtIFgjI19lIC0gMTsJCQkJCVwKLQkJCQkJCQkJCVwKLQlpZiAoX0ZQX0ZSQUNCSVRTXyMjZnMgPCByc2l6ZSAmJiBfRlBfV0ZSQUNCSVRTXyMjZnMgPCBYIyNfZSkJXAotCSAgX19GUF9GUkFDX1NSU18xKHIsIChYIyNfZSAtIF9GUF9XRlJBQ0JJVFNfIyNmcyksIHJzaXplKTsJXAotCXIgJj0gfigoX0ZQX1dfVFlQRSkxIDw8IFgjI19lKTsJCQkJCVwKLQlfRlBfRlJBQ19ESVNBU1NFTUJMRV8jI3djKFgsICgodW5zaWduZWQgcnR5cGUpciksIHJzaXplKTsJXAotCV9GUF9GUkFDX1NMTF8jI3djKFgsIChfRlBfV0ZSQUNCSVRTXyMjZnMgLSBYIyNfZSAtIDEpKTsJCVwKLSAgICAgIH0JCQkJCQkJCQlcCi0gICAgZWxzZQkJCQkJCQkJXAotICAgICAgewkJCQkJCQkJCVwKLQlYIyNfYyA9IEZQX0NMU19aRVJPLCBYIyNfcyA9IDA7CQkJCQlcCi0gICAgICB9CQkJCQkJCQkJXAotICB9IHdoaWxlICgwKQotCi0KLSNkZWZpbmUgRlBfQ09OVihkZnMsc2ZzLGR3Yyxzd2MsRCxTKQkJCVwKLSAgZG8gewkJCQkJCQlcCi0gICAgX0ZQX0ZSQUNfQ09OVl8jI2R3YyMjXyMjc3djKGRmcywgc2ZzLCBELCBTKTsJXAotICAgIEQjI19lID0gUyMjX2U7CQkJCQlcCi0gICAgRCMjX2MgPSBTIyNfYzsJCQkJCVwKLSAgICBEIyNfcyA9IFMjI19zOwkJCQkJXAotICB9IHdoaWxlICgwKQotCi0vKgotICogSGVscGVyIHByaW1pdGl2ZXMuCi0gKi8KLQotLyogQ291bnQgbGVhZGluZyB6ZXJvcyBpbiBhIHdvcmQuICAqLwotCi0jaWZuZGVmIF9fRlBfQ0xaCi0jaWYgX0ZQX1dfVFlQRV9TSVpFIDwgNjQKLS8qIHRoaXMgaXMganVzdCB0byBzaHV0IHRoZSBjb21waWxlciB1cCBhYm91dCBzaGlmdHMgPiB3b3JkIGxlbmd0aCAtLSBQTU0gMDIvMTk5OCAqLwotI2RlZmluZSBfX0ZQX0NMWihyLCB4KQkJCQlcCi0gIGRvIHsJCQkJCQlcCi0gICAgX0ZQX1dfVFlQRSBfdCA9ICh4KTsJCQlcCi0gICAgciA9IF9GUF9XX1RZUEVfU0laRSAtIDE7CQkJXAotICAgIGlmIChfdCA+IDB4ZmZmZikgciAtPSAxNjsJCQlcCi0gICAgaWYgKF90ID4gMHhmZmZmKSBfdCA+Pj0gMTY7CQkJXAotICAgIGlmIChfdCA+IDB4ZmYpIHIgLT0gODsJCQlcCi0gICAgaWYgKF90ID4gMHhmZikgX3QgPj49IDg7CQkJXAotICAgIGlmIChfdCAmIDB4ZjApIHIgLT0gNDsJCQlcCi0gICAgaWYgKF90ICYgMHhmMCkgX3QgPj49IDQ7CQkJXAotICAgIGlmIChfdCAmIDB4YykgciAtPSAyOwkJCVwKLSAgICBpZiAoX3QgJiAweGMpIF90ID4+PSAyOwkJCVwKLSAgICBpZiAoX3QgJiAweDIpIHIgLT0gMTsJCQlcCi0gIH0gd2hpbGUgKDApCi0jZWxzZSAvKiBub3QgX0ZQX1dfVFlQRV9TSVpFIDwgNjQgKi8KLSNkZWZpbmUgX19GUF9DTFoociwgeCkJCQkJXAotICBkbyB7CQkJCQkJXAotICAgIF9GUF9XX1RZUEUgX3QgPSAoeCk7CQkJXAotICAgIHIgPSBfRlBfV19UWVBFX1NJWkUgLSAxOwkJCVwKLSAgICBpZiAoX3QgPiAweGZmZmZmZmZmKSByIC09IDMyOwkJXAotICAgIGlmIChfdCA+IDB4ZmZmZmZmZmYpIF90ID4+PSAzMjsJCVwKLSAgICBpZiAoX3QgPiAweGZmZmYpIHIgLT0gMTY7CQkJXAotICAgIGlmIChfdCA+IDB4ZmZmZikgX3QgPj49IDE2OwkJCVwKLSAgICBpZiAoX3QgPiAweGZmKSByIC09IDg7CQkJXAotICAgIGlmIChfdCA+IDB4ZmYpIF90ID4+PSA4OwkJCVwKLSAgICBpZiAoX3QgJiAweGYwKSByIC09IDQ7CQkJXAotICAgIGlmIChfdCAmIDB4ZjApIF90ID4+PSA0OwkJCVwKLSAgICBpZiAoX3QgJiAweGMpIHIgLT0gMjsJCQlcCi0gICAgaWYgKF90ICYgMHhjKSBfdCA+Pj0gMjsJCQlcCi0gICAgaWYgKF90ICYgMHgyKSByIC09IDE7CQkJXAotICB9IHdoaWxlICgwKQotI2VuZGlmIC8qIG5vdCBfRlBfV19UWVBFX1NJWkUgPCA2NCAqLwotI2VuZGlmIC8qIG5kZWYgX19GUF9DTFogKi8KLQotI2RlZmluZSBfRlBfRElWX0hFTFBfaW1tKHEsIHIsIG4sIGQpCQlcCi0gIGRvIHsJCQkJCQlcCi0gICAgcSA9IG4gLyBkLCByID0gbiAlIGQ7CQkJXAotICB9IHdoaWxlICgwKQotCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbWF0aC1lbXUvc2ZwLW1hY2hpbmUuaCBiL2FyY2gvcG93ZXJwYy9tYXRoLWVtdS9zZnAtbWFjaGluZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YjE3ZDgzLi4wMDAwMDAwCi0tLSBhL2FyY2gvcG93ZXJwYy9tYXRoLWVtdS9zZnAtbWFjaGluZS5oCisrKyAvZGV2L251bGwKQEAgLTEsMzc3ICswLDAgQEAKLS8qIE1hY2hpbmUtZGVwZW5kZW50IHNvZnR3YXJlIGZsb2F0aW5nLXBvaW50IGRlZmluaXRpb25zLiAgUFBDIHZlcnNpb24uCi0gICBDb3B5cmlnaHQgKEMpIDE5OTcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi0gICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIEMgTGlicmFyeS4KLQotICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCi0gICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUKLSAgIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0KLSAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCi0gICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgQyBMaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZgotICAgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICAgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KLQotICAgQWN0dWFsbHksIHRoaXMgaXMgYSBQUEMgKDMyYml0KSB2ZXJzaW9uLCB3cml0dGVuIGJhc2VkIG9uIHRoZQotICAgaTM4Niwgc3BhcmMsIGFuZCBzcGFyYzY0IHZlcnNpb25zLCBieSBtZSwKLSAgIFBldGVyIE1heWRlbGwgKHBtYXlkZWxsQGNoaWFyay5ncmVlbmVuZC5vcmcudWspLgotICAgQ29tbWVudHMgYXJlIGJ5IGFuZCBsYXJnZSBhbHNvIG1pbmUsIGFsdGhvdWdoIHRoZXkgbWF5IGJlIGluYWNjdXJhdGUuCi0KLSAgIEluIHBpY2tpbmcgb3V0IGFzbSBmcmFnbWVudHMgSSd2ZSBnb25lIHdpdGggdGhlIGxvd2VzdCBjb21tb24KLSAgIGRlbm9taW5hdG9yLCB3aGljaCBhbHNvIGhhcHBlbnMgdG8gYmUgdGhlIGhhcmR3YXJlIEkgaGF2ZSA6LT4KLSAgIFRoYXQgaXMsIGEgU1BBUkMgd2l0aG91dCBoYXJkd2FyZSBtdWx0aXBseSBhbmQgZGl2aWRlLgotICovCi0KLS8qIGJhc2ljIHdvcmQgc2l6ZSBkZWZpbml0aW9ucyAqLwotI2RlZmluZSBfRlBfV19UWVBFX1NJWkUJCTMyCi0jZGVmaW5lIF9GUF9XX1RZUEUJCXVuc2lnbmVkIGxvbmcKLSNkZWZpbmUgX0ZQX1dTX1RZUEUJCXNpZ25lZCBsb25nCi0jZGVmaW5lIF9GUF9JX1RZUEUJCWxvbmcKLQotI2RlZmluZSBfX2xsX0IJCQkoKFVXdHlwZSkgMSA8PCAoV19UWVBFX1NJWkUgLyAyKSkKLSNkZWZpbmUgX19sbF9sb3dwYXJ0KHQpCQkoKFVXdHlwZSkgKHQpICYgKF9fbGxfQiAtIDEpKQotI2RlZmluZSBfX2xsX2hpZ2hwYXJ0KHQpCSgoVVd0eXBlKSAodCkgPj4gKFdfVFlQRV9TSVpFIC8gMikpCi0KLS8qIFlvdSBjYW4gb3B0aW9uYWxseSBjb2RlIHNvbWUgdGhpbmdzIGxpa2UgYWRkaXRpb24gaW4gYXNtLiBGb3IKLSAqIGV4YW1wbGUsIGkzODYgZGVmaW5lcyBfX0ZQX0ZSQUNfQUREXzIgYXMgYXNtLiBJZiB5b3UgZG9uJ3QKLSAqIHRoZW4geW91IGdldCBhIGZyYWdtZW50IG9mIEMgY29kZSBbaWYgeW91IGNoYW5nZSBhbiAjaWZkZWYgMAotICogaW4gb3AtMi5oXSBvciBhIGNhbGwgdG8gYWRkX3NzYWFhYSAoc2VlIGJlbG93KS4KLSAqIEdvb2QgcGxhY2VzIHRvIGxvb2sgZm9yIGFzbSBmcmFnbWVudHMgdG8gdXNlIGFyZSBnY2MgYW5kIGdsaWJjLgotICogZ2NjJ3MgbG9uZ2xvbmcuaCBpcyB1c2VmdWwuCi0gKi8KLQotLyogV2UgbmVlZCB0byBrbm93IGhvdyB0byBtdWx0aXBseSBhbmQgZGl2aWRlLiBJZiB0aGUgaG9zdCB3b3JkIHNpemUKLSAqIGlzID49IDIqZnJhY2JpdHMgeW91IGNhbiB1c2UgRlBfTVVMX01FQVRfbl9pbW0odCxSLFgsWSkgd2hpY2gKLSAqIGNvZGVzIHRoZSBtdWx0aXBseSB3aXRoIHdoYXRldmVyIGdjYyBkb2VzIHRvICdhICogYicuCi0gKiBfRlBfTVVMX01FQVRfbl93aWRlKHQsUixYLFksZikgaXMgdXNlZCB3aGVuIHlvdSBoYXZlIGFuIGFzbQotICogZnVuY3Rpb24gdGhhdCBjYW4gbXVsdGlwbHkgdHdvIDFXIHZhbHVlcyBhbmQgZ2V0IGEgMlcgcmVzdWx0LgotICogT3RoZXJ3aXNlIHlvdSdyZSBzdHVjayB3aXRoIF9GUF9NVUxfTUVBVF9uX2hhcmQodCxSLFgsWSkgd2hpY2gKLSAqIGRvZXMgYml0c2hpZnRpbmcgdG8gYXZvaWQgb3ZlcmZsb3cuCi0gKiBGb3IgZGl2aXNpb24gdGhlcmUgaXMgRlBfRElWX01FQVRfbl9pbW0odCxSLFgsWSxmKSBmb3Igd29yZCBzaXplCi0gKiA+PSAyKmZyYWNiaXRzLCB3aGVyZSBmIGlzIGVpdGhlciBfRlBfRElWX0hFTFBfaW1tIG9yCi0gKiBfRlBfRElWX0hFTFBfbGRpdiAoc2VlIG9wLTEuaCkuCi0gKiBfRlBfRElWX01FQVRfdWRpdigpIGlzIGlmIHlvdSBoYXZlIGFzbSB0byBkbyAyVy8xVyA9PiAoMVcsIDFXKS4KLSAqIFtHQ0MgYW5kIGdsaWJjIGhhdmUgbG9uZ2xvbmcuaCB3aGljaCBoYXMgdGhlIGFzbSBtYWNybyB1ZGl2X3Fybm5kCi0gKiB0byBkbyB0aGlzLl0KLSAqIEluIGdlbmVyYWwsICduJyBpcyB0aGUgbnVtYmVyIG9mIHdvcmRzIHJlcXVpcmVkIHRvIGhvbGQgdGhlIHR5cGUsCi0gKiBhbmQgJ3QnIGlzIGVpdGhlciBTLCBEIG9yIFEgZm9yIHNpbmdsZS9kb3VibGUvcXVhZC4KLSAqICAgICAgICAgICAtLSBQTU0KLSAqLwotLyogRXhhbXBsZTogU1BBUkM2NDoKLSAqICNkZWZpbmUgX0ZQX01VTF9NRUFUX1MoUixYLFkpCV9GUF9NVUxfTUVBVF8xX2ltbShTLFIsWCxZKQotICogI2RlZmluZSBfRlBfTVVMX01FQVRfRChSLFgsWSkJX0ZQX01VTF9NRUFUXzFfd2lkZShELFIsWCxZLHVtdWxfcHBtbSkKLSAqICNkZWZpbmUgX0ZQX01VTF9NRUFUX1EoUixYLFkpCV9GUF9NVUxfTUVBVF8yX3dpZGUoUSxSLFgsWSx1bXVsX3BwbW0pCi0gKgotICogI2RlZmluZSBfRlBfRElWX01FQVRfUyhSLFgsWSkJX0ZQX0RJVl9NRUFUXzFfaW1tKFMsUixYLFksX0ZQX0RJVl9IRUxQX2ltbSkKLSAqICNkZWZpbmUgX0ZQX0RJVl9NRUFUX0QoUixYLFkpCV9GUF9ESVZfTUVBVF8xX3VkaXYoRCxSLFgsWSkKLSAqICNkZWZpbmUgX0ZQX0RJVl9NRUFUX1EoUixYLFkpCV9GUF9ESVZfTUVBVF8yX3VkaXZfNjQoUSxSLFgsWSkKLSAqCi0gKiBFeGFtcGxlOiBpMzg2OgotICogI2RlZmluZSBfRlBfTVVMX01FQVRfUyhSLFgsWSkgICBfRlBfTVVMX01FQVRfMV93aWRlKFMsUixYLFksX2kzODZfbXVsXzMyXzY0KQotICogI2RlZmluZSBfRlBfTVVMX01FQVRfRChSLFgsWSkgICBfRlBfTVVMX01FQVRfMl93aWRlKEQsUixYLFksX2kzODZfbXVsXzMyXzY0KQotICoKLSAqICNkZWZpbmUgX0ZQX0RJVl9NRUFUX1MoUixYLFkpICAgX0ZQX0RJVl9NRUFUXzFfdWRpdihTLFIsWCxZLF9pMzg2X2Rpdl82NF8zMikKLSAqICNkZWZpbmUgX0ZQX0RJVl9NRUFUX0QoUixYLFkpICAgX0ZQX0RJVl9NRUFUXzJfdWRpdl82NChELFIsWCxZKQotICovCi0KLSNkZWZpbmUgX0ZQX01VTF9NRUFUX1MoUixYLFkpICAgX0ZQX01VTF9NRUFUXzFfd2lkZShTLFIsWCxZLHVtdWxfcHBtbSkKLSNkZWZpbmUgX0ZQX01VTF9NRUFUX0QoUixYLFkpICAgX0ZQX01VTF9NRUFUXzJfd2lkZShELFIsWCxZLHVtdWxfcHBtbSkKLQotI2RlZmluZSBfRlBfRElWX01FQVRfUyhSLFgsWSkgICBfRlBfRElWX01FQVRfMV91ZGl2KFMsUixYLFkpCi0jZGVmaW5lIF9GUF9ESVZfTUVBVF9EKFIsWCxZKSAgIF9GUF9ESVZfTUVBVF8yX3VkaXZfNjQoRCxSLFgsWSkKLQotLyogVGhlc2UgbWFjcm9zIGRlZmluZSB3aGF0IE5hTiBsb29rcyBsaWtlLiBUaGV5J3JlIHN1cHBvc2VkIHRvIGV4cGFuZCB0bwotICogYSBjb21tYS1zZXBhcmF0ZWQgc2V0IG9mIDMyYml0IHVuc2lnbmVkIGludHMgdGhhdCBlbmNvZGUgTmFOLgotICovCi0jZGVmaW5lIF9GUF9OQU5GUkFDX1MJCV9GUF9RTkFOQklUX1MKLSNkZWZpbmUgX0ZQX05BTkZSQUNfRAkJX0ZQX1FOQU5CSVRfRCwgMAotI2RlZmluZSBfRlBfTkFORlJBQ19RICAgICAgICAgICBfRlBfUU5BTkJJVF9RLCAwLCAwLCAwCi0KLSNkZWZpbmUgX0ZQX0tFRVBOQU5GUkFDUCAxCi0KLS8qIFRoaXMgbWFjcm8gYXBwZWFycyB0byBiZSBjYWxsZWQgd2hlbiBib3RoIFggYW5kIFkgYXJlIE5hTnMsIGFuZAotICogaGFzIHRvIGNob29zZSBvbmUgYW5kIGNvcHkgaXQgdG8gUi4gaTM4NiBnb2VzIGZvciB0aGUgbGFyZ2VyIG9mIHRoZQotICogdHdvLCBzcGFyYzY0IGp1c3QgcGlja3MgWS4gSSBkb24ndCB1bmRlcnN0YW5kIHRoaXMgYXQgYWxsIHNvIEknbGwKLSAqIGdvIHdpdGggc3BhcmM2NCBiZWNhdXNlIGl0J3Mgc2hvcnRlciA6LT4gICAtLSBQTU0KLSAqLwotI2RlZmluZSBfRlBfQ0hPT1NFTkFOKGZzLCB3YywgUiwgWCwgWSkJCQlcCi0gIGRvIHsJCQkJCQkJXAotICAgIFIjI19zID0gWSMjX3M7CQkJCQlcCi0gICAgX0ZQX0ZSQUNfQ09QWV8jI3djKFIsWSk7CQkJCVwKLSAgICBSIyNfYyA9IEZQX0NMU19OQU47CQkJCQlcCi0gIH0gd2hpbGUgKDApCi0KLQotZXh0ZXJuIHZvaWQgZnBfdW5wYWNrX2QobG9uZyAqLCB1bnNpZ25lZCBsb25nICosIHVuc2lnbmVkIGxvbmcgKiwKLQkJCWxvbmcgKiwgbG9uZyAqLCB2b2lkICopOwotZXh0ZXJuIGludCAgZnBfcGFja19kKHZvaWQgKiwgbG9uZywgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZywgbG9uZywgbG9uZyk7Ci1leHRlcm4gaW50ICBmcF9wYWNrX2RzKHZvaWQgKiwgbG9uZywgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZywgbG9uZywgbG9uZyk7Ci0KLSNkZWZpbmUgX19GUF9VTlBBQ0tfUkFXXzEoZnMsIFgsIHZhbCkJCQlcCi0gIGRvIHsJCQkJCQkJXAotICAgIHVuaW9uIF9GUF9VTklPTl8jI2ZzICpfZmxvID0JCQlcCi0gICAgCSh1bmlvbiBfRlBfVU5JT05fIyNmcyAqKXZhbDsJCQlcCi0JCQkJCQkJXAotICAgIFgjI19mID0gX2Zsby0+Yml0cy5mcmFjOwkJCQlcCi0gICAgWCMjX2UgPSBfZmxvLT5iaXRzLmV4cDsJCQkJXAotICAgIFgjI19zID0gX2Zsby0+Yml0cy5zaWduOwkJCQlcCi0gIH0gd2hpbGUgKDApCi0KLSNkZWZpbmUgX19GUF9VTlBBQ0tfUkFXXzIoZnMsIFgsIHZhbCkJCQlcCi0gIGRvIHsJCQkJCQkJXAotICAgIHVuaW9uIF9GUF9VTklPTl8jI2ZzICpfZmxvID0JCQlcCi0gICAgCSh1bmlvbiBfRlBfVU5JT05fIyNmcyAqKXZhbDsJCQlcCi0JCQkJCQkJXAotICAgIFgjI19mMCA9IF9mbG8tPmJpdHMuZnJhYzA7CQkJCVwKLSAgICBYIyNfZjEgPSBfZmxvLT5iaXRzLmZyYWMxOwkJCQlcCi0gICAgWCMjX2UgID0gX2Zsby0+Yml0cy5leHA7CQkJCVwKLSAgICBYIyNfcyAgPSBfZmxvLT5iaXRzLnNpZ247CQkJCVwKLSAgfSB3aGlsZSAoMCkKLQotI2RlZmluZSBfX0ZQX1VOUEFDS19TKFgsdmFsKQkJXAotICBkbyB7CQkJCQlcCi0gICAgX19GUF9VTlBBQ0tfUkFXXzEoUyxYLHZhbCk7CQlcCi0gICAgX0ZQX1VOUEFDS19DQU5PTklDQUwoUywxLFgpOwlcCi0gIH0gd2hpbGUgKDApCi0KLSNkZWZpbmUgX19GUF9VTlBBQ0tfRChYLHZhbCkJCVwKLQlmcF91bnBhY2tfZCgmWCMjX3MsICZYIyNfZjEsICZYIyNfZjAsICZYIyNfZSwgJlgjI19jLCB2YWwpCi0KLSNkZWZpbmUgX19GUF9QQUNLX1JBV18xKGZzLCB2YWwsIFgpCQkJXAotICBkbyB7CQkJCQkJCVwKLSAgICB1bmlvbiBfRlBfVU5JT05fIyNmcyAqX2ZsbyA9CQkJXAotICAgIAkodW5pb24gX0ZQX1VOSU9OXyMjZnMgKil2YWw7CQkJXAotCQkJCQkJCVwKLSAgICBfZmxvLT5iaXRzLmZyYWMgPSBYIyNfZjsJCQkJXAotICAgIF9mbG8tPmJpdHMuZXhwICA9IFgjI19lOwkJCQlcCi0gICAgX2Zsby0+Yml0cy5zaWduID0gWCMjX3M7CQkJCVwKLSAgfSB3aGlsZSAoMCkKLQotI2RlZmluZSBfX0ZQX1BBQ0tfUkFXXzIoZnMsIHZhbCwgWCkJCQlcCi0gIGRvIHsJCQkJCQkJXAotICAgIHVuaW9uIF9GUF9VTklPTl8jI2ZzICpfZmxvID0JCQlcCi0gICAgCSh1bmlvbiBfRlBfVU5JT05fIyNmcyAqKXZhbDsJCQlcCi0JCQkJCQkJXAotICAgIF9mbG8tPmJpdHMuZnJhYzAgPSBYIyNfZjA7CQkJCVwKLSAgICBfZmxvLT5iaXRzLmZyYWMxID0gWCMjX2YxOwkJCQlcCi0gICAgX2Zsby0+Yml0cy5leHAgICA9IFgjI19lOwkJCQlcCi0gICAgX2Zsby0+Yml0cy5zaWduICA9IFgjI19zOwkJCQlcCi0gIH0gd2hpbGUgKDApCi0KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgotCi0jZGVmaW5lIF9fRlBVX0ZQU0NSCShjdXJyZW50LT50aHJlYWQuZnBzY3IudmFsKQotCi0vKiBXZSBvbmx5IGFjdHVhbGx5IHdyaXRlIHRvIHRoZSBkZXN0aW5hdGlvbiByZWdpc3RlcgotICogaWYgZXhjZXB0aW9ucyBzaWduYWxsZWQgKGlmIGFueSkgd2lsbCBub3QgdHJhcC4KLSAqLwotI2RlZmluZSBfX0ZQVV9FTkFCTEVEX0VYQyBcCi0oewkJCQkJCVwKLQkoX19GUFVfRlBTQ1IgPj4gMykgJiAweDFmOwlcCi19KQotCi0jZGVmaW5lIF9fRlBVX1RSQVBfUChiaXRzKSBcCi0JKChfX0ZQVV9FTkFCTEVEX0VYQyAmIChiaXRzKSkgIT0gMCkKLQotI2RlZmluZSBfX0ZQX1BBQ0tfUyh2YWwsWCkJCQlcCi0oeyAgaW50IF9fZXhjID0gX0ZQX1BBQ0tfQ0FOT05JQ0FMKFMsMSxYKTsJXAotICAgIGlmKCFfX2V4YyB8fCAhX19GUFVfVFJBUF9QKF9fZXhjKSkJCVwKLSAgICAgICAgX19GUF9QQUNLX1JBV18xKFMsdmFsLFgpOwkJXAotICAgIF9fZXhjOwkJCQkJXAotfSkKLQotI2RlZmluZSBfX0ZQX1BBQ0tfRCh2YWwsWCkJCQlcCi0JZnBfcGFja19kKHZhbCwgWCMjX3MsIFgjI19mMSwgWCMjX2YwLCBYIyNfZSwgWCMjX2MpCi0KLSNkZWZpbmUgX19GUF9QQUNLX0RTKHZhbCxYKQkJCVwKLQlmcF9wYWNrX2RzKHZhbCwgWCMjX3MsIFgjI19mMSwgWCMjX2YwLCBYIyNfZSwgWCMjX2MpCi0KLS8qIE9idGFpbiB0aGUgY3VycmVudCByb3VuZGluZyBtb2RlLiAqLwotI2RlZmluZSBGUF9ST1VORE1PREUJCQlcCi0oewkJCQkJXAotCV9fRlBVX0ZQU0NSICYgMHgzOwkJXAotfSkKLQotLyogdGhlIGFzbSBmcmFnbWVudHMgZ28gaGVyZTogYWxsIHRoZXNlIGFyZSB0YWtlbiBmcm9tIGdsaWJjLTIuMC41J3MKLSAqIHN0ZGxpYi9sb25nbG9uZy5oCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgotCi0vKiBhZGRfc3NhYWFhIGlzIHVzZWQgaW4gb3AtMi5oIGFuZCBzaG91bGQgYmUgZXF1aXZhbGVudCB0bwotICogI2RlZmluZSBhZGRfc3NhYWFhKHNoLHNsLGFoLGFsLGJoLGJsKSAoc2ggPSBhaCtiaCsgKCggc2wgPSBhbCtibCkgPCBhbCkpCi0gKiBhZGRfc3NhYWFhKGhpZ2hfc3VtLCBsb3dfc3VtLCBoaWdoX2FkZGVuZF8xLCBsb3dfYWRkZW5kXzEsCi0gKiBoaWdoX2FkZGVuZF8yLCBsb3dfYWRkZW5kXzIpIGFkZHMgdHdvIFVXdHlwZSBpbnRlZ2VycywgY29tcG9zZWQgYnkKLSAqIEhJR0hfQURERU5EXzEgYW5kIExPV19BRERFTkRfMSwgYW5kIEhJR0hfQURERU5EXzIgYW5kIExPV19BRERFTkRfMgotICogcmVzcGVjdGl2ZWx5LiAgVGhlIHJlc3VsdCBpcyBwbGFjZWQgaW4gSElHSF9TVU0gYW5kIExPV19TVU0uICBPdmVyZmxvdwotICogKGkuZS4gY2Fycnkgb3V0KSBpcyBub3Qgc3RvcmVkIGFueXdoZXJlLCBhbmQgaXMgbG9zdC4KLSAqLwotI2RlZmluZSBhZGRfc3NhYWFhKHNoLCBzbCwgYWgsIGFsLCBiaCwgYmwpCQkJCVwKLSAgZG8gewkJCQkJCQkJCVwKLSAgICBpZiAoX19idWlsdGluX2NvbnN0YW50X3AgKGJoKSAmJiAoYmgpID09IDApCQkJCVwKLSAgICAgIF9fYXNtX18gKCJ7YSVJNHxhZGQlSTRjfSAlMSwlMywlNFxuXHR7YXplfGFkZHplfSAlMCwlMiIJCVwKLQkgICAgIDogIj1yIiAoKFVTSXR5cGUpKHNoKSksCQkJCQlcCi0JICAgICAgICI9JnIiICgoVVNJdHlwZSkoc2wpKQkJCQkJXAotCSAgICAgOiAiJXIiICgoVVNJdHlwZSkoYWgpKSwJCQkJCVwKLQkgICAgICAgIiVyIiAoKFVTSXR5cGUpKGFsKSksCQkJCQlcCi0JICAgICAgICJySSIgKChVU0l0eXBlKShibCkpKTsJCQkJCVwKLSAgICBlbHNlIGlmIChfX2J1aWx0aW5fY29uc3RhbnRfcCAoYmgpICYmIChiaCkgPT1+KFVTSXR5cGUpIDApCQlcCi0gICAgICBfX2FzbV9fICgie2ElSTR8YWRkJUk0Y30gJTEsJTMsJTRcblx0e2FtZXxhZGRtZX0gJTAsJTIiCQlcCi0JICAgICA6ICI9ciIgKChVU0l0eXBlKShzaCkpLAkJCQkJXAotCSAgICAgICAiPSZyIiAoKFVTSXR5cGUpKHNsKSkJCQkJCVwKLQkgICAgIDogIiVyIiAoKFVTSXR5cGUpKGFoKSksCQkJCQlcCi0JICAgICAgICIlciIgKChVU0l0eXBlKShhbCkpLAkJCQkJXAotCSAgICAgICAickkiICgoVVNJdHlwZSkoYmwpKSk7CQkJCQlcCi0gICAgZWxzZQkJCQkJCQkJXAotICAgICAgX19hc21fXyAoInthJUk1fGFkZCVJNWN9ICUxLCU0LCU1XG5cdHthZXxhZGRlfSAlMCwlMiwlMyIJCVwKLQkgICAgIDogIj1yIiAoKFVTSXR5cGUpKHNoKSksCQkJCQlcCi0JICAgICAgICI9JnIiICgoVVNJdHlwZSkoc2wpKQkJCQkJXAotCSAgICAgOiAiJXIiICgoVVNJdHlwZSkoYWgpKSwJCQkJCVwKLQkgICAgICAgInIiICgoVVNJdHlwZSkoYmgpKSwJCQkJCVwKLQkgICAgICAgIiVyIiAoKFVTSXR5cGUpKGFsKSksCQkJCQlcCi0JICAgICAgICJySSIgKChVU0l0eXBlKShibCkpKTsJCQkJCVwKLSAgfSB3aGlsZSAoMCkKLQotLyogc3ViX2RkbW1zcyBpcyB1c2VkIGluIG9wLTIuaCBhbmQgdWRpdm1vZHRpNC5jIGFuZCBzaG91bGQgYmUgZXF1aXZhbGVudCB0bwotICogI2RlZmluZSBzdWJfZGRtbXNzKHNoLCBzbCwgYWgsIGFsLCBiaCwgYmwpIChzaCA9IGFoLWJoIC0gKChzbCA9IGFsLWJsKSA+IGFsKSkKLSAqIHN1Yl9kZG1tc3MoaGlnaF9kaWZmZXJlbmNlLCBsb3dfZGlmZmVyZW5jZSwgaGlnaF9taW51ZW5kLCBsb3dfbWludWVuZCwKLSAqIGhpZ2hfc3VidHJhaGVuZCwgbG93X3N1YnRyYWhlbmQpIHN1YnRyYWN0cyB0d28gdHdvLXdvcmQgVVd0eXBlIGludGVnZXJzLAotICogY29tcG9zZWQgYnkgSElHSF9NSU5VRU5EXzEgYW5kIExPV19NSU5VRU5EXzEsIGFuZCBISUdIX1NVQlRSQUhFTkRfMiBhbmQKLSAqIExPV19TVUJUUkFIRU5EXzIgcmVzcGVjdGl2ZWx5LiAgVGhlIHJlc3VsdCBpcyBwbGFjZWQgaW4gSElHSF9ESUZGRVJFTkNFCi0gKiBhbmQgTE9XX0RJRkZFUkVOQ0UuICBPdmVyZmxvdyAoaS5lLiBjYXJyeSBvdXQpIGlzIG5vdCBzdG9yZWQgYW55d2hlcmUsCi0gKiBhbmQgaXMgbG9zdC4KLSAqLwotI2RlZmluZSBzdWJfZGRtbXNzKHNoLCBzbCwgYWgsIGFsLCBiaCwgYmwpCQkJCVwKLSAgZG8gewkJCQkJCQkJCVwKLSAgICBpZiAoX19idWlsdGluX2NvbnN0YW50X3AgKGFoKSAmJiAoYWgpID09IDApCQkJCVwKLSAgICAgIF9fYXNtX18gKCJ7c2YlSTN8c3ViZiVJM2N9ICUxLCU0LCUzXG5cdHtzZnplfHN1YmZ6ZX0gJTAsJTIiCVwKLQkgICAgICAgOiAiPXIiICgoVVNJdHlwZSkoc2gpKSwJCQkJCVwKLQkJICI9JnIiICgoVVNJdHlwZSkoc2wpKQkJCQkJXAotCSAgICAgICA6ICJyIiAoKFVTSXR5cGUpKGJoKSksCQkJCQlcCi0JCSAickkiICgoVVNJdHlwZSkoYWwpKSwJCQkJCVwKLQkJICJyIiAoKFVTSXR5cGUpKGJsKSkpOwkJCQkJXAotICAgIGVsc2UgaWYgKF9fYnVpbHRpbl9jb25zdGFudF9wIChhaCkgJiYgKGFoKSA9PX4oVVNJdHlwZSkgMCkJCVwKLSAgICAgIF9fYXNtX18gKCJ7c2YlSTN8c3ViZiVJM2N9ICUxLCU0LCUzXG5cdHtzZm1lfHN1YmZtZX0gJTAsJTIiCVwKLQkgICAgICAgOiAiPXIiICgoVVNJdHlwZSkoc2gpKSwJCQkJCVwKLQkJICI9JnIiICgoVVNJdHlwZSkoc2wpKQkJCQkJXAotCSAgICAgICA6ICJyIiAoKFVTSXR5cGUpKGJoKSksCQkJCQlcCi0JCSAickkiICgoVVNJdHlwZSkoYWwpKSwJCQkJCVwKLQkJICJyIiAoKFVTSXR5cGUpKGJsKSkpOwkJCQkJXAotICAgIGVsc2UgaWYgKF9fYnVpbHRpbl9jb25zdGFudF9wIChiaCkgJiYgKGJoKSA9PSAwKQkJCVwKLSAgICAgIF9fYXNtX18gKCJ7c2YlSTN8c3ViZiVJM2N9ICUxLCU0LCUzXG5cdHthbWV8YWRkbWV9ICUwLCUyIgkJXAotCSAgICAgICA6ICI9ciIgKChVU0l0eXBlKShzaCkpLAkJCQkJXAotCQkgIj0mciIgKChVU0l0eXBlKShzbCkpCQkJCQlcCi0JICAgICAgIDogInIiICgoVVNJdHlwZSkoYWgpKSwJCQkJCVwKLQkJICJySSIgKChVU0l0eXBlKShhbCkpLAkJCQkJXAotCQkgInIiICgoVVNJdHlwZSkoYmwpKSk7CQkJCQlcCi0gICAgZWxzZSBpZiAoX19idWlsdGluX2NvbnN0YW50X3AgKGJoKSAmJiAoYmgpID09fihVU0l0eXBlKSAwKQkJXAotICAgICAgX19hc21fXyAoIntzZiVJM3xzdWJmJUkzY30gJTEsJTQsJTNcblx0e2F6ZXxhZGR6ZX0gJTAsJTIiCQlcCi0JICAgICAgIDogIj1yIiAoKFVTSXR5cGUpKHNoKSksCQkJCQlcCi0JCSAiPSZyIiAoKFVTSXR5cGUpKHNsKSkJCQkJCVwKLQkgICAgICAgOiAiciIgKChVU0l0eXBlKShhaCkpLAkJCQkJXAotCQkgInJJIiAoKFVTSXR5cGUpKGFsKSksCQkJCQlcCi0JCSAiciIgKChVU0l0eXBlKShibCkpKTsJCQkJCVwKLSAgICBlbHNlCQkJCQkJCQlcCi0gICAgICBfX2FzbV9fICgie3NmJUk0fHN1YmYlSTRjfSAlMSwlNSwlNFxuXHR7c2ZlfHN1YmZlfSAlMCwlMywlMiIJXAotCSAgICAgICA6ICI9ciIgKChVU0l0eXBlKShzaCkpLAkJCQkJXAotCQkgIj0mciIgKChVU0l0eXBlKShzbCkpCQkJCQlcCi0JICAgICAgIDogInIiICgoVVNJdHlwZSkoYWgpKSwJCQkJCVwKLQkJICJyIiAoKFVTSXR5cGUpKGJoKSksCQkJCQlcCi0JCSAickkiICgoVVNJdHlwZSkoYWwpKSwJCQkJCVwKLQkJICJyIiAoKFVTSXR5cGUpKGJsKSkpOwkJCQkJXAotICB9IHdoaWxlICgwKQotCi0vKiBhc20gZnJhZ21lbnRzIGZvciBtdWwgYW5kIGRpdiAqLwotCi0vKiB1bXVsX3BwbW0oaGlnaF9wcm9kLCBsb3dfcHJvZCwgbXVsdGlwbGVyLCBtdWx0aXBsaWNhbmQpIG11bHRpcGxpZXMgdHdvCi0gKiBVV3R5cGUgaW50ZWdlcnMgTVVMVElQTEVSIGFuZCBNVUxUSVBMSUNBTkQsIGFuZCBnZW5lcmF0ZXMgYSB0d28gVVd0eXBlCi0gKiB3b3JkIHByb2R1Y3QgaW4gSElHSF9QUk9EIGFuZCBMT1dfUFJPRC4KLSAqLwotI2RlZmluZSB1bXVsX3BwbW0ocGgsIHBsLCBtMCwgbTEpCQkJCQlcCi0gIGRvIHsJCQkJCQkJCQlcCi0gICAgVVNJdHlwZSBfX20wID0gKG0wKSwgX19tMSA9IChtMSk7CQkJCQlcCi0gICAgX19hc21fXyAoIm11bGh3dSAlMCwlMSwlMiIJCQkJCQlcCi0JICAgICA6ICI9ciIgKChVU0l0eXBlKShwaCkpCQkJCQlcCi0JICAgICA6ICIlciIgKF9fbTApLAkJCQkJCVwKLSAgICAgICAgICAgICAgICJyIiAoX19tMSkpOwkJCQkJCVwKLSAgICAocGwpID0gX19tMCAqIF9fbTE7CQkJCQkJCVwKLSAgfSB3aGlsZSAoMCkKLQotLyogdWRpdl9xcm5uZChxdW90aWVudCwgcmVtYWluZGVyLCBoaWdoX251bWVyYXRvciwgbG93X251bWVyYXRvciwKLSAqIGRlbm9taW5hdG9yKSBkaXZpZGVzIGEgVURXdHlwZSwgY29tcG9zZWQgYnkgdGhlIFVXdHlwZSBpbnRlZ2VycwotICogSElHSF9OVU1FUkFUT1IgYW5kIExPV19OVU1FUkFUT1IsIGJ5IERFTk9NSU5BVE9SIGFuZCBwbGFjZXMgdGhlIHF1b3RpZW50Ci0gKiBpbiBRVU9USUVOVCBhbmQgdGhlIHJlbWFpbmRlciBpbiBSRU1BSU5ERVIuICBISUdIX05VTUVSQVRPUiBtdXN0IGJlIGxlc3MKLSAqIHRoYW4gREVOT01JTkFUT1IgZm9yIGNvcnJlY3Qgb3BlcmF0aW9uLiAgSWYsIGluIGFkZGl0aW9uLCB0aGUgbW9zdAotICogc2lnbmlmaWNhbnQgYml0IG9mIERFTk9NSU5BVE9SIG11c3QgYmUgMSwgdGhlbiB0aGUgcHJlLXByb2Nlc3NvciBzeW1ib2wKLSAqIFVESVZfTkVFRFNfTk9STUFMSVpBVElPTiBpcyBkZWZpbmVkIHRvIDEuCi0gKi8KLSNkZWZpbmUgdWRpdl9xcm5uZChxLCByLCBuMSwgbjAsIGQpCQkJCQlcCi0gIGRvIHsJCQkJCQkJCQlcCi0gICAgVVd0eXBlIF9fZDEsIF9fZDAsIF9fcTEsIF9fcTAsIF9fcjEsIF9fcjAsIF9fbTsJCQlcCi0gICAgX19kMSA9IF9fbGxfaGlnaHBhcnQgKGQpOwkJCQkJCVwKLSAgICBfX2QwID0gX19sbF9sb3dwYXJ0IChkKTsJCQkJCQlcCi0JCQkJCQkJCQlcCi0gICAgX19yMSA9IChuMSkgJSBfX2QxOwkJCQkJCQlcCi0gICAgX19xMSA9IChuMSkgLyBfX2QxOwkJCQkJCQlcCi0gICAgX19tID0gKFVXdHlwZSkgX19xMSAqIF9fZDA7CQkJCQkJXAotICAgIF9fcjEgPSBfX3IxICogX19sbF9CIHwgX19sbF9oaWdocGFydCAobjApOwkJCQlcCi0gICAgaWYgKF9fcjEgPCBfX20pCQkJCQkJCVwKLSAgICAgIHsJCQkJCQkJCQlcCi0JX19xMS0tLCBfX3IxICs9IChkKTsJCQkJCQlcCi0JaWYgKF9fcjEgPj0gKGQpKSAvKiB3ZSBkaWRuJ3QgZ2V0IGNhcnJ5IHdoZW4gYWRkaW5nIHRvIF9fcjEgKi8JXAotCSAgaWYgKF9fcjEgPCBfX20pCQkJCQkJXAotCSAgICBfX3ExLS0sIF9fcjEgKz0gKGQpOwkJCQkJXAotICAgICAgfQkJCQkJCQkJCVwKLSAgICBfX3IxIC09IF9fbTsJCQkJCQkJXAotCQkJCQkJCQkJXAotICAgIF9fcjAgPSBfX3IxICUgX19kMTsJCQkJCQkJXAotICAgIF9fcTAgPSBfX3IxIC8gX19kMTsJCQkJCQkJXAotICAgIF9fbSA9IChVV3R5cGUpIF9fcTAgKiBfX2QwOwkJCQkJCVwKLSAgICBfX3IwID0gX19yMCAqIF9fbGxfQiB8IF9fbGxfbG93cGFydCAobjApOwkJCQlcCi0gICAgaWYgKF9fcjAgPCBfX20pCQkJCQkJCVwKLSAgICAgIHsJCQkJCQkJCQlcCi0JX19xMC0tLCBfX3IwICs9IChkKTsJCQkJCQlcCi0JaWYgKF9fcjAgPj0gKGQpKQkJCQkJCVwKLQkgIGlmIChfX3IwIDwgX19tKQkJCQkJCVwKLQkgICAgX19xMC0tLCBfX3IwICs9IChkKTsJCQkJCVwKLSAgICAgIH0JCQkJCQkJCQlcCi0gICAgX19yMCAtPSBfX207CQkJCQkJCVwKLQkJCQkJCQkJCVwKLSAgICAocSkgPSAoVVd0eXBlKSBfX3ExICogX19sbF9CIHwgX19xMDsJCQkJXAotICAgIChyKSA9IF9fcjA7CQkJCQkJCQlcCi0gIH0gd2hpbGUgKDApCi0KLSNkZWZpbmUgVURJVl9ORUVEU19OT1JNQUxJWkFUSU9OIDEKLQotI2RlZmluZSBhYm9ydCgpCQkJCQkJCQlcCi0JcmV0dXJuIDAKLQotI2lmZGVmIF9fQklHX0VORElBTgotI2RlZmluZSBfX0JZVEVfT1JERVIgX19CSUdfRU5ESUFOCi0jZWxzZQotI2RlZmluZSBfX0JZVEVfT1JERVIgX19MSVRUTEVfRU5ESUFOCi0jZW5kaWYKLQotLyogRXhjZXB0aW9uIGZsYWdzLiAqLwotI2RlZmluZSBFRkxBR19JTlZBTElECQkoMSA8PCAoMzEgLSAyKSkKLSNkZWZpbmUgRUZMQUdfT1ZFUkZMT1cJCSgxIDw8ICgzMSAtIDMpKQotI2RlZmluZSBFRkxBR19VTkRFUkZMT1cJCSgxIDw8ICgzMSAtIDQpKQotI2RlZmluZSBFRkxBR19ESVZaRVJPCQkoMSA8PCAoMzEgLSA1KSkKLSNkZWZpbmUgRUZMQUdfSU5FWEFDVAkJKDEgPDwgKDMxIC0gNikpCi0KLSNkZWZpbmUgRUZMQUdfVlhTTkFOCQkoMSA8PCAoMzEgLSA3KSkKLSNkZWZpbmUgRUZMQUdfVlhJU0kJCSgxIDw8ICgzMSAtIDgpKQotI2RlZmluZSBFRkxBR19WWElESQkJKDEgPDwgKDMxIC0gOSkpCi0jZGVmaW5lIEVGTEFHX1ZYWkRaCQkoMSA8PCAoMzEgLSAxMCkpCi0jZGVmaW5lIEVGTEFHX1ZYSU1aCQkoMSA8PCAoMzEgLSAxMSkpCi0jZGVmaW5lIEVGTEFHX1ZYVkMJCSgxIDw8ICgzMSAtIDEyKSkKLSNkZWZpbmUgRUZMQUdfVlhTT0ZUCQkoMSA8PCAoMzEgLSAyMSkpCi0jZGVmaW5lIEVGTEFHX1ZYU1FSVAkJKDEgPDwgKDMxIC0gMjIpKQotI2RlZmluZSBFRkxBR19WWENWSQkJKDEgPDwgKDMxIC0gMjMpKQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL21hdGgtZW11L3NpbmdsZS5oIGIvYXJjaC9wb3dlcnBjL21hdGgtZW11L3NpbmdsZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMTlkOTk0Li4wMDAwMDAwCi0tLSBhL2FyY2gvcG93ZXJwYy9tYXRoLWVtdS9zaW5nbGUuaAorKysgL2Rldi9udWxsCkBAIC0xLDY2ICswLDAgQEAKLS8qCi0gKiBEZWZpbml0aW9ucyBmb3IgSUVFRSBTaW5nbGUgUHJlY2lzaW9uCi0gKi8KLQotI2lmIF9GUF9XX1RZUEVfU0laRSA8IDMyCi0jZXJyb3IgIkhlcmUncyBhIG5pY2tlbCBraWQuICBHbyBidXkgeW91cnNlbGYgYSByZWFsIGNvbXB1dGVyLiIKLSNlbmRpZgotCi0jZGVmaW5lIF9GUF9GUkFDQklUU19TCQkyNAotI2RlZmluZSBfRlBfRlJBQ1hCSVRTX1MJCShfRlBfV19UWVBFX1NJWkUgLSBfRlBfRlJBQ0JJVFNfUykKLSNkZWZpbmUgX0ZQX1dGUkFDQklUU19TCQkoX0ZQX1dPUktCSVRTICsgX0ZQX0ZSQUNCSVRTX1MpCi0jZGVmaW5lIF9GUF9XRlJBQ1hCSVRTX1MJKF9GUF9XX1RZUEVfU0laRSAtIF9GUF9XRlJBQ0JJVFNfUykKLSNkZWZpbmUgX0ZQX0VYUEJJVFNfUwkJOAotI2RlZmluZSBfRlBfRVhQQklBU19TCQkxMjcKLSNkZWZpbmUgX0ZQX0VYUE1BWF9TCQkyNTUKLSNkZWZpbmUgX0ZQX1FOQU5CSVRfUwkJKChfRlBfV19UWVBFKTEgPDwgKF9GUF9GUkFDQklUU19TLTIpKQotI2RlZmluZSBfRlBfSU1QTEJJVF9TCQkoKF9GUF9XX1RZUEUpMSA8PCAoX0ZQX0ZSQUNCSVRTX1MtMSkpCi0jZGVmaW5lIF9GUF9PVkVSRkxPV19TCQkoKF9GUF9XX1RZUEUpMSA8PCAoX0ZQX1dGUkFDQklUU19TKSkKLQotLyogVGhlIGltcGxlbWVudGF0aW9uIG9mIF9GUF9NVUxfTUVBVF9TIGFuZCBfRlBfRElWX01FQVRfUyBzaG91bGQgYmUKLSAgIGNob3NlbiBieSB0aGUgdGFyZ2V0IG1hY2hpbmUuICAqLwotCi11bmlvbiBfRlBfVU5JT05fUwotewotICBmbG9hdCBmbHQ7Ci0gIHN0cnVjdCB7Ci0jaWYgX19CWVRFX09SREVSID09IF9fQklHX0VORElBTgotICAgIHVuc2lnbmVkIHNpZ24gOiAxOwotICAgIHVuc2lnbmVkIGV4cCAgOiBfRlBfRVhQQklUU19TOwotICAgIHVuc2lnbmVkIGZyYWMgOiBfRlBfRlJBQ0JJVFNfUyAtIChfRlBfSU1QTEJJVF9TICE9IDApOwotI2Vsc2UKLSAgICB1bnNpZ25lZCBmcmFjIDogX0ZQX0ZSQUNCSVRTX1MgLSAoX0ZQX0lNUExCSVRfUyAhPSAwKTsKLSAgICB1bnNpZ25lZCBleHAgIDogX0ZQX0VYUEJJVFNfUzsKLSAgICB1bnNpZ25lZCBzaWduIDogMTsKLSNlbmRpZgotICB9IGJpdHMgX19hdHRyaWJ1dGVfXygocGFja2VkKSk7Ci19OwotCi0jZGVmaW5lIEZQX0RFQ0xfUyhYKQkJX0ZQX0RFQ0woMSxYKQotI2RlZmluZSBGUF9VTlBBQ0tfUkFXX1MoWCx2YWwpCV9GUF9VTlBBQ0tfUkFXXzEoUyxYLHZhbCkKLSNkZWZpbmUgRlBfUEFDS19SQVdfUyh2YWwsWCkJX0ZQX1BBQ0tfUkFXXzEoUyx2YWwsWCkKLQotI2RlZmluZSBGUF9VTlBBQ0tfUyhYLHZhbCkJCVwKLSAgZG8gewkJCQkJXAotICAgIF9GUF9VTlBBQ0tfUkFXXzEoUyxYLHZhbCk7CQlcCi0gICAgX0ZQX1VOUEFDS19DQU5PTklDQUwoUywxLFgpOwlcCi0gIH0gd2hpbGUgKDApCi0KLSNkZWZpbmUgRlBfUEFDS19TKHZhbCxYKQkJXAotICBkbyB7CQkJCQlcCi0gICAgX0ZQX1BBQ0tfQ0FOT05JQ0FMKFMsMSxYKTsJCVwKLSAgICBfRlBfUEFDS19SQVdfMShTLHZhbCxYKTsJCVwKLSAgfSB3aGlsZSAoMCkKLQotI2RlZmluZSBGUF9ORUdfUyhSLFgpCQlfRlBfTkVHKFMsMSxSLFgpCi0jZGVmaW5lIEZQX0FERF9TKFIsWCxZKQkJX0ZQX0FERChTLDEsUixYLFkpCi0jZGVmaW5lIEZQX1NVQl9TKFIsWCxZKQkJX0ZQX1NVQihTLDEsUixYLFkpCi0jZGVmaW5lIEZQX01VTF9TKFIsWCxZKQkJX0ZQX01VTChTLDEsUixYLFkpCi0jZGVmaW5lIEZQX0RJVl9TKFIsWCxZKQkJX0ZQX0RJVihTLDEsUixYLFkpCi0jZGVmaW5lIEZQX1NRUlRfUyhSLFgpCQlfRlBfU1FSVChTLDEsUixYKQotCi0jZGVmaW5lIEZQX0NNUF9TKHIsWCxZLHVuKQlfRlBfQ01QKFMsMSxyLFgsWSx1bikKLSNkZWZpbmUgRlBfQ01QX0VRX1MocixYLFkpCV9GUF9DTVBfRVEoUywxLHIsWCxZKQotCi0jZGVmaW5lIEZQX1RPX0lOVF9TKHIsWCxyc3oscnNnKSAgX0ZQX1RPX0lOVChTLDEscixYLHJzeixyc2cpCi0jZGVmaW5lIEZQX0ZST01fSU5UX1MoWCxyLHJzLHJ0KSAgX0ZQX0ZST01fSU5UKFMsMSxYLHIscnMscnQpCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbWF0aC1lbXUvc29mdC1mcC5oIGIvYXJjaC9wb3dlcnBjL21hdGgtZW11L3NvZnQtZnAuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2NhMzk1OS4uMDAwMDAwMAotLS0gYS9hcmNoL3Bvd2VycGMvbWF0aC1lbXUvc29mdC1mcC5oCisrKyAvZGV2L251bGwKQEAgLTEsMTA0ICswLDAgQEAKLSNpZm5kZWYgU09GVF9GUF9ICi0jZGVmaW5lIFNPRlRfRlBfSAotCi0jaW5jbHVkZSAic2ZwLW1hY2hpbmUuaCIKLQotI2RlZmluZSBfRlBfV09SS0JJVFMJCTMKLSNkZWZpbmUgX0ZQX1dPUktfTFNCCQkoKF9GUF9XX1RZUEUpMSA8PCAzKQotI2RlZmluZSBfRlBfV09SS19ST1VORAkJKChfRlBfV19UWVBFKTEgPDwgMikKLSNkZWZpbmUgX0ZQX1dPUktfR1VBUkQJCSgoX0ZQX1dfVFlQRSkxIDw8IDEpCi0jZGVmaW5lIF9GUF9XT1JLX1NUSUNLWQkJKChfRlBfV19UWVBFKTEgPDwgMCkKLQotI2lmbmRlZiBGUF9STkRfTkVBUkVTVAotIyBkZWZpbmUgRlBfUk5EX05FQVJFU1QJCTAKLSMgZGVmaW5lIEZQX1JORF9aRVJPCQkxCi0jIGRlZmluZSBGUF9STkRfUElORgkJMgotIyBkZWZpbmUgRlBfUk5EX01JTkYJCTMKLSNpZm5kZWYgRlBfUk9VTkRNT0RFCi0jIGRlZmluZSBGUF9ST1VORE1PREUJCUZQX1JORF9ORUFSRVNUCi0jZW5kaWYKLSNlbmRpZgotCi0jZGVmaW5lIF9GUF9ST1VORF9ORUFSRVNUKHdjLCBYKQkJCVwKLSh7ICBpbnQgX19yZXQgPSAwOwkJCQkJXAotICAgIGludCBfX2ZyYWMgPSBfRlBfRlJBQ19MT1dfIyN3YyhYKSAmIDE1OwkJXAotICAgIGlmIChfX2ZyYWMgJiA3KSB7CQkJCQlcCi0gICAgICBfX3JldCA9IEVGTEFHX0lORVhBQ1Q7CQkJCVwKLSAgICAgIGlmICgoX19mcmFjICYgNykgIT0gX0ZQX1dPUktfUk9VTkQpCQlcCi0gICAgICAgIF9GUF9GUkFDX0FERElfIyN3YyhYLCBfRlBfV09SS19ST1VORCk7CQlcCi0gICAgICBlbHNlIGlmIChfX2ZyYWMgJiBfRlBfV09SS19MU0IpCQkJXAotICAgICAgICBfRlBfRlJBQ19BRERJXyMjd2MoWCwgX0ZQX1dPUktfUk9VTkQpOwkJXAotICAgIH0JCQkJCQkJXAotICAgIF9fcmV0OwkJCQkJCVwKLX0pCi0KLSNkZWZpbmUgX0ZQX1JPVU5EX1pFUk8od2MsIFgpCQkJCVwKLSh7ICBpbnQgX19yZXQgPSAwOwkJCQkJXAotICAgIGlmIChfRlBfRlJBQ19MT1dfIyN3YyhYKSAmIDcpCQkJXAotICAgICAgX19yZXQgPSBFRkxBR19JTkVYQUNUOwkJCQlcCi0gICAgX19yZXQ7CQkJCQkJXAotfSkKLQotI2RlZmluZSBfRlBfUk9VTkRfUElORih3YywgWCkJCQkJXAotKHsgIGludCBfX3JldCA9IEVGTEFHX0lORVhBQ1Q7CQkJCVwKLSAgICBpZiAoIVgjI19zICYmIChfRlBfRlJBQ19MT1dfIyN3YyhYKSAmIDcpKQkJXAotICAgICAgX0ZQX0ZSQUNfQURESV8jI3djKFgsIF9GUF9XT1JLX0xTQik7CQlcCi0gICAgZWxzZSBfX3JldCA9IDA7CQkJCQlcCi0gICAgX19yZXQ7CQkJCQkJXAotfSkKLQotI2RlZmluZSBfRlBfUk9VTkRfTUlORih3YywgWCkJCQkJXAotKHsgIGludCBfX3JldCA9IEVGTEFHX0lORVhBQ1Q7CQkJCVwKLSAgICBpZiAoWCMjX3MgJiYgKF9GUF9GUkFDX0xPV18jI3djKFgpICYgNykpCQlcCi0gICAgICBfRlBfRlJBQ19BRERJXyMjd2MoWCwgX0ZQX1dPUktfTFNCKTsJCVwKLSAgICBlbHNlIF9fcmV0ID0gMDsJCQkJCVwKLSAgICBfX3JldDsJCQkJCQlcCi19KQotCi0jZGVmaW5lIF9GUF9ST1VORCh3YywgWCkJCQlcCi0oewlpbnQgX19yZXQgPSAwOwkJCQlcCi0Jc3dpdGNoIChGUF9ST1VORE1PREUpCQkJXAotCXsJCQkJCVwKLQkgIGNhc2UgRlBfUk5EX05FQVJFU1Q6CQkJXAotCSAgICBfX3JldCB8PSBfRlBfUk9VTkRfTkVBUkVTVCh3YyxYKTsJXAotCSAgICBicmVhazsJCQkJXAotCSAgY2FzZSBGUF9STkRfWkVSTzoJCQlcCi0JICAgIF9fcmV0IHw9IF9GUF9ST1VORF9aRVJPKHdjLFgpOwlcCi0JICAgIGJyZWFrOwkJCQlcCi0JICBjYXNlIEZQX1JORF9QSU5GOgkJCVwKLQkgICAgX19yZXQgfD0gX0ZQX1JPVU5EX1BJTkYod2MsWCk7CVwKLQkgICAgYnJlYWs7CQkJCVwKLQkgIGNhc2UgRlBfUk5EX01JTkY6CQkJXAotCSAgICBfX3JldCB8PSBfRlBfUk9VTkRfTUlORih3YyxYKTsJXAotCSAgICBicmVhazsJCQkJXAotCX07CQkJCQlcCi0JX19yZXQ7CQkJCQlcCi19KQotCi0jZGVmaW5lIEZQX0NMU19OT1JNQUwJCTAKLSNkZWZpbmUgRlBfQ0xTX1pFUk8JCTEKLSNkZWZpbmUgRlBfQ0xTX0lORgkJMgotI2RlZmluZSBGUF9DTFNfTkFOCQkzCi0KLSNkZWZpbmUgX0ZQX0NMU19DT01CSU5FKHgseSkJKCgoeCkgPDwgMikgfCAoeSkpCi0KLSNpbmNsdWRlICJvcC0xLmgiCi0jaW5jbHVkZSAib3AtMi5oIgotI2luY2x1ZGUgIm9wLTQuaCIKLSNpbmNsdWRlICJvcC1jb21tb24uaCIKLQotLyogU2lnaC4gIFNpbGx5IHRoaW5ncyBsb25nbG9uZy5oIG5lZWRzLiAgKi8KLSNkZWZpbmUgVVd0eXBlCQlfRlBfV19UWVBFCi0jZGVmaW5lIFdfVFlQRV9TSVpFCV9GUF9XX1RZUEVfU0laRQotCi10eXBlZGVmIGludCBTSXR5cGUgX19hdHRyaWJ1dGVfXygobW9kZShTSSkpKTsKLXR5cGVkZWYgaW50IERJdHlwZSBfX2F0dHJpYnV0ZV9fKChtb2RlKERJKSkpOwotdHlwZWRlZiB1bnNpZ25lZCBpbnQgVVNJdHlwZSBfX2F0dHJpYnV0ZV9fKChtb2RlKFNJKSkpOwotdHlwZWRlZiB1bnNpZ25lZCBpbnQgVURJdHlwZSBfX2F0dHJpYnV0ZV9fKChtb2RlKERJKSkpOwotI2lmIF9GUF9XX1RZUEVfU0laRSA9PSAzMgotdHlwZWRlZiB1bnNpZ25lZCBpbnQgVUhXdHlwZSBfX2F0dHJpYnV0ZV9fKChtb2RlKEhJKSkpOwotI2VsaWYgX0ZQX1dfVFlQRV9TSVpFID09IDY0Ci10eXBlZGVmIFVTSXR5cGUgVUhXdHlwZTsKLSNlbmRpZgotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9tYXRoLWVtdS9zdGZzLmMgYi9hcmNoL3Bvd2VycGMvbWF0aC1lbXUvc3Rmcy5jCmluZGV4IDg2ODlhYTQuLjYxMjIxNDcgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9tYXRoLWVtdS9zdGZzLmMKKysrIGIvYXJjaC9wb3dlcnBjL21hdGgtZW11L3N0ZnMuYwpAQCAtMiwyMyArMiwyNCBAQAogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KIAotI2luY2x1ZGUgInNvZnQtZnAuaCIKLSNpbmNsdWRlICJkb3VibGUuaCIKLSNpbmNsdWRlICJzaW5nbGUuaCIKKyNpbmNsdWRlIDxhc20vc2ZwLW1hY2hpbmUuaD4KKyNpbmNsdWRlIDxtYXRoLWVtdS9zb2Z0LWZwLmg+CisjaW5jbHVkZSA8bWF0aC1lbXUvZG91YmxlLmg+CisjaW5jbHVkZSA8bWF0aC1lbXUvc2luZ2xlLmg+CiAKIGludAogc3Rmcyh2b2lkICpmclMsIHZvaWQgKmVhKQogewogCUZQX0RFQ0xfRChBKTsKIAlGUF9ERUNMX1MoUik7CisJRlBfREVDTF9FWDsKIAlmbG9hdCBmOwotCWludCBlcnI7CiAKICNpZmRlZiBERUJVRwogCXByaW50aygiJXM6IFMgJXAsIGVhICVwXG4iLCBfX2Z1bmNfXywgZnJTLCBlYSk7CiAjZW5kaWYKIAotCV9fRlBfVU5QQUNLX0QoQSwgZnJTKTsKKwlGUF9VTlBBQ0tfRFAoQSwgZnJTKTsKIAogI2lmZGVmIERFQlVHCiAJcHJpbnRrKCJBOiAlbGQgJWx1ICVsdSAlbGQgKCVsZClcbiIsIEFfcywgQV9mMSwgQV9mMCwgQV9lLCBBX2MpOwpAQCAtMzAsMTIgKzMxLDEyIEBACiAJcHJpbnRrKCJSOiAlbGQgJWx1ICVsZCAoJWxkKVxuIiwgUl9zLCBSX2YsIFJfZSwgUl9jKTsKICNlbmRpZgogCi0JZXJyID0gX0ZQX1BBQ0tfQ0FOT05JQ0FMKFMsIDEsIFIpOwotCWlmICghZXJyIHx8ICFfX0ZQVV9UUkFQX1AoZXJyKSkgewotCQlfX0ZQX1BBQ0tfUkFXXzEoUywgJmYsIFIpOworCV9GUF9QQUNLX0NBTk9OSUNBTChTLCAxLCBSKTsKKwlpZiAoIUZQX0NVUl9FWENFUFRJT05TIHx8ICFfX0ZQVV9UUkFQX1AoRlBfQ1VSX0VYQ0VQVElPTlMpKSB7CisJCV9GUF9QQUNLX1JBV18xX1AoUywgJmYsIFIpOwogCQlpZiAoY29weV90b191c2VyKGVhLCAmZiwgc2l6ZW9mKGZsb2F0KSkpCiAJCQlyZXR1cm4gLUVGQVVMVDsKIAl9CiAKLQlyZXR1cm4gZXJyOworCXJldHVybiBGUF9DVVJfRVhDRVBUSU9OUzsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9tYXRoLWVtdS90eXBlcy5jIGIvYXJjaC9wb3dlcnBjL21hdGgtZW11L3R5cGVzLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUxZWQxNWQuLjAwMDAwMDAKLS0tIGEvYXJjaC9wb3dlcnBjL21hdGgtZW11L3R5cGVzLmMKKysrIC9kZXYvbnVsbApAQCAtMSw1MSArMCwwIEBACi0jaW5jbHVkZSAic29mdC1mcC5oIgotI2luY2x1ZGUgImRvdWJsZS5oIgotI2luY2x1ZGUgInNpbmdsZS5oIgotCi12b2lkCi1mcF91bnBhY2tfZChsb25nICpfcywgdW5zaWduZWQgbG9uZyAqX2YxLCB1bnNpZ25lZCBsb25nICpfZjAsCi0JICAgIGxvbmcgKl9lLCBsb25nICpfYywgdm9pZCAqdmFsKQotewotCUZQX0RFQ0xfRChYKTsKLQotCV9fRlBfVU5QQUNLX1JBV18yKEQsIFgsIHZhbCk7Ci0KLQlfRlBfVU5QQUNLX0NBTk9OSUNBTChELCAyLCBYKTsKLQotCSpfcyA9IFhfczsKLQkqX2YxID0gWF9mMTsKLQkqX2YwID0gWF9mMDsKLQkqX2UgPSBYX2U7Ci0JKl9jID0gWF9jOwotfQotCi1pbnQKLWZwX3BhY2tfZCh2b2lkICp2YWwsIGxvbmcgWF9zLCB1bnNpZ25lZCBsb25nIFhfZjEsCi0JICB1bnNpZ25lZCBsb25nIFhfZjAsIGxvbmcgWF9lLCBsb25nIFhfYykKLXsKLQlpbnQgZXhjOwotCi0JZXhjID0gX0ZQX1BBQ0tfQ0FOT05JQ0FMKEQsIDIsIFgpOwotCWlmICghZXhjIHx8ICFfX0ZQVV9UUkFQX1AoZXhjKSkKLQkJX19GUF9QQUNLX1JBV18yKEQsIHZhbCwgWCk7Ci0JcmV0dXJuIGV4YzsKLX0KLQotaW50Ci1mcF9wYWNrX2RzKHZvaWQgKnZhbCwgbG9uZyBYX3MsIHVuc2lnbmVkIGxvbmcgWF9mMSwKLQkgICB1bnNpZ25lZCBsb25nIFhfZjAsIGxvbmcgWF9lLCBsb25nIFhfYykKLXsKLQlGUF9ERUNMX1MoX19YKTsKLQlpbnQgZXhjOwotCi0JRlBfQ09OVihTLCBELCAxLCAyLCBfX1gsIFgpOwotCWV4YyA9IF9GUF9QQUNLX0NBTk9OSUNBTChTLCAxLCBfX1gpOwotCWlmICghZXhjIHx8ICFfX0ZQVV9UUkFQX1AoZXhjKSkgewotCQlfRlBfVU5QQUNLX0NBTk9OSUNBTChTLCAxLCBfX1gpOwotCQlGUF9DT05WKEQsIFMsIDIsIDEsIFgsIF9fWCk7Ci0JCWV4YyB8PSBfRlBfUEFDS19DQU5PTklDQUwoRCwgMiwgWCk7Ci0JCWlmICghZXhjIHx8ICFfX0ZQVV9UUkFQX1AoZXhjKSkKLQkJCV9fRlBfUEFDS19SQVdfMihELCB2YWwsIFgpOwotCX0KLQlyZXR1cm4gZXhjOwotfQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL21hdGgtZW11L3VkaXZtb2R0aTQuYyBiL2FyY2gvcG93ZXJwYy9tYXRoLWVtdS91ZGl2bW9kdGk0LmMKaW5kZXggN2UxMTJkYy4uNjE3MjA0NCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL21hdGgtZW11L3VkaXZtb2R0aTQuYworKysgYi9hcmNoL3Bvd2VycGMvbWF0aC1lbXUvdWRpdm1vZHRpNC5jCkBAIC0xLDYgKzEsNiBAQAogLyogVGhpcyBoYXMgc28gdmVyeSBmZXcgY2hhbmdlcyBvdmVyIGxpYmdjYzIncyBfX3VkaXZtb2RkaTQgaXQgaXNuJ3QgZnVubnkuICAqLwogCi0jaW5jbHVkZSAic29mdC1mcC5oIgorI2luY2x1ZGUgPG1hdGgtZW11L3NvZnQtZnAuaD4KIAogI3VuZGVmIGNvdW50X2xlYWRpbmdfemVyb3MKICNkZWZpbmUgY291bnRfbGVhZGluZ196ZXJvcyAgX19GUF9DTFoKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9tbS9mc2xfYm9va2VfbW11LmMgYi9hcmNoL3Bvd2VycGMvbW0vZnNsX2Jvb2tlX21tdS5jCmluZGV4IGNlMTBlMmIuLjIzY2VlMzkgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9tbS9mc2xfYm9va2VfbW11LmMKKysrIGIvYXJjaC9wb3dlcnBjL21tL2ZzbF9ib29rZV9tbXUuYwpAQCAtMjAyLDcgKzIwMiw3IEBACiAJCWNhbV9tYXhfc2l6ZSA9IG1heF9sb3dtZW1fc2l6ZTsKIAogCS8qIGFkanVzdCBsb3dtZW0gc2l6ZSB0byBtYXhfbG93bWVtX3NpemUgKi8KLQlyYW0gPSBtaW4obWF4X2xvd21lbV9zaXplLCAocGh5c19hZGRyX3QpdG90YWxfbG93bWVtKTsKKwlyYW0gPSBtaW4obWF4X2xvd21lbV9zaXplLCB0b3RhbF9sb3dtZW0pOwogCiAJLyogQ2FsY3VsYXRlIENBTSB2YWx1ZXMgKi8KIAlfX2NhbTAgPSAxVUwgPDwgMiAqIChfX2lsb2cyKHJhbSkgLyAyKTsKQEAgLTIyNSw3ICsyMjUsOCBAQAogCXByaW50ayhLRVJOX0lORk8gIk1lbW9yeSBDQU0gbWFwcGluZzogQ0FNMD0lbGRNYiwgQ0FNMT0lbGRNYiwiCiAJCQkiIENBTTI9JWxkTWIgcmVzaWR1YWw6ICVsZE1iXG4iLAogCQkJX19jYW0wID4+IDIwLCBfX2NhbTEgPj4gMjAsIF9fY2FtMiA+PiAyMCwKLQkJCSh0b3RhbF9sb3dtZW0gLSBfX2NhbTAgLSBfX2NhbTEgLSBfX2NhbTIpID4+IDIwKTsKKwkJCShsb25nIGludCkoKHRvdGFsX2xvd21lbSAtIF9fY2FtMCAtIF9fY2FtMSAtIF9fY2FtMikKKwkJCQkgICA+PiAyMCkpOwogCV9fbWF4X2xvd19tZW1vcnkgPSBfX2NhbTAgKyBfX2NhbTEgKyBfX2NhbTI7CiAJX19pbml0aWFsX21lbW9yeV9saW1pdF9hZGRyID0gbWVtc3RhcnRfYWRkciArIF9fbWF4X2xvd19tZW1vcnk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbW0vZ3VwLmMgYi9hcmNoL3Bvd2VycGMvbW0vZ3VwLmMKaW5kZXggOWZkZjRkNi4uMjhhMTE0ZCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL21tL2d1cC5jCisrKyBiL2FyY2gvcG93ZXJwYy9tbS9ndXAuYwpAQCAtNDEsNyArNDEsNyBAQAogCQlwYWdlID0gcHRlX3BhZ2UocHRlKTsKIAkJaWYgKCFwYWdlX2NhY2hlX2dldF9zcGVjdWxhdGl2ZShwYWdlKSkKIAkJCXJldHVybiAwOwotCQlpZiAodW5saWtlbHkocHRlICE9ICpwdGVwKSkgeworCQlpZiAodW5saWtlbHkocHRlX3ZhbChwdGUpICE9IHB0ZV92YWwoKnB0ZXApKSkgewogCQkJcHV0X3BhZ2UocGFnZSk7CiAJCQlyZXR1cm4gMDsKIAkJfQpAQCAtOTIsNyArOTIsNyBAQAogCQkqbnIgLT0gcmVmczsKIAkJcmV0dXJuIDA7CiAJfQotCWlmICh1bmxpa2VseShwdGUgIT0gKnB0ZXApKSB7CisJaWYgKHVubGlrZWx5KHB0ZV92YWwocHRlKSAhPSBwdGVfdmFsKCpwdGVwKSkpIHsKIAkJLyogQ291bGQgYmUgb3B0aW1pemVkIGJldHRlciAqLwogCQl3aGlsZSAoKm5yKSB7CiAJCQlwdXRfcGFnZShwYWdlKTsKQEAgLTIzNyw3ICsyMzcsOCBAQAogCQkJcGdkX3QgcGdkID0gKnBnZHA7CiAKIAkJCVZNX0JVR19PTihzaGlmdCAhPSBtbXVfcHNpemVfZGVmc1tnZXRfc2xpY2VfcHNpemUobW0sIGFkZHIpXS5zaGlmdCk7Ci0JCQlwcl9kZWJ1ZygiICAlMDE2bHg6IG5vcm1hbCBwZ2QgJXBcbiIsIGFkZHIsICh2b2lkICopcGdkKTsKKwkJCXByX2RlYnVnKCIgICUwMTZseDogbm9ybWFsIHBnZCAlcFxuIiwgYWRkciwKKwkJCQkgKHZvaWQgKilwZ2RfdmFsKHBnZCkpOwogCQkJbmV4dCA9IHBnZF9hZGRyX2VuZChhZGRyLCBlbmQpOwogCQkJaWYgKHBnZF9ub25lKHBnZCkpCiAJCQkJZ290byBzbG93OwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL21tL2hhc2hfbG93XzMyLlMgYi9hcmNoL3Bvd2VycGMvbW0vaGFzaF9sb3dfMzIuUwppbmRleCBiOWJhN2Q5Li43YmZmYjcwIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvbW0vaGFzaF9sb3dfMzIuUworKysgYi9hcmNoL3Bvd2VycGMvbW0vaGFzaF9sb3dfMzIuUwpAQCAtNzUsNyArNzUsNyBAQAogICogUmV0dXJucyB0byB0aGUgY2FsbGVyIGlmIHRoZSBhY2Nlc3MgaXMgaWxsZWdhbCBvciB0aGVyZSBpcyBubwogICogbWFwcGluZyBmb3IgdGhlIGFkZHJlc3MuICBPdGhlcndpc2UgaXQgcGxhY2VzIGFuIGFwcHJvcHJpYXRlIFBURQogICogaW4gdGhlIGhhc2ggdGFibGUgYW5kIHJldHVybnMgZnJvbSB0aGUgZXhjZXB0aW9uLgotICogVXNlcyByMCwgcjMgLSByOCwgY3RyLCBsci4KKyAqIFVzZXMgcjAsIHIzIC0gcjgsIHIxMCwgY3RyLCBsci4KICAqLwogCS50ZXh0CiBfR0xPQkFMKGhhc2hfcGFnZSkKQEAgLTEwNiw5ICsxMDYsMTUgQEAKIAlhZGRpCXI1LHI1LHN3YXBwZXJfcGdfZGlyQGwJLyoga2VybmVsIHBhZ2UgdGFibGUgKi8KIAlybHdpbWkJcjMscjksMzItMTIsMjksMjkJLyogTVNSX1BSIC0+IF9QQUdFX1VTRVIgKi8KIDExMjoJYWRkCXI1LHI1LHI3CQkvKiBjb252ZXJ0IHRvIHBoeXMgYWRkciAqLworI2lmbmRlZiBDT05GSUdfUFRFXzY0QklUCiAJcmx3aW1pCXI1LHI0LDEyLDIwLDI5CQkvKiBpbnNlcnQgdG9wIDEwIGJpdHMgb2YgYWRkcmVzcyAqLwogCWx3eglyOCwwKHI1KQkJLyogZ2V0IHBtZCBlbnRyeSAqLwogCXJsd2lubS4JcjgscjgsMCwwLDE5CQkvKiBleHRyYWN0IGFkZHJlc3Mgb2YgcHRlIHBhZ2UgKi8KKyNlbHNlCisJcmx3aW5tCXI4LHI0LDEzLDE5LDI5CQkvKiBDb21wdXRlIHBnZGlyL3BtZCBvZmZzZXQgKi8KKwlsd3p4CXI4LHI4LHI1CQkvKiBHZXQgTDEgZW50cnkgKi8KKwlybHdpbm0uCXI4LHI4LDAsMCwyMAkJLyogZXh0cmFjdCBwdCBiYXNlIGFkZHJlc3MgKi8KKyNlbmRpZgogI2lmZGVmIENPTkZJR19TTVAKIAliZXEtCWhhc2hfcGFnZV9vdXQJCS8qIHJldHVybiBpZiBubyBtYXBwaW5nICovCiAjZWxzZQpAQCAtMTE4LDcgKzEyNCwxMSBAQAogCSAgIHRvIHRoZSBhZGRyZXNzIGZvbGxvd2luZyB0aGUgcmZpLiAqLwogCWJlcWxyLQogI2VuZGlmCisjaWZuZGVmIENPTkZJR19QVEVfNjRCSVQKIAlybHdpbWkJcjgscjQsMjIsMjAsMjkJCS8qIGluc2VydCBuZXh0IDEwIGJpdHMgb2YgYWRkcmVzcyAqLworI2Vsc2UKKwlybHdpbWkJcjgscjQsMjMsMjAsMjgJCS8qIGNvbXB1dGUgcHRlIGFkZHJlc3MgKi8KKyNlbmRpZgogCXJsd2lubQlyMCxyMywzMi0zLDI0LDI0CS8qIF9QQUdFX1JXIGFjY2VzcyAtPiBfUEFHRV9ESVJUWSAqLwogCW9yaQlyMCxyMCxfUEFHRV9BQ0NFU1NFRHxfUEFHRV9IQVNIUFRFCiAKQEAgLTEyNyw5ICsxMzcsMTUgQEAKIAkgKiBiZWNhdXNlIGFsbW9zdCBhbHdheXMsIHRoZXJlIHdvbid0IGJlIGEgcGVybWlzc2lvbiB2aW9sYXRpb24KIAkgKiBhbmQgdGhlcmUgd29uJ3QgYWxyZWFkeSBiZSBhbiBIUFRFLCBhbmQgdGh1cyB3ZSB3aWxsIGhhdmUKIAkgKiB0byB1cGRhdGUgdGhlIFBURSB0byBzZXQgX1BBR0VfSEFTSFBURS4gIC0tIHBhdWx1cy4KKwkgKgorCSAqIElmIFBURV82NEJJVCBpcyBzZXQsIHRoZSBsb3cgd29yZCBpcyB0aGUgZmxhZ3Mgd29yZDsgdXNlIHRoYXQKKwkgKiB3b3JkIGZvciBsb2NraW5nIHNpbmNlIGl0IGNvbnRhaW5zIGFsbCB0aGUgaW50ZXJlc3RpbmcgYml0cy4KIAkgKi8KKyNpZiAoUFRFX0ZMQUdTX09GRlNFVCAhPSAwKQorCWFkZGkJcjgscjgsUFRFX0ZMQUdTX09GRlNFVAorI2VuZGlmCiByZXRyeToKLQlsd2FyeAlyNiwwLHI4CQkJLyogZ2V0IGxpbnV4LXN0eWxlIHB0ZSAqLworCWx3YXJ4CXI2LDAscjgJCQkvKiBnZXQgbGludXgtc3R5bGUgcHRlLCBmbGFnIHdvcmQgKi8KIAlhbmRjLglyNSxyMyxyNgkJLyogY2hlY2sgYWNjZXNzICYgfnBlcm1pc3Npb24gKi8KICNpZmRlZiBDT05GSUdfU01QCiAJYm5lLQloYXNoX3BhZ2Vfb3V0CQkvKiByZXR1cm4gaWYgYWNjZXNzIG5vdCBwZXJtaXR0ZWQgKi8KQEAgLTEzNyw2ICsxNTMsMTUgQEAKIAlibmVsci0KICNlbmRpZgogCW9yCXI1LHIwLHI2CQkvKiBzZXQgYWNjZXNzZWQvZGlydHkgYml0cyAqLworI2lmZGVmIENPTkZJR19QVEVfNjRCSVQKKyNpZmRlZiBDT05GSUdfU01QCisJc3ViZglyMTAscjYscjgJCS8qIGNyZWF0ZSBmYWxzZSBkYXRhIGRlcGVuZGVuY3kgKi8KKwlzdWJpCXIxMCxyMTAsUFRFX0ZMQUdTX09GRlNFVAorCWx3engJcjEwLHI2LHIxMAkJLyogR2V0IHVwcGVyIFBURSB3b3JkICovCisjZWxzZQorCWx3eglyMTAsLVBURV9GTEFHU19PRkZTRVQocjgpCisjZW5kaWYgLyogQ09ORklHX1NNUCAqLworI2VuZGlmIC8qIENPTkZJR19QVEVfNjRCSVQgKi8KIAlzdHdjeC4JcjUsMCxyOAkJCS8qIGF0dGVtcHQgdG8gdXBkYXRlIFBURSAqLwogCWJuZS0JcmV0cnkJCQkvKiByZXRyeSBpZiBzb21lb25lIGdvdCB0aGVyZSBmaXJzdCAqLwogCkBAIC0yMDMsOSArMjI4LDkgQEAKIAkgKiB3ZSBjYW4ndCB0YWtlIGEgaGFzaCB0YWJsZSBtaXNzIChhc3N1bWluZyB0aGUgY29kZSBpcwogCSAqIGNvdmVyZWQgYnkgYSBCQVQpLiAgLS0gcGF1bHVzCiAJICovCi0JbWZtc3IJcjEwCisJbWZtc3IJcjkKIAlTWU5DCi0Jcmx3aW5tCXIwLHIxMCwwLDE3LDE1CQkvKiBjbGVhciBiaXQgMTYgKE1TUl9FRSkgKi8KKwlybHdpbm0JcjAscjksMCwxNywxNQkJLyogY2xlYXIgYml0IDE2IChNU1JfRUUpICovCiAJcmx3aW5tCXIwLHIwLDAsMjgsMjYJCS8qIGNsZWFyIE1TUl9EUiAqLwogCW10bXNyCXIwCiAJU1lOQ182MDEKQEAgLTIxNCwxNCArMjM5LDE0IEBACiAJdG9waHlzKHI3LDApCiAKICNpZmRlZiBDT05GSUdfU01QCi0JYWRkaXMJcjkscjcsbW11X2hhc2hfbG9ja0BoYQotCWFkZGkJcjkscjksbW11X2hhc2hfbG9ja0BsCi0xMDoJbHdhcngJcjAsMCxyOQkJCS8qIHRha2UgdGhlIG1tdV9oYXNoX2xvY2sgKi8KKwlhZGRpcwlyNixyNyxtbXVfaGFzaF9sb2NrQGhhCisJYWRkaQlyNixyNixtbXVfaGFzaF9sb2NrQGwKKzEwOglsd2FyeAlyMCwwLHI2CQkJLyogdGFrZSB0aGUgbW11X2hhc2hfbG9jayAqLwogCWNtcGkJMCxyMCwwCiAJYm5lLQkxMWYKLQlzdHdjeC4JcjgsMCxyOQorCXN0d2N4LglyOCwwLHI2CiAJYmVxKwkxMmYKLTExOglsd3oJcjAsMChyOSkKKzExOglsd3oJcjAsMChyNikKIAljbXBpCTAscjAsMAogCWJlcQkxMGIKIAliCTExYgpAQCAtMjM0LDEwICsyNTksMjQgQEAKIAkgKiBIUFRFLCBzbyB3ZSBqdXN0IHVubG9jayBhbmQgcmV0dXJuLgogCSAqLwogCW1yCXI4LHI1CisjaWZuZGVmIENPTkZJR19QVEVfNjRCSVQKIAlybHdpbWkJcjgscjQsMjIsMjAsMjkKKyNlbHNlCisJcmx3aW1pCXI4LHI0LDIzLDIwLDI4CisJYWRkaQlyOCxyOCxQVEVfRkxBR1NfT0ZGU0VUCisjZW5kaWYKIDE6CWx3YXJ4CXI2LDAscjgKIAlhbmRpLglyMCxyNixfUEFHRV9IQVNIUFRFCiAJYm5lCTlmCQkJLyogaWYgSEFTSFBURSBhbHJlYWR5IHNldCwgZG9uZSAqLworI2lmZGVmIENPTkZJR19QVEVfNjRCSVQKKyNpZmRlZiBDT05GSUdfU01QCisJc3ViZglyMTAscjYscjgJCS8qIGNyZWF0ZSBmYWxzZSBkYXRhIGRlcGVuZGVuY3kgKi8KKwlzdWJpCXIxMCxyMTAsUFRFX0ZMQUdTX09GRlNFVAorCWx3engJcjEwLHI2LHIxMAkJLyogR2V0IHVwcGVyIFBURSB3b3JkICovCisjZWxzZQorCWx3eglyMTAsLVBURV9GTEFHU19PRkZTRVQocjgpCisjZW5kaWYgLyogQ09ORklHX1NNUCAqLworI2VuZGlmIC8qIENPTkZJR19QVEVfNjRCSVQgKi8KIAlvcmkJcjUscjYsX1BBR0VfSEFTSFBURQogCXN0d2N4LglyNSwwLHI4CiAJYm5lLQkxYgpAQCAtMjQ2LDEzICsyODUsMTUgQEAKIAogOToKICNpZmRlZiBDT05GSUdfU01QCisJYWRkaXMJcjYscjcsbW11X2hhc2hfbG9ja0BoYQorCWFkZGkJcjYscjYsbW11X2hhc2hfbG9ja0BsCiAJZWllaW8KIAlsaQlyMCwwCi0Jc3R3CXIwLDAocjkpCQkvKiBjbGVhciBtbXVfaGFzaF9sb2NrICovCisJc3R3CXIwLDAocjYpCQkvKiBjbGVhciBtbXVfaGFzaF9sb2NrICovCiAjZW5kaWYKIAogCS8qIHJlZW5hYmxlIGludGVycnVwdHMgYW5kIERSICovCi0JbXRtc3IJcjEwCisJbXRtc3IJcjkKIAlTWU5DXzYwMQogCWlzeW5jCiAKQEAgLTI2Nyw3ICszMDgsOCBAQAogICogcjUgY29udGFpbnMgdGhlIGxpbnV4IFBURSwgcjYgY29udGFpbnMgdGhlIG9sZCB2YWx1ZSBvZiB0aGUKICAqIGxpbnV4IFBURSAoYmVmb3JlIHNldHRpbmcgX1BBR0VfSEFTSFBURSkgYW5kIHI3IGNvbnRhaW5zIHRoZQogICogb2Zmc2V0IHRvIGJlIGFkZGVkIHRvIGFkZHJlc3NlcyAoMCBpZiB0aGUgTU1VIGlzIG9uLAotICogLUtFUk5FTEJBU0UgaWYgaXQgaXMgb2ZmKS4KKyAqIC1LRVJORUxCQVNFIGlmIGl0IGlzIG9mZikuICByMTAgY29udGFpbnMgdGhlIHVwcGVyIGhhbGYgb2YKKyAqIHRoZSBQVEUgaWYgQ09ORklHX1BURV82NEJJVC4KICAqIE9uIFNNUCwgdGhlIGNhbGxlciBzaG91bGQgaGF2ZSB0aGUgbW11X2hhc2hfbG9jayBoZWxkLgogICogV2UgYXNzdW1lIHRoYXQgdGhlIGNhbGxlciBoYXMgKG9yIHdpbGwpIHNldCB0aGUgX1BBR0VfSEFTSFBURQogICogYml0IGluIHRoZSBsaW51eCBQVEUgaW4gbWVtb3J5LiAgVGhlIHZhbHVlIHBhc3NlZCBpbiByNiBzaG91bGQKQEAgLTI4NSw3ICszMjcsNyBAQAogSGFzaF9tc2sgPSAoKCgxIDw8IEhhc2hfYml0cykgLSAxKSAqIDY0KQogCiAvKiBkZWZpbmVzIGZvciB0aGUgUFRFIGZvcm1hdCBmb3IgMzItYml0IFBQQ3MgKi8KLSNkZWZpbmUgUFRFX1NJWkUJOAorI2RlZmluZSBIUFRFX1NJWkUJOAogI2RlZmluZSBQVEVHX1NJWkUJNjQKICNkZWZpbmUgTEdfUFRFR19TSVpFCTYKICNkZWZpbmUgTERQVEV1CQlsd3p1CkBAIC0zMTMsNiArMzU1LDExIEBACiBCRUdJTl9GVFJfU0VDVElPTgogCW9yaQlyOCxyOCxfUEFHRV9DT0hFUkVOVAkvKiBzZXQgTSAoY29oZXJlbmNlIHJlcXVpcmVkKSAqLwogRU5EX0ZUUl9TRUNUSU9OX0lGU0VUKENQVV9GVFJfTkVFRF9DT0hFUkVOVCkKKyNpZmRlZiBDT05GSUdfUFRFXzY0QklUCisJLyogUHV0IHRoZSBYUE4gYml0cyBpbnRvIHRoZSBQVEUgKi8KKwlybHdpbWkJcjgscjEwLDgsMjAsMjIKKwlybHdpbWkJcjgscjEwLDIsMjksMjkKKyNlbmRpZgogCiAJLyogQ29uc3RydWN0IHRoZSBoaWdoIHdvcmQgb2YgdGhlIFBQQy1zdHlsZSBQVEUgKHI1KSAqLwogCXJsd2lubQlyNSxyMyw3LDEsMjQJCS8qIHB1dCBWU0lEIGluIDB4N2ZmZmZmODAgYml0cyAqLwpAQCAtMzQyLDggKzM4OSw4IEBACiAKIAkvKiBTZWFyY2ggdGhlIHByaW1hcnkgUFRFRyBmb3IgYSBQVEUgd2hvc2UgMXN0IChkKXdvcmQgbWF0Y2hlcyByNSAqLwogCW10Y3RyCXIwCi0JYWRkaQlyNCxyMywtUFRFX1NJWkUKLTE6CUxEUFRFdQlyNixQVEVfU0laRShyNCkJCS8qIGdldCBuZXh0IFBURSAqLworCWFkZGkJcjQscjMsLUhQVEVfU0laRQorMToJTERQVEV1CXI2LEhQVEVfU0laRShyNCkJLyogZ2V0IG5leHQgUFRFICovCiAJQ01QUFRFCTAscjYscjUKIAliZG56ZgkyLDFiCQkJLyogbG9vcCB3aGlsZSBjdHIgIT0gMCAmJiAhY3IwLmVxICovCiAJYmVxKwlmb3VuZF9zbG90CkBAIC0zNTMsOSArNDAwLDkgQEAKIF9HTE9CQUwoaGFzaF9wYWdlX3BhdGNoX0IpCiAJeG9yaXMJcjQscjMsSGFzaF9tc2s+PjE2CS8qIGNvbXB1dGUgc2Vjb25kYXJ5IGhhc2ggKi8KIAl4b3JpCXI0LHI0LCgtUFRFR19TSVpFICYgMHhmZmZmKQotCWFkZGkJcjQscjQsLVBURV9TSVpFCisJYWRkaQlyNCxyNCwtSFBURV9TSVpFCiAJbXRjdHIJcjAKLTI6CUxEUFRFdQlyNixQVEVfU0laRShyNCkKKzI6CUxEUFRFdQlyNixIUFRFX1NJWkUocjQpCiAJQ01QUFRFCTAscjYscjUKIAliZG56ZgkyLDJiCiAJYmVxKwlmb3VuZF9zbG90CkBAIC0zNjMsOCArNDEwLDggQEAKIAogCS8qIFNlYXJjaCB0aGUgcHJpbWFyeSBQVEVHIGZvciBhbiBlbXB0eSBzbG90ICovCiAxMDoJbXRjdHIJcjAKLQlhZGRpCXI0LHIzLC1QVEVfU0laRQkJLyogc2VhcmNoIHByaW1hcnkgUFRFRyAqLwotMToJTERQVEV1CXI2LFBURV9TSVpFKHI0KQkJLyogZ2V0IG5leHQgUFRFICovCisJYWRkaQlyNCxyMywtSFBURV9TSVpFCS8qIHNlYXJjaCBwcmltYXJ5IFBURUcgKi8KKzE6CUxEUFRFdQlyNixIUFRFX1NJWkUocjQpCS8qIGdldCBuZXh0IFBURSAqLwogCVRTVF9WKHI2KQkJCS8qIHRlc3QgdmFsaWQgYml0ICovCiAJYmRuemYJMiwxYgkJCS8qIGxvb3Agd2hpbGUgY3RyICE9IDAgJiYgIWNyMC5lcSAqLwogCWJlcSsJZm91bmRfZW1wdHkKQEAgLTM4MCw5ICs0MjcsOSBAQAogX0dMT0JBTChoYXNoX3BhZ2VfcGF0Y2hfQykKIAl4b3JpcwlyNCxyMyxIYXNoX21zaz4+MTYJLyogY29tcHV0ZSBzZWNvbmRhcnkgaGFzaCAqLwogCXhvcmkJcjQscjQsKC1QVEVHX1NJWkUgJiAweGZmZmYpCi0JYWRkaQlyNCxyNCwtUFRFX1NJWkUKKwlhZGRpCXI0LHI0LC1IUFRFX1NJWkUKIAltdGN0cglyMAotMjoJTERQVEV1CXI2LFBURV9TSVpFKHI0KQorMjoJTERQVEV1CXI2LEhQVEVfU0laRShyNCkKIAlUU1RfVihyNikKIAliZG56ZgkyLDJiCiAJYmVxKwlmb3VuZF9lbXB0eQpAQCAtNDA5LDExICs0NTYsMTEgQEAKIAogMToJYWRkaXMJcjQscjcsbmV4dF9zbG90QGhhCQkvKiBnZXQgbmV4dCBldmljdCBzbG90ICovCiAJbHd6CXI2LG5leHRfc2xvdEBsKHI0KQotCWFkZGkJcjYscjYsUFRFX1NJWkUJCQkvKiBzZWFyY2ggZm9yIGNhbmRpZGF0ZSAqLwotCWFuZGkuCXI2LHI2LDcqUFRFX1NJWkUKKwlhZGRpCXI2LHI2LEhQVEVfU0laRQkJCS8qIHNlYXJjaCBmb3IgY2FuZGlkYXRlICovCisJYW5kaS4JcjYscjYsNypIUFRFX1NJWkUKIAlzdHcJcjYsbmV4dF9zbG90QGwocjQpCiAJYWRkCXI0LHIzLHI2Ci0JTERQVEUJcjAsUFRFX1NJWkUvMihyNCkJCS8qIGdldCBQVEUgc2Vjb25kIHdvcmQgKi8KKwlMRFBURQlyMCxIUFRFX1NJWkUvMihyNCkJCS8qIGdldCBQVEUgc2Vjb25kIHdvcmQgKi8KIAljbHJyd2kJcjAscjAsMTIKIAlsaXMJcjYsZXRleHRAaAogCW9yaQlyNixyNixldGV4dEBsCQkJLyogZ2V0IGV0ZXh0ICovCkBAIC00MjYsNyArNDczLDcgQEAKIGZvdW5kX2VtcHR5OgogCVNUUFRFCXI1LDAocjQpCiBmb3VuZF9zbG90OgotCVNUUFRFCXI4LFBURV9TSVpFLzIocjQpCisJU1RQVEUJcjgsSFBURV9TSVpFLzIocjQpCiAKICNlbHNlIC8qIENPTkZJR19TTVAgKi8KIC8qCkBAIC00NTIsNyArNDk5LDcgQEAKIAlTVFBURQlyNSwwKHI0KQogCXN5bmMKIAlUTEJTWU5DCi0JU1RQVEUJcjgsUFRFX1NJWkUvMihyNCkgLyogcHV0IGluIGNvcnJlY3QgUlBOLCBXSU1HLCBQUCBiaXRzICovCisJU1RQVEUJcjgsSFBURV9TSVpFLzIocjQpIC8qIHB1dCBpbiBjb3JyZWN0IFJQTiwgV0lNRywgUFAgYml0cyAqLwogCXN5bmMKIAlTRVRfVihyNSkKIAlTVFBURQlyNSwwKHI0KQkvKiBmaW5hbGx5IHNldCBWIGJpdCBpbiBQVEUgKi8KQEAgLTQ5OSwxNCArNTQ2LDE4IEBACiAJaXN5bmMKIAogCS8qIEZpcnN0IGZpbmQgYSBQVEUgaW4gdGhlIHJhbmdlIHRoYXQgaGFzIF9QQUdFX0hBU0hQVEUgc2V0ICovCisjaWZuZGVmIENPTkZJR19QVEVfNjRCSVQKIAlybHdpbWkJcjUscjQsMjIsMjAsMjkKLTE6CWx3eglyMCwwKHI1KQorI2Vsc2UKKwlybHdpbWkJcjUscjQsMjMsMjAsMjgKKyNlbmRpZgorMToJbHd6CXIwLFBURV9GTEFHU19PRkZTRVQocjUpCiAJY21wd2kJY3IxLHI2LDEKIAlhbmRpLglyMCxyMCxfUEFHRV9IQVNIUFRFCiAJYm5lCTJmCiAJYmxlCWNyMSwxOWYKIAlhZGRpCXI0LHI0LDB4MTAwMAotCWFkZGkJcjUscjUsNAorCWFkZGkJcjUscjUsUFRFX1NJWkUKIAlhZGRpCXI2LHI2LC0xCiAJYgkxYgogCkBAIC01NDUsNyArNTk2LDEwIEBACiAJICogYWxyZWFkeSBjbGVhciwgd2UncmUgZG9uZSAoZm9yIHRoaXMgcHRlKS4gIElmIG5vdCwKIAkgKiBjbGVhciBpdCAoYXRvbWljYWxseSkgYW5kIHByb2NlZWQuICAtLSBwYXVsdXMuCiAJICovCi0zMzoJbHdhcngJcjgsMCxyNQkJCS8qIGZldGNoIHRoZSBwdGUgKi8KKyNpZiAoUFRFX0ZMQUdTX09GRlNFVCAhPSAwKQorCWFkZGkJcjUscjUsUFRFX0ZMQUdTX09GRlNFVAorI2VuZGlmCiszMzoJbHdhcngJcjgsMCxyNQkJCS8qIGZldGNoIHRoZSBwdGUgZmxhZ3Mgd29yZCAqLwogCWFuZGkuCXIwLHI4LF9QQUdFX0hBU0hQVEUKIAliZXEJOGYJCQkvKiBkb25lIGlmIEhBU0hQVEUgaXMgYWxyZWFkeSBjbGVhciAqLwogCXJsd2lubQlyOCxyOCwwLDMxLDI5CQkvKiBjbGVhciBIQVNIUFRFIGJpdCAqLwpAQCAtNTYyLDggKzYxNiw4IEBACiAJLyogU2VhcmNoIHRoZSBwcmltYXJ5IFBURUcgZm9yIGEgUFRFIHdob3NlIDFzdCAoZCl3b3JkIG1hdGNoZXMgcjUgKi8KIAlsaQlyMCw4CQkJLyogUFRFcy9ncm91cCAqLwogCW10Y3RyCXIwCi0JYWRkaQlyMTIscjgsLVBURV9TSVpFCi0xOglMRFBURXUJcjAsUFRFX1NJWkUocjEyKQkvKiBnZXQgbmV4dCBQVEUgKi8KKwlhZGRpCXIxMixyOCwtSFBURV9TSVpFCisxOglMRFBURXUJcjAsSFBURV9TSVpFKHIxMikJLyogZ2V0IG5leHQgUFRFICovCiAJQ01QUFRFCTAscjAscjExCiAJYmRuemYJMiwxYgkJCS8qIGxvb3Agd2hpbGUgY3RyICE9IDAgJiYgIWNyMC5lcSAqLwogCWJlcSsJM2YKQEAgLTU3NCw5ICs2MjgsOSBAQAogX0dMT0JBTChmbHVzaF9oYXNoX3BhdGNoX0IpCiAJeG9yaXMJcjEyLHI4LEhhc2hfbXNrPj4xNgkvKiBjb21wdXRlIHNlY29uZGFyeSBoYXNoICovCiAJeG9yaQlyMTIscjEyLCgtUFRFR19TSVpFICYgMHhmZmZmKQotCWFkZGkJcjEyLHIxMiwtUFRFX1NJWkUKKwlhZGRpCXIxMixyMTIsLUhQVEVfU0laRQogCW10Y3RyCXIwCi0yOglMRFBURXUJcjAsUFRFX1NJWkUocjEyKQorMjoJTERQVEV1CXIwLEhQVEVfU0laRShyMTIpCiAJQ01QUFRFCTAscjAscjExCiAJYmRuemYJMiwyYgogCXhvcmkJcjExLHIxMSxQVEVfSAkJLyogY2xlYXIgSCBhZ2FpbiAqLwpAQCAtNTkwLDcgKzY0NCw3IEBACiAKIDg6CWJsZQljcjEsOWYJCQkvKiBpZiBhbGwgcHRlcyBjaGVja2VkICovCiA4MToJYWRkaQlyNixyNiwtMQotCWFkZGkJcjUscjUsNAkJCS8qIGFkdmFuY2UgdG8gbmV4dCBwdGUgKi8KKwlhZGRpCXI1LHI1LFBURV9TSVpFCiAJYWRkaQlyNCxyNCwweDEwMDAKIAlsd3oJcjAsMChyNSkJCS8qIGNoZWNrIG5leHQgcHRlICovCiAJY21wd2kJY3IxLHI2LDEKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9tbS9oYXNoX3V0aWxzXzY0LmMgYi9hcmNoL3Bvd2VycGMvbW0vaGFzaF91dGlsc182NC5jCmluZGV4IDg5MjBlZWEuLjVjNjRhZjEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9tbS9oYXNoX3V0aWxzXzY0LmMKKysrIGIvYXJjaC9wb3dlcnBjL21tL2hhc2hfdXRpbHNfNjQuYwpAQCAtMTk0LDcgKzE5NCw3IEBACiAJCXVuc2lnbmVkIGxvbmcgdHByb3QgPSBwcm90OwogCiAJCS8qIE1ha2Uga2VybmVsIHRleHQgZXhlY3V0YWJsZSAqLwotCQlpZiAoaW5fa2VybmVsX3RleHQodmFkZHIpKQorCQlpZiAob3ZlcmxhcHNfa2VybmVsX3RleHQodmFkZHIsIHZhZGRyICsgc3RlcCkpCiAJCQl0cHJvdCAmPSB+SFBURV9SX047CiAKIAkJaGFzaCA9IGhwdF9oYXNoKHZhLCBzaGlmdCwgc3NpemUpOwpAQCAtMzQ4LDYgKzM0OCw3IEBACiAJcmV0dXJuIDA7CiB9CiAKKyNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFCiAvKiBTY2FuIGZvciAxNkcgbWVtb3J5IGJsb2NrcyB0aGF0IGhhdmUgYmVlbiBzZXQgYXNpZGUgZm9yIGh1Z2UgcGFnZXMKICAqIGFuZCByZXNlcnZlIHRob3NlIGJsb2NrcyBmb3IgMTZHIGh1Z2UgcGFnZXMuCiAgKi8KQEAgLTM4NSw2ICszODYsNyBAQAogCWFkZF9ncGFnZShwaHlzX2FkZHIsIGJsb2NrX3NpemUsIGV4cGVjdGVkX3BhZ2VzKTsKIAlyZXR1cm4gMDsKIH0KKyNlbmRpZiAvKiBDT05GSUdfSFVHRVRMQl9QQUdFICovCiAKIHN0YXRpYyB2b2lkIF9faW5pdCBodGFiX2luaXRfcGFnZV9zaXplcyh2b2lkKQogewpAQCAtNTM5LDcgKzU0MSw3IEBACiB2b2lkIGNyZWF0ZV9zZWN0aW9uX21hcHBpbmcodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpCiB7CiAJQlVHX09OKGh0YWJfYm9sdF9tYXBwaW5nKHN0YXJ0LCBlbmQsIF9fcGEoc3RhcnQpLAotCQkJCSBQQUdFX0tFUk5FTCwgbW11X2xpbmVhcl9wc2l6ZSwKKwkJCQkgcGdwcm90X3ZhbChQQUdFX0tFUk5FTCksIG1tdV9saW5lYXJfcHNpemUsCiAJCQkJIG1tdV9rZXJuZWxfc3NpemUpKTsKIH0KIApAQCAtNjQ3LDcgKzY0OSw3IEBACiAJCW10c3ByKFNQUk5fU0RSMSwgX1NEUjEpOwogCX0KIAotCXByb3QgPSBQQUdFX0tFUk5FTDsKKwlwcm90ID0gcGdwcm90X3ZhbChQQUdFX0tFUk5FTCk7CiAKICNpZmRlZiBDT05GSUdfREVCVUdfUEFHRUFMTE9DCiAJbGluZWFyX21hcF9oYXNoX2NvdW50ID0gbG1iX2VuZF9vZl9EUkFNKCkgPj4gUEFHRV9TSElGVDsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9tbS9odWdldGxicGFnZS5jIGIvYXJjaC9wb3dlcnBjL21tL2h1Z2V0bGJwYWdlLmMKaW5kZXggZjFjMmQ1NS4uYTExNzAyNCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL21tL2h1Z2V0bGJwYWdlLmMKKysrIGIvYXJjaC9wb3dlcnBjL21tL2h1Z2V0bGJwYWdlLmMKQEAgLTEyOCwyOSArMTI4LDM3IEBACiAJcmV0dXJuIDA7CiB9CiAKLS8qIEJhc2UgcGFnZSBzaXplIGFmZmVjdHMgaG93IHdlIHdhbGsgaHVnZXRsYiBwYWdlIHRhYmxlcyAqLwotI2lmZGVmIENPTkZJR19QUENfNjRLX1BBR0VTCi0jZGVmaW5lIGhwbWRfb2Zmc2V0KHB1ZCwgYWRkciwgaCkJcG1kX29mZnNldChwdWQsIGFkZHIpCi0jZGVmaW5lIGhwbWRfYWxsb2MobW0sIHB1ZCwgYWRkciwgaCkJcG1kX2FsbG9jKG1tLCBwdWQsIGFkZHIpCi0jZWxzZQotc3RhdGljIGlubGluZQotcG1kX3QgKmhwbWRfb2Zmc2V0KHB1ZF90ICpwdWQsIHVuc2lnbmVkIGxvbmcgYWRkciwgc3RydWN0IGhzdGF0ZSAqaHN0YXRlKQorCitzdGF0aWMgcHVkX3QgKmhwdWRfb2Zmc2V0KHBnZF90ICpwZ2QsIHVuc2lnbmVkIGxvbmcgYWRkciwgc3RydWN0IGhzdGF0ZSAqaHN0YXRlKQogewotCWlmIChodWdlX3BhZ2Vfc2hpZnQoaHN0YXRlKSA9PSBQQUdFX1NISUZUXzY0SykKKwlpZiAoaHVnZV9wYWdlX3NoaWZ0KGhzdGF0ZSkgPCBQVURfU0hJRlQpCisJCXJldHVybiBwdWRfb2Zmc2V0KHBnZCwgYWRkcik7CisJZWxzZQorCQlyZXR1cm4gKHB1ZF90ICopIHBnZDsKK30KK3N0YXRpYyBwdWRfdCAqaHB1ZF9hbGxvYyhzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcGdkX3QgKnBnZCwgdW5zaWduZWQgbG9uZyBhZGRyLAorCQkJIHN0cnVjdCBoc3RhdGUgKmhzdGF0ZSkKK3sKKwlpZiAoaHVnZV9wYWdlX3NoaWZ0KGhzdGF0ZSkgPCBQVURfU0hJRlQpCisJCXJldHVybiBwdWRfYWxsb2MobW0sIHBnZCwgYWRkcik7CisJZWxzZQorCQlyZXR1cm4gKHB1ZF90ICopIHBnZDsKK30KK3N0YXRpYyBwbWRfdCAqaHBtZF9vZmZzZXQocHVkX3QgKnB1ZCwgdW5zaWduZWQgbG9uZyBhZGRyLCBzdHJ1Y3QgaHN0YXRlICpoc3RhdGUpCit7CisJaWYgKGh1Z2VfcGFnZV9zaGlmdChoc3RhdGUpIDwgUE1EX1NISUZUKQogCQlyZXR1cm4gcG1kX29mZnNldChwdWQsIGFkZHIpOwogCWVsc2UKIAkJcmV0dXJuIChwbWRfdCAqKSBwdWQ7CiB9Ci1zdGF0aWMgaW5saW5lCi1wbWRfdCAqaHBtZF9hbGxvYyhzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcHVkX3QgKnB1ZCwgdW5zaWduZWQgbG9uZyBhZGRyLAotCQkgIHN0cnVjdCBoc3RhdGUgKmhzdGF0ZSkKK3N0YXRpYyBwbWRfdCAqaHBtZF9hbGxvYyhzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcHVkX3QgKnB1ZCwgdW5zaWduZWQgbG9uZyBhZGRyLAorCQkJIHN0cnVjdCBoc3RhdGUgKmhzdGF0ZSkKIHsKLQlpZiAoaHVnZV9wYWdlX3NoaWZ0KGhzdGF0ZSkgPT0gUEFHRV9TSElGVF82NEspCisJaWYgKGh1Z2VfcGFnZV9zaGlmdChoc3RhdGUpIDwgUE1EX1NISUZUKQogCQlyZXR1cm4gcG1kX2FsbG9jKG1tLCBwdWQsIGFkZHIpOwogCWVsc2UKIAkJcmV0dXJuIChwbWRfdCAqKSBwdWQ7CiB9Ci0jZW5kaWYKIAogLyogQnVpbGQgbGlzdCBvZiBhZGRyZXNzZXMgb2YgZ2lnYW50aWMgcGFnZXMuICBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgaW4gZWFybHkKICAqIGJvb3QgYmVmb3JlIHRoZSBidWRkeSBvciBib290bWVtIGFsbG9jYXRvciBpcyBzZXR1cC4KQEAgLTIwNCw3ICsyMTIsNyBAQAogCiAJcGcgPSBwZ2Rfb2Zmc2V0KG1tLCBhZGRyKTsKIAlpZiAoIXBnZF9ub25lKCpwZykpIHsKLQkJcHUgPSBwdWRfb2Zmc2V0KHBnLCBhZGRyKTsKKwkJcHUgPSBocHVkX29mZnNldChwZywgYWRkciwgaHN0YXRlKTsKIAkJaWYgKCFwdWRfbm9uZSgqcHUpKSB7CiAJCQlwbSA9IGhwbWRfb2Zmc2V0KHB1LCBhZGRyLCBoc3RhdGUpOwogCQkJaWYgKCFwbWRfbm9uZSgqcG0pKQpAQCAtMjMzLDcgKzI0MSw3IEBACiAJYWRkciAmPSBoc3RhdGUtPm1hc2s7CiAKIAlwZyA9IHBnZF9vZmZzZXQobW0sIGFkZHIpOwotCXB1ID0gcHVkX2FsbG9jKG1tLCBwZywgYWRkcik7CisJcHUgPSBocHVkX2FsbG9jKG1tLCBwZywgYWRkciwgaHN0YXRlKTsKIAogCWlmIChwdSkgewogCQlwbSA9IGhwbWRfYWxsb2MobW0sIHB1LCBhZGRyLCBoc3RhdGUpOwpAQCAtMzE2LDEzICszMjQsNyBAQAogCXB1ZCA9IHB1ZF9vZmZzZXQocGdkLCBhZGRyKTsKIAlkbyB7CiAJCW5leHQgPSBwdWRfYWRkcl9lbmQoYWRkciwgZW5kKTsKLSNpZmRlZiBDT05GSUdfUFBDXzY0S19QQUdFUwotCQlpZiAocHVkX25vbmVfb3JfY2xlYXJfYmFkKHB1ZCkpCi0JCQljb250aW51ZTsKLQkJaHVnZXRsYl9mcmVlX3BtZF9yYW5nZSh0bGIsIHB1ZCwgYWRkciwgbmV4dCwgZmxvb3IsIGNlaWxpbmcsCi0JCQkJICAgICAgIHBzaXplKTsKLSNlbHNlCi0JCWlmIChzaGlmdCA9PSBQQUdFX1NISUZUXzY0SykgeworCQlpZiAoc2hpZnQgPCBQTURfU0hJRlQpIHsKIAkJCWlmIChwdWRfbm9uZV9vcl9jbGVhcl9iYWQocHVkKSkKIAkJCQljb250aW51ZTsKIAkJCWh1Z2V0bGJfZnJlZV9wbWRfcmFuZ2UodGxiLCBwdWQsIGFkZHIsIG5leHQsIGZsb29yLApAQCAtMzMyLDcgKzMzNCw2IEBACiAJCQkJY29udGludWU7CiAJCQlmcmVlX2h1Z2VwdGVfcmFuZ2UodGxiLCAoaHVnZXBkX3QgKilwdWQsIHBzaXplKTsKIAkJfQotI2VuZGlmCiAJfSB3aGlsZSAocHVkKyssIGFkZHIgPSBuZXh0LCBhZGRyICE9IGVuZCk7CiAKIAlzdGFydCAmPSBQR0RJUl9NQVNLOwpAQCAtNDIyLDkgKzQyMywxNSBAQAogCQlwc2l6ZSA9IGdldF9zbGljZV9wc2l6ZSh0bGItPm1tLCBhZGRyKTsKIAkJQlVHX09OKCFtbXVfaHVnZV9wc2l6ZXNbcHNpemVdKTsKIAkJbmV4dCA9IHBnZF9hZGRyX2VuZChhZGRyLCBlbmQpOwotCQlpZiAocGdkX25vbmVfb3JfY2xlYXJfYmFkKHBnZCkpCi0JCQljb250aW51ZTsKLQkJaHVnZXRsYl9mcmVlX3B1ZF9yYW5nZSh0bGIsIHBnZCwgYWRkciwgbmV4dCwgZmxvb3IsIGNlaWxpbmcpOworCQlpZiAobW11X3BzaXplX3RvX3NoaWZ0KHBzaXplKSA8IFBVRF9TSElGVCkgeworCQkJaWYgKHBnZF9ub25lX29yX2NsZWFyX2JhZChwZ2QpKQorCQkJCWNvbnRpbnVlOworCQkJaHVnZXRsYl9mcmVlX3B1ZF9yYW5nZSh0bGIsIHBnZCwgYWRkciwgbmV4dCwgZmxvb3IsIGNlaWxpbmcpOworCQl9IGVsc2UgeworCQkJaWYgKHBnZF9ub25lKCpwZ2QpKQorCQkJCWNvbnRpbnVlOworCQkJZnJlZV9odWdlcHRlX3JhbmdlKHRsYiwgKGh1Z2VwZF90ICopcGdkLCBwc2l6ZSk7CisJCX0KIAl9IHdoaWxlIChwZ2QrKywgYWRkciA9IG5leHQsIGFkZHIgIT0gZW5kKTsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL21tL2luaXRfNjQuYyBiL2FyY2gvcG93ZXJwYy9tbS9pbml0XzY0LmMKaW5kZXggMDM2ZmUyZi4uM2U2YTY1NCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL21tL2luaXRfNjQuYworKysgYi9hcmNoL3Bvd2VycGMvbW0vaW5pdF82NC5jCkBAIC0yMjgsOCArMjI4LDggQEAKIAkJCXN0YXJ0LCBwLCBfX3BhKHApKTsKIAogCQltYXBwZWQgPSBodGFiX2JvbHRfbWFwcGluZyhzdGFydCwgc3RhcnQgKyBwYWdlX3NpemUsIF9fcGEocCksCi0JCQkJCSAgIFBBR0VfS0VSTkVMLCBtbXVfdm1lbW1hcF9wc2l6ZSwKLQkJCQkJICAgbW11X2tlcm5lbF9zc2l6ZSk7CisJCQkJCSAgIHBncHJvdF92YWwoUEFHRV9LRVJORUwpLAorCQkJCQkgICBtbXVfdm1lbW1hcF9wc2l6ZSwgbW11X2tlcm5lbF9zc2l6ZSk7CiAJCUJVR19PTihtYXBwZWQgPCAwKTsKIAl9CiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9tbS9tZW0uYyBiL2FyY2gvcG93ZXJwYy9tbS9tZW0uYwppbmRleCAxYzkzYzI1Li5iOWUxYTFkIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvbW0vbWVtLmMKKysrIGIvYXJjaC9wb3dlcnBjL21tL21lbS5jCkBAIC03NSwxMSArNzUsMTAgQEAKIAogaW50IHBhZ2VfaXNfcmFtKHVuc2lnbmVkIGxvbmcgcGZuKQogewotCXVuc2lnbmVkIGxvbmcgcGFkZHIgPSAocGZuIDw8IFBBR0VfU0hJRlQpOwotCiAjaWZuZGVmIENPTkZJR19QUEM2NAkvKiBYWFggZm9yIG5vdyAqLwotCXJldHVybiBwYWRkciA8IF9fcGEoaGlnaF9tZW1vcnkpOworCXJldHVybiBwZm4gPCBtYXhfcGZuOwogI2Vsc2UKKwl1bnNpZ25lZCBsb25nIHBhZGRyID0gKHBmbiA8PCBQQUdFX1NISUZUKTsKIAlpbnQgaTsKIAlmb3IgKGk9MDsgaSA8IGxtYi5tZW1vcnkuY250OyBpKyspIHsKIAkJdW5zaWduZWQgbG9uZyBiYXNlOwpAQCAtMTM1LDIzICsxMzQsNiBAQAogCiAJcmV0dXJuIF9fYWRkX3BhZ2VzKHpvbmUsIHN0YXJ0X3BmbiwgbnJfcGFnZXMpOwogfQotCi0jaWZkZWYgQ09ORklHX01FTU9SWV9IT1RSRU1PVkUKLWludCByZW1vdmVfbWVtb3J5KHU2NCBzdGFydCwgdTY0IHNpemUpCi17Ci0JdW5zaWduZWQgbG9uZyBzdGFydF9wZm4sIGVuZF9wZm47Ci0JaW50IHJldDsKLQotCXN0YXJ0X3BmbiA9IHN0YXJ0ID4+IFBBR0VfU0hJRlQ7Ci0JZW5kX3BmbiA9IHN0YXJ0X3BmbiArIChzaXplID4+IFBBR0VfU0hJRlQpOwotCXJldCA9IG9mZmxpbmVfcGFnZXMoc3RhcnRfcGZuLCBlbmRfcGZuLCAxMjAgKiBIWik7Ci0JaWYgKHJldCkKLQkJZ290byBvdXQ7Ci0JLyogQXJjaC1zcGVjaWZpYyBjYWxscyBnbyBoZXJlIC0gbmV4dCBwYXRjaCAqLwotb3V0OgotCXJldHVybiByZXQ7Ci19Ci0jZW5kaWYgLyogQ09ORklHX01FTU9SWV9IT1RSRU1PVkUgKi8KICNlbmRpZiAvKiBDT05GSUdfTUVNT1JZX0hPVFBMVUcgKi8KIAogLyoKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9tbS9udW1hLmMgYi9hcmNoL3Bvd2VycGMvbW0vbnVtYS5jCmluZGV4IGQ5YTE4MTMuLjZjZjVjNzEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9tbS9udW1hLmMKKysrIGIvYXJjaC9wb3dlcnBjL21tL251bWEuYwpAQCAtODksNiArODksNDYgQEAKIAlyZXR1cm4gMDsKIH0KIAorLyoKKyAqIGdldF9hY3RpdmVfcmVnaW9uX3dvcmtfZm4gLSBBIGhlbHBlciBmdW5jdGlvbiBmb3IgZ2V0X25vZGVfYWN0aXZlX3JlZ2lvbgorICoJUmV0dXJucyBkYXRheCBzZXQgdG8gdGhlIHN0YXJ0X3BmbiBhbmQgZW5kX3BmbiBpZiB0aGV5IGNvbnRhaW4KKyAqCXRoZSBpbml0aWFsIHZhbHVlIG9mIGRhdGF4LT5zdGFydF9wZm4gYmV0d2VlbiB0aGVtCisgKiBAc3RhcnRfcGZuOiBzdGFydCBwYWdlKGluY2x1c2l2ZSkgb2YgcmVnaW9uIHRvIGNoZWNrCisgKiBAZW5kX3BmbjogZW5kIHBhZ2UoZXhjbHVzaXZlKSBvZiByZWdpb24gdG8gY2hlY2sKKyAqIEBkYXRheDogY29tZXMgaW4gd2l0aCAtPnN0YXJ0X3BmbiBzZXQgdG8gdmFsdWUgdG8gc2VhcmNoIGZvciBhbmQKKyAqCWdvZXMgb3V0IHdpdGggYWN0aXZlIHJhbmdlIGlmIGl0IGNvbnRhaW5zIGl0CisgKiBSZXR1cm5zIDEgaWYgc2VhcmNoIHZhbHVlIGlzIGluIHJhbmdlIGVsc2UgMAorICovCitzdGF0aWMgaW50IF9faW5pdCBnZXRfYWN0aXZlX3JlZ2lvbl93b3JrX2ZuKHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLAorCQkJCQl1bnNpZ25lZCBsb25nIGVuZF9wZm4sIHZvaWQgKmRhdGF4KQoreworCXN0cnVjdCBub2RlX2FjdGl2ZV9yZWdpb24gKmRhdGE7CisJZGF0YSA9IChzdHJ1Y3Qgbm9kZV9hY3RpdmVfcmVnaW9uICopZGF0YXg7CisKKwlpZiAoc3RhcnRfcGZuIDw9IGRhdGEtPnN0YXJ0X3BmbiAmJiBlbmRfcGZuID4gZGF0YS0+c3RhcnRfcGZuKSB7CisJCWRhdGEtPnN0YXJ0X3BmbiA9IHN0YXJ0X3BmbjsKKwkJZGF0YS0+ZW5kX3BmbiA9IGVuZF9wZm47CisJCXJldHVybiAxOworCX0KKwlyZXR1cm4gMDsKKworfQorCisvKgorICogZ2V0X25vZGVfYWN0aXZlX3JlZ2lvbiAtIFJldHVybiBhY3RpdmUgcmVnaW9uIGNvbnRhaW5pbmcgc3RhcnRfcGZuCisgKiBAc3RhcnRfcGZuOiBUaGUgcGFnZSB0byByZXR1cm4gdGhlIHJlZ2lvbiBmb3IuCisgKiBAbm9kZV9hcjogUmV0dXJuZWQgc2V0IHRvIHRoZSBhY3RpdmUgcmVnaW9uIGNvbnRhaW5pbmcgc3RhcnRfcGZuCisgKi8KK3N0YXRpYyB2b2lkIF9faW5pdCBnZXRfbm9kZV9hY3RpdmVfcmVnaW9uKHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLAorCQkgICAgICAgc3RydWN0IG5vZGVfYWN0aXZlX3JlZ2lvbiAqbm9kZV9hcikKK3sKKwlpbnQgbmlkID0gZWFybHlfcGZuX3RvX25pZChzdGFydF9wZm4pOworCisJbm9kZV9hci0+bmlkID0gbmlkOworCW5vZGVfYXItPnN0YXJ0X3BmbiA9IHN0YXJ0X3BmbjsKKwl3b3JrX3dpdGhfYWN0aXZlX3JlZ2lvbnMobmlkLCBnZXRfYWN0aXZlX3JlZ2lvbl93b3JrX2ZuLCBub2RlX2FyKTsKK30KKwogc3RhdGljIHZvaWQgX19jcHVpbml0IG1hcF9jcHVfdG9fbm9kZShpbnQgY3B1LCBpbnQgbm9kZSkKIHsKIAludW1hX2NwdV9sb29rdXBfdGFibGVbY3B1XSA9IG5vZGU7CkBAIC0xNTAsNiArMTkwLDIxIEBACiAJcmV0dXJuIG9mX2dldF9wcm9wZXJ0eShkZXYsICJpYm0sYXNzb2NpYXRpdml0eSIsIE5VTEwpOwogfQogCisvKgorICogUmV0dXJucyB0aGUgcHJvcGVydHkgbGludXgsZHJjb25mLXVzYWJsZS1tZW1vcnkgaWYKKyAqIGl0IGV4aXN0cyAodGhlIHByb3BlcnR5IGV4aXN0cyBvbmx5IGluIGtleGVjL2tkdW1wIGtlcm5lbHMsCisgKiBhZGRlZCBieSBrZXhlYy10b29scykKKyAqLworc3RhdGljIGNvbnN0IHUzMiAqb2ZfZ2V0X3VzYWJsZV9tZW1vcnkoc3RydWN0IGRldmljZV9ub2RlICptZW1vcnkpCit7CisJY29uc3QgdTMyICpwcm9wOworCXUzMiBsZW47CisJcHJvcCA9IG9mX2dldF9wcm9wZXJ0eShtZW1vcnksICJsaW51eCxkcmNvbmYtdXNhYmxlLW1lbW9yeSIsICZsZW4pOworCWlmICghcHJvcCB8fCBsZW4gPCBzaXplb2YodW5zaWduZWQgaW50KSkKKwkJcmV0dXJuIDA7CisJcmV0dXJuIHByb3A7Cit9CisKIC8qIFJldHVybnMgbmlkIGluIHRoZSByYW5nZSBbMC4uTUFYX05VTU5PREVTLTFdLCBvciAtMSBpZiBubyB1c2VmdWwgbnVtYQogICogaW5mbyBpcyBmb3VuZC4KICAqLwpAQCAtNDg3LDE0ICs1NDIsMjkgQEAKIH0KIAogLyoKKyAqIFJlYWRzIHRoZSBjb3VudGVyIGZvciBhIGdpdmVuIGVudHJ5IGluCisgKiBsaW51eCxkcmNvbmYtdXNhYmxlLW1lbW9yeSBwcm9wZXJ0eQorICovCitzdGF0aWMgaW5saW5lIGludCBfX2luaXQgcmVhZF91c21fcmFuZ2VzKGNvbnN0IHUzMiAqKnVzbSkKK3sKKwkvKgorCSAqIEZvciBlYWNoIGxtYiBpbiBpYm0sZHluYW1pYy1tZW1vcnkgYSBjb3JyZXNwb25kaW5nCisJICogZW50cnkgaW4gbGludXgsZHJjb25mLXVzYWJsZS1tZW1vcnkgcHJvcGVydHkgY29udGFpbnMKKwkgKiBhIGNvdW50ZXIgZm9sbG93ZWQgYnkgdGhhdCBtYW55IChiYXNlLCBzaXplKSBkdXBsZS4KKwkgKiByZWFkIHRoZSBjb3VudGVyIGZyb20gbGludXgsZHJjb25mLXVzYWJsZS1tZW1vcnkKKwkgKi8KKwlyZXR1cm4gcmVhZF9uX2NlbGxzKG5fbWVtX3NpemVfY2VsbHMsIHVzbSk7Cit9CisKKy8qCiAgKiBFeHRyYWN0IE5VTUEgaW5mb3JtYXRpb24gZnJvbSB0aGUgaWJtLGR5bmFtaWMtcmVjb25maWd1cmF0aW9uLW1lbW9yeQogICogbm9kZS4gIFRoaXMgYXNzdW1lcyBuX21lbV97YWRkcixzaXplfV9jZWxscyBoYXZlIGJlZW4gc2V0LgogICovCiBzdGF0aWMgdm9pZCBfX2luaXQgcGFyc2VfZHJjb25mX21lbW9yeShzdHJ1Y3QgZGV2aWNlX25vZGUgKm1lbW9yeSkKIHsKLQljb25zdCB1MzIgKmRtOwotCXVuc2lnbmVkIGludCBuLCByYzsKLQl1bnNpZ25lZCBsb25nIGxtYl9zaXplLCBzaXplOworCWNvbnN0IHUzMiAqZG0sICp1c207CisJdW5zaWduZWQgaW50IG4sIHJjLCByYW5nZXMsIGlzX2tleGVjX2tkdW1wID0gMDsKKwl1bnNpZ25lZCBsb25nIGxtYl9zaXplLCBiYXNlLCBzaXplLCBzejsKIAlpbnQgbmlkOwogCXN0cnVjdCBhc3NvY19hcnJheXMgYWE7CiAKQEAgLTUxMCw2ICs1ODAsMTEgQEAKIAlpZiAocmMpCiAJCXJldHVybjsKIAorCS8qIGNoZWNrIGlmIHRoaXMgaXMgYSBrZXhlYy9rZHVtcCBrZXJuZWwgKi8KKwl1c20gPSBvZl9nZXRfdXNhYmxlX21lbW9yeShtZW1vcnkpOworCWlmICh1c20gIT0gTlVMTCkKKwkJaXNfa2V4ZWNfa2R1bXAgPSAxOworCiAJZm9yICg7IG4gIT0gMDsgLS1uKSB7CiAJCXN0cnVjdCBvZl9kcmNvbmZfY2VsbCBkcm1lbTsKIApAQCAtNTIxLDIxICs1OTYsMzEgQEAKIAkJICAgIHx8ICEoZHJtZW0uZmxhZ3MgJiBEUkNPTkZfTUVNX0FTU0lHTkVEKSkKIAkJCWNvbnRpbnVlOwogCi0JCW5pZCA9IG9mX2RyY29uZl90b19uaWRfc2luZ2xlKCZkcm1lbSwgJmFhKTsKKwkJYmFzZSA9IGRybWVtLmJhc2VfYWRkcjsKKwkJc2l6ZSA9IGxtYl9zaXplOworCQlyYW5nZXMgPSAxOwogCi0JCWZha2VfbnVtYV9jcmVhdGVfbmV3X25vZGUoCi0JCQkJKChkcm1lbS5iYXNlX2FkZHIgKyBsbWJfc2l6ZSkgPj4gUEFHRV9TSElGVCksCisJCWlmIChpc19rZXhlY19rZHVtcCkgeworCQkJcmFuZ2VzID0gcmVhZF91c21fcmFuZ2VzKCZ1c20pOworCQkJaWYgKCFyYW5nZXMpIC8qIHRoZXJlIGFyZSBubyAoYmFzZSwgc2l6ZSkgZHVwbGUgKi8KKwkJCQljb250aW51ZTsKKwkJfQorCQlkbyB7CisJCQlpZiAoaXNfa2V4ZWNfa2R1bXApIHsKKwkJCQliYXNlID0gcmVhZF9uX2NlbGxzKG5fbWVtX2FkZHJfY2VsbHMsICZ1c20pOworCQkJCXNpemUgPSByZWFkX25fY2VsbHMobl9tZW1fc2l6ZV9jZWxscywgJnVzbSk7CisJCQl9CisJCQluaWQgPSBvZl9kcmNvbmZfdG9fbmlkX3NpbmdsZSgmZHJtZW0sICZhYSk7CisJCQlmYWtlX251bWFfY3JlYXRlX25ld19ub2RlKAorCQkJCSgoYmFzZSArIHNpemUpID4+IFBBR0VfU0hJRlQpLAogCQkJCQkgICAmbmlkKTsKLQotCQlub2RlX3NldF9vbmxpbmUobmlkKTsKLQotCQlzaXplID0gbnVtYV9lbmZvcmNlX21lbW9yeV9saW1pdChkcm1lbS5iYXNlX2FkZHIsIGxtYl9zaXplKTsKLQkJaWYgKCFzaXplKQotCQkJY29udGludWU7Ci0KLQkJYWRkX2FjdGl2ZV9yYW5nZShuaWQsIGRybWVtLmJhc2VfYWRkciA+PiBQQUdFX1NISUZULAotCQkJCSAoZHJtZW0uYmFzZV9hZGRyID4+IFBBR0VfU0hJRlQpCi0JCQkJICsgKHNpemUgPj4gUEFHRV9TSElGVCkpOworCQkJbm9kZV9zZXRfb25saW5lKG5pZCk7CisJCQlzeiA9IG51bWFfZW5mb3JjZV9tZW1vcnlfbGltaXQoYmFzZSwgc2l6ZSk7CisJCQlpZiAoc3opCisJCQkJYWRkX2FjdGl2ZV9yYW5nZShuaWQsIGJhc2UgPj4gUEFHRV9TSElGVCwKKwkJCQkJCSAoYmFzZSA+PiBQQUdFX1NISUZUKQorCQkJCQkJICsgKHN6ID4+IFBBR0VfU0hJRlQpKTsKKwkJfSB3aGlsZSAoLS1yYW5nZXMpOwogCX0KIH0KIApAQCAtODM3LDM4ICs5MjIsNTAgQEAKIAkJCQkgIHN0YXJ0X3BmbiwgZW5kX3Bmbik7CiAKIAkJZnJlZV9ib290bWVtX3dpdGhfYWN0aXZlX3JlZ2lvbnMobmlkLCBlbmRfcGZuKTsKKwl9CiAKLQkJLyogTWFyayByZXNlcnZlZCByZWdpb25zIG9uIHRoaXMgbm9kZSAqLwotCQlmb3IgKGkgPSAwOyBpIDwgbG1iLnJlc2VydmVkLmNudDsgaSsrKSB7Ci0JCQl1bnNpZ25lZCBsb25nIHBoeXNiYXNlID0gbG1iLnJlc2VydmVkLnJlZ2lvbltpXS5iYXNlOwotCQkJdW5zaWduZWQgbG9uZyBzaXplID0gbG1iLnJlc2VydmVkLnJlZ2lvbltpXS5zaXplOwotCQkJdW5zaWduZWQgbG9uZyBzdGFydF9wYWRkciA9IHN0YXJ0X3BmbiA8PCBQQUdFX1NISUZUOwotCQkJdW5zaWduZWQgbG9uZyBlbmRfcGFkZHIgPSBlbmRfcGZuIDw8IFBBR0VfU0hJRlQ7CisJLyogTWFyayByZXNlcnZlZCByZWdpb25zICovCisJZm9yIChpID0gMDsgaSA8IGxtYi5yZXNlcnZlZC5jbnQ7IGkrKykgeworCQl1bnNpZ25lZCBsb25nIHBoeXNiYXNlID0gbG1iLnJlc2VydmVkLnJlZ2lvbltpXS5iYXNlOworCQl1bnNpZ25lZCBsb25nIHNpemUgPSBsbWIucmVzZXJ2ZWQucmVnaW9uW2ldLnNpemU7CisJCXVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuID0gcGh5c2Jhc2UgPj4gUEFHRV9TSElGVDsKKwkJdW5zaWduZWQgbG9uZyBlbmRfcGZuID0gKChwaHlzYmFzZSArIHNpemUpID4+IFBBR0VfU0hJRlQpOworCQlzdHJ1Y3Qgbm9kZV9hY3RpdmVfcmVnaW9uIG5vZGVfYXI7CiAKLQkJCWlmIChlYXJseV9wZm5fdG9fbmlkKHBoeXNiYXNlID4+IFBBR0VfU0hJRlQpICE9IG5pZCAmJgotCQkJICAgIGVhcmx5X3Bmbl90b19uaWQoKHBoeXNiYXNlK3NpemUtMSkgPj4gUEFHRV9TSElGVCkgIT0gbmlkKQotCQkJCWNvbnRpbnVlOworCQlnZXRfbm9kZV9hY3RpdmVfcmVnaW9uKHN0YXJ0X3BmbiwgJm5vZGVfYXIpOworCQl3aGlsZSAoc3RhcnRfcGZuIDwgZW5kX3BmbikgeworCQkJLyoKKwkJCSAqIGlmIHJlc2VydmVkIHJlZ2lvbiBleHRlbmRzIHBhc3QgYWN0aXZlIHJlZ2lvbgorCQkJICogdGhlbiB0cmltIHNpemUgdG8gYWN0aXZlIHJlZ2lvbgorCQkJICovCisJCQlpZiAoZW5kX3BmbiA+IG5vZGVfYXIuZW5kX3BmbikKKwkJCQlzaXplID0gKG5vZGVfYXIuZW5kX3BmbiA8PCBQQUdFX1NISUZUKQorCQkJCQktIChzdGFydF9wZm4gPDwgUEFHRV9TSElGVCk7CisJCQlkYmcoInJlc2VydmVfYm9vdG1lbSAlbHggJWx4IG5pZD0lZFxuIiwgcGh5c2Jhc2UsIHNpemUsCisJCQkJbm9kZV9hci5uaWQpOworCQkJcmVzZXJ2ZV9ib290bWVtX25vZGUoTk9ERV9EQVRBKG5vZGVfYXIubmlkKSwgcGh5c2Jhc2UsCisJCQkJCQlzaXplLCBCT09UTUVNX0RFRkFVTFQpOworCQkJLyoKKwkJCSAqIGlmIHJlc2VydmVkIHJlZ2lvbiBpcyBjb250YWluZWQgaW4gdGhlIGFjdGl2ZSByZWdpb24KKwkJCSAqIHRoZW4gZG9uZS4KKwkJCSAqLworCQkJaWYgKGVuZF9wZm4gPD0gbm9kZV9hci5lbmRfcGZuKQorCQkJCWJyZWFrOwogCi0JCQlpZiAocGh5c2Jhc2UgPCBlbmRfcGFkZHIgJiYKLQkJCSAgICAocGh5c2Jhc2Urc2l6ZSkgPiBzdGFydF9wYWRkcikgewotCQkJCS8qIG92ZXJsYXBzICovCi0JCQkJaWYgKHBoeXNiYXNlIDwgc3RhcnRfcGFkZHIpIHsKLQkJCQkJc2l6ZSAtPSBzdGFydF9wYWRkciAtIHBoeXNiYXNlOwotCQkJCQlwaHlzYmFzZSA9IHN0YXJ0X3BhZGRyOwotCQkJCX0KLQotCQkJCWlmIChzaXplID4gZW5kX3BhZGRyIC0gcGh5c2Jhc2UpCi0JCQkJCXNpemUgPSBlbmRfcGFkZHIgLSBwaHlzYmFzZTsKLQotCQkJCWRiZygicmVzZXJ2ZV9ib290bWVtICVseCAlbHhcbiIsIHBoeXNiYXNlLAotCQkJCSAgICBzaXplKTsKLQkJCQlyZXNlcnZlX2Jvb3RtZW1fbm9kZShOT0RFX0RBVEEobmlkKSwgcGh5c2Jhc2UsCi0JCQkJCQkgICAgIHNpemUsIEJPT1RNRU1fREVGQVVMVCk7Ci0JCQl9CisJCQkvKgorCQkJICogcmVzZXJ2ZWQgcmVnaW9uIGV4dGVuZHMgcGFzdCB0aGUgYWN0aXZlIHJlZ2lvbgorCQkJICogICBnZXQgbmV4dCBhY3RpdmUgcmVnaW9uIHRoYXQgY29udGFpbnMgdGhpcworCQkJICogICByZXNlcnZlZCByZWdpb24KKwkJCSAqLworCQkJc3RhcnRfcGZuID0gbm9kZV9hci5lbmRfcGZuOworCQkJcGh5c2Jhc2UgPSBzdGFydF9wZm4gPDwgUEFHRV9TSElGVDsKKwkJCWdldF9ub2RlX2FjdGl2ZV9yZWdpb24oc3RhcnRfcGZuLCAmbm9kZV9hcik7CiAJCX0KIAotCQlzcGFyc2VfbWVtb3J5X3ByZXNlbnRfd2l0aF9hY3RpdmVfcmVnaW9ucyhuaWQpOwogCX0KKworCWZvcl9lYWNoX29ubGluZV9ub2RlKG5pZCkKKwkJc3BhcnNlX21lbW9yeV9wcmVzZW50X3dpdGhfYWN0aXZlX3JlZ2lvbnMobmlkKTsKIH0KIAogdm9pZCBfX2luaXQgcGFnaW5nX2luaXQodm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9tbS9wZ3RhYmxlXzMyLmMgYi9hcmNoL3Bvd2VycGMvbW0vcGd0YWJsZV8zMi5jCmluZGV4IDIwMDFhYmQuLmMzMWQ2ZDIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9tbS9wZ3RhYmxlXzMyLmMKKysrIGIvYXJjaC9wb3dlcnBjL21tL3BndGFibGVfMzIuYwpAQCAtNzMsNyArNzMsNyBAQAogI2VuZGlmIC8qIEhBVkVfVExCQ0FNICovCiAKICNpZmRlZiBDT05GSUdfUFRFXzY0QklUCi0vKiA0NHggdXNlcyBhbiA4a0IgcGdkaXIgYmVjYXVzZSBpdCBoYXMgOC1ieXRlIExpbnV4IFBURXMuICovCisvKiBTb21lIHByb2Nlc3NvcnMgdXNlIGFuIDhrQiBwZ2RpciBiZWNhdXNlIHRoZXkgaGF2ZSA4LWJ5dGUgTGludXggUFRFcy4gKi8KICNkZWZpbmUgUEdESVJfT1JERVIJMQogI2Vsc2UKICNkZWZpbmUgUEdESVJfT1JERVIJMApAQCAtMjg4LDcgKzI4OCw3IEBACiB9CiAKIC8qCi0gKiBNYXAgaW4gYWxsIG9mIHBoeXNpY2FsIG1lbW9yeSBzdGFydGluZyBhdCBLRVJORUxCQVNFLgorICogTWFwIGluIGEgYmlnIGNodW5rIG9mIHBoeXNpY2FsIG1lbW9yeSBzdGFydGluZyBhdCBLRVJORUxCQVNFLgogICovCiB2b2lkIF9faW5pdCBtYXBpbl9yYW0odm9pZCkKIHsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9tbS90bGJfMzIuYyBiL2FyY2gvcG93ZXJwYy9tbS90bGJfMzIuYwppbmRleCBlYjRiNTEyLi5mOWE0N2ZlIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvbW0vdGxiXzMyLmMKKysrIGIvYXJjaC9wb3dlcnBjL21tL3RsYl8zMi5jCkBAIC00NSw2ICs0NSw3IEBACiAJCWZsdXNoX2hhc2hfcGFnZXMobW0tPmNvbnRleHQuaWQsIGFkZHIsIHB0ZXBoeXMsIDEpOwogCX0KIH0KK0VYUE9SVF9TWU1CT0woZmx1c2hfaGFzaF9lbnRyeSk7CiAKIC8qCiAgKiBDYWxsZWQgYnkgcHRlcF9zZXRfYWNjZXNzX2ZsYWdzLCBtdXN0IGZsdXNoIG9uIENQVXMgZm9yIHdoaWNoIHRoZQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL29wcm9maWxlL2NlbGwvdm1hX21hcC5jIGIvYXJjaC9wb3dlcnBjL29wcm9maWxlL2NlbGwvdm1hX21hcC5jCmluZGV4IGZmZjY2NjYuLjI1OGZhNDQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9vcHJvZmlsZS9jZWxsL3ZtYV9tYXAuYworKysgYi9hcmNoL3Bvd2VycGMvb3Byb2ZpbGUvY2VsbC92bWFfbWFwLmMKQEAgLTIyOSw3ICsyMjksNyBAQAogCSAqLwogCW92ZXJsYXlfdGJsX29mZnNldCA9IHZtYV9tYXBfbG9va3VwKG1hcCwgb3ZseV90YWJsZV9zeW0sCiAJCQkJCSAgICBhU3B1LCAmZ3JkX3ZhbCk7Ci0JaWYgKG92ZXJsYXlfdGJsX29mZnNldCA8IDApIHsKKwlpZiAob3ZlcmxheV90Ymxfb2Zmc2V0ID4gMHgxMDAwMDAwMCkgewogCQlwcmludGsoS0VSTl9FUlIgIlNQVV9QUk9GOiAiCiAJCSAgICAgICAiJXMsIGxpbmUgJWQ6IEVycm9yIGZpbmRpbmcgU1BVIG92ZXJsYXkgdGFibGVcbiIsCiAJCSAgICAgICBfX2Z1bmNfXywgX19MSU5FX18pOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL29wcm9maWxlL29wX21vZGVsX3Bvd2VyNC5jIGIvYXJjaC9wb3dlcnBjL29wcm9maWxlL29wX21vZGVsX3Bvd2VyNC5jCmluZGV4IDQ0NmE4YmJiLi4zZTNkOTFmIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvb3Byb2ZpbGUvb3BfbW9kZWxfcG93ZXI0LmMKKysrIGIvYXJjaC9wb3dlcnBjL29wcm9maWxlL29wX21vZGVsX3Bvd2VyNC5jCkBAIC02NCw3ICs2NCw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLWV4dGVybiB2b2lkIHBwYzY0X2VuYWJsZV9wbWNzKHZvaWQpOworZXh0ZXJuIHZvaWQgcHBjX2VuYWJsZV9wbWNzKHZvaWQpOwogCiAvKgogICogT2xkZXIgQ1BVcyByZXF1aXJlIHRoZSBNTUNSQSBzYW1wbGUgYml0IHRvIGJlIGFsd2F5cyBzZXQsIGJ1dCBuZXdlciAKQEAgLTkxLDcgKzkxLDcgQEAKIAl1bnNpZ25lZCBpbnQgbW1jcjAgPSBtbWNyMF92YWw7CiAJdW5zaWduZWQgbG9uZyBtbWNyYSA9IG1tY3JhX3ZhbDsKIAotCXBwYzY0X2VuYWJsZV9wbWNzKCk7CisJcHBjX2VuYWJsZV9wbWNzKCk7CiAKIAkvKiBzZXQgdGhlIGZyZWV6ZSBiaXQgKi8KIAltbWNyMCB8PSBNTUNSMF9GQzsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNDR4L0tjb25maWcgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzQ0eC9LY29uZmlnCmluZGV4IDI0OWJhMDEuLjc5YzExNTQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNDR4L0tjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy80NHgvS2NvbmZpZwpAQCAtMiw2ICsyLDcgQEAKIAlib29sICJCYW1ib28iCiAJZGVwZW5kcyBvbiA0NHgKIAlkZWZhdWx0IG4KKwlzZWxlY3QgUFBDNDR4X1NJTVBMRQogCXNlbGVjdCA0NDBFUAogCXNlbGVjdCBQQ0kKIAloZWxwCkBAIC0zMCw2ICszMSw3IEBACiAJYm9vbCAiU2VxdW9pYSIKIAlkZXBlbmRzIG9uIDQ0eAogCWRlZmF1bHQgbgorCXNlbGVjdCBQUEM0NHhfU0lNUExFCiAJc2VsZWN0IDQ0MEVQWAogCWhlbHAKIAkgIFRoaXMgb3B0aW9uIGVuYWJsZXMgc3VwcG9ydCBmb3IgdGhlIEFNQ0MgUFBDNDQwRVBYIGV2YWx1YXRpb24gYm9hcmQuCkBAIC0zOCw2ICs0MCw3IEBACiAJYm9vbCAiVGFpc2hhbiIKIAlkZXBlbmRzIG9uIDQ0eAogCWRlZmF1bHQgbgorCXNlbGVjdCBQUEM0NHhfU0lNUExFCiAJc2VsZWN0IDQ0MEdYCiAJc2VsZWN0IFBDSQogCWhlbHAKQEAgLTQ4LDYgKzUxLDcgQEAKIAlib29sICJLYXRtYWkiCiAJZGVwZW5kcyBvbiA0NHgKIAlkZWZhdWx0IG4KKwlzZWxlY3QgUFBDNDR4X1NJTVBMRQogCXNlbGVjdCA0NDBTUGUKIAlzZWxlY3QgUENJCiAJc2VsZWN0IFBQQzR4eF9QQ0lfRVhQUkVTUwpAQCAtNTgsNiArNjIsNyBAQAogCWJvb2wgIlJhaW5pZXIiCiAJZGVwZW5kcyBvbiA0NHgKIAlkZWZhdWx0IG4KKwlzZWxlY3QgUFBDNDR4X1NJTVBMRQogCXNlbGVjdCA0NDBHUlgKIAlzZWxlY3QgUENJCiAJaGVscApAQCAtNzYsMjAgKzgxLDQ4IEBACiAJICBTZWUgaHR0cDovL3d3dy5waWthdGVjaG5vbG9naWVzLmNvbS8gYW5kIGZvbGxvdyB0aGUgIlBJS0EgZm9yIENvbXB1dGVyCiAJICBUZWxlcGhvbnkgRGV2ZWxvcGVycyIgbGluayBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KIAorY29uZmlnIEFSQ0hFUworCWJvb2wgIkFyY2hlcyIKKwlkZXBlbmRzIG9uIDQ0eAorCWRlZmF1bHQgbgorCXNlbGVjdCBQUEM0NHhfU0lNUExFCisJc2VsZWN0IDQ2MEVYICMgT2RkIHNpbmNlIGl0IHVzZXMgNDYwR1QgYnV0IHRoZSBlZmZlY3RzIGFyZSB0aGUgc2FtZQorCXNlbGVjdCBQQ0kKKwlzZWxlY3QgUFBDNHh4X1BDSV9FWFBSRVNTCisJaGVscAorCSAgVGhpcyBvcHRpb24gZW5hYmxlcyBzdXBwb3J0IGZvciB0aGUgQU1DQyBEdWFsIFBQQzQ2MEdUIGV2YWx1YXRpb24gYm9hcmQuCisKIGNvbmZpZyBDQU5ZT05MQU5EUwogCWJvb2wgIkNhbnlvbmxhbmRzIgogCWRlcGVuZHMgb24gNDR4CiAJZGVmYXVsdCBuCisJc2VsZWN0IFBQQzQ0eF9TSU1QTEUKIAlzZWxlY3QgNDYwRVgKIAlzZWxlY3QgUENJCiAJc2VsZWN0IFBQQzR4eF9QQ0lfRVhQUkVTUworCXNlbGVjdCBJQk1fTkVXX0VNQUNfUkdNSUkKKwlzZWxlY3QgSUJNX05FV19FTUFDX1pNSUkKIAloZWxwCiAJICBUaGlzIG9wdGlvbiBlbmFibGVzIHN1cHBvcnQgZm9yIHRoZSBBTUNDIFBQQzQ2MEVYIGV2YWx1YXRpb24gYm9hcmQuCiAKK2NvbmZpZyBHTEFDSUVSCisJYm9vbCAiR2xhY2llciIKKwlkZXBlbmRzIG9uIDQ0eAorCWRlZmF1bHQgbgorCXNlbGVjdCBQUEM0NHhfU0lNUExFCisJc2VsZWN0IDQ2MEVYICMgT2RkIHNpbmNlIGl0IHVzZXMgNDYwR1QgYnV0IHRoZSBlZmZlY3RzIGFyZSB0aGUgc2FtZQorCXNlbGVjdCBQQ0kKKwlzZWxlY3QgUFBDNHh4X1BDSV9FWFBSRVNTCisJc2VsZWN0IElCTV9ORVdfRU1BQ19SR01JSQorCXNlbGVjdCBJQk1fTkVXX0VNQUNfWk1JSQorCWhlbHAKKwkgIFRoaXMgb3B0aW9uIGVuYWJsZXMgc3VwcG9ydCBmb3IgdGhlIEFNQ0MgUFBDNDYwR1QgZXZhbHVhdGlvbiBib2FyZC4KKwogY29uZmlnIFlPU0VNSVRFCiAJYm9vbCAiWW9zZW1pdGUiCiAJZGVwZW5kcyBvbiA0NHgKIAlkZWZhdWx0IG4KKwlzZWxlY3QgUFBDNDR4X1NJTVBMRQogCXNlbGVjdCA0NDBFUAogCXNlbGVjdCBQQ0kKIAloZWxwCkBAIC0xMjcsNiArMTYwLDEzIEBACiAJICBNb3N0IFZpcnRleCA1IGRlc2lnbnMgc2hvdWxkIHVzZSB0aGlzIHVubGVzcyBpdCBuZWVkcyB0byBkbyBzb21lCiAJICBzcGVjaWFsIGNvbmZpZ3VyYXRpb24gYXQgYm9hcmQgcHJvYmUgdGltZS4KIAorY29uZmlnIFBQQzQ0eF9TSU1QTEUKKwlib29sICJTaW1wbGUgUG93ZXJQQyA0NHggYm9hcmQgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIDQ0eAorCWRlZmF1bHQgbgorCWhlbHAKKwkgIFRoaXMgb3B0aW9uIGVuYWJsZXMgdGhlIHNpbXBsZSBQb3dlclBDIDQ0eCBwbGF0Zm9ybSBzdXBwb3J0LgorCiAjIDQ0eCBzcGVjaWZpYyBDUFUgbW9kdWxlcywgc2VsZWN0ZWQgYmFzZWQgb24gdGhlIGJvYXJkIGFib3ZlLgogY29uZmlnIDQ0MEVQCiAJYm9vbApAQCAtMTcwLDggKzIxMCw2IEBACiAJYm9vbAogCXNlbGVjdCBQUENfRlBVCiAJc2VsZWN0IElCTV9ORVdfRU1BQ19FTUFDNAotCXNlbGVjdCBJQk1fTkVXX0VNQUNfUkdNSUkKLQlzZWxlY3QgSUJNX05FV19FTUFDX1pNSUkKIAlzZWxlY3QgSUJNX05FV19FTUFDX1RBSAogCiAjIDQ0eCBlcnJhdGEvd29ya2Fyb3VuZCBjb25maWcgc3ltYm9scywgc2VsZWN0ZWQgYnkgdGhlIENQVSBtb2RlbHMgYWJvdmUKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNDR4L01ha2VmaWxlIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy80NHgvTWFrZWZpbGUKaW5kZXggOGQwYjFhMS4uNjk4MTMzMSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy80NHgvTWFrZWZpbGUKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy80NHgvTWFrZWZpbGUKQEAgLTEsMTMgKzEsNyBAQAogb2JqLSQoQ09ORklHXzQ0eCkJOj0gbWlzY180NHgubyBpZGxlLm8KK29iai0kKENPTkZJR19QUEM0NHhfU0lNUExFKSArPSBwcGM0NHhfc2ltcGxlLm8KIG9iai0kKENPTkZJR19FQk9OWSkJKz0gZWJvbnkubwotb2JqLSQoQ09ORklHX1RBSVNIQU4pCSs9IHRhaXNoYW4ubwotb2JqLSQoQ09ORklHX0JBTUJPTykJKz0gYmFtYm9vLm8KLW9iai0kKENPTkZJR19ZT1NFTUlURSkJKz0gYmFtYm9vLm8KIG9iai0kKENPTkZJR19TQU00NDBFUCkgCSs9IHNhbTQ0MGVwLm8KLW9iai0kKENPTkZJR19TRVFVT0lBKQkrPSBzZXF1b2lhLm8KLW9iai0kKENPTkZJR19LQVRNQUkpCSs9IGthdG1haS5vCi1vYmotJChDT05GSUdfUkFJTklFUikJKz0gcmFpbmllci5vCiBvYmotJChDT05GSUdfV0FSUCkJKz0gd2FycC5vCiBvYmotJChDT05GSUdfV0FSUCkJKz0gd2FycC1uYW5kLm8KLW9iai0kKENPTkZJR19DQU5ZT05MQU5EUykgKz0gY2FueW9ubGFuZHMubwogb2JqLSQoQ09ORklHX1hJTElOWF9WSVJURVhfNV9GWFQpICs9IHZpcnRleC5vCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzQ0eC9iYW1ib28uYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNDR4L2JhbWJvby5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZWYxNjllLi4wMDAwMDAwCi0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNDR4L2JhbWJvby5jCisrKyAvZGV2L251bGwKQEAgLTEsNjIgKzAsMCBAQAotLyoKLSAqIEJhbWJvbyBib2FyZCBzcGVjaWZpYyByb3V0aW5lcwotICoKLSAqIFdhZGUgRmFybnN3b3J0aCA8d2Zhcm5zd29ydGhAbXZpc3RhLmNvbT4KLSAqIENvcHlyaWdodCAyMDA0IE1vbnRhVmlzdGEgU29mdHdhcmUgSW5jLgotICoKLSAqIFJld3JpdHRlbiBhbmQgcG9ydGVkIHRvIHRoZSBtZXJnZWQgcG93ZXJwYyB0cmVlOgotICogSm9zaCBCb3llciA8andib3llckBsaW51eC52bmV0LmlibS5jb20+Ci0gKiBDb3B5cmlnaHQgMjAwNyBJQk0gQ29ycG9yYXRpb24KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKLSAqIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgIExpY2Vuc2UsIG9yIChhdCB5b3VyCi0gKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICovCi0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L29mX3BsYXRmb3JtLmg+Ci0KLSNpbmNsdWRlIDxhc20vbWFjaGRlcC5oPgotI2luY2x1ZGUgPGFzbS9wcm9tLmg+Ci0jaW5jbHVkZSA8YXNtL3VkYmcuaD4KLSNpbmNsdWRlIDxhc20vdGltZS5oPgotI2luY2x1ZGUgPGFzbS91aWMuaD4KLSNpbmNsdWRlIDxhc20vcGNpLWJyaWRnZS5oPgotI2luY2x1ZGUgPGFzbS9wcGM0eHguaD4KLQotc3RhdGljIF9faW5pdGRhdGEgc3RydWN0IG9mX2RldmljZV9pZCBiYW1ib29fb2ZfYnVzW10gPSB7Ci0JeyAuY29tcGF0aWJsZSA9ICJpYm0scGxiNCIsIH0sCi0JeyAuY29tcGF0aWJsZSA9ICJpYm0sb3BiIiwgfSwKLQl7IC5jb21wYXRpYmxlID0gImlibSxlYmMiLCB9LAotCXt9LAotfTsKLQotc3RhdGljIGludCBfX2luaXQgYmFtYm9vX2RldmljZV9wcm9iZSh2b2lkKQotewotCW9mX3BsYXRmb3JtX2J1c19wcm9iZShOVUxMLCBiYW1ib29fb2ZfYnVzLCBOVUxMKTsKLQotCXJldHVybiAwOwotfQotbWFjaGluZV9kZXZpY2VfaW5pdGNhbGwoYmFtYm9vLCBiYW1ib29fZGV2aWNlX3Byb2JlKTsKLQotc3RhdGljIGludCBfX2luaXQgYmFtYm9vX3Byb2JlKHZvaWQpCi17Ci0JdW5zaWduZWQgbG9uZyByb290ID0gb2ZfZ2V0X2ZsYXRfZHRfcm9vdCgpOwotCi0JaWYgKCFvZl9mbGF0X2R0X2lzX2NvbXBhdGlibGUocm9vdCwgImFtY2MsYmFtYm9vIikpCi0JCXJldHVybiAwOwotCi0JcHBjX3BjaV9mbGFncyA9IFBQQ19QQ0lfUkVBU1NJR05fQUxMX1JTUkM7Ci0KLQlyZXR1cm4gMTsKLX0KLQotZGVmaW5lX21hY2hpbmUoYmFtYm9vKSB7Ci0JLm5hbWUgCQkJPSAiQmFtYm9vIiwKLQkucHJvYmUgCQkJPSBiYW1ib29fcHJvYmUsCi0JLnByb2dyZXNzIAkJPSB1ZGJnX3Byb2dyZXNzLAotCS5pbml0X0lSUSAJCT0gdWljX2luaXRfdHJlZSwKLQkuZ2V0X2lycSAJCT0gdWljX2dldF9pcnEsCi0JLnJlc3RhcnQJCT0gcHBjNHh4X3Jlc2V0X3N5c3RlbSwKLQkuY2FsaWJyYXRlX2RlY3IgCT0gZ2VuZXJpY19jYWxpYnJhdGVfZGVjciwKLX07CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzQ0eC9jYW55b25sYW5kcy5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy80NHgvY2FueW9ubGFuZHMuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzk0OTI4OS4uMDAwMDAwMAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzQ0eC9jYW55b25sYW5kcy5jCisrKyAvZGV2L251bGwKQEAgLTEsNjMgKzAsMCBAQAotLyoKLSAqIENhbnlvbmxhbmRzIGJvYXJkIHNwZWNpZmljIHJvdXRpbmVzCi0gKgotICogQ29weXJpZ2h0IDIwMDggREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgU3RlZmFuIFJvZXNlIDxzckBkZW54LmRlPgotICoKLSAqIEJhc2VkIG9uIHRoZSBLYXRtYWkgY29kZSBieQotICogQmVuamFtaW4gSGVycmVuc2NobWlkdCA8YmVuaEBrZXJuZWwuY3Jhc2hpbmcub3JnPgotICogQ29weXJpZ2h0IDIwMDcgSUJNIENvcnAuCi0gKiBKb3NoIEJveWVyIDxqd2JveWVyQGxpbnV4LnZuZXQuaWJtLmNvbT4KLSAqIENvcHlyaWdodCAyMDA3IElCTSBDb3Jwb3JhdGlvbgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAotICogdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKLSAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKi8KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvb2ZfcGxhdGZvcm0uaD4KLQotI2luY2x1ZGUgPGFzbS9tYWNoZGVwLmg+Ci0jaW5jbHVkZSA8YXNtL3Byb20uaD4KLSNpbmNsdWRlIDxhc20vdWRiZy5oPgotI2luY2x1ZGUgPGFzbS90aW1lLmg+Ci0jaW5jbHVkZSA8YXNtL3VpYy5oPgotI2luY2x1ZGUgPGFzbS9wY2ktYnJpZGdlLmg+Ci0jaW5jbHVkZSA8YXNtL3BwYzR4eC5oPgotCi1zdGF0aWMgX19pbml0ZGF0YSBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIGNhbnlvbmxhbmRzX29mX2J1c1tdID0gewotCXsgLmNvbXBhdGlibGUgPSAiaWJtLHBsYjQiLCB9LAotCXsgLmNvbXBhdGlibGUgPSAiaWJtLG9wYiIsIH0sCi0JeyAuY29tcGF0aWJsZSA9ICJpYm0sZWJjIiwgfSwKLQl7fSwKLX07Ci0KLXN0YXRpYyBpbnQgX19pbml0IGNhbnlvbmxhbmRzX2RldmljZV9wcm9iZSh2b2lkKQotewotCW9mX3BsYXRmb3JtX2J1c19wcm9iZShOVUxMLCBjYW55b25sYW5kc19vZl9idXMsIE5VTEwpOwotCi0JcmV0dXJuIDA7Ci19Ci1tYWNoaW5lX2RldmljZV9pbml0Y2FsbChjYW55b25sYW5kcywgY2FueW9ubGFuZHNfZGV2aWNlX3Byb2JlKTsKLQotc3RhdGljIGludCBfX2luaXQgY2FueW9ubGFuZHNfcHJvYmUodm9pZCkKLXsKLQl1bnNpZ25lZCBsb25nIHJvb3QgPSBvZl9nZXRfZmxhdF9kdF9yb290KCk7Ci0KLQlpZiAoIW9mX2ZsYXRfZHRfaXNfY29tcGF0aWJsZShyb290LCAiYW1jYyxjYW55b25sYW5kcyIpKQotCQlyZXR1cm4gMDsKLQotCXBwY19wY2lfZmxhZ3MgPSBQUENfUENJX1JFQVNTSUdOX0FMTF9SU1JDOwotCi0JcmV0dXJuIDE7Ci19Ci0KLWRlZmluZV9tYWNoaW5lKGNhbnlvbmxhbmRzKSB7Ci0JLm5hbWUgCQkJCT0gIkNhbnlvbmxhbmRzIiwKLQkucHJvYmUgCQkJCT0gY2FueW9ubGFuZHNfcHJvYmUsCi0JLnByb2dyZXNzIAkJCT0gdWRiZ19wcm9ncmVzcywKLQkuaW5pdF9JUlEgCQkJPSB1aWNfaW5pdF90cmVlLAotCS5nZXRfaXJxIAkJCT0gdWljX2dldF9pcnEsCi0JLnJlc3RhcnQJCQk9IHBwYzR4eF9yZXNldF9zeXN0ZW0sCi0JLmNhbGlicmF0ZV9kZWNyCQkJPSBnZW5lcmljX2NhbGlicmF0ZV9kZWNyLAotfTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNDR4L2thdG1haS5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy80NHgva2F0bWFpLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ0ZjRiM2EuLjAwMDAwMDAKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy80NHgva2F0bWFpLmMKKysrIC9kZXYvbnVsbApAQCAtMSw2MiArMCwwIEBACi0vKgotICogS2F0bWFpIGJvYXJkIHNwZWNpZmljIHJvdXRpbmVzCi0gKgotICogQmVuamFtaW4gSGVycmVuc2NobWlkdCA8YmVuaEBrZXJuZWwuY3Jhc2hpbmcub3JnPgotICogQ29weXJpZ2h0IDIwMDcgSUJNIENvcnAuCi0gKgotICogQmFzZWQgb24gdGhlIEJhbWJvbyBjb2RlIGJ5Ci0gKiBKb3NoIEJveWVyIDxqd2JveWVyQGxpbnV4LnZuZXQuaWJtLmNvbT4KLSAqIENvcHlyaWdodCAyMDA3IElCTSBDb3Jwb3JhdGlvbgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAotICogdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKLSAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKi8KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvb2ZfcGxhdGZvcm0uaD4KLQotI2luY2x1ZGUgPGFzbS9tYWNoZGVwLmg+Ci0jaW5jbHVkZSA8YXNtL3Byb20uaD4KLSNpbmNsdWRlIDxhc20vdWRiZy5oPgotI2luY2x1ZGUgPGFzbS90aW1lLmg+Ci0jaW5jbHVkZSA8YXNtL3VpYy5oPgotI2luY2x1ZGUgPGFzbS9wY2ktYnJpZGdlLmg+Ci0jaW5jbHVkZSA8YXNtL3BwYzR4eC5oPgotCi1zdGF0aWMgX19pbml0ZGF0YSBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIGthdG1haV9vZl9idXNbXSA9IHsKLQl7IC5jb21wYXRpYmxlID0gImlibSxwbGI0IiwgfSwKLQl7IC5jb21wYXRpYmxlID0gImlibSxvcGIiLCB9LAotCXsgLmNvbXBhdGlibGUgPSAiaWJtLGViYyIsIH0sCi0Je30sCi19OwotCi1zdGF0aWMgaW50IF9faW5pdCBrYXRtYWlfZGV2aWNlX3Byb2JlKHZvaWQpCi17Ci0Jb2ZfcGxhdGZvcm1fYnVzX3Byb2JlKE5VTEwsIGthdG1haV9vZl9idXMsIE5VTEwpOwotCi0JcmV0dXJuIDA7Ci19Ci1tYWNoaW5lX2RldmljZV9pbml0Y2FsbChrYXRtYWksIGthdG1haV9kZXZpY2VfcHJvYmUpOwotCi1zdGF0aWMgaW50IF9faW5pdCBrYXRtYWlfcHJvYmUodm9pZCkKLXsKLQl1bnNpZ25lZCBsb25nIHJvb3QgPSBvZl9nZXRfZmxhdF9kdF9yb290KCk7Ci0KLQlpZiAoIW9mX2ZsYXRfZHRfaXNfY29tcGF0aWJsZShyb290LCAiYW1jYyxrYXRtYWkiKSkKLQkJcmV0dXJuIDA7Ci0KLQlwcGNfcGNpX2ZsYWdzID0gUFBDX1BDSV9SRUFTU0lHTl9BTExfUlNSQzsKLQotCXJldHVybiAxOwotfQotCi1kZWZpbmVfbWFjaGluZShrYXRtYWkpIHsKLQkubmFtZSAJCQkJPSAiS2F0bWFpIiwKLQkucHJvYmUgCQkJCT0ga2F0bWFpX3Byb2JlLAotCS5wcm9ncmVzcyAJCQk9IHVkYmdfcHJvZ3Jlc3MsCi0JLmluaXRfSVJRIAkJCT0gdWljX2luaXRfdHJlZSwKLQkuZ2V0X2lycSAJCQk9IHVpY19nZXRfaXJxLAotCS5yZXN0YXJ0CQkJPSBwcGM0eHhfcmVzZXRfc3lzdGVtLAotCS5jYWxpYnJhdGVfZGVjcgkJCT0gZ2VuZXJpY19jYWxpYnJhdGVfZGVjciwKLX07CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzQ0eC9wcGM0NHhfc2ltcGxlLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzQ0eC9wcGM0NHhfc2ltcGxlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjk2NzEyNgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNDR4L3BwYzQ0eF9zaW1wbGUuYwpAQCAtMCwwICsxLDg4IEBACisvKgorICogR2VuZXJpYyBQb3dlclBDIDQ0eCBwbGF0Zm9ybSBzdXBwb3J0CisgKgorICogQ29weXJpZ2h0IDIwMDggSUJNIENvcnBvcmF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UuCisgKgorICogVGhpcyBpbXBsZW1lbnRzIHNpbXBsZSBwbGF0Zm9ybSBzdXBwb3J0IGZvciBQb3dlclBDIDQ0eCBjaGlwcy4gIFRoaXMgaXMKKyAqIG1vc3RseSB1c2VkIGZvciBldmFsIGJvYXJkcyBvciBvdGhlciBzaW1wbGUgYW5kICJnZW5lcmljIiA0NHggYm9hcmRzLiAgSWYKKyAqIHlvdXIgYm9hcmQgaGFzIGN1c3RvbSBmdW5jdGlvbnMgb3IgaGFyZHdhcmUsIHRoZW4geW91IHdpbGwgbGlrZWx5IHdhbnQgdG8KKyAqIGltcGxlbWVudCB5b3VyIG93biBib2FyZC5jIGZpbGUgdG8gYWNjb21tb2RhdGUgaXQuCisgKi8KKworI2luY2x1ZGUgPGFzbS9tYWNoZGVwLmg+CisjaW5jbHVkZSA8YXNtL3BjaS1icmlkZ2UuaD4KKyNpbmNsdWRlIDxhc20vcHBjNHh4Lmg+CisjaW5jbHVkZSA8YXNtL3Byb20uaD4KKyNpbmNsdWRlIDxhc20vdGltZS5oPgorI2luY2x1ZGUgPGFzbS91ZGJnLmg+CisjaW5jbHVkZSA8YXNtL3VpYy5oPgorCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L29mX3BsYXRmb3JtLmg+CisKK3N0YXRpYyBfX2luaXRkYXRhIHN0cnVjdCBvZl9kZXZpY2VfaWQgcHBjNDR4X29mX2J1c1tdID0geworCXsgLmNvbXBhdGlibGUgPSAiaWJtLHBsYjQiLCB9LAorCXsgLmNvbXBhdGlibGUgPSAiaWJtLG9wYiIsIH0sCisJeyAuY29tcGF0aWJsZSA9ICJpYm0sZWJjIiwgfSwKKwl7IC5jb21wYXRpYmxlID0gInNpbXBsZS1idXMiLCB9LAorCXt9LAorfTsKKworc3RhdGljIGludCBfX2luaXQgcHBjNDR4X2RldmljZV9wcm9iZSh2b2lkKQoreworCW9mX3BsYXRmb3JtX2J1c19wcm9iZShOVUxMLCBwcGM0NHhfb2ZfYnVzLCBOVUxMKTsKKworCXJldHVybiAwOworfQorbWFjaGluZV9kZXZpY2VfaW5pdGNhbGwocHBjNDR4X3NpbXBsZSwgcHBjNDR4X2RldmljZV9wcm9iZSk7CisKKy8qIFRoaXMgaXMgdGhlIGxpc3Qgb2YgYm9hcmRzIHRoYXQgY2FuIGJlIHN1cHBvcnRlZCBieSB0aGlzIHNpbXBsZQorICogcGxhdGZvcm0gY29kZS4gIFRoaXMgZG9lcyBfbm90XyBtZWFuIHRoZSBib2FyZHMgYXJlIGNvbXBhdGlibGUsCisgKiBhcyB0aGV5IG1vc3QgY2VydGFpbmx5IGFyZSBub3QgZnJvbSBhIGRldmljZSB0cmVlIHBlcnNwZWN0aXZlLgorICogSG93ZXZlciwgdGhlaXIgZGlmZmVyZW5jZXMgYXJlIGhhbmRsZWQgYnkgdGhlIGRldmljZSB0cmVlIGFuZCB0aGUKKyAqIGRyaXZlcnMgYW5kIHRoZXJlZm9yZSB0aGV5IGRvbid0IG5lZWQgY3VzdG9tIGJvYXJkIHN1cHBvcnQgZmlsZXMuCisgKgorICogQWdhaW4sIGlmIHlvdXIgYm9hcmQgbmVlZHMgdG8gZG8gdGhpbmdzIGRpZmZlcmVudGx5IHRoZW4gY3JlYXRlIGEKKyAqIGJvYXJkLmMgZmlsZSBmb3IgaXQgcmF0aGVyIHRoYW4gYWRkaW5nIGl0IHRvIHRoaXMgbGlzdC4KKyAqLworc3RhdGljIGNoYXIgKmJvYXJkW10gX19pbml0ZGF0YSA9IHsKKwkiYW1jYyxhcmNoZXMiLAorCSJhbWNjLGJhbWJvbyIsCisJImFtY2MsY2FueW9ubGFuZHMiLAorCSJhbWNjLGdsYWNpZXIiLAorCSJpYm0sZWJvbnkiLAorCSJhbWNjLGthdG1haSIsCisJImFtY2MscmFpbmllciIsCisJImFtY2Msc2VxdW9pYSIsCisJImFtY2MsdGFpc2hhbiIsCisJImFtY2MseW9zZW1pdGUiCit9OworCitzdGF0aWMgaW50IF9faW5pdCBwcGM0NHhfcHJvYmUodm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIHJvb3QgPSBvZl9nZXRfZmxhdF9kdF9yb290KCk7CisJaW50IGkgPSAwOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoYm9hcmQpOyBpKyspIHsKKwkJaWYgKG9mX2ZsYXRfZHRfaXNfY29tcGF0aWJsZShyb290LCBib2FyZFtpXSkpIHsKKwkJCXBwY19wY2lfZmxhZ3MgPSBQUENfUENJX1JFQVNTSUdOX0FMTF9SU1JDOworCQkJcmV0dXJuIDE7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KKworZGVmaW5lX21hY2hpbmUocHBjNDR4X3NpbXBsZSkgeworCS5uYW1lID0gIlBvd2VyUEMgNDR4IFBsYXRmb3JtIiwKKwkucHJvYmUgPSBwcGM0NHhfcHJvYmUsCisJLnByb2dyZXNzID0gdWRiZ19wcm9ncmVzcywKKwkuaW5pdF9JUlEgPSB1aWNfaW5pdF90cmVlLAorCS5nZXRfaXJxID0gdWljX2dldF9pcnEsCisJLnJlc3RhcnQgPSBwcGM0eHhfcmVzZXRfc3lzdGVtLAorCS5jYWxpYnJhdGVfZGVjciA9IGdlbmVyaWNfY2FsaWJyYXRlX2RlY3IsCit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy80NHgvcmFpbmllci5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy80NHgvcmFpbmllci5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZjFmZjg0Li4wMDAwMDAwCi0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNDR4L3JhaW5pZXIuYworKysgL2Rldi9udWxsCkBAIC0xLDYyICswLDAgQEAKLS8qCi0gKiBSYWluaWVyIGJvYXJkIHNwZWNpZmljIHJvdXRpbmVzCi0gKgotICogVmFsZW50aW5lIEJhcnNoYWsgPHZiYXJzaGFrQHJ1Lm12aXN0YS5jb20+Ci0gKiBDb3B5cmlnaHQgMjAwNyBNb250YVZpc3RhIFNvZnR3YXJlIEluYy4KLSAqCi0gKiBCYXNlZCBvbiB0aGUgQmFtYm9vIGNvZGUgYnkKLSAqIEpvc2ggQm95ZXIgPGp3Ym95ZXJAbGludXgudm5ldC5pYm0uY29tPgotICogQ29weXJpZ2h0IDIwMDcgSUJNIENvcnBvcmF0aW9uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0Ci0gKiB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgotICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqLwotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9vZl9wbGF0Zm9ybS5oPgotCi0jaW5jbHVkZSA8YXNtL21hY2hkZXAuaD4KLSNpbmNsdWRlIDxhc20vcHJvbS5oPgotI2luY2x1ZGUgPGFzbS91ZGJnLmg+Ci0jaW5jbHVkZSA8YXNtL3RpbWUuaD4KLSNpbmNsdWRlIDxhc20vdWljLmg+Ci0jaW5jbHVkZSA8YXNtL3BjaS1icmlkZ2UuaD4KLSNpbmNsdWRlIDxhc20vcHBjNHh4Lmg+Ci0KLXN0YXRpYyBfX2luaXRkYXRhIHN0cnVjdCBvZl9kZXZpY2VfaWQgcmFpbmllcl9vZl9idXNbXSA9IHsKLQl7IC5jb21wYXRpYmxlID0gImlibSxwbGI0IiwgfSwKLQl7IC5jb21wYXRpYmxlID0gImlibSxvcGIiLCB9LAotCXsgLmNvbXBhdGlibGUgPSAiaWJtLGViYyIsIH0sCi0Je30sCi19OwotCi1zdGF0aWMgaW50IF9faW5pdCByYWluaWVyX2RldmljZV9wcm9iZSh2b2lkKQotewotCW9mX3BsYXRmb3JtX2J1c19wcm9iZShOVUxMLCByYWluaWVyX29mX2J1cywgTlVMTCk7Ci0KLQlyZXR1cm4gMDsKLX0KLW1hY2hpbmVfZGV2aWNlX2luaXRjYWxsKHJhaW5pZXIsIHJhaW5pZXJfZGV2aWNlX3Byb2JlKTsKLQotc3RhdGljIGludCBfX2luaXQgcmFpbmllcl9wcm9iZSh2b2lkKQotewotCXVuc2lnbmVkIGxvbmcgcm9vdCA9IG9mX2dldF9mbGF0X2R0X3Jvb3QoKTsKLQotCWlmICghb2ZfZmxhdF9kdF9pc19jb21wYXRpYmxlKHJvb3QsICJhbWNjLHJhaW5pZXIiKSkKLQkJcmV0dXJuIDA7Ci0KLQlwcGNfcGNpX2ZsYWdzID0gUFBDX1BDSV9SRUFTU0lHTl9BTExfUlNSQzsKLQotCXJldHVybiAxOwotfQotCi1kZWZpbmVfbWFjaGluZShyYWluaWVyKSB7Ci0JLm5hbWUgCQkJCT0gIlJhaW5pZXIiLAotCS5wcm9iZSAJCQkJPSByYWluaWVyX3Byb2JlLAotCS5wcm9ncmVzcyAJCQk9IHVkYmdfcHJvZ3Jlc3MsCi0JLmluaXRfSVJRIAkJCT0gdWljX2luaXRfdHJlZSwKLQkuZ2V0X2lycSAJCQk9IHVpY19nZXRfaXJxLAotCS5yZXN0YXJ0CQkJPSBwcGM0eHhfcmVzZXRfc3lzdGVtLAotCS5jYWxpYnJhdGVfZGVjcgkJCT0gZ2VuZXJpY19jYWxpYnJhdGVfZGVjciwKLX07CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzQ0eC9zZXF1b2lhLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzQ0eC9zZXF1b2lhLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ5ZWI3M2QuLjAwMDAwMDAKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy80NHgvc2VxdW9pYS5jCisrKyAvZGV2L251bGwKQEAgLTEsNjMgKzAsMCBAQAotLyoKLSAqIFNlcXVvaWEgYm9hcmQgc3BlY2lmaWMgcm91dGluZXMKLSAqCi0gKiBWYWxlbnRpbmUgQmFyc2hhayA8dmJhcnNoYWtAcnUubXZpc3RhLmNvbT4KLSAqIENvcHlyaWdodCAyMDA3IE1vbnRhVmlzdGEgU29mdHdhcmUgSW5jLgotICoKLSAqIEJhc2VkIG9uIHRoZSBCYW1ib28gY29kZSBieQotICogSm9zaCBCb3llciA8andib3llckBsaW51eC52bmV0LmlibS5jb20+Ci0gKiBDb3B5cmlnaHQgMjAwNyBJQk0gQ29ycG9yYXRpb24KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKLSAqIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgIExpY2Vuc2UsIG9yIChhdCB5b3VyCi0gKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICovCi0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L29mX3BsYXRmb3JtLmg+Ci0KLSNpbmNsdWRlIDxhc20vbWFjaGRlcC5oPgotI2luY2x1ZGUgPGFzbS9wcm9tLmg+Ci0jaW5jbHVkZSA8YXNtL3VkYmcuaD4KLSNpbmNsdWRlIDxhc20vdGltZS5oPgotI2luY2x1ZGUgPGFzbS91aWMuaD4KLSNpbmNsdWRlIDxhc20vcGNpLWJyaWRnZS5oPgotCi0jaW5jbHVkZSA8YXNtL3BwYzR4eC5oPgotCi1zdGF0aWMgX19pbml0ZGF0YSBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIHNlcXVvaWFfb2ZfYnVzW10gPSB7Ci0JeyAuY29tcGF0aWJsZSA9ICJpYm0scGxiNCIsIH0sCi0JeyAuY29tcGF0aWJsZSA9ICJpYm0sb3BiIiwgfSwKLQl7IC5jb21wYXRpYmxlID0gImlibSxlYmMiLCB9LAotCXt9LAotfTsKLQotc3RhdGljIGludCBfX2luaXQgc2VxdW9pYV9kZXZpY2VfcHJvYmUodm9pZCkKLXsKLQlvZl9wbGF0Zm9ybV9idXNfcHJvYmUoTlVMTCwgc2VxdW9pYV9vZl9idXMsIE5VTEwpOwotCi0JcmV0dXJuIDA7Ci19Ci1tYWNoaW5lX2RldmljZV9pbml0Y2FsbChzZXF1b2lhLCBzZXF1b2lhX2RldmljZV9wcm9iZSk7Ci0KLXN0YXRpYyBpbnQgX19pbml0IHNlcXVvaWFfcHJvYmUodm9pZCkKLXsKLQl1bnNpZ25lZCBsb25nIHJvb3QgPSBvZl9nZXRfZmxhdF9kdF9yb290KCk7Ci0KLQlpZiAoIW9mX2ZsYXRfZHRfaXNfY29tcGF0aWJsZShyb290LCAiYW1jYyxzZXF1b2lhIikpCi0JCXJldHVybiAwOwotCi0JcHBjX3BjaV9mbGFncyA9IFBQQ19QQ0lfUkVBU1NJR05fQUxMX1JTUkM7Ci0KLQlyZXR1cm4gMTsKLX0KLQotZGVmaW5lX21hY2hpbmUoc2VxdW9pYSkgewotCS5uYW1lIAkJCQk9ICJTZXF1b2lhIiwKLQkucHJvYmUgCQkJCT0gc2VxdW9pYV9wcm9iZSwKLQkucHJvZ3Jlc3MgCQkJPSB1ZGJnX3Byb2dyZXNzLAotCS5pbml0X0lSUSAJCQk9IHVpY19pbml0X3RyZWUsCi0JLmdldF9pcnEgCQkJPSB1aWNfZ2V0X2lycSwKLQkucmVzdGFydAkJCT0gcHBjNHh4X3Jlc2V0X3N5c3RlbSwKLQkuY2FsaWJyYXRlX2RlY3IJCQk9IGdlbmVyaWNfY2FsaWJyYXRlX2RlY3IsCi19OwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy80NHgvdGFpc2hhbi5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy80NHgvdGFpc2hhbi5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0OWM3OGIyLi4wMDAwMDAwCi0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNDR4L3RhaXNoYW4uYworKysgL2Rldi9udWxsCkBAIC0xLDcyICswLDAgQEAKLS8qCi0gKiBUYWlzaGFuIGJvYXJkIHNwZWNpZmljIHJvdXRpbmVzIGJhc2VkIG9mZiBlYm9ueS5jIGNvZGUKLSAqIG9yaWdpbmFsIGNvcHlyaWdodHMgYmVsb3cKLSAqCi0gKiBNYXR0IFBvcnRlciA8bXBvcnRlckBrZXJuZWwuY3Jhc2hpbmcub3JnPgotICogQ29weXJpZ2h0IDIwMDItMjAwNSBNb250YVZpc3RhIFNvZnR3YXJlIEluYy4KLSAqCi0gKiBFdWdlbmUgU3Vyb3ZlZ2luIDxldWdlbmUuc3Vyb3ZlZ2luQHp1bHR5cy5jb20+IG9yIDxlYnNAZWJzaG9tZS5uZXQ+Ci0gKiBDb3B5cmlnaHQgKGMpIDIwMDMtMjAwNSBadWx0eXMgVGVjaG5vbG9naWVzCi0gKgotICogUmV3cml0dGVuIGFuZCBwb3J0ZWQgdG8gdGhlIG1lcmdlZCBwb3dlcnBjIHRyZWU6Ci0gKiBDb3B5cmlnaHQgMjAwNyBEYXZpZCBHaWJzb24gPGR3Z0BhdTEuaWJtLmNvbT4sIElCTSBDb3Jwb3JhdGlvbi4KLSAqCi0gKiBNb2RpZmllZCBmcm9tIGVib255LmMgZm9yIHRhaXNoYW46Ci0gKiBDb3B5cmlnaHQgMjAwNyBIdWdoIEJsZW1pbmdzIDxodWdoQGF1LmlibS5jb20+LCBJQk0gQ29ycG9yYXRpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0Ci0gKiB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgotICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L29mX3BsYXRmb3JtLmg+Ci0KLSNpbmNsdWRlIDxhc20vbWFjaGRlcC5oPgotI2luY2x1ZGUgPGFzbS9wcm9tLmg+Ci0jaW5jbHVkZSA8YXNtL3VkYmcuaD4KLSNpbmNsdWRlIDxhc20vdGltZS5oPgotI2luY2x1ZGUgPGFzbS91aWMuaD4KLSNpbmNsdWRlIDxhc20vcGNpLWJyaWRnZS5oPgotI2luY2x1ZGUgPGFzbS9wcGM0eHguaD4KLQotc3RhdGljIF9faW5pdGRhdGEgc3RydWN0IG9mX2RldmljZV9pZCB0YWlzaGFuX29mX2J1c1tdID0gewotCXsgLmNvbXBhdGlibGUgPSAiaWJtLHBsYjQiLCB9LAotCXsgLmNvbXBhdGlibGUgPSAiaWJtLG9wYiIsIH0sCi0JeyAuY29tcGF0aWJsZSA9ICJpYm0sZWJjIiwgfSwKLQl7fSwKLX07Ci0KLXN0YXRpYyBpbnQgX19pbml0IHRhaXNoYW5fZGV2aWNlX3Byb2JlKHZvaWQpCi17Ci0Jb2ZfcGxhdGZvcm1fYnVzX3Byb2JlKE5VTEwsIHRhaXNoYW5fb2ZfYnVzLCBOVUxMKTsKLQotCXJldHVybiAwOwotfQotbWFjaGluZV9kZXZpY2VfaW5pdGNhbGwodGFpc2hhbiwgdGFpc2hhbl9kZXZpY2VfcHJvYmUpOwotCi0vKgotICogQ2FsbGVkIHZlcnkgZWFybHksIE1NVSBpcyBvZmYsIGRldmljZS10cmVlIGlzbid0IHVuZmxhdHRlbmVkCi0gKi8KLXN0YXRpYyBpbnQgX19pbml0IHRhaXNoYW5fcHJvYmUodm9pZCkKLXsKLQl1bnNpZ25lZCBsb25nIHJvb3QgPSBvZl9nZXRfZmxhdF9kdF9yb290KCk7Ci0KLQlpZiAoIW9mX2ZsYXRfZHRfaXNfY29tcGF0aWJsZShyb290LCAiYW1jYyx0YWlzaGFuIikpCi0JCXJldHVybiAwOwotCi0JcHBjX3BjaV9mbGFncyA9IFBQQ19QQ0lfUkVBU1NJR05fQUxMX1JTUkM7Ci0KLQlyZXR1cm4gMTsKLX0KLQotZGVmaW5lX21hY2hpbmUodGFpc2hhbikgewotCS5uYW1lCQkJPSAiVGFpc2hhbiIsCi0JLnByb2JlCQkJPSB0YWlzaGFuX3Byb2JlLAotCS5wcm9ncmVzcwkJPSB1ZGJnX3Byb2dyZXNzLAotCS5pbml0X0lSUQkJPSB1aWNfaW5pdF90cmVlLAotCS5nZXRfaXJxCQk9IHVpY19nZXRfaXJxLAotCS5yZXN0YXJ0CQk9IHBwYzR4eF9yZXNldF9zeXN0ZW0sCi0JLmNhbGlicmF0ZV9kZWNyCQk9IGdlbmVyaWNfY2FsaWJyYXRlX2RlY3IsCi19OwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy81MTJ4L0tjb25maWcgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzUxMngvS2NvbmZpZwppbmRleCBjNjJmODkzLi4zMjY4NTJjIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzUxMngvS2NvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzUxMngvS2NvbmZpZwpAQCAtMyw2ICszLDggQEAKIAlzZWxlY3QgRlNMX1NPQwogCXNlbGVjdCBJUElDCiAJc2VsZWN0IFBQQ19DTE9DSworCXNlbGVjdCBQUENfUENJX0NIT0lDRQorCXNlbGVjdCBGU0xfUENJIGlmIFBDSQogCiBjb25maWcgUFBDX01QQzUxMjEKIAlib29sCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzUxMngvbXBjNTEyMV9hZHMuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNTEyeC9tcGM1MTIxX2Fkcy5jCmluZGV4IDVlYmY2OTMuLjQ0MWFiYzQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNTEyeC9tcGM1MTIxX2Fkcy5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNTEyeC9tcGM1MTIxX2Fkcy5jCkBAIC0yMiwxNiArMjIsMjYgQEAKICNpbmNsdWRlIDxhc20vcHJvbS5oPgogI2luY2x1ZGUgPGFzbS90aW1lLmg+CiAKKyNpbmNsdWRlIDxzeXNkZXYvZnNsX3BjaS5oPgorCiAjaW5jbHVkZSAibXBjNTEyeC5oIgogI2luY2x1ZGUgIm1wYzUxMjFfYWRzLmgiCiAKIHN0YXRpYyB2b2lkIF9faW5pdCBtcGM1MTIxX2Fkc19zZXR1cF9hcmNoKHZvaWQpCiB7CisjaWZkZWYgQ09ORklHX1BDSQorCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnA7CisjZW5kaWYKIAlwcmludGsoS0VSTl9JTkZPICJNUEM1MTIxIEFEUyBib2FyZCBmcm9tIEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yXG4iKTsKIAkvKgogCSAqIGNwbGQgcmVncyBhcmUgbmVlZGVkIGVhcmx5CiAJICovCiAJbXBjNTEyMV9hZHNfY3BsZF9tYXAoKTsKKworI2lmZGVmIENPTkZJR19QQ0kKKwlmb3JfZWFjaF9jb21wYXRpYmxlX25vZGUobnAsICJwY2kiLCAiZnNsLG1wYzUxMjEtcGNpIikKKwkJbXBjODN4eF9hZGRfYnJpZGdlKG5wKTsKKyNlbmRpZgogfQogCiBzdGF0aWMgdm9pZCBfX2luaXQgbXBjNTEyMV9hZHNfaW5pdF9JUlEodm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNTJ4eC9tcGM1Mnh4X2NvbW1vbi5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy81Mnh4L21wYzUyeHhfY29tbW9uLmMKaW5kZXggNGQ1ZmQxZC4uMDQ0YjRlNiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy81Mnh4L21wYzUyeHhfY29tbW9uLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy81Mnh4L21wYzUyeHhfY29tbW9uLmMKQEAgLTkwLDcgKzkwLDcgQEAKIAlvZl9ub2RlX3B1dChucCk7CiAJaWYgKCF4bGIpIHsKIAkJcHJpbnRrKEtFUk5fRVJSIF9fRklMRV9fICI6ICIKLQkJCSJFcnJvciBtYXBwaW5nIFhMQiBpbiBtcGM1Mnh4X3NldHVwX2NwdSgpLiAgIgorCQkJIkVycm9yIG1hcHBpbmcgWExCIGluIG1wYzUyeHhfc2V0dXBfY3B1KCkuICIKIAkJCSJFeHBlY3Qgc29tZSBhYm5vcm1hbCBiZWhhdmlvclxuIik7CiAJCXJldHVybjsKIAl9CkBAIC0yMTYsNyArMjE2LDggQEAKIAkJb3V0X2JlMzIoJm1wYzUyeHhfd2R0LT5jb3VudCwgMHgwMDAwMDBmZik7CiAJCW91dF9iZTMyKCZtcGM1Mnh4X3dkdC0+bW9kZSwgMHgwMDAwOTAwNCk7CiAJfSBlbHNlCi0JCXByaW50aygibXBjNTJ4eF9yZXN0YXJ0OiBDYW4ndCBhY2Nlc3Mgd2R0LiAiCisJCXByaW50ayhLRVJOX0VSUiBfX0ZJTEVfXyAiOiAiCisJCQkibXBjNTJ4eF9yZXN0YXJ0OiBDYW4ndCBhY2Nlc3Mgd2R0LiAiCiAJCQkiUmVzdGFydCBpbXBvc3NpYmxlLCBzeXN0ZW0gaGFsdGVkLlxuIik7CiAKIAl3aGlsZSAoMSk7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzUyeHgvbXBjNTJ4eF9wY2kuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNTJ4eC9tcGM1Mnh4X3BjaS5jCmluZGV4IDVhMzgyYmIuLmI0OWExODUyIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzUyeHgvbXBjNTJ4eF9wY2kuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzUyeHgvbXBjNTJ4eF9wY2kuYwpAQCAtMjY1LDggKzI2NSwxMSBAQAogCS8qIE1lbW9yeSB3aW5kb3dzICovCiAJcmVzID0gJmhvc2UtPm1lbV9yZXNvdXJjZXNbMF07CiAJaWYgKHJlcy0+ZmxhZ3MpIHsKLQkJcHJfZGVidWcoIm1lbV9yZXNvdXJjZVswXSA9IHsuc3RhcnQ9JXgsIC5lbmQ9JXgsIC5mbGFncz0lbHh9XG4iLAotCQkgICAgICAgICByZXMtPnN0YXJ0LCByZXMtPmVuZCwgcmVzLT5mbGFncyk7CisJCXByX2RlYnVnKCJtZW1fcmVzb3VyY2VbMF0gPSAiCisJCSAgICAgICAgICJ7LnN0YXJ0PSVsbHgsIC5lbmQ9JWxseCwgLmZsYWdzPSVsbHh9XG4iLAorCQkgICAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKXJlcy0+c3RhcnQsCisJCQkgKHVuc2lnbmVkIGxvbmcgbG9uZylyZXMtPmVuZCwKKwkJCSAodW5zaWduZWQgbG9uZyBsb25nKXJlcy0+ZmxhZ3MpOwogCQlvdXRfYmUzMigmcGNpX3JlZ3MtPml3MGJ0YXIsCiAJCSAgICAgICAgIE1QQzUyeHhfUENJX0lXQlRBUl9UUkFOU0xBVElPTihyZXMtPnN0YXJ0LCByZXMtPnN0YXJ0LAogCQkgICAgICAgICAgICAgICAgICByZXMtPmVuZCAtIHJlcy0+c3RhcnQgKyAxKSk7CkBAIC0yOTcsOSArMzAwLDExIEBACiAJCXByaW50ayhLRVJOX0VSUiAiJXM6IERpZG4ndCBmaW5kIElPIHJlc291cmNlc1xuIiwgX19GSUxFX18pOwogCQlyZXR1cm47CiAJfQotCXByX2RlYnVnKCIuaW9fcmVzb3VyY2U9ey5zdGFydD0leCwuZW5kPSV4LC5mbGFncz0lbHh9ICIKKwlwcl9kZWJ1ZygiLmlvX3Jlc291cmNlPXsuc3RhcnQ9JWxseCwuZW5kPSVsbHgsLmZsYWdzPSVsbHh9ICIKIAkgICAgICAgICAiLmlvX2Jhc2VfcGh5cz0weCVwXG4iLAotCSAgICAgICAgIHJlcy0+c3RhcnQsIHJlcy0+ZW5kLCByZXMtPmZsYWdzLCAodm9pZCopaG9zZS0+aW9fYmFzZV9waHlzKTsKKwkgICAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKXJlcy0+c3RhcnQsCisJCSAodW5zaWduZWQgbG9uZyBsb25nKXJlcy0+ZW5kLAorCQkgKHVuc2lnbmVkIGxvbmcgbG9uZylyZXMtPmZsYWdzLCAodm9pZCopaG9zZS0+aW9fYmFzZV9waHlzKTsKIAlvdXRfYmUzMigmcGNpX3JlZ3MtPml3MmJ0YXIsCiAJICAgICAgICAgTVBDNTJ4eF9QQ0lfSVdCVEFSX1RSQU5TTEFUSU9OKGhvc2UtPmlvX2Jhc2VfcGh5cywKIAkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzLT5zdGFydCwKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODJ4eC9LY29uZmlnIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84Mnh4L0tjb25maWcKaW5kZXggNzVlYjFlZC4uMzBmMDA4YiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84Mnh4L0tjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84Mnh4L0tjb25maWcKQEAgLTM4LDYgKzM4LDE0IEBACiAJICBUaGlzIGJvYXJkIGlzIGFsc28gcmVzb2xkIGJ5IEZyZWVzY2FsZSBhcyB0aGUgUVVJQ0NTdGFydAogCSAgTVBDODI0OCBFdmFsdWF0aW9uIFN5c3RlbSBhbmQvb3IgdGhlIENXSC1QUEMtODI0OE4tVkUuCiAKK2NvbmZpZyBNR0NPR0UKKwlib29sICJLZXltaWxlIE1HQ09HRSIKKwlzZWxlY3QgODI3MgorCXNlbGVjdCA4MjYwCisJc2VsZWN0IEZTTF9TT0MKKwloZWxwCisJICBUaGlzIGVuYWJsZXMgc3VwcG9ydCBmb3IgdGhlIEtleW1pbGUgTUdDT0dFIGJvYXJkLgorCiBlbmRpZgogCiBjb25maWcgUFEyQURTCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgyeHgvTWFrZWZpbGUgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgyeHgvTWFrZWZpbGUKaW5kZXggNmNkNWNkNS4uZDk4Mjc5MyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84Mnh4L01ha2VmaWxlCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODJ4eC9NYWtlZmlsZQpAQCAtNiwzICs2LDQgQEAKIG9iai0kKENPTkZJR19QUTJfQURTX1BDSV9QSUMpICs9IHBxMmFkcy1wY2ktcGljLm8KIG9iai0kKENPTkZJR19QUTJGQURTKSArPSBwcTJmYWRzLm8KIG9iai0kKENPTkZJR19FUDgyNDhFKSArPSBlcDgyNDhlLm8KK29iai0kKENPTkZJR19NR0NPR0UpICs9IG1nY29nZS5vCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgyeHgvbWdjb2dlLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgyeHgvbWdjb2dlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzJhZjE2OQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODJ4eC9tZ2NvZ2UuYwpAQCAtMCwwICsxLDEyOSBAQAorLyoKKyAqIEtleW1pbGUgbWdjb2dlIHN1cHBvcnQKKyAqIENvcHlyaWdodCAyMDA4IERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcgR21iSAorICogQXV0aG9yOiBIZWlrbyBTY2hvY2hlciA8aHNAZGVueC5kZT4KKyAqCisgKiBiYXNlZCBvbiBjb2RlIGZyb206CisgKiBDb3B5cmlnaHQgMjAwNyBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLgorICogQXV0aG9yOiBTY290dCBXb29kIDxzY290dHdvb2RAZnJlZXNjYWxlLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvZnNsX2RldmljZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9wbGF0Zm9ybS5oPgorCisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL2NwbTIuaD4KKyNpbmNsdWRlIDxhc20vdWRiZy5oPgorI2luY2x1ZGUgPGFzbS9tYWNoZGVwLmg+CisjaW5jbHVkZSA8YXNtL3RpbWUuaD4KKyNpbmNsdWRlIDxhc20vbXBjODI2MC5oPgorI2luY2x1ZGUgPGFzbS9wcm9tLmg+CisKKyNpbmNsdWRlIDxzeXNkZXYvZnNsX3NvYy5oPgorI2luY2x1ZGUgPHN5c2Rldi9jcG0yX3BpYy5oPgorCisjaW5jbHVkZSAicHEyLmgiCisKK3N0YXRpYyB2b2lkIF9faW5pdCBtZ2NvZ2VfcGljX2luaXQodm9pZCkKK3sKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wID0gb2ZfZmluZF9jb21wYXRpYmxlX25vZGUoTlVMTCwgTlVMTCwgImZzbCxwcTItcGljIik7CisJaWYgKCFucCkgeworCQlwcmludGsoS0VSTl9FUlIgIlBJQyBpbml0OiBjYW4gbm90IGZpbmQgY3BtLXBpYyBub2RlXG4iKTsKKwkJcmV0dXJuOworCX0KKworCWNwbTJfcGljX2luaXQobnApOworCW9mX25vZGVfcHV0KG5wKTsKK30KKworc3RydWN0IGNwbV9waW4geworCWludCBwb3J0LCBwaW4sIGZsYWdzOworfTsKKworc3RhdGljIF9faW5pdGRhdGEgc3RydWN0IGNwbV9waW4gbWdjb2dlX3BpbnNbXSA9IHsKKworCS8qIFNNQzIgKi8KKwl7MSwgOCwgQ1BNX1BJTl9JTlBVVCB8IENQTV9QSU5fUFJJTUFSWX0sCisJezEsIDksIENQTV9QSU5fT1VUUFVUIHwgQ1BNX1BJTl9QUklNQVJZfSwKKworCS8qIFNDQzQgKi8KKwl7MywgMjUsIENQTV9QSU5fSU5QVVQgfCBDUE1fUElOX1BSSU1BUll9LAorCXszLCAyNCwgQ1BNX1BJTl9JTlBVVCB8IENQTV9QSU5fUFJJTUFSWX0sCisJezMsICA5LCBDUE1fUElOX0lOUFVUIHwgQ1BNX1BJTl9QUklNQVJZfSwKKwl7MywgIDgsIENQTV9QSU5fSU5QVVQgfCBDUE1fUElOX1BSSU1BUll9LAorCXs0LCAyMiwgQ1BNX1BJTl9JTlBVVCB8IENQTV9QSU5fUFJJTUFSWX0sCisJezQsIDIxLCBDUE1fUElOX09VVFBVVCB8IENQTV9QSU5fUFJJTUFSWX0sCit9OworCitzdGF0aWMgdm9pZCBfX2luaXQgaW5pdF9pb3BvcnRzKHZvaWQpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShtZ2NvZ2VfcGlucyk7IGkrKykgeworCQljb25zdCBzdHJ1Y3QgY3BtX3BpbiAqcGluID0gJm1nY29nZV9waW5zW2ldOworCQljcG0yX3NldF9waW4ocGluLT5wb3J0IC0gMSwgcGluLT5waW4sIHBpbi0+ZmxhZ3MpOworCX0KKworCWNwbTJfc21jX2Nsa19zZXR1cChDUE1fQ0xLX1NNQzIsIENQTV9CUkc4KTsKKwljcG0yX2Nsa19zZXR1cChDUE1fQ0xLX1NDQzQsIENQTV9DTEs3LCBDUE1fQ0xLX1JYKTsKKwljcG0yX2Nsa19zZXR1cChDUE1fQ0xLX1NDQzQsIENQTV9DTEs4LCBDUE1fQ0xLX1RYKTsKK30KKworc3RhdGljIHZvaWQgX19pbml0IG1nY29nZV9zZXR1cF9hcmNoKHZvaWQpCit7CisJaWYgKHBwY19tZC5wcm9ncmVzcykKKwkJcHBjX21kLnByb2dyZXNzKCJtZ2NvZ2Vfc2V0dXBfYXJjaCgpIiwgMCk7CisKKwljcG0yX3Jlc2V0KCk7CisKKwkvKiBXaGVuIHRoaXMgaXMgc2V0LCBzbm9vcGluZyBDUE0gRE1BIGZyb20gUkFNIGNhdXNlcworCSAqIG1hY2hpbmUgY2hlY2tzLiAgU2VlIGVycmF0dW0gU0lVMTguCisJICovCisJY2xyYml0czMyKCZjcG0yX2ltbXItPmltX3NpdV9jb25mLnNpdV84Mnh4LnNjX2JjciwgTVBDODJYWF9CQ1JfUExEUCk7CisKKwlpbml0X2lvcG9ydHMoKTsKKworCWlmIChwcGNfbWQucHJvZ3Jlc3MpCisJCXBwY19tZC5wcm9ncmVzcygibWdjb2dlX3NldHVwX2FyY2goKSwgZmluaXNoIiwgMCk7Cit9CisKK3N0YXRpYyAgX19pbml0ZGF0YSBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIG9mX2J1c19pZHNbXSA9IHsKKwl7IC5jb21wYXRpYmxlID0gInNpbXBsZS1idXMiLCB9LAorCXt9LAorfTsKKworc3RhdGljIGludCBfX2luaXQgZGVjbGFyZV9vZl9wbGF0Zm9ybV9kZXZpY2VzKHZvaWQpCit7CisJb2ZfcGxhdGZvcm1fYnVzX3Byb2JlKE5VTEwsIG9mX2J1c19pZHMsIE5VTEwpOworCisJcmV0dXJuIDA7Cit9CittYWNoaW5lX2RldmljZV9pbml0Y2FsbChtZ2NvZ2UsIGRlY2xhcmVfb2ZfcGxhdGZvcm1fZGV2aWNlcyk7CisKKy8qCisgKiBDYWxsZWQgdmVyeSBlYXJseSwgZGV2aWNlLXRyZWUgaXNuJ3QgdW5mbGF0dGVuZWQKKyAqLworc3RhdGljIGludCBfX2luaXQgbWdjb2dlX3Byb2JlKHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyByb290ID0gb2ZfZ2V0X2ZsYXRfZHRfcm9vdCgpOworCXJldHVybiBvZl9mbGF0X2R0X2lzX2NvbXBhdGlibGUocm9vdCwgImtleW1pbGUsbWdjb2dlIik7Cit9CisKK2RlZmluZV9tYWNoaW5lKG1nY29nZSkKK3sKKwkubmFtZSA9ICJLZXltaWxlIE1HQ09HRSIsCisJLnByb2JlID0gbWdjb2dlX3Byb2JlLAorCS5zZXR1cF9hcmNoID0gbWdjb2dlX3NldHVwX2FyY2gsCisJLmluaXRfSVJRID0gbWdjb2dlX3BpY19pbml0LAorCS5nZXRfaXJxID0gY3BtMl9nZXRfaXJxLAorCS5jYWxpYnJhdGVfZGVjciA9IGdlbmVyaWNfY2FsaWJyYXRlX2RlY3IsCisJLnJlc3RhcnQgPSBwcTJfcmVzdGFydCwKKwkucHJvZ3Jlc3MgPSB1ZGJnX3Byb2dyZXNzLAorfTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODN4eC9LY29uZmlnIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84M3h4L0tjb25maWcKaW5kZXggNjE1OWM1ZC4uODNjNjY0YSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84M3h4L0tjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84M3h4L0tjb25maWcKQEAgLTE5LDcgKzE5LDYgQEAKIGNvbmZpZyBNUEM4MzJ4X01EUwogCWJvb2wgIkZyZWVzY2FsZSBNUEM4MzJ4IE1EUyIKIAlzZWxlY3QgREVGQVVMVF9VSU1BR0UKLQlzZWxlY3QgUVVJQ0NfRU5HSU5FCiAJc2VsZWN0IFBQQ19NUEM4MzJ4CiAJaGVscAogCSAgVGhpcyBvcHRpb24gZW5hYmxlcyBzdXBwb3J0IGZvciB0aGUgTVBDODMyeCBNRFMgZXZhbHVhdGlvbiBib2FyZC4KQEAgLTI3LDcgKzI2LDYgQEAKIGNvbmZpZyBNUEM4MzJ4X1JEQgogCWJvb2wgIkZyZWVzY2FsZSBNUEM4MzJ4IFJEQiIKIAlzZWxlY3QgREVGQVVMVF9VSU1BR0UKLQlzZWxlY3QgUVVJQ0NfRU5HSU5FCiAJc2VsZWN0IFBQQ19NUEM4MzJ4CiAJaGVscAogCSAgVGhpcyBvcHRpb24gZW5hYmxlcyBzdXBwb3J0IGZvciB0aGUgTVBDODMyMyBSREIgYm9hcmQuCkBAIC01NywxNSArNTUsMTIgQEAKIGNvbmZpZyBNUEM4MzZ4X01EUwogCWJvb2wgIkZyZWVzY2FsZSBNUEM4MzZ4IE1EUyIKIAlzZWxlY3QgREVGQVVMVF9VSU1BR0UKLQlzZWxlY3QgUVVJQ0NfRU5HSU5FCiAJaGVscAogCSAgVGhpcyBvcHRpb24gZW5hYmxlcyBzdXBwb3J0IGZvciB0aGUgTVBDODM2eCBNRFMgUHJvY2Vzc29yIEJvYXJkLgogCiBjb25maWcgTVBDODM2eF9SREsKIAlib29sICJGcmVlc2NhbGUvTG9naWMgTVBDODM2eCBSREsiCiAJc2VsZWN0IERFRkFVTFRfVUlNQUdFCi0Jc2VsZWN0IFFVSUNDX0VOR0lORQotCXNlbGVjdCBRRV9HUElPCiAJc2VsZWN0IEZTTF9HVE0KIAlzZWxlY3QgRlNMX0xCQwogCWhlbHAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODN4eC9tcGM4Mzd4X21kcy5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84M3h4L21wYzgzN3hfbWRzLmMKaW5kZXggYmU2MmRlMi4uOGJiMTNjOCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84M3h4L21wYzgzN3hfbWRzLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84M3h4L21wYzgzN3hfbWRzLmMKQEAgLTg1LDggKzg1LDE0IEBACiAJCXBwY19tZC5wcm9ncmVzcygibXBjODM3eF9tZHNfc2V0dXBfYXJjaCgpIiwgMCk7CiAKICNpZmRlZiBDT05GSUdfUENJCi0JZm9yX2VhY2hfY29tcGF0aWJsZV9ub2RlKG5wLCAicGNpIiwgImZzbCxtcGM4MzQ5LXBjaSIpCisJZm9yX2VhY2hfY29tcGF0aWJsZV9ub2RlKG5wLCAicGNpIiwgImZzbCxtcGM4MzQ5LXBjaSIpIHsKKwkJaWYgKCFvZl9kZXZpY2VfaXNfYXZhaWxhYmxlKG5wKSkgeworCQkJcHJfd2FybmluZygiJXM6IGRpc2FibGVkIGJ5IHRoZSBmaXJtd2FyZS5cbiIsCisJCQkJICAgbnAtPmZ1bGxfbmFtZSk7CisJCQljb250aW51ZTsKKwkJfQogCQltcGM4M3h4X2FkZF9icmlkZ2UobnApOworCX0KICNlbmRpZgogCW1wYzgzN3htZHNfdXNiX2NmZygpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84NXh4L0tjb25maWcgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvS2NvbmZpZwppbmRleCAyOTE2NzViLi5iNzlkYzcxIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvS2NvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvS2NvbmZpZwpAQCAtMzMsNyArMzMsNiBAQAogY29uZmlnIE1QQzg1eHhfTURTCiAJYm9vbCAiRnJlZXNjYWxlIE1QQzg1eHggTURTIgogCXNlbGVjdCBERUZBVUxUX1VJTUFHRQotCXNlbGVjdCBRVUlDQ19FTkdJTkUKIAlzZWxlY3QgUEhZTElCCiAJaGVscAogCSAgVGhpcyBvcHRpb24gZW5hYmxlcyBzdXBwb3J0IGZvciB0aGUgTVBDODV4eCBNRFMgYm9hcmQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC9tcGM4NXh4X2Fkcy5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84NXh4L21wYzg1eHhfYWRzLmMKaW5kZXggZDE3ODA3YS4uMDI5M2UzZCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84NXh4L21wYzg1eHhfYWRzLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84NXh4L21wYzg1eHhfYWRzLmMKQEAgLTIxMyw3ICsyMTMsNiBAQAogCXN2aWQgPSBtZnNwcihTUFJOX1NWUik7CiAKIAlzZXFfcHJpbnRmKG0sICJWZW5kb3JcdFx0OiBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvclxuIik7Ci0Jc2VxX3ByaW50ZihtLCAiTWFjaGluZVx0XHQ6IG1wYzg1eHhcbiIpOwogCXNlcV9wcmludGYobSwgIlBWUlx0XHQ6IDB4JXhcbiIsIHB2aWQpOwogCXNlcV9wcmludGYobSwgIlNWUlx0XHQ6IDB4JXhcbiIsIHN2aWQpOwogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvc2JjODU2MC5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84NXh4L3NiYzg1NjAuYwppbmRleCA2NTA5YWRlLi4wYzlhODU2IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvc2JjODU2MC5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC9zYmM4NTYwLmMKQEAgLTE1Niw3ICsxNTYsNyBAQAogCWludCBpOwogCiAJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoc2JjODU2MF9waW5zKTsgaSsrKSB7Ci0JCXN0cnVjdCBjcG1fcGluICpwaW4gPSAmc2JjODU2MF9waW5zW2ldOworCQljb25zdCBzdHJ1Y3QgY3BtX3BpbiAqcGluID0gJnNiYzg1NjBfcGluc1tpXTsKIAkJY3BtMl9zZXRfcGluKHBpbi0+cG9ydCwgcGluLT5waW4sIHBpbi0+ZmxhZ3MpOwogCX0KIApAQCAtMjAwLDcgKzIwMCw2IEBACiAJc3ZpZCA9IG1mc3ByKFNQUk5fU1ZSKTsKIAogCXNlcV9wcmludGYobSwgIlZlbmRvclx0XHQ6IFdpbmQgUml2ZXJcbiIpOwotCXNlcV9wcmludGYobSwgIk1hY2hpbmVcdFx0OiBTQkM4NTYwXG4iKTsKIAlzZXFfcHJpbnRmKG0sICJQVlJcdFx0OiAweCV4XG4iLCBwdmlkKTsKIAlzZXFfcHJpbnRmKG0sICJTVlJcdFx0OiAweCV4XG4iLCBzdmlkKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84Nnh4L0tjb25maWcgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg2eHgvS2NvbmZpZwppbmRleCA5MzU1YTUyLi43N2RkNzk3IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg2eHgvS2NvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg2eHgvS2NvbmZpZwpAQCAtMzEsNiArMzEsMTMgQEAKIAloZWxwCiAJICBUaGlzIG9wdGlvbiBlbmFibGVzIHN1cHBvcnQgZm9yIHRoZSBNUEM4NjEwIEhQQ0QgYm9hcmQuCiAKK2NvbmZpZyBHRUZfU0JDNjEwCisJYm9vbCAiR0UgRmFudWMgU0JDNjEwIgorCXNlbGVjdCBERUZBVUxUX1VJTUFHRQorCXNlbGVjdCBIQVNfUkFQSURJTworCWhlbHAKKwkgIFRoaXMgb3B0aW9uIGVuYWJsZXMgc3VwcG9ydCBmb3IgR0UgRmFudWMncyBTQkM2MTAuCisKIGVuZGlmCiAKIGNvbmZpZyBNUEM4NjQxCkBAIC0zOSw3ICs0Niw3IEBACiAJc2VsZWN0IEZTTF9QQ0kgaWYgUENJCiAJc2VsZWN0IFBQQ19VREJHXzE2NTUwCiAJc2VsZWN0IE1QSUMKLQlkZWZhdWx0IHkgaWYgTVBDODY0MV9IUENOIHx8IFNCQzg2NDFECisJZGVmYXVsdCB5IGlmIE1QQzg2NDFfSFBDTiB8fCBTQkM4NjQxRCB8fCBHRUZfU0JDNjEwCiAKIGNvbmZpZyBNUEM4NjEwCiAJYm9vbApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84Nnh4L01ha2VmaWxlIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84Nnh4L01ha2VmaWxlCmluZGV4IDhmZWUzN2QuLjRhNTZmZjYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODZ4eC9NYWtlZmlsZQorKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg2eHgvTWFrZWZpbGUKQEAgLTcsMyArNyw0IEBACiBvYmotJChDT05GSUdfTVBDODY0MV9IUENOKQkrPSBtcGM4Nnh4X2hwY24ubwogb2JqLSQoQ09ORklHX1NCQzg2NDFEKQkJKz0gc2JjODY0MWQubwogb2JqLSQoQ09ORklHX01QQzg2MTBfSFBDRCkJKz0gbXBjODYxMF9ocGNkLm8KK29iai0kKENPTkZJR19HRUZfU0JDNjEwKQkrPSBnZWZfc2JjNjEwLm8gZ2VmX3BpYy5vCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg2eHgvZ2VmX3BpYy5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84Nnh4L2dlZl9waWMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MGQwYTJiCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84Nnh4L2dlZl9waWMuYwpAQCAtMCwwICsxLDI1OCBAQAorLyoKKyAqIEludGVycnVwdCBoYW5kbGluZyBmb3IgR0UgRmFudWMncyBGUEdBIGJhc2VkIFBJQworICoKKyAqIEF1dGhvcjogTWFydHluIFdlbGNoIDxtYXJ0eW4ud2VsY2hAZ2VmYW51Yy5jb20+CisgKgorICogMjAwOCAoYykgR0UgRmFudWMgSW50ZWxsaWdlbnQgUGxhdGZvcm1zIEVtYmVkZGVkIFN5c3RlbXMsIEluYy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogdmVyc2lvbiAyLiAgVGhpcyBwcm9ncmFtIGlzIGxpY2Vuc2VkICJhcyBpcyIgd2l0aG91dCBhbnkgd2FycmFudHkgb2YgYW55CisgKiBraW5kLCB3aGV0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqLworCisjaW5jbHVkZSA8bGludXgvc3RkZGVmLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lycS5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisKKyNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL3Byb20uaD4KKyNpbmNsdWRlIDxhc20vaXJxLmg+CisKKyNpbmNsdWRlICJnZWZfcGljLmgiCisKKyNkZWZpbmUgREVCVUcKKyN1bmRlZiBERUJVRworCisjaWZkZWYgREVCVUcKKyNkZWZpbmUgREJHKGZtdC4uLikgZG8geyBwcmludGsoS0VSTl9ERUJVRyAiZ2VmX3BpYzogIiBmbXQpOyB9IHdoaWxlICgwKQorI2Vsc2UKKyNkZWZpbmUgREJHKGZtdC4uLikgZG8geyB9IHdoaWxlICgwKQorI2VuZGlmCisKKyNkZWZpbmUgR0VGX1BJQ19OVU1fSVJRUwkzMgorCisvKiBJbnRlcnJ1cHQgQ29udHJvbGxlciBJbnRlcmZhY2UgUmVnaXN0ZXJzICovCisjZGVmaW5lIEdFRl9QSUNfSU5UUl9TVEFUVVMJMHgwMDAwCisKKyNkZWZpbmUgR0VGX1BJQ19JTlRSX01BU0soY3B1KQkoMHgwMDEwICsgKDB4NCAqIGNwdSkpCisjZGVmaW5lIEdFRl9QSUNfQ1BVMF9JTlRSX01BU0sJR0VGX1BJQ19JTlRSX01BU0soMCkKKyNkZWZpbmUgR0VGX1BJQ19DUFUxX0lOVFJfTUFTSwlHRUZfUElDX0lOVFJfTUFTSygxKQorCisjZGVmaW5lIEdFRl9QSUNfTUNQX01BU0soY3B1KQkoMHgwMDE4ICsgKDB4NCAqIGNwdSkpCisjZGVmaW5lIEdFRl9QSUNfQ1BVMF9NQ1BfTUFTSwlHRUZfUElDX01DUF9NQVNLKDApCisjZGVmaW5lIEdFRl9QSUNfQ1BVMV9NQ1BfTUFTSwlHRUZfUElDX01DUF9NQVNLKDEpCisKKyNkZWZpbmUgZ2VmX2lycV90b19odyh2aXJxKSAgICAoKHVuc2lnbmVkIGludClpcnFfbWFwW3ZpcnFdLmh3aXJxKQorCisKK3N0YXRpYyBERUZJTkVfU1BJTkxPQ0soZ2VmX3BpY19sb2NrKTsKKworc3RhdGljIHZvaWQgX19pb21lbSAqZ2VmX3BpY19pcnFfcmVnX2Jhc2U7CitzdGF0aWMgc3RydWN0IGlycV9ob3N0ICpnZWZfcGljX2lycV9ob3N0Oworc3RhdGljIGludCBnZWZfcGljX2Nhc2NhZGVfaXJxOworCisvKgorICogSW50ZXJydXB0IENvbnRyb2xsZXIgSGFuZGxpbmcKKyAqCisgKiBUaGUgaW50ZXJydXB0IGNvbnRyb2xsZXIgaGFuZGxlcyBpbnRlcnJ1cHRzIGZvciBtb3N0IG9uIGJvYXJkIGludGVycnVwdHMsCisgKiBhcGFydCBmcm9tIFBDSSBpbnRlcnJ1cHRzLiBGb3IgZXhhbXBsZSBvbiBTQkM2MTA6CisgKgorICogMTc6MzEgUk8gUmVzZXJ2ZWQKKyAqIDE2ICAgIFJPIFBDSSBFeHByZXNzIERvb3JiZWxsIDMgU3RhdHVzCisgKiAxNSAgICBSTyBQQ0kgRXhwcmVzcyBEb29yYmVsbCAyIFN0YXR1cworICogMTQgICAgUk8gUENJIEV4cHJlc3MgRG9vcmJlbGwgMSBTdGF0dXMKKyAqIDEzICAgIFJPIFBDSSBFeHByZXNzIERvb3JiZWxsIDAgU3RhdHVzCisgKiAxMiAgICBSTyBSZWFsIFRpbWUgQ2xvY2sgSW50ZXJydXB0IFN0YXR1cworICogMTEgICAgUk8gVGVtcGVyYXR1cmUgSW50ZXJydXB0IFN0YXR1cworICogMTAgICAgUk8gVGVtcGVyYXR1cmUgQ3JpdGljYWwgSW50ZXJydXB0IFN0YXR1cworICogOSAgICAgUk8gRXRoZXJuZXQgUEhZMSBJbnRlcnJ1cHQgU3RhdHVzCisgKiA4ICAgICBSTyBFdGhlcm5ldCBQSFkzIEludGVycnVwdCBTdGF0dXMKKyAqIDcgICAgIFJPIFBFWDg1NDggSW50ZXJydXB0IFN0YXR1cworICogNiAgICAgUk8gUmVzZXJ2ZWQKKyAqIDUgICAgIFJPIFdhdGNoZG9nIDAgSW50ZXJydXB0IFN0YXR1cworICogNCAgICAgUk8gV2F0Y2hkb2cgMSBJbnRlcnJ1cHQgU3RhdHVzCisgKiAzICAgICBSTyBBWElTIE1lc3NhZ2UgRklGTyBBIEludGVycnVwdCBTdGF0dXMKKyAqIDIgICAgIFJPIEFYSVMgTWVzc2FnZSBGSUZPIEIgSW50ZXJydXB0IFN0YXR1cworICogMSAgICAgUk8gQVhJUyBNZXNzYWdlIEZJRk8gQyBJbnRlcnJ1cHQgU3RhdHVzCisgKiAwICAgICBSTyBBWElTIE1lc3NhZ2UgRklGTyBEIEludGVycnVwdCBTdGF0dXMKKyAqCisgKiBJbnRlcnJ1cHRzIGNhbiBiZSBmb3J3YXJkZWQgdG8gb25lIG9mIHR3byBvdXRwdXQgbGluZXMuIE5vdGhpbmcKKyAqIGNsZXZlciBpcyBkb25lLCBzbyBpZiB0aGUgbWFza3MgYXJlIGluY29ycmVjdGx5IHNldCwgYSBzaW5nbGUgaW5wdXQKKyAqIGludGVycnVwdCBjb3VsZCBnZW5lcmF0ZSBpbnRlcnJ1cHRzIG9uIGJvdGggb3V0cHV0IGxpbmVzIQorICoKKyAqIFRoZSBkdWFsIGxpbmVzIGFyZSB0aGVyZSB0byBhbGxvdyB0aGUgY2hhaW5lZCBpbnRlcnJ1cHRzIHRvIGJlIGVhc2lseQorICogcGFzc2VkIGludG8gdHdvIGRpZmZlcmVudCBjb3Jlcy4gV2UgY3VycmVudGx5IGRvIG5vdCB1c2UgdGhpcyBmdW5jdGlvbmFsaXR5CisgKiBpbiB0aGlzIGRyaXZlci4KKyAqCisgKiBDb250cm9sbGVyIGNhbiBhbHNvIGJlIGNvbmZpZ3VyZWQgdG8gZ2VuZXJhdGUgTWFjaGluZSBjaGVja3MgKE1DUCksIGFnYWluIG9uCisgKiB0d28gbGluZXMsIHRvIGJlIGF0dGFjaGVkIHRvIHR3byBkaWZmZXJlbnQgY29yZXMuIEl0IGlzIHN1Z2dlc3RlZCB0aGF0IHRoZXNlCisgKiBzaG91bGQgYmUgbWFza2VkIG91dC4KKyAqLworCit2b2lkIGdlZl9waWNfY2FzY2FkZSh1bnNpZ25lZCBpbnQgaXJxLCBzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MpCit7CisJdW5zaWduZWQgaW50IGNhc2NhZGVfaXJxOworCisJLyoKKwkgKiBTZWUgaWYgd2UgYWN0dWFsbHkgaGF2ZSBhbiBpbnRlcnJ1cHQsIGNhbGwgZ2VuZXJpYyBoYW5kbGluZyBjb2RlIGlmCisJICogd2UgZG8uCisJICovCisJY2FzY2FkZV9pcnEgPSBnZWZfcGljX2dldF9pcnEoKTsKKworCWlmIChjYXNjYWRlX2lycSAhPSBOT19JUlEpCisJCWdlbmVyaWNfaGFuZGxlX2lycShjYXNjYWRlX2lycSk7CisKKwlkZXNjLT5jaGlwLT5lb2koaXJxKTsKKworfQorCitzdGF0aWMgdm9pZCBnZWZfcGljX21hc2sodW5zaWduZWQgaW50IHZpcnEpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1bnNpZ25lZCBpbnQgaHdpcnE7CisJdTMyIG1hc2s7CisKKwlod2lycSA9IGdlZl9pcnFfdG9faHcodmlycSk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZ2VmX3BpY19sb2NrLCBmbGFncyk7CisJbWFzayA9IGluX2JlMzIoZ2VmX3BpY19pcnFfcmVnX2Jhc2UgKyBHRUZfUElDX0lOVFJfTUFTSygwKSk7CisJbWFzayAmPSB+KDEgPDwgaHdpcnEpOworCW91dF9iZTMyKGdlZl9waWNfaXJxX3JlZ19iYXNlICsgR0VGX1BJQ19JTlRSX01BU0soMCksIG1hc2spOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmdlZl9waWNfbG9jaywgZmxhZ3MpOworfQorCitzdGF0aWMgdm9pZCBnZWZfcGljX21hc2tfYWNrKHVuc2lnbmVkIGludCB2aXJxKQoreworCS8qIERvbid0IHRoaW5rIHdlIGFjdHVhbGx5IGhhdmUgdG8gZG8gYW55dGhpbmcgdG8gYWNrIGFuIGludGVycnVwdCwKKwkgKiB3ZSBqdXN0IG5lZWQgdG8gY2xlYXIgZG93biB0aGUgZGV2aWNlcyBpbnRlcnJ1cHQgYW5kIGl0IHdpbGwgZ28gYXdheQorCSAqLworCWdlZl9waWNfbWFzayh2aXJxKTsKK30KKworc3RhdGljIHZvaWQgZ2VmX3BpY191bm1hc2sodW5zaWduZWQgaW50IHZpcnEpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1bnNpZ25lZCBpbnQgaHdpcnE7CisJdTMyIG1hc2s7CisKKwlod2lycSA9IGdlZl9pcnFfdG9faHcodmlycSk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZ2VmX3BpY19sb2NrLCBmbGFncyk7CisJbWFzayA9IGluX2JlMzIoZ2VmX3BpY19pcnFfcmVnX2Jhc2UgKyBHRUZfUElDX0lOVFJfTUFTSygwKSk7CisJbWFzayB8PSAoMSA8PCBod2lycSk7CisJb3V0X2JlMzIoZ2VmX3BpY19pcnFfcmVnX2Jhc2UgKyBHRUZfUElDX0lOVFJfTUFTSygwKSwgbWFzayk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZ2VmX3BpY19sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgZ2VmX3BpY19jaGlwID0geworCS50eXBlbmFtZQk9ICJnZWZwIiwKKwkubWFzawkJPSBnZWZfcGljX21hc2ssCisJLm1hc2tfYWNrCT0gZ2VmX3BpY19tYXNrX2FjaywKKwkudW5tYXNrCQk9IGdlZl9waWNfdW5tYXNrLAorfTsKKworCisvKiBXaGVuIGFuIGludGVycnVwdCBpcyBiZWluZyBjb25maWd1cmVkLCB0aGlzIGNhbGwgYWxsb3dzIHNvbWUgZmxleGliaWx0eQorICogaW4gZGVjaWRpbmcgd2hpY2ggaXJxX2NoaXAgc3RydWN0dXJlIGlzIHVzZWQKKyAqLworc3RhdGljIGludCBnZWZfcGljX2hvc3RfbWFwKHN0cnVjdCBpcnFfaG9zdCAqaCwgdW5zaWduZWQgaW50IHZpcnEsCisJCQkgIGlycV9od19udW1iZXJfdCBod2lycSkKK3sKKwkvKiBBbGwgaW50ZXJydXB0cyBhcmUgTEVWRUwgc2Vuc2l0aXZlICovCisJZ2V0X2lycV9kZXNjKHZpcnEpLT5zdGF0dXMgfD0gSVJRX0xFVkVMOworCXNldF9pcnFfY2hpcF9hbmRfaGFuZGxlcih2aXJxLCAmZ2VmX3BpY19jaGlwLCBoYW5kbGVfbGV2ZWxfaXJxKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGdlZl9waWNfaG9zdF94bGF0ZShzdHJ1Y3QgaXJxX2hvc3QgKmgsIHN0cnVjdCBkZXZpY2Vfbm9kZSAqY3QsCisJCQkgICAgdTMyICppbnRzcGVjLCB1bnNpZ25lZCBpbnQgaW50c2l6ZSwKKwkJCSAgICBpcnFfaHdfbnVtYmVyX3QgKm91dF9od2lycSwgdW5zaWduZWQgaW50ICpvdXRfZmxhZ3MpCit7CisKKwkqb3V0X2h3aXJxID0gaW50c3BlY1swXTsKKwlpZiAoaW50c2l6ZSA+IDEpCisJCSpvdXRfZmxhZ3MgPSBpbnRzcGVjWzFdOworCWVsc2UKKwkJKm91dF9mbGFncyA9IElSUV9UWVBFX0xFVkVMX0hJR0g7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBpcnFfaG9zdF9vcHMgZ2VmX3BpY19ob3N0X29wcyA9IHsKKwkubWFwCT0gZ2VmX3BpY19ob3N0X21hcCwKKwkueGxhdGUJPSBnZWZfcGljX2hvc3RfeGxhdGUsCit9OworCisKKy8qCisgKiBJbml0aWFsaXNhdGlvbiBvZiBQSUMsIHRoaXMgc2hvdWxkIGJlIGNhbGxlZCBpbiBCU1AKKyAqLwordm9pZCBfX2luaXQgZ2VmX3BpY19pbml0KHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnApCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCS8qIE1hcCB0aGUgZGV2aWNlcyByZWdpc3RlcnMgaW50byBtZW1vcnkgKi8KKwlnZWZfcGljX2lycV9yZWdfYmFzZSA9IG9mX2lvbWFwKG5wLCAwKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZnZWZfcGljX2xvY2ssIGZsYWdzKTsKKworCS8qIEluaXRpYWxpc2UgZXZlcnl0aGluZyBhcyBtYXNrZWQuICovCisJb3V0X2JlMzIoZ2VmX3BpY19pcnFfcmVnX2Jhc2UgKyBHRUZfUElDX0NQVTBfSU5UUl9NQVNLLCAwKTsKKwlvdXRfYmUzMihnZWZfcGljX2lycV9yZWdfYmFzZSArIEdFRl9QSUNfQ1BVMV9JTlRSX01BU0ssIDApOworCisJb3V0X2JlMzIoZ2VmX3BpY19pcnFfcmVnX2Jhc2UgKyBHRUZfUElDX0NQVTBfTUNQX01BU0ssIDApOworCW91dF9iZTMyKGdlZl9waWNfaXJxX3JlZ19iYXNlICsgR0VGX1BJQ19DUFUxX01DUF9NQVNLLCAwKTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmdlZl9waWNfbG9jaywgZmxhZ3MpOworCisJLyogTWFwIGNvbnRyb2xsZXIgKi8KKwlnZWZfcGljX2Nhc2NhZGVfaXJxID0gaXJxX29mX3BhcnNlX2FuZF9tYXAobnAsIDApOworCWlmIChnZWZfcGljX2Nhc2NhZGVfaXJxID09IE5PX0lSUSkgeworCQlwcmludGsoS0VSTl9FUlIgIlNCQzYxMDogZmFpbGVkIHRvIG1hcCBjYXNjYWRlIGludGVycnVwdCIpOworCQlyZXR1cm47CisJfQorCisJLyogU2V0dXAgYW4gaXJxX2hvc3Qgc3RydWN0dXJlICovCisJZ2VmX3BpY19pcnFfaG9zdCA9IGlycV9hbGxvY19ob3N0KG5wLCBJUlFfSE9TVF9NQVBfTElORUFSLAorCQkJCQkgIEdFRl9QSUNfTlVNX0lSUVMsCisJCQkJCSAgJmdlZl9waWNfaG9zdF9vcHMsIE5PX0lSUSk7CisJaWYgKGdlZl9waWNfaXJxX2hvc3QgPT0gTlVMTCkKKwkJcmV0dXJuOworCisJLyogQ2hhaW4gd2l0aCBwYXJlbnQgY29udHJvbGxlciAqLworCXNldF9pcnFfY2hhaW5lZF9oYW5kbGVyKGdlZl9waWNfY2FzY2FkZV9pcnEsIGdlZl9waWNfY2FzY2FkZSk7Cit9CisKKy8qCisgKiBUaGlzIGlzIGNhbGxlZCB3aGVuIHdlIHJlY2VpdmUgYW4gaW50ZXJydXB0IHdpdGggYXBwYXJlbnRseSBjb21lcyBmcm9tIHRoaXMKKyAqIGNoaXAgLSBjaGVjaywgcmV0dXJuaW5nIHRoZSBoaWdoZXN0IGludGVycnVwdCBnZW5lcmF0ZWQgb3IgcmV0dXJuIE5PX0lSUQorICovCit1bnNpZ25lZCBpbnQgZ2VmX3BpY19nZXRfaXJxKHZvaWQpCit7CisJdTMyIGNhdXNlLCBtYXNrLCBhY3RpdmU7CisJdW5zaWduZWQgaW50IHZpcnEgPSBOT19JUlE7CisJaW50IGh3aXJxOworCisJY2F1c2UgPSBpbl9iZTMyKGdlZl9waWNfaXJxX3JlZ19iYXNlICsgR0VGX1BJQ19JTlRSX1NUQVRVUyk7CisKKwltYXNrID0gaW5fYmUzMihnZWZfcGljX2lycV9yZWdfYmFzZSArIEdFRl9QSUNfSU5UUl9NQVNLKDApKTsKKworCWFjdGl2ZSA9IGNhdXNlICYgbWFzazsKKworCWlmIChhY3RpdmUpIHsKKwkJZm9yIChod2lycSA9IEdFRl9QSUNfTlVNX0lSUVMgLSAxOyBod2lycSA+IC0xOyBod2lycS0tKSB7CisJCQlpZiAoYWN0aXZlICYgKDB4MSA8PCBod2lycSkpCisJCQkJYnJlYWs7CisJCX0KKwkJdmlycSA9IGlycV9saW5lYXJfcmV2bWFwKGdlZl9waWNfaXJxX2hvc3QsCisJCQkoaXJxX2h3X251bWJlcl90KWh3aXJxKTsKKwl9CisKKwlyZXR1cm4gdmlycTsKK30KKwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84Nnh4L2dlZl9waWMuaCBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODZ4eC9nZWZfcGljLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjE0OTkxNgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODZ4eC9nZWZfcGljLmgKQEAgLTAsMCArMSwxMSBAQAorI2lmbmRlZiBfX0dFRl9QSUNfSF9fCisjZGVmaW5lIF9fR0VGX1BJQ19IX18KKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKwordm9pZCBnZWZfcGljX2Nhc2NhZGUodW5zaWduZWQgaW50LCBzdHJ1Y3QgaXJxX2Rlc2MgKik7Cit1bnNpZ25lZCBpbnQgZ2VmX3BpY19nZXRfaXJxKHZvaWQpOwordm9pZCBnZWZfcGljX2luaXQoc3RydWN0IGRldmljZV9ub2RlICopOworCisjZW5kaWYgLyogX19HRUZfUElDX0hfXyAqLworCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg2eHgvZ2VmX3NiYzYxMC5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84Nnh4L2dlZl9zYmM2MTAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MjFjNDVmCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84Nnh4L2dlZl9zYmM2MTAuYwpAQCAtMCwwICsxLDIyMSBAQAorLyoKKyAqIEdFIEZhbnVjIFNCQzYxMCBib2FyZCBzdXBwb3J0CisgKgorICogQXV0aG9yOiBNYXJ0eW4gV2VsY2ggPG1hcnR5bi53ZWxjaEBnZWZhbnVjLmNvbT4KKyAqCisgKiBDb3B5cmlnaHQgMjAwOCBHRSBGYW51YyBJbnRlbGxpZ2VudCBQbGF0Zm9ybXMgRW1iZWRkZWQgU3lzdGVtcywgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogQmFzZWQgb246IG1wYzg2eHhfaHBjbi5jIChNUEM4Nnh4IEhQQ04gYm9hcmQgc3BlY2lmaWMgcm91dGluZXMpCisgKiBDb3B5cmlnaHQgMjAwNiBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciBJbmMuCisgKgorICogTkVDIGZpeHVwIGFkYXB0ZWQgZnJvbSBhcmNoL21pcHMvcGNpL2ZpeHVwLWxtMmUuYworICovCisKKyNpbmNsdWRlIDxsaW51eC9zdGRkZWYuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9rZGV2X3QuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CisjaW5jbHVkZSA8bGludXgvb2ZfcGxhdGZvcm0uaD4KKworI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KKyNpbmNsdWRlIDxhc20vdGltZS5oPgorI2luY2x1ZGUgPGFzbS9tYWNoZGVwLmg+CisjaW5jbHVkZSA8YXNtL3BjaS1icmlkZ2UuaD4KKyNpbmNsdWRlIDxhc20vbXBjODZ4eC5oPgorI2luY2x1ZGUgPGFzbS9wcm9tLmg+CisjaW5jbHVkZSA8bW0vbW11X2RlY2wuaD4KKyNpbmNsdWRlIDxhc20vdWRiZy5oPgorCisjaW5jbHVkZSA8YXNtL21waWMuaD4KKworI2luY2x1ZGUgPHN5c2Rldi9mc2xfcGNpLmg+CisjaW5jbHVkZSA8c3lzZGV2L2ZzbF9zb2MuaD4KKworI2luY2x1ZGUgIm1wYzg2eHguaCIKKyNpbmNsdWRlICJnZWZfcGljLmgiCisKKyN1bmRlZiBERUJVRworCisjaWZkZWYgREVCVUcKKyNkZWZpbmUgREJHIChmbXQuLi4pIGRvIHsgcHJpbnRrKEtFUk5fRVJSICJTQkM2MTA6ICIgZm10KTsgfSB3aGlsZSAoMCkKKyNlbHNlCisjZGVmaW5lIERCRyAoZm10Li4uKSBkbyB7IH0gd2hpbGUgKDApCisjZW5kaWYKKwordm9pZCBfX2lvbWVtICpzYmM2MTBfcmVnczsKKworc3RhdGljIHZvaWQgX19pbml0IGdlZl9zYmM2MTBfaW5pdF9pcnEodm9pZCkKK3sKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKmNhc2NhZGVfbm9kZSA9IE5VTEw7CisKKwltcGM4Nnh4X2luaXRfaXJxKCk7CisKKwkvKgorCSAqIFRoZXJlIGlzIGEgc2ltcGxlIGludGVycnVwdCBoYW5kbGVyIGluIHRoZSBtYWluIEZQR0EsIHRoaXMgbmVlZHMKKwkgKiB0byBiZSBjYXNjYWRlZCBpbnRvIHRoZSBNUElDCisJICovCisJY2FzY2FkZV9ub2RlID0gb2ZfZmluZF9jb21wYXRpYmxlX25vZGUoTlVMTCwgTlVMTCwgImdlZixmcGdhLXBpYyIpOworCWlmICghY2FzY2FkZV9ub2RlKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIlNCQzYxMDogTm8gRlBHQSBQSUNcbiIpOworCQlyZXR1cm47CisJfQorCisJZ2VmX3BpY19pbml0KGNhc2NhZGVfbm9kZSk7CisJb2Zfbm9kZV9wdXQoY2FzY2FkZV9ub2RlKTsKK30KKworc3RhdGljIHZvaWQgX19pbml0IGdlZl9zYmM2MTBfc2V0dXBfYXJjaCh2b2lkKQoreworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqcmVnczsKKyNpZmRlZiBDT05GSUdfUENJCisJc3RydWN0IGRldmljZV9ub2RlICpucDsKKworCWZvcl9lYWNoX2NvbXBhdGlibGVfbm9kZShucCwgInBjaSIsICJmc2wsbXBjODY0MS1wY2llIikgeworCQlmc2xfYWRkX2JyaWRnZShucCwgMSk7CisJfQorI2VuZGlmCisKKwlwcmludGsoS0VSTl9JTkZPICJHRSBGYW51YyBJbnRlbGxpZ2VudCBQbGF0Zm9ybXMgU0JDNjEwIDZVIFZQWCBTQkNcbiIpOworCisjaWZkZWYgQ09ORklHX1NNUAorCW1wYzg2eHhfc21wX2luaXQoKTsKKyNlbmRpZgorCisJLyogUmVtYXAgYmFzaWMgYm9hcmQgcmVnaXN0ZXJzICovCisJcmVncyA9IG9mX2ZpbmRfY29tcGF0aWJsZV9ub2RlKE5VTEwsIE5VTEwsICJnZWYsZnBnYS1yZWdzIik7CisJaWYgKHJlZ3MpIHsKKwkJc2JjNjEwX3JlZ3MgPSBvZl9pb21hcChyZWdzLCAwKTsKKwkJaWYgKHNiYzYxMF9yZWdzID09IE5VTEwpCisJCQlwcmludGsoS0VSTl9XQVJOSU5HICJVbmFibGUgdG8gbWFwIGJvYXJkIHJlZ2lzdGVyc1xuIik7CisJCW9mX25vZGVfcHV0KHJlZ3MpOworCX0KK30KKworLyogUmV0dXJuIHRoZSBQQ0IgcmV2aXNpb24gKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQgZ2VmX3NiYzYxMF9nZXRfcGNiX3Jldih2b2lkKQoreworCXVuc2lnbmVkIGludCByZWc7CisKKwlyZWcgPSBpb3JlYWQzMihzYmM2MTBfcmVncyk7CisJcmV0dXJuIChyZWcgPj4gOCkgJiAweGZmOworfQorCisvKiBSZXR1cm4gdGhlIGJvYXJkIChzb2Z0d2FyZSkgcmV2aXNpb24gKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQgZ2VmX3NiYzYxMF9nZXRfYm9hcmRfcmV2KHZvaWQpCit7CisJdW5zaWduZWQgaW50IHJlZzsKKworCXJlZyA9IGlvcmVhZDMyKHNiYzYxMF9yZWdzKTsKKwlyZXR1cm4gKHJlZyA+PiAxNikgJiAweGZmOworfQorCisvKiBSZXR1cm4gdGhlIEZQR0EgcmV2aXNpb24gKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQgZ2VmX3NiYzYxMF9nZXRfZnBnYV9yZXYodm9pZCkKK3sKKwl1bnNpZ25lZCBpbnQgcmVnOworCisJcmVnID0gaW9yZWFkMzIoc2JjNjEwX3JlZ3MpOworCXJldHVybiAocmVnID4+IDI0KSAmIDB4ZjsKK30KKworc3RhdGljIHZvaWQgZ2VmX3NiYzYxMF9zaG93X2NwdWluZm8oc3RydWN0IHNlcV9maWxlICptKQoreworCXVpbnQgbWVtc2l6ZSA9IHRvdGFsX21lbW9yeTsKKwl1aW50IHN2aWQgPSBtZnNwcihTUFJOX1NWUik7CisKKwlzZXFfcHJpbnRmKG0sICJWZW5kb3JcdFx0OiBHRSBGYW51YyBJbnRlbGxpZ2VudCBQbGF0Zm9ybXNcbiIpOworCisJc2VxX3ByaW50ZihtLCAiUmV2aXNpb25cdDogJXUlY1xuIiwgZ2VmX3NiYzYxMF9nZXRfcGNiX3JldigpLAorCQkoJ0EnICsgZ2VmX3NiYzYxMF9nZXRfYm9hcmRfcmV2KCkgLSAxKSk7CisJc2VxX3ByaW50ZihtLCAiRlBHQSBSZXZpc2lvblx0OiAldVxuIiwgZ2VmX3NiYzYxMF9nZXRfZnBnYV9yZXYoKSk7CisKKwlzZXFfcHJpbnRmKG0sICJTVlJcdFx0OiAweCV4XG4iLCBzdmlkKTsKKwlzZXFfcHJpbnRmKG0sICJNZW1vcnlcdFx0OiAlZCBNQlxuIiwgbWVtc2l6ZSAvICgxMDI0ICogMTAyNCkpOworfQorCitzdGF0aWMgdm9pZCBfX2luaXQgZ2VmX3NiYzYxMF9uZWNfZml4dXAoc3RydWN0IHBjaV9kZXYgKnBkZXYpCit7CisJdW5zaWduZWQgaW50IHZhbDsKKworCXByaW50ayhLRVJOX0lORk8gIlJ1bm5pbmcgTkVDIHVQRDcyMDEwMSBGaXh1cFxuIik7CisKKwkvKiBFbnN1cmUgcG9ydHMgMSwgMiwgMywgNCAmIDUgYXJlIGVuYWJsZWQgKi8KKwlwY2lfcmVhZF9jb25maWdfZHdvcmQocGRldiwgMHhlMCwgJnZhbCk7CisJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChwZGV2LCAweGUwLCAodmFsICYgfjcpIHwgMHg1KTsKKworCS8qIFN5c3RlbSBjbG9jayBpcyA0OC1NSHogT3NjaWxsYXRvciBhbmQgRUhDSSBFbmFibGVkLiAqLworCXBjaV93cml0ZV9jb25maWdfZHdvcmQocGRldiwgMHhlNCwgMSA8PCA1KTsKK30KK0RFQ0xBUkVfUENJX0ZJWFVQX0hFQURFUihQQ0lfVkVORE9SX0lEX05FQywgUENJX0RFVklDRV9JRF9ORUNfVVNCLAorCWdlZl9zYmM2MTBfbmVjX2ZpeHVwKTsKKworLyoKKyAqIENhbGxlZCB2ZXJ5IGVhcmx5LCBkZXZpY2UtdHJlZSBpc24ndCB1bmZsYXR0ZW5lZAorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHRvIGRldGVybWluZSB3aGV0aGVyIHRoZSBCU1AgaXMgY29tcGF0aWJsZSB3aXRoIHRoZQorICogc3VwcGxpZWQgZGV2aWNlLXRyZWUsIHdoaWNoIGlzIGFzc3VtZWQgdG8gYmUgdGhlIGNvcnJlY3Qgb25lIGZvciB0aGUgYWN0dWFsCisgKiBib2FyZC4gSXQgaXMgZXhwZWN0ZWQgdGhhdGksIGluIHRoZSBmdXR1cmUsIGEga2VybmVsIG1heSBzdXBwb3J0IG11bHRpcGxlCisgKiBib2FyZHMuCisgKi8KK3N0YXRpYyBpbnQgX19pbml0IGdlZl9zYmM2MTBfcHJvYmUodm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIHJvb3QgPSBvZl9nZXRfZmxhdF9kdF9yb290KCk7CisKKwlpZiAob2ZfZmxhdF9kdF9pc19jb21wYXRpYmxlKHJvb3QsICJnZWYsc2JjNjEwIikpCisJCXJldHVybiAxOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBsb25nIF9faW5pdCBtcGM4Nnh4X3RpbWVfaW5pdCh2b2lkKQoreworCXVuc2lnbmVkIGludCB0ZW1wOworCisJLyogU2V0IHRoZSB0aW1lIGJhc2UgdG8gemVybyAqLworCW10c3ByKFNQUk5fVEJXTCwgMCk7CisJbXRzcHIoU1BSTl9UQldVLCAwKTsKKworCXRlbXAgPSBtZnNwcihTUFJOX0hJRDApOworCXRlbXAgfD0gSElEMF9UQkVOOworCW10c3ByKFNQUk5fSElEMCwgdGVtcCk7CisJYXNtIHZvbGF0aWxlKCJpc3luYyIpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBfX2luaXRkYXRhIHN0cnVjdCBvZl9kZXZpY2VfaWQgb2ZfYnVzX2lkc1tdID0geworCXsgLmNvbXBhdGlibGUgPSAic2ltcGxlLWJ1cyIsIH0sCisJe30sCit9OworCitzdGF0aWMgaW50IF9faW5pdCBkZWNsYXJlX29mX3BsYXRmb3JtX2RldmljZXModm9pZCkKK3sKKwlwcmludGsoS0VSTl9ERUJVRyAiUHJvYmUgcGxhdGZvcm0gZGV2aWNlc1xuIik7CisJb2ZfcGxhdGZvcm1fYnVzX3Byb2JlKE5VTEwsIG9mX2J1c19pZHMsIE5VTEwpOworCisJcmV0dXJuIDA7Cit9CittYWNoaW5lX2RldmljZV9pbml0Y2FsbChnZWZfc2JjNjEwLCBkZWNsYXJlX29mX3BsYXRmb3JtX2RldmljZXMpOworCitkZWZpbmVfbWFjaGluZShnZWZfc2JjNjEwKSB7CisJLm5hbWUJCQk9ICJHRSBGYW51YyBTQkM2MTAiLAorCS5wcm9iZQkJCT0gZ2VmX3NiYzYxMF9wcm9iZSwKKwkuc2V0dXBfYXJjaAkJPSBnZWZfc2JjNjEwX3NldHVwX2FyY2gsCisJLmluaXRfSVJRCQk9IGdlZl9zYmM2MTBfaW5pdF9pcnEsCisJLnNob3dfY3B1aW5mbwkJPSBnZWZfc2JjNjEwX3Nob3dfY3B1aW5mbywKKwkuZ2V0X2lycQkJPSBtcGljX2dldF9pcnEsCisJLnJlc3RhcnQJCT0gZnNsX3JzdGNyX3Jlc3RhcnQsCisJLnRpbWVfaW5pdAkJPSBtcGM4Nnh4X3RpbWVfaW5pdCwKKwkuY2FsaWJyYXRlX2RlY3IJCT0gZ2VuZXJpY19jYWxpYnJhdGVfZGVjciwKKwkucHJvZ3Jlc3MJCT0gdWRiZ19wcm9ncmVzcywKKyNpZmRlZiBDT05GSUdfUENJCisJLnBjaWJpb3NfZml4dXBfYnVzCT0gZnNsX3BjaWJpb3NfZml4dXBfYnVzLAorI2VuZGlmCit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84Nnh4L21wYzg2MTBfaHBjZC5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84Nnh4L21wYzg2MTBfaHBjZC5jCmluZGV4IDVlZWRiNzEuLmU4ZDU0YWMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODZ4eC9tcGM4NjEwX2hwY2QuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg2eHgvbXBjODYxMF9ocGNkLmMKQEAgLTIzOCw3ICsyMzgsNiBAQAogICAgICAgICB9CiAjZW5kaWYKICNpZiBkZWZpbmVkKENPTkZJR19GQl9GU0xfRElVKSB8fCBkZWZpbmVkKENPTkZJR19GQl9GU0xfRElVX01PRFVMRSkKLQlwcmVhbGxvY2F0ZV9kaXVfdmlkZW9tZW1vcnkoKTsKIAlkaXVfb3BzLmdldF9waXhlbF9mb3JtYXQJPSBtcGM4NjEwaHBjZF9nZXRfcGl4ZWxfZm9ybWF0OwogCWRpdV9vcHMuc2V0X2dhbW1hX3RhYmxlCQk9IG1wYzg2MTBocGNkX3NldF9nYW1tYV90YWJsZTsKIAlkaXVfb3BzLnNldF9tb25pdG9yX3BvcnQJPSBtcGM4NjEwaHBjZF9zZXRfbW9uaXRvcl9wb3J0OwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84Nnh4L21wYzg2eHhfaHBjbi5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84Nnh4L21wYzg2eHhfaHBjbi5jCmluZGV4IGY3MTJkOWMuLjI2NzI4MjkgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODZ4eC9tcGM4Nnh4X2hwY24uYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg2eHgvbXBjODZ4eF9ocGNuLmMKQEAgLTEwMSwxOSArMTAxLDExIEBACiBzdGF0aWMgdm9pZAogbXBjODZ4eF9ocGNuX3Nob3dfY3B1aW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0pCiB7Ci0Jc3RydWN0IGRldmljZV9ub2RlICpyb290OwogCXVpbnQgbWVtc2l6ZSA9IHRvdGFsX21lbW9yeTsKLQljb25zdCBjaGFyICptb2RlbCA9ICIiOwogCXVpbnQgc3ZpZCA9IG1mc3ByKFNQUk5fU1ZSKTsKIAogCXNlcV9wcmludGYobSwgIlZlbmRvclx0XHQ6IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yXG4iKTsKIAotCXJvb3QgPSBvZl9maW5kX25vZGVfYnlfcGF0aCgiLyIpOwotCWlmIChyb290KQotCQltb2RlbCA9IG9mX2dldF9wcm9wZXJ0eShyb290LCAibW9kZWwiLCBOVUxMKTsKLQlzZXFfcHJpbnRmKG0sICJNYWNoaW5lXHRcdDogJXNcbiIsIG1vZGVsKTsKLQlvZl9ub2RlX3B1dChyb290KTsKLQogCXNlcV9wcmludGYobSwgIlNWUlx0XHQ6IDB4JXhcbiIsIHN2aWQpOwogCXNlcV9wcmludGYobSwgIk1lbW9yeVx0XHQ6ICVkIE1CXG4iLCBtZW1zaXplIC8gKDEwMjQgKiAxMDI0KSk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg2eHgvc2JjODY0MWQuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODZ4eC9zYmM4NjQxZC5jCmluZGV4IDAwZTZmYWQuLmRhNjc3YTcgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODZ4eC9zYmM4NjQxZC5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODZ4eC9zYmM4NjQxZC5jCkBAIC02MywxOSArNjMsMTEgQEAKIHN0YXRpYyB2b2lkCiBzYmM4NjQxX3Nob3dfY3B1aW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0pCiB7Ci0Jc3RydWN0IGRldmljZV9ub2RlICpyb290OwogCXVpbnQgbWVtc2l6ZSA9IHRvdGFsX21lbW9yeTsKLQljb25zdCBjaGFyICptb2RlbCA9ICIiOwogCXVpbnQgc3ZpZCA9IG1mc3ByKFNQUk5fU1ZSKTsKIAogCXNlcV9wcmludGYobSwgIlZlbmRvclx0XHQ6IFdpbmQgUml2ZXIgU3lzdGVtc1xuIik7CiAKLQlyb290ID0gb2ZfZmluZF9ub2RlX2J5X3BhdGgoIi8iKTsKLQlpZiAocm9vdCkKLQkJbW9kZWwgPSBvZl9nZXRfcHJvcGVydHkocm9vdCwgIm1vZGVsIiwgTlVMTCk7Ci0Jc2VxX3ByaW50ZihtLCAiTWFjaGluZVx0XHQ6ICVzXG4iLCBtb2RlbCk7Ci0Jb2Zfbm9kZV9wdXQocm9vdCk7Ci0KIAlzZXFfcHJpbnRmKG0sICJTVlJcdFx0OiAweCV4XG4iLCBzdmlkKTsKIAlzZXFfcHJpbnRmKG0sICJNZW1vcnlcdFx0OiAlZCBNQlxuIiwgbWVtc2l6ZSAvICgxMDI0ICogMTAyNCkpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84eHgvS2NvbmZpZyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvOHh4L0tjb25maWcKaW5kZXggNzFkNzU2Mi4uNDhhOTIwYSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84eHgvS2NvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzh4eC9LY29uZmlnCkBAIC00OSw2ICs0OSwxMiBAQAogCSAgVGhpcyBlbmFibGVzIHN1cHBvcnQgZm9yIHRoZSBBbmFsb2d1ZSAmIE1pY3JvIEFkZGVyIDg3NQogCSAgYm9hcmQuCiAKK2NvbmZpZyBQUENfTUdTVVZECisJYm9vbCAiTUdTVVZEIgorCXNlbGVjdCBDUE0xCisJaGVscAorCSAgVGhpcyBlbmFibGVzIHN1cHBvcnQgZm9yIHRoZSBLZXltaWxlIE1HU1VWRCBib2FyZC4KKwogZW5kY2hvaWNlCiAKIG1lbnUgIkZyZWVzY2FsZSBFdGhlcm5ldCBkcml2ZXIgcGxhdGZvcm0tc3BlY2lmaWMgb3B0aW9ucyIKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvOHh4L01ha2VmaWxlIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84eHgvTWFrZWZpbGUKaW5kZXggN2I3MWQ5Yy4uYmRiZmQ3NDkgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvOHh4L01ha2VmaWxlCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvOHh4L01ha2VmaWxlCkBAIC02LDMgKzYsNCBAQAogb2JqLSQoQ09ORklHX01QQzg2WEFEUykgICArPSBtcGM4NnhhZHNfc2V0dXAubwogb2JqLSQoQ09ORklHX1BQQ19FUDg4WEMpICArPSBlcDg4eGMubwogb2JqLSQoQ09ORklHX1BQQ19BRERFUjg3NSkgKz0gYWRkZXI4NzUubworb2JqLSQoQ09ORklHX1BQQ19NR1NVVkQpICs9IG1nc3V2ZC5vCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzh4eC9tZ3N1dmQuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvOHh4L21nc3V2ZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNhM2NiMDcKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzh4eC9tZ3N1dmQuYwpAQCAtMCwwICsxLDkyIEBACisvKgorICoKKyAqIFBsYXRmb3JtIHNldHVwIGZvciB0aGUgS2V5bWlsZSBtZ3N1dmQgYm9hcmQKKyAqCisgKiBIZWlrbyBTY2hvY2hlciA8aHNAZGVueC5kZT4KKyAqCisgKiBDb3B5cmlnaHQgMjAwOCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nIEdtYkgKKyAqCisgKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogdmVyc2lvbiAyLiBUaGlzIHByb2dyYW0gaXMgbGljZW5zZWQgImFzIGlzIiB3aXRob3V0IGFueSB3YXJyYW50eSBvZiBhbnkKKyAqIGtpbmQsIHdoZXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9wbGF0Zm9ybS5oPgorCisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL21hY2hkZXAuaD4KKyNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CisjaW5jbHVkZSA8YXNtL2NwbTEuaD4KKyNpbmNsdWRlIDxhc20vcHJvbS5oPgorI2luY2x1ZGUgPGFzbS9mc19wZC5oPgorCisjaW5jbHVkZSAibXBjOHh4LmgiCisKK3N0cnVjdCBjcG1fcGluIHsKKwlpbnQgcG9ydCwgcGluLCBmbGFnczsKK307CisKK3N0YXRpYyBfX2luaXRkYXRhIHN0cnVjdCBjcG1fcGluIG1nc3V2ZF9waW5zW10gPSB7CisJLyogU01DMSAqLworCXtDUE1fUE9SVEIsIDI0LCBDUE1fUElOX0lOUFVUfSwgLyogUlggKi8KKwl7Q1BNX1BPUlRCLCAyNSwgQ1BNX1BJTl9JTlBVVCB8IENQTV9QSU5fU0VDT05EQVJZfSwgLyogVFggKi8KKworCS8qIFNDQzMgKi8KKwl7Q1BNX1BPUlRBLCAxMCwgQ1BNX1BJTl9JTlBVVH0sCisJe0NQTV9QT1JUQSwgMTEsIENQTV9QSU5fSU5QVVR9LAorCXtDUE1fUE9SVEEsIDMsIENQTV9QSU5fSU5QVVR9LAorCXtDUE1fUE9SVEEsIDIsIENQTV9QSU5fSU5QVVR9LAorCXtDUE1fUE9SVEMsIDEzLCBDUE1fUElOX0lOUFVUfSwKK307CisKK3N0YXRpYyB2b2lkIF9faW5pdCBpbml0X2lvcG9ydHModm9pZCkKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKG1nc3V2ZF9waW5zKTsgaSsrKSB7CisJCXN0cnVjdCBjcG1fcGluICpwaW4gPSAmbWdzdXZkX3BpbnNbaV07CisJCWNwbTFfc2V0X3BpbihwaW4tPnBvcnQsIHBpbi0+cGluLCBwaW4tPmZsYWdzKTsKKwl9CisKKwlzZXRiaXRzMTYoJm1wYzh4eF9pbW1yLT5pbV9pb3BvcnQuaW9wX3Bjc28sIDB4MzAwKTsKKwljcG0xX2Nsa19zZXR1cChDUE1fQ0xLX1NDQzMsIENQTV9DTEs1LCBDUE1fQ0xLX1JYKTsKKwljcG0xX2Nsa19zZXR1cChDUE1fQ0xLX1NDQzMsIENQTV9DTEs2LCBDUE1fQ0xLX1RYKTsKKwljcG0xX2Nsa19zZXR1cChDUE1fQ0xLX1NNQzEsIENQTV9CUkcxLCBDUE1fQ0xLX1JUWCk7Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCBtZ3N1dmRfc2V0dXBfYXJjaCh2b2lkKQoreworCWNwbV9yZXNldCgpOworCWluaXRfaW9wb3J0cygpOworfQorCitzdGF0aWMgX19pbml0ZGF0YSBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIG9mX2J1c19pZHNbXSA9IHsKKwl7IC5jb21wYXRpYmxlID0gInNpbXBsZS1idXMiIH0sCisJe30sCit9OworCitzdGF0aWMgaW50IF9faW5pdCBkZWNsYXJlX29mX3BsYXRmb3JtX2RldmljZXModm9pZCkKK3sKKwlvZl9wbGF0Zm9ybV9idXNfcHJvYmUoTlVMTCwgb2ZfYnVzX2lkcywgTlVMTCk7CisJcmV0dXJuIDA7Cit9CittYWNoaW5lX2RldmljZV9pbml0Y2FsbChtZ3N1dmQsIGRlY2xhcmVfb2ZfcGxhdGZvcm1fZGV2aWNlcyk7CisKK3N0YXRpYyBpbnQgX19pbml0IG1nc3V2ZF9wcm9iZSh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgcm9vdCA9IG9mX2dldF9mbGF0X2R0X3Jvb3QoKTsKKwlyZXR1cm4gb2ZfZmxhdF9kdF9pc19jb21wYXRpYmxlKHJvb3QsICJrZXltaWxlLG1nc3V2ZCIpOworfQorCitkZWZpbmVfbWFjaGluZShtZ3N1dmQpIHsKKwkubmFtZSAgICAgICAgICAgPSAiTUdTVVZEIiwKKwkucHJvYmUgICAgICAgICAgPSBtZ3N1dmRfcHJvYmUsCisJLnNldHVwX2FyY2ggICAgID0gbWdzdXZkX3NldHVwX2FyY2gsCisJLmluaXRfSVJRICAgICAgID0gbXBjOHh4X3BpY3NfaW5pdCwKKwkuZ2V0X2lycSAgICAgICAgPSBtcGM4eHhfZ2V0X2lycSwKKwkucmVzdGFydCAgICAgICAgPSBtcGM4eHhfcmVzdGFydCwKKwkuY2FsaWJyYXRlX2RlY3IgPSBtcGM4eHhfY2FsaWJyYXRlX2RlY3IsCisJLnNldF9ydGNfdGltZSAgID0gbXBjOHh4X3NldF9ydGNfdGltZSwKKwkuZ2V0X3J0Y190aW1lICAgPSBtcGM4eHhfZ2V0X3J0Y190aW1lLAorfTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvS2NvbmZpZyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvS2NvbmZpZwppbmRleCA0YzkwMGVmLi40N2U5NTZjIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL0tjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9LY29uZmlnCkBAIC0yMzksNyArMjM5LDggQEAKIAkgIElmIGluIGRvdWJ0LCBzYXkgTiBoZXJlLgogCiBjb25maWcgUVVJQ0NfRU5HSU5FCi0JYm9vbAorCWJvb2wgIkZyZWVzY2FsZSBRVUlDQyBFbmdpbmUgKFFFKSBTdXBwb3J0IgorCWRlcGVuZHMgb24gRlNMX1NPQwogCXNlbGVjdCBQUENfTElCX1JIRUFQCiAJc2VsZWN0IENSQzMyCiAJaGVscApAQCAtMjQ4LDYgKzI0OSwxNSBAQAogCSAgU2VsZWN0aW5nIHRoaXMgb3B0aW9uIG1lYW5zIHRoYXQgeW91IHdpc2ggdG8gYnVpbGQgYSBrZXJuZWwKIAkgIGZvciBhIG1hY2hpbmUgd2l0aCBhIFFFIGNvcHJvY2Vzc29yLgogCitjb25maWcgUUVfR1BJTworCWJvb2wgIlFFIEdQSU8gc3VwcG9ydCIKKwlkZXBlbmRzIG9uIFFVSUNDX0VOR0lORQorCXNlbGVjdCBHRU5FUklDX0dQSU8KKwlzZWxlY3QgQVJDSF9SRVFVSVJFX0dQSU9MSUIKKwloZWxwCisJICBTYXkgWSBoZXJlIGlmIHlvdSdyZSBnb2luZyB0byB1c2UgaGFyZHdhcmUgdGhhdCBjb25uZWN0cyB0byB0aGUKKwkgIFFFIEdQSU9zLgorCiBjb25maWcgQ1BNMgogCWJvb2wgIkVuYWJsZSBzdXBwb3J0IGZvciB0aGUgQ1BNMiAoQ29tbXVuaWNhdGlvbnMgUHJvY2Vzc29yIE1vZHVsZSkiCiAJZGVwZW5kcyBvbiBNUEM4NXh4IHx8IDgyNjAKQEAgLTI5Myw0ICszMDMsMTMgQEAKIAogc291cmNlICJhcmNoL3Bvd2VycGMvc3lzZGV2L2Jlc3Rjb21tL0tjb25maWciCiAKK2NvbmZpZyBNUEM4eHh4X0dQSU8KKwlib29sICJNUEM4eHh4IEdQSU8gc3VwcG9ydCIKKwlkZXBlbmRzIG9uIFBQQ19NUEM4MzF4IHx8IFBQQ19NUEM4MzR4IHx8IFBQQ19NUEM4Mzd4IHx8IFBQQ184NXh4IHx8IFBQQ184Nnh4CisJc2VsZWN0IEdFTkVSSUNfR1BJTworCXNlbGVjdCBBUkNIX1JFUVVJUkVfR1BJT0xJQgorCWhlbHAKKwkgIFNheSBZIGhlcmUgaWYgeW91J3JlIGdvaW5nIHRvIHVzZSBoYXJkd2FyZSB0aGF0IGNvbm5lY3RzIHRvIHRoZQorCSAgTVBDODMxeC84MzR4LzgzN3gvODU3Mi84NjEwIEdQSU9zLgorCiBlbmRtZW51CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL0tjb25maWcuY3B1dHlwZSBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvS2NvbmZpZy5jcHV0eXBlCmluZGV4IDdmNjUxMjcuLjU0OGVmYTUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvS2NvbmZpZy5jcHV0eXBlCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvS2NvbmZpZy5jcHV0eXBlCkBAIC01MCw2ICs1MCw3IEBACiAJc2VsZWN0IFBQQ19VREJHXzE2NTUwCiAJc2VsZWN0IDR4eF9TT0MKIAlzZWxlY3QgUFBDX1BDSV9DSE9JQ0UKKwlzZWxlY3QgUEhZU182NEJJVAogCiBjb25maWcgRTIwMAogCWJvb2wgIkZyZWVzY2FsZSBlMjAwIgpAQCAtMTI4LDE4ICsxMjksMTkgQEAKIAogY29uZmlnIFBURV82NEJJVAogCWJvb2wKLQlkZXBlbmRzIG9uIDQ0eCB8fCBFNTAwCi0JZGVmYXVsdCB5IGlmIDQ0eAotCWRlZmF1bHQgeSBpZiBFNTAwICYmIFBIWVNfNjRCSVQKKwlkZXBlbmRzIG9uIDQ0eCB8fCBFNTAwIHx8IFBQQ184Nnh4CisJZGVmYXVsdCB5IGlmIFBIWVNfNjRCSVQKIAogY29uZmlnIFBIWVNfNjRCSVQKLQlib29sICdMYXJnZSBwaHlzaWNhbCBhZGRyZXNzIHN1cHBvcnQnIGlmIEU1MDAKLQlkZXBlbmRzIG9uIDQ0eCB8fCBFNTAwCi0Jc2VsZWN0IFJFU09VUkNFU182NEJJVAotCWRlZmF1bHQgeSBpZiA0NHgKKwlib29sICdMYXJnZSBwaHlzaWNhbCBhZGRyZXNzIHN1cHBvcnQnIGlmIEU1MDAgfHwgUFBDXzg2eHgKKwlkZXBlbmRzIG9uICg0NHggfHwgRTUwMCB8fCBQUENfODZ4eCkgJiYgIVBQQ184M3h4ICYmICFQUENfODJ4eAogCS0tLWhlbHAtLS0KIAkgIFRoaXMgb3B0aW9uIGVuYWJsZXMga2VybmVsIHN1cHBvcnQgZm9yIGxhcmdlciB0aGFuIDMyLWJpdCBwaHlzaWNhbAotCSAgYWRkcmVzc2VzLiAgVGhpcyBmZWF0dXJlcyBpcyBub3QgYmUgYXZhaWxhYmxlIG9uIGFsbCBlNTAwIGNvcmVzLgorCSAgYWRkcmVzc2VzLiAgVGhpcyBmZWF0dXJlIG1heSBub3QgYmUgYXZhaWxhYmxlIG9uIGFsbCBjb3Jlcy4KKworCSAgSWYgeW91IGhhdmUgbW9yZSB0aGFuIDMuNUdCIG9mIFJBTSBvciBzbywgeW91IGFsc28gbmVlZCB0byBlbmFibGUKKwkgIFNXSU9UTEIgdW5kZXIgS2VybmVsIE9wdGlvbnMgZm9yIHRoaXMgdG8gd29yay4gIFRoZSBhY3R1YWwgbnVtYmVyCisJICBpcyBwbGF0Zm9ybS1kZXBlbmRlbnQuCiAKIAkgIElmIGluIGRvdWJ0LCBzYXkgTiBoZXJlLgogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvaW9tbXUuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9pb21tdS5jCmluZGV4IGUwNjQyMGEuLmVmOTJlNzEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9pb21tdS5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9pb21tdS5jCkBAIC01NTYsMTEgKzU1NiwxMSBAQAogCSAqIG5vZGUncyBpb21tdS4gV2UgLW1pZ2h0LSBkbyBzb21ldGhpbmcgc21hcnRlciBsYXRlciB0aG91Z2ggaXQgbWF5CiAJICogbmV2ZXIgYmUgbmVjZXNzYXJ5CiAJICovCi0JaW9tbXUgPSBjZWxsX2lvbW11X2Zvcl9ub2RlKGFyY2hkYXRhLT5udW1hX25vZGUpOworCWlvbW11ID0gY2VsbF9pb21tdV9mb3Jfbm9kZShkZXZfdG9fbm9kZShkZXYpKTsKIAlpZiAoaW9tbXUgPT0gTlVMTCB8fCBsaXN0X2VtcHR5KCZpb21tdS0+d2luZG93cykpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJpb21tdTogbWlzc2luZyBpb21tdSBmb3IgJXMgKG5vZGUgJWQpXG4iLAogCQkgICAgICAgYXJjaGRhdGEtPm9mX25vZGUgPyBhcmNoZGF0YS0+b2Zfbm9kZS0+ZnVsbF9uYW1lIDogIj8iLAotCQkgICAgICAgYXJjaGRhdGEtPm51bWFfbm9kZSk7CisJCSAgICAgICBkZXZfdG9fbm9kZShkZXYpKTsKIAkJcmV0dXJuIE5VTEw7CiAJfQogCXdpbmRvdyA9IGxpc3RfZW50cnkoaW9tbXUtPndpbmRvd3MubmV4dCwgc3RydWN0IGlvbW11X3dpbmRvdywgbGlzdCk7CkBAIC01NzcsNyArNTc3LDcgQEAKIAkJcmV0dXJuIGlvbW11X2FsbG9jX2NvaGVyZW50KGRldiwgY2VsbF9nZXRfaW9tbXVfdGFibGUoZGV2KSwKIAkJCQkJICAgIHNpemUsIGRtYV9oYW5kbGUsCiAJCQkJCSAgICBkZXZpY2VfdG9fbWFzayhkZXYpLCBmbGFnLAotCQkJCQkgICAgZGV2LT5hcmNoZGF0YS5udW1hX25vZGUpOworCQkJCQkgICAgZGV2X3RvX25vZGUoZGV2KSk7CiAJZWxzZQogCQlyZXR1cm4gZG1hX2RpcmVjdF9vcHMuYWxsb2NfY29oZXJlbnQoZGV2LCBzaXplLCBkbWFfaGFuZGxlLAogCQkJCQkJICAgICBmbGFnKTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9pbm9kZS5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL2lub2RlLmMKaW5kZXggNjkwY2E3Yi4uY2I4NWQyMyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL2lub2RlLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL2lub2RlLmMKQEAgLTI5OCw4ICsyOTgsOCBAQAogCiAJZF9pbnN0YW50aWF0ZShkZW50cnksIGlub2RlKTsKIAlkZ2V0KGRlbnRyeSk7Ci0JZGlyLT5pX25saW5rKys7Ci0JZGVudHJ5LT5kX2lub2RlLT5pX25saW5rKys7CisJaW5jX25saW5rKGRpcik7CisJaW5jX25saW5rKGRlbnRyeS0+ZF9pbm9kZSk7CiAJZ290byBvdXQ7CiAKIG91dF9mcmVlX2N0eDoKQEAgLTQ5Niw2ICs0OTYsOCBAQAogCXJldCA9IHNwdWZzX2NvbnRleHRfb3BlbihkZ2V0KGRlbnRyeSksIG1udGdldChtbnQpKTsKIAlpZiAocmV0IDwgMCkgewogCQlXQVJOX09OKHNwdWZzX3JtZGlyKGlub2RlLCBkZW50cnkpKTsKKwkJaWYgKGFmZmluaXR5KQorCQkJbXV0ZXhfdW5sb2NrKCZnYW5nLT5hZmZfbXV0ZXgpOwogCQltdXRleF91bmxvY2soJmlub2RlLT5pX211dGV4KTsKIAkJc3B1X2ZvcmdldChTUFVGU19JKGRlbnRyeS0+ZF9pbm9kZSktPmlfY3R4KTsKIAkJZ290byBvdXQ7CkBAIC01MzgsOCArNTQwLDggQEAKIAlpbm9kZS0+aV9mb3AgPSAmc2ltcGxlX2Rpcl9vcGVyYXRpb25zOwogCiAJZF9pbnN0YW50aWF0ZShkZW50cnksIGlub2RlKTsKLQlkaXItPmlfbmxpbmsrKzsKLQlkZW50cnktPmRfaW5vZGUtPmlfbmxpbmsrKzsKKwlpbmNfbmxpbmsoZGlyKTsKKwlpbmNfbmxpbmsoZGVudHJ5LT5kX2lub2RlKTsKIAlyZXR1cm4gcmV0OwogCiBvdXRfaXB1dDoKQEAgLTY1OSw3ICs2NjEsNyBAQAogCU9wdF91aWQsIE9wdF9naWQsIE9wdF9tb2RlLCBPcHRfZGVidWcsIE9wdF9lcnIsCiB9OwogCi1zdGF0aWMgbWF0Y2hfdGFibGVfdCBzcHVmc190b2tlbnMgPSB7CitzdGF0aWMgY29uc3QgbWF0Y2hfdGFibGVfdCBzcHVmc190b2tlbnMgPSB7CiAJeyBPcHRfdWlkLCAgICJ1aWQ9JWQiIH0sCiAJeyBPcHRfZ2lkLCAgICJnaWQ9JWQiIH0sCiAJeyBPcHRfbW9kZSwgICJtb2RlPSVvIiB9LApAQCAtNzU1LDYgKzc1Nyw3IEBACiAJaW5vZGUtPmlfb3AgPSAmc2ltcGxlX2Rpcl9pbm9kZV9vcGVyYXRpb25zOwogCWlub2RlLT5pX2ZvcCA9ICZzaW1wbGVfZGlyX29wZXJhdGlvbnM7CiAJU1BVRlNfSShpbm9kZSktPmlfY3R4ID0gTlVMTDsKKwlpbmNfbmxpbmsoaW5vZGUpOwogCiAJcmV0ID0gLUVJTlZBTDsKIAlpZiAoIXNwdWZzX3BhcnNlX29wdGlvbnMoc2IsIGRhdGEsIGlub2RlKSkKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2hycC9wY2kuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2hycC9wY2kuYwppbmRleCA3NjhjMjYyLi5kM2NkZTZiIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NocnAvcGNpLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jaHJwL3BjaS5jCkBAIC0yNjAsMTMgKzI2MCwxMyBAQAogCQkJCWRldi0+ZnVsbF9uYW1lKTsKIAkJCWNvbnRpbnVlOwogCQl9Ci0JCWhvc2UtPmZpcnN0X2J1c25vID0gYnVzX3JhbmdlWzBdOworCQlob3NlLT5maXJzdF9idXNubyA9IGhvc2UtPnNlbGZfYnVzbm8gPSBidXNfcmFuZ2VbMF07CiAJCWhvc2UtPmxhc3RfYnVzbm8gPSBidXNfcmFuZ2VbMV07CiAKIAkJbW9kZWwgPSBvZl9nZXRfcHJvcGVydHkoZGV2LCAibW9kZWwiLCBOVUxMKTsKIAkJaWYgKG1vZGVsID09IE5VTEwpCiAJCQltb2RlbCA9ICI8bm9uZT4iOwotCQlpZiAob2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUoZGV2LCAiSUJNLHB5dGhvbiIpKSB7CisJCWlmIChzdHJuY21wKG1vZGVsLCAiSUJNLCBQeXRob24iLCAxMSkgPT0gMCkgewogCQkJc2V0dXBfcHl0aG9uKGhvc2UsIGRldik7CiAJCX0gZWxzZSBpZiAoaXNfbW90CiAJCQkgICB8fCBzdHJuY21wKG1vZGVsLCAiTW90b3JvbGEsIEdyYWNrbGUiLCAxNykgPT0gMCkgewpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jaHJwL3NldHVwLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NocnAvc2V0dXAuYwppbmRleCAxYmE3Y2U1Li4yNzJkNzlhIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NocnAvc2V0dXAuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NocnAvc2V0dXAuYwpAQCAtMTcsNyArMTcsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3B0cmFjZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC91c2VyLmg+Ci0jaW5jbHVkZSA8bGludXgvYS5vdXQuaD4KICNpbmNsdWRlIDxsaW51eC90dHkuaD4KICNpbmNsdWRlIDxsaW51eC9tYWpvci5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jaHJwL3RpbWUuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2hycC90aW1lLmMKaW5kZXggOTZkMWU0Yi4uMDU0ZGZlNSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jaHJwL3RpbWUuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NocnAvdGltZS5jCkBAIC05NCwxMiArOTQsMTIgQEAKIAljaHJwX2Ntb3NfY2xvY2tfd3JpdGUoKHNhdmVfZnJlcV9zZWxlY3R8UlRDX0RJVl9SRVNFVDIpLCBSVENfRlJFUV9TRUxFQ1QpOwogCiAJaWYgKCEoc2F2ZV9jb250cm9sICYgUlRDX0RNX0JJTkFSWSkgfHwgUlRDX0FMV0FZU19CQ0QpIHsKLQkJQklOX1RPX0JDRCh0bS50bV9zZWMpOwotCQlCSU5fVE9fQkNEKHRtLnRtX21pbik7Ci0JCUJJTl9UT19CQ0QodG0udG1faG91cik7Ci0JCUJJTl9UT19CQ0QodG0udG1fbW9uKTsKLQkJQklOX1RPX0JDRCh0bS50bV9tZGF5KTsKLQkJQklOX1RPX0JDRCh0bS50bV95ZWFyKTsKKwkJdG0udG1fc2VjID0gYmluMmJjZCh0bS50bV9zZWMpOworCQl0bS50bV9taW4gPSBiaW4yYmNkKHRtLnRtX21pbik7CisJCXRtLnRtX2hvdXIgPSBiaW4yYmNkKHRtLnRtX2hvdXIpOworCQl0bS50bV9tb24gPSBiaW4yYmNkKHRtLnRtX21vbik7CisJCXRtLnRtX21kYXkgPSBiaW4yYmNkKHRtLnRtX21kYXkpOworCQl0bS50bV95ZWFyID0gYmluMmJjZCh0bS50bV95ZWFyKTsKIAl9CiAJY2hycF9jbW9zX2Nsb2NrX3dyaXRlKHRtLnRtX3NlYyxSVENfU0VDT05EUyk7CiAJY2hycF9jbW9zX2Nsb2NrX3dyaXRlKHRtLnRtX21pbixSVENfTUlOVVRFUyk7CkBAIC0xMzYsMTIgKzEzNiwxMiBAQAogCX0gd2hpbGUgKHNlYyAhPSBjaHJwX2Ntb3NfY2xvY2tfcmVhZChSVENfU0VDT05EUykpOwogCiAJaWYgKCEoY2hycF9jbW9zX2Nsb2NrX3JlYWQoUlRDX0NPTlRST0wpICYgUlRDX0RNX0JJTkFSWSkgfHwgUlRDX0FMV0FZU19CQ0QpIHsKLQkJQkNEX1RPX0JJTihzZWMpOwotCQlCQ0RfVE9fQklOKG1pbik7Ci0JCUJDRF9UT19CSU4oaG91cik7Ci0JCUJDRF9UT19CSU4oZGF5KTsKLQkJQkNEX1RPX0JJTihtb24pOwotCQlCQ0RfVE9fQklOKHllYXIpOworCQlzZWMgPSBiY2QyYmluKHNlYyk7CisJCW1pbiA9IGJjZDJiaW4obWluKTsKKwkJaG91ciA9IGJjZDJiaW4oaG91cik7CisJCWRheSA9IGJjZDJiaW4oZGF5KTsKKwkJbW9uID0gYmNkMmJpbihtb24pOworCQl5ZWFyID0gYmNkMmJpbih5ZWFyKTsKIAl9CiAJaWYgKHllYXIgPCA3MCkKIAkJeWVhciArPSAxMDA7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2VtYmVkZGVkNnh4L21wYzc0NDhfaHBjMi5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9lbWJlZGRlZDZ4eC9tcGM3NDQ4X2hwYzIuYwppbmRleCA4NGUyZDc4Li43YTJiYTM5IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2VtYmVkZGVkNnh4L21wYzc0NDhfaHBjMi5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvZW1iZWRkZWQ2eHgvbXBjNzQ0OF9ocGMyLmMKQEAgLTE2NCw3ICsxNjQsNiBAQAogdm9pZCBtcGM3NDQ4X2hwYzJfc2hvd19jcHVpbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSkKIHsKIAlzZXFfcHJpbnRmKG0sICJ2ZW5kb3JcdFx0OiBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvclxuIik7Ci0Jc2VxX3ByaW50ZihtLCAibWFjaGluZVx0XHQ6IE1QQzc0NDhocGMyXG4iKTsKIH0KIAogdm9pZCBtcGM3NDQ4X2hwYzJfcmVzdGFydChjaGFyICpjbWQpCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2lzZXJpZXMvZXhjZXB0aW9uLlMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2lzZXJpZXMvZXhjZXB0aW9uLlMKaW5kZXggOGZmMzMwZC4uMmY1ODE1MiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9pc2VyaWVzL2V4Y2VwdGlvbi5TCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvaXNlcmllcy9leGNlcHRpb24uUwpAQCAtMzgsMTIgKzM4LDEzIEBACiAKIAkuZ2xvYmwgc3lzdGVtX3Jlc2V0X2lTZXJpZXMKIHN5c3RlbV9yZXNldF9pU2VyaWVzOgorCWJsCS5yZWxhdGl2ZV90b2MKIAltZnNwcglyMTMsU1BSTl9TUFJHMwkJLyogR2V0IGFscGFjYSBhZGRyZXNzICovCi0JTE9BRF9SRUdfSU1NRURJQVRFKHIyMywgYWxwYWNhKQorCUxPQURfUkVHX0FERFIocjIzLCBhbHBhY2EpCiAJbGkJcjAsQUxQQUNBX1NJWkUKIAlzdWIJcjIzLHIxMyxyMjMKIAlkaXZkdQlyMjMscjIzLHIwCQkvKiByMjMgaGFzIGNwdSBudW1iZXIgKi8KLQlMT0FEX1JFR19JTU1FRElBVEUocjEzLCBwYWNhKQorCUxPQURfUkVHX0FERFIocjEzLCBwYWNhKQogCW11bGxpCXIwLHIyMyxQQUNBX1NJWkUKIAlhZGQJcjEzLHIxMyxyMAogCW10c3ByCVNQUk5fU1BSRzMscjEzCQkvKiBTYXZlIGl0IGF3YXkgZm9yIHRoZSBmdXR1cmUgKi8KQEAgLTYwLDE0ICs2MSwxNCBAQAogCW10c3ByCVNQUk5fQ1RSTFQscjQKIAogLyogU3BpbiBvbiBfX3NlY29uZGFyeV9ob2xkX3NwaW5sb29wIHVudGlsIGl0IGlzIHVwZGF0ZWQgYnkgdGhlIGJvb3QgY3B1LiAqLwotLyogSW4gdGhlIFVQIGNhc2Ugd2UnbGwgeWVpbGQoKSBsYXRlciwgYW5kIHdlIHdpbGwgbm90IGFjY2VzcyB0aGUgcGFjYSBhbnl3YXkgKi8KKy8qIEluIHRoZSBVUCBjYXNlIHdlJ2xsIHlpZWxkKCkgbGF0ZXIsIGFuZCB3ZSB3aWxsIG5vdCBhY2Nlc3MgdGhlIHBhY2EgYW55d2F5ICovCiAjaWZkZWYgQ09ORklHX1NNUAogMToKIAlITVRfTE9XCi0JTE9BRF9SRUdfSU1NRURJQVRFKHIyMywgX19zZWNvbmRhcnlfaG9sZF9zcGlubG9vcCkKKwlMT0FEX1JFR19BRERSKHIyMywgX19zZWNvbmRhcnlfaG9sZF9zcGlubG9vcCkKIAlsZAlyMjMsMChyMjMpCiAJc3luYwotCUxPQURfUkVHX0lNTUVESUFURShyMyxjdXJyZW50X3NldCkKKwlMT0FEX1JFR19BRERSKHIzLGN1cnJlbnRfc2V0KQogCXNsZGkJcjI4LHIyNCwzCQkvKiBnZXQgY3VycmVudF9zZXRbY3B1I10gKi8KIAlsZHgJcjMscjMscjI4CiAJYWRkaQlyMSxyMyxUSFJFQURfU0laRQpAQCAtOTAsNyArOTEsNyBAQAogCWxieglyMjMsUEFDQVBST0NTVEFSVChyMTMpCS8qIFRlc3QgaWYgdGhpcyBwcm9jZXNzb3IKIAkJCQkJICogc2hvdWxkIHN0YXJ0ICovCiAJc3luYwotCUxPQURfUkVHX0lNTUVESUFURShyMyxjdXJyZW50X3NldCkKKwlMT0FEX1JFR19BRERSKHIzLGN1cnJlbnRfc2V0KQogCXNsZGkJcjI4LHIyNCwzCQkvKiBnZXQgY3VycmVudF9zZXRbY3B1I10gKi8KIAlsZHgJcjMscjMscjI4CiAJYWRkaQlyMSxyMyxUSFJFQURfU0laRQpAQCAtMjU1LDggKzI1Niw4IEBACiAKIF9JTklUX1NUQVRJQyhfX3N0YXJ0X2luaXRpYWxpemF0aW9uX2lTZXJpZXMpCiAJLyogQ2xlYXIgb3V0IHRoZSBCU1MgKi8KLQlMT0FEX1JFR19JTU1FRElBVEUocjExLF9fYnNzX3N0b3ApCi0JTE9BRF9SRUdfSU1NRURJQVRFKHI4LF9fYnNzX3N0YXJ0KQorCUxPQURfUkVHX0FERFIocjExLF9fYnNzX3N0b3ApCisJTE9BRF9SRUdfQUREUihyOCxfX2Jzc19zdGFydCkKIAlzdWIJcjExLHIxMSxyOAkJLyogYnNzIHNpemUJCQkqLwogCWFkZGkJcjExLHIxMSw3CQkvKiByb3VuZCB1cCB0byBhbiBldmVuIGRvdWJsZSB3b3JkICovCiAJcmxkaWNsLiByMTEscjExLDYxLDMJCS8qIHNoaWZ0IHJpZ2h0IGJ5IDMJCSovCkBAIC0yNjcsMTUgKzI2OCwxMSBAQAogMzoJc3RkdQlyMCw4KHI4KQogCWJkbnoJM2IKIDQ6Ci0JTE9BRF9SRUdfSU1NRURJQVRFKHIxLGluaXRfdGhyZWFkX3VuaW9uKQorCUxPQURfUkVHX0FERFIocjEsaW5pdF90aHJlYWRfdW5pb24pCiAJYWRkaQlyMSxyMSxUSFJFQURfU0laRQogCWxpCXIwLDAKIAlzdGR1CXIwLC1TVEFDS19GUkFNRV9PVkVSSEVBRChyMSkKIAotCUxPQURfUkVHX0lNTUVESUFURShyMixfX3RvY19zdGFydCkKLQlhZGRpCXIyLHIyLDB4NDAwMAotCWFkZGkJcjIscjIsMHg0MDAwCi0KIAlibAkuaVNlcmllc19lYXJseV9zZXR1cAogCWJsCS5lYXJseV9zZXR1cAogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2lzZXJpZXMvbWYuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvaXNlcmllcy9tZi5jCmluZGV4IDczMWQ3YjEuLjM2ODljMjQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvaXNlcmllcy9tZi5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvaXNlcmllcy9tZi5jCkBAIC03MjIsMTMgKzcyMiwxMyBAQAogCWRheSA9IHRtLT50bV9tZGF5OwogCW1vbiA9IHRtLT50bV9tb24gKyAxOwogCi0JQklOX1RPX0JDRChzZWMpOwotCUJJTl9UT19CQ0QobWluKTsKLQlCSU5fVE9fQkNEKGhvdXIpOwotCUJJTl9UT19CQ0QobW9uKTsKLQlCSU5fVE9fQkNEKGRheSk7Ci0JQklOX1RPX0JDRCh5MSk7Ci0JQklOX1RPX0JDRCh5Mik7CisJc2VjID0gYmluMmJjZChzZWMpOworCW1pbiA9IGJpbjJiY2QobWluKTsKKwlob3VyID0gYmluMmJjZChob3VyKTsKKwltb24gPSBiaW4yYmNkKG1vbik7CisJZGF5ID0gYmluMmJjZChkYXkpOworCXkxID0gYmluMmJjZCh5MSk7CisJeTIgPSBiaW4yYmNkKHkyKTsKIAogCW1lbXNldChjZV90aW1lLCAwLCBzaXplb2YoY2VfdGltZSkpOwogCWNlX3RpbWVbM10gPSAweDQxOwpAQCAtNzc3LDEyICs3NzcsMTIgQEAKIAkJdTggZGF5ID0gY2VfbXNnWzEwXTsKIAkJdTggbW9uID0gY2VfbXNnWzExXTsKIAotCQlCQ0RfVE9fQklOKHNlYyk7Ci0JCUJDRF9UT19CSU4obWluKTsKLQkJQkNEX1RPX0JJTihob3VyKTsKLQkJQkNEX1RPX0JJTihkYXkpOwotCQlCQ0RfVE9fQklOKG1vbik7Ci0JCUJDRF9UT19CSU4oeWVhcik7CisJCXNlYyA9IGJjZDJiaW4oc2VjKTsKKwkJbWluID0gYmNkMmJpbihtaW4pOworCQlob3VyID0gYmNkMmJpbihob3VyKTsKKwkJZGF5ID0gYmNkMmJpbihkYXkpOworCQltb24gPSBiY2QyYmluKG1vbik7CisJCXllYXIgPSBiY2QyYmluKHllYXIpOwogCiAJCWlmICh5ZWFyIDw9IDY5KQogCQkJeWVhciArPSAxMDA7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL21hcGxlL3NldHVwLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL21hcGxlL3NldHVwLmMKaW5kZXggMzY0NzE0Ny4uZDRjNjFjMyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9tYXBsZS9zZXR1cC5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvbWFwbGUvc2V0dXAuYwpAQCAtMjMsNyArMjMsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3B0cmFjZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC91c2VyLmg+Ci0jaW5jbHVkZSA8bGludXgvYS5vdXQuaD4KICNpbmNsdWRlIDxsaW51eC90dHkuaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9tYXBsZS90aW1lLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL21hcGxlL3RpbWUuYwppbmRleCA1M2JjYTEzLi5lYWM1NjlkIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL21hcGxlL3RpbWUuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL21hcGxlL3RpbWUuYwpAQCAtNjgsMTIgKzY4LDEyIEBACiAKIAlpZiAoIShtYXBsZV9jbG9ja19yZWFkKFJUQ19DT05UUk9MKSAmIFJUQ19ETV9CSU5BUlkpCiAJICAgIHx8IFJUQ19BTFdBWVNfQkNEKSB7Ci0JCUJDRF9UT19CSU4odG0tPnRtX3NlYyk7Ci0JCUJDRF9UT19CSU4odG0tPnRtX21pbik7Ci0JCUJDRF9UT19CSU4odG0tPnRtX2hvdXIpOwotCQlCQ0RfVE9fQklOKHRtLT50bV9tZGF5KTsKLQkJQkNEX1RPX0JJTih0bS0+dG1fbW9uKTsKLQkJQkNEX1RPX0JJTih0bS0+dG1feWVhcik7CisJCXRtLT50bV9zZWMgPSBiY2QyYmluKHRtLT50bV9zZWMpOworCQl0bS0+dG1fbWluID0gYmNkMmJpbih0bS0+dG1fbWluKTsKKwkJdG0tPnRtX2hvdXIgPSBiY2QyYmluKHRtLT50bV9ob3VyKTsKKwkJdG0tPnRtX21kYXkgPSBiY2QyYmluKHRtLT50bV9tZGF5KTsKKwkJdG0tPnRtX21vbiA9IGJjZDJiaW4odG0tPnRtX21vbik7CisJCXRtLT50bV95ZWFyID0gYmNkMmJpbih0bS0+dG1feWVhcik7CiAJICB9CiAJaWYgKCh0bS0+dG1feWVhciArIDE5MDApIDwgMTk3MCkKIAkJdG0tPnRtX3llYXIgKz0gMTAwOwpAQCAtMTA0LDEyICsxMDQsMTIgQEAKIAl5ZWFyID0gdG0tPnRtX3llYXI7CiAKIAlpZiAoIShzYXZlX2NvbnRyb2wgJiBSVENfRE1fQklOQVJZKSB8fCBSVENfQUxXQVlTX0JDRCkgewotCQlCSU5fVE9fQkNEKHNlYyk7Ci0JCUJJTl9UT19CQ0QobWluKTsKLQkJQklOX1RPX0JDRChob3VyKTsKLQkJQklOX1RPX0JDRChtb24pOwotCQlCSU5fVE9fQkNEKG1kYXkpOwotCQlCSU5fVE9fQkNEKHllYXIpOworCQlzZWMgPSBiaW4yYmNkKHNlYyk7CisJCW1pbiA9IGJpbjJiY2QobWluKTsKKwkJaG91ciA9IGJpbjJiY2QoaG91cik7CisJCW1vbiA9IGJpbjJiY2QobW9uKTsKKwkJbWRheSA9IGJpbjJiY2QobWRheSk7CisJCXllYXIgPSBiaW4yYmNkKHllYXIpOwogCX0KIAltYXBsZV9jbG9ja193cml0ZShzZWMsIFJUQ19TRUNPTkRTKTsKIAltYXBsZV9jbG9ja193cml0ZShtaW4sIFJUQ19NSU5VVEVTKTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvZmVhdHVyZS5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9mZWF0dXJlLmMKaW5kZXggNTE2OWVjYy4uZTZjMDA0MCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9mZWF0dXJlLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9mZWF0dXJlLmMKQEAgLTI2NzcsNyArMjY3Nyw3IEBACiAJbWFjaW9fY2hpcHNbaV0ub2Zfbm9kZQk9IG5vZGU7CiAJbWFjaW9fY2hpcHNbaV0udHlwZQk9IHR5cGU7CiAJbWFjaW9fY2hpcHNbaV0uYmFzZQk9IGJhc2U7Ci0JbWFjaW9fY2hpcHNbaV0uZmxhZ3MJPSBNQUNJT19GTEFHX1NDQ0JfT04gfCBNQUNJT19GTEFHX1NDQ0JfT047CisJbWFjaW9fY2hpcHNbaV0uZmxhZ3MJPSBNQUNJT19GTEFHX1NDQ0FfT04gfCBNQUNJT19GTEFHX1NDQ0JfT047CiAJbWFjaW9fY2hpcHNbaV0ubmFtZQk9IG1hY2lvX25hbWVzW3R5cGVdOwogCXJldnAgPSBvZl9nZXRfcHJvcGVydHkobm9kZSwgInJldmlzaW9uLWlkIiwgTlVMTCk7CiAJaWYgKHJldnApCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL3NldHVwLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL3NldHVwLmMKaW5kZXggODhjY2YzYS4uODJjMTRkMiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9zZXR1cC5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvc2V0dXAuYwpAQCAtMzMsNyArMzMsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3B0cmFjZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC91c2VyLmg+Ci0jaW5jbHVkZSA8bGludXgvYS5vdXQuaD4KICNpbmNsdWRlIDxsaW51eC90dHkuaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9zbXAuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvc21wLmMKaW5kZXggNGFlM2QwMC4uNDBmNzJjMiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9zbXAuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL3NtcC5jCkBAIC03ODcsNyArNzg3LDcgQEAKIHsKIAl1bnNpZ25lZCBpbnQgc2F2ZV92ZWN0b3I7CiAJdW5zaWduZWQgbG9uZyB0YXJnZXQsIGZsYWdzOwotCXVuc2lnbmVkIGludCAqdmVjdG9yID0gKHVuc2lnbmVkIGludCAqKShLRVJORUxCQVNFKzB4MTAwKTsKKwl1bnNpZ25lZCBpbnQgKnZlY3RvciA9ICh1bnNpZ25lZCBpbnQgKikoUEFHRV9PRkZTRVQrMHgxMDApOwogCiAJaWYgKG5yIDwgMCB8fCBuciA+IDMpCiAJCXJldHVybjsKQEAgLTgwMSw3ICs4MDEsNyBAQAogCXNhdmVfdmVjdG9yID0gKnZlY3RvcjsKIAogCS8qIFNldHVwIGZha2UgcmVzZXQgdmVjdG9yIHRoYXQgZG9lcwotCSAqICAgYiBfX3NlY29uZGFyeV9zdGFydF9wbWFjXzAgKyBucio4IC0gS0VSTkVMQkFTRQorCSAqICAgYiBfX3NlY29uZGFyeV9zdGFydF9wbWFjXzAgKyBucio4CiAJICovCiAJdGFyZ2V0ID0gKHVuc2lnbmVkIGxvbmcpIF9fc2Vjb25kYXJ5X3N0YXJ0X3BtYWNfMCArIG5yICogODsKIAlwYXRjaF9icmFuY2godmVjdG9yLCB0YXJnZXQsIEJSQU5DSF9TRVRfTElOSyk7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL3RpbWUuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvdGltZS5jCmluZGV4IGJiYmVmZDYuLjU5ZWI4NDAgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvdGltZS5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvdGltZS5jCkBAIC05MywxMSArOTMsMTQgQEAKIH0KICNlbmRpZgogCisjaWYgZGVmaW5lZChDT05GSUdfQURCX0NVREEpIHx8IGRlZmluZWQoQ09ORklHX0FEQl9QTVUpIHx8IFwKKyAgICBkZWZpbmVkKENPTkZJR19QTUFDX1NNVSkKIHN0YXRpYyB1bnNpZ25lZCBsb25nIGZyb21fcnRjX3RpbWUoc3RydWN0IHJ0Y190aW1lICp0bSkKIHsKIAlyZXR1cm4gbWt0aW1lKHRtLT50bV95ZWFyKzE5MDAsIHRtLT50bV9tb24rMSwgdG0tPnRtX21kYXksCiAJCSAgICAgIHRtLT50bV9ob3VyLCB0bS0+dG1fbWluLCB0bS0+dG1fc2VjKTsKIH0KKyNlbmRpZgogCiAjaWZkZWYgQ09ORklHX0FEQl9DVURBCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBjdWRhX2dldF90aW1lKHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzMy9zeXN0ZW0tYnVzLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzMy9zeXN0ZW0tYnVzLmMKaW5kZXggMjgwZWU4OC4uYTc4OWJmNThjIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzMy9zeXN0ZW0tYnVzLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wczMvc3lzdGVtLWJ1cy5jCkBAIC03NjIsNyArNzYyLDcgQEAKIAl9OwogCiAJZGV2LT5jb3JlLmFyY2hkYXRhLm9mX25vZGUgPSBOVUxMOwotCWRldi0+Y29yZS5hcmNoZGF0YS5udW1hX25vZGUgPSAwOworCXNldF9kZXZfbm9kZSgmZGV2LT5jb3JlLCAwKTsKIAogCXByX2RlYnVnKCIlczolZCBhZGQgJXNcbiIsIF9fZnVuY19fLCBfX0xJTkVfXywgZGV2LT5jb3JlLmJ1c19pZCk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9jbW0uYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9jbW0uYwppbmRleCAzOGZlMzJhLi41Y2Q0ZDI3IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvY21tLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2NtbS5jCkBAIC0xMjEsNyArMTIxLDcgQEAKIAkJCW5wYSA9IChzdHJ1Y3QgY21tX3BhZ2VfYXJyYXkgKilfX2dldF9mcmVlX3BhZ2UoR0ZQX05PSU8gfCBfX0dGUF9OT1dBUk4gfAogCQkJCQkJCQkgICAgICAgX19HRlBfTk9SRVRSWSB8IF9fR0ZQX05PTUVNQUxMT0MpOwogCQkJaWYgKCFucGEpIHsKLQkJCQlwcl9pbmZvKCIlczogQ2FuIG5vdCBhbGxvY2F0ZSBuZXcgcGFnZSBsaXN0XG4iLCBfX0ZVTkNUSU9OX18pOworCQkJCXByX2luZm8oIiVzOiBDYW4gbm90IGFsbG9jYXRlIG5ldyBwYWdlIGxpc3RcbiIsIF9fZnVuY19fKTsKIAkJCQlmcmVlX3BhZ2UoYWRkcik7CiAJCQkJYnJlYWs7CiAJCQl9CkBAIC0xMzgsNyArMTM4LDcgQEAKIAkJfQogCiAJCWlmICgocmMgPSBwbHBhcl9wYWdlX3NldF9sb2FuZWQoX19wYShhZGRyKSkpKSB7Ci0JCQlwcl9lcnIoIiVzOiBDYW4gbm90IHNldCBwYWdlIHRvIGxvYW5lZC4gcmM9JWxkXG4iLCBfX0ZVTkNUSU9OX18sIHJjKTsKKwkJCXByX2VycigiJXM6IENhbiBub3Qgc2V0IHBhZ2UgdG8gbG9hbmVkLiByYz0lbGRcbiIsIF9fZnVuY19fLCByYyk7CiAJCQlzcGluX3VubG9jaygmY21tX2xvY2spOwogCQkJZnJlZV9wYWdlKGFkZHIpOwogCQkJYnJlYWs7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvZWVoX2RyaXZlci5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2VlaF9kcml2ZXIuYwppbmRleCA4YzFjYTQ3Li4wYWQ1NmZmIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvZWVoX2RyaXZlci5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9lZWhfZHJpdmVyLmMKQEAgLTQxLDcgKzQxLDcgQEAKIAlyZXR1cm4gIiI7CiB9CiAKLSNpZmRlZiBERUJVRworI2lmIDAKIHN0YXRpYyB2b2lkIHByaW50X2RldmljZV9ub2RlX3RyZWUoc3RydWN0IHBjaV9kbiAqcGRuLCBpbnQgZGVudCkKIHsKIAlpbnQgaTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9ob3RwbHVnLW1lbW9yeS5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2hvdHBsdWctbWVtb3J5LmMKaW5kZXggYTFhMzY4ZC4uMTQwZDAyYSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2hvdHBsdWctbWVtb3J5LmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2hvdHBsdWctbWVtb3J5LmMKQEAgLTIxLDcgKzIxLDcgQEAKIAlzdHJ1Y3Qgem9uZSAqem9uZTsKIAlpbnQgcmV0OwogCi0Jc3RhcnRfcGZuID0gYmFzZSA+PiBQRk5fU0VDVElPTl9TSElGVDsKKwlzdGFydF9wZm4gPSBiYXNlID4+IFBBR0VfU0hJRlQ7CiAJem9uZSA9IHBhZ2Vfem9uZShwZm5fdG9fcGFnZShzdGFydF9wZm4pKTsKIAogCS8qCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvcmVjb25maWcuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9yZWNvbmZpZy5jCmluZGV4IDc2MzdiZDMuLmM1OTFhMjUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9yZWNvbmZpZy5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9yZWNvbmZpZy5jCkBAIC00NjYsMTEgKzQ2NiwxMSBAQAogCQllbHNlCiAJCQlhY3Rpb24gPSBQU0VSSUVTX0RSQ09ORl9NRU1fUkVNT1ZFOwogCi0JCWJsb2NraW5nX25vdGlmaWVyX2NhbGxfY2hhaW4oJnBTZXJpZXNfcmVjb25maWdfY2hhaW4sCi0JCQkJCSAgICAgYWN0aW9uLCB2YWx1ZSk7CisJCXJjID0gYmxvY2tpbmdfbm90aWZpZXJfY2FsbF9jaGFpbigmcFNlcmllc19yZWNvbmZpZ19jaGFpbiwKKwkJCQkJCSAgYWN0aW9uLCB2YWx1ZSk7CiAJfQogCi0JcmV0dXJuIDA7CisJcmV0dXJuIHJjOwogfQogCiAvKioKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9ydGFzZC5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3J0YXNkLmMKaW5kZXggYzlmZmQ4Yy4uZjRlNTViZSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3J0YXNkLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3J0YXNkLmMKQEAgLTI5NSwxOSArMjk1LDI5IEBACiAJaWYgKCF0bXApCiAJCXJldHVybiAtRU5PTUVNOwogCi0KIAlzcGluX2xvY2tfaXJxc2F2ZSgmcnRhc2RfbG9nX2xvY2ssIHMpOwogCS8qIGlmIGl0J3MgMCwgdGhlbiB3ZSBrbm93IHdlIGdvdCB0aGUgbGFzdCBvbmUgKHRoZSBvbmUgaW4gTlZSQU0pICovCi0JaWYgKHJ0YXNfbG9nX3NpemUgPT0gMCAmJiBsb2dnaW5nX2VuYWJsZWQpCisJd2hpbGUgKHJ0YXNfbG9nX3NpemUgPT0gMCkgeworCQlpZiAoZmlsZS0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spIHsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJ0YXNkX2xvZ19sb2NrLCBzKTsKKwkJCWVycm9yID0gLUVBR0FJTjsKKwkJCWdvdG8gb3V0OworCQl9CisKKwkJaWYgKCFsb2dnaW5nX2VuYWJsZWQpIHsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJ0YXNkX2xvZ19sb2NrLCBzKTsKKwkJCWVycm9yID0gLUVOT0RBVEE7CisJCQlnb3RvIG91dDsKKwkJfQogCQludnJhbV9jbGVhcl9lcnJvcl9sb2coKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZydGFzZF9sb2dfbG9jaywgcyk7CiAKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcnRhc2RfbG9nX2xvY2ssIHMpOworCQllcnJvciA9IHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZShydGFzX2xvZ193YWl0LCBydGFzX2xvZ19zaXplKTsKKwkJaWYgKGVycm9yKQorCQkJZ290byBvdXQ7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZydGFzZF9sb2dfbG9jaywgcyk7CisJfQogCi0JZXJyb3IgPSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGUocnRhc19sb2dfd2FpdCwgcnRhc19sb2dfc2l6ZSk7Ci0JaWYgKGVycm9yKQotCQlnb3RvIG91dDsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZydGFzZF9sb2dfbG9jaywgcyk7CiAJb2Zmc2V0ID0gcnRhc19lcnJvcl9sb2dfYnVmZmVyX21heCAqIChydGFzX2xvZ19zdGFydCAmIExPR19OVU1CRVJfTUFTSyk7CiAJbWVtY3B5KHRtcCwgJnJ0YXNfbG9nX2J1ZltvZmZzZXRdLCBjb3VudCk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9zZXR1cC5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3NldHVwLmMKaW5kZXggN2IwMWQ2Ny4uZWMzNDE3MCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3NldHVwLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3NldHVwLmMKQEAgLTI1LDcgKzI1LDYgQEAKICNpbmNsdWRlIDxsaW51eC91bmlzdGQuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvdXNlci5oPgotI2luY2x1ZGUgPGxpbnV4L2Eub3V0Lmg+CiAjaW5jbHVkZSA8bGludXgvdHR5Lmg+CiAjaW5jbHVkZSA8bGludXgvbWFqb3IuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9zbXAuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9zbXAuYwppbmRleCA5ZDhmOGM4Li5lMDBmOTZiIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvc21wLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3NtcC5jCkBAIC0zNyw3ICszNyw2IEBACiAjaW5jbHVkZSA8YXNtL3BhY2EuaD4KICNpbmNsdWRlIDxhc20vdGltZS5oPgogI2luY2x1ZGUgPGFzbS9tYWNoZGVwLmg+Ci0jaW5jbHVkZSAieGljcy5oIgogI2luY2x1ZGUgPGFzbS9jcHV0YWJsZS5oPgogI2luY2x1ZGUgPGFzbS9maXJtd2FyZS5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KQEAgLTQ5LDYgKzQ4LDcgQEAKIAogI2luY2x1ZGUgInBscGFyX3dyYXBwZXJzLmgiCiAjaW5jbHVkZSAicHNlcmllcy5oIgorI2luY2x1ZGUgInhpY3MuaCIKIAogCiAvKgpAQCAtMTA1LDM2ICsxMDUsNiBAQAogfQogCiAjaWZkZWYgQ09ORklHX1hJQ1MKLXN0YXRpYyBpbmxpbmUgdm9pZCBzbXBfeGljc19kb19tZXNzYWdlKGludCBjcHUsIGludCBtc2cpCi17Ci0Jc2V0X2JpdChtc2csICZ4aWNzX2lwaV9tZXNzYWdlW2NwdV0udmFsdWUpOwotCW1iKCk7Ci0JeGljc19jYXVzZV9JUEkoY3B1KTsKLX0KLQotc3RhdGljIHZvaWQgc21wX3hpY3NfbWVzc2FnZV9wYXNzKGludCB0YXJnZXQsIGludCBtc2cpCi17Ci0JdW5zaWduZWQgaW50IGk7Ci0KLQlpZiAodGFyZ2V0IDwgTlJfQ1BVUykgewotCQlzbXBfeGljc19kb19tZXNzYWdlKHRhcmdldCwgbXNnKTsKLQl9IGVsc2UgewotCQlmb3JfZWFjaF9vbmxpbmVfY3B1KGkpIHsKLQkJCWlmICh0YXJnZXQgPT0gTVNHX0FMTF9CVVRfU0VMRgotCQkJICAgICYmIGkgPT0gc21wX3Byb2Nlc3Nvcl9pZCgpKQotCQkJCWNvbnRpbnVlOwotCQkJc21wX3hpY3NfZG9fbWVzc2FnZShpLCBtc2cpOwotCQl9Ci0JfQotfQotCi1zdGF0aWMgaW50IF9faW5pdCBzbXBfeGljc19wcm9iZSh2b2lkKQotewotCXhpY3NfcmVxdWVzdF9JUElzKCk7Ci0KLQlyZXR1cm4gY3B1c193ZWlnaHQoY3B1X3Bvc3NpYmxlX21hcCk7Ci19Ci0KIHN0YXRpYyB2b2lkIF9fZGV2aW5pdCBzbXBfeGljc19zZXR1cF9jcHUoaW50IGNwdSkKIHsKIAlpZiAoY3B1ICE9IGJvb3RfY3B1aWQpCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMveGljcy5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3hpY3MuYwppbmRleCAwZmM4MzBmLi5lMTkwNDc3IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMveGljcy5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy94aWNzLmMKQEAgLTksMzIgKzksMzAgQEAKICAqICAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogICovCiAKLQogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvdGhyZWFkcy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2lycS5oPgogI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgotI2luY2x1ZGUgPGxpbnV4L3NpZ25hbC5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9nZnAuaD4KICNpbmNsdWRlIDxsaW51eC9yYWRpeC10cmVlLmg+CiAjaW5jbHVkZSA8bGludXgvY3B1Lmg+CisjaW5jbHVkZSA8bGludXgvb2YuaD4KIAogI2luY2x1ZGUgPGFzbS9maXJtd2FyZS5oPgotI2luY2x1ZGUgPGFzbS9wcm9tLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KICNpbmNsdWRlIDxhc20vc21wLmg+CiAjaW5jbHVkZSA8YXNtL3J0YXMuaD4KICNpbmNsdWRlIDxhc20vaHZjYWxsLmg+CiAjaW5jbHVkZSA8YXNtL21hY2hkZXAuaD4KLSNpbmNsdWRlIDxhc20vaTgyNTkuaD4KIAogI2luY2x1ZGUgInhpY3MuaCIKICNpbmNsdWRlICJwbHBhcl93cmFwcGVycy5oIgogCitzdGF0aWMgc3RydWN0IGlycV9ob3N0ICp4aWNzX2hvc3Q7CisKICNkZWZpbmUgWElDU19JUEkJCTIKICNkZWZpbmUgWElDU19JUlFfU1BVUklPVVMJMAogCkBAIC00Nyw2ICs0NSwyMCBAQAogICovCiAjZGVmaW5lIElQSV9QUklPUklUWQkJNAogCitzdGF0aWMgdW5zaWduZWQgaW50IGRlZmF1bHRfc2VydmVyID0gMHhGRjsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgZGVmYXVsdF9kaXN0cmliX3NlcnZlciA9IDA7CitzdGF0aWMgdW5zaWduZWQgaW50IGludGVycnVwdF9zZXJ2ZXJfc2l6ZSA9IDg7CisKKy8qIFJUQVMgc2VydmljZSB0b2tlbnMgKi8KK3N0YXRpYyBpbnQgaWJtX2dldF94aXZlOworc3RhdGljIGludCBpYm1fc2V0X3hpdmU7CitzdGF0aWMgaW50IGlibV9pbnRfb247CitzdGF0aWMgaW50IGlibV9pbnRfb2ZmOworCisKKy8qIERpcmVjdCBoYXJkd2FyZSBsb3cgbGV2ZWwgYWNjZXNzb3JzICovCisKKy8qIFRoZSBwYXJ0IG9mIHRoZSBpbnRlcnJ1cHQgcHJlc2VudGF0aW9uIGxheWVyIHRoYXQgd2UgY2FyZSBhYm91dCAqLwogc3RydWN0IHhpY3NfaXBsIHsKIAl1bmlvbiB7CiAJCXUzMiB3b3JkOwpAQCAtNjUsMjcgKzc3LDYgQEAKIAogc3RhdGljIHN0cnVjdCB4aWNzX2lwbCBfX2lvbWVtICp4aWNzX3Blcl9jcHVbTlJfQ1BVU107CiAKLXN0YXRpYyB1bnNpZ25lZCBpbnQgZGVmYXVsdF9zZXJ2ZXIgPSAweEZGOwotc3RhdGljIHVuc2lnbmVkIGludCBkZWZhdWx0X2Rpc3RyaWJfc2VydmVyID0gMDsKLXN0YXRpYyB1bnNpZ25lZCBpbnQgaW50ZXJydXB0X3NlcnZlcl9zaXplID0gODsKLQotc3RhdGljIHN0cnVjdCBpcnFfaG9zdCAqeGljc19ob3N0OwotCi0vKgotICogWElDUyBvbmx5IGhhcyBhIHNpbmdsZSBJUEksIHNvIGVuY29kZSB0aGUgbWVzc2FnZXMgcGVyIENQVQotICovCi1zdHJ1Y3QgeGljc19pcGlfc3RydWN0IHhpY3NfaXBpX21lc3NhZ2VbTlJfQ1BVU10gX19jYWNoZWxpbmVfYWxpZ25lZDsKLQotLyogUlRBUyBzZXJ2aWNlIHRva2VucyAqLwotc3RhdGljIGludCBpYm1fZ2V0X3hpdmU7Ci1zdGF0aWMgaW50IGlibV9zZXRfeGl2ZTsKLXN0YXRpYyBpbnQgaWJtX2ludF9vbjsKLXN0YXRpYyBpbnQgaWJtX2ludF9vZmY7Ci0KLQotLyogRGlyZWN0IEhXIGxvdyBsZXZlbCBhY2Nlc3NvcnMgKi8KLQotCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBkaXJlY3RfeGlycl9pbmZvX2dldCh2b2lkKQogewogCWludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CkBAIC05Myw3ICs4NCw3IEBACiAJcmV0dXJuIGluX2JlMzIoJnhpY3NfcGVyX2NwdVtjcHVdLT54aXJyLndvcmQpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgZGlyZWN0X3hpcnJfaW5mb19zZXQoaW50IHZhbHVlKQorc3RhdGljIGlubGluZSB2b2lkIGRpcmVjdF94aXJyX2luZm9fc2V0KHVuc2lnbmVkIGludCB2YWx1ZSkKIHsKIAlpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwogCkBAIC0xMTUsNyArMTA2LDYgQEAKIAogLyogTFBBUiBsb3cgbGV2ZWwgYWNjZXNzb3JzICovCiAKLQogc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgbHBhcl94aXJyX2luZm9fZ2V0KHZvaWQpCiB7CiAJdW5zaWduZWQgbG9uZyBscGFyX3JjOwpAQCAtMTI3LDE1ICsxMTcsMTQgQEAKIAlyZXR1cm4gKHVuc2lnbmVkIGludClyZXR1cm5fdmFsdWU7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBscGFyX3hpcnJfaW5mb19zZXQoaW50IHZhbHVlKQorc3RhdGljIGlubGluZSB2b2lkIGxwYXJfeGlycl9pbmZvX3NldCh1bnNpZ25lZCBpbnQgdmFsdWUpCiB7CiAJdW5zaWduZWQgbG9uZyBscGFyX3JjOwotCXVuc2lnbmVkIGxvbmcgdmFsNjQgPSB2YWx1ZSAmIDB4ZmZmZmZmZmY7CiAKLQlscGFyX3JjID0gcGxwYXJfZW9pKHZhbDY0KTsKKwlscGFyX3JjID0gcGxwYXJfZW9pKHZhbHVlKTsKIAlpZiAobHBhcl9yYyAhPSBIX1NVQ0NFU1MpCi0JCXBhbmljKCJiYWQgcmV0dXJuIGNvZGUgRU9JIC0gcmMgPSAlbGQsIHZhbHVlPSVseFxuIiwgbHBhcl9yYywKLQkJICAgICAgdmFsNjQpOworCQlwYW5pYygiYmFkIHJldHVybiBjb2RlIEVPSSAtIHJjID0gJWxkLCB2YWx1ZT0leFxuIiwgbHBhcl9yYywKKwkJICAgICAgdmFsdWUpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgbHBhcl9jcHByX2luZm8odTggdmFsdWUpCkBAIC0xNTcsNDggKzE0Niw3IEBACiB9CiAKIAotLyogSGlnaCBsZXZlbCBoYW5kbGVycyBhbmQgaW5pdCBjb2RlICovCi0KLXN0YXRpYyB2b2lkIHhpY3NfdXBkYXRlX2lycV9zZXJ2ZXJzKHZvaWQpCi17Ci0JaW50IGksIGo7Ci0Jc3RydWN0IGRldmljZV9ub2RlICpucDsKLQl1MzIgaWxlbjsKLQljb25zdCB1MzIgKmlyZWcsICppc2l6ZTsKLQl1MzIgaGNwdWlkOwotCi0JLyogRmluZCB0aGUgc2VydmVyIG51bWJlcnMgZm9yIHRoZSBib290IGNwdS4gKi8KLQlucCA9IG9mX2dldF9jcHVfbm9kZShib290X2NwdWlkLCBOVUxMKTsKLQlCVUdfT04oIW5wKTsKLQotCWlyZWcgPSBvZl9nZXRfcHJvcGVydHkobnAsICJpYm0scHBjLWludGVycnVwdC1nc2VydmVyI3MiLCAmaWxlbik7Ci0JaWYgKCFpcmVnKSB7Ci0JCW9mX25vZGVfcHV0KG5wKTsKLQkJcmV0dXJuOwotCX0KLQotCWkgPSBpbGVuIC8gc2l6ZW9mKGludCk7Ci0JaGNwdWlkID0gZ2V0X2hhcmRfc21wX3Byb2Nlc3Nvcl9pZChib290X2NwdWlkKTsKLQotCS8qIEdsb2JhbCBpbnRlcnJ1cHQgZGlzdHJpYnV0aW9uIHNlcnZlciBpcyBzcGVjaWZpZWQgaW4gdGhlIGxhc3QKLQkgKiBlbnRyeSBvZiAiaWJtLHBwYy1pbnRlcnJ1cHQtZ3NlcnZlciNzIiBwcm9wZXJ0eS4gR2V0IHRoZSBsYXN0Ci0JICogZW50cnkgZm9tIHRoaXMgcHJvcGVydHkgZm9yIGN1cnJlbnQgYm9vdCBjcHUgaWQgYW5kIHVzZSBpdCBhcwotCSAqIGRlZmF1bHQgZGlzdHJpYnV0aW9uIHNlcnZlcgotCSAqLwotCWZvciAoaiA9IDA7IGogPCBpOyBqICs9IDIpIHsKLQkJaWYgKGlyZWdbal0gPT0gaGNwdWlkKSB7Ci0JCQlkZWZhdWx0X3NlcnZlciA9IGhjcHVpZDsKLQkJCWRlZmF1bHRfZGlzdHJpYl9zZXJ2ZXIgPSBpcmVnW2orMV07Ci0KLQkJCWlzaXplID0gb2ZfZ2V0X3Byb3BlcnR5KG5wLAotCQkJCQkiaWJtLGludGVycnVwdC1zZXJ2ZXIjLXNpemUiLCBOVUxMKTsKLQkJCWlmIChpc2l6ZSkKLQkJCQlpbnRlcnJ1cHRfc2VydmVyX3NpemUgPSAqaXNpemU7Ci0JCX0KLQl9Ci0KLQlvZl9ub2RlX3B1dChucCk7Ci19CisvKiBJbnRlcmZhY2UgdG8gZ2VuZXJpYyBpcnEgc3Vic3lzdGVtICovCiAKICNpZmRlZiBDT05GSUdfU01QCiBzdGF0aWMgaW50IGdldF9pcnFfc2VydmVyKHVuc2lnbmVkIGludCB2aXJxLCB1bnNpZ25lZCBpbnQgc3RyaWN0X2NoZWNrKQpAQCAtMjA4LDkgKzE1Niw2IEBACiAJY3B1bWFza190IGNwdW1hc2sgPSBpcnFfZGVzY1t2aXJxXS5hZmZpbml0eTsKIAljcHVtYXNrX3QgdG1wID0gQ1BVX01BU0tfTk9ORTsKIAotCWlmICghIGNwdV9pc3NldChkZWZhdWx0X3NlcnZlciwgY3B1X29ubGluZV9tYXApKQotCQl4aWNzX3VwZGF0ZV9pcnFfc2VydmVycygpOwotCiAJaWYgKCFkaXN0cmlidXRlX2lycXMpCiAJCXJldHVybiBkZWZhdWx0X3NlcnZlcjsKIApAQCAtMjM4LDcgKzE4Myw2IEBACiB9CiAjZW5kaWYKIAotCiBzdGF0aWMgdm9pZCB4aWNzX3VubWFza19pcnEodW5zaWduZWQgaW50IHZpcnEpCiB7CiAJdW5zaWduZWQgaW50IGlycTsKQEAgLTI1NywyMSArMjAxLDI4IEBACiAJY2FsbF9zdGF0dXMgPSBydGFzX2NhbGwoaWJtX3NldF94aXZlLCAzLCAxLCBOVUxMLCBpcnEsIHNlcnZlciwKIAkJCQlERUZBVUxUX1BSSU9SSVRZKTsKIAlpZiAoY2FsbF9zdGF0dXMgIT0gMCkgewotCQlwcmludGsoS0VSTl9FUlIgInhpY3NfZW5hYmxlX2lycTogaXJxPSV1OiBpYm1fc2V0X3hpdmUgIgotCQkgICAgICAgInJldHVybmVkICVkXG4iLCBpcnEsIGNhbGxfc3RhdHVzKTsKLQkJcHJpbnRrKCJzZXRfeGl2ZSAleCwgc2VydmVyICV4XG4iLCBpYm1fc2V0X3hpdmUsIHNlcnZlcik7CisJCXByaW50ayhLRVJOX0VSUgorCQkJIiVzOiBpYm1fc2V0X3hpdmUgaXJxICV1IHNlcnZlciAleCByZXR1cm5lZCAlZFxuIiwKKwkJCV9fZnVuY19fLCBpcnEsIHNlcnZlciwgY2FsbF9zdGF0dXMpOwogCQlyZXR1cm47CiAJfQogCiAJLyogTm93IHVubWFzayB0aGUgaW50ZXJydXB0IChvZnRlbiBhIG5vLW9wKSAqLwogCWNhbGxfc3RhdHVzID0gcnRhc19jYWxsKGlibV9pbnRfb24sIDEsIDEsIE5VTEwsIGlycSk7CiAJaWYgKGNhbGxfc3RhdHVzICE9IDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJ4aWNzX2VuYWJsZV9pcnE6IGlycT0ldTogaWJtX2ludF9vbiAiCi0JCSAgICAgICAicmV0dXJuZWQgJWRcbiIsIGlycSwgY2FsbF9zdGF0dXMpOworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBpYm1faW50X29uIGlycT0ldSByZXR1cm5lZCAlZFxuIiwKKwkJCV9fZnVuY19fLCBpcnEsIGNhbGxfc3RhdHVzKTsKIAkJcmV0dXJuOwogCX0KIH0KIAorc3RhdGljIHVuc2lnbmVkIGludCB4aWNzX3N0YXJ0dXAodW5zaWduZWQgaW50IHZpcnEpCit7CisJLyogdW5tYXNrIGl0ICovCisJeGljc191bm1hc2tfaXJxKHZpcnEpOworCXJldHVybiAwOworfQorCiBzdGF0aWMgdm9pZCB4aWNzX21hc2tfcmVhbF9pcnEodW5zaWduZWQgaW50IGlycSkKIHsKIAlpbnQgY2FsbF9zdGF0dXM7CkBAIC0yODEsOCArMjMyLDggQEAKIAogCWNhbGxfc3RhdHVzID0gcnRhc19jYWxsKGlibV9pbnRfb2ZmLCAxLCAxLCBOVUxMLCBpcnEpOwogCWlmIChjYWxsX3N0YXR1cyAhPSAwKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAieGljc19kaXNhYmxlX3JlYWxfaXJxOiBpcnE9JXU6ICIKLQkJICAgICAgICJpYm1faW50X29mZiByZXR1cm5lZCAlZFxuIiwgaXJxLCBjYWxsX3N0YXR1cyk7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGlibV9pbnRfb2ZmIGlycT0ldSByZXR1cm5lZCAlZFxuIiwKKwkJCV9fZnVuY19fLCBpcnEsIGNhbGxfc3RhdHVzKTsKIAkJcmV0dXJuOwogCX0KIApAQCAtMjkwLDggKzI0MSw4IEBACiAJY2FsbF9zdGF0dXMgPSBydGFzX2NhbGwoaWJtX3NldF94aXZlLCAzLCAxLCBOVUxMLCBpcnEsCiAJCQkJZGVmYXVsdF9zZXJ2ZXIsIDB4ZmYpOwogCWlmIChjYWxsX3N0YXR1cyAhPSAwKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAieGljc19kaXNhYmxlX2lycTogaXJxPSV1OiBpYm1fc2V0X3hpdmUoMHhmZikiCi0JCSAgICAgICAiIHJldHVybmVkICVkXG4iLCBpcnEsIGNhbGxfc3RhdHVzKTsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogaWJtX3NldF94aXZlKDB4ZmYpIGlycT0ldSByZXR1cm5lZCAlZFxuIiwKKwkJCV9fZnVuY19fLCBpcnEsIGNhbGxfc3RhdHVzKTsKIAkJcmV0dXJuOwogCX0KIH0KQEAgLTMwOCwxNyArMjU5LDYxIEBACiAJeGljc19tYXNrX3JlYWxfaXJxKGlycSk7CiB9CiAKLXN0YXRpYyB1bnNpZ25lZCBpbnQgeGljc19zdGFydHVwKHVuc2lnbmVkIGludCB2aXJxKQorc3RhdGljIHZvaWQgeGljc19tYXNrX3Vua25vd25fdmVjKHVuc2lnbmVkIGludCB2ZWMpCiB7CisJcHJpbnRrKEtFUk5fRVJSICJJbnRlcnJ1cHQgJXUgKHJlYWwpIGlzIGludmFsaWQsIGRpc2FibGluZyBpdC5cbiIsIHZlYyk7CisJeGljc19tYXNrX3JlYWxfaXJxKHZlYyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHhpY3NfeGlycl92ZWN0b3IodW5zaWduZWQgaW50IHhpcnIpCit7CisJLyoKKwkgKiBUaGUgdG9wIGJ5dGUgaXMgdGhlIG9sZCBjcHByLCB0byBiZSByZXN0b3JlZCBvbiBFT0kuCisJICogVGhlIHJlbWFpbmluZyAyNCBiaXRzIGFyZSB0aGUgdmVjdG9yLgorCSAqLworCXJldHVybiB4aXJyICYgMHgwMGZmZmZmZjsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCB4aWNzX2dldF9pcnFfZGlyZWN0KHZvaWQpCit7CisJdW5zaWduZWQgaW50IHhpcnIgPSBkaXJlY3RfeGlycl9pbmZvX2dldCgpOworCXVuc2lnbmVkIGludCB2ZWMgPSB4aWNzX3hpcnJfdmVjdG9yKHhpcnIpOwogCXVuc2lnbmVkIGludCBpcnE7CiAKLQkvKiBmb3JjZSBhIHJldmVyc2UgbWFwcGluZyBvZiB0aGUgaW50ZXJydXB0IHNvIGl0IGdldHMgaW4gdGhlIGNhY2hlICovCi0JaXJxID0gKHVuc2lnbmVkIGludClpcnFfbWFwW3ZpcnFdLmh3aXJxOwotCWlycV9yYWRpeF9yZXZtYXAoeGljc19ob3N0LCBpcnEpOworCWlmICh2ZWMgPT0gWElDU19JUlFfU1BVUklPVVMpCisJCXJldHVybiBOT19JUlE7CiAKLQkvKiB1bm1hc2sgaXQgKi8KLQl4aWNzX3VubWFza19pcnEodmlycSk7Ci0JcmV0dXJuIDA7CisJaXJxID0gaXJxX3JhZGl4X3Jldm1hcF9sb29rdXAoeGljc19ob3N0LCB2ZWMpOworCWlmIChsaWtlbHkoaXJxICE9IE5PX0lSUSkpCisJCXJldHVybiBpcnE7CisKKwkvKiBXZSBkb24ndCBoYXZlIGEgbGludXggbWFwcGluZywgc28gaGF2ZSBydGFzIG1hc2sgaXQuICovCisJeGljc19tYXNrX3Vua25vd25fdmVjKHZlYyk7CisKKwkvKiBXZSBtaWdodCBsZWFybiBhYm91dCBpdCBsYXRlciwgc28gRU9JIGl0ICovCisJZGlyZWN0X3hpcnJfaW5mb19zZXQoeGlycik7CisJcmV0dXJuIE5PX0lSUTsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCB4aWNzX2dldF9pcnFfbHBhcih2b2lkKQoreworCXVuc2lnbmVkIGludCB4aXJyID0gbHBhcl94aXJyX2luZm9fZ2V0KCk7CisJdW5zaWduZWQgaW50IHZlYyA9IHhpY3NfeGlycl92ZWN0b3IoeGlycik7CisJdW5zaWduZWQgaW50IGlycTsKKworCWlmICh2ZWMgPT0gWElDU19JUlFfU1BVUklPVVMpCisJCXJldHVybiBOT19JUlE7CisKKwlpcnEgPSBpcnFfcmFkaXhfcmV2bWFwX2xvb2t1cCh4aWNzX2hvc3QsIHZlYyk7CisJaWYgKGxpa2VseShpcnEgIT0gTk9fSVJRKSkKKwkJcmV0dXJuIGlycTsKKworCS8qIFdlIGRvbid0IGhhdmUgYSBsaW51eCBtYXBwaW5nLCBzbyBoYXZlIFJUQVMgbWFzayBpdC4gKi8KKwl4aWNzX21hc2tfdW5rbm93bl92ZWModmVjKTsKKworCS8qIFdlIG1pZ2h0IGxlYXJuIGFib3V0IGl0IGxhdGVyLCBzbyBFT0kgaXQgKi8KKwlscGFyX3hpcnJfaW5mb19zZXQoeGlycik7CisJcmV0dXJuIE5PX0lSUTsKIH0KIAogc3RhdGljIHZvaWQgeGljc19lb2lfZGlyZWN0KHVuc2lnbmVkIGludCB2aXJxKQpAQCAtMzI5LDcgKzMyNCw2IEBACiAJZGlyZWN0X3hpcnJfaW5mb19zZXQoKDB4ZmYgPDwgMjQpIHwgaXJxKTsKIH0KIAotCiBzdGF0aWMgdm9pZCB4aWNzX2VvaV9scGFyKHVuc2lnbmVkIGludCB2aXJxKQogewogCXVuc2lnbmVkIGludCBpcnEgPSAodW5zaWduZWQgaW50KWlycV9tYXBbdmlycV0uaHdpcnE7CkBAIC0zMzgsMTA0ICszMzIsNiBAQAogCWxwYXJfeGlycl9pbmZvX3NldCgoMHhmZiA8PCAyNCkgfCBpcnEpOwogfQogCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCB4aWNzX3JlbWFwX2lycSh1bnNpZ25lZCBpbnQgdmVjKQotewotCXVuc2lnbmVkIGludCBpcnE7Ci0KLQl2ZWMgJj0gMHgwMGZmZmZmZjsKLQotCWlmICh2ZWMgPT0gWElDU19JUlFfU1BVUklPVVMpCi0JCXJldHVybiBOT19JUlE7Ci0JaXJxID0gaXJxX3JhZGl4X3Jldm1hcCh4aWNzX2hvc3QsIHZlYyk7Ci0JaWYgKGxpa2VseShpcnEgIT0gTk9fSVJRKSkKLQkJcmV0dXJuIGlycTsKLQotCXByaW50ayhLRVJOX0VSUiAiSW50ZXJydXB0ICV1IChyZWFsKSBpcyBpbnZhbGlkLCIKLQkgICAgICAgIiBkaXNhYmxpbmcgaXQuXG4iLCB2ZWMpOwotCXhpY3NfbWFza19yZWFsX2lycSh2ZWMpOwotCXJldHVybiBOT19JUlE7Ci19Ci0KLXN0YXRpYyB1bnNpZ25lZCBpbnQgeGljc19nZXRfaXJxX2RpcmVjdCh2b2lkKQotewotCXJldHVybiB4aWNzX3JlbWFwX2lycShkaXJlY3RfeGlycl9pbmZvX2dldCgpKTsKLX0KLQotc3RhdGljIHVuc2lnbmVkIGludCB4aWNzX2dldF9pcnFfbHBhcih2b2lkKQotewotCXJldHVybiB4aWNzX3JlbWFwX2lycShscGFyX3hpcnJfaW5mb19nZXQoKSk7Ci19Ci0KLSNpZmRlZiBDT05GSUdfU01QCi0KLXN0YXRpYyBpcnFyZXR1cm5fdCB4aWNzX2lwaV9kaXNwYXRjaChpbnQgY3B1KQotewotCVdBUk5fT04oY3B1X2lzX29mZmxpbmUoY3B1KSk7Ci0KLQl3aGlsZSAoeGljc19pcGlfbWVzc2FnZVtjcHVdLnZhbHVlKSB7Ci0JCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoUFBDX01TR19DQUxMX0ZVTkNUSU9OLAotCQkJCSAgICAgICAmeGljc19pcGlfbWVzc2FnZVtjcHVdLnZhbHVlKSkgewotCQkJbWIoKTsKLQkJCXNtcF9tZXNzYWdlX3JlY3YoUFBDX01TR19DQUxMX0ZVTkNUSU9OKTsKLQkJfQotCQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KFBQQ19NU0dfUkVTQ0hFRFVMRSwKLQkJCQkgICAgICAgJnhpY3NfaXBpX21lc3NhZ2VbY3B1XS52YWx1ZSkpIHsKLQkJCW1iKCk7Ci0JCQlzbXBfbWVzc2FnZV9yZWN2KFBQQ19NU0dfUkVTQ0hFRFVMRSk7Ci0JCX0KLQkJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChQUENfTVNHX0NBTExfRlVOQ19TSU5HTEUsCi0JCQkJICAgICAgICZ4aWNzX2lwaV9tZXNzYWdlW2NwdV0udmFsdWUpKSB7Ci0JCQltYigpOwotCQkJc21wX21lc3NhZ2VfcmVjdihQUENfTVNHX0NBTExfRlVOQ19TSU5HTEUpOwotCQl9Ci0jaWYgZGVmaW5lZChDT05GSUdfREVCVUdHRVIpIHx8IGRlZmluZWQoQ09ORklHX0tFWEVDKQotCQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KFBQQ19NU0dfREVCVUdHRVJfQlJFQUssCi0JCQkJICAgICAgICZ4aWNzX2lwaV9tZXNzYWdlW2NwdV0udmFsdWUpKSB7Ci0JCQltYigpOwotCQkJc21wX21lc3NhZ2VfcmVjdihQUENfTVNHX0RFQlVHR0VSX0JSRUFLKTsKLQkJfQotI2VuZGlmCi0JfQotCXJldHVybiBJUlFfSEFORExFRDsKLX0KLQotc3RhdGljIGlycXJldHVybl90IHhpY3NfaXBpX2FjdGlvbl9kaXJlY3QoaW50IGlycSwgdm9pZCAqZGV2X2lkKQotewotCWludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7Ci0KLQlkaXJlY3RfcWlycl9pbmZvKGNwdSwgMHhmZik7Ci0KLQlyZXR1cm4geGljc19pcGlfZGlzcGF0Y2goY3B1KTsKLX0KLQotc3RhdGljIGlycXJldHVybl90IHhpY3NfaXBpX2FjdGlvbl9scGFyKGludCBpcnEsIHZvaWQgKmRldl9pZCkKLXsKLQlpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwotCi0JbHBhcl9xaXJyX2luZm8oY3B1LCAweGZmKTsKLQotCXJldHVybiB4aWNzX2lwaV9kaXNwYXRjaChjcHUpOwotfQotCi12b2lkIHhpY3NfY2F1c2VfSVBJKGludCBjcHUpCi17Ci0JaWYgKGZpcm13YXJlX2hhc19mZWF0dXJlKEZXX0ZFQVRVUkVfTFBBUikpCi0JCWxwYXJfcWlycl9pbmZvKGNwdSwgSVBJX1BSSU9SSVRZKTsKLQllbHNlCi0JCWRpcmVjdF9xaXJyX2luZm8oY3B1LCBJUElfUFJJT1JJVFkpOwotfQotCi0jZW5kaWYgLyogQ09ORklHX1NNUCAqLwotCi1zdGF0aWMgdm9pZCB4aWNzX3NldF9jcHVfcHJpb3JpdHkodW5zaWduZWQgY2hhciBjcHByKQotewotCWlmIChmaXJtd2FyZV9oYXNfZmVhdHVyZShGV19GRUFUVVJFX0xQQVIpKQotCQlscGFyX2NwcHJfaW5mbyhjcHByKTsKLQllbHNlCi0JCWRpcmVjdF9jcHByX2luZm8oY3Bwcik7Ci0JaW9zeW5jKCk7Ci19Ci0KIHN0YXRpYyB2b2lkIHhpY3Nfc2V0X2FmZmluaXR5KHVuc2lnbmVkIGludCB2aXJxLCBjcHVtYXNrX3QgY3B1bWFzaykKIHsKIAl1bnNpZ25lZCBpbnQgaXJxOwpAQCAtNDUwLDggKzM0Niw4IEBACiAJc3RhdHVzID0gcnRhc19jYWxsKGlibV9nZXRfeGl2ZSwgMSwgMywgeGljc19zdGF0dXMsIGlycSk7CiAKIAlpZiAoc3RhdHVzKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAieGljc19zZXRfYWZmaW5pdHk6IGlycT0ldSBpYm0sZ2V0LXhpdmUgIgotCQkgICAgICAgInJldHVybnMgJWRcbiIsIGlycSwgc3RhdHVzKTsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogaWJtLGdldC14aXZlIGlycT0ldSByZXR1cm5zICVkXG4iLAorCQkJX19mdW5jX18sIGlycSwgc3RhdHVzKTsKIAkJcmV0dXJuOwogCX0KIApAQCAtNDYzLDggKzM1OSw5IEBACiAJaWYgKGlycV9zZXJ2ZXIgPT0gLTEpIHsKIAkJY2hhciBjcHVsaXN0WzEyOF07CiAJCWNwdW1hc2tfc2NucHJpbnRmKGNwdWxpc3QsIHNpemVvZihjcHVsaXN0KSwgY3B1bWFzayk7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgInhpY3Nfc2V0X2FmZmluaXR5OiBObyBvbmxpbmUgY3B1cyBpbiAiCi0JCQkJInRoZSBtYXNrICVzIGZvciBpcnEgJWRcbiIsIGNwdWxpc3QsIHZpcnEpOworCQlwcmludGsoS0VSTl9XQVJOSU5HCisJCQkiJXM6IE5vIG9ubGluZSBjcHVzIGluIHRoZSBtYXNrICVzIGZvciBpcnEgJWRcbiIsCisJCQlfX2Z1bmNfXywgY3B1bGlzdCwgdmlycSk7CiAJCXJldHVybjsKIAl9CiAKQEAgLTQ3MiwyOCArMzY5LDEyIEBACiAJCQkJaXJxLCBpcnFfc2VydmVyLCB4aWNzX3N0YXR1c1sxXSk7CiAKIAlpZiAoc3RhdHVzKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAieGljc19zZXRfYWZmaW5pdHk6IGlycT0ldSBpYm0sc2V0LXhpdmUgIgotCQkgICAgICAgInJldHVybnMgJWRcbiIsIGlycSwgc3RhdHVzKTsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogaWJtLHNldC14aXZlIGlycT0ldSByZXR1cm5zICVkXG4iLAorCQkJX19mdW5jX18sIGlycSwgc3RhdHVzKTsKIAkJcmV0dXJuOwogCX0KIH0KIAotdm9pZCB4aWNzX3NldHVwX2NwdSh2b2lkKQotewotCXhpY3Nfc2V0X2NwdV9wcmlvcml0eSgweGZmKTsKLQotCS8qCi0JICogUHV0IHRoZSBjYWxsaW5nIHByb2Nlc3NvciBpbnRvIHRoZSBHSVEuICBUaGlzIGlzIHJlYWxseSBvbmx5Ci0JICogbmVjZXNzYXJ5IGZyb20gYSBzZWNvbmRhcnkgdGhyZWFkIGFzIHRoZSBPRiBzdGFydC1jcHUgaW50ZXJmYWNlCi0JICogcGVyZm9ybXMgdGhpcyBmdW5jdGlvbiBmb3IgdXMgb24gcHJpbWFyeSB0aHJlYWRzLgotCSAqCi0JICogWFhYOiB1bmRvIG9mIHRlYXJkb3duIG9uIGtleGVjIG5lZWRzIHRoaXMgdG9vLCBhcyBtYXkgaG90cGx1ZwotCSAqLwotCXJ0YXNfc2V0X2luZGljYXRvcl9mYXN0KEdMT0JBTF9JTlRFUlJVUFRfUVVFVUUsCi0JCSgxVUwgPDwgaW50ZXJydXB0X3NlcnZlcl9zaXplKSAtIDEgLSBkZWZhdWx0X2Rpc3RyaWJfc2VydmVyLCAxKTsKLX0KLQotCiBzdGF0aWMgc3RydWN0IGlycV9jaGlwIHhpY3NfcGljX2RpcmVjdCA9IHsKIAkudHlwZW5hbWUgPSAiIFhJQ1MgICAgICIsCiAJLnN0YXJ0dXAgPSB4aWNzX3N0YXJ0dXAsCkBAIC01MDMsNyArMzg0LDYgQEAKIAkuc2V0X2FmZmluaXR5ID0geGljc19zZXRfYWZmaW5pdHkKIH07CiAKLQogc3RhdGljIHN0cnVjdCBpcnFfY2hpcCB4aWNzX3BpY19scGFyID0gewogCS50eXBlbmFtZSA9ICIgWElDUyAgICAgIiwKIAkuc3RhcnR1cCA9IHhpY3Nfc3RhcnR1cCwKQEAgLTUxMyw2ICszOTMsOSBAQAogCS5zZXRfYWZmaW5pdHkgPSB4aWNzX3NldF9hZmZpbml0eQogfTsKIAorCisvKiBJbnRlcmZhY2UgdG8gYXJjaCBpcnEgY29udHJvbGxlciBzdWJzeXN0ZW0gbGF5ZXIgKi8KKwogLyogUG9pbnRzIHRvIHRoZSBpcnFfY2hpcCB3ZSdyZSBhY3R1YWxseSB1c2luZyAqLwogc3RhdGljIHN0cnVjdCBpcnFfY2hpcCAqeGljc19pcnFfY2hpcDsKIApAQCAtNTMwLDYgKzQxMyw5IEBACiB7CiAJcHJfZGVidWcoInhpY3M6IG1hcCB2aXJxICVkLCBod2lycSAweCVseFxuIiwgdmlycSwgaHcpOwogCisJLyogSW5zZXJ0IHRoZSBpbnRlcnJ1cHQgbWFwcGluZyBpbnRvIHRoZSByYWRpeCB0cmVlIGZvciBmYXN0IGxvb2t1cCAqLworCWlycV9yYWRpeF9yZXZtYXBfaW5zZXJ0KHhpY3NfaG9zdCwgdmlycSwgaHcpOworCiAJZ2V0X2lycV9kZXNjKHZpcnEpLT5zdGF0dXMgfD0gSVJRX0xFVkVMOwogCXNldF9pcnFfY2hpcF9hbmRfaGFuZGxlcih2aXJxLCB4aWNzX2lycV9jaGlwLCBoYW5kbGVfZmFzdGVvaV9pcnEpOwogCXJldHVybiAwOwpAQCAtNTY5LDEwICs0NTUsMTY5IEBACiAJaXJxX3NldF9kZWZhdWx0X2hvc3QoeGljc19ob3N0KTsKIH0KIAorCisvKiBJbnRlci1wcm9jZXNzb3IgaW50ZXJydXB0IHN1cHBvcnQgKi8KKworI2lmZGVmIENPTkZJR19TTVAKKy8qCisgKiBYSUNTIG9ubHkgaGFzIGEgc2luZ2xlIElQSSwgc28gZW5jb2RlIHRoZSBtZXNzYWdlcyBwZXIgQ1BVCisgKi8KK3N0cnVjdCB4aWNzX2lwaV9zdHJ1Y3QgeworICAgICAgICB1bnNpZ25lZCBsb25nIHZhbHVlOworCX0gX19fX2NhY2hlbGluZV9hbGlnbmVkOworCitzdGF0aWMgc3RydWN0IHhpY3NfaXBpX3N0cnVjdCB4aWNzX2lwaV9tZXNzYWdlW05SX0NQVVNdIF9fY2FjaGVsaW5lX2FsaWduZWQ7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzbXBfeGljc19kb19tZXNzYWdlKGludCBjcHUsIGludCBtc2cpCit7CisJc2V0X2JpdChtc2csICZ4aWNzX2lwaV9tZXNzYWdlW2NwdV0udmFsdWUpOworCW1iKCk7CisJaWYgKGZpcm13YXJlX2hhc19mZWF0dXJlKEZXX0ZFQVRVUkVfTFBBUikpCisJCWxwYXJfcWlycl9pbmZvKGNwdSwgSVBJX1BSSU9SSVRZKTsKKwllbHNlCisJCWRpcmVjdF9xaXJyX2luZm8oY3B1LCBJUElfUFJJT1JJVFkpOworfQorCit2b2lkIHNtcF94aWNzX21lc3NhZ2VfcGFzcyhpbnQgdGFyZ2V0LCBpbnQgbXNnKQoreworCXVuc2lnbmVkIGludCBpOworCisJaWYgKHRhcmdldCA8IE5SX0NQVVMpIHsKKwkJc21wX3hpY3NfZG9fbWVzc2FnZSh0YXJnZXQsIG1zZyk7CisJfSBlbHNlIHsKKwkJZm9yX2VhY2hfb25saW5lX2NwdShpKSB7CisJCQlpZiAodGFyZ2V0ID09IE1TR19BTExfQlVUX1NFTEYKKwkJCSAgICAmJiBpID09IHNtcF9wcm9jZXNzb3JfaWQoKSkKKwkJCQljb250aW51ZTsKKwkJCXNtcF94aWNzX2RvX21lc3NhZ2UoaSwgbXNnKTsKKwkJfQorCX0KK30KKworc3RhdGljIGlycXJldHVybl90IHhpY3NfaXBpX2Rpc3BhdGNoKGludCBjcHUpCit7CisJV0FSTl9PTihjcHVfaXNfb2ZmbGluZShjcHUpKTsKKworCW1iKCk7CS8qIG9yZGVyIG1taW8gY2xlYXJpbmcgcWlyciAqLworCXdoaWxlICh4aWNzX2lwaV9tZXNzYWdlW2NwdV0udmFsdWUpIHsKKwkJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChQUENfTVNHX0NBTExfRlVOQ1RJT04sCisJCQkJICAgICAgICZ4aWNzX2lwaV9tZXNzYWdlW2NwdV0udmFsdWUpKSB7CisJCQlzbXBfbWVzc2FnZV9yZWN2KFBQQ19NU0dfQ0FMTF9GVU5DVElPTik7CisJCX0KKwkJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChQUENfTVNHX1JFU0NIRURVTEUsCisJCQkJICAgICAgICZ4aWNzX2lwaV9tZXNzYWdlW2NwdV0udmFsdWUpKSB7CisJCQlzbXBfbWVzc2FnZV9yZWN2KFBQQ19NU0dfUkVTQ0hFRFVMRSk7CisJCX0KKwkJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChQUENfTVNHX0NBTExfRlVOQ19TSU5HTEUsCisJCQkJICAgICAgICZ4aWNzX2lwaV9tZXNzYWdlW2NwdV0udmFsdWUpKSB7CisJCQlzbXBfbWVzc2FnZV9yZWN2KFBQQ19NU0dfQ0FMTF9GVU5DX1NJTkdMRSk7CisJCX0KKyNpZiBkZWZpbmVkKENPTkZJR19ERUJVR0dFUikgfHwgZGVmaW5lZChDT05GSUdfS0VYRUMpCisJCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoUFBDX01TR19ERUJVR0dFUl9CUkVBSywKKwkJCQkgICAgICAgJnhpY3NfaXBpX21lc3NhZ2VbY3B1XS52YWx1ZSkpIHsKKwkJCXNtcF9tZXNzYWdlX3JlY3YoUFBDX01TR19ERUJVR0dFUl9CUkVBSyk7CisJCX0KKyNlbmRpZgorCX0KKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCB4aWNzX2lwaV9hY3Rpb25fZGlyZWN0KGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3sKKwlpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOworCisJZGlyZWN0X3FpcnJfaW5mbyhjcHUsIDB4ZmYpOworCisJcmV0dXJuIHhpY3NfaXBpX2Rpc3BhdGNoKGNwdSk7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCB4aWNzX2lwaV9hY3Rpb25fbHBhcihpbnQgaXJxLCB2b2lkICpkZXZfaWQpCit7CisJaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKKworCWxwYXJfcWlycl9pbmZvKGNwdSwgMHhmZik7CisKKwlyZXR1cm4geGljc19pcGlfZGlzcGF0Y2goY3B1KTsKK30KKworc3RhdGljIHZvaWQgeGljc19yZXF1ZXN0X2lwaSh2b2lkKQoreworCXVuc2lnbmVkIGludCBpcGk7CisJaW50IHJjOworCisJaXBpID0gaXJxX2NyZWF0ZV9tYXBwaW5nKHhpY3NfaG9zdCwgWElDU19JUEkpOworCUJVR19PTihpcGkgPT0gTk9fSVJRKTsKKworCS8qCisJICogSVBJcyBhcmUgbWFya2VkIElSUUZfRElTQUJMRUQgYXMgdGhleSBtdXN0IHJ1biB3aXRoIGlycXMKKwkgKiBkaXNhYmxlZAorCSAqLworCXNldF9pcnFfaGFuZGxlcihpcGksIGhhbmRsZV9wZXJjcHVfaXJxKTsKKwlpZiAoZmlybXdhcmVfaGFzX2ZlYXR1cmUoRldfRkVBVFVSRV9MUEFSKSkKKwkJcmMgPSByZXF1ZXN0X2lycShpcGksIHhpY3NfaXBpX2FjdGlvbl9scGFyLAorCQkJCUlSUUZfRElTQUJMRUR8SVJRRl9QRVJDUFUsICJJUEkiLCBOVUxMKTsKKwllbHNlCisJCXJjID0gcmVxdWVzdF9pcnEoaXBpLCB4aWNzX2lwaV9hY3Rpb25fZGlyZWN0LAorCQkJCUlSUUZfRElTQUJMRUR8SVJRRl9QRVJDUFUsICJJUEkiLCBOVUxMKTsKKwlCVUdfT04ocmMpOworfQorCitpbnQgX19pbml0IHNtcF94aWNzX3Byb2JlKHZvaWQpCit7CisJeGljc19yZXF1ZXN0X2lwaSgpOworCisJcmV0dXJuIGNwdXNfd2VpZ2h0KGNwdV9wb3NzaWJsZV9tYXApOworfQorCisjZW5kaWYgLyogQ09ORklHX1NNUCAqLworCisKKy8qIEluaXRpYWxpemF0aW9uICovCisKK3N0YXRpYyB2b2lkIHhpY3NfdXBkYXRlX2lycV9zZXJ2ZXJzKHZvaWQpCit7CisJaW50IGksIGo7CisJc3RydWN0IGRldmljZV9ub2RlICpucDsKKwl1MzIgaWxlbjsKKwljb25zdCB1MzIgKmlyZWcsICppc2l6ZTsKKwl1MzIgaGNwdWlkOworCisJLyogRmluZCB0aGUgc2VydmVyIG51bWJlcnMgZm9yIHRoZSBib290IGNwdS4gKi8KKwlucCA9IG9mX2dldF9jcHVfbm9kZShib290X2NwdWlkLCBOVUxMKTsKKwlCVUdfT04oIW5wKTsKKworCWlyZWcgPSBvZl9nZXRfcHJvcGVydHkobnAsICJpYm0scHBjLWludGVycnVwdC1nc2VydmVyI3MiLCAmaWxlbik7CisJaWYgKCFpcmVnKSB7CisJCW9mX25vZGVfcHV0KG5wKTsKKwkJcmV0dXJuOworCX0KKworCWkgPSBpbGVuIC8gc2l6ZW9mKGludCk7CisJaGNwdWlkID0gZ2V0X2hhcmRfc21wX3Byb2Nlc3Nvcl9pZChib290X2NwdWlkKTsKKworCS8qIEdsb2JhbCBpbnRlcnJ1cHQgZGlzdHJpYnV0aW9uIHNlcnZlciBpcyBzcGVjaWZpZWQgaW4gdGhlIGxhc3QKKwkgKiBlbnRyeSBvZiAiaWJtLHBwYy1pbnRlcnJ1cHQtZ3NlcnZlciNzIiBwcm9wZXJ0eS4gR2V0IHRoZSBsYXN0CisJICogZW50cnkgZm9tIHRoaXMgcHJvcGVydHkgZm9yIGN1cnJlbnQgYm9vdCBjcHUgaWQgYW5kIHVzZSBpdCBhcworCSAqIGRlZmF1bHQgZGlzdHJpYnV0aW9uIHNlcnZlcgorCSAqLworCWZvciAoaiA9IDA7IGogPCBpOyBqICs9IDIpIHsKKwkJaWYgKGlyZWdbal0gPT0gaGNwdWlkKSB7CisJCQlkZWZhdWx0X3NlcnZlciA9IGhjcHVpZDsKKwkJCWRlZmF1bHRfZGlzdHJpYl9zZXJ2ZXIgPSBpcmVnW2orMV07CisJCX0KKwl9CisKKwkvKiBnZXQgdGhlIGJpdCBzaXplIG9mIHNlcnZlciBudW1iZXJzICovCisJaXNpemUgPSBvZl9nZXRfcHJvcGVydHkobnAsICJpYm0saW50ZXJydXB0LXNlcnZlciMtc2l6ZSIsIE5VTEwpOworCWlmIChpc2l6ZSkKKwkJaW50ZXJydXB0X3NlcnZlcl9zaXplID0gKmlzaXplOworCisJb2Zfbm9kZV9wdXQobnApOworfQorCiBzdGF0aWMgdm9pZCBfX2luaXQgeGljc19tYXBfb25lX2NwdShpbnQgaHdfaWQsIHVuc2lnbmVkIGxvbmcgYWRkciwKIAkJCQkgICAgIHVuc2lnbmVkIGxvbmcgc2l6ZSkKIHsKLSNpZmRlZiBDT05GSUdfU01QCiAJaW50IGk7CiAKIAkvKiBUaGlzIG1heSBsb29rIGdyb3NzIGJ1dCBpdCdzIGdvb2QgZW5vdWdoIGZvciBub3csIHdlIGRvbid0IHF1aXRlCkBAIC01ODYsMTEgKzYzMSw2IEBACiAJCQlyZXR1cm47CiAJCX0KIAl9Ci0jZWxzZQotCWlmIChod19pZCAhPSAwKQotCQlyZXR1cm47Ci0JeGljc19wZXJfY3B1WzBdID0gaW9yZW1hcChhZGRyLCBzaXplKTsKLSNlbmRpZiAvKiBDT05GSUdfU01QICovCiB9CiAKIHN0YXRpYyB2b2lkIF9faW5pdCB4aWNzX2luaXRfb25lX25vZGUoc3RydWN0IGRldmljZV9ub2RlICpucCwKQEAgLTY1MiwxNSArNjkyLDE3IEBACiAKIAlmb3JfZWFjaF9ub2RlX2J5X3R5cGUobnAsICJQb3dlclBDLUV4dGVybmFsLUludGVycnVwdC1QcmVzZW50YXRpb24iKSB7CiAJCWZvdW5kID0gMTsKLQkJaWYgKGZpcm13YXJlX2hhc19mZWF0dXJlKEZXX0ZFQVRVUkVfTFBBUikpCisJCWlmIChmaXJtd2FyZV9oYXNfZmVhdHVyZShGV19GRUFUVVJFX0xQQVIpKSB7CisJCQlvZl9ub2RlX3B1dChucCk7CiAJCQlicmVhazsKKwkJCX0KIAkJeGljc19pbml0X29uZV9ub2RlKG5wLCAmaW5keCk7CiAJfQogCWlmIChmb3VuZCA9PSAwKQogCQlyZXR1cm47CiAKLQl4aWNzX2luaXRfaG9zdCgpOwogCXhpY3NfdXBkYXRlX2lycV9zZXJ2ZXJzKCk7CisJeGljc19pbml0X2hvc3QoKTsKIAogCWlmIChmaXJtd2FyZV9oYXNfZmVhdHVyZShGV19GRUFUVVJFX0xQQVIpKQogCQlwcGNfbWQuZ2V0X2lycSA9IHhpY3NfZ2V0X2lycV9scGFyOwpAQCAtNjcyLDMwICs3MTQsMzEgQEAKIAlwcGM2NF9ib290X21zZygweDIxLCAiWElDUyBEb25lIik7CiB9CiAKKy8qIENwdSBzdGFydHVwLCBzaHV0ZG93biwgYW5kIGhvdHBsdWcgKi8KIAotI2lmZGVmIENPTkZJR19TTVAKLXZvaWQgeGljc19yZXF1ZXN0X0lQSXModm9pZCkKK3N0YXRpYyB2b2lkIHhpY3Nfc2V0X2NwdV9wcmlvcml0eSh1bnNpZ25lZCBjaGFyIGNwcHIpCiB7Ci0JdW5zaWduZWQgaW50IGlwaTsKLQlpbnQgcmM7Ci0KLQlpcGkgPSBpcnFfY3JlYXRlX21hcHBpbmcoeGljc19ob3N0LCBYSUNTX0lQSSk7Ci0JQlVHX09OKGlwaSA9PSBOT19JUlEpOwotCi0JLyoKLQkgKiBJUElzIGFyZSBtYXJrZWQgSVJRRl9ESVNBQkxFRCBhcyB0aGV5IG11c3QgcnVuIHdpdGggaXJxcwotCSAqIGRpc2FibGVkCi0JICovCi0Jc2V0X2lycV9oYW5kbGVyKGlwaSwgaGFuZGxlX3BlcmNwdV9pcnEpOwogCWlmIChmaXJtd2FyZV9oYXNfZmVhdHVyZShGV19GRUFUVVJFX0xQQVIpKQotCQlyYyA9IHJlcXVlc3RfaXJxKGlwaSwgeGljc19pcGlfYWN0aW9uX2xwYXIsIElSUUZfRElTQUJMRUQsCi0JCQkJIklQSSIsIE5VTEwpOworCQlscGFyX2NwcHJfaW5mbyhjcHByKTsKIAllbHNlCi0JCXJjID0gcmVxdWVzdF9pcnEoaXBpLCB4aWNzX2lwaV9hY3Rpb25fZGlyZWN0LCBJUlFGX0RJU0FCTEVELAotCQkJCSJJUEkiLCBOVUxMKTsKLQlCVUdfT04ocmMpOworCQlkaXJlY3RfY3Bwcl9pbmZvKGNwcHIpOworCWlvc3luYygpOwogfQotI2VuZGlmIC8qIENPTkZJR19TTVAgKi8KKworLyogSGF2ZSB0aGUgY2FsbGluZyBwcm9jZXNzb3Igam9pbiBvciBsZWF2ZSB0aGUgc3BlY2lmaWVkIGdsb2JhbCBxdWV1ZSAqLworc3RhdGljIHZvaWQgeGljc19zZXRfY3B1X2dpcSh1bnNpZ25lZCBpbnQgZ3NlcnZlciwgdW5zaWduZWQgaW50IGpvaW4pCit7CisJaW50IHN0YXR1cyA9IHJ0YXNfc2V0X2luZGljYXRvcl9mYXN0KEdMT0JBTF9JTlRFUlJVUFRfUVVFVUUsCisJCSgxVUwgPDwgaW50ZXJydXB0X3NlcnZlcl9zaXplKSAtIDEgLSBnc2VydmVyLCBqb2luKTsKKwlXQVJOX09OKHN0YXR1cyA8IDApOworfQorCit2b2lkIHhpY3Nfc2V0dXBfY3B1KHZvaWQpCit7CisJeGljc19zZXRfY3B1X3ByaW9yaXR5KDB4ZmYpOworCisJeGljc19zZXRfY3B1X2dpcShkZWZhdWx0X2Rpc3RyaWJfc2VydmVyLCAxKTsKK30KIAogdm9pZCB4aWNzX3RlYXJkb3duX2NwdSh2b2lkKQogewpAQCAtNzAzLDkgKzc0Niw3IEBACiAKIAl4aWNzX3NldF9jcHVfcHJpb3JpdHkoMCk7CiAKLQkvKgotCSAqIENsZWFyIElQSQotCSAqLworCS8qIENsZWFyIGFueSBwZW5kaW5nIElQSSByZXF1ZXN0ICovCiAJaWYgKGZpcm13YXJlX2hhc19mZWF0dXJlKEZXX0ZFQVRVUkVfTFBBUikpCiAJCWxwYXJfcWlycl9pbmZvKGNwdSwgMHhmZik7CiAJZWxzZQpAQCAtNzE0LDM0ICs3NTUsMjggQEAKIAogdm9pZCB4aWNzX2tleGVjX3RlYXJkb3duX2NwdShpbnQgc2Vjb25kYXJ5KQogewotCXVuc2lnbmVkIGludCBpcGk7Ci0Jc3RydWN0IGlycV9kZXNjICpkZXNjOwotCiAJeGljc190ZWFyZG93bl9jcHUoKTsKIAogCS8qCi0JICogd2UgbmVlZCB0byBFT0kgdGhlIElQSQorCSAqIHdlIHRha2UgdGhlIGlwaSBpcnEgYnV0IGFuZCBuZXZlciByZXR1cm4gc28gd2UKKwkgKiBuZWVkIHRvIEVPSSB0aGUgSVBJLCBidXQgd2FudCB0byBsZWF2ZSBvdXIgcHJpb3JpdHkgMAogCSAqCi0JICogcHJvYmFibHkgbmVlZCB0byBjaGVjayBhbGwgdGhlIG90aGVyIGludGVycnVwdHMgdG9vCisJICogc2hvdWxkIHdlIGNoZWNrIGFsbCB0aGUgb3RoZXIgaW50ZXJydXB0cyB0b28/CiAJICogc2hvdWxkIHdlIGJlIGZsYWdnaW5nIGlkbGUgbG9vcCBpbnN0ZWFkPwogCSAqIG9yIGNyZWF0aW5nIHNvbWUgdGFzayB0byBiZSBzY2hlZHVsZWQ/CiAJICovCiAKLQlpcGkgPSBpcnFfZmluZF9tYXBwaW5nKHhpY3NfaG9zdCwgWElDU19JUEkpOwotCWlmIChpcGkgPT0gWElDU19JUlFfU1BVUklPVVMpCi0JCXJldHVybjsKLQlkZXNjID0gZ2V0X2lycV9kZXNjKGlwaSk7Ci0JaWYgKGRlc2MtPmNoaXAgJiYgZGVzYy0+Y2hpcC0+ZW9pKQotCQlkZXNjLT5jaGlwLT5lb2koaXBpKTsKKwlpZiAoZmlybXdhcmVfaGFzX2ZlYXR1cmUoRldfRkVBVFVSRV9MUEFSKSkKKwkJbHBhcl94aXJyX2luZm9fc2V0KCgweDAwIDw8IDI0KSB8IFhJQ1NfSVBJKTsKKwllbHNlCisJCWRpcmVjdF94aXJyX2luZm9fc2V0KCgweDAwIDw8IDI0KSB8IFhJQ1NfSVBJKTsKIAogCS8qCiAJICogU29tZSBtYWNoaW5lcyBuZWVkIHRvIGhhdmUgYXQgbGVhc3Qgb25lIGNwdSBpbiB0aGUgR0lRLAogCSAqIHNvIGxlYXZlIHRoZSBtYXN0ZXIgY3B1IGluIHRoZSBncm91cC4KIAkgKi8KIAlpZiAoc2Vjb25kYXJ5KQotCQlydGFzX3NldF9pbmRpY2F0b3JfZmFzdChHTE9CQUxfSU5URVJSVVBUX1FVRVVFLAotCQkJCSAgICgxVUwgPDwgaW50ZXJydXB0X3NlcnZlcl9zaXplKSAtIDEgLQotCQkJCSAgIGRlZmF1bHRfZGlzdHJpYl9zZXJ2ZXIsIDApOworCQl4aWNzX3NldF9jcHVfZ2lxKGRlZmF1bHRfZGlzdHJpYl9zZXJ2ZXIsIDApOwogfQogCiAjaWZkZWYgQ09ORklHX0hPVFBMVUdfQ1BVCkBAIC03NDksMTcgKzc4NCwxOCBAQAogLyogSW50ZXJydXB0cyBhcmUgZGlzYWJsZWQuICovCiB2b2lkIHhpY3NfbWlncmF0ZV9pcnFzX2F3YXkodm9pZCkKIHsKLQlpbnQgc3RhdHVzOwogCWludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCksIGh3X2NwdSA9IGhhcmRfc21wX3Byb2Nlc3Nvcl9pZCgpOwogCXVuc2lnbmVkIGludCBpcnEsIHZpcnE7CiAKKwkvKiBJZiB3ZSB1c2VkIHRvIGJlIHRoZSBkZWZhdWx0IHNlcnZlciwgbW92ZSB0byB0aGUgbmV3ICJib290X2NwdWlkIiAqLworCWlmIChod19jcHUgPT0gZGVmYXVsdF9zZXJ2ZXIpCisJCXhpY3NfdXBkYXRlX2lycV9zZXJ2ZXJzKCk7CisKIAkvKiBSZWplY3QgYW55IGludGVycnVwdCB0aGF0IHdhcyBxdWV1ZWQgdG8gdXMuLi4gKi8KIAl4aWNzX3NldF9jcHVfcHJpb3JpdHkoMCk7CiAKLQkvKiByZW1vdmUgb3Vyc2VsdmVzIGZyb20gdGhlIGdsb2JhbCBpbnRlcnJ1cHQgcXVldWUgKi8KLQlzdGF0dXMgPSBydGFzX3NldF9pbmRpY2F0b3JfZmFzdChHTE9CQUxfSU5URVJSVVBUX1FVRVVFLAotCQkoMVVMIDw8IGludGVycnVwdF9zZXJ2ZXJfc2l6ZSkgLSAxIC0gZGVmYXVsdF9kaXN0cmliX3NlcnZlciwgMCk7Ci0JV0FSTl9PTihzdGF0dXMgPCAwKTsKKwkvKiBSZW1vdmUgb3Vyc2VsdmVzIGZyb20gdGhlIGdsb2JhbCBpbnRlcnJ1cHQgcXVldWUgKi8KKwl4aWNzX3NldF9jcHVfZ2lxKGRlZmF1bHRfZGlzdHJpYl9zZXJ2ZXIsIDApOwogCiAJLyogQWxsb3cgSVBJcyBhZ2Fpbi4uLiAqLwogCXhpY3Nfc2V0X2NwdV9wcmlvcml0eShERUZBVUxUX1BSSU9SSVRZKTsKQEAgLTc2Nyw2ICs4MDMsNyBAQAogCWZvcl9lYWNoX2lycSh2aXJxKSB7CiAJCXN0cnVjdCBpcnFfZGVzYyAqZGVzYzsKIAkJaW50IHhpY3Nfc3RhdHVzWzJdOworCQlpbnQgc3RhdHVzOwogCQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJCS8qIFdlIGNhbnQgc2V0IGFmZmluaXR5IG9uIElTQSBpbnRlcnJ1cHRzICovCkBAIC03OTAsOSArODI3LDggQEAKIAogCQlzdGF0dXMgPSBydGFzX2NhbGwoaWJtX2dldF94aXZlLCAxLCAzLCB4aWNzX3N0YXR1cywgaXJxKTsKIAkJaWYgKHN0YXR1cykgewotCQkJcHJpbnRrKEtFUk5fRVJSICJtaWdyYXRlX2lycXNfYXdheTogaXJxPSV1ICIKLQkJCQkJImlibSxnZXQteGl2ZSByZXR1cm5zICVkXG4iLAotCQkJCQl2aXJxLCBzdGF0dXMpOworCQkJcHJpbnRrKEtFUk5fRVJSICIlczogaWJtLGdldC14aXZlIGlycT0ldSByZXR1cm5zICVkXG4iLAorCQkJCQlfX2Z1bmNfXywgaXJxLCBzdGF0dXMpOwogCQkJZ290byB1bmxvY2s7CiAJCX0KIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3hpY3MuaCBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy94aWNzLmgKaW5kZXggMWM1MzIxYS4uZDFkNWE4MyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3hpY3MuaAorKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMveGljcy5oCkBAIC0xMiwyMCArMTIsMTIgQEAKICNpZm5kZWYgX1BPV0VSUENfS0VSTkVMX1hJQ1NfSAogI2RlZmluZSBfUE9XRVJQQ19LRVJORUxfWElDU19ICiAKLSNpbmNsdWRlIDxsaW51eC9jYWNoZS5oPgotCiBleHRlcm4gdm9pZCB4aWNzX2luaXRfSVJRKHZvaWQpOwogZXh0ZXJuIHZvaWQgeGljc19zZXR1cF9jcHUodm9pZCk7CiBleHRlcm4gdm9pZCB4aWNzX3RlYXJkb3duX2NwdSh2b2lkKTsKIGV4dGVybiB2b2lkIHhpY3Nfa2V4ZWNfdGVhcmRvd25fY3B1KGludCBzZWNvbmRhcnkpOwotZXh0ZXJuIHZvaWQgeGljc19jYXVzZV9JUEkoaW50IGNwdSk7Ci1leHRlcm4gIHZvaWQgeGljc19yZXF1ZXN0X0lQSXModm9pZCk7CiBleHRlcm4gdm9pZCB4aWNzX21pZ3JhdGVfaXJxc19hd2F5KHZvaWQpOwotCi1zdHJ1Y3QgeGljc19pcGlfc3RydWN0IHsKLQl2b2xhdGlsZSB1bnNpZ25lZCBsb25nIHZhbHVlOwotfSBfX19fY2FjaGVsaW5lX2FsaWduZWQ7Ci0KLWV4dGVybiBzdHJ1Y3QgeGljc19pcGlfc3RydWN0IHhpY3NfaXBpX21lc3NhZ2VbTlJfQ1BVU10gX19jYWNoZWxpbmVfYWxpZ25lZDsKK2V4dGVybiBpbnQgc21wX3hpY3NfcHJvYmUodm9pZCk7CitleHRlcm4gdm9pZCBzbXBfeGljc19tZXNzYWdlX3Bhc3MoaW50IHRhcmdldCwgaW50IG1zZyk7CiAKICNlbmRpZiAvKiBfUE9XRVJQQ19LRVJORUxfWElDU19IICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvc3lzZGV2L0tjb25maWcgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L0tjb25maWcKaW5kZXggNzJmYjM1Yi4uMzk2NTgyOCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9LY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvS2NvbmZpZwpAQCAtNiwzICs2LDkgQEAKIAlib29sCiAJZGVwZW5kcyBvbiBQQ0kgJiYgNHh4CiAJZGVmYXVsdCBuCisKK2NvbmZpZyBQUENfTVNJX0JJVE1BUAorCWJvb2wKKwlkZXBlbmRzIG9uIFBDSV9NU0kKKwlkZWZhdWx0IHkgaWYgTVBJQworCWRlZmF1bHQgeSBpZiBGU0xfUENJCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvc3lzZGV2L01ha2VmaWxlIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9NYWtlZmlsZQppbmRleCBhOTAwNTRiLi5hNDQ3MDlhIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvc3lzZGV2L01ha2VmaWxlCisrKyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvTWFrZWZpbGUKQEAgLTUsNiArNSw3IEBACiBtcGljLW1zaS1vYmotJChDT05GSUdfUENJX01TSSkJKz0gbXBpY19tc2kubyBtcGljX3UzbXNpLm8gbXBpY19wYXNlbWlfbXNpLm8KIG9iai0kKENPTkZJR19NUElDKQkJKz0gbXBpYy5vICQobXBpYy1tc2ktb2JqLXkpCiBmc2wtbXNpLW9iai0kKENPTkZJR19QQ0lfTVNJKQkrPSBmc2xfbXNpLm8KK29iai0kKENPTkZJR19QUENfTVNJX0JJVE1BUCkJKz0gbXNpX2JpdG1hcC5vCiAKIG9iai0kKENPTkZJR19QUENfTVBDMTA2KQkrPSBncmFja2xlLm8KIG9iai0kKENPTkZJR19QUENfRENSX05BVElWRSkJKz0gZGNyLWxvdy5vCkBAIC0xNSw2ICsxNiw3IEBACiBvYmotJChDT05GSUdfRlNMX1BDSSkJCSs9IGZzbF9wY2kubyAkKGZzbC1tc2ktb2JqLXkpCiBvYmotJChDT05GSUdfRlNMX0xCQykJCSs9IGZzbF9sYmMubwogb2JqLSQoQ09ORklHX0ZTTF9HVE0pCQkrPSBmc2xfZ3RtLm8KK29iai0kKENPTkZJR19NUEM4eHh4X0dQSU8pCSs9IG1wYzh4eHhfZ3Bpby5vCiBvYmotJChDT05GSUdfUkFQSURJTykJCSs9IGZzbF9yaW8ubwogb2JqLSQoQ09ORklHX1RTSTEwOF9CUklER0UpCSs9IHRzaTEwOF9wY2kubyB0c2kxMDhfZGV2Lm8KIG9iai0kKENPTkZJR19RVUlDQ19FTkdJTkUpCSs9IHFlX2xpYi8KQEAgLTM2LDE1ICszOCwxMiBAQAogb2JqLSQoQ09ORklHXzR4eCkJCSs9IHBwYzR4eF9wY2kubwogZW5kaWYKIAotIyBUZW1wb3JhcnkgaGFjayB1bnRpbCB3ZSBoYXZlIG1pZ3JhdGVkIHRvIGFzbS1wb3dlcnBjCi1pZmVxICgkKEFSQ0gpLHBvd2VycGMpCiBvYmotJChDT05GSUdfQ1BNKQkJKz0gY3BtX2NvbW1vbi5vCiBvYmotJChDT05GSUdfQ1BNMikJCSs9IGNwbTIubyBjcG0yX3BpYy5vCiBvYmotJChDT05GSUdfUVVJQ0NfRU5HSU5FKQkrPSBjcG1fY29tbW9uLm8KIG9iai0kKENPTkZJR19QUENfRENSKQkJKz0gZGNyLm8KIG9iai0kKENPTkZJR184eHgpCQkrPSBtcGM4eHhfcGljLm8gY3BtMS5vCiBvYmotJChDT05GSUdfVUNPREVfUEFUQ0gpCSs9IG1pY3JvcGF0Y2gubwotZW5kaWYKIAogaWZlcSAoJChDT05GSUdfU1VTUEVORCkseSkKIG9iai0kKENPTkZJR182eHgpCQkrPSA2eHgtc3VzcGVuZC5vCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvc3lzZGV2L2NwbTEuYyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvY3BtMS5jCmluZGV4IDRhMDQ4MjMuLjQ5MDQ3M2MgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvY3BtMS5jCisrKyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvY3BtMS5jCkBAIC01NDYsMzcgKzU0Niw0OCBAQAogCXJldHVybiAhIShpbl9iZTE2KCZpb3AtPmRhdCkgJiBwaW5fbWFzayk7CiB9CiAKK3N0YXRpYyB2b2lkIF9fY3BtMV9ncGlvMTZfc2V0KHN0cnVjdCBvZl9tbV9ncGlvX2NoaXAgKm1tX2djLCB1MTYgcGluX21hc2ssCisJaW50IHZhbHVlKQoreworCXN0cnVjdCBjcG0xX2dwaW8xNl9jaGlwICpjcG0xX2djID0gdG9fY3BtMV9ncGlvMTZfY2hpcChtbV9nYyk7CisJc3RydWN0IGNwbV9pb3BvcnQxNiBfX2lvbWVtICppb3AgPSBtbV9nYy0+cmVnczsKKworCWlmICh2YWx1ZSkKKwkJY3BtMV9nYy0+Y3BkYXRhIHw9IHBpbl9tYXNrOworCWVsc2UKKwkJY3BtMV9nYy0+Y3BkYXRhICY9IH5waW5fbWFzazsKKworCW91dF9iZTE2KCZpb3AtPmRhdCwgY3BtMV9nYy0+Y3BkYXRhKTsKK30KKwogc3RhdGljIHZvaWQgY3BtMV9ncGlvMTZfc2V0KHN0cnVjdCBncGlvX2NoaXAgKmdjLCB1bnNpZ25lZCBpbnQgZ3BpbywgaW50IHZhbHVlKQogewogCXN0cnVjdCBvZl9tbV9ncGlvX2NoaXAgKm1tX2djID0gdG9fb2ZfbW1fZ3Bpb19jaGlwKGdjKTsKIAlzdHJ1Y3QgY3BtMV9ncGlvMTZfY2hpcCAqY3BtMV9nYyA9IHRvX2NwbTFfZ3BpbzE2X2NoaXAobW1fZ2MpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdTE2IHBpbl9tYXNrID0gMSA8PCAoMTUgLSBncGlvKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZjcG0xX2djLT5sb2NrLCBmbGFncyk7CisKKwlfX2NwbTFfZ3BpbzE2X3NldChtbV9nYywgcGluX21hc2ssIHZhbHVlKTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNwbTFfZ2MtPmxvY2ssIGZsYWdzKTsKK30KKworc3RhdGljIGludCBjcG0xX2dwaW8xNl9kaXJfb3V0KHN0cnVjdCBncGlvX2NoaXAgKmdjLCB1bnNpZ25lZCBpbnQgZ3BpbywgaW50IHZhbCkKK3sKKwlzdHJ1Y3Qgb2ZfbW1fZ3Bpb19jaGlwICptbV9nYyA9IHRvX29mX21tX2dwaW9fY2hpcChnYyk7CisJc3RydWN0IGNwbTFfZ3BpbzE2X2NoaXAgKmNwbTFfZ2MgPSB0b19jcG0xX2dwaW8xNl9jaGlwKG1tX2djKTsKIAlzdHJ1Y3QgY3BtX2lvcG9ydDE2IF9faW9tZW0gKmlvcCA9IG1tX2djLT5yZWdzOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdTE2IHBpbl9tYXNrID0gMSA8PCAoMTUgLSBncGlvKTsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZjcG0xX2djLT5sb2NrLCBmbGFncyk7CiAKLQlpZiAodmFsdWUpCi0JCWNwbTFfZ2MtPmNwZGF0YSB8PSBwaW5fbWFzazsKLQllbHNlCi0JCWNwbTFfZ2MtPmNwZGF0YSAmPSB+cGluX21hc2s7Ci0KLQlvdXRfYmUxNigmaW9wLT5kYXQsIGNwbTFfZ2MtPmNwZGF0YSk7CisJc2V0Yml0czE2KCZpb3AtPmRpciwgcGluX21hc2spOworCV9fY3BtMV9ncGlvMTZfc2V0KG1tX2djLCBwaW5fbWFzaywgdmFsKTsKIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNwbTFfZ2MtPmxvY2ssIGZsYWdzKTsKLX0KLQotc3RhdGljIGludCBjcG0xX2dwaW8xNl9kaXJfb3V0KHN0cnVjdCBncGlvX2NoaXAgKmdjLCB1bnNpZ25lZCBpbnQgZ3BpbywgaW50IHZhbCkKLXsKLQlzdHJ1Y3Qgb2ZfbW1fZ3Bpb19jaGlwICptbV9nYyA9IHRvX29mX21tX2dwaW9fY2hpcChnYyk7Ci0Jc3RydWN0IGNwbV9pb3BvcnQxNiBfX2lvbWVtICppb3AgPSBtbV9nYy0+cmVnczsKLQl1MTYgcGluX21hc2s7Ci0KLQlwaW5fbWFzayA9IDEgPDwgKDE1IC0gZ3Bpbyk7Ci0KLQlzZXRiaXRzMTYoJmlvcC0+ZGlyLCBwaW5fbWFzayk7Ci0KLQljcG0xX2dwaW8xNl9zZXQoZ2MsIGdwaW8sIHZhbCk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTU4NCwxMyArNTk1LDE3IEBACiBzdGF0aWMgaW50IGNwbTFfZ3BpbzE2X2Rpcl9pbihzdHJ1Y3QgZ3Bpb19jaGlwICpnYywgdW5zaWduZWQgaW50IGdwaW8pCiB7CiAJc3RydWN0IG9mX21tX2dwaW9fY2hpcCAqbW1fZ2MgPSB0b19vZl9tbV9ncGlvX2NoaXAoZ2MpOworCXN0cnVjdCBjcG0xX2dwaW8xNl9jaGlwICpjcG0xX2djID0gdG9fY3BtMV9ncGlvMTZfY2hpcChtbV9nYyk7CiAJc3RydWN0IGNwbV9pb3BvcnQxNiBfX2lvbWVtICppb3AgPSBtbV9nYy0+cmVnczsKLQl1MTYgcGluX21hc2s7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1MTYgcGluX21hc2sgPSAxIDw8ICgxNSAtIGdwaW8pOwogCi0JcGluX21hc2sgPSAxIDw8ICgxNSAtIGdwaW8pOworCXNwaW5fbG9ja19pcnFzYXZlKCZjcG0xX2djLT5sb2NrLCBmbGFncyk7CiAKIAljbHJiaXRzMTYoJmlvcC0+ZGlyLCBwaW5fbWFzayk7CiAKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjcG0xX2djLT5sb2NrLCBmbGFncyk7CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtNjU1LDM3ICs2NzAsNDggQEAKIAlyZXR1cm4gISEoaW5fYmUzMigmaW9wLT5kYXQpICYgcGluX21hc2spOwogfQogCitzdGF0aWMgdm9pZCBfX2NwbTFfZ3BpbzMyX3NldChzdHJ1Y3Qgb2ZfbW1fZ3Bpb19jaGlwICptbV9nYywgdTMyIHBpbl9tYXNrLAorCWludCB2YWx1ZSkKK3sKKwlzdHJ1Y3QgY3BtMV9ncGlvMzJfY2hpcCAqY3BtMV9nYyA9IHRvX2NwbTFfZ3BpbzMyX2NoaXAobW1fZ2MpOworCXN0cnVjdCBjcG1faW9wb3J0MzJiIF9faW9tZW0gKmlvcCA9IG1tX2djLT5yZWdzOworCisJaWYgKHZhbHVlKQorCQljcG0xX2djLT5jcGRhdGEgfD0gcGluX21hc2s7CisJZWxzZQorCQljcG0xX2djLT5jcGRhdGEgJj0gfnBpbl9tYXNrOworCisJb3V0X2JlMzIoJmlvcC0+ZGF0LCBjcG0xX2djLT5jcGRhdGEpOworfQorCiBzdGF0aWMgdm9pZCBjcG0xX2dwaW8zMl9zZXQoc3RydWN0IGdwaW9fY2hpcCAqZ2MsIHVuc2lnbmVkIGludCBncGlvLCBpbnQgdmFsdWUpCiB7CiAJc3RydWN0IG9mX21tX2dwaW9fY2hpcCAqbW1fZ2MgPSB0b19vZl9tbV9ncGlvX2NoaXAoZ2MpOwogCXN0cnVjdCBjcG0xX2dwaW8zMl9jaGlwICpjcG0xX2djID0gdG9fY3BtMV9ncGlvMzJfY2hpcChtbV9nYyk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1MzIgcGluX21hc2sgPSAxIDw8ICgzMSAtIGdwaW8pOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmNwbTFfZ2MtPmxvY2ssIGZsYWdzKTsKKworCV9fY3BtMV9ncGlvMzJfc2V0KG1tX2djLCBwaW5fbWFzaywgdmFsdWUpOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY3BtMV9nYy0+bG9jaywgZmxhZ3MpOworfQorCitzdGF0aWMgaW50IGNwbTFfZ3BpbzMyX2Rpcl9vdXQoc3RydWN0IGdwaW9fY2hpcCAqZ2MsIHVuc2lnbmVkIGludCBncGlvLCBpbnQgdmFsKQoreworCXN0cnVjdCBvZl9tbV9ncGlvX2NoaXAgKm1tX2djID0gdG9fb2ZfbW1fZ3Bpb19jaGlwKGdjKTsKKwlzdHJ1Y3QgY3BtMV9ncGlvMzJfY2hpcCAqY3BtMV9nYyA9IHRvX2NwbTFfZ3BpbzMyX2NoaXAobW1fZ2MpOwogCXN0cnVjdCBjcG1faW9wb3J0MzJiIF9faW9tZW0gKmlvcCA9IG1tX2djLT5yZWdzOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdTMyIHBpbl9tYXNrID0gMSA8PCAoMzEgLSBncGlvKTsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZjcG0xX2djLT5sb2NrLCBmbGFncyk7CiAKLQlpZiAodmFsdWUpCi0JCWNwbTFfZ2MtPmNwZGF0YSB8PSBwaW5fbWFzazsKLQllbHNlCi0JCWNwbTFfZ2MtPmNwZGF0YSAmPSB+cGluX21hc2s7Ci0KLQlvdXRfYmUzMigmaW9wLT5kYXQsIGNwbTFfZ2MtPmNwZGF0YSk7CisJc2V0Yml0czMyKCZpb3AtPmRpciwgcGluX21hc2spOworCV9fY3BtMV9ncGlvMzJfc2V0KG1tX2djLCBwaW5fbWFzaywgdmFsKTsKIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNwbTFfZ2MtPmxvY2ssIGZsYWdzKTsKLX0KLQotc3RhdGljIGludCBjcG0xX2dwaW8zMl9kaXJfb3V0KHN0cnVjdCBncGlvX2NoaXAgKmdjLCB1bnNpZ25lZCBpbnQgZ3BpbywgaW50IHZhbCkKLXsKLQlzdHJ1Y3Qgb2ZfbW1fZ3Bpb19jaGlwICptbV9nYyA9IHRvX29mX21tX2dwaW9fY2hpcChnYyk7Ci0Jc3RydWN0IGNwbV9pb3BvcnQzMmIgX19pb21lbSAqaW9wID0gbW1fZ2MtPnJlZ3M7Ci0JdTMyIHBpbl9tYXNrOwotCi0JcGluX21hc2sgPSAxIDw8ICgzMSAtIGdwaW8pOwotCi0Jc2V0Yml0czMyKCZpb3AtPmRpciwgcGluX21hc2spOwotCi0JY3BtMV9ncGlvMzJfc2V0KGdjLCBncGlvLCB2YWwpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC02OTMsMTMgKzcxOSwxNyBAQAogc3RhdGljIGludCBjcG0xX2dwaW8zMl9kaXJfaW4oc3RydWN0IGdwaW9fY2hpcCAqZ2MsIHVuc2lnbmVkIGludCBncGlvKQogewogCXN0cnVjdCBvZl9tbV9ncGlvX2NoaXAgKm1tX2djID0gdG9fb2ZfbW1fZ3Bpb19jaGlwKGdjKTsKKwlzdHJ1Y3QgY3BtMV9ncGlvMzJfY2hpcCAqY3BtMV9nYyA9IHRvX2NwbTFfZ3BpbzMyX2NoaXAobW1fZ2MpOwogCXN0cnVjdCBjcG1faW9wb3J0MzJiIF9faW9tZW0gKmlvcCA9IG1tX2djLT5yZWdzOwotCXUzMiBwaW5fbWFzazsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXUzMiBwaW5fbWFzayA9IDEgPDwgKDMxIC0gZ3Bpbyk7CiAKLQlwaW5fbWFzayA9IDEgPDwgKDMxIC0gZ3Bpbyk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmNwbTFfZ2MtPmxvY2ssIGZsYWdzKTsKIAogCWNscmJpdHMzMigmaW9wLT5kaXIsIHBpbl9tYXNrKTsKIAorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNwbTFfZ2MtPmxvY2ssIGZsYWdzKTsKKwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvc3lzZGV2L2ZzbF9sYmMuYyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvZnNsX2xiYy5jCmluZGV4IDQyMmM4ZmEuLjA0OTRlZTUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvZnNsX2xiYy5jCisrKyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvZnNsX2xiYy5jCkBAIC0xMSwxNCArMTEsMTkgQEAKICAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAgKi8KIAorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgogI2luY2x1ZGUgPGxpbnV4L29mLmg+CisjaW5jbHVkZSA8YXNtL3Byb20uaD4KICNpbmNsdWRlIDxhc20vZnNsX2xiYy5oPgogCi1zcGlubG9ja190IGZzbF9sYmNfbG9jayA9IF9fU1BJTl9MT0NLX1VOTE9DS0VEKGZzbF9sYmNfbG9jayk7Ci0KLXN0cnVjdCBmc2xfbGJjX3JlZ3MgX19pb21lbSAqZnNsX2xiY19yZWdzOwotRVhQT1JUX1NZTUJPTChmc2xfbGJjX3JlZ3MpOworc3RhdGljIHNwaW5sb2NrX3QgZnNsX2xiY19sb2NrID0gX19TUElOX0xPQ0tfVU5MT0NLRUQoZnNsX2xiY19sb2NrKTsKK3N0YXRpYyBzdHJ1Y3QgZnNsX2xiY19yZWdzIF9faW9tZW0gKmZzbF9sYmNfcmVnczsKIAogc3RhdGljIGNoYXIgX19pbml0ZGF0YSAqY29tcGF0X2xiY1tdID0gewogCSJmc2wscHEyLWxvY2FsYnVzIiwKQEAgLTEyNywzICsxMzIsNDMgQEAKIAlyZXR1cm4gMDsKIH0KIEVYUE9SVF9TWU1CT0woZnNsX3VwbV9maW5kKTsKKworLyoqCisgKiBmc2xfdXBtX3J1bl9wYXR0ZXJuIC0gYWN0dWFsbHkgcnVuIGFuIFVQTSBwYXR0ZXJuCisgKiBAdXBtOglwb2ludGVyIHRvIHRoZSBmc2xfdXBtIHN0cnVjdHVyZSBvYnRhaW5lZCB2aWEgZnNsX3VwbV9maW5kCisgKiBAaW9fYmFzZToJcmVtYXBwZWQgcG9pbnRlciB0byB3aGVyZSBtZW1vcnkgYWNjZXNzIHNob3VsZCBoYXBwZW4KKyAqIEBtYXI6CU1BUiByZWdpc3RlciBjb250ZW50IGR1cmluZyBwYXR0ZXJuIGV4ZWN1dGlvbgorICoKKyAqIFRoaXMgZnVuY3Rpb24gdHJpZ2dlcnMgZHVtbXkgd3JpdGUgdG8gdGhlIG1lbW9yeSBzcGVjaWZpZWQgYnkgdGhlIGlvX2Jhc2UsCisgKiB0aHVzIFVQTSBwYXR0ZXJuIGFjdHVhbGx5IGV4ZWN1dGVkLiBOb3RlIHRoYXQgbWFyIHVzYWdlIGRlcGVuZHMgb24gdGhlCisgKiBwcmUtcHJvZ3JhbW1lZCBBTVggYml0cyBpbiB0aGUgVVBNIFJBTS4KKyAqLworaW50IGZzbF91cG1fcnVuX3BhdHRlcm4oc3RydWN0IGZzbF91cG0gKnVwbSwgdm9pZCBfX2lvbWVtICppb19iYXNlLCB1MzIgbWFyKQoreworCWludCByZXQgPSAwOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZnNsX2xiY19sb2NrLCBmbGFncyk7CisKKwlvdXRfYmUzMigmZnNsX2xiY19yZWdzLT5tYXIsIG1hciA8PCAoMzIgLSB1cG0tPndpZHRoKSk7CisKKwlzd2l0Y2ggKHVwbS0+d2lkdGgpIHsKKwljYXNlIDg6CisJCW91dF84KGlvX2Jhc2UsIDB4MCk7CisJCWJyZWFrOworCWNhc2UgMTY6CisJCW91dF9iZTE2KGlvX2Jhc2UsIDB4MCk7CisJCWJyZWFrOworCWNhc2UgMzI6CisJCW91dF9iZTMyKGlvX2Jhc2UsIDB4MCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldCA9IC1FSU5WQUw7CisJCWJyZWFrOworCX0KKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmZzbF9sYmNfbG9jaywgZmxhZ3MpOworCisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0woZnNsX3VwbV9ydW5fcGF0dGVybik7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvc3lzZGV2L2ZzbF9tc2kuYyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvZnNsX21zaS5jCmluZGV4IDJjNTE4N2MuLmYyNWNlODEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvZnNsX21zaS5jCisrKyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvZnNsX21zaS5jCkBAIC0xNCw3ICsxNCw2IEBACiAgKi8KICNpbmNsdWRlIDxsaW51eC9pcnEuaD4KICNpbmNsdWRlIDxsaW51eC9ib290bWVtLmg+Ci0jaW5jbHVkZSA8bGludXgvYml0bWFwLmg+CiAjaW5jbHVkZSA8bGludXgvbXNpLmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CiAjaW5jbHVkZSA8bGludXgvb2ZfcGxhdGZvcm0uaD4KQEAgLTY3LDk1ICs2NiwyMiBAQAogCS5tYXAgPSBmc2xfbXNpX2hvc3RfbWFwLAogfTsKIAotc3RhdGljIGlycV9od19udW1iZXJfdCBmc2xfbXNpX2FsbG9jX2h3aXJxcyhzdHJ1Y3QgZnNsX21zaSAqbXNpLCBpbnQgbnVtKQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IG9yZGVyID0gZ2V0X2NvdW50X29yZGVyKG51bSk7Ci0JaW50IG9mZnNldDsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZtc2ktPmJpdG1hcF9sb2NrLCBmbGFncyk7Ci0KLQlvZmZzZXQgPSBiaXRtYXBfZmluZF9mcmVlX3JlZ2lvbihtc2ktPmZzbF9tc2lfYml0bWFwLAotCQkJCQlOUl9NU0lfSVJRUywgb3JkZXIpOwotCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbXNpLT5iaXRtYXBfbG9jaywgZmxhZ3MpOwotCi0JcHJfZGVidWcoIiVzOiBhbGxvY2F0ZWQgMHgleCAoMl4lZCkgYXQgb2Zmc2V0IDB4JXhcbiIsCi0JCV9fZnVuY19fLCBudW0sIG9yZGVyLCBvZmZzZXQpOwotCi0JcmV0dXJuIG9mZnNldDsKLX0KLQotc3RhdGljIHZvaWQgZnNsX21zaV9mcmVlX2h3aXJxcyhzdHJ1Y3QgZnNsX21zaSAqbXNpLCBpbnQgb2Zmc2V0LCBpbnQgbnVtKQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IG9yZGVyID0gZ2V0X2NvdW50X29yZGVyKG51bSk7Ci0KLQlwcl9kZWJ1ZygiJXM6IGZyZWVpbmcgMHgleCAoMl4lZCkgYXQgb2Zmc2V0IDB4JXhcbiIsCi0JCV9fZnVuY19fLCBudW0sIG9yZGVyLCBvZmZzZXQpOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJm1zaS0+Yml0bWFwX2xvY2ssIGZsYWdzKTsKLQliaXRtYXBfcmVsZWFzZV9yZWdpb24obXNpLT5mc2xfbXNpX2JpdG1hcCwgb2Zmc2V0LCBvcmRlcik7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbXNpLT5iaXRtYXBfbG9jaywgZmxhZ3MpOwotfQotCi1zdGF0aWMgaW50IGZzbF9tc2lfZnJlZV9kdF9od2lycXMoc3RydWN0IGZzbF9tc2kgKm1zaSkKLXsKLQlpbnQgaTsKLQlpbnQgbGVuOwotCWNvbnN0IHUzMiAqcDsKLQotCWJpdG1hcF9hbGxvY2F0ZV9yZWdpb24obXNpLT5mc2xfbXNpX2JpdG1hcCwgMCwKLQkJICAgICAgIGdldF9jb3VudF9vcmRlcihOUl9NU0lfSVJRUykpOwotCi0JcCA9IG9mX2dldF9wcm9wZXJ0eShtc2ktPm9mX25vZGUsICJtc2ktYXZhaWxhYmxlLXJhbmdlcyIsICZsZW4pOwotCi0JaWYgKCFwKSB7Ci0JCS8qIE5vIG1zaS1hdmFpbGFibGUtcmFuZ2VzIHByb3BlcnR5LAotCQkgKiBBbGwgdGhlIDI1NiBNU0kgaW50ZXJydXB0cyBjYW4gYmUgdXNlZAotCQkgKi8KLQkJZnNsX21zaV9mcmVlX2h3aXJxcyhtc2ksIDAsIDB4MTAwKTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JaWYgKChsZW4gJSAoMiAqIHNpemVvZih1MzIpKSkgIT0gMCkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJmc2xfbXNpOiBNYWxmb3JtZWQgbXNpLWF2YWlsYWJsZS1yYW5nZXMgIgotCQkgICAgICAgInByb3BlcnR5IG9uICVzXG4iLCBtc2ktPm9mX25vZGUtPmZ1bGxfbmFtZSk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCS8qIEZvcm1hdCBpczogKDx1MzIgc3RhcnQ+IDx1MzIgY291bnQ+KSsgKi8KLQlsZW4gLz0gMiAqIHNpemVvZih1MzIpOwotCWZvciAoaSA9IDA7IGkgPCBsZW47IGkrKywgcCArPSAyKQotCQlmc2xfbXNpX2ZyZWVfaHdpcnFzKG1zaSwgKnAsICoocCArIDEpKTsKLQotCXJldHVybiAwOwotfQotCiBzdGF0aWMgaW50IGZzbF9tc2lfaW5pdF9hbGxvY2F0b3Ioc3RydWN0IGZzbF9tc2kgKm1zaV9kYXRhKQogewogCWludCByYzsKLQlpbnQgc2l6ZSA9IEJJVFNfVE9fTE9OR1MoTlJfTVNJX0lSUVMpICogc2l6ZW9mKHUzMik7CiAKLQltc2lfZGF0YS0+ZnNsX21zaV9iaXRtYXAgPSBremFsbG9jKHNpemUsIEdGUF9LRVJORUwpOworCXJjID0gbXNpX2JpdG1hcF9hbGxvYygmbXNpX2RhdGEtPmJpdG1hcCwgTlJfTVNJX0lSUVMsCisJCQkgICAgICBtc2lfZGF0YS0+aXJxaG9zdC0+b2Zfbm9kZSk7CisJaWYgKHJjKQorCQlyZXR1cm4gcmM7CiAKLQlpZiAobXNpX2RhdGEtPmZzbF9tc2lfYml0bWFwID09IE5VTEwpIHsKLQkJcHJfZGVidWcoIiVzOiBFTk9NRU0gYWxsb2NhdGluZyBhbGxvY2F0b3IgYml0bWFwIVxuIiwKLQkJCQlfX2Z1bmNfXyk7Ci0JCXJldHVybiAtRU5PTUVNOworCXJjID0gbXNpX2JpdG1hcF9yZXNlcnZlX2R0X2h3aXJxcygmbXNpX2RhdGEtPmJpdG1hcCk7CisJaWYgKHJjIDwgMCkgeworCQltc2lfYml0bWFwX2ZyZWUoJm1zaV9kYXRhLT5iaXRtYXApOworCQlyZXR1cm4gcmM7CiAJfQogCi0JcmMgPSBmc2xfbXNpX2ZyZWVfZHRfaHdpcnFzKG1zaV9kYXRhKTsKLQlpZiAocmMpCi0JCWdvdG8gb3V0X2ZyZWU7Ci0KIAlyZXR1cm4gMDsKLW91dF9mcmVlOgotCWtmcmVlKG1zaV9kYXRhLT5mc2xfbXNpX2JpdG1hcCk7Ci0KLQltc2lfZGF0YS0+ZnNsX21zaV9iaXRtYXAgPSBOVUxMOwotCXJldHVybiByYzsKLQogfQogCiBzdGF0aWMgaW50IGZzbF9tc2lfY2hlY2tfZGV2aWNlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBpbnQgbnZlYywgaW50IHR5cGUpCkBAIC0xNzUsNyArMTAxLDggQEAKIAkJaWYgKGVudHJ5LT5pcnEgPT0gTk9fSVJRKQogCQkJY29udGludWU7CiAJCXNldF9pcnFfbXNpKGVudHJ5LT5pcnEsIE5VTEwpOwotCQlmc2xfbXNpX2ZyZWVfaHdpcnFzKG1zaV9kYXRhLCB2aXJxX3RvX2h3KGVudHJ5LT5pcnEpLCAxKTsKKwkJbXNpX2JpdG1hcF9mcmVlX2h3aXJxcygmbXNpX2RhdGEtPmJpdG1hcCwKKwkJCQkgICAgICAgdmlycV90b19odyhlbnRyeS0+aXJxKSwgMSk7CiAJCWlycV9kaXNwb3NlX21hcHBpbmcoZW50cnktPmlycSk7CiAJfQogCkBAIC0xOTcsMTUgKzEyNCwxNCBAQAogCiBzdGF0aWMgaW50IGZzbF9zZXR1cF9tc2lfaXJxcyhzdHJ1Y3QgcGNpX2RldiAqcGRldiwgaW50IG52ZWMsIGludCB0eXBlKQogewotCWlycV9od19udW1iZXJfdCBod2lycTsKLQlpbnQgcmM7CisJaW50IHJjLCBod2lycTsKIAl1bnNpZ25lZCBpbnQgdmlycTsKIAlzdHJ1Y3QgbXNpX2Rlc2MgKmVudHJ5OwogCXN0cnVjdCBtc2lfbXNnIG1zZzsKIAlzdHJ1Y3QgZnNsX21zaSAqbXNpX2RhdGEgPSBmc2xfbXNpOwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShlbnRyeSwgJnBkZXYtPm1zaV9saXN0LCBsaXN0KSB7Ci0JCWh3aXJxID0gZnNsX21zaV9hbGxvY19od2lycXMobXNpX2RhdGEsIDEpOworCQlod2lycSA9IG1zaV9iaXRtYXBfYWxsb2NfaHdpcnFzKCZtc2lfZGF0YS0+Yml0bWFwLCAxKTsKIAkJaWYgKGh3aXJxIDwgMCkgewogCQkJcmMgPSBod2lycTsKIAkJCXByX2RlYnVnKCIlczogZmFpbCBhbGxvY2F0aW5nIG1zaSBpbnRlcnJ1cHRcbiIsCkBAIC0yMTYsOSArMTQyLDkgQEAKIAkJdmlycSA9IGlycV9jcmVhdGVfbWFwcGluZyhtc2lfZGF0YS0+aXJxaG9zdCwgaHdpcnEpOwogCiAJCWlmICh2aXJxID09IE5PX0lSUSkgewotCQkJcHJfZGVidWcoIiVzOiBmYWlsIG1hcHBpbmcgaHdpcnEgMHglbHhcbiIsCisJCQlwcl9kZWJ1ZygiJXM6IGZhaWwgbWFwcGluZyBod2lycSAweCV4XG4iLAogCQkJCQlfX2Z1bmNfXywgaHdpcnEpOwotCQkJZnNsX21zaV9mcmVlX2h3aXJxcyhtc2lfZGF0YSwgaHdpcnEsIDEpOworCQkJbXNpX2JpdG1hcF9mcmVlX2h3aXJxcygmbXNpX2RhdGEtPmJpdG1hcCwgaHdpcnEsIDEpOwogCQkJcmMgPSAtRU5PU1BDOwogCQkJZ290byBvdXRfZnJlZTsKIAkJfQpAQCAtMzE3LDE0ICsyNDMsMTEgQEAKIAkJZ290byBlcnJvcl9vdXQ7CiAJfQogCi0JbXNpLT5vZl9ub2RlID0gb2Zfbm9kZV9nZXQoZGV2LT5ub2RlKTsKKwltc2ktPmlycWhvc3QgPSBpcnFfYWxsb2NfaG9zdChkZXYtPm5vZGUsIElSUV9IT1NUX01BUF9MSU5FQVIsCisJCQkJICAgICAgTlJfTVNJX0lSUVMsICZmc2xfbXNpX2hvc3Rfb3BzLCAwKTsKIAotCW1zaS0+aXJxaG9zdCA9IGlycV9hbGxvY19ob3N0KG9mX25vZGVfZ2V0KGRldi0+bm9kZSksCi0JCQkJSVJRX0hPU1RfTUFQX0xJTkVBUiwKLQkJCQlOUl9NU0lfSVJRUywgJmZzbF9tc2lfaG9zdF9vcHMsIDApOwogCWlmIChtc2ktPmlycWhvc3QgPT0gTlVMTCkgewogCQlkZXZfZXJyKCZkZXYtPmRldiwgIk5vIG1lbW9yeSBmb3IgTVNJIGlycWhvc3RcbiIpOwotCQlvZl9ub2RlX3B1dChkZXYtPm5vZGUpOwogCQllcnIgPSAtRU5PTUVNOwogCQlnb3RvIGVycm9yX291dDsKIAl9CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvc3lzZGV2L2ZzbF9tc2kuaCBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvZnNsX21zaS5oCmluZGV4IGE2NTM0NjguLjMzMWM3ZTcgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvZnNsX21zaS5oCisrKyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvZnNsX21zaS5oCkBAIC0xMyw2ICsxMyw4IEBACiAjaWZuZGVmIF9QT1dFUlBDX1NZU0RFVl9GU0xfTVNJX0gKICNkZWZpbmUgX1BPV0VSUENfU1lTREVWX0ZTTF9NU0lfSAogCisjaW5jbHVkZSA8YXNtL21zaV9iaXRtYXAuaD4KKwogI2RlZmluZSBOUl9NU0lfUkVHCQk4CiAjZGVmaW5lIElSUVNfUEVSX01TSV9SRUcJMzIKICNkZWZpbmUgTlJfTVNJX0lSUVMJKE5SX01TSV9SRUcgKiBJUlFTX1BFUl9NU0lfUkVHKQpAQCAtMjIsOSArMjQsNiBAQAogI2RlZmluZSBGU0xfUElDX0lQX0lQSUMJMHgwMDAwMDAwMgogCiBzdHJ1Y3QgZnNsX21zaSB7Ci0JLyogRGV2aWNlIG5vZGUgb2YgdGhlIE1TSSBpbnRlcnJ1cHQqLwotCXN0cnVjdCBkZXZpY2Vfbm9kZSAqb2Zfbm9kZTsKLQogCXN0cnVjdCBpcnFfaG9zdCAqaXJxaG9zdDsKIAogCXVuc2lnbmVkIGxvbmcgY2FzY2FkZV9pcnE7CkBAIC0zNCw4ICszMyw3IEBACiAJdm9pZCBfX2lvbWVtICptc2lfcmVnczsKIAl1MzIgZmVhdHVyZTsKIAotCXVuc2lnbmVkIGxvbmcgKmZzbF9tc2lfYml0bWFwOwotCXNwaW5sb2NrX3QgYml0bWFwX2xvY2s7CisJc3RydWN0IG1zaV9iaXRtYXAgYml0bWFwOwogfTsKIAogI2VuZGlmIC8qIF9QT1dFUlBDX1NZU0RFVl9GU0xfTVNJX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvZnNsX3BjaS5jIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9mc2xfcGNpLmMKaW5kZXggNjFlNmQ3Ny4uNWIyNjRlYiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9mc2xfcGNpLmMKKysrIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9mc2xfcGNpLmMKQEAgLTEsNyArMSw3IEBACiAvKgotICogTVBDODV4eC84Nnh4IFBDSS9QQ0lFIHN1cHBvcnQgcm91dGluZy4KKyAqIE1QQzgzeHgvODV4eC84Nnh4IFBDSS9QQ0lFIHN1cHBvcnQgcm91dGluZy4KICAqCi0gKiBDb3B5cmlnaHQgMjAwNyBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jCisgKiBDb3B5cmlnaHQgMjAwNywyMDA4IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMKICAqCiAgKiBJbml0aWFsIGF1dGhvcjogWGlhbmdodWEgWGlhbyA8eC54aWFvQGZyZWVzY2FsZS5jb20+CiAgKiBSZWNvZGU6IFpIQU5HIFdFSSA8d2VpLnpoYW5nQGZyZWVzY2FsZS5jb20+CkBAIC0yNTEsMjAgKzI1MSw0NyBAQAogREVDTEFSRV9QQ0lfRklYVVBfSEVBREVSKDB4MTk1NywgUENJX0RFVklDRV9JRF9NUEM4NjEwLCBxdWlya19mc2xfcGNpZV9oZWFkZXIpOwogI2VuZGlmIC8qIENPTkZJR19QUENfODV4eCB8fCBDT05GSUdfUFBDXzg2eHggKi8KIAotI2lmIGRlZmluZWQoQ09ORklHX1BQQ184M3h4KQorI2lmIGRlZmluZWQoQ09ORklHX1BQQ184M3h4KSB8fCBkZWZpbmVkKENPTkZJR19QUENfTVBDNTEyeCkKIGludCBfX2luaXQgbXBjODN4eF9hZGRfYnJpZGdlKHN0cnVjdCBkZXZpY2Vfbm9kZSAqZGV2KQogewogCWludCBsZW47CiAJc3RydWN0IHBjaV9jb250cm9sbGVyICpob3NlOwotCXN0cnVjdCByZXNvdXJjZSByc3JjOworCXN0cnVjdCByZXNvdXJjZSByc3JjX3JlZzsKKwlzdHJ1Y3QgcmVzb3VyY2UgcnNyY19jZmc7CiAJY29uc3QgaW50ICpidXNfcmFuZ2U7Ci0JaW50IHByaW1hcnkgPSAxLCBoYXNfYWRkcmVzcyA9IDA7Ci0JcGh5c19hZGRyX3QgaW1tciA9IGdldF9pbW1yYmFzZSgpOworCWludCBwcmltYXJ5OwogCiAJcHJfZGVidWcoIkFkZGluZyBQQ0kgaG9zdCBicmlkZ2UgJXNcbiIsIGRldi0+ZnVsbF9uYW1lKTsKIAogCS8qIEZldGNoIGhvc3QgYnJpZGdlIHJlZ2lzdGVycyBhZGRyZXNzICovCi0JaGFzX2FkZHJlc3MgPSAob2ZfYWRkcmVzc190b19yZXNvdXJjZShkZXYsIDAsICZyc3JjKSA9PSAwKTsKKwlpZiAob2ZfYWRkcmVzc190b19yZXNvdXJjZShkZXYsIDAsICZyc3JjX3JlZykpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiQ2FuJ3QgZ2V0IHBjaSByZWdpc3RlciBiYXNlIVxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCW1lbXNldCgmcnNyY19jZmcsIDAsIHNpemVvZihyc3JjX2NmZykpOworCisJaWYgKG9mX2FkZHJlc3NfdG9fcmVzb3VyY2UoZGV2LCAxLCAmcnNyY19jZmcpKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcKKwkJCSJObyBwY2kgY29uZmlnIHJlZ2lzdGVyIGJhc2UgaW4gZGV2IHRyZWUsICIKKwkJCSJ1c2luZyBkZWZhdWx0XG4iKTsKKwkJLyoKKwkJICogTVBDODN4eCBzdXBwb3J0cyB1cCB0byB0d28gaG9zdCBjb250cm9sbGVycworCQkgKiAJb25lIGF0IDB4ODUwMCBoYXMgY29uZmlnIHNwYWNlIHJlZ2lzdGVycyBhdCAweDgzMDAKKwkJICogCW9uZSBhdCAweDg2MDAgaGFzIGNvbmZpZyBzcGFjZSByZWdpc3RlcnMgYXQgMHg4MzgwCisJCSAqLworCQlpZiAoKHJzcmNfcmVnLnN0YXJ0ICYgMHhmZmZmZikgPT0gMHg4NTAwKQorCQkJcnNyY19jZmcuc3RhcnQgPSAocnNyY19yZWcuc3RhcnQgJiAweGZmZjAwMDAwKSArIDB4ODMwMDsKKwkJZWxzZSBpZiAoKHJzcmNfcmVnLnN0YXJ0ICYgMHhmZmZmZikgPT0gMHg4NjAwKQorCQkJcnNyY19jZmcuc3RhcnQgPSAocnNyY19yZWcuc3RhcnQgJiAweGZmZjAwMDAwKSArIDB4ODM4MDsKKwl9CisJLyoKKwkgKiBDb250cm9sbGVyIGF0IG9mZnNldCAweDg1MDAgaXMgcHJpbWFyeQorCSAqLworCWlmICgocnNyY19yZWcuc3RhcnQgJiAweGZmZmZmKSA9PSAweDg1MDApCisJCXByaW1hcnkgPSAxOworCWVsc2UKKwkJcHJpbWFyeSA9IDA7CiAKIAkvKiBHZXQgYnVzIHJhbmdlIGlmIGFueSAqLwogCWJ1c19yYW5nZSA9IG9mX2dldF9wcm9wZXJ0eShkZXYsICJidXMtcmFuZ2UiLCAmbGVuKTsKQEAgLTI4MSwyMiArMzA4LDExIEBACiAJaG9zZS0+Zmlyc3RfYnVzbm8gPSBidXNfcmFuZ2UgPyBidXNfcmFuZ2VbMF0gOiAwOwogCWhvc2UtPmxhc3RfYnVzbm8gPSBidXNfcmFuZ2UgPyBidXNfcmFuZ2VbMV0gOiAweGZmOwogCi0JLyogTVBDODN4eCBzdXBwb3J0cyB1cCB0byB0d28gaG9zdCBjb250cm9sbGVycyBvbmUgYXQgMHg4NTAwIGZyb20gaW1tcmJhcgotCSAqIHRoZSBvdGhlciBhdCAweDg2MDAsIHdlIGNvbnNpZGVyIHRoZSAweDg1MDAgdGhlIHByaW1hcnkgY29udHJvbGxlcgotCSAqLwotCS8qIFBDSSAxICovCi0JaWYgKChyc3JjLnN0YXJ0ICYgMHhmZmZmZikgPT0gMHg4NTAwKSB7Ci0JCXNldHVwX2luZGlyZWN0X3BjaShob3NlLCBpbW1yICsgMHg4MzAwLCBpbW1yICsgMHg4MzA0LCAwKTsKLQl9Ci0JLyogUENJIDIgKi8KLQlpZiAoKHJzcmMuc3RhcnQgJiAweGZmZmZmKSA9PSAweDg2MDApIHsKLQkJc2V0dXBfaW5kaXJlY3RfcGNpKGhvc2UsIGltbXIgKyAweDgzODAsIGltbXIgKyAweDgzODQsIDApOwotCQlwcmltYXJ5ID0gMDsKLQl9CisJc2V0dXBfaW5kaXJlY3RfcGNpKGhvc2UsIHJzcmNfY2ZnLnN0YXJ0LCByc3JjX2NmZy5zdGFydCArIDQsIDApOwogCi0JcHJpbnRrKEtFUk5fSU5GTyAiRm91bmQgTVBDODN4eCBQQ0kgaG9zdCBicmlkZ2UgYXQgMHglMDE2bGx4LiAiCisJcHJpbnRrKEtFUk5fSU5GTyAiRm91bmQgRlNMIFBDSSBob3N0IGJyaWRnZSBhdCAweCUwMTZsbHguICIKIAkgICAgICAgIkZpcm13YXJlIGJ1cyBudW1iZXI6ICVkLT4lZFxuIiwKLQkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylyc3JjLnN0YXJ0LCBob3NlLT5maXJzdF9idXNubywKKwkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylyc3JjX3JlZy5zdGFydCwgaG9zZS0+Zmlyc3RfYnVzbm8sCiAJICAgICAgIGhvc2UtPmxhc3RfYnVzbm8pOwogCiAJcHJfZGVidWcoIiAtPkhvc2UgYXQgMHglcCwgY2ZnX2FkZHI9MHglcCxjZmdfZGF0YT0weCVwXG4iLApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9mc2xfc29jLmMgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L2ZzbF9zb2MuYwppbmRleCAyMTQzODhlLi4wMWI4ODRiIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvc3lzZGV2L2ZzbF9zb2MuYworKysgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L2ZzbF9zb2MuYwpAQCAtNDEyLDUzICs0MTIsNiBAQAogCiBhcmNoX2luaXRjYWxsKGdmYXJfb2ZfaW5pdCk7CiAKLQotI2lmZGVmIENPTkZJR19QUENfODN4eAotc3RhdGljIGludCBfX2luaXQgbXBjODN4eF93ZHRfaW5pdCh2b2lkKQotewotCXN0cnVjdCByZXNvdXJjZSByOwotCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnA7Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2OwotCXUzMiBmcmVxID0gZnNsX2dldF9zeXNfZnJlcSgpOwotCWludCByZXQ7Ci0KLQlucCA9IG9mX2ZpbmRfY29tcGF0aWJsZV9ub2RlKE5VTEwsICJ3YXRjaGRvZyIsICJtcGM4M3h4X3dkdCIpOwotCi0JaWYgKCFucCkgewotCQlyZXQgPSAtRU5PREVWOwotCQlnb3RvIG5vZGV2OwotCX0KLQotCW1lbXNldCgmciwgMCwgc2l6ZW9mKHIpKTsKLQotCXJldCA9IG9mX2FkZHJlc3NfdG9fcmVzb3VyY2UobnAsIDAsICZyKTsKLQlpZiAocmV0KQotCQlnb3RvIGVycjsKLQotCWRldiA9IHBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcl9zaW1wbGUoIm1wYzgzeHhfd2R0IiwgMCwgJnIsIDEpOwotCWlmIChJU19FUlIoZGV2KSkgewotCQlyZXQgPSBQVFJfRVJSKGRldik7Ci0JCWdvdG8gZXJyOwotCX0KLQotCXJldCA9IHBsYXRmb3JtX2RldmljZV9hZGRfZGF0YShkZXYsICZmcmVxLCBzaXplb2YoZnJlcSkpOwotCWlmIChyZXQpCi0JCWdvdG8gdW5yZWc7Ci0KLQlvZl9ub2RlX3B1dChucCk7Ci0JcmV0dXJuIDA7Ci0KLXVucmVnOgotCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKGRldik7Ci1lcnI6Ci0Jb2Zfbm9kZV9wdXQobnApOwotbm9kZXY6Ci0JcmV0dXJuIHJldDsKLX0KLQotYXJjaF9pbml0Y2FsbChtcGM4M3h4X3dkdF9pbml0KTsKLSNlbmRpZgotCiBzdGF0aWMgZW51bSBmc2xfdXNiMl9waHlfbW9kZXMgZGV0ZXJtaW5lX3VzYl9waHkoY29uc3QgY2hhciAqcGh5X3R5cGUpCiB7CiAJaWYgKCFwaHlfdHlwZSkKQEAgLTc2Nyw0MiArNzIwLDYgQEAKICNlbmRpZgogCiAjaWYgZGVmaW5lZChDT05GSUdfRkJfRlNMX0RJVSkgfHwgZGVmaW5lZChDT05GSUdfRkJfRlNMX0RJVV9NT0RVTEUpCi1zdHJ1Y3QgcGxhdGZvcm1fZGl1X2RhdGFfb3BzIGRpdV9vcHMgPSB7Ci0JLmRpdV9zaXplID0gMTI4MCAqIDEwMjQgKiA0LAkvKiBkZWZhdWx0IG9uZSAxMjgweDEwMjQgYnVmZmVyICovCi19Oworc3RydWN0IHBsYXRmb3JtX2RpdV9kYXRhX29wcyBkaXVfb3BzOwogRVhQT1JUX1NZTUJPTChkaXVfb3BzKTsKLQotaW50IF9faW5pdCBwcmVhbGxvY2F0ZV9kaXVfdmlkZW9tZW1vcnkodm9pZCkKLXsKLQlwcl9kZWJ1ZygiZGl1X3NpemU9JWx1XG4iLCBkaXVfb3BzLmRpdV9zaXplKTsKLQotCWRpdV9vcHMuZGl1X21lbSA9IF9fYWxsb2NfYm9vdG1lbShkaXVfb3BzLmRpdV9zaXplLCA4LCAwKTsKLQlpZiAoIWRpdV9vcHMuZGl1X21lbSkgewotCQlwcmludGsoS0VSTl9FUlIgImZzbC1kaXU6IGNhbm5vdCBhbGxvY2F0ZSAlbHUgYnl0ZXNcbiIsCi0JCQlkaXVfb3BzLmRpdV9zaXplKTsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCi0JcHJfZGVidWcoImRpdV9tZW09JXBcbiIsIGRpdV9vcHMuZGl1X21lbSk7Ci0KLQlyaF9pbml0KCZkaXVfb3BzLmRpdV9yaF9pbmZvLCA0MDk2LCBBUlJBWV9TSVpFKGRpdV9vcHMuZGl1X3JoX2Jsb2NrKSwKLQkJZGl1X29wcy5kaXVfcmhfYmxvY2spOwotCXJldHVybiByaF9hdHRhY2hfcmVnaW9uKCZkaXVfb3BzLmRpdV9yaF9pbmZvLAotCQkJCSh1bnNpZ25lZCBsb25nKSBkaXVfb3BzLmRpdV9tZW0sCi0JCQkJZGl1X29wcy5kaXVfc2l6ZSk7Ci19Ci0KLXN0YXRpYyBpbnQgX19pbml0IGVhcmx5X3BhcnNlX2RpdWZiKGNoYXIgKnApCi17Ci0JaWYgKCFwKQotCQlyZXR1cm4gMTsKLQotCWRpdV9vcHMuZGl1X3NpemUgPSBfQUxJR05fVVAobWVtcGFyc2UocCwgJnApLCA4KTsKLQotCXByX2RlYnVnKCJkaXVfc2l6ZT0lbHVcbiIsIGRpdV9vcHMuZGl1X3NpemUpOwotCi0JcmV0dXJuIDA7Ci19Ci1lYXJseV9wYXJhbSgiZGl1ZmIiLCBlYXJseV9wYXJzZV9kaXVmYik7Ci0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9mc2xfc29jLmggYi9hcmNoL3Bvd2VycGMvc3lzZGV2L2ZzbF9zb2MuaAppbmRleCAwMjQyOTk4Li42MGY3ZjIyIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvc3lzZGV2L2ZzbF9zb2MuaAorKysgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L2ZzbF9zb2MuaApAQCAtMjAsMTQgKzIwLDcgQEAKIGV4dGVybiB2b2lkIGZzbF9yc3Rjcl9yZXN0YXJ0KGNoYXIgKmNtZCk7CiAKICNpZiBkZWZpbmVkKENPTkZJR19GQl9GU0xfRElVKSB8fCBkZWZpbmVkKENPTkZJR19GQl9GU0xfRElVX01PRFVMRSkKLSNpbmNsdWRlIDxsaW51eC9ib290bWVtLmg+Ci0jaW5jbHVkZSA8YXNtL3JoZWFwLmg+CiBzdHJ1Y3QgcGxhdGZvcm1fZGl1X2RhdGFfb3BzIHsKLQlyaF9ibG9ja190IGRpdV9yaF9ibG9ja1sxNl07Ci0JcmhfaW5mb190IGRpdV9yaF9pbmZvOwotCXVuc2lnbmVkIGxvbmcgZGl1X3NpemU7Ci0Jdm9pZCAqZGl1X21lbTsKLQogCXVuc2lnbmVkIGludCAoKmdldF9waXhlbF9mb3JtYXQpICh1bnNpZ25lZCBpbnQgYml0c19wZXJfcGl4ZWwsCiAJCWludCBtb25pdG9yX3BvcnQpOwogCXZvaWQgKCpzZXRfZ2FtbWFfdGFibGUpIChpbnQgbW9uaXRvcl9wb3J0LCBjaGFyICpnYW1tYV90YWJsZV9iYXNlKTsKQEAgLTM4LDcgKzMxLDYgQEAKIH07CiAKIGV4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGl1X2RhdGFfb3BzIGRpdV9vcHM7Ci1pbnQgX19pbml0IHByZWFsbG9jYXRlX2RpdV92aWRlb21lbW9yeSh2b2lkKTsKICNlbmRpZgogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvbXBjOHh4eF9ncGlvLmMgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L21wYzh4eHhfZ3Bpby5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEwM2VhY2UKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L21wYzh4eHhfZ3Bpby5jCkBAIC0wLDAgKzEsMTcxIEBACisvKgorICogR1BJT3Mgb24gTVBDODM0OS84NTcyLzg2MTAgYW5kIGNvbXBhdGlibGUKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggUGV0ZXIgS29yc2dhYXJkIDxqYWNtZXRAc3Vuc2l0ZS5kaz4KKyAqCisgKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogdmVyc2lvbiAyLiAgVGhpcyBwcm9ncmFtIGlzIGxpY2Vuc2VkICJhcyBpcyIgd2l0aG91dCBhbnkgd2FycmFudHkgb2YgYW55CisgKiBraW5kLCB3aGV0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9vZi5oPgorI2luY2x1ZGUgPGxpbnV4L29mX2dwaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CisKKyNkZWZpbmUgTVBDOFhYWF9HUElPX1BJTlMJMzIKKworI2RlZmluZSBHUElPX0RJUgkJMHgwMAorI2RlZmluZSBHUElPX09EUgkJMHgwNAorI2RlZmluZSBHUElPX0RBVAkJMHgwOAorI2RlZmluZSBHUElPX0lFUgkJMHgwYworI2RlZmluZSBHUElPX0lNUgkJMHgxMAorI2RlZmluZSBHUElPX0lDUgkJMHgxNAorCitzdHJ1Y3QgbXBjOHh4eF9ncGlvX2NoaXAgeworCXN0cnVjdCBvZl9tbV9ncGlvX2NoaXAgbW1fZ2M7CisJc3BpbmxvY2tfdCBsb2NrOworCisJLyoKKwkgKiBzaGFkb3dlZCBkYXRhIHJlZ2lzdGVyIHRvIGJlIGFibGUgdG8gY2xlYXIvc2V0IG91dHB1dCBwaW5zIGluCisJICogb3BlbiBkcmFpbiBtb2RlIHNhZmVseQorCSAqLworCXUzMiBkYXRhOworfTsKKworc3RhdGljIGlubGluZSB1MzIgbXBjOHh4eF9ncGlvMm1hc2sodW5zaWduZWQgaW50IGdwaW8pCit7CisJcmV0dXJuIDF1IDw8IChNUEM4WFhYX0dQSU9fUElOUyAtIDEgLSBncGlvKTsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgbXBjOHh4eF9ncGlvX2NoaXAgKgordG9fbXBjOHh4eF9ncGlvX2NoaXAoc3RydWN0IG9mX21tX2dwaW9fY2hpcCAqbW0pCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihtbSwgc3RydWN0IG1wYzh4eHhfZ3Bpb19jaGlwLCBtbV9nYyk7Cit9CisKK3N0YXRpYyB2b2lkIG1wYzh4eHhfZ3Bpb19zYXZlX3JlZ3Moc3RydWN0IG9mX21tX2dwaW9fY2hpcCAqbW0pCit7CisJc3RydWN0IG1wYzh4eHhfZ3Bpb19jaGlwICptcGM4eHh4X2djID0gdG9fbXBjOHh4eF9ncGlvX2NoaXAobW0pOworCisJbXBjOHh4eF9nYy0+ZGF0YSA9IGluX2JlMzIobW0tPnJlZ3MgKyBHUElPX0RBVCk7Cit9CisKK3N0YXRpYyBpbnQgbXBjOHh4eF9ncGlvX2dldChzdHJ1Y3QgZ3Bpb19jaGlwICpnYywgdW5zaWduZWQgaW50IGdwaW8pCit7CisJc3RydWN0IG9mX21tX2dwaW9fY2hpcCAqbW0gPSB0b19vZl9tbV9ncGlvX2NoaXAoZ2MpOworCisJcmV0dXJuIGluX2JlMzIobW0tPnJlZ3MgKyBHUElPX0RBVCkgJiBtcGM4eHh4X2dwaW8ybWFzayhncGlvKTsKK30KKworc3RhdGljIHZvaWQgbXBjOHh4eF9ncGlvX3NldChzdHJ1Y3QgZ3Bpb19jaGlwICpnYywgdW5zaWduZWQgaW50IGdwaW8sIGludCB2YWwpCit7CisJc3RydWN0IG9mX21tX2dwaW9fY2hpcCAqbW0gPSB0b19vZl9tbV9ncGlvX2NoaXAoZ2MpOworCXN0cnVjdCBtcGM4eHh4X2dwaW9fY2hpcCAqbXBjOHh4eF9nYyA9IHRvX21wYzh4eHhfZ3Bpb19jaGlwKG1tKTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJm1wYzh4eHhfZ2MtPmxvY2ssIGZsYWdzKTsKKworCWlmICh2YWwpCisJCW1wYzh4eHhfZ2MtPmRhdGEgfD0gbXBjOHh4eF9ncGlvMm1hc2soZ3Bpbyk7CisJZWxzZQorCQltcGM4eHh4X2djLT5kYXRhICY9IH5tcGM4eHh4X2dwaW8ybWFzayhncGlvKTsKKworCW91dF9iZTMyKG1tLT5yZWdzICsgR1BJT19EQVQsIG1wYzh4eHhfZ2MtPmRhdGEpOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbXBjOHh4eF9nYy0+bG9jaywgZmxhZ3MpOworfQorCitzdGF0aWMgaW50IG1wYzh4eHhfZ3Bpb19kaXJfaW4oc3RydWN0IGdwaW9fY2hpcCAqZ2MsIHVuc2lnbmVkIGludCBncGlvKQoreworCXN0cnVjdCBvZl9tbV9ncGlvX2NoaXAgKm1tID0gdG9fb2ZfbW1fZ3Bpb19jaGlwKGdjKTsKKwlzdHJ1Y3QgbXBjOHh4eF9ncGlvX2NoaXAgKm1wYzh4eHhfZ2MgPSB0b19tcGM4eHh4X2dwaW9fY2hpcChtbSk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZtcGM4eHh4X2djLT5sb2NrLCBmbGFncyk7CisKKwljbHJiaXRzMzIobW0tPnJlZ3MgKyBHUElPX0RJUiwgbXBjOHh4eF9ncGlvMm1hc2soZ3BpbykpOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbXBjOHh4eF9nYy0+bG9jaywgZmxhZ3MpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbXBjOHh4eF9ncGlvX2Rpcl9vdXQoc3RydWN0IGdwaW9fY2hpcCAqZ2MsIHVuc2lnbmVkIGludCBncGlvLCBpbnQgdmFsKQoreworCXN0cnVjdCBvZl9tbV9ncGlvX2NoaXAgKm1tID0gdG9fb2ZfbW1fZ3Bpb19jaGlwKGdjKTsKKwlzdHJ1Y3QgbXBjOHh4eF9ncGlvX2NoaXAgKm1wYzh4eHhfZ2MgPSB0b19tcGM4eHh4X2dwaW9fY2hpcChtbSk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCW1wYzh4eHhfZ3Bpb19zZXQoZ2MsIGdwaW8sIHZhbCk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmbXBjOHh4eF9nYy0+bG9jaywgZmxhZ3MpOworCisJc2V0Yml0czMyKG1tLT5yZWdzICsgR1BJT19ESVIsIG1wYzh4eHhfZ3BpbzJtYXNrKGdwaW8pKTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1wYzh4eHhfZ2MtPmxvY2ssIGZsYWdzKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBfX2luaXQgbXBjOHh4eF9hZGRfY29udHJvbGxlcihzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wKQoreworCXN0cnVjdCBtcGM4eHh4X2dwaW9fY2hpcCAqbXBjOHh4eF9nYzsKKwlzdHJ1Y3Qgb2ZfbW1fZ3Bpb19jaGlwICptbV9nYzsKKwlzdHJ1Y3Qgb2ZfZ3Bpb19jaGlwICpvZl9nYzsKKwlzdHJ1Y3QgZ3Bpb19jaGlwICpnYzsKKwlpbnQgcmV0OworCisJbXBjOHh4eF9nYyA9IGt6YWxsb2Moc2l6ZW9mKCptcGM4eHh4X2djKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFtcGM4eHh4X2djKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gZXJyOworCX0KKworCXNwaW5fbG9ja19pbml0KCZtcGM4eHh4X2djLT5sb2NrKTsKKworCW1tX2djID0gJm1wYzh4eHhfZ2MtPm1tX2djOworCW9mX2djID0gJm1tX2djLT5vZl9nYzsKKwlnYyA9ICZvZl9nYy0+Z2M7CisKKwltbV9nYy0+c2F2ZV9yZWdzID0gbXBjOHh4eF9ncGlvX3NhdmVfcmVnczsKKwlvZl9nYy0+Z3Bpb19jZWxscyA9IDI7CisJZ2MtPm5ncGlvID0gTVBDOFhYWF9HUElPX1BJTlM7CisJZ2MtPmRpcmVjdGlvbl9pbnB1dCA9IG1wYzh4eHhfZ3Bpb19kaXJfaW47CisJZ2MtPmRpcmVjdGlvbl9vdXRwdXQgPSBtcGM4eHh4X2dwaW9fZGlyX291dDsKKwlnYy0+Z2V0ID0gbXBjOHh4eF9ncGlvX2dldDsKKwlnYy0+c2V0ID0gbXBjOHh4eF9ncGlvX3NldDsKKworCXJldCA9IG9mX21tX2dwaW9jaGlwX2FkZChucCwgbW1fZ2MpOworCWlmIChyZXQpCisJCWdvdG8gZXJyOworCisJcmV0dXJuOworCitlcnI6CisJcHJfZXJyKCIlczogcmVnaXN0cmF0aW9uIGZhaWxlZCB3aXRoIHN0YXR1cyAlZFxuIiwKKwkgICAgICAgbnAtPmZ1bGxfbmFtZSwgcmV0KTsKKwlrZnJlZShtcGM4eHh4X2djKTsKKworCXJldHVybjsKK30KKworc3RhdGljIGludCBfX2luaXQgbXBjOHh4eF9hZGRfZ3Bpb2NoaXBzKHZvaWQpCit7CisJc3RydWN0IGRldmljZV9ub2RlICpucDsKKworCWZvcl9lYWNoX2NvbXBhdGlibGVfbm9kZShucCwgTlVMTCwgImZzbCxtcGM4MzQ5LWdwaW8iKQorCQltcGM4eHh4X2FkZF9jb250cm9sbGVyKG5wKTsKKworCWZvcl9lYWNoX2NvbXBhdGlibGVfbm9kZShucCwgTlVMTCwgImZzbCxtcGM4NTcyLWdwaW8iKQorCQltcGM4eHh4X2FkZF9jb250cm9sbGVyKG5wKTsKKworCWZvcl9lYWNoX2NvbXBhdGlibGVfbm9kZShucCwgTlVMTCwgImZzbCxtcGM4NjEwLWdwaW8iKQorCQltcGM4eHh4X2FkZF9jb250cm9sbGVyKG5wKTsKKworCXJldHVybiAwOworfQorYXJjaF9pbml0Y2FsbChtcGM4eHh4X2FkZF9ncGlvY2hpcHMpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9tcGljLmggYi9hcmNoL3Bvd2VycGMvc3lzZGV2L21waWMuaAppbmRleCBmYmY4YTI2Li42MjA5YzYyIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvc3lzZGV2L21waWMuaAorKysgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L21waWMuaApAQCAtMTQsOCArMTQsNiBAQAogI2lmZGVmIENPTkZJR19QQ0lfTVNJCiBleHRlcm4gdm9pZCBtcGljX21zaV9yZXNlcnZlX2h3aXJxKHN0cnVjdCBtcGljICptcGljLCBpcnFfaHdfbnVtYmVyX3QgaHdpcnEpOwogZXh0ZXJuIGludCBtcGljX21zaV9pbml0X2FsbG9jYXRvcihzdHJ1Y3QgbXBpYyAqbXBpYyk7Ci1leHRlcm4gaXJxX2h3X251bWJlcl90IG1waWNfbXNpX2FsbG9jX2h3aXJxcyhzdHJ1Y3QgbXBpYyAqbXBpYywgaW50IG51bSk7Ci1leHRlcm4gdm9pZCBtcGljX21zaV9mcmVlX2h3aXJxcyhzdHJ1Y3QgbXBpYyAqbXBpYywgaW50IG9mZnNldCwgaW50IG51bSk7CiBleHRlcm4gaW50IG1waWNfdTNtc2lfaW5pdChzdHJ1Y3QgbXBpYyAqbXBpYyk7CiBleHRlcm4gaW50IG1waWNfcGFzZW1pX21zaV9pbml0KHN0cnVjdCBtcGljICptcGljKTsKICNlbHNlCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvc3lzZGV2L21waWNfbXNpLmMgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L21waWNfbXNpLmMKaW5kZXggZGUzZTVlOC4uMWQ0NGVlZSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9tcGljX21zaS5jCisrKyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvbXBpY19tc2kuYwpAQCAtMTUsNTkgKzE1LDE3IEBACiAjaW5jbHVkZSA8YXNtL3Byb20uaD4KICNpbmNsdWRlIDxhc20vaHdfaXJxLmg+CiAjaW5jbHVkZSA8YXNtL3BwYy1wY2kuaD4KKyNpbmNsdWRlIDxhc20vbXNpX2JpdG1hcC5oPgogCiAjaW5jbHVkZSA8c3lzZGV2L21waWMuaD4KIAotc3RhdGljIHZvaWQgX19tcGljX21zaV9yZXNlcnZlX2h3aXJxKHN0cnVjdCBtcGljICptcGljLCBpcnFfaHdfbnVtYmVyX3QgaHdpcnEpCi17Ci0JcHJfZGVidWcoIm1waWM6IHJlc2VydmluZyBod2lycSAweCVseFxuIiwgaHdpcnEpOwotCWJpdG1hcF9hbGxvY2F0ZV9yZWdpb24obXBpYy0+aHdpcnFfYml0bWFwLCBod2lycSwgMCk7Ci19Ci0KIHZvaWQgbXBpY19tc2lfcmVzZXJ2ZV9od2lycShzdHJ1Y3QgbXBpYyAqbXBpYywgaXJxX2h3X251bWJlcl90IGh3aXJxKQogewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KIAkvKiBUaGUgbXBpYyBjYWxscyB0aGlzIGV2ZW4gd2hlbiB0aGVyZSBpcyBubyBhbGxvY2F0b3Igc2V0dXAgKi8KLQlpZiAoIW1waWMtPmh3aXJxX2JpdG1hcCkKKwlpZiAoIW1waWMtPm1zaV9iaXRtYXAuYml0bWFwKQogCQlyZXR1cm47CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmbXBpYy0+Yml0bWFwX2xvY2ssIGZsYWdzKTsKLQlfX21waWNfbXNpX3Jlc2VydmVfaHdpcnEobXBpYywgaHdpcnEpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1waWMtPmJpdG1hcF9sb2NrLCBmbGFncyk7Ci19Ci0KLWlycV9od19udW1iZXJfdCBtcGljX21zaV9hbGxvY19od2lycXMoc3RydWN0IG1waWMgKm1waWMsIGludCBudW0pCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlpbnQgb2Zmc2V0LCBvcmRlciA9IGdldF9jb3VudF9vcmRlcihudW0pOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJm1waWMtPmJpdG1hcF9sb2NrLCBmbGFncyk7Ci0JLyoKLQkgKiBUaGlzIGlzIGZhc3QsIGJ1dCBzdHJpY3RlciB0aGFuIHdlIG5lZWQuIFdlIG1pZ2h0IHdhbnQgdG8gYWRkCi0JICogYSBmYWxsYmFjayByb3V0aW5lIHdoaWNoIGRvZXMgYSBsaW5lYXIgc2VhcmNoIHdpdGggbm8gYWxpZ25tZW50LgotCSAqLwotCW9mZnNldCA9IGJpdG1hcF9maW5kX2ZyZWVfcmVnaW9uKG1waWMtPmh3aXJxX2JpdG1hcCwgbXBpYy0+aXJxX2NvdW50LAotCQkJCQkgb3JkZXIpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1waWMtPmJpdG1hcF9sb2NrLCBmbGFncyk7Ci0KLQlwcl9kZWJ1ZygibXBpYzogYWxsb2NhdGVkIDB4JXggKDJeJWQpIGF0IG9mZnNldCAweCV4XG4iLAotCQkgbnVtLCBvcmRlciwgb2Zmc2V0KTsKLQotCXJldHVybiBvZmZzZXQ7Ci19Ci0KLXZvaWQgbXBpY19tc2lfZnJlZV9od2lycXMoc3RydWN0IG1waWMgKm1waWMsIGludCBvZmZzZXQsIGludCBudW0pCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlpbnQgb3JkZXIgPSBnZXRfY291bnRfb3JkZXIobnVtKTsKLQotCXByX2RlYnVnKCJtcGljOiBmcmVlaW5nIDB4JXggKDJeJWQpIGF0IG9mZnNldCAweCV4XG4iLAotCQkgbnVtLCBvcmRlciwgb2Zmc2V0KTsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZtcGljLT5iaXRtYXBfbG9jaywgZmxhZ3MpOwotCWJpdG1hcF9yZWxlYXNlX3JlZ2lvbihtcGljLT5od2lycV9iaXRtYXAsIG9mZnNldCwgb3JkZXIpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1waWMtPmJpdG1hcF9sb2NrLCBmbGFncyk7CisJbXNpX2JpdG1hcF9yZXNlcnZlX2h3aXJxKCZtcGljLT5tc2lfYml0bWFwLCBod2lycSk7CiB9CiAKICNpZmRlZiBDT05GSUdfTVBJQ19VM19IVF9JUlFTCkBAIC04MywxMyArNDEsMTMgQEAKIAogCS8qIFJlc2VydmUgc291cmNlIG51bWJlcnMgd2Uga25vdyBhcmUgcmVzZXJ2ZWQgaW4gdGhlIEhXICovCiAJZm9yIChpID0gMDsgICBpIDwgODsgICBpKyspCi0JCV9fbXBpY19tc2lfcmVzZXJ2ZV9od2lycShtcGljLCBpKTsKKwkJbXNpX2JpdG1hcF9yZXNlcnZlX2h3aXJxKCZtcGljLT5tc2lfYml0bWFwLCBpKTsKIAogCWZvciAoaSA9IDQyOyAgaSA8IDQ2OyAgaSsrKQotCQlfX21waWNfbXNpX3Jlc2VydmVfaHdpcnEobXBpYywgaSk7CisJCW1zaV9iaXRtYXBfcmVzZXJ2ZV9od2lycSgmbXBpYy0+bXNpX2JpdG1hcCwgaSk7CiAKIAlmb3IgKGkgPSAxMDA7IGkgPCAxMDU7IGkrKykKLQkJX19tcGljX21zaV9yZXNlcnZlX2h3aXJxKG1waWMsIGkpOworCQltc2lfYml0bWFwX3Jlc2VydmVfaHdpcnEoJm1waWMtPm1zaV9iaXRtYXAsIGkpOwogCiAJbnAgPSBOVUxMOwogCXdoaWxlICgobnAgPSBvZl9maW5kX2FsbF9ub2RlcyhucCkpKSB7CkBAIC05OSw3ICs1Nyw3IEBACiAJCXdoaWxlIChvZl9pcnFfbWFwX29uZShucCwgaW5kZXgrKywgJm9pcnEpID09IDApIHsKIAkJCW9wcy0+eGxhdGUobXBpYy0+aXJxaG9zdCwgTlVMTCwgb2lycS5zcGVjaWZpZXIsCiAJCQkJCQlvaXJxLnNpemUsICZod2lycSwgJmZsYWdzKTsKLQkJCV9fbXBpY19tc2lfcmVzZXJ2ZV9od2lycShtcGljLCBod2lycSk7CisJCQltc2lfYml0bWFwX3Jlc2VydmVfaHdpcnEoJm1waWMtPm1zaV9iaXRtYXAsIGh3aXJxKTsKIAkJfQogCX0KIApAQCAtMTEyLDcwICs3MCwyNSBAQAogfQogI2VuZGlmCiAKLXN0YXRpYyBpbnQgbXBpY19tc2lfcmVzZXJ2ZV9kdF9od2lycXMoc3RydWN0IG1waWMgKm1waWMpCi17Ci0JaW50IGksIGxlbjsKLQljb25zdCB1MzIgKnA7Ci0KLQlwID0gb2ZfZ2V0X3Byb3BlcnR5KG1waWMtPmlycWhvc3QtPm9mX25vZGUsCi0JCQkgICAgIm1zaS1hdmFpbGFibGUtcmFuZ2VzIiwgJmxlbik7Ci0JaWYgKCFwKSB7Ci0JCXByX2RlYnVnKCJtcGljOiBubyBtc2ktYXZhaWxhYmxlLXJhbmdlcyBwcm9wZXJ0eSBmb3VuZCBvbiAlc1xuIiwKLQkJCSAgbXBpYy0+aXJxaG9zdC0+b2Zfbm9kZS0+ZnVsbF9uYW1lKTsKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JfQotCi0JaWYgKGxlbiAlIDggIT0gMCkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJtcGljOiBNYWxmb3JtZWQgbXNpLWF2YWlsYWJsZS1yYW5nZXMgIgotCQkgICAgICAgInByb3BlcnR5IG9uICVzXG4iLCBtcGljLT5pcnFob3N0LT5vZl9ub2RlLT5mdWxsX25hbWUpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQliaXRtYXBfYWxsb2NhdGVfcmVnaW9uKG1waWMtPmh3aXJxX2JpdG1hcCwgMCwKLQkJCSAgICAgICBnZXRfY291bnRfb3JkZXIobXBpYy0+aXJxX2NvdW50KSk7Ci0KLQkvKiBGb3JtYXQgaXM6ICg8dTMyIHN0YXJ0PiA8dTMyIGNvdW50PikrICovCi0JbGVuIC89IHNpemVvZih1MzIpOwotCWZvciAoaSA9IDA7IGkgPCBsZW4gLyAyOyBpKyssIHAgKz0gMikKLQkJbXBpY19tc2lfZnJlZV9od2lycXMobXBpYywgKnAsICoocCArIDEpKTsKLQotCXJldHVybiAwOwotfQotCiBpbnQgbXBpY19tc2lfaW5pdF9hbGxvY2F0b3Ioc3RydWN0IG1waWMgKm1waWMpCiB7Ci0JaW50IHJjLCBzaXplOworCWludCByYzsKIAotCUJVR19PTihtcGljLT5od2lycV9iaXRtYXApOwotCXNwaW5fbG9ja19pbml0KCZtcGljLT5iaXRtYXBfbG9jayk7CisJcmMgPSBtc2lfYml0bWFwX2FsbG9jKCZtcGljLT5tc2lfYml0bWFwLCBtcGljLT5pcnFfY291bnQsCisJCQkgICAgICBtcGljLT5pcnFob3N0LT5vZl9ub2RlKTsKKwlpZiAocmMpCisJCXJldHVybiByYzsKIAotCXNpemUgPSBCSVRTX1RPX0xPTkdTKG1waWMtPmlycV9jb3VudCkgKiBzaXplb2YobG9uZyk7Ci0JcHJfZGVidWcoIm1waWM6IGFsbG9jYXRvciBiaXRtYXAgc2l6ZSBpcyAweCV4IGJ5dGVzXG4iLCBzaXplKTsKLQotCW1waWMtPmh3aXJxX2JpdG1hcCA9IGFsbG9jX21heWJlX2Jvb3RtZW0oc2l6ZSwgR0ZQX0tFUk5FTCk7Ci0KLQlpZiAoIW1waWMtPmh3aXJxX2JpdG1hcCkgewotCQlwcl9kZWJ1ZygibXBpYzogRU5PTUVNIGFsbG9jYXRpbmcgYWxsb2NhdG9yIGJpdG1hcCFcbiIpOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9Ci0KLQltZW1zZXQobXBpYy0+aHdpcnFfYml0bWFwLCAwLCBzaXplKTsKLQotCXJjID0gbXBpY19tc2lfcmVzZXJ2ZV9kdF9od2lycXMobXBpYyk7Ci0JaWYgKHJjKSB7CisJcmMgPSBtc2lfYml0bWFwX3Jlc2VydmVfZHRfaHdpcnFzKCZtcGljLT5tc2lfYml0bWFwKTsKKwlpZiAocmMgPiAwKSB7CiAJCWlmIChtcGljLT5mbGFncyAmIE1QSUNfVTNfSFRfSVJRUykKIAkJCXJjID0gbXBpY19tc2lfcmVzZXJ2ZV91M19od2lycXMobXBpYyk7CiAKLQkJaWYgKHJjKQotCQkJZ290byBvdXRfZnJlZTsKKwkJaWYgKHJjKSB7CisJCQltc2lfYml0bWFwX2ZyZWUoJm1waWMtPm1zaV9iaXRtYXApOworCQkJcmV0dXJuIHJjOworCQl9CiAJfQogCiAJcmV0dXJuIDA7Ci0KLSBvdXRfZnJlZToKLQlpZiAobWVtX2luaXRfZG9uZSkKLQkJa2ZyZWUobXBpYy0+aHdpcnFfYml0bWFwKTsKLQotCW1waWMtPmh3aXJxX2JpdG1hcCA9IE5VTEw7Ci0JcmV0dXJuIHJjOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9tcGljX3Bhc2VtaV9tc2kuYyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvbXBpY19wYXNlbWlfbXNpLmMKaW5kZXggNjhhZmY2MC4uNjU2Y2I3NyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9tcGljX3Bhc2VtaV9tc2kuYworKysgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L21waWNfcGFzZW1pX21zaS5jCkBAIC0yMiw2ICsyMiw3IEBACiAjaW5jbHVkZSA8YXNtL3Byb20uaD4KICNpbmNsdWRlIDxhc20vaHdfaXJxLmg+CiAjaW5jbHVkZSA8YXNtL3BwYy1wY2kuaD4KKyNpbmNsdWRlIDxhc20vbXNpX2JpdG1hcC5oPgogCiAjaW5jbHVkZSAibXBpYy5oIgogCkBAIC04MSw4ICs4Miw4IEBACiAJCQljb250aW51ZTsKIAogCQlzZXRfaXJxX21zaShlbnRyeS0+aXJxLCBOVUxMKTsKLQkJbXBpY19tc2lfZnJlZV9od2lycXMobXNpX21waWMsIHZpcnFfdG9faHcoZW50cnktPmlycSksCi0JCQkJICAgICBBTExPQ19DSFVOSyk7CisJCW1zaV9iaXRtYXBfZnJlZV9od2lycXMoJm1zaV9tcGljLT5tc2lfYml0bWFwLAorCQkJCSAgICAgICB2aXJxX3RvX2h3KGVudHJ5LT5pcnEpLCBBTExPQ19DSFVOSyk7CiAJCWlycV9kaXNwb3NlX21hcHBpbmcoZW50cnktPmlycSk7CiAJfQogCkBAIC05MSwxMSArOTIsMTAgQEAKIAogc3RhdGljIGludCBwYXNlbWlfbXNpX3NldHVwX21zaV9pcnFzKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBpbnQgbnZlYywgaW50IHR5cGUpCiB7Ci0JaXJxX2h3X251bWJlcl90IGh3aXJxOwogCXVuc2lnbmVkIGludCB2aXJxOwogCXN0cnVjdCBtc2lfZGVzYyAqZW50cnk7CiAJc3RydWN0IG1zaV9tc2cgbXNnOwotCWludCByZXQ7CisJaW50IGh3aXJxOwogCiAJcHJfZGVidWcoInBhc2VtaV9tc2lfc2V0dXBfbXNpX2lycXMsIHBkZXYgJXAgbnZlYyAlZCB0eXBlICVkXG4iLAogCQkgcGRldiwgbnZlYywgdHlwZSk7CkBAIC0xMDksMTcgKzEwOSwxOSBAQAogCQkgKiBmZXcgTVNJcyBmb3Igc29tZW9uZSwgYnV0IHJlc3RyaWN0aW9ucyB3aWxsIGFwcGx5IHRvIGhvdyB0aGUKIAkJICogc291cmNlcyBjYW4gYmUgY2hhbmdlZCBpbmRlcGVuZGVudGx5LgogCQkgKi8KLQkJcmV0ID0gbXBpY19tc2lfYWxsb2NfaHdpcnFzKG1zaV9tcGljLCBBTExPQ19DSFVOSyk7Ci0JCWh3aXJxID0gcmV0OwotCQlpZiAocmV0IDwgMCkgeworCQlod2lycSA9IG1zaV9iaXRtYXBfYWxsb2NfaHdpcnFzKCZtc2lfbXBpYy0+bXNpX2JpdG1hcCwKKwkJCQkJCUFMTE9DX0NIVU5LKTsKKwkJaWYgKGh3aXJxIDwgMCkgewogCQkJcHJfZGVidWcoInBhc2VtaV9tc2k6IGZhaWxlZCBhbGxvY2F0aW5nIGh3aXJxXG4iKTsKIAkJCXJldHVybiBod2lycTsKIAkJfQogCiAJCXZpcnEgPSBpcnFfY3JlYXRlX21hcHBpbmcobXNpX21waWMtPmlycWhvc3QsIGh3aXJxKTsKIAkJaWYgKHZpcnEgPT0gTk9fSVJRKSB7Ci0JCQlwcl9kZWJ1ZygicGFzZW1pX21zaTogZmFpbGVkIG1hcHBpbmcgaHdpcnEgMHglbHhcbiIsIGh3aXJxKTsKLQkJCW1waWNfbXNpX2ZyZWVfaHdpcnFzKG1zaV9tcGljLCBod2lycSwgQUxMT0NfQ0hVTkspOworCQkJcHJfZGVidWcoInBhc2VtaV9tc2k6IGZhaWxlZCBtYXBwaW5nIGh3aXJxIDB4JXhcbiIsCisJCQkJICBod2lycSk7CisJCQltc2lfYml0bWFwX2ZyZWVfaHdpcnFzKCZtc2lfbXBpYy0+bXNpX2JpdG1hcCwgaHdpcnEsCisJCQkJCSAgICAgICBBTExPQ19DSFVOSyk7CiAJCQlyZXR1cm4gLUVOT1NQQzsKIAkJfQogCkBAIC0xMzMsOCArMTM1LDggQEAKIAkJc2V0X2lycV9jaGlwKHZpcnEsICZtcGljX3Bhc2VtaV9tc2lfY2hpcCk7CiAJCXNldF9pcnFfdHlwZSh2aXJxLCBJUlFfVFlQRV9FREdFX1JJU0lORyk7CiAKLQkJcHJfZGVidWcoInBhc2VtaV9tc2k6IGFsbG9jYXRlZCB2aXJxIDB4JXggKGh3IDB4JWx4KSBhZGRyIDB4JXhcbiIsCi0JCQkgIHZpcnEsIGh3aXJxLCBtc2cuYWRkcmVzc19sbyk7CisJCXByX2RlYnVnKCJwYXNlbWlfbXNpOiBhbGxvY2F0ZWQgdmlycSAweCV4IChodyAweCV4KSAiIFwKKwkJCSAiYWRkciAweCV4XG4iLCB2aXJxLCBod2lycSwgbXNnLmFkZHJlc3NfbG8pOwogCiAJCS8qIExpa2V3aXNlLCB0aGUgZGV2aWNlIHdyaXRlcyBbMC4uLjUxMV0gaW50byB0aGUgdGFyZ2V0CiAJCSAqIHJlZ2lzdGVyIHRvIGdlbmVyYXRlIE1TSSBbNTEyLi4uMTAyM10KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvbXBpY191M21zaS5jIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9tcGljX3UzbXNpLmMKaW5kZXggNmUyZjg2OC4uMGE4ZjVhOSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9tcGljX3UzbXNpLmMKKysrIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9tcGljX3UzbXNpLmMKQEAgLTE2LDYgKzE2LDcgQEAKICNpbmNsdWRlIDxhc20vcHJvbS5oPgogI2luY2x1ZGUgPGFzbS9od19pcnEuaD4KICNpbmNsdWRlIDxhc20vcHBjLXBjaS5oPgorI2luY2x1ZGUgPGFzbS9tc2lfYml0bWFwLmg+CiAKICNpbmNsdWRlICJtcGljLmgiCiAKQEAgLTEwMSw3ICsxMDIsOCBAQAogCQkJY29udGludWU7CiAKIAkJc2V0X2lycV9tc2koZW50cnktPmlycSwgTlVMTCk7Ci0JCW1waWNfbXNpX2ZyZWVfaHdpcnFzKG1zaV9tcGljLCB2aXJxX3RvX2h3KGVudHJ5LT5pcnEpLCAxKTsKKwkJbXNpX2JpdG1hcF9mcmVlX2h3aXJxcygmbXNpX21waWMtPm1zaV9iaXRtYXAsCisJCQkJICAgICAgIHZpcnFfdG9faHcoZW50cnktPmlycSksIDEpOwogCQlpcnFfZGlzcG9zZV9tYXBwaW5nKGVudHJ5LT5pcnEpOwogCX0KIApAQCAtMTEwLDI5ICsxMTIsMjcgQEAKIAogc3RhdGljIGludCB1M21zaV9zZXR1cF9tc2lfaXJxcyhzdHJ1Y3QgcGNpX2RldiAqcGRldiwgaW50IG52ZWMsIGludCB0eXBlKQogewotCWlycV9od19udW1iZXJfdCBod2lycTsKIAl1bnNpZ25lZCBpbnQgdmlycTsKIAlzdHJ1Y3QgbXNpX2Rlc2MgKmVudHJ5OwogCXN0cnVjdCBtc2lfbXNnIG1zZzsKIAl1NjQgYWRkcjsKLQlpbnQgcmV0OworCWludCBod2lycTsKIAogCWFkZHIgPSBmaW5kX2h0X21hZ2ljX2FkZHIocGRldik7CiAJbXNnLmFkZHJlc3NfbG8gPSBhZGRyICYgMHhGRkZGRkZGRjsKIAltc2cuYWRkcmVzc19oaSA9IGFkZHIgPj4gMzI7CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGVudHJ5LCAmcGRldi0+bXNpX2xpc3QsIGxpc3QpIHsKLQkJcmV0ID0gbXBpY19tc2lfYWxsb2NfaHdpcnFzKG1zaV9tcGljLCAxKTsKLQkJaWYgKHJldCA8IDApIHsKKwkJaHdpcnEgPSBtc2lfYml0bWFwX2FsbG9jX2h3aXJxcygmbXNpX21waWMtPm1zaV9iaXRtYXAsIDEpOworCQlpZiAoaHdpcnEgPCAwKSB7CiAJCQlwcl9kZWJ1ZygidTNtc2k6IGZhaWxlZCBhbGxvY2F0aW5nIGh3aXJxXG4iKTsKLQkJCXJldHVybiByZXQ7CisJCQlyZXR1cm4gaHdpcnE7CiAJCX0KLQkJaHdpcnEgPSByZXQ7CiAKIAkJdmlycSA9IGlycV9jcmVhdGVfbWFwcGluZyhtc2lfbXBpYy0+aXJxaG9zdCwgaHdpcnEpOwogCQlpZiAodmlycSA9PSBOT19JUlEpIHsKLQkJCXByX2RlYnVnKCJ1M21zaTogZmFpbGVkIG1hcHBpbmcgaHdpcnEgMHglbHhcbiIsIGh3aXJxKTsKLQkJCW1waWNfbXNpX2ZyZWVfaHdpcnFzKG1zaV9tcGljLCBod2lycSwgMSk7CisJCQlwcl9kZWJ1ZygidTNtc2k6IGZhaWxlZCBtYXBwaW5nIGh3aXJxIDB4JXhcbiIsIGh3aXJxKTsKKwkJCW1zaV9iaXRtYXBfZnJlZV9od2lycXMoJm1zaV9tcGljLT5tc2lfYml0bWFwLCBod2lycSwgMSk7CiAJCQlyZXR1cm4gLUVOT1NQQzsKIAkJfQogCkBAIC0xNDAsOCArMTQwLDggQEAKIAkJc2V0X2lycV9jaGlwKHZpcnEsICZtcGljX3UzbXNpX2NoaXApOwogCQlzZXRfaXJxX3R5cGUodmlycSwgSVJRX1RZUEVfRURHRV9SSVNJTkcpOwogCi0JCXByX2RlYnVnKCJ1M21zaTogYWxsb2NhdGVkIHZpcnEgMHgleCAoaHcgMHglbHgpIGFkZHIgMHglbHhcbiIsCi0JCQkgIHZpcnEsIGh3aXJxLCBhZGRyKTsKKwkJcHJfZGVidWcoInUzbXNpOiBhbGxvY2F0ZWQgdmlycSAweCV4IChodyAweCV4KSBhZGRyIDB4JWx4XG4iLAorCQkJICB2aXJxLCBod2lycSwgKHVuc2lnbmVkIGxvbmcpYWRkcik7CiAKIAkJbXNnLmRhdGEgPSBod2lycTsKIAkJd3JpdGVfbXNpX21zZyh2aXJxLCAmbXNnKTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvbXNpX2JpdG1hcC5jIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9tc2lfYml0bWFwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjg0MjE3YgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvbXNpX2JpdG1hcC5jCkBAIC0wLDAgKzEsMjQ3IEBACisvKgorICogQ29weXJpZ2h0IDIwMDYtMjAwOCwgTWljaGFlbCBFbGxlcm1hbiwgSUJNIENvcnBvcmF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgdmVyc2lvbiAyIG9mIHRoZQorICogTGljZW5zZS4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2JpdG1hcC5oPgorI2luY2x1ZGUgPGFzbS9tc2lfYml0bWFwLmg+CisKK2ludCBtc2lfYml0bWFwX2FsbG9jX2h3aXJxcyhzdHJ1Y3QgbXNpX2JpdG1hcCAqYm1wLCBpbnQgbnVtKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IG9mZnNldCwgb3JkZXIgPSBnZXRfY291bnRfb3JkZXIobnVtKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZibXAtPmxvY2ssIGZsYWdzKTsKKwkvKgorCSAqIFRoaXMgaXMgZmFzdCwgYnV0IHN0cmljdGVyIHRoYW4gd2UgbmVlZC4gV2UgbWlnaHQgd2FudCB0byBhZGQKKwkgKiBhIGZhbGxiYWNrIHJvdXRpbmUgd2hpY2ggZG9lcyBhIGxpbmVhciBzZWFyY2ggd2l0aCBubyBhbGlnbm1lbnQuCisJICovCisJb2Zmc2V0ID0gYml0bWFwX2ZpbmRfZnJlZV9yZWdpb24oYm1wLT5iaXRtYXAsIGJtcC0+aXJxX2NvdW50LCBvcmRlcik7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYm1wLT5sb2NrLCBmbGFncyk7CisKKwlwcl9kZWJ1ZygibXNpX2JpdG1hcDogYWxsb2NhdGVkIDB4JXggKDJeJWQpIGF0IG9mZnNldCAweCV4XG4iLAorCQkgbnVtLCBvcmRlciwgb2Zmc2V0KTsKKworCXJldHVybiBvZmZzZXQ7Cit9CisKK3ZvaWQgbXNpX2JpdG1hcF9mcmVlX2h3aXJxcyhzdHJ1Y3QgbXNpX2JpdG1hcCAqYm1wLCB1bnNpZ25lZCBpbnQgb2Zmc2V0LAorCQkJICAgIHVuc2lnbmVkIGludCBudW0pCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgb3JkZXIgPSBnZXRfY291bnRfb3JkZXIobnVtKTsKKworCXByX2RlYnVnKCJtc2lfYml0bWFwOiBmcmVlaW5nIDB4JXggKDJeJWQpIGF0IG9mZnNldCAweCV4XG4iLAorCQkgbnVtLCBvcmRlciwgb2Zmc2V0KTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZibXAtPmxvY2ssIGZsYWdzKTsKKwliaXRtYXBfcmVsZWFzZV9yZWdpb24oYm1wLT5iaXRtYXAsIG9mZnNldCwgb3JkZXIpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJtcC0+bG9jaywgZmxhZ3MpOworfQorCit2b2lkIG1zaV9iaXRtYXBfcmVzZXJ2ZV9od2lycShzdHJ1Y3QgbXNpX2JpdG1hcCAqYm1wLCB1bnNpZ25lZCBpbnQgaHdpcnEpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXByX2RlYnVnKCJtc2lfYml0bWFwOiByZXNlcnZpbmcgaHdpcnEgMHgleFxuIiwgaHdpcnEpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmJtcC0+bG9jaywgZmxhZ3MpOworCWJpdG1hcF9hbGxvY2F0ZV9yZWdpb24oYm1wLT5iaXRtYXAsIGh3aXJxLCAwKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZibXAtPmxvY2ssIGZsYWdzKTsKK30KKworLyoqCisgKiBtc2lfYml0bWFwX3Jlc2VydmVfZHRfaHdpcnFzIC0gUmVzZXJ2ZSBpcnFzIHNwZWNpZmllZCBpbiB0aGUgZGV2aWNlIHRyZWUuCisgKiBAYm1wOiBwb2ludGVyIHRvIHRoZSBNU0kgYml0bWFwLgorICoKKyAqIExvb2tzIGluIHRoZSBkZXZpY2UgdHJlZSB0byBzZWUgaWYgdGhlcmUgaXMgYSBwcm9wZXJ0eSBzcGVjaWZ5aW5nIHdoaWNoCisgKiBpcnFzIGNhbiBiZSB1c2VkIGZvciBNU0kuIElmIGZvdW5kIHRob3NlIGlycXMgcmVzZXJ2ZWQgaW4gdGhlIGRldmljZSB0cmVlCisgKiBhcmUgcmVzZXJ2ZWQgaW4gdGhlIGJpdG1hcC4KKyAqCisgKiBSZXR1cm5zIDAgZm9yIHN1Y2Nlc3MsIDwgMCBpZiB0aGVyZSB3YXMgYW4gZXJyb3IsIGFuZCA+IDAgaWYgbm8gcHJvcGVydHkKKyAqIHdhcyBmb3VuZCBpbiB0aGUgZGV2aWNlIHRyZWUuCisgKiovCitpbnQgbXNpX2JpdG1hcF9yZXNlcnZlX2R0X2h3aXJxcyhzdHJ1Y3QgbXNpX2JpdG1hcCAqYm1wKQoreworCWludCBpLCBqLCBsZW47CisJY29uc3QgdTMyICpwOworCisJaWYgKCFibXAtPm9mX25vZGUpCisJCXJldHVybiAxOworCisJcCA9IG9mX2dldF9wcm9wZXJ0eShibXAtPm9mX25vZGUsICJtc2ktYXZhaWxhYmxlLXJhbmdlcyIsICZsZW4pOworCWlmICghcCkgeworCQlwcl9kZWJ1ZygibXNpX2JpdG1hcDogbm8gbXNpLWF2YWlsYWJsZS1yYW5nZXMgcHJvcGVydHkgIiBcCisJCQkgImZvdW5kIG9uICVzXG4iLCBibXAtPm9mX25vZGUtPmZ1bGxfbmFtZSk7CisJCXJldHVybiAxOworCX0KKworCWlmIChsZW4gJSAoMiAqIHNpemVvZih1MzIpKSAhPSAwKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIm1zaV9iaXRtYXA6IE1hbGZvcm1lZCBtc2ktYXZhaWxhYmxlLXJhbmdlcyIKKwkJICAgICAgICIgcHJvcGVydHkgb24gJXNcbiIsIGJtcC0+b2Zfbm9kZS0+ZnVsbF9uYW1lKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJYml0bWFwX2FsbG9jYXRlX3JlZ2lvbihibXAtPmJpdG1hcCwgMCwgZ2V0X2NvdW50X29yZGVyKGJtcC0+aXJxX2NvdW50KSk7CisKKwlzcGluX2xvY2soJmJtcC0+bG9jayk7CisKKwkvKiBGb3JtYXQgaXM6ICg8dTMyIHN0YXJ0PiA8dTMyIGNvdW50PikrICovCisJbGVuIC89IDIgKiBzaXplb2YodTMyKTsKKwlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyssIHAgKz0gMikgeworCQlmb3IgKGogPSAwOyBqIDwgKihwICsgMSk7IGorKykKKwkJCWJpdG1hcF9yZWxlYXNlX3JlZ2lvbihibXAtPmJpdG1hcCwgKnAgKyBqLCAwKTsKKwl9CisKKwlzcGluX3VubG9jaygmYm1wLT5sb2NrKTsKKworCXJldHVybiAwOworfQorCitpbnQgbXNpX2JpdG1hcF9hbGxvYyhzdHJ1Y3QgbXNpX2JpdG1hcCAqYm1wLCB1bnNpZ25lZCBpbnQgaXJxX2NvdW50LAorCQkgICAgIHN0cnVjdCBkZXZpY2Vfbm9kZSAqb2Zfbm9kZSkKK3sKKwlpbnQgc2l6ZTsKKworCWlmICghaXJxX2NvdW50KQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXNpemUgPSBCSVRTX1RPX0xPTkdTKGlycV9jb3VudCkgKiBzaXplb2YobG9uZyk7CisJcHJfZGVidWcoIm1zaV9iaXRtYXA6IGFsbG9jYXRvciBiaXRtYXAgc2l6ZSBpcyAweCV4IGJ5dGVzXG4iLCBzaXplKTsKKworCWJtcC0+Yml0bWFwID0gemFsbG9jX21heWJlX2Jvb3RtZW0oc2l6ZSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFibXAtPmJpdG1hcCkgeworCQlwcl9kZWJ1ZygibXNpX2JpdG1hcDogRU5PTUVNIGFsbG9jYXRpbmcgYWxsb2NhdG9yIGJpdG1hcCFcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwkvKiBXZSB6YWxsb2MnZWQgdGhlIGJpdG1hcCwgc28gYWxsIGlycXMgYXJlIGZyZWUgYnkgZGVmYXVsdCAqLworCXNwaW5fbG9ja19pbml0KCZibXAtPmxvY2spOworCWJtcC0+b2Zfbm9kZSA9IG9mX25vZGVfZ2V0KG9mX25vZGUpOworCWJtcC0+aXJxX2NvdW50ID0gaXJxX2NvdW50OworCisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgbXNpX2JpdG1hcF9mcmVlKHN0cnVjdCBtc2lfYml0bWFwICpibXApCit7CisJLyogd2UgY2FuJ3QgZnJlZSB0aGUgYml0bWFwIHdlIGRvbid0IGtub3cgaWYgaXQncyBib290bWVtIGV0Yy4gKi8KKwlvZl9ub2RlX3B1dChibXAtPm9mX25vZGUpOworCWJtcC0+Yml0bWFwID0gTlVMTDsKK30KKworI2lmZGVmIENPTkZJR19NU0lfQklUTUFQX1NFTEZURVNUCisKKyNkZWZpbmUgY2hlY2soeCkJXAorCWlmICghKHgpKSBwcmludGsoIm1zaV9iaXRtYXA6IHRlc3QgZmFpbGVkIGF0IGxpbmUgJWRcbiIsIF9fTElORV9fKTsKKwordm9pZCB0ZXN0X2Jhc2ljcyh2b2lkKQoreworCXN0cnVjdCBtc2lfYml0bWFwIGJtcDsKKwlpbnQgaSwgc2l6ZSA9IDUxMjsKKworCS8qIENhbid0IGFsbG9jYXRlIGEgYml0bWFwIG9mIDAgaXJxcyAqLworCWNoZWNrKG1zaV9iaXRtYXBfYWxsb2MoJmJtcCwgMCwgTlVMTCkgIT0gMCk7CisKKwkvKiBvZl9ub2RlIG1heSBiZSBOVUxMICovCisJY2hlY2soMCA9PSBtc2lfYml0bWFwX2FsbG9jKCZibXAsIHNpemUsIE5VTEwpKTsKKworCS8qIFNob3VsZCBhbGwgYmUgZnJlZSBieSBkZWZhdWx0ICovCisJY2hlY2soMCA9PSBiaXRtYXBfZmluZF9mcmVlX3JlZ2lvbihibXAuYml0bWFwLCBzaXplLAorCQkJCQkgICBnZXRfY291bnRfb3JkZXIoc2l6ZSkpKTsKKwliaXRtYXBfcmVsZWFzZV9yZWdpb24oYm1wLmJpdG1hcCwgMCwgZ2V0X2NvdW50X29yZGVyKHNpemUpKTsKKworCS8qIFdpdGggbm8gbm9kZSwgdGhlcmUncyBubyBtc2ktYXZhaWxhYmxlLXJhbmdlcywgc28gZXhwZWN0ID4gMCAqLworCWNoZWNrKG1zaV9iaXRtYXBfcmVzZXJ2ZV9kdF9od2lycXMoJmJtcCkgPiAwKTsKKworCS8qIFNob3VsZCBhbGwgc3RpbGwgYmUgZnJlZSAqLworCWNoZWNrKDAgPT0gYml0bWFwX2ZpbmRfZnJlZV9yZWdpb24oYm1wLmJpdG1hcCwgc2l6ZSwKKwkJCQkJICAgZ2V0X2NvdW50X29yZGVyKHNpemUpKSk7CisJYml0bWFwX3JlbGVhc2VfcmVnaW9uKGJtcC5iaXRtYXAsIDAsIGdldF9jb3VudF9vcmRlcihzaXplKSk7CisKKwkvKiBDaGVjayB3ZSBjYW4gZmlsbCBpdCB1cCBhbmQgdGhlbiBubyBtb3JlICovCisJZm9yIChpID0gMDsgaSA8IHNpemU7IGkrKykKKwkJY2hlY2sobXNpX2JpdG1hcF9hbGxvY19od2lycXMoJmJtcCwgMSkgPj0gMCk7CisKKwljaGVjayhtc2lfYml0bWFwX2FsbG9jX2h3aXJxcygmYm1wLCAxKSA8IDApOworCisJLyogU2hvdWxkIGFsbCBiZSBhbGxvY2F0ZWQgKi8KKwljaGVjayhiaXRtYXBfZmluZF9mcmVlX3JlZ2lvbihibXAuYml0bWFwLCBzaXplLCAwKSA8IDApOworCisJLyogQW5kIGlmIHdlIGZyZWUgb25lIHdlIGNhbiB0aGVuIGFsbG9jYXRlIGFub3RoZXIgKi8KKwltc2lfYml0bWFwX2ZyZWVfaHdpcnFzKCZibXAsIHNpemUgLyAyLCAxKTsKKwljaGVjayhtc2lfYml0bWFwX2FsbG9jX2h3aXJxcygmYm1wLCAxKSA9PSBzaXplIC8gMik7CisKKwltc2lfYml0bWFwX2ZyZWUoJmJtcCk7CisKKwkvKiBDbGllbnRzIG1heSBjaGVjayBiaXRtYXAgPT0gTlVMTCBmb3IgIm5vdC1hbGxvY2F0ZWQiICovCisJY2hlY2soYm1wLmJpdG1hcCA9PSBOVUxMKTsKKworCWtmcmVlKGJtcC5iaXRtYXApOworfQorCit2b2lkIHRlc3Rfb2Zfbm9kZSh2b2lkKQoreworCXUzMiBwcm9wX2RhdGFbXSA9IHsgMTAsIDEwLCAyNSwgMywgNDAsIDEsIDEwMCwgMTAwLCAyMDAsIDIwIH07CisJY29uc3QgY2hhciAqZXhwZWN0ZWRfc3RyID0gIjAtOSwyMC0yNCwyOC0zOSw0MS05OSwyMjAtMjU1IjsKKwljaGFyICpwcm9wX25hbWUgPSAibXNpLWF2YWlsYWJsZS1yYW5nZXMiOworCWNoYXIgKm5vZGVfbmFtZSA9ICIvZmFrZW5vZGUiOworCXN0cnVjdCBkZXZpY2Vfbm9kZSBvZl9ub2RlOworCXN0cnVjdCBwcm9wZXJ0eSBwcm9wOworCXN0cnVjdCBtc2lfYml0bWFwIGJtcDsKKwlpbnQgc2l6ZSA9IDI1NjsKKwlERUNMQVJFX0JJVE1BUChleHBlY3RlZCwgc2l6ZSk7CisKKwkvKiBUaGVyZSBzaG91bGQgcmVhbGx5IGJlIGEgc3RydWN0IGRldmljZV9ub2RlIGFsbG9jYXRvciAqLworCW1lbXNldCgmb2Zfbm9kZSwgMCwgc2l6ZW9mKG9mX25vZGUpKTsKKwlrcmVmX2luaXQoJm9mX25vZGUua3JlZik7CisJb2Zfbm9kZS5mdWxsX25hbWUgPSBub2RlX25hbWU7CisKKwljaGVjaygwID09IG1zaV9iaXRtYXBfYWxsb2MoJmJtcCwgc2l6ZSwgJm9mX25vZGUpKTsKKworCS8qIE5vIG1zaS1hdmFpbGFibGUtcmFuZ2VzLCBzbyBleHBlY3QgPiAwICovCisJY2hlY2sobXNpX2JpdG1hcF9yZXNlcnZlX2R0X2h3aXJxcygmYm1wKSA+IDApOworCisJLyogU2hvdWxkIGFsbCBzdGlsbCBiZSBmcmVlICovCisJY2hlY2soMCA9PSBiaXRtYXBfZmluZF9mcmVlX3JlZ2lvbihibXAuYml0bWFwLCBzaXplLAorCQkJCQkgICBnZXRfY291bnRfb3JkZXIoc2l6ZSkpKTsKKwliaXRtYXBfcmVsZWFzZV9yZWdpb24oYm1wLmJpdG1hcCwgMCwgZ2V0X2NvdW50X29yZGVyKHNpemUpKTsKKworCS8qIE5vdyBjcmVhdGUgYSBmYWtlIG1zaS1hdmFpbGFibGUtcmFuZ2VzIHByb3BlcnR5ICovCisKKwkvKiBUaGVyZSBzaG91bGQgcmVhbGx5IC4uIG9oIHdoYXRldmVyICovCisJbWVtc2V0KCZwcm9wLCAwLCBzaXplb2YocHJvcCkpOworCXByb3AubmFtZSA9IHByb3BfbmFtZTsKKwlwcm9wLnZhbHVlID0gJnByb3BfZGF0YTsKKwlwcm9wLmxlbmd0aCA9IHNpemVvZihwcm9wX2RhdGEpOworCisJb2Zfbm9kZS5wcm9wZXJ0aWVzID0gJnByb3A7CisKKwkvKiBtc2ktYXZhaWxhYmxlLXJhbmdlcywgc28gZXhwZWN0ID09IDAgKi8KKwljaGVjayhtc2lfYml0bWFwX3Jlc2VydmVfZHRfaHdpcnFzKCZibXApID09IDApOworCisJLyogQ2hlY2sgd2UgZ290IHRoZSBleHBlY3RlZCByZXN1bHQgKi8KKwljaGVjaygwID09IGJpdG1hcF9wYXJzZWxpc3QoZXhwZWN0ZWRfc3RyLCBleHBlY3RlZCwgc2l6ZSkpOworCWNoZWNrKGJpdG1hcF9lcXVhbChleHBlY3RlZCwgYm1wLmJpdG1hcCwgc2l6ZSkpOworCisJbXNpX2JpdG1hcF9mcmVlKCZibXApOworCWtmcmVlKGJtcC5iaXRtYXApOworfQorCitpbnQgbXNpX2JpdG1hcF9zZWxmdGVzdCh2b2lkKQoreworCXByaW50ayhLRVJOX0RFQlVHICJSdW5uaW5nIE1TSSBiaXRtYXAgc2VsZi10ZXN0cyAuLi5cbiIpOworCisJdGVzdF9iYXNpY3MoKTsKKwl0ZXN0X29mX25vZGUoKTsKKworCXJldHVybiAwOworfQorbGF0ZV9pbml0Y2FsbChtc2lfYml0bWFwX3NlbGZ0ZXN0KTsKKyNlbmRpZiAvKiBDT05GSUdfTVNJX0JJVE1BUF9TRUxGVEVTVCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9wcGM0eHhfcGNpLmMgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L3BwYzR4eF9wY2kuYwppbmRleCBmYjM2OGRmLi5kM2U0ZDYxIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvc3lzZGV2L3BwYzR4eF9wY2kuYworKysgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L3BwYzR4eF9wY2kuYwpAQCAtMzAsMjQgKzMwLDE5IEBACiAjaW5jbHVkZSA8YXNtL21hY2hkZXAuaD4KICNpbmNsdWRlIDxhc20vZGNyLmg+CiAjaW5jbHVkZSA8YXNtL2Rjci1yZWdzLmg+CisjaW5jbHVkZSA8bW0vbW11X2RlY2wuaD4KIAogI2luY2x1ZGUgInBwYzR4eF9wY2kuaCIKIAogc3RhdGljIGludCBkbWFfb2Zmc2V0X3NldDsKIAotLyogTW92ZSB0aGF0IHRvIGEgdXNlYWJsZSBoZWFkZXIgKi8KLWV4dGVybiB1bnNpZ25lZCBsb25nIHRvdGFsX21lbW9yeTsKLQogI2RlZmluZSBVNjRfVE9fVTMyX0xPVyh2YWwpCSgodTMyKSgodmFsKSAmIDB4MDAwMDAwMDBmZmZmZmZmZlVMTCkpCiAjZGVmaW5lIFU2NF9UT19VMzJfSElHSCh2YWwpCSgodTMyKSgodmFsKSA+PiAzMikpCiAKLSNpZmRlZiBDT05GSUdfUkVTT1VSQ0VTXzY0QklUCi0jZGVmaW5lIFJFU19UT19VMzJfTE9XKHZhbCkJVTY0X1RPX1UzMl9MT1codmFsKQotI2RlZmluZSBSRVNfVE9fVTMyX0hJR0godmFsKQlVNjRfVE9fVTMyX0hJR0godmFsKQotI2Vsc2UKLSNkZWZpbmUgUkVTX1RPX1UzMl9MT1codmFsKQkodmFsKQotI2RlZmluZSBSRVNfVE9fVTMyX0hJR0godmFsKQkoMCkKLSNlbmRpZgorI2RlZmluZSBSRVNfVE9fVTMyX0xPVyh2YWwpCVwKKwkoKHNpemVvZihyZXNvdXJjZV9zaXplX3QpID4gc2l6ZW9mKHUzMikpID8gVTY0X1RPX1UzMl9MT1codmFsKSA6ICh2YWwpKQorI2RlZmluZSBSRVNfVE9fVTMyX0hJR0godmFsKQlcCisJKChzaXplb2YocmVzb3VyY2Vfc2l6ZV90KSA+IHNpemVvZih1MzIpKSA/IFU2NF9UT19VMzJfSElHSCh2YWwpIDogKDApKQogCiBzdGF0aWMgaW5saW5lIGludCBwcGM0NDBzcGVfcmV2QSh2b2lkKQogewpAQCAtMTA1LDcgKzEwMCw4IEBACiAKIAkvKiBEZWZhdWx0ICovCiAJcmVzLT5zdGFydCA9IDA7Ci0JcmVzLT5lbmQgPSBzaXplID0gMHg4MDAwMDAwMDsKKwlzaXplID0gMHg4MDAwMDAwMDsKKwlyZXMtPmVuZCA9IHNpemUgLSAxOwogCXJlcy0+ZmxhZ3MgPSBJT1JFU09VUkNFX01FTSB8IElPUkVTT1VSQ0VfUFJFRkVUQ0g7CiAKIAkvKiBHZXQgZG1hLXJhbmdlcyBwcm9wZXJ0eSAqLwpAQCAtMTQ1LDEyICsxNDEsMTEgQEAKIAogCQkvKiBVc2UgdGhhdCAqLwogCQlyZXMtPnN0YXJ0ID0gcGNpX2FkZHI7Ci0jaWZuZGVmIENPTkZJR19SRVNPVVJDRVNfNjRCSVQKIAkJLyogQmV3YXJlIG9mIDMyIGJpdHMgcmVzb3VyY2VzICovCi0JCWlmICgocGNpX2FkZHIgKyBzaXplKSA+IDB4MTAwMDAwMDAwdWxsKQorCQlpZiAoc2l6ZW9mKHJlc291cmNlX3NpemVfdCkgPT0gc2l6ZW9mKHUzMikgJiYKKwkJICAgIChwY2lfYWRkciArIHNpemUpID4gMHgxMDAwMDAwMDB1bGwpCiAJCQlyZXMtPmVuZCA9IDB4ZmZmZmZmZmY7CiAJCWVsc2UKLSNlbmRpZgogCQkJcmVzLT5lbmQgPSByZXMtPnN0YXJ0ICsgc2l6ZSAtIDE7CiAJCWJyZWFrOwogCX0KQEAgLTE2NywxMyArMTYyLDEzIEBACiAJICovCiAJaWYgKHNpemUgPCB0b3RhbF9tZW1vcnkpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICIlczogZG1hLXJhbmdlcyB0b28gc21hbGwgIgotCQkgICAgICAgIihzaXplPSVsbHggdG90YWxfbWVtb3J5PSVseClcbiIsCi0JCSAgICAgICBob3NlLT5kbi0+ZnVsbF9uYW1lLCBzaXplLCB0b3RhbF9tZW1vcnkpOworCQkgICAgICAgIihzaXplPSVsbHggdG90YWxfbWVtb3J5PSVsbHgpXG4iLAorCQkgICAgICAgaG9zZS0+ZG4tPmZ1bGxfbmFtZSwgc2l6ZSwgKHU2NCl0b3RhbF9tZW1vcnkpOwogCQlyZXR1cm4gLUVOWElPOwogCX0KIAogCS8qIENoZWNrIHdlIGFyZSBhIHBvd2VyIG9mIDIgc2l6ZSBhbmQgdGhhdCBiYXNlIGlzIGEgbXVsdGlwbGUgb2Ygc2l6ZSovCi0JaWYgKCFpc19wb3dlcl9vZl8yKHNpemUpIHx8CisJaWYgKChzaXplICYgKHNpemUgLSAxKSkgIT0gMCAgfHwKIAkgICAgKHJlcy0+c3RhcnQgJiAoc2l6ZSAtIDEpKSAhPSAwKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiJXM6IGRtYS1yYW5nZXMgdW5hbGlnbmVkXG4iLAogCQkgICAgICAgaG9zZS0+ZG4tPmZ1bGxfbmFtZSk7CkBAIC0yNzcsOSArMjcyLDE2IEBACiAJY29uc3QgaW50ICpidXNfcmFuZ2U7CiAJaW50IHByaW1hcnkgPSAwOwogCisJLyogQ2hlY2sgaWYgZGV2aWNlIGlzIGVuYWJsZWQgKi8KKwlpZiAoIW9mX2RldmljZV9pc19hdmFpbGFibGUobnApKSB7CisJCXByaW50ayhLRVJOX0lORk8gIiVzOiBQb3J0IGRpc2FibGVkIHZpYSBkZXZpY2UtdHJlZVxuIiwKKwkJICAgICAgIG5wLT5mdWxsX25hbWUpOworCQlyZXR1cm47CisJfQorCiAJLyogRmV0Y2ggY29uZmlnIHNwYWNlIHJlZ2lzdGVycyBhZGRyZXNzICovCiAJaWYgKG9mX2FkZHJlc3NfdG9fcmVzb3VyY2UobnAsIDAsICZyc3JjX2NmZykpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczpDYW4ndCBnZXQgUENJIGNvbmZpZyByZWdpc3RlciBiYXNlICEiLAorCQlwcmludGsoS0VSTl9FUlIgIiVzOiBDYW4ndCBnZXQgUENJIGNvbmZpZyByZWdpc3RlciBiYXNlICEiLAogCQkgICAgICAgbnAtPmZ1bGxfbmFtZSk7CiAJCXJldHVybjsKIAl9CkBAIC04MTAsNyArODEyLDcgQEAKIAlzd2l0Y2ggKHBvcnQtPmluZGV4KSB7CiAJY2FzZSAwOgogCQltdGRjcmkoU0RSMCwgUEVTRFIwXzQ2MEVYX0wwQ0RSQ1RMLCAweDAwMDAzMjMwKTsKLQkJbXRkY3JpKFNEUjAsIFBFU0RSMF80NjBFWF9MMERSViwgMHgwMDAwMDEzNik7CisJCW10ZGNyaShTRFIwLCBQRVNEUjBfNDYwRVhfTDBEUlYsIDB4MDAwMDAxMzApOwogCQltdGRjcmkoU0RSMCwgUEVTRFIwXzQ2MEVYX0wwQ0xLLCAweDAwMDAwMDA2KTsKIAogCQltdGRjcmkoU0RSMCwgUEVTRFIwXzQ2MEVYX1BIWV9DVExfUlNULDB4MTAwMDAwMDApOwpAQCAtODIxLDEwICs4MjMsMTAgQEAKIAkJbXRkY3JpKFNEUjAsIFBFU0RSMV80NjBFWF9MMUNEUkNUTCwgMHgwMDAwMzIzMCk7CiAJCW10ZGNyaShTRFIwLCBQRVNEUjFfNDYwRVhfTDJDRFJDVEwsIDB4MDAwMDMyMzApOwogCQltdGRjcmkoU0RSMCwgUEVTRFIxXzQ2MEVYX0wzQ0RSQ1RMLCAweDAwMDAzMjMwKTsKLQkJbXRkY3JpKFNEUjAsIFBFU0RSMV80NjBFWF9MMERSViwgMHgwMDAwMDEzNik7Ci0JCW10ZGNyaShTRFIwLCBQRVNEUjFfNDYwRVhfTDFEUlYsIDB4MDAwMDAxMzYpOwotCQltdGRjcmkoU0RSMCwgUEVTRFIxXzQ2MEVYX0wyRFJWLCAweDAwMDAwMTM2KTsKLQkJbXRkY3JpKFNEUjAsIFBFU0RSMV80NjBFWF9MM0RSViwgMHgwMDAwMDEzNik7CisJCW10ZGNyaShTRFIwLCBQRVNEUjFfNDYwRVhfTDBEUlYsIDB4MDAwMDAxMzApOworCQltdGRjcmkoU0RSMCwgUEVTRFIxXzQ2MEVYX0wxRFJWLCAweDAwMDAwMTMwKTsKKwkJbXRkY3JpKFNEUjAsIFBFU0RSMV80NjBFWF9MMkRSViwgMHgwMDAwMDEzMCk7CisJCW10ZGNyaShTRFIwLCBQRVNEUjFfNDYwRVhfTDNEUlYsIDB4MDAwMDAxMzApOwogCQltdGRjcmkoU0RSMCwgUEVTRFIxXzQ2MEVYX0wwQ0xLLCAweDAwMDAwMDA2KTsKIAkJbXRkY3JpKFNEUjAsIFBFU0RSMV80NjBFWF9MMUNMSywgMHgwMDAwMDAwNik7CiAJCW10ZGNyaShTRFIwLCBQRVNEUjFfNDYwRVhfTDJDTEssIDB4MDAwMDAwMDYpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9xZV9saWIvS2NvbmZpZyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvcWVfbGliL0tjb25maWcKaW5kZXggMWNlNTQ2NC4uNzZmZmJjNCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9xZV9saWIvS2NvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L3FlX2xpYi9LY29uZmlnCkBAIC0yNCwxMiArMjQsMyBAQAogCWJvb2wKIAloZWxwCiAJICBRRSBVU0IgSG9zdCBDb250cm9sbGVyIHN1cHBvcnQKLQotY29uZmlnIFFFX0dQSU8KLQlib29sICJRRSBHUElPIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBRVUlDQ19FTkdJTkUKLQlzZWxlY3QgR0VORVJJQ19HUElPCi0Jc2VsZWN0IEFSQ0hfUkVRVUlSRV9HUElPTElCCi0JaGVscAotCSAgU2F5IFkgaGVyZSBpZiB5b3UncmUgZ29pbmcgdG8gdXNlIGhhcmR3YXJlIHRoYXQgY29ubmVjdHMgdG8gdGhlCi0JICBRRSBHUElPcy4KZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9LY29uZmlnIGIvYXJjaC9zMzkwL0tjb25maWcKaW5kZXggNGMwMzA0OS4uNzBiNzY0NSAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL0tjb25maWcKKysrIGIvYXJjaC9zMzkwL0tjb25maWcKQEAgLTc4LDYgKzc4LDggQEAKIAogc291cmNlICJpbml0L0tjb25maWciCiAKK3NvdXJjZSAia2VybmVsL0tjb25maWcuZnJlZXplciIKKwogbWVudSAiQmFzZSBzZXR1cCIKIAogY29tbWVudCAiUHJvY2Vzc29yIHR5cGUgYW5kIGZlYXR1cmVzIgpAQCAtNTY1LDEzICs1NjcsMTYgQEAKIAkgIFJlZmVyIHRvIDxmaWxlOkRvY3VtZW50YXRpb24vczM5MC96ZmNwZHVtcC50eHQ+IGZvciBtb3JlIGRldGFpbHMgb24gdGhpcy4KIAogY29uZmlnIFMzOTBfR1VFU1QKLWJvb2wgInMzOTAgZ3Vlc3Qgc3VwcG9ydCAoRVhQRVJJTUVOVEFMKSIKK2Jvb2wgInMzOTAgZ3Vlc3Qgc3VwcG9ydCBmb3IgS1ZNIChFWFBFUklNRU5UQUwpIgogCWRlcGVuZHMgb24gNjRCSVQgJiYgRVhQRVJJTUVOVEFMCiAJc2VsZWN0IFZJUlRJTwogCXNlbGVjdCBWSVJUSU9fUklORwogCXNlbGVjdCBWSVJUSU9fQ09OU09MRQogCWhlbHAKLQkgIFNlbGVjdCB0aGlzIG9wdGlvbiBpZiB5b3Ugd2FudCB0byBydW4gdGhlIGtlcm5lbCB1bmRlciBzMzkwIGxpbnV4CisJICBTZWxlY3QgdGhpcyBvcHRpb24gaWYgeW91IHdhbnQgdG8gcnVuIHRoZSBrZXJuZWwgYXMgYSBndWVzdCB1bmRlcgorCSAgdGhlIEtWTSBoeXBlcnZpc29yLiBUaGlzIHdpbGwgYWRkIGRldGVjdGlvbiBmb3IgS1ZNIGFzIHdlbGwgIGFzIGEKKwkgIHZpcnRpbyB0cmFuc3BvcnQuIElmIEtWTSBpcyBkZXRlY3RlZCwgdGhlIHZpcnRpbyBjb25zb2xlIHdpbGwgYmUKKwkgIHRoZSBkZWZhdWx0IGNvbnNvbGUuCiBlbmRtZW51CiAKIHNvdXJjZSAibmV0L0tjb25maWciCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaHlwZnMvaW5vZGUuYyBiL2FyY2gvczM5MC9oeXBmcy9pbm9kZS5jCmluZGV4IDczODM3ODEuLjM2MzEzODAgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9oeXBmcy9pbm9kZS5jCisrKyBiL2FyY2gvczM5MC9oeXBmcy9pbm9kZS5jCkBAIC0yMTksNyArMjE5LDcgQEAKIAogZW51bSB7IG9wdF91aWQsIG9wdF9naWQsIG9wdF9lcnIgfTsKIAotc3RhdGljIG1hdGNoX3RhYmxlX3QgaHlwZnNfdG9rZW5zID0geworc3RhdGljIGNvbnN0IG1hdGNoX3RhYmxlX3QgaHlwZnNfdG9rZW5zID0gewogCXtvcHRfdWlkLCAidWlkPSV1In0sCiAJe29wdF9naWQsICJnaWQ9JXUifSwKIAl7b3B0X2VyciwgTlVMTH0KZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9lbGYuaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9lbGYuaAppbmRleCAzY2FkNTY5Li4yNjE3ODVhIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vZWxmLmgKKysrIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2VsZi5oCkBAIC0xNjYsMTMgKzE2NiwxMSBAQAogI2RlZmluZSBFTEZfUExBVEZPUk0gKGVsZl9wbGF0Zm9ybSkKIAogI2lmbmRlZiBfX3MzOTB4X18KLSNkZWZpbmUgU0VUX1BFUlNPTkFMSVRZKGV4LCBpYmNzMikgc2V0X3BlcnNvbmFsaXR5KChpYmNzMik/UEVSX1NWUjQ6UEVSX0xJTlVYKQorI2RlZmluZSBTRVRfUEVSU09OQUxJVFkoZXgpIHNldF9wZXJzb25hbGl0eShQRVJfTElOVVgpCiAjZWxzZSAvKiBfX3MzOTB4X18gKi8KLSNkZWZpbmUgU0VUX1BFUlNPTkFMSVRZKGV4LCBpYmNzMikJCQlcCisjZGVmaW5lIFNFVF9QRVJTT05BTElUWShleCkJCQkJXAogZG8gewkJCQkJCQlcCi0JaWYgKGliY3MyKQkJCQkJXAotCQlzZXRfcGVyc29uYWxpdHkoUEVSX1NWUjQpOwkJXAotCWVsc2UgaWYgKGN1cnJlbnQtPnBlcnNvbmFsaXR5ICE9IFBFUl9MSU5VWDMyKQlcCisJaWYgKGN1cnJlbnQtPnBlcnNvbmFsaXR5ICE9IFBFUl9MSU5VWDMyKQlcCiAJCXNldF9wZXJzb25hbGl0eShQRVJfTElOVVgpOwkJXAogCWlmICgoZXgpLmVfaWRlbnRbRUlfQ0xBU1NdID09IEVMRkNMQVNTMzIpCVwKIAkJc2V0X3RocmVhZF9mbGFnKFRJRl8zMUJJVCk7CQlcCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vc3RhdGZzLmggYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vc3RhdGZzLmgKaW5kZXggMDk5YTQ1NS4uMDZjYzcwMyAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3N0YXRmcy5oCisrKyBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9zdGF0ZnMuaApAQCAtMTIsMTkgKzEyLDE2IEBACiAjaWZuZGVmIF9fczM5MHhfXwogI2luY2x1ZGUgPGFzbS1nZW5lcmljL3N0YXRmcy5oPgogI2Vsc2UKKy8qCisgKiBXZSBjYW4ndCB1c2UgPGFzbS1nZW5lcmljL3N0YXRmcy5oPiBiZWNhdXNlIGluIDY0LWJpdCBtb2RlCisgKiB3ZSBtaXggaW50cyBvZiBkaWZmZXJlbnQgc2l6ZXMgaW4gb3VyIHN0cnVjdCBzdGF0ZnMuCisgKi8KIAogI2lmbmRlZiBfX0tFUk5FTF9TVFJJQ1RfTkFNRVMKLQogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0KIHR5cGVkZWYgX19rZXJuZWxfZnNpZF90CWZzaWRfdDsKLQogI2VuZGlmCiAKLS8qCi0gKiBUaGlzIGlzIHVnbHkgLS0gd2UncmUgYWxyZWFkeSA2NC1iaXQgY2xlYW4sIHNvIGp1c3QgZHVwbGljYXRlIHRoZSAKLSAqIGRlZmluaXRpb25zLgotICovCiBzdHJ1Y3Qgc3RhdGZzIHsKIAlpbnQgIGZfdHlwZTsKIAlpbnQgIGZfYnNpemU7CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vdGhyZWFkX2luZm8uaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS90aHJlYWRfaW5mby5oCmluZGV4IGVhNDBhOWQuLmRlM2ZhZDYgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS90aHJlYWRfaW5mby5oCisrKyBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS90aHJlYWRfaW5mby5oCkBAIC05OSw2ICs5OSw3IEBACiAjZGVmaW5lIFRJRl8zMUJJVAkJMTgJLyogMzJiaXQgcHJvY2VzcyAqLyAKICNkZWZpbmUgVElGX01FTURJRQkJMTkKICNkZWZpbmUgVElGX1JFU1RPUkVfU0lHTUFTSwkyMAkvKiByZXN0b3JlIHNpZ25hbCBtYXNrIGluIGRvX3NpZ25hbCgpICovCisjZGVmaW5lIFRJRl9GUkVFWkUJCTIxCS8qIHRocmVhZCBpcyBmcmVlemluZyBmb3Igc3VzcGVuZCAqLwogCiAjZGVmaW5lIF9USUZfU1lTQ0FMTF9UUkFDRQkoMTw8VElGX1NZU0NBTExfVFJBQ0UpCiAjZGVmaW5lIF9USUZfTk9USUZZX1JFU1VNRQkoMTw8VElGX05PVElGWV9SRVNVTUUpCkBAIC0xMTIsNiArMTEzLDcgQEAKICNkZWZpbmUgX1RJRl9VU0VERlBVCQkoMTw8VElGX1VTRURGUFUpCiAjZGVmaW5lIF9USUZfUE9MTElOR19OUkZMQUcJKDE8PFRJRl9QT0xMSU5HX05SRkxBRykKICNkZWZpbmUgX1RJRl8zMUJJVAkJKDE8PFRJRl8zMUJJVCkKKyNkZWZpbmUgX1RJRl9GUkVFWkUJCSgxPDxUSUZfRlJFRVpFKQogCiAjZW5kaWYgLyogX19LRVJORUxfXyAqLwogCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL2NvbXBhdF9saW51eC5jIGIvYXJjaC9zMzkwL2tlcm5lbC9jb21wYXRfbGludXguYwppbmRleCA5OGUyNDZkLi40NjQ2MzgyIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva2VybmVsL2NvbXBhdF9saW51eC5jCisrKyBiL2FyY2gvczM5MC9rZXJuZWwvY29tcGF0X2xpbnV4LmMKQEAgLTI3OSwyMiArMjc5LDYgQEAKIAlyZXR1cm4gaGlnaDJsb3dnaWQoY3VycmVudC0+ZWdpZCk7CiB9CiAKLS8qIDMyLWJpdCB0aW1ldmFsIGFuZCByZWxhdGVkIGZsb3RzYW0uICAqLwotCi1zdGF0aWMgaW5saW5lIGxvbmcgZ2V0X3R2MzIoc3RydWN0IHRpbWV2YWwgKm8sIHN0cnVjdCBjb21wYXRfdGltZXZhbCBfX3VzZXIgKmkpCi17Ci0JcmV0dXJuICghYWNjZXNzX29rKFZFUklGWV9SRUFELCBvLCBzaXplb2YoKm8pKSB8fAotCQkoX19nZXRfdXNlcihvLT50dl9zZWMsICZpLT50dl9zZWMpIHx8Ci0JCSBfX2dldF91c2VyKG8tPnR2X3VzZWMsICZpLT50dl91c2VjKSkpOwotfQotCi1zdGF0aWMgaW5saW5lIGxvbmcgcHV0X3R2MzIoc3RydWN0IGNvbXBhdF90aW1ldmFsIF9fdXNlciAqbywgc3RydWN0IHRpbWV2YWwgKmkpCi17Ci0JcmV0dXJuICghYWNjZXNzX29rKFZFUklGWV9XUklURSwgbywgc2l6ZW9mKCpvKSkgfHwKLQkJKF9fcHV0X3VzZXIoaS0+dHZfc2VjLCAmby0+dHZfc2VjKSB8fAotCQkgX19wdXRfdXNlcihpLT50dl91c2VjLCAmby0+dHZfdXNlYykpKTsKLX0KLQogLyoKICAqIHN5czMyX2lwYygpIGlzIHRoZSBkZS1tdWx0aXBsZXhlciBmb3IgdGhlIFN5c1YgSVBDIGNhbGxzIGluIDMyYml0IGVtdWxhdGlvbi4KICAqCkBAIC0zNjIsNDEgKzM0Niw2IEBACiAJCXJldHVybiBzeXNfZnRydW5jYXRlKGZkLCAoaGlnaCA8PCAzMikgfCBsb3cpOwogfQogCi1pbnQgY3BfY29tcGF0X3N0YXQoc3RydWN0IGtzdGF0ICpzdGF0LCBzdHJ1Y3QgY29tcGF0X3N0YXQgX191c2VyICpzdGF0YnVmKQotewotCWNvbXBhdF9pbm9fdCBpbm87Ci0JaW50IGVycjsKLQotCWlmICghb2xkX3ZhbGlkX2RldihzdGF0LT5kZXYpIHx8ICFvbGRfdmFsaWRfZGV2KHN0YXQtPnJkZXYpKQotCQlyZXR1cm4gLUVPVkVSRkxPVzsKLQotCWlubyA9IHN0YXQtPmlubzsKLQlpZiAoc2l6ZW9mKGlubykgPCBzaXplb2Yoc3RhdC0+aW5vKSAmJiBpbm8gIT0gc3RhdC0+aW5vKQotCQlyZXR1cm4gLUVPVkVSRkxPVzsKLQotCWVyciA9IHB1dF91c2VyKG9sZF9lbmNvZGVfZGV2KHN0YXQtPmRldiksICZzdGF0YnVmLT5zdF9kZXYpOwotCWVyciB8PSBwdXRfdXNlcihzdGF0LT5pbm8sICZzdGF0YnVmLT5zdF9pbm8pOwotCWVyciB8PSBwdXRfdXNlcihzdGF0LT5tb2RlLCAmc3RhdGJ1Zi0+c3RfbW9kZSk7Ci0JZXJyIHw9IHB1dF91c2VyKHN0YXQtPm5saW5rLCAmc3RhdGJ1Zi0+c3RfbmxpbmspOwotCWVyciB8PSBwdXRfdXNlcihoaWdoMmxvd3VpZChzdGF0LT51aWQpLCAmc3RhdGJ1Zi0+c3RfdWlkKTsKLQllcnIgfD0gcHV0X3VzZXIoaGlnaDJsb3dnaWQoc3RhdC0+Z2lkKSwgJnN0YXRidWYtPnN0X2dpZCk7Ci0JZXJyIHw9IHB1dF91c2VyKG9sZF9lbmNvZGVfZGV2KHN0YXQtPnJkZXYpLCAmc3RhdGJ1Zi0+c3RfcmRldik7Ci0JZXJyIHw9IHB1dF91c2VyKHN0YXQtPnNpemUsICZzdGF0YnVmLT5zdF9zaXplKTsKLQllcnIgfD0gcHV0X3VzZXIoc3RhdC0+YXRpbWUudHZfc2VjLCAmc3RhdGJ1Zi0+c3RfYXRpbWUpOwotCWVyciB8PSBwdXRfdXNlcihzdGF0LT5hdGltZS50dl9uc2VjLCAmc3RhdGJ1Zi0+c3RfYXRpbWVfbnNlYyk7Ci0JZXJyIHw9IHB1dF91c2VyKHN0YXQtPm10aW1lLnR2X3NlYywgJnN0YXRidWYtPnN0X210aW1lKTsKLQllcnIgfD0gcHV0X3VzZXIoc3RhdC0+bXRpbWUudHZfbnNlYywgJnN0YXRidWYtPnN0X210aW1lX25zZWMpOwotCWVyciB8PSBwdXRfdXNlcihzdGF0LT5jdGltZS50dl9zZWMsICZzdGF0YnVmLT5zdF9jdGltZSk7Ci0JZXJyIHw9IHB1dF91c2VyKHN0YXQtPmN0aW1lLnR2X25zZWMsICZzdGF0YnVmLT5zdF9jdGltZV9uc2VjKTsKLQllcnIgfD0gcHV0X3VzZXIoc3RhdC0+Ymxrc2l6ZSwgJnN0YXRidWYtPnN0X2Jsa3NpemUpOwotCWVyciB8PSBwdXRfdXNlcihzdGF0LT5ibG9ja3MsICZzdGF0YnVmLT5zdF9ibG9ja3MpOwotLyogZml4bWUKLQllcnIgfD0gcHV0X3VzZXIoMCwgJnN0YXRidWYtPl9fdW51c2VkNFswXSk7Ci0JZXJyIHw9IHB1dF91c2VyKDAsICZzdGF0YnVmLT5fX3VudXNlZDRbMV0pOwotKi8KLQlyZXR1cm4gZXJyOwotfQotCiBhc21saW5rYWdlIGxvbmcgc3lzMzJfc2NoZWRfcnJfZ2V0X2ludGVydmFsKGNvbXBhdF9waWRfdCBwaWQsCiAJCQkJc3RydWN0IGNvbXBhdF90aW1lc3BlYyBfX3VzZXIgKmludGVydmFsKQogewpAQCAtNTU3LDU3ICs1MDYsNiBAQAogCiAjZW5kaWYgIC8qIENPTkZJR19NT0RVTEVTICovCiAKLS8qIFRyYW5zbGF0aW9ucyBkdWUgdG8gdGltZV90IHNpemUgZGlmZmVyZW5jZXMuICBXaGljaCBhZmZlY3RzIGFsbAotICAgc29ydHMgb2YgdGhpbmdzLCBsaWtlIHRpbWV2YWwgYW5kIGl0aW1lcnZhbC4gICovCi0KLWV4dGVybiBzdHJ1Y3QgdGltZXpvbmUgc3lzX3R6OwotCi1hc21saW5rYWdlIGxvbmcgc3lzMzJfZ2V0dGltZW9mZGF5KHN0cnVjdCBjb21wYXRfdGltZXZhbCBfX3VzZXIgKnR2LCBzdHJ1Y3QgdGltZXpvbmUgX191c2VyICp0eikKLXsKLQlpZiAodHYpIHsKLQkJc3RydWN0IHRpbWV2YWwga3R2OwotCQlkb19nZXR0aW1lb2ZkYXkoJmt0dik7Ci0JCWlmIChwdXRfdHYzMih0diwgJmt0dikpCi0JCQlyZXR1cm4gLUVGQVVMVDsKLQl9Ci0JaWYgKHR6KSB7Ci0JCWlmIChjb3B5X3RvX3VzZXIodHosICZzeXNfdHosIHNpemVvZihzeXNfdHopKSkKLQkJCXJldHVybiAtRUZBVUxUOwotCX0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGlubGluZSBsb25nIGdldF90czMyKHN0cnVjdCB0aW1lc3BlYyAqbywgc3RydWN0IGNvbXBhdF90aW1ldmFsIF9fdXNlciAqaSkKLXsKLQlsb25nIHVzZWM7Ci0KLQlpZiAoIWFjY2Vzc19vayhWRVJJRllfUkVBRCwgaSwgc2l6ZW9mKCppKSkpCi0JCXJldHVybiAtRUZBVUxUOwotCWlmIChfX2dldF91c2VyKG8tPnR2X3NlYywgJmktPnR2X3NlYykpCi0JCXJldHVybiAtRUZBVUxUOwotCWlmIChfX2dldF91c2VyKHVzZWMsICZpLT50dl91c2VjKSkKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0Jby0+dHZfbnNlYyA9IHVzZWMgKiAxMDAwOwotCXJldHVybiAwOwotfQotCi1hc21saW5rYWdlIGxvbmcgc3lzMzJfc2V0dGltZW9mZGF5KHN0cnVjdCBjb21wYXRfdGltZXZhbCBfX3VzZXIgKnR2LCBzdHJ1Y3QgdGltZXpvbmUgX191c2VyICp0eikKLXsKLQlzdHJ1Y3QgdGltZXNwZWMga3RzOwotCXN0cnVjdCB0aW1lem9uZSBrdHo7Ci0KLSAJaWYgKHR2KSB7Ci0JCWlmIChnZXRfdHMzMigma3RzLCB0dikpCi0JCQlyZXR1cm4gLUVGQVVMVDsKLQl9Ci0JaWYgKHR6KSB7Ci0JCWlmIChjb3B5X2Zyb21fdXNlcigma3R6LCB0eiwgc2l6ZW9mKGt0eikpKQotCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JfQotCi0JcmV0dXJuIGRvX3N5c19zZXR0aW1lb2ZkYXkodHYgPyAma3RzIDogTlVMTCwgdHogPyAma3R6IDogTlVMTCk7Ci19Ci0KIGFzbWxpbmthZ2UgbG9uZyBzeXMzMl9wcmVhZDY0KHVuc2lnbmVkIGludCBmZCwgY2hhciBfX3VzZXIgKnVidWYsCiAJCQkJc2l6ZV90IGNvdW50LCB1MzIgcG9zaGksIHUzMiBwb3NsbykKIHsKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvY29tcGF0X2xpbnV4LmggYi9hcmNoL3MzOTAva2VybmVsL2NvbXBhdF9saW51eC5oCmluZGV4IDA1Zjg1MTYuLjgzNmEyODggMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rZXJuZWwvY29tcGF0X2xpbnV4LmgKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9jb21wYXRfbGludXguaApAQCAtMjAyLDEwICsyMDIsNiBAQAogbG9uZyBzeXMzMl9pbml0X21vZHVsZSh2b2lkIF9fdXNlciAqdW1vZCwgdW5zaWduZWQgbG9uZyBsZW4sCiAJCSAgICAgICBjb25zdCBjaGFyIF9fdXNlciAqdWFyZ3MpOwogbG9uZyBzeXMzMl9kZWxldGVfbW9kdWxlKGNvbnN0IGNoYXIgX191c2VyICpuYW1lX3VzZXIsIHVuc2lnbmVkIGludCBmbGFncyk7Ci1sb25nIHN5czMyX2dldHRpbWVvZmRheShzdHJ1Y3QgY29tcGF0X3RpbWV2YWwgX191c2VyICp0diwKLQkJCXN0cnVjdCB0aW1lem9uZSBfX3VzZXIgKnR6KTsKLWxvbmcgc3lzMzJfc2V0dGltZW9mZGF5KHN0cnVjdCBjb21wYXRfdGltZXZhbCBfX3VzZXIgKnR2LAotCQkJc3RydWN0IHRpbWV6b25lIF9fdXNlciAqdHopOwogbG9uZyBzeXMzMl9wcmVhZDY0KHVuc2lnbmVkIGludCBmZCwgY2hhciBfX3VzZXIgKnVidWYsIHNpemVfdCBjb3VudCwKIAkJICAgdTMyIHBvc2hpLCB1MzIgcG9zbG8pOwogbG9uZyBzeXMzMl9wd3JpdGU2NCh1bnNpZ25lZCBpbnQgZmQsIGNvbnN0IGNoYXIgX191c2VyICp1YnVmLApkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC9jb21wYXRfd3JhcHBlci5TIGIvYXJjaC9zMzkwL2tlcm5lbC9jb21wYXRfd3JhcHBlci5TCmluZGV4IGVlNTFjYTkuLmZjMmM5NzEgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rZXJuZWwvY29tcGF0X3dyYXBwZXIuUworKysgYi9hcmNoL3MzOTAva2VybmVsL2NvbXBhdF93cmFwcGVyLlMKQEAgLTMzMiwxNyArMzMyLDE3IEBACiAJbGxndHIJJXIzLCVyMwkJCSMgc3RydWN0IHJ1c2FnZV9lbXUzMSAqCiAJamcJY29tcGF0X3N5c19nZXRydXNhZ2UJIyBicmFuY2ggdG8gc3lzdGVtIGNhbGwKIAotCS5nbG9ibAlzeXMzMl9nZXR0aW1lb2ZkYXlfd3JhcHBlcgotc3lzMzJfZ2V0dGltZW9mZGF5X3dyYXBwZXI6CisJLmdsb2JsCWNvbXBhdF9zeXNfZ2V0dGltZW9mZGF5X3dyYXBwZXIKK2NvbXBhdF9zeXNfZ2V0dGltZW9mZGF5X3dyYXBwZXI6CiAJbGxndHIJJXIyLCVyMgkJCSMgc3RydWN0IHRpbWV2YWxfZW11MzEgKgogCWxsZ3RyCSVyMywlcjMJCQkjIHN0cnVjdCB0aW1lem9uZSAqCi0JamcJc3lzMzJfZ2V0dGltZW9mZGF5CSMgYnJhbmNoIHRvIHN5c3RlbSBjYWxsCisJamcJY29tcGF0X3N5c19nZXR0aW1lb2ZkYXkJIyBicmFuY2ggdG8gc3lzdGVtIGNhbGwKIAotCS5nbG9ibAlzeXMzMl9zZXR0aW1lb2ZkYXlfd3JhcHBlcgotc3lzMzJfc2V0dGltZW9mZGF5X3dyYXBwZXI6CisJLmdsb2JsCWNvbXBhdF9zeXNfc2V0dGltZW9mZGF5X3dyYXBwZXIKK2NvbXBhdF9zeXNfc2V0dGltZW9mZGF5X3dyYXBwZXI6CiAJbGxndHIJJXIyLCVyMgkJCSMgc3RydWN0IHRpbWV2YWxfZW11MzEgKgogCWxsZ3RyCSVyMywlcjMJCQkjIHN0cnVjdCB0aW1lem9uZSAqCi0JamcJc3lzMzJfc2V0dGltZW9mZGF5CSMgYnJhbmNoIHRvIHN5c3RlbSBjYWxsCisJamcJY29tcGF0X3N5c19zZXR0aW1lb2ZkYXkJIyBicmFuY2ggdG8gc3lzdGVtIGNhbGwKIAogCS5nbG9ibAlzeXMzMl9nZXRncm91cHMxNl93cmFwcGVyCiBzeXMzMl9nZXRncm91cHMxNl93cmFwcGVyOgpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC9zeXNjYWxscy5TIGIvYXJjaC9zMzkwL2tlcm5lbC9zeXNjYWxscy5TCmluZGV4IDNhZTMwMzkuLjJkNjE3ODcgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rZXJuZWwvc3lzY2FsbHMuUworKysgYi9hcmNoL3MzOTAva2VybmVsL3N5c2NhbGxzLlMKQEAgLTg2LDggKzg2LDggQEAKIFNZU0NBTEwoc3lzX3NldHJsaW1pdCxzeXNfc2V0cmxpbWl0LGNvbXBhdF9zeXNfc2V0cmxpbWl0X3dyYXBwZXIpCS8qIDc1ICovCiBTWVNDQUxMKHN5c19vbGRfZ2V0cmxpbWl0LHN5c19nZXRybGltaXQsY29tcGF0X3N5c19vbGRfZ2V0cmxpbWl0X3dyYXBwZXIpCiBTWVNDQUxMKHN5c19nZXRydXNhZ2Usc3lzX2dldHJ1c2FnZSxjb21wYXRfc3lzX2dldHJ1c2FnZV93cmFwcGVyKQotU1lTQ0FMTChzeXNfZ2V0dGltZW9mZGF5LHN5c19nZXR0aW1lb2ZkYXksc3lzMzJfZ2V0dGltZW9mZGF5X3dyYXBwZXIpCi1TWVNDQUxMKHN5c19zZXR0aW1lb2ZkYXksc3lzX3NldHRpbWVvZmRheSxzeXMzMl9zZXR0aW1lb2ZkYXlfd3JhcHBlcikKK1NZU0NBTEwoc3lzX2dldHRpbWVvZmRheSxzeXNfZ2V0dGltZW9mZGF5LGNvbXBhdF9zeXNfZ2V0dGltZW9mZGF5X3dyYXBwZXIpCitTWVNDQUxMKHN5c19zZXR0aW1lb2ZkYXksc3lzX3NldHRpbWVvZmRheSxjb21wYXRfc3lzX3NldHRpbWVvZmRheV93cmFwcGVyKQogU1lTQ0FMTChzeXNfZ2V0Z3JvdXBzMTYsc3lzX25pX3N5c2NhbGwsc3lzMzJfZ2V0Z3JvdXBzMTZfd3JhcHBlcikJLyogODAgb2xkIGdldGdyb3VwczE2IHN5c2NhbGwgKi8KIFNZU0NBTEwoc3lzX3NldGdyb3VwczE2LHN5c19uaV9zeXNjYWxsLHN5czMyX3NldGdyb3VwczE2X3dyYXBwZXIpCS8qIG9sZCBzZXRncm91cHMxNiBzeXNjYWxsICovCiBOSV9TWVNDQUxMCQkJCQkJCS8qIG9sZCBzZWxlY3Qgc3lzY2FsbCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2t2bS9wcml2LmMgYi9hcmNoL3MzOTAva3ZtL3ByaXYuYwppbmRleCBkMWZhZjVjLi5jY2U0MGZmIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva3ZtL3ByaXYuYworKysgYi9hcmNoL3MzOTAva3ZtL3ByaXYuYwpAQCAtMTU3LDggKzE1Nyw4IEBACiAJaW50IHJjOwogCiAJdmNwdS0+c3RhdC5pbnN0cnVjdGlvbl9zdGZsKys7Ci0JZmFjaWxpdHlfbGlzdCAmPSB+KDFVTDw8MjQpOyAvKiBubyBzdGZsZSAqLwotCWZhY2lsaXR5X2xpc3QgJj0gfigxVUw8PDIzKTsgLyogbm8gbGFyZ2UgcGFnZXMgKi8KKwkvKiBvbmx5IHBhc3MgdGhlIGZhY2lsaXR5IGJpdHMsIHdoaWNoIHdlIGNhbiBoYW5kbGUgKi8KKwlmYWNpbGl0eV9saXN0ICY9IDB4ZmUwMGZmZjM7CiAKIAlyYyA9IGNvcHlfdG9fZ3Vlc3QodmNwdSwgb2Zmc2V0b2Yoc3RydWN0IF9sb3djb3JlLCBzdGZsX2ZhY19saXN0KSwKIAkJCSAgICZmYWNpbGl0eV9saXN0LCBzaXplb2YoZmFjaWxpdHlfbGlzdCkpOwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL21tL2luaXQuYyBiL2FyY2gvczM5MC9tbS9pbml0LmMKaW5kZXggMTE2OTEzMC4uMTU4YjBkNiAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL21tL2luaXQuYworKysgYi9hcmNoL3MzOTAvbW0vaW5pdC5jCkBAIC0xODksMTQgKzE4OSwzIEBACiAJcmV0dXJuIHJjOwogfQogI2VuZGlmIC8qIENPTkZJR19NRU1PUllfSE9UUExVRyAqLwotCi0jaWZkZWYgQ09ORklHX01FTU9SWV9IT1RSRU1PVkUKLWludCByZW1vdmVfbWVtb3J5KHU2NCBzdGFydCwgdTY0IHNpemUpCi17Ci0JdW5zaWduZWQgbG9uZyBzdGFydF9wZm4sIGVuZF9wZm47Ci0KLQlzdGFydF9wZm4gPSBQRk5fRE9XTihzdGFydCk7Ci0JZW5kX3BmbiA9IHN0YXJ0X3BmbiArIFBGTl9ET1dOKHNpemUpOwotCXJldHVybiBvZmZsaW5lX3BhZ2VzKHN0YXJ0X3BmbiwgZW5kX3BmbiwgMTIwICogSFopOwotfQotI2VuZGlmIC8qIENPTkZJR19NRU1PUllfSE9UUkVNT1ZFICovCmRpZmYgLS1naXQgYS9hcmNoL3NoL0tjb25maWcgYi9hcmNoL3NoL0tjb25maWcKaW5kZXggNTEzMWQ1MC4uY2IyYzg3ZCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9LY29uZmlnCisrKyBiL2FyY2gvc2gvS2NvbmZpZwpAQCAtMTIsNiArMTIsNyBAQAogCXNlbGVjdCBIQVZFX0lERQogCXNlbGVjdCBIQVZFX09QUk9GSUxFCiAJc2VsZWN0IEhBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQKKwlzZWxlY3QgSEFWRV9JT1JFTUFQX1BST1QgaWYgTU1VCiAJaGVscAogCSAgVGhlIFN1cGVySCBpcyBhIFJJU0MgcHJvY2Vzc29yIHRhcmdldGVkIGZvciB1c2UgaW4gZW1iZWRkZWQgc3lzdGVtcwogCSAgYW5kIGNvbnN1bWVyIGVsZWN0cm9uaWNzOyBpdCB3YXMgYWxzbyB1c2VkIGluIHRoZSBTZWdhIERyZWFtY2FzdApAQCAtMjAsNiArMjEsMTAgQEAKIAogY29uZmlnIFNVUEVSSDMyCiAJZGVmX2Jvb2wgIVNVUEVSSDY0CisJc2VsZWN0IEhBVkVfS1BST0JFUworCXNlbGVjdCBIQVZFX0tSRVRQUk9CRVMKKwlzZWxlY3QgSEFWRV9BUkNIX1RSQUNFSE9PSworCXNlbGVjdCBIQVZFX0ZUUkFDRQogCiBjb25maWcgU1VQRVJINjQKIAlkZWZfYm9vbCB5IGlmIENQVV9TSDUKQEAgLTU0LDggKzU5LDExIEBACiBjb25maWcgR0VORVJJQ19JUlFfUFJPQkUKIAlkZWZfYm9vbCB5CiAKK2NvbmZpZyBHRU5FUklDX0dQSU8KKwlkZWZfYm9vbCBuCisKIGNvbmZpZyBHRU5FUklDX0NBTElCUkFURV9ERUxBWQotCWRlZl9ib29sIHkKKwlib29sCiAKIGNvbmZpZyBHRU5FUklDX0lPTUFQCiAJYm9vbApAQCAtNjYsNiArNzQsOSBAQAogY29uZmlnIEdFTkVSSUNfQ0xPQ0tFVkVOVFMKIAlkZWZfYm9vbCBuCiAKK2NvbmZpZyBHRU5FUklDX0NMT0NLRVZFTlRTX0JST0FEQ0FTVAorCWJvb2wKKwogY29uZmlnIEdFTkVSSUNfTE9DS0JSRUFLCiAJZGVmX2Jvb2wgeQogCWRlcGVuZHMgb24gU01QICYmIFBSRUVNUFQKQEAgLTkyLDYgKzEwMywxMCBAQAogY29uZmlnIExPQ0tERVBfU1VQUE9SVAogCWRlZl9ib29sIHkKIAorY29uZmlnIEhBVkVfTEFURU5DWVRPUF9TVVBQT1JUCisJZGVmX2Jvb2wgeQorCWRlcGVuZHMgb24gIVNNUAorCiBjb25maWcgQVJDSF9IQVNfSUxPRzJfVTMyCiAJZGVmX2Jvb2wgbgogCkBAIC0xMDYsNiArMTIxLDggQEAKIAogc291cmNlICJpbml0L0tjb25maWciCiAKK3NvdXJjZSAia2VybmVsL0tjb25maWcuZnJlZXplciIKKwogbWVudSAiU3lzdGVtIHR5cGUiCiAKICMKQEAgLTMyMyw2ICszNDAsNyBAQAogCXNlbGVjdCBBUkNIX1NQQVJTRU1FTV9FTkFCTEUKIAlzZWxlY3QgU1lTX1NVUFBPUlRTX05VTUEKIAlzZWxlY3QgU1lTX1NVUFBPUlRTX1NNUAorCXNlbGVjdCBHRU5FUklDX0NMT0NLRVZFTlRTX0JST0FEQ0FTVCBpZiBTTVAKIAogIyBTSDRBTC1EU1AgUHJvY2Vzc29yIFN1cHBvcnQKIApAQCAtNDkwLDcgKzUwOCw2IEBACiBjb25maWcgU0VDQ09NUAogCWJvb2wgIkVuYWJsZSBzZWNjb21wIHRvIHNhZmVseSBjb21wdXRlIHVudHJ1c3RlZCBieXRlY29kZSIKIAlkZXBlbmRzIG9uIFBST0NfRlMKLQlkZWZhdWx0IHkKIAloZWxwCiAJICBUaGlzIGtlcm5lbCBmZWF0dXJlIGlzIHVzZWZ1bCBmb3IgbnVtYmVyIGNydW5jaGluZyBhcHBsaWNhdGlvbnMKIAkgIHRoYXQgbWF5IG5lZWQgdG8gY29tcHV0ZSB1bnRydXN0ZWQgYnl0ZWNvZGUgZHVyaW5nIHRoZWlyCmRpZmYgLS1naXQgYS9hcmNoL3NoL0tjb25maWcuZGVidWcgYi9hcmNoL3NoL0tjb25maWcuZGVidWcKaW5kZXggNGQyZDEwMi4uZTZkMmM4YiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9LY29uZmlnLmRlYnVnCisrKyBiL2FyY2gvc2gvS2NvbmZpZy5kZWJ1ZwpAQCAtODIsNyArODIsNyBAQAogCiBjb25maWcgNEtTVEFDS1MKIAlib29sICJVc2UgNEtiIGZvciBrZXJuZWwgc3RhY2tzIGluc3RlYWQgb2YgOEtiIgotCWRlcGVuZHMgb24gREVCVUdfS0VSTkVMICYmIChNTVUgfHwgQlJPS0VOKQorCWRlcGVuZHMgb24gREVCVUdfS0VSTkVMICYmIChNTVUgfHwgQlJPS0VOKSAmJiAhUEFHRV9TSVpFXzY0S0IKIAloZWxwCiAJICBJZiB5b3Ugc2F5IFkgaGVyZSB0aGUga2VybmVsIHdpbGwgdXNlIGEgNEtiIHN0YWNrc2l6ZSBmb3IgdGhlCiAJICBrZXJuZWwgc3RhY2sgYXR0YWNoZWQgdG8gZWFjaCBwcm9jZXNzL3RocmVhZC4gVGhpcyBmYWNpbGl0YXRlcwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9NYWtlZmlsZSBiL2FyY2gvc2gvTWFrZWZpbGUKaW5kZXggMDFkODVjNy4uMWY0MDliZiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9NYWtlZmlsZQorKysgYi9hcmNoL3NoL01ha2VmaWxlCkBAIC03Niw4ICs3NiwxMCBAQAogIyBlcnJvciBtZXNzYWdlcyBkdXJpbmcgbGlua2luZy4KICMKIGlmZGVmIENPTkZJR19TVVBFUkgzMgorVVRTX01BQ0hJTkUJOj0gc2gKIExERkxBR1Nfdm1saW51eAkrPSAtZSBfc3RleHQKIGVsc2UKK1VUU19NQUNISU5FCTo9IHNoNjQKIExERkxBR1Nfdm1saW51eAkrPSAtLWRlZnN5bSBwaHlzX3N0ZXh0PV9zdGV4dC0kKENPTkZJR19QQUdFX09GRlNFVCkgXAogCQkgICAtLWRlZnN5bSBwaHlzX3N0ZXh0X3NobWVkaWE9cGh5c19zdGV4dCsxIFwKIAkJICAgLWUgcGh5c19zdGV4dF9zaG1lZGlhCkBAIC0xMjMsNiArMTI1LDkgQEAKIAkgICAgICQoZmlsdGVyLW91dCAuLCAkKHBhdHN1YnN0ICUsJS8sJChtYWNoZGlyLXkpKSkpCiBlbmRpZgogCisjIENvbW1vbiBtYWNoaW5lIHR5cGUgaGVhZGVycy4gTm90IHBhcnQgb2YgdGhlIGFyY2gvc2gvYm9hcmRzLyBoaWVyYXJjaHkuCittYWNoZGlyLXkJKz0gbWFjaC1jb21tb24KKwogIyBDb21wYW5pb24gY2hpcHMKIGNvcmUtJChDT05GSUdfSEQ2NDQ2WF9TRVJJRVMpCSs9IGFyY2gvc2gvY2NoaXBzL2hkNjQ0NngvCiAKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL0tjb25maWcgYi9hcmNoL3NoL2JvYXJkcy9LY29uZmlnCmluZGV4IGFlMTk0ODYuLjUwNDY3ZjkgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL0tjb25maWcKKysrIGIvYXJjaC9zaC9ib2FyZHMvS2NvbmZpZwpAQCAtMTI4LDYgKzEyOCw3IEBACiAKIGNvbmZpZyBTSF9SU0s3MjAzCiAJYm9vbCAiUlNLNzIwMyIKKwlzZWxlY3QgR0VORVJJQ19HUElPCiAJZGVwZW5kcyBvbiBDUFVfU1VCVFlQRV9TSDcyMDMKIAogY29uZmlnIFNIX1NESzc3ODAKQEAgLTE2Miw2ICsxNjMsNyBAQAogY29uZmlnIFNIX01JR09SCiAJYm9vbCAiTWlnby1SIgogCWRlcGVuZHMgb24gQ1BVX1NVQlRZUEVfU0g3NzIyCisJc2VsZWN0IEdFTkVSSUNfR1BJTwogCWhlbHAKIAkgIFNlbGVjdCBNaWdvLVIgaWYgY29uZmlndXJpbmcgZm9yIHRoZSBTSDc3MjIgTWlnby1SIHBsYXRmb3JtCiAgICAgICAgICAgYnkgUmVuZXNhcyBTeXN0ZW0gU29sdXRpb25zIEFzaWEgUHRlLiBMdGQuCkBAIC0xNjksNiArMTcxLDcgQEAKIGNvbmZpZyBTSF9BUDMyNVJYQQogCWJvb2wgIkFQLTMyNVJYQSIKIAlkZXBlbmRzIG9uIENQVV9TVUJUWVBFX1NINzcyMworCXNlbGVjdCBHRU5FUklDX0dQSU8KIAloZWxwCiAJICBSZW5lc2FzICJBUC0zMjVSWEEiIHN1cHBvcnQuCiAJICBDb21wYXRpYmxlIHdpdGggQUxHTyBTWVNURU0gQ08uLExURC4gIkFQLTMyMEEiCkBAIC0xODQsNiArMTg3LDEzIEBACiAJYm9vbCAiRURPU0s3NzA1IgogCWRlcGVuZHMgb24gQ1BVX1NVQlRZUEVfU0g3NzA1CiAKK2NvbmZpZyBTSF9FRE9TSzc3NjAKKwlib29sICJFRE9TSzc3NjAiCisJZGVwZW5kcyBvbiBDUFVfU1VCVFlQRV9TSDc3NjAKKwloZWxwCisJICBTZWxlY3QgaWYgY29uZmlndXJpbmcgZm9yIGEgUmVuZXNhcyBFRE9TSzc3NjAKKwkgIGV2YWx1YXRpb24gYm9hcmQuCisKIGNvbmZpZyBTSF9TSDQyMDJfTUlDUk9ERVYKIAlib29sICJTSDQtMjAyIE1pY3JvRGV2IgogCWRlcGVuZHMgb24gQ1BVX1NVQlRZUEVfU0g0XzIwMgpAQCAtMjI4LDYgKzIzOCw3IEBACiBjb25maWcgU0hfTUFHSUNfUEFORUxfUjIKIAlib29sICJNYWdpYyBQYW5lbCBSMiIKIAlkZXBlbmRzIG9uIENQVV9TVUJUWVBFX1NINzcyMAorCXNlbGVjdCBHRU5FUklDX0dQSU8KIAloZWxwCiAJICBTZWxlY3QgTWFnaWMgUGFuZWwgUjIgaWYgY29uZmlndXJpbmcgZm9yIE1hZ2ljIFBhbmVsIFIyLgogCmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9NYWtlZmlsZSBiL2FyY2gvc2gvYm9hcmRzL01ha2VmaWxlCmluZGV4IDQ2MzAyMmMuLmQ5ZWZhMzkgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL01ha2VmaWxlCisrKyBiL2FyY2gvc2gvYm9hcmRzL01ha2VmaWxlCkBAIC02LDMgKzYsNCBAQAogb2JqLSQoQ09ORklHX1NIX1JTSzcyMDMpCSs9IGJvYXJkLXJzazcyMDMubwogb2JqLSQoQ09ORklHX1NIX1NINzc4NUxDUikJKz0gYm9hcmQtc2g3Nzg1bGNyLm8KIG9iai0kKENPTkZJR19TSF9TSE1JTikJCSs9IGJvYXJkLXNobWluLm8KK29iai0kKENPTkZJR19TSF9FRE9TSzc3NjApCSs9IGJvYXJkLWVkb3NrNzc2MC5vCmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9ib2FyZC1hcDMyNXJ4YS5jIGIvYXJjaC9zaC9ib2FyZHMvYm9hcmQtYXAzMjVyeGEuYwppbmRleCBmZDE2MTI1Li43Yzc4NzRlIDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9ib2FyZC1hcDMyNXJ4YS5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL2JvYXJkLWFwMzI1cnhhLmMKQEAgLTE4LDExICsxOCwxMyBAQAogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvaTJjLmg+CiAjaW5jbHVkZSA8bGludXgvc21jOTExeC5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KICNpbmNsdWRlIDxtZWRpYS9zb2NfY2FtZXJhX3BsYXRmb3JtLmg+CiAjaW5jbHVkZSA8bWVkaWEvc2hfbW9iaWxlX2NldS5oPgotI2luY2x1ZGUgPGFzbS9zaF9tb2JpbGVfbGNkYy5oPgorI2luY2x1ZGUgPHZpZGVvL3NoX21vYmlsZV9sY2RjLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL2Nsb2NrLmg+CisjaW5jbHVkZSA8Y3B1L3NoNzcyMy5oPgogCiBzdGF0aWMgc3RydWN0IHNtYzkxMXhfcGxhdGRhdGEgc21jOTExeF9pbmZvID0gewogCS5mbGFncyA9IFNNQzkxMVhfVVNFXzMyQklULApAQCAtNTIsMjAgKzU0LDMzIEBACiAJfSwKIH07CiAKKy8qCisgKiBBUDMyMCBhbmQgQVAzMjVSWEEgaGFzIENQTEQgZGF0YSBpbiBOT1IgRmxhc2goMHhBODAwMDAtMHhBQkZGRkYpLgorICogSWYgdGhpcyBhcmVhIGVyYXNlZCwgdGhpcyBib2FyZCBjYW4gbm90IGJvb3QuCisgKi8KIHN0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiBhcDMyNXJ4YV9ub3JfZmxhc2hfcGFydGl0aW9uc1tdID0gewogCXsKLQkJIC5uYW1lID0gInVib290IiwKLQkJIC5vZmZzZXQgPSAwLAotCQkgLnNpemUgPSAoMSAqIDEwMjQgKiAxMDI0KSwKLQkJIC5tYXNrX2ZsYWdzID0gTVREX1dSSVRFQUJMRSwJLyogUmVhZC1vbmx5ICovCisJCS5uYW1lID0gInVib290IiwKKwkJLm9mZnNldCA9IDAsCisJCS5zaXplID0gKDEgKiAxMDI0ICogMTAyNCksCisJCS5tYXNrX2ZsYWdzID0gTVREX1dSSVRFQUJMRSwJLyogUmVhZC1vbmx5ICovCiAJfSwgewotCQkgLm5hbWUgPSAia2VybmVsIiwKLQkJIC5vZmZzZXQgPSBNVERQQVJUX09GU19BUFBFTkQsCi0JCSAuc2l6ZSA9ICgyICogMTAyNCAqIDEwMjQpLAorCQkubmFtZSA9ICJrZXJuZWwiLAorCQkub2Zmc2V0ID0gTVREUEFSVF9PRlNfQVBQRU5ELAorCQkuc2l6ZSA9ICgyICogMTAyNCAqIDEwMjQpLAogCX0sIHsKLQkJIC5uYW1lID0gIm90aGVyIiwKLQkJIC5vZmZzZXQgPSBNVERQQVJUX09GU19BUFBFTkQsCi0JCSAuc2l6ZSA9IE1URFBBUlRfU0laX0ZVTEwsCisJCS5uYW1lID0gImZyZWUtYXJlYTAiLAorCQkub2Zmc2V0ID0gTVREUEFSVF9PRlNfQVBQRU5ELAorCQkuc2l6ZSA9ICgoNyAqIDEwMjQgKiAxMDI0KSArICg1MTIgKiAxMDI0KSksCisJfSwgeworCQkubmFtZSA9ICJDUExELURhdGEiLAorCQkub2Zmc2V0ID0gTVREUEFSVF9PRlNfQVBQRU5ELAorCQkubWFza19mbGFncyA9IE1URF9XUklURUFCTEUsCS8qIFJlYWQtb25seSAqLworCQkuc2l6ZSA9ICgxMDI0ICogMTI4ICogMiksCisJfSwgeworCQkubmFtZSA9ICJmcmVlLWFyZWExIiwKKwkJLm9mZnNldCA9IE1URFBBUlRfT0ZTX0FQUEVORCwKKwkJLnNpemUgPSBNVERQQVJUX1NJWl9GVUxMLAogCX0sCiB9OwogCkBAIC05NiwxNyArMTExLDcgQEAKICNkZWZpbmUgRlBHQV9MQ0RSRUcJMHhCNDEwMDE4MAogI2RlZmluZSBGUEdBX0JLTFJFRwkweEI0MTAwMjEyCiAjZGVmaW5lIEZQR0FfTENEUkVHX1ZBTAkweDAwMTgKLSNkZWZpbmUgUE9SVF9QSENSCTB4QTQwNTAxMEUKLSNkZWZpbmUgUE9SVF9QTENSCTB4QTQwNTAxMTQKLSNkZWZpbmUgUE9SVF9QTUNSCTB4QTQwNTAxMTYKLSNkZWZpbmUgUE9SVF9QUkNSCTB4QTQwNTAxMUMKLSNkZWZpbmUgUE9SVF9QU0NSCTB4QTQwNTAxMUUKLSNkZWZpbmUgUE9SVF9QWkNSCTB4QTQwNTAxNEMKLSNkZWZpbmUgUE9SVF9ISVpDUkEJMHhBNDA1MDE1OAogI2RlZmluZSBQT1JUX01TRUxDUkIJMHhBNDA1MDE4MgotI2RlZmluZSBQT1JUX1BTRFIJMHhBNDA1MDEzRQotI2RlZmluZSBQT1JUX1BaRFIJMHhBNDA1MDE2QwotI2RlZmluZSBQT1JUX1BTRUxECTB4QTQwNTAxNTQKIAogc3RhdGljIHZvaWQgYXAzMjBfd3ZnYV9wb3dlcl9vbih2b2lkICpib2FyZF9kYXRhKQogewpAQCAtMTE2LDggKzEyMSw3IEBACiAJY3RybF9vdXR3KEZQR0FfTENEUkVHX1ZBTCwgRlBHQV9MQ0RSRUcpOwogCiAJLyogYmFja2xpZ2h0ICovCi0JY3RybF9vdXR3KChjdHJsX2ludyhQT1JUX1BTQ1IpICYgfjB4MDBDMCkgfCAweDQwLCBQT1JUX1BTQ1IpOwotCWN0cmxfb3V0YihjdHJsX2luYihQT1JUX1BTRFIpICYgfjB4MDgsIFBPUlRfUFNEUik7CisJZ3Bpb19zZXRfdmFsdWUoR1BJT19QVFMzLCAwKTsKIAljdHJsX291dHcoMHgxMDAsIEZQR0FfQktMUkVHKTsKIH0KIApAQCAtMjgxLDEyICsyODUsODQgQEAKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gX19pbml0ZGF0YSBhcDMyNXJ4YV9pMmNfZGV2aWNlc1tdID0geworCXsKKwkJSTJDX0JPQVJEX0lORk8oInBjZjg1NjMiLCAweDUxKSwKKwl9LAogfTsKIAogc3RhdGljIGludCBfX2luaXQgYXAzMjVyeGFfZGV2aWNlc19zZXR1cCh2b2lkKQogewotCWNsa19hbHdheXNfZW5hYmxlKCJtc3RwMjAwIik7IC8qIExDREMgKi8KLQljbGtfYWx3YXlzX2VuYWJsZSgibXN0cDIwMyIpOyAvKiBDRVUgKi8KKwkvKiBMRDMgYW5kIExENCBMRURzICovCisJZ3Bpb19yZXF1ZXN0KEdQSU9fUFRYNSwgTlVMTCk7IC8qIFJVTiAqLworCWdwaW9fZGlyZWN0aW9uX291dHB1dChHUElPX1BUWDUsIDEpOworCWdwaW9fZXhwb3J0KEdQSU9fUFRYNSwgMCk7CisKKwlncGlvX3JlcXVlc3QoR1BJT19QVFg0LCBOVUxMKTsgLyogSU5ESUNBVE9SICovCisJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KEdQSU9fUFRYNCwgMCk7CisJZ3Bpb19leHBvcnQoR1BJT19QVFg0LCAwKTsKKworCS8qIFNXMSBpbnB1dCAqLworCWdwaW9fcmVxdWVzdChHUElPX1BURjcsIE5VTEwpOyAvKiBNT0RFICovCisJZ3Bpb19kaXJlY3Rpb25faW5wdXQoR1BJT19QVEY3KTsKKwlncGlvX2V4cG9ydChHUElPX1BURjcsIDApOworCisJLyogTENEQyAqLworCWNsa19hbHdheXNfZW5hYmxlKCJtc3RwMjAwIik7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fTENERDE1LCBOVUxMKTsKKwlncGlvX3JlcXVlc3QoR1BJT19GTl9MQ0REMTQsIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX0xDREQxMywgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fTENERDEyLCBOVUxMKTsKKwlncGlvX3JlcXVlc3QoR1BJT19GTl9MQ0REMTEsIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX0xDREQxMCwgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fTENERDksIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX0xDREQ4LCBOVUxMKTsKKwlncGlvX3JlcXVlc3QoR1BJT19GTl9MQ0RENywgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fTENERDYsIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX0xDREQ1LCBOVUxMKTsKKwlncGlvX3JlcXVlc3QoR1BJT19GTl9MQ0RENCwgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fTENERDMsIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX0xDREQyLCBOVUxMKTsKKwlncGlvX3JlcXVlc3QoR1BJT19GTl9MQ0REMSwgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fTENERDAsIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX0xDRExDTEtfUFRSLCBOVUxMKTsKKwlncGlvX3JlcXVlc3QoR1BJT19GTl9MQ0REQ0ssIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX0xDRFZFUFdDLCBOVUxMKTsKKwlncGlvX3JlcXVlc3QoR1BJT19GTl9MQ0RWQ1BXQywgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fTENEVlNZTiwgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fTENESFNZTiwgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fTENERElTUCwgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fTENERE9OLCBOVUxMKTsKKworCS8qIExDRCBiYWNrbGlnaHQgKi8KKwlncGlvX3JlcXVlc3QoR1BJT19QVFMzLCBOVUxMKTsKKwlncGlvX2RpcmVjdGlvbl9vdXRwdXQoR1BJT19QVFMzLCAxKTsKKworCS8qIENFVSAqLworCWNsa19hbHdheXNfZW5hYmxlKCJtc3RwMjAzIik7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fVklPX0NMSzIsIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX1ZJT19WRDIsIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX1ZJT19IRDIsIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX1ZJT19GTEQsIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX1ZJT19DS08sIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX1ZJT19EMTUsIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX1ZJT19EMTQsIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX1ZJT19EMTMsIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX1ZJT19EMTIsIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX1ZJT19EMTEsIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX1ZJT19EMTAsIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX1ZJT19EOSwgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fVklPX0Q4LCBOVUxMKTsKKworCWdwaW9fcmVxdWVzdChHUElPX1BUWjcsIE5VTEwpOworCWdwaW9fZGlyZWN0aW9uX291dHB1dChHUElPX1BUWjcsIDApOyAvKiBPRV9DQU0gKi8KKwlncGlvX3JlcXVlc3QoR1BJT19QVFo2LCBOVUxMKTsKKwlncGlvX2RpcmVjdGlvbl9vdXRwdXQoR1BJT19QVFo2LCAwKTsgLyogU1RCWV9DQU0gKi8KKwlncGlvX3JlcXVlc3QoR1BJT19QVFo1LCBOVUxMKTsKKwlncGlvX2RpcmVjdGlvbl9vdXRwdXQoR1BJT19QVFo1LCAxKTsgLyogUlNUX0NBTSAqLworCWdwaW9fcmVxdWVzdChHUElPX1BUWjQsIE5VTEwpOworCWdwaW9fZGlyZWN0aW9uX291dHB1dChHUElPX1BUWjQsIDApOyAvKiBTQUREUiAqLworCisJY3RybF9vdXR3KGN0cmxfaW53KFBPUlRfTVNFTENSQikgJiB+MHgwMDAxLCBQT1JUX01TRUxDUkIpOwogCiAJcGxhdGZvcm1fcmVzb3VyY2Vfc2V0dXBfbWVtb3J5KCZjZXVfZGV2aWNlLCAiY2V1IiwgNCA8PCAyMCk7CiAKQEAgLTMwMCwxOCArMzc2LDYgQEAKIAogc3RhdGljIHZvaWQgX19pbml0IGFwMzI1cnhhX3NldHVwKGNoYXIgKipjbWRsaW5lX3ApCiB7Ci0JLyogTENEQyBjb25maWd1cmF0aW9uICovCi0JY3RybF9vdXR3KGN0cmxfaW53KFBPUlRfUEhDUikgJiB+MHhmZmZmLCBQT1JUX1BIQ1IpOwotCWN0cmxfb3V0dyhjdHJsX2ludyhQT1JUX1BMQ1IpICYgfjB4ZmZmZiwgUE9SVF9QTENSKTsKLQljdHJsX291dHcoY3RybF9pbncoUE9SVF9QTUNSKSAmIH4weGZmZmYsIFBPUlRfUE1DUik7Ci0JY3RybF9vdXR3KGN0cmxfaW53KFBPUlRfUFJDUikgJiB+MHgwM2ZmLCBQT1JUX1BSQ1IpOwotCWN0cmxfb3V0dyhjdHJsX2ludyhQT1JUX0hJWkNSQSkgJiB+MHgwMUMwLCBQT1JUX0hJWkNSQSk7Ci0KLQkvKiBDRVUgKi8KLQljdHJsX291dHcoY3RybF9pbncoUE9SVF9NU0VMQ1JCKSAmIH4weDAwMDEsIFBPUlRfTVNFTENSQik7Ci0JY3RybF9vdXR3KGN0cmxfaW53KFBPUlRfUFNFTEQpICYgfjB4MDAwMywgUE9SVF9QU0VMRCk7Ci0JY3RybF9vdXR3KChjdHJsX2ludyhQT1JUX1BaQ1IpICYgfjB4ZmYwMCkgfCAweDU1MDAsIFBPUlRfUFpDUik7Ci0JY3RybF9vdXRiKChjdHJsX2luYihQT1JUX1BaRFIpICYgfjB4ZjApIHwgMHgyMCwgUE9SVF9QWkRSKTsKIH0KIAogc3RhdGljIHN0cnVjdCBzaF9tYWNoaW5lX3ZlY3RvciBtdl9hcDMyNXJ4YSBfX2luaXRtdiA9IHsKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL2JvYXJkLWVkb3NrNzc2MC5jIGIvYXJjaC9zaC9ib2FyZHMvYm9hcmQtZWRvc2s3NzYwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzVkYzA5OQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvc2gvYm9hcmRzL2JvYXJkLWVkb3NrNzc2MC5jCkBAIC0wLDAgKzEsMTkzIEBACisvKgorICogUmVuZXNhcyBFdXJvcGUgRURPU0s3NzYwIEJvYXJkIFN1cHBvcnQKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggU1BFUyBTb2NpZXRhJyBQcm9nZXR0YXppb25lIEVsZXR0cm9uaWNhIGUgU29mdHdhcmUgTHRkLgorICogQXV0aG9yOiBMdWNhIFNhbnRpbmkgPGx1Y2Euc2FudGluaUBzcGVzb25saW5lLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NtYzkxeC5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9waHlzbWFwLmg+CisjaW5jbHVkZSA8YXNtL21hY2h2ZWMuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vYWRkcnNwYWNlLmg+CisjaW5jbHVkZSA8YXNtL2RlbGF5Lmg+CisjaW5jbHVkZSA8YXNtL2kyYy1zaDc3NjAuaD4KKyNpbmNsdWRlIDxhc20vc2l6ZXMuaD4KKworLyogQnVzIHN0YXRlIGNvbnRyb2xsZXIgcmVnaXN0ZXJzIGZvciBDUzQgYXJlYSAqLworI2RlZmluZSBCU0NfQ1M0QkNSCTB4QTRGRDAwMTAKKyNkZWZpbmUgQlNDX0NTNFdDUgkweEE0RkQwMDMwCisKKyNkZWZpbmUgU01DX0lPQkFTRQkweEEyMDAwMDAwCisjZGVmaW5lIFNNQ19JT19PRkZTRVQJMHgzMDAKKyNkZWZpbmUgU01DX0lPQUREUgkoU01DX0lPQkFTRSArIFNNQ19JT19PRkZTRVQpCisKKyNkZWZpbmUgRVRIRVJORVRfSVJRCTUKKworLyogTk9SIGZsYXNoICovCitzdGF0aWMgc3RydWN0IG10ZF9wYXJ0aXRpb24gZWRvc2s3NzYwX25vcl9mbGFzaF9wYXJ0aXRpb25zW10gPSB7CisJeworCQkubmFtZSA9ICJib290bG9hZGVyIiwKKwkJLm9mZnNldCA9IDAsCisJCS5zaXplID0gU1pfMjU2SywKKwkJLm1hc2tfZmxhZ3MgPSBNVERfV1JJVEVBQkxFLAkvKiBSZWFkLW9ubHkgKi8KKwl9LCB7CisJCS5uYW1lID0gImtlcm5lbCIsCisJCS5vZmZzZXQgPSBNVERQQVJUX09GU19BUFBFTkQsCisJCS5zaXplID0gU1pfMk0sCisJfSwgeworCQkubmFtZSA9ICJmcyIsCisJCS5vZmZzZXQgPSBNVERQQVJUX09GU19BUFBFTkQsCisJCS5zaXplID0gU1pfMjZNLAorCX0sIHsKKwkJLm5hbWUgPSAib3RoZXIiLAorCQkub2Zmc2V0ID0gTVREUEFSVF9PRlNfQVBQRU5ELAorCQkuc2l6ZSA9IE1URFBBUlRfU0laX0ZVTEwsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGh5c21hcF9mbGFzaF9kYXRhIGVkb3NrNzc2MF9ub3JfZmxhc2hfZGF0YSA9IHsKKwkud2lkdGgJCT0gNCwKKwkucGFydHMJCT0gZWRvc2s3NzYwX25vcl9mbGFzaF9wYXJ0aXRpb25zLAorCS5ucl9wYXJ0cwk9IEFSUkFZX1NJWkUoZWRvc2s3NzYwX25vcl9mbGFzaF9wYXJ0aXRpb25zKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgZWRvc2s3NzYwX25vcl9mbGFzaF9yZXNvdXJjZXNbXSA9IHsKKwlbMF0gPSB7CisJCS5uYW1lCT0gIk5PUiBGbGFzaCIsCisJCS5zdGFydAk9IDB4MDAwMDAwMDAsCisJCS5lbmQJPSAweDAwMDAwMDAwICsgU1pfMzJNIC0gMSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfQorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgZWRvc2s3NzYwX25vcl9mbGFzaF9kZXZpY2UgPSB7CisJLm5hbWUJCT0gInBoeXNtYXAtZmxhc2giLAorCS5yZXNvdXJjZQk9IGVkb3NrNzc2MF9ub3JfZmxhc2hfcmVzb3VyY2VzLAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShlZG9zazc3NjBfbm9yX2ZsYXNoX3Jlc291cmNlcyksCisJLmRldgkJPSB7CisJCS5wbGF0Zm9ybV9kYXRhID0gJmVkb3NrNzc2MF9ub3JfZmxhc2hfZGF0YSwKKwl9LAorfTsKKworLyogaTJjIGluaXRpYWxpemF0aW9uIGZ1bmN0aW9ucyAqLworc3RhdGljIHN0cnVjdCBzaDc3NjBfaTJjX3BsYXRkYXRhIGkyY19wZCA9IHsKKwkuc3BlZWRfa2h6CT0gNDAwLAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzaDc3NjBfaTJjMV9yZXNbXSA9IHsKKwl7CisJCS5zdGFydAk9IFNINzc2MF9JMkMxX01NSU8sCisJCS5lbmQJPSBTSDc3NjBfSTJDMV9NTUlPRU5ELAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LHsKKwkJLnN0YXJ0CT0gU0g3NzYwX0kyQzFfSVJRLAorCQkuZW5kCT0gU0g3NzYwX0kyQzFfSVJRLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugc2g3NzYwX2kyYzFfZGV2ID0geworCS5kZXYgICAgPSB7CisJCS5wbGF0Zm9ybV9kYXRhCT0gJmkyY19wZCwKKwl9LAorCisJLm5hbWUJCT0gU0g3NzYwX0kyQ19ERVZOQU1FLAorCS5pZAkJPSAxLAorCS5yZXNvdXJjZQk9IHNoNzc2MF9pMmMxX3JlcywKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoc2g3NzYwX2kyYzFfcmVzKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugc2g3NzYwX2kyYzBfcmVzW10gPSB7CisJeworCQkuc3RhcnQJPSBTSDc3NjBfSTJDMF9NTUlPLAorCQkuZW5kCT0gU0g3NzYwX0kyQzBfTU1JT0VORCwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwgeworCQkuc3RhcnQJPSBTSDc3NjBfSTJDMF9JUlEsCisJCS5lbmQJPSBTSDc3NjBfSTJDMF9JUlEsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBzaDc3NjBfaTJjMF9kZXYgPSB7CisJLmRldiAgICA9IHsKKwkJLnBsYXRmb3JtX2RhdGEJPSAmaTJjX3BkLAorCX0sCisJLm5hbWUJCT0gU0g3NzYwX0kyQ19ERVZOQU1FLAorCS5pZAkJPSAwLAorCS5yZXNvdXJjZQk9IHNoNzc2MF9pMmMwX3JlcywKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoc2g3NzYwX2kyYzBfcmVzKSwKK307CisKKy8qIGV0aCBpbml0aWFsaXphdGlvbiBmdW5jdGlvbnMgKi8KK3N0YXRpYyBzdHJ1Y3Qgc21jOTF4X3BsYXRkYXRhIHNtYzkxeF9pbmZvID0geworCS5mbGFncyA9IFNNQzkxWF9VU0VfMTZCSVQgfCBTTUM5MVhfSU9fU0hJRlRfMSB8IElPUkVTT1VSQ0VfSVJRX0xPV0xFVkVMLAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzbWM5MXhfcmVzW10gPSB7CisJWzBdID0geworCQkuc3RhcnQJPSBTTUNfSU9BRERSLAorCQkuZW5kCT0gU01DX0lPQUREUiArIFNaXzMyIC0gMSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwlbMV0gPSB7CisJCS5zdGFydAk9IEVUSEVSTkVUX0lSUSwKKwkJLmVuZAk9IEVUSEVSTkVUX0lSUSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEgLAorCX0KK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHNtYzkxeF9kZXYgPSB7CisJLm5hbWUJCT0gInNtYzkxeCIsCisJLmlkCQk9IC0xLAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShzbWM5MXhfcmVzKSwKKwkucmVzb3VyY2UJPSBzbWM5MXhfcmVzLAorCisJLmRldgk9IHsKKwkJLnBsYXRmb3JtX2RhdGEJPSAmc21jOTF4X2luZm8sCisJfSwKK307CisKKy8qIHBsYXRmb3JtIGluaXQgY29kZSAqLworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmVkb3NrNzc2MF9kZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKKwkmc21jOTF4X2RldiwKKwkmZWRvc2s3NzYwX25vcl9mbGFzaF9kZXZpY2UsCisJJnNoNzc2MF9pMmMwX2RldiwKKwkmc2g3NzYwX2kyYzFfZGV2LAorfTsKKworc3RhdGljIGludCBfX2luaXQgaW5pdF9lZG9zazc3NjBfZGV2aWNlcyh2b2lkKQoreworCXBsYXRfaXJxX3NldHVwX3BpbnMoSVJRX01PREVfSVJRKTsKKworCXJldHVybiBwbGF0Zm9ybV9hZGRfZGV2aWNlcyhlZG9zazc3NjBfZGV2aWNlcywKKwkJCQkgICAgQVJSQVlfU0laRShlZG9zazc3NjBfZGV2aWNlcykpOworfQorX19pbml0Y2FsbChpbml0X2Vkb3NrNzc2MF9kZXZpY2VzKTsKKworLyoKKyAqIFRoZSBNYWNoaW5lIFZlY3RvcgorICovCitzdHJ1Y3Qgc2hfbWFjaGluZV92ZWN0b3IgbXZfZWRvc2s3NzYwIF9faW5pdG12ID0geworCS5tdl9uYW1lCT0gIkVET1NLNzc2MCIsCisJLm12X25yX2lycXMJPSAxMjgsCit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvYm9hcmQtbWFnaWNwYW5lbHIyLmMgYi9hcmNoL3NoL2JvYXJkcy9ib2FyZC1tYWdpY3BhbmVscjIuYwppbmRleCBmM2I4YjA3Li4zZGUyMmNjIDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9ib2FyZC1tYWdpY3BhbmVscjIuYworKysgYi9hcmNoL3NoL2JvYXJkcy9ib2FyZC1tYWdpY3BhbmVscjIuYwpAQCAtMTMsMTIgKzEzLDE0IEBACiAjaW5jbHVkZSA8bGludXgvaXJxLmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CiAjaW5jbHVkZSA8bGludXgvbXRkL210ZC5oPgogI2luY2x1ZGUgPGxpbnV4L210ZC9wYXJ0aXRpb25zLmg+CiAjaW5jbHVkZSA8bGludXgvbXRkL3BoeXNtYXAuaD4KICNpbmNsdWRlIDxsaW51eC9tdGQvbWFwLmg+Ci0jaW5jbHVkZSA8YXNtL21hZ2ljcGFuZWxyMi5oPgorI2luY2x1ZGUgPG1hY2gvbWFnaWNwYW5lbHIyLmg+CiAjaW5jbHVkZSA8YXNtL2hlYXJ0YmVhdC5oPgorI2luY2x1ZGUgPGNwdS9zaDc3MjAuaD4KIAogI2RlZmluZSBMQU45MTE1X1JFQURZCShjdHJsX2lubCgweEE4MDAwMDg0VUwpICYgMHgwMDAwMDAwMVVMKQogCkBAIC0xNzAsNyArMTcyLDE0IEBACiAJLyogUjcgQTI1OwkgICAgIFI2IEEyNDsJICAgICBSNSBBMjM7CQkgIFI0IEEyMjsKIAkgKiBSMyBBMjE7CSAgICAgUjIgQTIwOwkgICAgIFIxIEExOTsJCSAgUjAgQTA7CiAJICovCi0JY3RybF9vdXR3KDB4MDAwMCwgUE9SVF9QUkNSKTsJLyogMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgKi8KKwlncGlvX3JlcXVlc3QoR1BJT19GTl9BMjUsIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX0EyNCwgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fQTIzLCBOVUxMKTsKKwlncGlvX3JlcXVlc3QoR1BJT19GTl9BMjIsIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX0EyMSwgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fQTIwLCBOVUxMKTsKKwlncGlvX3JlcXVlc3QoR1BJT19GTl9BMTksIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX0EwLCBOVUxMKTsKIAogCS8qIFM3ICh4KTsJCVM2ICh4KTsgICAgICAgIFM1ICh4KTsJICAgICBTNCBHUE8oRUVQUk9NX0NTMik7CiAJICogUzMgR1BPKEVFUFJPTV9DUzEpOyAgUzIgU0lPRjBfVFhEOyAgUzEgU0lPRjBfUlhEOyBTMCBTSU9GMF9TQ0s7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9ib2FyZC1yc2s3MjAzLmMgYi9hcmNoL3NoL2JvYXJkcy9ib2FyZC1yc2s3MjAzLmMKaW5kZXggZmZiZWRjNS4uZGVkNzk5YyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvYm9hcmQtcnNrNzIwMy5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL2JvYXJkLXJzazcyMDMuYwpAQCAtMTYsOCArMTYsMTAgQEAKICNpbmNsdWRlIDxsaW51eC9tdGQvcGh5c21hcC5oPgogI2luY2x1ZGUgPGxpbnV4L210ZC9tYXAuaD4KICNpbmNsdWRlIDxsaW51eC9zbWM5MTF4Lmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgogI2luY2x1ZGUgPGFzbS9tYWNodmVjLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL3NoNzIwMy5oPgogCiBzdGF0aWMgc3RydWN0IHNtYzkxMXhfcGxhdGRhdGEgc21jOTExeF9pbmZvID0gewogCS5mbGFncwkJPSBTTUM5MTFYX1VTRV8xNkJJVCwKQEAgLTEyMiw2ICsxMjQsMTUgQEAKIAogc3RhdGljIGludCBfX2luaXQgcnNrNzIwM19kZXZpY2VzX3NldHVwKHZvaWQpCiB7CisJLyogU2VsZWN0IHBpbnMgZm9yIFNDSUYwICovCisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fVFhEMCwgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fUlhEMCwgTlVMTCk7CisKKwkvKiBMaXQgTEVEMCAqLworCWdwaW9fcmVxdWVzdChHUElPX1BFMTAsIE5VTEwpOworCWdwaW9fZGlyZWN0aW9uX291dHB1dChHUElPX1BFMTAsIDApOworCWdwaW9fZXhwb3J0KEdQSU9fUEUxMCwgMCk7CisKIAlzZXRfbXRkX3BhcnRpdGlvbnMoKTsKIAlyZXR1cm4gcGxhdGZvcm1fYWRkX2RldmljZXMocnNrNzIwM19kZXZpY2VzLAogCQkJCSAgICBBUlJBWV9TSVpFKHJzazcyMDNfZGV2aWNlcykpOwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvYm9hcmQtc2g3Nzg1bGNyLmMgYi9hcmNoL3NoL2JvYXJkcy9ib2FyZC1zaDc3ODVsY3IuYwppbmRleCBiOTVkNjc0Li40MDhiYmRkIDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9ib2FyZC1zaDc3ODVsY3IuYworKysgYi9hcmNoL3NoL2JvYXJkcy9ib2FyZC1zaDc3ODVsY3IuYwpAQCAtMTksNyArMTksNyBAQAogI2luY2x1ZGUgPGxpbnV4L2kyYy1wY2EtcGxhdGZvcm0uaD4KICNpbmNsdWRlIDxsaW51eC9pMmMtYWxnby1wY2EuaD4KICNpbmNsdWRlIDxhc20vaGVhcnRiZWF0Lmg+Ci0jaW5jbHVkZSA8YXNtL3NoNzc4NWxjci5oPgorI2luY2x1ZGUgPG1hY2gvc2g3Nzg1bGNyLmg+CiAKIC8qCiAgKiBOT1RFOiBUaGlzIGJvYXJkIGhhcyAyIHBoeXNpY2FsIG1lbW9yeSBtYXBzLgpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvYm9hcmQtc2htaW4uYyBiL2FyY2gvc2gvYm9hcmRzL2JvYXJkLXNobWluLmMKaW5kZXggMTZlNWRhZS4uNWNjMDg2N2QgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL2JvYXJkLXNobWluLmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvYm9hcmQtc2htaW4uYwpAQCAtOCw3ICs4LDcgQEAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvaXJxLmg+CiAjaW5jbHVkZSA8YXNtL21hY2h2ZWMuaD4KLSNpbmNsdWRlIDxhc20vc2htaW4uaD4KKyNpbmNsdWRlIDxtYWNoL3NobWluLmg+CiAjaW5jbHVkZSA8YXNtL2Nsb2NrLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL21hY2gtZWRvc2s3NzA1L2lvLmMgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLWVkb3NrNzcwNS9pby5jCmluZGV4IDU0MWNlYTIuLjdkMTUzZTUgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL21hY2gtZWRvc2s3NzA1L2lvLmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1lZG9zazc3MDUvaW8uYwpAQCAtMTEsNyArMTEsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+Ci0jaW5jbHVkZSA8YXNtL2Vkb3NrNzcwNS9pby5oPgorI2luY2x1ZGUgPG1hY2gvZWRvc2s3NzA1Lmg+CiAjaW5jbHVkZSA8YXNtL2FkZHJzcGFjZS5oPgogCiAjZGVmaW5lIFNNQ19JT0FERFIJMHhBMjAwMDAwMApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1lZG9zazc3MDUvc2V0dXAuYyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtZWRvc2s3NzA1L3NldHVwLmMKaW5kZXggZjA3NmM0NS4uYWIzZjQ3YiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1lZG9zazc3MDUvc2V0dXAuYworKysgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLWVkb3NrNzcwNS9zZXR1cC5jCkBAIC0xMCw3ICsxMCw3IEBACiAgKi8KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8YXNtL21hY2h2ZWMuaD4KLSNpbmNsdWRlIDxhc20vZWRvc2s3NzA1L2lvLmg+CisjaW5jbHVkZSA8bWFjaC9lZG9zazc3MDUuaD4KIAogc3RhdGljIHZvaWQgX19pbml0IHNoX2Vkb3NrNzcwNV9pbml0X2lycSh2b2lkKQogewpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1oaWdobGFuZGVyL2lycS1yNzc4MG1wLmMgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLWhpZ2hsYW5kZXIvaXJxLXI3NzgwbXAuYwppbmRleCBhZTFjZmNiLi44M2MyOGJjIDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9tYWNoLWhpZ2hsYW5kZXIvaXJxLXI3NzgwbXAuYworKysgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLWhpZ2hsYW5kZXIvaXJxLXI3NzgwbXAuYwpAQCAtMTIsNyArMTIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9pcnEuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgotI2luY2x1ZGUgPGFzbS9yNzc4MHJwLmg+CisjaW5jbHVkZSA8bWFjaC9oaWdobGFuZGVyLmg+CiAKIGVudW0gewogCVVOVVNFRCA9IDAsCmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9tYWNoLWhpZ2hsYW5kZXIvaXJxLXI3NzgwcnAuYyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtaGlnaGxhbmRlci9pcnEtcjc3ODBycC5jCmluZGV4IDlkMzkyMWYuLmI3MjFlODYgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL21hY2gtaGlnaGxhbmRlci9pcnEtcjc3ODBycC5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtaGlnaGxhbmRlci9pcnEtcjc3ODBycC5jCkBAIC0xMiw3ICsxMiw3IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2lycS5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+Ci0jaW5jbHVkZSA8YXNtL3I3NzgwcnAuaD4KKyNpbmNsdWRlIDxtYWNoL2hpZ2hsYW5kZXIuaD4KIAogZW51bSB7CiAJVU5VU0VEID0gMCwKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL21hY2gtaGlnaGxhbmRlci9pcnEtcjc3ODVycC5jIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1oaWdobGFuZGVyL2lycS1yNzc4NXJwLmMKaW5kZXggODk2YzA0NS4uMzgxMWIwNiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1oaWdobGFuZGVyL2lycS1yNzc4NXJwLmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1oaWdobGFuZGVyL2lycS1yNzc4NXJwLmMKQEAgLTEyLDcgKzEyLDcgQEAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvaXJxLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KLSNpbmNsdWRlIDxhc20vcjc3ODBycC5oPgorI2luY2x1ZGUgPG1hY2gvaGlnaGxhbmRlci5oPgogCiBlbnVtIHsKIAlVTlVTRUQgPSAwLApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1oaWdobGFuZGVyL3Bzdy5jIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1oaWdobGFuZGVyL3Bzdy5jCmluZGV4IGJlOGQ1NDcuLjM3YjFhMmUgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL21hY2gtaGlnaGxhbmRlci9wc3cuYworKysgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLWhpZ2hsYW5kZXIvcHN3LmMKQEAgLTEzLDcgKzEzLDcgQEAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Ci0jaW5jbHVkZSA8YXNtL3I3NzgwcnAuaD4KKyNpbmNsdWRlIDxtYWNoL2hpZ2hsYW5kZXIuaD4KICNpbmNsdWRlIDxhc20vcHVzaC1zd2l0Y2guaD4KIAogc3RhdGljIGlycXJldHVybl90IHBzd19pcnFfaGFuZGxlcihpbnQgaXJxLCB2b2lkICphcmcpCmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9tYWNoLWhpZ2hsYW5kZXIvc2V0dXAuYyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtaGlnaGxhbmRlci9zZXR1cC5jCmluZGV4IGJjNzlhZmIuLmM1YTQwZjcgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL21hY2gtaGlnaGxhbmRlci9zZXR1cC5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtaGlnaGxhbmRlci9zZXR1cC5jCkBAIC0yMCw3ICsyMCw3IEBACiAjaW5jbHVkZSA8bGludXgvaTJjLmg+CiAjaW5jbHVkZSA8bmV0L2F4ODg3OTYuaD4KICNpbmNsdWRlIDxhc20vbWFjaHZlYy5oPgotI2luY2x1ZGUgPGFzbS9yNzc4MHJwLmg+CisjaW5jbHVkZSA8bWFjaC9oaWdobGFuZGVyLmg+CiAjaW5jbHVkZSA8YXNtL2Nsb2NrLmg+CiAjaW5jbHVkZSA8YXNtL2hlYXJ0YmVhdC5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1ocDZ4eC9ocDZ4eF9hcG0uYyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtaHA2eHgvaHA2eHhfYXBtLmMKaW5kZXggMTc3ZjRmMC4uZTg1MjEyZiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1ocDZ4eC9ocDZ4eF9hcG0uYworKysgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLWhwNnh4L2hwNnh4X2FwbS5jCkBAIC0xNCw3ICsxNCw3IEBACiAjaW5jbHVkZSA8bGludXgvYXBtLWVtdWxhdGlvbi5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8YXNtL2FkYy5oPgotI2luY2x1ZGUgPGFzbS9ocDZ4eC5oPgorI2luY2x1ZGUgPG1hY2gvaHA2eHguaD4KIAogLyogcGVyY2VudGFnZSB2YWx1ZXMgKi8KICNkZWZpbmUgQVBNX0NSSVRJQ0FMCQkJMTAKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL21hY2gtaHA2eHgvcG0uYyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtaHA2eHgvcG0uYwppbmRleCBlOTY2ODRkLi42NGFmMWYyIDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9tYWNoLWhwNnh4L3BtLmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1ocDZ4eC9wbS5jCkBAIC0xMiw3ICsxMiw3IEBACiAjaW5jbHVkZSA8bGludXgvdGltZS5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9oZDY0NDYxLmg+Ci0jaW5jbHVkZSA8YXNtL2hwNnh4Lmg+CisjaW5jbHVkZSA8bWFjaC9ocDZ4eC5oPgogI2luY2x1ZGUgPGNwdS9kYWMuaD4KICNpbmNsdWRlIDxhc20vcG0uaD4KIApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1ocDZ4eC9zZXR1cC5jIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1ocDZ4eC9zZXR1cC5jCmluZGV4IDQ3NWI0NmMuLjQ4ZmVjZTcgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL21hY2gtaHA2eHgvc2V0dXAuYworKysgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLWhwNnh4L3NldHVwLmMKQEAgLTE1LDcgKzE1LDcgQEAKICNpbmNsdWRlIDxhc20vaGQ2NDQ2MS5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9pcnEuaD4KLSNpbmNsdWRlIDxhc20vaHA2eHguaD4KKyNpbmNsdWRlIDxtYWNoL2hwNnh4Lmg+CiAjaW5jbHVkZSA8Y3B1L2RhYy5oPgogCiAjZGVmaW5lCVNDUENSCTB4YTQwMDAxMTYKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL21hY2gtbGJveHJlMi9pcnEuYyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtbGJveHJlMi9pcnEuYwppbmRleCA1YTFjM2JiLi44YWExNzFhIDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9tYWNoLWxib3hyZTIvaXJxLmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1sYm94cmUyL2lycS5jCkBAIC0xNSw3ICsxNSw3IEBACiAjaW5jbHVkZSA8bGludXgvaXJxLmg+CiAjaW5jbHVkZSA8YXNtL2lycS5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgotI2luY2x1ZGUgPGFzbS9sYm94cmUyLmg+CisjaW5jbHVkZSA8bWFjaC9sYm94cmUyLmg+CiAKIC8qCiAgKiBJbml0aWFsaXplIElSUSBzZXR0aW5nCmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9tYWNoLWxib3hyZTIvc2V0dXAuYyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtbGJveHJlMi9zZXR1cC5jCmluZGV4IGM3NDQ0MGQuLjJiMGI1ODEgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL21hY2gtbGJveHJlMi9zZXR1cC5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtbGJveHJlMi9zZXR1cC5jCkBAIC0xNiw3ICsxNiw3IEBACiAjaW5jbHVkZSA8bGludXgvYXRhX3BsYXRmb3JtLmg+CiAjaW5jbHVkZSA8YXNtL21hY2h2ZWMuaD4KICNpbmNsdWRlIDxhc20vYWRkcnNwYWNlLmg+Ci0jaW5jbHVkZSA8YXNtL2xib3hyZTIuaD4KKyNpbmNsdWRlIDxtYWNoL2xib3hyZTIuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KIAogc3RhdGljIHN0cnVjdCByZXNvdXJjZSBjZl9pZGVfcmVzb3VyY2VzW10gPSB7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9tYWNoLW1pY3JvZGV2L2lvLmMgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLW1pY3JvZGV2L2lvLmMKaW5kZXggOWY4YTU0MC4uNTJkZDc0OCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1taWNyb2Rldi9pby5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtbWljcm9kZXYvaW8uYwpAQCAtMTUsNyArMTUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KLSNpbmNsdWRlIDxhc20vbWljcm9kZXYuaD4KKyNpbmNsdWRlIDxtYWNoL21pY3JvZGV2Lmg+CiAKIAkvKgogCSAqCXdlIG5lZWQgdG8gaGF2ZSBhICdzYWZlJyBhZGRyZXNzIHRvIHJlLWRpcmVjdCBhbGwgSS9PIHJlcXVlc3RzCmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9tYWNoLW1pY3JvZGV2L2lycS5jIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1taWNyb2Rldi9pcnEuYwppbmRleCA0ZDMzNTA3Li43MDI3NTNjIDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9tYWNoLW1pY3JvZGV2L2lycS5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtbWljcm9kZXYvaXJxLmMKQEAgLTE0LDcgKzE0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+Ci0jaW5jbHVkZSA8YXNtL21pY3JvZGV2Lmg+CisjaW5jbHVkZSA8bWFjaC9taWNyb2Rldi5oPgogCiAjZGVmaW5lIE5VTV9FWFRFUk5BTF9JUlFTIDE2CS8qIElSTDAgLi4gSVJMMTUgKi8KIApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1taWNyb2Rldi9zZXR1cC5jIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1taWNyb2Rldi9zZXR1cC5jCmluZGV4IGZjOGNkMDYuLmE5MjAyZmUgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL21hY2gtbWljcm9kZXYvc2V0dXAuYworKysgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLW1pY3JvZGV2L3NldHVwLmMKQEAgLTE0LDcgKzE0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KICNpbmNsdWRlIDx2aWRlby9zMWQxM3h4eGZiLmg+Ci0jaW5jbHVkZSA8YXNtL21pY3JvZGV2Lmg+CisjaW5jbHVkZSA8bWFjaC9taWNyb2Rldi5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9tYWNodmVjLmg+CiAKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL21hY2gtbWlnb3IvbGNkX3F2Z2EuYyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtbWlnb3IvbGNkX3F2Z2EuYwppbmRleCA2ZTk2MDk1Li5kZTkwMTRhIDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9tYWNoLW1pZ29yL2xjZF9xdmdhLmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1taWdvci9sY2RfcXZnYS5jCkBAIC0xNyw4ICsxNywxMCBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxhc20vc2hfbW9iaWxlX2xjZGMuaD4KLSNpbmNsdWRlIDxhc20vbWlnb3IuaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CisjaW5jbHVkZSA8dmlkZW8vc2hfbW9iaWxlX2xjZGMuaD4KKyNpbmNsdWRlIDxjcHUvc2g3NzIyLmg+CisjaW5jbHVkZSA8bWFjaC9taWdvci5oPgogCiAvKiBMQ0QgTW9kdWxlIGlzIGEgUEgyNDAzMjBUIGFjY29yZGluZyB0byBib2FyZCBzY2hlbWF0aWNzLiBUaGlzIG1vZHVsZQogICogaXMgbWFkZSB1cCBvZiBhIDI0MHgzMjAgTENEIGhvb2tlZCB1cCB0byBhIFI2MTUwNVUgKG9yIEhYODM0Ny1BMDE/KQpAQCAtMzAsOSArMzIsOSBAQAogCiBzdGF0aWMgdm9pZCByZXNldF9sY2RfbW9kdWxlKHZvaWQpCiB7Ci0JY3RybF9vdXRiKGN0cmxfaW5iKFBPUlRfUEhEUikgJiB+MHgwNCwgUE9SVF9QSERSKTsKKwlncGlvX3NldF92YWx1ZShHUElPX1BUSDIsIDApOwogCW1kZWxheSgyKTsKLQljdHJsX291dGIoY3RybF9pbmIoUE9SVF9QSERSKSB8IDB4MDQsIFBPUlRfUEhEUik7CisJZ3Bpb19zZXRfdmFsdWUoR1BJT19QVEgyLCAxKTsKIAltZGVsYXkoMSk7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL21hY2gtbWlnb3Ivc2V0dXAuYyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtbWlnb3Ivc2V0dXAuYwppbmRleCA3MTRkY2U5Li43NjlkNjMwIDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9tYWNoLW1pZ29yL3NldHVwLmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1taWdvci9zZXR1cC5jCkBAIC0xNywxNCArMTcsMTYgQEAKICNpbmNsdWRlIDxsaW51eC9zbWM5MXguaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KICNpbmNsdWRlIDxtZWRpYS9zb2NfY2FtZXJhX3BsYXRmb3JtLmg+CiAjaW5jbHVkZSA8bWVkaWEvc2hfbW9iaWxlX2NldS5oPgorI2luY2x1ZGUgPHZpZGVvL3NoX21vYmlsZV9sY2RjLmg+CiAjaW5jbHVkZSA8YXNtL2Nsb2NrLmg+CiAjaW5jbHVkZSA8YXNtL21hY2h2ZWMuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vc2hfa2V5c2MuaD4KLSNpbmNsdWRlIDxhc20vc2hfbW9iaWxlX2xjZGMuaD4KLSNpbmNsdWRlIDxhc20vbWlnb3IuaD4KKyNpbmNsdWRlIDxtYWNoL21pZ29yLmg+CisjaW5jbHVkZSA8Y3B1L3NoNzcyMi5oPgogCiAvKiBBZGRyZXNzICAgICBJUlEgIFNpemUgIEJ1cyAgRGVzY3JpcHRpb24KICAqIDB4MDAwMDAwMDAgICAgICAgNjRNQiAgMTYgICBOT1IgRmxhc2ggKFNQMjlQTDI1Nk4pCkBAIC0zNSw3ICszNyw3IEBACiAgKi8KIAogc3RhdGljIHN0cnVjdCBzbWM5MXhfcGxhdGRhdGEgc21jOTF4X2luZm8gPSB7Ci0JLmZsYWdzID0gU01DOTFYX1VTRV8xNkJJVCwKKwkuZmxhZ3MgPSBTTUM5MVhfVVNFXzE2QklUIHwgU01DOTFYX05PV0FJVCwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugc21jOTF4X2V0aF9yZXNvdXJjZXNbXSA9IHsKQEAgLTE2OSw3ICsxNzEsNyBAQAogCiBzdGF0aWMgaW50IG1pZ29yX25hbmRfZmxhc2hfcmVhZHkoc3RydWN0IG10ZF9pbmZvICptdGQpCiB7Ci0JcmV0dXJuIGN0cmxfaW5iKFBPUlRfUEFEUikgJiAweDAyOyAvKiBQVEExICovCisJcmV0dXJuIGdwaW9fZ2V0X3ZhbHVlKEdQSU9fUFRBMSk7IC8qIE5BTkRfUkJuICovCiB9CiAKIHN0cnVjdCBwbGF0Zm9ybV9uYW5kX2RhdGEgbWlnb3JfbmFuZF9mbGFzaF9kYXRhID0gewpAQCAtMjg2LDIyICsyODgsMTUgQEAKIAogc3RhdGljIHZvaWQgY2FtZXJhX3Bvd2VyX29uKHZvaWQpCiB7Ci0JdW5zaWduZWQgY2hhciB2YWx1ZTsKLQogCWNhbWVyYV9jbGsgPSBjbGtfZ2V0KE5VTEwsICJ2aWRlb19jbGsiKTsKIAljbGtfc2V0X3JhdGUoY2FtZXJhX2NsaywgMjQwMDAwMDApOwogCWNsa19lbmFibGUoY2FtZXJhX2Nsayk7CS8qIHN0YXJ0IFZJT19DS08gKi8KIAorCS8qIHVzZSBWSU9fUlNUIHRvIHRha2UgY2FtZXJhIG91dCBvZiByZXNldCAqLwogCW1kZWxheSgxMCk7Ci0JdmFsdWUgPSBjdHJsX2luYihQT1JUX1BURFIpOwotCXZhbHVlICY9IH4weDA5OwotI2lmbmRlZiBDT05GSUdfU0hfTUlHT1JfUlRBX1dWR0EKLQl2YWx1ZSB8PSAweDAxOwotI2VuZGlmCi0JY3RybF9vdXRiKHZhbHVlLCBQT1JUX1BURFIpOworCWdwaW9fc2V0X3ZhbHVlKEdQSU9fUFRUMywgMCk7CiAJbWRlbGF5KDEwKTsKLQotCWN0cmxfb3V0Yih2YWx1ZSB8IDgsIFBPUlRfUFREUik7CisJZ3Bpb19zZXRfdmFsdWUoR1BJT19QVFQzLCAxKTsKIH0KIAogc3RhdGljIHZvaWQgY2FtZXJhX3Bvd2VyX29mZih2b2lkKQpAQCAtMzA5LDcgKzMwNCw3IEBACiAJY2xrX2Rpc2FibGUoY2FtZXJhX2Nsayk7IC8qIHN0b3AgVklPX0NLTyAqLwogCWNsa19wdXQoY2FtZXJhX2Nsayk7CiAKLQljdHJsX291dGIoY3RybF9pbmIoUE9SVF9QVERSKSAmIH4weDA4LCBQT1JUX1BURFIpOworCWdwaW9fc2V0X3ZhbHVlKEdQSU9fUFRUMywgMCk7CiB9CiAKICNpZmRlZiBDT05GSUdfSTJDCkBAIC00NTgsNzUgKzQ1MywxMzUgQEAKIAogc3RhdGljIGludCBfX2luaXQgbWlnb3JfZGV2aWNlc19zZXR1cCh2b2lkKQogeworCS8qIExpdCBEMTEgTEVEICovCisJZ3Bpb19yZXF1ZXN0KEdQSU9fUFRKNywgTlVMTCk7CisJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KEdQSU9fUFRKNywgMSk7CisJZ3Bpb19leHBvcnQoR1BJT19QVEo3LCAwKTsKKworCS8qIExpdCBEMTIgTEVEICovCisJZ3Bpb19yZXF1ZXN0KEdQSU9fUFRKNSwgTlVMTCk7CisJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KEdQSU9fUFRKNSwgMSk7CisJZ3Bpb19leHBvcnQoR1BJT19QVEo1LCAwKTsKKworCS8qIFNNQzkxQzExMSAtIEVuYWJsZSBJUlEwLCBTZXR1cCBDUzQgZm9yIDE2LWJpdCBmYXN0IGFjY2VzcyAqLworCWdwaW9fcmVxdWVzdChHUElPX0ZOX0lSUTAsIE5VTEwpOworCWN0cmxfb3V0bCgweDAwMDAzNDAwLCBCU0NfQ1M0QkNSKTsKKwljdHJsX291dGwoMHgwMDExMDA4MCwgQlNDX0NTNFdDUik7CisKKwkvKiBLRVlTQyAqLwogCWNsa19hbHdheXNfZW5hYmxlKCJtc3RwMjE0Iik7IC8qIEtFWVNDICovCisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fS0VZT1VUMCwgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fS0VZT1VUMSwgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fS0VZT1VUMiwgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fS0VZT1VUMywgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fS0VZT1VUNF9JTjYsIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX0tFWUlOMSwgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fS0VZSU4yLCBOVUxMKTsKKwlncGlvX3JlcXVlc3QoR1BJT19GTl9LRVlJTjMsIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX0tFWUlONCwgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fS0VZT1VUNV9JTjUsIE5VTEwpOworCisJLyogTkFORCBGbGFzaCAqLworCWdwaW9fcmVxdWVzdChHUElPX0ZOX0NTNkFfQ0UyQiwgTlVMTCk7CisJY3RybF9vdXRsKChjdHJsX2lubChCU0NfQ1M2QUJDUikgJiB+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+CisjaW5jbHVkZSA8bWFjaC90aXRhbi5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBwb3J0MmFkcih1bnNpZ25lZCBpbnQgcG9ydCkKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL21hY2gtdGl0YW4vc2V0dXAuYyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtdGl0YW4vc2V0dXAuYwppbmRleCA1ZGUzYjJhLi44MWU3ZTBmIDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9tYWNoLXRpdGFuL3NldHVwLmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC10aXRhbi9zZXR1cC5jCkBAIC05LDcgKzksNyBAQAogICovCiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2lycS5oPgotI2luY2x1ZGUgPGFzbS90aXRhbi5oPgorI2luY2x1ZGUgPG1hY2gvdGl0YW4uaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KIAogc3RhdGljIHZvaWQgX19pbml0IGluaXRfdGl0YW5faXJxKHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL3NoL2Jvb3QvLmdpdGlnbm9yZSBiL2FyY2gvc2gvYm9vdC8uZ2l0aWdub3JlCmluZGV4IGI2NzE4ZGUuLmFhZDVlZGQgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9vdC8uZ2l0aWdub3JlCisrKyBiL2FyY2gvc2gvYm9vdC8uZ2l0aWdub3JlCkBAIC0xICsxLDQgQEAKIHpJbWFnZQordm1saW51eC5zcmVjCit1SW1hZ2UKK3VJbWFnZS5zcmVjCmRpZmYgLS1naXQgYS9hcmNoL3NoL2Jvb3QvTWFrZWZpbGUgYi9hcmNoL3NoL2Jvb3QvTWFrZWZpbGUKaW5kZXggNWI1NDk2NS4uYzE2Y2NkNCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib290L01ha2VmaWxlCisrKyBiL2FyY2gvc2gvYm9vdC9NYWtlZmlsZQpAQCAtMzMsMTAgKzMzLDE2IEBACiAkKG9iaikvY29tcHJlc3NlZC92bWxpbnV4OiBGT1JDRQogCSQoUSkkKE1BS0UpICQoYnVpbGQpPSQob2JqKS9jb21wcmVzc2VkICRACiAKK2lmZXEgKCQoQ09ORklHXzMyQklUKSx5KQorS0VSTkVMX0xPQUQJOj0gJChzaGVsbCAvYmluL2Jhc2ggLWMgJ3ByaW50ZiAiMHglMDh4IiBcCisJCSAgICAgJCRbJChDT05GSUdfUEFHRV9PRkZTRVQpICArIFwKKwkJCSQoQ09ORklHX1pFUk9fUEFHRV9PRkZTRVQpXScpCitlbHNlCiBLRVJORUxfTE9BRAk6PSAkKHNoZWxsIC9iaW4vYmFzaCAtYyAncHJpbnRmICIweCUwOHgiIFwKIAkJICAgICAkJFskKENPTkZJR19QQUdFX09GRlNFVCkgICsgXAogCQkJJChDT05GSUdfTUVNT1JZX1NUQVJUKSArIFwKIAkJCSQoQ09ORklHX1pFUk9fUEFHRV9PRkZTRVQpXScpCitlbmRpZgogCiBLRVJORUxfRU5UUlkJOj0gJChzaGVsbCAvYmluL2Jhc2ggLWMgJ3ByaW50ZiAiMHglMDh4IiBcCiAJCSAgICAgJCRbJChDT05GSUdfUEFHRV9PRkZTRVQpICArIFwKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9vdC9jb21wcmVzc2VkL01ha2VmaWxlXzMyIGIvYXJjaC9zaC9ib290L2NvbXByZXNzZWQvTWFrZWZpbGVfMzIKaW5kZXggNDc2ODVmNi4uMzAxZTZkNSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib290L2NvbXByZXNzZWQvTWFrZWZpbGVfMzIKKysrIGIvYXJjaC9zaC9ib290L2NvbXByZXNzZWQvTWFrZWZpbGVfMzIKQEAgLTIzLDYgKzIzLDExIEBACiAKIExJQkdDQwk6PSAkKHNoZWxsICQoQ0MpICQoS0JVSUxEX0NGTEFHUykgLXByaW50LWxpYmdjYy1maWxlLW5hbWUpCiAKK2lmZXEgKCQoQ09ORklHX0ZUUkFDRSkseSkKK09SSUdfQ0ZMQUdTIDo9ICQoS0JVSUxEX0NGTEFHUykKK0tCVUlMRF9DRkxBR1MgPSAkKHN1YnN0IC1wZywgLCAkKE9SSUdfQ0ZMQUdTKSkKK2VuZGlmCisKIExERkxBR1Nfdm1saW51eCA6PSAtVHRleHQgJChJTUFHRV9PRkZTRVQpIC1lIHN0YXJ0dXAgLVQgJChvYmopLy4uLy4uL2tlcm5lbC92bWxpbnV4LmxkcwogCiAkKG9iaikvdm1saW51eDogJChPQkpFQ1RTKSAkKG9iaikvcGlnZ3kubyAkKExJQkdDQykgRk9SQ0UKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9vdC9jb21wcmVzc2VkL21pc2NfMzIuYyBiL2FyY2gvc2gvYm9vdC9jb21wcmVzc2VkL21pc2NfMzIuYwppbmRleCBmMzg2OTk3Li5lZmRiYTZiIDEwMDY0NAotLS0gYS9hcmNoL3NoL2Jvb3QvY29tcHJlc3NlZC9taXNjXzMyLmMKKysrIGIvYXJjaC9zaC9ib290L2NvbXByZXNzZWQvbWlzY18zMi5jCkBAIC0xOTEsNyArMTkxLDcgQEAKIAogdm9pZCBkZWNvbXByZXNzX2tlcm5lbCh2b2lkKQogewotCW91dHB1dF9kYXRhID0gMDsKKwlvdXRwdXRfZGF0YSA9IE5VTEw7CiAJb3V0cHV0X3B0ciA9IFBIWVNBRERSKCh1bnNpZ25lZCBsb25nKSZfdGV4dCtQQUdFX1NJWkUpOwogI2lmZGVmIENPTkZJR18yOUJJVAogCW91dHB1dF9wdHIgfD0gUDJTRUc7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2NvbmZpZ3MvZWRvc2s3NzYwX2RlZmNvbmZpZyBiL2FyY2gvc2gvY29uZmlncy9lZG9zazc3NjBfZGVmY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlZjA3ZmEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3NoL2NvbmZpZ3MvZWRvc2s3NzYwX2RlZmNvbmZpZwpAQCAtMCwwICsxLDEwNTAgQEAKKyMKKyMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yNgorIyBUdWUgQXVnIDI2IDExOjM2OjA5IDIwMDgKKyMKK0NPTkZJR19TVVBFUkg9eQorQ09ORklHX1NVUEVSSDMyPXkKK0NPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKK0NPTkZJR19HRU5FUklDX0JVRz15CitDT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUPXkKK0NPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQorQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQorQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKK0NPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CitDT05GSUdfR0VORVJJQ19USU1FPXkKK0NPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKK0NPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQorQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15CisjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VMzIgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTPXkKK0NPTkZJR19BUkNIX1NVUFBPUlRTX0FPVVQ9eQorQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKKworIworIyBHZW5lcmFsIHNldHVwCisjCitDT05GSUdfRVhQRVJJTUVOVEFMPXkKK0NPTkZJR19CUk9LRU5fT05fU01QPXkKK0NPTkZJR19MT0NLX0tFUk5FTD15CitDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCitDT05GSUdfTE9DQUxWRVJTSU9OPSJfZWRvc2s3NzYwIgorQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKK0NPTkZJR19TV0FQPXkKK0NPTkZJR19TWVNWSVBDPXkKK0NPTkZJR19TWVNWSVBDX1NZU0NUTD15CitDT05GSUdfUE9TSVhfTVFVRVVFPXkKK0NPTkZJR19CU0RfUFJPQ0VTU19BQ0NUPXkKKyMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1RfVjMgaXMgbm90IHNldAorIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKK0NPTkZJR19JS0NPTkZJRz15CitDT05GSUdfSUtDT05GSUdfUFJPQz15CitDT05GSUdfTE9HX0JVRl9TSElGVD0xNworIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0CisjIENPTkZJR19HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CitDT05GSUdfU1lTRlNfREVQUkVDQVRFRD15CitDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMj15CisjIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0CisjIENPTkZJR19OQU1FU1BBQ0VTIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0lOSVRSRD15CitDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgorQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKK0NPTkZJR19TWVNDVEw9eQorQ09ORklHX0VNQkVEREVEPXkKK0NPTkZJR19VSUQxNj15CitDT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQorQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLPXkKK0NPTkZJR19LQUxMU1lNUz15CitDT05GSUdfS0FMTFNZTVNfQUxMPXkKKyMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAorQ09ORklHX0hPVFBMVUc9eQorQ09ORklHX1BSSU5USz15CitDT05GSUdfQlVHPXkKK0NPTkZJR19FTEZfQ09SRT15CitDT05GSUdfQ09NUEFUX0JSSz15CitDT05GSUdfQkFTRV9GVUxMPXkKK0NPTkZJR19GVVRFWD15CitDT05GSUdfQU5PTl9JTk9ERVM9eQorQ09ORklHX0VQT0xMPXkKK0NPTkZJR19TSUdOQUxGRD15CitDT05GSUdfVElNRVJGRD15CitDT05GSUdfRVZFTlRGRD15CitDT05GSUdfU0hNRU09eQorQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKK0NPTkZJR19TTFVCX0RFQlVHPXkKKyMgQ09ORklHX1NMQUIgaXMgbm90IHNldAorQ09ORklHX1NMVUI9eQorIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAorIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9PUFJPRklMRT15CisjIENPTkZJR19IQVZFX0tQUk9CRVMgaXMgbm90IHNldAorIyBDT05GSUdfSEFWRV9LUkVUUFJPQkVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBVkVfRE1BX0FUVFJTIGlzIG5vdCBzZXQKK0NPTkZJR19QUk9DX1BBR0VfTU9OSVRPUj15CitDT05GSUdfU0xBQklORk89eQorQ09ORklHX1JUX01VVEVYRVM9eQorIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0CitDT05GSUdfQkFTRV9TTUFMTD0wCitDT05GSUdfTU9EVUxFUz15CisjIENPTkZJR19NT0RVTEVfRk9SQ0VfTE9BRCBpcyBub3Qgc2V0CitDT05GSUdfTU9EVUxFX1VOTE9BRD15CitDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRD15CisjIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0CisjIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAorQ09ORklHX0tNT0Q9eQorQ09ORklHX0JMT0NLPXkKKyMgQ09ORklHX0xCRCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xTRiBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CisKKyMKKyMgSU8gU2NoZWR1bGVycworIworQ09ORklHX0lPU0NIRURfTk9PUD15CitDT05GSUdfSU9TQ0hFRF9BUz15CitDT05GSUdfSU9TQ0hFRF9ERUFETElORT15CitDT05GSUdfSU9TQ0hFRF9DRlE9eQorIyBDT05GSUdfREVGQVVMVF9BUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX0NGUT15CisjIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iY2ZxIgorQ09ORklHX0NMQVNTSUNfUkNVPXkKKworIworIyBTeXN0ZW0gdHlwZQorIworQ09ORklHX0NQVV9TSDQ9eQorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NjE5IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzIwMyBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDcyMDYgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MjYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX01YRyBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MDUgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzA2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcwNyBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MDggaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzA5IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcxMCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MTIgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NTAgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MDkxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc1MFIgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzUwUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NTEgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzUxUiBpcyBub3Qgc2V0CitDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzYwPXkKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINF8yMDIgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc2MyBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NzAgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4NSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSFgzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzM0MyBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjIgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MzY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINV8xMDEgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g1XzEwMyBpcyBub3Qgc2V0CisKKyMKKyMgTWVtb3J5IG1hbmFnZW1lbnQgb3B0aW9ucworIworQ09ORklHX1FVSUNLTElTVD15CitDT05GSUdfTU1VPXkKK0NPTkZJR19QQUdFX09GRlNFVD0weDgwMDAwMDAwCitDT05GSUdfTUVNT1JZX1NUQVJUPTB4MGMwMDAwMDAKK0NPTkZJR19NRU1PUllfU0laRT0weDA0MDAwMDAwCitDT05GSUdfMjlCSVQ9eQorQ09ORklHX1ZTWVNDQUxMPXkKK0NPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKK0NPTkZJR19BUkNIX1NQQVJTRU1FTV9FTkFCTEU9eQorQ09ORklHX0FSQ0hfU1BBUlNFTUVNX0RFRkFVTFQ9eQorQ09ORklHX01BWF9BQ1RJVkVfUkVHSU9OUz0xCitDT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQorQ09ORklHX0FSQ0hfU0VMRUNUX01FTU9SWV9NT0RFTD15CitDT05GSUdfUEFHRV9TSVpFXzRLQj15CisjIENPTkZJR19QQUdFX1NJWkVfOEtCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBR0VfU0laRV82NEtCIGlzIG5vdCBzZXQKK0NPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKK0NPTkZJR19GTEFUTUVNX01BTlVBTD15CisjIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQQVJTRU1FTV9NQU5VQUwgaXMgbm90IHNldAorQ09ORklHX0ZMQVRNRU09eQorQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKK0NPTkZJR19TUEFSU0VNRU1fU1RBVElDPXkKKyMgQ09ORklHX1NQQVJTRU1FTV9WTUVNTUFQX0VOQUJMRSBpcyBub3Qgc2V0CitDT05GSUdfUEFHRUZMQUdTX0VYVEVOREVEPXkKK0NPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00CisjIENPTkZJR19SRVNPVVJDRVNfNjRCSVQgaXMgbm90IHNldAorQ09ORklHX1pPTkVfRE1BX0ZMQUc9MAorQ09ORklHX05SX1FVSUNLPTIKKworIworIyBDYWNoZSBjb25maWd1cmF0aW9uCisjCisjIENPTkZJR19TSF9ESVJFQ1RfTUFQUEVEIGlzIG5vdCBzZXQKK0NPTkZJR19DQUNIRV9XUklURUJBQ0s9eQorIyBDT05GSUdfQ0FDSEVfV1JJVEVUSFJPVUdIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBQ0hFX09GRiBpcyBub3Qgc2V0CisKKyMKKyMgUHJvY2Vzc29yIGZlYXR1cmVzCisjCitDT05GSUdfQ1BVX0xJVFRMRV9FTkRJQU49eQorIyBDT05GSUdfQ1BVX0JJR19FTkRJQU4gaXMgbm90IHNldAorQ09ORklHX1NIX0ZQVT15CitDT05GSUdfU0hfU1RPUkVfUVVFVUVTPXkKK0NPTkZJR19DUFVfSEFTX0lOVEVWVD15CitDT05GSUdfQ1BVX0hBU19TUl9SQj15CitDT05GSUdfQ1BVX0hBU19QVEVBPXkKK0NPTkZJR19DUFVfSEFTX0ZQVT15CisKKyMKKyMgQm9hcmQgc3VwcG9ydAorIworQ09ORklHX1NIX0VET1NLNzc2MD15CisKKyMKKyMgVGltZXIgYW5kIGNsb2NrIGNvbmZpZ3VyYXRpb24KKyMKK0NPTkZJR19TSF9UTVU9eQorQ09ORklHX1NIX1RJTUVSX0lSUT0xNgorQ09ORklHX1NIX1BDTEtfRlJFUT0zMzMzMzMzMworQ09ORklHX1RJQ0tfT05FU0hPVD15CisjIENPTkZJR19OT19IWiBpcyBub3Qgc2V0CitDT05GSUdfSElHSF9SRVNfVElNRVJTPXkKK0NPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTX0JVSUxEPXkKKworIworIyBDUFUgRnJlcXVlbmN5IHNjYWxpbmcKKyMKKyMgQ09ORklHX0NQVV9GUkVRIGlzIG5vdCBzZXQKKworIworIyBETUEgc3VwcG9ydAorIworQ09ORklHX1NIX0RNQV9BUEk9eQorQ09ORklHX1NIX0RNQT15CitDT05GSUdfTlJfT05DSElQX0RNQV9DSEFOTkVMUz00CisjIENPTkZJR19OUl9ETUFfQ0hBTk5FTFNfQk9PTCBpcyBub3Qgc2V0CisjIENPTkZJR19TSF9ETUFCUkcgaXMgbm90IHNldAorCisjCisjIENvbXBhbmlvbiBDaGlwcworIworCisjCisjIEFkZGl0aW9uYWwgU3VwZXJIIERldmljZSBEcml2ZXJzCisjCisjIENPTkZJR19IRUFSVEJFQVQgaXMgbm90IHNldAorIyBDT05GSUdfUFVTSF9TV0lUQ0ggaXMgbm90IHNldAorCisjCisjIEtlcm5lbCBmZWF0dXJlcworIworIyBDT05GSUdfSFpfMTAwIGlzIG5vdCBzZXQKK0NPTkZJR19IWl8yNTA9eQorIyBDT05GSUdfSFpfMzAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0haXzEwMDAgaXMgbm90IHNldAorQ09ORklHX0haPTI1MAorIyBDT05GSUdfU0NIRURfSFJUSUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQVNIX0RVTVAgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVF9OT05FIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZIGlzIG5vdCBzZXQKK0NPTkZJR19QUkVFTVBUPXkKKyMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKK0NPTkZJR19HVVNBPXkKKyMgQ09ORklHX0dVU0FfUkIgaXMgbm90IHNldAorCisjCisjIEJvb3Qgb3B0aW9ucworIworQ09ORklHX1pFUk9fUEFHRV9PRkZTRVQ9MHgwMDAwMTAwMAorQ09ORklHX0JPT1RfTElOS19PRkZTRVQ9MHgwMjAwMDAwMAorIyBDT05GSUdfVUJDX1dBS0VVUCBpcyBub3Qgc2V0CitDT05GSUdfQ01ETElORV9CT09MPXkKK0NPTkZJR19DTURMSU5FPSJtZW09NjRNIGNvbnNvbGU9dHR5U0MyLDExNTIwMCByb290PS9kZXYvbmZzIHJ3IG5mc3Jvb3Q9MTkyLjE2OC4wLjM6L3NjcmlwdHMvZmlsZXN5cyBpcD0xOTIuMTY4LjAuNCIKKworIworIyBCdXMgb3B0aW9ucworIworIyBDT05GSUdfQVJDSF9TVVBQT1JUU19NU0kgaXMgbm90IHNldAorIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKKworIworIyBFeGVjdXRhYmxlIGZpbGUgZm9ybWF0cworIworQ09ORklHX0JJTkZNVF9FTEY9eQorIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAorCisjCisjIE5ldHdvcmtpbmcKKyMKK0NPTkZJR19ORVQ9eQorCisjCisjIE5ldHdvcmtpbmcgb3B0aW9ucworIworQ09ORklHX1BBQ0tFVD15CisjIENPTkZJR19QQUNLRVRfTU1BUCBpcyBub3Qgc2V0CitDT05GSUdfVU5JWD15CisjIENPTkZJR19ORVRfS0VZIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUPXkKKyMgQ09ORklHX0lQX01VTFRJQ0FTVCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAorQ09ORklHX0lQX0ZJQl9IQVNIPXkKK0NPTkZJR19JUF9QTlA9eQorIyBDT05GSUdfSVBfUE5QX0RIQ1AgaXMgbm90IHNldAorQ09ORklHX0lQX1BOUF9CT09UUD15CisjIENPTkZJR19JUF9QTlBfUkFSUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfSVBJUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAorIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0CisjIENPTkZJR19TWU5fQ09PS0lFUyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfTFJPIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUX0RJQUc9eQorQ09ORklHX0lORVRfVENQX0RJQUc9eQorIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAorQ09ORklHX1RDUF9DT05HX0NVQklDPXkKK0NPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKKyMgQ09ORklHX1RDUF9NRDVTSUcgaXMgbm90IHNldAorIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRXT1JLX1NFQ01BUksgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAorIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CisjIENPTkZJR19CUklER0UgaXMgbm90IHNldAorIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUNORVQgaXMgbm90IHNldAorIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0CisjIENPTkZJR19JUFggaXMgbm90IHNldAorIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAorIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xBUEIgaXMgbm90IHNldAorIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKKworIworIyBOZXR3b3JrIHRlc3RpbmcKKyMKKyMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAorIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAorIyBDT05GSUdfQ0FOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lSREEgaXMgbm90IHNldAorIyBDT05GSUdfQlQgaXMgbm90IHNldAorIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAorCisjCisjIFdpcmVsZXNzCisjCisjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAorIyBDT05GSUdfTUFDODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfSUVFRTgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldAorCisjCisjIERldmljZSBEcml2ZXJzCisjCisKKyMKKyMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucworIworQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKK0NPTkZJR19TVEFOREFMT05FPXkKK0NPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKKyMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfRFJJVkVSPXkKK0NPTkZJR19ERUJVR19ERVZSRVM9eQorIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAorIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKK0NPTkZJR19NVEQ9eQorQ09ORklHX01URF9ERUJVRz15CitDT05GSUdfTVREX0RFQlVHX1ZFUkJPU0U9MAorQ09ORklHX01URF9DT05DQVQ9eQorQ09ORklHX01URF9QQVJUSVRJT05TPXkKKyMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ01ETElORV9QQVJUUz15CisjIENPTkZJR19NVERfQVI3X1BBUlRTIGlzIG5vdCBzZXQKKworIworIyBVc2VyIE1vZHVsZXMgQW5kIFRyYW5zbGF0aW9uIExheWVycworIworQ09ORklHX01URF9DSEFSPXkKK0NPTkZJR19NVERfQkxLREVWUz15CitDT05GSUdfTVREX0JMT0NLPXkKKyMgQ09ORklHX0ZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JGRF9GVEwgaXMgbm90IHNldAorIyBDT05GSUdfU1NGREMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX09PUFMgaXMgbm90IHNldAorCisjCisjIFJBTS9ST00vRmxhc2ggY2hpcCBkcml2ZXJzCisjCitDT05GSUdfTVREX0NGST15CitDT05GSUdfTVREX0pFREVDUFJPQkU9eQorQ09ORklHX01URF9HRU5fUFJPQkU9eQorQ09ORklHX01URF9DRklfQURWX09QVElPTlM9eQorQ09ORklHX01URF9DRklfTk9TV0FQPXkKKyMgQ09ORklHX01URF9DRklfQkVfQllURV9TV0FQIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DRklfTEVfQllURV9TV0FQIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX0dFT01FVFJZPXkKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMT15CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzI9eQorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF80PXkKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfOD15CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE2PXkKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMzI9eQorQ09ORklHX01URF9DRklfSTE9eQorQ09ORklHX01URF9DRklfSTI9eQorQ09ORklHX01URF9DRklfSTQ9eQorQ09ORklHX01URF9DRklfSTg9eQorIyBDT05GSUdfTVREX09UUCBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NGSV9JTlRFTEVYVD15CitDT05GSUdfTVREX0NGSV9BTURTVEQ9eQorQ09ORklHX01URF9DRklfU1RBQT15CitDT05GSUdfTVREX0NGSV9VVElMPXkKK0NPTkZJR19NVERfUkFNPXkKK0NPTkZJR19NVERfUk9NPXkKK0NPTkZJR19NVERfQUJTRU5UPXkKKworIworIyBNYXBwaW5nIGRyaXZlcnMgZm9yIGNoaXAgYWNjZXNzCisjCisjIENPTkZJR19NVERfQ09NUExFWF9NQVBQSU5HUyBpcyBub3Qgc2V0CitDT05GSUdfTVREX1BIWVNNQVA9eQorQ09ORklHX01URF9QSFlTTUFQX1NUQVJUPTB4ZmZmZmZmZmYKK0NPTkZJR19NVERfUEhZU01BUF9MRU49MHgwCitDT05GSUdfTVREX1BIWVNNQVBfQkFOS1dJRFRIPTQKKyMgQ09ORklHX01URF9QTEFUUkFNIGlzIG5vdCBzZXQKKworIworIyBTZWxmLWNvbnRhaW5lZCBNVEQgZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01URF9TTFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUEhSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX01URFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQkxPQ0syTVREIGlzIG5vdCBzZXQKKworIworIyBEaXNrLU9uLUNoaXAgRGV2aWNlIERyaXZlcnMKKyMKKyMgQ09ORklHX01URF9ET0MyMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ET0MyMDAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ET0MyMDAxUExVUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTkFORCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfT05FTkFORCBpcyBub3Qgc2V0CisKKyMKKyMgVUJJIC0gVW5zb3J0ZWQgYmxvY2sgaW1hZ2VzCisjCisjIENPTkZJR19NVERfVUJJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVY9eQorIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfTE9PUCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9SQU09eQorQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2CitDT05GSUdfQkxLX0RFVl9SQU1fU0laRT0yNjAwMAorIyBDT05GSUdfQkxLX0RFVl9YSVAgaXMgbm90IHNldAorIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAorIyBDT05GSUdfTUlTQ19ERVZJQ0VTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0lERT15CisjIENPTkZJR19JREUgaXMgbm90IHNldAorCisjCisjIFNDU0kgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RNQSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAorIyBDT05GSUdfQVRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX01EIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRERVZJQ0VTPXkKKyMgQ09ORklHX05FVERFVklDRVNfTVVMVElRVUVVRSBpcyBub3Qgc2V0CisjIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0CisjIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldAorIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RVTiBpcyBub3Qgc2V0CisjIENPTkZJR19WRVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BIWUxJQiBpcyBub3Qgc2V0CitDT05GSUdfTkVUX0VUSEVSTkVUPXkKK0NPTkZJR19NSUk9eQorIyBDT05GSUdfQVg4ODc5NiBpcyBub3Qgc2V0CisjIENPTkZJR19TVE5JQyBpcyBub3Qgc2V0CisjIENPTkZJR19TTUM5MTk0IGlzIG5vdCBzZXQKK0NPTkZJR19TTUM5MVg9eQorIyBDT05GSUdfSUJNX05FV19FTUFDX1pNSUkgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1JHTUlJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19UQUggaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX0VNQUM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRERVZfMTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAorCisjCisjIFdpcmVsZXNzIExBTgorIworIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lXTFdJRklfTEVEUyBpcyBub3Qgc2V0CisjIENPTkZJR19XQU4gaXMgbm90IHNldAorIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMSVAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAorIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0CisjIENPTkZJR19QSE9ORSBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKKyMKK0NPTkZJR19JTlBVVD15CisjIENPTkZJR19JTlBVVF9GRl9NRU1MRVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1BPTExERVYgaXMgbm90IHNldAorCisjCisjIFVzZXJsYW5kIGludGVyZmFjZXMKKyMKKyMgQ09ORklHX0lOUFVUX01PVVNFREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9FVkRFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgRGV2aWNlIERyaXZlcnMKKyMKKyMgQ09ORklHX0lOUFVUX0tFWUJPQVJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX01PVVNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1RBQkxFVCBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9NSVNDIGlzIG5vdCBzZXQKKworIworIyBIYXJkd2FyZSBJL08gcG9ydHMKKyMKKyMgQ09ORklHX1NFUklPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKKworIworIyBDaGFyYWN0ZXIgZGV2aWNlcworIworQ09ORklHX1ZUPXkKK0NPTkZJR19WVF9DT05TT0xFPXkKK0NPTkZJR19IV19DT05TT0xFPXkKKyMgQ09ORklHX1ZUX0hXX0NPTlNPTEVfQklORElORyBpcyBub3Qgc2V0CitDT05GSUdfREVWS01FTT15CisjIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAorCisjCisjIFNlcmlhbCBkcml2ZXJzCisjCisjIENPTkZJR19TRVJJQUxfODI1MCBpcyBub3Qgc2V0CisKKyMKKyMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAorIworQ09ORklHX1NFUklBTF9TSF9TQ0k9eQorQ09ORklHX1NFUklBTF9TSF9TQ0lfTlJfVUFSVFM9MworQ09ORklHX1NFUklBTF9TSF9TQ0lfQ09OU09MRT15CitDT05GSUdfU0VSSUFMX0NPUkU9eQorQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQorQ09ORklHX1VOSVg5OF9QVFlTPXkKK0NPTkZJR19MRUdBQ1lfUFRZUz15CitDT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKKyMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0CitDT05GSUdfSFdfUkFORE9NPXkKKyMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAorIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CitDT05GSUdfSTJDPXkKK0NPTkZJR19JMkNfQk9BUkRJTkZPPXkKK0NPTkZJR19JMkNfQ0hBUkRFVj15CisKKyMKKyMgSTJDIEhhcmR3YXJlIEJ1cyBzdXBwb3J0CisjCisjIENPTkZJR19JMkNfT0NPUkVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19QQVJQT1JUX0xJR0hUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TSU1URUMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1RBT1NfRVZNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TVFVCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19QQ0FfUExBVEZPUk0gaXMgbm90IHNldAorQ09ORklHX0kyQ19TSDc3NjA9eQorIyBDT05GSUdfSTJDX1NIX01PQklMRSBpcyBub3Qgc2V0CisKKyMKKyMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CisjCisjIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19FRVBST00gaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQ0Y4NTkxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTUFYNjg3NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAorQ09ORklHX0kyQ19ERUJVR19DT1JFPXkKK0NPTkZJR19JMkNfREVCVUdfQUxHTz15CitDT05GSUdfSTJDX0RFQlVHX0JVUz15CitDT05GSUdfSTJDX0RFQlVHX0NISVA9eQorIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1cxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CisjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0CisjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAorIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAorCisjCisjIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQorIworQ09ORklHX1NTQl9QT1NTSUJMRT15CisjIENPTkZJR19TU0IgaXMgbm90IHNldAorCisjCisjIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0CisjIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKKworIworIyBNdWx0aW1lZGlhIGRldmljZXMKKyMKKworIworIyBNdWx0aW1lZGlhIGNvcmUgc3VwcG9ydAorIworIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RWQl9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX01FRElBIGlzIG5vdCBzZXQKKworIworIyBNdWx0aW1lZGlhIGRyaXZlcnMKKyMKKyMgQ09ORklHX0RBQiBpcyBub3Qgc2V0CisKKyMKKyMgR3JhcGhpY3Mgc3VwcG9ydAorIworIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0wgaXMgbm90IHNldAorQ09ORklHX0ZCPW0KKyMgQ09ORklHX0ZJUk1XQVJFX0VESUQgaXMgbm90IHNldAorIyBDT05GSUdfRkJfRERDIGlzIG5vdCBzZXQKK0NPTkZJR19GQl9DRkJfRklMTFJFQ1Q9bQorQ09ORklHX0ZCX0NGQl9DT1BZQVJFQT1tCitDT05GSUdfRkJfQ0ZCX0lNQUdFQkxJVD1tCisjIENPTkZJR19GQl9DRkJfUkVWX1BJWEVMU19JTl9CWVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NZU19GSUxMUkVDVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TWVNfQ09QWUFSRUEgaXMgbm90IHNldAorIyBDT05GSUdfRkJfU1lTX0lNQUdFQkxJVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9GT1JFSUdOX0VORElBTiBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TWVNfRk9QUyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TVkdBTElCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX01BQ01PREVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0JBQ0tMSUdIVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9NT0RFX0hFTFBFUlMgaXMgbm90IHNldAorQ09ORklHX0ZCX1RJTEVCTElUVElORz15CisKKyMKKyMgRnJhbWUgYnVmZmVyIGhhcmR3YXJlIGRyaXZlcnMKKyMKKyMgQ09ORklHX0ZCX01CODYyOTBfNjQwWDQ4MF8xNkJQUCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TMUQxM1hYWCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9WSVJUVUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfRElTUExBWV9TVVBQT1JUIGlzIG5vdCBzZXQKKworIworIyBDb25zb2xlIGRpc3BsYXkgZHJpdmVyIHN1cHBvcnQKKyMKK0NPTkZJR19EVU1NWV9DT05TT0xFPXkKKyMgQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEUgaXMgbm90IHNldAorIyBDT05GSUdfTE9HTyBpcyBub3Qgc2V0CisKKyMKKyMgU291bmQKKyMKK0NPTkZJR19TT1VORD15CisKKyMKKyMgQWR2YW5jZWQgTGludXggU291bmQgQXJjaGl0ZWN0dXJlCisjCitDT05GSUdfU05EPXkKK0NPTkZJR19TTkRfVElNRVI9eQorQ09ORklHX1NORF9QQ009eQorIyBDT05GSUdfU05EX1NFUVVFTkNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfTUlYRVJfT1NTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9QQ01fT1NTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9EWU5BTUlDX01JTk9SUyBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfU1VQUE9SVF9PTERfQVBJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9WRVJCT1NFX1BST0NGUyBpcyBub3Qgc2V0CitDT05GSUdfU05EX1ZFUkJPU0VfUFJJTlRLPXkKKyMgQ09ORklHX1NORF9ERUJVRyBpcyBub3Qgc2V0CisKKyMKKyMgR2VuZXJpYyBkZXZpY2VzCisjCisjIENPTkZJR19TTkRfRFVNTVkgaXMgbm90IHNldAorIyBDT05GSUdfU05EX01UUEFWIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9TRVJJQUxfVTE2NTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9NUFU0MDEgaXMgbm90IHNldAorCisjCisjIFNVUEVSSCBkZXZpY2VzCisjCisKKyMKKyMgU3lzdGVtIG9uIENoaXAgYXVkaW8gc3VwcG9ydAorIworQ09ORklHX1NORF9TT0M9eQorCisjCisjIFNvQyBBdWRpbyBzdXBwb3J0IGZvciBTdXBlckgKKyMKKworIworIyBBTFNBIFNvQyBhdWRpbyBmb3IgRnJlZXNjYWxlIFNPQ3MKKyMKKworIworIyBTb0MgQXVkaW8gZm9yIHRoZSBUZXhhcyBJbnN0cnVtZW50cyBPTUFQCisjCisKKyMKKyMgT3BlbiBTb3VuZCBTeXN0ZW0KKyMKKyMgQ09ORklHX1NPVU5EX1BSSU1FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9TVVBQT1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVVBQT1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NQyBpcyBub3Qgc2V0CisjIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0CisjIENPTkZJR19BQ0NFU1NJQklMSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19DTEFTUyBpcyBub3Qgc2V0CisjIENPTkZJR19VSU8gaXMgbm90IHNldAorCisjCisjIEZpbGUgc3lzdGVtcworIworQ09ORklHX0VYVDJfRlM9eQorQ09ORklHX0VYVDJfRlNfWEFUVFI9eQorIyBDT05GSUdfRVhUMl9GU19QT1NJWF9BQ0wgaXMgbm90IHNldAorIyBDT05GSUdfRVhUMl9GU19TRUNVUklUWSBpcyBub3Qgc2V0CitDT05GSUdfRVhUMl9GU19YSVA9eQorQ09ORklHX0ZTX1hJUD15CitDT05GSUdfRVhUM19GUz15CitDT05GSUdfRVhUM19GU19YQVRUUj15CisjIENPTkZJR19FWFQzX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQzX0ZTX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDRERVZfRlMgaXMgbm90IHNldAorQ09ORklHX0pCRD15CitDT05GSUdfRlNfTUJDQUNIRT15CisjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAorQ09ORklHX0ZTX1BPU0lYX0FDTD15CisjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAorQ09ORklHX0ROT1RJRlk9eQorQ09ORklHX0lOT1RJRlk9eQorQ09ORklHX0lOT1RJRllfVVNFUj15CisjIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0CisjIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19HRU5FUklDX0FDTD15CisKKyMKKyMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcworIworIyBDT05GSUdfSVNPOTY2MF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19VREZfRlMgaXMgbm90IHNldAorCisjCisjIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKKyMKKyMgQ09ORklHX01TRE9TX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZGQVRfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTlRGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgUHNldWRvIGZpbGVzeXN0ZW1zCisjCitDT05GSUdfUFJPQ19GUz15CisjIENPTkZJR19QUk9DX0tDT1JFIGlzIG5vdCBzZXQKK0NPTkZJR19QUk9DX1NZU0NUTD15CitDT05GSUdfU1lTRlM9eQorQ09ORklHX1RNUEZTPXkKK0NPTkZJR19UTVBGU19QT1NJWF9BQ0w9eQorIyBDT05GSUdfSFVHRVRMQkZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0CisjIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgTWlzY2VsbGFuZW91cyBmaWxlc3lzdGVtcworIworIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19KRkZTMl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUkFNRlMgaXMgbm90IHNldAorIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CitDT05GSUdfTkZTX0ZTPXkKKyMgQ09ORklHX05GU19WMyBpcyBub3Qgc2V0CisjIENPTkZJR19ORlNfVjQgaXMgbm90IHNldAorIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0CitDT05GSUdfUk9PVF9ORlM9eQorQ09ORklHX0xPQ0tEPXkKK0NPTkZJR19ORlNfQ09NTU9OPXkKK0NPTkZJR19TVU5SUEM9eQorIyBDT05GSUdfU1VOUlBDX0JJTkQzNCBpcyBub3Qgc2V0CisjIENPTkZJR19SUENTRUNfR1NTX0tSQjUgaXMgbm90IHNldAorIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0CisjIENPTkZJR19TTUJfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0CisjIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAorCisjCisjIFBhcnRpdGlvbiBUeXBlcworIworIyBDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEIGlzIG5vdCBzZXQKK0NPTkZJR19NU0RPU19QQVJUSVRJT049eQorQ09ORklHX05MUz15CitDT05GSUdfTkxTX0RFRkFVTFQ9Imlzbzg4NTktMSIKK0NPTkZJR19OTFNfQ09ERVBBR0VfNDM3PXkKKyMgQ09ORklHX05MU19DT0RFUEFHRV83MzcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzc3NSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODU3IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYyIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjMgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjYgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2OSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTM2IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85NTAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzMiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTQ5IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NzQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfOCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MSBpcyBub3Qgc2V0CitDT05GSUdfTkxTX0FTQ0lJPXkKK0NPTkZJR19OTFNfSVNPODg1OV8xPXkKKyMgQ09ORklHX05MU19JU084ODU5XzIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV80IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV83IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzkgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMTMgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMTQgaXMgbm90IHNldAorQ09ORklHX05MU19JU084ODU5XzE1PXkKKyMgQ09ORklHX05MU19LT0k4X1IgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0tPSThfVSBpcyBub3Qgc2V0CitDT05GSUdfTkxTX1VURjg9eQorIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKKworIworIyBLZXJuZWwgaGFja2luZworIworQ09ORklHX1RSQUNFX0lSUUZMQUdTX1NVUFBPUlQ9eQorQ09ORklHX1BSSU5US19USU1FPXkKK0NPTkZJR19FTkFCTEVfV0FSTl9ERVBSRUNBVEVEPXkKKyMgQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLIGlzIG5vdCBzZXQKK0NPTkZJR19GUkFNRV9XQVJOPTEwMjQKK0NPTkZJR19NQUdJQ19TWVNSUT15CitDT05GSUdfVU5VU0VEX1NZTUJPTFM9eQorIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfS0VSTkVMPXkKK0NPTkZJR19ERUJVR19TSElSUT15CitDT05GSUdfREVURUNUX1NPRlRMT0NLVVA9eQorIyBDT05GSUdfU0NIRURfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0CitDT05GSUdfVElNRVJfU1RBVFM9eQorIyBDT05GSUdfREVCVUdfT0JKRUNUUyBpcyBub3Qgc2V0CisjIENPTkZJR19TTFVCX0RFQlVHX09OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMVUJfU1RBVFMgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX1BSRUVNUFQ9eQorIyBDT05GSUdfREVCVUdfUlRfTVVURVhFUyBpcyBub3Qgc2V0CisjIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTVVURVhFUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19MT0NLX0FMTE9DIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BST1ZFX0xPQ0tJTkcgaXMgbm90IHNldAorIyBDT05GSUdfTE9DS19TVEFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0xPQ0tJTkdfQVBJX1NFTEZURVNUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19CVUdWRVJCT1NFPXkKK0NPTkZJR19ERUJVR19JTkZPPXkKKyMgQ09ORklHX0RFQlVHX1ZNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1dSSVRFQ09VTlQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0CisjIENPTkZJR19GUkFNRV9QT0lOVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPT1RfUFJJTlRLX0RFTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAorIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CisjIENPTkZJR19TSF9TVEFOREFSRF9CSU9TIGlzIG5vdCBzZXQKK0NPTkZJR19FQVJMWV9TQ0lGX0NPTlNPTEU9eQorQ09ORklHX0VBUkxZX1NDSUZfQ09OU09MRV9QT1JUPTB4ZmZlODAwMDAKK0NPTkZJR19FQVJMWV9QUklOVEs9eQorIyBDT05GSUdfREVCVUdfQk9PVE1FTSBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfU1RBQ0tPVkVSRkxPVz15CisjIENPTkZJR19ERUJVR19TVEFDS19VU0FHRSBpcyBub3Qgc2V0CisjIENPTkZJR180S1NUQUNLUyBpcyBub3Qgc2V0CisjIENPTkZJR19JUlFTVEFDS1MgaXMgbm90IHNldAorIyBDT05GSUdfU0hfS0dEQiBpcyBub3Qgc2V0CisKKyMKKyMgU2VjdXJpdHkgb3B0aW9ucworIworIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUyBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPPXkKKworIworIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKKyMKK0NPTkZJR19DUllQVE9fQUxHQVBJPXkKKyMgQ09ORklHX0NSWVBUT19NQU5BR0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTlVMTCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ1JZUFREIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19BVVRIRU5DIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19URVNUIGlzIG5vdCBzZXQKKworIworIyBBdXRoZW50aWNhdGVkIEVuY3J5cHRpb24gd2l0aCBBc3NvY2lhdGVkIERhdGEKKyMKKyMgQ09ORklHX0NSWVBUT19DQ00gaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dDTSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0VRSVYgaXMgbm90IHNldAorCisjCisjIEJsb2NrIG1vZGVzCisjCisjIENPTkZJR19DUllQVE9fQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DVFIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NUUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fRUNCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19MUlcgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1BDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1hUUyBpcyBub3Qgc2V0CisKKyMKKyMgSGFzaCBtb2RlcworIworIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorCisjCisjIERpZ2VzdAorIworIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fTUQ1PXkKKyMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0hBMSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0hBMjU2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TSEE1MTIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RHUjE5MiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fV1A1MTIgaXMgbm90IHNldAorCisjCisjIENpcGhlcnMKKyMKKyMgQ09ORklHX0NSWVBUT19BRVMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FOVUJJUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQVJDNCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQkxPV0ZJU0ggaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NBTUVMTElBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQVNUNSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0FTVDYgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19ERVM9eQorIyBDT05GSUdfQ1JZUFRPX0ZDUllQVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fS0hBWkFEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TQUxTQTIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TRUVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TRVJQRU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19URUEgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RXT0ZJU0ggaXMgbm90IHNldAorCisjCisjIENvbXByZXNzaW9uCisjCisjIENPTkZJR19DUllQVE9fREVGTEFURSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTFpPIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fSFc9eQorCisjCisjIExpYnJhcnkgcm91dGluZXMKKyMKK0NPTkZJR19CSVRSRVZFUlNFPXkKKyMgQ09ORklHX0dFTkVSSUNfRklORF9GSVJTVF9CSVQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDX0NDSVRUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQ19JVFVfVCBpcyBub3Qgc2V0CitDT05GSUdfQ1JDMzI9eQorIyBDT05GSUdfQ1JDNyBpcyBub3Qgc2V0CisjIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAorQ09ORklHX1BMSVNUPXkKK0NPTkZJR19IQVNfSU9NRU09eQorQ09ORklHX0hBU19JT1BPUlQ9eQorQ09ORklHX0hBU19ETUE9eQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9jb25maWdzL3J0czc3NTFyMmRwbHVzX3FlbXVfZGVmY29uZmlnIGIvYXJjaC9zaC9jb25maWdzL3J0czc3NTFyMmRwbHVzX3FlbXVfZGVmY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3Mjc5NmMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3NoL2NvbmZpZ3MvcnRzNzc1MXIyZHBsdXNfcWVtdV9kZWZjb25maWcKQEAgLTAsMCArMSw5MDkgQEAKKyMKKyMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yNy1yYzIKKyMgTW9uIEF1ZyAxOCAyMjoxNzo0NCAyMDA4CisjCitDT05GSUdfU1VQRVJIPXkKK0NPTkZJR19TVVBFUkgzMj15CitDT05GSUdfQVJDSF9ERUZDT05GSUc9ImFyY2gvc2gvY29uZmlncy9zaHgzX2RlZmNvbmZpZyIKK0NPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKK0NPTkZJR19HRU5FUklDX0JVRz15CitDT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUPXkKK0NPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQorQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQorQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CitDT05GSUdfR0VORVJJQ19JUlFfUFJPQkU9eQorQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKK0NPTkZJR19HRU5FUklDX1RJTUU9eQorQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQorQ09ORklHX1NZU19TVVBQT1JUU19QQ0k9eQorQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CitDT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKKyMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMiBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVM9eQorQ09ORklHX0lPX1RSQVBQRUQ9eQorQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKKworIworIyBHZW5lcmFsIHNldHVwCisjCitDT05GSUdfRVhQRVJJTUVOVEFMPXkKK0NPTkZJR19CUk9LRU5fT05fU01QPXkKK0NPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKK0NPTkZJR19MT0NBTFZFUlNJT049IiIKK0NPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15CitDT05GSUdfU1dBUD15CitDT05GSUdfU1lTVklQQz15CitDT05GSUdfU1lTVklQQ19TWVNDVEw9eQorIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0CitDT05GSUdfSUtDT05GSUc9eQorQ09ORklHX0lLQ09ORklHX1BST0M9eQorQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKKyMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAorQ09ORklHX0dST1VQX1NDSEVEPXkKK0NPTkZJR19GQUlSX0dST1VQX1NDSEVEPXkKKyMgQ09ORklHX1JUX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKK0NPTkZJR19VU0VSX1NDSEVEPXkKKyMgQ09ORklHX0NHUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CitDT05GSUdfU1lTRlNfREVQUkVDQVRFRD15CitDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMj15CisjIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0CisjIENPTkZJR19OQU1FU1BBQ0VTIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0lOSVRSRD15CitDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgorIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAorQ09ORklHX1NZU0NUTD15CitDT05GSUdfRU1CRURERUQ9eQorQ09ORklHX1VJRDE2PXkKKyMgQ09ORklHX1NZU0NUTF9TWVNDQUxMIGlzIG5vdCBzZXQKK0NPTkZJR19LQUxMU1lNUz15CisjIENPTkZJR19LQUxMU1lNU19BTEwgaXMgbm90IHNldAorIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0CisjIENPTkZJR19IT1RQTFVHIGlzIG5vdCBzZXQKK0NPTkZJR19QUklOVEs9eQorQ09ORklHX0JVRz15CitDT05GSUdfRUxGX0NPUkU9eQorQ09ORklHX0NPTVBBVF9CUks9eQorQ09ORklHX0JBU0VfRlVMTD15CitDT05GSUdfRlVURVg9eQorQ09ORklHX0FOT05fSU5PREVTPXkKK0NPTkZJR19FUE9MTD15CitDT05GSUdfU0lHTkFMRkQ9eQorQ09ORklHX1RJTUVSRkQ9eQorQ09ORklHX0VWRU5URkQ9eQorQ09ORklHX1NITUVNPXkKK0NPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CitDT05GSUdfU0xBQj15CisjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMT0IgaXMgbm90IHNldAorQ09ORklHX1BST0ZJTElORz15CisjIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKK0NPTkZJR19PUFJPRklMRT15CitDT05GSUdfSEFWRV9PUFJPRklMRT15CisjIENPTkZJR19IQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBVkVfS1BST0JFUyBpcyBub3Qgc2V0CisjIENPTkZJR19IQVZFX0tSRVRQUk9CRVMgaXMgbm90IHNldAorIyBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSyBpcyBub3Qgc2V0CisjIENPTkZJR19IQVZFX0RNQV9BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0VfR0VORVJJQ19TTVBfSEVMUEVSUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9DTEs9eQorQ09ORklHX1BST0NfUEFHRV9NT05JVE9SPXkKK0NPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UPXkKK0NPTkZJR19TTEFCSU5GTz15CitDT05GSUdfUlRfTVVURVhFUz15CisjIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKK0NPTkZJR19CQVNFX1NNQUxMPTAKK0NPTkZJR19NT0RVTEVTPXkKKyMgQ09ORklHX01PRFVMRV9GT1JDRV9MT0FEIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PRFVMRV9VTkxPQUQgaXMgbm90IHNldAorIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAorIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKK0NPTkZJR19LTU9EPXkKK0NPTkZJR19CTE9DSz15CisjIENPTkZJR19MQkQgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19MU0YgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAorCisjCisjIElPIFNjaGVkdWxlcnMKKyMKK0NPTkZJR19JT1NDSEVEX05PT1A9eQorQ09ORklHX0lPU0NIRURfQVM9eQorQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQorQ09ORklHX0lPU0NIRURfQ0ZRPXkKK0NPTkZJR19ERUZBVUxUX0FTPXkKKyMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImFudGljaXBhdG9yeSIKK0NPTkZJR19DTEFTU0lDX1JDVT15CisKKyMKKyMgU3lzdGVtIHR5cGUKKyMKK0NPTkZJR19DUFVfU0g0PXkKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzYxOSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDcyMDMgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MjA2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzI2MyBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9NWEcgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzA1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcwNiBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MDcgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzA4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcwOSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MTAgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzEyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjEgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzA5MSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NTBSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc1MFMgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzUxIGlzIG5vdCBzZXQKK0NPTkZJR19DUFVfU1VCVFlQRV9TSDc3NTFSPXkKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc2MCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDRfMjAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMyBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NjMgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzcwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4MCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODUgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0hYMyBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDczNDMgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzM2NiBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDVfMTAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINV8xMDMgaXMgbm90IHNldAorCisjCisjIE1lbW9yeSBtYW5hZ2VtZW50IG9wdGlvbnMKKyMKK0NPTkZJR19RVUlDS0xJU1Q9eQorQ09ORklHX01NVT15CitDT05GSUdfUEFHRV9PRkZTRVQ9MHg4MDAwMDAwMAorQ09ORklHX01FTU9SWV9TVEFSVD0weDBjMDAwMDAwCitDT05GSUdfTUVNT1JZX1NJWkU9MHgwNDAwMDAwMAorQ09ORklHXzI5QklUPXkKK0NPTkZJR19WU1lTQ0FMTD15CitDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CitDT05GSUdfQVJDSF9TUEFSU0VNRU1fRU5BQkxFPXkKK0NPTkZJR19BUkNIX1NQQVJTRU1FTV9ERUZBVUxUPXkKK0NPTkZJR19NQVhfQUNUSVZFX1JFR0lPTlM9MQorQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKK0NPTkZJR19BUkNIX1NFTEVDVF9NRU1PUllfTU9ERUw9eQorQ09ORklHX1BBR0VfU0laRV80S0I9eQorIyBDT05GSUdfUEFHRV9TSVpFXzhLQiBpcyBub3Qgc2V0CisjIENPTkZJR19QQUdFX1NJWkVfMTZLQiBpcyBub3Qgc2V0CisjIENPTkZJR19QQUdFX1NJWkVfNjRLQiBpcyBub3Qgc2V0CitDT05GSUdfRU5UUllfT0ZGU0VUPTB4MDAwMDEwMDAKK0NPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKK0NPTkZJR19GTEFUTUVNX01BTlVBTD15CisjIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQQVJTRU1FTV9NQU5VQUwgaXMgbm90IHNldAorQ09ORklHX0ZMQVRNRU09eQorQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKK0NPTkZJR19TUEFSU0VNRU1fU1RBVElDPXkKKyMgQ09ORklHX1NQQVJTRU1FTV9WTUVNTUFQX0VOQUJMRSBpcyBub3Qgc2V0CitDT05GSUdfUEFHRUZMQUdTX0VYVEVOREVEPXkKK0NPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00CisjIENPTkZJR19SRVNPVVJDRVNfNjRCSVQgaXMgbm90IHNldAorQ09ORklHX1pPTkVfRE1BX0ZMQUc9MAorQ09ORklHX05SX1FVSUNLPTIKKworIworIyBDYWNoZSBjb25maWd1cmF0aW9uCisjCisjIENPTkZJR19TSF9ESVJFQ1RfTUFQUEVEIGlzIG5vdCBzZXQKK0NPTkZJR19DQUNIRV9XUklURUJBQ0s9eQorIyBDT05GSUdfQ0FDSEVfV1JJVEVUSFJPVUdIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBQ0hFX09GRiBpcyBub3Qgc2V0CisKKyMKKyMgUHJvY2Vzc29yIGZlYXR1cmVzCisjCitDT05GSUdfQ1BVX0xJVFRMRV9FTkRJQU49eQorIyBDT05GSUdfQ1BVX0JJR19FTkRJQU4gaXMgbm90IHNldAorQ09ORklHX1NIX0ZQVT15CisjIENPTkZJR19TSF9TVE9SRV9RVUVVRVMgaXMgbm90IHNldAorQ09ORklHX0NQVV9IQVNfSU5URVZUPXkKK0NPTkZJR19DUFVfSEFTX1NSX1JCPXkKK0NPTkZJR19DUFVfSEFTX1BURUE9eQorQ09ORklHX0NQVV9IQVNfRlBVPXkKKworIworIyBCb2FyZCBzdXBwb3J0CisjCisjIENPTkZJR19TSF83NzUxX1NZU1RFTUggaXMgbm90IHNldAorIyBDT05GSUdfU0hfU0VDVVJFRURHRTU0MTAgaXMgbm90IHNldAorQ09ORklHX1NIX1JUUzc3NTFSMkQ9eQorIyBDT05GSUdfU0hfTEFORElTSyBpcyBub3Qgc2V0CisjIENPTkZJR19TSF9USVRBTiBpcyBub3Qgc2V0CisjIENPTkZJR19TSF9MQk9YX1JFMiBpcyBub3Qgc2V0CisKKyMKKyMgUlRTNzc1MVIyRCBCb2FyZCBSZXZpc2lvbgorIworQ09ORklHX1JUUzc3NTFSMkRfUExVUz15CisjIENPTkZJR19SVFM3NzUxUjJEXzEgaXMgbm90IHNldAorCisjCisjIFRpbWVyIGFuZCBjbG9jayBjb25maWd1cmF0aW9uCisjCitDT05GSUdfU0hfVE1VPXkKK0NPTkZJR19TSF9USU1FUl9JUlE9MTYKK0NPTkZJR19TSF9QQ0xLX0ZSRVE9NjAwMDAwMDAKKyMgQ09ORklHX1RJQ0tfT05FU0hPVCBpcyBub3Qgc2V0CisjIENPTkZJR19OT19IWiBpcyBub3Qgc2V0CisjIENPTkZJR19ISUdIX1JFU19USU1FUlMgaXMgbm90IHNldAorQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFNfQlVJTEQ9eQorCisjCisjIENQVSBGcmVxdWVuY3kgc2NhbGluZworIworIyBDT05GSUdfQ1BVX0ZSRVEgaXMgbm90IHNldAorCisjCisjIERNQSBzdXBwb3J0CisjCisjIENPTkZJR19TSF9ETUEgaXMgbm90IHNldAorCisjCisjIENvbXBhbmlvbiBDaGlwcworIworCisjCisjIEFkZGl0aW9uYWwgU3VwZXJIIERldmljZSBEcml2ZXJzCisjCitDT05GSUdfSEVBUlRCRUFUPXkKKyMgQ09ORklHX1BVU0hfU1dJVENIIGlzIG5vdCBzZXQKKworIworIyBLZXJuZWwgZmVhdHVyZXMKKyMKKyMgQ09ORklHX0haXzEwMCBpcyBub3Qgc2V0CitDT05GSUdfSFpfMjUwPXkKKyMgQ09ORklHX0haXzMwMCBpcyBub3Qgc2V0CisjIENPTkZJR19IWl8xMDAwIGlzIG5vdCBzZXQKK0NPTkZJR19IWj0yNTAKKyMgQ09ORklHX1NDSEVEX0hSVElDSyBpcyBub3Qgc2V0CisjIENPTkZJR19LRVhFQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUkFTSF9EVU1QIGlzIG5vdCBzZXQKK0NPTkZJR19TRUNDT01QPXkKK0NPTkZJR19QUkVFTVBUX05PTkU9eQorIyBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlkgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0CitDT05GSUdfR1VTQT15CisjIENPTkZJR19HVVNBX1JCIGlzIG5vdCBzZXQKKworIworIyBCb290IG9wdGlvbnMKKyMKK0NPTkZJR19aRVJPX1BBR0VfT0ZGU0VUPTB4MDAwMTAwMDAKK0NPTkZJR19CT09UX0xJTktfT0ZGU0VUPTB4MDA4MDAwMDAKKyMgQ09ORklHX1VCQ19XQUtFVVAgaXMgbm90IHNldAorQ09ORklHX0NNRExJTkVfQk9PTD15CitDT05GSUdfQ01ETElORT0iY29uc29sZT10dHkwIGNvbnNvbGU9dHR5U0MwLDExNTIwMCByb290PS9kZXYvc2RhMSBlYXJseXByaW50az1zZXJpYWwiCisKKyMKKyMgQnVzIG9wdGlvbnMKKyMKKyMgQ09ORklHX1BDSSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1NVUFBPUlRTX01TSSBpcyBub3Qgc2V0CisKKyMKKyMgRXhlY3V0YWJsZSBmaWxlIGZvcm1hdHMKKyMKK0NPTkZJR19CSU5GTVRfRUxGPXkKKyMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVCBpcyBub3Qgc2V0CisKKyMKKyMgRGV2aWNlIERyaXZlcnMKKyMKKworIworIyBHZW5lcmljIERyaXZlciBPcHRpb25zCisjCitDT05GSUdfU1RBTkRBTE9ORT15CitDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CisjIENPTkZJR19ERUJVR19EUklWRVIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfREVWUkVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWPXkKKyMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0xPT1AgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfUkFNPXkKK0NPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgorQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9NDA5NgorIyBDT05GSUdfQkxLX0RFVl9YSVAgaXMgbm90IHNldAorIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0hEIGlzIG5vdCBzZXQKK0NPTkZJR19NSVNDX0RFVklDRVM9eQorIyBDT05GSUdfRUVQUk9NXzkzQ1g2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0VOQ0xPU1VSRV9TRVJWSUNFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9JREU9eQorIyBDT05GSUdfSURFIGlzIG5vdCBzZXQKKworIworIyBTQ1NJIGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJPXkKK0NPTkZJR19TQ1NJX0RNQT15CisjIENPTkZJR19TQ1NJX1RHVCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAorQ09ORklHX1NDU0lfUFJPQ19GUz15CisKKyMKKyMgU0NTSSBzdXBwb3J0IHR5cGUgKGRpc2ssIHRhcGUsIENELVJPTSkKKyMKK0NPTkZJR19CTEtfREVWX1NEPXkKKyMgQ09ORklHX0NIUl9ERVZfU1QgaXMgbm90IHNldAorIyBDT05GSUdfQ0hSX0RFVl9PU1NUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfU1IgaXMgbm90IHNldAorIyBDT05GSUdfQ0hSX0RFVl9TRyBpcyBub3Qgc2V0CisjIENPTkZJR19DSFJfREVWX1NDSCBpcyBub3Qgc2V0CisKKyMKKyMgU29tZSBTQ1NJIGRldmljZXMgKGUuZy4gQ0QganVrZWJveCkgc3VwcG9ydCBtdWx0aXBsZSBMVU5zCisjCisjIENPTkZJR19TQ1NJX01VTFRJX0xVTiBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0NPTlNUQU5UUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0xPR0dJTkcgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TQ0FOX0FTWU5DIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX1dBSVRfU0NBTj1tCisKKyMKKyMgU0NTSSBUcmFuc3BvcnRzCisjCisjIENPTkZJR19TQ1NJX1NQSV9BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0ZDX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU0FTX0xJQlNBUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NSUF9BVFRSUyBpcyBub3Qgc2V0CitDT05GSUdfU0NTSV9MT1dMRVZFTD15CisjIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfREggaXMgbm90IHNldAorQ09ORklHX0FUQT15CisjIENPTkZJR19BVEFfTk9OU1RBTkRBUkQgaXMgbm90IHNldAorQ09ORklHX1NBVEFfUE1QPXkKK0NPTkZJR19BVEFfU0ZGPXkKKyMgQ09ORklHX1NBVEFfTVYgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9QTEFURk9STSBpcyBub3Qgc2V0CisjIENPTkZJR19NRCBpcyBub3Qgc2V0CisjIENPTkZJR19QSE9ORSBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKKyMKK0NPTkZJR19JTlBVVD15CisjIENPTkZJR19JTlBVVF9GRl9NRU1MRVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1BPTExERVYgaXMgbm90IHNldAorCisjCisjIFVzZXJsYW5kIGludGVyZmFjZXMKKyMKKyMgQ09ORklHX0lOUFVUX01PVVNFREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9FVkRFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgRGV2aWNlIERyaXZlcnMKKyMKKyMgQ09ORklHX0lOUFVUX0tFWUJPQVJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX01PVVNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1RBQkxFVCBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9NSVNDIGlzIG5vdCBzZXQKKworIworIyBIYXJkd2FyZSBJL08gcG9ydHMKKyMKKyMgQ09ORklHX1NFUklPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKKworIworIyBDaGFyYWN0ZXIgZGV2aWNlcworIworQ09ORklHX1ZUPXkKK0NPTkZJR19DT05TT0xFX1RSQU5TTEFUSU9OUz15CitDT05GSUdfVlRfQ09OU09MRT15CitDT05GSUdfSFdfQ09OU09MRT15CitDT05GSUdfVlRfSFdfQ09OU09MRV9CSU5ESU5HPXkKK0NPTkZJR19ERVZLTUVNPXkKKyMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0CisKKyMKKyMgU2VyaWFsIGRyaXZlcnMKKyMKK0NPTkZJR19TRVJJQUxfODI1MD15CisjIENPTkZJR19TRVJJQUxfODI1MF9DT05TT0xFIGlzIG5vdCBzZXQKK0NPTkZJR19TRVJJQUxfODI1MF9OUl9VQVJUUz00CitDT05GSUdfU0VSSUFMXzgyNTBfUlVOVElNRV9VQVJUUz00CisjIENPTkZJR19TRVJJQUxfODI1MF9FWFRFTkRFRCBpcyBub3Qgc2V0CisKKyMKKyMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAorIworQ09ORklHX1NFUklBTF9TSF9TQ0k9eQorQ09ORklHX1NFUklBTF9TSF9TQ0lfTlJfVUFSVFM9MQorQ09ORklHX1NFUklBTF9TSF9TQ0lfQ09OU09MRT15CitDT05GSUdfU0VSSUFMX0NPUkU9eQorQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQorQ09ORklHX1VOSVg5OF9QVFlTPXkKK0NPTkZJR19MRUdBQ1lfUFRZUz15CitDT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKKyMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0CitDT05GSUdfSFdfUkFORE9NPXkKKyMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAorIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkMgaXMgbm90IHNldAorQ09ORklHX1NQST15CisjIENPTkZJR19TUElfREVCVUcgaXMgbm90IHNldAorQ09ORklHX1NQSV9NQVNURVI9eQorCisjCisjIFNQSSBNYXN0ZXIgQ29udHJvbGxlciBEcml2ZXJzCisjCitDT05GSUdfU1BJX0JJVEJBTkc9eQorIyBDT05GSUdfU1BJX1NIX1NDSSBpcyBub3Qgc2V0CisKKyMKKyMgU1BJIFByb3RvY29sIE1hc3RlcnMKKyMKKyMgQ09ORklHX1NQSV9BVDI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQSV9TUElERVYgaXMgbm90IHNldAorIyBDT05GSUdfU1BJX1RMRTYyWDAgaXMgbm90IHNldAorIyBDT05GSUdfVzEgaXMgbm90IHNldAorIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKK0NPTkZJR19IV01PTj15CisjIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19GNzE4MDVGIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRjcxODgyRkcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19JVDg3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE03MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDODczNjAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQzg3NDI3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfU01TQzQ3TTEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19TTVNDNDdCMzk3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVlQxMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzNjI3SEYgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODM2MjdFSEYgaXMgbm90IHNldAorIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CisjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAorIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAorCisjCisjIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQorIworQ09ORklHX1NTQl9QT1NTSUJMRT15CisjIENPTkZJR19TU0IgaXMgbm90IHNldAorCisjCisjIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01GRF9DT1JFIGlzIG5vdCBzZXQKK0NPTkZJR19NRkRfU001MDE9eQorIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0CisKKyMKKyMgTXVsdGltZWRpYSBkZXZpY2VzCisjCisKKyMKKyMgTXVsdGltZWRpYSBjb3JlIHN1cHBvcnQKKyMKKyMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19NRURJQSBpcyBub3Qgc2V0CisKKyMKKyMgTXVsdGltZWRpYSBkcml2ZXJzCisjCitDT05GSUdfREFCPXkKKworIworIyBHcmFwaGljcyBzdXBwb3J0CisjCisjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CitDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0w9bQorQ09ORklHX0ZCPXkKKyMgQ09ORklHX0ZJUk1XQVJFX0VESUQgaXMgbm90IHNldAorIyBDT05GSUdfRkJfRERDIGlzIG5vdCBzZXQKK0NPTkZJR19GQl9DRkJfRklMTFJFQ1Q9eQorQ09ORklHX0ZCX0NGQl9DT1BZQVJFQT15CitDT05GSUdfRkJfQ0ZCX0lNQUdFQkxJVD15CisjIENPTkZJR19GQl9DRkJfUkVWX1BJWEVMU19JTl9CWVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NZU19GSUxMUkVDVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TWVNfQ09QWUFSRUEgaXMgbm90IHNldAorIyBDT05GSUdfRkJfU1lTX0lNQUdFQkxJVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9GT1JFSUdOX0VORElBTiBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TWVNfRk9QUyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TVkdBTElCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX01BQ01PREVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0JBQ0tMSUdIVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9NT0RFX0hFTFBFUlMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfVElMRUJMSVRUSU5HIGlzIG5vdCBzZXQKKworIworIyBGcmFtZSBidWZmZXIgaGFyZHdhcmUgZHJpdmVycworIworIyBDT05GSUdfRkJfUzFEMTNYWFggaXMgbm90IHNldAorQ09ORklHX0ZCX1NIX01PQklMRV9MQ0RDPW0KK0NPTkZJR19GQl9TTTUwMT15CisjIENPTkZJR19GQl9WSVJUVUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfRElTUExBWV9TVVBQT1JUIGlzIG5vdCBzZXQKKworIworIyBDb25zb2xlIGRpc3BsYXkgZHJpdmVyIHN1cHBvcnQKKyMKK0NPTkZJR19EVU1NWV9DT05TT0xFPXkKK0NPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFPXkKKyMgQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEVfREVURUNUX1BSSU1BUlkgaXMgbm90IHNldAorIyBDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRV9ST1RBVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19GT05UUyBpcyBub3Qgc2V0CitDT05GSUdfRk9OVF84eDg9eQorQ09ORklHX0ZPTlRfOHgxNj15CitDT05GSUdfTE9HTz15CisjIENPTkZJR19MT0dPX0xJTlVYX01PTk8gaXMgbm90IHNldAorIyBDT05GSUdfTE9HT19MSU5VWF9WR0ExNiBpcyBub3Qgc2V0CisjIENPTkZJR19MT0dPX0xJTlVYX0NMVVQyMjQgaXMgbm90IHNldAorIyBDT05GSUdfTE9HT19TVVBFUkhfTU9OTyBpcyBub3Qgc2V0CisjIENPTkZJR19MT0dPX1NVUEVSSF9WR0ExNiBpcyBub3Qgc2V0CitDT05GSUdfTE9HT19TVVBFUkhfQ0xVVDIyND15CitDT05GSUdfU09VTkQ9eQorQ09ORklHX1NORD1tCisjIENPTkZJR19TTkRfU0VRVUVOQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9NSVhFUl9PU1MgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1BDTV9PU1MgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0RZTkFNSUNfTUlOT1JTIGlzIG5vdCBzZXQKK0NPTkZJR19TTkRfU1VQUE9SVF9PTERfQVBJPXkKK0NPTkZJR19TTkRfVkVSQk9TRV9QUk9DRlM9eQorIyBDT05GSUdfU05EX1ZFUkJPU0VfUFJJTlRLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfU05EX0RSSVZFUlM9eQorIyBDT05GSUdfU05EX0RVTU1ZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9NVFBBViBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfU0VSSUFMX1UxNjU1MCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfTVBVNDAxIGlzIG5vdCBzZXQKK0NPTkZJR19TTkRfU1BJPXkKK0NPTkZJR19TTkRfU1VQRVJIPXkKKyMgQ09ORklHX1NORF9TT0MgaXMgbm90IHNldAorQ09ORklHX1NPVU5EX1BSSU1FPW0KK0NPTkZJR19ISURfU1VQUE9SVD15CitDT05GSUdfSElEPXkKKyMgQ09ORklHX0hJRF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19ISURSQVcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NVUFBPUlQgaXMgbm90IHNldAorIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FDQ0VTU0lCSUxJVFkgaXMgbm90IHNldAorQ09ORklHX1JUQ19MSUI9eQorQ09ORklHX1JUQ19DTEFTUz15CitDT05GSUdfUlRDX0hDVE9TWVM9eQorQ09ORklHX1JUQ19IQ1RPU1lTX0RFVklDRT0icnRjMCIKKyMgQ09ORklHX1JUQ19ERUJVRyBpcyBub3Qgc2V0CisKKyMKKyMgUlRDIGludGVyZmFjZXMKKyMKK0NPTkZJR19SVENfSU5URl9TWVNGUz15CitDT05GSUdfUlRDX0lOVEZfUFJPQz15CitDT05GSUdfUlRDX0lOVEZfREVWPXkKKyMgQ09ORklHX1JUQ19JTlRGX0RFVl9VSUVfRU1VTCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1RFU1QgaXMgbm90IHNldAorCisjCisjIFNQSSBSVEMgZHJpdmVycworIworIyBDT05GSUdfUlRDX0RSVl9NNDFUOTQgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzEzMDUgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NQVg2OTAyIGlzIG5vdCBzZXQKK0NPTkZJR19SVENfRFJWX1I5NzAxPXkKKyMgQ09ORklHX1JUQ19EUlZfUlM1QzM0OCBpcyBub3Qgc2V0CisKKyMKKyMgUGxhdGZvcm0gUlRDIGRyaXZlcnMKKyMKKyMgQ09ORklHX1JUQ19EUlZfRFMxNTExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNTUzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNzQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfU1RLMTdUQTggaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDhUODYgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDhUNTkgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9WMzAyMCBpcyBub3Qgc2V0CisKKyMKKyMgb24tQ1BVIFJUQyBkcml2ZXJzCisjCisjIENPTkZJR19SVENfRFJWX1NIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldAorIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKKworIworIyBGaWxlIHN5c3RlbXMKKyMKK0NPTkZJR19FWFQyX0ZTPXkKKyMgQ09ORklHX0VYVDJfRlNfWEFUVFIgaXMgbm90IHNldAorIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAorIyBDT05GSUdfRVhUM19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQ0REVWX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAorIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19ETk9USUZZPXkKK0NPTkZJR19JTk9USUZZPXkKK0NPTkZJR19JTk9USUZZX1VTRVI9eQorIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAorIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVVE9GUzRfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0CisKKyMKKyMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcworIworIyBDT05GSUdfSVNPOTY2MF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19VREZfRlMgaXMgbm90IHNldAorCisjCisjIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKKyMKK0NPTkZJR19GQVRfRlM9eQorQ09ORklHX01TRE9TX0ZTPXkKK0NPTkZJR19WRkFUX0ZTPXkKK0NPTkZJR19GQVRfREVGQVVMVF9DT0RFUEFHRT00MzcKK0NPTkZJR19GQVRfREVGQVVMVF9JT0NIQVJTRVQ9Imlzbzg4NTktMSIKKyMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAorCisjCisjIFBzZXVkbyBmaWxlc3lzdGVtcworIworQ09ORklHX1BST0NfRlM9eQorQ09ORklHX1BST0NfS0NPUkU9eQorQ09ORklHX1BST0NfU1lTQ1RMPXkKK0NPTkZJR19TWVNGUz15CitDT05GSUdfVE1QRlM9eQorIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hVR0VUTEJGUyBpcyBub3Qgc2V0CisjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAorIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAorCisjCisjIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKKyMKKyMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEZTUExVU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JBTUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAorQ09ORklHX01JTklYX0ZTPXkKKyMgQ09ORklHX09NRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAorCisjCisjIFBhcnRpdGlvbiBUeXBlcworIworIyBDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEIGlzIG5vdCBzZXQKK0NPTkZJR19NU0RPU19QQVJUSVRJT049eQorQ09ORklHX05MUz15CitDT05GSUdfTkxTX0RFRkFVTFQ9Imlzbzg4NTktMSIKKyMgQ09ORklHX05MU19DT0RFUEFHRV80MzcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzczNyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfNzc1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODU1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYxIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY5IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85MzYgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzk1MCBpcyBub3Qgc2V0CitDT05GSUdfTkxTX0NPREVQQUdFXzkzMj15CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTQ5IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NzQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfOCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQVNDSUkgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8yIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzMgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV81IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzYgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV85IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzEzIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzE0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzE1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19LT0k4X1IgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0tPSThfVSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfVVRGOCBpcyBub3Qgc2V0CisKKyMKKyMgS2VybmVsIGhhY2tpbmcKKyMKK0NPTkZJR19UUkFDRV9JUlFGTEFHU19TVVBQT1JUPXkKKyMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKK0NPTkZJR19FTkFCTEVfV0FSTl9ERVBSRUNBVEVEPXkKK0NPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CitDT05GSUdfRlJBTUVfV0FSTj0xMDI0CisjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CisjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfRlM9eQorIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfS0VSTkVMPXkKKyMgQ09ORklHX0RFQlVHX1NISVJRIGlzIG5vdCBzZXQKK0NPTkZJR19ERVRFQ1RfU09GVExPQ0tVUD15CisjIENPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQyBpcyBub3Qgc2V0CitDT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUNfVkFMVUU9MAorQ09ORklHX1NDSEVEX0RFQlVHPXkKKyMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfVElNRVJfU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfT0JKRUNUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TTEFCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAorIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX01VVEVYRVMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTE9DS19BTExPQyBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9WRV9MT0NLSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xPQ0tfU1RBVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19MT0NLSU5HX0FQSV9TRUxGVEVTVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19CVUdWRVJCT1NFIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19JTkZPPXkKKyMgQ09ORklHX0RFQlVHX1ZNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1dSSVRFQ09VTlQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTUVNT1JZX0lOSVQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0CisjIENPTkZJR19GUkFNRV9QT0lOVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPT1RfUFJJTlRLX0RFTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAorIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CisjIENPTkZJR19TSF9TVEFOREFSRF9CSU9TIGlzIG5vdCBzZXQKK0NPTkZJR19FQVJMWV9TQ0lGX0NPTlNPTEU9eQorQ09ORklHX0VBUkxZX1NDSUZfQ09OU09MRV9QT1JUPTB4ZmZlODAwMDAKK0NPTkZJR19FQVJMWV9QUklOVEs9eQorIyBDT05GSUdfREVCVUdfQk9PVE1FTSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TVEFDS09WRVJGTE9XIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHXzRLU1RBQ0tTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lSUVNUQUNLUyBpcyBub3Qgc2V0CisjIENPTkZJR19TSF9LR0RCIGlzIG5vdCBzZXQKKworIworIyBTZWN1cml0eSBvcHRpb25zCisjCisjIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZX0ZJTEVfQ0FQQUJJTElUSUVTIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE89eQorCisjCisjIENyeXB0byBjb3JlIG9yIGhlbHBlcgorIworIyBDT05GSUdfQ1JZUFRPX01BTkFHRVIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19OVUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DUllQVEQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FVVEhFTkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RFU1QgaXMgbm90IHNldAorCisjCisjIEF1dGhlbnRpY2F0ZWQgRW5jcnlwdGlvbiB3aXRoIEFzc29jaWF0ZWQgRGF0YQorIworIyBDT05GSUdfQ1JZUFRPX0NDTSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0NNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TRVFJViBpcyBub3Qgc2V0CisKKyMKKyMgQmxvY2sgbW9kZXMKKyMKKyMgQ09ORklHX0NSWVBUT19DQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NUUiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ1RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19FQ0IgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0xSVyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fWFRTIGlzIG5vdCBzZXQKKworIworIyBIYXNoIG1vZGVzCisjCisjIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisKKyMKKyMgRGlnZXN0CisjCisjIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX01ENSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDEyOCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMTYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQyNTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDMyMCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0hBMSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0hBMjU2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TSEE1MTIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RHUjE5MiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fV1A1MTIgaXMgbm90IHNldAorCisjCisjIENpcGhlcnMKKyMKKyMgQ09ORklHX0NSWVBUT19BRVMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FOVUJJUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQVJDNCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQkxPV0ZJU0ggaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NBTUVMTElBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQVNUNSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0FTVDYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0RFUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fRkNSWVBUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19LSEFaQUQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NBTFNBMjAgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NFRUQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NFUlBFTlQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RFQSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVFdPRklTSCBpcyBub3Qgc2V0CisKKyMKKyMgQ29tcHJlc3Npb24KKyMKKyMgQ09ORklHX0NSWVBUT19ERUZMQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19MWk8gaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19IVz15CisKKyMKKyMgTGlicmFyeSByb3V0aW5lcworIworQ09ORklHX0JJVFJFVkVSU0U9eQorIyBDT05GSUdfR0VORVJJQ19GSU5EX0ZJUlNUX0JJVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUkNfQ0NJVFQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAorQ09ORklHX0NSQ19UMTBESUY9eQorIyBDT05GSUdfQ1JDX0lUVV9UIGlzIG5vdCBzZXQKK0NPTkZJR19DUkMzMj15CisjIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0CitDT05GSUdfUExJU1Q9eQorQ09ORklHX0hBU19JT01FTT15CitDT05GSUdfSEFTX0lPUE9SVD15CitDT05GSUdfSEFTX0RNQT15CmRpZmYgLS1naXQgYS9hcmNoL3NoL2RyaXZlcnMvcGNpL29wcy1sYm94cmUyLmMgYi9hcmNoL3NoL2RyaXZlcnMvcGNpL29wcy1sYm94cmUyLmMKaW5kZXggYTEzY2I3Ni4uODZjMGI2ZiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9kcml2ZXJzL3BjaS9vcHMtbGJveHJlMi5jCisrKyBiL2FyY2gvc2gvZHJpdmVycy9wY2kvb3BzLWxib3hyZTIuYwpAQCAtMTAsNyArMTAsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgotI2luY2x1ZGUgPGFzbS9sYm94cmUyLmg+CisjaW5jbHVkZSA8bWFjaC9sYm94cmUyLmg+CiAjaW5jbHVkZSAicGNpLXNoNC5oIgogCiBzdGF0aWMgY2hhciBsYm94cmUyX2lycV90YWJbXSBfX2luaXRkYXRhID0gewpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9kcml2ZXJzL3BjaS9vcHMtcjc3ODBycC5jIGIvYXJjaC9zaC9kcml2ZXJzL3BjaS9vcHMtcjc3ODBycC5jCmluZGV4IDVmZGFkYWUuLjg1NTUyMzggMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvZHJpdmVycy9wY2kvb3BzLXI3NzgwcnAuYworKysgYi9hcmNoL3NoL2RyaXZlcnMvcGNpL29wcy1yNzc4MHJwLmMKQEAgLTEzLDcgKzEzLDcgQEAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KLSNpbmNsdWRlIDxhc20vcjc3ODBycC5oPgorI2luY2x1ZGUgPG1hY2gvaGlnaGxhbmRlci5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgInBjaS1zaDQuaCIKIApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9kcml2ZXJzL3BjaS9vcHMtcnRzNzc1MXIyZC5jIGIvYXJjaC9zaC9kcml2ZXJzL3BjaS9vcHMtcnRzNzc1MXIyZC5jCmluZGV4IGIzZmEzZTIuLmQ2Y2E3NGIgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvZHJpdmVycy9wY2kvb3BzLXJ0czc3NTFyMmQuYworKysgYi9hcmNoL3NoL2RyaXZlcnMvcGNpL29wcy1ydHM3NzUxcjJkLmMKQEAgLTE1LDcgKzE1LDcgQEAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KLSNpbmNsdWRlIDxhc20vcnRzNzc1MXIyZC5oPgorI2luY2x1ZGUgPG1hY2gvcjJkLmg+CiAjaW5jbHVkZSAicGNpLXNoNC5oIgogCiBzdGF0aWMgdTggcnRzNzc1MXIyZF9pcnFfdGFiW10gX19pbml0ZGF0YSA9IHsKZGlmZiAtLWdpdCBhL2FyY2gvc2gvZHJpdmVycy9wY2kvb3BzLXNkazc3ODAuYyBiL2FyY2gvc2gvZHJpdmVycy9wY2kvb3BzLXNkazc3ODAuYwppbmRleCA2NmE5YjQwLi40ZGNjNjQxIDEwMDY0NAotLS0gYS9hcmNoL3NoL2RyaXZlcnMvcGNpL29wcy1zZGs3NzgwLmMKKysrIGIvYXJjaC9zaC9kcml2ZXJzL3BjaS9vcHMtc2RrNzc4MC5jCkBAIC0xMyw3ICsxMyw3IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+Ci0jaW5jbHVkZSA8YXNtL3Nkazc3ODAuaD4KKyNpbmNsdWRlIDxtYWNoL3Nkazc3ODAuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlICJwY2ktc2g0LmgiCiAKZGlmZiAtLWdpdCBhL2FyY2gvc2gvZHJpdmVycy9wY2kvb3BzLXRpdGFuLmMgYi9hcmNoL3NoL2RyaXZlcnMvcGNpL29wcy10aXRhbi5jCmluZGV4IGFjOGVlMjMuLmE4Zjc4MDEgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvZHJpdmVycy9wY2kvb3BzLXRpdGFuLmMKKysrIGIvYXJjaC9zaC9kcml2ZXJzL3BjaS9vcHMtdGl0YW4uYwpAQCAtMTYsNyArMTYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgotI2luY2x1ZGUgPGFzbS90aXRhbi5oPgorI2luY2x1ZGUgPG1hY2gvdGl0YW4uaD4KICNpbmNsdWRlICJwY2ktc2g0LmgiCiAKIHN0YXRpYyBjaGFyIHRpdGFuX2lycV90YWJbXSBfX2luaXRkYXRhID0gewpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9iaXRvcHMtbGxzYy5oIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9iaXRvcHMtbGxzYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQzYjhlMWEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3NoL2luY2x1ZGUvYXNtL2JpdG9wcy1sbHNjLmgKQEAgLTAsMCArMSwxNDQgQEAKKyNpZm5kZWYgX19BU01fU0hfQklUT1BTX0xMU0NfSAorI2RlZmluZSBfX0FTTV9TSF9CSVRPUFNfTExTQ19ICisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRfYml0KGludCBuciwgdm9sYXRpbGUgdm9pZCAqIGFkZHIpCit7CisJaW50CW1hc2s7CisJdm9sYXRpbGUgdW5zaWduZWQgaW50ICphID0gYWRkcjsKKwl1bnNpZ25lZCBsb25nIHRtcDsKKworCWEgKz0gbnIgPj4gNTsKKwltYXNrID0gMSA8PCAobnIgJiAweDFmKTsKKworCV9fYXNtX18gX192b2xhdGlsZV9fICgKKwkJIjE6CQkJCQkJXG5cdCIKKwkJIm1vdmxpLmwJQCUxLCAlMAkhIHNldF9iaXQJCVxuXHQiCisJCSJvcgkJJTMsICUwCQkJCVxuXHQiCisJCSJtb3Zjby5sCSUwLCBAJTEJCQkJXG5cdCIKKwkJImJmCQkxYgkJCQlcblx0IgorCQk6ICI9JnoiICh0bXApLCAiPXIiIChhKQorCQk6ICIxIiAoYSksICJyIiAobWFzaykKKwkJOiAidCIsICJtZW1vcnkiCisJKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGNsZWFyX2JpdChpbnQgbnIsIHZvbGF0aWxlIHZvaWQgKiBhZGRyKQoreworCWludAltYXNrOworCXZvbGF0aWxlIHVuc2lnbmVkIGludCAqYSA9IGFkZHI7CisJdW5zaWduZWQgbG9uZyB0bXA7CisKKwlhICs9IG5yID4+IDU7CisJbWFzayA9IDEgPDwgKG5yICYgMHgxZik7CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCisJCSIxOgkJCQkJCVxuXHQiCisJCSJtb3ZsaS5sCUAlMSwgJTAJISBjbGVhcl9iaXQJCVxuXHQiCisJCSJhbmQJCSUzLCAlMAkJCQlcblx0IgorCQkibW92Y28ubAklMCwgQCUxCQkJCVxuXHQiCisJCSJiZgkJMWIJCQkJXG5cdCIKKwkJOiAiPSZ6IiAodG1wKSwgIj1yIiAoYSkKKwkJOiAiMSIgKGEpLCAiciIgKH5tYXNrKQorCQk6ICJ0IiwgIm1lbW9yeSIKKwkpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgY2hhbmdlX2JpdChpbnQgbnIsIHZvbGF0aWxlIHZvaWQgKiBhZGRyKQoreworCWludAltYXNrOworCXZvbGF0aWxlIHVuc2lnbmVkIGludCAqYSA9IGFkZHI7CisJdW5zaWduZWQgbG9uZyB0bXA7CisKKwlhICs9IG5yID4+IDU7CisJbWFzayA9IDEgPDwgKG5yICYgMHgxZik7CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCisJCSIxOgkJCQkJCVxuXHQiCisJCSJtb3ZsaS5sCUAlMSwgJTAJISBjaGFuZ2VfYml0CQlcblx0IgorCQkieG9yCQklMywgJTAJCQkJXG5cdCIKKwkJIm1vdmNvLmwJJTAsIEAlMQkJCQlcblx0IgorCQkiYmYJCTFiCQkJCVxuXHQiCisJCTogIj0meiIgKHRtcCksICI9ciIgKGEpCisJCTogIjEiIChhKSwgInIiIChtYXNrKQorCQk6ICJ0IiwgIm1lbW9yeSIKKwkpOworfQorCitzdGF0aWMgaW5saW5lIGludCB0ZXN0X2FuZF9zZXRfYml0KGludCBuciwgdm9sYXRpbGUgdm9pZCAqIGFkZHIpCit7CisJaW50CW1hc2ssIHJldHZhbDsKKwl2b2xhdGlsZSB1bnNpZ25lZCBpbnQgKmEgPSBhZGRyOworCXVuc2lnbmVkIGxvbmcgdG1wOworCisJYSArPSBuciA+PiA1OworCW1hc2sgPSAxIDw8IChuciAmIDB4MWYpOworCisJX19hc21fXyBfX3ZvbGF0aWxlX18gKAorCQkiMToJCQkJCQlcblx0IgorCQkibW92bGkubAlAJTEsICUwCSEgdGVzdF9hbmRfc2V0X2JpdAlcblx0IgorCQkibW92CQklMCwgJTIJCQkJXG5cdCIKKwkJIm9yCQklNCwgJTAJCQkJXG5cdCIKKwkJIm1vdmNvLmwJJTAsIEAlMQkJCQlcblx0IgorCQkiYmYJCTFiCQkJCVxuXHQiCisJCSJhbmQJCSU0LCAlMgkJCQlcblx0IgorCQk6ICI9JnoiICh0bXApLCAiPXIiIChhKSwgIj0mciIgKHJldHZhbCkKKwkJOiAiMSIgKGEpLCAiciIgKG1hc2spCisJCTogInQiLCAibWVtb3J5IgorCSk7CisKKwlyZXR1cm4gcmV0dmFsICE9IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHRlc3RfYW5kX2NsZWFyX2JpdChpbnQgbnIsIHZvbGF0aWxlIHZvaWQgKiBhZGRyKQoreworCWludAltYXNrLCByZXR2YWw7CisJdm9sYXRpbGUgdW5zaWduZWQgaW50ICphID0gYWRkcjsKKwl1bnNpZ25lZCBsb25nIHRtcDsKKworCWEgKz0gbnIgPj4gNTsKKwltYXNrID0gMSA8PCAobnIgJiAweDFmKTsKKworCV9fYXNtX18gX192b2xhdGlsZV9fICgKKwkJIjE6CQkJCQkJXG5cdCIKKwkJIm1vdmxpLmwJQCUxLCAlMAkhIHRlc3RfYW5kX2NsZWFyX2JpdAlcblx0IgorCQkibW92CQklMCwgJTIJCQkJXG5cdCIKKwkJImFuZAkJJTUsICUwCQkJCVxuXHQiCisJCSJtb3Zjby5sCSUwLCBAJTEJCQkJXG5cdCIKKwkJImJmCQkxYgkJCQlcblx0IgorCQkiYW5kCQklNCwgJTIJCQkJXG5cdCIKKwkJInN5bmNvCQkJCQkJXG5cdCIKKwkJOiAiPSZ6IiAodG1wKSwgIj1yIiAoYSksICI9JnIiIChyZXR2YWwpCisJCTogIjEiIChhKSwgInIiIChtYXNrKSwgInIiICh+bWFzaykKKwkJOiAidCIsICJtZW1vcnkiCisJKTsKKworCXJldHVybiByZXR2YWwgIT0gMDsKK30KKworc3RhdGljIGlubGluZSBpbnQgdGVzdF9hbmRfY2hhbmdlX2JpdChpbnQgbnIsIHZvbGF0aWxlIHZvaWQgKiBhZGRyKQoreworCWludAltYXNrLCByZXR2YWw7CisJdm9sYXRpbGUgdW5zaWduZWQgaW50ICphID0gYWRkcjsKKwl1bnNpZ25lZCBsb25nIHRtcDsKKworCWEgKz0gbnIgPj4gNTsKKwltYXNrID0gMSA8PCAobnIgJiAweDFmKTsKKworCV9fYXNtX18gX192b2xhdGlsZV9fICgKKwkJIjE6CQkJCQkJXG5cdCIKKwkJIm1vdmxpLmwJQCUxLCAlMAkhIHRlc3RfYW5kX2NoYW5nZV9iaXQJXG5cdCIKKwkJIm1vdgkJJTAsICUyCQkJCVxuXHQiCisJCSJ4b3IJCSU0LCAlMAkJCQlcblx0IgorCQkibW92Y28ubAklMCwgQCUxCQkJCVxuXHQiCisJCSJiZgkJMWIJCQkJXG5cdCIKKwkJImFuZAkJJTQsICUyCQkJCVxuXHQiCisJCSJzeW5jbwkJCQkJCVxuXHQiCisJCTogIj0meiIgKHRtcCksICI9ciIgKGEpLCAiPSZyIiAocmV0dmFsKQorCQk6ICIxIiAoYSksICJyIiAobWFzaykKKwkJOiAidCIsICJtZW1vcnkiCisJKTsKKworCXJldHVybiByZXR2YWwgIT0gMDsKK30KKworI2VuZGlmIC8qIF9fQVNNX1NIX0JJVE9QU19MTFNDX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vYml0b3BzLmggYi9hcmNoL3NoL2luY2x1ZGUvYXNtL2JpdG9wcy5oCmluZGV4IGQ3ZDM4MmYuLjM2NzkzMGQgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvaW5jbHVkZS9hc20vYml0b3BzLmgKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9iaXRvcHMuaApAQCAtMTMsNiArMTMsOCBAQAogCiAjaWZkZWYgQ09ORklHX0dVU0FfUkIKICNpbmNsdWRlIDxhc20vYml0b3BzLWdyYi5oPgorI2VsaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NINEEpCisjaW5jbHVkZSA8YXNtL2JpdG9wcy1sbHNjLmg+CiAjZWxzZQogI2luY2x1ZGUgPGFzbS9iaXRvcHMtaXJxLmg+CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vY2xvY2suaCBiL2FyY2gvc2gvaW5jbHVkZS9hc20vY2xvY2suaAppbmRleCA3MjBkZmFiLi5mOWM4ODU4IDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvYXNtL2Nsb2NrLmgKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9jbG9jay5oCkBAIC0zOSw2ICszOSw3IEBACiAKIC8qIFNob3VsZCBiZSBkZWZpbmVkIGJ5IHByb2Nlc3Nvci1zcGVjaWZpYyBjb2RlICovCiB2b2lkIGFyY2hfaW5pdF9jbGtfb3BzKHN0cnVjdCBjbGtfb3BzICoqLCBpbnQgdHlwZSk7CitpbnQgX19pbml0IGFyY2hfY2xrX2luaXQodm9pZCk7CiAKIC8qIGFyY2gvc2gva2VybmVsL2NwdS9jbG9jay5jICovCiBpbnQgY2xrX2luaXQodm9pZCk7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL2NtcHhjaGctbGxzYy5oIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9jbXB4Y2hnLWxsc2MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZWUzYmYyCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9jbXB4Y2hnLWxsc2MuaApAQCAtMCwwICsxLDcxIEBACisjaWZuZGVmIF9fQVNNX1NIX0NNUFhDSEdfTExTQ19ICisjZGVmaW5lIF9fQVNNX1NIX0NNUFhDSEdfTExTQ19ICisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyB4Y2hnX3UzMih2b2xhdGlsZSB1MzIgKm0sIHVuc2lnbmVkIGxvbmcgdmFsKQoreworCXVuc2lnbmVkIGxvbmcgcmV0dmFsOworCXVuc2lnbmVkIGxvbmcgdG1wOworCisJX19hc21fXyBfX3ZvbGF0aWxlX18gKAorCQkiMToJCQkJCVxuXHQiCisJCSJtb3ZsaS5sCUAlMSwgJTAJISB4Y2hnX3UzMglcblx0IgorCQkibW92CQklMCwgJTIJCQlcblx0IgorCQkibW92CQklNCwgJTAJCQlcblx0IgorCQkibW92Y28ubAklMCwgQCUxCQkJXG5cdCIKKwkJImJmCQkxYgkJCVxuXHQiCisJCSJzeW5jbwkJCQkJXG5cdCIKKwkJOiAiPSZ6Iih0bXApLCAiPXIiIChtKSwgIj0mciIgKHJldHZhbCkKKwkJOiAiMSIgKG0pLCAiciIgKHZhbCkKKwkJOiAidCIsICJtZW1vcnkiCisJKTsKKworCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyB4Y2hnX3U4KHZvbGF0aWxlIHU4ICptLCB1bnNpZ25lZCBsb25nIHZhbCkKK3sKKwl1bnNpZ25lZCBsb25nIHJldHZhbDsKKwl1bnNpZ25lZCBsb25nIHRtcDsKKworCV9fYXNtX18gX192b2xhdGlsZV9fICgKKwkJIjE6CQkJCQlcblx0IgorCQkibW92bGkubAlAJTEsICUwCSEgeGNoZ191OAlcblx0IgorCQkibW92CQklMCwgJTIJCQlcblx0IgorCQkibW92CQklNCwgJTAJCQlcblx0IgorCQkibW92Y28ubAklMCwgQCUxCQkJXG5cdCIKKwkJImJmCQkxYgkJCVxuXHQiCisJCSJzeW5jbwkJCQkJXG5cdCIKKwkJOiAiPSZ6Iih0bXApLCAiPXIiIChtKSwgIj0mciIgKHJldHZhbCkKKwkJOiAiMSIgKG0pLCAiciIgKHZhbCAmIDB4ZmYpCisJCTogInQiLCAibWVtb3J5IgorCSk7CisKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcKK19fY21weGNoZ191MzIodm9sYXRpbGUgaW50ICptLCB1bnNpZ25lZCBsb25nIG9sZCwgdW5zaWduZWQgbG9uZyBuZXcpCit7CisJdW5zaWduZWQgbG9uZyByZXR2YWw7CisJdW5zaWduZWQgbG9uZyB0bXA7CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCisJCSIxOgkJCQkJCVxuXHQiCisJCSJtb3ZsaS5sCUAlMSwgJTAJISBfX2NtcHhjaGdfdTMyCQlcblx0IgorCQkibW92CQklMCwgJTIJCQkJXG5cdCIKKwkJImNtcC9lcQkJJTIsICU0CQkJCVxuXHQiCisJCSJiZgkJMmYJCQkJXG5cdCIKKwkJIm1vdgkJJTUsICUwCQkJCVxuXHQiCisJCSIyOgkJCQkJCVxuXHQiCisJCSJtb3Zjby5sCSUwLCBAJTEJCQkJXG5cdCIKKwkJImJmCQkxYgkJCQlcblx0IgorCQkic3luY28JCQkJCQlcblx0IgorCQk6ICI9JnoiICh0bXApLCAiPXIiIChtKSwgIj0mciIgKHJldHZhbCkKKwkJOiAiMSIgKG0pLCAiciIgKG9sZCksICJyIiAobmV3KQorCQk6ICJ0IiwgIm1lbW9yeSIKKwkpOworCisJcmV0dXJuIHJldHZhbDsKK30KKworI2VuZGlmIC8qIF9fQVNNX1NIX0NNUFhDSEdfTExTQ19IICovCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL2VsZi5oIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9lbGYuaAppbmRleCBmMDE0NDlhLi45ZWI5MDM2IDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvYXNtL2VsZi5oCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9hc20vZWxmLmgKQEAgLTEwOCw2ICsxMDgsMTQgQEAKICNkZWZpbmUgZWxmX2NoZWNrX2ZkcGljKHgpCQkoKHgpLT5lX2ZsYWdzICYgRUZfU0hfRkRQSUMpCiAjZGVmaW5lIGVsZl9jaGVja19jb25zdF9kaXNwbGFjZW1lbnQoeCkJKCh4KS0+ZV9mbGFncyAmIEVGX1NIX1BJQykKIAorI2lmZGVmIENPTkZJR19TVVBFUkgzMgorLyoKKyAqIEVuYWJsZSBkdW1wIHVzaW5nIHJlZ3NldC4KKyAqIFRoaXMgY292ZXJzIGFsbCBvZiBnZW5lcmFsL0RTUC9GUFUgcmVncy4KKyAqLworI2RlZmluZSBDT1JFX0RVTVBfVVNFX1JFR1NFVAorI2VuZGlmCisKICNkZWZpbmUgVVNFX0VMRl9DT1JFX0RVTVAKICNkZWZpbmUgRUxGX0ZEUElDX0NPUkVfRUZMQUdTCUVGX1NIX0ZEUElDCiAjZGVmaW5lIEVMRl9FWEVDX1BBR0VTSVpFCVBBR0VfU0laRQpAQCAtMTg5LDEzICsxOTcsNyBAQAogfSB3aGlsZSAoMCkKICNlbmRpZgogCi0jZGVmaW5lIFNFVF9QRVJTT05BTElUWShleCwgaWJjczIpIHNldF9wZXJzb25hbGl0eShQRVJfTElOVVhfMzJCSVQpCi1zdHJ1Y3QgdGFza19zdHJ1Y3Q7Ci1leHRlcm4gaW50IGR1bXBfdGFza19yZWdzIChzdHJ1Y3QgdGFza19zdHJ1Y3QgKiwgZWxmX2dyZWdzZXRfdCAqKTsKLWV4dGVybiBpbnQgZHVtcF90YXNrX2ZwdSAoc3RydWN0IHRhc2tfc3RydWN0ICosIGVsZl9mcHJlZ3NldF90ICopOwotCi0jZGVmaW5lIEVMRl9DT1JFX0NPUFlfVEFTS19SRUdTKHRzaywgZWxmX3JlZ3MpIGR1bXBfdGFza19yZWdzKHRzaywgZWxmX3JlZ3MpCi0jZGVmaW5lIEVMRl9DT1JFX0NPUFlfRlBSRUdTKHRzaywgZWxmX2ZwcmVncykgZHVtcF90YXNrX2ZwdSh0c2ssIGVsZl9mcHJlZ3MpCisjZGVmaW5lIFNFVF9QRVJTT05BTElUWShleCkgc2V0X3BlcnNvbmFsaXR5KFBFUl9MSU5VWF8zMkJJVCkKIAogI2lmZGVmIENPTkZJR19WU1lTQ0FMTAogLyogdkRTTyBoYXMgYXJjaF9zZXR1cF9hZGRpdGlvbmFsX3BhZ2VzICovCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL2ZwdS5oIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9mcHUuaAppbmRleCA5MTQ2MmZlLi4xZDNhZWUwIDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvYXNtL2ZwdS5oCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9hc20vZnB1LmgKQEAgLTMwLDggKzMwLDE1IEBACiB9CiAjZW5kaWYKIAorc3RydWN0IHVzZXJfcmVnc2V0OworCiBleHRlcm4gaW50IGRvX2ZwdV9pbnN0KHVuc2lnbmVkIHNob3J0LCBzdHJ1Y3QgcHRfcmVncyAqKTsKIAorZXh0ZXJuIGludCBmcHJlZ3NfZ2V0KHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFyZ2V0LAorCQkgICAgICBjb25zdCBzdHJ1Y3QgdXNlcl9yZWdzZXQgKnJlZ3NldCwKKwkJICAgICAgdW5zaWduZWQgaW50IHBvcywgdW5zaWduZWQgaW50IGNvdW50LAorCQkgICAgICB2b2lkICprYnVmLCB2b2lkIF9fdXNlciAqdWJ1Zik7CisKIHN0YXRpYyBpbmxpbmUgdm9pZCB1bmxhenlfZnB1KHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKIAlwcmVlbXB0X2Rpc2FibGUoKTsKQEAgLTUwLDYgKzU3LDE4IEBACiAJcHJlZW1wdF9lbmFibGUoKTsKIH0KIAorc3RhdGljIGlubGluZSBpbnQgaW5pdF9mcHUoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCit7CisJaWYgKHRza191c2VkX21hdGgodHNrKSkgeworCQlpZiAoKGJvb3RfY3B1X2RhdGEuZmxhZ3MgJiBDUFVfSEFTX0ZQVSkgJiYgdHNrID09IGN1cnJlbnQpCisJCQl1bmxhenlfZnB1KHRzaywgdGFza19wdF9yZWdzKHRzaykpOworCQlyZXR1cm4gMDsKKwl9CisKKwlzZXRfc3RvcHBlZF9jaGlsZF91c2VkX21hdGgodHNrKTsKKwlyZXR1cm4gMDsKK30KKwogI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyAqLwogCiAjZW5kaWYgLyogX19BU01fU0hfRlBVX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vZnRyYWNlLmggYi9hcmNoL3NoL2luY2x1ZGUvYXNtL2Z0cmFjZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNhZWQzNjIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3NoL2luY2x1ZGUvYXNtL2Z0cmFjZS5oCkBAIC0wLDAgKzEsOCBAQAorI2lmbmRlZiBfX0FTTV9TSF9GVFJBQ0VfSAorI2RlZmluZSBfX0FTTV9TSF9GVFJBQ0VfSAorCisjaWZuZGVmIF9fQVNTRU1CTFlfXworZXh0ZXJuIHZvaWQgbWNvdW50KHZvaWQpOworI2VuZGlmCisKKyNlbmRpZiAvKiBfX0FTTV9TSF9GVFJBQ0VfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9ncGlvLmggYi9hcmNoL3NoL2luY2x1ZGUvYXNtL2dwaW8uaAppbmRleCBjZjMyYmQyLi45NjUwZTdjIDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvYXNtL2dwaW8uaAorKysgYi9hcmNoL3NoL2luY2x1ZGUvYXNtL2dwaW8uaApAQCAtMSw5ICsxLDkgQEAKIC8qCiAgKiAgaW5jbHVkZS9hc20tc2gvZ3Bpby5oCiAgKgotICogIENvcHlyaWdodCAoQykgMjAwNyBNYXJrdXMgQnJ1bm5lciwgTWFyayBKb25hcworICogR2VuZXJpYyBHUElPIEFQSSBhbmQgcGlubXV4IHRhYmxlIHN1cHBvcnQgZm9yIFN1cGVySC4KICAqCi0gKiAgQWRkcmVzc2VzIGZvciB0aGUgUGluIEZ1bmN0aW9uIENvbnRyb2xsZXIKKyAqIENvcHlyaWdodCAoYykgMjAwOCBNYWdudXMgRGFtbQogICoKICAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCiAgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCkBAIC0xNiw0ICsxNiw5MiBAQAogI2luY2x1ZGUgPGNwdS9ncGlvLmg+CiAjZW5kaWYKIAordHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBwaW5tdXhfZW51bV90OwordHlwZWRlZiB1bnNpZ25lZCBjaGFyIHBpbm11eF9mbGFnX3Q7CisKKyNkZWZpbmUgUElOTVVYX1RZUEVfTk9ORSAgICAgICAgICAgIDAKKyNkZWZpbmUgUElOTVVYX1RZUEVfRlVOQ1RJT04gICAgICAgIDEKKyNkZWZpbmUgUElOTVVYX1RZUEVfR1BJTyAgICAgICAgICAgIDIKKyNkZWZpbmUgUElOTVVYX1RZUEVfT1VUUFVUICAgICAgICAgIDMKKyNkZWZpbmUgUElOTVVYX1RZUEVfSU5QVVQgICAgICAgICAgIDQKKyNkZWZpbmUgUElOTVVYX1RZUEVfSU5QVVRfUFVMTFVQICAgIDUKKyNkZWZpbmUgUElOTVVYX1RZUEVfSU5QVVRfUFVMTERPV04gIDYKKworI2RlZmluZSBQSU5NVVhfRkxBR19UWVBFICAgICAgICAgICAgKDB4NykKKyNkZWZpbmUgUElOTVVYX0ZMQUdfV0FOVF9QVUxMVVAgICAgICgxIDw8IDMpCisjZGVmaW5lIFBJTk1VWF9GTEFHX1dBTlRfUFVMTERPV04gICAoMSA8PCA0KQorCitzdHJ1Y3QgcGlubXV4X2dwaW8geworCXBpbm11eF9lbnVtX3QgZW51bV9pZDsKKwlwaW5tdXhfZmxhZ190IGZsYWdzOworfTsKKworI2RlZmluZSBQSU5NVVhfR1BJTyhncGlvLCBkYXRhX29yX21hcmspIFtncGlvXSA9IHsgZGF0YV9vcl9tYXJrIH0KKyNkZWZpbmUgUElOTVVYX0RBVEEoZGF0YV9vcl9tYXJrLCBpZHMuLi4pIGRhdGFfb3JfbWFyaywgaWRzLCAwCisKK3N0cnVjdCBwaW5tdXhfY2ZnX3JlZyB7CisJdW5zaWduZWQgbG9uZyByZWcsIHJlZ193aWR0aCwgZmllbGRfd2lkdGg7CisJdW5zaWduZWQgbG9uZyAqY250OworCXBpbm11eF9lbnVtX3QgKmVudW1faWRzOworfTsKKworI2RlZmluZSBQSU5NVVhfQ0ZHX1JFRyhuYW1lLCByLCByX3dpZHRoLCBmX3dpZHRoKSBcCisJLnJlZyA9IHIsIC5yZWdfd2lkdGggPSByX3dpZHRoLCAuZmllbGRfd2lkdGggPSBmX3dpZHRoLAkJXAorCS5jbnQgPSAodW5zaWduZWQgbG9uZyBbcl93aWR0aCAvIGZfd2lkdGhdKSB7fSwgXAorCS5lbnVtX2lkcyA9IChwaW5tdXhfZW51bV90IFsocl93aWR0aCAvIGZfd2lkdGgpICogKDEgPDwgZl93aWR0aCldKSBcCisKK3N0cnVjdCBwaW5tdXhfZGF0YV9yZWcgeworCXVuc2lnbmVkIGxvbmcgcmVnLCByZWdfd2lkdGg7CisJcGlubXV4X2VudW1fdCAqZW51bV9pZHM7Cit9OworCisjZGVmaW5lIFBJTk1VWF9EQVRBX1JFRyhuYW1lLCByLCByX3dpZHRoKSBcCisJLnJlZyA9IHIsIC5yZWdfd2lkdGggPSByX3dpZHRoLAlcCisJLmVudW1faWRzID0gKHBpbm11eF9lbnVtX3QgW3Jfd2lkdGhdKSBcCisKK3N0cnVjdCBwaW5tdXhfcmFuZ2UgeworCXBpbm11eF9lbnVtX3QgYmVnaW47CisJcGlubXV4X2VudW1fdCBlbmQ7Cit9OworCitzdHJ1Y3QgcGlubXV4X2luZm8geworCWNoYXIgKm5hbWU7CisJcGlubXV4X2VudW1fdCByZXNlcnZlZF9pZDsKKwlzdHJ1Y3QgcGlubXV4X3JhbmdlIGRhdGE7CisJc3RydWN0IHBpbm11eF9yYW5nZSBpbnB1dDsKKwlzdHJ1Y3QgcGlubXV4X3JhbmdlIGlucHV0X3BkOworCXN0cnVjdCBwaW5tdXhfcmFuZ2UgaW5wdXRfcHU7CisJc3RydWN0IHBpbm11eF9yYW5nZSBvdXRwdXQ7CisJc3RydWN0IHBpbm11eF9yYW5nZSBtYXJrOworCXN0cnVjdCBwaW5tdXhfcmFuZ2UgZnVuY3Rpb247CisKKwl1bnNpZ25lZCBmaXJzdF9ncGlvLCBsYXN0X2dwaW87CisKKwlzdHJ1Y3QgcGlubXV4X2dwaW8gKmdwaW9zOworCXN0cnVjdCBwaW5tdXhfY2ZnX3JlZyAqY2ZnX3JlZ3M7CisJc3RydWN0IHBpbm11eF9kYXRhX3JlZyAqZGF0YV9yZWdzOworCisJcGlubXV4X2VudW1fdCAqZ3Bpb19kYXRhOworCXVuc2lnbmVkIGludCBncGlvX2RhdGFfc2l6ZTsKKworCXVuc2lnbmVkIGxvbmcgKmdwaW9faW5fdXNlOworfTsKKworaW50IHJlZ2lzdGVyX3Bpbm11eChzdHJ1Y3QgcGlubXV4X2luZm8gKnBpcCk7CisKK2ludCBfX2dwaW9fcmVxdWVzdCh1bnNpZ25lZCBncGlvKTsKK3N0YXRpYyBpbmxpbmUgaW50IGdwaW9fcmVxdWVzdCh1bnNpZ25lZCBncGlvLCBjb25zdCBjaGFyICpsYWJlbCkKK3sKKwlyZXR1cm4gX19ncGlvX3JlcXVlc3QoZ3Bpbyk7Cit9Cit2b2lkIGdwaW9fZnJlZSh1bnNpZ25lZCBncGlvKTsKK2ludCBncGlvX2RpcmVjdGlvbl9pbnB1dCh1bnNpZ25lZCBncGlvKTsKK2ludCBncGlvX2RpcmVjdGlvbl9vdXRwdXQodW5zaWduZWQgZ3BpbywgaW50IHZhbHVlKTsKK2ludCBncGlvX2dldF92YWx1ZSh1bnNpZ25lZCBncGlvKTsKK3ZvaWQgZ3Bpb19zZXRfdmFsdWUodW5zaWduZWQgZ3BpbywgaW50IHZhbHVlKTsKK3N0YXRpYyBpbmxpbmUgaW50IGdwaW9fZXhwb3J0KHVuc2lnbmVkIGdwaW8sIGJvb2wgZGlyZWN0aW9uX21heV9jaGFuZ2UpCit7CisJcmV0dXJuIDA7Cit9CisKICNlbmRpZiAvKiBfX0FTTV9TSF9HUElPX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vaHdfaXJxLmggYi9hcmNoL3NoL2luY2x1ZGUvYXNtL2h3X2lycS5oCmluZGV4IGQ1NTdiMDAuLjYwM2NkZGUgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvaW5jbHVkZS9hc20vaHdfaXJxLmgKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9od19pcnEuaApAQCAtMiw2ICsyLDcgQEAKICNkZWZpbmUgX19BU01fU0hfSFdfSVJRX0gKIAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zaF9pbnRjLmg+CiAjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgogCiBleHRlcm4gYXRvbWljX3QgaXJxX2Vycl9jb3VudDsKQEAgLTIzLDEwMSArMjQsMTIgQEAKIAogdm9pZCByZWdpc3Rlcl9pcHJfY29udHJvbGxlcihzdHJ1Y3QgaXByX2Rlc2MgKik7CiAKLXR5cGVkZWYgdW5zaWduZWQgY2hhciBpbnRjX2VudW07Ci0KLXN0cnVjdCBpbnRjX3ZlY3QgewotCWludGNfZW51bSBlbnVtX2lkOwotCXVuc2lnbmVkIHNob3J0IHZlY3Q7Ci19OwotCi0jZGVmaW5lIElOVENfVkVDVChlbnVtX2lkLCB2ZWN0KSB7IGVudW1faWQsIHZlY3QgfQotI2RlZmluZSBJTlRDX0lSUShlbnVtX2lkLCBpcnEpIElOVENfVkVDVChlbnVtX2lkLCBpcnEyZXZ0KGlycSkpCi0KLXN0cnVjdCBpbnRjX2dyb3VwIHsKLQlpbnRjX2VudW0gZW51bV9pZDsKLQlpbnRjX2VudW0gZW51bV9pZHNbMzJdOwotfTsKLQotI2RlZmluZSBJTlRDX0dST1VQKGVudW1faWQsIGlkcy4uLikgeyBlbnVtX2lkLCB7IGlkcyB9IH0KLQotc3RydWN0IGludGNfbWFza19yZWcgewotCXVuc2lnbmVkIGxvbmcgc2V0X3JlZywgY2xyX3JlZywgcmVnX3dpZHRoOwotCWludGNfZW51bSBlbnVtX2lkc1szMl07Ci0jaWZkZWYgQ09ORklHX1NNUAotCXVuc2lnbmVkIGxvbmcgc21wOwotI2VuZGlmCi19OwotCi1zdHJ1Y3QgaW50Y19wcmlvX3JlZyB7Ci0JdW5zaWduZWQgbG9uZyBzZXRfcmVnLCBjbHJfcmVnLCByZWdfd2lkdGgsIGZpZWxkX3dpZHRoOwotCWludGNfZW51bSBlbnVtX2lkc1sxNl07Ci0jaWZkZWYgQ09ORklHX1NNUAotCXVuc2lnbmVkIGxvbmcgc21wOwotI2VuZGlmCi19OwotCi1zdHJ1Y3QgaW50Y19zZW5zZV9yZWcgewotCXVuc2lnbmVkIGxvbmcgcmVnLCByZWdfd2lkdGgsIGZpZWxkX3dpZHRoOwotCWludGNfZW51bSBlbnVtX2lkc1sxNl07Ci19OwotCi0jaWZkZWYgQ09ORklHX1NNUAotI2RlZmluZSBJTlRDX1NNUChzdHJpZGUsIG5yKSAuc21wID0gKHN0cmlkZSkgfCAoKG5yKSA8PCA4KQotI2Vsc2UKLSNkZWZpbmUgSU5UQ19TTVAoc3RyaWRlLCBucikKLSNlbmRpZgotCi1zdHJ1Y3QgaW50Y19kZXNjIHsKLQlzdHJ1Y3QgaW50Y192ZWN0ICp2ZWN0b3JzOwotCXVuc2lnbmVkIGludCBucl92ZWN0b3JzOwotCXN0cnVjdCBpbnRjX2dyb3VwICpncm91cHM7Ci0JdW5zaWduZWQgaW50IG5yX2dyb3VwczsKLQlzdHJ1Y3QgaW50Y19tYXNrX3JlZyAqbWFza19yZWdzOwotCXVuc2lnbmVkIGludCBucl9tYXNrX3JlZ3M7Ci0Jc3RydWN0IGludGNfcHJpb19yZWcgKnByaW9fcmVnczsKLQl1bnNpZ25lZCBpbnQgbnJfcHJpb19yZWdzOwotCXN0cnVjdCBpbnRjX3NlbnNlX3JlZyAqc2Vuc2VfcmVnczsKLQl1bnNpZ25lZCBpbnQgbnJfc2Vuc2VfcmVnczsKLQljaGFyICpuYW1lOwotI2lmIGRlZmluZWQoQ09ORklHX0NQVV9TSDMpIHx8IGRlZmluZWQoQ09ORklHX0NQVV9TSDRBKQotCXN0cnVjdCBpbnRjX21hc2tfcmVnICphY2tfcmVnczsKLQl1bnNpZ25lZCBpbnQgbnJfYWNrX3JlZ3M7Ci0jZW5kaWYKLX07Ci0KLSNkZWZpbmUgX0lOVENfQVJSQVkoYSkgYSwgc2l6ZW9mKGEpL3NpemVvZigqYSkKLSNkZWZpbmUgREVDTEFSRV9JTlRDX0RFU0Moc3ltYm9sLCBjaGlwbmFtZSwgdmVjdG9ycywgZ3JvdXBzLAkJXAotCW1hc2tfcmVncywgcHJpb19yZWdzLCBzZW5zZV9yZWdzKQkJCQlcCi1zdHJ1Y3QgaW50Y19kZXNjIHN5bWJvbCBfX2luaXRkYXRhID0gewkJCQkJXAotCV9JTlRDX0FSUkFZKHZlY3RvcnMpLCBfSU5UQ19BUlJBWShncm91cHMpLAkJCVwKLQlfSU5UQ19BUlJBWShtYXNrX3JlZ3MpLCBfSU5UQ19BUlJBWShwcmlvX3JlZ3MpLAkJCVwKLQlfSU5UQ19BUlJBWShzZW5zZV9yZWdzKSwJCQkJCVwKLQljaGlwbmFtZSwJCQkJCQkJXAotfQotCi0jaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NIMykgfHwgZGVmaW5lZChDT05GSUdfQ1BVX1NINEEpCi0jZGVmaW5lIERFQ0xBUkVfSU5UQ19ERVNDX0FDSyhzeW1ib2wsIGNoaXBuYW1lLCB2ZWN0b3JzLCBncm91cHMsCVwKLQltYXNrX3JlZ3MsIHByaW9fcmVncywgc2Vuc2VfcmVncywgYWNrX3JlZ3MpCQkJXAotc3RydWN0IGludGNfZGVzYyBzeW1ib2wgX19pbml0ZGF0YSA9IHsJCQkJCVwKLQlfSU5UQ19BUlJBWSh2ZWN0b3JzKSwgX0lOVENfQVJSQVkoZ3JvdXBzKSwJCQlcCi0JX0lOVENfQVJSQVkobWFza19yZWdzKSwgX0lOVENfQVJSQVkocHJpb19yZWdzKSwJCQlcCi0JX0lOVENfQVJSQVkoc2Vuc2VfcmVncyksCQkJCQlcCi0JY2hpcG5hbWUsCQkJCQkJCVwKLQlfSU5UQ19BUlJBWShhY2tfcmVncyksCQkJCQkJXAotfQotI2VuZGlmCi0KLXZvaWQgX19pbml0IHJlZ2lzdGVyX2ludGNfY29udHJvbGxlcihzdHJ1Y3QgaW50Y19kZXNjICpkZXNjKTsKLWludCBpbnRjX3NldF9wcmlvcml0eSh1bnNpZ25lZCBpbnQgaXJxLCB1bnNpZ25lZCBpbnQgcHJpbyk7Ci0KIHZvaWQgX19pbml0IHBsYXRfaXJxX3NldHVwKHZvaWQpOwotI2lmZGVmIENPTkZJR19DUFVfU0gzCiB2b2lkIF9faW5pdCBwbGF0X2lycV9zZXR1cF9zaDModm9pZCk7Ci0jZW5kaWYKK3ZvaWQgX19pbml0IHBsYXRfaXJxX3NldHVwX3BpbnMoaW50IG1vZGUpOwogCiBlbnVtIHsgSVJRX01PREVfSVJRLCBJUlFfTU9ERV9JUlE3NjU0LCBJUlFfTU9ERV9JUlEzMjEwLAogICAgICAgIElSUV9NT0RFX0lSTDc2NTRfTUFTSywgSVJRX01PREVfSVJMMzIxMF9NQVNLLAogICAgICAgIElSUV9NT0RFX0lSTDc2NTQsIElSUV9NT0RFX0lSTDMyMTAgfTsKLXZvaWQgX19pbml0IHBsYXRfaXJxX3NldHVwX3BpbnMoaW50IG1vZGUpOwogCiAjZW5kaWYgLyogX19BU01fU0hfSFdfSVJRX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vaW8uaCBiL2FyY2gvc2gvaW5jbHVkZS9hc20vaW8uaAppbmRleCBhNGZiZjBjLi40MzZjMjg1IDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvYXNtL2lvLmgKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9pby5oCkBAIC0xLDI3ICsxLDI2IEBACiAjaWZuZGVmIF9fQVNNX1NIX0lPX0gKICNkZWZpbmUgX19BU01fU0hfSU9fSAotCiAvKgogICogQ29udmVudGlvbjoKLSAqICAgIHJlYWR7Yix3LGx9L3dyaXRle2IsdyxsfSBhcmUgZm9yIFBDSSwKKyAqICAgIHJlYWR7Yix3LGwscX0vd3JpdGV7Yix3LGwscX0gYXJlIGZvciBQQ0ksCiAgKiAgICB3aGlsZSBpbntiLHcsbH0vb3V0e2IsdyxsfSBhcmUgZm9yIElTQQotICogVGhlc2UgbWF5ICh3aWxsKSBiZSBwbGF0Zm9ybSBzcGVjaWZpYyBmdW5jdGlvbi4KKyAqCiAgKiBJbiBhZGRpdGlvbiB3ZSBoYXZlICdwYXVzaW5nJyB2ZXJzaW9uczogaW57Yix3LGx9X3Avb3V0e2IsdyxsfV9wCiAgKiBhbmQgJ3N0cmluZycgdmVyc2lvbnM6IGluc3tiLHcsbH0vb3V0c3tiLHcsbH0KLSAqIEZvciByZWFke2IsdyxsfSBhbmQgd3JpdGV7Yix3LGx9IHRoZXJlIGFyZSBhbHNvIF9fcmF3IHZlcnNpb25zLCB3aGljaAotICogZG8gbm90IGhhdmUgYSBtZW1vcnkgYmFycmllciBhZnRlciB0aGVtLgogICoKLSAqIEluIGFkZGl0aW9uLCB3ZSBoYXZlCi0gKiAgIGN0cmxfaW57Yix3LGx9L2N0cmxfb3V0e2IsdyxsfSBmb3IgU3VwZXJIIHNwZWNpZmljIEkvTy4KLSAqICAgd2hpY2ggYXJlIHByb2Nlc3NvciBzcGVjaWZpYy4KLSAqLwotCi0vKgotICogV2UgZm9sbG93IHRoZSBBbHBoYSBjb252ZW50aW9uIGhlcmU6Ci0gKiAgX19pbmIgZXhwYW5kcyB0byBhbiBpbmxpbmUgZnVuY3Rpb24gY2FsbCAod2hpY2ggY2FsbHMgdmlhIHRoZSBtdikKLSAqICBfaW5iICBpcyBhIHJlYWwgZnVuY3Rpb24gY2FsbCAobm90ZSBfX19yYXcgZm5zIGFyZSBfIHZlcnNpb24gb2YgX19yYXcpCi0gKiAgaW5iICAgYnkgZGVmYXVsdCBleHBhbmRzIHRvIF9pbmIsIGJ1dCB0aGUgbWFjaGluZSBzcGVjaWZpYyBjb2RlIG1heQotICogICAgICAgIGRlZmluZSBpdCB0byBfX2luYiBpZiBpdCBjaG9vc2VzLgorICogV2hpbGUgcmVhZHtiLHcsbCxxfSBhbmQgd3JpdGV7Yix3LGwscX0gY29udGFpbiBtZW1vcnkgYmFycmllcnMKKyAqIGF1dG9tYXRpY2FsbHksIHRoZXJlIGFyZSBhbHNvIF9fcmF3IHZlcnNpb25zLCB3aGljaCBkbyBub3QuCisgKgorICogSGlzdG9yaWNhbGx5LCB3ZSBoYXZlIGFsc28gaGFkIGN0cmxfaW57Yix3LGwscX0vY3RybF9vdXR7Yix3LGwscX0gZm9yCisgKiBTdXBlckggc3BlY2lmaWMgSS9PIChyYXcgSS9PIHRvIG9uLWNoaXAgQ1BVIHBlcmlwaGVyYWxzKS4gSW4gcHJhY3RpY2UKKyAqIHRoZXNlIGhhdmUgdGhlIHNhbWUgc2VtYW50aWNzIGFzIHRoZSBfX3JhdyB2YXJpYW50cywgYW5kIGFzIHN1Y2gsIGFsbAorICogbmV3IGNvZGUgc2hvdWxkIGJlIHVzaW5nIHRoZSBfX3JhdyB2ZXJzaW9ucy4KKyAqCisgKiBBbGwgSVNBIEkvTyByb3V0aW5lcyBhcmUgd3JhcHBlZCB0aHJvdWdoIHRoZSBtYWNoaW5lIHZlY3Rvci4gSWYgYQorICogYm9hcmQgZG9lcyBub3QgcHJvdmlkZSBvdmVycmlkZXMsIGEgZ2VuZXJpYyBzZXQgdGhhdCBhcmUgY29waWVkIGluCisgKiBmcm9tIHRoZSBkZWZhdWx0IG1hY2hpbmUgdmVjdG9yIGFyZSB1c2VkIGluc3RlYWQuIFRoZXNlIGFyZSBsYXJnZWx5CisgKiBmb3Igb2xkIGNvbXBhdCBjb2RlIGZvciBJL08gb2Zmc2V0aW5nIHRvIFN1cGVySU9zLCBhbGwgb2Ygd2hpY2ggYXJlCisgKiBiZXR0ZXIgaGFuZGxlZCB0aHJvdWdoIHRoZSBtYWNodmVjIGlvcG9ydCBtYXBwaW5nIHJvdXRpbmVzIHRoZXNlIGRheXMuCiAgKi8KICNpbmNsdWRlIDxhc20vY2FjaGUuaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CkBAIC0zMSw3ICszMCw2IEBACiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvaW9tYXAuaD4KIAogI2lmZGVmIF9fS0VSTkVMX18KLQogLyoKICAqIERlcGVuZGluZyBvbiB3aGljaCBwbGF0Zm9ybSB3ZSBhcmUgcnVubmluZyBvbiwgd2UgbmVlZCBkaWZmZXJlbnQKICAqIEkvTyBmdW5jdGlvbnMuCkBAIC00MCwxMDUgKzM4LDY4IEBACiAjaW5jbHVkZSA8YXNtL2lvX2dlbmVyaWMuaD4KICNpbmNsdWRlIDxhc20vaW9fdHJhcHBlZC5oPgogCi0jZGVmaW5lIG1heWJlYmFkaW8ocG9ydCkgXAotICBwcmludGsoS0VSTl9FUlIgImJhZCBQQy1saWtlIGlvICVzOiV1IGZvciBwb3J0IDB4JWx4IGF0IDB4JTA4eFxuIiwgXAotCSBfX0ZVTkNUSU9OX18sIF9fTElORV9fLCAocG9ydCksICh1MzIpX19idWlsdGluX3JldHVybl9hZGRyZXNzKDApKQorI2RlZmluZSBpbmIocCkJCQlzaF9tdi5tdl9pbmIoKHApKQorI2RlZmluZSBpbncocCkJCQlzaF9tdi5tdl9pbncoKHApKQorI2RlZmluZSBpbmwocCkJCQlzaF9tdi5tdl9pbmwoKHApKQorI2RlZmluZSBvdXRiKHgscCkJCXNoX212Lm12X291dGIoKHgpLChwKSkKKyNkZWZpbmUgb3V0dyh4LHApCQlzaF9tdi5tdl9vdXR3KCh4KSwocCkpCisjZGVmaW5lIG91dGwoeCxwKQkJc2hfbXYubXZfb3V0bCgoeCksKHApKQogCi0vKgotICogU2luY2UgYm9hcmRzIGFyZSBhYmxlIHRvIGRlZmluZSB0aGVpciBvd24gc2V0IG9mIEkvTyByb3V0aW5lcyB0aHJvdWdoCi0gKiB0aGVpciByZXNwZWN0aXZlIG1hY2hpbmUgdmVjdG9yLCB3ZSBhbHdheXMgd3JhcCB0aHJvdWdoIHRoZSBtdi4KLSAqCi0gKiBBbHNvLCBpbiB0aGUgZXZlbnQgdGhhdCBhIGJvYXJkIGhhc24ndCBwcm92aWRlZCBpdHMgb3duIGRlZmluaXRpb24gZm9yCi0gKiBhIGdpdmVuIHJvdXRpbmUsIGl0IHdpbGwgYmUgd3JhcHBlZCB0byBnZW5lcmljIGNvZGUgYXQgcnVuLXRpbWUuCi0gKi8KKyNkZWZpbmUgaW5iX3AocCkJCXNoX212Lm12X2luYl9wKChwKSkKKyNkZWZpbmUgaW53X3AocCkJCXNoX212Lm12X2lud19wKChwKSkKKyNkZWZpbmUgaW5sX3AocCkJCXNoX212Lm12X2lubF9wKChwKSkKKyNkZWZpbmUgb3V0Yl9wKHgscCkJCXNoX212Lm12X291dGJfcCgoeCksKHApKQorI2RlZmluZSBvdXR3X3AoeCxwKQkJc2hfbXYubXZfb3V0d19wKCh4KSwocCkpCisjZGVmaW5lIG91dGxfcCh4LHApCQlzaF9tdi5tdl9vdXRsX3AoKHgpLChwKSkKIAotI2RlZmluZSBfX2luYihwKQlzaF9tdi5tdl9pbmIoKHApKQotI2RlZmluZSBfX2ludyhwKQlzaF9tdi5tdl9pbncoKHApKQotI2RlZmluZSBfX2lubChwKQlzaF9tdi5tdl9pbmwoKHApKQotI2RlZmluZSBfX291dGIoeCxwKQlzaF9tdi5tdl9vdXRiKCh4KSwocCkpCi0jZGVmaW5lIF9fb3V0dyh4LHApCXNoX212Lm12X291dHcoKHgpLChwKSkKLSNkZWZpbmUgX19vdXRsKHgscCkJc2hfbXYubXZfb3V0bCgoeCksKHApKQorI2RlZmluZSBpbnNiKHAsYixjKQkJc2hfbXYubXZfaW5zYigocCksIChiKSwgKGMpKQorI2RlZmluZSBpbnN3KHAsYixjKQkJc2hfbXYubXZfaW5zdygocCksIChiKSwgKGMpKQorI2RlZmluZSBpbnNsKHAsYixjKQkJc2hfbXYubXZfaW5zbCgocCksIChiKSwgKGMpKQorI2RlZmluZSBvdXRzYihwLGIsYykJCXNoX212Lm12X291dHNiKChwKSwgKGIpLCAoYykpCisjZGVmaW5lIG91dHN3KHAsYixjKQkJc2hfbXYubXZfb3V0c3coKHApLCAoYiksIChjKSkKKyNkZWZpbmUgb3V0c2wocCxiLGMpCQlzaF9tdi5tdl9vdXRzbCgocCksIChiKSwgKGMpKQogCi0jZGVmaW5lIF9faW5iX3AocCkJc2hfbXYubXZfaW5iX3AoKHApKQotI2RlZmluZSBfX2lud19wKHApCXNoX212Lm12X2lud19wKChwKSkKLSNkZWZpbmUgX19pbmxfcChwKQlzaF9tdi5tdl9pbmxfcCgocCkpCi0jZGVmaW5lIF9fb3V0Yl9wKHgscCkJc2hfbXYubXZfb3V0Yl9wKCh4KSwocCkpCi0jZGVmaW5lIF9fb3V0d19wKHgscCkJc2hfbXYubXZfb3V0d19wKCh4KSwocCkpCi0jZGVmaW5lIF9fb3V0bF9wKHgscCkJc2hfbXYubXZfb3V0bF9wKCh4KSwocCkpCisjZGVmaW5lIF9fcmF3X3dyaXRlYih2LGEpCShfX2Noa19pb19wdHIoYSksICoodm9sYXRpbGUgdTggIF9fZm9yY2UgKikoYSkgPSAodikpCisjZGVmaW5lIF9fcmF3X3dyaXRldyh2LGEpCShfX2Noa19pb19wdHIoYSksICoodm9sYXRpbGUgdTE2IF9fZm9yY2UgKikoYSkgPSAodikpCisjZGVmaW5lIF9fcmF3X3dyaXRlbCh2LGEpCShfX2Noa19pb19wdHIoYSksICoodm9sYXRpbGUgdTMyIF9fZm9yY2UgKikoYSkgPSAodikpCisjZGVmaW5lIF9fcmF3X3dyaXRlcSh2LGEpCShfX2Noa19pb19wdHIoYSksICoodm9sYXRpbGUgdTY0IF9fZm9yY2UgKikoYSkgPSAodikpCiAKLSNkZWZpbmUgX19pbnNiKHAsYixjKQlzaF9tdi5tdl9pbnNiKChwKSwgKGIpLCAoYykpCi0jZGVmaW5lIF9faW5zdyhwLGIsYykJc2hfbXYubXZfaW5zdygocCksIChiKSwgKGMpKQotI2RlZmluZSBfX2luc2wocCxiLGMpCXNoX212Lm12X2luc2woKHApLCAoYiksIChjKSkKLSNkZWZpbmUgX19vdXRzYihwLGIsYykJc2hfbXYubXZfb3V0c2IoKHApLCAoYiksIChjKSkKLSNkZWZpbmUgX19vdXRzdyhwLGIsYykJc2hfbXYubXZfb3V0c3coKHApLCAoYiksIChjKSkKLSNkZWZpbmUgX19vdXRzbChwLGIsYykJc2hfbXYubXZfb3V0c2woKHApLCAoYiksIChjKSkKKyNkZWZpbmUgX19yYXdfcmVhZGIoYSkJCShfX2Noa19pb19wdHIoYSksICoodm9sYXRpbGUgdTggIF9fZm9yY2UgKikoYSkpCisjZGVmaW5lIF9fcmF3X3JlYWR3KGEpCQkoX19jaGtfaW9fcHRyKGEpLCAqKHZvbGF0aWxlIHUxNiBfX2ZvcmNlICopKGEpKQorI2RlZmluZSBfX3Jhd19yZWFkbChhKQkJKF9fY2hrX2lvX3B0cihhKSwgKih2b2xhdGlsZSB1MzIgX19mb3JjZSAqKShhKSkKKyNkZWZpbmUgX19yYXdfcmVhZHEoYSkJCShfX2Noa19pb19wdHIoYSksICoodm9sYXRpbGUgdTY0IF9fZm9yY2UgKikoYSkpCiAKLSNkZWZpbmUgX19yZWFkYihhKQlzaF9tdi5tdl9yZWFkYigoYSkpCi0jZGVmaW5lIF9fcmVhZHcoYSkJc2hfbXYubXZfcmVhZHcoKGEpKQotI2RlZmluZSBfX3JlYWRsKGEpCXNoX212Lm12X3JlYWRsKChhKSkKLSNkZWZpbmUgX193cml0ZWIodixhKQlzaF9tdi5tdl93cml0ZWIoKHYpLChhKSkKLSNkZWZpbmUgX193cml0ZXcodixhKQlzaF9tdi5tdl93cml0ZXcoKHYpLChhKSkKLSNkZWZpbmUgX193cml0ZWwodixhKQlzaF9tdi5tdl93cml0ZWwoKHYpLChhKSkKKyNkZWZpbmUgcmVhZGIoYSkJCSh7IHU4ICByXyA9IF9fcmF3X3JlYWRiKGEpOyBtYigpOyByXzsgfSkKKyNkZWZpbmUgcmVhZHcoYSkJCSh7IHUxNiByXyA9IF9fcmF3X3JlYWR3KGEpOyBtYigpOyByXzsgfSkKKyNkZWZpbmUgcmVhZGwoYSkJCSh7IHUzMiByXyA9IF9fcmF3X3JlYWRsKGEpOyBtYigpOyByXzsgfSkKKyNkZWZpbmUgcmVhZHEoYSkJCSh7IHU2NCByXyA9IF9fcmF3X3JlYWRxKGEpOyBtYigpOyByXzsgfSkKIAotI2RlZmluZSBpbmIJCV9faW5iCi0jZGVmaW5lIGludwkJX19pbncKLSNkZWZpbmUgaW5sCQlfX2lubAotI2RlZmluZSBvdXRiCQlfX291dGIKLSNkZWZpbmUgb3V0dwkJX19vdXR3Ci0jZGVmaW5lIG91dGwJCV9fb3V0bAorI2RlZmluZSB3cml0ZWIodixhKQkJKHsgX19yYXdfd3JpdGViKCh2KSwoYSkpOyBtYigpOyB9KQorI2RlZmluZSB3cml0ZXcodixhKQkJKHsgX19yYXdfd3JpdGV3KCh2KSwoYSkpOyBtYigpOyB9KQorI2RlZmluZSB3cml0ZWwodixhKQkJKHsgX19yYXdfd3JpdGVsKCh2KSwoYSkpOyBtYigpOyB9KQorI2RlZmluZSB3cml0ZXEodixhKQkJKHsgX19yYXdfd3JpdGVxKCh2KSwoYSkpOyBtYigpOyB9KQogCi0jZGVmaW5lIGluYl9wCQlfX2luYl9wCi0jZGVmaW5lIGlud19wCQlfX2lud19wCi0jZGVmaW5lIGlubF9wCQlfX2lubF9wCi0jZGVmaW5lIG91dGJfcAkJX19vdXRiX3AKLSNkZWZpbmUgb3V0d19wCQlfX291dHdfcAotI2RlZmluZSBvdXRsX3AJCV9fb3V0bF9wCisvKiBTdXBlckggb24tY2hpcCBJL08gZnVuY3Rpb25zICovCisjZGVmaW5lIGN0cmxfaW5iCQlfX3Jhd19yZWFkYgorI2RlZmluZSBjdHJsX2ludwkJX19yYXdfcmVhZHcKKyNkZWZpbmUgY3RybF9pbmwJCV9fcmF3X3JlYWRsCisjZGVmaW5lIGN0cmxfaW5xCQlfX3Jhd19yZWFkcQogCi0jZGVmaW5lIGluc2IJCV9faW5zYgotI2RlZmluZSBpbnN3CQlfX2luc3cKLSNkZWZpbmUgaW5zbAkJX19pbnNsCi0jZGVmaW5lIG91dHNiCQlfX291dHNiCi0jZGVmaW5lIG91dHN3CQlfX291dHN3Ci0jZGVmaW5lIG91dHNsCQlfX291dHNsCisjZGVmaW5lIGN0cmxfb3V0YgkJX19yYXdfd3JpdGViCisjZGVmaW5lIGN0cmxfb3V0dwkJX19yYXdfd3JpdGV3CisjZGVmaW5lIGN0cmxfb3V0bAkJX19yYXdfd3JpdGVsCisjZGVmaW5lIGN0cmxfb3V0cQkJX19yYXdfd3JpdGVxCiAKLSNkZWZpbmUgX19yYXdfcmVhZGIoYSkJCV9fcmVhZGIoKHZvaWQgX19pb21lbSAqKShhKSkKLSNkZWZpbmUgX19yYXdfcmVhZHcoYSkJCV9fcmVhZHcoKHZvaWQgX19pb21lbSAqKShhKSkKLSNkZWZpbmUgX19yYXdfcmVhZGwoYSkJCV9fcmVhZGwoKHZvaWQgX19pb21lbSAqKShhKSkKLSNkZWZpbmUgX19yYXdfd3JpdGViKHYsIGEpCV9fd3JpdGViKHYsICh2b2lkIF9faW9tZW0gKikoYSkpCi0jZGVmaW5lIF9fcmF3X3dyaXRldyh2LCBhKQlfX3dyaXRldyh2LCAodm9pZCBfX2lvbWVtICopKGEpKQotI2RlZmluZSBfX3Jhd193cml0ZWwodiwgYSkJX193cml0ZWwodiwgKHZvaWQgX19pb21lbSAqKShhKSkKLQotdm9pZCBfX3Jhd193cml0ZXNsKHVuc2lnbmVkIGxvbmcgYWRkciwgY29uc3Qgdm9pZCAqZGF0YSwgaW50IGxvbmdsZW4pOwotdm9pZCBfX3Jhd19yZWFkc2wodW5zaWduZWQgbG9uZyBhZGRyLCB2b2lkICpkYXRhLCBpbnQgbG9uZ2xlbik7Ci0KLS8qCi0gKiBUaGUgcGxhdGZvcm0gaGVhZGVyIGZpbGVzIG1heSBkZWZpbmUgc29tZSBvZiB0aGVzZSBtYWNyb3MgdG8gdXNlCi0gKiB0aGUgaW5saW5lZCB2ZXJzaW9ucyB3aGVyZSBhcHByb3ByaWF0ZS4gIFRoZXNlIG1hY3JvcyBtYXkgYWxzbyBiZQotICogcmVkZWZpbmVkIGJ5IHVzZXJsZXZlbCBwcm9ncmFtcy4KLSAqLwotI2lmZGVmIF9fcmVhZGIKLSMgZGVmaW5lIHJlYWRiKGEpCSh7IHVuc2lnbmVkIGludCByXyA9IF9fcmF3X3JlYWRiKGEpOyBtYigpOyByXzsgfSkKK3N0YXRpYyBpbmxpbmUgdm9pZCBjdHJsX2RlbGF5KHZvaWQpCit7CisjaWZkZWYgUDJTRUcKKwlfX3Jhd19yZWFkdyhQMlNFRyk7CiAjZW5kaWYKLSNpZmRlZiBfX3Jhd19yZWFkdwotIyBkZWZpbmUgcmVhZHcoYSkJKHsgdW5zaWduZWQgaW50IHJfID0gX19yYXdfcmVhZHcoYSk7IG1iKCk7IHJfOyB9KQotI2VuZGlmCi0jaWZkZWYgX19yYXdfcmVhZGwKLSMgZGVmaW5lIHJlYWRsKGEpCSh7IHVuc2lnbmVkIGludCByXyA9IF9fcmF3X3JlYWRsKGEpOyBtYigpOyByXzsgfSkKLSNlbmRpZgotCi0jaWZkZWYgX19yYXdfd3JpdGViCi0jIGRlZmluZSB3cml0ZWIodixhKQkoeyBfX3Jhd193cml0ZWIoKHYpLChhKSk7IG1iKCk7IH0pCi0jZW5kaWYKLSNpZmRlZiBfX3Jhd193cml0ZXcKLSMgZGVmaW5lIHdyaXRldyh2LGEpCSh7IF9fcmF3X3dyaXRldygodiksKGEpKTsgbWIoKTsgfSkKLSNlbmRpZgotI2lmZGVmIF9fcmF3X3dyaXRlbAotIyBkZWZpbmUgd3JpdGVsKHYsYSkJKHsgX19yYXdfd3JpdGVsKCh2KSwoYSkpOyBtYigpOyB9KQotI2VuZGlmCit9CiAKICNkZWZpbmUgX19CVUlMRF9NRU1PUllfU1RSSU5HKGJ3bHEsIHR5cGUpCQkJCVwKIAkJCQkJCQkJCVwKLXN0YXRpYyBpbmxpbmUgdm9pZCB3cml0ZXMjI2J3bHEodm9sYXRpbGUgdm9pZCBfX2lvbWVtICptZW0sCQlcCitzdGF0aWMgaW5saW5lIHZvaWQgX19yYXdfd3JpdGVzIyNid2xxKHZvbGF0aWxlIHZvaWQgX19pb21lbSAqbWVtLAlcCiAJCQkJY29uc3Qgdm9pZCAqYWRkciwgdW5zaWduZWQgaW50IGNvdW50KQlcCiB7CQkJCQkJCQkJXAogCWNvbnN0IHZvbGF0aWxlIHR5cGUgKl9fYWRkciA9IGFkZHI7CQkJCVwKQEAgLTE0OSw4ICsxMTAsOCBAQAogCX0JCQkJCQkJCVwKIH0JCQkJCQkJCQlcCiAJCQkJCQkJCQlcCi1zdGF0aWMgaW5saW5lIHZvaWQgcmVhZHMjI2J3bHEodm9sYXRpbGUgdm9pZCBfX2lvbWVtICptZW0sIHZvaWQgKmFkZHIsCVwKLQkJCSAgICAgICB1bnNpZ25lZCBpbnQgY291bnQpCQkJXAorc3RhdGljIGlubGluZSB2b2lkIF9fcmF3X3JlYWRzIyNid2xxKHZvbGF0aWxlIHZvaWQgX19pb21lbSAqbWVtLAlcCisJCQkgICAgICAgdm9pZCAqYWRkciwgdW5zaWduZWQgaW50IGNvdW50KQkJXAogewkJCQkJCQkJCVwKIAl2b2xhdGlsZSB0eXBlICpfX2FkZHIgPSBhZGRyOwkJCQkJXAogCQkJCQkJCQkJXApAQCAtMTYyLDEwNiArMTIzLDcxIEBACiAKIF9fQlVJTERfTUVNT1JZX1NUUklORyhiLCB1OCkKIF9fQlVJTERfTUVNT1JZX1NUUklORyh3LCB1MTYpCi0jZGVmaW5lIHdyaXRlc2wgX19yYXdfd3JpdGVzbAotI2RlZmluZSByZWFkc2wgIF9fcmF3X3JlYWRzbAorX19CVUlMRF9NRU1PUllfU1RSSU5HKHEsIHU2NCkKIAotI2RlZmluZSByZWFkYl9yZWxheGVkKGEpIHJlYWRiKGEpCi0jZGVmaW5lIHJlYWR3X3JlbGF4ZWQoYSkgcmVhZHcoYSkKLSNkZWZpbmUgcmVhZGxfcmVsYXhlZChhKSByZWFkbChhKQordm9pZCBfX3Jhd193cml0ZXNsKHZvaWQgX19pb21lbSAqYWRkciwgY29uc3Qgdm9pZCAqZGF0YSwgaW50IGxvbmdsZW4pOwordm9pZCBfX3Jhd19yZWFkc2woY29uc3Qgdm9pZCBfX2lvbWVtICphZGRyLCB2b2lkICpkYXRhLCBpbnQgbG9uZ2xlbik7CisKKyNkZWZpbmUgd3JpdGVzYgkJCV9fcmF3X3dyaXRlc2IKKyNkZWZpbmUgd3JpdGVzdwkJCV9fcmF3X3dyaXRlc3cKKyNkZWZpbmUgd3JpdGVzbAkJCV9fcmF3X3dyaXRlc2wKKworI2RlZmluZSByZWFkc2IJCQlfX3Jhd19yZWFkc2IKKyNkZWZpbmUgcmVhZHN3CQkJX19yYXdfcmVhZHN3CisjZGVmaW5lIHJlYWRzbAkJCV9fcmF3X3JlYWRzbAorCisjZGVmaW5lIHJlYWRiX3JlbGF4ZWQoYSkJcmVhZGIoYSkKKyNkZWZpbmUgcmVhZHdfcmVsYXhlZChhKQlyZWFkdyhhKQorI2RlZmluZSByZWFkbF9yZWxheGVkKGEpCXJlYWRsKGEpCisjZGVmaW5lIHJlYWRxX3JlbGF4ZWQoYSkJcmVhZHEoYSkKIAogLyogU2ltcGxlIE1NSU8gKi8KLSNkZWZpbmUgaW9yZWFkOChhKQkJcmVhZGIoYSkKLSNkZWZpbmUgaW9yZWFkMTYoYSkJCXJlYWR3KGEpCisjZGVmaW5lIGlvcmVhZDgoYSkJCV9fcmF3X3JlYWRiKGEpCisjZGVmaW5lIGlvcmVhZDE2KGEpCQlfX3Jhd19yZWFkdyhhKQogI2RlZmluZSBpb3JlYWQxNmJlKGEpCQliZTE2X3RvX2NwdShfX3Jhd19yZWFkdygoYSkpKQotI2RlZmluZSBpb3JlYWQzMihhKQkJcmVhZGwoYSkKKyNkZWZpbmUgaW9yZWFkMzIoYSkJCV9fcmF3X3JlYWRsKGEpCiAjZGVmaW5lIGlvcmVhZDMyYmUoYSkJCWJlMzJfdG9fY3B1KF9fcmF3X3JlYWRsKChhKSkpCiAKLSNkZWZpbmUgaW93cml0ZTgodixhKQkJd3JpdGViKCh2KSwoYSkpCi0jZGVmaW5lIGlvd3JpdGUxNih2LGEpCQl3cml0ZXcoKHYpLChhKSkKKyNkZWZpbmUgaW93cml0ZTgodixhKQkJX19yYXdfd3JpdGViKCh2KSwoYSkpCisjZGVmaW5lIGlvd3JpdGUxNih2LGEpCQlfX3Jhd193cml0ZXcoKHYpLChhKSkKICNkZWZpbmUgaW93cml0ZTE2YmUodixhKQlfX3Jhd193cml0ZXcoY3B1X3RvX2JlMTYoKHYpKSwoYSkpCi0jZGVmaW5lIGlvd3JpdGUzMih2LGEpCQl3cml0ZWwoKHYpLChhKSkKKyNkZWZpbmUgaW93cml0ZTMyKHYsYSkJCV9fcmF3X3dyaXRlbCgodiksKGEpKQogI2RlZmluZSBpb3dyaXRlMzJiZSh2LGEpCV9fcmF3X3dyaXRlbChjcHVfdG9fYmUzMigodikpLChhKSkKIAotI2RlZmluZSBpb3JlYWQ4X3JlcChhLCBkLCBjKQlyZWFkc2IoKGEpLCAoZCksIChjKSkKLSNkZWZpbmUgaW9yZWFkMTZfcmVwKGEsIGQsIGMpCXJlYWRzdygoYSksIChkKSwgKGMpKQotI2RlZmluZSBpb3JlYWQzMl9yZXAoYSwgZCwgYykJcmVhZHNsKChhKSwgKGQpLCAoYykpCisjZGVmaW5lIGlvcmVhZDhfcmVwKGEsIGQsIGMpCV9fcmF3X3JlYWRzYigoYSksIChkKSwgKGMpKQorI2RlZmluZSBpb3JlYWQxNl9yZXAoYSwgZCwgYykJX19yYXdfcmVhZHN3KChhKSwgKGQpLCAoYykpCisjZGVmaW5lIGlvcmVhZDMyX3JlcChhLCBkLCBjKQlfX3Jhd19yZWFkc2woKGEpLCAoZCksIChjKSkKIAotI2RlZmluZSBpb3dyaXRlOF9yZXAoYSwgcywgYykJd3JpdGVzYigoYSksIChzKSwgKGMpKQotI2RlZmluZSBpb3dyaXRlMTZfcmVwKGEsIHMsIGMpCXdyaXRlc3coKGEpLCAocyksIChjKSkKLSNkZWZpbmUgaW93cml0ZTMyX3JlcChhLCBzLCBjKQl3cml0ZXNsKChhKSwgKHMpLCAoYykpCisjZGVmaW5lIGlvd3JpdGU4X3JlcChhLCBzLCBjKQlfX3Jhd193cml0ZXNiKChhKSwgKHMpLCAoYykpCisjZGVmaW5lIGlvd3JpdGUxNl9yZXAoYSwgcywgYykJX19yYXdfd3JpdGVzdygoYSksIChzKSwgKGMpKQorI2RlZmluZSBpb3dyaXRlMzJfcmVwKGEsIHMsIGMpCV9fcmF3X3dyaXRlc2woKGEpLCAocyksIChjKSkKIAotI2RlZmluZSBtbWlvd2IoKQl3bWIoKQkvKiBzeW5jbyBvbiBTSC00QSwgb3RoZXJ3aXNlIGEgbm9wICovCisvKiBzeW5jbyBvbiBTSC00QSwgb3RoZXJ3aXNlIGEgbm9wICovCisjZGVmaW5lIG1taW93YigpCQl3bWIoKQogCiAjZGVmaW5lIElPX1NQQUNFX0xJTUlUIDB4ZmZmZmZmZmYKIAorZXh0ZXJuIHVuc2lnbmVkIGxvbmcgZ2VuZXJpY19pb19iYXNlOworCiAvKgotICogVGhpcyBmdW5jdGlvbiBwcm92aWRlcyBhIG1ldGhvZCBmb3IgdGhlIGdlbmVyaWMgY2FzZSB3aGVyZSBhIGJvYXJkLXNwZWNpZmljCi0gKiBpb3BvcnRfbWFwIHNpbXBseSBuZWVkcyB0byByZXR1cm4gdGhlIHBvcnQgKyBzb21lIGFyYml0cmFyeSBwb3J0IGJhc2UuCisgKiBUaGlzIGZ1bmN0aW9uIHByb3ZpZGVzIGEgbWV0aG9kIGZvciB0aGUgZ2VuZXJpYyBjYXNlIHdoZXJlIGEKKyAqIGJvYXJkLXNwZWNpZmljIGlvcG9ydF9tYXAgc2ltcGx5IG5lZWRzIHRvIHJldHVybiB0aGUgcG9ydCArIHNvbWUKKyAqIGFyYml0cmFyeSBwb3J0IGJhc2UuCiAgKgogICogV2UgdXNlIHRoaXMgYXQgYm9hcmQgc2V0dXAgdGltZSB0byBpbXBsaWNpdGx5IHNldCB0aGUgcG9ydCBiYXNlLCBhbmQKICAqIGFzIGEgcmVzdWx0LCB3ZSBjYW4gdXNlIHRoZSBnZW5lcmljIGlvcG9ydF9tYXAuCiAgKi8KIHN0YXRpYyBpbmxpbmUgdm9pZCBfX3NldF9pb19wb3J0X2Jhc2UodW5zaWduZWQgbG9uZyBwYmFzZSkKIHsKLQlleHRlcm4gdW5zaWduZWQgbG9uZyBnZW5lcmljX2lvX2Jhc2U7Ci0KIAlnZW5lcmljX2lvX2Jhc2UgPSBwYmFzZTsKIH0KIAogI2RlZmluZSBfX2lvcG9ydF9tYXAocCwgbikgc2hfbXYubXZfaW9wb3J0X21hcCgocCksIChuKSkKIAogLyogV2UgcmVhbGx5IHdhbnQgdG8gdHJ5IGFuZCBnZXQgdGhlc2UgdG8gbWVtY3B5IGV0YyAqLwotZXh0ZXJuIHZvaWQgbWVtY3B5X2Zyb21pbyh2b2lkICosIHZvbGF0aWxlIHZvaWQgX19pb21lbSAqLCB1bnNpZ25lZCBsb25nKTsKLWV4dGVybiB2b2lkIG1lbWNweV90b2lvKHZvbGF0aWxlIHZvaWQgX19pb21lbSAqLCBjb25zdCB2b2lkICosIHVuc2lnbmVkIGxvbmcpOwotZXh0ZXJuIHZvaWQgbWVtc2V0X2lvKHZvbGF0aWxlIHZvaWQgX19pb21lbSAqLCBpbnQsIHVuc2lnbmVkIGxvbmcpOwotCi0vKiBTdXBlckggb24tY2hpcCBJL08gZnVuY3Rpb25zICovCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGNoYXIgY3RybF9pbmIodW5zaWduZWQgbG9uZyBhZGRyKQotewotCXJldHVybiAqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIqKWFkZHI7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgc2hvcnQgY3RybF9pbncodW5zaWduZWQgbG9uZyBhZGRyKQotewotCXJldHVybiAqKHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0KilhZGRyOwotfQotCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBjdHJsX2lubCh1bnNpZ25lZCBsb25nIGFkZHIpCi17Ci0JcmV0dXJuICoodm9sYXRpbGUgdW5zaWduZWQgbG9uZyopYWRkcjsKLX0KLQotc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGxvbmcgY3RybF9pbnEodW5zaWduZWQgbG9uZyBhZGRyKQotewotCXJldHVybiAqKHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgbG9uZyopYWRkcjsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGN0cmxfb3V0Yih1bnNpZ25lZCBjaGFyIGIsIHVuc2lnbmVkIGxvbmcgYWRkcikKLXsKLQkqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIqKWFkZHIgPSBiOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgY3RybF9vdXR3KHVuc2lnbmVkIHNob3J0IGIsIHVuc2lnbmVkIGxvbmcgYWRkcikKLXsKLQkqKHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0KilhZGRyID0gYjsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGN0cmxfb3V0bCh1bnNpZ25lZCBpbnQgYiwgdW5zaWduZWQgbG9uZyBhZGRyKQotewotICAgICAgICAqKHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcqKWFkZHIgPSBiOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgY3RybF9vdXRxKHVuc2lnbmVkIGxvbmcgbG9uZyBiLCB1bnNpZ25lZCBsb25nIGFkZHIpCi17Ci0JKih2b2xhdGlsZSB1bnNpZ25lZCBsb25nIGxvbmcqKWFkZHIgPSBiOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgY3RybF9kZWxheSh2b2lkKQotewotI2lmZGVmIFAyU0VHCi0JY3RybF9pbncoUDJTRUcpOwotI2VuZGlmCi19Cit2b2lkIG1lbWNweV9mcm9taW8odm9pZCAqLCBjb25zdCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKiwgdW5zaWduZWQgbG9uZyk7Cit2b2lkIG1lbWNweV90b2lvKHZvbGF0aWxlIHZvaWQgX19pb21lbSAqLCBjb25zdCB2b2lkICosIHVuc2lnbmVkIGxvbmcpOwordm9pZCBtZW1zZXRfaW8odm9sYXRpbGUgdm9pZCBfX2lvbWVtICosIGludCwgdW5zaWduZWQgbG9uZyk7CiAKIC8qIFF1YWQtd29yZCByZWFsLW1vZGUgSS9PLCBkb24ndCBhc2suLiAqLwogdW5zaWduZWQgbG9uZyBsb25nIHBlZWtfcmVhbF9hZGRyZXNzX3EodW5zaWduZWQgbG9uZyBsb25nIGFkZHIpOwpAQCAtMzQ3LDkgKzI3MywxNSBAQAogCV9faW9yZW1hcF9tb2RlKChvZmZzZXQpLCAoc2l6ZSksIF9QQUdFX0NBQ0hBQkxFKQogI2RlZmluZSBwM19pb3JlbWFwKG9mZnNldCwgc2l6ZSwgZmxhZ3MpCQkJXAogCV9faW9yZW1hcCgob2Zmc2V0KSwgKHNpemUpLCAoZmxhZ3MpKQorI2RlZmluZSBpb3JlbWFwX3Byb3Qob2Zmc2V0LCBzaXplLCBmbGFncykJCVwKKwlfX2lvcmVtYXBfbW9kZSgob2Zmc2V0KSwgKHNpemUpLCAoZmxhZ3MpKQogI2RlZmluZSBpb3VubWFwKGFkZHIpCQkJCQlcCiAJX19pb3VubWFwKChhZGRyKSkKIAorI2RlZmluZSBtYXliZWJhZGlvKHBvcnQpIFwKKwlwcmludGsoS0VSTl9FUlIgImJhZCBQQy1saWtlIGlvICVzOiV1IGZvciBwb3J0IDB4JWx4IGF0IDB4JTA4eFxuIiwgXAorCSAgICAgICBfX2Z1bmNfXywgX19MSU5FX18sIChwb3J0KSwgKHUzMilfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMCkpCisKIC8qCiAgKiBDb252ZXJ0IGEgcGh5c2ljYWwgcG9pbnRlciB0byBhIHZpcnR1YWwga2VybmVsIHBvaW50ZXIgZm9yIC9kZXYvbWVtCiAgKiBhY2Nlc3MKZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vaW9fZ2VuZXJpYy5oIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9pb19nZW5lcmljLmgKaW5kZXggOTJmYzYwNy4uMWU1ZDM3NSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9pb19nZW5lcmljLmgKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9pb19nZW5lcmljLmgKQEAgLTMzLDEzICszMyw2IEBACiB2b2lkIElPX0NPTkNBVChfX0lPX1BSRUZJWCxvdXRzdykodW5zaWduZWQgbG9uZywgY29uc3Qgdm9pZCAqc3JjLCB1bnNpZ25lZCBsb25nIGNvdW50KTsKIHZvaWQgSU9fQ09OQ0FUKF9fSU9fUFJFRklYLG91dHNsKSh1bnNpZ25lZCBsb25nLCBjb25zdCB2b2lkICpzcmMsIHVuc2lnbmVkIGxvbmcgY291bnQpOwogCi11OCBJT19DT05DQVQoX19JT19QUkVGSVgscmVhZGIpKHZvaWQgX19pb21lbSAqKTsKLXUxNiBJT19DT05DQVQoX19JT19QUkVGSVgscmVhZHcpKHZvaWQgX19pb21lbSAqKTsKLXUzMiBJT19DT05DQVQoX19JT19QUkVGSVgscmVhZGwpKHZvaWQgX19pb21lbSAqKTsKLXZvaWQgSU9fQ09OQ0FUKF9fSU9fUFJFRklYLHdyaXRlYikodTgsIHZvaWQgX19pb21lbSAqKTsKLXZvaWQgSU9fQ09OQ0FUKF9fSU9fUFJFRklYLHdyaXRldykodTE2LCB2b2lkIF9faW9tZW0gKik7Ci12b2lkIElPX0NPTkNBVChfX0lPX1BSRUZJWCx3cml0ZWwpKHUzMiwgdm9pZCBfX2lvbWVtICopOwotCiB2b2lkICpJT19DT05DQVQoX19JT19QUkVGSVgsaW9yZW1hcCkodW5zaWduZWQgbG9uZyBvZmZzZXQsIHVuc2lnbmVkIGxvbmcgc2l6ZSk7CiB2b2lkIElPX0NPTkNBVChfX0lPX1BSRUZJWCxpb3VubWFwKSh2b2lkICphZGRyKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9pcnEuaCBiL2FyY2gvc2gvaW5jbHVkZS9hc20vaXJxLmgKaW5kZXggNjE5NWE1My4uZDMxOWJhYSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9pcnEuaAorKysgYi9hcmNoL3NoL2luY2x1ZGUvYXNtL2lycS5oCkBAIC00MSw2ICs0MSw5IEBACiAjZGVmaW5lIGlycV9jYW5vbmljYWxpemUoaXJxKQkoaXJxKQogI2RlZmluZSBpcnFfZGVtdXgoaXJxKQkJc2hfbXYubXZfaXJxX2RlbXV4KGlycSkKIAordm9pZCBpbml0X0lSUSh2b2lkKTsKK2FzbWxpbmthZ2UgaW50IGRvX0lSUSh1bnNpZ25lZCBpbnQgaXJxLCBzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CisKICNpZmRlZiBDT05GSUdfSVJRU1RBQ0tTCiBleHRlcm4gdm9pZCBpcnFfY3R4X2luaXQoaW50IGNwdSk7CiBleHRlcm4gdm9pZCBpcnFfY3R4X2V4aXQoaW50IGNwdSk7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL2twcm9iZXMuaCBiL2FyY2gvc2gvaW5jbHVkZS9hc20va3Byb2Jlcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYwNzhkOGUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3NoL2luY2x1ZGUvYXNtL2twcm9iZXMuaApAQCAtMCwwICsxLDU4IEBACisjaWZuZGVmIF9fQVNNX1NIX0tQUk9CRVNfSAorI2RlZmluZSBfX0FTTV9TSF9LUFJPQkVTX0gKKworI2lmZGVmIENPTkZJR19LUFJPQkVTCisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3B0cmFjZS5oPgorCit0eXBlZGVmIHUxNiBrcHJvYmVfb3Bjb2RlX3Q7CisjZGVmaW5lIEJSRUFLUE9JTlRfSU5TVFJVQ1RJT04JMHhjMzNhCisKKyNkZWZpbmUgTUFYX0lOU05fU0laRSAxNgorI2RlZmluZSBNQVhfU1RBQ0tfU0laRSA2NAorI2RlZmluZSBNSU5fU1RBQ0tfU0laRShBRERSKSAoKChNQVhfU1RBQ0tfU0laRSkgPCBcCisJKCgodW5zaWduZWQgbG9uZyljdXJyZW50X3RocmVhZF9pbmZvKCkpICsgVEhSRUFEX1NJWkUgLSAoQUREUikpKSBcCisJPyAoTUFYX1NUQUNLX1NJWkUpIFwKKwk6ICgoKHVuc2lnbmVkIGxvbmcpY3VycmVudF90aHJlYWRfaW5mbygpKSArIFRIUkVBRF9TSVpFIC0gKEFERFIpKSkKKworI2RlZmluZSByZWdzX3JldHVybl92YWx1ZShyZWdzKQkJKChyZWdzKS0+cmVnc1swXSkKKyNkZWZpbmUgZmx1c2hfaW5zbl9zbG90KHApCQlkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIGtyZXRwcm9iZV9ibGFja2xpc3Rfc2l6ZQkwCisKK3N0cnVjdCBrcHJvYmU7CisKK3ZvaWQgYXJjaF9yZW1vdmVfa3Byb2JlKHN0cnVjdCBrcHJvYmUgKik7Cit2b2lkIGtyZXRwcm9iZV90cmFtcG9saW5lKHZvaWQpOwordm9pZCBqcHJvYmVfcmV0dXJuX2VuZCh2b2lkKTsKKworLyogQXJjaGl0ZWN0dXJlIHNwZWNpZmljIGNvcHkgb2Ygb3JpZ2luYWwgaW5zdHJ1Y3Rpb24qLworc3RydWN0IGFyY2hfc3BlY2lmaWNfaW5zbiB7CisJLyogY29weSBvZiB0aGUgb3JpZ2luYWwgaW5zdHJ1Y3Rpb24gKi8KKwlrcHJvYmVfb3Bjb2RlX3QgaW5zbltNQVhfSU5TTl9TSVpFXTsKK307CisKK3N0cnVjdCBwcmV2X2twcm9iZSB7CisJc3RydWN0IGtwcm9iZSAqa3A7CisJdW5zaWduZWQgbG9uZyBzdGF0dXM7Cit9OworCisvKiBwZXItY3B1IGtwcm9iZSBjb250cm9sIGJsb2NrICovCitzdHJ1Y3Qga3Byb2JlX2N0bGJsayB7CisJdW5zaWduZWQgbG9uZyBrcHJvYmVfc3RhdHVzOworCXVuc2lnbmVkIGxvbmcganByb2JlX3NhdmVkX3IxNTsKKwlzdHJ1Y3QgcHRfcmVncyBqcHJvYmVfc2F2ZWRfcmVnczsKKwlrcHJvYmVfb3Bjb2RlX3QganByb2Jlc19zdGFja1tNQVhfU1RBQ0tfU0laRV07CisJc3RydWN0IHByZXZfa3Byb2JlIHByZXZfa3Byb2JlOworfTsKKworZXh0ZXJuIGludCBrcHJvYmVfZmF1bHRfaGFuZGxlcihzdHJ1Y3QgcHRfcmVncyAqcmVncywgaW50IHRyYXBucik7CitleHRlcm4gaW50IGtwcm9iZV9leGNlcHRpb25zX25vdGlmeShzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnNlbGYsCisJCQkJICAgIHVuc2lnbmVkIGxvbmcgdmFsLCB2b2lkICpkYXRhKTsKK2V4dGVybiBpbnQga3Byb2JlX2hhbmRsZV9pbGxzbG90KHVuc2lnbmVkIGxvbmcgcGMpOworI2Vsc2UKKworI2RlZmluZSBrcHJvYmVfaGFuZGxlX2lsbHNsb3QocGMpCSgtMSkKKworI2VuZGlmIC8qIENPTkZJR19LUFJPQkVTICovCisjZW5kaWYgLyogX19BU01fU0hfS1BST0JFU19IICovCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL21hY2h2ZWMuaCBiL2FyY2gvc2gvaW5jbHVkZS9hc20vbWFjaHZlYy5oCmluZGV4IGIyZTQxMjQuLmYxYmFlMDIgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvaW5jbHVkZS9hc20vbWFjaHZlYy5oCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9hc20vbWFjaHZlYy5oCkBAIC00MiwxMyArNDIsNiBAQAogCXZvaWQgKCptdl9vdXRzdykodW5zaWduZWQgbG9uZywgY29uc3Qgdm9pZCAqc3JjLCB1bnNpZ25lZCBsb25nIGNvdW50KTsKIAl2b2lkICgqbXZfb3V0c2wpKHVuc2lnbmVkIGxvbmcsIGNvbnN0IHZvaWQgKnNyYywgdW5zaWduZWQgbG9uZyBjb3VudCk7CiAKLQl1OCAoKm12X3JlYWRiKSh2b2lkIF9faW9tZW0gKik7Ci0JdTE2ICgqbXZfcmVhZHcpKHZvaWQgX19pb21lbSAqKTsKLQl1MzIgKCptdl9yZWFkbCkodm9pZCBfX2lvbWVtICopOwotCXZvaWQgKCptdl93cml0ZWIpKHU4LCB2b2lkIF9faW9tZW0gKik7Ci0Jdm9pZCAoKm12X3dyaXRldykodTE2LCB2b2lkIF9faW9tZW0gKik7Ci0Jdm9pZCAoKm12X3dyaXRlbCkodTMyLCB2b2lkIF9faW9tZW0gKik7Ci0KIAlpbnQgKCptdl9pcnFfZGVtdXgpKGludCBpcnEpOwogCiAJdm9pZCAoKm12X2luaXRfaXJxKSh2b2lkKTsKZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vbWlnb3IuaCBiL2FyY2gvc2gvaW5jbHVkZS9hc20vbWlnb3IuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzEyYjYzMi4uMDAwMDAwMAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvYXNtL21pZ29yLmgKKysrIC9kZXYvbnVsbApAQCAtMSw2MiArMCwwIEBACi0jaWZuZGVmIF9fQVNNX1NIX01JR09SX0gKLSNkZWZpbmUgX19BU01fU0hfTUlHT1JfSAotCi0vKgotICogbGludXgvaW5jbHVkZS9hc20tc2gvbWlnb3IuaAotICoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBSZW5lc2FzIFNvbHV0aW9ucwotICoKLSAqIFBvcnRpb25zIENvcHlyaWdodCAoQykgMjAwNyBOb2J1aGlybyBJd2FtYXRzdQotICoKLSAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlLiBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKLSAqIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICovCi0jaW5jbHVkZSA8YXNtL2FkZHJzcGFjZS5oPgotCi0vKiBHUElPICovCi0jZGVmaW5lIFBPUlRfUEFDUiAweGE0MDUwMTAwCi0jZGVmaW5lIFBPUlRfUERDUiAweGE0MDUwMTA2Ci0jZGVmaW5lIFBPUlRfUEVDUiAweGE0MDUwMTA4Ci0jZGVmaW5lIFBPUlRfUEhDUiAweGE0MDUwMTBlCi0jZGVmaW5lIFBPUlRfUEpDUiAweGE0MDUwMTEwCi0jZGVmaW5lIFBPUlRfUEtDUiAweGE0MDUwMTEyCi0jZGVmaW5lIFBPUlRfUExDUiAweGE0MDUwMTE0Ci0jZGVmaW5lIFBPUlRfUE1DUiAweGE0MDUwMTE2Ci0jZGVmaW5lIFBPUlRfUFJDUiAweGE0MDUwMTFjCi0jZGVmaW5lIFBPUlRfUFRDUiAweGE0MDUwMTQwCi0jZGVmaW5lIFBPUlRfUFVDUiAweGE0MDUwMTQyCi0jZGVmaW5lIFBPUlRfUFZDUiAweGE0MDUwMTQ0Ci0jZGVmaW5lIFBPUlRfUFdDUiAweGE0MDUwMTQ2Ci0jZGVmaW5lIFBPUlRfUFhDUiAweGE0MDUwMTQ4Ci0jZGVmaW5lIFBPUlRfUFlDUiAweGE0MDUwMTRhCi0jZGVmaW5lIFBPUlRfUFpDUiAweGE0MDUwMTRjCi0jZGVmaW5lIFBPUlRfUEFEUiAweGE0MDUwMTIwCi0jZGVmaW5lIFBPUlRfUEhEUiAweGE0MDUwMTJlCi0jZGVmaW5lIFBPUlRfUFREUiAweGE0MDUwMTYwCi0jZGVmaW5lIFBPUlRfUFdEUiAweGE0MDUwMTY2Ci0KLSNkZWZpbmUgUE9SVF9ISVpDUkEgMHhhNDA1MDE1OAotI2RlZmluZSBQT1JUX0hJWkNSQyAweGE0MDUwMTVjCi0KLSNkZWZpbmUgUE9SVF9NU0VMQ1JCIDB4YTQwNTAxODIKLQotI2RlZmluZSBQT1JUX1BTRUxBIDB4YTQwNTAxNGUKLSNkZWZpbmUgUE9SVF9QU0VMQiAweGE0MDUwMTUwCi0jZGVmaW5lIFBPUlRfUFNFTEMgMHhhNDA1MDE1MgotI2RlZmluZSBQT1JUX1BTRUxEIDB4YTQwNTAxNTQKLSNkZWZpbmUgUE9SVF9QU0VMRSAweGE0MDUwMTU2Ci0KLSNkZWZpbmUgUE9SVF9ISVpDUkEgMHhhNDA1MDE1OAotI2RlZmluZSBQT1JUX0hJWkNSQiAweGE0MDUwMTVhCi0jZGVmaW5lIFBPUlRfSElaQ1JDIDB4YTQwNTAxNWMKLQotI2RlZmluZSBCU0NfQ1M2QUJDUiAweGZlYzEwMDFjCi0KLSNpbmNsdWRlIDxhc20vc2hfbW9iaWxlX2xjZGMuaD4KLQotaW50IG1pZ29yX2xjZF9xdmdhX3NldHVwKHZvaWQgKmJvYXJkX2RhdGEsIHZvaWQgKnN5c19vcHNfaGFuZGxlLAotCQkJIHN0cnVjdCBzaF9tb2JpbGVfbGNkY19zeXNfYnVzX29wcyAqc3lzX29wcyk7Ci0KLSNlbmRpZiAvKiBfX0FTTV9TSF9NSUdPUl9IICovCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL21tem9uZS5oIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9tbXpvbmUuaAppbmRleCAyOTY5MjUzLi43ZjUzNjNiIDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvYXNtL21tem9uZS5oCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9hc20vbW16b25lLmgKQEAgLTQsNiArNCw4IEBACiAjaWZkZWYgX19LRVJORUxfXwogCiAjaWZkZWYgQ09ORklHX05FRURfTVVMVElQTEVfTk9ERVMKKyNpbmNsdWRlIDxsaW51eC9udW1hLmg+CisKIGV4dGVybiBzdHJ1Y3QgcGdsaXN0X2RhdGEgKm5vZGVfZGF0YVtdOwogI2RlZmluZSBOT0RFX0RBVEEobmlkKQkJKG5vZGVfZGF0YVtuaWRdKQogCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3BhZ2UuaCBiL2FyY2gvc2gvaW5jbHVkZS9hc20vcGFnZS5oCmluZGV4IDc3ZmI4YmYuLjU4NzFkNzggMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvaW5jbHVkZS9hc20vcGFnZS5oCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9hc20vcGFnZS5oCkBAIC0xMDQsNiArMTA0LDggQEAKIAogdHlwZWRlZiBzdHJ1Y3QgcGFnZSAqcGd0YWJsZV90OwogCisjZGVmaW5lIHB0ZV9wZ3Byb3QoeCkgX19wZ3Byb3QocHRlX3ZhbCh4KSAmIFBURV9GTEFHU19NQVNLKQorCiAjZW5kaWYgLyogIV9fQVNTRU1CTFlfXyAqLwogCiAvKgpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmggYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3BndGFibGUuaAppbmRleCBhNGE4ZjhiLi41MjIyMGQ3IDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3BndGFibGUuaAorKysgYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3BndGFibGUuaApAQCAtNzYsNiArNzYsNyBAQAogI2VuZGlmCiAKICNkZWZpbmUgUFRFX1BIWVNfTUFTSwkJKFBIWVNfQUREUl9NQVNLICYgUEFHRV9NQVNLKQorI2RlZmluZSBQVEVfRkxBR1NfTUFTSwkJKH4oUFRFX1BIWVNfTUFTSykgPDwgUEFHRV9TSElGVCkKIAogI2lmZGVmIENPTkZJR19TVVBFUkgzMgogI2RlZmluZSBWTUFMTE9DX1NUQVJUCShQM1NFRykKZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmggYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oCmluZGV4IDE1ZDlmOTIuLjY5MzM2NGEgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmgKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaApAQCAtMyw2ICszLDcgQEAKIAogI2luY2x1ZGUgPGFzbS9jcHUtZmVhdHVyZXMuaD4KICNpbmNsdWRlIDxhc20vc2VnbWVudC5oPgorI2luY2x1ZGUgPGFzbS9jYWNoZS5oPgogCiAjaWZuZGVmIF9fQVNTRU1CTFlfXwogLyoKQEAgLTQzLDExICs0NCw1MiBAQAogCUNQVV9TSF9OT05FCiB9OwogCisvKgorICogVExCIGluZm9ybWF0aW9uIHN0cnVjdHVyZQorICoKKyAqIERlZmluZWQgZm9yIGJvdGggSSBhbmQgRCB0bGIsIHBlci1wcm9jZXNzb3IuCisgKi8KK3N0cnVjdCB0bGJfaW5mbyB7CisJdW5zaWduZWQgbG9uZyBsb25nIG5leHQ7CisJdW5zaWduZWQgbG9uZyBsb25nIGZpcnN0OworCXVuc2lnbmVkIGxvbmcgbG9uZyBsYXN0OworCisJdW5zaWduZWQgaW50IGVudHJpZXM7CisJdW5zaWduZWQgaW50IHN0ZXA7CisKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworfTsKKworc3RydWN0IHNoX2NwdWluZm8geworCXVuc2lnbmVkIGludCB0eXBlOworCWludCBjdXRfbWFqb3IsIGN1dF9taW5vcjsKKwl1bnNpZ25lZCBsb25nIGxvb3BzX3Blcl9qaWZmeTsKKwl1bnNpZ25lZCBsb25nIGFzaWRfY2FjaGU7CisKKwlzdHJ1Y3QgY2FjaGVfaW5mbyBpY2FjaGU7CS8qIFByaW1hcnkgSS1jYWNoZSAqLworCXN0cnVjdCBjYWNoZV9pbmZvIGRjYWNoZTsJLyogUHJpbWFyeSBELWNhY2hlICovCisJc3RydWN0IGNhY2hlX2luZm8gc2NhY2hlOwkvKiBTZWNvbmRhcnkgY2FjaGUgKi8KKworCS8qIFRMQiBpbmZvICovCisJc3RydWN0IHRsYl9pbmZvIGl0bGI7CisJc3RydWN0IHRsYl9pbmZvIGR0bGI7CisKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworfSBfX2F0dHJpYnV0ZV9fICgoYWxpZ25lZChMMV9DQUNIRV9CWVRFUykpKTsKKworZXh0ZXJuIHN0cnVjdCBzaF9jcHVpbmZvIGNwdV9kYXRhW107CisjZGVmaW5lIGJvb3RfY3B1X2RhdGEgY3B1X2RhdGFbMF0KKyNkZWZpbmUgY3VycmVudF9jcHVfZGF0YSBjcHVfZGF0YVtzbXBfcHJvY2Vzc29yX2lkKCldCisjZGVmaW5lIHJhd19jdXJyZW50X2NwdV9kYXRhIGNwdV9kYXRhW3Jhd19zbXBfcHJvY2Vzc29yX2lkKCldCisKIC8qIEZvcndhcmQgZGVjbCAqLwotc3RydWN0IHNoX2NwdWluZm87CitzdHJ1Y3Qgc2VxX29wZXJhdGlvbnM7CisKK2V4dGVybiBzdHJ1Y3QgcHRfcmVncyBmYWtlX3N3YXBwZXJfcmVnczsKIAogLyogYXJjaC9zaC9rZXJuZWwvc2V0dXAuYyAqLwogY29uc3QgY2hhciAqZ2V0X2NwdV9zdWJ0eXBlKHN0cnVjdCBzaF9jcHVpbmZvICpjKTsKK2V4dGVybiBjb25zdCBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgY3B1aW5mb19vcDsKIAogI2lmZGVmIENPTkZJR19WU1lTQ0FMTAogaW50IHZzeXNjYWxsX2luaXQodm9pZCk7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3Byb2Nlc3Nvcl8zMi5oIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9wcm9jZXNzb3JfMzIuaAppbmRleCAwZGFkZDc1Li5hNDZhMDIwIDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3Byb2Nlc3Nvcl8zMi5oCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9hc20vcHJvY2Vzc29yXzMyLmgKQEAgLTEwLDkgKzEwLDkgQEAKICNpZmRlZiBfX0tFUk5FTF9fCiAKICNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgorI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KICNpbmNsdWRlIDxhc20vcGFnZS5oPgogI2luY2x1ZGUgPGFzbS90eXBlcy5oPgotI2luY2x1ZGUgPGFzbS9jYWNoZS5oPgogI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KIAogLyoKQEAgLTI2LDIzICsyNiw3IEBACiAjZGVmaW5lIENDTl9DVlIJCTB4ZmYwMDAwNDAKICNkZWZpbmUgQ0NOX1BSUgkJMHhmZjAwMDA0NAogCi1zdHJ1Y3Qgc2hfY3B1aW5mbyB7Ci0JdW5zaWduZWQgaW50IHR5cGU7Ci0JaW50IGN1dF9tYWpvciwgY3V0X21pbm9yOwotCXVuc2lnbmVkIGxvbmcgbG9vcHNfcGVyX2ppZmZ5OwotCXVuc2lnbmVkIGxvbmcgYXNpZF9jYWNoZTsKLQotCXN0cnVjdCBjYWNoZV9pbmZvIGljYWNoZTsJLyogUHJpbWFyeSBJLWNhY2hlICovCi0Jc3RydWN0IGNhY2hlX2luZm8gZGNhY2hlOwkvKiBQcmltYXJ5IEQtY2FjaGUgKi8KLQlzdHJ1Y3QgY2FjaGVfaW5mbyBzY2FjaGU7CS8qIFNlY29uZGFyeSBjYWNoZSAqLwotCi0JdW5zaWduZWQgbG9uZyBmbGFnczsKLX0gX19hdHRyaWJ1dGVfXyAoKGFsaWduZWQoTDFfQ0FDSEVfQllURVMpKSk7Ci0KLWV4dGVybiBzdHJ1Y3Qgc2hfY3B1aW5mbyBjcHVfZGF0YVtdOwotI2RlZmluZSBib290X2NwdV9kYXRhIGNwdV9kYXRhWzBdCi0jZGVmaW5lIGN1cnJlbnRfY3B1X2RhdGEgY3B1X2RhdGFbc21wX3Byb2Nlc3Nvcl9pZCgpXQotI2RlZmluZSByYXdfY3VycmVudF9jcHVfZGF0YSBjcHVfZGF0YVtyYXdfc21wX3Byb2Nlc3Nvcl9pZCgpXQorYXNtbGlua2FnZSB2b2lkIF9faW5pdCBzaF9jcHVfaW5pdCh2b2lkKTsKIAogLyoKICAqIFVzZXIgc3BhY2UgcHJvY2VzcyBzaXplOiAyR0IuCkBAIC0xOTYsNiArMTgwLDggQEAKICNkZWZpbmUgS1NUS19FSVAodHNrKSAgKHRhc2tfcHRfcmVncyh0c2spLT5wYykKICNkZWZpbmUgS1NUS19FU1AodHNrKSAgKHRhc2tfcHRfcmVncyh0c2spLT5yZWdzWzE1XSkKIAorI2RlZmluZSB1c2VyX3N0YWNrX3BvaW50ZXIocmVncykJKChyZWdzKS0+cmVnc1sxNV0pCisKICNkZWZpbmUgY3B1X3NsZWVwKCkJX19hc21fXyBfX3ZvbGF0aWxlX18gKCJzbGVlcCIgOiA6IDogIm1lbW9yeSIpCiAjZGVmaW5lIGNwdV9yZWxheCgpCWJhcnJpZXIoKQogCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3Byb2Nlc3Nvcl82NC5oIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9wcm9jZXNzb3JfNjQuaAppbmRleCA3NzBkNTE2Li5iMGI0ODI0IDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3Byb2Nlc3Nvcl82NC5oCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9hc20vcHJvY2Vzc29yXzY0LmgKQEAgLTE3LDcgKzE3LDYgQEAKICNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgogI2luY2x1ZGUgPGFzbS9wYWdlLmg+CiAjaW5jbHVkZSA8YXNtL3R5cGVzLmg+Ci0jaW5jbHVkZSA8YXNtL2NhY2hlLmg+CiAjaW5jbHVkZSA8YXNtL3B0cmFjZS5oPgogI2luY2x1ZGUgPGNwdS9yZWdpc3RlcnMuaD4KIApAQCAtMzYsNDYgKzM1LDYgQEAKIAk6ICIxIiAoX19kdW1teSkpOyBcCiBwYzsgfSkKIAotLyoKLSAqIFRMQiBpbmZvcm1hdGlvbiBzdHJ1Y3R1cmUKLSAqCi0gKiBEZWZpbmVkIGZvciBib3RoIEkgYW5kIEQgdGxiLCBwZXItcHJvY2Vzc29yLgotICovCi1zdHJ1Y3QgdGxiX2luZm8gewotCXVuc2lnbmVkIGxvbmcgbG9uZyBuZXh0OwotCXVuc2lnbmVkIGxvbmcgbG9uZyBmaXJzdDsKLQl1bnNpZ25lZCBsb25nIGxvbmcgbGFzdDsKLQotCXVuc2lnbmVkIGludCBlbnRyaWVzOwotCXVuc2lnbmVkIGludCBzdGVwOwotCi0JdW5zaWduZWQgbG9uZyBmbGFnczsKLX07Ci0KLXN0cnVjdCBzaF9jcHVpbmZvIHsKLQllbnVtIGNwdV90eXBlIHR5cGU7Ci0JdW5zaWduZWQgbG9uZyBsb29wc19wZXJfamlmZnk7Ci0JdW5zaWduZWQgbG9uZyBhc2lkX2NhY2hlOwotCi0JdW5zaWduZWQgaW50IGNwdV9jbG9jaywgbWFzdGVyX2Nsb2NrLCBidXNfY2xvY2ssIG1vZHVsZV9jbG9jazsKLQotCS8qIENhY2hlIGluZm8gKi8KLQlzdHJ1Y3QgY2FjaGVfaW5mbyBpY2FjaGU7Ci0Jc3RydWN0IGNhY2hlX2luZm8gZGNhY2hlOwotCXN0cnVjdCBjYWNoZV9pbmZvIHNjYWNoZTsKLQotCS8qIFRMQiBpbmZvICovCi0Jc3RydWN0IHRsYl9pbmZvIGl0bGI7Ci0Jc3RydWN0IHRsYl9pbmZvIGR0bGI7Ci0KLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotfTsKLQotZXh0ZXJuIHN0cnVjdCBzaF9jcHVpbmZvIGNwdV9kYXRhW107Ci0jZGVmaW5lIGJvb3RfY3B1X2RhdGEgY3B1X2RhdGFbMF0KLSNkZWZpbmUgY3VycmVudF9jcHVfZGF0YSBjcHVfZGF0YVtzbXBfcHJvY2Vzc29yX2lkKCldCi0jZGVmaW5lIHJhd19jdXJyZW50X2NwdV9kYXRhIGNwdV9kYXRhW3Jhd19zbXBfcHJvY2Vzc29yX2lkKCldCi0KICNlbmRpZgogCiAvKgpAQCAtMTY5LDggKzEyOCw2IEBACiAjZGVmaW5lIElOSVRfTU1BUCBcCiB7ICZpbml0X21tLCAwLCAwLCBOVUxMLCBQQUdFX1NIQVJFRCwgVk1fUkVBRCB8IFZNX1dSSVRFIHwgVk1fRVhFQywgMSwgTlVMTCwgTlVMTCB9CiAKLWV4dGVybiAgc3RydWN0IHB0X3JlZ3MgZmFrZV9zd2FwcGVyX3JlZ3M7Ci0KICNkZWZpbmUgSU5JVF9USFJFQUQgIHsJCQkJXAogCS5zcAkJPSBzaXplb2YoaW5pdF9zdGFjaykgKwlcCiAJCQkgIChsb25nKSAmaW5pdF9zdGFjaywJXApAQCAtMjY5LDYgKzIyNiw4IEBACiAjZGVmaW5lIEtTVEtfRUlQKHRzaykgICgodHNrKS0+dGhyZWFkLnBjKQogI2RlZmluZSBLU1RLX0VTUCh0c2spICAoKHRzayktPnRocmVhZC5zcCkKIAorI2RlZmluZSB1c2VyX3N0YWNrX3BvaW50ZXIocmVncykJKChyZWdzKS0+c3ApCisKICNkZWZpbmUgY3B1X3JlbGF4KCkJYmFycmllcigpCiAKICNlbmRpZgkvKiBfX0FTU0VNQkxZX18gKi8KZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vcHRyYWNlLmggYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3B0cmFjZS5oCmluZGV4IGI4NmFlYWIuLjNhZDE4ZTkgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvaW5jbHVkZS9hc20vcHRyYWNlLmgKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9wdHJhY2UuaApAQCAtODcsMTIgKzg3LDE4IEBACiAJdW5zaWduZWQgbG9uZwltb2Q7CiB9OwogCisjZGVmaW5lIFBUUkFDRV9HRVRSRUdTCQkxMgkvKiBHZW5lcmFsIHJlZ2lzdGVycyAqLworI2RlZmluZSBQVFJBQ0VfU0VUUkVHUwkJMTMKKworI2RlZmluZSBQVFJBQ0VfR0VURlBSRUdTCTE0CS8qIEZQVSByZWdpc3RlcnMgKi8KKyNkZWZpbmUgUFRSQUNFX1NFVEZQUkVHUwkxNQorCiAjZGVmaW5lIFBUUkFDRV9HRVRGRFBJQwkJMzEJLyogZ2V0IHRoZSBFTEYgZmRwaWMgbG9hZG1hcCBhZGRyZXNzICovCiAKICNkZWZpbmUgUFRSQUNFX0dFVEZEUElDX0VYRUMJMAkvKiBbYWRkcl0gcmVxdWVzdCB0aGUgZXhlY3V0YWJsZSBsb2FkbWFwICovCiAjZGVmaW5lIFBUUkFDRV9HRVRGRFBJQ19JTlRFUlAJMQkvKiBbYWRkcl0gcmVxdWVzdCB0aGUgaW50ZXJwcmV0ZXIgbG9hZG1hcCAqLwogCi0jZGVmaW5lCVBUUkFDRV9HRVREU1BSRUdTCTU1CisjZGVmaW5lCVBUUkFDRV9HRVREU1BSRUdTCTU1CS8qIERTUCByZWdpc3RlcnMgKi8KICNkZWZpbmUJUFRSQUNFX1NFVERTUFJFR1MJNTYKICNlbmRpZgogCkBAIC0xMTcsNiArMTIzLDkgQEAKICNkZWZpbmUgdGFza19wdF9yZWdzKHRhc2spIFwKIAkoKHN0cnVjdCBwdF9yZWdzICopICh0YXNrX3N0YWNrX3BhZ2UodGFzaykgKyBUSFJFQURfU0laRSBcCiAJCSAtIHNpemVvZihzdHJ1Y3QgcHRfZHNwcmVncykgLSBzaXplb2YodW5zaWduZWQgbG9uZykpIC0gMSkKKyNkZWZpbmUgdGFza19wdF9kc3ByZWdzKHRhc2spIFwKKwkoKHN0cnVjdCBwdF9kc3ByZWdzICopICh0YXNrX3N0YWNrX3BhZ2UodGFzaykgKyBUSFJFQURfU0laRSBcCisJCSAtIHNpemVvZih1bnNpZ25lZCBsb25nKSkgLSAxKQogI2Vsc2UKICNkZWZpbmUgdGFza19wdF9yZWdzKHRhc2spIFwKIAkoKHN0cnVjdCBwdF9yZWdzICopICh0YXNrX3N0YWNrX3BhZ2UodGFzaykgKyBUSFJFQURfU0laRSBcCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3J0Yy5oIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9ydGMuaAppbmRleCAxODEzZjQyLi5mN2IwMTBkIDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3J0Yy5oCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9hc20vcnRjLmgKQEAgLTEsNiArMSw3IEBACiAjaWZuZGVmIF9BU01fUlRDX0gKICNkZWZpbmUgX0FTTV9SVENfSAogCit2b2lkIHRpbWVfaW5pdCh2b2lkKTsKIGV4dGVybiB2b2lkICgqYm9hcmRfdGltZV9pbml0KSh2b2lkKTsKIGV4dGVybiB2b2lkICgqcnRjX3NoX2dldF90aW1lKShzdHJ1Y3QgdGltZXNwZWMgKik7CiBleHRlcm4gaW50ICgqcnRjX3NoX3NldF90aW1lKShjb25zdCB0aW1lX3QpOwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9zZXR1cC5oIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9zZXR1cC5oCmluZGV4IDU1YTJiZDMuLmQ0NTBiY2YgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvaW5jbHVkZS9hc20vc2V0dXAuaAorKysgYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3NldHVwLmgKQEAgLTQsNyArNCw2IEBACiAjZGVmaW5lIENPTU1BTkRfTElORV9TSVpFIDI1NgogCiAjaWZkZWYgX19LRVJORUxfXwotCiAvKgogICogVGhpcyBpcyBzZXQgdXAgYnkgdGhlIHNldHVwLXJvdXRpbmUgYXQgYm9vdC10aW1lCiAgKi8KZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vc2hfbW9iaWxlX2xjZGMuaCBiL2FyY2gvc2gvaW5jbHVkZS9hc20vc2hfbW9iaWxlX2xjZGMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTMwMTAyZi4uMDAwMDAwMAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3NoX21vYmlsZV9sY2RjLmgKKysrIC9kZXYvbnVsbApAQCAtMSw3MiArMCwwIEBACi0jaWZuZGVmIF9fQVNNX1NIX01PQklMRV9MQ0RDX0hfXwotI2RlZmluZSBfX0FTTV9TSF9NT0JJTEVfTENEQ19IX18KLQotI2luY2x1ZGUgPGxpbnV4L2ZiLmg+Ci0KLWVudW0geyBSR0I4LCAgIC8qIDI0YnBwLCA4Ojg6OCAqLwotICAgICAgIFJHQjksICAgLyogMThicHAsIDk6OSAqLwotICAgICAgIFJHQjEyQSwgLyogMjRicHAsIDEyOjEyICovCi0gICAgICAgUkdCMTJCLCAvKiAxMmJwcCAqLwotICAgICAgIFJHQjE2LCAgLyogMTZicHAgKi8KLSAgICAgICBSR0IxOCwgIC8qIDE4YnBwICovCi0gICAgICAgUkdCMjQsICAvKiAyNGJwcCAqLwotICAgICAgIFNZUzhBLCAgLyogMjRicHAsIDg6ODo4ICovCi0gICAgICAgU1lTOEIsICAvKiAxOGJwcCwgODo4OjIgKi8KLSAgICAgICBTWVM4QywgIC8qIDE4YnBwLCAyOjg6OCAqLwotICAgICAgIFNZUzhELCAgLyogMTZicHAsIDg6OCAqLwotICAgICAgIFNZUzksICAgLyogMThicHAsIDk6OSAqLwotICAgICAgIFNZUzEyLCAgLyogMjRicHAsIDEyOjEyICovCi0gICAgICAgU1lTMTZBLCAvKiAxNmJwcCAqLwotICAgICAgIFNZUzE2QiwgLyogMThicHAsIDE2OjIgKi8KLSAgICAgICBTWVMxNkMsIC8qIDE4YnBwLCAyOjE2ICovCi0gICAgICAgU1lTMTgsICAvKiAxOGJwcCAqLwotICAgICAgIFNZUzI0IH07LyogMjRicHAgKi8KLQotZW51bSB7IExDRENfQ0hBTl9ESVNBQkxFRCA9IDAsCi0gICAgICAgTENEQ19DSEFOX01BSU5MQ0QsCi0gICAgICAgTENEQ19DSEFOX1NVQkxDRCB9OwotCi1lbnVtIHsgTENEQ19DTEtfQlVTLCBMQ0RDX0NMS19QRVJJUEhFUkFMLCBMQ0RDX0NMS19FWFRFUk5BTCB9OwotCi1zdHJ1Y3Qgc2hfbW9iaWxlX2xjZGNfc3lzX2J1c19jZmcgewotCXVuc2lnbmVkIGxvbmcgbGRtdDJyOwotCXVuc2lnbmVkIGxvbmcgbGRtdDNyOwotfTsKLQotc3RydWN0IHNoX21vYmlsZV9sY2RjX3N5c19idXNfb3BzIHsKLQl2b2lkICgqd3JpdGVfaW5kZXgpKHZvaWQgKmhhbmRsZSwgdW5zaWduZWQgbG9uZyBkYXRhKTsKLQl2b2lkICgqd3JpdGVfZGF0YSkodm9pZCAqaGFuZGxlLCB1bnNpZ25lZCBsb25nIGRhdGEpOwotCXVuc2lnbmVkIGxvbmcgKCpyZWFkX2RhdGEpKHZvaWQgKmhhbmRsZSk7Ci19OwotCi1zdHJ1Y3Qgc2hfbW9iaWxlX2xjZGNfYm9hcmRfY2ZnIHsKLQl2b2lkICpib2FyZF9kYXRhOwotCWludCAoKnNldHVwX3N5cykodm9pZCAqYm9hcmRfZGF0YSwgdm9pZCAqc3lzX29wc19oYW5kbGUsCi0JCQkgc3RydWN0IHNoX21vYmlsZV9sY2RjX3N5c19idXNfb3BzICpzeXNfb3BzKTsKLQl2b2lkICgqZGlzcGxheV9vbikodm9pZCAqYm9hcmRfZGF0YSk7Ci0Jdm9pZCAoKmRpc3BsYXlfb2ZmKSh2b2lkICpib2FyZF9kYXRhKTsKLX07Ci0KLXN0cnVjdCBzaF9tb2JpbGVfbGNkY19sY2Rfc2l6ZV9jZmcgeyAvKiB3aWR0aCBhbmQgaGVpZ2h0IG9mIHBhbmVsIGluIG1tICovCi0JdW5zaWduZWQgbG9uZyB3aWR0aDsKLQl1bnNpZ25lZCBsb25nIGhlaWdodDsKLX07Ci0KLXN0cnVjdCBzaF9tb2JpbGVfbGNkY19jaGFuX2NmZyB7Ci0JaW50IGNoYW47Ci0JaW50IGJwcDsKLQlpbnQgaW50ZXJmYWNlX3R5cGU7IC8qIHNlbGVjdHMgUkdCbiBvciBTWVNuIEkvRiwgc2VlIGFib3ZlICovCi0JaW50IGNsb2NrX2RpdmlkZXI7Ci0Jc3RydWN0IGZiX3ZpZGVvbW9kZSBsY2RfY2ZnOwotCXN0cnVjdCBzaF9tb2JpbGVfbGNkY19sY2Rfc2l6ZV9jZmcgbGNkX3NpemVfY2ZnOwotCXN0cnVjdCBzaF9tb2JpbGVfbGNkY19ib2FyZF9jZmcgYm9hcmRfY2ZnOwotCXN0cnVjdCBzaF9tb2JpbGVfbGNkY19zeXNfYnVzX2NmZyBzeXNfYnVzX2NmZzsgLyogb25seSBmb3IgU1lTbiBJL0YgKi8KLX07Ci0KLXN0cnVjdCBzaF9tb2JpbGVfbGNkY19pbmZvIHsKLQl1bnNpZ25lZCBsb25nIGxkZGNrcjsKLQlpbnQgY2xvY2tfc291cmNlOwotCXN0cnVjdCBzaF9tb2JpbGVfbGNkY19jaGFuX2NmZyBjaFsyXTsKLX07Ci0KLSNlbmRpZiAvKiBfX0FTTV9TSF9NT0JJTEVfTENEQ19IX18gKi8KZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vc2l6ZXMuaCBiL2FyY2gvc2gvaW5jbHVkZS9hc20vc2l6ZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYTFmYjk3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9zaXplcy5oCkBAIC0wLDAgKzEsNjEgQEAKKy8qCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKi8KKy8qIERPIE5PVCBFRElUISEgLSB0aGlzIGZpbGUgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQKKyAqICAgICAgICAgICAgICAgICBmcm9tIC5zIGZpbGUgYnkgYXdrIC1mIHMyaC5hd2sKKyAqLworLyogIFNpemUgZGVmaW5pdGlvbnMKKyAqICBDb3B5cmlnaHQgKEMpIEFSTSBMaW1pdGVkIDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKi8KKworI2lmbmRlZiBfX3NpemVzX2gKKyNkZWZpbmUgX19zaXplc19oICAgICAgICAgICAgICAgICAgICAgICAxCisKKy8qIGhhbmR5IHNpemVzICovCisjZGVmaW5lIFNaXzE2CQkJCTB4MDAwMDAwMTAKKyNkZWZpbmUgU1pfMzIJCQkJMHgwMDAwMDAyMAorI2RlZmluZSBTWl82NAkJCQkweDAwMDAwMDQwCisjZGVmaW5lIFNaXzEyOAkJCQkweDAwMDAwMDgwCisjZGVmaW5lIFNaXzI1NgkJCQkweDAwMDAwMTAwCisjZGVmaW5lIFNaXzUxMgkJCQkweDAwMDAwMjAwCisKKyNkZWZpbmUgU1pfMUsgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNDAwCisjZGVmaW5lIFNaXzRLICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMTAwMAorI2RlZmluZSBTWl84SyAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDIwMDAKKyNkZWZpbmUgU1pfMTZLICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA0MDAwCisjZGVmaW5lIFNaXzMySwkJCQkweDAwMDA4MDAwCisjZGVmaW5lIFNaXzY0SyAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMDAwMAorI2RlZmluZSBTWl8xMjhLICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMjAwMDAKKyNkZWZpbmUgU1pfMjU2SyAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDQwMDAwCisjZGVmaW5lIFNaXzUxMksgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA4MDAwMAorCisjZGVmaW5lIFNaXzFNICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDEwMDAwMAorI2RlZmluZSBTWl8yTSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAyMDAwMDAKKyNkZWZpbmUgU1pfNE0gICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwNDAwMDAwCisjZGVmaW5lIFNaXzhNICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDgwMDAwMAorI2RlZmluZSBTWl8xNk0gICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMDAwMDAKKyNkZWZpbmUgU1pfMjZNCQkJCTB4MDFhMDAwMDAKKyNkZWZpbmUgU1pfMzJNICAgICAgICAgICAgICAgICAgICAgICAgICAweDAyMDAwMDAwCisjZGVmaW5lIFNaXzY0TSAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNDAwMDAwMAorI2RlZmluZSBTWl8xMjhNICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDgwMDAwMDAKKyNkZWZpbmUgU1pfMjU2TSAgICAgICAgICAgICAgICAgICAgICAgICAweDEwMDAwMDAwCisjZGVmaW5lIFNaXzUxMk0gICAgICAgICAgICAgICAgICAgICAgICAgMHgyMDAwMDAwMAorCisjZGVmaW5lIFNaXzFHICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0MDAwMDAwMAorI2RlZmluZSBTWl8yRyAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODAwMDAwMDAKKworI2VuZGlmCisKKy8qICAgICAgICAgRU5EICovCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3NtcC5oIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9zbXAuaAppbmRleCA1OTMzNDNjLi44NWI2NjBjIDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3NtcC5oCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9hc20vc21wLmgKQEAgLTIxLDI1ICsyMSwyOSBAQAogZXh0ZXJuIGludCBfX2NwdV9sb2dpY2FsX21hcFtOUl9DUFVTXTsKICNkZWZpbmUgY3B1X2xvZ2ljYWxfbWFwKGNwdSkgIF9fY3B1X2xvZ2ljYWxfbWFwW2NwdV0KIAotLyogSSd2ZSBubyBpZGVhIHdoYXQgdGhlIHJlYWwgbWVhbmluZyBvZiB0aGlzIGlzICovCi0jZGVmaW5lIFBST0NfQ0hBTkdFX1BFTkFMVFkJMjAKK2VudW0geworCVNNUF9NU0dfRlVOQ1RJT04sCisJU01QX01TR19SRVNDSEVEVUxFLAorCVNNUF9NU0dfRlVOQ1RJT05fU0lOR0xFLAorCVNNUF9NU0dfVElNRVIsCiAKLSNkZWZpbmUgTk9fUFJPQ19JRAkoLTEpCisJU01QX01TR19OUiwJLyogbXVzdCBiZSBsYXN0ICovCit9OwogCi0jZGVmaW5lIFNNUF9NU0dfRlVOQ1RJT04JMAotI2RlZmluZSBTTVBfTVNHX1JFU0NIRURVTEUJMQotI2RlZmluZSBTTVBfTVNHX0ZVTkNUSU9OX1NJTkdMRQkyCi0jZGVmaW5lIFNNUF9NU0dfTlIJCTMKK3ZvaWQgc21wX21lc3NhZ2VfcmVjdih1bnNpZ25lZCBpbnQgbXNnKTsKK3ZvaWQgc21wX3RpbWVyX2Jyb2FkY2FzdChjcHVtYXNrX3QgbWFzayk7CisKK3ZvaWQgbG9jYWxfdGltZXJfaW50ZXJydXB0KHZvaWQpOwordm9pZCBsb2NhbF90aW1lcl9zZXR1cCh1bnNpZ25lZCBpbnQgY3B1KTsKIAogdm9pZCBwbGF0X3NtcF9zZXR1cCh2b2lkKTsKIHZvaWQgcGxhdF9wcmVwYXJlX2NwdXModW5zaWduZWQgaW50IG1heF9jcHVzKTsKIGludCBwbGF0X3NtcF9wcm9jZXNzb3JfaWQodm9pZCk7CiB2b2lkIHBsYXRfc3RhcnRfY3B1KHVuc2lnbmVkIGludCBjcHUsIHVuc2lnbmVkIGxvbmcgZW50cnlfcG9pbnQpOwogdm9pZCBwbGF0X3NlbmRfaXBpKHVuc2lnbmVkIGludCBjcHUsIHVuc2lnbmVkIGludCBtZXNzYWdlKTsKLWludCBwbGF0X3JlZ2lzdGVyX2lwaV9oYW5kbGVyKHVuc2lnbmVkIGludCBtZXNzYWdlLAotCQkJICAgICAgdm9pZCAoKmhhbmRsZXIpKHZvaWQgKiksIHZvaWQgKmFyZyk7Ci1leHRlcm4gdm9pZCBhcmNoX3NlbmRfY2FsbF9mdW5jdGlvbl9zaW5nbGVfaXBpKGludCBjcHUpOwotZXh0ZXJuIHZvaWQgYXJjaF9zZW5kX2NhbGxfZnVuY3Rpb25faXBpKGNwdW1hc2tfdCBtYXNrKTsKKwordm9pZCBhcmNoX3NlbmRfY2FsbF9mdW5jdGlvbl9zaW5nbGVfaXBpKGludCBjcHUpOwordm9pZCBhcmNoX3NlbmRfY2FsbF9mdW5jdGlvbl9pcGkoY3B1bWFza190IG1hc2spOwogCiAjZWxzZQogCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3N5c2NhbGwuaCBiL2FyY2gvc2gvaW5jbHVkZS9hc20vc3lzY2FsbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZhMzgxNDIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3N5c2NhbGwuaApAQCAtMCwwICsxLDEwIEBACisjaWZuZGVmIF9fQVNNX1NIX1NZU0NBTExfSAorI2RlZmluZSBfX0FTTV9TSF9TWVNDQUxMX0gKKworI2lmZGVmIENPTkZJR19TVVBFUkgzMgorIyBpbmNsdWRlICJzeXNjYWxsXzMyLmgiCisjZWxzZQorIyBpbmNsdWRlICJzeXNjYWxsXzY0LmgiCisjZW5kaWYKKworI2VuZGlmIC8qIF9fQVNNX1NIX1NZU0NBTExfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9zeXNjYWxsXzMyLmggYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3N5c2NhbGxfMzIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NDc3M2YyCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9zeXNjYWxsXzMyLmgKQEAgLTAsMCArMSwxMTAgQEAKKyNpZm5kZWYgX19BU01fU0hfU1lTQ0FMTF8zMl9ICisjZGVmaW5lIF9fQVNNX1NIX1NZU0NBTExfMzJfSAorCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxhc20vcHRyYWNlLmg+CisKKy8qIFRoZSBzeXN0ZW0gY2FsbCBudW1iZXIgaXMgZ2l2ZW4gYnkgdGhlIHVzZXIgaW4gJWcxICovCitzdGF0aWMgaW5saW5lIGxvbmcgc3lzY2FsbF9nZXRfbnIoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLAorCQkJCSAgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJcmV0dXJuIChyZWdzLT50cmEgPj0gMCkgPyByZWdzLT5yZWdzWzNdIDogLTFMOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc3lzY2FsbF9yb2xsYmFjayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssCisJCQkJICAgIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCS8qCisJICogWFhYOiBUaGlzIG5lZWRzIHNvbWUgdGhvdWdodC4gT24gU0ggd2UgZG9uJ3QKKwkgKiBzYXZlIGF3YXkgdGhlIG9yaWdpbmFsIHIwIHZhbHVlIGFueXdoZXJlLgorCSAqLworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgc3lzY2FsbF9oYXNfZXJyb3Ioc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJcmV0dXJuIChyZWdzLT5zciAmIDB4MSkgPyB0cnVlIDogZmFsc2U7Cit9CitzdGF0aWMgaW5saW5lIHZvaWQgc3lzY2FsbF9zZXRfZXJyb3Ioc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJcmVncy0+c3IgfD0gMHgxOworfQorc3RhdGljIGlubGluZSB2b2lkIHN5c2NhbGxfY2xlYXJfZXJyb3Ioc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJcmVncy0+c3IgJj0gfjB4MTsKK30KKworc3RhdGljIGlubGluZSBsb25nIHN5c2NhbGxfZ2V0X2Vycm9yKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywKKwkJCQkgICAgIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXJldHVybiBzeXNjYWxsX2hhc19lcnJvcihyZWdzKSA/IHJlZ3MtPnJlZ3NbMF0gOiAwOworfQorCitzdGF0aWMgaW5saW5lIGxvbmcgc3lzY2FsbF9nZXRfcmV0dXJuX3ZhbHVlKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywKKwkJCQkJICAgIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXJldHVybiByZWdzLT5yZWdzWzBdOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc3lzY2FsbF9zZXRfcmV0dXJuX3ZhbHVlKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywKKwkJCQkJICAgIHN0cnVjdCBwdF9yZWdzICpyZWdzLAorCQkJCQkgICAgaW50IGVycm9yLCBsb25nIHZhbCkKK3sKKwlpZiAoZXJyb3IpIHsKKwkJc3lzY2FsbF9zZXRfZXJyb3IocmVncyk7CisJCXJlZ3MtPnJlZ3NbMF0gPSAtZXJyb3I7CisJfSBlbHNlIHsKKwkJc3lzY2FsbF9jbGVhcl9lcnJvcihyZWdzKTsKKwkJcmVncy0+cmVnc1swXSA9IHZhbDsKKwl9Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzeXNjYWxsX2dldF9hcmd1bWVudHMoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLAorCQkJCQkgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsCisJCQkJCSB1bnNpZ25lZCBpbnQgaSwgdW5zaWduZWQgaW50IG4sCisJCQkJCSB1bnNpZ25lZCBsb25nICphcmdzKQoreworCS8qCisJICogRG8gdGhpcyBzaW1wbHkgZm9yIG5vdy4gSWYgd2UgbmVlZCB0byBzdGFydCBzdXBwb3J0aW5nCisJICogZmV0Y2hpbmcgYXJndW1lbnRzIGZyb20gYXJiaXRyYXJ5IGluZGljZXMsIHRoaXMgd2lsbCBuZWVkIHNvbWUKKwkgKiBleHRyYSBsb2dpYy4gUHJlc2VudGx5IHRoZXJlIGFyZSBubyBpbi10cmVlIHVzZXJzIHRoYXQgZGVwZW5kCisJICogb24gdGhpcyBiZWhhdmlvdXIuCisJICovCisJQlVHX09OKGkpOworCisJLyogQXJndW1lbnQgcGF0dGVybiBpczogUjQsIFI1LCBSNiwgUjcsIFIwLCBSMSAqLworCXN3aXRjaCAobikgeworCWNhc2UgNjogYXJnc1s1XSA9IHJlZ3MtPnJlZ3NbMV07CisJY2FzZSA1OiBhcmdzWzRdID0gcmVncy0+cmVnc1swXTsKKwljYXNlIDQ6IGFyZ3NbM10gPSByZWdzLT5yZWdzWzddOworCWNhc2UgMzogYXJnc1syXSA9IHJlZ3MtPnJlZ3NbNl07CisJY2FzZSAyOiBhcmdzWzFdID0gcmVncy0+cmVnc1s1XTsKKwljYXNlIDE6CWFyZ3NbMF0gPSByZWdzLT5yZWdzWzRdOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlCVUcoKTsKKwl9Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzeXNjYWxsX3NldF9hcmd1bWVudHMoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLAorCQkJCQkgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsCisJCQkJCSB1bnNpZ25lZCBpbnQgaSwgdW5zaWduZWQgaW50IG4sCisJCQkJCSBjb25zdCB1bnNpZ25lZCBsb25nICphcmdzKQoreworCS8qIFNhbWUgbm90ZSBhcyBhYm92ZSBhcHBsaWVzICovCisJQlVHX09OKGkpOworCisJc3dpdGNoIChuKSB7CisJY2FzZSA2OiByZWdzLT5yZWdzWzFdID0gYXJnc1s1XTsKKwljYXNlIDU6IHJlZ3MtPnJlZ3NbMF0gPSBhcmdzWzRdOworCWNhc2UgNDogcmVncy0+cmVnc1s3XSA9IGFyZ3NbM107CisJY2FzZSAzOiByZWdzLT5yZWdzWzZdID0gYXJnc1syXTsKKwljYXNlIDI6IHJlZ3MtPnJlZ3NbNV0gPSBhcmdzWzFdOworCWNhc2UgMTogcmVncy0+cmVnc1s0XSA9IGFyZ3NbMF07CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCUJVRygpOworCX0KK30KKworI2VuZGlmIC8qIF9fQVNNX1NIX1NZU0NBTExfMzJfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9zeXNjYWxsXzY0LmggYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3N5c2NhbGxfNjQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iY2FhYThjCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9zeXNjYWxsXzY0LmgKQEAgLTAsMCArMSw2IEBACisjaWZuZGVmIF9fQVNNX1NIX1NZU0NBTExfNjRfSAorI2RlZmluZSBfX0FTTV9TSF9TWVNDQUxMXzY0X0gKKworI2luY2x1ZGUgPGFzbS1nZW5lcmljL3N5c2NhbGwuaD4KKworI2VuZGlmIC8qIF9fQVNNX1NIX1NZU0NBTExfNjRfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9zeXNjYWxscy5oIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9zeXNjYWxscy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMxZTJiOGQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3N5c2NhbGxzLmgKQEAgLTAsMCArMSwyNSBAQAorI2lmbmRlZiBfX0FTTV9TSF9TWVNDQUxMU19ICisjZGVmaW5lIF9fQVNNX1NIX1NZU0NBTExTX0gKKworI2lmZGVmIF9fS0VSTkVMX18KKworc3RydWN0IG9sZF91dHNuYW1lOworCithc21saW5rYWdlIGludCBvbGRfbW1hcCh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgbGVuLAorCQkJdW5zaWduZWQgbG9uZyBwcm90LCB1bnNpZ25lZCBsb25nIGZsYWdzLAorCQkJaW50IGZkLCB1bnNpZ25lZCBsb25nIG9mZik7Cithc21saW5rYWdlIGxvbmcgc3lzX21tYXAyKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBsZW4sCisJCQkgIHVuc2lnbmVkIGxvbmcgcHJvdCwgdW5zaWduZWQgbG9uZyBmbGFncywKKwkJCSAgdW5zaWduZWQgbG9uZyBmZCwgdW5zaWduZWQgbG9uZyBwZ29mZik7Cithc21saW5rYWdlIGludCBzeXNfaXBjKHVpbnQgY2FsbCwgaW50IGZpcnN0LCBpbnQgc2Vjb25kLAorCQkgICAgICAgaW50IHRoaXJkLCB2b2lkIF9fdXNlciAqcHRyLCBsb25nIGZpZnRoKTsKK2FzbWxpbmthZ2UgaW50IHN5c191bmFtZShzdHJ1Y3Qgb2xkX3V0c25hbWUgX191c2VyICpuYW1lKTsKKworI2lmZGVmIENPTkZJR19TVVBFUkgzMgorIyBpbmNsdWRlICJzeXNjYWxsc18zMi5oIgorI2Vsc2UKKyMgaW5jbHVkZSAic3lzY2FsbHNfNjQuaCIKKyNlbmRpZgorCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworI2VuZGlmIC8qIF9fQVNNX1NIX1NZU0NBTExTX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vc3lzY2FsbHNfMzIuaCBiL2FyY2gvc2gvaW5jbHVkZS9hc20vc3lzY2FsbHNfMzIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMDRjNWU2Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9zeXNjYWxsc18zMi5oCkBAIC0wLDAgKzEsNTYgQEAKKyNpZm5kZWYgX19BU01fU0hfU1lTQ0FMTFNfMzJfSAorI2RlZmluZSBfX0FTTV9TSF9TWVNDQUxMU18zMl9ICisKKyNpZmRlZiBfX0tFUk5FTF9fCisKKyNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgorI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCitzdHJ1Y3QgcHRfcmVnczsKKworYXNtbGlua2FnZSBpbnQgc3lzX2ZvcmsodW5zaWduZWQgbG9uZyByNCwgdW5zaWduZWQgbG9uZyByNSwKKwkJCXVuc2lnbmVkIGxvbmcgcjYsIHVuc2lnbmVkIGxvbmcgcjcsCisJCQlzdHJ1Y3QgcHRfcmVncyBfX3JlZ3MpOworYXNtbGlua2FnZSBpbnQgc3lzX2Nsb25lKHVuc2lnbmVkIGxvbmcgY2xvbmVfZmxhZ3MsIHVuc2lnbmVkIGxvbmcgbmV3c3AsCisJCQkgdW5zaWduZWQgbG9uZyBwYXJlbnRfdGlkcHRyLAorCQkJIHVuc2lnbmVkIGxvbmcgY2hpbGRfdGlkcHRyLAorCQkJIHN0cnVjdCBwdF9yZWdzIF9fcmVncyk7Cithc21saW5rYWdlIGludCBzeXNfdmZvcmsodW5zaWduZWQgbG9uZyByNCwgdW5zaWduZWQgbG9uZyByNSwKKwkJCSB1bnNpZ25lZCBsb25nIHI2LCB1bnNpZ25lZCBsb25nIHI3LAorCQkJIHN0cnVjdCBwdF9yZWdzIF9fcmVncyk7Cithc21saW5rYWdlIGludCBzeXNfZXhlY3ZlKGNoYXIgX191c2VyICp1ZmlsZW5hbWUsIGNoYXIgX191c2VyICogX191c2VyICp1YXJndiwKKwkJCSAgY2hhciBfX3VzZXIgKiBfX3VzZXIgKnVlbnZwLCB1bnNpZ25lZCBsb25nIHI3LAorCQkJICBzdHJ1Y3QgcHRfcmVncyBfX3JlZ3MpOworYXNtbGlua2FnZSBpbnQgc3lzX3NpZ3N1c3BlbmQob2xkX3NpZ3NldF90IG1hc2ssIHVuc2lnbmVkIGxvbmcgcjUsCisJCQkgICAgICB1bnNpZ25lZCBsb25nIHI2LCB1bnNpZ25lZCBsb25nIHI3LAorCQkJICAgICAgc3RydWN0IHB0X3JlZ3MgX19yZWdzKTsKK2FzbWxpbmthZ2UgaW50IHN5c19zaWdhY3Rpb24oaW50IHNpZywgY29uc3Qgc3RydWN0IG9sZF9zaWdhY3Rpb24gX191c2VyICphY3QsCisJCQkgICAgIHN0cnVjdCBvbGRfc2lnYWN0aW9uIF9fdXNlciAqb2FjdCk7Cithc21saW5rYWdlIGludCBzeXNfc2lnYWx0c3RhY2soY29uc3Qgc3RhY2tfdCBfX3VzZXIgKnVzcywgc3RhY2tfdCBfX3VzZXIgKnVvc3MsCisJCQkgICAgICAgdW5zaWduZWQgbG9uZyByNiwgdW5zaWduZWQgbG9uZyByNywKKwkJCSAgICAgICBzdHJ1Y3QgcHRfcmVncyBfX3JlZ3MpOworYXNtbGlua2FnZSBpbnQgc3lzX3NpZ3JldHVybih1bnNpZ25lZCBsb25nIHI0LCB1bnNpZ25lZCBsb25nIHI1LAorCQkJICAgICB1bnNpZ25lZCBsb25nIHI2LCB1bnNpZ25lZCBsb25nIHI3LAorCQkJICAgICBzdHJ1Y3QgcHRfcmVncyBfX3JlZ3MpOworYXNtbGlua2FnZSBpbnQgc3lzX3J0X3NpZ3JldHVybih1bnNpZ25lZCBsb25nIHI0LCB1bnNpZ25lZCBsb25nIHI1LAorCQkJCXVuc2lnbmVkIGxvbmcgcjYsIHVuc2lnbmVkIGxvbmcgcjcsCisJCQkJc3RydWN0IHB0X3JlZ3MgX19yZWdzKTsKK2FzbWxpbmthZ2UgaW50IHN5c19waXBlKHVuc2lnbmVkIGxvbmcgcjQsIHVuc2lnbmVkIGxvbmcgcjUsCisJCQl1bnNpZ25lZCBsb25nIHI2LCB1bnNpZ25lZCBsb25nIHI3LAorCQkJc3RydWN0IHB0X3JlZ3MgX19yZWdzKTsKK2FzbWxpbmthZ2Ugc3NpemVfdCBzeXNfcHJlYWRfd3JhcHBlcih1bnNpZ25lZCBpbnQgZmQsIGNoYXIgX191c2VyICpidWYsCisJCQkJICAgICBzaXplX3QgY291bnQsIGxvbmcgZHVtbXksIGxvZmZfdCBwb3MpOworYXNtbGlua2FnZSBzc2l6ZV90IHN5c19wd3JpdGVfd3JhcHBlcih1bnNpZ25lZCBpbnQgZmQsIGNvbnN0IGNoYXIgX191c2VyICpidWYsCisJCQkJICAgICAgc2l6ZV90IGNvdW50LCBsb25nIGR1bW15LCBsb2ZmX3QgcG9zKTsKK2FzbWxpbmthZ2UgaW50IHN5c19mYWR2aXNlNjRfNjRfd3JhcHBlcihpbnQgZmQsIHUzMiBvZmZzZXQwLCB1MzIgb2Zmc2V0MSwKKwkJCQkJdTMyIGxlbjAsIHUzMiBsZW4xLCBpbnQgYWR2aWNlKTsKKworLyogTWlzYyBzeXNjYWxsIHJlbGF0ZWQgYml0cyAqLworYXNtbGlua2FnZSBsb25nIGRvX3N5c2NhbGxfdHJhY2VfZW50ZXIoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOworYXNtbGlua2FnZSB2b2lkIGRvX3N5c2NhbGxfdHJhY2VfbGVhdmUoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOworYXNtbGlua2FnZSB2b2lkIGRvX25vdGlmeV9yZXN1bWUoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHVuc2lnbmVkIGludCBzYXZlX3IwLAorCQkJCSB1bnNpZ25lZCBsb25nIHRocmVhZF9pbmZvX2ZsYWdzKTsKKworI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KKyNlbmRpZiAvKiBfX0FTTV9TSF9TWVNDQUxMU18zMl9IICovCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3N5c2NhbGxzXzY0LmggYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3N5c2NhbGxzXzY0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzUxZmQ4OAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9hc20vc3lzY2FsbHNfNjQuaApAQCAtMCwwICsxLDM0IEBACisjaWZuZGVmIF9fQVNNX1NIX1NZU0NBTExTXzY0X0gKKyNkZWZpbmUgX19BU01fU0hfU1lTQ0FMTFNfNjRfSAorCisjaWZkZWYgX19LRVJORUxfXworCisjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworc3RydWN0IHB0X3JlZ3M7CisKK2FzbWxpbmthZ2UgaW50IHN5c19mb3JrKHVuc2lnbmVkIGxvbmcgcjIsIHVuc2lnbmVkIGxvbmcgcjMsCisJCQl1bnNpZ25lZCBsb25nIHI0LCB1bnNpZ25lZCBsb25nIHI1LAorCQkJdW5zaWduZWQgbG9uZyByNiwgdW5zaWduZWQgbG9uZyByNywKKwkJCXN0cnVjdCBwdF9yZWdzICpwcmVncyk7Cithc21saW5rYWdlIGludCBzeXNfY2xvbmUodW5zaWduZWQgbG9uZyBjbG9uZV9mbGFncywgdW5zaWduZWQgbG9uZyBuZXdzcCwKKwkJCSB1bnNpZ25lZCBsb25nIHI0LCB1bnNpZ25lZCBsb25nIHI1LAorCQkJIHVuc2lnbmVkIGxvbmcgcjYsIHVuc2lnbmVkIGxvbmcgcjcsCisJCQkgc3RydWN0IHB0X3JlZ3MgKnByZWdzKTsKK2FzbWxpbmthZ2UgaW50IHN5c192Zm9yayh1bnNpZ25lZCBsb25nIHIyLCB1bnNpZ25lZCBsb25nIHIzLAorCQkJIHVuc2lnbmVkIGxvbmcgcjQsIHVuc2lnbmVkIGxvbmcgcjUsCisJCQkgdW5zaWduZWQgbG9uZyByNiwgdW5zaWduZWQgbG9uZyByNywKKwkJCSBzdHJ1Y3QgcHRfcmVncyAqcHJlZ3MpOworYXNtbGlua2FnZSBpbnQgc3lzX2V4ZWN2ZShjaGFyICp1ZmlsZW5hbWUsIGNoYXIgKip1YXJndiwKKwkJCSAgY2hhciAqKnVlbnZwLCB1bnNpZ25lZCBsb25nIHI1LAorCQkJICB1bnNpZ25lZCBsb25nIHI2LCB1bnNpZ25lZCBsb25nIHI3LAorCQkJICBzdHJ1Y3QgcHRfcmVncyAqcHJlZ3MpOworCisvKiBNaXNjIHN5c2NhbGwgcmVsYXRlZCBiaXRzICovCithc21saW5rYWdlIGxvbmcgbG9uZyBkb19zeXNjYWxsX3RyYWNlX2VudGVyKHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKK2FzbWxpbmthZ2Ugdm9pZCBkb19zeXNjYWxsX3RyYWNlX2xlYXZlKHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKKworI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KKyNlbmRpZiAvKiBfX0FTTV9TSF9TWVNDQUxMU182NF9IICovCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3N5c3RlbS5oIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9zeXN0ZW0uaAppbmRleCAwNTZkNjhjLi42MTYwZmU0IDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3N5c3RlbS5oCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9hc20vc3lzdGVtLmgKQEAgLTcwLDYgKzcwLDggQEAKIAogI2lmZGVmIENPTkZJR19HVVNBX1JCCiAjaW5jbHVkZSA8YXNtL2NtcHhjaGctZ3JiLmg+CisjZWxpZiBkZWZpbmVkKENPTkZJR19DUFVfU0g0QSkKKyNpbmNsdWRlIDxhc20vY21weGNoZy1sbHNjLmg+CiAjZWxzZQogI2luY2x1ZGUgPGFzbS9jbXB4Y2hnLWlycS5oPgogI2VuZGlmCkBAIC0xMjUsNiArMTI3LDggQEAKICAgfSkKIAogZXh0ZXJuIHZvaWQgZGllKGNvbnN0IGNoYXIgKnN0ciwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIGxvbmcgZXJyKSBfX2F0dHJpYnV0ZV9fICgobm9yZXR1cm4pKTsKK3ZvaWQgZnJlZV9pbml0bWVtKHZvaWQpOwordm9pZCBmcmVlX2luaXRyZF9tZW0odW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpOwogCiBleHRlcm4gdm9pZCAqc2V0X2V4Y2VwdGlvbl90YWJsZV92ZWModW5zaWduZWQgaW50IHZlYywgdm9pZCAqaGFuZGxlcik7CiAKQEAgLTE3Nyw4ICsxODEsOCBAQAogI2RlZmluZSBhcmNoX2FsaWduX3N0YWNrKHgpICh4KQogCiBzdHJ1Y3QgbWVtX2FjY2VzcyB7Ci0JdW5zaWduZWQgbG9uZyAoKmZyb20pKHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjLCB1bnNpZ25lZCBsb25nIGNudCk7Ci0JdW5zaWduZWQgbG9uZyAoKnRvKSh2b2lkICpkc3QsIGNvbnN0IHZvaWQgKnNyYywgdW5zaWduZWQgbG9uZyBjbnQpOworCXVuc2lnbmVkIGxvbmcgKCpmcm9tKSh2b2lkICpkc3QsIGNvbnN0IHZvaWQgX191c2VyICpzcmMsIHVuc2lnbmVkIGxvbmcgY250KTsKKwl1bnNpZ25lZCBsb25nICgqdG8pKHZvaWQgX191c2VyICpkc3QsIGNvbnN0IHZvaWQgKnNyYywgdW5zaWduZWQgbG9uZyBjbnQpOwogfTsKIAogI2lmZGVmIENPTkZJR19TVVBFUkgzMgpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9zeXN0ZW1fMzIuaCBiL2FyY2gvc2gvaW5jbHVkZS9hc20vc3lzdGVtXzMyLmgKaW5kZXggZjExYmNmMC4uYTcyNmQ1ZCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9zeXN0ZW1fMzIuaAorKysgYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3N5c3RlbV8zMi5oCkBAIC01OCw3ICs1OCw4IEBACiAJbGFzdCA9IF9fbGFzdDsJCQkJCQkJXAogfSB3aGlsZSAoMCkKIAotI2RlZmluZSBfX3VzZXNfanVtcF90b191bmNhY2hlZCBfX2F0dHJpYnV0ZV9fICgoX19zZWN0aW9uX18gKCIudW5jYWNoZWQudGV4dCIpKSkKKyNkZWZpbmUgX191c2VzX2p1bXBfdG9fdW5jYWNoZWQgXAorCW5vaW5saW5lIF9fYXR0cmlidXRlX18gKChfX3NlY3Rpb25fXyAoIi51bmNhY2hlZC50ZXh0IikpKQogCiAvKgogICogSnVtcCB0byB1bmNhY2hlZCBhcmVhLgpAQCAtOTYsNyArOTcsNDggQEAKIAkJOiAiPSZyIiAoX19kdW1teSkpOwkJCVwKIH0gd2hpbGUgKDApCiAKKyNpZmRlZiBDT05GSUdfQ1BVX0hBU19TUl9SQgorI2RlZmluZSBsb29rdXBfZXhjZXB0aW9uX3ZlY3RvcigpCVwKKyh7CQkJCQlcCisJdW5zaWduZWQgbG9uZyBfdmVjOwkJXAorCQkJCQlcCisJX19hc21fXyBfX3ZvbGF0aWxlX18gKAkJXAorCQkic3RjIHIyX2JhbmssICUwXG5cdCIJXAorCQk6ICI9ciIgKF92ZWMpCQlcCisJKTsJCQkJXAorCQkJCQlcCisJX3ZlYzsJCQkJXAorfSkKKyNlbHNlCisjZGVmaW5lIGxvb2t1cF9leGNlcHRpb25fdmVjdG9yKCkJXAorKHsJCQkJCVwKKwl1bnNpZ25lZCBsb25nIF92ZWM7CQlcCisJX19hc21fXyBfX3ZvbGF0aWxlX18gKAkJXAorCQkibW92IHI0LCAlMFxuXHQiCVwKKwkJOiAiPXIiIChfdmVjKQkJXAorCSk7CQkJCVwKKwkJCQkJXAorCV92ZWM7CQkJCVwKK30pCisjZW5kaWYKKwogaW50IGhhbmRsZV91bmFsaWduZWRfYWNjZXNzKG9wY29kZV90IGluc3RydWN0aW9uLCBzdHJ1Y3QgcHRfcmVncyAqcmVncywKIAkJCSAgICBzdHJ1Y3QgbWVtX2FjY2VzcyAqbWEpOwogCithc21saW5rYWdlIHZvaWQgZG9fYWRkcmVzc19lcnJvcihzdHJ1Y3QgcHRfcmVncyAqcmVncywKKwkJCQkgdW5zaWduZWQgbG9uZyB3cml0ZWFjY2VzcywKKwkJCQkgdW5zaWduZWQgbG9uZyBhZGRyZXNzKTsKK2FzbWxpbmthZ2Ugdm9pZCBkb19kaXZpZGVfZXJyb3IodW5zaWduZWQgbG9uZyByNCwgdW5zaWduZWQgbG9uZyByNSwKKwkJCQl1bnNpZ25lZCBsb25nIHI2LCB1bnNpZ25lZCBsb25nIHI3LAorCQkJCXN0cnVjdCBwdF9yZWdzIF9fcmVncyk7Cithc21saW5rYWdlIHZvaWQgZG9fcmVzZXJ2ZWRfaW5zdCh1bnNpZ25lZCBsb25nIHI0LCB1bnNpZ25lZCBsb25nIHI1LAorCQkJCXVuc2lnbmVkIGxvbmcgcjYsIHVuc2lnbmVkIGxvbmcgcjcsCisJCQkJc3RydWN0IHB0X3JlZ3MgX19yZWdzKTsKK2FzbWxpbmthZ2Ugdm9pZCBkb19pbGxlZ2FsX3Nsb3RfaW5zdCh1bnNpZ25lZCBsb25nIHI0LCB1bnNpZ25lZCBsb25nIHI1LAorCQkJCXVuc2lnbmVkIGxvbmcgcjYsIHVuc2lnbmVkIGxvbmcgcjcsCisJCQkJc3RydWN0IHB0X3JlZ3MgX19yZWdzKTsKK2FzbWxpbmthZ2Ugdm9pZCBkb19leGNlcHRpb25fZXJyb3IodW5zaWduZWQgbG9uZyByNCwgdW5zaWduZWQgbG9uZyByNSwKKwkJCQkgICB1bnNpZ25lZCBsb25nIHI2LCB1bnNpZ25lZCBsb25nIHI3LAorCQkJCSAgIHN0cnVjdCBwdF9yZWdzIF9fcmVncyk7CisKICNlbmRpZiAvKiBfX0FTTV9TSF9TWVNURU1fMzJfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS90aHJlYWRfaW5mby5oIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS90aHJlYWRfaW5mby5oCmluZGV4IDBhODk0Y2EuLmYwOWFjNDggMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvaW5jbHVkZS9hc20vdGhyZWFkX2luZm8uaAorKysgYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvLmgKQEAgLTMzLDIwICszMywxMiBAQAogI2RlZmluZSBQUkVFTVBUX0FDVElWRQkJMHgxMDAwMDAwMAogCiAjaWYgZGVmaW5lZChDT05GSUdfNEtTVEFDS1MpCi0jZGVmaW5lIFRIUkVBRF9TSVpFX09SREVSCSgwKQotI2VsaWYgZGVmaW5lZChDT05GSUdfUEFHRV9TSVpFXzRLQikKLSNkZWZpbmUgVEhSRUFEX1NJWkVfT1JERVIJKDEpCi0jZWxpZiBkZWZpbmVkKENPTkZJR19QQUdFX1NJWkVfOEtCKQotI2RlZmluZSBUSFJFQURfU0laRV9PUkRFUgkoMSkKLSNlbGlmIGRlZmluZWQoQ09ORklHX1BBR0VfU0laRV8xNktCKQotI2RlZmluZSBUSFJFQURfU0laRV9PUkRFUgkoMCkKLSNlbGlmIGRlZmluZWQoQ09ORklHX1BBR0VfU0laRV82NEtCKQotI2RlZmluZSBUSFJFQURfU0laRV9PUkRFUgkoMCkKKyNkZWZpbmUgVEhSRUFEX1NISUZUCTEyCiAjZWxzZQotI2Vycm9yICJVbmtub3duIHRocmVhZCBzaXplIgorI2RlZmluZSBUSFJFQURfU0hJRlQJMTMKICNlbmRpZgogCi0jZGVmaW5lIFRIUkVBRF9TSVpFCShQQUdFX1NJWkUgPDwgVEhSRUFEX1NJWkVfT1JERVIpCisjZGVmaW5lIFRIUkVBRF9TSVpFCSgxIDw8IFRIUkVBRF9TSElGVCkKICNkZWZpbmUgU1RBQ0tfV0FSTgkoVEhSRUFEX1NJWkUgPj4gMykKIAogLyoKQEAgLTk0LDE1ICs4NiwxOSBAQAogCXJldHVybiB0aTsKIH0KIAorLyogdGhyZWFkIGluZm9ybWF0aW9uIGFsbG9jYXRpb24gKi8KKyNpZiBUSFJFQURfU0hJRlQgPj0gUEFHRV9TSElGVAorCisjZGVmaW5lIFRIUkVBRF9TSVpFX09SREVSCShUSFJFQURfU0hJRlQgLSBQQUdFX1NISUZUKQorCisjZWxzZSAvKiBUSFJFQURfU0hJRlQgPCBQQUdFX1NISUZUICovCisKICNkZWZpbmUgX19IQVZFX0FSQ0hfVEhSRUFEX0lORk9fQUxMT0NBVE9SCiAKLS8qIHRocmVhZCBpbmZvcm1hdGlvbiBhbGxvY2F0aW9uICovCi0jaWZkZWYgQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFCi0jZGVmaW5lIGFsbG9jX3RocmVhZF9pbmZvKHRpKQlremFsbG9jKFRIUkVBRF9TSVpFLCBHRlBfS0VSTkVMKQotI2Vsc2UKLSNkZWZpbmUgYWxsb2NfdGhyZWFkX2luZm8odGkpCWttYWxsb2MoVEhSRUFEX1NJWkUsIEdGUF9LRVJORUwpCi0jZW5kaWYKLSNkZWZpbmUgZnJlZV90aHJlYWRfaW5mbyh0aSkJa2ZyZWUodGkpCitleHRlcm4gc3RydWN0IHRocmVhZF9pbmZvICphbGxvY190aHJlYWRfaW5mbyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzayk7CitleHRlcm4gdm9pZCBmcmVlX3RocmVhZF9pbmZvKHN0cnVjdCB0aHJlYWRfaW5mbyAqdGkpOworIAorI2VuZGlmIC8qIFRIUkVBRF9TSElGVCA8IFBBR0VfU0hJRlQgKi8KIAogI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyAqLwogCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3VhY2Nlc3NfNjQuaCBiL2FyY2gvc2gvaW5jbHVkZS9hc20vdWFjY2Vzc182NC5oCmluZGV4IDU1ODBmZDQuLjU2ZmQyMGIgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvaW5jbHVkZS9hc20vdWFjY2Vzc182NC5oCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9hc20vdWFjY2Vzc182NC5oCkBAIC0yNiwxNiArMjYsMjAgQEAKIAlyZXR2YWwgPSAwOwkJCQkJCVwKIAlzd2l0Y2ggKHNpemUpIHsJCQkJCQlcCiAJY2FzZSAxOgkJCQkJCQlcCi0JCXJldHZhbCA9IF9fZ2V0X3VzZXJfYXNtX2IoeCwgcHRyKTsJCVwKKwkJcmV0dmFsID0gX19nZXRfdXNlcl9hc21fYigodm9pZCAqKSZ4LAkJXAorCQkJCQkgIChsb25nKXB0cik7CQlcCiAJCWJyZWFrOwkJCQkJCVwKIAljYXNlIDI6CQkJCQkJCVwKLQkJcmV0dmFsID0gX19nZXRfdXNlcl9hc21fdyh4LCBwdHIpOwkJXAorCQlyZXR2YWwgPSBfX2dldF91c2VyX2FzbV93KCh2b2lkICopJngsCQlcCisJCQkJCSAgKGxvbmcpcHRyKTsJCVwKIAkJYnJlYWs7CQkJCQkJXAogCWNhc2UgNDoJCQkJCQkJXAotCQlyZXR2YWwgPSBfX2dldF91c2VyX2FzbV9sKHgsIHB0cik7CQlcCisJCXJldHZhbCA9IF9fZ2V0X3VzZXJfYXNtX2woKHZvaWQgKikmeCwJCVwKKwkJCQkJICAobG9uZylwdHIpOwkJXAogCQlicmVhazsJCQkJCQlcCiAJY2FzZSA4OgkJCQkJCQlcCi0JCXJldHZhbCA9IF9fZ2V0X3VzZXJfYXNtX3EoeCwgcHRyKTsJCVwKKwkJcmV0dmFsID0gX19nZXRfdXNlcl9hc21fcSgodm9pZCAqKSZ4LAkJXAorCQkJCQkgIChsb25nKXB0cik7CQlcCiAJCWJyZWFrOwkJCQkJCVwKIAlkZWZhdWx0OgkJCQkJCVwKIAkJX19nZXRfdXNlcl91bmtub3duKCk7CQkJCVwKQEAgLTU0LDE2ICs1OCwyMCBAQAogCXJldHZhbCA9IDA7CQkJCQkJXAogCXN3aXRjaCAoc2l6ZSkgewkJCQkJCVwKIAljYXNlIDE6CQkJCQkJCVwKLQkJcmV0dmFsID0gX19wdXRfdXNlcl9hc21fYih4LCBwdHIpOwkJXAorCQlyZXR2YWwgPSBfX3B1dF91c2VyX2FzbV9iKCh2b2lkICopJngsCQlcCisJCQkJCSAgKGxvbmcpcHRyKTsJCVwKIAkJYnJlYWs7CQkJCQkJXAogCWNhc2UgMjoJCQkJCQkJXAotCQlyZXR2YWwgPSBfX3B1dF91c2VyX2FzbV93KHgsIHB0cik7CQlcCisJCXJldHZhbCA9IF9fcHV0X3VzZXJfYXNtX3coKHZvaWQgKikmeCwJCVwKKwkJCQkJICAobG9uZylwdHIpOwkJXAogCQlicmVhazsJCQkJCQlcCiAJY2FzZSA0OgkJCQkJCQlcCi0JCXJldHZhbCA9IF9fcHV0X3VzZXJfYXNtX2woeCwgcHRyKTsJCVwKKwkJcmV0dmFsID0gX19wdXRfdXNlcl9hc21fbCgodm9pZCAqKSZ4LAkJXAorCQkJCQkgIChsb25nKXB0cik7CQlcCiAJCWJyZWFrOwkJCQkJCVwKIAljYXNlIDg6CQkJCQkJCVwKLQkJcmV0dmFsID0gX19wdXRfdXNlcl9hc21fcSh4LCBwdHIpOwkJXAorCQlyZXR2YWwgPSBfX3B1dF91c2VyX2FzbV9xKCh2b2lkICopJngsCQlcCisJCQkJCSAgKGxvbmcpcHRyKTsJCVwKIAkJYnJlYWs7CQkJCQkJXAogCWRlZmF1bHQ6CQkJCQkJXAogCQlfX3B1dF91c2VyX3Vua25vd24oKTsJCQkJXApAQCAtNzcsNSArODUsNyBAQAogZXh0ZXJuIHZvaWQgX19wdXRfdXNlcl91bmtub3duKHZvaWQpOwogCiBleHRlcm4gbG9uZyBfX3N0cm5sZW5fdXNlcihjb25zdCBjaGFyICpfX3MsIGxvbmcgX19uKTsKK2V4dGVybiBpbnQgX19zdHJuY3B5X2Zyb21fdXNlcih1bnNpZ25lZCBsb25nIF9fZGVzdCwKKwkgICAgICAgdW5zaWduZWQgbG9uZyBfX3VzZXIgX19zcmMsIGludCBfX2NvdW50KTsKIAogI2VuZGlmIC8qIF9fQVNNX1NIX1VBQ0NFU1NfNjRfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2NwdS1zaDJhL2NwdS9zaDcyMDMuaCBiL2FyY2gvc2gvaW5jbHVkZS9jcHUtc2gyYS9jcHUvc2g3MjAzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzlmOTMxNQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9jcHUtc2gyYS9jcHUvc2g3MjAzLmgKQEAgLTAsMCArMSwxNDMgQEAKKyNpZm5kZWYgX19BU01fU0g3MjAzX0hfXworI2RlZmluZSBfX0FTTV9TSDcyMDNfSF9fCisKK2VudW0geworCS8qIFBBICovCisJR1BJT19QQTcsIEdQSU9fUEE2LCBHUElPX1BBNSwgR1BJT19QQTQsCisJR1BJT19QQTMsIEdQSU9fUEEyLCBHUElPX1BBMSwgR1BJT19QQTAsCisKKwkvKiBQQiAqLworCUdQSU9fUEIxMiwKKwlHUElPX1BCMTEsIEdQSU9fUEIxMCwgR1BJT19QQjksIEdQSU9fUEI4LAorCUdQSU9fUEI3LCBHUElPX1BCNiwgR1BJT19QQjUsIEdQSU9fUEI0LAorCUdQSU9fUEIzLCBHUElPX1BCMiwgR1BJT19QQjEsIEdQSU9fUEIwLAorCisJLyogUEMgKi8KKwlHUElPX1BDMTQsIEdQSU9fUEMxMywgR1BJT19QQzEyLAorCUdQSU9fUEMxMSwgR1BJT19QQzEwLCBHUElPX1BDOSwgR1BJT19QQzgsCisJR1BJT19QQzcsIEdQSU9fUEM2LCBHUElPX1BDNSwgR1BJT19QQzQsCisJR1BJT19QQzMsIEdQSU9fUEMyLCBHUElPX1BDMSwgR1BJT19QQzAsCisKKwkvKiBQRCAqLworCUdQSU9fUEQxNSwgR1BJT19QRDE0LCBHUElPX1BEMTMsIEdQSU9fUEQxMiwKKwlHUElPX1BEMTEsIEdQSU9fUEQxMCwgR1BJT19QRDksIEdQSU9fUEQ4LAorCUdQSU9fUEQ3LCBHUElPX1BENiwgR1BJT19QRDUsIEdQSU9fUEQ0LAorCUdQSU9fUEQzLCBHUElPX1BEMiwgR1BJT19QRDEsIEdQSU9fUEQwLAorCisJLyogUEUgKi8KKwlHUElPX1BFMTUsIEdQSU9fUEUxNCwgR1BJT19QRTEzLCBHUElPX1BFMTIsCisJR1BJT19QRTExLCBHUElPX1BFMTAsIEdQSU9fUEU5LCBHUElPX1BFOCwKKwlHUElPX1BFNywgR1BJT19QRTYsIEdQSU9fUEU1LCBHUElPX1BFNCwKKwlHUElPX1BFMywgR1BJT19QRTIsIEdQSU9fUEUxLCBHUElPX1BFMCwKKworCS8qIFBGICovCisJR1BJT19QRjMwLCBHUElPX1BGMjksIEdQSU9fUEYyOCwKKwlHUElPX1BGMjcsIEdQSU9fUEYyNiwgR1BJT19QRjI1LCBHUElPX1BGMjQsCisJR1BJT19QRjIzLCBHUElPX1BGMjIsIEdQSU9fUEYyMSwgR1BJT19QRjIwLAorCUdQSU9fUEYxOSwgR1BJT19QRjE4LCBHUElPX1BGMTcsIEdQSU9fUEYxNiwKKwlHUElPX1BGMTUsIEdQSU9fUEYxNCwgR1BJT19QRjEzLCBHUElPX1BGMTIsCisJR1BJT19QRjExLCBHUElPX1BGMTAsIEdQSU9fUEY5LCBHUElPX1BGOCwKKwlHUElPX1BGNywgR1BJT19QRjYsIEdQSU9fUEY1LCBHUElPX1BGNCwKKwlHUElPX1BGMywgR1BJT19QRjIsIEdQSU9fUEYxLCBHUElPX1BGMCwKKworCS8qIElOVEM6IElSUSBhbmQgUElOVCBvbiBQQi9QRC9QRSAqLworCUdQSU9fRk5fUElOVDdfUEIsIEdQSU9fRk5fUElOVDZfUEIsIEdQSU9fRk5fUElOVDVfUEIsIEdQSU9fRk5fUElOVDRfUEIsCisJR1BJT19GTl9QSU5UM19QQiwgR1BJT19GTl9QSU5UMl9QQiwgR1BJT19GTl9QSU5UMV9QQiwgR1BJT19GTl9QSU5UMF9QQiwKKwlHUElPX0ZOX1BJTlQ3X1BELCBHUElPX0ZOX1BJTlQ2X1BELCBHUElPX0ZOX1BJTlQ1X1BELCBHUElPX0ZOX1BJTlQ0X1BELAorCUdQSU9fRk5fUElOVDNfUEQsIEdQSU9fRk5fUElOVDJfUEQsIEdQSU9fRk5fUElOVDFfUEQsIEdQSU9fRk5fUElOVDBfUEQsCisJR1BJT19GTl9JUlE3X1BCLCBHUElPX0ZOX0lSUTZfUEIsIEdQSU9fRk5fSVJRNV9QQiwgR1BJT19GTl9JUlE0X1BCLAorCUdQSU9fRk5fSVJRM19QQiwgR1BJT19GTl9JUlEyX1BCLCBHUElPX0ZOX0lSUTFfUEIsIEdQSU9fRk5fSVJRMF9QQiwKKwlHUElPX0ZOX0lSUTdfUEQsIEdQSU9fRk5fSVJRNl9QRCwgR1BJT19GTl9JUlE1X1BELCBHUElPX0ZOX0lSUTRfUEQsCisJR1BJT19GTl9JUlEzX1BELCBHUElPX0ZOX0lSUTJfUEQsIEdQSU9fRk5fSVJRMV9QRCwgR1BJT19GTl9JUlEwX1BELAorCUdQSU9fRk5fSVJRN19QRSwgR1BJT19GTl9JUlE2X1BFLCBHUElPX0ZOX0lSUTVfUEUsIEdQSU9fRk5fSVJRNF9QRSwKKwlHUElPX0ZOX0lSUTNfUEUsIEdQSU9fRk5fSVJRMl9QRSwgR1BJT19GTl9JUlExX1BFLCBHUElPX0ZOX0lSUTBfUEUsCisKKwlHUElPX0ZOX1dEVE9WRiwgR1BJT19GTl9JUlFPVVQsIEdQSU9fRk5fUkVGT1VULCBHUElPX0ZOX0lSUU9VVF9SRUZPVVQsCisJR1BJT19GTl9VQkNUUkcsCisKKwkvKiBDQU4gKi8KKwlHUElPX0ZOX0NUWDEsIEdQSU9fRk5fQ1JYMSwgR1BJT19GTl9DVFgwLCBHUElPX0ZOX0NUWDBfQ1RYMSwKKwlHUElPX0ZOX0NSWDAsIEdQSU9fRk5fQ1JYMF9DUlgxLAorCisJLyogSUlDMyAqLworCUdQSU9fRk5fU0RBMywgR1BJT19GTl9TQ0wzLAorCUdQSU9fRk5fU0RBMiwgR1BJT19GTl9TQ0wyLAorCUdQSU9fRk5fU0RBMSwgR1BJT19GTl9TQ0wxLAorCUdQSU9fRk5fU0RBMCwgR1BJT19GTl9TQ0wwLAorCisJLyogRE1BQyAqLworCUdQSU9fRk5fVEVORDBfUEQsIEdQSU9fRk5fVEVORDBfUEUsIEdQSU9fRk5fREFDSzBfUEQsCisJR1BJT19GTl9EQUNLMF9QRSwgR1BJT19GTl9EUkVRMF9QRCwgR1BJT19GTl9EUkVRMF9QRSwKKwlHUElPX0ZOX1RFTkQxX1BELCBHUElPX0ZOX1RFTkQxX1BFLCBHUElPX0ZOX0RBQ0sxX1BELAorCUdQSU9fRk5fREFDSzFfUEUsIEdQSU9fRk5fRFJFUTFfUEQsIEdQSU9fRk5fRFJFUTFfUEUsCisJR1BJT19GTl9EQUNLMiwgR1BJT19GTl9EUkVRMiwKKwlHUElPX0ZOX0RBQ0szLCBHUElPX0ZOX0RSRVEzLAorCisJLyogQURDICovCisJR1BJT19GTl9BRFRSR19QRCwgR1BJT19GTl9BRFRSR19QRSwKKworCS8qIEJTQyAqLworCUdQSU9fRk5fRDMxLCBHUElPX0ZOX0QzMCwgR1BJT19GTl9EMjksIEdQSU9fRk5fRDI4LAorCUdQSU9fRk5fRDI3LCBHUElPX0ZOX0QyNiwgR1BJT19GTl9EMjUsIEdQSU9fRk5fRDI0LAorCUdQSU9fRk5fRDIzLCBHUElPX0ZOX0QyMiwgR1BJT19GTl9EMjEsIEdQSU9fRk5fRDIwLAorCUdQSU9fRk5fRDE5LCBHUElPX0ZOX0QxOCwgR1BJT19GTl9EMTcsIEdQSU9fRk5fRDE2LAorCUdQSU9fRk5fQTI1LCBHUElPX0ZOX0EyNCwgR1BJT19GTl9BMjMsIEdQSU9fRk5fQTIyLAorCUdQSU9fRk5fQTIxLCBHUElPX0ZOX0NTNCwgR1BJT19GTl9NUkVTLCBHUElPX0ZOX0JTLAorCUdQSU9fRk5fSU9JUzE2LCBHUElPX0ZOX0NTMSwgR1BJT19GTl9DUzZfQ0UxQiwKKwlHUElPX0ZOX0NFMkIsIEdQSU9fRk5fQ1M1X0NFMUEsIEdQSU9fRk5fQ0UyQSwKKwlHUElPX0ZOX0ZSQU1FLCBHUElPX0ZOX1dBSVQsIEdQSU9fRk5fUkRXUiwKKwlHUElPX0ZOX0NLRSwgR1BJT19GTl9DQVNVLCBHUElPX0ZOX0JSRVEsIEdQSU9fRk5fUkFTVSwKKwlHUElPX0ZOX0JBQ0ssIEdQSU9fRk5fQ0FTTCwgR1BJT19GTl9SQVNMLAorCUdQSU9fRk5fV0UzX0RRTVVVX0FIX0lDSU9fV1IsIEdQSU9fRk5fV0UyX0RRTVVMX0lDSU9SRCwKKwlHUElPX0ZOX1dFMV9EUU1MVV9XRSwgR1BJT19GTl9XRTBfRFFNTEwsCisJR1BJT19GTl9DUzMsIEdQSU9fRk5fQ1MyLCBHUElPX0ZOX0ExLCBHUElPX0ZOX0EwLCBHUElPX0ZOX0NTNywKKworCS8qIFRNVSAqLworCUdQSU9fRk5fVElPQzRELCBHUElPX0ZOX1RJT0M0QywgR1BJT19GTl9USU9DNEIsIEdQSU9fRk5fVElPQzRBLAorCUdQSU9fRk5fVElPQzNELCBHUElPX0ZOX1RJT0MzQywgR1BJT19GTl9USU9DM0IsIEdQSU9fRk5fVElPQzNBLAorCUdQSU9fRk5fVElPQzJCLCBHUElPX0ZOX1RJT0MxQiwgR1BJT19GTl9USU9DMkEsIEdQSU9fRk5fVElPQzFBLAorCUdQSU9fRk5fVElPQzBELCBHUElPX0ZOX1RJT0MwQywgR1BJT19GTl9USU9DMEIsIEdQSU9fRk5fVElPQzBBLAorCUdQSU9fRk5fVENMS0RfUEQsIEdQSU9fRk5fVENMS0NfUEQsIEdQSU9fRk5fVENMS0JfUEQsIEdQSU9fRk5fVENMS0FfUEQsCisJR1BJT19GTl9UQ0xLRF9QRiwgR1BJT19GTl9UQ0xLQ19QRiwgR1BJT19GTl9UQ0xLQl9QRiwgR1BJT19GTl9UQ0xLQV9QRiwKKworCS8qIFNTVSAqLworCUdQSU9fRk5fU0NTMF9QRCwgR1BJT19GTl9TU08wX1BELCBHUElPX0ZOX1NTSTBfUEQsIEdQSU9fRk5fU1NDSzBfUEQsCisJR1BJT19GTl9TQ1MwX1BGLCBHUElPX0ZOX1NTTzBfUEYsIEdQSU9fRk5fU1NJMF9QRiwgR1BJT19GTl9TU0NLMF9QRiwKKwlHUElPX0ZOX1NDUzFfUEQsIEdQSU9fRk5fU1NPMV9QRCwgR1BJT19GTl9TU0kxX1BELCBHUElPX0ZOX1NTQ0sxX1BELAorCUdQSU9fRk5fU0NTMV9QRiwgR1BJT19GTl9TU08xX1BGLCBHUElPX0ZOX1NTSTFfUEYsIEdQSU9fRk5fU1NDSzFfUEYsCisKKwkvKiBTQ0lGICovCisJR1BJT19GTl9UWEQwLCBHUElPX0ZOX1JYRDAsIEdQSU9fRk5fU0NLMCwKKwlHUElPX0ZOX1RYRDEsIEdQSU9fRk5fUlhEMSwgR1BJT19GTl9TQ0sxLAorCUdQSU9fRk5fVFhEMiwgR1BJT19GTl9SWEQyLCBHUElPX0ZOX1NDSzIsCisJR1BJT19GTl9SVFMzLCBHUElPX0ZOX0NUUzMsIEdQSU9fRk5fVFhEMywgR1BJT19GTl9SWEQzLCBHUElPX0ZOX1NDSzMsCisKKwkvKiBTU0kgKi8KKwlHUElPX0ZOX0FVRElPX0NMSywKKwlHUElPX0ZOX1NTSURBVEEzLCBHUElPX0ZOX1NTSVdTMywgR1BJT19GTl9TU0lTQ0szLAorCUdQSU9fRk5fU1NJREFUQTIsIEdQSU9fRk5fU1NJV1MyLCBHUElPX0ZOX1NTSVNDSzIsCisJR1BJT19GTl9TU0lEQVRBMSwgR1BJT19GTl9TU0lXUzEsIEdQSU9fRk5fU1NJU0NLMSwKKwlHUElPX0ZOX1NTSURBVEEwLCBHUElPX0ZOX1NTSVdTMCwgR1BJT19GTl9TU0lTQ0swLAorCisJLyogRkxDVEwgKi8KKwlHUElPX0ZOX0ZDRSwgR1BJT19GTl9GUkIsCisJR1BJT19GTl9OQUY3LCBHUElPX0ZOX05BRjYsIEdQSU9fRk5fTkFGNSwgR1BJT19GTl9OQUY0LAorCUdQSU9fRk5fTkFGMywgR1BJT19GTl9OQUYyLCBHUElPX0ZOX05BRjEsIEdQSU9fRk5fTkFGMCwKKwlHUElPX0ZOX0ZTQywgR1BJT19GTl9GT0UsIEdQSU9fRk5fRkNERSwgR1BJT19GTl9GV0UsCisKKwkvKiBMQ0RDICovCisJR1BJT19GTl9MQ0RfVkVQV0MsIEdQSU9fRk5fTENEX1ZDUFdDLAorCUdQSU9fRk5fTENEX0NMSywgR1BJT19GTl9MQ0RfRkxNLAorCUdQSU9fRk5fTENEX01fRElTUCwgR1BJT19GTl9MQ0RfQ0wyLAorCUdQSU9fRk5fTENEX0NMMSwgR1BJT19GTl9MQ0RfRE9OLAorCUdQSU9fRk5fTENEX0RBVEExNSwgR1BJT19GTl9MQ0RfREFUQTE0LAorCUdQSU9fRk5fTENEX0RBVEExMywgR1BJT19GTl9MQ0RfREFUQTEyLAorCUdQSU9fRk5fTENEX0RBVEExMSwgR1BJT19GTl9MQ0RfREFUQTEwLAorCUdQSU9fRk5fTENEX0RBVEE5LCBHUElPX0ZOX0xDRF9EQVRBOCwKKwlHUElPX0ZOX0xDRF9EQVRBNywgR1BJT19GTl9MQ0RfREFUQTYsCisJR1BJT19GTl9MQ0RfREFUQTUsIEdQSU9fRk5fTENEX0RBVEE0LAorCUdQSU9fRk5fTENEX0RBVEEzLCBHUElPX0ZOX0xDRF9EQVRBMiwKKwlHUElPX0ZOX0xDRF9EQVRBMSwgR1BJT19GTl9MQ0RfREFUQTAsCit9OworCisjZW5kaWYgLyogX19BU01fU0g3MjAzX0hfXyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2NwdS1zaDMvY3B1L3NoNzcyMC5oIGIvYXJjaC9zaC9pbmNsdWRlL2NwdS1zaDMvY3B1L3NoNzcyMC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQxYzE0MDYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3NoL2luY2x1ZGUvY3B1LXNoMy9jcHUvc2g3NzIwLmgKQEAgLTAsMCArMSwxNzQgQEAKKyNpZm5kZWYgX19BU01fU0g3NzIwX0hfXworI2RlZmluZSBfX0FTTV9TSDc3MjBfSF9fCisKK2VudW0geworCS8qIFBUQSAqLworCUdQSU9fUFRBNywgR1BJT19QVEE2LCBHUElPX1BUQTUsIEdQSU9fUFRBNCwKKwlHUElPX1BUQTMsIEdQSU9fUFRBMiwgR1BJT19QVEExLCBHUElPX1BUQTAsCisKKwkvKiBQVEIgKi8KKwlHUElPX1BUQjcsIEdQSU9fUFRCNiwgR1BJT19QVEI1LCBHUElPX1BUQjQsCisJR1BJT19QVEIzLCBHUElPX1BUQjIsIEdQSU9fUFRCMSwgR1BJT19QVEIwLAorCisJLyogUFRDICovCisJR1BJT19QVEM3LCBHUElPX1BUQzYsIEdQSU9fUFRDNSwgR1BJT19QVEM0LAorCUdQSU9fUFRDMywgR1BJT19QVEMyLCBHUElPX1BUQzEsIEdQSU9fUFRDMCwKKworCS8qIFBURCAqLworCUdQSU9fUFRENywgR1BJT19QVEQ2LCBHUElPX1BURDUsIEdQSU9fUFRENCwKKwlHUElPX1BURDMsIEdQSU9fUFREMiwgR1BJT19QVEQxLCBHUElPX1BURDAsCisKKwkvKiBQVEUgKi8KKwlHUElPX1BURTYsIEdQSU9fUFRFNSwgR1BJT19QVEU0LCBHUElPX1BURTMsCisJR1BJT19QVEUyLCBHUElPX1BURTEsIEdQSU9fUFRFMCwKKworCS8qIFBURiAqLworCUdQSU9fUFRGNiwgR1BJT19QVEY1LCBHUElPX1BURjQsIEdQSU9fUFRGMywKKwlHUElPX1BURjIsIEdQSU9fUFRGMSwgR1BJT19QVEYwLCBHUElPX1BURzYsCisKKwkvKiBQVEcgKi8KKwlHUElPX1BURzUsIEdQSU9fUFRHNCwgR1BJT19QVEczLCBHUElPX1BURzIsCisJR1BJT19QVEcxLCBHUElPX1BURzAsCisKKwkvKiBQVEggKi8KKwlHUElPX1BUSDYsIEdQSU9fUFRINSwgR1BJT19QVEg0LCBHUElPX1BUSDMsCisJR1BJT19QVEgyLCBHUElPX1BUSDEsIEdQSU9fUFRIMCwKKworCS8qIFBUSiAqLworCUdQSU9fUFRKNiwgR1BJT19QVEo1LCBHUElPX1BUSjQsIEdQSU9fUFRKMywKKwlHUElPX1BUSjIsIEdQSU9fUFRKMSwgR1BJT19QVEowLAorCisJLyogUFRLICovCisJR1BJT19QVEszLCBHUElPX1BUSzIsIEdQSU9fUFRLMSwgR1BJT19QVEswLAorCisJLyogUFRMICovCisJR1BJT19QVEw3LCBHUElPX1BUTDYsIEdQSU9fUFRMNSwgR1BJT19QVEw0LCBHUElPX1BUTDMsCisKKwkvKiBQVE0gKi8KKwlHUElPX1BUTTcsIEdQSU9fUFRNNiwgR1BJT19QVE01LCBHUElPX1BUTTQsCisJR1BJT19QVE0zLCBHUElPX1BUTTIsIEdQSU9fUFRNMSwgR1BJT19QVE0wLAorCisJLyogUFRQICovCisJR1BJT19QVFA0LCBHUElPX1BUUDMsIEdQSU9fUFRQMiwgR1BJT19QVFAxLCBHUElPX1BUUDAsCisKKwkvKiBQVFIgKi8KKwlHUElPX1BUUjcsIEdQSU9fUFRSNiwgR1BJT19QVFI1LCBHUElPX1BUUjQsCisJR1BJT19QVFIzLCBHUElPX1BUUjIsIEdQSU9fUFRSMSwgR1BJT19QVFIwLAorCisJLyogUFRTICovCisJR1BJT19QVFM0LCBHUElPX1BUUzMsIEdQSU9fUFRTMiwgR1BJT19QVFMxLCBHUElPX1BUUzAsCisKKwkvKiBQVFQgKi8KKwlHUElPX1BUVDQsIEdQSU9fUFRUMywgR1BJT19QVFQyLCBHUElPX1BUVDEsIEdQSU9fUFRUMCwKKworCS8qIFBUVSAqLworCUdQSU9fUFRVNCwgR1BJT19QVFUzLCBHUElPX1BUVTIsIEdQSU9fUFRVMSwgR1BJT19QVFUwLAorCisJLyogUFRWICovCisJR1BJT19QVFY0LCBHUElPX1BUVjMsIEdQSU9fUFRWMiwgR1BJT19QVFYxLCBHUElPX1BUVjAsCisKKwkvKiBCU0MgKi8KKwlHUElPX0ZOX0QzMSwgR1BJT19GTl9EMzAsIEdQSU9fRk5fRDI5LCBHUElPX0ZOX0QyOCwKKwlHUElPX0ZOX0QyNywgR1BJT19GTl9EMjYsIEdQSU9fRk5fRDI1LCBHUElPX0ZOX0QyNCwKKwlHUElPX0ZOX0QyMywgR1BJT19GTl9EMjIsIEdQSU9fRk5fRDIxLCBHUElPX0ZOX0QyMCwKKwlHUElPX0ZOX0QxOSwgR1BJT19GTl9EMTgsIEdQSU9fRk5fRDE3LCBHUElPX0ZOX0QxNiwKKwlHUElPX0ZOX0lPSVMxNiwgR1BJT19GTl9SQVMsIEdQSU9fRk5fQ0FTLCBHUElPX0ZOX0NLRSwKKwlHUElPX0ZOX0NTNUJfQ0UxQSwgR1BJT19GTl9DUzZCX0NFMUIsCisJR1BJT19GTl9BMjUsIEdQSU9fRk5fQTI0LCBHUElPX0ZOX0EyMywgR1BJT19GTl9BMjIsCisJR1BJT19GTl9BMjEsIEdQSU9fRk5fQTIwLCBHUElPX0ZOX0ExOSwgR1BJT19GTl9BMCwKKwlHUElPX0ZOX1JFRk9VVCwgR1BJT19GTl9JUlFPVVQsCisKKwkvKiBMQ0RDICovCisJR1BJT19GTl9MQ0RfREFUQTE1LCBHUElPX0ZOX0xDRF9EQVRBMTQsCisJR1BJT19GTl9MQ0RfREFUQTEzLCBHUElPX0ZOX0xDRF9EQVRBMTIsCisJR1BJT19GTl9MQ0RfREFUQTExLCBHUElPX0ZOX0xDRF9EQVRBMTAsCisJR1BJT19GTl9MQ0RfREFUQTksIEdQSU9fRk5fTENEX0RBVEE4LAorCUdQSU9fRk5fTENEX0RBVEE3LCBHUElPX0ZOX0xDRF9EQVRBNiwKKwlHUElPX0ZOX0xDRF9EQVRBNSwgR1BJT19GTl9MQ0RfREFUQTQsCisJR1BJT19GTl9MQ0RfREFUQTMsIEdQSU9fRk5fTENEX0RBVEEyLAorCUdQSU9fRk5fTENEX0RBVEExLCBHUElPX0ZOX0xDRF9EQVRBMCwKKwlHUElPX0ZOX0xDRF9NX0RJU1AsCisJR1BJT19GTl9MQ0RfQ0wxLCBHUElPX0ZOX0xDRF9DTDIsCisJR1BJT19GTl9MQ0RfRE9OLCBHUElPX0ZOX0xDRF9GTE0sCisJR1BJT19GTl9MQ0RfVkVQV0MsIEdQSU9fRk5fTENEX1ZDUFdDLAorCisJLyogQUZFSUYgKi8KKwlHUElPX0ZOX0FGRV9SWElOLCBHUElPX0ZOX0FGRV9SREVULAorCUdQSU9fRk5fQUZFX0ZTLCBHUElPX0ZOX0FGRV9UWE9VVCwKKwlHUElPX0ZOX0FGRV9TQ0xLLCBHUElPX0ZOX0FGRV9STFlDTlQsCisJR1BJT19GTl9BRkVfSEMxLAorCisJLyogSUlDICovCisJR1BJT19GTl9JSUNfU0NMLCBHUElPX0ZOX0lJQ19TREEsCisKKwkvKiBEQUMgKi8KKwlHUElPX0ZOX0RBMSwgR1BJT19GTl9EQTAsCisKKwkvKiBBREMgKi8KKwlHUElPX0ZOX0FOMywgR1BJT19GTl9BTjIsIEdQSU9fRk5fQU4xLCBHUElPX0ZOX0FOMCwgR1BJT19GTl9BRFRSRywKKworCS8qIFVTQiAqLworCUdQSU9fRk5fVVNCMURfUkNWLCBHUElPX0ZOX1VTQjFEX1RYU0UwLAorCUdQSU9fRk5fVVNCMURfVFhEUExTLCBHUElPX0ZOX1VTQjFEX0RNTlMsCisJR1BJT19GTl9VU0IxRF9EUExTLCBHUElPX0ZOX1VTQjFEX1NQRUVELAorCUdQSU9fRk5fVVNCMURfVFhFTkwsIEdQSU9fRk5fVVNCMl9QV1JfRU4sCisJR1BJT19GTl9VU0IxX1BXUl9FTl9VU0JGX1VQTFVQLCBHUElPX0ZOX1VTQjFEX1NVU1BFTkQsCisKKwkvKiBJTlRDICovCisJR1BJT19GTl9JUlE1LCBHUElPX0ZOX0lSUTQsCisJR1BJT19GTl9JUlEzX0lSTDMsIEdQSU9fRk5fSVJRMl9JUkwyLAorCUdQSU9fRk5fSVJRMV9JUkwxLCBHUElPX0ZOX0lSUTBfSVJMMCwKKworCS8qIFBDQyAqLworCUdQSU9fRk5fUENDX1JFRywgR1BJT19GTl9QQ0NfRFJWLAorCUdQSU9fRk5fUENDX0JWRDIsIEdQSU9fRk5fUENDX0JWRDEsCisJR1BJT19GTl9QQ0NfQ0QyLCBHUElPX0ZOX1BDQ19DRDEsCisJR1BJT19GTl9QQ0NfUkVTRVQsIEdQSU9fRk5fUENDX1JEWSwKKwlHUElPX0ZOX1BDQ19WUzIsIEdQSU9fRk5fUENDX1ZTMSwKKworCS8qIEhVREkgKi8KKwlHUElPX0ZOX0FVREFUQTMsIEdQSU9fRk5fQVVEQVRBMiwgR1BJT19GTl9BVURBVEExLCBHUElPX0ZOX0FVREFUQTAsCisJR1BJT19GTl9BVURDSywgR1BJT19GTl9BVURTWU5DLCBHUElPX0ZOX0FTRUJSS0FLLCBHUElPX0ZOX1RSU1QsCisJR1BJT19GTl9UTVMsIEdQSU9fRk5fVERPLCBHUElPX0ZOX1RESSwgR1BJT19GTl9UQ0ssCisKKwkvKiBETUFDICovCisJR1BJT19GTl9EQUNLMSwgR1BJT19GTl9EUkVRMSwgR1BJT19GTl9EQUNLMCwgR1BJT19GTl9EUkVRMCwKKwlHUElPX0ZOX1RFTkQxLCBHUElPX0ZOX1RFTkQwLAorCisJLyogU0lPRjAgKi8KKwlHUElPX0ZOX1NJT0YwX1NZTkMsIEdQSU9fRk5fU0lPRjBfTUNMSywKKwlHUElPX0ZOX1NJT0YwX1RYRCwgR1BJT19GTl9TSU9GMF9SWEQsCisJR1BJT19GTl9TSU9GMF9TQ0ssCisKKwkvKiBTSU9GMSAqLworCUdQSU9fRk5fU0lPRjFfU1lOQywgR1BJT19GTl9TSU9GMV9NQ0xLLAorCUdQSU9fRk5fU0lPRjFfVFhELCBHUElPX0ZOX1NJT0YxX1JYRCwKKwlHUElPX0ZOX1NJT0YxX1NDSywKKworCS8qIFNDSUYwICovCisJR1BJT19GTl9TQ0lGMF9UWEQsIEdQSU9fRk5fU0NJRjBfUlhELAorCUdQSU9fRk5fU0NJRjBfUlRTLCBHUElPX0ZOX1NDSUYwX0NUUywgR1BJT19GTl9TQ0lGMF9TQ0ssCisKKwkvKiBTQ0lGMSAqLworCUdQSU9fRk5fU0NJRjFfVFhELCBHUElPX0ZOX1NDSUYxX1JYRCwKKwlHUElPX0ZOX1NDSUYxX1JUUywgR1BJT19GTl9TQ0lGMV9DVFMsIEdQSU9fRk5fU0NJRjFfU0NLLAorCisJLyogVFBVICovCisJR1BJT19GTl9UUFVfVE8xLCBHUElPX0ZOX1RQVV9UTzAsCisJR1BJT19GTl9UUFVfVEkzQiwgR1BJT19GTl9UUFVfVEkzQSwKKwlHUElPX0ZOX1RQVV9USTJCLCBHUElPX0ZOX1RQVV9USTJBLAorCUdQSU9fRk5fVFBVX1RPMywgR1BJT19GTl9UUFVfVE8yLAorCisJLyogU0lNICovCisJR1BJT19GTl9TSU1fRCwgR1BJT19GTl9TSU1fQ0xLLCBHUElPX0ZOX1NJTV9SU1QsCisKKwkvKiBNTUMgKi8KKwlHUElPX0ZOX01NQ19EQVQsIEdQSU9fRk5fTU1DX0NNRCwKKwlHUElPX0ZOX01NQ19DTEssIEdQSU9fRk5fTU1DX1ZERE9OLAorCUdQSU9fRk5fTU1DX09ETU9ELAorCisJLyogU1lTQyAqLworCUdQSU9fRk5fU1RBVFVTMCwgR1BJT19GTl9TVEFUVVMxLAorfTsKKworI2VuZGlmIC8qIF9fQVNNX1NINzcyMF9IX18gKi8KZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9jcHUtc2g0L2NwdS9zaDc3MjIuaCBiL2FyY2gvc2gvaW5jbHVkZS9jcHUtc2g0L2NwdS9zaDc3MjIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YjMwOTZmCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2NwdS1zaDQvY3B1L3NoNzcyMi5oCkBAIC0wLDAgKzEsMjEwIEBACisjaWZuZGVmIF9fQVNNX1NINzcyMl9IX18KKyNkZWZpbmUgX19BU01fU0g3NzIyX0hfXworCitlbnVtIHsKKwkvKiBQVEEgKi8KKwlHUElPX1BUQTcsIEdQSU9fUFRBNiwgR1BJT19QVEE1LCBHUElPX1BUQTQsCisJR1BJT19QVEEzLCBHUElPX1BUQTIsIEdQSU9fUFRBMSwgR1BJT19QVEEwLAorCisJLyogUFRCICovCisJR1BJT19QVEI3LCBHUElPX1BUQjYsIEdQSU9fUFRCNSwgR1BJT19QVEI0LAorCUdQSU9fUFRCMywgR1BJT19QVEIyLCBHUElPX1BUQjEsIEdQSU9fUFRCMCwKKworCS8qIFBUQyAqLworCUdQSU9fUFRDNywgR1BJT19QVEM1LCBHUElPX1BUQzQsIEdQSU9fUFRDMywKKwlHUElPX1BUQzIsIEdQSU9fUFRDMCwKKworCS8qIFBURCAqLworCUdQSU9fUFRENywgR1BJT19QVEQ2LCBHUElPX1BURDUsIEdQSU9fUFRENCwKKwlHUElPX1BURDMsIEdQSU9fUFREMiwgR1BJT19QVEQxLCBHUElPX1BURDAsCisKKwkvKiBQVEUgKi8KKwlHUElPX1BURTcsIEdQSU9fUFRFNiwgR1BJT19QVEU1LCBHUElPX1BURTQsCisJR1BJT19QVEUxLCBHUElPX1BURTAsCisKKwkvKiBQVEYgKi8KKwlHUElPX1BURjYsIEdQSU9fUFRGNSwgR1BJT19QVEY0LCBHUElPX1BURjMsCisJR1BJT19QVEYyLCBHUElPX1BURjEsIEdQSU9fUFRGMCwKKworCS8qIFBURyAqLworCUdQSU9fUFRHNCwgR1BJT19QVEczLCBHUElPX1BURzIsIEdQSU9fUFRHMSwgR1BJT19QVEcwLAorCisJLyogUFRIICovCisJR1BJT19QVEg3LCBHUElPX1BUSDYsIEdQSU9fUFRINSwgR1BJT19QVEg0LAorCUdQSU9fUFRIMywgR1BJT19QVEgyLCBHUElPX1BUSDEsIEdQSU9fUFRIMCwKKworCS8qIFBUSiAqLworCUdQSU9fUFRKNywgR1BJT19QVEo2LCBHUElPX1BUSjUsIEdQSU9fUFRKMSwgR1BJT19QVEowLAorCisJLyogUFRLICovCisJR1BJT19QVEs2LCBHUElPX1BUSzUsIEdQSU9fUFRLNCwgR1BJT19QVEszLAorCUdQSU9fUFRLMiwgR1BJT19QVEsxLCBHUElPX1BUSzAsCisKKwkvKiBQVEwgKi8KKwlHUElPX1BUTDcsIEdQSU9fUFRMNiwgR1BJT19QVEw1LCBHUElPX1BUTDQsCisJR1BJT19QVEwzLCBHUElPX1BUTDIsIEdQSU9fUFRMMSwgR1BJT19QVEwwLAorCisJLyogUFRNICovCisJR1BJT19QVE03LCBHUElPX1BUTTYsIEdQSU9fUFRNNSwgR1BJT19QVE00LAorCUdQSU9fUFRNMywgR1BJT19QVE0yLCBHUElPX1BUTTEsIEdQSU9fUFRNMCwKKworCS8qIFBUTiAqLworCUdQSU9fUFRONywgR1BJT19QVE42LCBHUElPX1BUTjUsIEdQSU9fUFRONCwKKwlHUElPX1BUTjMsIEdQSU9fUFROMiwgR1BJT19QVE4xLCBHUElPX1BUTjAsCisKKwkvKiBQVFEgKi8KKwlHUElPX1BUUTcsIEdQSU9fUFRRNiwgR1BJT19QVFE1LCBHUElPX1BUUTQsCisJR1BJT19QVFEzLCBHUElPX1BUUTIsIEdQSU9fUFRRMSwgR1BJT19QVFEwLAorCisJLyogUFRSICovCisJR1BJT19QVFI0LCBHUElPX1BUUjMsIEdQSU9fUFRSMiwgR1BJT19QVFIxLCBHUElPX1BUUjAsCisKKwkvKiBQVFMgKi8KKwlHUElPX1BUUzQsIEdQSU9fUFRTMywgR1BJT19QVFMyLCBHUElPX1BUUzEsIEdQSU9fUFRTMCwKKworCS8qIFBUVCAqLworCUdQSU9fUFRUNCwgR1BJT19QVFQzLCBHUElPX1BUVDIsIEdQSU9fUFRUMSwgR1BJT19QVFQwLAorCisJLyogUFRVICovCisJR1BJT19QVFU0LCBHUElPX1BUVTMsIEdQSU9fUFRVMiwgR1BJT19QVFUxLCBHUElPX1BUVTAsCisKKwkvKiBQVFYgKi8KKwlHUElPX1BUVjQsIEdQSU9fUFRWMywgR1BJT19QVFYyLCBHUElPX1BUVjEsIEdQSU9fUFRWMCwKKworCS8qIFBUVyAqLworCUdQSU9fUFRXNiwgR1BJT19QVFc1LCBHUElPX1BUVzQsIEdQSU9fUFRXMywKKwlHUElPX1BUVzIsIEdQSU9fUFRXMSwgR1BJT19QVFcwLAorCisJLyogUFRYICovCisJR1BJT19QVFg2LCBHUElPX1BUWDUsIEdQSU9fUFRYNCwgR1BJT19QVFgzLAorCUdQSU9fUFRYMiwgR1BJT19QVFgxLCBHUElPX1BUWDAsCisKKwkvKiBQVFkgKi8KKwlHUElPX1BUWTUsIEdQSU9fUFRZNCwgR1BJT19QVFkzLCBHUElPX1BUWTIsCisJR1BJT19QVFkxLCBHUElPX1BUWTAsCisKKwkvKiBQVFogKi8KKwlHUElPX1BUWjUsIEdQSU9fUFRaNCwgR1BJT19QVFozLCBHUElPX1BUWjIsIEdQSU9fUFRaMSwKKworCS8qIFNDSUYwICovCisJR1BJT19GTl9TQ0lGMF9UWEQsIEdQSU9fRk5fU0NJRjBfUlhELAorCUdQSU9fRk5fU0NJRjBfUlRTLCBHUElPX0ZOX1NDSUYwX0NUUywgR1BJT19GTl9TQ0lGMF9TQ0ssCisKKwkvKiBTQ0lGMSAqLworCUdQSU9fRk5fU0NJRjFfVFhELCBHUElPX0ZOX1NDSUYxX1JYRCwKKwlHUElPX0ZOX1NDSUYxX1JUUywgR1BJT19GTl9TQ0lGMV9DVFMsIEdQSU9fRk5fU0NJRjFfU0NLLAorCisJLyogU0NJRjIgKi8KKwlHUElPX0ZOX1NDSUYyX1RYRCwgR1BJT19GTl9TQ0lGMl9SWEQsCisJR1BJT19GTl9TQ0lGMl9SVFMsIEdQSU9fRk5fU0NJRjJfQ1RTLCBHUElPX0ZOX1NDSUYyX1NDSywKKworCS8qIFNJTyAqLworCUdQSU9fRk5fU0lPVFhELCBHUElPX0ZOX1NJT1JYRCwKKwlHUElPX0ZOX1NJT0QsIEdQSU9fRk5fU0lPU1RSQjAsIEdQSU9fRk5fU0lPU1RSQjEsCisJR1BJT19GTl9TSU9TQ0ssIEdQSU9fRk5fU0lPTUNLLAorCisJLyogQ0VVICovCisJR1BJT19GTl9WSU9fRDE1LCBHUElPX0ZOX1ZJT19EMTQsIEdQSU9fRk5fVklPX0QxMywgR1BJT19GTl9WSU9fRDEyLAorCUdQSU9fRk5fVklPX0QxMSwgR1BJT19GTl9WSU9fRDEwLCBHUElPX0ZOX1ZJT19EOSwgR1BJT19GTl9WSU9fRDgsCisJR1BJT19GTl9WSU9fRDcsIEdQSU9fRk5fVklPX0Q2LCBHUElPX0ZOX1ZJT19ENSwgR1BJT19GTl9WSU9fRDQsCisJR1BJT19GTl9WSU9fRDMsIEdQSU9fRk5fVklPX0QyLCBHUElPX0ZOX1ZJT19EMSwgR1BJT19GTl9WSU9fRDAsCisJR1BJT19GTl9WSU9fRkxELCBHUElPX0ZOX1ZJT19DS08sIEdQSU9fRk5fVklPX1NURVgsIEdQSU9fRk5fVklPX1NURU0sCisJR1BJT19GTl9WSU9fVkQsIEdQSU9fRk5fVklPX0hELCBHUElPX0ZOX1ZJT19DTEssCisJR1BJT19GTl9WSU9fVkQyLCBHUElPX0ZOX1ZJT19IRDIsIEdQSU9fRk5fVklPX0NMSzIsCisKKwkvKiBMQ0RDICovCisJR1BJT19GTl9MQ0REMjMsIEdQSU9fRk5fTENERDIyLCBHUElPX0ZOX0xDREQyMSwgR1BJT19GTl9MQ0REMjAsCisJR1BJT19GTl9MQ0REMTksIEdQSU9fRk5fTENERDE4LCBHUElPX0ZOX0xDREQxNywgR1BJT19GTl9MQ0REMTYsCisJR1BJT19GTl9MQ0REMTUsIEdQSU9fRk5fTENERDE0LCBHUElPX0ZOX0xDREQxMywgR1BJT19GTl9MQ0REMTIsCisJR1BJT19GTl9MQ0REMTEsIEdQSU9fRk5fTENERDEwLCBHUElPX0ZOX0xDREQ5LCBHUElPX0ZOX0xDREQ4LAorCUdQSU9fRk5fTENERDcsIEdQSU9fRk5fTENERDYsIEdQSU9fRk5fTENERDUsIEdQSU9fRk5fTENERDQsCisJR1BJT19GTl9MQ0REMywgR1BJT19GTl9MQ0REMiwgR1BJT19GTl9MQ0REMSwgR1BJT19GTl9MQ0REMCwKKwlHUElPX0ZOX0xDRExDTEssCisJLyogTWFpbiBMQ0QgKi8KKwlHUElPX0ZOX0xDRERPTiwgR1BJT19GTl9MQ0RWQ1BXQywgR1BJT19GTl9MQ0RWRVBXQywgR1BJT19GTl9MQ0RWU1lOLAorCS8qIE1haW4gTENEIC0gUkdCIE1vZGUgKi8KKwlHUElPX0ZOX0xDRERDSywgR1BJT19GTl9MQ0RIU1lOLCBHUElPX0ZOX0xDRERJU1AsCisJLyogTWFpbiBMQ0QgLSBTWVMgTW9kZSAqLworCUdQSU9fRk5fTENEUlMsIEdQSU9fRk5fTENEQ1MsIEdQSU9fRk5fTENEV1IsIEdQSU9fRk5fTENEUkQsCisJLyogU3ViIExDRCAtIFNZUyBNb2RlICovCisJR1BJT19GTl9MQ0RET04yLCBHUElPX0ZOX0xDRFZDUFdDMiwgR1BJT19GTl9MQ0RWRVBXQzIsCisJR1BJT19GTl9MQ0RWU1lOMiwgR1BJT19GTl9MQ0RDUzIsCisKKwkvKiBCU0MgKi8KKwlHUElPX0ZOX0lPSVMxNiwgR1BJT19GTl9BMjUsIEdQSU9fRk5fQTI0LCBHUElPX0ZOX0EyMywgR1BJT19GTl9BMjIsCisJR1BJT19GTl9CUywgR1BJT19GTl9DUzZCX0NFMUIsIEdQSU9fRk5fV0FJVCwgR1BJT19GTl9DUzZBX0NFMkIsCisKKwkvKiBTQlNDICovCisJR1BJT19GTl9IUEQ2MywgR1BJT19GTl9IUEQ2MiwgR1BJT19GTl9IUEQ2MSwgR1BJT19GTl9IUEQ2MCwKKwlHUElPX0ZOX0hQRDU5LCBHUElPX0ZOX0hQRDU4LCBHUElPX0ZOX0hQRDU3LCBHUElPX0ZOX0hQRDU2LAorCUdQSU9fRk5fSFBENTUsIEdQSU9fRk5fSFBENTQsIEdQSU9fRk5fSFBENTMsIEdQSU9fRk5fSFBENTIsCisJR1BJT19GTl9IUEQ1MSwgR1BJT19GTl9IUEQ1MCwgR1BJT19GTl9IUEQ0OSwgR1BJT19GTl9IUEQ0OCwKKwlHUElPX0ZOX0hQRFFNNywgR1BJT19GTl9IUERRTTYsIEdQSU9fRk5fSFBEUU01LCBHUElPX0ZOX0hQRFFNNCwKKworCS8qIElSUSAqLworCUdQSU9fRk5fSVJRMCwgR1BJT19GTl9JUlExLCBHUElPX0ZOX0lSUTIsIEdQSU9fRk5fSVJRMywKKwlHUElPX0ZOX0lSUTQsIEdQSU9fRk5fSVJRNSwgR1BJT19GTl9JUlE2LCBHUElPX0ZOX0lSUTcsCisKKwkvKiBTREhJICovCisJR1BJT19GTl9TREhJQ0QsIEdQSU9fRk5fU0RISVdQLCBHUElPX0ZOX1NESElEMywgR1BJT19GTl9TREhJRDIsCisJR1BJT19GTl9TREhJRDEsIEdQSU9fRk5fU0RISUQwLCBHUElPX0ZOX1NESElDTUQsIEdQSU9fRk5fU0RISUNMSywKKworCS8qIFNJVSAtIFBvcnQgQSAqLworCUdQSU9fRk5fU0lVQU9MUiwgR1BJT19GTl9TSVVBT0JULCBHUElPX0ZOX1NJVUFJU0xELCBHUElPX0ZOX1NJVUFJTFIsCisJR1BJT19GTl9TSVVBSUJULCBHUElPX0ZOX1NJVUFPU0xELCBHUElPX0ZOX1NJVU1DS0EsIEdQSU9fRk5fU0lVRkNLQSwKKworCS8qIFNJVSAtIFBvcnQgQiAqLworCUdQSU9fRk5fU0lVQk9MUiwgR1BJT19GTl9TSVVCT0JULCBHUElPX0ZOX1NJVUJJU0xELCBHUElPX0ZOX1NJVUJJTFIsCisJR1BJT19GTl9TSVVCSUJULCBHUElPX0ZOX1NJVUJPU0xELCBHUElPX0ZOX1NJVU1DS0IsIEdQSU9fRk5fU0lVRkNLQiwKKworCS8qIEFVRCAqLworCUdQSU9fRk5fQVVEU1lOQywgR1BJT19GTl9BVURBVEEzLCBHUElPX0ZOX0FVREFUQTIsIEdQSU9fRk5fQVVEQVRBMSwKKwlHUElPX0ZOX0FVREFUQTAsCisKKwkvKiBETUFDICovCisJR1BJT19GTl9EQUNLLCBHUElPX0ZOX0RSRVEwLAorCisJLyogVk9VICovCisJR1BJT19GTl9EVl9DTEtJLCBHUElPX0ZOX0RWX0NMSywgR1BJT19GTl9EVl9IU1lOQywgR1BJT19GTl9EVl9WU1lOQywKKwlHUElPX0ZOX0RWX0QxNSwgR1BJT19GTl9EVl9EMTQsIEdQSU9fRk5fRFZfRDEzLCBHUElPX0ZOX0RWX0QxMiwKKwlHUElPX0ZOX0RWX0QxMSwgR1BJT19GTl9EVl9EMTAsIEdQSU9fRk5fRFZfRDksIEdQSU9fRk5fRFZfRDgsCisJR1BJT19GTl9EVl9ENywgR1BJT19GTl9EVl9ENiwgR1BJT19GTl9EVl9ENSwgR1BJT19GTl9EVl9ENCwKKwlHUElPX0ZOX0RWX0QzLCBHUElPX0ZOX0RWX0QyLCBHUElPX0ZOX0RWX0QxLCBHUElPX0ZOX0RWX0QwLAorCisJLyogQ1BHICovCisJR1BJT19GTl9TVEFUVVMwLCBHUElPX0ZOX1BEU1RBVFVTLAorCisJLyogU0lPRjAgKi8KKwlHUElPX0ZOX1NJT0YwX01DSywgR1BJT19GTl9TSU9GMF9TQ0ssCisJR1BJT19GTl9TSU9GMF9TWU5DLCBHUElPX0ZOX1NJT0YwX1NTMSwgR1BJT19GTl9TSU9GMF9TUzIsCisJR1BJT19GTl9TSU9GMF9UWEQsIEdQSU9fRk5fU0lPRjBfUlhELAorCisJLyogU0lPRjEgKi8KKwlHUElPX0ZOX1NJT0YxX01DSywgR1BJT19GTl9TSU9GMV9TQ0ssCisJR1BJT19GTl9TSU9GMV9TWU5DLCBHUElPX0ZOX1NJT0YxX1NTMSwgR1BJT19GTl9TSU9GMV9TUzIsCisJR1BJT19GTl9TSU9GMV9UWEQsIEdQSU9fRk5fU0lPRjFfUlhELAorCisJLyogU0lNICovCisJR1BJT19GTl9TSU1fRCwgR1BJT19GTl9TSU1fQ0xLLCBHUElPX0ZOX1NJTV9SU1QsCisKKwkvKiBUU0lGICovCisJR1BJT19GTl9UU19TREFULCBHUElPX0ZOX1RTX1NDSywgR1BJT19GTl9UU19TREVOLCBHUElPX0ZOX1RTX1NQU1lOQywKKworCS8qIElSREEgKi8KKwlHUElPX0ZOX0lSREFfSU4sIEdQSU9fRk5fSVJEQV9PVVQsCisKKwkvKiBUUFUgKi8KKwlHUElPX0ZOX1RQVVRPLAorCisJLyogRkxDVEwgKi8KKwlHUElPX0ZOX0ZDRSwgR1BJT19GTl9OQUY3LCBHUElPX0ZOX05BRjYsIEdQSU9fRk5fTkFGNSwgR1BJT19GTl9OQUY0LAorCUdQSU9fRk5fTkFGMywgR1BJT19GTl9OQUYyLCBHUElPX0ZOX05BRjEsIEdQSU9fRk5fTkFGMCwgR1BJT19GTl9GQ0RFLAorCUdQSU9fRk5fRk9FLCBHUElPX0ZOX0ZTQywgR1BJT19GTl9GV0UsIEdQSU9fRk5fRlJCLAorCisJLyogS0VZU0MgKi8KKwlHUElPX0ZOX0tFWUlOMCwgR1BJT19GTl9LRVlJTjEsIEdQSU9fRk5fS0VZSU4yLCBHUElPX0ZOX0tFWUlOMywKKwlHUElPX0ZOX0tFWUlONCwgR1BJT19GTl9LRVlPVVQwLCBHUElPX0ZOX0tFWU9VVDEsIEdQSU9fRk5fS0VZT1VUMiwKKwlHUElPX0ZOX0tFWU9VVDMsIEdQSU9fRk5fS0VZT1VUNF9JTjYsIEdQSU9fRk5fS0VZT1VUNV9JTjUsCit9OworCisjZW5kaWYgLyogX19BU01fU0g3NzIyX0hfXyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2NwdS1zaDQvY3B1L3NoNzcyMy5oIGIvYXJjaC9zaC9pbmNsdWRlL2NwdS1zaDQvY3B1L3NoNzcyMy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkMmY2ZDcKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3NoL2luY2x1ZGUvY3B1LXNoNC9jcHUvc2g3NzIzLmgKQEAgLTAsMCArMSwyNTQgQEAKKyNpZm5kZWYgX19BU01fU0g3NzIzX0hfXworI2RlZmluZSBfX0FTTV9TSDc3MjNfSF9fCisKK2VudW0geworCS8qIFBUQSAqLworCUdQSU9fUFRBNywgR1BJT19QVEE2LCBHUElPX1BUQTUsIEdQSU9fUFRBNCwKKwlHUElPX1BUQTMsIEdQSU9fUFRBMiwgR1BJT19QVEExLCBHUElPX1BUQTAsCisKKwkvKiBQVEIgKi8KKwlHUElPX1BUQjcsIEdQSU9fUFRCNiwgR1BJT19QVEI1LCBHUElPX1BUQjQsCisJR1BJT19QVEIzLCBHUElPX1BUQjIsIEdQSU9fUFRCMSwgR1BJT19QVEIwLAorCisJLyogUFRDICovCisJR1BJT19QVEM3LCBHUElPX1BUQzYsIEdQSU9fUFRDNSwgR1BJT19QVEM0LAorCUdQSU9fUFRDMywgR1BJT19QVEMyLCBHUElPX1BUQzEsIEdQSU9fUFRDMCwKKworCS8qIFBURCAqLworCUdQSU9fUFRENywgR1BJT19QVEQ2LCBHUElPX1BURDUsIEdQSU9fUFRENCwKKwlHUElPX1BURDMsIEdQSU9fUFREMiwgR1BJT19QVEQxLCBHUElPX1BURDAsCisKKwkvKiBQVEUgKi8KKwlHUElPX1BURTUsIEdQSU9fUFRFNCwgR1BJT19QVEUzLCBHUElPX1BURTIsCisJR1BJT19QVEUxLCBHUElPX1BURTAsCisKKwkvKiBQVEYgKi8KKwlHUElPX1BURjcsIEdQSU9fUFRGNiwgR1BJT19QVEY1LCBHUElPX1BURjQsCisJR1BJT19QVEYzLCBHUElPX1BURjIsIEdQSU9fUFRGMSwgR1BJT19QVEYwLAorCisJLyogUFRHICovCisJR1BJT19QVEc1LCBHUElPX1BURzQsIEdQSU9fUFRHMywgR1BJT19QVEcyLAorCUdQSU9fUFRHMSwgR1BJT19QVEcwLAorCisJLyogUFRIICovCisJR1BJT19QVEg3LCBHUElPX1BUSDYsIEdQSU9fUFRINSwgR1BJT19QVEg0LAorCUdQSU9fUFRIMywgR1BJT19QVEgyLCBHUElPX1BUSDEsIEdQSU9fUFRIMCwKKworCS8qIFBUSiAqLworCUdQSU9fUFRKNywgR1BJT19QVEo1LCBHUElPX1BUSjMsIEdQSU9fUFRKMiwKKwlHUElPX1BUSjEsIEdQSU9fUFRKMCwKKworCS8qIFBUSyAqLworCUdQSU9fUFRLNywgR1BJT19QVEs2LCBHUElPX1BUSzUsIEdQSU9fUFRLNCwKKwlHUElPX1BUSzMsIEdQSU9fUFRLMiwgR1BJT19QVEsxLCBHUElPX1BUSzAsCisKKwkvKiBQVEwgKi8KKwlHUElPX1BUTDcsIEdQSU9fUFRMNiwgR1BJT19QVEw1LCBHUElPX1BUTDQsCisJR1BJT19QVEwzLCBHUElPX1BUTDIsIEdQSU9fUFRMMSwgR1BJT19QVEwwLAorCisJLyogUFRNICovCisJR1BJT19QVE03LCBHUElPX1BUTTYsIEdQSU9fUFRNNSwgR1BJT19QVE00LAorCUdQSU9fUFRNMywgR1BJT19QVE0yLCBHUElPX1BUTTEsIEdQSU9fUFRNMCwKKworCS8qIFBUTiAqLworCUdQSU9fUFRONywgR1BJT19QVE42LCBHUElPX1BUTjUsIEdQSU9fUFRONCwKKwlHUElPX1BUTjMsIEdQSU9fUFROMiwgR1BJT19QVE4xLCBHUElPX1BUTjAsCisKKwkvKiBQVFEgKi8KKwlHUElPX1BUUTMsIEdQSU9fUFRRMiwgR1BJT19QVFExLCBHUElPX1BUUTAsCisKKwkvKiBQVFIgKi8KKwlHUElPX1BUUjcsIEdQSU9fUFRSNiwgR1BJT19QVFI1LCBHUElPX1BUUjQsCisJR1BJT19QVFIzLCBHUElPX1BUUjIsIEdQSU9fUFRSMSwgR1BJT19QVFIwLAorCisJLyogUFRTICovCisJR1BJT19QVFM3LCBHUElPX1BUUzYsIEdQSU9fUFRTNSwgR1BJT19QVFM0LAorCUdQSU9fUFRTMywgR1BJT19QVFMyLCBHUElPX1BUUzEsIEdQSU9fUFRTMCwKKworCS8qIFBUVCAqLworCUdQSU9fUFRUNSwgR1BJT19QVFQ0LCBHUElPX1BUVDMsIEdQSU9fUFRUMiwKKwlHUElPX1BUVDEsIEdQSU9fUFRUMCwKKworCS8qIFBUVSAqLworCUdQSU9fUFRVNSwgR1BJT19QVFU0LCBHUElPX1BUVTMsIEdQSU9fUFRVMiwKKwlHUElPX1BUVTEsIEdQSU9fUFRVMCwKKworCS8qIFBUViAqLworCUdQSU9fUFRWNywgR1BJT19QVFY2LCBHUElPX1BUVjUsIEdQSU9fUFRWNCwKKwlHUElPX1BUVjMsIEdQSU9fUFRWMiwgR1BJT19QVFYxLCBHUElPX1BUVjAsCisKKwkvKiBQVFcgKi8KKwlHUElPX1BUVzcsIEdQSU9fUFRXNiwgR1BJT19QVFc1LCBHUElPX1BUVzQsCisJR1BJT19QVFczLCBHUElPX1BUVzIsIEdQSU9fUFRXMSwgR1BJT19QVFcwLAorCisJLyogUFRYICovCisJR1BJT19QVFg3LCBHUElPX1BUWDYsIEdQSU9fUFRYNSwgR1BJT19QVFg0LAorCUdQSU9fUFRYMywgR1BJT19QVFgyLCBHUElPX1BUWDEsIEdQSU9fUFRYMCwKKworCS8qIFBUWSAqLworCUdQSU9fUFRZNywgR1BJT19QVFk2LCBHUElPX1BUWTUsIEdQSU9fUFRZNCwKKwlHUElPX1BUWTMsIEdQSU9fUFRZMiwgR1BJT19QVFkxLCBHUElPX1BUWTAsCisKKwkvKiBQVFogKi8KKwlHUElPX1BUWjcsIEdQSU9fUFRaNiwgR1BJT19QVFo1LCBHUElPX1BUWjQsCisJR1BJT19QVFozLCBHUElPX1BUWjIsIEdQSU9fUFRaMSwgR1BJT19QVFowLAorCisJLyogU0NJRjAgKFNDSUY6IDMgcGluIFBUVC9QVFUpICovCisJR1BJT19GTl9TQ0lGMF9QVFRfVFhELCBHUElPX0ZOX1NDSUYwX1BUVF9SWEQsIEdQSU9fRk5fU0NJRjBfUFRUX1NDSywKKwlHUElPX0ZOX1NDSUYwX1BUVV9UWEQsIEdQSU9fRk5fU0NJRjBfUFRVX1JYRCwgR1BJT19GTl9TQ0lGMF9QVFVfU0NLLAorCisJLyogU0NJRjEgKFNDSUY6IDMgcGluIFBUUy9QVFYpICovCisJR1BJT19GTl9TQ0lGMV9QVFNfVFhELCBHUElPX0ZOX1NDSUYxX1BUU19SWEQsIEdQSU9fRk5fU0NJRjFfUFRTX1NDSywKKwlHUElPX0ZOX1NDSUYxX1BUVl9UWEQsIEdQSU9fRk5fU0NJRjFfUFRWX1JYRCwgR1BJT19GTl9TQ0lGMV9QVFZfU0NLLAorCisJLyogU0NJRjIgKFNDSUY6IDMgcGluIFBUVC9QVFUpICovCisJR1BJT19GTl9TQ0lGMl9QVFRfVFhELCBHUElPX0ZOX1NDSUYyX1BUVF9SWEQsIEdQSU9fRk5fU0NJRjJfUFRUX1NDSywKKwlHUElPX0ZOX1NDSUYyX1BUVV9UWEQsIEdQSU9fRk5fU0NJRjJfUFRVX1JYRCwgR1BJT19GTl9TQ0lGMl9QVFVfU0NLLAorCisJLyogU0NJRjMgKFNDSUZBOiA1IHBpbiBQVFMvUFRWKSAqLworCUdQSU9fRk5fU0NJRjNfUFRTX1RYRCwgR1BJT19GTl9TQ0lGM19QVFNfUlhELCBHUElPX0ZOX1NDSUYzX1BUU19TQ0ssCisJR1BJT19GTl9TQ0lGM19QVFNfUlRTLCBHUElPX0ZOX1NDSUYzX1BUU19DVFMsCisJR1BJT19GTl9TQ0lGM19QVFZfVFhELCBHUElPX0ZOX1NDSUYzX1BUVl9SWEQsIEdQSU9fRk5fU0NJRjNfUFRWX1NDSywKKwlHUElPX0ZOX1NDSUYzX1BUVl9SVFMsIEdQSU9fRk5fU0NJRjNfUFRWX0NUUywKKworCS8qIFNDSUY0IChTQ0lGQTogMyBwaW4gUFRFL1BUTikgKi8KKwlHUElPX0ZOX1NDSUY0X1BURV9UWEQsIEdQSU9fRk5fU0NJRjRfUFRFX1JYRCwgR1BJT19GTl9TQ0lGNF9QVEVfU0NLLAorCUdQSU9fRk5fU0NJRjRfUFROX1RYRCwgR1BJT19GTl9TQ0lGNF9QVE5fUlhELCBHUElPX0ZOX1NDSUY0X1BUTl9TQ0ssCisKKwkvKiBTQ0lGNSAoU0NJRkE6IDMgcGluIFBURS9QVE4pICovCisJR1BJT19GTl9TQ0lGNV9QVEVfVFhELCBHUElPX0ZOX1NDSUY1X1BURV9SWEQsIEdQSU9fRk5fU0NJRjVfUFRFX1NDSywKKwlHUElPX0ZOX1NDSUY1X1BUTl9UWEQsIEdQSU9fRk5fU0NJRjVfUFROX1JYRCwgR1BJT19GTl9TQ0lGNV9QVE5fU0NLLAorCisJLyogQ0VVICovCisJR1BJT19GTl9WSU9fRDE1LCBHUElPX0ZOX1ZJT19EMTQsIEdQSU9fRk5fVklPX0QxMywgR1BJT19GTl9WSU9fRDEyLAorCUdQSU9fRk5fVklPX0QxMSwgR1BJT19GTl9WSU9fRDEwLCBHUElPX0ZOX1ZJT19EOSwgR1BJT19GTl9WSU9fRDgsCisJR1BJT19GTl9WSU9fRDcsIEdQSU9fRk5fVklPX0Q2LCBHUElPX0ZOX1ZJT19ENSwgR1BJT19GTl9WSU9fRDQsCisJR1BJT19GTl9WSU9fRDMsIEdQSU9fRk5fVklPX0QyLCBHUElPX0ZOX1ZJT19EMSwgR1BJT19GTl9WSU9fRDAsCisJR1BJT19GTl9WSU9fRkxELCBHUElPX0ZOX1ZJT19DS08sCisJR1BJT19GTl9WSU9fVkQxLCBHUElPX0ZOX1ZJT19IRDEsIEdQSU9fRk5fVklPX0NMSzEsCisJR1BJT19GTl9WSU9fVkQyLCBHUElPX0ZOX1ZJT19IRDIsIEdQSU9fRk5fVklPX0NMSzIsCisKKwkvKiBMQ0RDICovCisJR1BJT19GTl9MQ0REMjMsIEdQSU9fRk5fTENERDIyLCBHUElPX0ZOX0xDREQyMSwgR1BJT19GTl9MQ0REMjAsCisJR1BJT19GTl9MQ0REMTksIEdQSU9fRk5fTENERDE4LCBHUElPX0ZOX0xDREQxNywgR1BJT19GTl9MQ0REMTYsCisJR1BJT19GTl9MQ0REMTUsIEdQSU9fRk5fTENERDE0LCBHUElPX0ZOX0xDREQxMywgR1BJT19GTl9MQ0REMTIsCisJR1BJT19GTl9MQ0REMTEsIEdQSU9fRk5fTENERDEwLCBHUElPX0ZOX0xDREQ5LCBHUElPX0ZOX0xDREQ4LAorCUdQSU9fRk5fTENERDcsIEdQSU9fRk5fTENERDYsIEdQSU9fRk5fTENERDUsIEdQSU9fRk5fTENERDQsCisJR1BJT19GTl9MQ0REMywgR1BJT19GTl9MQ0REMiwgR1BJT19GTl9MQ0REMSwgR1BJT19GTl9MQ0REMCwKKwlHUElPX0ZOX0xDRExDTEtfUFRSLCBHUElPX0ZOX0xDRExDTEtfUFRXLAorCS8qIE1haW4gTENEICovCisJR1BJT19GTl9MQ0RET04sIEdQSU9fRk5fTENEVkNQV0MsIEdQSU9fRk5fTENEVkVQV0MsIEdQSU9fRk5fTENEVlNZTiwKKwkvKiBNYWluIExDRCAtIFJHQiBNb2RlICovCisJR1BJT19GTl9MQ0REQ0ssIEdQSU9fRk5fTENESFNZTiwgR1BJT19GTl9MQ0RESVNQLAorCS8qIE1haW4gTENEIC0gU1lTIE1vZGUgKi8KKwlHUElPX0ZOX0xDRFJTLCBHUElPX0ZOX0xDRENTLCBHUElPX0ZOX0xDRFdSLCBHUElPX0ZOX0xDRFJELAorCisJLyogSVJRICovCisJR1BJT19GTl9JUlEwLCBHUElPX0ZOX0lSUTEsIEdQSU9fRk5fSVJRMiwgR1BJT19GTl9JUlEzLAorCUdQSU9fRk5fSVJRNCwgR1BJT19GTl9JUlE1LCBHUElPX0ZOX0lSUTYsIEdQSU9fRk5fSVJRNywKKworCS8qIEFVRCAqLworCUdQSU9fRk5fQVVEQVRBMywgR1BJT19GTl9BVURBVEEyLCBHUElPX0ZOX0FVREFUQTEsIEdQSU9fRk5fQVVEQVRBMCwKKwlHUElPX0ZOX0FVRENLLCBHUElPX0ZOX0FVRFNZTkMsCisKKwkvKiBTREhJMCAoUFREKSAqLworCUdQSU9fRk5fU0RISTBDRF9QVEQsIEdQSU9fRk5fU0RISTBXUF9QVEQsCisJR1BJT19GTl9TREhJMEQzX1BURCwgR1BJT19GTl9TREhJMEQyX1BURCwKKwlHUElPX0ZOX1NESEkwRDFfUFRELCBHUElPX0ZOX1NESEkwRDBfUFRELAorCUdQSU9fRk5fU0RISTBDTURfUFRELCBHUElPX0ZOX1NESEkwQ0xLX1BURCwKKworCS8qIFNESEkwIChQVFMpICovCisJR1BJT19GTl9TREhJMENEX1BUUywgR1BJT19GTl9TREhJMFdQX1BUUywKKwlHUElPX0ZOX1NESEkwRDNfUFRTLCBHUElPX0ZOX1NESEkwRDJfUFRTLAorCUdQSU9fRk5fU0RISTBEMV9QVFMsIEdQSU9fRk5fU0RISTBEMF9QVFMsCisJR1BJT19GTl9TREhJMENNRF9QVFMsIEdQSU9fRk5fU0RISTBDTEtfUFRTLAorCisJLyogU0RISTEgKi8KKwlHUElPX0ZOX1NESEkxQ0QsIEdQSU9fRk5fU0RISTFXUCwgR1BJT19GTl9TREhJMUQzLCBHUElPX0ZOX1NESEkxRDIsCisJR1BJT19GTl9TREhJMUQxLCBHUElPX0ZOX1NESEkxRDAsIEdQSU9fRk5fU0RISTFDTUQsIEdQSU9fRk5fU0RISTFDTEssCisKKwkvKiBTSVVBICovCisJR1BJT19GTl9TSVVBRkNLLCBHUElPX0ZOX1NJVUFJTFIsIEdQSU9fRk5fU0lVQUlCVCwgR1BJT19GTl9TSVVBSVNMRCwKKwlHUElPX0ZOX1NJVUFPTFIsIEdQSU9fRk5fU0lVQU9CVCwgR1BJT19GTl9TSVVBT1NMRCwgR1BJT19GTl9TSVVBTUNLLAorCUdQSU9fRk5fU0lVQUlTUEQsIEdQSU9fRk5fU0lVT1NQRCwKKworCS8qIFNJVUIgKi8KKwlHUElPX0ZOX1NJVUJGQ0ssIEdQSU9fRk5fU0lVQklMUiwgR1BJT19GTl9TSVVCSUJULCBHUElPX0ZOX1NJVUJJU0xELAorCUdQSU9fRk5fU0lVQk9MUiwgR1BJT19GTl9TSVVCT0JULCBHUElPX0ZOX1NJVUJPU0xELCBHUElPX0ZOX1NJVUJNQ0ssCisKKwkvKiBJUkRBICovCisJR1BJT19GTl9JUkRBX0lOLCBHUElPX0ZOX0lSREFfT1VULAorCisJLyogVk9VICovCisJR1BJT19GTl9EVl9DTEtJLCBHUElPX0ZOX0RWX0NMSywgR1BJT19GTl9EVl9IU1lOQywgR1BJT19GTl9EVl9WU1lOQywKKwlHUElPX0ZOX0RWX0QxNSwgR1BJT19GTl9EVl9EMTQsIEdQSU9fRk5fRFZfRDEzLCBHUElPX0ZOX0RWX0QxMiwKKwlHUElPX0ZOX0RWX0QxMSwgR1BJT19GTl9EVl9EMTAsIEdQSU9fRk5fRFZfRDksIEdQSU9fRk5fRFZfRDgsCisJR1BJT19GTl9EVl9ENywgR1BJT19GTl9EVl9ENiwgR1BJT19GTl9EVl9ENSwgR1BJT19GTl9EVl9ENCwKKwlHUElPX0ZOX0RWX0QzLCBHUElPX0ZOX0RWX0QyLCBHUElPX0ZOX0RWX0QxLCBHUElPX0ZOX0RWX0QwLAorCisJLyogS0VZU0MgKi8KKwlHUElPX0ZOX0tFWUlOMCwgR1BJT19GTl9LRVlJTjEsIEdQSU9fRk5fS0VZSU4yLCBHUElPX0ZOX0tFWUlOMywKKwlHUElPX0ZOX0tFWUlONCwgR1BJT19GTl9LRVlPVVQwLCBHUElPX0ZOX0tFWU9VVDEsIEdQSU9fRk5fS0VZT1VUMiwKKwlHUElPX0ZOX0tFWU9VVDMsIEdQSU9fRk5fS0VZT1VUNF9JTjYsIEdQSU9fRk5fS0VZT1VUNV9JTjUsCisKKwkvKiBNU0lPRjAgKFBURikgKi8KKwlHUElPX0ZOX01TSU9GMF9QVEZfVFhELCBHUElPX0ZOX01TSU9GMF9QVEZfUlhELCBHUElPX0ZOX01TSU9GMF9QVEZfTUNLLAorCUdQSU9fRk5fTVNJT0YwX1BURl9UU1lOQywgR1BJT19GTl9NU0lPRjBfUFRGX1RTQ0ssCisJR1BJT19GTl9NU0lPRjBfUFRGX1JTWU5DLCBHUElPX0ZOX01TSU9GMF9QVEZfUlNDSywKKwlHUElPX0ZOX01TSU9GMF9QVEZfU1MxLCBHUElPX0ZOX01TSU9GMF9QVEZfU1MyLAorCisJLyogTVNJT0YwIChQVFQrUFRYKSAqLworCUdQSU9fRk5fTVNJT0YwX1BUVF9UWEQsIEdQSU9fRk5fTVNJT0YwX1BUVF9SWEQsIEdQSU9fRk5fTVNJT0YwX1BUWF9NQ0ssCisJR1BJT19GTl9NU0lPRjBfUFRUX1RTWU5DLCBHUElPX0ZOX01TSU9GMF9QVFRfVFNDSywKKwlHUElPX0ZOX01TSU9GMF9QVFRfUlNZTkMsIEdQSU9fRk5fTVNJT0YwX1BUVF9SU0NLLAorCUdQSU9fRk5fTVNJT0YwX1BUVF9TUzEsIEdQSU9fRk5fTVNJT0YwX1BUVF9TUzIsCisKKwkvKiBNU0lPRjEgKi8KKwlHUElPX0ZOX01TSU9GMV9UWEQsIEdQSU9fRk5fTVNJT0YxX1JYRCwgR1BJT19GTl9NU0lPRjFfTUNLLAorCUdQSU9fRk5fTVNJT0YxX1RTWU5DLCBHUElPX0ZOX01TSU9GMV9UU0NLLAorCUdQSU9fRk5fTVNJT0YxX1JTWU5DLCBHUElPX0ZOX01TSU9GMV9SU0NLLAorCUdQSU9fRk5fTVNJT0YxX1NTMSwgR1BJT19GTl9NU0lPRjFfU1MyLAorCisJLyogVFNJRiAqLworCUdQSU9fRk5fVFMwX1NEQVQsIEdQSU9fRk5fVFMwX1NDSywgR1BJT19GTl9UUzBfU0RFTiwgR1BJT19GTl9UUzBfU1BTWU5DLAorCisJLyogRkxDVEwgKi8KKwlHUElPX0ZOX0ZDRSwgR1BJT19GTl9OQUY3LCBHUElPX0ZOX05BRjYsIEdQSU9fRk5fTkFGNSwgR1BJT19GTl9OQUY0LAorCUdQSU9fRk5fTkFGMywgR1BJT19GTl9OQUYyLCBHUElPX0ZOX05BRjEsIEdQSU9fRk5fTkFGMCwgR1BJT19GTl9GQ0RFLAorCUdQSU9fRk5fRk9FLCBHUElPX0ZOX0ZTQywgR1BJT19GTl9GV0UsIEdQSU9fRk5fRlJCLAorCisJLyogRE1BQyAqLworCUdQSU9fRk5fREFDSzEsIEdQSU9fRk5fRFJFUTEsIEdQSU9fRk5fREFDSzAsIEdQSU9fRk5fRFJFUTAsCisKKwkvKiBBREMgKi8KKwlHUElPX0ZOX0FOMywgR1BJT19GTl9BTjIsIEdQSU9fRk5fQU4xLCBHUElPX0ZOX0FOMCwgR1BJT19GTl9BRFRSRywKKworCS8qIENQRyAqLworCUdQSU9fRk5fU1RBVFVTMCwgR1BJT19GTl9QRFNUQVRVUywKKworCS8qIFRQVSAqLworCUdQSU9fRk5fVFBVVE8zLCBHUElPX0ZOX1RQVVRPMiwgR1BJT19GTl9UUFVUTzEsIEdQSU9fRk5fVFBVVE8wLAorCisJLyogQlNDICovCisJR1BJT19GTl9EMzEsIEdQSU9fRk5fRDMwLCBHUElPX0ZOX0QyOSwgR1BJT19GTl9EMjgsCisJR1BJT19GTl9EMjcsIEdQSU9fRk5fRDI2LCBHUElPX0ZOX0QyNSwgR1BJT19GTl9EMjQsCisJR1BJT19GTl9EMjMsIEdQSU9fRk5fRDIyLCBHUElPX0ZOX0QyMSwgR1BJT19GTl9EMjAsCisJR1BJT19GTl9EMTksIEdQSU9fRk5fRDE4LCBHUElPX0ZOX0QxNywgR1BJT19GTl9EMTYsCisJR1BJT19GTl9JT0lTMTYsIEdQSU9fRk5fV0FJVCwgR1BJT19GTl9CUywKKwlHUElPX0ZOX0EyNSwgR1BJT19GTl9BMjQsIEdQSU9fRk5fQTIzLCBHUElPX0ZOX0EyMiwKKwlHUElPX0ZOX0NTNkJfQ0UxQiwgR1BJT19GTl9DUzZBX0NFMkIsCisJR1BJT19GTl9DUzVCX0NFMUEsIEdQSU9fRk5fQ1M1QV9DRTJBLAorCUdQSU9fRk5fV0UzX0lDSU9XUiwgR1BJT19GTl9XRTJfSUNJT1JELAorCisJLyogQVRBUEkgKi8KKwlHUElPX0ZOX0lERUQxNSwgR1BJT19GTl9JREVEMTQsIEdQSU9fRk5fSURFRDEzLCBHUElPX0ZOX0lERUQxMiwKKwlHUElPX0ZOX0lERUQxMSwgR1BJT19GTl9JREVEMTAsIEdQSU9fRk5fSURFRDksIEdQSU9fRk5fSURFRDgsCisJR1BJT19GTl9JREVENywgR1BJT19GTl9JREVENiwgR1BJT19GTl9JREVENSwgR1BJT19GTl9JREVENCwKKwlHUElPX0ZOX0lERUQzLCBHUElPX0ZOX0lERUQyLCBHUElPX0ZOX0lERUQxLCBHUElPX0ZOX0lERUQwLAorCUdQSU9fRk5fRElSRUNUSU9OLCBHUElPX0ZOX0VYQlVGX0VOQiwgR1BJT19GTl9JREVSU1QsIEdQSU9fRk5fSU9EQUNLLAorCUdQSU9fRk5fSU9EUkVRLCBHUElPX0ZOX0lERUlPUkRZLCBHUElPX0ZOX0lERUlOVCwgR1BJT19GTl9JREVJT1dSLAorCUdQSU9fRk5fSURFSU9SRCwgR1BJT19GTl9JREVDUzEsIEdQSU9fRk5fSURFQ1MwLCBHUElPX0ZOX0lERUEyLAorCUdQSU9fRk5fSURFQTEsIEdQSU9fRk5fSURFQTAsCit9OworCisjZW5kaWYgLyogX19BU01fU0g3NzIzX0hfXyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9lZG9zazc3MDUuaCBiL2FyY2gvc2gvaW5jbHVkZS9tYWNoLWNvbW1vbi9tYWNoL2Vkb3NrNzcwNS5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBhcmNoL3NoL2luY2x1ZGUvYXNtL2Vkb3NrNzcwNS5oCnJlbmFtZSB0byBhcmNoL3NoL2luY2x1ZGUvbWFjaC1jb21tb24vbWFjaC9lZG9zazc3MDUuaApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9yNzc4MHJwLmggYi9hcmNoL3NoL2luY2x1ZGUvbWFjaC1jb21tb24vbWFjaC9oaWdobGFuZGVyLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFyY2gvc2gvaW5jbHVkZS9hc20vcjc3ODBycC5oCnJlbmFtZSB0byBhcmNoL3NoL2luY2x1ZGUvbWFjaC1jb21tb24vbWFjaC9oaWdobGFuZGVyLmgKZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vaHA2eHguaCBiL2FyY2gvc2gvaW5jbHVkZS9tYWNoLWNvbW1vbi9tYWNoL2hwNnh4LmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFyY2gvc2gvaW5jbHVkZS9hc20vaHA2eHguaApyZW5hbWUgdG8gYXJjaC9zaC9pbmNsdWRlL21hY2gtY29tbW9uL21hY2gvaHA2eHguaApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9sYm94cmUyLmggYi9hcmNoL3NoL2luY2x1ZGUvbWFjaC1jb21tb24vbWFjaC9sYm94cmUyLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFyY2gvc2gvaW5jbHVkZS9hc20vbGJveHJlMi5oCnJlbmFtZSB0byBhcmNoL3NoL2luY2x1ZGUvbWFjaC1jb21tb24vbWFjaC9sYm94cmUyLmgKZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vbWFnaWNwYW5lbHIyLmggYi9hcmNoL3NoL2luY2x1ZGUvbWFjaC1jb21tb24vbWFjaC9tYWdpY3BhbmVscjIuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYXJjaC9zaC9pbmNsdWRlL2FzbS9tYWdpY3BhbmVscjIuaApyZW5hbWUgdG8gYXJjaC9zaC9pbmNsdWRlL21hY2gtY29tbW9uL21hY2gvbWFnaWNwYW5lbHIyLmgKZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vbWljcm9kZXYuaCBiL2FyY2gvc2gvaW5jbHVkZS9tYWNoLWNvbW1vbi9tYWNoL21pY3JvZGV2LmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFyY2gvc2gvaW5jbHVkZS9hc20vbWljcm9kZXYuaApyZW5hbWUgdG8gYXJjaC9zaC9pbmNsdWRlL21hY2gtY29tbW9uL21hY2gvbWljcm9kZXYuaApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL21hY2gtY29tbW9uL21hY2gvbWlnb3IuaCBiL2FyY2gvc2gvaW5jbHVkZS9tYWNoLWNvbW1vbi9tYWNoL21pZ29yLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTQ1MWYwMgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9tYWNoLWNvbW1vbi9tYWNoL21pZ29yLmgKQEAgLTAsMCArMSw2NCBAQAorI2lmbmRlZiBfX0FTTV9TSF9NSUdPUl9ICisjZGVmaW5lIF9fQVNNX1NIX01JR09SX0gKKworLyoKKyAqIGxpbnV4L2luY2x1ZGUvYXNtLXNoL21pZ29yLmgKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggUmVuZXNhcyBTb2x1dGlvbnMKKyAqCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKEMpIDIwMDcgTm9idWhpcm8gSXdhbWF0c3UKKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqLworI2luY2x1ZGUgPGFzbS9hZGRyc3BhY2UuaD4KKworLyogR1BJTyAqLworI2RlZmluZSBQT1JUX1BBQ1IgMHhhNDA1MDEwMAorI2RlZmluZSBQT1JUX1BEQ1IgMHhhNDA1MDEwNgorI2RlZmluZSBQT1JUX1BFQ1IgMHhhNDA1MDEwOAorI2RlZmluZSBQT1JUX1BIQ1IgMHhhNDA1MDEwZQorI2RlZmluZSBQT1JUX1BKQ1IgMHhhNDA1MDExMAorI2RlZmluZSBQT1JUX1BLQ1IgMHhhNDA1MDExMgorI2RlZmluZSBQT1JUX1BMQ1IgMHhhNDA1MDExNAorI2RlZmluZSBQT1JUX1BNQ1IgMHhhNDA1MDExNgorI2RlZmluZSBQT1JUX1BSQ1IgMHhhNDA1MDExYworI2RlZmluZSBQT1JUX1BUQ1IgMHhhNDA1MDE0MAorI2RlZmluZSBQT1JUX1BVQ1IgMHhhNDA1MDE0MgorI2RlZmluZSBQT1JUX1BWQ1IgMHhhNDA1MDE0NAorI2RlZmluZSBQT1JUX1BXQ1IgMHhhNDA1MDE0NgorI2RlZmluZSBQT1JUX1BYQ1IgMHhhNDA1MDE0OAorI2RlZmluZSBQT1JUX1BZQ1IgMHhhNDA1MDE0YQorI2RlZmluZSBQT1JUX1BaQ1IgMHhhNDA1MDE0YworI2RlZmluZSBQT1JUX1BBRFIgMHhhNDA1MDEyMAorI2RlZmluZSBQT1JUX1BIRFIgMHhhNDA1MDEyZQorI2RlZmluZSBQT1JUX1BURFIgMHhhNDA1MDE2MAorI2RlZmluZSBQT1JUX1BXRFIgMHhhNDA1MDE2NgorCisjZGVmaW5lIFBPUlRfSElaQ1JBIDB4YTQwNTAxNTgKKyNkZWZpbmUgUE9SVF9ISVpDUkMgMHhhNDA1MDE1YworCisjZGVmaW5lIFBPUlRfTVNFTENSQiAweGE0MDUwMTgyCisKKyNkZWZpbmUgUE9SVF9QU0VMQSAweGE0MDUwMTRlCisjZGVmaW5lIFBPUlRfUFNFTEIgMHhhNDA1MDE1MAorI2RlZmluZSBQT1JUX1BTRUxDIDB4YTQwNTAxNTIKKyNkZWZpbmUgUE9SVF9QU0VMRCAweGE0MDUwMTU0CisjZGVmaW5lIFBPUlRfUFNFTEUgMHhhNDA1MDE1NgorCisjZGVmaW5lIFBPUlRfSElaQ1JBIDB4YTQwNTAxNTgKKyNkZWZpbmUgUE9SVF9ISVpDUkIgMHhhNDA1MDE1YQorI2RlZmluZSBQT1JUX0hJWkNSQyAweGE0MDUwMTVjCisKKyNkZWZpbmUgQlNDX0NTNEJDUiAweGZlYzEwMDEwCisjZGVmaW5lIEJTQ19DUzZBQkNSIDB4ZmVjMTAwMWMKKyNkZWZpbmUgQlNDX0NTNFdDUiAweGZlYzEwMDMwCisKKyNpbmNsdWRlIDx2aWRlby9zaF9tb2JpbGVfbGNkYy5oPgorCitpbnQgbWlnb3JfbGNkX3F2Z2Ffc2V0dXAodm9pZCAqYm9hcmRfZGF0YSwgdm9pZCAqc3lzX29wc19oYW5kbGUsCisJCQkgc3RydWN0IHNoX21vYmlsZV9sY2RjX3N5c19idXNfb3BzICpzeXNfb3BzKTsKKworI2VuZGlmIC8qIF9fQVNNX1NIX01JR09SX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vcnRzNzc1MXIyZC5oIGIvYXJjaC9zaC9pbmNsdWRlL21hY2gtY29tbW9uL21hY2gvcjJkLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFyY2gvc2gvaW5jbHVkZS9hc20vcnRzNzc1MXIyZC5oCnJlbmFtZSB0byBhcmNoL3NoL2luY2x1ZGUvbWFjaC1jb21tb24vbWFjaC9yMmQuaApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9zZGs3NzgwLmggYi9hcmNoL3NoL2luY2x1ZGUvbWFjaC1jb21tb24vbWFjaC9zZGs3NzgwLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFyY2gvc2gvaW5jbHVkZS9hc20vc2RrNzc4MC5oCnJlbmFtZSB0byBhcmNoL3NoL2luY2x1ZGUvbWFjaC1jb21tb24vbWFjaC9zZGs3NzgwLmgKZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vc2g3NzYzcmRwLmggYi9hcmNoL3NoL2luY2x1ZGUvbWFjaC1jb21tb24vbWFjaC9zaDc3NjNyZHAuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYXJjaC9zaC9pbmNsdWRlL2FzbS9zaDc3NjNyZHAuaApyZW5hbWUgdG8gYXJjaC9zaC9pbmNsdWRlL21hY2gtY29tbW9uL21hY2gvc2g3NzYzcmRwLmgKZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vc2g3Nzg1bGNyLmggYi9hcmNoL3NoL2luY2x1ZGUvbWFjaC1jb21tb24vbWFjaC9zaDc3ODVsY3IuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYXJjaC9zaC9pbmNsdWRlL2FzbS9zaDc3ODVsY3IuaApyZW5hbWUgdG8gYXJjaC9zaC9pbmNsdWRlL21hY2gtY29tbW9uL21hY2gvc2g3Nzg1bGNyLmgKZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vc2htaW4uaCBiL2FyY2gvc2gvaW5jbHVkZS9tYWNoLWNvbW1vbi9tYWNoL3NobWluLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFyY2gvc2gvaW5jbHVkZS9hc20vc2htaW4uaApyZW5hbWUgdG8gYXJjaC9zaC9pbmNsdWRlL21hY2gtY29tbW9uL21hY2gvc2htaW4uaApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9zbmFwZ2Vhci5oIGIvYXJjaC9zaC9pbmNsdWRlL21hY2gtY29tbW9uL21hY2gvc25hcGdlYXIuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYXJjaC9zaC9pbmNsdWRlL2FzbS9zbmFwZ2Vhci5oCnJlbmFtZSB0byBhcmNoL3NoL2luY2x1ZGUvbWFjaC1jb21tb24vbWFjaC9zbmFwZ2Vhci5oCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3N5c3RlbWg3NzUxLmggYi9hcmNoL3NoL2luY2x1ZGUvbWFjaC1jb21tb24vbWFjaC9zeXN0ZW1oNzc1MS5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBhcmNoL3NoL2luY2x1ZGUvYXNtL3N5c3RlbWg3NzUxLmgKcmVuYW1lIHRvIGFyY2gvc2gvaW5jbHVkZS9tYWNoLWNvbW1vbi9tYWNoL3N5c3RlbWg3NzUxLmgKZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vdGl0YW4uaCBiL2FyY2gvc2gvaW5jbHVkZS9tYWNoLWNvbW1vbi9tYWNoL3RpdGFuLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFyY2gvc2gvaW5jbHVkZS9hc20vdGl0YW4uaApyZW5hbWUgdG8gYXJjaC9zaC9pbmNsdWRlL21hY2gtY29tbW9uL21hY2gvdGl0YW4uaApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvTWFrZWZpbGVfMzIgYi9hcmNoL3NoL2tlcm5lbC9NYWtlZmlsZV8zMgppbmRleCAwZTY5MDVmLi40OGVkZmIxIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9NYWtlZmlsZV8zMgorKysgYi9hcmNoL3NoL2tlcm5lbC9NYWtlZmlsZV8zMgpAQCAtMjEsNyArMjEsOCBAQAogb2JqLSQoQ09ORklHX0NSQVNIX0RVTVApCSs9IGNyYXNoX2R1bXAubwogb2JqLSQoQ09ORklHX1BNKQkJKz0gcG0ubwogb2JqLSQoQ09ORklHX1NUQUNLVFJBQ0UpCSs9IHN0YWNrdHJhY2Uubwotb2JqLSQoQ09ORklHX0VMRl9DT1JFKQkJKz0gZHVtcF90YXNrLm8KIG9iai0kKENPTkZJR19JT19UUkFQUEVEKQkrPSBpb190cmFwcGVkLm8KK29iai0kKENPTkZJR19LUFJPQkVTKQkJKz0ga3Byb2Jlcy5vCitvYmotJChDT05GSUdfR0VORVJJQ19HUElPKQkrPSBncGlvLm8KIAogRVhUUkFfQ0ZMQUdTICs9IC1XZXJyb3IKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL01ha2VmaWxlXzY0IGIvYXJjaC9zaC9rZXJuZWwvTWFrZWZpbGVfNjQKaW5kZXggNmVkZjUzYi4uYzk3NjYwYiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvTWFrZWZpbGVfNjQKKysrIGIvYXJjaC9zaC9rZXJuZWwvTWFrZWZpbGVfNjQKQEAgLTE3LDcgKzE3LDcgQEAKIG9iai0kKENPTkZJR19DUkFTSF9EVU1QKQkrPSBjcmFzaF9kdW1wLm8KIG9iai0kKENPTkZJR19QTSkJCSs9IHBtLm8KIG9iai0kKENPTkZJR19TVEFDS1RSQUNFKQkrPSBzdGFja3RyYWNlLm8KLW9iai0kKENPTkZJR19CSU5GTVRfRUxGKQkrPSBkdW1wX3Rhc2subwogb2JqLSQoQ09ORklHX0lPX1RSQVBQRUQpCSs9IGlvX3RyYXBwZWQubworb2JqLSQoQ09ORklHX0dFTkVSSUNfR1BJTykJKz0gZ3Bpby5vCiAKIEVYVFJBX0NGTEFHUyArPSAtV2Vycm9yCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvY2xvY2suYyBiL2FyY2gvc2gva2VybmVsL2NwdS9jbG9jay5jCmluZGV4IGY1ZWI1NmUuLmI3ZTQ2ZDUgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9jbG9jay5jCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9jbG9jay5jCkBAIC0yOTQsOSArMjk0LDEwIEBACiB7CiB9CiAKLXZvaWQgX19pbml0IF9fYXR0cmlidXRlX18gKCh3ZWFrKSkKK2ludCBfX2luaXQgX19hdHRyaWJ1dGVfXyAoKHdlYWspKQogYXJjaF9jbGtfaW5pdCh2b2lkKQogeworCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IHNob3dfY2xvY2tzKGNoYXIgKmJ1ZiwgY2hhciAqKnN0YXJ0LCBvZmZfdCBvZmYsCkBAIC0zMzEsNyArMzMyLDcgQEAKIAkJcmV0IHw9IGNsa19yZWdpc3RlcihjbGspOwogCX0KIAotCWFyY2hfY2xrX2luaXQoKTsKKwlyZXQgfD0gYXJjaF9jbGtfaW5pdCgpOwogCiAJLyogS2ljayB0aGUgY2hpbGQgY2xvY2tzLi4gKi8KIAlwcm9wYWdhdGVfcmF0ZSgmbWFzdGVyX2Nsayk7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvaXJxL01ha2VmaWxlIGIvYXJjaC9zaC9rZXJuZWwvY3B1L2lycS9NYWtlZmlsZQppbmRleCA0NjJhOGY2Li5mMGM3MDI1IDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvaXJxL01ha2VmaWxlCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9pcnEvTWFrZWZpbGUKQEAgLTEsOCArMSw2IEBACiAjCiAjIE1ha2VmaWxlIGZvciB0aGUgTGludXgvU3VwZXJIIENQVS1zcGVjaWZjIElSUSBoYW5kbGVycy4KICMKLW9iai15CSs9IGludGMubwotCiBvYmotJChDT05GSUdfU1VQRVJIMzIpCQkJKz0gaW1hc2subwogb2JqLSQoQ09ORklHX0NQVV9TSDUpCQkJKz0gaW50Yy1zaDUubwogb2JqLSQoQ09ORklHX0NQVV9IQVNfSVBSX0lSUSkJCSs9IGlwci5vCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvaXJxL2ludGMuYyBiL2FyY2gvc2gva2VybmVsL2NwdS9pcnEvaW50Yy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YzcwZTIwLi4wMDAwMDAwCi0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9pcnEvaW50Yy5jCisrKyAvZGV2L251bGwKQEAgLTEsNzEwICswLDAgQEAKLS8qCi0gKiBTaGFyZWQgaW50ZXJydXB0IGhhbmRsaW5nIGNvZGUgZm9yIElQUiBhbmQgSU5UQzIgdHlwZXMgb2YgSVJRcy4KLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDggTWFnbnVzIERhbW0KLSAqCi0gKiBCYXNlZCBvbiBpbnRjMi5jIGFuZCBpcHIuYwotICoKLSAqIENvcHlyaWdodCAoQykgMTk5OSAgTmlpYmUgWXV0YWthICYgVGFrZXNoaSBZYWVnYXNoaQotICogQ29weXJpZ2h0IChDKSAyMDAwICBLYXp1bW90byBLb2ppbWEKLSAqIENvcHlyaWdodCAoQykgMjAwMSAgRGF2aWQgSi4gTWNrYXkgKGRhdmlkLm1ja2F5QHN0LmNvbSkKLSAqIENvcHlyaWdodCAoQykgMjAwMyAgVGFrYXNoaSBLdXN1ZGEgPGt1c3VkYS10YWthc2hpQGhpdGFjaGktdWwuY28uanA+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYgIFBhdWwgTXVuZHQKLSAqCi0gKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQotICogZm9yIG1vcmUgZGV0YWlscy4KLSAqLwotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9pcnEuaD4KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9pby5oPgotI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgotI2luY2x1ZGUgPGxpbnV4L2Jvb3RtZW0uaD4KLQotI2RlZmluZSBfSU5UQ19NSyhmbiwgbW9kZSwgYWRkcl9lLCBhZGRyX2QsIHdpZHRoLCBzaGlmdCkgXAotCSgoc2hpZnQpIHwgKCh3aWR0aCkgPDwgNSkgfCAoKGZuKSA8PCA5KSB8ICgobW9kZSkgPDwgMTMpIHwgXAotCSAoKGFkZHJfZSkgPDwgMTYpIHwgKChhZGRyX2QgPDwgMjQpKSkKLQotI2RlZmluZSBfSU5UQ19TSElGVChoKSAoaCAmIDB4MWYpCi0jZGVmaW5lIF9JTlRDX1dJRFRIKGgpICgoaCA+PiA1KSAmIDB4ZikKLSNkZWZpbmUgX0lOVENfRk4oaCkgKChoID4+IDkpICYgMHhmKQotI2RlZmluZSBfSU5UQ19NT0RFKGgpICgoaCA+PiAxMykgJiAweDcpCi0jZGVmaW5lIF9JTlRDX0FERFJfRShoKSAoKGggPj4gMTYpICYgMHhmZikKLSNkZWZpbmUgX0lOVENfQUREUl9EKGgpICgoaCA+PiAyNCkgJiAweGZmKQotCi1zdHJ1Y3QgaW50Y19oYW5kbGVfaW50IHsKLQl1bnNpZ25lZCBpbnQgaXJxOwotCXVuc2lnbmVkIGxvbmcgaGFuZGxlOwotfTsKLQotc3RydWN0IGludGNfZGVzY19pbnQgewotCXVuc2lnbmVkIGxvbmcgKnJlZzsKLSNpZmRlZiBDT05GSUdfU01QCi0JdW5zaWduZWQgbG9uZyAqc21wOwotI2VuZGlmCi0JdW5zaWduZWQgaW50IG5yX3JlZzsKLQlzdHJ1Y3QgaW50Y19oYW5kbGVfaW50ICpwcmlvOwotCXVuc2lnbmVkIGludCBucl9wcmlvOwotCXN0cnVjdCBpbnRjX2hhbmRsZV9pbnQgKnNlbnNlOwotCXVuc2lnbmVkIGludCBucl9zZW5zZTsKLQlzdHJ1Y3QgaXJxX2NoaXAgY2hpcDsKLX07Ci0KLSNpZmRlZiBDT05GSUdfU01QCi0jZGVmaW5lIElTX1NNUCh4KSB4LnNtcAotI2RlZmluZSBJTlRDX1JFRyhkLCB4LCBjKSAoZC0+cmVnWyh4KV0gKyAoKGQtPnNtcFsoeCldICYgMHhmZikgKiBjKSkKLSNkZWZpbmUgU01QX05SKGQsIHgpICgoZC0+c21wWyh4KV0gPj4gOCkgPyAoZC0+c21wWyh4KV0gPj4gOCkgOiAxKQotI2Vsc2UKLSNkZWZpbmUgSVNfU01QKHgpIDAKLSNkZWZpbmUgSU5UQ19SRUcoZCwgeCwgYykgKGQtPnJlZ1soeCldKQotI2RlZmluZSBTTVBfTlIoZCwgeCkgMQotI2VuZGlmCi0KLXN0YXRpYyB1bnNpZ25lZCBpbnQgaW50Y19wcmlvX2xldmVsW05SX0lSUVNdOyAvKiBmb3Igbm93ICovCi0jaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NIMykgfHwgZGVmaW5lZChDT05GSUdfQ1BVX1NINEEpCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBhY2tfaGFuZGxlW05SX0lSUVNdOwotI2VuZGlmCi0KLXN0YXRpYyBpbmxpbmUgc3RydWN0IGludGNfZGVzY19pbnQgKmdldF9pbnRjX2Rlc2ModW5zaWduZWQgaW50IGlycSkKLXsKLQlzdHJ1Y3QgaXJxX2NoaXAgKmNoaXAgPSBnZXRfaXJxX2NoaXAoaXJxKTsKLQlyZXR1cm4gKHZvaWQgKikoKGNoYXIgKiljaGlwIC0gb2Zmc2V0b2Yoc3RydWN0IGludGNfZGVzY19pbnQsIGNoaXApKTsKLX0KLQotc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgc2V0X2ZpZWxkKHVuc2lnbmVkIGludCB2YWx1ZSwKLQkJCQkgICAgIHVuc2lnbmVkIGludCBmaWVsZF92YWx1ZSwKLQkJCQkgICAgIHVuc2lnbmVkIGludCBoYW5kbGUpCi17Ci0JdW5zaWduZWQgaW50IHdpZHRoID0gX0lOVENfV0lEVEgoaGFuZGxlKTsKLQl1bnNpZ25lZCBpbnQgc2hpZnQgPSBfSU5UQ19TSElGVChoYW5kbGUpOwotCi0JdmFsdWUgJj0gfigoKDEgPDwgd2lkdGgpIC0gMSkgPDwgc2hpZnQpOwotCXZhbHVlIHw9IGZpZWxkX3ZhbHVlIDw8IHNoaWZ0OwotCXJldHVybiB2YWx1ZTsKLX0KLQotc3RhdGljIHZvaWQgd3JpdGVfOCh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgaCwgdW5zaWduZWQgbG9uZyBkYXRhKQotewotCWN0cmxfb3V0YihzZXRfZmllbGQoMCwgZGF0YSwgaCksIGFkZHIpOwotfQotCi1zdGF0aWMgdm9pZCB3cml0ZV8xNih1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgaCwgdW5zaWduZWQgbG9uZyBkYXRhKQotewotCWN0cmxfb3V0dyhzZXRfZmllbGQoMCwgZGF0YSwgaCksIGFkZHIpOwotfQotCi1zdGF0aWMgdm9pZCB3cml0ZV8zMih1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgaCwgdW5zaWduZWQgbG9uZyBkYXRhKQotewotCWN0cmxfb3V0bChzZXRfZmllbGQoMCwgZGF0YSwgaCksIGFkZHIpOwotfQotCi1zdGF0aWMgdm9pZCBtb2RpZnlfOCh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgaCwgdW5zaWduZWQgbG9uZyBkYXRhKQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCWN0cmxfb3V0YihzZXRfZmllbGQoY3RybF9pbmIoYWRkciksIGRhdGEsIGgpLCBhZGRyKTsKLQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Ci19Ci0KLXN0YXRpYyB2b2lkIG1vZGlmeV8xNih1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgaCwgdW5zaWduZWQgbG9uZyBkYXRhKQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCWN0cmxfb3V0dyhzZXRfZmllbGQoY3RybF9pbncoYWRkciksIGRhdGEsIGgpLCBhZGRyKTsKLQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Ci19Ci0KLXN0YXRpYyB2b2lkIG1vZGlmeV8zMih1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgaCwgdW5zaWduZWQgbG9uZyBkYXRhKQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCWN0cmxfb3V0bChzZXRfZmllbGQoY3RybF9pbmwoYWRkciksIGRhdGEsIGgpLCBhZGRyKTsKLQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Ci19Ci0KLWVudW0gewlSRUdfRk5fRVJSID0gMCwgUkVHX0ZOX1dSSVRFX0JBU0UgPSAxLCBSRUdfRk5fTU9ESUZZX0JBU0UgPSA1IH07Ci0KLXN0YXRpYyB2b2lkICgqaW50Y19yZWdfZm5zW10pKHVuc2lnbmVkIGxvbmcgYWRkciwKLQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgaCwKLQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgZGF0YSkgPSB7Ci0JW1JFR19GTl9XUklURV9CQVNFICsgMF0gPSB3cml0ZV84LAotCVtSRUdfRk5fV1JJVEVfQkFTRSArIDFdID0gd3JpdGVfMTYsCi0JW1JFR19GTl9XUklURV9CQVNFICsgM10gPSB3cml0ZV8zMiwKLQlbUkVHX0ZOX01PRElGWV9CQVNFICsgMF0gPSBtb2RpZnlfOCwKLQlbUkVHX0ZOX01PRElGWV9CQVNFICsgMV0gPSBtb2RpZnlfMTYsCi0JW1JFR19GTl9NT0RJRllfQkFTRSArIDNdID0gbW9kaWZ5XzMyLAotfTsKLQotZW51bSB7CU1PREVfRU5BQkxFX1JFRyA9IDAsIC8qIEJpdChzKSBzZXQgLT4gaW50ZXJydXB0IGVuYWJsZWQgKi8KLQlNT0RFX01BU0tfUkVHLCAgICAgICAvKiBCaXQocykgc2V0IC0+IGludGVycnVwdCBkaXNhYmxlZCAqLwotCU1PREVfRFVBTF9SRUcsICAgICAgIC8qIFR3byByZWdpc3RlcnMsIHNldCBiaXQgdG8gZW5hYmxlIC8gZGlzYWJsZSAqLwotCU1PREVfUFJJT19SRUcsICAgICAgIC8qIFByaW9yaXR5IHZhbHVlIHdyaXR0ZW4gdG8gZW5hYmxlIGludGVycnVwdCAqLwotCU1PREVfUENMUl9SRUcsICAgICAgIC8qIEFib3ZlIHBsdXMgYWxsIGJpdHMgc2V0IHRvIGRpc2FibGUgaW50ZXJydXB0ICovCi19OwotCi1zdGF0aWMgdm9pZCBpbnRjX21vZGVfZmllbGQodW5zaWduZWQgbG9uZyBhZGRyLAotCQkJICAgIHVuc2lnbmVkIGxvbmcgaGFuZGxlLAotCQkJICAgIHZvaWQgKCpmbikodW5zaWduZWQgbG9uZywKLQkJCQkgICAgICAgdW5zaWduZWQgbG9uZywKLQkJCQkgICAgICAgdW5zaWduZWQgbG9uZyksCi0JCQkgICAgdW5zaWduZWQgaW50IGlycSkKLXsKLQlmbihhZGRyLCBoYW5kbGUsICgoMSA8PCBfSU5UQ19XSURUSChoYW5kbGUpKSAtIDEpKTsKLX0KLQotc3RhdGljIHZvaWQgaW50Y19tb2RlX3plcm8odW5zaWduZWQgbG9uZyBhZGRyLAotCQkJICAgdW5zaWduZWQgbG9uZyBoYW5kbGUsCi0JCQkgICB2b2lkICgqZm4pKHVuc2lnbmVkIGxvbmcsCi0JCQkJICAgICAgIHVuc2lnbmVkIGxvbmcsCi0JCQkJICAgICAgIHVuc2lnbmVkIGxvbmcpLAotCQkJICAgdW5zaWduZWQgaW50IGlycSkKLXsKLQlmbihhZGRyLCBoYW5kbGUsIDApOwotfQotCi1zdGF0aWMgdm9pZCBpbnRjX21vZGVfcHJpbyh1bnNpZ25lZCBsb25nIGFkZHIsCi0JCQkgICB1bnNpZ25lZCBsb25nIGhhbmRsZSwKLQkJCSAgIHZvaWQgKCpmbikodW5zaWduZWQgbG9uZywKLQkJCQkgICAgICAgdW5zaWduZWQgbG9uZywKLQkJCQkgICAgICAgdW5zaWduZWQgbG9uZyksCi0JCQkgICB1bnNpZ25lZCBpbnQgaXJxKQotewotCWZuKGFkZHIsIGhhbmRsZSwgaW50Y19wcmlvX2xldmVsW2lycV0pOwotfQotCi1zdGF0aWMgdm9pZCAoKmludGNfZW5hYmxlX2Zuc1tdKSh1bnNpZ25lZCBsb25nIGFkZHIsCi0JCQkJIHVuc2lnbmVkIGxvbmcgaGFuZGxlLAotCQkJCSB2b2lkICgqZm4pKHVuc2lnbmVkIGxvbmcsCi0JCQkJCSAgICB1bnNpZ25lZCBsb25nLAotCQkJCQkgICAgdW5zaWduZWQgbG9uZyksCi0JCQkJIHVuc2lnbmVkIGludCBpcnEpID0gewotCVtNT0RFX0VOQUJMRV9SRUddID0gaW50Y19tb2RlX2ZpZWxkLAotCVtNT0RFX01BU0tfUkVHXSA9IGludGNfbW9kZV96ZXJvLAotCVtNT0RFX0RVQUxfUkVHXSA9IGludGNfbW9kZV9maWVsZCwKLQlbTU9ERV9QUklPX1JFR10gPSBpbnRjX21vZGVfcHJpbywKLQlbTU9ERV9QQ0xSX1JFR10gPSBpbnRjX21vZGVfcHJpbywKLX07Ci0KLXN0YXRpYyB2b2lkICgqaW50Y19kaXNhYmxlX2Zuc1tdKSh1bnNpZ25lZCBsb25nIGFkZHIsCi0JCQkJICB1bnNpZ25lZCBsb25nIGhhbmRsZSwKLQkJCQkgIHZvaWQgKCpmbikodW5zaWduZWQgbG9uZywKLQkJCQkJICAgICB1bnNpZ25lZCBsb25nLAotCQkJCQkgICAgIHVuc2lnbmVkIGxvbmcpLAotCQkJCSAgdW5zaWduZWQgaW50IGlycSkgPSB7Ci0JW01PREVfRU5BQkxFX1JFR10gPSBpbnRjX21vZGVfemVybywKLQlbTU9ERV9NQVNLX1JFR10gPSBpbnRjX21vZGVfZmllbGQsCi0JW01PREVfRFVBTF9SRUddID0gaW50Y19tb2RlX2ZpZWxkLAotCVtNT0RFX1BSSU9fUkVHXSA9IGludGNfbW9kZV96ZXJvLAotCVtNT0RFX1BDTFJfUkVHXSA9IGludGNfbW9kZV9maWVsZCwKLX07Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBfaW50Y19lbmFibGUodW5zaWduZWQgaW50IGlycSwgdW5zaWduZWQgbG9uZyBoYW5kbGUpCi17Ci0Jc3RydWN0IGludGNfZGVzY19pbnQgKmQgPSBnZXRfaW50Y19kZXNjKGlycSk7Ci0JdW5zaWduZWQgbG9uZyBhZGRyOwotCXVuc2lnbmVkIGludCBjcHU7Ci0KLQlmb3IgKGNwdSA9IDA7IGNwdSA8IFNNUF9OUihkLCBfSU5UQ19BRERSX0UoaGFuZGxlKSk7IGNwdSsrKSB7Ci0JCWFkZHIgPSBJTlRDX1JFRyhkLCBfSU5UQ19BRERSX0UoaGFuZGxlKSwgY3B1KTsKLQkJaW50Y19lbmFibGVfZm5zW19JTlRDX01PREUoaGFuZGxlKV0oYWRkciwgaGFuZGxlLCBpbnRjX3JlZ19mbnNcCi0JCQkJCQkgICAgW19JTlRDX0ZOKGhhbmRsZSldLCBpcnEpOwotCX0KLX0KLQotc3RhdGljIHZvaWQgaW50Y19lbmFibGUodW5zaWduZWQgaW50IGlycSkKLXsKLQlfaW50Y19lbmFibGUoaXJxLCAodW5zaWduZWQgbG9uZylnZXRfaXJxX2NoaXBfZGF0YShpcnEpKTsKLX0KLQotc3RhdGljIHZvaWQgaW50Y19kaXNhYmxlKHVuc2lnbmVkIGludCBpcnEpCi17Ci0Jc3RydWN0IGludGNfZGVzY19pbnQgKmQgPSBnZXRfaW50Y19kZXNjKGlycSk7Ci0JdW5zaWduZWQgbG9uZyBoYW5kbGUgPSAodW5zaWduZWQgbG9uZykgZ2V0X2lycV9jaGlwX2RhdGEoaXJxKTsKLQl1bnNpZ25lZCBsb25nIGFkZHI7Ci0JdW5zaWduZWQgaW50IGNwdTsKLQotCWZvciAoY3B1ID0gMDsgY3B1IDwgU01QX05SKGQsIF9JTlRDX0FERFJfRChoYW5kbGUpKTsgY3B1KyspIHsKLQkJYWRkciA9IElOVENfUkVHKGQsIF9JTlRDX0FERFJfRChoYW5kbGUpLCBjcHUpOwotCQlpbnRjX2Rpc2FibGVfZm5zW19JTlRDX01PREUoaGFuZGxlKV0oYWRkciwgaGFuZGxlLGludGNfcmVnX2Zuc1wKLQkJCQkJCSAgICAgW19JTlRDX0ZOKGhhbmRsZSldLCBpcnEpOwotCX0KLX0KLQotI2lmIGRlZmluZWQoQ09ORklHX0NQVV9TSDMpIHx8IGRlZmluZWQoQ09ORklHX0NQVV9TSDRBKQotc3RhdGljIHZvaWQgaW50Y19tYXNrX2Fjayh1bnNpZ25lZCBpbnQgaXJxKQotewotCXN0cnVjdCBpbnRjX2Rlc2NfaW50ICpkID0gZ2V0X2ludGNfZGVzYyhpcnEpOwotCXVuc2lnbmVkIGxvbmcgaGFuZGxlID0gYWNrX2hhbmRsZVtpcnFdOwotCXVuc2lnbmVkIGxvbmcgYWRkcjsKLQotCWludGNfZGlzYWJsZShpcnEpOwotCi0JLyogcmVhZCByZWdpc3RlciBhbmQgd3JpdGUgemVybyBvbmx5IHRvIHRoZSBhc3NvY2FpdGVkIGJpdCAqLwotCi0JaWYgKGhhbmRsZSkgewotCQlhZGRyID0gSU5UQ19SRUcoZCwgX0lOVENfQUREUl9EKGhhbmRsZSksIDApOwotCQlzd2l0Y2ggKF9JTlRDX0ZOKGhhbmRsZSkpIHsKLQkJY2FzZSBSRUdfRk5fTU9ESUZZX0JBU0UgKyAwOgkvKiA4Yml0ICovCi0JCQljdHJsX2luYihhZGRyKTsKLQkJCWN0cmxfb3V0YigweGZmIF4gc2V0X2ZpZWxkKDAsIDEsIGhhbmRsZSksIGFkZHIpOwotCQkJYnJlYWs7Ci0JCWNhc2UgUkVHX0ZOX01PRElGWV9CQVNFICsgMToJLyogMTZiaXQgKi8KLQkJCWN0cmxfaW53KGFkZHIpOwotCQkJY3RybF9vdXR3KDB4ZmZmZiBeIHNldF9maWVsZCgwLCAxLCBoYW5kbGUpLCBhZGRyKTsKLQkJCWJyZWFrOwotCQljYXNlIFJFR19GTl9NT0RJRllfQkFTRSArIDM6CS8qIDMyYml0ICovCi0JCQljdHJsX2lubChhZGRyKTsKLQkJCWN0cmxfb3V0bCgweGZmZmZmZmZmIF4gc2V0X2ZpZWxkKDAsIDEsIGhhbmRsZSksIGFkZHIpOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlCVUcoKTsKLQkJCWJyZWFrOwotCQl9Ci0JfQotfQotI2VuZGlmCi0KLXN0YXRpYyBzdHJ1Y3QgaW50Y19oYW5kbGVfaW50ICppbnRjX2ZpbmRfaXJxKHN0cnVjdCBpbnRjX2hhbmRsZV9pbnQgKmhwLAotCQkJCQkgICAgIHVuc2lnbmVkIGludCBucl9ocCwKLQkJCQkJICAgICB1bnNpZ25lZCBpbnQgaXJxKQotewotCWludCBpOwotCi0JLyogdGhpcyBkb2Vzbid0IHNjYWxlIHdlbGwsIGJ1dC4uLgotCSAqCi0JICogdGhpcyBmdW5jdGlvbiBzaG91bGQgb25seSBiZSB1c2VkIGZvciBjZXJhaW4gdW5jb21tb24KLQkgKiBvcGVyYXRpb25zIHN1Y2ggYXMgaW50Y19zZXRfcHJpb3JpdHkoKSBhbmQgaW50Y19zZXRfc2Vuc2UoKQotCSAqIGFuZCBpbiB0aG9zZSByYXJlIGNhc2VzIHBlcmZvcm1hbmNlIGRvZXNuJ3QgbWF0dGVyIHRoYXQgbXVjaC4KLQkgKiBrZWVwaW5nIHRoZSBtZW1vcnkgZm9vdHByaW50IGxvdyBpcyBtb3JlIGltcG9ydGFudC4KLQkgKgotCSAqIG9uZSByYXRoZXIgc2ltcGxlIHdheSB0byBzcGVlZCB0aGlzIHVwIGFuZCBzdGlsbCBrZWVwIHRoZQotCSAqIG1lbW9yeSBmb290cHJpbnQgZG93biBpcyB0byBtYWtlIHN1cmUgdGhlIGFycmF5IGlzIHNvcnRlZAotCSAqIGFuZCB0aGVuIHBlcmZvcm0gYSBiaXNlY3QgdG8gbG9va3VwIHRoZSBpcnEuCi0JICovCi0KLQlmb3IgKGkgPSAwOyBpIDwgbnJfaHA7IGkrKykgewotCQlpZiAoKGhwICsgaSktPmlycSAhPSBpcnEpCi0JCQljb250aW51ZTsKLQotCQlyZXR1cm4gaHAgKyBpOwotCX0KLQotCXJldHVybiBOVUxMOwotfQotCi1pbnQgaW50Y19zZXRfcHJpb3JpdHkodW5zaWduZWQgaW50IGlycSwgdW5zaWduZWQgaW50IHByaW8pCi17Ci0Jc3RydWN0IGludGNfZGVzY19pbnQgKmQgPSBnZXRfaW50Y19kZXNjKGlycSk7Ci0Jc3RydWN0IGludGNfaGFuZGxlX2ludCAqaWhwOwotCi0JaWYgKCFpbnRjX3ByaW9fbGV2ZWxbaXJxXSB8fCBwcmlvIDw9IDEpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JaWhwID0gaW50Y19maW5kX2lycShkLT5wcmlvLCBkLT5ucl9wcmlvLCBpcnEpOwotCWlmIChpaHApIHsKLQkJaWYgKHByaW8gPj0gKDEgPDwgX0lOVENfV0lEVEgoaWhwLT5oYW5kbGUpKSkKLQkJCXJldHVybiAtRUlOVkFMOwotCi0JCWludGNfcHJpb19sZXZlbFtpcnFdID0gcHJpbzsKLQotCQkvKgotCQkgKiBvbmx5IHNldCBzZWNvbmRhcnkgbWFza2luZyBtZXRob2QgZGlyZWN0bHkKLQkJICogcHJpbWFyeSBtYXNraW5nIG1ldGhvZCBpcyB1c2luZyBpbnRjX3ByaW9fbGV2ZWxbaXJxXQotCQkgKiBwcmlvcml0eSBsZXZlbCB3aWxsIGJlIHNldCBkdXJpbmcgbmV4dCBlbmFibGUoKQotCQkgKi8KLQotCQlpZiAoX0lOVENfRk4oaWhwLT5oYW5kbGUpICE9IFJFR19GTl9FUlIpCi0JCQlfaW50Y19lbmFibGUoaXJxLCBpaHAtPmhhbmRsZSk7Ci0JfQotCXJldHVybiAwOwotfQotCi0jZGVmaW5lIFZBTElEKHgpICh4IHwgMHg4MCkKLQotc3RhdGljIHVuc2lnbmVkIGNoYXIgaW50Y19pcnFfc2Vuc2VfdGFibGVbSVJRX1RZUEVfU0VOU0VfTUFTSyArIDFdID0gewotCVtJUlFfVFlQRV9FREdFX0ZBTExJTkddID0gVkFMSUQoMCksCi0JW0lSUV9UWVBFX0VER0VfUklTSU5HXSA9IFZBTElEKDEpLAotCVtJUlFfVFlQRV9MRVZFTF9MT1ddID0gVkFMSUQoMiksCi0JLyogU0g3NzA2LCBTSDc3MDcgYW5kIFNINzcwOSBkbyBub3Qgc3VwcG9ydCBoaWdoIGxldmVsIHRyaWdnZXJlZCAqLwotI2lmICFkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MDYpICYmIFwKLSAgICAhZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzA3KSAmJiBcCi0gICAgIWRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcwOSkKLQlbSVJRX1RZUEVfTEVWRUxfSElHSF0gPSBWQUxJRCgzKSwKLSNlbmRpZgotfTsKLQotc3RhdGljIGludCBpbnRjX3NldF9zZW5zZSh1bnNpZ25lZCBpbnQgaXJxLCB1bnNpZ25lZCBpbnQgdHlwZSkKLXsKLQlzdHJ1Y3QgaW50Y19kZXNjX2ludCAqZCA9IGdldF9pbnRjX2Rlc2MoaXJxKTsKLQl1bnNpZ25lZCBjaGFyIHZhbHVlID0gaW50Y19pcnFfc2Vuc2VfdGFibGVbdHlwZSAmIElSUV9UWVBFX1NFTlNFX01BU0tdOwotCXN0cnVjdCBpbnRjX2hhbmRsZV9pbnQgKmlocDsKLQl1bnNpZ25lZCBsb25nIGFkZHI7Ci0KLQlpZiAoIXZhbHVlKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWlocCA9IGludGNfZmluZF9pcnEoZC0+c2Vuc2UsIGQtPm5yX3NlbnNlLCBpcnEpOwotCWlmIChpaHApIHsKLQkJYWRkciA9IElOVENfUkVHKGQsIF9JTlRDX0FERFJfRShpaHAtPmhhbmRsZSksIDApOwotCQlpbnRjX3JlZ19mbnNbX0lOVENfRk4oaWhwLT5oYW5kbGUpXShhZGRyLCBpaHAtPmhhbmRsZSwgdmFsdWUpOwotCX0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHVuc2lnbmVkIGludCBfX2luaXQgaW50Y19nZXRfcmVnKHN0cnVjdCBpbnRjX2Rlc2NfaW50ICpkLAotCQkJCSB1bnNpZ25lZCBsb25nIGFkZHJlc3MpCi17Ci0JdW5zaWduZWQgaW50IGs7Ci0KLQlmb3IgKGsgPSAwOyBrIDwgZC0+bnJfcmVnOyBrKyspIHsKLQkJaWYgKGQtPnJlZ1trXSA9PSBhZGRyZXNzKQotCQkJcmV0dXJuIGs7Ci0JfQotCi0JQlVHKCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnRjX2VudW0gX19pbml0IGludGNfZ3JwX2lkKHN0cnVjdCBpbnRjX2Rlc2MgKmRlc2MsCi0JCQkJICAgIGludGNfZW51bSBlbnVtX2lkKQotewotCXN0cnVjdCBpbnRjX2dyb3VwICpnID0gZGVzYy0+Z3JvdXBzOwotCXVuc2lnbmVkIGludCBpLCBqOwotCi0JZm9yIChpID0gMDsgZyAmJiBlbnVtX2lkICYmIGkgPCBkZXNjLT5ucl9ncm91cHM7IGkrKykgewotCQlnID0gZGVzYy0+Z3JvdXBzICsgaTsKLQotCQlmb3IgKGogPSAwOyBnLT5lbnVtX2lkc1tqXTsgaisrKSB7Ci0JCQlpZiAoZy0+ZW51bV9pZHNbal0gIT0gZW51bV9pZCkKLQkJCQljb250aW51ZTsKLQotCQkJcmV0dXJuIGctPmVudW1faWQ7Ci0JCX0KLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHVuc2lnbmVkIGludCBfX2luaXQgaW50Y19tYXNrX2RhdGEoc3RydWN0IGludGNfZGVzYyAqZGVzYywKLQkJCQkJICBzdHJ1Y3QgaW50Y19kZXNjX2ludCAqZCwKLQkJCQkJICBpbnRjX2VudW0gZW51bV9pZCwgaW50IGRvX2dycHMpCi17Ci0Jc3RydWN0IGludGNfbWFza19yZWcgKm1yID0gZGVzYy0+bWFza19yZWdzOwotCXVuc2lnbmVkIGludCBpLCBqLCBmbiwgbW9kZTsKLQl1bnNpZ25lZCBsb25nIHJlZ19lLCByZWdfZDsKLQotCWZvciAoaSA9IDA7IG1yICYmIGVudW1faWQgJiYgaSA8IGRlc2MtPm5yX21hc2tfcmVnczsgaSsrKSB7Ci0JCW1yID0gZGVzYy0+bWFza19yZWdzICsgaTsKLQotCQlmb3IgKGogPSAwOyBqIDwgQVJSQVlfU0laRShtci0+ZW51bV9pZHMpOyBqKyspIHsKLQkJCWlmIChtci0+ZW51bV9pZHNbal0gIT0gZW51bV9pZCkKLQkJCQljb250aW51ZTsKLQotCQkJaWYgKG1yLT5zZXRfcmVnICYmIG1yLT5jbHJfcmVnKSB7Ci0JCQkJZm4gPSBSRUdfRk5fV1JJVEVfQkFTRTsKLQkJCQltb2RlID0gTU9ERV9EVUFMX1JFRzsKLQkJCQlyZWdfZSA9IG1yLT5jbHJfcmVnOwotCQkJCXJlZ19kID0gbXItPnNldF9yZWc7Ci0JCQl9IGVsc2UgewotCQkJCWZuID0gUkVHX0ZOX01PRElGWV9CQVNFOwotCQkJCWlmIChtci0+c2V0X3JlZykgewotCQkJCQltb2RlID0gTU9ERV9FTkFCTEVfUkVHOwotCQkJCQlyZWdfZSA9IG1yLT5zZXRfcmVnOwotCQkJCQlyZWdfZCA9IG1yLT5zZXRfcmVnOwotCQkJCX0gZWxzZSB7Ci0JCQkJCW1vZGUgPSBNT0RFX01BU0tfUkVHOwotCQkJCQlyZWdfZSA9IG1yLT5jbHJfcmVnOwotCQkJCQlyZWdfZCA9IG1yLT5jbHJfcmVnOwotCQkJCX0KLQkJCX0KLQotCQkJZm4gKz0gKG1yLT5yZWdfd2lkdGggPj4gMykgLSAxOwotCQkJcmV0dXJuIF9JTlRDX01LKGZuLCBtb2RlLAotCQkJCQlpbnRjX2dldF9yZWcoZCwgcmVnX2UpLAotCQkJCQlpbnRjX2dldF9yZWcoZCwgcmVnX2QpLAotCQkJCQkxLAotCQkJCQkobXItPnJlZ193aWR0aCAtIDEpIC0gaik7Ci0JCX0KLQl9Ci0KLQlpZiAoZG9fZ3JwcykKLQkJcmV0dXJuIGludGNfbWFza19kYXRhKGRlc2MsIGQsIGludGNfZ3JwX2lkKGRlc2MsIGVudW1faWQpLCAwKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdW5zaWduZWQgaW50IF9faW5pdCBpbnRjX3ByaW9fZGF0YShzdHJ1Y3QgaW50Y19kZXNjICpkZXNjLAotCQkJCQkgIHN0cnVjdCBpbnRjX2Rlc2NfaW50ICpkLAotCQkJCQkgIGludGNfZW51bSBlbnVtX2lkLCBpbnQgZG9fZ3JwcykKLXsKLQlzdHJ1Y3QgaW50Y19wcmlvX3JlZyAqcHIgPSBkZXNjLT5wcmlvX3JlZ3M7Ci0JdW5zaWduZWQgaW50IGksIGosIGZuLCBtb2RlLCBiaXQ7Ci0JdW5zaWduZWQgbG9uZyByZWdfZSwgcmVnX2Q7Ci0KLQlmb3IgKGkgPSAwOyBwciAmJiBlbnVtX2lkICYmIGkgPCBkZXNjLT5ucl9wcmlvX3JlZ3M7IGkrKykgewotCQlwciA9IGRlc2MtPnByaW9fcmVncyArIGk7Ci0KLQkJZm9yIChqID0gMDsgaiA8IEFSUkFZX1NJWkUocHItPmVudW1faWRzKTsgaisrKSB7Ci0JCQlpZiAocHItPmVudW1faWRzW2pdICE9IGVudW1faWQpCi0JCQkJY29udGludWU7Ci0KLQkJCWlmIChwci0+c2V0X3JlZyAmJiBwci0+Y2xyX3JlZykgewotCQkJCWZuID0gUkVHX0ZOX1dSSVRFX0JBU0U7Ci0JCQkJbW9kZSA9IE1PREVfUENMUl9SRUc7Ci0JCQkJcmVnX2UgPSBwci0+c2V0X3JlZzsKLQkJCQlyZWdfZCA9IHByLT5jbHJfcmVnOwotCQkJfSBlbHNlIHsKLQkJCQlmbiA9IFJFR19GTl9NT0RJRllfQkFTRTsKLQkJCQltb2RlID0gTU9ERV9QUklPX1JFRzsKLQkJCQlpZiAoIXByLT5zZXRfcmVnKQotCQkJCQlCVUcoKTsKLQkJCQlyZWdfZSA9IHByLT5zZXRfcmVnOwotCQkJCXJlZ19kID0gcHItPnNldF9yZWc7Ci0JCQl9Ci0KLQkJCWZuICs9IChwci0+cmVnX3dpZHRoID4+IDMpIC0gMTsKLQkJCWJpdCA9IHByLT5yZWdfd2lkdGggLSAoKGogKyAxKSAqIHByLT5maWVsZF93aWR0aCk7Ci0KLQkJCUJVR19PTihiaXQgPCAwKTsKLQotCQkJcmV0dXJuIF9JTlRDX01LKGZuLCBtb2RlLAotCQkJCQlpbnRjX2dldF9yZWcoZCwgcmVnX2UpLAotCQkJCQlpbnRjX2dldF9yZWcoZCwgcmVnX2QpLAotCQkJCQlwci0+ZmllbGRfd2lkdGgsIGJpdCk7Ci0JCX0KLQl9Ci0KLQlpZiAoZG9fZ3JwcykKLQkJcmV0dXJuIGludGNfcHJpb19kYXRhKGRlc2MsIGQsIGludGNfZ3JwX2lkKGRlc2MsIGVudW1faWQpLCAwKTsKLQotCXJldHVybiAwOwotfQotCi0jaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NIMykgfHwgZGVmaW5lZChDT05GSUdfQ1BVX1NINEEpCi1zdGF0aWMgdW5zaWduZWQgaW50IF9faW5pdCBpbnRjX2Fja19kYXRhKHN0cnVjdCBpbnRjX2Rlc2MgKmRlc2MsCi0JCQkJCSAgc3RydWN0IGludGNfZGVzY19pbnQgKmQsCi0JCQkJCSAgaW50Y19lbnVtIGVudW1faWQpCi17Ci0Jc3RydWN0IGludGNfbWFza19yZWcgKm1yID0gZGVzYy0+YWNrX3JlZ3M7Ci0JdW5zaWduZWQgaW50IGksIGosIGZuLCBtb2RlOwotCXVuc2lnbmVkIGxvbmcgcmVnX2UsIHJlZ19kOwotCi0JZm9yIChpID0gMDsgbXIgJiYgZW51bV9pZCAmJiBpIDwgZGVzYy0+bnJfYWNrX3JlZ3M7IGkrKykgewotCQltciA9IGRlc2MtPmFja19yZWdzICsgaTsKLQotCQlmb3IgKGogPSAwOyBqIDwgQVJSQVlfU0laRShtci0+ZW51bV9pZHMpOyBqKyspIHsKLQkJCWlmIChtci0+ZW51bV9pZHNbal0gIT0gZW51bV9pZCkKLQkJCQljb250aW51ZTsKLQotCQkJZm4gPSBSRUdfRk5fTU9ESUZZX0JBU0U7Ci0JCQltb2RlID0gTU9ERV9FTkFCTEVfUkVHOwotCQkJcmVnX2UgPSBtci0+c2V0X3JlZzsKLQkJCXJlZ19kID0gbXItPnNldF9yZWc7Ci0KLQkJCWZuICs9IChtci0+cmVnX3dpZHRoID4+IDMpIC0gMTsKLQkJCXJldHVybiBfSU5UQ19NSyhmbiwgbW9kZSwKLQkJCQkJaW50Y19nZXRfcmVnKGQsIHJlZ19lKSwKLQkJCQkJaW50Y19nZXRfcmVnKGQsIHJlZ19kKSwKLQkJCQkJMSwKLQkJCQkJKG1yLT5yZWdfd2lkdGggLSAxKSAtIGopOwotCQl9Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0jZW5kaWYKLQotc3RhdGljIHVuc2lnbmVkIGludCBfX2luaXQgaW50Y19zZW5zZV9kYXRhKHN0cnVjdCBpbnRjX2Rlc2MgKmRlc2MsCi0JCQkJCSAgIHN0cnVjdCBpbnRjX2Rlc2NfaW50ICpkLAotCQkJCQkgICBpbnRjX2VudW0gZW51bV9pZCkKLXsKLQlzdHJ1Y3QgaW50Y19zZW5zZV9yZWcgKnNyID0gZGVzYy0+c2Vuc2VfcmVnczsKLQl1bnNpZ25lZCBpbnQgaSwgaiwgZm4sIGJpdDsKLQotCWZvciAoaSA9IDA7IHNyICYmIGVudW1faWQgJiYgaSA8IGRlc2MtPm5yX3NlbnNlX3JlZ3M7IGkrKykgewotCQlzciA9IGRlc2MtPnNlbnNlX3JlZ3MgKyBpOwotCi0JCWZvciAoaiA9IDA7IGogPCBBUlJBWV9TSVpFKHNyLT5lbnVtX2lkcyk7IGorKykgewotCQkJaWYgKHNyLT5lbnVtX2lkc1tqXSAhPSBlbnVtX2lkKQotCQkJCWNvbnRpbnVlOwotCi0JCQlmbiA9IFJFR19GTl9NT0RJRllfQkFTRTsKLQkJCWZuICs9IChzci0+cmVnX3dpZHRoID4+IDMpIC0gMTsKLQkJCWJpdCA9IHNyLT5yZWdfd2lkdGggLSAoKGogKyAxKSAqIHNyLT5maWVsZF93aWR0aCk7Ci0KLQkJCUJVR19PTihiaXQgPCAwKTsKLQotCQkJcmV0dXJuIF9JTlRDX01LKGZuLCAwLCBpbnRjX2dldF9yZWcoZCwgc3ItPnJlZyksCi0JCQkJCTAsIHNyLT5maWVsZF93aWR0aCwgYml0KTsKLQkJfQotCX0KLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBfX2luaXQgaW50Y19yZWdpc3Rlcl9pcnEoc3RydWN0IGludGNfZGVzYyAqZGVzYywKLQkJCQkgICAgIHN0cnVjdCBpbnRjX2Rlc2NfaW50ICpkLAotCQkJCSAgICAgaW50Y19lbnVtIGVudW1faWQsCi0JCQkJICAgICB1bnNpZ25lZCBpbnQgaXJxKQotewotCXN0cnVjdCBpbnRjX2hhbmRsZV9pbnQgKmhwOwotCXVuc2lnbmVkIGludCBkYXRhWzJdLCBwcmltYXJ5OwotCi0JLyogUHJlZmVyIHNpbmdsZSBpbnRlcnJ1cHQgc291cmNlIGJpdG1hcCBvdmVyIG90aGVyIGNvbWJpbmF0aW9uczoKLQkgKiAxLiBiaXRtYXAsIHNpbmdsZSBpbnRlcnJ1cHQgc291cmNlCi0JICogMi4gcHJpb3JpdHksIHNpbmdsZSBpbnRlcnJ1cHQgc291cmNlCi0JICogMy4gYml0bWFwLCBtdWx0aXBsZSBpbnRlcnJ1cHQgc291cmNlcyAoZ3JvdXBzKQotCSAqIDQuIHByaW9yaXR5LCBtdWx0aXBsZSBpbnRlcnJ1cHQgc291cmNlcyAoZ3JvdXBzKQotCSAqLwotCi0JZGF0YVswXSA9IGludGNfbWFza19kYXRhKGRlc2MsIGQsIGVudW1faWQsIDApOwotCWRhdGFbMV0gPSBpbnRjX3ByaW9fZGF0YShkZXNjLCBkLCBlbnVtX2lkLCAwKTsKLQotCXByaW1hcnkgPSAwOwotCWlmICghZGF0YVswXSAmJiBkYXRhWzFdKQotCQlwcmltYXJ5ID0gMTsKLQotCWRhdGFbMF0gPSBkYXRhWzBdID8gZGF0YVswXSA6IGludGNfbWFza19kYXRhKGRlc2MsIGQsIGVudW1faWQsIDEpOwotCWRhdGFbMV0gPSBkYXRhWzFdID8gZGF0YVsxXSA6IGludGNfcHJpb19kYXRhKGRlc2MsIGQsIGVudW1faWQsIDEpOwotCi0JaWYgKCFkYXRhW3ByaW1hcnldKQotCQlwcmltYXJ5IF49IDE7Ci0KLQlCVUdfT04oIWRhdGFbcHJpbWFyeV0pOyAvKiBtdXN0IGhhdmUgcHJpbWFyeSBtYXNraW5nIG1ldGhvZCAqLwotCi0JZGlzYWJsZV9pcnFfbm9zeW5jKGlycSk7Ci0Jc2V0X2lycV9jaGlwX2FuZF9oYW5kbGVyX25hbWUoaXJxLCAmZC0+Y2hpcCwKLQkJCQkgICAgICBoYW5kbGVfbGV2ZWxfaXJxLCAibGV2ZWwiKTsKLQlzZXRfaXJxX2NoaXBfZGF0YShpcnEsICh2b2lkICopZGF0YVtwcmltYXJ5XSk7Ci0KLQkvKiBzZXQgcHJpb3JpdHkgbGV2ZWwKLQkgKiAtIHRoaXMgbmVlZHMgdG8gYmUgYXQgbGVhc3QgMiBmb3IgNS1iaXQgcHJpb3JpdGllcyBvbiA3NzgwCi0JICovCi0JaW50Y19wcmlvX2xldmVsW2lycV0gPSAyOwotCi0JLyogZW5hYmxlIHNlY29uZGFyeSBtYXNraW5nIG1ldGhvZCBpZiBwcmVzZW50ICovCi0JaWYgKGRhdGFbIXByaW1hcnldKQotCQlfaW50Y19lbmFibGUoaXJxLCBkYXRhWyFwcmltYXJ5XSk7Ci0KLQkvKiBhZGQgaXJxIHRvIGQtPnByaW8gbGlzdCBpZiBwcmlvcml0eSBpcyBhdmFpbGFibGUgKi8KLQlpZiAoZGF0YVsxXSkgewotCQlocCA9IGQtPnByaW8gKyBkLT5ucl9wcmlvOwotCQlocC0+aXJxID0gaXJxOwotCQlocC0+aGFuZGxlID0gZGF0YVsxXTsKLQotCQlpZiAocHJpbWFyeSkgewotCQkJLyoKLQkJCSAqIG9ubHkgc2Vjb25kYXJ5IHByaW9yaXR5IHNob3VsZCBhY2Nlc3MgcmVnaXN0ZXJzLCBzbwotCQkJICogc2V0IF9JTlRDX0ZOKGgpID0gUkVHX0ZOX0VSUiBmb3IgaW50Y19zZXRfcHJpb3JpdHkoKQotCQkJICovCi0KLQkJCWhwLT5oYW5kbGUgJj0gfl9JTlRDX01LKDB4MGYsIDAsIDAsIDAsIDAsIDApOwotCQkJaHAtPmhhbmRsZSB8PSBfSU5UQ19NSyhSRUdfRk5fRVJSLCAwLCAwLCAwLCAwLCAwKTsKLQkJfQotCQlkLT5ucl9wcmlvKys7Ci0JfQotCi0JLyogYWRkIGlycSB0byBkLT5zZW5zZSBsaXN0IGlmIHNlbnNlIGlzIGF2YWlsYWJsZSAqLwotCWRhdGFbMF0gPSBpbnRjX3NlbnNlX2RhdGEoZGVzYywgZCwgZW51bV9pZCk7Ci0JaWYgKGRhdGFbMF0pIHsKLQkJKGQtPnNlbnNlICsgZC0+bnJfc2Vuc2UpLT5pcnEgPSBpcnE7Ci0JCShkLT5zZW5zZSArIGQtPm5yX3NlbnNlKS0+aGFuZGxlID0gZGF0YVswXTsKLQkJZC0+bnJfc2Vuc2UrKzsKLQl9Ci0KLQkvKiBpcnEgc2hvdWxkIGJlIGRpc2FibGVkIGJ5IGRlZmF1bHQgKi8KLQlkLT5jaGlwLm1hc2soaXJxKTsKLQotI2lmIGRlZmluZWQoQ09ORklHX0NQVV9TSDMpIHx8IGRlZmluZWQoQ09ORklHX0NQVV9TSDRBKQotCWlmIChkZXNjLT5hY2tfcmVncykKLQkJYWNrX2hhbmRsZVtpcnFdID0gaW50Y19hY2tfZGF0YShkZXNjLCBkLCBlbnVtX2lkKTsKLSNlbmRpZgotfQotCi1zdGF0aWMgdW5zaWduZWQgaW50IF9faW5pdCBzYXZlX3JlZyhzdHJ1Y3QgaW50Y19kZXNjX2ludCAqZCwKLQkJCQkgICAgdW5zaWduZWQgaW50IGNudCwKLQkJCQkgICAgdW5zaWduZWQgbG9uZyB2YWx1ZSwKLQkJCQkgICAgdW5zaWduZWQgaW50IHNtcCkKLXsKLQlpZiAodmFsdWUpIHsKLQkJZC0+cmVnW2NudF0gPSB2YWx1ZTsKLSNpZmRlZiBDT05GSUdfU01QCi0JCWQtPnNtcFtjbnRdID0gc21wOwotI2VuZGlmCi0JCXJldHVybiAxOwotCX0KLQotCXJldHVybiAwOwotfQotCi0KLXZvaWQgX19pbml0IHJlZ2lzdGVyX2ludGNfY29udHJvbGxlcihzdHJ1Y3QgaW50Y19kZXNjICpkZXNjKQotewotCXVuc2lnbmVkIGludCBpLCBrLCBzbXA7Ci0Jc3RydWN0IGludGNfZGVzY19pbnQgKmQ7Ci0KLQlkID0gYWxsb2NfYm9vdG1lbShzaXplb2YoKmQpKTsKLQotCWQtPm5yX3JlZyA9IGRlc2MtPm1hc2tfcmVncyA/IGRlc2MtPm5yX21hc2tfcmVncyAqIDIgOiAwOwotCWQtPm5yX3JlZyArPSBkZXNjLT5wcmlvX3JlZ3MgPyBkZXNjLT5ucl9wcmlvX3JlZ3MgKiAyIDogMDsKLQlkLT5ucl9yZWcgKz0gZGVzYy0+c2Vuc2VfcmVncyA/IGRlc2MtPm5yX3NlbnNlX3JlZ3MgOiAwOwotCi0jaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NIMykgfHwgZGVmaW5lZChDT05GSUdfQ1BVX1NINEEpCi0JZC0+bnJfcmVnICs9IGRlc2MtPmFja19yZWdzID8gZGVzYy0+bnJfYWNrX3JlZ3MgOiAwOwotI2VuZGlmCi0JZC0+cmVnID0gYWxsb2NfYm9vdG1lbShkLT5ucl9yZWcgKiBzaXplb2YoKmQtPnJlZykpOwotI2lmZGVmIENPTkZJR19TTVAKLQlkLT5zbXAgPSBhbGxvY19ib290bWVtKGQtPm5yX3JlZyAqIHNpemVvZigqZC0+c21wKSk7Ci0jZW5kaWYKLQlrID0gMDsKLQotCWlmIChkZXNjLT5tYXNrX3JlZ3MpIHsKLQkJZm9yIChpID0gMDsgaSA8IGRlc2MtPm5yX21hc2tfcmVnczsgaSsrKSB7Ci0JCQlzbXAgPSBJU19TTVAoZGVzYy0+bWFza19yZWdzW2ldKTsKLQkJCWsgKz0gc2F2ZV9yZWcoZCwgaywgZGVzYy0+bWFza19yZWdzW2ldLnNldF9yZWcsIHNtcCk7Ci0JCQlrICs9IHNhdmVfcmVnKGQsIGssIGRlc2MtPm1hc2tfcmVnc1tpXS5jbHJfcmVnLCBzbXApOwotCQl9Ci0JfQotCi0JaWYgKGRlc2MtPnByaW9fcmVncykgewotCQlkLT5wcmlvID0gYWxsb2NfYm9vdG1lbShkZXNjLT5ucl92ZWN0b3JzICogc2l6ZW9mKCpkLT5wcmlvKSk7Ci0KLQkJZm9yIChpID0gMDsgaSA8IGRlc2MtPm5yX3ByaW9fcmVnczsgaSsrKSB7Ci0JCQlzbXAgPSBJU19TTVAoZGVzYy0+cHJpb19yZWdzW2ldKTsKLQkJCWsgKz0gc2F2ZV9yZWcoZCwgaywgZGVzYy0+cHJpb19yZWdzW2ldLnNldF9yZWcsIHNtcCk7Ci0JCQlrICs9IHNhdmVfcmVnKGQsIGssIGRlc2MtPnByaW9fcmVnc1tpXS5jbHJfcmVnLCBzbXApOwotCQl9Ci0JfQotCi0JaWYgKGRlc2MtPnNlbnNlX3JlZ3MpIHsKLQkJZC0+c2Vuc2UgPSBhbGxvY19ib290bWVtKGRlc2MtPm5yX3ZlY3RvcnMgKiBzaXplb2YoKmQtPnNlbnNlKSk7Ci0KLQkJZm9yIChpID0gMDsgaSA8IGRlc2MtPm5yX3NlbnNlX3JlZ3M7IGkrKykgewotCQkJayArPSBzYXZlX3JlZyhkLCBrLCBkZXNjLT5zZW5zZV9yZWdzW2ldLnJlZywgMCk7Ci0JCX0KLQl9Ci0KLQlkLT5jaGlwLm5hbWUgPSBkZXNjLT5uYW1lOwotCWQtPmNoaXAubWFzayA9IGludGNfZGlzYWJsZTsKLQlkLT5jaGlwLnVubWFzayA9IGludGNfZW5hYmxlOwotCWQtPmNoaXAubWFza19hY2sgPSBpbnRjX2Rpc2FibGU7Ci0JZC0+Y2hpcC5zZXRfdHlwZSA9IGludGNfc2V0X3NlbnNlOwotCi0jaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NIMykgfHwgZGVmaW5lZChDT05GSUdfQ1BVX1NINEEpCi0JaWYgKGRlc2MtPmFja19yZWdzKSB7Ci0JCWZvciAoaSA9IDA7IGkgPCBkZXNjLT5ucl9hY2tfcmVnczsgaSsrKQotCQkJayArPSBzYXZlX3JlZyhkLCBrLCBkZXNjLT5hY2tfcmVnc1tpXS5zZXRfcmVnLCAwKTsKLQotCQlkLT5jaGlwLm1hc2tfYWNrID0gaW50Y19tYXNrX2FjazsKLQl9Ci0jZW5kaWYKLQotCUJVR19PTihrID4gMjU2KTsgLyogX0lOVENfQUREUl9FKCkgYW5kIF9JTlRDX0FERFJfRCgpIGFyZSA4IGJpdHMgKi8KLQotCWZvciAoaSA9IDA7IGkgPCBkZXNjLT5ucl92ZWN0b3JzOyBpKyspIHsKLQkJc3RydWN0IGludGNfdmVjdCAqdmVjdCA9IGRlc2MtPnZlY3RvcnMgKyBpOwotCi0JCWludGNfcmVnaXN0ZXJfaXJxKGRlc2MsIGQsIHZlY3QtPmVudW1faWQsIGV2dDJpcnEodmVjdC0+dmVjdCkpOwotCX0KLX0KZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9pcnEvaXByLmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvaXJxL2lwci5jCmluZGV4IDU2ZWE3YjIuLjNlYjE3ZWUgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9pcnEvaXByLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L2lycS9pcHIuYwpAQCAtMzMsNyArMzMsNyBAQAogCXN0cnVjdCBpcHJfZGF0YSAqcCA9IGdldF9pcnFfY2hpcF9kYXRhKGlycSk7CiAJdW5zaWduZWQgbG9uZyBhZGRyID0gZ2V0X2lwcl9kZXNjKGlycSktPmlwcl9vZmZzZXRzW3AtPmlwcl9pZHhdOwogCS8qIFNldCB0aGUgcHJpb3JpdHkgaW4gSVBSIHRvIDAgKi8KLQljdHJsX291dHcoY3RybF9pbncoYWRkcikgJiAoMHhmZmZmIF4gKDB4ZiA8PCBwLT5zaGlmdCkpLCBhZGRyKTsKKwlfX3Jhd193cml0ZXcoX19yYXdfcmVhZHcoYWRkcikgJiAoMHhmZmZmIF4gKDB4ZiA8PCBwLT5zaGlmdCkpLCBhZGRyKTsKIH0KIAogc3RhdGljIHZvaWQgZW5hYmxlX2lwcl9pcnEodW5zaWduZWQgaW50IGlycSkKQEAgLTQxLDcgKzQxLDcgQEAKIAlzdHJ1Y3QgaXByX2RhdGEgKnAgPSBnZXRfaXJxX2NoaXBfZGF0YShpcnEpOwogCXVuc2lnbmVkIGxvbmcgYWRkciA9IGdldF9pcHJfZGVzYyhpcnEpLT5pcHJfb2Zmc2V0c1twLT5pcHJfaWR4XTsKIAkvKiBTZXQgcHJpb3JpdHkgaW4gSVBSIGJhY2sgdG8gb3JpZ2luYWwgdmFsdWUgKi8KLQljdHJsX291dHcoY3RybF9pbncoYWRkcikgfCAocC0+cHJpb3JpdHkgPDwgcC0+c2hpZnQpLCBhZGRyKTsKKwlfX3Jhd193cml0ZXcoX19yYXdfcmVhZHcoYWRkcikgfCAocC0+cHJpb3JpdHkgPDwgcC0+c2hpZnQpLCBhZGRyKTsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDJhL01ha2VmaWxlIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMmEvTWFrZWZpbGUKaW5kZXggMWFiMWVjZi4uNDI4NDUwYyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMmEvTWFrZWZpbGUKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMmEvTWFrZWZpbGUKQEAgLTEyLDMgKzEyLDggQEAKIG9iai0kKENPTkZJR19DUFVfU1VCVFlQRV9TSDcyMDMpCSs9IHNldHVwLXNoNzIwMy5vIGNsb2NrLXNoNzIwMy5vCiBvYmotJChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MjYzKQkrPSBzZXR1cC1zaDcyMDMubyBjbG9jay1zaDcyMDMubwogb2JqLSQoQ09ORklHX0NQVV9TVUJUWVBFX01YRykJCSs9IHNldHVwLW14Zy5vIGNsb2NrLXNoNzIwNi5vCisKKyMgUGlubXV4IHNldHVwCitwaW5tdXgtJChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MjAzKQk6PSBwaW5tdXgtc2g3MjAzLm8KKworb2JqLSQoQ09ORklHX0dFTkVSSUNfR1BJTykJKz0gJChwaW5tdXgteSkKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDJhL3Bpbm11eC1zaDcyMDMuYyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDJhL3Bpbm11eC1zaDcyMDMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOWE1Yjg4Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMmEvcGlubXV4LXNoNzIwMy5jCkBAIC0wLDAgKzEsMTU5OSBAQAorLyoKKyAqIFNINzIwMyBQaW5tdXgKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA4ICBNYWdudXMgRGFtbQorICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgorI2luY2x1ZGUgPGFzbS9zaDcyMDMuaD4KKworZW51bSB7CisJUElOTVVYX1JFU0VSVkVEID0gMCwKKworCVBJTk1VWF9EQVRBX0JFR0lOLAorCVBBN19EQVRBLCBQQTZfREFUQSwgUEE1X0RBVEEsIFBBNF9EQVRBLAorCVBBM19EQVRBLCBQQTJfREFUQSwgUEExX0RBVEEsIFBBMF9EQVRBLAorCVBCMTJfREFUQSwKKwlQQjExX0RBVEEsIFBCMTBfREFUQSwgUEI5X0RBVEEsIFBCOF9EQVRBLAorCVBCN19EQVRBLCBQQjZfREFUQSwgUEI1X0RBVEEsIFBCNF9EQVRBLAorCVBCM19EQVRBLCBQQjJfREFUQSwgUEIxX0RBVEEsIFBCMF9EQVRBLAorCVBDMTRfREFUQSwgUEMxM19EQVRBLCBQQzEyX0RBVEEsCisJUEMxMV9EQVRBLCBQQzEwX0RBVEEsIFBDOV9EQVRBLCBQQzhfREFUQSwKKwlQQzdfREFUQSwgUEM2X0RBVEEsIFBDNV9EQVRBLCBQQzRfREFUQSwKKwlQQzNfREFUQSwgUEMyX0RBVEEsIFBDMV9EQVRBLCBQQzBfREFUQSwKKwlQRDE1X0RBVEEsIFBEMTRfREFUQSwgUEQxM19EQVRBLCBQRDEyX0RBVEEsCisJUEQxMV9EQVRBLCBQRDEwX0RBVEEsIFBEOV9EQVRBLCBQRDhfREFUQSwKKwlQRDdfREFUQSwgUEQ2X0RBVEEsIFBENV9EQVRBLCBQRDRfREFUQSwKKwlQRDNfREFUQSwgUEQyX0RBVEEsIFBEMV9EQVRBLCBQRDBfREFUQSwKKwlQRTE1X0RBVEEsIFBFMTRfREFUQSwgUEUxM19EQVRBLCBQRTEyX0RBVEEsCisJUEUxMV9EQVRBLCBQRTEwX0RBVEEsIFBFOV9EQVRBLCBQRThfREFUQSwKKwlQRTdfREFUQSwgUEU2X0RBVEEsIFBFNV9EQVRBLCBQRTRfREFUQSwKKwlQRTNfREFUQSwgUEUyX0RBVEEsIFBFMV9EQVRBLCBQRTBfREFUQSwKKwlQRjMwX0RBVEEsIFBGMjlfREFUQSwgUEYyOF9EQVRBLAorCVBGMjdfREFUQSwgUEYyNl9EQVRBLCBQRjI1X0RBVEEsIFBGMjRfREFUQSwKKwlQRjIzX0RBVEEsIFBGMjJfREFUQSwgUEYyMV9EQVRBLCBQRjIwX0RBVEEsCisJUEYxOV9EQVRBLCBQRjE4X0RBVEEsIFBGMTdfREFUQSwgUEYxNl9EQVRBLAorCVBGMTVfREFUQSwgUEYxNF9EQVRBLCBQRjEzX0RBVEEsIFBGMTJfREFUQSwKKwlQRjExX0RBVEEsIFBGMTBfREFUQSwgUEY5X0RBVEEsIFBGOF9EQVRBLAorCVBGN19EQVRBLCBQRjZfREFUQSwgUEY1X0RBVEEsIFBGNF9EQVRBLAorCVBGM19EQVRBLCBQRjJfREFUQSwgUEYxX0RBVEEsIFBGMF9EQVRBLAorCVBJTk1VWF9EQVRBX0VORCwKKworCVBJTk1VWF9JTlBVVF9CRUdJTiwKKwlQQTdfSU4sIFBBNl9JTiwgUEE1X0lOLCBQQTRfSU4sCisJUEEzX0lOLCBQQTJfSU4sIFBBMV9JTiwgUEEwX0lOLAorCVBCMTFfSU4sIFBCMTBfSU4sIFBCOV9JTiwgUEI4X0lOLAorCVBCN19JTiwgUEI2X0lOLCBQQjVfSU4sIFBCNF9JTiwKKwlQQjNfSU4sIFBCMl9JTiwgUEIxX0lOLCBQQjBfSU4sCisJUEMxNF9JTiwgUEMxM19JTiwgUEMxMl9JTiwKKwlQQzExX0lOLCBQQzEwX0lOLCBQQzlfSU4sIFBDOF9JTiwKKwlQQzdfSU4sIFBDNl9JTiwgUEM1X0lOLCBQQzRfSU4sCisJUEMzX0lOLCBQQzJfSU4sIFBDMV9JTiwgUEMwX0lOLAorCVBEMTVfSU4sIFBEMTRfSU4sIFBEMTNfSU4sIFBEMTJfSU4sCisJUEQxMV9JTiwgUEQxMF9JTiwgUEQ5X0lOLCBQRDhfSU4sCisJUEQ3X0lOLCBQRDZfSU4sIFBENV9JTiwgUEQ0X0lOLAorCVBEM19JTiwgUEQyX0lOLCBQRDFfSU4sIFBEMF9JTiwKKwlQRTE1X0lOLCBQRTE0X0lOLCBQRTEzX0lOLCBQRTEyX0lOLAorCVBFMTFfSU4sIFBFMTBfSU4sIFBFOV9JTiwgUEU4X0lOLAorCVBFN19JTiwgUEU2X0lOLCBQRTVfSU4sIFBFNF9JTiwKKwlQRTNfSU4sIFBFMl9JTiwgUEUxX0lOLCBQRTBfSU4sCisJUEYzMF9JTiwgUEYyOV9JTiwgUEYyOF9JTiwKKwlQRjI3X0lOLCBQRjI2X0lOLCBQRjI1X0lOLCBQRjI0X0lOLAorCVBGMjNfSU4sIFBGMjJfSU4sIFBGMjFfSU4sIFBGMjBfSU4sCisJUEYxOV9JTiwgUEYxOF9JTiwgUEYxN19JTiwgUEYxNl9JTiwKKwlQRjE1X0lOLCBQRjE0X0lOLCBQRjEzX0lOLCBQRjEyX0lOLAorCVBGMTFfSU4sIFBGMTBfSU4sIFBGOV9JTiwgUEY4X0lOLAorCVBGN19JTiwgUEY2X0lOLCBQRjVfSU4sIFBGNF9JTiwKKwlQRjNfSU4sIFBGMl9JTiwgUEYxX0lOLCBQRjBfSU4sCisJUElOTVVYX0lOUFVUX0VORCwKKworCVBJTk1VWF9PVVRQVVRfQkVHSU4sCisJUEIxMl9PVVQsCisJUEIxMV9PVVQsIFBCMTBfT1VULCBQQjlfT1VULCBQQjhfT1VULAorCVBDMTRfT1VULCBQQzEzX09VVCwgUEMxMl9PVVQsCisJUEMxMV9PVVQsIFBDMTBfT1VULCBQQzlfT1VULCBQQzhfT1VULAorCVBDN19PVVQsIFBDNl9PVVQsIFBDNV9PVVQsIFBDNF9PVVQsCisJUEMzX09VVCwgUEMyX09VVCwgUEMxX09VVCwgUEMwX09VVCwKKwlQRDE1X09VVCwgUEQxNF9PVVQsIFBEMTNfT1VULCBQRDEyX09VVCwKKwlQRDExX09VVCwgUEQxMF9PVVQsIFBEOV9PVVQsIFBEOF9PVVQsCisJUEQ3X09VVCwgUEQ2X09VVCwgUEQ1X09VVCwgUEQ0X09VVCwKKwlQRDNfT1VULCBQRDJfT1VULCBQRDFfT1VULCBQRDBfT1VULAorCVBFMTVfT1VULCBQRTE0X09VVCwgUEUxM19PVVQsIFBFMTJfT1VULAorCVBFMTFfT1VULCBQRTEwX09VVCwgUEU5X09VVCwgUEU4X09VVCwKKwlQRTdfT1VULCBQRTZfT1VULCBQRTVfT1VULCBQRTRfT1VULAorCVBFM19PVVQsIFBFMl9PVVQsIFBFMV9PVVQsIFBFMF9PVVQsCisJUEYzMF9PVVQsIFBGMjlfT1VULCBQRjI4X09VVCwKKwlQRjI3X09VVCwgUEYyNl9PVVQsIFBGMjVfT1VULCBQRjI0X09VVCwKKwlQRjIzX09VVCwgUEYyMl9PVVQsIFBGMjFfT1VULCBQRjIwX09VVCwKKwlQRjE5X09VVCwgUEYxOF9PVVQsIFBGMTdfT1VULCBQRjE2X09VVCwKKwlQRjE1X09VVCwgUEYxNF9PVVQsIFBGMTNfT1VULCBQRjEyX09VVCwKKwlQRjExX09VVCwgUEYxMF9PVVQsIFBGOV9PVVQsIFBGOF9PVVQsCisJUEY3X09VVCwgUEY2X09VVCwgUEY1X09VVCwgUEY0X09VVCwKKwlQRjNfT1VULCBQRjJfT1VULCBQRjFfT1VULCBQRjBfT1VULAorCVBJTk1VWF9PVVRQVVRfRU5ELAorCisJUElOTVVYX0ZVTkNUSU9OX0JFR0lOLAorCVBCMTFfSU9SX0lOLCBQQjExX0lPUl9PVVQsCisJUEIxMF9JT1JfSU4sIFBCMTBfSU9SX09VVCwKKwlQQjlfSU9SX0lOLCBQQjlfSU9SX09VVCwKKwlQQjhfSU9SX0lOLCBQQjhfSU9SX09VVCwKKwlQQjEyTURfMDAsIFBCMTJNRF8wMSwgUEIxMk1EXzEwLCBQQjEyTURfMTEsCisJUEIxMU1EXzAsIFBCMTFNRF8xLAorCVBCMTBNRF8wLCBQQjEwTURfMSwKKwlQQjlNRF8wMCwgUEI5TURfMDEsIFBCOU1EXzEwLAorCVBCOE1EXzAwLCBQQjhNRF8wMSwgUEI4TURfMTAsCisJUEI3TURfMDAsIFBCN01EXzAxLCBQQjdNRF8xMCwgUEI3TURfMTEsCisJUEI2TURfMDAsIFBCNk1EXzAxLCBQQjZNRF8xMCwgUEI2TURfMTEsCisJUEI1TURfMDAsIFBCNU1EXzAxLCBQQjVNRF8xMCwgUEI1TURfMTEsCisJUEI0TURfMDAsIFBCNE1EXzAxLCBQQjRNRF8xMCwgUEI0TURfMTEsCisJUEIzTURfMDAsIFBCM01EXzAxLCBQQjNNRF8xMCwgUEIzTURfMTEsCisJUEIyTURfMDAsIFBCMk1EXzAxLCBQQjJNRF8xMCwgUEIyTURfMTEsCisJUEIxTURfMDAsIFBCMU1EXzAxLCBQQjFNRF8xMCwgUEIxTURfMTEsCisJUEIwTURfMDAsIFBCME1EXzAxLCBQQjBNRF8xMCwgUEIwTURfMTEsCisKKwlQQjEySVJRXzAwLCBQQjEySVJRXzAxLCBQQjEySVJRXzEwLAorCisJUEMxNE1EXzAsIFBDMTRNRF8xLAorCVBDMTNNRF8wLCBQQzEzTURfMSwKKwlQQzEyTURfMCwgUEMxMk1EXzEsCisJUEMxMU1EXzAwLCBQQzExTURfMDEsIFBDMTFNRF8xMCwKKwlQQzEwTURfMDAsIFBDMTBNRF8wMSwgUEMxME1EXzEwLAorCVBDOU1EXzAsIFBDOU1EXzEsCisJUEM4TURfMCwgUEM4TURfMSwKKwlQQzdNRF8wLCBQQzdNRF8xLAorCVBDNk1EXzAsIFBDNk1EXzEsCisJUEM1TURfMCwgUEM1TURfMSwKKwlQQzRNRF8wLCBQQzRNRF8xLAorCVBDM01EXzAsIFBDM01EXzEsCisJUEMyTURfMCwgUEMyTURfMSwKKwlQQzFNRF8wLCBQQzFNRF8xLAorCVBDME1EXzAwLCBQQzBNRF8wMSwgUEMwTURfMTAsCisKKwlQRDE1TURfMDAwLCBQRDE1TURfMDAxLCBQRDE1TURfMDEwLCBQRDE1TURfMTAwLCBQRDE1TURfMTAxLAorCVBEMTRNRF8wMDAsIFBEMTRNRF8wMDEsIFBEMTRNRF8wMTAsIFBEMTRNRF8xMDEsCisJUEQxM01EXzAwMCwgUEQxM01EXzAwMSwgUEQxM01EXzAxMCwgUEQxM01EXzEwMCwgUEQxM01EXzEwMSwKKwlQRDEyTURfMDAwLCBQRDEyTURfMDAxLCBQRDEyTURfMDEwLCBQRDEyTURfMTAwLCBQRDEyTURfMTAxLAorCVBEMTFNRF8wMDAsIFBEMTFNRF8wMDEsIFBEMTFNRF8wMTAsIFBEMTFNRF8xMDAsIFBEMTFNRF8xMDEsCisJUEQxME1EXzAwMCwgUEQxME1EXzAwMSwgUEQxME1EXzAxMCwgUEQxME1EXzEwMCwgUEQxME1EXzEwMSwKKwlQRDlNRF8wMDAsIFBEOU1EXzAwMSwgUEQ5TURfMDEwLCBQRDlNRF8xMDAsIFBEOU1EXzEwMSwKKwlQRDhNRF8wMDAsIFBEOE1EXzAwMSwgUEQ4TURfMDEwLCBQRDhNRF8xMDAsIFBEOE1EXzEwMSwKKwlQRDdNRF8wMDAsIFBEN01EXzAwMSwgUEQ3TURfMDEwLCBQRDdNRF8wMTEsIFBEN01EXzEwMCwgUEQ3TURfMTAxLAorCVBENk1EXzAwMCwgUEQ2TURfMDAxLCBQRDZNRF8wMTAsIFBENk1EXzAxMSwgUEQ2TURfMTAwLCBQRDZNRF8xMDEsCisJUEQ1TURfMDAwLCBQRDVNRF8wMDEsIFBENU1EXzAxMCwgUEQ1TURfMDExLCBQRDVNRF8xMDAsIFBENU1EXzEwMSwKKwlQRDRNRF8wMDAsIFBENE1EXzAwMSwgUEQ0TURfMDEwLCBQRDRNRF8wMTEsIFBENE1EXzEwMCwgUEQ0TURfMTAxLAorCVBEM01EXzAwMCwgUEQzTURfMDAxLCBQRDNNRF8wMTAsIFBEM01EXzAxMSwgUEQzTURfMTAwLCBQRDNNRF8xMDEsCisJUEQyTURfMDAwLCBQRDJNRF8wMDEsIFBEMk1EXzAxMCwgUEQyTURfMDExLCBQRDJNRF8xMDAsIFBEMk1EXzEwMSwKKwlQRDFNRF8wMDAsIFBEMU1EXzAwMSwgUEQxTURfMDEwLCBQRDFNRF8wMTEsIFBEMU1EXzEwMCwgUEQxTURfMTAxLAorCVBEME1EXzAwMCwgUEQwTURfMDAxLCBQRDBNRF8wMTAsIFBEME1EXzAxMSwgUEQwTURfMTAwLCBQRDBNRF8xMDEsCisKKwlQRTE1TURfMDAsIFBFMTVNRF8wMSwgUEUxNU1EXzExLAorCVBFMTRNRF8wMCwgUEUxNE1EXzAxLCBQRTE0TURfMTEsCisJUEUxM01EXzAwLCBQRTEzTURfMTEsCisJUEUxMk1EXzAwLCBQRTEyTURfMTEsCisJUEUxMU1EXzAwMCwgUEUxMU1EXzAwMSwgUEUxMU1EXzAxMCwgUEUxMU1EXzEwMCwKKwlQRTEwTURfMDAwLCBQRTEwTURfMDAxLCBQRTEwTURfMDEwLCBQRTEwTURfMTAwLAorCVBFOU1EXzAwLCBQRTlNRF8wMSwgUEU5TURfMTAsIFBFOU1EXzExLAorCVBFOE1EXzAwLCBQRThNRF8wMSwgUEU4TURfMTAsIFBFOE1EXzExLAorCVBFN01EXzAwMCwgUEU3TURfMDAxLCBQRTdNRF8wMTAsIFBFN01EXzAxMSwgUEU3TURfMTAwLAorCVBFNk1EXzAwMCwgUEU2TURfMDAxLCBQRTZNRF8wMTAsIFBFNk1EXzAxMSwgUEU2TURfMTAwLAorCVBFNU1EXzAwMCwgUEU1TURfMDAxLCBQRTVNRF8wMTAsIFBFNU1EXzAxMSwgUEU1TURfMTAwLAorCVBFNE1EXzAwMCwgUEU0TURfMDAxLCBQRTRNRF8wMTAsIFBFNE1EXzAxMSwgUEU0TURfMTAwLAorCVBFM01EXzAwLCBQRTNNRF8wMSwgUEUzTURfMTEsCisJUEUyTURfMDAsIFBFMk1EXzAxLCBQRTJNRF8xMSwKKwlQRTFNRF8wMCwgUEUxTURfMDEsIFBFMU1EXzEwLCBQRTFNRF8xMSwKKwlQRTBNRF8wMDAsIFBFME1EXzAwMSwgUEUwTURfMDExLCBQRTBNRF8xMDAsCisKKwlQRjMwTURfMCwgUEYzME1EXzEsCisJUEYyOU1EXzAsIFBGMjlNRF8xLAorCVBGMjhNRF8wLCBQRjI4TURfMSwKKwlQRjI3TURfMCwgUEYyN01EXzEsCisJUEYyNk1EXzAsIFBGMjZNRF8xLAorCVBGMjVNRF8wLCBQRjI1TURfMSwKKwlQRjI0TURfMCwgUEYyNE1EXzEsCisJUEYyM01EXzAwLCBQRjIzTURfMDEsIFBGMjNNRF8xMCwKKwlQRjIyTURfMDAsIFBGMjJNRF8wMSwgUEYyMk1EXzEwLAorCVBGMjFNRF8wMCwgUEYyMU1EXzAxLCBQRjIxTURfMTAsCisJUEYyME1EXzAwLCBQRjIwTURfMDEsIFBGMjBNRF8xMCwKKwlQRjE5TURfMDAsIFBGMTlNRF8wMSwgUEYxOU1EXzEwLAorCVBGMThNRF8wMCwgUEYxOE1EXzAxLCBQRjE4TURfMTAsCisJUEYxN01EXzAwLCBQRjE3TURfMDEsIFBGMTdNRF8xMCwKKwlQRjE2TURfMDAsIFBGMTZNRF8wMSwgUEYxNk1EXzEwLAorCVBGMTVNRF8wMCwgUEYxNU1EXzAxLCBQRjE1TURfMTAsCisJUEYxNE1EXzAwLCBQRjE0TURfMDEsIFBGMTRNRF8xMCwKKwlQRjEzTURfMDAsIFBGMTNNRF8wMSwgUEYxM01EXzEwLAorCVBGMTJNRF8wMCwgUEYxMk1EXzAxLCBQRjEyTURfMTAsCisJUEYxMU1EXzAwLCBQRjExTURfMDEsIFBGMTFNRF8xMCwKKwlQRjEwTURfMDAsIFBGMTBNRF8wMSwgUEYxME1EXzEwLAorCVBGOU1EXzAwLCBQRjlNRF8wMSwgUEY5TURfMTAsCisJUEY4TURfMDAsIFBGOE1EXzAxLCBQRjhNRF8xMCwKKwlQRjdNRF8wMCwgUEY3TURfMDEsIFBGN01EXzEwLCBQRjdNRF8xMSwKKwlQRjZNRF8wMCwgUEY2TURfMDEsIFBGNk1EXzEwLCBQRjZNRF8xMSwKKwlQRjVNRF8wMCwgUEY1TURfMDEsIFBGNU1EXzEwLCBQRjVNRF8xMSwKKwlQRjRNRF8wMCwgUEY0TURfMDEsIFBGNE1EXzEwLCBQRjRNRF8xMSwKKwlQRjNNRF8wMCwgUEYzTURfMDEsIFBGM01EXzEwLCBQRjNNRF8xMSwKKwlQRjJNRF8wMCwgUEYyTURfMDEsIFBGMk1EXzEwLCBQRjJNRF8xMSwKKwlQRjFNRF8wMCwgUEYxTURfMDEsIFBGMU1EXzEwLCBQRjFNRF8xMSwKKwlQRjBNRF8wMCwgUEYwTURfMDEsIFBGME1EXzEwLCBQRjBNRF8xMSwKKwlQSU5NVVhfRlVOQ1RJT05fRU5ELAorCisJUElOTVVYX01BUktfQkVHSU4sCisJUElOVDdfUEJfTUFSSywgUElOVDZfUEJfTUFSSywgUElOVDVfUEJfTUFSSywgUElOVDRfUEJfTUFSSywKKwlQSU5UM19QQl9NQVJLLCBQSU5UMl9QQl9NQVJLLCBQSU5UMV9QQl9NQVJLLCBQSU5UMF9QQl9NQVJLLAorCVBJTlQ3X1BEX01BUkssIFBJTlQ2X1BEX01BUkssIFBJTlQ1X1BEX01BUkssIFBJTlQ0X1BEX01BUkssCisJUElOVDNfUERfTUFSSywgUElOVDJfUERfTUFSSywgUElOVDFfUERfTUFSSywgUElOVDBfUERfTUFSSywKKwlJUlE3X1BCX01BUkssIElSUTZfUEJfTUFSSywgSVJRNV9QQl9NQVJLLCBJUlE0X1BCX01BUkssCisJSVJRM19QQl9NQVJLLCBJUlEyX1BCX01BUkssIElSUTFfUEJfTUFSSywgSVJRMF9QQl9NQVJLLAorCUlSUTdfUERfTUFSSywgSVJRNl9QRF9NQVJLLCBJUlE1X1BEX01BUkssIElSUTRfUERfTUFSSywKKwlJUlEzX1BEX01BUkssIElSUTJfUERfTUFSSywgSVJRMV9QRF9NQVJLLCBJUlEwX1BEX01BUkssCisJSVJRN19QRV9NQVJLLCBJUlE2X1BFX01BUkssIElSUTVfUEVfTUFSSywgSVJRNF9QRV9NQVJLLAorCUlSUTNfUEVfTUFSSywgSVJRMl9QRV9NQVJLLCBJUlExX1BFX01BUkssIElSUTBfUEVfTUFSSywKKwlXRFRPVkZfTUFSSywgSVJRT1VUX01BUkssIFJFRk9VVF9NQVJLLCBJUlFPVVRfUkVGT1VUX01BUkssCisJVUJDVFJHX01BUkssCisJQ1RYMV9NQVJLLCBDUlgxX01BUkssIENUWDBfTUFSSywgQ1RYMF9DVFgxX01BUkssCisJQ1JYMF9NQVJLLCBDUlgwX0NSWDFfTUFSSywKKwlTREEzX01BUkssIFNDTDNfTUFSSywKKwlTREEyX01BUkssIFNDTDJfTUFSSywKKwlTREExX01BUkssIFNDTDFfTUFSSywKKwlTREEwX01BUkssIFNDTDBfTUFSSywKKwlURU5EMF9QRF9NQVJLLCBURU5EMF9QRV9NQVJLLCBEQUNLMF9QRF9NQVJLLCBEQUNLMF9QRV9NQVJLLAorCURSRVEwX1BEX01BUkssIERSRVEwX1BFX01BUkssIFRFTkQxX1BEX01BUkssIFRFTkQxX1BFX01BUkssCisJREFDSzFfUERfTUFSSywgREFDSzFfUEVfTUFSSywgRFJFUTFfUERfTUFSSywgRFJFUTFfUEVfTUFSSywKKwlEQUNLMl9NQVJLLCBEUkVRMl9NQVJLLCBEQUNLM19NQVJLLCBEUkVRM19NQVJLLAorCUFEVFJHX1BEX01BUkssIEFEVFJHX1BFX01BUkssCisJRDMxX01BUkssIEQzMF9NQVJLLCBEMjlfTUFSSywgRDI4X01BUkssCisJRDI3X01BUkssIEQyNl9NQVJLLCBEMjVfTUFSSywgRDI0X01BUkssCisJRDIzX01BUkssIEQyMl9NQVJLLCBEMjFfTUFSSywgRDIwX01BUkssCisJRDE5X01BUkssIEQxOF9NQVJLLCBEMTdfTUFSSywgRDE2X01BUkssCisJQTI1X01BUkssIEEyNF9NQVJLLCBBMjNfTUFSSywgQTIyX01BUkssCisJQTIxX01BUkssIENTNF9NQVJLLCBNUkVTX01BUkssIEJTX01BUkssCisJSU9JUzE2X01BUkssIENTMV9NQVJLLCBDUzZfQ0UxQl9NQVJLLCBDRTJCX01BUkssCisJQ1M1X0NFMUFfTUFSSywgQ0UyQV9NQVJLLCBGUkFNRV9NQVJLLCBXQUlUX01BUkssCisJUkRXUl9NQVJLLCBDS0VfTUFSSywgQ0FTVV9NQVJLLAlCUkVRX01BUkssCisJUkFTVV9NQVJLLCBCQUNLX01BUkssIENBU0xfTUFSSywgUkFTTF9NQVJLLAorCVdFM19EUU1VVV9BSF9JQ0lPX1dSX01BUkssIFdFMl9EUU1VTF9JQ0lPUkRfTUFSSywKKwlXRTFfRFFNTFVfV0VfTUFSSywgV0UwX0RRTUxMX01BUkssCisJQ1MzX01BUkssIENTMl9NQVJLLCBBMV9NQVJLLCBBMF9NQVJLLCBDUzdfTUFSSywKKwlUSU9DNERfTUFSSywgVElPQzRDX01BUkssIFRJT0M0Ql9NQVJLLCBUSU9DNEFfTUFSSywKKwlUSU9DM0RfTUFSSywgVElPQzNDX01BUkssIFRJT0MzQl9NQVJLLCBUSU9DM0FfTUFSSywKKwlUSU9DMkJfTUFSSywgVElPQzFCX01BUkssIFRJT0MyQV9NQVJLLCBUSU9DMUFfTUFSSywKKwlUSU9DMERfTUFSSywgVElPQzBDX01BUkssIFRJT0MwQl9NQVJLLCBUSU9DMEFfTUFSSywKKwlUQ0xLRF9QRF9NQVJLLCBUQ0xLQ19QRF9NQVJLLCBUQ0xLQl9QRF9NQVJLLCBUQ0xLQV9QRF9NQVJLLAorCVRDTEtEX1BGX01BUkssIFRDTEtDX1BGX01BUkssIFRDTEtCX1BGX01BUkssIFRDTEtBX1BGX01BUkssCisJU0NTMF9QRF9NQVJLLCBTU08wX1BEX01BUkssIFNTSTBfUERfTUFSSywgU1NDSzBfUERfTUFSSywKKwlTQ1MwX1BGX01BUkssIFNTTzBfUEZfTUFSSywgU1NJMF9QRl9NQVJLLCBTU0NLMF9QRl9NQVJLLAorCVNDUzFfUERfTUFSSywgU1NPMV9QRF9NQVJLLCBTU0kxX1BEX01BUkssIFNTQ0sxX1BEX01BUkssCisJU0NTMV9QRl9NQVJLLCBTU08xX1BGX01BUkssIFNTSTFfUEZfTUFSSywgU1NDSzFfUEZfTUFSSywKKwlUWEQwX01BUkssIFJYRDBfTUFSSywgU0NLMF9NQVJLLAorCVRYRDFfTUFSSywgUlhEMV9NQVJLLCBTQ0sxX01BUkssCisJVFhEMl9NQVJLLCBSWEQyX01BUkssIFNDSzJfTUFSSywKKwlSVFMzX01BUkssIENUUzNfTUFSSywgVFhEM19NQVJLLAorCVJYRDNfTUFSSywgU0NLM19NQVJLLAorCUFVRElPX0NMS19NQVJLLAorCVNTSURBVEEzX01BUkssIFNTSVdTM19NQVJLLCBTU0lTQ0szX01BUkssCisJU1NJREFUQTJfTUFSSywgU1NJV1MyX01BUkssIFNTSVNDSzJfTUFSSywKKwlTU0lEQVRBMV9NQVJLLCBTU0lXUzFfTUFSSywgU1NJU0NLMV9NQVJLLAorCVNTSURBVEEwX01BUkssIFNTSVdTMF9NQVJLLCBTU0lTQ0swX01BUkssCisJRkNFX01BUkssIEZSQl9NQVJLLAorCU5BRjdfTUFSSywgTkFGNl9NQVJLLCBOQUY1X01BUkssIE5BRjRfTUFSSywKKwlOQUYzX01BUkssIE5BRjJfTUFSSywgTkFGMV9NQVJLLCBOQUYwX01BUkssCisJRlNDX01BUkssIEZPRV9NQVJLLCBGQ0RFX01BUkssIEZXRV9NQVJLLAorCUxDRF9WRVBXQ19NQVJLLCBMQ0RfVkNQV0NfTUFSSywJTENEX0NMS19NQVJLLCBMQ0RfRkxNX01BUkssCisJTENEX01fRElTUF9NQVJLLCBMQ0RfQ0wyX01BUkssIExDRF9DTDFfTUFSSywgTENEX0RPTl9NQVJLLAorCUxDRF9EQVRBMTVfTUFSSywgTENEX0RBVEExNF9NQVJLLCBMQ0RfREFUQTEzX01BUkssIExDRF9EQVRBMTJfTUFSSywKKwlMQ0RfREFUQTExX01BUkssIExDRF9EQVRBMTBfTUFSSywgTENEX0RBVEE5X01BUkssIExDRF9EQVRBOF9NQVJLLAorCUxDRF9EQVRBN19NQVJLLCBMQ0RfREFUQTZfTUFSSywgTENEX0RBVEE1X01BUkssIExDRF9EQVRBNF9NQVJLLAorCUxDRF9EQVRBM19NQVJLLCBMQ0RfREFUQTJfTUFSSywgTENEX0RBVEExX01BUkssIExDRF9EQVRBMF9NQVJLLAorCVBJTk1VWF9NQVJLX0VORCwKK307CisKK3N0YXRpYyBwaW5tdXhfZW51bV90IHBpbm11eF9kYXRhW10gPSB7CisKKwkvKiBQQSAqLworCVBJTk1VWF9EQVRBKFBBN19EQVRBLCBQQTdfSU4pLAorCVBJTk1VWF9EQVRBKFBBNl9EQVRBLCBQQTZfSU4pLAorCVBJTk1VWF9EQVRBKFBBNV9EQVRBLCBQQTVfSU4pLAorCVBJTk1VWF9EQVRBKFBBNF9EQVRBLCBQQTRfSU4pLAorCVBJTk1VWF9EQVRBKFBBM19EQVRBLCBQQTNfSU4pLAorCVBJTk1VWF9EQVRBKFBBMl9EQVRBLCBQQTJfSU4pLAorCVBJTk1VWF9EQVRBKFBBMV9EQVRBLCBQQTFfSU4pLAorCVBJTk1VWF9EQVRBKFBBMF9EQVRBLCBQQTBfSU4pLAorCisJLyogUEIgKi8KKwlQSU5NVVhfREFUQShQQjEyX0RBVEEsIFBCMTJNRF8wMCwgUEIxMl9PVVQpLAorCVBJTk1VWF9EQVRBKFdEVE9WRl9NQVJLLCBQQjEyTURfMDEpLAorCVBJTk1VWF9EQVRBKElSUU9VVF9NQVJLLCBQQjEyTURfMTAsIFBCMTJJUlFfMDApLAorCVBJTk1VWF9EQVRBKFJFRk9VVF9NQVJLLCBQQjEyTURfMTAsIFBCMTJJUlFfMDEpLAorCVBJTk1VWF9EQVRBKElSUU9VVF9SRUZPVVRfTUFSSywgUEIxMk1EXzEwLCBQQjEySVJRXzEwKSwKKwlQSU5NVVhfREFUQShVQkNUUkdfTUFSSywgUEIxMk1EXzExKSwKKworCVBJTk1VWF9EQVRBKFBCMTFfREFUQSwgUEIxMU1EXzAsIFBCMTFfSU4sIFBCMTFfT1VUKSwKKwlQSU5NVVhfREFUQShDVFgxX01BUkssIFBCMTFNRF8xKSwKKworCVBJTk1VWF9EQVRBKFBCMTBfREFUQSwgUEIxME1EXzAsIFBCMTBfSU4sIFBCMTBfT1VUKSwKKwlQSU5NVVhfREFUQShDUlgxX01BUkssIFBCMTBNRF8xKSwKKworCVBJTk1VWF9EQVRBKFBCOV9EQVRBLCBQQjlNRF8wMCwgUEI5X0lOLCBQQjlfT1VUKSwKKwlQSU5NVVhfREFUQShDVFgwX01BUkssIFBCOU1EXzAxKSwKKwlQSU5NVVhfREFUQShDVFgwX0NUWDFfTUFSSywgUEI5TURfMTApLAorCisJUElOTVVYX0RBVEEoUEI4X0RBVEEsIFBCOE1EXzAwLCBQQjhfSU4sIFBCOF9PVVQpLAorCVBJTk1VWF9EQVRBKENSWDBfTUFSSywgUEI4TURfMDEpLAorCVBJTk1VWF9EQVRBKENSWDBfQ1JYMV9NQVJLLCBQQjhNRF8xMCksCisKKwlQSU5NVVhfREFUQShQQjdfREFUQSwgUEI3TURfMDAsIFBCN19JTiksCisJUElOTVVYX0RBVEEoU0RBM19NQVJLLCBQQjdNRF8wMSksCisJUElOTVVYX0RBVEEoUElOVDdfUEJfTUFSSywgUEI3TURfMTApLAorCVBJTk1VWF9EQVRBKElSUTdfUEJfTUFSSywgUEI3TURfMTEpLAorCisJUElOTVVYX0RBVEEoUEI2X0RBVEEsIFBCNk1EXzAwLCBQQjZfSU4pLAorCVBJTk1VWF9EQVRBKFNDTDNfTUFSSywgUEI2TURfMDEpLAorCVBJTk1VWF9EQVRBKFBJTlQ2X1BCX01BUkssIFBCNk1EXzEwKSwKKwlQSU5NVVhfREFUQShJUlE2X1BCX01BUkssIFBCNk1EXzExKSwKKworCVBJTk1VWF9EQVRBKFBCNV9EQVRBLCBQQjVNRF8wMCwgUEI1X0lOKSwKKwlQSU5NVVhfREFUQShTREEyX01BUkssIFBCNk1EXzAxKSwKKwlQSU5NVVhfREFUQShQSU5UNV9QQl9NQVJLLCBQQjZNRF8xMCksCisJUElOTVVYX0RBVEEoSVJRNV9QQl9NQVJLLCBQQjZNRF8xMSksCisKKwlQSU5NVVhfREFUQShQQjRfREFUQSwgUEI0TURfMDAsIFBCNF9JTiksCisJUElOTVVYX0RBVEEoU0NMMl9NQVJLLCBQQjRNRF8wMSksCisJUElOTVVYX0RBVEEoUElOVDRfUEJfTUFSSywgUEI0TURfMTApLAorCVBJTk1VWF9EQVRBKElSUTRfUEJfTUFSSywgUEI0TURfMTEpLAorCisJUElOTVVYX0RBVEEoUEIzX0RBVEEsIFBCM01EXzAwLCBQQjNfSU4pLAorCVBJTk1VWF9EQVRBKFNEQTFfTUFSSywgUEIzTURfMDEpLAorCVBJTk1VWF9EQVRBKFBJTlQzX1BCX01BUkssIFBCM01EXzEwKSwKKwlQSU5NVVhfREFUQShJUlEzX1BCX01BUkssIFBCM01EXzExKSwKKworCVBJTk1VWF9EQVRBKFBCMl9EQVRBLCBQQjJNRF8wMCwgUEIyX0lOKSwKKwlQSU5NVVhfREFUQShTQ0wxX01BUkssIFBCMk1EXzAxKSwKKwlQSU5NVVhfREFUQShQSU5UMl9QQl9NQVJLLCBQQjJNRF8xMCksCisJUElOTVVYX0RBVEEoSVJRMl9QQl9NQVJLLCBQQjJNRF8xMSksCisKKwlQSU5NVVhfREFUQShQQjFfREFUQSwgUEIxTURfMDAsIFBCMV9JTiksCisJUElOTVVYX0RBVEEoU0RBMF9NQVJLLCBQQjFNRF8wMSksCisJUElOTVVYX0RBVEEoUElOVDFfUEJfTUFSSywgUEIxTURfMTApLAorCVBJTk1VWF9EQVRBKElSUTFfUEJfTUFSSywgUEIxTURfMTEpLAorCisJUElOTVVYX0RBVEEoUEIwX0RBVEEsIFBCME1EXzAwLCBQQjBfSU4pLAorCVBJTk1VWF9EQVRBKFNDTDBfTUFSSywgUEIwTURfMDEpLAorCVBJTk1VWF9EQVRBKFBJTlQwX1BCX01BUkssIFBCME1EXzEwKSwKKwlQSU5NVVhfREFUQShJUlEwX1BCX01BUkssIFBCME1EXzExKSwKKworCS8qIFBDICovCisJUElOTVVYX0RBVEEoUEMxNF9EQVRBLCBQQzE0TURfMCwgUEMxNF9JTiwgUEMxNF9PVVQpLAorCVBJTk1VWF9EQVRBKFdBSVRfTUFSSywgUEMxNE1EXzEpLAorCisJUElOTVVYX0RBVEEoUEMxM19EQVRBLCBQQzEzTURfMCwgUEMxM19JTiwgUEMxM19PVVQpLAorCVBJTk1VWF9EQVRBKFJEV1JfTUFSSywgUEMxM01EXzEpLAorCisJUElOTVVYX0RBVEEoUEMxMl9EQVRBLCBQQzEyTURfMCwgUEMxMl9JTiwgUEMxMl9PVVQpLAorCVBJTk1VWF9EQVRBKENLRV9NQVJLLCBQQzEyTURfMSksCisKKwlQSU5NVVhfREFUQShQQzExX0RBVEEsIFBDMTFNRF8wMCwgUEMxMV9JTiwgUEMxMV9PVVQpLAorCVBJTk1VWF9EQVRBKENBU1VfTUFSSywgUEMxMU1EXzAxKSwKKwlQSU5NVVhfREFUQShCUkVRX01BUkssIFBDMTFNRF8xMCksCisKKwlQSU5NVVhfREFUQShQQzEwX0RBVEEsIFBDMTBNRF8wMCwgUEMxMF9JTiwgUEMxMF9PVVQpLAorCVBJTk1VWF9EQVRBKFJBU1VfTUFSSywgUEMxME1EXzAxKSwKKwlQSU5NVVhfREFUQShCQUNLX01BUkssIFBDMTBNRF8xMCksCisKKwlQSU5NVVhfREFUQShQQzlfREFUQSwgUEM5TURfMCwgUEM5X0lOLCBQQzlfT1VUKSwKKwlQSU5NVVhfREFUQShDQVNMX01BUkssIFBDOU1EXzEpLAorCisJUElOTVVYX0RBVEEoUEM4X0RBVEEsIFBDOE1EXzAsIFBDOF9JTiwgUEM4X09VVCksCisJUElOTVVYX0RBVEEoUkFTTF9NQVJLLCBQQzhNRF8xKSwKKworCVBJTk1VWF9EQVRBKFBDN19EQVRBLCBQQzdNRF8wLCBQQzdfSU4sIFBDN19PVVQpLAorCVBJTk1VWF9EQVRBKFdFM19EUU1VVV9BSF9JQ0lPX1dSX01BUkssIFBDN01EXzEpLAorCisJUElOTVVYX0RBVEEoUEM2X0RBVEEsIFBDNk1EXzAsIFBDNl9JTiwgUEM2X09VVCksCisJUElOTVVYX0RBVEEoV0UyX0RRTVVMX0lDSU9SRF9NQVJLLCBQQzZNRF8xKSwKKworCVBJTk1VWF9EQVRBKFBDNV9EQVRBLCBQQzVNRF8wLCBQQzVfSU4sIFBDNV9PVVQpLAorCVBJTk1VWF9EQVRBKFdFMV9EUU1MVV9XRV9NQVJLLCBQQzVNRF8xKSwKKworCVBJTk1VWF9EQVRBKFBDNF9EQVRBLCBQQzRNRF8wLCBQQzRfSU4sIFBDNF9PVVQpLAorCVBJTk1VWF9EQVRBKFdFMF9EUU1MTF9NQVJLLCBQQzRNRF8xKSwKKworCVBJTk1VWF9EQVRBKFBDM19EQVRBLCBQQzNNRF8wLCBQQzNfSU4sIFBDM19PVVQpLAorCVBJTk1VWF9EQVRBKENTM19NQVJLLCBQQzNNRF8xKSwKKworCVBJTk1VWF9EQVRBKFBDMl9EQVRBLCBQQzJNRF8wLCBQQzJfSU4sIFBDMl9PVVQpLAorCVBJTk1VWF9EQVRBKENTMl9NQVJLLCBQQzJNRF8xKSwKKworCVBJTk1VWF9EQVRBKFBDMV9EQVRBLCBQQzFNRF8wLCBQQzFfSU4sIFBDMV9PVVQpLAorCVBJTk1VWF9EQVRBKEExX01BUkssIFBDMU1EXzEpLAorCisJUElOTVVYX0RBVEEoUEMwX0RBVEEsIFBDME1EXzAwLCBQQzBfSU4sIFBDMF9PVVQpLAorCVBJTk1VWF9EQVRBKEEwX01BUkssIFBDME1EXzAxKSwKKwlQSU5NVVhfREFUQShDUzdfTUFSSywgUEMwTURfMTApLAorCisJLyogUEQgKi8KKwlQSU5NVVhfREFUQShQRDE1X0RBVEEsIFBEMTVNRF8wMDAsIFBEMTVfSU4sIFBEMTVfT1VUKSwKKwlQSU5NVVhfREFUQShEMzFfTUFSSywgUEQxNU1EXzAwMSksCisJUElOTVVYX0RBVEEoUElOVDdfUERfTUFSSywgUEQxNU1EXzAxMCksCisJUElOTVVYX0RBVEEoQURUUkdfUERfTUFSSywgUEQxNU1EXzEwMCksCisJUElOTVVYX0RBVEEoVElPQzREX01BUkssIFBEMTVNRF8xMDEpLAorCisJUElOTVVYX0RBVEEoUEQxNF9EQVRBLCBQRDE0TURfMDAwLCBQRDE0X0lOLCBQRDE0X09VVCksCisJUElOTVVYX0RBVEEoRDMwX01BUkssIFBEMTRNRF8wMDEpLAorCVBJTk1VWF9EQVRBKFBJTlQ2X1BEX01BUkssIFBEMTRNRF8wMTApLAorCVBJTk1VWF9EQVRBKFRJT0M0Q19NQVJLLCBQRDE0TURfMTAxKSwKKworCVBJTk1VWF9EQVRBKFBEMTNfREFUQSwgUEQxM01EXzAwMCwgUEQxM19JTiwgUEQxM19PVVQpLAorCVBJTk1VWF9EQVRBKEQyOV9NQVJLLCBQRDEzTURfMDAxKSwKKwlQSU5NVVhfREFUQShQSU5UNV9QRF9NQVJLLCBQRDEzTURfMDEwKSwKKwlQSU5NVVhfREFUQShURU5EMV9QRF9NQVJLLCBQRDEzTURfMTAwKSwKKwlQSU5NVVhfREFUQShUSU9DNEJfTUFSSywgUEQxM01EXzEwMSksCisKKwlQSU5NVVhfREFUQShQRDEyX0RBVEEsIFBEMTJNRF8wMDAsIFBEMTJfSU4sIFBEMTJfT1VUKSwKKwlQSU5NVVhfREFUQShEMjhfTUFSSywgUEQxMk1EXzAwMSksCisJUElOTVVYX0RBVEEoUElOVDRfUERfTUFSSywgUEQxMk1EXzAxMCksCisJUElOTVVYX0RBVEEoREFDSzFfUERfTUFSSywgUEQxMk1EXzEwMCksCisJUElOTVVYX0RBVEEoVElPQzRBX01BUkssIFBEMTJNRF8xMDEpLAorCisJUElOTVVYX0RBVEEoUEQxMV9EQVRBLCBQRDExTURfMDAwLCBQRDExX0lOLCBQRDExX09VVCksCisJUElOTVVYX0RBVEEoRDI3X01BUkssIFBEMTFNRF8wMDEpLAorCVBJTk1VWF9EQVRBKFBJTlQzX1BEX01BUkssIFBEMTFNRF8wMTApLAorCVBJTk1VWF9EQVRBKERSRVExX1BEX01BUkssIFBEMTFNRF8xMDApLAorCVBJTk1VWF9EQVRBKFRJT0MzRF9NQVJLLCBQRDExTURfMTAxKSwKKworCVBJTk1VWF9EQVRBKFBEMTBfREFUQSwgUEQxME1EXzAwMCwgUEQxMF9JTiwgUEQxMF9PVVQpLAorCVBJTk1VWF9EQVRBKEQyNl9NQVJLLCBQRDEwTURfMDAxKSwKKwlQSU5NVVhfREFUQShQSU5UMl9QRF9NQVJLLCBQRDEwTURfMDEwKSwKKwlQSU5NVVhfREFUQShURU5EMF9QRF9NQVJLLCBQRDEwTURfMTAwKSwKKwlQSU5NVVhfREFUQShUSU9DM0NfTUFSSywgUEQxME1EXzEwMSksCisKKwlQSU5NVVhfREFUQShQRDlfREFUQSwgUEQ5TURfMDAwLCBQRDlfSU4sIFBEOV9PVVQpLAorCVBJTk1VWF9EQVRBKEQyNV9NQVJLLCBQRDlNRF8wMDEpLAorCVBJTk1VWF9EQVRBKFBJTlQxX1BEX01BUkssIFBEOU1EXzAxMCksCisJUElOTVVYX0RBVEEoREFDSzBfUERfTUFSSywgUEQ5TURfMTAwKSwKKwlQSU5NVVhfREFUQShUSU9DM0JfTUFSSywgUEQ5TURfMTAxKSwKKworCVBJTk1VWF9EQVRBKFBEOF9EQVRBLCBQRDhNRF8wMDAsIFBEOF9JTiwgUEQ4X09VVCksCisJUElOTVVYX0RBVEEoRDI0X01BUkssIFBEOE1EXzAwMSksCisJUElOTVVYX0RBVEEoUElOVDBfUERfTUFSSywgUEQ4TURfMDEwKSwKKwlQSU5NVVhfREFUQShEUkVRMF9QRF9NQVJLLCBQRDhNRF8xMDApLAorCVBJTk1VWF9EQVRBKFRJT0MzQV9NQVJLLCBQRDhNRF8xMDEpLAorCisJUElOTVVYX0RBVEEoUEQ3X0RBVEEsIFBEN01EXzAwMCwgUEQ3X0lOLCBQRDdfT1VUKSwKKwlQSU5NVVhfREFUQShEMjNfTUFSSywgUEQ3TURfMDAxKSwKKwlQSU5NVVhfREFUQShJUlE3X1BEX01BUkssIFBEN01EXzAxMCksCisJUElOTVVYX0RBVEEoU0NTMV9QRF9NQVJLLCBQRDdNRF8wMTEpLAorCVBJTk1VWF9EQVRBKFRDTEtEX1BEX01BUkssIFBEN01EXzEwMCksCisJUElOTVVYX0RBVEEoVElPQzJCX01BUkssIFBEN01EXzEwMSksCisKKwlQSU5NVVhfREFUQShQRDZfREFUQSwgUEQ2TURfMDAwLCBQRDZfSU4sIFBENl9PVVQpLAorCVBJTk1VWF9EQVRBKEQyMl9NQVJLLCBQRDZNRF8wMDEpLAorCVBJTk1VWF9EQVRBKElSUTZfUERfTUFSSywgUEQ2TURfMDEwKSwKKwlQSU5NVVhfREFUQShTU08xX1BEX01BUkssIFBENk1EXzAxMSksCisJUElOTVVYX0RBVEEoVENMS0NfUERfTUFSSywgUEQ2TURfMTAwKSwKKwlQSU5NVVhfREFUQShUSU9DMkFfTUFSSywgUEQ2TURfMTAxKSwKKworCVBJTk1VWF9EQVRBKFBENV9EQVRBLCBQRDVNRF8wMDAsIFBENV9JTiwgUEQ1X09VVCksCisJUElOTVVYX0RBVEEoRDIxX01BUkssIFBENU1EXzAwMSksCisJUElOTVVYX0RBVEEoSVJRNV9QRF9NQVJLLCBQRDVNRF8wMTApLAorCVBJTk1VWF9EQVRBKFNTSTFfUERfTUFSSywgUEQ1TURfMDExKSwKKwlQSU5NVVhfREFUQShUQ0xLQl9QRF9NQVJLLCBQRDVNRF8xMDApLAorCVBJTk1VWF9EQVRBKFRJT0MxQl9NQVJLLCBQRDVNRF8xMDEpLAorCisJUElOTVVYX0RBVEEoUEQ0X0RBVEEsIFBENE1EXzAwMCwgUEQ0X0lOLCBQRDRfT1VUKSwKKwlQSU5NVVhfREFUQShEMjBfTUFSSywgUEQ0TURfMDAxKSwKKwlQSU5NVVhfREFUQShJUlE0X1BEX01BUkssIFBENE1EXzAxMCksCisJUElOTVVYX0RBVEEoU1NDSzFfUERfTUFSSywgUEQ0TURfMDExKSwKKwlQSU5NVVhfREFUQShUQ0xLQV9QRF9NQVJLLCBQRDRNRF8xMDApLAorCVBJTk1VWF9EQVRBKFRJT0MxQV9NQVJLLCBQRDRNRF8xMDEpLAorCisJUElOTVVYX0RBVEEoUEQzX0RBVEEsIFBEM01EXzAwMCwgUEQzX0lOLCBQRDNfT1VUKSwKKwlQSU5NVVhfREFUQShEMTlfTUFSSywgUEQzTURfMDAxKSwKKwlQSU5NVVhfREFUQShJUlEzX1BEX01BUkssIFBEM01EXzAxMCksCisJUElOTVVYX0RBVEEoU0NTMF9QRF9NQVJLLCBQRDNNRF8wMTEpLAorCVBJTk1VWF9EQVRBKERBQ0szX01BUkssIFBEM01EXzEwMCksCisJUElOTVVYX0RBVEEoVElPQzBEX01BUkssIFBEM01EXzEwMSksCisKKwlQSU5NVVhfREFUQShQRDJfREFUQSwgUEQyTURfMDAwLCBQRDJfSU4sIFBEMl9PVVQpLAorCVBJTk1VWF9EQVRBKEQxOF9NQVJLLCBQRDJNRF8wMDEpLAorCVBJTk1VWF9EQVRBKElSUTJfUERfTUFSSywgUEQyTURfMDEwKSwKKwlQSU5NVVhfREFUQShTU08wX1BEX01BUkssIFBEMk1EXzAxMSksCisJUElOTVVYX0RBVEEoRFJFUTNfTUFSSywgUEQyTURfMTAwKSwKKwlQSU5NVVhfREFUQShUSU9DMENfTUFSSywgUEQyTURfMTAxKSwKKworCVBJTk1VWF9EQVRBKFBEMV9EQVRBLCBQRDFNRF8wMDAsIFBEMV9JTiwgUEQxX09VVCksCisJUElOTVVYX0RBVEEoRDE3X01BUkssIFBEMU1EXzAwMSksCisJUElOTVVYX0RBVEEoSVJRMV9QRF9NQVJLLCBQRDFNRF8wMTApLAorCVBJTk1VWF9EQVRBKFNTSTBfUERfTUFSSywgUEQxTURfMDExKSwKKwlQSU5NVVhfREFUQShEQUNLMl9NQVJLLCBQRDFNRF8xMDApLAorCVBJTk1VWF9EQVRBKFRJT0MwQl9NQVJLLCBQRDFNRF8xMDEpLAorCisJUElOTVVYX0RBVEEoUEQwX0RBVEEsIFBEME1EXzAwMCwgUEQwX0lOLCBQRDBfT1VUKSwKKwlQSU5NVVhfREFUQShEMTZfTUFSSywgUEQwTURfMDAxKSwKKwlQSU5NVVhfREFUQShJUlEwX1BEX01BUkssIFBEME1EXzAxMCksCisJUElOTVVYX0RBVEEoU1NDSzBfUERfTUFSSywgUEQwTURfMDExKSwKKwlQSU5NVVhfREFUQShEUkVRMl9NQVJLLCBQRDBNRF8xMDApLAorCVBJTk1VWF9EQVRBKFRJT0MwQV9NQVJLLCBQRDBNRF8xMDEpLAorCisJLyogUEUgKi8KKwlQSU5NVVhfREFUQShQRTE1X0RBVEEsIFBFMTVNRF8wMCwgUEUxNV9JTiwgUEUxNV9PVVQpLAorCVBJTk1VWF9EQVRBKElPSVMxNl9NQVJLLCBQRTE1TURfMDEpLAorCVBJTk1VWF9EQVRBKFJUUzNfTUFSSywgUEUxNU1EXzExKSwKKworCVBJTk1VWF9EQVRBKFBFMTRfREFUQSwgUEUxNE1EXzAwLCBQRTE0X0lOLCBQRTE0X09VVCksCisJUElOTVVYX0RBVEEoQ1MxX01BUkssIFBFMTRNRF8wMSksCisJUElOTVVYX0RBVEEoQ1RTM19NQVJLLCBQRTE0TURfMTEpLAorCisJUElOTVVYX0RBVEEoUEUxM19EQVRBLCBQRTEzTURfMDAsIFBFMTNfSU4sIFBFMTNfT1VUKSwKKwlQSU5NVVhfREFUQShUWEQzX01BUkssIFBFMTNNRF8xMSksCisKKwlQSU5NVVhfREFUQShQRTEyX0RBVEEsIFBFMTJNRF8wMCwgUEUxMl9JTiwgUEUxMl9PVVQpLAorCVBJTk1VWF9EQVRBKFJYRDNfTUFSSywgUEUxMk1EXzExKSwKKworCVBJTk1VWF9EQVRBKFBFMTFfREFUQSwgUEUxMU1EXzAwMCwgUEUxMV9JTiwgUEUxMV9PVVQpLAorCVBJTk1VWF9EQVRBKENTNl9DRTFCX01BUkssIFBFMTFNRF8wMDEpLAorCVBJTk1VWF9EQVRBKElSUTdfUEVfTUFSSywgUEUxMU1EXzAxMCksCisJUElOTVVYX0RBVEEoVEVORDFfUEVfTUFSSywgUEUxMU1EXzEwMCksCisKKwlQSU5NVVhfREFUQShQRTEwX0RBVEEsIFBFMTBNRF8wMDAsIFBFMTBfSU4sIFBFMTBfT1VUKSwKKwlQSU5NVVhfREFUQShDRTJCX01BUkssIFBFMTBNRF8wMDEpLAorCVBJTk1VWF9EQVRBKElSUTZfUEVfTUFSSywgUEUxME1EXzAxMCksCisJUElOTVVYX0RBVEEoVEVORDBfUEVfTUFSSywgUEUxME1EXzEwMCksCisKKwlQSU5NVVhfREFUQShQRTlfREFUQSwgUEU5TURfMDAsIFBFOV9JTiwgUEU5X09VVCksCisJUElOTVVYX0RBVEEoQ1M1X0NFMUFfTUFSSywgUEU5TURfMDEpLAorCVBJTk1VWF9EQVRBKElSUTVfUEVfTUFSSywgUEU5TURfMTApLAorCVBJTk1VWF9EQVRBKFNDSzNfTUFSSywgUEU5TURfMTEpLAorCisJUElOTVVYX0RBVEEoUEU4X0RBVEEsIFBFOE1EXzAwLCBQRThfSU4sIFBFOF9PVVQpLAorCVBJTk1VWF9EQVRBKENFMkFfTUFSSywgUEU4TURfMDEpLAorCVBJTk1VWF9EQVRBKElSUTRfUEVfTUFSSywgUEU4TURfMTApLAorCVBJTk1VWF9EQVRBKFNDSzJfTUFSSywgUEU4TURfMTEpLAorCisJUElOTVVYX0RBVEEoUEU3X0RBVEEsIFBFN01EXzAwMCwgUEU3X0lOLCBQRTdfT1VUKSwKKwlQSU5NVVhfREFUQShGUkFNRV9NQVJLLCBQRTdNRF8wMDEpLAorCVBJTk1VWF9EQVRBKElSUTNfUEVfTUFSSywgUEU3TURfMDEwKSwKKwlQSU5NVVhfREFUQShUWEQyX01BUkssIFBFN01EXzAxMSksCisJUElOTVVYX0RBVEEoREFDSzFfUEVfTUFSSywgUEU3TURfMTAwKSwKKworCVBJTk1VWF9EQVRBKFBFNl9EQVRBLCBQRTZNRF8wMDAsIFBFNl9JTiwgUEU2X09VVCksCisJUElOTVVYX0RBVEEoQTI1X01BUkssIFBFNk1EXzAwMSksCisJUElOTVVYX0RBVEEoSVJRMl9QRV9NQVJLLCBQRTZNRF8wMTApLAorCVBJTk1VWF9EQVRBKFJYRDJfTUFSSywgUEU2TURfMDExKSwKKwlQSU5NVVhfREFUQShEUkVRMV9QRV9NQVJLLCBQRTZNRF8xMDApLAorCisJUElOTVVYX0RBVEEoUEU1X0RBVEEsIFBFNU1EXzAwMCwgUEU1X0lOLCBQRTVfT1VUKSwKKwlQSU5NVVhfREFUQShBMjRfTUFSSywgUEU1TURfMDAxKSwKKwlQSU5NVVhfREFUQShJUlExX1BFX01BUkssIFBFNU1EXzAxMCksCisJUElOTVVYX0RBVEEoVFhEMV9NQVJLLCBQRTVNRF8wMTEpLAorCVBJTk1VWF9EQVRBKERBQ0swX1BFX01BUkssIFBFNU1EXzEwMCksCisKKwlQSU5NVVhfREFUQShQRTRfREFUQSwgUEU0TURfMDAwLCBQRTRfSU4sIFBFNF9PVVQpLAorCVBJTk1VWF9EQVRBKEEyM19NQVJLLCBQRTRNRF8wMDEpLAorCVBJTk1VWF9EQVRBKElSUTBfUEVfTUFSSywgUEU0TURfMDEwKSwKKwlQSU5NVVhfREFUQShSWEQxX01BUkssIFBFNE1EXzAxMSksCisJUElOTVVYX0RBVEEoRFJFUTBfUEVfTUFSSywgUEU0TURfMTAwKSwKKworCVBJTk1VWF9EQVRBKFBFM19EQVRBLCBQRTNNRF8wMCwgUEUzX0lOLCBQRTNfT1VUKSwKKwlQSU5NVVhfREFUQShBMjJfTUFSSywgUEUzTURfMDEpLAorCVBJTk1VWF9EQVRBKFNDSzFfTUFSSywgUEUzTURfMTEpLAorCisJUElOTVVYX0RBVEEoUEUyX0RBVEEsIFBFMk1EXzAwLCBQRTJfSU4sIFBFMl9PVVQpLAorCVBJTk1VWF9EQVRBKEEyMV9NQVJLLCBQRTJNRF8wMSksCisJUElOTVVYX0RBVEEoU0NLMF9NQVJLLCBQRTJNRF8xMSksCisKKwlQSU5NVVhfREFUQShQRTFfREFUQSwgUEUxTURfMDAsIFBFMV9JTiwgUEUxX09VVCksCisJUElOTVVYX0RBVEEoQ1M0X01BUkssIFBFMU1EXzAxKSwKKwlQSU5NVVhfREFUQShNUkVTX01BUkssIFBFMU1EXzEwKSwKKwlQSU5NVVhfREFUQShUWEQwX01BUkssIFBFMU1EXzExKSwKKworCVBJTk1VWF9EQVRBKFBFMF9EQVRBLCBQRTBNRF8wMDAsIFBFMF9JTiwgUEUwX09VVCksCisJUElOTVVYX0RBVEEoQlNfTUFSSywgUEUwTURfMDAxKSwKKwlQSU5NVVhfREFUQShSWEQwX01BUkssIFBFME1EXzAxMSksCisJUElOTVVYX0RBVEEoQURUUkdfUEVfTUFSSywgUEUwTURfMTAwKSwKKworCS8qIFBGICovCisJUElOTVVYX0RBVEEoUEYzMF9EQVRBLCBQRjMwTURfMCwgUEYzMF9JTiwgUEYzMF9PVVQpLAorCVBJTk1VWF9EQVRBKEFVRElPX0NMS19NQVJLLCBQRjMwTURfMSksCisKKwlQSU5NVVhfREFUQShQRjI5X0RBVEEsIFBGMjlNRF8wLCBQRjI5X0lOLCBQRjI5X09VVCksCisJUElOTVVYX0RBVEEoU1NJREFUQTNfTUFSSywgUEYyOU1EXzEpLAorCisJUElOTVVYX0RBVEEoUEYyOF9EQVRBLCBQRjI4TURfMCwgUEYyOF9JTiwgUEYyOF9PVVQpLAorCVBJTk1VWF9EQVRBKFNTSVdTM19NQVJLLCBQRjI4TURfMSksCisKKwlQSU5NVVhfREFUQShQRjI3X0RBVEEsIFBGMjdNRF8wLCBQRjI3X0lOLCBQRjI3X09VVCksCisJUElOTVVYX0RBVEEoU1NJU0NLM19NQVJLLCBQRjI3TURfMSksCisKKwlQSU5NVVhfREFUQShQRjI2X0RBVEEsIFBGMjZNRF8wLCBQRjI2X0lOLCBQRjI2X09VVCksCisJUElOTVVYX0RBVEEoU1NJREFUQTJfTUFSSywgUEYyNk1EXzEpLAorCisJUElOTVVYX0RBVEEoUEYyNV9EQVRBLCBQRjI1TURfMCwgUEYyNV9JTiwgUEYyNV9PVVQpLAorCVBJTk1VWF9EQVRBKFNTSVdTMl9NQVJLLCBQRjI1TURfMSksCisKKwlQSU5NVVhfREFUQShQRjI0X0RBVEEsIFBGMjRNRF8wLCBQRjI0X0lOLCBQRjI0X09VVCksCisJUElOTVVYX0RBVEEoU1NJU0NLMl9NQVJLLCBQRjI0TURfMSksCisKKwlQSU5NVVhfREFUQShQRjIzX0RBVEEsIFBGMjNNRF8wMCwgUEYyM19JTiwgUEYyM19PVVQpLAorCVBJTk1VWF9EQVRBKFNTSURBVEExX01BUkssIFBGMjNNRF8wMSksCisJUElOTVVYX0RBVEEoTENEX1ZFUFdDX01BUkssIFBGMjNNRF8xMCksCisKKwlQSU5NVVhfREFUQShQRjIyX0RBVEEsIFBGMjJNRF8wMCwgUEYyMl9JTiwgUEYyMl9PVVQpLAorCVBJTk1VWF9EQVRBKFNTSVdTMV9NQVJLLCBQRjIyTURfMDEpLAorCVBJTk1VWF9EQVRBKExDRF9WQ1BXQ19NQVJLLCBQRjIyTURfMTApLAorCisJUElOTVVYX0RBVEEoUEYyMV9EQVRBLCBQRjIxTURfMDAsIFBGMjFfSU4sIFBGMjFfT1VUKSwKKwlQSU5NVVhfREFUQShTU0lTQ0sxX01BUkssIFBGMjFNRF8wMSksCisJUElOTVVYX0RBVEEoTENEX0NMS19NQVJLLCBQRjIxTURfMTApLAorCisJUElOTVVYX0RBVEEoUEYyMF9EQVRBLCBQRjIwTURfMDAsIFBGMjBfSU4sIFBGMjBfT1VUKSwKKwlQSU5NVVhfREFUQShTU0lEQVRBMF9NQVJLLCBQRjIwTURfMDEpLAorCVBJTk1VWF9EQVRBKExDRF9GTE1fTUFSSywgUEYyME1EXzEwKSwKKworCVBJTk1VWF9EQVRBKFBGMTlfREFUQSwgUEYxOU1EXzAwLCBQRjE5X0lOLCBQRjE5X09VVCksCisJUElOTVVYX0RBVEEoU1NJV1MwX01BUkssIFBGMTlNRF8wMSksCisJUElOTVVYX0RBVEEoTENEX01fRElTUF9NQVJLLCBQRjE5TURfMTApLAorCisJUElOTVVYX0RBVEEoUEYxOF9EQVRBLCBQRjE4TURfMDAsIFBGMThfSU4sIFBGMThfT1VUKSwKKwlQSU5NVVhfREFUQShTU0lTQ0swX01BUkssIFBGMThNRF8wMSksCisJUElOTVVYX0RBVEEoTENEX0NMMl9NQVJLLCBQRjE4TURfMTApLAorCisJUElOTVVYX0RBVEEoUEYxN19EQVRBLCBQRjE3TURfMDAsIFBGMTdfSU4sIFBGMTdfT1VUKSwKKwlQSU5NVVhfREFUQShGQ0VfTUFSSywgUEYxN01EXzAxKSwKKwlQSU5NVVhfREFUQShMQ0RfQ0wxX01BUkssIFBGMTdNRF8xMCksCisKKwlQSU5NVVhfREFUQShQRjE2X0RBVEEsIFBGMTZNRF8wMCwgUEYxNl9JTiwgUEYxNl9PVVQpLAorCVBJTk1VWF9EQVRBKEZSQl9NQVJLLCBQRjE2TURfMDEpLAorCVBJTk1VWF9EQVRBKExDRF9ET05fTUFSSywgUEYxNk1EXzEwKSwKKworCVBJTk1VWF9EQVRBKFBGMTVfREFUQSwgUEYxNU1EXzAwLCBQRjE1X0lOLCBQRjE1X09VVCksCisJUElOTVVYX0RBVEEoTkFGN19NQVJLLCBQRjE1TURfMDEpLAorCVBJTk1VWF9EQVRBKExDRF9EQVRBMTVfTUFSSywgUEYxNU1EXzEwKSwKKworCVBJTk1VWF9EQVRBKFBGMTRfREFUQSwgUEYxNE1EXzAwLCBQRjE0X0lOLCBQRjE0X09VVCksCisJUElOTVVYX0RBVEEoTkFGNl9NQVJLLCBQRjE0TURfMDEpLAorCVBJTk1VWF9EQVRBKExDRF9EQVRBMTRfTUFSSywgUEYxNE1EXzEwKSwKKworCVBJTk1VWF9EQVRBKFBGMTNfREFUQSwgUEYxM01EXzAwLCBQRjEzX0lOLCBQRjEzX09VVCksCisJUElOTVVYX0RBVEEoTkFGNV9NQVJLLCBQRjEzTURfMDEpLAorCVBJTk1VWF9EQVRBKExDRF9EQVRBMTNfTUFSSywgUEYxM01EXzEwKSwKKworCVBJTk1VWF9EQVRBKFBGMTJfREFUQSwgUEYxMk1EXzAwLCBQRjEyX0lOLCBQRjEyX09VVCksCisJUElOTVVYX0RBVEEoTkFGNF9NQVJLLCBQRjEyTURfMDEpLAorCVBJTk1VWF9EQVRBKExDRF9EQVRBMTJfTUFSSywgUEYxMk1EXzEwKSwKKworCVBJTk1VWF9EQVRBKFBGMTFfREFUQSwgUEYxMU1EXzAwLCBQRjExX0lOLCBQRjExX09VVCksCisJUElOTVVYX0RBVEEoTkFGM19NQVJLLCBQRjExTURfMDEpLAorCVBJTk1VWF9EQVRBKExDRF9EQVRBMTFfTUFSSywgUEYxMU1EXzEwKSwKKworCVBJTk1VWF9EQVRBKFBGMTBfREFUQSwgUEYxME1EXzAwLCBQRjEwX0lOLCBQRjEwX09VVCksCisJUElOTVVYX0RBVEEoTkFGMl9NQVJLLCBQRjEwTURfMDEpLAorCVBJTk1VWF9EQVRBKExDRF9EQVRBMTBfTUFSSywgUEYxME1EXzEwKSwKKworCVBJTk1VWF9EQVRBKFBGOV9EQVRBLCBQRjlNRF8wMCwgUEY5X0lOLCBQRjlfT1VUKSwKKwlQSU5NVVhfREFUQShOQUYxX01BUkssIFBGOU1EXzAxKSwKKwlQSU5NVVhfREFUQShMQ0RfREFUQTlfTUFSSywgUEY5TURfMTApLAorCisJUElOTVVYX0RBVEEoUEY4X0RBVEEsIFBGOE1EXzAwLCBQRjhfSU4sIFBGOF9PVVQpLAorCVBJTk1VWF9EQVRBKE5BRjBfTUFSSywgUEY4TURfMDEpLAorCVBJTk1VWF9EQVRBKExDRF9EQVRBOF9NQVJLLCBQRjhNRF8xMCksCisKKwlQSU5NVVhfREFUQShQRjdfREFUQSwgUEY3TURfMDAsIFBGN19JTiwgUEY3X09VVCksCisJUElOTVVYX0RBVEEoRlNDX01BUkssIFBGN01EXzAxKSwKKwlQSU5NVVhfREFUQShMQ0RfREFUQTdfTUFSSywgUEY3TURfMTApLAorCVBJTk1VWF9EQVRBKFNDUzFfUEZfTUFSSywgUEY3TURfMTEpLAorCisJUElOTVVYX0RBVEEoUEY2X0RBVEEsIFBGNk1EXzAwLCBQRjZfSU4sIFBGNl9PVVQpLAorCVBJTk1VWF9EQVRBKEZPRV9NQVJLLCBQRjZNRF8wMSksCisJUElOTVVYX0RBVEEoTENEX0RBVEE2X01BUkssIFBGNk1EXzEwKSwKKwlQSU5NVVhfREFUQShTU08xX1BGX01BUkssIFBGNk1EXzExKSwKKworCVBJTk1VWF9EQVRBKFBGNV9EQVRBLCBQRjVNRF8wMCwgUEY1X0lOLCBQRjVfT1VUKSwKKwlQSU5NVVhfREFUQShGQ0RFX01BUkssIFBGNU1EXzAxKSwKKwlQSU5NVVhfREFUQShMQ0RfREFUQTVfTUFSSywgUEY1TURfMTApLAorCVBJTk1VWF9EQVRBKFNTSTFfUEZfTUFSSywgUEY1TURfMTEpLAorCisJUElOTVVYX0RBVEEoUEY0X0RBVEEsIFBGNE1EXzAwLCBQRjRfSU4sIFBGNF9PVVQpLAorCVBJTk1VWF9EQVRBKEZXRV9NQVJLLCBQRjRNRF8wMSksCisJUElOTVVYX0RBVEEoTENEX0RBVEE0X01BUkssIFBGNE1EXzEwKSwKKwlQSU5NVVhfREFUQShTU0NLMV9QRl9NQVJLLCBQRjRNRF8xMSksCisKKwlQSU5NVVhfREFUQShQRjNfREFUQSwgUEYzTURfMDAsIFBGM19JTiwgUEYzX09VVCksCisJUElOTVVYX0RBVEEoVENMS0RfUEZfTUFSSywgUEYzTURfMDEpLAorCVBJTk1VWF9EQVRBKExDRF9EQVRBM19NQVJLLCBQRjNNRF8xMCksCisJUElOTVVYX0RBVEEoU0NTMF9QRl9NQVJLLCBQRjNNRF8xMSksCisKKwlQSU5NVVhfREFUQShQRjJfREFUQSwgUEYyTURfMDAsIFBGMl9JTiwgUEYyX09VVCksCisJUElOTVVYX0RBVEEoVENMS0NfUEZfTUFSSywgUEYyTURfMDEpLAorCVBJTk1VWF9EQVRBKExDRF9EQVRBMl9NQVJLLCBQRjJNRF8xMCksCisJUElOTVVYX0RBVEEoU1NPMF9QRl9NQVJLLCBQRjJNRF8xMSksCisKKwlQSU5NVVhfREFUQShQRjFfREFUQSwgUEYxTURfMDAsIFBGMV9JTiwgUEYxX09VVCksCisJUElOTVVYX0RBVEEoVENMS0JfUEZfTUFSSywgUEYxTURfMDEpLAorCVBJTk1VWF9EQVRBKExDRF9EQVRBMV9NQVJLLCBQRjFNRF8xMCksCisJUElOTVVYX0RBVEEoU1NJMF9QRl9NQVJLLCBQRjFNRF8xMSksCisKKwlQSU5NVVhfREFUQShQRjBfREFUQSwgUEYwTURfMDAsIFBGMF9JTiwgUEYwX09VVCksCisJUElOTVVYX0RBVEEoVENMS0FfUEZfTUFSSywgUEYwTURfMDEpLAorCVBJTk1VWF9EQVRBKExDRF9EQVRBMF9NQVJLLCBQRjBNRF8xMCksCisJUElOTVVYX0RBVEEoU1NDSzBfUEZfTUFSSywgUEYwTURfMTEpLAorfTsKKworc3RhdGljIHN0cnVjdCBwaW5tdXhfZ3BpbyBwaW5tdXhfZ3Bpb3NbXSA9IHsKKworCS8qIFBBICovCisJUElOTVVYX0dQSU8oR1BJT19QQTcsIFBBN19EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BBNiwgUEE2X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEE1LCBQQTVfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QQTQsIFBBNF9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BBMywgUEEzX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEEyLCBQQTJfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QQTEsIFBBMV9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BBMCwgUEEwX0RBVEEpLAorCisJLyogUEIgKi8KKwlQSU5NVVhfR1BJTyhHUElPX1BCMTIsIFBCMTJfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QQjExLCBQQjExX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEIxMCwgUEIxMF9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BCOSwgUEI5X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEI4LCBQQjhfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QQjcsIFBCN19EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BCNiwgUEI2X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEI1LCBQQjVfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QQjQsIFBCNF9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BCMywgUEIzX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEIyLCBQQjJfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QQjEsIFBCMV9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BCMCwgUEIwX0RBVEEpLAorCisJLyogUEMgKi8KKwlQSU5NVVhfR1BJTyhHUElPX1BDMTQsIFBDMTRfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QQzEzLCBQQzEzX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEMxMiwgUEMxMl9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BDMTEsIFBDMTFfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QQzEwLCBQQzEwX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEM5LCBQQzlfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QQzgsIFBDOF9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BDNywgUEM3X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEM2LCBQQzZfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QQzUsIFBDNV9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BDNCwgUEM0X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEMzLCBQQzNfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QQzIsIFBDMl9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BDMSwgUEMxX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEMwLCBQQzBfREFUQSksCisKKwkvKiBQRCAqLworCVBJTk1VWF9HUElPKEdQSU9fUEQxNSwgUEQxNV9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BEMTQsIFBEMTRfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QRDEzLCBQRDEzX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEQxMiwgUEQxMl9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BEMTEsIFBEMTFfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QRDEwLCBQRDEwX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEQ5LCBQRDlfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QRDgsIFBEOF9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BENywgUEQ3X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEQ2LCBQRDZfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QRDUsIFBENV9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BENCwgUEQ0X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEQzLCBQRDNfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QRDIsIFBEMl9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BEMSwgUEQxX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEQwLCBQRDBfREFUQSksCisKKwkvKiBQRSAqLworCVBJTk1VWF9HUElPKEdQSU9fUEUxNSwgUEUxNV9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BFMTQsIFBFMTRfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QRTEzLCBQRTEzX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEUxMiwgUEUxMl9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BFMTEsIFBFMTFfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QRTEwLCBQRTEwX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEU5LCBQRTlfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QRTgsIFBFOF9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BFNywgUEU3X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEU2LCBQRTZfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QRTUsIFBFNV9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BFNCwgUEU0X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEUzLCBQRTNfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QRTIsIFBFMl9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BFMSwgUEUxX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEUwLCBQRTBfREFUQSksCisKKwkvKiBQRiAqLworCVBJTk1VWF9HUElPKEdQSU9fUEYzMCwgUEYzMF9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BGMjksIFBGMjlfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QRjI4LCBQRjI4X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEYyNywgUEYyN19EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BGMjYsIFBGMjZfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QRjI1LCBQRjI1X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEYyNCwgUEYyNF9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BGMjMsIFBGMjNfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QRjIyLCBQRjIyX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEYyMSwgUEYyMV9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BGMjAsIFBGMjBfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QRjE5LCBQRjE5X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEYxOCwgUEYxOF9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BGMTcsIFBGMTdfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QRjE2LCBQRjE2X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEYxNSwgUEYxNV9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BGMTQsIFBGMTRfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QRjEzLCBQRjEzX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEYxMiwgUEYxMl9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BGMTEsIFBGMTFfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QRjEwLCBQRjEwX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEY5LCBQRjlfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QRjgsIFBGOF9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BGNywgUEY3X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEY2LCBQRjZfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QRjUsIFBGNV9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BGNCwgUEY0X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEYzLCBQRjNfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QRjIsIFBGMl9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BGMSwgUEYxX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEYwLCBQRjBfREFUQSksCisKKwkvKiBJTlRDICovCisJUElOTVVYX0dQSU8oR1BJT19GTl9QSU5UN19QQiwgUElOVDdfUEJfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9QSU5UNl9QQiwgUElOVDZfUEJfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9QSU5UNV9QQiwgUElOVDVfUEJfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9QSU5UNF9QQiwgUElOVDRfUEJfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9QSU5UM19QQiwgUElOVDNfUEJfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9QSU5UMl9QQiwgUElOVDJfUEJfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9QSU5UMV9QQiwgUElOVDFfUEJfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9QSU5UMF9QQiwgUElOVDBfUEJfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9QSU5UN19QRCwgUElOVDdfUERfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9QSU5UNl9QRCwgUElOVDZfUERfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9QSU5UNV9QRCwgUElOVDVfUERfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9QSU5UNF9QRCwgUElOVDRfUERfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9QSU5UM19QRCwgUElOVDNfUERfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9QSU5UMl9QRCwgUElOVDJfUERfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9QSU5UMV9QRCwgUElOVDFfUERfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9QSU5UMF9QRCwgUElOVDBfUERfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9JUlE3X1BCLCBJUlE3X1BCX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fSVJRNl9QQiwgSVJRNl9QQl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0lSUTVfUEIsIElSUTVfUEJfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9JUlE0X1BCLCBJUlE0X1BCX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fSVJRM19QQiwgSVJRM19QQl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0lSUTJfUEIsIElSUTJfUEJfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9JUlExX1BCLCBJUlExX1BCX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fSVJRMF9QQiwgSVJRMF9QQl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0lSUTdfUEQsIElSUTdfUERfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9JUlE2X1BELCBJUlE2X1BEX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fSVJRNV9QRCwgSVJRNV9QRF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0lSUTRfUEQsIElSUTRfUERfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9JUlEzX1BELCBJUlEzX1BEX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fSVJRMl9QRCwgSVJRMl9QRF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0lSUTFfUEQsIElSUTFfUERfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9JUlEwX1BELCBJUlEwX1BEX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fSVJRN19QRSwgSVJRN19QRV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0lSUTZfUEUsIElSUTZfUEVfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9JUlE1X1BFLCBJUlE1X1BFX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fSVJRNF9QRSwgSVJRNF9QRV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0lSUTNfUEUsIElSUTNfUEVfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9JUlEyX1BFLCBJUlEyX1BFX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fSVJRMV9QRSwgSVJRMV9QRV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0lSUTBfUEUsIElSUTBfUEVfTUFSSyksCisKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1dEVE9WRiwgV0RUT1ZGX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fSVJRT1VULCBJUlFPVVRfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9SRUZPVVQsIFJFRk9VVF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0lSUU9VVF9SRUZPVVQsIElSUU9VVF9SRUZPVVRfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9VQkNUUkcsIFVCQ1RSR19NQVJLKSwKKworCS8qIENBTiAqLworCVBJTk1VWF9HUElPKEdQSU9fRk5fQ1RYMSwgQ1RYMV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0NSWDEsIENSWDFfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9DVFgwLCBDVFgwX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fQ1RYMF9DVFgxLCBDVFgwX0NUWDFfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9DUlgwLCBDUlgwX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fQ1JYMF9DUlgxLCBDUlgwX0NSWDFfTUFSSyksCisKKwkvKiBJSUMzICovCisJUElOTVVYX0dQSU8oR1BJT19GTl9TREEzLCBTREEzX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0NMMywgU0NMM19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NEQTIsIFNEQTJfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TQ0wyLCBTQ0wyX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0RBMSwgU0RBMV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NDTDEsIFNDTDFfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TREEwLCBTREEwX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0NMMCwgU0NMMF9NQVJLKSwKKworCS8qIERNQUMgKi8KKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1RFTkQwX1BELCBURU5EMF9QRF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1RFTkQwX1BFLCBURU5EMF9QRV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0RBQ0swX1BELCBEQUNLMF9QRF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0RBQ0swX1BFLCBEQUNLMF9QRV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0RSRVEwX1BELCBEUkVRMF9QRF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0RSRVEwX1BFLCBEUkVRMF9QRV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1RFTkQxX1BELCBURU5EMV9QRF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1RFTkQxX1BFLCBURU5EMV9QRV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0RBQ0sxX1BELCBEQUNLMV9QRF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0RBQ0sxX1BFLCBEQUNLMV9QRV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0RSRVExX1BELCBEUkVRMV9QRF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0RSRVExX1BFLCBEUkVRMV9QRV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0RBQ0syLCBEQUNLMl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0RSRVEyLCBEUkVRMl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0RBQ0szLCBEQUNLM19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0RSRVEzLCBEUkVRM19NQVJLKSwKKworCS8qIEFEQyAqLworCVBJTk1VWF9HUElPKEdQSU9fRk5fQURUUkdfUEQsIEFEVFJHX1BEX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fQURUUkdfUEUsIEFEVFJHX1BFX01BUkspLAorCisJLyogQlNDICovCisJUElOTVVYX0dQSU8oR1BJT19GTl9EMzEsIEQzMV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0QzMCwgRDMwX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRDI5LCBEMjlfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9EMjgsIEQyOF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0QyNywgRDI3X01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRDI2LCBEMjZfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9EMjUsIEQyNV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0QyNCwgRDI0X01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRDIzLCBEMjNfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9EMjIsIEQyMl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0QyMSwgRDIxX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRDIwLCBEMjBfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9EMTksIEQxOV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0QxOCwgRDE4X01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRDE3LCBEMTdfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9EMTYsIEQxNl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0EyNSwgQTI1X01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fQTI0LCBBMjRfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9BMjMsIEEyM19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0EyMiwgQTIyX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fQTIxLCBBMjFfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9DUzQsIENTNF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX01SRVMsIE1SRVNfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9CUywgQlNfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9JT0lTMTYsIElPSVMxNl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0NTMSwgQ1MxX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fQ1M2X0NFMUIsIENTNl9DRTFCX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fQ0UyQiwgQ0UyQl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0NTNV9DRTFBLCBDUzVfQ0UxQV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0NFMkEsIENFMkFfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9GUkFNRSwgRlJBTUVfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9XQUlULCBXQUlUX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fUkRXUiwgUkRXUl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0NLRSwgQ0tFX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fQ0FTVSwgQ0FTVV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0JSRVEsIEJSRVFfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9SQVNVLCBSQVNVX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fQkFDSywgQkFDS19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0NBU0wsIENBU0xfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9SQVNMLCBSQVNMX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fV0UzX0RRTVVVX0FIX0lDSU9fV1IsIFdFM19EUU1VVV9BSF9JQ0lPX1dSX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fV0UyX0RRTVVMX0lDSU9SRCwgV0UyX0RRTVVMX0lDSU9SRF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1dFMV9EUU1MVV9XRSwgV0UxX0RRTUxVX1dFX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fV0UwX0RRTUxMLCBXRTBfRFFNTExfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9DUzMsIENTM19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0NTMiwgQ1MyX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fQTEsIEExX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fQTAsIEEwX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fQ1M3LCBDUzdfTUFSSyksCisKKwkvKiBUTVUgKi8KKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1RJT0M0RCwgVElPQzREX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fVElPQzRDLCBUSU9DNENfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9USU9DNEIsIFRJT0M0Ql9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1RJT0M0QSwgVElPQzRBX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fVElPQzNELCBUSU9DM0RfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9USU9DM0MsIFRJT0MzQ19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1RJT0MzQiwgVElPQzNCX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fVElPQzNBLCBUSU9DM0FfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9USU9DMkIsIFRJT0MyQl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1RJT0MxQiwgVElPQzFCX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fVElPQzJBLCBUSU9DMkFfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9USU9DMUEsIFRJT0MxQV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1RJT0MwRCwgVElPQzBEX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fVElPQzBDLCBUSU9DMENfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9USU9DMEIsIFRJT0MwQl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1RJT0MwQSwgVElPQzBBX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fVENMS0RfUEQsIFRDTEtEX1BEX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fVENMS0NfUEQsIFRDTEtDX1BEX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fVENMS0JfUEQsIFRDTEtCX1BEX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fVENMS0FfUEQsIFRDTEtBX1BEX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fVENMS0RfUEYsIFRDTEtEX1BGX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fVENMS0NfUEYsIFRDTEtDX1BGX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fVENMS0JfUEYsIFRDTEtCX1BGX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fVENMS0FfUEYsIFRDTEtBX1BGX01BUkspLAorCisJLyogU1NVICovCisJUElOTVVYX0dQSU8oR1BJT19GTl9TQ1MwX1BELCBTQ1MwX1BEX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU1NPMF9QRCwgU1NPMF9QRF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NTSTBfUEQsIFNTSTBfUERfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TU0NLMF9QRCwgU1NDSzBfUERfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TQ1MwX1BGLCBTQ1MwX1BGX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU1NPMF9QRiwgU1NPMF9QRl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NTSTBfUEYsIFNTSTBfUEZfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TU0NLMF9QRiwgU1NDSzBfUEZfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TQ1MxX1BELCBTQ1MxX1BEX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU1NPMV9QRCwgU1NPMV9QRF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NTSTFfUEQsIFNTSTFfUERfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TU0NLMV9QRCwgU1NDSzFfUERfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TQ1MxX1BGLCBTQ1MxX1BGX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU1NPMV9QRiwgU1NPMV9QRl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NTSTFfUEYsIFNTSTFfUEZfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TU0NLMV9QRiwgU1NDSzFfUEZfTUFSSyksCisKKwkvKiBTQ0lGICovCisJUElOTVVYX0dQSU8oR1BJT19GTl9UWEQwLCBUWEQwX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fUlhEMCwgUlhEMF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NDSzAsIFNDSzBfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9UWEQxLCBUWEQxX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fUlhEMSwgUlhEMV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NDSzEsIFNDSzFfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9UWEQyLCBUWEQyX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fUlhEMiwgUlhEMl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NDSzIsIFNDSzJfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9SVFMzLCBSVFMzX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fQ1RTMywgQ1RTM19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1RYRDMsIFRYRDNfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9SWEQzLCBSWEQzX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0NLMywgU0NLM19NQVJLKSwKKworCS8qIFNTSSAqLworCVBJTk1VWF9HUElPKEdQSU9fRk5fQVVESU9fQ0xLLCBBVURJT19DTEtfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TU0lEQVRBMywgU1NJREFUQTNfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TU0lXUzMsIFNTSVdTM19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NTSVNDSzMsIFNTSVNDSzNfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TU0lEQVRBMiwgU1NJREFUQTJfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TU0lXUzIsIFNTSVdTMl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NTSVNDSzIsIFNTSVNDSzJfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TU0lEQVRBMSwgU1NJREFUQTFfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TU0lXUzEsIFNTSVdTMV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NTSVNDSzEsIFNTSVNDSzFfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TU0lEQVRBMCwgU1NJREFUQTBfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TU0lXUzAsIFNTSVdTMF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NTSVNDSzAsIFNTSVNDSzBfTUFSSyksCisKKwkvKiBGTENUTCAqLworCVBJTk1VWF9HUElPKEdQSU9fRk5fRkNFLCBGQ0VfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9GUkIsIEZSQl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX05BRjcsIE5BRjdfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9OQUY2LCBOQUY2X01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fTkFGNSwgTkFGNV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX05BRjQsIE5BRjRfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9OQUYzLCBOQUYzX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fTkFGMiwgTkFGMl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX05BRjEsIE5BRjFfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9OQUYwLCBOQUYwX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRlNDLCBGU0NfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9GT0UsIEZPRV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0ZDREUsIEZDREVfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9GV0UsIEZXRV9NQVJLKSwKKworCS8qIExDREMgKi8KKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0xDRF9WRVBXQywgTENEX1ZFUFdDX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fTENEX1ZDUFdDLCBMQ0RfVkNQV0NfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9MQ0RfQ0xLLCBMQ0RfQ0xLX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fTENEX0ZMTSwgTENEX0ZMTV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0xDRF9NX0RJU1AsIExDRF9NX0RJU1BfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9MQ0RfQ0wyLCBMQ0RfQ0wyX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fTENEX0NMMSwgTENEX0NMMV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0xDRF9ET04sIExDRF9ET05fTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9MQ0RfREFUQTE1LCBMQ0RfREFUQTE1X01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fTENEX0RBVEExNCwgTENEX0RBVEExNF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0xDRF9EQVRBMTMsIExDRF9EQVRBMTNfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9MQ0RfREFUQTEyLCBMQ0RfREFUQTEyX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fTENEX0RBVEExMSwgTENEX0RBVEExMV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0xDRF9EQVRBMTAsIExDRF9EQVRBMTBfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9MQ0RfREFUQTksIExDRF9EQVRBOV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0xDRF9EQVRBOCwgTENEX0RBVEE4X01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fTENEX0RBVEE3LCBMQ0RfREFUQTdfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9MQ0RfREFUQTYsIExDRF9EQVRBNl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0xDRF9EQVRBNSwgTENEX0RBVEE1X01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fTENEX0RBVEE0LCBMQ0RfREFUQTRfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9MQ0RfREFUQTMsIExDRF9EQVRBM19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0xDRF9EQVRBMiwgTENEX0RBVEEyX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fTENEX0RBVEExLCBMQ0RfREFUQTFfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9MQ0RfREFUQTAsIExDRF9EQVRBMF9NQVJLKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGlubXV4X2NmZ19yZWcgcGlubXV4X2NvbmZpZ19yZWdzW10gPSB7CisJeyBQSU5NVVhfQ0ZHX1JFRygiUEJJT1JMIiwgMHhmZmZlMzg4NiwgMTYsIDEpIHsKKwkJMCwgMCwKKwkJMCwgMCwKKwkJMCwgMCwKKwkJMCwgMCwKKwkJUEIxMV9JTiwgUEIxMV9PVVQsCisJCVBCMTBfSU4sIFBCMTBfT1VULAorCQlQQjlfSU4sIFBCOV9PVVQsCisJCVBCOF9JTiwgUEI4X09VVCwKKwkJMCwgMCwKKwkJMCwgMCwKKwkJMCwgMCwKKwkJMCwgMCwKKwkJMCwgMCwKKwkJMCwgMCwKKwkJMCwgMCwKKwkJMCwgMCB9CisJfSwKKwl7IFBJTk1VWF9DRkdfUkVHKCJQQkNSTDQiLCAweGZmZmUzODkwLCAxNiwgNCkgeworCQkwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAorCisJCTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisKKwkJMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKworCQlQQjEyTURfMDAsIFBCMTJNRF8wMSwgUEIxMk1EXzEwLCBQQjEyTURfMTEsCisJCTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAgfQorCX0sCisJeyBQSU5NVVhfQ0ZHX1JFRygiUEJDUkwzIiwgMHhmZmZlMzg5MiwgMTYsIDQpIHsKKwkJUEIxMU1EXzAsIFBCMTFNRF8xLAorCQkwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAorCisJCVBCMTBNRF8wLCBQQjEwTURfMSwKKwkJMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKworCQlQQjlNRF8wMCwgUEI5TURfMDEsIFBCOU1EXzEwLCAwLAorCQkwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAorCisJCVBCOE1EXzAwLCBQQjhNRF8wMSwgUEI4TURfMTAsIDAsCisJCTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAgfQorCX0sCisJeyBQSU5NVVhfQ0ZHX1JFRygiUEJDUkwyIiwgMHhmZmZlMzg5NCwgMTYsIDQpIHsKKwkJUEI3TURfMDAsIFBCN01EXzAxLCBQQjdNRF8xMCwgUEI3TURfMTEsCisJCTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisKKwkJUEI2TURfMDAsIFBCNk1EXzAxLCBQQjZNRF8xMCwgUEI2TURfMTEsCisJCTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisKKwkJUEI1TURfMDAsIFBCNU1EXzAxLCBQQjVNRF8xMCwgUEI1TURfMTEsCisJCTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisKKwkJUEI0TURfMDAsIFBCNE1EXzAxLCBQQjRNRF8xMCwgUEI0TURfMTEsCisJCTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAgfQorCX0sCisJeyBQSU5NVVhfQ0ZHX1JFRygiUEJDUkwxIiwgMHhmZmZlMzg5NiwgMTYsIDQpIHsKKwkJUEIzTURfMDAsIFBCM01EXzAxLCBQQjNNRF8xMCwgUEIzTURfMTEsCisJCTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisKKwkJUEIyTURfMDAsIFBCMk1EXzAxLCBQQjJNRF8xMCwgUEIyTURfMTEsCisJCTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisKKwkJUEIxTURfMDAsIFBCMU1EXzAxLCBQQjFNRF8xMCwgUEIxTURfMTEsCisJCTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisKKwkJUEIwTURfMDAsIFBCME1EXzAxLCBQQjBNRF8xMCwgUEIwTURfMTEsCisJCTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAgfQorCX0sCisJeyBQSU5NVVhfQ0ZHX1JFRygiSUZDUiIsIDB4ZmZmZTM4YTIsIDE2LCA0KSB7CisJCTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisKKwkJMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKworCQkwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAorCisJCVBCMTJJUlFfMDAsIFBCMTJJUlFfMDEsIFBCMTJJUlFfMTAsIDAsCisJCTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAgfQorCX0sCisJeyBQSU5NVVhfQ0ZHX1JFRygiUENJT1JMIiwgMHhmZmZlMzkwNiwgMTYsIDEpIHsKKwkJMCwgMCwKKwkJUEMxNF9JTiwgUEMxNF9PVVQsCisJCVBDMTNfSU4sIFBDMTNfT1VULAorCQlQQzEyX0lOLCBQQzEyX09VVCwKKwkJUEMxMV9JTiwgUEMxMV9PVVQsCisJCVBDMTBfSU4sIFBDMTBfT1VULAorCQlQQzlfSU4sIFBDOV9PVVQsCisJCVBDOF9JTiwgUEM4X09VVCwKKwkJUEM3X0lOLCBQQzdfT1VULAorCQlQQzZfSU4sIFBDNl9PVVQsCisJCVBDNV9JTiwgUEM1X09VVCwKKwkJUEM0X0lOLCBQQzRfT1VULAorCQlQQzNfSU4sIFBDM19PVVQsCisJCVBDMl9JTiwgUEMyX09VVCwKKwkJUEMxX0lOLCBQQzFfT1VULAorCQlQQzBfSU4sIFBDMF9PVVQgfQorCX0sCisJeyBQSU5NVVhfQ0ZHX1JFRygiUENDUkw0IiwgMHhmZmZlMzkxMCwgMTYsIDQpIHsKKwkJMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKworCQlQQzE0TURfMCwgUEMxNE1EXzEsCisJCTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisKKwkJUEMxM01EXzAsIFBDMTNNRF8xLAorCQkwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAorCisJCVBDMTJNRF8wLCBQQzEyTURfMSwKKwkJMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCB9CisJfSwKKwl7IFBJTk1VWF9DRkdfUkVHKCJQQ0NSTDMiLCAweGZmZmUzOTEyLCAxNiwgNCkgeworCQlQQzExTURfMDAsIFBDMTFNRF8wMSwgUEMxMU1EXzEwLCAwLAorCQkwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAorCisJCVBDMTBNRF8wMCwgUEMxME1EXzAxLCBQQzEwTURfMTAsIDAsCisJCTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisKKwkJUEM5TURfMCwgUEM5TURfMSwKKwkJMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKworCQlQQzhNRF8wLCBQQzhNRF8xLAorCQkwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwIH0KKwl9LAorCXsgUElOTVVYX0NGR19SRUcoIlBDQ1JMMiIsIDB4ZmZmZTM5MTQsIDE2LCA0KSB7CisJCVBDN01EXzAsIFBDN01EXzEsCisJCTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisKKwkJUEM2TURfMCwgUEM2TURfMSwKKwkJMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKworCQlQQzVNRF8wLCBQQzVNRF8xLAorCQkwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAorCisJCVBDNE1EXzAsIFBDNE1EXzEsCisJCTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAgfQorCX0sCisJeyBQSU5NVVhfQ0ZHX1JFRygiUENDUkwxIiwgMHhmZmZlMzkxNiwgMTYsIDQpIHsKKwkJUEMzTURfMCwgUEMzTURfMSwKKwkJMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKworCQlQQzJNRF8wLCBQQzJNRF8xLAorCQkwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAorCisJCVBDMU1EXzAsIFBDMU1EXzEsCisJCTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisKKwkJUEMwTURfMDAsIFBDME1EXzAxLCBQQzBNRF8xMCwgMCwKKwkJMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCB9CisJfSwKKwl7IFBJTk1VWF9DRkdfUkVHKCJQRElPUkwiLCAweGZmZmUzOTg2LCAxNiwgMSkgeworCQlQRDE1X0lOLCBQRDE1X09VVCwKKwkJUEQxNF9JTiwgUEQxNF9PVVQsCisJCVBEMTNfSU4sIFBEMTNfT1VULAorCQlQRDEyX0lOLCBQRDEyX09VVCwKKwkJUEQxMV9JTiwgUEQxMV9PVVQsCisJCVBEMTBfSU4sIFBEMTBfT1VULAorCQlQRDlfSU4sIFBEOV9PVVQsCisJCVBEOF9JTiwgUEQ4X09VVCwKKwkJUEQ3X0lOLCBQRDdfT1VULAorCQlQRDZfSU4sIFBENl9PVVQsCisJCVBENV9JTiwgUEQ1X09VVCwKKwkJUEQ0X0lOLCBQRDRfT1VULAorCQlQRDNfSU4sIFBEM19PVVQsCisJCVBEMl9JTiwgUEQyX09VVCwKKwkJUEQxX0lOLCBQRDFfT1VULAorCQlQRDBfSU4sIFBEMF9PVVQgfQorCX0sCisJeyBQSU5NVVhfQ0ZHX1JFRygiUERDUkw0IiwgMHhmZmZlMzk5MCwgMTYsIDQpIHsKKwkJUEQxNU1EXzAwMCwgUEQxNU1EXzAwMSwgUEQxNU1EXzAxMCwgMCwKKwkJUEQxNU1EXzEwMCwgUEQxNU1EXzEwMSwgMCwgMCwKKwkJMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKworCQlQRDE0TURfMDAwLCBQRDE0TURfMDAxLCBQRDE0TURfMDEwLCAwLAorCQkwLCBQRDE0TURfMTAxLCAwLCAwLAorCQkwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAorCisJCVBEMTNNRF8wMDAsIFBEMTNNRF8wMDEsIFBEMTNNRF8wMTAsIDAsCisJCVBEMTNNRF8xMDAsIFBEMTNNRF8xMDEsIDAsIDAsCisJCTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisKKwkJUEQxMk1EXzAwMCwgUEQxMk1EXzAwMSwgUEQxMk1EXzAxMCwgMCwKKwkJUEQxMk1EXzEwMCwgUEQxMk1EXzEwMSwgMCwgMCwKKwkJMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCB9CisJfSwKKwl7IFBJTk1VWF9DRkdfUkVHKCJQRENSTDMiLCAweGZmZmUzOTkyLCAxNiwgNCkgeworCQlQRDExTURfMDAwLCBQRDExTURfMDAxLCBQRDExTURfMDEwLCAwLAorCQlQRDExTURfMTAwLCBQRDExTURfMTAxLCAwLCAwLAorCQkwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAorCisJCVBEMTBNRF8wMDAsIFBEMTBNRF8wMDEsIFBEMTBNRF8wMTAsIDAsCisJCVBEMTBNRF8xMDAsIFBEMTBNRF8xMDEsIDAsIDAsCisJCTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisKKwkJUEQ5TURfMDAwLCBQRDlNRF8wMDEsIFBEOU1EXzAxMCwgMCwKKwkJUEQ5TURfMTAwLCBQRDlNRF8xMDEsIDAsIDAsCisJCTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisKKwkJUEQ4TURfMDAwLCBQRDhNRF8wMDEsIFBEOE1EXzAxMCwgMCwKKwkJUEQ4TURfMTAwLCBQRDhNRF8xMDEsIDAsIDAsCisJCTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAgfQorCX0sCisJeyBQSU5NVVhfQ0ZHX1JFRygiUERDUkwyIiwgMHhmZmZlMzk5NCwgMTYsIDQpIHsKKwkJUEQ3TURfMDAwLCBQRDdNRF8wMDEsIFBEN01EXzAxMCwgUEQ3TURfMDExLAorCQlQRDdNRF8xMDAsIFBEN01EXzEwMSwgMCwgMCwKKwkJMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKworCQlQRDZNRF8wMDAsIFBENk1EXzAwMSwgUEQ2TURfMDEwLCBQRDZNRF8wMTEsCisJCVBENk1EXzEwMCwgUEQ2TURfMTAxLCAwLCAwLAorCQkwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAorCisJCVBENU1EXzAwMCwgUEQ1TURfMDAxLCBQRDVNRF8wMTAsIFBENU1EXzAxMSwKKwkJUEQ1TURfMTAwLCBQRDVNRF8xMDEsIDAsIDAsCisJCTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisKKwkJUEQ0TURfMDAwLCBQRDRNRF8wMDEsIFBENE1EXzAxMCwgUEQ0TURfMDExLAorCQlQRDRNRF8xMDAsIFBENE1EXzEwMSwgMCwgMCwKKwkJMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCB9CisJfSwKKwl7IFBJTk1VWF9DRkdfUkVHKCJQRENSTDEiLCAweGZmZmUzOTk2LCAxNiwgNCkgeworCQlQRDNNRF8wMDAsIFBEM01EXzAwMSwgUEQzTURfMDEwLCBQRDNNRF8wMTEsCisJCVBEM01EXzEwMCwgUEQzTURfMTAxLCAwLCAwLAorCQkwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAorCisJCVBEMk1EXzAwMCwgUEQyTURfMDAxLCBQRDJNRF8wMTAsIFBEMk1EXzAxMSwKKwkJUEQyTURfMTAwLCBQRDJNRF8xMDEsIDAsIDAsCisJCTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisKKwkJUEQxTURfMDAwLCBQRDFNRF8wMDEsIFBEMU1EXzAxMCwgUEQxTURfMDExLAorCQlQRDFNRF8xMDAsIFBEMU1EXzEwMSwgMCwgMCwKKwkJMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKworCQlQRDBNRF8wMDAsIFBEME1EXzAwMSwgUEQwTURfMDEwLCBQRDBNRF8wMTEsCisJCVBEME1EXzEwMCwgUEQwTURfMTAxLCAwLCAwLAorCQkwLCAwLCAwLCAwLCAwLCAwLCAwLCAwIH0KKwl9LAorCXsgUElOTVVYX0NGR19SRUcoIlBFSU9STCIsIDB4ZmZmZTNhMDYsIDE2LCAxKSB7CisJCVBFMTVfSU4sIFBFMTVfT1VULAorCQlQRTE0X0lOLCBQRTE0X09VVCwKKwkJUEUxM19JTiwgUEUxM19PVVQsCisJCVBFMTJfSU4sIFBFMTJfT1VULAorCQlQRTExX0lOLCBQRTExX09VVCwKKwkJUEUxMF9JTiwgUEUxMF9PVVQsCisJCVBFOV9JTiwgUEU5X09VVCwKKwkJUEU4X0lOLCBQRThfT1VULAorCQlQRTdfSU4sIFBFN19PVVQsCisJCVBFNl9JTiwgUEU2X09VVCwKKwkJUEU1X0lOLCBQRTVfT1VULAorCQlQRTRfSU4sIFBFNF9PVVQsCisJCVBFM19JTiwgUEUzX09VVCwKKwkJUEUyX0lOLCBQRTJfT1VULAorCQlQRTFfSU4sIFBFMV9PVVQsCisJCVBFMF9JTiwgUEUwX09VVCB9CisJfSwKKwl7IFBJTk1VWF9DRkdfUkVHKCJQRUNSTDQiLCAweGZmZmUzYTEwLCAxNiwgNCkgeworCQlQRTE1TURfMDAsIFBFMTVNRF8wMSwgMCwgUEUxNU1EXzExLAorCQkwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAorCisJCVBFMTRNRF8wMCwgUEUxNE1EXzAxLCAwLCBQRTE0TURfMTEsCisJCTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisKKwkJUEUxM01EXzAwLCAwLCAwLCBQRTEzTURfMTEsCisJCTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisKKwkJUEUxMk1EXzAwLCAwLCAwLCBQRTEyTURfMTEsCisJCTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAgfQorCX0sCisJeyBQSU5NVVhfQ0ZHX1JFRygiUEVDUkwzIiwgMHhmZmZlM2ExMiwgMTYsIDQpIHsKKwkJUEUxMU1EXzAwMCwgUEUxMU1EXzAwMSwgUEUxMU1EXzAxMCwgMCwKKwkJUEUxMU1EXzEwMCwgMCwgMCwgMCwKKwkJMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKworCQlQRTEwTURfMDAwLCBQRTEwTURfMDAxLCBQRTEwTURfMDEwLCAwLAorCQlQRTEwTURfMTAwLCAwLCAwLCAwLAorCQkwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAorCisJCVBFOU1EXzAwLCBQRTlNRF8wMSwgUEU5TURfMTAsIFBFOU1EXzExLAorCQkwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAorCisJCVBFOE1EXzAwLCBQRThNRF8wMSwgUEU4TURfMTAsIFBFOE1EXzExLAorCQkwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwIH0KKwl9LAorCXsgUElOTVVYX0NGR19SRUcoIlBFQ1JMMiIsIDB4ZmZmZTNhMTQsIDE2LCA0KSB7CisJCVBFN01EXzAwMCwgUEU3TURfMDAxLCBQRTdNRF8wMTAsIFBFN01EXzAxMSwKKwkJUEU3TURfMTAwLCAwLCAwLCAwLAorCQkwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAorCisJCVBFNk1EXzAwMCwgUEU2TURfMDAxLCBQRTZNRF8wMTAsIFBFNk1EXzAxMSwKKwkJUEU2TURfMTAwLCAwLCAwLCAwLAorCQkwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAorCisJCVBFNU1EXzAwMCwgUEU1TURfMDAxLCBQRTVNRF8wMTAsIFBFNU1EXzAxMSwKKwkJUEU1TURfMTAwLCAwLCAwLCAwLAorCQkwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAorCisJCVBFNE1EXzAwMCwgUEU0TURfMDAxLCBQRTRNRF8wMTAsIFBFNE1EXzAxMSwKKwkJUEU0TURfMTAwLCAwLCAwLCAwLAorCQkwLCAwLCAwLCAwLCAwLCAwLCAwLCAwIH0KKwl9LAorCXsgUElOTVVYX0NGR19SRUcoIlBFQ1JMMSIsIDB4ZmZmZTNhMTYsIDE2LCA0KSB7CisJCVBFM01EXzAwLCBQRTNNRF8wMSwgMCwgUEUzTURfMTEsCisJCTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisKKwkJUEUyTURfMDAsIFBFMk1EXzAxLCAwLCBQRTJNRF8xMSwKKwkJMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKworCQlQRTFNRF8wMCwgUEUxTURfMDEsIFBFMU1EXzEwLCBQRTFNRF8xMSwKKwkJMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKworCQlQRTBNRF8wMDAsIFBFME1EXzAwMSwgMCwgUEUwTURfMDExLAorCQlQRTBNRF8xMDAsIDAsIDAsIDAsCisJCTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAgfQorCX0sCisJeyBQSU5NVVhfQ0ZHX1JFRygiUEZJT1JIIiwgMHhmZmZlM2E4NCwgMTYsIDEpIHsKKwkJMCwgMCwKKwkJUEYzMF9JTiwgUEYzMF9PVVQsCisJCVBGMjlfSU4sIFBGMjlfT1VULAorCQlQRjI4X0lOLCBQRjI4X09VVCwKKwkJUEYyN19JTiwgUEYyN19PVVQsCisJCVBGMjZfSU4sIFBGMjZfT1VULAorCQlQRjI1X0lOLCBQRjI1X09VVCwKKwkJUEYyNF9JTiwgUEYyNF9PVVQsCisJCVBGMjNfSU4sIFBGMjNfT1VULAorCQlQRjIyX0lOLCBQRjIyX09VVCwKKwkJUEYyMV9JTiwgUEYyMV9PVVQsCisJCVBGMjBfSU4sIFBGMjBfT1VULAorCQlQRjE5X0lOLCBQRjE5X09VVCwKKwkJUEYxOF9JTiwgUEYxOF9PVVQsCisJCVBGMTdfSU4sIFBGMTdfT1VULAorCQlQRjE2X0lOLCBQRjE2X09VVCB9CisJfSwKKwl7IFBJTk1VWF9DRkdfUkVHKCJQRklPUkwiLCAweGZmZmUzYTg2LCAxNiwgMSkgeworCQlQRjE1X0lOLCBQRjE1X09VVCwKKwkJUEYxNF9JTiwgUEYxNF9PVVQsCisJCVBGMTNfSU4sIFBGMTNfT1VULAorCQlQRjEyX0lOLCBQRjEyX09VVCwKKwkJUEYxMV9JTiwgUEYxMV9PVVQsCisJCVBGMTBfSU4sIFBGMTBfT1VULAorCQlQRjlfSU4sIFBGOV9PVVQsCisJCVBGOF9JTiwgUEY4X09VVCwKKwkJUEY3X0lOLCBQRjdfT1VULAorCQlQRjZfSU4sIFBGNl9PVVQsCisJCVBGNV9JTiwgUEY1X09VVCwKKwkJUEY0X0lOLCBQRjRfT1VULAorCQlQRjNfSU4sIFBGM19PVVQsCisJCVBGMl9JTiwgUEYyX09VVCwKKwkJUEYxX0lOLCBQRjFfT1VULAorCQlQRjBfSU4sIFBGMF9PVVQgfQorCX0sCisJeyBQSU5NVVhfQ0ZHX1JFRygiUEZDUkg0IiwgMHhmZmZlM2E4OCwgMTYsIDQpIHsKKwkJMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKworCQlQRjMwTURfMCwgUEYzME1EXzEsCisJCTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisKKwkJUEYyOU1EXzAsIFBGMjlNRF8xLAorCQkwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAorCisJCVBGMjhNRF8wLCBQRjI4TURfMSwKKwkJMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCB9CisJfSwKKwl7IFBJTk1VWF9DRkdfUkVHKCJQRkNSSDMiLCAweGZmZmUzYThhLCAxNiwgNCkgeworCQlQRjI3TURfMCwgUEYyN01EXzEsCisJCTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisKKwkJUEYyNk1EXzAsIFBGMjZNRF8xLAorCQkwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAorCisJCVBGMjVNRF8wLCBQRjI1TURfMSwKKwkJMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKworCQlQRjI0TURfMCwgUEYyNE1EXzEsCisJCTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAgfQorCX0sCisJeyBQSU5NVVhfQ0ZHX1JFRygiUEZDUkgyIiwgMHhmZmZlM2E4YywgMTYsIDQpIHsKKwkJUEYyM01EXzAwLCBQRjIzTURfMDEsIFBGMjNNRF8xMCwgMCwKKwkJMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKworCQlQRjIyTURfMDAsIFBGMjJNRF8wMSwgUEYyMk1EXzEwLCAwLAorCQkwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAorCisJCVBGMjFNRF8wMCwgUEYyMU1EXzAxLCBQRjIxTURfMTAsIDAsCisJCTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisKKwkJUEYyME1EXzAwLCBQRjIwTURfMDEsIFBGMjBNRF8xMCwgMCwKKwkJMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCB9CisJfSwKKwl7IFBJTk1VWF9DRkdfUkVHKCJQRkNSSDEiLCAweGZmZmUzYThlLCAxNiwgNCkgeworCQlQRjE5TURfMDAsIFBGMTlNRF8wMSwgUEYxOU1EXzEwLCAwLAorCQkwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAorCisJCVBGMThNRF8wMCwgUEYxOE1EXzAxLCBQRjE4TURfMTAsIDAsCisJCTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisKKwkJUEYxN01EXzAwLCBQRjE3TURfMDEsIFBGMTdNRF8xMCwgMCwKKwkJMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKworCQlQRjE2TURfMDAsIFBGMTZNRF8wMSwgUEYxNk1EXzEwLCAwLAorCQkwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwIH0KKwl9LAorCXsgUElOTVVYX0NGR19SRUcoIlBGQ1JMNCIsIDB4ZmZmZTNhOTAsIDE2LCA0KSB7CisJCVBGMTVNRF8wMCwgUEYxNU1EXzAxLCBQRjE1TURfMTAsIDAsCisJCTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisKKwkJUEYxNE1EXzAwLCBQRjE0TURfMDEsIFBGMTRNRF8xMCwgMCwKKwkJMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKworCQlQRjEzTURfMDAsIFBGMTNNRF8wMSwgUEYxM01EXzEwLCAwLAorCQkwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAorCisJCVBGMTJNRF8wMCwgUEYxMk1EXzAxLCBQRjEyTURfMTAsIDAsCisJCTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAgfQorCX0sCisJeyBQSU5NVVhfQ0ZHX1JFRygiUEZDUkwzIiwgMHhmZmZlM2E5MiwgMTYsIDQpIHsKKwkJUEYxMU1EXzAwLCBQRjExTURfMDEsIFBGMTFNRF8xMCwgMCwKKwkJMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKworCQlQRjEwTURfMDAsIFBGMTBNRF8wMSwgUEYxME1EXzEwLCAwLAorCQkwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAorCisJCVBGOU1EXzAwLCBQRjlNRF8wMSwgUEY5TURfMTAsIDAsCisJCTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisKKwkJUEY4TURfMDAsIFBGOE1EXzAxLCBQRjhNRF8xMCwgMCwKKwkJMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCB9CisJfSwKKwl7IFBJTk1VWF9DRkdfUkVHKCJQRkNSTDIiLCAweGZmZmUzYTk0LCAxNiwgNCkgeworCQlQRjdNRF8wMCwgUEY3TURfMDEsIFBGN01EXzEwLCBQRjdNRF8xMSwKKwkJMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKworCQlQRjZNRF8wMCwgUEY2TURfMDEsIFBGNk1EXzEwLCBQRjZNRF8xMSwKKwkJMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKworCQlQRjVNRF8wMCwgUEY1TURfMDEsIFBGNU1EXzEwLCBQRjVNRF8xMSwKKwkJMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKworCQlQRjRNRF8wMCwgUEY0TURfMDEsIFBGNE1EXzEwLCBQRjRNRF8xMSwKKwkJMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCB9CisJfSwKKwl7IFBJTk1VWF9DRkdfUkVHKCJQRkNSTDEiLCAweGZmZmUzYTk2LCAxNiwgNCkgeworCQlQRjNNRF8wMCwgUEYzTURfMDEsIFBGM01EXzEwLCBQRjNNRF8xMSwKKwkJMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKworCQlQRjJNRF8wMCwgUEYyTURfMDEsIFBGMk1EXzEwLCBQRjJNRF8xMSwKKwkJMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKworCQlQRjFNRF8wMCwgUEYxTURfMDEsIFBGMU1EXzEwLCBQRjFNRF8xMSwKKwkJMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKworCQlQRjBNRF8wMCwgUEYwTURfMDEsIFBGME1EXzEwLCBQRjBNRF8xMSwKKwkJMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCB9CisJfSwKKwl7fQorfTsKKworc3RhdGljIHN0cnVjdCBwaW5tdXhfZGF0YV9yZWcgcGlubXV4X2RhdGFfcmVnc1tdID0geworCXsgUElOTVVYX0RBVEFfUkVHKCJQQURSTCIsIDB4ZmZmZTM4MDIsIDE2KSB7CisJCTAsIDAsIDAsIDAsCisJCTAsIDAsIDAsIDAsCisJCVBBN19EQVRBLCBQQTZfREFUQSwgUEE1X0RBVEEsIFBBNF9EQVRBLAorCQlQQTNfREFUQSwgUEEyX0RBVEEsIFBBMV9EQVRBLCBQQTBfREFUQSB9CisJfSwKKwl7IFBJTk1VWF9EQVRBX1JFRygiUEJEUkwiLCAweGZmZmUzODgyLCAxNikgeworCQkwLCAwLCAwLCBQQjEyX0RBVEEsCisJCVBCMTFfREFUQSwgUEIxMF9EQVRBLCBQQjlfREFUQSwgUEI4X0RBVEEsCisJCVBCN19EQVRBLCBQQjZfREFUQSwgUEI1X0RBVEEsIFBCNF9EQVRBLAorCQlQQjNfREFUQSwgUEIyX0RBVEEsIFBCMV9EQVRBLCBQQjBfREFUQSB9CisJfSwKKwl7IFBJTk1VWF9EQVRBX1JFRygiUENEUkwiLCAweGZmZmUzOTAyLCAxNikgeworCQkwLCBQQzE0X0RBVEEsIFBDMTNfREFUQSwgUEMxMl9EQVRBLAorCQlQQzExX0RBVEEsIFBDMTBfREFUQSwgUEM5X0RBVEEsIFBDOF9EQVRBLAorCQlQQzdfREFUQSwgUEM2X0RBVEEsIFBDNV9EQVRBLCBQQzRfREFUQSwKKwkJUEMzX0RBVEEsIFBDMl9EQVRBLCBQQzFfREFUQSwgUEMwX0RBVEEgfQorCX0sCisJeyBQSU5NVVhfREFUQV9SRUcoIlBERFJMIiwgMHhmZmZlMzk4MiwgMTYpIHsKKwkJUEQxNV9EQVRBLCBQRDE0X0RBVEEsIFBEMTNfREFUQSwgUEQxMl9EQVRBLAorCQlQRDExX0RBVEEsIFBEMTBfREFUQSwgUEQ5X0RBVEEsIFBEOF9EQVRBLAorCQlQRDdfREFUQSwgUEQ2X0RBVEEsIFBENV9EQVRBLCBQRDRfREFUQSwKKwkJUEQzX0RBVEEsIFBEMl9EQVRBLCBQRDFfREFUQSwgUEQwX0RBVEEgfQorCX0sCisJeyBQSU5NVVhfREFUQV9SRUcoIlBFRFJMIiwgMHhmZmZlM2EwMiwgMTYpIHsKKwkJUEUxNV9EQVRBLCBQRTE0X0RBVEEsIFBFMTNfREFUQSwgUEUxMl9EQVRBLAorCQlQRTExX0RBVEEsIFBFMTBfREFUQSwgUEU5X0RBVEEsIFBFOF9EQVRBLAorCQlQRTdfREFUQSwgUEU2X0RBVEEsIFBFNV9EQVRBLCBQRTRfREFUQSwKKwkJUEUzX0RBVEEsIFBFMl9EQVRBLCBQRTFfREFUQSwgUEUwX0RBVEEgfQorCX0sCisJeyBQSU5NVVhfREFUQV9SRUcoIlBGRFJIIiwgMHhmZmZlM2E4MCwgMTYpIHsKKwkJMCwgUEYzMF9EQVRBLCBQRjI5X0RBVEEsIFBGMjhfREFUQSwKKwkJUEYyN19EQVRBLCBQRjI2X0RBVEEsIFBGMjVfREFUQSwgUEYyNF9EQVRBLAorCQlQRjIzX0RBVEEsIFBGMjJfREFUQSwgUEYyMV9EQVRBLCBQRjIwX0RBVEEsCisJCVBGMTlfREFUQSwgUEYxOF9EQVRBLCBQRjE3X0RBVEEsIFBGMTZfREFUQSB9CisJfSwKKwl7IFBJTk1VWF9EQVRBX1JFRygiUEZEUkwiLCAweGZmZmUzYTgyLCAxNikgeworCQlQRjE1X0RBVEEsIFBGMTRfREFUQSwgUEYxM19EQVRBLCBQRjEyX0RBVEEsCisJCVBGMTFfREFUQSwgUEYxMF9EQVRBLCBQRjlfREFUQSwgUEY4X0RBVEEsCisJCVBGN19EQVRBLCBQRjZfREFUQSwgUEY1X0RBVEEsIFBGNF9EQVRBLAorCQlQRjNfREFUQSwgUEYyX0RBVEEsIFBGMV9EQVRBLCBQRjBfREFUQSB9CisJfSwKKwl7IH0sCit9OworCitzdGF0aWMgc3RydWN0IHBpbm11eF9pbmZvIHNoNzIwM19waW5tdXhfaW5mbyA9IHsKKwkubmFtZSA9ICJzaDcyMDNfcGZjIiwKKwkucmVzZXJ2ZWRfaWQgPSBQSU5NVVhfUkVTRVJWRUQsCisJLmRhdGEgPSB7IFBJTk1VWF9EQVRBX0JFR0lOLCBQSU5NVVhfREFUQV9FTkQgfSwKKwkuaW5wdXQgPSB7IFBJTk1VWF9JTlBVVF9CRUdJTiwgUElOTVVYX0lOUFVUX0VORCB9LAorCS5vdXRwdXQgPSB7IFBJTk1VWF9PVVRQVVRfQkVHSU4sIFBJTk1VWF9PVVRQVVRfRU5EIH0sCisJLm1hcmsgPSB7IFBJTk1VWF9NQVJLX0JFR0lOLCBQSU5NVVhfTUFSS19FTkQgfSwKKwkuZnVuY3Rpb24gPSB7IFBJTk1VWF9GVU5DVElPTl9CRUdJTiwgUElOTVVYX0ZVTkNUSU9OX0VORCB9LAorCisJLmZpcnN0X2dwaW8gPSBHUElPX1BBNywKKwkubGFzdF9ncGlvID0gR1BJT19GTl9MQ0RfREFUQTAsCisKKwkuZ3Bpb3MgPSBwaW5tdXhfZ3Bpb3MsCisJLmNmZ19yZWdzID0gcGlubXV4X2NvbmZpZ19yZWdzLAorCS5kYXRhX3JlZ3MgPSBwaW5tdXhfZGF0YV9yZWdzLAorCisJLmdwaW9fZGF0YSA9IHBpbm11eF9kYXRhLAorCS5ncGlvX2RhdGFfc2l6ZSA9IEFSUkFZX1NJWkUocGlubXV4X2RhdGEpLAorfTsKKworc3RhdGljIGludCBfX2luaXQgcGxhdF9waW5tdXhfc2V0dXAodm9pZCkKK3sKKwlyZXR1cm4gcmVnaXN0ZXJfcGlubXV4KCZzaDcyMDNfcGlubXV4X2luZm8pOworfQorCithcmNoX2luaXRjYWxsKHBsYXRfcGlubXV4X3NldHVwKTsKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDMvTWFrZWZpbGUgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2gzL01ha2VmaWxlCmluZGV4IDUxMWRlNTUuLmUwN2M2OWUgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDMvTWFrZWZpbGUKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMy9NYWtlZmlsZQpAQCAtMjQsNCArMjQsOCBAQAogY2xvY2stJChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIwKQk6PSBjbG9jay1zaDc3MTAubwogY2xvY2stJChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzEyKQk6PSBjbG9jay1zaDc3MTIubwogCisjIFBpbm11eCBzZXR1cAorcGlubXV4LSQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMCkJOj0gcGlubXV4LXNoNzcyMC5vCisKIG9iai15CSs9ICQoY2xvY2steSkKK29iai0kKENPTkZJR19HRU5FUklDX0dQSU8pCSs9ICQocGlubXV4LXkpCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2gzL3Bpbm11eC1zaDc3MjAuYyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDMvcGlubXV4LXNoNzcyMC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjljYTE1NDYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2gzL3Bpbm11eC1zaDc3MjAuYwpAQCAtMCwwICsxLDEyNDIgQEAKKy8qCisgKiBTSDc3MjAgUGlubXV4CisgKgorICogIENvcHlyaWdodCAoQykgMjAwOCAgTWFnbnVzIERhbW0KKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KKyNpbmNsdWRlIDxjcHUvc2g3NzIwLmg+CisKK2VudW0geworCVBJTk1VWF9SRVNFUlZFRCA9IDAsCisKKwlQSU5NVVhfREFUQV9CRUdJTiwKKwlQVEE3X0RBVEEsIFBUQTZfREFUQSwgUFRBNV9EQVRBLCBQVEE0X0RBVEEsCisJUFRBM19EQVRBLCBQVEEyX0RBVEEsIFBUQTFfREFUQSwgUFRBMF9EQVRBLAorCVBUQjdfREFUQSwgUFRCNl9EQVRBLCBQVEI1X0RBVEEsIFBUQjRfREFUQSwKKwlQVEIzX0RBVEEsIFBUQjJfREFUQSwgUFRCMV9EQVRBLCBQVEIwX0RBVEEsCisJUFRDN19EQVRBLCBQVEM2X0RBVEEsIFBUQzVfREFUQSwgUFRDNF9EQVRBLAorCVBUQzNfREFUQSwgUFRDMl9EQVRBLCBQVEMxX0RBVEEsIFBUQzBfREFUQSwKKwlQVEQ3X0RBVEEsIFBURDZfREFUQSwgUFRENV9EQVRBLCBQVEQ0X0RBVEEsCisJUFREM19EQVRBLCBQVEQyX0RBVEEsIFBURDFfREFUQSwgUFREMF9EQVRBLAorCVBURTZfREFUQSwgUFRFNV9EQVRBLCBQVEU0X0RBVEEsCisJUFRFM19EQVRBLCBQVEUyX0RBVEEsIFBURTFfREFUQSwgUFRFMF9EQVRBLAorCVBURjZfREFUQSwgUFRGNV9EQVRBLCBQVEY0X0RBVEEsCisJUFRGM19EQVRBLCBQVEYyX0RBVEEsIFBURjFfREFUQSwgUFRGMF9EQVRBLAorCVBURzZfREFUQSwgUFRHNV9EQVRBLCBQVEc0X0RBVEEsCisJUFRHM19EQVRBLCBQVEcyX0RBVEEsIFBURzFfREFUQSwgUFRHMF9EQVRBLAorCVBUSDZfREFUQSwgUFRINV9EQVRBLCBQVEg0X0RBVEEsCisJUFRIM19EQVRBLCBQVEgyX0RBVEEsIFBUSDFfREFUQSwgUFRIMF9EQVRBLAorCVBUSjZfREFUQSwgUFRKNV9EQVRBLCBQVEo0X0RBVEEsCisJUFRKM19EQVRBLCBQVEoyX0RBVEEsIFBUSjFfREFUQSwgUFRKMF9EQVRBLAorCVBUSzNfREFUQSwgUFRLMl9EQVRBLCBQVEsxX0RBVEEsIFBUSzBfREFUQSwKKwlQVEw3X0RBVEEsIFBUTDZfREFUQSwgUFRMNV9EQVRBLCBQVEw0X0RBVEEsIFBUTDNfREFUQSwKKwlQVE03X0RBVEEsIFBUTTZfREFUQSwgUFRNNV9EQVRBLCBQVE00X0RBVEEsCisJUFRNM19EQVRBLCBQVE0yX0RBVEEsIFBUTTFfREFUQSwgUFRNMF9EQVRBLAorCVBUUDRfREFUQSwgUFRQM19EQVRBLCBQVFAyX0RBVEEsIFBUUDFfREFUQSwgUFRQMF9EQVRBLAorCVBUUjdfREFUQSwgUFRSNl9EQVRBLCBQVFI1X0RBVEEsIFBUUjRfREFUQSwKKwlQVFIzX0RBVEEsIFBUUjJfREFUQSwgUFRSMV9EQVRBLCBQVFIwX0RBVEEsCisJUFRTNF9EQVRBLCBQVFMzX0RBVEEsIFBUUzJfREFUQSwgUFRTMV9EQVRBLCBQVFMwX0RBVEEsCisJUFRUNF9EQVRBLCBQVFQzX0RBVEEsIFBUVDJfREFUQSwgUFRUMV9EQVRBLCBQVFQwX0RBVEEsCisJUFRVNF9EQVRBLCBQVFUzX0RBVEEsIFBUVTJfREFUQSwgUFRVMV9EQVRBLCBQVFUwX0RBVEEsCisJUFRWNF9EQVRBLCBQVFYzX0RBVEEsIFBUVjJfREFUQSwgUFRWMV9EQVRBLCBQVFYwX0RBVEEsCisJUElOTVVYX0RBVEFfRU5ELAorCisJUElOTVVYX0lOUFVUX0JFR0lOLAorCVBUQTdfSU4sIFBUQTZfSU4sIFBUQTVfSU4sIFBUQTRfSU4sCisJUFRBM19JTiwgUFRBMl9JTiwgUFRBMV9JTiwgUFRBMF9JTiwKKwlQVEI3X0lOLCBQVEI2X0lOLCBQVEI1X0lOLCBQVEI0X0lOLAorCVBUQjNfSU4sIFBUQjJfSU4sIFBUQjFfSU4sIFBUQjBfSU4sCisJUFRDN19JTiwgUFRDNl9JTiwgUFRDNV9JTiwgUFRDNF9JTiwKKwlQVEMzX0lOLCBQVEMyX0lOLCBQVEMxX0lOLCBQVEMwX0lOLAorCVBURDdfSU4sIFBURDZfSU4sIFBURDVfSU4sIFBURDRfSU4sCisJUFREM19JTiwgUFREMl9JTiwgUFREMV9JTiwgUFREMF9JTiwKKwlQVEU2X0lOLCBQVEU1X0lOLCBQVEU0X0lOLAorCVBURTNfSU4sIFBURTJfSU4sIFBURTFfSU4sIFBURTBfSU4sCisJUFRGNl9JTiwgUFRGNV9JTiwgUFRGNF9JTiwKKwlQVEYzX0lOLCBQVEYyX0lOLCBQVEYxX0lOLCBQVEYwX0lOLAorCVBURzZfSU4sIFBURzVfSU4sIFBURzRfSU4sCisJUFRHM19JTiwgUFRHMl9JTiwgUFRHMV9JTiwgUFRHMF9JTiwKKwlQVEg2X0lOLCBQVEg1X0lOLCBQVEg0X0lOLAorCVBUSDNfSU4sIFBUSDJfSU4sIFBUSDFfSU4sIFBUSDBfSU4sCisJUFRKNl9JTiwgUFRKNV9JTiwgUFRKNF9JTiwKKwlQVEozX0lOLCBQVEoyX0lOLCBQVEoxX0lOLCBQVEowX0lOLAorCVBUSzNfSU4sIFBUSzJfSU4sIFBUSzFfSU4sIFBUSzBfSU4sCisJUFRMN19JTiwgUFRMNl9JTiwgUFRMNV9JTiwgUFRMNF9JTiwgUFRMM19JTiwKKwlQVE03X0lOLCBQVE02X0lOLCBQVE01X0lOLCBQVE00X0lOLAorCVBUTTNfSU4sIFBUTTJfSU4sIFBUTTFfSU4sIFBUTTBfSU4sCisJUFRQNF9JTiwgUFRQM19JTiwgUFRQMl9JTiwgUFRQMV9JTiwgUFRQMF9JTiwKKwlQVFI3X0lOLCBQVFI2X0lOLCBQVFI1X0lOLCBQVFI0X0lOLAorCVBUUjNfSU4sIFBUUjJfSU4sIFBUUjFfSU4sIFBUUjBfSU4sCisJUFRTNF9JTiwgUFRTM19JTiwgUFRTMl9JTiwgUFRTMV9JTiwgUFRTMF9JTiwKKwlQVFQ0X0lOLCBQVFQzX0lOLCBQVFQyX0lOLCBQVFQxX0lOLCBQVFQwX0lOLAorCVBUVTRfSU4sIFBUVTNfSU4sIFBUVTJfSU4sIFBUVTFfSU4sIFBUVTBfSU4sCisJUFRWNF9JTiwgUFRWM19JTiwgUFRWMl9JTiwgUFRWMV9JTiwgUFRWMF9JTiwKKwlQSU5NVVhfSU5QVVRfRU5ELAorCisJUElOTVVYX0lOUFVUX1BVTExVUF9CRUdJTiwKKwlQVEE3X0lOX1BVLCBQVEE2X0lOX1BVLCBQVEE1X0lOX1BVLCBQVEE0X0lOX1BVLAorCVBUQTNfSU5fUFUsIFBUQTJfSU5fUFUsIFBUQTFfSU5fUFUsIFBUQTBfSU5fUFUsCisJUFRCN19JTl9QVSwgUFRCNl9JTl9QVSwgUFRCNV9JTl9QVSwgUFRCNF9JTl9QVSwKKwlQVEIzX0lOX1BVLCBQVEIyX0lOX1BVLCBQVEIxX0lOX1BVLCBQVEIwX0lOX1BVLAorCVBUQzdfSU5fUFUsIFBUQzZfSU5fUFUsIFBUQzVfSU5fUFUsIFBUQzRfSU5fUFUsCisJUFRDM19JTl9QVSwgUFRDMl9JTl9QVSwgUFRDMV9JTl9QVSwgUFRDMF9JTl9QVSwKKwlQVEQ3X0lOX1BVLCBQVEQ2X0lOX1BVLCBQVEQ1X0lOX1BVLCBQVEQ0X0lOX1BVLAorCVBURDNfSU5fUFUsIFBURDJfSU5fUFUsIFBURDFfSU5fUFUsIFBURDBfSU5fUFUsCisJUFRFNF9JTl9QVSwgUFRFM19JTl9QVSwgUFRFMl9JTl9QVSwgUFRFMV9JTl9QVSwgUFRFMF9JTl9QVSwKKwlQVEYwX0lOX1BVLAorCVBURzZfSU5fUFUsIFBURzVfSU5fUFUsIFBURzRfSU5fUFUsCisJUFRHM19JTl9QVSwgUFRHMl9JTl9QVSwgUFRHMV9JTl9QVSwgUFRHMF9JTl9QVSwKKwlQVEg2X0lOX1BVLCBQVEg1X0lOX1BVLCBQVEg0X0lOX1BVLAorCVBUSDNfSU5fUFUsIFBUSDJfSU5fUFUsIFBUSDFfSU5fUFUsIFBUSDBfSU5fUFUsCisJUFRKNl9JTl9QVSwgUFRKNV9JTl9QVSwgUFRKNF9JTl9QVSwKKwlQVEozX0lOX1BVLCBQVEoyX0lOX1BVLCBQVEoxX0lOX1BVLCBQVEowX0lOX1BVLAorCVBUSzNfSU5fUFUsIFBUSzJfSU5fUFUsIFBUSzFfSU5fUFUsIFBUSzBfSU5fUFUsCisJUFRMN19JTl9QVSwgUFRMNl9JTl9QVSwgUFRMNV9JTl9QVSwgUFRMNF9JTl9QVSwgUFRMM19JTl9QVSwKKwlQVE03X0lOX1BVLCBQVE02X0lOX1BVLCBQVE01X0lOX1BVLCBQVE00X0lOX1BVLAorCVBUTTNfSU5fUFUsIFBUTTJfSU5fUFUsIFBUTTFfSU5fUFUsIFBUTTBfSU5fUFUsCisJUFRQNF9JTl9QVSwgUFRQM19JTl9QVSwgUFRQMl9JTl9QVSwgUFRQMV9JTl9QVSwgUFRQMF9JTl9QVSwKKwlQVFI3X0lOX1BVLCBQVFI2X0lOX1BVLCBQVFI1X0lOX1BVLCBQVFI0X0lOX1BVLAorCVBUUjNfSU5fUFUsIFBUUjJfSU5fUFUsIFBUUjFfSU5fUFUsIFBUUjBfSU5fUFUsCisJUFRTNF9JTl9QVSwgUFRTM19JTl9QVSwgUFRTMl9JTl9QVSwgUFRTMV9JTl9QVSwgUFRTMF9JTl9QVSwKKwlQVFQ0X0lOX1BVLCBQVFQzX0lOX1BVLCBQVFQyX0lOX1BVLCBQVFQxX0lOX1BVLCBQVFQwX0lOX1BVLAorCVBUVTRfSU5fUFUsIFBUVTNfSU5fUFUsIFBUVTJfSU5fUFUsIFBUVTFfSU5fUFUsIFBUVTBfSU5fUFUsCisJUFRWNF9JTl9QVSwgUFRWM19JTl9QVSwgUFRWMl9JTl9QVSwgUFRWMV9JTl9QVSwgUFRWMF9JTl9QVSwKKwlQSU5NVVhfSU5QVVRfUFVMTFVQX0VORCwKKworCVBJTk1VWF9PVVRQVVRfQkVHSU4sCisJUFRBN19PVVQsIFBUQTZfT1VULCBQVEE1X09VVCwgUFRBNF9PVVQsCisJUFRBM19PVVQsIFBUQTJfT1VULCBQVEExX09VVCwgUFRBMF9PVVQsCisJUFRCN19PVVQsIFBUQjZfT1VULCBQVEI1X09VVCwgUFRCNF9PVVQsCisJUFRCM19PVVQsIFBUQjJfT1VULCBQVEIxX09VVCwgUFRCMF9PVVQsCisJUFRDN19PVVQsIFBUQzZfT1VULCBQVEM1X09VVCwgUFRDNF9PVVQsCisJUFRDM19PVVQsIFBUQzJfT1VULCBQVEMxX09VVCwgUFRDMF9PVVQsCisJUFREN19PVVQsIFBURDZfT1VULCBQVEQ1X09VVCwgUFRENF9PVVQsCisJUFREM19PVVQsIFBURDJfT1VULCBQVEQxX09VVCwgUFREMF9PVVQsCisJUFRFNF9PVVQsIFBURTNfT1VULCBQVEUyX09VVCwgUFRFMV9PVVQsIFBURTBfT1VULAorCVBURjBfT1VULAorCVBURzZfT1VULCBQVEc1X09VVCwgUFRHNF9PVVQsCisJUFRHM19PVVQsIFBURzJfT1VULCBQVEcxX09VVCwgUFRHMF9PVVQsCisJUFRINl9PVVQsIFBUSDVfT1VULCBQVEg0X09VVCwKKwlQVEgzX09VVCwgUFRIMl9PVVQsIFBUSDFfT1VULCBQVEgwX09VVCwKKwlQVEo2X09VVCwgUFRKNV9PVVQsIFBUSjRfT1VULAorCVBUSjNfT1VULCBQVEoyX09VVCwgUFRKMV9PVVQsIFBUSjBfT1VULAorCVBUSzNfT1VULCBQVEsyX09VVCwgUFRLMV9PVVQsIFBUSzBfT1VULAorCVBUTDdfT1VULCBQVEw2X09VVCwgUFRMNV9PVVQsIFBUTDRfT1VULCBQVEwzX09VVCwKKwlQVE03X09VVCwgUFRNNl9PVVQsIFBUTTVfT1VULCBQVE00X09VVCwKKwlQVE0zX09VVCwgUFRNMl9PVVQsIFBUTTFfT1VULCBQVE0wX09VVCwKKwlQVFA0X09VVCwgUFRQM19PVVQsIFBUUDJfT1VULCBQVFAxX09VVCwgUFRQMF9PVVQsCisJUFRSN19PVVQsIFBUUjZfT1VULCBQVFI1X09VVCwgUFRSNF9PVVQsCisJUFRSM19PVVQsIFBUUjJfT1VULCBQVFIxX09VVCwgUFRSMF9PVVQsCisJUFRTNF9PVVQsIFBUUzNfT1VULCBQVFMyX09VVCwgUFRTMV9PVVQsIFBUUzBfT1VULAorCVBUVDRfT1VULCBQVFQzX09VVCwgUFRUMl9PVVQsIFBUVDFfT1VULCBQVFQwX09VVCwKKwlQVFU0X09VVCwgUFRVM19PVVQsIFBUVTJfT1VULCBQVFUxX09VVCwgUFRVMF9PVVQsCisJUFRWNF9PVVQsIFBUVjNfT1VULCBQVFYyX09VVCwgUFRWMV9PVVQsIFBUVjBfT1VULAorCVBJTk1VWF9PVVRQVVRfRU5ELAorCisJUElOTVVYX0ZVTkNUSU9OX0JFR0lOLAorCVBUQTdfRk4sIFBUQTZfRk4sIFBUQTVfRk4sIFBUQTRfRk4sCisJUFRBM19GTiwgUFRBMl9GTiwgUFRBMV9GTiwgUFRBMF9GTiwKKwlQVEI3X0ZOLCBQVEI2X0ZOLCBQVEI1X0ZOLCBQVEI0X0ZOLAorCVBUQjNfRk4sIFBUQjJfRk4sIFBUQjFfRk4sIFBUQjBfRk4sCisJUFRDN19GTiwgUFRDNl9GTiwgUFRDNV9GTiwgUFRDNF9GTiwKKwlQVEMzX0ZOLCBQVEMyX0ZOLCBQVEMxX0ZOLCBQVEMwX0ZOLAorCVBURDdfRk4sIFBURDZfRk4sIFBURDVfRk4sIFBURDRfRk4sCisJUFREM19GTiwgUFREMl9GTiwgUFREMV9GTiwgUFREMF9GTiwKKwlQVEU2X0ZOLCBQVEU1X0ZOLCBQVEU0X0ZOLAorCVBURTNfRk4sIFBURTJfRk4sIFBURTFfRk4sIFBURTBfRk4sCisJUFRGNl9GTiwgUFRGNV9GTiwgUFRGNF9GTiwKKwlQVEYzX0ZOLCBQVEYyX0ZOLCBQVEYxX0ZOLCBQVEYwX0ZOLAorCVBURzZfRk4sIFBURzVfRk4sIFBURzRfRk4sCisJUFRHM19GTiwgUFRHMl9GTiwgUFRHMV9GTiwgUFRHMF9GTiwKKwlQVEg2X0ZOLCBQVEg1X0ZOLCBQVEg0X0ZOLAorCVBUSDNfRk4sIFBUSDJfRk4sIFBUSDFfRk4sIFBUSDBfRk4sCisJUFRKNl9GTiwgUFRKNV9GTiwgUFRKNF9GTiwKKwlQVEozX0ZOLCBQVEoyX0ZOLCBQVEoxX0ZOLCBQVEowX0ZOLAorCVBUSzNfRk4sIFBUSzJfRk4sIFBUSzFfRk4sIFBUSzBfRk4sCisJUFRMN19GTiwgUFRMNl9GTiwgUFRMNV9GTiwgUFRMNF9GTiwgUFRMM19GTiwKKwlQVE03X0ZOLCBQVE02X0ZOLCBQVE01X0ZOLCBQVE00X0ZOLAorCVBUTTNfRk4sIFBUTTJfRk4sIFBUTTFfRk4sIFBUTTBfRk4sCisJUFRQNF9GTiwgUFRQM19GTiwgUFRQMl9GTiwgUFRQMV9GTiwgUFRQMF9GTiwKKwlQVFI3X0ZOLCBQVFI2X0ZOLCBQVFI1X0ZOLCBQVFI0X0ZOLAorCVBUUjNfRk4sIFBUUjJfRk4sIFBUUjFfRk4sIFBUUjBfRk4sCisJUFRTNF9GTiwgUFRTM19GTiwgUFRTMl9GTiwgUFRTMV9GTiwgUFRTMF9GTiwKKwlQVFQ0X0ZOLCBQVFQzX0ZOLCBQVFQyX0ZOLCBQVFQxX0ZOLCBQVFQwX0ZOLAorCVBUVTRfRk4sIFBUVTNfRk4sIFBUVTJfRk4sIFBUVTFfRk4sIFBUVTBfRk4sCisJUFRWNF9GTiwgUFRWM19GTiwgUFRWMl9GTiwgUFRWMV9GTiwgUFRWMF9GTiwKKworCVBTRUxBXzFfMF8wMCwgUFNFTEFfMV8wXzAxLCBQU0VMQV8xXzBfMTAsCisJUFNFTEFfM18yXzAwLCBQU0VMQV8zXzJfMDEsIFBTRUxBXzNfMl8xMCwgUFNFTEFfM18yXzExLAorCVBTRUxBXzVfNF8wMCwgUFNFTEFfNV80XzAxLCBQU0VMQV81XzRfMTAsIFBTRUxBXzVfNF8xMSwKKwlQU0VMQV83XzZfMDAsIFBTRUxBXzdfNl8wMSwgUFNFTEFfN182XzEwLAorCVBTRUxBXzlfOF8wMCwgUFNFTEFfOV84XzAxLCBQU0VMQV85XzhfMTAsCisJUFNFTEFfMTFfMTBfMDAsIFBTRUxBXzExXzEwXzAxLCBQU0VMQV8xMV8xMF8xMCwKKwlQU0VMQV8xM18xMl8wMCwgUFNFTEFfMTNfMTJfMTAsCisJUFNFTEFfMTVfMTRfMDAsIFBTRUxBXzE1XzE0XzEwLAorCVBTRUxCXzlfOF8wMCwgUFNFTEJfOV84XzExLAorCVBTRUxCXzExXzEwXzAwLCBQU0VMQl8xMV8xMF8wMSwgUFNFTEJfMTFfMTBfMTAsIFBTRUxCXzExXzEwXzExLAorCVBTRUxCXzEzXzEyXzAwLCBQU0VMQl8xM18xMl8wMSwgUFNFTEJfMTNfMTJfMTAsIFBTRUxCXzEzXzEyXzExLAorCVBTRUxCXzE1XzE0XzAwLCBQU0VMQl8xNV8xNF8xMSwKKwlQU0VMQ185XzhfMDAsIFBTRUxDXzlfOF8xMCwKKwlQU0VMQ18xMV8xMF8wMCwgUFNFTENfMTFfMTBfMTAsCisJUFNFTENfMTNfMTJfMDAsCVBTRUxDXzEzXzEyXzAxLAlQU0VMQ18xM18xMl8xMCwKKwlQU0VMQ18xNV8xNF8wMCwJUFNFTENfMTVfMTRfMDEsCVBTRUxDXzE1XzE0XzEwLAorCVBTRUxEXzFfMF8wMCwgUFNFTERfMV8wXzEwLAorCVBTRUxEXzExXzEwXzAwLAlQU0VMRF8xMV8xMF8wMSwKKwlQU0VMRF8xNV8xNF8wMCwJUFNFTERfMTVfMTRfMDEsCVBTRUxEXzE1XzE0XzEwLAorCVBJTk1VWF9GVU5DVElPTl9FTkQsCisKKwlQSU5NVVhfTUFSS19CRUdJTiwKKwlEMzFfTUFSSywgRDMwX01BUkssIEQyOV9NQVJLLCBEMjhfTUFSSywKKwlEMjdfTUFSSywgRDI2X01BUkssIEQyNV9NQVJLLCBEMjRfTUFSSywKKwlEMjNfTUFSSywgRDIyX01BUkssIEQyMV9NQVJLLCBEMjBfTUFSSywKKwlEMTlfTUFSSywgRDE4X01BUkssIEQxN19NQVJLLCBEMTZfTUFSSywKKwlJT0lTMTZfTUFSSywgUkFTX01BUkssIENBU19NQVJLLCBDS0VfTUFSSywKKwlDUzVCX0NFMUFfTUFSSywgQ1M2Ql9DRTFCX01BUkssCisJQTI1X01BUkssIEEyNF9NQVJLLCBBMjNfTUFSSywgQTIyX01BUkssCisJQTIxX01BUkssIEEyMF9NQVJLLCBBMTlfTUFSSywgQTBfTUFSSywKKwlSRUZPVVRfTUFSSywgSVJRT1VUX01BUkssCisJTENEX0RBVEExNV9NQVJLLCBMQ0RfREFUQTE0X01BUkssCisJTENEX0RBVEExM19NQVJLLCBMQ0RfREFUQTEyX01BUkssCisJTENEX0RBVEExMV9NQVJLLCBMQ0RfREFUQTEwX01BUkssCisJTENEX0RBVEE5X01BUkssIExDRF9EQVRBOF9NQVJLLAorCUxDRF9EQVRBN19NQVJLLCBMQ0RfREFUQTZfTUFSSywKKwlMQ0RfREFUQTVfTUFSSywgTENEX0RBVEE0X01BUkssCisJTENEX0RBVEEzX01BUkssIExDRF9EQVRBMl9NQVJLLAorCUxDRF9EQVRBMV9NQVJLLCBMQ0RfREFUQTBfTUFSSywKKwlMQ0RfTV9ESVNQX01BUkssCisJTENEX0NMMV9NQVJLLCBMQ0RfQ0wyX01BUkssCisJTENEX0RPTl9NQVJLLCBMQ0RfRkxNX01BUkssCisJTENEX1ZFUFdDX01BUkssIExDRF9WQ1BXQ19NQVJLLAorCUFGRV9SWElOX01BUkssIEFGRV9SREVUX01BUkssCisJQUZFX0ZTX01BUkssIEFGRV9UWE9VVF9NQVJLLAorCUFGRV9TQ0xLX01BUkssIEFGRV9STFlDTlRfTUFSSywKKwlBRkVfSEMxX01BUkssCisJSUlDX1NDTF9NQVJLLCBJSUNfU0RBX01BUkssCisJREExX01BUkssIERBMF9NQVJLLAorCUFOM19NQVJLLCBBTjJfTUFSSywgQU4xX01BUkssIEFOMF9NQVJLLCBBRFRSR19NQVJLLAorCVVTQjFEX1JDVl9NQVJLLCBVU0IxRF9UWFNFMF9NQVJLLAorCVVTQjFEX1RYRFBMU19NQVJLLCBVU0IxRF9ETU5TX01BUkssCisJVVNCMURfRFBMU19NQVJLLCBVU0IxRF9TUEVFRF9NQVJLLAorCVVTQjFEX1RYRU5MX01BUkssCisJVVNCMl9QV1JfRU5fTUFSSywgVVNCMV9QV1JfRU5fVVNCRl9VUExVUF9NQVJLLCBVU0IxRF9TVVNQRU5EX01BUkssCisJSVJRNV9NQVJLLCBJUlE0X01BUkssCisJSVJRM19JUkwzX01BUkssIElSUTJfSVJMMl9NQVJLLAorCUlSUTFfSVJMMV9NQVJLLCBJUlEwX0lSTDBfTUFSSywKKwlQQ0NfUkVHX01BUkssIFBDQ19EUlZfTUFSSywKKwlQQ0NfQlZEMl9NQVJLLCBQQ0NfQlZEMV9NQVJLLAorCVBDQ19DRDJfTUFSSywgUENDX0NEMV9NQVJLLAorCVBDQ19SRVNFVF9NQVJLLCBQQ0NfUkRZX01BUkssCisJUENDX1ZTMl9NQVJLLCBQQ0NfVlMxX01BUkssCisJQVVEQVRBM19NQVJLLCBBVURBVEEyX01BUkssIEFVREFUQTFfTUFSSywgQVVEQVRBMF9NQVJLLAorCUFVRENLX01BUkssIEFVRFNZTkNfTUFSSywgQVNFQlJLQUtfTUFSSywgVFJTVF9NQVJLLAorCVRNU19NQVJLLCBURE9fTUFSSywgVERJX01BUkssIFRDS19NQVJLLAorCURBQ0sxX01BUkssIERSRVExX01BUkssIERBQ0swX01BUkssIERSRVEwX01BUkssCisJVEVORDFfTUFSSywgVEVORDBfTUFSSywKKwlTSU9GMF9TWU5DX01BUkssIFNJT0YwX01DTEtfTUFSSywKKwlTSU9GMF9UWERfTUFSSywgU0lPRjBfUlhEX01BUkssCisJU0lPRjBfU0NLX01BUkssCisJU0lPRjFfU1lOQ19NQVJLLCBTSU9GMV9NQ0xLX01BUkssCisJU0lPRjFfVFhEX01BUkssIFNJT0YxX1JYRF9NQVJLLAorCVNJT0YxX1NDS19NQVJLLAorCVNDSUYwX1RYRF9NQVJLLCBTQ0lGMF9SWERfTUFSSywKKwlTQ0lGMF9SVFNfTUFSSywgU0NJRjBfQ1RTX01BUkssIFNDSUYwX1NDS19NQVJLLAorCVNDSUYxX1RYRF9NQVJLLCBTQ0lGMV9SWERfTUFSSywKKwlTQ0lGMV9SVFNfTUFSSywgU0NJRjFfQ1RTX01BUkssIFNDSUYxX1NDS19NQVJLLAorCVRQVV9UTzFfTUFSSywgVFBVX1RPMF9NQVJLLAorCVRQVV9USTNCX01BUkssIFRQVV9USTNBX01BUkssCisJVFBVX1RJMkJfTUFSSywgVFBVX1RJMkFfTUFSSywKKwlUUFVfVE8zX01BUkssIFRQVV9UTzJfTUFSSywKKwlTSU1fRF9NQVJLLCBTSU1fQ0xLX01BUkssIFNJTV9SU1RfTUFSSywKKwlNTUNfREFUX01BUkssIE1NQ19DTURfTUFSSywKKwlNTUNfQ0xLX01BUkssIE1NQ19WRERPTl9NQVJLLAorCU1NQ19PRE1PRF9NQVJLLAorCVNUQVRVUzBfTUFSSywgU1RBVFVTMV9NQVJLLAorCVBJTk1VWF9NQVJLX0VORCwKK307CisKK3N0YXRpYyBwaW5tdXhfZW51bV90IHBpbm11eF9kYXRhW10gPSB7CisJLyogUFRBIEdQSU8gKi8KKwlQSU5NVVhfREFUQShQVEE3X0RBVEEsIFBUQTdfSU4sIFBUQTdfT1VULCBQVEE3X0lOX1BVKSwKKwlQSU5NVVhfREFUQShQVEE2X0RBVEEsIFBUQTZfSU4sIFBUQTZfT1VULCBQVEE2X0lOX1BVKSwKKwlQSU5NVVhfREFUQShQVEE1X0RBVEEsIFBUQTVfSU4sIFBUQTVfT1VULCBQVEE1X0lOX1BVKSwKKwlQSU5NVVhfREFUQShQVEE0X0RBVEEsIFBUQTRfSU4sIFBUQTRfT1VULCBQVEE0X0lOX1BVKSwKKwlQSU5NVVhfREFUQShQVEEzX0RBVEEsIFBUQTNfSU4sIFBUQTNfT1VULCBQVEEzX0lOX1BVKSwKKwlQSU5NVVhfREFUQShQVEEyX0RBVEEsIFBUQTJfSU4sIFBUQTJfT1VULCBQVEEyX0lOX1BVKSwKKwlQSU5NVVhfREFUQShQVEExX0RBVEEsIFBUQTFfSU4sIFBUQTFfT1VULCBQVEExX0lOX1BVKSwKKwlQSU5NVVhfREFUQShQVEEwX0RBVEEsIFBUQTBfSU4sIFBUQTBfT1VULCBQVEEwX0lOX1BVKSwKKworCS8qIFBUQiBHUElPICovCisJUElOTVVYX0RBVEEoUFRCN19EQVRBLCBQVEI3X0lOLCBQVEI3X09VVCwgUFRCN19JTl9QVSksCisJUElOTVVYX0RBVEEoUFRCNl9EQVRBLCBQVEI2X0lOLCBQVEI2X09VVCwgUFRCNl9JTl9QVSksCisJUElOTVVYX0RBVEEoUFRCNV9EQVRBLCBQVEI1X0lOLCBQVEI1X09VVCwgUFRCNV9JTl9QVSksCisJUElOTVVYX0RBVEEoUFRCNF9EQVRBLCBQVEI0X0lOLCBQVEI0X09VVCwgUFRCNF9JTl9QVSksCisJUElOTVVYX0RBVEEoUFRCM19EQVRBLCBQVEIzX0lOLCBQVEIzX09VVCwgUFRCM19JTl9QVSksCisJUElOTVVYX0RBVEEoUFRCMl9EQVRBLCBQVEIyX0lOLCBQVEIyX09VVCwgUFRCMl9JTl9QVSksCisJUElOTVVYX0RBVEEoUFRCMV9EQVRBLCBQVEIxX0lOLCBQVEIxX09VVCwgUFRCMV9JTl9QVSksCisJUElOTVVYX0RBVEEoUFRCMF9EQVRBLCBQVEIwX0lOLCBQVEIwX09VVCwgUFRCMF9JTl9QVSksCisKKwkvKiBQVEMgR1BJTyAqLworCVBJTk1VWF9EQVRBKFBUQzdfREFUQSwgUFRDN19JTiwgUFRDN19PVVQsIFBUQzdfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBUQzZfREFUQSwgUFRDNl9JTiwgUFRDNl9PVVQsIFBUQzZfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBUQzVfREFUQSwgUFRDNV9JTiwgUFRDNV9PVVQsIFBUQzVfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBUQzRfREFUQSwgUFRDNF9JTiwgUFRDNF9PVVQsIFBUQzRfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBUQzNfREFUQSwgUFRDM19JTiwgUFRDM19PVVQsIFBUQzNfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBUQzJfREFUQSwgUFRDMl9JTiwgUFRDMl9PVVQsIFBUQzJfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBUQzFfREFUQSwgUFRDMV9JTiwgUFRDMV9PVVQsIFBUQzFfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBUQzBfREFUQSwgUFRDMF9JTiwgUFRDMF9PVVQsIFBUQzBfSU5fUFUpLAorCisJLyogUFREIEdQSU8gKi8KKwlQSU5NVVhfREFUQShQVEQ3X0RBVEEsIFBURDdfSU4sIFBURDdfT1VULCBQVEQ3X0lOX1BVKSwKKwlQSU5NVVhfREFUQShQVEQ2X0RBVEEsIFBURDZfSU4sIFBURDZfT1VULCBQVEQ2X0lOX1BVKSwKKwlQSU5NVVhfREFUQShQVEQ1X0RBVEEsIFBURDVfSU4sIFBURDVfT1VULCBQVEQ1X0lOX1BVKSwKKwlQSU5NVVhfREFUQShQVEQ0X0RBVEEsIFBURDRfSU4sIFBURDRfT1VULCBQVEQ0X0lOX1BVKSwKKwlQSU5NVVhfREFUQShQVEQzX0RBVEEsIFBURDNfSU4sIFBURDNfT1VULCBQVEQzX0lOX1BVKSwKKwlQSU5NVVhfREFUQShQVEQyX0RBVEEsIFBURDJfSU4sIFBURDJfT1VULCBQVEQyX0lOX1BVKSwKKwlQSU5NVVhfREFUQShQVEQxX0RBVEEsIFBURDFfSU4sIFBURDFfT1VULCBQVEQxX0lOX1BVKSwKKwlQSU5NVVhfREFUQShQVEQwX0RBVEEsIFBURDBfSU4sIFBURDBfT1VULCBQVEQwX0lOX1BVKSwKKworCS8qIFBURSBHUElPICovCisJUElOTVVYX0RBVEEoUFRFNl9EQVRBLCBQVEU2X0lOKSwKKwlQSU5NVVhfREFUQShQVEU1X0RBVEEsIFBURTVfSU4pLAorCVBJTk1VWF9EQVRBKFBURTRfREFUQSwgUFRFNF9JTiwgUFRFNF9PVVQsIFBURTRfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBURTNfREFUQSwgUFRFM19JTiwgUFRFM19PVVQsIFBURTNfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBURTJfREFUQSwgUFRFMl9JTiwgUFRFMl9PVVQsIFBURTJfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBURTFfREFUQSwgUFRFMV9JTiwgUFRFMV9PVVQsIFBURTFfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBURTBfREFUQSwgUFRFMF9JTiwgUFRFMF9PVVQsIFBURTBfSU5fUFUpLAorCisJLyogUFRGIEdQSU8gKi8KKwlQSU5NVVhfREFUQShQVEY2X0RBVEEsIFBURjZfSU4pLAorCVBJTk1VWF9EQVRBKFBURjVfREFUQSwgUFRGNV9JTiksCisJUElOTVVYX0RBVEEoUFRGNF9EQVRBLCBQVEY0X0lOKSwKKwlQSU5NVVhfREFUQShQVEYzX0RBVEEsIFBURjNfSU4pLAorCVBJTk1VWF9EQVRBKFBURjJfREFUQSwgUFRGMl9JTiksCisJUElOTVVYX0RBVEEoUFRGMV9EQVRBLCBQVEYxX0lOKSwKKwlQSU5NVVhfREFUQShQVEYwX0RBVEEsIFBURjBfSU4sIFBURjBfT1VULCBQVEYwX0lOX1BVKSwKKworCS8qIFBURyBHUElPICovCisJUElOTVVYX0RBVEEoUFRHNl9EQVRBLCBQVEc2X0lOLCBQVEc2X09VVCwgUFRHNl9JTl9QVSksCisJUElOTVVYX0RBVEEoUFRHNV9EQVRBLCBQVEc1X0lOLCBQVEc1X09VVCwgUFRHNV9JTl9QVSksCisJUElOTVVYX0RBVEEoUFRHNF9EQVRBLCBQVEc0X0lOLCBQVEc0X09VVCwgUFRHNF9JTl9QVSksCisJUElOTVVYX0RBVEEoUFRHM19EQVRBLCBQVEczX0lOLCBQVEczX09VVCwgUFRHM19JTl9QVSksCisJUElOTVVYX0RBVEEoUFRHMl9EQVRBLCBQVEcyX0lOLCBQVEcyX09VVCwgUFRHMl9JTl9QVSksCisJUElOTVVYX0RBVEEoUFRHMV9EQVRBLCBQVEcxX0lOLCBQVEcxX09VVCwgUFRHMV9JTl9QVSksCisJUElOTVVYX0RBVEEoUFRHMF9EQVRBLCBQVEcwX0lOLCBQVEcwX09VVCwgUFRHMF9JTl9QVSksCisKKwkvKiBQVEggR1BJTyAqLworCVBJTk1VWF9EQVRBKFBUSDZfREFUQSwgUFRINl9JTiwgUFRINl9PVVQsIFBUSDZfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBUSDVfREFUQSwgUFRINV9JTiwgUFRINV9PVVQsIFBUSDVfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBUSDRfREFUQSwgUFRINF9JTiwgUFRINF9PVVQsIFBUSDRfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBUSDNfREFUQSwgUFRIM19JTiwgUFRIM19PVVQsIFBUSDNfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBUSDJfREFUQSwgUFRIMl9JTiwgUFRIMl9PVVQsIFBUSDJfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBUSDFfREFUQSwgUFRIMV9JTiwgUFRIMV9PVVQsIFBUSDFfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBUSDBfREFUQSwgUFRIMF9JTiwgUFRIMF9PVVQsIFBUSDBfSU5fUFUpLAorCisJLyogUFRKIEdQSU8gKi8KKwlQSU5NVVhfREFUQShQVEo2X0RBVEEsIFBUSjZfSU4sIFBUSjZfT1VULCBQVEo2X0lOX1BVKSwKKwlQSU5NVVhfREFUQShQVEo1X0RBVEEsIFBUSjVfSU4sIFBUSjVfT1VULCBQVEo1X0lOX1BVKSwKKwlQSU5NVVhfREFUQShQVEo0X0RBVEEsIFBUSjRfSU4sIFBUSjRfT1VULCBQVEo0X0lOX1BVKSwKKwlQSU5NVVhfREFUQShQVEozX0RBVEEsIFBUSjNfSU4sIFBUSjNfT1VULCBQVEozX0lOX1BVKSwKKwlQSU5NVVhfREFUQShQVEoyX0RBVEEsIFBUSjJfSU4sIFBUSjJfT1VULCBQVEoyX0lOX1BVKSwKKwlQSU5NVVhfREFUQShQVEoxX0RBVEEsIFBUSjFfSU4sIFBUSjFfT1VULCBQVEoxX0lOX1BVKSwKKwlQSU5NVVhfREFUQShQVEowX0RBVEEsIFBUSjBfSU4sIFBUSjBfT1VULCBQVEowX0lOX1BVKSwKKworCS8qIFBUSyBHUElPICovCisJUElOTVVYX0RBVEEoUFRLM19EQVRBLCBQVEszX0lOLCBQVEszX09VVCwgUFRLM19JTl9QVSksCisJUElOTVVYX0RBVEEoUFRLMl9EQVRBLCBQVEsyX0lOLCBQVEsyX09VVCwgUFRLMl9JTl9QVSksCisJUElOTVVYX0RBVEEoUFRLMV9EQVRBLCBQVEsxX0lOLCBQVEsxX09VVCwgUFRLMV9JTl9QVSksCisJUElOTVVYX0RBVEEoUFRLMF9EQVRBLCBQVEswX0lOLCBQVEswX09VVCwgUFRLMF9JTl9QVSksCisKKwkvKiBQVEwgR1BJTyAqLworCVBJTk1VWF9EQVRBKFBUTDdfREFUQSwgUFRMN19JTiwgUFRMN19PVVQsIFBUTDdfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBUTDZfREFUQSwgUFRMNl9JTiwgUFRMNl9PVVQsIFBUTDZfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBUTDVfREFUQSwgUFRMNV9JTiwgUFRMNV9PVVQsIFBUTDVfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBUTDRfREFUQSwgUFRMNF9JTiwgUFRMNF9PVVQsIFBUTDRfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBUTDNfREFUQSwgUFRMM19JTiwgUFRMM19PVVQsIFBUTDNfSU5fUFUpLAorCisJLyogUFRNIEdQSU8gKi8KKwlQSU5NVVhfREFUQShQVE03X0RBVEEsIFBUTTdfSU4sIFBUTTdfT1VULCBQVE03X0lOX1BVKSwKKwlQSU5NVVhfREFUQShQVE02X0RBVEEsIFBUTTZfSU4sIFBUTTZfT1VULCBQVE02X0lOX1BVKSwKKwlQSU5NVVhfREFUQShQVE01X0RBVEEsIFBUTTVfSU4sIFBUTTVfT1VULCBQVE01X0lOX1BVKSwKKwlQSU5NVVhfREFUQShQVE00X0RBVEEsIFBUTTRfSU4sIFBUTTRfT1VULCBQVE00X0lOX1BVKSwKKwlQSU5NVVhfREFUQShQVE0zX0RBVEEsIFBUTTNfSU4sIFBUTTNfT1VULCBQVE0zX0lOX1BVKSwKKwlQSU5NVVhfREFUQShQVE0yX0RBVEEsIFBUTTJfSU4sIFBUTTJfT1VULCBQVE0yX0lOX1BVKSwKKwlQSU5NVVhfREFUQShQVE0xX0RBVEEsIFBUTTFfSU4sIFBUTTFfT1VULCBQVE0xX0lOX1BVKSwKKwlQSU5NVVhfREFUQShQVE0wX0RBVEEsIFBUTTBfSU4sIFBUTTBfT1VULCBQVE0wX0lOX1BVKSwKKworCS8qIFBUUCBHUElPICovCisJUElOTVVYX0RBVEEoUFRQNF9EQVRBLCBQVFA0X0lOLCBQVFA0X09VVCwgUFRQNF9JTl9QVSksCisJUElOTVVYX0RBVEEoUFRQM19EQVRBLCBQVFAzX0lOLCBQVFAzX09VVCwgUFRQM19JTl9QVSksCisJUElOTVVYX0RBVEEoUFRQMl9EQVRBLCBQVFAyX0lOLCBQVFAyX09VVCwgUFRQMl9JTl9QVSksCisJUElOTVVYX0RBVEEoUFRQMV9EQVRBLCBQVFAxX0lOLCBQVFAxX09VVCwgUFRQMV9JTl9QVSksCisJUElOTVVYX0RBVEEoUFRQMF9EQVRBLCBQVFAwX0lOLCBQVFAwX09VVCwgUFRQMF9JTl9QVSksCisKKwkvKiBQVFIgR1BJTyAqLworCVBJTk1VWF9EQVRBKFBUUjdfREFUQSwgUFRSN19JTiwgUFRSN19PVVQsIFBUUjdfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBUUjZfREFUQSwgUFRSNl9JTiwgUFRSNl9PVVQsIFBUUjZfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBUUjVfREFUQSwgUFRSNV9JTiwgUFRSNV9PVVQsIFBUUjVfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBUUjRfREFUQSwgUFRSNF9JTiwgUFRSNF9PVVQsIFBUUjRfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBUUjNfREFUQSwgUFRSM19JTiwgUFRSM19PVVQsIFBUUjNfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBUUjJfREFUQSwgUFRSMl9JTiwgUFRSMl9PVVQsIFBUUjJfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBUUjFfREFUQSwgUFRSMV9JTiwgUFRSMV9PVVQsIFBUUjFfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBUUjBfREFUQSwgUFRSMF9JTiwgUFRSMF9PVVQsIFBUUjBfSU5fUFUpLAorCisJLyogUFRTIEdQSU8gKi8KKwlQSU5NVVhfREFUQShQVFM0X0RBVEEsIFBUUzRfSU4sIFBUUzRfT1VULCBQVFM0X0lOX1BVKSwKKwlQSU5NVVhfREFUQShQVFMzX0RBVEEsIFBUUzNfSU4sIFBUUzNfT1VULCBQVFMzX0lOX1BVKSwKKwlQSU5NVVhfREFUQShQVFMyX0RBVEEsIFBUUzJfSU4sIFBUUzJfT1VULCBQVFMyX0lOX1BVKSwKKwlQSU5NVVhfREFUQShQVFMxX0RBVEEsIFBUUzFfSU4sIFBUUzFfT1VULCBQVFMxX0lOX1BVKSwKKwlQSU5NVVhfREFUQShQVFMwX0RBVEEsIFBUUzBfSU4sIFBUUzBfT1VULCBQVFMwX0lOX1BVKSwKKworCS8qIFBUVCBHUElPICovCisJUElOTVVYX0RBVEEoUFRUNF9EQVRBLCBQVFQ0X0lOLCBQVFQ0X09VVCwgUFRUNF9JTl9QVSksCisJUElOTVVYX0RBVEEoUFRUM19EQVRBLCBQVFQzX0lOLCBQVFQzX09VVCwgUFRUM19JTl9QVSksCisJUElOTVVYX0RBVEEoUFRUMl9EQVRBLCBQVFQyX0lOLCBQVFQyX09VVCwgUFRUMl9JTl9QVSksCisJUElOTVVYX0RBVEEoUFRUMV9EQVRBLCBQVFQxX0lOLCBQVFQxX09VVCwgUFRUMV9JTl9QVSksCisJUElOTVVYX0RBVEEoUFRUMF9EQVRBLCBQVFQwX0lOLCBQVFQwX09VVCwgUFRUMF9JTl9QVSksCisKKwkvKiBQVFUgR1BJTyAqLworCVBJTk1VWF9EQVRBKFBUVTRfREFUQSwgUFRVNF9JTiwgUFRVNF9PVVQsIFBUVTRfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBUVTNfREFUQSwgUFRVM19JTiwgUFRVM19PVVQsIFBUVTNfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBUVTJfREFUQSwgUFRVMl9JTiwgUFRVMl9PVVQsIFBUVTJfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBUVTFfREFUQSwgUFRVMV9JTiwgUFRVMV9PVVQsIFBUVTFfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBUVTBfREFUQSwgUFRVMF9JTiwgUFRVMF9PVVQsIFBUVTBfSU5fUFUpLAorCisJLyogUFRWIEdQSU8gKi8KKwlQSU5NVVhfREFUQShQVFY0X0RBVEEsIFBUVjRfSU4sIFBUVjRfT1VULCBQVFY0X0lOX1BVKSwKKwlQSU5NVVhfREFUQShQVFYzX0RBVEEsIFBUVjNfSU4sIFBUVjNfT1VULCBQVFYzX0lOX1BVKSwKKwlQSU5NVVhfREFUQShQVFYyX0RBVEEsIFBUVjJfSU4sIFBUVjJfT1VULCBQVFYyX0lOX1BVKSwKKwlQSU5NVVhfREFUQShQVFYxX0RBVEEsIFBUVjFfSU4sIFBUVjFfT1VULCBQVFYxX0lOX1BVKSwKKwlQSU5NVVhfREFUQShQVFYwX0RBVEEsIFBUVjBfSU4sIFBUVjBfT1VULCBQVFYwX0lOX1BVKSwKKworCS8qIFBUQSBGTiAqLworCVBJTk1VWF9EQVRBKEQyM19NQVJLLCBQVEE3X0ZOKSwKKwlQSU5NVVhfREFUQShEMjJfTUFSSywgUFRBNl9GTiksCisJUElOTVVYX0RBVEEoRDIxX01BUkssIFBUQTVfRk4pLAorCVBJTk1VWF9EQVRBKEQyMF9NQVJLLCBQVEE0X0ZOKSwKKwlQSU5NVVhfREFUQShEMTlfTUFSSywgUFRBM19GTiksCisJUElOTVVYX0RBVEEoRDE4X01BUkssIFBUQTJfRk4pLAorCVBJTk1VWF9EQVRBKEQxN19NQVJLLCBQVEExX0ZOKSwKKwlQSU5NVVhfREFUQShEMTZfTUFSSywgUFRBMF9GTiksCisKKwkvKiBQVEIgRk4gKi8KKwlQSU5NVVhfREFUQShEMzFfTUFSSywgUFRCN19GTiksCisJUElOTVVYX0RBVEEoRDMwX01BUkssIFBUQjZfRk4pLAorCVBJTk1VWF9EQVRBKEQyOV9NQVJLLCBQVEI1X0ZOKSwKKwlQSU5NVVhfREFUQShEMjhfTUFSSywgUFRCNF9GTiksCisJUElOTVVYX0RBVEEoRDI3X01BUkssIFBUQjNfRk4pLAorCVBJTk1VWF9EQVRBKEQyNl9NQVJLLCBQVEIyX0ZOKSwKKwlQSU5NVVhfREFUQShEMjVfTUFSSywgUFRCMV9GTiksCisJUElOTVVYX0RBVEEoRDI0X01BUkssIFBUQjBfRk4pLAorCisJLyogUFRDIEZOICovCisJUElOTVVYX0RBVEEoTENEX0RBVEE3X01BUkssIFBUQzdfRk4pLAorCVBJTk1VWF9EQVRBKExDRF9EQVRBNl9NQVJLLCBQVEM2X0ZOKSwKKwlQSU5NVVhfREFUQShMQ0RfREFUQTVfTUFSSywgUFRDNV9GTiksCisJUElOTVVYX0RBVEEoTENEX0RBVEE0X01BUkssIFBUQzRfRk4pLAorCVBJTk1VWF9EQVRBKExDRF9EQVRBM19NQVJLLCBQVEMzX0ZOKSwKKwlQSU5NVVhfREFUQShMQ0RfREFUQTJfTUFSSywgUFRDMl9GTiksCisJUElOTVVYX0RBVEEoTENEX0RBVEExX01BUkssIFBUQzFfRk4pLAorCVBJTk1VWF9EQVRBKExDRF9EQVRBMF9NQVJLLCBQVEMwX0ZOKSwKKworCS8qIFBURCBGTiAqLworCVBJTk1VWF9EQVRBKExDRF9EQVRBMTVfTUFSSywgUFREN19GTiksCisJUElOTVVYX0RBVEEoTENEX0RBVEExNF9NQVJLLCBQVEQ2X0ZOKSwKKwlQSU5NVVhfREFUQShMQ0RfREFUQTEzX01BUkssIFBURDVfRk4pLAorCVBJTk1VWF9EQVRBKExDRF9EQVRBMTJfTUFSSywgUFRENF9GTiksCisJUElOTVVYX0RBVEEoTENEX0RBVEExMV9NQVJLLCBQVEQzX0ZOKSwKKwlQSU5NVVhfREFUQShMQ0RfREFUQTEwX01BUkssIFBURDJfRk4pLAorCVBJTk1VWF9EQVRBKExDRF9EQVRBOV9NQVJLLCBQVEQxX0ZOKSwKKwlQSU5NVVhfREFUQShMQ0RfREFUQThfTUFSSywgUFREMF9GTiksCisKKwkvKiBQVEUgRk4gKi8KKwlQSU5NVVhfREFUQShJSUNfU0NMX01BUkssIFBTRUxCXzlfOF8wMCwgUFRFNl9GTiksCisJUElOTVVYX0RBVEEoQUZFX1JYSU5fTUFSSywgUFNFTEJfOV84XzExLCBQVEU2X0ZOKSwKKwlQSU5NVVhfREFUQShJSUNfU0RBX01BUkssIFBTRUxCXzlfOF8wMCwgUFRFNV9GTiksCisJUElOTVVYX0RBVEEoQUZFX1JERVRfTUFSSywgUFNFTEJfOV84XzExLCBQVEU1X0ZOKSwKKwlQSU5NVVhfREFUQShMQ0RfTV9ESVNQX01BUkssIFBURTRfRk4pLAorCVBJTk1VWF9EQVRBKExDRF9DTDFfTUFSSywgUFRFM19GTiksCisJUElOTVVYX0RBVEEoTENEX0NMMl9NQVJLLCBQVEUyX0ZOKSwKKwlQSU5NVVhfREFUQShMQ0RfRE9OX01BUkssIFBURTFfRk4pLAorCVBJTk1VWF9EQVRBKExDRF9GTE1fTUFSSywgUFRFMF9GTiksCisKKwkvKiBQVEYgRk4gKi8KKwlQSU5NVVhfREFUQShEQTFfTUFSSywgUFRGNl9GTiksCisJUElOTVVYX0RBVEEoREEwX01BUkssIFBURjVfRk4pLAorCVBJTk1VWF9EQVRBKEFOM19NQVJLLCBQVEY0X0ZOKSwKKwlQSU5NVVhfREFUQShBTjJfTUFSSywgUFRGM19GTiksCisJUElOTVVYX0RBVEEoQU4xX01BUkssIFBURjJfRk4pLAorCVBJTk1VWF9EQVRBKEFOMF9NQVJLLCBQVEYxX0ZOKSwKKwlQSU5NVVhfREFUQShBRFRSR19NQVJLLCBQVEYwX0ZOKSwKKworCS8qIFBURyBGTiAqLworCVBJTk1VWF9EQVRBKFVTQjFEX1JDVl9NQVJLLCBQU0VMQV8zXzJfMDAsIFBURzZfRk4pLAorCVBJTk1VWF9EQVRBKEFGRV9GU19NQVJLLCBQU0VMQV8zXzJfMDEsIFBURzZfRk4pLAorCVBJTk1VWF9EQVRBKFBDQ19SRUdfTUFSSywgUFNFTEFfM18yXzEwLCBQVEc2X0ZOKSwKKwlQSU5NVVhfREFUQShJUlE1X01BUkssIFBTRUxBXzNfMl8xMSwgUFRHNl9GTiksCisJUElOTVVYX0RBVEEoVVNCMURfVFhTRTBfTUFSSywgUFNFTEFfNV80XzAwLCBQVEc1X0ZOKSwKKwlQSU5NVVhfREFUQShBRkVfVFhPVVRfTUFSSywgUFNFTEFfNV80XzAxLCBQVEc1X0ZOKSwKKwlQSU5NVVhfREFUQShQQ0NfRFJWX01BUkssIFBTRUxBXzVfNF8xMCwgUFRHNV9GTiksCisJUElOTVVYX0RBVEEoSVJRNF9NQVJLLCBQU0VMQV81XzRfMTEsIFBURzVfRk4pLAorCVBJTk1VWF9EQVRBKFVTQjFEX1RYRFBMU19NQVJLLCBQU0VMQV83XzZfMDAsIFBURzRfRk4pLAorCVBJTk1VWF9EQVRBKEFGRV9TQ0xLX01BUkssIFBTRUxBXzdfNl8wMSwgUFRHNF9GTiksCisJUElOTVVYX0RBVEEoSU9JUzE2X01BUkssIFBTRUxBXzdfNl8xMCwgUFRHNF9GTiksCisJUElOTVVYX0RBVEEoVVNCMURfRE1OU19NQVJLLCBQU0VMQV85XzhfMDAsIFBURzNfRk4pLAorCVBJTk1VWF9EQVRBKEFGRV9STFlDTlRfTUFSSywgUFNFTEFfOV84XzAxLCBQVEczX0ZOKSwKKwlQSU5NVVhfREFUQShQQ0NfQlZEMl9NQVJLLCBQU0VMQV85XzhfMTAsIFBURzNfRk4pLAorCVBJTk1VWF9EQVRBKFVTQjFEX0RQTFNfTUFSSywgUFNFTEFfMTFfMTBfMDAsIFBURzJfRk4pLAorCVBJTk1VWF9EQVRBKEFGRV9IQzFfTUFSSywgUFNFTEFfMTFfMTBfMDEsIFBURzJfRk4pLAorCVBJTk1VWF9EQVRBKFBDQ19CVkQxX01BUkssIFBTRUxBXzExXzEwXzEwLCBQVEcyX0ZOKSwKKwlQSU5NVVhfREFUQShVU0IxRF9TUEVFRF9NQVJLLCBQU0VMQV8xM18xMl8wMCwgUFRHMV9GTiksCisJUElOTVVYX0RBVEEoUENDX0NEMl9NQVJLLCBQU0VMQV8xM18xMl8xMCwgUFRHMV9GTiksCisJUElOTVVYX0RBVEEoVVNCMURfVFhFTkxfTUFSSywgUFNFTEFfMTVfMTRfMDAsIFBURzBfRk4pLAorCVBJTk1VWF9EQVRBKFBDQ19DRDFfTUFSSywgUFNFTEFfMTVfMTRfMTAsIFBURzBfRk4pLAorCisJLyogUFRIIEZOICovCisJUElOTVVYX0RBVEEoUkFTX01BUkssIFBUSDZfRk4pLAorCVBJTk1VWF9EQVRBKENBU19NQVJLLCBQVEg1X0ZOKSwKKwlQSU5NVVhfREFUQShDS0VfTUFSSywgUFRINF9GTiksCisJUElOTVVYX0RBVEEoU1RBVFVTMV9NQVJLLCBQVEgzX0ZOKSwKKwlQSU5NVVhfREFUQShTVEFUVVMwX01BUkssIFBUSDJfRk4pLAorCVBJTk1VWF9EQVRBKFVTQjJfUFdSX0VOX01BUkssIFBUSDFfRk4pLAorCVBJTk1VWF9EQVRBKFVTQjFfUFdSX0VOX1VTQkZfVVBMVVBfTUFSSywgUFRIMF9GTiksCisKKwkvKiBQVEogRk4gKi8KKwlQSU5NVVhfREFUQShBVURDS19NQVJLLCBQVEo2X0ZOKSwKKwlQSU5NVVhfREFUQShBU0VCUktBS19NQVJLLCBQVEo1X0ZOKSwKKwlQSU5NVVhfREFUQShBVURBVEEzX01BUkssIFBUSjRfRk4pLAorCVBJTk1VWF9EQVRBKEFVREFUQTJfTUFSSywgUFRKM19GTiksCisJUElOTVVYX0RBVEEoQVVEQVRBMV9NQVJLLCBQVEoyX0ZOKSwKKwlQSU5NVVhfREFUQShBVURBVEEwX01BUkssIFBUSjFfRk4pLAorCVBJTk1VWF9EQVRBKEFVRFNZTkNfTUFSSywgUFRKMF9GTiksCisKKwkvKiBQVEsgRk4gKi8KKwlQSU5NVVhfREFUQShQQ0NfUkVTRVRfTUFSSywgUFRLM19GTiksCisJUElOTVVYX0RBVEEoUENDX1JEWV9NQVJLLCBQVEsyX0ZOKSwKKwlQSU5NVVhfREFUQShQQ0NfVlMyX01BUkssIFBUSzFfRk4pLAorCVBJTk1VWF9EQVRBKFBDQ19WUzFfTUFSSywgUFRLMF9GTiksCisKKwkvKiBQVEwgRk4gKi8KKwlQSU5NVVhfREFUQShUUlNUX01BUkssIFBUTDdfRk4pLAorCVBJTk1VWF9EQVRBKFRNU19NQVJLLCBQVEw2X0ZOKSwKKwlQSU5NVVhfREFUQShURE9fTUFSSywgUFRMNV9GTiksCisJUElOTVVYX0RBVEEoVERJX01BUkssIFBUTDRfRk4pLAorCVBJTk1VWF9EQVRBKFRDS19NQVJLLCBQVEwzX0ZOKSwKKworCS8qIFBUTSBGTiAqLworCVBJTk1VWF9EQVRBKERSRVExX01BUkssIFBUTTdfRk4pLAorCVBJTk1VWF9EQVRBKERSRVEwX01BUkssIFBUTTZfRk4pLAorCVBJTk1VWF9EQVRBKERBQ0sxX01BUkssIFBUTTVfRk4pLAorCVBJTk1VWF9EQVRBKERBQ0swX01BUkssIFBUTTRfRk4pLAorCVBJTk1VWF9EQVRBKFRFTkQxX01BUkssIFBUTTNfRk4pLAorCVBJTk1VWF9EQVRBKFRFTkQwX01BUkssIFBUTTJfRk4pLAorCVBJTk1VWF9EQVRBKENTNUJfQ0UxQV9NQVJLLCBQVE0xX0ZOKSwKKwlQSU5NVVhfREFUQShDUzZCX0NFMUJfTUFSSywgUFRNMF9GTiksCisKKwkvKiBQVFAgRk4gKi8KKwlQSU5NVVhfREFUQShVU0IxRF9TVVNQRU5EX01BUkssIFBTRUxBXzFfMF8wMCwgUFRQNF9GTiksCisJUElOTVVYX0RBVEEoUkVGT1VUX01BUkssIFBTRUxBXzFfMF8wMSwgUFRQNF9GTiksCisJUElOTVVYX0RBVEEoSVJRT1VUX01BUkssIFBTRUxBXzFfMF8xMCwgUFRQNF9GTiksCisJUElOTVVYX0RBVEEoSVJRM19JUkwzX01BUkssIFBUUDNfRk4pLAorCVBJTk1VWF9EQVRBKElSUTJfSVJMMl9NQVJLLCBQVFAyX0ZOKSwKKwlQSU5NVVhfREFUQShJUlExX0lSTDFfTUFSSywgUFRQMV9GTiksCisJUElOTVVYX0RBVEEoSVJRMF9JUkwwX01BUkssIFBUUDBfRk4pLAorCisJLyogUFRSIEZOICovCisJUElOTVVYX0RBVEEoQTI1X01BUkssIFBUUjdfRk4pLAorCVBJTk1VWF9EQVRBKEEyNF9NQVJLLCBQVFI2X0ZOKSwKKwlQSU5NVVhfREFUQShBMjNfTUFSSywgUFRSNV9GTiksCisJUElOTVVYX0RBVEEoQTIyX01BUkssIFBUUjRfRk4pLAorCVBJTk1VWF9EQVRBKEEyMV9NQVJLLCBQVFIzX0ZOKSwKKwlQSU5NVVhfREFUQShBMjBfTUFSSywgUFRSMl9GTiksCisJUElOTVVYX0RBVEEoQTE5X01BUkssIFBUUjFfRk4pLAorCVBJTk1VWF9EQVRBKEEwX01BUkssIFBUUjBfRk4pLAorCisJLyogUFRTIEZOICovCisJUElOTVVYX0RBVEEoU0lPRjBfU1lOQ19NQVJLLCBQVFM0X0ZOKSwKKwlQSU5NVVhfREFUQShTSU9GMF9NQ0xLX01BUkssIFBUUzNfRk4pLAorCVBJTk1VWF9EQVRBKFNJT0YwX1RYRF9NQVJLLCBQVFMyX0ZOKSwKKwlQSU5NVVhfREFUQShTSU9GMF9SWERfTUFSSywgUFRTMV9GTiksCisJUElOTVVYX0RBVEEoU0lPRjBfU0NLX01BUkssIFBUUzBfRk4pLAorCisJLyogUFRUIEZOICovCisJUElOTVVYX0RBVEEoU0NJRjBfQ1RTX01BUkssIFBTRUxCXzE1XzE0XzAwLCBQVFQ0X0ZOKSwKKwlQSU5NVVhfREFUQShUUFVfVE8xX01BUkssIFBTRUxCXzE1XzE0XzExLCBQVFQ0X0ZOKSwKKwlQSU5NVVhfREFUQShTQ0lGMF9SVFNfTUFSSywgUFNFTEJfMTVfMTRfMDAsIFBUVDNfRk4pLAorCVBJTk1VWF9EQVRBKFRQVV9UTzBfTUFSSywgUFNFTEJfMTVfMTRfMTEsIFBUVDNfRk4pLAorCVBJTk1VWF9EQVRBKFNDSUYwX1RYRF9NQVJLLCBQVFQyX0ZOKSwKKwlQSU5NVVhfREFUQShTQ0lGMF9SWERfTUFSSywgUFRUMV9GTiksCisJUElOTVVYX0RBVEEoU0NJRjBfU0NLX01BUkssIFBUVDBfRk4pLAorCisJLyogUFRVIEZOICovCisJUElOTVVYX0RBVEEoU0lPRjFfU1lOQ19NQVJLLCBQVFU0X0ZOKSwKKwlQSU5NVVhfREFUQShTSU9GMV9NQ0xLX01BUkssIFBTRUxEXzExXzEwXzAwLCBQVFUzX0ZOKSwKKwlQSU5NVVhfREFUQShUUFVfVEkzQl9NQVJLLCBQU0VMRF8xMV8xMF8wMSwgUFRVM19GTiksCisJUElOTVVYX0RBVEEoU0lPRjFfVFhEX01BUkssIFBTRUxEXzE1XzE0XzAwLCBQVFUyX0ZOKSwKKwlQSU5NVVhfREFUQShUUFVfVEkzQV9NQVJLLCBQU0VMRF8xNV8xNF8wMSwgUFRVMl9GTiksCisJUElOTVVYX0RBVEEoTU1DX0RBVF9NQVJLLCBQU0VMRF8xNV8xNF8xMCwgUFRVMl9GTiksCisJUElOTVVYX0RBVEEoU0lPRjFfUlhEX01BUkssIFBTRUxDXzEzXzEyXzAwLCBQVFUxX0ZOKSwKKwlQSU5NVVhfREFUQShUUFVfVEkyQl9NQVJLLCBQU0VMQ18xM18xMl8wMSwgUFRVMV9GTiksCisJUElOTVVYX0RBVEEoTU1DX0NNRF9NQVJLLCBQU0VMQ18xM18xMl8xMCwgUFRVMV9GTiksCisJUElOTVVYX0RBVEEoU0lPRjFfU0NLX01BUkssIFBTRUxDXzE1XzE0XzAwLCBQVFUwX0ZOKSwKKwlQSU5NVVhfREFUQShUUFVfVEkyQV9NQVJLLCBQU0VMQ18xNV8xNF8wMSwgUFRVMF9GTiksCisJUElOTVVYX0RBVEEoTU1DX0NMS19NQVJLLCBQU0VMQ18xNV8xNF8xMCwgUFRVMF9GTiksCisKKwkvKiBQVFYgRk4gKi8KKwlQSU5NVVhfREFUQShTQ0lGMV9DVFNfTUFSSywgUFNFTEJfMTFfMTBfMDAsIFBUVjRfRk4pLAorCVBJTk1VWF9EQVRBKFRQVV9UTzNfTUFSSywgUFNFTEJfMTFfMTBfMDEsIFBUVjRfRk4pLAorCVBJTk1VWF9EQVRBKE1NQ19WRERPTl9NQVJLLCBQU0VMQl8xMV8xMF8xMCwgUFRWNF9GTiksCisJUElOTVVYX0RBVEEoTENEX1ZFUFdDX01BUkssIFBTRUxCXzExXzEwXzExLCBQVFY0X0ZOKSwKKwlQSU5NVVhfREFUQShTQ0lGMV9SVFNfTUFSSywgUFNFTEJfMTNfMTJfMDAsIFBUVjNfRk4pLAorCVBJTk1VWF9EQVRBKFRQVV9UTzJfTUFSSywgUFNFTEJfMTNfMTJfMDEsIFBUVjNfRk4pLAorCVBJTk1VWF9EQVRBKE1NQ19PRE1PRF9NQVJLLCBQU0VMQl8xM18xMl8xMCwgUFRWM19GTiksCisJUElOTVVYX0RBVEEoTENEX1ZDUFdDX01BUkssIFBTRUxCXzEzXzEyXzExLCBQVFYzX0ZOKSwKKwlQSU5NVVhfREFUQShTQ0lGMV9UWERfTUFSSywgUFNFTENfOV84XzAwLCBQVFYyX0ZOKSwKKwlQSU5NVVhfREFUQShTSU1fRF9NQVJLLCBQU0VMQ185XzhfMTAsIFBUVjJfRk4pLAorCVBJTk1VWF9EQVRBKFNDSUYxX1JYRF9NQVJLLCBQU0VMQ18xMV8xMF8wMCwgUFRWMV9GTiksCisJUElOTVVYX0RBVEEoU0lNX1JTVF9NQVJLLCBQU0VMQ18xMV8xMF8xMCwgUFRWMV9GTiksCisJUElOTVVYX0RBVEEoU0NJRjFfU0NLX01BUkssIFBTRUxEXzFfMF8wMCwgUFRWMF9GTiksCisJUElOTVVYX0RBVEEoU0lNX0NMS19NQVJLLCBQU0VMRF8xXzBfMTAsIFBUVjBfRk4pLAorfTsKKworc3RhdGljIHN0cnVjdCBwaW5tdXhfZ3BpbyBwaW5tdXhfZ3Bpb3NbXSA9IHsKKwkvKiBQVEEgKi8KKwlQSU5NVVhfR1BJTyhHUElPX1BUQTcsIFBUQTdfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEE2LCBQVEE2X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRBNSwgUFRBNV9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUQTQsIFBUQTRfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEEzLCBQVEEzX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRBMiwgUFRBMl9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUQTEsIFBUQTFfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEEwLCBQVEEwX0RBVEEpLAorCisJLyogUFRCICovCisJUElOTVVYX0dQSU8oR1BJT19QVEI3LCBQVEI3X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRCNiwgUFRCNl9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUQjUsIFBUQjVfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEI0LCBQVEI0X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRCMywgUFRCM19EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUQjIsIFBUQjJfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEIxLCBQVEIxX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRCMCwgUFRCMF9EQVRBKSwKKworCS8qIFBUQyAqLworCVBJTk1VWF9HUElPKEdQSU9fUFRDNywgUFRDN19EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUQzYsIFBUQzZfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEM1LCBQVEM1X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRDNCwgUFRDNF9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUQzMsIFBUQzNfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEMyLCBQVEMyX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRDMSwgUFRDMV9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUQzAsIFBUQzBfREFUQSksCisKKwkvKiBQVEQgKi8KKwlQSU5NVVhfR1BJTyhHUElPX1BURDcsIFBURDdfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEQ2LCBQVEQ2X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRENSwgUFRENV9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BURDQsIFBURDRfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEQzLCBQVEQzX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFREMiwgUFREMl9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BURDEsIFBURDFfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEQwLCBQVEQwX0RBVEEpLAorCisJLyogUFRFICovCisJUElOTVVYX0dQSU8oR1BJT19QVEU2LCBQVEU2X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRFNSwgUFRFNV9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BURTQsIFBURTRfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEUzLCBQVEUzX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRFMiwgUFRFMl9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BURTEsIFBURTFfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEUwLCBQVEUwX0RBVEEpLAorCisJLyogUFRGICovCisJUElOTVVYX0dQSU8oR1BJT19QVEY2LCBQVEY2X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRGNSwgUFRGNV9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BURjQsIFBURjRfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEYzLCBQVEYzX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRGMiwgUFRGMl9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BURjEsIFBURjFfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEYwLCBQVEYwX0RBVEEpLAorCisJLyogUFRHICovCisJUElOTVVYX0dQSU8oR1BJT19QVEc2LCBQVEc2X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRHNSwgUFRHNV9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BURzQsIFBURzRfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEczLCBQVEczX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRHMiwgUFRHMl9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BURzEsIFBURzFfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEcwLCBQVEcwX0RBVEEpLAorCisJLyogUFRIICovCisJUElOTVVYX0dQSU8oR1BJT19QVEg2LCBQVEg2X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRINSwgUFRINV9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUSDQsIFBUSDRfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEgzLCBQVEgzX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRIMiwgUFRIMl9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUSDEsIFBUSDFfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEgwLCBQVEgwX0RBVEEpLAorCisJLyogUFRKICovCisJUElOTVVYX0dQSU8oR1BJT19QVEo2LCBQVEo2X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRKNSwgUFRKNV9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUSjQsIFBUSjRfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEozLCBQVEozX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRKMiwgUFRKMl9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUSjEsIFBUSjFfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEowLCBQVEowX0RBVEEpLAorCisJLyogUFRLICovCisJUElOTVVYX0dQSU8oR1BJT19QVEszLCBQVEszX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRLMiwgUFRLMl9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUSzEsIFBUSzFfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEswLCBQVEswX0RBVEEpLAorCisJLyogUFRMICovCisJUElOTVVYX0dQSU8oR1BJT19QVEw3LCBQVEw3X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRMNiwgUFRMNl9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUTDUsIFBUTDVfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEw0LCBQVEw0X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRMMywgUFRMM19EQVRBKSwKKworCS8qIFBUTSAqLworCVBJTk1VWF9HUElPKEdQSU9fUFRNNywgUFRNN19EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUTTYsIFBUTTZfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVE01LCBQVE01X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRNNCwgUFRNNF9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUTTMsIFBUTTNfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVE0yLCBQVE0yX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRNMSwgUFRNMV9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUTTAsIFBUTTBfREFUQSksCisKKwkvKiBQVFAgKi8KKwlQSU5NVVhfR1BJTyhHUElPX1BUUDQsIFBUUDRfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVFAzLCBQVFAzX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRQMiwgUFRQMl9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUUDEsIFBUUDFfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVFAwLCBQVFAwX0RBVEEpLAorCisJLyogUFRSICovCisJUElOTVVYX0dQSU8oR1BJT19QVFI3LCBQVFI3X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRSNiwgUFRSNl9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUUjUsIFBUUjVfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVFI0LCBQVFI0X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRSMywgUFRSM19EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUUjIsIFBUUjJfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVFIxLCBQVFIxX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRSMCwgUFRSMF9EQVRBKSwKKworCS8qIFBUUyAqLworCVBJTk1VWF9HUElPKEdQSU9fUFRTNCwgUFRTNF9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUUzMsIFBUUzNfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVFMyLCBQVFMyX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRTMSwgUFRTMV9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUUzAsIFBUUzBfREFUQSksCisKKwkvKiBQVFQgKi8KKwlQSU5NVVhfR1BJTyhHUElPX1BUVDQsIFBUVDRfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVFQzLCBQVFQzX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRUMiwgUFRUMl9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUVDEsIFBUVDFfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVFQwLCBQVFQwX0RBVEEpLAorCisJLyogUFRVICovCisJUElOTVVYX0dQSU8oR1BJT19QVFU0LCBQVFU0X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRVMywgUFRVM19EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUVTIsIFBUVTJfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVFUxLCBQVFUxX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRVMCwgUFRVMF9EQVRBKSwKKworCS8qIFBUViAqLworCVBJTk1VWF9HUElPKEdQSU9fUFRWNCwgUFRWNF9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUVjMsIFBUVjNfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVFYyLCBQVFYyX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRWMSwgUFRWMV9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUVjAsIFBUVjBfREFUQSksCisKKwkvKiBCU0MgKi8KKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0QzMSwgRDMxX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRDMwLCBEMzBfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9EMjksIEQyOV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0QyOCwgRDI4X01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRDI3LCBEMjdfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9EMjYsIEQyNl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0QyNSwgRDI1X01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRDI0LCBEMjRfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9EMjMsIEQyM19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0QyMiwgRDIyX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRDIxLCBEMjFfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9EMjAsIEQyMF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0QxOSwgRDE5X01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRDE4LCBEMThfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9EMTcsIEQxN19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0QxNiwgRDE2X01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fSU9JUzE2LCBJT0lTMTZfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9SQVMsIFJBU19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0NBUywgQ0FTX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fQ0tFLCBDS0VfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9DUzVCX0NFMUEsIENTNUJfQ0UxQV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0NTNkJfQ0UxQiwgQ1M2Ql9DRTFCX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fQTI1LCBBMjVfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9BMjQsIEEyNF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0EyMywgQTIzX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fQTIyLCBBMjJfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9BMjEsIEEyMV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0EyMCwgQTIwX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fQTE5LCBBMTlfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9BMCwgQTBfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9SRUZPVVQsIFJFRk9VVF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0lSUU9VVCwgSVJRT1VUX01BUkspLAorCisJLyogTENEQyAqLworCVBJTk1VWF9HUElPKEdQSU9fRk5fTENEX0RBVEExNSwgTENEX0RBVEExNV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0xDRF9EQVRBMTQsIExDRF9EQVRBMTRfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9MQ0RfREFUQTEzLCBMQ0RfREFUQTEzX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fTENEX0RBVEExMiwgTENEX0RBVEExMl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0xDRF9EQVRBMTEsIExDRF9EQVRBMTFfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9MQ0RfREFUQTEwLCBMQ0RfREFUQTEwX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fTENEX0RBVEE5LCBMQ0RfREFUQTlfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9MQ0RfREFUQTgsIExDRF9EQVRBOF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0xDRF9EQVRBNywgTENEX0RBVEE3X01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fTENEX0RBVEE2LCBMQ0RfREFUQTZfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9MQ0RfREFUQTUsIExDRF9EQVRBNV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0xDRF9EQVRBNCwgTENEX0RBVEE0X01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fTENEX0RBVEEzLCBMQ0RfREFUQTNfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9MQ0RfREFUQTIsIExDRF9EQVRBMl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0xDRF9EQVRBMSwgTENEX0RBVEExX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fTENEX0RBVEEwLCBMQ0RfREFUQTBfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9MQ0RfTV9ESVNQLCBMQ0RfTV9ESVNQX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fTENEX0NMMSwgTENEX0NMMV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0xDRF9DTDIsIExDRF9DTDJfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9MQ0RfRE9OLCBMQ0RfRE9OX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fTENEX0ZMTSwgTENEX0ZMTV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0xDRF9WRVBXQywgTENEX1ZFUFdDX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fTENEX1ZDUFdDLCBMQ0RfVkNQV0NfTUFSSyksCisKKwkvKiBBRkVJRiAqLworCVBJTk1VWF9HUElPKEdQSU9fRk5fQUZFX1JYSU4sIEFGRV9SWElOX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fQUZFX1JERVQsIEFGRV9SREVUX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fQUZFX0ZTLCBBRkVfRlNfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9BRkVfVFhPVVQsIEFGRV9UWE9VVF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0FGRV9TQ0xLLCBBRkVfU0NMS19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0FGRV9STFlDTlQsIEFGRV9STFlDTlRfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9BRkVfSEMxLCBBRkVfSEMxX01BUkspLAorCisJLyogSUlDICovCisJUElOTVVYX0dQSU8oR1BJT19GTl9JSUNfU0NMLCBJSUNfU0NMX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fSUlDX1NEQSwgSUlDX1NEQV9NQVJLKSwKKworCS8qIERBQyAqLworCVBJTk1VWF9HUElPKEdQSU9fRk5fREExLCBEQTFfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9EQTAsIERBMF9NQVJLKSwKKworCS8qIEFEQyAqLworCVBJTk1VWF9HUElPKEdQSU9fRk5fQU4zLCBBTjNfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9BTjIsIEFOMl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0FOMSwgQU4xX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fQU4wLCBBTjBfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9BRFRSRywgQURUUkdfTUFSSyksCisKKwkvKiBVU0IgKi8KKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1VTQjFEX1JDViwgVVNCMURfUkNWX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fVVNCMURfVFhTRTAsIFVTQjFEX1RYU0UwX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fVVNCMURfVFhEUExTLCBVU0IxRF9UWERQTFNfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9VU0IxRF9ETU5TLCBVU0IxRF9ETU5TX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fVVNCMURfRFBMUywgVVNCMURfRFBMU19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1VTQjFEX1NQRUVELCBVU0IxRF9TUEVFRF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1VTQjFEX1RYRU5MLCBVU0IxRF9UWEVOTF9NQVJLKSwKKworCVBJTk1VWF9HUElPKEdQSU9fRk5fVVNCMl9QV1JfRU4sIFVTQjJfUFdSX0VOX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fVVNCMV9QV1JfRU5fVVNCRl9VUExVUCwKKwkJICAgIFVTQjFfUFdSX0VOX1VTQkZfVVBMVVBfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9VU0IxRF9TVVNQRU5ELCBVU0IxRF9TVVNQRU5EX01BUkspLAorCisJLyogSU5UQyAqLworCVBJTk1VWF9HUElPKEdQSU9fRk5fSVJRNSwgSVJRNV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0lSUTQsIElSUTRfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9JUlEzX0lSTDMsIElSUTNfSVJMM19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0lSUTJfSVJMMiwgSVJRMl9JUkwyX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fSVJRMV9JUkwxLCBJUlExX0lSTDFfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9JUlEwX0lSTDAsIElSUTBfSVJMMF9NQVJLKSwKKworCS8qIFBDQyAqLworCVBJTk1VWF9HUElPKEdQSU9fRk5fUENDX1JFRywgUENDX1JFR19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1BDQ19EUlYsIFBDQ19EUlZfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9QQ0NfQlZEMiwgUENDX0JWRDJfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9QQ0NfQlZEMSwgUENDX0JWRDFfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9QQ0NfQ0QyLCBQQ0NfQ0QyX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fUENDX0NEMSwgUENDX0NEMV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1BDQ19SRVNFVCwgUENDX1JFU0VUX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fUENDX1JEWSwgUENDX1JEWV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1BDQ19WUzIsIFBDQ19WUzJfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9QQ0NfVlMxLCBQQ0NfVlMxX01BUkspLAorCisJLyogSFVESSAqLworCVBJTk1VWF9HUElPKEdQSU9fRk5fQVVEQVRBMywgQVVEQVRBM19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0FVREFUQTIsIEFVREFUQTJfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9BVURBVEExLCBBVURBVEExX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fQVVEQVRBMCwgQVVEQVRBMF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0FVRENLLCBBVURDS19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0FVRFNZTkMsIEFVRFNZTkNfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9BU0VCUktBSywgQVNFQlJLQUtfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9UUlNULCBUUlNUX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fVE1TLCBUTVNfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9URE8sIFRET19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1RESSwgVERJX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fVENLLCBUQ0tfTUFSSyksCisKKwkvKiBETUFDICovCisJUElOTVVYX0dQSU8oR1BJT19GTl9EQUNLMSwgREFDSzFfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9EUkVRMSwgRFJFUTFfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9EQUNLMCwgREFDSzBfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9EUkVRMCwgRFJFUTBfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9URU5EMSwgVEVORDFfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9URU5EMCwgVEVORDBfTUFSSyksCisKKwkvKiBTSU9GMCAqLworCVBJTk1VWF9HUElPKEdQSU9fRk5fU0lPRjBfU1lOQywgU0lPRjBfU1lOQ19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NJT0YwX01DTEssIFNJT0YwX01DTEtfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TSU9GMF9UWEQsIFNJT0YwX1RYRF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NJT0YwX1JYRCwgU0lPRjBfUlhEX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0lPRjBfU0NLLCBTSU9GMF9TQ0tfTUFSSyksCisKKwkvKiBTSU9GMSAqLworCVBJTk1VWF9HUElPKEdQSU9fRk5fU0lPRjFfU1lOQywgU0lPRjFfU1lOQ19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NJT0YxX01DTEssIFNJT0YxX01DTEtfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TSU9GMV9UWEQsIFNJT0YxX1RYRF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NJT0YxX1JYRCwgU0lPRjFfUlhEX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0lPRjFfU0NLLCBTSU9GMV9TQ0tfTUFSSyksCisKKwkvKiBTQ0lGMCAqLworCVBJTk1VWF9HUElPKEdQSU9fRk5fU0NJRjBfVFhELCBTQ0lGMF9UWERfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TQ0lGMF9SWEQsIFNDSUYwX1JYRF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NDSUYwX1JUUywgU0NJRjBfUlRTX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0NJRjBfQ1RTLCBTQ0lGMF9DVFNfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TQ0lGMF9TQ0ssIFNDSUYwX1NDS19NQVJLKSwKKworCS8qIFNDSUYxICovCisJUElOTVVYX0dQSU8oR1BJT19GTl9TQ0lGMV9UWEQsIFNDSUYxX1RYRF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NDSUYxX1JYRCwgU0NJRjFfUlhEX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0NJRjFfUlRTLCBTQ0lGMV9SVFNfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TQ0lGMV9DVFMsIFNDSUYxX0NUU19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NDSUYxX1NDSywgU0NJRjFfU0NLX01BUkspLAorCisJLyogVFBVICovCisJUElOTVVYX0dQSU8oR1BJT19GTl9UUFVfVE8xLCBUUFVfVE8xX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fVFBVX1RPMCwgVFBVX1RPMF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1RQVV9USTNCLCBUUFVfVEkzQl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1RQVV9USTNBLCBUUFVfVEkzQV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1RQVV9USTJCLCBUUFVfVEkyQl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1RQVV9USTJBLCBUUFVfVEkyQV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1RQVV9UTzMsIFRQVV9UTzNfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9UUFVfVE8yLCBUUFVfVE8yX01BUkspLAorCisJLyogU0lNICovCisJUElOTVVYX0dQSU8oR1BJT19GTl9TSU1fRCwgU0lNX0RfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TSU1fQ0xLLCBTSU1fQ0xLX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0lNX1JTVCwgU0lNX1JTVF9NQVJLKSwKKworCS8qIE1NQyAqLworCVBJTk1VWF9HUElPKEdQSU9fRk5fTU1DX0RBVCwgTU1DX0RBVF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX01NQ19DTUQsIE1NQ19DTURfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9NTUNfQ0xLLCBNTUNfQ0xLX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fTU1DX1ZERE9OLCBNTUNfVkRET05fTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9NTUNfT0RNT0QsIE1NQ19PRE1PRF9NQVJLKSwKKworCS8qIFNZU0MgKi8KKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NUQVRVUzAsIFNUQVRVUzBfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TVEFUVVMxLCBTVEFUVVMxX01BUkspLAorfTsKKworc3RhdGljIHN0cnVjdCBwaW5tdXhfY2ZnX3JlZyBwaW5tdXhfY29uZmlnX3JlZ3NbXSA9IHsKKwl7IFBJTk1VWF9DRkdfUkVHKCJQQUNSIiwgMHhhNDA1MDEwMCwgMTYsIDIpIHsKKwkJUFRBN19GTiwgUFRBN19PVVQsIFBUQTdfSU5fUFUsIFBUQTdfSU4sCisJCVBUQTZfRk4sIFBUQTZfT1VULCBQVEE2X0lOX1BVLCBQVEE2X0lOLAorCQlQVEE1X0ZOLCBQVEE1X09VVCwgUFRBNV9JTl9QVSwgUFRBNV9JTiwKKwkJUFRBNF9GTiwgUFRBNF9PVVQsIFBUQTRfSU5fUFUsIFBUQTRfSU4sCisJCVBUQTNfRk4sIFBUQTNfT1VULCBQVEEzX0lOX1BVLCBQVEEzX0lOLAorCQlQVEEyX0ZOLCBQVEEyX09VVCwgUFRBMl9JTl9QVSwgUFRBMl9JTiwKKwkJUFRBMV9GTiwgUFRBMV9PVVQsIFBUQTFfSU5fUFUsIFBUQTFfSU4sCisJCVBUQTBfRk4sIFBUQTBfT1VULCBQVEEwX0lOX1BVLCBQVEEwX0lOIH0KKwl9LAorCXsgUElOTVVYX0NGR19SRUcoIlBCQ1IiLCAweGE0MDUwMTAyLCAxNiwgMikgeworCQlQVEI3X0ZOLCBQVEI3X09VVCwgUFRCN19JTl9QVSwgUFRCN19JTiwKKwkJUFRCNl9GTiwgUFRCNl9PVVQsIFBUQjZfSU5fUFUsIFBUQjZfSU4sCisJCVBUQjVfRk4sIFBUQjVfT1VULCBQVEI1X0lOX1BVLCBQVEI1X0lOLAorCQlQVEI0X0ZOLCBQVEI0X09VVCwgUFRCNF9JTl9QVSwgUFRCNF9JTiwKKwkJUFRCM19GTiwgUFRCM19PVVQsIFBUQjNfSU5fUFUsIFBUQjNfSU4sCisJCVBUQjJfRk4sIFBUQjJfT1VULCBQVEIyX0lOX1BVLCBQVEIyX0lOLAorCQlQVEIxX0ZOLCBQVEIxX09VVCwgUFRCMV9JTl9QVSwgUFRCMV9JTiwKKwkJUFRCMF9GTiwgUFRCMF9PVVQsIFBUQjBfSU5fUFUsIFBUQjBfSU4gfQorCX0sCisJeyBQSU5NVVhfQ0ZHX1JFRygiUENDUiIsIDB4YTQwNTAxMDQsIDE2LCAyKSB7CisJCVBUQzdfRk4sIFBUQzdfT1VULCBQVEM3X0lOX1BVLCBQVEM3X0lOLAorCQlQVEM2X0ZOLCBQVEM2X09VVCwgUFRDNl9JTl9QVSwgUFRDNl9JTiwKKwkJUFRDNV9GTiwgUFRDNV9PVVQsIFBUQzVfSU5fUFUsIFBUQzVfSU4sCisJCVBUQzRfRk4sIFBUQzRfT1VULCBQVEM0X0lOX1BVLCBQVEM0X0lOLAorCQlQVEMzX0ZOLCBQVEMzX09VVCwgUFRDM19JTl9QVSwgUFRDM19JTiwKKwkJUFRDMl9GTiwgUFRDMl9PVVQsIFBUQzJfSU5fUFUsIFBUQzJfSU4sCisJCVBUQzFfRk4sIFBUQzFfT1VULCBQVEMxX0lOX1BVLCBQVEMxX0lOLAorCQlQVEMwX0ZOLCBQVEMwX09VVCwgUFRDMF9JTl9QVSwgUFRDMF9JTiB9CisJfSwKKwl7IFBJTk1VWF9DRkdfUkVHKCJQRENSIiwgMHhhNDA1MDEwNiwgMTYsIDIpIHsKKwkJUFREN19GTiwgUFREN19PVVQsIFBURDdfSU5fUFUsIFBURDdfSU4sCisJCVBURDZfRk4sIFBURDZfT1VULCBQVEQ2X0lOX1BVLCBQVEQ2X0lOLAorCQlQVEQ1X0ZOLCBQVEQ1X09VVCwgUFRENV9JTl9QVSwgUFRENV9JTiwKKwkJUFRENF9GTiwgUFRENF9PVVQsIFBURDRfSU5fUFUsIFBURDRfSU4sCisJCVBURDNfRk4sIFBURDNfT1VULCBQVEQzX0lOX1BVLCBQVEQzX0lOLAorCQlQVEQyX0ZOLCBQVEQyX09VVCwgUFREMl9JTl9QVSwgUFREMl9JTiwKKwkJUFREMV9GTiwgUFREMV9PVVQsIFBURDFfSU5fUFUsIFBURDFfSU4sCisJCVBURDBfRk4sIFBURDBfT1VULCBQVEQwX0lOX1BVLCBQVEQwX0lOIH0KKwl9LAorCXsgUElOTVVYX0NGR19SRUcoIlBFQ1IiLCAweGE0MDUwMTA4LCAxNiwgMikgeworCQkwLCAwLCAwLCAwLAorCQlQVEU2X0ZOLCAwLCAwLCBQVEU2X0lOLAorCQlQVEU1X0ZOLCAwLCAwLCBQVEU1X0lOLAorCQlQVEU0X0ZOLCBQVEU0X09VVCwgUFRFNF9JTl9QVSwgUFRFNF9JTiwKKwkJUFRFM19GTiwgUFRFM19PVVQsIFBURTNfSU5fUFUsIFBURTNfSU4sCisJCVBURTJfRk4sIFBURTJfT1VULCBQVEUyX0lOX1BVLCBQVEUyX0lOLAorCQlQVEUxX0ZOLCBQVEUxX09VVCwgUFRFMV9JTl9QVSwgUFRFMV9JTiwKKwkJUFRFMF9GTiwgUFRFMF9PVVQsIFBURTBfSU5fUFUsIFBURTBfSU4gfQorCX0sCisJeyBQSU5NVVhfQ0ZHX1JFRygiUEZDUiIsIDB4YTQwNTAxMGEsIDE2LCAyKSB7CisJCTAsIDAsIDAsIDAsCisJCVBURjZfRk4sIDAsIDAsIFBURjZfSU4sCisJCVBURjVfRk4sIDAsIDAsIFBURjVfSU4sCisJCVBURjRfRk4sIDAsIDAsIFBURjRfSU4sCisJCVBURjNfRk4sIDAsIDAsIFBURjNfSU4sCisJCVBURjJfRk4sIDAsIDAsIFBURjJfSU4sCisJCVBURjFfRk4sIDAsIDAsIFBURjFfSU4sCisJCVBURjBfRk4sIDAsIDAsIFBURjBfSU4gfQorCX0sCisJeyBQSU5NVVhfQ0ZHX1JFRygiUEdDUiIsIDB4YTQwNTAxMGMsIDE2LCAyKSB7CisJCTAsIDAsIDAsIDAsCisJCVBURzZfRk4sIFBURzZfT1VULCBQVEc2X0lOX1BVLCBQVEc2X0lOLAorCQlQVEc1X0ZOLCBQVEc1X09VVCwgUFRHNV9JTl9QVSwgUFRHNV9JTiwKKwkJUFRHNF9GTiwgUFRHNF9PVVQsIFBURzRfSU5fUFUsIFBURzRfSU4sCisJCVBURzNfRk4sIFBURzNfT1VULCBQVEczX0lOX1BVLCBQVEczX0lOLAorCQlQVEcyX0ZOLCBQVEcyX09VVCwgUFRHMl9JTl9QVSwgUFRHMl9JTiwKKwkJUFRHMV9GTiwgUFRHMV9PVVQsIFBURzFfSU5fUFUsIFBURzFfSU4sCisJCVBURzBfRk4sIFBURzBfT1VULCBQVEcwX0lOX1BVLCBQVEcwX0lOIH0KKwl9LAorCXsgUElOTVVYX0NGR19SRUcoIlBIQ1IiLCAweGE0MDUwMTBlLCAxNiwgMikgeworCQkwLCAwLCAwLCAwLAorCQlQVEg2X0ZOLCBQVEg2X09VVCwgUFRINl9JTl9QVSwgUFRINl9JTiwKKwkJUFRINV9GTiwgUFRINV9PVVQsIFBUSDVfSU5fUFUsIFBUSDVfSU4sCisJCVBUSDRfRk4sIFBUSDRfT1VULCBQVEg0X0lOX1BVLCBQVEg0X0lOLAorCQlQVEgzX0ZOLCBQVEgzX09VVCwgUFRIM19JTl9QVSwgUFRIM19JTiwKKwkJUFRIMl9GTiwgUFRIMl9PVVQsIFBUSDJfSU5fUFUsIFBUSDJfSU4sCisJCVBUSDFfRk4sIFBUSDFfT1VULCBQVEgxX0lOX1BVLCBQVEgxX0lOLAorCQlQVEgwX0ZOLCBQVEgwX09VVCwgUFRIMF9JTl9QVSwgUFRIMF9JTiB9CisJfSwKKwl7IFBJTk1VWF9DRkdfUkVHKCJQSkNSIiwgMHhhNDA1MDExMCwgMTYsIDIpIHsKKwkJMCwgMCwgMCwgMCwKKwkJUFRKNl9GTiwgUFRKNl9PVVQsIFBUSjZfSU5fUFUsIFBUSjZfSU4sCisJCVBUSjVfRk4sIFBUSjVfT1VULCBQVEo1X0lOX1BVLCBQVEo1X0lOLAorCQlQVEo0X0ZOLCBQVEo0X09VVCwgUFRKNF9JTl9QVSwgUFRKNF9JTiwKKwkJUFRKM19GTiwgUFRKM19PVVQsIFBUSjNfSU5fUFUsIFBUSjNfSU4sCisJCVBUSjJfRk4sIFBUSjJfT1VULCBQVEoyX0lOX1BVLCBQVEoyX0lOLAorCQlQVEoxX0ZOLCBQVEoxX09VVCwgUFRKMV9JTl9QVSwgUFRKMV9JTiwKKwkJUFRKMF9GTiwgUFRKMF9PVVQsIFBUSjBfSU5fUFUsIFBUSjBfSU4gfQorCX0sCisJeyBQSU5NVVhfQ0ZHX1JFRygiUEtDUiIsIDB4YTQwNTAxMTIsIDE2LCAyKSB7CisJCTAsIDAsIDAsIDAsCisJCTAsIDAsIDAsIDAsCisJCTAsIDAsIDAsIDAsCisJCTAsIDAsIDAsIDAsCisJCVBUSzNfRk4sIFBUSzNfT1VULCBQVEszX0lOX1BVLCBQVEszX0lOLAorCQlQVEsyX0ZOLCBQVEsyX09VVCwgUFRLMl9JTl9QVSwgUFRLMl9JTiwKKwkJUFRLMV9GTiwgUFRLMV9PVVQsIFBUSzFfSU5fUFUsIFBUSzFfSU4sCisJCVBUSzBfRk4sIFBUSzBfT1VULCBQVEswX0lOX1BVLCBQVEswX0lOIH0KKwl9LAorCXsgUElOTVVYX0NGR19SRUcoIlBMQ1IiLCAweGE0MDUwMTE0LCAxNiwgMikgeworCQlQVEw3X0ZOLCBQVEw3X09VVCwgUFRMN19JTl9QVSwgUFRMN19JTiwKKwkJUFRMNl9GTiwgUFRMNl9PVVQsIFBUTDZfSU5fUFUsIFBUTDZfSU4sCisJCVBUTDVfRk4sIFBUTDVfT1VULCBQVEw1X0lOX1BVLCBQVEw1X0lOLAorCQlQVEw0X0ZOLCBQVEw0X09VVCwgUFRMNF9JTl9QVSwgUFRMNF9JTiwKKwkJUFRMM19GTiwgUFRMM19PVVQsIFBUTDNfSU5fUFUsIFBUTDNfSU4sCisJCTAsIDAsIDAsIDAsCisJCTAsIDAsIDAsIDAsCisJCTAsIDAsIDAsIDAgfQorCX0sCisJeyBQSU5NVVhfQ0ZHX1JFRygiUE1DUiIsIDB4YTQwNTAxMTYsIDE2LCAyKSB7CisJCVBUTTdfRk4sIFBUTTdfT1VULCBQVE03X0lOX1BVLCBQVE03X0lOLAorCQlQVE02X0ZOLCBQVE02X09VVCwgUFRNNl9JTl9QVSwgUFRNNl9JTiwKKwkJUFRNNV9GTiwgUFRNNV9PVVQsIFBUTTVfSU5fUFUsIFBUTTVfSU4sCisJCVBUTTRfRk4sIFBUTTRfT1VULCBQVE00X0lOX1BVLCBQVE00X0lOLAorCQlQVE0zX0ZOLCBQVE0zX09VVCwgUFRNM19JTl9QVSwgUFRNM19JTiwKKwkJUFRNMl9GTiwgUFRNMl9PVVQsIFBUTTJfSU5fUFUsIFBUTTJfSU4sCisJCVBUTTFfRk4sIFBUTTFfT1VULCBQVE0xX0lOX1BVLCBQVE0xX0lOLAorCQlQVE0wX0ZOLCBQVE0wX09VVCwgUFRNMF9JTl9QVSwgUFRNMF9JTiB9CisJfSwKKwl7IFBJTk1VWF9DRkdfUkVHKCJQUENSIiwgMHhhNDA1MDExOCwgMTYsIDIpIHsKKwkJMCwgMCwgMCwgMCwKKwkJMCwgMCwgMCwgMCwKKwkJMCwgMCwgMCwgMCwKKwkJUFRQNF9GTiwgUFRQNF9PVVQsIFBUUDRfSU5fUFUsIFBUUDRfSU4sCisJCVBUUDNfRk4sIFBUUDNfT1VULCBQVFAzX0lOX1BVLCBQVFAzX0lOLAorCQlQVFAyX0ZOLCBQVFAyX09VVCwgUFRQMl9JTl9QVSwgUFRQMl9JTiwKKwkJUFRQMV9GTiwgUFRQMV9PVVQsIFBUUDFfSU5fUFUsIFBUUDFfSU4sCisJCVBUUDBfRk4sIFBUUDBfT1VULCBQVFAwX0lOX1BVLCBQVFAwX0lOIH0KKwl9LAorCXsgUElOTVVYX0NGR19SRUcoIlBSQ1IiLCAweGE0MDUwMTFhLCAxNiwgMikgeworCQlQVFI3X0ZOLCBQVFI3X09VVCwgUFRSN19JTl9QVSwgUFRSN19JTiwKKwkJUFRSNl9GTiwgUFRSNl9PVVQsIFBUUjZfSU5fUFUsIFBUUjZfSU4sCisJCVBUUjVfRk4sIFBUUjVfT1VULCBQVFI1X0lOX1BVLCBQVFI1X0lOLAorCQlQVFI0X0ZOLCBQVFI0X09VVCwgUFRSNF9JTl9QVSwgUFRSNF9JTiwKKwkJUFRSM19GTiwgUFRSM19PVVQsIFBUUjNfSU5fUFUsIFBUUjNfSU4sCisJCVBUUjJfRk4sIFBUUjJfT1VULCBQVFIyX0lOX1BVLCBQVFIyX0lOLAorCQlQVFIxX0ZOLCBQVFIxX09VVCwgUFRSMV9JTl9QVSwgUFRSMV9JTiwKKwkJUFRSMF9GTiwgUFRSMF9PVVQsIFBUUjBfSU5fUFUsIFBUUjBfSU4gfQorCX0sCisJeyBQSU5NVVhfQ0ZHX1JFRygiUFNDUiIsIDB4YTQwNTAxMWMsIDE2LCAyKSB7CisJCTAsIDAsIDAsIDAsCisJCTAsIDAsIDAsIDAsCisJCTAsIDAsIDAsIDAsCisJCVBUUzRfRk4sIFBUUzRfT1VULCBQVFM0X0lOX1BVLCBQVFM0X0lOLAorCQlQVFMzX0ZOLCBQVFMzX09VVCwgUFRTM19JTl9QVSwgUFRTM19JTiwKKwkJUFRTMl9GTiwgUFRTMl9PVVQsIFBUUzJfSU5fUFUsIFBUUzJfSU4sCisJCVBUUzFfRk4sIFBUUzFfT1VULCBQVFMxX0lOX1BVLCBQVFMxX0lOLAorCQlQVFMwX0ZOLCBQVFMwX09VVCwgUFRTMF9JTl9QVSwgUFRTMF9JTiB9CisJfSwKKwl7IFBJTk1VWF9DRkdfUkVHKCJQVENSIiwgMHhhNDA1MDExZSwgMTYsIDIpIHsKKwkJMCwgMCwgMCwgMCwKKwkJMCwgMCwgMCwgMCwKKwkJMCwgMCwgMCwgMCwKKwkJUFRUNF9GTiwgUFRUNF9PVVQsIFBUVDRfSU5fUFUsIFBUVDRfSU4sCisJCVBUVDNfRk4sIFBUVDNfT1VULCBQVFQzX0lOX1BVLCBQVFQzX0lOLAorCQlQVFQyX0ZOLCBQVFQyX09VVCwgUFRUMl9JTl9QVSwgUFRUMl9JTiwKKwkJUFRUMV9GTiwgUFRUMV9PVVQsIFBUVDFfSU5fUFUsIFBUVDFfSU4sCisJCVBUVDBfRk4sIFBUVDBfT1VULCBQVFQwX0lOX1BVLCBQVFQwX0lOIH0KKwl9LAorCXsgUElOTVVYX0NGR19SRUcoIlBVQ1IiLCAweGE0MDUwMTIwLCAxNiwgMikgeworCQkwLCAwLCAwLCAwLAorCQkwLCAwLCAwLCAwLAorCQkwLCAwLCAwLCAwLAorCQlQVFU0X0ZOLCBQVFU0X09VVCwgUFRVNF9JTl9QVSwgUFRVNF9JTiwKKwkJUFRVM19GTiwgUFRVM19PVVQsIFBUVTNfSU5fUFUsIFBUVTNfSU4sCisJCVBUVTJfRk4sIFBUVTJfT1VULCBQVFUyX0lOX1BVLCBQVFUyX0lOLAorCQlQVFUxX0ZOLCBQVFUxX09VVCwgUFRVMV9JTl9QVSwgUFRVMV9JTiwKKwkJUFRVMF9GTiwgUFRVMF9PVVQsIFBUVTBfSU5fUFUsIFBUVTBfSU4gfQorCX0sCisJeyBQSU5NVVhfQ0ZHX1JFRygiUFZDUiIsIDB4YTQwNTAxMjIsIDE2LCAyKSB7CisJCTAsIDAsIDAsIDAsCisJCTAsIDAsIDAsIDAsCisJCTAsIDAsIDAsIDAsCisJCVBUVjRfRk4sIFBUVjRfT1VULCBQVFY0X0lOX1BVLCBQVFY0X0lOLAorCQlQVFYzX0ZOLCBQVFYzX09VVCwgUFRWM19JTl9QVSwgUFRWM19JTiwKKwkJUFRWMl9GTiwgUFRWMl9PVVQsIFBUVjJfSU5fUFUsIFBUVjJfSU4sCisJCVBUVjFfRk4sIFBUVjFfT1VULCBQVFYxX0lOX1BVLCBQVFYxX0lOLAorCQlQVFYwX0ZOLCBQVFYwX09VVCwgUFRWMF9JTl9QVSwgUFRWMF9JTiB9CisJfSwKKwl7fQorfTsKKworc3RhdGljIHN0cnVjdCBwaW5tdXhfZGF0YV9yZWcgcGlubXV4X2RhdGFfcmVnc1tdID0geworCXsgUElOTVVYX0RBVEFfUkVHKCJQQURSIiwgMHhhNDA1MDE0MCwgOCkgeworCQlQVEE3X0RBVEEsIFBUQTZfREFUQSwgUFRBNV9EQVRBLCBQVEE0X0RBVEEsCisJCVBUQTNfREFUQSwgUFRBMl9EQVRBLCBQVEExX0RBVEEsIFBUQTBfREFUQSB9CisJfSwKKwl7IFBJTk1VWF9EQVRBX1JFRygiUEJEUiIsIDB4YTQwNTAxNDIsIDgpIHsKKwkJUFRCN19EQVRBLCBQVEI2X0RBVEEsIFBUQjVfREFUQSwgUFRCNF9EQVRBLAorCQlQVEIzX0RBVEEsIFBUQjJfREFUQSwgUFRCMV9EQVRBLCBQVEIwX0RBVEEgfQorCX0sCisJeyBQSU5NVVhfREFUQV9SRUcoIlBDRFIiLCAweGE0MDUwMTQ0LCA4KSB7CisJCVBUQzdfREFUQSwgUFRDNl9EQVRBLCBQVEM1X0RBVEEsIFBUQzRfREFUQSwKKwkJUFRDM19EQVRBLCBQVEMyX0RBVEEsIFBUQzFfREFUQSwgUFRDMF9EQVRBIH0KKwl9LAorCXsgUElOTVVYX0RBVEFfUkVHKCJQRERSIiwgMHhhNDA1MDEyNiwgOCkgeworCQlQVEQ3X0RBVEEsIFBURDZfREFUQSwgUFRENV9EQVRBLCBQVEQ0X0RBVEEsCisJCVBURDNfREFUQSwgUFREMl9EQVRBLCBQVEQxX0RBVEEsIFBURDBfREFUQSB9CisJfSwKKwl7IFBJTk1VWF9EQVRBX1JFRygiUEVEUiIsIDB4YTQwNTAxNDgsIDgpIHsKKwkJMCwgUFRFNl9EQVRBLCBQVEU1X0RBVEEsIFBURTRfREFUQSwKKwkJUFRFM19EQVRBLCBQVEUyX0RBVEEsIFBURTFfREFUQSwgUFRFMF9EQVRBIH0KKwl9LAorCXsgUElOTVVYX0RBVEFfUkVHKCJQRkRSIiwgMHhhNDA1MDE0YSwgOCkgeworCQkwLCBQVEY2X0RBVEEsIFBURjVfREFUQSwgUFRGNF9EQVRBLAorCQlQVEYzX0RBVEEsIFBURjJfREFUQSwgUFRGMV9EQVRBLCBQVEYwX0RBVEEgfQorCX0sCisJeyBQSU5NVVhfREFUQV9SRUcoIlBHRFIiLCAweGE0MDUwMTRjLCA4KSB7CisJCTAsIFBURzZfREFUQSwgUFRHNV9EQVRBLCBQVEc0X0RBVEEsCisJCVBURzNfREFUQSwgUFRHMl9EQVRBLCBQVEcxX0RBVEEsIFBURzBfREFUQSB9CisJfSwKKwl7IFBJTk1VWF9EQVRBX1JFRygiUEhEUiIsIDB4YTQwNTAxNGUsIDgpIHsKKwkJMCwgUFRINl9EQVRBLCBQVEg1X0RBVEEsIFBUSDRfREFUQSwKKwkJUFRIM19EQVRBLCBQVEgyX0RBVEEsIFBUSDFfREFUQSwgUFRIMF9EQVRBIH0KKwl9LAorCXsgUElOTVVYX0RBVEFfUkVHKCJQSkRSIiwgMHhhNDA1MDE1MCwgOCkgeworCQkwLCBQVEo2X0RBVEEsIFBUSjVfREFUQSwgUFRKNF9EQVRBLAorCQlQVEozX0RBVEEsIFBUSjJfREFUQSwgUFRKMV9EQVRBLCBQVEowX0RBVEEgfQorCX0sCisJeyBQSU5NVVhfREFUQV9SRUcoIlBLRFIiLCAweGE0MDUwMTUyLCA4KSB7CisJCTAsIDAsIDAsIDAsCisJCVBUSzNfREFUQSwgUFRLMl9EQVRBLCBQVEsxX0RBVEEsIFBUSzBfREFUQSB9CisJfSwKKwl7IFBJTk1VWF9EQVRBX1JFRygiUExEUiIsIDB4YTQwNTAxNTQsIDgpIHsKKwkJUFRMN19EQVRBLCBQVEw2X0RBVEEsIFBUTDVfREFUQSwgUFRMNF9EQVRBLAorCQlQVEwzX0RBVEEsIDAsIDAsIDAgfQorCX0sCisJeyBQSU5NVVhfREFUQV9SRUcoIlBNRFIiLCAweGE0MDUwMTU2LCA4KSB7CisJCVBUTTdfREFUQSwgUFRNNl9EQVRBLCBQVE01X0RBVEEsIFBUTTRfREFUQSwKKwkJUFRNM19EQVRBLCBQVE0yX0RBVEEsIFBUTTFfREFUQSwgUFRNMF9EQVRBIH0KKwl9LAorCXsgUElOTVVYX0RBVEFfUkVHKCJQUERSIiwgMHhhNDA1MDE1OCwgOCkgeworCQkwLCAwLCAwLCBQVFA0X0RBVEEsCisJCVBUUDNfREFUQSwgUFRQMl9EQVRBLCBQVFAxX0RBVEEsIFBUUDBfREFUQSB9CisJfSwKKwl7IFBJTk1VWF9EQVRBX1JFRygiUFJEUiIsIDB4YTQwNTAxNWEsIDgpIHsKKwkJUFRSN19EQVRBLCBQVFI2X0RBVEEsIFBUUjVfREFUQSwgUFRSNF9EQVRBLAorCQlQVFIzX0RBVEEsIFBUUjJfREFUQSwgUFRSMV9EQVRBLCBQVFIwX0RBVEEgfQorCX0sCisJeyBQSU5NVVhfREFUQV9SRUcoIlBTRFIiLCAweGE0MDUwMTVjLCA4KSB7CisJCTAsIDAsIDAsIFBUUzRfREFUQSwKKwkJUFRTM19EQVRBLCBQVFMyX0RBVEEsIFBUUzFfREFUQSwgUFRTMF9EQVRBIH0KKwl9LAorCXsgUElOTVVYX0RBVEFfUkVHKCJQVERSIiwgMHhhNDA1MDE1ZSwgOCkgeworCQkwLCAwLCAwLCBQVFQ0X0RBVEEsCisJCVBUVDNfREFUQSwgUFRUMl9EQVRBLCBQVFQxX0RBVEEsIFBUVDBfREFUQSB9CisJfSwKKwl7IFBJTk1VWF9EQVRBX1JFRygiUFVEUiIsIDB4YTQwNTAxNjAsIDgpIHsKKwkJMCwgMCwgMCwgUFRVNF9EQVRBLAorCQlQVFUzX0RBVEEsIFBUVTJfREFUQSwgUFRVMV9EQVRBLCBQVFUwX0RBVEEgfQorCX0sCisJeyBQSU5NVVhfREFUQV9SRUcoIlBWRFIiLCAweGE0MDUwMTYyLCA4KSB7CisJCTAsIDAsIDAsIFBUVjRfREFUQSwKKwkJUFRWM19EQVRBLCBQVFYyX0RBVEEsIFBUVjFfREFUQSwgUFRWMF9EQVRBIH0KKwl9LAorCXsgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGlubXV4X2luZm8gc2g3NzIwX3Bpbm11eF9pbmZvID0geworCS5uYW1lID0gInNoNzcyMF9wZmMiLAorCS5yZXNlcnZlZF9pZCA9IFBJTk1VWF9SRVNFUlZFRCwKKwkuZGF0YSA9IHsgUElOTVVYX0RBVEFfQkVHSU4sIFBJTk1VWF9EQVRBX0VORCB9LAorCS5pbnB1dCA9IHsgUElOTVVYX0lOUFVUX0JFR0lOLCBQSU5NVVhfSU5QVVRfRU5EIH0sCisJLmlucHV0X3B1ID0geyBQSU5NVVhfSU5QVVRfUFVMTFVQX0JFR0lOLCBQSU5NVVhfSU5QVVRfUFVMTFVQX0VORCB9LAorCS5vdXRwdXQgPSB7IFBJTk1VWF9PVVRQVVRfQkVHSU4sIFBJTk1VWF9PVVRQVVRfRU5EIH0sCisJLm1hcmsgPSB7IFBJTk1VWF9NQVJLX0JFR0lOLCBQSU5NVVhfTUFSS19FTkQgfSwKKwkuZnVuY3Rpb24gPSB7IFBJTk1VWF9GVU5DVElPTl9CRUdJTiwgUElOTVVYX0ZVTkNUSU9OX0VORCB9LAorCisJLmZpcnN0X2dwaW8gPSBHUElPX1BUQTcsCisJLmxhc3RfZ3BpbyA9IEdQSU9fRk5fU1RBVFVTMSwKKworCS5ncGlvcyA9IHBpbm11eF9ncGlvcywKKwkuY2ZnX3JlZ3MgPSBwaW5tdXhfY29uZmlnX3JlZ3MsCisJLmRhdGFfcmVncyA9IHBpbm11eF9kYXRhX3JlZ3MsCisKKwkuZ3Bpb19kYXRhID0gcGlubXV4X2RhdGEsCisJLmdwaW9fZGF0YV9zaXplID0gQVJSQVlfU0laRShwaW5tdXhfZGF0YSksCit9OworCitzdGF0aWMgaW50IF9faW5pdCBwbGF0X3Bpbm11eF9zZXR1cCh2b2lkKQoreworCXJldHVybiByZWdpc3Rlcl9waW5tdXgoJnNoNzcyMF9waW5tdXhfaW5mbyk7Cit9CisKK2FyY2hfaW5pdGNhbGwocGxhdF9waW5tdXhfc2V0dXApOwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNC9mcHUuYyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDQvZnB1LmMKaW5kZXggMmQ0NTJmNi4uMjc4MDkxNyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNC9mcHUuYworKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0L2ZwdS5jCkBAIC0zNiw3ICszNiw3IEBACiBleHRlcm4gdW5zaWduZWQgbG9uZyBsb25nIGZsb2F0NjRfc3ViKHVuc2lnbmVkIGxvbmcgbG9uZyBhLAogCQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBiKTsKIGV4dGVybiB1bnNpZ25lZCBsb25nIGludCBmbG9hdDMyX3N1Yih1bnNpZ25lZCBsb25nIGludCBhLCB1bnNpZ25lZCBsb25nIGludCBiKTsKLQorZXh0ZXJuIHVuc2lnbmVkIGxvbmcgaW50IGZsb2F0NjRfdG9fZmxvYXQzMih1bnNpZ25lZCBsb25nIGxvbmcgYSk7CiBzdGF0aWMgdW5zaWduZWQgaW50IGZwdV9leGNlcHRpb25fZmxhZ3M7CiAKIC8qCkBAIC00MTcsNiArNDE3LDI5IEBACiAKIAkJcmVncy0+cGMgPSBuZXh0cGM7CiAJCXJldHVybiAxOworCX0gZWxzZSBpZiAoKGZpbnNuICYgMHhmMGJkKSA9PSAweGYwYmQpIHsKKwkJLyogZmNudmRzIC0gZG91YmxlIHRvIHNpbmdsZSBwcmVjaXNpb24gY29udmVydCAqLworCQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzayA9IGN1cnJlbnQ7CisJCWludCBtOworCQl1bnNpZ25lZCBpbnQgaHg7CisKKwkJbSA9IChmaW5zbiA+PiA5KSAmIDB4NzsKKwkJaHggPSB0c2stPnRocmVhZC5mcHUuaGFyZC5mcF9yZWdzW21dOworCisJCWlmICgodHNrLT50aHJlYWQuZnB1LmhhcmQuZnBzY3IgJiBGUFNDUl9DQVVTRV9FUlJPUikKKwkJCSYmICgoaHggJiAweDdmZmZmZmZmKSA8IDB4MDAxMDAwMDApKSB7CisJCQkvKiBzdWJub3JtYWwgZG91YmxlIHRvIGZsb2F0IGNvbnZlcnNpb24gKi8KKwkJCWxvbmcgbG9uZyBsbHg7CisKKwkJCWxseCA9ICgobG9uZyBsb25nKXRzay0+dGhyZWFkLmZwdS5oYXJkLmZwX3JlZ3NbbV0gPDwgMzIpCisJCQkgICAgfCB0c2stPnRocmVhZC5mcHUuaGFyZC5mcF9yZWdzW20gKyAxXTsKKworCQkJdHNrLT50aHJlYWQuZnB1LmhhcmQuZnB1bCA9IGZsb2F0NjRfdG9fZmxvYXQzMihsbHgpOworCQl9IGVsc2UKKwkJCXJldHVybiAwOworCisJCXJlZ3MtPnBjID0gbmV4dHBjOworCQlyZXR1cm4gMTsKIAl9CiAKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDQvc2V0dXAtc2g3NzYwLmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0L3NldHVwLXNoNzc2MC5jCmluZGV4IDI1NGM1YzUuLmQ5YmRjOTMgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDQvc2V0dXAtc2g3NzYwLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNC9zZXR1cC1zaDc3NjAuYwpAQCAtMTEsNiArMTEsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9zZXJpYWwuaD4KICNpbmNsdWRlIDxsaW51eC9zZXJpYWxfc2NpLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KIAogZW51bSB7CiAJVU5VU0VEID0gMCwKQEAgLTE3OCwxMCArMTc5LDE0IEBACiB9CiBfX2luaXRjYWxsKHNoNzc2MF9kZXZpY2VzX3NldHVwKTsKIAorI2RlZmluZSBJTlRDX0lDUgkweGZmZDAwMDAwVUwKKyNkZWZpbmUgSU5UQ19JQ1JfSVJMTQkoMSA8PCA3KQorCiB2b2lkIF9faW5pdCBwbGF0X2lycV9zZXR1cF9waW5zKGludCBtb2RlKQogewogCXN3aXRjaCAobW9kZSkgewogCWNhc2UgSVJRX01PREVfSVJROgorCQljdHJsX291dHcoY3RybF9pbncoSU5UQ19JQ1IpIHwgSU5UQ19JQ1JfSVJMTSwgSU5UQ19JQ1IpOwogCQlyZWdpc3Rlcl9pbnRjX2NvbnRyb2xsZXIoJmludGNfZGVzY19pcnEpOwogCQlicmVhazsKIAlkZWZhdWx0OgpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNC9zb2Z0ZmxvYXQuYyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDQvc29mdGZsb2F0LmMKaW5kZXggODI4Y2I1Ny4uMmI3NDdmMyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNC9zb2Z0ZmxvYXQuYworKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0L3NvZnRmbG9hdC5jCkBAIC04NSw2ICs4NSw3IEBACiBmbG9hdDMyIGZsb2F0MzJfZGl2KGZsb2F0MzIgYSwgZmxvYXQzMiBiKTsKIGZsb2F0MzIgZmxvYXQzMl9tdWwoZmxvYXQzMiBhLCBmbG9hdDMyIGIpOwogZmxvYXQ2NCBmbG9hdDY0X211bChmbG9hdDY0IGEsIGZsb2F0NjQgYik7CitmbG9hdDMyIGZsb2F0NjRfdG9fZmxvYXQzMihmbG9hdDY0IGEpOwogaW5saW5lIHZvaWQgYWRkMTI4KGJpdHM2NCBhMCwgYml0czY0IGExLCBiaXRzNjQgYjAsIGJpdHM2NCBiMSwgYml0czY0ICogejBQdHIsCiAJCSAgIGJpdHM2NCAqIHoxUHRyKTsKIGlubGluZSB2b2lkIHN1YjEyOChiaXRzNjQgYTAsIGJpdHM2NCBhMSwgYml0czY0IGIwLCBiaXRzNjQgYjEsIGJpdHM2NCAqIHowUHRyLApAQCAtODkwLDMgKzg5MSwzMSBAQAogCX0KIAlyZXR1cm4gcm91bmRBbmRQYWNrRmxvYXQ2NCh6U2lnbiwgekV4cCwgelNpZzApOwogfQorCisvKgorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogIFJldHVybnMgdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIHRoZSBkb3VibGUtcHJlY2lzaW9uIGZsb2F0aW5nLXBvaW50IHZhbHVlCisgKiAgYGEnIHRvIHRoZSBzaW5nbGUtcHJlY2lzaW9uIGZsb2F0aW5nLXBvaW50IGZvcm1hdC4gIFRoZSBjb252ZXJzaW9uIGlzCisgKiAgcGVyZm9ybWVkIGFjY29yZGluZyB0byB0aGUgSUVDL0lFRUUgU3RhbmRhcmQgZm9yIEJpbmFyeSBGbG9hdGluZy1wb2ludAorICogIEFyaXRobWV0aWMuCisgKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogICovCitmbG9hdDMyIGZsb2F0NjRfdG9fZmxvYXQzMihmbG9hdDY0IGEpCit7CisgICAgZmxhZyBhU2lnbjsKKyAgICBpbnQxNiBhRXhwOworICAgIGJpdHM2NCBhU2lnOworICAgIGJpdHMzMiB6U2lnOworCisgICAgYVNpZyA9IGV4dHJhY3RGbG9hdDY0RnJhYyggYSApOworICAgIGFFeHAgPSBleHRyYWN0RmxvYXQ2NEV4cCggYSApOworICAgIGFTaWduID0gZXh0cmFjdEZsb2F0NjRTaWduKCBhICk7CisKKyAgICBzaGlmdDY0UmlnaHRKYW1taW5nKCBhU2lnLCAyMiwgJmFTaWcgKTsKKyAgICB6U2lnID0gYVNpZzsKKyAgICBpZiAoIGFFeHAgfHwgelNpZyApIHsKKyAgICAgICAgelNpZyB8PSAweDQwMDAwMDAwOworICAgICAgICBhRXhwIC09IDB4MzgxOworICAgIH0KKyAgICByZXR1cm4gcm91bmRBbmRQYWNrRmxvYXQzMihhU2lnbiwgYUV4cCwgelNpZyk7Cit9CmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9NYWtlZmlsZSBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL01ha2VmaWxlCmluZGV4IDkzODFhZDguLmJlOWEwYzEgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL01ha2VmaWxlCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL01ha2VmaWxlCkBAIC0yNyw1ICsyNywxMCBAQAogY2xvY2stJChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MzY2KQk6PSBjbG9jay1zaDc3MjIubwogY2xvY2stJChDT05GSUdfQ1BVX1NVQlRZUEVfU0hYMykJOj0gY2xvY2stc2h4My5vCiAKKyMgUGlubXV4IHNldHVwCitwaW5tdXgtJChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIyKQk6PSBwaW5tdXgtc2g3NzIyLm8KK3Bpbm11eC0kKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjMpCTo9IHBpbm11eC1zaDc3MjMubworCiBvYmoteQkJCSs9ICQoY2xvY2steSkKIG9iai0kKENPTkZJR19TTVApCSs9ICQoc21wLXkpCitvYmotJChDT05GSUdfR0VORVJJQ19HUElPKQkrPSAkKHBpbm11eC15KQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvcGlubXV4LXNoNzcyMi5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvcGlubXV4LXNoNzcyMi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiOWQwN2IKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9waW5tdXgtc2g3NzIyLmMKQEAgLTAsMCArMSwxNzgzIEBACisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KKyNpbmNsdWRlIDxjcHUvc2g3NzIyLmg+CisKK2VudW0geworCVBJTk1VWF9SRVNFUlZFRCA9IDAsCisKKwlQSU5NVVhfREFUQV9CRUdJTiwKKwlQVEE3X0RBVEEsIFBUQTZfREFUQSwgUFRBNV9EQVRBLCBQVEE0X0RBVEEsCisJUFRBM19EQVRBLCBQVEEyX0RBVEEsIFBUQTFfREFUQSwgUFRBMF9EQVRBLAorCVBUQjdfREFUQSwgUFRCNl9EQVRBLCBQVEI1X0RBVEEsIFBUQjRfREFUQSwKKwlQVEIzX0RBVEEsIFBUQjJfREFUQSwgUFRCMV9EQVRBLCBQVEIwX0RBVEEsCisJUFRDN19EQVRBLCBQVEM1X0RBVEEsIFBUQzRfREFUQSwgUFRDM19EQVRBLCBQVEMyX0RBVEEsIFBUQzBfREFUQSwKKwlQVEQ3X0RBVEEsIFBURDZfREFUQSwgUFRENV9EQVRBLCBQVEQ0X0RBVEEsCisJUFREM19EQVRBLCBQVEQyX0RBVEEsIFBURDFfREFUQSwgUFREMF9EQVRBLAorCVBURTdfREFUQSwgUFRFNl9EQVRBLCBQVEU1X0RBVEEsIFBURTRfREFUQSwgUFRFMV9EQVRBLCBQVEUwX0RBVEEsCisJUFRGNl9EQVRBLCBQVEY1X0RBVEEsIFBURjRfREFUQSwKKwlQVEYzX0RBVEEsIFBURjJfREFUQSwgUFRGMV9EQVRBLCBQVEYwX0RBVEEsCisJUFRHNF9EQVRBLCBQVEczX0RBVEEsIFBURzJfREFUQSwgUFRHMV9EQVRBLCBQVEcwX0RBVEEsCisJUFRIN19EQVRBLCBQVEg2X0RBVEEsIFBUSDVfREFUQSwgUFRINF9EQVRBLAorCVBUSDNfREFUQSwgUFRIMl9EQVRBLCBQVEgxX0RBVEEsIFBUSDBfREFUQSwKKwlQVEo3X0RBVEEsIFBUSjZfREFUQSwgUFRKNV9EQVRBLCBQVEoxX0RBVEEsIFBUSjBfREFUQSwKKwlQVEs2X0RBVEEsIFBUSzVfREFUQSwgUFRLNF9EQVRBLAorCVBUSzNfREFUQSwgUFRLMl9EQVRBLCBQVEsxX0RBVEEsIFBUSzBfREFUQSwKKwlQVEw3X0RBVEEsIFBUTDZfREFUQSwgUFRMNV9EQVRBLCBQVEw0X0RBVEEsCisJUFRMM19EQVRBLCBQVEwyX0RBVEEsIFBUTDFfREFUQSwgUFRMMF9EQVRBLAorCVBUTTdfREFUQSwgUFRNNl9EQVRBLCBQVE01X0RBVEEsIFBUTTRfREFUQSwKKwlQVE0zX0RBVEEsIFBUTTJfREFUQSwgUFRNMV9EQVRBLCBQVE0wX0RBVEEsCisJUFRON19EQVRBLCBQVE42X0RBVEEsIFBUTjVfREFUQSwgUFRONF9EQVRBLAorCVBUTjNfREFUQSwgUFROMl9EQVRBLCBQVE4xX0RBVEEsIFBUTjBfREFUQSwKKwlQVFE2X0RBVEEsIFBUUTVfREFUQSwgUFRRNF9EQVRBLAorCVBUUTNfREFUQSwgUFRRMl9EQVRBLCBQVFExX0RBVEEsIFBUUTBfREFUQSwKKwlQVFI0X0RBVEEsIFBUUjNfREFUQSwgUFRSMl9EQVRBLCBQVFIxX0RBVEEsIFBUUjBfREFUQSwKKwlQVFM0X0RBVEEsIFBUUzNfREFUQSwgUFRTMl9EQVRBLCBQVFMxX0RBVEEsIFBUUzBfREFUQSwKKwlQVFQ0X0RBVEEsIFBUVDNfREFUQSwgUFRUMl9EQVRBLCBQVFQxX0RBVEEsIFBUVDBfREFUQSwKKwlQVFU0X0RBVEEsIFBUVTNfREFUQSwgUFRVMl9EQVRBLCBQVFUxX0RBVEEsIFBUVTBfREFUQSwKKwlQVFY0X0RBVEEsIFBUVjNfREFUQSwgUFRWMl9EQVRBLCBQVFYxX0RBVEEsIFBUVjBfREFUQSwKKwlQVFc2X0RBVEEsIFBUVzVfREFUQSwgUFRXNF9EQVRBLAorCVBUVzNfREFUQSwgUFRXMl9EQVRBLCBQVFcxX0RBVEEsIFBUVzBfREFUQSwKKwlQVFg2X0RBVEEsIFBUWDVfREFUQSwgUFRYNF9EQVRBLAorCVBUWDNfREFUQSwgUFRYMl9EQVRBLCBQVFgxX0RBVEEsIFBUWDBfREFUQSwKKwlQVFk2X0RBVEEsIFBUWTVfREFUQSwgUFRZNF9EQVRBLAorCVBUWTNfREFUQSwgUFRZMl9EQVRBLCBQVFkxX0RBVEEsIFBUWTBfREFUQSwKKwlQVFo1X0RBVEEsIFBUWjRfREFUQSwgUFRaM19EQVRBLCBQVFoyX0RBVEEsIFBUWjFfREFUQSwgUFRaMF9EQVRBLAorCVBJTk1VWF9EQVRBX0VORCwKKworCVBJTk1VWF9JTlBVVF9CRUdJTiwKKwlQVEE3X0lOLCBQVEE2X0lOLCBQVEE1X0lOLCBQVEE0X0lOLAorCVBUQTNfSU4sIFBUQTJfSU4sIFBUQTFfSU4sIFBUQTBfSU4sCisJUFRCN19JTiwgUFRCNl9JTiwgUFRCNV9JTiwgUFRCNF9JTiwKKwlQVEIzX0lOLCBQVEIyX0lOLCBQVEIxX0lOLCBQVEIwX0lOLAorCVBUQzdfSU4sIFBUQzVfSU4sIFBUQzRfSU4sIFBUQzNfSU4sIFBUQzJfSU4sIFBUQzBfSU4sCisJUFREN19JTiwgUFRENl9JTiwgUFRENV9JTiwgUFRENF9JTiwgUFREM19JTiwgUFREMl9JTiwgUFREMV9JTiwKKwlQVEU3X0lOLCBQVEU2X0lOLCBQVEU1X0lOLCBQVEU0X0lOLCBQVEUxX0lOLCBQVEUwX0lOLAorCVBURjZfSU4sIFBURjVfSU4sIFBURjRfSU4sIFBURjNfSU4sIFBURjJfSU4sIFBURjFfSU4sCisJUFRINl9JTiwgUFRINV9JTiwgUFRIMV9JTiwgUFRIMF9JTiwKKwlQVEoxX0lOLCBQVEowX0lOLAorCVBUSzZfSU4sIFBUSzVfSU4sIFBUSzRfSU4sIFBUSzNfSU4sIFBUSzJfSU4sIFBUSzBfSU4sCisJUFRMN19JTiwgUFRMNl9JTiwgUFRMNV9JTiwgUFRMNF9JTiwKKwlQVEwzX0lOLCBQVEwyX0lOLCBQVEwxX0lOLCBQVEwwX0lOLAorCVBUTTdfSU4sIFBUTTZfSU4sIFBUTTVfSU4sIFBUTTRfSU4sCisJUFRNM19JTiwgUFRNMl9JTiwgUFRNMV9JTiwgUFRNMF9JTiwKKwlQVE43X0lOLCBQVE42X0lOLCBQVE41X0lOLCBQVE40X0lOLAorCVBUTjNfSU4sIFBUTjJfSU4sIFBUTjFfSU4sIFBUTjBfSU4sCisJUFRRNV9JTiwgUFRRNF9JTiwgUFRRM19JTiwgUFRRMl9JTiwgUFRRMF9JTiwKKwlQVFIyX0lOLAorCVBUUzRfSU4sIFBUUzJfSU4sIFBUUzFfSU4sCisJUFRUNF9JTiwgUFRUM19JTiwgUFRUMl9JTiwgUFRUMV9JTiwKKwlQVFU0X0lOLCBQVFUzX0lOLCBQVFUyX0lOLCBQVFUxX0lOLCBQVFUwX0lOLAorCVBUVjRfSU4sIFBUVjNfSU4sIFBUVjJfSU4sIFBUVjFfSU4sIFBUVjBfSU4sCisJUFRXNl9JTiwgUFRXNF9JTiwgUFRXM19JTiwgUFRXMl9JTiwgUFRXMV9JTiwgUFRXMF9JTiwKKwlQVFg2X0lOLCBQVFg1X0lOLCBQVFg0X0lOLCBQVFgzX0lOLCBQVFgyX0lOLCBQVFgxX0lOLCBQVFgwX0lOLAorCVBUWTVfSU4sIFBUWTRfSU4sIFBUWTNfSU4sIFBUWTJfSU4sIFBUWTBfSU4sCisJUFRaNV9JTiwgUFRaNF9JTiwgUFRaM19JTiwgUFRaMl9JTiwgUFRaMV9JTiwKKwlQSU5NVVhfSU5QVVRfRU5ELAorCisJUElOTVVYX0lOUFVUX1BVTExET1dOX0JFR0lOLAorCVBUQTdfSU5fUEQsIFBUQTZfSU5fUEQsIFBUQTVfSU5fUEQsIFBUQTRfSU5fUEQsCisJUFRBM19JTl9QRCwgUFRBMl9JTl9QRCwgUFRBMV9JTl9QRCwgUFRBMF9JTl9QRCwKKwlQVEU3X0lOX1BELCBQVEU2X0lOX1BELCBQVEU1X0lOX1BELCBQVEU0X0lOX1BELAlQVEUxX0lOX1BELCBQVEUwX0lOX1BELAorCVBURjZfSU5fUEQsIFBURjVfSU5fUEQsIFBURjRfSU5fUEQsIFBURjNfSU5fUEQsIFBURjJfSU5fUEQsIFBURjFfSU5fUEQsCisJUFRINl9JTl9QRCwgUFRINV9JTl9QRCwgUFRIMV9JTl9QRCwgUFRIMF9JTl9QRCwKKwlQVEs2X0lOX1BELCBQVEs1X0lOX1BELCBQVEs0X0lOX1BELCBQVEszX0lOX1BELCBQVEsyX0lOX1BELCBQVEswX0lOX1BELAorCVBUTDdfSU5fUEQsIFBUTDZfSU5fUEQsIFBUTDVfSU5fUEQsIFBUTDRfSU5fUEQsCisJUFRMM19JTl9QRCwgUFRMMl9JTl9QRCwgUFRMMV9JTl9QRCwgUFRMMF9JTl9QRCwKKwlQVE03X0lOX1BELCBQVE02X0lOX1BELCBQVE01X0lOX1BELCBQVE00X0lOX1BELAorCVBUTTNfSU5fUEQsIFBUTTJfSU5fUEQsIFBUTTFfSU5fUEQsIFBUTTBfSU5fUEQsCisJUFRRNV9JTl9QRCwgUFRRNF9JTl9QRCwgUFRRM19JTl9QRCwgUFRRMl9JTl9QRCwKKwlQVFM0X0lOX1BELCBQVFMyX0lOX1BELCBQVFMxX0lOX1BELAorCVBUVDRfSU5fUEQsIFBUVDNfSU5fUEQsIFBUVDJfSU5fUEQsIFBUVDFfSU5fUEQsCisJUFRVNF9JTl9QRCwgUFRVM19JTl9QRCwgUFRVMl9JTl9QRCwgUFRVMV9JTl9QRCwgUFRVMF9JTl9QRCwKKwlQVFY0X0lOX1BELCBQVFYzX0lOX1BELCBQVFYyX0lOX1BELCBQVFYxX0lOX1BELCBQVFYwX0lOX1BELAorCVBUVzZfSU5fUEQsIFBUVzRfSU5fUEQsCVBUVzNfSU5fUEQsIFBUVzJfSU5fUEQsIFBUVzFfSU5fUEQsIFBUVzBfSU5fUEQsCisJUFRYNl9JTl9QRCwgUFRYNV9JTl9QRCwgUFRYNF9JTl9QRCwKKwlQVFgzX0lOX1BELCBQVFgyX0lOX1BELCBQVFgxX0lOX1BELCBQVFgwX0lOX1BELAorCVBJTk1VWF9JTlBVVF9QVUxMRE9XTl9FTkQsCisKKwlQSU5NVVhfSU5QVVRfUFVMTFVQX0JFR0lOLAorCVBUQzdfSU5fUFUsIFBUQzVfSU5fUFUsCisJUFREN19JTl9QVSwgUFRENl9JTl9QVSwgUFRENV9JTl9QVSwgUFRENF9JTl9QVSwKKwlQVEQzX0lOX1BVLCBQVEQyX0lOX1BVLCBQVEQxX0lOX1BVLAorCVBUSjFfSU5fUFUsIFBUSjBfSU5fUFUsCisJUFRRMF9JTl9QVSwKKwlQVFIyX0lOX1BVLAorCVBUWDZfSU5fUFUsCisJUFRZNV9JTl9QVSwgUFRZNF9JTl9QVSwgUFRZM19JTl9QVSwgUFRZMl9JTl9QVSwgUFRZMF9JTl9QVSwKKwlQVFo1X0lOX1BVLCBQVFo0X0lOX1BVLCBQVFozX0lOX1BVLCBQVFoyX0lOX1BVLCBQVFoxX0lOX1BVLAorCVBJTk1VWF9JTlBVVF9QVUxMVVBfRU5ELAorCisJUElOTVVYX09VVFBVVF9CRUdJTiwKKwlQVEE3X09VVCwgUFRBNV9PVVQsCisJUFRCN19PVVQsIFBUQjZfT1VULCBQVEI1X09VVCwgUFRCNF9PVVQsCisJUFRCM19PVVQsIFBUQjJfT1VULCBQVEIxX09VVCwgUFRCMF9PVVQsCisJUFRDNF9PVVQsIFBUQzNfT1VULCBQVEMyX09VVCwgUFRDMF9PVVQsCisJUFRENl9PVVQsIFBURDVfT1VULCBQVEQ0X09VVCwKKwlQVEQzX09VVCwgUFREMl9PVVQsIFBURDFfT1VULCBQVEQwX09VVCwKKwlQVEU3X09VVCwgUFRFNl9PVVQsIFBURTVfT1VULCBQVEU0X09VVCwgUFRFMV9PVVQsIFBURTBfT1VULAorCVBURjZfT1VULCBQVEY1X09VVCwgUFRGNF9PVVQsIFBURjNfT1VULCBQVEYyX09VVCwgUFRGMF9PVVQsCisJUFRHNF9PVVQsIFBURzNfT1VULCBQVEcyX09VVCwgUFRHMV9PVVQsIFBURzBfT1VULAorCVBUSDdfT1VULCBQVEg2X09VVCwgUFRINV9PVVQsIFBUSDRfT1VULAorCVBUSDNfT1VULCBQVEgyX09VVCwgUFRIMV9PVVQsIFBUSDBfT1VULAorCVBUSjdfT1VULCBQVEo2X09VVCwgUFRKNV9PVVQsIFBUSjFfT1VULCBQVEowX09VVCwKKwlQVEs2X09VVCwgUFRLNV9PVVQsIFBUSzRfT1VULCBQVEszX09VVCwgUFRLMV9PVVQsIFBUSzBfT1VULAorCVBUTDdfT1VULCBQVEw2X09VVCwgUFRMNV9PVVQsIFBUTDRfT1VULAorCVBUTDNfT1VULCBQVEwyX09VVCwgUFRMMV9PVVQsIFBUTDBfT1VULAorCVBUTTdfT1VULCBQVE02X09VVCwgUFRNNV9PVVQsIFBUTTRfT1VULAorCVBUTTNfT1VULCBQVE0yX09VVCwgUFRNMV9PVVQsIFBUTTBfT1VULAorCVBUTjdfT1VULCBQVE42X09VVCwgUFRONV9PVVQsIFBUTjRfT1VULAorCVBUTjNfT1VULCBQVE4yX09VVCwgUFROMV9PVVQsIFBUTjBfT1VULAlQVFE2X09VVCwgUFRRNV9PVVQsIFBUUTRfT1VULAorCVBUUTNfT1VULCBQVFEyX09VVCwgUFRRMV9PVVQsIFBUUTBfT1VULAorCVBUUjRfT1VULCBQVFIzX09VVCwgUFRSMV9PVVQsIFBUUjBfT1VULAorCVBUUzNfT1VULCBQVFMyX09VVCwgUFRTMF9PVVQsCisJUFRUNF9PVVQsIFBUVDNfT1VULCBQVFQyX09VVCwgUFRUMF9PVVQsCisJUFRVNF9PVVQsIFBUVTNfT1VULCBQVFUyX09VVCwgUFRVMF9PVVQsCisJUFRWNF9PVVQsIFBUVjNfT1VULCBQVFYyX09VVCwgUFRWMV9PVVQsIFBUVjBfT1VULAorCVBUVzVfT1VULCBQVFc0X09VVCwgUFRXM19PVVQsIFBUVzJfT1VULCBQVFcxX09VVCwgUFRXMF9PVVQsCisJUFRYNl9PVVQsIFBUWDVfT1VULCBQVFg0X09VVCwgUFRYM19PVVQsIFBUWDJfT1VULCBQVFgxX09VVCwgUFRYMF9PVVQsCisJUFRZNV9PVVQsIFBUWTRfT1VULCBQVFkzX09VVCwgUFRZMl9PVVQsIFBUWTFfT1VULCBQVFkwX09VVCwKKwlQSU5NVVhfT1VUUFVUX0VORCwKKworCVBJTk1VWF9NQVJLX0JFR0lOLAorCVNDSUYwX1RYRF9NQVJLLCBTQ0lGMF9SWERfTUFSSywKKwlTQ0lGMF9SVFNfTUFSSywgU0NJRjBfQ1RTX01BUkssIFNDSUYwX1NDS19NQVJLLAorCVNDSUYxX1RYRF9NQVJLLCBTQ0lGMV9SWERfTUFSSywKKwlTQ0lGMV9SVFNfTUFSSywgU0NJRjFfQ1RTX01BUkssIFNDSUYxX1NDS19NQVJLLAorCVNDSUYyX1RYRF9NQVJLLCBTQ0lGMl9SWERfTUFSSywKKwlTQ0lGMl9SVFNfTUFSSywgU0NJRjJfQ1RTX01BUkssIFNDSUYyX1NDS19NQVJLLAorCVNJT1RYRF9NQVJLLCBTSU9SWERfTUFSSywKKwlTSU9EX01BUkssIFNJT1NUUkIwX01BUkssIFNJT1NUUkIxX01BUkssCisJU0lPU0NLX01BUkssIFNJT01DS19NQVJLLAorCVZJT19EMTVfTUFSSywgVklPX0QxNF9NQVJLLCBWSU9fRDEzX01BUkssIFZJT19EMTJfTUFSSywKKwlWSU9fRDExX01BUkssIFZJT19EMTBfTUFSSywgVklPX0Q5X01BUkssIFZJT19EOF9NQVJLLAorCVZJT19EN19NQVJLLCBWSU9fRDZfTUFSSywgVklPX0Q1X01BUkssIFZJT19ENF9NQVJLLAorCVZJT19EM19NQVJLLCBWSU9fRDJfTUFSSywgVklPX0QxX01BUkssIFZJT19EMF9NQVJLLAorCVZJT19DTEtfTUFSSywgVklPX1ZEX01BUkssIFZJT19IRF9NQVJLLCBWSU9fRkxEX01BUkssCisJVklPX0NLT19NQVJLLCBWSU9fU1RFWF9NQVJLLCBWSU9fU1RFTV9NQVJLLCBWSU9fVkQyX01BUkssCisJVklPX0hEMl9NQVJLLCBWSU9fQ0xLMl9NQVJLLAorCUxDREQyM19NQVJLLCBMQ0REMjJfTUFSSywgTENERDIxX01BUkssIExDREQyMF9NQVJLLAorCUxDREQxOV9NQVJLLCBMQ0REMThfTUFSSywgTENERDE3X01BUkssIExDREQxNl9NQVJLLAorCUxDREQxNV9NQVJLLCBMQ0REMTRfTUFSSywgTENERDEzX01BUkssIExDREQxMl9NQVJLLAorCUxDREQxMV9NQVJLLCBMQ0REMTBfTUFSSywgTENERDlfTUFSSywgTENERDhfTUFSSywKKwlMQ0REN19NQVJLLCBMQ0RENl9NQVJLLCBMQ0RENV9NQVJLLCBMQ0RENF9NQVJLLAorCUxDREQzX01BUkssIExDREQyX01BUkssIExDREQxX01BUkssIExDREQwX01BUkssCisJTENETENMS19NQVJLLCBMQ0RET05fTUFSSywgTENEVkNQV0NfTUFSSywgTENEVkVQV0NfTUFSSywKKwlMQ0RWU1lOX01BUkssIExDRERDS19NQVJLLCBMQ0RIU1lOX01BUkssIExDRERJU1BfTUFSSywKKwlMQ0RSU19NQVJLLCBMQ0RDU19NQVJLLCBMQ0RXUl9NQVJLLCBMQ0RSRF9NQVJLLAorCUxDRERPTjJfTUFSSywgTENEVkNQV0MyX01BUkssIExDRFZFUFdDMl9NQVJLLCBMQ0RWU1lOMl9NQVJLLAorCUxDRENTMl9NQVJLLAorCUlPSVMxNl9NQVJLLCBBMjVfTUFSSywgQTI0X01BUkssIEEyM19NQVJLLCBBMjJfTUFSSywKKwlCU19NQVJLLCBDUzZCX0NFMUJfTUFSSywgV0FJVF9NQVJLLCBDUzZBX0NFMkJfTUFSSywKKwlIUEQ2M19NQVJLLCBIUEQ2Ml9NQVJLLCBIUEQ2MV9NQVJLLCBIUEQ2MF9NQVJLLAorCUhQRDU5X01BUkssIEhQRDU4X01BUkssIEhQRDU3X01BUkssIEhQRDU2X01BUkssCisJSFBENTVfTUFSSywgSFBENTRfTUFSSywgSFBENTNfTUFSSywgSFBENTJfTUFSSywKKwlIUEQ1MV9NQVJLLCBIUEQ1MF9NQVJLLCBIUEQ0OV9NQVJLLCBIUEQ0OF9NQVJLLAorCUhQRFFNN19NQVJLLCBIUERRTTZfTUFSSywgSFBEUU01X01BUkssIEhQRFFNNF9NQVJLLAorCUlSUTBfTUFSSywgSVJRMV9NQVJLLCBJUlEyX01BUkssIElSUTNfTUFSSywKKwlJUlE0X01BUkssIElSUTVfTUFSSywgSVJRNl9NQVJLLCBJUlE3X01BUkssCisJU0RISUNEX01BUkssIFNESElXUF9NQVJLLCBTREhJRDNfTUFSSywgU0RISUQyX01BUkssCisJU0RISUQxX01BUkssIFNESElEMF9NQVJLLCBTREhJQ01EX01BUkssIFNESElDTEtfTUFSSywKKwlTSVVBT0xSX01BUkssIFNJVUFPQlRfTUFSSywgU0lVQUlTTERfTUFSSywgU0lVQUlMUl9NQVJLLAorCVNJVUFJQlRfTUFSSywgU0lVQU9TTERfTUFSSywgU0lVTUNLQV9NQVJLLCBTSVVGQ0tBX01BUkssCisJU0lVQk9MUl9NQVJLLCBTSVVCT0JUX01BUkssIFNJVUJJU0xEX01BUkssIFNJVUJJTFJfTUFSSywKKwlTSVVCSUJUX01BUkssIFNJVUJPU0xEX01BUkssIFNJVU1DS0JfTUFSSywgU0lVRkNLQl9NQVJLLAorCUFVRFNZTkNfTUFSSywgQVVEQVRBM19NQVJLLCBBVURBVEEyX01BUkssIEFVREFUQTFfTUFSSywJQVVEQVRBMF9NQVJLLAorCURBQ0tfTUFSSywgRFJFUTBfTUFSSywKKwlEVl9DTEtJX01BUkssIERWX0NMS19NQVJLLCBEVl9IU1lOQ19NQVJLLCBEVl9WU1lOQ19NQVJLLAorCURWX0QxNV9NQVJLLCBEVl9EMTRfTUFSSywgRFZfRDEzX01BUkssIERWX0QxMl9NQVJLLAorCURWX0QxMV9NQVJLLCBEVl9EMTBfTUFSSywgRFZfRDlfTUFSSywgRFZfRDhfTUFSSywKKwlEVl9EN19NQVJLLCBEVl9ENl9NQVJLLCBEVl9ENV9NQVJLLCBEVl9ENF9NQVJLLAorCURWX0QzX01BUkssIERWX0QyX01BUkssIERWX0QxX01BUkssIERWX0QwX01BUkssCisJU1RBVFVTMF9NQVJLLCBQRFNUQVRVU19NQVJLLAorCVNJT0YwX01DS19NQVJLLCBTSU9GMF9TQ0tfTUFSSywKKwlTSU9GMF9TWU5DX01BUkssIFNJT0YwX1NTMV9NQVJLLCBTSU9GMF9TUzJfTUFSSywKKwlTSU9GMF9UWERfTUFSSywJU0lPRjBfUlhEX01BUkssCisJU0lPRjFfTUNLX01BUkssIFNJT0YxX1NDS19NQVJLLAorCVNJT0YxX1NZTkNfTUFSSywgU0lPRjFfU1MxX01BUkssIFNJT0YxX1NTMl9NQVJLLAorCVNJT0YxX1RYRF9NQVJLLCBTSU9GMV9SWERfTUFSSywKKwlTSU1fRF9NQVJLLCBTSU1fQ0xLX01BUkssIFNJTV9SU1RfTUFSSywKKwlUU19TREFUX01BUkssIFRTX1NDS19NQVJLLCBUU19TREVOX01BUkssIFRTX1NQU1lOQ19NQVJLLAorCUlSREFfSU5fTUFSSywgSVJEQV9PVVRfTUFSSywKKwlUUFVUT19NQVJLLAorCUZDRV9NQVJLLCBOQUY3X01BUkssIE5BRjZfTUFSSywgTkFGNV9NQVJLLCBOQUY0X01BUkssCisJTkFGM19NQVJLLCBOQUYyX01BUkssIE5BRjFfTUFSSywgTkFGMF9NQVJLLCBGQ0RFX01BUkssCisJRk9FX01BUkssIEZTQ19NQVJLLCBGV0VfTUFSSywgRlJCX01BUkssCisJS0VZSU4wX01BUkssIEtFWUlOMV9NQVJLLCBLRVlJTjJfTUFSSywgS0VZSU4zX01BUkssIEtFWUlONF9NQVJLLAorCUtFWU9VVDBfTUFSSywgS0VZT1VUMV9NQVJLLCBLRVlPVVQyX01BUkssIEtFWU9VVDNfTUFSSywKKwlLRVlPVVQ0X0lONl9NQVJLLCBLRVlPVVQ1X0lONV9NQVJLLAorCVBJTk1VWF9NQVJLX0VORCwKKworCVBJTk1VWF9GVU5DVElPTl9CRUdJTiwKKwlWSU9fRDdfU0NJRjFfU0NLLCBWSU9fRDZfU0NJRjFfUlhELCBWSU9fRDVfU0NJRjFfVFhELCBWSU9fRDQsCisJVklPX0QzLCBWSU9fRDIsIFZJT19EMSwgVklPX0QwX0xDRExDTEssCisJSFBENTUsIEhQRDU0LCBIUEQ1MywgSFBENTIsIEhQRDUxLCBIUEQ1MCwgSFBENDksIEhQRDQ4LAorCUlPSVMxNiwgSFBEUU03LCBIUERRTTYsIEhQRFFNNSwgSFBEUU00LAorCVNESElDRCwgU0RISVdQLCBTREhJRDMsIElSUTJfU0RISUQyLCBTREhJRDEsIFNESElEMCwgU0RISUNNRCwgU0RISUNMSywKKwlBMjUsIEEyNCwgQTIzLCBBMjIsIElSUTUsIElSUTRfQlMsCisJUFRGNiwgU0lPU0NLX1NJVUJPQlQsIFNJT1NUUkIxX1NJVUJPTFIsCisJU0lPU1RSQjBfU0lVQklCVCwgU0lPRF9TSVVCSUxSLCBTSU9SWERfU0lVQklTTEQsIFNJT1RYRF9TSVVCT1NMRCwKKwlBVURTWU5DLCBBVURBVEEzLCBBVURBVEEyLCBBVURBVEExLCBBVURBVEEwLAorCUxDRFZDUFdDX0xDRFZDUFdDMiwgTENEVlNZTjJfREFDSywgTENEVlNZTiwgTENERElTUF9MQ0RSUywKKwlMQ0RIU1lOX0xDRENTLCBMQ0RET05fTENERE9OMiwgTENERDE3X0RWX0hTWU5DLCBMQ0REMTZfRFZfVlNZTkMsCisJU1RBVFVTMCwgUERTVEFUVVMsIElSUTEsIElSUTAsCisJU0lVQUlMUl9TSU9GMV9TUzIsIFNJVUFJQlRfU0lPRjFfU1MxLCBTSVVBT0xSX1NJT0YxX1NZTkMsCisJU0lVQU9CVF9TSU9GMV9TQ0ssIFNJVUFJU0xEX1NJT0YxX1JYRCwgU0lVQU9TTERfU0lPRjFfVFhELCBQVEswLAorCUxDREQxNV9EVl9EMTUsIExDREQxNF9EVl9EMTQsIExDREQxM19EVl9EMTMsIExDREQxMl9EVl9EMTIsCisJTENERDExX0RWX0QxMSwgTENERDEwX0RWX0QxMCwgTENERDlfRFZfRDksIExDREQ4X0RWX0Q4LAorCUxDREQ3X0RWX0Q3LCBMQ0RENl9EVl9ENiwgTENERDVfRFZfRDUsIExDREQ0X0RWX0Q0LAorCUxDREQzX0RWX0QzLCBMQ0REMl9EVl9EMiwgTENERDFfRFZfRDEsIExDREQwX0RWX0QwLAorCUhQRDYzLCBIUEQ2MiwgSFBENjEsIEhQRDYwLCBIUEQ1OSwgSFBENTgsIEhQRDU3LCBIUEQ1NiwKKwlTSU9GMF9TUzJfU0lNX1JTVCwgU0lPRjBfU1MxX1RTX1NQU1lOQywgU0lPRjBfU1lOQ19UU19TREVOLAorCVNJT0YwX1NDS19UU19TQ0ssIFBUUTIsIFBUUTEsIFBUUTAsCisJTENEUkQsIENTNkJfQ0UxQl9MQ0RDUzIsIFdBSVQsIExDRERDS19MQ0RXUiwgTENEVkVQV0NfTENEVkVQV0MyLAorCVNDSUYwX0NUU19TSVVBSVNQRCwgU0NJRjBfUlRTX1NJVUFPU1BELAorCVNDSUYwX1NDS19UUFVUTywgU0NJRjBfUlhELCBTQ0lGMF9UWEQsCisJRk9FX1ZJT19WRDIsIEZXRSwgRlNDLCBEUkVRMCwgRkNERSwKKwlOQUYyX1ZJT19EMTAsIE5BRjFfVklPX0Q5LCBOQUYwX1ZJT19EOCwKKwlGUkJfVklPX0NMSzIsIEZDRV9WSU9fSEQyLAorCU5BRjdfVklPX0QxNSwgTkFGNl9WSU9fRDE0LCBOQUY1X1ZJT19EMTMsIE5BRjRfVklPX0QxMiwgTkFGM19WSU9fRDExLAorCVZJT19GTERfU0NJRjJfQ1RTLCBWSU9fQ0tPX1NDSUYyX1JUUywgVklPX1NURVhfU0NJRjJfU0NLLAorCVZJT19TVEVNX1NDSUYyX1RYRCwgVklPX0hEX1NDSUYyX1JYRCwKKwlWSU9fVkRfU0NJRjFfQ1RTLCBWSU9fQ0xLX1NDSUYxX1JUUywKKwlDUzZBX0NFMkIsIExDREQyMywgTENERDIyLCBMQ0REMjEsIExDREQyMCwKKwlMQ0REMTlfRFZfQ0xLSSwgTENERDE4X0RWX0NMSywKKwlLRVlPVVQ1X0lONSwgS0VZT1VUNF9JTjYsIEtFWU9VVDMsIEtFWU9VVDIsIEtFWU9VVDEsIEtFWU9VVDAsCisJS0VZSU40X0lSUTcsIEtFWUlOMywgS0VZSU4yLCBLRVlJTjEsIEtFWUlOMF9JUlE2LAorCisJUFNBMTVfS0VZSU4wLCBQU0ExNV9JUlE2LCBQU0ExNF9LRVlJTjQsIFBTQTE0X0lSUTcsCisJUFNBOV9JUlE0LCBQU0E5X0JTLCBQU0E0X0lSUTIsIFBTQTRfU0RISUQyLAorCVBTQjE1X1NJT1RYRCwgUFNCMTVfU0lVQk9TTEQsIFBTQjE0X1NJT1JYRCwgUFNCMTRfU0lVQklTTEQsCisJUFNCMTNfU0lPRCwgUFNCMTNfU0lVQklMUiwgUFNCMTJfU0lPU1RSQjAsIFBTQjEyX1NJVUJJQlQsCisJUFNCMTFfU0lPU1RSQjEsIFBTQjExX1NJVUJPTFIsIFBTQjEwX1NJT1NDSywgUFNCMTBfU0lVQk9CVCwKKwlQU0I5X1NJT01DSywgUFNCOV9TSVVNQ0tCLCBQU0I4X1NJT0YwX01DSywgUFNCOF9JUlEzLAorCVBTQjdfU0lPRjBfVFhELCBQU0I3X0lSREFfT1VULCBQU0I2X1NJT0YwX1JYRCwgUFNCNl9JUkRBX0lOLAorCVBTQjVfU0lPRjBfU0NLLCBQU0I1X1RTX1NDSywgUFNCNF9TSU9GMF9TWU5DLCBQU0I0X1RTX1NERU4sCisJUFNCM19TSU9GMF9TUzEsIFBTQjNfVFNfU1BTWU5DLCBQU0IyX1NJT0YwX1NTMiwgUFNCMl9TSU1fUlNULAorCVBTQjFfU0lVTUNLQSwgUFNCMV9TSU9GMV9NQ0ssIFBTQjBfU0lVQU9TTEQsIFBTQjBfU0lPRjFfVFhELAorCVBTQzE1X1NJVUFJU0xELCBQU0MxNV9TSU9GMV9SWEQsIFBTQzE0X1NJVUFPQlQsIFBTQzE0X1NJT0YxX1NDSywKKwlQU0MxM19TSVVBT0xSLCBQU0MxM19TSU9GMV9TWU5DLCBQU0MxMl9TSVVBSUJULCBQU0MxMl9TSU9GMV9TUzEsCisJUFNDMTFfU0lVQUlMUiwgUFNDMTFfU0lPRjFfU1MyLCBQU0MwX05BRiwgUFNDMF9WSU8sCisJUFNEMTNfVklPLCBQU0QxM19TQ0lGMiwgUFNEMTJfVklPLCBQU0QxMl9TQ0lGMSwKKwlQU0QxMV9WSU8sIFBTRDExX1NDSUYxLCBQU0QxMF9WSU9fRDAsIFBTRDEwX0xDRExDTEssCisJUFNEOV9TSU9NQ0tfU0lVTUNLQiwgUFNEOV9TSVVGQ0tCLCBQU0Q4X1NDSUYwX1NDSywgUFNEOF9UUFVUTywKKwlQU0Q3X1NDSUYwX1JUUywgUFNEN19TSVVBT1NQRCwgUFNENl9TQ0lGMF9DVFMsIFBTRDZfU0lVQUlTUEQsCisJUFNENV9DUzZCX0NFMUIsIFBTRDVfTENEQ1MyLAorCVBTRDNfTENEVkVQV0NfTENEVkNQV0MsIFBTRDNfTENEVkVQV0MyX0xDRFZDUFdDMiwKKwlQU0QyX0xDRERPTiwgUFNEMl9MQ0RET04yLCBQU0QwX0xDREQxOV9MQ0REMCwgUFNEMF9EViwKKwlQU0UxNV9TSU9GMF9NQ0tfSVJRMywgUFNFMTVfU0lNX0QsCisJUFNFMTRfU0lPRjBfVFhEX0lSREFfT1VULCBQU0UxNF9TSU1fQ0xLLAorCVBTRTEzX1NJT0YwX1JYRF9JUkRBX0lOLCBQU0UxM19UU19TREFULCBQU0UxMl9MQ0RWU1lOMiwgUFNFMTJfREFDSywKKwlQU0UxMV9TSVVNQ0tBX1NJT0YxX01DSywgUFNFMTFfU0lVRkNLQSwKKwlQU0UzX0ZMQ1RMLCBQU0UzX1ZJTywgUFNFMl9OQUYyLCBQU0UyX1ZJT19EMTAsCisJUFNFMV9OQUYxLCBQU0UxX1ZJT19EOSwgUFNFMF9OQUYwLCBQU0UwX1ZJT19EOCwKKworCUhJWkExNF9LRVlTQywgSElaQTE0X0hJWiwKKwlISVpBMTBfTkFGLCBISVpBMTBfSElaLAorCUhJWkE5X1ZJTywgSElaQTlfSElaLAorCUhJWkE4X0xDREMsIEhJWkE4X0hJWiwKKwlISVpBN19MQ0RDLCBISVpBN19ISVosCisJSElaQTZfTENEQywgSElaQTZfSElaLAorCUhJWkIxX1ZJTywgSElaQjFfSElaLAorCUhJWkIwX1ZJTywgSElaQjBfSElaLAorCUhJWkMxNV9JUlE3LCBISVpDMTVfSElaLAorCUhJWkMxNF9JUlE2LCBISVpDMTRfSElaLAorCUhJWkMxM19JUlE1LCBISVpDMTNfSElaLAorCUhJWkMxMl9JUlE0LCBISVpDMTJfSElaLAorCUhJWkMxMV9JUlEzLCBISVpDMTFfSElaLAorCUhJWkMxMF9JUlEyLCBISVpDMTBfSElaLAorCUhJWkM5X0lSUTEsIEhJWkM5X0hJWiwKKwlISVpDOF9JUlEwLCBISVpDOF9ISVosCisJTVNFTEI5X1ZJTywgTVNFTEI5X1ZJTzIsCisJTVNFTEI4X1JHQiwgTVNFTEI4X1NZUywKKwlQSU5NVVhfRlVOQ1RJT05fRU5ELAorfTsKKworc3RhdGljIHBpbm11eF9lbnVtX3QgcGlubXV4X2RhdGFbXSA9IHsKKwkvKiBQVEEgKi8KKwlQSU5NVVhfREFUQShQVEE3X0RBVEEsIFBUQTdfSU4sIFBUQTdfSU5fUEQsIFBUQTdfT1VUKSwKKwlQSU5NVVhfREFUQShQVEE2X0RBVEEsIFBUQTZfSU4sIFBUQTZfSU5fUEQpLAorCVBJTk1VWF9EQVRBKFBUQTVfREFUQSwgUFRBNV9JTiwgUFRBNV9JTl9QRCwgUFRBNV9PVVQpLAorCVBJTk1VWF9EQVRBKFBUQTRfREFUQSwgUFRBNF9JTiwgUFRBNF9JTl9QRCksCisJUElOTVVYX0RBVEEoUFRBM19EQVRBLCBQVEEzX0lOLCBQVEEzX0lOX1BEKSwKKwlQSU5NVVhfREFUQShQVEEyX0RBVEEsIFBUQTJfSU4sIFBUQTJfSU5fUEQpLAorCVBJTk1VWF9EQVRBKFBUQTFfREFUQSwgUFRBMV9JTiwgUFRBMV9JTl9QRCksCisJUElOTVVYX0RBVEEoUFRBMF9EQVRBLCBQVEEwX0lOLCBQVEEwX0lOX1BEKSwKKworCS8qIFBUQiAqLworCVBJTk1VWF9EQVRBKFBUQjdfREFUQSwgUFRCN19JTiwgUFRCN19PVVQpLAorCVBJTk1VWF9EQVRBKFBUQjZfREFUQSwgUFRCNl9JTiwgUFRCNl9PVVQpLAorCVBJTk1VWF9EQVRBKFBUQjVfREFUQSwgUFRCNV9JTiwgUFRCNV9PVVQpLAorCVBJTk1VWF9EQVRBKFBUQjRfREFUQSwgUFRCNF9JTiwgUFRCNF9PVVQpLAorCVBJTk1VWF9EQVRBKFBUQjNfREFUQSwgUFRCM19JTiwgUFRCM19PVVQpLAorCVBJTk1VWF9EQVRBKFBUQjJfREFUQSwgUFRCMl9JTiwgUFRCMl9PVVQpLAorCVBJTk1VWF9EQVRBKFBUQjFfREFUQSwgUFRCMV9JTiwgUFRCMV9PVVQpLAorCVBJTk1VWF9EQVRBKFBUQjBfREFUQSwgUFRCMF9JTiwgUFRCMF9PVVQpLAorCisJLyogUFRDICovCisJUElOTVVYX0RBVEEoUFRDN19EQVRBLCBQVEM3X0lOLCBQVEM3X0lOX1BVKSwKKwlQSU5NVVhfREFUQShQVEM1X0RBVEEsIFBUQzVfSU4sIFBUQzVfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBUQzRfREFUQSwgUFRDNF9JTiwgUFRDNF9PVVQpLAorCVBJTk1VWF9EQVRBKFBUQzNfREFUQSwgUFRDM19JTiwgUFRDM19PVVQpLAorCVBJTk1VWF9EQVRBKFBUQzJfREFUQSwgUFRDMl9JTiwgUFRDMl9PVVQpLAorCVBJTk1VWF9EQVRBKFBUQzBfREFUQSwgUFRDMF9JTiwgUFRDMF9PVVQpLAorCisJLyogUFREICovCisJUElOTVVYX0RBVEEoUFREN19EQVRBLCBQVEQ3X0lOLCBQVEQ3X0lOX1BVKSwKKwlQSU5NVVhfREFUQShQVEQ2X0RBVEEsIFBURDZfT1VULCBQVEQ2X0lOLCBQVEQ2X0lOX1BVKSwKKwlQSU5NVVhfREFUQShQVEQ1X0RBVEEsIFBURDVfT1VULCBQVEQ1X0lOLCBQVEQ1X0lOX1BVKSwKKwlQSU5NVVhfREFUQShQVEQ0X0RBVEEsIFBURDRfT1VULCBQVEQ0X0lOLCBQVEQ0X0lOX1BVKSwKKwlQSU5NVVhfREFUQShQVEQzX0RBVEEsIFBURDNfT1VULCBQVEQzX0lOLCBQVEQzX0lOX1BVKSwKKwlQSU5NVVhfREFUQShQVEQyX0RBVEEsIFBURDJfT1VULCBQVEQyX0lOLCBQVEQyX0lOX1BVKSwKKwlQSU5NVVhfREFUQShQVEQxX0RBVEEsIFBURDFfT1VULCBQVEQxX0lOLCBQVEQxX0lOX1BVKSwKKwlQSU5NVVhfREFUQShQVEQwX0RBVEEsIFBURDBfT1VUKSwKKworCS8qIFBURSAqLworCVBJTk1VWF9EQVRBKFBURTdfREFUQSwgUFRFN19PVVQsIFBURTdfSU4sIFBURTdfSU5fUEQpLAorCVBJTk1VWF9EQVRBKFBURTZfREFUQSwgUFRFNl9PVVQsIFBURTZfSU4sIFBURTZfSU5fUEQpLAorCVBJTk1VWF9EQVRBKFBURTVfREFUQSwgUFRFNV9PVVQsIFBURTVfSU4sIFBURTVfSU5fUEQpLAorCVBJTk1VWF9EQVRBKFBURTRfREFUQSwgUFRFNF9PVVQsIFBURTRfSU4sIFBURTRfSU5fUEQpLAorCVBJTk1VWF9EQVRBKFBURTFfREFUQSwgUFRFMV9PVVQsIFBURTFfSU4sIFBURTFfSU5fUEQpLAorCVBJTk1VWF9EQVRBKFBURTBfREFUQSwgUFRFMF9PVVQsIFBURTBfSU4sIFBURTBfSU5fUEQpLAorCisJLyogUFRGICovCisJUElOTVVYX0RBVEEoUFRGNl9EQVRBLCBQVEY2X09VVCwgUFRGNl9JTiwgUFRGNl9JTl9QRCksCisJUElOTVVYX0RBVEEoUFRGNV9EQVRBLCBQVEY1X09VVCwgUFRGNV9JTiwgUFRGNV9JTl9QRCksCisJUElOTVVYX0RBVEEoUFRGNF9EQVRBLCBQVEY0X09VVCwgUFRGNF9JTiwgUFRGNF9JTl9QRCksCisJUElOTVVYX0RBVEEoUFRGM19EQVRBLCBQVEYzX09VVCwgUFRGM19JTiwgUFRGM19JTl9QRCksCisJUElOTVVYX0RBVEEoUFRGMl9EQVRBLCBQVEYyX09VVCwgUFRGMl9JTiwgUFRGMl9JTl9QRCksCisJUElOTVVYX0RBVEEoUFRGMV9EQVRBLCBQVEYxX0lOLCBQVEYxX0lOX1BEKSwKKwlQSU5NVVhfREFUQShQVEYwX0RBVEEsIFBURjBfT1VUKSwKKworCS8qIFBURyAqLworCVBJTk1VWF9EQVRBKFBURzRfREFUQSwgUFRHNF9PVVQpLAorCVBJTk1VWF9EQVRBKFBURzNfREFUQSwgUFRHM19PVVQpLAorCVBJTk1VWF9EQVRBKFBURzJfREFUQSwgUFRHMl9PVVQpLAorCVBJTk1VWF9EQVRBKFBURzFfREFUQSwgUFRHMV9PVVQpLAorCVBJTk1VWF9EQVRBKFBURzBfREFUQSwgUFRHMF9PVVQpLAorCisJLyogUFRIICovCisJUElOTVVYX0RBVEEoUFRIN19EQVRBLCBQVEg3X09VVCksCisJUElOTVVYX0RBVEEoUFRINl9EQVRBLCBQVEg2X09VVCwgUFRINl9JTiwgUFRINl9JTl9QRCksCisJUElOTVVYX0RBVEEoUFRINV9EQVRBLCBQVEg1X09VVCwgUFRINV9JTiwgUFRINV9JTl9QRCksCisJUElOTVVYX0RBVEEoUFRINF9EQVRBLCBQVEg0X09VVCksCisJUElOTVVYX0RBVEEoUFRIM19EQVRBLCBQVEgzX09VVCksCisJUElOTVVYX0RBVEEoUFRIMl9EQVRBLCBQVEgyX09VVCksCisJUElOTVVYX0RBVEEoUFRIMV9EQVRBLCBQVEgxX09VVCwgUFRIMV9JTiwgUFRIMV9JTl9QRCksCisJUElOTVVYX0RBVEEoUFRIMF9EQVRBLCBQVEgwX09VVCwgUFRIMF9JTiwgUFRIMF9JTl9QRCksCisKKwkvKiBQVEogKi8KKwlQSU5NVVhfREFUQShQVEo3X0RBVEEsIFBUSjdfT1VUKSwKKwlQSU5NVVhfREFUQShQVEo2X0RBVEEsIFBUSjZfT1VUKSwKKwlQSU5NVVhfREFUQShQVEo1X0RBVEEsIFBUSjVfT1VUKSwKKwlQSU5NVVhfREFUQShQVEoxX0RBVEEsIFBUSjFfT1VULCBQVEoxX0lOLCBQVEoxX0lOX1BVKSwKKwlQSU5NVVhfREFUQShQVEowX0RBVEEsIFBUSjBfT1VULCBQVEowX0lOLCBQVEowX0lOX1BVKSwKKworCS8qIFBUSyAqLworCVBJTk1VWF9EQVRBKFBUSzZfREFUQSwgUFRLNl9PVVQsIFBUSzZfSU4sIFBUSzZfSU5fUEQpLAorCVBJTk1VWF9EQVRBKFBUSzVfREFUQSwgUFRLNV9PVVQsIFBUSzVfSU4sIFBUSzVfSU5fUEQpLAorCVBJTk1VWF9EQVRBKFBUSzRfREFUQSwgUFRLNF9PVVQsIFBUSzRfSU4sIFBUSzRfSU5fUEQpLAorCVBJTk1VWF9EQVRBKFBUSzNfREFUQSwgUFRLM19PVVQsIFBUSzNfSU4sIFBUSzNfSU5fUEQpLAorCVBJTk1VWF9EQVRBKFBUSzJfREFUQSwgUFRLMl9JTiwgUFRLMl9JTl9QRCksCisJUElOTVVYX0RBVEEoUFRLMV9EQVRBLCBQVEsxX09VVCksCisJUElOTVVYX0RBVEEoUFRLMF9EQVRBLCBQVEswX09VVCwgUFRLMF9JTiwgUFRLMF9JTl9QRCksCisKKwkvKiBQVEwgKi8KKwlQSU5NVVhfREFUQShQVEw3X0RBVEEsIFBUTDdfT1VULCBQVEw3X0lOLCBQVEw3X0lOX1BEKSwKKwlQSU5NVVhfREFUQShQVEw2X0RBVEEsIFBUTDZfT1VULCBQVEw2X0lOLCBQVEw2X0lOX1BEKSwKKwlQSU5NVVhfREFUQShQVEw1X0RBVEEsIFBUTDVfT1VULCBQVEw1X0lOLCBQVEw1X0lOX1BEKSwKKwlQSU5NVVhfREFUQShQVEw0X0RBVEEsIFBUTDRfT1VULCBQVEw0X0lOLCBQVEw0X0lOX1BEKSwKKwlQSU5NVVhfREFUQShQVEwzX0RBVEEsIFBUTDNfT1VULCBQVEwzX0lOLCBQVEwzX0lOX1BEKSwKKwlQSU5NVVhfREFUQShQVEwyX0RBVEEsIFBUTDJfT1VULCBQVEwyX0lOLCBQVEwyX0lOX1BEKSwKKwlQSU5NVVhfREFUQShQVEwxX0RBVEEsIFBUTDFfT1VULCBQVEwxX0lOLCBQVEwxX0lOX1BEKSwKKwlQSU5NVVhfREFUQShQVEwwX0RBVEEsIFBUTDBfT1VULCBQVEwwX0lOLCBQVEwwX0lOX1BEKSwKKworCS8qIFBUTSAqLworCVBJTk1VWF9EQVRBKFBUTTdfREFUQSwgUFRNN19PVVQsIFBUTTdfSU4sIFBUTTdfSU5fUEQpLAorCVBJTk1VWF9EQVRBKFBUTTZfREFUQSwgUFRNNl9PVVQsIFBUTTZfSU4sIFBUTTZfSU5fUEQpLAorCVBJTk1VWF9EQVRBKFBUTTVfREFUQSwgUFRNNV9PVVQsIFBUTTVfSU4sIFBUTTVfSU5fUEQpLAorCVBJTk1VWF9EQVRBKFBUTTRfREFUQSwgUFRNNF9PVVQsIFBUTTRfSU4sIFBUTTRfSU5fUEQpLAorCVBJTk1VWF9EQVRBKFBUTTNfREFUQSwgUFRNM19PVVQsIFBUTTNfSU4sIFBUTTNfSU5fUEQpLAorCVBJTk1VWF9EQVRBKFBUTTJfREFUQSwgUFRNMl9PVVQsIFBUTTJfSU4sIFBUTTJfSU5fUEQpLAorCVBJTk1VWF9EQVRBKFBUTTFfREFUQSwgUFRNMV9PVVQsIFBUTTFfSU4sIFBUTTFfSU5fUEQpLAorCVBJTk1VWF9EQVRBKFBUTTBfREFUQSwgUFRNMF9PVVQsIFBUTTBfSU4sIFBUTTBfSU5fUEQpLAorCisJLyogUFROICovCisJUElOTVVYX0RBVEEoUFRON19EQVRBLCBQVE43X09VVCwgUFRON19JTiksCisJUElOTVVYX0RBVEEoUFRONl9EQVRBLCBQVE42X09VVCwgUFRONl9JTiksCisJUElOTVVYX0RBVEEoUFRONV9EQVRBLCBQVE41X09VVCwgUFRONV9JTiksCisJUElOTVVYX0RBVEEoUFRONF9EQVRBLCBQVE40X09VVCwgUFRONF9JTiksCisJUElOTVVYX0RBVEEoUFROM19EQVRBLCBQVE4zX09VVCwgUFROM19JTiksCisJUElOTVVYX0RBVEEoUFROMl9EQVRBLCBQVE4yX09VVCwgUFROMl9JTiksCisJUElOTVVYX0RBVEEoUFROMV9EQVRBLCBQVE4xX09VVCwgUFROMV9JTiksCisJUElOTVVYX0RBVEEoUFROMF9EQVRBLCBQVE4wX09VVCwgUFROMF9JTiksCisKKwkvKiBQVFEgKi8KKwlQSU5NVVhfREFUQShQVFE2X0RBVEEsIFBUUTZfT1VUKSwKKwlQSU5NVVhfREFUQShQVFE1X0RBVEEsIFBUUTVfT1VULCBQVFE1X0lOLCBQVFE1X0lOX1BEKSwKKwlQSU5NVVhfREFUQShQVFE0X0RBVEEsIFBUUTRfT1VULCBQVFE0X0lOLCBQVFE0X0lOX1BEKSwKKwlQSU5NVVhfREFUQShQVFEzX0RBVEEsIFBUUTNfT1VULCBQVFEzX0lOLCBQVFEzX0lOX1BEKSwKKwlQSU5NVVhfREFUQShQVFEyX0RBVEEsIFBUUTJfSU4sIFBUUTJfSU5fUEQpLAorCVBJTk1VWF9EQVRBKFBUUTFfREFUQSwgUFRRMV9PVVQpLAorCVBJTk1VWF9EQVRBKFBUUTBfREFUQSwgUFRRMF9PVVQsIFBUUTBfSU4sIFBUUTBfSU5fUFUpLAorCisJLyogUFRSICovCisJUElOTVVYX0RBVEEoUFRSNF9EQVRBLCBQVFI0X09VVCksCisJUElOTVVYX0RBVEEoUFRSM19EQVRBLCBQVFIzX09VVCksCisJUElOTVVYX0RBVEEoUFRSMl9EQVRBLCBQVFIyX0lOLCBQVFIyX0lOX1BVKSwKKwlQSU5NVVhfREFUQShQVFIxX0RBVEEsIFBUUjFfT1VUKSwKKwlQSU5NVVhfREFUQShQVFIwX0RBVEEsIFBUUjBfT1VUKSwKKworCS8qIFBUUyAqLworCVBJTk1VWF9EQVRBKFBUUzRfREFUQSwgUFRTNF9JTiwgUFRTNF9JTl9QRCksCisJUElOTVVYX0RBVEEoUFRTM19EQVRBLCBQVFMzX09VVCksCisJUElOTVVYX0RBVEEoUFRTMl9EQVRBLCBQVFMyX09VVCwgUFRTMl9JTiwgUFRTMl9JTl9QRCksCisJUElOTVVYX0RBVEEoUFRTMV9EQVRBLCBQVFMxX0lOLCBQVFMxX0lOX1BEKSwKKwlQSU5NVVhfREFUQShQVFMwX0RBVEEsIFBUUzBfT1VUKSwKKworCS8qIFBUVCAqLworCVBJTk1VWF9EQVRBKFBUVDRfREFUQSwgUFRUNF9PVVQsIFBUVDRfSU4sIFBUVDRfSU5fUEQpLAorCVBJTk1VWF9EQVRBKFBUVDNfREFUQSwgUFRUM19PVVQsIFBUVDNfSU4sIFBUVDNfSU5fUEQpLAorCVBJTk1VWF9EQVRBKFBUVDJfREFUQSwgUFRUMl9PVVQsIFBUVDJfSU4sIFBUVDJfSU5fUEQpLAorCVBJTk1VWF9EQVRBKFBUVDFfREFUQSwgUFRUMV9JTiwgUFRUMV9JTl9QRCksCisJUElOTVVYX0RBVEEoUFRUMF9EQVRBLCBQVFQwX09VVCksCisKKwkvKiBQVFUgKi8KKwlQSU5NVVhfREFUQShQVFU0X0RBVEEsIFBUVTRfT1VULCBQVFU0X0lOLCBQVFU0X0lOX1BEKSwKKwlQSU5NVVhfREFUQShQVFUzX0RBVEEsIFBUVTNfT1VULCBQVFUzX0lOLCBQVFUzX0lOX1BEKSwKKwlQSU5NVVhfREFUQShQVFUyX0RBVEEsIFBUVTJfT1VULCBQVFUyX0lOLCBQVFUyX0lOX1BEKSwKKwlQSU5NVVhfREFUQShQVFUxX0RBVEEsIFBUVTFfSU4sIFBUVTFfSU5fUEQpLAorCVBJTk1VWF9EQVRBKFBUVTBfREFUQSwgUFRVMF9PVVQsIFBUVTBfSU4sIFBUVTBfSU5fUEQpLAorCisJLyogUFRWICovCisJUElOTVVYX0RBVEEoUFRWNF9EQVRBLCBQVFY0X09VVCwgUFRWNF9JTiwgUFRWNF9JTl9QRCksCisJUElOTVVYX0RBVEEoUFRWM19EQVRBLCBQVFYzX09VVCwgUFRWM19JTiwgUFRWM19JTl9QRCksCisJUElOTVVYX0RBVEEoUFRWMl9EQVRBLCBQVFYyX09VVCwgUFRWMl9JTiwgUFRWMl9JTl9QRCksCisJUElOTVVYX0RBVEEoUFRWMV9EQVRBLCBQVFYxX09VVCwgUFRWMV9JTiwgUFRWMV9JTl9QRCksCisJUElOTVVYX0RBVEEoUFRWMF9EQVRBLCBQVFYwX09VVCwgUFRWMF9JTiwgUFRWMF9JTl9QRCksCisKKwkvKiBQVFcgKi8KKwlQSU5NVVhfREFUQShQVFc2X0RBVEEsIFBUVzZfSU4sIFBUVzZfSU5fUEQpLAorCVBJTk1VWF9EQVRBKFBUVzVfREFUQSwgUFRXNV9PVVQpLAorCVBJTk1VWF9EQVRBKFBUVzRfREFUQSwgUFRXNF9PVVQsIFBUVzRfSU4sIFBUVzRfSU5fUEQpLAorCVBJTk1VWF9EQVRBKFBUVzNfREFUQSwgUFRXM19PVVQsIFBUVzNfSU4sIFBUVzNfSU5fUEQpLAorCVBJTk1VWF9EQVRBKFBUVzJfREFUQSwgUFRXMl9PVVQsIFBUVzJfSU4sIFBUVzJfSU5fUEQpLAorCVBJTk1VWF9EQVRBKFBUVzFfREFUQSwgUFRXMV9PVVQsIFBUVzFfSU4sIFBUVzFfSU5fUEQpLAorCVBJTk1VWF9EQVRBKFBUVzBfREFUQSwgUFRXMF9PVVQsIFBUVzBfSU4sIFBUVzBfSU5fUEQpLAorCisJLyogUFRYICovCisJUElOTVVYX0RBVEEoUFRYNl9EQVRBLCBQVFg2X09VVCwgUFRYNl9JTiwgUFRYNl9JTl9QRCksCisJUElOTVVYX0RBVEEoUFRYNV9EQVRBLCBQVFg1X09VVCwgUFRYNV9JTiwgUFRYNV9JTl9QRCksCisJUElOTVVYX0RBVEEoUFRYNF9EQVRBLCBQVFg0X09VVCwgUFRYNF9JTiwgUFRYNF9JTl9QRCksCisJUElOTVVYX0RBVEEoUFRYM19EQVRBLCBQVFgzX09VVCwgUFRYM19JTiwgUFRYM19JTl9QRCksCisJUElOTVVYX0RBVEEoUFRYMl9EQVRBLCBQVFgyX09VVCwgUFRYMl9JTiwgUFRYMl9JTl9QRCksCisJUElOTVVYX0RBVEEoUFRYMV9EQVRBLCBQVFgxX09VVCwgUFRYMV9JTiwgUFRYMV9JTl9QRCksCisJUElOTVVYX0RBVEEoUFRYMF9EQVRBLCBQVFgwX09VVCwgUFRYMF9JTiwgUFRYMF9JTl9QRCksCisKKwkvKiBQVFkgKi8KKwlQSU5NVVhfREFUQShQVFk1X0RBVEEsIFBUWTVfT1VULCBQVFk1X0lOLCBQVFk1X0lOX1BVKSwKKwlQSU5NVVhfREFUQShQVFk0X0RBVEEsIFBUWTRfT1VULCBQVFk0X0lOLCBQVFk0X0lOX1BVKSwKKwlQSU5NVVhfREFUQShQVFkzX0RBVEEsIFBUWTNfT1VULCBQVFkzX0lOLCBQVFkzX0lOX1BVKSwKKwlQSU5NVVhfREFUQShQVFkyX0RBVEEsIFBUWTJfT1VULCBQVFkyX0lOLCBQVFkyX0lOX1BVKSwKKwlQSU5NVVhfREFUQShQVFkxX0RBVEEsIFBUWTFfT1VUKSwKKwlQSU5NVVhfREFUQShQVFkwX0RBVEEsIFBUWTBfT1VULCBQVFkwX0lOLCBQVFkwX0lOX1BVKSwKKworCS8qIFBUWiAqLworCVBJTk1VWF9EQVRBKFBUWjVfREFUQSwgUFRaNV9JTiwgUFRaNV9JTl9QVSksCisJUElOTVVYX0RBVEEoUFRaNF9EQVRBLCBQVFo0X0lOLCBQVFo0X0lOX1BVKSwKKwlQSU5NVVhfREFUQShQVFozX0RBVEEsIFBUWjNfSU4sIFBUWjNfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBUWjJfREFUQSwgUFRaMl9JTiwgUFRaMl9JTl9QVSksCisJUElOTVVYX0RBVEEoUFRaMV9EQVRBLCBQVFoxX0lOLCBQVFoxX0lOX1BVKSwKKworCS8qIFNDSUYwICovCisJUElOTVVYX0RBVEEoU0NJRjBfVFhEX01BUkssIFNDSUYwX1RYRCksCisJUElOTVVYX0RBVEEoU0NJRjBfUlhEX01BUkssIFNDSUYwX1JYRCksCisJUElOTVVYX0RBVEEoU0NJRjBfUlRTX01BUkssIFBTRDdfU0NJRjBfUlRTLCBTQ0lGMF9SVFNfU0lVQU9TUEQpLAorCVBJTk1VWF9EQVRBKFNDSUYwX0NUU19NQVJLLCBQU0Q2X1NDSUYwX0NUUywgU0NJRjBfQ1RTX1NJVUFJU1BEKSwKKwlQSU5NVVhfREFUQShTQ0lGMF9TQ0tfTUFSSywgUFNEOF9TQ0lGMF9TQ0ssIFNDSUYwX1NDS19UUFVUTyksCisKKwkvKiBTQ0lGMSAqLworCVBJTk1VWF9EQVRBKFNDSUYxX1RYRF9NQVJLLCBQU0QxMV9TQ0lGMSwgVklPX0Q1X1NDSUYxX1RYRCksCisJUElOTVVYX0RBVEEoU0NJRjFfUlhEX01BUkssIFBTRDExX1NDSUYxLCBWSU9fRDZfU0NJRjFfUlhEKSwKKwlQSU5NVVhfREFUQShTQ0lGMV9SVFNfTUFSSywgUFNEMTJfU0NJRjEsIFZJT19DTEtfU0NJRjFfUlRTKSwKKwlQSU5NVVhfREFUQShTQ0lGMV9DVFNfTUFSSywgUFNEMTJfU0NJRjEsIFZJT19WRF9TQ0lGMV9DVFMpLAorCVBJTk1VWF9EQVRBKFNDSUYxX1NDS19NQVJLLCBQU0QxMV9TQ0lGMSwgVklPX0Q3X1NDSUYxX1NDSyksCisKKwkvKiBTQ0lGMiAqLworCVBJTk1VWF9EQVRBKFNDSUYyX1RYRF9NQVJLLCBQU0QxM19TQ0lGMiwgVklPX1NURU1fU0NJRjJfVFhEKSwKKwlQSU5NVVhfREFUQShTQ0lGMl9SWERfTUFSSywgUFNEMTNfU0NJRjIsIFZJT19IRF9TQ0lGMl9SWEQpLAorCVBJTk1VWF9EQVRBKFNDSUYyX1JUU19NQVJLLCBQU0QxM19TQ0lGMiwgVklPX0NLT19TQ0lGMl9SVFMpLAorCVBJTk1VWF9EQVRBKFNDSUYyX0NUU19NQVJLLCBQU0QxM19TQ0lGMiwgVklPX0ZMRF9TQ0lGMl9DVFMpLAorCVBJTk1VWF9EQVRBKFNDSUYyX1NDS19NQVJLLCBQU0QxM19TQ0lGMiwgVklPX1NURVhfU0NJRjJfU0NLKSwKKworCS8qIFNJTyAqLworCVBJTk1VWF9EQVRBKFNJT1RYRF9NQVJLLCBQU0IxNV9TSU9UWEQsIFNJT1RYRF9TSVVCT1NMRCksCisJUElOTVVYX0RBVEEoU0lPUlhEX01BUkssIFBTQjE0X1NJT1JYRCwgU0lPUlhEX1NJVUJJU0xEKSwKKwlQSU5NVVhfREFUQShTSU9EX01BUkssIFBTQjEzX1NJT0QsIFNJT0RfU0lVQklMUiksCisJUElOTVVYX0RBVEEoU0lPU1RSQjBfTUFSSywgUFNCMTJfU0lPU1RSQjAsIFNJT1NUUkIwX1NJVUJJQlQpLAorCVBJTk1VWF9EQVRBKFNJT1NUUkIxX01BUkssIFBTQjExX1NJT1NUUkIxLCBTSU9TVFJCMV9TSVVCT0xSKSwKKwlQSU5NVVhfREFUQShTSU9TQ0tfTUFSSywgUFNCMTBfU0lPU0NLLCBTSU9TQ0tfU0lVQk9CVCksCisJUElOTVVYX0RBVEEoU0lPTUNLX01BUkssIFBTRDlfU0lPTUNLX1NJVU1DS0IsIFBTQjlfU0lPTUNLLCBQVEY2KSwKKworCS8qIENFVSAqLworCVBJTk1VWF9EQVRBKFZJT19EMTVfTUFSSywgUFNDMF9WSU8sIEhJWkExMF9OQUYsIE5BRjdfVklPX0QxNSksCisJUElOTVVYX0RBVEEoVklPX0QxNF9NQVJLLCBQU0MwX1ZJTywgSElaQTEwX05BRiwgTkFGNl9WSU9fRDE0KSwKKwlQSU5NVVhfREFUQShWSU9fRDEzX01BUkssIFBTQzBfVklPLCBISVpBMTBfTkFGLCBOQUY1X1ZJT19EMTMpLAorCVBJTk1VWF9EQVRBKFZJT19EMTJfTUFSSywgUFNDMF9WSU8sIEhJWkExMF9OQUYsIE5BRjRfVklPX0QxMiksCisJUElOTVVYX0RBVEEoVklPX0QxMV9NQVJLLCBQU0MwX1ZJTywgSElaQTEwX05BRiwgTkFGM19WSU9fRDExKSwKKwlQSU5NVVhfREFUQShWSU9fRDEwX01BUkssIFBTRTJfVklPX0QxMCwgSElaQjBfVklPLCBOQUYyX1ZJT19EMTApLAorCVBJTk1VWF9EQVRBKFZJT19EOV9NQVJLLCBQU0UxX1ZJT19EOSwgSElaQjBfVklPLCBOQUYxX1ZJT19EOSksCisJUElOTVVYX0RBVEEoVklPX0Q4X01BUkssIFBTRTBfVklPX0Q4LCBISVpCMF9WSU8sIE5BRjBfVklPX0Q4KSwKKwlQSU5NVVhfREFUQShWSU9fRDdfTUFSSywgUFNEMTFfVklPLCBWSU9fRDdfU0NJRjFfU0NLKSwKKwlQSU5NVVhfREFUQShWSU9fRDZfTUFSSywgUFNEMTFfVklPLCBWSU9fRDZfU0NJRjFfUlhEKSwKKwlQSU5NVVhfREFUQShWSU9fRDVfTUFSSywgUFNEMTFfVklPLCBWSU9fRDVfU0NJRjFfVFhEKSwKKwlQSU5NVVhfREFUQShWSU9fRDRfTUFSSywgVklPX0Q0KSwKKwlQSU5NVVhfREFUQShWSU9fRDNfTUFSSywgVklPX0QzKSwKKwlQSU5NVVhfREFUQShWSU9fRDJfTUFSSywgVklPX0QyKSwKKwlQSU5NVVhfREFUQShWSU9fRDFfTUFSSywgVklPX0QxKSwKKwlQSU5NVVhfREFUQShWSU9fRDBfTUFSSywgUFNEMTBfVklPX0QwLCBWSU9fRDBfTENETENMSyksCisJUElOTVVYX0RBVEEoVklPX0NMS19NQVJLLCBQU0QxMl9WSU8sIE1TRUxCOV9WSU8sIFZJT19DTEtfU0NJRjFfUlRTKSwKKwlQSU5NVVhfREFUQShWSU9fVkRfTUFSSywgUFNEMTJfVklPLCBNU0VMQjlfVklPLCBWSU9fVkRfU0NJRjFfQ1RTKSwKKwlQSU5NVVhfREFUQShWSU9fSERfTUFSSywgUFNEMTNfVklPLCBNU0VMQjlfVklPLCBWSU9fSERfU0NJRjJfUlhEKSwKKwlQSU5NVVhfREFUQShWSU9fRkxEX01BUkssIFBTRDEzX1ZJTywgSElaQTlfVklPLCBWSU9fRkxEX1NDSUYyX0NUUyksCisJUElOTVVYX0RBVEEoVklPX0NLT19NQVJLLCBQU0QxM19WSU8sIEhJWkE5X1ZJTywgVklPX0NLT19TQ0lGMl9SVFMpLAorCVBJTk1VWF9EQVRBKFZJT19TVEVYX01BUkssIFBTRDEzX1ZJTywgSElaQTlfVklPLCBWSU9fU1RFWF9TQ0lGMl9TQ0spLAorCVBJTk1VWF9EQVRBKFZJT19TVEVNX01BUkssIFBTRDEzX1ZJTywgSElaQTlfVklPLCBWSU9fU1RFTV9TQ0lGMl9UWEQpLAorCVBJTk1VWF9EQVRBKFZJT19WRDJfTUFSSywgUFNFM19WSU8sIE1TRUxCOV9WSU8yLAorCQkgICAgSElaQjBfVklPLCBGT0VfVklPX1ZEMiksCisJUElOTVVYX0RBVEEoVklPX0hEMl9NQVJLLCBQU0UzX1ZJTywgTVNFTEI5X1ZJTzIsCisJCSAgICBISVpCMV9WSU8sIEhJWkIxX1ZJTywgRkNFX1ZJT19IRDIpLAorCVBJTk1VWF9EQVRBKFZJT19DTEsyX01BUkssIFBTRTNfVklPLCBNU0VMQjlfVklPMiwKKwkJICAgIEhJWkIxX1ZJTywgRlJCX1ZJT19DTEsyKSwKKworCS8qIExDREMgKi8KKwlQSU5NVVhfREFUQShMQ0REMjNfTUFSSywgSElaQThfTENEQywgTENERDIzKSwKKwlQSU5NVVhfREFUQShMQ0REMjJfTUFSSywgSElaQThfTENEQywgTENERDIyKSwKKwlQSU5NVVhfREFUQShMQ0REMjFfTUFSSywgSElaQThfTENEQywgTENERDIxKSwKKwlQSU5NVVhfREFUQShMQ0REMjBfTUFSSywgSElaQThfTENEQywgTENERDIwKSwKKwlQSU5NVVhfREFUQShMQ0REMTlfTUFSSywgUFNEMF9MQ0REMTlfTENERDAsIEhJWkE4X0xDREMsIExDREQxOV9EVl9DTEtJKSwKKwlQSU5NVVhfREFUQShMQ0REMThfTUFSSywgUFNEMF9MQ0REMTlfTENERDAsIEhJWkE4X0xDREMsIExDREQxOF9EVl9DTEspLAorCVBJTk1VWF9EQVRBKExDREQxN19NQVJLLCBQU0QwX0xDREQxOV9MQ0REMCwgSElaQThfTENEQywKKwkJICAgIExDREQxN19EVl9IU1lOQyksCisJUElOTVVYX0RBVEEoTENERDE2X01BUkssIFBTRDBfTENERDE5X0xDREQwLCBISVpBOF9MQ0RDLAorCQkgICAgTENERDE2X0RWX1ZTWU5DKSwKKwlQSU5NVVhfREFUQShMQ0REMTVfTUFSSywgUFNEMF9MQ0REMTlfTENERDAsIEhJWkE4X0xDREMsIExDREQxNV9EVl9EMTUpLAorCVBJTk1VWF9EQVRBKExDREQxNF9NQVJLLCBQU0QwX0xDREQxOV9MQ0REMCwgSElaQThfTENEQywgTENERDE0X0RWX0QxNCksCisJUElOTVVYX0RBVEEoTENERDEzX01BUkssIFBTRDBfTENERDE5X0xDREQwLCBISVpBOF9MQ0RDLCBMQ0REMTNfRFZfRDEzKSwKKwlQSU5NVVhfREFUQShMQ0REMTJfTUFSSywgUFNEMF9MQ0REMTlfTENERDAsIEhJWkE4X0xDREMsIExDREQxMl9EVl9EMTIpLAorCVBJTk1VWF9EQVRBKExDREQxMV9NQVJLLCBQU0QwX0xDREQxOV9MQ0REMCwgSElaQThfTENEQywgTENERDExX0RWX0QxMSksCisJUElOTVVYX0RBVEEoTENERDEwX01BUkssIFBTRDBfTENERDE5X0xDREQwLCBISVpBOF9MQ0RDLCBMQ0REMTBfRFZfRDEwKSwKKwlQSU5NVVhfREFUQShMQ0REOV9NQVJLLCBQU0QwX0xDREQxOV9MQ0REMCwgSElaQThfTENEQywgTENERDlfRFZfRDkpLAorCVBJTk1VWF9EQVRBKExDREQ4X01BUkssIFBTRDBfTENERDE5X0xDREQwLCBISVpBOF9MQ0RDLCBMQ0REOF9EVl9EOCksCisJUElOTVVYX0RBVEEoTENERDdfTUFSSywgUFNEMF9MQ0REMTlfTENERDAsIEhJWkE4X0xDREMsIExDREQ3X0RWX0Q3KSwKKwlQSU5NVVhfREFUQShMQ0RENl9NQVJLLCBQU0QwX0xDREQxOV9MQ0REMCwgSElaQThfTENEQywgTENERDZfRFZfRDYpLAorCVBJTk1VWF9EQVRBKExDREQ1X01BUkssIFBTRDBfTENERDE5X0xDREQwLCBISVpBOF9MQ0RDLCBMQ0RENV9EVl9ENSksCisJUElOTVVYX0RBVEEoTENERDRfTUFSSywgUFNEMF9MQ0REMTlfTENERDAsIEhJWkE4X0xDREMsIExDREQ0X0RWX0Q0KSwKKwlQSU5NVVhfREFUQShMQ0REM19NQVJLLCBQU0QwX0xDREQxOV9MQ0REMCwgSElaQThfTENEQywgTENERDNfRFZfRDMpLAorCVBJTk1VWF9EQVRBKExDREQyX01BUkssIFBTRDBfTENERDE5X0xDREQwLCBISVpBOF9MQ0RDLCBMQ0REMl9EVl9EMiksCisJUElOTVVYX0RBVEEoTENERDFfTUFSSywgUFNEMF9MQ0REMTlfTENERDAsIEhJWkE4X0xDREMsIExDREQxX0RWX0QxKSwKKwlQSU5NVVhfREFUQShMQ0REMF9NQVJLLCBQU0QwX0xDREQxOV9MQ0REMCwgSElaQThfTENEQywgTENERDBfRFZfRDApLAorCVBJTk1VWF9EQVRBKExDRExDTEtfTUFSSywgUFNEMTBfTENETENMSywgVklPX0QwX0xDRExDTEspLAorCS8qIE1haW4gTENEICovCisJUElOTVVYX0RBVEEoTENERE9OX01BUkssIFBTRDJfTENERE9OLCBISVpBN19MQ0RDLCBMQ0RET05fTENERE9OMiksCisJUElOTVVYX0RBVEEoTENEVkNQV0NfTUFSSywgUFNEM19MQ0RWRVBXQ19MQ0RWQ1BXQywKKwkJICAgIEhJWkE2X0xDREMsIExDRFZDUFdDX0xDRFZDUFdDMiksCisJUElOTVVYX0RBVEEoTENEVkVQV0NfTUFSSywgUFNEM19MQ0RWRVBXQ19MQ0RWQ1BXQywKKwkJICAgIEhJWkE2X0xDREMsIExDRFZFUFdDX0xDRFZFUFdDMiksCisJUElOTVVYX0RBVEEoTENEVlNZTl9NQVJLLCBISVpBN19MQ0RDLCBMQ0RWU1lOKSwKKwkvKiBNYWluIExDRCAtIFJHQiBNb2RlICovCisJUElOTVVYX0RBVEEoTENERENLX01BUkssIE1TRUxCOF9SR0IsIEhJWkE4X0xDREMsIExDRERDS19MQ0RXUiksCisJUElOTVVYX0RBVEEoTENESFNZTl9NQVJLLCBNU0VMQjhfUkdCLCBISVpBN19MQ0RDLCBMQ0RIU1lOX0xDRENTKSwKKwlQSU5NVVhfREFUQShMQ0RESVNQX01BUkssIE1TRUxCOF9SR0IsIEhJWkE3X0xDREMsIExDRERJU1BfTENEUlMpLAorCS8qIE1haW4gTENEIC0gU1lTIE1vZGUgKi8KKwlQSU5NVVhfREFUQShMQ0RSU19NQVJLLCBNU0VMQjhfU1lTLCBISVpBN19MQ0RDLCBMQ0RESVNQX0xDRFJTKSwKKwlQSU5NVVhfREFUQShMQ0RDU19NQVJLLCBNU0VMQjhfU1lTLCBISVpBN19MQ0RDLCBMQ0RIU1lOX0xDRENTKSwKKwlQSU5NVVhfREFUQShMQ0RXUl9NQVJLLCBNU0VMQjhfU1lTLCBISVpBOF9MQ0RDLCBMQ0REQ0tfTENEV1IpLAorCVBJTk1VWF9EQVRBKExDRFJEX01BUkssIEhJWkE3X0xDREMsIExDRFJEKSwKKwkvKiBTdWIgTENEIC0gU1lTIE1vZGUgKi8KKwlQSU5NVVhfREFUQShMQ0RET04yX01BUkssIFBTRDJfTENERE9OMiwgSElaQTdfTENEQywgTENERE9OX0xDRERPTjIpLAorCVBJTk1VWF9EQVRBKExDRFZDUFdDMl9NQVJLLCBQU0QzX0xDRFZFUFdDMl9MQ0RWQ1BXQzIsCisJCSAgICBISVpBNl9MQ0RDLCBMQ0RWQ1BXQ19MQ0RWQ1BXQzIpLAorCVBJTk1VWF9EQVRBKExDRFZFUFdDMl9NQVJLLCBQU0QzX0xDRFZFUFdDMl9MQ0RWQ1BXQzIsCisJCSAgICBISVpBNl9MQ0RDLCBMQ0RWRVBXQ19MQ0RWRVBXQzIpLAorCVBJTk1VWF9EQVRBKExDRFZTWU4yX01BUkssIFBTRTEyX0xDRFZTWU4yLCBISVpBOF9MQ0RDLCBMQ0RWU1lOMl9EQUNLKSwKKwlQSU5NVVhfREFUQShMQ0RDUzJfTUFSSywgUFNENV9MQ0RDUzIsIENTNkJfQ0UxQl9MQ0RDUzIpLAorCisJLyogQlNDICovCisJUElOTVVYX0RBVEEoSU9JUzE2X01BUkssIElPSVMxNiksCisJUElOTVVYX0RBVEEoQTI1X01BUkssIEEyNSksCisJUElOTVVYX0RBVEEoQTI0X01BUkssIEEyNCksCisJUElOTVVYX0RBVEEoQTIzX01BUkssIEEyMyksCisJUElOTVVYX0RBVEEoQTIyX01BUkssIEEyMiksCisJUElOTVVYX0RBVEEoQlNfTUFSSywgUFNBOV9CUywgSVJRNF9CUyksCisJUElOTVVYX0RBVEEoQ1M2Ql9DRTFCX01BUkssIFBTRDVfQ1M2Ql9DRTFCLCBDUzZCX0NFMUJfTENEQ1MyKSwKKwlQSU5NVVhfREFUQShXQUlUX01BUkssIFdBSVQpLAorCVBJTk1VWF9EQVRBKENTNkFfQ0UyQl9NQVJLLCBDUzZBX0NFMkIpLAorCisJLyogU0JTQyAqLworCVBJTk1VWF9EQVRBKEhQRDYzX01BUkssIEhQRDYzKSwKKwlQSU5NVVhfREFUQShIUEQ2Ml9NQVJLLCBIUEQ2MiksCisJUElOTVVYX0RBVEEoSFBENjFfTUFSSywgSFBENjEpLAorCVBJTk1VWF9EQVRBKEhQRDYwX01BUkssIEhQRDYwKSwKKwlQSU5NVVhfREFUQShIUEQ1OV9NQVJLLCBIUEQ1OSksCisJUElOTVVYX0RBVEEoSFBENThfTUFSSywgSFBENTgpLAorCVBJTk1VWF9EQVRBKEhQRDU3X01BUkssIEhQRDU3KSwKKwlQSU5NVVhfREFUQShIUEQ1Nl9NQVJLLCBIUEQ1NiksCisJUElOTVVYX0RBVEEoSFBENTVfTUFSSywgSFBENTUpLAorCVBJTk1VWF9EQVRBKEhQRDU0X01BUkssIEhQRDU0KSwKKwlQSU5NVVhfREFUQShIUEQ1M19NQVJLLCBIUEQ1MyksCisJUElOTVVYX0RBVEEoSFBENTJfTUFSSywgSFBENTIpLAorCVBJTk1VWF9EQVRBKEhQRDUxX01BUkssIEhQRDUxKSwKKwlQSU5NVVhfREFUQShIUEQ1MF9NQVJLLCBIUEQ1MCksCisJUElOTVVYX0RBVEEoSFBENDlfTUFSSywgSFBENDkpLAorCVBJTk1VWF9EQVRBKEhQRDQ4X01BUkssIEhQRDQ4KSwKKwlQSU5NVVhfREFUQShIUERRTTdfTUFSSywgSFBEUU03KSwKKwlQSU5NVVhfREFUQShIUERRTTZfTUFSSywgSFBEUU02KSwKKwlQSU5NVVhfREFUQShIUERRTTVfTUFSSywgSFBEUU01KSwKKwlQSU5NVVhfREFUQShIUERRTTRfTUFSSywgSFBEUU00KSwKKworCS8qIElSUSAqLworCVBJTk1VWF9EQVRBKElSUTBfTUFSSywgSElaQzhfSVJRMCwgSVJRMCksCisJUElOTVVYX0RBVEEoSVJRMV9NQVJLLCBISVpDOV9JUlExLCBJUlExKSwKKwlQSU5NVVhfREFUQShJUlEyX01BUkssIFBTQTRfSVJRMiwgSElaQzEwX0lSUTIsIElSUTJfU0RISUQyKSwKKwlQSU5NVVhfREFUQShJUlEzX01BUkssIFBTRTE1X1NJT0YwX01DS19JUlEzLCBQU0I4X0lSUTMsCisJCSAgICBISVpDMTFfSVJRMywgUFRRMCksCisJUElOTVVYX0RBVEEoSVJRNF9NQVJLLCBQU0E5X0lSUTQsIEhJWkMxMl9JUlE0LCBJUlE0X0JTKSwKKwlQSU5NVVhfREFUQShJUlE1X01BUkssIEhJWkMxM19JUlE1LCBJUlE1KSwKKwlQSU5NVVhfREFUQShJUlE2X01BUkssIFBTQTE1X0lSUTYsIEhJWkMxNF9JUlE2LCBLRVlJTjBfSVJRNiksCisJUElOTVVYX0RBVEEoSVJRN19NQVJLLCBQU0ExNF9JUlE3LCBISVpDMTVfSVJRNywgS0VZSU40X0lSUTcpLAorCisJLyogU0RISSAqLworCVBJTk1VWF9EQVRBKFNESElDRF9NQVJLLCBTREhJQ0QpLAorCVBJTk1VWF9EQVRBKFNESElXUF9NQVJLLCBTREhJV1ApLAorCVBJTk1VWF9EQVRBKFNESElEM19NQVJLLCBTREhJRDMpLAorCVBJTk1VWF9EQVRBKFNESElEMl9NQVJLLCBQU0E0X1NESElEMiwgSVJRMl9TREhJRDIpLAorCVBJTk1VWF9EQVRBKFNESElEMV9NQVJLLCBTREhJRDEpLAorCVBJTk1VWF9EQVRBKFNESElEMF9NQVJLLCBTREhJRDApLAorCVBJTk1VWF9EQVRBKFNESElDTURfTUFSSywgU0RISUNNRCksCisJUElOTVVYX0RBVEEoU0RISUNMS19NQVJLLCBTREhJQ0xLKSwKKworCS8qIFNJVSAtIFBvcnQgQSAqLworCVBJTk1VWF9EQVRBKFNJVUFPTFJfTUFSSywgUFNDMTNfU0lVQU9MUiwgU0lVQU9MUl9TSU9GMV9TWU5DKSwKKwlQSU5NVVhfREFUQShTSVVBT0JUX01BUkssIFBTQzE0X1NJVUFPQlQsIFNJVUFPQlRfU0lPRjFfU0NLKSwKKwlQSU5NVVhfREFUQShTSVVBSVNMRF9NQVJLLCBQU0MxNV9TSVVBSVNMRCwgU0lVQUlTTERfU0lPRjFfUlhEKSwKKwlQSU5NVVhfREFUQShTSVVBSUxSX01BUkssIFBTQzExX1NJVUFJTFIsIFNJVUFJTFJfU0lPRjFfU1MyKSwKKwlQSU5NVVhfREFUQShTSVVBSUJUX01BUkssIFBTQzEyX1NJVUFJQlQsIFNJVUFJQlRfU0lPRjFfU1MxKSwKKwlQSU5NVVhfREFUQShTSVVBT1NMRF9NQVJLLCBQU0IwX1NJVUFPU0xELCBTSVVBT1NMRF9TSU9GMV9UWEQpLAorCVBJTk1VWF9EQVRBKFNJVU1DS0FfTUFSSywgUFNFMTFfU0lVTUNLQV9TSU9GMV9NQ0ssIFBTQjFfU0lVTUNLQSwgUFRLMCksCisJUElOTVVYX0RBVEEoU0lVRkNLQV9NQVJLLCBQU0UxMV9TSVVGQ0tBLCBQVEswKSwKKworCS8qIFNJVSAtIFBvcnQgQiAqLworCVBJTk1VWF9EQVRBKFNJVUJPTFJfTUFSSywgUFNCMTFfU0lVQk9MUiwgU0lPU1RSQjFfU0lVQk9MUiksCisJUElOTVVYX0RBVEEoU0lVQk9CVF9NQVJLLCBQU0IxMF9TSVVCT0JULCBTSU9TQ0tfU0lVQk9CVCksCisJUElOTVVYX0RBVEEoU0lVQklTTERfTUFSSywgUFNCMTRfU0lVQklTTEQsIFNJT1JYRF9TSVVCSVNMRCksCisJUElOTVVYX0RBVEEoU0lVQklMUl9NQVJLLCBQU0IxM19TSVVCSUxSLCBTSU9EX1NJVUJJTFIpLAorCVBJTk1VWF9EQVRBKFNJVUJJQlRfTUFSSywgUFNCMTJfU0lVQklCVCwgU0lPU1RSQjBfU0lVQklCVCksCisJUElOTVVYX0RBVEEoU0lVQk9TTERfTUFSSywgUFNCMTVfU0lVQk9TTEQsIFNJT1RYRF9TSVVCT1NMRCksCisJUElOTVVYX0RBVEEoU0lVTUNLQl9NQVJLLCBQU0Q5X1NJT01DS19TSVVNQ0tCLCBQU0I5X1NJVU1DS0IsIFBURjYpLAorCVBJTk1VWF9EQVRBKFNJVUZDS0JfTUFSSywgUFNEOV9TSVVGQ0tCLCBQVEY2KSwKKworCS8qIEFVRCAqLworCVBJTk1VWF9EQVRBKEFVRFNZTkNfTUFSSywgQVVEU1lOQyksCisJUElOTVVYX0RBVEEoQVVEQVRBM19NQVJLLCBBVURBVEEzKSwKKwlQSU5NVVhfREFUQShBVURBVEEyX01BUkssIEFVREFUQTIpLAorCVBJTk1VWF9EQVRBKEFVREFUQTFfTUFSSywgQVVEQVRBMSksCisJUElOTVVYX0RBVEEoQVVEQVRBMF9NQVJLLCBBVURBVEEwKSwKKworCS8qIERNQUMgKi8KKwlQSU5NVVhfREFUQShEQUNLX01BUkssIFBTRTEyX0RBQ0ssIExDRFZTWU4yX0RBQ0spLAorCVBJTk1VWF9EQVRBKERSRVEwX01BUkssIERSRVEwKSwKKworCS8qIFZPVSAqLworCVBJTk1VWF9EQVRBKERWX0NMS0lfTUFSSywgUFNEMF9EViwgTENERDE5X0RWX0NMS0kpLAorCVBJTk1VWF9EQVRBKERWX0NMS19NQVJLLCBQU0QwX0RWLCBMQ0REMThfRFZfQ0xLKSwKKwlQSU5NVVhfREFUQShEVl9IU1lOQ19NQVJLLCBQU0QwX0RWLCBMQ0REMTdfRFZfSFNZTkMpLAorCVBJTk1VWF9EQVRBKERWX1ZTWU5DX01BUkssIFBTRDBfRFYsIExDREQxNl9EVl9WU1lOQyksCisJUElOTVVYX0RBVEEoRFZfRDE1X01BUkssIFBTRDBfRFYsIExDREQxNV9EVl9EMTUpLAorCVBJTk1VWF9EQVRBKERWX0QxNF9NQVJLLCBQU0QwX0RWLCBMQ0REMTRfRFZfRDE0KSwKKwlQSU5NVVhfREFUQShEVl9EMTNfTUFSSywgUFNEMF9EViwgTENERDEzX0RWX0QxMyksCisJUElOTVVYX0RBVEEoRFZfRDEyX01BUkssIFBTRDBfRFYsIExDREQxMl9EVl9EMTIpLAorCVBJTk1VWF9EQVRBKERWX0QxMV9NQVJLLCBQU0QwX0RWLCBMQ0REMTFfRFZfRDExKSwKKwlQSU5NVVhfREFUQShEVl9EMTBfTUFSSywgUFNEMF9EViwgTENERDEwX0RWX0QxMCksCisJUElOTVVYX0RBVEEoRFZfRDlfTUFSSywgUFNEMF9EViwgTENERDlfRFZfRDkpLAorCVBJTk1VWF9EQVRBKERWX0Q4X01BUkssIFBTRDBfRFYsIExDREQ4X0RWX0Q4KSwKKwlQSU5NVVhfREFUQShEVl9EN19NQVJLLCBQU0QwX0RWLCBMQ0REN19EVl9ENyksCisJUElOTVVYX0RBVEEoRFZfRDZfTUFSSywgUFNEMF9EViwgTENERDZfRFZfRDYpLAorCVBJTk1VWF9EQVRBKERWX0Q1X01BUkssIFBTRDBfRFYsIExDREQ1X0RWX0Q1KSwKKwlQSU5NVVhfREFUQShEVl9ENF9NQVJLLCBQU0QwX0RWLCBMQ0RENF9EVl9ENCksCisJUElOTVVYX0RBVEEoRFZfRDNfTUFSSywgUFNEMF9EViwgTENERDNfRFZfRDMpLAorCVBJTk1VWF9EQVRBKERWX0QyX01BUkssIFBTRDBfRFYsIExDREQyX0RWX0QyKSwKKwlQSU5NVVhfREFUQShEVl9EMV9NQVJLLCBQU0QwX0RWLCBMQ0REMV9EVl9EMSksCisJUElOTVVYX0RBVEEoRFZfRDBfTUFSSywgUFNEMF9EViwgTENERDBfRFZfRDApLAorCisJLyogQ1BHICovCisJUElOTVVYX0RBVEEoU1RBVFVTMF9NQVJLLCBTVEFUVVMwKSwKKwlQSU5NVVhfREFUQShQRFNUQVRVU19NQVJLLCBQRFNUQVRVUyksCisKKwkvKiBTSU9GMCAqLworCVBJTk1VWF9EQVRBKFNJT0YwX01DS19NQVJLLCBQU0UxNV9TSU9GMF9NQ0tfSVJRMywgUFNCOF9TSU9GMF9NQ0ssIFBUUTApLAorCVBJTk1VWF9EQVRBKFNJT0YwX1NDS19NQVJLLCBQU0I1X1NJT0YwX1NDSywgU0lPRjBfU0NLX1RTX1NDSyksCisJUElOTVVYX0RBVEEoU0lPRjBfU1lOQ19NQVJLLCBQU0I0X1NJT0YwX1NZTkMsIFNJT0YwX1NZTkNfVFNfU0RFTiksCisJUElOTVVYX0RBVEEoU0lPRjBfU1MxX01BUkssIFBTQjNfU0lPRjBfU1MxLCBTSU9GMF9TUzFfVFNfU1BTWU5DKSwKKwlQSU5NVVhfREFUQShTSU9GMF9TUzJfTUFSSywgUFNCMl9TSU9GMF9TUzIsIFNJT0YwX1NTMl9TSU1fUlNUKSwKKwlQSU5NVVhfREFUQShTSU9GMF9UWERfTUFSSywgUFNFMTRfU0lPRjBfVFhEX0lSREFfT1VULAorCQkgICAgUFNCN19TSU9GMF9UWEQsIFBUUTEpLAorCVBJTk1VWF9EQVRBKFNJT0YwX1JYRF9NQVJLLCBQU0UxM19TSU9GMF9SWERfSVJEQV9JTiwKKwkJICAgIFBTQjZfU0lPRjBfUlhELCBQVFEyKSwKKworCS8qIFNJT0YxICovCisJUElOTVVYX0RBVEEoU0lPRjFfTUNLX01BUkssIFBTRTExX1NJVU1DS0FfU0lPRjFfTUNLLAorCQkgICAgUFNCMV9TSU9GMV9NQ0ssIFBUSzApLAorCVBJTk1VWF9EQVRBKFNJT0YxX1NDS19NQVJLLCBQU0MxNF9TSU9GMV9TQ0ssIFNJVUFPQlRfU0lPRjFfU0NLKSwKKwlQSU5NVVhfREFUQShTSU9GMV9TWU5DX01BUkssIFBTQzEzX1NJT0YxX1NZTkMsIFNJVUFPTFJfU0lPRjFfU1lOQyksCisJUElOTVVYX0RBVEEoU0lPRjFfU1MxX01BUkssIFBTQzEyX1NJT0YxX1NTMSwgU0lVQUlCVF9TSU9GMV9TUzEpLAorCVBJTk1VWF9EQVRBKFNJT0YxX1NTMl9NQVJLLCBQU0MxMV9TSU9GMV9TUzIsIFNJVUFJTFJfU0lPRjFfU1MyKSwKKwlQSU5NVVhfREFUQShTSU9GMV9UWERfTUFSSywgUFNCMF9TSU9GMV9UWEQsIFNJVUFPU0xEX1NJT0YxX1RYRCksCisJUElOTVVYX0RBVEEoU0lPRjFfUlhEX01BUkssIFBTQzE1X1NJT0YxX1JYRCwgU0lVQUlTTERfU0lPRjFfUlhEKSwKKworCS8qIFNJTSAqLworCVBJTk1VWF9EQVRBKFNJTV9EX01BUkssIFBTRTE1X1NJTV9ELCBQVFEwKSwKKwlQSU5NVVhfREFUQShTSU1fQ0xLX01BUkssIFBTRTE0X1NJTV9DTEssIFBUUTEpLAorCVBJTk1VWF9EQVRBKFNJTV9SU1RfTUFSSywgUFNCMl9TSU1fUlNULCBTSU9GMF9TUzJfU0lNX1JTVCksCisKKwkvKiBUU0lGICovCisJUElOTVVYX0RBVEEoVFNfU0RBVF9NQVJLLCBQU0UxM19UU19TREFULCBQVFEyKSwKKwlQSU5NVVhfREFUQShUU19TQ0tfTUFSSywgUFNCNV9UU19TQ0ssIFNJT0YwX1NDS19UU19TQ0spLAorCVBJTk1VWF9EQVRBKFRTX1NERU5fTUFSSywgUFNCNF9UU19TREVOLCBTSU9GMF9TWU5DX1RTX1NERU4pLAorCVBJTk1VWF9EQVRBKFRTX1NQU1lOQ19NQVJLLCBQU0IzX1RTX1NQU1lOQywgU0lPRjBfU1MxX1RTX1NQU1lOQyksCisKKwkvKiBJUkRBICovCisJUElOTVVYX0RBVEEoSVJEQV9JTl9NQVJLLCBQU0UxM19TSU9GMF9SWERfSVJEQV9JTiwgUFNCNl9JUkRBX0lOLCBQVFEyKSwKKwlQSU5NVVhfREFUQShJUkRBX09VVF9NQVJLLCBQU0UxNF9TSU9GMF9UWERfSVJEQV9PVVQsCisJCSAgICBQU0I3X0lSREFfT1VULCBQVFExKSwKKworCS8qIFRQVSAqLworCVBJTk1VWF9EQVRBKFRQVVRPX01BUkssIFBTRDhfVFBVVE8sIFNDSUYwX1NDS19UUFVUTyksCisKKwkvKiBGTENUTCAqLworCVBJTk1VWF9EQVRBKEZDRV9NQVJLLCBQU0UzX0ZMQ1RMLCBGQ0VfVklPX0hEMiksCisJUElOTVVYX0RBVEEoTkFGN19NQVJLLCBQU0MwX05BRiwgSElaQTEwX05BRiwgTkFGN19WSU9fRDE1KSwKKwlQSU5NVVhfREFUQShOQUY2X01BUkssIFBTQzBfTkFGLCBISVpBMTBfTkFGLCBOQUY2X1ZJT19EMTQpLAorCVBJTk1VWF9EQVRBKE5BRjVfTUFSSywgUFNDMF9OQUYsIEhJWkExMF9OQUYsIE5BRjVfVklPX0QxMyksCisJUElOTVVYX0RBVEEoTkFGNF9NQVJLLCBQU0MwX05BRiwgSElaQTEwX05BRiwgTkFGNF9WSU9fRDEyKSwKKwlQSU5NVVhfREFUQShOQUYzX01BUkssIFBTQzBfTkFGLCBISVpBMTBfTkFGLCBOQUYzX1ZJT19EMTEpLAorCVBJTk1VWF9EQVRBKE5BRjJfTUFSSywgUFNFMl9OQUYyLCBISVpCMF9WSU8sIE5BRjJfVklPX0QxMCksCisJUElOTVVYX0RBVEEoTkFGMV9NQVJLLCBQU0UxX05BRjEsIEhJWkIwX1ZJTywgTkFGMV9WSU9fRDkpLAorCVBJTk1VWF9EQVRBKE5BRjBfTUFSSywgUFNFMF9OQUYwLCBISVpCMF9WSU8sIE5BRjBfVklPX0Q4KSwKKwlQSU5NVVhfREFUQShGQ0RFX01BUkssIEZDREUpLAorCVBJTk1VWF9EQVRBKEZPRV9NQVJLLCBQU0UzX0ZMQ1RMLCBISVpCMF9WSU8sIEZPRV9WSU9fVkQyKSwKKwlQSU5NVVhfREFUQShGU0NfTUFSSywgRlNDKSwKKwlQSU5NVVhfREFUQShGV0VfTUFSSywgRldFKSwKKwlQSU5NVVhfREFUQShGUkJfTUFSSywgUFNFM19GTENUTCwgRlJCX1ZJT19DTEsyKSwKKworCS8qIEtFWVNDICovCisJUElOTVVYX0RBVEEoS0VZSU4wX01BUkssIFBTQTE1X0tFWUlOMCwgSElaQzE0X0lSUTYsIEtFWUlOMF9JUlE2KSwKKwlQSU5NVVhfREFUQShLRVlJTjFfTUFSSywgSElaQTE0X0tFWVNDLCBLRVlJTjEpLAorCVBJTk1VWF9EQVRBKEtFWUlOMl9NQVJLLCBISVpBMTRfS0VZU0MsIEtFWUlOMiksCisJUElOTVVYX0RBVEEoS0VZSU4zX01BUkssIEhJWkExNF9LRVlTQywgS0VZSU4zKSwKKwlQSU5NVVhfREFUQShLRVlJTjRfTUFSSywgUFNBMTRfS0VZSU40LCBISVpDMTVfSVJRNywgS0VZSU40X0lSUTcpLAorCVBJTk1VWF9EQVRBKEtFWU9VVDBfTUFSSywgSElaQTE0X0tFWVNDLCBLRVlPVVQwKSwKKwlQSU5NVVhfREFUQShLRVlPVVQxX01BUkssIEhJWkExNF9LRVlTQywgS0VZT1VUMSksCisJUElOTVVYX0RBVEEoS0VZT1VUMl9NQVJLLCBISVpBMTRfS0VZU0MsIEtFWU9VVDIpLAorCVBJTk1VWF9EQVRBKEtFWU9VVDNfTUFSSywgSElaQTE0X0tFWVNDLCBLRVlPVVQzKSwKKwlQSU5NVVhfREFUQShLRVlPVVQ0X0lONl9NQVJLLCBISVpBMTRfS0VZU0MsIEtFWU9VVDRfSU42KSwKKwlQSU5NVVhfREFUQShLRVlPVVQ1X0lONV9NQVJLLCBISVpBMTRfS0VZU0MsIEtFWU9VVDVfSU41KSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGlubXV4X2dwaW8gcGlubXV4X2dwaW9zW10gPSB7CisJLyogUFRBICovCisJUElOTVVYX0dQSU8oR1BJT19QVEE3LCBQVEE3X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRBNiwgUFRBNl9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUQTUsIFBUQTVfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEE0LCBQVEE0X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRBMywgUFRBM19EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUQTIsIFBUQTJfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEExLCBQVEExX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRBMCwgUFRBMF9EQVRBKSwKKworCS8qIFBUQiAqLworCVBJTk1VWF9HUElPKEdQSU9fUFRCNywgUFRCN19EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUQjYsIFBUQjZfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEI1LCBQVEI1X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRCNCwgUFRCNF9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUQjMsIFBUQjNfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEIyLCBQVEIyX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRCMSwgUFRCMV9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUQjAsIFBUQjBfREFUQSksCisKKwkvKiBQVEMgKi8KKwlQSU5NVVhfR1BJTyhHUElPX1BUQzcsIFBUQzdfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEM1LCBQVEM1X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRDNCwgUFRDNF9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUQzMsIFBUQzNfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEMyLCBQVEMyX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRDMCwgUFRDMF9EQVRBKSwKKworCS8qIFBURCAqLworCVBJTk1VWF9HUElPKEdQSU9fUFRENywgUFREN19EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BURDYsIFBURDZfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEQ1LCBQVEQ1X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRENCwgUFRENF9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BURDMsIFBURDNfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEQyLCBQVEQyX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFREMSwgUFREMV9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BURDAsIFBURDBfREFUQSksCisKKwkvKiBQVEUgKi8KKwlQSU5NVVhfR1BJTyhHUElPX1BURTcsIFBURTdfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEU2LCBQVEU2X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRFNSwgUFRFNV9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BURTQsIFBURTRfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEUxLCBQVEUxX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRFMCwgUFRFMF9EQVRBKSwKKworCS8qIFBURiAqLworCVBJTk1VWF9HUElPKEdQSU9fUFRGNiwgUFRGNl9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BURjUsIFBURjVfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEY0LCBQVEY0X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRGMywgUFRGM19EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BURjIsIFBURjJfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEYxLCBQVEYxX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRGMCwgUFRGMF9EQVRBKSwKKworCS8qIFBURyAqLworCVBJTk1VWF9HUElPKEdQSU9fUFRHNCwgUFRHNF9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BURzMsIFBURzNfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEcyLCBQVEcyX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRHMSwgUFRHMV9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BURzAsIFBURzBfREFUQSksCisKKwkvKiBQVEggKi8KKwlQSU5NVVhfR1BJTyhHUElPX1BUSDcsIFBUSDdfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEg2LCBQVEg2X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRINSwgUFRINV9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUSDQsIFBUSDRfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEgzLCBQVEgzX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRIMiwgUFRIMl9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUSDEsIFBUSDFfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEgwLCBQVEgwX0RBVEEpLAorCisJLyogUFRKICovCisJUElOTVVYX0dQSU8oR1BJT19QVEo3LCBQVEo3X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRKNiwgUFRKNl9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUSjUsIFBUSjVfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEoxLCBQVEoxX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRKMCwgUFRKMF9EQVRBKSwKKworCS8qIFBUSyAqLworCVBJTk1VWF9HUElPKEdQSU9fUFRLNiwgUFRLNl9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUSzUsIFBUSzVfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEs0LCBQVEs0X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRLMywgUFRLM19EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUSzIsIFBUSzJfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEsxLCBQVEsxX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRLMCwgUFRLMF9EQVRBKSwKKworCS8qIFBUTCAqLworCVBJTk1VWF9HUElPKEdQSU9fUFRMNywgUFRMN19EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUTDYsIFBUTDZfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEw1LCBQVEw1X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRMNCwgUFRMNF9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUTDMsIFBUTDNfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEwyLCBQVEwyX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRMMSwgUFRMMV9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUTDAsIFBUTDBfREFUQSksCisKKwkvKiBQVE0gKi8KKwlQSU5NVVhfR1BJTyhHUElPX1BUTTcsIFBUTTdfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVE02LCBQVE02X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRNNSwgUFRNNV9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUTTQsIFBUTTRfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVE0zLCBQVE0zX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRNMiwgUFRNMl9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUTTEsIFBUTTFfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVE0wLCBQVE0wX0RBVEEpLAorCisJLyogUFROICovCisJUElOTVVYX0dQSU8oR1BJT19QVE43LCBQVE43X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRONiwgUFRONl9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUTjUsIFBUTjVfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVE40LCBQVE40X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFROMywgUFROM19EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUTjIsIFBUTjJfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVE4xLCBQVE4xX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFROMCwgUFROMF9EQVRBKSwKKworCS8qIFBUUSAqLworCVBJTk1VWF9HUElPKEdQSU9fUFRRNiwgUFRRNl9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUUTUsIFBUUTVfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVFE0LCBQVFE0X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRRMywgUFRRM19EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUUTIsIFBUUTJfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVFExLCBQVFExX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRRMCwgUFRRMF9EQVRBKSwKKworCS8qIFBUUiAqLworCVBJTk1VWF9HUElPKEdQSU9fUFRSNCwgUFRSNF9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUUjMsIFBUUjNfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVFIyLCBQVFIyX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRSMSwgUFRSMV9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUUjAsIFBUUjBfREFUQSksCisKKwkvKiBQVFMgKi8KKwlQSU5NVVhfR1BJTyhHUElPX1BUUzQsIFBUUzRfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVFMzLCBQVFMzX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRTMiwgUFRTMl9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUUzEsIFBUUzFfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVFMwLCBQVFMwX0RBVEEpLAorCisJLyogUFRUICovCisJUElOTVVYX0dQSU8oR1BJT19QVFQ0LCBQVFQ0X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRUMywgUFRUM19EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUVDIsIFBUVDJfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVFQxLCBQVFQxX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRUMCwgUFRUMF9EQVRBKSwKKworCS8qIFBUVSAqLworCVBJTk1VWF9HUElPKEdQSU9fUFRVNCwgUFRVNF9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUVTMsIFBUVTNfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVFUyLCBQVFUyX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRVMSwgUFRVMV9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUVTAsIFBUVTBfREFUQSksCisKKwkvKiBQVFYgKi8KKwlQSU5NVVhfR1BJTyhHUElPX1BUVjQsIFBUVjRfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVFYzLCBQVFYzX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRWMiwgUFRWMl9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUVjEsIFBUVjFfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVFYwLCBQVFYwX0RBVEEpLAorCisJLyogUFRXICovCisJUElOTVVYX0dQSU8oR1BJT19QVFc2LCBQVFc2X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRXNSwgUFRXNV9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUVzQsIFBUVzRfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVFczLCBQVFczX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRXMiwgUFRXMl9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUVzEsIFBUVzFfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVFcwLCBQVFcwX0RBVEEpLAorCisJLyogUFRYICovCisJUElOTVVYX0dQSU8oR1BJT19QVFg2LCBQVFg2X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRYNSwgUFRYNV9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUWDQsIFBUWDRfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVFgzLCBQVFgzX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRYMiwgUFRYMl9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUWDEsIFBUWDFfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVFgwLCBQVFgwX0RBVEEpLAorCisJLyogUFRZICovCisJUElOTVVYX0dQSU8oR1BJT19QVFk1LCBQVFk1X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRZNCwgUFRZNF9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUWTMsIFBUWTNfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVFkyLCBQVFkyX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRZMSwgUFRZMV9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUWTAsIFBUWTBfREFUQSksCisKKwkvKiBQVFogKi8KKwlQSU5NVVhfR1BJTyhHUElPX1BUWjUsIFBUWjVfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVFo0LCBQVFo0X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRaMywgUFRaM19EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUWjIsIFBUWjJfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVFoxLCBQVFoxX0RBVEEpLAorCisJLyogU0NJRjAgKi8KKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NDSUYwX1RYRCwgU0NJRjBfVFhEX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0NJRjBfUlhELCBTQ0lGMF9SWERfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TQ0lGMF9SVFMsIFNDSUYwX1JUU19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NDSUYwX0NUUywgU0NJRjBfQ1RTX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0NJRjBfU0NLLCBTQ0lGMF9TQ0tfTUFSSyksCisKKwkvKiBTQ0lGMSAqLworCVBJTk1VWF9HUElPKEdQSU9fRk5fU0NJRjFfVFhELCBTQ0lGMV9UWERfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TQ0lGMV9SWEQsIFNDSUYxX1JYRF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NDSUYxX1JUUywgU0NJRjFfUlRTX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0NJRjFfQ1RTLCBTQ0lGMV9DVFNfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TQ0lGMV9TQ0ssIFNDSUYxX1NDS19NQVJLKSwKKworCS8qIFNDSUYyICovCisJUElOTVVYX0dQSU8oR1BJT19GTl9TQ0lGMl9UWEQsIFNDSUYyX1RYRF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NDSUYyX1JYRCwgU0NJRjJfUlhEX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0NJRjJfUlRTLCBTQ0lGMl9SVFNfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TQ0lGMl9DVFMsIFNDSUYyX0NUU19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NDSUYyX1NDSywgU0NJRjJfU0NLX01BUkspLAorCisJLyogU0lPICovCisJUElOTVVYX0dQSU8oR1BJT19GTl9TSU9UWEQsIFNJT1RYRF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NJT1JYRCwgU0lPUlhEX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0lPRCwgU0lPRF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NJT1NUUkIwLCBTSU9TVFJCMF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NJT1NUUkIxLCBTSU9TVFJCMV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NJT1NDSywgU0lPU0NLX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0lPTUNLLCBTSU9NQ0tfTUFSSyksCisKKwkvKiBDRVUgKi8KKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1ZJT19EMTUsIFZJT19EMTVfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9WSU9fRDE0LCBWSU9fRDE0X01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fVklPX0QxMywgVklPX0QxM19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1ZJT19EMTIsIFZJT19EMTJfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9WSU9fRDExLCBWSU9fRDExX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fVklPX0QxMCwgVklPX0QxMF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1ZJT19EOSwgVklPX0Q5X01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fVklPX0Q4LCBWSU9fRDhfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9WSU9fRDcsIFZJT19EN19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1ZJT19ENiwgVklPX0Q2X01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fVklPX0Q1LCBWSU9fRDVfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9WSU9fRDQsIFZJT19ENF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1ZJT19EMywgVklPX0QzX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fVklPX0QyLCBWSU9fRDJfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9WSU9fRDEsIFZJT19EMV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1ZJT19EMCwgVklPX0QwX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fVklPX0NMSywgVklPX0NMS19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1ZJT19WRCwgVklPX1ZEX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fVklPX0hELCBWSU9fSERfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9WSU9fRkxELCBWSU9fRkxEX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fVklPX0NLTywgVklPX0NLT19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1ZJT19TVEVYLCBWSU9fU1RFWF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1ZJT19TVEVNLCBWSU9fU1RFTV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1ZJT19WRDIsIFZJT19WRDJfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9WSU9fSEQyLCBWSU9fSEQyX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fVklPX0NMSzIsIFZJT19DTEsyX01BUkspLAorCisJLyogTENEQyAqLworCVBJTk1VWF9HUElPKEdQSU9fRk5fTENERDIzLCBMQ0REMjNfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9MQ0REMjIsIExDREQyMl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0xDREQyMSwgTENERDIxX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fTENERDIwLCBMQ0REMjBfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9MQ0REMTksIExDREQxOV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0xDREQxOCwgTENERDE4X01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fTENERDE3LCBMQ0REMTdfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9MQ0REMTYsIExDREQxNl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0xDREQxNSwgTENERDE1X01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fTENERDE0LCBMQ0REMTRfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9MQ0REMTMsIExDREQxM19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0xDREQxMiwgTENERDEyX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fTENERDExLCBMQ0REMTFfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9MQ0REMTAsIExDREQxMF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0xDREQ5LCBMQ0REOV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0xDREQ4LCBMQ0REOF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0xDREQ3LCBMQ0REN19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0xDREQ2LCBMQ0RENl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0xDREQ1LCBMQ0RENV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0xDREQ0LCBMQ0RENF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0xDREQzLCBMQ0REM19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0xDREQyLCBMQ0REMl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0xDREQxLCBMQ0REMV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0xDREQwLCBMQ0REMF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0xDRExDTEssIExDRExDTEtfTUFSSyksCisJLyogTWFpbiBMQ0QgKi8KKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0xDRERPTiwgTENERE9OX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fTENEVkNQV0MsIExDRFZDUFdDX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fTENEVkVQV0MsIExDRFZFUFdDX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fTENEVlNZTiwgTENEVlNZTl9NQVJLKSwKKwkvKiBNYWluIExDRCAtIFJHQiBNb2RlICovCisJUElOTVVYX0dQSU8oR1BJT19GTl9MQ0REQ0ssIExDRERDS19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0xDREhTWU4sIExDREhTWU5fTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9MQ0RESVNQLCBMQ0RESVNQX01BUkspLAorCS8qIE1haW4gTENEIC0gU1lTIE1vZGUgKi8KKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0xDRFJTLCBMQ0RSU19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0xDRENTLCBMQ0RDU19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0xDRFdSLCBMQ0RXUl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0xDRFJELCBMQ0RSRF9NQVJLKSwKKwkvKiBTdWIgTENEIC0gU1lTIE1vZGUgKi8KKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0xDRERPTjIsIExDRERPTjJfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9MQ0RWQ1BXQzIsIExDRFZDUFdDMl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0xDRFZFUFdDMiwgTENEVkVQV0MyX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fTENEVlNZTjIsIExDRFZTWU4yX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fTENEQ1MyLCBMQ0RDUzJfTUFSSyksCisKKwkvKiBCU0MgKi8KKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0lPSVMxNiwgSU9JUzE2X01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fQTI1LCBBMjVfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9BMjQsIEEyNF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0EyMywgQTIzX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fQTIyLCBBMjJfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9CUywgQlNfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9DUzZCX0NFMUIsIENTNkJfQ0UxQl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1dBSVQsIFdBSVRfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9DUzZBX0NFMkIsIENTNkFfQ0UyQl9NQVJLKSwKKworCS8qIFNCU0MgKi8KKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0hQRDYzLCBIUEQ2M19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0hQRDYyLCBIUEQ2Ml9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0hQRDYxLCBIUEQ2MV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0hQRDYwLCBIUEQ2MF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0hQRDU5LCBIUEQ1OV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0hQRDU4LCBIUEQ1OF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0hQRDU3LCBIUEQ1N19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0hQRDU2LCBIUEQ1Nl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0hQRDU1LCBIUEQ1NV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0hQRDU0LCBIUEQ1NF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0hQRDUzLCBIUEQ1M19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0hQRDUyLCBIUEQ1Ml9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0hQRDUxLCBIUEQ1MV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0hQRDUwLCBIUEQ1MF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0hQRDQ5LCBIUEQ0OV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0hQRDQ4LCBIUEQ0OF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0hQRFFNNywgSFBEUU03X01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fSFBEUU02LCBIUERRTTZfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9IUERRTTUsIEhQRFFNNV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0hQRFFNNCwgSFBEUU00X01BUkspLAorCisJLyogSVJRICovCisJUElOTVVYX0dQSU8oR1BJT19GTl9JUlEwLCBJUlEwX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fSVJRMSwgSVJRMV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0lSUTIsIElSUTJfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9JUlEzLCBJUlEzX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fSVJRNCwgSVJRNF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0lSUTUsIElSUTVfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9JUlE2LCBJUlE2X01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fSVJRNywgSVJRN19NQVJLKSwKKworCS8qIFNESEkgKi8KKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NESElDRCwgU0RISUNEX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0RISVdQLCBTREhJV1BfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TREhJRDMsIFNESElEM19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NESElEMiwgU0RISUQyX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0RISUQxLCBTREhJRDFfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TREhJRDAsIFNESElEMF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NESElDTUQsIFNESElDTURfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TREhJQ0xLLCBTREhJQ0xLX01BUkspLAorCisJLyogU0lVIC0gUG9ydCBBICovCisJUElOTVVYX0dQSU8oR1BJT19GTl9TSVVBT0xSLCBTSVVBT0xSX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0lVQU9CVCwgU0lVQU9CVF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NJVUFJU0xELCBTSVVBSVNMRF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NJVUFJTFIsIFNJVUFJTFJfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TSVVBSUJULCBTSVVBSUJUX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0lVQU9TTEQsIFNJVUFPU0xEX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0lVTUNLQSwgU0lVTUNLQV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NJVUZDS0EsIFNJVUZDS0FfTUFSSyksCisKKwkvKiBTSVUgLSBQb3J0IEIgKi8KKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NJVUJPTFIsIFNJVUJPTFJfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TSVVCT0JULCBTSVVCT0JUX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0lVQklTTEQsIFNJVUJJU0xEX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0lVQklMUiwgU0lVQklMUl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NJVUJJQlQsIFNJVUJJQlRfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TSVVCT1NMRCwgU0lVQk9TTERfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TSVVNQ0tCLCBTSVVNQ0tCX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0lVRkNLQiwgU0lVRkNLQl9NQVJLKSwKKworCS8qIEFVRCAqLworCVBJTk1VWF9HUElPKEdQSU9fRk5fQVVEU1lOQywgQVVEU1lOQ19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0FVREFUQTMsIEFVREFUQTNfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9BVURBVEEyLCBBVURBVEEyX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fQVVEQVRBMSwgQVVEQVRBMV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0FVREFUQTAsIEFVREFUQTBfTUFSSyksCisKKwkvKiBETUFDICovCisJUElOTVVYX0dQSU8oR1BJT19GTl9EQUNLLCBEQUNLX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRFJFUTAsIERSRVEwX01BUkspLAorCisJLyogVk9VICovCisJUElOTVVYX0dQSU8oR1BJT19GTl9EVl9DTEtJLCBEVl9DTEtJX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRFZfQ0xLLCBEVl9DTEtfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9EVl9IU1lOQywgRFZfSFNZTkNfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9EVl9WU1lOQywgRFZfVlNZTkNfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9EVl9EMTUsIERWX0QxNV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0RWX0QxNCwgRFZfRDE0X01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRFZfRDEzLCBEVl9EMTNfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9EVl9EMTIsIERWX0QxMl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0RWX0QxMSwgRFZfRDExX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRFZfRDEwLCBEVl9EMTBfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9EVl9EOSwgRFZfRDlfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9EVl9EOCwgRFZfRDhfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9EVl9ENywgRFZfRDdfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9EVl9ENiwgRFZfRDZfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9EVl9ENSwgRFZfRDVfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9EVl9ENCwgRFZfRDRfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9EVl9EMywgRFZfRDNfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9EVl9EMiwgRFZfRDJfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9EVl9EMSwgRFZfRDFfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9EVl9EMCwgRFZfRDBfTUFSSyksCisKKwkvKiBDUEcgKi8KKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NUQVRVUzAsIFNUQVRVUzBfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9QRFNUQVRVUywgUERTVEFUVVNfTUFSSyksCisKKwkvKiBTSU9GMCAqLworCVBJTk1VWF9HUElPKEdQSU9fRk5fU0lPRjBfTUNLLCBTSU9GMF9NQ0tfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TSU9GMF9TQ0ssIFNJT0YwX1NDS19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NJT0YwX1NZTkMsIFNJT0YwX1NZTkNfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TSU9GMF9TUzEsIFNJT0YwX1NTMV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NJT0YwX1NTMiwgU0lPRjBfU1MyX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0lPRjBfVFhELCBTSU9GMF9UWERfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TSU9GMF9SWEQsIFNJT0YwX1JYRF9NQVJLKSwKKworCS8qIFNJT0YxICovCisJUElOTVVYX0dQSU8oR1BJT19GTl9TSU9GMV9NQ0ssIFNJT0YxX01DS19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NJT0YxX1NDSywgU0lPRjFfU0NLX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0lPRjFfU1lOQywgU0lPRjFfU1lOQ19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NJT0YxX1NTMSwgU0lPRjFfU1MxX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0lPRjFfU1MyLCBTSU9GMV9TUzJfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TSU9GMV9UWEQsIFNJT0YxX1RYRF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NJT0YxX1JYRCwgU0lPRjFfUlhEX01BUkspLAorCisJLyogU0lNICovCisJUElOTVVYX0dQSU8oR1BJT19GTl9TSU1fRCwgU0lNX0RfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TSU1fQ0xLLCBTSU1fQ0xLX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0lNX1JTVCwgU0lNX1JTVF9NQVJLKSwKKworCS8qIFRTSUYgKi8KKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1RTX1NEQVQsIFRTX1NEQVRfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9UU19TQ0ssIFRTX1NDS19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1RTX1NERU4sIFRTX1NERU5fTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9UU19TUFNZTkMsIFRTX1NQU1lOQ19NQVJLKSwKKworCS8qIElSREEgKi8KKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0lSREFfSU4sIElSREFfSU5fTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9JUkRBX09VVCwgSVJEQV9PVVRfTUFSSyksCisKKwkvKiBUUFUgKi8KKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1RQVVRPLCBUUFVUT19NQVJLKSwKKworCS8qIEZMQ1RMICovCisJUElOTVVYX0dQSU8oR1BJT19GTl9GQ0UsIEZDRV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX05BRjcsIE5BRjdfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9OQUY2LCBOQUY2X01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fTkFGNSwgTkFGNV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX05BRjQsIE5BRjRfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9OQUYzLCBOQUYzX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fTkFGMiwgTkFGMl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX05BRjEsIE5BRjFfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9OQUYwLCBOQUYwX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRkNERSwgRkNERV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0ZPRSwgRk9FX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRlNDLCBGU0NfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9GV0UsIEZXRV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0ZSQiwgRlJCX01BUkspLAorCisJLyogS0VZU0MgKi8KKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0tFWUlOMCwgS0VZSU4wX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fS0VZSU4xLCBLRVlJTjFfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9LRVlJTjIsIEtFWUlOMl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0tFWUlOMywgS0VZSU4zX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fS0VZSU40LCBLRVlJTjRfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9LRVlPVVQwLCBLRVlPVVQwX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fS0VZT1VUMSwgS0VZT1VUMV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0tFWU9VVDIsIEtFWU9VVDJfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9LRVlPVVQzLCBLRVlPVVQzX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fS0VZT1VUNF9JTjYsIEtFWU9VVDRfSU42X01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fS0VZT1VUNV9JTjUsIEtFWU9VVDVfSU41X01BUkspLAorfTsKKworc3RhdGljIHN0cnVjdCBwaW5tdXhfY2ZnX3JlZyBwaW5tdXhfY29uZmlnX3JlZ3NbXSA9IHsKKwl7IFBJTk1VWF9DRkdfUkVHKCJQQUNSIiwgMHhhNDA1MDEwMCwgMTYsIDIpIHsKKwkJVklPX0Q3X1NDSUYxX1NDSywgUFRBN19PVVQsIFBUQTdfSU5fUEQsIFBUQTdfSU4sCisJCVZJT19ENl9TQ0lGMV9SWEQsIDAsIFBUQTZfSU5fUEQsIFBUQTZfSU4sCisJCVZJT19ENV9TQ0lGMV9UWEQsIFBUQTVfT1VULCBQVEE1X0lOX1BELCBQVEE1X0lOLAorCQlWSU9fRDQsIDAsIFBUQTRfSU5fUEQsIFBUQTRfSU4sCisJCVZJT19EMywgMCwgUFRBM19JTl9QRCwgUFRBM19JTiwKKwkJVklPX0QyLCAwLCBQVEEyX0lOX1BELCBQVEEyX0lOLAorCQlWSU9fRDEsIDAsIFBUQTFfSU5fUEQsIFBUQTFfSU4sCisJCVZJT19EMF9MQ0RMQ0xLLCAwLCBQVEEwX0lOX1BELCBQVEEwX0lOIH0KKwl9LAorCXsgUElOTVVYX0NGR19SRUcoIlBCQ1IiLCAweGE0MDUwMTAyLCAxNiwgMikgeworCQlIUEQ1NSwgUFRCN19PVVQsIDAsIFBUQjdfSU4sCisJCUhQRDU0LCBQVEI2X09VVCwgMCwgUFRCNl9JTiwKKwkJSFBENTMsIFBUQjVfT1VULCAwLCBQVEI1X0lOLAorCQlIUEQ1MiwgUFRCNF9PVVQsIDAsIFBUQjRfSU4sCisJCUhQRDUxLCBQVEIzX09VVCwgMCwgUFRCM19JTiwKKwkJSFBENTAsIFBUQjJfT1VULCAwLCBQVEIyX0lOLAorCQlIUEQ0OSwgUFRCMV9PVVQsIDAsIFBUQjFfSU4sCisJCUhQRDQ4LCBQVEIwX09VVCwgMCwgUFRCMF9JTiB9CisJfSwKKwl7IFBJTk1VWF9DRkdfUkVHKCJQQ0NSIiwgMHhhNDA1MDEwNCwgMTYsIDIpIHsKKwkJMCwgMCwgUFRDN19JTl9QVSwgUFRDN19JTiwKKwkJMCwgMCwgMCwgMCwKKwkJSU9JUzE2LCAwLCBQVEM1X0lOX1BVLCBQVEM1X0lOLAorCQlIUERRTTcsIFBUQzRfT1VULCAwLCBQVEM0X0lOLAorCQlIUERRTTYsIFBUQzNfT1VULCAwLCBQVEMzX0lOLAorCQlIUERRTTUsIFBUQzJfT1VULCAwLCBQVEMyX0lOLAorCQkwLCAwLCAwLCAwLAorCQlIUERRTTQsIFBUQzBfT1VULCAwLCBQVEMwX0lOIH0KKwl9LAorCXsgUElOTVVYX0NGR19SRUcoIlBEQ1IiLCAweGE0MDUwMTA2LCAxNiwgMikgeworCQlTREhJQ0QsIDAsIFBURDdfSU5fUFUsIFBURDdfSU4sCisJCVNESElXUCwgUFRENl9PVVQsIFBURDZfSU5fUFUsIFBURDZfSU4sCisJCVNESElEMywgUFRENV9PVVQsIFBURDVfSU5fUFUsIFBURDVfSU4sCisJCUlSUTJfU0RISUQyLCBQVEQ0X09VVCwgUFRENF9JTl9QVSwgUFRENF9JTiwKKwkJU0RISUQxLCBQVEQzX09VVCwgUFREM19JTl9QVSwgUFREM19JTiwKKwkJU0RISUQwLCBQVEQyX09VVCwgUFREMl9JTl9QVSwgUFREMl9JTiwKKwkJU0RISUNNRCwgUFREMV9PVVQsIFBURDFfSU5fUFUsIFBURDFfSU4sCisJCVNESElDTEssIFBURDBfT1VULCAwLCAwIH0KKwl9LAorCXsgUElOTVVYX0NGR19SRUcoIlBFQ1IiLCAweGE0MDUwMTA4LCAxNiwgMikgeworCQlBMjUsIFBURTdfT1VULCBQVEU3X0lOX1BELCBQVEU3X0lOLAorCQlBMjQsIFBURTZfT1VULCBQVEU2X0lOX1BELCBQVEU2X0lOLAorCQlBMjMsIFBURTVfT1VULCBQVEU1X0lOX1BELCBQVEU1X0lOLAorCQlBMjIsIFBURTRfT1VULCBQVEU0X0lOX1BELCBQVEU0X0lOLAorCQkwLCAwLCAwLCAwLAorCQkwLCAwLCAwLCAwLAorCQlJUlE1LCBQVEUxX09VVCwgUFRFMV9JTl9QRCwgUFRFMV9JTiwKKwkJSVJRNF9CUywgUFRFMF9PVVQsIFBURTBfSU5fUEQsIFBURTBfSU4gfQorCX0sCisJeyBQSU5NVVhfQ0ZHX1JFRygiUEZDUiIsIDB4YTQwNTAxMGEsIDE2LCAyKSB7CisJCTAsIDAsIDAsIDAsCisJCVBURjYsIFBURjZfT1VULCBQVEY2X0lOX1BELCBQVEY2X0lOLAorCQlTSU9TQ0tfU0lVQk9CVCwgUFRGNV9PVVQsIFBURjVfSU5fUEQsIFBURjVfSU4sCisJCVNJT1NUUkIxX1NJVUJPTFIsIFBURjRfT1VULCBQVEY0X0lOX1BELCBQVEY0X0lOLAorCQlTSU9TVFJCMF9TSVVCSUJULCBQVEYzX09VVCwgUFRGM19JTl9QRCwgUFRGM19JTiwKKwkJU0lPRF9TSVVCSUxSLCBQVEYyX09VVCwgUFRGMl9JTl9QRCwgUFRGMl9JTiwKKwkJU0lPUlhEX1NJVUJJU0xELCAwLCBQVEYxX0lOX1BELCBQVEYxX0lOLAorCQlTSU9UWERfU0lVQk9TTEQsIFBURjBfT1VULCAwLCAwIH0KKwl9LAorCXsgUElOTVVYX0NGR19SRUcoIlBHQ1IiLCAweGE0MDUwMTBjLCAxNiwgMikgeworCQkwLCAwLCAwLCAwLAorCQkwLCAwLCAwLCAwLAorCQkwLCAwLCAwLCAwLAorCQlBVURTWU5DLCBQVEc0X09VVCwgMCwgMCwKKwkJQVVEQVRBMywgUFRHM19PVVQsIDAsIDAsCisJCUFVREFUQTIsIFBURzJfT1VULCAwLCAwLAorCQlBVURBVEExLCBQVEcxX09VVCwgMCwgMCwKKwkJQVVEQVRBMCwgUFRHMF9PVVQsIDAsIDAgfQorCX0sCisJeyBQSU5NVVhfQ0ZHX1JFRygiUEhDUiIsIDB4YTQwNTAxMGUsIDE2LCAyKSB7CisJCUxDRFZDUFdDX0xDRFZDUFdDMiwgUFRIN19PVVQsIDAsIDAsCisJCUxDRFZTWU4yX0RBQ0ssIFBUSDZfT1VULCBQVEg2X0lOX1BELCBQVEg2X0lOLAorCQlMQ0RWU1lOLCBQVEg1X09VVCwgUFRINV9JTl9QRCwgUFRINV9JTiwKKwkJTENERElTUF9MQ0RSUywgUFRINF9PVVQsIDAsIDAsCisJCUxDREhTWU5fTENEQ1MsIFBUSDNfT1VULCAwLCAwLAorCQlMQ0RET05fTENERE9OMiwgUFRIMl9PVVQsIDAsIDAsCisJCUxDREQxN19EVl9IU1lOQywgUFRIMV9PVVQsIFBUSDFfSU5fUEQsIFBUSDFfSU4sCisJCUxDREQxNl9EVl9WU1lOQywgUFRIMF9PVVQsIFBUSDBfSU5fUEQsIFBUSDBfSU4gfQorCX0sCisJeyBQSU5NVVhfQ0ZHX1JFRygiUEpDUiIsIDB4YTQwNTAxMTAsIDE2LCAyKSB7CisJCVNUQVRVUzAsIFBUSjdfT1VULCAwLCAwLAorCQkwLCBQVEo2X09VVCwgMCwgMCwKKwkJUERTVEFUVVMsIFBUSjVfT1VULCAwLCAwLAorCQkwLCAwLCAwLCAwLAorCQkwLCAwLCAwLCAwLAorCQkwLCAwLCAwLCAwLAorCQlJUlExLCBQVEoxX09VVCwgUFRKMV9JTl9QVSwgUFRKMV9JTiwKKwkJSVJRMCwgUFRKMF9PVVQsIFBUSjBfSU5fUFUsIFBUSjBfSU4gfQorCX0sCisJeyBQSU5NVVhfQ0ZHX1JFRygiUEtDUiIsIDB4YTQwNTAxMTIsIDE2LCAyKSB7CisJCTAsIDAsIDAsIDAsCisJCVNJVUFJTFJfU0lPRjFfU1MyLCBQVEs2X09VVCwgUFRLNl9JTl9QRCwgUFRLNl9JTiwKKwkJU0lVQUlCVF9TSU9GMV9TUzEsIFBUSzVfT1VULCBQVEs1X0lOX1BELCBQVEs1X0lOLAorCQlTSVVBT0xSX1NJT0YxX1NZTkMsIFBUSzRfT1VULCBQVEs0X0lOX1BELCBQVEs0X0lOLAorCQlTSVVBT0JUX1NJT0YxX1NDSywgUFRLM19PVVQsIFBUSzNfSU5fUEQsIFBUSzNfSU4sCisJCVNJVUFJU0xEX1NJT0YxX1JYRCwgMCwgUFRLMl9JTl9QRCwgUFRLMl9JTiwKKwkJU0lVQU9TTERfU0lPRjFfVFhELCBQVEsxX09VVCwgMCwgMCwKKwkJUFRLMCwgUFRLMF9PVVQsIFBUSzBfSU5fUEQsIFBUSzBfSU4gfQorCX0sCisJeyBQSU5NVVhfQ0ZHX1JFRygiUExDUiIsIDB4YTQwNTAxMTQsIDE2LCAyKSB7CisJCUxDREQxNV9EVl9EMTUsIFBUTDdfT1VULCBQVEw3X0lOX1BELCBQVEw3X0lOLAorCQlMQ0REMTRfRFZfRDE0LCBQVEw2X09VVCwgUFRMNl9JTl9QRCwgUFRMNl9JTiwKKwkJTENERDEzX0RWX0QxMywgUFRMNV9PVVQsIFBUTDVfSU5fUEQsIFBUTDVfSU4sCisJCUxDREQxMl9EVl9EMTIsIFBUTDRfT1VULCBQVEw0X0lOX1BELCBQVEw0X0lOLAorCQlMQ0REMTFfRFZfRDExLCBQVEwzX09VVCwgUFRMM19JTl9QRCwgUFRMM19JTiwKKwkJTENERDEwX0RWX0QxMCwgUFRMMl9PVVQsIFBUTDJfSU5fUEQsIFBUTDJfSU4sCisJCUxDREQ5X0RWX0Q5LCBQVEwxX09VVCwgUFRMMV9JTl9QRCwgUFRMMV9JTiwKKwkJTENERDhfRFZfRDgsIFBUTDBfT1VULCBQVEwwX0lOX1BELCBQVEwwX0lOIH0KKwl9LAorCXsgUElOTVVYX0NGR19SRUcoIlBNQ1IiLCAweGE0MDUwMTE2LCAxNiwgMikgeworCQlMQ0REN19EVl9ENywgUFRNN19PVVQsIFBUTTdfSU5fUEQsIFBUTTdfSU4sCisJCUxDREQ2X0RWX0Q2LCBQVE02X09VVCwgUFRNNl9JTl9QRCwgUFRNNl9JTiwKKwkJTENERDVfRFZfRDUsIFBUTTVfT1VULCBQVE01X0lOX1BELCBQVE01X0lOLAorCQlMQ0RENF9EVl9ENCwgUFRNNF9PVVQsIFBUTTRfSU5fUEQsIFBUTTRfSU4sCisJCUxDREQzX0RWX0QzLCBQVE0zX09VVCwgUFRNM19JTl9QRCwgUFRNM19JTiwKKwkJTENERDJfRFZfRDIsIFBUTTJfT1VULCBQVE0yX0lOX1BELCBQVE0yX0lOLAorCQlMQ0REMV9EVl9EMSwgUFRNMV9PVVQsIFBUTTFfSU5fUEQsIFBUTTFfSU4sCisJCUxDREQwX0RWX0QwLCBQVE0wX09VVCwgUFRNMF9JTl9QRCwgUFRNMF9JTiB9CisJfSwKKwl7IFBJTk1VWF9DRkdfUkVHKCJQTkNSIiwgMHhhNDA1MDExOCwgMTYsIDIpIHsKKwkJSFBENjMsIFBUTjdfT1VULCAwLCBQVE43X0lOLAorCQlIUEQ2MiwgUFRONl9PVVQsIDAsIFBUTjZfSU4sCisJCUhQRDYxLCBQVE41X09VVCwgMCwgUFRONV9JTiwKKwkJSFBENjAsIFBUTjRfT1VULCAwLCBQVE40X0lOLAorCQlIUEQ1OSwgUFROM19PVVQsIDAsIFBUTjNfSU4sCisJCUhQRDU4LCBQVE4yX09VVCwgMCwgUFROMl9JTiwKKwkJSFBENTcsIFBUTjFfT1VULCAwLCBQVE4xX0lOLAorCQlIUEQ1NiwgUFROMF9PVVQsIDAsIFBUTjBfSU4gfQorCX0sCisJeyBQSU5NVVhfQ0ZHX1JFRygiUFFDUiIsIDB4YTQwNTAxMWEsIDE2LCAyKSB7CisJCTAsIDAsIDAsIDAsCisJCVNJT0YwX1NTMl9TSU1fUlNULCBQVFE2X09VVCwgMCwgMCwKKwkJU0lPRjBfU1MxX1RTX1NQU1lOQywgUFRRNV9PVVQsIFBUUTVfSU5fUEQsIFBUUTVfSU4sCisJCVNJT0YwX1NZTkNfVFNfU0RFTiwgUFRRNF9PVVQsIFBUUTRfSU5fUEQsIFBUUTRfSU4sCisJCVNJT0YwX1NDS19UU19TQ0ssIFBUUTNfT1VULCBQVFEzX0lOX1BELCBQVFEzX0lOLAorCQlQVFEyLCAwLCBQVFEyX0lOX1BELCBQVFEyX0lOLAorCQlQVFExLCBQVFExX09VVCwgMCwgMCwKKwkJUFRRMCwgUFRRMF9PVVQsIFBUUTBfSU5fUFUsIFBUUTBfSU4gfQorCX0sCisJeyBQSU5NVVhfQ0ZHX1JFRygiUFJDUiIsIDB4YTQwNTAxMWMsIDE2LCAyKSB7CisJCTAsIDAsIDAsIDAsCisJCTAsIDAsIDAsIDAsCisJCTAsIDAsIDAsIDAsCisJCUxDRFJELCBQVFI0X09VVCwgMCwgMCwKKwkJQ1M2Ql9DRTFCX0xDRENTMiwgUFRSM19PVVQsIDAsIDAsCisJCVdBSVQsIDAsIFBUUjJfSU5fUFUsIFBUUjJfSU4sCisJCUxDRERDS19MQ0RXUiwgUFRSMV9PVVQsIDAsIDAsCisJCUxDRFZFUFdDX0xDRFZFUFdDMiwgUFRSMF9PVVQsIDAsIDAgfQorCX0sCisJeyBQSU5NVVhfQ0ZHX1JFRygiUFNDUiIsIDB4YTQwNTAxMWUsIDE2LCAyKSB7CisJCTAsIDAsIDAsIDAsCisJCTAsIDAsIDAsIDAsCisJCTAsIDAsIDAsIDAsCisJCVNDSUYwX0NUU19TSVVBSVNQRCwgMCwgUFRTNF9JTl9QRCwgUFRTNF9JTiwKKwkJU0NJRjBfUlRTX1NJVUFPU1BELCBQVFMzX09VVCwgMCwgMCwKKwkJU0NJRjBfU0NLX1RQVVRPLCBQVFMyX09VVCwgUFRTMl9JTl9QRCwgUFRTMl9JTiwKKwkJU0NJRjBfUlhELCAwLCBQVFMxX0lOX1BELCBQVFMxX0lOLAorCQlTQ0lGMF9UWEQsIFBUUzBfT1VULCAwLCAwIH0KKwl9LAorCXsgUElOTVVYX0NGR19SRUcoIlBUQ1IiLCAweGE0MDUwMTQwLCAxNiwgMikgeworCQkwLCAwLCAwLCAwLAorCQkwLCAwLCAwLCAwLAorCQkwLCAwLCAwLCAwLAorCQlGT0VfVklPX1ZEMiwgUFRUNF9PVVQsIFBUVDRfSU5fUEQsIFBUVDRfSU4sCisJCUZXRSwgUFRUM19PVVQsIFBUVDNfSU5fUEQsIFBUVDNfSU4sCisJCUZTQywgUFRUMl9PVVQsIFBUVDJfSU5fUEQsIFBUVDJfSU4sCisJCURSRVEwLCAwLCBQVFQxX0lOX1BELCBQVFQxX0lOLAorCQlGQ0RFLCBQVFQwX09VVCwgMCwgMCB9CisJfSwKKwl7IFBJTk1VWF9DRkdfUkVHKCJQVUNSIiwgMHhhNDA1MDE0MiwgMTYsIDIpIHsKKwkJMCwgMCwgMCwgMCwKKwkJMCwgMCwgMCwgMCwKKwkJMCwgMCwgMCwgMCwKKwkJTkFGMl9WSU9fRDEwLCBQVFU0X09VVCwgUFRVNF9JTl9QRCwgUFRVNF9JTiwKKwkJTkFGMV9WSU9fRDksIFBUVTNfT1VULCBQVFUzX0lOX1BELCBQVFUzX0lOLAorCQlOQUYwX1ZJT19EOCwgUFRVMl9PVVQsIFBUVTJfSU5fUEQsIFBUVTJfSU4sCisJCUZSQl9WSU9fQ0xLMiwgMCwgUFRVMV9JTl9QRCwgUFRVMV9JTiwKKwkJRkNFX1ZJT19IRDIsIFBUVTBfT1VULCBQVFUwX0lOX1BELCBQVFUwX0lOIH0KKwl9LAorCXsgUElOTVVYX0NGR19SRUcoIlBWQ1IiLCAweGE0MDUwMTQ0LCAxNiwgMikgeworCQkwLCAwLCAwLCAwLAorCQkwLCAwLCAwLCAwLAorCQkwLCAwLCAwLCAwLAorCQlOQUY3X1ZJT19EMTUsIFBUVjRfT1VULCBQVFY0X0lOX1BELCBQVFY0X0lOLAorCQlOQUY2X1ZJT19EMTQsIFBUVjNfT1VULCBQVFYzX0lOX1BELCBQVFYzX0lOLAorCQlOQUY1X1ZJT19EMTMsIFBUVjJfT1VULCBQVFYyX0lOX1BELCBQVFYyX0lOLAorCQlOQUY0X1ZJT19EMTIsIFBUVjFfT1VULCBQVFYxX0lOX1BELCBQVFYxX0lOLAorCQlOQUYzX1ZJT19EMTEsIFBUVjBfT1VULCBQVFYwX0lOX1BELCBQVFYwX0lOIH0KKwl9LAorCXsgUElOTVVYX0NGR19SRUcoIlBXQ1IiLCAweGE0MDUwMTQ2LCAxNiwgMikgeworCQkwLCAwLCAwLCAwLAorCQlWSU9fRkxEX1NDSUYyX0NUUywgMCwgUFRXNl9JTl9QRCwgUFRXNl9JTiwKKwkJVklPX0NLT19TQ0lGMl9SVFMsIFBUVzVfT1VULCAwLCAwLAorCQlWSU9fU1RFWF9TQ0lGMl9TQ0ssIFBUVzRfT1VULCBQVFc0X0lOX1BELCBQVFc0X0lOLAorCQlWSU9fU1RFTV9TQ0lGMl9UWEQsIFBUVzNfT1VULCBQVFczX0lOX1BELCBQVFczX0lOLAorCQlWSU9fSERfU0NJRjJfUlhELCBQVFcyX09VVCwgUFRXMl9JTl9QRCwgUFRXMl9JTiwKKwkJVklPX1ZEX1NDSUYxX0NUUywgUFRXMV9PVVQsIFBUVzFfSU5fUEQsIFBUVzFfSU4sCisJCVZJT19DTEtfU0NJRjFfUlRTLCBQVFcwX09VVCwgUFRXMF9JTl9QRCwgUFRXMF9JTiB9CisJfSwKKwl7IFBJTk1VWF9DRkdfUkVHKCJQWENSIiwgMHhhNDA1MDE0OCwgMTYsIDIpIHsKKwkJMCwgMCwgMCwgMCwKKwkJQ1M2QV9DRTJCLCBQVFg2X09VVCwgUFRYNl9JTl9QVSwgUFRYNl9JTiwKKwkJTENERDIzLCBQVFg1X09VVCwgUFRYNV9JTl9QRCwgUFRYNV9JTiwKKwkJTENERDIyLCBQVFg0X09VVCwgUFRYNF9JTl9QRCwgUFRYNF9JTiwKKwkJTENERDIxLCBQVFgzX09VVCwgUFRYM19JTl9QRCwgUFRYM19JTiwKKwkJTENERDIwLCBQVFgyX09VVCwgUFRYMl9JTl9QRCwgUFRYMl9JTiwKKwkJTENERDE5X0RWX0NMS0ksIFBUWDFfT1VULCBQVFgxX0lOX1BELCBQVFgxX0lOLAorCQlMQ0REMThfRFZfQ0xLLCBQVFgwX09VVCwgUFRYMF9JTl9QRCwgUFRYMF9JTiB9CisJfSwKKwl7IFBJTk1VWF9DRkdfUkVHKCJQWUNSIiwgMHhhNDA1MDE0YSwgMTYsIDIpIHsKKwkJMCwgMCwgMCwgMCwKKwkJMCwgMCwgMCwgMCwKKwkJS0VZT1VUNV9JTjUsIFBUWTVfT1VULCBQVFk1X0lOX1BVLCBQVFk1X0lOLAorCQlLRVlPVVQ0X0lONiwgUFRZNF9PVVQsIFBUWTRfSU5fUFUsIFBUWTRfSU4sCisJCUtFWU9VVDMsIFBUWTNfT1VULCBQVFkzX0lOX1BVLCBQVFkzX0lOLAorCQlLRVlPVVQyLCBQVFkyX09VVCwgUFRZMl9JTl9QVSwgUFRZMl9JTiwKKwkJS0VZT1VUMSwgUFRZMV9PVVQsIDAsIDAsCisJCUtFWU9VVDAsIFBUWTBfT1VULCBQVFkwX0lOX1BVLCBQVFkwX0lOIH0KKwl9LAorCXsgUElOTVVYX0NGR19SRUcoIlBaQ1IiLCAweGE0MDUwMTRjLCAxNiwgMikgeworCQkwLCAwLCAwLCAwLAorCQkwLCAwLCAwLCAwLAorCQlLRVlJTjRfSVJRNywgMCwgUFRaNV9JTl9QVSwgUFRaNV9JTiwKKwkJS0VZSU4zLCAwLCBQVFo0X0lOX1BVLCBQVFo0X0lOLAorCQlLRVlJTjIsIDAsIFBUWjNfSU5fUFUsIFBUWjNfSU4sCisJCUtFWUlOMSwgMCwgUFRaMl9JTl9QVSwgUFRaMl9JTiwKKwkJS0VZSU4wX0lSUTYsIDAsIFBUWjFfSU5fUFUsIFBUWjFfSU4sCisJCTAsIDAsIDAsIDAgfQorCX0sCisJeyBQSU5NVVhfQ0ZHX1JFRygiUFNFTEEiLCAweGE0MDUwMTRlLCAxNiwgMSkgeworCQlQU0ExNV9LRVlJTjAsIFBTQTE1X0lSUTYsCisJCVBTQTE0X0tFWUlONCwgUFNBMTRfSVJRNywKKwkJMCwgMCwKKwkJMCwgMCwKKwkJMCwgMCwKKwkJMCwgMCwKKwkJUFNBOV9JUlE0LCBQU0E5X0JTLAorCQkwLCAwLAorCQkwLCAwLAorCQkwLCAwLAorCQkwLCAwLAorCQlQU0E0X0lSUTIsIFBTQTRfU0RISUQyLAorCQkwLCAwLAorCQkwLCAwLAorCQkwLCAwLAorCQkwLCAwIH0KKwl9LAorCXsgUElOTVVYX0NGR19SRUcoIlBTRUxCIiwgMHhhNDA1MDE1MCwgMTYsIDEpIHsKKwkJUFNCMTVfU0lPVFhELCBQU0IxNV9TSVVCT1NMRCwKKwkJUFNCMTRfU0lPUlhELCBQU0IxNF9TSVVCSVNMRCwKKwkJUFNCMTNfU0lPRCwgUFNCMTNfU0lVQklMUiwKKwkJUFNCMTJfU0lPU1RSQjAsIFBTQjEyX1NJVUJJQlQsCisJCVBTQjExX1NJT1NUUkIxLCBQU0IxMV9TSVVCT0xSLAorCQlQU0IxMF9TSU9TQ0ssIFBTQjEwX1NJVUJPQlQsCisJCVBTQjlfU0lPTUNLLCBQU0I5X1NJVU1DS0IsCisJCVBTQjhfU0lPRjBfTUNLLCBQU0I4X0lSUTMsCisJCVBTQjdfU0lPRjBfVFhELCBQU0I3X0lSREFfT1VULAorCQlQU0I2X1NJT0YwX1JYRCwgUFNCNl9JUkRBX0lOLAorCQlQU0I1X1NJT0YwX1NDSywgUFNCNV9UU19TQ0ssCisJCVBTQjRfU0lPRjBfU1lOQywgUFNCNF9UU19TREVOLAorCQlQU0IzX1NJT0YwX1NTMSwgUFNCM19UU19TUFNZTkMsCisJCVBTQjJfU0lPRjBfU1MyLCBQU0IyX1NJTV9SU1QsCisJCVBTQjFfU0lVTUNLQSwgUFNCMV9TSU9GMV9NQ0ssCisJCVBTQjBfU0lVQU9TTEQsIFBTQjBfU0lPRjFfVFhEIH0KKwl9LAorCXsgUElOTVVYX0NGR19SRUcoIlBTRUxDIiwgMHhhNDA1MDE1MiwgMTYsIDEpIHsKKwkJUFNDMTVfU0lVQUlTTEQsIFBTQzE1X1NJT0YxX1JYRCwKKwkJUFNDMTRfU0lVQU9CVCwgUFNDMTRfU0lPRjFfU0NLLAorCQlQU0MxM19TSVVBT0xSLCBQU0MxM19TSU9GMV9TWU5DLAorCQlQU0MxMl9TSVVBSUJULCBQU0MxMl9TSU9GMV9TUzEsCisJCVBTQzExX1NJVUFJTFIsIFBTQzExX1NJT0YxX1NTMiwKKwkJMCwgMCwKKwkJMCwgMCwKKwkJMCwgMCwKKwkJMCwgMCwKKwkJMCwgMCwKKwkJMCwgMCwKKwkJMCwgMCwKKwkJMCwgMCwKKwkJMCwgMCwKKwkJMCwgMCwKKwkJUFNDMF9OQUYsIFBTQzBfVklPIH0KKwl9LAorCXsgUElOTVVYX0NGR19SRUcoIlBTRUxEIiwgMHhhNDA1MDE1NCwgMTYsIDEpIHsKKwkJMCwgMCwKKwkJMCwgMCwKKwkJUFNEMTNfVklPLCBQU0QxM19TQ0lGMiwKKwkJUFNEMTJfVklPLCBQU0QxMl9TQ0lGMSwKKwkJUFNEMTFfVklPLCBQU0QxMV9TQ0lGMSwKKwkJUFNEMTBfVklPX0QwLCBQU0QxMF9MQ0RMQ0xLLAorCQlQU0Q5X1NJT01DS19TSVVNQ0tCLCBQU0Q5X1NJVUZDS0IsCisJCVBTRDhfU0NJRjBfU0NLLCBQU0Q4X1RQVVRPLAorCQlQU0Q3X1NDSUYwX1JUUywgUFNEN19TSVVBT1NQRCwKKwkJUFNENl9TQ0lGMF9DVFMsIFBTRDZfU0lVQUlTUEQsCisJCVBTRDVfQ1M2Ql9DRTFCLCBQU0Q1X0xDRENTMiwKKwkJMCwgMCwKKwkJUFNEM19MQ0RWRVBXQ19MQ0RWQ1BXQywgUFNEM19MQ0RWRVBXQzJfTENEVkNQV0MyLAorCQlQU0QyX0xDRERPTiwgUFNEMl9MQ0RET04yLAorCQkwLCAwLAorCQlQU0QwX0xDREQxOV9MQ0REMCwgUFNEMF9EViB9CisJfSwKKwl7IFBJTk1VWF9DRkdfUkVHKCJQU0VMRSIsIDB4YTQwNTAxNTYsIDE2LCAxKSB7CisJCVBTRTE1X1NJT0YwX01DS19JUlEzLCBQU0UxNV9TSU1fRCwKKwkJUFNFMTRfU0lPRjBfVFhEX0lSREFfT1VULCBQU0UxNF9TSU1fQ0xLLAorCQlQU0UxM19TSU9GMF9SWERfSVJEQV9JTiwgUFNFMTNfVFNfU0RBVCwKKwkJUFNFMTJfTENEVlNZTjIsIFBTRTEyX0RBQ0ssCisJCVBTRTExX1NJVU1DS0FfU0lPRjFfTUNLLCBQU0UxMV9TSVVGQ0tBLAorCQkwLCAwLAorCQkwLCAwLAorCQkwLCAwLAorCQkwLCAwLAorCQkwLCAwLAorCQkwLCAwLAorCQkwLCAwLAorCQlQU0UzX0ZMQ1RMLCBQU0UzX1ZJTywKKwkJUFNFMl9OQUYyLCBQU0UyX1ZJT19EMTAsCisJCVBTRTFfTkFGMSwgUFNFMV9WSU9fRDksCisJCVBTRTBfTkFGMCwgUFNFMF9WSU9fRDggfQorCX0sCisJeyBQSU5NVVhfQ0ZHX1JFRygiSElaQ1JBIiwgMHhhNDA1MDE1OCwgMTYsIDEpIHsKKwkJMCwgMCwKKwkJSElaQTE0X0tFWVNDLCBISVpBMTRfSElaLAorCQkwLCAwLAorCQkwLCAwLAorCQkwLCAwLAorCQlISVpBMTBfTkFGLCBISVpBMTBfSElaLAorCQlISVpBOV9WSU8sIEhJWkE5X0hJWiwKKwkJSElaQThfTENEQywgSElaQThfSElaLAorCQlISVpBN19MQ0RDLCBISVpBN19ISVosCisJCUhJWkE2X0xDREMsIEhJWkE2X0hJWiwKKwkJMCwgMCwKKwkJMCwgMCwKKwkJMCwgMCwKKwkJMCwgMCwKKwkJMCwgMCwKKwkJMCwgMCB9CisJfSwKKwl7IFBJTk1VWF9DRkdfUkVHKCJISVpDUkIiLCAweGE0MDUwMTVhLCAxNiwgMSkgeworCQkwLCAwLAorCQkwLCAwLAorCQkwLCAwLAorCQkwLCAwLAorCQkwLCAwLAorCQkwLCAwLAorCQkwLCAwLAorCQkwLCAwLAorCQkwLCAwLAorCQkwLCAwLAorCQkwLCAwLAorCQkwLCAwLAorCQkwLCAwLAorCQkwLCAwLAorCQlISVpCMV9WSU8sIEhJWkIxX0hJWiwKKwkJSElaQjBfVklPLCBISVpCMF9ISVogfQorCX0sCisJeyBQSU5NVVhfQ0ZHX1JFRygiSElaQ1JDIiwgMHhhNDA1MDE1YywgMTYsIDEpIHsKKwkJSElaQzE1X0lSUTcsIEhJWkMxNV9ISVosCisJCUhJWkMxNF9JUlE2LCBISVpDMTRfSElaLAorCQlISVpDMTNfSVJRNSwgSElaQzEzX0hJWiwKKwkJSElaQzEyX0lSUTQsIEhJWkMxMl9ISVosCisJCUhJWkMxMV9JUlEzLCBISVpDMTFfSElaLAorCQlISVpDMTBfSVJRMiwgSElaQzEwX0hJWiwKKwkJSElaQzlfSVJRMSwgSElaQzlfSElaLAorCQlISVpDOF9JUlEwLCBISVpDOF9ISVosCisJCTAsIDAsCisJCTAsIDAsCisJCTAsIDAsCisJCTAsIDAsCisJCTAsIDAsCisJCTAsIDAsCisJCTAsIDAsCisJCTAsIDAgfQorCX0sCisJeyBQSU5NVVhfQ0ZHX1JFRygiTVNFTENSQiIsIDB4YTQwNTAxODIsIDE2LCAxKSB7CisJCTAsIDAsCisJCTAsIDAsCisJCTAsIDAsCisJCTAsIDAsCisJCTAsIDAsCisJCTAsIDAsCisJCU1TRUxCOV9WSU8sIE1TRUxCOV9WSU8yLAorCQlNU0VMQjhfUkdCLCBNU0VMQjhfU1lTLAorCQkwLCAwLAorCQkwLCAwLAorCQkwLCAwLAorCQkwLCAwLAorCQkwLCAwLAorCQkwLCAwLAorCQkwLCAwLAorCQkwLCAwIH0KKwl9LAorCXt9Cit9OworCitzdGF0aWMgc3RydWN0IHBpbm11eF9kYXRhX3JlZyBwaW5tdXhfZGF0YV9yZWdzW10gPSB7CisJeyBQSU5NVVhfREFUQV9SRUcoIlBBRFIiLCAweGE0MDUwMTIwLCA4KSB7CisJCVBUQTdfREFUQSwgUFRBNl9EQVRBLCBQVEE1X0RBVEEsIFBUQTRfREFUQSwKKwkJUFRBM19EQVRBLCBQVEEyX0RBVEEsIFBUQTFfREFUQSwgUFRBMF9EQVRBIH0KKwl9LAorCXsgUElOTVVYX0RBVEFfUkVHKCJQQkRSIiwgMHhhNDA1MDEyMiwgOCkgeworCQlQVEI3X0RBVEEsIFBUQjZfREFUQSwgUFRCNV9EQVRBLCBQVEI0X0RBVEEsCisJCVBUQjNfREFUQSwgUFRCMl9EQVRBLCBQVEIxX0RBVEEsIFBUQjBfREFUQSB9CisJfSwKKwl7IFBJTk1VWF9EQVRBX1JFRygiUENEUiIsIDB4YTQwNTAxMjQsIDgpIHsKKwkJUFRDN19EQVRBLCAwLCBQVEM1X0RBVEEsIFBUQzRfREFUQSwKKwkJUFRDM19EQVRBLCBQVEMyX0RBVEEsIDAsIFBUQzBfREFUQSB9CisJfSwKKwl7IFBJTk1VWF9EQVRBX1JFRygiUEREUiIsIDB4YTQwNTAxMjYsIDgpIHsKKwkJUFREN19EQVRBLCBQVEQ2X0RBVEEsIFBURDVfREFUQSwgUFRENF9EQVRBLAorCQlQVEQzX0RBVEEsIFBURDJfREFUQSwgUFREMV9EQVRBLCBQVEQwX0RBVEEgfQorCX0sCisJeyBQSU5NVVhfREFUQV9SRUcoIlBFRFIiLCAweGE0MDUwMTI4LCA4KSB7CisJCVBURTdfREFUQSwgUFRFNl9EQVRBLCBQVEU1X0RBVEEsIFBURTRfREFUQSwKKwkJMCwgMCwgUFRFMV9EQVRBLCBQVEUwX0RBVEEgfQorCX0sCisJeyBQSU5NVVhfREFUQV9SRUcoIlBGRFIiLCAweGE0MDUwMTJhLCA4KSB7CisJCTAsIFBURjZfREFUQSwgUFRGNV9EQVRBLCBQVEY0X0RBVEEsCisJCVBURjNfREFUQSwgUFRGMl9EQVRBLCBQVEYxX0RBVEEsIFBURjBfREFUQSB9CisJfSwKKwl7IFBJTk1VWF9EQVRBX1JFRygiUEdEUiIsIDB4YTQwNTAxMmMsIDgpIHsKKwkJMCwgMCwgMCwgUFRHNF9EQVRBLAorCQlQVEczX0RBVEEsIFBURzJfREFUQSwgUFRHMV9EQVRBLCBQVEcwX0RBVEEgfQorCX0sCisJeyBQSU5NVVhfREFUQV9SRUcoIlBIRFIiLCAweGE0MDUwMTJlLCA4KSB7CisJCVBUSDdfREFUQSwgUFRINl9EQVRBLCBQVEg1X0RBVEEsIFBUSDRfREFUQSwKKwkJUFRIM19EQVRBLCBQVEgyX0RBVEEsIFBUSDFfREFUQSwgUFRIMF9EQVRBIH0KKwl9LAorCXsgUElOTVVYX0RBVEFfUkVHKCJQSkRSIiwgMHhhNDA1MDEzMCwgOCkgeworCQlQVEo3X0RBVEEsIFBUSjZfREFUQSwgUFRKNV9EQVRBLCAwLAorCQkwLCAwLCBQVEoxX0RBVEEsIFBUSjBfREFUQSB9CisJfSwKKwl7IFBJTk1VWF9EQVRBX1JFRygiUEtEUiIsIDB4YTQwNTAxMzIsIDgpIHsKKwkJMCwgUFRLNl9EQVRBLCBQVEs1X0RBVEEsIFBUSzRfREFUQSwKKwkJUFRLM19EQVRBLCBQVEsyX0RBVEEsIFBUSzFfREFUQSwgUFRLMF9EQVRBIH0KKwl9LAorCXsgUElOTVVYX0RBVEFfUkVHKCJQTERSIiwgMHhhNDA1MDEzNCwgOCkgeworCQlQVEw3X0RBVEEsIFBUTDZfREFUQSwgUFRMNV9EQVRBLCBQVEw0X0RBVEEsCisJCVBUTDNfREFUQSwgUFRMMl9EQVRBLCBQVEwxX0RBVEEsIFBUTDBfREFUQSB9CisJfSwKKwl7IFBJTk1VWF9EQVRBX1JFRygiUE1EUiIsIDB4YTQwNTAxMzYsIDgpIHsKKwkJUFRNN19EQVRBLCBQVE02X0RBVEEsIFBUTTVfREFUQSwgUFRNNF9EQVRBLAorCQlQVE0zX0RBVEEsIFBUTTJfREFUQSwgUFRNMV9EQVRBLCBQVE0wX0RBVEEgfQorCX0sCisJeyBQSU5NVVhfREFUQV9SRUcoIlBORFIiLCAweGE0MDUwMTM4LCA4KSB7CisJCVBUTjdfREFUQSwgUFRONl9EQVRBLCBQVE41X0RBVEEsIFBUTjRfREFUQSwKKwkJUFROM19EQVRBLCBQVE4yX0RBVEEsIFBUTjFfREFUQSwgUFROMF9EQVRBIH0KKwl9LAorCXsgUElOTVVYX0RBVEFfUkVHKCJQUURSIiwgMHhhNDA1MDEzYSwgOCkgeworCQkwLCBQVFE2X0RBVEEsIFBUUTVfREFUQSwgUFRRNF9EQVRBLAorCQlQVFEzX0RBVEEsIFBUUTJfREFUQSwgUFRRMV9EQVRBLCBQVFEwX0RBVEEgfQorCX0sCisJeyBQSU5NVVhfREFUQV9SRUcoIlBSRFIiLCAweGE0MDUwMTNjLCA4KSB7CisJCTAsIDAsIDAsIFBUUjRfREFUQSwKKwkJUFRSM19EQVRBLCBQVFIyX0RBVEEsIFBUUjFfREFUQSwgUFRSMF9EQVRBIH0KKwl9LAorCXsgUElOTVVYX0RBVEFfUkVHKCJQU0RSIiwgMHhhNDA1MDEzZSwgOCkgeworCQkwLCAwLCAwLCBQVFM0X0RBVEEsCisJCVBUUzNfREFUQSwgUFRTMl9EQVRBLCBQVFMxX0RBVEEsIFBUUzBfREFUQSB9CisJfSwKKwl7IFBJTk1VWF9EQVRBX1JFRygiUFREUiIsIDB4YTQwNTAxNjAsIDgpIHsKKwkJMCwgMCwgMCwgUFRUNF9EQVRBLAorCQlQVFQzX0RBVEEsIFBUVDJfREFUQSwgUFRUMV9EQVRBLCBQVFQwX0RBVEEgfQorCX0sCisJeyBQSU5NVVhfREFUQV9SRUcoIlBVRFIiLCAweGE0MDUwMTYyLCA4KSB7CisJCTAsIDAsIDAsIFBUVTRfREFUQSwKKwkJUFRVM19EQVRBLCBQVFUyX0RBVEEsIFBUVTFfREFUQSwgUFRVMF9EQVRBIH0KKwl9LAorCXsgUElOTVVYX0RBVEFfUkVHKCJQVkRSIiwgMHhhNDA1MDE2NCwgOCkgeworCQkwLCAwLCAwLCBQVFY0X0RBVEEsCisJCVBUVjNfREFUQSwgUFRWMl9EQVRBLCBQVFYxX0RBVEEsIFBUVjBfREFUQSB9CisJfSwKKwl7IFBJTk1VWF9EQVRBX1JFRygiUFdEUiIsIDB4YTQwNTAxNjYsIDgpIHsKKwkJMCwgUFRXNl9EQVRBLCBQVFc1X0RBVEEsIFBUVzRfREFUQSwKKwkJUFRXM19EQVRBLCBQVFcyX0RBVEEsIFBUVzFfREFUQSwgUFRXMF9EQVRBIH0KKwl9LAorCXsgUElOTVVYX0RBVEFfUkVHKCJQWERSIiwgMHhhNDA1MDE2OCwgOCkgeworCQkwLCBQVFg2X0RBVEEsIFBUWDVfREFUQSwgUFRYNF9EQVRBLAorCQlQVFgzX0RBVEEsIFBUWDJfREFUQSwgUFRYMV9EQVRBLCBQVFgwX0RBVEEgfQorCX0sCisJeyBQSU5NVVhfREFUQV9SRUcoIlBZRFIiLCAweGE0MDUwMTZhLCA4KSB7CisJCTAsIFBUWTZfREFUQSwgUFRZNV9EQVRBLCBQVFk0X0RBVEEsCisJCVBUWTNfREFUQSwgUFRZMl9EQVRBLCBQVFkxX0RBVEEsIFBUWTBfREFUQSB9CisJfSwKKwl7IFBJTk1VWF9EQVRBX1JFRygiUFpEUiIsIDB4YTQwNTAxNmMsIDgpIHsKKwkJMCwgMCwgUFRaNV9EQVRBLCBQVFo0X0RBVEEsCisJCVBUWjNfREFUQSwgUFRaMl9EQVRBLCBQVFoxX0RBVEEsIFBUWjBfREFUQSB9CisJfSwKKwl7IH0sCit9OworCitzdGF0aWMgc3RydWN0IHBpbm11eF9pbmZvIHNoNzcyMl9waW5tdXhfaW5mbyA9IHsKKwkubmFtZSA9ICJzaDc3MjJfcGZjIiwKKwkucmVzZXJ2ZWRfaWQgPSBQSU5NVVhfUkVTRVJWRUQsCisJLmRhdGEgPSB7IFBJTk1VWF9EQVRBX0JFR0lOLCBQSU5NVVhfREFUQV9FTkQgfSwKKwkuaW5wdXQgPSB7IFBJTk1VWF9JTlBVVF9CRUdJTiwgUElOTVVYX0lOUFVUX0VORCB9LAorCS5pbnB1dF9wZCA9IHsgUElOTVVYX0lOUFVUX1BVTExET1dOX0JFR0lOLCBQSU5NVVhfSU5QVVRfUFVMTERPV05fRU5EIH0sCisJLmlucHV0X3B1ID0geyBQSU5NVVhfSU5QVVRfUFVMTFVQX0JFR0lOLCBQSU5NVVhfSU5QVVRfUFVMTFVQX0VORCB9LAorCS5vdXRwdXQgPSB7IFBJTk1VWF9PVVRQVVRfQkVHSU4sIFBJTk1VWF9PVVRQVVRfRU5EIH0sCisJLm1hcmsgPSB7IFBJTk1VWF9NQVJLX0JFR0lOLCBQSU5NVVhfTUFSS19FTkQgfSwKKwkuZnVuY3Rpb24gPSB7IFBJTk1VWF9GVU5DVElPTl9CRUdJTiwgUElOTVVYX0ZVTkNUSU9OX0VORCB9LAorCisJLmZpcnN0X2dwaW8gPSBHUElPX1BUQTcsCisJLmxhc3RfZ3BpbyA9IEdQSU9fRk5fS0VZT1VUNV9JTjUsCisKKwkuZ3Bpb3MgPSBwaW5tdXhfZ3Bpb3MsCisJLmNmZ19yZWdzID0gcGlubXV4X2NvbmZpZ19yZWdzLAorCS5kYXRhX3JlZ3MgPSBwaW5tdXhfZGF0YV9yZWdzLAorCisJLmdwaW9fZGF0YSA9IHBpbm11eF9kYXRhLAorCS5ncGlvX2RhdGFfc2l6ZSA9IEFSUkFZX1NJWkUocGlubXV4X2RhdGEpLAorfTsKKworc3RhdGljIGludCBfX2luaXQgcGxhdF9waW5tdXhfc2V0dXAodm9pZCkKK3sKKwlyZXR1cm4gcmVnaXN0ZXJfcGlubXV4KCZzaDc3MjJfcGlubXV4X2luZm8pOworfQorCithcmNoX2luaXRjYWxsKHBsYXRfcGlubXV4X3NldHVwKTsKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3Bpbm11eC1zaDc3MjMuYyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3Bpbm11eC1zaDc3MjMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OGJmNWVjCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvcGlubXV4LXNoNzcyMy5jCkBAIC0wLDAgKzEsMTkwOSBAQAorLyoKKyAqIFNINzcyMyBQaW5tdXgKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA4ICBNYWdudXMgRGFtbQorICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgorI2luY2x1ZGUgPGNwdS9zaDc3MjMuaD4KKworZW51bSB7CisJUElOTVVYX1JFU0VSVkVEID0gMCwKKworCVBJTk1VWF9EQVRBX0JFR0lOLAorCVBUQTdfREFUQSwgUFRBNl9EQVRBLCBQVEE1X0RBVEEsIFBUQTRfREFUQSwKKwlQVEEzX0RBVEEsIFBUQTJfREFUQSwgUFRBMV9EQVRBLCBQVEEwX0RBVEEsCisJUFRCN19EQVRBLCBQVEI2X0RBVEEsIFBUQjVfREFUQSwgUFRCNF9EQVRBLAorCVBUQjNfREFUQSwgUFRCMl9EQVRBLCBQVEIxX0RBVEEsIFBUQjBfREFUQSwKKwlQVEM3X0RBVEEsIFBUQzZfREFUQSwgUFRDNV9EQVRBLCBQVEM0X0RBVEEsCisJUFRDM19EQVRBLCBQVEMyX0RBVEEsIFBUQzFfREFUQSwgUFRDMF9EQVRBLAorCVBURDdfREFUQSwgUFRENl9EQVRBLCBQVEQ1X0RBVEEsIFBURDRfREFUQSwKKwlQVEQzX0RBVEEsIFBURDJfREFUQSwgUFREMV9EQVRBLCBQVEQwX0RBVEEsCisJUFRFNV9EQVRBLCBQVEU0X0RBVEEsIFBURTNfREFUQSwgUFRFMl9EQVRBLCBQVEUxX0RBVEEsIFBURTBfREFUQSwKKwlQVEY3X0RBVEEsIFBURjZfREFUQSwgUFRGNV9EQVRBLCBQVEY0X0RBVEEsCisJUFRGM19EQVRBLCBQVEYyX0RBVEEsIFBURjFfREFUQSwgUFRGMF9EQVRBLAorCVBURzVfREFUQSwgUFRHNF9EQVRBLCBQVEczX0RBVEEsIFBURzJfREFUQSwgUFRHMV9EQVRBLCBQVEcwX0RBVEEsCisJUFRIN19EQVRBLCBQVEg2X0RBVEEsIFBUSDVfREFUQSwgUFRINF9EQVRBLAorCVBUSDNfREFUQSwgUFRIMl9EQVRBLCBQVEgxX0RBVEEsIFBUSDBfREFUQSwKKwlQVEo3X0RBVEEsIFBUSjVfREFUQSwgUFRKM19EQVRBLCBQVEoyX0RBVEEsIFBUSjFfREFUQSwgUFRKMF9EQVRBLAorCVBUSzdfREFUQSwgUFRLNl9EQVRBLCBQVEs1X0RBVEEsIFBUSzRfREFUQSwKKwlQVEszX0RBVEEsIFBUSzJfREFUQSwgUFRLMV9EQVRBLCBQVEswX0RBVEEsCisJUFRMN19EQVRBLCBQVEw2X0RBVEEsIFBUTDVfREFUQSwgUFRMNF9EQVRBLAorCVBUTDNfREFUQSwgUFRMMl9EQVRBLCBQVEwxX0RBVEEsIFBUTDBfREFUQSwKKwlQVE03X0RBVEEsIFBUTTZfREFUQSwgUFRNNV9EQVRBLCBQVE00X0RBVEEsCisJUFRNM19EQVRBLCBQVE0yX0RBVEEsIFBUTTFfREFUQSwgUFRNMF9EQVRBLAorCVBUTjdfREFUQSwgUFRONl9EQVRBLCBQVE41X0RBVEEsIFBUTjRfREFUQSwKKwlQVE4zX0RBVEEsIFBUTjJfREFUQSwgUFROMV9EQVRBLCBQVE4wX0RBVEEsCisJUFRRM19EQVRBLCBQVFEyX0RBVEEsIFBUUTFfREFUQSwgUFRRMF9EQVRBLAorCVBUUjdfREFUQSwgUFRSNl9EQVRBLCBQVFI1X0RBVEEsIFBUUjRfREFUQSwKKwlQVFIzX0RBVEEsIFBUUjJfREFUQSwgUFRSMV9EQVRBLCBQVFIwX0RBVEEsCisJUFRTN19EQVRBLCBQVFM2X0RBVEEsIFBUUzVfREFUQSwgUFRTNF9EQVRBLAorCVBUUzNfREFUQSwgUFRTMl9EQVRBLCBQVFMxX0RBVEEsIFBUUzBfREFUQSwKKwlQVFQ1X0RBVEEsIFBUVDRfREFUQSwgUFRUM19EQVRBLCBQVFQyX0RBVEEsIFBUVDFfREFUQSwgUFRUMF9EQVRBLAorCVBUVTVfREFUQSwgUFRVNF9EQVRBLCBQVFUzX0RBVEEsIFBUVTJfREFUQSwgUFRVMV9EQVRBLCBQVFUwX0RBVEEsCisJUFRWN19EQVRBLCBQVFY2X0RBVEEsIFBUVjVfREFUQSwgUFRWNF9EQVRBLAorCVBUVjNfREFUQSwgUFRWMl9EQVRBLCBQVFYxX0RBVEEsIFBUVjBfREFUQSwKKwlQVFc3X0RBVEEsIFBUVzZfREFUQSwgUFRXNV9EQVRBLCBQVFc0X0RBVEEsCisJUFRXM19EQVRBLCBQVFcyX0RBVEEsIFBUVzFfREFUQSwgUFRXMF9EQVRBLAorCVBUWDdfREFUQSwgUFRYNl9EQVRBLCBQVFg1X0RBVEEsIFBUWDRfREFUQSwKKwlQVFgzX0RBVEEsIFBUWDJfREFUQSwgUFRYMV9EQVRBLCBQVFgwX0RBVEEsCisJUFRZN19EQVRBLCBQVFk2X0RBVEEsIFBUWTVfREFUQSwgUFRZNF9EQVRBLAorCVBUWTNfREFUQSwgUFRZMl9EQVRBLCBQVFkxX0RBVEEsIFBUWTBfREFUQSwKKwlQVFo3X0RBVEEsIFBUWjZfREFUQSwgUFRaNV9EQVRBLCBQVFo0X0RBVEEsCisJUFRaM19EQVRBLCBQVFoyX0RBVEEsIFBUWjFfREFUQSwgUFRaMF9EQVRBLAorCVBJTk1VWF9EQVRBX0VORCwKKworCVBJTk1VWF9JTlBVVF9CRUdJTiwKKwlQVEE3X0lOLCBQVEE2X0lOLCBQVEE1X0lOLCBQVEE0X0lOLAorCVBUQTNfSU4sIFBUQTJfSU4sIFBUQTFfSU4sIFBUQTBfSU4sCisJUFRCN19JTiwgUFRCNl9JTiwgUFRCNV9JTiwgUFRCNF9JTiwKKwlQVEIzX0lOLCBQVEIyX0lOLCBQVEIxX0lOLCBQVEIwX0lOLAorCVBUQzdfSU4sIFBUQzZfSU4sIFBUQzVfSU4sIFBUQzRfSU4sCisJUFRDM19JTiwgUFRDMl9JTiwgUFRDMV9JTiwgUFRDMF9JTiwKKwlQVEQ3X0lOLCBQVEQ2X0lOLCBQVEQ1X0lOLCBQVEQ0X0lOLAorCVBURDNfSU4sIFBURDJfSU4sIFBURDFfSU4sIFBURDBfSU4sCisJUFRFNV9JTiwgUFRFNF9JTiwgUFRFM19JTiwgUFRFMl9JTiwgUFRFMV9JTiwgUFRFMF9JTiwKKwlQVEY3X0lOLCBQVEY2X0lOLCBQVEY1X0lOLCBQVEY0X0lOLAorCVBURjNfSU4sIFBURjJfSU4sIFBURjFfSU4sIFBURjBfSU4sCisJUFRIN19JTiwgUFRINl9JTiwgUFRINV9JTiwgUFRINF9JTiwKKwlQVEgzX0lOLCBQVEgyX0lOLCBQVEgxX0lOLCBQVEgwX0lOLAorCVBUSjNfSU4sIFBUSjJfSU4sIFBUSjFfSU4sIFBUSjBfSU4sCisJUFRLN19JTiwgUFRLNl9JTiwgUFRLNV9JTiwgUFRLNF9JTiwKKwlQVEszX0lOLCBQVEsyX0lOLCBQVEsxX0lOLCBQVEswX0lOLAorCVBUTDdfSU4sIFBUTDZfSU4sIFBUTDVfSU4sIFBUTDRfSU4sCisJUFRMM19JTiwgUFRMMl9JTiwgUFRMMV9JTiwgUFRMMF9JTiwKKwlQVE03X0lOLCBQVE02X0lOLCBQVE01X0lOLCBQVE00X0lOLAorCVBUTTNfSU4sIFBUTTJfSU4sIFBUTTFfSU4sIFBUTTBfSU4sCisJUFRON19JTiwgUFRONl9JTiwgUFRONV9JTiwgUFRONF9JTiwKKwlQVE4zX0lOLCBQVE4yX0lOLCBQVE4xX0lOLCBQVE4wX0lOLAorCVBUUTNfSU4sIFBUUTJfSU4sIFBUUTFfSU4sIFBUUTBfSU4sCisJUFRSN19JTiwgUFRSNl9JTiwgUFRSNV9JTiwgUFRSNF9JTiwKKwlQVFIzX0lOLCBQVFIyX0lOLCBQVFIxX0lOLCBQVFIwX0lOLAorCVBUUzdfSU4sIFBUUzZfSU4sIFBUUzVfSU4sIFBUUzRfSU4sCisJUFRTM19JTiwgUFRTMl9JTiwgUFRTMV9JTiwgUFRTMF9JTiwKKwlQVFQ1X0lOLCBQVFQ0X0lOLCBQVFQzX0lOLCBQVFQyX0lOLCBQVFQxX0lOLCBQVFQwX0lOLAorCVBUVTVfSU4sIFBUVTRfSU4sIFBUVTNfSU4sIFBUVTJfSU4sIFBUVTFfSU4sIFBUVTBfSU4sCisJUFRWN19JTiwgUFRWNl9JTiwgUFRWNV9JTiwgUFRWNF9JTiwKKwlQVFYzX0lOLCBQVFYyX0lOLCBQVFYxX0lOLCBQVFYwX0lOLAorCVBUVzdfSU4sIFBUVzZfSU4sIFBUVzVfSU4sIFBUVzRfSU4sCisJUFRXM19JTiwgUFRXMl9JTiwgUFRXMV9JTiwgUFRXMF9JTiwKKwlQVFg3X0lOLCBQVFg2X0lOLCBQVFg1X0lOLCBQVFg0X0lOLAorCVBUWDNfSU4sIFBUWDJfSU4sIFBUWDFfSU4sIFBUWDBfSU4sCisJUFRZN19JTiwgUFRZNl9JTiwgUFRZNV9JTiwgUFRZNF9JTiwKKwlQVFkzX0lOLCBQVFkyX0lOLCBQVFkxX0lOLCBQVFkwX0lOLAorCVBUWjdfSU4sIFBUWjZfSU4sIFBUWjVfSU4sIFBUWjRfSU4sCisJUFRaM19JTiwgUFRaMl9JTiwgUFRaMV9JTiwgUFRaMF9JTiwKKwlQSU5NVVhfSU5QVVRfRU5ELAorCisJUElOTVVYX0lOUFVUX1BVTExVUF9CRUdJTiwKKwlQVEE0X0lOX1BVLCBQVEEzX0lOX1BVLCBQVEEyX0lOX1BVLCBQVEExX0lOX1BVLCBQVEEwX0lOX1BVLAorCVBUQjJfSU5fUFUsIFBUQjFfSU5fUFUsCisJUFRSMl9JTl9QVSwKKwlQSU5NVVhfSU5QVVRfUFVMTFVQX0VORCwKKworCVBJTk1VWF9PVVRQVVRfQkVHSU4sCisJUFRBN19PVVQsIFBUQTZfT1VULCBQVEE1X09VVCwgUFRBNF9PVVQsCisJUFRBM19PVVQsIFBUQTJfT1VULCBQVEExX09VVCwgUFRBMF9PVVQsCisJUFRCN19PVVQsIFBUQjZfT1VULCBQVEI1X09VVCwgUFRCNF9PVVQsCisJUFRCM19PVVQsIFBUQjJfT1VULCBQVEIxX09VVCwgUFRCMF9PVVQsCisJUFRDN19PVVQsIFBUQzZfT1VULCBQVEM1X09VVCwgUFRDNF9PVVQsCisJUFRDM19PVVQsIFBUQzJfT1VULCBQVEMxX09VVCwgUFRDMF9PVVQsCisJUFREN19PVVQsIFBURDZfT1VULCBQVEQ1X09VVCwgUFRENF9PVVQsCisJUFREM19PVVQsIFBURDJfT1VULCBQVEQxX09VVCwgUFREMF9PVVQsCisJUFRFNV9PVVQsIFBURTRfT1VULCBQVEUzX09VVCwgUFRFMl9PVVQsIFBURTFfT1VULCBQVEUwX09VVCwKKwlQVEY3X09VVCwgUFRGNl9PVVQsIFBURjVfT1VULCBQVEY0X09VVCwKKwlQVEYzX09VVCwgUFRGMl9PVVQsIFBURjFfT1VULCBQVEYwX09VVCwKKwlQVEc1X09VVCwgUFRHNF9PVVQsIFBURzNfT1VULCBQVEcyX09VVCwgUFRHMV9PVVQsIFBURzBfT1VULAorCVBUSDdfT1VULCBQVEg2X09VVCwgUFRINV9PVVQsIFBUSDRfT1VULAorCVBUSDNfT1VULCBQVEgyX09VVCwgUFRIMV9PVVQsIFBUSDBfT1VULAorCVBUSjdfT1VULCBQVEo1X09VVCwgUFRKM19PVVQsIFBUSjJfT1VULCBQVEoxX09VVCwgUFRKMF9PVVQsCisJUFRLN19PVVQsIFBUSzZfT1VULCBQVEs1X09VVCwgUFRLNF9PVVQsCisJUFRLM19PVVQsIFBUSzJfT1VULCBQVEsxX09VVCwgUFRLMF9PVVQsCisJUFRMN19PVVQsIFBUTDZfT1VULCBQVEw1X09VVCwgUFRMNF9PVVQsCisJUFRMM19PVVQsIFBUTDJfT1VULCBQVEwxX09VVCwgUFRMMF9PVVQsCisJUFRNN19PVVQsIFBUTTZfT1VULCBQVE01X09VVCwgUFRNNF9PVVQsCisJUFRNM19PVVQsIFBUTTJfT1VULCBQVE0xX09VVCwgUFRNMF9PVVQsCisJUFRON19PVVQsIFBUTjZfT1VULCBQVE41X09VVCwgUFRONF9PVVQsCisJUFROM19PVVQsIFBUTjJfT1VULCBQVE4xX09VVCwgUFROMF9PVVQsCisJUFRSN19PVVQsIFBUUjZfT1VULCBQVFI1X09VVCwgUFRSNF9PVVQsCisJUFRSMV9PVVQsIFBUUjBfT1VULAorCVBUUzdfT1VULCBQVFM2X09VVCwgUFRTNV9PVVQsIFBUUzRfT1VULAorCVBUUzNfT1VULCBQVFMyX09VVCwgUFRTMV9PVVQsIFBUUzBfT1VULAorCVBUVDVfT1VULCBQVFQ0X09VVCwgUFRUM19PVVQsIFBUVDJfT1VULCBQVFQxX09VVCwgUFRUMF9PVVQsCisJUFRVNV9PVVQsIFBUVTRfT1VULCBQVFUzX09VVCwgUFRVMl9PVVQsIFBUVTFfT1VULCBQVFUwX09VVCwKKwlQVFY3X09VVCwgUFRWNl9PVVQsIFBUVjVfT1VULCBQVFY0X09VVCwKKwlQVFYzX09VVCwgUFRWMl9PVVQsIFBUVjFfT1VULCBQVFYwX09VVCwKKwlQVFc3X09VVCwgUFRXNl9PVVQsIFBUVzVfT1VULCBQVFc0X09VVCwKKwlQVFczX09VVCwgUFRXMl9PVVQsIFBUVzFfT1VULCBQVFcwX09VVCwKKwlQVFg3X09VVCwgUFRYNl9PVVQsIFBUWDVfT1VULCBQVFg0X09VVCwKKwlQVFgzX09VVCwgUFRYMl9PVVQsIFBUWDFfT1VULCBQVFgwX09VVCwKKwlQVFk3X09VVCwgUFRZNl9PVVQsIFBUWTVfT1VULCBQVFk0X09VVCwKKwlQVFkzX09VVCwgUFRZMl9PVVQsIFBUWTFfT1VULCBQVFkwX09VVCwKKwlQVFo3X09VVCwgUFRaNl9PVVQsIFBUWjVfT1VULCBQVFo0X09VVCwKKwlQVFozX09VVCwgUFRaMl9PVVQsIFBUWjFfT1VULCBQVFowX09VVCwKKwlQSU5NVVhfT1VUUFVUX0VORCwKKworCVBJTk1VWF9GVU5DVElPTl9CRUdJTiwKKwlQVEE3X0ZOLCBQVEE2X0ZOLCBQVEE1X0ZOLCBQVEE0X0ZOLAorCVBUQTNfRk4sIFBUQTJfRk4sIFBUQTFfRk4sIFBUQTBfRk4sCisJUFRCN19GTiwgUFRCNl9GTiwgUFRCNV9GTiwgUFRCNF9GTiwKKwlQVEIzX0ZOLCBQVEIyX0ZOLCBQVEIxX0ZOLCBQVEIwX0ZOLAorCVBUQzdfRk4sIFBUQzZfRk4sIFBUQzVfRk4sIFBUQzRfRk4sCisJUFRDM19GTiwgUFRDMl9GTiwgUFRDMV9GTiwgUFRDMF9GTiwKKwlQVEQ3X0ZOLCBQVEQ2X0ZOLCBQVEQ1X0ZOLCBQVEQ0X0ZOLAorCVBURDNfRk4sIFBURDJfRk4sIFBURDFfRk4sIFBURDBfRk4sCisJUFRFNV9GTiwgUFRFNF9GTiwgUFRFM19GTiwgUFRFMl9GTiwgUFRFMV9GTiwgUFRFMF9GTiwKKwlQVEY3X0ZOLCBQVEY2X0ZOLCBQVEY1X0ZOLCBQVEY0X0ZOLAorCVBURjNfRk4sIFBURjJfRk4sIFBURjFfRk4sIFBURjBfRk4sCisJUFRHNV9GTiwgUFRHNF9GTiwgUFRHM19GTiwgUFRHMl9GTiwgUFRHMV9GTiwgUFRHMF9GTiwKKwlQVEg3X0ZOLCBQVEg2X0ZOLCBQVEg1X0ZOLCBQVEg0X0ZOLAorCVBUSDNfRk4sIFBUSDJfRk4sIFBUSDFfRk4sIFBUSDBfRk4sCisJUFRKN19GTiwgUFRKNV9GTiwgUFRKM19GTiwgUFRKMl9GTiwgUFRKMV9GTiwgUFRKMF9GTiwKKwlQVEs3X0ZOLCBQVEs2X0ZOLCBQVEs1X0ZOLCBQVEs0X0ZOLAorCVBUSzNfRk4sIFBUSzJfRk4sIFBUSzFfRk4sIFBUSzBfRk4sCisJUFRMN19GTiwgUFRMNl9GTiwgUFRMNV9GTiwgUFRMNF9GTiwKKwlQVEwzX0ZOLCBQVEwyX0ZOLCBQVEwxX0ZOLCBQVEwwX0ZOLAorCVBUTTdfRk4sIFBUTTZfRk4sIFBUTTVfRk4sIFBUTTRfRk4sCisJUFRNM19GTiwgUFRNMl9GTiwgUFRNMV9GTiwgUFRNMF9GTiwKKwlQVE43X0ZOLCBQVE42X0ZOLCBQVE41X0ZOLCBQVE40X0ZOLAorCVBUTjNfRk4sIFBUTjJfRk4sIFBUTjFfRk4sIFBUTjBfRk4sCisJUFRRM19GTiwgUFRRMl9GTiwgUFRRMV9GTiwgUFRRMF9GTiwKKwlQVFI3X0ZOLCBQVFI2X0ZOLCBQVFI1X0ZOLCBQVFI0X0ZOLAorCVBUUjNfRk4sIFBUUjJfRk4sIFBUUjFfRk4sIFBUUjBfRk4sCisJUFRTN19GTiwgUFRTNl9GTiwgUFRTNV9GTiwgUFRTNF9GTiwKKwlQVFMzX0ZOLCBQVFMyX0ZOLCBQVFMxX0ZOLCBQVFMwX0ZOLAorCVBUVDVfRk4sIFBUVDRfRk4sIFBUVDNfRk4sIFBUVDJfRk4sIFBUVDFfRk4sIFBUVDBfRk4sCisJUFRVNV9GTiwgUFRVNF9GTiwgUFRVM19GTiwgUFRVMl9GTiwgUFRVMV9GTiwgUFRVMF9GTiwKKwlQVFY3X0ZOLCBQVFY2X0ZOLCBQVFY1X0ZOLCBQVFY0X0ZOLAorCVBUVjNfRk4sIFBUVjJfRk4sIFBUVjFfRk4sIFBUVjBfRk4sCisJUFRXN19GTiwgUFRXNl9GTiwgUFRXNV9GTiwgUFRXNF9GTiwKKwlQVFczX0ZOLCBQVFcyX0ZOLCBQVFcxX0ZOLCBQVFcwX0ZOLAorCVBUWDdfRk4sIFBUWDZfRk4sIFBUWDVfRk4sIFBUWDRfRk4sCisJUFRYM19GTiwgUFRYMl9GTiwgUFRYMV9GTiwgUFRYMF9GTiwKKwlQVFk3X0ZOLCBQVFk2X0ZOLCBQVFk1X0ZOLCBQVFk0X0ZOLAorCVBUWTNfRk4sIFBUWTJfRk4sIFBUWTFfRk4sIFBUWTBfRk4sCisJUFRaN19GTiwgUFRaNl9GTiwgUFRaNV9GTiwgUFRaNF9GTiwKKwlQVFozX0ZOLCBQVFoyX0ZOLCBQVFoxX0ZOLCBQVFowX0ZOLAorCisKKwlQU0ExNV9QU0ExNF9GTjEsIFBTQTE1X1BTQTE0X0ZOMiwKKwlQU0ExM19QU0ExMl9GTjEsIFBTQTEzX1BTQTEyX0ZOMiwKKwlQU0ExMV9QU0ExMF9GTjEsIFBTQTExX1BTQTEwX0ZOMiwKKwlQU0E1X1BTQTRfRk4xLCBQU0E1X1BTQTRfRk4yLCBQU0E1X1BTQTRfRk4zLAorCVBTQTNfUFNBMl9GTjEsIFBTQTNfUFNBMl9GTjIsCisJUFNCMTVfUFNCMTRfRk4xLCBQU0IxNV9QU0IxNF9GTjIsCisJUFNCMTNfUFNCMTJfTENEQ19SR0IsIFBTQjEzX1BTQjEyX0xDRENfU1lTLAorCVBTQjlfUFNCOF9GTjEsIFBTQjlfUFNCOF9GTjIsIFBTQjlfUFNCOF9GTjMsCisJUFNCN19QU0I2X0ZOMSwgUFNCN19QU0I2X0ZOMiwKKwlQU0I1X1BTQjRfRk4xLCBQU0I1X1BTQjRfRk4yLAorCVBTQjNfUFNCMl9GTjEsIFBTQjNfUFNCMl9GTjIsCisJUFNDMTVfUFNDMTRfRk4xLCBQU0MxNV9QU0MxNF9GTjIsCisJUFNDMTNfUFNDMTJfRk4xLCBQU0MxM19QU0MxMl9GTjIsCisJUFNDMTFfUFNDMTBfRk4xLCBQU0MxMV9QU0MxMF9GTjIsIFBTQzExX1BTQzEwX0ZOMywKKwlQU0M5X1BTQzhfRk4xLCBQU0M5X1BTQzhfRk4yLAorCVBTQzdfUFNDNl9GTjEsIFBTQzdfUFNDNl9GTjIsIFBTQzdfUFNDNl9GTjMsCisJUFNEMTVfUFNEMTRfRk4xLCBQU0QxNV9QU0QxNF9GTjIsCisJUFNEMTNfUFNEMTJfRk4xLCBQU0QxM19QU0QxMl9GTjIsCisJUFNEMTFfUFNEMTBfRk4xLCBQU0QxMV9QU0QxMF9GTjIsIFBTRDExX1BTRDEwX0ZOMywKKwlQU0Q5X1BTRDhfRk4xLCBQU0Q5X1BTRDhfRk4yLAorCVBTRDdfUFNENl9GTjEsIFBTRDdfUFNENl9GTjIsCisJUFNENV9QU0Q0X0ZOMSwgUFNENV9QU0Q0X0ZOMiwKKwlQU0QzX1BTRDJfRk4xLCBQU0QzX1BTRDJfRk4yLAorCVBTRDFfUFNEMF9GTjEsIFBTRDFfUFNEMF9GTjIsCisJUElOTVVYX0ZVTkNUSU9OX0VORCwKKworCVBJTk1VWF9NQVJLX0JFR0lOLAorCVNDSUYwX1BUVF9UWERfTUFSSywgU0NJRjBfUFRUX1JYRF9NQVJLLAorCVNDSUYwX1BUVF9TQ0tfTUFSSywgU0NJRjBfUFRVX1RYRF9NQVJLLAorCVNDSUYwX1BUVV9SWERfTUFSSywgU0NJRjBfUFRVX1NDS19NQVJLLAorCisJU0NJRjFfUFRTX1RYRF9NQVJLLCBTQ0lGMV9QVFNfUlhEX01BUkssCisJU0NJRjFfUFRTX1NDS19NQVJLLCBTQ0lGMV9QVFZfVFhEX01BUkssCisJU0NJRjFfUFRWX1JYRF9NQVJLLCBTQ0lGMV9QVFZfU0NLX01BUkssCisKKwlTQ0lGMl9QVFRfVFhEX01BUkssIFNDSUYyX1BUVF9SWERfTUFSSywKKwlTQ0lGMl9QVFRfU0NLX01BUkssIFNDSUYyX1BUVV9UWERfTUFSSywKKwlTQ0lGMl9QVFVfUlhEX01BUkssIFNDSUYyX1BUVV9TQ0tfTUFSSywKKworCVNDSUYzX1BUU19UWERfTUFSSywgU0NJRjNfUFRTX1JYRF9NQVJLLAorCVNDSUYzX1BUU19TQ0tfTUFSSywgU0NJRjNfUFRTX1JUU19NQVJLLAorCVNDSUYzX1BUU19DVFNfTUFSSywgU0NJRjNfUFRWX1RYRF9NQVJLLAorCVNDSUYzX1BUVl9SWERfTUFSSywgU0NJRjNfUFRWX1NDS19NQVJLLAorCVNDSUYzX1BUVl9SVFNfTUFSSywgU0NJRjNfUFRWX0NUU19NQVJLLAorCisJU0NJRjRfUFRFX1RYRF9NQVJLLCBTQ0lGNF9QVEVfUlhEX01BUkssCisJU0NJRjRfUFRFX1NDS19NQVJLLCBTQ0lGNF9QVE5fVFhEX01BUkssCisJU0NJRjRfUFROX1JYRF9NQVJLLCBTQ0lGNF9QVE5fU0NLX01BUkssCisKKwlTQ0lGNV9QVEVfVFhEX01BUkssIFNDSUY1X1BURV9SWERfTUFSSywKKwlTQ0lGNV9QVEVfU0NLX01BUkssIFNDSUY1X1BUTl9UWERfTUFSSywKKwlTQ0lGNV9QVE5fUlhEX01BUkssIFNDSUY1X1BUTl9TQ0tfTUFSSywKKworCVZJT19EMTVfTUFSSywgVklPX0QxNF9NQVJLLCBWSU9fRDEzX01BUkssIFZJT19EMTJfTUFSSywKKwlWSU9fRDExX01BUkssIFZJT19EMTBfTUFSSywgVklPX0Q5X01BUkssIFZJT19EOF9NQVJLLAorCVZJT19EN19NQVJLLCBWSU9fRDZfTUFSSywgVklPX0Q1X01BUkssIFZJT19ENF9NQVJLLAorCVZJT19EM19NQVJLLCBWSU9fRDJfTUFSSywgVklPX0QxX01BUkssIFZJT19EMF9NQVJLLAorCVZJT19GTERfTUFSSywgVklPX0NLT19NQVJLLAorCVZJT19WRDFfTUFSSywgVklPX0hEMV9NQVJLLCBWSU9fQ0xLMV9NQVJLLAorCVZJT19IRDJfTUFSSywgVklPX1ZEMl9NQVJLLCBWSU9fQ0xLMl9NQVJLLAorCisJTENERDIzX01BUkssIExDREQyMl9NQVJLLCBMQ0REMjFfTUFSSywgTENERDIwX01BUkssCisJTENERDE5X01BUkssIExDREQxOF9NQVJLLCBMQ0REMTdfTUFSSywgTENERDE2X01BUkssCisJTENERDE1X01BUkssIExDREQxNF9NQVJLLCBMQ0REMTNfTUFSSywgTENERDEyX01BUkssCisJTENERDExX01BUkssIExDREQxMF9NQVJLLCBMQ0REOV9NQVJLLCBMQ0REOF9NQVJLLAorCUxDREQ3X01BUkssIExDREQ2X01BUkssIExDREQ1X01BUkssIExDREQ0X01BUkssCisJTENERDNfTUFSSywgTENERDJfTUFSSywgTENERDFfTUFSSywgTENERDBfTUFSSywKKwlMQ0RET05fTUFSSywgTENEVkNQV0NfTUFSSywgTENEVkVQV0NfTUFSSywKKwlMQ0RWU1lOX01BUkssIExDRERDS19NQVJLLCBMQ0RIU1lOX01BUkssIExDRERJU1BfTUFSSywKKwlMQ0RSU19NQVJLLCBMQ0RDU19NQVJLLCBMQ0RXUl9NQVJLLCBMQ0RSRF9NQVJLLAorCUxDRExDTEtfUFRSX01BUkssIExDRExDTEtfUFRXX01BUkssCisKKwlJUlEwX01BUkssIElSUTFfTUFSSywgSVJRMl9NQVJLLCBJUlEzX01BUkssCisJSVJRNF9NQVJLLCBJUlE1X01BUkssIElSUTZfTUFSSywgSVJRN19NQVJLLAorCisJQVVEQVRBM19NQVJLLCBBVURBVEEyX01BUkssIEFVREFUQTFfTUFSSywgQVVEQVRBMF9NQVJLLAorCUFVRENLX01BUkssIEFVRFNZTkNfTUFSSywKKworCVNESEkwQ0RfUFREX01BUkssIFNESEkwV1BfUFREX01BUkssCisJU0RISTBEM19QVERfTUFSSywgU0RISTBEMl9QVERfTUFSSywKKwlTREhJMEQxX1BURF9NQVJLLCBTREhJMEQwX1BURF9NQVJLLAorCVNESEkwQ01EX1BURF9NQVJLLCBTREhJMENMS19QVERfTUFSSywKKworCVNESEkwQ0RfUFRTX01BUkssIFNESEkwV1BfUFRTX01BUkssCisJU0RISTBEM19QVFNfTUFSSywgU0RISTBEMl9QVFNfTUFSSywKKwlTREhJMEQxX1BUU19NQVJLLCBTREhJMEQwX1BUU19NQVJLLAorCVNESEkwQ01EX1BUU19NQVJLLCBTREhJMENMS19QVFNfTUFSSywKKworCVNESEkxQ0RfTUFSSywgU0RISTFXUF9NQVJLLCBTREhJMUQzX01BUkssIFNESEkxRDJfTUFSSywKKwlTREhJMUQxX01BUkssIFNESEkxRDBfTUFSSywgU0RISTFDTURfTUFSSywgU0RISTFDTEtfTUFSSywKKworCVNJVUFGQ0tfTUFSSywgU0lVQUlMUl9NQVJLLCBTSVVBSUJUX01BUkssIFNJVUFJU0xEX01BUkssCisJU0lVQU9MUl9NQVJLLCBTSVVBT0JUX01BUkssIFNJVUFPU0xEX01BUkssIFNJVUFNQ0tfTUFSSywKKwlTSVVBSVNQRF9NQVJLLCBTSVVBT1NQRF9NQVJLLAorCisJU0lVQkZDS19NQVJLLCBTSVVCSUxSX01BUkssIFNJVUJJQlRfTUFSSywgU0lVQklTTERfTUFSSywKKwlTSVVCT0xSX01BUkssIFNJVUJPQlRfTUFSSywgU0lVQk9TTERfTUFSSywgU0lVQk1DS19NQVJLLAorCisJSVJEQV9JTl9NQVJLLCBJUkRBX09VVF9NQVJLLAorCisJRFZfQ0xLSV9NQVJLLCBEVl9DTEtfTUFSSywgRFZfSFNZTkNfTUFSSywgRFZfVlNZTkNfTUFSSywKKwlEVl9EMTVfTUFSSywgRFZfRDE0X01BUkssIERWX0QxM19NQVJLLCBEVl9EMTJfTUFSSywKKwlEVl9EMTFfTUFSSywgRFZfRDEwX01BUkssIERWX0Q5X01BUkssIERWX0Q4X01BUkssCisJRFZfRDdfTUFSSywgRFZfRDZfTUFSSywgRFZfRDVfTUFSSywgRFZfRDRfTUFSSywKKwlEVl9EM19NQVJLLCBEVl9EMl9NQVJLLCBEVl9EMV9NQVJLLCBEVl9EMF9NQVJLLAorCisJS0VZSU4wX01BUkssIEtFWUlOMV9NQVJLLCBLRVlJTjJfTUFSSywgS0VZSU4zX01BUkssIEtFWUlONF9NQVJLLAorCUtFWU9VVDBfTUFSSywgS0VZT1VUMV9NQVJLLCBLRVlPVVQyX01BUkssIEtFWU9VVDNfTUFSSywKKwlLRVlPVVQ0X0lONl9NQVJLLCBLRVlPVVQ1X0lONV9NQVJLLAorCisJTVNJT0YwX1BURl9UWERfTUFSSywgTVNJT0YwX1BURl9SWERfTUFSSywgTVNJT0YwX1BURl9NQ0tfTUFSSywKKwlNU0lPRjBfUFRGX1RTWU5DX01BUkssIE1TSU9GMF9QVEZfVFNDS19NQVJLLCBNU0lPRjBfUFRGX1JTWU5DX01BUkssCisJTVNJT0YwX1BURl9SU0NLX01BUkssIE1TSU9GMF9QVEZfU1MxX01BUkssIE1TSU9GMF9QVEZfU1MyX01BUkssCisKKwlNU0lPRjBfUFRUX1RYRF9NQVJLLCBNU0lPRjBfUFRUX1JYRF9NQVJLLCBNU0lPRjBfUFRYX01DS19NQVJLLAorCU1TSU9GMF9QVFRfVFNZTkNfTUFSSywgTVNJT0YwX1BUVF9UU0NLX01BUkssIE1TSU9GMF9QVFRfUlNZTkNfTUFSSywKKwlNU0lPRjBfUFRUX1JTQ0tfTUFSSywgTVNJT0YwX1BUVF9TUzFfTUFSSywgTVNJT0YwX1BUVF9TUzJfTUFSSywKKworCU1TSU9GMV9UWERfTUFSSywgTVNJT0YxX1JYRF9NQVJLLCBNU0lPRjFfTUNLX01BUkssCisJTVNJT0YxX1RTWU5DX01BUkssIE1TSU9GMV9UU0NLX01BUkssIE1TSU9GMV9SU1lOQ19NQVJLLAorCU1TSU9GMV9SU0NLX01BUkssIE1TSU9GMV9TUzFfTUFSSywgTVNJT0YxX1NTMl9NQVJLLAorCisJVFMwX1NEQVRfTUFSSywgVFMwX1NDS19NQVJLLCBUUzBfU0RFTl9NQVJLLCBUUzBfU1BTWU5DX01BUkssCisKKwlGQ0VfTUFSSywgTkFGN19NQVJLLCBOQUY2X01BUkssIE5BRjVfTUFSSywgTkFGNF9NQVJLLAorCU5BRjNfTUFSSywgTkFGMl9NQVJLLCBOQUYxX01BUkssIE5BRjBfTUFSSywgRkNERV9NQVJLLAorCUZPRV9NQVJLLCBGU0NfTUFSSywgRldFX01BUkssIEZSQl9NQVJLLAorCisJREFDSzFfTUFSSywgRFJFUTFfTUFSSywgREFDSzBfTUFSSywgRFJFUTBfTUFSSywKKworCUFOM19NQVJLLCBBTjJfTUFSSywgQU4xX01BUkssIEFOMF9NQVJLLCBBRFRSR19NQVJLLAorCisJU1RBVFVTMF9NQVJLLCBQRFNUQVRVU19NQVJLLAorCisJVFBVVE8zX01BUkssIFRQVVRPMl9NQVJLLCBUUFVUTzFfTUFSSywgVFBVVE8wX01BUkssCisKKwlEMzFfTUFSSywgRDMwX01BUkssIEQyOV9NQVJLLCBEMjhfTUFSSywKKwlEMjdfTUFSSywgRDI2X01BUkssIEQyNV9NQVJLLCBEMjRfTUFSSywKKwlEMjNfTUFSSywgRDIyX01BUkssIEQyMV9NQVJLLCBEMjBfTUFSSywKKwlEMTlfTUFSSywgRDE4X01BUkssIEQxN19NQVJLLCBEMTZfTUFSSywKKwlJT0lTMTZfTUFSSywgV0FJVF9NQVJLLCBCU19NQVJLLAorCUEyNV9NQVJLLCBBMjRfTUFSSywgQTIzX01BUkssIEEyMl9NQVJLLAorCUNTNkJfQ0UxQl9NQVJLLCBDUzZBX0NFMkJfTUFSSywKKwlDUzVCX0NFMUFfTUFSSywgQ1M1QV9DRTJBX01BUkssCisJV0UzX0lDSU9XUl9NQVJLLCBXRTJfSUNJT1JEX01BUkssCisKKwlJREVEMTVfTUFSSywgSURFRDE0X01BUkssIElERUQxM19NQVJLLCBJREVEMTJfTUFSSywKKwlJREVEMTFfTUFSSywgSURFRDEwX01BUkssIElERUQ5X01BUkssIElERUQ4X01BUkssCisJSURFRDdfTUFSSywgSURFRDZfTUFSSywgSURFRDVfTUFSSywgSURFRDRfTUFSSywKKwlJREVEM19NQVJLLCBJREVEMl9NQVJLLCBJREVEMV9NQVJLLCBJREVEMF9NQVJLLAorCURJUkVDVElPTl9NQVJLLCBFWEJVRl9FTkJfTUFSSywgSURFUlNUX01BUkssIElPREFDS19NQVJLLAorCUlPRFJFUV9NQVJLLCBJREVJT1JEWV9NQVJLLCBJREVJTlRfTUFSSywgSURFSU9XUl9NQVJLLAorCUlERUlPUkRfTUFSSywgSURFQ1MxX01BUkssIElERUNTMF9NQVJLLCBJREVBMl9NQVJLLAorCUlERUExX01BUkssIElERUEwX01BUkssCisJUElOTVVYX01BUktfRU5ELAorfTsKKworc3RhdGljIHBpbm11eF9lbnVtX3QgcGlubXV4X2RhdGFbXSA9IHsKKwkvKiBQVEEgR1BJTyAqLworCVBJTk1VWF9EQVRBKFBUQTdfREFUQSwgUFRBN19JTiwgUFRBN19PVVQpLAorCVBJTk1VWF9EQVRBKFBUQTZfREFUQSwgUFRBNl9JTiwgUFRBNl9PVVQpLAorCVBJTk1VWF9EQVRBKFBUQTVfREFUQSwgUFRBNV9JTiwgUFRBNV9PVVQpLAorCVBJTk1VWF9EQVRBKFBUQTRfREFUQSwgUFRBNF9JTiwgUFRBNF9PVVQsIFBUQTRfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBUQTNfREFUQSwgUFRBM19JTiwgUFRBM19PVVQsIFBUQTNfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBUQTJfREFUQSwgUFRBMl9JTiwgUFRBMl9PVVQsIFBUQTJfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBUQTFfREFUQSwgUFRBMV9JTiwgUFRBMV9PVVQsIFBUQTFfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBUQTBfREFUQSwgUFRBMF9JTiwgUFRBMF9PVVQsIFBUQTBfSU5fUFUpLAorCisJLyogUFRCIEdQSU8gKi8KKwlQSU5NVVhfREFUQShQVEI3X0RBVEEsIFBUQjdfSU4sIFBUQjdfT1VUKSwKKwlQSU5NVVhfREFUQShQVEI2X0RBVEEsIFBUQjZfSU4sIFBUQjZfT1VUKSwKKwlQSU5NVVhfREFUQShQVEI1X0RBVEEsIFBUQjVfSU4sIFBUQjVfT1VUKSwKKwlQSU5NVVhfREFUQShQVEI0X0RBVEEsIFBUQjRfSU4sIFBUQjRfT1VUKSwKKwlQSU5NVVhfREFUQShQVEIzX0RBVEEsIFBUQjNfSU4sIFBUQjNfT1VUKSwKKwlQSU5NVVhfREFUQShQVEIyX0RBVEEsIFBUQjJfSU4sIFBUQjJfT1VULCBQVEIyX0lOX1BVKSwKKwlQSU5NVVhfREFUQShQVEIxX0RBVEEsIFBUQjFfSU4sIFBUQjFfT1VULCBQVEIxX0lOX1BVKSwKKwlQSU5NVVhfREFUQShQVEIwX0RBVEEsIFBUQjBfSU4sIFBUQjBfT1VUKSwKKworCS8qIFBUQyBHUElPICovCisJUElOTVVYX0RBVEEoUFRDN19EQVRBLCBQVEM3X0lOLCBQVEM3X09VVCksCisJUElOTVVYX0RBVEEoUFRDNl9EQVRBLCBQVEM2X0lOLCBQVEM2X09VVCksCisJUElOTVVYX0RBVEEoUFRDNV9EQVRBLCBQVEM1X0lOLCBQVEM1X09VVCksCisJUElOTVVYX0RBVEEoUFRDNF9EQVRBLCBQVEM0X0lOLCBQVEM0X09VVCksCisJUElOTVVYX0RBVEEoUFRDM19EQVRBLCBQVEMzX0lOLCBQVEMzX09VVCksCisJUElOTVVYX0RBVEEoUFRDMl9EQVRBLCBQVEMyX0lOLCBQVEMyX09VVCksCisJUElOTVVYX0RBVEEoUFRDMV9EQVRBLCBQVEMxX0lOLCBQVEMxX09VVCksCisJUElOTVVYX0RBVEEoUFRDMF9EQVRBLCBQVEMwX0lOLCBQVEMwX09VVCksCisKKwkvKiBQVEQgR1BJTyAqLworCVBJTk1VWF9EQVRBKFBURDdfREFUQSwgUFREN19JTiwgUFREN19PVVQpLAorCVBJTk1VWF9EQVRBKFBURDZfREFUQSwgUFRENl9JTiwgUFRENl9PVVQpLAorCVBJTk1VWF9EQVRBKFBURDVfREFUQSwgUFRENV9JTiwgUFRENV9PVVQpLAorCVBJTk1VWF9EQVRBKFBURDRfREFUQSwgUFRENF9JTiwgUFRENF9PVVQpLAorCVBJTk1VWF9EQVRBKFBURDNfREFUQSwgUFREM19JTiwgUFREM19PVVQpLAorCVBJTk1VWF9EQVRBKFBURDJfREFUQSwgUFREMl9JTiwgUFREMl9PVVQpLAorCVBJTk1VWF9EQVRBKFBURDFfREFUQSwgUFREMV9JTiwgUFREMV9PVVQpLAorCVBJTk1VWF9EQVRBKFBURDBfREFUQSwgUFREMF9JTiwgUFREMF9PVVQpLAorCisJLyogUFRFIEdQSU8gKi8KKwlQSU5NVVhfREFUQShQVEU1X0RBVEEsIFBURTVfSU4sIFBURTVfT1VUKSwKKwlQSU5NVVhfREFUQShQVEU0X0RBVEEsIFBURTRfSU4sIFBURTRfT1VUKSwKKwlQSU5NVVhfREFUQShQVEUzX0RBVEEsIFBURTNfSU4sIFBURTNfT1VUKSwKKwlQSU5NVVhfREFUQShQVEUyX0RBVEEsIFBURTJfSU4sIFBURTJfT1VUKSwKKwlQSU5NVVhfREFUQShQVEUxX0RBVEEsIFBURTFfSU4sIFBURTFfT1VUKSwKKwlQSU5NVVhfREFUQShQVEUwX0RBVEEsIFBURTBfSU4sIFBURTBfT1VUKSwKKworCS8qIFBURiBHUElPICovCisJUElOTVVYX0RBVEEoUFRGN19EQVRBLCBQVEY3X0lOLCBQVEY3X09VVCksCisJUElOTVVYX0RBVEEoUFRGNl9EQVRBLCBQVEY2X0lOLCBQVEY2X09VVCksCisJUElOTVVYX0RBVEEoUFRGNV9EQVRBLCBQVEY1X0lOLCBQVEY1X09VVCksCisJUElOTVVYX0RBVEEoUFRGNF9EQVRBLCBQVEY0X0lOLCBQVEY0X09VVCksCisJUElOTVVYX0RBVEEoUFRGM19EQVRBLCBQVEYzX0lOLCBQVEYzX09VVCksCisJUElOTVVYX0RBVEEoUFRGMl9EQVRBLCBQVEYyX0lOLCBQVEYyX09VVCksCisJUElOTVVYX0RBVEEoUFRGMV9EQVRBLCBQVEYxX0lOLCBQVEYxX09VVCksCisJUElOTVVYX0RBVEEoUFRGMF9EQVRBLCBQVEYwX0lOLCBQVEYwX09VVCksCisKKwkvKiBQVEcgR1BJTyAqLworCVBJTk1VWF9EQVRBKFBURzVfREFUQSwgUFRHNV9PVVQpLAorCVBJTk1VWF9EQVRBKFBURzRfREFUQSwgUFRHNF9PVVQpLAorCVBJTk1VWF9EQVRBKFBURzNfREFUQSwgUFRHM19PVVQpLAorCVBJTk1VWF9EQVRBKFBURzJfREFUQSwgUFRHMl9PVVQpLAorCVBJTk1VWF9EQVRBKFBURzFfREFUQSwgUFRHMV9PVVQpLAorCVBJTk1VWF9EQVRBKFBURzBfREFUQSwgUFRHMF9PVVQpLAorCisJLyogUFRIIEdQSU8gKi8KKwlQSU5NVVhfREFUQShQVEg3X0RBVEEsIFBUSDdfSU4sIFBUSDdfT1VUKSwKKwlQSU5NVVhfREFUQShQVEg2X0RBVEEsIFBUSDZfSU4sIFBUSDZfT1VUKSwKKwlQSU5NVVhfREFUQShQVEg1X0RBVEEsIFBUSDVfSU4sIFBUSDVfT1VUKSwKKwlQSU5NVVhfREFUQShQVEg0X0RBVEEsIFBUSDRfSU4sIFBUSDRfT1VUKSwKKwlQSU5NVVhfREFUQShQVEgzX0RBVEEsIFBUSDNfSU4sIFBUSDNfT1VUKSwKKwlQSU5NVVhfREFUQShQVEgyX0RBVEEsIFBUSDJfSU4sIFBUSDJfT1VUKSwKKwlQSU5NVVhfREFUQShQVEgxX0RBVEEsIFBUSDFfSU4sIFBUSDFfT1VUKSwKKwlQSU5NVVhfREFUQShQVEgwX0RBVEEsIFBUSDBfSU4sIFBUSDBfT1VUKSwKKworCS8qIFBUSiBHUElPICovCisJUElOTVVYX0RBVEEoUFRKN19EQVRBLCBQVEo3X09VVCksCisJUElOTVVYX0RBVEEoUFRKNV9EQVRBLCBQVEo1X09VVCksCisJUElOTVVYX0RBVEEoUFRKM19EQVRBLCBQVEozX0lOLCBQVEozX09VVCksCisJUElOTVVYX0RBVEEoUFRKMl9EQVRBLCBQVEoyX0lOLCBQVEoyX09VVCksCisJUElOTVVYX0RBVEEoUFRKMV9EQVRBLCBQVEoxX0lOLCBQVEoxX09VVCksCisJUElOTVVYX0RBVEEoUFRKMF9EQVRBLCBQVEowX0lOLCBQVEowX09VVCksCisKKwkvKiBQVEsgR1BJTyAqLworCVBJTk1VWF9EQVRBKFBUSzdfREFUQSwgUFRLN19JTiwgUFRLN19PVVQpLAorCVBJTk1VWF9EQVRBKFBUSzZfREFUQSwgUFRLNl9JTiwgUFRLNl9PVVQpLAorCVBJTk1VWF9EQVRBKFBUSzVfREFUQSwgUFRLNV9JTiwgUFRLNV9PVVQpLAorCVBJTk1VWF9EQVRBKFBUSzRfREFUQSwgUFRLNF9JTiwgUFRLNF9PVVQpLAorCVBJTk1VWF9EQVRBKFBUSzNfREFUQSwgUFRLM19JTiwgUFRLM19PVVQpLAorCVBJTk1VWF9EQVRBKFBUSzJfREFUQSwgUFRLMl9JTiwgUFRLMl9PVVQpLAorCVBJTk1VWF9EQVRBKFBUSzFfREFUQSwgUFRLMV9JTiwgUFRLMV9PVVQpLAorCVBJTk1VWF9EQVRBKFBUSzBfREFUQSwgUFRLMF9JTiwgUFRLMF9PVVQpLAorCisJLyogUFRMIEdQSU8gKi8KKwlQSU5NVVhfREFUQShQVEw3X0RBVEEsIFBUTDdfSU4sIFBUTDdfT1VUKSwKKwlQSU5NVVhfREFUQShQVEw2X0RBVEEsIFBUTDZfSU4sIFBUTDZfT1VUKSwKKwlQSU5NVVhfREFUQShQVEw1X0RBVEEsIFBUTDVfSU4sIFBUTDVfT1VUKSwKKwlQSU5NVVhfREFUQShQVEw0X0RBVEEsIFBUTDRfSU4sIFBUTDRfT1VUKSwKKwlQSU5NVVhfREFUQShQVEwzX0RBVEEsIFBUTDNfSU4sIFBUTDNfT1VUKSwKKwlQSU5NVVhfREFUQShQVEwyX0RBVEEsIFBUTDJfSU4sIFBUTDJfT1VUKSwKKwlQSU5NVVhfREFUQShQVEwxX0RBVEEsIFBUTDFfSU4sIFBUTDFfT1VUKSwKKwlQSU5NVVhfREFUQShQVEwwX0RBVEEsIFBUTDBfSU4sIFBUTDBfT1VUKSwKKworCS8qIFBUTSBHUElPICovCisJUElOTVVYX0RBVEEoUFRNN19EQVRBLCBQVE03X0lOLCBQVE03X09VVCksCisJUElOTVVYX0RBVEEoUFRNNl9EQVRBLCBQVE02X0lOLCBQVE02X09VVCksCisJUElOTVVYX0RBVEEoUFRNNV9EQVRBLCBQVE01X0lOLCBQVE01X09VVCksCisJUElOTVVYX0RBVEEoUFRNNF9EQVRBLCBQVE00X0lOLCBQVE00X09VVCksCisJUElOTVVYX0RBVEEoUFRNM19EQVRBLCBQVE0zX0lOLCBQVE0zX09VVCksCisJUElOTVVYX0RBVEEoUFRNMl9EQVRBLCBQVE0yX0lOLCBQVE0yX09VVCksCisJUElOTVVYX0RBVEEoUFRNMV9EQVRBLCBQVE0xX0lOLCBQVE0xX09VVCksCisJUElOTVVYX0RBVEEoUFRNMF9EQVRBLCBQVE0wX0lOLCBQVE0wX09VVCksCisKKwkvKiBQVE4gR1BJTyAqLworCVBJTk1VWF9EQVRBKFBUTjdfREFUQSwgUFRON19JTiwgUFRON19PVVQpLAorCVBJTk1VWF9EQVRBKFBUTjZfREFUQSwgUFRONl9JTiwgUFRONl9PVVQpLAorCVBJTk1VWF9EQVRBKFBUTjVfREFUQSwgUFRONV9JTiwgUFRONV9PVVQpLAorCVBJTk1VWF9EQVRBKFBUTjRfREFUQSwgUFRONF9JTiwgUFRONF9PVVQpLAorCVBJTk1VWF9EQVRBKFBUTjNfREFUQSwgUFROM19JTiwgUFROM19PVVQpLAorCVBJTk1VWF9EQVRBKFBUTjJfREFUQSwgUFROMl9JTiwgUFROMl9PVVQpLAorCVBJTk1VWF9EQVRBKFBUTjFfREFUQSwgUFROMV9JTiwgUFROMV9PVVQpLAorCVBJTk1VWF9EQVRBKFBUTjBfREFUQSwgUFROMF9JTiwgUFROMF9PVVQpLAorCisJLyogUFRRIEdQSU8gKi8KKwlQSU5NVVhfREFUQShQVFEzX0RBVEEsIFBUUTNfSU4pLAorCVBJTk1VWF9EQVRBKFBUUTJfREFUQSwgUFRRMl9JTiksCisJUElOTVVYX0RBVEEoUFRRMV9EQVRBLCBQVFExX0lOKSwKKwlQSU5NVVhfREFUQShQVFEwX0RBVEEsIFBUUTBfSU4pLAorCisJLyogUFRSIEdQSU8gKi8KKwlQSU5NVVhfREFUQShQVFI3X0RBVEEsIFBUUjdfSU4sIFBUUjdfT1VUKSwKKwlQSU5NVVhfREFUQShQVFI2X0RBVEEsIFBUUjZfSU4sIFBUUjZfT1VUKSwKKwlQSU5NVVhfREFUQShQVFI1X0RBVEEsIFBUUjVfSU4sIFBUUjVfT1VUKSwKKwlQSU5NVVhfREFUQShQVFI0X0RBVEEsIFBUUjRfSU4sIFBUUjRfT1VUKSwKKwlQSU5NVVhfREFUQShQVFIzX0RBVEEsIFBUUjNfSU4pLAorCVBJTk1VWF9EQVRBKFBUUjJfREFUQSwgUFRSMl9JTiwgUFRSMl9JTl9QVSksCisJUElOTVVYX0RBVEEoUFRSMV9EQVRBLCBQVFIxX0lOLCBQVFIxX09VVCksCisJUElOTVVYX0RBVEEoUFRSMF9EQVRBLCBQVFIwX0lOLCBQVFIwX09VVCksCisKKwkvKiBQVFMgR1BJTyAqLworCVBJTk1VWF9EQVRBKFBUUzdfREFUQSwgUFRTN19JTiwgUFRTN19PVVQpLAorCVBJTk1VWF9EQVRBKFBUUzZfREFUQSwgUFRTNl9JTiwgUFRTNl9PVVQpLAorCVBJTk1VWF9EQVRBKFBUUzVfREFUQSwgUFRTNV9JTiwgUFRTNV9PVVQpLAorCVBJTk1VWF9EQVRBKFBUUzRfREFUQSwgUFRTNF9JTiwgUFRTNF9PVVQpLAorCVBJTk1VWF9EQVRBKFBUUzNfREFUQSwgUFRTM19JTiwgUFRTM19PVVQpLAorCVBJTk1VWF9EQVRBKFBUUzJfREFUQSwgUFRTMl9JTiwgUFRTMl9PVVQpLAorCVBJTk1VWF9EQVRBKFBUUzFfREFUQSwgUFRTMV9JTiwgUFRTMV9PVVQpLAorCVBJTk1VWF9EQVRBKFBUUzBfREFUQSwgUFRTMF9JTiwgUFRTMF9PVVQpLAorCisJLyogUFRUIEdQSU8gKi8KKwlQSU5NVVhfREFUQShQVFQ1X0RBVEEsIFBUVDVfSU4sIFBUVDVfT1VUKSwKKwlQSU5NVVhfREFUQShQVFQ0X0RBVEEsIFBUVDRfSU4sIFBUVDRfT1VUKSwKKwlQSU5NVVhfREFUQShQVFQzX0RBVEEsIFBUVDNfSU4sIFBUVDNfT1VUKSwKKwlQSU5NVVhfREFUQShQVFQyX0RBVEEsIFBUVDJfSU4sIFBUVDJfT1VUKSwKKwlQSU5NVVhfREFUQShQVFQxX0RBVEEsIFBUVDFfSU4sIFBUVDFfT1VUKSwKKwlQSU5NVVhfREFUQShQVFQwX0RBVEEsIFBUVDBfSU4sIFBUVDBfT1VUKSwKKworCS8qIFBUVSBHUElPICovCisJUElOTVVYX0RBVEEoUFRVNV9EQVRBLCBQVFU1X0lOLCBQVFU1X09VVCksCisJUElOTVVYX0RBVEEoUFRVNF9EQVRBLCBQVFU0X0lOLCBQVFU0X09VVCksCisJUElOTVVYX0RBVEEoUFRVM19EQVRBLCBQVFUzX0lOLCBQVFUzX09VVCksCisJUElOTVVYX0RBVEEoUFRVMl9EQVRBLCBQVFUyX0lOLCBQVFUyX09VVCksCisJUElOTVVYX0RBVEEoUFRVMV9EQVRBLCBQVFUxX0lOLCBQVFUxX09VVCksCisJUElOTVVYX0RBVEEoUFRVMF9EQVRBLCBQVFUwX0lOLCBQVFUwX09VVCksCisKKwkvKiBQVFYgR1BJTyAqLworCVBJTk1VWF9EQVRBKFBUVjdfREFUQSwgUFRWN19JTiwgUFRWN19PVVQpLAorCVBJTk1VWF9EQVRBKFBUVjZfREFUQSwgUFRWNl9JTiwgUFRWNl9PVVQpLAorCVBJTk1VWF9EQVRBKFBUVjVfREFUQSwgUFRWNV9JTiwgUFRWNV9PVVQpLAorCVBJTk1VWF9EQVRBKFBUVjRfREFUQSwgUFRWNF9JTiwgUFRWNF9PVVQpLAorCVBJTk1VWF9EQVRBKFBUVjNfREFUQSwgUFRWM19JTiwgUFRWM19PVVQpLAorCVBJTk1VWF9EQVRBKFBUVjJfREFUQSwgUFRWMl9JTiwgUFRWMl9PVVQpLAorCVBJTk1VWF9EQVRBKFBUVjFfREFUQSwgUFRWMV9JTiwgUFRWMV9PVVQpLAorCVBJTk1VWF9EQVRBKFBUVjBfREFUQSwgUFRWMF9JTiwgUFRWMF9PVVQpLAorCisJLyogUFRXIEdQSU8gKi8KKwlQSU5NVVhfREFUQShQVFc3X0RBVEEsIFBUVzdfSU4sIFBUVzdfT1VUKSwKKwlQSU5NVVhfREFUQShQVFc2X0RBVEEsIFBUVzZfSU4sIFBUVzZfT1VUKSwKKwlQSU5NVVhfREFUQShQVFc1X0RBVEEsIFBUVzVfSU4sIFBUVzVfT1VUKSwKKwlQSU5NVVhfREFUQShQVFc0X0RBVEEsIFBUVzRfSU4sIFBUVzRfT1VUKSwKKwlQSU5NVVhfREFUQShQVFczX0RBVEEsIFBUVzNfSU4sIFBUVzNfT1VUKSwKKwlQSU5NVVhfREFUQShQVFcyX0RBVEEsIFBUVzJfSU4sIFBUVzJfT1VUKSwKKwlQSU5NVVhfREFUQShQVFcxX0RBVEEsIFBUVzFfSU4sIFBUVzFfT1VUKSwKKwlQSU5NVVhfREFUQShQVFcwX0RBVEEsIFBUVzBfSU4sIFBUVzBfT1VUKSwKKworCS8qIFBUWCBHUElPICovCisJUElOTVVYX0RBVEEoUFRYN19EQVRBLCBQVFg3X0lOLCBQVFg3X09VVCksCisJUElOTVVYX0RBVEEoUFRYNl9EQVRBLCBQVFg2X0lOLCBQVFg2X09VVCksCisJUElOTVVYX0RBVEEoUFRYNV9EQVRBLCBQVFg1X0lOLCBQVFg1X09VVCksCisJUElOTVVYX0RBVEEoUFRYNF9EQVRBLCBQVFg0X0lOLCBQVFg0X09VVCksCisJUElOTVVYX0RBVEEoUFRYM19EQVRBLCBQVFgzX0lOLCBQVFgzX09VVCksCisJUElOTVVYX0RBVEEoUFRYMl9EQVRBLCBQVFgyX0lOLCBQVFgyX09VVCksCisJUElOTVVYX0RBVEEoUFRYMV9EQVRBLCBQVFgxX0lOLCBQVFgxX09VVCksCisJUElOTVVYX0RBVEEoUFRYMF9EQVRBLCBQVFgwX0lOLCBQVFgwX09VVCksCisKKwkvKiBQVFkgR1BJTyAqLworCVBJTk1VWF9EQVRBKFBUWTdfREFUQSwgUFRZN19JTiwgUFRZN19PVVQpLAorCVBJTk1VWF9EQVRBKFBUWTZfREFUQSwgUFRZNl9JTiwgUFRZNl9PVVQpLAorCVBJTk1VWF9EQVRBKFBUWTVfREFUQSwgUFRZNV9JTiwgUFRZNV9PVVQpLAorCVBJTk1VWF9EQVRBKFBUWTRfREFUQSwgUFRZNF9JTiwgUFRZNF9PVVQpLAorCVBJTk1VWF9EQVRBKFBUWTNfREFUQSwgUFRZM19JTiwgUFRZM19PVVQpLAorCVBJTk1VWF9EQVRBKFBUWTJfREFUQSwgUFRZMl9JTiwgUFRZMl9PVVQpLAorCVBJTk1VWF9EQVRBKFBUWTFfREFUQSwgUFRZMV9JTiwgUFRZMV9PVVQpLAorCVBJTk1VWF9EQVRBKFBUWTBfREFUQSwgUFRZMF9JTiwgUFRZMF9PVVQpLAorCisJLyogUFRaIEdQSU8gKi8KKwlQSU5NVVhfREFUQShQVFo3X0RBVEEsIFBUWjdfSU4sIFBUWjdfT1VUKSwKKwlQSU5NVVhfREFUQShQVFo2X0RBVEEsIFBUWjZfSU4sIFBUWjZfT1VUKSwKKwlQSU5NVVhfREFUQShQVFo1X0RBVEEsIFBUWjVfSU4sIFBUWjVfT1VUKSwKKwlQSU5NVVhfREFUQShQVFo0X0RBVEEsIFBUWjRfSU4sIFBUWjRfT1VUKSwKKwlQSU5NVVhfREFUQShQVFozX0RBVEEsIFBUWjNfSU4sIFBUWjNfT1VUKSwKKwlQSU5NVVhfREFUQShQVFoyX0RBVEEsIFBUWjJfSU4sIFBUWjJfT1VUKSwKKwlQSU5NVVhfREFUQShQVFoxX0RBVEEsIFBUWjFfSU4sIFBUWjFfT1VUKSwKKwlQSU5NVVhfREFUQShQVFowX0RBVEEsIFBUWjBfSU4sIFBUWjBfT1VUKSwKKworCS8qIFBUQSBGTiAqLworCVBJTk1VWF9EQVRBKEQyM19NQVJLLCBQU0ExNV9QU0ExNF9GTjEsIFBUQTdfRk4pLAorCVBJTk1VWF9EQVRBKEtFWU9VVDJfTUFSSywgUFNBMTVfUFNBMTRfRk4yLCBQVEE3X0ZOKSwKKwlQSU5NVVhfREFUQShEMjJfTUFSSywgUFNBMTVfUFNBMTRfRk4xLCBQVEE2X0ZOKSwKKwlQSU5NVVhfREFUQShLRVlPVVQxX01BUkssIFBTQTE1X1BTQTE0X0ZOMiwgUFRBNl9GTiksCisJUElOTVVYX0RBVEEoRDIxX01BUkssIFBTQTE1X1BTQTE0X0ZOMSwgUFRBNV9GTiksCisJUElOTVVYX0RBVEEoS0VZT1VUMF9NQVJLLCBQU0ExNV9QU0ExNF9GTjIsIFBUQTVfRk4pLAorCVBJTk1VWF9EQVRBKEQyMF9NQVJLLCBQU0ExNV9QU0ExNF9GTjEsIFBUQTRfRk4pLAorCVBJTk1VWF9EQVRBKEtFWUlONF9NQVJLLCBQU0ExNV9QU0ExNF9GTjIsIFBUQTRfRk4pLAorCVBJTk1VWF9EQVRBKEQxOV9NQVJLLCBQU0ExNV9QU0ExNF9GTjEsIFBUQTNfRk4pLAorCVBJTk1VWF9EQVRBKEtFWUlOM19NQVJLLCBQU0ExNV9QU0ExNF9GTjIsIFBUQTNfRk4pLAorCVBJTk1VWF9EQVRBKEQxOF9NQVJLLCBQU0ExNV9QU0ExNF9GTjEsIFBUQTJfRk4pLAorCVBJTk1VWF9EQVRBKEtFWUlOMl9NQVJLLCBQU0ExNV9QU0ExNF9GTjIsIFBUQTJfRk4pLAorCVBJTk1VWF9EQVRBKEQxN19NQVJLLCBQU0ExNV9QU0ExNF9GTjEsIFBUQTFfRk4pLAorCVBJTk1VWF9EQVRBKEtFWUlOMV9NQVJLLCBQU0ExNV9QU0ExNF9GTjIsIFBUQTFfRk4pLAorCVBJTk1VWF9EQVRBKEQxNl9NQVJLLCBQU0ExNV9QU0ExNF9GTjEsIFBUQTBfRk4pLAorCVBJTk1VWF9EQVRBKEtFWUlOMF9NQVJLLCBQU0ExNV9QU0ExNF9GTjIsIFBUQTBfRk4pLAorCisJLyogUFRCIEZOICovCisJUElOTVVYX0RBVEEoRDMxX01BUkssIFBUQjdfRk4pLAorCVBJTk1VWF9EQVRBKEQzMF9NQVJLLCBQVEI2X0ZOKSwKKwlQSU5NVVhfREFUQShEMjlfTUFSSywgUFRCNV9GTiksCisJUElOTVVYX0RBVEEoRDI4X01BUkssIFBUQjRfRk4pLAorCVBJTk1VWF9EQVRBKEQyN19NQVJLLCBQVEIzX0ZOKSwKKwlQSU5NVVhfREFUQShEMjZfTUFSSywgUFNBMTVfUFNBMTRfRk4xLCBQVEIyX0ZOKSwKKwlQSU5NVVhfREFUQShLRVlPVVQ1X0lONV9NQVJLLCBQU0ExNV9QU0ExNF9GTjIsIFBUQjJfRk4pLAorCVBJTk1VWF9EQVRBKEQyNV9NQVJLLCBQU0ExNV9QU0ExNF9GTjEsIFBUQjFfRk4pLAorCVBJTk1VWF9EQVRBKEtFWU9VVDRfSU42X01BUkssIFBTQTE1X1BTQTE0X0ZOMiwgUFRCMV9GTiksCisJUElOTVVYX0RBVEEoRDI0X01BUkssIFBTQTE1X1BTQTE0X0ZOMSwgUFRCMF9GTiksCisJUElOTVVYX0RBVEEoS0VZT1VUM19NQVJLLCBQU0ExNV9QU0ExNF9GTjIsIFBUQjBfRk4pLAorCisJLyogUFRDIEZOICovCisJUElOTVVYX0RBVEEoSURFRDE1X01BUkssIFBTQTExX1BTQTEwX0ZOMSwgUFRDN19GTiksCisJUElOTVVYX0RBVEEoU0RISTFDRF9NQVJLLCBQU0ExMV9QU0ExMF9GTjIsIFBUQzdfRk4pLAorCVBJTk1VWF9EQVRBKElERUQxNF9NQVJLLCBQU0ExMV9QU0ExMF9GTjEsIFBUQzZfRk4pLAorCVBJTk1VWF9EQVRBKFNESEkxV1BfTUFSSywgUFNBMTFfUFNBMTBfRk4yLCBQVEM2X0ZOKSwKKwlQSU5NVVhfREFUQShJREVEMTNfTUFSSywgUFNBMTFfUFNBMTBfRk4xLCBQVEM1X0ZOKSwKKwlQSU5NVVhfREFUQShTREhJMUQzX01BUkssIFBTQTExX1BTQTEwX0ZOMiwgUFRDNV9GTiksCisJUElOTVVYX0RBVEEoSURFRDEyX01BUkssIFBTQTExX1BTQTEwX0ZOMSwgUFRDNF9GTiksCisJUElOTVVYX0RBVEEoU0RISTFEMl9NQVJLLCBQU0ExMV9QU0ExMF9GTjIsIFBUQzRfRk4pLAorCVBJTk1VWF9EQVRBKElERUQxMV9NQVJLLCBQU0ExMV9QU0ExMF9GTjEsIFBUQzNfRk4pLAorCVBJTk1VWF9EQVRBKFNESEkxRDFfTUFSSywgUFNBMTFfUFNBMTBfRk4yLCBQVEMzX0ZOKSwKKwlQSU5NVVhfREFUQShJREVEMTBfTUFSSywgUFNBMTFfUFNBMTBfRk4xLCBQVEMyX0ZOKSwKKwlQSU5NVVhfREFUQShTREhJMUQwX01BUkssIFBTQTExX1BTQTEwX0ZOMiwgUFRDMl9GTiksCisJUElOTVVYX0RBVEEoSURFRDlfTUFSSywgUFNBMTFfUFNBMTBfRk4xLCBQVEMxX0ZOKSwKKwlQSU5NVVhfREFUQShTREhJMUNNRF9NQVJLLCBQU0ExMV9QU0ExMF9GTjIsIFBUQzFfRk4pLAorCVBJTk1VWF9EQVRBKElERUQ4X01BUkssIFBTQTExX1BTQTEwX0ZOMSwgUFRDMF9GTiksCisJUElOTVVYX0RBVEEoU0RISTFDTEtfTUFSSywgUFNBMTFfUFNBMTBfRk4yLCBQVEMwX0ZOKSwKKworCS8qIFBURCBGTiAqLworCVBJTk1VWF9EQVRBKElERUQ3X01BUkssIFBTQTExX1BTQTEwX0ZOMSwgUFREN19GTiksCisJUElOTVVYX0RBVEEoU0RISTBDRF9QVERfTUFSSywgUFNBMTFfUFNBMTBfRk4yLCBQVEQ3X0ZOKSwKKwlQSU5NVVhfREFUQShJREVENl9NQVJLLCBQU0ExMV9QU0ExMF9GTjEsIFBURDZfRk4pLAorCVBJTk1VWF9EQVRBKFNESEkwV1BfUFREX01BUkssIFBTQTExX1BTQTEwX0ZOMiwgUFRENl9GTiksCisJUElOTVVYX0RBVEEoSURFRDVfTUFSSywgUFNBMTFfUFNBMTBfRk4xLCBQVEQ1X0ZOKSwKKwlQSU5NVVhfREFUQShTREhJMEQzX1BURF9NQVJLLCBQU0ExMV9QU0ExMF9GTjIsIFBURDVfRk4pLAorCVBJTk1VWF9EQVRBKElERUQ0X01BUkssIFBTQTExX1BTQTEwX0ZOMSwgUFRENF9GTiksCisJUElOTVVYX0RBVEEoU0RISTBEMl9QVERfTUFSSywgUFNBMTFfUFNBMTBfRk4yLCBQVEQ0X0ZOKSwKKwlQSU5NVVhfREFUQShJREVEM19NQVJLLCBQU0ExMV9QU0ExMF9GTjEsIFBURDNfRk4pLAorCVBJTk1VWF9EQVRBKFNESEkwRDFfUFREX01BUkssIFBTQTExX1BTQTEwX0ZOMiwgUFREM19GTiksCisJUElOTVVYX0RBVEEoSURFRDJfTUFSSywgUFNBMTFfUFNBMTBfRk4xLCBQVEQyX0ZOKSwKKwlQSU5NVVhfREFUQShTREhJMEQwX1BURF9NQVJLLCBQU0ExMV9QU0ExMF9GTjIsIFBURDJfRk4pLAorCVBJTk1VWF9EQVRBKElERUQxX01BUkssIFBTQTExX1BTQTEwX0ZOMSwgUFREMV9GTiksCisJUElOTVVYX0RBVEEoU0RISTBDTURfUFREX01BUkssIFBTQTExX1BTQTEwX0ZOMiwgUFREMV9GTiksCisJUElOTVVYX0RBVEEoSURFRDBfTUFSSywgUFNBMTFfUFNBMTBfRk4xLCBQVEQwX0ZOKSwKKwlQSU5NVVhfREFUQShTREhJMENMS19QVERfTUFSSywgUFNBMTFfUFNBMTBfRk4yLCBQVEQwX0ZOKSwKKworCS8qIFBURSBGTiAqLworCVBJTk1VWF9EQVRBKERJUkVDVElPTl9NQVJLLCBQU0ExMV9QU0ExMF9GTjEsIFBURTVfRk4pLAorCVBJTk1VWF9EQVRBKFNDSUY1X1BURV9TQ0tfTUFSSywgUFNBMTFfUFNBMTBfRk4yLCBQVEU1X0ZOKSwKKwlQSU5NVVhfREFUQShFWEJVRl9FTkJfTUFSSywgUFNBMTFfUFNBMTBfRk4xLCBQVEU0X0ZOKSwKKwlQSU5NVVhfREFUQShTQ0lGNV9QVEVfUlhEX01BUkssIFBTQTExX1BTQTEwX0ZOMiwgUFRFNF9GTiksCisJUElOTVVYX0RBVEEoSURFUlNUX01BUkssIFBTQTExX1BTQTEwX0ZOMSwgUFRFM19GTiksCisJUElOTVVYX0RBVEEoU0NJRjVfUFRFX1RYRF9NQVJLLCBQU0ExMV9QU0ExMF9GTjIsIFBURTNfRk4pLAorCVBJTk1VWF9EQVRBKElPREFDS19NQVJLLCBQU0ExMV9QU0ExMF9GTjEsIFBURTJfRk4pLAorCVBJTk1VWF9EQVRBKFNDSUY0X1BURV9TQ0tfTUFSSywgUFNBMTFfUFNBMTBfRk4yLCBQVEUyX0ZOKSwKKwlQSU5NVVhfREFUQShJT0RSRVFfTUFSSywgUFNBMTFfUFNBMTBfRk4xLCBQVEUxX0ZOKSwKKwlQSU5NVVhfREFUQShTQ0lGNF9QVEVfUlhEX01BUkssIFBTQTExX1BTQTEwX0ZOMiwgUFRFMV9GTiksCisJUElOTVVYX0RBVEEoSURFSU9SRFlfTUFSSywgUFNBMTFfUFNBMTBfRk4xLCBQVEUwX0ZOKSwKKwlQSU5NVVhfREFUQShTQ0lGNF9QVEVfVFhEX01BUkssIFBTQTExX1BTQTEwX0ZOMiwgUFRFMF9GTiksCisKKwkvKiBQVEYgRk4gKi8KKwlQSU5NVVhfREFUQShJREVJTlRfTUFSSywgUFRGN19GTiksCisJUElOTVVYX0RBVEEoSURFSU9XUl9NQVJLLCBQU0E1X1BTQTRfRk4xLCBQVEY2X0ZOKSwKKwlQSU5NVVhfREFUQShNU0lPRjBfUFRGX1NTMl9NQVJLLCBQU0E1X1BTQTRfRk4yLCBQVEY2X0ZOKSwKKwlQSU5NVVhfREFUQShNU0lPRjBfUFRGX1JTWU5DX01BUkssIFBTQTVfUFNBNF9GTjMsIFBURjZfRk4pLAorCVBJTk1VWF9EQVRBKElERUlPUkRfTUFSSywgUFNBNV9QU0E0X0ZOMSwgUFRGNV9GTiksCisJUElOTVVYX0RBVEEoTVNJT0YwX1BURl9TUzFfTUFSSywgUFNBNV9QU0E0X0ZOMiwgUFRGNV9GTiksCisJUElOTVVYX0RBVEEoTVNJT0YwX1BURl9SU0NLX01BUkssIFBTQTVfUFNBNF9GTjMsIFBURjVfRk4pLAorCVBJTk1VWF9EQVRBKElERUNTMV9NQVJLLCBQU0ExMV9QU0ExMF9GTjEsIFBURjRfRk4pLAorCVBJTk1VWF9EQVRBKE1TSU9GMF9QVEZfVFNZTkNfTUFSSywgUFNBMTFfUFNBMTBfRk4yLCBQVEY0X0ZOKSwKKwlQSU5NVVhfREFUQShJREVDUzBfTUFSSywgUFNBMTFfUFNBMTBfRk4xLCBQVEYzX0ZOKSwKKwlQSU5NVVhfREFUQShNU0lPRjBfUFRGX1RTQ0tfTUFSSywgUFNBMTFfUFNBMTBfRk4yLCBQVEYzX0ZOKSwKKwlQSU5NVVhfREFUQShJREVBMl9NQVJLLCBQU0ExMV9QU0ExMF9GTjEsIFBURjJfRk4pLAorCVBJTk1VWF9EQVRBKE1TSU9GMF9QVEZfUlhEX01BUkssIFBTQTExX1BTQTEwX0ZOMiwgUFRGMl9GTiksCisJUElOTVVYX0RBVEEoSURFQTFfTUFSSywgUFNBMTFfUFNBMTBfRk4xLCBQVEYxX0ZOKSwKKwlQSU5NVVhfREFUQShNU0lPRjBfUFRGX1RYRF9NQVJLLCBQU0ExMV9QU0ExMF9GTjIsIFBURjFfRk4pLAorCVBJTk1VWF9EQVRBKElERUEwX01BUkssIFBTQTExX1BTQTEwX0ZOMSwgUFRGMF9GTiksCisJUElOTVVYX0RBVEEoTVNJT0YwX1BURl9NQ0tfTUFSSywgUFNBMTFfUFNBMTBfRk4yLCBQVEYwX0ZOKSwKKworCS8qIFBURyBGTiAqLworCVBJTk1VWF9EQVRBKEFVRENLX01BUkssIFBURzVfRk4pLAorCVBJTk1VWF9EQVRBKEFVRFNZTkNfTUFSSywgUFRHNF9GTiksCisJUElOTVVYX0RBVEEoQVVEQVRBM19NQVJLLCBQU0EzX1BTQTJfRk4xLCBQVEczX0ZOKSwKKwlQSU5NVVhfREFUQShUUFVUTzNfTUFSSywgUFNBM19QU0EyX0ZOMiwgUFRHM19GTiksCisJUElOTVVYX0RBVEEoQVVEQVRBMl9NQVJLLCBQU0EzX1BTQTJfRk4xLCBQVEcyX0ZOKSwKKwlQSU5NVVhfREFUQShUUFVUTzJfTUFSSywgUFNBM19QU0EyX0ZOMiwgUFRHMl9GTiksCisJUElOTVVYX0RBVEEoQVVEQVRBMV9NQVJLLCBQU0EzX1BTQTJfRk4xLCBQVEcxX0ZOKSwKKwlQSU5NVVhfREFUQShUUFVUTzFfTUFSSywgUFNBM19QU0EyX0ZOMiwgUFRHMV9GTiksCisJUElOTVVYX0RBVEEoQVVEQVRBMF9NQVJLLCBQU0EzX1BTQTJfRk4xLCBQVEcwX0ZOKSwKKwlQSU5NVVhfREFUQShUUFVUTzBfTUFSSywgUFNBM19QU0EyX0ZOMiwgUFRHMF9GTiksCisKKwkvKiBQVEcgRk4gKi8KKwlQSU5NVVhfREFUQShMQ0RWQ1BXQ19NQVJLLCBQVEg3X0ZOKSwKKwlQSU5NVVhfREFUQShMQ0RSRF9NQVJLLCBQU0IxNV9QU0IxNF9GTjEsIFBUSDZfRk4pLAorCVBJTk1VWF9EQVRBKERWX0NMS0lfTUFSSywgUFNCMTVfUFNCMTRfRk4yLCBQVEg2X0ZOKSwKKwlQSU5NVVhfREFUQShMQ0RWU1lOX01BUkssIFBTQjE1X1BTQjE0X0ZOMSwgUFRINV9GTiksCisJUElOTVVYX0RBVEEoRFZfQ0xLX01BUkssIFBTQjE1X1BTQjE0X0ZOMiwgUFRINV9GTiksCisJUElOTVVYX0RBVEEoTENERElTUF9NQVJLLCBQU0IxM19QU0IxMl9MQ0RDX1JHQiwgUFRINF9GTiksCisJUElOTVVYX0RBVEEoTENEUlNfTUFSSywgUFNCMTNfUFNCMTJfTENEQ19TWVMsIFBUSDRfRk4pLAorCVBJTk1VWF9EQVRBKExDREhTWU5fTUFSSywgUFNCMTNfUFNCMTJfTENEQ19SR0IsIFBUSDNfRk4pLAorCVBJTk1VWF9EQVRBKExDRENTX01BUkssIFBTQjEzX1BTQjEyX0xDRENfU1lTLCBQVEgzX0ZOKSwKKwlQSU5NVVhfREFUQShMQ0RET05fTUFSSywgUFRIMl9GTiksCisJUElOTVVYX0RBVEEoTENERENLX01BUkssIFBTQjEzX1BTQjEyX0xDRENfUkdCLCBQVEgxX0ZOKSwKKwlQSU5NVVhfREFUQShMQ0RXUl9NQVJLLCBQU0IxM19QU0IxMl9MQ0RDX1NZUywgUFRIMV9GTiksCisJUElOTVVYX0RBVEEoTENEVkVQV0NfTUFSSywgUFRIMF9GTiksCisKKwkvKiBQVEogRk4gKi8KKwlQSU5NVVhfREFUQShTVEFUVVMwX01BUkssIFBUSjdfRk4pLAorCVBJTk1VWF9EQVRBKFBEU1RBVFVTX01BUkssIFBUSjVfRk4pLAorCVBJTk1VWF9EQVRBKEEyNV9NQVJLLCBQVEozX0ZOKSwKKwlQSU5NVVhfREFUQShBMjRfTUFSSywgUFRKMl9GTiksCisJUElOTVVYX0RBVEEoQTIzX01BUkssIFBUSjFfRk4pLAorCVBJTk1VWF9EQVRBKEEyMl9NQVJLLCBQVEowX0ZOKSwKKworCS8qIFBUSyBGTiAqLworCVBJTk1VWF9EQVRBKFNJVUFGQ0tfTUFSSywgUFRLN19GTiksCisJUElOTVVYX0RBVEEoU0lVQUlMUl9NQVJLLCBQU0I5X1BTQjhfRk4xLCBQVEs2X0ZOKSwKKwlQSU5NVVhfREFUQShNU0lPRjFfU1MyX01BUkssIFBTQjlfUFNCOF9GTjIsIFBUSzZfRk4pLAorCVBJTk1VWF9EQVRBKE1TSU9GMV9SU1lOQ19NQVJLLCBQU0I5X1BTQjhfRk4zLCBQVEs2X0ZOKSwKKwlQSU5NVVhfREFUQShTSVVBSUJUX01BUkssIFBTQjlfUFNCOF9GTjEsIFBUSzVfRk4pLAorCVBJTk1VWF9EQVRBKE1TSU9GMV9TUzFfTUFSSywgUFNCOV9QU0I4X0ZOMiwgUFRLNV9GTiksCisJUElOTVVYX0RBVEEoTVNJT0YxX1JTQ0tfTUFSSywgUFNCOV9QU0I4X0ZOMywgUFRLNV9GTiksCisJUElOTVVYX0RBVEEoU0lVQUlTTERfTUFSSywgUFNCN19QU0I2X0ZOMSwgUFRLNF9GTiksCisJUElOTVVYX0RBVEEoTVNJT0YxX1JYRF9NQVJLLCBQU0I3X1BTQjZfRk4yLCBQVEs0X0ZOKSwKKwlQSU5NVVhfREFUQShTSVVBT0xSX01BUkssIFBTQjdfUFNCNl9GTjEsIFBUSzNfRk4pLAorCVBJTk1VWF9EQVRBKE1TSU9GMV9UU1lOQ19NQVJLLCBQU0I3X1BTQjZfRk4yLCBQVEszX0ZOKSwKKwlQSU5NVVhfREFUQShTSVVBT0JUX01BUkssIFBTQjdfUFNCNl9GTjEsIFBUSzJfRk4pLAorCVBJTk1VWF9EQVRBKE1TSU9GMV9UU0NLX01BUkssIFBTQjdfUFNCNl9GTjIsIFBUSzJfRk4pLAorCVBJTk1VWF9EQVRBKFNJVUFPU0xEX01BUkssIFBTQjdfUFNCNl9GTjEsIFBUSzFfRk4pLAorCVBJTk1VWF9EQVRBKE1TSU9GMV9SWERfTUFSSywgUFNCN19QU0I2X0ZOMiwgUFRLMV9GTiksCisJUElOTVVYX0RBVEEoU0lVQU1DS19NQVJLLCBQU0I3X1BTQjZfRk4xLCBQVEswX0ZOKSwKKwlQSU5NVVhfREFUQShNU0lPRjFfTUNLX01BUkssIFBTQjdfUFNCNl9GTjIsIFBUSzBfRk4pLAorCisJLyogUFRMIEZOICovCisJUElOTVVYX0RBVEEoTENERDE1X01BUkssIFBTQjVfUFNCNF9GTjEsIFBUTDdfRk4pLAorCVBJTk1VWF9EQVRBKERWX0QxNV9NQVJLLCBQU0I1X1BTQjRfRk4yLCBQVEw3X0ZOKSwKKwlQSU5NVVhfREFUQShMQ0REMTRfTUFSSywgUFNCNV9QU0I0X0ZOMSwgUFRMNl9GTiksCisJUElOTVVYX0RBVEEoRFZfRDE0X01BUkssIFBTQjVfUFNCNF9GTjIsIFBUTDZfRk4pLAorCVBJTk1VWF9EQVRBKExDREQxM19NQVJLLCBQU0I1X1BTQjRfRk4xLCBQVEw1X0ZOKSwKKwlQSU5NVVhfREFUQShEVl9EMTNfTUFSSywgUFNCNV9QU0I0X0ZOMiwgUFRMNV9GTiksCisJUElOTVVYX0RBVEEoTENERDEyX01BUkssIFBTQjVfUFNCNF9GTjEsIFBUTDRfRk4pLAorCVBJTk1VWF9EQVRBKERWX0QxMl9NQVJLLCBQU0I1X1BTQjRfRk4yLCBQVEw0X0ZOKSwKKwlQSU5NVVhfREFUQShMQ0REMTFfTUFSSywgUFNCNV9QU0I0X0ZOMSwgUFRMM19GTiksCisJUElOTVVYX0RBVEEoRFZfRDExX01BUkssIFBTQjVfUFNCNF9GTjIsIFBUTDNfRk4pLAorCVBJTk1VWF9EQVRBKExDREQxMF9NQVJLLCBQU0I1X1BTQjRfRk4xLCBQVEwyX0ZOKSwKKwlQSU5NVVhfREFUQShEVl9EMTBfTUFSSywgUFNCNV9QU0I0X0ZOMiwgUFRMMl9GTiksCisJUElOTVVYX0RBVEEoTENERDlfTUFSSywgUFNCNV9QU0I0X0ZOMSwgUFRMMV9GTiksCisJUElOTVVYX0RBVEEoRFZfRDlfTUFSSywgUFNCNV9QU0I0X0ZOMiwgUFRMMV9GTiksCisJUElOTVVYX0RBVEEoTENERDhfTUFSSywgUFNCNV9QU0I0X0ZOMSwgUFRMMF9GTiksCisJUElOTVVYX0RBVEEoRFZfRDhfTUFSSywgUFNCNV9QU0I0X0ZOMiwgUFRMMF9GTiksCisKKwkvKiBQVE0gRk4gKi8KKwlQSU5NVVhfREFUQShMQ0REN19NQVJLLCBQU0I1X1BTQjRfRk4xLCBQVE03X0ZOKSwKKwlQSU5NVVhfREFUQShEVl9EN19NQVJLLCBQU0I1X1BTQjRfRk4yLCBQVE03X0ZOKSwKKwlQSU5NVVhfREFUQShMQ0RENl9NQVJLLCBQU0I1X1BTQjRfRk4xLCBQVE02X0ZOKSwKKwlQSU5NVVhfREFUQShEVl9ENl9NQVJLLCBQU0I1X1BTQjRfRk4yLCBQVE02X0ZOKSwKKwlQSU5NVVhfREFUQShMQ0RENV9NQVJLLCBQU0I1X1BTQjRfRk4xLCBQVE01X0ZOKSwKKwlQSU5NVVhfREFUQShEVl9ENV9NQVJLLCBQU0I1X1BTQjRfRk4yLCBQVE01X0ZOKSwKKwlQSU5NVVhfREFUQShMQ0RENF9NQVJLLCBQU0I1X1BTQjRfRk4xLCBQVE00X0ZOKSwKKwlQSU5NVVhfREFUQShEVl9ENF9NQVJLLCBQU0I1X1BTQjRfRk4yLCBQVE00X0ZOKSwKKwlQSU5NVVhfREFUQShMQ0REM19NQVJLLCBQU0I1X1BTQjRfRk4xLCBQVE0zX0ZOKSwKKwlQSU5NVVhfREFUQShEVl9EM19NQVJLLCBQU0I1X1BTQjRfRk4yLCBQVE0zX0ZOKSwKKwlQSU5NVVhfREFUQShMQ0REMl9NQVJLLCBQU0I1X1BTQjRfRk4xLCBQVE0yX0ZOKSwKKwlQSU5NVVhfREFUQShEVl9EMl9NQVJLLCBQU0I1X1BTQjRfRk4yLCBQVE0yX0ZOKSwKKwlQSU5NVVhfREFUQShMQ0REMV9NQVJLLCBQU0I1X1BTQjRfRk4xLCBQVE0xX0ZOKSwKKwlQSU5NVVhfREFUQShEVl9EMV9NQVJLLCBQU0I1X1BTQjRfRk4yLCBQVE0xX0ZOKSwKKwlQSU5NVVhfREFUQShMQ0REMF9NQVJLLCBQU0I1X1BTQjRfRk4xLCBQVE0wX0ZOKSwKKwlQSU5NVVhfREFUQShEVl9EMF9NQVJLLCBQU0I1X1BTQjRfRk4yLCBQVE0wX0ZOKSwKKworCS8qIFBUTiBGTiAqLworCVBJTk1VWF9EQVRBKExDREQyM19NQVJLLCBQU0IzX1BTQjJfRk4xLCBQVE43X0ZOKSwKKwlQSU5NVVhfREFUQShTQ0lGNV9QVE5fU0NLX01BUkssIFBTQjNfUFNCMl9GTjIsIFBUTjdfRk4pLAorCVBJTk1VWF9EQVRBKExDREQyMl9NQVJLLCBQU0IzX1BTQjJfRk4xLCBQVE42X0ZOKSwKKwlQSU5NVVhfREFUQShTQ0lGNV9QVE5fUlhEX01BUkssIFBTQjNfUFNCMl9GTjIsIFBUTjZfRk4pLAorCVBJTk1VWF9EQVRBKExDREQyMV9NQVJLLCBQU0IzX1BTQjJfRk4xLCBQVE41X0ZOKSwKKwlQSU5NVVhfREFUQShTQ0lGNV9QVE5fVFhEX01BUkssIFBTQjNfUFNCMl9GTjIsIFBUTjVfRk4pLAorCVBJTk1VWF9EQVRBKExDREQyMF9NQVJLLCBQU0IzX1BTQjJfRk4xLCBQVE40X0ZOKSwKKwlQSU5NVVhfREFUQShTQ0lGNF9QVE5fU0NLX01BUkssIFBTQjNfUFNCMl9GTjIsIFBUTjRfRk4pLAorCVBJTk1VWF9EQVRBKExDREQxOV9NQVJLLCBQU0IzX1BTQjJfRk4xLCBQVE4zX0ZOKSwKKwlQSU5NVVhfREFUQShTQ0lGNF9QVE5fUlhEX01BUkssIFBTQjNfUFNCMl9GTjIsIFBUTjNfRk4pLAorCVBJTk1VWF9EQVRBKExDREQxOF9NQVJLLCBQU0IzX1BTQjJfRk4xLCBQVE4yX0ZOKSwKKwlQSU5NVVhfREFUQShTQ0lGNF9QVE5fVFhEX01BUkssIFBTQjNfUFNCMl9GTjIsIFBUTjJfRk4pLAorCVBJTk1VWF9EQVRBKExDREQxN19NQVJLLCBQU0I1X1BTQjRfRk4xLCBQVE4xX0ZOKSwKKwlQSU5NVVhfREFUQShEVl9WU1lOQ19NQVJLLCBQU0I1X1BTQjRfRk4yLCBQVE4xX0ZOKSwKKwlQSU5NVVhfREFUQShMQ0REMTZfTUFSSywgUFNCNV9QU0I0X0ZOMSwgUFROMF9GTiksCisJUElOTVVYX0RBVEEoRFZfSFNZTkNfTUFSSywgUFNCNV9QU0I0X0ZOMiwgUFROMF9GTiksCisKKwkvKiBQVFEgRk4gKi8KKwlQSU5NVVhfREFUQShBTjNfTUFSSywgUFRRM19GTiksCisJUElOTVVYX0RBVEEoQU4yX01BUkssIFBUUTJfRk4pLAorCVBJTk1VWF9EQVRBKEFOMV9NQVJLLCBQVFExX0ZOKSwKKwlQSU5NVVhfREFUQShBTjBfTUFSSywgUFRRMF9GTiksCisKKwkvKiBQVFIgRk4gKi8KKwlQSU5NVVhfREFUQShDUzZCX0NFMUJfTUFSSywgUFRSN19GTiksCisJUElOTVVYX0RBVEEoQ1M2QV9DRTJCX01BUkssIFBUUjZfRk4pLAorCVBJTk1VWF9EQVRBKENTNUJfQ0UxQV9NQVJLLCBQVFI1X0ZOKSwKKwlQSU5NVVhfREFUQShDUzVBX0NFMkFfTUFSSywgUFRSNF9GTiksCisJUElOTVVYX0RBVEEoSU9JUzE2X01BUkssIFBTQTEzX1BTQTEyX0ZOMSwgUFRSM19GTiksCisJUElOTVVYX0RBVEEoTENETENMS19QVFJfTUFSSywgUFNBMTNfUFNBMTJfRk4yLCBQVFIzX0ZOKSwKKwlQSU5NVVhfREFUQShXQUlUX01BUkssIFBUUjJfRk4pLAorCVBJTk1VWF9EQVRBKFdFM19JQ0lPV1JfTUFSSywgUFRSMV9GTiksCisJUElOTVVYX0RBVEEoV0UyX0lDSU9SRF9NQVJLLCBQVFIwX0ZOKSwKKworCS8qIFBUUyBGTiAqLworCVBJTk1VWF9EQVRBKFNDSUYxX1BUU19TQ0tfTUFSSywgUFNDMTVfUFNDMTRfRk4xLCBQVFM3X0ZOKSwKKwlQSU5NVVhfREFUQShTREhJMENEX1BUU19NQVJLLCBQU0MxNV9QU0MxNF9GTjIsIFBUUzdfRk4pLAorCVBJTk1VWF9EQVRBKFNDSUYxX1BUU19SWERfTUFSSywgUFNDMTVfUFNDMTRfRk4xLCBQVFM2X0ZOKSwKKwlQSU5NVVhfREFUQShTREhJMFdQX1BUU19NQVJLLCBQU0MxNV9QU0MxNF9GTjIsIFBUUzZfRk4pLAorCVBJTk1VWF9EQVRBKFNDSUYxX1BUU19UWERfTUFSSywgUFNDMTVfUFNDMTRfRk4xLCBQVFM1X0ZOKSwKKwlQSU5NVVhfREFUQShTREhJMEQzX1BUU19NQVJLLCBQU0MxNV9QU0MxNF9GTjIsIFBUUzVfRk4pLAorCVBJTk1VWF9EQVRBKFNDSUYzX1BUU19DVFNfTUFSSywgUFNDMTVfUFNDMTRfRk4xLCBQVFM0X0ZOKSwKKwlQSU5NVVhfREFUQShTREhJMEQyX1BUU19NQVJLLCBQU0MxNV9QU0MxNF9GTjIsIFBUUzRfRk4pLAorCVBJTk1VWF9EQVRBKFNDSUYzX1BUU19SVFNfTUFSSywgUFNDMTVfUFNDMTRfRk4xLCBQVFMzX0ZOKSwKKwlQSU5NVVhfREFUQShTREhJMEQxX1BUU19NQVJLLCBQU0MxNV9QU0MxNF9GTjIsIFBUUzNfRk4pLAorCVBJTk1VWF9EQVRBKFNDSUYzX1BUU19TQ0tfTUFSSywgUFNDMTVfUFNDMTRfRk4xLCBQVFMyX0ZOKSwKKwlQSU5NVVhfREFUQShTREhJMEQwX1BUU19NQVJLLCBQU0MxNV9QU0MxNF9GTjIsIFBUUzJfRk4pLAorCVBJTk1VWF9EQVRBKFNDSUYzX1BUU19SWERfTUFSSywgUFNDMTVfUFNDMTRfRk4xLCBQVFMxX0ZOKSwKKwlQSU5NVVhfREFUQShTREhJMENNRF9QVFNfTUFSSywgUFNDMTVfUFNDMTRfRk4yLCBQVFMxX0ZOKSwKKwlQSU5NVVhfREFUQShTQ0lGM19QVFNfVFhEX01BUkssIFBTQzE1X1BTQzE0X0ZOMSwgUFRTMF9GTiksCisJUElOTVVYX0RBVEEoU0RISTBDTEtfUFRTX01BUkssIFBTQzE1X1BTQzE0X0ZOMiwgUFRTMF9GTiksCisKKwkvKiBQVFQgRk4gKi8KKwlQSU5NVVhfREFUQShTQ0lGMF9QVFRfU0NLX01BUkssIFBTQzEzX1BTQzEyX0ZOMSwgUFRUNV9GTiksCisJUElOTVVYX0RBVEEoTVNJT0YwX1BUVF9UU0NLX01BUkssIFBTQzEzX1BTQzEyX0ZOMiwgUFRUNV9GTiksCisJUElOTVVYX0RBVEEoU0NJRjBfUFRUX1JYRF9NQVJLLCBQU0MxM19QU0MxMl9GTjEsIFBUVDRfRk4pLAorCVBJTk1VWF9EQVRBKE1TSU9GMF9QVFRfUlhEX01BUkssIFBTQzEzX1BTQzEyX0ZOMiwgUFRUNF9GTiksCisJUElOTVVYX0RBVEEoU0NJRjBfUFRUX1RYRF9NQVJLLCBQU0MxM19QU0MxMl9GTjEsIFBUVDNfRk4pLAorCVBJTk1VWF9EQVRBKE1TSU9GMF9QVFRfVFhEX01BUkssIFBTQzEzX1BTQzEyX0ZOMiwgUFRUM19GTiksCisJUElOTVVYX0RBVEEoU0NJRjJfUFRUX1NDS19NQVJLLCBQU0MxMV9QU0MxMF9GTjEsIFBUVDJfRk4pLAorCVBJTk1VWF9EQVRBKE1TSU9GMF9QVFRfVFNZTkNfTUFSSywgUFNDMTFfUFNDMTBfRk4yLCBQVFQyX0ZOKSwKKwlQSU5NVVhfREFUQShTQ0lGMl9QVFRfUlhEX01BUkssIFBTQzExX1BTQzEwX0ZOMSwgUFRUMV9GTiksCisJUElOTVVYX0RBVEEoTVNJT0YwX1BUVF9TUzFfTUFSSywgUFNDMTFfUFNDMTBfRk4yLCBQVFQxX0ZOKSwKKwlQSU5NVVhfREFUQShNU0lPRjBfUFRUX1JTQ0tfTUFSSywgUFNDMTFfUFNDMTBfRk4zLCBQVFQxX0ZOKSwKKwlQSU5NVVhfREFUQShTQ0lGMl9QVFRfVFhEX01BUkssIFBTQzExX1BTQzEwX0ZOMSwgUFRUMF9GTiksCisJUElOTVVYX0RBVEEoTVNJT0YwX1BUVF9TUzJfTUFSSywgUFNDMTFfUFNDMTBfRk4yLCBQVFQwX0ZOKSwKKwlQSU5NVVhfREFUQShNU0lPRjBfUFRUX1JTWU5DX01BUkssIFBTQzExX1BTQzEwX0ZOMywgUFRUMF9GTiksCisKKwkvKiBQVFUgRk4gKi8KKwlQSU5NVVhfREFUQShGQ0RFX01BUkssIFBTQzlfUFNDOF9GTjEsIFBUVTVfRk4pLAorCVBJTk1VWF9EQVRBKFNDSUYwX1BUVV9TQ0tfTUFSSywgUFNDOV9QU0M4X0ZOMiwgUFRVNV9GTiksCisJUElOTVVYX0RBVEEoRlNDX01BUkssIFBTQzlfUFNDOF9GTjEsIFBUVTRfRk4pLAorCVBJTk1VWF9EQVRBKFNDSUYwX1BUVV9SWERfTUFSSywgUFNDOV9QU0M4X0ZOMiwgUFRVNF9GTiksCisJUElOTVVYX0RBVEEoRldFX01BUkssIFBTQzlfUFNDOF9GTjEsIFBUVTNfRk4pLAorCVBJTk1VWF9EQVRBKFNDSUYwX1BUVV9UWERfTUFSSywgUFNDOV9QU0M4X0ZOMiwgUFRVM19GTiksCisJUElOTVVYX0RBVEEoRk9FX01BUkssIFBTQzdfUFNDNl9GTjEsIFBUVTJfRk4pLAorCVBJTk1VWF9EQVRBKFNDSUYyX1BUVV9TQ0tfTUFSSywgUFNDN19QU0M2X0ZOMiwgUFRVMl9GTiksCisJUElOTVVYX0RBVEEoVklPX1ZEMl9NQVJLLCBQU0M3X1BTQzZfRk4zLCBQVFUyX0ZOKSwKKwlQSU5NVVhfREFUQShGUkJfTUFSSywgUFNDN19QU0M2X0ZOMSwgUFRVMV9GTiksCisJUElOTVVYX0RBVEEoU0NJRjJfUFRVX1JYRF9NQVJLLCBQU0M3X1BTQzZfRk4yLCBQVFUxX0ZOKSwKKwlQSU5NVVhfREFUQShWSU9fQ0xLMl9NQVJLLCBQU0M3X1BTQzZfRk4zLCBQVFUxX0ZOKSwKKwlQSU5NVVhfREFUQShGQ0VfTUFSSywgUFNDN19QU0M2X0ZOMSwgUFRVMF9GTiksCisJUElOTVVYX0RBVEEoU0NJRjJfUFRVX1RYRF9NQVJLLCBQU0M3X1BTQzZfRk4yLCBQVFUwX0ZOKSwKKwlQSU5NVVhfREFUQShWSU9fSEQyX01BUkssIFBTQzdfUFNDNl9GTjMsIFBUVTBfRk4pLAorCisJLyogUFRWIEZOICovCisJUElOTVVYX0RBVEEoTkFGN19NQVJLLCBQU0M3X1BTQzZfRk4xLCBQVFY3X0ZOKSwKKwlQSU5NVVhfREFUQShTQ0lGMV9QVFZfU0NLX01BUkssIFBTQzdfUFNDNl9GTjIsIFBUVjdfRk4pLAorCVBJTk1VWF9EQVRBKFZJT19EMTVfTUFSSywgUFNDN19QU0M2X0ZOMywgUFRWN19GTiksCisJUElOTVVYX0RBVEEoTkFGNl9NQVJLLCBQU0M3X1BTQzZfRk4xLCBQVFY2X0ZOKSwKKwlQSU5NVVhfREFUQShTQ0lGMV9QVFZfUlhEX01BUkssIFBTQzdfUFNDNl9GTjIsIFBUVjZfRk4pLAorCVBJTk1VWF9EQVRBKFZJT19EMTRfTUFSSywgUFNDN19QU0M2X0ZOMywgUFRWNl9GTiksCisJUElOTVVYX0RBVEEoTkFGNV9NQVJLLCBQU0M3X1BTQzZfRk4xLCBQVFY1X0ZOKSwKKwlQSU5NVVhfREFUQShTQ0lGMV9QVFZfVFhEX01BUkssIFBTQzdfUFNDNl9GTjIsIFBUVjVfRk4pLAorCVBJTk1VWF9EQVRBKFZJT19EMTNfTUFSSywgUFNDN19QU0M2X0ZOMywgUFRWNV9GTiksCisJUElOTVVYX0RBVEEoTkFGNF9NQVJLLCBQU0M3X1BTQzZfRk4xLCBQVFY0X0ZOKSwKKwlQSU5NVVhfREFUQShTQ0lGM19QVFZfQ1RTX01BUkssIFBTQzdfUFNDNl9GTjIsIFBUVjRfRk4pLAorCVBJTk1VWF9EQVRBKFZJT19EMTJfTUFSSywgUFNDN19QU0M2X0ZOMywgUFRWNF9GTiksCisJUElOTVVYX0RBVEEoTkFGM19NQVJLLCBQU0M3X1BTQzZfRk4xLCBQVFYzX0ZOKSwKKwlQSU5NVVhfREFUQShTQ0lGM19QVFZfUlRTX01BUkssIFBTQzdfUFNDNl9GTjIsIFBUVjNfRk4pLAorCVBJTk1VWF9EQVRBKFZJT19EMTFfTUFSSywgUFNDN19QU0M2X0ZOMywgUFRWM19GTiksCisJUElOTVVYX0RBVEEoTkFGMl9NQVJLLCBQU0M3X1BTQzZfRk4xLCBQVFYyX0ZOKSwKKwlQSU5NVVhfREFUQShTQ0lGM19QVFZfU0NLX01BUkssIFBTQzdfUFNDNl9GTjIsIFBUVjJfRk4pLAorCVBJTk1VWF9EQVRBKFZJT19EMTBfTUFSSywgUFNDN19QU0M2X0ZOMywgUFRWMl9GTiksCisJUElOTVVYX0RBVEEoTkFGMV9NQVJLLCBQU0M3X1BTQzZfRk4xLCBQVFYxX0ZOKSwKKwlQSU5NVVhfREFUQShTQ0lGM19QVFZfUlhEX01BUkssIFBTQzdfUFNDNl9GTjIsIFBUVjFfRk4pLAorCVBJTk1VWF9EQVRBKFZJT19EOV9NQVJLLCBQU0M3X1BTQzZfRk4zLCBQVFYxX0ZOKSwKKwlQSU5NVVhfREFUQShOQUYwX01BUkssIFBTQzdfUFNDNl9GTjEsIFBUVjBfRk4pLAorCVBJTk1VWF9EQVRBKFNDSUYzX1BUVl9UWERfTUFSSywgUFNDN19QU0M2X0ZOMiwgUFRWMF9GTiksCisJUElOTVVYX0RBVEEoVklPX0Q4X01BUkssIFBTQzdfUFNDNl9GTjMsIFBUVjBfRk4pLAorCisJLyogUFRXIEZOICovCisJUElOTVVYX0RBVEEoSVJRN19NQVJLLCBQVFc3X0ZOKSwKKwlQSU5NVVhfREFUQShJUlE2X01BUkssIFBUVzZfRk4pLAorCVBJTk1VWF9EQVRBKElSUTVfTUFSSywgUFRXNV9GTiksCisJUElOTVVYX0RBVEEoSVJRNF9NQVJLLCBQU0QxNV9QU0QxNF9GTjEsIFBUVzRfRk4pLAorCVBJTk1VWF9EQVRBKExDRExDTEtfUFRXX01BUkssIFBTRDE1X1BTRDE0X0ZOMiwgUFRXNF9GTiksCisJUElOTVVYX0RBVEEoSVJRM19NQVJLLCBQU0QxM19QU0QxMl9GTjEsIFBUVzNfRk4pLAorCVBJTk1VWF9EQVRBKEFEVFJHX01BUkssIFBTRDEzX1BTRDEyX0ZOMiwgUFRXM19GTiksCisJUElOTVVYX0RBVEEoSVJRMl9NQVJLLCBQU0QxMV9QU0QxMF9GTjEsIFBUVzJfRk4pLAorCVBJTk1VWF9EQVRBKEJTX01BUkssIFBTRDExX1BTRDEwX0ZOMiwgUFRXMl9GTiksCisJUElOTVVYX0RBVEEoVklPX0NLT19NQVJLLCBQU0QxMV9QU0QxMF9GTjMsIFBUVzJfRk4pLAorCVBJTk1VWF9EQVRBKElSUTFfTUFSSywgUFNEOV9QU0Q4X0ZOMSwgUFRXMV9GTiksCisJUElOTVVYX0RBVEEoU0lVQUlTUERfTUFSSywgUFNEOV9QU0Q4X0ZOMiwgUFRXMV9GTiksCisJUElOTVVYX0RBVEEoSVJRMF9NQVJLLCBQU0Q3X1BTRDZfRk4xLCBQVFcwX0ZOKSwKKwlQSU5NVVhfREFUQShTSVVBT1NQRF9NQVJLLCBQU0Q3X1BTRDZfRk4yLCBQVFcwX0ZOKSwKKworCS8qIFBUWCBGTiAqLworCVBJTk1VWF9EQVRBKERBQ0sxX01BUkssIFBUWDdfRk4pLAorCVBJTk1VWF9EQVRBKERSRVExX01BUkssIFBTRDNfUFNEMl9GTjEsIFBUWDZfRk4pLAorCVBJTk1VWF9EQVRBKE1TSU9GMF9QVFhfTUNLX01BUkssIFBTRDNfUFNEMl9GTjIsIFBUWDZfRk4pLAorCVBJTk1VWF9EQVRBKERBQ0sxX01BUkssIFBUWDVfRk4pLAorCVBJTk1VWF9EQVRBKElSREFfT1VUX01BUkssIFBTRDVfUFNENF9GTjIsIFBUWDVfRk4pLAorCVBJTk1VWF9EQVRBKERSRVExX01BUkssIFBUWDRfRk4pLAorCVBJTk1VWF9EQVRBKElSREFfSU5fTUFSSywgUFNENV9QU0Q0X0ZOMiwgUFRYNF9GTiksCisJUElOTVVYX0RBVEEoVFMwX1NEQVRfTUFSSywgUFRYM19GTiksCisJUElOTVVYX0RBVEEoVFMwX1NDS19NQVJLLCBQVFgyX0ZOKSwKKwlQSU5NVVhfREFUQShUUzBfU0RFTl9NQVJLLCBQVFgxX0ZOKSwKKwlQSU5NVVhfREFUQShUUzBfU1BTWU5DX01BUkssIFBUWDBfRk4pLAorCisJLyogUFRZIEZOICovCisJUElOTVVYX0RBVEEoVklPX0Q3X01BUkssIFBUWTdfRk4pLAorCVBJTk1VWF9EQVRBKFZJT19ENl9NQVJLLCBQVFk2X0ZOKSwKKwlQSU5NVVhfREFUQShWSU9fRDVfTUFSSywgUFRZNV9GTiksCisJUElOTVVYX0RBVEEoVklPX0Q0X01BUkssIFBUWTRfRk4pLAorCVBJTk1VWF9EQVRBKFZJT19EM19NQVJLLCBQVFkzX0ZOKSwKKwlQSU5NVVhfREFUQShWSU9fRDJfTUFSSywgUFRZMl9GTiksCisJUElOTVVYX0RBVEEoVklPX0QxX01BUkssIFBUWTFfRk4pLAorCVBJTk1VWF9EQVRBKFZJT19EMF9NQVJLLCBQVFkwX0ZOKSwKKworCS8qIFBUWiBGTiAqLworCVBJTk1VWF9EQVRBKFNJVUJPQlRfTUFSSywgUFRaN19GTiksCisJUElOTVVYX0RBVEEoU0lVQk9MUl9NQVJLLCBQVFo2X0ZOKSwKKwlQSU5NVVhfREFUQShTSVVCT1NMRF9NQVJLLCBQVFo1X0ZOKSwKKwlQSU5NVVhfREFUQShTSVVCTUNLX01BUkssIFBUWjRfRk4pLAorCVBJTk1VWF9EQVRBKFZJT19GTERfTUFSSywgUFNEMV9QU0QwX0ZOMSwgUFRaM19GTiksCisJUElOTVVYX0RBVEEoU0lVQkZDS19NQVJLLCBQU0QxX1BTRDBfRk4yLCBQVFozX0ZOKSwKKwlQSU5NVVhfREFUQShWSU9fSEQxX01BUkssIFBTRDFfUFNEMF9GTjEsIFBUWjJfRk4pLAorCVBJTk1VWF9EQVRBKFNJVUJJTFJfTUFSSywgUFNEMV9QU0QwX0ZOMiwgUFRaMl9GTiksCisJUElOTVVYX0RBVEEoVklPX1ZEMV9NQVJLLCBQU0QxX1BTRDBfRk4xLCBQVFoxX0ZOKSwKKwlQSU5NVVhfREFUQShTSVVCSUJUX01BUkssIFBTRDFfUFNEMF9GTjIsIFBUWjFfRk4pLAorCVBJTk1VWF9EQVRBKFZJT19DTEsxX01BUkssIFBTRDFfUFNEMF9GTjEsIFBUWjBfRk4pLAorCVBJTk1VWF9EQVRBKFNJVUJJU0xEX01BUkssIFBTRDFfUFNEMF9GTjIsIFBUWjBfRk4pLAorfTsKKworc3RhdGljIHN0cnVjdCBwaW5tdXhfZ3BpbyBwaW5tdXhfZ3Bpb3NbXSA9IHsKKwkvKiBQVEEgKi8KKwlQSU5NVVhfR1BJTyhHUElPX1BUQTcsIFBUQTdfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEE2LCBQVEE2X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRBNSwgUFRBNV9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUQTQsIFBUQTRfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEEzLCBQVEEzX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRBMiwgUFRBMl9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUQTEsIFBUQTFfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEEwLCBQVEEwX0RBVEEpLAorCisJLyogUFRCICovCisJUElOTVVYX0dQSU8oR1BJT19QVEI3LCBQVEI3X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRCNiwgUFRCNl9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUQjUsIFBUQjVfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEI0LCBQVEI0X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRCMywgUFRCM19EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUQjIsIFBUQjJfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEIxLCBQVEIxX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRCMCwgUFRCMF9EQVRBKSwKKworCS8qIFBUQyAqLworCVBJTk1VWF9HUElPKEdQSU9fUFRDNywgUFRDN19EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUQzYsIFBUQzZfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEM1LCBQVEM1X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRDNCwgUFRDNF9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUQzMsIFBUQzNfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEMyLCBQVEMyX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRDMSwgUFRDMV9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUQzAsIFBUQzBfREFUQSksCisKKwkvKiBQVEQgKi8KKwlQSU5NVVhfR1BJTyhHUElPX1BURDcsIFBURDdfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEQ2LCBQVEQ2X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRENSwgUFRENV9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BURDQsIFBURDRfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEQzLCBQVEQzX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFREMiwgUFREMl9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BURDEsIFBURDFfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEQwLCBQVEQwX0RBVEEpLAorCisJLyogUFRFICovCisJUElOTVVYX0dQSU8oR1BJT19QVEU1LCBQVEU1X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRFNCwgUFRFNF9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BURTMsIFBURTNfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEUyLCBQVEUyX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRFMSwgUFRFMV9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BURTAsIFBURTBfREFUQSksCisKKwkvKiBQVEYgKi8KKwlQSU5NVVhfR1BJTyhHUElPX1BURjcsIFBURjdfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEY2LCBQVEY2X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRGNSwgUFRGNV9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BURjQsIFBURjRfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEYzLCBQVEYzX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRGMiwgUFRGMl9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BURjEsIFBURjFfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEYwLCBQVEYwX0RBVEEpLAorCisJLyogUFRHICovCisJUElOTVVYX0dQSU8oR1BJT19QVEc1LCBQVEc1X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRHNCwgUFRHNF9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BURzMsIFBURzNfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEcyLCBQVEcyX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRHMSwgUFRHMV9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BURzAsIFBURzBfREFUQSksCisKKwkvKiBQVEggKi8KKwlQSU5NVVhfR1BJTyhHUElPX1BUSDcsIFBUSDdfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEg2LCBQVEg2X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRINSwgUFRINV9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUSDQsIFBUSDRfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEgzLCBQVEgzX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRIMiwgUFRIMl9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUSDEsIFBUSDFfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEgwLCBQVEgwX0RBVEEpLAorCisJLyogUFRKICovCisJUElOTVVYX0dQSU8oR1BJT19QVEo3LCBQVEo3X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRKNSwgUFRKNV9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUSjMsIFBUSjNfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEoyLCBQVEoyX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRKMSwgUFRKMV9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUSjAsIFBUSjBfREFUQSksCisKKwkvKiBQVEsgKi8KKwlQSU5NVVhfR1BJTyhHUElPX1BUSzcsIFBUSzdfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEs2LCBQVEs2X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRLNSwgUFRLNV9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUSzQsIFBUSzRfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEszLCBQVEszX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRLMiwgUFRLMl9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUSzEsIFBUSzFfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEswLCBQVEswX0RBVEEpLAorCisJLyogUFRMICovCisJUElOTVVYX0dQSU8oR1BJT19QVEw3LCBQVEw3X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRMNiwgUFRMNl9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUTDUsIFBUTDVfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEw0LCBQVEw0X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRMMywgUFRMM19EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUTDIsIFBUTDJfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVEwxLCBQVEwxX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRMMCwgUFRMMF9EQVRBKSwKKworCS8qIFBUTSAqLworCVBJTk1VWF9HUElPKEdQSU9fUFRNNywgUFRNN19EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUTTYsIFBUTTZfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVE01LCBQVE01X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRNNCwgUFRNNF9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUTTMsIFBUTTNfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVE0yLCBQVE0yX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRNMSwgUFRNMV9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUTTAsIFBUTTBfREFUQSksCisKKwkvKiBQVE4gKi8KKwlQSU5NVVhfR1BJTyhHUElPX1BUTjcsIFBUTjdfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVE42LCBQVE42X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRONSwgUFRONV9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUTjQsIFBUTjRfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVE4zLCBQVE4zX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFROMiwgUFROMl9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUTjEsIFBUTjFfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVE4wLCBQVE4wX0RBVEEpLAorCisJLyogUFRRICovCisJUElOTVVYX0dQSU8oR1BJT19QVFEzLCBQVFEzX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRRMiwgUFRRMl9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUUTEsIFBUUTFfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVFEwLCBQVFEwX0RBVEEpLAorCisJLyogUFRSICovCisJUElOTVVYX0dQSU8oR1BJT19QVFI3LCBQVFI3X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRSNiwgUFRSNl9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUUjUsIFBUUjVfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVFI0LCBQVFI0X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRSMywgUFRSM19EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUUjIsIFBUUjJfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVFIxLCBQVFIxX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRSMCwgUFRSMF9EQVRBKSwKKworCS8qIFBUUyAqLworCVBJTk1VWF9HUElPKEdQSU9fUFRTNywgUFRTN19EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUUzYsIFBUUzZfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVFM1LCBQVFM1X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRTNCwgUFRTNF9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUUzMsIFBUUzNfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVFMyLCBQVFMyX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRTMSwgUFRTMV9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUUzAsIFBUUzBfREFUQSksCisKKwkvKiBQVFQgKi8KKwlQSU5NVVhfR1BJTyhHUElPX1BUVDUsIFBUVDVfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVFQ0LCBQVFQ0X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRUMywgUFRUM19EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUVDIsIFBUVDJfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVFQxLCBQVFQxX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRUMCwgUFRUMF9EQVRBKSwKKworCS8qIFBUVSAqLworCVBJTk1VWF9HUElPKEdQSU9fUFRVNSwgUFRVNV9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUVTQsIFBUVTRfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVFUzLCBQVFUzX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRVMiwgUFRVMl9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUVTEsIFBUVTFfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVFUwLCBQVFUwX0RBVEEpLAorCisJLyogUFRWICovCisJUElOTVVYX0dQSU8oR1BJT19QVFY3LCBQVFY3X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRWNiwgUFRWNl9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUVjUsIFBUVjVfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVFY0LCBQVFY0X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRWMywgUFRWM19EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUVjIsIFBUVjJfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVFYxLCBQVFYxX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRWMCwgUFRWMF9EQVRBKSwKKworCS8qIFBUVyAqLworCVBJTk1VWF9HUElPKEdQSU9fUFRXNywgUFRXN19EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUVzYsIFBUVzZfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVFc1LCBQVFc1X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRXNCwgUFRXNF9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUVzMsIFBUVzNfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVFcyLCBQVFcyX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRXMSwgUFRXMV9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUVzAsIFBUVzBfREFUQSksCisKKwkvKiBQVFggKi8KKwlQSU5NVVhfR1BJTyhHUElPX1BUWDcsIFBUWDdfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVFg2LCBQVFg2X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRYNSwgUFRYNV9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUWDQsIFBUWDRfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVFgzLCBQVFgzX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRYMiwgUFRYMl9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUWDEsIFBUWDFfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVFgwLCBQVFgwX0RBVEEpLAorCisJLyogUFRZICovCisJUElOTVVYX0dQSU8oR1BJT19QVFk3LCBQVFk3X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRZNiwgUFRZNl9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUWTUsIFBUWTVfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVFk0LCBQVFk0X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRZMywgUFRZM19EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUWTIsIFBUWTJfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVFkxLCBQVFkxX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRZMCwgUFRZMF9EQVRBKSwKKworCS8qIFBUWiAqLworCVBJTk1VWF9HUElPKEdQSU9fUFRaNywgUFRaN19EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUWjYsIFBUWjZfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVFo1LCBQVFo1X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRaNCwgUFRaNF9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUWjMsIFBUWjNfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QVFoyLCBQVFoyX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUFRaMSwgUFRaMV9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BUWjAsIFBUWjBfREFUQSksCisKKwkvKiBTQ0lGMCAqLworCVBJTk1VWF9HUElPKEdQSU9fRk5fU0NJRjBfUFRUX1RYRCwgU0NJRjBfUFRUX1RYRF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NDSUYwX1BUVF9SWEQsIFNDSUYwX1BUVF9SWERfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TQ0lGMF9QVFRfU0NLLCBTQ0lGMF9QVFRfU0NLX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0NJRjBfUFRVX1RYRCwgU0NJRjBfUFRVX1RYRF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NDSUYwX1BUVV9SWEQsIFNDSUYwX1BUVV9SWERfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TQ0lGMF9QVFVfU0NLLCBTQ0lGMF9QVFVfU0NLX01BUkspLAorCisJLyogU0NJRjEgKi8KKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NDSUYxX1BUU19UWEQsIFNDSUYxX1BUU19UWERfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TQ0lGMV9QVFNfUlhELCBTQ0lGMV9QVFNfUlhEX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0NJRjFfUFRTX1NDSywgU0NJRjFfUFRTX1NDS19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NDSUYxX1BUVl9UWEQsIFNDSUYxX1BUVl9UWERfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TQ0lGMV9QVFZfUlhELCBTQ0lGMV9QVFZfUlhEX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0NJRjFfUFRWX1NDSywgU0NJRjFfUFRWX1NDS19NQVJLKSwKKworCS8qIFNDSUYyICovCisJUElOTVVYX0dQSU8oR1BJT19GTl9TQ0lGMl9QVFRfVFhELCBTQ0lGMl9QVFRfVFhEX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0NJRjJfUFRUX1JYRCwgU0NJRjJfUFRUX1JYRF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NDSUYyX1BUVF9TQ0ssIFNDSUYyX1BUVF9TQ0tfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TQ0lGMl9QVFVfVFhELCBTQ0lGMl9QVFVfVFhEX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0NJRjJfUFRVX1JYRCwgU0NJRjJfUFRVX1JYRF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NDSUYyX1BUVV9TQ0ssIFNDSUYyX1BUVV9TQ0tfTUFSSyksCisKKwkvKiBTQ0lGMyAqLworCVBJTk1VWF9HUElPKEdQSU9fRk5fU0NJRjNfUFRTX1RYRCwgU0NJRjNfUFRTX1RYRF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NDSUYzX1BUU19SWEQsIFNDSUYzX1BUU19SWERfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TQ0lGM19QVFNfU0NLLCBTQ0lGM19QVFNfU0NLX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0NJRjNfUFRTX1JUUywgU0NJRjNfUFRTX1JUU19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NDSUYzX1BUU19DVFMsIFNDSUYzX1BUU19DVFNfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TQ0lGM19QVFZfVFhELCBTQ0lGM19QVFZfVFhEX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0NJRjNfUFRWX1JYRCwgU0NJRjNfUFRWX1JYRF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NDSUYzX1BUVl9TQ0ssIFNDSUYzX1BUVl9TQ0tfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TQ0lGM19QVFZfUlRTLCBTQ0lGM19QVFZfUlRTX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0NJRjNfUFRWX0NUUywgU0NJRjNfUFRWX0NUU19NQVJLKSwKKworCS8qIFNDSUY0ICovCisJUElOTVVYX0dQSU8oR1BJT19GTl9TQ0lGNF9QVEVfVFhELCBTQ0lGNF9QVEVfVFhEX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0NJRjRfUFRFX1JYRCwgU0NJRjRfUFRFX1JYRF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NDSUY0X1BURV9TQ0ssIFNDSUY0X1BURV9TQ0tfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TQ0lGNF9QVE5fVFhELCBTQ0lGNF9QVE5fVFhEX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0NJRjRfUFROX1JYRCwgU0NJRjRfUFROX1JYRF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NDSUY0X1BUTl9TQ0ssIFNDSUY0X1BUTl9TQ0tfTUFSSyksCisKKwkvKiBTQ0lGNSAqLworCVBJTk1VWF9HUElPKEdQSU9fRk5fU0NJRjVfUFRFX1RYRCwgU0NJRjVfUFRFX1RYRF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NDSUY1X1BURV9SWEQsIFNDSUY1X1BURV9SWERfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TQ0lGNV9QVEVfU0NLLCBTQ0lGNV9QVEVfU0NLX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0NJRjVfUFROX1RYRCwgU0NJRjVfUFROX1RYRF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NDSUY1X1BUTl9SWEQsIFNDSUY1X1BUTl9SWERfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TQ0lGNV9QVE5fU0NLLCBTQ0lGNV9QVE5fU0NLX01BUkspLAorCisJLyogQ0VVICovCisJUElOTVVYX0dQSU8oR1BJT19GTl9WSU9fRDE1LCBWSU9fRDE1X01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fVklPX0QxNCwgVklPX0QxNF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1ZJT19EMTMsIFZJT19EMTNfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9WSU9fRDEyLCBWSU9fRDEyX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fVklPX0QxMSwgVklPX0QxMV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1ZJT19EMTAsIFZJT19EMTBfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9WSU9fRDksIFZJT19EOV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1ZJT19EOCwgVklPX0Q4X01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fVklPX0Q3LCBWSU9fRDdfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9WSU9fRDYsIFZJT19ENl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1ZJT19ENSwgVklPX0Q1X01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fVklPX0Q0LCBWSU9fRDRfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9WSU9fRDMsIFZJT19EM19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1ZJT19EMiwgVklPX0QyX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fVklPX0QxLCBWSU9fRDFfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9WSU9fRDAsIFZJT19EMF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1ZJT19DTEsxLCBWSU9fQ0xLMV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1ZJT19WRDEsIFZJT19WRDFfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9WSU9fSEQxLCBWSU9fSEQxX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fVklPX0ZMRCwgVklPX0ZMRF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1ZJT19DS08sIFZJT19DS09fTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9WSU9fVkQyLCBWSU9fVkQyX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fVklPX0hEMiwgVklPX0hEMl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1ZJT19DTEsyLCBWSU9fQ0xLMl9NQVJLKSwKKworCS8qIExDREMgKi8KKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0xDREQyMywgTENERDIzX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fTENERDIyLCBMQ0REMjJfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9MQ0REMjEsIExDREQyMV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0xDREQyMCwgTENERDIwX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fTENERDE5LCBMQ0REMTlfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9MQ0REMTgsIExDREQxOF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0xDREQxNywgTENERDE3X01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fTENERDE2LCBMQ0REMTZfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9MQ0REMTUsIExDREQxNV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0xDREQxNCwgTENERDE0X01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fTENERDEzLCBMQ0REMTNfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9MQ0REMTIsIExDREQxMl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0xDREQxMSwgTENERDExX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fTENERDEwLCBMQ0REMTBfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9MQ0REOSwgTENERDlfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9MQ0REOCwgTENERDhfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9MQ0RENywgTENERDdfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9MQ0RENiwgTENERDZfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9MQ0RENSwgTENERDVfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9MQ0RENCwgTENERDRfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9MQ0REMywgTENERDNfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9MQ0REMiwgTENERDJfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9MQ0REMSwgTENERDFfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9MQ0REMCwgTENERDBfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9MQ0RMQ0xLX1BUUiwgTENETENMS19QVFJfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9MQ0RMQ0xLX1BUVywgTENETENMS19QVFdfTUFSSyksCisJLyogTWFpbiBMQ0QgKi8KKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0xDRERPTiwgTENERE9OX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fTENEVkNQV0MsIExDRFZDUFdDX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fTENEVkVQV0MsIExDRFZFUFdDX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fTENEVlNZTiwgTENEVlNZTl9NQVJLKSwKKwkvKiBNYWluIExDRCAtIFJHQiBNb2RlICovCisJUElOTVVYX0dQSU8oR1BJT19GTl9MQ0REQ0ssIExDRERDS19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0xDREhTWU4sIExDREhTWU5fTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9MQ0RESVNQLCBMQ0RESVNQX01BUkspLAorCS8qIE1haW4gTENEIC0gU1lTIE1vZGUgKi8KKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0xDRFJTLCBMQ0RSU19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0xDRENTLCBMQ0RDU19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0xDRFdSLCBMQ0RXUl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0xDRFJELCBMQ0RSRF9NQVJLKSwKKworCS8qIElSUSAqLworCVBJTk1VWF9HUElPKEdQSU9fRk5fSVJRMCwgSVJRMF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0lSUTEsIElSUTFfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9JUlEyLCBJUlEyX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fSVJRMywgSVJRM19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0lSUTQsIElSUTRfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9JUlE1LCBJUlE1X01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fSVJRNiwgSVJRNl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0lSUTcsIElSUTdfTUFSSyksCisKKwkvKiBBVUQgKi8KKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0FVRENLLCBBVURDS19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0FVRFNZTkMsIEFVRFNZTkNfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9BVURBVEEzLCBBVURBVEEzX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fQVVEQVRBMiwgQVVEQVRBMl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0FVREFUQTEsIEFVREFUQTFfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9BVURBVEEwLCBBVURBVEEwX01BUkspLAorCisJLyogU0RISTAgKFBURCkgKi8KKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NESEkwQ0RfUFRELCBTREhJMENEX1BURF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NESEkwV1BfUFRELCBTREhJMFdQX1BURF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NESEkwRDNfUFRELCBTREhJMEQzX1BURF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NESEkwRDJfUFRELCBTREhJMEQyX1BURF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NESEkwRDFfUFRELCBTREhJMEQxX1BURF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NESEkwRDBfUFRELCBTREhJMEQwX1BURF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NESEkwQ01EX1BURCwgU0RISTBDTURfUFREX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0RISTBDTEtfUFRELCBTREhJMENMS19QVERfTUFSSyksCisKKwkvKiBTREhJMCAoUFRTKSAqLworCVBJTk1VWF9HUElPKEdQSU9fRk5fU0RISTBDRF9QVFMsIFNESEkwQ0RfUFRTX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0RISTBXUF9QVFMsIFNESEkwV1BfUFRTX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0RISTBEM19QVFMsIFNESEkwRDNfUFRTX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0RISTBEMl9QVFMsIFNESEkwRDJfUFRTX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0RISTBEMV9QVFMsIFNESEkwRDFfUFRTX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0RISTBEMF9QVFMsIFNESEkwRDBfUFRTX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0RISTBDTURfUFRTLCBTREhJMENNRF9QVFNfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TREhJMENMS19QVFMsIFNESEkwQ0xLX1BUU19NQVJLKSwKKworCS8qIFNESEkxICovCisJUElOTVVYX0dQSU8oR1BJT19GTl9TREhJMUNELCBTREhJMUNEX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0RISTFXUCwgU0RISTFXUF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NESEkxRDMsIFNESEkxRDNfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TREhJMUQyLCBTREhJMUQyX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0RISTFEMSwgU0RISTFEMV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NESEkxRDAsIFNESEkxRDBfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TREhJMUNNRCwgU0RISTFDTURfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TREhJMUNMSywgU0RISTFDTEtfTUFSSyksCisKKwkvKiBTSVVBICovCisJUElOTVVYX0dQSU8oR1BJT19GTl9TSVVBRkNLLCBTSVVBRkNLX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0lVQUlMUiwgU0lVQUlMUl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NJVUFJQlQsIFNJVUFJQlRfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TSVVBSVNMRCwgU0lVQUlTTERfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TSVVBT0xSLCBTSVVBT0xSX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0lVQU9CVCwgU0lVQU9CVF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NJVUFPU0xELCBTSVVBT1NMRF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NJVUFNQ0ssIFNJVUFNQ0tfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TSVVBSVNQRCwgU0lVQUlTUERfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TSVVPU1BELCBTSVVBT1NQRF9NQVJLKSwKKworCS8qIFNJVUIgKi8KKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NJVUJGQ0ssIFNJVUJGQ0tfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TSVVCSUxSLCBTSVVCSUxSX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0lVQklCVCwgU0lVQklCVF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NJVUJJU0xELCBTSVVCSVNMRF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NJVUJPTFIsIFNJVUJPTFJfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TSVVCT0JULCBTSVVCT0JUX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0lVQk9TTEQsIFNJVUJPU0xEX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0lVQk1DSywgU0lVQk1DS19NQVJLKSwKKworCS8qIElSREEgKi8KKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0lSREFfSU4sIElSREFfSU5fTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9JUkRBX09VVCwgSVJEQV9PVVRfTUFSSyksCisKKwkvKiBWT1UgKi8KKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0RWX0NMS0ksIERWX0NMS0lfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9EVl9DTEssIERWX0NMS19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0RWX0hTWU5DLCBEVl9IU1lOQ19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0RWX1ZTWU5DLCBEVl9WU1lOQ19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0RWX0QxNSwgRFZfRDE1X01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRFZfRDE0LCBEVl9EMTRfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9EVl9EMTMsIERWX0QxM19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0RWX0QxMiwgRFZfRDEyX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRFZfRDExLCBEVl9EMTFfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9EVl9EMTAsIERWX0QxMF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0RWX0Q5LCBEVl9EOV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0RWX0Q4LCBEVl9EOF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0RWX0Q3LCBEVl9EN19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0RWX0Q2LCBEVl9ENl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0RWX0Q1LCBEVl9ENV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0RWX0Q0LCBEVl9ENF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0RWX0QzLCBEVl9EM19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0RWX0QyLCBEVl9EMl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0RWX0QxLCBEVl9EMV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0RWX0QwLCBEVl9EMF9NQVJLKSwKKworCS8qIEtFWVNDICovCisJUElOTVVYX0dQSU8oR1BJT19GTl9LRVlJTjAsIEtFWUlOMF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0tFWUlOMSwgS0VZSU4xX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fS0VZSU4yLCBLRVlJTjJfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9LRVlJTjMsIEtFWUlOM19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0tFWUlONCwgS0VZSU40X01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fS0VZT1VUMCwgS0VZT1VUMF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0tFWU9VVDEsIEtFWU9VVDFfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9LRVlPVVQyLCBLRVlPVVQyX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fS0VZT1VUMywgS0VZT1VUM19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0tFWU9VVDRfSU42LCBLRVlPVVQ0X0lONl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0tFWU9VVDVfSU41LCBLRVlPVVQ1X0lONV9NQVJLKSwKKworCS8qIE1TSU9GMCAoUFRGKSAqLworCVBJTk1VWF9HUElPKEdQSU9fRk5fTVNJT0YwX1BURl9UWEQsIE1TSU9GMF9QVEZfVFhEX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fTVNJT0YwX1BURl9SWEQsIE1TSU9GMF9QVEZfUlhEX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fTVNJT0YwX1BURl9NQ0ssIE1TSU9GMF9QVEZfTUNLX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fTVNJT0YwX1BURl9UU1lOQywgTVNJT0YwX1BURl9UU1lOQ19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX01TSU9GMF9QVEZfVFNDSywgTVNJT0YwX1BURl9UU0NLX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fTVNJT0YwX1BURl9SU1lOQywgTVNJT0YwX1BURl9SU1lOQ19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX01TSU9GMF9QVEZfUlNDSywgTVNJT0YwX1BURl9SU0NLX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fTVNJT0YwX1BURl9TUzEsIE1TSU9GMF9QVEZfU1MxX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fTVNJT0YwX1BURl9TUzIsIE1TSU9GMF9QVEZfU1MyX01BUkspLAorCisJLyogTVNJT0YwIChQVFQrUFRYKSAqLworCVBJTk1VWF9HUElPKEdQSU9fRk5fTVNJT0YwX1BUVF9UWEQsIE1TSU9GMF9QVFRfVFhEX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fTVNJT0YwX1BUVF9SWEQsIE1TSU9GMF9QVFRfUlhEX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fTVNJT0YwX1BUWF9NQ0ssIE1TSU9GMF9QVFhfTUNLX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fTVNJT0YwX1BUVF9UU1lOQywgTVNJT0YwX1BUVF9UU1lOQ19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX01TSU9GMF9QVFRfVFNDSywgTVNJT0YwX1BUVF9UU0NLX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fTVNJT0YwX1BUVF9SU1lOQywgTVNJT0YwX1BUVF9SU1lOQ19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX01TSU9GMF9QVFRfUlNDSywgTVNJT0YwX1BUVF9SU0NLX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fTVNJT0YwX1BUVF9TUzEsIE1TSU9GMF9QVFRfU1MxX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fTVNJT0YwX1BUVF9TUzIsIE1TSU9GMF9QVFRfU1MyX01BUkspLAorCisJLyogTVNJT0YxICovCisJUElOTVVYX0dQSU8oR1BJT19GTl9NU0lPRjFfVFhELCBNU0lPRjFfVFhEX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fTVNJT0YxX1JYRCwgTVNJT0YxX1JYRF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX01TSU9GMV9NQ0ssIE1TSU9GMV9NQ0tfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9NU0lPRjFfVFNZTkMsIE1TSU9GMV9UU1lOQ19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX01TSU9GMV9UU0NLLCBNU0lPRjFfVFNDS19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX01TSU9GMV9SU1lOQywgTVNJT0YxX1JTWU5DX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fTVNJT0YxX1JTQ0ssIE1TSU9GMV9SU0NLX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fTVNJT0YxX1NTMSwgTVNJT0YxX1NTMV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX01TSU9GMV9TUzIsIE1TSU9GMV9TUzJfTUFSSyksCisKKwkvKiBUU0lGICovCisJUElOTVVYX0dQSU8oR1BJT19GTl9UUzBfU0RBVCwgVFMwX1NEQVRfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9UUzBfU0NLLCBUUzBfU0NLX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fVFMwX1NERU4sIFRTMF9TREVOX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fVFMwX1NQU1lOQywgVFMwX1NQU1lOQ19NQVJLKSwKKworCS8qIEZMQ1RMICovCisJUElOTVVYX0dQSU8oR1BJT19GTl9GQ0UsIEZDRV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX05BRjcsIE5BRjdfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9OQUY2LCBOQUY2X01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fTkFGNSwgTkFGNV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX05BRjQsIE5BRjRfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9OQUYzLCBOQUYzX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fTkFGMiwgTkFGMl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX05BRjEsIE5BRjFfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9OQUYwLCBOQUYwX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRkNERSwgRkNERV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0ZPRSwgRk9FX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRlNDLCBGU0NfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9GV0UsIEZXRV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0ZSQiwgRlJCX01BUkspLAorCisJLyogRE1BQyAqLworCVBJTk1VWF9HUElPKEdQSU9fRk5fREFDSzEsIERBQ0sxX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRFJFUTEsIERSRVExX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fREFDSzAsIERBQ0swX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRFJFUTAsIERSRVEwX01BUkspLAorCisJLyogQURDICovCisJUElOTVVYX0dQSU8oR1BJT19GTl9BTjMsIEFOM19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0FOMiwgQU4yX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fQU4xLCBBTjFfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9BTjAsIEFOMF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0FEVFJHLCBBRFRSR19NQVJLKSwKKworCS8qIENQRyAqLworCVBJTk1VWF9HUElPKEdQSU9fRk5fU1RBVFVTMCwgU1RBVFVTMF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1BEU1RBVFVTLCBQRFNUQVRVU19NQVJLKSwKKworCS8qIFRQVSAqLworCVBJTk1VWF9HUElPKEdQSU9fRk5fVFBVVE8wLCBUUFVUTzBfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9UUFVUTzEsIFRQVVRPMV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1RQVVRPMiwgVFBVVE8yX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fVFBVVE8zLCBUUFVUTzNfTUFSSyksCisKKwkvKiBCU0MgKi8KKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0QzMSwgRDMxX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRDMwLCBEMzBfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9EMjksIEQyOV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0QyOCwgRDI4X01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRDI3LCBEMjdfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9EMjYsIEQyNl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0QyNSwgRDI1X01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRDI0LCBEMjRfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9EMjMsIEQyM19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0QyMiwgRDIyX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRDIxLCBEMjFfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9EMjAsIEQyMF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0QxOSwgRDE5X01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRDE4LCBEMThfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9EMTcsIEQxN19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0QxNiwgRDE2X01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fSU9JUzE2LCBJT0lTMTZfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9XQUlULCBXQUlUX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fQlMsIEJTX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fQTI1LCBBMjVfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9BMjQsIEEyNF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0EyMywgQTIzX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fQTIyLCBBMjJfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9DUzZCX0NFMUIsIENTNkJfQ0UxQl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0NTNkFfQ0UyQiwgQ1M2QV9DRTJCX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fQ1M1Ql9DRTFBLCBDUzVCX0NFMUFfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9DUzVBX0NFMkEsIENTNUFfQ0UyQV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1dFM19JQ0lPV1IsIFdFM19JQ0lPV1JfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9XRTJfSUNJT1JELCBXRTJfSUNJT1JEX01BUkspLAorCisJLyogQVRBUEkgKi8KKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0lERUQxNSwgSURFRDE1X01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fSURFRDE0LCBJREVEMTRfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9JREVEMTMsIElERUQxM19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0lERUQxMiwgSURFRDEyX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fSURFRDExLCBJREVEMTFfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9JREVEMTAsIElERUQxMF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0lERUQ5LCBJREVEOV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0lERUQ4LCBJREVEOF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0lERUQ3LCBJREVEN19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0lERUQ2LCBJREVENl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0lERUQ1LCBJREVENV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0lERUQ0LCBJREVENF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0lERUQzLCBJREVEM19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0lERUQyLCBJREVEMl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0lERUQxLCBJREVEMV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0lERUQwLCBJREVEMF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0RJUkVDVElPTiwgRElSRUNUSU9OX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRVhCVUZfRU5CLCBFWEJVRl9FTkJfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9JREVSU1QsIElERVJTVF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0lPREFDSywgSU9EQUNLX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fSU9EUkVRLCBJT0RSRVFfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9JREVJT1JEWSwgSURFSU9SRFlfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9JREVJTlQsIElERUlOVF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0lERUlPV1IsIElERUlPV1JfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9JREVJT1JELCBJREVJT1JEX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fSURFQ1MxLCBJREVDUzFfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9JREVDUzAsIElERUNTMF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0lERUEyLCBJREVBMl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0lERUExLCBJREVBMV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0lERUEwLCBJREVBMF9NQVJLKSwKKyB9OworCitzdGF0aWMgc3RydWN0IHBpbm11eF9jZmdfcmVnIHBpbm11eF9jb25maWdfcmVnc1tdID0geworCXsgUElOTVVYX0NGR19SRUcoIlBBQ1IiLCAweGE0MDUwMTAwLCAxNiwgMikgeworCQlQVEE3X0ZOLCBQVEE3X09VVCwgMCwgUFRBN19JTiwKKwkJUFRBNl9GTiwgUFRBNl9PVVQsIDAsIFBUQTZfSU4sCisJCVBUQTVfRk4sIFBUQTVfT1VULCAwLCBQVEE1X0lOLAorCQlQVEE0X0ZOLCBQVEE0X09VVCwgUFRBNF9JTl9QVSwgUFRBNF9JTiwKKwkJUFRBM19GTiwgUFRBM19PVVQsIFBUQTNfSU5fUFUsIFBUQTNfSU4sCisJCVBUQTJfRk4sIFBUQTJfT1VULCBQVEEyX0lOX1BVLCBQVEEyX0lOLAorCQlQVEExX0ZOLCBQVEExX09VVCwgUFRBMV9JTl9QVSwgUFRBMV9JTiwKKwkJUFRBMF9GTiwgUFRBMF9PVVQsIFBUQTBfSU5fUFUsIFBUQTBfSU4gfQorCX0sCisJeyBQSU5NVVhfQ0ZHX1JFRygiUEJDUiIsIDB4YTQwNTAxMDIsIDE2LCAyKSB7CisJCVBUQjdfRk4sIFBUQjdfT1VULCAwLCBQVEI3X0lOLAorCQlQVEI2X0ZOLCBQVEI2X09VVCwgMCwgUFRCNl9JTiwKKwkJUFRCNV9GTiwgUFRCNV9PVVQsIDAsIFBUQjVfSU4sCisJCVBUQjRfRk4sIFBUQjRfT1VULCAwLCBQVEI0X0lOLAorCQlQVEIzX0ZOLCBQVEIzX09VVCwgMCwgUFRCM19JTiwKKwkJUFRCMl9GTiwgUFRCMl9PVVQsIFBUQjJfSU5fUFUsIFBUQjJfSU4sCisJCVBUQjFfRk4sIFBUQjFfT1VULCBQVEIxX0lOX1BVLCBQVEIxX0lOLAorCQlQVEIwX0ZOLCBQVEIwX09VVCwgMCwgUFRCMF9JTiB9CisJfSwKKwl7IFBJTk1VWF9DRkdfUkVHKCJQQ0NSIiwgMHhhNDA1MDEwNCwgMTYsIDIpIHsKKwkJUFRDN19GTiwgUFRDN19PVVQsIDAsIFBUQzdfSU4sCisJCVBUQzZfRk4sIFBUQzZfT1VULCAwLCBQVEM2X0lOLAorCQlQVEM1X0ZOLCBQVEM1X09VVCwgMCwgUFRDNV9JTiwKKwkJUFRDNF9GTiwgUFRDNF9PVVQsIDAsIFBUQzRfSU4sCisJCVBUQzNfRk4sIFBUQzNfT1VULCAwLCBQVEMzX0lOLAorCQlQVEMyX0ZOLCBQVEMyX09VVCwgMCwgUFRDMl9JTiwKKwkJUFRDMV9GTiwgUFRDMV9PVVQsIDAsIFBUQzFfSU4sCisJCVBUQzBfRk4sIFBUQzBfT1VULCAwLCBQVEMwX0lOIH0KKwl9LAorCXsgUElOTVVYX0NGR19SRUcoIlBEQ1IiLCAweGE0MDUwMTA2LCAxNiwgMikgeworCQlQVEQ3X0ZOLCBQVEQ3X09VVCwgMCwgUFREN19JTiwKKwkJUFRENl9GTiwgUFRENl9PVVQsIDAsIFBURDZfSU4sCisJCVBURDVfRk4sIFBURDVfT1VULCAwLCBQVEQ1X0lOLAorCQlQVEQ0X0ZOLCBQVEQ0X09VVCwgMCwgUFRENF9JTiwKKwkJUFREM19GTiwgUFREM19PVVQsIDAsIFBURDNfSU4sCisJCVBURDJfRk4sIFBURDJfT1VULCAwLCBQVEQyX0lOLAorCQlQVEQxX0ZOLCBQVEQxX09VVCwgMCwgUFREMV9JTiwKKwkJUFREMF9GTiwgUFREMF9PVVQsIDAsIFBURDBfSU4gfQorCX0sCisJeyBQSU5NVVhfQ0ZHX1JFRygiUEVDUiIsIDB4YTQwNTAxMDgsIDE2LCAyKSB7CisJCTAsIDAsIDAsIDAsCisJCTAsIDAsIDAsIDAsCisJCVBURTVfRk4sIFBURTVfT1VULCAwLCBQVEU1X0lOLAorCQlQVEU0X0ZOLCBQVEU0X09VVCwgMCwgUFRFNF9JTiwKKwkJUFRFM19GTiwgUFRFM19PVVQsIDAsIFBURTNfSU4sCisJCVBURTJfRk4sIFBURTJfT1VULCAwLCBQVEUyX0lOLAorCQlQVEUxX0ZOLCBQVEUxX09VVCwgMCwgUFRFMV9JTiwKKwkJUFRFMF9GTiwgUFRFMF9PVVQsIDAsIFBURTBfSU4gfQorCX0sCisJeyBQSU5NVVhfQ0ZHX1JFRygiUEZDUiIsIDB4YTQwNTAxMGEsIDE2LCAyKSB7CisJCVBURjdfRk4sIFBURjdfT1VULCAwLCBQVEY3X0lOLAorCQlQVEY2X0ZOLCBQVEY2X09VVCwgMCwgUFRGNl9JTiwKKwkJUFRGNV9GTiwgUFRGNV9PVVQsIDAsIFBURjVfSU4sCisJCVBURjRfRk4sIFBURjRfT1VULCAwLCBQVEY0X0lOLAorCQlQVEYzX0ZOLCBQVEYzX09VVCwgMCwgUFRGM19JTiwKKwkJUFRGMl9GTiwgUFRGMl9PVVQsIDAsIFBURjJfSU4sCisJCVBURjFfRk4sIFBURjFfT1VULCAwLCBQVEYxX0lOLAorCQlQVEYwX0ZOLCBQVEYwX09VVCwgMCwgUFRGMF9JTiB9CisJfSwKKwl7IFBJTk1VWF9DRkdfUkVHKCJQR0NSIiwgMHhhNDA1MDEwYywgMTYsIDIpIHsKKwkJMCwgMCwgMCwgMCwKKwkJMCwgMCwgMCwgMCwKKwkJUFRHNV9GTiwgUFRHNV9PVVQsIDAsIDAsCisJCVBURzRfRk4sIFBURzRfT1VULCAwLCAwLAorCQlQVEczX0ZOLCBQVEczX09VVCwgMCwgMCwKKwkJUFRHMl9GTiwgUFRHMl9PVVQsIDAsIDAsCisJCVBURzFfRk4sIFBURzFfT1VULCAwLCAwLAorCQlQVEcwX0ZOLCBQVEcwX09VVCwgMCwgMCB9CisJfSwKKwl7IFBJTk1VWF9DRkdfUkVHKCJQSENSIiwgMHhhNDA1MDEwZSwgMTYsIDIpIHsKKwkJUFRIN19GTiwgUFRIN19PVVQsIDAsIFBUSDdfSU4sCisJCVBUSDZfRk4sIFBUSDZfT1VULCAwLCBQVEg2X0lOLAorCQlQVEg1X0ZOLCBQVEg1X09VVCwgMCwgUFRINV9JTiwKKwkJUFRINF9GTiwgUFRINF9PVVQsIDAsIFBUSDRfSU4sCisJCVBUSDNfRk4sIFBUSDNfT1VULCAwLCBQVEgzX0lOLAorCQlQVEgyX0ZOLCBQVEgyX09VVCwgMCwgUFRIMl9JTiwKKwkJUFRIMV9GTiwgUFRIMV9PVVQsIDAsIFBUSDFfSU4sCisJCVBUSDBfRk4sIFBUSDBfT1VULCAwLCBQVEgwX0lOIH0KKwl9LAorCXsgUElOTVVYX0NGR19SRUcoIlBKQ1IiLCAweGE0MDUwMTEwLCAxNiwgMikgeworCQlQVEo3X0ZOLCBQVEo3X09VVCwgMCwgMCwKKwkJMCwgMCwgMCwgMCwKKwkJUFRKNV9GTiwgUFRKNV9PVVQsIDAsIDAsCisJCTAsIDAsIDAsIDAsCisJCVBUSjNfRk4sIFBUSjNfT1VULCAwLCBQVEozX0lOLAorCQlQVEoyX0ZOLCBQVEoyX09VVCwgMCwgUFRKMl9JTiwKKwkJUFRKMV9GTiwgUFRKMV9PVVQsIDAsIFBUSjFfSU4sCisJCVBUSjBfRk4sIFBUSjBfT1VULCAwLCBQVEowX0lOIH0KKwl9LAorCXsgUElOTVVYX0NGR19SRUcoIlBLQ1IiLCAweGE0MDUwMTEyLCAxNiwgMikgeworCQlQVEs3X0ZOLCBQVEs3X09VVCwgMCwgUFRLN19JTiwKKwkJUFRLNl9GTiwgUFRLNl9PVVQsIDAsIFBUSzZfSU4sCisJCVBUSzVfRk4sIFBUSzVfT1VULCAwLCBQVEs1X0lOLAorCQlQVEs0X0ZOLCBQVEs0X09VVCwgMCwgUFRLNF9JTiwKKwkJUFRLM19GTiwgUFRLM19PVVQsIDAsIFBUSzNfSU4sCisJCVBUSzJfRk4sIFBUSzJfT1VULCAwLCBQVEsyX0lOLAorCQlQVEsxX0ZOLCBQVEsxX09VVCwgMCwgUFRLMV9JTiwKKwkJUFRLMF9GTiwgUFRLMF9PVVQsIDAsIFBUSzBfSU4gfQorCX0sCisJeyBQSU5NVVhfQ0ZHX1JFRygiUExDUiIsIDB4YTQwNTAxMTQsIDE2LCAyKSB7CisJCVBUTDdfRk4sIFBUTDdfT1VULCAwLCBQVEw3X0lOLAorCQlQVEw2X0ZOLCBQVEw2X09VVCwgMCwgUFRMNl9JTiwKKwkJUFRMNV9GTiwgUFRMNV9PVVQsIDAsIFBUTDVfSU4sCisJCVBUTDRfRk4sIFBUTDRfT1VULCAwLCBQVEw0X0lOLAorCQlQVEwzX0ZOLCBQVEwzX09VVCwgMCwgUFRMM19JTiwKKwkJUFRMMl9GTiwgUFRMMl9PVVQsIDAsIFBUTDJfSU4sCisJCVBUTDFfRk4sIFBUTDFfT1VULCAwLCBQVEwxX0lOLAorCQlQVEwwX0ZOLCBQVEwwX09VVCwgMCwgUFRMMF9JTiB9CisJfSwKKwl7IFBJTk1VWF9DRkdfUkVHKCJQTUNSIiwgMHhhNDA1MDExNiwgMTYsIDIpIHsKKwkJUFRNN19GTiwgUFRNN19PVVQsIDAsIFBUTTdfSU4sCisJCVBUTTZfRk4sIFBUTTZfT1VULCAwLCBQVE02X0lOLAorCQlQVE01X0ZOLCBQVE01X09VVCwgMCwgUFRNNV9JTiwKKwkJUFRNNF9GTiwgUFRNNF9PVVQsIDAsIFBUTTRfSU4sCisJCVBUTTNfRk4sIFBUTTNfT1VULCAwLCBQVE0zX0lOLAorCQlQVE0yX0ZOLCBQVE0yX09VVCwgMCwgUFRNMl9JTiwKKwkJUFRNMV9GTiwgUFRNMV9PVVQsIDAsIFBUTTFfSU4sCisJCVBUTTBfRk4sIFBUTTBfT1VULCAwLCBQVE0wX0lOIH0KKwl9LAorCXsgUElOTVVYX0NGR19SRUcoIlBOQ1IiLCAweGE0MDUwMTE4LCAxNiwgMikgeworCQlQVE43X0ZOLCBQVE43X09VVCwgMCwgUFRON19JTiwKKwkJUFRONl9GTiwgUFRONl9PVVQsIDAsIFBUTjZfSU4sCisJCVBUTjVfRk4sIFBUTjVfT1VULCAwLCBQVE41X0lOLAorCQlQVE40X0ZOLCBQVE40X09VVCwgMCwgUFRONF9JTiwKKwkJUFROM19GTiwgUFROM19PVVQsIDAsIFBUTjNfSU4sCisJCVBUTjJfRk4sIFBUTjJfT1VULCAwLCBQVE4yX0lOLAorCQlQVE4xX0ZOLCBQVE4xX09VVCwgMCwgUFROMV9JTiwKKwkJUFROMF9GTiwgUFROMF9PVVQsIDAsIFBUTjBfSU4gfQorCX0sCisJeyBQSU5NVVhfQ0ZHX1JFRygiUFFDUiIsIDB4YTQwNTAxMWEsIDE2LCAyKSB7CisJCTAsIDAsIDAsIDAsCisJCTAsIDAsIDAsIDAsCisJCTAsIDAsIDAsIDAsCisJCTAsIDAsIDAsIDAsCisJCVBUUTNfRk4sIDAsIDAsIFBUUTNfSU4sCisJCVBUUTJfRk4sIDAsIDAsIFBUUTJfSU4sCisJCVBUUTFfRk4sIDAsIDAsIFBUUTFfSU4sCisJCVBUUTBfRk4sIDAsIDAsIFBUUTBfSU4gfQorCX0sCisJeyBQSU5NVVhfQ0ZHX1JFRygiUFJDUiIsIDB4YTQwNTAxMWMsIDE2LCAyKSB7CisJCVBUUjdfRk4sIFBUUjdfT1VULCAwLCBQVFI3X0lOLAorCQlQVFI2X0ZOLCBQVFI2X09VVCwgMCwgUFRSNl9JTiwKKwkJUFRSNV9GTiwgUFRSNV9PVVQsIDAsIFBUUjVfSU4sCisJCVBUUjRfRk4sIFBUUjRfT1VULCAwLCBQVFI0X0lOLAorCQlQVFIzX0ZOLCAwLCAwLCBQVFIzX0lOLAorCQlQVFIyX0ZOLCAwLCBQVFIyX0lOX1BVLCBQVFIyX0lOLAorCQlQVFIxX0ZOLCBQVFIxX09VVCwgMCwgUFRSMV9JTiwKKwkJUFRSMF9GTiwgUFRSMF9PVVQsIDAsIFBUUjBfSU4gfQorCX0sCisJeyBQSU5NVVhfQ0ZHX1JFRygiUFNDUiIsIDB4YTQwNTAxMWUsIDE2LCAyKSB7CisJCVBUUzdfRk4sIFBUUzdfT1VULCAwLCBQVFM3X0lOLAorCQlQVFM2X0ZOLCBQVFM2X09VVCwgMCwgUFRTNl9JTiwKKwkJUFRTNV9GTiwgUFRTNV9PVVQsIDAsIFBUUzVfSU4sCisJCVBUUzRfRk4sIFBUUzRfT1VULCAwLCBQVFM0X0lOLAorCQlQVFMzX0ZOLCBQVFMzX09VVCwgMCwgUFRTM19JTiwKKwkJUFRTMl9GTiwgUFRTMl9PVVQsIDAsIFBUUzJfSU4sCisJCVBUUzFfRk4sIFBUUzFfT1VULCAwLCBQVFMxX0lOLAorCQlQVFMwX0ZOLCBQVFMwX09VVCwgMCwgUFRTMF9JTiB9CisJfSwKKwl7IFBJTk1VWF9DRkdfUkVHKCJQVENSIiwgMHhhNDA1MDE0MCwgMTYsIDIpIHsKKwkJMCwgMCwgMCwgMCwKKwkJMCwgMCwgMCwgMCwKKwkJUFRUNV9GTiwgUFRUNV9PVVQsIDAsIFBUVDVfSU4sCisJCVBUVDRfRk4sIFBUVDRfT1VULCAwLCBQVFQ0X0lOLAorCQlQVFQzX0ZOLCBQVFQzX09VVCwgMCwgUFRUM19JTiwKKwkJUFRUMl9GTiwgUFRUMl9PVVQsIDAsIFBUVDJfSU4sCisJCVBUVDFfRk4sIFBUVDFfT1VULCAwLCBQVFQxX0lOLAorCQlQVFQwX0ZOLCBQVFQwX09VVCwgMCwgUFRUMF9JTiB9CisJfSwKKwl7IFBJTk1VWF9DRkdfUkVHKCJQVUNSIiwgMHhhNDA1MDE0MiwgMTYsIDIpIHsKKwkJMCwgMCwgMCwgMCwKKwkJMCwgMCwgMCwgMCwKKwkJUFRVNV9GTiwgUFRVNV9PVVQsIDAsIFBUVTVfSU4sCisJCVBUVTRfRk4sIFBUVTRfT1VULCAwLCBQVFU0X0lOLAorCQlQVFUzX0ZOLCBQVFUzX09VVCwgMCwgUFRVM19JTiwKKwkJUFRVMl9GTiwgUFRVMl9PVVQsIDAsIFBUVTJfSU4sCisJCVBUVTFfRk4sIFBUVTFfT1VULCAwLCBQVFUxX0lOLAorCQlQVFUwX0ZOLCBQVFUwX09VVCwgMCwgUFRVMF9JTiB9CisJfSwKKwl7IFBJTk1VWF9DRkdfUkVHKCJQVkNSIiwgMHhhNDA1MDE0NCwgMTYsIDIpIHsKKwkJUFRWN19GTiwgUFRWN19PVVQsIDAsIFBUVjdfSU4sCisJCVBUVjZfRk4sIFBUVjZfT1VULCAwLCBQVFY2X0lOLAorCQlQVFY1X0ZOLCBQVFY1X09VVCwgMCwgUFRWNV9JTiwKKwkJUFRWNF9GTiwgUFRWNF9PVVQsIDAsIFBUVjRfSU4sCisJCVBUVjNfRk4sIFBUVjNfT1VULCAwLCBQVFYzX0lOLAorCQlQVFYyX0ZOLCBQVFYyX09VVCwgMCwgUFRWMl9JTiwKKwkJUFRWMV9GTiwgUFRWMV9PVVQsIDAsIFBUVjFfSU4sCisJCVBUVjBfRk4sIFBUVjBfT1VULCAwLCBQVFYwX0lOIH0KKwl9LAorCXsgUElOTVVYX0NGR19SRUcoIlBXQ1IiLCAweGE0MDUwMTQ2LCAxNiwgMikgeworCQlQVFc3X0ZOLCBQVFc3X09VVCwgMCwgUFRXN19JTiwKKwkJUFRXNl9GTiwgUFRXNl9PVVQsIDAsIFBUVzZfSU4sCisJCVBUVzVfRk4sIFBUVzVfT1VULCAwLCBQVFc1X0lOLAorCQlQVFc0X0ZOLCBQVFc0X09VVCwgMCwgUFRXNF9JTiwKKwkJUFRXM19GTiwgUFRXM19PVVQsIDAsIFBUVzNfSU4sCisJCVBUVzJfRk4sIFBUVzJfT1VULCAwLCBQVFcyX0lOLAorCQlQVFcxX0ZOLCBQVFcxX09VVCwgMCwgUFRXMV9JTiwKKwkJUFRXMF9GTiwgUFRXMF9PVVQsIDAsIFBUVzBfSU4gfQorCX0sCisJeyBQSU5NVVhfQ0ZHX1JFRygiUFhDUiIsIDB4YTQwNTAxNDgsIDE2LCAyKSB7CisJCVBUWDdfRk4sIFBUWDdfT1VULCAwLCBQVFg3X0lOLAorCQlQVFg2X0ZOLCBQVFg2X09VVCwgMCwgUFRYNl9JTiwKKwkJUFRYNV9GTiwgUFRYNV9PVVQsIDAsIFBUWDVfSU4sCisJCVBUWDRfRk4sIFBUWDRfT1VULCAwLCBQVFg0X0lOLAorCQlQVFgzX0ZOLCBQVFgzX09VVCwgMCwgUFRYM19JTiwKKwkJUFRYMl9GTiwgUFRYMl9PVVQsIDAsIFBUWDJfSU4sCisJCVBUWDFfRk4sIFBUWDFfT1VULCAwLCBQVFgxX0lOLAorCQlQVFgwX0ZOLCBQVFgwX09VVCwgMCwgUFRYMF9JTiB9CisJfSwKKwl7IFBJTk1VWF9DRkdfUkVHKCJQWUNSIiwgMHhhNDA1MDE0YSwgMTYsIDIpIHsKKwkJUFRZN19GTiwgUFRZN19PVVQsIDAsIFBUWTdfSU4sCisJCVBUWTZfRk4sIFBUWTZfT1VULCAwLCBQVFk2X0lOLAorCQlQVFk1X0ZOLCBQVFk1X09VVCwgMCwgUFRZNV9JTiwKKwkJUFRZNF9GTiwgUFRZNF9PVVQsIDAsIFBUWTRfSU4sCisJCVBUWTNfRk4sIFBUWTNfT1VULCAwLCBQVFkzX0lOLAorCQlQVFkyX0ZOLCBQVFkyX09VVCwgMCwgUFRZMl9JTiwKKwkJUFRZMV9GTiwgUFRZMV9PVVQsIDAsIFBUWTFfSU4sCisJCVBUWTBfRk4sIFBUWTBfT1VULCAwLCBQVFkwX0lOIH0KKwl9LAorCXsgUElOTVVYX0NGR19SRUcoIlBaQ1IiLCAweGE0MDUwMTRjLCAxNiwgMikgeworCQlQVFo3X0ZOLCBQVFo3X09VVCwgMCwgUFRaN19JTiwKKwkJUFRaNl9GTiwgUFRaNl9PVVQsIDAsIFBUWjZfSU4sCisJCVBUWjVfRk4sIFBUWjVfT1VULCAwLCBQVFo1X0lOLAorCQlQVFo0X0ZOLCBQVFo0X09VVCwgMCwgUFRaNF9JTiwKKwkJUFRaM19GTiwgUFRaM19PVVQsIDAsIFBUWjNfSU4sCisJCVBUWjJfRk4sIFBUWjJfT1VULCAwLCBQVFoyX0lOLAorCQlQVFoxX0ZOLCBQVFoxX09VVCwgMCwgUFRaMV9JTiwKKwkJUFRaMF9GTiwgUFRaMF9PVVQsIDAsIFBUWjBfSU4gfQorCX0sCisJeyBQSU5NVVhfQ0ZHX1JFRygiUFNFTEEiLCAweGE0MDUwMTRlLCAxNiwgMikgeworCQlQU0ExNV9QU0ExNF9GTjEsIFBTQTE1X1BTQTE0X0ZOMiwgMCwgMCwKKwkJUFNBMTNfUFNBMTJfRk4xLCBQU0ExM19QU0ExMl9GTjIsIDAsIDAsCisJCVBTQTExX1BTQTEwX0ZOMSwgUFNBMTFfUFNBMTBfRk4yLCAwLCAwLAorCQkwLCAwLCAwLCAwLAorCQkwLCAwLCAwLCAwLAorCQlQU0E1X1BTQTRfRk4xLCBQU0E1X1BTQTRfRk4yLCBQU0E1X1BTQTRfRk4zLCAwLAorCQlQU0EzX1BTQTJfRk4xLCBQU0EzX1BTQTJfRk4yLCAwLCAwLAorCQkwLCAwLCAwLCAwIH0KKwl9LAorCXsgUElOTVVYX0NGR19SRUcoIlBTRUxCIiwgMHhhNDA1MDE1MCwgMTYsIDIpIHsKKwkJUFNCMTVfUFNCMTRfRk4xLCBQU0IxNV9QU0IxNF9GTjIsIDAsIDAsCisJCVBTQjEzX1BTQjEyX0xDRENfUkdCLCBQU0IxM19QU0IxMl9MQ0RDX1NZUywgMCwgMCwKKwkJMCwgMCwgMCwgMCwKKwkJUFNCOV9QU0I4X0ZOMSwgUFNCOV9QU0I4X0ZOMiwgUFNCOV9QU0I4X0ZOMywgMCwKKwkJUFNCN19QU0I2X0ZOMSwgUFNCN19QU0I2X0ZOMiwgMCwgMCwKKwkJUFNCNV9QU0I0X0ZOMSwgUFNCNV9QU0I0X0ZOMiwgMCwgMCwKKwkJUFNCM19QU0IyX0ZOMSwgUFNCM19QU0IyX0ZOMiwgMCwgMCwKKwkJMCwgMCwgMCwgMCB9CisJfSwKKwl7IFBJTk1VWF9DRkdfUkVHKCJQU0VMQyIsIDB4YTQwNTAxNTIsIDE2LCAyKSB7CisJCVBTQzE1X1BTQzE0X0ZOMSwgUFNDMTVfUFNDMTRfRk4yLCAwLCAwLAorCQlQU0MxM19QU0MxMl9GTjEsIFBTQzEzX1BTQzEyX0ZOMiwgMCwgMCwKKwkJUFNDMTFfUFNDMTBfRk4xLCBQU0MxMV9QU0MxMF9GTjIsIFBTQzExX1BTQzEwX0ZOMywgMCwKKwkJUFNDOV9QU0M4X0ZOMSwgUFNDOV9QU0M4X0ZOMiwgMCwgMCwKKwkJUFNDN19QU0M2X0ZOMSwgUFNDN19QU0M2X0ZOMiwgUFNDN19QU0M2X0ZOMywgMCwKKwkJMCwgMCwgMCwgMCwKKwkJMCwgMCwgMCwgMCwKKwkJMCwgMCwgMCwgMCB9CisJfSwKKwl7IFBJTk1VWF9DRkdfUkVHKCJQU0VMRCIsIDB4YTQwNTAxNTQsIDE2LCAyKSB7CisJCVBTRDE1X1BTRDE0X0ZOMSwgUFNEMTVfUFNEMTRfRk4yLCAwLCAwLAorCQlQU0QxM19QU0QxMl9GTjEsIFBTRDEzX1BTRDEyX0ZOMiwgMCwgMCwKKwkJUFNEMTFfUFNEMTBfRk4xLCBQU0QxMV9QU0QxMF9GTjIsIFBTRDExX1BTRDEwX0ZOMywgMCwKKwkJUFNEOV9QU0Q4X0ZOMSwgUFNEOV9QU0Q4X0ZOMiwgMCwgMCwKKwkJUFNEN19QU0Q2X0ZOMSwgUFNEN19QU0Q2X0ZOMiwgMCwgMCwKKwkJUFNENV9QU0Q0X0ZOMSwgUFNENV9QU0Q0X0ZOMiwgMCwgMCwKKwkJUFNEM19QU0QyX0ZOMSwgUFNEM19QU0QyX0ZOMiwgMCwgMCwKKwkJUFNEMV9QU0QwX0ZOMSwgUFNEMV9QU0QwX0ZOMiwgMCwgMCB9CisJfSwKKwl7fQorfTsKKworc3RhdGljIHN0cnVjdCBwaW5tdXhfZGF0YV9yZWcgcGlubXV4X2RhdGFfcmVnc1tdID0geworCXsgUElOTVVYX0RBVEFfUkVHKCJQQURSIiwgMHhhNDA1MDEyMCwgOCkgeworCQlQVEE3X0RBVEEsIFBUQTZfREFUQSwgUFRBNV9EQVRBLCBQVEE0X0RBVEEsCisJCVBUQTNfREFUQSwgUFRBMl9EQVRBLCBQVEExX0RBVEEsIFBUQTBfREFUQSB9CisJfSwKKwl7IFBJTk1VWF9EQVRBX1JFRygiUEJEUiIsIDB4YTQwNTAxMjIsIDgpIHsKKwkJUFRCN19EQVRBLCBQVEI2X0RBVEEsIFBUQjVfREFUQSwgUFRCNF9EQVRBLAorCQlQVEIzX0RBVEEsIFBUQjJfREFUQSwgUFRCMV9EQVRBLCBQVEIwX0RBVEEgfQorCX0sCisJeyBQSU5NVVhfREFUQV9SRUcoIlBDRFIiLCAweGE0MDUwMTI0LCA4KSB7CisJCVBUQzdfREFUQSwgUFRDNl9EQVRBLCBQVEM1X0RBVEEsIFBUQzRfREFUQSwKKwkJUFRDM19EQVRBLCBQVEMyX0RBVEEsIFBUQzFfREFUQSwgUFRDMF9EQVRBIH0KKwl9LAorCXsgUElOTVVYX0RBVEFfUkVHKCJQRERSIiwgMHhhNDA1MDEyNiwgOCkgeworCQlQVEQ3X0RBVEEsIFBURDZfREFUQSwgUFRENV9EQVRBLCBQVEQ0X0RBVEEsCisJCVBURDNfREFUQSwgUFREMl9EQVRBLCBQVEQxX0RBVEEsIFBURDBfREFUQSB9CisJfSwKKwl7IFBJTk1VWF9EQVRBX1JFRygiUEVEUiIsIDB4YTQwNTAxMjgsIDgpIHsKKwkJMCwgMCwgUFRFNV9EQVRBLCBQVEU0X0RBVEEsCisJCVBURTNfREFUQSwgUFRFMl9EQVRBLCBQVEUxX0RBVEEsIFBURTBfREFUQSB9CisJfSwKKwl7IFBJTk1VWF9EQVRBX1JFRygiUEZEUiIsIDB4YTQwNTAxMmEsIDgpIHsKKwkJUFRGN19EQVRBLCBQVEY2X0RBVEEsIFBURjVfREFUQSwgUFRGNF9EQVRBLAorCQlQVEYzX0RBVEEsIFBURjJfREFUQSwgUFRGMV9EQVRBLCBQVEYwX0RBVEEgfQorCX0sCisJeyBQSU5NVVhfREFUQV9SRUcoIlBHRFIiLCAweGE0MDUwMTJjLCA4KSB7CisJCTAsIDAsIFBURzVfREFUQSwgUFRHNF9EQVRBLAorCQlQVEczX0RBVEEsIFBURzJfREFUQSwgUFRHMV9EQVRBLCBQVEcwX0RBVEEgfQorCX0sCisJeyBQSU5NVVhfREFUQV9SRUcoIlBIRFIiLCAweGE0MDUwMTJlLCA4KSB7CisJCVBUSDdfREFUQSwgUFRINl9EQVRBLCBQVEg1X0RBVEEsIFBUSDRfREFUQSwKKwkJUFRIM19EQVRBLCBQVEgyX0RBVEEsIFBUSDFfREFUQSwgUFRIMF9EQVRBIH0KKwl9LAorCXsgUElOTVVYX0RBVEFfUkVHKCJQSkRSIiwgMHhhNDA1MDEzMCwgOCkgeworCQlQVEo3X0RBVEEsIDAsIFBUSjVfREFUQSwgMCwKKwkJUFRKM19EQVRBLCBQVEoyX0RBVEEsIFBUSjFfREFUQSwgUFRKMF9EQVRBIH0KKwl9LAorCXsgUElOTVVYX0RBVEFfUkVHKCJQS0RSIiwgMHhhNDA1MDEzMiwgOCkgeworCQlQVEs3X0RBVEEsIFBUSzZfREFUQSwgUFRLNV9EQVRBLCBQVEs0X0RBVEEsCisJCVBUSzNfREFUQSwgUFRLMl9EQVRBLCBQVEsxX0RBVEEsIFBUSzBfREFUQSB9CisJfSwKKwl7IFBJTk1VWF9EQVRBX1JFRygiUExEUiIsIDB4YTQwNTAxMzQsIDgpIHsKKwkJUFRMN19EQVRBLCBQVEw2X0RBVEEsIFBUTDVfREFUQSwgUFRMNF9EQVRBLAorCQlQVEwzX0RBVEEsIFBUTDJfREFUQSwgUFRMMV9EQVRBLCBQVEwwX0RBVEEgfQorCX0sCisJeyBQSU5NVVhfREFUQV9SRUcoIlBNRFIiLCAweGE0MDUwMTM2LCA4KSB7CisJCVBUTTdfREFUQSwgUFRNNl9EQVRBLCBQVE01X0RBVEEsIFBUTTRfREFUQSwKKwkJUFRNM19EQVRBLCBQVE0yX0RBVEEsIFBUTTFfREFUQSwgUFRNMF9EQVRBIH0KKwl9LAorCXsgUElOTVVYX0RBVEFfUkVHKCJQTkRSIiwgMHhhNDA1MDEzOCwgOCkgeworCQlQVE43X0RBVEEsIFBUTjZfREFUQSwgUFRONV9EQVRBLCBQVE40X0RBVEEsCisJCVBUTjNfREFUQSwgUFROMl9EQVRBLCBQVE4xX0RBVEEsIFBUTjBfREFUQSB9CisJfSwKKwl7IFBJTk1VWF9EQVRBX1JFRygiUFFEUiIsIDB4YTQwNTAxM2EsIDgpIHsKKwkJMCwgMCwgMCwgMCwKKwkJUFRRM19EQVRBLCBQVFEyX0RBVEEsIFBUUTFfREFUQSwgUFRRMF9EQVRBIH0KKwl9LAorCXsgUElOTVVYX0RBVEFfUkVHKCJQUkRSIiwgMHhhNDA1MDEzYywgOCkgeworCQlQVFI3X0RBVEEsIFBUUjZfREFUQSwgUFRSNV9EQVRBLCBQVFI0X0RBVEEsCisJCVBUUjNfREFUQSwgUFRSMl9EQVRBLCBQVFIxX0RBVEEsIFBUUjBfREFUQSB9CisJfSwKKwl7IFBJTk1VWF9EQVRBX1JFRygiUFNEUiIsIDB4YTQwNTAxM2UsIDgpIHsKKwkJUFRTN19EQVRBLCBQVFM2X0RBVEEsIFBUUzVfREFUQSwgUFRTNF9EQVRBLAorCQlQVFMzX0RBVEEsIFBUUzJfREFUQSwgUFRTMV9EQVRBLCBQVFMwX0RBVEEgfQorCX0sCisJeyBQSU5NVVhfREFUQV9SRUcoIlBURFIiLCAweGE0MDUwMTYwLCA4KSB7CisJCTAsIDAsIFBUVDVfREFUQSwgUFRUNF9EQVRBLAorCQlQVFQzX0RBVEEsIFBUVDJfREFUQSwgUFRUMV9EQVRBLCBQVFQwX0RBVEEgfQorCX0sCisJeyBQSU5NVVhfREFUQV9SRUcoIlBVRFIiLCAweGE0MDUwMTYyLCA4KSB7CisJCTAsIDAsIFBUVTVfREFUQSwgUFRVNF9EQVRBLAorCQlQVFUzX0RBVEEsIFBUVTJfREFUQSwgUFRVMV9EQVRBLCBQVFUwX0RBVEEgfQorCX0sCisJeyBQSU5NVVhfREFUQV9SRUcoIlBWRFIiLCAweGE0MDUwMTY0LCA4KSB7CisJCVBUVjdfREFUQSwgUFRWNl9EQVRBLCBQVFY1X0RBVEEsIFBUVjRfREFUQSwKKwkJUFRWM19EQVRBLCBQVFYyX0RBVEEsIFBUVjFfREFUQSwgUFRWMF9EQVRBIH0KKwl9LAorCXsgUElOTVVYX0RBVEFfUkVHKCJQV0RSIiwgMHhhNDA1MDE2NiwgOCkgeworCQlQVFc3X0RBVEEsIFBUVzZfREFUQSwgUFRXNV9EQVRBLCBQVFc0X0RBVEEsCisJCVBUVzNfREFUQSwgUFRXMl9EQVRBLCBQVFcxX0RBVEEsIFBUVzBfREFUQSB9CisJfSwKKwl7IFBJTk1VWF9EQVRBX1JFRygiUFhEUiIsIDB4YTQwNTAxNjgsIDgpIHsKKwkJUFRYN19EQVRBLCBQVFg2X0RBVEEsIFBUWDVfREFUQSwgUFRYNF9EQVRBLAorCQlQVFgzX0RBVEEsIFBUWDJfREFUQSwgUFRYMV9EQVRBLCBQVFgwX0RBVEEgfQorCX0sCisJeyBQSU5NVVhfREFUQV9SRUcoIlBZRFIiLCAweGE0MDUwMTZhLCA4KSB7CisJCVBUWTdfREFUQSwgUFRZNl9EQVRBLCBQVFk1X0RBVEEsIFBUWTRfREFUQSwKKwkJUFRZM19EQVRBLCBQVFkyX0RBVEEsIFBUWTFfREFUQSwgUFRZMF9EQVRBIH0KKwl9LAorCXsgUElOTVVYX0RBVEFfUkVHKCJQWkRSIiwgMHhhNDA1MDE2YywgOCkgeworCQlQVFo3X0RBVEEsIFBUWjZfREFUQSwgUFRaNV9EQVRBLCBQVFo0X0RBVEEsCisJCVBUWjNfREFUQSwgUFRaMl9EQVRBLCBQVFoxX0RBVEEsIFBUWjBfREFUQSB9CisJfSwKKwl7IH0sCit9OworCitzdGF0aWMgc3RydWN0IHBpbm11eF9pbmZvIHNoNzcyM19waW5tdXhfaW5mbyA9IHsKKwkubmFtZSA9ICJzaDc3MjNfcGZjIiwKKwkucmVzZXJ2ZWRfaWQgPSBQSU5NVVhfUkVTRVJWRUQsCisJLmRhdGEgPSB7IFBJTk1VWF9EQVRBX0JFR0lOLCBQSU5NVVhfREFUQV9FTkQgfSwKKwkuaW5wdXQgPSB7IFBJTk1VWF9JTlBVVF9CRUdJTiwgUElOTVVYX0lOUFVUX0VORCB9LAorCS5pbnB1dF9wdSA9IHsgUElOTVVYX0lOUFVUX1BVTExVUF9CRUdJTiwgUElOTVVYX0lOUFVUX1BVTExVUF9FTkQgfSwKKwkub3V0cHV0ID0geyBQSU5NVVhfT1VUUFVUX0JFR0lOLCBQSU5NVVhfT1VUUFVUX0VORCB9LAorCS5tYXJrID0geyBQSU5NVVhfTUFSS19CRUdJTiwgUElOTVVYX01BUktfRU5EIH0sCisJLmZ1bmN0aW9uID0geyBQSU5NVVhfRlVOQ1RJT05fQkVHSU4sIFBJTk1VWF9GVU5DVElPTl9FTkQgfSwKKworCS5maXJzdF9ncGlvID0gR1BJT19QVEE3LAorCS5sYXN0X2dwaW8gPSBHUElPX0ZOX0lERUEwLAorCisJLmdwaW9zID0gcGlubXV4X2dwaW9zLAorCS5jZmdfcmVncyA9IHBpbm11eF9jb25maWdfcmVncywKKwkuZGF0YV9yZWdzID0gcGlubXV4X2RhdGFfcmVncywKKworCS5ncGlvX2RhdGEgPSBwaW5tdXhfZGF0YSwKKwkuZ3Bpb19kYXRhX3NpemUgPSBBUlJBWV9TSVpFKHBpbm11eF9kYXRhKSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHBsYXRfcGlubXV4X3NldHVwKHZvaWQpCit7CisJcmV0dXJuIHJlZ2lzdGVyX3Bpbm11eCgmc2g3NzIzX3Bpbm11eF9pbmZvKTsKK30KKworYXJjaF9pbml0Y2FsbChwbGF0X3Bpbm11eF9zZXR1cCk7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zbXAtc2h4My5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc21wLXNoeDMuYwppbmRleCBlNWUwNjg0Li5iODg2OWFhIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zbXAtc2h4My5jCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3NtcC1zaHgzLmMKQEAgLTEsNyArMSw3IEBACiAvKgogICogU0gtWDMgU01QCiAgKgotICogIENvcHlyaWdodCAoQykgMjAwNyAgUGF1bCBNdW5kdAorICogIENvcHlyaWdodCAoQykgMjAwNyAtIDIwMDggIFBhdWwgTXVuZHQKICAqICBDb3B5cmlnaHQgKEMpIDIwMDcgIE1hZ251cyBEYW1tCiAgKgogICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKQEAgLTE0LDYgKzE0LDIyIEBACiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KIAorc3RhdGljIGlycXJldHVybl90IGlwaV9pbnRlcnJ1cHRfaGFuZGxlcihpbnQgaXJxLCB2b2lkICphcmcpCit7CisJdW5zaWduZWQgaW50IG1lc3NhZ2UgPSAodW5zaWduZWQgaW50KShsb25nKWFyZzsKKwl1bnNpZ25lZCBpbnQgY3B1ID0gaGFyZF9zbXBfcHJvY2Vzc29yX2lkKCk7CisJdW5zaWduZWQgaW50IG9mZnMgPSA0ICogY3B1OworCXVuc2lnbmVkIGludCB4OworCisJeCA9IGN0cmxfaW5sKDB4ZmU0MTAwNzAgKyBvZmZzKTsgLyogQzBJTklUSUNJLi5DbklOVElDSSAqLworCXggJj0gKDEgPDwgKG1lc3NhZ2UgPDwgMikpOworCWN0cmxfb3V0bCh4LCAweGZlNDEwMDgwICsgb2Zmcyk7IC8qIEMwSU5USUNJQ0xSLi5DbklOVElDSUNMUiAqLworCisJc21wX21lc3NhZ2VfcmVjdihtZXNzYWdlKTsKKworCXJldHVybiBJUlFfSEFORExFRDsKK30KKwogdm9pZCBfX2luaXQgcGxhdF9zbXBfc2V0dXAodm9pZCkKIHsKIAl1bnNpZ25lZCBpbnQgY3B1ID0gMDsKQEAgLTQwLDYgKzU2LDEzIEBACiAKIHZvaWQgX19pbml0IHBsYXRfcHJlcGFyZV9jcHVzKHVuc2lnbmVkIGludCBtYXhfY3B1cykKIHsKKwlpbnQgaTsKKworCUJVSUxEX0JVR19PTihTTVBfTVNHX05SID49IDgpOworCisJZm9yIChpID0gMDsgaSA8IFNNUF9NU0dfTlI7IGkrKykKKwkJcmVxdWVzdF9pcnEoMTA0ICsgaSwgaXBpX2ludGVycnVwdF9oYW5kbGVyLCBJUlFGX0RJU0FCTEVELAorCQkJICAgICJJUEkiLCAodm9pZCAqKShsb25nKWkpOwogfQogCiAjZGVmaW5lIFNUQkNSX1JFRyhwaHlzX2lkKSAoMHhmZTQwMDAwNCB8IChwaHlzX2lkIDw8IDEyKSkKQEAgLTU5LDcgKzgyLDcgQEAKIAkJY3RybF9vdXRsKFNUQkNSX01TVFAsIFNUQkNSX1JFRyhjcHUpKTsKIAogCXdoaWxlICghKGN0cmxfaW5sKFNUQkNSX1JFRyhjcHUpKSAmIFNUQkNSX01TVFApKQotCQk7CisJCWNwdV9yZWxheCgpOwogCiAJLyogU3RhcnQgdXAgc2Vjb25kYXJ5IHByb2Nlc3NvciBieSBzZW5kaW5nIGEgcmVzZXQgKi8KIAljdHJsX291dGwoU1RCQ1JfQVBfVkFMLCBTVEJDUl9SRUcoY3B1KSk7CkBAIC03NSw0NiArOTgsNiBAQAogCXVuc2lnbmVkIGxvbmcgYWRkciA9IDB4ZmU0MTAwNzAgKyAoY3B1ICogNCk7CiAKIAlCVUdfT04oY3B1ID49IDQpOwotCUJVR19PTihtZXNzYWdlID49IFNNUF9NU0dfTlIpOwogCiAJY3RybF9vdXRsKDEgPDwgKG1lc3NhZ2UgPDwgMiksIGFkZHIpOyAvKiBDMElOVElDSS4uQ25JTlRJQ0kgKi8KIH0KLQotc3RydWN0IGlwaV9kYXRhIHsKLQl2b2lkICgqaGFuZGxlcikodm9pZCAqKTsKLQl2b2lkICphcmc7Ci0JdW5zaWduZWQgaW50IG1lc3NhZ2U7Ci19OwotCi1zdGF0aWMgaXJxcmV0dXJuX3QgaXBpX2ludGVycnVwdF9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmFyZykKLXsKLQlzdHJ1Y3QgaXBpX2RhdGEgKmlkID0gYXJnOwotCXVuc2lnbmVkIGludCBjcHUgPSBoYXJkX3NtcF9wcm9jZXNzb3JfaWQoKTsKLQl1bnNpZ25lZCBpbnQgb2ZmcyA9IDQgKiBjcHU7Ci0JdW5zaWduZWQgaW50IHg7Ci0KLQl4ID0gY3RybF9pbmwoMHhmZTQxMDA3MCArIG9mZnMpOyAvKiBDMElOSVRJQ0kuLkNuSU5USUNJICovCi0JeCAmPSAoMSA8PCAoaWQtPm1lc3NhZ2UgPDwgMikpOwotCWN0cmxfb3V0bCh4LCAweGZlNDEwMDgwICsgb2Zmcyk7IC8qIEMwSU5USUNJQ0xSLi5DbklOVElDSUNMUiAqLwotCi0JaWQtPmhhbmRsZXIoaWQtPmFyZyk7Ci0KLQlyZXR1cm4gSVJRX0hBTkRMRUQ7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgaXBpX2RhdGEgaXBpX2hhbmRsZXJzW1NNUF9NU0dfTlJdOwotCi1pbnQgcGxhdF9yZWdpc3Rlcl9pcGlfaGFuZGxlcih1bnNpZ25lZCBpbnQgbWVzc2FnZSwKLQkJCSAgICAgIHZvaWQgKCpoYW5kbGVyKSh2b2lkICopLCB2b2lkICphcmcpCi17Ci0Jc3RydWN0IGlwaV9kYXRhICppZCA9ICZpcGlfaGFuZGxlcnNbbWVzc2FnZV07Ci0KLQlCVUdfT04oU01QX01TR19OUiA+PSA4KTsKLQlCVUdfT04obWVzc2FnZSA+PSBTTVBfTVNHX05SKTsKLQotCWlkLT5oYW5kbGVyID0gaGFuZGxlcjsKLQlpZC0+YXJnID0gYXJnOwotCWlkLT5tZXNzYWdlID0gbWVzc2FnZTsKLQotCXJldHVybiByZXF1ZXN0X2lycSgxMDQgKyBtZXNzYWdlLCBpcGlfaW50ZXJydXB0X2hhbmRsZXIsIDAsICJJUEkiLCBpZCk7Ci19CmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g1L01ha2VmaWxlIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNS9NYWtlZmlsZQppbmRleCA4NjQ2MzYzLi5jZTQ2MDJlIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g1L01ha2VmaWxlCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDUvTWFrZWZpbGUKQEAgLTUsMyArNSw4IEBACiAKIG9iai0kKENPTkZJR19TSF9GUFUpCQkrPSBmcHUubwogb2JqLSQoQ09ORklHX0tBTExTWU1TKQkJKz0gdW53aW5kLm8KKworIyBQcmltYXJ5IG9uLWNoaXAgY2xvY2tzIChjb21tb24pCitjbG9jay0kKENPTkZJR19DUFVfU0g1KQkJOj0gY2xvY2stc2g1Lm8KKworb2JqLXkJCQkrPSAkKGNsb2NrLXkpCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g1L2Nsb2NrLXNoNS5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNS9jbG9jay1zaDUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MmM0OTI0Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNS9jbG9jay1zaDUuYwpAQCAtMCwwICsxLDc5IEBACisvKgorICogYXJjaC9zaC9rZXJuZWwvY3B1L3NoNS9jbG9jay1zaDUuYworICoKKyAqIFNILTUgc3VwcG9ydCBmb3IgdGhlIGNsb2NrIGZyYW1ld29yaworICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDggIFBhdWwgTXVuZHQKKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqLworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxhc20vY2xvY2suaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKworc3RhdGljIGludCBpZmNfdGFibGVbXSA9IHsgMiwgNCwgNiwgOCwgMTAsIDEyLCAxNiwgMjQgfTsKKworLyogQ2xvY2ssIFBvd2VyIGFuZCBSZXNldCBDb250cm9sbGVyICovCisjZGVmaW5lCUNQUkNfQkxPQ0tfT0ZGCTB4MDEwMTAwMDAKKyNkZWZpbmUgQ1BSQ19CQVNFCShQSFlTX1BFUklQSEVSQUxfQkxPQ0sgKyBDUFJDX0JMT0NLX09GRikKKworc3RhdGljIHVuc2lnbmVkIGxvbmcgY3ByY19iYXNlOworCitzdGF0aWMgdm9pZCBtYXN0ZXJfY2xrX2luaXQoc3RydWN0IGNsayAqY2xrKQoreworCWludCBpZHggPSAoY3RybF9pbmwoY3ByY19iYXNlICsgMHgwMCkgPj4gNikgJiAweDAwMDc7CisJY2xrLT5yYXRlICo9IGlmY190YWJsZVtpZHhdOworfQorCitzdGF0aWMgc3RydWN0IGNsa19vcHMgc2g1X21hc3Rlcl9jbGtfb3BzID0geworCS5pbml0CQk9IG1hc3Rlcl9jbGtfaW5pdCwKK307CisKK3N0YXRpYyB2b2lkIG1vZHVsZV9jbGtfcmVjYWxjKHN0cnVjdCBjbGsgKmNsaykKK3sKKwlpbnQgaWR4ID0gKGN0cmxfaW53KGNwcmNfYmFzZSkgPj4gMTIpICYgMHgwMDA3OworCWNsay0+cmF0ZSA9IGNsay0+cGFyZW50LT5yYXRlIC8gaWZjX3RhYmxlW2lkeF07Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY2xrX29wcyBzaDVfbW9kdWxlX2Nsa19vcHMgPSB7CisJLnJlY2FsYwkJPSBtb2R1bGVfY2xrX3JlY2FsYywKK307CisKK3N0YXRpYyB2b2lkIGJ1c19jbGtfcmVjYWxjKHN0cnVjdCBjbGsgKmNsaykKK3sKKwlpbnQgaWR4ID0gKGN0cmxfaW53KGNwcmNfYmFzZSkgPj4gMykgJiAweDAwMDc7CisJY2xrLT5yYXRlID0gY2xrLT5wYXJlbnQtPnJhdGUgLyBpZmNfdGFibGVbaWR4XTsKK30KKworc3RhdGljIHN0cnVjdCBjbGtfb3BzIHNoNV9idXNfY2xrX29wcyA9IHsKKwkucmVjYWxjCQk9IGJ1c19jbGtfcmVjYWxjLAorfTsKKworc3RhdGljIHZvaWQgY3B1X2Nsa19yZWNhbGMoc3RydWN0IGNsayAqY2xrKQoreworCWludCBpZHggPSAoY3RybF9pbncoY3ByY19iYXNlKSAmIDB4MDAwNyk7CisJY2xrLT5yYXRlID0gY2xrLT5wYXJlbnQtPnJhdGUgLyBpZmNfdGFibGVbaWR4XTsKK30KKworc3RhdGljIHN0cnVjdCBjbGtfb3BzIHNoNV9jcHVfY2xrX29wcyA9IHsKKwkucmVjYWxjCQk9IGNwdV9jbGtfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGtfb3BzICpzaDVfY2xrX29wc1tdID0geworCSZzaDVfbWFzdGVyX2Nsa19vcHMsCisJJnNoNV9tb2R1bGVfY2xrX29wcywKKwkmc2g1X2J1c19jbGtfb3BzLAorCSZzaDVfY3B1X2Nsa19vcHMsCit9OworCit2b2lkIF9faW5pdCBhcmNoX2luaXRfY2xrX29wcyhzdHJ1Y3QgY2xrX29wcyAqKm9wcywgaW50IGlkeCkKK3sKKwljcHJjX2Jhc2UgPSBvbmNoaXBfcmVtYXAoQ1BSQ19CQVNFLCAxMDI0LCAiQ1BSQyIpOworCUJVR19PTighY3ByY19iYXNlKTsKKworCWlmIChpZHggPCBBUlJBWV9TSVpFKHNoNV9jbGtfb3BzKSkKKwkJKm9wcyA9IHNoNV9jbGtfb3BzW2lkeF07Cit9CmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcmFzaF9kdW1wLmMgYi9hcmNoL3NoL2tlcm5lbC9jcmFzaF9kdW1wLmMKaW5kZXggNGEyZWNiZS4uOTVkMjE2MiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3Jhc2hfZHVtcC5jCisrKyBiL2FyY2gvc2gva2VybmVsL2NyYXNoX2R1bXAuYwpAQCAtMTAsNiArMTAsOSBAQAogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KIAorLyogU3RvcmVzIHRoZSBwaHlzaWNhbCBhZGRyZXNzIG9mIGVsZiBoZWFkZXIgb2YgY3Jhc2ggaW1hZ2UuICovCit1bnNpZ25lZCBsb25nIGxvbmcgZWxmY29yZWhkcl9hZGRyID0gRUxGQ09SRV9BRERSX01BWDsKKwogLyoqCiAgKiBjb3B5X29sZG1lbV9wYWdlIC0gY29weSBvbmUgcGFnZSBmcm9tICJvbGRtZW0iCiAgKiBAcGZuOiBwYWdlIGZyYW1lIG51bWJlciB0byBiZSBjb3BpZWQKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2R1bXBfdGFzay5jIGIvYXJjaC9zaC9rZXJuZWwvZHVtcF90YXNrLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFkYjdjZTAuLjAwMDAwMDAKLS0tIGEvYXJjaC9zaC9rZXJuZWwvZHVtcF90YXNrLmMKKysrIC9kZXYvbnVsbApAQCAtMSwzMiArMCwwIEBACi0jaW5jbHVkZSA8bGludXgvZWxmY29yZS5oPgotI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+Ci0jaW5jbHVkZSA8YXNtL2ZwdS5oPgotCi0vKgotICogQ2FwdHVyZSB0aGUgdXNlciBzcGFjZSByZWdpc3RlcnMgaWYgdGhlIHRhc2sgaXMgbm90IHJ1bm5pbmcgKGluIHVzZXIgc3BhY2UpCi0gKi8KLWludCBkdW1wX3Rhc2tfcmVncyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgZWxmX2dyZWdzZXRfdCAqcmVncykKLXsKLQlzdHJ1Y3QgcHRfcmVncyBwdHJlZ3M7Ci0KLQlwdHJlZ3MgPSAqdGFza19wdF9yZWdzKHRzayk7Ci0JZWxmX2NvcmVfY29weV9yZWdzKHJlZ3MsICZwdHJlZ3MpOwotCi0JcmV0dXJuIDE7Ci19Ci0KLWludCBkdW1wX3Rhc2tfZnB1KHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCBlbGZfZnByZWdzZXRfdCAqZnB1KQotewotCWludCBmcHZhbGlkID0gMDsKLQotI2lmIGRlZmluZWQoQ09ORklHX1NIX0ZQVSkKLQlmcHZhbGlkID0gISF0c2tfdXNlZF9tYXRoKHRzayk7Ci0JaWYgKGZwdmFsaWQpIHsKLQkJdW5sYXp5X2ZwdSh0c2ssIHRhc2tfcHRfcmVncyh0c2spKTsKLQkJbWVtY3B5KGZwdSwgJnRzay0+dGhyZWFkLmZwdS5oYXJkLCBzaXplb2YoKmZwdSkpOwotCX0KLSNlbmRpZgotCi0JcmV0dXJuIGZwdmFsaWQ7Ci19Ci0KZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2VudHJ5LWNvbW1vbi5TIGIvYXJjaC9zaC9rZXJuZWwvZW50cnktY29tbW9uLlMKaW5kZXggZWZiYjQyNi4uMWE1Y2Y5ZCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvZW50cnktY29tbW9uLlMKKysrIGIvYXJjaC9zaC9rZXJuZWwvZW50cnktY29tbW9uLlMKQEAgLTM3MSwzICszNzEsNDcgQEAKICNlbmRpZgogNzoJLmxvbmcJZG9fc3lzY2FsbF90cmFjZV9lbnRlcgogODoJLmxvbmcJZG9fc3lzY2FsbF90cmFjZV9sZWF2ZQorCisjaWZkZWYgQ09ORklHX0ZUUkFDRQorCS5hbGlnbiAyCisJLmdsb2JsCV9tY291bnQKKwkudHlwZQlfbWNvdW50LEBmdW5jdGlvbgorCS5nbG9ibAltY291bnQKKwkudHlwZQltY291bnQsQGZ1bmN0aW9uCitfbWNvdW50OgorbWNvdW50OgorCW1vdi5sCXI0LCBALXIxNQorCW1vdi5sCXI1LCBALXIxNQorCW1vdi5sCXI2LCBALXIxNQorCW1vdi5sCXI3LCBALXIxNQorCXN0cy5sCXByLCBALXIxNQorCisJbW92LmwJQCgyMCxyMTUpLHI0CisJc3RzCXByLCByNQorCisJbW92LmwJMWYsIHI2CisJbW92LmwJZnRyYWNlX3N0dWIsIHI3CQorCWNtcC9lcQlyNiwgcjcKKwlidAlza2lwX3RyYWNlCisKKwltb3YubAlAcjYsIHI2CisJanNyCUByNgorCSBub3AKKworc2tpcF90cmFjZToKKworCWxkcy5sCUByMTUrLCBwcgorCW1vdi5sCUByMTUrLCByNworCW1vdi5sCUByMTUrLCByNgorCW1vdi5sCUByMTUrLCByNQorCXJ0cworCSBtb3YubAlAcjE1KywgcjQKKworCS5hbGlnbiAyCisxOgkubG9uZwlmdHJhY2VfdHJhY2VfZnVuY3Rpb24KKworCS5nbG9ibAlmdHJhY2Vfc3R1YgorZnRyYWNlX3N0dWI6CisJcnRzCisJIG5vcAorI2VuZGlmIC8qIENPTkZJR19GVFJBQ0UgKi8KZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2dwaW8uYyBiL2FyY2gvc2gva2VybmVsL2dwaW8uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYjhiODEyCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9zaC9rZXJuZWwvZ3Bpby5jCkBAIC0wLDAgKzEsNDk4IEBACisvKgorICogUGlubXV4ZWQgR1BJTyBzdXBwb3J0IGZvciBTdXBlckguCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA4IE1hZ251cyBEYW1tCisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvaXJxLmg+CisjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgorCitzdGF0aWMgc3RydWN0IHBpbm11eF9pbmZvICpyZWdpc3RlcmVkX2dwaW87CisKK3N0YXRpYyBzdHJ1Y3QgcGlubXV4X2luZm8gKmdwaW9fY29udHJvbGxlcih1bnNpZ25lZCBncGlvKQoreworCWlmICghcmVnaXN0ZXJlZF9ncGlvKQorCQlyZXR1cm4gTlVMTDsKKworCWlmIChncGlvIDwgcmVnaXN0ZXJlZF9ncGlvLT5maXJzdF9ncGlvKQorCQlyZXR1cm4gTlVMTDsKKworCWlmIChncGlvID4gcmVnaXN0ZXJlZF9ncGlvLT5sYXN0X2dwaW8pCisJCXJldHVybiBOVUxMOworCisJcmV0dXJuIHJlZ2lzdGVyZWRfZ3BpbzsKK30KKworc3RhdGljIGludCBlbnVtX2luX3JhbmdlKHBpbm11eF9lbnVtX3QgZW51bV9pZCwgc3RydWN0IHBpbm11eF9yYW5nZSAqcikKK3sKKwlpZiAoZW51bV9pZCA8IHItPmJlZ2luKQorCQlyZXR1cm4gMDsKKworCWlmIChlbnVtX2lkID4gci0+ZW5kKQorCQlyZXR1cm4gMDsKKworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IHJlYWRfd3JpdGVfcmVnKHVuc2lnbmVkIGxvbmcgcmVnLCB1bnNpZ25lZCBsb25nIHJlZ193aWR0aCwKKwkJCSAgdW5zaWduZWQgbG9uZyBmaWVsZF93aWR0aCwgdW5zaWduZWQgbG9uZyBpbl9wb3MsCisJCQkgIHVuc2lnbmVkIGxvbmcgdmFsdWUsIGludCBkb193cml0ZSkKK3sKKwl1bnNpZ25lZCBsb25nIGRhdGEsIG1hc2ssIHBvczsKKworCWRhdGEgPSAwOworCW1hc2sgPSAoMSA8PCBmaWVsZF93aWR0aCkgLSAxOworCXBvcyA9IHJlZ193aWR0aCAtICgoaW5fcG9zICsgMSkgKiBmaWVsZF93aWR0aCk7CisKKyNpZmRlZiBERUJVRworCXByX2luZm8oIiVzLCBhZGRyID0gJWx4LCB2YWx1ZSA9ICVsZCwgcG9zID0gJWxkLCAiCisJCSJyX3dpZHRoID0gJWxkLCBmX3dpZHRoID0gJWxkXG4iLAorCQlkb193cml0ZSA/ICJ3cml0ZSIgOiAicmVhZCIsIHJlZywgdmFsdWUsIHBvcywKKwkJcmVnX3dpZHRoLCBmaWVsZF93aWR0aCk7CisjZW5kaWYKKworCXN3aXRjaCAocmVnX3dpZHRoKSB7CisJY2FzZSA4OgorCQlkYXRhID0gY3RybF9pbmIocmVnKTsKKwkJYnJlYWs7CisJY2FzZSAxNjoKKwkJZGF0YSA9IGN0cmxfaW53KHJlZyk7CisJCWJyZWFrOworCWNhc2UgMzI6CisJCWRhdGEgPSBjdHJsX2lubChyZWcpOworCQlicmVhazsKKwl9CisKKwlpZiAoIWRvX3dyaXRlKQorCQlyZXR1cm4gKGRhdGEgPj4gcG9zKSAmIG1hc2s7CisKKwlkYXRhICY9IH4obWFzayA8PCBwb3MpOworCWRhdGEgfD0gdmFsdWUgPDwgcG9zOworCisJc3dpdGNoIChyZWdfd2lkdGgpIHsKKwljYXNlIDg6CisJCWN0cmxfb3V0YihkYXRhLCByZWcpOworCQlicmVhazsKKwljYXNlIDE2OgorCQljdHJsX291dHcoZGF0YSwgcmVnKTsKKwkJYnJlYWs7CisJY2FzZSAzMjoKKwkJY3RybF9vdXRsKGRhdGEsIHJlZyk7CisJCWJyZWFrOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBnZXRfZGF0YV9yZWcoc3RydWN0IHBpbm11eF9pbmZvICpncGlvYywgdW5zaWduZWQgZ3BpbywKKwkJCXN0cnVjdCBwaW5tdXhfZGF0YV9yZWcgKipkcnAsIGludCAqYml0cCkKK3sKKwlwaW5tdXhfZW51bV90IGVudW1faWQgPSBncGlvYy0+Z3Bpb3NbZ3Bpb10uZW51bV9pZDsKKwlzdHJ1Y3QgcGlubXV4X2RhdGFfcmVnICpkYXRhX3JlZzsKKwlpbnQgaywgbjsKKworCWlmICghZW51bV9pbl9yYW5nZShlbnVtX2lkLCAmZ3Bpb2MtPmRhdGEpKQorCQlyZXR1cm4gLTE7CisKKwlrID0gMDsKKwl3aGlsZSAoMSkgeworCQlkYXRhX3JlZyA9IGdwaW9jLT5kYXRhX3JlZ3MgKyBrOworCisJCWlmICghZGF0YV9yZWctPnJlZ193aWR0aCkKKwkJCWJyZWFrOworCisJCWZvciAobiA9IDA7IG4gPCBkYXRhX3JlZy0+cmVnX3dpZHRoOyBuKyspIHsKKwkJCWlmIChkYXRhX3JlZy0+ZW51bV9pZHNbbl0gPT0gZW51bV9pZCkgeworCQkJCSpkcnAgPSBkYXRhX3JlZzsKKwkJCQkqYml0cCA9IG47CisJCQkJcmV0dXJuIDA7CisKKwkJCX0KKwkJfQorCQlrKys7CisJfQorCisJcmV0dXJuIC0xOworfQorCitzdGF0aWMgaW50IGdldF9jb25maWdfcmVnKHN0cnVjdCBwaW5tdXhfaW5mbyAqZ3Bpb2MsIHBpbm11eF9lbnVtX3QgZW51bV9pZCwKKwkJCSAgc3RydWN0IHBpbm11eF9jZmdfcmVnICoqY3JwLCBpbnQgKmluZGV4cCwKKwkJCSAgdW5zaWduZWQgbG9uZyAqKmNudHApCit7CisJc3RydWN0IHBpbm11eF9jZmdfcmVnICpjb25maWdfcmVnOworCXVuc2lnbmVkIGxvbmcgcl93aWR0aCwgZl93aWR0aDsKKwlpbnQgaywgbjsKKworCWsgPSAwOworCXdoaWxlICgxKSB7CisJCWNvbmZpZ19yZWcgPSBncGlvYy0+Y2ZnX3JlZ3MgKyBrOworCisJCXJfd2lkdGggPSBjb25maWdfcmVnLT5yZWdfd2lkdGg7CisJCWZfd2lkdGggPSBjb25maWdfcmVnLT5maWVsZF93aWR0aDsKKworCQlpZiAoIXJfd2lkdGgpCisJCQlicmVhazsKKwkJZm9yIChuID0gMDsgbiA8IChyX3dpZHRoIC8gZl93aWR0aCkgKiAxIDw8IGZfd2lkdGg7IG4rKykgeworCQkJaWYgKGNvbmZpZ19yZWctPmVudW1faWRzW25dID09IGVudW1faWQpIHsKKwkJCQkqY3JwID0gY29uZmlnX3JlZzsKKwkJCQkqaW5kZXhwID0gbjsKKwkJCQkqY250cCA9ICZjb25maWdfcmVnLT5jbnRbbiAvICgxIDw8IGZfd2lkdGgpXTsKKwkJCQlyZXR1cm4gMDsKKwkJCX0KKwkJfQorCQlrKys7CisJfQorCisJcmV0dXJuIC0xOworfQorCitzdGF0aWMgaW50IGdldF9ncGlvX2VudW1faWQoc3RydWN0IHBpbm11eF9pbmZvICpncGlvYywgdW5zaWduZWQgZ3BpbywKKwkJCSAgICBpbnQgcG9zLCBwaW5tdXhfZW51bV90ICplbnVtX2lkcCkKK3sKKwlwaW5tdXhfZW51bV90IGVudW1faWQgPSBncGlvYy0+Z3Bpb3NbZ3Bpb10uZW51bV9pZDsKKwlwaW5tdXhfZW51bV90ICpkYXRhID0gZ3Bpb2MtPmdwaW9fZGF0YTsKKwlpbnQgazsKKworCWlmICghZW51bV9pbl9yYW5nZShlbnVtX2lkLCAmZ3Bpb2MtPmRhdGEpKSB7CisJCWlmICghZW51bV9pbl9yYW5nZShlbnVtX2lkLCAmZ3Bpb2MtPm1hcmspKSB7CisJCQlwcl9lcnIoIm5vbiBkYXRhL21hcmsgZW51bV9pZCBmb3IgZ3BpbyAlZFxuIiwgZ3Bpbyk7CisJCQlyZXR1cm4gLTE7CisJCX0KKwl9CisKKwlpZiAocG9zKSB7CisJCSplbnVtX2lkcCA9IGRhdGFbcG9zICsgMV07CisJCXJldHVybiBwb3MgKyAxOworCX0KKworCWZvciAoayA9IDA7IGsgPCBncGlvYy0+Z3Bpb19kYXRhX3NpemU7IGsrKykgeworCQlpZiAoZGF0YVtrXSA9PSBlbnVtX2lkKSB7CisJCQkqZW51bV9pZHAgPSBkYXRhW2sgKyAxXTsKKwkJCXJldHVybiBrICsgMTsKKwkJfQorCX0KKworCXByX2VycigiY2Fubm90IGxvY2F0ZSBkYXRhL21hcmsgZW51bV9pZCBmb3IgZ3BpbyAlZFxuIiwgZ3Bpbyk7CisJcmV0dXJuIC0xOworfQorCitzdGF0aWMgaW50IHdyaXRlX2NvbmZpZ19yZWcoc3RydWN0IHBpbm11eF9pbmZvICpncGlvYywKKwkJCSAgICBzdHJ1Y3QgcGlubXV4X2NmZ19yZWcgKmNycCwKKwkJCSAgICBpbnQgaW5kZXgpCit7CisJdW5zaWduZWQgbG9uZyBuY29tYiwgcG9zLCB2YWx1ZTsKKworCW5jb21iID0gMSA8PCBjcnAtPmZpZWxkX3dpZHRoOworCXBvcyA9IGluZGV4IC8gbmNvbWI7CisJdmFsdWUgPSBpbmRleCAlIG5jb21iOworCisJcmV0dXJuIHJlYWRfd3JpdGVfcmVnKGNycC0+cmVnLCBjcnAtPnJlZ193aWR0aCwKKwkJCSAgICAgIGNycC0+ZmllbGRfd2lkdGgsIHBvcywgdmFsdWUsIDEpOworfQorCitzdGF0aWMgaW50IGNoZWNrX2NvbmZpZ19yZWcoc3RydWN0IHBpbm11eF9pbmZvICpncGlvYywKKwkJCSAgICBzdHJ1Y3QgcGlubXV4X2NmZ19yZWcgKmNycCwKKwkJCSAgICBpbnQgaW5kZXgpCit7CisJdW5zaWduZWQgbG9uZyBuY29tYiwgcG9zLCB2YWx1ZTsKKworCW5jb21iID0gMSA8PCBjcnAtPmZpZWxkX3dpZHRoOworCXBvcyA9IGluZGV4IC8gbmNvbWI7CisJdmFsdWUgPSBpbmRleCAlIG5jb21iOworCisJaWYgKHJlYWRfd3JpdGVfcmVnKGNycC0+cmVnLCBjcnAtPnJlZ193aWR0aCwKKwkJCSAgIGNycC0+ZmllbGRfd2lkdGgsIHBvcywgMCwgMCkgPT0gdmFsdWUpCisJCXJldHVybiAwOworCisJcmV0dXJuIC0xOworfQorCitlbnVtIHsgR1BJT19DRkdfRFJZUlVOLCBHUElPX0NGR19SRVEsIEdQSU9fQ0ZHX0ZSRUUgfTsKKworaW50IHBpbm11eF9jb25maWdfZ3BpbyhzdHJ1Y3QgcGlubXV4X2luZm8gKmdwaW9jLCB1bnNpZ25lZCBncGlvLAorCQkgICAgICAgaW50IHBpbm11eF90eXBlLCBpbnQgY2ZnX21vZGUpCit7CisJc3RydWN0IHBpbm11eF9jZmdfcmVnICpjciA9IE5VTEw7CisJcGlubXV4X2VudW1fdCBlbnVtX2lkOworCXN0cnVjdCBwaW5tdXhfcmFuZ2UgKnJhbmdlOworCWludCBpbl9yYW5nZSwgcG9zLCBpbmRleDsKKwl1bnNpZ25lZCBsb25nICpjbnRwOworCisJc3dpdGNoIChwaW5tdXhfdHlwZSkgeworCisJY2FzZSBQSU5NVVhfVFlQRV9GVU5DVElPTjoKKwkJcmFuZ2UgPSBOVUxMOworCQlicmVhazsKKworCWNhc2UgUElOTVVYX1RZUEVfT1VUUFVUOgorCQlyYW5nZSA9ICZncGlvYy0+b3V0cHV0OworCQlicmVhazsKKworCWNhc2UgUElOTVVYX1RZUEVfSU5QVVQ6CisJCXJhbmdlID0gJmdwaW9jLT5pbnB1dDsKKwkJYnJlYWs7CisKKwljYXNlIFBJTk1VWF9UWVBFX0lOUFVUX1BVTExVUDoKKwkJcmFuZ2UgPSAmZ3Bpb2MtPmlucHV0X3B1OworCQlicmVhazsKKworCWNhc2UgUElOTVVYX1RZUEVfSU5QVVRfUFVMTERPV046CisJCXJhbmdlID0gJmdwaW9jLT5pbnB1dF9wZDsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlnb3RvIG91dF9lcnI7CisJfQorCisJcG9zID0gMDsKKwllbnVtX2lkID0gMDsKKwlpbmRleCA9IDA7CisJd2hpbGUgKDEpIHsKKwkJcG9zID0gZ2V0X2dwaW9fZW51bV9pZChncGlvYywgZ3BpbywgcG9zLCAmZW51bV9pZCk7CisJCWlmIChwb3MgPD0gMCkKKwkJCWdvdG8gb3V0X2VycjsKKworCQlpZiAoIWVudW1faWQpCisJCQlicmVhazsKKworCQlpbl9yYW5nZSA9IGVudW1faW5fcmFuZ2UoZW51bV9pZCwgJmdwaW9jLT5mdW5jdGlvbik7CisJCWlmICghaW5fcmFuZ2UgJiYgcmFuZ2UpCisJCQlpbl9yYW5nZSA9IGVudW1faW5fcmFuZ2UoZW51bV9pZCwgcmFuZ2UpOworCisJCWlmICghaW5fcmFuZ2UpCisJCQljb250aW51ZTsKKworCQlpZiAoZ2V0X2NvbmZpZ19yZWcoZ3Bpb2MsIGVudW1faWQsICZjciwgJmluZGV4LCAmY250cCkgIT0gMCkKKwkJCWdvdG8gb3V0X2VycjsKKworCQlzd2l0Y2ggKGNmZ19tb2RlKSB7CisJCWNhc2UgR1BJT19DRkdfRFJZUlVOOgorCQkJaWYgKCEqY250cCB8fCAhY2hlY2tfY29uZmlnX3JlZyhncGlvYywgY3IsIGluZGV4KSkKKwkJCQljb250aW51ZTsKKwkJCWJyZWFrOworCisJCWNhc2UgR1BJT19DRkdfUkVROgorCQkJaWYgKHdyaXRlX2NvbmZpZ19yZWcoZ3Bpb2MsIGNyLCBpbmRleCkgIT0gMCkKKwkJCQlnb3RvIG91dF9lcnI7CisJCQkqY250cCA9ICpjbnRwICsgMTsKKwkJCWJyZWFrOworCisJCWNhc2UgR1BJT19DRkdfRlJFRToKKwkJCSpjbnRwID0gKmNudHAgLSAxOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKKyBvdXRfZXJyOgorCXJldHVybiAtMTsKK30KKworc3RhdGljIERFRklORV9TUElOTE9DSyhncGlvX2xvY2spOworCitpbnQgX19ncGlvX3JlcXVlc3QodW5zaWduZWQgZ3BpbykKK3sKKwlzdHJ1Y3QgcGlubXV4X2luZm8gKmdwaW9jID0gZ3Bpb19jb250cm9sbGVyKGdwaW8pOworCXN0cnVjdCBwaW5tdXhfZGF0YV9yZWcgKmR1bW15OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IGksIHJldCwgcGlubXV4X3R5cGU7CisKKwlyZXQgPSAtRUlOVkFMOworCisJaWYgKCFncGlvYykKKwkJZ290byBlcnJfb3V0OworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmdwaW9fbG9jaywgZmxhZ3MpOworCisJaWYgKChncGlvYy0+Z3Bpb3NbZ3Bpb10uZmxhZ3MgJiBQSU5NVVhfRkxBR19UWVBFKSAhPSBQSU5NVVhfVFlQRV9OT05FKQorCQlnb3RvIGVycl91bmxvY2s7CisKKwkvKiBzZXR1cCBwaW4gZnVuY3Rpb24gaGVyZSBpZiBubyBkYXRhIGlzIGFzc29jaWF0ZWQgd2l0aCBwaW4gKi8KKworCWlmIChnZXRfZGF0YV9yZWcoZ3Bpb2MsIGdwaW8sICZkdW1teSwgJmkpICE9IDApCisJCXBpbm11eF90eXBlID0gUElOTVVYX1RZUEVfRlVOQ1RJT047CisJZWxzZQorCQlwaW5tdXhfdHlwZSA9IFBJTk1VWF9UWVBFX0dQSU87CisKKwlpZiAocGlubXV4X3R5cGUgPT0gUElOTVVYX1RZUEVfRlVOQ1RJT04pIHsKKwkJaWYgKHBpbm11eF9jb25maWdfZ3BpbyhncGlvYywgZ3BpbywKKwkJCQkgICAgICAgcGlubXV4X3R5cGUsCisJCQkJICAgICAgIEdQSU9fQ0ZHX0RSWVJVTikgIT0gMCkKKwkJCWdvdG8gZXJyX3VubG9jazsKKworCQlpZiAocGlubXV4X2NvbmZpZ19ncGlvKGdwaW9jLCBncGlvLAorCQkJCSAgICAgICBwaW5tdXhfdHlwZSwKKwkJCQkgICAgICAgR1BJT19DRkdfUkVRKSAhPSAwKQorCQkJQlVHKCk7CisJfQorCisJZ3Bpb2MtPmdwaW9zW2dwaW9dLmZsYWdzID0gcGlubXV4X3R5cGU7CisKKwlyZXQgPSAwOworIGVycl91bmxvY2s6CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZ3Bpb19sb2NrLCBmbGFncyk7CisgZXJyX291dDoKKwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTChfX2dwaW9fcmVxdWVzdCk7CisKK3ZvaWQgZ3Bpb19mcmVlKHVuc2lnbmVkIGdwaW8pCit7CisJc3RydWN0IHBpbm11eF9pbmZvICpncGlvYyA9IGdwaW9fY29udHJvbGxlcihncGlvKTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCBwaW5tdXhfdHlwZTsKKworCWlmICghZ3Bpb2MpCisJCXJldHVybjsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZncGlvX2xvY2ssIGZsYWdzKTsKKworCXBpbm11eF90eXBlID0gZ3Bpb2MtPmdwaW9zW2dwaW9dLmZsYWdzICYgUElOTVVYX0ZMQUdfVFlQRTsKKwlwaW5tdXhfY29uZmlnX2dwaW8oZ3Bpb2MsIGdwaW8sIHBpbm11eF90eXBlLCBHUElPX0NGR19GUkVFKTsKKwlncGlvYy0+Z3Bpb3NbZ3Bpb10uZmxhZ3MgPSBQSU5NVVhfVFlQRV9OT05FOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZ3Bpb19sb2NrLCBmbGFncyk7Cit9CitFWFBPUlRfU1lNQk9MKGdwaW9fZnJlZSk7CisKK3N0YXRpYyBpbnQgcGlubXV4X2RpcmVjdGlvbihzdHJ1Y3QgcGlubXV4X2luZm8gKmdwaW9jLAorCQkJICAgIHVuc2lnbmVkIGdwaW8sIGludCBuZXdfcGlubXV4X3R5cGUpCit7CisJaW50IHJldCwgcGlubXV4X3R5cGU7CisKKwlyZXQgPSAtRUlOVkFMOworCXBpbm11eF90eXBlID0gZ3Bpb2MtPmdwaW9zW2dwaW9dLmZsYWdzICYgUElOTVVYX0ZMQUdfVFlQRTsKKworCXN3aXRjaCAocGlubXV4X3R5cGUpIHsKKwljYXNlIFBJTk1VWF9UWVBFX0dQSU86CisJCWJyZWFrOworCWNhc2UgUElOTVVYX1RZUEVfT1VUUFVUOgorCWNhc2UgUElOTVVYX1RZUEVfSU5QVVQ6CisJY2FzZSBQSU5NVVhfVFlQRV9JTlBVVF9QVUxMVVA6CisJY2FzZSBQSU5NVVhfVFlQRV9JTlBVVF9QVUxMRE9XTjoKKwkJcGlubXV4X2NvbmZpZ19ncGlvKGdwaW9jLCBncGlvLCBwaW5tdXhfdHlwZSwgR1BJT19DRkdfRlJFRSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWdvdG8gZXJyX291dDsKKwl9CisKKwlpZiAocGlubXV4X2NvbmZpZ19ncGlvKGdwaW9jLCBncGlvLAorCQkJICAgICAgIG5ld19waW5tdXhfdHlwZSwKKwkJCSAgICAgICBHUElPX0NGR19EUllSVU4pICE9IDApCisJCWdvdG8gZXJyX291dDsKKworCWlmIChwaW5tdXhfY29uZmlnX2dwaW8oZ3Bpb2MsIGdwaW8sCisJCQkgICAgICAgbmV3X3Bpbm11eF90eXBlLAorCQkJICAgICAgIEdQSU9fQ0ZHX1JFUSkgIT0gMCkKKwkJQlVHKCk7CisKKwlncGlvYy0+Z3Bpb3NbZ3Bpb10uZmxhZ3MgPSBuZXdfcGlubXV4X3R5cGU7CisKKwlyZXQgPSAwOworIGVycl9vdXQ6CisJcmV0dXJuIHJldDsKK30KKworaW50IGdwaW9fZGlyZWN0aW9uX2lucHV0KHVuc2lnbmVkIGdwaW8pCit7CisJc3RydWN0IHBpbm11eF9pbmZvICpncGlvYyA9IGdwaW9fY29udHJvbGxlcihncGlvKTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCByZXQgPSAtRUlOVkFMOworCisJaWYgKCFncGlvYykKKwkJZ290byBlcnJfb3V0OworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmdwaW9fbG9jaywgZmxhZ3MpOworCXJldCA9IHBpbm11eF9kaXJlY3Rpb24oZ3Bpb2MsIGdwaW8sIFBJTk1VWF9UWVBFX0lOUFVUKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZncGlvX2xvY2ssIGZsYWdzKTsKKyBlcnJfb3V0OgorCXJldHVybiByZXQ7Cit9CitFWFBPUlRfU1lNQk9MKGdwaW9fZGlyZWN0aW9uX2lucHV0KTsKKworc3RhdGljIGludCBfX2dwaW9fZ2V0X3NldF92YWx1ZShzdHJ1Y3QgcGlubXV4X2luZm8gKmdwaW9jLAorCQkJCXVuc2lnbmVkIGdwaW8sIGludCB2YWx1ZSwKKwkJCQlpbnQgZG9fd3JpdGUpCit7CisJc3RydWN0IHBpbm11eF9kYXRhX3JlZyAqZHIgPSBOVUxMOworCWludCBiaXQgPSAwOworCisJaWYgKGdldF9kYXRhX3JlZyhncGlvYywgZ3BpbywgJmRyLCAmYml0KSAhPSAwKQorCQlCVUcoKTsKKwllbHNlCisJCXZhbHVlID0gcmVhZF93cml0ZV9yZWcoZHItPnJlZywgZHItPnJlZ193aWR0aCwKKwkJCQkgICAgICAgMSwgYml0LCB2YWx1ZSwgZG9fd3JpdGUpOworCisJcmV0dXJuIHZhbHVlOworfQorCitpbnQgZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KHVuc2lnbmVkIGdwaW8sIGludCB2YWx1ZSkKK3sKKwlzdHJ1Y3QgcGlubXV4X2luZm8gKmdwaW9jID0gZ3Bpb19jb250cm9sbGVyKGdwaW8pOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHJldCA9IC1FSU5WQUw7CisKKwlpZiAoIWdwaW9jKQorCQlnb3RvIGVycl9vdXQ7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZ3Bpb19sb2NrLCBmbGFncyk7CisJX19ncGlvX2dldF9zZXRfdmFsdWUoZ3Bpb2MsIGdwaW8sIHZhbHVlLCAxKTsKKwlyZXQgPSBwaW5tdXhfZGlyZWN0aW9uKGdwaW9jLCBncGlvLCBQSU5NVVhfVFlQRV9PVVRQVVQpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmdwaW9fbG9jaywgZmxhZ3MpOworIGVycl9vdXQ6CisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0woZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KTsKKworaW50IGdwaW9fZ2V0X3ZhbHVlKHVuc2lnbmVkIGdwaW8pCit7CisJc3RydWN0IHBpbm11eF9pbmZvICpncGlvYyA9IGdwaW9fY29udHJvbGxlcihncGlvKTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCB2YWx1ZSA9IDA7CisKKwlpZiAoIWdwaW9jKQorCQlCVUcoKTsKKwllbHNlIHsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmdwaW9fbG9jaywgZmxhZ3MpOworCQl2YWx1ZSA9IF9fZ3Bpb19nZXRfc2V0X3ZhbHVlKGdwaW9jLCBncGlvLCAwLCAwKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZ3Bpb19sb2NrLCBmbGFncyk7CisJfQorCisJcmV0dXJuIHZhbHVlOworfQorRVhQT1JUX1NZTUJPTChncGlvX2dldF92YWx1ZSk7CisKK3ZvaWQgZ3Bpb19zZXRfdmFsdWUodW5zaWduZWQgZ3BpbywgaW50IHZhbHVlKQoreworCXN0cnVjdCBwaW5tdXhfaW5mbyAqZ3Bpb2MgPSBncGlvX2NvbnRyb2xsZXIoZ3Bpbyk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWlmICghZ3Bpb2MpCisJCUJVRygpOworCWVsc2UgeworCQlzcGluX2xvY2tfaXJxc2F2ZSgmZ3Bpb19sb2NrLCBmbGFncyk7CisJCV9fZ3Bpb19nZXRfc2V0X3ZhbHVlKGdwaW9jLCBncGlvLCB2YWx1ZSwgMSk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmdwaW9fbG9jaywgZmxhZ3MpOworCX0KK30KK0VYUE9SVF9TWU1CT0woZ3Bpb19zZXRfdmFsdWUpOworCitpbnQgcmVnaXN0ZXJfcGlubXV4KHN0cnVjdCBwaW5tdXhfaW5mbyAqcGlwKQoreworCXJlZ2lzdGVyZWRfZ3BpbyA9IHBpcDsKKwlwcl9pbmZvKCJwaW5tdXg6ICVzIGhhbmRsaW5nIGdwaW8gJWQgLT4gJWRcbiIsCisJCXBpcC0+bmFtZSwgcGlwLT5maXJzdF9ncGlvLCBwaXAtPmxhc3RfZ3Bpbyk7CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2lvLmMgYi9hcmNoL3NoL2tlcm5lbC9pby5jCmluZGV4IDJiODk5MTIuLjI5Y2Y0NTggMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2lvLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvaW8uYwpAQCAtMTksMTIgKzE5LDEyIEBACiAgKiBDb3B5IGRhdGEgZnJvbSBJTyBtZW1vcnkgc3BhY2UgdG8gInJlYWwiIG1lbW9yeSBzcGFjZS4KICAqIFRoaXMgbmVlZHMgdG8gYmUgb3B0aW1pemVkLgogICovCi12b2lkIG1lbWNweV9mcm9taW8odm9pZCAqdG8sIHZvbGF0aWxlIHZvaWQgX19pb21lbSAqZnJvbSwgdW5zaWduZWQgbG9uZyBjb3VudCkKK3ZvaWQgbWVtY3B5X2Zyb21pbyh2b2lkICp0bywgY29uc3Qgdm9sYXRpbGUgdm9pZCBfX2lvbWVtICpmcm9tLCB1bnNpZ25lZCBsb25nIGNvdW50KQogewotCWNoYXIgKnAgPSB0bzsKKwl1bnNpZ25lZCBjaGFyICpwID0gdG87CiAgICAgICAgIHdoaWxlIChjb3VudCkgewogICAgICAgICAgICAgICAgIGNvdW50LS07Ci0gICAgICAgICAgICAgICAgKnAgPSByZWFkYigodm9pZCBfX2lvbWVtICopZnJvbSk7CisgICAgICAgICAgICAgICAgKnAgPSByZWFkYihmcm9tKTsKICAgICAgICAgICAgICAgICBwKys7CiAgICAgICAgICAgICAgICAgZnJvbSsrOwogICAgICAgICB9CkBAIC0zNywxMCArMzcsMTAgQEAKICAqLwogdm9pZCBtZW1jcHlfdG9pbyh2b2xhdGlsZSB2b2lkIF9faW9tZW0gKnRvLCBjb25zdCB2b2lkICpmcm9tLCB1bnNpZ25lZCBsb25nIGNvdW50KQogewotCWNvbnN0IGNoYXIgKnAgPSBmcm9tOworCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnAgPSBmcm9tOwogICAgICAgICB3aGlsZSAoY291bnQpIHsKICAgICAgICAgICAgICAgICBjb3VudC0tOwotICAgICAgICAgICAgICAgIHdyaXRlYigqcCwgKHZvaWQgX19pb21lbSAqKXRvKTsKKyAgICAgICAgICAgICAgICB3cml0ZWIoKnAsIHRvKTsKICAgICAgICAgICAgICAgICBwKys7CiAgICAgICAgICAgICAgICAgdG8rKzsKICAgICAgICAgfQpAQCAtNTUsNyArNTUsNyBAQAogewogICAgICAgICB3aGlsZSAoY291bnQpIHsKICAgICAgICAgICAgICAgICBjb3VudC0tOwotICAgICAgICAgICAgICAgIHdyaXRlYihjLCAodm9pZCBfX2lvbWVtICopZHN0KTsKKyAgICAgICAgICAgICAgICB3cml0ZWIoYywgZHN0KTsKICAgICAgICAgICAgICAgICBkc3QrKzsKICAgICAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvaW9fZ2VuZXJpYy5jIGIvYXJjaC9zaC9rZXJuZWwvaW9fZ2VuZXJpYy5jCmluZGV4IGRiNzY5NDQuLjVhN2Y1NTQgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2lvX2dlbmVyaWMuYworKysgYi9hcmNoL3NoL2tlcm5lbC9pb19nZW5lcmljLmMKQEAgLTE5LDM4ICsxOSwzMyBAQAogLyogU0gzIGhhcyBhIFBDTUNJQSBidWcgdGhhdCBuZWVkcyBhIGR1bW15IHJlYWQgZnJvbSBhcmVhIDYgZm9yIGEKICAqIHdvcmthcm91bmQuICovCiAvKiBJJ20gbm90IHN1cmUgU0g3NzA5IGhhcyB0aGlzIGtpbmQgb2YgYnVnICovCi0jZGVmaW5lIGR1bW15X3JlYWQoKQljdHJsX2luYigweGJhMDAwMDAwKQorI2RlZmluZSBkdW1teV9yZWFkKCkJX19yYXdfcmVhZGIoMHhiYTAwMDAwMCkKICNlbHNlCiAjZGVmaW5lIGR1bW15X3JlYWQoKQogI2VuZGlmCiAKIHVuc2lnbmVkIGxvbmcgZ2VuZXJpY19pb19iYXNlOwogCi1zdGF0aWMgaW5saW5lIHZvaWQgZGVsYXkodm9pZCkKLXsKLQljdHJsX2ludygweGEwMDAwMDAwKTsKLX0KLQogdTggZ2VuZXJpY19pbmIodW5zaWduZWQgbG9uZyBwb3J0KQogewotCXJldHVybiBjdHJsX2luYigodW5zaWduZWQgbG9uZyBfX2ZvcmNlKV9faW9wb3J0X21hcChwb3J0LCAxKSk7CisJcmV0dXJuIF9fcmF3X3JlYWRiKF9faW9wb3J0X21hcChwb3J0LCAxKSk7CiB9CiAKIHUxNiBnZW5lcmljX2ludyh1bnNpZ25lZCBsb25nIHBvcnQpCiB7Ci0JcmV0dXJuIGN0cmxfaW53KCh1bnNpZ25lZCBsb25nIF9fZm9yY2UpX19pb3BvcnRfbWFwKHBvcnQsIDIpKTsKKwlyZXR1cm4gX19yYXdfcmVhZHcoX19pb3BvcnRfbWFwKHBvcnQsIDIpKTsKIH0KIAogdTMyIGdlbmVyaWNfaW5sKHVuc2lnbmVkIGxvbmcgcG9ydCkKIHsKLQlyZXR1cm4gY3RybF9pbmwoKHVuc2lnbmVkIGxvbmcgX19mb3JjZSlfX2lvcG9ydF9tYXAocG9ydCwgNCkpOworCXJldHVybiBfX3Jhd19yZWFkbChfX2lvcG9ydF9tYXAocG9ydCwgNCkpOwogfQogCiB1OCBnZW5lcmljX2luYl9wKHVuc2lnbmVkIGxvbmcgcG9ydCkKIHsKIAl1bnNpZ25lZCBsb25nIHYgPSBnZW5lcmljX2luYihwb3J0KTsKIAotCWRlbGF5KCk7CisJY3RybF9kZWxheSgpOwogCXJldHVybiB2OwogfQogCkBAIC01OCw3ICs1Myw3IEBACiB7CiAJdW5zaWduZWQgbG9uZyB2ID0gZ2VuZXJpY19pbncocG9ydCk7CiAKLQlkZWxheSgpOworCWN0cmxfZGVsYXkoKTsKIAlyZXR1cm4gdjsKIH0KIApAQCAtNjYsNyArNjEsNyBAQAogewogCXVuc2lnbmVkIGxvbmcgdiA9IGdlbmVyaWNfaW5sKHBvcnQpOwogCi0JZGVsYXkoKTsKKwljdHJsX2RlbGF5KCk7CiAJcmV0dXJuIHY7CiB9CiAKQEAgLTgxLDcgKzc2LDcgQEAKIAl2b2xhdGlsZSB1OCAqcG9ydF9hZGRyOwogCXU4ICpidWYgPSBkc3Q7CiAKLQlwb3J0X2FkZHIgPSAodm9sYXRpbGUgdTggKilfX2lvcG9ydF9tYXAocG9ydCwgMSk7CisJcG9ydF9hZGRyID0gKHZvbGF0aWxlIHU4IF9fZm9yY2UgKilfX2lvcG9ydF9tYXAocG9ydCwgMSk7CiAJd2hpbGUgKGNvdW50LS0pCiAJCSpidWYrKyA9ICpwb3J0X2FkZHI7CiB9CkBAIC05MSw3ICs4Niw3IEBACiAJdm9sYXRpbGUgdTE2ICpwb3J0X2FkZHI7CiAJdTE2ICpidWYgPSBkc3Q7CiAKLQlwb3J0X2FkZHIgPSAodm9sYXRpbGUgdTE2ICopX19pb3BvcnRfbWFwKHBvcnQsIDIpOworCXBvcnRfYWRkciA9ICh2b2xhdGlsZSB1MTYgX19mb3JjZSAqKV9faW9wb3J0X21hcChwb3J0LCAyKTsKIAl3aGlsZSAoY291bnQtLSkKIAkJKmJ1ZisrID0gKnBvcnRfYWRkcjsKIApAQCAtMTAzLDcgKzk4LDcgQEAKIAl2b2xhdGlsZSB1MzIgKnBvcnRfYWRkcjsKIAl1MzIgKmJ1ZiA9IGRzdDsKIAotCXBvcnRfYWRkciA9ICh2b2xhdGlsZSB1MzIgKilfX2lvcG9ydF9tYXAocG9ydCwgNCk7CisJcG9ydF9hZGRyID0gKHZvbGF0aWxlIHUzMiBfX2ZvcmNlICopX19pb3BvcnRfbWFwKHBvcnQsIDQpOwogCXdoaWxlIChjb3VudC0tKQogCQkqYnVmKysgPSAqcG9ydF9hZGRyOwogCkBAIC0xMTIsMzUgKzEwNywzNSBAQAogCiB2b2lkIGdlbmVyaWNfb3V0Yih1OCBiLCB1bnNpZ25lZCBsb25nIHBvcnQpCiB7Ci0JY3RybF9vdXRiKGIsICh1bnNpZ25lZCBsb25nIF9fZm9yY2UpX19pb3BvcnRfbWFwKHBvcnQsIDEpKTsKKwlfX3Jhd193cml0ZWIoYiwgX19pb3BvcnRfbWFwKHBvcnQsIDEpKTsKIH0KIAogdm9pZCBnZW5lcmljX291dHcodTE2IGIsIHVuc2lnbmVkIGxvbmcgcG9ydCkKIHsKLQljdHJsX291dHcoYiwgKHVuc2lnbmVkIGxvbmcgX19mb3JjZSlfX2lvcG9ydF9tYXAocG9ydCwgMikpOworCV9fcmF3X3dyaXRldyhiLCBfX2lvcG9ydF9tYXAocG9ydCwgMikpOwogfQogCiB2b2lkIGdlbmVyaWNfb3V0bCh1MzIgYiwgdW5zaWduZWQgbG9uZyBwb3J0KQogewotCWN0cmxfb3V0bChiLCAodW5zaWduZWQgbG9uZyBfX2ZvcmNlKV9faW9wb3J0X21hcChwb3J0LCA0KSk7CisJX19yYXdfd3JpdGVsKGIsIF9faW9wb3J0X21hcChwb3J0LCA0KSk7CiB9CiAKIHZvaWQgZ2VuZXJpY19vdXRiX3AodTggYiwgdW5zaWduZWQgbG9uZyBwb3J0KQogewogCWdlbmVyaWNfb3V0YihiLCBwb3J0KTsKLQlkZWxheSgpOworCWN0cmxfZGVsYXkoKTsKIH0KIAogdm9pZCBnZW5lcmljX291dHdfcCh1MTYgYiwgdW5zaWduZWQgbG9uZyBwb3J0KQogewogCWdlbmVyaWNfb3V0dyhiLCBwb3J0KTsKLQlkZWxheSgpOworCWN0cmxfZGVsYXkoKTsKIH0KIAogdm9pZCBnZW5lcmljX291dGxfcCh1MzIgYiwgdW5zaWduZWQgbG9uZyBwb3J0KQogewogCWdlbmVyaWNfb3V0bChiLCBwb3J0KTsKLQlkZWxheSgpOworCWN0cmxfZGVsYXkoKTsKIH0KIAogLyoKQEAgLTE4NCwzNiArMTc5LDYgQEAKIAlkdW1teV9yZWFkKCk7CiB9CiAKLXU4IGdlbmVyaWNfcmVhZGIodm9pZCBfX2lvbWVtICphZGRyKQotewotCXJldHVybiBjdHJsX2luYigodW5zaWduZWQgbG9uZyBfX2ZvcmNlKWFkZHIpOwotfQotCi11MTYgZ2VuZXJpY19yZWFkdyh2b2lkIF9faW9tZW0gKmFkZHIpCi17Ci0JcmV0dXJuIGN0cmxfaW53KCh1bnNpZ25lZCBsb25nIF9fZm9yY2UpYWRkcik7Ci19Ci0KLXUzMiBnZW5lcmljX3JlYWRsKHZvaWQgX19pb21lbSAqYWRkcikKLXsKLQlyZXR1cm4gY3RybF9pbmwoKHVuc2lnbmVkIGxvbmcgX19mb3JjZSlhZGRyKTsKLX0KLQotdm9pZCBnZW5lcmljX3dyaXRlYih1OCBiLCB2b2lkIF9faW9tZW0gKmFkZHIpCi17Ci0JY3RybF9vdXRiKGIsICh1bnNpZ25lZCBsb25nIF9fZm9yY2UpYWRkcik7Ci19Ci0KLXZvaWQgZ2VuZXJpY193cml0ZXcodTE2IGIsIHZvaWQgX19pb21lbSAqYWRkcikKLXsKLQljdHJsX291dHcoYiwgKHVuc2lnbmVkIGxvbmcgX19mb3JjZSlhZGRyKTsKLX0KLQotdm9pZCBnZW5lcmljX3dyaXRlbCh1MzIgYiwgdm9pZCBfX2lvbWVtICphZGRyKQotewotCWN0cmxfb3V0bChiLCAodW5zaWduZWQgbG9uZyBfX2ZvcmNlKWFkZHIpOwotfQotCiB2b2lkIF9faW9tZW0gKmdlbmVyaWNfaW9wb3J0X21hcCh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGludCBzaXplKQogewogCXJldHVybiAodm9pZCBfX2lvbWVtICopKGFkZHIgKyBnZW5lcmljX2lvX2Jhc2UpOwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwva3Byb2Jlcy5jIGIvYXJjaC9zaC9rZXJuZWwva3Byb2Jlcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM5Njg1MGIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3NoL2tlcm5lbC9rcHJvYmVzLmMKQEAgLTAsMCArMSw1ODQgQEAKKy8qCisgKiBLZXJuZWwgcHJvYmVzIChrcHJvYmVzKSBmb3IgU3VwZXJICisgKgorICogQ29weXJpZ2h0IChDKSAyMDA3IENocmlzIFNtaXRoIDxjaHJpcy5zbWl0aEBzdC5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTGluZW8gU29sdXRpb25zLCBJbmMuCisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKyNpbmNsdWRlIDxsaW51eC9rcHJvYmVzLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvcHRyYWNlLmg+CisjaW5jbHVkZSA8bGludXgvcHJlZW1wdC5oPgorI2luY2x1ZGUgPGxpbnV4L2tkZWJ1Zy5oPgorI2luY2x1ZGUgPGFzbS9jYWNoZWZsdXNoLmg+CisjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKworREVGSU5FX1BFUl9DUFUoc3RydWN0IGtwcm9iZSAqLCBjdXJyZW50X2twcm9iZSkgPSBOVUxMOworREVGSU5FX1BFUl9DUFUoc3RydWN0IGtwcm9iZV9jdGxibGssIGtwcm9iZV9jdGxibGspOworCitzdGF0aWMgc3RydWN0IGtwcm9iZSBzYXZlZF9jdXJyZW50X29wY29kZTsKK3N0YXRpYyBzdHJ1Y3Qga3Byb2JlIHNhdmVkX25leHRfb3Bjb2RlOworc3RhdGljIHN0cnVjdCBrcHJvYmUgc2F2ZWRfbmV4dF9vcGNvZGUyOworCisjZGVmaW5lIE9QQ09ERV9KTVAoeCkJKCgoeCkgJiAweEYwRkYpID09IDB4NDAyYikKKyNkZWZpbmUgT1BDT0RFX0pTUih4KQkoKCh4KSAmIDB4RjBGRikgPT0gMHg0MDBiKQorI2RlZmluZSBPUENPREVfQlJBKHgpCSgoKHgpICYgMHhGMDAwKSA9PSAweGEwMDApCisjZGVmaW5lIE9QQ09ERV9CUkFGKHgpCSgoKHgpICYgMHhGMEZGKSA9PSAweDAwMjMpCisjZGVmaW5lIE9QQ09ERV9CU1IoeCkJKCgoeCkgJiAweEYwMDApID09IDB4YjAwMCkKKyNkZWZpbmUgT1BDT0RFX0JTUkYoeCkJKCgoeCkgJiAweEYwRkYpID09IDB4MDAwMykKKworI2RlZmluZSBPUENPREVfQkZfUyh4KQkoKCh4KSAmIDB4RkYwMCkgPT0gMHg4ZjAwKQorI2RlZmluZSBPUENPREVfQlRfUyh4KQkoKCh4KSAmIDB4RkYwMCkgPT0gMHg4ZDAwKQorCisjZGVmaW5lIE9QQ09ERV9CRih4KQkoKCh4KSAmIDB4RkYwMCkgPT0gMHg4YjAwKQorI2RlZmluZSBPUENPREVfQlQoeCkJKCgoeCkgJiAweEZGMDApID09IDB4ODkwMCkKKworI2RlZmluZSBPUENPREVfUlRTKHgpCSgoKHgpICYgMHgwMDBGKSA9PSAweDAwMGIpCisjZGVmaW5lIE9QQ09ERV9SVEUoeCkJKCgoeCkgJiAweEZGRkYpID09IDB4MDAyYikKKworaW50IF9fa3Byb2JlcyBhcmNoX3ByZXBhcmVfa3Byb2JlKHN0cnVjdCBrcHJvYmUgKnApCit7CisJa3Byb2JlX29wY29kZV90IG9wY29kZSA9ICooa3Byb2JlX29wY29kZV90ICopIChwLT5hZGRyKTsKKworCWlmIChPUENPREVfUlRFKG9wY29kZSkpCisJCXJldHVybiAtRUZBVUxUOwkvKiBCYWQgYnJlYWtwb2ludCAqLworCisJcC0+b3Bjb2RlID0gb3Bjb2RlOworCisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgX19rcHJvYmVzIGFyY2hfY29weV9rcHJvYmUoc3RydWN0IGtwcm9iZSAqcCkKK3sKKwltZW1jcHkocC0+YWluc24uaW5zbiwgcC0+YWRkciwgTUFYX0lOU05fU0laRSAqIHNpemVvZihrcHJvYmVfb3Bjb2RlX3QpKTsKKwlwLT5vcGNvZGUgPSAqcC0+YWRkcjsKK30KKwordm9pZCBfX2twcm9iZXMgYXJjaF9hcm1fa3Byb2JlKHN0cnVjdCBrcHJvYmUgKnApCit7CisJKnAtPmFkZHIgPSBCUkVBS1BPSU5UX0lOU1RSVUNUSU9OOworCWZsdXNoX2ljYWNoZV9yYW5nZSgodW5zaWduZWQgbG9uZylwLT5hZGRyLAorCQkJICAgKHVuc2lnbmVkIGxvbmcpcC0+YWRkciArIHNpemVvZihrcHJvYmVfb3Bjb2RlX3QpKTsKK30KKwordm9pZCBfX2twcm9iZXMgYXJjaF9kaXNhcm1fa3Byb2JlKHN0cnVjdCBrcHJvYmUgKnApCit7CisJKnAtPmFkZHIgPSBwLT5vcGNvZGU7CisJZmx1c2hfaWNhY2hlX3JhbmdlKCh1bnNpZ25lZCBsb25nKXAtPmFkZHIsCisJCQkgICAodW5zaWduZWQgbG9uZylwLT5hZGRyICsgc2l6ZW9mKGtwcm9iZV9vcGNvZGVfdCkpOworfQorCitpbnQgX19rcHJvYmVzIGFyY2hfdHJhbXBvbGluZV9rcHJvYmUoc3RydWN0IGtwcm9iZSAqcCkKK3sKKwlpZiAoKnAtPmFkZHIgPT0gQlJFQUtQT0lOVF9JTlNUUlVDVElPTikKKwkJcmV0dXJuIDE7CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBJZiBhbiBpbGxlZ2FsIHNsb3QgaW5zdHJ1Y3Rpb24gZXhjZXB0aW9uIG9jY3VycyBmb3IgYW4gYWRkcmVzcworICogY29udGFpbmluZyBhIGtwcm9iZSwgcmVtb3ZlIHRoZSBwcm9iZS4KKyAqCisgKiBSZXR1cm5zIDAgaWYgdGhlIGV4Y2VwdGlvbiB3YXMgaGFuZGxlZCBzdWNjZXNzZnVsbHksIDEgb3RoZXJ3aXNlLgorICovCitpbnQgX19rcHJvYmVzIGtwcm9iZV9oYW5kbGVfaWxsc2xvdCh1bnNpZ25lZCBsb25nIHBjKQoreworCXN0cnVjdCBrcHJvYmUgKnAgPSBnZXRfa3Byb2JlKChrcHJvYmVfb3Bjb2RlX3QgKikgcGMgKyAxKTsKKworCWlmIChwICE9IE5VTEwpIHsKKwkJcHJpbnRrKCJXYXJuaW5nOiByZW1vdmluZyBrcHJvYmUgZnJvbSBkZWxheSBzbG90OiAweCUuOHhcbiIsCisJCSAgICAgICAodW5zaWduZWQgaW50KXBjICsgMik7CisJCXVucmVnaXN0ZXJfa3Byb2JlKHApOworCQlyZXR1cm4gMDsKKwl9CisKKwlyZXR1cm4gMTsKK30KKwordm9pZCBfX2twcm9iZXMgYXJjaF9yZW1vdmVfa3Byb2JlKHN0cnVjdCBrcHJvYmUgKnApCit7CisJaWYgKHNhdmVkX25leHRfb3Bjb2RlLmFkZHIgIT0gMHgwKSB7CisJCWFyY2hfZGlzYXJtX2twcm9iZShwKTsKKwkJYXJjaF9kaXNhcm1fa3Byb2JlKCZzYXZlZF9uZXh0X29wY29kZSk7CisJCXNhdmVkX25leHRfb3Bjb2RlLmFkZHIgPSAweDA7CisJCXNhdmVkX25leHRfb3Bjb2RlLm9wY29kZSA9IDB4MDsKKworCQlpZiAoc2F2ZWRfbmV4dF9vcGNvZGUyLmFkZHIgIT0gMHgwKSB7CisJCQlhcmNoX2Rpc2FybV9rcHJvYmUoJnNhdmVkX25leHRfb3Bjb2RlMik7CisJCQlzYXZlZF9uZXh0X29wY29kZTIuYWRkciA9IDB4MDsKKwkJCXNhdmVkX25leHRfb3Bjb2RlMi5vcGNvZGUgPSAweDA7CisJCX0KKwl9Cit9CisKK3N0YXRpYyB2b2lkIF9fa3Byb2JlcyBzYXZlX3ByZXZpb3VzX2twcm9iZShzdHJ1Y3Qga3Byb2JlX2N0bGJsayAqa2NiKQoreworCWtjYi0+cHJldl9rcHJvYmUua3AgPSBrcHJvYmVfcnVubmluZygpOworCWtjYi0+cHJldl9rcHJvYmUuc3RhdHVzID0ga2NiLT5rcHJvYmVfc3RhdHVzOworfQorCitzdGF0aWMgdm9pZCBfX2twcm9iZXMgcmVzdG9yZV9wcmV2aW91c19rcHJvYmUoc3RydWN0IGtwcm9iZV9jdGxibGsgKmtjYikKK3sKKwlfX2dldF9jcHVfdmFyKGN1cnJlbnRfa3Byb2JlKSA9IGtjYi0+cHJldl9rcHJvYmUua3A7CisJa2NiLT5rcHJvYmVfc3RhdHVzID0ga2NiLT5wcmV2X2twcm9iZS5zdGF0dXM7Cit9CisKK3N0YXRpYyB2b2lkIF9fa3Byb2JlcyBzZXRfY3VycmVudF9rcHJvYmUoc3RydWN0IGtwcm9iZSAqcCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsCisJCQkJCSBzdHJ1Y3Qga3Byb2JlX2N0bGJsayAqa2NiKQoreworCV9fZ2V0X2NwdV92YXIoY3VycmVudF9rcHJvYmUpID0gcDsKK30KKworLyoKKyAqIFNpbmdsZXN0ZXAgaXMgaW1wbGVtZW50ZWQgYnkgZGlzYWJsaW5nIHRoZSBjdXJyZW50IGtwcm9iZSBhbmQgc2V0dGluZyBvbmUKKyAqIG9uIHRoZSBuZXh0IGluc3RydWN0aW9uLCBmb2xsb3dpbmcgYnJhbmNoZXMuIFR3byBwcm9iZXMgYXJlIHNldCBpZiB0aGUKKyAqIGJyYW5jaCBpcyBjb25kaXRpb25hbC4KKyAqLworc3RhdGljIHZvaWQgX19rcHJvYmVzIHByZXBhcmVfc2luZ2xlc3RlcChzdHJ1Y3Qga3Byb2JlICpwLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlrcHJvYmVfb3Bjb2RlX3QgKmFkZHIgPSBOVUxMOworCXNhdmVkX2N1cnJlbnRfb3Bjb2RlLmFkZHIgPSAoa3Byb2JlX29wY29kZV90ICopIChyZWdzLT5wYyk7CisJYWRkciA9IHNhdmVkX2N1cnJlbnRfb3Bjb2RlLmFkZHI7CisKKwlpZiAocCAhPSBOVUxMKSB7CisJCWFyY2hfZGlzYXJtX2twcm9iZShwKTsKKworCQlpZiAoT1BDT0RFX0pTUihwLT5vcGNvZGUpIHx8IE9QQ09ERV9KTVAocC0+b3Bjb2RlKSkgeworCQkJdW5zaWduZWQgaW50IHJlZ19uciA9ICgocC0+b3Bjb2RlID4+IDgpICYgMHgwMDBGKTsKKwkJCXNhdmVkX25leHRfb3Bjb2RlLmFkZHIgPQorCQkJICAgIChrcHJvYmVfb3Bjb2RlX3QgKikgcmVncy0+cmVnc1tyZWdfbnJdOworCQl9IGVsc2UgaWYgKE9QQ09ERV9CUkEocC0+b3Bjb2RlKSB8fCBPUENPREVfQlNSKHAtPm9wY29kZSkpIHsKKwkJCXVuc2lnbmVkIGxvbmcgZGlzcCA9IChwLT5vcGNvZGUgJiAweDBGRkYpOworCQkJc2F2ZWRfbmV4dF9vcGNvZGUuYWRkciA9CisJCQkgICAgKGtwcm9iZV9vcGNvZGVfdCAqKSAocmVncy0+cGMgKyA0ICsgZGlzcCAqIDIpOworCisJCX0gZWxzZSBpZiAoT1BDT0RFX0JSQUYocC0+b3Bjb2RlKSB8fCBPUENPREVfQlNSRihwLT5vcGNvZGUpKSB7CisJCQl1bnNpZ25lZCBpbnQgcmVnX25yID0gKChwLT5vcGNvZGUgPj4gOCkgJiAweDAwMEYpOworCQkJc2F2ZWRfbmV4dF9vcGNvZGUuYWRkciA9CisJCQkgICAgKGtwcm9iZV9vcGNvZGVfdCAqKSAocmVncy0+cGMgKyA0ICsKKwkJCQkJCSByZWdzLT5yZWdzW3JlZ19ucl0pOworCisJCX0gZWxzZSBpZiAoT1BDT0RFX1JUUyhwLT5vcGNvZGUpKSB7CisJCQlzYXZlZF9uZXh0X29wY29kZS5hZGRyID0gKGtwcm9iZV9vcGNvZGVfdCAqKSByZWdzLT5wcjsKKworCQl9IGVsc2UgaWYgKE9QQ09ERV9CRihwLT5vcGNvZGUpIHx8IE9QQ09ERV9CVChwLT5vcGNvZGUpKSB7CisJCQl1bnNpZ25lZCBsb25nIGRpc3AgPSAocC0+b3Bjb2RlICYgMHgwMEZGKTsKKwkJCS8qIGNhc2UgMSAqLworCQkJc2F2ZWRfbmV4dF9vcGNvZGUuYWRkciA9IHAtPmFkZHIgKyAxOworCQkJLyogY2FzZSAyICovCisJCQlzYXZlZF9uZXh0X29wY29kZTIuYWRkciA9CisJCQkgICAgKGtwcm9iZV9vcGNvZGVfdCAqKSAocmVncy0+cGMgKyA0ICsgZGlzcCAqIDIpOworCQkJc2F2ZWRfbmV4dF9vcGNvZGUyLm9wY29kZSA9ICooc2F2ZWRfbmV4dF9vcGNvZGUyLmFkZHIpOworCQkJYXJjaF9hcm1fa3Byb2JlKCZzYXZlZF9uZXh0X29wY29kZTIpOworCisJCX0gZWxzZSBpZiAoT1BDT0RFX0JGX1MocC0+b3Bjb2RlKSB8fCBPUENPREVfQlRfUyhwLT5vcGNvZGUpKSB7CisJCQl1bnNpZ25lZCBsb25nIGRpc3AgPSAocC0+b3Bjb2RlICYgMHgwMEZGKTsKKwkJCS8qIGNhc2UgMSAqLworCQkJc2F2ZWRfbmV4dF9vcGNvZGUuYWRkciA9IHAtPmFkZHIgKyAyOworCQkJLyogY2FzZSAyICovCisJCQlzYXZlZF9uZXh0X29wY29kZTIuYWRkciA9CisJCQkgICAgKGtwcm9iZV9vcGNvZGVfdCAqKSAocmVncy0+cGMgKyA0ICsgZGlzcCAqIDIpOworCQkJc2F2ZWRfbmV4dF9vcGNvZGUyLm9wY29kZSA9ICooc2F2ZWRfbmV4dF9vcGNvZGUyLmFkZHIpOworCQkJYXJjaF9hcm1fa3Byb2JlKCZzYXZlZF9uZXh0X29wY29kZTIpOworCisJCX0gZWxzZSB7CisJCQlzYXZlZF9uZXh0X29wY29kZS5hZGRyID0gcC0+YWRkciArIDE7CisJCX0KKworCQlzYXZlZF9uZXh0X29wY29kZS5vcGNvZGUgPSAqKHNhdmVkX25leHRfb3Bjb2RlLmFkZHIpOworCQlhcmNoX2FybV9rcHJvYmUoJnNhdmVkX25leHRfb3Bjb2RlKTsKKwl9Cit9CisKKy8qIENhbGxlZCB3aXRoIGtyZXRwcm9iZV9sb2NrIGhlbGQgKi8KK3ZvaWQgX19rcHJvYmVzIGFyY2hfcHJlcGFyZV9rcmV0cHJvYmUoc3RydWN0IGtyZXRwcm9iZV9pbnN0YW5jZSAqcmksCisJCQkJICAgICAgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJcmktPnJldF9hZGRyID0gKGtwcm9iZV9vcGNvZGVfdCAqKSByZWdzLT5wcjsKKworCS8qIFJlcGxhY2UgdGhlIHJldHVybiBhZGRyIHdpdGggdHJhbXBvbGluZSBhZGRyICovCisJcmVncy0+cHIgPSAodW5zaWduZWQgbG9uZylrcmV0cHJvYmVfdHJhbXBvbGluZTsKK30KKworc3RhdGljIGludCBfX2twcm9iZXMga3Byb2JlX2hhbmRsZXIoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IGtwcm9iZSAqcDsKKwlpbnQgcmV0ID0gMDsKKwlrcHJvYmVfb3Bjb2RlX3QgKmFkZHIgPSBOVUxMOworCXN0cnVjdCBrcHJvYmVfY3RsYmxrICprY2I7CisKKwkvKgorCSAqIFdlIGRvbid0IHdhbnQgdG8gYmUgcHJlZW1wdGVkIGZvciB0aGUgZW50aXJlCisJICogZHVyYXRpb24gb2Yga3Byb2JlIHByb2Nlc3NpbmcKKwkgKi8KKwlwcmVlbXB0X2Rpc2FibGUoKTsKKwlrY2IgPSBnZXRfa3Byb2JlX2N0bGJsaygpOworCisJYWRkciA9IChrcHJvYmVfb3Bjb2RlX3QgKikgKHJlZ3MtPnBjKTsKKworCS8qIENoZWNrIHdlJ3JlIG5vdCBhY3R1YWxseSByZWN1cnNpbmcgKi8KKwlpZiAoa3Byb2JlX3J1bm5pbmcoKSkgeworCQlwID0gZ2V0X2twcm9iZShhZGRyKTsKKwkJaWYgKHApIHsKKwkJCWlmIChrY2ItPmtwcm9iZV9zdGF0dXMgPT0gS1BST0JFX0hJVF9TUyAmJgorCQkJICAgICpwLT5haW5zbi5pbnNuID09IEJSRUFLUE9JTlRfSU5TVFJVQ1RJT04pIHsKKwkJCQlnb3RvIG5vX2twcm9iZTsKKwkJCX0KKwkJCS8qIFdlIGhhdmUgcmVlbnRlcmVkIHRoZSBrcHJvYmVfaGFuZGxlcigpLCBzaW5jZQorCQkJICogYW5vdGhlciBwcm9iZSB3YXMgaGl0IHdoaWxlIHdpdGhpbiB0aGUgaGFuZGxlci4KKwkJCSAqIFdlIGhlcmUgc2F2ZSB0aGUgb3JpZ2luYWwga3Byb2JlcyB2YXJpYWJsZXMgYW5kCisJCQkgKiBqdXN0IHNpbmdsZSBzdGVwIG9uIHRoZSBpbnN0cnVjdGlvbiBvZiB0aGUgbmV3IHByb2JlCisJCQkgKiB3aXRob3V0IGNhbGxpbmcgYW55IHVzZXIgaGFuZGxlcnMuCisJCQkgKi8KKwkJCXNhdmVfcHJldmlvdXNfa3Byb2JlKGtjYik7CisJCQlzZXRfY3VycmVudF9rcHJvYmUocCwgcmVncywga2NiKTsKKwkJCWtwcm9iZXNfaW5jX25taXNzZWRfY291bnQocCk7CisJCQlwcmVwYXJlX3NpbmdsZXN0ZXAocCwgcmVncyk7CisJCQlrY2ItPmtwcm9iZV9zdGF0dXMgPSBLUFJPQkVfUkVFTlRFUjsKKwkJCXJldHVybiAxOworCQl9IGVsc2UgeworCQkJcCA9IF9fZ2V0X2NwdV92YXIoY3VycmVudF9rcHJvYmUpOworCQkJaWYgKHAtPmJyZWFrX2hhbmRsZXIgJiYgcC0+YnJlYWtfaGFuZGxlcihwLCByZWdzKSkgeworCQkJCWdvdG8gc3NfcHJvYmU7CisJCQl9CisJCX0KKwkJZ290byBub19rcHJvYmU7CisJfQorCisJcCA9IGdldF9rcHJvYmUoYWRkcik7CisJaWYgKCFwKSB7CisJCS8qIE5vdCBvbmUgb2Ygb3VyczogbGV0IGtlcm5lbCBoYW5kbGUgaXQgKi8KKwkJaWYgKCooa3Byb2JlX29wY29kZV90ICopYWRkciAhPSBCUkVBS1BPSU5UX0lOU1RSVUNUSU9OKSB7CisJCQkvKgorCQkJICogVGhlIGJyZWFrcG9pbnQgaW5zdHJ1Y3Rpb24gd2FzIHJlbW92ZWQgcmlnaHQKKwkJCSAqIGFmdGVyIHdlIGhpdCBpdC4gQW5vdGhlciBjcHUgaGFzIHJlbW92ZWQKKwkJCSAqIGVpdGhlciBhIHByb2JlcG9pbnQgb3IgYSBkZWJ1Z2dlciBicmVha3BvaW50CisJCQkgKiBhdCB0aGlzIGFkZHJlc3MuIEluIGVpdGhlciBjYXNlLCBubyBmdXJ0aGVyCisJCQkgKiBoYW5kbGluZyBvZiB0aGlzIGludGVycnVwdCBpcyBhcHByb3ByaWF0ZS4KKwkJCSAqLworCQkJcmV0ID0gMTsKKwkJfQorCisJCWdvdG8gbm9fa3Byb2JlOworCX0KKworCXNldF9jdXJyZW50X2twcm9iZShwLCByZWdzLCBrY2IpOworCWtjYi0+a3Byb2JlX3N0YXR1cyA9IEtQUk9CRV9ISVRfQUNUSVZFOworCisJaWYgKHAtPnByZV9oYW5kbGVyICYmIHAtPnByZV9oYW5kbGVyKHAsIHJlZ3MpKQorCQkvKiBoYW5kbGVyIGhhcyBhbHJlYWR5IHNldCB0aGluZ3MgdXAsIHNvIHNraXAgc3Mgc2V0dXAgKi8KKwkJcmV0dXJuIDE7CisKK3NzX3Byb2JlOgorCXByZXBhcmVfc2luZ2xlc3RlcChwLCByZWdzKTsKKwlrY2ItPmtwcm9iZV9zdGF0dXMgPSBLUFJPQkVfSElUX1NTOworCXJldHVybiAxOworCitub19rcHJvYmU6CisJcHJlZW1wdF9lbmFibGVfbm9fcmVzY2hlZCgpOworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBGb3IgZnVuY3Rpb24tcmV0dXJuIHByb2JlcywgaW5pdF9rcHJvYmVzKCkgZXN0YWJsaXNoZXMgYSBwcm9iZXBvaW50CisgKiBoZXJlLiBXaGVuIGEgcmV0cHJvYmVkIGZ1bmN0aW9uIHJldHVybnMsIHRoaXMgcHJvYmUgaXMgaGl0IGFuZAorICogdHJhbXBvbGluZV9wcm9iZV9oYW5kbGVyKCkgcnVucywgY2FsbGluZyB0aGUga3JldHByb2JlJ3MgaGFuZGxlci4KKyAqLworc3RhdGljIHZvaWQgX191c2VkIGtyZXRwcm9iZV90cmFtcG9saW5lX2hvbGRlcih2b2lkKQoreworCWFzbSB2b2xhdGlsZSAoIi5nbG9ibCBrcmV0cHJvYmVfdHJhbXBvbGluZVxuIgorCQkgICAgICAia3JldHByb2JlX3RyYW1wb2xpbmU6XG5cdCIKKwkJICAgICAgIm5vcFxuIik7Cit9CisKKy8qCisgKiBDYWxsZWQgd2hlbiB3ZSBoaXQgdGhlIHByb2JlIHBvaW50IGF0IGtyZXRwcm9iZV90cmFtcG9saW5lCisgKi8KK2ludCBfX2twcm9iZXMgdHJhbXBvbGluZV9wcm9iZV9oYW5kbGVyKHN0cnVjdCBrcHJvYmUgKnAsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXN0cnVjdCBrcmV0cHJvYmVfaW5zdGFuY2UgKnJpID0gTlVMTDsKKwlzdHJ1Y3QgaGxpc3RfaGVhZCAqaGVhZCwgZW1wdHlfcnA7CisJc3RydWN0IGhsaXN0X25vZGUgKm5vZGUsICp0bXA7CisJdW5zaWduZWQgbG9uZyBmbGFncywgb3JpZ19yZXRfYWRkcmVzcyA9IDA7CisJdW5zaWduZWQgbG9uZyB0cmFtcG9saW5lX2FkZHJlc3MgPSAodW5zaWduZWQgbG9uZykma3JldHByb2JlX3RyYW1wb2xpbmU7CisKKwlJTklUX0hMSVNUX0hFQUQoJmVtcHR5X3JwKTsKKwlrcmV0cHJvYmVfaGFzaF9sb2NrKGN1cnJlbnQsICZoZWFkLCAmZmxhZ3MpOworCisJLyoKKwkgKiBJdCBpcyBwb3NzaWJsZSB0byBoYXZlIG11bHRpcGxlIGluc3RhbmNlcyBhc3NvY2lhdGVkIHdpdGggYSBnaXZlbgorCSAqIHRhc2sgZWl0aGVyIGJlY2F1c2UgYW4gbXVsdGlwbGUgZnVuY3Rpb25zIGluIHRoZSBjYWxsIHBhdGgKKwkgKiBoYXZlIGEgcmV0dXJuIHByb2JlIGluc3RhbGxlZCBvbiB0aGVtLCBhbmQvb3IgbW9yZSB0aGVuIG9uZSByZXR1cm4KKwkgKiByZXR1cm4gcHJvYmUgd2FzIHJlZ2lzdGVyZWQgZm9yIGEgdGFyZ2V0IGZ1bmN0aW9uLgorCSAqCisJICogV2UgY2FuIGhhbmRsZSB0aGlzIGJlY2F1c2U6CisJICogICAgIC0gaW5zdGFuY2VzIGFyZSBhbHdheXMgaW5zZXJ0ZWQgYXQgdGhlIGhlYWQgb2YgdGhlIGxpc3QKKwkgKiAgICAgLSB3aGVuIG11bHRpcGxlIHJldHVybiBwcm9iZXMgYXJlIHJlZ2lzdGVyZWQgZm9yIHRoZSBzYW1lCisJICogICAgICAgZnVuY3Rpb24sIHRoZSBmaXJzdCBpbnN0YW5jZSdzIHJldF9hZGRyIHdpbGwgcG9pbnQgdG8gdGhlCisJICogICAgICAgcmVhbCByZXR1cm4gYWRkcmVzcywgYW5kIGFsbCB0aGUgcmVzdCB3aWxsIHBvaW50IHRvCisJICogICAgICAga3JldHByb2JlX3RyYW1wb2xpbmUKKwkgKi8KKwlobGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHJpLCBub2RlLCB0bXAsIGhlYWQsIGhsaXN0KSB7CisJCWlmIChyaS0+dGFzayAhPSBjdXJyZW50KQorCQkJLyogYW5vdGhlciB0YXNrIGlzIHNoYXJpbmcgb3VyIGhhc2ggYnVja2V0ICovCisJCQljb250aW51ZTsKKworCQlpZiAocmktPnJwICYmIHJpLT5ycC0+aGFuZGxlcikgeworCQkJX19nZXRfY3B1X3ZhcihjdXJyZW50X2twcm9iZSkgPSAmcmktPnJwLT5rcDsKKwkJCXJpLT5ycC0+aGFuZGxlcihyaSwgcmVncyk7CisJCQlfX2dldF9jcHVfdmFyKGN1cnJlbnRfa3Byb2JlKSA9IE5VTEw7CisJCX0KKworCQlvcmlnX3JldF9hZGRyZXNzID0gKHVuc2lnbmVkIGxvbmcpcmktPnJldF9hZGRyOworCQlyZWN5Y2xlX3JwX2luc3QocmksICZlbXB0eV9ycCk7CisKKwkJaWYgKG9yaWdfcmV0X2FkZHJlc3MgIT0gdHJhbXBvbGluZV9hZGRyZXNzKQorCQkJLyoKKwkJCSAqIFRoaXMgaXMgdGhlIHJlYWwgcmV0dXJuIGFkZHJlc3MuIEFueSBvdGhlcgorCQkJICogaW5zdGFuY2VzIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHRhc2sgYXJlIGZvcgorCQkJICogb3RoZXIgY2FsbHMgZGVlcGVyIG9uIHRoZSBjYWxsIHN0YWNrCisJCQkgKi8KKwkJCWJyZWFrOworCX0KKworCWtyZXRwcm9iZV9hc3NlcnQocmksIG9yaWdfcmV0X2FkZHJlc3MsIHRyYW1wb2xpbmVfYWRkcmVzcyk7CisKKwlyZWdzLT5wYyA9IG9yaWdfcmV0X2FkZHJlc3M7CisJa3JldHByb2JlX2hhc2hfdW5sb2NrKGN1cnJlbnQsICZmbGFncyk7CisKKwlwcmVlbXB0X2VuYWJsZV9ub19yZXNjaGVkKCk7CisKKwlobGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHJpLCBub2RlLCB0bXAsICZlbXB0eV9ycCwgaGxpc3QpIHsKKwkJaGxpc3RfZGVsKCZyaS0+aGxpc3QpOworCQlrZnJlZShyaSk7CisJfQorCisJcmV0dXJuIG9yaWdfcmV0X2FkZHJlc3M7Cit9CisKK3N0YXRpYyBpbnQgX19rcHJvYmVzIHBvc3Rfa3Byb2JlX2hhbmRsZXIoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IGtwcm9iZSAqY3VyID0ga3Byb2JlX3J1bm5pbmcoKTsKKwlzdHJ1Y3Qga3Byb2JlX2N0bGJsayAqa2NiID0gZ2V0X2twcm9iZV9jdGxibGsoKTsKKwlrcHJvYmVfb3Bjb2RlX3QgKmFkZHIgPSBOVUxMOworCXN0cnVjdCBrcHJvYmUgKnAgPSBOVUxMOworCisJaWYgKCFjdXIpCisJCXJldHVybiAwOworCisJaWYgKChrY2ItPmtwcm9iZV9zdGF0dXMgIT0gS1BST0JFX1JFRU5URVIpICYmIGN1ci0+cG9zdF9oYW5kbGVyKSB7CisJCWtjYi0+a3Byb2JlX3N0YXR1cyA9IEtQUk9CRV9ISVRfU1NET05FOworCQljdXItPnBvc3RfaGFuZGxlcihjdXIsIHJlZ3MsIDApOworCX0KKworCWlmIChzYXZlZF9uZXh0X29wY29kZS5hZGRyICE9IDB4MCkgeworCQlhcmNoX2Rpc2FybV9rcHJvYmUoJnNhdmVkX25leHRfb3Bjb2RlKTsKKwkJc2F2ZWRfbmV4dF9vcGNvZGUuYWRkciA9IDB4MDsKKwkJc2F2ZWRfbmV4dF9vcGNvZGUub3Bjb2RlID0gMHgwOworCisJCWFkZHIgPSBzYXZlZF9jdXJyZW50X29wY29kZS5hZGRyOworCQlzYXZlZF9jdXJyZW50X29wY29kZS5hZGRyID0gMHgwOworCisJCXAgPSBnZXRfa3Byb2JlKGFkZHIpOworCQlhcmNoX2FybV9rcHJvYmUocCk7CisKKwkJaWYgKHNhdmVkX25leHRfb3Bjb2RlMi5hZGRyICE9IDB4MCkgeworCQkJYXJjaF9kaXNhcm1fa3Byb2JlKCZzYXZlZF9uZXh0X29wY29kZTIpOworCQkJc2F2ZWRfbmV4dF9vcGNvZGUyLmFkZHIgPSAweDA7CisJCQlzYXZlZF9uZXh0X29wY29kZTIub3Bjb2RlID0gMHgwOworCQl9CisJfQorCisJLyogUmVzdG9yZSBiYWNrIHRoZSBvcmlnaW5hbCBzYXZlZCBrcHJvYmVzIHZhcmlhYmxlcyBhbmQgY29udGludWUuICovCisJaWYgKGtjYi0+a3Byb2JlX3N0YXR1cyA9PSBLUFJPQkVfUkVFTlRFUikgeworCQlyZXN0b3JlX3ByZXZpb3VzX2twcm9iZShrY2IpOworCQlnb3RvIG91dDsKKwl9CisKKwlyZXNldF9jdXJyZW50X2twcm9iZSgpOworCitvdXQ6CisJcHJlZW1wdF9lbmFibGVfbm9fcmVzY2hlZCgpOworCisJcmV0dXJuIDE7Cit9CisKK2ludCBfX2twcm9iZXMga3Byb2JlX2ZhdWx0X2hhbmRsZXIoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIGludCB0cmFwbnIpCit7CisJc3RydWN0IGtwcm9iZSAqY3VyID0ga3Byb2JlX3J1bm5pbmcoKTsKKwlzdHJ1Y3Qga3Byb2JlX2N0bGJsayAqa2NiID0gZ2V0X2twcm9iZV9jdGxibGsoKTsKKwljb25zdCBzdHJ1Y3QgZXhjZXB0aW9uX3RhYmxlX2VudHJ5ICplbnRyeTsKKworCXN3aXRjaCAoa2NiLT5rcHJvYmVfc3RhdHVzKSB7CisJY2FzZSBLUFJPQkVfSElUX1NTOgorCWNhc2UgS1BST0JFX1JFRU5URVI6CisJCS8qCisJCSAqIFdlIGFyZSBoZXJlIGJlY2F1c2UgdGhlIGluc3RydWN0aW9uIGJlaW5nIHNpbmdsZQorCQkgKiBzdGVwcGVkIGNhdXNlZCBhIHBhZ2UgZmF1bHQuIFdlIHJlc2V0IHRoZSBjdXJyZW50CisJCSAqIGtwcm9iZSwgcG9pbnQgdGhlIHBjIGJhY2sgdG8gdGhlIHByb2JlIGFkZHJlc3MKKwkJICogYW5kIGFsbG93IHRoZSBwYWdlIGZhdWx0IGhhbmRsZXIgdG8gY29udGludWUgYXMgYQorCQkgKiBub3JtYWwgcGFnZSBmYXVsdC4KKwkJICovCisJCXJlZ3MtPnBjID0gKHVuc2lnbmVkIGxvbmcpY3VyLT5hZGRyOworCQlpZiAoa2NiLT5rcHJvYmVfc3RhdHVzID09IEtQUk9CRV9SRUVOVEVSKQorCQkJcmVzdG9yZV9wcmV2aW91c19rcHJvYmUoa2NiKTsKKwkJZWxzZQorCQkJcmVzZXRfY3VycmVudF9rcHJvYmUoKTsKKwkJcHJlZW1wdF9lbmFibGVfbm9fcmVzY2hlZCgpOworCQlicmVhazsKKwljYXNlIEtQUk9CRV9ISVRfQUNUSVZFOgorCWNhc2UgS1BST0JFX0hJVF9TU0RPTkU6CisJCS8qCisJCSAqIFdlIGluY3JlbWVudCB0aGUgbm1pc3NlZCBjb3VudCBmb3IgYWNjb3VudGluZywKKwkJICogd2UgY2FuIGFsc28gdXNlIG5wcmUvbnBvc3RmYXVsdCBjb3VudCBmb3IgYWNjb3VudGluZworCQkgKiB0aGVzZSBzcGVjaWZpYyBmYXVsdCBjYXNlcy4KKwkJICovCisJCWtwcm9iZXNfaW5jX25taXNzZWRfY291bnQoY3VyKTsKKworCQkvKgorCQkgKiBXZSBjb21lIGhlcmUgYmVjYXVzZSBpbnN0cnVjdGlvbnMgaW4gdGhlIHByZS9wb3N0CisJCSAqIGhhbmRsZXIgY2F1c2VkIHRoZSBwYWdlX2ZhdWx0LCB0aGlzIGNvdWxkIGhhcHBlbgorCQkgKiBpZiBoYW5kbGVyIHRyaWVzIHRvIGFjY2VzcyB1c2VyIHNwYWNlIGJ5CisJCSAqIGNvcHlfZnJvbV91c2VyKCksIGdldF91c2VyKCkgZXRjLiBMZXQgdGhlCisJCSAqIHVzZXItc3BlY2lmaWVkIGhhbmRsZXIgdHJ5IHRvIGZpeCBpdCBmaXJzdC4KKwkJICovCisJCWlmIChjdXItPmZhdWx0X2hhbmRsZXIgJiYgY3VyLT5mYXVsdF9oYW5kbGVyKGN1ciwgcmVncywgdHJhcG5yKSkKKwkJCXJldHVybiAxOworCisJCS8qCisJCSAqIEluIGNhc2UgdGhlIHVzZXItc3BlY2lmaWVkIGZhdWx0IGhhbmRsZXIgcmV0dXJuZWQKKwkJICogemVybywgdHJ5IHRvIGZpeCB1cC4KKwkJICovCisJCWlmICgoZW50cnkgPSBzZWFyY2hfZXhjZXB0aW9uX3RhYmxlcyhyZWdzLT5wYykpICE9IE5VTEwpIHsKKwkJCXJlZ3MtPnBjID0gZW50cnktPmZpeHVwOworCQkJcmV0dXJuIDE7CisJCX0KKworCQkvKgorCQkgKiBmaXh1cF9leGNlcHRpb24oKSBjb3VsZCBub3QgaGFuZGxlIGl0LAorCQkgKiBMZXQgZG9fcGFnZV9mYXVsdCgpIGZpeCBpdC4KKwkJICovCisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKworCXJldHVybiAwOworfQorCisvKgorICogV3JhcHBlciByb3V0aW5lIHRvIGZvciBoYW5kbGluZyBleGNlcHRpb25zLgorICovCitpbnQgX19rcHJvYmVzIGtwcm9iZV9leGNlcHRpb25zX25vdGlmeShzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnNlbGYsCisJCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgdmFsLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBrcHJvYmUgKnAgPSBOVUxMOworCXN0cnVjdCBkaWVfYXJncyAqYXJncyA9IChzdHJ1Y3QgZGllX2FyZ3MgKilkYXRhOworCWludCByZXQgPSBOT1RJRllfRE9ORTsKKwlrcHJvYmVfb3Bjb2RlX3QgKmFkZHIgPSBOVUxMOworCXN0cnVjdCBrcHJvYmVfY3RsYmxrICprY2IgPSBnZXRfa3Byb2JlX2N0bGJsaygpOworCisJYWRkciA9IChrcHJvYmVfb3Bjb2RlX3QgKikgKGFyZ3MtPnJlZ3MtPnBjKTsKKwlpZiAodmFsID09IERJRV9UUkFQKSB7CisJCWlmICgha3Byb2JlX3J1bm5pbmcoKSkgeworCQkJaWYgKGtwcm9iZV9oYW5kbGVyKGFyZ3MtPnJlZ3MpKSB7CisJCQkJcmV0ID0gTk9USUZZX1NUT1A7CisJCQl9IGVsc2UgeworCQkJCS8qIE5vdCBhIGtwcm9iZSB0cmFwICovCisJCQkJcmV0ID0gTk9USUZZX0RPTkU7CisJCQl9CisJCX0gZWxzZSB7CisJCQlwID0gZ2V0X2twcm9iZShhZGRyKTsKKwkJCWlmICgoa2NiLT5rcHJvYmVfc3RhdHVzID09IEtQUk9CRV9ISVRfU1MpIHx8CisJCQkgICAgKGtjYi0+a3Byb2JlX3N0YXR1cyA9PSBLUFJPQkVfUkVFTlRFUikpIHsKKwkJCQlpZiAocG9zdF9rcHJvYmVfaGFuZGxlcihhcmdzLT5yZWdzKSkKKwkJCQkJcmV0ID0gTk9USUZZX1NUT1A7CisJCQl9IGVsc2UgeworCQkJCWlmIChrcHJvYmVfaGFuZGxlcihhcmdzLT5yZWdzKSkgeworCQkJCQlyZXQgPSBOT1RJRllfU1RPUDsKKwkJCQl9IGVsc2UgeworCQkJCQlwID0gX19nZXRfY3B1X3ZhcihjdXJyZW50X2twcm9iZSk7CisJCQkJCWlmIChwLT5icmVha19oYW5kbGVyICYmCisJCQkJCSAgICBwLT5icmVha19oYW5kbGVyKHAsIGFyZ3MtPnJlZ3MpKQorCQkJCQkJcmV0ID0gTk9USUZZX1NUT1A7CisJCQkJfQorCQkJfQorCQl9CisJfQorCisJcmV0dXJuIHJldDsKK30KKworaW50IF9fa3Byb2JlcyBzZXRqbXBfcHJlX2hhbmRsZXIoc3RydWN0IGtwcm9iZSAqcCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IGpwcm9iZSAqanAgPSBjb250YWluZXJfb2YocCwgc3RydWN0IGpwcm9iZSwga3ApOworCXVuc2lnbmVkIGxvbmcgYWRkcjsKKwlzdHJ1Y3Qga3Byb2JlX2N0bGJsayAqa2NiID0gZ2V0X2twcm9iZV9jdGxibGsoKTsKKworCWtjYi0+anByb2JlX3NhdmVkX3JlZ3MgPSAqcmVnczsKKwlrY2ItPmpwcm9iZV9zYXZlZF9yMTUgPSByZWdzLT5yZWdzWzE1XTsKKwlhZGRyID0ga2NiLT5qcHJvYmVfc2F2ZWRfcjE1OworCisJLyoKKwkgKiBUQkQ6IEFzIExpbnVzIHBvaW50ZWQgb3V0LCBnY2MgYXNzdW1lcyB0aGF0IHRoZSBjYWxsZWUKKwkgKiBvd25zIHRoZSBhcmd1bWVudCBzcGFjZSBhbmQgY291bGQgb3ZlcndyaXRlIGl0LCBlLmcuCisJICogdGFpbGNhbGwgb3B0aW1pemF0aW9uLiBTbywgdG8gYmUgYWJzb2x1dGVseSBzYWZlCisJICogd2UgYWxzbyBzYXZlIGFuZCByZXN0b3JlIGVub3VnaCBzdGFjayBieXRlcyB0byBjb3ZlcgorCSAqIHRoZSBhcmd1bWVudCBhcmVhLgorCSAqLworCW1lbWNweShrY2ItPmpwcm9iZXNfc3RhY2ssIChrcHJvYmVfb3Bjb2RlX3QgKikgYWRkciwKKwkgICAgICAgTUlOX1NUQUNLX1NJWkUoYWRkcikpOworCisJcmVncy0+cGMgPSAodW5zaWduZWQgbG9uZykoanAtPmVudHJ5KTsKKworCXJldHVybiAxOworfQorCit2b2lkIF9fa3Byb2JlcyBqcHJvYmVfcmV0dXJuKHZvaWQpCit7CisJYXNtIHZvbGF0aWxlICgidHJhcGEgIzB4M2Fcblx0IiAianByb2JlX3JldHVybl9lbmQ6XG5cdCIgIm5vcFxuXHQiKTsKK30KKworaW50IF9fa3Byb2JlcyBsb25nam1wX2JyZWFrX2hhbmRsZXIoc3RydWN0IGtwcm9iZSAqcCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IGtwcm9iZV9jdGxibGsgKmtjYiA9IGdldF9rcHJvYmVfY3RsYmxrKCk7CisJdW5zaWduZWQgbG9uZyBzdGFja19hZGRyID0ga2NiLT5qcHJvYmVfc2F2ZWRfcjE1OworCXU4ICphZGRyID0gKHU4ICopcmVncy0+cGM7CisKKwlpZiAoKGFkZHIgPj0gKHU4ICopanByb2JlX3JldHVybikgJiYKKwkgICAgKGFkZHIgPD0gKHU4ICopanByb2JlX3JldHVybl9lbmQpKSB7CisJCSpyZWdzID0ga2NiLT5qcHJvYmVfc2F2ZWRfcmVnczsKKworCQltZW1jcHkoKGtwcm9iZV9vcGNvZGVfdCAqKXN0YWNrX2FkZHIsIGtjYi0+anByb2Jlc19zdGFjaywKKwkJICAgICAgIE1JTl9TVEFDS19TSVpFKHN0YWNrX2FkZHIpKTsKKworCQlrY2ItPmtwcm9iZV9zdGF0dXMgPSBLUFJPQkVfSElUX1NTOworCQlwcmVlbXB0X2VuYWJsZV9ub19yZXNjaGVkKCk7CisJCXJldHVybiAxOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGtwcm9iZSB0cmFtcG9saW5lX3AgPSB7CisJLmFkZHIgPSAoa3Byb2JlX29wY29kZV90ICopJmtyZXRwcm9iZV90cmFtcG9saW5lLAorCS5wcmVfaGFuZGxlciA9IHRyYW1wb2xpbmVfcHJvYmVfaGFuZGxlcgorfTsKKworaW50IF9faW5pdCBhcmNoX2luaXRfa3Byb2Jlcyh2b2lkKQoreworCXNhdmVkX25leHRfb3Bjb2RlLmFkZHIgPSAweDA7CisJc2F2ZWRfbmV4dF9vcGNvZGUub3Bjb2RlID0gMHgwOworCisJc2F2ZWRfY3VycmVudF9vcGNvZGUuYWRkciA9IDB4MDsKKwlzYXZlZF9jdXJyZW50X29wY29kZS5vcGNvZGUgPSAweDA7CisKKwlzYXZlZF9uZXh0X29wY29kZTIuYWRkciA9IDB4MDsKKwlzYXZlZF9uZXh0X29wY29kZTIub3Bjb2RlID0gMHgwOworCisJcmV0dXJuIHJlZ2lzdGVyX2twcm9iZSgmdHJhbXBvbGluZV9wKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL21hY2h2ZWMuYyBiL2FyY2gvc2gva2VybmVsL21hY2h2ZWMuYwppbmRleCAxMjliMmNmLi5jMWVhNDFlIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9tYWNodmVjLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvbWFjaHZlYy5jCkBAIC0xNCw2ICsxNCw3IEBACiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAjaW5jbHVkZSA8YXNtL21hY2h2ZWMuaD4KICNpbmNsdWRlIDxhc20vc2VjdGlvbnMuaD4KKyNpbmNsdWRlIDxhc20vc2V0dXAuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vaXJxLmg+CiAKQEAgLTEyNSw5ICsxMjYsNiBAQAogCW12X3NldChpbnNiKTsJbXZfc2V0KGluc3cpOwltdl9zZXQoaW5zbCk7CiAJbXZfc2V0KG91dHNiKTsJbXZfc2V0KG91dHN3KTsJbXZfc2V0KG91dHNsKTsKIAotCW12X3NldChyZWFkYik7CW12X3NldChyZWFkdyk7CW12X3NldChyZWFkbCk7Ci0JbXZfc2V0KHdyaXRlYik7CW12X3NldCh3cml0ZXcpOwltdl9zZXQod3JpdGVsKTsKLQogCW12X3NldChpb3BvcnRfbWFwKTsKIAltdl9zZXQoaW9wb3J0X3VubWFwKTsKIAltdl9zZXQoaXJxX2RlbXV4KTsKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL3Byb2Nlc3NfMzIuYyBiL2FyY2gvc2gva2VybmVsL3Byb2Nlc3NfMzIuYwppbmRleCAzMzI2YTQ1Li5iOTY1ZjAyIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9wcm9jZXNzXzMyLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvcHJvY2Vzc18zMi5jCkBAIC03LDcgKzcsMTEgQEAKICAqCiAgKiAgU3VwZXJIIHZlcnNpb246ICBDb3B5cmlnaHQgKEMpIDE5OTksIDIwMDAgIE5paWJlIFl1dGFrYSAmIEtheiBLb2ppbWEKICAqCQkgICAgIENvcHlyaWdodCAoQykgMjAwNiBMaW5lbyBTb2x1dGlvbnMgSW5jLiBzdXBwb3J0IFNINEEgVUJDCi0gKgkJICAgICBDb3B5cmlnaHQgKEMpIDIwMDIgLSAyMDA3ICBQYXVsIE11bmR0CisgKgkJICAgICBDb3B5cmlnaHQgKEMpIDIwMDIgLSAyMDA4ICBQYXVsIE11bmR0CisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCiAgKi8KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgpAQCAtMjYsNiArMzAsNyBAQAogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KICNpbmNsdWRlIDxhc20vdWJjLmg+CiAjaW5jbHVkZSA8YXNtL2ZwdS5oPgorI2luY2x1ZGUgPGFzbS9zeXNjYWxscy5oPgogCiBzdGF0aWMgaW50IGhsdF9jb3VudGVyOwogaW50IHViY191c2VyY250ID0gMDsKQEAgLTExMSwxNSArMTE2LDIxIEBACiB7CiAJcHJpbnRrKCJcbiIpOwogCXByaW50aygiUGlkIDogJWQsIENvbW06ICUyMHNcbiIsIHRhc2tfcGlkX25yKGN1cnJlbnQpLCBjdXJyZW50LT5jb21tKTsKKwlwcmludGsoIkNQVSA6ICVkICAgICVzICAoJXMgJS4qcylcbiIsCisJICAgICAgIHNtcF9wcm9jZXNzb3JfaWQoKSwgcHJpbnRfdGFpbnRlZCgpLCBpbml0X3V0c25hbWUoKS0+cmVsZWFzZSwKKwkgICAgICAgKGludClzdHJjc3BuKGluaXRfdXRzbmFtZSgpLT52ZXJzaW9uLCAiICIpLAorCSAgICAgICBpbml0X3V0c25hbWUoKS0+dmVyc2lvbik7CisKIAlwcmludF9zeW1ib2woIlBDIGlzIGF0ICVzXG4iLCBpbnN0cnVjdGlvbl9wb2ludGVyKHJlZ3MpKTsKKwlwcmludF9zeW1ib2woIlBSIGlzIGF0ICVzXG4iLCByZWdzLT5wcik7CisKIAlwcmludGsoIlBDICA6ICUwOGx4IFNQICA6ICUwOGx4IFNSICA6ICUwOGx4ICIsCiAJICAgICAgIHJlZ3MtPnBjLCByZWdzLT5yZWdzWzE1XSwgcmVncy0+c3IpOwogI2lmZGVmIENPTkZJR19NTVUKLQlwcmludGsoIlRFQSA6ICUwOHggICAgIiwgY3RybF9pbmwoTU1VX1RFQSkpOworCXByaW50aygiVEVBIDogJTA4eFxuIiwgY3RybF9pbmwoTU1VX1RFQSkpOwogI2Vsc2UKLQlwcmludGsoIiAgICAgICAgICAgICAgICAgICIpOworCXByaW50aygiXG4iKTsKICNlbmRpZgotCXByaW50aygiJXNcbiIsIHByaW50X3RhaW50ZWQoKSk7CiAKIAlwcmludGsoIlIwICA6ICUwOGx4IFIxICA6ICUwOGx4IFIyICA6ICUwOGx4IFIzICA6ICUwOGx4XG4iLAogCSAgICAgICByZWdzLT5yZWdzWzBdLHJlZ3MtPnJlZ3NbMV0sCkBAIC0xNjIsNiArMTczLDcgQEAKIGludCBrZXJuZWxfdGhyZWFkKGludCAoKmZuKSh2b2lkICopLCB2b2lkICogYXJnLCB1bnNpZ25lZCBsb25nIGZsYWdzKQogewogCXN0cnVjdCBwdF9yZWdzIHJlZ3M7CisJaW50IHBpZDsKIAogCW1lbXNldCgmcmVncywgMCwgc2l6ZW9mKHJlZ3MpKTsKIAlyZWdzLnJlZ3NbNF0gPSAodW5zaWduZWQgbG9uZylhcmc7CkBAIC0xNzEsOCArMTgzLDEyIEBACiAJcmVncy5zciA9ICgxIDw8IDMwKTsKIAogCS8qIE9rLCBjcmVhdGUgdGhlIG5ldyBwcm9jZXNzLi4gKi8KLQlyZXR1cm4gZG9fZm9yayhmbGFncyB8IENMT05FX1ZNIHwgQ0xPTkVfVU5UUkFDRUQsIDAsCi0JCSAgICAgICAmcmVncywgMCwgTlVMTCwgTlVMTCk7CisJcGlkID0gZG9fZm9yayhmbGFncyB8IENMT05FX1ZNIHwgQ0xPTkVfVU5UUkFDRUQsIDAsCisJCSAgICAgICZyZWdzLCAwLCBOVUxMLCBOVUxMKTsKKworCXRyYWNlX21hcmsoa2VybmVsX2FyY2hfa3RocmVhZF9jcmVhdGUsICJwaWQgJWQgZm4gJXAiLCBwaWQsIGZuKTsKKworCXJldHVybiBwaWQ7CiB9CiAKIC8qCkBAIC0yMTAsMTAgKzIyNiwxMCBAQAogCXN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrID0gY3VycmVudDsKIAogCWZwdmFsaWQgPSAhIXRza191c2VkX21hdGgodHNrKTsKLQlpZiAoZnB2YWxpZCkgewotCQl1bmxhenlfZnB1KHRzaywgcmVncyk7Ci0JCW1lbWNweShmcHUsICZ0c2stPnRocmVhZC5mcHUuaGFyZCwgc2l6ZW9mKCpmcHUpKTsKLQl9CisJaWYgKGZwdmFsaWQpCisJCWZwdmFsaWQgPSAhZnByZWdzX2dldCh0c2ssIE5VTEwsIDAsCisJCQkJICAgICAgc2l6ZW9mKHN0cnVjdCB1c2VyX2ZwdV9zdHJ1Y3QpLAorCQkJCSAgICAgIGZwdSwgTlVMTCk7CiAjZW5kaWYKIAogCXJldHVybiBmcHZhbGlkOwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvcHJvY2Vzc182NC5jIGIvYXJjaC9zaC9rZXJuZWwvcHJvY2Vzc182NC5jCmluZGV4IGI5ZGJkMmQuLmI3YWEwOTIgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL3Byb2Nlc3NfNjQuYworKysgYi9hcmNoL3NoL2tlcm5lbC9wcm9jZXNzXzY0LmMKQEAgLTI1LDYgKzI1LDcgQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxhc20vc3lzY2FsbHMuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CiAjaW5jbHVkZSA8YXNtL21tdV9jb250ZXh0Lmg+CkBAIC0zOTUsNiArMzk2LDcgQEAKIGludCBrZXJuZWxfdGhyZWFkKGludCAoKmZuKSh2b2lkICopLCB2b2lkICogYXJnLCB1bnNpZ25lZCBsb25nIGZsYWdzKQogewogCXN0cnVjdCBwdF9yZWdzIHJlZ3M7CisJaW50IHBpZDsKIAogCW1lbXNldCgmcmVncywgMCwgc2l6ZW9mKHJlZ3MpKTsKIAlyZWdzLnJlZ3NbMl0gPSAodW5zaWduZWQgbG9uZylhcmc7CkBAIC00MDMsOCArNDA1LDEzIEBACiAJcmVncy5wYyA9ICh1bnNpZ25lZCBsb25nKWtlcm5lbF90aHJlYWRfaGVscGVyOwogCXJlZ3Muc3IgPSAoMSA8PCAzMCk7CiAKLQlyZXR1cm4gZG9fZm9yayhmbGFncyB8IENMT05FX1ZNIHwgQ0xPTkVfVU5UUkFDRUQsIDAsCi0JCSAgICAgICAmcmVncywgMCwgTlVMTCwgTlVMTCk7CisJLyogT2ssIGNyZWF0ZSB0aGUgbmV3IHByb2Nlc3MuLiAqLworCXBpZCA9IGRvX2ZvcmsoZmxhZ3MgfCBDTE9ORV9WTSB8IENMT05FX1VOVFJBQ0VELCAwLAorCQkgICAgICAmcmVncywgMCwgTlVMTCwgTlVMTCk7CisKKwl0cmFjZV9tYXJrKGtlcm5lbF9hcmNoX2t0aHJlYWRfY3JlYXRlLCAicGlkICVkIGZuICVwIiwgcGlkLCBmbik7CisKKwlyZXR1cm4gcGlkOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvcHRyYWNlXzMyLmMgYi9hcmNoL3NoL2tlcm5lbC9wdHJhY2VfMzIuYwppbmRleCAwMzVjYjMwLi4yOWNhMDlkIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9wdHJhY2VfMzIuYworKysgYi9hcmNoL3NoL2tlcm5lbC9wdHJhY2VfMzIuYwpAQCAtMSwxMiArMSwxNCBAQAogLyoKLSAqIGxpbnV4L2FyY2gvc2gva2VybmVsL3B0cmFjZS5jCisgKiBTdXBlckggcHJvY2VzcyB0cmFjaW5nCiAgKgotICogT3JpZ2luYWwgeDg2IGltcGxlbWVudGF0aW9uOgotICoJQnkgUm9zcyBCaXJvIDEvMjMvOTIKLSAqCWVkaXRlZCBieSBMaW51cyBUb3J2YWxkcworICogQ29weXJpZ2h0IChDKSAxOTk5LCAyMDAwICBLYXogS29qaW1hICYgTmlpYmUgWXV0YWthCisgKiBDb3B5cmlnaHQgKEMpIDIwMDIgLSAyMDA4ICBQYXVsIE11bmR0CiAgKgotICogU3VwZXJIIHZlcnNpb246ICAgQ29weXJpZ2h0IChDKSAxOTk5LCAyMDAwICBLYXogS29qaW1hICYgTmlpYmUgWXV0YWthCi0gKiBBdWRpdCBzdXBwb3J0OiBZdWljaGkgTmFrYW11cmEgPHluYWthbUBoaXRhY2hpc29mdC5qcD4KKyAqIEF1ZGl0IHN1cHBvcnQgYnkgWXVpY2hpIE5ha2FtdXJhIDx5bmFrYW1AaGl0YWNoaXNvZnQuanA+CisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCiAgKi8KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgpAQCAtMjIsMTYgKzI0LDE1IEBACiAjaW5jbHVkZSA8bGludXgvYXVkaXQuaD4KICNpbmNsdWRlIDxsaW51eC9zZWNjb21wLmg+CiAjaW5jbHVkZSA8bGludXgvdHJhY2Vob29rLmg+CisjaW5jbHVkZSA8bGludXgvZWxmLmg+CisjaW5jbHVkZSA8bGludXgvcmVnc2V0Lmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CiAjaW5jbHVkZSA8YXNtL21tdV9jb250ZXh0Lmg+Ci0KLS8qCi0gKiBkb2VzIG5vdCB5ZXQgY2F0Y2ggc2lnbmFscyBzZW50IHdoZW4gdGhlIGNoaWxkIGRpZXMuCi0gKiBpbiBleGl0LmMgb3IgaW4gc2lnbmFsLmMuCi0gKi8KKyNpbmNsdWRlIDxhc20vc3lzY2FsbHMuaD4KKyNpbmNsdWRlIDxhc20vZnB1Lmg+CiAKIC8qCiAgKiBUaGlzIHJvdXRpbmUgd2lsbCBnZXQgYSB3b3JkIG9mZiBvZiB0aGUgcHJvY2VzcyBrZXJuZWwgc3RhY2suCkBAIC02MSwxNiArNjIsMTIgQEAKIAogdm9pZCB1c2VyX2VuYWJsZV9zaW5nbGVfc3RlcChzdHJ1Y3QgdGFza19zdHJ1Y3QgKmNoaWxkKQogewotCXN0cnVjdCBwdF9yZWdzICpyZWdzID0gdGFza19wdF9yZWdzKGNoaWxkKTsKLQlsb25nIHBjOwotCi0JcGMgPSBnZXRfc3RhY2tfbG9uZyhjaGlsZCwgKGxvbmcpJnJlZ3MtPnBjKTsKLQogCS8qIE5leHQgc2NoZWR1bGluZyB3aWxsIHNldCB1cCBVQkMgKi8KIAlpZiAoY2hpbGQtPnRocmVhZC51YmNfcGMgPT0gMCkKIAkJdWJjX3VzZXJjbnQgKz0gMTsKIAotCWNoaWxkLT50aHJlYWQudWJjX3BjID0gcGM7CisJY2hpbGQtPnRocmVhZC51YmNfcGMgPSBnZXRfc3RhY2tfbG9uZyhjaGlsZCwKKwkJCQlvZmZzZXRvZihzdHJ1Y3QgcHRfcmVncywgcGMpKTsKIAogCXNldF90c2tfdGhyZWFkX2ZsYWcoY2hpbGQsIFRJRl9TSU5HTEVTVEVQKTsKIH0KQEAgLTEwMiw5ICs5OSwyMTMgQEAKIAl1c2VyX2Rpc2FibGVfc2luZ2xlX3N0ZXAoY2hpbGQpOwogfQogCitzdGF0aWMgaW50IGdlbnJlZ3NfZ2V0KHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFyZ2V0LAorCQkgICAgICAgY29uc3Qgc3RydWN0IHVzZXJfcmVnc2V0ICpyZWdzZXQsCisJCSAgICAgICB1bnNpZ25lZCBpbnQgcG9zLCB1bnNpZ25lZCBpbnQgY291bnQsCisJCSAgICAgICB2b2lkICprYnVmLCB2b2lkIF9fdXNlciAqdWJ1ZikKK3sKKwljb25zdCBzdHJ1Y3QgcHRfcmVncyAqcmVncyA9IHRhc2tfcHRfcmVncyh0YXJnZXQpOworCWludCByZXQ7CisKKwlyZXQgPSB1c2VyX3JlZ3NldF9jb3B5b3V0KCZwb3MsICZjb3VudCwgJmtidWYsICZ1YnVmLAorCQkJCSAgcmVncy0+cmVncywKKwkJCQkgIDAsIDE2ICogc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKTsKKwlpZiAoIXJldCkKKwkJLyogUEMsIFBSLCBTUiwgR0JSLCBNQUNILCBNQUNMLCBUUkEgKi8KKwkJcmV0ID0gdXNlcl9yZWdzZXRfY29weW91dCgmcG9zLCAmY291bnQsICZrYnVmLCAmdWJ1ZiwKKwkJCQkJICAmcmVncy0+cGMsCisJCQkJCSAgb2Zmc2V0b2Yoc3RydWN0IHB0X3JlZ3MsIHBjKSwKKwkJCQkJICBzaXplb2Yoc3RydWN0IHB0X3JlZ3MpKTsKKwlpZiAoIXJldCkKKwkJcmV0ID0gdXNlcl9yZWdzZXRfY29weW91dF96ZXJvKCZwb3MsICZjb3VudCwgJmtidWYsICZ1YnVmLAorCQkJCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBwdF9yZWdzKSwgLTEpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBnZW5yZWdzX3NldChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhcmdldCwKKwkJICAgICAgIGNvbnN0IHN0cnVjdCB1c2VyX3JlZ3NldCAqcmVnc2V0LAorCQkgICAgICAgdW5zaWduZWQgaW50IHBvcywgdW5zaWduZWQgaW50IGNvdW50LAorCQkgICAgICAgY29uc3Qgdm9pZCAqa2J1ZiwgY29uc3Qgdm9pZCBfX3VzZXIgKnVidWYpCit7CisJc3RydWN0IHB0X3JlZ3MgKnJlZ3MgPSB0YXNrX3B0X3JlZ3ModGFyZ2V0KTsKKwlpbnQgcmV0OworCisJcmV0ID0gdXNlcl9yZWdzZXRfY29weWluKCZwb3MsICZjb3VudCwgJmtidWYsICZ1YnVmLAorCQkJCSByZWdzLT5yZWdzLAorCQkJCSAwLCAxNiAqIHNpemVvZih1bnNpZ25lZCBsb25nKSk7CisJaWYgKCFyZXQgJiYgY291bnQgPiAwKQorCQlyZXQgPSB1c2VyX3JlZ3NldF9jb3B5aW4oJnBvcywgJmNvdW50LCAma2J1ZiwgJnVidWYsCisJCQkJCSAmcmVncy0+cGMsCisJCQkJCSBvZmZzZXRvZihzdHJ1Y3QgcHRfcmVncywgcGMpLAorCQkJCQkgc2l6ZW9mKHN0cnVjdCBwdF9yZWdzKSk7CisJaWYgKCFyZXQpCisJCXJldCA9IHVzZXJfcmVnc2V0X2NvcHlpbl9pZ25vcmUoJnBvcywgJmNvdW50LCAma2J1ZiwgJnVidWYsCisJCQkJCQlzaXplb2Yoc3RydWN0IHB0X3JlZ3MpLCAtMSk7CisKKwlyZXR1cm4gcmV0OworfQorCisjaWZkZWYgQ09ORklHX1NIX0ZQVQoraW50IGZwcmVnc19nZXQoc3RydWN0IHRhc2tfc3RydWN0ICp0YXJnZXQsCisJICAgICAgIGNvbnN0IHN0cnVjdCB1c2VyX3JlZ3NldCAqcmVnc2V0LAorCSAgICAgICB1bnNpZ25lZCBpbnQgcG9zLCB1bnNpZ25lZCBpbnQgY291bnQsCisJICAgICAgIHZvaWQgKmtidWYsIHZvaWQgX191c2VyICp1YnVmKQoreworCWludCByZXQ7CisKKwlyZXQgPSBpbml0X2ZwdSh0YXJnZXQpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlpZiAoKGJvb3RfY3B1X2RhdGEuZmxhZ3MgJiBDUFVfSEFTX0ZQVSkpCisJCXJldHVybiB1c2VyX3JlZ3NldF9jb3B5b3V0KCZwb3MsICZjb3VudCwgJmtidWYsICZ1YnVmLAorCQkJCQkgICAmdGFyZ2V0LT50aHJlYWQuZnB1LmhhcmQsIDAsIC0xKTsKKworCXJldHVybiB1c2VyX3JlZ3NldF9jb3B5b3V0KCZwb3MsICZjb3VudCwgJmtidWYsICZ1YnVmLAorCQkJCSAgICZ0YXJnZXQtPnRocmVhZC5mcHUuc29mdCwgMCwgLTEpOworfQorCitzdGF0aWMgaW50IGZwcmVnc19zZXQoc3RydWN0IHRhc2tfc3RydWN0ICp0YXJnZXQsCisJCSAgICAgICBjb25zdCBzdHJ1Y3QgdXNlcl9yZWdzZXQgKnJlZ3NldCwKKwkJICAgICAgIHVuc2lnbmVkIGludCBwb3MsIHVuc2lnbmVkIGludCBjb3VudCwKKwkJICAgICAgIGNvbnN0IHZvaWQgKmtidWYsIGNvbnN0IHZvaWQgX191c2VyICp1YnVmKQoreworCWludCByZXQ7CisKKwlyZXQgPSBpbml0X2ZwdSh0YXJnZXQpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlzZXRfc3RvcHBlZF9jaGlsZF91c2VkX21hdGgodGFyZ2V0KTsKKworCWlmICgoYm9vdF9jcHVfZGF0YS5mbGFncyAmIENQVV9IQVNfRlBVKSkKKwkJcmV0dXJuIHVzZXJfcmVnc2V0X2NvcHlpbigmcG9zLCAmY291bnQsICZrYnVmLCAmdWJ1ZiwKKwkJCQkJICAmdGFyZ2V0LT50aHJlYWQuZnB1LmhhcmQsIDAsIC0xKTsKKworCXJldHVybiB1c2VyX3JlZ3NldF9jb3B5aW4oJnBvcywgJmNvdW50LCAma2J1ZiwgJnVidWYsCisJCQkJICAmdGFyZ2V0LT50aHJlYWQuZnB1LnNvZnQsIDAsIC0xKTsKK30KKworc3RhdGljIGludCBmcHJlZ3NfYWN0aXZlKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFyZ2V0LAorCQkJIGNvbnN0IHN0cnVjdCB1c2VyX3JlZ3NldCAqcmVnc2V0KQoreworCXJldHVybiB0c2tfdXNlZF9tYXRoKHRhcmdldCkgPyByZWdzZXQtPm4gOiAwOworfQorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfU0hfRFNQCitzdGF0aWMgaW50IGRzcHJlZ3NfZ2V0KHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFyZ2V0LAorCQkgICAgICAgY29uc3Qgc3RydWN0IHVzZXJfcmVnc2V0ICpyZWdzZXQsCisJCSAgICAgICB1bnNpZ25lZCBpbnQgcG9zLCB1bnNpZ25lZCBpbnQgY291bnQsCisJCSAgICAgICB2b2lkICprYnVmLCB2b2lkIF9fdXNlciAqdWJ1ZikKK3sKKwljb25zdCBzdHJ1Y3QgcHRfZHNwcmVncyAqcmVncyA9IHRhc2tfcHRfZHNwcmVncyh0YXJnZXQpOworCWludCByZXQ7CisKKwlyZXQgPSB1c2VyX3JlZ3NldF9jb3B5b3V0KCZwb3MsICZjb3VudCwgJmtidWYsICZ1YnVmLCByZWdzLAorCQkJCSAgMCwgc2l6ZW9mKHN0cnVjdCBwdF9kc3ByZWdzKSk7CisJaWYgKCFyZXQpCisJCXJldCA9IHVzZXJfcmVnc2V0X2NvcHlvdXRfemVybygmcG9zLCAmY291bnQsICZrYnVmLCAmdWJ1ZiwKKwkJCQkJICAgICAgIHNpemVvZihzdHJ1Y3QgcHRfZHNwcmVncyksIC0xKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgZHNwcmVnc19zZXQoc3RydWN0IHRhc2tfc3RydWN0ICp0YXJnZXQsCisJCSAgICAgICBjb25zdCBzdHJ1Y3QgdXNlcl9yZWdzZXQgKnJlZ3NldCwKKwkJICAgICAgIHVuc2lnbmVkIGludCBwb3MsIHVuc2lnbmVkIGludCBjb3VudCwKKwkJICAgICAgIGNvbnN0IHZvaWQgKmtidWYsIGNvbnN0IHZvaWQgX191c2VyICp1YnVmKQoreworCXN0cnVjdCBwdF9kc3ByZWdzICpyZWdzID0gdGFza19wdF9kc3ByZWdzKHRhcmdldCk7CisJaW50IHJldDsKKworCXJldCA9IHVzZXJfcmVnc2V0X2NvcHlpbigmcG9zLCAmY291bnQsICZrYnVmLCAmdWJ1ZiwgcmVncywKKwkJCQkgMCwgc2l6ZW9mKHN0cnVjdCBwdF9kc3ByZWdzKSk7CisJaWYgKCFyZXQpCisJCXJldCA9IHVzZXJfcmVnc2V0X2NvcHlpbl9pZ25vcmUoJnBvcywgJmNvdW50LCAma2J1ZiwgJnVidWYsCisJCQkJCQlzaXplb2Yoc3RydWN0IHB0X2RzcHJlZ3MpLCAtMSk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGRzcHJlZ3NfYWN0aXZlKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFyZ2V0LAorCQkJICBjb25zdCBzdHJ1Y3QgdXNlcl9yZWdzZXQgKnJlZ3NldCkKK3sKKwlzdHJ1Y3QgcHRfcmVncyAqcmVncyA9IHRhc2tfcHRfcmVncyh0YXJnZXQpOworCisJcmV0dXJuIHJlZ3MtPnNyICYgU1JfRFNQID8gcmVnc2V0LT5uIDogMDsKK30KKyNlbmRpZgorCisvKgorICogVGhlc2UgYXJlIG91ciBuYXRpdmUgcmVnc2V0IGZsYXZvdXJzLgorICovCitlbnVtIHNoX3JlZ3NldCB7CisJUkVHU0VUX0dFTkVSQUwsCisjaWZkZWYgQ09ORklHX1NIX0ZQVQorCVJFR1NFVF9GUFUsCisjZW5kaWYKKyNpZmRlZiBDT05GSUdfU0hfRFNQCisJUkVHU0VUX0RTUCwKKyNlbmRpZgorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2VyX3JlZ3NldCBzaF9yZWdzZXRzW10gPSB7CisJLyoKKwkgKiBGb3JtYXQgaXM6CisJICoJUjAgLS0+IFIxNQorCSAqCVBDLCBQUiwgU1IsIEdCUiwgTUFDSCwgTUFDTCwgVFJBCisJICovCisJW1JFR1NFVF9HRU5FUkFMXSA9IHsKKwkJLmNvcmVfbm90ZV90eXBlCT0gTlRfUFJTVEFUVVMsCisJCS5uCQk9IEVMRl9OR1JFRywKKwkJLnNpemUJCT0gc2l6ZW9mKGxvbmcpLAorCQkuYWxpZ24JCT0gc2l6ZW9mKGxvbmcpLAorCQkuZ2V0CQk9IGdlbnJlZ3NfZ2V0LAorCQkuc2V0CQk9IGdlbnJlZ3Nfc2V0LAorCX0sCisKKyNpZmRlZiBDT05GSUdfU0hfRlBVCisJW1JFR1NFVF9GUFVdID0geworCQkuY29yZV9ub3RlX3R5cGUJPSBOVF9QUkZQUkVHLAorCQkubgkJPSBzaXplb2Yoc3RydWN0IHVzZXJfZnB1X3N0cnVjdCkgLyBzaXplb2YobG9uZyksCisJCS5zaXplCQk9IHNpemVvZihsb25nKSwKKwkJLmFsaWduCQk9IHNpemVvZihsb25nKSwKKwkJLmdldAkJPSBmcHJlZ3NfZ2V0LAorCQkuc2V0CQk9IGZwcmVnc19zZXQsCisJCS5hY3RpdmUJCT0gZnByZWdzX2FjdGl2ZSwKKwl9LAorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfU0hfRFNQCisJW1JFR1NFVF9EU1BdID0geworCQkubgkJPSBzaXplb2Yoc3RydWN0IHB0X2RzcHJlZ3MpIC8gc2l6ZW9mKGxvbmcpLAorCQkuc2l6ZQkJPSBzaXplb2YobG9uZyksCisJCS5hbGlnbgkJPSBzaXplb2YobG9uZyksCisJCS5nZXQJCT0gZHNwcmVnc19nZXQsCisJCS5zZXQJCT0gZHNwcmVnc19zZXQsCisJCS5hY3RpdmUJCT0gZHNwcmVnc19hY3RpdmUsCisJfSwKKyNlbmRpZgorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2VyX3JlZ3NldF92aWV3IHVzZXJfc2hfbmF0aXZlX3ZpZXcgPSB7CisJLm5hbWUJCT0gInNoIiwKKwkuZV9tYWNoaW5lCT0gRU1fU0gsCisJLnJlZ3NldHMJPSBzaF9yZWdzZXRzLAorCS5uCQk9IEFSUkFZX1NJWkUoc2hfcmVnc2V0cyksCit9OworCitjb25zdCBzdHJ1Y3QgdXNlcl9yZWdzZXRfdmlldyAqdGFza191c2VyX3JlZ3NldF92aWV3KHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaykKK3sKKwlyZXR1cm4gJnVzZXJfc2hfbmF0aXZlX3ZpZXc7Cit9CisKIGxvbmcgYXJjaF9wdHJhY2Uoc3RydWN0IHRhc2tfc3RydWN0ICpjaGlsZCwgbG9uZyByZXF1ZXN0LCBsb25nIGFkZHIsIGxvbmcgZGF0YSkKIHsKIAlzdHJ1Y3QgdXNlciAqIGR1bW15ID0gTlVMTDsKKwl1bnNpZ25lZCBsb25nIF9fdXNlciAqZGF0YXAgPSAodW5zaWduZWQgbG9uZyBfX3VzZXIgKilkYXRhOwogCWludCByZXQ7CiAKIAlzd2l0Y2ggKHJlcXVlc3QpIHsKQEAgLTEzMyw3ICszMzQsNyBAQAogCQkJdG1wID0gISF0c2tfdXNlZF9tYXRoKGNoaWxkKTsKIAkJZWxzZQogCQkJdG1wID0gMDsKLQkJcmV0ID0gcHV0X3VzZXIodG1wLCAodW5zaWduZWQgbG9uZyBfX3VzZXIgKilkYXRhKTsKKwkJcmV0ID0gcHV0X3VzZXIodG1wLCBkYXRhcCk7CiAJCWJyZWFrOwogCX0KIApAQCAtMTU3LDM0ICszNTgsMzkgQEAKIAkJfQogCQlicmVhazsKIAorCWNhc2UgUFRSQUNFX0dFVFJFR1M6CisJCXJldHVybiBjb3B5X3JlZ3NldF90b191c2VyKGNoaWxkLCAmdXNlcl9zaF9uYXRpdmVfdmlldywKKwkJCQkJICAgUkVHU0VUX0dFTkVSQUwsCisJCQkJCSAgIDAsIHNpemVvZihzdHJ1Y3QgcHRfcmVncyksCisJCQkJCSAgICh2b2lkIF9fdXNlciAqKWRhdGEpOworCWNhc2UgUFRSQUNFX1NFVFJFR1M6CisJCXJldHVybiBjb3B5X3JlZ3NldF9mcm9tX3VzZXIoY2hpbGQsICZ1c2VyX3NoX25hdGl2ZV92aWV3LAorCQkJCQkgICAgIFJFR1NFVF9HRU5FUkFMLAorCQkJCQkgICAgIDAsIHNpemVvZihzdHJ1Y3QgcHRfcmVncyksCisJCQkJCSAgICAgKGNvbnN0IHZvaWQgX191c2VyICopZGF0YSk7CisjaWZkZWYgQ09ORklHX1NIX0ZQVQorCWNhc2UgUFRSQUNFX0dFVEZQUkVHUzoKKwkJcmV0dXJuIGNvcHlfcmVnc2V0X3RvX3VzZXIoY2hpbGQsICZ1c2VyX3NoX25hdGl2ZV92aWV3LAorCQkJCQkgICBSRUdTRVRfRlBVLAorCQkJCQkgICAwLCBzaXplb2Yoc3RydWN0IHVzZXJfZnB1X3N0cnVjdCksCisJCQkJCSAgICh2b2lkIF9fdXNlciAqKWRhdGEpOworCWNhc2UgUFRSQUNFX1NFVEZQUkVHUzoKKwkJcmV0dXJuIGNvcHlfcmVnc2V0X2Zyb21fdXNlcihjaGlsZCwgJnVzZXJfc2hfbmF0aXZlX3ZpZXcsCisJCQkJCSAgICAgUkVHU0VUX0ZQVSwKKwkJCQkJICAgICAwLCBzaXplb2Yoc3RydWN0IHVzZXJfZnB1X3N0cnVjdCksCisJCQkJCSAgICAgKGNvbnN0IHZvaWQgX191c2VyICopZGF0YSk7CisjZW5kaWYKICNpZmRlZiBDT05GSUdfU0hfRFNQCi0JY2FzZSBQVFJBQ0VfR0VURFNQUkVHUzogewotCQl1bnNpZ25lZCBsb25nIGRwOwotCi0JCXJldCA9IC1FSU87Ci0JCWRwID0gKCh1bnNpZ25lZCBsb25nKSBjaGlsZCkgKyBUSFJFQURfU0laRSAtCi0JCQkgc2l6ZW9mKHN0cnVjdCBwdF9kc3ByZWdzKTsKLQkJaWYgKCooKGludCAqKSAoZHAgLSA0KSkgPT0gU1JfRkQpIHsKLQkJCWNvcHlfdG9fdXNlcigodm9pZCAqKWFkZHIsICh2b2lkICopIGRwLAotCQkJCXNpemVvZihzdHJ1Y3QgcHRfZHNwcmVncykpOwotCQkJcmV0ID0gMDsKLQkJfQotCQlicmVhazsKLQl9Ci0KLQljYXNlIFBUUkFDRV9TRVREU1BSRUdTOiB7Ci0JCXVuc2lnbmVkIGxvbmcgZHA7Ci0KLQkJcmV0ID0gLUVJTzsKLQkJZHAgPSAoKHVuc2lnbmVkIGxvbmcpIGNoaWxkKSArIFRIUkVBRF9TSVpFIC0KLQkJCSBzaXplb2Yoc3RydWN0IHB0X2RzcHJlZ3MpOwotCQlpZiAoKigoaW50ICopIChkcCAtIDQpKSA9PSBTUl9GRCkgewotCQkJY29weV9mcm9tX3VzZXIoKHZvaWQgKikgZHAsICh2b2lkICopYWRkciwKLQkJCQlzaXplb2Yoc3RydWN0IHB0X2RzcHJlZ3MpKTsKLQkJCXJldCA9IDA7Ci0JCX0KLQkJYnJlYWs7Ci0JfQorCWNhc2UgUFRSQUNFX0dFVERTUFJFR1M6CisJCXJldHVybiBjb3B5X3JlZ3NldF90b191c2VyKGNoaWxkLCAmdXNlcl9zaF9uYXRpdmVfdmlldywKKwkJCQkJICAgUkVHU0VUX0RTUCwKKwkJCQkJICAgMCwgc2l6ZW9mKHN0cnVjdCBwdF9kc3ByZWdzKSwKKwkJCQkJICAgKHZvaWQgX191c2VyICopZGF0YSk7CisJY2FzZSBQVFJBQ0VfU0VURFNQUkVHUzoKKwkJcmV0dXJuIGNvcHlfcmVnc2V0X2Zyb21fdXNlcihjaGlsZCwgJnVzZXJfc2hfbmF0aXZlX3ZpZXcsCisJCQkJCSAgICAgUkVHU0VUX0RTUCwKKwkJCQkJICAgICAwLCBzaXplb2Yoc3RydWN0IHB0X2RzcHJlZ3MpLAorCQkJCQkgICAgIChjb25zdCB2b2lkIF9fdXNlciAqKWRhdGEpOwogI2VuZGlmCiAjaWZkZWYgQ09ORklHX0JJTkZNVF9FTEZfRkRQSUMKIAljYXNlIFBUUkFDRV9HRVRGRFBJQzogewpAQCAtMjAyLDcgKzQwOCw3IEBACiAJCX0KIAogCQlyZXQgPSAwOwotCQlpZiAocHV0X3VzZXIodG1wLCAodW5zaWduZWQgbG9uZyAqKSBkYXRhKSkgeworCQlpZiAocHV0X3VzZXIodG1wLCBkYXRhcCkpIHsKIAkJCXJldCA9IC1FRkFVTFQ7CiAJCQlicmVhazsKIAkJfQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvcHRyYWNlXzY0LmMgYi9hcmNoL3NoL2tlcm5lbC9wdHJhY2VfNjQuYwppbmRleCA5YzY0MjQ4Li5lMTViMDk5IDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9wdHJhY2VfNjQuYworKysgYi9hcmNoL3NoL2tlcm5lbC9wdHJhY2VfNjQuYwpAQCAtMzUsNiArMzUsNyBAQAogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CiAjaW5jbHVkZSA8YXNtL21tdV9jb250ZXh0Lmg+CisjaW5jbHVkZSA8YXNtL3N5c2NhbGxzLmg+CiAjaW5jbHVkZSA8YXNtL2ZwdS5oPgogCiAvKiBUaGlzIG1hc2sgZGVmaW5lcyB0aGUgYml0cyBvZiB0aGUgU1Igd2hpY2ggdGhlIHVzZXIgaXMgbm90IGFsbG93ZWQgdG8KZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL3NldHVwLmMgYi9hcmNoL3NoL2tlcm5lbC9zZXR1cC5jCmluZGV4IGRlODMyMDUuLmU3MTUyY2MgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL3NldHVwLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvc2V0dXAuYwpAQCAtMjYsNiArMjYsOSBAQAogI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgogI2luY2x1ZGUgPGxpbnV4L2RlYnVnZnMuaD4KICNpbmNsdWRlIDxsaW51eC9jcmFzaF9kdW1wLmg+CisjaW5jbHVkZSA8bGludXgvbW16b25lLmg+CisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9wYWdlLmg+CkBAIC0xNDQsNiArMTQ3LDcgQEAKIHsKIAl1bnNpZ25lZCBsb25nIGxvbmcgZnJlZV9tZW07CiAJdW5zaWduZWQgbG9uZyBsb25nIGNyYXNoX3NpemUsIGNyYXNoX2Jhc2U7CisJdm9pZCAqdnA7CiAJaW50IHJldDsKIAogCWZyZWVfbWVtID0gKCh1bnNpZ25lZCBsb25nIGxvbmcpbWF4X2xvd19wZm4gLSBtaW5fbG93X3BmbikgPDwgUEFHRV9TSElGVDsKQEAgLTE1MiwxMiArMTU2LDE0IEBACiAJCQkmY3Jhc2hfc2l6ZSwgJmNyYXNoX2Jhc2UpOwogCWlmIChyZXQgPT0gMCAmJiBjcmFzaF9zaXplKSB7CiAJCWlmIChjcmFzaF9iYXNlIDw9IDApIHsKLQkJCXByaW50ayhLRVJOX0lORk8gImNyYXNoa2VybmVsIHJlc2VydmF0aW9uIGZhaWxlZCAtICIKLQkJCQkJInlvdSBoYXZlIHRvIHNwZWNpZnkgYSBiYXNlIGFkZHJlc3NcbiIpOwotCQkJcmV0dXJuOwotCQl9Ci0KLQkJaWYgKHJlc2VydmVfYm9vdG1lbShjcmFzaF9iYXNlLCBjcmFzaF9zaXplLAorCQkJdnAgPSBhbGxvY19ib290bWVtX25vcGFuaWMoY3Jhc2hfc2l6ZSk7IAorCQkJaWYgKCF2cCkgeworCQkJCXByaW50ayhLRVJOX0lORk8gImNyYXNoa2VybmVsIGFsbG9jYXRpb24gIgorCQkJCSAgICAgICAiZmFpbGVkXG4iKTsKKwkJCQlyZXR1cm47CisJCQl9CisJCQljcmFzaF9iYXNlID0gX19wYSh2cCk7CisJCX0gZWxzZSBpZiAocmVzZXJ2ZV9ib290bWVtKGNyYXNoX2Jhc2UsIGNyYXNoX3NpemUsCiAJCQkJCUJPT1RNRU1fRVhDTFVTSVZFKSA8IDApIHsKIAkJCXByaW50ayhLRVJOX0lORk8gImNyYXNoa2VybmVsIHJlc2VydmF0aW9uIGZhaWxlZCAtICIKIAkJCQkJIm1lbW9yeSBpcyBpbiB1c2VcbiIpOwpAQCAtMTc5LDYgKzE4NSwyNCBAQAoge30KICNlbmRpZgogCisjaWZuZGVmIENPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWQordm9pZCBfX2NwdWluaXQgY2FsaWJyYXRlX2RlbGF5KHZvaWQpCit7CisJc3RydWN0IGNsayAqY2xrID0gY2xrX2dldChOVUxMLCAiY3B1X2NsayIpOworCisJaWYgKElTX0VSUihjbGspKQorCQlwYW5pYygiTmVlZCBhIHNhbmUgQ1BVIGNsb2NrIGRlZmluaXRpb24hIik7CisKKwlsb29wc19wZXJfamlmZnkgPSAoY2xrX2dldF9yYXRlKGNsaykgPj4gMSkgLyBIWjsKKworCXByaW50ayhLRVJOX0lORk8gIkNhbGlicmF0aW5nIGRlbGF5IGxvb3AgKHNraXBwZWQpLi4uICIKKwkJCSAiJWx1LiUwMmx1IEJvZ29NSVBTIFBSRVNFVCAobHBqPSVsdSlcbiIsCisJCQkgbG9vcHNfcGVyX2ppZmZ5Lyg1MDAwMDAvSFopLAorCQkJIChsb29wc19wZXJfamlmZnkvKDUwMDAvSFopKSAlIDEwMCwKKwkJCSBsb29wc19wZXJfamlmZnkpOworfQorI2VuZGlmCisKIHZvaWQgX19pbml0IF9fYWRkX2FjdGl2ZV9yYW5nZSh1bnNpZ25lZCBpbnQgbmlkLCB1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiwKIAkJCQkJCXVuc2lnbmVkIGxvbmcgZW5kX3BmbikKIHsKQEAgLTIzMiwxNSArMjU2LDE3IEBACiAJICogY2FzZSBvZiB1cyBhY2NpZGVudGFsbHkgaW5pdGlhbGl6aW5nIHRoZSBib290bWVtIGFsbG9jYXRvciB3aXRoCiAJICogYW4gaW52YWxpZCBSQU0gYXJlYS4KIAkgKi8KLQlyZXNlcnZlX2Jvb3RtZW0oX19NRU1PUllfU1RBUlQrUEFHRV9TSVpFLAotCQkoUEZOX1BIWVMoZnJlZV9wZm4pK2Jvb3RtYXBfc2l6ZStQQUdFX1NJWkUtMSktX19NRU1PUllfU1RBUlQsCi0JCUJPT1RNRU1fREVGQVVMVCk7CisJcmVzZXJ2ZV9ib290bWVtKF9fTUVNT1JZX1NUQVJUICsgQ09ORklHX1pFUk9fUEFHRV9PRkZTRVQsCisJCQkoUEZOX1BIWVMoZnJlZV9wZm4pICsgYm9vdG1hcF9zaXplICsgUEFHRV9TSVpFIC0gMSkgLQorCQkJKF9fTUVNT1JZX1NUQVJUICsgQ09ORklHX1pFUk9fUEFHRV9PRkZTRVQpLAorCQkJQk9PVE1FTV9ERUZBVUxUKTsKIAogCS8qCiAJICogcmVzZXJ2ZSBwaHlzaWNhbCBwYWdlIDAgLSBpdCdzIGEgc3BlY2lhbCBCSU9TIHBhZ2Ugb24gbWFueSBib3hlcywKIAkgKiBlbmFibGluZyBjbGVhbiByZWJvb3RzLCBTTVAgb3BlcmF0aW9uLCBsYXB0b3AgZnVuY3Rpb25zLgogCSAqLwotCXJlc2VydmVfYm9vdG1lbShfX01FTU9SWV9TVEFSVCwgUEFHRV9TSVpFLCBCT09UTUVNX0RFRkFVTFQpOworCXJlc2VydmVfYm9vdG1lbShfX01FTU9SWV9TVEFSVCwgQ09ORklHX1pFUk9fUEFHRV9PRkZTRVQsCisJCQlCT09UTUVNX0RFRkFVTFQpOwogCiAJc3BhcnNlX21lbW9yeV9wcmVzZW50X3dpdGhfYWN0aXZlX3JlZ2lvbnMoMCk7CiAKQEAgLTI0OCwxNyArMjc0LDE4IEBACiAJUk9PVF9ERVYgPSBSb290X1JBTTA7CiAKIAlpZiAoTE9BREVSX1RZUEUgJiYgSU5JVFJEX1NUQVJUKSB7Ci0JCWlmIChJTklUUkRfU1RBUlQgKyBJTklUUkRfU0laRSA8PSAobWF4X2xvd19wZm4gPDwgUEFHRV9TSElGVCkpIHsKLQkJCXJlc2VydmVfYm9vdG1lbShJTklUUkRfU1RBUlQgKyBfX01FTU9SWV9TVEFSVCwKLQkJCQkJSU5JVFJEX1NJWkUsIEJPT1RNRU1fREVGQVVMVCk7Ci0JCQlpbml0cmRfc3RhcnQgPSBJTklUUkRfU1RBUlQgKyBQQUdFX09GRlNFVCArCi0JCQkJCV9fTUVNT1JZX1NUQVJUOworCQl1bnNpZ25lZCBsb25nIGluaXRyZF9zdGFydF9waHlzID0gSU5JVFJEX1NUQVJUICsgX19NRU1PUllfU1RBUlQ7CisKKwkJaWYgKGluaXRyZF9zdGFydF9waHlzICsgSU5JVFJEX1NJWkUgPD0gUEZOX1BIWVMobWF4X2xvd19wZm4pKSB7CisJCQlyZXNlcnZlX2Jvb3RtZW0oaW5pdHJkX3N0YXJ0X3BoeXMsIElOSVRSRF9TSVpFLAorCQkJCQlCT09UTUVNX0RFRkFVTFQpOworCQkJaW5pdHJkX3N0YXJ0ID0gKHVuc2lnbmVkIGxvbmcpX192YShpbml0cmRfc3RhcnRfcGh5cyk7CiAJCQlpbml0cmRfZW5kID0gaW5pdHJkX3N0YXJ0ICsgSU5JVFJEX1NJWkU7CiAJCX0gZWxzZSB7CiAJCQlwcmludGsoImluaXRyZCBleHRlbmRzIGJleW9uZCBlbmQgb2YgbWVtb3J5ICIKLQkJCSAgICAiKDB4JTA4bHggPiAweCUwOGx4KVxuZGlzYWJsaW5nIGluaXRyZFxuIiwKLQkJCQkgICAgSU5JVFJEX1NUQVJUICsgSU5JVFJEX1NJWkUsCi0JCQkJICAgIG1heF9sb3dfcGZuIDw8IFBBR0VfU0hJRlQpOworCQkJICAgICAgICIoMHglMDhseCA+IDB4JTA4bHgpXG5kaXNhYmxpbmcgaW5pdHJkXG4iLAorCQkJICAgICAgIGluaXRyZF9zdGFydF9waHlzICsgSU5JVFJEX1NJWkUsCisJCQkgICAgICAgKHVuc2lnbmVkIGxvbmcpUEZOX1BIWVMobWF4X2xvd19wZm4pKTsKIAkJCWluaXRyZF9zdGFydCA9IDA7CiAJCX0KIAl9CkBAIC01MzAsNiArNTU3LDggQEAKIHN0YXRpYyBpbnQgX19pbml0IHNoX2RlYnVnZnNfaW5pdCh2b2lkKQogewogCXNoX2RlYnVnZnNfcm9vdCA9IGRlYnVnZnNfY3JlYXRlX2Rpcigic2giLCBOVUxMKTsKKwlpZiAoIXNoX2RlYnVnZnNfcm9vdCkKKwkJcmV0dXJuIC1FTk9NRU07CiAJaWYgKElTX0VSUihzaF9kZWJ1Z2ZzX3Jvb3QpKQogCQlyZXR1cm4gUFRSX0VSUihzaF9kZWJ1Z2ZzX3Jvb3QpOwogCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9zaF9rc3ltc18zMi5jIGIvYXJjaC9zaC9rZXJuZWwvc2hfa3N5bXNfMzIuYwppbmRleCA2ZTFiMWMyLi5kOTE3YjdiIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9zaF9rc3ltc18zMi5jCisrKyBiL2FyY2gvc2gva2VybmVsL3NoX2tzeW1zXzMyLmMKQEAgLTE2LDYgKzE2LDcgQEAKICNpbmNsdWRlIDxhc20vZGVsYXkuaD4KICNpbmNsdWRlIDxhc20vdGxiZmx1c2guaD4KICNpbmNsdWRlIDxhc20vY2FjaGVmbHVzaC5oPgorI2luY2x1ZGUgPGFzbS9mdHJhY2UuaD4KIAogZXh0ZXJuIGludCBkdW1wX2ZwdShzdHJ1Y3QgcHRfcmVncyAqLCBlbGZfZnByZWdzZXRfdCAqKTsKIGV4dGVybiBzdHJ1Y3QgaHdfaW50ZXJydXB0X3R5cGUgbm9faXJxX3R5cGU7CkBAIC0xMzMsNiArMTM0LDkgQEAKIEVYUE9SVF9TWU1CT0woY2xlYXJfdXNlcl9wYWdlKTsKICNlbmRpZgogCisjaWZkZWYgQ09ORklHX0ZUUkFDRQorRVhQT1JUX1NZTUJPTChtY291bnQpOworI2VuZGlmCiBFWFBPUlRfU1lNQk9MKGNzdW1fcGFydGlhbCk7CiBFWFBPUlRfU1lNQk9MKGNzdW1fcGFydGlhbF9jb3B5X2dlbmVyaWMpOwogI2lmZGVmIENPTkZJR19JUFY2CmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9zaWduYWxfMzIuYyBiL2FyY2gvc2gva2VybmVsL3NpZ25hbF8zMi5jCmluZGV4IDUxNjg5ZDIuLjY5ZDA5YzAgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL3NpZ25hbF8zMi5jCisrKyBiL2FyY2gvc2gva2VybmVsL3NpZ25hbF8zMi5jCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgogI2luY2x1ZGUgPGFzbS9jYWNoZWZsdXNoLmg+CisjaW5jbHVkZSA8YXNtL3N5c2NhbGxzLmg+CiAjaW5jbHVkZSA8YXNtL2ZwdS5oPgogCiAjZGVmaW5lIF9CTE9DS0FCTEUgKH4oc2lnbWFzayhTSUdLSUxMKSB8IHNpZ21hc2soU0lHU1RPUCkpKQpAQCAtMjE1LDYgKzIxNiw5IEBACiAJc2lnc2V0X3Qgc2V0OwogCWludCByMDsKIAorICAgICAgICAvKiBBbHdheXMgbWFrZSBhbnkgcGVuZGluZyByZXN0YXJ0ZWQgc3lzdGVtIGNhbGxzIHJldHVybiAtRUlOVFIgKi8KKwljdXJyZW50X3RocmVhZF9pbmZvKCktPnJlc3RhcnRfYmxvY2suZm4gPSBkb19ub19yZXN0YXJ0X3N5c2NhbGw7CisKIAlpZiAoIWFjY2Vzc19vayhWRVJJRllfUkVBRCwgZnJhbWUsIHNpemVvZigqZnJhbWUpKSkKIAkJZ290byBiYWRmcmFtZTsKIApAQCAtMjQ3LDkgKzI1MSwxMSBAQAogCXN0cnVjdCBwdF9yZWdzICpyZWdzID0gUkVMT0NfSElERSgmX19yZWdzLCAwKTsKIAlzdHJ1Y3QgcnRfc2lnZnJhbWUgX191c2VyICpmcmFtZSA9IChzdHJ1Y3QgcnRfc2lnZnJhbWUgX191c2VyICopcmVncy0+cmVnc1sxNV07CiAJc2lnc2V0X3Qgc2V0OwotCXN0YWNrX3Qgc3Q7CiAJaW50IHIwOwogCisJLyogQWx3YXlzIG1ha2UgYW55IHBlbmRpbmcgcmVzdGFydGVkIHN5c3RlbSBjYWxscyByZXR1cm4gLUVJTlRSICovCisJY3VycmVudF90aHJlYWRfaW5mbygpLT5yZXN0YXJ0X2Jsb2NrLmZuID0gZG9fbm9fcmVzdGFydF9zeXNjYWxsOworCiAJaWYgKCFhY2Nlc3Nfb2soVkVSSUZZX1JFQUQsIGZyYW1lLCBzaXplb2YoKmZyYW1lKSkpCiAJCWdvdG8gYmFkZnJhbWU7CiAKQEAgLTI2NSwxMSArMjcxLDkgQEAKIAlpZiAocmVzdG9yZV9zaWdjb250ZXh0KHJlZ3MsICZmcmFtZS0+dWMudWNfbWNvbnRleHQsICZyMCkpCiAJCWdvdG8gYmFkZnJhbWU7CiAKLQlpZiAoX19jb3B5X2Zyb21fdXNlcigmc3QsICZmcmFtZS0+dWMudWNfc3RhY2ssIHNpemVvZihzdCkpKQorCWlmIChkb19zaWdhbHRzdGFjaygmZnJhbWUtPnVjLnVjX3N0YWNrLCBOVUxMLAorCQkJICAgcmVncy0+cmVnc1sxNV0pID09IC1FRkFVTFQpCiAJCWdvdG8gYmFkZnJhbWU7Ci0JLyogSXQgaXMgbW9yZSBkaWZmaWN1bHQgdG8gYXZvaWQgY2FsbGluZyB0aGlzIGZ1bmN0aW9uIHRoYW4gdG8KLQkgICBjYWxsIGl0IGFuZCBpZ25vcmUgZXJyb3JzLiAgKi8KLQlkb19zaWdhbHRzdGFjaygoY29uc3Qgc3RhY2tfdCBfX3VzZXIgKikmc3QsIE5VTEwsICh1bnNpZ25lZCBsb25nKWZyYW1lKTsKIAogCXJldHVybiByMDsKIApAQCAtNDI5LDcgKzQzMyw3IEBACiAKIAkvKiBDcmVhdGUgdGhlIHVjb250ZXh0LiAgKi8KIAllcnIgfD0gX19wdXRfdXNlcigwLCAmZnJhbWUtPnVjLnVjX2ZsYWdzKTsKLQllcnIgfD0gX19wdXRfdXNlcigwLCAmZnJhbWUtPnVjLnVjX2xpbmspOworCWVyciB8PSBfX3B1dF91c2VyKE5VTEwsICZmcmFtZS0+dWMudWNfbGluayk7CiAJZXJyIHw9IF9fcHV0X3VzZXIoKHZvaWQgKiljdXJyZW50LT5zYXNfc3Nfc3AsCiAJCQkgICZmcmFtZS0+dWMudWNfc3RhY2suc3Nfc3ApOwogCWVyciB8PSBfX3B1dF91c2VyKHNhc19zc19mbGFncyhyZWdzLT5yZWdzWzE1XSksCkBAIC00OTIsMzcgKzQ5Niw0MyBAQAogCXJldHVybiAtRUZBVUxUOwogfQogCitzdGF0aWMgaW5saW5lIHZvaWQKK2hhbmRsZV9zeXNjYWxsX3Jlc3RhcnQodW5zaWduZWQgbG9uZyBzYXZlX3IwLCBzdHJ1Y3QgcHRfcmVncyAqcmVncywKKwkJICAgICAgIHN0cnVjdCBzaWdhY3Rpb24gKnNhKQoreworCS8qIElmIHdlJ3JlIG5vdCBmcm9tIGEgc3lzY2FsbCwgYmFpbCBvdXQgKi8KKwlpZiAocmVncy0+dHJhIDwgMCkKKwkJcmV0dXJuOworCisJLyogY2hlY2sgZm9yIHN5c3RlbSBjYWxsIHJlc3RhcnQuLiAqLworCXN3aXRjaCAocmVncy0+cmVnc1swXSkgeworCQljYXNlIC1FUkVTVEFSVF9SRVNUQVJUQkxPQ0s6CisJCWNhc2UgLUVSRVNUQVJUTk9IQU5EOgorCQlub19zeXN0ZW1fY2FsbF9yZXN0YXJ0OgorCQkJcmVncy0+cmVnc1swXSA9IC1FSU5UUjsKKwkJCXJlZ3MtPnNyIHw9IDE7CisJCQlicmVhazsKKworCQljYXNlIC1FUkVTVEFSVFNZUzoKKwkJCWlmICghKHNhLT5zYV9mbGFncyAmIFNBX1JFU1RBUlQpKQorCQkJCWdvdG8gbm9fc3lzdGVtX2NhbGxfcmVzdGFydDsKKwkJLyogZmFsbHRocm91Z2ggKi8KKwkJY2FzZSAtRVJFU1RBUlROT0lOVFI6CisJCQlyZWdzLT5yZWdzWzBdID0gc2F2ZV9yMDsKKwkJCXJlZ3MtPnBjIC09IGluc3RydWN0aW9uX3NpemUoY3RybF9pbncocmVncy0+cGMgLSA0KSk7CisJCQlicmVhazsKKwl9Cit9CisKIC8qCiAgKiBPSywgd2UncmUgaW52b2tpbmcgYSBoYW5kbGVyCiAgKi8KLQogc3RhdGljIGludAogaGFuZGxlX3NpZ25hbCh1bnNpZ25lZCBsb25nIHNpZywgc3RydWN0IGtfc2lnYWN0aW9uICprYSwgc2lnaW5mb190ICppbmZvLAogCSAgICAgIHNpZ3NldF90ICpvbGRzZXQsIHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1bnNpZ25lZCBpbnQgc2F2ZV9yMCkKIHsKIAlpbnQgcmV0OwogCi0JLyogQXJlIHdlIGZyb20gYSBzeXN0ZW0gY2FsbD8gKi8KLQlpZiAocmVncy0+dHJhID49IDApIHsKLQkJLyogSWYgc28sIGNoZWNrIHN5c3RlbSBjYWxsIHJlc3RhcnRpbmcuLiAqLwotCQlzd2l0Y2ggKHJlZ3MtPnJlZ3NbMF0pIHsKLQkJCWNhc2UgLUVSRVNUQVJUX1JFU1RBUlRCTE9DSzoKLQkJCWNhc2UgLUVSRVNUQVJUTk9IQU5EOgotCQkJbm9fc3lzdGVtX2NhbGxfcmVzdGFydDoKLQkJCQlyZWdzLT5yZWdzWzBdID0gLUVJTlRSOwotCQkJCWJyZWFrOwotCi0JCQljYXNlIC1FUkVTVEFSVFNZUzoKLQkJCQlpZiAoIShrYS0+c2Euc2FfZmxhZ3MgJiBTQV9SRVNUQVJUKSkKLQkJCQkJZ290byBub19zeXN0ZW1fY2FsbF9yZXN0YXJ0OwotCQkJLyogZmFsbHRocm91Z2ggKi8KLQkJCWNhc2UgLUVSRVNUQVJUTk9JTlRSOgotCQkJCXJlZ3MtPnJlZ3NbMF0gPSBzYXZlX3IwOwotCQkJCXJlZ3MtPnBjIC09IGluc3RydWN0aW9uX3NpemUoCi0JCQkJCQljdHJsX2ludyhyZWdzLT5wYyAtIDQpKTsKLQkJCQlicmVhazsKLQkJfQotCX0KIAogCS8qIFNldCB1cCB0aGUgc3RhY2sgZnJhbWUgKi8KIAlpZiAoa2EtPnNhLnNhX2ZsYWdzICYgU0FfU0lHSU5GTykKQEAgLTU4MCw2ICs1OTAsOSBAQAogCiAJc2lnbnIgPSBnZXRfc2lnbmFsX3RvX2RlbGl2ZXIoJmluZm8sICZrYSwgcmVncywgTlVMTCk7CiAJaWYgKHNpZ25yID4gMCkgeworCQlpZiAocmVncy0+c3IgJiAxKQorCQkJaGFuZGxlX3N5c2NhbGxfcmVzdGFydChzYXZlX3IwLCByZWdzLCAma2Euc2EpOworCiAJCS8qIFdoZWUhICBBY3R1YWxseSBkZWxpdmVyIHRoZSBzaWduYWwuICAqLwogCQlpZiAoaGFuZGxlX3NpZ25hbChzaWduciwgJmthLCAmaW5mbywgb2xkc2V0LAogCQkJCSAgcmVncywgc2F2ZV9yMCkgPT0gMCkgewpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvc2lnbmFsXzY0LmMgYi9hcmNoL3NoL2tlcm5lbC9zaWduYWxfNjQuYwppbmRleCAxZDYyZGZlLi5jZTNlODUxIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9zaWduYWxfNjQuYworKysgYi9hcmNoL3NoL2tlcm5lbC9zaWduYWxfNjQuYwpAQCAtNDMsNiArNDMsMTAgQEAKIAogI2RlZmluZSBfQkxPQ0tBQkxFICh+KHNpZ21hc2soU0lHS0lMTCkgfCBzaWdtYXNrKFNJR1NUT1ApKSkKIAorc3RhdGljIHZvaWQKK2hhbmRsZV9zaWduYWwodW5zaWduZWQgbG9uZyBzaWcsIHNpZ2luZm9fdCAqaW5mbywgc3RydWN0IGtfc2lnYWN0aW9uICprYSwKKwkJc2lnc2V0X3QgKm9sZHNldCwgc3RydWN0IHB0X3JlZ3MgKiByZWdzKTsKKwogLyoKICAqIE5vdGUgdGhhdCAnaW5pdCcgaXMgYSBzcGVjaWFsIHByb2Nlc3M6IGl0IGRvZXNuJ3QgZ2V0IHNpZ25hbHMgaXQgZG9lc24ndAogICogd2FudCB0byBoYW5kbGUuIFRodXMgeW91IGNhbm5vdCBraWxsIGluaXQgZXZlbiB3aXRoIGEgU0lHS0lMTCBldmVuIGJ5CkBAIC0zNzEsNiArMzc1LDkgQEAKIAlzaWdzZXRfdCBzZXQ7CiAJbG9uZyBsb25nIHJldDsKIAorCS8qIEFsd2F5cyBtYWtlIGFueSBwZW5kaW5nIHJlc3RhcnRlZCBzeXN0ZW0gY2FsbHMgcmV0dXJuIC1FSU5UUiAqLworCWN1cnJlbnRfdGhyZWFkX2luZm8oKS0+cmVzdGFydF9ibG9jay5mbiA9IGRvX25vX3Jlc3RhcnRfc3lzY2FsbDsKKwogCWlmICghYWNjZXNzX29rKFZFUklGWV9SRUFELCBmcmFtZSwgc2l6ZW9mKCpmcmFtZSkpKQogCQlnb3RvIGJhZGZyYW1lOwogCkBAIC00MDgsNiArNDE1LDkgQEAKIAlzdGFja190IF9fdXNlciBzdDsKIAlsb25nIGxvbmcgcmV0OwogCisJLyogQWx3YXlzIG1ha2UgYW55IHBlbmRpbmcgcmVzdGFydGVkIHN5c3RlbSBjYWxscyByZXR1cm4gLUVJTlRSICovCisJY3VycmVudF90aHJlYWRfaW5mbygpLT5yZXN0YXJ0X2Jsb2NrLmZuID0gZG9fbm9fcmVzdGFydF9zeXNjYWxsOworCiAJaWYgKCFhY2Nlc3Nfb2soVkVSSUZZX1JFQUQsIGZyYW1lLCBzaXplb2YoKmZyYW1lKSkpCiAJCWdvdG8gYmFkZnJhbWU7CiAKQEAgLTUzNSw3ICs1NDUsNyBAQAogCQkgKiBPbiBTSDUgYWxsIGVkaXRlZCBwb2ludGVycyBhcmUgc3ViamVjdCB0byBORUZGCiAJCSAqLwogCQlERVJFRl9SRUdfUFIgPSAoREVSRUZfUkVHX1BSICYgTkVGRl9TSUdOKSA/Ci0gICAgICAgIAkJIAkoREVSRUZfUkVHX1BSIHwgTkVGRl9NQVNLKSA6IERFUkVGX1JFR19QUjsKKwkJCShERVJFRl9SRUdfUFIgfCBORUZGX01BU0spIDogREVSRUZfUkVHX1BSOwogCX0gZWxzZSB7CiAJCS8qCiAJCSAqIERpZmZlcmVudCBhcHByb2FjaCBvbiBTSDUuCkBAIC01NTAsMTAgKzU2MCwxMCBAQAogCQkgKi8KIAkJREVSRUZfUkVHX1BSID0gKHVuc2lnbmVkIGxvbmcpIGZyYW1lLT5yZXRjb2RlIHwgMHgwMTsKIAkJREVSRUZfUkVHX1BSID0gKERFUkVGX1JFR19QUiAmIE5FRkZfU0lHTikgPwotICAgICAgICAJCSAJKERFUkVGX1JFR19QUiB8IE5FRkZfTUFTSykgOiBERVJFRl9SRUdfUFI7CisJCQkoREVSRUZfUkVHX1BSIHwgTkVGRl9NQVNLKSA6IERFUkVGX1JFR19QUjsKIAogCQlpZiAoX19jb3B5X3RvX3VzZXIoZnJhbWUtPnJldGNvZGUsCi0JCQkodW5zaWduZWQgbG9uZyBsb25nKXNhX2RlZmF1bHRfcmVzdG9yZXIgJiAofjEpLCAxNikgIT0gMCkKKwkJCSh2b2lkICopKCh1bnNpZ25lZCBsb25nKXNhX2RlZmF1bHRfcmVzdG9yZXIgJiAofjEpKSwgMTYpICE9IDApCiAJCQlnb3RvIGdpdmVfc2lnc2VndjsKIAogCQkvKiBDb2hlcmUgdGhlIHRyYW1wb2xpbmUgd2l0aCB0aGUgSS1jYWNoZS4gKi8KQEAgLTU2Niw3ICs1NzYsNyBAQAogCSAqLwogCXJlZ3MtPnJlZ3NbUkVHX1NQXSA9ICh1bnNpZ25lZCBsb25nKSBmcmFtZTsKIAlyZWdzLT5yZWdzW1JFR19TUF0gPSAocmVncy0+cmVnc1tSRUdfU1BdICYgTkVGRl9TSUdOKSA/Ci0gICAgICAgIAkJIChyZWdzLT5yZWdzW1JFR19TUF0gfCBORUZGX01BU0spIDogcmVncy0+cmVnc1tSRUdfU1BdOworCQkgKHJlZ3MtPnJlZ3NbUkVHX1NQXSB8IE5FRkZfTUFTSykgOiByZWdzLT5yZWdzW1JFR19TUF07CiAJcmVncy0+cmVnc1tSRUdfQVJHMV0gPSBzaWduYWw7IC8qIEFyZyBmb3Igc2lnbmFsIGhhbmRsZXIgKi8KIAogICAgICAgICAvKiBGSVhNRToKQEAgLTY1Miw3ICs2NjIsNyBAQAogCQkgKiBPbiBTSDUgYWxsIGVkaXRlZCBwb2ludGVycyBhcmUgc3ViamVjdCB0byBORUZGCiAJCSAqLwogCQlERVJFRl9SRUdfUFIgPSAoREVSRUZfUkVHX1BSICYgTkVGRl9TSUdOKSA/Ci0gICAgICAgIAkJIAkoREVSRUZfUkVHX1BSIHwgTkVGRl9NQVNLKSA6IERFUkVGX1JFR19QUjsKKwkJCShERVJFRl9SRUdfUFIgfCBORUZGX01BU0spIDogREVSRUZfUkVHX1BSOwogCX0gZWxzZSB7CiAJCS8qCiAJCSAqIERpZmZlcmVudCBhcHByb2FjaCBvbiBTSDUuCkBAIC02NjgsMTAgKzY3OCwxMCBAQAogCiAJCURFUkVGX1JFR19QUiA9ICh1bnNpZ25lZCBsb25nKSBmcmFtZS0+cmV0Y29kZSB8IDB4MDE7CiAJCURFUkVGX1JFR19QUiA9IChERVJFRl9SRUdfUFIgJiBORUZGX1NJR04pID8KLSAgICAgICAgCQkgCShERVJFRl9SRUdfUFIgfCBORUZGX01BU0spIDogREVSRUZfUkVHX1BSOworCQkJKERFUkVGX1JFR19QUiB8IE5FRkZfTUFTSykgOiBERVJFRl9SRUdfUFI7CiAKIAkJaWYgKF9fY29weV90b191c2VyKGZyYW1lLT5yZXRjb2RlLAotCQkJKHVuc2lnbmVkIGxvbmcgbG9uZylzYV9kZWZhdWx0X3J0X3Jlc3RvcmVyICYgKH4xKSwgMTYpICE9IDApCisJCQkodm9pZCAqKSgodW5zaWduZWQgbG9uZylzYV9kZWZhdWx0X3J0X3Jlc3RvcmVyICYgKH4xKSksIDE2KSAhPSAwKQogCQkJZ290byBnaXZlX3NpZ3NlZ3Y7CiAKIAkJZmx1c2hfaWNhY2hlX3JhbmdlKERFUkVGX1JFR19QUi0xLCBERVJFRl9SRUdfUFItMSsxNSk7CkBAIC02ODMsNyArNjkzLDcgQEAKIAkgKi8KIAlyZWdzLT5yZWdzW1JFR19TUF0gPSAodW5zaWduZWQgbG9uZykgZnJhbWU7CiAJcmVncy0+cmVnc1tSRUdfU1BdID0gKHJlZ3MtPnJlZ3NbUkVHX1NQXSAmIE5FRkZfU0lHTikgPwotICAgICAgICAJCSAocmVncy0+cmVnc1tSRUdfU1BdIHwgTkVGRl9NQVNLKSA6IHJlZ3MtPnJlZ3NbUkVHX1NQXTsKKwkJIChyZWdzLT5yZWdzW1JFR19TUF0gfCBORUZGX01BU0spIDogcmVncy0+cmVnc1tSRUdfU1BdOwogCXJlZ3MtPnJlZ3NbUkVHX0FSRzFdID0gc2lnbmFsOyAvKiBBcmcgZm9yIHNpZ25hbCBoYW5kbGVyICovCiAJcmVncy0+cmVnc1tSRUdfQVJHMl0gPSAodW5zaWduZWQgbG9uZyBsb25nKSh1bnNpZ25lZCBsb25nKShzaWduZWQgbG9uZykmZnJhbWUtPmluZm87CiAJcmVncy0+cmVnc1tSRUdfQVJHM10gPSAodW5zaWduZWQgbG9uZyBsb25nKSh1bnNpZ25lZCBsb25nKShzaWduZWQgbG9uZykmZnJhbWUtPnVjLnVjX21jb250ZXh0OwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvc21wLmMgYi9hcmNoL3NoL2tlcm5lbC9zbXAuYwppbmRleCAwMDE3NzhmLi41MDhkZmIwMiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvc21wLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvc21wLmMKQEAgLTMsNyArMyw3IEBACiAgKgogICogU01QIHN1cHBvcnQgZm9yIHRoZSBTdXBlckggcHJvY2Vzc29ycy4KICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDIgLSAyMDA3IFBhdWwgTXVuZHQKKyAqIENvcHlyaWdodCAoQykgMjAwMiAtIDIwMDggUGF1bCBNdW5kdAogICogQ29weXJpZ2h0IChDKSAyMDA2IC0gMjAwNyBBa2lvIElkZWhhcmEKICAqCiAgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwpAQCAtODYsOSArODYsMTIgQEAKIAogCWxvY2FsX2lycV9lbmFibGUoKTsKIAorCWNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKKworCS8qIEVuYWJsZSBsb2NhbCB0aW1lcnMgKi8KKwlsb2NhbF90aW1lcl9zZXR1cChjcHUpOwogCWNhbGlicmF0ZV9kZWxheSgpOwogCi0JY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwogCXNtcF9zdG9yZV9jcHVfaW5mbyhjcHUpOwogCiAJY3B1X3NldChjcHUsIGNwdV9vbmxpbmVfbWFwKTsKQEAgLTE4Niw2ICsxODksNDIgQEAKIAlwbGF0X3NlbmRfaXBpKGNwdSwgU01QX01TR19GVU5DVElPTl9TSU5HTEUpOwogfQogCit2b2lkIHNtcF90aW1lcl9icm9hZGNhc3QoY3B1bWFza190IG1hc2spCit7CisJaW50IGNwdTsKKworCWZvcl9lYWNoX2NwdV9tYXNrKGNwdSwgbWFzaykKKwkJcGxhdF9zZW5kX2lwaShjcHUsIFNNUF9NU0dfVElNRVIpOworfQorCitzdGF0aWMgdm9pZCBpcGlfdGltZXIodm9pZCkKK3sKKwlpcnFfZW50ZXIoKTsKKwlsb2NhbF90aW1lcl9pbnRlcnJ1cHQoKTsKKwlpcnFfZXhpdCgpOworfQorCit2b2lkIHNtcF9tZXNzYWdlX3JlY3YodW5zaWduZWQgaW50IG1zZykKK3sKKwlzd2l0Y2ggKG1zZykgeworCWNhc2UgU01QX01TR19GVU5DVElPTjoKKwkJZ2VuZXJpY19zbXBfY2FsbF9mdW5jdGlvbl9pbnRlcnJ1cHQoKTsKKwkJYnJlYWs7CisJY2FzZSBTTVBfTVNHX1JFU0NIRURVTEU6CisJCWJyZWFrOworCWNhc2UgU01QX01TR19GVU5DVElPTl9TSU5HTEU6CisJCWdlbmVyaWNfc21wX2NhbGxfZnVuY3Rpb25fc2luZ2xlX2ludGVycnVwdCgpOworCQlicmVhazsKKwljYXNlIFNNUF9NU0dfVElNRVI6CisJCWlwaV90aW1lcigpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlwcmludGsoS0VSTl9XQVJOSU5HICJTTVAgJWQ6ICVzKCk6IHVua25vd24gSVBJICVkXG4iLAorCQkgICAgICAgc21wX3Byb2Nlc3Nvcl9pZCgpLCBfX2Z1bmNfXywgbXNnKTsKKwkJYnJlYWs7CisJfQorfQorCiAvKiBOb3QgcmVhbGx5IFNNUCBzdHVmZiAuLi4gKi8KIGludCBzZXR1cF9wcm9maWxpbmdfdGltZXIodW5zaWduZWQgaW50IG11bHRpcGxpZXIpCiB7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9zdGFja3RyYWNlLmMgYi9hcmNoL3NoL2tlcm5lbC9zdGFja3RyYWNlLmMKaW5kZXggNTRkMWY2MS4uMWEyYTVlYiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvc3RhY2t0cmFjZS5jCisrKyBiL2FyY2gvc2gva2VybmVsL3N0YWNrdHJhY2UuYwpAQCAtMyw3ICszLDcgQEAKICAqCiAgKiBTdGFjayB0cmFjZSBtYW5hZ2VtZW50IGZ1bmN0aW9ucwogICoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDYgIFBhdWwgTXVuZHQKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDYgLSAyMDA4ICBQYXVsIE11bmR0CiAgKgogICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKICAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKQEAgLTM2LDMgKzM2LDI0IEBACiAJfQogfQogRVhQT1JUX1NZTUJPTF9HUEwoc2F2ZV9zdGFja190cmFjZSk7CisKK3ZvaWQgc2F2ZV9zdGFja190cmFjZV90c2soc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIHN0cnVjdCBzdGFja190cmFjZSAqdHJhY2UpCit7CisJdW5zaWduZWQgbG9uZyAqc3AgPSAodW5zaWduZWQgbG9uZyAqKXRzay0+dGhyZWFkLnNwOworCisJd2hpbGUgKCFrc3RhY2tfZW5kKHNwKSkgeworCQl1bnNpZ25lZCBsb25nIGFkZHIgPSAqc3ArKzsKKworCQlpZiAoX19rZXJuZWxfdGV4dF9hZGRyZXNzKGFkZHIpKSB7CisJCQlpZiAoaW5fc2NoZWRfZnVuY3Rpb25zKGFkZHIpKQorCQkJCWJyZWFrOworCQkJaWYgKHRyYWNlLT5za2lwID4gMCkKKwkJCQl0cmFjZS0+c2tpcC0tOworCQkJZWxzZQorCQkJCXRyYWNlLT5lbnRyaWVzW3RyYWNlLT5ucl9lbnRyaWVzKytdID0gYWRkcjsKKwkJCWlmICh0cmFjZS0+bnJfZW50cmllcyA+PSB0cmFjZS0+bWF4X2VudHJpZXMpCisJCQkJYnJlYWs7CisJCX0KKwl9Cit9CitFWFBPUlRfU1lNQk9MX0dQTChzYXZlX3N0YWNrX3RyYWNlX3Rzayk7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9zeXNfc2guYyBiL2FyY2gvc2gva2VybmVsL3N5c19zaC5jCmluZGV4IDkwNjFiODYuLjM4ZjA5OGMgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL3N5c19zaC5jCisrKyBiL2FyY2gvc2gva2VybmVsL3N5c19zaC5jCkBAIC0yMyw2ICsyMyw3IEBACiAjaW5jbHVkZSA8bGludXgvZnMuaD4KICNpbmNsdWRlIDxsaW51eC9pcGMuaD4KICNpbmNsdWRlIDxhc20vY2FjaGVmbHVzaC5oPgorI2luY2x1ZGUgPGFzbS9zeXNjYWxscy5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgogCkBAIC0xNzAsNiArMTcxLDggQEAKIAl2ZXJzaW9uID0gY2FsbCA+PiAxNjsgLyogaGFjayBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSAqLwogCWNhbGwgJj0gMHhmZmZmOwogCisJdHJhY2VfbWFyayhrZXJuZWxfYXJjaF9pcGNfY2FsbCwgImNhbGwgJXUgZmlyc3QgJWQiLCBjYWxsLCBmaXJzdCk7CisKIAlpZiAoY2FsbCA8PSBTRU1USU1FRE9QKQogCQlzd2l0Y2ggKGNhbGwpIHsKIAkJY2FzZSBTRU1PUDoKQEAgLTE4Niw3ICsxODksNyBAQAogCQkJdW5pb24gc2VtdW4gZm91cnRoOwogCQkJaWYgKCFwdHIpCiAJCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCQlpZiAoZ2V0X3VzZXIoZm91cnRoLl9fcGFkLCAodm9pZCAqIF9fdXNlciAqKSBwdHIpKQorCQkJaWYgKGdldF91c2VyKGZvdXJ0aC5fX3BhZCwgKHZvaWQgX191c2VyICogX191c2VyICopIHB0cikpCiAJCQkJcmV0dXJuIC1FRkFVTFQ7CiAJCQlyZXR1cm4gc3lzX3NlbWN0bCAoZmlyc3QsIHNlY29uZCwgdGhpcmQsIGZvdXJ0aCk7CiAJCQl9CkBAIC0yNjEsMTMgKzI2NCwxMyBAQAogCXJldHVybiAtRUlOVkFMOwogfQogCi1hc21saW5rYWdlIGludCBzeXNfdW5hbWUoc3RydWN0IG9sZF91dHNuYW1lICogbmFtZSkKK2FzbWxpbmthZ2UgaW50IHN5c191bmFtZShzdHJ1Y3Qgb2xkX3V0c25hbWUgX191c2VyICpuYW1lKQogewogCWludCBlcnI7CiAJaWYgKCFuYW1lKQogCQlyZXR1cm4gLUVGQVVMVDsKIAlkb3duX3JlYWQoJnV0c19zZW0pOwotCWVyciA9IGNvcHlfdG9fdXNlcihuYW1lLCB1dHNuYW1lKCksIHNpemVvZiAoKm5hbWUpKTsKKwllcnIgPSBjb3B5X3RvX3VzZXIobmFtZSwgdXRzbmFtZSgpLCBzaXplb2YoKm5hbWUpKTsKIAl1cF9yZWFkKCZ1dHNfc2VtKTsKIAlyZXR1cm4gZXJyPy1FRkFVTFQ6MDsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL3N5c19zaDMyLmMgYi9hcmNoL3NoL2tlcm5lbC9zeXNfc2gzMi5jCmluZGV4IGYwYWE1YzMuLmRiYmExZTEgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL3N5c19zaDMyLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvc3lzX3NoMzIuYwpAQCAtMTYsNiArMTYsNyBAQAogI2luY2x1ZGUgPGFzbS9jYWNoZWZsdXNoLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CisjaW5jbHVkZSA8YXNtL3N5c2NhbGxzLmg+CiAKIC8qCiAgKiBzeXNfcGlwZSgpIGlzIHRoZSBub3JtYWwgQyBjYWxsaW5nIHN0YW5kYXJkIGZvciBjcmVhdGluZwpAQCAtMzcsMTMgKzM4LDEzIEBACiAJcmV0dXJuIGVycm9yOwogfQogCi1hc21saW5rYWdlIHNzaXplX3Qgc3lzX3ByZWFkX3dyYXBwZXIodW5zaWduZWQgaW50IGZkLCBjaGFyICogYnVmLAorYXNtbGlua2FnZSBzc2l6ZV90IHN5c19wcmVhZF93cmFwcGVyKHVuc2lnbmVkIGludCBmZCwgY2hhciBfX3VzZXIgKmJ1ZiwKIAkJCSAgICAgc2l6ZV90IGNvdW50LCBsb25nIGR1bW15LCBsb2ZmX3QgcG9zKQogewogCXJldHVybiBzeXNfcHJlYWQ2NChmZCwgYnVmLCBjb3VudCwgcG9zKTsKIH0KIAotYXNtbGlua2FnZSBzc2l6ZV90IHN5c19wd3JpdGVfd3JhcHBlcih1bnNpZ25lZCBpbnQgZmQsIGNvbnN0IGNoYXIgKiBidWYsCithc21saW5rYWdlIHNzaXplX3Qgc3lzX3B3cml0ZV93cmFwcGVyKHVuc2lnbmVkIGludCBmZCwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZiwKIAkJCSAgICAgIHNpemVfdCBjb3VudCwgbG9uZyBkdW1teSwgbG9mZl90IHBvcykKIHsKIAlyZXR1cm4gc3lzX3B3cml0ZTY0KGZkLCBidWYsIGNvdW50LCBwb3MpOwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvdGltZV8zMi5jIGIvYXJjaC9zaC9rZXJuZWwvdGltZV8zMi5jCmluZGV4IDA3NThiNWUuLjIzY2E3MTEgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL3RpbWVfMzIuYworKysgYi9hcmNoL3NoL2tlcm5lbC90aW1lXzMyLmMKQEAgLTEsOSArMSw5IEBACiAvKgotICogIGFyY2gvc2gva2VybmVsL3RpbWUuYworICogIGFyY2gvc2gva2VybmVsL3RpbWVfMzIuYwogICoKICAqICBDb3B5cmlnaHQgKEMpIDE5OTkgIFRldHN1eWEgT2thZGEgJiBOaWliZSBZdXRha2EKICAqICBDb3B5cmlnaHQgKEMpIDIwMDAgIFBoaWxpcHAgUnVtcGYgPHBydW1wZkB0dXgub3JnPgotICogIENvcHlyaWdodCAoQykgMjAwMiAtIDIwMDcgIFBhdWwgTXVuZHQKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDIgLSAyMDA4ICBQYXVsIE11bmR0CiAgKiAgQ29weXJpZ2h0IChDKSAyMDAyICBNLiBSLiBCcm93biAgPG1yYnJvd25AbGludXgtc2gub3JnPgogICoKICAqICBTb21lIGNvZGUgdGFrZW4gZnJvbSBpMzg2IHZlcnNpb24uCkBAIC0xNiw2ICsxNiw4IEBACiAjaW5jbHVkZSA8bGludXgvdGltZXguaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L2Nsb2NrY2hpcHMuaD4KKyNpbmNsdWRlIDxsaW51eC9tYzE0NjgxOHJ0Yy5oPgkvKiBmb3IgcnRjX2xvY2sgKi8KKyNpbmNsdWRlIDxsaW51eC9zbXAuaD4KICNpbmNsdWRlIDxhc20vY2xvY2suaD4KICNpbmNsdWRlIDxhc20vcnRjLmg+CiAjaW5jbHVkZSA8YXNtL3RpbWVyLmg+CkBAIC0yNTMsNiArMjU1LDEwIEBACiAJc2V0X25vcm1hbGl6ZWRfdGltZXNwZWMoJndhbGxfdG9fbW9ub3RvbmljLAogCQkJCS14dGltZS50dl9zZWMsIC14dGltZS50dl9uc2VjKTsKIAorI2lmZGVmIENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTX0JST0FEQ0FTVAorCWxvY2FsX3RpbWVyX3NldHVwKHNtcF9wcm9jZXNzb3JfaWQoKSk7CisjZW5kaWYKKwogCS8qCiAJICogRmluZCB0aGUgdGltZXIgdG8gdXNlIGFzIHRoZSBzeXN0ZW0gdGltZXIsIGl0IHdpbGwgYmUKIAkgKiBpbml0aWFsaXplZCBmb3IgdXMuCkBAIC0yNjAsNiArMjY2LDcgQEAKIAlzeXNfdGltZXIgPSBnZXRfc3lzX3RpbWVyKCk7CiAJcHJpbnRrKEtFUk5fSU5GTyAiVXNpbmcgJXMgZm9yIHN5c3RlbSB0aW1lclxuIiwgc3lzX3RpbWVyLT5uYW1lKTsKIAorCiAJaWYgKHN5c190aW1lci0+b3BzLT5yZWFkKQogCQljbG9ja3NvdXJjZV9zaC5yZWFkID0gc3lzX3RpbWVyLT5vcHMtPnJlYWQ7CiAKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL3RpbWVfNjQuYyBiL2FyY2gvc2gva2VybmVsL3RpbWVfNjQuYwppbmRleCA3OTFlZGFiLi5iYmIyYWYxIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC90aW1lXzY0LmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvdGltZV82NC5jCkBAIC0zOSw2ICszOSw3IEBACiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8YXNtL2RlbGF5Lmg+CisjaW5jbHVkZSA8YXNtL2Nsb2NrLmg+CiAKICNkZWZpbmUgVE1VX1RPQ1JfSU5JVAkweDAwCiAjZGVmaW5lIFRNVTBfVENSX0lOSVQJMHgwMDIwCkBAIC01MSwxNCArNTIsNiBAQAogI2RlZmluZSBSVENfUkNSMV9DSUUJMHgxMAkvKiBDYXJyeSBJbnRlcnJ1cHQgRW5hYmxlICovCiAjZGVmaW5lIFJUQ19SQ1IxCShydGNfYmFzZSArIDB4MzgpCiAKLS8qIENsb2NrLCBQb3dlciBhbmQgUmVzZXQgQ29udHJvbGxlciAqLwotI2RlZmluZQlDUFJDX0JMT0NLX09GRgkweDAxMDEwMDAwCi0jZGVmaW5lIENQUkNfQkFTRQlQSFlTX1BFUklQSEVSQUxfQkxPQ0sgKyBDUFJDX0JMT0NLX09GRgotCi0jZGVmaW5lIEZSUUNSCQkoY3ByY19iYXNlKzB4MCkKLSNkZWZpbmUgV1RDU1IJCShjcHJjX2Jhc2UrMHgwMDE4KQotI2RlZmluZSBTVEJDUgkJKGNwcmNfYmFzZSsweDAwMzApCi0KIC8qIFRpbWUgTWFuYWdlbWVudCBVbml0ICovCiAjZGVmaW5lCVRNVV9CTE9DS19PRkYJMHgwMTAyMDAwMAogI2RlZmluZSBUTVVfQkFTRQlQSFlTX1BFUklQSEVSQUxfQkxPQ0sgKyBUTVVfQkxPQ0tfT0ZGCkBAIC0yOTMsMTAzICsyODYsMTcgQEAKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CiAKLQotc3RhdGljIF9faW5pdCB1bnNpZ25lZCBpbnQgZ2V0X2NwdV9oeih2b2lkKQotewotCXVuc2lnbmVkIGludCBjb3VudDsKLQl1bnNpZ25lZCBsb25nIF9fZHVtbXk7Ci0JdW5zaWduZWQgbG9uZyBjdGNfdmFsX2luaXQsIGN0Y192YWw7Ci0KLQkvKgotCSoqIFJlZ2FyZGxlc3MgdGhlIHRvb2xjaGFpbiwgZm9yY2UgdGhlIGNvbXBpbGVyIHRvIHVzZSB0aGUKLQkqKiBhcmJpdHJhcnkgcmVnaXN0ZXIgcjMgYXMgYSBjbG9jayB0aWNrIGNvdW50ZXIuCi0JKiogTk9URTogcjMgbXVzdCBiZSBpbiBhY2NvcmRhbmNlIHdpdGggc2g2NF9ydGNfaW50ZXJydXB0KCkKLQkqLwotCXJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgbG9uZyAgX19ydGNfaXJxX2ZsYWcgX19hc21fXyAoInIzIik7Ci0KLQlsb2NhbF9pcnFfZW5hYmxlKCk7Ci0JZG8ge30gd2hpbGUgKGN0cmxfaW5iKHJ0Y19iYXNlKSAhPSAwKTsKLQljdHJsX291dGIoUlRDX1JDUjFfQ0lFLCBSVENfUkNSMSk7IC8qIEVuYWJsZSBjYXJyeSBpbnRlcnJ1cHQgKi8KLQotCS8qCi0JICogcjMgaXMgYXJiaXRyYXJ5LiBDREMgZG9lcyBub3Qgc3VwcG9ydCAiPXoiLgotCSAqLwotCWN0Y192YWxfaW5pdCA9IDB4ZmZmZmZmZmY7Ci0JY3RjX3ZhbCA9IGN0Y192YWxfaW5pdDsKLQotCWFzbSB2b2xhdGlsZSgiZ2V0dHIJdHIwLCAlMVxuXHQiCi0JCSAgICAgInB1dGNvbgklMCwgIiBfX0NUQyAiXG5cdCIKLQkJICAgICAiYW5kCSUyLCByNjMsICUyXG5cdCIKLQkJICAgICAicHRhCSQrNCwgdHIwXG5cdCIKLQkJICAgICAiYmVxL2wJJTIsIHI2MywgdHIwXG5cdCIKLQkJICAgICAicHRhYnMJJTEsIHRyMFxuXHQiCi0JCSAgICAgImdldGNvbgkiIF9fQ1RDICIsICUwXG5cdCIKLQkJOiAiPXIiKGN0Y192YWwpLCAiPXIiIChfX2R1bW15KSwgIj1yIiAoX19ydGNfaXJxX2ZsYWcpCi0JCTogIjAiICgwKSk7Ci0JbG9jYWxfaXJxX2Rpc2FibGUoKTsKLQkvKgotCSAqIFNILTM6Ci0JICogQ1BVIGNsb2NrID0gNCBzdGFnZXMgKiBsb29wCi0JICogdHN0ICAgIHJtLHJtICAgICAgaWYgaWQgZXgKLQkgKiBidC9zICAgMWIgICAgICAgICAgICBpZiBpZCBleAotCSAqIGFkZCAgICAjMSxyZCAgICAgICAgICAgIGlmIGlkIGV4Ci0gICAgICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpZikgcGlwZSBsaW5lIHN0b2xlCi0JICogdHN0ICAgIHJtLHJtICAgICAgICAgICAgICAgICAgaWYgaWQgZXgKLSAgICAgICAgICogLi4uLgotCSAqCi0JICoKLQkgKiBTSC00OgotCSAqIENQVSBjbG9jayA9IDYgc3RhZ2VzICogbG9vcAotCSAqIEkgZG9uJ3Qga25vdyB3aHkuCi0gICAgICAgICAqIC4uLi4KLQkgKgotCSAqIFNILTU6Ci0JICogVXNlIENUQyByZWdpc3RlciB0byBjb3VudC4gIFRoaXMgYXBwcm9hY2ggcmV0dXJucyB0aGUgcmlnaHQgdmFsdWUKLQkgKiBldmVuIGlmIHRoZSBJLWNhY2hlIGlzIGRpc2FibGVkIChlLmcuIHdoaWxzdCBkZWJ1Z2dpbmcuKQotCSAqCi0JICovCi0KLQljb3VudCA9IGN0Y192YWxfaW5pdCAtIGN0Y192YWw7IC8qIENUQyBjb3VudHMgZG93biAqLwotCi0JLyoKLQkgKiBUaGlzIHJlYWxseSBpcyBjb3VudCBieSB0aGUgbnVtYmVyIG9mIGNsb2NrIGN5Y2xlcwotICAgICAgICAgKiBieSB0aGUgcmF0aW8gYmV0d2VlbiBhIGNvbXBsZXRlIFI2NENOVAotICAgICAgICAgKiB3cmFwLWFyb3VuZCAoMTI4KSBhbmQgQ1VJIGludGVycnVwdCBiZWluZyByYWlzZWQgKDY0KS4KLQkgKi8KLQlyZXR1cm4gY291bnQqMjsKLX0KLQotc3RhdGljIGlycXJldHVybl90IHNoNjRfcnRjX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpCi17Ci0Jc3RydWN0IHB0X3JlZ3MgKnJlZ3MgPSBnZXRfaXJxX3JlZ3MoKTsKLQotCWN0cmxfb3V0YigwLCBSVENfUkNSMSk7CS8qIERpc2FibGUgQ2FycnkgSW50ZXJydXB0cyAqLwotCXJlZ3MtPnJlZ3NbM10gPSAxOwkvKiBVc2luZyByMyAqLwotCi0JcmV0dXJuIElSUV9IQU5ETEVEOwotfQotCiBzdGF0aWMgc3RydWN0IGlycWFjdGlvbiBpcnEwICA9IHsKIAkuaGFuZGxlciA9IHRpbWVyX2ludGVycnVwdCwKIAkuZmxhZ3MgPSBJUlFGX0RJU0FCTEVELAogCS5tYXNrID0gQ1BVX01BU0tfTk9ORSwKIAkubmFtZSA9ICJ0aW1lciIsCiB9Owotc3RhdGljIHN0cnVjdCBpcnFhY3Rpb24gaXJxMSAgPSB7Ci0JLmhhbmRsZXIgPSBzaDY0X3J0Y19pbnRlcnJ1cHQsCi0JLmZsYWdzID0gSVJRRl9ESVNBQkxFRCwKLQkubWFzayA9IENQVV9NQVNLX05PTkUsCi0JLm5hbWUgPSAicnRjIiwKLX07CiAKIHZvaWQgX19pbml0IHRpbWVfaW5pdCh2b2lkKQogewotCXVuc2lnbmVkIGludCBjcHVfY2xvY2ssIG1hc3Rlcl9jbG9jaywgYnVzX2Nsb2NrLCBtb2R1bGVfY2xvY2s7CiAJdW5zaWduZWQgbG9uZyBpbnRlcnZhbDsKLQl1bnNpZ25lZCBsb25nIGZycWNyLCBpZmMsIHBmYzsKLQlzdGF0aWMgaW50IGlmY190YWJsZVtdID0geyAyLCA0LCA2LCA4LCAxMCwgMTIsIDE2LCAyNCB9OwotI2RlZmluZSBiZmNfdGFibGUgaWZjX3RhYmxlCS8qIFNhbWUgKi8KLSNkZWZpbmUgcGZjX3RhYmxlIGlmY190YWJsZQkvKiBTYW1lICovCisJc3RydWN0IGNsayAqY2xrOwogCiAJdG11X2Jhc2UgPSBvbmNoaXBfcmVtYXAoVE1VX0JBU0UsIDEwMjQsICJUTVUiKTsKIAlpZiAoIXRtdV9iYXNlKSB7CkBAIC00MDEsNTAgKzMwOCwxOSBAQAogCQlwYW5pYygiVW5hYmxlIHRvIHJlbWFwIFJUQ1xuIik7CiAJfQogCi0JY3ByY19iYXNlID0gb25jaGlwX3JlbWFwKENQUkNfQkFTRSwgMTAyNCwgIkNQUkMiKTsKLQlpZiAoIWNwcmNfYmFzZSkgewotCQlwYW5pYygiVW5hYmxlIHRvIHJlbWFwIENQUkNcbiIpOwotCX0KKwljbGsgPSBjbGtfZ2V0KE5VTEwsICJjcHVfY2xrIik7CisJc2NhbGVkX3JlY2lwX2N0Y190aWNrc19wZXJfamlmZnkgPSAoKDFVTEwgPDwgQ1RDX0pJRkZZX1NDQUxFX1NISUZUKSAvCisJCQkodW5zaWduZWQgbG9uZyBsb25nKShjbGtfZ2V0X3JhdGUoY2xrKSAvIEhaKSk7CiAKIAlydGNfc2hfZ2V0X3RpbWUoJnh0aW1lKTsKIAogCXNldHVwX2lycShUSU1FUl9JUlEsICZpcnEwKTsKLQlzZXR1cF9pcnEoUlRDX0lSUSwgJmlycTEpOwogCi0JLyogQ2hlY2sgaG93IGZhc3QgaXQgaXMuLiAqLwotCWNwdV9jbG9jayA9IGdldF9jcHVfaHooKTsKLQotCS8qIE5vdGUgY2FyZWZ1bCBvcmRlciBvZiBvcGVyYXRpb25zIHRvIG1haW50YWluIHJlYXNvbmFibGUgcHJlY2lzaW9uIGFuZCBhdm9pZCBvdmVyZmxvdy4gKi8KLQlzY2FsZWRfcmVjaXBfY3RjX3RpY2tzX3Blcl9qaWZmeSA9ICgoMVVMTCA8PCBDVENfSklGRllfU0NBTEVfU0hJRlQpIC8gKHVuc2lnbmVkIGxvbmcgbG9uZykoY3B1X2Nsb2NrIC8gSFopKTsKLQotCWZyZWVfaXJxKFJUQ19JUlEsIE5VTEwpOwotCi0JcHJpbnRrKCJDUFUgY2xvY2s6ICVkLiUwMmRNSHpcbiIsCi0JICAgICAgIChjcHVfY2xvY2sgLyAxMDAwMDAwKSwgKGNwdV9jbG9jayAlIDEwMDAwMDApLzEwMDAwKTsKLQl7Ci0JCXVuc2lnbmVkIHNob3J0IGJmYzsKLQkJZnJxY3IgPSBjdHJsX2lubChGUlFDUik7Ci0JCWlmYyAgPSBpZmNfdGFibGVbKGZycWNyPj4gNikgJiAweDAwMDddOwotCQliZmMgID0gYmZjX3RhYmxlWyhmcnFjcj4+IDMpICYgMHgwMDA3XTsKLQkJcGZjICA9IHBmY190YWJsZVsoZnJxY3I+PiAxMikgJiAweDAwMDddOwotCQltYXN0ZXJfY2xvY2sgPSBjcHVfY2xvY2sgKiBpZmM7Ci0JCWJ1c19jbG9jayA9IG1hc3Rlcl9jbG9jay9iZmM7Ci0JfQotCi0JcHJpbnRrKCJCdXMgY2xvY2s6ICVkLiUwMmRNSHpcbiIsCi0JICAgICAgIChidXNfY2xvY2svMTAwMDAwMCksIChidXNfY2xvY2sgJSAxMDAwMDAwKS8xMDAwMCk7Ci0JbW9kdWxlX2Nsb2NrID0gbWFzdGVyX2Nsb2NrL3BmYzsKLQlwcmludGsoIk1vZHVsZSBjbG9jazogJWQuJTAyZE1IelxuIiwKLQkgICAgICAgKG1vZHVsZV9jbG9jay8xMDAwMDAwKSwgKG1vZHVsZV9jbG9jayAlIDEwMDAwMDApLzEwMDAwKTsKLQlpbnRlcnZhbCA9IChtb2R1bGVfY2xvY2svKEhaKjQpKTsKKwljbGsgPSBjbGtfZ2V0KE5VTEwsICJtb2R1bGVfY2xrIik7CisJaW50ZXJ2YWwgPSAoY2xrX2dldF9yYXRlKGNsaykvKEhaKjQpKTsKIAogCXByaW50aygiSW50ZXJ2YWwgPSAlbGRcbiIsIGludGVydmFsKTsKIAotCWN1cnJlbnRfY3B1X2RhdGEuY3B1X2Nsb2NrICAgID0gY3B1X2Nsb2NrOwotCWN1cnJlbnRfY3B1X2RhdGEubWFzdGVyX2Nsb2NrID0gbWFzdGVyX2Nsb2NrOwotCWN1cnJlbnRfY3B1X2RhdGEuYnVzX2Nsb2NrICAgID0gYnVzX2Nsb2NrOwotCWN1cnJlbnRfY3B1X2RhdGEubW9kdWxlX2Nsb2NrID0gbW9kdWxlX2Nsb2NrOwotCiAJLyogU3RhcnQgVE1VMCAqLwogCWN0cmxfb3V0YihUTVVfVFNUUl9PRkYsIFRNVV9UU1RSKTsKIAljdHJsX291dGIoVE1VX1RPQ1JfSU5JVCwgVE1VX1RPQ1IpOwpAQCAtNDU0LDM2ICszMzAsNiBAQAogCWN0cmxfb3V0YihUTVVfVFNUUl9JTklULCBUTVVfVFNUUik7CiB9CiAKLXZvaWQgZW50ZXJfZGVlcF9zdGFuZGJ5KHZvaWQpCi17Ci0JLyogRGlzYWJsZSB3YXRjaGRvZyB0aW1lciAqLwotCWN0cmxfb3V0bCgweGE1MDAwMDAwLCBXVENTUik7Ci0JLyogQ29uZmlndXJlIGRlZXAgc3RhbmRieSBvbiBzbGVlcCAqLwotCWN0cmxfb3V0bCgweDAzLCBTVEJDUik7Ci0KLSNpZmRlZiBDT05GSUdfU0hfQUxQSEFOVU1FUklDCi0JewotCQlleHRlcm4gdm9pZCBtYWNoX2FscGhhbnVtKGludCBwb3NpdGlvbiwgdW5zaWduZWQgY2hhciB2YWx1ZSk7Ci0JCWV4dGVybiB2b2lkIG1hY2hfYWxwaGFudW1fYnJpZ2h0bmVzcyhpbnQgc2V0dGluZyk7Ci0JCWNoYXIgaGFsdGVkW10gPSAiSGFsdGVkLiAiOwotCQlpbnQgaTsKLQkJbWFjaF9hbHBoYW51bV9icmlnaHRuZXNzKDYpOyAvKiBkaW1tZXN0IHNldHRpbmcgYWJvdmUgb2ZmICovCi0JCWZvciAoaT0wOyBpPDg7IGkrKykgewotCQkJbWFjaF9hbHBoYW51bShpLCBoYWx0ZWRbaV0pOwotCQl9Ci0JCWFzbSBfX3ZvbGF0aWxlX18gKCJzeW5jbyIpOwotCX0KLSNlbmRpZgotCi0JYXNtIF9fdm9sYXRpbGVfXyAoInNsZWVwIik7Ci0JYXNtIF9fdm9sYXRpbGVfXyAoInN5bmNpIik7Ci0JYXNtIF9fdm9sYXRpbGVfXyAoIm5vcCIpOwotCWFzbSBfX3ZvbGF0aWxlX18gKCJub3AiKTsKLQlhc20gX192b2xhdGlsZV9fICgibm9wIik7Ci0JYXNtIF9fdm9sYXRpbGVfXyAoIm5vcCIpOwotCXBhbmljKCJVbmV4cGVjdGVkIHdha2V1cCFcbiIpOwotfQotCiBzdGF0aWMgc3RydWN0IHJlc291cmNlIHJ0Y19yZXNvdXJjZXNbXSA9IHsKIAlbMF0gPSB7CiAJCS8qIFJUQyBiYXNlLCBmaWxsZWQgaW4gYnkgcnRjX2luaXQgKi8KZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL3RpbWVycy9NYWtlZmlsZSBiL2FyY2gvc2gva2VybmVsL3RpbWVycy9NYWtlZmlsZQppbmRleCBiY2YyNDRmLi4wYjdmODU3IDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC90aW1lcnMvTWFrZWZpbGUKKysrIGIvYXJjaC9zaC9rZXJuZWwvdGltZXJzL01ha2VmaWxlCkBAIC04LDMgKzgsNCBAQAogb2JqLSQoQ09ORklHX1NIX01UVTIpCQkrPSB0aW1lci1tdHUyLm8KIG9iai0kKENPTkZJR19TSF9DTVQpCQkrPSB0aW1lci1jbXQubwogCitvYmotJChDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UU19CUk9BRENBU1QpCSs9IHRpbWVyLWJyb2FkY2FzdC5vCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC90aW1lcnMvdGltZXItYnJvYWRjYXN0LmMgYi9hcmNoL3NoL2tlcm5lbC90aW1lcnMvdGltZXItYnJvYWRjYXN0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzIzMTc2MwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvc2gva2VybmVsL3RpbWVycy90aW1lci1icm9hZGNhc3QuYwpAQCAtMCwwICsxLDU3IEBACisvKgorICogRHVtbXkgbG9jYWwgdGltZXIKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggIFBhdWwgTXVuZHQKKyAqCisgKiBjbG9uZWQgZnJvbToKKyAqCisgKiAgbGludXgvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9sb2NhbHRpbWVyLmMKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDAyIEFSTSBMdGQuCisgKiAgQWxsIFJpZ2h0cyBSZXNlcnZlZAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9zbXAuaD4KKyNpbmNsdWRlIDxsaW51eC9qaWZmaWVzLmg+CisjaW5jbHVkZSA8bGludXgvcGVyY3B1Lmg+CisjaW5jbHVkZSA8bGludXgvY2xvY2tjaGlwcy5oPgorI2luY2x1ZGUgPGxpbnV4L2lycS5oPgorCitzdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSwgbG9jYWxfY2xvY2tldmVudCk7CisKKy8qCisgKiBVc2VkIG9uIFNNUCBmb3IgZWl0aGVyIHRoZSBsb2NhbCB0aW1lciBvciBTTVBfTVNHX1RJTUVSCisgKi8KK3ZvaWQgbG9jYWxfdGltZXJfaW50ZXJydXB0KHZvaWQpCit7CisJc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqY2xrID0gJl9fZ2V0X2NwdV92YXIobG9jYWxfY2xvY2tldmVudCk7CisKKwljbGstPmV2ZW50X2hhbmRsZXIoY2xrKTsKK30KKworc3RhdGljIHZvaWQgZHVtbXlfdGltZXJfc2V0X21vZGUoZW51bSBjbG9ja19ldmVudF9tb2RlIG1vZGUsCisJCQkJIHN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgKmNsaykKK3sKK30KKwordm9pZCBfX2NwdWluaXQgbG9jYWxfdGltZXJfc2V0dXAodW5zaWduZWQgaW50IGNwdSkKK3sKKwlzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpjbGsgPSAmcGVyX2NwdShsb2NhbF9jbG9ja2V2ZW50LCBjcHUpOworCisJY2xrLT5uYW1lCQk9ICJkdW1teV90aW1lciI7CisJY2xrLT5mZWF0dXJlcwkJPSBDTE9DS19FVlRfRkVBVF9EVU1NWTsKKwljbGstPnJhdGluZwkJPSAyMDA7CisJY2xrLT5tdWx0CQk9IDE7CisJY2xrLT5zZXRfbW9kZQkJPSBkdW1teV90aW1lcl9zZXRfbW9kZTsKKwljbGstPmJyb2FkY2FzdAkJPSBzbXBfdGltZXJfYnJvYWRjYXN0OworCWNsay0+Y3B1bWFzawkJPSBjcHVtYXNrX29mX2NwdShjcHUpOworCisJY2xvY2tldmVudHNfcmVnaXN0ZXJfZGV2aWNlKGNsayk7Cit9CmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC90aW1lcnMvdGltZXItY210LmMgYi9hcmNoL3NoL2tlcm5lbC90aW1lcnMvdGltZXItY210LmMKaW5kZXggZDIwYzhjMy4uYzEyNzI5MyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvdGltZXJzL3RpbWVyLWNtdC5jCisrKyBiL2FyY2gvc2gva2VybmVsL3RpbWVycy90aW1lci1jbXQuYwpAQCAtMTc0LDcgKzE3NCw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0cnVjdCBzeXNfdGltZXJfb3BzIGNtdF90aW1lcl9vcHMgPSB7CitzdGF0aWMgc3RydWN0IHN5c190aW1lcl9vcHMgY210X3RpbWVyX29wcyA9IHsKIAkuaW5pdAkJPSBjbXRfdGltZXJfaW5pdCwKIAkuc3RhcnQJCT0gY210X3RpbWVyX3N0YXJ0LAogCS5zdG9wCQk9IGNtdF90aW1lcl9zdG9wLApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvdGltZXJzL3RpbWVyLXRtdS5jIGIvYXJjaC9zaC9rZXJuZWwvdGltZXJzL3RpbWVyLXRtdS5jCmluZGV4IDFjYTlhZDQuLmFhYWY5MGQgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL3RpbWVycy90aW1lci10bXUuYworKysgYi9hcmNoL3NoL2tlcm5lbC90aW1lcnMvdGltZXItdG11LmMKQEAgLTI4LDQzICsyOCw5MCBAQAogI2RlZmluZSBUTVVfVE9DUl9JTklUCTB4MDAKICNkZWZpbmUgVE1VX1RDUl9JTklUCTB4MDAyMAogCisjZGVmaW5lIFRNVTAJCSgwKQorI2RlZmluZSBUTVUxCQkoMSkKKworc3RhdGljIGlubGluZSB2b2lkIF90bXVfc3RhcnQoaW50IHRtdV9udW0pCit7CisJY3RybF9vdXRiKGN0cmxfaW5iKFRNVV8wMTJfVFNUUikgfCAoMHgxPDx0bXVfbnVtKSwgVE1VXzAxMl9UU1RSKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIF90bXVfc2V0X2lycShpbnQgdG11X251bSwgaW50IGVuYWJsZWQpCit7CisJcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyB0bXVfdGNyID0gVE1VMF9UQ1IgKyAoMHhjKnRtdV9udW0pOworCWN0cmxfb3V0dyggKGVuYWJsZWQgPyBjdHJsX2ludyh0bXVfdGNyKSB8ICgxPDw1KSA6IGN0cmxfaW53KHRtdV90Y3IpICYgfigxPDw1KSksIHRtdV90Y3IpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgX3RtdV9zdG9wKGludCB0bXVfbnVtKQoreworCWN0cmxfb3V0YihjdHJsX2luYihUTVVfMDEyX1RTVFIpICYgfigweDE8PHRtdV9udW0pLCBUTVVfMDEyX1RTVFIpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgX3RtdV9jbGVhcl9zdGF0dXMoaW50IHRtdV9udW0pCit7CisJcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyB0bXVfdGNyID0gVE1VMF9UQ1IgKyAoMHhjKnRtdV9udW0pOworCS8qIENsZWFyIFVORiBiaXQgKi8KKwljdHJsX291dHcoY3RybF9pbncodG11X3RjcikgJiB+MHgxMDAsIHRtdV90Y3IpOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgX3RtdV9yZWFkKGludCB0bXVfbnVtKQoreworICAgICAgICByZXR1cm4gY3RybF9pbmwoVE1VMF9UQ05UKzB4Qyp0bXVfbnVtKTsKK30KKwogc3RhdGljIGludCB0bXVfdGltZXJfc3RhcnQodm9pZCkKIHsKLQljdHJsX291dGIoY3RybF9pbmIoVE1VXzAxMl9UU1RSKSB8IDB4MywgVE1VXzAxMl9UU1RSKTsKKwlfdG11X3N0YXJ0KFRNVTApOworCV90bXVfc3RhcnQoVE1VMSk7CisJX3RtdV9zZXRfaXJxKFRNVTAsMSk7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIHRtdTBfdGltZXJfc2V0X2ludGVydmFsKHVuc2lnbmVkIGxvbmcgaW50ZXJ2YWwsIHVuc2lnbmVkIGludCByZWxvYWQpCitzdGF0aWMgaW50IHRtdV90aW1lcl9zdG9wKHZvaWQpCiB7Ci0JY3RybF9vdXRsKGludGVydmFsLCBUTVUwX1RDTlQpOworCV90bXVfc3RvcChUTVUwKTsKKwlfdG11X3N0b3AoVE1VMSk7CisJX3RtdV9jbGVhcl9zdGF0dXMoVE1VMCk7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBhbHNvIHdoZW4gdGhlIG1vZHVsZV9jbGsgaXMgc2NhbGVkIHRoZSBUTVUxCisgKiB3aWxsIHNob3cgdGhlIHNhbWUgZnJlcXVlbmN5CisgKi8KK3N0YXRpYyBpbnQgdG11c19hcmVfc2NhbGVkOworCitzdGF0aWMgY3ljbGVfdCB0bXVfdGltZXJfcmVhZCh2b2lkKQoreworCXJldHVybiAoKGN5Y2xlX3QpKH5fdG11X3JlYWQoVE1VMSkpKTw8dG11c19hcmVfc2NhbGVkOworfQorCisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHRtdV9sYXRlc3RfaW50ZXJ2YWxbM107CitzdGF0aWMgdm9pZCB0bXVfdGltZXJfc2V0X2ludGVydmFsKGludCB0bXVfbnVtLCB1bnNpZ25lZCBsb25nIGludGVydmFsLCB1bnNpZ25lZCBpbnQgcmVsb2FkKQoreworCXVuc2lnbmVkIGxvbmcgdG11X3RjbnQgPSBUTVUwX1RDTlQgKyB0bXVfbnVtKjB4QzsKKwl1bnNpZ25lZCBsb25nIHRtdV90Y29yID0gVE1VMF9UQ09SICsgdG11X251bSoweEM7CisKKwlfdG11X3N0b3AodG11X251bSk7CisKKwljdHJsX291dGwoaW50ZXJ2YWwsIHRtdV90Y250KTsKKwl0bXVfbGF0ZXN0X2ludGVydmFsW3RtdV9udW1dID0gaW50ZXJ2YWw7CiAKIAkvKgogCSAqIFRDTlQgcmVsb2FkcyBmcm9tIFRDT1Igb24gdW5kZXJmbG93LCBjbGVhciBpdCBpZiB3ZSBkb24ndAogCSAqIGludGVuZCB0byBhdXRvLXJlbG9hZAogCSAqLwotCWlmIChyZWxvYWQpCi0JCWN0cmxfb3V0bChpbnRlcnZhbCwgVE1VMF9UQ09SKTsKLQllbHNlCi0JCWN0cmxfb3V0bCgwLCBUTVUwX1RDT1IpOworCWN0cmxfb3V0bCggcmVsb2FkID8gaW50ZXJ2YWwgOiAwICwgdG11X3Rjb3IpOwogCi0JdG11X3RpbWVyX3N0YXJ0KCk7Ci19Ci0KLXN0YXRpYyBpbnQgdG11X3RpbWVyX3N0b3Aodm9pZCkKLXsKLQljdHJsX291dGIoY3RybF9pbmIoVE1VXzAxMl9UU1RSKSAmIH4weDMsIFRNVV8wMTJfVFNUUik7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBjeWNsZV90IHRtdV90aW1lcl9yZWFkKHZvaWQpCi17Ci0JcmV0dXJuIH5jdHJsX2lubChUTVUxX1RDTlQpOworCV90bXVfc3RhcnQodG11X251bSk7CiB9CiAKIHN0YXRpYyBpbnQgdG11X3NldF9uZXh0X2V2ZW50KHVuc2lnbmVkIGxvbmcgY3ljbGVzLAogCQkJICAgICAgc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqZXZ0KQogewotCXRtdTBfdGltZXJfc2V0X2ludGVydmFsKGN5Y2xlcywgMSk7CisJdG11X3RpbWVyX3NldF9pbnRlcnZhbChUTVUwLGN5Y2xlcywgZXZ0LT5tb2RlID09IENMT0NLX0VWVF9NT0RFX1BFUklPRElDKTsKKwlfdG11X3NldF9pcnEoVE1VMCwxKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtOTYsMTIgKzE0Myw4IEBACiBzdGF0aWMgaXJxcmV0dXJuX3QgdG11X3RpbWVyX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkdW1teSkKIHsKIAlzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpldnQgPSAmdG11MF9jbG9ja2V2ZW50OwotCXVuc2lnbmVkIGxvbmcgdGltZXJfc3RhdHVzOwotCi0JLyogQ2xlYXIgVU5GIGJpdCAqLwotCXRpbWVyX3N0YXR1cyA9IGN0cmxfaW53KFRNVTBfVENSKTsKLQl0aW1lcl9zdGF0dXMgJj0gfjB4MTAwOwotCWN0cmxfb3V0dyh0aW1lcl9zdGF0dXMsIFRNVTBfVENSKTsKKwlfdG11X2NsZWFyX3N0YXR1cyhUTVUwKTsKKwlfdG11X3NldF9pcnEoVE1VMCx0bXUwX2Nsb2NrZXZlbnQubW9kZSAhPSBDTE9DS19FVlRfTU9ERV9PTkVTSE9UKTsKIAogCWV2dC0+ZXZlbnRfaGFuZGxlcihldnQpOwogCkBAIC0xMDksNTYgKzE1Miw3MyBAQAogfQogCiBzdGF0aWMgc3RydWN0IGlycWFjdGlvbiB0bXUwX2lycSA9IHsKLQkubmFtZQkJPSAicGVyaW9kaWMgdGltZXIiLAorCS5uYW1lCQk9ICJwZXJpb2RpYy9vbmVzaG90IHRpbWVyIiwKIAkuaGFuZGxlcgk9IHRtdV90aW1lcl9pbnRlcnJ1cHQsCiAJLmZsYWdzCQk9IElSUUZfRElTQUJMRUQgfCBJUlFGX1RJTUVSIHwgSVJRRl9JUlFQT0xMLAogCS5tYXNrCQk9IENQVV9NQVNLX05PTkUsCiB9OwogCi1zdGF0aWMgdm9pZCB0bXUwX2Nsa19pbml0KHN0cnVjdCBjbGsgKmNsaykKK3N0YXRpYyB2b2lkIF9faW5pdCB0bXVfY2xrX2luaXQoc3RydWN0IGNsayAqY2xrKQogewotCXU4IGRpdmlzb3IgPSBUTVVfVENSX0lOSVQgJiAweDc7Ci0JY3RybF9vdXR3KFRNVV9UQ1JfSU5JVCwgVE1VMF9UQ1IpOwotCWNsay0+cmF0ZSA9IGNsay0+cGFyZW50LT5yYXRlIC8gKDQgPDwgKGRpdmlzb3IgPDwgMSkpOworCXU4IGRpdmlzb3IgID0gVE1VX1RDUl9JTklUICYgMHg3OworCWludCB0bXVfbnVtID0gY2xrLT5uYW1lWzNdLScwJzsKKwljdHJsX291dHcoVE1VX1RDUl9JTklULCBUTVUwX1RDUisodG11X251bSoweEMpKTsKKwljbGstPnJhdGUgPSBjbGtfZ2V0X3JhdGUoY2xrLT5wYXJlbnQpIC8gKDQgPDwgKGRpdmlzb3IgPDwgMSkpOwogfQogCi1zdGF0aWMgdm9pZCB0bXUwX2Nsa19yZWNhbGMoc3RydWN0IGNsayAqY2xrKQorc3RhdGljIHZvaWQgdG11X2Nsa19yZWNhbGMoc3RydWN0IGNsayAqY2xrKQogewotCXU4IGRpdmlzb3IgPSBjdHJsX2ludyhUTVUwX1RDUikgJiAweDc7Ci0JY2xrLT5yYXRlID0gY2xrLT5wYXJlbnQtPnJhdGUgLyAoNCA8PCAoZGl2aXNvciA8PCAxKSk7CisJaW50IHRtdV9udW0gPSBjbGstPm5hbWVbM10tJzAnOworCXVuc2lnbmVkIGxvbmcgcHJldl9yYXRlID0gY2xrX2dldF9yYXRlKGNsayk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1OCBkaXZpc29yID0gY3RybF9pbncoVE1VMF9UQ1IrdG11X251bSoweEMpICYgMHg3OworCWNsay0+cmF0ZSAgPSBjbGtfZ2V0X3JhdGUoY2xrLT5wYXJlbnQpIC8gKDQgPDwgKGRpdmlzb3IgPDwgMSkpOworCisJaWYocHJldl9yYXRlPT1jbGtfZ2V0X3JhdGUoY2xrKSkKKwkJcmV0dXJuOworCisJaWYodG11X251bSkKKwkJcmV0dXJuOyAvKiBObyBtb3JlIHdvcmsgb24gVE1VMSAqLworCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCXRtdXNfYXJlX3NjYWxlZCA9IChwcmV2X3JhdGUgPiBjbGstPnJhdGUpOworCisJX3RtdV9zdG9wKFRNVTApOworCisJdG11MF9jbG9ja2V2ZW50Lm11bHQgPSBkaXZfc2MoY2xrLT5yYXRlLCBOU0VDX1BFUl9TRUMsCisJCQkJdG11MF9jbG9ja2V2ZW50LnNoaWZ0KTsKKwl0bXUwX2Nsb2NrZXZlbnQubWF4X2RlbHRhX25zID0KKwkJCWNsb2NrZXZlbnRfZGVsdGEybnMoLTEsICZ0bXUwX2Nsb2NrZXZlbnQpOworCXRtdTBfY2xvY2tldmVudC5taW5fZGVsdGFfbnMgPQorCQkJY2xvY2tldmVudF9kZWx0YTJucygxLCAmdG11MF9jbG9ja2V2ZW50KTsKKworCWlmICh0bXVzX2FyZV9zY2FsZWQpCisJCXRtdV9sYXRlc3RfaW50ZXJ2YWxbVE1VMF0gPj49IDE7CisJZWxzZQorCQl0bXVfbGF0ZXN0X2ludGVydmFsW1RNVTBdIDw8PSAxOworCisJdG11X3RpbWVyX3NldF9pbnRlcnZhbChUTVUwLAorCQl0bXVfbGF0ZXN0X2ludGVydmFsW1RNVTBdLAorCQl0bXUwX2Nsb2NrZXZlbnQubW9kZSA9PSBDTE9DS19FVlRfTU9ERV9QRVJJT0RJQyk7CisKKwlfdG11X3N0YXJ0KFRNVTApOworCisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogfQogCi1zdGF0aWMgc3RydWN0IGNsa19vcHMgdG11MF9jbGtfb3BzID0gewotCS5pbml0CQk9IHRtdTBfY2xrX2luaXQsCi0JLnJlY2FsYwkJPSB0bXUwX2Nsa19yZWNhbGMsCitzdGF0aWMgc3RydWN0IGNsa19vcHMgdG11X2Nsa19vcHMgPSB7CisJLmluaXQJCT0gdG11X2Nsa19pbml0LAorCS5yZWNhbGMJCT0gdG11X2Nsa19yZWNhbGMsCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayB0bXUwX2NsayA9IHsKIAkubmFtZQkJPSAidG11MF9jbGsiLAotCS5vcHMJCT0gJnRtdTBfY2xrX29wcywKLX07Ci0KLXN0YXRpYyB2b2lkIHRtdTFfY2xrX2luaXQoc3RydWN0IGNsayAqY2xrKQotewotCXU4IGRpdmlzb3IgPSBUTVVfVENSX0lOSVQgJiAweDc7Ci0JY3RybF9vdXR3KGRpdmlzb3IsIFRNVTFfVENSKTsKLQljbGstPnJhdGUgPSBjbGstPnBhcmVudC0+cmF0ZSAvICg0IDw8IChkaXZpc29yIDw8IDEpKTsKLX0KLQotc3RhdGljIHZvaWQgdG11MV9jbGtfcmVjYWxjKHN0cnVjdCBjbGsgKmNsaykKLXsKLQl1OCBkaXZpc29yID0gY3RybF9pbncoVE1VMV9UQ1IpICYgMHg3OwotCWNsay0+cmF0ZSA9IGNsay0+cGFyZW50LT5yYXRlIC8gKDQgPDwgKGRpdmlzb3IgPDwgMSkpOwotfQotCi1zdGF0aWMgc3RydWN0IGNsa19vcHMgdG11MV9jbGtfb3BzID0gewotCS5pbml0CQk9IHRtdTFfY2xrX2luaXQsCi0JLnJlY2FsYwkJPSB0bXUxX2Nsa19yZWNhbGMsCisJLm9wcwkJPSAmdG11X2Nsa19vcHMsCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayB0bXUxX2NsayA9IHsKIAkubmFtZQkJPSAidG11MV9jbGsiLAotCS5vcHMJCT0gJnRtdTFfY2xrX29wcywKKwkub3BzCQk9ICZ0bXVfY2xrX29wcywKIH07CiAKIHN0YXRpYyBpbnQgdG11X3RpbWVyX2luaXQodm9pZCkKQEAgLTE4OSwxMSArMjQ5LDEyIEBACiAJZnJlcXVlbmN5ID0gY2xrX2dldF9yYXRlKCZ0bXUwX2Nsayk7CiAJaW50ZXJ2YWwgPSAoZnJlcXVlbmN5ICsgSFogLyAyKSAvIEhaOwogCi0Jc2hfaHB0X2ZyZXF1ZW5jeSA9IGNsa19nZXRfcmF0ZSgmdG11MV9jbGspOwotCWN0cmxfb3V0bCh+MCwgVE1VMV9UQ05UKTsKLQljdHJsX291dGwofjAsIFRNVTFfVENPUik7CisJdG11X3RpbWVyX3NldF9pbnRlcnZhbChUTVUwLGludGVydmFsLCAxKTsKKwl0bXVfdGltZXJfc2V0X2ludGVydmFsKFRNVTEsfjAsMSk7CiAKLQl0bXUwX3RpbWVyX3NldF9pbnRlcnZhbChpbnRlcnZhbCwgMSk7CisJX3RtdV9zdGFydChUTVUxKTsKKworCXNoX2hwdF9mcmVxdWVuY3kgPSBjbGtfZ2V0X3JhdGUoJnRtdTFfY2xrKTsKIAogCXRtdTBfY2xvY2tldmVudC5tdWx0ID0gZGl2X3NjKGZyZXF1ZW5jeSwgTlNFQ19QRVJfU0VDLAogCQkJCSAgICAgIHRtdTBfY2xvY2tldmVudC5zaGlmdCk7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC90cmFwc18zMi5jIGIvYXJjaC9zaC9rZXJuZWwvdHJhcHNfMzIuYwppbmRleCA1MTFhOTQyLi5iMzU5YjA4IDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC90cmFwc18zMi5jCisrKyBiL2FyY2gvc2gva2VybmVsL3RyYXBzXzMyLmMKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxhc20vZnB1Lmg+CisjaW5jbHVkZSA8YXNtL2twcm9iZXMuaD4KIAogI2lmZGVmIENPTkZJR19TSF9LR0RCCiAjaW5jbHVkZSA8YXNtL2tnZGIuaD4KQEAgLTE5Miw2ICsxOTMsNyBAQAogCWludCByZXQsIGluZGV4LCBjb3VudDsKIAl1bnNpZ25lZCBsb25nICpybSwgKnJuOwogCXVuc2lnbmVkIGNoYXIgKnNyYywgKmRzdDsKKwl1bnNpZ25lZCBjaGFyIF9fdXNlciAqc3JjdSwgKmRzdHU7CiAKIAlpbmRleCA9IChpbnN0cnVjdGlvbj4+OCkmMTU7CS8qIDB4MEYwMCAqLwogCXJuID0gJnJlZ3MtPnJlZ3NbaW5kZXhdOwpAQCAtMjA2LDI4ICsyMDgsMjggQEAKIAljYXNlIDA6IC8qIG1vdi5bYndsXSB0by9mcm9tIG1lbW9yeSB2aWEgcjArcm4gKi8KIAkJaWYgKGluc3RydWN0aW9uICYgOCkgewogCQkJLyogZnJvbSBtZW1vcnkgKi8KLQkJCXNyYyA9ICh1bnNpZ25lZCBjaGFyKikgKnJtOwotCQkJc3JjICs9IHJlZ3MtPnJlZ3NbMF07Ci0JCQlkc3QgPSAodW5zaWduZWQgY2hhciopIHJuOwotCQkJKih1bnNpZ25lZCBsb25nKilkc3QgPSAwOworCQkJc3JjdSA9ICh1bnNpZ25lZCBjaGFyIF9fdXNlciAqKSpybTsKKwkJCXNyY3UgKz0gcmVncy0+cmVnc1swXTsKKwkJCWRzdCA9ICh1bnNpZ25lZCBjaGFyICopcm47CisJCQkqKHVuc2lnbmVkIGxvbmcgKilkc3QgPSAwOwogCiAjaWYgIWRlZmluZWQoX19MSVRUTEVfRU5ESUFOX18pCiAJCQlkc3QgKz0gNC1jb3VudDsKICNlbmRpZgotCQkJaWYgKG1hLT5mcm9tKGRzdCwgc3JjLCBjb3VudCkpCisJCQlpZiAobWEtPmZyb20oZHN0LCBzcmN1LCBjb3VudCkpCiAJCQkJZ290byBmZXRjaF9mYXVsdDsKIAogCQkJc2lnbl9leHRlbmQoY291bnQsIGRzdCk7CiAJCX0gZWxzZSB7CiAJCQkvKiB0byBtZW1vcnkgKi8KLQkJCXNyYyA9ICh1bnNpZ25lZCBjaGFyKikgcm07CisJCQlzcmMgPSAodW5zaWduZWQgY2hhciAqKXJtOwogI2lmICFkZWZpbmVkKF9fTElUVExFX0VORElBTl9fKQogCQkJc3JjICs9IDQtY291bnQ7CiAjZW5kaWYKLQkJCWRzdCA9ICh1bnNpZ25lZCBjaGFyKikgKnJuOwotCQkJZHN0ICs9IHJlZ3MtPnJlZ3NbMF07CisJCQlkc3R1ID0gKHVuc2lnbmVkIGNoYXIgX191c2VyICopKnJuOworCQkJZHN0dSArPSByZWdzLT5yZWdzWzBdOwogCi0JCQlpZiAobWEtPnRvKGRzdCwgc3JjLCBjb3VudCkpCisJCQlpZiAobWEtPnRvKGRzdHUsIHNyYywgY291bnQpKQogCQkJCWdvdG8gZmV0Y2hfZmF1bHQ7CiAJCX0KIAkJcmV0ID0gMDsKQEAgLTIzNSwxMCArMjM3LDEwIEBACiAKIAljYXNlIDE6IC8qIG1vdi5sIFJtLEAoZGlzcCxSbikgKi8KIAkJc3JjID0gKHVuc2lnbmVkIGNoYXIqKSBybTsKLQkJZHN0ID0gKHVuc2lnbmVkIGNoYXIqKSAqcm47Ci0JCWRzdCArPSAoaW5zdHJ1Y3Rpb24mMHgwMDBGKTw8MjsKKwkJZHN0dSA9ICh1bnNpZ25lZCBjaGFyIF9fdXNlciAqKSpybjsKKwkJZHN0dSArPSAoaW5zdHJ1Y3Rpb24mMHgwMDBGKTw8MjsKIAotCQlpZiAobWEtPnRvKGRzdCwgc3JjLCA0KSkKKwkJaWYgKG1hLT50byhkc3R1LCBzcmMsIDQpKQogCQkJZ290byBmZXRjaF9mYXVsdDsKIAkJcmV0ID0gMDsKIAkJYnJlYWs7CkBAIC0yNDcsMjggKzI0OSwyOCBAQAogCQlpZiAoaW5zdHJ1Y3Rpb24gJiA0KQogCQkJKnJuIC09IGNvdW50OwogCQlzcmMgPSAodW5zaWduZWQgY2hhciopIHJtOwotCQlkc3QgPSAodW5zaWduZWQgY2hhciopICpybjsKKwkJZHN0dSA9ICh1bnNpZ25lZCBjaGFyIF9fdXNlciAqKSpybjsKICNpZiAhZGVmaW5lZChfX0xJVFRMRV9FTkRJQU5fXykKIAkJc3JjICs9IDQtY291bnQ7CiAjZW5kaWYKLQkJaWYgKG1hLT50byhkc3QsIHNyYywgY291bnQpKQorCQlpZiAobWEtPnRvKGRzdHUsIHNyYywgY291bnQpKQogCQkJZ290byBmZXRjaF9mYXVsdDsKIAkJcmV0ID0gMDsKIAkJYnJlYWs7CiAKIAljYXNlIDU6IC8qIG1vdi5sIEAoZGlzcCxSbSksUm4gKi8KLQkJc3JjID0gKHVuc2lnbmVkIGNoYXIqKSAqcm07Ci0JCXNyYyArPSAoaW5zdHJ1Y3Rpb24mMHgwMDBGKTw8MjsKLQkJZHN0ID0gKHVuc2lnbmVkIGNoYXIqKSBybjsKLQkJKih1bnNpZ25lZCBsb25nKilkc3QgPSAwOworCQlzcmN1ID0gKHVuc2lnbmVkIGNoYXIgX191c2VyICopKnJtOworCQlzcmN1ICs9IChpbnN0cnVjdGlvbiAmIDB4MDAwRikgPDwgMjsKKwkJZHN0ID0gKHVuc2lnbmVkIGNoYXIgKilybjsKKwkJKih1bnNpZ25lZCBsb25nICopZHN0ID0gMDsKIAotCQlpZiAobWEtPmZyb20oZHN0LCBzcmMsIDQpKQorCQlpZiAobWEtPmZyb20oZHN0LCBzcmN1LCA0KSkKIAkJCWdvdG8gZmV0Y2hfZmF1bHQ7CiAJCXJldCA9IDA7CiAJCWJyZWFrOwogCiAJY2FzZSA2OgkvKiBtb3YuW2J3bF0gZnJvbSBtZW1vcnksIHBvc3NpYmx5IHdpdGggcG9zdC1pbmNyZW1lbnQgKi8KLQkJc3JjID0gKHVuc2lnbmVkIGNoYXIqKSAqcm07CisJCXNyY3UgPSAodW5zaWduZWQgY2hhciBfX3VzZXIgKikqcm07CiAJCWlmIChpbnN0cnVjdGlvbiAmIDQpCiAJCQkqcm0gKz0gY291bnQ7CiAJCWRzdCA9ICh1bnNpZ25lZCBjaGFyKikgcm47CkBAIC0yNzcsNyArMjc5LDcgQEAKICNpZiAhZGVmaW5lZChfX0xJVFRMRV9FTkRJQU5fXykKIAkJZHN0ICs9IDQtY291bnQ7CiAjZW5kaWYKLQkJaWYgKG1hLT5mcm9tKGRzdCwgc3JjLCBjb3VudCkpCisJCWlmIChtYS0+ZnJvbShkc3QsIHNyY3UsIGNvdW50KSkKIAkJCWdvdG8gZmV0Y2hfZmF1bHQ7CiAJCXNpZ25fZXh0ZW5kKGNvdW50LCBkc3QpOwogCQlyZXQgPSAwOwpAQCAtMjg2LDI4ICsyODgsMjggQEAKIAljYXNlIDg6CiAJCXN3aXRjaCAoKGluc3RydWN0aW9uJjB4RkYwMCk+PjgpIHsKIAkJY2FzZSAweDgxOiAvKiBtb3YudyBSMCxAKGRpc3AsUm4pICovCi0JCQlzcmMgPSAodW5zaWduZWQgY2hhciopICZyZWdzLT5yZWdzWzBdOworCQkJc3JjID0gKHVuc2lnbmVkIGNoYXIgKikgJnJlZ3MtPnJlZ3NbMF07CiAjaWYgIWRlZmluZWQoX19MSVRUTEVfRU5ESUFOX18pCiAJCQlzcmMgKz0gMjsKICNlbmRpZgotCQkJZHN0ID0gKHVuc2lnbmVkIGNoYXIqKSAqcm07IC8qIGNhbGxlZCBSbiBpbiB0aGUgc3BlYyAqLwotCQkJZHN0ICs9IChpbnN0cnVjdGlvbiYweDAwMEYpPDwxOworCQkJZHN0dSA9ICh1bnNpZ25lZCBjaGFyIF9fdXNlciAqKSpybTsgLyogY2FsbGVkIFJuIGluIHRoZSBzcGVjICovCisJCQlkc3R1ICs9IChpbnN0cnVjdGlvbiAmIDB4MDAwRikgPDwgMTsKIAotCQkJaWYgKG1hLT50byhkc3QsIHNyYywgMikpCisJCQlpZiAobWEtPnRvKGRzdHUsIHNyYywgMikpCiAJCQkJZ290byBmZXRjaF9mYXVsdDsKIAkJCXJldCA9IDA7CiAJCQlicmVhazsKIAogCQljYXNlIDB4ODU6IC8qIG1vdi53IEAoZGlzcCxSbSksUjAgKi8KLQkJCXNyYyA9ICh1bnNpZ25lZCBjaGFyKikgKnJtOwotCQkJc3JjICs9IChpbnN0cnVjdGlvbiYweDAwMEYpPDwxOwotCQkJZHN0ID0gKHVuc2lnbmVkIGNoYXIqKSAmcmVncy0+cmVnc1swXTsKLQkJCSoodW5zaWduZWQgbG9uZyopZHN0ID0gMDsKKwkJCXNyY3UgPSAodW5zaWduZWQgY2hhciBfX3VzZXIgKikqcm07CisJCQlzcmN1ICs9IChpbnN0cnVjdGlvbiAmIDB4MDAwRikgPDwgMTsKKwkJCWRzdCA9ICh1bnNpZ25lZCBjaGFyICopICZyZWdzLT5yZWdzWzBdOworCQkJKih1bnNpZ25lZCBsb25nICopZHN0ID0gMDsKIAogI2lmICFkZWZpbmVkKF9fTElUVExFX0VORElBTl9fKQogCQkJZHN0ICs9IDI7CiAjZW5kaWYKLQkJCWlmIChtYS0+ZnJvbShkc3QsIHNyYywgMikpCisJCQlpZiAobWEtPmZyb20oZHN0LCBzcmN1LCAyKSkKIAkJCQlnb3RvIGZldGNoX2ZhdWx0OwogCQkJc2lnbl9leHRlbmQoMiwgZHN0KTsKIAkJCXJldCA9IDA7CkBAIC0zMzMsNyArMzM1LDggQEAKIAkJCQkgICBzdHJ1Y3QgbWVtX2FjY2VzcyAqbWEpCiB7CiAJb3Bjb2RlX3QgaW5zdHJ1Y3Rpb247Ci0Jdm9pZCAqYWRkciA9ICh2b2lkICopKHJlZ3MtPnBjICsgaW5zdHJ1Y3Rpb25fc2l6ZShvbGRfaW5zdHJ1Y3Rpb24pKTsKKwl2b2lkIF9fdXNlciAqYWRkciA9ICh2b2lkIF9fdXNlciAqKShyZWdzLT5wYyArCisJCWluc3RydWN0aW9uX3NpemUob2xkX2luc3RydWN0aW9uKSk7CiAKIAlpZiAoY29weV9mcm9tX3VzZXIoJmluc3RydWN0aW9uLCBhZGRyLCBzaXplb2YoaW5zdHJ1Y3Rpb24pKSkgewogCQkvKiB0aGUgaW5zdHJ1Y3Rpb24tZmV0Y2ggZmF1bHRlZCAqLwpAQCAtNTExLDE0ICs1MTQsNiBAQAogCXJldHVybiByZXQ7CiB9CiAKLSNpZmRlZiBDT05GSUdfQ1BVX0hBU19TUl9SQgotI2RlZmluZSBsb29rdXBfZXhjZXB0aW9uX3ZlY3Rvcih4KQlcCi0JX19hc21fXyBfX3ZvbGF0aWxlX18gKCJzdGMgcjJfYmFuaywgJTBcblx0IiA6ICI9ciIgKCh4KSkpCi0jZWxzZQotI2RlZmluZSBsb29rdXBfZXhjZXB0aW9uX3ZlY3Rvcih4KQlcCi0JX19hc21fXyBfX3ZvbGF0aWxlX18gKCJtb3YgcjQsICUwXG5cdCIgOiAiPXIiICgoeCkpKQotI2VuZGlmCi0KIC8qCiAgKiBIYW5kbGUgdmFyaW91cyBhZGRyZXNzIGVycm9yIGV4Y2VwdGlvbnM6CiAgKiAgLSBpbnN0cnVjdGlvbiBhZGRyZXNzIGVycm9yOgpAQCAtNTQyLDcgKzUzNyw3IEBACiAKIAkvKiBJbnRlbnRpb25hbCBpZmRlZiAqLwogI2lmZGVmIENPTkZJR19DUFVfSEFTX1NSX1JCCi0JbG9va3VwX2V4Y2VwdGlvbl92ZWN0b3IoZXJyb3JfY29kZSk7CisJZXJyb3JfY29kZSA9IGxvb2t1cF9leGNlcHRpb25fdmVjdG9yKCk7CiAjZW5kaWYKIAogCW9sZGZzID0gZ2V0X2ZzKCk7CkBAIC01NTksNyArNTU0LDcgQEAKIAkJfQogCiAJCXNldF9mcyhVU0VSX0RTKTsKLQkJaWYgKGNvcHlfZnJvbV91c2VyKCZpbnN0cnVjdGlvbiwgKHZvaWQgKikocmVncy0+cGMpLAorCQlpZiAoY29weV9mcm9tX3VzZXIoJmluc3RydWN0aW9uLCAodm9pZCBfX3VzZXIgKikocmVncy0+cGMpLAogCQkJCSAgIHNpemVvZihpbnN0cnVjdGlvbikpKSB7CiAJCQkvKiBBcmdoLiBGYXVsdCBvbiB0aGUgaW5zdHJ1Y3Rpb24gaXRzZWxmLgogCQkJICAgVGhpcyBzaG91bGQgbmV2ZXIgaGFwcGVuIG5vbi1TTVAKQEAgLTU4OSw3ICs1ODQsNyBAQAogCQkJZGllKCJ1bmFsaWduZWQgcHJvZ3JhbSBjb3VudGVyIiwgcmVncywgZXJyb3JfY29kZSk7CiAKIAkJc2V0X2ZzKEtFUk5FTF9EUyk7Ci0JCWlmIChjb3B5X2Zyb21fdXNlcigmaW5zdHJ1Y3Rpb24sICh2b2lkICopKHJlZ3MtPnBjKSwKKwkJaWYgKGNvcHlfZnJvbV91c2VyKCZpbnN0cnVjdGlvbiwgKHZvaWQgX191c2VyICopKHJlZ3MtPnBjKSwKIAkJCQkgICBzaXplb2YoaW5zdHJ1Y3Rpb24pKSkgewogCQkJLyogQXJnaC4gRmF1bHQgb24gdGhlIGluc3RydWN0aW9uIGl0c2VsZi4KIAkJCSAgIFRoaXMgc2hvdWxkIG5ldmVyIGhhcHBlbiBub24tU01QCkBAIC02ODMsNyArNjc4LDcgQEAKIAl9CiAjZW5kaWYKIAotCWxvb2t1cF9leGNlcHRpb25fdmVjdG9yKGVycm9yX2NvZGUpOworCWVycm9yX2NvZGUgPSBsb29rdXBfZXhjZXB0aW9uX3ZlY3RvcigpOwogCiAJbG9jYWxfaXJxX2VuYWJsZSgpOwogCUNIS19SRU1PVEVfREVCVUcocmVncyk7CkBAIC03MzksMTEgKzczNCwxMyBAQAogCQkJCXN0cnVjdCBwdF9yZWdzIF9fcmVncykKIHsKIAlzdHJ1Y3QgcHRfcmVncyAqcmVncyA9IFJFTE9DX0hJREUoJl9fcmVncywgMCk7Ci0JdW5zaWduZWQgbG9uZyBlcnJvcl9jb2RlOworCXVuc2lnbmVkIGxvbmcgaW5zdDsKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzayA9IGN1cnJlbnQ7Ci0jaWZkZWYgQ09ORklHX1NIX0ZQVV9FTVUKLQl1bnNpZ25lZCBzaG9ydCBpbnN0ID0gMDsKIAorCWlmIChrcHJvYmVfaGFuZGxlX2lsbHNsb3QocmVncy0+cGMpID09IDApCisJCXJldHVybjsKKworI2lmZGVmIENPTkZJR19TSF9GUFVfRU1VCiAJZ2V0X3VzZXIoaW5zdCwgKHVuc2lnbmVkIHNob3J0ICopcmVncy0+cGMgKyAxKTsKIAlpZiAoIWRvX2ZwdV9pbnN0KGluc3QsIHJlZ3MpKSB7CiAJCWdldF91c2VyKGluc3QsICh1bnNpZ25lZCBzaG9ydCAqKXJlZ3MtPnBjKTsKQEAgLTc1NCwxMiArNzUxLDEyIEBACiAJLyogbm90IGEgRlBVIGluc3QuICovCiAjZW5kaWYKIAotCWxvb2t1cF9leGNlcHRpb25fdmVjdG9yKGVycm9yX2NvZGUpOworCWluc3QgPSBsb29rdXBfZXhjZXB0aW9uX3ZlY3RvcigpOwogCiAJbG9jYWxfaXJxX2VuYWJsZSgpOwogCUNIS19SRU1PVEVfREVCVUcocmVncyk7CiAJZm9yY2Vfc2lnKFNJR0lMTCwgdHNrKTsKLQlkaWVfaWZfbm9fZml4dXAoImlsbGVnYWwgc2xvdCBpbnN0cnVjdGlvbiIsIHJlZ3MsIGVycm9yX2NvZGUpOworCWRpZV9pZl9ub19maXh1cCgiaWxsZWdhbCBzbG90IGluc3RydWN0aW9uIiwgcmVncywgaW5zdCk7CiB9CiAKIGFzbWxpbmthZ2Ugdm9pZCBkb19leGNlcHRpb25fZXJyb3IodW5zaWduZWQgbG9uZyByNCwgdW5zaWduZWQgbG9uZyByNSwKQEAgLTc2OSw3ICs3NjYsNyBAQAogCXN0cnVjdCBwdF9yZWdzICpyZWdzID0gUkVMT0NfSElERSgmX19yZWdzLCAwKTsKIAlsb25nIGV4OwogCi0JbG9va3VwX2V4Y2VwdGlvbl92ZWN0b3IoZXgpOworCWV4ID0gbG9va3VwX2V4Y2VwdGlvbl92ZWN0b3IoKTsKIAlkaWVfaWZfa2VybmVsKCJleGNlcHRpb24iLCByZWdzLCBleCk7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvc2gvbGliL2RpdjY0LWdlbmVyaWMuYyBiL2FyY2gvc2gvbGliL2RpdjY0LWdlbmVyaWMuYwppbmRleCA0YmVmM2I1Li42MGU3NmFhIDEwMDY0NAotLS0gYS9hcmNoL3NoL2xpYi9kaXY2NC1nZW5lcmljLmMKKysrIGIvYXJjaC9zaC9saWIvZGl2NjQtZ2VuZXJpYy5jCkBAIC0zLDYgKzMsNyBAQAogICovCiAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGFzbS9kaXY2NC5oPgogCiBleHRlcm4gdWludDY0X3QgX194ZGl2NjRfMzIodTY0IG4sIHUzMiBkKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9saWIvaW8uYyBiL2FyY2gvc2gvbGliL2lvLmMKaW5kZXggNGY1NGVjNC4uODhkZmU2ZSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9saWIvaW8uYworKysgYi9hcmNoL3NoL2xpYi9pby5jCkBAIC0xNCwxMiArMTQsMTIgQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgogCi12b2lkIF9fcmF3X3JlYWRzbCh1bnNpZ25lZCBsb25nIGFkZHIsIHZvaWQgKmRhdGFwLCBpbnQgbGVuKQordm9pZCBfX3Jhd19yZWFkc2woY29uc3Qgdm9pZCBfX2lvbWVtICphZGRyLCB2b2lkICpkYXRhcCwgaW50IGxlbikKIHsKIAl1MzIgKmRhdGE7CiAKIAlmb3IgKGRhdGEgPSBkYXRhcDsgKGxlbiAhPSAwKSAmJiAoKCh1MzIpZGF0YSAmIDB4MWYpICE9IDApOyBsZW4tLSkKLQkJKmRhdGErKyA9IGN0cmxfaW5sKGFkZHIpOworCQkqZGF0YSsrID0gX19yYXdfcmVhZGwoYWRkcik7CiAKIAlpZiAobGlrZWx5KGxlbiA+PSAoMHgyMCA+PiAyKSkpIHsKIAkJaW50IHRtcDIsIHRtcDMsIHRtcDQsIHRtcDUsIHRtcDY7CkBAIC01OSwxMSArNTksMTEgQEAKIAl9CiAKIAlmb3IgKDsgbGVuICE9IDA7IGxlbi0tKQotCQkqZGF0YSsrID0gY3RybF9pbmwoYWRkcik7CisJCSpkYXRhKysgPSBfX3Jhd19yZWFkbChhZGRyKTsKIH0KIEVYUE9SVF9TWU1CT0woX19yYXdfcmVhZHNsKTsKIAotdm9pZCBfX3Jhd193cml0ZXNsKHVuc2lnbmVkIGxvbmcgYWRkciwgY29uc3Qgdm9pZCAqZGF0YSwgaW50IGxlbikKK3ZvaWQgX19yYXdfd3JpdGVzbCh2b2lkIF9faW9tZW0gKmFkZHIsIGNvbnN0IHZvaWQgKmRhdGEsIGludCBsZW4pCiB7CiAJaWYgKGxpa2VseShsZW4gIT0gMCkpIHsKIAkJaW50IHRtcDE7CmRpZmYgLS1naXQgYS9hcmNoL3NoL21tL0tjb25maWcgYi9hcmNoL3NoL21tL0tjb25maWcKaW5kZXggOGEwMzkyNi4uNTU1ZWM5NyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9tbS9LY29uZmlnCisrKyBiL2FyY2gvc2gvbW0vS2NvbmZpZwpAQCAtMTMyLDcgKzEzMiwxMSBAQAogCiBjb25maWcgQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUcKIAlkZWZfYm9vbCB5Ci0JZGVwZW5kcyBvbiBTUEFSU0VNRU0KKwlkZXBlbmRzIG9uIFNQQVJTRU1FTSAmJiBNTVUKKworY29uZmlnIEFSQ0hfRU5BQkxFX01FTU9SWV9IT1RSRU1PVkUKKwlkZWZfYm9vbCB5CisJZGVwZW5kcyBvbiBTUEFSU0VNRU0gJiYgTU1VCiAKIGNvbmZpZyBBUkNIX01FTU9SWV9QUk9CRQogCWRlZl9ib29sIHkKZGlmZiAtLWdpdCBhL2FyY2gvc2gvbW0vY2FjaGUtZGVidWdmcy5jIGIvYXJjaC9zaC9tbS9jYWNoZS1kZWJ1Z2ZzLmMKaW5kZXggMGUxODljYy4uNWJhMDY3YiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9tbS9jYWNoZS1kZWJ1Z2ZzLmMKKysrIGIvYXJjaC9zaC9tbS9jYWNoZS1kZWJ1Z2ZzLmMKQEAgLTEzMCwxMiArMTMwLDE4IEBACiAJZGNhY2hlX2RlbnRyeSA9IGRlYnVnZnNfY3JlYXRlX2ZpbGUoImRjYWNoZSIsIFNfSVJVU1IsIHNoX2RlYnVnZnNfcm9vdCwKIAkJCQkJICAgICh1bnNpZ25lZCBpbnQgKilDQUNIRV9UWVBFX0RDQUNIRSwKIAkJCQkJICAgICZjYWNoZV9kZWJ1Z2ZzX2ZvcHMpOworCWlmICghZGNhY2hlX2RlbnRyeSkKKwkJcmV0dXJuIC1FTk9NRU07CiAJaWYgKElTX0VSUihkY2FjaGVfZGVudHJ5KSkKIAkJcmV0dXJuIFBUUl9FUlIoZGNhY2hlX2RlbnRyeSk7CiAKIAlpY2FjaGVfZGVudHJ5ID0gZGVidWdmc19jcmVhdGVfZmlsZSgiaWNhY2hlIiwgU19JUlVTUiwgc2hfZGVidWdmc19yb290LAogCQkJCQkgICAgKHVuc2lnbmVkIGludCAqKUNBQ0hFX1RZUEVfSUNBQ0hFLAogCQkJCQkgICAgJmNhY2hlX2RlYnVnZnNfZm9wcyk7CisJaWYgKCFpY2FjaGVfZGVudHJ5KSB7CisJCWRlYnVnZnNfcmVtb3ZlKGRjYWNoZV9kZW50cnkpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CiAJaWYgKElTX0VSUihpY2FjaGVfZGVudHJ5KSkgewogCQlkZWJ1Z2ZzX3JlbW92ZShkY2FjaGVfZGVudHJ5KTsKIAkJcmV0dXJuIFBUUl9FUlIoaWNhY2hlX2RlbnRyeSk7CmRpZmYgLS1naXQgYS9hcmNoL3NoL21tL2NhY2hlLXNoNC5jIGIvYXJjaC9zaC9tbS9jYWNoZS1zaDQuYwppbmRleCAxZmRjOGQ5Li41Y2ZlMDhkIDEwMDY0NAotLS0gYS9hcmNoL3NoL21tL2NhY2hlLXNoNC5jCisrKyBiL2FyY2gvc2gvbW0vY2FjaGUtc2g0LmMKQEAgLTI2MSw3ICsyNjEsNyBAQAogfQogCiAvKiBUT0RPOiBTZWxlY3RpdmUgaWNhY2hlIGludmFsaWRhdGlvbiB0aHJvdWdoIElDIGFkZHJlc3MgYXJyYXkuLiAqLwotc3RhdGljIGlubGluZSB2b2lkIF9fdXNlc19qdW1wX3RvX3VuY2FjaGVkIGZsdXNoX2ljYWNoZV9hbGwodm9pZCkKK3N0YXRpYyB2b2lkIF9fdXNlc19qdW1wX3RvX3VuY2FjaGVkIGZsdXNoX2ljYWNoZV9hbGwodm9pZCkKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzLCBjY3I7CiAKZGlmZiAtLWdpdCBhL2FyY2gvc2gvbW0vY29uc2lzdGVudC5jIGIvYXJjaC9zaC9tbS9jb25zaXN0ZW50LmMKaW5kZXggNjRiOGY3Zi4uOWY4ZWEzYSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9tbS9jb25zaXN0ZW50LmMKKysrIGIvYXJjaC9zaC9tbS9jb25zaXN0ZW50LmMKQEAgLTE2LDE0ICsxNiw2IEBACiAjaW5jbHVkZSA8YXNtL2FkZHJzcGFjZS5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogCi1zdHJ1Y3QgZG1hX2NvaGVyZW50X21lbSB7Ci0Jdm9pZAkJKnZpcnRfYmFzZTsKLQl1MzIJCWRldmljZV9iYXNlOwotCWludAkJc2l6ZTsKLQlpbnQJCWZsYWdzOwotCXVuc2lnbmVkIGxvbmcJKmJpdG1hcDsKLX07Ci0KIHZvaWQgKmRtYV9hbGxvY19jb2hlcmVudChzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLAogCQkJICAgZG1hX2FkZHJfdCAqZG1hX2hhbmRsZSwgZ2ZwX3QgZ2ZwKQogewpAQCAtNDQsNyArMzYsNyBAQAogCSAqLwogCWRtYV9jYWNoZV9zeW5jKGRldiwgcmV0LCBzaXplLCBETUFfQklESVJFQ1RJT05BTCk7CiAKLQlyZXRfbm9jYWNoZSA9IGlvcmVtYXBfbm9jYWNoZSh2aXJ0X3RvX3BoeXMocmV0KSwgc2l6ZSk7CisJcmV0X25vY2FjaGUgPSAodm9pZCBfX2ZvcmNlICopaW9yZW1hcF9ub2NhY2hlKHZpcnRfdG9fcGh5cyhyZXQpLCBzaXplKTsKIAlpZiAoIXJldF9ub2NhY2hlKSB7CiAJCWZyZWVfcGFnZXMoKHVuc2lnbmVkIGxvbmcpcmV0LCBvcmRlcik7CiAJCXJldHVybiBOVUxMOwpAQCAtNTgsMTIgKzUwLDEwIEBACiB2b2lkIGRtYV9mcmVlX2NvaGVyZW50KHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsCiAJCQkgdm9pZCAqdmFkZHIsIGRtYV9hZGRyX3QgZG1hX2hhbmRsZSkKIHsKLQlzdHJ1Y3QgZG1hX2NvaGVyZW50X21lbSAqbWVtID0gZGV2ID8gZGV2LT5kbWFfbWVtIDogTlVMTDsKIAlpbnQgb3JkZXIgPSBnZXRfb3JkZXIoc2l6ZSk7CiAKIAlpZiAoIWRtYV9yZWxlYXNlX2Zyb21fY29oZXJlbnQoZGV2LCBvcmRlciwgdmFkZHIpKSB7CiAJCVdBUk5fT04oaXJxc19kaXNhYmxlZCgpKTsJLyogZm9yIHBvcnRhYmlsaXR5ICovCi0JCUJVR19PTihtZW0gJiYgbWVtLT5mbGFncyAmIERNQV9NRU1PUllfRVhDTFVTSVZFKTsKIAkJZnJlZV9wYWdlcygodW5zaWduZWQgbG9uZylwaHlzX3RvX3ZpcnQoZG1hX2hhbmRsZSksIG9yZGVyKTsKIAkJaW91bm1hcCh2YWRkcik7CiAJfQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9tbS9mYXVsdF8zMi5jIGIvYXJjaC9zaC9tbS9mYXVsdF8zMi5jCmluZGV4IDBjNzc2ZmQuLjg5OGQ0NzcgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvbW0vZmF1bHRfMzIuYworKysgYi9hcmNoL3NoL21tL2ZhdWx0XzMyLmMKQEAgLTIsNyArMiw3IEBACiAgKiBQYWdlIGZhdWx0IGhhbmRsZXIgZm9yIFNIIHdpdGggYW4gTU1VLgogICoKICAqICBDb3B5cmlnaHQgKEMpIDE5OTkgIE5paWJlIFl1dGFrYQotICogIENvcHlyaWdodCAoQykgMjAwMyAtIDIwMDcgIFBhdWwgTXVuZHQKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMgLSAyMDA4ICBQYXVsIE11bmR0CiAgKgogICogIEJhc2VkIG9uIGxpbnV4L2FyY2gvaTM4Ni9tbS9mYXVsdC5jOgogICogICBDb3B5cmlnaHQgKEMpIDE5OTUgIExpbnVzIFRvcnZhbGRzCkBAIC0xNSw2ICsxNSw3IEBACiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9oYXJkaXJxLmg+CiAjaW5jbHVkZSA8bGludXgva3Byb2Jlcy5oPgorI2luY2x1ZGUgPGxpbnV4L21hcmtlci5oPgogI2luY2x1ZGUgPGFzbS9pb190cmFwcGVkLmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogI2luY2x1ZGUgPGFzbS9tbXVfY29udGV4dC5oPgpAQCAtMzcsMTAgKzM4LDEwIEBACiAJaW50IGZhdWx0OwogCXNpZ2luZm9fdCBpbmZvOwogCi0jaWZkZWYgQ09ORklHX1NIX0tHREIKLQlpZiAoa2dkYl9ub2ZhdWx0ICYmIGtnZGJfYnVzX2Vycl9ob29rKQotCQlrZ2RiX2J1c19lcnJfaG9vaygpOwotI2VuZGlmCisJLyoKKwkgKiBXZSBkb24ndCBib3RoZXIgd2l0aCBhbnkgbm90aWZpZXIgY2FsbGJhY2tzIGhlcmUsIGFzIHRoZXkgYXJlCisJICogYWxsIGhhbmRsZWQgdGhyb3VnaCB0aGUgX19kb19wYWdlX2ZhdWx0KCkgZmFzdC1wYXRoLgorCSAqLwogCiAJdHNrID0gY3VycmVudDsKIAlzaV9jb2RlID0gU0VHVl9NQVBFUlI7CkBAIC02MSw3ICs2Miw2IEBACiAJCXBnZCA9IGdldF9UVEIoKSArIG9mZnNldDsKIAkJcGdkX2sgPSBzd2FwcGVyX3BnX2RpciArIG9mZnNldDsKIAotCQkvKiBUaGlzIHdpbGwgbmV2ZXIgaGFwcGVuIHdpdGggdGhlIGZvbGRlZCBwYWdlIHRhYmxlLiAqLwogCQlpZiAoIXBnZF9wcmVzZW50KCpwZ2QpKSB7CiAJCQlpZiAoIXBnZF9wcmVzZW50KCpwZ2RfaykpCiAJCQkJZ290byBiYWRfYXJlYV9ub3NlbWFwaG9yZTsKQEAgLTcxLDkgKzcxLDEzIEBACiAKIAkJcHVkID0gcHVkX29mZnNldChwZ2QsIGFkZHJlc3MpOwogCQlwdWRfayA9IHB1ZF9vZmZzZXQocGdkX2ssIGFkZHJlc3MpOwotCQlpZiAocHVkX3ByZXNlbnQoKnB1ZCkgfHwgIXB1ZF9wcmVzZW50KCpwdWRfaykpCi0JCQlnb3RvIGJhZF9hcmVhX25vc2VtYXBob3JlOwotCQlzZXRfcHVkKHB1ZCwgKnB1ZF9rKTsKKworCQlpZiAoIXB1ZF9wcmVzZW50KCpwdWQpKSB7CisJCQlpZiAoIXB1ZF9wcmVzZW50KCpwdWRfaykpCisJCQkJZ290byBiYWRfYXJlYV9ub3NlbWFwaG9yZTsKKwkJCXNldF9wdWQocHVkLCAqcHVkX2spOworCQkJcmV0dXJuOworCQl9CiAKIAkJcG1kID0gcG1kX29mZnNldChwdWQsIGFkZHJlc3MpOwogCQlwbWRfayA9IHBtZF9vZmZzZXQocHVkX2ssIGFkZHJlc3MpOwpAQCAtMjQyLDYgKzI0NiwyNSBAQAogCQlnb3RvIG5vX2NvbnRleHQ7CiB9CiAKK3N0YXRpYyBpbmxpbmUgaW50IG5vdGlmeV9wYWdlX2ZhdWx0KHN0cnVjdCBwdF9yZWdzICpyZWdzLCBpbnQgdHJhcCkKK3sKKwlpbnQgcmV0ID0gMDsKKworCXRyYWNlX21hcmsoa2VybmVsX2FyY2hfdHJhcF9lbnRyeSwgInRyYXBfaWQgJWQgaXAgI3AlbGQiLAorCQkgICB0cmFwID4+IDUsIGluc3RydWN0aW9uX3BvaW50ZXIocmVncykpOworCisjaWZkZWYgQ09ORklHX0tQUk9CRVMKKwlpZiAoIXVzZXJfbW9kZShyZWdzKSkgeworCQlwcmVlbXB0X2Rpc2FibGUoKTsKKwkJaWYgKGtwcm9iZV9ydW5uaW5nKCkgJiYga3Byb2JlX2ZhdWx0X2hhbmRsZXIocmVncywgdHJhcCkpCisJCQlyZXQgPSAxOworCQlwcmVlbXB0X2VuYWJsZSgpOworCX0KKyNlbmRpZgorCisJcmV0dXJuIHJldDsKK30KKwogI2lmZGVmIENPTkZJR19TSF9TVE9SRV9RVUVVRVMKIC8qCiAgKiBUaGlzIGlzIGEgc3BlY2lhbCBjYXNlIGZvciB0aGUgU0gtNCBzdG9yZSBxdWV1ZXMsIGFzIHBhZ2VzIGZvciB0aGlzCkBAIC0yNjUsMTIgKzI4OCwxOCBAQAogCXBtZF90ICpwbWQ7CiAJcHRlX3QgKnB0ZTsKIAlwdGVfdCBlbnRyeTsKKwlpbnQgcmV0ID0gMDsKKworCWlmIChub3RpZnlfcGFnZV9mYXVsdChyZWdzLCBsb29rdXBfZXhjZXB0aW9uX3ZlY3RvcigpKSkKKwkJZ290byBvdXQ7CiAKICNpZmRlZiBDT05GSUdfU0hfS0dEQgogCWlmIChrZ2RiX25vZmF1bHQgJiYga2dkYl9idXNfZXJyX2hvb2spCiAJCWtnZGJfYnVzX2Vycl9ob29rKCk7CiAjZW5kaWYKIAorCXJldCA9IDE7CisKIAkvKgogCSAqIFdlIGRvbid0IHRha2UgcGFnZSBmYXVsdHMgZm9yIFAxLCBQMiwgYW5kIHBhcnRzIG9mIFA0LCB0aGVzZQogCSAqIGFyZSBhbHdheXMgbWFwcGVkLCB3aGV0aGVyIGl0IGJlIGR1ZSB0byBsZWdhY3kgYmVoYXZpb3VyIGluCkBAIC0yODAsMjQgKzMwOSwyMyBAQAogCQlwZ2QgPSBwZ2Rfb2Zmc2V0X2soYWRkcmVzcyk7CiAJfSBlbHNlIHsKIAkJaWYgKHVubGlrZWx5KGFkZHJlc3MgPj0gVEFTS19TSVpFIHx8ICFjdXJyZW50LT5tbSkpCi0JCQlyZXR1cm4gMTsKKwkJCWdvdG8gb3V0OwogCiAJCXBnZCA9IHBnZF9vZmZzZXQoY3VycmVudC0+bW0sIGFkZHJlc3MpOwogCX0KIAogCXB1ZCA9IHB1ZF9vZmZzZXQocGdkLCBhZGRyZXNzKTsKIAlpZiAocHVkX25vbmVfb3JfY2xlYXJfYmFkKHB1ZCkpCi0JCXJldHVybiAxOworCQlnb3RvIG91dDsKIAlwbWQgPSBwbWRfb2Zmc2V0KHB1ZCwgYWRkcmVzcyk7CiAJaWYgKHBtZF9ub25lX29yX2NsZWFyX2JhZChwbWQpKQotCQlyZXR1cm4gMTsKLQorCQlnb3RvIG91dDsKIAlwdGUgPSBwdGVfb2Zmc2V0X2tlcm5lbChwbWQsIGFkZHJlc3MpOwogCWVudHJ5ID0gKnB0ZTsKIAlpZiAodW5saWtlbHkocHRlX25vbmUoZW50cnkpIHx8IHB0ZV9ub3RfcHJlc2VudChlbnRyeSkpKQotCQlyZXR1cm4gMTsKKwkJZ290byBvdXQ7CiAJaWYgKHVubGlrZWx5KHdyaXRlYWNjZXNzICYmICFwdGVfd3JpdGUoZW50cnkpKSkKLQkJcmV0dXJuIDE7CisJCWdvdG8gb3V0OwogCiAJaWYgKHdyaXRlYWNjZXNzKQogCQllbnRyeSA9IHB0ZV9ta2RpcnR5KGVudHJ5KTsKQEAgLTMxNCw1ICszNDIsOCBAQAogCXNldF9wdGUocHRlLCBlbnRyeSk7CiAJdXBkYXRlX21tdV9jYWNoZShOVUxMLCBhZGRyZXNzLCBlbnRyeSk7CiAKLQlyZXR1cm4gMDsKKwlyZXQgPSAwOworb3V0OgorCXRyYWNlX21hcmsoa2VybmVsX2FyY2hfdHJhcF9leGl0LCBNQVJLX05PQVJHUyk7CisJcmV0dXJuIHJldDsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvc2gvbW0vaW5pdC5jIGIvYXJjaC9zaC9tbS9pbml0LmMKaW5kZXggYjc1YTdhYy4uMmE1Mzk0MyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9tbS9pbml0LmMKKysrIGIvYXJjaC9zaC9tbS9pbml0LmMKQEAgLTIzLDcgKzIzLDE5IEBACiAKIERFRklORV9QRVJfQ1BVKHN0cnVjdCBtbXVfZ2F0aGVyLCBtbXVfZ2F0aGVycyk7CiBwZ2RfdCBzd2FwcGVyX3BnX2RpcltQVFJTX1BFUl9QR0RdOwotdW5zaWduZWQgbG9uZyBjYWNoZWRfdG9fdW5jYWNoZWQgPSAwOworCisjaWZkZWYgQ09ORklHX1NVUEVSSDMyCisvKgorICogSGFuZGxlIHRyaXZpYWwgdHJhbnNpdGlvbnMgYmV0d2VlbiBjYWNoZWQgYW5kIHVuY2FjaGVkCisgKiBzZWdtZW50cywgbWFraW5nIHVzZSBvZiB0aGUgMToxIG1hcHBpbmcgcmVsYXRpb25zaGlwIGluCisgKiA1MTJNQiBsb3dtZW0uCisgKgorICogVGhpcyBpcyB0aGUgb2Zmc2V0IG9mIHRoZSB1bmNhY2hlZCBzZWN0aW9uIGZyb20gaXRzIGNhY2hlZCBhbGlhcy4KKyAqIERlZmF1bHQgdmFsdWUgb25seSB2YWxpZCBpbiAyOSBiaXQgbW9kZSwgaW4gMzJiaXQgbW9kZSB3aWxsIGJlCisgKiBvdmVycmlkZGVuIGluIHBtYl9pbml0LgorICovCit1bnNpZ25lZCBsb25nIGNhY2hlZF90b191bmNhY2hlZCA9IFAyU0VHIC0gUDFTRUc7CisjZW5kaWYKIAogI2lmZGVmIENPTkZJR19NTVUKIHN0YXRpYyB2b2lkIHNldF9wdGVfcGh5cyh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgcGh5cywgcGdwcm90X3QgcHJvdCkKQEAgLTU4LDkgKzcwLDcgQEAKIAl9CiAKIAlzZXRfcHRlKHB0ZSwgcGZuX3B0ZShwaHlzID4+IFBBR0VfU0hJRlQsIHByb3QpKTsKLQotCWlmIChjYWNoZWRfdG9fdW5jYWNoZWQpCi0JCWZsdXNoX3RsYl9vbmUoZ2V0X2FzaWQoKSwgYWRkcik7CisJZmx1c2hfdGxiX29uZShnZXRfYXNpZCgpLCBhZGRyKTsKIH0KIAogLyoKQEAgLTExMyw3ICsxMjMsNiBAQAogCQlpZiAoIXBtZF9wcmVzZW50KCpwbWQpKSB7CiAJCQlwdGVfdCAqcHRlX3RhYmxlOwogCQkJcHRlX3RhYmxlID0gKHB0ZV90ICopYWxsb2NfYm9vdG1lbV9sb3dfcGFnZXMoUEFHRV9TSVpFKTsKLQkJCW1lbXNldChwdGVfdGFibGUsIDAsIFBBR0VfU0laRSk7CiAJCQlwbWRfcG9wdWxhdGVfa2VybmVsKCZpbml0X21tLCBwbWQsIHB0ZV90YWJsZSk7CiAJCX0KIApAQCAtMTY1LDE1ICsxNzQsNiBAQAogI2lmZGVmIENPTkZJR19TVVBFUkgzMgogCS8qIFNldCB1cCB0aGUgdW5jYWNoZWQgZml4bWFwICovCiAJc2V0X2ZpeG1hcF9ub2NhY2hlKEZJWF9VTkNBQ0hFRCwgX19wYSgmX191bmNhY2hlZF9zdGFydCkpOwotCi0jaWZkZWYgQ09ORklHXzI5QklUCi0JLyoKLQkgKiBIYW5kbGUgdHJpdmlhbCB0cmFuc2l0aW9ucyBiZXR3ZWVuIGNhY2hlZCBhbmQgdW5jYWNoZWQKLQkgKiBzZWdtZW50cywgbWFraW5nIHVzZSBvZiB0aGUgMToxIG1hcHBpbmcgcmVsYXRpb25zaGlwIGluCi0JICogNTEyTUIgbG93bWVtLgotCSAqLwotCWNhY2hlZF90b191bmNhY2hlZCA9IFAyU0VHIC0gUDFTRUc7Ci0jZW5kaWYKICNlbmRpZgogfQogCkBAIC0yNjUsNiArMjY1LDM1IEBACiB9CiAjZW5kaWYKIAorI2lmIFRIUkVBRF9TSElGVCA8IFBBR0VfU0hJRlQKK3N0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqdGhyZWFkX2luZm9fY2FjaGU7CisKK3N0cnVjdCB0aHJlYWRfaW5mbyAqYWxsb2NfdGhyZWFkX2luZm8oc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCit7CisJc3RydWN0IHRocmVhZF9pbmZvICp0aTsKKworCXRpID0ga21lbV9jYWNoZV9hbGxvYyh0aHJlYWRfaW5mb19jYWNoZSwgR0ZQX0tFUk5FTCk7CisJaWYgKHVubGlrZWx5KHRpID09IE5VTEwpKQorCQlyZXR1cm4gTlVMTDsKKyNpZmRlZiBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0UKKwltZW1zZXQodGksIDAsIFRIUkVBRF9TSVpFKTsKKyNlbmRpZgorCXJldHVybiB0aTsKK30KKwordm9pZCBmcmVlX3RocmVhZF9pbmZvKHN0cnVjdCB0aHJlYWRfaW5mbyAqdGkpCit7CisJa21lbV9jYWNoZV9mcmVlKHRocmVhZF9pbmZvX2NhY2hlLCB0aSk7Cit9CisKK3ZvaWQgdGhyZWFkX2luZm9fY2FjaGVfaW5pdCh2b2lkKQoreworCXRocmVhZF9pbmZvX2NhY2hlID0ga21lbV9jYWNoZV9jcmVhdGUoInRocmVhZF9pbmZvIiwgVEhSRUFEX1NJWkUsCisJCQkJCSAgICAgIFRIUkVBRF9TSVpFLCAwLCBOVUxMKTsKKwlCVUdfT04odGhyZWFkX2luZm9fY2FjaGUgPT0gTlVMTCk7Cit9CisjZW5kaWYgLyogVEhSRUFEX1NISUZUIDwgUEFHRV9TSElGVCAqLworCiAjaWZkZWYgQ09ORklHX01FTU9SWV9IT1RQTFVHCiBpbnQgYXJjaF9hZGRfbWVtb3J5KGludCBuaWQsIHU2NCBzdGFydCwgdTY0IHNpemUpCiB7CkBAIC0yOTIsNCArMzIxLDIxIEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTChtZW1vcnlfYWRkX3BoeXNhZGRyX3RvX25pZCk7CiAjZW5kaWYKKworI2lmZGVmIENPTkZJR19NRU1PUllfSE9UUkVNT1ZFCitpbnQgcmVtb3ZlX21lbW9yeSh1NjQgc3RhcnQsIHU2NCBzaXplKQoreworCXVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuID0gc3RhcnQgPj4gUEFHRV9TSElGVDsKKwl1bnNpZ25lZCBsb25nIGVuZF9wZm4gPSBzdGFydF9wZm4gKyAoc2l6ZSA+PiBQQUdFX1NISUZUKTsKKwlpbnQgcmV0OworCisJcmV0ID0gb2ZmbGluZV9wYWdlcyhzdGFydF9wZm4sIGVuZF9wZm4sIDEyMCAqIEhaKTsKKwlpZiAodW5saWtlbHkocmV0KSkKKwkJcHJpbnRrKCIlczogRmFpbGVkLCBvZmZsaW5lX3BhZ2VzKCkgPT0gJWRcbiIsIF9fZnVuY19fLCByZXQpOworCisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHJlbW92ZV9tZW1vcnkpOwogI2VuZGlmCisKKyNlbmRpZiAvKiBDT05GSUdfTUVNT1JZX0hPVFBMVUcgKi8KZGlmZiAtLWdpdCBhL2FyY2gvc2gvbW0vcGctbm9tbXUuYyBiL2FyY2gvc2gvbW0vcGctbm9tbXUuYwppbmRleCA2NzdkZDU3Li45MWVkNGU2IDEwMDY0NAotLS0gYS9hcmNoL3NoL21tL3BnLW5vbW11LmMKKysrIGIvYXJjaC9zaC9tbS9wZy1ub21tdS5jCkBAIC0xMyw2ICsxMyw3IEBACiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KKyNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogCiB2b2lkIGNvcHlfcGFnZSh2b2lkICp0bywgdm9pZCAqZnJvbSkKIHsKZGlmZiAtLWdpdCBhL2FyY2gvc2gvbW0vcG1iLmMgYi9hcmNoL3NoL21tL3BtYi5jCmluZGV4IGNlZjcyNzYuLjg0MjQxNjcgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvbW0vcG1iLmMKKysrIGIvYXJjaC9zaC9tbS9wbWIuYwpAQCAtMzk0LDYgKzM5NCw4IEBACiAKIAlkZW50cnkgPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJwbWIiLCBTX0lGUkVHIHwgU19JUlVHTywKIAkJCQkgICAgIHNoX2RlYnVnZnNfcm9vdCwgTlVMTCwgJnBtYl9kZWJ1Z2ZzX2ZvcHMpOworCWlmICghZGVudHJ5KQorCQlyZXR1cm4gLUVOT01FTTsKIAlpZiAoSVNfRVJSKGRlbnRyeSkpCiAJCXJldHVybiBQVFJfRVJSKGRlbnRyeSk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvc2gvbW0vdGxiLW5vbW11LmMgYi9hcmNoL3NoL21tL3RsYi1ub21tdS5jCmluZGV4IDE1MTExYmMuLjcxYzc0MmIgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvbW0vdGxiLW5vbW11LmMKKysrIGIvYXJjaC9zaC9tbS90bGItbm9tbXUuYwpAQCAtMTAsNiArMTAsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KKyNpbmNsdWRlIDxhc20vdGxiZmx1c2guaD4KIAogLyoKICAqIE5vdGhpbmcgdG9vIHRlcnJpYmx5IGV4Y2l0aW5nIGhlcmUgLi4KZGlmZiAtLWdpdCBhL2FyY2gvc2gvdG9vbHMvbWFjaC10eXBlcyBiL2FyY2gvc2gvdG9vbHMvbWFjaC10eXBlcwppbmRleCAwYTExY2MwOC4uZDRmYjExZiAxMDA2NDQKLS0tIGEvYXJjaC9zaC90b29scy9tYWNoLXR5cGVzCisrKyBiL2FyY2gvc2gvdG9vbHMvbWFjaC10eXBlcwpAQCAtMzAsNiArMzAsNyBAQAogRFJFQU1DQVNUCQlTSF9EUkVBTUNBU1QKIFNOQVBHRUFSCQlTSF9TRUNVUkVFREdFNTQxMAogRURPU0s3NzA1CQlTSF9FRE9TSzc3MDUKK0VET1NLNzc2MAkJU0hfRURPU0s3NzYwCiBTSDQyMDJfTUlDUk9ERVYJCVNIX1NINDIwMl9NSUNST0RFVgogU0gwMwkJCVNIX1NIMDMKIExBTkRJU0sJCQlTSF9MQU5ESVNLCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL0tjb25maWcgYi9hcmNoL3NwYXJjL0tjb25maWcKaW5kZXggOTc2NzFkYS4uZTU5NDU1OSAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9LY29uZmlnCisrKyBiL2FyY2gvc3BhcmMvS2NvbmZpZwpAQCAtMzcsNiArMzcsOCBAQAogCiBzb3VyY2UgImluaXQvS2NvbmZpZyIKIAorc291cmNlICJrZXJuZWwvS2NvbmZpZy5mcmVlemVyIgorCiBtZW51ICJHZW5lcmFsIG1hY2hpbmUgc2V0dXAiCiAKIGNvbmZpZyBTTVAKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vS2J1aWxkIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9LYnVpbGQKaW5kZXggMmJhNzE4My4uMmQyNzY5ZCAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9LYnVpbGQKKysrIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9LYnVpbGQKQEAgLTE1LDggKzE1LDYgQEAKIGhlYWRlci15ICs9IHNpZ25hbF82NC5oCiBoZWFkZXIteSArPSBzdGF0XzMyLmgKIGhlYWRlci15ICs9IHN0YXRfNjQuaAotaGVhZGVyLXkgKz0gc3RhdGZzXzMyLmgKLWhlYWRlci15ICs9IHN0YXRmc182NC5oCiBoZWFkZXIteSArPSB1bmlzdGRfMzIuaAogaGVhZGVyLXkgKz0gdW5pc3RkXzY0LmgKIApkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9lbGZfMzIuaCBiL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vZWxmXzMyLmgKaW5kZXggYjdhYjYwNS4uMzgxYTFiNSAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9lbGZfMzIuaAorKysgYi9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL2VsZl8zMi5oCkBAIC0xMzcsNiArMTM3LDYgQEAKIAogI2RlZmluZSBFTEZfUExBVEZPUk0JKE5VTEwpCiAKLSNkZWZpbmUgU0VUX1BFUlNPTkFMSVRZKGV4LCBpYmNzMikgc2V0X3BlcnNvbmFsaXR5KChpYmNzMik/UEVSX1NWUjQ6UEVSX0xJTlVYKQorI2RlZmluZSBTRVRfUEVSU09OQUxJVFkoZXgpIHNldF9wZXJzb25hbGl0eShQRVJfTElOVVgpCiAKICNlbmRpZiAvKiAhKF9fQVNNU1BBUkNfRUxGX0gpICovCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL2VsZl82NC5oIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9lbGZfNjQuaAppbmRleCAwODE4YTEzLi40MjVjMmY5IDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL2VsZl82NC5oCisrKyBiL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vZWxmXzY0LmgKQEAgLTE5NSw3ICsxOTUsNyBAQAogCiAjZGVmaW5lIEVMRl9QTEFURk9STQkoTlVMTCkKIAotI2RlZmluZSBTRVRfUEVSU09OQUxJVFkoZXgsIGliY3MyKQkJCVwKKyNkZWZpbmUgU0VUX1BFUlNPTkFMSVRZKGV4KQkJCQlcCiBkbyB7CXVuc2lnbmVkIGxvbmcgbmV3X2ZsYWdzID0gY3VycmVudF90aHJlYWRfaW5mbygpLT5mbGFnczsgXAogCW5ld19mbGFncyAmPSBfVElGXzMyQklUOwkJCVwKIAlpZiAoKGV4KS5lX2lkZW50W0VJX0NMQVNTXSA9PSBFTEZDTEFTUzMyKQlcCkBAIC0yMDgsOSArMjA4LDcgQEAKIAllbHNlCQkJCQkJXAogCQljbGVhcl90aHJlYWRfZmxhZyhUSUZfQUJJX1BFTkRJTkcpOwlcCiAJLyogZmx1c2hfdGhyZWFkIHdpbGwgdXBkYXRlIHBnZCBjYWNoZSAqLwlcCi0JaWYgKGliY3MyKQkJCQkJXAotCQlzZXRfcGVyc29uYWxpdHkoUEVSX1NWUjQpOwkJXAotCWVsc2UgaWYgKGN1cnJlbnQtPnBlcnNvbmFsaXR5ICE9IFBFUl9MSU5VWDMyKQlcCisJaWYgKGN1cnJlbnQtPnBlcnNvbmFsaXR5ICE9IFBFUl9MSU5VWDMyKQlcCiAJCXNldF9wZXJzb25hbGl0eShQRVJfTElOVVgpOwkJXAogfSB3aGlsZSAoMCkKIApkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9zZXJpYWwuaCBiL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vc2VyaWFsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjkwZDYxYwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vc2VyaWFsLmgKQEAgLTAsMCArMSw2IEBACisjaWZuZGVmIF9fU1BBUkNfU0VSSUFMX0gKKyNkZWZpbmUgX19TUEFSQ19TRVJJQUxfSAorCisjZGVmaW5lIEJBU0VfQkFVRCAoIDE4NDMyMDAgLyAxNiApCisKKyNlbmRpZiAvKiBfX1NQQVJDX1NFUklBTF9IICovCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3N0YXRmcy5oIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9zdGF0ZnMuaAppbmRleCA1ZTkzN2E3Li41NWU2MDdhIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3N0YXRmcy5oCisrKyBiL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vc3RhdGZzLmgKQEAgLTEsOCArMSw2IEBACiAjaWZuZGVmIF9fX0FTTV9TUEFSQ19TVEFURlNfSAogI2RlZmluZSBfX19BU01fU1BBUkNfU1RBVEZTX0gKLSNpZiBkZWZpbmVkKF9fc3BhcmNfXykgJiYgZGVmaW5lZChfX2FyY2g2NF9fKQotI2luY2x1ZGUgPGFzbS9zdGF0ZnNfNjQuaD4KLSNlbHNlCi0jaW5jbHVkZSA8YXNtL3N0YXRmc18zMi5oPgotI2VuZGlmCisKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9zdGF0ZnMuaD4KKwogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3N0YXRmc18zMi5oIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9zdGF0ZnNfMzIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzA0NTIwZi4uMDAwMDAwMAotLS0gYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3N0YXRmc18zMi5oCisrKyAvZGV2L251bGwKQEAgLTEsNiArMCwwIEBACi0jaWZuZGVmIF9TUEFSQ19TVEFURlNfSAotI2RlZmluZSBfU1BBUkNfU1RBVEZTX0gKLQotI2luY2x1ZGUgPGFzbS1nZW5lcmljL3N0YXRmcy5oPgotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vc3RhdGZzXzY0LmggYi9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3N0YXRmc182NC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3OWIzYzg5Li4wMDAwMDAwCi0tLSBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vc3RhdGZzXzY0LmgKKysrIC9kZXYvbnVsbApAQCAtMSw1NCArMCwwIEBACi0jaWZuZGVmIF9TUEFSQzY0X1NUQVRGU19ICi0jZGVmaW5lIF9TUEFSQzY0X1NUQVRGU19ICi0KLSNpZm5kZWYgX19LRVJORUxfU1RSSUNUX05BTUVTCi0KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotCi10eXBlZGVmIF9fa2VybmVsX2ZzaWRfdAlmc2lkX3Q7Ci0KLSNlbmRpZgotCi1zdHJ1Y3Qgc3RhdGZzIHsKLQlsb25nIGZfdHlwZTsKLQlsb25nIGZfYnNpemU7Ci0JbG9uZyBmX2Jsb2NrczsKLQlsb25nIGZfYmZyZWU7Ci0JbG9uZyBmX2JhdmFpbDsKLQlsb25nIGZfZmlsZXM7Ci0JbG9uZyBmX2ZmcmVlOwotCV9fa2VybmVsX2ZzaWRfdCBmX2ZzaWQ7Ci0JbG9uZyBmX25hbWVsZW47Ci0JbG9uZyBmX2Zyc2l6ZTsKLQlsb25nIGZfc3BhcmVbNV07Ci19OwotCi1zdHJ1Y3Qgc3RhdGZzNjQgewotCWxvbmcgZl90eXBlOwotCWxvbmcgZl9ic2l6ZTsKLQlsb25nIGZfYmxvY2tzOwotCWxvbmcgZl9iZnJlZTsKLQlsb25nIGZfYmF2YWlsOwotCWxvbmcgZl9maWxlczsKLQlsb25nIGZfZmZyZWU7Ci0JX19rZXJuZWxfZnNpZF90IGZfZnNpZDsKLQlsb25nIGZfbmFtZWxlbjsKLQlsb25nIGZfZnJzaXplOwotCWxvbmcgZl9zcGFyZVs1XTsKLX07Ci0KLXN0cnVjdCBjb21wYXRfc3RhdGZzNjQgewotCV9fdTMyIGZfdHlwZTsKLQlfX3UzMiBmX2JzaXplOwotCV9fdTY0IGZfYmxvY2tzOwotCV9fdTY0IGZfYmZyZWU7Ci0JX191NjQgZl9iYXZhaWw7Ci0JX191NjQgZl9maWxlczsKLQlfX3U2NCBmX2ZmcmVlOwotCV9fa2VybmVsX2ZzaWRfdCBmX2ZzaWQ7Ci0JX191MzIgZl9uYW1lbGVuOwotCV9fdTMyIGZfZnJzaXplOwotCV9fdTMyIGZfc3BhcmVbNV07Ci19OwotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vdGhyZWFkX2luZm9fMzIuaCBiL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vdGhyZWFkX2luZm9fMzIuaAppbmRleCAyOTg5OWZkLi44MGZlNTQ3IDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvXzMyLmgKKysrIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS90aHJlYWRfaW5mb18zMi5oCkBAIC0xMzUsNiArMTM1LDcgQEAKICNkZWZpbmUgVElGX1BPTExJTkdfTlJGTEFHCTkJLyogdHJ1ZSBpZiBwb2xsX2lkbGUoKSBpcyBwb2xsaW5nCiAJCQkJCSAqIFRJRl9ORUVEX1JFU0NIRUQgKi8KICNkZWZpbmUgVElGX01FTURJRQkJMTAKKyNkZWZpbmUgVElGX0ZSRUVaRQkJMTEJLyogaXMgZnJlZXppbmcgZm9yIHN1c3BlbmQgKi8KIAogLyogYXMgYWJvdmUsIGJ1dCBhcyBiaXQgdmFsdWVzICovCiAjZGVmaW5lIF9USUZfU1lTQ0FMTF9UUkFDRQkoMTw8VElGX1NZU0NBTExfVFJBQ0UpCkBAIC0xNDgsNiArMTQ5LDcgQEAKICNkZWZpbmUgX1RJRl9ET19OT1RJRllfUkVTVU1FX01BU0sJKF9USUZfTk9USUZZX1JFU1VNRSB8IFwKIAkJCQkJIF9USUZfU0lHUEVORElORyB8IFwKIAkJCQkJIF9USUZfUkVTVE9SRV9TSUdNQVNLKQorI2RlZmluZSBfVElGX0ZSRUVaRQkJKDE8PFRJRl9GUkVFWkUpCiAKICNlbmRpZiAvKiBfX0tFUk5FTF9fICovCiAKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vdGhyZWFkX2luZm9fNjQuaCBiL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vdGhyZWFkX2luZm9fNjQuaAppbmRleCBjMGE3MzdkLi42MzlhYzgwIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvXzY0LmgKKysrIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS90aHJlYWRfaW5mb182NC5oCkBAIC0yMzcsNiArMjM3LDcgQEAKICNkZWZpbmUgVElGX0FCSV9QRU5ESU5HCQkxMgogI2RlZmluZSBUSUZfTUVNRElFCQkxMwogI2RlZmluZSBUSUZfUE9MTElOR19OUkZMQUcJMTQKKyNkZWZpbmUgVElGX0ZSRUVaRQkJMTUJLyogaXMgZnJlZXppbmcgZm9yIHN1c3BlbmQgKi8KIAogI2RlZmluZSBfVElGX1NZU0NBTExfVFJBQ0UJKDE8PFRJRl9TWVNDQUxMX1RSQUNFKQogI2RlZmluZSBfVElGX05PVElGWV9SRVNVTUUJKDE8PFRJRl9OT1RJRllfUkVTVU1FKQpAQCAtMjQ5LDYgKzI1MCw3IEBACiAjZGVmaW5lIF9USUZfU1lTQ0FMTF9BVURJVAkoMTw8VElGX1NZU0NBTExfQVVESVQpCiAjZGVmaW5lIF9USUZfQUJJX1BFTkRJTkcJKDE8PFRJRl9BQklfUEVORElORykKICNkZWZpbmUgX1RJRl9QT0xMSU5HX05SRkxBRwkoMTw8VElGX1BPTExJTkdfTlJGTEFHKQorI2RlZmluZSBfVElGX0ZSRUVaRQkJKDE8PFRJRl9GUkVFWkUpCiAKICNkZWZpbmUgX1RJRl9VU0VSX1dPUktfTUFTSwkoKDB4ZmYgPDwgVElfRkxBR19XU0FWRURfU0hJRlQpIHwgXAogCQkJCSBfVElGX0RPX05PVElGWV9SRVNVTUVfTUFTSyB8IFwKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsL3N1bjRkX3NtcC5jIGIvYXJjaC9zcGFyYy9rZXJuZWwvc3VuNGRfc21wLmMKaW5kZXggY2UzZDQ1ZC4uN2E2YTVlNyAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9rZXJuZWwvc3VuNGRfc21wLmMKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwvc3VuNGRfc21wLmMKQEAgLTIwLDYgKzIwLDcgQEAKICNpbmNsdWRlIDxsaW51eC9zd2FwLmg+CiAjaW5jbHVkZSA8bGludXgvcHJvZmlsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvY3B1Lmg+CiAKICNpbmNsdWRlIDxhc20vcHRyYWNlLmg+CiAjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvc3VuNG1fc21wLmMgYi9hcmNoL3NwYXJjL2tlcm5lbC9zdW40bV9zbXAuYwppbmRleCAwYzU2NGJhLi41ZmMzODZkIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2tlcm5lbC9zdW40bV9zbXAuYworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC9zdW40bV9zbXAuYwpAQCAtMTcsNiArMTcsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3N3YXAuaD4KICNpbmNsdWRlIDxsaW51eC9wcm9maWxlLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9jcHUuaD4KIAogI2luY2x1ZGUgPGFzbS9jYWNoZWZsdXNoLmg+CiAjaW5jbHVkZSA8YXNtL3RsYmZsdXNoLmg+CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjNjQvS2NvbmZpZyBiL2FyY2gvc3BhcmM2NC9LY29uZmlnCmluZGV4IDU0NDZlMmEuLjAzNWIxNWEgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmM2NC9LY29uZmlnCisrKyBiL2FyY2gvc3BhcmM2NC9LY29uZmlnCkBAIC05Niw2ICs5Niw3IEBACiAJZGVmX2Jvb2wgeQogCiBzb3VyY2UgImluaXQvS2NvbmZpZyIKK3NvdXJjZSAia2VybmVsL0tjb25maWcuZnJlZXplciIKIAogbWVudSAiUHJvY2Vzc29yIHR5cGUgYW5kIGZlYXR1cmVzIgogCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjNjQva2VybmVsL2NobWMuYyBiL2FyY2gvc3BhcmM2NC9rZXJuZWwvY2htYy5jCmluZGV4IDk2N2IwNDguLjNiOWY0ZDYgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvY2htYy5jCisrKyBiL2FyY2gvc3BhcmM2NC9rZXJuZWwvY2htYy5jCkBAIC04MzEsNyArODMxLDcgQEAKIAlpZiAoIXVzM21jX3BsYXRmb3JtKCkpCiAJCXJldHVybiAtRU5PREVWOwogCi0JX19hc21fXyAoInJkcHIgJSV2ZXIsICUwIiA6ICI9ciIgKHZlcikpOworCV9fYXNtX18gX192b2xhdGlsZV9fKCJyZHByICUldmVyLCAlMCIgOiAiPXIiICh2ZXIpKTsKIAlpZiAoKHZlciA+PiAzMlVMKSA9PSBfX0pBTEFQRU5PX0lEIHx8CiAJICAgICh2ZXIgPj4gMzJVTCkgPT0gX19TRVJSQU5PX0lEKSB7CiAJCW1jX3R5cGUgPSBNQ19UWVBFX0pCVVM7CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjNjQva2VybmVsL2lvbW11LmMgYi9hcmNoL3NwYXJjNjQva2VybmVsL2lvbW11LmMKaW5kZXggMmEzN2E2Yy4uMWNjMTk5NSAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYzY0L2tlcm5lbC9pb21tdS5jCisrKyBiL2FyY2gvc3BhcmM2NC9rZXJuZWwvaW9tbXUuYwpAQCAtNTc1LDcgKzU3NSw3IEBACiAJCX0KIAkJLyogQWxsb2NhdGUgaW9tbXUgZW50cmllcyBmb3IgdGhhdCBzZWdtZW50ICovCiAJCXBhZGRyID0gKHVuc2lnbmVkIGxvbmcpIFNHX0VOVF9QSFlTX0FERFJFU1Mocyk7Ci0JCW5wYWdlcyA9IGlvbW11X251bV9wYWdlcyhwYWRkciwgc2xlbik7CisJCW5wYWdlcyA9IGlvbW11X251bV9wYWdlcyhwYWRkciwgc2xlbiwgSU9fUEFHRV9TSVpFKTsKIAkJZW50cnkgPSBpb21tdV9yYW5nZV9hbGxvYyhkZXYsIGlvbW11LCBucGFnZXMsICZoYW5kbGUpOwogCiAJCS8qIEhhbmRsZSBmYWlsdXJlICovCkBAIC02NDcsNyArNjQ3LDggQEAKIAkJCWlvcHRlX3QgKmJhc2U7CiAKIAkJCXZhZGRyID0gcy0+ZG1hX2FkZHJlc3MgJiBJT19QQUdFX01BU0s7Ci0JCQlucGFnZXMgPSBpb21tdV9udW1fcGFnZXMocy0+ZG1hX2FkZHJlc3MsIHMtPmRtYV9sZW5ndGgpOworCQkJbnBhZ2VzID0gaW9tbXVfbnVtX3BhZ2VzKHMtPmRtYV9hZGRyZXNzLCBzLT5kbWFfbGVuZ3RoLAorCQkJCQkJIElPX1BBR0VfU0laRSk7CiAJCQlpb21tdV9yYW5nZV9mcmVlKGlvbW11LCB2YWRkciwgbnBhZ2VzKTsKIAogCQkJZW50cnkgPSAodmFkZHIgLSBpb21tdS0+cGFnZV90YWJsZV9tYXBfYmFzZSkKQEAgLTcxNSw3ICs3MTYsNyBAQAogCiAJCWlmICghbGVuKQogCQkJYnJlYWs7Ci0JCW5wYWdlcyA9IGlvbW11X251bV9wYWdlcyhkbWFfaGFuZGxlLCBsZW4pOworCQlucGFnZXMgPSBpb21tdV9udW1fcGFnZXMoZG1hX2hhbmRsZSwgbGVuLCBJT19QQUdFX1NJWkUpOwogCQlpb21tdV9yYW5nZV9mcmVlKGlvbW11LCBkbWFfaGFuZGxlLCBucGFnZXMpOwogCiAJCWVudHJ5ID0gKChkbWFfaGFuZGxlIC0gaW9tbXUtPnBhZ2VfdGFibGVfbWFwX2Jhc2UpCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjNjQva2VybmVsL2lvbW11X2NvbW1vbi5oIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC9pb21tdV9jb21tb24uaAppbmRleCA1M2IxOWM4Li41OTFmNTg3IDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjNjQva2VybmVsL2lvbW11X2NvbW1vbi5oCisrKyBiL2FyY2gvc3BhcmM2NC9rZXJuZWwvaW9tbXVfY29tbW9uLmgKQEAgLTM1LDE3ICszNSw2IEBACiAKICNkZWZpbmUgU0dfRU5UX1BIWVNfQUREUkVTUyhTRykJKF9fcGEoc2dfdmlydCgoU0cpKSkpCiAKLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBpb21tdV9udW1fcGFnZXModW5zaWduZWQgbG9uZyB2YWRkciwKLQkJCQkJICAgIHVuc2lnbmVkIGxvbmcgc2xlbikKLXsKLQl1bnNpZ25lZCBsb25nIG5wYWdlczsKLQotCW5wYWdlcyA9IElPX1BBR0VfQUxJR04odmFkZHIgKyBzbGVuKSAtICh2YWRkciAmIElPX1BBR0VfTUFTSyk7Ci0JbnBhZ2VzID4+PSBJT19QQUdFX1NISUZUOwotCi0JcmV0dXJuIG5wYWdlczsKLX0KLQogc3RhdGljIGlubGluZSBpbnQgaXNfc3Bhbl9ib3VuZGFyeSh1bnNpZ25lZCBsb25nIGVudHJ5LAogCQkJCSAgIHVuc2lnbmVkIGxvbmcgc2hpZnQsCiAJCQkJICAgdW5zaWduZWQgbG9uZyBib3VuZGFyeV9zaXplLApAQCAtNTMsNyArNDIsOCBAQAogCQkJCSAgIHN0cnVjdCBzY2F0dGVybGlzdCAqc2cpCiB7CiAJdW5zaWduZWQgbG9uZyBwYWRkciA9IFNHX0VOVF9QSFlTX0FERFJFU1Mob3V0cyk7Ci0JaW50IG5yID0gaW9tbXVfbnVtX3BhZ2VzKHBhZGRyLCBvdXRzLT5kbWFfbGVuZ3RoICsgc2ctPmxlbmd0aCk7CisJaW50IG5yID0gaW9tbXVfbnVtX3BhZ2VzKHBhZGRyLCBvdXRzLT5kbWFfbGVuZ3RoICsgc2ctPmxlbmd0aCwKKwkJCQkgSU9fUEFHRV9TSVpFKTsKIAogCXJldHVybiBpb21tdV9pc19zcGFuX2JvdW5kYXJ5KGVudHJ5LCBuciwgc2hpZnQsIGJvdW5kYXJ5X3NpemUpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYzY0L2tlcm5lbC9wY2lfc3VuNHYuYyBiL2FyY2gvc3BhcmM2NC9rZXJuZWwvcGNpX3N1bjR2LmMKaW5kZXggZTg2YzczZS4uMzRhMWZkZSAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYzY0L2tlcm5lbC9wY2lfc3VuNHYuYworKysgYi9hcmNoL3NwYXJjNjQva2VybmVsL3BjaV9zdW40di5jCkBAIC0zODQsNyArMzg0LDcgQEAKIAkJfQogCQkvKiBBbGxvY2F0ZSBpb21tdSBlbnRyaWVzIGZvciB0aGF0IHNlZ21lbnQgKi8KIAkJcGFkZHIgPSAodW5zaWduZWQgbG9uZykgU0dfRU5UX1BIWVNfQUREUkVTUyhzKTsKLQkJbnBhZ2VzID0gaW9tbXVfbnVtX3BhZ2VzKHBhZGRyLCBzbGVuKTsKKwkJbnBhZ2VzID0gaW9tbXVfbnVtX3BhZ2VzKHBhZGRyLCBzbGVuLCBJT19QQUdFX1NJWkUpOwogCQllbnRyeSA9IGlvbW11X3JhbmdlX2FsbG9jKGRldiwgaW9tbXUsIG5wYWdlcywgJmhhbmRsZSk7CiAKIAkJLyogSGFuZGxlIGZhaWx1cmUgKi8KQEAgLTQ2MSw3ICs0NjEsOCBAQAogCQkJdW5zaWduZWQgbG9uZyB2YWRkciwgbnBhZ2VzOwogCiAJCQl2YWRkciA9IHMtPmRtYV9hZGRyZXNzICYgSU9fUEFHRV9NQVNLOwotCQkJbnBhZ2VzID0gaW9tbXVfbnVtX3BhZ2VzKHMtPmRtYV9hZGRyZXNzLCBzLT5kbWFfbGVuZ3RoKTsKKwkJCW5wYWdlcyA9IGlvbW11X251bV9wYWdlcyhzLT5kbWFfYWRkcmVzcywgcy0+ZG1hX2xlbmd0aCwKKwkJCQkJCSBJT19QQUdFX1NJWkUpOwogCQkJaW9tbXVfcmFuZ2VfZnJlZShpb21tdSwgdmFkZHIsIG5wYWdlcyk7CiAJCQkvKiBYWFggZGVtYXA/IFhYWCAqLwogCQkJcy0+ZG1hX2FkZHJlc3MgPSBETUFfRVJST1JfQ09ERTsKQEAgLTUwMCw3ICs1MDEsNyBAQAogCiAJCWlmICghbGVuKQogCQkJYnJlYWs7Ci0JCW5wYWdlcyA9IGlvbW11X251bV9wYWdlcyhkbWFfaGFuZGxlLCBsZW4pOworCQlucGFnZXMgPSBpb21tdV9udW1fcGFnZXMoZG1hX2hhbmRsZSwgbGVuLCBJT19QQUdFX1NJWkUpOwogCQlpb21tdV9yYW5nZV9mcmVlKGlvbW11LCBkbWFfaGFuZGxlLCBucGFnZXMpOwogCiAJCWVudHJ5ID0gKChkbWFfaGFuZGxlIC0gaW9tbXUtPnBhZ2VfdGFibGVfbWFwX2Jhc2UpID4+IElPX1BBR0VfU0hJRlQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYzY0L2tlcm5lbC9zbXAuYyBiL2FyY2gvc3BhcmM2NC9rZXJuZWwvc21wLmMKaW5kZXggMmJlMTY2Yy4uZTU2MjcxMSAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYzY0L2tlcm5lbC9zbXAuYworKysgYi9hcmNoL3NwYXJjNjQva2VybmVsL3NtcC5jCkBAIC0yMSw2ICsyMSw3IEBACiAjaW5jbHVkZSA8bGludXgvamlmZmllcy5oPgogI2luY2x1ZGUgPGxpbnV4L3Byb2ZpbGUuaD4KICNpbmNsdWRlIDxsaW51eC9sbWIuaD4KKyNpbmNsdWRlIDxsaW51eC9jcHUuaD4KIAogI2luY2x1ZGUgPGFzbS9oZWFkLmg+CiAjaW5jbHVkZSA8YXNtL3B0cmFjZS5oPgpAQCAtMTE1LDYgKzExNiw5IEBACiAJYXRvbWljX2luYygmaW5pdF9tbS5tbV9jb3VudCk7CiAJY3VycmVudC0+YWN0aXZlX21tID0gJmluaXRfbW07CiAKKwkvKiBpbmZvcm0gdGhlIG5vdGlmaWVycyBhYm91dCB0aGUgbmV3IGNwdSAqLworCW5vdGlmeV9jcHVfc3RhcnRpbmcoY3B1aWQpOworCiAJd2hpbGUgKCFjcHVfaXNzZXQoY3B1aWQsIHNtcF9jb21tZW5jZWRfbWFzaykpCiAJCXJtYigpOwogCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjNjQva2VybmVsL3N5c19zcGFyYzMyLmMgYi9hcmNoL3NwYXJjNjQva2VybmVsL3N5c19zcGFyYzMyLmMKaW5kZXggMzMyMGM5ZC4uZTgwMDUwMyAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYzY0L2tlcm5lbC9zeXNfc3BhcmMzMi5jCisrKyBiL2FyY2gvc3BhcmM2NC9rZXJuZWwvc3lzX3NwYXJjMzIuYwpAQCAtNTgsMTUgKzU4LDYgQEAKICNpbmNsdWRlIDxhc20vbW11X2NvbnRleHQuaD4KICNpbmNsdWRlIDxhc20vY29tcGF0X3NpZ25hbC5oPgogCi0vKiAzMi1iaXQgdGltZXZhbCBhbmQgcmVsYXRlZCBmbG90c2FtLiAgKi8KLQotc3RhdGljIGlubGluZSBsb25nIHB1dF90djMyKHN0cnVjdCBjb21wYXRfdGltZXZhbCBfX3VzZXIgKm8sIHN0cnVjdCB0aW1ldmFsICppKQotewotCXJldHVybiAoIWFjY2Vzc19vayhWRVJJRllfV1JJVEUsIG8sIHNpemVvZigqbykpIHx8Ci0JCShfX3B1dF91c2VyKGktPnR2X3NlYywgJm8tPnR2X3NlYykgfAotCQkgX19wdXRfdXNlcihpLT50dl91c2VjLCAmby0+dHZfdXNlYykpKTsKLX0KLQogI2lmZGVmIENPTkZJR19TWVNWSVBDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKIGFzbWxpbmthZ2UgbG9uZyBjb21wYXRfc3lzX2lwYyh1MzIgY2FsbCwgdTMyIGZpcnN0LCB1MzIgc2Vjb25kLCB1MzIgdGhpcmQsIGNvbXBhdF91cHRyX3QgcHRyLCB1MzIgZmlmdGgpCiB7CkBAIC0xNDgsNDEgKzEzOSw2IEBACiAJCXJldHVybiBzeXNfZnRydW5jYXRlKGZkLCAoaGlnaCA8PCAzMikgfCBsb3cpOwogfQogCi1pbnQgY3BfY29tcGF0X3N0YXQoc3RydWN0IGtzdGF0ICpzdGF0LCBzdHJ1Y3QgY29tcGF0X3N0YXQgX191c2VyICpzdGF0YnVmKQotewotCWNvbXBhdF9pbm9fdCBpbm87Ci0JaW50IGVycjsKLQotCWlmIChzdGF0LT5zaXplID4gTUFYX05PTl9MRlMgfHwgIW9sZF92YWxpZF9kZXYoc3RhdC0+ZGV2KSB8fAotCSAgICAhb2xkX3ZhbGlkX2RldihzdGF0LT5yZGV2KSkKLQkJcmV0dXJuIC1FT1ZFUkZMT1c7Ci0KLQlpbm8gPSBzdGF0LT5pbm87Ci0JaWYgKHNpemVvZihpbm8pIDwgc2l6ZW9mKHN0YXQtPmlubykgJiYgaW5vICE9IHN0YXQtPmlubykKLQkJcmV0dXJuIC1FT1ZFUkZMT1c7Ci0KLQllcnIgID0gcHV0X3VzZXIob2xkX2VuY29kZV9kZXYoc3RhdC0+ZGV2KSwgJnN0YXRidWYtPnN0X2Rldik7Ci0JZXJyIHw9IHB1dF91c2VyKHN0YXQtPmlubywgJnN0YXRidWYtPnN0X2lubyk7Ci0JZXJyIHw9IHB1dF91c2VyKHN0YXQtPm1vZGUsICZzdGF0YnVmLT5zdF9tb2RlKTsKLQllcnIgfD0gcHV0X3VzZXIoc3RhdC0+bmxpbmssICZzdGF0YnVmLT5zdF9ubGluayk7Ci0JZXJyIHw9IHB1dF91c2VyKGhpZ2gybG93dWlkKHN0YXQtPnVpZCksICZzdGF0YnVmLT5zdF91aWQpOwotCWVyciB8PSBwdXRfdXNlcihoaWdoMmxvd2dpZChzdGF0LT5naWQpLCAmc3RhdGJ1Zi0+c3RfZ2lkKTsKLQllcnIgfD0gcHV0X3VzZXIob2xkX2VuY29kZV9kZXYoc3RhdC0+cmRldiksICZzdGF0YnVmLT5zdF9yZGV2KTsKLQllcnIgfD0gcHV0X3VzZXIoc3RhdC0+c2l6ZSwgJnN0YXRidWYtPnN0X3NpemUpOwotCWVyciB8PSBwdXRfdXNlcihzdGF0LT5hdGltZS50dl9zZWMsICZzdGF0YnVmLT5zdF9hdGltZSk7Ci0JZXJyIHw9IHB1dF91c2VyKHN0YXQtPmF0aW1lLnR2X25zZWMsICZzdGF0YnVmLT5zdF9hdGltZV9uc2VjKTsKLQllcnIgfD0gcHV0X3VzZXIoc3RhdC0+bXRpbWUudHZfc2VjLCAmc3RhdGJ1Zi0+c3RfbXRpbWUpOwotCWVyciB8PSBwdXRfdXNlcihzdGF0LT5tdGltZS50dl9uc2VjLCAmc3RhdGJ1Zi0+c3RfbXRpbWVfbnNlYyk7Ci0JZXJyIHw9IHB1dF91c2VyKHN0YXQtPmN0aW1lLnR2X3NlYywgJnN0YXRidWYtPnN0X2N0aW1lKTsKLQllcnIgfD0gcHV0X3VzZXIoc3RhdC0+Y3RpbWUudHZfbnNlYywgJnN0YXRidWYtPnN0X2N0aW1lX25zZWMpOwotCWVyciB8PSBwdXRfdXNlcihzdGF0LT5ibGtzaXplLCAmc3RhdGJ1Zi0+c3RfYmxrc2l6ZSk7Ci0JZXJyIHw9IHB1dF91c2VyKHN0YXQtPmJsb2NrcywgJnN0YXRidWYtPnN0X2Jsb2Nrcyk7Ci0JZXJyIHw9IHB1dF91c2VyKDAsICZzdGF0YnVmLT5fX3VudXNlZDRbMF0pOwotCWVyciB8PSBwdXRfdXNlcigwLCAmc3RhdGJ1Zi0+X191bnVzZWQ0WzFdKTsKLQotCXJldHVybiBlcnI7Ci19Ci0KIHN0YXRpYyBpbnQgY3BfY29tcGF0X3N0YXQ2NChzdHJ1Y3Qga3N0YXQgKnN0YXQsCiAJCQkgICAgc3RydWN0IGNvbXBhdF9zdGF0NjQgX191c2VyICpzdGF0YnVmKQogewpAQCAtNTIyLDU5ICs0NzgsNiBAQAogCiAjZW5kaWYgIC8qIENPTkZJR19NT0RVTEVTICovCiAKLS8qIFRyYW5zbGF0aW9ucyBkdWUgdG8gdGltZV90IHNpemUgZGlmZmVyZW5jZXMuICBXaGljaCBhZmZlY3RzIGFsbAotICAgc29ydHMgb2YgdGhpbmdzLCBsaWtlIHRpbWV2YWwgYW5kIGl0aW1lcnZhbC4gICovCi0KLWV4dGVybiBzdHJ1Y3QgdGltZXpvbmUgc3lzX3R6OwotCi1hc21saW5rYWdlIGxvbmcgc3lzMzJfZ2V0dGltZW9mZGF5KHN0cnVjdCBjb21wYXRfdGltZXZhbCBfX3VzZXIgKnR2LAotCQkJCSAgIHN0cnVjdCB0aW1lem9uZSBfX3VzZXIgKnR6KQotewotCWlmICh0dikgewotCQlzdHJ1Y3QgdGltZXZhbCBrdHY7Ci0JCWRvX2dldHRpbWVvZmRheSgma3R2KTsKLQkJaWYgKHB1dF90djMyKHR2LCAma3R2KSkKLQkJCXJldHVybiAtRUZBVUxUOwotCX0KLQlpZiAodHopIHsKLQkJaWYgKGNvcHlfdG9fdXNlcih0eiwgJnN5c190eiwgc2l6ZW9mKHN5c190eikpKQotCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JfQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW5saW5lIGxvbmcgZ2V0X3RzMzIoc3RydWN0IHRpbWVzcGVjICpvLCBzdHJ1Y3QgY29tcGF0X3RpbWV2YWwgX191c2VyICppKQotewotCWxvbmcgdXNlYzsKLQotCWlmICghYWNjZXNzX29rKFZFUklGWV9SRUFELCBpLCBzaXplb2YoKmkpKSkKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0JaWYgKF9fZ2V0X3VzZXIoby0+dHZfc2VjLCAmaS0+dHZfc2VjKSkKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0JaWYgKF9fZ2V0X3VzZXIodXNlYywgJmktPnR2X3VzZWMpKQotCQlyZXR1cm4gLUVGQVVMVDsKLQlvLT50dl9uc2VjID0gdXNlYyAqIDEwMDA7Ci0JcmV0dXJuIDA7Ci19Ci0KLWFzbWxpbmthZ2UgbG9uZyBzeXMzMl9zZXR0aW1lb2ZkYXkoc3RydWN0IGNvbXBhdF90aW1ldmFsIF9fdXNlciAqdHYsCi0JCQkJICAgc3RydWN0IHRpbWV6b25lIF9fdXNlciAqdHopCi17Ci0Jc3RydWN0IHRpbWVzcGVjIGt0czsKLQlzdHJ1Y3QgdGltZXpvbmUga3R6OwotCi0gCWlmICh0dikgewotCQlpZiAoZ2V0X3RzMzIoJmt0cywgdHYpKQotCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JfQotCWlmICh0eikgewotCQlpZiAoY29weV9mcm9tX3VzZXIoJmt0eiwgdHosIHNpemVvZihrdHopKSkKLQkJCXJldHVybiAtRUZBVUxUOwotCX0KLQotCXJldHVybiBkb19zeXNfc2V0dGltZW9mZGF5KHR2ID8gJmt0cyA6IE5VTEwsIHR6ID8gJmt0eiA6IE5VTEwpOwotfQotCiBhc21saW5rYWdlIGNvbXBhdF9zc2l6ZV90IHN5czMyX3ByZWFkNjQodW5zaWduZWQgaW50IGZkLAogCQkJCQljaGFyIF9fdXNlciAqdWJ1ZiwKIAkJCQkJY29tcGF0X3NpemVfdCBjb3VudCwKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvc3lzdGJscy5TIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC9zeXN0YmxzLlMKaW5kZXggNWRhZWU0Yi4uYjJmYTRjMSAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYzY0L2tlcm5lbC9zeXN0YmxzLlMKKysrIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC9zeXN0YmxzLlMKQEAgLTQxLDggKzQxLDggQEAKIC8qMTAwKi8gLndvcmQgc3lzMzJfZ2V0cHJpb3JpdHksIHN5czMyX3J0X3NpZ3JldHVybiwgc3lzMzJfcnRfc2lnYWN0aW9uLCBzeXMzMl9ydF9zaWdwcm9jbWFzaywgc3lzMzJfcnRfc2lncGVuZGluZwogCS53b3JkIGNvbXBhdF9zeXNfcnRfc2lndGltZWR3YWl0LCBzeXMzMl9ydF9zaWdxdWV1ZWluZm8sIGNvbXBhdF9zeXNfcnRfc2lnc3VzcGVuZCwgc3lzX3NldHJlc3VpZCwgc3lzX2dldHJlc3VpZAogLyoxMTAqLwkud29yZCBzeXNfc2V0cmVzZ2lkLCBzeXNfZ2V0cmVzZ2lkLCBzeXNfc2V0cmVnaWQsIHN5c19uaXNfc3lzY2FsbCwgc3lzX25pc19zeXNjYWxsCi0JLndvcmQgc3lzMzJfZ2V0Z3JvdXBzLCBzeXMzMl9nZXR0aW1lb2ZkYXksIHN5czMyX2dldHJ1c2FnZSwgc3lzX25pc19zeXNjYWxsLCBzeXNfZ2V0Y3dkCi0vKjEyMCovCS53b3JkIGNvbXBhdF9zeXNfcmVhZHYsIGNvbXBhdF9zeXNfd3JpdGV2LCBzeXMzMl9zZXR0aW1lb2ZkYXksIHN5c19mY2hvd24xNiwgc3lzX2ZjaG1vZAorCS53b3JkIHN5czMyX2dldGdyb3VwcywgY29tcGF0X3N5c19nZXR0aW1lb2ZkYXksIHN5czMyX2dldHJ1c2FnZSwgc3lzX25pc19zeXNjYWxsLCBzeXNfZ2V0Y3dkCisvKjEyMCovCS53b3JkIGNvbXBhdF9zeXNfcmVhZHYsIGNvbXBhdF9zeXNfd3JpdGV2LCBjb21wYXRfc3lzX3NldHRpbWVvZmRheSwgc3lzX2ZjaG93bjE2LCBzeXNfZmNobW9kCiAJLndvcmQgc3lzX25pc19zeXNjYWxsLCBzeXNfc2V0cmV1aWQxNiwgc3lzX3NldHJlZ2lkMTYsIHN5c19yZW5hbWUsIHN5c190cnVuY2F0ZQogLyoxMzAqLwkud29yZCBzeXNfZnRydW5jYXRlLCBzeXNfZmxvY2ssIGNvbXBhdF9zeXNfbHN0YXQ2NCwgc3lzX25pc19zeXNjYWxsLCBzeXNfbmlzX3N5c2NhbGwKIAkud29yZCBzeXNfbmlzX3N5c2NhbGwsIHN5czMyX21rZGlyLCBzeXNfcm1kaXIsIGNvbXBhdF9zeXNfdXRpbWVzLCBjb21wYXRfc3lzX3N0YXQ2NApkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYzY0L2tlcm5lbC91czNfY3B1ZnJlcS5jIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC91czNfY3B1ZnJlcS5jCmluZGV4IDQ3ZTNhY2EuLjM2NWI2NDYgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvdXMzX2NwdWZyZXEuYworKysgYi9hcmNoL3NwYXJjNjQva2VybmVsL3VzM19jcHVmcmVxLmMKQEAgLTE4Myw3ICsxODMsNiBAQAogCXRhYmxlWzNdLmluZGV4ID0gMDsKIAl0YWJsZVszXS5mcmVxdWVuY3kgPSBDUFVGUkVRX1RBQkxFX0VORDsKIAotCXBvbGljeS0+Z292ZXJub3IgPSBDUFVGUkVRX0RFRkFVTFRfR09WRVJOT1I7CiAJcG9saWN5LT5jcHVpbmZvLnRyYW5zaXRpb25fbGF0ZW5jeSA9IDA7CiAJcG9saWN5LT5jdXIgPSBjbG9ja190aWNrOwogCmRpZmYgLS1naXQgYS9hcmNoL3VtL0tjb25maWcgYi9hcmNoL3VtL0tjb25maWcKaW5kZXggNjk3NjgxMi4uMzkzYmNjZiAxMDA2NDQKLS0tIGEvYXJjaC91bS9LY29uZmlnCisrKyBiL2FyY2gvdW0vS2NvbmZpZwpAQCAtMjI5LDYgKzIyOSw4IEBACiAKIHNvdXJjZSAiaW5pdC9LY29uZmlnIgogCitzb3VyY2UgImtlcm5lbC9LY29uZmlnLmZyZWV6ZXIiCisKIHNvdXJjZSAiZHJpdmVycy9ibG9jay9LY29uZmlnIgogCiBzb3VyY2UgImFyY2gvdW0vS2NvbmZpZy5jaGFyIgpkaWZmIC0tZ2l0IGEvYXJjaC91bS9LY29uZmlnLmkzODYgYi9hcmNoL3VtL0tjb25maWcuaTM4NgppbmRleCBlMDllZGZhLi4xZjU3YzExIDEwMDY0NAotLS0gYS9hcmNoL3VtL0tjb25maWcuaTM4NgorKysgYi9hcmNoL3VtL0tjb25maWcuaTM4NgpAQCAtOSw4ICs5LDkgQEAKIAlkZWZhdWx0IHkKIAogY29uZmlnIFg4Nl8zMgotICAgICAgIGJvb2wKLSAgICAgICBkZWZhdWx0IHkKKwlib29sCisJZGVmYXVsdCB5CisgIAlzZWxlY3QgSEFWRV9BT1VUCiAKIGNvbmZpZyBSV1NFTV9YQ0hHQUREX0FMR09SSVRITQogCWRlZl9ib29sIHkKQEAgLTQyLDYgKzQzLDMgQEAKIGNvbmZpZyBHRU5FUklDX0hXRUlHSFQKIAlib29sCiAJZGVmYXVsdCB5Ci0KLWNvbmZpZyBBUkNIX1NVUFBPUlRTX0FPVVQKLQlkZWZfYm9vbCB5CmRpZmYgLS1naXQgYS9hcmNoL3VtL0tjb25maWcueDg2XzY0IGIvYXJjaC91bS9LY29uZmlnLng4Nl82NAppbmRleCA1Njk2ZTdiLi40MGIzNDA3IDEwMDY0NAotLS0gYS9hcmNoL3VtL0tjb25maWcueDg2XzY0CisrKyBiL2FyY2gvdW0vS2NvbmZpZy54ODZfNjQKQEAgLTM3LDYgKzM3LDMgQEAKIGNvbmZpZyBHRU5FUklDX0hXRUlHSFQKIAlib29sCiAJZGVmYXVsdCB5Ci0KLWNvbmZpZyBBUkNIX1NVUFBPUlRTX0FPVVQKLQlkZWZfYm9vbCB5CmRpZmYgLS1naXQgYS9hcmNoL3VtL2RyaXZlcnMvbGluZS5jIGIvYXJjaC91bS9kcml2ZXJzL2xpbmUuYwppbmRleCBkNzQxZjM1Li4xNGExMDJlIDEwMDY0NAotLS0gYS9hcmNoL3VtL2RyaXZlcnMvbGluZS5jCisrKyBiL2FyY2gvdW0vZHJpdmVycy9saW5lLmMKQEAgLTI3NSw2ICsyNzUsOCBAQAogCWNhc2UgVElPQ0dMVEM6CiAJY2FzZSBUSU9DU0xUQzoKICNlbmRpZgorCS8qIE5vdGU6IHRoZXNlIGFyZSBvdXQgb2YgZGF0ZSBhcyB3ZSBub3cgaGF2ZSBUQ0dFVFMyIGV0YyBidXQgdGhpcworCSAgIHdob2xlIGxvdCBzaG91bGQgcHJvYmFibHkgZ28gYXdheSAqLwogCWNhc2UgVENHRVRTOgogCWNhc2UgVENTRVRTRjoKIAljYXNlIFRDU0VUU1c6CmRpZmYgLS1naXQgYS9hcmNoL3VtL2tlcm5lbC9leGVjLmMgYi9hcmNoL3VtL2tlcm5lbC9leGVjLmMKaW5kZXggZjVkN2Y0NS4uNTk4NzExYyAxMDA2NDQKLS0tIGEvYXJjaC91bS9rZXJuZWwvZXhlYy5jCisrKyBiL2FyY2gvdW0va2VybmVsL2V4ZWMuYwpAQCAtNDIsMjMgKzQyLDExIEBACiAJUFRfUkVHU19TUChyZWdzKSA9IGVzcDsKIH0KIAotI2lmZGVmIENPTkZJR19UVFlfTE9HCi1leHRlcm4gdm9pZCBsb2dfZXhlYyhjaGFyICoqYXJndiwgdm9pZCAqdHR5KTsKLSNlbmRpZgotCiBzdGF0aWMgbG9uZyBleGVjdmUxKGNoYXIgKmZpbGUsIGNoYXIgX191c2VyICogX191c2VyICphcmd2LAogCQkgICAgY2hhciBfX3VzZXIgKl9fdXNlciAqZW52KQogewogCWxvbmcgZXJyb3I7Ci0jaWZkZWYgQ09ORklHX1RUWV9MT0cKLQlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5OwogCi0JbXV0ZXhfbG9jaygmdHR5X211dGV4KTsKLQl0dHkgPSBnZXRfY3VycmVudF90dHkoKTsKLQlpZiAodHR5KQotCQlsb2dfZXhlYyhhcmd2LCB0dHkpOwotCW11dGV4X3VubG9jaygmdHR5X211dGV4KTsKLSNlbmRpZgogCWVycm9yID0gZG9fZXhlY3ZlKGZpbGUsIGFyZ3YsIGVudiwgJmN1cnJlbnQtPnRocmVhZC5yZWdzKTsKIAlpZiAoZXJyb3IgPT0gMCkgewogCQl0YXNrX2xvY2soY3VycmVudCk7CmRpZmYgLS1naXQgYS9hcmNoL3VtL29zLUxpbnV4L01ha2VmaWxlIGIvYXJjaC91bS9vcy1MaW51eC9NYWtlZmlsZQppbmRleCA4YTQ4ZDZhLi5kNjZmMDM4IDEwMDY0NAotLS0gYS9hcmNoL3VtL29zLUxpbnV4L01ha2VmaWxlCisrKyBiL2FyY2gvdW0vb3MtTGludXgvTWFrZWZpbGUKQEAgLTcsOSArNyw2IEBACiAJcmVnaXN0ZXJzLm8gc2lnaW8ubyBzaWduYWwubyBzdGFydF91cC5vIHRpbWUubyB0dHkubyB1YWNjZXNzLm8gXAogCXVtaWQubyB0bHMubyB1c2VyX3N5bXMubyB1dGlsLm8gZHJpdmVycy8gc3lzLSQoU1VCQVJDSCkvIHNrYXMvCiAKLW9iai0kKENPTkZJR19UVFlfTE9HKSArPSB0dHlfbG9nLm8KLXVzZXItb2Jqcy0kKENPTkZJR19UVFlfTE9HKSArPSB0dHlfbG9nLm8KLQogVVNFUl9PQkpTIDo9ICQodXNlci1vYmpzLXkpIGFpby5vIGVsZl9hdXgubyBleGVjdnAubyBmaWxlLm8gaGVscGVyLm8gaXJxLm8gXAogCW1haW4ubyBtZW0ubyBwcm9jZXNzLm8gcmVnaXN0ZXJzLm8gc2lnaW8ubyBzaWduYWwubyBzdGFydF91cC5vIHRpbWUubyBcCiAJdHR5Lm8gdGxzLm8gdWFjY2Vzcy5vIHVtaWQubyB1dGlsLm8KZGlmZiAtLWdpdCBhL2FyY2gvdW0vb3MtTGludXgvdHR5X2xvZy5jIGIvYXJjaC91bS9vcy1MaW51eC90dHlfbG9nLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNjNjQ4ZTYuLjAwMDAwMDAKLS0tIGEvYXJjaC91bS9vcy1MaW51eC90dHlfbG9nLmMKKysrIC9kZXYvbnVsbApAQCAtMSwyMTcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMiBKZWZmIERpa2UgKGpkaWtlQGthcmF5YS5jb20pIGFuZAotICogZ2VvZmZyZXkgaGluZyA8Z2hpbmdAbmV0Lm9oaW8tc3RhdGUuZWR1PgotICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTAotICovCi0KLSNpbmNsdWRlIDxlcnJuby5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8c3RkbGliLmg+Ci0jaW5jbHVkZSA8dW5pc3RkLmg+Ci0jaW5jbHVkZSA8c3lzL3RpbWUuaD4KLSNpbmNsdWRlICJpbml0LmgiCi0jaW5jbHVkZSAidXNlci5oIgotI2luY2x1ZGUgIm9zLmgiCi0KLSNkZWZpbmUgVFRZX0xPR19ESVIgIi4vIgotCi0vKiBTZXQgZWFybHkgaW4gYm9vdCBhbmQgdGhlbiB1bmNoYW5nZWQgKi8KLXN0YXRpYyBjaGFyICp0dHlfbG9nX2RpciA9IFRUWV9MT0dfRElSOwotc3RhdGljIGludCB0dHlfbG9nX2ZkID0gLTE7Ci0KLSNkZWZpbmUgVFRZX0xPR19PUEVOIDEKLSNkZWZpbmUgVFRZX0xPR19DTE9TRSAyCi0jZGVmaW5lIFRUWV9MT0dfV1JJVEUgMwotI2RlZmluZSBUVFlfTE9HX0VYRUMgNAotCi0jZGVmaW5lIFRUWV9SRUFEIDEKLSNkZWZpbmUgVFRZX1dSSVRFIDIKLQotc3RydWN0IHR0eV9sb2dfYnVmIHsKLQlpbnQgd2hhdDsKLQl1bnNpZ25lZCBsb25nIHR0eTsKLQlpbnQgbGVuOwotCWludCBkaXJlY3Rpb247Ci0JdW5zaWduZWQgbG9uZyBzZWM7Ci0JdW5zaWduZWQgbG9uZyB1c2VjOwotfTsKLQotaW50IG9wZW5fdHR5X2xvZyh2b2lkICp0dHksIHZvaWQgKmN1cnJlbnRfdHR5KQotewotCXN0cnVjdCB0aW1ldmFsIHR2OwotCXN0cnVjdCB0dHlfbG9nX2J1ZiBkYXRhOwotCWNoYXIgYnVmW3N0cmxlbih0dHlfbG9nX2RpcikgKyBzaXplb2YoIjAxMjM0NTY3ODkwLTAxMjM0NTY3XDAiKV07Ci0JaW50IGZkOwotCi0JZ2V0dGltZW9mZGF5KCZ0diwgTlVMTCk7Ci0JaWYodHR5X2xvZ19mZCAhPSAtMSl7Ci0JCWRhdGEgPSAoKHN0cnVjdCB0dHlfbG9nX2J1ZikgeyAud2hhdCAJPSBUVFlfTE9HX09QRU4sCi0JCQkJCSAgICAgICAudHR5ICA9ICh1bnNpZ25lZCBsb25nKSB0dHksCi0JCQkJCSAgICAgICAubGVuICA9IHNpemVvZihjdXJyZW50X3R0eSksCi0JCQkJCSAgICAgICAuZGlyZWN0aW9uID0gMCwKLQkJCQkJICAgICAgIC5zZWMgPSB0di50dl9zZWMsCi0JCQkJCSAgICAgICAudXNlYyA9IHR2LnR2X3VzZWMgfSApOwotCQl3cml0ZSh0dHlfbG9nX2ZkLCAmZGF0YSwgc2l6ZW9mKGRhdGEpKTsKLQkJd3JpdGUodHR5X2xvZ19mZCwgJmN1cnJlbnRfdHR5LCBkYXRhLmxlbik7Ci0JCXJldHVybiB0dHlfbG9nX2ZkOwotCX0KLQotCXNwcmludGYoYnVmLCAiJXMvJTB1LSUwdSIsIHR0eV9sb2dfZGlyLCAodW5zaWduZWQgaW50KSB0di50dl9zZWMsCi0gCQkodW5zaWduZWQgaW50KSB0di50dl91c2VjKTsKLQotCWZkID0gb3Nfb3Blbl9maWxlKGJ1Ziwgb2ZfYXBwZW5kKG9mX2NyZWF0ZShvZl9yZHdyKE9QRU5GTEFHUygpKSkpLAotCQkJICAwNjQ0KTsKLQlpZihmZCA8IDApewotCQlwcmludGsoIm9wZW5fdHR5X2xvZyA6IGNvdWxkbid0IG9wZW4gJyVzJywgZXJybm8gPSAlZFxuIiwKLQkJICAgICAgIGJ1ZiwgLWZkKTsKLQl9Ci0JcmV0dXJuIGZkOwotfQotCi12b2lkIGNsb3NlX3R0eV9sb2coaW50IGZkLCB2b2lkICp0dHkpCi17Ci0Jc3RydWN0IHR0eV9sb2dfYnVmIGRhdGE7Ci0Jc3RydWN0IHRpbWV2YWwgdHY7Ci0KLQlpZih0dHlfbG9nX2ZkICE9IC0xKXsKLQkJZ2V0dGltZW9mZGF5KCZ0diwgTlVMTCk7Ci0JCWRhdGEgPSAoKHN0cnVjdCB0dHlfbG9nX2J1ZikgeyAud2hhdCAJPSBUVFlfTE9HX0NMT1NFLAotCQkJCQkgICAgICAgLnR0eSAgPSAodW5zaWduZWQgbG9uZykgdHR5LAotCQkJCQkgICAgICAgLmxlbiAgPSAwLAotCQkJCQkgICAgICAgLmRpcmVjdGlvbiA9IDAsCi0JCQkJCSAgICAgICAuc2VjID0gdHYudHZfc2VjLAotCQkJCQkgICAgICAgLnVzZWMgPSB0di50dl91c2VjIH0gKTsKLQkJd3JpdGUodHR5X2xvZ19mZCwgJmRhdGEsIHNpemVvZihkYXRhKSk7Ci0JCXJldHVybjsKLQl9Ci0Jb3NfY2xvc2VfZmlsZShmZCk7Ci19Ci0KLXN0YXRpYyBpbnQgbG9nX2NodW5rKGludCBmZCwgY29uc3QgY2hhciAqYnVmLCBpbnQgbGVuKQotewotCWludCB0b3RhbCA9IDAsIHRyeSwgbWlzc2VkLCBuOwotCWNoYXIgY2h1bmtbNjRdOwotCi0Jd2hpbGUobGVuID4gMCl7Ci0JCXRyeSA9IChsZW4gPiBzaXplb2YoY2h1bmspKSA/IHNpemVvZihjaHVuaykgOiBsZW47Ci0JCW1pc3NlZCA9IGNvcHlfZnJvbV91c2VyX3Byb2MoY2h1bmssIChjaGFyICopIGJ1ZiwgdHJ5KTsKLQkJdHJ5IC09IG1pc3NlZDsKLQkJbiA9IHdyaXRlKGZkLCBjaHVuaywgdHJ5KTsKLQkJaWYobiAhPSB0cnkpIHsKLQkJCWlmKG4gPCAwKQotCQkJCXJldHVybiAtZXJybm87Ci0JCQlyZXR1cm4gLUVJTzsKLQkJfQotCQlpZihtaXNzZWQgIT0gMCkKLQkJCXJldHVybiAtRUZBVUxUOwotCi0JCWxlbiAtPSB0cnk7Ci0JCXRvdGFsICs9IHRyeTsKLQkJYnVmICs9IHRyeTsKLQl9Ci0KLQlyZXR1cm4gdG90YWw7Ci19Ci0KLWludCB3cml0ZV90dHlfbG9nKGludCBmZCwgY29uc3QgY2hhciAqYnVmLCBpbnQgbGVuLCB2b2lkICp0dHksIGludCBpc19yZWFkKQotewotCXN0cnVjdCB0aW1ldmFsIHR2OwotCXN0cnVjdCB0dHlfbG9nX2J1ZiBkYXRhOwotCWludCBkaXJlY3Rpb247Ci0KLQlpZihmZCA9PSB0dHlfbG9nX2ZkKXsKLQkJZ2V0dGltZW9mZGF5KCZ0diwgTlVMTCk7Ci0JCWRpcmVjdGlvbiA9IGlzX3JlYWQgPyBUVFlfUkVBRCA6IFRUWV9XUklURTsKLQkJZGF0YSA9ICgoc3RydWN0IHR0eV9sb2dfYnVmKSB7IC53aGF0IAk9IFRUWV9MT0dfV1JJVEUsCi0JCQkJCSAgICAgICAudHR5ICA9ICh1bnNpZ25lZCBsb25nKSB0dHksCi0JCQkJCSAgICAgICAubGVuICA9IGxlbiwKLQkJCQkJICAgICAgIC5kaXJlY3Rpb24gPSBkaXJlY3Rpb24sCi0JCQkJCSAgICAgICAuc2VjID0gdHYudHZfc2VjLAotCQkJCQkgICAgICAgLnVzZWMgPSB0di50dl91c2VjIH0gKTsKLQkJd3JpdGUodHR5X2xvZ19mZCwgJmRhdGEsIHNpemVvZihkYXRhKSk7Ci0JfQotCi0JcmV0dXJuIGxvZ19jaHVuayhmZCwgYnVmLCBsZW4pOwotfQotCi12b2lkIGxvZ19leGVjKGNoYXIgKiphcmd2LCB2b2lkICp0dHkpCi17Ci0Jc3RydWN0IHRpbWV2YWwgdHY7Ci0Jc3RydWN0IHR0eV9sb2dfYnVmIGRhdGE7Ci0JY2hhciAqKnB0ciwqYXJnOwotCWludCBsZW47Ci0KLQlpZih0dHlfbG9nX2ZkID09IC0xKSByZXR1cm47Ci0KLQlnZXR0aW1lb2ZkYXkoJnR2LCBOVUxMKTsKLQotCWxlbiA9IDA7Ci0JZm9yKHB0ciA9IGFyZ3Y7IDsgcHRyKyspewotCQlpZihjb3B5X2Zyb21fdXNlcl9wcm9jKCZhcmcsIHB0ciwgc2l6ZW9mKGFyZykpKQotCQkJcmV0dXJuOwotCQlpZihhcmcgPT0gTlVMTCkgYnJlYWs7Ci0JCWxlbiArPSBzdHJsZW5fdXNlcl9wcm9jKGFyZyk7Ci0JfQotCi0JZGF0YSA9ICgoc3RydWN0IHR0eV9sb2dfYnVmKSB7IC53aGF0IAk9IFRUWV9MT0dfRVhFQywKLQkJCQkgICAgICAgLnR0eSAgPSAodW5zaWduZWQgbG9uZykgdHR5LAotCQkJCSAgICAgICAubGVuICA9IGxlbiwKLQkJCQkgICAgICAgLmRpcmVjdGlvbiA9IDAsCi0JCQkJICAgICAgIC5zZWMgPSB0di50dl9zZWMsCi0JCQkJICAgICAgIC51c2VjID0gdHYudHZfdXNlYyB9ICk7Ci0Jd3JpdGUodHR5X2xvZ19mZCwgJmRhdGEsIHNpemVvZihkYXRhKSk7Ci0KLQlmb3IocHRyID0gYXJndjsgOyBwdHIrKyl7Ci0JCWlmKGNvcHlfZnJvbV91c2VyX3Byb2MoJmFyZywgcHRyLCBzaXplb2YoYXJnKSkpCi0JCQlyZXR1cm47Ci0JCWlmKGFyZyA9PSBOVUxMKSBicmVhazsKLQkJbG9nX2NodW5rKHR0eV9sb2dfZmQsIGFyZywgc3RybGVuX3VzZXJfcHJvYyhhcmcpKTsKLQl9Ci19Ci0KLWV4dGVybiB2b2lkIHJlZ2lzdGVyX3R0eV9sb2dnZXIoaW50ICgqb3BlbmVyKSh2b2lkICosIHZvaWQgKiksCi0JCQkJaW50ICgqd3JpdGVyKShpbnQsIGNvbnN0IGNoYXIgKiwgaW50LAotCQkJCQkgICAgICB2b2lkICosIGludCksCi0JCQkJdm9pZCAoKmNsb3NlcikoaW50LCB2b2lkICopKTsKLQotc3RhdGljIGludCByZWdpc3Rlcl9sb2dnZXIodm9pZCkKLXsKLQlyZWdpc3Rlcl90dHlfbG9nZ2VyKG9wZW5fdHR5X2xvZywgd3JpdGVfdHR5X2xvZywgY2xvc2VfdHR5X2xvZyk7Ci0JcmV0dXJuIDA7Ci19Ci0KLV9fdW1sX2luaXRjYWxsKHJlZ2lzdGVyX2xvZ2dlcik7Ci0KLXN0YXRpYyBpbnQgX19pbml0IHNldF90dHlfbG9nX2RpcihjaGFyICpuYW1lLCBpbnQgKmFkZCkKLXsKLQl0dHlfbG9nX2RpciA9IG5hbWU7Ci0JcmV0dXJuIDA7Ci19Ci0KLV9fdW1sX3NldHVwKCJ0dHlfbG9nX2Rpcj0iLCBzZXRfdHR5X2xvZ19kaXIsCi0idHR5X2xvZ19kaXI9PGRpcmVjdG9yeT5cbiIKLSIgICAgVGhpcyBpcyB1c2VkIHRvIHNwZWNpZnkgdGhlIGRpcmVjdG9yeSB3aGVyZSB0aGUgbG9ncyBvZiBhbGwgcHR5XG4iCi0iICAgIGRhdGEgZnJvbSB0aGlzIFVNTCBtYWNoaW5lIHdpbGwgYmUgd3JpdHRlbi5cblxuIgotKTsKLQotc3RhdGljIGludCBfX2luaXQgc2V0X3R0eV9sb2dfZmQoY2hhciAqbmFtZSwgaW50ICphZGQpCi17Ci0JY2hhciAqZW5kOwotCi0JdHR5X2xvZ19mZCA9IHN0cnRvdWwobmFtZSwgJmVuZCwgMCk7Ci0JaWYoKCplbmQgIT0gJ1wwJykgfHwgKGVuZCA9PSBuYW1lKSl7Ci0JCXByaW50Zigic2V0X3R0eV9sb2dfZmQgLSBzdHJ0b3VsIGZhaWxlZCBvbiAnJXMnXG4iLCBuYW1lKTsKLQkJdHR5X2xvZ19mZCA9IC0xOwotCX0KLQotCSphZGQgPSAwOwotCXJldHVybiAwOwotfQotCi1fX3VtbF9zZXR1cCgidHR5X2xvZ19mZD0iLCBzZXRfdHR5X2xvZ19mZCwKLSJ0dHlfbG9nX2ZkPTxmZD5cbiIKLSIgICAgVGhpcyBpcyB1c2VkIHRvIHNwZWNpZnkgYSBwcmVjb25maWd1cmVkIGZpbGUgZGVzY3JpcHRvciB0byB3aGljaCBhbGxcbiIKLSIgICAgdHR5IGRhdGEgd2lsbCBiZSB3cml0dGVuLiAgUHJlY29uZmlndXJlIHRoZSBkZXNjcmlwdG9yIHdpdGggc29tZXRoaW5nXG4iCi0iICAgIGxpa2UgJzEwPnR0eV9sb2cgdHR5X2xvZ19mZD0xMCcuXG5cbiIKLSk7CmRpZmYgLS1naXQgYS9hcmNoL3VtL3N5cy1pMzg2L3NpZ25hbC5jIGIvYXJjaC91bS9zeXMtaTM4Ni9zaWduYWwuYwppbmRleCBmZDBjMjVhLi4xMjk2NDczIDEwMDY0NAotLS0gYS9hcmNoL3VtL3N5cy1pMzg2L3NpZ25hbC5jCisrKyBiL2FyY2gvdW0vc3lzLWkzODYvc2lnbmFsLmMKQEAgLTE3OSw3ICsxNzksOCBAQAogCWlmIChoYXZlX2ZweF9yZWdzKSB7CiAJCXN0cnVjdCB1c2VyX2Z4c3Jfc3RydWN0IGZweDsKIAotCQllcnIgPSBjb3B5X2Zyb21fdXNlcigmZnB4LCAmc2MuZnBzdGF0ZS0+X2Z4c3JfZW52WzBdLAorCQllcnIgPSBjb3B5X2Zyb21fdXNlcigmZnB4LAorCQkJJigoc3RydWN0IF9mcHN0YXRlIF9fdXNlciAqKXNjLmZwc3RhdGUpLT5fZnhzcl9lbnZbMF0sCiAJCQkJICAgICBzaXplb2Yoc3RydWN0IHVzZXJfZnhzcl9zdHJ1Y3QpKTsKIAkJaWYgKGVycikKIAkJCXJldHVybiAxOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvS2NvbmZpZyBiL2FyY2gveDg2L0tjb25maWcKaW5kZXggZmM4MzUxZi4uNzM5NjY4OSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvS2NvbmZpZworKysgYi9hcmNoL3g4Ni9LY29uZmlnCkBAIC0xOCw2ICsxOCw3IEBACiAjIyMgQXJjaCBzZXR0aW5ncwogY29uZmlnIFg4NgogCWRlZl9ib29sIHkKKwlzZWxlY3QgSEFWRV9BT1VUIGlmIFg4Nl8zMgogCXNlbGVjdCBIQVZFX1VOU1RBQkxFX1NDSEVEX0NMT0NLCiAJc2VsZWN0IEhBVkVfSURFCiAJc2VsZWN0IEhBVkVfT1BST0ZJTEUKQEAgLTM4LDEwICszOSw2IEBACiAJZGVmYXVsdCAiYXJjaC94ODYvY29uZmlncy9pMzg2X2RlZmNvbmZpZyIgaWYgWDg2XzMyCiAJZGVmYXVsdCAiYXJjaC94ODYvY29uZmlncy94ODZfNjRfZGVmY29uZmlnIiBpZiBYODZfNjQKIAotCi1jb25maWcgR0VORVJJQ19MT0NLQlJFQUsKLQlkZWZfYm9vbCBuCi0KIGNvbmZpZyBHRU5FUklDX1RJTUUKIAlkZWZfYm9vbCB5CiAKQEAgLTk0LDcgKzkxLDcgQEAKIAlkZWZfYm9vbCB5CiAKIGNvbmZpZyBHRU5FUklDX0dQSU8KLQlkZWZfYm9vbCBuCisJYm9vbAogCiBjb25maWcgQVJDSF9NQVlfSEFWRV9QQ19GREMKIAlkZWZfYm9vbCB5CkBAIC0xMDUsMTIgKzEwMiw2IEBACiBjb25maWcgUldTRU1fWENIR0FERF9BTEdPUklUSE0KIAlkZWZfYm9vbCBYODZfWEFERAogCi1jb25maWcgQVJDSF9IQVNfSUxPRzJfVTMyCi0JZGVmX2Jvb2wgbgotCi1jb25maWcgQVJDSF9IQVNfSUxPRzJfVTY0Ci0JZGVmX2Jvb2wgbgotCiBjb25maWcgQVJDSF9IQVNfQ1BVX0lETEVfV0FJVAogCWRlZl9ib29sIHkKIApAQCAtMTUyLDkgKzE0Myw2IEBACiAJYm9vbAogCWRlZmF1bHQgWDg2XzY0CiAKLWNvbmZpZyBBUkNIX1NVUFBPUlRTX0FPVVQKLQlkZWZfYm9vbCB5Ci0KIGNvbmZpZyBBUkNIX1NVUFBPUlRTX09QVElNSVpFRF9JTkxJTklORwogCWRlZl9ib29sIHkKIApAQCAtMjA1LDYgKzE5Myw3IEBACiBjb25maWcgS1RJTUVfU0NBTEFSCiAJZGVmX2Jvb2wgWDg2XzMyCiBzb3VyY2UgImluaXQvS2NvbmZpZyIKK3NvdXJjZSAia2VybmVsL0tjb25maWcuZnJlZXplciIKIAogbWVudSAiUHJvY2Vzc29yIHR5cGUgYW5kIGZlYXR1cmVzIgogCkBAIC03NjAsOSArNzQ5LDggQEAKIAkgIFNheSBOIG90aGVyd2lzZS4KIAogY29uZmlnIFg4Nl9SRUJPT1RGSVhVUFMKLQlkZWZfYm9vbCBuCi0JcHJvbXB0ICJFbmFibGUgWDg2IGJvYXJkIHNwZWNpZmljIGZpeHVwcyBmb3IgcmVib290IgotCWRlcGVuZHMgb24gWDg2XzMyICYmIFg4NgorCWJvb2wgIkVuYWJsZSBYODYgYm9hcmQgc3BlY2lmaWMgZml4dXBzIGZvciByZWJvb3QiCisJZGVwZW5kcyBvbiBYODZfMzIKIAktLS1oZWxwLS0tCiAJICBUaGlzIGVuYWJsZXMgY2hpcHNldCBhbmQvb3IgYm9hcmQgc3BlY2lmaWMgZml4dXBzIHRvIGJlIGRvbmUKIAkgIGluIG9yZGVyIHRvIGdldCByZWJvb3QgdG8gd29yayBjb3JyZWN0bHkuIFRoaXMgaXMgb25seSBuZWVkZWQgb24KQEAgLTk0NiwxNiArOTM0LDE3IEBACiAJZGVwZW5kcyBvbiBYODZfMzIgJiYgKEhJR0hNRU02NEcgfHwgSElHSE1FTTRHKQogCiBjb25maWcgWDg2X1BBRQotCWRlZl9ib29sIG4KLQlwcm9tcHQgIlBBRSAoUGh5c2ljYWwgQWRkcmVzcyBFeHRlbnNpb24pIFN1cHBvcnQiCisJYm9vbCAiUEFFIChQaHlzaWNhbCBBZGRyZXNzIEV4dGVuc2lvbikgU3VwcG9ydCIKIAlkZXBlbmRzIG9uIFg4Nl8zMiAmJiAhSElHSE1FTTRHCi0Jc2VsZWN0IFJFU09VUkNFU182NEJJVAogCWhlbHAKIAkgIFBBRSBpcyByZXF1aXJlZCBmb3IgTlggc3VwcG9ydCwgYW5kIGZ1cnRoZXJtb3JlIGVuYWJsZXMKIAkgIGxhcmdlciBzd2Fwc3BhY2Ugc3VwcG9ydCBmb3Igbm9uLW92ZXJjb21taXQgcHVycG9zZXMuIEl0CiAJICBoYXMgdGhlIGNvc3Qgb2YgbW9yZSBwYWdldGFibGUgbG9va3VwIG92ZXJoZWFkLCBhbmQgYWxzbwogCSAgY29uc3VtZXMgbW9yZSBwYWdldGFibGUgc3BhY2UgcGVyIHByb2Nlc3MuCiAKK2NvbmZpZyBBUkNIX1BIWVNfQUREUl9UXzY0QklUCisgICAgICAgZGVmX2Jvb2wgWDg2XzY0IHx8IFg4Nl9QQUUKKwogIyBDb21tb24gTlVNQSBGZWF0dXJlcwogY29uZmlnIE5VTUEKIAlib29sICJOdW1hIE1lbW9yeSBBbGxvY2F0aW9uIGFuZCBTY2hlZHVsZXIgU3VwcG9ydCAoRVhQRVJJTUVOVEFMKSIKQEAgLTEyNDAsOCArMTIyOSw3IEBACiAJICBJZiB1bnN1cmUsIHNheSBZLgogCiBjb25maWcgRUZJCi0JZGVmX2Jvb2wgbgotCXByb21wdCAiRUZJIHJ1bnRpbWUgc2VydmljZSBzdXBwb3J0IgorCWJvb2wgIkVGSSBydW50aW1lIHNlcnZpY2Ugc3VwcG9ydCIKIAlkZXBlbmRzIG9uIEFDUEkKIAktLS1oZWxwLS0tCiAJVGhpcyBlbmFibGVzIHRoZSBrZXJuZWwgdG8gdXNlIEVGSSBydW50aW1lIHNlcnZpY2VzIHRoYXQgYXJlCkBAIC0xMjU0LDE0ICsxMjQyLDYgQEAKICAgCXJlc3VsdGFudCBrZXJuZWwgc2hvdWxkIGNvbnRpbnVlIHRvIGJvb3Qgb24gZXhpc3Rpbmcgbm9uLUVGSQogICAJcGxhdGZvcm1zLgogCi1jb25maWcgSVJRQkFMQU5DRQotCWRlZl9ib29sIHkKLQlwcm9tcHQgIkVuYWJsZSBrZXJuZWwgaXJxIGJhbGFuY2luZyIKLQlkZXBlbmRzIG9uIFg4Nl8zMiAmJiBTTVAgJiYgWDg2X0lPX0FQSUMKLQloZWxwCi0JICBUaGUgZGVmYXVsdCB5ZXMgd2lsbCBhbGxvdyB0aGUga2VybmVsIHRvIGRvIGlycSBsb2FkIGJhbGFuY2luZy4KLQkgIFNheWluZyBubyB3aWxsIGtlZXAgdGhlIGtlcm5lbCBmcm9tIGRvaW5nIGlycSBsb2FkIGJhbGFuY2luZy4KLQogY29uZmlnIFNFQ0NPTVAKIAlkZWZfYm9vbCB5CiAJcHJvbXB0ICJFbmFibGUgc2VjY29tcCB0byBzYWZlbHkgY29tcHV0ZSB1bnRydXN0ZWQgYnl0ZWNvZGUiCkBAIC0xODg1LDcgKzE4NjUsNyBAQAogCiBjb25maWcgSUEzMl9BT1VUCiAgICAgICAgdHJpc3RhdGUgIklBMzIgYS5vdXQgc3VwcG9ydCIKLSAgICAgICBkZXBlbmRzIG9uIElBMzJfRU1VTEFUSU9OICYmIEFSQ0hfU1VQUE9SVFNfQU9VVAorICAgICAgIGRlcGVuZHMgb24gSUEzMl9FTVVMQVRJT04KICAgICAgICBoZWxwCiAgICAgICAgICBTdXBwb3J0IG9sZCBhLm91dCBiaW5hcmllcyBpbiB0aGUgMzJiaXQgZW11bGF0aW9uLgogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9LY29uZmlnLmNwdSBiL2FyY2gveDg2L0tjb25maWcuY3B1CmluZGV4IGM1ZjEwMTMuLjBiN2M0YTMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L0tjb25maWcuY3B1CisrKyBiL2FyY2gveDg2L0tjb25maWcuY3B1CkBAIC0zOCw4ICszOCw3IEBACiAJICAtICJDcnVzb2UiIGZvciB0aGUgVHJhbnNtZXRhIENydXNvZSBzZXJpZXMuCiAJICAtICJFZmZpY2VvbiIgZm9yIHRoZSBUcmFuc21ldGEgRWZmaWNlb24gc2VyaWVzLgogCSAgLSAiV2luY2hpcC1DNiIgZm9yIG9yaWdpbmFsIElEVCBXaW5jaGlwLgotCSAgLSAiV2luY2hpcC0yIiBmb3IgSURUIFdpbmNoaXAgMi4KLQkgIC0gIldpbmNoaXAtMkEiIGZvciBJRFQgV2luY2hpcHMgd2l0aCAzZE5vdyEgY2FwYWJpbGl0aWVzLgorCSAgLSAiV2luY2hpcC0yIiBmb3IgSURUIFdpbmNoaXBzIHdpdGggM2ROb3chIGNhcGFiaWxpdGllcy4KIAkgIC0gIkdlb2RlR1gxIiBmb3IgR2VvZGUgR1gxIChDeXJpeCBNZWRpYUdYKS4KIAkgIC0gIkdlb2RlIEdYL0xYIiBGb3IgQU1EIEdlb2RlIEdYIGFuZCBMWCBwcm9jZXNzb3JzLgogCSAgLSAiQ3lyaXhJSUkvVklBIEMzIiBmb3IgVklBIEN5cml4IElJSSBvciBWSUEgQzMuCkBAIC0xOTQsMTkgKzE5MywxMSBAQAogCSAgdHJlYXQgdGhpcyBjaGlwIGFzIGEgNTg2VFNDIHdpdGggc29tZSBleHRlbmRlZCBpbnN0cnVjdGlvbnMKIAkgIGFuZCBhbGlnbm1lbnQgcmVxdWlyZW1lbnRzLgogCi1jb25maWcgTVdJTkNISVAyCi0JYm9vbCAiV2luY2hpcC0yIgotCWRlcGVuZHMgb24gWDg2XzMyCi0JaGVscAotCSAgU2VsZWN0IHRoaXMgZm9yIGFuIElEVCBXaW5jaGlwLTIuICBMaW51eCBhbmQgR0NDCi0JICB0cmVhdCB0aGlzIGNoaXAgYXMgYSA1ODZUU0Mgd2l0aCBzb21lIGV4dGVuZGVkIGluc3RydWN0aW9ucwotCSAgYW5kIGFsaWdubWVudCByZXF1aXJlbWVudHMuCi0KIGNvbmZpZyBNV0lOQ0hJUDNECi0JYm9vbCAiV2luY2hpcC0yQS9XaW5jaGlwLTMiCisJYm9vbCAiV2luY2hpcC0yL1dpbmNoaXAtMkEvV2luY2hpcC0zIgogCWRlcGVuZHMgb24gWDg2XzMyCiAJaGVscAotCSAgU2VsZWN0IHRoaXMgZm9yIGFuIElEVCBXaW5jaGlwLTJBIG9yIDMuICBMaW51eCBhbmQgR0NDCisJICBTZWxlY3QgdGhpcyBmb3IgYW4gSURUIFdpbmNoaXAtMiwgMkEgb3IgMy4gIExpbnV4IGFuZCBHQ0MKIAkgIHRyZWF0IHRoaXMgY2hpcCBhcyBhIDU4NlRTQyB3aXRoIHNvbWUgZXh0ZW5kZWQgaW5zdHJ1Y3Rpb25zCiAJICBhbmQgYWxpZ25tZW50IHJlcXVpcmVtZW50cy4gIEFsc28gZW5hYmxlIG91dCBvZiBvcmRlciBtZW1vcnkKIAkgIHN0b3JlcyBmb3IgdGhpcyBDUFUsIHdoaWNoIGNhbiBpbmNyZWFzZSBwZXJmb3JtYW5jZSBvZiBzb21lCkBAIC0zMTgsNyArMzA5LDcgQEAKIAlpbnQKIAlkZWZhdWx0ICI3IiBpZiBNUEVOVElVTTQgfHwgWDg2X0dFTkVSSUMgfHwgR0VORVJJQ19DUFUgfHwgTVBTQwogCWRlZmF1bHQgIjQiIGlmIFg4Nl9FTEFOIHx8IE00ODYgfHwgTTM4NiB8fCBNR0VPREVHWDEKLQlkZWZhdWx0ICI1IiBpZiBNV0lOQ0hJUDNEIHx8IE1XSU5DSElQMiB8fCBNV0lOQ0hJUEM2IHx8IE1DUlVTT0UgfHwgTUVGRklDRU9OIHx8IE1DWVJJWElJSSB8fCBNSzYgfHwgTVBFTlRJVU1JSUkgfHwgTVBFTlRJVU1JSSB8fCBNNjg2IHx8IE01ODZNTVggfHwgTTU4NlRTQyB8fCBNNTg2IHx8IE1WSUFDM18yIHx8IE1HRU9ERV9MWAorCWRlZmF1bHQgIjUiIGlmIE1XSU5DSElQM0QgfHwgTVdJTkNISVBDNiB8fCBNQ1JVU09FIHx8IE1FRkZJQ0VPTiB8fCBNQ1lSSVhJSUkgfHwgTUs2IHx8IE1QRU5USVVNSUlJIHx8IE1QRU5USVVNSUkgfHwgTTY4NiB8fCBNNTg2TU1YIHx8IE01ODZUU0MgfHwgTTU4NiB8fCBNVklBQzNfMiB8fCBNR0VPREVfTFgKIAlkZWZhdWx0ICI2IiBpZiBNSzcgfHwgTUs4IHx8IE1QRU5USVVNTSB8fCBNQ09SRTIgfHwgTVZJQUM3CiAKIGNvbmZpZyBYODZfWEFERApAQCAtMzYwLDcgKzM1MSw3IEBACiAKIGNvbmZpZyBYODZfQUxJR05NRU5UXzE2CiAJZGVmX2Jvb2wgeQotCWRlcGVuZHMgb24gTVdJTkNISVAzRCB8fCBNV0lOQ0hJUDIgfHwgTVdJTkNISVBDNiB8fCBNQ1lSSVhJSUkgfHwgWDg2X0VMQU4gfHwgTUs2IHx8IE01ODZNTVggfHwgTTU4NlRTQyB8fCBNNTg2IHx8IE00ODYgfHwgTVZJQUMzXzIgfHwgTUdFT0RFR1gxCisJZGVwZW5kcyBvbiBNV0lOQ0hJUDNEIHx8IE1XSU5DSElQQzYgfHwgTUNZUklYSUlJIHx8IFg4Nl9FTEFOIHx8IE1LNiB8fCBNNTg2TU1YIHx8IE01ODZUU0MgfHwgTTU4NiB8fCBNNDg2IHx8IE1WSUFDM18yIHx8IE1HRU9ERUdYMQogCiBjb25maWcgWDg2X0lOVEVMX1VTRVJDT1BZCiAJZGVmX2Jvb2wgeQpAQCAtMzY4LDcgKzM1OSw3IEBACiAKIGNvbmZpZyBYODZfVVNFX1BQUk9fQ0hFQ0tTVU0KIAlkZWZfYm9vbCB5Ci0JZGVwZW5kcyBvbiBNV0lOQ0hJUDNEIHx8IE1XSU5DSElQMiB8fCBNV0lOQ0hJUEM2IHx8IE1DWVJJWElJSSB8fCBNSzcgfHwgTUs2IHx8IE1QRU5USVVNNCB8fCBNUEVOVElVTU0gfHwgTVBFTlRJVU1JSUkgfHwgTVBFTlRJVU1JSSB8fCBNNjg2IHx8IE1LOCB8fCBNVklBQzNfMiB8fCBNRUZGSUNFT04gfHwgTUdFT0RFX0xYIHx8IE1DT1JFMgorCWRlcGVuZHMgb24gTVdJTkNISVAzRCB8fCBNV0lOQ0hJUEM2IHx8IE1DWVJJWElJSSB8fCBNSzcgfHwgTUs2IHx8IE1QRU5USVVNNCB8fCBNUEVOVElVTU0gfHwgTVBFTlRJVU1JSUkgfHwgTVBFTlRJVU1JSSB8fCBNNjg2IHx8IE1LOCB8fCBNVklBQzNfMiB8fCBNRUZGSUNFT04gfHwgTUdFT0RFX0xYIHx8IE1DT1JFMgogCiBjb25maWcgWDg2X1VTRV8zRE5PVwogCWRlZl9ib29sIHkKQEAgLTM3Niw3ICszNjcsNyBAQAogCiBjb25maWcgWDg2X09PU1RPUkUKIAlkZWZfYm9vbCB5Ci0JZGVwZW5kcyBvbiAoTVdJTkNISVAzRCB8fCBNV0lOQ0hJUDIgfHwgTVdJTkNISVBDNikgJiYgTVRSUgorCWRlcGVuZHMgb24gKE1XSU5DSElQM0QgfHwgTVdJTkNISVBDNikgJiYgTVRSUgogCiAjCiAjIFA2X05PUHMgYXJlIGEgcmVsYXRpdmVseSBtaW5vciBvcHRpbWl6YXRpb24gdGhhdCByZXF1aXJlIGEgZmFtaWx5ID49CkBAIC0zOTYsNyArMzg3LDcgQEAKIAogY29uZmlnIFg4Nl9UU0MKIAlkZWZfYm9vbCB5Ci0JZGVwZW5kcyBvbiAoKE1XSU5DSElQM0QgfHwgTVdJTkNISVAyIHx8IE1DUlVTT0UgfHwgTUVGRklDRU9OIHx8IE1DWVJJWElJSSB8fCBNSzcgfHwgTUs2IHx8IE1QRU5USVVNNCB8fCBNUEVOVElVTU0gfHwgTVBFTlRJVU1JSUkgfHwgTVBFTlRJVU1JSSB8fCBNNjg2IHx8IE01ODZNTVggfHwgTTU4NlRTQyB8fCBNSzggfHwgTVZJQUMzXzIgfHwgTVZJQUM3IHx8IE1HRU9ERUdYMSB8fCBNR0VPREVfTFggfHwgTUNPUkUyKSAmJiAhWDg2X05VTUFRKSB8fCBYODZfNjQKKwlkZXBlbmRzIG9uICgoTVdJTkNISVAzRCB8fCBNQ1JVU09FIHx8IE1FRkZJQ0VPTiB8fCBNQ1lSSVhJSUkgfHwgTUs3IHx8IE1LNiB8fCBNUEVOVElVTTQgfHwgTVBFTlRJVU1NIHx8IE1QRU5USVVNSUlJIHx8IE1QRU5USVVNSUkgfHwgTTY4NiB8fCBNNTg2TU1YIHx8IE01ODZUU0MgfHwgTUs4IHx8IE1WSUFDM18yIHx8IE1WSUFDNyB8fCBNR0VPREVHWDEgfHwgTUdFT0RFX0xYIHx8IE1DT1JFMikgJiYgIVg4Nl9OVU1BUSkgfHwgWDg2XzY0CiAKIGNvbmZpZyBYODZfQ01QWENIRzY0CiAJZGVmX2Jvb2wgeQpAQCAtNDA2LDcgKzM5Nyw3IEBACiAjIGdlbmVyYXRlcyBjbW92LgogY29uZmlnIFg4Nl9DTU9WCiAJZGVmX2Jvb2wgeQotCWRlcGVuZHMgb24gKE1LNyB8fCBNUEVOVElVTTQgfHwgTVBFTlRJVU1NIHx8IE1QRU5USVVNSUlJIHx8IE1QRU5USVVNSUkgfHwgTTY4NiB8fCBNVklBQzNfMiB8fCBNVklBQzcgfHwgWDg2XzY0KQorCWRlcGVuZHMgb24gKE1LOCB8fCBNSzcgfHwgTUNPUkUyIHx8IE1QRU5USVVNNCB8fCBNUEVOVElVTU0gfHwgTVBFTlRJVU1JSUkgfHwgTVBFTlRJVU1JSSB8fCBNNjg2IHx8IE1WSUFDM18yIHx8IE1WSUFDNyB8fCBNQ1JVU09FIHx8IE1FRkZJQ0VPTiB8fCBYODZfNjQpCiAKIGNvbmZpZyBYODZfTUlOSU1VTV9DUFVfRkFNSUxZCiAJaW50CkBAIC00MTcsNyArNDA4LDcgQEAKIAogY29uZmlnIFg4Nl9ERUJVR0NUTE1TUgogCWRlZl9ib29sIHkKLQlkZXBlbmRzIG9uICEoTUs2IHx8IE1XSU5DSElQQzYgfHwgTVdJTkNISVAyIHx8IE1XSU5DSElQM0QgfHwgTUNZUklYSUlJIHx8IE01ODZNTVggfHwgTTU4NlRTQyB8fCBNNTg2IHx8IE00ODYgfHwgTTM4NikKKwlkZXBlbmRzIG9uICEoTUs2IHx8IE1XSU5DSElQQzYgfHwgTVdJTkNISVAzRCB8fCBNQ1lSSVhJSUkgfHwgTTU4Nk1NWCB8fCBNNTg2VFNDIHx8IE01ODYgfHwgTTQ4NiB8fCBNMzg2KQogCiBtZW51Y29uZmlnIFBST0NFU1NPUl9TRUxFQ1QKIAlib29sICJTdXBwb3J0ZWQgcHJvY2Vzc29yIHZlbmRvcnMiIGlmIEVNQkVEREVECmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9NYWtlZmlsZV8zMi5jcHUgYi9hcmNoL3g4Ni9NYWtlZmlsZV8zMi5jcHUKaW5kZXggYjcyYjRmNzUuLjgwMTc3ZWMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L01ha2VmaWxlXzMyLmNwdQorKysgYi9hcmNoL3g4Ni9NYWtlZmlsZV8zMi5jcHUKQEAgLTI4LDcgKzI4LDYgQEAKIGNmbGFncy0kKENPTkZJR19NQ1JVU09FKQkrPSAtbWFyY2g9aTY4NiAkKGFsaWduKS1mdW5jdGlvbnM9MCAkKGFsaWduKS1qdW1wcz0wICQoYWxpZ24pLWxvb3BzPTAKIGNmbGFncy0kKENPTkZJR19NRUZGSUNFT04pCSs9IC1tYXJjaD1pNjg2ICQoY2FsbCB0dW5lLHBlbnRpdW0zKSAkKGFsaWduKS1mdW5jdGlvbnM9MCAkKGFsaWduKS1qdW1wcz0wICQoYWxpZ24pLWxvb3BzPTAKIGNmbGFncy0kKENPTkZJR19NV0lOQ0hJUEM2KQkrPSAkKGNhbGwgY2Mtb3B0aW9uLC1tYXJjaD13aW5jaGlwLWM2LC1tYXJjaD1pNTg2KQotY2ZsYWdzLSQoQ09ORklHX01XSU5DSElQMikJKz0gJChjYWxsIGNjLW9wdGlvbiwtbWFyY2g9d2luY2hpcDIsLW1hcmNoPWk1ODYpCiBjZmxhZ3MtJChDT05GSUdfTVdJTkNISVAzRCkJKz0gJChjYWxsIGNjLW9wdGlvbiwtbWFyY2g9d2luY2hpcDIsLW1hcmNoPWk1ODYpCiBjZmxhZ3MtJChDT05GSUdfTUNZUklYSUlJKQkrPSAkKGNhbGwgY2Mtb3B0aW9uLC1tYXJjaD1jMywtbWFyY2g9aTQ4NikgJChhbGlnbiktZnVuY3Rpb25zPTAgJChhbGlnbiktanVtcHM9MCAkKGFsaWduKS1sb29wcz0wCiBjZmxhZ3MtJChDT05GSUdfTVZJQUMzXzIpCSs9ICQoY2FsbCBjYy1vcHRpb24sLW1hcmNoPWMzLTIsLW1hcmNoPWk2ODYpCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9ib290L3ZpZGVvLXZlc2EuYyBiL2FyY2gveDg2L2Jvb3QvdmlkZW8tdmVzYS5jCmluZGV4IDFlNmZlMDIuLjk5YjMwNzkgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2Jvb3QvdmlkZW8tdmVzYS5jCisrKyBiL2FyY2gveDg2L2Jvb3QvdmlkZW8tdmVzYS5jCkBAIC04OCwxNCArODgsMTEgQEAKIAkJCSAgICh2bWluZm8ubWVtb3J5X2xheW91dCA9PSA0IHx8CiAJCQkgICAgdm1pbmZvLm1lbW9yeV9sYXlvdXQgPT0gNikgJiYKIAkJCSAgIHZtaW5mby5tZW1vcnlfcGxhbmVzID09IDEpIHsKLSNpZmRlZiBDT05GSUdfRkIKKyNpZmRlZiBDT05GSUdfRkJfQk9PVF9WRVNBX1NVUFBPUlQKIAkJCS8qIEdyYXBoaWNzIG1vZGUsIGNvbG9yLCBsaW5lYXIgZnJhbWUgYnVmZmVyCiAJCQkgICBzdXBwb3J0ZWQuICBPbmx5IHJlZ2lzdGVyIHRoZSBtb2RlIGlmCiAJCQkgICBpZiBmcmFtZWJ1ZmZlciBpcyBjb25maWd1cmVkLCBob3dldmVyLAotCQkJICAgb3RoZXJ3aXNlIHRoZSB1c2VyIHdpbGwgYmUgbGVmdCB3aXRob3V0IGEgc2NyZWVuLgotCQkJICAgV2UgZG9uJ3QgcmVxdWlyZSBDT05GSUdfRkJfVkVTQSwgaG93ZXZlciwgc2luY2UKLQkJCSAgIHNvbWUgb2YgdGhlIG90aGVyIGZyYW1lYnVmZmVyIGRyaXZlcnMgY2FuIHVzZQotCQkJICAgdGhpcyBtb2RlLXNldHRpbmcsIHRvby4gKi8KKwkJCSAgIG90aGVyd2lzZSB0aGUgdXNlciB3aWxsIGJlIGxlZnQgd2l0aG91dCBhIHNjcmVlbi4gKi8KIAkJCW1pID0gR0VUX0hFQVAoc3RydWN0IG1vZGVfaW5mbywgMSk7CiAJCQltaS0+bW9kZSA9IG1vZGUgKyBWSURFT19GSVJTVF9WRVNBOwogCQkJbWktPmRlcHRoID0gdm1pbmZvLmJwcDsKQEAgLTEzMywxMCArMTMwLDEyIEBACiAJaWYgKCh2bWluZm8ubW9kZV9hdHRyICYgMHgxNSkgPT0gMHgwNSkgewogCQkvKiBJdCdzIGEgc3VwcG9ydGVkIHRleHQgbW9kZSAqLwogCQlpc19ncmFwaGljID0gMDsKKyNpZmRlZiBDT05GSUdfRkJfQk9PVF9WRVNBX1NVUFBPUlQKIAl9IGVsc2UgaWYgKCh2bWluZm8ubW9kZV9hdHRyICYgMHg5OSkgPT0gMHg5OSkgewogCQkvKiBJdCdzIGEgZ3JhcGhpY3MgbW9kZSB3aXRoIGxpbmVhciBmcmFtZSBidWZmZXIgKi8KIAkJaXNfZ3JhcGhpYyA9IDE7CiAJCXZlc2FfbW9kZSB8PSAweDQwMDA7IC8qIFJlcXVlc3QgbGluZWFyIGZyYW1lIGJ1ZmZlciAqLworI2VuZGlmCiAJfSBlbHNlIHsKIAkJcmV0dXJuIC0xOwkvKiBJbnZhbGlkIG1vZGUgKi8KIAl9CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9jb25maWdzL2kzODZfZGVmY29uZmlnIGIvYXJjaC94ODYvY29uZmlncy9pMzg2X2RlZmNvbmZpZwppbmRleCBjYTIyNmNhLi4xM2I4Yzg2IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9jb25maWdzL2kzODZfZGVmY29uZmlnCisrKyBiL2FyY2gveDg2L2NvbmZpZ3MvaTM4Nl9kZWZjb25maWcKQEAgLTIxMyw3ICsyMTMsNiBAQAogIyBDT05GSUdfTUNSVVNPRSBpcyBub3Qgc2V0CiAjIENPTkZJR19NRUZGSUNFT04gaXMgbm90IHNldAogIyBDT05GSUdfTVdJTkNISVBDNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NV0lOQ0hJUDIgaXMgbm90IHNldAogIyBDT05GSUdfTVdJTkNISVAzRCBpcyBub3Qgc2V0CiAjIENPTkZJR19NR0VPREVHWDEgaXMgbm90IHNldAogIyBDT05GSUdfTUdFT0RFX0xYIGlzIG5vdCBzZXQKQEAgLTI4OCw3ICsyODcsNiBAQAogIyBDT05GSUdfTVRSUl9TQU5JVElaRVIgaXMgbm90IHNldAogQ09ORklHX1g4Nl9QQVQ9eQogQ09ORklHX0VGST15Ci0jIENPTkZJR19JUlFCQUxBTkNFIGlzIG5vdCBzZXQKIENPTkZJR19TRUNDT01QPXkKICMgQ09ORklHX0haXzEwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19IWl8yNTAgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvY29uZmlncy94ODZfNjRfZGVmY29uZmlnIGIvYXJjaC94ODYvY29uZmlncy94ODZfNjRfZGVmY29uZmlnCmluZGV4IDJjNGIxYzcuLmYwYTAzZDcgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2NvbmZpZ3MveDg2XzY0X2RlZmNvbmZpZworKysgYi9hcmNoL3g4Ni9jb25maWdzL3g4Nl82NF9kZWZjb25maWcKQEAgLTIxMCw3ICsyMTAsNiBAQAogIyBDT05GSUdfTUNSVVNPRSBpcyBub3Qgc2V0CiAjIENPTkZJR19NRUZGSUNFT04gaXMgbm90IHNldAogIyBDT05GSUdfTVdJTkNISVBDNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NV0lOQ0hJUDIgaXMgbm90IHNldAogIyBDT05GSUdfTVdJTkNISVAzRCBpcyBub3Qgc2V0CiAjIENPTkZJR19NR0VPREVHWDEgaXMgbm90IHNldAogIyBDT05GSUdfTUdFT0RFX0xYIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2lhMzIvaWEzMmVudHJ5LlMgYi9hcmNoL3g4Ni9pYTMyL2lhMzJlbnRyeS5TCmluZGV4IGZmYzFiYjQuLjI1NmIwMGIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2lhMzIvaWEzMmVudHJ5LlMKKysrIGIvYXJjaC94ODYvaWEzMi9pYTMyZW50cnkuUwpAQCAtMzksMTEgKzM5LDExIEBACiAJLmVuZG0gCiAKIAkvKiBjbG9iYmVycyAlZWF4ICovCQotCS5tYWNybyAgQ0xFQVJfUlJFR1MKKwkubWFjcm8gIENMRUFSX1JSRUdTIF9yOT1yYXgKIAl4b3JsIAklZWF4LCVlYXgKIAltb3ZxCSVyYXgsUjExKCVyc3ApCiAJbW92cQklcmF4LFIxMCglcnNwKQotCW1vdnEJJXJheCxSOSglcnNwKQorCW1vdnEJJVxfcjksUjkoJXJzcCkKIAltb3ZxCSVyYXgsUjgoJXJzcCkKIAkuZW5kbQogCkBAIC01MiwxMSArNTIsMTAgQEAKIAkgKiBXZSBkb24ndCByZWxvYWQgJWVheCBiZWNhdXNlIHN5c2NhbGxfdHJhY2VfZW50ZXIoKSByZXR1cm5lZAogCSAqIHRoZSB2YWx1ZSBpdCB3YW50cyB1cyB0byB1c2UgaW4gdGhlIHRhYmxlIGxvb2t1cC4KIAkgKi8KLQkubWFjcm8gTE9BRF9BUkdTMzIgb2Zmc2V0Ci0JbW92bCBcb2Zmc2V0KCVyc3ApLCVyMTFkCi0JbW92bCBcb2Zmc2V0KzgoJXJzcCksJXIxMGQKKwkubWFjcm8gTE9BRF9BUkdTMzIgb2Zmc2V0LCBfcjk9MAorCS5pZiBcX3I5CiAJbW92bCBcb2Zmc2V0KzE2KCVyc3ApLCVyOWQKLQltb3ZsIFxvZmZzZXQrMjQoJXJzcCksJXI4ZAorCS5lbmRpZgogCW1vdmwgXG9mZnNldCs0MCglcnNwKSwlZWN4CiAJbW92bCBcb2Zmc2V0KzQ4KCVyc3ApLCVlZHgKIAltb3ZsIFxvZmZzZXQrNTYoJXJzcCksJWVzaQpAQCAtMTQ1LDcgKzE0NCw3IEBACiAJU0FWRV9BUkdTIDAsMCwxCiAgCS8qIG5vIG5lZWQgdG8gZG8gYW4gYWNjZXNzX29rIGNoZWNrIGhlcmUgYmVjYXVzZSByYnAgaGFzIGJlZW4KICAJICAgMzJiaXQgemVybyBleHRlbmRlZCAqLyAKLTE6CW1vdmwJKCVyYnApLCVyOWQKKzE6CW1vdmwJKCVyYnApLCVlYnAKICAJLnNlY3Rpb24gX19leF90YWJsZSwiYSIKICAJLnF1YWQgMWIsaWEzMl9iYWRhcmcKICAJLnByZXZpb3VzCQpAQCAtMTU3LDcgKzE1Niw3IEBACiAJY21wbAkkKElBMzJfTlJfc3lzY2FsbHMtMSksJWVheAogCWphCWlhMzJfYmFkc3lzCiBzeXNlbnRlcl9kb19jYWxsOgotCUlBMzJfQVJHX0ZJWFVQIDEKKwlJQTMyX0FSR19GSVhVUAogc3lzZW50ZXJfZGlzcGF0Y2g6CiAJY2FsbAkqaWEzMl9zeXNfY2FsbF90YWJsZSgsJXJheCw4KQogCW1vdnEJJXJheCxSQVgtQVJHT0ZGU0VUKCVyc3ApCkBAIC0yMzQsMjAgKzIzMywxNyBAQAogI2VuZGlmCiAKIHN5c2VudGVyX3RyYWNlc3lzOgotCXhjaGdsCSVyOWQsJWVicAogI2lmZGVmIENPTkZJR19BVURJVFNZU0NBTEwKIAl0ZXN0bAkkKF9USUZfV09SS19TWVNDQUxMX0VOVFJZICYgfl9USUZfU1lTQ0FMTF9BVURJVCksVElfZmxhZ3MoJXIxMCkKIAlqeglzeXNlbnRlcl9hdWRpdHN5cwogI2VuZGlmCiAJU0FWRV9SRVNUCiAJQ0xFQVJfUlJFR1MKLQltb3ZxCSVyOSxSOSglcnNwKQogCW1vdnEJJC1FTk9TWVMsUkFYKCVyc3ApLyogcHRyYWNlIGNhbiBjaGFuZ2UgdGhpcyBmb3IgYSBiYWQgc3lzY2FsbCAqLwogCW1vdnEJJXJzcCwlcmRpICAgICAgICAvKiAmcHRfcmVncyAtPiBhcmcxICovCiAJY2FsbAlzeXNjYWxsX3RyYWNlX2VudGVyCiAJTE9BRF9BUkdTMzIgQVJHT0ZGU0VUICAvKiByZWxvYWQgYXJncyBmcm9tIHN0YWNrIGluIGNhc2UgcHRyYWNlIGNoYW5nZWQgaXQgKi8KIAlSRVNUT1JFX1JFU1QKLQl4Y2hnbAklZWJwLCVyOWQKIAljbXBsCSQoSUEzMl9OUl9zeXNjYWxscy0xKSwlZWF4CiAJamEJaW50X3JldF9mcm9tX3N5c19jYWxsIC8qIHN5c2VudGVyX3RyYWNlc3lzIGhhcyBzZXQgUkFYKCVyc3ApICovCiAJam1wCXN5c2VudGVyX2RvX2NhbGwKQEAgLTMxNCw5ICszMTAsOSBAQAogCXRlc3RsICRfVElGX1dPUktfU1lTQ0FMTF9FTlRSWSxUSV9mbGFncyglcjEwKQogCUNGSV9SRU1FTUJFUl9TVEFURQogCWpueiAgIGNzdGFyX3RyYWNlc3lzCi1jc3Rhcl9kb19jYWxsOgkKIAljbXBsICRJQTMyX05SX3N5c2NhbGxzLTEsJWVheAogCWphICBpYTMyX2JhZHN5cworY3N0YXJfZG9fY2FsbDoKIAlJQTMyX0FSR19GSVhVUCAxCiBjc3Rhcl9kaXNwYXRjaDoKIAljYWxsICppYTMyX3N5c19jYWxsX3RhYmxlKCwlcmF4LDgpCkBAIC0zNTcsMTUgKzM1MywxMyBAQAogI2VuZGlmCiAJeGNoZ2wgJXI5ZCwlZWJwCiAJU0FWRV9SRVNUCi0JQ0xFQVJfUlJFR1MKLQltb3ZxICVyOSxSOSglcnNwKQorCUNMRUFSX1JSRUdTIHI5CiAJbW92cSAkLUVOT1NZUyxSQVgoJXJzcCkJLyogcHRyYWNlIGNhbiBjaGFuZ2UgdGhpcyBmb3IgYSBiYWQgc3lzY2FsbCAqLwogCW1vdnEgJXJzcCwlcmRpICAgICAgICAvKiAmcHRfcmVncyAtPiBhcmcxICovCiAJY2FsbCBzeXNjYWxsX3RyYWNlX2VudGVyCi0JTE9BRF9BUkdTMzIgQVJHT0ZGU0VUICAvKiByZWxvYWQgYXJncyBmcm9tIHN0YWNrIGluIGNhc2UgcHRyYWNlIGNoYW5nZWQgaXQgKi8KKwlMT0FEX0FSR1MzMiBBUkdPRkZTRVQsIDEgIC8qIHJlbG9hZCBhcmdzIGZyb20gc3RhY2sgaW4gY2FzZSBwdHJhY2UgY2hhbmdlZCBpdCAqLwogCVJFU1RPUkVfUkVTVAogCXhjaGdsICVlYnAsJXI5ZAotCW1vdmwgUlNQLUFSR09GRlNFVCglcnNwKSwgJXI4ZAogCWNtcGwgJChJQTMyX05SX3N5c2NhbGxzLTEpLCVlYXgKIAlqYSBpbnRfcmV0X2Zyb21fc3lzX2NhbGwgLyogY3N0YXJfdHJhY2VzeXMgaGFzIHNldCBSQVgoJXJzcCkgKi8KIAlqbXAgY3N0YXJfZG9fY2FsbApAQCAtNTc3LDggKzU3MSw4IEBACiAJLnF1YWQgY29tcGF0X3N5c19zZXRybGltaXQJLyogNzUgKi8KIAkucXVhZCBjb21wYXRfc3lzX29sZF9nZXRybGltaXQJLyogb2xkX2dldHJsaW1pdCAqLwogCS5xdWFkIGNvbXBhdF9zeXNfZ2V0cnVzYWdlCi0JLnF1YWQgc3lzMzJfZ2V0dGltZW9mZGF5Ci0JLnF1YWQgc3lzMzJfc2V0dGltZW9mZGF5CisJLnF1YWQgY29tcGF0X3N5c19nZXR0aW1lb2ZkYXkKKwkucXVhZCBjb21wYXRfc3lzX3NldHRpbWVvZmRheQogCS5xdWFkIHN5c19nZXRncm91cHMxNgkvKiA4MCAqLwogCS5xdWFkIHN5c19zZXRncm91cHMxNgogCS5xdWFkIHN5czMyX29sZF9zZWxlY3QKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2lhMzIvc3lzX2lhMzIuYyBiL2FyY2gveDg2L2lhMzIvc3lzX2lhMzIuYwppbmRleCBiZWRhNDIzLi4yZTA5ZGNkIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pYTMyL3N5c19pYTMyLmMKKysrIGIvYXJjaC94ODYvaWEzMi9zeXNfaWEzMi5jCkBAIC00OSw0MSArNDksNiBAQAogCiAjZGVmaW5lIEFBKF9feCkJCSgodW5zaWduZWQgbG9uZykoX194KSkKIAotaW50IGNwX2NvbXBhdF9zdGF0KHN0cnVjdCBrc3RhdCAqa2J1Ziwgc3RydWN0IGNvbXBhdF9zdGF0IF9fdXNlciAqdWJ1ZikKLXsKLQljb21wYXRfaW5vX3QgaW5vOwotCi0JdHlwZW9mKHVidWYtPnN0X3VpZCkgdWlkID0gMDsKLQl0eXBlb2YodWJ1Zi0+c3RfZ2lkKSBnaWQgPSAwOwotCVNFVF9VSUQodWlkLCBrYnVmLT51aWQpOwotCVNFVF9HSUQoZ2lkLCBrYnVmLT5naWQpOwotCWlmICghb2xkX3ZhbGlkX2RldihrYnVmLT5kZXYpIHx8ICFvbGRfdmFsaWRfZGV2KGtidWYtPnJkZXYpKQotCQlyZXR1cm4gLUVPVkVSRkxPVzsKLQlpZiAoa2J1Zi0+c2l6ZSA+PSAweDdmZmZmZmZmKQotCQlyZXR1cm4gLUVPVkVSRkxPVzsKLQlpbm8gPSBrYnVmLT5pbm87Ci0JaWYgKHNpemVvZihpbm8pIDwgc2l6ZW9mKGtidWYtPmlubykgJiYgaW5vICE9IGtidWYtPmlubykKLQkJcmV0dXJuIC1FT1ZFUkZMT1c7Ci0JaWYgKCFhY2Nlc3Nfb2soVkVSSUZZX1dSSVRFLCB1YnVmLCBzaXplb2Yoc3RydWN0IGNvbXBhdF9zdGF0KSkgfHwKLQkgICAgX19wdXRfdXNlcihvbGRfZW5jb2RlX2RldihrYnVmLT5kZXYpLCAmdWJ1Zi0+c3RfZGV2KSB8fAotCSAgICBfX3B1dF91c2VyKGlubywgJnVidWYtPnN0X2lubykgfHwKLQkgICAgX19wdXRfdXNlcihrYnVmLT5tb2RlLCAmdWJ1Zi0+c3RfbW9kZSkgfHwKLQkgICAgX19wdXRfdXNlcihrYnVmLT5ubGluaywgJnVidWYtPnN0X25saW5rKSB8fAotCSAgICBfX3B1dF91c2VyKHVpZCwgJnVidWYtPnN0X3VpZCkgfHwKLQkgICAgX19wdXRfdXNlcihnaWQsICZ1YnVmLT5zdF9naWQpIHx8Ci0JICAgIF9fcHV0X3VzZXIob2xkX2VuY29kZV9kZXYoa2J1Zi0+cmRldiksICZ1YnVmLT5zdF9yZGV2KSB8fAotCSAgICBfX3B1dF91c2VyKGtidWYtPnNpemUsICZ1YnVmLT5zdF9zaXplKSB8fAotCSAgICBfX3B1dF91c2VyKGtidWYtPmF0aW1lLnR2X3NlYywgJnVidWYtPnN0X2F0aW1lKSB8fAotCSAgICBfX3B1dF91c2VyKGtidWYtPmF0aW1lLnR2X25zZWMsICZ1YnVmLT5zdF9hdGltZV9uc2VjKSB8fAotCSAgICBfX3B1dF91c2VyKGtidWYtPm10aW1lLnR2X3NlYywgJnVidWYtPnN0X210aW1lKSB8fAotCSAgICBfX3B1dF91c2VyKGtidWYtPm10aW1lLnR2X25zZWMsICZ1YnVmLT5zdF9tdGltZV9uc2VjKSB8fAotCSAgICBfX3B1dF91c2VyKGtidWYtPmN0aW1lLnR2X3NlYywgJnVidWYtPnN0X2N0aW1lKSB8fAotCSAgICBfX3B1dF91c2VyKGtidWYtPmN0aW1lLnR2X25zZWMsICZ1YnVmLT5zdF9jdGltZV9uc2VjKSB8fAotCSAgICBfX3B1dF91c2VyKGtidWYtPmJsa3NpemUsICZ1YnVmLT5zdF9ibGtzaXplKSB8fAotCSAgICBfX3B1dF91c2VyKGtidWYtPmJsb2NrcywgJnVidWYtPnN0X2Jsb2NrcykpCi0JCXJldHVybiAtRUZBVUxUOwotCXJldHVybiAwOwotfQogCiBhc21saW5rYWdlIGxvbmcgc3lzMzJfdHJ1bmNhdGU2NChjaGFyIF9fdXNlciAqZmlsZW5hbWUsCiAJCQkJIHVuc2lnbmVkIGxvbmcgb2Zmc2V0X2xvdywKQEAgLTQwMiw3NSArMzY3LDExIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbmxpbmUgbG9uZyBnZXRfdHYzMihzdHJ1Y3QgdGltZXZhbCAqbywgc3RydWN0IGNvbXBhdF90aW1ldmFsIF9fdXNlciAqaSkKLXsKLQlpbnQgZXJyID0gLUVGQVVMVDsKLQotCWlmIChhY2Nlc3Nfb2soVkVSSUZZX1JFQUQsIGksIHNpemVvZigqaSkpKSB7Ci0JCWVyciA9IF9fZ2V0X3VzZXIoby0+dHZfc2VjLCAmaS0+dHZfc2VjKTsKLQkJZXJyIHw9IF9fZ2V0X3VzZXIoby0+dHZfdXNlYywgJmktPnR2X3VzZWMpOwotCX0KLQlyZXR1cm4gZXJyOwotfQotCi1zdGF0aWMgaW5saW5lIGxvbmcgcHV0X3R2MzIoc3RydWN0IGNvbXBhdF90aW1ldmFsIF9fdXNlciAqbywgc3RydWN0IHRpbWV2YWwgKmkpCi17Ci0JaW50IGVyciA9IC1FRkFVTFQ7Ci0KLQlpZiAoYWNjZXNzX29rKFZFUklGWV9XUklURSwgbywgc2l6ZW9mKCpvKSkpIHsKLQkJZXJyID0gX19wdXRfdXNlcihpLT50dl9zZWMsICZvLT50dl9zZWMpOwotCQllcnIgfD0gX19wdXRfdXNlcihpLT50dl91c2VjLCAmby0+dHZfdXNlYyk7Ci0JfQotCXJldHVybiBlcnI7Ci19Ci0KIGFzbWxpbmthZ2UgbG9uZyBzeXMzMl9hbGFybSh1bnNpZ25lZCBpbnQgc2Vjb25kcykKIHsKIAlyZXR1cm4gYWxhcm1fc2V0aXRpbWVyKHNlY29uZHMpOwogfQogCi0vKgotICogVHJhbnNsYXRpb25zIGR1ZSB0byB0aW1lX3Qgc2l6ZSBkaWZmZXJlbmNlcy4gV2hpY2ggYWZmZWN0cyBhbGwKLSAqIHNvcnRzIG9mIHRoaW5ncywgbGlrZSB0aW1ldmFsIGFuZCBpdGltZXJ2YWwuCi0gKi8KLWFzbWxpbmthZ2UgbG9uZyBzeXMzMl9nZXR0aW1lb2ZkYXkoc3RydWN0IGNvbXBhdF90aW1ldmFsIF9fdXNlciAqdHYsCi0JCQkJICAgc3RydWN0IHRpbWV6b25lIF9fdXNlciAqdHopCi17Ci0JaWYgKHR2KSB7Ci0JCXN0cnVjdCB0aW1ldmFsIGt0djsKLQotCQlkb19nZXR0aW1lb2ZkYXkoJmt0dik7Ci0JCWlmIChwdXRfdHYzMih0diwgJmt0dikpCi0JCQlyZXR1cm4gLUVGQVVMVDsKLQl9Ci0JaWYgKHR6KSB7Ci0JCWlmIChjb3B5X3RvX3VzZXIodHosICZzeXNfdHosIHNpemVvZihzeXNfdHopKSkKLQkJCXJldHVybiAtRUZBVUxUOwotCX0KLQlyZXR1cm4gMDsKLX0KLQotYXNtbGlua2FnZSBsb25nIHN5czMyX3NldHRpbWVvZmRheShzdHJ1Y3QgY29tcGF0X3RpbWV2YWwgX191c2VyICp0diwKLQkJCQkgICBzdHJ1Y3QgdGltZXpvbmUgX191c2VyICp0eikKLXsKLQlzdHJ1Y3QgdGltZXZhbCBrdHY7Ci0Jc3RydWN0IHRpbWVzcGVjIGt0czsKLQlzdHJ1Y3QgdGltZXpvbmUga3R6OwotCi0JaWYgKHR2KSB7Ci0JCWlmIChnZXRfdHYzMigma3R2LCB0dikpCi0JCQlyZXR1cm4gLUVGQVVMVDsKLQkJa3RzLnR2X3NlYyA9IGt0di50dl9zZWM7Ci0JCWt0cy50dl9uc2VjID0ga3R2LnR2X3VzZWMgKiBOU0VDX1BFUl9VU0VDOwotCX0KLQlpZiAodHopIHsKLQkJaWYgKGNvcHlfZnJvbV91c2VyKCZrdHosIHR6LCBzaXplb2Yoa3R6KSkpCi0JCQlyZXR1cm4gLUVGQVVMVDsKLQl9Ci0KLQlyZXR1cm4gZG9fc3lzX3NldHRpbWVvZmRheSh0diA/ICZrdHMgOiBOVUxMLCB0eiA/ICZrdHogOiBOVUxMKTsKLX0KLQogc3RydWN0IHNlbF9hcmdfc3RydWN0IHsKIAl1bnNpZ25lZCBpbnQgbjsKIAl1bnNpZ25lZCBpbnQgaW5wOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL01ha2VmaWxlIGIvYXJjaC94ODYva2VybmVsL01ha2VmaWxlCmluZGV4IDUwOTg1ODUuLmQ3ZTVhNTggMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9NYWtlZmlsZQorKysgYi9hcmNoL3g4Ni9rZXJuZWwvTWFrZWZpbGUKQEAgLTIzLDcgKzIzLDcgQEAKIENGTEFHU190c2MubwkJOj0gJChub3N0YWNrcCkKIAogb2JqLXkJCQk6PSBwcm9jZXNzXyQoQklUUykubyBzaWduYWxfJChCSVRTKS5vIGVudHJ5XyQoQklUUykubwotb2JqLXkJCQkrPSB0cmFwc18kKEJJVFMpLm8gaXJxXyQoQklUUykubworb2JqLXkJCQkrPSB0cmFwcy5vIGlycS5vIGlycV8kKEJJVFMpLm8gZHVtcHN0YWNrXyQoQklUUykubwogb2JqLXkJCQkrPSB0aW1lXyQoQklUUykubyBpb3BvcnQubyBsZHQubwogb2JqLXkJCQkrPSBzZXR1cC5vIGk4MjU5Lm8gaXJxaW5pdF8kKEJJVFMpLm8gc2V0dXBfcGVyY3B1Lm8KIG9iai0kKENPTkZJR19YODZfVklTV1MpCSs9IHZpc3dzX3F1aXJrcy5vCkBAIC02MCw4ICs2MCw4IEBACiBvYmotJChDT05GSUdfWDg2XzY0X1NNUCkJKz0gdHNjX3N5bmMubyBzbXBjb21tb24ubwogb2JqLSQoQ09ORklHX1g4Nl9UUkFNUE9MSU5FKQkrPSB0cmFtcG9saW5lXyQoQklUUykubwogb2JqLSQoQ09ORklHX1g4Nl9NUFBBUlNFKQkrPSBtcHBhcnNlLm8KLW9iai0kKENPTkZJR19YODZfTE9DQUxfQVBJQykJKz0gYXBpY18kKEJJVFMpLm8gbm1pLm8KLW9iai0kKENPTkZJR19YODZfSU9fQVBJQykJKz0gaW9fYXBpY18kKEJJVFMpLm8KK29iai0kKENPTkZJR19YODZfTE9DQUxfQVBJQykJKz0gYXBpYy5vIG5taS5vCitvYmotJChDT05GSUdfWDg2X0lPX0FQSUMpCSs9IGlvX2FwaWMubwogb2JqLSQoQ09ORklHX1g4Nl9SRUJPT1RGSVhVUFMpCSs9IHJlYm9vdF9maXh1cHNfMzIubwogb2JqLSQoQ09ORklHX0RZTkFNSUNfRlRSQUNFKQkrPSBmdHJhY2Uubwogb2JqLSQoQ09ORklHX0tFWEVDKQkJKz0gbWFjaGluZV9rZXhlY18kKEJJVFMpLm8KQEAgLTEwOCw3ICsxMDgsNyBAQAogIyA2NCBiaXQgc3BlY2lmaWMgZmlsZXMKIGlmZXEgKCQoQ09ORklHX1g4Nl82NCkseSkKICAgICAgICAgb2JqLXkJCQkJKz0gZ2VuYXBpY182NC5vIGdlbmFwaWNfZmxhdF82NC5vIGdlbngyYXBpY191dl94Lm8gdGxiX3V2Lm8KLQlvYmoteQkJCQkrPSBiaW9zX3V2Lm8KKwlvYmoteQkJCQkrPSBiaW9zX3V2Lm8gdXZfaXJxLm8gdXZfc3lzZnMubwogICAgICAgICBvYmoteQkJCQkrPSBnZW54MmFwaWNfY2x1c3Rlci5vCiAgICAgICAgIG9iai15CQkJCSs9IGdlbngyYXBpY19waHlzLm8KICAgICAgICAgb2JqLSQoQ09ORklHX1g4Nl9QTV9USU1FUikJKz0gcG10aW1lcl82NC5vCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvYWNwaS9ib290LmMgYi9hcmNoL3g4Ni9rZXJuZWwvYWNwaS9ib290LmMKaW5kZXggZWI4NzVjZC4uMGQxYzI2YSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2FjcGkvYm9vdC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9hY3BpL2Jvb3QuYwpAQCAtMTI1Niw3ICsxMjU2LDcgQEAKIAogCWNvdW50ID0KIAkgICAgYWNwaV90YWJsZV9wYXJzZV9tYWR0KEFDUElfTUFEVF9UWVBFX0lOVEVSUlVQVF9PVkVSUklERSwgYWNwaV9wYXJzZV9pbnRfc3JjX292ciwKLQkJCQkgIE5SX0lSUV9WRUNUT1JTKTsKKwkJCQkgIG5yX2lycXMpOwogCWlmIChjb3VudCA8IDApIHsKIAkJcHJpbnRrKEtFUk5fRVJSIFBSRUZJWAogCQkgICAgICAgIkVycm9yIHBhcnNpbmcgaW50ZXJydXB0IHNvdXJjZSBvdmVycmlkZXMgZW50cnlcbiIpOwpAQCAtMTI3Niw3ICsxMjc2LDcgQEAKIAogCWNvdW50ID0KIAkgICAgYWNwaV90YWJsZV9wYXJzZV9tYWR0KEFDUElfTUFEVF9UWVBFX05NSV9TT1VSQ0UsIGFjcGlfcGFyc2Vfbm1pX3NyYywKLQkJCQkgIE5SX0lSUV9WRUNUT1JTKTsKKwkJCQkgIG5yX2lycXMpOwogCWlmIChjb3VudCA8IDApIHsKIAkJcHJpbnRrKEtFUk5fRVJSIFBSRUZJWCAiRXJyb3IgcGFyc2luZyBOTUkgU1JDIGVudHJ5XG4iKTsKIAkJLyogVEJEOiBDbGVhbnVwIHRvIGFsbG93IGZhbGxiYWNrIHRvIE1QUyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2FsdGVybmF0aXZlLmMgYi9hcmNoL3g4Ni9rZXJuZWwvYWx0ZXJuYXRpdmUuYwppbmRleCBmYjA0ZTQ5Li5hODRhYzdiIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvYWx0ZXJuYXRpdmUuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvYWx0ZXJuYXRpdmUuYwpAQCAtNDQ0LDcgKzQ0NCw3IEBACiAJCQkJCSAgICBfdGV4dCwgX2V0ZXh0KTsKIAogCQkvKiBPbmx5IHN3aXRjaCB0byBVUCBtb2RlIGlmIHdlIGRvbid0IGltbWVkaWF0ZWx5IGJvb3Qgb3RoZXJzICovCi0JCWlmIChudW1fcG9zc2libGVfY3B1cygpID09IDEgfHwgc2V0dXBfbWF4X2NwdXMgPD0gMSkKKwkJaWYgKG51bV9wcmVzZW50X2NwdXMoKSA9PSAxIHx8IHNldHVwX21heF9jcHVzIDw9IDEpCiAJCQlhbHRlcm5hdGl2ZXNfc21wX3N3aXRjaCgwKTsKIAl9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9hbWRfaW9tbXUuYyBiL2FyY2gveDg2L2tlcm5lbC9hbWRfaW9tbXUuYwppbmRleCAzNGU0ZDExLi5hOGZkOWViIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvYW1kX2lvbW11LmMKKysrIGIvYXJjaC94ODYva2VybmVsL2FtZF9pb21tdS5jCkBAIC0yOTUsNyArMjk1LDcgQEAKIAkJdTY0IGFkZHJlc3MsIHNpemVfdCBzaXplKQogewogCWludCBzID0gMDsKLQl1bnNpZ25lZCBwYWdlcyA9IGlvbW11X251bV9wYWdlcyhhZGRyZXNzLCBzaXplKTsKKwl1bnNpZ25lZCBwYWdlcyA9IGlvbW11X251bV9wYWdlcyhhZGRyZXNzLCBzaXplLCBQQUdFX1NJWkUpOwogCiAJYWRkcmVzcyAmPSBQQUdFX01BU0s7CiAKQEAgLTY4MCw3ICs2ODAsOCBAQAogCSAgICBpb21tdS0+ZXhjbHVzaW9uX3N0YXJ0IDwgZG1hX2RvbS0+YXBlcnR1cmVfc2l6ZSkgewogCQl1bnNpZ25lZCBsb25nIHN0YXJ0cGFnZSA9IGlvbW11LT5leGNsdXNpb25fc3RhcnQgPj4gUEFHRV9TSElGVDsKIAkJaW50IHBhZ2VzID0gaW9tbXVfbnVtX3BhZ2VzKGlvbW11LT5leGNsdXNpb25fc3RhcnQsCi0JCQkJCSAgICBpb21tdS0+ZXhjbHVzaW9uX2xlbmd0aCk7CisJCQkJCSAgICBpb21tdS0+ZXhjbHVzaW9uX2xlbmd0aCwKKwkJCQkJICAgIFBBR0VfU0laRSk7CiAJCWRtYV9vcHNfcmVzZXJ2ZV9hZGRyZXNzZXMoZG1hX2RvbSwgc3RhcnRwYWdlLCBwYWdlcyk7CiAJfQogCkBAIC05MzUsNyArOTM2LDcgQEAKIAl1bnNpZ25lZCBsb25nIGFsaWduX21hc2sgPSAwOwogCWludCBpOwogCi0JcGFnZXMgPSBpb21tdV9udW1fcGFnZXMocGFkZHIsIHNpemUpOworCXBhZ2VzID0gaW9tbXVfbnVtX3BhZ2VzKHBhZGRyLCBzaXplLCBQQUdFX1NJWkUpOwogCXBhZGRyICY9IFBBR0VfTUFTSzsKIAogCWlmIChhbGlnbikKQEAgLTk4MCw3ICs5ODEsNyBAQAogCWlmICgoZG1hX2FkZHIgPT0gMCkgfHwgKGRtYV9hZGRyICsgc2l6ZSA+IGRtYV9kb20tPmFwZXJ0dXJlX3NpemUpKQogCQlyZXR1cm47CiAKLQlwYWdlcyA9IGlvbW11X251bV9wYWdlcyhkbWFfYWRkciwgc2l6ZSk7CisJcGFnZXMgPSBpb21tdV9udW1fcGFnZXMoZG1hX2FkZHIsIHNpemUsIFBBR0VfU0laRSk7CiAJZG1hX2FkZHIgJj0gUEFHRV9NQVNLOwogCXN0YXJ0ID0gZG1hX2FkZHI7CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9hcGljLmMgYi9hcmNoL3g4Ni9rZXJuZWwvYXBpYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0YTdmOTYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3g4Ni9rZXJuZWwvYXBpYy5jCkBAIC0wLDAgKzEsMjIzOCBAQAorLyoKKyAqCUxvY2FsIEFQSUMgaGFuZGxpbmcsIGxvY2FsIEFQSUMgdGltZXJzCisgKgorICoJKGMpIDE5OTksIDIwMDAgSW5nbyBNb2xuYXIgPG1pbmdvQHJlZGhhdC5jb20+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+IDIpOworfQorI2VuZGlmCisKKy8qCisgKiBBUElDIGNvbW1hbmQgbGluZSBwYXJhbWV0ZXJzCisgKi8KK3N0YXRpYyBpbnQgX19pbml0IHNldHVwX2Rpc2FibGVhcGljKGNoYXIgKmFyZykKK3sKKwlkaXNhYmxlX2FwaWMgPSAxOworCXNldHVwX2NsZWFyX2NwdV9jYXAoWDg2X0ZFQVRVUkVfQVBJQyk7CisJcmV0dXJuIDA7Cit9CitlYXJseV9wYXJhbSgiZGlzYWJsZWFwaWMiLCBzZXR1cF9kaXNhYmxlYXBpYyk7CisKKy8qIHNhbWUgYXMgZGlzYWJsZWFwaWMsIGZvciBjb21wYXRpYmlsaXR5ICovCitzdGF0aWMgaW50IF9faW5pdCBzZXR1cF9ub2xhcGljKGNoYXIgKmFyZykKK3sKKwlyZXR1cm4gc2V0dXBfZGlzYWJsZWFwaWMoYXJnKTsKK30KK2Vhcmx5X3BhcmFtKCJub2xhcGljIiwgc2V0dXBfbm9sYXBpYyk7CisKK3N0YXRpYyBpbnQgX19pbml0IHBhcnNlX2xhcGljX3RpbWVyX2MyX29rKGNoYXIgKmFyZykKK3sKKwlsb2NhbF9hcGljX3RpbWVyX2MyX29rID0gMTsKKwlyZXR1cm4gMDsKK30KK2Vhcmx5X3BhcmFtKCJsYXBpY190aW1lcl9jMl9vayIsIHBhcnNlX2xhcGljX3RpbWVyX2MyX29rKTsKKworc3RhdGljIGludCBfX2luaXQgcGFyc2VfZGlzYWJsZV9hcGljX3RpbWVyKGNoYXIgKmFyZykKK3sKKwlkaXNhYmxlX2FwaWNfdGltZXIgPSAxOworCXJldHVybiAwOworfQorZWFybHlfcGFyYW0oIm5vYXBpY3RpbWVyIiwgcGFyc2VfZGlzYWJsZV9hcGljX3RpbWVyKTsKKworc3RhdGljIGludCBfX2luaXQgcGFyc2Vfbm9sYXBpY190aW1lcihjaGFyICphcmcpCit7CisJZGlzYWJsZV9hcGljX3RpbWVyID0gMTsKKwlyZXR1cm4gMDsKK30KK2Vhcmx5X3BhcmFtKCJub2xhcGljX3RpbWVyIiwgcGFyc2Vfbm9sYXBpY190aW1lcik7CisKK3N0YXRpYyBpbnQgX19pbml0IGFwaWNfc2V0X3ZlcmJvc2l0eShjaGFyICphcmcpCit7CisJaWYgKCFhcmcpICB7CisjaWZkZWYgQ09ORklHX1g4Nl82NAorCQlza2lwX2lvYXBpY19zZXR1cCA9IDA7CisJCXJldHVybiAwOworI2VuZGlmCisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmIChzdHJjbXAoImRlYnVnIiwgYXJnKSA9PSAwKQorCQlhcGljX3ZlcmJvc2l0eSA9IEFQSUNfREVCVUc7CisJZWxzZSBpZiAoc3RyY21wKCJ2ZXJib3NlIiwgYXJnKSA9PSAwKQorCQlhcGljX3ZlcmJvc2l0eSA9IEFQSUNfVkVSQk9TRTsKKwllbHNlIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiQVBJQyBWZXJib3NpdHkgbGV2ZWwgJXMgbm90IHJlY29nbmlzZWQiCisJCQkiIHVzZSBhcGljPXZlcmJvc2Ugb3IgYXBpYz1kZWJ1Z1xuIiwgYXJnKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0dXJuIDA7Cit9CitlYXJseV9wYXJhbSgiYXBpYyIsIGFwaWNfc2V0X3ZlcmJvc2l0eSk7CisKK3N0YXRpYyBpbnQgX19pbml0IGxhcGljX2luc2VydF9yZXNvdXJjZSh2b2lkKQoreworCWlmICghYXBpY19waHlzKQorCQlyZXR1cm4gLTE7CisKKwkvKiBQdXQgbG9jYWwgQVBJQyBpbnRvIHRoZSByZXNvdXJjZSBtYXAuICovCisJbGFwaWNfcmVzb3VyY2Uuc3RhcnQgPSBhcGljX3BoeXM7CisJbGFwaWNfcmVzb3VyY2UuZW5kID0gbGFwaWNfcmVzb3VyY2Uuc3RhcnQgKyBQQUdFX1NJWkUgLSAxOworCWluc2VydF9yZXNvdXJjZSgmaW9tZW1fcmVzb3VyY2UsICZsYXBpY19yZXNvdXJjZSk7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIG5lZWQgY2FsbCBpbnNlcnQgYWZ0ZXIgZTgyMF9yZXNlcnZlX3Jlc291cmNlcygpCisgKiB0aGF0IGlzIHVzaW5nIHJlcXVlc3RfcmVzb3VyY2UKKyAqLworbGF0ZV9pbml0Y2FsbChsYXBpY19pbnNlcnRfcmVzb3VyY2UpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2FwaWNfMzIuYyBiL2FyY2gveDg2L2tlcm5lbC9hcGljXzMyLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE5MWM1N2MuLjAwMDAwMDAKLS0tIGEvYXJjaC94ODYva2VybmVsL2FwaWNfMzIuYworKysgL2Rldi9udWxsCkBAIC0xLDE4MTUgKzAsMCBAQAotLyoKLSAqCUxvY2FsIEFQSUMgaGFuZGxpbmcsIGxvY2FsIEFQSUMgdGltZXJzCi0gKgotICoJKGMpIDE5OTksIDIwMDAgSW5nbyBNb2xuYXIgPG1pbmdvQHJlZGhhdC5jb20+Ci0gKgotICoJRml4ZXMKLSAqCU1hY2llaiBXLiBSb3p5Y2tpCToJQml0cyBmb3IgZ2VudWluZSA4MjQ4OURYIEFQSUNzOwotICoJCQkJCXRoYW5rcyB0byBFcmljIEdpbG1vcmUKLSAqCQkJCQlhbmQgUm9sZiBHLiBUZXdzCi0gKgkJCQkJZm9yIHRlc3RpbmcgdGhlc2UgZXh0ZW5zaXZlbHkuCi0gKglNYWNpZWogVy4gUm96eWNraQk6CVZhcmlvdXMgdXBkYXRlcyBhbmQgZml4ZXMuCi0gKglNaWthZWwgUGV0dGVyc3Nvbgk6CVBvd2VyIE1hbmFnZW1lbnQgZm9yIFVQLUFQSUMuCi0gKglQYXZlbCBNYWNoZWsgYW5kCi0gKglNaWthZWwgUGV0dGVyc3Nvbgk6CVBNIGNvbnZlcnRlZCB0byBkcml2ZXIgbW9kZWwuCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLQotI2luY2x1ZGUgPGxpbnV4L21tLmg+Ci0jaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KLSNpbmNsdWRlIDxsaW51eC9ib290bWVtLmg+Ci0jaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Ci0jaW5jbHVkZSA8bGludXgvbWMxNDY4MThydGMuaD4KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWxfc3RhdC5oPgotI2luY2x1ZGUgPGxpbnV4L3N5c2Rldi5oPgotI2luY2x1ZGUgPGxpbnV4L2NwdS5oPgotI2luY2x1ZGUgPGxpbnV4L2Nsb2NrY2hpcHMuaD4KLSNpbmNsdWRlIDxsaW51eC9hY3BpX3BtdG1yLmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvZG1pLmg+Ci0KLSNpbmNsdWRlIDxhc20vYXRvbWljLmg+Ci0jaW5jbHVkZSA8YXNtL3NtcC5oPgotI2luY2x1ZGUgPGFzbS9tdHJyLmg+Ci0jaW5jbHVkZSA8YXNtL21wc3BlYy5oPgotI2luY2x1ZGUgPGFzbS9kZXNjLmg+Ci0jaW5jbHVkZSA8YXNtL2FyY2hfaG9va3MuaD4KLSNpbmNsdWRlIDxhc20vaHBldC5oPgotI2luY2x1ZGUgPGFzbS9pODI1My5oPgotI2luY2x1ZGUgPGFzbS9ubWkuaD4KLQotI2luY2x1ZGUgPG1hY2hfYXBpYy5oPgotI2luY2x1ZGUgPG1hY2hfYXBpY2RlZi5oPgotI2luY2x1ZGUgPG1hY2hfaXBpLmg+Ci0KLS8qCi0gKiBTYW5pdHkgY2hlY2sKLSAqLwotI2lmICgoU1BVUklPVVNfQVBJQ19WRUNUT1IgJiAweDBGKSAhPSAweDBGKQotIyBlcnJvciBTUFVSSU9VU19BUElDX1ZFQ1RPUiBkZWZpbml0aW9uIGVycm9yCi0jZW5kaWYKLQotdW5zaWduZWQgbG9uZyBtcF9sYXBpY19hZGRyOwotCi0vKgotICogS25vYiB0byBjb250cm9sIG91ciB3aWxsaW5nbmVzcyB0byBlbmFibGUgdGhlIGxvY2FsIEFQSUMuCi0gKgotICogKzE9Zm9yY2UtZW5hYmxlCi0gKi8KLXN0YXRpYyBpbnQgZm9yY2VfZW5hYmxlX2xvY2FsX2FwaWM7Ci1pbnQgZGlzYWJsZV9hcGljOwotCi0vKiBEaXNhYmxlIGxvY2FsIEFQSUMgdGltZXIgZnJvbSB0aGUga2VybmVsIGNvbW1hbmRsaW5lIG9yIHZpYSBkbWkgcXVpcmsgKi8KLXN0YXRpYyBpbnQgZGlzYWJsZV9hcGljX3RpbWVyIF9fY3B1aW5pdGRhdGE7Ci0vKiBMb2NhbCBBUElDIHRpbWVyIHdvcmtzIGluIEMyICovCi1pbnQgbG9jYWxfYXBpY190aW1lcl9jMl9vazsKLUVYUE9SVF9TWU1CT0xfR1BMKGxvY2FsX2FwaWNfdGltZXJfYzJfb2spOwotCi1pbnQgZmlyc3Rfc3lzdGVtX3ZlY3RvciA9IDB4ZmU7Ci0KLWNoYXIgc3lzdGVtX3ZlY3RvcnNbTlJfVkVDVE9SU10gPSB7IFswIC4uLiBOUl9WRUNUT1JTLTFdID0gU1lTX1ZFQ1RPUl9GUkVFfTsKLQotLyoKLSAqIERlYnVnIGxldmVsLCBleHBvcnRlZCBmb3IgaW9fYXBpYy5jCi0gKi8KLXVuc2lnbmVkIGludCBhcGljX3ZlcmJvc2l0eTsKLQotaW50IHBpY19tb2RlOwotCi0vKiBIYXZlIHdlIGZvdW5kIGFuIE1QIHRhYmxlICovCi1pbnQgc21wX2ZvdW5kX2NvbmZpZzsKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBsYXBpY19yZXNvdXJjZSA9IHsKLQkubmFtZSA9ICJMb2NhbCBBUElDIiwKLQkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSB8IElPUkVTT1VSQ0VfQlVTWSwKLX07Ci0KLXN0YXRpYyB1bnNpZ25lZCBpbnQgY2FsaWJyYXRpb25fcmVzdWx0OwotCi1zdGF0aWMgaW50IGxhcGljX25leHRfZXZlbnQodW5zaWduZWQgbG9uZyBkZWx0YSwKLQkJCSAgICBzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpldnQpOwotc3RhdGljIHZvaWQgbGFwaWNfdGltZXJfc2V0dXAoZW51bSBjbG9ja19ldmVudF9tb2RlIG1vZGUsCi0JCQkgICAgICBzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpldnQpOwotc3RhdGljIHZvaWQgbGFwaWNfdGltZXJfYnJvYWRjYXN0KGNwdW1hc2tfdCBtYXNrKTsKLXN0YXRpYyB2b2lkIGFwaWNfcG1fYWN0aXZhdGUodm9pZCk7Ci0KLS8qCi0gKiBUaGUgbG9jYWwgYXBpYyB0aW1lciBjYW4gYmUgdXNlZCBmb3IgYW55IGZ1bmN0aW9uIHdoaWNoIGlzIENQVSBsb2NhbC4KLSAqLwotc3RhdGljIHN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgbGFwaWNfY2xvY2tldmVudCA9IHsKLQkubmFtZQkJPSAibGFwaWMiLAotCS5mZWF0dXJlcwk9IENMT0NLX0VWVF9GRUFUX1BFUklPRElDIHwgQ0xPQ0tfRVZUX0ZFQVRfT05FU0hPVAotCQkJfCBDTE9DS19FVlRfRkVBVF9DM1NUT1AgfCBDTE9DS19FVlRfRkVBVF9EVU1NWSwKLQkuc2hpZnQJCT0gMzIsCi0JLnNldF9tb2RlCT0gbGFwaWNfdGltZXJfc2V0dXAsCi0JLnNldF9uZXh0X2V2ZW50CT0gbGFwaWNfbmV4dF9ldmVudCwKLQkuYnJvYWRjYXN0CT0gbGFwaWNfdGltZXJfYnJvYWRjYXN0LAotCS5yYXRpbmcJCT0gMTAwLAotCS5pcnEJCT0gLTEsCi19Owotc3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UsIGxhcGljX2V2ZW50cyk7Ci0KLS8qIExvY2FsIEFQSUMgd2FzIGRpc2FibGVkIGJ5IHRoZSBCSU9TIGFuZCBlbmFibGVkIGJ5IHRoZSBrZXJuZWwgKi8KLXN0YXRpYyBpbnQgZW5hYmxlZF92aWFfYXBpY2Jhc2U7Ci0KLXN0YXRpYyB1bnNpZ25lZCBsb25nIGFwaWNfcGh5czsKLQotLyoKLSAqIEdldCB0aGUgTEFQSUMgdmVyc2lvbgotICovCi1zdGF0aWMgaW5saW5lIGludCBsYXBpY19nZXRfdmVyc2lvbih2b2lkKQotewotCXJldHVybiBHRVRfQVBJQ19WRVJTSU9OKGFwaWNfcmVhZChBUElDX0xWUikpOwotfQotCi0vKgotICogQ2hlY2ssIGlmIHRoZSBBUElDIGlzIGludGVncmF0ZWQgb3IgYSBzZXBhcmF0ZSBjaGlwCi0gKi8KLXN0YXRpYyBpbmxpbmUgaW50IGxhcGljX2lzX2ludGVncmF0ZWQodm9pZCkKLXsKLSNpZmRlZiBDT05GSUdfWDg2XzY0Ci0JcmV0dXJuIDE7Ci0jZWxzZQotCXJldHVybiBBUElDX0lOVEVHUkFURUQobGFwaWNfZ2V0X3ZlcnNpb24oKSk7Ci0jZW5kaWYKLX0KLQotLyoKLSAqIENoZWNrLCB3aGV0aGVyIHRoaXMgaXMgYSBtb2Rlcm4gb3IgYSBmaXJzdCBnZW5lcmF0aW9uIEFQSUMKLSAqLwotc3RhdGljIGludCBtb2Rlcm5fYXBpYyh2b2lkKQotewotCS8qIEFNRCBzeXN0ZW1zIHVzZSBvbGQgQVBJQyB2ZXJzaW9ucywgc28gY2hlY2sgdGhlIENQVSAqLwotCWlmIChib290X2NwdV9kYXRhLng4Nl92ZW5kb3IgPT0gWDg2X1ZFTkRPUl9BTUQgJiYKLQkgICAgYm9vdF9jcHVfZGF0YS54ODYgPj0gMHhmKQotCQlyZXR1cm4gMTsKLQlyZXR1cm4gbGFwaWNfZ2V0X3ZlcnNpb24oKSA+PSAweDE0OwotfQotCi0vKgotICogUGFyYXZpcnQga2VybmVscyBhbHNvIG1pZ2h0IGJlIHVzaW5nIHRoZXNlIGJlbG93IG9wcy4gU28gd2Ugc3RpbGwKLSAqIHVzZSBnZW5lcmljIGFwaWNfcmVhZCgpL2FwaWNfd3JpdGUoKSwgd2hpY2ggbWlnaHQgYmUgcG9pbnRpbmcgdG8gZGlmZmVyZW50Ci0gKiBvcHMgaW4gUEFSQVZJUlQgY2FzZS4KLSAqLwotdm9pZCB4YXBpY193YWl0X2ljcl9pZGxlKHZvaWQpCi17Ci0Jd2hpbGUgKGFwaWNfcmVhZChBUElDX0lDUikgJiBBUElDX0lDUl9CVVNZKQotCQljcHVfcmVsYXgoKTsKLX0KLQotdTMyIHNhZmVfeGFwaWNfd2FpdF9pY3JfaWRsZSh2b2lkKQotewotCXUzMiBzZW5kX3N0YXR1czsKLQlpbnQgdGltZW91dDsKLQotCXRpbWVvdXQgPSAwOwotCWRvIHsKLQkJc2VuZF9zdGF0dXMgPSBhcGljX3JlYWQoQVBJQ19JQ1IpICYgQVBJQ19JQ1JfQlVTWTsKLQkJaWYgKCFzZW5kX3N0YXR1cykKLQkJCWJyZWFrOwotCQl1ZGVsYXkoMTAwKTsKLQl9IHdoaWxlICh0aW1lb3V0KysgPCAxMDAwKTsKLQotCXJldHVybiBzZW5kX3N0YXR1czsKLX0KLQotdm9pZCB4YXBpY19pY3Jfd3JpdGUodTMyIGxvdywgdTMyIGlkKQotewotCWFwaWNfd3JpdGUoQVBJQ19JQ1IyLCBTRVRfQVBJQ19ERVNUX0ZJRUxEKGlkKSk7Ci0JYXBpY193cml0ZShBUElDX0lDUiwgbG93KTsKLX0KLQotdTY0IHhhcGljX2ljcl9yZWFkKHZvaWQpCi17Ci0JdTMyIGljcjEsIGljcjI7Ci0KLQlpY3IyID0gYXBpY19yZWFkKEFQSUNfSUNSMik7Ci0JaWNyMSA9IGFwaWNfcmVhZChBUElDX0lDUik7Ci0KLQlyZXR1cm4gaWNyMSB8ICgodTY0KWljcjIgPDwgMzIpOwotfQotCi1zdGF0aWMgc3RydWN0IGFwaWNfb3BzIHhhcGljX29wcyA9IHsKLQkucmVhZCA9IG5hdGl2ZV9hcGljX21lbV9yZWFkLAotCS53cml0ZSA9IG5hdGl2ZV9hcGljX21lbV93cml0ZSwKLQkuaWNyX3JlYWQgPSB4YXBpY19pY3JfcmVhZCwKLQkuaWNyX3dyaXRlID0geGFwaWNfaWNyX3dyaXRlLAotCS53YWl0X2ljcl9pZGxlID0geGFwaWNfd2FpdF9pY3JfaWRsZSwKLQkuc2FmZV93YWl0X2ljcl9pZGxlID0gc2FmZV94YXBpY193YWl0X2ljcl9pZGxlLAotfTsKLQotc3RydWN0IGFwaWNfb3BzIF9fcmVhZF9tb3N0bHkgKmFwaWNfb3BzID0gJnhhcGljX29wczsKLUVYUE9SVF9TWU1CT0xfR1BMKGFwaWNfb3BzKTsKLQotLyoqCi0gKiBlbmFibGVfTk1JX3Rocm91Z2hfTFZUMCAtIGVuYWJsZSBOTUkgdGhyb3VnaCBsb2NhbCB2ZWN0b3IgdGFibGUgMAotICovCi12b2lkIF9fY3B1aW5pdCBlbmFibGVfTk1JX3Rocm91Z2hfTFZUMCh2b2lkKQotewotCXVuc2lnbmVkIGludCB2OwotCi0JLyogdW5tYXNrIGFuZCBzZXQgdG8gTk1JICovCi0JdiA9IEFQSUNfRE1fTk1JOwotCi0JLyogTGV2ZWwgdHJpZ2dlcmVkIGZvciA4MjQ4OURYICgzMmJpdCBtb2RlKSAqLwotCWlmICghbGFwaWNfaXNfaW50ZWdyYXRlZCgpKQotCQl2IHw9IEFQSUNfTFZUX0xFVkVMX1RSSUdHRVI7Ci0KLQlhcGljX3dyaXRlKEFQSUNfTFZUMCwgdik7Ci19Ci0KLS8qKgotICogZ2V0X3BoeXNpY2FsX2Jyb2FkY2FzdCAtIEdldCBudW1iZXIgb2YgcGh5c2ljYWwgYnJvYWRjYXN0IElEcwotICovCi1pbnQgZ2V0X3BoeXNpY2FsX2Jyb2FkY2FzdCh2b2lkKQotewotCXJldHVybiBtb2Rlcm5fYXBpYygpID8gMHhmZiA6IDB4ZjsKLX0KLQotLyoqCi0gKiBsYXBpY19nZXRfbWF4bHZ0IC0gZ2V0IHRoZSBtYXhpbXVtIG51bWJlciBvZiBsb2NhbCB2ZWN0b3IgdGFibGUgZW50cmllcwotICovCi1pbnQgbGFwaWNfZ2V0X21heGx2dCh2b2lkKQotewotCXVuc2lnbmVkIGludCB2OwotCi0JdiA9IGFwaWNfcmVhZChBUElDX0xWUik7Ci0JLyoKLQkgKiAtIHdlIGFsd2F5cyBoYXZlIEFQSUMgaW50ZWdyYXRlZCBvbiA2NGJpdCBtb2RlCi0JICogLSA4MjQ4OURYcyBkbyBub3QgcmVwb3J0ICMgb2YgTFZUIGVudHJpZXMKLQkgKi8KLQlyZXR1cm4gQVBJQ19JTlRFR1JBVEVEKEdFVF9BUElDX1ZFUlNJT04odikpID8gR0VUX0FQSUNfTUFYTFZUKHYpIDogMjsKLX0KLQotLyoKLSAqIExvY2FsIEFQSUMgdGltZXIKLSAqLwotCi0vKiBDbG9jayBkaXZpc29yICovCi0jaWZkZWYgQ09ORkdfWDg2XzY0Ci0jZGVmaW5lIEFQSUNfRElWSVNPUiAxCi0jZWxzZQotI2RlZmluZSBBUElDX0RJVklTT1IgMTYKLSNlbmRpZgotCi0vKgotICogVGhpcyBmdW5jdGlvbiBzZXRzIHVwIHRoZSBsb2NhbCBBUElDIHRpbWVyLCB3aXRoIGEgdGltZW91dCBvZgotICogJ2Nsb2NrcycgQVBJQyBidXMgY2xvY2suIER1cmluZyBjYWxpYnJhdGlvbiB3ZSBhY3R1YWxseSBjYWxsCi0gKiB0aGlzIGZ1bmN0aW9uIHR3aWNlIG9uIHRoZSBib290IENQVSwgb25jZSB3aXRoIGEgYm9ndXMgdGltZW91dAotICogdmFsdWUsIHNlY29uZCB0aW1lIGZvciByZWFsLiBUaGUgb3RoZXIgKG5vbmNhbGlicmF0aW5nKSBDUFVzCi0gKiBjYWxsIHRoaXMgZnVuY3Rpb24gb25seSBvbmNlLCB3aXRoIHRoZSByZWFsLCBjYWxpYnJhdGVkIHZhbHVlLgotICoKLSAqIFdlIGRvIHJlYWRzIGJlZm9yZSB3cml0ZXMgZXZlbiBpZiB1bm5lY2Vzc2FyeSwgdG8gZ2V0IGFyb3VuZCB0aGUKLSAqIFA1IEFQSUMgZG91YmxlIHdyaXRlIGJ1Zy4KLSAqLwotc3RhdGljIHZvaWQgX19zZXR1cF9BUElDX0xWVFQodW5zaWduZWQgaW50IGNsb2NrcywgaW50IG9uZXNob3QsIGludCBpcnFlbikKLXsKLQl1bnNpZ25lZCBpbnQgbHZ0dF92YWx1ZSwgdG1wX3ZhbHVlOwotCi0JbHZ0dF92YWx1ZSA9IExPQ0FMX1RJTUVSX1ZFQ1RPUjsKLQlpZiAoIW9uZXNob3QpCi0JCWx2dHRfdmFsdWUgfD0gQVBJQ19MVlRfVElNRVJfUEVSSU9ESUM7Ci0JaWYgKCFsYXBpY19pc19pbnRlZ3JhdGVkKCkpCi0JCWx2dHRfdmFsdWUgfD0gU0VUX0FQSUNfVElNRVJfQkFTRShBUElDX1RJTUVSX0JBU0VfRElWKTsKLQotCWlmICghaXJxZW4pCi0JCWx2dHRfdmFsdWUgfD0gQVBJQ19MVlRfTUFTS0VEOwotCi0JYXBpY193cml0ZShBUElDX0xWVFQsIGx2dHRfdmFsdWUpOwotCi0JLyoKLQkgKiBEaXZpZGUgUElDTEsgYnkgMTYKLQkgKi8KLQl0bXBfdmFsdWUgPSBhcGljX3JlYWQoQVBJQ19URENSKTsKLQlhcGljX3dyaXRlKEFQSUNfVERDUiwKLQkJKHRtcF92YWx1ZSAmIH4oQVBJQ19URFJfRElWXzEgfCBBUElDX1REUl9ESVZfVE1CQVNFKSkgfAotCQlBUElDX1REUl9ESVZfMTYpOwotCi0JaWYgKCFvbmVzaG90KQotCQlhcGljX3dyaXRlKEFQSUNfVE1JQ1QsIGNsb2NrcyAvIEFQSUNfRElWSVNPUik7Ci19Ci0KLS8qCi0gKiBTZXR1cCBleHRlbmRlZCBMVlQsIEFNRCBzcGVjaWZpYyAoSzgsIGZhbWlseSAxMGgpCi0gKgotICogVmVjdG9yIG1hcHBpbmdzIGFyZSBoYXJkIGNvZGVkLiBPbiBLOCBvbmx5IG9mZnNldCAwIChBUElDNTAwKSBhbmQKLSAqIE1DRSBpbnRlcnJ1cHRzIGFyZSBzdXBwb3J0ZWQuIFRodXMgTUNFIG9mZnNldCBtdXN0IGJlIHNldCB0byAwLgotICovCi0KLSNkZWZpbmUgQVBJQ19FSUxWVF9MVlRPRkZfTUNFIDAKLSNkZWZpbmUgQVBJQ19FSUxWVF9MVlRPRkZfSUJTIDEKLQotc3RhdGljIHZvaWQgc2V0dXBfQVBJQ19laWx2dCh1OCBsdnRfb2ZmLCB1OCB2ZWN0b3IsIHU4IG1zZ190eXBlLCB1OCBtYXNrKQotewotCXVuc2lnbmVkIGxvbmcgcmVnID0gKGx2dF9vZmYgPDwgNCkgKyBBUElDX0VJTFZUMDsKLQl1bnNpZ25lZCBpbnQgIHYgICA9IChtYXNrIDw8IDE2KSB8IChtc2dfdHlwZSA8PCA4KSB8IHZlY3RvcjsKLQotCWFwaWNfd3JpdGUocmVnLCB2KTsKLX0KLQotdTggc2V0dXBfQVBJQ19laWx2dF9tY2UodTggdmVjdG9yLCB1OCBtc2dfdHlwZSwgdTggbWFzaykKLXsKLQlzZXR1cF9BUElDX2VpbHZ0KEFQSUNfRUlMVlRfTFZUT0ZGX01DRSwgdmVjdG9yLCBtc2dfdHlwZSwgbWFzayk7Ci0JcmV0dXJuIEFQSUNfRUlMVlRfTFZUT0ZGX01DRTsKLX0KLQotdTggc2V0dXBfQVBJQ19laWx2dF9pYnModTggdmVjdG9yLCB1OCBtc2dfdHlwZSwgdTggbWFzaykKLXsKLQlzZXR1cF9BUElDX2VpbHZ0KEFQSUNfRUlMVlRfTFZUT0ZGX0lCUywgdmVjdG9yLCBtc2dfdHlwZSwgbWFzayk7Ci0JcmV0dXJuIEFQSUNfRUlMVlRfTFZUT0ZGX0lCUzsKLX0KLQotLyoKLSAqIFByb2dyYW0gdGhlIG5leHQgZXZlbnQsIHJlbGF0aXZlIHRvIG5vdwotICovCi1zdGF0aWMgaW50IGxhcGljX25leHRfZXZlbnQodW5zaWduZWQgbG9uZyBkZWx0YSwKLQkJCSAgICBzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpldnQpCi17Ci0JYXBpY193cml0ZShBUElDX1RNSUNULCBkZWx0YSk7Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qCi0gKiBTZXR1cCB0aGUgbGFwaWMgdGltZXIgaW4gcGVyaW9kaWMgb3Igb25lc2hvdCBtb2RlCi0gKi8KLXN0YXRpYyB2b2lkIGxhcGljX3RpbWVyX3NldHVwKGVudW0gY2xvY2tfZXZlbnRfbW9kZSBtb2RlLAotCQkJICAgICAgc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqZXZ0KQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JdW5zaWduZWQgaW50IHY7Ci0KLQkvKiBMYXBpYyB1c2VkIGFzIGR1bW15IGZvciBicm9hZGNhc3QgPyAqLwotCWlmIChldnQtPmZlYXR1cmVzICYgQ0xPQ0tfRVZUX0ZFQVRfRFVNTVkpCi0JCXJldHVybjsKLQotCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQotCXN3aXRjaCAobW9kZSkgewotCWNhc2UgQ0xPQ0tfRVZUX01PREVfUEVSSU9ESUM6Ci0JY2FzZSBDTE9DS19FVlRfTU9ERV9PTkVTSE9UOgotCQlfX3NldHVwX0FQSUNfTFZUVChjYWxpYnJhdGlvbl9yZXN1bHQsCi0JCQkJICBtb2RlICE9IENMT0NLX0VWVF9NT0RFX1BFUklPRElDLCAxKTsKLQkJYnJlYWs7Ci0JY2FzZSBDTE9DS19FVlRfTU9ERV9VTlVTRUQ6Ci0JY2FzZSBDTE9DS19FVlRfTU9ERV9TSFVURE9XTjoKLQkJdiA9IGFwaWNfcmVhZChBUElDX0xWVFQpOwotCQl2IHw9IChBUElDX0xWVF9NQVNLRUQgfCBMT0NBTF9USU1FUl9WRUNUT1IpOwotCQlhcGljX3dyaXRlKEFQSUNfTFZUVCwgdik7Ci0JCWJyZWFrOwotCWNhc2UgQ0xPQ0tfRVZUX01PREVfUkVTVU1FOgotCQkvKiBOb3RoaW5nIHRvIGRvIGhlcmUgKi8KLQkJYnJlYWs7Ci0JfQotCi0JbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwotfQotCi0vKgotICogTG9jYWwgQVBJQyB0aW1lciBicm9hZGNhc3QgZnVuY3Rpb24KLSAqLwotc3RhdGljIHZvaWQgbGFwaWNfdGltZXJfYnJvYWRjYXN0KGNwdW1hc2tfdCBtYXNrKQotewotI2lmZGVmIENPTkZJR19TTVAKLQlzZW5kX0lQSV9tYXNrKG1hc2ssIExPQ0FMX1RJTUVSX1ZFQ1RPUik7Ci0jZW5kaWYKLX0KLQotLyoKLSAqIFNldHVwIHRoZSBsb2NhbCBBUElDIHRpbWVyIGZvciB0aGlzIENQVS4gQ29weSB0aGUgaW5pdGlsaXplZCB2YWx1ZXMKLSAqIG9mIHRoZSBib290IENQVSBhbmQgcmVnaXN0ZXIgdGhlIGNsb2NrIGV2ZW50IGluIHRoZSBmcmFtZXdvcmsuCi0gKi8KLXN0YXRpYyB2b2lkIF9fZGV2aW5pdCBzZXR1cF9BUElDX3RpbWVyKHZvaWQpCi17Ci0Jc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqbGV2dCA9ICZfX2dldF9jcHVfdmFyKGxhcGljX2V2ZW50cyk7Ci0KLQltZW1jcHkobGV2dCwgJmxhcGljX2Nsb2NrZXZlbnQsIHNpemVvZigqbGV2dCkpOwotCWxldnQtPmNwdW1hc2sgPSBjcHVtYXNrX29mX2NwdShzbXBfcHJvY2Vzc29yX2lkKCkpOwotCi0JY2xvY2tldmVudHNfcmVnaXN0ZXJfZGV2aWNlKGxldnQpOwotfQotCi0vKgotICogSW4gdGhpcyBmdW5jdGlvbnMgd2UgY2FsaWJyYXRlIEFQSUMgYnVzIGNsb2NrcyB0byB0aGUgZXh0ZXJuYWwgdGltZXIuCi0gKgotICogV2Ugd2FudCB0byBkbyB0aGUgY2FsaWJyYXRpb24gb25seSBvbmNlIHNpbmNlIHdlIHdhbnQgdG8gaGF2ZSBsb2NhbCB0aW1lcgotICogaXJxcyBzeW5jcm9uLiBDUFVzIGNvbm5lY3RlZCBieSB0aGUgc2FtZSBBUElDIGJ1cyBoYXZlIHRoZSB2ZXJ5IHNhbWUgYnVzCi0gKiBmcmVxdWVuY3kuCi0gKgotICogVGhpcyB3YXMgcHJldmlvdXNseSBkb25lIGJ5IHJlYWRpbmcgdGhlIFBJVC9IUEVUIGFuZCB3YWl0aW5nIGZvciBhIHdyYXAKLSAqIGFyb3VuZCB0byBmaW5kIG91dCwgdGhhdCBhIHRpY2sgaGFzIGVsYXBzZWQuIEkgaGF2ZSBhIGJveCwgd2hlcmUgdGhlIFBJVAotICogcmVhZG91dCBpcyBicm9rZW4sIHNvIGl0IG5ldmVyIGdldHMgb3V0IG9mIHRoZSB3YWl0IGxvb3AgYWdhaW4uIFRoaXMgd2FzCi0gKiBhbHNvIHJlcG9ydGVkIGJ5IG90aGVycy4KLSAqCi0gKiBNb25pdG9yaW5nIHRoZSBqaWZmaWVzIHZhbHVlIGlzIGluYWNjdXJhdGUgYW5kIHRoZSBjbG9ja2V2ZW50cwotICogaW5mcmFzdHJ1Y3R1cmUgYWxsb3dzIHVzIHRvIGRvIGEgc2ltcGxlIHN1YnN0aXR1dGlvbiBvZiB0aGUgaW50ZXJydXB0Ci0gKiBoYW5kbGVyLgotICoKLSAqIFRoZSBjYWxpYnJhdGlvbiByb3V0aW5lIGFsc28gdXNlcyB0aGUgcG1fdGltZXIgd2hlbiBwb3NzaWJsZSwgYXMgdGhlIFBJVAotICogaGFwcGVucyB0byBydW4gd2F5IHRvbyBzbG93IChmYWN0b3IgMi4zIG9uIG15IFZBSU8gQ29yZUR1bywgd2hpY2ggZ29lcwotICogYmFjayB0byBub3JtYWwgbGF0ZXIgaW4gdGhlIGJvb3QgcHJvY2VzcykuCi0gKi8KLQotI2RlZmluZSBMQVBJQ19DQUxfTE9PUFMJCShIWi8xMCkKLQotc3RhdGljIF9faW5pdGRhdGEgaW50IGxhcGljX2NhbF9sb29wcyA9IC0xOwotc3RhdGljIF9faW5pdGRhdGEgbG9uZyBsYXBpY19jYWxfdDEsIGxhcGljX2NhbF90MjsKLXN0YXRpYyBfX2luaXRkYXRhIHVuc2lnbmVkIGxvbmcgbG9uZyBsYXBpY19jYWxfdHNjMSwgbGFwaWNfY2FsX3RzYzI7Ci1zdGF0aWMgX19pbml0ZGF0YSB1bnNpZ25lZCBsb25nIGxhcGljX2NhbF9wbTEsIGxhcGljX2NhbF9wbTI7Ci1zdGF0aWMgX19pbml0ZGF0YSB1bnNpZ25lZCBsb25nIGxhcGljX2NhbF9qMSwgbGFwaWNfY2FsX2oyOwotCi0vKgotICogVGVtcG9yYXJ5IGludGVycnVwdCBoYW5kbGVyLgotICovCi1zdGF0aWMgdm9pZCBfX2luaXQgbGFwaWNfY2FsX2hhbmRsZXIoc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqZGV2KQotewotCXVuc2lnbmVkIGxvbmcgbG9uZyB0c2MgPSAwOwotCWxvbmcgdGFwaWMgPSBhcGljX3JlYWQoQVBJQ19UTUNDVCk7Ci0JdW5zaWduZWQgbG9uZyBwbSA9IGFjcGlfcG1fcmVhZF9lYXJseSgpOwotCi0JaWYgKGNwdV9oYXNfdHNjKQotCQlyZHRzY2xsKHRzYyk7Ci0KLQlzd2l0Y2ggKGxhcGljX2NhbF9sb29wcysrKSB7Ci0JY2FzZSAwOgotCQlsYXBpY19jYWxfdDEgPSB0YXBpYzsKLQkJbGFwaWNfY2FsX3RzYzEgPSB0c2M7Ci0JCWxhcGljX2NhbF9wbTEgPSBwbTsKLQkJbGFwaWNfY2FsX2oxID0gamlmZmllczsKLQkJYnJlYWs7Ci0KLQljYXNlIExBUElDX0NBTF9MT09QUzoKLQkJbGFwaWNfY2FsX3QyID0gdGFwaWM7Ci0JCWxhcGljX2NhbF90c2MyID0gdHNjOwotCQlpZiAocG0gPCBsYXBpY19jYWxfcG0xKQotCQkJcG0gKz0gQUNQSV9QTV9PVlJSVU47Ci0JCWxhcGljX2NhbF9wbTIgPSBwbTsKLQkJbGFwaWNfY2FsX2oyID0gamlmZmllczsKLQkJYnJlYWs7Ci0JfQotfQotCi1zdGF0aWMgaW50IF9faW5pdCBjYWxpYnJhdGVfQVBJQ19jbG9jayh2b2lkKQotewotCXN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgKmxldnQgPSAmX19nZXRfY3B1X3ZhcihsYXBpY19ldmVudHMpOwotCWNvbnN0IGxvbmcgcG1fMTAwbXMgPSBQTVRNUl9USUNLU19QRVJfU0VDLzEwOwotCWNvbnN0IGxvbmcgcG1fdGhyZXNoID0gcG1fMTAwbXMvMTAwOwotCXZvaWQgKCpyZWFsX2hhbmRsZXIpKHN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgKmRldik7Ci0JdW5zaWduZWQgbG9uZyBkZWx0YWo7Ci0JbG9uZyBkZWx0YSwgZGVsdGFwbTsKLQlpbnQgcG1fcmVmZXJlbmNlZCA9IDA7Ci0KLQlsb2NhbF9pcnFfZGlzYWJsZSgpOwotCi0JLyogUmVwbGFjZSB0aGUgZ2xvYmFsIGludGVycnVwdCBoYW5kbGVyICovCi0JcmVhbF9oYW5kbGVyID0gZ2xvYmFsX2Nsb2NrX2V2ZW50LT5ldmVudF9oYW5kbGVyOwotCWdsb2JhbF9jbG9ja19ldmVudC0+ZXZlbnRfaGFuZGxlciA9IGxhcGljX2NhbF9oYW5kbGVyOwotCi0JLyoKLQkgKiBTZXR1cCB0aGUgQVBJQyBjb3VudGVyIHRvIDFlOS4gVGhlcmUgaXMgbm8gd2F5IHRoZSBsYXBpYwotCSAqIGNhbiB1bmRlcmZsb3cgaW4gdGhlIDEwMG1zIGRldGVjdGlvbiB0aW1lIGZyYW1lCi0JICovCi0JX19zZXR1cF9BUElDX0xWVFQoMTAwMDAwMDAwMCwgMCwgMCk7Ci0KLQkvKiBMZXQgdGhlIGludGVycnVwdHMgcnVuICovCi0JbG9jYWxfaXJxX2VuYWJsZSgpOwotCi0Jd2hpbGUgKGxhcGljX2NhbF9sb29wcyA8PSBMQVBJQ19DQUxfTE9PUFMpCi0JCWNwdV9yZWxheCgpOwotCi0JbG9jYWxfaXJxX2Rpc2FibGUoKTsKLQotCS8qIFJlc3RvcmUgdGhlIHJlYWwgZXZlbnQgaGFuZGxlciAqLwotCWdsb2JhbF9jbG9ja19ldmVudC0+ZXZlbnRfaGFuZGxlciA9IHJlYWxfaGFuZGxlcjsKLQotCS8qIEJ1aWxkIGRlbHRhIHQxLXQyIGFzIGFwaWMgdGltZXIgY291bnRzIGRvd24gKi8KLQlkZWx0YSA9IGxhcGljX2NhbF90MSAtIGxhcGljX2NhbF90MjsKLQlhcGljX3ByaW50ayhBUElDX1ZFUkJPU0UsICIuLi4gbGFwaWMgZGVsdGEgPSAlbGRcbiIsIGRlbHRhKTsKLQotCS8qIENoZWNrLCBpZiB0aGUgUE0gdGltZXIgaXMgYXZhaWxhYmxlICovCi0JZGVsdGFwbSA9IGxhcGljX2NhbF9wbTIgLSBsYXBpY19jYWxfcG0xOwotCWFwaWNfcHJpbnRrKEFQSUNfVkVSQk9TRSwgIi4uLiBQTSB0aW1lciBkZWx0YSA9ICVsZFxuIiwgZGVsdGFwbSk7Ci0KLQlpZiAoZGVsdGFwbSkgewotCQl1bnNpZ25lZCBsb25nIG11bHQ7Ci0JCXU2NCByZXM7Ci0KLQkJbXVsdCA9IGNsb2Nrc291cmNlX2h6Mm11bHQoUE1UTVJfVElDS1NfUEVSX1NFQywgMjIpOwotCi0JCWlmIChkZWx0YXBtID4gKHBtXzEwMG1zIC0gcG1fdGhyZXNoKSAmJgotCQkgICAgZGVsdGFwbSA8IChwbV8xMDBtcyArIHBtX3RocmVzaCkpIHsKLQkJCWFwaWNfcHJpbnRrKEFQSUNfVkVSQk9TRSwgIi4uLiBQTSB0aW1lciByZXN1bHQgb2tcbiIpOwotCQl9IGVsc2UgewotCQkJcmVzID0gKCgodTY0KSBkZWx0YXBtKSAqICBtdWx0KSA+PiAyMjsKLQkJCWRvX2RpdihyZXMsIDEwMDAwMDApOwotCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiQVBJQyBjYWxpYnJhdGlvbiBub3QgY29uc2lzdGVudCAiCi0JCQkgICAgICAgIndpdGggUE0gVGltZXI6ICVsZG1zIGluc3RlYWQgb2YgMTAwbXNcbiIsCi0JCQkgICAgICAgKGxvbmcpcmVzKTsKLQkJCS8qIENvcnJlY3QgdGhlIGxhcGljIGNvdW50ZXIgdmFsdWUgKi8KLQkJCXJlcyA9ICgoKHU2NCkgZGVsdGEpICogcG1fMTAwbXMpOwotCQkJZG9fZGl2KHJlcywgZGVsdGFwbSk7Ci0JCQlwcmludGsoS0VSTl9JTkZPICJBUElDIGRlbHRhIGFkanVzdGVkIHRvIFBNLVRpbWVyOiAiCi0JCQkgICAgICAgIiVsdSAoJWxkKVxuIiwgKHVuc2lnbmVkIGxvbmcpIHJlcywgZGVsdGEpOwotCQkJZGVsdGEgPSAobG9uZykgcmVzOwotCQl9Ci0JCXBtX3JlZmVyZW5jZWQgPSAxOwotCX0KLQotCS8qIENhbGN1bGF0ZSB0aGUgc2NhbGVkIG1hdGggbXVsdGlwbGljYXRpb24gZmFjdG9yICovCi0JbGFwaWNfY2xvY2tldmVudC5tdWx0ID0gZGl2X3NjKGRlbHRhLCBUSUNLX05TRUMgKiBMQVBJQ19DQUxfTE9PUFMsCi0JCQkJICAgICAgIGxhcGljX2Nsb2NrZXZlbnQuc2hpZnQpOwotCWxhcGljX2Nsb2NrZXZlbnQubWF4X2RlbHRhX25zID0KLQkJY2xvY2tldmVudF9kZWx0YTJucygweDdGRkZGRiwgJmxhcGljX2Nsb2NrZXZlbnQpOwotCWxhcGljX2Nsb2NrZXZlbnQubWluX2RlbHRhX25zID0KLQkJY2xvY2tldmVudF9kZWx0YTJucygweEYsICZsYXBpY19jbG9ja2V2ZW50KTsKLQotCWNhbGlicmF0aW9uX3Jlc3VsdCA9IChkZWx0YSAqIEFQSUNfRElWSVNPUikgLyBMQVBJQ19DQUxfTE9PUFM7Ci0KLQlhcGljX3ByaW50ayhBUElDX1ZFUkJPU0UsICIuLi4uLiBkZWx0YSAlbGRcbiIsIGRlbHRhKTsKLQlhcGljX3ByaW50ayhBUElDX1ZFUkJPU0UsICIuLi4uLiBtdWx0OiAlbGRcbiIsIGxhcGljX2Nsb2NrZXZlbnQubXVsdCk7Ci0JYXBpY19wcmludGsoQVBJQ19WRVJCT1NFLCAiLi4uLi4gY2FsaWJyYXRpb24gcmVzdWx0OiAldVxuIiwKLQkJICAgIGNhbGlicmF0aW9uX3Jlc3VsdCk7Ci0KLQlpZiAoY3B1X2hhc190c2MpIHsKLQkJZGVsdGEgPSAobG9uZykobGFwaWNfY2FsX3RzYzIgLSBsYXBpY19jYWxfdHNjMSk7Ci0JCWFwaWNfcHJpbnRrKEFQSUNfVkVSQk9TRSwgIi4uLi4uIENQVSBjbG9jayBzcGVlZCBpcyAiCi0JCQkgICAgIiVsZC4lMDRsZCBNSHouXG4iLAotCQkJICAgIChkZWx0YSAvIExBUElDX0NBTF9MT09QUykgLyAoMTAwMDAwMCAvIEhaKSwKLQkJCSAgICAoZGVsdGEgLyBMQVBJQ19DQUxfTE9PUFMpICUgKDEwMDAwMDAgLyBIWikpOwotCX0KLQotCWFwaWNfcHJpbnRrKEFQSUNfVkVSQk9TRSwgIi4uLi4uIGhvc3QgYnVzIGNsb2NrIHNwZWVkIGlzICIKLQkJICAgICIldS4lMDR1IE1Iei5cbiIsCi0JCSAgICBjYWxpYnJhdGlvbl9yZXN1bHQgLyAoMTAwMDAwMCAvIEhaKSwKLQkJICAgIGNhbGlicmF0aW9uX3Jlc3VsdCAlICgxMDAwMDAwIC8gSFopKTsKLQotCS8qCi0JICogRG8gYSBzYW5pdHkgY2hlY2sgb24gdGhlIEFQSUMgY2FsaWJyYXRpb24gcmVzdWx0Ci0JICovCi0JaWYgKGNhbGlicmF0aW9uX3Jlc3VsdCA8ICgxMDAwMDAwIC8gSFopKSB7Ci0JCWxvY2FsX2lycV9lbmFibGUoKTsKLQkJcHJpbnRrKEtFUk5fV0FSTklORwotCQkgICAgICAgIkFQSUMgZnJlcXVlbmN5IHRvbyBzbG93LCBkaXNhYmxpbmcgYXBpYyB0aW1lclxuIik7Ci0JCXJldHVybiAtMTsKLQl9Ci0KLQlsZXZ0LT5mZWF0dXJlcyAmPSB+Q0xPQ0tfRVZUX0ZFQVRfRFVNTVk7Ci0KLQkvKiBXZSB0cnVzdCB0aGUgcG0gdGltZXIgYmFzZWQgY2FsaWJyYXRpb24gKi8KLQlpZiAoIXBtX3JlZmVyZW5jZWQpIHsKLQkJYXBpY19wcmludGsoQVBJQ19WRVJCT1NFLCAiLi4uIHZlcmlmeSBBUElDIHRpbWVyXG4iKTsKLQotCQkvKgotCQkgKiBTZXR1cCB0aGUgYXBpYyB0aW1lciBtYW51YWxseQotCQkgKi8KLQkJbGV2dC0+ZXZlbnRfaGFuZGxlciA9IGxhcGljX2NhbF9oYW5kbGVyOwotCQlsYXBpY190aW1lcl9zZXR1cChDTE9DS19FVlRfTU9ERV9QRVJJT0RJQywgbGV2dCk7Ci0JCWxhcGljX2NhbF9sb29wcyA9IC0xOwotCi0JCS8qIExldCB0aGUgaW50ZXJydXB0cyBydW4gKi8KLQkJbG9jYWxfaXJxX2VuYWJsZSgpOwotCi0JCXdoaWxlIChsYXBpY19jYWxfbG9vcHMgPD0gTEFQSUNfQ0FMX0xPT1BTKQotCQkJY3B1X3JlbGF4KCk7Ci0KLQkJbG9jYWxfaXJxX2Rpc2FibGUoKTsKLQotCQkvKiBTdG9wIHRoZSBsYXBpYyB0aW1lciAqLwotCQlsYXBpY190aW1lcl9zZXR1cChDTE9DS19FVlRfTU9ERV9TSFVURE9XTiwgbGV2dCk7Ci0KLQkJbG9jYWxfaXJxX2VuYWJsZSgpOwotCi0JCS8qIEppZmZpZXMgZGVsdGEgKi8KLQkJZGVsdGFqID0gbGFwaWNfY2FsX2oyIC0gbGFwaWNfY2FsX2oxOwotCQlhcGljX3ByaW50ayhBUElDX1ZFUkJPU0UsICIuLi4gamlmZmllcyBkZWx0YSA9ICVsdVxuIiwgZGVsdGFqKTsKLQotCQkvKiBDaGVjaywgaWYgdGhlIGppZmZpZXMgcmVzdWx0IGlzIGNvbnNpc3RlbnQgKi8KLQkJaWYgKGRlbHRhaiA+PSBMQVBJQ19DQUxfTE9PUFMtMiAmJiBkZWx0YWogPD0gTEFQSUNfQ0FMX0xPT1BTKzIpCi0JCQlhcGljX3ByaW50ayhBUElDX1ZFUkJPU0UsICIuLi4gamlmZmllcyByZXN1bHQgb2tcbiIpOwotCQllbHNlCi0JCQlsZXZ0LT5mZWF0dXJlcyB8PSBDTE9DS19FVlRfRkVBVF9EVU1NWTsKLQl9IGVsc2UKLQkJbG9jYWxfaXJxX2VuYWJsZSgpOwotCi0JaWYgKGxldnQtPmZlYXR1cmVzICYgQ0xPQ0tfRVZUX0ZFQVRfRFVNTVkpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORwotCQkgICAgICAgIkFQSUMgdGltZXIgZGlzYWJsZWQgZHVlIHRvIHZlcmlmaWNhdGlvbiBmYWlsdXJlLlxuIik7Ci0JCQlyZXR1cm4gLTE7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qCi0gKiBTZXR1cCB0aGUgYm9vdCBBUElDCi0gKgotICogQ2FsaWJyYXRlIGFuZCB2ZXJpZnkgdGhlIHJlc3VsdC4KLSAqLwotdm9pZCBfX2luaXQgc2V0dXBfYm9vdF9BUElDX2Nsb2NrKHZvaWQpCi17Ci0JLyoKLQkgKiBUaGUgbG9jYWwgYXBpYyB0aW1lciBjYW4gYmUgZGlzYWJsZWQgdmlhIHRoZSBrZXJuZWwKLQkgKiBjb21tYW5kbGluZSBvciBmcm9tIHRoZSBDUFUgZGV0ZWN0aW9uIGNvZGUuIFJlZ2lzdGVyIHRoZSBsYXBpYwotCSAqIHRpbWVyIGFzIGEgZHVtbXkgY2xvY2sgZXZlbnQgc291cmNlIG9uIFNNUCBzeXN0ZW1zLCBzbyB0aGUKLQkgKiBicm9hZGNhc3QgbWVjaGFuaXNtIGlzIHVzZWQuIE9uIFVQIHN5c3RlbXMgc2ltcGx5IGlnbm9yZSBpdC4KLQkgKi8KLQlpZiAoZGlzYWJsZV9hcGljX3RpbWVyKSB7Ci0JCXByaW50ayhLRVJOX0lORk8gIkRpc2FibGluZyBBUElDIHRpbWVyXG4iKTsKLQkJLyogTm8gYnJvYWRjYXN0IG9uIFVQICEgKi8KLQkJaWYgKG51bV9wb3NzaWJsZV9jcHVzKCkgPiAxKSB7Ci0JCQlsYXBpY19jbG9ja2V2ZW50Lm11bHQgPSAxOwotCQkJc2V0dXBfQVBJQ190aW1lcigpOwotCQl9Ci0JCXJldHVybjsKLQl9Ci0KLQlhcGljX3ByaW50ayhBUElDX1ZFUkJPU0UsICJVc2luZyBsb2NhbCBBUElDIHRpbWVyIGludGVycnVwdHMuXG4iCi0JCSAgICAiY2FsaWJyYXRpbmcgQVBJQyB0aW1lciAuLi5cbiIpOwotCi0JaWYgKGNhbGlicmF0ZV9BUElDX2Nsb2NrKCkpIHsKLQkJLyogTm8gYnJvYWRjYXN0IG9uIFVQICEgKi8KLQkJaWYgKG51bV9wb3NzaWJsZV9jcHVzKCkgPiAxKQotCQkJc2V0dXBfQVBJQ190aW1lcigpOwotCQlyZXR1cm47Ci0JfQotCi0JLyoKLQkgKiBJZiBubWlfd2F0Y2hkb2cgaXMgc2V0IHRvIElPX0FQSUMsIHdlIG5lZWQgdGhlCi0JICogUElUL0hQRVQgZ29pbmcuICBPdGhlcndpc2UgcmVnaXN0ZXIgbGFwaWMgYXMgYSBkdW1teQotCSAqIGRldmljZS4KLQkgKi8KLQlpZiAobm1pX3dhdGNoZG9nICE9IE5NSV9JT19BUElDKQotCQlsYXBpY19jbG9ja2V2ZW50LmZlYXR1cmVzICY9IH5DTE9DS19FVlRfRkVBVF9EVU1NWTsKLQllbHNlCi0JCXByaW50ayhLRVJOX1dBUk5JTkcgIkFQSUMgdGltZXIgcmVnaXN0ZXJlZCBhcyBkdW1teSwiCi0JCQkiIGR1ZSB0byBubWlfd2F0Y2hkb2c9JWQhXG4iLCBubWlfd2F0Y2hkb2cpOwotCi0JLyogU2V0dXAgdGhlIGxhcGljIG9yIHJlcXVlc3QgdGhlIGJyb2FkY2FzdCAqLwotCXNldHVwX0FQSUNfdGltZXIoKTsKLX0KLQotdm9pZCBfX2RldmluaXQgc2V0dXBfc2Vjb25kYXJ5X0FQSUNfY2xvY2sodm9pZCkKLXsKLQlzZXR1cF9BUElDX3RpbWVyKCk7Ci19Ci0KLS8qCi0gKiBUaGUgZ3V0cyBvZiB0aGUgYXBpYyB0aW1lciBpbnRlcnJ1cHQKLSAqLwotc3RhdGljIHZvaWQgbG9jYWxfYXBpY190aW1lcl9pbnRlcnJ1cHQodm9pZCkKLXsKLQlpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwotCXN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgKmV2dCA9ICZwZXJfY3B1KGxhcGljX2V2ZW50cywgY3B1KTsKLQotCS8qCi0JICogTm9ybWFsbHkgd2Ugc2hvdWxkIG5vdCBiZSBoZXJlIHRpbGwgTEFQSUMgaGFzIGJlZW4gaW5pdGlhbGl6ZWQgYnV0Ci0JICogaW4gc29tZSBjYXNlcyBsaWtlIGtkdW1wLCBpdHMgcG9zc2libGUgdGhhdCB0aGVyZSBpcyBhIHBlbmRpbmcgTEFQSUMKLQkgKiB0aW1lciBpbnRlcnJ1cHQgZnJvbSBwcmV2aW91cyBrZXJuZWwncyBjb250ZXh0IGFuZCBpcyBkZWxpdmVyZWQgaW4KLQkgKiBuZXcga2VybmVsIHRoZSBtb21lbnQgaW50ZXJydXB0cyBhcmUgZW5hYmxlZC4KLQkgKgotCSAqIEludGVycnVwdHMgYXJlIGVuYWJsZWQgZWFybHkgYW5kIExBUElDIGlzIHNldHVwIG11Y2ggbGF0ZXIsIGhlbmNlCi0JICogaXRzIHBvc3NpYmxlIHRoYXQgd2hlbiB3ZSBnZXQgaGVyZSBldnQtPmV2ZW50X2hhbmRsZXIgaXMgTlVMTC4KLQkgKiBDaGVjayBmb3IgZXZlbnRfaGFuZGxlciBiZWluZyBOVUxMIGFuZCBkaXNjYXJkIHRoZSBpbnRlcnJ1cHQgYXMKLQkgKiBzcHVyaW91cy4KLQkgKi8KLQlpZiAoIWV2dC0+ZXZlbnRfaGFuZGxlcikgewotCQlwcmludGsoS0VSTl9XQVJOSU5HCi0JCSAgICAgICAiU3B1cmlvdXMgTEFQSUMgdGltZXIgaW50ZXJydXB0IG9uIGNwdSAlZFxuIiwgY3B1KTsKLQkJLyogU3dpdGNoIGl0IG9mZiAqLwotCQlsYXBpY190aW1lcl9zZXR1cChDTE9DS19FVlRfTU9ERV9TSFVURE9XTiwgZXZ0KTsKLQkJcmV0dXJuOwotCX0KLQotCS8qCi0JICogdGhlIE5NSSBkZWFkbG9jay1kZXRlY3RvciB1c2VzIHRoaXMuCi0JICovCi0jaWZkZWYgQ09ORklHX1g4Nl82NAotCWFkZF9wZGEoYXBpY190aW1lcl9pcnFzLCAxKTsKLSNlbHNlCi0JcGVyX2NwdShpcnFfc3RhdCwgY3B1KS5hcGljX3RpbWVyX2lycXMrKzsKLSNlbmRpZgotCi0JZXZ0LT5ldmVudF9oYW5kbGVyKGV2dCk7Ci19Ci0KLS8qCi0gKiBMb2NhbCBBUElDIHRpbWVyIGludGVycnVwdC4gVGhpcyBpcyB0aGUgbW9zdCBuYXR1cmFsIHdheSBmb3IgZG9pbmcKLSAqIGxvY2FsIGludGVycnVwdHMsIGJ1dCBsb2NhbCB0aW1lciBpbnRlcnJ1cHRzIGNhbiBiZSBlbXVsYXRlZCBieQotICogYnJvYWRjYXN0IGludGVycnVwdHMgdG9vLiBbaW4gY2FzZSB0aGUgaHcgZG9lc24ndCBzdXBwb3J0IEFQSUMgdGltZXJzXQotICoKLSAqIFsgaWYgYSBzaW5nbGUtQ1BVIHN5c3RlbSBydW5zIGFuIFNNUCBrZXJuZWwgdGhlbiB3ZSBjYWxsIHRoZSBsb2NhbAotICogICBpbnRlcnJ1cHQgYXMgd2VsbC4gVGh1cyB3ZSBjYW5ub3QgaW5saW5lIHRoZSBsb2NhbCBpcnEgLi4uIF0KLSAqLwotdm9pZCBzbXBfYXBpY190aW1lcl9pbnRlcnJ1cHQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCi17Ci0Jc3RydWN0IHB0X3JlZ3MgKm9sZF9yZWdzID0gc2V0X2lycV9yZWdzKHJlZ3MpOwotCi0JLyoKLQkgKiBOT1RFISBXZSdkIGJldHRlciBBQ0sgdGhlIGlycSBpbW1lZGlhdGVseSwKLQkgKiBiZWNhdXNlIHRpbWVyIGhhbmRsaW5nIGNhbiBiZSBzbG93LgotCSAqLwotCWFja19BUElDX2lycSgpOwotCS8qCi0JICogdXBkYXRlX3Byb2Nlc3NfdGltZXMoKSBleHBlY3RzIHVzIHRvIGhhdmUgZG9uZSBpcnFfZW50ZXIoKS4KLQkgKiBCZXNpZGVzLCBpZiB3ZSBkb24ndCB0aW1lciBpbnRlcnJ1cHRzIGlnbm9yZSB0aGUgZ2xvYmFsCi0JICogaW50ZXJydXB0IGxvY2ssIHdoaWNoIGlzIHRoZSBXcm9uZ1RoaW5nICh0bSkgdG8gZG8uCi0JICovCi0JaXJxX2VudGVyKCk7Ci0JbG9jYWxfYXBpY190aW1lcl9pbnRlcnJ1cHQoKTsKLQlpcnFfZXhpdCgpOwotCi0Jc2V0X2lycV9yZWdzKG9sZF9yZWdzKTsKLX0KLQotaW50IHNldHVwX3Byb2ZpbGluZ190aW1lcih1bnNpZ25lZCBpbnQgbXVsdGlwbGllcikKLXsKLQlyZXR1cm4gLUVJTlZBTDsKLX0KLQotLyoKLSAqIExvY2FsIEFQSUMgc3RhcnQgYW5kIHNodXRkb3duCi0gKi8KLQotLyoqCi0gKiBjbGVhcl9sb2NhbF9BUElDIC0gc2h1dGRvd24gdGhlIGxvY2FsIEFQSUMKLSAqCi0gKiBUaGlzIGlzIGNhbGxlZCwgd2hlbiBhIENQVSBpcyBkaXNhYmxlZCBhbmQgYmVmb3JlIHJlYm9vdGluZywgc28gdGhlIHN0YXRlIG9mCi0gKiB0aGUgbG9jYWwgQVBJQyBoYXMgbm8gZGFuZ2xpbmcgbGVmdG92ZXJzLiBBbHNvIHVzZWQgdG8gY2xlYW5vdXQgYW55IEJJT1MKLSAqIGxlZnRvdmVycyBkdXJpbmcgYm9vdC4KLSAqLwotdm9pZCBjbGVhcl9sb2NhbF9BUElDKHZvaWQpCi17Ci0JaW50IG1heGx2dDsKLQl1MzIgdjsKLQotCS8qIEFQSUMgaGFzbid0IGJlZW4gbWFwcGVkIHlldCAqLwotCWlmICghYXBpY19waHlzKQotCQlyZXR1cm47Ci0KLQltYXhsdnQgPSBsYXBpY19nZXRfbWF4bHZ0KCk7Ci0JLyoKLQkgKiBNYXNraW5nIGFuIExWVCBlbnRyeSBjYW4gdHJpZ2dlciBhIGxvY2FsIEFQSUMgZXJyb3IKLQkgKiBpZiB0aGUgdmVjdG9yIGlzIHplcm8uIE1hc2sgTFZURVJSIGZpcnN0IHRvIHByZXZlbnQgdGhpcy4KLQkgKi8KLQlpZiAobWF4bHZ0ID49IDMpIHsKLQkJdiA9IEVSUk9SX0FQSUNfVkVDVE9SOyAvKiBhbnkgbm9uLXplcm8gdmVjdG9yIHdpbGwgZG8gKi8KLQkJYXBpY193cml0ZShBUElDX0xWVEVSUiwgdiB8IEFQSUNfTFZUX01BU0tFRCk7Ci0JfQotCS8qCi0JICogQ2FyZWZ1bDogd2UgaGF2ZSB0byBzZXQgbWFza3Mgb25seSBmaXJzdCB0byBkZWFzc2VydAotCSAqIGFueSBsZXZlbC10cmlnZ2VyZWQgc291cmNlcy4KLQkgKi8KLQl2ID0gYXBpY19yZWFkKEFQSUNfTFZUVCk7Ci0JYXBpY193cml0ZShBUElDX0xWVFQsIHYgfCBBUElDX0xWVF9NQVNLRUQpOwotCXYgPSBhcGljX3JlYWQoQVBJQ19MVlQwKTsKLQlhcGljX3dyaXRlKEFQSUNfTFZUMCwgdiB8IEFQSUNfTFZUX01BU0tFRCk7Ci0JdiA9IGFwaWNfcmVhZChBUElDX0xWVDEpOwotCWFwaWNfd3JpdGUoQVBJQ19MVlQxLCB2IHwgQVBJQ19MVlRfTUFTS0VEKTsKLQlpZiAobWF4bHZ0ID49IDQpIHsKLQkJdiA9IGFwaWNfcmVhZChBUElDX0xWVFBDKTsKLQkJYXBpY193cml0ZShBUElDX0xWVFBDLCB2IHwgQVBJQ19MVlRfTUFTS0VEKTsKLQl9Ci0KLQkvKiBsZXRzIG5vdCB0b3VjaCB0aGlzIGlmIHdlIGRpZG4ndCBmcm9iIGl0ICovCi0jaWYgZGVmaW5lZChDT05GSUdfWDg2X01DRV9QNFRIRVJNQUwpIHx8IGRlZmluZWQoWDg2X01DRV9JTlRFTCkKLQlpZiAobWF4bHZ0ID49IDUpIHsKLQkJdiA9IGFwaWNfcmVhZChBUElDX0xWVFRITVIpOwotCQlhcGljX3dyaXRlKEFQSUNfTFZUVEhNUiwgdiB8IEFQSUNfTFZUX01BU0tFRCk7Ci0JfQotI2VuZGlmCi0JLyoKLQkgKiBDbGVhbiBBUElDIHN0YXRlIGZvciBvdGhlciBPU3M6Ci0JICovCi0JYXBpY193cml0ZShBUElDX0xWVFQsIEFQSUNfTFZUX01BU0tFRCk7Ci0JYXBpY193cml0ZShBUElDX0xWVDAsIEFQSUNfTFZUX01BU0tFRCk7Ci0JYXBpY193cml0ZShBUElDX0xWVDEsIEFQSUNfTFZUX01BU0tFRCk7Ci0JaWYgKG1heGx2dCA+PSAzKQotCQlhcGljX3dyaXRlKEFQSUNfTFZURVJSLCBBUElDX0xWVF9NQVNLRUQpOwotCWlmIChtYXhsdnQgPj0gNCkKLQkJYXBpY193cml0ZShBUElDX0xWVFBDLCBBUElDX0xWVF9NQVNLRUQpOwotCi0JLyogSW50ZWdyYXRlZCBBUElDICghODI0ODlEWCkgPyAqLwotCWlmIChsYXBpY19pc19pbnRlZ3JhdGVkKCkpIHsKLQkJaWYgKG1heGx2dCA+IDMpCi0JCQkvKiBDbGVhciBFU1IgZHVlIHRvIFBlbnRpdW0gZXJyYXRhIDNBUCBhbmQgMTFBUCAqLwotCQkJYXBpY193cml0ZShBUElDX0VTUiwgMCk7Ci0JCWFwaWNfcmVhZChBUElDX0VTUik7Ci0JfQotfQotCi0vKioKLSAqIGRpc2FibGVfbG9jYWxfQVBJQyAtIGNsZWFyIGFuZCBkaXNhYmxlIHRoZSBsb2NhbCBBUElDCi0gKi8KLXZvaWQgZGlzYWJsZV9sb2NhbF9BUElDKHZvaWQpCi17Ci0JdW5zaWduZWQgaW50IHZhbHVlOwotCi0JY2xlYXJfbG9jYWxfQVBJQygpOwotCi0JLyoKLQkgKiBEaXNhYmxlIEFQSUMgKGltcGxpZXMgY2xlYXJpbmcgb2YgcmVnaXN0ZXJzCi0JICogZm9yIDgyNDg5RFghKS4KLQkgKi8KLQl2YWx1ZSA9IGFwaWNfcmVhZChBUElDX1NQSVYpOwotCXZhbHVlICY9IH5BUElDX1NQSVZfQVBJQ19FTkFCTEVEOwotCWFwaWNfd3JpdGUoQVBJQ19TUElWLCB2YWx1ZSk7Ci0KLSNpZmRlZiBDT05GSUdfWDg2XzMyCi0JLyoKLQkgKiBXaGVuIExBUElDIHdhcyBkaXNhYmxlZCBieSB0aGUgQklPUyBhbmQgZW5hYmxlZCBieSB0aGUga2VybmVsLAotCSAqIHJlc3RvcmUgdGhlIGRpc2FibGVkIHN0YXRlLgotCSAqLwotCWlmIChlbmFibGVkX3ZpYV9hcGljYmFzZSkgewotCQl1bnNpZ25lZCBpbnQgbCwgaDsKLQotCQlyZG1zcihNU1JfSUEzMl9BUElDQkFTRSwgbCwgaCk7Ci0JCWwgJj0gfk1TUl9JQTMyX0FQSUNCQVNFX0VOQUJMRTsKLQkJd3Jtc3IoTVNSX0lBMzJfQVBJQ0JBU0UsIGwsIGgpOwotCX0KLSNlbmRpZgotfQotCi0vKgotICogSWYgTGludXggZW5hYmxlZCB0aGUgTEFQSUMgYWdhaW5zdCB0aGUgQklPUyBkZWZhdWx0IGRpc2FibGUgaXQgZG93biBiZWZvcmUKLSAqIHJlLWVudGVyaW5nIHRoZSBCSU9TIG9uIHNodXRkb3duLiAgT3RoZXJ3aXNlIHRoZSBCSU9TIG1heSBnZXQgY29uZnVzZWQgYW5kCi0gKiBub3QgcG93ZXItb2ZmLiAgQWRkaXRpb25hbGx5IGNsZWFyIGFsbCBMVlQgZW50cmllcyBiZWZvcmUgZGlzYWJsZV9sb2NhbF9BUElDCi0gKiBmb3IgdGhlIGNhc2Ugd2hlcmUgTGludXggZGlkbid0IGVuYWJsZSB0aGUgTEFQSUMuCi0gKi8KLXZvaWQgbGFwaWNfc2h1dGRvd24odm9pZCkKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JaWYgKCFjcHVfaGFzX2FwaWMpCi0JCXJldHVybjsKLQotCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQotI2lmZGVmIENPTkZJR19YODZfMzIKLQlpZiAoIWVuYWJsZWRfdmlhX2FwaWNiYXNlKQotCQljbGVhcl9sb2NhbF9BUElDKCk7Ci0JZWxzZQotI2VuZGlmCi0JCWRpc2FibGVfbG9jYWxfQVBJQygpOwotCi0KLQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Ci19Ci0KLS8qCi0gKiBUaGlzIGlzIHRvIHZlcmlmeSB0aGF0IHdlJ3JlIGxvb2tpbmcgYXQgYSByZWFsIGxvY2FsIEFQSUMuCi0gKiBDaGVjayB0aGVzZSBhZ2FpbnN0IHlvdXIgYm9hcmQgaWYgdGhlIENQVXMgYXJlbid0IGdldHRpbmcKLSAqIHN0YXJ0ZWQgZm9yIG5vIGFwcGFyZW50IHJlYXNvbi4KLSAqLwotaW50IF9faW5pdCB2ZXJpZnlfbG9jYWxfQVBJQyh2b2lkKQotewotCXVuc2lnbmVkIGludCByZWcwLCByZWcxOwotCi0JLyoKLQkgKiBUaGUgdmVyc2lvbiByZWdpc3RlciBpcyByZWFkLW9ubHkgaW4gYSByZWFsIEFQSUMuCi0JICovCi0JcmVnMCA9IGFwaWNfcmVhZChBUElDX0xWUik7Ci0JYXBpY19wcmludGsoQVBJQ19ERUJVRywgIkdldHRpbmcgVkVSU0lPTjogJXhcbiIsIHJlZzApOwotCWFwaWNfd3JpdGUoQVBJQ19MVlIsIHJlZzAgXiBBUElDX0xWUl9NQVNLKTsKLQlyZWcxID0gYXBpY19yZWFkKEFQSUNfTFZSKTsKLQlhcGljX3ByaW50ayhBUElDX0RFQlVHLCAiR2V0dGluZyBWRVJTSU9OOiAleFxuIiwgcmVnMSk7Ci0KLQkvKgotCSAqIFRoZSB0d28gdmVyc2lvbiByZWFkcyBhYm92ZSBzaG91bGQgcHJpbnQgdGhlIHNhbWUKLQkgKiBudW1iZXJzLiAgSWYgdGhlIHNlY29uZCBvbmUgaXMgZGlmZmVyZW50LCB0aGVuIHdlCi0JICogcG9rZSBhdCBhIG5vbi1BUElDLgotCSAqLwotCWlmIChyZWcxICE9IHJlZzApCi0JCXJldHVybiAwOwotCi0JLyoKLQkgKiBDaGVjayBpZiB0aGUgdmVyc2lvbiBsb29rcyByZWFzb25hYmx5LgotCSAqLwotCXJlZzEgPSBHRVRfQVBJQ19WRVJTSU9OKHJlZzApOwotCWlmIChyZWcxID09IDB4MDAgfHwgcmVnMSA9PSAweGZmKQotCQlyZXR1cm4gMDsKLQlyZWcxID0gbGFwaWNfZ2V0X21heGx2dCgpOwotCWlmIChyZWcxIDwgMHgwMiB8fCByZWcxID09IDB4ZmYpCi0JCXJldHVybiAwOwotCi0JLyoKLQkgKiBUaGUgSUQgcmVnaXN0ZXIgaXMgcmVhZC93cml0ZSBpbiBhIHJlYWwgQVBJQy4KLQkgKi8KLQlyZWcwID0gYXBpY19yZWFkKEFQSUNfSUQpOwotCWFwaWNfcHJpbnRrKEFQSUNfREVCVUcsICJHZXR0aW5nIElEOiAleFxuIiwgcmVnMCk7Ci0JYXBpY193cml0ZShBUElDX0lELCByZWcwIF4gQVBJQ19JRF9NQVNLKTsKLQlyZWcxID0gYXBpY19yZWFkKEFQSUNfSUQpOwotCWFwaWNfcHJpbnRrKEFQSUNfREVCVUcsICJHZXR0aW5nIElEOiAleFxuIiwgcmVnMSk7Ci0JYXBpY193cml0ZShBUElDX0lELCByZWcwKTsKLQlpZiAocmVnMSAhPSAocmVnMCBeIEFQSUNfSURfTUFTSykpCi0JCXJldHVybiAwOwotCi0JLyoKLQkgKiBUaGUgbmV4dCB0d28gYXJlIGp1c3QgdG8gc2VlIGlmIHdlIGhhdmUgc2FuZSB2YWx1ZXMuCi0JICogVGhleSdyZSBvbmx5IHJlYWxseSByZWxldmFudCBpZiB3ZSdyZSBpbiBWaXJ0dWFsIFdpcmUKLQkgKiBjb21wYXRpYmlsaXR5IG1vZGUsIGJ1dCBtb3N0IGJveGVzIGFyZSBhbnltb3JlLgotCSAqLwotCXJlZzAgPSBhcGljX3JlYWQoQVBJQ19MVlQwKTsKLQlhcGljX3ByaW50ayhBUElDX0RFQlVHLCAiR2V0dGluZyBMVlQwOiAleFxuIiwgcmVnMCk7Ci0JcmVnMSA9IGFwaWNfcmVhZChBUElDX0xWVDEpOwotCWFwaWNfcHJpbnRrKEFQSUNfREVCVUcsICJHZXR0aW5nIExWVDE6ICV4XG4iLCByZWcxKTsKLQotCXJldHVybiAxOwotfQotCi0vKioKLSAqIHN5bmNfQXJiX0lEcyAtIHN5bmNocm9uaXplIEFQSUMgYnVzIGFyYml0cmF0aW9uIElEcwotICovCi12b2lkIF9faW5pdCBzeW5jX0FyYl9JRHModm9pZCkKLXsKLQkvKgotCSAqIFVuc3VwcG9ydGVkIG9uIFA0IC0gc2VlIEludGVsIERldi4gTWFudWFsIFZvbC4gMywgQ2guIDguNi4xIEFuZCBub3QKLQkgKiBuZWVkZWQgb24gQU1ELgotCSAqLwotCWlmIChtb2Rlcm5fYXBpYygpIHx8IGJvb3RfY3B1X2RhdGEueDg2X3ZlbmRvciA9PSBYODZfVkVORE9SX0FNRCkKLQkJcmV0dXJuOwotCi0JLyoKLQkgKiBXYWl0IGZvciBpZGxlLgotCSAqLwotCWFwaWNfd2FpdF9pY3JfaWRsZSgpOwotCi0JYXBpY19wcmludGsoQVBJQ19ERUJVRywgIlN5bmNocm9uaXppbmcgQXJiIElEcy5cbiIpOwotCWFwaWNfd3JpdGUoQVBJQ19JQ1IsIEFQSUNfREVTVF9BTExJTkMgfAotCQkJQVBJQ19JTlRfTEVWRUxUUklHIHwgQVBJQ19ETV9JTklUKTsKLX0KLQotLyoKLSAqIEFuIGluaXRpYWwgc2V0dXAgb2YgdGhlIHZpcnR1YWwgd2lyZSBtb2RlLgotICovCi12b2lkIF9faW5pdCBpbml0X2JzcF9BUElDKHZvaWQpCi17Ci0JdW5zaWduZWQgaW50IHZhbHVlOwotCi0JLyoKLQkgKiBEb24ndCBkbyB0aGUgc2V0dXAgbm93IGlmIHdlIGhhdmUgYSBTTVAgQklPUyBhcyB0aGUKLQkgKiB0aHJvdWdoLUkvTy1BUElDIHZpcnR1YWwgd2lyZSBtb2RlIG1pZ2h0IGJlIGFjdGl2ZS4KLQkgKi8KLQlpZiAoc21wX2ZvdW5kX2NvbmZpZyB8fCAhY3B1X2hhc19hcGljKQotCQlyZXR1cm47Ci0KLQkvKgotCSAqIERvIG5vdCB0cnVzdCB0aGUgbG9jYWwgQVBJQyBiZWluZyBlbXB0eSBhdCBib290dXAuCi0JICovCi0JY2xlYXJfbG9jYWxfQVBJQygpOwotCi0JLyoKLQkgKiBFbmFibGUgQVBJQy4KLQkgKi8KLQl2YWx1ZSA9IGFwaWNfcmVhZChBUElDX1NQSVYpOwotCXZhbHVlICY9IH5BUElDX1ZFQ1RPUl9NQVNLOwotCXZhbHVlIHw9IEFQSUNfU1BJVl9BUElDX0VOQUJMRUQ7Ci0KLSNpZmRlZiBDT05GSUdfWDg2XzMyCi0JLyogVGhpcyBiaXQgaXMgcmVzZXJ2ZWQgb24gUDQvWGVvbiBhbmQgc2hvdWxkIGJlIGNsZWFyZWQgKi8KLQlpZiAoKGJvb3RfY3B1X2RhdGEueDg2X3ZlbmRvciA9PSBYODZfVkVORE9SX0lOVEVMKSAmJgotCSAgICAoYm9vdF9jcHVfZGF0YS54ODYgPT0gMTUpKQotCQl2YWx1ZSAmPSB+QVBJQ19TUElWX0ZPQ1VTX0RJU0FCTEVEOwotCWVsc2UKLSNlbmRpZgotCQl2YWx1ZSB8PSBBUElDX1NQSVZfRk9DVVNfRElTQUJMRUQ7Ci0JdmFsdWUgfD0gU1BVUklPVVNfQVBJQ19WRUNUT1I7Ci0JYXBpY193cml0ZShBUElDX1NQSVYsIHZhbHVlKTsKLQotCS8qCi0JICogU2V0IHVwIHRoZSB2aXJ0dWFsIHdpcmUgbW9kZS4KLQkgKi8KLQlhcGljX3dyaXRlKEFQSUNfTFZUMCwgQVBJQ19ETV9FWFRJTlQpOwotCXZhbHVlID0gQVBJQ19ETV9OTUk7Ci0JaWYgKCFsYXBpY19pc19pbnRlZ3JhdGVkKCkpCQkvKiA4MjQ4OURYICovCi0JCXZhbHVlIHw9IEFQSUNfTFZUX0xFVkVMX1RSSUdHRVI7Ci0JYXBpY193cml0ZShBUElDX0xWVDEsIHZhbHVlKTsKLX0KLQotc3RhdGljIHZvaWQgX19jcHVpbml0IGxhcGljX3NldHVwX2Vzcih2b2lkKQotewotCXVuc2lnbmVkIGxvbmcgb2xkdmFsdWUsIHZhbHVlLCBtYXhsdnQ7Ci0JaWYgKGxhcGljX2lzX2ludGVncmF0ZWQoKSAmJiAhZXNyX2Rpc2FibGUpIHsKLQkJaWYgKGVzcl9kaXNhYmxlKSB7Ci0JCQkvKgotCQkJICogU29tZXRoaW5nIHVudHJhY2VhYmxlIGlzIGNyZWF0aW5nIGJhZCBpbnRlcnJ1cHRzIG9uCi0JCQkgKiBzZWNvbmRhcnkgcXVhZHMgLi4uIGZvciB0aGUgbW9tZW50LCBqdXN0IGxlYXZlIHRoZQotCQkJICogRVNSIGRpc2FibGVkIC0gd2UgY2FuJ3QgZG8gYW55dGhpbmcgdXNlZnVsIHdpdGggdGhlCi0JCQkgKiBlcnJvcnMgYW55d2F5IC0gbWJsaWdoCi0JCQkgKi8KLQkJCXByaW50ayhLRVJOX0lORk8gIkxlYXZpbmcgRVNSIGRpc2FibGVkLlxuIik7Ci0JCQlyZXR1cm47Ci0JCX0KLQkJLyogITgyNDg5RFggKi8KLQkJbWF4bHZ0ID0gbGFwaWNfZ2V0X21heGx2dCgpOwotCQlpZiAobWF4bHZ0ID4gMykJCS8qIER1ZSB0byB0aGUgUGVudGl1bSBlcnJhdHVtIDNBUC4gKi8KLQkJCWFwaWNfd3JpdGUoQVBJQ19FU1IsIDApOwotCQlvbGR2YWx1ZSA9IGFwaWNfcmVhZChBUElDX0VTUik7Ci0KLQkJLyogZW5hYmxlcyBzZW5kaW5nIGVycm9ycyAqLwotCQl2YWx1ZSA9IEVSUk9SX0FQSUNfVkVDVE9SOwotCQlhcGljX3dyaXRlKEFQSUNfTFZURVJSLCB2YWx1ZSk7Ci0JCS8qCi0JCSAqIHNwZWMgc2F5cyBjbGVhciBlcnJvcnMgYWZ0ZXIgZW5hYmxpbmcgdmVjdG9yLgotCQkgKi8KLQkJaWYgKG1heGx2dCA+IDMpCi0JCQlhcGljX3dyaXRlKEFQSUNfRVNSLCAwKTsKLQkJdmFsdWUgPSBhcGljX3JlYWQoQVBJQ19FU1IpOwotCQlpZiAodmFsdWUgIT0gb2xkdmFsdWUpCi0JCQlhcGljX3ByaW50ayhBUElDX1ZFUkJPU0UsICJFU1IgdmFsdWUgYmVmb3JlIGVuYWJsaW5nICIKLQkJCQkidmVjdG9yOiAweCUwOGx4ICBhZnRlcjogMHglMDhseFxuIiwKLQkJCQlvbGR2YWx1ZSwgdmFsdWUpOwotCX0gZWxzZSB7Ci0JCXByaW50ayhLRVJOX0lORk8gIk5vIEVTUiBmb3IgODI0ODlEWC5cbiIpOwotCX0KLX0KLQotCi0vKioKLSAqIHNldHVwX2xvY2FsX0FQSUMgLSBzZXR1cCB0aGUgbG9jYWwgQVBJQwotICovCi12b2lkIF9fY3B1aW5pdCBzZXR1cF9sb2NhbF9BUElDKHZvaWQpCi17Ci0JdW5zaWduZWQgbG9uZyB2YWx1ZSwgaW50ZWdyYXRlZDsKLQlpbnQgaSwgajsKLQotCS8qIFBvdW5kIHRoZSBFU1IgcmVhbGx5IGhhcmQgb3ZlciB0aGUgaGVhZCB3aXRoIGEgYmlnIGhhbW1lciAtIG1ibGlnaCAqLwotCWlmIChlc3JfZGlzYWJsZSkgewotCQlhcGljX3dyaXRlKEFQSUNfRVNSLCAwKTsKLQkJYXBpY193cml0ZShBUElDX0VTUiwgMCk7Ci0JCWFwaWNfd3JpdGUoQVBJQ19FU1IsIDApOwotCQlhcGljX3dyaXRlKEFQSUNfRVNSLCAwKTsKLQl9Ci0KLQlpbnRlZ3JhdGVkID0gbGFwaWNfaXNfaW50ZWdyYXRlZCgpOwotCi0JLyoKLQkgKiBEb3VibGUtY2hlY2sgd2hldGhlciB0aGlzIEFQSUMgaXMgcmVhbGx5IHJlZ2lzdGVyZWQuCi0JICovCi0JaWYgKCFhcGljX2lkX3JlZ2lzdGVyZWQoKSkKLQkJV0FSTl9PTl9PTkNFKDEpOwotCi0JLyoKLQkgKiBJbnRlbCByZWNvbW1lbmRzIHRvIHNldCBERlIsIExEUiBhbmQgVFBSIGJlZm9yZSBlbmFibGluZwotCSAqIGFuIEFQSUMuICBTZWUgZS5nLiAiQVAtMzg4IDgyNDg5RFggVXNlcidzIE1hbnVhbCIgKEludGVsCi0JICogZG9jdW1lbnQgbnVtYmVyIDI5MjExNikuICBTbyBoZXJlIGl0IGdvZXMuLi4KLQkgKi8KLQlpbml0X2FwaWNfbGRyKCk7Ci0KLQkvKgotCSAqIFNldCBUYXNrIFByaW9yaXR5IHRvICdhY2NlcHQgYWxsJy4gV2UgbmV2ZXIgY2hhbmdlIHRoaXMKLQkgKiBsYXRlciBvbi4KLQkgKi8KLQl2YWx1ZSA9IGFwaWNfcmVhZChBUElDX1RBU0tQUkkpOwotCXZhbHVlICY9IH5BUElDX1RQUklfTUFTSzsKLQlhcGljX3dyaXRlKEFQSUNfVEFTS1BSSSwgdmFsdWUpOwotCi0JLyoKLQkgKiBBZnRlciBhIGNyYXNoLCB3ZSBubyBsb25nZXIgc2VydmljZSB0aGUgaW50ZXJydXB0cyBhbmQgYSBwZW5kaW5nCi0JICogaW50ZXJydXB0IGZyb20gcHJldmlvdXMga2VybmVsIG1pZ2h0IHN0aWxsIGhhdmUgSVNSIGJpdCBzZXQuCi0JICoKLQkgKiBNb3N0IHByb2JhYmx5IGJ5IG5vdyBDUFUgaGFzIHNlcnZpY2VkIHRoYXQgcGVuZGluZyBpbnRlcnJ1cHQgYW5kCi0JICogaXQgbWlnaHQgbm90IGhhdmUgZG9uZSB0aGUgYWNrX0FQSUNfaXJxKCkgYmVjYXVzZSBpdCB0aG91Z2h0LAotCSAqIGludGVycnVwdCBjYW1lIGZyb20gaTgyNTkgYXMgRXh0SW50LiBMQVBJQyBkaWQgbm90IGdldCBFT0kgc28gaXQKLQkgKiBkb2VzIG5vdCBjbGVhciB0aGUgSVNSIGJpdCBhbmQgY3B1IHRoaW5rcyBpdCBoYXMgYWxyZWFkeSBzZXJpdmNlZAotCSAqIHRoZSBpbnRlcnJ1cHQuIEhlbmNlIGEgdmVjdG9yIG1pZ2h0IGdldCBsb2NrZWQuIEl0IHdhcyBub3RpY2VkCi0JICogZm9yIHRpbWVyIGlycSAodmVjdG9yIDB4MzEpLiBJc3N1ZSBhbiBleHRyYSBFT0kgdG8gY2xlYXIgSVNSLgotCSAqLwotCWZvciAoaSA9IEFQSUNfSVNSX05SIC0gMTsgaSA+PSAwOyBpLS0pIHsKLQkJdmFsdWUgPSBhcGljX3JlYWQoQVBJQ19JU1IgKyBpKjB4MTApOwotCQlmb3IgKGogPSAzMTsgaiA+PSAwOyBqLS0pIHsKLQkJCWlmICh2YWx1ZSAmICgxPDxqKSkKLQkJCQlhY2tfQVBJQ19pcnEoKTsKLQkJfQotCX0KLQotCS8qCi0JICogTm93IHRoYXQgd2UgYXJlIGFsbCBzZXQgdXAsIGVuYWJsZSB0aGUgQVBJQwotCSAqLwotCXZhbHVlID0gYXBpY19yZWFkKEFQSUNfU1BJVik7Ci0JdmFsdWUgJj0gfkFQSUNfVkVDVE9SX01BU0s7Ci0JLyoKLQkgKiBFbmFibGUgQVBJQwotCSAqLwotCXZhbHVlIHw9IEFQSUNfU1BJVl9BUElDX0VOQUJMRUQ7Ci0KLQkvKgotCSAqIFNvbWUgdW5rbm93biBJbnRlbCBJTy9BUElDIChvciBBUElDKSBlcnJhdGEgaXMgYml0aW5nIHVzIHdpdGgKLQkgKiBjZXJ0YWluIG5ldHdvcmtpbmcgY2FyZHMuIElmIGhpZ2ggZnJlcXVlbmN5IGludGVycnVwdHMgYXJlCi0JICogaGFwcGVuaW5nIG9uIGEgcGFydGljdWxhciBJT0FQSUMgcGluLCBwbHVzIHRoZSBJT0FQSUMgcm91dGluZwotCSAqIGVudHJ5IGlzIG1hc2tlZC91bm1hc2tlZCBhdCBhIGhpZ2ggcmF0ZSBhcyB3ZWxsIHRoZW4gc29vbmVyIG9yCi0JICogbGF0ZXIgSU9BUElDIGxpbmUgZ2V0cyAnc3R1Y2snLCBubyBtb3JlIGludGVycnVwdHMgYXJlIHJlY2VpdmVkCi0JICogZnJvbSB0aGUgZGV2aWNlLiBJZiBmb2N1cyBDUFUgaXMgZGlzYWJsZWQgdGhlbiB0aGUgaGFuZyBnb2VzCi0JICogYXdheSwgb2ggd2VsbCA6LSgKLQkgKgotCSAqIFsgVGhpcyBidWcgY2FuIGJlIHJlcHJvZHVjZWQgZWFzaWx5IHdpdGggYSBsZXZlbC10cmlnZ2VyZWQKLQkgKiAgIFBDSSBOZTIwMDAgbmV0d29ya2luZyBjYXJkcyBhbmQgUElJL1BJSUkgcHJvY2Vzc29ycywgZHVhbAotCSAqICAgQlggY2hpcHNldC4gXQotCSAqLwotCS8qCi0JICogQWN0dWFsbHkgZGlzYWJsaW5nIHRoZSBmb2N1cyBDUFUgY2hlY2sganVzdCBtYWtlcyB0aGUgaGFuZyBsZXNzCi0JICogZnJlcXVlbnQgYXMgaXQgbWFrZXMgdGhlIGludGVycnVwdCBkaXN0cmlidXRvbiBtb2RlbCBiZSBtb3JlCi0JICogbGlrZSBMUlUgdGhhbiBNUlUgKHRoZSBzaG9ydC10ZXJtIGxvYWQgaXMgbW9yZSBldmVuIGFjcm9zcyBDUFVzKS4KLQkgKiBTZWUgYWxzbyB0aGUgY29tbWVudCBpbiBlbmRfbGV2ZWxfaW9hcGljX2lycSgpLiAgLS1tYWNybwotCSAqLwotCi0JLyogRW5hYmxlIGZvY3VzIHByb2Nlc3NvciAoYml0PT0wKSAqLwotCXZhbHVlICY9IH5BUElDX1NQSVZfRk9DVVNfRElTQUJMRUQ7Ci0KLQkvKgotCSAqIFNldCBzcHVyaW91cyBJUlEgdmVjdG9yCi0JICovCi0JdmFsdWUgfD0gU1BVUklPVVNfQVBJQ19WRUNUT1I7Ci0JYXBpY193cml0ZShBUElDX1NQSVYsIHZhbHVlKTsKLQotCS8qCi0JICogU2V0IHVwIExWVDAsIExWVDE6Ci0JICoKLQkgKiBzZXQgdXAgdGhyb3VnaC1sb2NhbC1BUElDIG9uIHRoZSBCUCdzIExJTlQwLiBUaGlzIGlzIG5vdAotCSAqIHN0cmljdGx5IG5lY2Vzc2FyeSBpbiBwdXJlIHN5bW1ldHJpYy1JTyBtb2RlLCBidXQgc29tZXRpbWVzCi0JICogd2UgZGVsZWdhdGUgaW50ZXJydXB0cyB0byB0aGUgODI1OUEuCi0JICovCi0JLyoKLQkgKiBUT0RPOiBzZXQgdXAgdGhyb3VnaC1sb2NhbC1BUElDIGZyb20gdGhyb3VnaC1JL08tQVBJQz8gLS1tYWNybwotCSAqLwotCXZhbHVlID0gYXBpY19yZWFkKEFQSUNfTFZUMCkgJiBBUElDX0xWVF9NQVNLRUQ7Ci0JaWYgKCFzbXBfcHJvY2Vzc29yX2lkKCkgJiYgKHBpY19tb2RlIHx8ICF2YWx1ZSkpIHsKLQkJdmFsdWUgPSBBUElDX0RNX0VYVElOVDsKLQkJYXBpY19wcmludGsoQVBJQ19WRVJCT1NFLCAiZW5hYmxlZCBFeHRJTlQgb24gQ1BVIyVkXG4iLAotCQkJCXNtcF9wcm9jZXNzb3JfaWQoKSk7Ci0JfSBlbHNlIHsKLQkJdmFsdWUgPSBBUElDX0RNX0VYVElOVCB8IEFQSUNfTFZUX01BU0tFRDsKLQkJYXBpY19wcmludGsoQVBJQ19WRVJCT1NFLCAibWFza2VkIEV4dElOVCBvbiBDUFUjJWRcbiIsCi0JCQkJc21wX3Byb2Nlc3Nvcl9pZCgpKTsKLQl9Ci0JYXBpY193cml0ZShBUElDX0xWVDAsIHZhbHVlKTsKLQotCS8qCi0JICogb25seSB0aGUgQlAgc2hvdWxkIHNlZSB0aGUgTElOVDEgTk1JIHNpZ25hbCwgb2J2aW91c2x5LgotCSAqLwotCWlmICghc21wX3Byb2Nlc3Nvcl9pZCgpKQotCQl2YWx1ZSA9IEFQSUNfRE1fTk1JOwotCWVsc2UKLQkJdmFsdWUgPSBBUElDX0RNX05NSSB8IEFQSUNfTFZUX01BU0tFRDsKLQlpZiAoIWludGVncmF0ZWQpCQkvKiA4MjQ4OURYICovCi0JCXZhbHVlIHw9IEFQSUNfTFZUX0xFVkVMX1RSSUdHRVI7Ci0JYXBpY193cml0ZShBUElDX0xWVDEsIHZhbHVlKTsKLX0KLQotdm9pZCBfX2NwdWluaXQgZW5kX2xvY2FsX0FQSUNfc2V0dXAodm9pZCkKLXsKLQlsYXBpY19zZXR1cF9lc3IoKTsKLQotI2lmZGVmIENPTkZJR19YODZfMzIKLQl7Ci0JCXVuc2lnbmVkIGludCB2YWx1ZTsKLQkJLyogRGlzYWJsZSB0aGUgbG9jYWwgYXBpYyB0aW1lciAqLwotCQl2YWx1ZSA9IGFwaWNfcmVhZChBUElDX0xWVFQpOwotCQl2YWx1ZSB8PSAoQVBJQ19MVlRfTUFTS0VEIHwgTE9DQUxfVElNRVJfVkVDVE9SKTsKLQkJYXBpY193cml0ZShBUElDX0xWVFQsIHZhbHVlKTsKLQl9Ci0jZW5kaWYKLQotCXNldHVwX2FwaWNfbm1pX3dhdGNoZG9nKE5VTEwpOwotCWFwaWNfcG1fYWN0aXZhdGUoKTsKLX0KLQotLyoKLSAqIERldGVjdCBhbmQgaW5pdGlhbGl6ZSBBUElDCi0gKi8KLXN0YXRpYyBpbnQgX19pbml0IGRldGVjdF9pbml0X0FQSUModm9pZCkKLXsKLQl1MzIgaCwgbCwgZmVhdHVyZXM7Ci0KLQkvKiBEaXNhYmxlZCBieSBrZXJuZWwgb3B0aW9uPyAqLwotCWlmIChkaXNhYmxlX2FwaWMpCi0JCXJldHVybiAtMTsKLQotCXN3aXRjaCAoYm9vdF9jcHVfZGF0YS54ODZfdmVuZG9yKSB7Ci0JY2FzZSBYODZfVkVORE9SX0FNRDoKLQkJaWYgKChib290X2NwdV9kYXRhLng4NiA9PSA2ICYmIGJvb3RfY3B1X2RhdGEueDg2X21vZGVsID4gMSkgfHwKLQkJICAgIChib290X2NwdV9kYXRhLng4NiA9PSAxNSkpCi0JCQlicmVhazsKLQkJZ290byBub19hcGljOwotCWNhc2UgWDg2X1ZFTkRPUl9JTlRFTDoKLQkJaWYgKGJvb3RfY3B1X2RhdGEueDg2ID09IDYgfHwgYm9vdF9jcHVfZGF0YS54ODYgPT0gMTUgfHwKLQkJICAgIChib290X2NwdV9kYXRhLng4NiA9PSA1ICYmIGNwdV9oYXNfYXBpYykpCi0JCQlicmVhazsKLQkJZ290byBub19hcGljOwotCWRlZmF1bHQ6Ci0JCWdvdG8gbm9fYXBpYzsKLQl9Ci0KLQlpZiAoIWNwdV9oYXNfYXBpYykgewotCQkvKgotCQkgKiBPdmVyLXJpZGUgQklPUyBhbmQgdHJ5IHRvIGVuYWJsZSB0aGUgbG9jYWwgQVBJQyBvbmx5IGlmCi0JCSAqICJsYXBpYyIgc3BlY2lmaWVkLgotCQkgKi8KLQkJaWYgKCFmb3JjZV9lbmFibGVfbG9jYWxfYXBpYykgewotCQkJcHJpbnRrKEtFUk5fSU5GTyAiTG9jYWwgQVBJQyBkaXNhYmxlZCBieSBCSU9TIC0tICIKLQkJCSAgICAgICAieW91IGNhbiBlbmFibGUgaXQgd2l0aCBcImxhcGljXCJcbiIpOwotCQkJcmV0dXJuIC0xOwotCQl9Ci0JCS8qCi0JCSAqIFNvbWUgQklPU2VzIGRpc2FibGUgdGhlIGxvY2FsIEFQSUMgaW4gdGhlIEFQSUNfQkFTRQotCQkgKiBNU1IuIFRoaXMgY2FuIG9ubHkgYmUgZG9uZSBpbiBzb2Z0d2FyZSBmb3IgSW50ZWwgUDYgb3IgbGF0ZXIKLQkJICogYW5kIEFNRCBLNyAoTW9kZWwgPiAxKSBvciBsYXRlci4KLQkJICovCi0JCXJkbXNyKE1TUl9JQTMyX0FQSUNCQVNFLCBsLCBoKTsKLQkJaWYgKCEobCAmIE1TUl9JQTMyX0FQSUNCQVNFX0VOQUJMRSkpIHsKLQkJCXByaW50ayhLRVJOX0lORk8KLQkJCSAgICAgICAiTG9jYWwgQVBJQyBkaXNhYmxlZCBieSBCSU9TIC0tIHJlZW5hYmxpbmcuXG4iKTsKLQkJCWwgJj0gfk1TUl9JQTMyX0FQSUNCQVNFX0JBU0U7Ci0JCQlsIHw9IE1TUl9JQTMyX0FQSUNCQVNFX0VOQUJMRSB8IEFQSUNfREVGQVVMVF9QSFlTX0JBU0U7Ci0JCQl3cm1zcihNU1JfSUEzMl9BUElDQkFTRSwgbCwgaCk7Ci0JCQllbmFibGVkX3ZpYV9hcGljYmFzZSA9IDE7Ci0JCX0KLQl9Ci0JLyoKLQkgKiBUaGUgQVBJQyBmZWF0dXJlIGJpdCBzaG91bGQgbm93IGJlIGVuYWJsZWQKLQkgKiBpbiBgY3B1aWQnCi0JICovCi0JZmVhdHVyZXMgPSBjcHVpZF9lZHgoMSk7Ci0JaWYgKCEoZmVhdHVyZXMgJiAoMSA8PCBYODZfRkVBVFVSRV9BUElDKSkpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiQ291bGQgbm90IGVuYWJsZSBBUElDIVxuIik7Ci0JCXJldHVybiAtMTsKLQl9Ci0Jc2V0X2NwdV9jYXAoJmJvb3RfY3B1X2RhdGEsIFg4Nl9GRUFUVVJFX0FQSUMpOwotCW1wX2xhcGljX2FkZHIgPSBBUElDX0RFRkFVTFRfUEhZU19CQVNFOwotCi0JLyogVGhlIEJJT1MgbWF5IGhhdmUgc2V0IHVwIHRoZSBBUElDIGF0IHNvbWUgb3RoZXIgYWRkcmVzcyAqLwotCXJkbXNyKE1TUl9JQTMyX0FQSUNCQVNFLCBsLCBoKTsKLQlpZiAobCAmIE1TUl9JQTMyX0FQSUNCQVNFX0VOQUJMRSkKLQkJbXBfbGFwaWNfYWRkciA9IGwgJiBNU1JfSUEzMl9BUElDQkFTRV9CQVNFOwotCi0JcHJpbnRrKEtFUk5fSU5GTyAiRm91bmQgYW5kIGVuYWJsZWQgbG9jYWwgQVBJQyFcbiIpOwotCi0JYXBpY19wbV9hY3RpdmF0ZSgpOwotCi0JcmV0dXJuIDA7Ci0KLW5vX2FwaWM6Ci0JcHJpbnRrKEtFUk5fSU5GTyAiTm8gbG9jYWwgQVBJQyBwcmVzZW50IG9yIGhhcmR3YXJlIGRpc2FibGVkXG4iKTsKLQlyZXR1cm4gLTE7Ci19Ci0KLS8qKgotICogaW5pdF9hcGljX21hcHBpbmdzIC0gaW5pdGlhbGl6ZSBBUElDIG1hcHBpbmdzCi0gKi8KLXZvaWQgX19pbml0IGluaXRfYXBpY19tYXBwaW5ncyh2b2lkKQotewotCS8qCi0JICogSWYgbm8gbG9jYWwgQVBJQyBjYW4gYmUgZm91bmQgdGhlbiBzZXQgdXAgYSBmYWtlIGFsbAotCSAqIHplcm9lcyBwYWdlIHRvIHNpbXVsYXRlIHRoZSBsb2NhbCBBUElDIGFuZCBhbm90aGVyCi0JICogb25lIGZvciB0aGUgSU8tQVBJQy4KLQkgKi8KLQlpZiAoIXNtcF9mb3VuZF9jb25maWcgJiYgZGV0ZWN0X2luaXRfQVBJQygpKSB7Ci0JCWFwaWNfcGh5cyA9ICh1bnNpZ25lZCBsb25nKSBhbGxvY19ib290bWVtX3BhZ2VzKFBBR0VfU0laRSk7Ci0JCWFwaWNfcGh5cyA9IF9fcGEoYXBpY19waHlzKTsKLQl9IGVsc2UKLQkJYXBpY19waHlzID0gbXBfbGFwaWNfYWRkcjsKLQotCXNldF9maXhtYXBfbm9jYWNoZShGSVhfQVBJQ19CQVNFLCBhcGljX3BoeXMpOwotCXByaW50ayhLRVJOX0RFQlVHICJtYXBwZWQgQVBJQyB0byAlMDhseCAoJTA4bHgpXG4iLCBBUElDX0JBU0UsCi0JICAgICAgIGFwaWNfcGh5cyk7Ci0KLQkvKgotCSAqIEZldGNoIHRoZSBBUElDIElEIG9mIHRoZSBCU1AgaW4gY2FzZSB3ZSBoYXZlIGEKLQkgKiBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gKG9yIHRoZSBNUCB0YWJsZSBpcyBicm9rZW4pLgotCSAqLwotCWlmIChib290X2NwdV9waHlzaWNhbF9hcGljaWQgPT0gLTFVKQotCQlib290X2NwdV9waHlzaWNhbF9hcGljaWQgPSByZWFkX2FwaWNfaWQoKTsKLQotfQotCi0vKgotICogVGhpcyBpbml0aWFsaXplcyB0aGUgSU8tQVBJQyBhbmQgQVBJQyBoYXJkd2FyZSBpZiB0aGlzIGlzCi0gKiBhIFVQIGtlcm5lbC4KLSAqLwotCi1pbnQgYXBpY192ZXJzaW9uW01BWF9BUElDU107Ci0KLWludCBfX2luaXQgQVBJQ19pbml0X3VuaXByb2Nlc3Nvcih2b2lkKQotewotCWlmICghc21wX2ZvdW5kX2NvbmZpZyAmJiAhY3B1X2hhc19hcGljKQotCQlyZXR1cm4gLTE7Ci0KLQkvKgotCSAqIENvbXBsYWluIGlmIHRoZSBCSU9TIHByZXRlbmRzIHRoZXJlIGlzIG9uZS4KLQkgKi8KLQlpZiAoIWNwdV9oYXNfYXBpYyAmJgotCSAgICBBUElDX0lOVEVHUkFURUQoYXBpY192ZXJzaW9uW2Jvb3RfY3B1X3BoeXNpY2FsX2FwaWNpZF0pKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiQklPUyBidWcsIGxvY2FsIEFQSUMgIyVkIG5vdCBkZXRlY3RlZCEuLi5cbiIsCi0JCSAgICAgICBib290X2NwdV9waHlzaWNhbF9hcGljaWQpOwotCQljbGVhcl9jcHVfY2FwKCZib290X2NwdV9kYXRhLCBYODZfRkVBVFVSRV9BUElDKTsKLQkJcmV0dXJuIC0xOwotCX0KLQotCXZlcmlmeV9sb2NhbF9BUElDKCk7Ci0KLQljb25uZWN0X2JzcF9BUElDKCk7Ci0KLQkvKgotCSAqIEhhY2s6IEluIGNhc2Ugb2Yga2R1bXAsIGFmdGVyIGEgY3Jhc2gsIGtlcm5lbCBtaWdodCBiZSBib290aW5nCi0JICogb24gYSBjcHUgd2l0aCBub24temVybyBsYXBpYyBpZC4gQnV0IGJvb3RfY3B1X3BoeXNpY2FsX2FwaWNpZAotCSAqIG1pZ2h0IGJlIHplcm8gaWYgcmVhZCBmcm9tIE1QIHRhYmxlcy4gR2V0IGl0IGZyb20gTEFQSUMuCi0JICovCi0jaWZkZWYgQ09ORklHX0NSQVNIX0RVTVAKLQlib290X2NwdV9waHlzaWNhbF9hcGljaWQgPSByZWFkX2FwaWNfaWQoKTsKLSNlbmRpZgotCXBoeXNpZF9zZXRfbWFza19vZl9waHlzaWQoYm9vdF9jcHVfcGh5c2ljYWxfYXBpY2lkLCAmcGh5c19jcHVfcHJlc2VudF9tYXApOwotCi0Jc2V0dXBfbG9jYWxfQVBJQygpOwotCi0jaWZkZWYgQ09ORklHX1g4Nl9JT19BUElDCi0JaWYgKCFzbXBfZm91bmRfY29uZmlnIHx8IHNraXBfaW9hcGljX3NldHVwIHx8ICFucl9pb2FwaWNzKQotI2VuZGlmCi0JCWxvY2FsaXNlX25taV93YXRjaGRvZygpOwotCWVuZF9sb2NhbF9BUElDX3NldHVwKCk7Ci0jaWZkZWYgQ09ORklHX1g4Nl9JT19BUElDCi0JaWYgKHNtcF9mb3VuZF9jb25maWcpCi0JCWlmICghc2tpcF9pb2FwaWNfc2V0dXAgJiYgbnJfaW9hcGljcykKLQkJCXNldHVwX0lPX0FQSUMoKTsKLSNlbmRpZgotCXNldHVwX2Jvb3RfY2xvY2soKTsKLQotCXJldHVybiAwOwotfQotCi0vKgotICogTG9jYWwgQVBJQyBpbnRlcnJ1cHRzCi0gKi8KLQotLyoKLSAqIFRoaXMgaW50ZXJydXB0IHNob3VsZCBfbmV2ZXJfIGhhcHBlbiB3aXRoIG91ciBBUElDL1NNUCBhcmNoaXRlY3R1cmUKLSAqLwotdm9pZCBzbXBfc3B1cmlvdXNfaW50ZXJydXB0KHN0cnVjdCBwdF9yZWdzICpyZWdzKQotewotCXVuc2lnbmVkIGxvbmcgdjsKLQotCWlycV9lbnRlcigpOwotCS8qCi0JICogQ2hlY2sgaWYgdGhpcyByZWFsbHkgaXMgYSBzcHVyaW91cyBpbnRlcnJ1cHQgYW5kIEFDSyBpdAotCSAqIGlmIGl0IGlzIGEgdmVjdG9yZWQgb25lLiAgSnVzdCBpbiBjYXNlLi4uCi0JICogU3B1cmlvdXMgaW50ZXJydXB0cyBzaG91bGQgbm90IGJlIEFDS2VkLgotCSAqLwotCXYgPSBhcGljX3JlYWQoQVBJQ19JU1IgKyAoKFNQVVJJT1VTX0FQSUNfVkVDVE9SICYgfjB4MWYpID4+IDEpKTsKLQlpZiAodiAmICgxIDw8IChTUFVSSU9VU19BUElDX1ZFQ1RPUiAmIDB4MWYpKSkKLQkJYWNrX0FQSUNfaXJxKCk7Ci0KLQkvKiBzZWUgc3ctZGV2LW1hbiB2b2wgMywgY2hhcHRlciA3LjQuMTMuNSAqLwotCXByaW50ayhLRVJOX0lORk8gInNwdXJpb3VzIEFQSUMgaW50ZXJydXB0IG9uIENQVSMlZCwgIgotCSAgICAgICAic2hvdWxkIG5ldmVyIGhhcHBlbi5cbiIsIHNtcF9wcm9jZXNzb3JfaWQoKSk7Ci0JX19nZXRfY3B1X3ZhcihpcnFfc3RhdCkuaXJxX3NwdXJpb3VzX2NvdW50Kys7Ci0JaXJxX2V4aXQoKTsKLX0KLQotLyoKLSAqIFRoaXMgaW50ZXJydXB0IHNob3VsZCBuZXZlciBoYXBwZW4gd2l0aCBvdXIgQVBJQy9TTVAgYXJjaGl0ZWN0dXJlCi0gKi8KLXZvaWQgc21wX2Vycm9yX2ludGVycnVwdChzdHJ1Y3QgcHRfcmVncyAqcmVncykKLXsKLQl1bnNpZ25lZCBsb25nIHYsIHYxOwotCi0JaXJxX2VudGVyKCk7Ci0JLyogRmlyc3QgdGlja2xlIHRoZSBoYXJkd2FyZSwgb25seSB0aGVuIHJlcG9ydCB3aGF0IHdlbnQgb24uIC0tIFJFVyAqLwotCXYgPSBhcGljX3JlYWQoQVBJQ19FU1IpOwotCWFwaWNfd3JpdGUoQVBJQ19FU1IsIDApOwotCXYxID0gYXBpY19yZWFkKEFQSUNfRVNSKTsKLQlhY2tfQVBJQ19pcnEoKTsKLQlhdG9taWNfaW5jKCZpcnFfZXJyX2NvdW50KTsKLQotCS8qIEhlcmUgaXMgd2hhdCB0aGUgQVBJQyBlcnJvciBiaXRzIG1lYW46Ci0JICAgMDogU2VuZCBDUyBlcnJvcgotCSAgIDE6IFJlY2VpdmUgQ1MgZXJyb3IKLQkgICAyOiBTZW5kIGFjY2VwdCBlcnJvcgotCSAgIDM6IFJlY2VpdmUgYWNjZXB0IGVycm9yCi0JICAgNDogUmVzZXJ2ZWQKLQkgICA1OiBTZW5kIGlsbGVnYWwgdmVjdG9yCi0JICAgNjogUmVjZWl2ZWQgaWxsZWdhbCB2ZWN0b3IKLQkgICA3OiBJbGxlZ2FsIHJlZ2lzdGVyIGFkZHJlc3MKLQkqLwotCXByaW50ayhLRVJOX0RFQlVHICJBUElDIGVycm9yIG9uIENQVSVkOiAlMDJseCglMDJseClcbiIsCi0JCXNtcF9wcm9jZXNzb3JfaWQoKSwgdiAsIHYxKTsKLQlpcnFfZXhpdCgpOwotfQotCi0vKioKLSAqIGNvbm5lY3RfYnNwX0FQSUMgLSBhdHRhY2ggdGhlIEFQSUMgdG8gdGhlIGludGVycnVwdCBzeXN0ZW0KLSAqLwotdm9pZCBfX2luaXQgY29ubmVjdF9ic3BfQVBJQyh2b2lkKQotewotI2lmZGVmIENPTkZJR19YODZfMzIKLQlpZiAocGljX21vZGUpIHsKLQkJLyoKLQkJICogRG8gbm90IHRydXN0IHRoZSBsb2NhbCBBUElDIGJlaW5nIGVtcHR5IGF0IGJvb3R1cC4KLQkJICovCi0JCWNsZWFyX2xvY2FsX0FQSUMoKTsKLQkJLyoKLQkJICogUElDIG1vZGUsIGVuYWJsZSBBUElDIG1vZGUgaW4gdGhlIElNQ1IsIGkuZS4gIGNvbm5lY3QgQlNQJ3MKLQkJICogbG9jYWwgQVBJQyB0byBJTlQgYW5kIE5NSSBsaW5lcy4KLQkJICovCi0JCWFwaWNfcHJpbnRrKEFQSUNfVkVSQk9TRSwgImxlYXZpbmcgUElDIG1vZGUsICIKLQkJCQkiZW5hYmxpbmcgQVBJQyBtb2RlLlxuIik7Ci0JCW91dGIoMHg3MCwgMHgyMik7Ci0JCW91dGIoMHgwMSwgMHgyMyk7Ci0JfQotI2VuZGlmCi0JZW5hYmxlX2FwaWNfbW9kZSgpOwotfQotCi0vKioKLSAqIGRpc2Nvbm5lY3RfYnNwX0FQSUMgLSBkZXRhY2ggdGhlIEFQSUMgZnJvbSB0aGUgaW50ZXJydXB0IHN5c3RlbQotICogQHZpcnRfd2lyZV9zZXR1cDoJaW5kaWNhdGVzLCB3aGV0aGVyIHZpcnR1YWwgd2lyZSBtb2RlIGlzIHNlbGVjdGVkCi0gKgotICogVmlydHVhbCB3aXJlIG1vZGUgaXMgbmVjZXNzYXJ5IHRvIGRlbGl2ZXIgbGVnYWN5IGludGVycnVwdHMgZXZlbiB3aGVuIHRoZQotICogQVBJQyBpcyBkaXNhYmxlZC4KLSAqLwotdm9pZCBkaXNjb25uZWN0X2JzcF9BUElDKGludCB2aXJ0X3dpcmVfc2V0dXApCi17Ci0JdW5zaWduZWQgaW50IHZhbHVlOwotCi0jaWZkZWYgQ09ORklHX1g4Nl8zMgotCWlmIChwaWNfbW9kZSkgewotCQkvKgotCQkgKiBQdXQgdGhlIGJvYXJkIGJhY2sgaW50byBQSUMgbW9kZSAoaGFzIGFuIGVmZmVjdCBvbmx5IG9uCi0JCSAqIGNlcnRhaW4gb2xkZXIgYm9hcmRzKS4gIE5vdGUgdGhhdCBBUElDIGludGVycnVwdHMsIGluY2x1ZGluZwotCQkgKiBJUElzLCB3b24ndCB3b3JrIGJleW9uZCB0aGlzIHBvaW50ISAgVGhlIG9ubHkgZXhjZXB0aW9uIGFyZQotCQkgKiBJTklUIElQSXMuCi0JCSAqLwotCQlhcGljX3ByaW50ayhBUElDX1ZFUkJPU0UsICJkaXNhYmxpbmcgQVBJQyBtb2RlLCAiCi0JCQkJImVudGVyaW5nIFBJQyBtb2RlLlxuIik7Ci0JCW91dGIoMHg3MCwgMHgyMik7Ci0JCW91dGIoMHgwMCwgMHgyMyk7Ci0JCXJldHVybjsKLQl9Ci0jZW5kaWYKLQotCS8qIEdvIGJhY2sgdG8gVmlydHVhbCBXaXJlIGNvbXBhdGliaWxpdHkgbW9kZSAqLwotCi0JLyogRm9yIHRoZSBzcHVyaW91cyBpbnRlcnJ1cHQgdXNlIHZlY3RvciBGLCBhbmQgZW5hYmxlIGl0ICovCi0JdmFsdWUgPSBhcGljX3JlYWQoQVBJQ19TUElWKTsKLQl2YWx1ZSAmPSB+QVBJQ19WRUNUT1JfTUFTSzsKLQl2YWx1ZSB8PSBBUElDX1NQSVZfQVBJQ19FTkFCTEVEOwotCXZhbHVlIHw9IDB4ZjsKLQlhcGljX3dyaXRlKEFQSUNfU1BJViwgdmFsdWUpOwotCi0JaWYgKCF2aXJ0X3dpcmVfc2V0dXApIHsKLQkJLyoKLQkJICogRm9yIExWVDAgbWFrZSBpdCBlZGdlIHRyaWdnZXJlZCwgYWN0aXZlIGhpZ2gsCi0JCSAqIGV4dGVybmFsIGFuZCBlbmFibGVkCi0JCSAqLwotCQl2YWx1ZSA9IGFwaWNfcmVhZChBUElDX0xWVDApOwotCQl2YWx1ZSAmPSB+KEFQSUNfTU9ERV9NQVNLIHwgQVBJQ19TRU5EX1BFTkRJTkcgfAotCQkJQVBJQ19JTlBVVF9QT0xBUklUWSB8IEFQSUNfTFZUX1JFTU9URV9JUlIgfAotCQkJQVBJQ19MVlRfTEVWRUxfVFJJR0dFUiB8IEFQSUNfTFZUX01BU0tFRCk7Ci0JCXZhbHVlIHw9IEFQSUNfTFZUX1JFTU9URV9JUlIgfCBBUElDX1NFTkRfUEVORElORzsKLQkJdmFsdWUgPSBTRVRfQVBJQ19ERUxJVkVSWV9NT0RFKHZhbHVlLCBBUElDX01PREVfRVhUSU5UKTsKLQkJYXBpY193cml0ZShBUElDX0xWVDAsIHZhbHVlKTsKLQl9IGVsc2UgewotCQkvKiBEaXNhYmxlIExWVDAgKi8KLQkJYXBpY193cml0ZShBUElDX0xWVDAsIEFQSUNfTFZUX01BU0tFRCk7Ci0JfQotCi0JLyoKLQkgKiBGb3IgTFZUMSBtYWtlIGl0IGVkZ2UgdHJpZ2dlcmVkLCBhY3RpdmUgaGlnaCwKLQkgKiBubWkgYW5kIGVuYWJsZWQKLQkgKi8KLQl2YWx1ZSA9IGFwaWNfcmVhZChBUElDX0xWVDEpOwotCXZhbHVlICY9IH4oQVBJQ19NT0RFX01BU0sgfCBBUElDX1NFTkRfUEVORElORyB8Ci0JCQlBUElDX0lOUFVUX1BPTEFSSVRZIHwgQVBJQ19MVlRfUkVNT1RFX0lSUiB8Ci0JCQlBUElDX0xWVF9MRVZFTF9UUklHR0VSIHwgQVBJQ19MVlRfTUFTS0VEKTsKLQl2YWx1ZSB8PSBBUElDX0xWVF9SRU1PVEVfSVJSIHwgQVBJQ19TRU5EX1BFTkRJTkc7Ci0JdmFsdWUgPSBTRVRfQVBJQ19ERUxJVkVSWV9NT0RFKHZhbHVlLCBBUElDX01PREVfTk1JKTsKLQlhcGljX3dyaXRlKEFQSUNfTFZUMSwgdmFsdWUpOwotfQotCi12b2lkIF9fY3B1aW5pdCBnZW5lcmljX3Byb2Nlc3Nvcl9pbmZvKGludCBhcGljaWQsIGludCB2ZXJzaW9uKQotewotCWludCBjcHU7Ci0JY3B1bWFza190IHRtcF9tYXA7Ci0KLQkvKgotCSAqIFZhbGlkYXRlIHZlcnNpb24KLQkgKi8KLQlpZiAodmVyc2lvbiA9PSAweDApIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiQklPUyBidWcsIEFQSUMgdmVyc2lvbiBpcyAwIGZvciBDUFUjJWQhICIKLQkJCQkiZml4aW5nIHVwIHRvIDB4MTAuICh0ZWxsIHlvdXIgaHcgdmVuZG9yKVxuIiwKLQkJCQl2ZXJzaW9uKTsKLQkJdmVyc2lvbiA9IDB4MTA7Ci0JfQotCWFwaWNfdmVyc2lvblthcGljaWRdID0gdmVyc2lvbjsKLQotCWlmIChudW1fcHJvY2Vzc29ycyA+PSBOUl9DUFVTKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIldBUk5JTkc6IE5SX0NQVVMgbGltaXQgb2YgJWkgcmVhY2hlZC4iCi0JCQkiICBQcm9jZXNzb3IgaWdub3JlZC5cbiIsIE5SX0NQVVMpOwotCQlyZXR1cm47Ci0JfQotCi0JbnVtX3Byb2Nlc3NvcnMrKzsKLQljcHVzX2NvbXBsZW1lbnQodG1wX21hcCwgY3B1X3ByZXNlbnRfbWFwKTsKLQljcHUgPSBmaXJzdF9jcHUodG1wX21hcCk7Ci0KLQlwaHlzaWRfc2V0KGFwaWNpZCwgcGh5c19jcHVfcHJlc2VudF9tYXApOwotCWlmIChhcGljaWQgPT0gYm9vdF9jcHVfcGh5c2ljYWxfYXBpY2lkKSB7Ci0JCS8qCi0JCSAqIHg4Nl9iaW9zX2NwdV9hcGljaWQgaXMgcmVxdWlyZWQgdG8gaGF2ZSBwcm9jZXNzb3JzIGxpc3RlZAotCQkgKiBpbiBzYW1lIG9yZGVyIGFzIGxvZ2ljYWwgY3B1IG51bWJlcnMuIEhlbmNlIHRoZSBmaXJzdAotCQkgKiBlbnRyeSBpcyBCU1AsIGFuZCBzbyBvbi4KLQkJICovCi0JCWNwdSA9IDA7Ci0JfQotCWlmIChhcGljaWQgPiBtYXhfcGh5c2ljYWxfYXBpY2lkKQotCQltYXhfcGh5c2ljYWxfYXBpY2lkID0gYXBpY2lkOwotCi0jaWZkZWYgQ09ORklHX1g4Nl8zMgotCS8qCi0JICogV291bGQgYmUgcHJlZmVyYWJsZSB0byBzd2l0Y2ggdG8gYmlnc21wIHdoZW4gQ09ORklHX0hPVFBMVUdfQ1BVPXkKLQkgKiBidXQgd2UgbmVlZCB0byB3b3JrIG90aGVyIGRlcGVuZGVuY2llcyBsaWtlIFNNUF9TVVNQRU5EIGV0YwotCSAqIGJlZm9yZSB0aGlzIGNhbiBiZSBkb25lIHdpdGhvdXQgc29tZSBjb25mdXNpb24uCi0JICogaWYgKENQVV9IT1RQTFVHX0VOQUJMRUQgfHwgbnVtX3Byb2Nlc3NvcnMgPiA4KQotCSAqICAgICAgIC0gQXNob2sgUmFqIDxhc2hvay5yYWpAaW50ZWwuY29tPgotCSAqLwotCWlmIChtYXhfcGh5c2ljYWxfYXBpY2lkID49IDgpIHsKLQkJc3dpdGNoIChib290X2NwdV9kYXRhLng4Nl92ZW5kb3IpIHsKLQkJY2FzZSBYODZfVkVORE9SX0lOVEVMOgotCQkJaWYgKCFBUElDX1hBUElDKHZlcnNpb24pKSB7Ci0JCQkJZGVmX3RvX2JpZ3NtcCA9IDA7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCQkvKiBJZiBQNCBhbmQgYWJvdmUgZmFsbCB0aHJvdWdoICovCi0JCWNhc2UgWDg2X1ZFTkRPUl9BTUQ6Ci0JCQlkZWZfdG9fYmlnc21wID0gMTsKLQkJfQotCX0KLSNlbmRpZgotCi0jaWYgZGVmaW5lZChDT05GSUdfWDg2X1NNUCkgfHwgZGVmaW5lZChDT05GSUdfWDg2XzY0KQotCS8qIGFyZSB3ZSBiZWluZyBjYWxsZWQgZWFybHkgaW4ga2VybmVsIHN0YXJ0dXA/ICovCi0JaWYgKGVhcmx5X3Blcl9jcHVfcHRyKHg4Nl9jcHVfdG9fYXBpY2lkKSkgewotCQl1MTYgKmNwdV90b19hcGljaWQgPSBlYXJseV9wZXJfY3B1X3B0cih4ODZfY3B1X3RvX2FwaWNpZCk7Ci0JCXUxNiAqYmlvc19jcHVfYXBpY2lkID0gZWFybHlfcGVyX2NwdV9wdHIoeDg2X2Jpb3NfY3B1X2FwaWNpZCk7Ci0KLQkJY3B1X3RvX2FwaWNpZFtjcHVdID0gYXBpY2lkOwotCQliaW9zX2NwdV9hcGljaWRbY3B1XSA9IGFwaWNpZDsKLQl9IGVsc2UgewotCQlwZXJfY3B1KHg4Nl9jcHVfdG9fYXBpY2lkLCBjcHUpID0gYXBpY2lkOwotCQlwZXJfY3B1KHg4Nl9iaW9zX2NwdV9hcGljaWQsIGNwdSkgPSBhcGljaWQ7Ci0JfQotI2VuZGlmCi0KLQljcHVfc2V0KGNwdSwgY3B1X3Bvc3NpYmxlX21hcCk7Ci0JY3B1X3NldChjcHUsIGNwdV9wcmVzZW50X21hcCk7Ci19Ci0KLS8qCi0gKiBQb3dlciBtYW5hZ2VtZW50Ci0gKi8KLSNpZmRlZiBDT05GSUdfUE0KLQotc3RhdGljIHN0cnVjdCB7Ci0JLyoKLQkgKiAnYWN0aXZlJyBpcyB0cnVlIGlmIHRoZSBsb2NhbCBBUElDIHdhcyBlbmFibGVkIGJ5IHVzIGFuZAotCSAqIG5vdCB0aGUgQklPUzsgdGhpcyBzaWduaWZpZXMgdGhhdCB3ZSBhcmUgYWxzbyByZXNwb25zaWJsZQotCSAqIGZvciBkaXNhYmxpbmcgaXQgYmVmb3JlIGVudGVyaW5nIGFwbS9hY3BpIHN1c3BlbmQKLQkgKi8KLQlpbnQgYWN0aXZlOwotCS8qIHIvdyBhcGljIGZpZWxkcyAqLwotCXVuc2lnbmVkIGludCBhcGljX2lkOwotCXVuc2lnbmVkIGludCBhcGljX3Rhc2twcmk7Ci0JdW5zaWduZWQgaW50IGFwaWNfbGRyOwotCXVuc2lnbmVkIGludCBhcGljX2RmcjsKLQl1bnNpZ25lZCBpbnQgYXBpY19zcGl2OwotCXVuc2lnbmVkIGludCBhcGljX2x2dHQ7Ci0JdW5zaWduZWQgaW50IGFwaWNfbHZ0cGM7Ci0JdW5zaWduZWQgaW50IGFwaWNfbHZ0MDsKLQl1bnNpZ25lZCBpbnQgYXBpY19sdnQxOwotCXVuc2lnbmVkIGludCBhcGljX2x2dGVycjsKLQl1bnNpZ25lZCBpbnQgYXBpY190bWljdDsKLQl1bnNpZ25lZCBpbnQgYXBpY190ZGNyOwotCXVuc2lnbmVkIGludCBhcGljX3RobXI7Ci19IGFwaWNfcG1fc3RhdGU7Ci0KLXN0YXRpYyBpbnQgbGFwaWNfc3VzcGVuZChzdHJ1Y3Qgc3lzX2RldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlpbnQgbWF4bHZ0OwotCi0JaWYgKCFhcGljX3BtX3N0YXRlLmFjdGl2ZSkKLQkJcmV0dXJuIDA7Ci0KLQltYXhsdnQgPSBsYXBpY19nZXRfbWF4bHZ0KCk7Ci0KLQlhcGljX3BtX3N0YXRlLmFwaWNfaWQgPSBhcGljX3JlYWQoQVBJQ19JRCk7Ci0JYXBpY19wbV9zdGF0ZS5hcGljX3Rhc2twcmkgPSBhcGljX3JlYWQoQVBJQ19UQVNLUFJJKTsKLQlhcGljX3BtX3N0YXRlLmFwaWNfbGRyID0gYXBpY19yZWFkKEFQSUNfTERSKTsKLQlhcGljX3BtX3N0YXRlLmFwaWNfZGZyID0gYXBpY19yZWFkKEFQSUNfREZSKTsKLQlhcGljX3BtX3N0YXRlLmFwaWNfc3BpdiA9IGFwaWNfcmVhZChBUElDX1NQSVYpOwotCWFwaWNfcG1fc3RhdGUuYXBpY19sdnR0ID0gYXBpY19yZWFkKEFQSUNfTFZUVCk7Ci0JaWYgKG1heGx2dCA+PSA0KQotCQlhcGljX3BtX3N0YXRlLmFwaWNfbHZ0cGMgPSBhcGljX3JlYWQoQVBJQ19MVlRQQyk7Ci0JYXBpY19wbV9zdGF0ZS5hcGljX2x2dDAgPSBhcGljX3JlYWQoQVBJQ19MVlQwKTsKLQlhcGljX3BtX3N0YXRlLmFwaWNfbHZ0MSA9IGFwaWNfcmVhZChBUElDX0xWVDEpOwotCWFwaWNfcG1fc3RhdGUuYXBpY19sdnRlcnIgPSBhcGljX3JlYWQoQVBJQ19MVlRFUlIpOwotCWFwaWNfcG1fc3RhdGUuYXBpY190bWljdCA9IGFwaWNfcmVhZChBUElDX1RNSUNUKTsKLQlhcGljX3BtX3N0YXRlLmFwaWNfdGRjciA9IGFwaWNfcmVhZChBUElDX1REQ1IpOwotI2lmIGRlZmluZWQoQ09ORklHX1g4Nl9NQ0VfUDRUSEVSTUFMKSB8fCBkZWZpbmVkKENPTkZJR19YODZfTUNFX0lOVEVMKQotCWlmIChtYXhsdnQgPj0gNSkKLQkJYXBpY19wbV9zdGF0ZS5hcGljX3RobXIgPSBhcGljX3JlYWQoQVBJQ19MVlRUSE1SKTsKLSNlbmRpZgotCi0JbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCWRpc2FibGVfbG9jYWxfQVBJQygpOwotCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBsYXBpY19yZXN1bWUoc3RydWN0IHN5c19kZXZpY2UgKmRldikKLXsKLQl1bnNpZ25lZCBpbnQgbCwgaDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWludCBtYXhsdnQ7Ci0KLQlpZiAoIWFwaWNfcG1fc3RhdGUuYWN0aXZlKQotCQlyZXR1cm4gMDsKLQotCW1heGx2dCA9IGxhcGljX2dldF9tYXhsdnQoKTsKLQotCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQotI2lmZGVmIENPTkZJR19YODZfNjQKLQlpZiAoeDJhcGljKQotCQllbmFibGVfeDJhcGljKCk7Ci0JZWxzZQotI2VuZGlmCi0JewotCQkvKgotCQkgKiBNYWtlIHN1cmUgdGhlIEFQSUNCQVNFIHBvaW50cyB0byB0aGUgcmlnaHQgYWRkcmVzcwotCQkgKgotCQkgKiBGSVhNRSEgVGhpcyB3aWxsIGJlIHdyb25nIGlmIHdlIGV2ZXIgc3VwcG9ydCBzdXNwZW5kIG9uCi0JCSAqIFNNUCEgV2UnbGwgbmVlZCB0byBkbyB0aGlzIGFzIHBhcnQgb2YgdGhlIENQVSByZXN0b3JlIQotCQkgKi8KLQkJcmRtc3IoTVNSX0lBMzJfQVBJQ0JBU0UsIGwsIGgpOwotCQlsICY9IH5NU1JfSUEzMl9BUElDQkFTRV9CQVNFOwotCQlsIHw9IE1TUl9JQTMyX0FQSUNCQVNFX0VOQUJMRSB8IG1wX2xhcGljX2FkZHI7Ci0JCXdybXNyKE1TUl9JQTMyX0FQSUNCQVNFLCBsLCBoKTsKLQl9Ci0KLQlhcGljX3dyaXRlKEFQSUNfTFZURVJSLCBFUlJPUl9BUElDX1ZFQ1RPUiB8IEFQSUNfTFZUX01BU0tFRCk7Ci0JYXBpY193cml0ZShBUElDX0lELCBhcGljX3BtX3N0YXRlLmFwaWNfaWQpOwotCWFwaWNfd3JpdGUoQVBJQ19ERlIsIGFwaWNfcG1fc3RhdGUuYXBpY19kZnIpOwotCWFwaWNfd3JpdGUoQVBJQ19MRFIsIGFwaWNfcG1fc3RhdGUuYXBpY19sZHIpOwotCWFwaWNfd3JpdGUoQVBJQ19UQVNLUFJJLCBhcGljX3BtX3N0YXRlLmFwaWNfdGFza3ByaSk7Ci0JYXBpY193cml0ZShBUElDX1NQSVYsIGFwaWNfcG1fc3RhdGUuYXBpY19zcGl2KTsKLQlhcGljX3dyaXRlKEFQSUNfTFZUMCwgYXBpY19wbV9zdGF0ZS5hcGljX2x2dDApOwotCWFwaWNfd3JpdGUoQVBJQ19MVlQxLCBhcGljX3BtX3N0YXRlLmFwaWNfbHZ0MSk7Ci0jaWYgZGVmaW5lZChDT05GSUdfWDg2X01DRV9QNFRIRVJNQUwpIHx8IGRlZmluZWQoQ09ORklHX1g4Nl9NQ0VfSU5URUwpCi0JaWYgKG1heGx2dCA+PSA1KQotCQlhcGljX3dyaXRlKEFQSUNfTFZUVEhNUiwgYXBpY19wbV9zdGF0ZS5hcGljX3RobXIpOwotI2VuZGlmCi0JaWYgKG1heGx2dCA+PSA0KQotCQlhcGljX3dyaXRlKEFQSUNfTFZUUEMsIGFwaWNfcG1fc3RhdGUuYXBpY19sdnRwYyk7Ci0JYXBpY193cml0ZShBUElDX0xWVFQsIGFwaWNfcG1fc3RhdGUuYXBpY19sdnR0KTsKLQlhcGljX3dyaXRlKEFQSUNfVERDUiwgYXBpY19wbV9zdGF0ZS5hcGljX3RkY3IpOwotCWFwaWNfd3JpdGUoQVBJQ19UTUlDVCwgYXBpY19wbV9zdGF0ZS5hcGljX3RtaWN0KTsKLQlhcGljX3dyaXRlKEFQSUNfRVNSLCAwKTsKLQlhcGljX3JlYWQoQVBJQ19FU1IpOwotCWFwaWNfd3JpdGUoQVBJQ19MVlRFUlIsIGFwaWNfcG1fc3RhdGUuYXBpY19sdnRlcnIpOwotCWFwaWNfd3JpdGUoQVBJQ19FU1IsIDApOwotCWFwaWNfcmVhZChBUElDX0VTUik7Ci0KLQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyoKLSAqIFRoaXMgZGV2aWNlIGhhcyBubyBzaHV0ZG93biBtZXRob2QgLSBmdWxseSBmdW5jdGlvbmluZyBsb2NhbCBBUElDcwotICogYXJlIG5lZWRlZCBvbiBldmVyeSBDUFUgdXAgdW50aWwgbWFjaGluZV9oYWx0L3Jlc3RhcnQvcG93ZXJvZmYuCi0gKi8KLQotc3RhdGljIHN0cnVjdCBzeXNkZXZfY2xhc3MgbGFwaWNfc3lzY2xhc3MgPSB7Ci0JLm5hbWUJCT0gImxhcGljIiwKLQkucmVzdW1lCQk9IGxhcGljX3Jlc3VtZSwKLQkuc3VzcGVuZAk9IGxhcGljX3N1c3BlbmQsCi19OwotCi1zdGF0aWMgc3RydWN0IHN5c19kZXZpY2UgZGV2aWNlX2xhcGljID0gewotCS5pZAk9IDAsCi0JLmNscwk9ICZsYXBpY19zeXNjbGFzcywKLX07Ci0KLXN0YXRpYyB2b2lkIF9fZGV2aW5pdCBhcGljX3BtX2FjdGl2YXRlKHZvaWQpCi17Ci0JYXBpY19wbV9zdGF0ZS5hY3RpdmUgPSAxOwotfQotCi1zdGF0aWMgaW50IF9faW5pdCBpbml0X2xhcGljX3N5c2ZzKHZvaWQpCi17Ci0JaW50IGVycm9yOwotCi0JaWYgKCFjcHVfaGFzX2FwaWMpCi0JCXJldHVybiAwOwotCS8qIFhYWDogcmVtb3ZlIHN1c3BlbmQvcmVzdW1lIHByb2NzIGlmICFhcGljX3BtX3N0YXRlLmFjdGl2ZT8gKi8KLQotCWVycm9yID0gc3lzZGV2X2NsYXNzX3JlZ2lzdGVyKCZsYXBpY19zeXNjbGFzcyk7Ci0JaWYgKCFlcnJvcikKLQkJZXJyb3IgPSBzeXNkZXZfcmVnaXN0ZXIoJmRldmljZV9sYXBpYyk7Ci0JcmV0dXJuIGVycm9yOwotfQotZGV2aWNlX2luaXRjYWxsKGluaXRfbGFwaWNfc3lzZnMpOwotCi0jZWxzZQkvKiBDT05GSUdfUE0gKi8KLQotc3RhdGljIHZvaWQgYXBpY19wbV9hY3RpdmF0ZSh2b2lkKSB7IH0KLQotI2VuZGlmCS8qIENPTkZJR19QTSAqLwotCi0vKgotICogQVBJQyBjb21tYW5kIGxpbmUgcGFyYW1ldGVycwotICovCi1zdGF0aWMgaW50IF9faW5pdCBwYXJzZV9sYXBpYyhjaGFyICphcmcpCi17Ci0JZm9yY2VfZW5hYmxlX2xvY2FsX2FwaWMgPSAxOwotCXJldHVybiAwOwotfQotZWFybHlfcGFyYW0oImxhcGljIiwgcGFyc2VfbGFwaWMpOwotCi1zdGF0aWMgaW50IF9faW5pdCBzZXR1cF9kaXNhYmxlYXBpYyhjaGFyICphcmcpCi17Ci0JZGlzYWJsZV9hcGljID0gMTsKLQlzZXR1cF9jbGVhcl9jcHVfY2FwKFg4Nl9GRUFUVVJFX0FQSUMpOwotCXJldHVybiAwOwotfQotZWFybHlfcGFyYW0oImRpc2FibGVhcGljIiwgc2V0dXBfZGlzYWJsZWFwaWMpOwotCi0vKiBzYW1lIGFzIGRpc2FibGVhcGljLCBmb3IgY29tcGF0aWJpbGl0eSAqLwotc3RhdGljIGludCBfX2luaXQgc2V0dXBfbm9sYXBpYyhjaGFyICphcmcpCi17Ci0JcmV0dXJuIHNldHVwX2Rpc2FibGVhcGljKGFyZyk7Ci19Ci1lYXJseV9wYXJhbSgibm9sYXBpYyIsIHNldHVwX25vbGFwaWMpOwotCi1zdGF0aWMgaW50IF9faW5pdCBwYXJzZV9sYXBpY190aW1lcl9jMl9vayhjaGFyICphcmcpCi17Ci0JbG9jYWxfYXBpY190aW1lcl9jMl9vayA9IDE7Ci0JcmV0dXJuIDA7Ci19Ci1lYXJseV9wYXJhbSgibGFwaWNfdGltZXJfYzJfb2siLCBwYXJzZV9sYXBpY190aW1lcl9jMl9vayk7Ci0KLXN0YXRpYyBpbnQgX19pbml0IHBhcnNlX2Rpc2FibGVfYXBpY190aW1lcihjaGFyICphcmcpCi17Ci0JZGlzYWJsZV9hcGljX3RpbWVyID0gMTsKLQlyZXR1cm4gMDsKLX0KLWVhcmx5X3BhcmFtKCJub2FwaWN0aW1lciIsIHBhcnNlX2Rpc2FibGVfYXBpY190aW1lcik7Ci0KLXN0YXRpYyBpbnQgX19pbml0IHBhcnNlX25vbGFwaWNfdGltZXIoY2hhciAqYXJnKQotewotCWRpc2FibGVfYXBpY190aW1lciA9IDE7Ci0JcmV0dXJuIDA7Ci19Ci1lYXJseV9wYXJhbSgibm9sYXBpY190aW1lciIsIHBhcnNlX25vbGFwaWNfdGltZXIpOwotCi1zdGF0aWMgaW50IF9faW5pdCBhcGljX3NldF92ZXJib3NpdHkoY2hhciAqYXJnKQotewotCWlmICghYXJnKSAgewotI2lmZGVmIENPTkZJR19YODZfNjQKLQkJc2tpcF9pb2FwaWNfc2V0dXAgPSAwOwotCQlpb2FwaWNfZm9yY2UgPSAxOwotCQlyZXR1cm4gMDsKLSNlbmRpZgotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlpZiAoc3RyY21wKCJkZWJ1ZyIsIGFyZykgPT0gMCkKLQkJYXBpY192ZXJib3NpdHkgPSBBUElDX0RFQlVHOwotCWVsc2UgaWYgKHN0cmNtcCgidmVyYm9zZSIsIGFyZykgPT0gMCkKLQkJYXBpY192ZXJib3NpdHkgPSBBUElDX1ZFUkJPU0U7Ci0JZWxzZSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIkFQSUMgVmVyYm9zaXR5IGxldmVsICVzIG5vdCByZWNvZ25pc2VkIgotCQkJIiB1c2UgYXBpYz12ZXJib3NlIG9yIGFwaWM9ZGVidWdcbiIsIGFyZyk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCXJldHVybiAwOwotfQotZWFybHlfcGFyYW0oImFwaWMiLCBhcGljX3NldF92ZXJib3NpdHkpOwotCi1zdGF0aWMgaW50IF9faW5pdCBsYXBpY19pbnNlcnRfcmVzb3VyY2Uodm9pZCkKLXsKLQlpZiAoIWFwaWNfcGh5cykKLQkJcmV0dXJuIC0xOwotCi0JLyogUHV0IGxvY2FsIEFQSUMgaW50byB0aGUgcmVzb3VyY2UgbWFwLiAqLwotCWxhcGljX3Jlc291cmNlLnN0YXJ0ID0gYXBpY19waHlzOwotCWxhcGljX3Jlc291cmNlLmVuZCA9IGxhcGljX3Jlc291cmNlLnN0YXJ0ICsgUEFHRV9TSVpFIC0gMTsKLQlpbnNlcnRfcmVzb3VyY2UoJmlvbWVtX3Jlc291cmNlLCAmbGFwaWNfcmVzb3VyY2UpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qCi0gKiBuZWVkIGNhbGwgaW5zZXJ0IGFmdGVyIGU4MjBfcmVzZXJ2ZV9yZXNvdXJjZXMoKQotICogdGhhdCBpcyB1c2luZyByZXF1ZXN0X3Jlc291cmNlCi0gKi8KLWxhdGVfaW5pdGNhbGwobGFwaWNfaW5zZXJ0X3Jlc291cmNlKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9hcGljXzY0LmMgYi9hcmNoL3g4Ni9rZXJuZWwvYXBpY182NC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1Mzg5OGI2Li4wMDAwMDAwCi0tLSBhL2FyY2gveDg2L2tlcm5lbC9hcGljXzY0LmMKKysrIC9kZXYvbnVsbApAQCAtMSwxODQ0ICswLDAgQEAKLS8qCi0gKglMb2NhbCBBUElDIGhhbmRsaW5nLCBsb2NhbCBBUElDIHRpbWVycwotICoKLSAqCShjKSAxOTk5LCAyMDAwIEluZ28gTW9sbmFyIDxtaW5nb0ByZWRoYXQuY29tPgotICoKLSAqCUZpeGVzCi0gKglNYWNpZWogVy4gUm96eWNraQk6CUJpdHMgZm9yIGdlbnVpbmUgODI0ODlEWCBBUElDczsKLSAqCQkJCQl0aGFua3MgdG8gRXJpYyBHaWxtb3JlCi0gKgkJCQkJYW5kIFJvbGYgRy4gVGV3cwotICoJCQkJCWZvciB0ZXN0aW5nIHRoZXNlIGV4dGVuc2l2ZWx5LgotICoJTWFjaWVqIFcuIFJvenlja2kJOglWYXJpb3VzIHVwZGF0ZXMgYW5kIGZpeGVzLgotICoJTWlrYWVsIFBldHRlcnNzb24JOglQb3dlciBNYW5hZ2VtZW50IGZvciBVUC1BUElDLgotICoJUGF2ZWwgTWFjaGVrIGFuZAotICoJTWlrYWVsIFBldHRlcnNzb24JOglQTSBjb252ZXJ0ZWQgdG8gZHJpdmVyIG1vZGVsLgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0KLSNpbmNsdWRlIDxsaW51eC9tbS5oPgotI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Ci0jaW5jbHVkZSA8bGludXgvYm9vdG1lbS5oPgotI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgotI2luY2x1ZGUgPGxpbnV4L21jMTQ2ODE4cnRjLmg+Ci0jaW5jbHVkZSA8bGludXgva2VybmVsX3N0YXQuaD4KLSNpbmNsdWRlIDxsaW51eC9zeXNkZXYuaD4KLSNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KLSNpbmNsdWRlIDxsaW51eC9jbG9ja2NoaXBzLmg+Ci0jaW5jbHVkZSA8bGludXgvYWNwaV9wbXRtci5oPgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L2RtYXIuaD4KLQotI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KLSNpbmNsdWRlIDxhc20vc21wLmg+Ci0jaW5jbHVkZSA8YXNtL210cnIuaD4KLSNpbmNsdWRlIDxhc20vbXBzcGVjLmg+Ci0jaW5jbHVkZSA8YXNtL2hwZXQuaD4KLSNpbmNsdWRlIDxhc20vcGdhbGxvYy5oPgotI2luY2x1ZGUgPGFzbS9ubWkuaD4KLSNpbmNsdWRlIDxhc20vaWRsZS5oPgotI2luY2x1ZGUgPGFzbS9wcm90by5oPgotI2luY2x1ZGUgPGFzbS90aW1leC5oPgotI2luY2x1ZGUgPGFzbS9hcGljLmg+Ci0jaW5jbHVkZSA8YXNtL2k4MjU5Lmg+Ci0KLSNpbmNsdWRlIDxtYWNoX2lwaS5oPgotI2luY2x1ZGUgPG1hY2hfYXBpYy5oPgotCi0vKiBEaXNhYmxlIGxvY2FsIEFQSUMgdGltZXIgZnJvbSB0aGUga2VybmVsIGNvbW1hbmRsaW5lIG9yIHZpYSBkbWkgcXVpcmsgKi8KLXN0YXRpYyBpbnQgZGlzYWJsZV9hcGljX3RpbWVyIF9fY3B1aW5pdGRhdGE7Ci1zdGF0aWMgaW50IGFwaWNfY2FsaWJyYXRlX3BtdG1yIF9faW5pdGRhdGE7Ci1pbnQgZGlzYWJsZV9hcGljOwotaW50IGRpc2FibGVfeDJhcGljOwotaW50IHgyYXBpYzsKLQotLyogeDJhcGljIGVuYWJsZWQgYmVmb3JlIE9TIGhhbmRvdmVyICovCi1pbnQgeDJhcGljX3ByZWVuYWJsZWQ7Ci0KLS8qIExvY2FsIEFQSUMgdGltZXIgd29ya3MgaW4gQzIgKi8KLWludCBsb2NhbF9hcGljX3RpbWVyX2MyX29rOwotRVhQT1JUX1NZTUJPTF9HUEwobG9jYWxfYXBpY190aW1lcl9jMl9vayk7Ci0KLS8qCi0gKiBEZWJ1ZyBsZXZlbCwgZXhwb3J0ZWQgZm9yIGlvX2FwaWMuYwotICovCi11bnNpZ25lZCBpbnQgYXBpY192ZXJib3NpdHk7Ci0KLS8qIEhhdmUgd2UgZm91bmQgYW4gTVAgdGFibGUgKi8KLWludCBzbXBfZm91bmRfY29uZmlnOwotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIGxhcGljX3Jlc291cmNlID0gewotCS5uYW1lID0gIkxvY2FsIEFQSUMiLAotCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNIHwgSU9SRVNPVVJDRV9CVVNZLAotfTsKLQotc3RhdGljIHVuc2lnbmVkIGludCBjYWxpYnJhdGlvbl9yZXN1bHQ7Ci0KLXN0YXRpYyBpbnQgbGFwaWNfbmV4dF9ldmVudCh1bnNpZ25lZCBsb25nIGRlbHRhLAotCQkJICAgIHN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgKmV2dCk7Ci1zdGF0aWMgdm9pZCBsYXBpY190aW1lcl9zZXR1cChlbnVtIGNsb2NrX2V2ZW50X21vZGUgbW9kZSwKLQkJCSAgICAgIHN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgKmV2dCk7Ci1zdGF0aWMgdm9pZCBsYXBpY190aW1lcl9icm9hZGNhc3QoY3B1bWFza190IG1hc2spOwotc3RhdGljIHZvaWQgYXBpY19wbV9hY3RpdmF0ZSh2b2lkKTsKLQotLyoKLSAqIFRoZSBsb2NhbCBhcGljIHRpbWVyIGNhbiBiZSB1c2VkIGZvciBhbnkgZnVuY3Rpb24gd2hpY2ggaXMgQ1BVIGxvY2FsLgotICovCi1zdGF0aWMgc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSBsYXBpY19jbG9ja2V2ZW50ID0gewotCS5uYW1lCQk9ICJsYXBpYyIsCi0JLmZlYXR1cmVzCT0gQ0xPQ0tfRVZUX0ZFQVRfUEVSSU9ESUMgfCBDTE9DS19FVlRfRkVBVF9PTkVTSE9UCi0JCQl8IENMT0NLX0VWVF9GRUFUX0MzU1RPUCB8IENMT0NLX0VWVF9GRUFUX0RVTU1ZLAotCS5zaGlmdAkJPSAzMiwKLQkuc2V0X21vZGUJPSBsYXBpY190aW1lcl9zZXR1cCwKLQkuc2V0X25leHRfZXZlbnQJPSBsYXBpY19uZXh0X2V2ZW50LAotCS5icm9hZGNhc3QJPSBsYXBpY190aW1lcl9icm9hZGNhc3QsCi0JLnJhdGluZwkJPSAxMDAsCi0JLmlycQkJPSAtMSwKLX07Ci1zdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSwgbGFwaWNfZXZlbnRzKTsKLQotc3RhdGljIHVuc2lnbmVkIGxvbmcgYXBpY19waHlzOwotCi11bnNpZ25lZCBsb25nIG1wX2xhcGljX2FkZHI7Ci0KLS8qCi0gKiBHZXQgdGhlIExBUElDIHZlcnNpb24KLSAqLwotc3RhdGljIGlubGluZSBpbnQgbGFwaWNfZ2V0X3ZlcnNpb24odm9pZCkKLXsKLQlyZXR1cm4gR0VUX0FQSUNfVkVSU0lPTihhcGljX3JlYWQoQVBJQ19MVlIpKTsKLX0KLQotLyoKLSAqIENoZWNrLCBpZiB0aGUgQVBJQyBpcyBpbnRlZ3JhdGVkIG9yIGEgc2VwYXJhdGUgY2hpcAotICovCi1zdGF0aWMgaW5saW5lIGludCBsYXBpY19pc19pbnRlZ3JhdGVkKHZvaWQpCi17Ci0jaWZkZWYgQ09ORklHX1g4Nl82NAotCXJldHVybiAxOwotI2Vsc2UKLQlyZXR1cm4gQVBJQ19JTlRFR1JBVEVEKGxhcGljX2dldF92ZXJzaW9uKCkpOwotI2VuZGlmCi19Ci0KLS8qCi0gKiBDaGVjaywgd2hldGhlciB0aGlzIGlzIGEgbW9kZXJuIG9yIGEgZmlyc3QgZ2VuZXJhdGlvbiBBUElDCi0gKi8KLXN0YXRpYyBpbnQgbW9kZXJuX2FwaWModm9pZCkKLXsKLQkvKiBBTUQgc3lzdGVtcyB1c2Ugb2xkIEFQSUMgdmVyc2lvbnMsIHNvIGNoZWNrIHRoZSBDUFUgKi8KLQlpZiAoYm9vdF9jcHVfZGF0YS54ODZfdmVuZG9yID09IFg4Nl9WRU5ET1JfQU1EICYmCi0JICAgIGJvb3RfY3B1X2RhdGEueDg2ID49IDB4ZikKLQkJcmV0dXJuIDE7Ci0JcmV0dXJuIGxhcGljX2dldF92ZXJzaW9uKCkgPj0gMHgxNDsKLX0KLQotLyoKLSAqIFBhcmF2aXJ0IGtlcm5lbHMgYWxzbyBtaWdodCBiZSB1c2luZyB0aGVzZSBiZWxvdyBvcHMuIFNvIHdlIHN0aWxsCi0gKiB1c2UgZ2VuZXJpYyBhcGljX3JlYWQoKS9hcGljX3dyaXRlKCksIHdoaWNoIG1pZ2h0IGJlIHBvaW50aW5nIHRvIGRpZmZlcmVudAotICogb3BzIGluIFBBUkFWSVJUIGNhc2UuCi0gKi8KLXZvaWQgeGFwaWNfd2FpdF9pY3JfaWRsZSh2b2lkKQotewotCXdoaWxlIChhcGljX3JlYWQoQVBJQ19JQ1IpICYgQVBJQ19JQ1JfQlVTWSkKLQkJY3B1X3JlbGF4KCk7Ci19Ci0KLXUzMiBzYWZlX3hhcGljX3dhaXRfaWNyX2lkbGUodm9pZCkKLXsKLQl1MzIgc2VuZF9zdGF0dXM7Ci0JaW50IHRpbWVvdXQ7Ci0KLQl0aW1lb3V0ID0gMDsKLQlkbyB7Ci0JCXNlbmRfc3RhdHVzID0gYXBpY19yZWFkKEFQSUNfSUNSKSAmIEFQSUNfSUNSX0JVU1k7Ci0JCWlmICghc2VuZF9zdGF0dXMpCi0JCQlicmVhazsKLQkJdWRlbGF5KDEwMCk7Ci0JfSB3aGlsZSAodGltZW91dCsrIDwgMTAwMCk7Ci0KLQlyZXR1cm4gc2VuZF9zdGF0dXM7Ci19Ci0KLXZvaWQgeGFwaWNfaWNyX3dyaXRlKHUzMiBsb3csIHUzMiBpZCkKLXsKLQlhcGljX3dyaXRlKEFQSUNfSUNSMiwgU0VUX0FQSUNfREVTVF9GSUVMRChpZCkpOwotCWFwaWNfd3JpdGUoQVBJQ19JQ1IsIGxvdyk7Ci19Ci0KLXU2NCB4YXBpY19pY3JfcmVhZCh2b2lkKQotewotCXUzMiBpY3IxLCBpY3IyOwotCi0JaWNyMiA9IGFwaWNfcmVhZChBUElDX0lDUjIpOwotCWljcjEgPSBhcGljX3JlYWQoQVBJQ19JQ1IpOwotCi0JcmV0dXJuIGljcjEgfCAoKHU2NClpY3IyIDw8IDMyKTsKLX0KLQotc3RhdGljIHN0cnVjdCBhcGljX29wcyB4YXBpY19vcHMgPSB7Ci0JLnJlYWQgPSBuYXRpdmVfYXBpY19tZW1fcmVhZCwKLQkud3JpdGUgPSBuYXRpdmVfYXBpY19tZW1fd3JpdGUsCi0JLmljcl9yZWFkID0geGFwaWNfaWNyX3JlYWQsCi0JLmljcl93cml0ZSA9IHhhcGljX2ljcl93cml0ZSwKLQkud2FpdF9pY3JfaWRsZSA9IHhhcGljX3dhaXRfaWNyX2lkbGUsCi0JLnNhZmVfd2FpdF9pY3JfaWRsZSA9IHNhZmVfeGFwaWNfd2FpdF9pY3JfaWRsZSwKLX07Ci0KLXN0cnVjdCBhcGljX29wcyBfX3JlYWRfbW9zdGx5ICphcGljX29wcyA9ICZ4YXBpY19vcHM7Ci1FWFBPUlRfU1lNQk9MX0dQTChhcGljX29wcyk7Ci0KLXN0YXRpYyB2b2lkIHgyYXBpY193YWl0X2ljcl9pZGxlKHZvaWQpCi17Ci0JLyogbm8gbmVlZCB0byB3YWl0IGZvciBpY3IgaWRsZSBpbiB4MmFwaWMgKi8KLQlyZXR1cm47Ci19Ci0KLXN0YXRpYyB1MzIgc2FmZV94MmFwaWNfd2FpdF9pY3JfaWRsZSh2b2lkKQotewotCS8qIG5vIG5lZWQgdG8gd2FpdCBmb3IgaWNyIGlkbGUgaW4geDJhcGljICovCi0JcmV0dXJuIDA7Ci19Ci0KLXZvaWQgeDJhcGljX2ljcl93cml0ZSh1MzIgbG93LCB1MzIgaWQpCi17Ci0Jd3Jtc3JsKEFQSUNfQkFTRV9NU1IgKyAoQVBJQ19JQ1IgPj4gNCksICgoX191NjQpIGlkKSA8PCAzMiB8IGxvdyk7Ci19Ci0KLXU2NCB4MmFwaWNfaWNyX3JlYWQodm9pZCkKLXsKLQl1bnNpZ25lZCBsb25nIHZhbDsKLQotCXJkbXNybChBUElDX0JBU0VfTVNSICsgKEFQSUNfSUNSID4+IDQpLCB2YWwpOwotCXJldHVybiB2YWw7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgYXBpY19vcHMgeDJhcGljX29wcyA9IHsKLQkucmVhZCA9IG5hdGl2ZV9hcGljX21zcl9yZWFkLAotCS53cml0ZSA9IG5hdGl2ZV9hcGljX21zcl93cml0ZSwKLQkuaWNyX3JlYWQgPSB4MmFwaWNfaWNyX3JlYWQsCi0JLmljcl93cml0ZSA9IHgyYXBpY19pY3Jfd3JpdGUsCi0JLndhaXRfaWNyX2lkbGUgPSB4MmFwaWNfd2FpdF9pY3JfaWRsZSwKLQkuc2FmZV93YWl0X2ljcl9pZGxlID0gc2FmZV94MmFwaWNfd2FpdF9pY3JfaWRsZSwKLX07Ci0KLS8qKgotICogZW5hYmxlX05NSV90aHJvdWdoX0xWVDAgLSBlbmFibGUgTk1JIHRocm91Z2ggbG9jYWwgdmVjdG9yIHRhYmxlIDAKLSAqLwotdm9pZCBfX2NwdWluaXQgZW5hYmxlX05NSV90aHJvdWdoX0xWVDAodm9pZCkKLXsKLQl1bnNpZ25lZCBpbnQgdjsKLQotCS8qIHVubWFzayBhbmQgc2V0IHRvIE5NSSAqLwotCXYgPSBBUElDX0RNX05NSTsKLQotCS8qIExldmVsIHRyaWdnZXJlZCBmb3IgODI0ODlEWCAoMzJiaXQgbW9kZSkgKi8KLQlpZiAoIWxhcGljX2lzX2ludGVncmF0ZWQoKSkKLQkJdiB8PSBBUElDX0xWVF9MRVZFTF9UUklHR0VSOwotCi0JYXBpY193cml0ZShBUElDX0xWVDAsIHYpOwotfQotCi0vKioKLSAqIGxhcGljX2dldF9tYXhsdnQgLSBnZXQgdGhlIG1heGltdW0gbnVtYmVyIG9mIGxvY2FsIHZlY3RvciB0YWJsZSBlbnRyaWVzCi0gKi8KLWludCBsYXBpY19nZXRfbWF4bHZ0KHZvaWQpCi17Ci0JdW5zaWduZWQgaW50IHY7Ci0KLQl2ID0gYXBpY19yZWFkKEFQSUNfTFZSKTsKLQkvKgotCSAqIC0gd2UgYWx3YXlzIGhhdmUgQVBJQyBpbnRlZ3JhdGVkIG9uIDY0Yml0IG1vZGUKLQkgKiAtIDgyNDg5RFhzIGRvIG5vdCByZXBvcnQgIyBvZiBMVlQgZW50cmllcwotCSAqLwotCXJldHVybiBBUElDX0lOVEVHUkFURUQoR0VUX0FQSUNfVkVSU0lPTih2KSkgPyBHRVRfQVBJQ19NQVhMVlQodikgOiAyOwotfQotCi0vKgotICogTG9jYWwgQVBJQyB0aW1lcgotICovCi0KLS8qIENsb2NrIGRpdmlzb3IgKi8KLSNpZmRlZiBDT05GR19YODZfNjQKLSNkZWZpbmUgQVBJQ19ESVZJU09SIDEKLSNlbHNlCi0jZGVmaW5lIEFQSUNfRElWSVNPUiAxNgotI2VuZGlmCi0KLS8qCi0gKiBUaGlzIGZ1bmN0aW9uIHNldHMgdXAgdGhlIGxvY2FsIEFQSUMgdGltZXIsIHdpdGggYSB0aW1lb3V0IG9mCi0gKiAnY2xvY2tzJyBBUElDIGJ1cyBjbG9jay4gRHVyaW5nIGNhbGlicmF0aW9uIHdlIGFjdHVhbGx5IGNhbGwKLSAqIHRoaXMgZnVuY3Rpb24gdHdpY2Ugb24gdGhlIGJvb3QgQ1BVLCBvbmNlIHdpdGggYSBib2d1cyB0aW1lb3V0Ci0gKiB2YWx1ZSwgc2Vjb25kIHRpbWUgZm9yIHJlYWwuIFRoZSBvdGhlciAobm9uY2FsaWJyYXRpbmcpIENQVXMKLSAqIGNhbGwgdGhpcyBmdW5jdGlvbiBvbmx5IG9uY2UsIHdpdGggdGhlIHJlYWwsIGNhbGlicmF0ZWQgdmFsdWUuCi0gKgotICogV2UgZG8gcmVhZHMgYmVmb3JlIHdyaXRlcyBldmVuIGlmIHVubmVjZXNzYXJ5LCB0byBnZXQgYXJvdW5kIHRoZQotICogUDUgQVBJQyBkb3VibGUgd3JpdGUgYnVnLgotICovCi1zdGF0aWMgdm9pZCBfX3NldHVwX0FQSUNfTFZUVCh1bnNpZ25lZCBpbnQgY2xvY2tzLCBpbnQgb25lc2hvdCwgaW50IGlycWVuKQotewotCXVuc2lnbmVkIGludCBsdnR0X3ZhbHVlLCB0bXBfdmFsdWU7Ci0KLQlsdnR0X3ZhbHVlID0gTE9DQUxfVElNRVJfVkVDVE9SOwotCWlmICghb25lc2hvdCkKLQkJbHZ0dF92YWx1ZSB8PSBBUElDX0xWVF9USU1FUl9QRVJJT0RJQzsKLQlpZiAoIWxhcGljX2lzX2ludGVncmF0ZWQoKSkKLQkJbHZ0dF92YWx1ZSB8PSBTRVRfQVBJQ19USU1FUl9CQVNFKEFQSUNfVElNRVJfQkFTRV9ESVYpOwotCi0JaWYgKCFpcnFlbikKLQkJbHZ0dF92YWx1ZSB8PSBBUElDX0xWVF9NQVNLRUQ7Ci0KLQlhcGljX3dyaXRlKEFQSUNfTFZUVCwgbHZ0dF92YWx1ZSk7Ci0KLQkvKgotCSAqIERpdmlkZSBQSUNMSyBieSAxNgotCSAqLwotCXRtcF92YWx1ZSA9IGFwaWNfcmVhZChBUElDX1REQ1IpOwotCWFwaWNfd3JpdGUoQVBJQ19URENSLAotCQkodG1wX3ZhbHVlICYgfihBUElDX1REUl9ESVZfMSB8IEFQSUNfVERSX0RJVl9UTUJBU0UpKSB8Ci0JCUFQSUNfVERSX0RJVl8xNik7Ci0KLQlpZiAoIW9uZXNob3QpCi0JCWFwaWNfd3JpdGUoQVBJQ19UTUlDVCwgY2xvY2tzIC8gQVBJQ19ESVZJU09SKTsKLX0KLQotLyoKLSAqIFNldHVwIGV4dGVuZGVkIExWVCwgQU1EIHNwZWNpZmljIChLOCwgZmFtaWx5IDEwaCkKLSAqCi0gKiBWZWN0b3IgbWFwcGluZ3MgYXJlIGhhcmQgY29kZWQuIE9uIEs4IG9ubHkgb2Zmc2V0IDAgKEFQSUM1MDApIGFuZAotICogTUNFIGludGVycnVwdHMgYXJlIHN1cHBvcnRlZC4gVGh1cyBNQ0Ugb2Zmc2V0IG11c3QgYmUgc2V0IHRvIDAuCi0gKi8KLQotI2RlZmluZSBBUElDX0VJTFZUX0xWVE9GRl9NQ0UgMAotI2RlZmluZSBBUElDX0VJTFZUX0xWVE9GRl9JQlMgMQotCi1zdGF0aWMgdm9pZCBzZXR1cF9BUElDX2VpbHZ0KHU4IGx2dF9vZmYsIHU4IHZlY3RvciwgdTggbXNnX3R5cGUsIHU4IG1hc2spCi17Ci0JdW5zaWduZWQgbG9uZyByZWcgPSAobHZ0X29mZiA8PCA0KSArIEFQSUNfRUlMVlQwOwotCXVuc2lnbmVkIGludCAgdiAgID0gKG1hc2sgPDwgMTYpIHwgKG1zZ190eXBlIDw8IDgpIHwgdmVjdG9yOwotCi0JYXBpY193cml0ZShyZWcsIHYpOwotfQotCi11OCBzZXR1cF9BUElDX2VpbHZ0X21jZSh1OCB2ZWN0b3IsIHU4IG1zZ190eXBlLCB1OCBtYXNrKQotewotCXNldHVwX0FQSUNfZWlsdnQoQVBJQ19FSUxWVF9MVlRPRkZfTUNFLCB2ZWN0b3IsIG1zZ190eXBlLCBtYXNrKTsKLQlyZXR1cm4gQVBJQ19FSUxWVF9MVlRPRkZfTUNFOwotfQotCi11OCBzZXR1cF9BUElDX2VpbHZ0X2licyh1OCB2ZWN0b3IsIHU4IG1zZ190eXBlLCB1OCBtYXNrKQotewotCXNldHVwX0FQSUNfZWlsdnQoQVBJQ19FSUxWVF9MVlRPRkZfSUJTLCB2ZWN0b3IsIG1zZ190eXBlLCBtYXNrKTsKLQlyZXR1cm4gQVBJQ19FSUxWVF9MVlRPRkZfSUJTOwotfQotCi0vKgotICogUHJvZ3JhbSB0aGUgbmV4dCBldmVudCwgcmVsYXRpdmUgdG8gbm93Ci0gKi8KLXN0YXRpYyBpbnQgbGFwaWNfbmV4dF9ldmVudCh1bnNpZ25lZCBsb25nIGRlbHRhLAotCQkJICAgIHN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgKmV2dCkKLXsKLQlhcGljX3dyaXRlKEFQSUNfVE1JQ1QsIGRlbHRhKTsKLQlyZXR1cm4gMDsKLX0KLQotLyoKLSAqIFNldHVwIHRoZSBsYXBpYyB0aW1lciBpbiBwZXJpb2RpYyBvciBvbmVzaG90IG1vZGUKLSAqLwotc3RhdGljIHZvaWQgbGFwaWNfdGltZXJfc2V0dXAoZW51bSBjbG9ja19ldmVudF9tb2RlIG1vZGUsCi0JCQkgICAgICBzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpldnQpCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQl1bnNpZ25lZCBpbnQgdjsKLQotCS8qIExhcGljIHVzZWQgYXMgZHVtbXkgZm9yIGJyb2FkY2FzdCA/ICovCi0JaWYgKGV2dC0+ZmVhdHVyZXMgJiBDTE9DS19FVlRfRkVBVF9EVU1NWSkKLQkJcmV0dXJuOwotCi0JbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCi0Jc3dpdGNoIChtb2RlKSB7Ci0JY2FzZSBDTE9DS19FVlRfTU9ERV9QRVJJT0RJQzoKLQljYXNlIENMT0NLX0VWVF9NT0RFX09ORVNIT1Q6Ci0JCV9fc2V0dXBfQVBJQ19MVlRUKGNhbGlicmF0aW9uX3Jlc3VsdCwKLQkJCQkgIG1vZGUgIT0gQ0xPQ0tfRVZUX01PREVfUEVSSU9ESUMsIDEpOwotCQlicmVhazsKLQljYXNlIENMT0NLX0VWVF9NT0RFX1VOVVNFRDoKLQljYXNlIENMT0NLX0VWVF9NT0RFX1NIVVRET1dOOgotCQl2ID0gYXBpY19yZWFkKEFQSUNfTFZUVCk7Ci0JCXYgfD0gKEFQSUNfTFZUX01BU0tFRCB8IExPQ0FMX1RJTUVSX1ZFQ1RPUik7Ci0JCWFwaWNfd3JpdGUoQVBJQ19MVlRULCB2KTsKLQkJYnJlYWs7Ci0JY2FzZSBDTE9DS19FVlRfTU9ERV9SRVNVTUU6Ci0JCS8qIE5vdGhpbmcgdG8gZG8gaGVyZSAqLwotCQlicmVhazsKLQl9Ci0KLQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Ci19Ci0KLS8qCi0gKiBMb2NhbCBBUElDIHRpbWVyIGJyb2FkY2FzdCBmdW5jdGlvbgotICovCi1zdGF0aWMgdm9pZCBsYXBpY190aW1lcl9icm9hZGNhc3QoY3B1bWFza190IG1hc2spCi17Ci0jaWZkZWYgQ09ORklHX1NNUAotCXNlbmRfSVBJX21hc2sobWFzaywgTE9DQUxfVElNRVJfVkVDVE9SKTsKLSNlbmRpZgotfQotCi0vKgotICogU2V0dXAgdGhlIGxvY2FsIEFQSUMgdGltZXIgZm9yIHRoaXMgQ1BVLiBDb3B5IHRoZSBpbml0aWxpemVkIHZhbHVlcwotICogb2YgdGhlIGJvb3QgQ1BVIGFuZCByZWdpc3RlciB0aGUgY2xvY2sgZXZlbnQgaW4gdGhlIGZyYW1ld29yay4KLSAqLwotc3RhdGljIHZvaWQgc2V0dXBfQVBJQ190aW1lcih2b2lkKQotewotCXN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgKmxldnQgPSAmX19nZXRfY3B1X3ZhcihsYXBpY19ldmVudHMpOwotCi0JbWVtY3B5KGxldnQsICZsYXBpY19jbG9ja2V2ZW50LCBzaXplb2YoKmxldnQpKTsKLQlsZXZ0LT5jcHVtYXNrID0gY3B1bWFza19vZl9jcHUoc21wX3Byb2Nlc3Nvcl9pZCgpKTsKLQotCWNsb2NrZXZlbnRzX3JlZ2lzdGVyX2RldmljZShsZXZ0KTsKLX0KLQotLyoKLSAqIEluIHRoaXMgZnVuY3Rpb24gd2UgY2FsaWJyYXRlIEFQSUMgYnVzIGNsb2NrcyB0byB0aGUgZXh0ZXJuYWwKLSAqIHRpbWVyLiBVbmZvcnR1bmF0ZWx5IHdlIGNhbm5vdCB1c2UgamlmZmllcyBhbmQgdGhlIHRpbWVyIGlycQotICogdG8gY2FsaWJyYXRlLCBzaW5jZSBzb21lIGxhdGVyIGJvb3R1cCBjb2RlIGRlcGVuZHMgb24gZ2V0dGluZwotICogdGhlIGZpcnN0IGlycT8gVWdoLgotICoKLSAqIFdlIHdhbnQgdG8gZG8gdGhlIGNhbGlicmF0aW9uIG9ubHkgb25jZSBzaW5jZSB3ZQotICogd2FudCB0byBoYXZlIGxvY2FsIHRpbWVyIGlycXMgc3luY3Jvbi4gQ1BVcyBjb25uZWN0ZWQKLSAqIGJ5IHRoZSBzYW1lIEFQSUMgYnVzIGhhdmUgdGhlIHZlcnkgc2FtZSBidXMgZnJlcXVlbmN5LgotICogQW5kIHdlIHdhbnQgdG8gaGF2ZSBpcnFzIG9mZiBhbnl3YXlzLCBubyBhY2NpZGVudGFsCi0gKiBBUElDIGlycSB0aGF0IHdheS4KLSAqLwotCi0jZGVmaW5lIFRJQ0tfQ09VTlQgMTAwMDAwMDAwCi0KLXN0YXRpYyBpbnQgX19pbml0IGNhbGlicmF0ZV9BUElDX2Nsb2NrKHZvaWQpCi17Ci0JdW5zaWduZWQgYXBpYywgYXBpY19zdGFydDsKLQl1bnNpZ25lZCBsb25nIHRzYywgdHNjX3N0YXJ0OwotCWludCByZXN1bHQ7Ci0KLQlsb2NhbF9pcnFfZGlzYWJsZSgpOwotCi0JLyoKLQkgKiBQdXQgd2hhdGV2ZXIgYXJiaXRyYXJ5IChidXQgbG9uZyBlbm91Z2gpIHRpbWVvdXQKLQkgKiB2YWx1ZSBpbnRvIHRoZSBBUElDIGNsb2NrLCB3ZSBqdXN0IHdhbnQgdG8gZ2V0IHRoZQotCSAqIGNvdW50ZXIgcnVubmluZyBmb3IgY2FsaWJyYXRpb24uCi0JICoKLQkgKiBObyBpbnRlcnJ1cHQgZW5hYmxlICEKLQkgKi8KLQlfX3NldHVwX0FQSUNfTFZUVCgyNTAwMDAwMDAsIDAsIDApOwotCi0JYXBpY19zdGFydCA9IGFwaWNfcmVhZChBUElDX1RNQ0NUKTsKLSNpZmRlZiBDT05GSUdfWDg2X1BNX1RJTUVSCi0JaWYgKGFwaWNfY2FsaWJyYXRlX3BtdG1yICYmIHBtdG1yX2lvcG9ydCkgewotCQlwbXRpbWVyX3dhaXQoNTAwMCk7ICAvKiA1bXMgd2FpdCAqLwotCQlhcGljID0gYXBpY19yZWFkKEFQSUNfVE1DQ1QpOwotCQlyZXN1bHQgPSAoYXBpY19zdGFydCAtIGFwaWMpICogMTAwMEwgLyA1OwotCX0gZWxzZQotI2VuZGlmCi0JewotCQlyZHRzY2xsKHRzY19zdGFydCk7Ci0KLQkJZG8gewotCQkJYXBpYyA9IGFwaWNfcmVhZChBUElDX1RNQ0NUKTsKLQkJCXJkdHNjbGwodHNjKTsKLQkJfSB3aGlsZSAoKHRzYyAtIHRzY19zdGFydCkgPCBUSUNLX0NPVU5UICYmCi0JCQkJKGFwaWNfc3RhcnQgLSBhcGljKSA8IFRJQ0tfQ09VTlQpOwotCi0JCXJlc3VsdCA9IChhcGljX3N0YXJ0IC0gYXBpYykgKiAxMDAwTCAqIHRzY19raHogLwotCQkJCQkodHNjIC0gdHNjX3N0YXJ0KTsKLQl9Ci0KLQlsb2NhbF9pcnFfZW5hYmxlKCk7Ci0KLQlwcmludGsoS0VSTl9ERUJVRyAiQVBJQyB0aW1lciBjYWxpYnJhdGlvbiByZXN1bHQgJWRcbiIsIHJlc3VsdCk7Ci0KLQlwcmludGsoS0VSTl9JTkZPICJEZXRlY3RlZCAlZC4lMDNkIE1IeiBBUElDIHRpbWVyLlxuIiwKLQkJcmVzdWx0IC8gMTAwMCAvIDEwMDAsIHJlc3VsdCAvIDEwMDAgJSAxMDAwKTsKLQotCS8qIENhbGN1bGF0ZSB0aGUgc2NhbGVkIG1hdGggbXVsdGlwbGljYXRpb24gZmFjdG9yICovCi0JbGFwaWNfY2xvY2tldmVudC5tdWx0ID0gZGl2X3NjKHJlc3VsdCwgTlNFQ19QRVJfU0VDLAotCQkJCSAgICAgICBsYXBpY19jbG9ja2V2ZW50LnNoaWZ0KTsKLQlsYXBpY19jbG9ja2V2ZW50Lm1heF9kZWx0YV9ucyA9Ci0JCWNsb2NrZXZlbnRfZGVsdGEybnMoMHg3RkZGRkYsICZsYXBpY19jbG9ja2V2ZW50KTsKLQlsYXBpY19jbG9ja2V2ZW50Lm1pbl9kZWx0YV9ucyA9Ci0JCWNsb2NrZXZlbnRfZGVsdGEybnMoMHhGLCAmbGFwaWNfY2xvY2tldmVudCk7Ci0KLQljYWxpYnJhdGlvbl9yZXN1bHQgPSAocmVzdWx0ICogQVBJQ19ESVZJU09SKSAvIEhaOwotCi0JLyoKLQkgKiBEbyBhIHNhbml0eSBjaGVjayBvbiB0aGUgQVBJQyBjYWxpYnJhdGlvbiByZXN1bHQKLQkgKi8KLQlpZiAoY2FsaWJyYXRpb25fcmVzdWx0IDwgKDEwMDAwMDAgLyBIWikpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORwotCQkJIkFQSUMgZnJlcXVlbmN5IHRvbyBzbG93LCBkaXNhYmxpbmcgYXBpYyB0aW1lclxuIik7Ci0JCXJldHVybiAtMTsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyoKLSAqIFNldHVwIHRoZSBib290IEFQSUMKLSAqCi0gKiBDYWxpYnJhdGUgYW5kIHZlcmlmeSB0aGUgcmVzdWx0LgotICovCi12b2lkIF9faW5pdCBzZXR1cF9ib290X0FQSUNfY2xvY2sodm9pZCkKLXsKLQkvKgotCSAqIFRoZSBsb2NhbCBhcGljIHRpbWVyIGNhbiBiZSBkaXNhYmxlZCB2aWEgdGhlIGtlcm5lbAotCSAqIGNvbW1hbmRsaW5lIG9yIGZyb20gdGhlIENQVSBkZXRlY3Rpb24gY29kZS4gUmVnaXN0ZXIgdGhlIGxhcGljCi0JICogdGltZXIgYXMgYSBkdW1teSBjbG9jayBldmVudCBzb3VyY2Ugb24gU01QIHN5c3RlbXMsIHNvIHRoZQotCSAqIGJyb2FkY2FzdCBtZWNoYW5pc20gaXMgdXNlZC4gT24gVVAgc3lzdGVtcyBzaW1wbHkgaWdub3JlIGl0LgotCSAqLwotCWlmIChkaXNhYmxlX2FwaWNfdGltZXIpIHsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiRGlzYWJsaW5nIEFQSUMgdGltZXJcbiIpOwotCQkvKiBObyBicm9hZGNhc3Qgb24gVVAgISAqLwotCQlpZiAobnVtX3Bvc3NpYmxlX2NwdXMoKSA+IDEpIHsKLQkJCWxhcGljX2Nsb2NrZXZlbnQubXVsdCA9IDE7Ci0JCQlzZXR1cF9BUElDX3RpbWVyKCk7Ci0JCX0KLQkJcmV0dXJuOwotCX0KLQotCWFwaWNfcHJpbnRrKEFQSUNfVkVSQk9TRSwgIlVzaW5nIGxvY2FsIEFQSUMgdGltZXIgaW50ZXJydXB0cy5cbiIKLQkJICAgICJjYWxpYnJhdGluZyBBUElDIHRpbWVyIC4uLlxuIik7Ci0KLQlpZiAoY2FsaWJyYXRlX0FQSUNfY2xvY2soKSkgewotCQkvKiBObyBicm9hZGNhc3Qgb24gVVAgISAqLwotCQlpZiAobnVtX3Bvc3NpYmxlX2NwdXMoKSA+IDEpCi0JCQlzZXR1cF9BUElDX3RpbWVyKCk7Ci0JCXJldHVybjsKLQl9Ci0KLQkvKgotCSAqIElmIG5taV93YXRjaGRvZyBpcyBzZXQgdG8gSU9fQVBJQywgd2UgbmVlZCB0aGUKLQkgKiBQSVQvSFBFVCBnb2luZy4gIE90aGVyd2lzZSByZWdpc3RlciBsYXBpYyBhcyBhIGR1bW15Ci0JICogZGV2aWNlLgotCSAqLwotCWlmIChubWlfd2F0Y2hkb2cgIT0gTk1JX0lPX0FQSUMpCi0JCWxhcGljX2Nsb2NrZXZlbnQuZmVhdHVyZXMgJj0gfkNMT0NLX0VWVF9GRUFUX0RVTU1ZOwotCWVsc2UKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiQVBJQyB0aW1lciByZWdpc3RlcmVkIGFzIGR1bW15LCIKLQkJCSIgZHVlIHRvIG5taV93YXRjaGRvZz0lZCFcbiIsIG5taV93YXRjaGRvZyk7Ci0KLQkvKiBTZXR1cCB0aGUgbGFwaWMgb3IgcmVxdWVzdCB0aGUgYnJvYWRjYXN0ICovCi0Jc2V0dXBfQVBJQ190aW1lcigpOwotfQotCi12b2lkIF9fY3B1aW5pdCBzZXR1cF9zZWNvbmRhcnlfQVBJQ19jbG9jayh2b2lkKQotewotCXNldHVwX0FQSUNfdGltZXIoKTsKLX0KLQotLyoKLSAqIFRoZSBndXRzIG9mIHRoZSBhcGljIHRpbWVyIGludGVycnVwdAotICovCi1zdGF0aWMgdm9pZCBsb2NhbF9hcGljX3RpbWVyX2ludGVycnVwdCh2b2lkKQotewotCWludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7Ci0Jc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqZXZ0ID0gJnBlcl9jcHUobGFwaWNfZXZlbnRzLCBjcHUpOwotCi0JLyoKLQkgKiBOb3JtYWxseSB3ZSBzaG91bGQgbm90IGJlIGhlcmUgdGlsbCBMQVBJQyBoYXMgYmVlbiBpbml0aWFsaXplZCBidXQKLQkgKiBpbiBzb21lIGNhc2VzIGxpa2Uga2R1bXAsIGl0cyBwb3NzaWJsZSB0aGF0IHRoZXJlIGlzIGEgcGVuZGluZyBMQVBJQwotCSAqIHRpbWVyIGludGVycnVwdCBmcm9tIHByZXZpb3VzIGtlcm5lbCdzIGNvbnRleHQgYW5kIGlzIGRlbGl2ZXJlZCBpbgotCSAqIG5ldyBrZXJuZWwgdGhlIG1vbWVudCBpbnRlcnJ1cHRzIGFyZSBlbmFibGVkLgotCSAqCi0JICogSW50ZXJydXB0cyBhcmUgZW5hYmxlZCBlYXJseSBhbmQgTEFQSUMgaXMgc2V0dXAgbXVjaCBsYXRlciwgaGVuY2UKLQkgKiBpdHMgcG9zc2libGUgdGhhdCB3aGVuIHdlIGdldCBoZXJlIGV2dC0+ZXZlbnRfaGFuZGxlciBpcyBOVUxMLgotCSAqIENoZWNrIGZvciBldmVudF9oYW5kbGVyIGJlaW5nIE5VTEwgYW5kIGRpc2NhcmQgdGhlIGludGVycnVwdCBhcwotCSAqIHNwdXJpb3VzLgotCSAqLwotCWlmICghZXZ0LT5ldmVudF9oYW5kbGVyKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcKLQkJICAgICAgICJTcHVyaW91cyBMQVBJQyB0aW1lciBpbnRlcnJ1cHQgb24gY3B1ICVkXG4iLCBjcHUpOwotCQkvKiBTd2l0Y2ggaXQgb2ZmICovCi0JCWxhcGljX3RpbWVyX3NldHVwKENMT0NLX0VWVF9NT0RFX1NIVVRET1dOLCBldnQpOwotCQlyZXR1cm47Ci0JfQotCi0JLyoKLQkgKiB0aGUgTk1JIGRlYWRsb2NrLWRldGVjdG9yIHVzZXMgdGhpcy4KLQkgKi8KLSNpZmRlZiBDT05GSUdfWDg2XzY0Ci0JYWRkX3BkYShhcGljX3RpbWVyX2lycXMsIDEpOwotI2Vsc2UKLQlwZXJfY3B1KGlycV9zdGF0LCBjcHUpLmFwaWNfdGltZXJfaXJxcysrOwotI2VuZGlmCi0KLQlldnQtPmV2ZW50X2hhbmRsZXIoZXZ0KTsKLX0KLQotLyoKLSAqIExvY2FsIEFQSUMgdGltZXIgaW50ZXJydXB0LiBUaGlzIGlzIHRoZSBtb3N0IG5hdHVyYWwgd2F5IGZvciBkb2luZwotICogbG9jYWwgaW50ZXJydXB0cywgYnV0IGxvY2FsIHRpbWVyIGludGVycnVwdHMgY2FuIGJlIGVtdWxhdGVkIGJ5Ci0gKiBicm9hZGNhc3QgaW50ZXJydXB0cyB0b28uIFtpbiBjYXNlIHRoZSBodyBkb2Vzbid0IHN1cHBvcnQgQVBJQyB0aW1lcnNdCi0gKgotICogWyBpZiBhIHNpbmdsZS1DUFUgc3lzdGVtIHJ1bnMgYW4gU01QIGtlcm5lbCB0aGVuIHdlIGNhbGwgdGhlIGxvY2FsCi0gKiAgIGludGVycnVwdCBhcyB3ZWxsLiBUaHVzIHdlIGNhbm5vdCBpbmxpbmUgdGhlIGxvY2FsIGlycSAuLi4gXQotICovCi12b2lkIHNtcF9hcGljX3RpbWVyX2ludGVycnVwdChzdHJ1Y3QgcHRfcmVncyAqcmVncykKLXsKLQlzdHJ1Y3QgcHRfcmVncyAqb2xkX3JlZ3MgPSBzZXRfaXJxX3JlZ3MocmVncyk7Ci0KLQkvKgotCSAqIE5PVEUhIFdlJ2QgYmV0dGVyIEFDSyB0aGUgaXJxIGltbWVkaWF0ZWx5LAotCSAqIGJlY2F1c2UgdGltZXIgaGFuZGxpbmcgY2FuIGJlIHNsb3cuCi0JICovCi0JYWNrX0FQSUNfaXJxKCk7Ci0JLyoKLQkgKiB1cGRhdGVfcHJvY2Vzc190aW1lcygpIGV4cGVjdHMgdXMgdG8gaGF2ZSBkb25lIGlycV9lbnRlcigpLgotCSAqIEJlc2lkZXMsIGlmIHdlIGRvbid0IHRpbWVyIGludGVycnVwdHMgaWdub3JlIHRoZSBnbG9iYWwKLQkgKiBpbnRlcnJ1cHQgbG9jaywgd2hpY2ggaXMgdGhlIFdyb25nVGhpbmcgKHRtKSB0byBkby4KLQkgKi8KLQlleGl0X2lkbGUoKTsKLQlpcnFfZW50ZXIoKTsKLQlsb2NhbF9hcGljX3RpbWVyX2ludGVycnVwdCgpOwotCWlycV9leGl0KCk7Ci0KLQlzZXRfaXJxX3JlZ3Mob2xkX3JlZ3MpOwotfQotCi1pbnQgc2V0dXBfcHJvZmlsaW5nX3RpbWVyKHVuc2lnbmVkIGludCBtdWx0aXBsaWVyKQotewotCXJldHVybiAtRUlOVkFMOwotfQotCi0KLS8qCi0gKiBMb2NhbCBBUElDIHN0YXJ0IGFuZCBzaHV0ZG93bgotICovCi0KLS8qKgotICogY2xlYXJfbG9jYWxfQVBJQyAtIHNodXRkb3duIHRoZSBsb2NhbCBBUElDCi0gKgotICogVGhpcyBpcyBjYWxsZWQsIHdoZW4gYSBDUFUgaXMgZGlzYWJsZWQgYW5kIGJlZm9yZSByZWJvb3RpbmcsIHNvIHRoZSBzdGF0ZSBvZgotICogdGhlIGxvY2FsIEFQSUMgaGFzIG5vIGRhbmdsaW5nIGxlZnRvdmVycy4gQWxzbyB1c2VkIHRvIGNsZWFub3V0IGFueSBCSU9TCi0gKiBsZWZ0b3ZlcnMgZHVyaW5nIGJvb3QuCi0gKi8KLXZvaWQgY2xlYXJfbG9jYWxfQVBJQyh2b2lkKQotewotCWludCBtYXhsdnQ7Ci0JdTMyIHY7Ci0KLQkvKiBBUElDIGhhc24ndCBiZWVuIG1hcHBlZCB5ZXQgKi8KLQlpZiAoIWFwaWNfcGh5cykKLQkJcmV0dXJuOwotCi0JbWF4bHZ0ID0gbGFwaWNfZ2V0X21heGx2dCgpOwotCS8qCi0JICogTWFza2luZyBhbiBMVlQgZW50cnkgY2FuIHRyaWdnZXIgYSBsb2NhbCBBUElDIGVycm9yCi0JICogaWYgdGhlIHZlY3RvciBpcyB6ZXJvLiBNYXNrIExWVEVSUiBmaXJzdCB0byBwcmV2ZW50IHRoaXMuCi0JICovCi0JaWYgKG1heGx2dCA+PSAzKSB7Ci0JCXYgPSBFUlJPUl9BUElDX1ZFQ1RPUjsgLyogYW55IG5vbi16ZXJvIHZlY3RvciB3aWxsIGRvICovCi0JCWFwaWNfd3JpdGUoQVBJQ19MVlRFUlIsIHYgfCBBUElDX0xWVF9NQVNLRUQpOwotCX0KLQkvKgotCSAqIENhcmVmdWw6IHdlIGhhdmUgdG8gc2V0IG1hc2tzIG9ubHkgZmlyc3QgdG8gZGVhc3NlcnQKLQkgKiBhbnkgbGV2ZWwtdHJpZ2dlcmVkIHNvdXJjZXMuCi0JICovCi0JdiA9IGFwaWNfcmVhZChBUElDX0xWVFQpOwotCWFwaWNfd3JpdGUoQVBJQ19MVlRULCB2IHwgQVBJQ19MVlRfTUFTS0VEKTsKLQl2ID0gYXBpY19yZWFkKEFQSUNfTFZUMCk7Ci0JYXBpY193cml0ZShBUElDX0xWVDAsIHYgfCBBUElDX0xWVF9NQVNLRUQpOwotCXYgPSBhcGljX3JlYWQoQVBJQ19MVlQxKTsKLQlhcGljX3dyaXRlKEFQSUNfTFZUMSwgdiB8IEFQSUNfTFZUX01BU0tFRCk7Ci0JaWYgKG1heGx2dCA+PSA0KSB7Ci0JCXYgPSBhcGljX3JlYWQoQVBJQ19MVlRQQyk7Ci0JCWFwaWNfd3JpdGUoQVBJQ19MVlRQQywgdiB8IEFQSUNfTFZUX01BU0tFRCk7Ci0JfQotCi0JLyogbGV0cyBub3QgdG91Y2ggdGhpcyBpZiB3ZSBkaWRuJ3QgZnJvYiBpdCAqLwotI2lmIGRlZmluZWQoQ09ORklHX1g4Nl9NQ0VfUDRUSEVSTUFMKSB8fCBkZWZpbmVkKFg4Nl9NQ0VfSU5URUwpCi0JaWYgKG1heGx2dCA+PSA1KSB7Ci0JCXYgPSBhcGljX3JlYWQoQVBJQ19MVlRUSE1SKTsKLQkJYXBpY193cml0ZShBUElDX0xWVFRITVIsIHYgfCBBUElDX0xWVF9NQVNLRUQpOwotCX0KLSNlbmRpZgotCS8qCi0JICogQ2xlYW4gQVBJQyBzdGF0ZSBmb3Igb3RoZXIgT1NzOgotCSAqLwotCWFwaWNfd3JpdGUoQVBJQ19MVlRULCBBUElDX0xWVF9NQVNLRUQpOwotCWFwaWNfd3JpdGUoQVBJQ19MVlQwLCBBUElDX0xWVF9NQVNLRUQpOwotCWFwaWNfd3JpdGUoQVBJQ19MVlQxLCBBUElDX0xWVF9NQVNLRUQpOwotCWlmIChtYXhsdnQgPj0gMykKLQkJYXBpY193cml0ZShBUElDX0xWVEVSUiwgQVBJQ19MVlRfTUFTS0VEKTsKLQlpZiAobWF4bHZ0ID49IDQpCi0JCWFwaWNfd3JpdGUoQVBJQ19MVlRQQywgQVBJQ19MVlRfTUFTS0VEKTsKLQotCS8qIEludGVncmF0ZWQgQVBJQyAoITgyNDg5RFgpID8gKi8KLQlpZiAobGFwaWNfaXNfaW50ZWdyYXRlZCgpKSB7Ci0JCWlmIChtYXhsdnQgPiAzKQotCQkJLyogQ2xlYXIgRVNSIGR1ZSB0byBQZW50aXVtIGVycmF0YSAzQVAgYW5kIDExQVAgKi8KLQkJCWFwaWNfd3JpdGUoQVBJQ19FU1IsIDApOwotCQlhcGljX3JlYWQoQVBJQ19FU1IpOwotCX0KLX0KLQotLyoqCi0gKiBkaXNhYmxlX2xvY2FsX0FQSUMgLSBjbGVhciBhbmQgZGlzYWJsZSB0aGUgbG9jYWwgQVBJQwotICovCi12b2lkIGRpc2FibGVfbG9jYWxfQVBJQyh2b2lkKQotewotCXVuc2lnbmVkIGludCB2YWx1ZTsKLQotCWNsZWFyX2xvY2FsX0FQSUMoKTsKLQotCS8qCi0JICogRGlzYWJsZSBBUElDIChpbXBsaWVzIGNsZWFyaW5nIG9mIHJlZ2lzdGVycwotCSAqIGZvciA4MjQ4OURYISkuCi0JICovCi0JdmFsdWUgPSBhcGljX3JlYWQoQVBJQ19TUElWKTsKLQl2YWx1ZSAmPSB+QVBJQ19TUElWX0FQSUNfRU5BQkxFRDsKLQlhcGljX3dyaXRlKEFQSUNfU1BJViwgdmFsdWUpOwotCi0jaWZkZWYgQ09ORklHX1g4Nl8zMgotCS8qCi0JICogV2hlbiBMQVBJQyB3YXMgZGlzYWJsZWQgYnkgdGhlIEJJT1MgYW5kIGVuYWJsZWQgYnkgdGhlIGtlcm5lbCwKLQkgKiByZXN0b3JlIHRoZSBkaXNhYmxlZCBzdGF0ZS4KLQkgKi8KLQlpZiAoZW5hYmxlZF92aWFfYXBpY2Jhc2UpIHsKLQkJdW5zaWduZWQgaW50IGwsIGg7Ci0KLQkJcmRtc3IoTVNSX0lBMzJfQVBJQ0JBU0UsIGwsIGgpOwotCQlsICY9IH5NU1JfSUEzMl9BUElDQkFTRV9FTkFCTEU7Ci0JCXdybXNyKE1TUl9JQTMyX0FQSUNCQVNFLCBsLCBoKTsKLQl9Ci0jZW5kaWYKLX0KLQotLyoKLSAqIElmIExpbnV4IGVuYWJsZWQgdGhlIExBUElDIGFnYWluc3QgdGhlIEJJT1MgZGVmYXVsdCBkaXNhYmxlIGl0IGRvd24gYmVmb3JlCi0gKiByZS1lbnRlcmluZyB0aGUgQklPUyBvbiBzaHV0ZG93bi4gIE90aGVyd2lzZSB0aGUgQklPUyBtYXkgZ2V0IGNvbmZ1c2VkIGFuZAotICogbm90IHBvd2VyLW9mZi4gIEFkZGl0aW9uYWxseSBjbGVhciBhbGwgTFZUIGVudHJpZXMgYmVmb3JlIGRpc2FibGVfbG9jYWxfQVBJQwotICogZm9yIHRoZSBjYXNlIHdoZXJlIExpbnV4IGRpZG4ndCBlbmFibGUgdGhlIExBUElDLgotICovCi12b2lkIGxhcGljX3NodXRkb3duKHZvaWQpCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCWlmICghY3B1X2hhc19hcGljKQotCQlyZXR1cm47Ci0KLQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0KLSNpZmRlZiBDT05GSUdfWDg2XzMyCi0JaWYgKCFlbmFibGVkX3ZpYV9hcGljYmFzZSkKLQkJY2xlYXJfbG9jYWxfQVBJQygpOwotCWVsc2UKLSNlbmRpZgotCQlkaXNhYmxlX2xvY2FsX0FQSUMoKTsKLQotCi0JbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwotfQotCi0vKgotICogVGhpcyBpcyB0byB2ZXJpZnkgdGhhdCB3ZSdyZSBsb29raW5nIGF0IGEgcmVhbCBsb2NhbCBBUElDLgotICogQ2hlY2sgdGhlc2UgYWdhaW5zdCB5b3VyIGJvYXJkIGlmIHRoZSBDUFVzIGFyZW4ndCBnZXR0aW5nCi0gKiBzdGFydGVkIGZvciBubyBhcHBhcmVudCByZWFzb24uCi0gKi8KLWludCBfX2luaXQgdmVyaWZ5X2xvY2FsX0FQSUModm9pZCkKLXsKLQl1bnNpZ25lZCBpbnQgcmVnMCwgcmVnMTsKLQotCS8qCi0JICogVGhlIHZlcnNpb24gcmVnaXN0ZXIgaXMgcmVhZC1vbmx5IGluIGEgcmVhbCBBUElDLgotCSAqLwotCXJlZzAgPSBhcGljX3JlYWQoQVBJQ19MVlIpOwotCWFwaWNfcHJpbnRrKEFQSUNfREVCVUcsICJHZXR0aW5nIFZFUlNJT046ICV4XG4iLCByZWcwKTsKLQlhcGljX3dyaXRlKEFQSUNfTFZSLCByZWcwIF4gQVBJQ19MVlJfTUFTSyk7Ci0JcmVnMSA9IGFwaWNfcmVhZChBUElDX0xWUik7Ci0JYXBpY19wcmludGsoQVBJQ19ERUJVRywgIkdldHRpbmcgVkVSU0lPTjogJXhcbiIsIHJlZzEpOwotCi0JLyoKLQkgKiBUaGUgdHdvIHZlcnNpb24gcmVhZHMgYWJvdmUgc2hvdWxkIHByaW50IHRoZSBzYW1lCi0JICogbnVtYmVycy4gIElmIHRoZSBzZWNvbmQgb25lIGlzIGRpZmZlcmVudCwgdGhlbiB3ZQotCSAqIHBva2UgYXQgYSBub24tQVBJQy4KLQkgKi8KLQlpZiAocmVnMSAhPSByZWcwKQotCQlyZXR1cm4gMDsKLQotCS8qCi0JICogQ2hlY2sgaWYgdGhlIHZlcnNpb24gbG9va3MgcmVhc29uYWJseS4KLQkgKi8KLQlyZWcxID0gR0VUX0FQSUNfVkVSU0lPTihyZWcwKTsKLQlpZiAocmVnMSA9PSAweDAwIHx8IHJlZzEgPT0gMHhmZikKLQkJcmV0dXJuIDA7Ci0JcmVnMSA9IGxhcGljX2dldF9tYXhsdnQoKTsKLQlpZiAocmVnMSA8IDB4MDIgfHwgcmVnMSA9PSAweGZmKQotCQlyZXR1cm4gMDsKLQotCS8qCi0JICogVGhlIElEIHJlZ2lzdGVyIGlzIHJlYWQvd3JpdGUgaW4gYSByZWFsIEFQSUMuCi0JICovCi0JcmVnMCA9IGFwaWNfcmVhZChBUElDX0lEKTsKLQlhcGljX3ByaW50ayhBUElDX0RFQlVHLCAiR2V0dGluZyBJRDogJXhcbiIsIHJlZzApOwotCWFwaWNfd3JpdGUoQVBJQ19JRCwgcmVnMCBeIEFQSUNfSURfTUFTSyk7Ci0JcmVnMSA9IGFwaWNfcmVhZChBUElDX0lEKTsKLQlhcGljX3ByaW50ayhBUElDX0RFQlVHLCAiR2V0dGluZyBJRDogJXhcbiIsIHJlZzEpOwotCWFwaWNfd3JpdGUoQVBJQ19JRCwgcmVnMCk7Ci0JaWYgKHJlZzEgIT0gKHJlZzAgXiBBUElDX0lEX01BU0spKQotCQlyZXR1cm4gMDsKLQotCS8qCi0JICogVGhlIG5leHQgdHdvIGFyZSBqdXN0IHRvIHNlZSBpZiB3ZSBoYXZlIHNhbmUgdmFsdWVzLgotCSAqIFRoZXkncmUgb25seSByZWFsbHkgcmVsZXZhbnQgaWYgd2UncmUgaW4gVmlydHVhbCBXaXJlCi0JICogY29tcGF0aWJpbGl0eSBtb2RlLCBidXQgbW9zdCBib3hlcyBhcmUgYW55bW9yZS4KLQkgKi8KLQlyZWcwID0gYXBpY19yZWFkKEFQSUNfTFZUMCk7Ci0JYXBpY19wcmludGsoQVBJQ19ERUJVRywgIkdldHRpbmcgTFZUMDogJXhcbiIsIHJlZzApOwotCXJlZzEgPSBhcGljX3JlYWQoQVBJQ19MVlQxKTsKLQlhcGljX3ByaW50ayhBUElDX0RFQlVHLCAiR2V0dGluZyBMVlQxOiAleFxuIiwgcmVnMSk7Ci0KLQlyZXR1cm4gMTsKLX0KLQotLyoqCi0gKiBzeW5jX0FyYl9JRHMgLSBzeW5jaHJvbml6ZSBBUElDIGJ1cyBhcmJpdHJhdGlvbiBJRHMKLSAqLwotdm9pZCBfX2luaXQgc3luY19BcmJfSURzKHZvaWQpCi17Ci0JLyoKLQkgKiBVbnN1cHBvcnRlZCBvbiBQNCAtIHNlZSBJbnRlbCBEZXYuIE1hbnVhbCBWb2wuIDMsIENoLiA4LjYuMSBBbmQgbm90Ci0JICogbmVlZGVkIG9uIEFNRC4KLQkgKi8KLQlpZiAobW9kZXJuX2FwaWMoKSB8fCBib290X2NwdV9kYXRhLng4Nl92ZW5kb3IgPT0gWDg2X1ZFTkRPUl9BTUQpCi0JCXJldHVybjsKLQotCS8qCi0JICogV2FpdCBmb3IgaWRsZS4KLQkgKi8KLQlhcGljX3dhaXRfaWNyX2lkbGUoKTsKLQotCWFwaWNfcHJpbnRrKEFQSUNfREVCVUcsICJTeW5jaHJvbml6aW5nIEFyYiBJRHMuXG4iKTsKLQlhcGljX3dyaXRlKEFQSUNfSUNSLCBBUElDX0RFU1RfQUxMSU5DIHwKLQkJCUFQSUNfSU5UX0xFVkVMVFJJRyB8IEFQSUNfRE1fSU5JVCk7Ci19Ci0KLS8qCi0gKiBBbiBpbml0aWFsIHNldHVwIG9mIHRoZSB2aXJ0dWFsIHdpcmUgbW9kZS4KLSAqLwotdm9pZCBfX2luaXQgaW5pdF9ic3BfQVBJQyh2b2lkKQotewotCXVuc2lnbmVkIGludCB2YWx1ZTsKLQotCS8qCi0JICogRG9uJ3QgZG8gdGhlIHNldHVwIG5vdyBpZiB3ZSBoYXZlIGEgU01QIEJJT1MgYXMgdGhlCi0JICogdGhyb3VnaC1JL08tQVBJQyB2aXJ0dWFsIHdpcmUgbW9kZSBtaWdodCBiZSBhY3RpdmUuCi0JICovCi0JaWYgKHNtcF9mb3VuZF9jb25maWcgfHwgIWNwdV9oYXNfYXBpYykKLQkJcmV0dXJuOwotCi0JLyoKLQkgKiBEbyBub3QgdHJ1c3QgdGhlIGxvY2FsIEFQSUMgYmVpbmcgZW1wdHkgYXQgYm9vdHVwLgotCSAqLwotCWNsZWFyX2xvY2FsX0FQSUMoKTsKLQotCS8qCi0JICogRW5hYmxlIEFQSUMuCi0JICovCi0JdmFsdWUgPSBhcGljX3JlYWQoQVBJQ19TUElWKTsKLQl2YWx1ZSAmPSB+QVBJQ19WRUNUT1JfTUFTSzsKLQl2YWx1ZSB8PSBBUElDX1NQSVZfQVBJQ19FTkFCTEVEOwotCi0jaWZkZWYgQ09ORklHX1g4Nl8zMgotCS8qIFRoaXMgYml0IGlzIHJlc2VydmVkIG9uIFA0L1hlb24gYW5kIHNob3VsZCBiZSBjbGVhcmVkICovCi0JaWYgKChib290X2NwdV9kYXRhLng4Nl92ZW5kb3IgPT0gWDg2X1ZFTkRPUl9JTlRFTCkgJiYKLQkgICAgKGJvb3RfY3B1X2RhdGEueDg2ID09IDE1KSkKLQkJdmFsdWUgJj0gfkFQSUNfU1BJVl9GT0NVU19ESVNBQkxFRDsKLQllbHNlCi0jZW5kaWYKLQkJdmFsdWUgfD0gQVBJQ19TUElWX0ZPQ1VTX0RJU0FCTEVEOwotCXZhbHVlIHw9IFNQVVJJT1VTX0FQSUNfVkVDVE9SOwotCWFwaWNfd3JpdGUoQVBJQ19TUElWLCB2YWx1ZSk7Ci0KLQkvKgotCSAqIFNldCB1cCB0aGUgdmlydHVhbCB3aXJlIG1vZGUuCi0JICovCi0JYXBpY193cml0ZShBUElDX0xWVDAsIEFQSUNfRE1fRVhUSU5UKTsKLQl2YWx1ZSA9IEFQSUNfRE1fTk1JOwotCWlmICghbGFwaWNfaXNfaW50ZWdyYXRlZCgpKQkJLyogODI0ODlEWCAqLwotCQl2YWx1ZSB8PSBBUElDX0xWVF9MRVZFTF9UUklHR0VSOwotCWFwaWNfd3JpdGUoQVBJQ19MVlQxLCB2YWx1ZSk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fY3B1aW5pdCBsYXBpY19zZXR1cF9lc3Iodm9pZCkKLXsKLQl1bnNpZ25lZCBsb25nIG9sZHZhbHVlLCB2YWx1ZSwgbWF4bHZ0OwotCWlmIChsYXBpY19pc19pbnRlZ3JhdGVkKCkgJiYgIWVzcl9kaXNhYmxlKSB7Ci0JCWlmIChlc3JfZGlzYWJsZSkgewotCQkJLyoKLQkJCSAqIFNvbWV0aGluZyB1bnRyYWNlYWJsZSBpcyBjcmVhdGluZyBiYWQgaW50ZXJydXB0cyBvbgotCQkJICogc2Vjb25kYXJ5IHF1YWRzIC4uLiBmb3IgdGhlIG1vbWVudCwganVzdCBsZWF2ZSB0aGUKLQkJCSAqIEVTUiBkaXNhYmxlZCAtIHdlIGNhbid0IGRvIGFueXRoaW5nIHVzZWZ1bCB3aXRoIHRoZQotCQkJICogZXJyb3JzIGFueXdheSAtIG1ibGlnaAotCQkJICovCi0JCQlwcmludGsoS0VSTl9JTkZPICJMZWF2aW5nIEVTUiBkaXNhYmxlZC5cbiIpOwotCQkJcmV0dXJuOwotCQl9Ci0JCS8qICE4MjQ4OURYICovCi0JCW1heGx2dCA9IGxhcGljX2dldF9tYXhsdnQoKTsKLQkJaWYgKG1heGx2dCA+IDMpCQkvKiBEdWUgdG8gdGhlIFBlbnRpdW0gZXJyYXR1bSAzQVAuICovCi0JCQlhcGljX3dyaXRlKEFQSUNfRVNSLCAwKTsKLQkJb2xkdmFsdWUgPSBhcGljX3JlYWQoQVBJQ19FU1IpOwotCi0JCS8qIGVuYWJsZXMgc2VuZGluZyBlcnJvcnMgKi8KLQkJdmFsdWUgPSBFUlJPUl9BUElDX1ZFQ1RPUjsKLQkJYXBpY193cml0ZShBUElDX0xWVEVSUiwgdmFsdWUpOwotCQkvKgotCQkgKiBzcGVjIHNheXMgY2xlYXIgZXJyb3JzIGFmdGVyIGVuYWJsaW5nIHZlY3Rvci4KLQkJICovCi0JCWlmIChtYXhsdnQgPiAzKQotCQkJYXBpY193cml0ZShBUElDX0VTUiwgMCk7Ci0JCXZhbHVlID0gYXBpY19yZWFkKEFQSUNfRVNSKTsKLQkJaWYgKHZhbHVlICE9IG9sZHZhbHVlKQotCQkJYXBpY19wcmludGsoQVBJQ19WRVJCT1NFLCAiRVNSIHZhbHVlIGJlZm9yZSBlbmFibGluZyAiCi0JCQkJInZlY3RvcjogMHglMDhseCAgYWZ0ZXI6IDB4JTA4bHhcbiIsCi0JCQkJb2xkdmFsdWUsIHZhbHVlKTsKLQl9IGVsc2UgewotCQlwcmludGsoS0VSTl9JTkZPICJObyBFU1IgZm9yIDgyNDg5RFguXG4iKTsKLQl9Ci19Ci0KLQotLyoqCi0gKiBzZXR1cF9sb2NhbF9BUElDIC0gc2V0dXAgdGhlIGxvY2FsIEFQSUMKLSAqLwotdm9pZCBfX2NwdWluaXQgc2V0dXBfbG9jYWxfQVBJQyh2b2lkKQotewotCXVuc2lnbmVkIGludCB2YWx1ZTsKLQlpbnQgaSwgajsKLQotCXByZWVtcHRfZGlzYWJsZSgpOwotCXZhbHVlID0gYXBpY19yZWFkKEFQSUNfTFZSKTsKLQotCUJVSUxEX0JVR19PTigoU1BVUklPVVNfQVBJQ19WRUNUT1IgJiAweDBmKSAhPSAweDBmKTsKLQotCS8qCi0JICogRG91YmxlLWNoZWNrIHdoZXRoZXIgdGhpcyBBUElDIGlzIHJlYWxseSByZWdpc3RlcmVkLgotCSAqIFRoaXMgaXMgbWVhbmluZ2xlc3MgaW4gY2x1c3RlcmVkIGFwaWMgbW9kZSwgc28gd2Ugc2tpcCBpdC4KLQkgKi8KLQlpZiAoIWFwaWNfaWRfcmVnaXN0ZXJlZCgpKQotCQlCVUcoKTsKLQotCS8qCi0JICogSW50ZWwgcmVjb21tZW5kcyB0byBzZXQgREZSLCBMRFIgYW5kIFRQUiBiZWZvcmUgZW5hYmxpbmcKLQkgKiBhbiBBUElDLiAgU2VlIGUuZy4gIkFQLTM4OCA4MjQ4OURYIFVzZXIncyBNYW51YWwiIChJbnRlbAotCSAqIGRvY3VtZW50IG51bWJlciAyOTIxMTYpLiAgU28gaGVyZSBpdCBnb2VzLi4uCi0JICovCi0JaW5pdF9hcGljX2xkcigpOwotCi0JLyoKLQkgKiBTZXQgVGFzayBQcmlvcml0eSB0byAnYWNjZXB0IGFsbCcuIFdlIG5ldmVyIGNoYW5nZSB0aGlzCi0JICogbGF0ZXIgb24uCi0JICovCi0JdmFsdWUgPSBhcGljX3JlYWQoQVBJQ19UQVNLUFJJKTsKLQl2YWx1ZSAmPSB+QVBJQ19UUFJJX01BU0s7Ci0JYXBpY193cml0ZShBUElDX1RBU0tQUkksIHZhbHVlKTsKLQotCS8qCi0JICogQWZ0ZXIgYSBjcmFzaCwgd2Ugbm8gbG9uZ2VyIHNlcnZpY2UgdGhlIGludGVycnVwdHMgYW5kIGEgcGVuZGluZwotCSAqIGludGVycnVwdCBmcm9tIHByZXZpb3VzIGtlcm5lbCBtaWdodCBzdGlsbCBoYXZlIElTUiBiaXQgc2V0LgotCSAqCi0JICogTW9zdCBwcm9iYWJseSBieSBub3cgQ1BVIGhhcyBzZXJ2aWNlZCB0aGF0IHBlbmRpbmcgaW50ZXJydXB0IGFuZAotCSAqIGl0IG1pZ2h0IG5vdCBoYXZlIGRvbmUgdGhlIGFja19BUElDX2lycSgpIGJlY2F1c2UgaXQgdGhvdWdodCwKLQkgKiBpbnRlcnJ1cHQgY2FtZSBmcm9tIGk4MjU5IGFzIEV4dEludC4gTEFQSUMgZGlkIG5vdCBnZXQgRU9JIHNvIGl0Ci0JICogZG9lcyBub3QgY2xlYXIgdGhlIElTUiBiaXQgYW5kIGNwdSB0aGlua3MgaXQgaGFzIGFscmVhZHkgc2VyaXZjZWQKLQkgKiB0aGUgaW50ZXJydXB0LiBIZW5jZSBhIHZlY3RvciBtaWdodCBnZXQgbG9ja2VkLiBJdCB3YXMgbm90aWNlZAotCSAqIGZvciB0aW1lciBpcnEgKHZlY3RvciAweDMxKS4gSXNzdWUgYW4gZXh0cmEgRU9JIHRvIGNsZWFyIElTUi4KLQkgKi8KLQlmb3IgKGkgPSBBUElDX0lTUl9OUiAtIDE7IGkgPj0gMDsgaS0tKSB7Ci0JCXZhbHVlID0gYXBpY19yZWFkKEFQSUNfSVNSICsgaSoweDEwKTsKLQkJZm9yIChqID0gMzE7IGogPj0gMDsgai0tKSB7Ci0JCQlpZiAodmFsdWUgJiAoMTw8aikpCi0JCQkJYWNrX0FQSUNfaXJxKCk7Ci0JCX0KLQl9Ci0KLQkvKgotCSAqIE5vdyB0aGF0IHdlIGFyZSBhbGwgc2V0IHVwLCBlbmFibGUgdGhlIEFQSUMKLQkgKi8KLQl2YWx1ZSA9IGFwaWNfcmVhZChBUElDX1NQSVYpOwotCXZhbHVlICY9IH5BUElDX1ZFQ1RPUl9NQVNLOwotCS8qCi0JICogRW5hYmxlIEFQSUMKLQkgKi8KLQl2YWx1ZSB8PSBBUElDX1NQSVZfQVBJQ19FTkFCTEVEOwotCi0JLyogV2UgYWx3YXlzIHVzZSBwcm9jZXNzb3IgZm9jdXMgKi8KLQotCS8qCi0JICogU2V0IHNwdXJpb3VzIElSUSB2ZWN0b3IKLQkgKi8KLQl2YWx1ZSB8PSBTUFVSSU9VU19BUElDX1ZFQ1RPUjsKLQlhcGljX3dyaXRlKEFQSUNfU1BJViwgdmFsdWUpOwotCi0JLyoKLQkgKiBTZXQgdXAgTFZUMCwgTFZUMToKLQkgKgotCSAqIHNldCB1cCB0aHJvdWdoLWxvY2FsLUFQSUMgb24gdGhlIEJQJ3MgTElOVDAuIFRoaXMgaXMgbm90Ci0JICogc3RyaWN0bHkgbmVjZXNzYXJ5IGluIHB1cmUgc3ltbWV0cmljLUlPIG1vZGUsIGJ1dCBzb21ldGltZXMKLQkgKiB3ZSBkZWxlZ2F0ZSBpbnRlcnJ1cHRzIHRvIHRoZSA4MjU5QS4KLQkgKi8KLQkvKgotCSAqIFRPRE86IHNldCB1cCB0aHJvdWdoLWxvY2FsLUFQSUMgZnJvbSB0aHJvdWdoLUkvTy1BUElDPyAtLW1hY3JvCi0JICovCi0JdmFsdWUgPSBhcGljX3JlYWQoQVBJQ19MVlQwKSAmIEFQSUNfTFZUX01BU0tFRDsKLQlpZiAoIXNtcF9wcm9jZXNzb3JfaWQoKSAmJiAhdmFsdWUpIHsKLQkJdmFsdWUgPSBBUElDX0RNX0VYVElOVDsKLQkJYXBpY19wcmludGsoQVBJQ19WRVJCT1NFLCAiZW5hYmxlZCBFeHRJTlQgb24gQ1BVIyVkXG4iLAotCQkJICAgIHNtcF9wcm9jZXNzb3JfaWQoKSk7Ci0JfSBlbHNlIHsKLQkJdmFsdWUgPSBBUElDX0RNX0VYVElOVCB8IEFQSUNfTFZUX01BU0tFRDsKLQkJYXBpY19wcmludGsoQVBJQ19WRVJCT1NFLCAibWFza2VkIEV4dElOVCBvbiBDUFUjJWRcbiIsCi0JCQkgICAgc21wX3Byb2Nlc3Nvcl9pZCgpKTsKLQl9Ci0JYXBpY193cml0ZShBUElDX0xWVDAsIHZhbHVlKTsKLQotCS8qCi0JICogb25seSB0aGUgQlAgc2hvdWxkIHNlZSB0aGUgTElOVDEgTk1JIHNpZ25hbCwgb2J2aW91c2x5LgotCSAqLwotCWlmICghc21wX3Byb2Nlc3Nvcl9pZCgpKQotCQl2YWx1ZSA9IEFQSUNfRE1fTk1JOwotCWVsc2UKLQkJdmFsdWUgPSBBUElDX0RNX05NSSB8IEFQSUNfTFZUX01BU0tFRDsKLQlhcGljX3dyaXRlKEFQSUNfTFZUMSwgdmFsdWUpOwotCXByZWVtcHRfZW5hYmxlKCk7Ci19Ci0KLXZvaWQgX19jcHVpbml0IGVuZF9sb2NhbF9BUElDX3NldHVwKHZvaWQpCi17Ci0JbGFwaWNfc2V0dXBfZXNyKCk7Ci0KLSNpZmRlZiBDT05GSUdfWDg2XzMyCi0JewotCQl1bnNpZ25lZCBpbnQgdmFsdWU7Ci0JCS8qIERpc2FibGUgdGhlIGxvY2FsIGFwaWMgdGltZXIgKi8KLQkJdmFsdWUgPSBhcGljX3JlYWQoQVBJQ19MVlRUKTsKLQkJdmFsdWUgfD0gKEFQSUNfTFZUX01BU0tFRCB8IExPQ0FMX1RJTUVSX1ZFQ1RPUik7Ci0JCWFwaWNfd3JpdGUoQVBJQ19MVlRULCB2YWx1ZSk7Ci0JfQotI2VuZGlmCi0KLQlzZXR1cF9hcGljX25taV93YXRjaGRvZyhOVUxMKTsKLQlhcGljX3BtX2FjdGl2YXRlKCk7Ci19Ci0KLXZvaWQgY2hlY2tfeDJhcGljKHZvaWQpCi17Ci0JaW50IG1zciwgbXNyMjsKLQotCXJkbXNyKE1TUl9JQTMyX0FQSUNCQVNFLCBtc3IsIG1zcjIpOwotCi0JaWYgKG1zciAmIFgyQVBJQ19FTkFCTEUpIHsKLQkJcHJpbnRrKCJ4MmFwaWMgZW5hYmxlZCBieSBCSU9TLCBzd2l0Y2hpbmcgdG8geDJhcGljIG9wc1xuIik7Ci0JCXgyYXBpY19wcmVlbmFibGVkID0geDJhcGljID0gMTsKLQkJYXBpY19vcHMgPSAmeDJhcGljX29wczsKLQl9Ci19Ci0KLXZvaWQgZW5hYmxlX3gyYXBpYyh2b2lkKQotewotCWludCBtc3IsIG1zcjI7Ci0KLQlyZG1zcihNU1JfSUEzMl9BUElDQkFTRSwgbXNyLCBtc3IyKTsKLQlpZiAoIShtc3IgJiBYMkFQSUNfRU5BQkxFKSkgewotCQlwcmludGsoIkVuYWJsaW5nIHgyYXBpY1xuIik7Ci0JCXdybXNyKE1TUl9JQTMyX0FQSUNCQVNFLCBtc3IgfCBYMkFQSUNfRU5BQkxFLCAwKTsKLQl9Ci19Ci0KLXZvaWQgZW5hYmxlX0lSX3gyYXBpYyh2b2lkKQotewotI2lmZGVmIENPTkZJR19JTlRSX1JFTUFQCi0JaW50IHJldDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JaWYgKCFjcHVfaGFzX3gyYXBpYykKLQkJcmV0dXJuOwotCi0JaWYgKCF4MmFwaWNfcHJlZW5hYmxlZCAmJiBkaXNhYmxlX3gyYXBpYykgewotCQlwcmludGsoS0VSTl9JTkZPCi0JCSAgICAgICAiU2tpcHBlZCBlbmFibGluZyB4MmFwaWMgYW5kIEludGVycnVwdC1yZW1hcHBpbmcgIgotCQkgICAgICAgImJlY2F1c2Ugb2Ygbm94MmFwaWNcbiIpOwotCQlyZXR1cm47Ci0JfQotCi0JaWYgKHgyYXBpY19wcmVlbmFibGVkICYmIGRpc2FibGVfeDJhcGljKQotCQlwYW5pYygiQmlvcyBhbHJlYWR5IGVuYWJsZWQgeDJhcGljLCBjYW4ndCBlbmZvcmNlIG5veDJhcGljIik7Ci0KLQlpZiAoIXgyYXBpY19wcmVlbmFibGVkICYmIHNraXBfaW9hcGljX3NldHVwKSB7Ci0JCXByaW50ayhLRVJOX0lORk8KLQkJICAgICAgICJTa2lwcGVkIGVuYWJsaW5nIHgyYXBpYyBhbmQgSW50ZXJydXB0LXJlbWFwcGluZyAiCi0JCSAgICAgICAiYmVjYXVzZSBvZiBza2lwcGluZyBpby1hcGljIHNldHVwXG4iKTsKLQkJcmV0dXJuOwotCX0KLQotCXJldCA9IGRtYXJfdGFibGVfaW5pdCgpOwotCWlmIChyZXQpIHsKLQkJcHJpbnRrKEtFUk5fSU5GTwotCQkgICAgICAgImRtYXJfdGFibGVfaW5pdCgpIGZhaWxlZCB3aXRoICVkOlxuIiwgcmV0KTsKLQotCQlpZiAoeDJhcGljX3ByZWVuYWJsZWQpCi0JCQlwYW5pYygieDJhcGljIGVuYWJsZWQgYnkgYmlvcy4gQnV0IElSIGVuYWJsaW5nIGZhaWxlZCIpOwotCQllbHNlCi0JCQlwcmludGsoS0VSTl9JTkZPCi0JCQkgICAgICAgIk5vdCBlbmFibGluZyB4MmFwaWMsSW50ci1yZW1hcHBpbmdcbiIpOwotCQlyZXR1cm47Ci0JfQotCi0JbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCW1hc2tfODI1OUEoKTsKLQlzYXZlX21hc2tfSU9fQVBJQ19zZXR1cCgpOwotCi0JcmV0ID0gZW5hYmxlX2ludHJfcmVtYXBwaW5nKDEpOwotCi0JaWYgKHJldCAmJiB4MmFwaWNfcHJlZW5hYmxlZCkgewotCQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Ci0JCXBhbmljKCJ4MmFwaWMgZW5hYmxlZCBieSBiaW9zLiBCdXQgSVIgZW5hYmxpbmcgZmFpbGVkIik7Ci0JfQotCi0JaWYgKHJldCkKLQkJZ290byBlbmQ7Ci0KLQlpZiAoIXgyYXBpYykgewotCQl4MmFwaWMgPSAxOwotCQlhcGljX29wcyA9ICZ4MmFwaWNfb3BzOwotCQllbmFibGVfeDJhcGljKCk7Ci0JfQotZW5kOgotCWlmIChyZXQpCi0JCS8qCi0JCSAqIElSIGVuYWJsaW5nIGZhaWxlZAotCQkgKi8KLQkJcmVzdG9yZV9JT19BUElDX3NldHVwKCk7Ci0JZWxzZQotCQlyZWluaXRfaW50cl9yZW1hcHBlZF9JT19BUElDKHgyYXBpY19wcmVlbmFibGVkKTsKLQotCXVubWFza184MjU5QSgpOwotCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLQotCWlmICghcmV0KSB7Ci0JCWlmICgheDJhcGljX3ByZWVuYWJsZWQpCi0JCQlwcmludGsoS0VSTl9JTkZPCi0JCQkgICAgICAgIkVuYWJsZWQgeDJhcGljIGFuZCBpbnRlcnJ1cHQtcmVtYXBwaW5nXG4iKTsKLQkJZWxzZQotCQkJcHJpbnRrKEtFUk5fSU5GTwotCQkJICAgICAgICJFbmFibGVkIEludGVycnVwdC1yZW1hcHBpbmdcbiIpOwotCX0gZWxzZQotCQlwcmludGsoS0VSTl9FUlIKLQkJICAgICAgICJGYWlsZWQgdG8gZW5hYmxlIEludGVycnVwdC1yZW1hcHBpbmcgYW5kIHgyYXBpY1xuIik7Ci0jZWxzZQotCWlmICghY3B1X2hhc194MmFwaWMpCi0JCXJldHVybjsKLQotCWlmICh4MmFwaWNfcHJlZW5hYmxlZCkKLQkJcGFuaWMoIngyYXBpYyBlbmFibGVkIHByaW9yIE9TIGhhbmRvdmVyLCIKLQkJICAgICAgIiBlbmFibGUgQ09ORklHX0lOVFJfUkVNQVAiKTsKLQotCXByaW50ayhLRVJOX0lORk8gIkVuYWJsZSBDT05GSUdfSU5UUl9SRU1BUCBmb3IgZW5hYmxpbmcgaW50ci1yZW1hcHBpbmcgIgotCSAgICAgICAiIGFuZCB4MmFwaWNcbiIpOwotI2VuZGlmCi0KLQlyZXR1cm47Ci19Ci0KLS8qCi0gKiBEZXRlY3QgYW5kIGVuYWJsZSBsb2NhbCBBUElDcyBvbiBub24tU01QIGJvYXJkcy4KLSAqIE9yaWdpbmFsIGNvZGUgd3JpdHRlbiBieSBLZWlyIEZyYXNlci4KLSAqIE9uIEFNRDY0IHdlIHRydXN0IHRoZSBCSU9TIC0gaWYgaXQgc2F5cyBubyBBUElDIGl0IGlzIGxpa2VseQotICogbm90IGNvcnJlY3RseSBzZXQgdXAgKHVzdWFsbHkgdGhlIEFQSUMgdGltZXIgd29uJ3Qgd29yayBldGMuKQotICovCi1zdGF0aWMgaW50IF9faW5pdCBkZXRlY3RfaW5pdF9BUElDKHZvaWQpCi17Ci0JaWYgKCFjcHVfaGFzX2FwaWMpIHsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiTm8gbG9jYWwgQVBJQyBwcmVzZW50XG4iKTsKLQkJcmV0dXJuIC0xOwotCX0KLQotCW1wX2xhcGljX2FkZHIgPSBBUElDX0RFRkFVTFRfUEhZU19CQVNFOwotCWJvb3RfY3B1X3BoeXNpY2FsX2FwaWNpZCA9IDA7Ci0JcmV0dXJuIDA7Ci19Ci0KLXZvaWQgX19pbml0IGVhcmx5X2luaXRfbGFwaWNfbWFwcGluZyh2b2lkKQotewotCXVuc2lnbmVkIGxvbmcgcGh5c19hZGRyOwotCi0JLyoKLQkgKiBJZiBubyBsb2NhbCBBUElDIGNhbiBiZSBmb3VuZCB0aGVuIGdvIG91dAotCSAqIDogaXQgbWVhbnMgdGhlcmUgaXMgbm8gbXBhdGFibGUgYW5kIE1BRFQKLQkgKi8KLQlpZiAoIXNtcF9mb3VuZF9jb25maWcpCi0JCXJldHVybjsKLQotCXBoeXNfYWRkciA9IG1wX2xhcGljX2FkZHI7Ci0KLQlzZXRfZml4bWFwX25vY2FjaGUoRklYX0FQSUNfQkFTRSwgcGh5c19hZGRyKTsKLQlhcGljX3ByaW50ayhBUElDX1ZFUkJPU0UsICJtYXBwZWQgQVBJQyB0byAlMTZseCAoJTE2bHgpXG4iLAotCQkgICAgQVBJQ19CQVNFLCBwaHlzX2FkZHIpOwotCi0JLyoKLQkgKiBGZXRjaCB0aGUgQVBJQyBJRCBvZiB0aGUgQlNQIGluIGNhc2Ugd2UgaGF2ZSBhCi0JICogZGVmYXVsdCBjb25maWd1cmF0aW9uIChvciB0aGUgTVAgdGFibGUgaXMgYnJva2VuKS4KLQkgKi8KLQlib290X2NwdV9waHlzaWNhbF9hcGljaWQgPSByZWFkX2FwaWNfaWQoKTsKLX0KLQotLyoqCi0gKiBpbml0X2FwaWNfbWFwcGluZ3MgLSBpbml0aWFsaXplIEFQSUMgbWFwcGluZ3MKLSAqLwotdm9pZCBfX2luaXQgaW5pdF9hcGljX21hcHBpbmdzKHZvaWQpCi17Ci0JaWYgKHgyYXBpYykgewotCQlib290X2NwdV9waHlzaWNhbF9hcGljaWQgPSByZWFkX2FwaWNfaWQoKTsKLQkJcmV0dXJuOwotCX0KLQotCS8qCi0JICogSWYgbm8gbG9jYWwgQVBJQyBjYW4gYmUgZm91bmQgdGhlbiBzZXQgdXAgYSBmYWtlIGFsbAotCSAqIHplcm9lcyBwYWdlIHRvIHNpbXVsYXRlIHRoZSBsb2NhbCBBUElDIGFuZCBhbm90aGVyCi0JICogb25lIGZvciB0aGUgSU8tQVBJQy4KLQkgKi8KLQlpZiAoIXNtcF9mb3VuZF9jb25maWcgJiYgZGV0ZWN0X2luaXRfQVBJQygpKSB7Ci0JCWFwaWNfcGh5cyA9ICh1bnNpZ25lZCBsb25nKSBhbGxvY19ib290bWVtX3BhZ2VzKFBBR0VfU0laRSk7Ci0JCWFwaWNfcGh5cyA9IF9fcGEoYXBpY19waHlzKTsKLQl9IGVsc2UKLQkJYXBpY19waHlzID0gbXBfbGFwaWNfYWRkcjsKLQotCXNldF9maXhtYXBfbm9jYWNoZShGSVhfQVBJQ19CQVNFLCBhcGljX3BoeXMpOwotCWFwaWNfcHJpbnRrKEFQSUNfVkVSQk9TRSwgIm1hcHBlZCBBUElDIHRvICUxNmx4ICglMTZseClcbiIsCi0JCQkJQVBJQ19CQVNFLCBhcGljX3BoeXMpOwotCi0JLyoKLQkgKiBGZXRjaCB0aGUgQVBJQyBJRCBvZiB0aGUgQlNQIGluIGNhc2Ugd2UgaGF2ZSBhCi0JICogZGVmYXVsdCBjb25maWd1cmF0aW9uIChvciB0aGUgTVAgdGFibGUgaXMgYnJva2VuKS4KLQkgKi8KLQlib290X2NwdV9waHlzaWNhbF9hcGljaWQgPSByZWFkX2FwaWNfaWQoKTsKLX0KLQotLyoKLSAqIFRoaXMgaW5pdGlhbGl6ZXMgdGhlIElPLUFQSUMgYW5kIEFQSUMgaGFyZHdhcmUgaWYgdGhpcyBpcwotICogYSBVUCBrZXJuZWwuCi0gKi8KLWludCBhcGljX3ZlcnNpb25bTUFYX0FQSUNTXTsKLQotaW50IF9faW5pdCBBUElDX2luaXRfdW5pcHJvY2Vzc29yKHZvaWQpCi17Ci0JaWYgKGRpc2FibGVfYXBpYykgewotCQlwcmludGsoS0VSTl9JTkZPICJBcGljIGRpc2FibGVkXG4iKTsKLQkJcmV0dXJuIC0xOwotCX0KLQlpZiAoIWNwdV9oYXNfYXBpYykgewotCQlkaXNhYmxlX2FwaWMgPSAxOwotCQlwcmludGsoS0VSTl9JTkZPICJBcGljIGRpc2FibGVkIGJ5IEJJT1NcbiIpOwotCQlyZXR1cm4gLTE7Ci0JfQotCi0JZW5hYmxlX0lSX3gyYXBpYygpOwotCXNldHVwX2FwaWNfcm91dGluZygpOwotCi0JdmVyaWZ5X2xvY2FsX0FQSUMoKTsKLQotCWNvbm5lY3RfYnNwX0FQSUMoKTsKLQotCXBoeXNpZF9zZXRfbWFza19vZl9waHlzaWQoYm9vdF9jcHVfcGh5c2ljYWxfYXBpY2lkLCAmcGh5c19jcHVfcHJlc2VudF9tYXApOwotCWFwaWNfd3JpdGUoQVBJQ19JRCwgU0VUX0FQSUNfSUQoYm9vdF9jcHVfcGh5c2ljYWxfYXBpY2lkKSk7Ci0KLQlzZXR1cF9sb2NhbF9BUElDKCk7Ci0KLQkvKgotCSAqIE5vdyBlbmFibGUgSU8tQVBJQ3MsIGFjdHVhbGx5IGNhbGwgY2xlYXJfSU9fQVBJQwotCSAqIFdlIG5lZWQgY2xlYXJfSU9fQVBJQyBiZWZvcmUgZW5hYmxpbmcgdmVjdG9yIG9uIEJQCi0JICovCi0JaWYgKCFza2lwX2lvYXBpY19zZXR1cCAmJiBucl9pb2FwaWNzKQotCQllbmFibGVfSU9fQVBJQygpOwotCi0JaWYgKCFzbXBfZm91bmRfY29uZmlnIHx8IHNraXBfaW9hcGljX3NldHVwIHx8ICFucl9pb2FwaWNzKQotCQlsb2NhbGlzZV9ubWlfd2F0Y2hkb2coKTsKLQllbmRfbG9jYWxfQVBJQ19zZXR1cCgpOwotCi0JaWYgKHNtcF9mb3VuZF9jb25maWcgJiYgIXNraXBfaW9hcGljX3NldHVwICYmIG5yX2lvYXBpY3MpCi0JCXNldHVwX0lPX0FQSUMoKTsKLQllbHNlCi0JCW5yX2lvYXBpY3MgPSAwOwotCXNldHVwX2Jvb3RfQVBJQ19jbG9jaygpOwotCWNoZWNrX25taV93YXRjaGRvZygpOwotCXJldHVybiAwOwotfQotCi0vKgotICogTG9jYWwgQVBJQyBpbnRlcnJ1cHRzCi0gKi8KLQotLyoKLSAqIFRoaXMgaW50ZXJydXB0IHNob3VsZCBfbmV2ZXJfIGhhcHBlbiB3aXRoIG91ciBBUElDL1NNUCBhcmNoaXRlY3R1cmUKLSAqLwotYXNtbGlua2FnZSB2b2lkIHNtcF9zcHVyaW91c19pbnRlcnJ1cHQodm9pZCkKLXsKLQl1bnNpZ25lZCBpbnQgdjsKLQlleGl0X2lkbGUoKTsKLQlpcnFfZW50ZXIoKTsKLQkvKgotCSAqIENoZWNrIGlmIHRoaXMgcmVhbGx5IGlzIGEgc3B1cmlvdXMgaW50ZXJydXB0IGFuZCBBQ0sgaXQKLQkgKiBpZiBpdCBpcyBhIHZlY3RvcmVkIG9uZS4gIEp1c3QgaW4gY2FzZS4uLgotCSAqIFNwdXJpb3VzIGludGVycnVwdHMgc2hvdWxkIG5vdCBiZSBBQ0tlZC4KLQkgKi8KLQl2ID0gYXBpY19yZWFkKEFQSUNfSVNSICsgKChTUFVSSU9VU19BUElDX1ZFQ1RPUiAmIH4weDFmKSA+PiAxKSk7Ci0JaWYgKHYgJiAoMSA8PCAoU1BVUklPVVNfQVBJQ19WRUNUT1IgJiAweDFmKSkpCi0JCWFja19BUElDX2lycSgpOwotCi0JYWRkX3BkYShpcnFfc3B1cmlvdXNfY291bnQsIDEpOwotCWlycV9leGl0KCk7Ci19Ci0KLS8qCi0gKiBUaGlzIGludGVycnVwdCBzaG91bGQgbmV2ZXIgaGFwcGVuIHdpdGggb3VyIEFQSUMvU01QIGFyY2hpdGVjdHVyZQotICovCi1hc21saW5rYWdlIHZvaWQgc21wX2Vycm9yX2ludGVycnVwdCh2b2lkKQotewotCXVuc2lnbmVkIGludCB2LCB2MTsKLQotCWV4aXRfaWRsZSgpOwotCWlycV9lbnRlcigpOwotCS8qIEZpcnN0IHRpY2tsZSB0aGUgaGFyZHdhcmUsIG9ubHkgdGhlbiByZXBvcnQgd2hhdCB3ZW50IG9uLiAtLSBSRVcgKi8KLQl2ID0gYXBpY19yZWFkKEFQSUNfRVNSKTsKLQlhcGljX3dyaXRlKEFQSUNfRVNSLCAwKTsKLQl2MSA9IGFwaWNfcmVhZChBUElDX0VTUik7Ci0JYWNrX0FQSUNfaXJxKCk7Ci0JYXRvbWljX2luYygmaXJxX2Vycl9jb3VudCk7Ci0KLQkvKiBIZXJlIGlzIHdoYXQgdGhlIEFQSUMgZXJyb3IgYml0cyBtZWFuOgotCSAgIDA6IFNlbmQgQ1MgZXJyb3IKLQkgICAxOiBSZWNlaXZlIENTIGVycm9yCi0JICAgMjogU2VuZCBhY2NlcHQgZXJyb3IKLQkgICAzOiBSZWNlaXZlIGFjY2VwdCBlcnJvcgotCSAgIDQ6IFJlc2VydmVkCi0JICAgNTogU2VuZCBpbGxlZ2FsIHZlY3RvcgotCSAgIDY6IFJlY2VpdmVkIGlsbGVnYWwgdmVjdG9yCi0JICAgNzogSWxsZWdhbCByZWdpc3RlciBhZGRyZXNzCi0JKi8KLQlwcmludGsoS0VSTl9ERUJVRyAiQVBJQyBlcnJvciBvbiBDUFUlZDogJTAyeCglMDJ4KVxuIiwKLQkJc21wX3Byb2Nlc3Nvcl9pZCgpLCB2ICwgdjEpOwotCWlycV9leGl0KCk7Ci19Ci0KLS8qKgotICogY29ubmVjdF9ic3BfQVBJQyAtIGF0dGFjaCB0aGUgQVBJQyB0byB0aGUgaW50ZXJydXB0IHN5c3RlbQotICovCi12b2lkIF9faW5pdCBjb25uZWN0X2JzcF9BUElDKHZvaWQpCi17Ci0jaWZkZWYgQ09ORklHX1g4Nl8zMgotCWlmIChwaWNfbW9kZSkgewotCQkvKgotCQkgKiBEbyBub3QgdHJ1c3QgdGhlIGxvY2FsIEFQSUMgYmVpbmcgZW1wdHkgYXQgYm9vdHVwLgotCQkgKi8KLQkJY2xlYXJfbG9jYWxfQVBJQygpOwotCQkvKgotCQkgKiBQSUMgbW9kZSwgZW5hYmxlIEFQSUMgbW9kZSBpbiB0aGUgSU1DUiwgaS5lLiAgY29ubmVjdCBCU1AncwotCQkgKiBsb2NhbCBBUElDIHRvIElOVCBhbmQgTk1JIGxpbmVzLgotCQkgKi8KLQkJYXBpY19wcmludGsoQVBJQ19WRVJCT1NFLCAibGVhdmluZyBQSUMgbW9kZSwgIgotCQkJCSJlbmFibGluZyBBUElDIG1vZGUuXG4iKTsKLQkJb3V0YigweDcwLCAweDIyKTsKLQkJb3V0YigweDAxLCAweDIzKTsKLQl9Ci0jZW5kaWYKLQllbmFibGVfYXBpY19tb2RlKCk7Ci19Ci0KLS8qKgotICogZGlzY29ubmVjdF9ic3BfQVBJQyAtIGRldGFjaCB0aGUgQVBJQyBmcm9tIHRoZSBpbnRlcnJ1cHQgc3lzdGVtCi0gKiBAdmlydF93aXJlX3NldHVwOglpbmRpY2F0ZXMsIHdoZXRoZXIgdmlydHVhbCB3aXJlIG1vZGUgaXMgc2VsZWN0ZWQKLSAqCi0gKiBWaXJ0dWFsIHdpcmUgbW9kZSBpcyBuZWNlc3NhcnkgdG8gZGVsaXZlciBsZWdhY3kgaW50ZXJydXB0cyBldmVuIHdoZW4gdGhlCi0gKiBBUElDIGlzIGRpc2FibGVkLgotICovCi12b2lkIGRpc2Nvbm5lY3RfYnNwX0FQSUMoaW50IHZpcnRfd2lyZV9zZXR1cCkKLXsKLQl1bnNpZ25lZCBpbnQgdmFsdWU7Ci0KLSNpZmRlZiBDT05GSUdfWDg2XzMyCi0JaWYgKHBpY19tb2RlKSB7Ci0JCS8qCi0JCSAqIFB1dCB0aGUgYm9hcmQgYmFjayBpbnRvIFBJQyBtb2RlIChoYXMgYW4gZWZmZWN0IG9ubHkgb24KLQkJICogY2VydGFpbiBvbGRlciBib2FyZHMpLiAgTm90ZSB0aGF0IEFQSUMgaW50ZXJydXB0cywgaW5jbHVkaW5nCi0JCSAqIElQSXMsIHdvbid0IHdvcmsgYmV5b25kIHRoaXMgcG9pbnQhICBUaGUgb25seSBleGNlcHRpb24gYXJlCi0JCSAqIElOSVQgSVBJcy4KLQkJICovCi0JCWFwaWNfcHJpbnRrKEFQSUNfVkVSQk9TRSwgImRpc2FibGluZyBBUElDIG1vZGUsICIKLQkJCQkiZW50ZXJpbmcgUElDIG1vZGUuXG4iKTsKLQkJb3V0YigweDcwLCAweDIyKTsKLQkJb3V0YigweDAwLCAweDIzKTsKLQkJcmV0dXJuOwotCX0KLSNlbmRpZgotCi0JLyogR28gYmFjayB0byBWaXJ0dWFsIFdpcmUgY29tcGF0aWJpbGl0eSBtb2RlICovCi0KLQkvKiBGb3IgdGhlIHNwdXJpb3VzIGludGVycnVwdCB1c2UgdmVjdG9yIEYsIGFuZCBlbmFibGUgaXQgKi8KLQl2YWx1ZSA9IGFwaWNfcmVhZChBUElDX1NQSVYpOwotCXZhbHVlICY9IH5BUElDX1ZFQ1RPUl9NQVNLOwotCXZhbHVlIHw9IEFQSUNfU1BJVl9BUElDX0VOQUJMRUQ7Ci0JdmFsdWUgfD0gMHhmOwotCWFwaWNfd3JpdGUoQVBJQ19TUElWLCB2YWx1ZSk7Ci0KLQlpZiAoIXZpcnRfd2lyZV9zZXR1cCkgewotCQkvKgotCQkgKiBGb3IgTFZUMCBtYWtlIGl0IGVkZ2UgdHJpZ2dlcmVkLCBhY3RpdmUgaGlnaCwKLQkJICogZXh0ZXJuYWwgYW5kIGVuYWJsZWQKLQkJICovCi0JCXZhbHVlID0gYXBpY19yZWFkKEFQSUNfTFZUMCk7Ci0JCXZhbHVlICY9IH4oQVBJQ19NT0RFX01BU0sgfCBBUElDX1NFTkRfUEVORElORyB8Ci0JCQlBUElDX0lOUFVUX1BPTEFSSVRZIHwgQVBJQ19MVlRfUkVNT1RFX0lSUiB8Ci0JCQlBUElDX0xWVF9MRVZFTF9UUklHR0VSIHwgQVBJQ19MVlRfTUFTS0VEKTsKLQkJdmFsdWUgfD0gQVBJQ19MVlRfUkVNT1RFX0lSUiB8IEFQSUNfU0VORF9QRU5ESU5HOwotCQl2YWx1ZSA9IFNFVF9BUElDX0RFTElWRVJZX01PREUodmFsdWUsIEFQSUNfTU9ERV9FWFRJTlQpOwotCQlhcGljX3dyaXRlKEFQSUNfTFZUMCwgdmFsdWUpOwotCX0gZWxzZSB7Ci0JCS8qIERpc2FibGUgTFZUMCAqLwotCQlhcGljX3dyaXRlKEFQSUNfTFZUMCwgQVBJQ19MVlRfTUFTS0VEKTsKLQl9Ci0KLQkvKgotCSAqIEZvciBMVlQxIG1ha2UgaXQgZWRnZSB0cmlnZ2VyZWQsIGFjdGl2ZSBoaWdoLAotCSAqIG5taSBhbmQgZW5hYmxlZAotCSAqLwotCXZhbHVlID0gYXBpY19yZWFkKEFQSUNfTFZUMSk7Ci0JdmFsdWUgJj0gfihBUElDX01PREVfTUFTSyB8IEFQSUNfU0VORF9QRU5ESU5HIHwKLQkJCUFQSUNfSU5QVVRfUE9MQVJJVFkgfCBBUElDX0xWVF9SRU1PVEVfSVJSIHwKLQkJCUFQSUNfTFZUX0xFVkVMX1RSSUdHRVIgfCBBUElDX0xWVF9NQVNLRUQpOwotCXZhbHVlIHw9IEFQSUNfTFZUX1JFTU9URV9JUlIgfCBBUElDX1NFTkRfUEVORElORzsKLQl2YWx1ZSA9IFNFVF9BUElDX0RFTElWRVJZX01PREUodmFsdWUsIEFQSUNfTU9ERV9OTUkpOwotCWFwaWNfd3JpdGUoQVBJQ19MVlQxLCB2YWx1ZSk7Ci19Ci0KLXZvaWQgX19jcHVpbml0IGdlbmVyaWNfcHJvY2Vzc29yX2luZm8oaW50IGFwaWNpZCwgaW50IHZlcnNpb24pCi17Ci0JaW50IGNwdTsKLQljcHVtYXNrX3QgdG1wX21hcDsKLQotCS8qCi0JICogVmFsaWRhdGUgdmVyc2lvbgotCSAqLwotCWlmICh2ZXJzaW9uID09IDB4MCkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJCSU9TIGJ1ZywgQVBJQyB2ZXJzaW9uIGlzIDAgZm9yIENQVSMlZCEgIgotCQkJCSJmaXhpbmcgdXAgdG8gMHgxMC4gKHRlbGwgeW91ciBodyB2ZW5kb3IpXG4iLAotCQkJCXZlcnNpb24pOwotCQl2ZXJzaW9uID0gMHgxMDsKLQl9Ci0JYXBpY192ZXJzaW9uW2FwaWNpZF0gPSB2ZXJzaW9uOwotCi0JaWYgKG51bV9wcm9jZXNzb3JzID49IE5SX0NQVVMpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiV0FSTklORzogTlJfQ1BVUyBsaW1pdCBvZiAlaSByZWFjaGVkLiIKLQkJCSIgIFByb2Nlc3NvciBpZ25vcmVkLlxuIiwgTlJfQ1BVUyk7Ci0JCXJldHVybjsKLQl9Ci0KLQludW1fcHJvY2Vzc29ycysrOwotCWNwdXNfY29tcGxlbWVudCh0bXBfbWFwLCBjcHVfcHJlc2VudF9tYXApOwotCWNwdSA9IGZpcnN0X2NwdSh0bXBfbWFwKTsKLQotCXBoeXNpZF9zZXQoYXBpY2lkLCBwaHlzX2NwdV9wcmVzZW50X21hcCk7Ci0JaWYgKGFwaWNpZCA9PSBib290X2NwdV9waHlzaWNhbF9hcGljaWQpIHsKLQkJLyoKLQkJICogeDg2X2Jpb3NfY3B1X2FwaWNpZCBpcyByZXF1aXJlZCB0byBoYXZlIHByb2Nlc3NvcnMgbGlzdGVkCi0JCSAqIGluIHNhbWUgb3JkZXIgYXMgbG9naWNhbCBjcHUgbnVtYmVycy4gSGVuY2UgdGhlIGZpcnN0Ci0JCSAqIGVudHJ5IGlzIEJTUCwgYW5kIHNvIG9uLgotCQkgKi8KLQkJY3B1ID0gMDsKLQl9Ci0JaWYgKGFwaWNpZCA+IG1heF9waHlzaWNhbF9hcGljaWQpCi0JCW1heF9waHlzaWNhbF9hcGljaWQgPSBhcGljaWQ7Ci0KLSNpZmRlZiBDT05GSUdfWDg2XzMyCi0JLyoKLQkgKiBXb3VsZCBiZSBwcmVmZXJhYmxlIHRvIHN3aXRjaCB0byBiaWdzbXAgd2hlbiBDT05GSUdfSE9UUExVR19DUFU9eQotCSAqIGJ1dCB3ZSBuZWVkIHRvIHdvcmsgb3RoZXIgZGVwZW5kZW5jaWVzIGxpa2UgU01QX1NVU1BFTkQgZXRjCi0JICogYmVmb3JlIHRoaXMgY2FuIGJlIGRvbmUgd2l0aG91dCBzb21lIGNvbmZ1c2lvbi4KLQkgKiBpZiAoQ1BVX0hPVFBMVUdfRU5BQkxFRCB8fCBudW1fcHJvY2Vzc29ycyA+IDgpCi0JICogICAgICAgLSBBc2hvayBSYWogPGFzaG9rLnJhakBpbnRlbC5jb20+Ci0JICovCi0JaWYgKG1heF9waHlzaWNhbF9hcGljaWQgPj0gOCkgewotCQlzd2l0Y2ggKGJvb3RfY3B1X2RhdGEueDg2X3ZlbmRvcikgewotCQljYXNlIFg4Nl9WRU5ET1JfSU5URUw6Ci0JCQlpZiAoIUFQSUNfWEFQSUModmVyc2lvbikpIHsKLQkJCQlkZWZfdG9fYmlnc21wID0gMDsKLQkJCQlicmVhazsKLQkJCX0KLQkJCS8qIElmIFA0IGFuZCBhYm92ZSBmYWxsIHRocm91Z2ggKi8KLQkJY2FzZSBYODZfVkVORE9SX0FNRDoKLQkJCWRlZl90b19iaWdzbXAgPSAxOwotCQl9Ci0JfQotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKENPTkZJR19YODZfU01QKSB8fCBkZWZpbmVkKENPTkZJR19YODZfNjQpCi0JLyogYXJlIHdlIGJlaW5nIGNhbGxlZCBlYXJseSBpbiBrZXJuZWwgc3RhcnR1cD8gKi8KLQlpZiAoZWFybHlfcGVyX2NwdV9wdHIoeDg2X2NwdV90b19hcGljaWQpKSB7Ci0JCXUxNiAqY3B1X3RvX2FwaWNpZCA9IGVhcmx5X3Blcl9jcHVfcHRyKHg4Nl9jcHVfdG9fYXBpY2lkKTsKLQkJdTE2ICpiaW9zX2NwdV9hcGljaWQgPSBlYXJseV9wZXJfY3B1X3B0cih4ODZfYmlvc19jcHVfYXBpY2lkKTsKLQotCQljcHVfdG9fYXBpY2lkW2NwdV0gPSBhcGljaWQ7Ci0JCWJpb3NfY3B1X2FwaWNpZFtjcHVdID0gYXBpY2lkOwotCX0gZWxzZSB7Ci0JCXBlcl9jcHUoeDg2X2NwdV90b19hcGljaWQsIGNwdSkgPSBhcGljaWQ7Ci0JCXBlcl9jcHUoeDg2X2Jpb3NfY3B1X2FwaWNpZCwgY3B1KSA9IGFwaWNpZDsKLQl9Ci0jZW5kaWYKLQotCWNwdV9zZXQoY3B1LCBjcHVfcG9zc2libGVfbWFwKTsKLQljcHVfc2V0KGNwdSwgY3B1X3ByZXNlbnRfbWFwKTsKLX0KLQotaW50IGhhcmRfc21wX3Byb2Nlc3Nvcl9pZCh2b2lkKQotewotCXJldHVybiByZWFkX2FwaWNfaWQoKTsKLX0KLQotLyoKLSAqIFBvd2VyIG1hbmFnZW1lbnQKLSAqLwotI2lmZGVmIENPTkZJR19QTQotCi1zdGF0aWMgc3RydWN0IHsKLQkvKgotCSAqICdhY3RpdmUnIGlzIHRydWUgaWYgdGhlIGxvY2FsIEFQSUMgd2FzIGVuYWJsZWQgYnkgdXMgYW5kCi0JICogbm90IHRoZSBCSU9TOyB0aGlzIHNpZ25pZmllcyB0aGF0IHdlIGFyZSBhbHNvIHJlc3BvbnNpYmxlCi0JICogZm9yIGRpc2FibGluZyBpdCBiZWZvcmUgZW50ZXJpbmcgYXBtL2FjcGkgc3VzcGVuZAotCSAqLwotCWludCBhY3RpdmU7Ci0JLyogci93IGFwaWMgZmllbGRzICovCi0JdW5zaWduZWQgaW50IGFwaWNfaWQ7Ci0JdW5zaWduZWQgaW50IGFwaWNfdGFza3ByaTsKLQl1bnNpZ25lZCBpbnQgYXBpY19sZHI7Ci0JdW5zaWduZWQgaW50IGFwaWNfZGZyOwotCXVuc2lnbmVkIGludCBhcGljX3NwaXY7Ci0JdW5zaWduZWQgaW50IGFwaWNfbHZ0dDsKLQl1bnNpZ25lZCBpbnQgYXBpY19sdnRwYzsKLQl1bnNpZ25lZCBpbnQgYXBpY19sdnQwOwotCXVuc2lnbmVkIGludCBhcGljX2x2dDE7Ci0JdW5zaWduZWQgaW50IGFwaWNfbHZ0ZXJyOwotCXVuc2lnbmVkIGludCBhcGljX3RtaWN0OwotCXVuc2lnbmVkIGludCBhcGljX3RkY3I7Ci0JdW5zaWduZWQgaW50IGFwaWNfdGhtcjsKLX0gYXBpY19wbV9zdGF0ZTsKLQotc3RhdGljIGludCBsYXBpY19zdXNwZW5kKHN0cnVjdCBzeXNfZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWludCBtYXhsdnQ7Ci0KLQlpZiAoIWFwaWNfcG1fc3RhdGUuYWN0aXZlKQotCQlyZXR1cm4gMDsKLQotCW1heGx2dCA9IGxhcGljX2dldF9tYXhsdnQoKTsKLQotCWFwaWNfcG1fc3RhdGUuYXBpY19pZCA9IGFwaWNfcmVhZChBUElDX0lEKTsKLQlhcGljX3BtX3N0YXRlLmFwaWNfdGFza3ByaSA9IGFwaWNfcmVhZChBUElDX1RBU0tQUkkpOwotCWFwaWNfcG1fc3RhdGUuYXBpY19sZHIgPSBhcGljX3JlYWQoQVBJQ19MRFIpOwotCWFwaWNfcG1fc3RhdGUuYXBpY19kZnIgPSBhcGljX3JlYWQoQVBJQ19ERlIpOwotCWFwaWNfcG1fc3RhdGUuYXBpY19zcGl2ID0gYXBpY19yZWFkKEFQSUNfU1BJVik7Ci0JYXBpY19wbV9zdGF0ZS5hcGljX2x2dHQgPSBhcGljX3JlYWQoQVBJQ19MVlRUKTsKLQlpZiAobWF4bHZ0ID49IDQpCi0JCWFwaWNfcG1fc3RhdGUuYXBpY19sdnRwYyA9IGFwaWNfcmVhZChBUElDX0xWVFBDKTsKLQlhcGljX3BtX3N0YXRlLmFwaWNfbHZ0MCA9IGFwaWNfcmVhZChBUElDX0xWVDApOwotCWFwaWNfcG1fc3RhdGUuYXBpY19sdnQxID0gYXBpY19yZWFkKEFQSUNfTFZUMSk7Ci0JYXBpY19wbV9zdGF0ZS5hcGljX2x2dGVyciA9IGFwaWNfcmVhZChBUElDX0xWVEVSUik7Ci0JYXBpY19wbV9zdGF0ZS5hcGljX3RtaWN0ID0gYXBpY19yZWFkKEFQSUNfVE1JQ1QpOwotCWFwaWNfcG1fc3RhdGUuYXBpY190ZGNyID0gYXBpY19yZWFkKEFQSUNfVERDUik7Ci0jaWYgZGVmaW5lZChDT05GSUdfWDg2X01DRV9QNFRIRVJNQUwpIHx8IGRlZmluZWQoQ09ORklHX1g4Nl9NQ0VfSU5URUwpCi0JaWYgKG1heGx2dCA+PSA1KQotCQlhcGljX3BtX3N0YXRlLmFwaWNfdGhtciA9IGFwaWNfcmVhZChBUElDX0xWVFRITVIpOwotI2VuZGlmCi0KLQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0JZGlzYWJsZV9sb2NhbF9BUElDKCk7Ci0JbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGxhcGljX3Jlc3VtZShzdHJ1Y3Qgc3lzX2RldmljZSAqZGV2KQotewotCXVuc2lnbmVkIGludCBsLCBoOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IG1heGx2dDsKLQotCWlmICghYXBpY19wbV9zdGF0ZS5hY3RpdmUpCi0JCXJldHVybiAwOwotCi0JbWF4bHZ0ID0gbGFwaWNfZ2V0X21heGx2dCgpOwotCi0JbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCi0jaWZkZWYgQ09ORklHX1g4Nl82NAotCWlmICh4MmFwaWMpCi0JCWVuYWJsZV94MmFwaWMoKTsKLQllbHNlCi0jZW5kaWYKLQl7Ci0JCS8qCi0JCSAqIE1ha2Ugc3VyZSB0aGUgQVBJQ0JBU0UgcG9pbnRzIHRvIHRoZSByaWdodCBhZGRyZXNzCi0JCSAqCi0JCSAqIEZJWE1FISBUaGlzIHdpbGwgYmUgd3JvbmcgaWYgd2UgZXZlciBzdXBwb3J0IHN1c3BlbmQgb24KLQkJICogU01QISBXZSdsbCBuZWVkIHRvIGRvIHRoaXMgYXMgcGFydCBvZiB0aGUgQ1BVIHJlc3RvcmUhCi0JCSAqLwotCQlyZG1zcihNU1JfSUEzMl9BUElDQkFTRSwgbCwgaCk7Ci0JCWwgJj0gfk1TUl9JQTMyX0FQSUNCQVNFX0JBU0U7Ci0JCWwgfD0gTVNSX0lBMzJfQVBJQ0JBU0VfRU5BQkxFIHwgbXBfbGFwaWNfYWRkcjsKLQkJd3Jtc3IoTVNSX0lBMzJfQVBJQ0JBU0UsIGwsIGgpOwotCX0KLQotCWFwaWNfd3JpdGUoQVBJQ19MVlRFUlIsIEVSUk9SX0FQSUNfVkVDVE9SIHwgQVBJQ19MVlRfTUFTS0VEKTsKLQlhcGljX3dyaXRlKEFQSUNfSUQsIGFwaWNfcG1fc3RhdGUuYXBpY19pZCk7Ci0JYXBpY193cml0ZShBUElDX0RGUiwgYXBpY19wbV9zdGF0ZS5hcGljX2Rmcik7Ci0JYXBpY193cml0ZShBUElDX0xEUiwgYXBpY19wbV9zdGF0ZS5hcGljX2xkcik7Ci0JYXBpY193cml0ZShBUElDX1RBU0tQUkksIGFwaWNfcG1fc3RhdGUuYXBpY190YXNrcHJpKTsKLQlhcGljX3dyaXRlKEFQSUNfU1BJViwgYXBpY19wbV9zdGF0ZS5hcGljX3NwaXYpOwotCWFwaWNfd3JpdGUoQVBJQ19MVlQwLCBhcGljX3BtX3N0YXRlLmFwaWNfbHZ0MCk7Ci0JYXBpY193cml0ZShBUElDX0xWVDEsIGFwaWNfcG1fc3RhdGUuYXBpY19sdnQxKTsKLSNpZiBkZWZpbmVkKENPTkZJR19YODZfTUNFX1A0VEhFUk1BTCkgfHwgZGVmaW5lZChDT05GSUdfWDg2X01DRV9JTlRFTCkKLQlpZiAobWF4bHZ0ID49IDUpCi0JCWFwaWNfd3JpdGUoQVBJQ19MVlRUSE1SLCBhcGljX3BtX3N0YXRlLmFwaWNfdGhtcik7Ci0jZW5kaWYKLQlpZiAobWF4bHZ0ID49IDQpCi0JCWFwaWNfd3JpdGUoQVBJQ19MVlRQQywgYXBpY19wbV9zdGF0ZS5hcGljX2x2dHBjKTsKLQlhcGljX3dyaXRlKEFQSUNfTFZUVCwgYXBpY19wbV9zdGF0ZS5hcGljX2x2dHQpOwotCWFwaWNfd3JpdGUoQVBJQ19URENSLCBhcGljX3BtX3N0YXRlLmFwaWNfdGRjcik7Ci0JYXBpY193cml0ZShBUElDX1RNSUNULCBhcGljX3BtX3N0YXRlLmFwaWNfdG1pY3QpOwotCWFwaWNfd3JpdGUoQVBJQ19FU1IsIDApOwotCWFwaWNfcmVhZChBUElDX0VTUik7Ci0JYXBpY193cml0ZShBUElDX0xWVEVSUiwgYXBpY19wbV9zdGF0ZS5hcGljX2x2dGVycik7Ci0JYXBpY193cml0ZShBUElDX0VTUiwgMCk7Ci0JYXBpY19yZWFkKEFQSUNfRVNSKTsKLQotCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLQotCXJldHVybiAwOwotfQotCi0vKgotICogVGhpcyBkZXZpY2UgaGFzIG5vIHNodXRkb3duIG1ldGhvZCAtIGZ1bGx5IGZ1bmN0aW9uaW5nIGxvY2FsIEFQSUNzCi0gKiBhcmUgbmVlZGVkIG9uIGV2ZXJ5IENQVSB1cCB1bnRpbCBtYWNoaW5lX2hhbHQvcmVzdGFydC9wb3dlcm9mZi4KLSAqLwotCi1zdGF0aWMgc3RydWN0IHN5c2Rldl9jbGFzcyBsYXBpY19zeXNjbGFzcyA9IHsKLQkubmFtZQkJPSAibGFwaWMiLAotCS5yZXN1bWUJCT0gbGFwaWNfcmVzdW1lLAotCS5zdXNwZW5kCT0gbGFwaWNfc3VzcGVuZCwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3Qgc3lzX2RldmljZSBkZXZpY2VfbGFwaWMgPSB7Ci0JLmlkCT0gMCwKLQkuY2xzCT0gJmxhcGljX3N5c2NsYXNzLAotfTsKLQotc3RhdGljIHZvaWQgX19jcHVpbml0IGFwaWNfcG1fYWN0aXZhdGUodm9pZCkKLXsKLQlhcGljX3BtX3N0YXRlLmFjdGl2ZSA9IDE7Ci19Ci0KLXN0YXRpYyBpbnQgX19pbml0IGluaXRfbGFwaWNfc3lzZnModm9pZCkKLXsKLQlpbnQgZXJyb3I7Ci0KLQlpZiAoIWNwdV9oYXNfYXBpYykKLQkJcmV0dXJuIDA7Ci0JLyogWFhYOiByZW1vdmUgc3VzcGVuZC9yZXN1bWUgcHJvY3MgaWYgIWFwaWNfcG1fc3RhdGUuYWN0aXZlPyAqLwotCi0JZXJyb3IgPSBzeXNkZXZfY2xhc3NfcmVnaXN0ZXIoJmxhcGljX3N5c2NsYXNzKTsKLQlpZiAoIWVycm9yKQotCQllcnJvciA9IHN5c2Rldl9yZWdpc3RlcigmZGV2aWNlX2xhcGljKTsKLQlyZXR1cm4gZXJyb3I7Ci19Ci1kZXZpY2VfaW5pdGNhbGwoaW5pdF9sYXBpY19zeXNmcyk7Ci0KLSNlbHNlCS8qIENPTkZJR19QTSAqLwotCi1zdGF0aWMgdm9pZCBhcGljX3BtX2FjdGl2YXRlKHZvaWQpIHsgfQotCi0jZW5kaWYJLyogQ09ORklHX1BNICovCi0KLS8qCi0gKiBhcGljX2lzX2NsdXN0ZXJlZF9ib3goKSAtLSBDaGVjayBpZiB3ZSBjYW4gZXhwZWN0IGdvb2QgVFNDCi0gKgotICogVGh1cyBmYXIsIHRoZSBtYWpvciB1c2VyIG9mIHRoaXMgaXMgSUJNJ3MgU3VtbWl0MiBzZXJpZXM6Ci0gKgotICogQ2x1c3RlcmVkIGJveGVzIG1heSBoYXZlIHVuc3luY2VkIFRTQyBwcm9ibGVtcyBpZiB0aGV5IGFyZQotICogbXVsdGktY2hhc3Npcy4gVXNlIGF2YWlsYWJsZSBkYXRhIHRvIHRha2UgYSBnb29kIGd1ZXNzLgotICogSWYgaW4gZG91YnQsIGdvIEhQRVQuCi0gKi8KLV9fY3B1aW5pdCBpbnQgYXBpY19pc19jbHVzdGVyZWRfYm94KHZvaWQpCi17Ci0JaW50IGksIGNsdXN0ZXJzLCB6ZXJvczsKLQl1bnNpZ25lZCBpZDsKLQl1MTYgKmJpb3NfY3B1X2FwaWNpZDsKLQlERUNMQVJFX0JJVE1BUChjbHVzdGVybWFwLCBOVU1fQVBJQ19DTFVTVEVSUyk7Ci0KLQkvKgotCSAqIHRoZXJlIGlzIG5vdCB0aGlzIGtpbmQgb2YgYm94IHdpdGggQU1EIENQVSB5ZXQuCi0JICogU29tZSBBTUQgYm94IHdpdGggcXVhZGNvcmUgY3B1IGFuZCA4IHNvY2tldHMgYXBpY2lkCi0JICogd2lsbCBiZSBbNCwgMHgyM10gb3IgWzgsIDB4MjddIGNvdWxkIGJlIHRob3VnaHQgdG8KLQkgKiB2c21wIGJveCBzdGlsbCBuZWVkIGNoZWNraW5nLi4uCi0JICovCi0JaWYgKChib290X2NwdV9kYXRhLng4Nl92ZW5kb3IgPT0gWDg2X1ZFTkRPUl9BTUQpICYmICFpc192c21wX2JveCgpKQotCQlyZXR1cm4gMDsKLQotCWJpb3NfY3B1X2FwaWNpZCA9IGVhcmx5X3Blcl9jcHVfcHRyKHg4Nl9iaW9zX2NwdV9hcGljaWQpOwotCWJpdG1hcF96ZXJvKGNsdXN0ZXJtYXAsIE5VTV9BUElDX0NMVVNURVJTKTsKLQotCWZvciAoaSA9IDA7IGkgPCBOUl9DUFVTOyBpKyspIHsKLQkJLyogYXJlIHdlIGJlaW5nIGNhbGxlZCBlYXJseSBpbiBrZXJuZWwgc3RhcnR1cD8gKi8KLQkJaWYgKGJpb3NfY3B1X2FwaWNpZCkgewotCQkJaWQgPSBiaW9zX2NwdV9hcGljaWRbaV07Ci0JCX0KLQkJZWxzZSBpZiAoaSA8IG5yX2NwdV9pZHMpIHsKLQkJCWlmIChjcHVfcHJlc2VudChpKSkKLQkJCQlpZCA9IHBlcl9jcHUoeDg2X2Jpb3NfY3B1X2FwaWNpZCwgaSk7Ci0JCQllbHNlCi0JCQkJY29udGludWU7Ci0JCX0KLQkJZWxzZQotCQkJYnJlYWs7Ci0KLQkJaWYgKGlkICE9IEJBRF9BUElDSUQpCi0JCQlfX3NldF9iaXQoQVBJQ19DTFVTVEVSSUQoaWQpLCBjbHVzdGVybWFwKTsKLQl9Ci0KLQkvKiBQcm9ibGVtOiAgUGFydGlhbGx5IHBvcHVsYXRlZCBjaGFzc2lzIG1heSBub3QgaGF2ZSBDUFVzIGluIHNvbWUgb2YKLQkgKiB0aGUgQVBJQyBjbHVzdGVycyB0aGV5IGhhdmUgYmVlbiBhbGxvY2F0ZWQuICBPbmx5IHByZXNlbnQgQ1BVcyBoYXZlCi0JICogeDg2X2Jpb3NfY3B1X2FwaWNpZCBlbnRyaWVzLCB0aHVzIGNhdXNpbmcgemVyb2VzIGluIHRoZSBiaXRtYXAuCi0JICogU2luY2UgY2x1c3RlcnMgYXJlIGFsbG9jYXRlZCBzZXF1ZW50aWFsbHksIGNvdW50IHplcm9zIG9ubHkgaWYKLQkgKiB0aGV5IGFyZSBib3VuZGVkIGJ5IG9uZXMuCi0JICovCi0JY2x1c3RlcnMgPSAwOwotCXplcm9zID0gMDsKLQlmb3IgKGkgPSAwOyBpIDwgTlVNX0FQSUNfQ0xVU1RFUlM7IGkrKykgewotCQlpZiAodGVzdF9iaXQoaSwgY2x1c3Rlcm1hcCkpIHsKLQkJCWNsdXN0ZXJzICs9IDEgKyB6ZXJvczsKLQkJCXplcm9zID0gMDsKLQkJfSBlbHNlCi0JCQkrK3plcm9zOwotCX0KLQotCS8qIFNjYWxlTVAgdlNNUG93ZXJlZCBib3hlcyBoYXZlIG9uZSBjbHVzdGVyIHBlciBib2FyZCBhbmQgVFNDcyBhcmUKLQkgKiBub3QgZ3VhcmFudGVlZCB0byBiZSBzeW5jZWQgYmV0d2VlbiBib2FyZHMKLQkgKi8KLQlpZiAoaXNfdnNtcF9ib3goKSAmJiBjbHVzdGVycyA+IDEpCi0JCXJldHVybiAxOwotCi0JLyoKLQkgKiBJZiBjbHVzdGVycyA+IDIsIHRoZW4gc2hvdWxkIGJlIG11bHRpLWNoYXNzaXMuCi0JICogTWF5IGhhdmUgdG8gcmV2aXNpdCB0aGlzIHdoZW4gbXVsdGktY29yZSArIGh5cGVydGhyZWFkZWQgQ1BVcyBjb21lCi0JICogb3V0LCBidXQgQUZBSUsgdGhpcyB3aWxsIHdvcmsgZXZlbiBmb3IgdGhlbS4KLQkgKi8KLQlyZXR1cm4gKGNsdXN0ZXJzID4gMik7Ci19Ci0KLXN0YXRpYyBfX2luaXQgaW50IHNldHVwX25veDJhcGljKGNoYXIgKnN0cikKLXsKLQlkaXNhYmxlX3gyYXBpYyA9IDE7Ci0JY2xlYXJfY3B1X2NhcCgmYm9vdF9jcHVfZGF0YSwgWDg2X0ZFQVRVUkVfWDJBUElDKTsKLQlyZXR1cm4gMDsKLX0KLWVhcmx5X3BhcmFtKCJub3gyYXBpYyIsIHNldHVwX25veDJhcGljKTsKLQotCi0vKgotICogQVBJQyBjb21tYW5kIGxpbmUgcGFyYW1ldGVycwotICovCi1zdGF0aWMgaW50IF9faW5pdCBzZXR1cF9kaXNhYmxlYXBpYyhjaGFyICphcmcpCi17Ci0JZGlzYWJsZV9hcGljID0gMTsKLQlzZXR1cF9jbGVhcl9jcHVfY2FwKFg4Nl9GRUFUVVJFX0FQSUMpOwotCXJldHVybiAwOwotfQotZWFybHlfcGFyYW0oImRpc2FibGVhcGljIiwgc2V0dXBfZGlzYWJsZWFwaWMpOwotCi0vKiBzYW1lIGFzIGRpc2FibGVhcGljLCBmb3IgY29tcGF0aWJpbGl0eSAqLwotc3RhdGljIGludCBfX2luaXQgc2V0dXBfbm9sYXBpYyhjaGFyICphcmcpCi17Ci0JcmV0dXJuIHNldHVwX2Rpc2FibGVhcGljKGFyZyk7Ci19Ci1lYXJseV9wYXJhbSgibm9sYXBpYyIsIHNldHVwX25vbGFwaWMpOwotCi1zdGF0aWMgaW50IF9faW5pdCBwYXJzZV9sYXBpY190aW1lcl9jMl9vayhjaGFyICphcmcpCi17Ci0JbG9jYWxfYXBpY190aW1lcl9jMl9vayA9IDE7Ci0JcmV0dXJuIDA7Ci19Ci1lYXJseV9wYXJhbSgibGFwaWNfdGltZXJfYzJfb2siLCBwYXJzZV9sYXBpY190aW1lcl9jMl9vayk7Ci0KLXN0YXRpYyBpbnQgX19pbml0IHBhcnNlX2Rpc2FibGVfYXBpY190aW1lcihjaGFyICphcmcpCi17Ci0JZGlzYWJsZV9hcGljX3RpbWVyID0gMTsKLQlyZXR1cm4gMDsKLX0KLWVhcmx5X3BhcmFtKCJub2FwaWN0aW1lciIsIHBhcnNlX2Rpc2FibGVfYXBpY190aW1lcik7Ci0KLXN0YXRpYyBpbnQgX19pbml0IHBhcnNlX25vbGFwaWNfdGltZXIoY2hhciAqYXJnKQotewotCWRpc2FibGVfYXBpY190aW1lciA9IDE7Ci0JcmV0dXJuIDA7Ci19Ci1lYXJseV9wYXJhbSgibm9sYXBpY190aW1lciIsIHBhcnNlX25vbGFwaWNfdGltZXIpOwotCi1zdGF0aWMgX19pbml0IGludCBzZXR1cF9hcGljcG10aW1lcihjaGFyICpzKQotewotCWFwaWNfY2FsaWJyYXRlX3BtdG1yID0gMTsKLQlub3RzY19zZXR1cChOVUxMKTsKLQlyZXR1cm4gMDsKLX0KLV9fc2V0dXAoImFwaWNwbXRpbWVyIiwgc2V0dXBfYXBpY3BtdGltZXIpOwotCi1zdGF0aWMgaW50IF9faW5pdCBhcGljX3NldF92ZXJib3NpdHkoY2hhciAqYXJnKQotewotCWlmICghYXJnKSAgewotI2lmZGVmIENPTkZJR19YODZfNjQKLQkJc2tpcF9pb2FwaWNfc2V0dXAgPSAwOwotCQlpb2FwaWNfZm9yY2UgPSAxOwotCQlyZXR1cm4gMDsKLSNlbmRpZgotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlpZiAoc3RyY21wKCJkZWJ1ZyIsIGFyZykgPT0gMCkKLQkJYXBpY192ZXJib3NpdHkgPSBBUElDX0RFQlVHOwotCWVsc2UgaWYgKHN0cmNtcCgidmVyYm9zZSIsIGFyZykgPT0gMCkKLQkJYXBpY192ZXJib3NpdHkgPSBBUElDX1ZFUkJPU0U7Ci0JZWxzZSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIkFQSUMgVmVyYm9zaXR5IGxldmVsICVzIG5vdCByZWNvZ25pc2VkIgotCQkJIiB1c2UgYXBpYz12ZXJib3NlIG9yIGFwaWM9ZGVidWdcbiIsIGFyZyk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCXJldHVybiAwOwotfQotZWFybHlfcGFyYW0oImFwaWMiLCBhcGljX3NldF92ZXJib3NpdHkpOwotCi1zdGF0aWMgaW50IF9faW5pdCBsYXBpY19pbnNlcnRfcmVzb3VyY2Uodm9pZCkKLXsKLQlpZiAoIWFwaWNfcGh5cykKLQkJcmV0dXJuIC0xOwotCi0JLyogUHV0IGxvY2FsIEFQSUMgaW50byB0aGUgcmVzb3VyY2UgbWFwLiAqLwotCWxhcGljX3Jlc291cmNlLnN0YXJ0ID0gYXBpY19waHlzOwotCWxhcGljX3Jlc291cmNlLmVuZCA9IGxhcGljX3Jlc291cmNlLnN0YXJ0ICsgUEFHRV9TSVpFIC0gMTsKLQlpbnNlcnRfcmVzb3VyY2UoJmlvbWVtX3Jlc291cmNlLCAmbGFwaWNfcmVzb3VyY2UpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qCi0gKiBuZWVkIGNhbGwgaW5zZXJ0IGFmdGVyIGU4MjBfcmVzZXJ2ZV9yZXNvdXJjZXMoKQotICogdGhhdCBpcyB1c2luZyByZXF1ZXN0X3Jlc291cmNlCi0gKi8KLWxhdGVfaW5pdGNhbGwobGFwaWNfaW5zZXJ0X3Jlc291cmNlKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9iaW9zX3V2LmMgYi9hcmNoL3g4Ni9rZXJuZWwvYmlvc191di5jCmluZGV4IGZkZDU4NWYuLmYwZGZlNmYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9iaW9zX3V2LmMKKysrIGIvYXJjaC94ODYva2VybmVsL2Jpb3NfdXYuYwpAQCAtMSw4ICsxLDYgQEAKIC8qCiAgKiBCSU9TIHJ1biB0aW1lIGludGVyZmFjZSByb3V0aW5lcy4KICAqCi0gKiAgQ29weXJpZ2h0IChjKSAyMDA4IFNpbGljb24gR3JhcGhpY3MsIEluYy4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgogICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKICAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgpAQCAtMTYsMzMgKzE0LDEyOCBAQAogICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiAgKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKICAqICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyBVU0EKKyAqCisgKiAgQ29weXJpZ2h0IChjKSAyMDA4IFNpbGljb24gR3JhcGhpY3MsIEluYy4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChjKSBSdXNzIEFuZGVyc29uCiAgKi8KIAorI2luY2x1ZGUgPGxpbnV4L2VmaS5oPgorI2luY2x1ZGUgPGFzbS9lZmkuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgogI2luY2x1ZGUgPGFzbS91di9iaW9zLmg+CisjaW5jbHVkZSA8YXNtL3V2L3V2X2h1Yi5oPgogCi1jb25zdCBjaGFyICoKLXg4Nl9iaW9zX3N0cmVycm9yKGxvbmcgc3RhdHVzKQorc3RydWN0IHV2X3N5c3RhYiB1dl9zeXN0YWI7CisKK3M2NCB1dl9iaW9zX2NhbGwoZW51bSB1dl9iaW9zX2NtZCB3aGljaCwgdTY0IGExLCB1NjQgYTIsIHU2NCBhMywgdTY0IGE0LCB1NjQgYTUpCiB7Ci0JY29uc3QgY2hhciAqc3RyOwotCXN3aXRjaCAoc3RhdHVzKSB7Ci0JY2FzZSAgMDogc3RyID0gIkNhbGwgY29tcGxldGVkIHdpdGhvdXQgZXJyb3IiOwlicmVhazsKLQljYXNlIC0xOiBzdHIgPSAiTm90IGltcGxlbWVudGVkIjsJCWJyZWFrOwotCWNhc2UgLTI6IHN0ciA9ICJJbnZhbGlkIGFyZ3VtZW50IjsJCWJyZWFrOwotCWNhc2UgLTM6IHN0ciA9ICJDYWxsIGNvbXBsZXRlZCB3aXRoIGVycm9yIjsJYnJlYWs7Ci0JZGVmYXVsdDogc3RyID0gIlVua25vd24gQklPUyBzdGF0dXMgY29kZSI7CWJyZWFrOworCXN0cnVjdCB1dl9zeXN0YWIgKnRhYiA9ICZ1dl9zeXN0YWI7CisKKwlpZiAoIXRhYi0+ZnVuY3Rpb24pCisJCS8qCisJCSAqIEJJT1MgZG9lcyBub3Qgc3VwcG9ydCBVViBzeXN0YWIKKwkJICovCisJCXJldHVybiBCSU9TX1NUQVRVU19VTklNUExFTUVOVEVEOworCisJcmV0dXJuIGVmaV9jYWxsNigodm9pZCAqKV9fdmEodGFiLT5mdW5jdGlvbiksCisJCQkJCSh1NjQpd2hpY2gsIGExLCBhMiwgYTMsIGE0LCBhNSk7Cit9CisKK3M2NCB1dl9iaW9zX2NhbGxfaXJxc2F2ZShlbnVtIHV2X2Jpb3NfY21kIHdoaWNoLCB1NjQgYTEsIHU2NCBhMiwgdTY0IGEzLAorCQkJCQl1NjQgYTQsIHU2NCBhNSkKK3sKKwl1bnNpZ25lZCBsb25nIGJpb3NfZmxhZ3M7CisJczY0IHJldDsKKworCWxvY2FsX2lycV9zYXZlKGJpb3NfZmxhZ3MpOworCXJldCA9IHV2X2Jpb3NfY2FsbCh3aGljaCwgYTEsIGEyLCBhMywgYTQsIGE1KTsKKwlsb2NhbF9pcnFfcmVzdG9yZShiaW9zX2ZsYWdzKTsKKworCXJldHVybiByZXQ7Cit9CisKK3M2NCB1dl9iaW9zX2NhbGxfcmVlbnRyYW50KGVudW0gdXZfYmlvc19jbWQgd2hpY2gsIHU2NCBhMSwgdTY0IGEyLCB1NjQgYTMsCisJCQkJCXU2NCBhNCwgdTY0IGE1KQoreworCXM2NCByZXQ7CisKKwlwcmVlbXB0X2Rpc2FibGUoKTsKKwlyZXQgPSB1dl9iaW9zX2NhbGwod2hpY2gsIGExLCBhMiwgYTMsIGE0LCBhNSk7CisJcHJlZW1wdF9lbmFibGUoKTsKKworCXJldHVybiByZXQ7Cit9CisKKworbG9uZyBzbl9wYXJ0aXRpb25faWQ7CitFWFBPUlRfU1lNQk9MX0dQTChzbl9wYXJ0aXRpb25faWQpOworbG9uZyB1dl9jb2hlcmVuY3lfaWQ7CitFWFBPUlRfU1lNQk9MX0dQTCh1dl9jb2hlcmVuY3lfaWQpOworbG9uZyB1dl9yZWdpb25fc2l6ZTsKK0VYUE9SVF9TWU1CT0xfR1BMKHV2X3JlZ2lvbl9zaXplKTsKK2ludCB1dl90eXBlOworCisKK3M2NCB1dl9iaW9zX2dldF9zbl9pbmZvKGludCBmYywgaW50ICp1dnR5cGUsIGxvbmcgKnBhcnRpZCwgbG9uZyAqY29oZXIsCisJCWxvbmcgKnJlZ2lvbikKK3sKKwlzNjQgcmV0OworCXU2NCB2MCwgdjE7CisJdW5pb24gcGFydGl0aW9uX2luZm9fdSBwYXJ0OworCisJcmV0ID0gdXZfYmlvc19jYWxsX2lycXNhdmUoVVZfQklPU19HRVRfU05fSU5GTywgZmMsCisJCQkJKHU2NCkoJnYwKSwgKHU2NCkoJnYxKSwgMCwgMCk7CisJaWYgKHJldCAhPSBCSU9TX1NUQVRVU19TVUNDRVNTKQorCQlyZXR1cm4gcmV0OworCisJcGFydC52YWwgPSB2MDsKKwlpZiAodXZ0eXBlKQorCQkqdXZ0eXBlID0gcGFydC5odWJfdmVyc2lvbjsKKwlpZiAocGFydGlkKQorCQkqcGFydGlkID0gcGFydC5wYXJ0aXRpb25faWQ7CisJaWYgKGNvaGVyKQorCQkqY29oZXIgPSBwYXJ0LmNvaGVyZW5jZV9pZDsKKwlpZiAocmVnaW9uKQorCQkqcmVnaW9uID0gcGFydC5yZWdpb25fc2l6ZTsKKwlyZXR1cm4gcmV0OworfQorCisKK3M2NCB1dl9iaW9zX2ZyZXFfYmFzZSh1NjQgY2xvY2tfdHlwZSwgdTY0ICp0aWNrc19wZXJfc2Vjb25kKQoreworCXJldHVybiB1dl9iaW9zX2NhbGwoVVZfQklPU19GUkVRX0JBU0UsIGNsb2NrX3R5cGUsCisJCQkgICAodTY0KXRpY2tzX3Blcl9zZWNvbmQsIDAsIDAsIDApOworfQorRVhQT1JUX1NZTUJPTF9HUEwodXZfYmlvc19mcmVxX2Jhc2UpOworCisKKyNpZmRlZiBDT05GSUdfRUZJCit2b2lkIHV2X2Jpb3NfaW5pdCh2b2lkKQoreworCXN0cnVjdCB1dl9zeXN0YWIgKnRhYjsKKworCWlmICgoZWZpLnV2X3N5c3RhYiA9PSBFRklfSU5WQUxJRF9UQUJMRV9BRERSKSB8fAorCSAgICAoZWZpLnV2X3N5c3RhYiA9PSAodW5zaWduZWQgbG9uZylOVUxMKSkgeworCQlwcmludGsoS0VSTl9DUklUICJObyBFRkkgVVYgU3lzdGVtIFRhYmxlLlxuIik7CisJCXV2X3N5c3RhYi5mdW5jdGlvbiA9ICh1bnNpZ25lZCBsb25nKU5VTEw7CisJCXJldHVybjsKIAl9Ci0JcmV0dXJuIHN0cjsKLX0KIAotbG9uZwoteDg2X2Jpb3NfZnJlcV9iYXNlKHVuc2lnbmVkIGxvbmcgd2hpY2gsIHVuc2lnbmVkIGxvbmcgKnRpY2tzX3Blcl9zZWNvbmQsCi0JCSAgIHVuc2lnbmVkIGxvbmcgKmRyaWZ0X2luZm8pCi17Ci0Jc3RydWN0IHV2X2Jpb3NfcmV0dmFsIGlzcnY7CisJdGFiID0gKHN0cnVjdCB1dl9zeXN0YWIgKilpb3JlbWFwKGVmaS51dl9zeXN0YWIsCisJCQkJCXNpemVvZihzdHJ1Y3QgdXZfc3lzdGFiKSk7CisJaWYgKHN0cm5jbXAodGFiLT5zaWduYXR1cmUsICJVVlNUIiwgNCkgIT0gMCkKKwkJcHJpbnRrKEtFUk5fRVJSICJiYWQgc2lnbmF0dXJlIGluIFVWIHN5c3RlbSB0YWJsZSEiKTsKIAotCUJJT1NfQ0FMTChpc3J2LCBCSU9TX0ZSRVFfQkFTRSwgd2hpY2gsIDAsIDAsIDAsIDAsIDAsIDApOwotCSp0aWNrc19wZXJfc2Vjb25kID0gaXNydi52MDsKLQkqZHJpZnRfaW5mbyA9IGlzcnYudjE7Ci0JcmV0dXJuIGlzcnYuc3RhdHVzOworCS8qCisJICogQ29weSB0YWJsZSB0byBwZXJtYW5lbnQgc3BvdCBmb3IgbGF0ZXIgdXNlLgorCSAqLworCW1lbWNweSgmdXZfc3lzdGFiLCB0YWIsIHNpemVvZihzdHJ1Y3QgdXZfc3lzdGFiKSk7CisJaW91bm1hcCh0YWIpOworCisJcHJpbnRrKEtFUk5fSU5GTyAiRUZJIFVWIFN5c3RlbSBUYWJsZSBSZXZpc2lvbiAlZFxuIiwgdGFiLT5yZXZpc2lvbik7CiB9Ci1FWFBPUlRfU1lNQk9MX0dQTCh4ODZfYmlvc19mcmVxX2Jhc2UpOworI2Vsc2UJLyogIUNPTkZJR19FRkkgKi8KKwordm9pZCB1dl9iaW9zX2luaXQodm9pZCkgeyB9CisjZW5kaWYKKwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS8uZ2l0aWdub3JlIGIvYXJjaC94ODYva2VybmVsL2NwdS8uZ2l0aWdub3JlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY2N2RmNTUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1Ly5naXRpZ25vcmUKQEAgLTAsMCArMSBAQAorY2FwZmxhZ3MuYwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9hbWQuYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvYW1kLmMKaW5kZXggMzJlNzM1Mi4uOGYxZTMxZCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9hbWQuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2FtZC5jCkBAIC0yNDksNyArMjQ5LDcgQEAKIAl9CiAJbnVtYV9zZXRfbm9kZShjcHUsIG5vZGUpOwogCi0JcHJpbnRrKEtFUk5fSU5GTyAiQ1BVICVkLyV4IC0+IE5vZGUgJWRcbiIsIGNwdSwgYXBpY2lkLCBub2RlKTsKKwlwcmludGsoS0VSTl9JTkZPICJDUFUgJWQvMHgleCAtPiBOb2RlICVkXG4iLCBjcHUsIGFwaWNpZCwgbm9kZSk7CiAjZW5kaWYKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9jb21tb24uYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvY29tbW9uLmMKaW5kZXggZmI3ODlkZC4uMjU1ODFkYyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9jb21tb24uYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NvbW1vbi5jCkBAIC0xMjQsMTggKzEyNCwyNSBAQAogewogCXUzMiBmMSwgZjI7CiAKLQlhc20oInB1c2hmbFxuXHQiCi0JICAgICJwdXNoZmxcblx0IgotCSAgICAicG9wbCAlMFxuXHQiCi0JICAgICJtb3ZsICUwLCUxXG5cdCIKLQkgICAgInhvcmwgJTIsJTBcblx0IgotCSAgICAicHVzaGwgJTBcblx0IgotCSAgICAicG9wZmxcblx0IgotCSAgICAicHVzaGZsXG5cdCIKLQkgICAgInBvcGwgJTBcblx0IgotCSAgICAicG9wZmxcblx0IgotCSAgICA6ICI9JnIiIChmMSksICI9JnIiIChmMikKLQkgICAgOiAiaXIiIChmbGFnKSk7CisJLyoKKwkgKiBDeXJpeCBhbmQgSURUIGNwdXMgYWxsb3cgZGlzYWJsaW5nIG9mIENQVUlECisJICogc28gdGhlIGNvZGUgYmVsb3cgbWF5IHJldHVybiBkaWZmZXJlbnQgcmVzdWx0cworCSAqIHdoZW4gaXQgaXMgZXhlY3V0ZWQgYmVmb3JlIGFuZCBhZnRlciBlbmFibGluZworCSAqIHRoZSBDUFVJRC4gQWRkICJ2b2xhdGlsZSIgdG8gbm90IGFsbG93IGdjYyB0bworCSAqIG9wdGltaXplIHRoZSBzdWJzZXF1ZW50IGNhbGxzIHRvIHRoaXMgZnVuY3Rpb24uCisJICovCisJYXNtIHZvbGF0aWxlICgicHVzaGZsXG5cdCIKKwkJICAgICAgInB1c2hmbFxuXHQiCisJCSAgICAgICJwb3BsICUwXG5cdCIKKwkJICAgICAgIm1vdmwgJTAsJTFcblx0IgorCQkgICAgICAieG9ybCAlMiwlMFxuXHQiCisJCSAgICAgICJwdXNobCAlMFxuXHQiCisJCSAgICAgICJwb3BmbFxuXHQiCisJCSAgICAgICJwdXNoZmxcblx0IgorCQkgICAgICAicG9wbCAlMFxuXHQiCisJCSAgICAgICJwb3BmbFxuXHQiCisJCSAgICAgIDogIj0mciIgKGYxKSwgIj0mciIgKGYyKQorCQkgICAgICA6ICJpciIgKGZsYWcpKTsKIAogCXJldHVybiAoKGYxXmYyKSAmIGZsYWcpICE9IDA7CiB9CkBAIC03MTksMTIgKzcyNiwyNCBAQAogI2VuZGlmCiB9CiAKKyNpZmRlZiBDT05GSUdfWDg2XzY0CitzdGF0aWMgdm9pZCB2Z2V0Y3B1X3NldF9tb2RlKHZvaWQpCit7CisJaWYgKGNwdV9oYXMoJmJvb3RfY3B1X2RhdGEsIFg4Nl9GRUFUVVJFX1JEVFNDUCkpCisJCXZnZXRjcHVfbW9kZSA9IFZHRVRDUFVfUkRUU0NQOworCWVsc2UKKwkJdmdldGNwdV9tb2RlID0gVkdFVENQVV9MU0w7Cit9CisjZW5kaWYKKwogdm9pZCBfX2luaXQgaWRlbnRpZnlfYm9vdF9jcHUodm9pZCkKIHsKIAlpZGVudGlmeV9jcHUoJmJvb3RfY3B1X2RhdGEpOwogI2lmZGVmIENPTkZJR19YODZfMzIKIAlzeXNlbnRlcl9zZXR1cCgpOwogCWVuYWJsZV9zZXBfY3B1KCk7CisjZWxzZQorCXZnZXRjcHVfc2V0X21vZGUoKTsKICNlbmRpZgogfQogCkBAIC03OTcsNyArODE2LDcgQEAKIAllbHNlIGlmIChjLT5jcHVpZF9sZXZlbCA+PSAwKQogCQl2ZW5kb3IgPSBjLT54ODZfdmVuZG9yX2lkOwogCi0JaWYgKHZlbmRvciAmJiBzdHJuY21wKGMtPng4Nl9tb2RlbF9pZCwgdmVuZG9yLCBzdHJsZW4odmVuZG9yKSkpCisJaWYgKHZlbmRvciAmJiAhc3Ryc3RyKGMtPng4Nl9tb2RlbF9pZCwgdmVuZG9yKSkKIAkJcHJpbnRrKEtFUk5fQ09OVCAiJXMgIiwgdmVuZG9yKTsKIAogCWlmIChjLT54ODZfbW9kZWxfaWRbMF0pCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvbG9uZ2hhdWwuYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9sb25naGF1bC5jCmluZGV4IDA2ZmNjZTUuLmIwNDYxODUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9sb25naGF1bC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9sb25naGF1bC5jCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqICAoQykgMjAwMS0yMDA0ICBEYXZlIEpvbmVzLiA8ZGF2ZWpAY29kZW1vbmtleS5vcmcudWs+CisgKiAgKEMpIDIwMDEtMjAwNCAgRGF2ZSBKb25lcy4gPGRhdmVqQHJlZGhhdC5jb20+CiAgKiAgKEMpIDIwMDIgIFBhZHJhaWcgQnJhZHkuIDxwYWRyYWlnQGFudGVmYWN0by5jb20+CiAgKgogICogIExpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdQTCBMaWNlbnNlIHZlcnNpb24gMi4KQEAgLTEwMTksNyArMTAxOSw3IEBACiBtb2R1bGVfcGFyYW0ocmV2aWRfZXJyYXRhLCBpbnQsIDA2NDQpOwogTU9EVUxFX1BBUk1fREVTQyhyZXZpZF9lcnJhdGEsICJJZ25vcmUgQ1BVIFJldmlzaW9uIElEIik7CiAKLU1PRFVMRV9BVVRIT1IgKCJEYXZlIEpvbmVzIDxkYXZlakBjb2RlbW9ua2V5Lm9yZy51az4iKTsKK01PRFVMRV9BVVRIT1IgKCJEYXZlIEpvbmVzIDxkYXZlakByZWRoYXQuY29tPiIpOwogTU9EVUxFX0RFU0NSSVBUSU9OICgiTG9uZ2hhdWwgZHJpdmVyIGZvciBWSUEgQ3lyaXggcHJvY2Vzc29ycy4iKTsKIE1PRFVMRV9MSUNFTlNFICgiR1BMIik7CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9wb3dlcm5vdy1rNi5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL3Bvd2Vybm93LWs2LmMKaW5kZXggYjVjZWQ4MC4uYzFhYzU3OSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL3Bvd2Vybm93LWs2LmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL3Bvd2Vybm93LWs2LmMKQEAgLTI0Niw3ICsyNDYsNyBAQAogfQogCiAKLU1PRFVMRV9BVVRIT1IoIkFyamFuIHZhbiBkZSBWZW4gPGFyamFudkByZWRoYXQuY29tPiwgRGF2ZSBKb25lcyA8ZGF2ZWpAY29kZW1vbmtleS5vcmcudWs+LCBEb21pbmlrIEJyb2Rvd3NraSA8bGludXhAYnJvZG8uZGU+Iik7CitNT0RVTEVfQVVUSE9SKCJBcmphbiB2YW4gZGUgVmVuLCBEYXZlIEpvbmVzIDxkYXZlakByZWRoYXQuY29tPiwgRG9taW5payBCcm9kb3dza2kgPGxpbnV4QGJyb2RvLmRlPiIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJQb3dlck5vdyEgZHJpdmVyIGZvciBBTUQgSzYtMisgLyBLNi0zKyBwcm9jZXNzb3JzLiIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvcG93ZXJub3ctazcuYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9wb3dlcm5vdy1rNy5jCmluZGV4IDBhNjExNTkuLjdjN2Q1NmIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9wb3dlcm5vdy1rNy5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9wb3dlcm5vdy1rNy5jCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqICBBTUQgSzcgUG93ZXJub3cgZHJpdmVyLgotICogIChDKSAyMDAzIERhdmUgSm9uZXMgPGRhdmVqQGNvZGVtb25rZXkub3JnLnVrPiBvbiBiZWhhbGYgb2YgU3VTRSBMYWJzLgorICogIChDKSAyMDAzIERhdmUgSm9uZXMgb24gYmVoYWxmIG9mIFN1U0UgTGFicy4KICAqICAoQykgMjAwMy0yMDA0IERhdmUgSm9uZXMgPGRhdmVqQHJlZGhhdC5jb20+CiAgKgogICogIExpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdQTCBMaWNlbnNlIHZlcnNpb24gMi4KQEAgLTY5Miw3ICs2OTIsNyBAQAogbW9kdWxlX3BhcmFtKGFjcGlfZm9yY2UsICBpbnQsIDA0NDQpOwogTU9EVUxFX1BBUk1fREVTQyhhY3BpX2ZvcmNlLCAiRm9yY2UgQUNQSSB0byBiZSB1c2VkLiIpOwogCi1NT0RVTEVfQVVUSE9SICgiRGF2ZSBKb25lcyA8ZGF2ZWpAY29kZW1vbmtleS5vcmcudWs+Iik7CitNT0RVTEVfQVVUSE9SICgiRGF2ZSBKb25lcyA8ZGF2ZWpAcmVkaGF0LmNvbT4iKTsKIE1PRFVMRV9ERVNDUklQVElPTiAoIlBvd2Vybm93IGRyaXZlciBmb3IgQU1EIEs3IHByb2Nlc3NvcnMuIik7CiBNT0RVTEVfTElDRU5TRSAoIkdQTCIpOwogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvcG93ZXJub3ctazguYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9wb3dlcm5vdy1rOC5jCmluZGV4IDg0YmIzOTUuLjAwOGQyM2IgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9wb3dlcm5vdy1rOC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9wb3dlcm5vdy1rOC5jCkBAIC03LDcgKzcsNyBAQAogICogIFN1cHBvcnQgOiBtYXJrLmxhbmdzZG9yZkBhbWQuY29tCiAgKgogICogIEJhc2VkIG9uIHRoZSBwb3dlcm5vdy1rNy5jIG1vZHVsZSB3cml0dGVuIGJ5IERhdmUgSm9uZXMuCi0gKiAgKEMpIDIwMDMgRGF2ZSBKb25lcyA8ZGF2ZWpAY29kZW1vbmtleS5vcmcudWs+IG9uIGJlaGFsZiBvZiBTdVNFIExhYnMKKyAqICAoQykgMjAwMyBEYXZlIEpvbmVzIG9uIGJlaGFsZiBvZiBTdVNFIExhYnMKICAqICAoQykgMjAwNCBEb21pbmlrIEJyb2Rvd3NraSA8bGludXhAYnJvZG8uZGU+CiAgKiAgKEMpIDIwMDQgUGF2ZWwgTWFjaGVrIDxwYXZlbEBzdXNlLmN6PgogICogIExpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdQTCBMaWNlbnNlIHZlcnNpb24gMi4KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9zcGVlZHN0ZXAtaWNoLmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvc3BlZWRzdGVwLWljaC5jCmluZGV4IDE5MWY3MjYuLjA0ZDAzNzYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9zcGVlZHN0ZXAtaWNoLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL3NwZWVkc3RlcC1pY2guYwpAQCAtNDMxLDcgKzQzMSw3IEBACiB9CiAKIAotTU9EVUxFX0FVVEhPUiAoIkRhdmUgSm9uZXMgPGRhdmVqQGNvZGVtb25rZXkub3JnLnVrPiwgRG9taW5payBCcm9kb3dza2kgPGxpbnV4QGJyb2RvLmRlPiIpOworTU9EVUxFX0FVVEhPUiAoIkRhdmUgSm9uZXMgPGRhdmVqQHJlZGhhdC5jb20+LCBEb21pbmlrIEJyb2Rvd3NraSA8bGludXhAYnJvZG8uZGU+Iik7CiBNT0RVTEVfREVTQ1JJUFRJT04gKCJTcGVlZHN0ZXAgZHJpdmVyIGZvciBJbnRlbCBtb2JpbGUgcHJvY2Vzc29ycyBvbiBjaGlwc2V0cyB3aXRoIElDSC1NIHNvdXRoYnJpZGdlcy4iKTsKIE1PRFVMRV9MSUNFTlNFICgiR1BMIik7CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvaW50ZWwuYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvaW50ZWwuYwppbmRleCA5OTQ2OGRiLi5jY2UwYjYxIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2ludGVsLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9pbnRlbC5jCkBAIC0xNzQsNyArMTc0LDcgQEAKIAkJbm9kZSA9IGZpcnN0X25vZGUobm9kZV9vbmxpbmVfbWFwKTsKIAludW1hX3NldF9ub2RlKGNwdSwgbm9kZSk7CiAKLQlwcmludGsoS0VSTl9JTkZPICJDUFUgJWQvJXggLT4gTm9kZSAlZFxuIiwgY3B1LCBhcGljaWQsIG5vZGUpOworCXByaW50ayhLRVJOX0lORk8gIkNQVSAlZC8weCV4IC0+IE5vZGUgJWRcbiIsIGNwdSwgYXBpY2lkLCBub2RlKTsKICNlbmRpZgogfQogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L21jaGVjay9rNy5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9tY2hlY2svazcuYwppbmRleCBmMzkwYzlmLi5kZDNhZjZlIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L21jaGVjay9rNy5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvbWNoZWNrL2s3LmMKQEAgLTEsNiArMSw2IEBACiAvKgotICogQXRobG9uL0hhbW1lciBzcGVjaWZpYyBNYWNoaW5lIENoZWNrIEV4Y2VwdGlvbiBSZXBvcnRpbmcKLSAqIChDKSBDb3B5cmlnaHQgMjAwMiBEYXZlIEpvbmVzIDxkYXZlakBjb2RlbW9ua2V5Lm9yZy51az4KKyAqIEF0aGxvbiBzcGVjaWZpYyBNYWNoaW5lIENoZWNrIEV4Y2VwdGlvbiBSZXBvcnRpbmcKKyAqIChDKSBDb3B5cmlnaHQgMjAwMiBEYXZlIEpvbmVzIDxkYXZlakByZWRoYXQuY29tPgogICovCiAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L21jaGVjay9tY2VfMzIuYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvbWNoZWNrL21jZV8zMi5jCmluZGV4IDc3NGQ4N2MuLjBlYmYzZmMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvbWNoZWNrL21jZV8zMi5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvbWNoZWNrL21jZV8zMi5jCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIG1jZS5jIC0geDg2IE1hY2hpbmUgQ2hlY2sgRXhjZXB0aW9uIFJlcG9ydGluZwotICogKGMpIDIwMDIgQWxhbiBDb3ggPGFsYW5AcmVkaGF0LmNvbT4sIERhdmUgSm9uZXMgPGRhdmVqQGNvZGVtb25rZXkub3JnLnVrPgorICogKGMpIDIwMDIgQWxhbiBDb3ggPGFsYW5AcmVkaGF0LmNvbT4sIERhdmUgSm9uZXMgPGRhdmVqQHJlZGhhdC5jb20+CiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvbWNoZWNrL25vbi1mYXRhbC5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9tY2hlY2svbm9uLWZhdGFsLmMKaW5kZXggY2MxZmNjZC4uYTc0YWYxMiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9tY2hlY2svbm9uLWZhdGFsLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9tY2hlY2svbm9uLWZhdGFsLmMKQEAgLTEsNyArMSw3IEBACiAvKgogICogTm9uIEZhdGFsIE1hY2hpbmUgQ2hlY2sgRXhjZXB0aW9uIFJlcG9ydGluZwogICoKLSAqIChDKSBDb3B5cmlnaHQgMjAwMiBEYXZlIEpvbmVzLiA8ZGF2ZWpAY29kZW1vbmtleS5vcmcudWs+CisgKiAoQykgQ29weXJpZ2h0IDIwMDIgRGF2ZSBKb25lcy4gPGRhdmVqQHJlZGhhdC5jb20+CiAgKgogICogVGhpcyBmaWxlIGNvbnRhaW5zIHJvdXRpbmVzIHRvIGNoZWNrIGZvciBub24tZmF0YWwgTUNFcyBldmVyeSAxNXMKICAqCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1aWQuYyBiL2FyY2gveDg2L2tlcm5lbC9jcHVpZC5jCmluZGV4IDZhNDRkNjQuLjcyY2VmZDEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHVpZC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHVpZC5jCkBAIC0xNDcsOCArMTQ3LDggQEAKIHsKIAlzdHJ1Y3QgZGV2aWNlICpkZXY7CiAKLQlkZXYgPSBkZXZpY2VfY3JlYXRlX2RydmRhdGEoY3B1aWRfY2xhc3MsIE5VTEwsIE1LREVWKENQVUlEX01BSk9SLCBjcHUpLAotCQkJCSAgICBOVUxMLCAiY3B1JWQiLCBjcHUpOworCWRldiA9IGRldmljZV9jcmVhdGUoY3B1aWRfY2xhc3MsIE5VTEwsIE1LREVWKENQVUlEX01BSk9SLCBjcHUpLCBOVUxMLAorCQkJICAgICJjcHUlZCIsIGNwdSk7CiAJcmV0dXJuIElTX0VSUihkZXYpID8gUFRSX0VSUihkZXYpIDogMDsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NyYXNoX2R1bXBfMzIuYyBiL2FyY2gveDg2L2tlcm5lbC9jcmFzaF9kdW1wXzMyLmMKaW5kZXggNzJkMGM1Ni4uZjdjZGIzYiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NyYXNoX2R1bXBfMzIuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3Jhc2hfZHVtcF8zMi5jCkBAIC0xMyw2ICsxMyw5IEBACiAKIHN0YXRpYyB2b2lkICprZHVtcF9idWZfcGFnZTsKIAorLyogU3RvcmVzIHRoZSBwaHlzaWNhbCBhZGRyZXNzIG9mIGVsZiBoZWFkZXIgb2YgY3Jhc2ggaW1hZ2UuICovCit1bnNpZ25lZCBsb25nIGxvbmcgZWxmY29yZWhkcl9hZGRyID0gRUxGQ09SRV9BRERSX01BWDsKKwogLyoqCiAgKiBjb3B5X29sZG1lbV9wYWdlIC0gY29weSBvbmUgcGFnZSBmcm9tICJvbGRtZW0iCiAgKiBAcGZuOiBwYWdlIGZyYW1lIG51bWJlciB0byBiZSBjb3BpZWQKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcmFzaF9kdW1wXzY0LmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3Jhc2hfZHVtcF82NC5jCmluZGV4IGU5MGE2MGUuLjA0NWIzNmMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcmFzaF9kdW1wXzY0LmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NyYXNoX2R1bXBfNjQuYwpAQCAtMTAsNiArMTAsOSBAQAogI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgogCisvKiBTdG9yZXMgdGhlIHBoeXNpY2FsIGFkZHJlc3Mgb2YgZWxmIGhlYWRlciBvZiBjcmFzaCBpbWFnZS4gKi8KK3Vuc2lnbmVkIGxvbmcgbG9uZyBlbGZjb3JlaGRyX2FkZHIgPSBFTEZDT1JFX0FERFJfTUFYOworCiAvKioKICAqIGNvcHlfb2xkbWVtX3BhZ2UgLSBjb3B5IG9uZSBwYWdlIGZyb20gIm9sZG1lbSIKICAqIEBwZm46IHBhZ2UgZnJhbWUgbnVtYmVyIHRvIGJlIGNvcGllZApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2RvdWJsZWZhdWx0XzMyLmMgYi9hcmNoL3g4Ni9rZXJuZWwvZG91YmxlZmF1bHRfMzIuYwppbmRleCAzOTVhY2IxLi5iNGYxNGM2IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvZG91YmxlZmF1bHRfMzIuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvZG91YmxlZmF1bHRfMzIuYwpAQCAtNjYsNiArNjYsNiBAQAogCQkuZHMJCT0gX19VU0VSX0RTLAogCQkuZnMJCT0gX19LRVJORUxfUEVSQ1BVLAogCi0JCS5fX2NyMwkJPSBfX3BoeXNfYWRkcl9jb25zdCgodW5zaWduZWQgbG9uZylzd2FwcGVyX3BnX2RpcikKKwkJLl9fY3IzCQk9IF9fcGFfbm9kZWJ1Zyhzd2FwcGVyX3BnX2RpciksCiAJfQogfTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9kdW1wc3RhY2tfMzIuYyBiL2FyY2gveDg2L2tlcm5lbC9kdW1wc3RhY2tfMzIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYTc4MTgwCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC94ODYva2VybmVsL2R1bXBzdGFja18zMi5jCkBAIC0wLDAgKzEsNDQ5IEBACisvKgorICogIENvcHlyaWdodCAoQykgMTk5MSwgMTk5MiAgTGludXMgVG9ydmFsZHMKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDAsIDIwMDEsIDIwMDIgQW5kaSBLbGVlbiwgU3VTRSBMYWJzCisgKi8KKyNpbmNsdWRlIDxsaW51eC9rYWxsc3ltcy5oPgorI2luY2x1ZGUgPGxpbnV4L2twcm9iZXMuaD4KKyNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CisjaW5jbHVkZSA8bGludXgvdXRzbmFtZS5oPgorI2luY2x1ZGUgPGxpbnV4L2hhcmRpcnEuaD4KKyNpbmNsdWRlIDxsaW51eC9rZGVidWcuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9wdHJhY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXhlYy5oPgorI2luY2x1ZGUgPGxpbnV4L2J1Zy5oPgorI2luY2x1ZGUgPGxpbnV4L25taS5oPgorI2luY2x1ZGUgPGxpbnV4L3N5c2ZzLmg+CisKKyNpbmNsdWRlIDxhc20vc3RhY2t0cmFjZS5oPgorCisjZGVmaW5lIFNUQUNLU0xPVFNfUEVSX0xJTkUgOAorI2RlZmluZSBnZXRfYnAoYnApIGFzbSgibW92bCAlJWVicCwgJTAiIDogIj1yIiAoYnApIDopCisKK2ludCBwYW5pY19vbl91bnJlY292ZXJlZF9ubWk7CitpbnQga3N0YWNrX2RlcHRoX3RvX3ByaW50ID0gMyAqIFNUQUNLU0xPVFNfUEVSX0xJTkU7CitzdGF0aWMgdW5zaWduZWQgaW50IGNvZGVfYnl0ZXMgPSA2NDsKK3N0YXRpYyBpbnQgZGllX2NvdW50ZXI7CisKK3ZvaWQgcHJpbnRrX2FkZHJlc3ModW5zaWduZWQgbG9uZyBhZGRyZXNzLCBpbnQgcmVsaWFibGUpCit7CisJcHJpbnRrKCIgWzwlcD5dICVzJXBTXG4iLCAodm9pZCAqKSBhZGRyZXNzLAorCQkJcmVsaWFibGUgPyAiIiA6ICI/ICIsICh2b2lkICopIGFkZHJlc3MpOworfQorCitzdGF0aWMgaW5saW5lIGludCB2YWxpZF9zdGFja19wdHIoc3RydWN0IHRocmVhZF9pbmZvICp0aW5mbywKKwkJCXZvaWQgKnAsIHVuc2lnbmVkIGludCBzaXplLCB2b2lkICplbmQpCit7CisJdm9pZCAqdCA9IHRpbmZvOworCWlmIChlbmQpIHsKKwkJaWYgKHAgPCBlbmQgJiYgcCA+PSAoZW5kLVRIUkVBRF9TSVpFKSkKKwkJCXJldHVybiAxOworCQllbHNlCisJCQlyZXR1cm4gMDsKKwl9CisJcmV0dXJuIHAgPiB0ICYmIHAgPCB0ICsgVEhSRUFEX1NJWkUgLSBzaXplOworfQorCisvKiBUaGUgZm9ybSBvZiB0aGUgdG9wIG9mIHRoZSBmcmFtZSBvbiB0aGUgc3RhY2sgKi8KK3N0cnVjdCBzdGFja19mcmFtZSB7CisJc3RydWN0IHN0YWNrX2ZyYW1lICpuZXh0X2ZyYW1lOworCXVuc2lnbmVkIGxvbmcgcmV0dXJuX2FkZHJlc3M7Cit9OworCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcKK3ByaW50X2NvbnRleHRfc3RhY2soc3RydWN0IHRocmVhZF9pbmZvICp0aW5mbywKKwkJdW5zaWduZWQgbG9uZyAqc3RhY2ssIHVuc2lnbmVkIGxvbmcgYnAsCisJCWNvbnN0IHN0cnVjdCBzdGFja3RyYWNlX29wcyAqb3BzLCB2b2lkICpkYXRhLAorCQl1bnNpZ25lZCBsb25nICplbmQpCit7CisJc3RydWN0IHN0YWNrX2ZyYW1lICpmcmFtZSA9IChzdHJ1Y3Qgc3RhY2tfZnJhbWUgKilicDsKKworCXdoaWxlICh2YWxpZF9zdGFja19wdHIodGluZm8sIHN0YWNrLCBzaXplb2YoKnN0YWNrKSwgZW5kKSkgeworCQl1bnNpZ25lZCBsb25nIGFkZHI7CisKKwkJYWRkciA9ICpzdGFjazsKKwkJaWYgKF9fa2VybmVsX3RleHRfYWRkcmVzcyhhZGRyKSkgeworCQkJaWYgKCh1bnNpZ25lZCBsb25nKSBzdGFjayA9PSBicCArIHNpemVvZihsb25nKSkgeworCQkJCW9wcy0+YWRkcmVzcyhkYXRhLCBhZGRyLCAxKTsKKwkJCQlmcmFtZSA9IGZyYW1lLT5uZXh0X2ZyYW1lOworCQkJCWJwID0gKHVuc2lnbmVkIGxvbmcpIGZyYW1lOworCQkJfSBlbHNlIHsKKwkJCQlvcHMtPmFkZHJlc3MoZGF0YSwgYWRkciwgYnAgPT0gMCk7CisJCQl9CisJCX0KKwkJc3RhY2srKzsKKwl9CisJcmV0dXJuIGJwOworfQorCit2b2lkIGR1bXBfdHJhY2Uoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCBzdHJ1Y3QgcHRfcmVncyAqcmVncywKKwkJdW5zaWduZWQgbG9uZyAqc3RhY2ssIHVuc2lnbmVkIGxvbmcgYnAsCisJCWNvbnN0IHN0cnVjdCBzdGFja3RyYWNlX29wcyAqb3BzLCB2b2lkICpkYXRhKQoreworCWlmICghdGFzaykKKwkJdGFzayA9IGN1cnJlbnQ7CisKKwlpZiAoIXN0YWNrKSB7CisJCXVuc2lnbmVkIGxvbmcgZHVtbXk7CisJCXN0YWNrID0gJmR1bW15OworCQlpZiAodGFzayAmJiB0YXNrICE9IGN1cnJlbnQpCisJCQlzdGFjayA9ICh1bnNpZ25lZCBsb25nICopdGFzay0+dGhyZWFkLnNwOworCX0KKworI2lmZGVmIENPTkZJR19GUkFNRV9QT0lOVEVSCisJaWYgKCFicCkgeworCQlpZiAodGFzayA9PSBjdXJyZW50KSB7CisJCQkvKiBHcmFiIGJwIHJpZ2h0IGZyb20gb3VyIHJlZ3MgKi8KKwkJCWdldF9icChicCk7CisJCX0gZWxzZSB7CisJCQkvKiBicCBpcyB0aGUgbGFzdCByZWcgcHVzaGVkIGJ5IHN3aXRjaF90byAqLworCQkJYnAgPSAqKHVuc2lnbmVkIGxvbmcgKikgdGFzay0+dGhyZWFkLnNwOworCQl9CisJfQorI2VuZGlmCisKKwlmb3IgKDs7KSB7CisJCXN0cnVjdCB0aHJlYWRfaW5mbyAqY29udGV4dDsKKworCQljb250ZXh0ID0gKHN0cnVjdCB0aHJlYWRfaW5mbyAqKQorCQkJKCh1bnNpZ25lZCBsb25nKXN0YWNrICYgKH4oVEhSRUFEX1NJWkUgLSAxKSkpOworCQlicCA9IHByaW50X2NvbnRleHRfc3RhY2soY29udGV4dCwgc3RhY2ssIGJwLCBvcHMsIGRhdGEsIE5VTEwpOworCisJCXN0YWNrID0gKHVuc2lnbmVkIGxvbmcgKiljb250ZXh0LT5wcmV2aW91c19lc3A7CisJCWlmICghc3RhY2spCisJCQlicmVhazsKKwkJaWYgKG9wcy0+c3RhY2soZGF0YSwgIklSUSIpIDwgMCkKKwkJCWJyZWFrOworCQl0b3VjaF9ubWlfd2F0Y2hkb2coKTsKKwl9Cit9CitFWFBPUlRfU1lNQk9MKGR1bXBfdHJhY2UpOworCitzdGF0aWMgdm9pZAorcHJpbnRfdHJhY2Vfd2FybmluZ19zeW1ib2wodm9pZCAqZGF0YSwgY2hhciAqbXNnLCB1bnNpZ25lZCBsb25nIHN5bWJvbCkKK3sKKwlwcmludGsoZGF0YSk7CisJcHJpbnRfc3ltYm9sKG1zZywgc3ltYm9sKTsKKwlwcmludGsoIlxuIik7Cit9CisKK3N0YXRpYyB2b2lkIHByaW50X3RyYWNlX3dhcm5pbmcodm9pZCAqZGF0YSwgY2hhciAqbXNnKQoreworCXByaW50aygiJXMlc1xuIiwgKGNoYXIgKilkYXRhLCBtc2cpOworfQorCitzdGF0aWMgaW50IHByaW50X3RyYWNlX3N0YWNrKHZvaWQgKmRhdGEsIGNoYXIgKm5hbWUpCit7CisJcHJpbnRrKCIlcyA8JXM+ICIsIChjaGFyICopZGF0YSwgbmFtZSk7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBQcmludCBvbmUgYWRkcmVzcy9zeW1ib2wgZW50cmllcyBwZXIgbGluZS4KKyAqLworc3RhdGljIHZvaWQgcHJpbnRfdHJhY2VfYWRkcmVzcyh2b2lkICpkYXRhLCB1bnNpZ25lZCBsb25nIGFkZHIsIGludCByZWxpYWJsZSkKK3sKKwl0b3VjaF9ubWlfd2F0Y2hkb2coKTsKKwlwcmludGsoZGF0YSk7CisJcHJpbnRrX2FkZHJlc3MoYWRkciwgcmVsaWFibGUpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHN0YWNrdHJhY2Vfb3BzIHByaW50X3RyYWNlX29wcyA9IHsKKwkud2FybmluZyA9IHByaW50X3RyYWNlX3dhcm5pbmcsCisJLndhcm5pbmdfc3ltYm9sID0gcHJpbnRfdHJhY2Vfd2FybmluZ19zeW1ib2wsCisJLnN0YWNrID0gcHJpbnRfdHJhY2Vfc3RhY2ssCisJLmFkZHJlc3MgPSBwcmludF90cmFjZV9hZGRyZXNzLAorfTsKKworc3RhdGljIHZvaWQKK3Nob3dfdHJhY2VfbG9nX2x2bChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIHN0cnVjdCBwdF9yZWdzICpyZWdzLAorCQl1bnNpZ25lZCBsb25nICpzdGFjaywgdW5zaWduZWQgbG9uZyBicCwgY2hhciAqbG9nX2x2bCkKK3sKKwlwcmludGsoIiVzQ2FsbCBUcmFjZTpcbiIsIGxvZ19sdmwpOworCWR1bXBfdHJhY2UodGFzaywgcmVncywgc3RhY2ssIGJwLCAmcHJpbnRfdHJhY2Vfb3BzLCBsb2dfbHZsKTsKK30KKwordm9pZCBzaG93X3RyYWNlKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsCisJCXVuc2lnbmVkIGxvbmcgKnN0YWNrLCB1bnNpZ25lZCBsb25nIGJwKQoreworCXNob3dfdHJhY2VfbG9nX2x2bCh0YXNrLCByZWdzLCBzdGFjaywgYnAsICIiKTsKK30KKworc3RhdGljIHZvaWQKK3Nob3dfc3RhY2tfbG9nX2x2bChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIHN0cnVjdCBwdF9yZWdzICpyZWdzLAorCQl1bnNpZ25lZCBsb25nICpzcCwgdW5zaWduZWQgbG9uZyBicCwgY2hhciAqbG9nX2x2bCkKK3sKKwl1bnNpZ25lZCBsb25nICpzdGFjazsKKwlpbnQgaTsKKworCWlmIChzcCA9PSBOVUxMKSB7CisJCWlmICh0YXNrKQorCQkJc3AgPSAodW5zaWduZWQgbG9uZyAqKXRhc2stPnRocmVhZC5zcDsKKwkJZWxzZQorCQkJc3AgPSAodW5zaWduZWQgbG9uZyAqKSZzcDsKKwl9CisKKwlzdGFjayA9IHNwOworCWZvciAoaSA9IDA7IGkgPCBrc3RhY2tfZGVwdGhfdG9fcHJpbnQ7IGkrKykgeworCQlpZiAoa3N0YWNrX2VuZChzdGFjaykpCisJCQlicmVhazsKKwkJaWYgKGkgJiYgKChpICUgU1RBQ0tTTE9UU19QRVJfTElORSkgPT0gMCkpCisJCQlwcmludGsoIlxuJXMiLCBsb2dfbHZsKTsKKwkJcHJpbnRrKCIgJTA4bHgiLCAqc3RhY2srKyk7CisJCXRvdWNoX25taV93YXRjaGRvZygpOworCX0KKwlwcmludGsoIlxuIik7CisJc2hvd190cmFjZV9sb2dfbHZsKHRhc2ssIHJlZ3MsIHNwLCBicCwgbG9nX2x2bCk7Cit9CisKK3ZvaWQgc2hvd19zdGFjayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIHVuc2lnbmVkIGxvbmcgKnNwKQoreworCXNob3dfc3RhY2tfbG9nX2x2bCh0YXNrLCBOVUxMLCBzcCwgMCwgIiIpOworfQorCisvKgorICogVGhlIGFyY2hpdGVjdHVyZS1pbmRlcGVuZGVudCBkdW1wX3N0YWNrIGdlbmVyYXRvcgorICovCit2b2lkIGR1bXBfc3RhY2sodm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIGJwID0gMDsKKwl1bnNpZ25lZCBsb25nIHN0YWNrOworCisjaWZkZWYgQ09ORklHX0ZSQU1FX1BPSU5URVIKKwlpZiAoIWJwKQorCQlnZXRfYnAoYnApOworI2VuZGlmCisKKwlwcmludGsoIlBpZDogJWQsIGNvbW06ICUuMjBzICVzICVzICUuKnNcbiIsCisJCWN1cnJlbnQtPnBpZCwgY3VycmVudC0+Y29tbSwgcHJpbnRfdGFpbnRlZCgpLAorCQlpbml0X3V0c25hbWUoKS0+cmVsZWFzZSwKKwkJKGludClzdHJjc3BuKGluaXRfdXRzbmFtZSgpLT52ZXJzaW9uLCAiICIpLAorCQlpbml0X3V0c25hbWUoKS0+dmVyc2lvbik7CisJc2hvd190cmFjZShOVUxMLCBOVUxMLCAmc3RhY2ssIGJwKTsKK30KKworRVhQT1JUX1NZTUJPTChkdW1wX3N0YWNrKTsKKwordm9pZCBzaG93X3JlZ2lzdGVycyhzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlpbnQgaTsKKworCXByaW50X21vZHVsZXMoKTsKKwlfX3Nob3dfcmVncyhyZWdzLCAwKTsKKworCXByaW50ayhLRVJOX0VNRVJHICJQcm9jZXNzICUuKnMgKHBpZDogJWQsIHRpPSVwIHRhc2s9JXAgdGFzay50aT0lcClcbiIsCisJCVRBU0tfQ09NTV9MRU4sIGN1cnJlbnQtPmNvbW0sIHRhc2tfcGlkX25yKGN1cnJlbnQpLAorCQljdXJyZW50X3RocmVhZF9pbmZvKCksIGN1cnJlbnQsIHRhc2tfdGhyZWFkX2luZm8oY3VycmVudCkpOworCS8qCisJICogV2hlbiBpbi1rZXJuZWwsIHdlIGFsc28gcHJpbnQgb3V0IHRoZSBzdGFjayBhbmQgY29kZSBhdCB0aGUKKwkgKiB0aW1lIG9mIHRoZSBmYXVsdC4uCisJICovCisJaWYgKCF1c2VyX21vZGVfdm0ocmVncykpIHsKKwkJdW5zaWduZWQgaW50IGNvZGVfcHJvbG9ndWUgPSBjb2RlX2J5dGVzICogNDMgLyA2NDsKKwkJdW5zaWduZWQgaW50IGNvZGVfbGVuID0gY29kZV9ieXRlczsKKwkJdW5zaWduZWQgY2hhciBjOworCQl1OCAqaXA7CisKKwkJcHJpbnRrKEtFUk5fRU1FUkcgIlN0YWNrOlxuIik7CisJCXNob3dfc3RhY2tfbG9nX2x2bChOVUxMLCByZWdzLCAmcmVncy0+c3AsCisJCQkJMCwgS0VSTl9FTUVSRyk7CisKKwkJcHJpbnRrKEtFUk5fRU1FUkcgIkNvZGU6ICIpOworCisJCWlwID0gKHU4ICopcmVncy0+aXAgLSBjb2RlX3Byb2xvZ3VlOworCQlpZiAoaXAgPCAodTggKilQQUdFX09GRlNFVCB8fCBwcm9iZV9rZXJuZWxfYWRkcmVzcyhpcCwgYykpIHsKKwkJCS8qIHRyeSBzdGFydGluZyBhdCBJUCAqLworCQkJaXAgPSAodTggKilyZWdzLT5pcDsKKwkJCWNvZGVfbGVuID0gY29kZV9sZW4gLSBjb2RlX3Byb2xvZ3VlICsgMTsKKwkJfQorCQlmb3IgKGkgPSAwOyBpIDwgY29kZV9sZW47IGkrKywgaXArKykgeworCQkJaWYgKGlwIDwgKHU4ICopUEFHRV9PRkZTRVQgfHwKKwkJCQkJcHJvYmVfa2VybmVsX2FkZHJlc3MoaXAsIGMpKSB7CisJCQkJcHJpbnRrKCIgQmFkIEVJUCB2YWx1ZS4iKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWlmIChpcCA9PSAodTggKilyZWdzLT5pcCkKKwkJCQlwcmludGsoIjwlMDJ4PiAiLCBjKTsKKwkJCWVsc2UKKwkJCQlwcmludGsoIiUwMnggIiwgYyk7CisJCX0KKwl9CisJcHJpbnRrKCJcbiIpOworfQorCitpbnQgaXNfdmFsaWRfYnVnYWRkcih1bnNpZ25lZCBsb25nIGlwKQoreworCXVuc2lnbmVkIHNob3J0IHVkMjsKKworCWlmIChpcCA8IFBBR0VfT0ZGU0VUKQorCQlyZXR1cm4gMDsKKwlpZiAocHJvYmVfa2VybmVsX2FkZHJlc3MoKHVuc2lnbmVkIHNob3J0ICopaXAsIHVkMikpCisJCXJldHVybiAwOworCisJcmV0dXJuIHVkMiA9PSAweDBiMGY7Cit9CisKK3N0YXRpYyByYXdfc3BpbmxvY2tfdCBkaWVfbG9jayA9IF9fUkFXX1NQSU5fTE9DS19VTkxPQ0tFRDsKK3N0YXRpYyBpbnQgZGllX293bmVyID0gLTE7CitzdGF0aWMgdW5zaWduZWQgaW50IGRpZV9uZXN0X2NvdW50OworCit1bnNpZ25lZCBfX2twcm9iZXMgbG9uZyBvb3BzX2JlZ2luKHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCW9vcHNfZW50ZXIoKTsKKworCWlmIChkaWVfb3duZXIgIT0gcmF3X3NtcF9wcm9jZXNzb3JfaWQoKSkgeworCQljb25zb2xlX3ZlcmJvc2UoKTsKKwkJcmF3X2xvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwkJX19yYXdfc3Bpbl9sb2NrKCZkaWVfbG9jayk7CisJCWRpZV9vd25lciA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKKwkJZGllX25lc3RfY291bnQgPSAwOworCQlidXN0X3NwaW5sb2NrcygxKTsKKwl9IGVsc2UgeworCQlyYXdfbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCX0KKwlkaWVfbmVzdF9jb3VudCsrOworCXJldHVybiBmbGFnczsKK30KKwordm9pZCBfX2twcm9iZXMgb29wc19lbmQodW5zaWduZWQgbG9uZyBmbGFncywgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIGludCBzaWducikKK3sKKwlidXN0X3NwaW5sb2NrcygwKTsKKwlkaWVfb3duZXIgPSAtMTsKKwlhZGRfdGFpbnQoVEFJTlRfRElFKTsKKwlfX3Jhd19zcGluX3VubG9jaygmZGllX2xvY2spOworCXJhd19sb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisKKwlpZiAoIXJlZ3MpCisJCXJldHVybjsKKworCWlmIChrZXhlY19zaG91bGRfY3Jhc2goY3VycmVudCkpCisJCWNyYXNoX2tleGVjKHJlZ3MpOworCWlmIChpbl9pbnRlcnJ1cHQoKSkKKwkJcGFuaWMoIkZhdGFsIGV4Y2VwdGlvbiBpbiBpbnRlcnJ1cHQiKTsKKwlpZiAocGFuaWNfb25fb29wcykKKwkJcGFuaWMoIkZhdGFsIGV4Y2VwdGlvbiIpOworCW9vcHNfZXhpdCgpOworCWRvX2V4aXQoc2lnbnIpOworfQorCitpbnQgX19rcHJvYmVzIF9fZGllKGNvbnN0IGNoYXIgKnN0ciwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIGxvbmcgZXJyKQoreworCXVuc2lnbmVkIHNob3J0IHNzOworCXVuc2lnbmVkIGxvbmcgc3A7CisKKwlwcmludGsoS0VSTl9FTUVSRyAiJXM6ICUwNGx4IFsjJWRdICIsIHN0ciwgZXJyICYgMHhmZmZmLCArK2RpZV9jb3VudGVyKTsKKyNpZmRlZiBDT05GSUdfUFJFRU1QVAorCXByaW50aygiUFJFRU1QVCAiKTsKKyNlbmRpZgorI2lmZGVmIENPTkZJR19TTVAKKwlwcmludGsoIlNNUCAiKTsKKyNlbmRpZgorI2lmZGVmIENPTkZJR19ERUJVR19QQUdFQUxMT0MKKwlwcmludGsoIkRFQlVHX1BBR0VBTExPQyIpOworI2VuZGlmCisJcHJpbnRrKCJcbiIpOworCXN5c2ZzX3ByaW50a19sYXN0X2ZpbGUoKTsKKwlpZiAobm90aWZ5X2RpZShESUVfT09QUywgc3RyLCByZWdzLCBlcnIsCisJCQljdXJyZW50LT50aHJlYWQudHJhcF9ubywgU0lHU0VHVikgPT0gTk9USUZZX1NUT1ApCisJCXJldHVybiAxOworCisJc2hvd19yZWdpc3RlcnMocmVncyk7CisJLyogRXhlY3V0aXZlIHN1bW1hcnkgaW4gY2FzZSB0aGUgb29wcyBzY3JvbGxlZCBhd2F5ICovCisJc3AgPSAodW5zaWduZWQgbG9uZykgKCZyZWdzLT5zcCk7CisJc2F2ZXNlZ21lbnQoc3MsIHNzKTsKKwlpZiAodXNlcl9tb2RlKHJlZ3MpKSB7CisJCXNwID0gcmVncy0+c3A7CisJCXNzID0gcmVncy0+c3MgJiAweGZmZmY7CisJfQorCXByaW50ayhLRVJOX0VNRVJHICJFSVA6IFs8JTA4bHg+XSAiLCByZWdzLT5pcCk7CisJcHJpbnRfc3ltYm9sKCIlcyIsIHJlZ3MtPmlwKTsKKwlwcmludGsoIiBTUzpFU1AgJTA0eDolMDhseFxuIiwgc3MsIHNwKTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFRoaXMgaXMgZ29uZSB0aHJvdWdoIHdoZW4gc29tZXRoaW5nIGluIHRoZSBrZXJuZWwgaGFzIGRvbmUgc29tZXRoaW5nIGJhZAorICogYW5kIGlzIGFib3V0IHRvIGJlIHRlcm1pbmF0ZWQ6CisgKi8KK3ZvaWQgZGllKGNvbnN0IGNoYXIgKnN0ciwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIGxvbmcgZXJyKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3MgPSBvb3BzX2JlZ2luKCk7CisKKwlpZiAoZGllX25lc3RfY291bnQgPCAzKSB7CisJCXJlcG9ydF9idWcocmVncy0+aXAsIHJlZ3MpOworCisJCWlmIChfX2RpZShzdHIsIHJlZ3MsIGVycikpCisJCQlyZWdzID0gTlVMTDsKKwl9IGVsc2UgeworCQlwcmludGsoS0VSTl9FTUVSRyAiUmVjdXJzaXZlIGRpZSgpIGZhaWx1cmUsIG91dHB1dCBzdXBwcmVzc2VkXG4iKTsKKwl9CisKKwlvb3BzX2VuZChmbGFncywgcmVncywgU0lHU0VHVik7Cit9CisKK3N0YXRpYyBERUZJTkVfU1BJTkxPQ0sobm1pX3ByaW50X2xvY2spOworCit2b2lkIG5vdHJhY2UgX19rcHJvYmVzCitkaWVfbm1pKGNoYXIgKnN0ciwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIGludCBkb19wYW5pYykKK3sKKwlpZiAobm90aWZ5X2RpZShESUVfTk1JV0FUQ0hET0csIHN0ciwgcmVncywgMCwgMiwgU0lHSU5UKSA9PSBOT1RJRllfU1RPUCkKKwkJcmV0dXJuOworCisJc3Bpbl9sb2NrKCZubWlfcHJpbnRfbG9jayk7CisJLyoKKwkqIFdlIGFyZSBpbiB0cm91YmxlIGFueXdheSwgbGV0cyBhdCBsZWFzdCB0cnkKKwkqIHRvIGdldCBhIG1lc3NhZ2Ugb3V0OgorCSovCisJYnVzdF9zcGlubG9ja3MoMSk7CisJcHJpbnRrKEtFUk5fRU1FUkcgIiVzIiwgc3RyKTsKKwlwcmludGsoIiBvbiBDUFUlZCwgaXAgJTA4bHgsIHJlZ2lzdGVyczpcbiIsCisJCXNtcF9wcm9jZXNzb3JfaWQoKSwgcmVncy0+aXApOworCXNob3dfcmVnaXN0ZXJzKHJlZ3MpOworCWlmIChkb19wYW5pYykKKwkJcGFuaWMoIk5vbiBtYXNrYWJsZSBpbnRlcnJ1cHQiKTsKKwljb25zb2xlX3NpbGVudCgpOworCXNwaW5fdW5sb2NrKCZubWlfcHJpbnRfbG9jayk7CisJYnVzdF9zcGlubG9ja3MoMCk7CisKKwkvKgorCSAqIElmIHdlIGFyZSBpbiBrZXJuZWwgd2UgYXJlIHByb2JhYmx5IG5lc3RlZCB1cCBwcmV0dHkgYmFkCisJICogYW5kIG1pZ2h0IGFzd2VsbCBnZXQgb3V0IG5vdyB3aGlsZSB3ZSBzdGlsbCBjYW46CisJICovCisJaWYgKCF1c2VyX21vZGVfdm0ocmVncykpIHsKKwkJY3VycmVudC0+dGhyZWFkLnRyYXBfbm8gPSAyOworCQljcmFzaF9rZXhlYyhyZWdzKTsKKwl9CisKKwlkb19leGl0KFNJR1NFR1YpOworfQorCitzdGF0aWMgaW50IF9faW5pdCBvb3BzX3NldHVwKGNoYXIgKnMpCit7CisJaWYgKCFzKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAoIXN0cmNtcChzLCAicGFuaWMiKSkKKwkJcGFuaWNfb25fb29wcyA9IDE7CisJcmV0dXJuIDA7Cit9CitlYXJseV9wYXJhbSgib29wcyIsIG9vcHNfc2V0dXApOworCitzdGF0aWMgaW50IF9faW5pdCBrc3RhY2tfc2V0dXAoY2hhciAqcykKK3sKKwlpZiAoIXMpCisJCXJldHVybiAtRUlOVkFMOworCWtzdGFja19kZXB0aF90b19wcmludCA9IHNpbXBsZV9zdHJ0b3VsKHMsIE5VTEwsIDApOworCXJldHVybiAwOworfQorZWFybHlfcGFyYW0oImtzdGFjayIsIGtzdGFja19zZXR1cCk7CisKK3N0YXRpYyBpbnQgX19pbml0IGNvZGVfYnl0ZXNfc2V0dXAoY2hhciAqcykKK3sKKwljb2RlX2J5dGVzID0gc2ltcGxlX3N0cnRvdWwocywgTlVMTCwgMCk7CisJaWYgKGNvZGVfYnl0ZXMgPiA4MTkyKQorCQljb2RlX2J5dGVzID0gODE5MjsKKworCXJldHVybiAxOworfQorX19zZXR1cCgiY29kZV9ieXRlcz0iLCBjb2RlX2J5dGVzX3NldHVwKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9kdW1wc3RhY2tfNjQuYyBiL2FyY2gveDg2L2tlcm5lbC9kdW1wc3RhY2tfNjQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NmE1ZGI3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC94ODYva2VybmVsL2R1bXBzdGFja182NC5jCkBAIC0wLDAgKzEsNTc1IEBACisvKgorICogIENvcHlyaWdodCAoQykgMTk5MSwgMTk5MiAgTGludXMgVG9ydmFsZHMKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDAsIDIwMDEsIDIwMDIgQW5kaSBLbGVlbiwgU3VTRSBMYWJzCisgKi8KKyNpbmNsdWRlIDxsaW51eC9rYWxsc3ltcy5oPgorI2luY2x1ZGUgPGxpbnV4L2twcm9iZXMuaD4KKyNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CisjaW5jbHVkZSA8bGludXgvdXRzbmFtZS5oPgorI2luY2x1ZGUgPGxpbnV4L2hhcmRpcnEuaD4KKyNpbmNsdWRlIDxsaW51eC9rZGVidWcuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9wdHJhY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXhlYy5oPgorI2luY2x1ZGUgPGxpbnV4L2J1Zy5oPgorI2luY2x1ZGUgPGxpbnV4L25taS5oPgorI2luY2x1ZGUgPGxpbnV4L3N5c2ZzLmg+CisKKyNpbmNsdWRlIDxhc20vc3RhY2t0cmFjZS5oPgorCisjZGVmaW5lIFNUQUNLU0xPVFNfUEVSX0xJTkUgNAorI2RlZmluZSBnZXRfYnAoYnApIGFzbSgibW92cSAlJXJicCwgJTAiIDogIj1yIiAoYnApIDopCisKK2ludCBwYW5pY19vbl91bnJlY292ZXJlZF9ubWk7CitpbnQga3N0YWNrX2RlcHRoX3RvX3ByaW50ID0gMyAqIFNUQUNLU0xPVFNfUEVSX0xJTkU7CitzdGF0aWMgdW5zaWduZWQgaW50IGNvZGVfYnl0ZXMgPSA2NDsKK3N0YXRpYyBpbnQgZGllX2NvdW50ZXI7CisKK3ZvaWQgcHJpbnRrX2FkZHJlc3ModW5zaWduZWQgbG9uZyBhZGRyZXNzLCBpbnQgcmVsaWFibGUpCit7CisJcHJpbnRrKCIgWzwlcD5dICVzJXBTXG4iLCAodm9pZCAqKSBhZGRyZXNzLAorCQkJcmVsaWFibGUgPyAiIiA6ICI/ICIsICh2b2lkICopIGFkZHJlc3MpOworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyAqaW5fZXhjZXB0aW9uX3N0YWNrKHVuc2lnbmVkIGNwdSwgdW5zaWduZWQgbG9uZyBzdGFjaywKKwkJCQkJdW5zaWduZWQgKnVzZWRwLCBjaGFyICoqaWRwKQoreworCXN0YXRpYyBjaGFyIGlkc1tdWzhdID0geworCQlbREVCVUdfU1RBQ0sgLSAxXSA9ICIjREIiLAorCQlbTk1JX1NUQUNLIC0gMV0gPSAiTk1JIiwKKwkJW0RPVUJMRUZBVUxUX1NUQUNLIC0gMV0gPSAiI0RGIiwKKwkJW1NUQUNLRkFVTFRfU1RBQ0sgLSAxXSA9ICIjU1MiLAorCQlbTUNFX1NUQUNLIC0gMV0gPSAiI01DIiwKKyNpZiBERUJVR19TVEtTWiA+IEVYQ0VQVElPTl9TVEtTWgorCQlbTl9FWENFUFRJT05fU1RBQ0tTIC4uLgorCQkJTl9FWENFUFRJT05fU1RBQ0tTICsgREVCVUdfU1RLU1ogLyBFWENFUFRJT05fU1RLU1ogLSAyXSA9ICIjREJbP10iCisjZW5kaWYKKwl9OworCXVuc2lnbmVkIGs7CisKKwkvKgorCSAqIEl0ZXJhdGUgb3ZlciBhbGwgZXhjZXB0aW9uIHN0YWNrcywgYW5kIGZpZ3VyZSBvdXQgd2hldGhlcgorCSAqICdzdGFjaycgaXMgaW4gb25lIG9mIHRoZW06CisJICovCisJZm9yIChrID0gMDsgayA8IE5fRVhDRVBUSU9OX1NUQUNLUzsgaysrKSB7CisJCXVuc2lnbmVkIGxvbmcgZW5kID0gcGVyX2NwdShvcmlnX2lzdCwgY3B1KS5pc3Rba107CisJCS8qCisJCSAqIElzICdzdGFjaycgYWJvdmUgdGhpcyBleGNlcHRpb24gZnJhbWUncyBlbmQ/CisJCSAqIElmIHllcyB0aGVuIHNraXAgdG8gdGhlIG5leHQgZnJhbWUuCisJCSAqLworCQlpZiAoc3RhY2sgPj0gZW5kKQorCQkJY29udGludWU7CisJCS8qCisJCSAqIElzICdzdGFjaycgYWJvdmUgdGhpcyBleGNlcHRpb24gZnJhbWUncyBzdGFydCBhZGRyZXNzPworCQkgKiBJZiB5ZXMgdGhlbiB3ZSBmb3VuZCB0aGUgcmlnaHQgZnJhbWUuCisJCSAqLworCQlpZiAoc3RhY2sgPj0gZW5kIC0gRVhDRVBUSU9OX1NUS1NaKSB7CisJCQkvKgorCQkJICogTWFrZSBzdXJlIHdlIG9ubHkgaXRlcmF0ZSB0aHJvdWdoIGFuIGV4Y2VwdGlvbgorCQkJICogc3RhY2sgb25jZS4gSWYgaXQgY29tZXMgdXAgZm9yIHRoZSBzZWNvbmQgdGltZQorCQkJICogdGhlbiB0aGVyZSdzIHNvbWV0aGluZyB3cm9uZyBnb2luZyBvbiAtIGp1c3QKKwkJCSAqIGJyZWFrIG91dCBhbmQgcmV0dXJuIE5VTEw6CisJCQkgKi8KKwkJCWlmICgqdXNlZHAgJiAoMVUgPDwgaykpCisJCQkJYnJlYWs7CisJCQkqdXNlZHAgfD0gMVUgPDwgazsKKwkJCSppZHAgPSBpZHNba107CisJCQlyZXR1cm4gKHVuc2lnbmVkIGxvbmcgKillbmQ7CisJCX0KKwkJLyoKKwkJICogSWYgdGhpcyBpcyBhIGRlYnVnIHN0YWNrLCBhbmQgaWYgaXQgaGFzIGEgbGFyZ2VyIHNpemUgdGhhbgorCQkgKiB0aGUgdXN1YWwgZXhjZXB0aW9uIHN0YWNrcywgdGhlbiAnc3RhY2snIG1pZ2h0IHN0aWxsCisJCSAqIGJlIHdpdGhpbiB0aGUgbG93ZXIgcG9ydGlvbiBvZiB0aGUgZGVidWcgc3RhY2s6CisJCSAqLworI2lmIERFQlVHX1NUS1NaID4gRVhDRVBUSU9OX1NUS1NaCisJCWlmIChrID09IERFQlVHX1NUQUNLIC0gMSAmJiBzdGFjayA+PSBlbmQgLSBERUJVR19TVEtTWikgeworCQkJdW5zaWduZWQgaiA9IE5fRVhDRVBUSU9OX1NUQUNLUyAtIDE7CisKKwkJCS8qCisJCQkgKiBCbGFjayBtYWdpYy4gQSBsYXJnZSBkZWJ1ZyBzdGFjayBpcyBjb21wb3NlZCBvZgorCQkJICogbXVsdGlwbGUgZXhjZXB0aW9uIHN0YWNrIGVudHJpZXMsIHdoaWNoIHdlCisJCQkgKiBpdGVyYXRlIHRocm91Z2ggbm93LiBEb250IGxvb2s6CisJCQkgKi8KKwkJCWRvIHsKKwkJCQkrK2o7CisJCQkJZW5kIC09IEVYQ0VQVElPTl9TVEtTWjsKKwkJCQlpZHNbal1bNF0gPSAnMScgKyAoaiAtIE5fRVhDRVBUSU9OX1NUQUNLUyk7CisJCQl9IHdoaWxlIChzdGFjayA8IGVuZCAtIEVYQ0VQVElPTl9TVEtTWik7CisJCQlpZiAoKnVzZWRwICYgKDFVIDw8IGopKQorCQkJCWJyZWFrOworCQkJKnVzZWRwIHw9IDFVIDw8IGo7CisJCQkqaWRwID0gaWRzW2pdOworCQkJcmV0dXJuICh1bnNpZ25lZCBsb25nICopZW5kOworCQl9CisjZW5kaWYKKwl9CisJcmV0dXJuIE5VTEw7Cit9CisKKy8qCisgKiB4ODYtNjQgY2FuIGhhdmUgdXAgdG8gdGhyZWUga2VybmVsIHN0YWNrczoKKyAqIHByb2Nlc3Mgc3RhY2sKKyAqIGludGVycnVwdCBzdGFjaworICogc2V2ZXJlIGV4Y2VwdGlvbiAoZG91YmxlIGZhdWx0LCBubWksIHN0YWNrIGZhdWx0LCBkZWJ1ZywgbWNlKSBoYXJkd2FyZSBzdGFjaworICovCisKK3N0YXRpYyBpbmxpbmUgaW50IHZhbGlkX3N0YWNrX3B0cihzdHJ1Y3QgdGhyZWFkX2luZm8gKnRpbmZvLAorCQkJdm9pZCAqcCwgdW5zaWduZWQgaW50IHNpemUsIHZvaWQgKmVuZCkKK3sKKwl2b2lkICp0ID0gdGluZm87CisJaWYgKGVuZCkgeworCQlpZiAocCA8IGVuZCAmJiBwID49IChlbmQtVEhSRUFEX1NJWkUpKQorCQkJcmV0dXJuIDE7CisJCWVsc2UKKwkJCXJldHVybiAwOworCX0KKwlyZXR1cm4gcCA+IHQgJiYgcCA8IHQgKyBUSFJFQURfU0laRSAtIHNpemU7Cit9CisKKy8qIFRoZSBmb3JtIG9mIHRoZSB0b3Agb2YgdGhlIGZyYW1lIG9uIHRoZSBzdGFjayAqLworc3RydWN0IHN0YWNrX2ZyYW1lIHsKKwlzdHJ1Y3Qgc3RhY2tfZnJhbWUgKm5leHRfZnJhbWU7CisJdW5zaWduZWQgbG9uZyByZXR1cm5fYWRkcmVzczsKK307CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZworcHJpbnRfY29udGV4dF9zdGFjayhzdHJ1Y3QgdGhyZWFkX2luZm8gKnRpbmZvLAorCQl1bnNpZ25lZCBsb25nICpzdGFjaywgdW5zaWduZWQgbG9uZyBicCwKKwkJY29uc3Qgc3RydWN0IHN0YWNrdHJhY2Vfb3BzICpvcHMsIHZvaWQgKmRhdGEsCisJCXVuc2lnbmVkIGxvbmcgKmVuZCkKK3sKKwlzdHJ1Y3Qgc3RhY2tfZnJhbWUgKmZyYW1lID0gKHN0cnVjdCBzdGFja19mcmFtZSAqKWJwOworCisJd2hpbGUgKHZhbGlkX3N0YWNrX3B0cih0aW5mbywgc3RhY2ssIHNpemVvZigqc3RhY2spLCBlbmQpKSB7CisJCXVuc2lnbmVkIGxvbmcgYWRkcjsKKworCQlhZGRyID0gKnN0YWNrOworCQlpZiAoX19rZXJuZWxfdGV4dF9hZGRyZXNzKGFkZHIpKSB7CisJCQlpZiAoKHVuc2lnbmVkIGxvbmcpIHN0YWNrID09IGJwICsgc2l6ZW9mKGxvbmcpKSB7CisJCQkJb3BzLT5hZGRyZXNzKGRhdGEsIGFkZHIsIDEpOworCQkJCWZyYW1lID0gZnJhbWUtPm5leHRfZnJhbWU7CisJCQkJYnAgPSAodW5zaWduZWQgbG9uZykgZnJhbWU7CisJCQl9IGVsc2UgeworCQkJCW9wcy0+YWRkcmVzcyhkYXRhLCBhZGRyLCBicCA9PSAwKTsKKwkJCX0KKwkJfQorCQlzdGFjaysrOworCX0KKwlyZXR1cm4gYnA7Cit9CisKK3ZvaWQgZHVtcF90cmFjZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIHN0cnVjdCBwdF9yZWdzICpyZWdzLAorCQl1bnNpZ25lZCBsb25nICpzdGFjaywgdW5zaWduZWQgbG9uZyBicCwKKwkJY29uc3Qgc3RydWN0IHN0YWNrdHJhY2Vfb3BzICpvcHMsIHZvaWQgKmRhdGEpCit7CisJY29uc3QgdW5zaWduZWQgY3B1ID0gZ2V0X2NwdSgpOworCXVuc2lnbmVkIGxvbmcgKmlycXN0YWNrX2VuZCA9ICh1bnNpZ25lZCBsb25nICopY3B1X3BkYShjcHUpLT5pcnFzdGFja3B0cjsKKwl1bnNpZ25lZCB1c2VkID0gMDsKKwlzdHJ1Y3QgdGhyZWFkX2luZm8gKnRpbmZvOworCisJaWYgKCF0YXNrKQorCQl0YXNrID0gY3VycmVudDsKKworCWlmICghc3RhY2spIHsKKwkJdW5zaWduZWQgbG9uZyBkdW1teTsKKwkJc3RhY2sgPSAmZHVtbXk7CisJCWlmICh0YXNrICYmIHRhc2sgIT0gY3VycmVudCkKKwkJCXN0YWNrID0gKHVuc2lnbmVkIGxvbmcgKil0YXNrLT50aHJlYWQuc3A7CisJfQorCisjaWZkZWYgQ09ORklHX0ZSQU1FX1BPSU5URVIKKwlpZiAoIWJwKSB7CisJCWlmICh0YXNrID09IGN1cnJlbnQpIHsKKwkJCS8qIEdyYWIgYnAgcmlnaHQgZnJvbSBvdXIgcmVncyAqLworCQkJZ2V0X2JwKGJwKTsKKwkJfSBlbHNlIHsKKwkJCS8qIGJwIGlzIHRoZSBsYXN0IHJlZyBwdXNoZWQgYnkgc3dpdGNoX3RvICovCisJCQlicCA9ICoodW5zaWduZWQgbG9uZyAqKSB0YXNrLT50aHJlYWQuc3A7CisJCX0KKwl9CisjZW5kaWYKKworCS8qCisJICogUHJpbnQgZnVuY3Rpb24gY2FsbCBlbnRyaWVzIGluIGFsbCBzdGFja3MsIHN0YXJ0aW5nIGF0IHRoZQorCSAqIGN1cnJlbnQgc3RhY2sgYWRkcmVzcy4gSWYgdGhlIHN0YWNrcyBjb25zaXN0IG9mIG5lc3RlZAorCSAqIGV4Y2VwdGlvbnMKKwkgKi8KKwl0aW5mbyA9IHRhc2tfdGhyZWFkX2luZm8odGFzayk7CisJZm9yICg7OykgeworCQljaGFyICppZDsKKwkJdW5zaWduZWQgbG9uZyAqZXN0YWNrX2VuZDsKKwkJZXN0YWNrX2VuZCA9IGluX2V4Y2VwdGlvbl9zdGFjayhjcHUsICh1bnNpZ25lZCBsb25nKXN0YWNrLAorCQkJCQkJJnVzZWQsICZpZCk7CisKKwkJaWYgKGVzdGFja19lbmQpIHsKKwkJCWlmIChvcHMtPnN0YWNrKGRhdGEsIGlkKSA8IDApCisJCQkJYnJlYWs7CisKKwkJCWJwID0gcHJpbnRfY29udGV4dF9zdGFjayh0aW5mbywgc3RhY2ssIGJwLCBvcHMsCisJCQkJCQkJZGF0YSwgZXN0YWNrX2VuZCk7CisJCQlvcHMtPnN0YWNrKGRhdGEsICI8RU9FPiIpOworCQkJLyoKKwkJCSAqIFdlIGxpbmsgdG8gdGhlIG5leHQgc3RhY2sgdmlhIHRoZQorCQkJICogc2Vjb25kLXRvLWxhc3QgcG9pbnRlciAoaW5kZXggLTIgdG8gZW5kKSBpbiB0aGUKKwkJCSAqIGV4Y2VwdGlvbiBzdGFjazoKKwkJCSAqLworCQkJc3RhY2sgPSAodW5zaWduZWQgbG9uZyAqKSBlc3RhY2tfZW5kWy0yXTsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmIChpcnFzdGFja19lbmQpIHsKKwkJCXVuc2lnbmVkIGxvbmcgKmlycXN0YWNrOworCQkJaXJxc3RhY2sgPSBpcnFzdGFja19lbmQgLQorCQkJCShJUlFTVEFDS1NJWkUgLSA2NCkgLyBzaXplb2YoKmlycXN0YWNrKTsKKworCQkJaWYgKHN0YWNrID49IGlycXN0YWNrICYmIHN0YWNrIDwgaXJxc3RhY2tfZW5kKSB7CisJCQkJaWYgKG9wcy0+c3RhY2soZGF0YSwgIklSUSIpIDwgMCkKKwkJCQkJYnJlYWs7CisJCQkJYnAgPSBwcmludF9jb250ZXh0X3N0YWNrKHRpbmZvLCBzdGFjaywgYnAsCisJCQkJCQlvcHMsIGRhdGEsIGlycXN0YWNrX2VuZCk7CisJCQkJLyoKKwkJCQkgKiBXZSBsaW5rIHRvIHRoZSBuZXh0IHN0YWNrICh3aGljaCB3b3VsZCBiZQorCQkJCSAqIHRoZSBwcm9jZXNzIHN0YWNrIG5vcm1hbGx5KSB0aGUgbGFzdAorCQkJCSAqIHBvaW50ZXIgKGluZGV4IC0xIHRvIGVuZCkgaW4gdGhlIElSUSBzdGFjazoKKwkJCQkgKi8KKwkJCQlzdGFjayA9ICh1bnNpZ25lZCBsb25nICopIChpcnFzdGFja19lbmRbLTFdKTsKKwkJCQlpcnFzdGFja19lbmQgPSBOVUxMOworCQkJCW9wcy0+c3RhY2soZGF0YSwgIkVPSSIpOworCQkJCWNvbnRpbnVlOworCQkJfQorCQl9CisJCWJyZWFrOworCX0KKworCS8qCisJICogVGhpcyBoYW5kbGVzIHRoZSBwcm9jZXNzIHN0YWNrOgorCSAqLworCWJwID0gcHJpbnRfY29udGV4dF9zdGFjayh0aW5mbywgc3RhY2ssIGJwLCBvcHMsIGRhdGEsIE5VTEwpOworCXB1dF9jcHUoKTsKK30KK0VYUE9SVF9TWU1CT0woZHVtcF90cmFjZSk7CisKK3N0YXRpYyB2b2lkCitwcmludF90cmFjZV93YXJuaW5nX3N5bWJvbCh2b2lkICpkYXRhLCBjaGFyICptc2csIHVuc2lnbmVkIGxvbmcgc3ltYm9sKQoreworCXByaW50ayhkYXRhKTsKKwlwcmludF9zeW1ib2wobXNnLCBzeW1ib2wpOworCXByaW50aygiXG4iKTsKK30KKworc3RhdGljIHZvaWQgcHJpbnRfdHJhY2Vfd2FybmluZyh2b2lkICpkYXRhLCBjaGFyICptc2cpCit7CisJcHJpbnRrKCIlcyVzXG4iLCAoY2hhciAqKWRhdGEsIG1zZyk7Cit9CisKK3N0YXRpYyBpbnQgcHJpbnRfdHJhY2Vfc3RhY2sodm9pZCAqZGF0YSwgY2hhciAqbmFtZSkKK3sKKwlwcmludGsoIiVzIDwlcz4gIiwgKGNoYXIgKilkYXRhLCBuYW1lKTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFByaW50IG9uZSBhZGRyZXNzL3N5bWJvbCBlbnRyaWVzIHBlciBsaW5lLgorICovCitzdGF0aWMgdm9pZCBwcmludF90cmFjZV9hZGRyZXNzKHZvaWQgKmRhdGEsIHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IHJlbGlhYmxlKQoreworCXRvdWNoX25taV93YXRjaGRvZygpOworCXByaW50ayhkYXRhKTsKKwlwcmludGtfYWRkcmVzcyhhZGRyLCByZWxpYWJsZSk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc3RhY2t0cmFjZV9vcHMgcHJpbnRfdHJhY2Vfb3BzID0geworCS53YXJuaW5nID0gcHJpbnRfdHJhY2Vfd2FybmluZywKKwkud2FybmluZ19zeW1ib2wgPSBwcmludF90cmFjZV93YXJuaW5nX3N5bWJvbCwKKwkuc3RhY2sgPSBwcmludF90cmFjZV9zdGFjaywKKwkuYWRkcmVzcyA9IHByaW50X3RyYWNlX2FkZHJlc3MsCit9OworCitzdGF0aWMgdm9pZAorc2hvd190cmFjZV9sb2dfbHZsKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsCisJCXVuc2lnbmVkIGxvbmcgKnN0YWNrLCB1bnNpZ25lZCBsb25nIGJwLCBjaGFyICpsb2dfbHZsKQoreworCXByaW50aygiJXNDYWxsIFRyYWNlOlxuIiwgbG9nX2x2bCk7CisJZHVtcF90cmFjZSh0YXNrLCByZWdzLCBzdGFjaywgYnAsICZwcmludF90cmFjZV9vcHMsIGxvZ19sdmwpOworfQorCit2b2lkIHNob3dfdHJhY2Uoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCBzdHJ1Y3QgcHRfcmVncyAqcmVncywKKwkJdW5zaWduZWQgbG9uZyAqc3RhY2ssIHVuc2lnbmVkIGxvbmcgYnApCit7CisJc2hvd190cmFjZV9sb2dfbHZsKHRhc2ssIHJlZ3MsIHN0YWNrLCBicCwgIiIpOworfQorCitzdGF0aWMgdm9pZAorc2hvd19zdGFja19sb2dfbHZsKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsCisJCXVuc2lnbmVkIGxvbmcgKnNwLCB1bnNpZ25lZCBsb25nIGJwLCBjaGFyICpsb2dfbHZsKQoreworCXVuc2lnbmVkIGxvbmcgKnN0YWNrOworCWludCBpOworCWNvbnN0IGludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CisJdW5zaWduZWQgbG9uZyAqaXJxc3RhY2tfZW5kID0KKwkJKHVuc2lnbmVkIGxvbmcgKikgKGNwdV9wZGEoY3B1KS0+aXJxc3RhY2twdHIpOworCXVuc2lnbmVkIGxvbmcgKmlycXN0YWNrID0KKwkJKHVuc2lnbmVkIGxvbmcgKikgKGNwdV9wZGEoY3B1KS0+aXJxc3RhY2twdHIgLSBJUlFTVEFDS1NJWkUpOworCisJLyoKKwkgKiBkZWJ1Z2dpbmcgYWlkOiAic2hvd19zdGFjayhOVUxMLCBOVUxMKTsiIHByaW50cyB0aGUKKwkgKiBiYWNrIHRyYWNlIGZvciB0aGlzIGNwdS4KKwkgKi8KKworCWlmIChzcCA9PSBOVUxMKSB7CisJCWlmICh0YXNrKQorCQkJc3AgPSAodW5zaWduZWQgbG9uZyAqKXRhc2stPnRocmVhZC5zcDsKKwkJZWxzZQorCQkJc3AgPSAodW5zaWduZWQgbG9uZyAqKSZzcDsKKwl9CisKKwlzdGFjayA9IHNwOworCWZvciAoaSA9IDA7IGkgPCBrc3RhY2tfZGVwdGhfdG9fcHJpbnQ7IGkrKykgeworCQlpZiAoc3RhY2sgPj0gaXJxc3RhY2sgJiYgc3RhY2sgPD0gaXJxc3RhY2tfZW5kKSB7CisJCQlpZiAoc3RhY2sgPT0gaXJxc3RhY2tfZW5kKSB7CisJCQkJc3RhY2sgPSAodW5zaWduZWQgbG9uZyAqKSAoaXJxc3RhY2tfZW5kWy0xXSk7CisJCQkJcHJpbnRrKCIgPEVPST4gIik7CisJCQl9CisJCX0gZWxzZSB7CisJCWlmICgoKGxvbmcpIHN0YWNrICYgKFRIUkVBRF9TSVpFLTEpKSA9PSAwKQorCQkJYnJlYWs7CisJCX0KKwkJaWYgKGkgJiYgKChpICUgU1RBQ0tTTE9UU19QRVJfTElORSkgPT0gMCkpCisJCQlwcmludGsoIlxuJXMiLCBsb2dfbHZsKTsKKwkJcHJpbnRrKCIgJTAxNmx4IiwgKnN0YWNrKyspOworCQl0b3VjaF9ubWlfd2F0Y2hkb2coKTsKKwl9CisJcHJpbnRrKCJcbiIpOworCXNob3dfdHJhY2VfbG9nX2x2bCh0YXNrLCByZWdzLCBzcCwgYnAsIGxvZ19sdmwpOworfQorCit2b2lkIHNob3dfc3RhY2soc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCB1bnNpZ25lZCBsb25nICpzcCkKK3sKKwlzaG93X3N0YWNrX2xvZ19sdmwodGFzaywgTlVMTCwgc3AsIDAsICIiKTsKK30KKworLyoKKyAqIFRoZSBhcmNoaXRlY3R1cmUtaW5kZXBlbmRlbnQgZHVtcF9zdGFjayBnZW5lcmF0b3IKKyAqLwordm9pZCBkdW1wX3N0YWNrKHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyBicCA9IDA7CisJdW5zaWduZWQgbG9uZyBzdGFjazsKKworI2lmZGVmIENPTkZJR19GUkFNRV9QT0lOVEVSCisJaWYgKCFicCkKKwkJZ2V0X2JwKGJwKTsKKyNlbmRpZgorCisJcHJpbnRrKCJQaWQ6ICVkLCBjb21tOiAlLjIwcyAlcyAlcyAlLipzXG4iLAorCQljdXJyZW50LT5waWQsIGN1cnJlbnQtPmNvbW0sIHByaW50X3RhaW50ZWQoKSwKKwkJaW5pdF91dHNuYW1lKCktPnJlbGVhc2UsCisJCShpbnQpc3RyY3Nwbihpbml0X3V0c25hbWUoKS0+dmVyc2lvbiwgIiAiKSwKKwkJaW5pdF91dHNuYW1lKCktPnZlcnNpb24pOworCXNob3dfdHJhY2UoTlVMTCwgTlVMTCwgJnN0YWNrLCBicCk7Cit9CitFWFBPUlRfU1lNQk9MKGR1bXBfc3RhY2spOworCit2b2lkIHNob3dfcmVnaXN0ZXJzKHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCWludCBpOworCXVuc2lnbmVkIGxvbmcgc3A7CisJY29uc3QgaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKKwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKmN1ciA9IGNwdV9wZGEoY3B1KS0+cGN1cnJlbnQ7CisKKwlzcCA9IHJlZ3MtPnNwOworCXByaW50aygiQ1BVICVkICIsIGNwdSk7CisJX19zaG93X3JlZ3MocmVncywgMSk7CisJcHJpbnRrKCJQcm9jZXNzICVzIChwaWQ6ICVkLCB0aHJlYWRpbmZvICVwLCB0YXNrICVwKVxuIiwKKwkJY3VyLT5jb21tLCBjdXItPnBpZCwgdGFza190aHJlYWRfaW5mbyhjdXIpLCBjdXIpOworCisJLyoKKwkgKiBXaGVuIGluLWtlcm5lbCwgd2UgYWxzbyBwcmludCBvdXQgdGhlIHN0YWNrIGFuZCBjb2RlIGF0IHRoZQorCSAqIHRpbWUgb2YgdGhlIGZhdWx0Li4KKwkgKi8KKwlpZiAoIXVzZXJfbW9kZShyZWdzKSkgeworCQl1bnNpZ25lZCBpbnQgY29kZV9wcm9sb2d1ZSA9IGNvZGVfYnl0ZXMgKiA0MyAvIDY0OworCQl1bnNpZ25lZCBpbnQgY29kZV9sZW4gPSBjb2RlX2J5dGVzOworCQl1bnNpZ25lZCBjaGFyIGM7CisJCXU4ICppcDsKKworCQlwcmludGsoS0VSTl9FTUVSRyAiU3RhY2s6XG4iKTsKKwkJc2hvd19zdGFja19sb2dfbHZsKE5VTEwsIHJlZ3MsICh1bnNpZ25lZCBsb25nICopc3AsCisJCQkJcmVncy0+YnAsIEtFUk5fRU1FUkcpOworCisJCXByaW50ayhLRVJOX0VNRVJHICJDb2RlOiAiKTsKKworCQlpcCA9ICh1OCAqKXJlZ3MtPmlwIC0gY29kZV9wcm9sb2d1ZTsKKwkJaWYgKGlwIDwgKHU4ICopUEFHRV9PRkZTRVQgfHwgcHJvYmVfa2VybmVsX2FkZHJlc3MoaXAsIGMpKSB7CisJCQkvKiB0cnkgc3RhcnRpbmcgYXQgSVAgKi8KKwkJCWlwID0gKHU4ICopcmVncy0+aXA7CisJCQljb2RlX2xlbiA9IGNvZGVfbGVuIC0gY29kZV9wcm9sb2d1ZSArIDE7CisJCX0KKwkJZm9yIChpID0gMDsgaSA8IGNvZGVfbGVuOyBpKyssIGlwKyspIHsKKwkJCWlmIChpcCA8ICh1OCAqKVBBR0VfT0ZGU0VUIHx8CisJCQkJCXByb2JlX2tlcm5lbF9hZGRyZXNzKGlwLCBjKSkgeworCQkJCXByaW50aygiIEJhZCBSSVAgdmFsdWUuIik7CisJCQkJYnJlYWs7CisJCQl9CisJCQlpZiAoaXAgPT0gKHU4ICopcmVncy0+aXApCisJCQkJcHJpbnRrKCI8JTAyeD4gIiwgYyk7CisJCQllbHNlCisJCQkJcHJpbnRrKCIlMDJ4ICIsIGMpOworCQl9CisJfQorCXByaW50aygiXG4iKTsKK30KKworaW50IGlzX3ZhbGlkX2J1Z2FkZHIodW5zaWduZWQgbG9uZyBpcCkKK3sKKwl1bnNpZ25lZCBzaG9ydCB1ZDI7CisKKwlpZiAoX19jb3B5X2Zyb21fdXNlcigmdWQyLCAoY29uc3Qgdm9pZCBfX3VzZXIgKikgaXAsIHNpemVvZih1ZDIpKSkKKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gdWQyID09IDB4MGIwZjsKK30KKworc3RhdGljIHJhd19zcGlubG9ja190IGRpZV9sb2NrID0gX19SQVdfU1BJTl9MT0NLX1VOTE9DS0VEOworc3RhdGljIGludCBkaWVfb3duZXIgPSAtMTsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgZGllX25lc3RfY291bnQ7CisKK3Vuc2lnbmVkIF9fa3Byb2JlcyBsb25nIG9vcHNfYmVnaW4odm9pZCkKK3sKKwlpbnQgY3B1OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlvb3BzX2VudGVyKCk7CisKKwkvKiByYWN5LCBidXQgYmV0dGVyIHRoYW4gcmlza2luZyBkZWFkbG9jay4gKi8KKwlyYXdfbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCWNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKKwlpZiAoIV9fcmF3X3NwaW5fdHJ5bG9jaygmZGllX2xvY2spKSB7CisJCWlmIChjcHUgPT0gZGllX293bmVyKQorCQkJLyogbmVzdGVkIG9vcHMuIHNob3VsZCBzdG9wIGV2ZW50dWFsbHkgKi87CisJCWVsc2UKKwkJCV9fcmF3X3NwaW5fbG9jaygmZGllX2xvY2spOworCX0KKwlkaWVfbmVzdF9jb3VudCsrOworCWRpZV9vd25lciA9IGNwdTsKKwljb25zb2xlX3ZlcmJvc2UoKTsKKwlidXN0X3NwaW5sb2NrcygxKTsKKwlyZXR1cm4gZmxhZ3M7Cit9CisKK3ZvaWQgX19rcHJvYmVzIG9vcHNfZW5kKHVuc2lnbmVkIGxvbmcgZmxhZ3MsIHN0cnVjdCBwdF9yZWdzICpyZWdzLCBpbnQgc2lnbnIpCit7CisJZGllX293bmVyID0gLTE7CisJYnVzdF9zcGlubG9ja3MoMCk7CisJZGllX25lc3RfY291bnQtLTsKKwlpZiAoIWRpZV9uZXN0X2NvdW50KQorCQkvKiBOZXN0IGNvdW50IHJlYWNoZXMgemVybywgcmVsZWFzZSB0aGUgbG9jay4gKi8KKwkJX19yYXdfc3Bpbl91bmxvY2soJmRpZV9sb2NrKTsKKwlyYXdfbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCWlmICghcmVncykgeworCQlvb3BzX2V4aXQoKTsKKwkJcmV0dXJuOworCX0KKwlpZiAoaW5faW50ZXJydXB0KCkpCisJCXBhbmljKCJGYXRhbCBleGNlcHRpb24gaW4gaW50ZXJydXB0Iik7CisJaWYgKHBhbmljX29uX29vcHMpCisJCXBhbmljKCJGYXRhbCBleGNlcHRpb24iKTsKKwlvb3BzX2V4aXQoKTsKKwlkb19leGl0KHNpZ25yKTsKK30KKworaW50IF9fa3Byb2JlcyBfX2RpZShjb25zdCBjaGFyICpzdHIsIHN0cnVjdCBwdF9yZWdzICpyZWdzLCBsb25nIGVycikKK3sKKwlwcmludGsoS0VSTl9FTUVSRyAiJXM6ICUwNGx4IFsjJWRdICIsIHN0ciwgZXJyICYgMHhmZmZmLCArK2RpZV9jb3VudGVyKTsKKyNpZmRlZiBDT05GSUdfUFJFRU1QVAorCXByaW50aygiUFJFRU1QVCAiKTsKKyNlbmRpZgorI2lmZGVmIENPTkZJR19TTVAKKwlwcmludGsoIlNNUCAiKTsKKyNlbmRpZgorI2lmZGVmIENPTkZJR19ERUJVR19QQUdFQUxMT0MKKwlwcmludGsoIkRFQlVHX1BBR0VBTExPQyIpOworI2VuZGlmCisJcHJpbnRrKCJcbiIpOworCXN5c2ZzX3ByaW50a19sYXN0X2ZpbGUoKTsKKwlpZiAobm90aWZ5X2RpZShESUVfT09QUywgc3RyLCByZWdzLCBlcnIsCisJCQljdXJyZW50LT50aHJlYWQudHJhcF9ubywgU0lHU0VHVikgPT0gTk9USUZZX1NUT1ApCisJCXJldHVybiAxOworCisJc2hvd19yZWdpc3RlcnMocmVncyk7CisJYWRkX3RhaW50KFRBSU5UX0RJRSk7CisJLyogRXhlY3V0aXZlIHN1bW1hcnkgaW4gY2FzZSB0aGUgb29wcyBzY3JvbGxlZCBhd2F5ICovCisJcHJpbnRrKEtFUk5fQUxFUlQgIlJJUCAiKTsKKwlwcmludGtfYWRkcmVzcyhyZWdzLT5pcCwgMSk7CisJcHJpbnRrKCIgUlNQIDwlMDE2bHg+XG4iLCByZWdzLT5zcCk7CisJaWYgKGtleGVjX3Nob3VsZF9jcmFzaChjdXJyZW50KSkKKwkJY3Jhc2hfa2V4ZWMocmVncyk7CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgZGllKGNvbnN0IGNoYXIgKnN0ciwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIGxvbmcgZXJyKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3MgPSBvb3BzX2JlZ2luKCk7CisKKwlpZiAoIXVzZXJfbW9kZShyZWdzKSkKKwkJcmVwb3J0X2J1ZyhyZWdzLT5pcCwgcmVncyk7CisKKwlpZiAoX19kaWUoc3RyLCByZWdzLCBlcnIpKQorCQlyZWdzID0gTlVMTDsKKwlvb3BzX2VuZChmbGFncywgcmVncywgU0lHU0VHVik7Cit9CisKK25vdHJhY2UgX19rcHJvYmVzIHZvaWQKK2RpZV9ubWkoY2hhciAqc3RyLCBzdHJ1Y3QgcHRfcmVncyAqcmVncywgaW50IGRvX3BhbmljKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpZiAobm90aWZ5X2RpZShESUVfTk1JV0FUQ0hET0csIHN0ciwgcmVncywgMCwgMiwgU0lHSU5UKSA9PSBOT1RJRllfU1RPUCkKKwkJcmV0dXJuOworCisJZmxhZ3MgPSBvb3BzX2JlZ2luKCk7CisJLyoKKwkgKiBXZSBhcmUgaW4gdHJvdWJsZSBhbnl3YXksIGxldHMgYXQgbGVhc3QgdHJ5CisJICogdG8gZ2V0IGEgbWVzc2FnZSBvdXQuCisJICovCisJcHJpbnRrKEtFUk5fRU1FUkcgIiVzIiwgc3RyKTsKKwlwcmludGsoIiBvbiBDUFUlZCwgaXAgJTA4bHgsIHJlZ2lzdGVyczpcbiIsCisJCXNtcF9wcm9jZXNzb3JfaWQoKSwgcmVncy0+aXApOworCXNob3dfcmVnaXN0ZXJzKHJlZ3MpOworCWlmIChrZXhlY19zaG91bGRfY3Jhc2goY3VycmVudCkpCisJCWNyYXNoX2tleGVjKHJlZ3MpOworCWlmIChkb19wYW5pYyB8fCBwYW5pY19vbl9vb3BzKQorCQlwYW5pYygiTm9uIG1hc2thYmxlIGludGVycnVwdCIpOworCW9vcHNfZW5kKGZsYWdzLCBOVUxMLCBTSUdCVVMpOworCW5taV9leGl0KCk7CisJbG9jYWxfaXJxX2VuYWJsZSgpOworCWRvX2V4aXQoU0lHQlVTKTsKK30KKworc3RhdGljIGludCBfX2luaXQgb29wc19zZXR1cChjaGFyICpzKQoreworCWlmICghcykKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKCFzdHJjbXAocywgInBhbmljIikpCisJCXBhbmljX29uX29vcHMgPSAxOworCXJldHVybiAwOworfQorZWFybHlfcGFyYW0oIm9vcHMiLCBvb3BzX3NldHVwKTsKKworc3RhdGljIGludCBfX2luaXQga3N0YWNrX3NldHVwKGNoYXIgKnMpCit7CisJaWYgKCFzKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlrc3RhY2tfZGVwdGhfdG9fcHJpbnQgPSBzaW1wbGVfc3RydG91bChzLCBOVUxMLCAwKTsKKwlyZXR1cm4gMDsKK30KK2Vhcmx5X3BhcmFtKCJrc3RhY2siLCBrc3RhY2tfc2V0dXApOworCitzdGF0aWMgaW50IF9faW5pdCBjb2RlX2J5dGVzX3NldHVwKGNoYXIgKnMpCit7CisJY29kZV9ieXRlcyA9IHNpbXBsZV9zdHJ0b3VsKHMsIE5VTEwsIDApOworCWlmIChjb2RlX2J5dGVzID4gODE5MikKKwkJY29kZV9ieXRlcyA9IDgxOTI7CisKKwlyZXR1cm4gMTsKK30KK19fc2V0dXAoImNvZGVfYnl0ZXM9IiwgY29kZV9ieXRlc19zZXR1cCk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvZTgyMC5jIGIvYXJjaC94ODYva2VybmVsL2U4MjAuYwppbmRleCA3OGU2NDJmLi5jZTk3YmYzIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvZTgyMC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9lODIwLmMKQEAgLTEyODIsMTIgKzEyODIsMTAgQEAKIAllODIwX3JlcyA9IHJlczsKIAlmb3IgKGkgPSAwOyBpIDwgZTgyMC5ucl9tYXA7IGkrKykgewogCQllbmQgPSBlODIwLm1hcFtpXS5hZGRyICsgZTgyMC5tYXBbaV0uc2l6ZSAtIDE7Ci0jaWZuZGVmIENPTkZJR19SRVNPVVJDRVNfNjRCSVQKLQkJaWYgKGVuZCA+IDB4MTAwMDAwMDAwVUxMKSB7CisJCWlmIChlbmQgIT0gKHJlc291cmNlX3NpemVfdCllbmQpIHsKIAkJCXJlcysrOwogCQkJY29udGludWU7CiAJCX0KLSNlbmRpZgogCQlyZXMtPm5hbWUgPSBlODIwX3R5cGVfdG9fc3RyaW5nKGU4MjAubWFwW2ldLnR5cGUpOwogCQlyZXMtPnN0YXJ0ID0gZTgyMC5tYXBbaV0uYWRkcjsKIAkJcmVzLT5lbmQgPSBlbmQ7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvZWZpLmMgYi9hcmNoL3g4Ni9rZXJuZWwvZWZpLmMKaW5kZXggOTQ1YTMxYy4uMTExOWQyNCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2VmaS5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9lZmkuYwpAQCAtMzY3LDYgKzM2NywxMCBAQAogCQkJZWZpLnNtYmlvcyA9IGNvbmZpZ190YWJsZXNbaV0udGFibGU7CiAJCQlwcmludGsoIiBTTUJJT1M9MHglbHggIiwgY29uZmlnX3RhYmxlc1tpXS50YWJsZSk7CiAJCX0gZWxzZSBpZiAoIWVmaV9ndWlkY21wKGNvbmZpZ190YWJsZXNbaV0uZ3VpZCwKKwkJCQkJVVZfU1lTVEVNX1RBQkxFX0dVSUQpKSB7CisJCQllZmkudXZfc3lzdGFiID0gY29uZmlnX3RhYmxlc1tpXS50YWJsZTsKKwkJCXByaW50aygiIFVWc3lzdGFiPTB4JWx4ICIsIGNvbmZpZ190YWJsZXNbaV0udGFibGUpOworCQl9IGVsc2UgaWYgKCFlZmlfZ3VpZGNtcChjb25maWdfdGFibGVzW2ldLmd1aWQsCiAJCQkJCUhDRFBfVEFCTEVfR1VJRCkpIHsKIAkJCWVmaS5oY2RwID0gY29uZmlnX3RhYmxlc1tpXS50YWJsZTsKIAkJCXByaW50aygiIEhDRFA9MHglbHggIiwgY29uZmlnX3RhYmxlc1tpXS50YWJsZSk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvZW50cnlfMzIuUyBiL2FyY2gveDg2L2tlcm5lbC9lbnRyeV8zMi5TCmluZGV4IDEwOTc5MmIuLjRkODIxNzEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9lbnRyeV8zMi5TCisrKyBiL2FyY2gveDg2L2tlcm5lbC9lbnRyeV8zMi5TCkBAIC02MjksNyArNjI5LDcgQEAKIEVOVFJZKGlycV9lbnRyaWVzX3N0YXJ0KQogCVJJTkcwX0lOVF9GUkFNRQogdmVjdG9yPTAKLS5yZXB0IE5SX0lSUVMKKy5yZXB0IE5SX1ZFQ1RPUlMKIAlBTElHTgogIC5pZiB2ZWN0b3IKIAlDRklfQURKVVNUX0NGQV9PRkZTRVQgLTQKQEAgLTczMCw2ICs3MzAsNyBAQAogCW1vdmwgJChfX1VTRVJfRFMpLCAlZWN4CiAJbW92bCAlZWN4LCAlZHMKIAltb3ZsICVlY3gsICVlcworCVRSQUNFX0lSUVNfT0ZGCiAJbW92bCAlZXNwLCVlYXgJCQkjIHB0X3JlZ3MgcG9pbnRlcgogCWNhbGwgKiVlZGkKIAlqbXAgcmV0X2Zyb21fZXhjZXB0aW9uCkBAIC03NjAsMjAgKzc2MSw5IEBACiAJUklORzBfSU5UX0ZSQU1FCiAJcHVzaGwgJC0xCQkJIyBtYXJrIHRoaXMgYXMgYW4gaW50CiAJQ0ZJX0FESlVTVF9DRkFfT0ZGU0VUIDQKLQlTQVZFX0FMTAotCUdFVF9DUjBfSU5UT19FQVgKLQl0ZXN0bCAkMHg0LCAlZWF4CQkjIEVNIChtYXRoIGVtdWxhdGlvbiBiaXQpCi0Jam5lIGRldmljZV9ub3RfYXZhaWxhYmxlX2VtdWxhdGUKLQlwcmVlbXB0X3N0b3AoQ0xCUl9BTlkpCi0JY2FsbCBtYXRoX3N0YXRlX3Jlc3RvcmUKLQlqbXAgcmV0X2Zyb21fZXhjZXB0aW9uCi1kZXZpY2Vfbm90X2F2YWlsYWJsZV9lbXVsYXRlOgotCXB1c2hsICQwCQkJIyB0ZW1wb3Jhcnkgc3RvcmFnZSBmb3IgT1JJR19FSVAKKwlwdXNobCAkZG9fZGV2aWNlX25vdF9hdmFpbGFibGUKIAlDRklfQURKVVNUX0NGQV9PRkZTRVQgNAotCWNhbGwgbWF0aF9lbXVsYXRlCi0JYWRkbCAkNCwgJWVzcAotCUNGSV9BREpVU1RfQ0ZBX09GRlNFVCAtNAotCWptcCByZXRfZnJvbV9leGNlcHRpb24KKwlqbXAgZXJyb3JfY29kZQogCUNGSV9FTkRQUk9DCiBFTkQoZGV2aWNlX25vdF9hdmFpbGFibGUpCiAKQEAgLTgxNCw2ICs4MDQsNyBAQAogCXB1c2hsICQtMQkJCSMgbWFyayB0aGlzIGFzIGFuIGludAogCUNGSV9BREpVU1RfQ0ZBX09GRlNFVCA0CiAJU0FWRV9BTEwKKwlUUkFDRV9JUlFTX09GRgogCXhvcmwgJWVkeCwlZWR4CQkJIyBlcnJvciBjb2RlIDAKIAltb3ZsICVlc3AsJWVheAkJCSMgcHRfcmVncyBwb2ludGVyCiAJY2FsbCBkb19kZWJ1ZwpAQCAtODU4LDYgKzg0OSw3IEBACiAJcHVzaGwgJWVheAogCUNGSV9BREpVU1RfQ0ZBX09GRlNFVCA0CiAJU0FWRV9BTEwKKwlUUkFDRV9JUlFTX09GRgogCXhvcmwgJWVkeCwlZWR4CQkjIHplcm8gZXJyb3IgY29kZQogCW1vdmwgJWVzcCwlZWF4CQkjIHB0X3JlZ3MgcG9pbnRlcgogCWNhbGwgZG9fbm1pCkBAIC04OTgsNiArODkwLDcgQEAKIAlwdXNobCAlZWF4CiAJQ0ZJX0FESlVTVF9DRkFfT0ZGU0VUIDQKIAlTQVZFX0FMTAorCVRSQUNFX0lSUVNfT0ZGCiAJRklYVVBfRVNQRklYX1NUQUNLCQkjICVlYXggPT0gJWVzcAogCXhvcmwgJWVkeCwlZWR4CQkJIyB6ZXJvIGVycm9yIGNvZGUKIAljYWxsIGRvX25taQpAQCAtOTI4LDYgKzkyMSw3IEBACiAJcHVzaGwgJC0xCQkJIyBtYXJrIHRoaXMgYXMgYW4gaW50CiAJQ0ZJX0FESlVTVF9DRkFfT0ZGU0VUIDQKIAlTQVZFX0FMTAorCVRSQUNFX0lSUVNfT0ZGCiAJeG9ybCAlZWR4LCVlZHgJCSMgemVybyBlcnJvciBjb2RlCiAJbW92bCAlZXNwLCVlYXgJCSMgcHRfcmVncyBwb2ludGVyCiAJY2FsbCBkb19pbnQzCkBAIC0xMDMwLDcgKzEwMjQsNyBAQAogCVJJTkcwX0lOVF9GUkFNRQogCXB1c2hsICQwCiAJQ0ZJX0FESlVTVF9DRkFfT0ZGU0VUIDQKLQlwdXNobCBtYWNoaW5lX2NoZWNrX3ZlY3RvcgorCXB1c2hsICRkb19tYWNoaW5lX2NoZWNrCiAJQ0ZJX0FESlVTVF9DRkFfT0ZGU0VUIDQKIAlqbXAgZXJyb3JfY29kZQogCUNGSV9FTkRQUk9DCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvZW50cnlfNjQuUyBiL2FyY2gveDg2L2tlcm5lbC9lbnRyeV82NC5TCmluZGV4IGNmM2EwYjIuLjFkYjZjZTQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9lbnRyeV82NC5TCisrKyBiL2FyY2gveDg2L2tlcm5lbC9lbnRyeV82NC5TCkBAIC02NjcsNiArNjY3LDEzIEBACiAJU0FWRV9BUkdTCiAJbGVhcSAtQVJHT0ZGU0VUKCVyc3ApLCVyZGkJIyBhcmcxIGZvciBoYW5kbGVyCiAJcHVzaHEgJXJicAorCS8qCisJICogU2F2ZSByYnAgdHdpY2U6IE9uZSBpcyBmb3IgbWFya2luZyB0aGUgc3RhY2sgZnJhbWUsIGFzIHVzdWFsLCBhbmQgdGhlCisJICogb3RoZXIsIHRvIGZpbGwgcHRfcmVncyBwcm9wZXJseS4gVGhpcyBpcyBiZWNhdXNlIGJ4IGNvbWVzIHJpZ2h0CisJICogYmVmb3JlIHRoZSBsYXN0IHNhdmVkIHJlZ2lzdGVyIGluIHRoYXQgc3RydWN0dXJlLCBhbmQgbm90IGJwLiBJZiB0aGUKKwkgKiBiYXNlIHBvaW50ZXIgd2VyZSBpbiB0aGUgcGxhY2UgYnggaXMgdG9kYXksIHRoaXMgd291bGQgbm90IGJlIG5lZWRlZC4KKwkgKi8KKwltb3ZxICVyYnAsIC04KCVyc3ApCiAJQ0ZJX0FESlVTVF9DRkFfT0ZGU0VUCTgKIAlDRklfUkVMX09GRlNFVAkJcmJwLCAwCiAJbW92cSAlcnNwLCVyYnAKQEAgLTkzMiw2ICs5MzksOSBAQAogCS5pZiBcaXN0CiAJbW92cQklZ3M6cGRhX2RhdGFfb2Zmc2V0LCAlcmJwCiAJLmVuZGlmCisJLmlmIFxpcnF0cmFjZQorCVRSQUNFX0lSUVNfT0ZGCisJLmVuZGlmCiAJbW92cSAlcnNwLCVyZGkKIAltb3ZxIE9SSUdfUkFYKCVyc3ApLCVyc2kKIAltb3ZxICQtMSxPUklHX1JBWCglcnNwKQpAQCAtMTA1OCw3ICsxMDY4LDggQEAKIAlqZSAgZXJyb3Jfa2VybmVsc3BhY2UKIGVycm9yX3N3YXBnczoJCiAJU1dBUEdTCi1lcnJvcl9zdGk6CQorZXJyb3Jfc3RpOgorCVRSQUNFX0lSUVNfT0ZGCiAJbW92cSAlcmRpLFJESSglcnNwKSAJCiAJQ0ZJX1JFTF9PRkZTRVQJcmRpLFJESQogCW1vdnEgJXJzcCwlcmRpCkBAIC0xMjMyLDcgKzEyNDMsNyBAQAogRU5EKHNpbWRfY29wcm9jZXNzb3JfZXJyb3IpCiAKIEVOVFJZKGRldmljZV9ub3RfYXZhaWxhYmxlKQotCXplcm9lbnRyeSBtYXRoX3N0YXRlX3Jlc3RvcmUKKwl6ZXJvZW50cnkgZG9fZGV2aWNlX25vdF9hdmFpbGFibGUKIEVORChkZXZpY2Vfbm90X2F2YWlsYWJsZSkKIAogCS8qIHJ1bnMgb24gZXhjZXB0aW9uIHN0YWNrICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvZXM3MDAwXzMyLmMgYi9hcmNoL3g4Ni9rZXJuZWwvZXM3MDAwXzMyLmMKaW5kZXggODQ5ZTVjZC4uZjQ1NGM3OGYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9lczcwMDBfMzIuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvZXM3MDAwXzMyLmMKQEAgLTEwOSw2ICsxMDksNyBAQAogfTsKIAogZXh0ZXJuIGludCBmaW5kX3VuaXN5c19hY3BpX29lbV90YWJsZSh1bnNpZ25lZCBsb25nICpvZW1fYWRkcik7CitleHRlcm4gdm9pZCB1bm1hcF91bmlzeXNfYWNwaV9vZW1fdGFibGUodW5zaWduZWQgbG9uZyBvZW1fYWRkcik7CiAjZW5kaWYKIAogc3RydWN0IG1pcF9yZWcgewpAQCAtMjQzLDIxICsyNDQsMzggQEAKIH0KIAogI2lmZGVmIENPTkZJR19BQ1BJCi1pbnQgX19pbml0Ci1maW5kX3VuaXN5c19hY3BpX29lbV90YWJsZSh1bnNpZ25lZCBsb25nICpvZW1fYWRkcikKK3N0YXRpYyB1bnNpZ25lZCBsb25nIG9lbV9hZGRyWDsKK3N0YXRpYyB1bnNpZ25lZCBsb25nIG9lbV9zaXplOworaW50IF9faW5pdCBmaW5kX3VuaXN5c19hY3BpX29lbV90YWJsZSh1bnNpZ25lZCBsb25nICpvZW1fYWRkcikKIHsKIAlzdHJ1Y3QgYWNwaV90YWJsZV9oZWFkZXIgKmhlYWRlciA9IE5VTEw7CiAJaW50IGkgPSAwOwotCXdoaWxlIChBQ1BJX1NVQ0NFU1MoYWNwaV9nZXRfdGFibGUoIk9FTTEiLCBpKyssICZoZWFkZXIpKSkgeworCWFjcGlfc2l6ZSB0Ymxfc2l6ZTsKKworCXdoaWxlIChBQ1BJX1NVQ0NFU1MoYWNwaV9nZXRfdGFibGVfd2l0aF9zaXplKCJPRU0xIiwgaSsrLCAmaGVhZGVyLCAmdGJsX3NpemUpKSkgewogCQlpZiAoIW1lbWNtcCgoY2hhciAqKSAmaGVhZGVyLT5vZW1faWQsICJVTklTWVMiLCA2KSkgewogCQkJc3RydWN0IG9lbV90YWJsZSAqdCA9IChzdHJ1Y3Qgb2VtX3RhYmxlICopaGVhZGVyOwotCQkJKm9lbV9hZGRyID0gKHVuc2lnbmVkIGxvbmcpX19hY3BpX21hcF90YWJsZSh0LT5PRU1UYWJsZUFkZHIsCi0JCQkJCQkJCSAgICB0LT5PRU1UYWJsZVNpemUpOworCisJCQlvZW1fYWRkclggPSB0LT5PRU1UYWJsZUFkZHI7CisJCQlvZW1fc2l6ZSA9IHQtPk9FTVRhYmxlU2l6ZTsKKwkJCWVhcmx5X2FjcGlfb3NfdW5tYXBfbWVtb3J5KGhlYWRlciwgdGJsX3NpemUpOworCisJCQkqb2VtX2FkZHIgPSAodW5zaWduZWQgbG9uZylfX2FjcGlfbWFwX3RhYmxlKG9lbV9hZGRyWCwKKwkJCQkJCQkJICAgIG9lbV9zaXplKTsKIAkJCXJldHVybiAwOwogCQl9CisJCWVhcmx5X2FjcGlfb3NfdW5tYXBfbWVtb3J5KGhlYWRlciwgdGJsX3NpemUpOwogCX0KIAlyZXR1cm4gLTE7CiB9CisKK3ZvaWQgX19pbml0IHVubWFwX3VuaXN5c19hY3BpX29lbV90YWJsZSh1bnNpZ25lZCBsb25nIG9lbV9hZGRyKQoreworCWlmICghb2VtX2FkZHIpCisJCXJldHVybjsKKworCV9fYWNwaV91bm1hcF90YWJsZSgoY2hhciAqKW9lbV9hZGRyLCBvZW1fc2l6ZSk7Cit9CiAjZW5kaWYKIAogc3RhdGljIHZvaWQKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9nZW5hcGljX2ZsYXRfNjQuYyBiL2FyY2gveDg2L2tlcm5lbC9nZW5hcGljX2ZsYXRfNjQuYwppbmRleCA5ZWNhNWJhLi4yZWMyZGU4IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvZ2VuYXBpY19mbGF0XzY0LmMKKysrIGIvYXJjaC94ODYva2VybmVsL2dlbmFwaWNfZmxhdF82NC5jCkBAIC0xNzksOCArMTc5LDEwIEBACiAJICogaXMgYW4gZXhhbXBsZSkuCiAJICovCiAJaWYgKGFjcGlfZ2JsX0ZBRFQuaGVhZGVyLnJldmlzaW9uID4gRkFEVDJfUkVWSVNJT05fSUQgJiYKLQkJKGFjcGlfZ2JsX0ZBRFQuZmxhZ3MgJiBBQ1BJX0ZBRFRfQVBJQ19QSFlTSUNBTCkpCisJCShhY3BpX2dibF9GQURULmZsYWdzICYgQUNQSV9GQURUX0FQSUNfUEhZU0lDQUwpKSB7CisJCXByaW50ayhLRVJOX0RFQlVHICJzeXN0ZW0gQVBJQyBvbmx5IGNhbiB1c2UgcGh5c2ljYWwgZmxhdCIpOwogCQlyZXR1cm4gMTsKKwl9CiAjZW5kaWYKIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2dlbngyYXBpY191dl94LmMgYi9hcmNoL3g4Ni9rZXJuZWwvZ2VueDJhcGljX3V2X3guYwppbmRleCBhZTJmZmM4Li5iZmQ1MzI4IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvZ2VueDJhcGljX3V2X3guYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvZ2VueDJhcGljX3V2X3guYwpAQCAtMTE0LDcgKzExNCw3IEBACiAJdW5zaWduZWQgbG9uZyB2YWwsIGFwaWNpZCwgbGFwaWNpZDsKIAlpbnQgcG5vZGU7CiAKLQlhcGljaWQgPSBwZXJfY3B1KHg4Nl9jcHVfdG9fYXBpY2lkLCBjcHUpOyAvKiBaWlogLSBjYWNoZSBub2RlLWxvY2FsID8gKi8KKwlhcGljaWQgPSBwZXJfY3B1KHg4Nl9jcHVfdG9fYXBpY2lkLCBjcHUpOwogCWxhcGljaWQgPSBhcGljaWQgJiAweDNmOwkJLyogWlpaIG1hY3JvIG5lZWRlZCAqLwogCXBub2RlID0gdXZfYXBpY2lkX3RvX3Bub2RlKGFwaWNpZCk7CiAJdmFsID0KQEAgLTIwMiwxMiArMjAyLDEwIEBACiAJcmV0dXJuIHV2X3JlYWRfYXBpY19pZCgpID4+IGluZGV4X21zYjsKIH0KIAotI2lmZGVmIFpaWgkJLyogTmVlZHMgeDJhcGljIHBhdGNoICovCiBzdGF0aWMgdm9pZCB1dl9zZW5kX0lQSV9zZWxmKGludCB2ZWN0b3IpCiB7CiAJYXBpY193cml0ZShBUElDX1NFTEZfSVBJLCB2ZWN0b3IpOwogfQotI2VuZGlmCiAKIHN0cnVjdCBnZW5hcGljIGFwaWNfeDJhcGljX3V2X3ggPSB7CiAJLm5hbWUgPSAiVVYgbGFyZ2Ugc3lzdGVtIiwKQEAgLTIxNSwxNSArMjEzLDE1IEBACiAJLmludF9kZWxpdmVyeV9tb2RlID0gZGVzdF9GaXhlZCwKIAkuaW50X2Rlc3RfbW9kZSA9IChBUElDX0RFU1RfUEhZU0lDQUwgIT0gMCksCiAJLnRhcmdldF9jcHVzID0gdXZfdGFyZ2V0X2NwdXMsCi0JLnZlY3Rvcl9hbGxvY2F0aW9uX2RvbWFpbiA9IHV2X3ZlY3Rvcl9hbGxvY2F0aW9uX2RvbWFpbiwvKiBGaXhtZSBaWlogKi8KKwkudmVjdG9yX2FsbG9jYXRpb25fZG9tYWluID0gdXZfdmVjdG9yX2FsbG9jYXRpb25fZG9tYWluLAogCS5hcGljX2lkX3JlZ2lzdGVyZWQgPSB1dl9hcGljX2lkX3JlZ2lzdGVyZWQsCiAJLmluaXRfYXBpY19sZHIgPSB1dl9pbml0X2FwaWNfbGRyLAogCS5zZW5kX0lQSV9hbGwgPSB1dl9zZW5kX0lQSV9hbGwsCiAJLnNlbmRfSVBJX2FsbGJ1dHNlbGYgPSB1dl9zZW5kX0lQSV9hbGxidXRzZWxmLAogCS5zZW5kX0lQSV9tYXNrID0gdXZfc2VuZF9JUElfbWFzaywKLQkvKiBaWlouc2VuZF9JUElfc2VsZiA9IHV2X3NlbmRfSVBJX3NlbGYsICovCisJLnNlbmRfSVBJX3NlbGYgPSB1dl9zZW5kX0lQSV9zZWxmLAogCS5jcHVfbWFza190b19hcGljaWQgPSB1dl9jcHVfbWFza190b19hcGljaWQsCi0JLnBoeXNfcGtnX2lkID0gcGh5c19wa2dfaWQsCS8qIEZpeG1lIFpaWiAqLworCS5waHlzX3BrZ19pZCA9IHBoeXNfcGtnX2lkLAogCS5nZXRfYXBpY19pZCA9IGdldF9hcGljX2lkLAogCS5zZXRfYXBpY19pZCA9IHNldF9hcGljX2lkLAogCS5hcGljX2lkX21hc2sgPSAoMHhGRkZGRkZGRnUpLApAQCAtMjg2LDEyICsyODQsMTMgQEAKIAogZW51bSBtYXBfdHlwZSB7bWFwX3diLCBtYXBfdWN9OwogCi1zdGF0aWMgX19pbml0IHZvaWQgbWFwX2hpZ2goY2hhciAqaWQsIHVuc2lnbmVkIGxvbmcgYmFzZSwgaW50IHNoaWZ0LCBlbnVtIG1hcF90eXBlIG1hcF90eXBlKQorc3RhdGljIF9faW5pdCB2b2lkIG1hcF9oaWdoKGNoYXIgKmlkLCB1bnNpZ25lZCBsb25nIGJhc2UsIGludCBzaGlmdCwKKwkJCSAgICBpbnQgbWF4X3Bub2RlLCBlbnVtIG1hcF90eXBlIG1hcF90eXBlKQogewogCXVuc2lnbmVkIGxvbmcgYnl0ZXMsIHBhZGRyOwogCiAJcGFkZHIgPSBiYXNlIDw8IHNoaWZ0OwotCWJ5dGVzID0gKDFVTCA8PCBzaGlmdCk7CisJYnl0ZXMgPSAoMVVMIDw8IHNoaWZ0KSAqIChtYXhfcG5vZGUgKyAxKTsKIAlwcmludGsoS0VSTl9JTkZPICJVVjogTWFwICVzX0hJIDB4JWx4IC0gMHglbHhcbiIsIGlkLCBwYWRkciwKIAkgICAgICAgCQkJCQlwYWRkciArIGJ5dGVzKTsKIAlpZiAobWFwX3R5cGUgPT0gbWFwX3VjKQpAQCAtMzA3LDcgKzMwNiw3IEBACiAKIAlncnUudiA9IHV2X3JlYWRfbG9jYWxfbW1yKFVWSF9SSF9HQU1fR1JVX09WRVJMQVlfQ09ORklHX01NUik7CiAJaWYgKGdydS5zLmVuYWJsZSkKLQkJbWFwX2hpZ2goIkdSVSIsIGdydS5zLmJhc2UsIHNoaWZ0LCBtYXBfd2IpOworCQltYXBfaGlnaCgiR1JVIiwgZ3J1LnMuYmFzZSwgc2hpZnQsIG1heF9wbm9kZSwgbWFwX3diKTsKIH0KIAogc3RhdGljIF9faW5pdCB2b2lkIG1hcF9jb25maWdfaGlnaChpbnQgbWF4X3Bub2RlKQpAQCAtMzE3LDcgKzMxNiw3IEBACiAKIAljZmcudiA9IHV2X3JlYWRfbG9jYWxfbW1yKFVWSF9SSF9HQU1fQ0ZHX09WRVJMQVlfQ09ORklHX01NUik7CiAJaWYgKGNmZy5zLmVuYWJsZSkKLQkJbWFwX2hpZ2goIkNPTkZJRyIsIGNmZy5zLmJhc2UsIHNoaWZ0LCBtYXBfdWMpOworCQltYXBfaGlnaCgiQ09ORklHIiwgY2ZnLnMuYmFzZSwgc2hpZnQsIG1heF9wbm9kZSwgbWFwX3VjKTsKIH0KIAogc3RhdGljIF9faW5pdCB2b2lkIG1hcF9tbXJfaGlnaChpbnQgbWF4X3Bub2RlKQpAQCAtMzI3LDcgKzMyNiw3IEBACiAKIAltbXIudiA9IHV2X3JlYWRfbG9jYWxfbW1yKFVWSF9SSF9HQU1fTU1SX09WRVJMQVlfQ09ORklHX01NUik7CiAJaWYgKG1tci5zLmVuYWJsZSkKLQkJbWFwX2hpZ2goIk1NUiIsIG1tci5zLmJhc2UsIHNoaWZ0LCBtYXBfdWMpOworCQltYXBfaGlnaCgiTU1SIiwgbW1yLnMuYmFzZSwgc2hpZnQsIG1heF9wbm9kZSwgbWFwX3VjKTsKIH0KIAogc3RhdGljIF9faW5pdCB2b2lkIG1hcF9tbWlvaF9oaWdoKGludCBtYXhfcG5vZGUpCkBAIC0zMzcsMTcgKzMzNiwxNyBAQAogCiAJbW1pb2gudiA9IHV2X3JlYWRfbG9jYWxfbW1yKFVWSF9SSF9HQU1fTU1JT0hfT1ZFUkxBWV9DT05GSUdfTU1SKTsKIAlpZiAobW1pb2gucy5lbmFibGUpCi0JCW1hcF9oaWdoKCJNTUlPSCIsIG1taW9oLnMuYmFzZSwgc2hpZnQsIG1hcF91Yyk7CisJCW1hcF9oaWdoKCJNTUlPSCIsIG1taW9oLnMuYmFzZSwgc2hpZnQsIG1heF9wbm9kZSwgbWFwX3VjKTsKIH0KIAogc3RhdGljIF9faW5pdCB2b2lkIHV2X3J0Y19pbml0KHZvaWQpCiB7Ci0JbG9uZyBzdGF0dXMsIHRpY2tzX3Blcl9zZWMsIGRyaWZ0OworCWxvbmcgc3RhdHVzOworCXU2NCB0aWNrc19wZXJfc2VjOwogCi0Jc3RhdHVzID0KLQkgICAgeDg2X2Jpb3NfZnJlcV9iYXNlKEJJT1NfRlJFUV9CQVNFX1JFQUxUSU1FX0NMT0NLLCAmdGlja3NfcGVyX3NlYywKLQkJCQkJJmRyaWZ0KTsKLQlpZiAoc3RhdHVzICE9IDAgfHwgdGlja3NfcGVyX3NlYyA8IDEwMDAwMCkgeworCXN0YXR1cyA9IHV2X2Jpb3NfZnJlcV9iYXNlKEJJT1NfRlJFUV9CQVNFX1JFQUxUSU1FX0NMT0NLLAorCQkJCQkmdGlja3NfcGVyX3NlYyk7CisJaWYgKHN0YXR1cyAhPSBCSU9TX1NUQVRVU19TVUNDRVNTIHx8IHRpY2tzX3Blcl9zZWMgPCAxMDAwMDApIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORwogCQkJInVuYWJsZSB0byBkZXRlcm1pbmUgcGxhdGZvcm0gUlRDIGNsb2NrIGZyZXF1ZW5jeSwgIgogCQkJImd1ZXNzaW5nLlxuIik7CkBAIC0zNTcsNyArMzU2LDIyIEBACiAJCXNuX3J0Y19jeWNsZXNfcGVyX3NlY29uZCA9IHRpY2tzX3Blcl9zZWM7CiB9CiAKLXN0YXRpYyBib29sIHV2X3N5c3RlbV9pbml0ZWQ7CisvKgorICogQ2FsbGVkIG9uIGVhY2ggY3B1IHRvIGluaXRpYWxpemUgdGhlIHBlcl9jcHUgVVYgZGF0YSBhcmVhLgorICogCVpaWiBob3RwbHVnIG5vdCBzdXBwb3J0ZWQgeWV0CisgKi8KK3ZvaWQgX19jcHVpbml0IHV2X2NwdV9pbml0KHZvaWQpCit7CisJLyogQ1BVIDAgaW5pdGlsaXphdGlvbiB3aWxsIGJlIGRvbmUgdmlhIHV2X3N5c3RlbV9pbml0LiAqLworCWlmICghdXZfYmxhZGVfaW5mbykKKwkJcmV0dXJuOworCisJdXZfYmxhZGVfaW5mb1t1dl9udW1hX2JsYWRlX2lkKCldLm5yX29ubGluZV9jcHVzKys7CisKKwlpZiAoZ2V0X3V2X3N5c3RlbV90eXBlKCkgPT0gVVZfTk9OX1VOSVFVRV9BUElDKQorCQlzZXRfeDJhcGljX2V4dHJhX2JpdHModXZfaHViX2luZm8tPnBub2RlKTsKK30KKwogCiB2b2lkIF9faW5pdCB1dl9zeXN0ZW1faW5pdCh2b2lkKQogewpAQCAtNDEzLDYgKzQyNyw5IEBACiAJZ25vZGVfdXBwZXIgPSAoKCh1bnNpZ25lZCBsb25nKW5vZGVfaWQucy5ub2RlX2lkKSAmCiAJCSAgICAgICB+KCgxIDw8IG5fdmFsKSAtIDEpKSA8PCBtX3ZhbDsKIAorCXV2X2Jpb3NfaW5pdCgpOworCXV2X2Jpb3NfZ2V0X3NuX2luZm8oMCwgJnV2X3R5cGUsICZzbl9wYXJ0aXRpb25faWQsCisJCQkgICAgJnV2X2NvaGVyZW5jeV9pZCwgJnV2X3JlZ2lvbl9zaXplKTsKIAl1dl9ydGNfaW5pdCgpOwogCiAJZm9yX2VhY2hfcHJlc2VudF9jcHUoY3B1KSB7CkBAIC00MzQsNyArNDUxLDcgQEAKIAkJdXZfY3B1X2h1Yl9pbmZvKGNwdSktPmdwYV9tYXNrID0gKDEgPDwgKG1fdmFsICsgbl92YWwpKSAtIDE7CiAJCXV2X2NwdV9odWJfaW5mbyhjcHUpLT5nbm9kZV91cHBlciA9IGdub2RlX3VwcGVyOwogCQl1dl9jcHVfaHViX2luZm8oY3B1KS0+Z2xvYmFsX21tcl9iYXNlID0gbW1yX2Jhc2U7Ci0JCXV2X2NwdV9odWJfaW5mbyhjcHUpLT5jb2hlcmVuY3lfZG9tYWluX251bWJlciA9IDA7LyogWlpaICovCisJCXV2X2NwdV9odWJfaW5mbyhjcHUpLT5jb2hlcmVuY3lfZG9tYWluX251bWJlciA9IHV2X2NvaGVyZW5jeV9pZDsKIAkJdXZfbm9kZV90b19ibGFkZVtuaWRdID0gYmxhZGU7CiAJCXV2X2NwdV90b19ibGFkZVtjcHVdID0gYmxhZGU7CiAJCW1heF9wbm9kZSA9IG1heChwbm9kZSwgbWF4X3Bub2RlKTsKQEAgLTQ0OSwyMSArNDY2LDYgQEAKIAltYXBfbW1yX2hpZ2gobWF4X3Bub2RlKTsKIAltYXBfY29uZmlnX2hpZ2gobWF4X3Bub2RlKTsKIAltYXBfbW1pb2hfaGlnaChtYXhfcG5vZGUpOwotCXV2X3N5c3RlbV9pbml0ZWQgPSB0cnVlOworCisJdXZfY3B1X2luaXQoKTsKIH0KLQotLyoKLSAqIENhbGxlZCBvbiBlYWNoIGNwdSB0byBpbml0aWFsaXplIHRoZSBwZXJfY3B1IFVWIGRhdGEgYXJlYS4KLSAqIAlaWlogaG90cGx1ZyBub3Qgc3VwcG9ydGVkIHlldAotICovCi12b2lkIF9fY3B1aW5pdCB1dl9jcHVfaW5pdCh2b2lkKQotewotCUJVR19PTighdXZfc3lzdGVtX2luaXRlZCk7Ci0KLQl1dl9ibGFkZV9pbmZvW3V2X251bWFfYmxhZGVfaWQoKV0ubnJfb25saW5lX2NwdXMrKzsKLQotCWlmIChnZXRfdXZfc3lzdGVtX3R5cGUoKSA9PSBVVl9OT05fVU5JUVVFX0FQSUMpCi0JCXNldF94MmFwaWNfZXh0cmFfYml0cyh1dl9odWJfaW5mby0+cG5vZGUpOwotfQotCi0KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9oZWFkLmMgYi9hcmNoL3g4Ni9rZXJuZWwvaGVhZC5jCmluZGV4IDNlNjZiZDMuLjFkY2IwZjEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9oZWFkLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2hlYWQuYwpAQCAtMzUsNiArMzUsNyBAQAogCiAJLyogc3RhcnQgb2YgRUJEQSBhcmVhICovCiAJZWJkYV9hZGRyID0gZ2V0X2Jpb3NfZWJkYSgpOworCXByaW50ayhLRVJOX0lORk8gIkJJT1MgRUJEQS9sb3dtZW0gYXQ6ICUwOHgvJTA4eFxuIiwgZWJkYV9hZGRyLCBsb3dtZW0pOwogCiAJLyogRml4dXA6IGJpb3MgcHV0cyBhbiBFQkRBIGluIHRoZSB0b3AgNjRLIHNlZ21lbnQgKi8KIAkvKiBvZiBjb252ZW50aW9uYWwgbWVtb3J5LCBidXQgZG9lcyBub3QgYWRqdXN0IGxvd21lbS4gKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9ocGV0LmMgYi9hcmNoL3g4Ni9rZXJuZWwvaHBldC5jCmluZGV4IDczZGVhZmYuLjc3MDE3ZTggMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9ocGV0LmMKKysrIGIvYXJjaC94ODYva2VybmVsL2hwZXQuYwpAQCAtMSwyOSArMSw0OSBAQAogI2luY2x1ZGUgPGxpbnV4L2Nsb2Nrc291cmNlLmg+CiAjaW5jbHVkZSA8bGludXgvY2xvY2tjaGlwcy5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L3N5c2Rldi5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9ocGV0Lmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L3N5c2Rldi5oPgorI2luY2x1ZGUgPGxpbnV4L2NwdS5oPgogI2luY2x1ZGUgPGxpbnV4L3BtLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KIAogI2luY2x1ZGUgPGFzbS9maXhtYXAuaD4KLSNpbmNsdWRlIDxhc20vaHBldC5oPgogI2luY2x1ZGUgPGFzbS9pODI1My5oPgotI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS9ocGV0Lmg+CiAKLSNkZWZpbmUgSFBFVF9NQVNLCUNMT0NLU09VUkNFX01BU0soMzIpCi0jZGVmaW5lIEhQRVRfU0hJRlQJMjIKKyNkZWZpbmUgSFBFVF9NQVNLCQkJQ0xPQ0tTT1VSQ0VfTUFTSygzMikKKyNkZWZpbmUgSFBFVF9TSElGVAkJCTIyCiAKIC8qIEZTRUMgPSAxMF4tMTUKICAgIE5TRUMgPSAxMF4tOSAqLwotI2RlZmluZSBGU0VDX1BFUl9OU0VDCTEwMDAwMDBMCisjZGVmaW5lIEZTRUNfUEVSX05TRUMJCQkxMDAwMDAwTAorCisjZGVmaW5lIEhQRVRfREVWX1VTRURfQklUCQkyCisjZGVmaW5lIEhQRVRfREVWX1VTRUQJCQkoMSA8PCBIUEVUX0RFVl9VU0VEX0JJVCkKKyNkZWZpbmUgSFBFVF9ERVZfVkFMSUQJCQkweDgKKyNkZWZpbmUgSFBFVF9ERVZfRlNCX0NBUAkJMHgxMDAwCisjZGVmaW5lIEhQRVRfREVWX1BFUklfQ0FQCQkweDIwMDAKKworI2RlZmluZSBFVlRfVE9fSFBFVF9ERVYoZXZ0KSBjb250YWluZXJfb2YoZXZ0LCBzdHJ1Y3QgaHBldF9kZXYsIGV2dCkKIAogLyoKICAqIEhQRVQgYWRkcmVzcyBpcyBzZXQgaW4gYWNwaS9ib290LmMsIHdoZW4gYW4gQUNQSSBlbnRyeSBleGlzdHMKICAqLwotdW5zaWduZWQgbG9uZyBocGV0X2FkZHJlc3M7Ci1zdGF0aWMgdm9pZCBfX2lvbWVtICpocGV0X3ZpcnRfYWRkcmVzczsKK3Vuc2lnbmVkIGxvbmcJCQkJaHBldF9hZGRyZXNzOwordW5zaWduZWQgbG9uZwkJCQlocGV0X251bV90aW1lcnM7CitzdGF0aWMgdm9pZCBfX2lvbWVtCQkJKmhwZXRfdmlydF9hZGRyZXNzOworCitzdHJ1Y3QgaHBldF9kZXYgeworCXN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UJZXZ0OworCXVuc2lnbmVkIGludAkJCW51bTsKKwlpbnQJCQkJY3B1OworCXVuc2lnbmVkIGludAkJCWlycTsKKwl1bnNpZ25lZCBpbnQJCQlmbGFnczsKKwljaGFyCQkJCW5hbWVbMTBdOworfTsKIAogdW5zaWduZWQgbG9uZyBocGV0X3JlYWRsKHVuc2lnbmVkIGxvbmcgYSkKIHsKQEAgLTU5LDcgKzc5LDcgQEAKIHN0YXRpYyBpbnQgYm9vdF9ocGV0X2Rpc2FibGU7CiBpbnQgaHBldF9mb3JjZV91c2VyOwogCi1zdGF0aWMgaW50IF9faW5pdCBocGV0X3NldHVwKGNoYXIqIHN0cikKK3N0YXRpYyBpbnQgX19pbml0IGhwZXRfc2V0dXAoY2hhciAqc3RyKQogewogCWlmIChzdHIpIHsKIAkJaWYgKCFzdHJuY21wKCJkaXNhYmxlIiwgc3RyLCA3KSkKQEAgLTgwLDcgKzEwMCw3IEBACiAKIHN0YXRpYyBpbmxpbmUgaW50IGlzX2hwZXRfY2FwYWJsZSh2b2lkKQogewotCXJldHVybiAoIWJvb3RfaHBldF9kaXNhYmxlICYmIGhwZXRfYWRkcmVzcyk7CisJcmV0dXJuICFib290X2hwZXRfZGlzYWJsZSAmJiBocGV0X2FkZHJlc3M7CiB9CiAKIC8qCkBAIC0xMDIsNiArMTIyLDkgQEAKICAqIHRpbWVyIDAgYW5kIHRpbWVyIDEgaW4gY2FzZSBvZiBSVEMgZW11bGF0aW9uLgogICovCiAjaWZkZWYgQ09ORklHX0hQRVQKKworc3RhdGljIHZvaWQgaHBldF9yZXNlcnZlX21zaV90aW1lcnMoc3RydWN0IGhwZXRfZGF0YSAqaGQpOworCiBzdGF0aWMgdm9pZCBocGV0X3Jlc2VydmVfcGxhdGZvcm1fdGltZXJzKHVuc2lnbmVkIGxvbmcgaWQpCiB7CiAJc3RydWN0IGhwZXQgX19pb21lbSAqaHBldCA9IGhwZXRfdmlydF9hZGRyZXNzOwpAQCAtMTExLDI1ICsxMzQsMzEgQEAKIAogCW5ydGltZXJzID0gKChpZCAmIEhQRVRfSURfTlVNQkVSKSA+PiBIUEVUX0lEX05VTUJFUl9TSElGVCkgKyAxOwogCi0JbWVtc2V0KCZoZCwgMCwgc2l6ZW9mIChoZCkpOwotCWhkLmhkX3BoeXNfYWRkcmVzcyA9IGhwZXRfYWRkcmVzczsKLQloZC5oZF9hZGRyZXNzID0gaHBldDsKLQloZC5oZF9uaXJxcyA9IG5ydGltZXJzOwotCWhkLmhkX2ZsYWdzID0gSFBFVF9EQVRBX1BMQVRGT1JNOworCW1lbXNldCgmaGQsIDAsIHNpemVvZihoZCkpOworCWhkLmhkX3BoeXNfYWRkcmVzcwk9IGhwZXRfYWRkcmVzczsKKwloZC5oZF9hZGRyZXNzCQk9IGhwZXQ7CisJaGQuaGRfbmlycXMJCT0gbnJ0aW1lcnM7CiAJaHBldF9yZXNlcnZlX3RpbWVyKCZoZCwgMCk7CiAKICNpZmRlZiBDT05GSUdfSFBFVF9FTVVMQVRFX1JUQwogCWhwZXRfcmVzZXJ2ZV90aW1lcigmaGQsIDEpOwogI2VuZGlmCiAKKwkvKgorCSAqIE5PVEUgdGhhdCBoZF9pcnFbXSByZWZsZWN0cyBJT0FQSUMgaW5wdXQgcGlucyAoTEVHQUNZXzgyNTQKKwkgKiBpcyB3cm9uZyBmb3IgaTgyNTkhKSBub3QgdGhlIG91dHB1dCBJUlEuICBNYW55IEJJT1Mgd3JpdGVycworCSAqIGRvbid0IGJvdGhlciBjb25maWd1cmluZyAqYW55KiBjb21wYXJhdG9yIGludGVycnVwdHMuCisJICovCiAJaGQuaGRfaXJxWzBdID0gSFBFVF9MRUdBQ1lfODI1NDsKIAloZC5oZF9pcnFbMV0gPSBIUEVUX0xFR0FDWV9SVEM7CiAKIAlmb3IgKGkgPSAyOyBpIDwgbnJ0aW1lcnM7IHRpbWVyKyssIGkrKykgewotCQloZC5oZF9pcnFbaV0gPSAocmVhZGwoJnRpbWVyLT5ocGV0X2NvbmZpZykgJiBUbl9JTlRfUk9VVEVfQ05GX01BU0spID4+Ci0JCQlUbl9JTlRfUk9VVEVfQ05GX1NISUZUOworCQloZC5oZF9pcnFbaV0gPSAocmVhZGwoJnRpbWVyLT5ocGV0X2NvbmZpZykgJgorCQkJVG5fSU5UX1JPVVRFX0NORl9NQVNLKSA+PiBUbl9JTlRfUk9VVEVfQ05GX1NISUZUOwogCX0KIAorCWhwZXRfcmVzZXJ2ZV9tc2lfdGltZXJzKCZoZCk7CisKIAlocGV0X2FsbG9jKCZoZCk7CiAKIH0KQEAgLTIyMyw2MCArMjUyLDcwIEBACiAJcHJpbnRrKEtFUk5fREVCVUcgImhwZXQgY2xvY2tldmVudCByZWdpc3RlcmVkXG4iKTsKIH0KIAotc3RhdGljIHZvaWQgaHBldF9sZWdhY3lfc2V0X21vZGUoZW51bSBjbG9ja19ldmVudF9tb2RlIG1vZGUsCi0JCQkgIHN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgKmV2dCkKK3N0YXRpYyBpbnQgaHBldF9zZXR1cF9tc2lfaXJxKHVuc2lnbmVkIGludCBpcnEpOworCitzdGF0aWMgdm9pZCBocGV0X3NldF9tb2RlKGVudW0gY2xvY2tfZXZlbnRfbW9kZSBtb2RlLAorCQkJICBzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpldnQsIGludCB0aW1lcikKIHsKIAl1bnNpZ25lZCBsb25nIGNmZywgY21wLCBub3c7CiAJdWludDY0X3QgZGVsdGE7CiAKLQlzd2l0Y2gobW9kZSkgeworCXN3aXRjaCAobW9kZSkgewogCWNhc2UgQ0xPQ0tfRVZUX01PREVfUEVSSU9ESUM6Ci0JCWRlbHRhID0gKCh1aW50NjRfdCkoTlNFQ19QRVJfU0VDL0haKSkgKiBocGV0X2Nsb2NrZXZlbnQubXVsdDsKLQkJZGVsdGEgPj49IGhwZXRfY2xvY2tldmVudC5zaGlmdDsKKwkJZGVsdGEgPSAoKHVpbnQ2NF90KShOU0VDX1BFUl9TRUMvSFopKSAqIGV2dC0+bXVsdDsKKwkJZGVsdGEgPj49IGV2dC0+c2hpZnQ7CiAJCW5vdyA9IGhwZXRfcmVhZGwoSFBFVF9DT1VOVEVSKTsKIAkJY21wID0gbm93ICsgKHVuc2lnbmVkIGxvbmcpIGRlbHRhOwotCQljZmcgPSBocGV0X3JlYWRsKEhQRVRfVDBfQ0ZHKTsKKwkJY2ZnID0gaHBldF9yZWFkbChIUEVUX1RuX0NGRyh0aW1lcikpOwogCQljZmcgfD0gSFBFVF9UTl9FTkFCTEUgfCBIUEVUX1ROX1BFUklPRElDIHwKIAkJICAgICAgIEhQRVRfVE5fU0VUVkFMIHwgSFBFVF9UTl8zMkJJVDsKLQkJaHBldF93cml0ZWwoY2ZnLCBIUEVUX1QwX0NGRyk7CisJCWhwZXRfd3JpdGVsKGNmZywgSFBFVF9Ubl9DRkcodGltZXIpKTsKIAkJLyoKIAkJICogVGhlIGZpcnN0IHdyaXRlIGFmdGVyIHdyaXRpbmcgVE5fU0VUVkFMIHRvIHRoZQogCQkgKiBjb25maWcgcmVnaXN0ZXIgc2V0cyB0aGUgY291bnRlciB2YWx1ZSwgdGhlIHNlY29uZAogCQkgKiB3cml0ZSBzZXRzIHRoZSBwZXJpb2QuCiAJCSAqLwotCQlocGV0X3dyaXRlbChjbXAsIEhQRVRfVDBfQ01QKTsKKwkJaHBldF93cml0ZWwoY21wLCBIUEVUX1RuX0NNUCh0aW1lcikpOwogCQl1ZGVsYXkoMSk7Ci0JCWhwZXRfd3JpdGVsKCh1bnNpZ25lZCBsb25nKSBkZWx0YSwgSFBFVF9UMF9DTVApOworCQlocGV0X3dyaXRlbCgodW5zaWduZWQgbG9uZykgZGVsdGEsIEhQRVRfVG5fQ01QKHRpbWVyKSk7CiAJCWJyZWFrOwogCiAJY2FzZSBDTE9DS19FVlRfTU9ERV9PTkVTSE9UOgotCQljZmcgPSBocGV0X3JlYWRsKEhQRVRfVDBfQ0ZHKTsKKwkJY2ZnID0gaHBldF9yZWFkbChIUEVUX1RuX0NGRyh0aW1lcikpOwogCQljZmcgJj0gfkhQRVRfVE5fUEVSSU9ESUM7CiAJCWNmZyB8PSBIUEVUX1ROX0VOQUJMRSB8IEhQRVRfVE5fMzJCSVQ7Ci0JCWhwZXRfd3JpdGVsKGNmZywgSFBFVF9UMF9DRkcpOworCQlocGV0X3dyaXRlbChjZmcsIEhQRVRfVG5fQ0ZHKHRpbWVyKSk7CiAJCWJyZWFrOwogCiAJY2FzZSBDTE9DS19FVlRfTU9ERV9VTlVTRUQ6CiAJY2FzZSBDTE9DS19FVlRfTU9ERV9TSFVURE9XTjoKLQkJY2ZnID0gaHBldF9yZWFkbChIUEVUX1QwX0NGRyk7CisJCWNmZyA9IGhwZXRfcmVhZGwoSFBFVF9Ubl9DRkcodGltZXIpKTsKIAkJY2ZnICY9IH5IUEVUX1ROX0VOQUJMRTsKLQkJaHBldF93cml0ZWwoY2ZnLCBIUEVUX1QwX0NGRyk7CisJCWhwZXRfd3JpdGVsKGNmZywgSFBFVF9Ubl9DRkcodGltZXIpKTsKIAkJYnJlYWs7CiAKIAljYXNlIENMT0NLX0VWVF9NT0RFX1JFU1VNRToKLQkJaHBldF9lbmFibGVfbGVnYWN5X2ludCgpOworCQlpZiAodGltZXIgPT0gMCkgeworCQkJaHBldF9lbmFibGVfbGVnYWN5X2ludCgpOworCQl9IGVsc2UgeworCQkJc3RydWN0IGhwZXRfZGV2ICpoZGV2ID0gRVZUX1RPX0hQRVRfREVWKGV2dCk7CisJCQlocGV0X3NldHVwX21zaV9pcnEoaGRldi0+aXJxKTsKKwkJCWRpc2FibGVfaXJxKGhkZXYtPmlycSk7CisJCQlpcnFfc2V0X2FmZmluaXR5KGhkZXYtPmlycSwgY3B1bWFza19vZl9jcHUoaGRldi0+Y3B1KSk7CisJCQllbmFibGVfaXJxKGhkZXYtPmlycSk7CisJCX0KIAkJYnJlYWs7CiAJfQogfQogCi1zdGF0aWMgaW50IGhwZXRfbGVnYWN5X25leHRfZXZlbnQodW5zaWduZWQgbG9uZyBkZWx0YSwKLQkJCQkgIHN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgKmV2dCkKK3N0YXRpYyBpbnQgaHBldF9uZXh0X2V2ZW50KHVuc2lnbmVkIGxvbmcgZGVsdGEsCisJCQkgICBzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpldnQsIGludCB0aW1lcikKIHsKIAl1MzIgY250OwogCiAJY250ID0gaHBldF9yZWFkbChIUEVUX0NPVU5URVIpOwogCWNudCArPSAodTMyKSBkZWx0YTsKLQlocGV0X3dyaXRlbChjbnQsIEhQRVRfVDBfQ01QKTsKKwlocGV0X3dyaXRlbChjbnQsIEhQRVRfVG5fQ01QKHRpbWVyKSk7CiAKIAkvKgogCSAqIFdlIG5lZWQgdG8gcmVhZCBiYWNrIHRoZSBDTVAgcmVnaXN0ZXIgdG8gbWFrZSBzdXJlIHRoYXQKQEAgLTI4OCw2ICszMjcsMzQ3IEBACiAJcmV0dXJuIChzMzIpKCh1MzIpaHBldF9yZWFkbChIUEVUX0NPVU5URVIpIC0gY250KSA+PSAwID8gLUVUSU1FIDogMDsKIH0KIAorc3RhdGljIHZvaWQgaHBldF9sZWdhY3lfc2V0X21vZGUoZW51bSBjbG9ja19ldmVudF9tb2RlIG1vZGUsCisJCQlzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpldnQpCit7CisJaHBldF9zZXRfbW9kZShtb2RlLCBldnQsIDApOworfQorCitzdGF0aWMgaW50IGhwZXRfbGVnYWN5X25leHRfZXZlbnQodW5zaWduZWQgbG9uZyBkZWx0YSwKKwkJCXN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgKmV2dCkKK3sKKwlyZXR1cm4gaHBldF9uZXh0X2V2ZW50KGRlbHRhLCBldnQsIDApOworfQorCisvKgorICogSFBFVCBNU0kgU3VwcG9ydAorICovCisjaWZkZWYgQ09ORklHX1BDSV9NU0kKKworc3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCBocGV0X2RldiAqLCBjcHVfaHBldF9kZXYpOworc3RhdGljIHN0cnVjdCBocGV0X2RldgkqaHBldF9kZXZzOworCit2b2lkIGhwZXRfbXNpX3VubWFzayh1bnNpZ25lZCBpbnQgaXJxKQoreworCXN0cnVjdCBocGV0X2RldiAqaGRldiA9IGdldF9pcnFfZGF0YShpcnEpOworCXVuc2lnbmVkIGxvbmcgY2ZnOworCisJLyogdW5tYXNrIGl0ICovCisJY2ZnID0gaHBldF9yZWFkbChIUEVUX1RuX0NGRyhoZGV2LT5udW0pKTsKKwljZmcgfD0gSFBFVF9UTl9GU0I7CisJaHBldF93cml0ZWwoY2ZnLCBIUEVUX1RuX0NGRyhoZGV2LT5udW0pKTsKK30KKwordm9pZCBocGV0X21zaV9tYXNrKHVuc2lnbmVkIGludCBpcnEpCit7CisJdW5zaWduZWQgbG9uZyBjZmc7CisJc3RydWN0IGhwZXRfZGV2ICpoZGV2ID0gZ2V0X2lycV9kYXRhKGlycSk7CisKKwkvKiBtYXNrIGl0ICovCisJY2ZnID0gaHBldF9yZWFkbChIUEVUX1RuX0NGRyhoZGV2LT5udW0pKTsKKwljZmcgJj0gfkhQRVRfVE5fRlNCOworCWhwZXRfd3JpdGVsKGNmZywgSFBFVF9Ubl9DRkcoaGRldi0+bnVtKSk7Cit9CisKK3ZvaWQgaHBldF9tc2lfd3JpdGUodW5zaWduZWQgaW50IGlycSwgc3RydWN0IG1zaV9tc2cgKm1zZykKK3sKKwlzdHJ1Y3QgaHBldF9kZXYgKmhkZXYgPSBnZXRfaXJxX2RhdGEoaXJxKTsKKworCWhwZXRfd3JpdGVsKG1zZy0+ZGF0YSwgSFBFVF9Ubl9ST1VURShoZGV2LT5udW0pKTsKKwlocGV0X3dyaXRlbChtc2ctPmFkZHJlc3NfbG8sIEhQRVRfVG5fUk9VVEUoaGRldi0+bnVtKSArIDQpOworfQorCit2b2lkIGhwZXRfbXNpX3JlYWQodW5zaWduZWQgaW50IGlycSwgc3RydWN0IG1zaV9tc2cgKm1zZykKK3sKKwlzdHJ1Y3QgaHBldF9kZXYgKmhkZXYgPSBnZXRfaXJxX2RhdGEoaXJxKTsKKworCW1zZy0+ZGF0YSA9IGhwZXRfcmVhZGwoSFBFVF9Ubl9ST1VURShoZGV2LT5udW0pKTsKKwltc2ctPmFkZHJlc3NfbG8gPSBocGV0X3JlYWRsKEhQRVRfVG5fUk9VVEUoaGRldi0+bnVtKSArIDQpOworCW1zZy0+YWRkcmVzc19oaSA9IDA7Cit9CisKK3N0YXRpYyB2b2lkIGhwZXRfbXNpX3NldF9tb2RlKGVudW0gY2xvY2tfZXZlbnRfbW9kZSBtb2RlLAorCQkJCXN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgKmV2dCkKK3sKKwlzdHJ1Y3QgaHBldF9kZXYgKmhkZXYgPSBFVlRfVE9fSFBFVF9ERVYoZXZ0KTsKKwlocGV0X3NldF9tb2RlKG1vZGUsIGV2dCwgaGRldi0+bnVtKTsKK30KKworc3RhdGljIGludCBocGV0X21zaV9uZXh0X2V2ZW50KHVuc2lnbmVkIGxvbmcgZGVsdGEsCisJCQkJc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqZXZ0KQoreworCXN0cnVjdCBocGV0X2RldiAqaGRldiA9IEVWVF9UT19IUEVUX0RFVihldnQpOworCXJldHVybiBocGV0X25leHRfZXZlbnQoZGVsdGEsIGV2dCwgaGRldi0+bnVtKTsKK30KKworc3RhdGljIGludCBocGV0X3NldHVwX21zaV9pcnEodW5zaWduZWQgaW50IGlycSkKK3sKKwlpZiAoYXJjaF9zZXR1cF9ocGV0X21zaShpcnEpKSB7CisJCWRlc3Ryb3lfaXJxKGlycSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBocGV0X2Fzc2lnbl9pcnEoc3RydWN0IGhwZXRfZGV2ICpkZXYpCit7CisJdW5zaWduZWQgaW50IGlycTsKKworCWlycSA9IGNyZWF0ZV9pcnEoKTsKKwlpZiAoIWlycSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlzZXRfaXJxX2RhdGEoaXJxLCBkZXYpOworCisJaWYgKGhwZXRfc2V0dXBfbXNpX2lycShpcnEpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWRldi0+aXJxID0gaXJxOworCXJldHVybiAwOworfQorCitzdGF0aWMgaXJxcmV0dXJuX3QgaHBldF9pbnRlcnJ1cHRfaGFuZGxlcihpbnQgaXJxLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBocGV0X2RldiAqZGV2ID0gKHN0cnVjdCBocGV0X2RldiAqKWRhdGE7CisJc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqaGV2dCA9ICZkZXYtPmV2dDsKKworCWlmICghaGV2dC0+ZXZlbnRfaGFuZGxlcikgeworCQlwcmludGsoS0VSTl9JTkZPICJTcHVyaW91cyBIUEVUIHRpbWVyIGludGVycnVwdCBvbiBIUEVUIHRpbWVyICVkXG4iLAorCQkJCWRldi0+bnVtKTsKKwkJcmV0dXJuIElSUV9IQU5ETEVEOworCX0KKworCWhldnQtPmV2ZW50X2hhbmRsZXIoaGV2dCk7CisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgaW50IGhwZXRfc2V0dXBfaXJxKHN0cnVjdCBocGV0X2RldiAqZGV2KQoreworCisJaWYgKHJlcXVlc3RfaXJxKGRldi0+aXJxLCBocGV0X2ludGVycnVwdF9oYW5kbGVyLAorCQkJSVJRRl9TSEFSRUR8SVJRRl9OT0JBTEFOQ0lORywgZGV2LT5uYW1lLCBkZXYpKQorCQlyZXR1cm4gLTE7CisKKwlkaXNhYmxlX2lycShkZXYtPmlycSk7CisJaXJxX3NldF9hZmZpbml0eShkZXYtPmlycSwgY3B1bWFza19vZl9jcHUoZGV2LT5jcHUpKTsKKwllbmFibGVfaXJxKGRldi0+aXJxKTsKKworCXByaW50ayhLRVJOX0RFQlVHICJocGV0OiAlcyBpcnEgJWQgZm9yIE1TSVxuIiwKKwkJCSBkZXYtPm5hbWUsIGRldi0+aXJxKTsKKworCXJldHVybiAwOworfQorCisvKiBUaGlzIHNob3VsZCBiZSBjYWxsZWQgaW4gc3BlY2lmaWMgQGNwdSAqLworc3RhdGljIHZvaWQgaW5pdF9vbmVfaHBldF9tc2lfY2xvY2tldmVudChzdHJ1Y3QgaHBldF9kZXYgKmhkZXYsIGludCBjcHUpCit7CisJc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqZXZ0ID0gJmhkZXYtPmV2dDsKKwl1aW50NjRfdCBocGV0X2ZyZXE7CisKKwlXQVJOX09OKGNwdSAhPSBzbXBfcHJvY2Vzc29yX2lkKCkpOworCWlmICghKGhkZXYtPmZsYWdzICYgSFBFVF9ERVZfVkFMSUQpKQorCQlyZXR1cm47CisKKwlpZiAoaHBldF9zZXR1cF9tc2lfaXJxKGhkZXYtPmlycSkpCisJCXJldHVybjsKKworCWhkZXYtPmNwdSA9IGNwdTsKKwlwZXJfY3B1KGNwdV9ocGV0X2RldiwgY3B1KSA9IGhkZXY7CisJZXZ0LT5uYW1lID0gaGRldi0+bmFtZTsKKwlocGV0X3NldHVwX2lycShoZGV2KTsKKwlldnQtPmlycSA9IGhkZXYtPmlycTsKKworCWV2dC0+cmF0aW5nID0gMTEwOworCWV2dC0+ZmVhdHVyZXMgPSBDTE9DS19FVlRfRkVBVF9PTkVTSE9UOworCWlmIChoZGV2LT5mbGFncyAmIEhQRVRfREVWX1BFUklfQ0FQKQorCQlldnQtPmZlYXR1cmVzIHw9IENMT0NLX0VWVF9GRUFUX1BFUklPRElDOworCisJZXZ0LT5zZXRfbW9kZSA9IGhwZXRfbXNpX3NldF9tb2RlOworCWV2dC0+c2V0X25leHRfZXZlbnQgPSBocGV0X21zaV9uZXh0X2V2ZW50OworCWV2dC0+c2hpZnQgPSAzMjsKKworCS8qCisJICogVGhlIHBlcmlvZCBpcyBhIGZlbXRvIHNlY29uZHMgdmFsdWUuIFdlIG5lZWQgdG8gY2FsY3VsYXRlIHRoZQorCSAqIHNjYWxlZCBtYXRoIG11bHRpcGxpY2F0aW9uIGZhY3RvciBmb3IgbmFub3NlY29uZCB0byBocGV0IHRpY2sKKwkgKiBjb252ZXJzaW9uLgorCSAqLworCWhwZXRfZnJlcSA9IDEwMDAwMDAwMDAwMDAwMDBVTEw7CisJZG9fZGl2KGhwZXRfZnJlcSwgaHBldF9wZXJpb2QpOworCWV2dC0+bXVsdCA9IGRpdl9zYygodW5zaWduZWQgbG9uZykgaHBldF9mcmVxLAorCQkJCSAgICAgIE5TRUNfUEVSX1NFQywgZXZ0LT5zaGlmdCk7CisJLyogQ2FsY3VsYXRlIHRoZSBtYXggZGVsdGEgKi8KKwlldnQtPm1heF9kZWx0YV9ucyA9IGNsb2NrZXZlbnRfZGVsdGEybnMoMHg3RkZGRkZGRiwgZXZ0KTsKKwkvKiA1IHVzZWMgbWluaW11bSByZXByb2dyYW1taW5nIGRlbHRhLiAqLworCWV2dC0+bWluX2RlbHRhX25zID0gNTAwMDsKKworCWV2dC0+Y3B1bWFzayA9IGNwdW1hc2tfb2ZfY3B1KGhkZXYtPmNwdSk7CisJY2xvY2tldmVudHNfcmVnaXN0ZXJfZGV2aWNlKGV2dCk7Cit9CisKKyNpZmRlZiBDT05GSUdfSFBFVAorLyogUmVzZXJ2ZSBhdCBsZWFzdCBvbmUgdGltZXIgZm9yIHVzZXJzcGFjZSAoL2Rldi9ocGV0KSAqLworI2RlZmluZSBSRVNFUlZFX1RJTUVSUyAxCisjZWxzZQorI2RlZmluZSBSRVNFUlZFX1RJTUVSUyAwCisjZW5kaWYKKworc3RhdGljIHZvaWQgaHBldF9tc2lfY2FwYWJpbGl0eV9sb29rdXAodW5zaWduZWQgaW50IHN0YXJ0X3RpbWVyKQoreworCXVuc2lnbmVkIGludCBpZDsKKwl1bnNpZ25lZCBpbnQgbnVtX3RpbWVyczsKKwl1bnNpZ25lZCBpbnQgbnVtX3RpbWVyc191c2VkID0gMDsKKwlpbnQgaTsKKworCWlkID0gaHBldF9yZWFkbChIUEVUX0lEKTsKKworCW51bV90aW1lcnMgPSAoKGlkICYgSFBFVF9JRF9OVU1CRVIpID4+IEhQRVRfSURfTlVNQkVSX1NISUZUKTsKKwludW1fdGltZXJzKys7IC8qIFZhbHVlIHJlYWQgb3V0IHN0YXJ0cyBmcm9tIDAgKi8KKworCWhwZXRfZGV2cyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBocGV0X2RldikgKiBudW1fdGltZXJzLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWhwZXRfZGV2cykKKwkJcmV0dXJuOworCisJaHBldF9udW1fdGltZXJzID0gbnVtX3RpbWVyczsKKworCWZvciAoaSA9IHN0YXJ0X3RpbWVyOyBpIDwgbnVtX3RpbWVycyAtIFJFU0VSVkVfVElNRVJTOyBpKyspIHsKKwkJc3RydWN0IGhwZXRfZGV2ICpoZGV2ID0gJmhwZXRfZGV2c1tudW1fdGltZXJzX3VzZWRdOworCQl1bnNpZ25lZCBsb25nIGNmZyA9IGhwZXRfcmVhZGwoSFBFVF9Ubl9DRkcoaSkpOworCisJCS8qIE9ubHkgY29uc2lkZXIgSFBFVCB0aW1lciB3aXRoIE1TSSBzdXBwb3J0ICovCisJCWlmICghKGNmZyAmIEhQRVRfVE5fRlNCX0NBUCkpCisJCQljb250aW51ZTsKKworCQloZGV2LT5mbGFncyA9IDA7CisJCWlmIChjZmcgJiBIUEVUX1ROX1BFUklPRElDX0NBUCkKKwkJCWhkZXYtPmZsYWdzIHw9IEhQRVRfREVWX1BFUklfQ0FQOworCQloZGV2LT5udW0gPSBpOworCisJCXNwcmludGYoaGRldi0+bmFtZSwgImhwZXQlZCIsIGkpOworCQlpZiAoaHBldF9hc3NpZ25faXJxKGhkZXYpKQorCQkJY29udGludWU7CisKKwkJaGRldi0+ZmxhZ3MgfD0gSFBFVF9ERVZfRlNCX0NBUDsKKwkJaGRldi0+ZmxhZ3MgfD0gSFBFVF9ERVZfVkFMSUQ7CisJCW51bV90aW1lcnNfdXNlZCsrOworCQlpZiAobnVtX3RpbWVyc191c2VkID09IG51bV9wb3NzaWJsZV9jcHVzKCkpCisJCQlicmVhazsKKwl9CisKKwlwcmludGsoS0VSTl9JTkZPICJIUEVUOiAlZCB0aW1lcnMgaW4gdG90YWwsICVkIHRpbWVycyB3aWxsIGJlIHVzZWQgZm9yIHBlci1jcHUgdGltZXJcbiIsCisJCW51bV90aW1lcnMsIG51bV90aW1lcnNfdXNlZCk7Cit9CisKKyNpZmRlZiBDT05GSUdfSFBFVAorc3RhdGljIHZvaWQgaHBldF9yZXNlcnZlX21zaV90aW1lcnMoc3RydWN0IGhwZXRfZGF0YSAqaGQpCit7CisJaW50IGk7CisKKwlpZiAoIWhwZXRfZGV2cykKKwkJcmV0dXJuOworCisJZm9yIChpID0gMDsgaSA8IGhwZXRfbnVtX3RpbWVyczsgaSsrKSB7CisJCXN0cnVjdCBocGV0X2RldiAqaGRldiA9ICZocGV0X2RldnNbaV07CisKKwkJaWYgKCEoaGRldi0+ZmxhZ3MgJiBIUEVUX0RFVl9WQUxJRCkpCisJCQljb250aW51ZTsKKworCQloZC0+aGRfaXJxW2hkZXYtPm51bV0gPSBoZGV2LT5pcnE7CisJCWhwZXRfcmVzZXJ2ZV90aW1lcihoZCwgaGRldi0+bnVtKTsKKwl9Cit9CisjZW5kaWYKKworc3RhdGljIHN0cnVjdCBocGV0X2RldiAqaHBldF9nZXRfdW51c2VkX3RpbWVyKHZvaWQpCit7CisJaW50IGk7CisKKwlpZiAoIWhwZXRfZGV2cykKKwkJcmV0dXJuIE5VTEw7CisKKwlmb3IgKGkgPSAwOyBpIDwgaHBldF9udW1fdGltZXJzOyBpKyspIHsKKwkJc3RydWN0IGhwZXRfZGV2ICpoZGV2ID0gJmhwZXRfZGV2c1tpXTsKKworCQlpZiAoIShoZGV2LT5mbGFncyAmIEhQRVRfREVWX1ZBTElEKSkKKwkJCWNvbnRpbnVlOworCQlpZiAodGVzdF9hbmRfc2V0X2JpdChIUEVUX0RFVl9VU0VEX0JJVCwKKwkJCSh1bnNpZ25lZCBsb25nICopJmhkZXYtPmZsYWdzKSkKKwkJCWNvbnRpbnVlOworCQlyZXR1cm4gaGRldjsKKwl9CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0cnVjdCBocGV0X3dvcmtfc3RydWN0IHsKKwlzdHJ1Y3QgZGVsYXllZF93b3JrIHdvcms7CisJc3RydWN0IGNvbXBsZXRpb24gY29tcGxldGU7Cit9OworCitzdGF0aWMgdm9pZCBocGV0X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3KQoreworCXN0cnVjdCBocGV0X2RldiAqaGRldjsKKwlpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOworCXN0cnVjdCBocGV0X3dvcmtfc3RydWN0ICpocGV0X3dvcms7CisKKwlocGV0X3dvcmsgPSBjb250YWluZXJfb2Yodywgc3RydWN0IGhwZXRfd29ya19zdHJ1Y3QsIHdvcmsud29yayk7CisKKwloZGV2ID0gaHBldF9nZXRfdW51c2VkX3RpbWVyKCk7CisJaWYgKGhkZXYpCisJCWluaXRfb25lX2hwZXRfbXNpX2Nsb2NrZXZlbnQoaGRldiwgY3B1KTsKKworCWNvbXBsZXRlKCZocGV0X3dvcmstPmNvbXBsZXRlKTsKK30KKworc3RhdGljIGludCBocGV0X2NwdWhwX25vdGlmeShzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm4sCisJCXVuc2lnbmVkIGxvbmcgYWN0aW9uLCB2b2lkICpoY3B1KQoreworCXVuc2lnbmVkIGxvbmcgY3B1ID0gKHVuc2lnbmVkIGxvbmcpaGNwdTsKKwlzdHJ1Y3QgaHBldF93b3JrX3N0cnVjdCB3b3JrOworCXN0cnVjdCBocGV0X2RldiAqaGRldiA9IHBlcl9jcHUoY3B1X2hwZXRfZGV2LCBjcHUpOworCisJc3dpdGNoIChhY3Rpb24gJiAweGYpIHsKKwljYXNlIENQVV9PTkxJTkU6CisJCUlOSVRfREVMQVlFRF9XT1JLKCZ3b3JrLndvcmssIGhwZXRfd29yayk7CisJCWluaXRfY29tcGxldGlvbigmd29yay5jb21wbGV0ZSk7CisJCS8qIEZJWE1FOiBhZGQgc2NoZWR1bGVfd29ya19vbigpICovCisJCXNjaGVkdWxlX2RlbGF5ZWRfd29ya19vbihjcHUsICZ3b3JrLndvcmssIDApOworCQl3YWl0X2Zvcl9jb21wbGV0aW9uKCZ3b3JrLmNvbXBsZXRlKTsKKwkJYnJlYWs7CisJY2FzZSBDUFVfREVBRDoKKwkJaWYgKGhkZXYpIHsKKwkJCWZyZWVfaXJxKGhkZXYtPmlycSwgaGRldik7CisJCQloZGV2LT5mbGFncyAmPSB+SFBFVF9ERVZfVVNFRDsKKwkJCXBlcl9jcHUoY3B1X2hwZXRfZGV2LCBjcHUpID0gTlVMTDsKKwkJfQorCQlicmVhazsKKwl9CisJcmV0dXJuIE5PVElGWV9PSzsKK30KKyNlbHNlCisKK3N0YXRpYyBpbnQgaHBldF9zZXR1cF9tc2lfaXJxKHVuc2lnbmVkIGludCBpcnEpCit7CisJcmV0dXJuIDA7Cit9CitzdGF0aWMgdm9pZCBocGV0X21zaV9jYXBhYmlsaXR5X2xvb2t1cCh1bnNpZ25lZCBpbnQgc3RhcnRfdGltZXIpCit7CisJcmV0dXJuOworfQorCisjaWZkZWYgQ09ORklHX0hQRVQKK3N0YXRpYyB2b2lkIGhwZXRfcmVzZXJ2ZV9tc2lfdGltZXJzKHN0cnVjdCBocGV0X2RhdGEgKmhkKQoreworCXJldHVybjsKK30KKyNlbmRpZgorCitzdGF0aWMgaW50IGhwZXRfY3B1aHBfbm90aWZ5KHN0cnVjdCBub3RpZmllcl9ibG9jayAqbiwKKwkJdW5zaWduZWQgbG9uZyBhY3Rpb24sIHZvaWQgKmhjcHUpCit7CisJcmV0dXJuIE5PVElGWV9PSzsKK30KKworI2VuZGlmCisKIC8qCiAgKiBDbG9jayBzb3VyY2UgcmVsYXRlZCBjb2RlCiAgKi8KQEAgLTQyMyw4ICs4MDMsMTAgQEAKIAogCWlmIChpZCAmIEhQRVRfSURfTEVHU1VQKSB7CiAJCWhwZXRfbGVnYWN5X2Nsb2NrZXZlbnRfcmVnaXN0ZXIoKTsKKwkJaHBldF9tc2lfY2FwYWJpbGl0eV9sb29rdXAoMik7CiAJCXJldHVybiAxOwogCX0KKwlocGV0X21zaV9jYXBhYmlsaXR5X2xvb2t1cCgwKTsKIAlyZXR1cm4gMDsKIAogb3V0X25vaHBldDoKQEAgLTQ0MSw2ICs4MjMsOCBAQAogICovCiBzdGF0aWMgX19pbml0IGludCBocGV0X2xhdGVfaW5pdCh2b2lkKQogeworCWludCBjcHU7CisKIAlpZiAoYm9vdF9ocGV0X2Rpc2FibGUpCiAJCXJldHVybiAtRU5PREVWOwogCkBAIC00NTYsNiArODQwLDEzIEBACiAKIAlocGV0X3Jlc2VydmVfcGxhdGZvcm1fdGltZXJzKGhwZXRfcmVhZGwoSFBFVF9JRCkpOwogCisJZm9yX2VhY2hfb25saW5lX2NwdShjcHUpIHsKKwkJaHBldF9jcHVocF9ub3RpZnkoTlVMTCwgQ1BVX09OTElORSwgKHZvaWQgKikobG9uZyljcHUpOworCX0KKworCS8qIFRoaXMgbm90aWZpZXIgc2hvdWxkIGJlIGNhbGxlZCBhZnRlciB3b3JrcXVldWUgaXMgcmVhZHkgKi8KKwlob3RjcHVfbm90aWZpZXIoaHBldF9jcHVocF9ub3RpZnksIC0yMCk7CisKIAlyZXR1cm4gMDsKIH0KIGZzX2luaXRjYWxsKGhwZXRfbGF0ZV9pbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9pb19hcGljLmMgYi9hcmNoL3g4Ni9rZXJuZWwvaW9fYXBpYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI3NjRkNzQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3g4Ni9rZXJuZWwvaW9fYXBpYy5jCkBAIC0wLDAgKzEsMzg5NiBAQAorLyoKKyAqCUludGVsIElPLUFQSUMgc3VwcG9ydCBmb3IgbXVsdGktUGVudGl1bSBob3N0cy4KKyAqCisgKglDb3B5cmlnaHQgKEMpIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAgSW5nbyBNb2xuYXIsIEhham5hbGthIFN6YWJvCisgKgorICoJTWFueSB0aGFua3MgdG8gU3RpZyBWZW5hYXMgZm9yIHRyeWluZyBvdXQgY291bnRsZXNzIGV4cGVyaW1lbnRhbAorICoJcGF0Y2hlcyBhbmQgcmVwb3J0aW5nL2RlYnVnZ2luZyBwcm9ibGVtcyBwYXRpZW50bHkhCisgKgorICoJKGMpIDE5OTksIE11bHRpcGxlIElPLUFQSUMgc3VwcG9ydCwgZGV2ZWxvcGVkIGJ5CisgKglLZW4taWNoaSBZYWt1IDx5YWt1QGNzczEua2JuZXMubmVjLmNvLmpwPiBhbmQKKyAqICAgICAgSGlkZW1pIEtpc2hpbW90byA8a2lzaW1vdG9AY3NzMS5rYm5lcy5uZWMuY28uanA+LAorICoJZnVydGhlciB0ZXN0ZWQgYW5kIGNsZWFuZWQgdXAgYnkgWmFjaCBCcm93biA8emFiQHJlZGhhdC5jb20+CisgKglhbmQgSW5nbyBNb2xuYXIgPG1pbmdvQHJlZGhhdC5jb20+CisgKgorICoJRml4ZXMKKyAqCU1hY2llaiBXLiBSb3p5Y2tpCToJQml0cyBmb3IgZ2VudWluZSA4MjQ4OURYIEFQSUNzOworICoJCQkJCXRoYW5rcyB0byBFcmljIEdpbG1vcmUKKyAqCQkJCQlhbmQgUm9sZiBHLiBUZXdzCisgKgkJCQkJZm9yIHRlc3RpbmcgdGhlc2UgZXh0ZW5zaXZlbHkKKyAqCVBhdWwgRGllZmVuYmF1Z2gJOglBZGRlZCBmdWxsIEFDUEkgc3VwcG9ydAorICovCisKKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvbWMxNDY4MThydGMuaD4KKyNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgorI2luY2x1ZGUgPGxpbnV4L2FjcGkuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zeXNkZXYuaD4KKyNpbmNsdWRlIDxsaW51eC9tc2kuaD4KKyNpbmNsdWRlIDxsaW51eC9odGlycS5oPgorI2luY2x1ZGUgPGxpbnV4L2ZyZWV6ZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9rdGhyZWFkLmg+CisjaW5jbHVkZSA8bGludXgvamlmZmllcy5oPgkvKiB0aW1lX2FmdGVyKCkgKi8KKyNpZmRlZiBDT05GSUdfQUNQSQorI2luY2x1ZGUgPGFjcGkvYWNwaV9idXMuaD4KKyNlbmRpZgorI2luY2x1ZGUgPGxpbnV4L2Jvb3RtZW0uaD4KKyNpbmNsdWRlIDxsaW51eC9kbWFyLmg+CisjaW5jbHVkZSA8bGludXgvaHBldC5oPgorCisjaW5jbHVkZSA8YXNtL2lkbGUuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vc21wLmg+CisjaW5jbHVkZSA8YXNtL2Rlc2MuaD4KKyNpbmNsdWRlIDxhc20vcHJvdG8uaD4KKyNpbmNsdWRlIDxhc20vYWNwaS5oPgorI2luY2x1ZGUgPGFzbS9kbWEuaD4KKyNpbmNsdWRlIDxhc20vdGltZXIuaD4KKyNpbmNsdWRlIDxhc20vaTgyNTkuaD4KKyNpbmNsdWRlIDxhc20vbm1pLmg+CisjaW5jbHVkZSA8YXNtL21zaWRlZi5oPgorI2luY2x1ZGUgPGFzbS9oeXBlcnRyYW5zcG9ydC5oPgorI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgorI2luY2x1ZGUgPGFzbS9pcnFfcmVtYXBwaW5nLmg+CisjaW5jbHVkZSA8YXNtL2hwZXQuaD4KKyNpbmNsdWRlIDxhc20vdXYvdXZfaHViLmg+CisjaW5jbHVkZSA8YXNtL3V2L3V2X2lycS5oPgorCisjaW5jbHVkZSA8bWFjaF9pcGkuaD4KKyNpbmNsdWRlIDxtYWNoX2FwaWMuaD4KKyNpbmNsdWRlIDxtYWNoX2FwaWNkZWYuaD4KKworI2RlZmluZSBfX2FwaWNkZWJ1Z2luaXQodHlwZSkgc3RhdGljIHR5cGUgX19pbml0CisKKy8qCisgKiAgICAgIElzIHRoZSBTaVMgQVBJQyBybXcgYnVnIHByZXNlbnQgPworICogICAgICAtMSA9IGRvbid0IGtub3csIDAgPSBubywgMSA9IHllcworICovCitpbnQgc2lzX2FwaWNfYnVnID0gLTE7CisKK3N0YXRpYyBERUZJTkVfU1BJTkxPQ0soaW9hcGljX2xvY2spOworc3RhdGljIERFRklORV9TUElOTE9DSyh2ZWN0b3JfbG9jayk7CisKKy8qCisgKiAjIG9mIElSUSByb3V0aW5nIHJlZ2lzdGVycworICovCitpbnQgbnJfaW9hcGljX3JlZ2lzdGVyc1tNQVhfSU9fQVBJQ1NdOworCisvKiBJL08gQVBJQyBlbnRyaWVzICovCitzdHJ1Y3QgbXBfY29uZmlnX2lvYXBpYyBtcF9pb2FwaWNzW01BWF9JT19BUElDU107CitpbnQgbnJfaW9hcGljczsKKworLyogTVAgSVJRIHNvdXJjZSBlbnRyaWVzICovCitzdHJ1Y3QgbXBfY29uZmlnX2ludHNyYyBtcF9pcnFzW01BWF9JUlFfU09VUkNFU107CisKKy8qICMgb2YgTVAgSVJRIHNvdXJjZSBlbnRyaWVzICovCitpbnQgbXBfaXJxX2VudHJpZXM7CisKKyNpZiBkZWZpbmVkIChDT05GSUdfTUNBKSB8fCBkZWZpbmVkIChDT05GSUdfRUlTQSkKK2ludCBtcF9idXNfaWRfdG9fdHlwZVtNQVhfTVBfQlVTU0VTXTsKKyNlbmRpZgorCitERUNMQVJFX0JJVE1BUChtcF9idXNfbm90X3BjaSwgTUFYX01QX0JVU1NFUyk7CisKK2ludCBza2lwX2lvYXBpY19zZXR1cDsKKworc3RhdGljIGludCBfX2luaXQgcGFyc2Vfbm9hcGljKGNoYXIgKnN0cikKK3sKKwkvKiBkaXNhYmxlIElPLUFQSUMgKi8KKwlkaXNhYmxlX2lvYXBpY19zZXR1cCgpOworCXJldHVybiAwOworfQorZWFybHlfcGFyYW0oIm5vYXBpYyIsIHBhcnNlX25vYXBpYyk7CisKK3N0cnVjdCBpcnFfcGluX2xpc3Q7CitzdHJ1Y3QgaXJxX2NmZyB7CisJdW5zaWduZWQgaW50IGlycTsKKwlzdHJ1Y3QgaXJxX3Bpbl9saXN0ICppcnFfMl9waW47CisJY3B1bWFza190IGRvbWFpbjsKKwljcHVtYXNrX3Qgb2xkX2RvbWFpbjsKKwl1bnNpZ25lZCBtb3ZlX2NsZWFudXBfY291bnQ7CisJdTggdmVjdG9yOworCXU4IG1vdmVfaW5fcHJvZ3Jlc3MgOiAxOworfTsKKworLyogaXJxX2NmZyBpcyBpbmRleGVkIGJ5IHRoZSBzdW0gb2YgYWxsIFJURXMgaW4gYWxsIEkvTyBBUElDcy4gKi8KK3N0YXRpYyBzdHJ1Y3QgaXJxX2NmZyBpcnFfY2ZneFtOUl9JUlFTXSA9IHsKKwlbMF0gID0geyAuaXJxID0gIDAsIC5kb21haW4gPSBDUFVfTUFTS19BTEwsIC52ZWN0b3IgPSBJUlEwX1ZFQ1RPUiwgIH0sCisJWzFdICA9IHsgLmlycSA9ICAxLCAuZG9tYWluID0gQ1BVX01BU0tfQUxMLCAudmVjdG9yID0gSVJRMV9WRUNUT1IsICB9LAorCVsyXSAgPSB7IC5pcnEgPSAgMiwgLmRvbWFpbiA9IENQVV9NQVNLX0FMTCwgLnZlY3RvciA9IElSUTJfVkVDVE9SLCAgfSwKKwlbM10gID0geyAuaXJxID0gIDMsIC5kb21haW4gPSBDUFVfTUFTS19BTEwsIC52ZWN0b3IgPSBJUlEzX1ZFQ1RPUiwgIH0sCisJWzRdICA9IHsgLmlycSA9ICA0LCAuZG9tYWluID0gQ1BVX01BU0tfQUxMLCAudmVjdG9yID0gSVJRNF9WRUNUT1IsICB9LAorCVs1XSAgPSB7IC5pcnEgPSAgNSwgLmRvbWFpbiA9IENQVV9NQVNLX0FMTCwgLnZlY3RvciA9IElSUTVfVkVDVE9SLCAgfSwKKwlbNl0gID0geyAuaXJxID0gIDYsIC5kb21haW4gPSBDUFVfTUFTS19BTEwsIC52ZWN0b3IgPSBJUlE2X1ZFQ1RPUiwgIH0sCisJWzddICA9IHsgLmlycSA9ICA3LCAuZG9tYWluID0gQ1BVX01BU0tfQUxMLCAudmVjdG9yID0gSVJRN19WRUNUT1IsICB9LAorCVs4XSAgPSB7IC5pcnEgPSAgOCwgLmRvbWFpbiA9IENQVV9NQVNLX0FMTCwgLnZlY3RvciA9IElSUThfVkVDVE9SLCAgfSwKKwlbOV0gID0geyAuaXJxID0gIDksIC5kb21haW4gPSBDUFVfTUFTS19BTEwsIC52ZWN0b3IgPSBJUlE5X1ZFQ1RPUiwgIH0sCisJWzEwXSA9IHsgLmlycSA9IDEwLCAuZG9tYWluID0gQ1BVX01BU0tfQUxMLCAudmVjdG9yID0gSVJRMTBfVkVDVE9SLCB9LAorCVsxMV0gPSB7IC5pcnEgPSAxMSwgLmRvbWFpbiA9IENQVV9NQVNLX0FMTCwgLnZlY3RvciA9IElSUTExX1ZFQ1RPUiwgfSwKKwlbMTJdID0geyAuaXJxID0gMTIsIC5kb21haW4gPSBDUFVfTUFTS19BTEwsIC52ZWN0b3IgPSBJUlExMl9WRUNUT1IsIH0sCisJWzEzXSA9IHsgLmlycSA9IDEzLCAuZG9tYWluID0gQ1BVX01BU0tfQUxMLCAudmVjdG9yID0gSVJRMTNfVkVDVE9SLCB9LAorCVsxNF0gPSB7IC5pcnEgPSAxNCwgLmRvbWFpbiA9IENQVV9NQVNLX0FMTCwgLnZlY3RvciA9IElSUTE0X1ZFQ1RPUiwgfSwKKwlbMTVdID0geyAuaXJxID0gMTUsIC5kb21haW4gPSBDUFVfTUFTS19BTEwsIC52ZWN0b3IgPSBJUlExNV9WRUNUT1IsIH0sCit9OworCisjZGVmaW5lIGZvcl9lYWNoX2lycV9jZmcoaXJxLCBjZmcpCQlcCisJZm9yIChpcnEgPSAwLCBjZmcgPSBpcnFfY2ZneDsgaXJxIDwgbnJfaXJxczsgaXJxKyssIGNmZysrKQorCitzdGF0aWMgc3RydWN0IGlycV9jZmcgKmlycV9jZmcodW5zaWduZWQgaW50IGlycSkKK3sKKwlyZXR1cm4gaXJxIDwgbnJfaXJxcyA/IGlycV9jZmd4ICsgaXJxIDogTlVMTDsKK30KKworc3RhdGljIHN0cnVjdCBpcnFfY2ZnICppcnFfY2ZnX2FsbG9jKHVuc2lnbmVkIGludCBpcnEpCit7CisJcmV0dXJuIGlycV9jZmcoaXJxKTsKK30KKworLyoKKyAqIFJvdWdoIGVzdGltYXRpb24gb2YgaG93IG1hbnkgc2hhcmVkIElSUXMgdGhlcmUgYXJlLCBjYW4gYmUgY2hhbmdlZAorICogYW55dGltZS4KKyAqLworI2RlZmluZSBNQVhfUExVU19TSEFSRURfSVJRUyBOUl9JUlFTCisjZGVmaW5lIFBJTl9NQVBfU0laRSAoTUFYX1BMVVNfU0hBUkVEX0lSUVMgKyBOUl9JUlFTKQorCisvKgorICogVGhpcyBpcyBwZXJmb3JtYW5jZS1jcml0aWNhbCwgd2Ugd2FudCB0byBkbyBpdCBPKDEpCisgKgorICogdGhlIGluZGV4aW5nIG9yZGVyIG9mIHRoaXMgYXJyYXkgZmF2b3JzIDE6MSBtYXBwaW5ncworICogYmV0d2VlbiBwaW5zIGFuZCBJUlFzLgorICovCisKK3N0cnVjdCBpcnFfcGluX2xpc3QgeworCWludCBhcGljLCBwaW47CisJc3RydWN0IGlycV9waW5fbGlzdCAqbmV4dDsKK307CisKK3N0YXRpYyBzdHJ1Y3QgaXJxX3Bpbl9saXN0IGlycV8yX3Bpbl9oZWFkW1BJTl9NQVBfU0laRV07CitzdGF0aWMgc3RydWN0IGlycV9waW5fbGlzdCAqaXJxXzJfcGluX3B0cjsKKworc3RhdGljIHZvaWQgX19pbml0IGlycV8yX3Bpbl9pbml0KHZvaWQpCit7CisJc3RydWN0IGlycV9waW5fbGlzdCAqcGluID0gaXJxXzJfcGluX2hlYWQ7CisJaW50IGk7CisKKwlmb3IgKGkgPSAxOyBpIDwgUElOX01BUF9TSVpFOyBpKyspCisJCXBpbltpLTFdLm5leHQgPSAmcGluW2ldOworCisJaXJxXzJfcGluX3B0ciA9ICZwaW5bMF07Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaXJxX3Bpbl9saXN0ICpnZXRfb25lX2ZyZWVfaXJxXzJfcGluKHZvaWQpCit7CisJc3RydWN0IGlycV9waW5fbGlzdCAqcGluID0gaXJxXzJfcGluX3B0cjsKKworCWlmICghcGluKQorCQlwYW5pYygiY2FuIG5vdCBnZXQgbW9yZSBpcnFfMl9waW5cbiIpOworCisJaXJxXzJfcGluX3B0ciA9IHBpbi0+bmV4dDsKKwlwaW4tPm5leHQgPSBOVUxMOworCXJldHVybiBwaW47Cit9CisKK3N0cnVjdCBpb19hcGljIHsKKwl1bnNpZ25lZCBpbnQgaW5kZXg7CisJdW5zaWduZWQgaW50IHVudXNlZFszXTsKKwl1bnNpZ25lZCBpbnQgZGF0YTsKK307CisKK3N0YXRpYyBfX2F0dHJpYnV0ZV9jb25zdF9fIHN0cnVjdCBpb19hcGljIF9faW9tZW0gKmlvX2FwaWNfYmFzZShpbnQgaWR4KQoreworCXJldHVybiAodm9pZCBfX2lvbWVtICopIF9fZml4X3RvX3ZpcnQoRklYX0lPX0FQSUNfQkFTRV8wICsgaWR4KQorCQkrIChtcF9pb2FwaWNzW2lkeF0ubXBfYXBpY2FkZHIgJiB+UEFHRV9NQVNLKTsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgaW9fYXBpY19yZWFkKHVuc2lnbmVkIGludCBhcGljLCB1bnNpZ25lZCBpbnQgcmVnKQoreworCXN0cnVjdCBpb19hcGljIF9faW9tZW0gKmlvX2FwaWMgPSBpb19hcGljX2Jhc2UoYXBpYyk7CisJd3JpdGVsKHJlZywgJmlvX2FwaWMtPmluZGV4KTsKKwlyZXR1cm4gcmVhZGwoJmlvX2FwaWMtPmRhdGEpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgaW9fYXBpY193cml0ZSh1bnNpZ25lZCBpbnQgYXBpYywgdW5zaWduZWQgaW50IHJlZywgdW5zaWduZWQgaW50IHZhbHVlKQoreworCXN0cnVjdCBpb19hcGljIF9faW9tZW0gKmlvX2FwaWMgPSBpb19hcGljX2Jhc2UoYXBpYyk7CisJd3JpdGVsKHJlZywgJmlvX2FwaWMtPmluZGV4KTsKKwl3cml0ZWwodmFsdWUsICZpb19hcGljLT5kYXRhKTsKK30KKworLyoKKyAqIFJlLXdyaXRlIGEgdmFsdWU6IHRvIGJlIHVzZWQgZm9yIHJlYWQtbW9kaWZ5LXdyaXRlCisgKiBjeWNsZXMgd2hlcmUgdGhlIHJlYWQgYWxyZWFkeSBzZXQgdXAgdGhlIGluZGV4IHJlZ2lzdGVyLgorICoKKyAqIE9sZGVyIFNpUyBBUElDIHJlcXVpcmVzIHdlIHJld3JpdGUgdGhlIGluZGV4IHJlZ2lzdGVyCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBpb19hcGljX21vZGlmeSh1bnNpZ25lZCBpbnQgYXBpYywgdW5zaWduZWQgaW50IHJlZywgdW5zaWduZWQgaW50IHZhbHVlKQoreworCXN0cnVjdCBpb19hcGljIF9faW9tZW0gKmlvX2FwaWMgPSBpb19hcGljX2Jhc2UoYXBpYyk7CisKKwlpZiAoc2lzX2FwaWNfYnVnKQorCQl3cml0ZWwocmVnLCAmaW9fYXBpYy0+aW5kZXgpOworCXdyaXRlbCh2YWx1ZSwgJmlvX2FwaWMtPmRhdGEpOworfQorCitzdGF0aWMgYm9vbCBpb19hcGljX2xldmVsX2Fja19wZW5kaW5nKHVuc2lnbmVkIGludCBpcnEpCit7CisJc3RydWN0IGlycV9waW5fbGlzdCAqZW50cnk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgaXJxX2NmZyAqY2ZnID0gaXJxX2NmZyhpcnEpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmlvYXBpY19sb2NrLCBmbGFncyk7CisJZW50cnkgPSBjZmctPmlycV8yX3BpbjsKKwlmb3IgKDs7KSB7CisJCXVuc2lnbmVkIGludCByZWc7CisJCWludCBwaW47CisKKwkJaWYgKCFlbnRyeSkKKwkJCWJyZWFrOworCQlwaW4gPSBlbnRyeS0+cGluOworCQlyZWcgPSBpb19hcGljX3JlYWQoZW50cnktPmFwaWMsIDB4MTAgKyBwaW4qMik7CisJCS8qIElzIHRoZSByZW1vdGUgSVJSIGJpdCBzZXQ/ICovCisJCWlmIChyZWcgJiBJT19BUElDX1JFRElSX1JFTU9URV9JUlIpIHsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYXBpY19sb2NrLCBmbGFncyk7CisJCQlyZXR1cm4gdHJ1ZTsKKwkJfQorCQlpZiAoIWVudHJ5LT5uZXh0KQorCQkJYnJlYWs7CisJCWVudHJ5ID0gZW50cnktPm5leHQ7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYXBpY19sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gZmFsc2U7Cit9CisKK3VuaW9uIGVudHJ5X3VuaW9uIHsKKwlzdHJ1Y3QgeyB1MzIgdzEsIHcyOyB9OworCXN0cnVjdCBJT19BUElDX3JvdXRlX2VudHJ5IGVudHJ5OworfTsKKworc3RhdGljIHN0cnVjdCBJT19BUElDX3JvdXRlX2VudHJ5IGlvYXBpY19yZWFkX2VudHJ5KGludCBhcGljLCBpbnQgcGluKQoreworCXVuaW9uIGVudHJ5X3VuaW9uIGV1OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmlvYXBpY19sb2NrLCBmbGFncyk7CisJZXUudzEgPSBpb19hcGljX3JlYWQoYXBpYywgMHgxMCArIDIgKiBwaW4pOworCWV1LncyID0gaW9fYXBpY19yZWFkKGFwaWMsIDB4MTEgKyAyICogcGluKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2FwaWNfbG9jaywgZmxhZ3MpOworCXJldHVybiBldS5lbnRyeTsKK30KKworLyoKKyAqIFdoZW4gd2Ugd3JpdGUgYSBuZXcgSU8gQVBJQyByb3V0aW5nIGVudHJ5LCB3ZSBuZWVkIHRvIHdyaXRlIHRoZSBoaWdoCisgKiB3b3JkIGZpcnN0ISBJZiB0aGUgbWFzayBiaXQgaW4gdGhlIGxvdyB3b3JkIGlzIGNsZWFyLCB3ZSB3aWxsIGVuYWJsZQorICogdGhlIGludGVycnVwdCwgYW5kIHdlIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSBlbnRyeSBpcyBmdWxseSBwb3B1bGF0ZWQKKyAqIGJlZm9yZSB0aGF0IGhhcHBlbnMuCisgKi8KK3N0YXRpYyB2b2lkCitfX2lvYXBpY193cml0ZV9lbnRyeShpbnQgYXBpYywgaW50IHBpbiwgc3RydWN0IElPX0FQSUNfcm91dGVfZW50cnkgZSkKK3sKKwl1bmlvbiBlbnRyeV91bmlvbiBldTsKKwlldS5lbnRyeSA9IGU7CisJaW9fYXBpY193cml0ZShhcGljLCAweDExICsgMipwaW4sIGV1LncyKTsKKwlpb19hcGljX3dyaXRlKGFwaWMsIDB4MTAgKyAyKnBpbiwgZXUudzEpOworfQorCitzdGF0aWMgdm9pZCBpb2FwaWNfd3JpdGVfZW50cnkoaW50IGFwaWMsIGludCBwaW4sIHN0cnVjdCBJT19BUElDX3JvdXRlX2VudHJ5IGUpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaW9hcGljX2xvY2ssIGZsYWdzKTsKKwlfX2lvYXBpY193cml0ZV9lbnRyeShhcGljLCBwaW4sIGUpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYXBpY19sb2NrLCBmbGFncyk7Cit9CisKKy8qCisgKiBXaGVuIHdlIG1hc2sgYW4gSU8gQVBJQyByb3V0aW5nIGVudHJ5LCB3ZSBuZWVkIHRvIHdyaXRlIHRoZSBsb3cKKyAqIHdvcmQgZmlyc3QsIGluIG9yZGVyIHRvIHNldCB0aGUgbWFzayBiaXQgYmVmb3JlIHdlIGNoYW5nZSB0aGUKKyAqIGhpZ2ggYml0cyEKKyAqLworc3RhdGljIHZvaWQgaW9hcGljX21hc2tfZW50cnkoaW50IGFwaWMsIGludCBwaW4pCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1bmlvbiBlbnRyeV91bmlvbiBldSA9IHsgLmVudHJ5Lm1hc2sgPSAxIH07CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaW9hcGljX2xvY2ssIGZsYWdzKTsKKwlpb19hcGljX3dyaXRlKGFwaWMsIDB4MTAgKyAyKnBpbiwgZXUudzEpOworCWlvX2FwaWNfd3JpdGUoYXBpYywgMHgxMSArIDIqcGluLCBldS53Mik7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9hcGljX2xvY2ssIGZsYWdzKTsKK30KKworI2lmZGVmIENPTkZJR19TTVAKK3N0YXRpYyB2b2lkIF9fdGFyZ2V0X0lPX0FQSUNfaXJxKHVuc2lnbmVkIGludCBpcnEsIHVuc2lnbmVkIGludCBkZXN0LCB1OCB2ZWN0b3IpCit7CisJaW50IGFwaWMsIHBpbjsKKwlzdHJ1Y3QgaXJxX2NmZyAqY2ZnOworCXN0cnVjdCBpcnFfcGluX2xpc3QgKmVudHJ5OworCisJY2ZnID0gaXJxX2NmZyhpcnEpOworCWVudHJ5ID0gY2ZnLT5pcnFfMl9waW47CisJZm9yICg7OykgeworCQl1bnNpZ25lZCBpbnQgcmVnOworCisJCWlmICghZW50cnkpCisJCQlicmVhazsKKworCQlhcGljID0gZW50cnktPmFwaWM7CisJCXBpbiA9IGVudHJ5LT5waW47CisjaWZkZWYgQ09ORklHX0lOVFJfUkVNQVAKKwkJLyoKKwkJICogV2l0aCBpbnRlcnJ1cHQtcmVtYXBwaW5nLCBkZXN0aW5hdGlvbiBpbmZvcm1hdGlvbiBjb21lcworCQkgKiBmcm9tIGludGVycnVwdC1yZW1hcHBpbmcgdGFibGUgZW50cnkuCisJCSAqLworCQlpZiAoIWlycV9yZW1hcHBlZChpcnEpKQorCQkJaW9fYXBpY193cml0ZShhcGljLCAweDExICsgcGluKjIsIGRlc3QpOworI2Vsc2UKKwkJaW9fYXBpY193cml0ZShhcGljLCAweDExICsgcGluKjIsIGRlc3QpOworI2VuZGlmCisJCXJlZyA9IGlvX2FwaWNfcmVhZChhcGljLCAweDEwICsgcGluKjIpOworCQlyZWcgJj0gfklPX0FQSUNfUkVESVJfVkVDVE9SX01BU0s7CisJCXJlZyB8PSB2ZWN0b3I7CisJCWlvX2FwaWNfbW9kaWZ5KGFwaWMsIDB4MTAgKyBwaW4qMiwgcmVnKTsKKwkJaWYgKCFlbnRyeS0+bmV4dCkKKwkJCWJyZWFrOworCQllbnRyeSA9IGVudHJ5LT5uZXh0OworCX0KK30KKworc3RhdGljIGludCBhc3NpZ25faXJxX3ZlY3RvcihpbnQgaXJxLCBjcHVtYXNrX3QgbWFzayk7CisKK3N0YXRpYyB2b2lkIHNldF9pb2FwaWNfYWZmaW5pdHlfaXJxKHVuc2lnbmVkIGludCBpcnEsIGNwdW1hc2tfdCBtYXNrKQoreworCXN0cnVjdCBpcnFfY2ZnICpjZmc7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1bnNpZ25lZCBpbnQgZGVzdDsKKwljcHVtYXNrX3QgdG1wOworCXN0cnVjdCBpcnFfZGVzYyAqZGVzYzsKKworCWNwdXNfYW5kKHRtcCwgbWFzaywgY3B1X29ubGluZV9tYXApOworCWlmIChjcHVzX2VtcHR5KHRtcCkpCisJCXJldHVybjsKKworCWNmZyA9IGlycV9jZmcoaXJxKTsKKwlpZiAoYXNzaWduX2lycV92ZWN0b3IoaXJxLCBtYXNrKSkKKwkJcmV0dXJuOworCisJY3B1c19hbmQodG1wLCBjZmctPmRvbWFpbiwgbWFzayk7CisJZGVzdCA9IGNwdV9tYXNrX3RvX2FwaWNpZCh0bXApOworCS8qCisJICogT25seSB0aGUgaGlnaCA4IGJpdHMgYXJlIHZhbGlkLgorCSAqLworCWRlc3QgPSBTRVRfQVBJQ19MT0dJQ0FMX0lEKGRlc3QpOworCisJZGVzYyA9IGlycV90b19kZXNjKGlycSk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmlvYXBpY19sb2NrLCBmbGFncyk7CisJX190YXJnZXRfSU9fQVBJQ19pcnEoaXJxLCBkZXN0LCBjZmctPnZlY3Rvcik7CisJZGVzYy0+YWZmaW5pdHkgPSBtYXNrOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYXBpY19sb2NrLCBmbGFncyk7Cit9CisjZW5kaWYgLyogQ09ORklHX1NNUCAqLworCisvKgorICogVGhlIGNvbW1vbiBjYXNlIGlzIDE6MSBJUlE8LT5waW4gbWFwcGluZ3MuIFNvbWV0aW1lcyB0aGVyZSBhcmUKKyAqIHNoYXJlZCBJU0Etc3BhY2UgSVJRcywgc28gd2UgaGF2ZSB0byBzdXBwb3J0IHRoZW0uIFdlIGFyZSBzdXBlcgorICogZmFzdCBpbiB0aGUgY29tbW9uIGNhc2UsIGFuZCBmYXN0IGZvciBzaGFyZWQgSVNBLXNwYWNlIElSUXMuCisgKi8KK3N0YXRpYyB2b2lkIGFkZF9waW5fdG9faXJxKHVuc2lnbmVkIGludCBpcnEsIGludCBhcGljLCBpbnQgcGluKQoreworCXN0cnVjdCBpcnFfY2ZnICpjZmc7CisJc3RydWN0IGlycV9waW5fbGlzdCAqZW50cnk7CisKKwkvKiBmaXJzdCB0aW1lIHRvIHJlZmVyIGlycV9jZmcsIHNvIHdpdGggbmV3ICovCisJY2ZnID0gaXJxX2NmZ19hbGxvYyhpcnEpOworCWVudHJ5ID0gY2ZnLT5pcnFfMl9waW47CisJaWYgKCFlbnRyeSkgeworCQllbnRyeSA9IGdldF9vbmVfZnJlZV9pcnFfMl9waW4oKTsKKwkJY2ZnLT5pcnFfMl9waW4gPSBlbnRyeTsKKwkJZW50cnktPmFwaWMgPSBhcGljOworCQllbnRyeS0+cGluID0gcGluOworCQlyZXR1cm47CisJfQorCisJd2hpbGUgKGVudHJ5LT5uZXh0KSB7CisJCS8qIG5vdCBhZ2FpbiwgcGxlYXNlICovCisJCWlmIChlbnRyeS0+YXBpYyA9PSBhcGljICYmIGVudHJ5LT5waW4gPT0gcGluKQorCQkJcmV0dXJuOworCisJCWVudHJ5ID0gZW50cnktPm5leHQ7CisJfQorCisJZW50cnktPm5leHQgPSBnZXRfb25lX2ZyZWVfaXJxXzJfcGluKCk7CisJZW50cnkgPSBlbnRyeS0+bmV4dDsKKwllbnRyeS0+YXBpYyA9IGFwaWM7CisJZW50cnktPnBpbiA9IHBpbjsKK30KKworLyoKKyAqIFJlcm91dGUgYW4gSVJRIHRvIGEgZGlmZmVyZW50IHBpbi4KKyAqLworc3RhdGljIHZvaWQgX19pbml0IHJlcGxhY2VfcGluX2F0X2lycSh1bnNpZ25lZCBpbnQgaXJxLAorCQkJCSAgICAgIGludCBvbGRhcGljLCBpbnQgb2xkcGluLAorCQkJCSAgICAgIGludCBuZXdhcGljLCBpbnQgbmV3cGluKQoreworCXN0cnVjdCBpcnFfY2ZnICpjZmcgPSBpcnFfY2ZnKGlycSk7CisJc3RydWN0IGlycV9waW5fbGlzdCAqZW50cnkgPSBjZmctPmlycV8yX3BpbjsKKwlpbnQgcmVwbGFjZWQgPSAwOworCisJd2hpbGUgKGVudHJ5KSB7CisJCWlmIChlbnRyeS0+YXBpYyA9PSBvbGRhcGljICYmIGVudHJ5LT5waW4gPT0gb2xkcGluKSB7CisJCQllbnRyeS0+YXBpYyA9IG5ld2FwaWM7CisJCQllbnRyeS0+cGluID0gbmV3cGluOworCQkJcmVwbGFjZWQgPSAxOworCQkJLyogZXZlcnkgb25lIGlzIGRpZmZlcmVudCwgcmlnaHQ/ICovCisJCQlicmVhazsKKwkJfQorCQllbnRyeSA9IGVudHJ5LT5uZXh0OworCX0KKworCS8qIHdoeT8gY2FsbCByZXBsYWNlIGJlZm9yZSBhZGQ/ICovCisJaWYgKCFyZXBsYWNlZCkKKwkJYWRkX3Bpbl90b19pcnEoaXJxLCBuZXdhcGljLCBuZXdwaW4pOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgaW9fYXBpY19tb2RpZnlfaXJxKHVuc2lnbmVkIGludCBpcnEsCisJCQkJaW50IG1hc2tfYW5kLCBpbnQgbWFza19vciwKKwkJCQl2b2lkICgqZmluYWwpKHN0cnVjdCBpcnFfcGluX2xpc3QgKmVudHJ5KSkKK3sKKwlpbnQgcGluOworCXN0cnVjdCBpcnFfY2ZnICpjZmc7CisJc3RydWN0IGlycV9waW5fbGlzdCAqZW50cnk7CisKKwljZmcgPSBpcnFfY2ZnKGlycSk7CisJZm9yIChlbnRyeSA9IGNmZy0+aXJxXzJfcGluOyBlbnRyeSAhPSBOVUxMOyBlbnRyeSA9IGVudHJ5LT5uZXh0KSB7CisJCXVuc2lnbmVkIGludCByZWc7CisJCXBpbiA9IGVudHJ5LT5waW47CisJCXJlZyA9IGlvX2FwaWNfcmVhZChlbnRyeS0+YXBpYywgMHgxMCArIHBpbiAqIDIpOworCQlyZWcgJj0gbWFza19hbmQ7CisJCXJlZyB8PSBtYXNrX29yOworCQlpb19hcGljX21vZGlmeShlbnRyeS0+YXBpYywgMHgxMCArIHBpbiAqIDIsIHJlZyk7CisJCWlmIChmaW5hbCkKKwkJCWZpbmFsKGVudHJ5KTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIF9fdW5tYXNrX0lPX0FQSUNfaXJxKHVuc2lnbmVkIGludCBpcnEpCit7CisJaW9fYXBpY19tb2RpZnlfaXJxKGlycSwgfklPX0FQSUNfUkVESVJfTUFTS0VELCAwLCBOVUxMKTsKK30KKworI2lmZGVmIENPTkZJR19YODZfNjQKK3ZvaWQgaW9fYXBpY19zeW5jKHN0cnVjdCBpcnFfcGluX2xpc3QgKmVudHJ5KQoreworCS8qCisJICogU3luY2hyb25pemUgdGhlIElPLUFQSUMgYW5kIHRoZSBDUFUgYnkgZG9pbmcKKwkgKiBhIGR1bW15IHJlYWQgZnJvbSB0aGUgSU8tQVBJQworCSAqLworCXN0cnVjdCBpb19hcGljIF9faW9tZW0gKmlvX2FwaWM7CisJaW9fYXBpYyA9IGlvX2FwaWNfYmFzZShlbnRyeS0+YXBpYyk7CisJcmVhZGwoJmlvX2FwaWMtPmRhdGEpOworfQorCitzdGF0aWMgdm9pZCBfX21hc2tfSU9fQVBJQ19pcnEodW5zaWduZWQgaW50IGlycSkKK3sKKwlpb19hcGljX21vZGlmeV9pcnEoaXJxLCB+MCwgSU9fQVBJQ19SRURJUl9NQVNLRUQsICZpb19hcGljX3N5bmMpOworfQorI2Vsc2UgLyogQ09ORklHX1g4Nl8zMiAqLworc3RhdGljIHZvaWQgX19tYXNrX0lPX0FQSUNfaXJxKHVuc2lnbmVkIGludCBpcnEpCit7CisJaW9fYXBpY19tb2RpZnlfaXJxKGlycSwgfjAsIElPX0FQSUNfUkVESVJfTUFTS0VELCBOVUxMKTsKK30KKworc3RhdGljIHZvaWQgX19tYXNrX2FuZF9lZGdlX0lPX0FQSUNfaXJxKHVuc2lnbmVkIGludCBpcnEpCit7CisJaW9fYXBpY19tb2RpZnlfaXJxKGlycSwgfklPX0FQSUNfUkVESVJfTEVWRUxfVFJJR0dFUiwKKwkJCUlPX0FQSUNfUkVESVJfTUFTS0VELCBOVUxMKTsKK30KKworc3RhdGljIHZvaWQgX191bm1hc2tfYW5kX2xldmVsX0lPX0FQSUNfaXJxKHVuc2lnbmVkIGludCBpcnEpCit7CisJaW9fYXBpY19tb2RpZnlfaXJxKGlycSwgfklPX0FQSUNfUkVESVJfTUFTS0VELAorCQkJSU9fQVBJQ19SRURJUl9MRVZFTF9UUklHR0VSLCBOVUxMKTsKK30KKyNlbmRpZiAvKiBDT05GSUdfWDg2XzMyICovCisKK3N0YXRpYyB2b2lkIG1hc2tfSU9fQVBJQ19pcnEgKHVuc2lnbmVkIGludCBpcnEpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZpb2FwaWNfbG9jaywgZmxhZ3MpOworCV9fbWFza19JT19BUElDX2lycShpcnEpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYXBpY19sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyB2b2lkIHVubWFza19JT19BUElDX2lycSAodW5zaWduZWQgaW50IGlycSkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmlvYXBpY19sb2NrLCBmbGFncyk7CisJX191bm1hc2tfSU9fQVBJQ19pcnEoaXJxKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2FwaWNfbG9jaywgZmxhZ3MpOworfQorCitzdGF0aWMgdm9pZCBjbGVhcl9JT19BUElDX3Bpbih1bnNpZ25lZCBpbnQgYXBpYywgdW5zaWduZWQgaW50IHBpbikKK3sKKwlzdHJ1Y3QgSU9fQVBJQ19yb3V0ZV9lbnRyeSBlbnRyeTsKKworCS8qIENoZWNrIGRlbGl2ZXJ5X21vZGUgdG8gYmUgc3VyZSB3ZSdyZSBub3QgY2xlYXJpbmcgYW4gU01JIHBpbiAqLworCWVudHJ5ID0gaW9hcGljX3JlYWRfZW50cnkoYXBpYywgcGluKTsKKwlpZiAoZW50cnkuZGVsaXZlcnlfbW9kZSA9PSBkZXN0X1NNSSkKKwkJcmV0dXJuOworCS8qCisJICogRGlzYWJsZSBpdCBpbiB0aGUgSU8tQVBJQyBpcnEtcm91dGluZyB0YWJsZToKKwkgKi8KKwlpb2FwaWNfbWFza19lbnRyeShhcGljLCBwaW4pOworfQorCitzdGF0aWMgdm9pZCBjbGVhcl9JT19BUElDICh2b2lkKQoreworCWludCBhcGljLCBwaW47CisKKwlmb3IgKGFwaWMgPSAwOyBhcGljIDwgbnJfaW9hcGljczsgYXBpYysrKQorCQlmb3IgKHBpbiA9IDA7IHBpbiA8IG5yX2lvYXBpY19yZWdpc3RlcnNbYXBpY107IHBpbisrKQorCQkJY2xlYXJfSU9fQVBJQ19waW4oYXBpYywgcGluKTsKK30KKworI2lmICFkZWZpbmVkKENPTkZJR19TTVApICYmIGRlZmluZWQoQ09ORklHX1g4Nl8zMikKK3ZvaWQgc2VuZF9JUElfc2VsZihpbnQgdmVjdG9yKQoreworCXVuc2lnbmVkIGludCBjZmc7CisKKwkvKgorCSAqIFdhaXQgZm9yIGlkbGUuCisJICovCisJYXBpY193YWl0X2ljcl9pZGxlKCk7CisJY2ZnID0gQVBJQ19ETV9GSVhFRCB8IEFQSUNfREVTVF9TRUxGIHwgdmVjdG9yIHwgQVBJQ19ERVNUX0xPR0lDQUw7CisJLyoKKwkgKiBTZW5kIHRoZSBJUEkuIFRoZSB3cml0ZSB0byBBUElDX0lDUiBmaXJlcyB0aGlzIG9mZi4KKwkgKi8KKwlhcGljX3dyaXRlKEFQSUNfSUNSLCBjZmcpOworfQorI2VuZGlmIC8qICFDT05GSUdfU01QICYmIENPTkZJR19YODZfMzIqLworCisjaWZkZWYgQ09ORklHX1g4Nl8zMgorLyoKKyAqIHN1cHBvcnQgZm9yIGJyb2tlbiBNUCBCSU9TcywgZW5hYmxlcyBoYW5kLXJlZGlyZWN0aW9uIG9mIFBJUlEwLTcgdG8KKyAqIHNwZWNpZmljIENQVS1zaWRlIElSUXMuCisgKi8KKworI2RlZmluZSBNQVhfUElSUVMgOAorc3RhdGljIGludCBwaXJxX2VudHJpZXMgW01BWF9QSVJRU107CitzdGF0aWMgaW50IHBpcnFzX2VuYWJsZWQ7CisKK3N0YXRpYyBpbnQgX19pbml0IGlvYXBpY19waXJxX3NldHVwKGNoYXIgKnN0cikKK3sKKwlpbnQgaSwgbWF4OworCWludCBpbnRzW01BWF9QSVJRUysxXTsKKworCWdldF9vcHRpb25zKHN0ciwgQVJSQVlfU0laRShpbnRzKSwgaW50cyk7CisKKwlmb3IgKGkgPSAwOyBpIDwgTUFYX1BJUlFTOyBpKyspCisJCXBpcnFfZW50cmllc1tpXSA9IC0xOworCisJcGlycXNfZW5hYmxlZCA9IDE7CisJYXBpY19wcmludGsoQVBJQ19WRVJCT1NFLCBLRVJOX0lORk8KKwkJCSJQSVJRIHJlZGlyZWN0aW9uLCB3b3JraW5nIGFyb3VuZCBicm9rZW4gTVAtQklPUy5cbiIpOworCW1heCA9IE1BWF9QSVJRUzsKKwlpZiAoaW50c1swXSA8IE1BWF9QSVJRUykKKwkJbWF4ID0gaW50c1swXTsKKworCWZvciAoaSA9IDA7IGkgPCBtYXg7IGkrKykgeworCQlhcGljX3ByaW50ayhBUElDX1ZFUkJPU0UsIEtFUk5fREVCVUcKKwkJCQkiLi4uIFBJUlElZCAtPiBJUlEgJWRcbiIsIGksIGludHNbaSsxXSk7CisJCS8qCisJCSAqIFBJUlFzIGFyZSBtYXBwZWQgdXBzaWRlIGRvd24sIHVzdWFsbHkuCisJCSAqLworCQlwaXJxX2VudHJpZXNbTUFYX1BJUlFTLWktMV0gPSBpbnRzW2krMV07CisJfQorCXJldHVybiAxOworfQorCitfX3NldHVwKCJwaXJxPSIsIGlvYXBpY19waXJxX3NldHVwKTsKKyNlbmRpZiAvKiBDT05GSUdfWDg2XzMyICovCisKKyNpZmRlZiBDT05GSUdfSU5UUl9SRU1BUAorLyogSS9PIEFQSUMgUlRFIGNvbnRlbnRzIGF0IHRoZSBPUyBib290IHVwICovCitzdGF0aWMgc3RydWN0IElPX0FQSUNfcm91dGVfZW50cnkgKmVhcmx5X2lvYXBpY19lbnRyaWVzW01BWF9JT19BUElDU107CisKKy8qCisgKiBTYXZlcyBhbmQgbWFza3MgYWxsIHRoZSB1bm1hc2tlZCBJTy1BUElDIFJURSdzCisgKi8KK2ludCBzYXZlX21hc2tfSU9fQVBJQ19zZXR1cCh2b2lkKQoreworCXVuaW9uIElPX0FQSUNfcmVnXzAxIHJlZ18wMTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCBhcGljLCBwaW47CisKKwkvKgorCSAqIFRoZSBudW1iZXIgb2YgSU8tQVBJQyBJUlEgcmVnaXN0ZXJzICg9PSAjcGlucyk6CisJICovCisJZm9yIChhcGljID0gMDsgYXBpYyA8IG5yX2lvYXBpY3M7IGFwaWMrKykgeworCQlzcGluX2xvY2tfaXJxc2F2ZSgmaW9hcGljX2xvY2ssIGZsYWdzKTsKKwkJcmVnXzAxLnJhdyA9IGlvX2FwaWNfcmVhZChhcGljLCAxKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9hcGljX2xvY2ssIGZsYWdzKTsKKwkJbnJfaW9hcGljX3JlZ2lzdGVyc1thcGljXSA9IHJlZ18wMS5iaXRzLmVudHJpZXMrMTsKKwl9CisKKwlmb3IgKGFwaWMgPSAwOyBhcGljIDwgbnJfaW9hcGljczsgYXBpYysrKSB7CisJCWVhcmx5X2lvYXBpY19lbnRyaWVzW2FwaWNdID0KKwkJCWt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBJT19BUElDX3JvdXRlX2VudHJ5KSAqCisJCQkJbnJfaW9hcGljX3JlZ2lzdGVyc1thcGljXSwgR0ZQX0tFUk5FTCk7CisJCWlmICghZWFybHlfaW9hcGljX2VudHJpZXNbYXBpY10pCisJCQlnb3RvIG5vbWVtOworCX0KKworCWZvciAoYXBpYyA9IDA7IGFwaWMgPCBucl9pb2FwaWNzOyBhcGljKyspCisJCWZvciAocGluID0gMDsgcGluIDwgbnJfaW9hcGljX3JlZ2lzdGVyc1thcGljXTsgcGluKyspIHsKKwkJCXN0cnVjdCBJT19BUElDX3JvdXRlX2VudHJ5IGVudHJ5OworCisJCQllbnRyeSA9IGVhcmx5X2lvYXBpY19lbnRyaWVzW2FwaWNdW3Bpbl0gPQorCQkJCWlvYXBpY19yZWFkX2VudHJ5KGFwaWMsIHBpbik7CisJCQlpZiAoIWVudHJ5Lm1hc2spIHsKKwkJCQllbnRyeS5tYXNrID0gMTsKKwkJCQlpb2FwaWNfd3JpdGVfZW50cnkoYXBpYywgcGluLCBlbnRyeSk7CisJCQl9CisJCX0KKworCXJldHVybiAwOworCitub21lbToKKwl3aGlsZSAoYXBpYyA+PSAwKQorCQlrZnJlZShlYXJseV9pb2FwaWNfZW50cmllc1thcGljLS1dKTsKKwltZW1zZXQoZWFybHlfaW9hcGljX2VudHJpZXMsIDAsCisJCUFSUkFZX1NJWkUoZWFybHlfaW9hcGljX2VudHJpZXMpKTsKKworCXJldHVybiAtRU5PTUVNOworfQorCit2b2lkIHJlc3RvcmVfSU9fQVBJQ19zZXR1cCh2b2lkKQoreworCWludCBhcGljLCBwaW47CisKKwlmb3IgKGFwaWMgPSAwOyBhcGljIDwgbnJfaW9hcGljczsgYXBpYysrKSB7CisJCWlmICghZWFybHlfaW9hcGljX2VudHJpZXNbYXBpY10pCisJCQlicmVhazsKKwkJZm9yIChwaW4gPSAwOyBwaW4gPCBucl9pb2FwaWNfcmVnaXN0ZXJzW2FwaWNdOyBwaW4rKykKKwkJCWlvYXBpY193cml0ZV9lbnRyeShhcGljLCBwaW4sCisJCQkJCSAgIGVhcmx5X2lvYXBpY19lbnRyaWVzW2FwaWNdW3Bpbl0pOworCQlrZnJlZShlYXJseV9pb2FwaWNfZW50cmllc1thcGljXSk7CisJCWVhcmx5X2lvYXBpY19lbnRyaWVzW2FwaWNdID0gTlVMTDsKKwl9Cit9CisKK3ZvaWQgcmVpbml0X2ludHJfcmVtYXBwZWRfSU9fQVBJQyhpbnQgaW50cl9yZW1hcHBpbmcpCit7CisJLyoKKwkgKiBmb3Igbm93IHBsYWluIHJlc3RvcmUgb2YgcHJldmlvdXMgc2V0dGluZ3MuCisJICogVEJEOiBJbiB0aGUgY2FzZSBvZiBPUyBlbmFibGluZyBpbnRlcnJ1cHQtcmVtYXBwaW5nLAorCSAqIElPLUFQSUMgUlRFJ3MgbmVlZCB0byBiZSBzZXR1cCB0byBwb2ludCB0byBpbnRlcnJ1cHQtcmVtYXBwaW5nCisJICogdGFibGUgZW50cmllcy4gZm9yIG5vdywgZG8gYSBwbGFpbiByZXN0b3JlLCBhbmQgd2FpdCBmb3IKKwkgKiB0aGUgc2V0dXBfSU9fQVBJQ19pcnFzKCkgdG8gZG8gcHJvcGVyIGluaXRpYWxpemF0aW9uLgorCSAqLworCXJlc3RvcmVfSU9fQVBJQ19zZXR1cCgpOworfQorI2VuZGlmCisKKy8qCisgKiBGaW5kIHRoZSBJUlEgZW50cnkgbnVtYmVyIG9mIGEgY2VydGFpbiBwaW4uCisgKi8KK3N0YXRpYyBpbnQgZmluZF9pcnFfZW50cnkoaW50IGFwaWMsIGludCBwaW4sIGludCB0eXBlKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IG1wX2lycV9lbnRyaWVzOyBpKyspCisJCWlmIChtcF9pcnFzW2ldLm1wX2lycXR5cGUgPT0gdHlwZSAmJgorCQkgICAgKG1wX2lycXNbaV0ubXBfZHN0YXBpYyA9PSBtcF9pb2FwaWNzW2FwaWNdLm1wX2FwaWNpZCB8fAorCQkgICAgIG1wX2lycXNbaV0ubXBfZHN0YXBpYyA9PSBNUF9BUElDX0FMTCkgJiYKKwkJICAgIG1wX2lycXNbaV0ubXBfZHN0aXJxID09IHBpbikKKwkJCXJldHVybiBpOworCisJcmV0dXJuIC0xOworfQorCisvKgorICogRmluZCB0aGUgcGluIHRvIHdoaWNoIElSUVtpcnFdIChJU0EpIGlzIGNvbm5lY3RlZAorICovCitzdGF0aWMgaW50IF9faW5pdCBmaW5kX2lzYV9pcnFfcGluKGludCBpcnEsIGludCB0eXBlKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IG1wX2lycV9lbnRyaWVzOyBpKyspIHsKKwkJaW50IGxidXMgPSBtcF9pcnFzW2ldLm1wX3NyY2J1czsKKworCQlpZiAodGVzdF9iaXQobGJ1cywgbXBfYnVzX25vdF9wY2kpICYmCisJCSAgICAobXBfaXJxc1tpXS5tcF9pcnF0eXBlID09IHR5cGUpICYmCisJCSAgICAobXBfaXJxc1tpXS5tcF9zcmNidXNpcnEgPT0gaXJxKSkKKworCQkJcmV0dXJuIG1wX2lycXNbaV0ubXBfZHN0aXJxOworCX0KKwlyZXR1cm4gLTE7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IGZpbmRfaXNhX2lycV9hcGljKGludCBpcnEsIGludCB0eXBlKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IG1wX2lycV9lbnRyaWVzOyBpKyspIHsKKwkJaW50IGxidXMgPSBtcF9pcnFzW2ldLm1wX3NyY2J1czsKKworCQlpZiAodGVzdF9iaXQobGJ1cywgbXBfYnVzX25vdF9wY2kpICYmCisJCSAgICAobXBfaXJxc1tpXS5tcF9pcnF0eXBlID09IHR5cGUpICYmCisJCSAgICAobXBfaXJxc1tpXS5tcF9zcmNidXNpcnEgPT0gaXJxKSkKKwkJCWJyZWFrOworCX0KKwlpZiAoaSA8IG1wX2lycV9lbnRyaWVzKSB7CisJCWludCBhcGljOworCQlmb3IoYXBpYyA9IDA7IGFwaWMgPCBucl9pb2FwaWNzOyBhcGljKyspIHsKKwkJCWlmIChtcF9pb2FwaWNzW2FwaWNdLm1wX2FwaWNpZCA9PSBtcF9pcnFzW2ldLm1wX2RzdGFwaWMpCisJCQkJcmV0dXJuIGFwaWM7CisJCX0KKwl9CisKKwlyZXR1cm4gLTE7Cit9CisKKy8qCisgKiBGaW5kIGEgc3BlY2lmaWMgUENJIElSUSBlbnRyeS4KKyAqIE5vdCBhbiBfX2luaXQsIHBvc3NpYmx5IG5lZWRlZCBieSBtb2R1bGVzCisgKi8KK3N0YXRpYyBpbnQgcGluXzJfaXJxKGludCBpZHgsIGludCBhcGljLCBpbnQgcGluKTsKKworaW50IElPX0FQSUNfZ2V0X1BDSV9pcnFfdmVjdG9yKGludCBidXMsIGludCBzbG90LCBpbnQgcGluKQoreworCWludCBhcGljLCBpLCBiZXN0X2d1ZXNzID0gLTE7CisKKwlhcGljX3ByaW50ayhBUElDX0RFQlVHLCAicXVlcnlpbmcgUENJIC0+IElSUSBtYXBwaW5nIGJ1czolZCwgc2xvdDolZCwgcGluOiVkLlxuIiwKKwkJYnVzLCBzbG90LCBwaW4pOworCWlmICh0ZXN0X2JpdChidXMsIG1wX2J1c19ub3RfcGNpKSkgeworCQlhcGljX3ByaW50ayhBUElDX1ZFUkJPU0UsICJQQ0kgQklPUyBwYXNzZWQgbm9uZXhpc3RlbnQgUENJIGJ1cyAlZCFcbiIsIGJ1cyk7CisJCXJldHVybiAtMTsKKwl9CisJZm9yIChpID0gMDsgaSA8IG1wX2lycV9lbnRyaWVzOyBpKyspIHsKKwkJaW50IGxidXMgPSBtcF9pcnFzW2ldLm1wX3NyY2J1czsKKworCQlmb3IgKGFwaWMgPSAwOyBhcGljIDwgbnJfaW9hcGljczsgYXBpYysrKQorCQkJaWYgKG1wX2lvYXBpY3NbYXBpY10ubXBfYXBpY2lkID09IG1wX2lycXNbaV0ubXBfZHN0YXBpYyB8fAorCQkJICAgIG1wX2lycXNbaV0ubXBfZHN0YXBpYyA9PSBNUF9BUElDX0FMTCkKKwkJCQlicmVhazsKKworCQlpZiAoIXRlc3RfYml0KGxidXMsIG1wX2J1c19ub3RfcGNpKSAmJgorCQkgICAgIW1wX2lycXNbaV0ubXBfaXJxdHlwZSAmJgorCQkgICAgKGJ1cyA9PSBsYnVzKSAmJgorCQkgICAgKHNsb3QgPT0gKChtcF9pcnFzW2ldLm1wX3NyY2J1c2lycSA+PiAyKSAmIDB4MWYpKSkgeworCQkJaW50IGlycSA9IHBpbl8yX2lycShpLGFwaWMsbXBfaXJxc1tpXS5tcF9kc3RpcnEpOworCisJCQlpZiAoIShhcGljIHx8IElPX0FQSUNfSVJRKGlycSkpKQorCQkJCWNvbnRpbnVlOworCisJCQlpZiAocGluID09IChtcF9pcnFzW2ldLm1wX3NyY2J1c2lycSAmIDMpKQorCQkJCXJldHVybiBpcnE7CisJCQkvKgorCQkJICogVXNlIHRoZSBmaXJzdCBhbGwtYnV0LXBpbiBtYXRjaGluZyBlbnRyeSBhcyBhCisJCQkgKiBiZXN0LWd1ZXNzIGZ1enp5IHJlc3VsdCBmb3IgYnJva2VuIG1wdGFibGVzLgorCQkJICovCisJCQlpZiAoYmVzdF9ndWVzcyA8IDApCisJCQkJYmVzdF9ndWVzcyA9IGlycTsKKwkJfQorCX0KKwlyZXR1cm4gYmVzdF9ndWVzczsKK30KKworRVhQT1JUX1NZTUJPTChJT19BUElDX2dldF9QQ0lfaXJxX3ZlY3Rvcik7CisKKyNpZiBkZWZpbmVkKENPTkZJR19FSVNBKSB8fCBkZWZpbmVkKENPTkZJR19NQ0EpCisvKgorICogRUlTQSBFZGdlL0xldmVsIGNvbnRyb2wgcmVnaXN0ZXIsIEVMQ1IKKyAqLworc3RhdGljIGludCBFSVNBX0VMQ1IodW5zaWduZWQgaW50IGlycSkKK3sKKwlpZiAoaXJxIDwgMTYpIHsKKwkJdW5zaWduZWQgaW50IHBvcnQgPSAweDRkMCArIChpcnEgPj4gMyk7CisJCXJldHVybiAoaW5iKHBvcnQpID4+IChpcnEgJiA3KSkgJiAxOworCX0KKwlhcGljX3ByaW50ayhBUElDX1ZFUkJPU0UsIEtFUk5fSU5GTworCQkJIkJyb2tlbiBNUHRhYmxlIHJlcG9ydHMgSVNBIGlycSAlZFxuIiwgaXJxKTsKKwlyZXR1cm4gMDsKK30KKworI2VuZGlmCisKKy8qIElTQSBpbnRlcnJ1cHRzIGFyZSBhbHdheXMgcG9sYXJpdHkgemVybyBlZGdlIHRyaWdnZXJlZCwKKyAqIHdoZW4gbGlzdGVkIGFzIGNvbmZvcm1pbmcgaW4gdGhlIE1QIHRhYmxlLiAqLworCisjZGVmaW5lIGRlZmF1bHRfSVNBX3RyaWdnZXIoaWR4KQkoMCkKKyNkZWZpbmUgZGVmYXVsdF9JU0FfcG9sYXJpdHkoaWR4KQkoMCkKKworLyogRUlTQSBpbnRlcnJ1cHRzIGFyZSBhbHdheXMgcG9sYXJpdHkgemVybyBhbmQgY2FuIGJlIGVkZ2Ugb3IgbGV2ZWwKKyAqIHRyaWdnZXIgZGVwZW5kaW5nIG9uIHRoZSBFTENSIHZhbHVlLiAgSWYgYW4gaW50ZXJydXB0IGlzIGxpc3RlZCBhcworICogRUlTQSBjb25mb3JtaW5nIGluIHRoZSBNUCB0YWJsZSwgdGhhdCBtZWFucyBpdHMgdHJpZ2dlciB0eXBlIG11c3QKKyAqIGJlIHJlYWQgaW4gZnJvbSB0aGUgRUxDUiAqLworCisjZGVmaW5lIGRlZmF1bHRfRUlTQV90cmlnZ2VyKGlkeCkJKEVJU0FfRUxDUihtcF9pcnFzW2lkeF0ubXBfc3JjYnVzaXJxKSkKKyNkZWZpbmUgZGVmYXVsdF9FSVNBX3BvbGFyaXR5KGlkeCkJZGVmYXVsdF9JU0FfcG9sYXJpdHkoaWR4KQorCisvKiBQQ0kgaW50ZXJydXB0cyBhcmUgYWx3YXlzIHBvbGFyaXR5IG9uZSBsZXZlbCB0cmlnZ2VyZWQsCisgKiB3aGVuIGxpc3RlZCBhcyBjb25mb3JtaW5nIGluIHRoZSBNUCB0YWJsZS4gKi8KKworI2RlZmluZSBkZWZhdWx0X1BDSV90cmlnZ2VyKGlkeCkJKDEpCisjZGVmaW5lIGRlZmF1bHRfUENJX3BvbGFyaXR5KGlkeCkJKDEpCisKKy8qIE1DQSBpbnRlcnJ1cHRzIGFyZSBhbHdheXMgcG9sYXJpdHkgemVybyBsZXZlbCB0cmlnZ2VyZWQsCisgKiB3aGVuIGxpc3RlZCBhcyBjb25mb3JtaW5nIGluIHRoZSBNUCB0YWJsZS4gKi8KKworI2RlZmluZSBkZWZhdWx0X01DQV90cmlnZ2VyKGlkeCkJKDEpCisjZGVmaW5lIGRlZmF1bHRfTUNBX3BvbGFyaXR5KGlkeCkJZGVmYXVsdF9JU0FfcG9sYXJpdHkoaWR4KQorCitzdGF0aWMgaW50IE1QQklPU19wb2xhcml0eShpbnQgaWR4KQoreworCWludCBidXMgPSBtcF9pcnFzW2lkeF0ubXBfc3JjYnVzOworCWludCBwb2xhcml0eTsKKworCS8qCisJICogRGV0ZXJtaW5lIElSUSBsaW5lIHBvbGFyaXR5IChoaWdoIGFjdGl2ZSBvciBsb3cgYWN0aXZlKToKKwkgKi8KKwlzd2l0Y2ggKG1wX2lycXNbaWR4XS5tcF9pcnFmbGFnICYgMykKKwl7CisJCWNhc2UgMDogLyogY29uZm9ybXMsIGllLiBidXMtdHlwZSBkZXBlbmRlbnQgcG9sYXJpdHkgKi8KKwkJCWlmICh0ZXN0X2JpdChidXMsIG1wX2J1c19ub3RfcGNpKSkKKwkJCQlwb2xhcml0eSA9IGRlZmF1bHRfSVNBX3BvbGFyaXR5KGlkeCk7CisJCQllbHNlCisJCQkJcG9sYXJpdHkgPSBkZWZhdWx0X1BDSV9wb2xhcml0eShpZHgpOworCQkJYnJlYWs7CisJCWNhc2UgMTogLyogaGlnaCBhY3RpdmUgKi8KKwkJeworCQkJcG9sYXJpdHkgPSAwOworCQkJYnJlYWs7CisJCX0KKwkJY2FzZSAyOiAvKiByZXNlcnZlZCAqLworCQl7CisJCQlwcmludGsoS0VSTl9XQVJOSU5HICJicm9rZW4gQklPUyEhXG4iKTsKKwkJCXBvbGFyaXR5ID0gMTsKKwkJCWJyZWFrOworCQl9CisJCWNhc2UgMzogLyogbG93IGFjdGl2ZSAqLworCQl7CisJCQlwb2xhcml0eSA9IDE7CisJCQlicmVhazsKKwkJfQorCQlkZWZhdWx0OiAvKiBpbnZhbGlkICovCisJCXsKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgImJyb2tlbiBCSU9TISFcbiIpOworCQkJcG9sYXJpdHkgPSAxOworCQkJYnJlYWs7CisJCX0KKwl9CisJcmV0dXJuIHBvbGFyaXR5OworfQorCitzdGF0aWMgaW50IE1QQklPU190cmlnZ2VyKGludCBpZHgpCit7CisJaW50IGJ1cyA9IG1wX2lycXNbaWR4XS5tcF9zcmNidXM7CisJaW50IHRyaWdnZXI7CisKKwkvKgorCSAqIERldGVybWluZSBJUlEgdHJpZ2dlciBtb2RlIChlZGdlIG9yIGxldmVsIHNlbnNpdGl2ZSk6CisJICovCisJc3dpdGNoICgobXBfaXJxc1tpZHhdLm1wX2lycWZsYWc+PjIpICYgMykKKwl7CisJCWNhc2UgMDogLyogY29uZm9ybXMsIGllLiBidXMtdHlwZSBkZXBlbmRlbnQgKi8KKwkJCWlmICh0ZXN0X2JpdChidXMsIG1wX2J1c19ub3RfcGNpKSkKKwkJCQl0cmlnZ2VyID0gZGVmYXVsdF9JU0FfdHJpZ2dlcihpZHgpOworCQkJZWxzZQorCQkJCXRyaWdnZXIgPSBkZWZhdWx0X1BDSV90cmlnZ2VyKGlkeCk7CisjaWYgZGVmaW5lZChDT05GSUdfRUlTQSkgfHwgZGVmaW5lZChDT05GSUdfTUNBKQorCQkJc3dpdGNoIChtcF9idXNfaWRfdG9fdHlwZVtidXNdKSB7CisJCQkJY2FzZSBNUF9CVVNfSVNBOiAvKiBJU0EgcGluICovCisJCQkJeworCQkJCQkvKiBzZXQgYmVmb3JlIHRoZSBzd2l0Y2ggKi8KKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJCWNhc2UgTVBfQlVTX0VJU0E6IC8qIEVJU0EgcGluICovCisJCQkJeworCQkJCQl0cmlnZ2VyID0gZGVmYXVsdF9FSVNBX3RyaWdnZXIoaWR4KTsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJCWNhc2UgTVBfQlVTX1BDSTogLyogUENJIHBpbiAqLworCQkJCXsKKwkJCQkJLyogc2V0IGJlZm9yZSB0aGUgc3dpdGNoICovCisJCQkJCWJyZWFrOworCQkJCX0KKwkJCQljYXNlIE1QX0JVU19NQ0E6IC8qIE1DQSBwaW4gKi8KKwkJCQl7CisJCQkJCXRyaWdnZXIgPSBkZWZhdWx0X01DQV90cmlnZ2VyKGlkeCk7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCQlkZWZhdWx0OgorCQkJCXsKKwkJCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiYnJva2VuIEJJT1MhIVxuIik7CisJCQkJCXRyaWdnZXIgPSAxOworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisjZW5kaWYKKwkJCWJyZWFrOworCQljYXNlIDE6IC8qIGVkZ2UgKi8KKwkJeworCQkJdHJpZ2dlciA9IDA7CisJCQlicmVhazsKKwkJfQorCQljYXNlIDI6IC8qIHJlc2VydmVkICovCisJCXsKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgImJyb2tlbiBCSU9TISFcbiIpOworCQkJdHJpZ2dlciA9IDE7CisJCQlicmVhazsKKwkJfQorCQljYXNlIDM6IC8qIGxldmVsICovCisJCXsKKwkJCXRyaWdnZXIgPSAxOworCQkJYnJlYWs7CisJCX0KKwkJZGVmYXVsdDogLyogaW52YWxpZCAqLworCQl7CisJCQlwcmludGsoS0VSTl9XQVJOSU5HICJicm9rZW4gQklPUyEhXG4iKTsKKwkJCXRyaWdnZXIgPSAwOworCQkJYnJlYWs7CisJCX0KKwl9CisJcmV0dXJuIHRyaWdnZXI7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGlycV9wb2xhcml0eShpbnQgaWR4KQoreworCXJldHVybiBNUEJJT1NfcG9sYXJpdHkoaWR4KTsKK30KKworc3RhdGljIGlubGluZSBpbnQgaXJxX3RyaWdnZXIoaW50IGlkeCkKK3sKKwlyZXR1cm4gTVBCSU9TX3RyaWdnZXIoaWR4KTsKK30KKworaW50ICgqaW9hcGljX3JlbnVtYmVyX2lycSkoaW50IGlvYXBpYywgaW50IGlycSk7CitzdGF0aWMgaW50IHBpbl8yX2lycShpbnQgaWR4LCBpbnQgYXBpYywgaW50IHBpbikKK3sKKwlpbnQgaXJxLCBpOworCWludCBidXMgPSBtcF9pcnFzW2lkeF0ubXBfc3JjYnVzOworCisJLyoKKwkgKiBEZWJ1Z2dpbmcgY2hlY2ssIHdlIGFyZSBpbiBiaWcgdHJvdWJsZSBpZiB0aGlzIG1lc3NhZ2UgcG9wcyB1cCEKKwkgKi8KKwlpZiAobXBfaXJxc1tpZHhdLm1wX2RzdGlycSAhPSBwaW4pCisJCXByaW50ayhLRVJOX0VSUiAiYnJva2VuIEJJT1Mgb3IgTVBUQUJMRSBwYXJzZXIsIGF5aWVlISFcbiIpOworCisJaWYgKHRlc3RfYml0KGJ1cywgbXBfYnVzX25vdF9wY2kpKSB7CisJCWlycSA9IG1wX2lycXNbaWR4XS5tcF9zcmNidXNpcnE7CisJfSBlbHNlIHsKKwkJLyoKKwkJICogUENJIElSUXMgYXJlIG1hcHBlZCBpbiBvcmRlcgorCQkgKi8KKwkJaSA9IGlycSA9IDA7CisJCXdoaWxlIChpIDwgYXBpYykKKwkJCWlycSArPSBucl9pb2FwaWNfcmVnaXN0ZXJzW2krK107CisJCWlycSArPSBwaW47CisJCS8qCisgICAgICAgICAgICAgICAgICogRm9yIE1QUyBtb2RlLCBzbyBmYXIgb25seSBuZWVkZWQgYnkgRVM3MDAwIHBsYXRmb3JtCisgICAgICAgICAgICAgICAgICovCisJCWlmIChpb2FwaWNfcmVudW1iZXJfaXJxKQorCQkJaXJxID0gaW9hcGljX3JlbnVtYmVyX2lycShhcGljLCBpcnEpOworCX0KKworI2lmZGVmIENPTkZJR19YODZfMzIKKwkvKgorCSAqIFBDSSBJUlEgY29tbWFuZCBsaW5lIHJlZGlyZWN0aW9uLiBZZXMsIGxpbWl0cyBhcmUgaGFyZGNvZGVkLgorCSAqLworCWlmICgocGluID49IDE2KSAmJiAocGluIDw9IDIzKSkgeworCQlpZiAocGlycV9lbnRyaWVzW3Bpbi0xNl0gIT0gLTEpIHsKKwkJCWlmICghcGlycV9lbnRyaWVzW3Bpbi0xNl0pIHsKKwkJCQlhcGljX3ByaW50ayhBUElDX1ZFUkJPU0UsIEtFUk5fREVCVUcKKwkJCQkJCSJkaXNhYmxpbmcgUElSUSVkXG4iLCBwaW4tMTYpOworCQkJfSBlbHNlIHsKKwkJCQlpcnEgPSBwaXJxX2VudHJpZXNbcGluLTE2XTsKKwkJCQlhcGljX3ByaW50ayhBUElDX1ZFUkJPU0UsIEtFUk5fREVCVUcKKwkJCQkJCSJ1c2luZyBQSVJRJWQgLT4gSVJRICVkXG4iLAorCQkJCQkJcGluLTE2LCBpcnEpOworCQkJfQorCQl9CisJfQorI2VuZGlmCisKKwlyZXR1cm4gaXJxOworfQorCit2b2lkIGxvY2tfdmVjdG9yX2xvY2sodm9pZCkKK3sKKwkvKiBVc2VkIHRvIHRoZSBvbmxpbmUgc2V0IG9mIGNwdXMgZG9lcyBub3QgY2hhbmdlCisJICogZHVyaW5nIGFzc2lnbl9pcnFfdmVjdG9yLgorCSAqLworCXNwaW5fbG9jaygmdmVjdG9yX2xvY2spOworfQorCit2b2lkIHVubG9ja192ZWN0b3JfbG9jayh2b2lkKQoreworCXNwaW5fdW5sb2NrKCZ2ZWN0b3JfbG9jayk7Cit9CisKK3N0YXRpYyBpbnQgX19hc3NpZ25faXJxX3ZlY3RvcihpbnQgaXJxLCBjcHVtYXNrX3QgbWFzaykKK3sKKwkvKgorCSAqIE5PVEUhIFRoZSBsb2NhbCBBUElDIGlzbid0IHZlcnkgZ29vZCBhdCBoYW5kbGluZworCSAqIG11bHRpcGxlIGludGVycnVwdHMgYXQgdGhlIHNhbWUgaW50ZXJydXB0IGxldmVsLgorCSAqIEFzIHRoZSBpbnRlcnJ1cHQgbGV2ZWwgaXMgZGV0ZXJtaW5lZCBieSB0YWtpbmcgdGhlCisJICogdmVjdG9yIG51bWJlciBhbmQgc2hpZnRpbmcgdGhhdCByaWdodCBieSA0LCB3ZQorCSAqIHdhbnQgdG8gc3ByZWFkIHRoZXNlIG91dCBhIGJpdCBzbyB0aGF0IHRoZXkgZG9uJ3QKKwkgKiBhbGwgZmFsbCBpbiB0aGUgc2FtZSBpbnRlcnJ1cHQgbGV2ZWwuCisJICoKKwkgKiBBbHNvLCB3ZSd2ZSBnb3QgdG8gYmUgY2FyZWZ1bCBub3QgdG8gdHJhc2ggZ2F0ZQorCSAqIDB4ODAsIGJlY2F1c2UgaW50IDB4ODAgaXMgaG0sIGtpbmQgb2YgaW1wb3J0YW50aXNoLiA7KQorCSAqLworCXN0YXRpYyBpbnQgY3VycmVudF92ZWN0b3IgPSBGSVJTVF9ERVZJQ0VfVkVDVE9SLCBjdXJyZW50X29mZnNldCA9IDA7CisJdW5zaWduZWQgaW50IG9sZF92ZWN0b3I7CisJaW50IGNwdTsKKwlzdHJ1Y3QgaXJxX2NmZyAqY2ZnOworCisJY2ZnID0gaXJxX2NmZyhpcnEpOworCisJLyogT25seSB0cnkgYW5kIGFsbG9jYXRlIGlycXMgb24gY3B1cyB0aGF0IGFyZSBwcmVzZW50ICovCisJY3B1c19hbmQobWFzaywgbWFzaywgY3B1X29ubGluZV9tYXApOworCisJaWYgKChjZmctPm1vdmVfaW5fcHJvZ3Jlc3MpIHx8IGNmZy0+bW92ZV9jbGVhbnVwX2NvdW50KQorCQlyZXR1cm4gLUVCVVNZOworCisJb2xkX3ZlY3RvciA9IGNmZy0+dmVjdG9yOworCWlmIChvbGRfdmVjdG9yKSB7CisJCWNwdW1hc2tfdCB0bXA7CisJCWNwdXNfYW5kKHRtcCwgY2ZnLT5kb21haW4sIG1hc2spOworCQlpZiAoIWNwdXNfZW1wdHkodG1wKSkKKwkJCXJldHVybiAwOworCX0KKworCWZvcl9lYWNoX2NwdV9tYXNrX25yKGNwdSwgbWFzaykgeworCQljcHVtYXNrX3QgZG9tYWluLCBuZXdfbWFzazsKKwkJaW50IG5ld19jcHU7CisJCWludCB2ZWN0b3IsIG9mZnNldDsKKworCQlkb21haW4gPSB2ZWN0b3JfYWxsb2NhdGlvbl9kb21haW4oY3B1KTsKKwkJY3B1c19hbmQobmV3X21hc2ssIGRvbWFpbiwgY3B1X29ubGluZV9tYXApOworCisJCXZlY3RvciA9IGN1cnJlbnRfdmVjdG9yOworCQlvZmZzZXQgPSBjdXJyZW50X29mZnNldDsKK25leHQ6CisJCXZlY3RvciArPSA4OworCQlpZiAodmVjdG9yID49IGZpcnN0X3N5c3RlbV92ZWN0b3IpIHsKKwkJCS8qIElmIHdlIHJ1biBvdXQgb2YgdmVjdG9ycyBvbiBsYXJnZSBib3hlbiwgbXVzdCBzaGFyZSB0aGVtLiAqLworCQkJb2Zmc2V0ID0gKG9mZnNldCArIDEpICUgODsKKwkJCXZlY3RvciA9IEZJUlNUX0RFVklDRV9WRUNUT1IgKyBvZmZzZXQ7CisJCX0KKwkJaWYgKHVubGlrZWx5KGN1cnJlbnRfdmVjdG9yID09IHZlY3RvcikpCisJCQljb250aW51ZTsKKyNpZmRlZiBDT05GSUdfWDg2XzY0CisJCWlmICh2ZWN0b3IgPT0gSUEzMl9TWVNDQUxMX1ZFQ1RPUikKKwkJCWdvdG8gbmV4dDsKKyNlbHNlCisJCWlmICh2ZWN0b3IgPT0gU1lTQ0FMTF9WRUNUT1IpCisJCQlnb3RvIG5leHQ7CisjZW5kaWYKKwkJZm9yX2VhY2hfY3B1X21hc2tfbnIobmV3X2NwdSwgbmV3X21hc2spCisJCQlpZiAocGVyX2NwdSh2ZWN0b3JfaXJxLCBuZXdfY3B1KVt2ZWN0b3JdICE9IC0xKQorCQkJCWdvdG8gbmV4dDsKKwkJLyogRm91bmQgb25lISAqLworCQljdXJyZW50X3ZlY3RvciA9IHZlY3RvcjsKKwkJY3VycmVudF9vZmZzZXQgPSBvZmZzZXQ7CisJCWlmIChvbGRfdmVjdG9yKSB7CisJCQljZmctPm1vdmVfaW5fcHJvZ3Jlc3MgPSAxOworCQkJY2ZnLT5vbGRfZG9tYWluID0gY2ZnLT5kb21haW47CisJCX0KKwkJZm9yX2VhY2hfY3B1X21hc2tfbnIobmV3X2NwdSwgbmV3X21hc2spCisJCQlwZXJfY3B1KHZlY3Rvcl9pcnEsIG5ld19jcHUpW3ZlY3Rvcl0gPSBpcnE7CisJCWNmZy0+dmVjdG9yID0gdmVjdG9yOworCQljZmctPmRvbWFpbiA9IGRvbWFpbjsKKwkJcmV0dXJuIDA7CisJfQorCXJldHVybiAtRU5PU1BDOworfQorCitzdGF0aWMgaW50IGFzc2lnbl9pcnFfdmVjdG9yKGludCBpcnEsIGNwdW1hc2tfdCBtYXNrKQoreworCWludCBlcnI7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZ2ZWN0b3JfbG9jaywgZmxhZ3MpOworCWVyciA9IF9fYXNzaWduX2lycV92ZWN0b3IoaXJxLCBtYXNrKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ2ZWN0b3JfbG9jaywgZmxhZ3MpOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyB2b2lkIF9fY2xlYXJfaXJxX3ZlY3RvcihpbnQgaXJxKQoreworCXN0cnVjdCBpcnFfY2ZnICpjZmc7CisJY3B1bWFza190IG1hc2s7CisJaW50IGNwdSwgdmVjdG9yOworCisJY2ZnID0gaXJxX2NmZyhpcnEpOworCUJVR19PTighY2ZnLT52ZWN0b3IpOworCisJdmVjdG9yID0gY2ZnLT52ZWN0b3I7CisJY3B1c19hbmQobWFzaywgY2ZnLT5kb21haW4sIGNwdV9vbmxpbmVfbWFwKTsKKwlmb3JfZWFjaF9jcHVfbWFza19ucihjcHUsIG1hc2spCisJCXBlcl9jcHUodmVjdG9yX2lycSwgY3B1KVt2ZWN0b3JdID0gLTE7CisKKwljZmctPnZlY3RvciA9IDA7CisJY3B1c19jbGVhcihjZmctPmRvbWFpbik7Cit9CisKK3ZvaWQgX19zZXR1cF92ZWN0b3JfaXJxKGludCBjcHUpCit7CisJLyogSW5pdGlhbGl6ZSB2ZWN0b3JfaXJxIG9uIGEgbmV3IGNwdSAqLworCS8qIFRoaXMgZnVuY3Rpb24gbXVzdCBiZSBjYWxsZWQgd2l0aCB2ZWN0b3JfbG9jayBoZWxkICovCisJaW50IGlycSwgdmVjdG9yOworCXN0cnVjdCBpcnFfY2ZnICpjZmc7CisKKwkvKiBNYXJrIHRoZSBpbnVzZSB2ZWN0b3JzICovCisJZm9yX2VhY2hfaXJxX2NmZyhpcnEsIGNmZykgeworCQlpZiAoIWNwdV9pc3NldChjcHUsIGNmZy0+ZG9tYWluKSkKKwkJCWNvbnRpbnVlOworCQl2ZWN0b3IgPSBjZmctPnZlY3RvcjsKKwkJcGVyX2NwdSh2ZWN0b3JfaXJxLCBjcHUpW3ZlY3Rvcl0gPSBpcnE7CisJfQorCS8qIE1hcmsgdGhlIGZyZWUgdmVjdG9ycyAqLworCWZvciAodmVjdG9yID0gMDsgdmVjdG9yIDwgTlJfVkVDVE9SUzsgKyt2ZWN0b3IpIHsKKwkJaXJxID0gcGVyX2NwdSh2ZWN0b3JfaXJxLCBjcHUpW3ZlY3Rvcl07CisJCWlmIChpcnEgPCAwKQorCQkJY29udGludWU7CisKKwkJY2ZnID0gaXJxX2NmZyhpcnEpOworCQlpZiAoIWNwdV9pc3NldChjcHUsIGNmZy0+ZG9tYWluKSkKKwkJCXBlcl9jcHUodmVjdG9yX2lycSwgY3B1KVt2ZWN0b3JdID0gLTE7CisJfQorfQorCitzdGF0aWMgc3RydWN0IGlycV9jaGlwIGlvYXBpY19jaGlwOworI2lmZGVmIENPTkZJR19JTlRSX1JFTUFQCitzdGF0aWMgc3RydWN0IGlycV9jaGlwIGlyX2lvYXBpY19jaGlwOworI2VuZGlmCisKKyNkZWZpbmUgSU9BUElDX0FVVE8gICAgIC0xCisjZGVmaW5lIElPQVBJQ19FREdFICAgICAwCisjZGVmaW5lIElPQVBJQ19MRVZFTCAgICAxCisKKyNpZmRlZiBDT05GSUdfWDg2XzMyCitzdGF0aWMgaW5saW5lIGludCBJT19BUElDX2lycV90cmlnZ2VyKGludCBpcnEpCit7CisJaW50IGFwaWMsIGlkeCwgcGluOworCisJZm9yIChhcGljID0gMDsgYXBpYyA8IG5yX2lvYXBpY3M7IGFwaWMrKykgeworCQlmb3IgKHBpbiA9IDA7IHBpbiA8IG5yX2lvYXBpY19yZWdpc3RlcnNbYXBpY107IHBpbisrKSB7CisJCQlpZHggPSBmaW5kX2lycV9lbnRyeShhcGljLCBwaW4sIG1wX0lOVCk7CisJCQlpZiAoKGlkeCAhPSAtMSkgJiYgKGlycSA9PSBwaW5fMl9pcnEoaWR4LCBhcGljLCBwaW4pKSkKKwkJCQlyZXR1cm4gaXJxX3RyaWdnZXIoaWR4KTsKKwkJfQorCX0KKwkvKgorICAgICAgICAgKiBub25leGlzdGVudCBJUlFzIGFyZSBlZGdlIGRlZmF1bHQKKyAgICAgICAgICovCisJcmV0dXJuIDA7Cit9CisjZWxzZQorc3RhdGljIGlubGluZSBpbnQgSU9fQVBJQ19pcnFfdHJpZ2dlcihpbnQgaXJxKQoreworCXJldHVybiAxOworfQorI2VuZGlmCisKK3N0YXRpYyB2b2lkIGlvYXBpY19yZWdpc3Rlcl9pbnRyKGludCBpcnEsIHVuc2lnbmVkIGxvbmcgdHJpZ2dlcikKK3sKKwlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2M7CisKKwlkZXNjID0gaXJxX3RvX2Rlc2MoaXJxKTsKKworCWlmICgodHJpZ2dlciA9PSBJT0FQSUNfQVVUTyAmJiBJT19BUElDX2lycV90cmlnZ2VyKGlycSkpIHx8CisJICAgIHRyaWdnZXIgPT0gSU9BUElDX0xFVkVMKQorCQlkZXNjLT5zdGF0dXMgfD0gSVJRX0xFVkVMOworCWVsc2UKKwkJZGVzYy0+c3RhdHVzICY9IH5JUlFfTEVWRUw7CisKKyNpZmRlZiBDT05GSUdfSU5UUl9SRU1BUAorCWlmIChpcnFfcmVtYXBwZWQoaXJxKSkgeworCQlkZXNjLT5zdGF0dXMgfD0gSVJRX01PVkVfUENOVFhUOworCQlpZiAodHJpZ2dlcikKKwkJCXNldF9pcnFfY2hpcF9hbmRfaGFuZGxlcl9uYW1lKGlycSwgJmlyX2lvYXBpY19jaGlwLAorCQkJCQkJICAgICAgaGFuZGxlX2Zhc3Rlb2lfaXJxLAorCQkJCQkJICAgICAiZmFzdGVvaSIpOworCQllbHNlCisJCQlzZXRfaXJxX2NoaXBfYW5kX2hhbmRsZXJfbmFtZShpcnEsICZpcl9pb2FwaWNfY2hpcCwKKwkJCQkJCSAgICAgIGhhbmRsZV9lZGdlX2lycSwgImVkZ2UiKTsKKwkJcmV0dXJuOworCX0KKyNlbmRpZgorCWlmICgodHJpZ2dlciA9PSBJT0FQSUNfQVVUTyAmJiBJT19BUElDX2lycV90cmlnZ2VyKGlycSkpIHx8CisJICAgIHRyaWdnZXIgPT0gSU9BUElDX0xFVkVMKQorCQlzZXRfaXJxX2NoaXBfYW5kX2hhbmRsZXJfbmFtZShpcnEsICZpb2FwaWNfY2hpcCwKKwkJCQkJICAgICAgaGFuZGxlX2Zhc3Rlb2lfaXJxLAorCQkJCQkgICAgICAiZmFzdGVvaSIpOworCWVsc2UKKwkJc2V0X2lycV9jaGlwX2FuZF9oYW5kbGVyX25hbWUoaXJxLCAmaW9hcGljX2NoaXAsCisJCQkJCSAgICAgIGhhbmRsZV9lZGdlX2lycSwgImVkZ2UiKTsKK30KKworc3RhdGljIGludCBzZXR1cF9pb2FwaWNfZW50cnkoaW50IGFwaWMsIGludCBpcnEsCisJCQkgICAgICBzdHJ1Y3QgSU9fQVBJQ19yb3V0ZV9lbnRyeSAqZW50cnksCisJCQkgICAgICB1bnNpZ25lZCBpbnQgZGVzdGluYXRpb24sIGludCB0cmlnZ2VyLAorCQkJICAgICAgaW50IHBvbGFyaXR5LCBpbnQgdmVjdG9yKQoreworCS8qCisJICogYWRkIGl0IHRvIHRoZSBJTy1BUElDIGlycS1yb3V0aW5nIHRhYmxlOgorCSAqLworCW1lbXNldChlbnRyeSwwLHNpemVvZigqZW50cnkpKTsKKworI2lmZGVmIENPTkZJR19JTlRSX1JFTUFQCisJaWYgKGludHJfcmVtYXBwaW5nX2VuYWJsZWQpIHsKKwkJc3RydWN0IGludGVsX2lvbW11ICppb21tdSA9IG1hcF9pb2FwaWNfdG9faXIoYXBpYyk7CisJCXN0cnVjdCBpcnRlIGlydGU7CisJCXN0cnVjdCBJUl9JT19BUElDX3JvdXRlX2VudHJ5ICppcl9lbnRyeSA9CisJCQkoc3RydWN0IElSX0lPX0FQSUNfcm91dGVfZW50cnkgKikgZW50cnk7CisJCWludCBpbmRleDsKKworCQlpZiAoIWlvbW11KQorCQkJcGFuaWMoIk5vIG1hcHBpbmcgaW9tbXUgZm9yIGlvYXBpYyAlZFxuIiwgYXBpYyk7CisKKwkJaW5kZXggPSBhbGxvY19pcnRlKGlvbW11LCBpcnEsIDEpOworCQlpZiAoaW5kZXggPCAwKQorCQkJcGFuaWMoIkZhaWxlZCB0byBhbGxvY2F0ZSBJUlRFIGZvciBpb2FwaWMgJWRcbiIsIGFwaWMpOworCisJCW1lbXNldCgmaXJ0ZSwgMCwgc2l6ZW9mKGlydGUpKTsKKworCQlpcnRlLnByZXNlbnQgPSAxOworCQlpcnRlLmRzdF9tb2RlID0gSU5UX0RFU1RfTU9ERTsKKwkJaXJ0ZS50cmlnZ2VyX21vZGUgPSB0cmlnZ2VyOworCQlpcnRlLmRsdnJ5X21vZGUgPSBJTlRfREVMSVZFUllfTU9ERTsKKwkJaXJ0ZS52ZWN0b3IgPSB2ZWN0b3I7CisJCWlydGUuZGVzdF9pZCA9IElSVEVfREVTVChkZXN0aW5hdGlvbik7CisKKwkJbW9kaWZ5X2lydGUoaXJxLCAmaXJ0ZSk7CisKKwkJaXJfZW50cnktPmluZGV4MiA9IChpbmRleCA+PiAxNSkgJiAweDE7CisJCWlyX2VudHJ5LT56ZXJvID0gMDsKKwkJaXJfZW50cnktPmZvcm1hdCA9IDE7CisJCWlyX2VudHJ5LT5pbmRleCA9IChpbmRleCAmIDB4N2ZmZik7CisJfSBlbHNlCisjZW5kaWYKKwl7CisJCWVudHJ5LT5kZWxpdmVyeV9tb2RlID0gSU5UX0RFTElWRVJZX01PREU7CisJCWVudHJ5LT5kZXN0X21vZGUgPSBJTlRfREVTVF9NT0RFOworCQllbnRyeS0+ZGVzdCA9IGRlc3RpbmF0aW9uOworCX0KKworCWVudHJ5LT5tYXNrID0gMDsJCQkJLyogZW5hYmxlIElSUSAqLworCWVudHJ5LT50cmlnZ2VyID0gdHJpZ2dlcjsKKwllbnRyeS0+cG9sYXJpdHkgPSBwb2xhcml0eTsKKwllbnRyeS0+dmVjdG9yID0gdmVjdG9yOworCisJLyogTWFzayBsZXZlbCB0cmlnZ2VyZWQgaXJxcy4KKwkgKiBVc2UgSVJRX0RFTEFZRURfRElTQUJMRSBmb3IgZWRnZSB0cmlnZ2VyZWQgaXJxcy4KKwkgKi8KKwlpZiAodHJpZ2dlcikKKwkJZW50cnktPm1hc2sgPSAxOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBzZXR1cF9JT19BUElDX2lycShpbnQgYXBpYywgaW50IHBpbiwgdW5zaWduZWQgaW50IGlycSwKKwkJCSAgICAgIGludCB0cmlnZ2VyLCBpbnQgcG9sYXJpdHkpCit7CisJc3RydWN0IGlycV9jZmcgKmNmZzsKKwlzdHJ1Y3QgSU9fQVBJQ19yb3V0ZV9lbnRyeSBlbnRyeTsKKwljcHVtYXNrX3QgbWFzazsKKworCWlmICghSU9fQVBJQ19JUlEoaXJxKSkKKwkJcmV0dXJuOworCisJY2ZnID0gaXJxX2NmZyhpcnEpOworCisJbWFzayA9IFRBUkdFVF9DUFVTOworCWlmIChhc3NpZ25faXJxX3ZlY3RvcihpcnEsIG1hc2spKQorCQlyZXR1cm47CisKKwljcHVzX2FuZChtYXNrLCBjZmctPmRvbWFpbiwgbWFzayk7CisKKwlhcGljX3ByaW50ayhBUElDX1ZFUkJPU0UsS0VSTl9ERUJVRworCQkgICAgIklPQVBJQ1slZF06IFNldCByb3V0aW5nIGVudHJ5ICglZC0lZCAtPiAweCV4IC0+ICIKKwkJICAgICJJUlEgJWQgTW9kZTolaSBBY3RpdmU6JWkpXG4iLAorCQkgICAgYXBpYywgbXBfaW9hcGljc1thcGljXS5tcF9hcGljaWQsIHBpbiwgY2ZnLT52ZWN0b3IsCisJCSAgICBpcnEsIHRyaWdnZXIsIHBvbGFyaXR5KTsKKworCisJaWYgKHNldHVwX2lvYXBpY19lbnRyeShtcF9pb2FwaWNzW2FwaWNdLm1wX2FwaWNpZCwgaXJxLCAmZW50cnksCisJCQkgICAgICAgY3B1X21hc2tfdG9fYXBpY2lkKG1hc2spLCB0cmlnZ2VyLCBwb2xhcml0eSwKKwkJCSAgICAgICBjZmctPnZlY3RvcikpIHsKKwkJcHJpbnRrKCJGYWlsZWQgdG8gc2V0dXAgaW9hcGljIGVudHJ5IGZvciBpb2FwaWMgICVkLCBwaW4gJWRcbiIsCisJCSAgICAgICBtcF9pb2FwaWNzW2FwaWNdLm1wX2FwaWNpZCwgcGluKTsKKwkJX19jbGVhcl9pcnFfdmVjdG9yKGlycSk7CisJCXJldHVybjsKKwl9CisKKwlpb2FwaWNfcmVnaXN0ZXJfaW50cihpcnEsIHRyaWdnZXIpOworCWlmIChpcnEgPCAxNikKKwkJZGlzYWJsZV84MjU5QV9pcnEoaXJxKTsKKworCWlvYXBpY193cml0ZV9lbnRyeShhcGljLCBwaW4sIGVudHJ5KTsKK30KKworc3RhdGljIHZvaWQgX19pbml0IHNldHVwX0lPX0FQSUNfaXJxcyh2b2lkKQoreworCWludCBhcGljLCBwaW4sIGlkeCwgaXJxOworCWludCBub3Rjb24gPSAwOworCisJYXBpY19wcmludGsoQVBJQ19WRVJCT1NFLCBLRVJOX0RFQlVHICJpbml0IElPX0FQSUMgSVJRc1xuIik7CisKKwlmb3IgKGFwaWMgPSAwOyBhcGljIDwgbnJfaW9hcGljczsgYXBpYysrKSB7CisJCWZvciAocGluID0gMDsgcGluIDwgbnJfaW9hcGljX3JlZ2lzdGVyc1thcGljXTsgcGluKyspIHsKKworCQkJaWR4ID0gZmluZF9pcnFfZW50cnkoYXBpYywgcGluLCBtcF9JTlQpOworCQkJaWYgKGlkeCA9PSAtMSkgeworCQkJCWlmICghbm90Y29uKSB7CisJCQkJCW5vdGNvbiA9IDE7CisJCQkJCWFwaWNfcHJpbnRrKEFQSUNfVkVSQk9TRSwKKwkJCQkJCUtFUk5fREVCVUcgIiAlZC0lZCIsCisJCQkJCQltcF9pb2FwaWNzW2FwaWNdLm1wX2FwaWNpZCwKKwkJCQkJCXBpbik7CisJCQkJfSBlbHNlCisJCQkJCWFwaWNfcHJpbnRrKEFQSUNfVkVSQk9TRSwgIiAlZC0lZCIsCisJCQkJCQltcF9pb2FwaWNzW2FwaWNdLm1wX2FwaWNpZCwKKwkJCQkJCXBpbik7CisJCQkJY29udGludWU7CisJCQl9CisJCQlpZiAobm90Y29uKSB7CisJCQkJYXBpY19wcmludGsoQVBJQ19WRVJCT1NFLAorCQkJCQkiIChhcGljaWQtcGluKSBub3QgY29ubmVjdGVkXG4iKTsKKwkJCQlub3Rjb24gPSAwOworCQkJfQorCisJCQlpcnEgPSBwaW5fMl9pcnEoaWR4LCBhcGljLCBwaW4pOworI2lmZGVmIENPTkZJR19YODZfMzIKKwkJCWlmIChtdWx0aV90aW1lcl9jaGVjayhhcGljLCBpcnEpKQorCQkJCWNvbnRpbnVlOworI2VuZGlmCisJCQlhZGRfcGluX3RvX2lycShpcnEsIGFwaWMsIHBpbik7CisKKwkJCXNldHVwX0lPX0FQSUNfaXJxKGFwaWMsIHBpbiwgaXJxLAorCQkJCQlpcnFfdHJpZ2dlcihpZHgpLCBpcnFfcG9sYXJpdHkoaWR4KSk7CisJCX0KKwl9CisKKwlpZiAobm90Y29uKQorCQlhcGljX3ByaW50ayhBUElDX1ZFUkJPU0UsCisJCQkiIChhcGljaWQtcGluKSBub3QgY29ubmVjdGVkXG4iKTsKK30KKworLyoKKyAqIFNldCB1cCB0aGUgdGltZXIgcGluLCBwb3NzaWJseSB3aXRoIHRoZSA4MjU5QS1tYXN0ZXIgYmVoaW5kLgorICovCitzdGF0aWMgdm9pZCBfX2luaXQgc2V0dXBfdGltZXJfSVJRMF9waW4odW5zaWduZWQgaW50IGFwaWMsIHVuc2lnbmVkIGludCBwaW4sCisJCQkJCWludCB2ZWN0b3IpCit7CisJc3RydWN0IElPX0FQSUNfcm91dGVfZW50cnkgZW50cnk7CisKKyNpZmRlZiBDT05GSUdfSU5UUl9SRU1BUAorCWlmIChpbnRyX3JlbWFwcGluZ19lbmFibGVkKQorCQlyZXR1cm47CisjZW5kaWYKKworCW1lbXNldCgmZW50cnksIDAsIHNpemVvZihlbnRyeSkpOworCisJLyoKKwkgKiBXZSB1c2UgbG9naWNhbCBkZWxpdmVyeSB0byBnZXQgdGhlIHRpbWVyIElSUQorCSAqIHRvIHRoZSBmaXJzdCBDUFUuCisJICovCisJZW50cnkuZGVzdF9tb2RlID0gSU5UX0RFU1RfTU9ERTsKKwllbnRyeS5tYXNrID0gMTsJCQkJCS8qIG1hc2sgSVJRIG5vdyAqLworCWVudHJ5LmRlc3QgPSBjcHVfbWFza190b19hcGljaWQoVEFSR0VUX0NQVVMpOworCWVudHJ5LmRlbGl2ZXJ5X21vZGUgPSBJTlRfREVMSVZFUllfTU9ERTsKKwllbnRyeS5wb2xhcml0eSA9IDA7CisJZW50cnkudHJpZ2dlciA9IDA7CisJZW50cnkudmVjdG9yID0gdmVjdG9yOworCisJLyoKKwkgKiBUaGUgdGltZXIgSVJRIGRvZXNuJ3QgaGF2ZSB0byBrbm93IHRoYXQgYmVoaW5kIHRoZQorCSAqIHNjZW5lIHdlIG1heSBoYXZlIGEgODI1OUEtbWFzdGVyIGluIEFFT0kgbW9kZSAuLi4KKwkgKi8KKwlzZXRfaXJxX2NoaXBfYW5kX2hhbmRsZXJfbmFtZSgwLCAmaW9hcGljX2NoaXAsIGhhbmRsZV9lZGdlX2lycSwgImVkZ2UiKTsKKworCS8qCisJICogQWRkIGl0IHRvIHRoZSBJTy1BUElDIGlycS1yb3V0aW5nIHRhYmxlOgorCSAqLworCWlvYXBpY193cml0ZV9lbnRyeShhcGljLCBwaW4sIGVudHJ5KTsKK30KKworCitfX2FwaWNkZWJ1Z2luaXQodm9pZCkgcHJpbnRfSU9fQVBJQyh2b2lkKQoreworCWludCBhcGljLCBpOworCXVuaW9uIElPX0FQSUNfcmVnXzAwIHJlZ18wMDsKKwl1bmlvbiBJT19BUElDX3JlZ18wMSByZWdfMDE7CisJdW5pb24gSU9fQVBJQ19yZWdfMDIgcmVnXzAyOworCXVuaW9uIElPX0FQSUNfcmVnXzAzIHJlZ18wMzsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCBpcnFfY2ZnICpjZmc7CisJdW5zaWduZWQgaW50IGlycTsKKworCWlmIChhcGljX3ZlcmJvc2l0eSA9PSBBUElDX1FVSUVUKQorCQlyZXR1cm47CisKKwlwcmludGsoS0VSTl9ERUJVRyAibnVtYmVyIG9mIE1QIElSUSBzb3VyY2VzOiAlZC5cbiIsIG1wX2lycV9lbnRyaWVzKTsKKwlmb3IgKGkgPSAwOyBpIDwgbnJfaW9hcGljczsgaSsrKQorCQlwcmludGsoS0VSTl9ERUJVRyAibnVtYmVyIG9mIElPLUFQSUMgIyVkIHJlZ2lzdGVyczogJWQuXG4iLAorCQkgICAgICAgbXBfaW9hcGljc1tpXS5tcF9hcGljaWQsIG5yX2lvYXBpY19yZWdpc3RlcnNbaV0pOworCisJLyoKKwkgKiBXZSBhcmUgYSBiaXQgY29uc2VydmF0aXZlIGFib3V0IHdoYXQgd2UgZXhwZWN0LiAgV2UgaGF2ZSB0bworCSAqIGtub3cgYWJvdXQgZXZlcnkgaGFyZHdhcmUgY2hhbmdlIEFTQVAuCisJICovCisJcHJpbnRrKEtFUk5fSU5GTyAidGVzdGluZyB0aGUgSU8gQVBJQy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uXG4iKTsKKworCWZvciAoYXBpYyA9IDA7IGFwaWMgPCBucl9pb2FwaWNzOyBhcGljKyspIHsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZpb2FwaWNfbG9jaywgZmxhZ3MpOworCXJlZ18wMC5yYXcgPSBpb19hcGljX3JlYWQoYXBpYywgMCk7CisJcmVnXzAxLnJhdyA9IGlvX2FwaWNfcmVhZChhcGljLCAxKTsKKwlpZiAocmVnXzAxLmJpdHMudmVyc2lvbiA+PSAweDEwKQorCQlyZWdfMDIucmF3ID0gaW9fYXBpY19yZWFkKGFwaWMsIDIpOworCWlmIChyZWdfMDEuYml0cy52ZXJzaW9uID49IDB4MjApCisJCXJlZ18wMy5yYXcgPSBpb19hcGljX3JlYWQoYXBpYywgMyk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9hcGljX2xvY2ssIGZsYWdzKTsKKworCXByaW50aygiXG4iKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiSU8gQVBJQyAjJWQuLi4uLi5cbiIsIG1wX2lvYXBpY3NbYXBpY10ubXBfYXBpY2lkKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiLi4uLiByZWdpc3RlciAjMDA6ICUwOFhcbiIsIHJlZ18wMC5yYXcpOworCXByaW50ayhLRVJOX0RFQlVHICIuLi4uLi4uICAgIDogcGh5c2ljYWwgQVBJQyBpZDogJTAyWFxuIiwgcmVnXzAwLmJpdHMuSUQpOworCXByaW50ayhLRVJOX0RFQlVHICIuLi4uLi4uICAgIDogRGVsaXZlcnkgVHlwZTogJVhcbiIsIHJlZ18wMC5iaXRzLmRlbGl2ZXJ5X3R5cGUpOworCXByaW50ayhLRVJOX0RFQlVHICIuLi4uLi4uICAgIDogTFRTICAgICAgICAgIDogJVhcbiIsIHJlZ18wMC5iaXRzLkxUUyk7CisKKwlwcmludGsoS0VSTl9ERUJVRyAiLi4uLiByZWdpc3RlciAjMDE6ICUwOFhcbiIsICooaW50ICopJnJlZ18wMSk7CisJcHJpbnRrKEtFUk5fREVCVUcgIi4uLi4uLi4gICAgIDogbWF4IHJlZGlyZWN0aW9uIGVudHJpZXM6ICUwNFhcbiIsIHJlZ18wMS5iaXRzLmVudHJpZXMpOworCisJcHJpbnRrKEtFUk5fREVCVUcgIi4uLi4uLi4gICAgIDogUFJRIGltcGxlbWVudGVkOiAlWFxuIiwgcmVnXzAxLmJpdHMuUFJRKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiLi4uLi4uLiAgICAgOiBJTyBBUElDIHZlcnNpb246ICUwNFhcbiIsIHJlZ18wMS5iaXRzLnZlcnNpb24pOworCisJLyoKKwkgKiBTb21lIEludGVsIGNoaXBzZXRzIHdpdGggSU8gQVBJQyBWRVJTSU9OIG9mIDB4MT8gZG9uJ3QgaGF2ZSByZWdfMDIsCisJICogYnV0IHRoZSB2YWx1ZSBvZiByZWdfMDIgaXMgcmVhZCBhcyB0aGUgcHJldmlvdXMgcmVhZCByZWdpc3RlcgorCSAqIHZhbHVlLCBzbyBpZ25vcmUgaXQgaWYgcmVnXzAyID09IHJlZ18wMS4KKwkgKi8KKwlpZiAocmVnXzAxLmJpdHMudmVyc2lvbiA+PSAweDEwICYmIHJlZ18wMi5yYXcgIT0gcmVnXzAxLnJhdykgeworCQlwcmludGsoS0VSTl9ERUJVRyAiLi4uLiByZWdpc3RlciAjMDI6ICUwOFhcbiIsIHJlZ18wMi5yYXcpOworCQlwcmludGsoS0VSTl9ERUJVRyAiLi4uLi4uLiAgICAgOiBhcmJpdHJhdGlvbjogJTAyWFxuIiwgcmVnXzAyLmJpdHMuYXJiaXRyYXRpb24pOworCX0KKworCS8qCisJICogU29tZSBJbnRlbCBjaGlwc2V0cyB3aXRoIElPIEFQSUMgVkVSU0lPTiBvZiAweDI/IGRvbid0IGhhdmUgcmVnXzAyCisJICogb3IgcmVnXzAzLCBidXQgdGhlIHZhbHVlIG9mIHJlZ18wWzIzXSBpcyByZWFkIGFzIHRoZSBwcmV2aW91cyByZWFkCisJICogcmVnaXN0ZXIgdmFsdWUsIHNvIGlnbm9yZSBpdCBpZiByZWdfMDMgPT0gcmVnXzBbMTJdLgorCSAqLworCWlmIChyZWdfMDEuYml0cy52ZXJzaW9uID49IDB4MjAgJiYgcmVnXzAzLnJhdyAhPSByZWdfMDIucmF3ICYmCisJICAgIHJlZ18wMy5yYXcgIT0gcmVnXzAxLnJhdykgeworCQlwcmludGsoS0VSTl9ERUJVRyAiLi4uLiByZWdpc3RlciAjMDM6ICUwOFhcbiIsIHJlZ18wMy5yYXcpOworCQlwcmludGsoS0VSTl9ERUJVRyAiLi4uLi4uLiAgICAgOiBCb290IERUICAgIDogJVhcbiIsIHJlZ18wMy5iaXRzLmJvb3RfRFQpOworCX0KKworCXByaW50ayhLRVJOX0RFQlVHICIuLi4uIElSUSByZWRpcmVjdGlvbiB0YWJsZTpcbiIpOworCisJcHJpbnRrKEtFUk5fREVCVUcgIiBOUiBEc3QgTWFzayBUcmlnIElSUiBQb2wiCisJCQkgICIgU3RhdCBEbW9kIERlbGkgVmVjdDogICBcbiIpOworCisJZm9yIChpID0gMDsgaSA8PSByZWdfMDEuYml0cy5lbnRyaWVzOyBpKyspIHsKKwkJc3RydWN0IElPX0FQSUNfcm91dGVfZW50cnkgZW50cnk7CisKKwkJZW50cnkgPSBpb2FwaWNfcmVhZF9lbnRyeShhcGljLCBpKTsKKworCQlwcmludGsoS0VSTl9ERUJVRyAiICUwMnggJTAzWCAiLAorCQkJaSwKKwkJCWVudHJ5LmRlc3QKKwkJKTsKKworCQlwcmludGsoIiUxZCAgICAlMWQgICAgJTFkICAgJTFkICAgJTFkICAgICUxZCAgICAlMWQgICAgJTAyWFxuIiwKKwkJCWVudHJ5Lm1hc2ssCisJCQllbnRyeS50cmlnZ2VyLAorCQkJZW50cnkuaXJyLAorCQkJZW50cnkucG9sYXJpdHksCisJCQllbnRyeS5kZWxpdmVyeV9zdGF0dXMsCisJCQllbnRyeS5kZXN0X21vZGUsCisJCQllbnRyeS5kZWxpdmVyeV9tb2RlLAorCQkJZW50cnkudmVjdG9yCisJCSk7CisJfQorCX0KKwlwcmludGsoS0VSTl9ERUJVRyAiSVJRIHRvIHBpbiBtYXBwaW5nczpcbiIpOworCWZvcl9lYWNoX2lycV9jZmcoaXJxLCBjZmcpIHsKKwkJc3RydWN0IGlycV9waW5fbGlzdCAqZW50cnkgPSBjZmctPmlycV8yX3BpbjsKKwkJaWYgKCFlbnRyeSkKKwkJCWNvbnRpbnVlOworCQlwcmludGsoS0VSTl9ERUJVRyAiSVJRJWQgIiwgaXJxKTsKKwkJZm9yICg7OykgeworCQkJcHJpbnRrKCItPiAlZDolZCIsIGVudHJ5LT5hcGljLCBlbnRyeS0+cGluKTsKKwkJCWlmICghZW50cnktPm5leHQpCisJCQkJYnJlYWs7CisJCQllbnRyeSA9IGVudHJ5LT5uZXh0OworCQl9CisJCXByaW50aygiXG4iKTsKKwl9CisKKwlwcmludGsoS0VSTl9JTkZPICIuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gZG9uZS5cbiIpOworCisJcmV0dXJuOworfQorCitfX2FwaWNkZWJ1Z2luaXQodm9pZCkgcHJpbnRfQVBJQ19iaXRmaWVsZChpbnQgYmFzZSkKK3sKKwl1bnNpZ25lZCBpbnQgdjsKKwlpbnQgaSwgajsKKworCWlmIChhcGljX3ZlcmJvc2l0eSA9PSBBUElDX1FVSUVUKQorCQlyZXR1cm47CisKKwlwcmludGsoS0VSTl9ERUJVRyAiMDEyMzQ1Njc4OWFiY2RlZjAxMjM0NTY3ODlhYmNkZWZcbiIgS0VSTl9ERUJVRyk7CisJZm9yIChpID0gMDsgaSA8IDg7IGkrKykgeworCQl2ID0gYXBpY19yZWFkKGJhc2UgKyBpKjB4MTApOworCQlmb3IgKGogPSAwOyBqIDwgMzI7IGorKykgeworCQkJaWYgKHYgJiAoMTw8aikpCisJCQkJcHJpbnRrKCIxIik7CisJCQllbHNlCisJCQkJcHJpbnRrKCIwIik7CisJCX0KKwkJcHJpbnRrKCJcbiIpOworCX0KK30KKworX19hcGljZGVidWdpbml0KHZvaWQpIHByaW50X2xvY2FsX0FQSUModm9pZCAqZHVtbXkpCit7CisJdW5zaWduZWQgaW50IHYsIHZlciwgbWF4bHZ0OworCXU2NCBpY3I7CisKKwlpZiAoYXBpY192ZXJib3NpdHkgPT0gQVBJQ19RVUlFVCkKKwkJcmV0dXJuOworCisJcHJpbnRrKCJcbiIgS0VSTl9ERUJVRyAicHJpbnRpbmcgbG9jYWwgQVBJQyBjb250ZW50cyBvbiBDUFUjJWQvJWQ6XG4iLAorCQlzbXBfcHJvY2Vzc29yX2lkKCksIGhhcmRfc21wX3Byb2Nlc3Nvcl9pZCgpKTsKKwl2ID0gYXBpY19yZWFkKEFQSUNfSUQpOworCXByaW50ayhLRVJOX0lORk8gIi4uLiBBUElDIElEOiAgICAgICUwOHggKCUwMXgpXG4iLCB2LCByZWFkX2FwaWNfaWQoKSk7CisJdiA9IGFwaWNfcmVhZChBUElDX0xWUik7CisJcHJpbnRrKEtFUk5fSU5GTyAiLi4uIEFQSUMgVkVSU0lPTjogJTA4eFxuIiwgdik7CisJdmVyID0gR0VUX0FQSUNfVkVSU0lPTih2KTsKKwltYXhsdnQgPSBsYXBpY19nZXRfbWF4bHZ0KCk7CisKKwl2ID0gYXBpY19yZWFkKEFQSUNfVEFTS1BSSSk7CisJcHJpbnRrKEtFUk5fREVCVUcgIi4uLiBBUElDIFRBU0tQUkk6ICUwOHggKCUwMngpXG4iLCB2LCB2ICYgQVBJQ19UUFJJX01BU0spOworCisJaWYgKEFQSUNfSU5URUdSQVRFRCh2ZXIpKSB7ICAgICAgICAgICAgICAgICAgICAgLyogITgyNDg5RFggKi8KKwkJaWYgKCFBUElDX1hBUElDKHZlcikpIHsKKwkJCXYgPSBhcGljX3JlYWQoQVBJQ19BUkJQUkkpOworCQkJcHJpbnRrKEtFUk5fREVCVUcgIi4uLiBBUElDIEFSQlBSSTogJTA4eCAoJTAyeClcbiIsIHYsCisJCQkgICAgICAgdiAmIEFQSUNfQVJCUFJJX01BU0spOworCQl9CisJCXYgPSBhcGljX3JlYWQoQVBJQ19QUk9DUFJJKTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIi4uLiBBUElDIFBST0NQUkk6ICUwOHhcbiIsIHYpOworCX0KKworCS8qCisJICogUmVtb3RlIHJlYWQgc3VwcG9ydGVkIG9ubHkgaW4gdGhlIDgyNDg5RFggYW5kIGxvY2FsIEFQSUMgZm9yCisJICogUGVudGl1bSBwcm9jZXNzb3JzLgorCSAqLworCWlmICghQVBJQ19JTlRFR1JBVEVEKHZlcikgfHwgbWF4bHZ0ID09IDMpIHsKKwkJdiA9IGFwaWNfcmVhZChBUElDX1JSUik7CisJCXByaW50ayhLRVJOX0RFQlVHICIuLi4gQVBJQyBSUlI6ICUwOHhcbiIsIHYpOworCX0KKworCXYgPSBhcGljX3JlYWQoQVBJQ19MRFIpOworCXByaW50ayhLRVJOX0RFQlVHICIuLi4gQVBJQyBMRFI6ICUwOHhcbiIsIHYpOworCWlmICgheDJhcGljX2VuYWJsZWQoKSkgeworCQl2ID0gYXBpY19yZWFkKEFQSUNfREZSKTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIi4uLiBBUElDIERGUjogJTA4eFxuIiwgdik7CisJfQorCXYgPSBhcGljX3JlYWQoQVBJQ19TUElWKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiLi4uIEFQSUMgU1BJVjogJTA4eFxuIiwgdik7CisKKwlwcmludGsoS0VSTl9ERUJVRyAiLi4uIEFQSUMgSVNSIGZpZWxkOlxuIik7CisJcHJpbnRfQVBJQ19iaXRmaWVsZChBUElDX0lTUik7CisJcHJpbnRrKEtFUk5fREVCVUcgIi4uLiBBUElDIFRNUiBmaWVsZDpcbiIpOworCXByaW50X0FQSUNfYml0ZmllbGQoQVBJQ19UTVIpOworCXByaW50ayhLRVJOX0RFQlVHICIuLi4gQVBJQyBJUlIgZmllbGQ6XG4iKTsKKwlwcmludF9BUElDX2JpdGZpZWxkKEFQSUNfSVJSKTsKKworCWlmIChBUElDX0lOVEVHUkFURUQodmVyKSkgeyAgICAgICAgICAgICAvKiAhODI0ODlEWCAqLworCQlpZiAobWF4bHZ0ID4gMykgICAgICAgICAvKiBEdWUgdG8gdGhlIFBlbnRpdW0gZXJyYXR1bSAzQVAuICovCisJCQlhcGljX3dyaXRlKEFQSUNfRVNSLCAwKTsKKworCQl2ID0gYXBpY19yZWFkKEFQSUNfRVNSKTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIi4uLiBBUElDIEVTUjogJTA4eFxuIiwgdik7CisJfQorCisJaWNyID0gYXBpY19pY3JfcmVhZCgpOworCXByaW50ayhLRVJOX0RFQlVHICIuLi4gQVBJQyBJQ1I6ICUwOHhcbiIsICh1MzIpaWNyKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiLi4uIEFQSUMgSUNSMjogJTA4eFxuIiwgKHUzMikoaWNyID4+IDMyKSk7CisKKwl2ID0gYXBpY19yZWFkKEFQSUNfTFZUVCk7CisJcHJpbnRrKEtFUk5fREVCVUcgIi4uLiBBUElDIExWVFQ6ICUwOHhcbiIsIHYpOworCisJaWYgKG1heGx2dCA+IDMpIHsgICAgICAgICAgICAgICAgICAgICAgIC8qIFBDIGlzIExWVCM0LiAqLworCQl2ID0gYXBpY19yZWFkKEFQSUNfTFZUUEMpOworCQlwcmludGsoS0VSTl9ERUJVRyAiLi4uIEFQSUMgTFZUUEM6ICUwOHhcbiIsIHYpOworCX0KKwl2ID0gYXBpY19yZWFkKEFQSUNfTFZUMCk7CisJcHJpbnRrKEtFUk5fREVCVUcgIi4uLiBBUElDIExWVDA6ICUwOHhcbiIsIHYpOworCXYgPSBhcGljX3JlYWQoQVBJQ19MVlQxKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiLi4uIEFQSUMgTFZUMTogJTA4eFxuIiwgdik7CisKKwlpZiAobWF4bHZ0ID4gMikgewkJCS8qIEVSUiBpcyBMVlQjMy4gKi8KKwkJdiA9IGFwaWNfcmVhZChBUElDX0xWVEVSUik7CisJCXByaW50ayhLRVJOX0RFQlVHICIuLi4gQVBJQyBMVlRFUlI6ICUwOHhcbiIsIHYpOworCX0KKworCXYgPSBhcGljX3JlYWQoQVBJQ19UTUlDVCk7CisJcHJpbnRrKEtFUk5fREVCVUcgIi4uLiBBUElDIFRNSUNUOiAlMDh4XG4iLCB2KTsKKwl2ID0gYXBpY19yZWFkKEFQSUNfVE1DQ1QpOworCXByaW50ayhLRVJOX0RFQlVHICIuLi4gQVBJQyBUTUNDVDogJTA4eFxuIiwgdik7CisJdiA9IGFwaWNfcmVhZChBUElDX1REQ1IpOworCXByaW50ayhLRVJOX0RFQlVHICIuLi4gQVBJQyBURENSOiAlMDh4XG4iLCB2KTsKKwlwcmludGsoIlxuIik7Cit9CisKK19fYXBpY2RlYnVnaW5pdCh2b2lkKSBwcmludF9hbGxfbG9jYWxfQVBJQ3Modm9pZCkKK3sKKwlpbnQgY3B1OworCisJcHJlZW1wdF9kaXNhYmxlKCk7CisJZm9yX2VhY2hfb25saW5lX2NwdShjcHUpCisJCXNtcF9jYWxsX2Z1bmN0aW9uX3NpbmdsZShjcHUsIHByaW50X2xvY2FsX0FQSUMsIE5VTEwsIDEpOworCXByZWVtcHRfZW5hYmxlKCk7Cit9CisKK19fYXBpY2RlYnVnaW5pdCh2b2lkKSBwcmludF9QSUModm9pZCkKK3sKKwl1bnNpZ25lZCBpbnQgdjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJaWYgKGFwaWNfdmVyYm9zaXR5ID09IEFQSUNfUVVJRVQpCisJCXJldHVybjsKKworCXByaW50ayhLRVJOX0RFQlVHICJcbnByaW50aW5nIFBJQyBjb250ZW50c1xuIik7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaTgyNTlBX2xvY2ssIGZsYWdzKTsKKworCXYgPSBpbmIoMHhhMSkgPDwgOCB8IGluYigweDIxKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiLi4uIFBJQyAgSU1SOiAlMDR4XG4iLCB2KTsKKworCXYgPSBpbmIoMHhhMCkgPDwgOCB8IGluYigweDIwKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiLi4uIFBJQyAgSVJSOiAlMDR4XG4iLCB2KTsKKworCW91dGIoMHgwYiwweGEwKTsKKwlvdXRiKDB4MGIsMHgyMCk7CisJdiA9IGluYigweGEwKSA8PCA4IHwgaW5iKDB4MjApOworCW91dGIoMHgwYSwweGEwKTsKKwlvdXRiKDB4MGEsMHgyMCk7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpODI1OUFfbG9jaywgZmxhZ3MpOworCisJcHJpbnRrKEtFUk5fREVCVUcgIi4uLiBQSUMgIElTUjogJTA0eFxuIiwgdik7CisKKwl2ID0gaW5iKDB4NGQxKSA8PCA4IHwgaW5iKDB4NGQwKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiLi4uIFBJQyBFTENSOiAlMDR4XG4iLCB2KTsKK30KKworX19hcGljZGVidWdpbml0KGludCkgcHJpbnRfYWxsX0lDcyh2b2lkKQoreworCXByaW50X1BJQygpOworCXByaW50X2FsbF9sb2NhbF9BUElDcygpOworCXByaW50X0lPX0FQSUMoKTsKKworCXJldHVybiAwOworfQorCitmc19pbml0Y2FsbChwcmludF9hbGxfSUNzKTsKKworCisvKiBXaGVyZSBpZiBhbnl3aGVyZSBpcyB0aGUgaTgyNTkgY29ubmVjdCBpbiBleHRlcm5hbCBpbnQgbW9kZSAqLworc3RhdGljIHN0cnVjdCB7IGludCBwaW4sIGFwaWM7IH0gaW9hcGljX2k4MjU5ID0geyAtMSwgLTEgfTsKKwordm9pZCBfX2luaXQgZW5hYmxlX0lPX0FQSUModm9pZCkKK3sKKwl1bmlvbiBJT19BUElDX3JlZ18wMSByZWdfMDE7CisJaW50IGk4MjU5X2FwaWMsIGk4MjU5X3BpbjsKKwlpbnQgYXBpYzsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisjaWZkZWYgQ09ORklHX1g4Nl8zMgorCWludCBpOworCWlmICghcGlycXNfZW5hYmxlZCkKKwkJZm9yIChpID0gMDsgaSA8IE1BWF9QSVJRUzsgaSsrKQorCQkJcGlycV9lbnRyaWVzW2ldID0gLTE7CisjZW5kaWYKKworCS8qCisJICogVGhlIG51bWJlciBvZiBJTy1BUElDIElSUSByZWdpc3RlcnMgKD09ICNwaW5zKToKKwkgKi8KKwlmb3IgKGFwaWMgPSAwOyBhcGljIDwgbnJfaW9hcGljczsgYXBpYysrKSB7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZpb2FwaWNfbG9jaywgZmxhZ3MpOworCQlyZWdfMDEucmF3ID0gaW9fYXBpY19yZWFkKGFwaWMsIDEpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2FwaWNfbG9jaywgZmxhZ3MpOworCQlucl9pb2FwaWNfcmVnaXN0ZXJzW2FwaWNdID0gcmVnXzAxLmJpdHMuZW50cmllcysxOworCX0KKwlmb3IoYXBpYyA9IDA7IGFwaWMgPCBucl9pb2FwaWNzOyBhcGljKyspIHsKKwkJaW50IHBpbjsKKwkJLyogU2VlIGlmIGFueSBvZiB0aGUgcGlucyBpcyBpbiBFeHRJTlQgbW9kZSAqLworCQlmb3IgKHBpbiA9IDA7IHBpbiA8IG5yX2lvYXBpY19yZWdpc3RlcnNbYXBpY107IHBpbisrKSB7CisJCQlzdHJ1Y3QgSU9fQVBJQ19yb3V0ZV9lbnRyeSBlbnRyeTsKKwkJCWVudHJ5ID0gaW9hcGljX3JlYWRfZW50cnkoYXBpYywgcGluKTsKKworCQkJLyogSWYgdGhlIGludGVycnVwdCBsaW5lIGlzIGVuYWJsZWQgYW5kIGluIEV4dEludCBtb2RlCisJCQkgKiBJIGhhdmUgZm91bmQgdGhlIHBpbiB3aGVyZSB0aGUgaTgyNTkgaXMgY29ubmVjdGVkLgorCQkJICovCisJCQlpZiAoKGVudHJ5Lm1hc2sgPT0gMCkgJiYgKGVudHJ5LmRlbGl2ZXJ5X21vZGUgPT0gZGVzdF9FeHRJTlQpKSB7CisJCQkJaW9hcGljX2k4MjU5LmFwaWMgPSBhcGljOworCQkJCWlvYXBpY19pODI1OS5waW4gID0gcGluOworCQkJCWdvdG8gZm91bmRfaTgyNTk7CisJCQl9CisJCX0KKwl9CisgZm91bmRfaTgyNTk6CisJLyogTG9vayB0byBzZWUgd2hhdCBpZiB0aGUgTVAgdGFibGUgaGFzIHJlcG9ydGVkIHRoZSBFeHRJTlQgKi8KKwkvKiBJZiB3ZSBjb3VsZCBub3QgZmluZCB0aGUgYXBwcm9wcmlhdGUgcGluIGJ5IGxvb2tpbmcgYXQgdGhlIGlvYXBpYworCSAqIHRoZSBpODI1OSBwcm9iYWJseSBpcyBub3QgY29ubmVjdGVkIHRoZSBpb2FwaWMgYnV0IGdpdmUgdGhlCisJICogbXB0YWJsZSBhIGNoYW5jZSBhbnl3YXkuCisJICovCisJaTgyNTlfcGluICA9IGZpbmRfaXNhX2lycV9waW4oMCwgbXBfRXh0SU5UKTsKKwlpODI1OV9hcGljID0gZmluZF9pc2FfaXJxX2FwaWMoMCwgbXBfRXh0SU5UKTsKKwkvKiBUcnVzdCB0aGUgTVAgdGFibGUgaWYgbm90aGluZyBpcyBzZXR1cCBpbiB0aGUgaGFyZHdhcmUgKi8KKwlpZiAoKGlvYXBpY19pODI1OS5waW4gPT0gLTEpICYmIChpODI1OV9waW4gPj0gMCkpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiRXh0SU5UIG5vdCBzZXR1cCBpbiBoYXJkd2FyZSBidXQgcmVwb3J0ZWQgYnkgTVAgdGFibGVcbiIpOworCQlpb2FwaWNfaTgyNTkucGluICA9IGk4MjU5X3BpbjsKKwkJaW9hcGljX2k4MjU5LmFwaWMgPSBpODI1OV9hcGljOworCX0KKwkvKiBDb21wbGFpbiBpZiB0aGUgTVAgdGFibGUgYW5kIHRoZSBoYXJkd2FyZSBkaXNhZ3JlZSAqLworCWlmICgoKGlvYXBpY19pODI1OS5hcGljICE9IGk4MjU5X2FwaWMpIHx8IChpb2FwaWNfaTgyNTkucGluICE9IGk4MjU5X3BpbikpICYmCisJCShpODI1OV9waW4gPj0gMCkgJiYgKGlvYXBpY19pODI1OS5waW4gPj0gMCkpCisJeworCQlwcmludGsoS0VSTl9XQVJOSU5HICJFeHRJTlQgaW4gaGFyZHdhcmUgYW5kIE1QIHRhYmxlIGRpZmZlclxuIik7CisJfQorCisJLyoKKwkgKiBEbyBub3QgdHJ1c3QgdGhlIElPLUFQSUMgYmVpbmcgZW1wdHkgYXQgYm9vdHVwCisJICovCisJY2xlYXJfSU9fQVBJQygpOworfQorCisvKgorICogTm90IGFuIF9faW5pdCwgbmVlZGVkIGJ5IHRoZSByZWJvb3QgY29kZQorICovCit2b2lkIGRpc2FibGVfSU9fQVBJQyh2b2lkKQoreworCS8qCisJICogQ2xlYXIgdGhlIElPLUFQSUMgYmVmb3JlIHJlYm9vdGluZzoKKwkgKi8KKwljbGVhcl9JT19BUElDKCk7CisKKwkvKgorCSAqIElmIHRoZSBpODI1OSBpcyByb3V0ZWQgdGhyb3VnaCBhbiBJT0FQSUMKKwkgKiBQdXQgdGhhdCBJT0FQSUMgaW4gdmlydHVhbCB3aXJlIG1vZGUKKwkgKiBzbyBsZWdhY3kgaW50ZXJydXB0cyBjYW4gYmUgZGVsaXZlcmVkLgorCSAqLworCWlmIChpb2FwaWNfaTgyNTkucGluICE9IC0xKSB7CisJCXN0cnVjdCBJT19BUElDX3JvdXRlX2VudHJ5IGVudHJ5OworCisJCW1lbXNldCgmZW50cnksIDAsIHNpemVvZihlbnRyeSkpOworCQllbnRyeS5tYXNrICAgICAgICAgICAgPSAwOyAvKiBFbmFibGVkICovCisJCWVudHJ5LnRyaWdnZXIgICAgICAgICA9IDA7IC8qIEVkZ2UgKi8KKwkJZW50cnkuaXJyICAgICAgICAgICAgID0gMDsKKwkJZW50cnkucG9sYXJpdHkgICAgICAgID0gMDsgLyogSGlnaCAqLworCQllbnRyeS5kZWxpdmVyeV9zdGF0dXMgPSAwOworCQllbnRyeS5kZXN0X21vZGUgICAgICAgPSAwOyAvKiBQaHlzaWNhbCAqLworCQllbnRyeS5kZWxpdmVyeV9tb2RlICAgPSBkZXN0X0V4dElOVDsgLyogRXh0SW50ICovCisJCWVudHJ5LnZlY3RvciAgICAgICAgICA9IDA7CisJCWVudHJ5LmRlc3QgICAgICAgICAgICA9IHJlYWRfYXBpY19pZCgpOworCisJCS8qCisJCSAqIEFkZCBpdCB0byB0aGUgSU8tQVBJQyBpcnEtcm91dGluZyB0YWJsZToKKwkJICovCisJCWlvYXBpY193cml0ZV9lbnRyeShpb2FwaWNfaTgyNTkuYXBpYywgaW9hcGljX2k4MjU5LnBpbiwgZW50cnkpOworCX0KKworCWRpc2Nvbm5lY3RfYnNwX0FQSUMoaW9hcGljX2k4MjU5LnBpbiAhPSAtMSk7Cit9CisKKyNpZmRlZiBDT05GSUdfWDg2XzMyCisvKgorICogZnVuY3Rpb24gdG8gc2V0IHRoZSBJTy1BUElDIHBoeXNpY2FsIElEcyBiYXNlZCBvbiB0aGUKKyAqIHZhbHVlcyBzdG9yZWQgaW4gdGhlIE1QQyB0YWJsZS4KKyAqCisgKiBieSBNYXR0IERvbXNjaCA8TWF0dF9Eb21zY2hAZGVsbC5jb20+ICBUdWUgRGVjIDIxIDEyOjI1OjA1IENTVCAxOTk5CisgKi8KKworc3RhdGljIHZvaWQgX19pbml0IHNldHVwX2lvYXBpY19pZHNfZnJvbV9tcGModm9pZCkKK3sKKwl1bmlvbiBJT19BUElDX3JlZ18wMCByZWdfMDA7CisJcGh5c2lkX21hc2tfdCBwaHlzX2lkX3ByZXNlbnRfbWFwOworCWludCBhcGljOworCWludCBpOworCXVuc2lnbmVkIGNoYXIgb2xkX2lkOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpZiAoeDg2X3F1aXJrcy0+c2V0dXBfaW9hcGljX2lkcyAmJiB4ODZfcXVpcmtzLT5zZXR1cF9pb2FwaWNfaWRzKCkpCisJCXJldHVybjsKKworCS8qCisJICogRG9uJ3QgY2hlY2sgSS9PIEFQSUMgSURzIGZvciB4QVBJQyBzeXN0ZW1zLiAgVGhleSBoYXZlCisJICogbm8gbWVhbmluZyB3aXRob3V0IHRoZSBzZXJpYWwgQVBJQyBidXMuCisJICovCisJaWYgKCEoYm9vdF9jcHVfZGF0YS54ODZfdmVuZG9yID09IFg4Nl9WRU5ET1JfSU5URUwpCisJCXx8IEFQSUNfWEFQSUMoYXBpY192ZXJzaW9uW2Jvb3RfY3B1X3BoeXNpY2FsX2FwaWNpZF0pKQorCQlyZXR1cm47CisJLyoKKwkgKiBUaGlzIGlzIGJyb2tlbjsgYW55dGhpbmcgd2l0aCBhIHJlYWwgY3B1IGNvdW50IGhhcyB0bworCSAqIGNpcmN1bXZlbnQgdGhpcyBpZGlvY3kgcmVnYXJkbGVzcy4KKwkgKi8KKwlwaHlzX2lkX3ByZXNlbnRfbWFwID0gaW9hcGljX3BoeXNfaWRfbWFwKHBoeXNfY3B1X3ByZXNlbnRfbWFwKTsKKworCS8qCisJICogU2V0IHRoZSBJT0FQSUMgSUQgdG8gdGhlIHZhbHVlIHN0b3JlZCBpbiB0aGUgTVBDIHRhYmxlLgorCSAqLworCWZvciAoYXBpYyA9IDA7IGFwaWMgPCBucl9pb2FwaWNzOyBhcGljKyspIHsKKworCQkvKiBSZWFkIHRoZSByZWdpc3RlciAwIHZhbHVlICovCisJCXNwaW5fbG9ja19pcnFzYXZlKCZpb2FwaWNfbG9jaywgZmxhZ3MpOworCQlyZWdfMDAucmF3ID0gaW9fYXBpY19yZWFkKGFwaWMsIDApOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2FwaWNfbG9jaywgZmxhZ3MpOworCisJCW9sZF9pZCA9IG1wX2lvYXBpY3NbYXBpY10ubXBfYXBpY2lkOworCisJCWlmIChtcF9pb2FwaWNzW2FwaWNdLm1wX2FwaWNpZCA+PSBnZXRfcGh5c2ljYWxfYnJvYWRjYXN0KCkpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiQklPUyBidWcsIElPLUFQSUMjJWQgSUQgaXMgJWQgaW4gdGhlIE1QQyB0YWJsZSEuLi5cbiIsCisJCQkJYXBpYywgbXBfaW9hcGljc1thcGljXS5tcF9hcGljaWQpOworCQkJcHJpbnRrKEtFUk5fRVJSICIuLi4gZml4aW5nIHVwIHRvICVkLiAodGVsbCB5b3VyIGh3IHZlbmRvcilcbiIsCisJCQkJcmVnXzAwLmJpdHMuSUQpOworCQkJbXBfaW9hcGljc1thcGljXS5tcF9hcGljaWQgPSByZWdfMDAuYml0cy5JRDsKKwkJfQorCisJCS8qCisJCSAqIFNhbml0eSBjaGVjaywgaXMgdGhlIElEIHJlYWxseSBmcmVlPyBFdmVyeSBBUElDIGluIGEKKwkJICogc3lzdGVtIG11c3QgaGF2ZSBhIHVuaXF1ZSBJRCBvciB3ZSBnZXQgbG90cyBvZiBuaWNlCisJCSAqICdzdHVjayBvbiBzbXBfaW52YWxpZGF0ZV9uZWVkZWQgSVBJIHdhaXQnIG1lc3NhZ2VzLgorCQkgKi8KKwkJaWYgKGNoZWNrX2FwaWNpZF91c2VkKHBoeXNfaWRfcHJlc2VudF9tYXAsCisJCQkJCW1wX2lvYXBpY3NbYXBpY10ubXBfYXBpY2lkKSkgeworCQkJcHJpbnRrKEtFUk5fRVJSICJCSU9TIGJ1ZywgSU8tQVBJQyMlZCBJRCAlZCBpcyBhbHJlYWR5IHVzZWQhLi4uXG4iLAorCQkJCWFwaWMsIG1wX2lvYXBpY3NbYXBpY10ubXBfYXBpY2lkKTsKKwkJCWZvciAoaSA9IDA7IGkgPCBnZXRfcGh5c2ljYWxfYnJvYWRjYXN0KCk7IGkrKykKKwkJCQlpZiAoIXBoeXNpZF9pc3NldChpLCBwaHlzX2lkX3ByZXNlbnRfbWFwKSkKKwkJCQkJYnJlYWs7CisJCQlpZiAoaSA+PSBnZXRfcGh5c2ljYWxfYnJvYWRjYXN0KCkpCisJCQkJcGFuaWMoIk1heCBBUElDIElEIGV4Y2VlZGVkIVxuIik7CisJCQlwcmludGsoS0VSTl9FUlIgIi4uLiBmaXhpbmcgdXAgdG8gJWQuICh0ZWxsIHlvdXIgaHcgdmVuZG9yKVxuIiwKKwkJCQlpKTsKKwkJCXBoeXNpZF9zZXQoaSwgcGh5c19pZF9wcmVzZW50X21hcCk7CisJCQltcF9pb2FwaWNzW2FwaWNdLm1wX2FwaWNpZCA9IGk7CisJCX0gZWxzZSB7CisJCQlwaHlzaWRfbWFza190IHRtcDsKKwkJCXRtcCA9IGFwaWNpZF90b19jcHVfcHJlc2VudChtcF9pb2FwaWNzW2FwaWNdLm1wX2FwaWNpZCk7CisJCQlhcGljX3ByaW50ayhBUElDX1ZFUkJPU0UsICJTZXR0aW5nICVkIGluIHRoZSAiCisJCQkJCSJwaHlzX2lkX3ByZXNlbnRfbWFwXG4iLAorCQkJCQltcF9pb2FwaWNzW2FwaWNdLm1wX2FwaWNpZCk7CisJCQlwaHlzaWRzX29yKHBoeXNfaWRfcHJlc2VudF9tYXAsIHBoeXNfaWRfcHJlc2VudF9tYXAsIHRtcCk7CisJCX0KKworCisJCS8qCisJCSAqIFdlIG5lZWQgdG8gYWRqdXN0IHRoZSBJUlEgcm91dGluZyB0YWJsZQorCQkgKiBpZiB0aGUgSUQgY2hhbmdlZC4KKwkJICovCisJCWlmIChvbGRfaWQgIT0gbXBfaW9hcGljc1thcGljXS5tcF9hcGljaWQpCisJCQlmb3IgKGkgPSAwOyBpIDwgbXBfaXJxX2VudHJpZXM7IGkrKykKKwkJCQlpZiAobXBfaXJxc1tpXS5tcF9kc3RhcGljID09IG9sZF9pZCkKKwkJCQkJbXBfaXJxc1tpXS5tcF9kc3RhcGljCisJCQkJCQk9IG1wX2lvYXBpY3NbYXBpY10ubXBfYXBpY2lkOworCisJCS8qCisJCSAqIFJlYWQgdGhlIHJpZ2h0IHZhbHVlIGZyb20gdGhlIE1QQyB0YWJsZSBhbmQKKwkJICogd3JpdGUgaXQgaW50byB0aGUgSUQgcmVnaXN0ZXIuCisJCSAqLworCQlhcGljX3ByaW50ayhBUElDX1ZFUkJPU0UsIEtFUk5fSU5GTworCQkJIi4uLmNoYW5naW5nIElPLUFQSUMgcGh5c2ljYWwgQVBJQyBJRCB0byAlZCAuLi4iLAorCQkJbXBfaW9hcGljc1thcGljXS5tcF9hcGljaWQpOworCisJCXJlZ18wMC5iaXRzLklEID0gbXBfaW9hcGljc1thcGljXS5tcF9hcGljaWQ7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZpb2FwaWNfbG9jaywgZmxhZ3MpOworCQlpb19hcGljX3dyaXRlKGFwaWMsIDAsIHJlZ18wMC5yYXcpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2FwaWNfbG9jaywgZmxhZ3MpOworCisJCS8qCisJCSAqIFNhbml0eSBjaGVjaworCQkgKi8KKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmlvYXBpY19sb2NrLCBmbGFncyk7CisJCXJlZ18wMC5yYXcgPSBpb19hcGljX3JlYWQoYXBpYywgMCk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYXBpY19sb2NrLCBmbGFncyk7CisJCWlmIChyZWdfMDAuYml0cy5JRCAhPSBtcF9pb2FwaWNzW2FwaWNdLm1wX2FwaWNpZCkKKwkJCXByaW50aygiY291bGQgbm90IHNldCBJRCFcbiIpOworCQllbHNlCisJCQlhcGljX3ByaW50ayhBUElDX1ZFUkJPU0UsICIgb2suXG4iKTsKKwl9Cit9CisjZW5kaWYKKworaW50IG5vX3RpbWVyX2NoZWNrIF9faW5pdGRhdGE7CisKK3N0YXRpYyBpbnQgX19pbml0IG5vdGltZXJjaGVjayhjaGFyICpzKQoreworCW5vX3RpbWVyX2NoZWNrID0gMTsKKwlyZXR1cm4gMTsKK30KK19fc2V0dXAoIm5vX3RpbWVyX2NoZWNrIiwgbm90aW1lcmNoZWNrKTsKKworLyoKKyAqIFRoZXJlIGlzIGEgbmFzdHkgYnVnIGluIHNvbWUgb2xkZXIgU01QIGJvYXJkcywgdGhlaXIgbXB0YWJsZSBsaWVzCisgKiBhYm91dCB0aGUgdGltZXIgSVJRLiBXZSBkbyB0aGUgZm9sbG93aW5nIHRvIHdvcmsgYXJvdW5kIHRoZSBzaXR1YXRpb246CisgKgorICoJLSB0aW1lciBJUlEgZGVmYXVsdHMgdG8gSU8tQVBJQyBJUlEKKyAqCS0gaWYgdGhpcyBmdW5jdGlvbiBkZXRlY3RzIHRoYXQgdGltZXIgSVJRcyBhcmUgZGVmdW5jdCwgdGhlbiB3ZSBmYWxsCisgKgkgIGJhY2sgdG8gSVNBIHRpbWVyIElSUXMKKyAqLworc3RhdGljIGludCBfX2luaXQgdGltZXJfaXJxX3dvcmtzKHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyB0MSA9IGppZmZpZXM7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWlmIChub190aW1lcl9jaGVjaykKKwkJcmV0dXJuIDE7CisKKwlsb2NhbF9zYXZlX2ZsYWdzKGZsYWdzKTsKKwlsb2NhbF9pcnFfZW5hYmxlKCk7CisJLyogTGV0IHRlbiB0aWNrcyBwYXNzLi4uICovCisJbWRlbGF5KCgxMCAqIDEwMDApIC8gSFopOworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKworCS8qCisJICogRXhwZWN0IGEgZmV3IHRpY2tzIGF0IGxlYXN0LCB0byBiZSBzdXJlIHNvbWUgcG9zc2libGUKKwkgKiBnbHVlIGxvZ2ljIGRvZXMgbm90IGxvY2sgdXAgYWZ0ZXIgb25lIG9yIHR3byBmaXJzdAorCSAqIHRpY2tzIGluIGEgbm9uLUV4dElOVCBtb2RlLiAgQWxzbyB0aGUgbG9jYWwgQVBJQworCSAqIG1pZ2h0IGhhdmUgY2FjaGVkIG9uZSBFeHRJTlQgaW50ZXJydXB0LiAgRmluYWxseSwgYXQKKwkgKiBsZWFzdCBvbmUgdGljayBtYXkgYmUgbG9zdCBkdWUgdG8gZGVsYXlzLgorCSAqLworCisJLyogamlmZmllcyB3cmFwPyAqLworCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIHQxICsgNCkpCisJCXJldHVybiAxOworCXJldHVybiAwOworfQorCisvKgorICogSW4gdGhlIFNNUCtJT0FQSUMgY2FzZSBpdCBtaWdodCBoYXBwZW4gdGhhdCB0aGVyZSBhcmUgYW4gdW5zcGVjaWZpZWQKKyAqIG51bWJlciBvZiBwZW5kaW5nIElSUSBldmVudHMgdW5oYW5kbGVkLiBUaGVzZSBjYXNlcyBhcmUgdmVyeSByYXJlLAorICogc28gd2UgJ3Jlc2VuZCcgdGhlc2UgSVJRcyB2aWEgSVBJcywgdG8gdGhlIHNhbWUgQ1BVLiBJdCdzIG11Y2gKKyAqIGJldHRlciB0byBkbyBpdCB0aGlzIHdheSBhcyB0aHVzIHdlIGRvIG5vdCBoYXZlIHRvIGJlIGF3YXJlIG9mCisgKiAncGVuZGluZycgaW50ZXJydXB0cyBpbiB0aGUgSVJRIHBhdGgsIGV4Y2VwdCBhdCB0aGlzIHBvaW50LgorICovCisvKgorICogRWRnZSB0cmlnZ2VyZWQgbmVlZHMgdG8gcmVzZW5kIGFueSBpbnRlcnJ1cHQKKyAqIHRoYXQgd2FzIGRlbGF5ZWQgYnV0IHRoaXMgaXMgbm93IGhhbmRsZWQgaW4gdGhlIGRldmljZQorICogaW5kZXBlbmRlbnQgY29kZS4KKyAqLworCisvKgorICogU3RhcnRpbmcgdXAgYSBlZGdlLXRyaWdnZXJlZCBJTy1BUElDIGludGVycnVwdCBpcworICogbmFzdHkgLSB3ZSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IHdlIGdldCB0aGUgZWRnZS4KKyAqIElmIGl0IGlzIGFscmVhZHkgYXNzZXJ0ZWQgZm9yIHNvbWUgcmVhc29uLCB3ZSBuZWVkCisgKiByZXR1cm4gMSB0byBpbmRpY2F0ZSB0aGF0IGlzIHdhcyBwZW5kaW5nLgorICoKKyAqIFRoaXMgaXMgbm90IGNvbXBsZXRlIC0gd2Ugc2hvdWxkIGJlIGFibGUgdG8gZmFrZQorICogYW4gZWRnZSBldmVuIGlmIGl0IGlzbid0IG9uIHRoZSA4MjU5QS4uLgorICovCisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgc3RhcnR1cF9pb2FwaWNfaXJxKHVuc2lnbmVkIGludCBpcnEpCit7CisJaW50IHdhc19wZW5kaW5nID0gMDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmlvYXBpY19sb2NrLCBmbGFncyk7CisJaWYgKGlycSA8IDE2KSB7CisJCWRpc2FibGVfODI1OUFfaXJxKGlycSk7CisJCWlmIChpODI1OUFfaXJxX3BlbmRpbmcoaXJxKSkKKwkJCXdhc19wZW5kaW5nID0gMTsKKwl9CisJX191bm1hc2tfSU9fQVBJQ19pcnEoaXJxKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2FwaWNfbG9jaywgZmxhZ3MpOworCisJcmV0dXJuIHdhc19wZW5kaW5nOworfQorCisjaWZkZWYgQ09ORklHX1g4Nl82NAorc3RhdGljIGludCBpb2FwaWNfcmV0cmlnZ2VyX2lycSh1bnNpZ25lZCBpbnQgaXJxKQoreworCisJc3RydWN0IGlycV9jZmcgKmNmZyA9IGlycV9jZmcoaXJxKTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnZlY3Rvcl9sb2NrLCBmbGFncyk7CisJc2VuZF9JUElfbWFzayhjcHVtYXNrX29mX2NwdShmaXJzdF9jcHUoY2ZnLT5kb21haW4pKSwgY2ZnLT52ZWN0b3IpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnZlY3Rvcl9sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gMTsKK30KKyNlbHNlCitzdGF0aWMgaW50IGlvYXBpY19yZXRyaWdnZXJfaXJxKHVuc2lnbmVkIGludCBpcnEpCit7CisJc2VuZF9JUElfc2VsZihpcnFfY2ZnKGlycSktPnZlY3Rvcik7CisKKwlyZXR1cm4gMTsKK30KKyNlbmRpZgorCisvKgorICogTGV2ZWwgYW5kIGVkZ2UgdHJpZ2dlcmVkIElPLUFQSUMgaW50ZXJydXB0cyBuZWVkIGRpZmZlcmVudCBoYW5kbGluZywKKyAqIHNvIHdlIHVzZSB0d28gc2VwYXJhdGUgSVJRIGRlc2NyaXB0b3JzLiBFZGdlIHRyaWdnZXJlZCBJUlFzIGNhbiBiZQorICogaGFuZGxlZCB3aXRoIHRoZSBsZXZlbC10cmlnZ2VyZWQgZGVzY3JpcHRvciwgYnV0IHRoYXQgb25lIGhhcyBzbGlnaHRseQorICogbW9yZSBvdmVyaGVhZC4gTGV2ZWwtdHJpZ2dlcmVkIGludGVycnVwdHMgY2Fubm90IGJlIGhhbmRsZWQgd2l0aCB0aGUKKyAqIGVkZ2UtdHJpZ2dlcmVkIGhhbmRsZXIsIHdpdGhvdXQgcmlza2luZyBJUlEgc3Rvcm1zIGFuZCBvdGhlciB1Z2x5CisgKiByYWNlcy4KKyAqLworCisjaWZkZWYgQ09ORklHX1NNUAorCisjaWZkZWYgQ09ORklHX0lOVFJfUkVNQVAKK3N0YXRpYyB2b2lkIGlyX2lycV9taWdyYXRpb24oc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKKworc3RhdGljIERFQ0xBUkVfREVMQVlFRF9XT1JLKGlyX21pZ3JhdGlvbl93b3JrLCBpcl9pcnFfbWlncmF0aW9uKTsKKworLyoKKyAqIE1pZ3JhdGUgdGhlIElPLUFQSUMgaXJxIGluIHRoZSBwcmVzZW5jZSBvZiBpbnRyLXJlbWFwcGluZy4KKyAqCisgKiBGb3IgZWRnZSB0cmlnZ2VyZWQsIGlycSBtaWdyYXRpb24gaXMgYSBzaW1wbGUgYXRvbWljIHVwZGF0ZShvZiB2ZWN0b3IKKyAqIGFuZCBjcHUgZGVzdGluYXRpb24pIG9mIElSVEUgYW5kIGZsdXNoIHRoZSBoYXJkd2FyZSBjYWNoZS4KKyAqCisgKiBGb3IgbGV2ZWwgdHJpZ2dlcmVkLCB3ZSBuZWVkIHRvIG1vZGlmeSB0aGUgaW8tYXBpYyBSVEUgYXN3ZWxsIHdpdGggdGhlIHVwZGF0ZQorICogdmVjdG9yIGluZm9ybWF0aW9uLCBhbG9uZyB3aXRoIG1vZGlmeWluZyBJUlRFIHdpdGggdmVjdG9yIGFuZCBkZXN0aW5hdGlvbi4KKyAqIFNvIGlycSBtaWdyYXRpb24gZm9yIGxldmVsIHRyaWdnZXJlZCBpcyBsaXR0bGUgIGJpdCBtb3JlIGNvbXBsZXggY29tcGFyZWQgdG8KKyAqIGVkZ2UgdHJpZ2dlcmVkIG1pZ3JhdGlvbi4gQnV0IHRoZSBnb29kIG5ld3MgaXMsIHdlIHVzZSB0aGUgc2FtZSBhbGdvcml0aG0KKyAqIGZvciBsZXZlbCB0cmlnZ2VyZWQgbWlncmF0aW9uIGFzIHdlIGhhdmUgdG9kYXksIG9ubHkgZGlmZmVyZW5jZSBiZWluZywKKyAqIHdlIG5vdyBpbml0aWF0ZSB0aGUgaXJxIG1pZ3JhdGlvbiBmcm9tIHByb2Nlc3MgY29udGV4dCBpbnN0ZWFkIG9mIHRoZQorICogaW50ZXJydXB0IGNvbnRleHQuCisgKgorICogSW4gZnV0dXJlLCB3aGVuIHdlIGRvIGEgZGlyZWN0ZWQgRU9JIChjb21iaW5lZCB3aXRoIGNwdSBFT0kgYnJvYWRjYXN0CisgKiBzdXBwcmVzc2lvbikgdG8gdGhlIElPLUFQSUMsIGxldmVsIHRyaWdnZXJlZCBpcnEgbWlncmF0aW9uIHdpbGwgYWxzbyBiZQorICogYXMgc2ltcGxlIGFzIGVkZ2UgdHJpZ2dlcmVkIG1pZ3JhdGlvbiBhbmQgd2UgY2FuIGRvIHRoZSBpcnEgbWlncmF0aW9uCisgKiB3aXRoIGEgc2ltcGxlIGF0b21pYyB1cGRhdGUgdG8gSU8tQVBJQyBSVEUuCisgKi8KK3N0YXRpYyB2b2lkIG1pZ3JhdGVfaW9hcGljX2lycShpbnQgaXJxLCBjcHVtYXNrX3QgbWFzaykKK3sKKwlzdHJ1Y3QgaXJxX2NmZyAqY2ZnOworCXN0cnVjdCBpcnFfZGVzYyAqZGVzYzsKKwljcHVtYXNrX3QgdG1wLCBjbGVhbnVwX21hc2s7CisJc3RydWN0IGlydGUgaXJ0ZTsKKwlpbnQgbW9kaWZ5X2lvYXBpY19ydGU7CisJdW5zaWduZWQgaW50IGRlc3Q7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWNwdXNfYW5kKHRtcCwgbWFzaywgY3B1X29ubGluZV9tYXApOworCWlmIChjcHVzX2VtcHR5KHRtcCkpCisJCXJldHVybjsKKworCWlmIChnZXRfaXJ0ZShpcnEsICZpcnRlKSkKKwkJcmV0dXJuOworCisJaWYgKGFzc2lnbl9pcnFfdmVjdG9yKGlycSwgbWFzaykpCisJCXJldHVybjsKKworCWNmZyA9IGlycV9jZmcoaXJxKTsKKwljcHVzX2FuZCh0bXAsIGNmZy0+ZG9tYWluLCBtYXNrKTsKKwlkZXN0ID0gY3B1X21hc2tfdG9fYXBpY2lkKHRtcCk7CisKKwlkZXNjID0gaXJxX3RvX2Rlc2MoaXJxKTsKKwltb2RpZnlfaW9hcGljX3J0ZSA9IGRlc2MtPnN0YXR1cyAmIElSUV9MRVZFTDsKKwlpZiAobW9kaWZ5X2lvYXBpY19ydGUpIHsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmlvYXBpY19sb2NrLCBmbGFncyk7CisJCV9fdGFyZ2V0X0lPX0FQSUNfaXJxKGlycSwgZGVzdCwgY2ZnLT52ZWN0b3IpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2FwaWNfbG9jaywgZmxhZ3MpOworCX0KKworCWlydGUudmVjdG9yID0gY2ZnLT52ZWN0b3I7CisJaXJ0ZS5kZXN0X2lkID0gSVJURV9ERVNUKGRlc3QpOworCisJLyoKKwkgKiBNb2RpZmllZCB0aGUgSVJURSBhbmQgZmx1c2hlcyB0aGUgSW50ZXJydXB0IGVudHJ5IGNhY2hlLgorCSAqLworCW1vZGlmeV9pcnRlKGlycSwgJmlydGUpOworCisJaWYgKGNmZy0+bW92ZV9pbl9wcm9ncmVzcykgeworCQljcHVzX2FuZChjbGVhbnVwX21hc2ssIGNmZy0+b2xkX2RvbWFpbiwgY3B1X29ubGluZV9tYXApOworCQljZmctPm1vdmVfY2xlYW51cF9jb3VudCA9IGNwdXNfd2VpZ2h0KGNsZWFudXBfbWFzayk7CisJCXNlbmRfSVBJX21hc2soY2xlYW51cF9tYXNrLCBJUlFfTU9WRV9DTEVBTlVQX1ZFQ1RPUik7CisJCWNmZy0+bW92ZV9pbl9wcm9ncmVzcyA9IDA7CisJfQorCisJZGVzYy0+YWZmaW5pdHkgPSBtYXNrOworfQorCitzdGF0aWMgaW50IG1pZ3JhdGVfaXJxX3JlbWFwcGVkX2xldmVsKGludCBpcnEpCit7CisJaW50IHJldCA9IC0xOworCXN0cnVjdCBpcnFfZGVzYyAqZGVzYyA9IGlycV90b19kZXNjKGlycSk7CisKKwltYXNrX0lPX0FQSUNfaXJxKGlycSk7CisKKwlpZiAoaW9fYXBpY19sZXZlbF9hY2tfcGVuZGluZyhpcnEpKSB7CisJCS8qCisJCSAqIEludGVycnVwdCBpbiBwcm9ncmVzcy4gTWlncmF0aW5nIGlycSBub3cgd2lsbCBjaGFuZ2UgdGhlCisJCSAqIHZlY3RvciBpbmZvcm1hdGlvbiBpbiB0aGUgSU8tQVBJQyBSVEUgYW5kIHRoYXQgd2lsbCBjb25mdXNlCisJCSAqIHRoZSBFT0kgYnJvYWRjYXN0IHBlcmZvcm1lZCBieSBjcHUuCisJCSAqIFNvLCBkZWxheSB0aGUgaXJxIG1pZ3JhdGlvbiB0byB0aGUgbmV4dCBpbnN0YW5jZS4KKwkJICovCisJCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmaXJfbWlncmF0aW9uX3dvcmssIDEpOworCQlnb3RvIHVubWFzazsKKwl9CisKKwkvKiBldmVydGhpbmcgaXMgY2xlYXIuIHdlIGhhdmUgcmlnaHQgb2Ygd2F5ICovCisJbWlncmF0ZV9pb2FwaWNfaXJxKGlycSwgZGVzYy0+cGVuZGluZ19tYXNrKTsKKworCXJldCA9IDA7CisJZGVzYy0+c3RhdHVzICY9IH5JUlFfTU9WRV9QRU5ESU5HOworCWNwdXNfY2xlYXIoZGVzYy0+cGVuZGluZ19tYXNrKTsKKwordW5tYXNrOgorCXVubWFza19JT19BUElDX2lycShpcnEpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIGlyX2lycV9taWdyYXRpb24oc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXVuc2lnbmVkIGludCBpcnE7CisJc3RydWN0IGlycV9kZXNjICpkZXNjOworCisJZm9yX2VhY2hfaXJxX2Rlc2MoaXJxLCBkZXNjKSB7CisJCWlmIChkZXNjLT5zdGF0dXMgJiBJUlFfTU9WRV9QRU5ESU5HKSB7CisJCQl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJCQlzcGluX2xvY2tfaXJxc2F2ZSgmZGVzYy0+bG9jaywgZmxhZ3MpOworCQkJaWYgKCFkZXNjLT5jaGlwLT5zZXRfYWZmaW5pdHkgfHwKKwkJCSAgICAhKGRlc2MtPnN0YXR1cyAmIElSUV9NT1ZFX1BFTkRJTkcpKSB7CisJCQkJZGVzYy0+c3RhdHVzICY9IH5JUlFfTU9WRV9QRU5ESU5HOworCQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRlc2MtPmxvY2ssIGZsYWdzKTsKKwkJCQljb250aW51ZTsKKwkJCX0KKworCQkJZGVzYy0+Y2hpcC0+c2V0X2FmZmluaXR5KGlycSwgZGVzYy0+cGVuZGluZ19tYXNrKTsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRlc2MtPmxvY2ssIGZsYWdzKTsKKwkJfQorCX0KK30KKworLyoKKyAqIE1pZ3JhdGVzIHRoZSBJUlEgZGVzdGluYXRpb24gaW4gdGhlIHByb2Nlc3MgY29udGV4dC4KKyAqLworc3RhdGljIHZvaWQgc2V0X2lyX2lvYXBpY19hZmZpbml0eV9pcnEodW5zaWduZWQgaW50IGlycSwgY3B1bWFza190IG1hc2spCit7CisJc3RydWN0IGlycV9kZXNjICpkZXNjID0gaXJxX3RvX2Rlc2MoaXJxKTsKKworCWlmIChkZXNjLT5zdGF0dXMgJiBJUlFfTEVWRUwpIHsKKwkJZGVzYy0+c3RhdHVzIHw9IElSUV9NT1ZFX1BFTkRJTkc7CisJCWRlc2MtPnBlbmRpbmdfbWFzayA9IG1hc2s7CisJCW1pZ3JhdGVfaXJxX3JlbWFwcGVkX2xldmVsKGlycSk7CisJCXJldHVybjsKKwl9CisKKwltaWdyYXRlX2lvYXBpY19pcnEoaXJxLCBtYXNrKTsKK30KKyNlbmRpZgorCithc21saW5rYWdlIHZvaWQgc21wX2lycV9tb3ZlX2NsZWFudXBfaW50ZXJydXB0KHZvaWQpCit7CisJdW5zaWduZWQgdmVjdG9yLCBtZTsKKwlhY2tfQVBJQ19pcnEoKTsKKyNpZmRlZiBDT05GSUdfWDg2XzY0CisJZXhpdF9pZGxlKCk7CisjZW5kaWYKKwlpcnFfZW50ZXIoKTsKKworCW1lID0gc21wX3Byb2Nlc3Nvcl9pZCgpOworCWZvciAodmVjdG9yID0gRklSU1RfRVhURVJOQUxfVkVDVE9SOyB2ZWN0b3IgPCBOUl9WRUNUT1JTOyB2ZWN0b3IrKykgeworCQl1bnNpZ25lZCBpbnQgaXJxOworCQlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2M7CisJCXN0cnVjdCBpcnFfY2ZnICpjZmc7CisJCWlycSA9IF9fZ2V0X2NwdV92YXIodmVjdG9yX2lycSlbdmVjdG9yXTsKKworCQlkZXNjID0gaXJxX3RvX2Rlc2MoaXJxKTsKKwkJaWYgKCFkZXNjKQorCQkJY29udGludWU7CisKKwkJY2ZnID0gaXJxX2NmZyhpcnEpOworCQlzcGluX2xvY2soJmRlc2MtPmxvY2spOworCQlpZiAoIWNmZy0+bW92ZV9jbGVhbnVwX2NvdW50KQorCQkJZ290byB1bmxvY2s7CisKKwkJaWYgKCh2ZWN0b3IgPT0gY2ZnLT52ZWN0b3IpICYmIGNwdV9pc3NldChtZSwgY2ZnLT5kb21haW4pKQorCQkJZ290byB1bmxvY2s7CisKKwkJX19nZXRfY3B1X3Zhcih2ZWN0b3JfaXJxKVt2ZWN0b3JdID0gLTE7CisJCWNmZy0+bW92ZV9jbGVhbnVwX2NvdW50LS07Cit1bmxvY2s6CisJCXNwaW5fdW5sb2NrKCZkZXNjLT5sb2NrKTsKKwl9CisKKwlpcnFfZXhpdCgpOworfQorCitzdGF0aWMgdm9pZCBpcnFfY29tcGxldGVfbW92ZSh1bnNpZ25lZCBpbnQgaXJxKQoreworCXN0cnVjdCBpcnFfY2ZnICpjZmcgPSBpcnFfY2ZnKGlycSk7CisJdW5zaWduZWQgdmVjdG9yLCBtZTsKKworCWlmIChsaWtlbHkoIWNmZy0+bW92ZV9pbl9wcm9ncmVzcykpCisJCXJldHVybjsKKworCXZlY3RvciA9IH5nZXRfaXJxX3JlZ3MoKS0+b3JpZ19heDsKKwltZSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKKwlpZiAoKHZlY3RvciA9PSBjZmctPnZlY3RvcikgJiYgY3B1X2lzc2V0KG1lLCBjZmctPmRvbWFpbikpIHsKKwkJY3B1bWFza190IGNsZWFudXBfbWFzazsKKworCQljcHVzX2FuZChjbGVhbnVwX21hc2ssIGNmZy0+b2xkX2RvbWFpbiwgY3B1X29ubGluZV9tYXApOworCQljZmctPm1vdmVfY2xlYW51cF9jb3VudCA9IGNwdXNfd2VpZ2h0KGNsZWFudXBfbWFzayk7CisJCXNlbmRfSVBJX21hc2soY2xlYW51cF9tYXNrLCBJUlFfTU9WRV9DTEVBTlVQX1ZFQ1RPUik7CisJCWNmZy0+bW92ZV9pbl9wcm9ncmVzcyA9IDA7CisJfQorfQorI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCBpcnFfY29tcGxldGVfbW92ZSh1bnNpZ25lZCBpbnQgaXJxKSB7fQorI2VuZGlmCisjaWZkZWYgQ09ORklHX0lOVFJfUkVNQVAKK3N0YXRpYyB2b2lkIGFja194MmFwaWNfbGV2ZWwodW5zaWduZWQgaW50IGlycSkKK3sKKwlhY2tfeDJBUElDX2lycSgpOworfQorCitzdGF0aWMgdm9pZCBhY2tfeDJhcGljX2VkZ2UodW5zaWduZWQgaW50IGlycSkKK3sKKwlhY2tfeDJBUElDX2lycSgpOworfQorI2VuZGlmCisKK3N0YXRpYyB2b2lkIGFja19hcGljX2VkZ2UodW5zaWduZWQgaW50IGlycSkKK3sKKwlpcnFfY29tcGxldGVfbW92ZShpcnEpOworCW1vdmVfbmF0aXZlX2lycShpcnEpOworCWFja19BUElDX2lycSgpOworfQorCithdG9taWNfdCBpcnFfbWlzX2NvdW50OworCitzdGF0aWMgdm9pZCBhY2tfYXBpY19sZXZlbCh1bnNpZ25lZCBpbnQgaXJxKQoreworI2lmZGVmIENPTkZJR19YODZfMzIKKwl1bnNpZ25lZCBsb25nIHY7CisJaW50IGk7CisjZW5kaWYKKwlpbnQgZG9fdW5tYXNrX2lycSA9IDA7CisKKwlpcnFfY29tcGxldGVfbW92ZShpcnEpOworI2lmZGVmIENPTkZJR19HRU5FUklDX1BFTkRJTkdfSVJRCisJLyogSWYgd2UgYXJlIG1vdmluZyB0aGUgaXJxIHdlIG5lZWQgdG8gbWFzayBpdCAqLworCWlmICh1bmxpa2VseShpcnFfdG9fZGVzYyhpcnEpLT5zdGF0dXMgJiBJUlFfTU9WRV9QRU5ESU5HKSkgeworCQlkb191bm1hc2tfaXJxID0gMTsKKwkJbWFza19JT19BUElDX2lycShpcnEpOworCX0KKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX1g4Nl8zMgorCS8qCisJKiBJdCBhcHBlYXJzIHRoZXJlIGlzIGFuIGVycmF0dW0gd2hpY2ggYWZmZWN0cyBhdCBsZWFzdCB2ZXJzaW9uIDB4MTEKKwkqIG9mIEkvTyBBUElDICh0aGF0J3MgdGhlIDgyMDkzQUEgYW5kIGNvcmVzIGludGVncmF0ZWQgaW50byB2YXJpb3VzCisJKiBjaGlwc2V0cykuICBVbmRlciBjZXJ0YWluIGNvbmRpdGlvbnMgYSBsZXZlbC10cmlnZ2VyZWQgaW50ZXJydXB0IGlzCisJKiBlcnJvbmVvdXNseSBkZWxpdmVyZWQgYXMgZWRnZS10cmlnZ2VyZWQgb25lIGJ1dCB0aGUgcmVzcGVjdGl2ZSBJUlIKKwkqIGJpdCBnZXRzIHNldCBuZXZlcnRoZWxlc3MuICBBcyBhIHJlc3VsdCB0aGUgSS9PIHVuaXQgZXhwZWN0cyBhbiBFT0kKKwkqIG1lc3NhZ2UgYnV0IGl0IHdpbGwgbmV2ZXIgYXJyaXZlIGFuZCBmdXJ0aGVyIGludGVycnVwdHMgYXJlIGJsb2NrZWQKKwkqIGZyb20gdGhlIHNvdXJjZS4gIFRoZSBleGFjdCByZWFzb24gaXMgc28gZmFyIHVua25vd24sIGJ1dCB0aGUKKwkqIHBoZW5vbWVub24gd2FzIG9ic2VydmVkIHdoZW4gdHdvIGNvbnNlY3V0aXZlIGludGVycnVwdCByZXF1ZXN0cworCSogZnJvbSBhIGdpdmVuIHNvdXJjZSBnZXQgZGVsaXZlcmVkIHRvIHRoZSBzYW1lIENQVSBhbmQgdGhlIHNvdXJjZSBpcworCSogdGVtcG9yYXJpbHkgZGlzYWJsZWQgaW4gYmV0d2Vlbi4KKwkqCisJKiBBIHdvcmthcm91bmQgaXMgdG8gc2ltdWxhdGUgYW4gRU9JIG1lc3NhZ2UgbWFudWFsbHkuICBXZSBhY2hpZXZlIGl0CisJKiBieSBzZXR0aW5nIHRoZSB0cmlnZ2VyIG1vZGUgdG8gZWRnZSBhbmQgdGhlbiB0byBsZXZlbCB3aGVuIHRoZSBlZGdlCisJKiB0cmlnZ2VyIG1vZGUgZ2V0cyBkZXRlY3RlZCBpbiB0aGUgVE1SIG9mIGEgbG9jYWwgQVBJQyBmb3IgYQorCSogbGV2ZWwtdHJpZ2dlcmVkIGludGVycnVwdC4gIFdlIG1hc2sgdGhlIHNvdXJjZSBmb3IgdGhlIHRpbWUgb2YgdGhlCisJKiBvcGVyYXRpb24gdG8gcHJldmVudCBhbiBlZGdlLXRyaWdnZXJlZCBpbnRlcnJ1cHQgZXNjYXBpbmcgbWVhbndoaWxlLgorCSogVGhlIGlkZWEgaXMgZnJvbSBNYW5mcmVkIFNwcmF1bC4gIC0tbWFjcm8KKwkqLworCWkgPSBpcnFfY2ZnKGlycSktPnZlY3RvcjsKKworCXYgPSBhcGljX3JlYWQoQVBJQ19UTVIgKyAoKGkgJiB+MHgxZikgPj4gMSkpOworI2VuZGlmCisKKwkvKgorCSAqIFdlIG11c3QgYWNrbm93bGVkZ2UgdGhlIGlycSBiZWZvcmUgd2UgbW92ZSBpdCBvciB0aGUgYWNrbm93bGVkZ2Ugd2lsbAorCSAqIG5vdCBwcm9wYWdhdGUgcHJvcGVybHkuCisJICovCisJYWNrX0FQSUNfaXJxKCk7CisKKwkvKiBOb3cgd2UgY2FuIG1vdmUgYW5kIHJlbmFibGUgdGhlIGlycSAqLworCWlmICh1bmxpa2VseShkb191bm1hc2tfaXJxKSkgeworCQkvKiBPbmx5IG1pZ3JhdGUgdGhlIGlycSBpZiB0aGUgYWNrIGhhcyBiZWVuIHJlY2VpdmVkLgorCQkgKgorCQkgKiBPbiByYXJlIG9jY2FzaW9ucyB0aGUgYnJvYWRjYXN0IGxldmVsIHRyaWdnZXJlZCBhY2sgZ2V0cworCQkgKiBkZWxheWVkIGdvaW5nIHRvIGlvYXBpY3MsIGFuZCBpZiB3ZSByZXByb2dyYW0gdGhlCisJCSAqIHZlY3RvciB3aGlsZSBSZW1vdGUgSVJSIGlzIHN0aWxsIHNldCB0aGUgaXJxIHdpbGwgbmV2ZXIKKwkJICogZmlyZSBhZ2Fpbi4KKwkJICoKKwkJICogVG8gcHJldmVudCB0aGlzIHNjZW5hcmlvIHdlIHJlYWQgdGhlIFJlbW90ZSBJUlIgYml0CisJCSAqIG9mIHRoZSBpb2FwaWMuICBUaGlzIGhhcyB0d28gZWZmZWN0cy4KKwkJICogLSBPbiBhbnkgc2FuZSBzeXN0ZW0gdGhlIHJlYWQgb2YgdGhlIGlvYXBpYyB3aWxsCisJCSAqICAgZmx1c2ggd3JpdGVzIChhbmQgYWNrcykgZ29pbmcgdG8gdGhlIGlvYXBpYyBmcm9tCisJCSAqICAgdGhpcyBjcHUuCisJCSAqIC0gV2UgZ2V0IHRvIHNlZSBpZiB0aGUgQUNLIGhhcyBhY3R1YWxseSBiZWVuIGRlbGl2ZXJlZC4KKwkJICoKKwkJICogQmFzZWQgb24gZmFpbGVkIGV4cGVyaW1lbnRzIG9mIHJlcHJvZ3JhbW1pbmcgdGhlCisJCSAqIGlvYXBpYyBlbnRyeSBmcm9tIG91dHNpZGUgb2YgaXJxIGNvbnRleHQgc3RhcnRpbmcKKwkJICogd2l0aCBtYXNraW5nIHRoZSBpb2FwaWMgZW50cnkgYW5kIHRoZW4gcG9sbGluZyB1bnRpbAorCQkgKiBSZW1vdGUgSVJSIHdhcyBjbGVhciBiZWZvcmUgcmVwcm9ncmFtbWluZyB0aGUKKwkJICogaW9hcGljIEkgZG9uJ3QgdHJ1c3QgdGhlIFJlbW90ZSBJUlIgYml0IHRvIGJlCisJCSAqIGNvbXBsZXRleSBhY2N1cmF0ZS4KKwkJICoKKwkJICogSG93ZXZlciB0aGVyZSBhcHBlYXJzIHRvIGJlIG5vIG90aGVyIHdheSB0byBwbHVnCisJCSAqIHRoaXMgcmFjZSwgc28gaWYgdGhlIFJlbW90ZSBJUlIgYml0IGlzIG5vdAorCQkgKiBhY2N1cmF0ZSBhbmQgaXMgY2F1c2luZyBwcm9ibGVtcyB0aGVuIGl0IGlzIGEgaGFyZHdhcmUgYnVnCisJCSAqIGFuZCB5b3UgY2FuIGdvIHRhbGsgdG8gdGhlIGNoaXBzZXQgdmVuZG9yIGFib3V0IGl0LgorCQkgKi8KKwkJaWYgKCFpb19hcGljX2xldmVsX2Fja19wZW5kaW5nKGlycSkpCisJCQltb3ZlX21hc2tlZF9pcnEoaXJxKTsKKwkJdW5tYXNrX0lPX0FQSUNfaXJxKGlycSk7CisJfQorCisjaWZkZWYgQ09ORklHX1g4Nl8zMgorCWlmICghKHYgJiAoMSA8PCAoaSAmIDB4MWYpKSkpIHsKKwkJYXRvbWljX2luYygmaXJxX21pc19jb3VudCk7CisJCXNwaW5fbG9jaygmaW9hcGljX2xvY2spOworCQlfX21hc2tfYW5kX2VkZ2VfSU9fQVBJQ19pcnEoaXJxKTsKKwkJX191bm1hc2tfYW5kX2xldmVsX0lPX0FQSUNfaXJxKGlycSk7CisJCXNwaW5fdW5sb2NrKCZpb2FwaWNfbG9jayk7CisJfQorI2VuZGlmCit9CisKK3N0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgaW9hcGljX2NoaXAgX19yZWFkX21vc3RseSA9IHsKKwkubmFtZQkJPSAiSU8tQVBJQyIsCisJLnN0YXJ0dXAJPSBzdGFydHVwX2lvYXBpY19pcnEsCisJLm1hc2sJCT0gbWFza19JT19BUElDX2lycSwKKwkudW5tYXNrCQk9IHVubWFza19JT19BUElDX2lycSwKKwkuYWNrCQk9IGFja19hcGljX2VkZ2UsCisJLmVvaQkJPSBhY2tfYXBpY19sZXZlbCwKKyNpZmRlZiBDT05GSUdfU01QCisJLnNldF9hZmZpbml0eQk9IHNldF9pb2FwaWNfYWZmaW5pdHlfaXJxLAorI2VuZGlmCisJLnJldHJpZ2dlcgk9IGlvYXBpY19yZXRyaWdnZXJfaXJxLAorfTsKKworI2lmZGVmIENPTkZJR19JTlRSX1JFTUFQCitzdGF0aWMgc3RydWN0IGlycV9jaGlwIGlyX2lvYXBpY19jaGlwIF9fcmVhZF9tb3N0bHkgPSB7CisJLm5hbWUJCT0gIklSLUlPLUFQSUMiLAorCS5zdGFydHVwCT0gc3RhcnR1cF9pb2FwaWNfaXJxLAorCS5tYXNrCQk9IG1hc2tfSU9fQVBJQ19pcnEsCisJLnVubWFzawkJPSB1bm1hc2tfSU9fQVBJQ19pcnEsCisJLmFjawkJPSBhY2tfeDJhcGljX2VkZ2UsCisJLmVvaQkJPSBhY2tfeDJhcGljX2xldmVsLAorI2lmZGVmIENPTkZJR19TTVAKKwkuc2V0X2FmZmluaXR5CT0gc2V0X2lyX2lvYXBpY19hZmZpbml0eV9pcnEsCisjZW5kaWYKKwkucmV0cmlnZ2VyCT0gaW9hcGljX3JldHJpZ2dlcl9pcnEsCit9OworI2VuZGlmCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBpbml0X0lPX0FQSUNfdHJhcHModm9pZCkKK3sKKwlpbnQgaXJxOworCXN0cnVjdCBpcnFfZGVzYyAqZGVzYzsKKwlzdHJ1Y3QgaXJxX2NmZyAqY2ZnOworCisJLyoKKwkgKiBOT1RFISBUaGUgbG9jYWwgQVBJQyBpc24ndCB2ZXJ5IGdvb2QgYXQgaGFuZGxpbmcKKwkgKiBtdWx0aXBsZSBpbnRlcnJ1cHRzIGF0IHRoZSBzYW1lIGludGVycnVwdCBsZXZlbC4KKwkgKiBBcyB0aGUgaW50ZXJydXB0IGxldmVsIGlzIGRldGVybWluZWQgYnkgdGFraW5nIHRoZQorCSAqIHZlY3RvciBudW1iZXIgYW5kIHNoaWZ0aW5nIHRoYXQgcmlnaHQgYnkgNCwgd2UKKwkgKiB3YW50IHRvIHNwcmVhZCB0aGVzZSBvdXQgYSBiaXQgc28gdGhhdCB0aGV5IGRvbid0CisJICogYWxsIGZhbGwgaW4gdGhlIHNhbWUgaW50ZXJydXB0IGxldmVsLgorCSAqCisJICogQWxzbywgd2UndmUgZ290IHRvIGJlIGNhcmVmdWwgbm90IHRvIHRyYXNoIGdhdGUKKwkgKiAweDgwLCBiZWNhdXNlIGludCAweDgwIGlzIGhtLCBraW5kIG9mIGltcG9ydGFudGlzaC4gOykKKwkgKi8KKwlmb3JfZWFjaF9pcnFfY2ZnKGlycSwgY2ZnKSB7CisJCWlmIChJT19BUElDX0lSUShpcnEpICYmICFjZmctPnZlY3RvcikgeworCQkJLyoKKwkJCSAqIEhtbS4uIFdlIGRvbid0IGhhdmUgYW4gZW50cnkgZm9yIHRoaXMsCisJCQkgKiBzbyBkZWZhdWx0IHRvIGFuIG9sZC1mYXNoaW9uZWQgODI1OQorCQkJICogaW50ZXJydXB0IGlmIHdlIGNhbi4uCisJCQkgKi8KKwkJCWlmIChpcnEgPCAxNikKKwkJCQltYWtlXzgyNTlBX2lycShpcnEpOworCQkJZWxzZSB7CisJCQkJZGVzYyA9IGlycV90b19kZXNjKGlycSk7CisJCQkJLyogU3RyYW5nZS4gT2gsIHdlbGwuLiAqLworCQkJCWRlc2MtPmNoaXAgPSAmbm9faXJxX2NoaXA7CisJCQl9CisJCX0KKwl9Cit9CisKKy8qCisgKiBUaGUgbG9jYWwgQVBJQyBpcnEtY2hpcCBpbXBsZW1lbnRhdGlvbjoKKyAqLworCitzdGF0aWMgdm9pZCBtYXNrX2xhcGljX2lycSh1bnNpZ25lZCBpbnQgaXJxKQoreworCXVuc2lnbmVkIGxvbmcgdjsKKworCXYgPSBhcGljX3JlYWQoQVBJQ19MVlQwKTsKKwlhcGljX3dyaXRlKEFQSUNfTFZUMCwgdiB8IEFQSUNfTFZUX01BU0tFRCk7Cit9CisKK3N0YXRpYyB2b2lkIHVubWFza19sYXBpY19pcnEodW5zaWduZWQgaW50IGlycSkKK3sKKwl1bnNpZ25lZCBsb25nIHY7CisKKwl2ID0gYXBpY19yZWFkKEFQSUNfTFZUMCk7CisJYXBpY193cml0ZShBUElDX0xWVDAsIHYgJiB+QVBJQ19MVlRfTUFTS0VEKTsKK30KKworc3RhdGljIHZvaWQgYWNrX2xhcGljX2lycSAodW5zaWduZWQgaW50IGlycSkKK3sKKwlhY2tfQVBJQ19pcnEoKTsKK30KKworc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBsYXBpY19jaGlwIF9fcmVhZF9tb3N0bHkgPSB7CisJLm5hbWUJCT0gImxvY2FsLUFQSUMiLAorCS5tYXNrCQk9IG1hc2tfbGFwaWNfaXJxLAorCS51bm1hc2sJCT0gdW5tYXNrX2xhcGljX2lycSwKKwkuYWNrCQk9IGFja19sYXBpY19pcnEsCit9OworCitzdGF0aWMgdm9pZCBsYXBpY19yZWdpc3Rlcl9pbnRyKGludCBpcnEpCit7CisJc3RydWN0IGlycV9kZXNjICpkZXNjOworCisJZGVzYyA9IGlycV90b19kZXNjKGlycSk7CisJZGVzYy0+c3RhdHVzICY9IH5JUlFfTEVWRUw7CisJc2V0X2lycV9jaGlwX2FuZF9oYW5kbGVyX25hbWUoaXJxLCAmbGFwaWNfY2hpcCwgaGFuZGxlX2VkZ2VfaXJxLAorCQkJCSAgICAgICJlZGdlIik7Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCBzZXR1cF9ubWkodm9pZCkKK3sKKwkvKgorCSAqIERpcnR5IHRyaWNrIHRvIGVuYWJsZSB0aGUgTk1JIHdhdGNoZG9nIC4uLgorCSAqIFdlIHB1dCB0aGUgODI1OUEgbWFzdGVyIGludG8gQUVPSSBtb2RlIGFuZAorCSAqIHVubWFzayBvbiBhbGwgbG9jYWwgQVBJQ3MgTFZUMCBhcyBOTUkuCisJICoKKwkgKiBUaGUgaWRlYSB0byB1c2UgdGhlIDgyNTlBIGluIEFFT0kgbW9kZSAoJzgyNTlBIFZpcnR1YWwgV2lyZScpCisJICogaXMgZnJvbSBNYWNpZWogVy4gUm96eWNraSAtIHNvIHdlIGRvIG5vdCBoYXZlIHRvIEVPSSBmcm9tCisJICogdGhlIE5NSSBoYW5kbGVyIG9yIHRoZSB0aW1lciBpbnRlcnJ1cHQuCisJICovCisJYXBpY19wcmludGsoQVBJQ19WRVJCT1NFLCBLRVJOX0lORk8gImFjdGl2YXRpbmcgTk1JIFdhdGNoZG9nIC4uLiIpOworCisJZW5hYmxlX05NSV90aHJvdWdoX0xWVDAoKTsKKworCWFwaWNfcHJpbnRrKEFQSUNfVkVSQk9TRSwgIiBkb25lLlxuIik7Cit9CisKKy8qCisgKiBUaGlzIGxvb2tzIGEgYml0IGhhY2tpc2ggYnV0IGl0J3MgYWJvdXQgdGhlIG9ubHkgb25lIHdheSBvZiBzZW5kaW5nCisgKiBhIGZldyBJTlRBIGN5Y2xlcyB0byA4MjU5QXMgYW5kIGFueSBhc3NvY2lhdGVkIGdsdWUgbG9naWMuICBJQ1IgZG9lcworICogbm90IHN1cHBvcnQgdGhlIEV4dElOVCBtb2RlLCB1bmZvcnR1bmF0ZWx5LiAgV2UgbmVlZCB0byBzZW5kIHRoZXNlCisgKiBjeWNsZXMgYXMgc29tZSBpODI0ODlEWC1iYXNlZCBib2FyZHMgaGF2ZSBnbHVlIGxvZ2ljIHRoYXQga2VlcHMgdGhlCisgKiA4MjU5QSBpbnRlcnJ1cHQgbGluZSBhc3NlcnRlZCB1bnRpbCBJTlRBLiAgLS1tYWNybworICovCitzdGF0aWMgaW5saW5lIHZvaWQgX19pbml0IHVubG9ja19FeHRJTlRfbG9naWModm9pZCkKK3sKKwlpbnQgYXBpYywgcGluLCBpOworCXN0cnVjdCBJT19BUElDX3JvdXRlX2VudHJ5IGVudHJ5MCwgZW50cnkxOworCXVuc2lnbmVkIGNoYXIgc2F2ZV9jb250cm9sLCBzYXZlX2ZyZXFfc2VsZWN0OworCisJcGluICA9IGZpbmRfaXNhX2lycV9waW4oOCwgbXBfSU5UKTsKKwlpZiAocGluID09IC0xKSB7CisJCVdBUk5fT05fT05DRSgxKTsKKwkJcmV0dXJuOworCX0KKwlhcGljID0gZmluZF9pc2FfaXJxX2FwaWMoOCwgbXBfSU5UKTsKKwlpZiAoYXBpYyA9PSAtMSkgeworCQlXQVJOX09OX09OQ0UoMSk7CisJCXJldHVybjsKKwl9CisKKwllbnRyeTAgPSBpb2FwaWNfcmVhZF9lbnRyeShhcGljLCBwaW4pOworCWNsZWFyX0lPX0FQSUNfcGluKGFwaWMsIHBpbik7CisKKwltZW1zZXQoJmVudHJ5MSwgMCwgc2l6ZW9mKGVudHJ5MSkpOworCisJZW50cnkxLmRlc3RfbW9kZSA9IDA7CQkJLyogcGh5c2ljYWwgZGVsaXZlcnkgKi8KKwllbnRyeTEubWFzayA9IDA7CQkJLyogdW5tYXNrIElSUSBub3cgKi8KKwllbnRyeTEuZGVzdCA9IGhhcmRfc21wX3Byb2Nlc3Nvcl9pZCgpOworCWVudHJ5MS5kZWxpdmVyeV9tb2RlID0gZGVzdF9FeHRJTlQ7CisJZW50cnkxLnBvbGFyaXR5ID0gZW50cnkwLnBvbGFyaXR5OworCWVudHJ5MS50cmlnZ2VyID0gMDsKKwllbnRyeTEudmVjdG9yID0gMDsKKworCWlvYXBpY193cml0ZV9lbnRyeShhcGljLCBwaW4sIGVudHJ5MSk7CisKKwlzYXZlX2NvbnRyb2wgPSBDTU9TX1JFQUQoUlRDX0NPTlRST0wpOworCXNhdmVfZnJlcV9zZWxlY3QgPSBDTU9TX1JFQUQoUlRDX0ZSRVFfU0VMRUNUKTsKKwlDTU9TX1dSSVRFKChzYXZlX2ZyZXFfc2VsZWN0ICYgflJUQ19SQVRFX1NFTEVDVCkgfCAweDYsCisJCSAgIFJUQ19GUkVRX1NFTEVDVCk7CisJQ01PU19XUklURShzYXZlX2NvbnRyb2wgfCBSVENfUElFLCBSVENfQ09OVFJPTCk7CisKKwlpID0gMTAwOworCXdoaWxlIChpLS0gPiAwKSB7CisJCW1kZWxheSgxMCk7CisJCWlmICgoQ01PU19SRUFEKFJUQ19JTlRSX0ZMQUdTKSAmIFJUQ19QRikgPT0gUlRDX1BGKQorCQkJaSAtPSAxMDsKKwl9CisKKwlDTU9TX1dSSVRFKHNhdmVfY29udHJvbCwgUlRDX0NPTlRST0wpOworCUNNT1NfV1JJVEUoc2F2ZV9mcmVxX3NlbGVjdCwgUlRDX0ZSRVFfU0VMRUNUKTsKKwljbGVhcl9JT19BUElDX3BpbihhcGljLCBwaW4pOworCisJaW9hcGljX3dyaXRlX2VudHJ5KGFwaWMsIHBpbiwgZW50cnkwKTsKK30KKworc3RhdGljIGludCBkaXNhYmxlX3RpbWVyX3Bpbl8xIF9faW5pdGRhdGE7CisvKiBBY3R1YWxseSB0aGUgbmV4dCBpcyBvYnNvbGV0ZSwgYnV0IGtlZXAgaXQgZm9yIHBhcmFub2lkIHJlYXNvbnMgLUFLICovCitzdGF0aWMgaW50IF9faW5pdCBkaXNhYmxlX3RpbWVyX3Bpbl9zZXR1cChjaGFyICphcmcpCit7CisJZGlzYWJsZV90aW1lcl9waW5fMSA9IDE7CisJcmV0dXJuIDA7Cit9CitlYXJseV9wYXJhbSgiZGlzYWJsZV90aW1lcl9waW5fMSIsIGRpc2FibGVfdGltZXJfcGluX3NldHVwKTsKKworaW50IHRpbWVyX3Rocm91Z2hfODI1OSBfX2luaXRkYXRhOworCisvKgorICogVGhpcyBjb2RlIG1heSBsb29rIGEgYml0IHBhcmFub2lkLCBidXQgaXQncyBzdXBwb3NlZCB0byBjb29wZXJhdGUgd2l0aAorICogYSB3aWRlIHJhbmdlIG9mIGJvYXJkcyBhbmQgQklPUyBidWdzLiAgRm9ydHVuYXRlbHkgb25seSB0aGUgdGltZXIgSVJRCisgKiBpcyBzbyBzY3Jld3kuICBUaGFua3MgdG8gQnJpYW4gUGVya2lucyBmb3IgdGVzdGluZy9oYWNraW5nIHRoaXMgYmVhc3QKKyAqIGZhbmF0aWNhbGx5IG9uIGhpcyB0cnVseSBidWdneSBib2FyZC4KKyAqCisgKiBGSVhNRTogcmVhbGx5IG5lZWQgdG8gcmV2YW1wIHRoaXMgZm9yIGFsbCBwbGF0Zm9ybXMuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBfX2luaXQgY2hlY2tfdGltZXIodm9pZCkKK3sKKwlzdHJ1Y3QgaXJxX2NmZyAqY2ZnID0gaXJxX2NmZygwKTsKKwlpbnQgYXBpYzEsIHBpbjEsIGFwaWMyLCBwaW4yOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdW5zaWduZWQgaW50IHZlcjsKKwlpbnQgbm9fcGluMSA9IDA7CisKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisKKwl2ZXIgPSBhcGljX3JlYWQoQVBJQ19MVlIpOworCXZlciA9IEdFVF9BUElDX1ZFUlNJT04odmVyKTsKKworCS8qCisJICogZ2V0L3NldCB0aGUgdGltZXIgSVJRIHZlY3RvcjoKKwkgKi8KKwlkaXNhYmxlXzgyNTlBX2lycSgwKTsKKwlhc3NpZ25faXJxX3ZlY3RvcigwLCBUQVJHRVRfQ1BVUyk7CisKKwkvKgorCSAqIEFzIElSUTAgaXMgdG8gYmUgZW5hYmxlZCBpbiB0aGUgODI1OUEsIHRoZSB2aXJ0dWFsCisJICogd2lyZSBoYXMgdG8gYmUgZGlzYWJsZWQgaW4gdGhlIGxvY2FsIEFQSUMuICBBbHNvCisJICogdGltZXIgaW50ZXJydXB0cyBuZWVkIHRvIGJlIGFja25vd2xlZGdlZCBtYW51YWxseSBpbgorCSAqIHRoZSA4MjU5QSBmb3IgdGhlIGk4MjQ4OURYIHdoZW4gdXNpbmcgdGhlIE5NSQorCSAqIHdhdGNoZG9nIGFzIHRoYXQgQVBJQyB0cmVhdHMgTk1JcyBhcyBsZXZlbC10cmlnZ2VyZWQuCisJICogVGhlIEFFT0kgbW9kZSB3aWxsIGZpbmlzaCB0aGVtIGluIHRoZSA4MjU5QQorCSAqIGF1dG9tYXRpY2FsbHkuCisJICovCisJYXBpY193cml0ZShBUElDX0xWVDAsIEFQSUNfTFZUX01BU0tFRCB8IEFQSUNfRE1fRVhUSU5UKTsKKwlpbml0XzgyNTlBKDEpOworI2lmZGVmIENPTkZJR19YODZfMzIKKwl0aW1lcl9hY2sgPSAobm1pX3dhdGNoZG9nID09IE5NSV9JT19BUElDICYmICFBUElDX0lOVEVHUkFURUQodmVyKSk7CisjZW5kaWYKKworCXBpbjEgID0gZmluZF9pc2FfaXJxX3BpbigwLCBtcF9JTlQpOworCWFwaWMxID0gZmluZF9pc2FfaXJxX2FwaWMoMCwgbXBfSU5UKTsKKwlwaW4yICA9IGlvYXBpY19pODI1OS5waW47CisJYXBpYzIgPSBpb2FwaWNfaTgyNTkuYXBpYzsKKworCWFwaWNfcHJpbnRrKEFQSUNfUVVJRVQsIEtFUk5fSU5GTyAiLi5USU1FUjogdmVjdG9yPTB4JTAyWCAiCisJCSAgICAiYXBpYzE9JWQgcGluMT0lZCBhcGljMj0lZCBwaW4yPSVkXG4iLAorCQkgICAgY2ZnLT52ZWN0b3IsIGFwaWMxLCBwaW4xLCBhcGljMiwgcGluMik7CisKKwkvKgorCSAqIFNvbWUgQklPUyB3cml0ZXJzIGFyZSBjbHVlbGVzcyBhbmQgcmVwb3J0IHRoZSBFeHRJTlRBCisJICogSS9PIEFQSUMgaW5wdXQgZnJvbSB0aGUgY2FzY2FkZWQgODI1OUEgYXMgdGhlIHRpbWVyCisJICogaW50ZXJydXB0IGlucHV0LiAgU28ganVzdCBpbiBjYXNlLCBpZiBvbmx5IG9uZSBwaW4KKwkgKiB3YXMgZm91bmQgYWJvdmUsIHRyeSBpdCBib3RoIGRpcmVjdGx5IGFuZCB0aHJvdWdoIHRoZQorCSAqIDgyNTlBLgorCSAqLworCWlmIChwaW4xID09IC0xKSB7CisjaWZkZWYgQ09ORklHX0lOVFJfUkVNQVAKKwkJaWYgKGludHJfcmVtYXBwaW5nX2VuYWJsZWQpCisJCQlwYW5pYygiQklPUyBidWc6IHRpbWVyIG5vdCBjb25uZWN0ZWQgdG8gSU8tQVBJQyIpOworI2VuZGlmCisJCXBpbjEgPSBwaW4yOworCQlhcGljMSA9IGFwaWMyOworCQlub19waW4xID0gMTsKKwl9IGVsc2UgaWYgKHBpbjIgPT0gLTEpIHsKKwkJcGluMiA9IHBpbjE7CisJCWFwaWMyID0gYXBpYzE7CisJfQorCisJaWYgKHBpbjEgIT0gLTEpIHsKKwkJLyoKKwkJICogT2ssIGRvZXMgSVJRMCB0aHJvdWdoIHRoZSBJT0FQSUMgd29yaz8KKwkJICovCisJCWlmIChub19waW4xKSB7CisJCQlhZGRfcGluX3RvX2lycSgwLCBhcGljMSwgcGluMSk7CisJCQlzZXR1cF90aW1lcl9JUlEwX3BpbihhcGljMSwgcGluMSwgY2ZnLT52ZWN0b3IpOworCQl9CisJCXVubWFza19JT19BUElDX2lycSgwKTsKKwkJaWYgKHRpbWVyX2lycV93b3JrcygpKSB7CisJCQlpZiAobm1pX3dhdGNoZG9nID09IE5NSV9JT19BUElDKSB7CisJCQkJc2V0dXBfbm1pKCk7CisJCQkJZW5hYmxlXzgyNTlBX2lycSgwKTsKKwkJCX0KKwkJCWlmIChkaXNhYmxlX3RpbWVyX3Bpbl8xID4gMCkKKwkJCQljbGVhcl9JT19BUElDX3BpbigwLCBwaW4xKTsKKwkJCWdvdG8gb3V0OworCQl9CisjaWZkZWYgQ09ORklHX0lOVFJfUkVNQVAKKwkJaWYgKGludHJfcmVtYXBwaW5nX2VuYWJsZWQpCisJCQlwYW5pYygidGltZXIgZG9lc24ndCB3b3JrIHRocm91Z2ggSW50ZXJydXB0LXJlbWFwcGVkIElPLUFQSUMiKTsKKyNlbmRpZgorCQljbGVhcl9JT19BUElDX3BpbihhcGljMSwgcGluMSk7CisJCWlmICghbm9fcGluMSkKKwkJCWFwaWNfcHJpbnRrKEFQSUNfUVVJRVQsIEtFUk5fRVJSICIuLk1QLUJJT1MgYnVnOiAiCisJCQkJICAgICI4MjU0IHRpbWVyIG5vdCBjb25uZWN0ZWQgdG8gSU8tQVBJQ1xuIik7CisKKwkJYXBpY19wcmludGsoQVBJQ19RVUlFVCwgS0VSTl9JTkZPICIuLi50cnlpbmcgdG8gc2V0IHVwIHRpbWVyICIKKwkJCSAgICAiKElSUTApIHRocm91Z2ggdGhlIDgyNTlBIC4uLlxuIik7CisJCWFwaWNfcHJpbnRrKEFQSUNfUVVJRVQsIEtFUk5fSU5GTworCQkJICAgICIuLi4uLiAoZm91bmQgYXBpYyAlZCBwaW4gJWQpIC4uLlxuIiwgYXBpYzIsIHBpbjIpOworCQkvKgorCQkgKiBsZWdhY3kgZGV2aWNlcyBzaG91bGQgYmUgY29ubmVjdGVkIHRvIElPIEFQSUMgIzAKKwkJICovCisJCXJlcGxhY2VfcGluX2F0X2lycSgwLCBhcGljMSwgcGluMSwgYXBpYzIsIHBpbjIpOworCQlzZXR1cF90aW1lcl9JUlEwX3BpbihhcGljMiwgcGluMiwgY2ZnLT52ZWN0b3IpOworCQl1bm1hc2tfSU9fQVBJQ19pcnEoMCk7CisJCWVuYWJsZV84MjU5QV9pcnEoMCk7CisJCWlmICh0aW1lcl9pcnFfd29ya3MoKSkgeworCQkJYXBpY19wcmludGsoQVBJQ19RVUlFVCwgS0VSTl9JTkZPICIuLi4uLi4uIHdvcmtzLlxuIik7CisJCQl0aW1lcl90aHJvdWdoXzgyNTkgPSAxOworCQkJaWYgKG5taV93YXRjaGRvZyA9PSBOTUlfSU9fQVBJQykgeworCQkJCWRpc2FibGVfODI1OUFfaXJxKDApOworCQkJCXNldHVwX25taSgpOworCQkJCWVuYWJsZV84MjU5QV9pcnEoMCk7CisJCQl9CisJCQlnb3RvIG91dDsKKwkJfQorCQkvKgorCQkgKiBDbGVhbnVwLCBqdXN0IGluIGNhc2UgLi4uCisJCSAqLworCQlkaXNhYmxlXzgyNTlBX2lycSgwKTsKKwkJY2xlYXJfSU9fQVBJQ19waW4oYXBpYzIsIHBpbjIpOworCQlhcGljX3ByaW50ayhBUElDX1FVSUVULCBLRVJOX0lORk8gIi4uLi4uLi4gZmFpbGVkLlxuIik7CisJfQorCisJaWYgKG5taV93YXRjaGRvZyA9PSBOTUlfSU9fQVBJQykgeworCQlhcGljX3ByaW50ayhBUElDX1FVSUVULCBLRVJOX1dBUk5JTkcgInRpbWVyIGRvZXNuJ3Qgd29yayAiCisJCQkgICAgInRocm91Z2ggdGhlIElPLUFQSUMgLSBkaXNhYmxpbmcgTk1JIFdhdGNoZG9nIVxuIik7CisJCW5taV93YXRjaGRvZyA9IE5NSV9OT05FOworCX0KKyNpZmRlZiBDT05GSUdfWDg2XzMyCisJdGltZXJfYWNrID0gMDsKKyNlbmRpZgorCisJYXBpY19wcmludGsoQVBJQ19RVUlFVCwgS0VSTl9JTkZPCisJCSAgICAiLi4udHJ5aW5nIHRvIHNldCB1cCB0aW1lciBhcyBWaXJ0dWFsIFdpcmUgSVJRLi4uXG4iKTsKKworCWxhcGljX3JlZ2lzdGVyX2ludHIoMCk7CisJYXBpY193cml0ZShBUElDX0xWVDAsIEFQSUNfRE1fRklYRUQgfCBjZmctPnZlY3Rvcik7CS8qIEZpeGVkIG1vZGUgKi8KKwllbmFibGVfODI1OUFfaXJxKDApOworCisJaWYgKHRpbWVyX2lycV93b3JrcygpKSB7CisJCWFwaWNfcHJpbnRrKEFQSUNfUVVJRVQsIEtFUk5fSU5GTyAiLi4uLi4gd29ya3MuXG4iKTsKKwkJZ290byBvdXQ7CisJfQorCWRpc2FibGVfODI1OUFfaXJxKDApOworCWFwaWNfd3JpdGUoQVBJQ19MVlQwLCBBUElDX0xWVF9NQVNLRUQgfCBBUElDX0RNX0ZJWEVEIHwgY2ZnLT52ZWN0b3IpOworCWFwaWNfcHJpbnRrKEFQSUNfUVVJRVQsIEtFUk5fSU5GTyAiLi4uLi4gZmFpbGVkLlxuIik7CisKKwlhcGljX3ByaW50ayhBUElDX1FVSUVULCBLRVJOX0lORk8KKwkJICAgICIuLi50cnlpbmcgdG8gc2V0IHVwIHRpbWVyIGFzIEV4dElOVCBJUlEuLi5cbiIpOworCisJaW5pdF84MjU5QSgwKTsKKwltYWtlXzgyNTlBX2lycSgwKTsKKwlhcGljX3dyaXRlKEFQSUNfTFZUMCwgQVBJQ19ETV9FWFRJTlQpOworCisJdW5sb2NrX0V4dElOVF9sb2dpYygpOworCisJaWYgKHRpbWVyX2lycV93b3JrcygpKSB7CisJCWFwaWNfcHJpbnRrKEFQSUNfUVVJRVQsIEtFUk5fSU5GTyAiLi4uLi4gd29ya3MuXG4iKTsKKwkJZ290byBvdXQ7CisJfQorCWFwaWNfcHJpbnRrKEFQSUNfUVVJRVQsIEtFUk5fSU5GTyAiLi4uLi4gZmFpbGVkIDooLlxuIik7CisJcGFuaWMoIklPLUFQSUMgKyB0aW1lciBkb2Vzbid0IHdvcmshICBCb290IHdpdGggYXBpYz1kZWJ1ZyBhbmQgc2VuZCBhICIKKwkJInJlcG9ydC4gIFRoZW4gdHJ5IGJvb3Rpbmcgd2l0aCB0aGUgJ25vYXBpYycgb3B0aW9uLlxuIik7CitvdXQ6CisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworfQorCisvKgorICogVHJhZGl0aW9uYWxseSBJU0EgSVJRMiBpcyB0aGUgY2FzY2FkZSBJUlEsIGFuZCBpcyBub3QgYXZhaWxhYmxlCisgKiB0byBkZXZpY2VzLiAgSG93ZXZlciB0aGVyZSBtYXkgYmUgYW4gSS9PIEFQSUMgcGluIGF2YWlsYWJsZSBmb3IKKyAqIHRoaXMgaW50ZXJydXB0IHJlZ2FyZGxlc3MuICBUaGUgcGluIG1heSBiZSBsZWZ0IHVuY29ubmVjdGVkLCBidXQKKyAqIHR5cGljYWxseSBpdCB3aWxsIGJlIHJldXNlZCBhcyBhbiBFeHRJTlQgY2FzY2FkZSBpbnRlcnJ1cHQgZm9yCisgKiB0aGUgbWFzdGVyIDgyNTlBLiAgSW4gdGhlIE1QUyBjYXNlIHN1Y2ggYSBwaW4gd2lsbCBub3JtYWxseSBiZQorICogcmVwb3J0ZWQgYXMgYW4gRXh0SU5UIGludGVycnVwdCBpbiB0aGUgTVAgdGFibGUuICBXaXRoIEFDUEkKKyAqIHRoZXJlIGlzIG5vIHByb3Zpc2lvbiBmb3IgRXh0SU5UIGludGVycnVwdHMsIGFuZCBpbiB0aGUgYWJzZW5jZQorICogb2YgYW4gb3ZlcnJpZGUgaXQgd291bGQgYmUgdHJlYXRlZCBhcyBhbiBvcmRpbmFyeSBJU0EgSS9PIEFQSUMKKyAqIGludGVycnVwdCwgdGhhdCBpcyBlZGdlLXRyaWdnZXJlZCBhbmQgdW5tYXNrZWQgYnkgZGVmYXVsdC4gIFdlCisgKiB1c2VkIHRvIGRvIHRoaXMsIGJ1dCBpdCBjYXVzZWQgcHJvYmxlbXMgb24gc29tZSBzeXN0ZW1zIGJlY2F1c2UKKyAqIG9mIHRoZSBOTUkgd2F0Y2hkb2cgYW5kIHNvbWV0aW1lcyBJUlEwIG9mIHRoZSA4MjU0IHRpbWVyIHVzaW5nCisgKiB0aGUgc2FtZSBFeHRJTlQgY2FzY2FkZSBpbnRlcnJ1cHQgdG8gZHJpdmUgdGhlIGxvY2FsIEFQSUMgb2YgdGhlCisgKiBib290c3RyYXAgcHJvY2Vzc29yLiAgVGhlcmVmb3JlIHdlIHJlZnJhaW4gZnJvbSByb3V0aW5nIElSUTIgdG8KKyAqIHRoZSBJL08gQVBJQyBpbiBhbGwgY2FzZXMgbm93LiAgTm8gYWN0dWFsIGRldmljZSBzaG91bGQgcmVxdWVzdAorICogaXQgYW55d2F5LiAgLS1tYWNybworICovCisjZGVmaW5lIFBJQ19JUlFTCSgxIDw8IFBJQ19DQVNDQURFX0lSKQorCit2b2lkIF9faW5pdCBzZXR1cF9JT19BUElDKHZvaWQpCit7CisKKyNpZmRlZiBDT05GSUdfWDg2XzMyCisJZW5hYmxlX0lPX0FQSUMoKTsKKyNlbHNlCisJLyoKKwkgKiBjYWxsaW5nIGVuYWJsZV9JT19BUElDKCkgaXMgbW92ZWQgdG8gc2V0dXBfbG9jYWxfQVBJQyBmb3IgQlAKKwkgKi8KKyNlbmRpZgorCisJaW9fYXBpY19pcnFzID0gflBJQ19JUlFTOworCisJYXBpY19wcmludGsoQVBJQ19WRVJCT1NFLCAiRU5BQkxJTkcgSU8tQVBJQyBJUlFzXG4iKTsKKwkvKgorICAgICAgICAgKiBTZXQgdXAgSU8tQVBJQyBJUlEgcm91dGluZy4KKyAgICAgICAgICovCisjaWZkZWYgQ09ORklHX1g4Nl8zMgorCWlmICghYWNwaV9pb2FwaWMpCisJCXNldHVwX2lvYXBpY19pZHNfZnJvbV9tcGMoKTsKKyNlbmRpZgorCXN5bmNfQXJiX0lEcygpOworCXNldHVwX0lPX0FQSUNfaXJxcygpOworCWluaXRfSU9fQVBJQ190cmFwcygpOworCWNoZWNrX3RpbWVyKCk7Cit9CisKKy8qCisgKiAgICAgIENhbGxlZCBhZnRlciBhbGwgdGhlIGluaXRpYWxpemF0aW9uIGlzIGRvbmUuIElmIHdlIGRpZG50IGZpbmQgYW55CisgKiAgICAgIEFQSUMgYnVncyB0aGVuIHdlIGNhbiBhbGxvdyB0aGUgbW9kaWZ5IGZhc3QgcGF0aAorICovCisKK3N0YXRpYyBpbnQgX19pbml0IGlvX2FwaWNfYnVnX2ZpbmFsaXplKHZvaWQpCit7CisJaWYgKHNpc19hcGljX2J1ZyA9PSAtMSkKKwkJc2lzX2FwaWNfYnVnID0gMDsKKwlyZXR1cm4gMDsKK30KKworbGF0ZV9pbml0Y2FsbChpb19hcGljX2J1Z19maW5hbGl6ZSk7CisKK3N0cnVjdCBzeXNmc19pb2FwaWNfZGF0YSB7CisJc3RydWN0IHN5c19kZXZpY2UgZGV2OworCXN0cnVjdCBJT19BUElDX3JvdXRlX2VudHJ5IGVudHJ5WzBdOworfTsKK3N0YXRpYyBzdHJ1Y3Qgc3lzZnNfaW9hcGljX2RhdGEgKiBtcF9pb2FwaWNfZGF0YVtNQVhfSU9fQVBJQ1NdOworCitzdGF0aWMgaW50IGlvYXBpY19zdXNwZW5kKHN0cnVjdCBzeXNfZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3sKKwlzdHJ1Y3QgSU9fQVBJQ19yb3V0ZV9lbnRyeSAqZW50cnk7CisJc3RydWN0IHN5c2ZzX2lvYXBpY19kYXRhICpkYXRhOworCWludCBpOworCisJZGF0YSA9IGNvbnRhaW5lcl9vZihkZXYsIHN0cnVjdCBzeXNmc19pb2FwaWNfZGF0YSwgZGV2KTsKKwllbnRyeSA9IGRhdGEtPmVudHJ5OworCWZvciAoaSA9IDA7IGkgPCBucl9pb2FwaWNfcmVnaXN0ZXJzW2Rldi0+aWRdOyBpICsrLCBlbnRyeSArKyApCisJCSplbnRyeSA9IGlvYXBpY19yZWFkX2VudHJ5KGRldi0+aWQsIGkpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaW9hcGljX3Jlc3VtZShzdHJ1Y3Qgc3lzX2RldmljZSAqZGV2KQoreworCXN0cnVjdCBJT19BUElDX3JvdXRlX2VudHJ5ICplbnRyeTsKKwlzdHJ1Y3Qgc3lzZnNfaW9hcGljX2RhdGEgKmRhdGE7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1bmlvbiBJT19BUElDX3JlZ18wMCByZWdfMDA7CisJaW50IGk7CisKKwlkYXRhID0gY29udGFpbmVyX29mKGRldiwgc3RydWN0IHN5c2ZzX2lvYXBpY19kYXRhLCBkZXYpOworCWVudHJ5ID0gZGF0YS0+ZW50cnk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaW9hcGljX2xvY2ssIGZsYWdzKTsKKwlyZWdfMDAucmF3ID0gaW9fYXBpY19yZWFkKGRldi0+aWQsIDApOworCWlmIChyZWdfMDAuYml0cy5JRCAhPSBtcF9pb2FwaWNzW2Rldi0+aWRdLm1wX2FwaWNpZCkgeworCQlyZWdfMDAuYml0cy5JRCA9IG1wX2lvYXBpY3NbZGV2LT5pZF0ubXBfYXBpY2lkOworCQlpb19hcGljX3dyaXRlKGRldi0+aWQsIDAsIHJlZ18wMC5yYXcpOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2FwaWNfbG9jaywgZmxhZ3MpOworCWZvciAoaSA9IDA7IGkgPCBucl9pb2FwaWNfcmVnaXN0ZXJzW2Rldi0+aWRdOyBpKyspCisJCWlvYXBpY193cml0ZV9lbnRyeShkZXYtPmlkLCBpLCBlbnRyeVtpXSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBzeXNkZXZfY2xhc3MgaW9hcGljX3N5c2Rldl9jbGFzcyA9IHsKKwkubmFtZSA9ICJpb2FwaWMiLAorCS5zdXNwZW5kID0gaW9hcGljX3N1c3BlbmQsCisJLnJlc3VtZSA9IGlvYXBpY19yZXN1bWUsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBpb2FwaWNfaW5pdF9zeXNmcyh2b2lkKQoreworCXN0cnVjdCBzeXNfZGV2aWNlICogZGV2OworCWludCBpLCBzaXplLCBlcnJvcjsKKworCWVycm9yID0gc3lzZGV2X2NsYXNzX3JlZ2lzdGVyKCZpb2FwaWNfc3lzZGV2X2NsYXNzKTsKKwlpZiAoZXJyb3IpCisJCXJldHVybiBlcnJvcjsKKworCWZvciAoaSA9IDA7IGkgPCBucl9pb2FwaWNzOyBpKysgKSB7CisJCXNpemUgPSBzaXplb2Yoc3RydWN0IHN5c19kZXZpY2UpICsgbnJfaW9hcGljX3JlZ2lzdGVyc1tpXQorCQkJKiBzaXplb2Yoc3RydWN0IElPX0FQSUNfcm91dGVfZW50cnkpOworCQltcF9pb2FwaWNfZGF0YVtpXSA9IGt6YWxsb2Moc2l6ZSwgR0ZQX0tFUk5FTCk7CisJCWlmICghbXBfaW9hcGljX2RhdGFbaV0pIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiQ2FuJ3Qgc3VzcGVuZC9yZXN1bWUgSU9BUElDICVkXG4iLCBpKTsKKwkJCWNvbnRpbnVlOworCQl9CisJCWRldiA9ICZtcF9pb2FwaWNfZGF0YVtpXS0+ZGV2OworCQlkZXYtPmlkID0gaTsKKwkJZGV2LT5jbHMgPSAmaW9hcGljX3N5c2Rldl9jbGFzczsKKwkJZXJyb3IgPSBzeXNkZXZfcmVnaXN0ZXIoZGV2KTsKKwkJaWYgKGVycm9yKSB7CisJCQlrZnJlZShtcF9pb2FwaWNfZGF0YVtpXSk7CisJCQltcF9pb2FwaWNfZGF0YVtpXSA9IE5VTEw7CisJCQlwcmludGsoS0VSTl9FUlIgIkNhbid0IHN1c3BlbmQvcmVzdW1lIElPQVBJQyAlZFxuIiwgaSk7CisJCQljb250aW51ZTsKKwkJfQorCX0KKworCXJldHVybiAwOworfQorCitkZXZpY2VfaW5pdGNhbGwoaW9hcGljX2luaXRfc3lzZnMpOworCisvKgorICogRHluYW1pYyBpcnEgYWxsb2NhdGUgYW5kIGRlYWxsb2NhdGlvbgorICovCit1bnNpZ25lZCBpbnQgY3JlYXRlX2lycV9ucih1bnNpZ25lZCBpbnQgaXJxX3dhbnQpCit7CisJLyogQWxsb2NhdGUgYW4gdW51c2VkIGlycSAqLworCXVuc2lnbmVkIGludCBpcnE7CisJdW5zaWduZWQgaW50IG5ldzsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCBpcnFfY2ZnICpjZmdfbmV3OworCisJaXJxX3dhbnQgPSBucl9pcnFzIC0gMTsKKworCWlycSA9IDA7CisJc3Bpbl9sb2NrX2lycXNhdmUoJnZlY3Rvcl9sb2NrLCBmbGFncyk7CisJZm9yIChuZXcgPSBpcnFfd2FudDsgbmV3ID4gMDsgbmV3LS0pIHsKKwkJaWYgKHBsYXRmb3JtX2xlZ2FjeV9pcnEobmV3KSkKKwkJCWNvbnRpbnVlOworCQljZmdfbmV3ID0gaXJxX2NmZyhuZXcpOworCQlpZiAoY2ZnX25ldyAmJiBjZmdfbmV3LT52ZWN0b3IgIT0gMCkKKwkJCWNvbnRpbnVlOworCQkvKiBjaGVjayBpZiBuZWVkIHRvIGNyZWF0ZSBvbmUgKi8KKwkJaWYgKCFjZmdfbmV3KQorCQkJY2ZnX25ldyA9IGlycV9jZmdfYWxsb2MobmV3KTsKKwkJaWYgKF9fYXNzaWduX2lycV92ZWN0b3IobmV3LCBUQVJHRVRfQ1BVUykgPT0gMCkKKwkJCWlycSA9IG5ldzsKKwkJYnJlYWs7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnZlY3Rvcl9sb2NrLCBmbGFncyk7CisKKwlpZiAoaXJxID4gMCkgeworCQlkeW5hbWljX2lycV9pbml0KGlycSk7CisJfQorCXJldHVybiBpcnE7Cit9CisKK2ludCBjcmVhdGVfaXJxKHZvaWQpCit7CisJaW50IGlycTsKKworCWlycSA9IGNyZWF0ZV9pcnFfbnIobnJfaXJxcyAtIDEpOworCisJaWYgKGlycSA9PSAwKQorCQlpcnEgPSAtMTsKKworCXJldHVybiBpcnE7Cit9CisKK3ZvaWQgZGVzdHJveV9pcnEodW5zaWduZWQgaW50IGlycSkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJZHluYW1pY19pcnFfY2xlYW51cChpcnEpOworCisjaWZkZWYgQ09ORklHX0lOVFJfUkVNQVAKKwlmcmVlX2lydGUoaXJxKTsKKyNlbmRpZgorCXNwaW5fbG9ja19pcnFzYXZlKCZ2ZWN0b3JfbG9jaywgZmxhZ3MpOworCV9fY2xlYXJfaXJxX3ZlY3RvcihpcnEpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnZlY3Rvcl9sb2NrLCBmbGFncyk7Cit9CisKKy8qCisgKiBNU0kgbWVzc2FnZSBjb21wb3NpdGlvbgorICovCisjaWZkZWYgQ09ORklHX1BDSV9NU0kKK3N0YXRpYyBpbnQgbXNpX2NvbXBvc2VfbXNnKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCB1bnNpZ25lZCBpbnQgaXJxLCBzdHJ1Y3QgbXNpX21zZyAqbXNnKQoreworCXN0cnVjdCBpcnFfY2ZnICpjZmc7CisJaW50IGVycjsKKwl1bnNpZ25lZCBkZXN0OworCWNwdW1hc2tfdCB0bXA7CisKKwl0bXAgPSBUQVJHRVRfQ1BVUzsKKwllcnIgPSBhc3NpZ25faXJxX3ZlY3RvcihpcnEsIHRtcCk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCWNmZyA9IGlycV9jZmcoaXJxKTsKKwljcHVzX2FuZCh0bXAsIGNmZy0+ZG9tYWluLCB0bXApOworCWRlc3QgPSBjcHVfbWFza190b19hcGljaWQodG1wKTsKKworI2lmZGVmIENPTkZJR19JTlRSX1JFTUFQCisJaWYgKGlycV9yZW1hcHBlZChpcnEpKSB7CisJCXN0cnVjdCBpcnRlIGlydGU7CisJCWludCBpcl9pbmRleDsKKwkJdTE2IHN1Yl9oYW5kbGU7CisKKwkJaXJfaW5kZXggPSBtYXBfaXJxX3RvX2lydGVfaGFuZGxlKGlycSwgJnN1Yl9oYW5kbGUpOworCQlCVUdfT04oaXJfaW5kZXggPT0gLTEpOworCisJCW1lbXNldCAoJmlydGUsIDAsIHNpemVvZihpcnRlKSk7CisKKwkJaXJ0ZS5wcmVzZW50ID0gMTsKKwkJaXJ0ZS5kc3RfbW9kZSA9IElOVF9ERVNUX01PREU7CisJCWlydGUudHJpZ2dlcl9tb2RlID0gMDsgLyogZWRnZSAqLworCQlpcnRlLmRsdnJ5X21vZGUgPSBJTlRfREVMSVZFUllfTU9ERTsKKwkJaXJ0ZS52ZWN0b3IgPSBjZmctPnZlY3RvcjsKKwkJaXJ0ZS5kZXN0X2lkID0gSVJURV9ERVNUKGRlc3QpOworCisJCW1vZGlmeV9pcnRlKGlycSwgJmlydGUpOworCisJCW1zZy0+YWRkcmVzc19oaSA9IE1TSV9BRERSX0JBU0VfSEk7CisJCW1zZy0+ZGF0YSA9IHN1Yl9oYW5kbGU7CisJCW1zZy0+YWRkcmVzc19sbyA9IE1TSV9BRERSX0JBU0VfTE8gfCBNU0lfQUREUl9JUl9FWFRfSU5UIHwKKwkJCQkgIE1TSV9BRERSX0lSX1NIViB8CisJCQkJICBNU0lfQUREUl9JUl9JTkRFWDEoaXJfaW5kZXgpIHwKKwkJCQkgIE1TSV9BRERSX0lSX0lOREVYMihpcl9pbmRleCk7CisJfSBlbHNlCisjZW5kaWYKKwl7CisJCW1zZy0+YWRkcmVzc19oaSA9IE1TSV9BRERSX0JBU0VfSEk7CisJCW1zZy0+YWRkcmVzc19sbyA9CisJCQlNU0lfQUREUl9CQVNFX0xPIHwKKwkJCSgoSU5UX0RFU1RfTU9ERSA9PSAwKSA/CisJCQkJTVNJX0FERFJfREVTVF9NT0RFX1BIWVNJQ0FMOgorCQkJCU1TSV9BRERSX0RFU1RfTU9ERV9MT0dJQ0FMKSB8CisJCQkoKElOVF9ERUxJVkVSWV9NT0RFICE9IGRlc3RfTG93ZXN0UHJpbykgPworCQkJCU1TSV9BRERSX1JFRElSRUNUSU9OX0NQVToKKwkJCQlNU0lfQUREUl9SRURJUkVDVElPTl9MT1dQUkkpIHwKKwkJCU1TSV9BRERSX0RFU1RfSUQoZGVzdCk7CisKKwkJbXNnLT5kYXRhID0KKwkJCU1TSV9EQVRBX1RSSUdHRVJfRURHRSB8CisJCQlNU0lfREFUQV9MRVZFTF9BU1NFUlQgfAorCQkJKChJTlRfREVMSVZFUllfTU9ERSAhPSBkZXN0X0xvd2VzdFByaW8pID8KKwkJCQlNU0lfREFUQV9ERUxJVkVSWV9GSVhFRDoKKwkJCQlNU0lfREFUQV9ERUxJVkVSWV9MT1dQUkkpIHwKKwkJCU1TSV9EQVRBX1ZFQ1RPUihjZmctPnZlY3Rvcik7CisJfQorCXJldHVybiBlcnI7Cit9CisKKyNpZmRlZiBDT05GSUdfU01QCitzdGF0aWMgdm9pZCBzZXRfbXNpX2lycV9hZmZpbml0eSh1bnNpZ25lZCBpbnQgaXJxLCBjcHVtYXNrX3QgbWFzaykKK3sKKwlzdHJ1Y3QgaXJxX2NmZyAqY2ZnOworCXN0cnVjdCBtc2lfbXNnIG1zZzsKKwl1bnNpZ25lZCBpbnQgZGVzdDsKKwljcHVtYXNrX3QgdG1wOworCXN0cnVjdCBpcnFfZGVzYyAqZGVzYzsKKworCWNwdXNfYW5kKHRtcCwgbWFzaywgY3B1X29ubGluZV9tYXApOworCWlmIChjcHVzX2VtcHR5KHRtcCkpCisJCXJldHVybjsKKworCWlmIChhc3NpZ25faXJxX3ZlY3RvcihpcnEsIG1hc2spKQorCQlyZXR1cm47CisKKwljZmcgPSBpcnFfY2ZnKGlycSk7CisJY3B1c19hbmQodG1wLCBjZmctPmRvbWFpbiwgbWFzayk7CisJZGVzdCA9IGNwdV9tYXNrX3RvX2FwaWNpZCh0bXApOworCisJcmVhZF9tc2lfbXNnKGlycSwgJm1zZyk7CisKKwltc2cuZGF0YSAmPSB+TVNJX0RBVEFfVkVDVE9SX01BU0s7CisJbXNnLmRhdGEgfD0gTVNJX0RBVEFfVkVDVE9SKGNmZy0+dmVjdG9yKTsKKwltc2cuYWRkcmVzc19sbyAmPSB+TVNJX0FERFJfREVTVF9JRF9NQVNLOworCW1zZy5hZGRyZXNzX2xvIHw9IE1TSV9BRERSX0RFU1RfSUQoZGVzdCk7CisKKwl3cml0ZV9tc2lfbXNnKGlycSwgJm1zZyk7CisJZGVzYyA9IGlycV90b19kZXNjKGlycSk7CisJZGVzYy0+YWZmaW5pdHkgPSBtYXNrOworfQorCisjaWZkZWYgQ09ORklHX0lOVFJfUkVNQVAKKy8qCisgKiBNaWdyYXRlIHRoZSBNU0kgaXJxIHRvIGFub3RoZXIgY3B1bWFzay4gVGhpcyBtaWdyYXRpb24gaXMKKyAqIGRvbmUgaW4gdGhlIHByb2Nlc3MgY29udGV4dCB1c2luZyBpbnRlcnJ1cHQtcmVtYXBwaW5nIGhhcmR3YXJlLgorICovCitzdGF0aWMgdm9pZCBpcl9zZXRfbXNpX2lycV9hZmZpbml0eSh1bnNpZ25lZCBpbnQgaXJxLCBjcHVtYXNrX3QgbWFzaykKK3sKKwlzdHJ1Y3QgaXJxX2NmZyAqY2ZnOworCXVuc2lnbmVkIGludCBkZXN0OworCWNwdW1hc2tfdCB0bXAsIGNsZWFudXBfbWFzazsKKwlzdHJ1Y3QgaXJ0ZSBpcnRlOworCXN0cnVjdCBpcnFfZGVzYyAqZGVzYzsKKworCWNwdXNfYW5kKHRtcCwgbWFzaywgY3B1X29ubGluZV9tYXApOworCWlmIChjcHVzX2VtcHR5KHRtcCkpCisJCXJldHVybjsKKworCWlmIChnZXRfaXJ0ZShpcnEsICZpcnRlKSkKKwkJcmV0dXJuOworCisJaWYgKGFzc2lnbl9pcnFfdmVjdG9yKGlycSwgbWFzaykpCisJCXJldHVybjsKKworCWNmZyA9IGlycV9jZmcoaXJxKTsKKwljcHVzX2FuZCh0bXAsIGNmZy0+ZG9tYWluLCBtYXNrKTsKKwlkZXN0ID0gY3B1X21hc2tfdG9fYXBpY2lkKHRtcCk7CisKKwlpcnRlLnZlY3RvciA9IGNmZy0+dmVjdG9yOworCWlydGUuZGVzdF9pZCA9IElSVEVfREVTVChkZXN0KTsKKworCS8qCisJICogYXRvbWljYWxseSB1cGRhdGUgdGhlIElSVEUgd2l0aCB0aGUgbmV3IGRlc3RpbmF0aW9uIGFuZCB2ZWN0b3IuCisJICovCisJbW9kaWZ5X2lydGUoaXJxLCAmaXJ0ZSk7CisKKwkvKgorCSAqIEFmdGVyIHRoaXMgcG9pbnQsIGFsbCB0aGUgaW50ZXJydXB0cyB3aWxsIHN0YXJ0IGFycml2aW5nCisJICogYXQgdGhlIG5ldyBkZXN0aW5hdGlvbi4gU28sIHRpbWUgdG8gY2xlYW51cCB0aGUgcHJldmlvdXMKKwkgKiB2ZWN0b3IgYWxsb2NhdGlvbi4KKwkgKi8KKwlpZiAoY2ZnLT5tb3ZlX2luX3Byb2dyZXNzKSB7CisJCWNwdXNfYW5kKGNsZWFudXBfbWFzaywgY2ZnLT5vbGRfZG9tYWluLCBjcHVfb25saW5lX21hcCk7CisJCWNmZy0+bW92ZV9jbGVhbnVwX2NvdW50ID0gY3B1c193ZWlnaHQoY2xlYW51cF9tYXNrKTsKKwkJc2VuZF9JUElfbWFzayhjbGVhbnVwX21hc2ssIElSUV9NT1ZFX0NMRUFOVVBfVkVDVE9SKTsKKwkJY2ZnLT5tb3ZlX2luX3Byb2dyZXNzID0gMDsKKwl9CisKKwlkZXNjID0gaXJxX3RvX2Rlc2MoaXJxKTsKKwlkZXNjLT5hZmZpbml0eSA9IG1hc2s7Cit9CisjZW5kaWYKKyNlbmRpZiAvKiBDT05GSUdfU01QICovCisKKy8qCisgKiBJUlEgQ2hpcCBmb3IgTVNJIFBDSS9QQ0ktWC9QQ0ktRXhwcmVzcyBEZXZpY2VzLAorICogd2hpY2ggaW1wbGVtZW50IHRoZSBNU0kgb3IgTVNJLVggQ2FwYWJpbGl0eSBTdHJ1Y3R1cmUuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgbXNpX2NoaXAgPSB7CisJLm5hbWUJCT0gIlBDSS1NU0kiLAorCS51bm1hc2sJCT0gdW5tYXNrX21zaV9pcnEsCisJLm1hc2sJCT0gbWFza19tc2lfaXJxLAorCS5hY2sJCT0gYWNrX2FwaWNfZWRnZSwKKyNpZmRlZiBDT05GSUdfU01QCisJLnNldF9hZmZpbml0eQk9IHNldF9tc2lfaXJxX2FmZmluaXR5LAorI2VuZGlmCisJLnJldHJpZ2dlcgk9IGlvYXBpY19yZXRyaWdnZXJfaXJxLAorfTsKKworI2lmZGVmIENPTkZJR19JTlRSX1JFTUFQCitzdGF0aWMgc3RydWN0IGlycV9jaGlwIG1zaV9pcl9jaGlwID0geworCS5uYW1lCQk9ICJJUi1QQ0ktTVNJIiwKKwkudW5tYXNrCQk9IHVubWFza19tc2lfaXJxLAorCS5tYXNrCQk9IG1hc2tfbXNpX2lycSwKKwkuYWNrCQk9IGFja194MmFwaWNfZWRnZSwKKyNpZmRlZiBDT05GSUdfU01QCisJLnNldF9hZmZpbml0eQk9IGlyX3NldF9tc2lfaXJxX2FmZmluaXR5LAorI2VuZGlmCisJLnJldHJpZ2dlcgk9IGlvYXBpY19yZXRyaWdnZXJfaXJxLAorfTsKKworLyoKKyAqIE1hcCB0aGUgUENJIGRldiB0byB0aGUgY29ycmVzcG9uZGluZyByZW1hcHBpbmcgaGFyZHdhcmUgdW5pdAorICogYW5kIGFsbG9jYXRlICdudmVjJyBjb25zZWN1dGl2ZSBpbnRlcnJ1cHQtcmVtYXBwaW5nIHRhYmxlIGVudHJpZXMKKyAqIGluIGl0LgorICovCitzdGF0aWMgaW50IG1zaV9hbGxvY19pcnRlKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGludCBpcnEsIGludCBudmVjKQoreworCXN0cnVjdCBpbnRlbF9pb21tdSAqaW9tbXU7CisJaW50IGluZGV4OworCisJaW9tbXUgPSBtYXBfZGV2X3RvX2lyKGRldik7CisJaWYgKCFpb21tdSkgeworCQlwcmludGsoS0VSTl9FUlIKKwkJICAgICAgICJVbmFibGUgdG8gbWFwIFBDSSAlcyB0byBpb21tdVxuIiwgcGNpX25hbWUoZGV2KSk7CisJCXJldHVybiAtRU5PRU5UOworCX0KKworCWluZGV4ID0gYWxsb2NfaXJ0ZShpb21tdSwgaXJxLCBudmVjKTsKKwlpZiAoaW5kZXggPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUgorCQkgICAgICAgIlVuYWJsZSB0byBhbGxvY2F0ZSAlZCBJUlRFIGZvciBQQ0kgJXNcbiIsIG52ZWMsCisJCSAgICAgICBwY2lfbmFtZShkZXYpKTsKKwkJcmV0dXJuIC1FTk9TUEM7CisJfQorCXJldHVybiBpbmRleDsKK30KKyNlbmRpZgorCitzdGF0aWMgaW50IHNldHVwX21zaV9pcnEoc3RydWN0IHBjaV9kZXYgKmRldiwgc3RydWN0IG1zaV9kZXNjICpkZXNjLCBpbnQgaXJxKQoreworCWludCByZXQ7CisJc3RydWN0IG1zaV9tc2cgbXNnOworCisJcmV0ID0gbXNpX2NvbXBvc2VfbXNnKGRldiwgaXJxLCAmbXNnKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXNldF9pcnFfbXNpKGlycSwgZGVzYyk7CisJd3JpdGVfbXNpX21zZyhpcnEsICZtc2cpOworCisjaWZkZWYgQ09ORklHX0lOVFJfUkVNQVAKKwlpZiAoaXJxX3JlbWFwcGVkKGlycSkpIHsKKwkJc3RydWN0IGlycV9kZXNjICpkZXNjID0gaXJxX3RvX2Rlc2MoaXJxKTsKKwkJLyoKKwkJICogaXJxIG1pZ3JhdGlvbiBpbiBwcm9jZXNzIGNvbnRleHQKKwkJICovCisJCWRlc2MtPnN0YXR1cyB8PSBJUlFfTU9WRV9QQ05UWFQ7CisJCXNldF9pcnFfY2hpcF9hbmRfaGFuZGxlcl9uYW1lKGlycSwgJm1zaV9pcl9jaGlwLCBoYW5kbGVfZWRnZV9pcnEsICJlZGdlIik7CisJfSBlbHNlCisjZW5kaWYKKwkJc2V0X2lycV9jaGlwX2FuZF9oYW5kbGVyX25hbWUoaXJxLCAmbXNpX2NoaXAsIGhhbmRsZV9lZGdlX2lycSwgImVkZ2UiKTsKKworCWRldl9wcmludGsoS0VSTl9ERUJVRywgJmRldi0+ZGV2LCAiaXJxICVkIGZvciBNU0kvTVNJLVhcbiIsIGlycSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCBidWlsZF9pcnFfZm9yX3BjaV9kZXYoc3RydWN0IHBjaV9kZXYgKmRldikKK3sKKwl1bnNpZ25lZCBpbnQgaXJxOworCisJaXJxID0gZGV2LT5idXMtPm51bWJlcjsKKwlpcnEgPDw9IDg7CisJaXJxIHw9IGRldi0+ZGV2Zm47CisJaXJxIDw8PSAxMjsKKworCXJldHVybiBpcnE7Cit9CisKK2ludCBhcmNoX3NldHVwX21zaV9pcnEoc3RydWN0IHBjaV9kZXYgKmRldiwgc3RydWN0IG1zaV9kZXNjICpkZXNjKQoreworCXVuc2lnbmVkIGludCBpcnE7CisJaW50IHJldDsKKwl1bnNpZ25lZCBpbnQgaXJxX3dhbnQ7CisKKwlpcnFfd2FudCA9IGJ1aWxkX2lycV9mb3JfcGNpX2RldihkZXYpICsgMHgxMDA7CisKKwlpcnEgPSBjcmVhdGVfaXJxX25yKGlycV93YW50KTsKKwlpZiAoaXJxID09IDApCisJCXJldHVybiAtMTsKKworI2lmZGVmIENPTkZJR19JTlRSX1JFTUFQCisJaWYgKCFpbnRyX3JlbWFwcGluZ19lbmFibGVkKQorCQlnb3RvIG5vX2lyOworCisJcmV0ID0gbXNpX2FsbG9jX2lydGUoZGV2LCBpcnEsIDEpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIGVycm9yOworbm9faXI6CisjZW5kaWYKKwlyZXQgPSBzZXR1cF9tc2lfaXJxKGRldiwgZGVzYywgaXJxKTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXN0cm95X2lycShpcnEpOworCQlyZXR1cm4gcmV0OworCX0KKwlyZXR1cm4gMDsKKworI2lmZGVmIENPTkZJR19JTlRSX1JFTUFQCitlcnJvcjoKKwlkZXN0cm95X2lycShpcnEpOworCXJldHVybiByZXQ7CisjZW5kaWYKK30KKworaW50IGFyY2hfc2V0dXBfbXNpX2lycXMoc3RydWN0IHBjaV9kZXYgKmRldiwgaW50IG52ZWMsIGludCB0eXBlKQoreworCXVuc2lnbmVkIGludCBpcnE7CisJaW50IHJldCwgc3ViX2hhbmRsZTsKKwlzdHJ1Y3QgbXNpX2Rlc2MgKmRlc2M7CisJdW5zaWduZWQgaW50IGlycV93YW50OworCisjaWZkZWYgQ09ORklHX0lOVFJfUkVNQVAKKwlzdHJ1Y3QgaW50ZWxfaW9tbXUgKmlvbW11ID0gMDsKKwlpbnQgaW5kZXggPSAwOworI2VuZGlmCisKKwlpcnFfd2FudCA9IGJ1aWxkX2lycV9mb3JfcGNpX2RldihkZXYpICsgMHgxMDA7CisJc3ViX2hhbmRsZSA9IDA7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShkZXNjLCAmZGV2LT5tc2lfbGlzdCwgbGlzdCkgeworCQlpcnEgPSBjcmVhdGVfaXJxX25yKGlycV93YW50LS0pOworCQlpZiAoaXJxID09IDApCisJCQlyZXR1cm4gLTE7CisjaWZkZWYgQ09ORklHX0lOVFJfUkVNQVAKKwkJaWYgKCFpbnRyX3JlbWFwcGluZ19lbmFibGVkKQorCQkJZ290byBub19pcjsKKworCQlpZiAoIXN1Yl9oYW5kbGUpIHsKKwkJCS8qCisJCQkgKiBhbGxvY2F0ZSB0aGUgY29uc2VjdXRpdmUgYmxvY2sgb2YgSVJURSdzCisJCQkgKiBmb3IgJ252ZWMnCisJCQkgKi8KKwkJCWluZGV4ID0gbXNpX2FsbG9jX2lydGUoZGV2LCBpcnEsIG52ZWMpOworCQkJaWYgKGluZGV4IDwgMCkgeworCQkJCXJldCA9IGluZGV4OworCQkJCWdvdG8gZXJyb3I7CisJCQl9CisJCX0gZWxzZSB7CisJCQlpb21tdSA9IG1hcF9kZXZfdG9faXIoZGV2KTsKKwkJCWlmICghaW9tbXUpIHsKKwkJCQlyZXQgPSAtRU5PRU5UOworCQkJCWdvdG8gZXJyb3I7CisJCQl9CisJCQkvKgorCQkJICogc2V0dXAgdGhlIG1hcHBpbmcgYmV0d2VlbiB0aGUgaXJxIGFuZCB0aGUgSVJURQorCQkJICogYmFzZSBpbmRleCwgdGhlIHN1Yl9oYW5kbGUgcG9pbnRpbmcgdG8gdGhlCisJCQkgKiBhcHByb3ByaWF0ZSBpbnRlcnJ1cHQgcmVtYXAgdGFibGUgZW50cnkuCisJCQkgKi8KKwkJCXNldF9pcnRlX2lycShpcnEsIGlvbW11LCBpbmRleCwgc3ViX2hhbmRsZSk7CisJCX0KK25vX2lyOgorI2VuZGlmCisJCXJldCA9IHNldHVwX21zaV9pcnEoZGV2LCBkZXNjLCBpcnEpOworCQlpZiAocmV0IDwgMCkKKwkJCWdvdG8gZXJyb3I7CisJCXN1Yl9oYW5kbGUrKzsKKwl9CisJcmV0dXJuIDA7CisKK2Vycm9yOgorCWRlc3Ryb3lfaXJxKGlycSk7CisJcmV0dXJuIHJldDsKK30KKwordm9pZCBhcmNoX3RlYXJkb3duX21zaV9pcnEodW5zaWduZWQgaW50IGlycSkKK3sKKwlkZXN0cm95X2lycShpcnEpOworfQorCisjaWZkZWYgQ09ORklHX0RNQVIKKyNpZmRlZiBDT05GSUdfU01QCitzdGF0aWMgdm9pZCBkbWFyX21zaV9zZXRfYWZmaW5pdHkodW5zaWduZWQgaW50IGlycSwgY3B1bWFza190IG1hc2spCit7CisJc3RydWN0IGlycV9jZmcgKmNmZzsKKwlzdHJ1Y3QgbXNpX21zZyBtc2c7CisJdW5zaWduZWQgaW50IGRlc3Q7CisJY3B1bWFza190IHRtcDsKKwlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2M7CisKKwljcHVzX2FuZCh0bXAsIG1hc2ssIGNwdV9vbmxpbmVfbWFwKTsKKwlpZiAoY3B1c19lbXB0eSh0bXApKQorCQlyZXR1cm47CisKKwlpZiAoYXNzaWduX2lycV92ZWN0b3IoaXJxLCBtYXNrKSkKKwkJcmV0dXJuOworCisJY2ZnID0gaXJxX2NmZyhpcnEpOworCWNwdXNfYW5kKHRtcCwgY2ZnLT5kb21haW4sIG1hc2spOworCWRlc3QgPSBjcHVfbWFza190b19hcGljaWQodG1wKTsKKworCWRtYXJfbXNpX3JlYWQoaXJxLCAmbXNnKTsKKworCW1zZy5kYXRhICY9IH5NU0lfREFUQV9WRUNUT1JfTUFTSzsKKwltc2cuZGF0YSB8PSBNU0lfREFUQV9WRUNUT1IoY2ZnLT52ZWN0b3IpOworCW1zZy5hZGRyZXNzX2xvICY9IH5NU0lfQUREUl9ERVNUX0lEX01BU0s7CisJbXNnLmFkZHJlc3NfbG8gfD0gTVNJX0FERFJfREVTVF9JRChkZXN0KTsKKworCWRtYXJfbXNpX3dyaXRlKGlycSwgJm1zZyk7CisJZGVzYyA9IGlycV90b19kZXNjKGlycSk7CisJZGVzYy0+YWZmaW5pdHkgPSBtYXNrOworfQorI2VuZGlmIC8qIENPTkZJR19TTVAgKi8KKworc3RydWN0IGlycV9jaGlwIGRtYXJfbXNpX3R5cGUgPSB7CisJLm5hbWUgPSAiRE1BUl9NU0kiLAorCS51bm1hc2sgPSBkbWFyX21zaV91bm1hc2ssCisJLm1hc2sgPSBkbWFyX21zaV9tYXNrLAorCS5hY2sgPSBhY2tfYXBpY19lZGdlLAorI2lmZGVmIENPTkZJR19TTVAKKwkuc2V0X2FmZmluaXR5ID0gZG1hcl9tc2lfc2V0X2FmZmluaXR5LAorI2VuZGlmCisJLnJldHJpZ2dlciA9IGlvYXBpY19yZXRyaWdnZXJfaXJxLAorfTsKKworaW50IGFyY2hfc2V0dXBfZG1hcl9tc2kodW5zaWduZWQgaW50IGlycSkKK3sKKwlpbnQgcmV0OworCXN0cnVjdCBtc2lfbXNnIG1zZzsKKworCXJldCA9IG1zaV9jb21wb3NlX21zZyhOVUxMLCBpcnEsICZtc2cpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCWRtYXJfbXNpX3dyaXRlKGlycSwgJm1zZyk7CisJc2V0X2lycV9jaGlwX2FuZF9oYW5kbGVyX25hbWUoaXJxLCAmZG1hcl9tc2lfdHlwZSwgaGFuZGxlX2VkZ2VfaXJxLAorCQkiZWRnZSIpOworCXJldHVybiAwOworfQorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfSFBFVF9USU1FUgorCisjaWZkZWYgQ09ORklHX1NNUAorc3RhdGljIHZvaWQgaHBldF9tc2lfc2V0X2FmZmluaXR5KHVuc2lnbmVkIGludCBpcnEsIGNwdW1hc2tfdCBtYXNrKQoreworCXN0cnVjdCBpcnFfY2ZnICpjZmc7CisJc3RydWN0IGlycV9kZXNjICpkZXNjOworCXN0cnVjdCBtc2lfbXNnIG1zZzsKKwl1bnNpZ25lZCBpbnQgZGVzdDsKKwljcHVtYXNrX3QgdG1wOworCisJY3B1c19hbmQodG1wLCBtYXNrLCBjcHVfb25saW5lX21hcCk7CisJaWYgKGNwdXNfZW1wdHkodG1wKSkKKwkJcmV0dXJuOworCisJaWYgKGFzc2lnbl9pcnFfdmVjdG9yKGlycSwgbWFzaykpCisJCXJldHVybjsKKworCWNmZyA9IGlycV9jZmcoaXJxKTsKKwljcHVzX2FuZCh0bXAsIGNmZy0+ZG9tYWluLCBtYXNrKTsKKwlkZXN0ID0gY3B1X21hc2tfdG9fYXBpY2lkKHRtcCk7CisKKwlocGV0X21zaV9yZWFkKGlycSwgJm1zZyk7CisKKwltc2cuZGF0YSAmPSB+TVNJX0RBVEFfVkVDVE9SX01BU0s7CisJbXNnLmRhdGEgfD0gTVNJX0RBVEFfVkVDVE9SKGNmZy0+dmVjdG9yKTsKKwltc2cuYWRkcmVzc19sbyAmPSB+TVNJX0FERFJfREVTVF9JRF9NQVNLOworCW1zZy5hZGRyZXNzX2xvIHw9IE1TSV9BRERSX0RFU1RfSUQoZGVzdCk7CisKKwlocGV0X21zaV93cml0ZShpcnEsICZtc2cpOworCWRlc2MgPSBpcnFfdG9fZGVzYyhpcnEpOworCWRlc2MtPmFmZmluaXR5ID0gbWFzazsKK30KKyNlbmRpZiAvKiBDT05GSUdfU01QICovCisKK3N0cnVjdCBpcnFfY2hpcCBocGV0X21zaV90eXBlID0geworCS5uYW1lID0gIkhQRVRfTVNJIiwKKwkudW5tYXNrID0gaHBldF9tc2lfdW5tYXNrLAorCS5tYXNrID0gaHBldF9tc2lfbWFzaywKKwkuYWNrID0gYWNrX2FwaWNfZWRnZSwKKyNpZmRlZiBDT05GSUdfU01QCisJLnNldF9hZmZpbml0eSA9IGhwZXRfbXNpX3NldF9hZmZpbml0eSwKKyNlbmRpZgorCS5yZXRyaWdnZXIgPSBpb2FwaWNfcmV0cmlnZ2VyX2lycSwKK307CisKK2ludCBhcmNoX3NldHVwX2hwZXRfbXNpKHVuc2lnbmVkIGludCBpcnEpCit7CisJaW50IHJldDsKKwlzdHJ1Y3QgbXNpX21zZyBtc2c7CisKKwlyZXQgPSBtc2lfY29tcG9zZV9tc2coTlVMTCwgaXJxLCAmbXNnKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCWhwZXRfbXNpX3dyaXRlKGlycSwgJm1zZyk7CisJc2V0X2lycV9jaGlwX2FuZF9oYW5kbGVyX25hbWUoaXJxLCAmaHBldF9tc2lfdHlwZSwgaGFuZGxlX2VkZ2VfaXJxLAorCQkiZWRnZSIpOworCisJcmV0dXJuIDA7Cit9CisjZW5kaWYKKworI2VuZGlmIC8qIENPTkZJR19QQ0lfTVNJICovCisvKgorICogSHlwZXJ0cmFuc3BvcnQgaW50ZXJydXB0IHN1cHBvcnQKKyAqLworI2lmZGVmIENPTkZJR19IVF9JUlEKKworI2lmZGVmIENPTkZJR19TTVAKKworc3RhdGljIHZvaWQgdGFyZ2V0X2h0X2lycSh1bnNpZ25lZCBpbnQgaXJxLCB1bnNpZ25lZCBpbnQgZGVzdCwgdTggdmVjdG9yKQoreworCXN0cnVjdCBodF9pcnFfbXNnIG1zZzsKKwlmZXRjaF9odF9pcnFfbXNnKGlycSwgJm1zZyk7CisKKwltc2cuYWRkcmVzc19sbyAmPSB+KEhUX0lSUV9MT1dfVkVDVE9SX01BU0sgfCBIVF9JUlFfTE9XX0RFU1RfSURfTUFTSyk7CisJbXNnLmFkZHJlc3NfaGkgJj0gfihIVF9JUlFfSElHSF9ERVNUX0lEX01BU0spOworCisJbXNnLmFkZHJlc3NfbG8gfD0gSFRfSVJRX0xPV19WRUNUT1IodmVjdG9yKSB8IEhUX0lSUV9MT1dfREVTVF9JRChkZXN0KTsKKwltc2cuYWRkcmVzc19oaSB8PSBIVF9JUlFfSElHSF9ERVNUX0lEKGRlc3QpOworCisJd3JpdGVfaHRfaXJxX21zZyhpcnEsICZtc2cpOworfQorCitzdGF0aWMgdm9pZCBzZXRfaHRfaXJxX2FmZmluaXR5KHVuc2lnbmVkIGludCBpcnEsIGNwdW1hc2tfdCBtYXNrKQoreworCXN0cnVjdCBpcnFfY2ZnICpjZmc7CisJdW5zaWduZWQgaW50IGRlc3Q7CisJY3B1bWFza190IHRtcDsKKwlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2M7CisKKwljcHVzX2FuZCh0bXAsIG1hc2ssIGNwdV9vbmxpbmVfbWFwKTsKKwlpZiAoY3B1c19lbXB0eSh0bXApKQorCQlyZXR1cm47CisKKwlpZiAoYXNzaWduX2lycV92ZWN0b3IoaXJxLCBtYXNrKSkKKwkJcmV0dXJuOworCisJY2ZnID0gaXJxX2NmZyhpcnEpOworCWNwdXNfYW5kKHRtcCwgY2ZnLT5kb21haW4sIG1hc2spOworCWRlc3QgPSBjcHVfbWFza190b19hcGljaWQodG1wKTsKKworCXRhcmdldF9odF9pcnEoaXJxLCBkZXN0LCBjZmctPnZlY3Rvcik7CisJZGVzYyA9IGlycV90b19kZXNjKGlycSk7CisJZGVzYy0+YWZmaW5pdHkgPSBtYXNrOworfQorI2VuZGlmCisKK3N0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgaHRfaXJxX2NoaXAgPSB7CisJLm5hbWUJCT0gIlBDSS1IVCIsCisJLm1hc2sJCT0gbWFza19odF9pcnEsCisJLnVubWFzawkJPSB1bm1hc2tfaHRfaXJxLAorCS5hY2sJCT0gYWNrX2FwaWNfZWRnZSwKKyNpZmRlZiBDT05GSUdfU01QCisJLnNldF9hZmZpbml0eQk9IHNldF9odF9pcnFfYWZmaW5pdHksCisjZW5kaWYKKwkucmV0cmlnZ2VyCT0gaW9hcGljX3JldHJpZ2dlcl9pcnEsCit9OworCitpbnQgYXJjaF9zZXR1cF9odF9pcnEodW5zaWduZWQgaW50IGlycSwgc3RydWN0IHBjaV9kZXYgKmRldikKK3sKKwlzdHJ1Y3QgaXJxX2NmZyAqY2ZnOworCWludCBlcnI7CisJY3B1bWFza190IHRtcDsKKworCXRtcCA9IFRBUkdFVF9DUFVTOworCWVyciA9IGFzc2lnbl9pcnFfdmVjdG9yKGlycSwgdG1wKTsKKwlpZiAoIWVycikgeworCQlzdHJ1Y3QgaHRfaXJxX21zZyBtc2c7CisJCXVuc2lnbmVkIGRlc3Q7CisKKwkJY2ZnID0gaXJxX2NmZyhpcnEpOworCQljcHVzX2FuZCh0bXAsIGNmZy0+ZG9tYWluLCB0bXApOworCQlkZXN0ID0gY3B1X21hc2tfdG9fYXBpY2lkKHRtcCk7CisKKwkJbXNnLmFkZHJlc3NfaGkgPSBIVF9JUlFfSElHSF9ERVNUX0lEKGRlc3QpOworCisJCW1zZy5hZGRyZXNzX2xvID0KKwkJCUhUX0lSUV9MT1dfQkFTRSB8CisJCQlIVF9JUlFfTE9XX0RFU1RfSUQoZGVzdCkgfAorCQkJSFRfSVJRX0xPV19WRUNUT1IoY2ZnLT52ZWN0b3IpIHwKKwkJCSgoSU5UX0RFU1RfTU9ERSA9PSAwKSA/CisJCQkJSFRfSVJRX0xPV19ETV9QSFlTSUNBTCA6CisJCQkJSFRfSVJRX0xPV19ETV9MT0dJQ0FMKSB8CisJCQlIVF9JUlFfTE9XX1JRRU9JX0VER0UgfAorCQkJKChJTlRfREVMSVZFUllfTU9ERSAhPSBkZXN0X0xvd2VzdFByaW8pID8KKwkJCQlIVF9JUlFfTE9XX01UX0ZJWEVEIDoKKwkJCQlIVF9JUlFfTE9XX01UX0FSQklUUkFURUQpIHwKKwkJCUhUX0lSUV9MT1dfSVJRX01BU0tFRDsKKworCQl3cml0ZV9odF9pcnFfbXNnKGlycSwgJm1zZyk7CisKKwkJc2V0X2lycV9jaGlwX2FuZF9oYW5kbGVyX25hbWUoaXJxLCAmaHRfaXJxX2NoaXAsCisJCQkJCSAgICAgIGhhbmRsZV9lZGdlX2lycSwgImVkZ2UiKTsKKworCQlkZXZfcHJpbnRrKEtFUk5fREVCVUcsICZkZXYtPmRldiwgImlycSAlZCBmb3IgSFRcbiIsIGlycSk7CisJfQorCXJldHVybiBlcnI7Cit9CisjZW5kaWYgLyogQ09ORklHX0hUX0lSUSAqLworCisjaWZkZWYgQ09ORklHX1g4Nl82NAorLyoKKyAqIFJlLXRhcmdldCB0aGUgaXJxIHRvIHRoZSBzcGVjaWZpZWQgQ1BVIGFuZCBlbmFibGUgdGhlIHNwZWNpZmllZCBNTVIgbG9jYXRlZAorICogb24gdGhlIHNwZWNpZmllZCBibGFkZSB0byBhbGxvdyB0aGUgc2VuZGluZyBvZiBNU0lzIHRvIHRoZSBzcGVjaWZpZWQgQ1BVLgorICovCitpbnQgYXJjaF9lbmFibGVfdXZfaXJxKGNoYXIgKmlycV9uYW1lLCB1bnNpZ25lZCBpbnQgaXJxLCBpbnQgY3B1LCBpbnQgbW1yX2JsYWRlLAorCQkgICAgICAgdW5zaWduZWQgbG9uZyBtbXJfb2Zmc2V0KQoreworCWNvbnN0IGNwdW1hc2tfdCAqZWxpZ2libGVfY3B1ID0gZ2V0X2NwdV9tYXNrKGNwdSk7CisJc3RydWN0IGlycV9jZmcgKmNmZzsKKwlpbnQgbW1yX3Bub2RlOworCXVuc2lnbmVkIGxvbmcgbW1yX3ZhbHVlOworCXN0cnVjdCB1dl9JT19BUElDX3JvdXRlX2VudHJ5ICplbnRyeTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCBlcnI7CisKKwllcnIgPSBhc3NpZ25faXJxX3ZlY3RvcihpcnEsICplbGlnaWJsZV9jcHUpOworCWlmIChlcnIgIT0gMCkKKwkJcmV0dXJuIGVycjsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZ2ZWN0b3JfbG9jaywgZmxhZ3MpOworCXNldF9pcnFfY2hpcF9hbmRfaGFuZGxlcl9uYW1lKGlycSwgJnV2X2lycV9jaGlwLCBoYW5kbGVfcGVyY3B1X2lycSwKKwkJCQkgICAgICBpcnFfbmFtZSk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdmVjdG9yX2xvY2ssIGZsYWdzKTsKKworCWNmZyA9IGlycV9jZmcoaXJxKTsKKworCW1tcl92YWx1ZSA9IDA7CisJZW50cnkgPSAoc3RydWN0IHV2X0lPX0FQSUNfcm91dGVfZW50cnkgKikmbW1yX3ZhbHVlOworCUJVR19PTihzaXplb2Yoc3RydWN0IHV2X0lPX0FQSUNfcm91dGVfZW50cnkpICE9IHNpemVvZih1bnNpZ25lZCBsb25nKSk7CisKKwllbnRyeS0+dmVjdG9yID0gY2ZnLT52ZWN0b3I7CisJZW50cnktPmRlbGl2ZXJ5X21vZGUgPSBJTlRfREVMSVZFUllfTU9ERTsKKwllbnRyeS0+ZGVzdF9tb2RlID0gSU5UX0RFU1RfTU9ERTsKKwllbnRyeS0+cG9sYXJpdHkgPSAwOworCWVudHJ5LT50cmlnZ2VyID0gMDsKKwllbnRyeS0+bWFzayA9IDA7CisJZW50cnktPmRlc3QgPSBjcHVfbWFza190b19hcGljaWQoKmVsaWdpYmxlX2NwdSk7CisKKwltbXJfcG5vZGUgPSB1dl9ibGFkZV90b19wbm9kZShtbXJfYmxhZGUpOworCXV2X3dyaXRlX2dsb2JhbF9tbXI2NChtbXJfcG5vZGUsIG1tcl9vZmZzZXQsIG1tcl92YWx1ZSk7CisKKwlyZXR1cm4gaXJxOworfQorCisvKgorICogRGlzYWJsZSB0aGUgc3BlY2lmaWVkIE1NUiBsb2NhdGVkIG9uIHRoZSBzcGVjaWZpZWQgYmxhZGUgc28gdGhhdCBNU0lzIGFyZQorICogbG9uZ2VyIGFsbG93ZWQgdG8gYmUgc2VudC4KKyAqLwordm9pZCBhcmNoX2Rpc2FibGVfdXZfaXJxKGludCBtbXJfYmxhZGUsIHVuc2lnbmVkIGxvbmcgbW1yX29mZnNldCkKK3sKKwl1bnNpZ25lZCBsb25nIG1tcl92YWx1ZTsKKwlzdHJ1Y3QgdXZfSU9fQVBJQ19yb3V0ZV9lbnRyeSAqZW50cnk7CisJaW50IG1tcl9wbm9kZTsKKworCW1tcl92YWx1ZSA9IDA7CisJZW50cnkgPSAoc3RydWN0IHV2X0lPX0FQSUNfcm91dGVfZW50cnkgKikmbW1yX3ZhbHVlOworCUJVR19PTihzaXplb2Yoc3RydWN0IHV2X0lPX0FQSUNfcm91dGVfZW50cnkpICE9IHNpemVvZih1bnNpZ25lZCBsb25nKSk7CisKKwllbnRyeS0+bWFzayA9IDE7CisKKwltbXJfcG5vZGUgPSB1dl9ibGFkZV90b19wbm9kZShtbXJfYmxhZGUpOworCXV2X3dyaXRlX2dsb2JhbF9tbXI2NChtbXJfcG5vZGUsIG1tcl9vZmZzZXQsIG1tcl92YWx1ZSk7Cit9CisjZW5kaWYgLyogQ09ORklHX1g4Nl82NCAqLworCitpbnQgX19pbml0IGlvX2FwaWNfZ2V0X3JlZGlyX2VudHJpZXMgKGludCBpb2FwaWMpCit7CisJdW5pb24gSU9fQVBJQ19yZWdfMDEJcmVnXzAxOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaW9hcGljX2xvY2ssIGZsYWdzKTsKKwlyZWdfMDEucmF3ID0gaW9fYXBpY19yZWFkKGlvYXBpYywgMSk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9hcGljX2xvY2ssIGZsYWdzKTsKKworCXJldHVybiByZWdfMDEuYml0cy5lbnRyaWVzOworfQorCitpbnQgX19pbml0IHByb2JlX25yX2lycXModm9pZCkKK3sKKwlpbnQgaWR4OworCWludCBuciA9IDA7CisjaWZuZGVmIENPTkZJR19YRU4KKwlpbnQgbnJfbWluID0gMzI7CisjZWxzZQorCWludCBucl9taW4gPSBOUl9JUlFTOworI2VuZGlmCisKKwlmb3IgKGlkeCA9IDA7IGlkeCA8IG5yX2lvYXBpY3M7IGlkeCsrKQorCQluciArPSBpb19hcGljX2dldF9yZWRpcl9lbnRyaWVzKGlkeCkgKyAxOworCisJLyogZG91YmxlIGl0IGZvciBob3RwbHVnIGFuZCBtc2kgYW5kIG5taSAqLworCW5yIDw8PSAxOworCisJLyogc29tZXRoaW5nIHdyb25nID8gKi8KKwlpZiAobnIgPCBucl9taW4pCisJCW5yID0gbnJfbWluOworCisJcmV0dXJuIG5yOworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAgICAgICAgICAgICAgICAgICBBQ1BJLWJhc2VkIElPQVBJQyBDb25maWd1cmF0aW9uCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisjaWZkZWYgQ09ORklHX0FDUEkKKworI2lmZGVmIENPTkZJR19YODZfMzIKK2ludCBfX2luaXQgaW9fYXBpY19nZXRfdW5pcXVlX2lkKGludCBpb2FwaWMsIGludCBhcGljX2lkKQoreworCXVuaW9uIElPX0FQSUNfcmVnXzAwIHJlZ18wMDsKKwlzdGF0aWMgcGh5c2lkX21hc2tfdCBhcGljX2lkX21hcCA9IFBIWVNJRF9NQVNLX05PTkU7CisJcGh5c2lkX21hc2tfdCB0bXA7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgaSA9IDA7CisKKwkvKgorCSAqIFRoZSBQNCBwbGF0Zm9ybSBzdXBwb3J0cyB1cCB0byAyNTYgQVBJQyBJRHMgb24gdHdvIHNlcGFyYXRlIEFQSUMKKwkgKiBidXNlcyAob25lIGZvciBMQVBJQ3MsIG9uZSBmb3IgSU9BUElDcyksIHdoZXJlIHByZWRlY2Vzc29ycyBvbmx5CisJICogc3VwcG9ydHMgdXAgdG8gMTYgb24gb25lIHNoYXJlZCBBUElDIGJ1cy4KKwkgKgorCSAqIFRCRDogRXhwYW5kIExBUElDL0lPQVBJQyBzdXBwb3J0IG9uIFA0LWNsYXNzIHN5c3RlbXMgdG8gdGFrZSBmdWxsCisJICogICAgICBhZHZhbnRhZ2Ugb2YgbmV3IEFQSUMgYnVzIGFyY2hpdGVjdHVyZS4KKwkgKi8KKworCWlmIChwaHlzaWRzX2VtcHR5KGFwaWNfaWRfbWFwKSkKKwkJYXBpY19pZF9tYXAgPSBpb2FwaWNfcGh5c19pZF9tYXAocGh5c19jcHVfcHJlc2VudF9tYXApOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmlvYXBpY19sb2NrLCBmbGFncyk7CisJcmVnXzAwLnJhdyA9IGlvX2FwaWNfcmVhZChpb2FwaWMsIDApOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYXBpY19sb2NrLCBmbGFncyk7CisKKwlpZiAoYXBpY19pZCA+PSBnZXRfcGh5c2ljYWxfYnJvYWRjYXN0KCkpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiSU9BUElDWyVkXTogSW52YWxpZCBhcGljX2lkICVkLCB0cnlpbmcgIgorCQkJIiVkXG4iLCBpb2FwaWMsIGFwaWNfaWQsIHJlZ18wMC5iaXRzLklEKTsKKwkJYXBpY19pZCA9IHJlZ18wMC5iaXRzLklEOworCX0KKworCS8qCisJICogRXZlcnkgQVBJQyBpbiBhIHN5c3RlbSBtdXN0IGhhdmUgYSB1bmlxdWUgSUQgb3Igd2UgZ2V0IGxvdHMgb2YgbmljZQorCSAqICdzdHVjayBvbiBzbXBfaW52YWxpZGF0ZV9uZWVkZWQgSVBJIHdhaXQnIG1lc3NhZ2VzLgorCSAqLworCWlmIChjaGVja19hcGljaWRfdXNlZChhcGljX2lkX21hcCwgYXBpY19pZCkpIHsKKworCQlmb3IgKGkgPSAwOyBpIDwgZ2V0X3BoeXNpY2FsX2Jyb2FkY2FzdCgpOyBpKyspIHsKKwkJCWlmICghY2hlY2tfYXBpY2lkX3VzZWQoYXBpY19pZF9tYXAsIGkpKQorCQkJCWJyZWFrOworCQl9CisKKwkJaWYgKGkgPT0gZ2V0X3BoeXNpY2FsX2Jyb2FkY2FzdCgpKQorCQkJcGFuaWMoIk1heCBhcGljX2lkIGV4Y2VlZGVkIVxuIik7CisKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiSU9BUElDWyVkXTogYXBpY19pZCAlZCBhbHJlYWR5IHVzZWQsICIKKwkJCSJ0cnlpbmcgJWRcbiIsIGlvYXBpYywgYXBpY19pZCwgaSk7CisKKwkJYXBpY19pZCA9IGk7CisJfQorCisJdG1wID0gYXBpY2lkX3RvX2NwdV9wcmVzZW50KGFwaWNfaWQpOworCXBoeXNpZHNfb3IoYXBpY19pZF9tYXAsIGFwaWNfaWRfbWFwLCB0bXApOworCisJaWYgKHJlZ18wMC5iaXRzLklEICE9IGFwaWNfaWQpIHsKKwkJcmVnXzAwLmJpdHMuSUQgPSBhcGljX2lkOworCisJCXNwaW5fbG9ja19pcnFzYXZlKCZpb2FwaWNfbG9jaywgZmxhZ3MpOworCQlpb19hcGljX3dyaXRlKGlvYXBpYywgMCwgcmVnXzAwLnJhdyk7CisJCXJlZ18wMC5yYXcgPSBpb19hcGljX3JlYWQoaW9hcGljLCAwKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9hcGljX2xvY2ssIGZsYWdzKTsKKworCQkvKiBTYW5pdHkgY2hlY2sgKi8KKwkJaWYgKHJlZ18wMC5iaXRzLklEICE9IGFwaWNfaWQpIHsKKwkJCXByaW50aygiSU9BUElDWyVkXTogVW5hYmxlIHRvIGNoYW5nZSBhcGljX2lkIVxuIiwgaW9hcGljKTsKKwkJCXJldHVybiAtMTsKKwkJfQorCX0KKworCWFwaWNfcHJpbnRrKEFQSUNfVkVSQk9TRSwgS0VSTl9JTkZPCisJCQkiSU9BUElDWyVkXTogQXNzaWduZWQgYXBpY19pZCAlZFxuIiwgaW9hcGljLCBhcGljX2lkKTsKKworCXJldHVybiBhcGljX2lkOworfQorCitpbnQgX19pbml0IGlvX2FwaWNfZ2V0X3ZlcnNpb24oaW50IGlvYXBpYykKK3sKKwl1bmlvbiBJT19BUElDX3JlZ18wMQlyZWdfMDE7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZpb2FwaWNfbG9jaywgZmxhZ3MpOworCXJlZ18wMS5yYXcgPSBpb19hcGljX3JlYWQoaW9hcGljLCAxKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2FwaWNfbG9jaywgZmxhZ3MpOworCisJcmV0dXJuIHJlZ18wMS5iaXRzLnZlcnNpb247Cit9CisjZW5kaWYKKworaW50IGlvX2FwaWNfc2V0X3BjaV9yb3V0aW5nIChpbnQgaW9hcGljLCBpbnQgcGluLCBpbnQgaXJxLCBpbnQgdHJpZ2dlcmluZywgaW50IHBvbGFyaXR5KQoreworCWlmICghSU9fQVBJQ19JUlEoaXJxKSkgeworCQlhcGljX3ByaW50ayhBUElDX1FVSUVULEtFUk5fRVJSICJJT0FQSUNbJWRdOiBJbnZhbGlkIHJlZmVyZW5jZSB0byBJUlEgMFxuIiwKKwkJCWlvYXBpYyk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qCisJICogSVJRcyA8IDE2IGFyZSBhbHJlYWR5IGluIHRoZSBpcnFfMl9waW5bXSBtYXAKKwkgKi8KKwlpZiAoaXJxID49IDE2KQorCQlhZGRfcGluX3RvX2lycShpcnEsIGlvYXBpYywgcGluKTsKKworCXNldHVwX0lPX0FQSUNfaXJxKGlvYXBpYywgcGluLCBpcnEsIHRyaWdnZXJpbmcsIHBvbGFyaXR5KTsKKworCXJldHVybiAwOworfQorCisKK2ludCBhY3BpX2dldF9vdmVycmlkZV9pcnEoaW50IGJ1c19pcnEsIGludCAqdHJpZ2dlciwgaW50ICpwb2xhcml0eSkKK3sKKwlpbnQgaTsKKworCWlmIChza2lwX2lvYXBpY19zZXR1cCkKKwkJcmV0dXJuIC0xOworCisJZm9yIChpID0gMDsgaSA8IG1wX2lycV9lbnRyaWVzOyBpKyspCisJCWlmIChtcF9pcnFzW2ldLm1wX2lycXR5cGUgPT0gbXBfSU5UICYmCisJCSAgICBtcF9pcnFzW2ldLm1wX3NyY2J1c2lycSA9PSBidXNfaXJxKQorCQkJYnJlYWs7CisJaWYgKGkgPj0gbXBfaXJxX2VudHJpZXMpCisJCXJldHVybiAtMTsKKworCSp0cmlnZ2VyID0gaXJxX3RyaWdnZXIoaSk7CisJKnBvbGFyaXR5ID0gaXJxX3BvbGFyaXR5KGkpOworCXJldHVybiAwOworfQorCisjZW5kaWYgLyogQ09ORklHX0FDUEkgKi8KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gY3VycmVudGx5IGlzIG9ubHkgYSBoZWxwZXIgZm9yIHRoZSBpMzg2IHNtcCBib290IHByb2Nlc3Mgd2hlcmUKKyAqIHdlIG5lZWQgdG8gcmVwcm9ncmFtIHRoZSBpb3JlZHRibHMgdG8gY2F0ZXIgZm9yIHRoZSBjcHVzIHdoaWNoIGhhdmUgY29tZSBvbmxpbmUKKyAqIHNvIG1hc2sgaW4gYWxsIGNhc2VzIHNob3VsZCBzaW1wbHkgYmUgVEFSR0VUX0NQVVMKKyAqLworI2lmZGVmIENPTkZJR19TTVAKK3ZvaWQgX19pbml0IHNldHVwX2lvYXBpY19kZXN0KHZvaWQpCit7CisJaW50IHBpbiwgaW9hcGljLCBpcnEsIGlycV9lbnRyeTsKKwlzdHJ1Y3QgaXJxX2NmZyAqY2ZnOworCisJaWYgKHNraXBfaW9hcGljX3NldHVwID09IDEpCisJCXJldHVybjsKKworCWZvciAoaW9hcGljID0gMDsgaW9hcGljIDwgbnJfaW9hcGljczsgaW9hcGljKyspIHsKKwkJZm9yIChwaW4gPSAwOyBwaW4gPCBucl9pb2FwaWNfcmVnaXN0ZXJzW2lvYXBpY107IHBpbisrKSB7CisJCQlpcnFfZW50cnkgPSBmaW5kX2lycV9lbnRyeShpb2FwaWMsIHBpbiwgbXBfSU5UKTsKKwkJCWlmIChpcnFfZW50cnkgPT0gLTEpCisJCQkJY29udGludWU7CisJCQlpcnEgPSBwaW5fMl9pcnEoaXJxX2VudHJ5LCBpb2FwaWMsIHBpbik7CisKKwkJCS8qIHNldHVwX0lPX0FQSUNfaXJxcyBjb3VsZCBmYWlsIHRvIGdldCB2ZWN0b3IgZm9yIHNvbWUgZGV2aWNlCisJCQkgKiB3aGVuIHlvdSBoYXZlIHRvbyBtYW55IGRldmljZXMsIGJlY2F1c2UgYXQgdGhhdCB0aW1lIG9ubHkgYm9vdAorCQkJICogY3B1IGlzIG9ubGluZS4KKwkJCSAqLworCQkJY2ZnID0gaXJxX2NmZyhpcnEpOworCQkJaWYgKCFjZmctPnZlY3RvcikKKwkJCQlzZXR1cF9JT19BUElDX2lycShpb2FwaWMsIHBpbiwgaXJxLAorCQkJCQkJICBpcnFfdHJpZ2dlcihpcnFfZW50cnkpLAorCQkJCQkJICBpcnFfcG9sYXJpdHkoaXJxX2VudHJ5KSk7CisjaWZkZWYgQ09ORklHX0lOVFJfUkVNQVAKKwkJCWVsc2UgaWYgKGludHJfcmVtYXBwaW5nX2VuYWJsZWQpCisJCQkJc2V0X2lyX2lvYXBpY19hZmZpbml0eV9pcnEoaXJxLCBUQVJHRVRfQ1BVUyk7CisjZW5kaWYKKwkJCWVsc2UKKwkJCQlzZXRfaW9hcGljX2FmZmluaXR5X2lycShpcnEsIFRBUkdFVF9DUFVTKTsKKwkJfQorCisJfQorfQorI2VuZGlmCisKKyNkZWZpbmUgSU9BUElDX1JFU09VUkNFX05BTUVfU0laRSAxMQorCitzdGF0aWMgc3RydWN0IHJlc291cmNlICppb2FwaWNfcmVzb3VyY2VzOworCitzdGF0aWMgc3RydWN0IHJlc291cmNlICogX19pbml0IGlvYXBpY19zZXR1cF9yZXNvdXJjZXModm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIG47CisJc3RydWN0IHJlc291cmNlICpyZXM7CisJY2hhciAqbWVtOworCWludCBpOworCisJaWYgKG5yX2lvYXBpY3MgPD0gMCkKKwkJcmV0dXJuIE5VTEw7CisKKwluID0gSU9BUElDX1JFU09VUkNFX05BTUVfU0laRSArIHNpemVvZihzdHJ1Y3QgcmVzb3VyY2UpOworCW4gKj0gbnJfaW9hcGljczsKKworCW1lbSA9IGFsbG9jX2Jvb3RtZW0obik7CisJcmVzID0gKHZvaWQgKiltZW07CisKKwlpZiAobWVtICE9IE5VTEwpIHsKKwkJbWVtICs9IHNpemVvZihzdHJ1Y3QgcmVzb3VyY2UpICogbnJfaW9hcGljczsKKworCQlmb3IgKGkgPSAwOyBpIDwgbnJfaW9hcGljczsgaSsrKSB7CisJCQlyZXNbaV0ubmFtZSA9IG1lbTsKKwkJCXJlc1tpXS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNIHwgSU9SRVNPVVJDRV9CVVNZOworCQkJc3ByaW50ZihtZW0sICAiSU9BUElDICV1IiwgaSk7CisJCQltZW0gKz0gSU9BUElDX1JFU09VUkNFX05BTUVfU0laRTsKKwkJfQorCX0KKworCWlvYXBpY19yZXNvdXJjZXMgPSByZXM7CisKKwlyZXR1cm4gcmVzOworfQorCit2b2lkIF9faW5pdCBpb2FwaWNfaW5pdF9tYXBwaW5ncyh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgaW9hcGljX3BoeXMsIGlkeCA9IEZJWF9JT19BUElDX0JBU0VfMDsKKwlzdHJ1Y3QgcmVzb3VyY2UgKmlvYXBpY19yZXM7CisJaW50IGk7CisKKwlpcnFfMl9waW5faW5pdCgpOworCWlvYXBpY19yZXMgPSBpb2FwaWNfc2V0dXBfcmVzb3VyY2VzKCk7CisJZm9yIChpID0gMDsgaSA8IG5yX2lvYXBpY3M7IGkrKykgeworCQlpZiAoc21wX2ZvdW5kX2NvbmZpZykgeworCQkJaW9hcGljX3BoeXMgPSBtcF9pb2FwaWNzW2ldLm1wX2FwaWNhZGRyOworI2lmZGVmIENPTkZJR19YODZfMzIKKwkJCWlmICghaW9hcGljX3BoeXMpIHsKKwkJCQlwcmludGsoS0VSTl9FUlIKKwkJCQkgICAgICAgIldBUk5JTkc6IGJvZ3VzIHplcm8gSU8tQVBJQyAiCisJCQkJICAgICAgICJhZGRyZXNzIGZvdW5kIGluIE1QVEFCTEUsICIKKwkJCQkgICAgICAgImRpc2FibGluZyBJTy9BUElDIHN1cHBvcnQhXG4iKTsKKwkJCQlzbXBfZm91bmRfY29uZmlnID0gMDsKKwkJCQlza2lwX2lvYXBpY19zZXR1cCA9IDE7CisJCQkJZ290byBmYWtlX2lvYXBpY19wYWdlOworCQkJfQorI2VuZGlmCisJCX0gZWxzZSB7CisjaWZkZWYgQ09ORklHX1g4Nl8zMgorZmFrZV9pb2FwaWNfcGFnZToKKyNlbmRpZgorCQkJaW9hcGljX3BoeXMgPSAodW5zaWduZWQgbG9uZykKKwkJCQlhbGxvY19ib290bWVtX3BhZ2VzKFBBR0VfU0laRSk7CisJCQlpb2FwaWNfcGh5cyA9IF9fcGEoaW9hcGljX3BoeXMpOworCQl9CisJCXNldF9maXhtYXBfbm9jYWNoZShpZHgsIGlvYXBpY19waHlzKTsKKwkJYXBpY19wcmludGsoQVBJQ19WRVJCT1NFLAorCQkJICAgICJtYXBwZWQgSU9BUElDIHRvICUwOGx4ICglMDhseClcbiIsCisJCQkgICAgX19maXhfdG9fdmlydChpZHgpLCBpb2FwaWNfcGh5cyk7CisJCWlkeCsrOworCisJCWlmIChpb2FwaWNfcmVzICE9IE5VTEwpIHsKKwkJCWlvYXBpY19yZXMtPnN0YXJ0ID0gaW9hcGljX3BoeXM7CisJCQlpb2FwaWNfcmVzLT5lbmQgPSBpb2FwaWNfcGh5cyArICg0ICogMTAyNCkgLSAxOworCQkJaW9hcGljX3JlcysrOworCQl9CisJfQorfQorCitzdGF0aWMgaW50IF9faW5pdCBpb2FwaWNfaW5zZXJ0X3Jlc291cmNlcyh2b2lkKQoreworCWludCBpOworCXN0cnVjdCByZXNvdXJjZSAqciA9IGlvYXBpY19yZXNvdXJjZXM7CisKKwlpZiAoIXIpIHsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCSAgICAgICAiSU8gQVBJQyByZXNvdXJjZXMgY291bGQgYmUgbm90IGJlIGFsbG9jYXRlZC5cbiIpOworCQlyZXR1cm4gLTE7CisJfQorCisJZm9yIChpID0gMDsgaSA8IG5yX2lvYXBpY3M7IGkrKykgeworCQlpbnNlcnRfcmVzb3VyY2UoJmlvbWVtX3Jlc291cmNlLCByKTsKKwkJcisrOworCX0KKworCXJldHVybiAwOworfQorCisvKiBJbnNlcnQgdGhlIElPIEFQSUMgcmVzb3VyY2VzIGFmdGVyIFBDSSBpbml0aWFsaXphdGlvbiBoYXMgb2NjdXJlZCB0byBoYW5kbGUKKyAqIElPIEFQSUNTIHRoYXQgYXJlIG1hcHBlZCBpbiBvbiBhIEJBUiBpbiBQQ0kgc3BhY2UuICovCitsYXRlX2luaXRjYWxsKGlvYXBpY19pbnNlcnRfcmVzb3VyY2VzKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9pb19hcGljXzMyLmMgYi9hcmNoL3g4Ni9rZXJuZWwvaW9fYXBpY18zMi5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNzEwMjg5Li4wMDAwMDAwCi0tLSBhL2FyY2gveDg2L2tlcm5lbC9pb19hcGljXzMyLmMKKysrIC9kZXYvbnVsbApAQCAtMSwyOTA4ICswLDAgQEAKLS8qCi0gKglJbnRlbCBJTy1BUElDIHN1cHBvcnQgZm9yIG11bHRpLVBlbnRpdW0gaG9zdHMuCi0gKgotICoJQ29weXJpZ2h0IChDKSAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwIEluZ28gTW9sbmFyLCBIYWpuYWxrYSBTemFibwotICoKLSAqCU1hbnkgdGhhbmtzIHRvIFN0aWcgVmVuYWFzIGZvciB0cnlpbmcgb3V0IGNvdW50bGVzcyBleHBlcmltZW50YWwKLSAqCXBhdGNoZXMgYW5kIHJlcG9ydGluZy9kZWJ1Z2dpbmcgcHJvYmxlbXMgcGF0aWVudGx5IQotICoKLSAqCShjKSAxOTk5LCBNdWx0aXBsZSBJTy1BUElDIHN1cHBvcnQsIGRldmVsb3BlZCBieQotICoJS2VuLWljaGkgWWFrdSA8eWFrdUBjc3MxLmtibmVzLm5lYy5jby5qcD4gYW5kCi0gKiAgICAgIEhpZGVtaSBLaXNoaW1vdG8gPGtpc2ltb3RvQGNzczEua2JuZXMubmVjLmNvLmpwPiwKLSAqCWZ1cnRoZXIgdGVzdGVkIGFuZCBjbGVhbmVkIHVwIGJ5IFphY2ggQnJvd24gPHphYkByZWRoYXQuY29tPgotICoJYW5kIEluZ28gTW9sbmFyIDxtaW5nb0ByZWRoYXQuY29tPgotICoKLSAqCUZpeGVzCi0gKglNYWNpZWogVy4gUm96eWNraQk6CUJpdHMgZm9yIGdlbnVpbmUgODI0ODlEWCBBUElDczsKLSAqCQkJCQl0aGFua3MgdG8gRXJpYyBHaWxtb3JlCi0gKgkJCQkJYW5kIFJvbGYgRy4gVGV3cwotICoJCQkJCWZvciB0ZXN0aW5nIHRoZXNlIGV4dGVuc2l2ZWx5Ci0gKglQYXVsIERpZWZlbmJhdWdoCToJQWRkZWQgZnVsbCBBQ1BJIHN1cHBvcnQKLSAqLwotCi0jaW5jbHVkZSA8bGludXgvbW0uaD4KLSNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KLSNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgotI2luY2x1ZGUgPGxpbnV4L2Jvb3RtZW0uaD4KLSNpbmNsdWRlIDxsaW51eC9tYzE0NjgxOHJ0Yy5oPgotI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+Ci0jaW5jbHVkZSA8bGludXgvYWNwaS5oPgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L3N5c2Rldi5oPgotI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgotI2luY2x1ZGUgPGxpbnV4L21zaS5oPgotI2luY2x1ZGUgPGxpbnV4L2h0aXJxLmg+Ci0jaW5jbHVkZSA8bGludXgvZnJlZXplci5oPgotI2luY2x1ZGUgPGxpbnV4L2t0aHJlYWQuaD4KLSNpbmNsdWRlIDxsaW51eC9qaWZmaWVzLmg+CS8qIHRpbWVfYWZ0ZXIoKSAqLwotCi0jaW5jbHVkZSA8YXNtL2lvLmg+Ci0jaW5jbHVkZSA8YXNtL3NtcC5oPgotI2luY2x1ZGUgPGFzbS9kZXNjLmg+Ci0jaW5jbHVkZSA8YXNtL3RpbWVyLmg+Ci0jaW5jbHVkZSA8YXNtL2k4MjU5Lmg+Ci0jaW5jbHVkZSA8YXNtL25taS5oPgotI2luY2x1ZGUgPGFzbS9tc2lkZWYuaD4KLSNpbmNsdWRlIDxhc20vaHlwZXJ0cmFuc3BvcnQuaD4KLSNpbmNsdWRlIDxhc20vc2V0dXAuaD4KLQotI2luY2x1ZGUgPG1hY2hfYXBpYy5oPgotI2luY2x1ZGUgPG1hY2hfYXBpY2RlZi5oPgotCi0jZGVmaW5lIF9fYXBpY2RlYnVnaW5pdCh0eXBlKSBzdGF0aWMgdHlwZSBfX2luaXQKLQotaW50ICgqaW9hcGljX3JlbnVtYmVyX2lycSkoaW50IGlvYXBpYywgaW50IGlycSk7Ci1hdG9taWNfdCBpcnFfbWlzX2NvdW50OwotCi0vKiBXaGVyZSBpZiBhbnl3aGVyZSBpcyB0aGUgaTgyNTkgY29ubmVjdCBpbiBleHRlcm5hbCBpbnQgbW9kZSAqLwotc3RhdGljIHN0cnVjdCB7IGludCBwaW4sIGFwaWM7IH0gaW9hcGljX2k4MjU5ID0geyAtMSwgLTEgfTsKLQotc3RhdGljIERFRklORV9TUElOTE9DSyhpb2FwaWNfbG9jayk7Ci1ERUZJTkVfU1BJTkxPQ0sodmVjdG9yX2xvY2spOwotCi1pbnQgdGltZXJfdGhyb3VnaF84MjU5IF9faW5pdGRhdGE7Ci0KLS8qCi0gKglJcyB0aGUgU2lTIEFQSUMgcm13IGJ1ZyBwcmVzZW50ID8KLSAqCS0xID0gZG9uJ3Qga25vdywgMCA9IG5vLCAxID0geWVzCi0gKi8KLWludCBzaXNfYXBpY19idWcgPSAtMTsKLQotLyoKLSAqICMgb2YgSVJRIHJvdXRpbmcgcmVnaXN0ZXJzCi0gKi8KLWludCBucl9pb2FwaWNfcmVnaXN0ZXJzW01BWF9JT19BUElDU107Ci0KLS8qIEkvTyBBUElDIGVudHJpZXMgKi8KLXN0cnVjdCBtcF9jb25maWdfaW9hcGljIG1wX2lvYXBpY3NbTUFYX0lPX0FQSUNTXTsKLWludCBucl9pb2FwaWNzOwotCi0vKiBNUCBJUlEgc291cmNlIGVudHJpZXMgKi8KLXN0cnVjdCBtcF9jb25maWdfaW50c3JjIG1wX2lycXNbTUFYX0lSUV9TT1VSQ0VTXTsKLQotLyogIyBvZiBNUCBJUlEgc291cmNlIGVudHJpZXMgKi8KLWludCBtcF9pcnFfZW50cmllczsKLQotI2lmIGRlZmluZWQgKENPTkZJR19NQ0EpIHx8IGRlZmluZWQgKENPTkZJR19FSVNBKQotaW50IG1wX2J1c19pZF90b190eXBlW01BWF9NUF9CVVNTRVNdOwotI2VuZGlmCi0KLURFQ0xBUkVfQklUTUFQKG1wX2J1c19ub3RfcGNpLCBNQVhfTVBfQlVTU0VTKTsKLQotc3RhdGljIGludCBkaXNhYmxlX3RpbWVyX3Bpbl8xIF9faW5pdGRhdGE7Ci0KLS8qCi0gKiBSb3VnaCBlc3RpbWF0aW9uIG9mIGhvdyBtYW55IHNoYXJlZCBJUlFzIHRoZXJlIGFyZSwgY2FuCi0gKiBiZSBjaGFuZ2VkIGFueXRpbWUuCi0gKi8KLSNkZWZpbmUgTUFYX1BMVVNfU0hBUkVEX0lSUVMgTlJfSVJRUwotI2RlZmluZSBQSU5fTUFQX1NJWkUgKE1BWF9QTFVTX1NIQVJFRF9JUlFTICsgTlJfSVJRUykKLQotLyoKLSAqIFRoaXMgaXMgcGVyZm9ybWFuY2UtY3JpdGljYWwsIHdlIHdhbnQgdG8gZG8gaXQgTygxKQotICoKLSAqIHRoZSBpbmRleGluZyBvcmRlciBvZiB0aGlzIGFycmF5IGZhdm9ycyAxOjEgbWFwcGluZ3MKLSAqIGJldHdlZW4gcGlucyBhbmQgSVJRcy4KLSAqLwotCi1zdGF0aWMgc3RydWN0IGlycV9waW5fbGlzdCB7Ci0JaW50IGFwaWMsIHBpbiwgbmV4dDsKLX0gaXJxXzJfcGluW1BJTl9NQVBfU0laRV07Ci0KLXN0cnVjdCBpb19hcGljIHsKLQl1bnNpZ25lZCBpbnQgaW5kZXg7Ci0JdW5zaWduZWQgaW50IHVudXNlZFszXTsKLQl1bnNpZ25lZCBpbnQgZGF0YTsKLX07Ci0KLXN0YXRpYyBfX2F0dHJpYnV0ZV9jb25zdF9fIHN0cnVjdCBpb19hcGljIF9faW9tZW0gKmlvX2FwaWNfYmFzZShpbnQgaWR4KQotewotCXJldHVybiAodm9pZCBfX2lvbWVtICopIF9fZml4X3RvX3ZpcnQoRklYX0lPX0FQSUNfQkFTRV8wICsgaWR4KQotCQkrIChtcF9pb2FwaWNzW2lkeF0ubXBfYXBpY2FkZHIgJiB+UEFHRV9NQVNLKTsKLX0KLQotc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgaW9fYXBpY19yZWFkKHVuc2lnbmVkIGludCBhcGljLCB1bnNpZ25lZCBpbnQgcmVnKQotewotCXN0cnVjdCBpb19hcGljIF9faW9tZW0gKmlvX2FwaWMgPSBpb19hcGljX2Jhc2UoYXBpYyk7Ci0Jd3JpdGVsKHJlZywgJmlvX2FwaWMtPmluZGV4KTsKLQlyZXR1cm4gcmVhZGwoJmlvX2FwaWMtPmRhdGEpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgaW9fYXBpY193cml0ZSh1bnNpZ25lZCBpbnQgYXBpYywgdW5zaWduZWQgaW50IHJlZywgdW5zaWduZWQgaW50IHZhbHVlKQotewotCXN0cnVjdCBpb19hcGljIF9faW9tZW0gKmlvX2FwaWMgPSBpb19hcGljX2Jhc2UoYXBpYyk7Ci0Jd3JpdGVsKHJlZywgJmlvX2FwaWMtPmluZGV4KTsKLQl3cml0ZWwodmFsdWUsICZpb19hcGljLT5kYXRhKTsKLX0KLQotLyoKLSAqIFJlLXdyaXRlIGEgdmFsdWU6IHRvIGJlIHVzZWQgZm9yIHJlYWQtbW9kaWZ5LXdyaXRlCi0gKiBjeWNsZXMgd2hlcmUgdGhlIHJlYWQgYWxyZWFkeSBzZXQgdXAgdGhlIGluZGV4IHJlZ2lzdGVyLgotICoKLSAqIE9sZGVyIFNpUyBBUElDIHJlcXVpcmVzIHdlIHJld3JpdGUgdGhlIGluZGV4IHJlZ2lzdGVyCi0gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBpb19hcGljX21vZGlmeSh1bnNpZ25lZCBpbnQgYXBpYywgdW5zaWduZWQgaW50IHJlZywgdW5zaWduZWQgaW50IHZhbHVlKQotewotCXZvbGF0aWxlIHN0cnVjdCBpb19hcGljIF9faW9tZW0gKmlvX2FwaWMgPSBpb19hcGljX2Jhc2UoYXBpYyk7Ci0JaWYgKHNpc19hcGljX2J1ZykKLQkJd3JpdGVsKHJlZywgJmlvX2FwaWMtPmluZGV4KTsKLQl3cml0ZWwodmFsdWUsICZpb19hcGljLT5kYXRhKTsKLX0KLQotdW5pb24gZW50cnlfdW5pb24gewotCXN0cnVjdCB7IHUzMiB3MSwgdzI7IH07Ci0Jc3RydWN0IElPX0FQSUNfcm91dGVfZW50cnkgZW50cnk7Ci19OwotCi1zdGF0aWMgc3RydWN0IElPX0FQSUNfcm91dGVfZW50cnkgaW9hcGljX3JlYWRfZW50cnkoaW50IGFwaWMsIGludCBwaW4pCi17Ci0JdW5pb24gZW50cnlfdW5pb24gZXU7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlzcGluX2xvY2tfaXJxc2F2ZSgmaW9hcGljX2xvY2ssIGZsYWdzKTsKLQlldS53MSA9IGlvX2FwaWNfcmVhZChhcGljLCAweDEwICsgMiAqIHBpbik7Ci0JZXUudzIgPSBpb19hcGljX3JlYWQoYXBpYywgMHgxMSArIDIgKiBwaW4pOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYXBpY19sb2NrLCBmbGFncyk7Ci0JcmV0dXJuIGV1LmVudHJ5OwotfQotCi0vKgotICogV2hlbiB3ZSB3cml0ZSBhIG5ldyBJTyBBUElDIHJvdXRpbmcgZW50cnksIHdlIG5lZWQgdG8gd3JpdGUgdGhlIGhpZ2gKLSAqIHdvcmQgZmlyc3QhIElmIHRoZSBtYXNrIGJpdCBpbiB0aGUgbG93IHdvcmQgaXMgY2xlYXIsIHdlIHdpbGwgZW5hYmxlCi0gKiB0aGUgaW50ZXJydXB0LCBhbmQgd2UgbmVlZCB0byBtYWtlIHN1cmUgdGhlIGVudHJ5IGlzIGZ1bGx5IHBvcHVsYXRlZAotICogYmVmb3JlIHRoYXQgaGFwcGVucy4KLSAqLwotc3RhdGljIHZvaWQKLV9faW9hcGljX3dyaXRlX2VudHJ5KGludCBhcGljLCBpbnQgcGluLCBzdHJ1Y3QgSU9fQVBJQ19yb3V0ZV9lbnRyeSBlKQotewotCXVuaW9uIGVudHJ5X3VuaW9uIGV1OwotCWV1LmVudHJ5ID0gZTsKLQlpb19hcGljX3dyaXRlKGFwaWMsIDB4MTEgKyAyKnBpbiwgZXUudzIpOwotCWlvX2FwaWNfd3JpdGUoYXBpYywgMHgxMCArIDIqcGluLCBldS53MSk7Ci19Ci0KLXN0YXRpYyB2b2lkIGlvYXBpY193cml0ZV9lbnRyeShpbnQgYXBpYywgaW50IHBpbiwgc3RydWN0IElPX0FQSUNfcm91dGVfZW50cnkgZSkKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXNwaW5fbG9ja19pcnFzYXZlKCZpb2FwaWNfbG9jaywgZmxhZ3MpOwotCV9faW9hcGljX3dyaXRlX2VudHJ5KGFwaWMsIHBpbiwgZSk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9hcGljX2xvY2ssIGZsYWdzKTsKLX0KLQotLyoKLSAqIFdoZW4gd2UgbWFzayBhbiBJTyBBUElDIHJvdXRpbmcgZW50cnksIHdlIG5lZWQgdG8gd3JpdGUgdGhlIGxvdwotICogd29yZCBmaXJzdCwgaW4gb3JkZXIgdG8gc2V0IHRoZSBtYXNrIGJpdCBiZWZvcmUgd2UgY2hhbmdlIHRoZQotICogaGlnaCBiaXRzIQotICovCi1zdGF0aWMgdm9pZCBpb2FwaWNfbWFza19lbnRyeShpbnQgYXBpYywgaW50IHBpbikKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXVuaW9uIGVudHJ5X3VuaW9uIGV1ID0geyAuZW50cnkubWFzayA9IDEgfTsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZpb2FwaWNfbG9jaywgZmxhZ3MpOwotCWlvX2FwaWNfd3JpdGUoYXBpYywgMHgxMCArIDIqcGluLCBldS53MSk7Ci0JaW9fYXBpY193cml0ZShhcGljLCAweDExICsgMipwaW4sIGV1LncyKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2FwaWNfbG9jaywgZmxhZ3MpOwotfQotCi0vKgotICogVGhlIGNvbW1vbiBjYXNlIGlzIDE6MSBJUlE8LT5waW4gbWFwcGluZ3MuIFNvbWV0aW1lcyB0aGVyZSBhcmUKLSAqIHNoYXJlZCBJU0Etc3BhY2UgSVJRcywgc28gd2UgaGF2ZSB0byBzdXBwb3J0IHRoZW0uIFdlIGFyZSBzdXBlcgotICogZmFzdCBpbiB0aGUgY29tbW9uIGNhc2UsIGFuZCBmYXN0IGZvciBzaGFyZWQgSVNBLXNwYWNlIElSUXMuCi0gKi8KLXN0YXRpYyB2b2lkIGFkZF9waW5fdG9faXJxKHVuc2lnbmVkIGludCBpcnEsIGludCBhcGljLCBpbnQgcGluKQotewotCXN0YXRpYyBpbnQgZmlyc3RfZnJlZV9lbnRyeSA9IE5SX0lSUVM7Ci0Jc3RydWN0IGlycV9waW5fbGlzdCAqZW50cnkgPSBpcnFfMl9waW4gKyBpcnE7Ci0KLQl3aGlsZSAoZW50cnktPm5leHQpCi0JCWVudHJ5ID0gaXJxXzJfcGluICsgZW50cnktPm5leHQ7Ci0KLQlpZiAoZW50cnktPnBpbiAhPSAtMSkgewotCQllbnRyeS0+bmV4dCA9IGZpcnN0X2ZyZWVfZW50cnk7Ci0JCWVudHJ5ID0gaXJxXzJfcGluICsgZW50cnktPm5leHQ7Ci0JCWlmICgrK2ZpcnN0X2ZyZWVfZW50cnkgPj0gUElOX01BUF9TSVpFKQotCQkJcGFuaWMoImlvX2FwaWMuYzogd2hvb3BzIik7Ci0JfQotCWVudHJ5LT5hcGljID0gYXBpYzsKLQllbnRyeS0+cGluID0gcGluOwotfQotCi0vKgotICogUmVyb3V0ZSBhbiBJUlEgdG8gYSBkaWZmZXJlbnQgcGluLgotICovCi1zdGF0aWMgdm9pZCBfX2luaXQgcmVwbGFjZV9waW5fYXRfaXJxKHVuc2lnbmVkIGludCBpcnEsCi0JCQkJICAgICAgaW50IG9sZGFwaWMsIGludCBvbGRwaW4sCi0JCQkJICAgICAgaW50IG5ld2FwaWMsIGludCBuZXdwaW4pCi17Ci0Jc3RydWN0IGlycV9waW5fbGlzdCAqZW50cnkgPSBpcnFfMl9waW4gKyBpcnE7Ci0KLQl3aGlsZSAoMSkgewotCQlpZiAoZW50cnktPmFwaWMgPT0gb2xkYXBpYyAmJiBlbnRyeS0+cGluID09IG9sZHBpbikgewotCQkJZW50cnktPmFwaWMgPSBuZXdhcGljOwotCQkJZW50cnktPnBpbiA9IG5ld3BpbjsKLQkJfQotCQlpZiAoIWVudHJ5LT5uZXh0KQotCQkJYnJlYWs7Ci0JCWVudHJ5ID0gaXJxXzJfcGluICsgZW50cnktPm5leHQ7Ci0JfQotfQotCi1zdGF0aWMgdm9pZCBfX21vZGlmeV9JT19BUElDX2lycSh1bnNpZ25lZCBpbnQgaXJxLCB1bnNpZ25lZCBsb25nIGVuYWJsZSwgdW5zaWduZWQgbG9uZyBkaXNhYmxlKQotewotCXN0cnVjdCBpcnFfcGluX2xpc3QgKmVudHJ5ID0gaXJxXzJfcGluICsgaXJxOwotCXVuc2lnbmVkIGludCBwaW4sIHJlZzsKLQotCWZvciAoOzspIHsKLQkJcGluID0gZW50cnktPnBpbjsKLQkJaWYgKHBpbiA9PSAtMSkKLQkJCWJyZWFrOwotCQlyZWcgPSBpb19hcGljX3JlYWQoZW50cnktPmFwaWMsIDB4MTAgKyBwaW4qMik7Ci0JCXJlZyAmPSB+ZGlzYWJsZTsKLQkJcmVnIHw9IGVuYWJsZTsKLQkJaW9fYXBpY19tb2RpZnkoZW50cnktPmFwaWMsIDB4MTAgKyBwaW4qMiwgcmVnKTsKLQkJaWYgKCFlbnRyeS0+bmV4dCkKLQkJCWJyZWFrOwotCQllbnRyeSA9IGlycV8yX3BpbiArIGVudHJ5LT5uZXh0OwotCX0KLX0KLQotLyogbWFzayA9IDEgKi8KLXN0YXRpYyB2b2lkIF9fbWFza19JT19BUElDX2lycSh1bnNpZ25lZCBpbnQgaXJxKQotewotCV9fbW9kaWZ5X0lPX0FQSUNfaXJxKGlycSwgSU9fQVBJQ19SRURJUl9NQVNLRUQsIDApOwotfQotCi0vKiBtYXNrID0gMCAqLwotc3RhdGljIHZvaWQgX191bm1hc2tfSU9fQVBJQ19pcnEodW5zaWduZWQgaW50IGlycSkKLXsKLQlfX21vZGlmeV9JT19BUElDX2lycShpcnEsIDAsIElPX0FQSUNfUkVESVJfTUFTS0VEKTsKLX0KLQotLyogbWFzayA9IDEsIHRyaWdnZXIgPSAwICovCi1zdGF0aWMgdm9pZCBfX21hc2tfYW5kX2VkZ2VfSU9fQVBJQ19pcnEodW5zaWduZWQgaW50IGlycSkKLXsKLQlfX21vZGlmeV9JT19BUElDX2lycShpcnEsIElPX0FQSUNfUkVESVJfTUFTS0VELAotCQkJCUlPX0FQSUNfUkVESVJfTEVWRUxfVFJJR0dFUik7Ci19Ci0KLS8qIG1hc2sgPSAwLCB0cmlnZ2VyID0gMSAqLwotc3RhdGljIHZvaWQgX191bm1hc2tfYW5kX2xldmVsX0lPX0FQSUNfaXJxKHVuc2lnbmVkIGludCBpcnEpCi17Ci0JX19tb2RpZnlfSU9fQVBJQ19pcnEoaXJxLCBJT19BUElDX1JFRElSX0xFVkVMX1RSSUdHRVIsCi0JCQkJSU9fQVBJQ19SRURJUl9NQVNLRUQpOwotfQotCi1zdGF0aWMgdm9pZCBtYXNrX0lPX0FQSUNfaXJxKHVuc2lnbmVkIGludCBpcnEpCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZpb2FwaWNfbG9jaywgZmxhZ3MpOwotCV9fbWFza19JT19BUElDX2lycShpcnEpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYXBpY19sb2NrLCBmbGFncyk7Ci19Ci0KLXN0YXRpYyB2b2lkIHVubWFza19JT19BUElDX2lycSh1bnNpZ25lZCBpbnQgaXJxKQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmaW9hcGljX2xvY2ssIGZsYWdzKTsKLQlfX3VubWFza19JT19BUElDX2lycShpcnEpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYXBpY19sb2NrLCBmbGFncyk7Ci19Ci0KLXN0YXRpYyB2b2lkIGNsZWFyX0lPX0FQSUNfcGluKHVuc2lnbmVkIGludCBhcGljLCB1bnNpZ25lZCBpbnQgcGluKQotewotCXN0cnVjdCBJT19BUElDX3JvdXRlX2VudHJ5IGVudHJ5OwotCi0JLyogQ2hlY2sgZGVsaXZlcnlfbW9kZSB0byBiZSBzdXJlIHdlJ3JlIG5vdCBjbGVhcmluZyBhbiBTTUkgcGluICovCi0JZW50cnkgPSBpb2FwaWNfcmVhZF9lbnRyeShhcGljLCBwaW4pOwotCWlmIChlbnRyeS5kZWxpdmVyeV9tb2RlID09IGRlc3RfU01JKQotCQlyZXR1cm47Ci0KLQkvKgotCSAqIERpc2FibGUgaXQgaW4gdGhlIElPLUFQSUMgaXJxLXJvdXRpbmcgdGFibGU6Ci0JICovCi0JaW9hcGljX21hc2tfZW50cnkoYXBpYywgcGluKTsKLX0KLQotc3RhdGljIHZvaWQgY2xlYXJfSU9fQVBJQyh2b2lkKQotewotCWludCBhcGljLCBwaW47Ci0KLQlmb3IgKGFwaWMgPSAwOyBhcGljIDwgbnJfaW9hcGljczsgYXBpYysrKQotCQlmb3IgKHBpbiA9IDA7IHBpbiA8IG5yX2lvYXBpY19yZWdpc3RlcnNbYXBpY107IHBpbisrKQotCQkJY2xlYXJfSU9fQVBJQ19waW4oYXBpYywgcGluKTsKLX0KLQotI2lmZGVmIENPTkZJR19TTVAKLXN0YXRpYyB2b2lkIHNldF9pb2FwaWNfYWZmaW5pdHlfaXJxKHVuc2lnbmVkIGludCBpcnEsIGNwdW1hc2tfdCBjcHVtYXNrKQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IHBpbjsKLQlzdHJ1Y3QgaXJxX3Bpbl9saXN0ICplbnRyeSA9IGlycV8yX3BpbiArIGlycTsKLQl1bnNpZ25lZCBpbnQgYXBpY2lkX3ZhbHVlOwotCWNwdW1hc2tfdCB0bXA7Ci0KLQljcHVzX2FuZCh0bXAsIGNwdW1hc2ssIGNwdV9vbmxpbmVfbWFwKTsKLQlpZiAoY3B1c19lbXB0eSh0bXApKQotCQl0bXAgPSBUQVJHRVRfQ1BVUzsKLQotCWNwdXNfYW5kKGNwdW1hc2ssIHRtcCwgQ1BVX01BU0tfQUxMKTsKLQotCWFwaWNpZF92YWx1ZSA9IGNwdV9tYXNrX3RvX2FwaWNpZChjcHVtYXNrKTsKLQkvKiBQcmVwYXJlIHRvIGRvIHRoZSBpb19hcGljX3dyaXRlICovCi0JYXBpY2lkX3ZhbHVlID0gYXBpY2lkX3ZhbHVlIDw8IDI0OwotCXNwaW5fbG9ja19pcnFzYXZlKCZpb2FwaWNfbG9jaywgZmxhZ3MpOwotCWZvciAoOzspIHsKLQkJcGluID0gZW50cnktPnBpbjsKLQkJaWYgKHBpbiA9PSAtMSkKLQkJCWJyZWFrOwotCQlpb19hcGljX3dyaXRlKGVudHJ5LT5hcGljLCAweDEwICsgMSArIHBpbioyLCBhcGljaWRfdmFsdWUpOwotCQlpZiAoIWVudHJ5LT5uZXh0KQotCQkJYnJlYWs7Ci0JCWVudHJ5ID0gaXJxXzJfcGluICsgZW50cnktPm5leHQ7Ci0JfQotCWlycV9kZXNjW2lycV0uYWZmaW5pdHkgPSBjcHVtYXNrOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYXBpY19sb2NrLCBmbGFncyk7Ci19Ci0KLSNpZiBkZWZpbmVkKENPTkZJR19JUlFCQUxBTkNFKQotIyBpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CS8qIGtlcm5lbF90aHJlYWQoKSAqLwotIyBpbmNsdWRlIDxsaW51eC9rZXJuZWxfc3RhdC5oPgkvKiBrc3RhdCAqLwotIyBpbmNsdWRlIDxsaW51eC9zbGFiLmg+CQkvKiBrbWFsbG9jKCkgKi8KLSMgaW5jbHVkZSA8bGludXgvdGltZXIuaD4KLQotI2RlZmluZSBJUlFCQUxBTkNFX0NIRUNLX0FSQ0ggLTk5OQotI2RlZmluZSBNQVhfQkFMQU5DRURfSVJRX0lOVEVSVkFMCSg1KkhaKQotI2RlZmluZSBNSU5fQkFMQU5DRURfSVJRX0lOVEVSVkFMCShIWi8yKQotI2RlZmluZSBCQUxBTkNFRF9JUlFfTU9SRV9ERUxUQQkJKEhaLzEwKQotI2RlZmluZSBCQUxBTkNFRF9JUlFfTEVTU19ERUxUQQkJKEhaKQotCi1zdGF0aWMgaW50IGlycWJhbGFuY2VfZGlzYWJsZWQgX19yZWFkX21vc3RseSA9IElSUUJBTEFOQ0VfQ0hFQ0tfQVJDSDsKLXN0YXRpYyBpbnQgcGh5c2ljYWxfYmFsYW5jZSBfX3JlYWRfbW9zdGx5Owotc3RhdGljIGxvbmcgYmFsYW5jZWRfaXJxX2ludGVydmFsIF9fcmVhZF9tb3N0bHkgPSBNQVhfQkFMQU5DRURfSVJRX0lOVEVSVkFMOwotCi1zdGF0aWMgc3RydWN0IGlycV9jcHVfaW5mbyB7Ci0JdW5zaWduZWQgbG9uZyAqbGFzdF9pcnE7Ci0JdW5zaWduZWQgbG9uZyAqaXJxX2RlbHRhOwotCXVuc2lnbmVkIGxvbmcgaXJxOwotfSBpcnFfY3B1X2RhdGFbTlJfQ1BVU107Ci0KLSNkZWZpbmUgQ1BVX0lSUShjcHUpCQkoaXJxX2NwdV9kYXRhW2NwdV0uaXJxKQotI2RlZmluZSBMQVNUX0NQVV9JUlEoY3B1LCBpcnEpICAgKGlycV9jcHVfZGF0YVtjcHVdLmxhc3RfaXJxW2lycV0pCi0jZGVmaW5lIElSUV9ERUxUQShjcHUsIGlycSkgCShpcnFfY3B1X2RhdGFbY3B1XS5pcnFfZGVsdGFbaXJxXSkKLQotI2RlZmluZSBJRExFX0VOT1VHSChjcHUsbm93KSBcCi0JKGlkbGVfY3B1KGNwdSkgJiYgKChub3cpIC0gcGVyX2NwdShpcnFfc3RhdCwgKGNwdSkpLmlkbGVfdGltZXN0YW1wID4gMSkpCi0KLSNkZWZpbmUgSVJRX0FMTE9XRUQoY3B1LCBhbGxvd2VkX21hc2spCWNwdV9pc3NldChjcHUsIGFsbG93ZWRfbWFzaykKLQotI2RlZmluZSBDUFVfVE9fUEFDS0FHRUlOREVYKGkpIChmaXJzdF9jcHUocGVyX2NwdShjcHVfc2libGluZ19tYXAsIGkpKSkKLQotc3RhdGljIGNwdW1hc2tfdCBiYWxhbmNlX2lycV9hZmZpbml0eVtOUl9JUlFTXSA9IHsKLQlbMCAuLi4gTlJfSVJRUy0xXSA9IENQVV9NQVNLX0FMTAotfTsKLQotdm9pZCBzZXRfYmFsYW5jZV9pcnFfYWZmaW5pdHkodW5zaWduZWQgaW50IGlycSwgY3B1bWFza190IG1hc2spCi17Ci0JYmFsYW5jZV9pcnFfYWZmaW5pdHlbaXJxXSA9IG1hc2s7Ci19Ci0KLXN0YXRpYyB1bnNpZ25lZCBsb25nIG1vdmUoaW50IGN1cnJfY3B1LCBjcHVtYXNrX3QgYWxsb3dlZF9tYXNrLAotCQkJdW5zaWduZWQgbG9uZyBub3csIGludCBkaXJlY3Rpb24pCi17Ci0JaW50IHNlYXJjaF9pZGxlID0gMTsKLQlpbnQgY3B1ID0gY3Vycl9jcHU7Ci0KLQlnb3RvIGluc2lkZTsKLQotCWRvIHsKLQkJaWYgKHVubGlrZWx5KGNwdSA9PSBjdXJyX2NwdSkpCi0JCQlzZWFyY2hfaWRsZSA9IDA7Ci1pbnNpZGU6Ci0JCWlmIChkaXJlY3Rpb24gPT0gMSkgewotCQkJY3B1Kys7Ci0JCQlpZiAoY3B1ID49IE5SX0NQVVMpCi0JCQkJY3B1ID0gMDsKLQkJfSBlbHNlIHsKLQkJCWNwdS0tOwotCQkJaWYgKGNwdSA9PSAtMSkKLQkJCQljcHUgPSBOUl9DUFVTLTE7Ci0JCX0KLQl9IHdoaWxlICghY3B1X29ubGluZShjcHUpIHx8ICFJUlFfQUxMT1dFRChjcHUsIGFsbG93ZWRfbWFzaykgfHwKLQkJCShzZWFyY2hfaWRsZSAmJiAhSURMRV9FTk9VR0goY3B1LCBub3cpKSk7Ci0KLQlyZXR1cm4gY3B1OwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgYmFsYW5jZV9pcnEoaW50IGNwdSwgaW50IGlycSkKLXsKLQl1bnNpZ25lZCBsb25nIG5vdyA9IGppZmZpZXM7Ci0JY3B1bWFza190IGFsbG93ZWRfbWFzazsKLQl1bnNpZ25lZCBpbnQgbmV3X2NwdTsKLQotCWlmIChpcnFiYWxhbmNlX2Rpc2FibGVkKQotCQlyZXR1cm47Ci0KLQljcHVzX2FuZChhbGxvd2VkX21hc2ssIGNwdV9vbmxpbmVfbWFwLCBiYWxhbmNlX2lycV9hZmZpbml0eVtpcnFdKTsKLQluZXdfY3B1ID0gbW92ZShjcHUsIGFsbG93ZWRfbWFzaywgbm93LCAxKTsKLQlpZiAoY3B1ICE9IG5ld19jcHUpCi0JCXNldF9wZW5kaW5nX2lycShpcnEsIGNwdW1hc2tfb2ZfY3B1KG5ld19jcHUpKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHJvdGF0ZV9pcnFzX2Ftb25nX2NwdXModW5zaWduZWQgbG9uZyB1c2VmdWxfbG9hZF90aHJlc2hvbGQpCi17Ci0JaW50IGksIGo7Ci0KLQlmb3JfZWFjaF9vbmxpbmVfY3B1KGkpIHsKLQkJZm9yIChqID0gMDsgaiA8IE5SX0lSUVM7IGorKykgewotCQkJaWYgKCFpcnFfZGVzY1tqXS5hY3Rpb24pCi0JCQkJY29udGludWU7Ci0JCQkvKiBJcyBpdCBhIHNpZ25pZmljYW50IGxvYWQgPyAgKi8KLQkJCWlmIChJUlFfREVMVEEoQ1BVX1RPX1BBQ0tBR0VJTkRFWChpKSwgaikgPAotCQkJCQkJdXNlZnVsX2xvYWRfdGhyZXNob2xkKQotCQkJCWNvbnRpbnVlOwotCQkJYmFsYW5jZV9pcnEoaSwgaik7Ci0JCX0KLQl9Ci0JYmFsYW5jZWRfaXJxX2ludGVydmFsID0gbWF4KChsb25nKU1JTl9CQUxBTkNFRF9JUlFfSU5URVJWQUwsCi0JCWJhbGFuY2VkX2lycV9pbnRlcnZhbCAtIEJBTEFOQ0VEX0lSUV9MRVNTX0RFTFRBKTsKLQlyZXR1cm47Ci19Ci0KLXN0YXRpYyB2b2lkIGRvX2lycV9iYWxhbmNlKHZvaWQpCi17Ci0JaW50IGksIGo7Ci0JdW5zaWduZWQgbG9uZyBtYXhfY3B1X2lycSA9IDAsIG1pbl9jcHVfaXJxID0gKH4wKTsKLQl1bnNpZ25lZCBsb25nIG1vdmVfdGhpc19sb2FkID0gMDsKLQlpbnQgbWF4X2xvYWRlZCA9IDAsIG1pbl9sb2FkZWQgPSAwOwotCWludCBsb2FkOwotCXVuc2lnbmVkIGxvbmcgdXNlZnVsX2xvYWRfdGhyZXNob2xkID0gYmFsYW5jZWRfaXJxX2ludGVydmFsICsgMTA7Ci0JaW50IHNlbGVjdGVkX2lycTsKLQlpbnQgdG1wX2xvYWRlZCwgZmlyc3RfYXR0ZW1wdCA9IDE7Ci0JdW5zaWduZWQgbG9uZyB0bXBfY3B1X2lycTsKLQl1bnNpZ25lZCBsb25nIGltYmFsYW5jZSA9IDA7Ci0JY3B1bWFza190IGFsbG93ZWRfbWFzaywgdGFyZ2V0X2NwdV9tYXNrLCB0bXA7Ci0KLQlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoaSkgewotCQlpbnQgcGFja2FnZV9pbmRleDsKLQkJQ1BVX0lSUShpKSA9IDA7Ci0JCWlmICghY3B1X29ubGluZShpKSkKLQkJCWNvbnRpbnVlOwotCQlwYWNrYWdlX2luZGV4ID0gQ1BVX1RPX1BBQ0tBR0VJTkRFWChpKTsKLQkJZm9yIChqID0gMDsgaiA8IE5SX0lSUVM7IGorKykgewotCQkJdW5zaWduZWQgbG9uZyB2YWx1ZV9ub3csIGRlbHRhOwotCQkJLyogSXMgdGhpcyBhbiBhY3RpdmUgSVJRIG9yIGJhbGFuY2luZyBkaXNhYmxlZCA/ICovCi0JCQlpZiAoIWlycV9kZXNjW2pdLmFjdGlvbiB8fCBpcnFfYmFsYW5jaW5nX2Rpc2FibGVkKGopKQotCQkJCWNvbnRpbnVlOwotCQkJaWYgKHBhY2thZ2VfaW5kZXggPT0gaSkKLQkJCQlJUlFfREVMVEEocGFja2FnZV9pbmRleCwgaikgPSAwOwotCQkJLyogRGV0ZXJtaW5lIHRoZSB0b3RhbCBjb3VudCBwZXIgcHJvY2Vzc29yIHBlciBJUlEgKi8KLQkJCXZhbHVlX25vdyA9ICh1bnNpZ25lZCBsb25nKSBrc3RhdF9jcHUoaSkuaXJxc1tqXTsKLQotCQkJLyogRGV0ZXJtaW5lIHRoZSBhY3Rpdml0eSBwZXIgcHJvY2Vzc29yIHBlciBJUlEgKi8KLQkJCWRlbHRhID0gdmFsdWVfbm93IC0gTEFTVF9DUFVfSVJRKGksIGopOwotCi0JCQkvKiBVcGRhdGUgbGFzdF9jcHVfaXJxW11bXSBmb3IgdGhlIG5leHQgdGltZSAqLwotCQkJTEFTVF9DUFVfSVJRKGksIGopID0gdmFsdWVfbm93OwotCi0JCQkvKiBJZ25vcmUgSVJRcyB3aG9zZSByYXRlIGlzIGxlc3MgdGhhbiB0aGUgY2xvY2sgKi8KLQkJCWlmIChkZWx0YSA8IHVzZWZ1bF9sb2FkX3RocmVzaG9sZCkKLQkJCQljb250aW51ZTsKLQkJCS8qIHVwZGF0ZSB0aGUgbG9hZCBmb3IgdGhlIHByb2Nlc3NvciBvciBwYWNrYWdlIHRvdGFsICovCi0JCQlJUlFfREVMVEEocGFja2FnZV9pbmRleCwgaikgKz0gZGVsdGE7Ci0KLQkJCS8qIEtlZXAgdHJhY2sgb2YgdGhlIGhpZ2hlciBudW1iZXJlZCBzaWJsaW5nIGFzIHdlbGwgKi8KLQkJCWlmIChpICE9IHBhY2thZ2VfaW5kZXgpCi0JCQkJQ1BVX0lSUShpKSArPSBkZWx0YTsKLQkJCS8qCi0JCQkgKiBXZSBoYXZlIHNpYmxpbmcgQSBhbmQgc2libGluZyBCIGluIHRoZSBwYWNrYWdlCi0JCQkgKgotCQkJICogY3B1X2lycVtBXSA9IGxvYWQgZm9yIGNwdSBBICsgbG9hZCBmb3IgY3B1IEIKLQkJCSAqIGNwdV9pcnFbQl0gPSBsb2FkIGZvciBjcHUgQgotCQkJICovCi0JCQlDUFVfSVJRKHBhY2thZ2VfaW5kZXgpICs9IGRlbHRhOwotCQl9Ci0JfQotCS8qIEZpbmQgdGhlIGxlYXN0IGxvYWRlZCBwcm9jZXNzb3IgcGFja2FnZSAqLwotCWZvcl9lYWNoX29ubGluZV9jcHUoaSkgewotCQlpZiAoaSAhPSBDUFVfVE9fUEFDS0FHRUlOREVYKGkpKQotCQkJY29udGludWU7Ci0JCWlmIChtaW5fY3B1X2lycSA+IENQVV9JUlEoaSkpIHsKLQkJCW1pbl9jcHVfaXJxID0gQ1BVX0lSUShpKTsKLQkJCW1pbl9sb2FkZWQgPSBpOwotCQl9Ci0JfQotCW1heF9jcHVfaXJxID0gVUxPTkdfTUFYOwotCi10cnlhbm90aGVyY3B1OgotCS8qCi0JICogTG9vayBmb3IgaGVhdmllc3QgbG9hZGVkIHByb2Nlc3Nvci4KLQkgKiBXZSBtYXkgY29tZSBiYWNrIHRvIGdldCB0aGUgbmV4dCBoZWF2aWVzdCBsb2FkZWQgcHJvY2Vzc29yLgotCSAqIFNraXAgcHJvY2Vzc29ycyB3aXRoIHRyaXZpYWwgbG9hZHMuCi0JICovCi0JdG1wX2NwdV9pcnEgPSAwOwotCXRtcF9sb2FkZWQgPSAtMTsKLQlmb3JfZWFjaF9vbmxpbmVfY3B1KGkpIHsKLQkJaWYgKGkgIT0gQ1BVX1RPX1BBQ0tBR0VJTkRFWChpKSkKLQkJCWNvbnRpbnVlOwotCQlpZiAobWF4X2NwdV9pcnEgPD0gQ1BVX0lSUShpKSkKLQkJCWNvbnRpbnVlOwotCQlpZiAodG1wX2NwdV9pcnEgPCBDUFVfSVJRKGkpKSB7Ci0JCQl0bXBfY3B1X2lycSA9IENQVV9JUlEoaSk7Ci0JCQl0bXBfbG9hZGVkID0gaTsKLQkJfQotCX0KLQotCWlmICh0bXBfbG9hZGVkID09IC0xKSB7Ci0JIC8qCi0JICAqIEluIHRoZSBjYXNlIG9mIHNtYWxsIG51bWJlciBvZiBoZWF2eSBpbnRlcnJ1cHQgc291cmNlcywKLQkgICogbG9hZGluZyBzb21lIG9mIHRoZSBjcHVzIHRvbyBtdWNoLiBXZSB1c2UgSW5nbydzIG9yaWdpbmFsCi0JICAqIGFwcHJvYWNoIHRvIHJvdGF0ZSB0aGVtIGFyb3VuZC4KLQkgICovCi0JCWlmICghZmlyc3RfYXR0ZW1wdCAmJiBpbWJhbGFuY2UgPj0gdXNlZnVsX2xvYWRfdGhyZXNob2xkKSB7Ci0JCQlyb3RhdGVfaXJxc19hbW9uZ19jcHVzKHVzZWZ1bF9sb2FkX3RocmVzaG9sZCk7Ci0JCQlyZXR1cm47Ci0JCX0KLQkJZ290byBub3Rfd29ydGhfdGhlX2VmZm9ydDsKLQl9Ci0KLQlmaXJzdF9hdHRlbXB0ID0gMDsJCS8qIGhlYXZpZXN0IHNlYXJjaCAqLwotCW1heF9jcHVfaXJxID0gdG1wX2NwdV9pcnE7CS8qIGxvYWQgKi8KLQltYXhfbG9hZGVkID0gdG1wX2xvYWRlZDsJLyogcHJvY2Vzc29yICovCi0JaW1iYWxhbmNlID0gKG1heF9jcHVfaXJxIC0gbWluX2NwdV9pcnEpIC8gMjsKLQotCS8qCi0JICogaWYgaW1iYWxhbmNlIGlzIGxlc3MgdGhhbiBhcHByb3ggMTAlIG9mIG1heCBsb2FkLCB0aGVuCi0JICogb2JzZXJ2ZSBkaW1pbmlzaGluZyByZXR1cm5zIGFjdGlvbi4gLSBxdWl0Ci0JICovCi0JaWYgKGltYmFsYW5jZSA8IChtYXhfY3B1X2lycSA+PiAzKSkKLQkJZ290byBub3Rfd29ydGhfdGhlX2VmZm9ydDsKLQotdHJ5YW5vdGhlcmlycToKLQkvKiBpZiB3ZSBzZWxlY3QgYW4gSVJRIHRvIG1vdmUgdGhhdCBjYW4ndCBnbyB3aGVyZSB3ZSB3YW50LCB0aGVuCi0JICogc2VlIGlmIHRoZXJlIGlzIGFub3RoZXIgb25lIHRvIHRyeS4KLQkgKi8KLQltb3ZlX3RoaXNfbG9hZCA9IDA7Ci0Jc2VsZWN0ZWRfaXJxID0gLTE7Ci0JZm9yIChqID0gMDsgaiA8IE5SX0lSUVM7IGorKykgewotCQkvKiBJcyB0aGlzIGFuIGFjdGl2ZSBJUlE/ICovCi0JCWlmICghaXJxX2Rlc2Nbal0uYWN0aW9uKQotCQkJY29udGludWU7Ci0JCWlmIChpbWJhbGFuY2UgPD0gSVJRX0RFTFRBKG1heF9sb2FkZWQsIGopKQotCQkJY29udGludWU7Ci0JCS8qIFRyeSB0byBmaW5kIHRoZSBJUlEgdGhhdCBpcyBjbG9zZXN0IHRvIHRoZSBpbWJhbGFuY2UKLQkJICogd2l0aG91dCBnb2luZyBvdmVyLgotCQkgKi8KLQkJaWYgKG1vdmVfdGhpc19sb2FkIDwgSVJRX0RFTFRBKG1heF9sb2FkZWQsIGopKSB7Ci0JCQltb3ZlX3RoaXNfbG9hZCA9IElSUV9ERUxUQShtYXhfbG9hZGVkLCBqKTsKLQkJCXNlbGVjdGVkX2lycSA9IGo7Ci0JCX0KLQl9Ci0JaWYgKHNlbGVjdGVkX2lycSA9PSAtMSkKLQkJZ290byB0cnlhbm90aGVyY3B1OwotCi0JaW1iYWxhbmNlID0gbW92ZV90aGlzX2xvYWQ7Ci0KLQkvKiBGb3IgcGh5c2ljYWxfYmFsYW5jZSBjYXNlLCB3ZSBhY2N1bXVsYXRlZCBib3RoIGxvYWQKLQkgKiB2YWx1ZXMgaW4gdGhlIG9uZSBvZiB0aGUgc2libGluZ3MgY3B1X2lycVtdLAotCSAqIHRvIHVzZSB0aGUgc2FtZSBjb2RlIGZvciBwaHlzaWNhbCBhbmQgbG9naWNhbCBwcm9jZXNzb3JzCi0JICogYXMgbXVjaCBhcyBwb3NzaWJsZS4KLQkgKgotCSAqIE5PVEU6IHRoZSBjcHVfaXJxW10gYXJyYXkgaG9sZHMgdGhlIHN1bSBvZiB0aGUgbG9hZCBmb3IKLQkgKiBzaWJsaW5nIEEgYW5kIHNpYmxpbmcgQiBpbiB0aGUgc2xvdCBmb3IgdGhlIGxvd2VzdCBudW1iZXJlZAotCSAqIHNpYmxpbmcgKEEpLCBfQU5EXyB0aGUgbG9hZCBmb3Igc2libGluZyBCIGluIHRoZSBzbG90IGZvcgotCSAqIHRoZSBoaWdoZXIgbnVtYmVyZWQgc2libGluZy4KLQkgKgotCSAqIFdlIHNlZWsgdGhlIGxlYXN0IGxvYWRlZCBzaWJsaW5nIGJ5IG1ha2luZyB0aGUgY29tcGFyaXNvbgotCSAqIChBK0IpLzIgdnMgQgotCSAqLwotCWxvYWQgPSBDUFVfSVJRKG1pbl9sb2FkZWQpID4+IDE7Ci0JZm9yX2VhY2hfY3B1X21hc2soaiwgcGVyX2NwdShjcHVfc2libGluZ19tYXAsIG1pbl9sb2FkZWQpKSB7Ci0JCWlmIChsb2FkID4gQ1BVX0lSUShqKSkgewotCQkJLyogVGhpcyB3b24ndCBjaGFuZ2UgY3B1X3NpYmxpbmdfbWFwW21pbl9sb2FkZWRdICovCi0JCQlsb2FkID0gQ1BVX0lSUShqKTsKLQkJCW1pbl9sb2FkZWQgPSBqOwotCQl9Ci0JfQotCi0JY3B1c19hbmQoYWxsb3dlZF9tYXNrLAotCQljcHVfb25saW5lX21hcCwKLQkJYmFsYW5jZV9pcnFfYWZmaW5pdHlbc2VsZWN0ZWRfaXJxXSk7Ci0JdGFyZ2V0X2NwdV9tYXNrID0gY3B1bWFza19vZl9jcHUobWluX2xvYWRlZCk7Ci0JY3B1c19hbmQodG1wLCB0YXJnZXRfY3B1X21hc2ssIGFsbG93ZWRfbWFzayk7Ci0KLQlpZiAoIWNwdXNfZW1wdHkodG1wKSkgewotCQkvKiBtYXJrIGZvciBjaGFuZ2UgZGVzdGluYXRpb24gKi8KLQkJc2V0X3BlbmRpbmdfaXJxKHNlbGVjdGVkX2lycSwgY3B1bWFza19vZl9jcHUobWluX2xvYWRlZCkpOwotCi0JCS8qIFNpbmNlIHdlIG1hZGUgYSBjaGFuZ2UsIGNvbWUgYmFjayBzb29uZXIgdG8KLQkJICogY2hlY2sgZm9yIG1vcmUgdmFyaWF0aW9uLgotCQkgKi8KLQkJYmFsYW5jZWRfaXJxX2ludGVydmFsID0gbWF4KChsb25nKU1JTl9CQUxBTkNFRF9JUlFfSU5URVJWQUwsCi0JCQliYWxhbmNlZF9pcnFfaW50ZXJ2YWwgLSBCQUxBTkNFRF9JUlFfTEVTU19ERUxUQSk7Ci0JCXJldHVybjsKLQl9Ci0JZ290byB0cnlhbm90aGVyaXJxOwotCi1ub3Rfd29ydGhfdGhlX2VmZm9ydDoKLQkvKgotCSAqIGlmIHdlIGRpZCBub3QgZmluZCBhbiBJUlEgdG8gbW92ZSwgdGhlbiBhZGp1c3QgdGhlIHRpbWUgaW50ZXJ2YWwKLQkgKiB1cHdhcmQKLQkgKi8KLQliYWxhbmNlZF9pcnFfaW50ZXJ2YWwgPSBtaW4oKGxvbmcpTUFYX0JBTEFOQ0VEX0lSUV9JTlRFUlZBTCwKLQkJYmFsYW5jZWRfaXJxX2ludGVydmFsICsgQkFMQU5DRURfSVJRX01PUkVfREVMVEEpOwotCXJldHVybjsKLX0KLQotc3RhdGljIGludCBiYWxhbmNlZF9pcnEodm9pZCAqdW51c2VkKQotewotCWludCBpOwotCXVuc2lnbmVkIGxvbmcgcHJldl9iYWxhbmNlX3RpbWUgPSBqaWZmaWVzOwotCWxvbmcgdGltZV9yZW1haW5pbmcgPSBiYWxhbmNlZF9pcnFfaW50ZXJ2YWw7Ci0KLQkvKiBwdXNoIGV2ZXJ5dGhpbmcgdG8gQ1BVIDAgdG8gZ2l2ZSB1cyBhIHN0YXJ0aW5nIHBvaW50LiAgKi8KLQlmb3IgKGkgPSAwIDsgaSA8IE5SX0lSUVMgOyBpKyspIHsKLQkJaXJxX2Rlc2NbaV0ucGVuZGluZ19tYXNrID0gY3B1bWFza19vZl9jcHUoMCk7Ci0JCXNldF9wZW5kaW5nX2lycShpLCBjcHVtYXNrX29mX2NwdSgwKSk7Ci0JfQotCi0Jc2V0X2ZyZWV6YWJsZSgpOwotCWZvciAoIDsgOyApIHsKLQkJdGltZV9yZW1haW5pbmcgPSBzY2hlZHVsZV90aW1lb3V0X2ludGVycnVwdGlibGUodGltZV9yZW1haW5pbmcpOwotCQl0cnlfdG9fZnJlZXplKCk7Ci0JCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsCi0JCQkJcHJldl9iYWxhbmNlX3RpbWUrYmFsYW5jZWRfaXJxX2ludGVydmFsKSkgewotCQkJcHJlZW1wdF9kaXNhYmxlKCk7Ci0JCQlkb19pcnFfYmFsYW5jZSgpOwotCQkJcHJldl9iYWxhbmNlX3RpbWUgPSBqaWZmaWVzOwotCQkJdGltZV9yZW1haW5pbmcgPSBiYWxhbmNlZF9pcnFfaW50ZXJ2YWw7Ci0JCQlwcmVlbXB0X2VuYWJsZSgpOwotCQl9Ci0JfQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IF9faW5pdCBiYWxhbmNlZF9pcnFfaW5pdCh2b2lkKQotewotCWludCBpOwotCXN0cnVjdCBjcHVpbmZvX3g4NiAqYzsKLQljcHVtYXNrX3QgdG1wOwotCi0JY3B1c19zaGlmdF9yaWdodCh0bXAsIGNwdV9vbmxpbmVfbWFwLCAyKTsKLQljID0gJmJvb3RfY3B1X2RhdGE7Ci0JLyogV2hlbiBub3Qgb3ZlcndyaXR0ZW4gYnkgdGhlIGNvbW1hbmQgbGluZSBhc2sgc3ViYXJjaGl0ZWN0dXJlLiAqLwotCWlmIChpcnFiYWxhbmNlX2Rpc2FibGVkID09IElSUUJBTEFOQ0VfQ0hFQ0tfQVJDSCkKLQkJaXJxYmFsYW5jZV9kaXNhYmxlZCA9IE5PX0JBTEFOQ0VfSVJROwotCWlmIChpcnFiYWxhbmNlX2Rpc2FibGVkKQotCQlyZXR1cm4gMDsKLQotCSAvKiBkaXNhYmxlIGlycWJhbGFuY2UgY29tcGxldGVseSBpZiB0aGVyZSBpcyBvbmx5IG9uZSBwcm9jZXNzb3Igb25saW5lICovCi0JaWYgKG51bV9vbmxpbmVfY3B1cygpIDwgMikgewotCQlpcnFiYWxhbmNlX2Rpc2FibGVkID0gMTsKLQkJcmV0dXJuIDA7Ci0JfQotCS8qCi0JICogRW5hYmxlIHBoeXNpY2FsIGJhbGFuY2Ugb25seSBpZiBtb3JlIHRoYW4gMSBwaHlzaWNhbCBwcm9jZXNzb3IKLQkgKiBpcyBwcmVzZW50Ci0JICovCi0JaWYgKHNtcF9udW1fc2libGluZ3MgPiAxICYmICFjcHVzX2VtcHR5KHRtcCkpCi0JCXBoeXNpY2FsX2JhbGFuY2UgPSAxOwotCi0JZm9yX2VhY2hfb25saW5lX2NwdShpKSB7Ci0JCWlycV9jcHVfZGF0YVtpXS5pcnFfZGVsdGEgPSBremFsbG9jKHNpemVvZih1bnNpZ25lZCBsb25nKSAqIE5SX0lSUVMsIEdGUF9LRVJORUwpOwotCQlpcnFfY3B1X2RhdGFbaV0ubGFzdF9pcnEgPSBremFsbG9jKHNpemVvZih1bnNpZ25lZCBsb25nKSAqIE5SX0lSUVMsIEdGUF9LRVJORUwpOwotCQlpZiAoaXJxX2NwdV9kYXRhW2ldLmlycV9kZWx0YSA9PSBOVUxMIHx8IGlycV9jcHVfZGF0YVtpXS5sYXN0X2lycSA9PSBOVUxMKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgImJhbGFuY2VkX2lycV9pbml0OiBvdXQgb2YgbWVtb3J5Iik7Ci0JCQlnb3RvIGZhaWxlZDsKLQkJfQotCX0KLQotCXByaW50ayhLRVJOX0lORk8gIlN0YXJ0aW5nIGJhbGFuY2VkX2lycVxuIik7Ci0JaWYgKCFJU19FUlIoa3RocmVhZF9ydW4oYmFsYW5jZWRfaXJxLCBOVUxMLCAia2lycWQiKSkpCi0JCXJldHVybiAwOwotCXByaW50ayhLRVJOX0VSUiAiYmFsYW5jZWRfaXJxX2luaXQ6IGZhaWxlZCB0byBzcGF3biBiYWxhbmNlZF9pcnEiKTsKLWZhaWxlZDoKLQlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoaSkgewotCQlrZnJlZShpcnFfY3B1X2RhdGFbaV0uaXJxX2RlbHRhKTsKLQkJaXJxX2NwdV9kYXRhW2ldLmlycV9kZWx0YSA9IE5VTEw7Ci0JCWtmcmVlKGlycV9jcHVfZGF0YVtpXS5sYXN0X2lycSk7Ci0JCWlycV9jcHVfZGF0YVtpXS5sYXN0X2lycSA9IE5VTEw7Ci0JfQotCXJldHVybiAwOwotfQotCi1pbnQgX19kZXZpbml0IGlycWJhbGFuY2VfZGlzYWJsZShjaGFyICpzdHIpCi17Ci0JaXJxYmFsYW5jZV9kaXNhYmxlZCA9IDE7Ci0JcmV0dXJuIDE7Ci19Ci0KLV9fc2V0dXAoIm5vaXJxYmFsYW5jZSIsIGlycWJhbGFuY2VfZGlzYWJsZSk7Ci0KLWxhdGVfaW5pdGNhbGwoYmFsYW5jZWRfaXJxX2luaXQpOwotI2VuZGlmIC8qIENPTkZJR19JUlFCQUxBTkNFICovCi0jZW5kaWYgLyogQ09ORklHX1NNUCAqLwotCi0jaWZuZGVmIENPTkZJR19TTVAKLXZvaWQgc2VuZF9JUElfc2VsZihpbnQgdmVjdG9yKQotewotCXVuc2lnbmVkIGludCBjZmc7Ci0KLQkvKgotCSAqIFdhaXQgZm9yIGlkbGUuCi0JICovCi0JYXBpY193YWl0X2ljcl9pZGxlKCk7Ci0JY2ZnID0gQVBJQ19ETV9GSVhFRCB8IEFQSUNfREVTVF9TRUxGIHwgdmVjdG9yIHwgQVBJQ19ERVNUX0xPR0lDQUw7Ci0JLyoKLQkgKiBTZW5kIHRoZSBJUEkuIFRoZSB3cml0ZSB0byBBUElDX0lDUiBmaXJlcyB0aGlzIG9mZi4KLQkgKi8KLQlhcGljX3dyaXRlKEFQSUNfSUNSLCBjZmcpOwotfQotI2VuZGlmIC8qICFDT05GSUdfU01QICovCi0KLQotLyoKLSAqIHN1cHBvcnQgZm9yIGJyb2tlbiBNUCBCSU9TcywgZW5hYmxlcyBoYW5kLXJlZGlyZWN0aW9uIG9mIFBJUlEwLTcgdG8KLSAqIHNwZWNpZmljIENQVS1zaWRlIElSUXMuCi0gKi8KLQotI2RlZmluZSBNQVhfUElSUVMgOAotc3RhdGljIGludCBwaXJxX2VudHJpZXMgW01BWF9QSVJRU107Ci1zdGF0aWMgaW50IHBpcnFzX2VuYWJsZWQ7Ci1pbnQgc2tpcF9pb2FwaWNfc2V0dXA7Ci0KLXN0YXRpYyBpbnQgX19pbml0IGlvYXBpY19waXJxX3NldHVwKGNoYXIgKnN0cikKLXsKLQlpbnQgaSwgbWF4OwotCWludCBpbnRzW01BWF9QSVJRUysxXTsKLQotCWdldF9vcHRpb25zKHN0ciwgQVJSQVlfU0laRShpbnRzKSwgaW50cyk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgTUFYX1BJUlFTOyBpKyspCi0JCXBpcnFfZW50cmllc1tpXSA9IC0xOwotCi0JcGlycXNfZW5hYmxlZCA9IDE7Ci0JYXBpY19wcmludGsoQVBJQ19WRVJCT1NFLCBLRVJOX0lORk8KLQkJCSJQSVJRIHJlZGlyZWN0aW9uLCB3b3JraW5nIGFyb3VuZCBicm9rZW4gTVAtQklPUy5cbiIpOwotCW1heCA9IE1BWF9QSVJRUzsKLQlpZiAoaW50c1swXSA8IE1BWF9QSVJRUykKLQkJbWF4ID0gaW50c1swXTsKLQotCWZvciAoaSA9IDA7IGkgPCBtYXg7IGkrKykgewotCQlhcGljX3ByaW50ayhBUElDX1ZFUkJPU0UsIEtFUk5fREVCVUcKLQkJCQkiLi4uIFBJUlElZCAtPiBJUlEgJWRcbiIsIGksIGludHNbaSsxXSk7Ci0JCS8qCi0JCSAqIFBJUlFzIGFyZSBtYXBwZWQgdXBzaWRlIGRvd24sIHVzdWFsbHkuCi0JCSAqLwotCQlwaXJxX2VudHJpZXNbTUFYX1BJUlFTLWktMV0gPSBpbnRzW2krMV07Ci0JfQotCXJldHVybiAxOwotfQotCi1fX3NldHVwKCJwaXJxPSIsIGlvYXBpY19waXJxX3NldHVwKTsKLQotLyoKLSAqIEZpbmQgdGhlIElSUSBlbnRyeSBudW1iZXIgb2YgYSBjZXJ0YWluIHBpbi4KLSAqLwotc3RhdGljIGludCBmaW5kX2lycV9lbnRyeShpbnQgYXBpYywgaW50IHBpbiwgaW50IHR5cGUpCi17Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgbXBfaXJxX2VudHJpZXM7IGkrKykKLQkJaWYgKG1wX2lycXNbaV0ubXBfaXJxdHlwZSA9PSB0eXBlICYmCi0JCSAgICAobXBfaXJxc1tpXS5tcF9kc3RhcGljID09IG1wX2lvYXBpY3NbYXBpY10ubXBfYXBpY2lkIHx8Ci0JCSAgICAgbXBfaXJxc1tpXS5tcF9kc3RhcGljID09IE1QX0FQSUNfQUxMKSAmJgotCQkgICAgbXBfaXJxc1tpXS5tcF9kc3RpcnEgPT0gcGluKQotCQkJcmV0dXJuIGk7Ci0KLQlyZXR1cm4gLTE7Ci19Ci0KLS8qCi0gKiBGaW5kIHRoZSBwaW4gdG8gd2hpY2ggSVJRW2lycV0gKElTQSkgaXMgY29ubmVjdGVkCi0gKi8KLXN0YXRpYyBpbnQgX19pbml0IGZpbmRfaXNhX2lycV9waW4oaW50IGlycSwgaW50IHR5cGUpCi17Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgbXBfaXJxX2VudHJpZXM7IGkrKykgewotCQlpbnQgbGJ1cyA9IG1wX2lycXNbaV0ubXBfc3JjYnVzOwotCi0JCWlmICh0ZXN0X2JpdChsYnVzLCBtcF9idXNfbm90X3BjaSkgJiYKLQkJICAgIChtcF9pcnFzW2ldLm1wX2lycXR5cGUgPT0gdHlwZSkgJiYKLQkJICAgIChtcF9pcnFzW2ldLm1wX3NyY2J1c2lycSA9PSBpcnEpKQotCi0JCQlyZXR1cm4gbXBfaXJxc1tpXS5tcF9kc3RpcnE7Ci0JfQotCXJldHVybiAtMTsKLX0KLQotc3RhdGljIGludCBfX2luaXQgZmluZF9pc2FfaXJxX2FwaWMoaW50IGlycSwgaW50IHR5cGUpCi17Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgbXBfaXJxX2VudHJpZXM7IGkrKykgewotCQlpbnQgbGJ1cyA9IG1wX2lycXNbaV0ubXBfc3JjYnVzOwotCi0JCWlmICh0ZXN0X2JpdChsYnVzLCBtcF9idXNfbm90X3BjaSkgJiYKLQkJICAgIChtcF9pcnFzW2ldLm1wX2lycXR5cGUgPT0gdHlwZSkgJiYKLQkJICAgIChtcF9pcnFzW2ldLm1wX3NyY2J1c2lycSA9PSBpcnEpKQotCQkJYnJlYWs7Ci0JfQotCWlmIChpIDwgbXBfaXJxX2VudHJpZXMpIHsKLQkJaW50IGFwaWM7Ci0JCWZvciAoYXBpYyA9IDA7IGFwaWMgPCBucl9pb2FwaWNzOyBhcGljKyspIHsKLQkJCWlmIChtcF9pb2FwaWNzW2FwaWNdLm1wX2FwaWNpZCA9PSBtcF9pcnFzW2ldLm1wX2RzdGFwaWMpCi0JCQkJcmV0dXJuIGFwaWM7Ci0JCX0KLQl9Ci0KLQlyZXR1cm4gLTE7Ci19Ci0KLS8qCi0gKiBGaW5kIGEgc3BlY2lmaWMgUENJIElSUSBlbnRyeS4KLSAqIE5vdCBhbiBfX2luaXQsIHBvc3NpYmx5IG5lZWRlZCBieSBtb2R1bGVzCi0gKi8KLXN0YXRpYyBpbnQgcGluXzJfaXJxKGludCBpZHgsIGludCBhcGljLCBpbnQgcGluKTsKLQotaW50IElPX0FQSUNfZ2V0X1BDSV9pcnFfdmVjdG9yKGludCBidXMsIGludCBzbG90LCBpbnQgcGluKQotewotCWludCBhcGljLCBpLCBiZXN0X2d1ZXNzID0gLTE7Ci0KLQlhcGljX3ByaW50ayhBUElDX0RFQlVHLCAicXVlcnlpbmcgUENJIC0+IElSUSBtYXBwaW5nIGJ1czolZCwgIgotCQkic2xvdDolZCwgcGluOiVkLlxuIiwgYnVzLCBzbG90LCBwaW4pOwotCWlmICh0ZXN0X2JpdChidXMsIG1wX2J1c19ub3RfcGNpKSkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJQQ0kgQklPUyBwYXNzZWQgbm9uZXhpc3RlbnQgUENJIGJ1cyAlZCFcbiIsIGJ1cyk7Ci0JCXJldHVybiAtMTsKLQl9Ci0JZm9yIChpID0gMDsgaSA8IG1wX2lycV9lbnRyaWVzOyBpKyspIHsKLQkJaW50IGxidXMgPSBtcF9pcnFzW2ldLm1wX3NyY2J1czsKLQotCQlmb3IgKGFwaWMgPSAwOyBhcGljIDwgbnJfaW9hcGljczsgYXBpYysrKQotCQkJaWYgKG1wX2lvYXBpY3NbYXBpY10ubXBfYXBpY2lkID09IG1wX2lycXNbaV0ubXBfZHN0YXBpYyB8fAotCQkJICAgIG1wX2lycXNbaV0ubXBfZHN0YXBpYyA9PSBNUF9BUElDX0FMTCkKLQkJCQlicmVhazsKLQotCQlpZiAoIXRlc3RfYml0KGxidXMsIG1wX2J1c19ub3RfcGNpKSAmJgotCQkgICAgIW1wX2lycXNbaV0ubXBfaXJxdHlwZSAmJgotCQkgICAgKGJ1cyA9PSBsYnVzKSAmJgotCQkgICAgKHNsb3QgPT0gKChtcF9pcnFzW2ldLm1wX3NyY2J1c2lycSA+PiAyKSAmIDB4MWYpKSkgewotCQkJaW50IGlycSA9IHBpbl8yX2lycShpLCBhcGljLCBtcF9pcnFzW2ldLm1wX2RzdGlycSk7Ci0KLQkJCWlmICghKGFwaWMgfHwgSU9fQVBJQ19JUlEoaXJxKSkpCi0JCQkJY29udGludWU7Ci0KLQkJCWlmIChwaW4gPT0gKG1wX2lycXNbaV0ubXBfc3JjYnVzaXJxICYgMykpCi0JCQkJcmV0dXJuIGlycTsKLQkJCS8qCi0JCQkgKiBVc2UgdGhlIGZpcnN0IGFsbC1idXQtcGluIG1hdGNoaW5nIGVudHJ5IGFzIGEKLQkJCSAqIGJlc3QtZ3Vlc3MgZnV6enkgcmVzdWx0IGZvciBicm9rZW4gbXB0YWJsZXMuCi0JCQkgKi8KLQkJCWlmIChiZXN0X2d1ZXNzIDwgMCkKLQkJCQliZXN0X2d1ZXNzID0gaXJxOwotCQl9Ci0JfQotCXJldHVybiBiZXN0X2d1ZXNzOwotfQotRVhQT1JUX1NZTUJPTChJT19BUElDX2dldF9QQ0lfaXJxX3ZlY3Rvcik7Ci0KLS8qCi0gKiBUaGlzIGZ1bmN0aW9uIGN1cnJlbnRseSBpcyBvbmx5IGEgaGVscGVyIGZvciB0aGUgaTM4NiBzbXAgYm9vdCBwcm9jZXNzIHdoZXJlCi0gKiB3ZSBuZWVkIHRvIHJlcHJvZ3JhbSB0aGUgaW9yZWR0YmxzIHRvIGNhdGVyIGZvciB0aGUgY3B1cyB3aGljaCBoYXZlIGNvbWUgb25saW5lCi0gKiBzbyBtYXNrIGluIGFsbCBjYXNlcyBzaG91bGQgc2ltcGx5IGJlIFRBUkdFVF9DUFVTCi0gKi8KLSNpZmRlZiBDT05GSUdfU01QCi12b2lkIF9faW5pdCBzZXR1cF9pb2FwaWNfZGVzdCh2b2lkKQotewotCWludCBwaW4sIGlvYXBpYywgaXJxLCBpcnFfZW50cnk7Ci0KLQlpZiAoc2tpcF9pb2FwaWNfc2V0dXAgPT0gMSkKLQkJcmV0dXJuOwotCi0JZm9yIChpb2FwaWMgPSAwOyBpb2FwaWMgPCBucl9pb2FwaWNzOyBpb2FwaWMrKykgewotCQlmb3IgKHBpbiA9IDA7IHBpbiA8IG5yX2lvYXBpY19yZWdpc3RlcnNbaW9hcGljXTsgcGluKyspIHsKLQkJCWlycV9lbnRyeSA9IGZpbmRfaXJxX2VudHJ5KGlvYXBpYywgcGluLCBtcF9JTlQpOwotCQkJaWYgKGlycV9lbnRyeSA9PSAtMSkKLQkJCQljb250aW51ZTsKLQkJCWlycSA9IHBpbl8yX2lycShpcnFfZW50cnksIGlvYXBpYywgcGluKTsKLQkJCXNldF9pb2FwaWNfYWZmaW5pdHlfaXJxKGlycSwgVEFSR0VUX0NQVVMpOwotCQl9Ci0KLQl9Ci19Ci0jZW5kaWYKLQotI2lmIGRlZmluZWQoQ09ORklHX0VJU0EpIHx8IGRlZmluZWQoQ09ORklHX01DQSkKLS8qCi0gKiBFSVNBIEVkZ2UvTGV2ZWwgY29udHJvbCByZWdpc3RlciwgRUxDUgotICovCi1zdGF0aWMgaW50IEVJU0FfRUxDUih1bnNpZ25lZCBpbnQgaXJxKQotewotCWlmIChpcnEgPCAxNikgewotCQl1bnNpZ25lZCBpbnQgcG9ydCA9IDB4NGQwICsgKGlycSA+PiAzKTsKLQkJcmV0dXJuIChpbmIocG9ydCkgPj4gKGlycSAmIDcpKSAmIDE7Ci0JfQotCWFwaWNfcHJpbnRrKEFQSUNfVkVSQk9TRSwgS0VSTl9JTkZPCi0JCQkiQnJva2VuIE1QdGFibGUgcmVwb3J0cyBJU0EgaXJxICVkXG4iLCBpcnEpOwotCXJldHVybiAwOwotfQotI2VuZGlmCi0KLS8qIElTQSBpbnRlcnJ1cHRzIGFyZSBhbHdheXMgcG9sYXJpdHkgemVybyBlZGdlIHRyaWdnZXJlZCwKLSAqIHdoZW4gbGlzdGVkIGFzIGNvbmZvcm1pbmcgaW4gdGhlIE1QIHRhYmxlLiAqLwotCi0jZGVmaW5lIGRlZmF1bHRfSVNBX3RyaWdnZXIoaWR4KQkoMCkKLSNkZWZpbmUgZGVmYXVsdF9JU0FfcG9sYXJpdHkoaWR4KQkoMCkKLQotLyogRUlTQSBpbnRlcnJ1cHRzIGFyZSBhbHdheXMgcG9sYXJpdHkgemVybyBhbmQgY2FuIGJlIGVkZ2Ugb3IgbGV2ZWwKLSAqIHRyaWdnZXIgZGVwZW5kaW5nIG9uIHRoZSBFTENSIHZhbHVlLiAgSWYgYW4gaW50ZXJydXB0IGlzIGxpc3RlZCBhcwotICogRUlTQSBjb25mb3JtaW5nIGluIHRoZSBNUCB0YWJsZSwgdGhhdCBtZWFucyBpdHMgdHJpZ2dlciB0eXBlIG11c3QKLSAqIGJlIHJlYWQgaW4gZnJvbSB0aGUgRUxDUiAqLwotCi0jZGVmaW5lIGRlZmF1bHRfRUlTQV90cmlnZ2VyKGlkeCkJKEVJU0FfRUxDUihtcF9pcnFzW2lkeF0ubXBfc3JjYnVzaXJxKSkKLSNkZWZpbmUgZGVmYXVsdF9FSVNBX3BvbGFyaXR5KGlkeCkJZGVmYXVsdF9JU0FfcG9sYXJpdHkoaWR4KQotCi0vKiBQQ0kgaW50ZXJydXB0cyBhcmUgYWx3YXlzIHBvbGFyaXR5IG9uZSBsZXZlbCB0cmlnZ2VyZWQsCi0gKiB3aGVuIGxpc3RlZCBhcyBjb25mb3JtaW5nIGluIHRoZSBNUCB0YWJsZS4gKi8KLQotI2RlZmluZSBkZWZhdWx0X1BDSV90cmlnZ2VyKGlkeCkJKDEpCi0jZGVmaW5lIGRlZmF1bHRfUENJX3BvbGFyaXR5KGlkeCkJKDEpCi0KLS8qIE1DQSBpbnRlcnJ1cHRzIGFyZSBhbHdheXMgcG9sYXJpdHkgemVybyBsZXZlbCB0cmlnZ2VyZWQsCi0gKiB3aGVuIGxpc3RlZCBhcyBjb25mb3JtaW5nIGluIHRoZSBNUCB0YWJsZS4gKi8KLQotI2RlZmluZSBkZWZhdWx0X01DQV90cmlnZ2VyKGlkeCkJKDEpCi0jZGVmaW5lIGRlZmF1bHRfTUNBX3BvbGFyaXR5KGlkeCkJZGVmYXVsdF9JU0FfcG9sYXJpdHkoaWR4KQotCi1zdGF0aWMgaW50IE1QQklPU19wb2xhcml0eShpbnQgaWR4KQotewotCWludCBidXMgPSBtcF9pcnFzW2lkeF0ubXBfc3JjYnVzOwotCWludCBwb2xhcml0eTsKLQotCS8qCi0JICogRGV0ZXJtaW5lIElSUSBsaW5lIHBvbGFyaXR5IChoaWdoIGFjdGl2ZSBvciBsb3cgYWN0aXZlKToKLQkgKi8KLQlzd2l0Y2ggKG1wX2lycXNbaWR4XS5tcF9pcnFmbGFnICYgMykgewotCWNhc2UgMDogLyogY29uZm9ybXMsIGllLiBidXMtdHlwZSBkZXBlbmRlbnQgcG9sYXJpdHkgKi8KLQl7Ci0JCXBvbGFyaXR5ID0gdGVzdF9iaXQoYnVzLCBtcF9idXNfbm90X3BjaSk/Ci0JCQlkZWZhdWx0X0lTQV9wb2xhcml0eShpZHgpOgotCQkJZGVmYXVsdF9QQ0lfcG9sYXJpdHkoaWR4KTsKLQkJYnJlYWs7Ci0JfQotCWNhc2UgMTogLyogaGlnaCBhY3RpdmUgKi8KLQl7Ci0JCXBvbGFyaXR5ID0gMDsKLQkJYnJlYWs7Ci0JfQotCWNhc2UgMjogLyogcmVzZXJ2ZWQgKi8KLQl7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgImJyb2tlbiBCSU9TISFcbiIpOwotCQlwb2xhcml0eSA9IDE7Ci0JCWJyZWFrOwotCX0KLQljYXNlIDM6IC8qIGxvdyBhY3RpdmUgKi8KLQl7Ci0JCXBvbGFyaXR5ID0gMTsKLQkJYnJlYWs7Ci0JfQotCWRlZmF1bHQ6IC8qIGludmFsaWQgKi8KLQl7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgImJyb2tlbiBCSU9TISFcbiIpOwotCQlwb2xhcml0eSA9IDE7Ci0JCWJyZWFrOwotCX0KLQl9Ci0JcmV0dXJuIHBvbGFyaXR5OwotfQotCi1zdGF0aWMgaW50IE1QQklPU190cmlnZ2VyKGludCBpZHgpCi17Ci0JaW50IGJ1cyA9IG1wX2lycXNbaWR4XS5tcF9zcmNidXM7Ci0JaW50IHRyaWdnZXI7Ci0KLQkvKgotCSAqIERldGVybWluZSBJUlEgdHJpZ2dlciBtb2RlIChlZGdlIG9yIGxldmVsIHNlbnNpdGl2ZSk6Ci0JICovCi0Jc3dpdGNoICgobXBfaXJxc1tpZHhdLm1wX2lycWZsYWc+PjIpICYgMykgewotCWNhc2UgMDogLyogY29uZm9ybXMsIGllLiBidXMtdHlwZSBkZXBlbmRlbnQgKi8KLQl7Ci0JCXRyaWdnZXIgPSB0ZXN0X2JpdChidXMsIG1wX2J1c19ub3RfcGNpKT8KLQkJCQlkZWZhdWx0X0lTQV90cmlnZ2VyKGlkeCk6Ci0JCQkJZGVmYXVsdF9QQ0lfdHJpZ2dlcihpZHgpOwotI2lmIGRlZmluZWQoQ09ORklHX0VJU0EpIHx8IGRlZmluZWQoQ09ORklHX01DQSkKLQkJc3dpdGNoIChtcF9idXNfaWRfdG9fdHlwZVtidXNdKSB7Ci0JCWNhc2UgTVBfQlVTX0lTQTogLyogSVNBIHBpbiAqLwotCQl7Ci0JCQkvKiBzZXQgYmVmb3JlIHRoZSBzd2l0Y2ggKi8KLQkJCWJyZWFrOwotCQl9Ci0JCWNhc2UgTVBfQlVTX0VJU0E6IC8qIEVJU0EgcGluICovCi0JCXsKLQkJCXRyaWdnZXIgPSBkZWZhdWx0X0VJU0FfdHJpZ2dlcihpZHgpOwotCQkJYnJlYWs7Ci0JCX0KLQkJY2FzZSBNUF9CVVNfUENJOiAvKiBQQ0kgcGluICovCi0JCXsKLQkJCS8qIHNldCBiZWZvcmUgdGhlIHN3aXRjaCAqLwotCQkJYnJlYWs7Ci0JCX0KLQkJY2FzZSBNUF9CVVNfTUNBOiAvKiBNQ0EgcGluICovCi0JCXsKLQkJCXRyaWdnZXIgPSBkZWZhdWx0X01DQV90cmlnZ2VyKGlkeCk7Ci0JCQlicmVhazsKLQkJfQotCQlkZWZhdWx0OgotCQl7Ci0JCQlwcmludGsoS0VSTl9XQVJOSU5HICJicm9rZW4gQklPUyEhXG4iKTsKLQkJCXRyaWdnZXIgPSAxOwotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0jZW5kaWYKLQkJYnJlYWs7Ci0JfQotCWNhc2UgMTogLyogZWRnZSAqLwotCXsKLQkJdHJpZ2dlciA9IDA7Ci0JCWJyZWFrOwotCX0KLQljYXNlIDI6IC8qIHJlc2VydmVkICovCi0JewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJicm9rZW4gQklPUyEhXG4iKTsKLQkJdHJpZ2dlciA9IDE7Ci0JCWJyZWFrOwotCX0KLQljYXNlIDM6IC8qIGxldmVsICovCi0JewotCQl0cmlnZ2VyID0gMTsKLQkJYnJlYWs7Ci0JfQotCWRlZmF1bHQ6IC8qIGludmFsaWQgKi8KLQl7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgImJyb2tlbiBCSU9TISFcbiIpOwotCQl0cmlnZ2VyID0gMDsKLQkJYnJlYWs7Ci0JfQotCX0KLQlyZXR1cm4gdHJpZ2dlcjsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgaXJxX3BvbGFyaXR5KGludCBpZHgpCi17Ci0JcmV0dXJuIE1QQklPU19wb2xhcml0eShpZHgpOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBpcnFfdHJpZ2dlcihpbnQgaWR4KQotewotCXJldHVybiBNUEJJT1NfdHJpZ2dlcihpZHgpOwotfQotCi1zdGF0aWMgaW50IHBpbl8yX2lycShpbnQgaWR4LCBpbnQgYXBpYywgaW50IHBpbikKLXsKLQlpbnQgaXJxLCBpOwotCWludCBidXMgPSBtcF9pcnFzW2lkeF0ubXBfc3JjYnVzOwotCi0JLyoKLQkgKiBEZWJ1Z2dpbmcgY2hlY2ssIHdlIGFyZSBpbiBiaWcgdHJvdWJsZSBpZiB0aGlzIG1lc3NhZ2UgcG9wcyB1cCEKLQkgKi8KLQlpZiAobXBfaXJxc1tpZHhdLm1wX2RzdGlycSAhPSBwaW4pCi0JCXByaW50ayhLRVJOX0VSUiAiYnJva2VuIEJJT1Mgb3IgTVBUQUJMRSBwYXJzZXIsIGF5aWVlISFcbiIpOwotCi0JaWYgKHRlc3RfYml0KGJ1cywgbXBfYnVzX25vdF9wY2kpKQotCQlpcnEgPSBtcF9pcnFzW2lkeF0ubXBfc3JjYnVzaXJxOwotCWVsc2UgewotCQkvKgotCQkgKiBQQ0kgSVJRcyBhcmUgbWFwcGVkIGluIG9yZGVyCi0JCSAqLwotCQlpID0gaXJxID0gMDsKLQkJd2hpbGUgKGkgPCBhcGljKQotCQkJaXJxICs9IG5yX2lvYXBpY19yZWdpc3RlcnNbaSsrXTsKLQkJaXJxICs9IHBpbjsKLQotCQkvKgotCQkgKiBGb3IgTVBTIG1vZGUsIHNvIGZhciBvbmx5IG5lZWRlZCBieSBFUzcwMDAgcGxhdGZvcm0KLQkJICovCi0JCWlmIChpb2FwaWNfcmVudW1iZXJfaXJxKQotCQkJaXJxID0gaW9hcGljX3JlbnVtYmVyX2lycShhcGljLCBpcnEpOwotCX0KLQotCS8qCi0JICogUENJIElSUSBjb21tYW5kIGxpbmUgcmVkaXJlY3Rpb24uIFllcywgbGltaXRzIGFyZSBoYXJkY29kZWQuCi0JICovCi0JaWYgKChwaW4gPj0gMTYpICYmIChwaW4gPD0gMjMpKSB7Ci0JCWlmIChwaXJxX2VudHJpZXNbcGluLTE2XSAhPSAtMSkgewotCQkJaWYgKCFwaXJxX2VudHJpZXNbcGluLTE2XSkgewotCQkJCWFwaWNfcHJpbnRrKEFQSUNfVkVSQk9TRSwgS0VSTl9ERUJVRwotCQkJCQkJImRpc2FibGluZyBQSVJRJWRcbiIsIHBpbi0xNik7Ci0JCQl9IGVsc2UgewotCQkJCWlycSA9IHBpcnFfZW50cmllc1twaW4tMTZdOwotCQkJCWFwaWNfcHJpbnRrKEFQSUNfVkVSQk9TRSwgS0VSTl9ERUJVRwotCQkJCQkJInVzaW5nIFBJUlElZCAtPiBJUlEgJWRcbiIsCi0JCQkJCQlwaW4tMTYsIGlycSk7Ci0JCQl9Ci0JCX0KLQl9Ci0JcmV0dXJuIGlycTsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgSU9fQVBJQ19pcnFfdHJpZ2dlcihpbnQgaXJxKQotewotCWludCBhcGljLCBpZHgsIHBpbjsKLQotCWZvciAoYXBpYyA9IDA7IGFwaWMgPCBucl9pb2FwaWNzOyBhcGljKyspIHsKLQkJZm9yIChwaW4gPSAwOyBwaW4gPCBucl9pb2FwaWNfcmVnaXN0ZXJzW2FwaWNdOyBwaW4rKykgewotCQkJaWR4ID0gZmluZF9pcnFfZW50cnkoYXBpYywgcGluLCBtcF9JTlQpOwotCQkJaWYgKChpZHggIT0gLTEpICYmIChpcnEgPT0gcGluXzJfaXJxKGlkeCwgYXBpYywgcGluKSkpCi0JCQkJcmV0dXJuIGlycV90cmlnZ2VyKGlkeCk7Ci0JCX0KLQl9Ci0JLyoKLQkgKiBub25leGlzdGVudCBJUlFzIGFyZSBlZGdlIGRlZmF1bHQKLQkgKi8KLQlyZXR1cm4gMDsKLX0KLQotLyogaXJxX3ZlY3RvcnMgaXMgaW5kZXhlZCBieSB0aGUgc3VtIG9mIGFsbCBSVEVzIGluIGFsbCBJL08gQVBJQ3MuICovCi1zdGF0aWMgdTggaXJxX3ZlY3RvcltOUl9JUlFfVkVDVE9SU10gX19yZWFkX21vc3RseSA9IHsgRklSU1RfREVWSUNFX1ZFQ1RPUiAsIDAgfTsKLQotc3RhdGljIGludCBfX2Fzc2lnbl9pcnFfdmVjdG9yKGludCBpcnEpCi17Ci0Jc3RhdGljIGludCBjdXJyZW50X3ZlY3RvciA9IEZJUlNUX0RFVklDRV9WRUNUT1IsIGN1cnJlbnRfb2Zmc2V0OwotCWludCB2ZWN0b3IsIG9mZnNldDsKLQotCUJVR19PTigodW5zaWduZWQpaXJxID49IE5SX0lSUV9WRUNUT1JTKTsKLQotCWlmIChpcnFfdmVjdG9yW2lycV0gPiAwKQotCQlyZXR1cm4gaXJxX3ZlY3RvcltpcnFdOwotCi0JdmVjdG9yID0gY3VycmVudF92ZWN0b3I7Ci0Jb2Zmc2V0ID0gY3VycmVudF9vZmZzZXQ7Ci1uZXh0OgotCXZlY3RvciArPSA4OwotCWlmICh2ZWN0b3IgPj0gZmlyc3Rfc3lzdGVtX3ZlY3RvcikgewotCQlvZmZzZXQgPSAob2Zmc2V0ICsgMSkgJSA4OwotCQl2ZWN0b3IgPSBGSVJTVF9ERVZJQ0VfVkVDVE9SICsgb2Zmc2V0OwotCX0KLQlpZiAodmVjdG9yID09IGN1cnJlbnRfdmVjdG9yKQotCQlyZXR1cm4gLUVOT1NQQzsKLQlpZiAodGVzdF9hbmRfc2V0X2JpdCh2ZWN0b3IsIHVzZWRfdmVjdG9ycykpCi0JCWdvdG8gbmV4dDsKLQotCWN1cnJlbnRfdmVjdG9yID0gdmVjdG9yOwotCWN1cnJlbnRfb2Zmc2V0ID0gb2Zmc2V0OwotCWlycV92ZWN0b3JbaXJxXSA9IHZlY3RvcjsKLQotCXJldHVybiB2ZWN0b3I7Ci19Ci0KLXN0YXRpYyBpbnQgYXNzaWduX2lycV92ZWN0b3IoaW50IGlycSkKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWludCB2ZWN0b3I7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmdmVjdG9yX2xvY2ssIGZsYWdzKTsKLQl2ZWN0b3IgPSBfX2Fzc2lnbl9pcnFfdmVjdG9yKGlycSk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdmVjdG9yX2xvY2ssIGZsYWdzKTsKLQotCXJldHVybiB2ZWN0b3I7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgaW9hcGljX2NoaXA7Ci0KLSNkZWZpbmUgSU9BUElDX0FVVE8JLTEKLSNkZWZpbmUgSU9BUElDX0VER0UJMAotI2RlZmluZSBJT0FQSUNfTEVWRUwJMQotCi1zdGF0aWMgdm9pZCBpb2FwaWNfcmVnaXN0ZXJfaW50cihpbnQgaXJxLCBpbnQgdmVjdG9yLCB1bnNpZ25lZCBsb25nIHRyaWdnZXIpCi17Ci0JaWYgKCh0cmlnZ2VyID09IElPQVBJQ19BVVRPICYmIElPX0FQSUNfaXJxX3RyaWdnZXIoaXJxKSkgfHwKLQkgICAgdHJpZ2dlciA9PSBJT0FQSUNfTEVWRUwpIHsKLQkJaXJxX2Rlc2NbaXJxXS5zdGF0dXMgfD0gSVJRX0xFVkVMOwotCQlzZXRfaXJxX2NoaXBfYW5kX2hhbmRsZXJfbmFtZShpcnEsICZpb2FwaWNfY2hpcCwKLQkJCQkJIGhhbmRsZV9mYXN0ZW9pX2lycSwgImZhc3Rlb2kiKTsKLQl9IGVsc2UgewotCQlpcnFfZGVzY1tpcnFdLnN0YXR1cyAmPSB+SVJRX0xFVkVMOwotCQlzZXRfaXJxX2NoaXBfYW5kX2hhbmRsZXJfbmFtZShpcnEsICZpb2FwaWNfY2hpcCwKLQkJCQkJIGhhbmRsZV9lZGdlX2lycSwgImVkZ2UiKTsKLQl9Ci0Jc2V0X2ludHJfZ2F0ZSh2ZWN0b3IsIGludGVycnVwdFtpcnFdKTsKLX0KLQotc3RhdGljIHZvaWQgX19pbml0IHNldHVwX0lPX0FQSUNfaXJxcyh2b2lkKQotewotCXN0cnVjdCBJT19BUElDX3JvdXRlX2VudHJ5IGVudHJ5OwotCWludCBhcGljLCBwaW4sIGlkeCwgaXJxLCBmaXJzdF9ub3Rjb24gPSAxLCB2ZWN0b3I7Ci0KLQlhcGljX3ByaW50ayhBUElDX1ZFUkJPU0UsIEtFUk5fREVCVUcgImluaXQgSU9fQVBJQyBJUlFzXG4iKTsKLQotCWZvciAoYXBpYyA9IDA7IGFwaWMgPCBucl9pb2FwaWNzOyBhcGljKyspIHsKLQlmb3IgKHBpbiA9IDA7IHBpbiA8IG5yX2lvYXBpY19yZWdpc3RlcnNbYXBpY107IHBpbisrKSB7Ci0KLQkJLyoKLQkJICogYWRkIGl0IHRvIHRoZSBJTy1BUElDIGlycS1yb3V0aW5nIHRhYmxlOgotCQkgKi8KLQkJbWVtc2V0KCZlbnRyeSwgMCwgc2l6ZW9mKGVudHJ5KSk7Ci0KLQkJZW50cnkuZGVsaXZlcnlfbW9kZSA9IElOVF9ERUxJVkVSWV9NT0RFOwotCQllbnRyeS5kZXN0X21vZGUgPSBJTlRfREVTVF9NT0RFOwotCQllbnRyeS5tYXNrID0gMDsJCQkJLyogZW5hYmxlIElSUSAqLwotCQllbnRyeS5kZXN0LmxvZ2ljYWwubG9naWNhbF9kZXN0ID0KLQkJCQkJY3B1X21hc2tfdG9fYXBpY2lkKFRBUkdFVF9DUFVTKTsKLQotCQlpZHggPSBmaW5kX2lycV9lbnRyeShhcGljLCBwaW4sIG1wX0lOVCk7Ci0JCWlmIChpZHggPT0gLTEpIHsKLQkJCWlmIChmaXJzdF9ub3Rjb24pIHsKLQkJCQlhcGljX3ByaW50ayhBUElDX1ZFUkJPU0UsIEtFUk5fREVCVUcKLQkJCQkJCSIgSU8tQVBJQyAoYXBpY2lkLXBpbikgJWQtJWQiLAotCQkJCQkJbXBfaW9hcGljc1thcGljXS5tcF9hcGljaWQsCi0JCQkJCQlwaW4pOwotCQkJCWZpcnN0X25vdGNvbiA9IDA7Ci0JCQl9IGVsc2UKLQkJCQlhcGljX3ByaW50ayhBUElDX1ZFUkJPU0UsICIsICVkLSVkIiwKLQkJCQkJbXBfaW9hcGljc1thcGljXS5tcF9hcGljaWQsIHBpbik7Ci0JCQljb250aW51ZTsKLQkJfQotCi0JCWlmICghZmlyc3Rfbm90Y29uKSB7Ci0JCQlhcGljX3ByaW50ayhBUElDX1ZFUkJPU0UsICIgbm90IGNvbm5lY3RlZC5cbiIpOwotCQkJZmlyc3Rfbm90Y29uID0gMTsKLQkJfQotCi0JCWVudHJ5LnRyaWdnZXIgPSBpcnFfdHJpZ2dlcihpZHgpOwotCQllbnRyeS5wb2xhcml0eSA9IGlycV9wb2xhcml0eShpZHgpOwotCi0JCWlmIChpcnFfdHJpZ2dlcihpZHgpKSB7Ci0JCQllbnRyeS50cmlnZ2VyID0gMTsKLQkJCWVudHJ5Lm1hc2sgPSAxOwotCQl9Ci0KLQkJaXJxID0gcGluXzJfaXJxKGlkeCwgYXBpYywgcGluKTsKLQkJLyoKLQkJICogc2tpcCBhZGRpbmcgdGhlIHRpbWVyIGludCBvbiBzZWNvbmRhcnkgbm9kZXMsIHdoaWNoIGNhdXNlcwotCQkgKiBhIHNtYWxsIGJ1dCBwYWluZnVsIHJpZnQgaW4gdGhlIHRpbWUtc3BhY2UgY29udGludXVtCi0JCSAqLwotCQlpZiAobXVsdGlfdGltZXJfY2hlY2soYXBpYywgaXJxKSkKLQkJCWNvbnRpbnVlOwotCQllbHNlCi0JCQlhZGRfcGluX3RvX2lycShpcnEsIGFwaWMsIHBpbik7Ci0KLQkJaWYgKCFhcGljICYmICFJT19BUElDX0lSUShpcnEpKQotCQkJY29udGludWU7Ci0KLQkJaWYgKElPX0FQSUNfSVJRKGlycSkpIHsKLQkJCXZlY3RvciA9IGFzc2lnbl9pcnFfdmVjdG9yKGlycSk7Ci0JCQllbnRyeS52ZWN0b3IgPSB2ZWN0b3I7Ci0JCQlpb2FwaWNfcmVnaXN0ZXJfaW50cihpcnEsIHZlY3RvciwgSU9BUElDX0FVVE8pOwotCi0JCQlpZiAoIWFwaWMgJiYgKGlycSA8IDE2KSkKLQkJCQlkaXNhYmxlXzgyNTlBX2lycShpcnEpOwotCQl9Ci0JCWlvYXBpY193cml0ZV9lbnRyeShhcGljLCBwaW4sIGVudHJ5KTsKLQl9Ci0JfQotCi0JaWYgKCFmaXJzdF9ub3Rjb24pCi0JCWFwaWNfcHJpbnRrKEFQSUNfVkVSQk9TRSwgIiBub3QgY29ubmVjdGVkLlxuIik7Ci19Ci0KLS8qCi0gKiBTZXQgdXAgdGhlIHRpbWVyIHBpbiwgcG9zc2libHkgd2l0aCB0aGUgODI1OUEtbWFzdGVyIGJlaGluZC4KLSAqLwotc3RhdGljIHZvaWQgX19pbml0IHNldHVwX3RpbWVyX0lSUTBfcGluKHVuc2lnbmVkIGludCBhcGljLCB1bnNpZ25lZCBpbnQgcGluLAotCQkJCQlpbnQgdmVjdG9yKQotewotCXN0cnVjdCBJT19BUElDX3JvdXRlX2VudHJ5IGVudHJ5OwotCi0JbWVtc2V0KCZlbnRyeSwgMCwgc2l6ZW9mKGVudHJ5KSk7Ci0KLQkvKgotCSAqIFdlIHVzZSBsb2dpY2FsIGRlbGl2ZXJ5IHRvIGdldCB0aGUgdGltZXIgSVJRCi0JICogdG8gdGhlIGZpcnN0IENQVS4KLQkgKi8KLQllbnRyeS5kZXN0X21vZGUgPSBJTlRfREVTVF9NT0RFOwotCWVudHJ5Lm1hc2sgPSAxOwkJCQkJLyogbWFzayBJUlEgbm93ICovCi0JZW50cnkuZGVzdC5sb2dpY2FsLmxvZ2ljYWxfZGVzdCA9IGNwdV9tYXNrX3RvX2FwaWNpZChUQVJHRVRfQ1BVUyk7Ci0JZW50cnkuZGVsaXZlcnlfbW9kZSA9IElOVF9ERUxJVkVSWV9NT0RFOwotCWVudHJ5LnBvbGFyaXR5ID0gMDsKLQllbnRyeS50cmlnZ2VyID0gMDsKLQllbnRyeS52ZWN0b3IgPSB2ZWN0b3I7Ci0KLQkvKgotCSAqIFRoZSB0aW1lciBJUlEgZG9lc24ndCBoYXZlIHRvIGtub3cgdGhhdCBiZWhpbmQgdGhlCi0JICogc2NlbmUgd2UgbWF5IGhhdmUgYSA4MjU5QS1tYXN0ZXIgaW4gQUVPSSBtb2RlIC4uLgotCSAqLwotCWlvYXBpY19yZWdpc3Rlcl9pbnRyKDAsIHZlY3RvciwgSU9BUElDX0VER0UpOwotCi0JLyoKLQkgKiBBZGQgaXQgdG8gdGhlIElPLUFQSUMgaXJxLXJvdXRpbmcgdGFibGU6Ci0JICovCi0JaW9hcGljX3dyaXRlX2VudHJ5KGFwaWMsIHBpbiwgZW50cnkpOwotfQotCi0KLV9fYXBpY2RlYnVnaW5pdCh2b2lkKSBwcmludF9JT19BUElDKHZvaWQpCi17Ci0JaW50IGFwaWMsIGk7Ci0JdW5pb24gSU9fQVBJQ19yZWdfMDAgcmVnXzAwOwotCXVuaW9uIElPX0FQSUNfcmVnXzAxIHJlZ18wMTsKLQl1bmlvbiBJT19BUElDX3JlZ18wMiByZWdfMDI7Ci0JdW5pb24gSU9fQVBJQ19yZWdfMDMgcmVnXzAzOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlpZiAoYXBpY192ZXJib3NpdHkgPT0gQVBJQ19RVUlFVCkKLQkJcmV0dXJuOwotCi0JcHJpbnRrKEtFUk5fREVCVUcgIm51bWJlciBvZiBNUCBJUlEgc291cmNlczogJWQuXG4iLCBtcF9pcnFfZW50cmllcyk7Ci0JZm9yIChpID0gMDsgaSA8IG5yX2lvYXBpY3M7IGkrKykKLQkJcHJpbnRrKEtFUk5fREVCVUcgIm51bWJlciBvZiBJTy1BUElDICMlZCByZWdpc3RlcnM6ICVkLlxuIiwKLQkJICAgICAgIG1wX2lvYXBpY3NbaV0ubXBfYXBpY2lkLCBucl9pb2FwaWNfcmVnaXN0ZXJzW2ldKTsKLQotCS8qCi0JICogV2UgYXJlIGEgYml0IGNvbnNlcnZhdGl2ZSBhYm91dCB3aGF0IHdlIGV4cGVjdC4gIFdlIGhhdmUgdG8KLQkgKiBrbm93IGFib3V0IGV2ZXJ5IGhhcmR3YXJlIGNoYW5nZSBBU0FQLgotCSAqLwotCXByaW50ayhLRVJOX0lORk8gInRlc3RpbmcgdGhlIElPIEFQSUMuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLlxuIik7Ci0KLQlmb3IgKGFwaWMgPSAwOyBhcGljIDwgbnJfaW9hcGljczsgYXBpYysrKSB7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmaW9hcGljX2xvY2ssIGZsYWdzKTsKLQlyZWdfMDAucmF3ID0gaW9fYXBpY19yZWFkKGFwaWMsIDApOwotCXJlZ18wMS5yYXcgPSBpb19hcGljX3JlYWQoYXBpYywgMSk7Ci0JaWYgKHJlZ18wMS5iaXRzLnZlcnNpb24gPj0gMHgxMCkKLQkJcmVnXzAyLnJhdyA9IGlvX2FwaWNfcmVhZChhcGljLCAyKTsKLQlpZiAocmVnXzAxLmJpdHMudmVyc2lvbiA+PSAweDIwKQotCQlyZWdfMDMucmF3ID0gaW9fYXBpY19yZWFkKGFwaWMsIDMpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYXBpY19sb2NrLCBmbGFncyk7Ci0KLQlwcmludGsoS0VSTl9ERUJVRyAiSU8gQVBJQyAjJWQuLi4uLi5cbiIsIG1wX2lvYXBpY3NbYXBpY10ubXBfYXBpY2lkKTsKLQlwcmludGsoS0VSTl9ERUJVRyAiLi4uLiByZWdpc3RlciAjMDA6ICUwOFhcbiIsIHJlZ18wMC5yYXcpOwotCXByaW50ayhLRVJOX0RFQlVHICIuLi4uLi4uICAgIDogcGh5c2ljYWwgQVBJQyBpZDogJTAyWFxuIiwgcmVnXzAwLmJpdHMuSUQpOwotCXByaW50ayhLRVJOX0RFQlVHICIuLi4uLi4uICAgIDogRGVsaXZlcnkgVHlwZTogJVhcbiIsIHJlZ18wMC5iaXRzLmRlbGl2ZXJ5X3R5cGUpOwotCXByaW50ayhLRVJOX0RFQlVHICIuLi4uLi4uICAgIDogTFRTICAgICAgICAgIDogJVhcbiIsIHJlZ18wMC5iaXRzLkxUUyk7Ci0KLQlwcmludGsoS0VSTl9ERUJVRyAiLi4uLiByZWdpc3RlciAjMDE6ICUwOFhcbiIsIHJlZ18wMS5yYXcpOwotCXByaW50ayhLRVJOX0RFQlVHICIuLi4uLi4uICAgICA6IG1heCByZWRpcmVjdGlvbiBlbnRyaWVzOiAlMDRYXG4iLCByZWdfMDEuYml0cy5lbnRyaWVzKTsKLQotCXByaW50ayhLRVJOX0RFQlVHICIuLi4uLi4uICAgICA6IFBSUSBpbXBsZW1lbnRlZDogJVhcbiIsIHJlZ18wMS5iaXRzLlBSUSk7Ci0JcHJpbnRrKEtFUk5fREVCVUcgIi4uLi4uLi4gICAgIDogSU8gQVBJQyB2ZXJzaW9uOiAlMDRYXG4iLCByZWdfMDEuYml0cy52ZXJzaW9uKTsKLQotCS8qCi0JICogU29tZSBJbnRlbCBjaGlwc2V0cyB3aXRoIElPIEFQSUMgVkVSU0lPTiBvZiAweDE/IGRvbid0IGhhdmUgcmVnXzAyLAotCSAqIGJ1dCB0aGUgdmFsdWUgb2YgcmVnXzAyIGlzIHJlYWQgYXMgdGhlIHByZXZpb3VzIHJlYWQgcmVnaXN0ZXIKLQkgKiB2YWx1ZSwgc28gaWdub3JlIGl0IGlmIHJlZ18wMiA9PSByZWdfMDEuCi0JICovCi0JaWYgKHJlZ18wMS5iaXRzLnZlcnNpb24gPj0gMHgxMCAmJiByZWdfMDIucmF3ICE9IHJlZ18wMS5yYXcpIHsKLQkJcHJpbnRrKEtFUk5fREVCVUcgIi4uLi4gcmVnaXN0ZXIgIzAyOiAlMDhYXG4iLCByZWdfMDIucmF3KTsKLQkJcHJpbnRrKEtFUk5fREVCVUcgIi4uLi4uLi4gICAgIDogYXJiaXRyYXRpb246ICUwMlhcbiIsIHJlZ18wMi5iaXRzLmFyYml0cmF0aW9uKTsKLQl9Ci0KLQkvKgotCSAqIFNvbWUgSW50ZWwgY2hpcHNldHMgd2l0aCBJTyBBUElDIFZFUlNJT04gb2YgMHgyPyBkb24ndCBoYXZlIHJlZ18wMgotCSAqIG9yIHJlZ18wMywgYnV0IHRoZSB2YWx1ZSBvZiByZWdfMFsyM10gaXMgcmVhZCBhcyB0aGUgcHJldmlvdXMgcmVhZAotCSAqIHJlZ2lzdGVyIHZhbHVlLCBzbyBpZ25vcmUgaXQgaWYgcmVnXzAzID09IHJlZ18wWzEyXS4KLQkgKi8KLQlpZiAocmVnXzAxLmJpdHMudmVyc2lvbiA+PSAweDIwICYmIHJlZ18wMy5yYXcgIT0gcmVnXzAyLnJhdyAmJgotCSAgICByZWdfMDMucmF3ICE9IHJlZ18wMS5yYXcpIHsKLQkJcHJpbnRrKEtFUk5fREVCVUcgIi4uLi4gcmVnaXN0ZXIgIzAzOiAlMDhYXG4iLCByZWdfMDMucmF3KTsKLQkJcHJpbnRrKEtFUk5fREVCVUcgIi4uLi4uLi4gICAgIDogQm9vdCBEVCAgICA6ICVYXG4iLCByZWdfMDMuYml0cy5ib290X0RUKTsKLQl9Ci0KLQlwcmludGsoS0VSTl9ERUJVRyAiLi4uLiBJUlEgcmVkaXJlY3Rpb24gdGFibGU6XG4iKTsKLQotCXByaW50ayhLRVJOX0RFQlVHICIgTlIgTG9nIFBoeSBNYXNrIFRyaWcgSVJSIFBvbCIKLQkJCSAgIiBTdGF0IERlc3QgRGVsaSBWZWN0OiAgIFxuIik7Ci0KLQlmb3IgKGkgPSAwOyBpIDw9IHJlZ18wMS5iaXRzLmVudHJpZXM7IGkrKykgewotCQlzdHJ1Y3QgSU9fQVBJQ19yb3V0ZV9lbnRyeSBlbnRyeTsKLQotCQllbnRyeSA9IGlvYXBpY19yZWFkX2VudHJ5KGFwaWMsIGkpOwotCi0JCXByaW50ayhLRVJOX0RFQlVHICIgJTAyeCAlMDNYICUwMlggICIsCi0JCQlpLAotCQkJZW50cnkuZGVzdC5sb2dpY2FsLmxvZ2ljYWxfZGVzdCwKLQkJCWVudHJ5LmRlc3QucGh5c2ljYWwucGh5c2ljYWxfZGVzdAotCQkpOwotCi0JCXByaW50aygiJTFkICAgICUxZCAgICAlMWQgICAlMWQgICAlMWQgICAgJTFkICAgICUxZCAgICAlMDJYXG4iLAotCQkJZW50cnkubWFzaywKLQkJCWVudHJ5LnRyaWdnZXIsCi0JCQllbnRyeS5pcnIsCi0JCQllbnRyeS5wb2xhcml0eSwKLQkJCWVudHJ5LmRlbGl2ZXJ5X3N0YXR1cywKLQkJCWVudHJ5LmRlc3RfbW9kZSwKLQkJCWVudHJ5LmRlbGl2ZXJ5X21vZGUsCi0JCQllbnRyeS52ZWN0b3IKLQkJKTsKLQl9Ci0JfQotCXByaW50ayhLRVJOX0RFQlVHICJJUlEgdG8gcGluIG1hcHBpbmdzOlxuIik7Ci0JZm9yIChpID0gMDsgaSA8IE5SX0lSUVM7IGkrKykgewotCQlzdHJ1Y3QgaXJxX3Bpbl9saXN0ICplbnRyeSA9IGlycV8yX3BpbiArIGk7Ci0JCWlmIChlbnRyeS0+cGluIDwgMCkKLQkJCWNvbnRpbnVlOwotCQlwcmludGsoS0VSTl9ERUJVRyAiSVJRJWQgIiwgaSk7Ci0JCWZvciAoOzspIHsKLQkJCXByaW50aygiLT4gJWQ6JWQiLCBlbnRyeS0+YXBpYywgZW50cnktPnBpbik7Ci0JCQlpZiAoIWVudHJ5LT5uZXh0KQotCQkJCWJyZWFrOwotCQkJZW50cnkgPSBpcnFfMl9waW4gKyBlbnRyeS0+bmV4dDsKLQkJfQotCQlwcmludGsoIlxuIik7Ci0JfQotCi0JcHJpbnRrKEtFUk5fSU5GTyAiLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIGRvbmUuXG4iKTsKLQotCXJldHVybjsKLX0KLQotX19hcGljZGVidWdpbml0KHZvaWQpIHByaW50X0FQSUNfYml0ZmllbGQoaW50IGJhc2UpCi17Ci0JdW5zaWduZWQgaW50IHY7Ci0JaW50IGksIGo7Ci0KLQlpZiAoYXBpY192ZXJib3NpdHkgPT0gQVBJQ19RVUlFVCkKLQkJcmV0dXJuOwotCi0JcHJpbnRrKEtFUk5fREVCVUcgIjAxMjM0NTY3ODlhYmNkZWYwMTIzNDU2Nzg5YWJjZGVmXG4iIEtFUk5fREVCVUcpOwotCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspIHsKLQkJdiA9IGFwaWNfcmVhZChiYXNlICsgaSoweDEwKTsKLQkJZm9yIChqID0gMDsgaiA8IDMyOyBqKyspIHsKLQkJCWlmICh2ICYgKDE8PGopKQotCQkJCXByaW50aygiMSIpOwotCQkJZWxzZQotCQkJCXByaW50aygiMCIpOwotCQl9Ci0JCXByaW50aygiXG4iKTsKLQl9Ci19Ci0KLV9fYXBpY2RlYnVnaW5pdCh2b2lkKSBwcmludF9sb2NhbF9BUElDKHZvaWQgKmR1bW15KQotewotCXVuc2lnbmVkIGludCB2LCB2ZXIsIG1heGx2dDsKLQl1NjQgaWNyOwotCi0JaWYgKGFwaWNfdmVyYm9zaXR5ID09IEFQSUNfUVVJRVQpCi0JCXJldHVybjsKLQotCXByaW50aygiXG4iIEtFUk5fREVCVUcgInByaW50aW5nIGxvY2FsIEFQSUMgY29udGVudHMgb24gQ1BVIyVkLyVkOlxuIiwKLQkJc21wX3Byb2Nlc3Nvcl9pZCgpLCBoYXJkX3NtcF9wcm9jZXNzb3JfaWQoKSk7Ci0JdiA9IGFwaWNfcmVhZChBUElDX0lEKTsKLQlwcmludGsoS0VSTl9JTkZPICIuLi4gQVBJQyBJRDogICAgICAlMDh4ICglMDF4KVxuIiwgdiwKLQkJCUdFVF9BUElDX0lEKHYpKTsKLQl2ID0gYXBpY19yZWFkKEFQSUNfTFZSKTsKLQlwcmludGsoS0VSTl9JTkZPICIuLi4gQVBJQyBWRVJTSU9OOiAlMDh4XG4iLCB2KTsKLQl2ZXIgPSBHRVRfQVBJQ19WRVJTSU9OKHYpOwotCW1heGx2dCA9IGxhcGljX2dldF9tYXhsdnQoKTsKLQotCXYgPSBhcGljX3JlYWQoQVBJQ19UQVNLUFJJKTsKLQlwcmludGsoS0VSTl9ERUJVRyAiLi4uIEFQSUMgVEFTS1BSSTogJTA4eCAoJTAyeClcbiIsIHYsIHYgJiBBUElDX1RQUklfTUFTSyk7Ci0KLQlpZiAoQVBJQ19JTlRFR1JBVEVEKHZlcikpIHsJCQkvKiAhODI0ODlEWCAqLwotCQl2ID0gYXBpY19yZWFkKEFQSUNfQVJCUFJJKTsKLQkJcHJpbnRrKEtFUk5fREVCVUcgIi4uLiBBUElDIEFSQlBSSTogJTA4eCAoJTAyeClcbiIsIHYsCi0JCQl2ICYgQVBJQ19BUkJQUklfTUFTSyk7Ci0JCXYgPSBhcGljX3JlYWQoQVBJQ19QUk9DUFJJKTsKLQkJcHJpbnRrKEtFUk5fREVCVUcgIi4uLiBBUElDIFBST0NQUkk6ICUwOHhcbiIsIHYpOwotCX0KLQotCXYgPSBhcGljX3JlYWQoQVBJQ19FT0kpOwotCXByaW50ayhLRVJOX0RFQlVHICIuLi4gQVBJQyBFT0k6ICUwOHhcbiIsIHYpOwotCXYgPSBhcGljX3JlYWQoQVBJQ19SUlIpOwotCXByaW50ayhLRVJOX0RFQlVHICIuLi4gQVBJQyBSUlI6ICUwOHhcbiIsIHYpOwotCXYgPSBhcGljX3JlYWQoQVBJQ19MRFIpOwotCXByaW50ayhLRVJOX0RFQlVHICIuLi4gQVBJQyBMRFI6ICUwOHhcbiIsIHYpOwotCXYgPSBhcGljX3JlYWQoQVBJQ19ERlIpOwotCXByaW50ayhLRVJOX0RFQlVHICIuLi4gQVBJQyBERlI6ICUwOHhcbiIsIHYpOwotCXYgPSBhcGljX3JlYWQoQVBJQ19TUElWKTsKLQlwcmludGsoS0VSTl9ERUJVRyAiLi4uIEFQSUMgU1BJVjogJTA4eFxuIiwgdik7Ci0KLQlwcmludGsoS0VSTl9ERUJVRyAiLi4uIEFQSUMgSVNSIGZpZWxkOlxuIik7Ci0JcHJpbnRfQVBJQ19iaXRmaWVsZChBUElDX0lTUik7Ci0JcHJpbnRrKEtFUk5fREVCVUcgIi4uLiBBUElDIFRNUiBmaWVsZDpcbiIpOwotCXByaW50X0FQSUNfYml0ZmllbGQoQVBJQ19UTVIpOwotCXByaW50ayhLRVJOX0RFQlVHICIuLi4gQVBJQyBJUlIgZmllbGQ6XG4iKTsKLQlwcmludF9BUElDX2JpdGZpZWxkKEFQSUNfSVJSKTsKLQotCWlmIChBUElDX0lOVEVHUkFURUQodmVyKSkgewkJLyogITgyNDg5RFggKi8KLQkJaWYgKG1heGx2dCA+IDMpCQkvKiBEdWUgdG8gdGhlIFBlbnRpdW0gZXJyYXR1bSAzQVAuICovCi0JCQlhcGljX3dyaXRlKEFQSUNfRVNSLCAwKTsKLQkJdiA9IGFwaWNfcmVhZChBUElDX0VTUik7Ci0JCXByaW50ayhLRVJOX0RFQlVHICIuLi4gQVBJQyBFU1I6ICUwOHhcbiIsIHYpOwotCX0KLQotCWljciA9IGFwaWNfaWNyX3JlYWQoKTsKLQlwcmludGsoS0VSTl9ERUJVRyAiLi4uIEFQSUMgSUNSOiAlMDh4XG4iLCBpY3IpOwotCXByaW50ayhLRVJOX0RFQlVHICIuLi4gQVBJQyBJQ1IyOiAlMDh4XG4iLCBpY3IgPj4gMzIpOwotCi0JdiA9IGFwaWNfcmVhZChBUElDX0xWVFQpOwotCXByaW50ayhLRVJOX0RFQlVHICIuLi4gQVBJQyBMVlRUOiAlMDh4XG4iLCB2KTsKLQotCWlmIChtYXhsdnQgPiAzKSB7ICAgICAgICAgICAgICAgICAgICAgICAvKiBQQyBpcyBMVlQjNC4gKi8KLQkJdiA9IGFwaWNfcmVhZChBUElDX0xWVFBDKTsKLQkJcHJpbnRrKEtFUk5fREVCVUcgIi4uLiBBUElDIExWVFBDOiAlMDh4XG4iLCB2KTsKLQl9Ci0JdiA9IGFwaWNfcmVhZChBUElDX0xWVDApOwotCXByaW50ayhLRVJOX0RFQlVHICIuLi4gQVBJQyBMVlQwOiAlMDh4XG4iLCB2KTsKLQl2ID0gYXBpY19yZWFkKEFQSUNfTFZUMSk7Ci0JcHJpbnRrKEtFUk5fREVCVUcgIi4uLiBBUElDIExWVDE6ICUwOHhcbiIsIHYpOwotCi0JaWYgKG1heGx2dCA+IDIpIHsJCQkvKiBFUlIgaXMgTFZUIzMuICovCi0JCXYgPSBhcGljX3JlYWQoQVBJQ19MVlRFUlIpOwotCQlwcmludGsoS0VSTl9ERUJVRyAiLi4uIEFQSUMgTFZURVJSOiAlMDh4XG4iLCB2KTsKLQl9Ci0KLQl2ID0gYXBpY19yZWFkKEFQSUNfVE1JQ1QpOwotCXByaW50ayhLRVJOX0RFQlVHICIuLi4gQVBJQyBUTUlDVDogJTA4eFxuIiwgdik7Ci0JdiA9IGFwaWNfcmVhZChBUElDX1RNQ0NUKTsKLQlwcmludGsoS0VSTl9ERUJVRyAiLi4uIEFQSUMgVE1DQ1Q6ICUwOHhcbiIsIHYpOwotCXYgPSBhcGljX3JlYWQoQVBJQ19URENSKTsKLQlwcmludGsoS0VSTl9ERUJVRyAiLi4uIEFQSUMgVERDUjogJTA4eFxuIiwgdik7Ci0JcHJpbnRrKCJcbiIpOwotfQotCi1fX2FwaWNkZWJ1Z2luaXQodm9pZCkgcHJpbnRfYWxsX2xvY2FsX0FQSUNzKHZvaWQpCi17Ci0Jb25fZWFjaF9jcHUocHJpbnRfbG9jYWxfQVBJQywgTlVMTCwgMSk7Ci19Ci0KLV9fYXBpY2RlYnVnaW5pdCh2b2lkKSBwcmludF9QSUModm9pZCkKLXsKLQl1bnNpZ25lZCBpbnQgdjsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JaWYgKGFwaWNfdmVyYm9zaXR5ID09IEFQSUNfUVVJRVQpCi0JCXJldHVybjsKLQotCXByaW50ayhLRVJOX0RFQlVHICJcbnByaW50aW5nIFBJQyBjb250ZW50c1xuIik7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmaTgyNTlBX2xvY2ssIGZsYWdzKTsKLQotCXYgPSBpbmIoMHhhMSkgPDwgOCB8IGluYigweDIxKTsKLQlwcmludGsoS0VSTl9ERUJVRyAiLi4uIFBJQyAgSU1SOiAlMDR4XG4iLCB2KTsKLQotCXYgPSBpbmIoMHhhMCkgPDwgOCB8IGluYigweDIwKTsKLQlwcmludGsoS0VSTl9ERUJVRyAiLi4uIFBJQyAgSVJSOiAlMDR4XG4iLCB2KTsKLQotCW91dGIoMHgwYiwgMHhhMCk7Ci0Jb3V0YigweDBiLCAweDIwKTsKLQl2ID0gaW5iKDB4YTApIDw8IDggfCBpbmIoMHgyMCk7Ci0Jb3V0YigweDBhLCAweGEwKTsKLQlvdXRiKDB4MGEsIDB4MjApOwotCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaTgyNTlBX2xvY2ssIGZsYWdzKTsKLQotCXByaW50ayhLRVJOX0RFQlVHICIuLi4gUElDICBJU1I6ICUwNHhcbiIsIHYpOwotCi0JdiA9IGluYigweDRkMSkgPDwgOCB8IGluYigweDRkMCk7Ci0JcHJpbnRrKEtFUk5fREVCVUcgIi4uLiBQSUMgRUxDUjogJTA0eFxuIiwgdik7Ci19Ci0KLV9fYXBpY2RlYnVnaW5pdChpbnQpIHByaW50X2FsbF9JQ3Modm9pZCkKLXsKLQlwcmludF9QSUMoKTsKLQlwcmludF9hbGxfbG9jYWxfQVBJQ3MoKTsKLQlwcmludF9JT19BUElDKCk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotZnNfaW5pdGNhbGwocHJpbnRfYWxsX0lDcyk7Ci0KLQotc3RhdGljIHZvaWQgX19pbml0IGVuYWJsZV9JT19BUElDKHZvaWQpCi17Ci0JdW5pb24gSU9fQVBJQ19yZWdfMDEgcmVnXzAxOwotCWludCBpODI1OV9hcGljLCBpODI1OV9waW47Ci0JaW50IGksIGFwaWM7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCWZvciAoaSA9IDA7IGkgPCBQSU5fTUFQX1NJWkU7IGkrKykgewotCQlpcnFfMl9waW5baV0ucGluID0gLTE7Ci0JCWlycV8yX3BpbltpXS5uZXh0ID0gMDsKLQl9Ci0JaWYgKCFwaXJxc19lbmFibGVkKQotCQlmb3IgKGkgPSAwOyBpIDwgTUFYX1BJUlFTOyBpKyspCi0JCQlwaXJxX2VudHJpZXNbaV0gPSAtMTsKLQotCS8qCi0JICogVGhlIG51bWJlciBvZiBJTy1BUElDIElSUSByZWdpc3RlcnMgKD09ICNwaW5zKToKLQkgKi8KLQlmb3IgKGFwaWMgPSAwOyBhcGljIDwgbnJfaW9hcGljczsgYXBpYysrKSB7Ci0JCXNwaW5fbG9ja19pcnFzYXZlKCZpb2FwaWNfbG9jaywgZmxhZ3MpOwotCQlyZWdfMDEucmF3ID0gaW9fYXBpY19yZWFkKGFwaWMsIDEpOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2FwaWNfbG9jaywgZmxhZ3MpOwotCQlucl9pb2FwaWNfcmVnaXN0ZXJzW2FwaWNdID0gcmVnXzAxLmJpdHMuZW50cmllcysxOwotCX0KLQlmb3IgKGFwaWMgPSAwOyBhcGljIDwgbnJfaW9hcGljczsgYXBpYysrKSB7Ci0JCWludCBwaW47Ci0JCS8qIFNlZSBpZiBhbnkgb2YgdGhlIHBpbnMgaXMgaW4gRXh0SU5UIG1vZGUgKi8KLQkJZm9yIChwaW4gPSAwOyBwaW4gPCBucl9pb2FwaWNfcmVnaXN0ZXJzW2FwaWNdOyBwaW4rKykgewotCQkJc3RydWN0IElPX0FQSUNfcm91dGVfZW50cnkgZW50cnk7Ci0JCQllbnRyeSA9IGlvYXBpY19yZWFkX2VudHJ5KGFwaWMsIHBpbik7Ci0KLQotCQkJLyogSWYgdGhlIGludGVycnVwdCBsaW5lIGlzIGVuYWJsZWQgYW5kIGluIEV4dEludCBtb2RlCi0JCQkgKiBJIGhhdmUgZm91bmQgdGhlIHBpbiB3aGVyZSB0aGUgaTgyNTkgaXMgY29ubmVjdGVkLgotCQkJICovCi0JCQlpZiAoKGVudHJ5Lm1hc2sgPT0gMCkgJiYgKGVudHJ5LmRlbGl2ZXJ5X21vZGUgPT0gZGVzdF9FeHRJTlQpKSB7Ci0JCQkJaW9hcGljX2k4MjU5LmFwaWMgPSBhcGljOwotCQkJCWlvYXBpY19pODI1OS5waW4gID0gcGluOwotCQkJCWdvdG8gZm91bmRfaTgyNTk7Ci0JCQl9Ci0JCX0KLQl9Ci0gZm91bmRfaTgyNTk6Ci0JLyogTG9vayB0byBzZWUgd2hhdCBpZiB0aGUgTVAgdGFibGUgaGFzIHJlcG9ydGVkIHRoZSBFeHRJTlQgKi8KLQkvKiBJZiB3ZSBjb3VsZCBub3QgZmluZCB0aGUgYXBwcm9wcmlhdGUgcGluIGJ5IGxvb2tpbmcgYXQgdGhlIGlvYXBpYwotCSAqIHRoZSBpODI1OSBwcm9iYWJseSBpcyBub3QgY29ubmVjdGVkIHRoZSBpb2FwaWMgYnV0IGdpdmUgdGhlCi0JICogbXB0YWJsZSBhIGNoYW5jZSBhbnl3YXkuCi0JICovCi0JaTgyNTlfcGluICA9IGZpbmRfaXNhX2lycV9waW4oMCwgbXBfRXh0SU5UKTsKLQlpODI1OV9hcGljID0gZmluZF9pc2FfaXJxX2FwaWMoMCwgbXBfRXh0SU5UKTsKLQkvKiBUcnVzdCB0aGUgTVAgdGFibGUgaWYgbm90aGluZyBpcyBzZXR1cCBpbiB0aGUgaGFyZHdhcmUgKi8KLQlpZiAoKGlvYXBpY19pODI1OS5waW4gPT0gLTEpICYmIChpODI1OV9waW4gPj0gMCkpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiRXh0SU5UIG5vdCBzZXR1cCBpbiBoYXJkd2FyZSBidXQgcmVwb3J0ZWQgYnkgTVAgdGFibGVcbiIpOwotCQlpb2FwaWNfaTgyNTkucGluICA9IGk4MjU5X3BpbjsKLQkJaW9hcGljX2k4MjU5LmFwaWMgPSBpODI1OV9hcGljOwotCX0KLQkvKiBDb21wbGFpbiBpZiB0aGUgTVAgdGFibGUgYW5kIHRoZSBoYXJkd2FyZSBkaXNhZ3JlZSAqLwotCWlmICgoKGlvYXBpY19pODI1OS5hcGljICE9IGk4MjU5X2FwaWMpIHx8IChpb2FwaWNfaTgyNTkucGluICE9IGk4MjU5X3BpbikpICYmCi0JCShpODI1OV9waW4gPj0gMCkgJiYgKGlvYXBpY19pODI1OS5waW4gPj0gMCkpCi0JewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJFeHRJTlQgaW4gaGFyZHdhcmUgYW5kIE1QIHRhYmxlIGRpZmZlclxuIik7Ci0JfQotCi0JLyoKLQkgKiBEbyBub3QgdHJ1c3QgdGhlIElPLUFQSUMgYmVpbmcgZW1wdHkgYXQgYm9vdHVwCi0JICovCi0JY2xlYXJfSU9fQVBJQygpOwotfQotCi0vKgotICogTm90IGFuIF9faW5pdCwgbmVlZGVkIGJ5IHRoZSByZWJvb3QgY29kZQotICovCi12b2lkIGRpc2FibGVfSU9fQVBJQyh2b2lkKQotewotCS8qCi0JICogQ2xlYXIgdGhlIElPLUFQSUMgYmVmb3JlIHJlYm9vdGluZzoKLQkgKi8KLQljbGVhcl9JT19BUElDKCk7Ci0KLQkvKgotCSAqIElmIHRoZSBpODI1OSBpcyByb3V0ZWQgdGhyb3VnaCBhbiBJT0FQSUMKLQkgKiBQdXQgdGhhdCBJT0FQSUMgaW4gdmlydHVhbCB3aXJlIG1vZGUKLQkgKiBzbyBsZWdhY3kgaW50ZXJydXB0cyBjYW4gYmUgZGVsaXZlcmVkLgotCSAqLwotCWlmIChpb2FwaWNfaTgyNTkucGluICE9IC0xKSB7Ci0JCXN0cnVjdCBJT19BUElDX3JvdXRlX2VudHJ5IGVudHJ5OwotCi0JCW1lbXNldCgmZW50cnksIDAsIHNpemVvZihlbnRyeSkpOwotCQllbnRyeS5tYXNrICAgICAgICAgICAgPSAwOyAvKiBFbmFibGVkICovCi0JCWVudHJ5LnRyaWdnZXIgICAgICAgICA9IDA7IC8qIEVkZ2UgKi8KLQkJZW50cnkuaXJyICAgICAgICAgICAgID0gMDsKLQkJZW50cnkucG9sYXJpdHkgICAgICAgID0gMDsgLyogSGlnaCAqLwotCQllbnRyeS5kZWxpdmVyeV9zdGF0dXMgPSAwOwotCQllbnRyeS5kZXN0X21vZGUgICAgICAgPSAwOyAvKiBQaHlzaWNhbCAqLwotCQllbnRyeS5kZWxpdmVyeV9tb2RlICAgPSBkZXN0X0V4dElOVDsgLyogRXh0SW50ICovCi0JCWVudHJ5LnZlY3RvciAgICAgICAgICA9IDA7Ci0JCWVudHJ5LmRlc3QucGh5c2ljYWwucGh5c2ljYWxfZGVzdCA9IHJlYWRfYXBpY19pZCgpOwotCi0JCS8qCi0JCSAqIEFkZCBpdCB0byB0aGUgSU8tQVBJQyBpcnEtcm91dGluZyB0YWJsZToKLQkJICovCi0JCWlvYXBpY193cml0ZV9lbnRyeShpb2FwaWNfaTgyNTkuYXBpYywgaW9hcGljX2k4MjU5LnBpbiwgZW50cnkpOwotCX0KLQlkaXNjb25uZWN0X2JzcF9BUElDKGlvYXBpY19pODI1OS5waW4gIT0gLTEpOwotfQotCi0vKgotICogZnVuY3Rpb24gdG8gc2V0IHRoZSBJTy1BUElDIHBoeXNpY2FsIElEcyBiYXNlZCBvbiB0aGUKLSAqIHZhbHVlcyBzdG9yZWQgaW4gdGhlIE1QQyB0YWJsZS4KLSAqCi0gKiBieSBNYXR0IERvbXNjaCA8TWF0dF9Eb21zY2hAZGVsbC5jb20+ICBUdWUgRGVjIDIxIDEyOjI1OjA1IENTVCAxOTk5Ci0gKi8KLQotc3RhdGljIHZvaWQgX19pbml0IHNldHVwX2lvYXBpY19pZHNfZnJvbV9tcGModm9pZCkKLXsKLQl1bmlvbiBJT19BUElDX3JlZ18wMCByZWdfMDA7Ci0JcGh5c2lkX21hc2tfdCBwaHlzX2lkX3ByZXNlbnRfbWFwOwotCWludCBhcGljOwotCWludCBpOwotCXVuc2lnbmVkIGNoYXIgb2xkX2lkOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlpZiAoeDg2X3F1aXJrcy0+c2V0dXBfaW9hcGljX2lkcyAmJiB4ODZfcXVpcmtzLT5zZXR1cF9pb2FwaWNfaWRzKCkpCi0JCXJldHVybjsKLQotCS8qCi0JICogRG9uJ3QgY2hlY2sgSS9PIEFQSUMgSURzIGZvciB4QVBJQyBzeXN0ZW1zLiAgVGhleSBoYXZlCi0JICogbm8gbWVhbmluZyB3aXRob3V0IHRoZSBzZXJpYWwgQVBJQyBidXMuCi0JICovCi0JaWYgKCEoYm9vdF9jcHVfZGF0YS54ODZfdmVuZG9yID09IFg4Nl9WRU5ET1JfSU5URUwpCi0JCXx8IEFQSUNfWEFQSUMoYXBpY192ZXJzaW9uW2Jvb3RfY3B1X3BoeXNpY2FsX2FwaWNpZF0pKQotCQlyZXR1cm47Ci0JLyoKLQkgKiBUaGlzIGlzIGJyb2tlbjsgYW55dGhpbmcgd2l0aCBhIHJlYWwgY3B1IGNvdW50IGhhcyB0bwotCSAqIGNpcmN1bXZlbnQgdGhpcyBpZGlvY3kgcmVnYXJkbGVzcy4KLQkgKi8KLQlwaHlzX2lkX3ByZXNlbnRfbWFwID0gaW9hcGljX3BoeXNfaWRfbWFwKHBoeXNfY3B1X3ByZXNlbnRfbWFwKTsKLQotCS8qCi0JICogU2V0IHRoZSBJT0FQSUMgSUQgdG8gdGhlIHZhbHVlIHN0b3JlZCBpbiB0aGUgTVBDIHRhYmxlLgotCSAqLwotCWZvciAoYXBpYyA9IDA7IGFwaWMgPCBucl9pb2FwaWNzOyBhcGljKyspIHsKLQotCQkvKiBSZWFkIHRoZSByZWdpc3RlciAwIHZhbHVlICovCi0JCXNwaW5fbG9ja19pcnFzYXZlKCZpb2FwaWNfbG9jaywgZmxhZ3MpOwotCQlyZWdfMDAucmF3ID0gaW9fYXBpY19yZWFkKGFwaWMsIDApOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2FwaWNfbG9jaywgZmxhZ3MpOwotCi0JCW9sZF9pZCA9IG1wX2lvYXBpY3NbYXBpY10ubXBfYXBpY2lkOwotCi0JCWlmIChtcF9pb2FwaWNzW2FwaWNdLm1wX2FwaWNpZCA+PSBnZXRfcGh5c2ljYWxfYnJvYWRjYXN0KCkpIHsKLQkJCXByaW50ayhLRVJOX0VSUiAiQklPUyBidWcsIElPLUFQSUMjJWQgSUQgaXMgJWQgaW4gdGhlIE1QQyB0YWJsZSEuLi5cbiIsCi0JCQkJYXBpYywgbXBfaW9hcGljc1thcGljXS5tcF9hcGljaWQpOwotCQkJcHJpbnRrKEtFUk5fRVJSICIuLi4gZml4aW5nIHVwIHRvICVkLiAodGVsbCB5b3VyIGh3IHZlbmRvcilcbiIsCi0JCQkJcmVnXzAwLmJpdHMuSUQpOwotCQkJbXBfaW9hcGljc1thcGljXS5tcF9hcGljaWQgPSByZWdfMDAuYml0cy5JRDsKLQkJfQotCi0JCS8qCi0JCSAqIFNhbml0eSBjaGVjaywgaXMgdGhlIElEIHJlYWxseSBmcmVlPyBFdmVyeSBBUElDIGluIGEKLQkJICogc3lzdGVtIG11c3QgaGF2ZSBhIHVuaXF1ZSBJRCBvciB3ZSBnZXQgbG90cyBvZiBuaWNlCi0JCSAqICdzdHVjayBvbiBzbXBfaW52YWxpZGF0ZV9uZWVkZWQgSVBJIHdhaXQnIG1lc3NhZ2VzLgotCQkgKi8KLQkJaWYgKGNoZWNrX2FwaWNpZF91c2VkKHBoeXNfaWRfcHJlc2VudF9tYXAsCi0JCQkJCW1wX2lvYXBpY3NbYXBpY10ubXBfYXBpY2lkKSkgewotCQkJcHJpbnRrKEtFUk5fRVJSICJCSU9TIGJ1ZywgSU8tQVBJQyMlZCBJRCAlZCBpcyBhbHJlYWR5IHVzZWQhLi4uXG4iLAotCQkJCWFwaWMsIG1wX2lvYXBpY3NbYXBpY10ubXBfYXBpY2lkKTsKLQkJCWZvciAoaSA9IDA7IGkgPCBnZXRfcGh5c2ljYWxfYnJvYWRjYXN0KCk7IGkrKykKLQkJCQlpZiAoIXBoeXNpZF9pc3NldChpLCBwaHlzX2lkX3ByZXNlbnRfbWFwKSkKLQkJCQkJYnJlYWs7Ci0JCQlpZiAoaSA+PSBnZXRfcGh5c2ljYWxfYnJvYWRjYXN0KCkpCi0JCQkJcGFuaWMoIk1heCBBUElDIElEIGV4Y2VlZGVkIVxuIik7Ci0JCQlwcmludGsoS0VSTl9FUlIgIi4uLiBmaXhpbmcgdXAgdG8gJWQuICh0ZWxsIHlvdXIgaHcgdmVuZG9yKVxuIiwKLQkJCQlpKTsKLQkJCXBoeXNpZF9zZXQoaSwgcGh5c19pZF9wcmVzZW50X21hcCk7Ci0JCQltcF9pb2FwaWNzW2FwaWNdLm1wX2FwaWNpZCA9IGk7Ci0JCX0gZWxzZSB7Ci0JCQlwaHlzaWRfbWFza190IHRtcDsKLQkJCXRtcCA9IGFwaWNpZF90b19jcHVfcHJlc2VudChtcF9pb2FwaWNzW2FwaWNdLm1wX2FwaWNpZCk7Ci0JCQlhcGljX3ByaW50ayhBUElDX1ZFUkJPU0UsICJTZXR0aW5nICVkIGluIHRoZSAiCi0JCQkJCSJwaHlzX2lkX3ByZXNlbnRfbWFwXG4iLAotCQkJCQltcF9pb2FwaWNzW2FwaWNdLm1wX2FwaWNpZCk7Ci0JCQlwaHlzaWRzX29yKHBoeXNfaWRfcHJlc2VudF9tYXAsIHBoeXNfaWRfcHJlc2VudF9tYXAsIHRtcCk7Ci0JCX0KLQotCi0JCS8qCi0JCSAqIFdlIG5lZWQgdG8gYWRqdXN0IHRoZSBJUlEgcm91dGluZyB0YWJsZQotCQkgKiBpZiB0aGUgSUQgY2hhbmdlZC4KLQkJICovCi0JCWlmIChvbGRfaWQgIT0gbXBfaW9hcGljc1thcGljXS5tcF9hcGljaWQpCi0JCQlmb3IgKGkgPSAwOyBpIDwgbXBfaXJxX2VudHJpZXM7IGkrKykKLQkJCQlpZiAobXBfaXJxc1tpXS5tcF9kc3RhcGljID09IG9sZF9pZCkKLQkJCQkJbXBfaXJxc1tpXS5tcF9kc3RhcGljCi0JCQkJCQk9IG1wX2lvYXBpY3NbYXBpY10ubXBfYXBpY2lkOwotCi0JCS8qCi0JCSAqIFJlYWQgdGhlIHJpZ2h0IHZhbHVlIGZyb20gdGhlIE1QQyB0YWJsZSBhbmQKLQkJICogd3JpdGUgaXQgaW50byB0aGUgSUQgcmVnaXN0ZXIuCi0JCSAqLwotCQlhcGljX3ByaW50ayhBUElDX1ZFUkJPU0UsIEtFUk5fSU5GTwotCQkJIi4uLmNoYW5naW5nIElPLUFQSUMgcGh5c2ljYWwgQVBJQyBJRCB0byAlZCAuLi4iLAotCQkJbXBfaW9hcGljc1thcGljXS5tcF9hcGljaWQpOwotCi0JCXJlZ18wMC5iaXRzLklEID0gbXBfaW9hcGljc1thcGljXS5tcF9hcGljaWQ7Ci0JCXNwaW5fbG9ja19pcnFzYXZlKCZpb2FwaWNfbG9jaywgZmxhZ3MpOwotCQlpb19hcGljX3dyaXRlKGFwaWMsIDAsIHJlZ18wMC5yYXcpOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2FwaWNfbG9jaywgZmxhZ3MpOwotCi0JCS8qCi0JCSAqIFNhbml0eSBjaGVjawotCQkgKi8KLQkJc3Bpbl9sb2NrX2lycXNhdmUoJmlvYXBpY19sb2NrLCBmbGFncyk7Ci0JCXJlZ18wMC5yYXcgPSBpb19hcGljX3JlYWQoYXBpYywgMCk7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYXBpY19sb2NrLCBmbGFncyk7Ci0JCWlmIChyZWdfMDAuYml0cy5JRCAhPSBtcF9pb2FwaWNzW2FwaWNdLm1wX2FwaWNpZCkKLQkJCXByaW50aygiY291bGQgbm90IHNldCBJRCFcbiIpOwotCQllbHNlCi0JCQlhcGljX3ByaW50ayhBUElDX1ZFUkJPU0UsICIgb2suXG4iKTsKLQl9Ci19Ci0KLWludCBub190aW1lcl9jaGVjayBfX2luaXRkYXRhOwotCi1zdGF0aWMgaW50IF9faW5pdCBub3RpbWVyY2hlY2soY2hhciAqcykKLXsKLQlub190aW1lcl9jaGVjayA9IDE7Ci0JcmV0dXJuIDE7Ci19Ci1fX3NldHVwKCJub190aW1lcl9jaGVjayIsIG5vdGltZXJjaGVjayk7Ci0KLS8qCi0gKiBUaGVyZSBpcyBhIG5hc3R5IGJ1ZyBpbiBzb21lIG9sZGVyIFNNUCBib2FyZHMsIHRoZWlyIG1wdGFibGUgbGllcwotICogYWJvdXQgdGhlIHRpbWVyIElSUS4gV2UgZG8gdGhlIGZvbGxvd2luZyB0byB3b3JrIGFyb3VuZCB0aGUgc2l0dWF0aW9uOgotICoKLSAqCS0gdGltZXIgSVJRIGRlZmF1bHRzIHRvIElPLUFQSUMgSVJRCi0gKgktIGlmIHRoaXMgZnVuY3Rpb24gZGV0ZWN0cyB0aGF0IHRpbWVyIElSUXMgYXJlIGRlZnVuY3QsIHRoZW4gd2UgZmFsbAotICoJICBiYWNrIHRvIElTQSB0aW1lciBJUlFzCi0gKi8KLXN0YXRpYyBpbnQgX19pbml0IHRpbWVyX2lycV93b3Jrcyh2b2lkKQotewotCXVuc2lnbmVkIGxvbmcgdDEgPSBqaWZmaWVzOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlpZiAobm9fdGltZXJfY2hlY2spCi0JCXJldHVybiAxOwotCi0JbG9jYWxfc2F2ZV9mbGFncyhmbGFncyk7Ci0JbG9jYWxfaXJxX2VuYWJsZSgpOwotCS8qIExldCB0ZW4gdGlja3MgcGFzcy4uLiAqLwotCW1kZWxheSgoMTAgKiAxMDAwKSAvIEhaKTsKLQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Ci0KLQkvKgotCSAqIEV4cGVjdCBhIGZldyB0aWNrcyBhdCBsZWFzdCwgdG8gYmUgc3VyZSBzb21lIHBvc3NpYmxlCi0JICogZ2x1ZSBsb2dpYyBkb2VzIG5vdCBsb2NrIHVwIGFmdGVyIG9uZSBvciB0d28gZmlyc3QKLQkgKiB0aWNrcyBpbiBhIG5vbi1FeHRJTlQgbW9kZS4gIEFsc28gdGhlIGxvY2FsIEFQSUMKLQkgKiBtaWdodCBoYXZlIGNhY2hlZCBvbmUgRXh0SU5UIGludGVycnVwdC4gIEZpbmFsbHksIGF0Ci0JICogbGVhc3Qgb25lIHRpY2sgbWF5IGJlIGxvc3QgZHVlIHRvIGRlbGF5cy4KLQkgKi8KLQlpZiAodGltZV9hZnRlcihqaWZmaWVzLCB0MSArIDQpKQotCQlyZXR1cm4gMTsKLQotCXJldHVybiAwOwotfQotCi0vKgotICogSW4gdGhlIFNNUCtJT0FQSUMgY2FzZSBpdCBtaWdodCBoYXBwZW4gdGhhdCB0aGVyZSBhcmUgYW4gdW5zcGVjaWZpZWQKLSAqIG51bWJlciBvZiBwZW5kaW5nIElSUSBldmVudHMgdW5oYW5kbGVkLiBUaGVzZSBjYXNlcyBhcmUgdmVyeSByYXJlLAotICogc28gd2UgJ3Jlc2VuZCcgdGhlc2UgSVJRcyB2aWEgSVBJcywgdG8gdGhlIHNhbWUgQ1BVLiBJdCdzIG11Y2gKLSAqIGJldHRlciB0byBkbyBpdCB0aGlzIHdheSBhcyB0aHVzIHdlIGRvIG5vdCBoYXZlIHRvIGJlIGF3YXJlIG9mCi0gKiAncGVuZGluZycgaW50ZXJydXB0cyBpbiB0aGUgSVJRIHBhdGgsIGV4Y2VwdCBhdCB0aGlzIHBvaW50LgotICovCi0vKgotICogRWRnZSB0cmlnZ2VyZWQgbmVlZHMgdG8gcmVzZW5kIGFueSBpbnRlcnJ1cHQKLSAqIHRoYXQgd2FzIGRlbGF5ZWQgYnV0IHRoaXMgaXMgbm93IGhhbmRsZWQgaW4gdGhlIGRldmljZQotICogaW5kZXBlbmRlbnQgY29kZS4KLSAqLwotCi0vKgotICogU3RhcnR1cCBxdWlyazoKLSAqCi0gKiBTdGFydGluZyB1cCBhIGVkZ2UtdHJpZ2dlcmVkIElPLUFQSUMgaW50ZXJydXB0IGlzCi0gKiBuYXN0eSAtIHdlIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgd2UgZ2V0IHRoZSBlZGdlLgotICogSWYgaXQgaXMgYWxyZWFkeSBhc3NlcnRlZCBmb3Igc29tZSByZWFzb24sIHdlIG5lZWQKLSAqIHJldHVybiAxIHRvIGluZGljYXRlIHRoYXQgaXMgd2FzIHBlbmRpbmcuCi0gKgotICogVGhpcyBpcyBub3QgY29tcGxldGUgLSB3ZSBzaG91bGQgYmUgYWJsZSB0byBmYWtlCi0gKiBhbiBlZGdlIGV2ZW4gaWYgaXQgaXNuJ3Qgb24gdGhlIDgyNTlBLi4uCi0gKgotICogKFdlIGRvIHRoaXMgZm9yIGxldmVsLXRyaWdnZXJlZCBJUlFzIHRvbyAtIGl0IGNhbm5vdCBodXJ0LikKLSAqLwotc3RhdGljIHVuc2lnbmVkIGludCBzdGFydHVwX2lvYXBpY19pcnEodW5zaWduZWQgaW50IGlycSkKLXsKLQlpbnQgd2FzX3BlbmRpbmcgPSAwOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmaW9hcGljX2xvY2ssIGZsYWdzKTsKLQlpZiAoaXJxIDwgMTYpIHsKLQkJZGlzYWJsZV84MjU5QV9pcnEoaXJxKTsKLQkJaWYgKGk4MjU5QV9pcnFfcGVuZGluZyhpcnEpKQotCQkJd2FzX3BlbmRpbmcgPSAxOwotCX0KLQlfX3VubWFza19JT19BUElDX2lycShpcnEpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYXBpY19sb2NrLCBmbGFncyk7Ci0KLQlyZXR1cm4gd2FzX3BlbmRpbmc7Ci19Ci0KLXN0YXRpYyB2b2lkIGFja19pb2FwaWNfaXJxKHVuc2lnbmVkIGludCBpcnEpCi17Ci0JbW92ZV9uYXRpdmVfaXJxKGlycSk7Ci0JYWNrX0FQSUNfaXJxKCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGFja19pb2FwaWNfcXVpcmtfaXJxKHVuc2lnbmVkIGludCBpcnEpCi17Ci0JdW5zaWduZWQgbG9uZyB2OwotCWludCBpOwotCi0JbW92ZV9uYXRpdmVfaXJxKGlycSk7Ci0vKgotICogSXQgYXBwZWFycyB0aGVyZSBpcyBhbiBlcnJhdHVtIHdoaWNoIGFmZmVjdHMgYXQgbGVhc3QgdmVyc2lvbiAweDExCi0gKiBvZiBJL08gQVBJQyAodGhhdCdzIHRoZSA4MjA5M0FBIGFuZCBjb3JlcyBpbnRlZ3JhdGVkIGludG8gdmFyaW91cwotICogY2hpcHNldHMpLiAgVW5kZXIgY2VydGFpbiBjb25kaXRpb25zIGEgbGV2ZWwtdHJpZ2dlcmVkIGludGVycnVwdCBpcwotICogZXJyb25lb3VzbHkgZGVsaXZlcmVkIGFzIGVkZ2UtdHJpZ2dlcmVkIG9uZSBidXQgdGhlIHJlc3BlY3RpdmUgSVJSCi0gKiBiaXQgZ2V0cyBzZXQgbmV2ZXJ0aGVsZXNzLiAgQXMgYSByZXN1bHQgdGhlIEkvTyB1bml0IGV4cGVjdHMgYW4gRU9JCi0gKiBtZXNzYWdlIGJ1dCBpdCB3aWxsIG5ldmVyIGFycml2ZSBhbmQgZnVydGhlciBpbnRlcnJ1cHRzIGFyZSBibG9ja2VkCi0gKiBmcm9tIHRoZSBzb3VyY2UuICBUaGUgZXhhY3QgcmVhc29uIGlzIHNvIGZhciB1bmtub3duLCBidXQgdGhlCi0gKiBwaGVub21lbm9uIHdhcyBvYnNlcnZlZCB3aGVuIHR3byBjb25zZWN1dGl2ZSBpbnRlcnJ1cHQgcmVxdWVzdHMKLSAqIGZyb20gYSBnaXZlbiBzb3VyY2UgZ2V0IGRlbGl2ZXJlZCB0byB0aGUgc2FtZSBDUFUgYW5kIHRoZSBzb3VyY2UgaXMKLSAqIHRlbXBvcmFyaWx5IGRpc2FibGVkIGluIGJldHdlZW4uCi0gKgotICogQSB3b3JrYXJvdW5kIGlzIHRvIHNpbXVsYXRlIGFuIEVPSSBtZXNzYWdlIG1hbnVhbGx5LiAgV2UgYWNoaWV2ZSBpdAotICogYnkgc2V0dGluZyB0aGUgdHJpZ2dlciBtb2RlIHRvIGVkZ2UgYW5kIHRoZW4gdG8gbGV2ZWwgd2hlbiB0aGUgZWRnZQotICogdHJpZ2dlciBtb2RlIGdldHMgZGV0ZWN0ZWQgaW4gdGhlIFRNUiBvZiBhIGxvY2FsIEFQSUMgZm9yIGEKLSAqIGxldmVsLXRyaWdnZXJlZCBpbnRlcnJ1cHQuICBXZSBtYXNrIHRoZSBzb3VyY2UgZm9yIHRoZSB0aW1lIG9mIHRoZQotICogb3BlcmF0aW9uIHRvIHByZXZlbnQgYW4gZWRnZS10cmlnZ2VyZWQgaW50ZXJydXB0IGVzY2FwaW5nIG1lYW53aGlsZS4KLSAqIFRoZSBpZGVhIGlzIGZyb20gTWFuZnJlZCBTcHJhdWwuICAtLW1hY3JvCi0gKi8KLQlpID0gaXJxX3ZlY3RvcltpcnFdOwotCi0JdiA9IGFwaWNfcmVhZChBUElDX1RNUiArICgoaSAmIH4weDFmKSA+PiAxKSk7Ci0KLQlhY2tfQVBJQ19pcnEoKTsKLQotCWlmICghKHYgJiAoMSA8PCAoaSAmIDB4MWYpKSkpIHsKLQkJYXRvbWljX2luYygmaXJxX21pc19jb3VudCk7Ci0JCXNwaW5fbG9jaygmaW9hcGljX2xvY2spOwotCQlfX21hc2tfYW5kX2VkZ2VfSU9fQVBJQ19pcnEoaXJxKTsKLQkJX191bm1hc2tfYW5kX2xldmVsX0lPX0FQSUNfaXJxKGlycSk7Ci0JCXNwaW5fdW5sb2NrKCZpb2FwaWNfbG9jayk7Ci0JfQotfQotCi1zdGF0aWMgaW50IGlvYXBpY19yZXRyaWdnZXJfaXJxKHVuc2lnbmVkIGludCBpcnEpCi17Ci0Jc2VuZF9JUElfc2VsZihpcnFfdmVjdG9yW2lycV0pOwotCi0JcmV0dXJuIDE7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgaW9hcGljX2NoaXAgX19yZWFkX21vc3RseSA9IHsKLQkubmFtZSAJCT0gIklPLUFQSUMiLAotCS5zdGFydHVwIAk9IHN0YXJ0dXBfaW9hcGljX2lycSwKLQkubWFzawkgCT0gbWFza19JT19BUElDX2lycSwKLQkudW5tYXNrCSAJPSB1bm1hc2tfSU9fQVBJQ19pcnEsCi0JLmFjayAJCT0gYWNrX2lvYXBpY19pcnEsCi0JLmVvaSAJCT0gYWNrX2lvYXBpY19xdWlya19pcnEsCi0jaWZkZWYgQ09ORklHX1NNUAotCS5zZXRfYWZmaW5pdHkgCT0gc2V0X2lvYXBpY19hZmZpbml0eV9pcnEsCi0jZW5kaWYKLQkucmV0cmlnZ2VyCT0gaW9hcGljX3JldHJpZ2dlcl9pcnEsCi19OwotCi0KLXN0YXRpYyBpbmxpbmUgdm9pZCBpbml0X0lPX0FQSUNfdHJhcHModm9pZCkKLXsKLQlpbnQgaXJxOwotCi0JLyoKLQkgKiBOT1RFISBUaGUgbG9jYWwgQVBJQyBpc24ndCB2ZXJ5IGdvb2QgYXQgaGFuZGxpbmcKLQkgKiBtdWx0aXBsZSBpbnRlcnJ1cHRzIGF0IHRoZSBzYW1lIGludGVycnVwdCBsZXZlbC4KLQkgKiBBcyB0aGUgaW50ZXJydXB0IGxldmVsIGlzIGRldGVybWluZWQgYnkgdGFraW5nIHRoZQotCSAqIHZlY3RvciBudW1iZXIgYW5kIHNoaWZ0aW5nIHRoYXQgcmlnaHQgYnkgNCwgd2UKLQkgKiB3YW50IHRvIHNwcmVhZCB0aGVzZSBvdXQgYSBiaXQgc28gdGhhdCB0aGV5IGRvbid0Ci0JICogYWxsIGZhbGwgaW4gdGhlIHNhbWUgaW50ZXJydXB0IGxldmVsLgotCSAqCi0JICogQWxzbywgd2UndmUgZ290IHRvIGJlIGNhcmVmdWwgbm90IHRvIHRyYXNoIGdhdGUKLQkgKiAweDgwLCBiZWNhdXNlIGludCAweDgwIGlzIGhtLCBraW5kIG9mIGltcG9ydGFudGlzaC4gOykKLQkgKi8KLQlmb3IgKGlycSA9IDA7IGlycSA8IE5SX0lSUVMgOyBpcnErKykgewotCQlpZiAoSU9fQVBJQ19JUlEoaXJxKSAmJiAhaXJxX3ZlY3RvcltpcnFdKSB7Ci0JCQkvKgotCQkJICogSG1tLi4gV2UgZG9uJ3QgaGF2ZSBhbiBlbnRyeSBmb3IgdGhpcywKLQkJCSAqIHNvIGRlZmF1bHQgdG8gYW4gb2xkLWZhc2hpb25lZCA4MjU5Ci0JCQkgKiBpbnRlcnJ1cHQgaWYgd2UgY2FuLi4KLQkJCSAqLwotCQkJaWYgKGlycSA8IDE2KQotCQkJCW1ha2VfODI1OUFfaXJxKGlycSk7Ci0JCQllbHNlCi0JCQkJLyogU3RyYW5nZS4gT2gsIHdlbGwuLiAqLwotCQkJCWlycV9kZXNjW2lycV0uY2hpcCA9ICZub19pcnFfY2hpcDsKLQkJfQotCX0KLX0KLQotLyoKLSAqIFRoZSBsb2NhbCBBUElDIGlycS1jaGlwIGltcGxlbWVudGF0aW9uOgotICovCi0KLXN0YXRpYyB2b2lkIGFja19sYXBpY19pcnEodW5zaWduZWQgaW50IGlycSkKLXsKLQlhY2tfQVBJQ19pcnEoKTsKLX0KLQotc3RhdGljIHZvaWQgbWFza19sYXBpY19pcnEodW5zaWduZWQgaW50IGlycSkKLXsKLQl1bnNpZ25lZCBsb25nIHY7Ci0KLQl2ID0gYXBpY19yZWFkKEFQSUNfTFZUMCk7Ci0JYXBpY193cml0ZShBUElDX0xWVDAsIHYgfCBBUElDX0xWVF9NQVNLRUQpOwotfQotCi1zdGF0aWMgdm9pZCB1bm1hc2tfbGFwaWNfaXJxKHVuc2lnbmVkIGludCBpcnEpCi17Ci0JdW5zaWduZWQgbG9uZyB2OwotCi0JdiA9IGFwaWNfcmVhZChBUElDX0xWVDApOwotCWFwaWNfd3JpdGUoQVBJQ19MVlQwLCB2ICYgfkFQSUNfTFZUX01BU0tFRCk7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgbGFwaWNfY2hpcCBfX3JlYWRfbW9zdGx5ID0gewotCS5uYW1lCQk9ICJsb2NhbC1BUElDIiwKLQkubWFzawkJPSBtYXNrX2xhcGljX2lycSwKLQkudW5tYXNrCQk9IHVubWFza19sYXBpY19pcnEsCi0JLmFjawkJPSBhY2tfbGFwaWNfaXJxLAotfTsKLQotc3RhdGljIHZvaWQgbGFwaWNfcmVnaXN0ZXJfaW50cihpbnQgaXJxLCBpbnQgdmVjdG9yKQotewotCWlycV9kZXNjW2lycV0uc3RhdHVzICY9IH5JUlFfTEVWRUw7Ci0Jc2V0X2lycV9jaGlwX2FuZF9oYW5kbGVyX25hbWUoaXJxLCAmbGFwaWNfY2hpcCwgaGFuZGxlX2VkZ2VfaXJxLAotCQkJCSAgICAgICJlZGdlIik7Ci0Jc2V0X2ludHJfZ2F0ZSh2ZWN0b3IsIGludGVycnVwdFtpcnFdKTsKLX0KLQotc3RhdGljIHZvaWQgX19pbml0IHNldHVwX25taSh2b2lkKQotewotCS8qCi0JICogRGlydHkgdHJpY2sgdG8gZW5hYmxlIHRoZSBOTUkgd2F0Y2hkb2cgLi4uCi0JICogV2UgcHV0IHRoZSA4MjU5QSBtYXN0ZXIgaW50byBBRU9JIG1vZGUgYW5kCi0JICogdW5tYXNrIG9uIGFsbCBsb2NhbCBBUElDcyBMVlQwIGFzIE5NSS4KLQkgKgotCSAqIFRoZSBpZGVhIHRvIHVzZSB0aGUgODI1OUEgaW4gQUVPSSBtb2RlICgnODI1OUEgVmlydHVhbCBXaXJlJykKLQkgKiBpcyBmcm9tIE1hY2llaiBXLiBSb3p5Y2tpIC0gc28gd2UgZG8gbm90IGhhdmUgdG8gRU9JIGZyb20KLQkgKiB0aGUgTk1JIGhhbmRsZXIgb3IgdGhlIHRpbWVyIGludGVycnVwdC4KLQkgKi8KLQlhcGljX3ByaW50ayhBUElDX1ZFUkJPU0UsIEtFUk5fSU5GTyAiYWN0aXZhdGluZyBOTUkgV2F0Y2hkb2cgLi4uIik7Ci0KLQllbmFibGVfTk1JX3Rocm91Z2hfTFZUMCgpOwotCi0JYXBpY19wcmludGsoQVBJQ19WRVJCT1NFLCAiIGRvbmUuXG4iKTsKLX0KLQotLyoKLSAqIFRoaXMgbG9va3MgYSBiaXQgaGFja2lzaCBidXQgaXQncyBhYm91dCB0aGUgb25seSBvbmUgd2F5IG9mIHNlbmRpbmcKLSAqIGEgZmV3IElOVEEgY3ljbGVzIHRvIDgyNTlBcyBhbmQgYW55IGFzc29jaWF0ZWQgZ2x1ZSBsb2dpYy4gIElDUiBkb2VzCi0gKiBub3Qgc3VwcG9ydCB0aGUgRXh0SU5UIG1vZGUsIHVuZm9ydHVuYXRlbHkuICBXZSBuZWVkIHRvIHNlbmQgdGhlc2UKLSAqIGN5Y2xlcyBhcyBzb21lIGk4MjQ4OURYLWJhc2VkIGJvYXJkcyBoYXZlIGdsdWUgbG9naWMgdGhhdCBrZWVwcyB0aGUKLSAqIDgyNTlBIGludGVycnVwdCBsaW5lIGFzc2VydGVkIHVudGlsIElOVEEuICAtLW1hY3JvCi0gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBfX2luaXQgdW5sb2NrX0V4dElOVF9sb2dpYyh2b2lkKQotewotCWludCBhcGljLCBwaW4sIGk7Ci0Jc3RydWN0IElPX0FQSUNfcm91dGVfZW50cnkgZW50cnkwLCBlbnRyeTE7Ci0JdW5zaWduZWQgY2hhciBzYXZlX2NvbnRyb2wsIHNhdmVfZnJlcV9zZWxlY3Q7Ci0KLQlwaW4gID0gZmluZF9pc2FfaXJxX3Bpbig4LCBtcF9JTlQpOwotCWlmIChwaW4gPT0gLTEpIHsKLQkJV0FSTl9PTl9PTkNFKDEpOwotCQlyZXR1cm47Ci0JfQotCWFwaWMgPSBmaW5kX2lzYV9pcnFfYXBpYyg4LCBtcF9JTlQpOwotCWlmIChhcGljID09IC0xKSB7Ci0JCVdBUk5fT05fT05DRSgxKTsKLQkJcmV0dXJuOwotCX0KLQotCWVudHJ5MCA9IGlvYXBpY19yZWFkX2VudHJ5KGFwaWMsIHBpbik7Ci0JY2xlYXJfSU9fQVBJQ19waW4oYXBpYywgcGluKTsKLQotCW1lbXNldCgmZW50cnkxLCAwLCBzaXplb2YoZW50cnkxKSk7Ci0KLQllbnRyeTEuZGVzdF9tb2RlID0gMDsJCQkvKiBwaHlzaWNhbCBkZWxpdmVyeSAqLwotCWVudHJ5MS5tYXNrID0gMDsJCQkvKiB1bm1hc2sgSVJRIG5vdyAqLwotCWVudHJ5MS5kZXN0LnBoeXNpY2FsLnBoeXNpY2FsX2Rlc3QgPSBoYXJkX3NtcF9wcm9jZXNzb3JfaWQoKTsKLQllbnRyeTEuZGVsaXZlcnlfbW9kZSA9IGRlc3RfRXh0SU5UOwotCWVudHJ5MS5wb2xhcml0eSA9IGVudHJ5MC5wb2xhcml0eTsKLQllbnRyeTEudHJpZ2dlciA9IDA7Ci0JZW50cnkxLnZlY3RvciA9IDA7Ci0KLQlpb2FwaWNfd3JpdGVfZW50cnkoYXBpYywgcGluLCBlbnRyeTEpOwotCi0Jc2F2ZV9jb250cm9sID0gQ01PU19SRUFEKFJUQ19DT05UUk9MKTsKLQlzYXZlX2ZyZXFfc2VsZWN0ID0gQ01PU19SRUFEKFJUQ19GUkVRX1NFTEVDVCk7Ci0JQ01PU19XUklURSgoc2F2ZV9mcmVxX3NlbGVjdCAmIH5SVENfUkFURV9TRUxFQ1QpIHwgMHg2LAotCQkgICBSVENfRlJFUV9TRUxFQ1QpOwotCUNNT1NfV1JJVEUoc2F2ZV9jb250cm9sIHwgUlRDX1BJRSwgUlRDX0NPTlRST0wpOwotCi0JaSA9IDEwMDsKLQl3aGlsZSAoaS0tID4gMCkgewotCQltZGVsYXkoMTApOwotCQlpZiAoKENNT1NfUkVBRChSVENfSU5UUl9GTEFHUykgJiBSVENfUEYpID09IFJUQ19QRikKLQkJCWkgLT0gMTA7Ci0JfQotCi0JQ01PU19XUklURShzYXZlX2NvbnRyb2wsIFJUQ19DT05UUk9MKTsKLQlDTU9TX1dSSVRFKHNhdmVfZnJlcV9zZWxlY3QsIFJUQ19GUkVRX1NFTEVDVCk7Ci0JY2xlYXJfSU9fQVBJQ19waW4oYXBpYywgcGluKTsKLQotCWlvYXBpY193cml0ZV9lbnRyeShhcGljLCBwaW4sIGVudHJ5MCk7Ci19Ci0KLS8qCi0gKiBUaGlzIGNvZGUgbWF5IGxvb2sgYSBiaXQgcGFyYW5vaWQsIGJ1dCBpdCdzIHN1cHBvc2VkIHRvIGNvb3BlcmF0ZSB3aXRoCi0gKiBhIHdpZGUgcmFuZ2Ugb2YgYm9hcmRzIGFuZCBCSU9TIGJ1Z3MuICBGb3J0dW5hdGVseSBvbmx5IHRoZSB0aW1lciBJUlEKLSAqIGlzIHNvIHNjcmV3eS4gIFRoYW5rcyB0byBCcmlhbiBQZXJraW5zIGZvciB0ZXN0aW5nL2hhY2tpbmcgdGhpcyBiZWFzdAotICogZmFuYXRpY2FsbHkgb24gaGlzIHRydWx5IGJ1Z2d5IGJvYXJkLgotICovCi1zdGF0aWMgaW5saW5lIHZvaWQgX19pbml0IGNoZWNrX3RpbWVyKHZvaWQpCi17Ci0JaW50IGFwaWMxLCBwaW4xLCBhcGljMiwgcGluMjsKLQlpbnQgbm9fcGluMSA9IDA7Ci0JaW50IHZlY3RvcjsKLQl1bnNpZ25lZCBpbnQgdmVyOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0KLQl2ZXIgPSBhcGljX3JlYWQoQVBJQ19MVlIpOwotCXZlciA9IEdFVF9BUElDX1ZFUlNJT04odmVyKTsKLQotCS8qCi0JICogZ2V0L3NldCB0aGUgdGltZXIgSVJRIHZlY3RvcjoKLQkgKi8KLQlkaXNhYmxlXzgyNTlBX2lycSgwKTsKLQl2ZWN0b3IgPSBhc3NpZ25faXJxX3ZlY3RvcigwKTsKLQlzZXRfaW50cl9nYXRlKHZlY3RvciwgaW50ZXJydXB0WzBdKTsKLQotCS8qCi0JICogQXMgSVJRMCBpcyB0byBiZSBlbmFibGVkIGluIHRoZSA4MjU5QSwgdGhlIHZpcnR1YWwKLQkgKiB3aXJlIGhhcyB0byBiZSBkaXNhYmxlZCBpbiB0aGUgbG9jYWwgQVBJQy4gIEFsc28KLQkgKiB0aW1lciBpbnRlcnJ1cHRzIG5lZWQgdG8gYmUgYWNrbm93bGVkZ2VkIG1hbnVhbGx5IGluCi0JICogdGhlIDgyNTlBIGZvciB0aGUgaTgyNDg5RFggd2hlbiB1c2luZyB0aGUgTk1JCi0JICogd2F0Y2hkb2cgYXMgdGhhdCBBUElDIHRyZWF0cyBOTUlzIGFzIGxldmVsLXRyaWdnZXJlZC4KLQkgKiBUaGUgQUVPSSBtb2RlIHdpbGwgZmluaXNoIHRoZW0gaW4gdGhlIDgyNTlBCi0JICogYXV0b21hdGljYWxseS4KLQkgKi8KLQlhcGljX3dyaXRlKEFQSUNfTFZUMCwgQVBJQ19MVlRfTUFTS0VEIHwgQVBJQ19ETV9FWFRJTlQpOwotCWluaXRfODI1OUEoMSk7Ci0JdGltZXJfYWNrID0gKG5taV93YXRjaGRvZyA9PSBOTUlfSU9fQVBJQyAmJiAhQVBJQ19JTlRFR1JBVEVEKHZlcikpOwotCi0JcGluMSAgPSBmaW5kX2lzYV9pcnFfcGluKDAsIG1wX0lOVCk7Ci0JYXBpYzEgPSBmaW5kX2lzYV9pcnFfYXBpYygwLCBtcF9JTlQpOwotCXBpbjIgID0gaW9hcGljX2k4MjU5LnBpbjsKLQlhcGljMiA9IGlvYXBpY19pODI1OS5hcGljOwotCi0JYXBpY19wcmludGsoQVBJQ19RVUlFVCwgS0VSTl9JTkZPICIuLlRJTUVSOiB2ZWN0b3I9MHglMDJYICIKLQkJICAgICJhcGljMT0lZCBwaW4xPSVkIGFwaWMyPSVkIHBpbjI9JWRcbiIsCi0JCSAgICB2ZWN0b3IsIGFwaWMxLCBwaW4xLCBhcGljMiwgcGluMik7Ci0KLQkvKgotCSAqIFNvbWUgQklPUyB3cml0ZXJzIGFyZSBjbHVlbGVzcyBhbmQgcmVwb3J0IHRoZSBFeHRJTlRBCi0JICogSS9PIEFQSUMgaW5wdXQgZnJvbSB0aGUgY2FzY2FkZWQgODI1OUEgYXMgdGhlIHRpbWVyCi0JICogaW50ZXJydXB0IGlucHV0LiAgU28ganVzdCBpbiBjYXNlLCBpZiBvbmx5IG9uZSBwaW4KLQkgKiB3YXMgZm91bmQgYWJvdmUsIHRyeSBpdCBib3RoIGRpcmVjdGx5IGFuZCB0aHJvdWdoIHRoZQotCSAqIDgyNTlBLgotCSAqLwotCWlmIChwaW4xID09IC0xKSB7Ci0JCXBpbjEgPSBwaW4yOwotCQlhcGljMSA9IGFwaWMyOwotCQlub19waW4xID0gMTsKLQl9IGVsc2UgaWYgKHBpbjIgPT0gLTEpIHsKLQkJcGluMiA9IHBpbjE7Ci0JCWFwaWMyID0gYXBpYzE7Ci0JfQotCi0JaWYgKHBpbjEgIT0gLTEpIHsKLQkJLyoKLQkJICogT2ssIGRvZXMgSVJRMCB0aHJvdWdoIHRoZSBJT0FQSUMgd29yaz8KLQkJICovCi0JCWlmIChub19waW4xKSB7Ci0JCQlhZGRfcGluX3RvX2lycSgwLCBhcGljMSwgcGluMSk7Ci0JCQlzZXR1cF90aW1lcl9JUlEwX3BpbihhcGljMSwgcGluMSwgdmVjdG9yKTsKLQkJfQotCQl1bm1hc2tfSU9fQVBJQ19pcnEoMCk7Ci0JCWlmICh0aW1lcl9pcnFfd29ya3MoKSkgewotCQkJaWYgKG5taV93YXRjaGRvZyA9PSBOTUlfSU9fQVBJQykgewotCQkJCXNldHVwX25taSgpOwotCQkJCWVuYWJsZV84MjU5QV9pcnEoMCk7Ci0JCQl9Ci0JCQlpZiAoZGlzYWJsZV90aW1lcl9waW5fMSA+IDApCi0JCQkJY2xlYXJfSU9fQVBJQ19waW4oMCwgcGluMSk7Ci0JCQlnb3RvIG91dDsKLQkJfQotCQljbGVhcl9JT19BUElDX3BpbihhcGljMSwgcGluMSk7Ci0JCWlmICghbm9fcGluMSkKLQkJCWFwaWNfcHJpbnRrKEFQSUNfUVVJRVQsIEtFUk5fRVJSICIuLk1QLUJJT1MgYnVnOiAiCi0JCQkJICAgICI4MjU0IHRpbWVyIG5vdCBjb25uZWN0ZWQgdG8gSU8tQVBJQ1xuIik7Ci0KLQkJYXBpY19wcmludGsoQVBJQ19RVUlFVCwgS0VSTl9JTkZPICIuLi50cnlpbmcgdG8gc2V0IHVwIHRpbWVyICIKLQkJCSAgICAiKElSUTApIHRocm91Z2ggdGhlIDgyNTlBIC4uLlxuIik7Ci0JCWFwaWNfcHJpbnRrKEFQSUNfUVVJRVQsIEtFUk5fSU5GTwotCQkJICAgICIuLi4uLiAoZm91bmQgYXBpYyAlZCBwaW4gJWQpIC4uLlxuIiwgYXBpYzIsIHBpbjIpOwotCQkvKgotCQkgKiBsZWdhY3kgZGV2aWNlcyBzaG91bGQgYmUgY29ubmVjdGVkIHRvIElPIEFQSUMgIzAKLQkJICovCi0JCXJlcGxhY2VfcGluX2F0X2lycSgwLCBhcGljMSwgcGluMSwgYXBpYzIsIHBpbjIpOwotCQlzZXR1cF90aW1lcl9JUlEwX3BpbihhcGljMiwgcGluMiwgdmVjdG9yKTsKLQkJdW5tYXNrX0lPX0FQSUNfaXJxKDApOwotCQllbmFibGVfODI1OUFfaXJxKDApOwotCQlpZiAodGltZXJfaXJxX3dvcmtzKCkpIHsKLQkJCWFwaWNfcHJpbnRrKEFQSUNfUVVJRVQsIEtFUk5fSU5GTyAiLi4uLi4uLiB3b3Jrcy5cbiIpOwotCQkJdGltZXJfdGhyb3VnaF84MjU5ID0gMTsKLQkJCWlmIChubWlfd2F0Y2hkb2cgPT0gTk1JX0lPX0FQSUMpIHsKLQkJCQlkaXNhYmxlXzgyNTlBX2lycSgwKTsKLQkJCQlzZXR1cF9ubWkoKTsKLQkJCQllbmFibGVfODI1OUFfaXJxKDApOwotCQkJfQotCQkJZ290byBvdXQ7Ci0JCX0KLQkJLyoKLQkJICogQ2xlYW51cCwganVzdCBpbiBjYXNlIC4uLgotCQkgKi8KLQkJZGlzYWJsZV84MjU5QV9pcnEoMCk7Ci0JCWNsZWFyX0lPX0FQSUNfcGluKGFwaWMyLCBwaW4yKTsKLQkJYXBpY19wcmludGsoQVBJQ19RVUlFVCwgS0VSTl9JTkZPICIuLi4uLi4uIGZhaWxlZC5cbiIpOwotCX0KLQotCWlmIChubWlfd2F0Y2hkb2cgPT0gTk1JX0lPX0FQSUMpIHsKLQkJYXBpY19wcmludGsoQVBJQ19RVUlFVCwgS0VSTl9XQVJOSU5HICJ0aW1lciBkb2Vzbid0IHdvcmsgIgotCQkJICAgICJ0aHJvdWdoIHRoZSBJTy1BUElDIC0gZGlzYWJsaW5nIE5NSSBXYXRjaGRvZyFcbiIpOwotCQlubWlfd2F0Y2hkb2cgPSBOTUlfTk9ORTsKLQl9Ci0JdGltZXJfYWNrID0gMDsKLQotCWFwaWNfcHJpbnRrKEFQSUNfUVVJRVQsIEtFUk5fSU5GTwotCQkgICAgIi4uLnRyeWluZyB0byBzZXQgdXAgdGltZXIgYXMgVmlydHVhbCBXaXJlIElSUS4uLlxuIik7Ci0KLQlsYXBpY19yZWdpc3Rlcl9pbnRyKDAsIHZlY3Rvcik7Ci0JYXBpY193cml0ZShBUElDX0xWVDAsIEFQSUNfRE1fRklYRUQgfCB2ZWN0b3IpOwkvKiBGaXhlZCBtb2RlICovCi0JZW5hYmxlXzgyNTlBX2lycSgwKTsKLQotCWlmICh0aW1lcl9pcnFfd29ya3MoKSkgewotCQlhcGljX3ByaW50ayhBUElDX1FVSUVULCBLRVJOX0lORk8gIi4uLi4uIHdvcmtzLlxuIik7Ci0JCWdvdG8gb3V0OwotCX0KLQlkaXNhYmxlXzgyNTlBX2lycSgwKTsKLQlhcGljX3dyaXRlKEFQSUNfTFZUMCwgQVBJQ19MVlRfTUFTS0VEIHwgQVBJQ19ETV9GSVhFRCB8IHZlY3Rvcik7Ci0JYXBpY19wcmludGsoQVBJQ19RVUlFVCwgS0VSTl9JTkZPICIuLi4uLiBmYWlsZWQuXG4iKTsKLQotCWFwaWNfcHJpbnRrKEFQSUNfUVVJRVQsIEtFUk5fSU5GTwotCQkgICAgIi4uLnRyeWluZyB0byBzZXQgdXAgdGltZXIgYXMgRXh0SU5UIElSUS4uLlxuIik7Ci0KLQlpbml0XzgyNTlBKDApOwotCW1ha2VfODI1OUFfaXJxKDApOwotCWFwaWNfd3JpdGUoQVBJQ19MVlQwLCBBUElDX0RNX0VYVElOVCk7Ci0KLQl1bmxvY2tfRXh0SU5UX2xvZ2ljKCk7Ci0KLQlpZiAodGltZXJfaXJxX3dvcmtzKCkpIHsKLQkJYXBpY19wcmludGsoQVBJQ19RVUlFVCwgS0VSTl9JTkZPICIuLi4uLiB3b3Jrcy5cbiIpOwotCQlnb3RvIG91dDsKLQl9Ci0JYXBpY19wcmludGsoQVBJQ19RVUlFVCwgS0VSTl9JTkZPICIuLi4uLiBmYWlsZWQgOiguXG4iKTsKLQlwYW5pYygiSU8tQVBJQyArIHRpbWVyIGRvZXNuJ3Qgd29yayEgIEJvb3Qgd2l0aCBhcGljPWRlYnVnIGFuZCBzZW5kIGEgIgotCQkicmVwb3J0LiAgVGhlbiB0cnkgYm9vdGluZyB3aXRoIHRoZSAnbm9hcGljJyBvcHRpb24uXG4iKTsKLW91dDoKLQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Ci19Ci0KLS8qCi0gKiBUcmFkaXRpb25hbGx5IElTQSBJUlEyIGlzIHRoZSBjYXNjYWRlIElSUSwgYW5kIGlzIG5vdCBhdmFpbGFibGUKLSAqIHRvIGRldmljZXMuICBIb3dldmVyIHRoZXJlIG1heSBiZSBhbiBJL08gQVBJQyBwaW4gYXZhaWxhYmxlIGZvcgotICogdGhpcyBpbnRlcnJ1cHQgcmVnYXJkbGVzcy4gIFRoZSBwaW4gbWF5IGJlIGxlZnQgdW5jb25uZWN0ZWQsIGJ1dAotICogdHlwaWNhbGx5IGl0IHdpbGwgYmUgcmV1c2VkIGFzIGFuIEV4dElOVCBjYXNjYWRlIGludGVycnVwdCBmb3IKLSAqIHRoZSBtYXN0ZXIgODI1OUEuICBJbiB0aGUgTVBTIGNhc2Ugc3VjaCBhIHBpbiB3aWxsIG5vcm1hbGx5IGJlCi0gKiByZXBvcnRlZCBhcyBhbiBFeHRJTlQgaW50ZXJydXB0IGluIHRoZSBNUCB0YWJsZS4gIFdpdGggQUNQSQotICogdGhlcmUgaXMgbm8gcHJvdmlzaW9uIGZvciBFeHRJTlQgaW50ZXJydXB0cywgYW5kIGluIHRoZSBhYnNlbmNlCi0gKiBvZiBhbiBvdmVycmlkZSBpdCB3b3VsZCBiZSB0cmVhdGVkIGFzIGFuIG9yZGluYXJ5IElTQSBJL08gQVBJQwotICogaW50ZXJydXB0LCB0aGF0IGlzIGVkZ2UtdHJpZ2dlcmVkIGFuZCB1bm1hc2tlZCBieSBkZWZhdWx0LiAgV2UKLSAqIHVzZWQgdG8gZG8gdGhpcywgYnV0IGl0IGNhdXNlZCBwcm9ibGVtcyBvbiBzb21lIHN5c3RlbXMgYmVjYXVzZQotICogb2YgdGhlIE5NSSB3YXRjaGRvZyBhbmQgc29tZXRpbWVzIElSUTAgb2YgdGhlIDgyNTQgdGltZXIgdXNpbmcKLSAqIHRoZSBzYW1lIEV4dElOVCBjYXNjYWRlIGludGVycnVwdCB0byBkcml2ZSB0aGUgbG9jYWwgQVBJQyBvZiB0aGUKLSAqIGJvb3RzdHJhcCBwcm9jZXNzb3IuICBUaGVyZWZvcmUgd2UgcmVmcmFpbiBmcm9tIHJvdXRpbmcgSVJRMiB0bwotICogdGhlIEkvTyBBUElDIGluIGFsbCBjYXNlcyBub3cuICBObyBhY3R1YWwgZGV2aWNlIHNob3VsZCByZXF1ZXN0Ci0gKiBpdCBhbnl3YXkuICAtLW1hY3JvCi0gKi8KLSNkZWZpbmUgUElDX0lSUVMJKDEgPDwgUElDX0NBU0NBREVfSVIpCi0KLXZvaWQgX19pbml0IHNldHVwX0lPX0FQSUModm9pZCkKLXsKLQlpbnQgaTsKLQotCS8qIFJlc2VydmUgYWxsIHRoZSBzeXN0ZW0gdmVjdG9ycy4gKi8KLQlmb3IgKGkgPSBmaXJzdF9zeXN0ZW1fdmVjdG9yOyBpIDwgTlJfVkVDVE9SUzsgaSsrKQotCQlzZXRfYml0KGksIHVzZWRfdmVjdG9ycyk7Ci0KLQllbmFibGVfSU9fQVBJQygpOwotCi0JaW9fYXBpY19pcnFzID0gflBJQ19JUlFTOwotCi0JcHJpbnRrKCJFTkFCTElORyBJTy1BUElDIElSUXNcbiIpOwotCi0JLyoKLQkgKiBTZXQgdXAgSU8tQVBJQyBJUlEgcm91dGluZy4KLQkgKi8KLQlpZiAoIWFjcGlfaW9hcGljKQotCQlzZXR1cF9pb2FwaWNfaWRzX2Zyb21fbXBjKCk7Ci0Jc3luY19BcmJfSURzKCk7Ci0Jc2V0dXBfSU9fQVBJQ19pcnFzKCk7Ci0JaW5pdF9JT19BUElDX3RyYXBzKCk7Ci0JY2hlY2tfdGltZXIoKTsKLX0KLQotLyoKLSAqCUNhbGxlZCBhZnRlciBhbGwgdGhlIGluaXRpYWxpemF0aW9uIGlzIGRvbmUuIElmIHdlIGRpZG50IGZpbmQgYW55Ci0gKglBUElDIGJ1Z3MgdGhlbiB3ZSBjYW4gYWxsb3cgdGhlIG1vZGlmeSBmYXN0IHBhdGgKLSAqLwotCi1zdGF0aWMgaW50IF9faW5pdCBpb19hcGljX2J1Z19maW5hbGl6ZSh2b2lkKQotewotCWlmIChzaXNfYXBpY19idWcgPT0gLTEpCi0JCXNpc19hcGljX2J1ZyA9IDA7Ci0JcmV0dXJuIDA7Ci19Ci0KLWxhdGVfaW5pdGNhbGwoaW9fYXBpY19idWdfZmluYWxpemUpOwotCi1zdHJ1Y3Qgc3lzZnNfaW9hcGljX2RhdGEgewotCXN0cnVjdCBzeXNfZGV2aWNlIGRldjsKLQlzdHJ1Y3QgSU9fQVBJQ19yb3V0ZV9lbnRyeSBlbnRyeVswXTsKLX07Ci1zdGF0aWMgc3RydWN0IHN5c2ZzX2lvYXBpY19kYXRhICptcF9pb2FwaWNfZGF0YVtNQVhfSU9fQVBJQ1NdOwotCi1zdGF0aWMgaW50IGlvYXBpY19zdXNwZW5kKHN0cnVjdCBzeXNfZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKLXsKLQlzdHJ1Y3QgSU9fQVBJQ19yb3V0ZV9lbnRyeSAqZW50cnk7Ci0Jc3RydWN0IHN5c2ZzX2lvYXBpY19kYXRhICpkYXRhOwotCWludCBpOwotCi0JZGF0YSA9IGNvbnRhaW5lcl9vZihkZXYsIHN0cnVjdCBzeXNmc19pb2FwaWNfZGF0YSwgZGV2KTsKLQllbnRyeSA9IGRhdGEtPmVudHJ5OwotCWZvciAoaSA9IDA7IGkgPCBucl9pb2FwaWNfcmVnaXN0ZXJzW2Rldi0+aWRdOyBpKyspCi0JCWVudHJ5W2ldID0gaW9hcGljX3JlYWRfZW50cnkoZGV2LT5pZCwgaSk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBpb2FwaWNfcmVzdW1lKHN0cnVjdCBzeXNfZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IElPX0FQSUNfcm91dGVfZW50cnkgKmVudHJ5OwotCXN0cnVjdCBzeXNmc19pb2FwaWNfZGF0YSAqZGF0YTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXVuaW9uIElPX0FQSUNfcmVnXzAwIHJlZ18wMDsKLQlpbnQgaTsKLQotCWRhdGEgPSBjb250YWluZXJfb2YoZGV2LCBzdHJ1Y3Qgc3lzZnNfaW9hcGljX2RhdGEsIGRldik7Ci0JZW50cnkgPSBkYXRhLT5lbnRyeTsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZpb2FwaWNfbG9jaywgZmxhZ3MpOwotCXJlZ18wMC5yYXcgPSBpb19hcGljX3JlYWQoZGV2LT5pZCwgMCk7Ci0JaWYgKHJlZ18wMC5iaXRzLklEICE9IG1wX2lvYXBpY3NbZGV2LT5pZF0ubXBfYXBpY2lkKSB7Ci0JCXJlZ18wMC5iaXRzLklEID0gbXBfaW9hcGljc1tkZXYtPmlkXS5tcF9hcGljaWQ7Ci0JCWlvX2FwaWNfd3JpdGUoZGV2LT5pZCwgMCwgcmVnXzAwLnJhdyk7Ci0JfQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYXBpY19sb2NrLCBmbGFncyk7Ci0JZm9yIChpID0gMDsgaSA8IG5yX2lvYXBpY19yZWdpc3RlcnNbZGV2LT5pZF07IGkrKykKLQkJaW9hcGljX3dyaXRlX2VudHJ5KGRldi0+aWQsIGksIGVudHJ5W2ldKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgc3RydWN0IHN5c2Rldl9jbGFzcyBpb2FwaWNfc3lzZGV2X2NsYXNzID0gewotCS5uYW1lID0gImlvYXBpYyIsCi0JLnN1c3BlbmQgPSBpb2FwaWNfc3VzcGVuZCwKLQkucmVzdW1lID0gaW9hcGljX3Jlc3VtZSwKLX07Ci0KLXN0YXRpYyBpbnQgX19pbml0IGlvYXBpY19pbml0X3N5c2ZzKHZvaWQpCi17Ci0Jc3RydWN0IHN5c19kZXZpY2UgKmRldjsKLQlpbnQgaSwgc2l6ZSwgZXJyb3IgPSAwOwotCi0JZXJyb3IgPSBzeXNkZXZfY2xhc3NfcmVnaXN0ZXIoJmlvYXBpY19zeXNkZXZfY2xhc3MpOwotCWlmIChlcnJvcikKLQkJcmV0dXJuIGVycm9yOwotCi0JZm9yIChpID0gMDsgaSA8IG5yX2lvYXBpY3M7IGkrKykgewotCQlzaXplID0gc2l6ZW9mKHN0cnVjdCBzeXNfZGV2aWNlKSArIG5yX2lvYXBpY19yZWdpc3RlcnNbaV0KLQkJCSogc2l6ZW9mKHN0cnVjdCBJT19BUElDX3JvdXRlX2VudHJ5KTsKLQkJbXBfaW9hcGljX2RhdGFbaV0gPSBremFsbG9jKHNpemUsIEdGUF9LRVJORUwpOwotCQlpZiAoIW1wX2lvYXBpY19kYXRhW2ldKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgIkNhbid0IHN1c3BlbmQvcmVzdW1lIElPQVBJQyAlZFxuIiwgaSk7Ci0JCQljb250aW51ZTsKLQkJfQotCQlkZXYgPSAmbXBfaW9hcGljX2RhdGFbaV0tPmRldjsKLQkJZGV2LT5pZCA9IGk7Ci0JCWRldi0+Y2xzID0gJmlvYXBpY19zeXNkZXZfY2xhc3M7Ci0JCWVycm9yID0gc3lzZGV2X3JlZ2lzdGVyKGRldik7Ci0JCWlmIChlcnJvcikgewotCQkJa2ZyZWUobXBfaW9hcGljX2RhdGFbaV0pOwotCQkJbXBfaW9hcGljX2RhdGFbaV0gPSBOVUxMOwotCQkJcHJpbnRrKEtFUk5fRVJSICJDYW4ndCBzdXNwZW5kL3Jlc3VtZSBJT0FQSUMgJWRcbiIsIGkpOwotCQkJY29udGludWU7Ci0JCX0KLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotZGV2aWNlX2luaXRjYWxsKGlvYXBpY19pbml0X3N5c2ZzKTsKLQotLyoKLSAqIER5bmFtaWMgaXJxIGFsbG9jYXRlIGFuZCBkZWFsbG9jYXRpb24KLSAqLwotaW50IGNyZWF0ZV9pcnEodm9pZCkKLXsKLQkvKiBBbGxvY2F0ZSBhbiB1bnVzZWQgaXJxICovCi0JaW50IGlycSwgbmV3LCB2ZWN0b3IgPSAwOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlpcnEgPSAtRU5PU1BDOwotCXNwaW5fbG9ja19pcnFzYXZlKCZ2ZWN0b3JfbG9jaywgZmxhZ3MpOwotCWZvciAobmV3ID0gKE5SX0lSUVMgLSAxKTsgbmV3ID49IDA7IG5ldy0tKSB7Ci0JCWlmIChwbGF0Zm9ybV9sZWdhY3lfaXJxKG5ldykpCi0JCQljb250aW51ZTsKLQkJaWYgKGlycV92ZWN0b3JbbmV3XSAhPSAwKQotCQkJY29udGludWU7Ci0JCXZlY3RvciA9IF9fYXNzaWduX2lycV92ZWN0b3IobmV3KTsKLQkJaWYgKGxpa2VseSh2ZWN0b3IgPiAwKSkKLQkJCWlycSA9IG5ldzsKLQkJYnJlYWs7Ci0JfQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnZlY3Rvcl9sb2NrLCBmbGFncyk7Ci0KLQlpZiAoaXJxID49IDApIHsKLQkJc2V0X2ludHJfZ2F0ZSh2ZWN0b3IsIGludGVycnVwdFtpcnFdKTsKLQkJZHluYW1pY19pcnFfaW5pdChpcnEpOwotCX0KLQlyZXR1cm4gaXJxOwotfQotCi12b2lkIGRlc3Ryb3lfaXJxKHVuc2lnbmVkIGludCBpcnEpCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCWR5bmFtaWNfaXJxX2NsZWFudXAoaXJxKTsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZ2ZWN0b3JfbG9jaywgZmxhZ3MpOwotCWNsZWFyX2JpdChpcnFfdmVjdG9yW2lycV0sIHVzZWRfdmVjdG9ycyk7Ci0JaXJxX3ZlY3RvcltpcnFdID0gMDsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ2ZWN0b3JfbG9jaywgZmxhZ3MpOwotfQotCi0vKgotICogTVNJIG1lc3NhZ2UgY29tcG9zaXRpb24KLSAqLwotI2lmZGVmIENPTkZJR19QQ0lfTVNJCi1zdGF0aWMgaW50IG1zaV9jb21wb3NlX21zZyhzdHJ1Y3QgcGNpX2RldiAqcGRldiwgdW5zaWduZWQgaW50IGlycSwgc3RydWN0IG1zaV9tc2cgKm1zZykKLXsKLQlpbnQgdmVjdG9yOwotCXVuc2lnbmVkIGRlc3Q7Ci0KLQl2ZWN0b3IgPSBhc3NpZ25faXJxX3ZlY3RvcihpcnEpOwotCWlmICh2ZWN0b3IgPj0gMCkgewotCQlkZXN0ID0gY3B1X21hc2tfdG9fYXBpY2lkKFRBUkdFVF9DUFVTKTsKLQotCQltc2ctPmFkZHJlc3NfaGkgPSBNU0lfQUREUl9CQVNFX0hJOwotCQltc2ctPmFkZHJlc3NfbG8gPQotCQkJTVNJX0FERFJfQkFTRV9MTyB8Ci0JCQkoKElOVF9ERVNUX01PREUgPT0gMCkgPwotTVNJX0FERFJfREVTVF9NT0RFX1BIWVNJQ0FMOgotCQkJCU1TSV9BRERSX0RFU1RfTU9ERV9MT0dJQ0FMKSB8Ci0JCQkoKElOVF9ERUxJVkVSWV9NT0RFICE9IGRlc3RfTG93ZXN0UHJpbykgPwotCQkJCU1TSV9BRERSX1JFRElSRUNUSU9OX0NQVToKLQkJCQlNU0lfQUREUl9SRURJUkVDVElPTl9MT1dQUkkpIHwKLQkJCU1TSV9BRERSX0RFU1RfSUQoZGVzdCk7Ci0KLQkJbXNnLT5kYXRhID0KLQkJCU1TSV9EQVRBX1RSSUdHRVJfRURHRSB8Ci0JCQlNU0lfREFUQV9MRVZFTF9BU1NFUlQgfAotCQkJKChJTlRfREVMSVZFUllfTU9ERSAhPSBkZXN0X0xvd2VzdFByaW8pID8KLU1TSV9EQVRBX0RFTElWRVJZX0ZJWEVEOgotCQkJCU1TSV9EQVRBX0RFTElWRVJZX0xPV1BSSSkgfAotCQkJTVNJX0RBVEFfVkVDVE9SKHZlY3Rvcik7Ci0JfQotCXJldHVybiB2ZWN0b3I7Ci19Ci0KLSNpZmRlZiBDT05GSUdfU01QCi1zdGF0aWMgdm9pZCBzZXRfbXNpX2lycV9hZmZpbml0eSh1bnNpZ25lZCBpbnQgaXJxLCBjcHVtYXNrX3QgbWFzaykKLXsKLQlzdHJ1Y3QgbXNpX21zZyBtc2c7Ci0JdW5zaWduZWQgaW50IGRlc3Q7Ci0JY3B1bWFza190IHRtcDsKLQlpbnQgdmVjdG9yOwotCi0JY3B1c19hbmQodG1wLCBtYXNrLCBjcHVfb25saW5lX21hcCk7Ci0JaWYgKGNwdXNfZW1wdHkodG1wKSkKLQkJdG1wID0gVEFSR0VUX0NQVVM7Ci0KLQl2ZWN0b3IgPSBhc3NpZ25faXJxX3ZlY3RvcihpcnEpOwotCWlmICh2ZWN0b3IgPCAwKQotCQlyZXR1cm47Ci0KLQlkZXN0ID0gY3B1X21hc2tfdG9fYXBpY2lkKG1hc2spOwotCi0JcmVhZF9tc2lfbXNnKGlycSwgJm1zZyk7Ci0KLQltc2cuZGF0YSAmPSB+TVNJX0RBVEFfVkVDVE9SX01BU0s7Ci0JbXNnLmRhdGEgfD0gTVNJX0RBVEFfVkVDVE9SKHZlY3Rvcik7Ci0JbXNnLmFkZHJlc3NfbG8gJj0gfk1TSV9BRERSX0RFU1RfSURfTUFTSzsKLQltc2cuYWRkcmVzc19sbyB8PSBNU0lfQUREUl9ERVNUX0lEKGRlc3QpOwotCi0Jd3JpdGVfbXNpX21zZyhpcnEsICZtc2cpOwotCWlycV9kZXNjW2lycV0uYWZmaW5pdHkgPSBtYXNrOwotfQotI2VuZGlmIC8qIENPTkZJR19TTVAgKi8KLQotLyoKLSAqIElSUSBDaGlwIGZvciBNU0kgUENJL1BDSS1YL1BDSS1FeHByZXNzIERldmljZXMsCi0gKiB3aGljaCBpbXBsZW1lbnQgdGhlIE1TSSBvciBNU0ktWCBDYXBhYmlsaXR5IFN0cnVjdHVyZS4KLSAqLwotc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBtc2lfY2hpcCA9IHsKLQkubmFtZQkJPSAiUENJLU1TSSIsCi0JLnVubWFzawkJPSB1bm1hc2tfbXNpX2lycSwKLQkubWFzawkJPSBtYXNrX21zaV9pcnEsCi0JLmFjawkJPSBhY2tfaW9hcGljX2lycSwKLSNpZmRlZiBDT05GSUdfU01QCi0JLnNldF9hZmZpbml0eQk9IHNldF9tc2lfaXJxX2FmZmluaXR5LAotI2VuZGlmCi0JLnJldHJpZ2dlcgk9IGlvYXBpY19yZXRyaWdnZXJfaXJxLAotfTsKLQotaW50IGFyY2hfc2V0dXBfbXNpX2lycShzdHJ1Y3QgcGNpX2RldiAqZGV2LCBzdHJ1Y3QgbXNpX2Rlc2MgKmRlc2MpCi17Ci0Jc3RydWN0IG1zaV9tc2cgbXNnOwotCWludCBpcnEsIHJldDsKLQlpcnEgPSBjcmVhdGVfaXJxKCk7Ci0JaWYgKGlycSA8IDApCi0JCXJldHVybiBpcnE7Ci0KLQlyZXQgPSBtc2lfY29tcG9zZV9tc2coZGV2LCBpcnEsICZtc2cpOwotCWlmIChyZXQgPCAwKSB7Ci0JCWRlc3Ryb3lfaXJxKGlycSk7Ci0JCXJldHVybiByZXQ7Ci0JfQotCi0Jc2V0X2lycV9tc2koaXJxLCBkZXNjKTsKLQl3cml0ZV9tc2lfbXNnKGlycSwgJm1zZyk7Ci0KLQlzZXRfaXJxX2NoaXBfYW5kX2hhbmRsZXJfbmFtZShpcnEsICZtc2lfY2hpcCwgaGFuZGxlX2VkZ2VfaXJxLAotCQkJCSAgICAgICJlZGdlIik7Ci0KLQlyZXR1cm4gMDsKLX0KLQotdm9pZCBhcmNoX3RlYXJkb3duX21zaV9pcnEodW5zaWduZWQgaW50IGlycSkKLXsKLQlkZXN0cm95X2lycShpcnEpOwotfQotCi0jZW5kaWYgLyogQ09ORklHX1BDSV9NU0kgKi8KLQotLyoKLSAqIEh5cGVydHJhbnNwb3J0IGludGVycnVwdCBzdXBwb3J0Ci0gKi8KLSNpZmRlZiBDT05GSUdfSFRfSVJRCi0KLSNpZmRlZiBDT05GSUdfU01QCi0KLXN0YXRpYyB2b2lkIHRhcmdldF9odF9pcnEodW5zaWduZWQgaW50IGlycSwgdW5zaWduZWQgaW50IGRlc3QpCi17Ci0Jc3RydWN0IGh0X2lycV9tc2cgbXNnOwotCWZldGNoX2h0X2lycV9tc2coaXJxLCAmbXNnKTsKLQotCW1zZy5hZGRyZXNzX2xvICY9IH4oSFRfSVJRX0xPV19ERVNUX0lEX01BU0spOwotCW1zZy5hZGRyZXNzX2hpICY9IH4oSFRfSVJRX0hJR0hfREVTVF9JRF9NQVNLKTsKLQotCW1zZy5hZGRyZXNzX2xvIHw9IEhUX0lSUV9MT1dfREVTVF9JRChkZXN0KTsKLQltc2cuYWRkcmVzc19oaSB8PSBIVF9JUlFfSElHSF9ERVNUX0lEKGRlc3QpOwotCi0Jd3JpdGVfaHRfaXJxX21zZyhpcnEsICZtc2cpOwotfQotCi1zdGF0aWMgdm9pZCBzZXRfaHRfaXJxX2FmZmluaXR5KHVuc2lnbmVkIGludCBpcnEsIGNwdW1hc2tfdCBtYXNrKQotewotCXVuc2lnbmVkIGludCBkZXN0OwotCWNwdW1hc2tfdCB0bXA7Ci0KLQljcHVzX2FuZCh0bXAsIG1hc2ssIGNwdV9vbmxpbmVfbWFwKTsKLQlpZiAoY3B1c19lbXB0eSh0bXApKQotCQl0bXAgPSBUQVJHRVRfQ1BVUzsKLQotCWNwdXNfYW5kKG1hc2ssIHRtcCwgQ1BVX01BU0tfQUxMKTsKLQotCWRlc3QgPSBjcHVfbWFza190b19hcGljaWQobWFzayk7Ci0KLQl0YXJnZXRfaHRfaXJxKGlycSwgZGVzdCk7Ci0JaXJxX2Rlc2NbaXJxXS5hZmZpbml0eSA9IG1hc2s7Ci19Ci0jZW5kaWYKLQotc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBodF9pcnFfY2hpcCA9IHsKLQkubmFtZQkJPSAiUENJLUhUIiwKLQkubWFzawkJPSBtYXNrX2h0X2lycSwKLQkudW5tYXNrCQk9IHVubWFza19odF9pcnEsCi0JLmFjawkJPSBhY2tfaW9hcGljX2lycSwKLSNpZmRlZiBDT05GSUdfU01QCi0JLnNldF9hZmZpbml0eQk9IHNldF9odF9pcnFfYWZmaW5pdHksCi0jZW5kaWYKLQkucmV0cmlnZ2VyCT0gaW9hcGljX3JldHJpZ2dlcl9pcnEsCi19OwotCi1pbnQgYXJjaF9zZXR1cF9odF9pcnEodW5zaWduZWQgaW50IGlycSwgc3RydWN0IHBjaV9kZXYgKmRldikKLXsKLQlpbnQgdmVjdG9yOwotCi0JdmVjdG9yID0gYXNzaWduX2lycV92ZWN0b3IoaXJxKTsKLQlpZiAodmVjdG9yID49IDApIHsKLQkJc3RydWN0IGh0X2lycV9tc2cgbXNnOwotCQl1bnNpZ25lZCBkZXN0OwotCQljcHVtYXNrX3QgdG1wOwotCi0JCWNwdXNfY2xlYXIodG1wKTsKLQkJY3B1X3NldCh2ZWN0b3IgPj4gOCwgdG1wKTsKLQkJZGVzdCA9IGNwdV9tYXNrX3RvX2FwaWNpZCh0bXApOwotCi0JCW1zZy5hZGRyZXNzX2hpID0gSFRfSVJRX0hJR0hfREVTVF9JRChkZXN0KTsKLQotCQltc2cuYWRkcmVzc19sbyA9Ci0JCQlIVF9JUlFfTE9XX0JBU0UgfAotCQkJSFRfSVJRX0xPV19ERVNUX0lEKGRlc3QpIHwKLQkJCUhUX0lSUV9MT1dfVkVDVE9SKHZlY3RvcikgfAotCQkJKChJTlRfREVTVF9NT0RFID09IDApID8KLQkJCQlIVF9JUlFfTE9XX0RNX1BIWVNJQ0FMIDoKLQkJCQlIVF9JUlFfTE9XX0RNX0xPR0lDQUwpIHwKLQkJCUhUX0lSUV9MT1dfUlFFT0lfRURHRSB8Ci0JCQkoKElOVF9ERUxJVkVSWV9NT0RFICE9IGRlc3RfTG93ZXN0UHJpbykgPwotCQkJCUhUX0lSUV9MT1dfTVRfRklYRUQgOgotCQkJCUhUX0lSUV9MT1dfTVRfQVJCSVRSQVRFRCkgfAotCQkJSFRfSVJRX0xPV19JUlFfTUFTS0VEOwotCi0JCXdyaXRlX2h0X2lycV9tc2coaXJxLCAmbXNnKTsKLQotCQlzZXRfaXJxX2NoaXBfYW5kX2hhbmRsZXJfbmFtZShpcnEsICZodF9pcnFfY2hpcCwKLQkJCQkJICAgICAgaGFuZGxlX2VkZ2VfaXJxLCAiZWRnZSIpOwotCX0KLQlyZXR1cm4gdmVjdG9yOwotfQotI2VuZGlmIC8qIENPTkZJR19IVF9JUlEgKi8KLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQkJCUFDUEktYmFzZWQgSU9BUElDIENvbmZpZ3VyYXRpb24KLSAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLSNpZmRlZiBDT05GSUdfQUNQSQotCi1pbnQgX19pbml0IGlvX2FwaWNfZ2V0X3VuaXF1ZV9pZChpbnQgaW9hcGljLCBpbnQgYXBpY19pZCkKLXsKLQl1bmlvbiBJT19BUElDX3JlZ18wMCByZWdfMDA7Ci0Jc3RhdGljIHBoeXNpZF9tYXNrX3QgYXBpY19pZF9tYXAgPSBQSFlTSURfTUFTS19OT05FOwotCXBoeXNpZF9tYXNrX3QgdG1wOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IGkgPSAwOwotCi0JLyoKLQkgKiBUaGUgUDQgcGxhdGZvcm0gc3VwcG9ydHMgdXAgdG8gMjU2IEFQSUMgSURzIG9uIHR3byBzZXBhcmF0ZSBBUElDCi0JICogYnVzZXMgKG9uZSBmb3IgTEFQSUNzLCBvbmUgZm9yIElPQVBJQ3MpLCB3aGVyZSBwcmVkZWNlc3NvcnMgb25seQotCSAqIHN1cHBvcnRzIHVwIHRvIDE2IG9uIG9uZSBzaGFyZWQgQVBJQyBidXMuCi0JICoKLQkgKiBUQkQ6IEV4cGFuZCBMQVBJQy9JT0FQSUMgc3VwcG9ydCBvbiBQNC1jbGFzcyBzeXN0ZW1zIHRvIHRha2UgZnVsbAotCSAqICAgICAgYWR2YW50YWdlIG9mIG5ldyBBUElDIGJ1cyBhcmNoaXRlY3R1cmUuCi0JICovCi0KLQlpZiAocGh5c2lkc19lbXB0eShhcGljX2lkX21hcCkpCi0JCWFwaWNfaWRfbWFwID0gaW9hcGljX3BoeXNfaWRfbWFwKHBoeXNfY3B1X3ByZXNlbnRfbWFwKTsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZpb2FwaWNfbG9jaywgZmxhZ3MpOwotCXJlZ18wMC5yYXcgPSBpb19hcGljX3JlYWQoaW9hcGljLCAwKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2FwaWNfbG9jaywgZmxhZ3MpOwotCi0JaWYgKGFwaWNfaWQgPj0gZ2V0X3BoeXNpY2FsX2Jyb2FkY2FzdCgpKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIklPQVBJQ1slZF06IEludmFsaWQgYXBpY19pZCAlZCwgdHJ5aW5nICIKLQkJCSIlZFxuIiwgaW9hcGljLCBhcGljX2lkLCByZWdfMDAuYml0cy5JRCk7Ci0JCWFwaWNfaWQgPSByZWdfMDAuYml0cy5JRDsKLQl9Ci0KLQkvKgotCSAqIEV2ZXJ5IEFQSUMgaW4gYSBzeXN0ZW0gbXVzdCBoYXZlIGEgdW5pcXVlIElEIG9yIHdlIGdldCBsb3RzIG9mIG5pY2UKLQkgKiAnc3R1Y2sgb24gc21wX2ludmFsaWRhdGVfbmVlZGVkIElQSSB3YWl0JyBtZXNzYWdlcy4KLQkgKi8KLQlpZiAoY2hlY2tfYXBpY2lkX3VzZWQoYXBpY19pZF9tYXAsIGFwaWNfaWQpKSB7Ci0KLQkJZm9yIChpID0gMDsgaSA8IGdldF9waHlzaWNhbF9icm9hZGNhc3QoKTsgaSsrKSB7Ci0JCQlpZiAoIWNoZWNrX2FwaWNpZF91c2VkKGFwaWNfaWRfbWFwLCBpKSkKLQkJCQlicmVhazsKLQkJfQotCi0JCWlmIChpID09IGdldF9waHlzaWNhbF9icm9hZGNhc3QoKSkKLQkJCXBhbmljKCJNYXggYXBpY19pZCBleGNlZWRlZCFcbiIpOwotCi0JCXByaW50ayhLRVJOX1dBUk5JTkcgIklPQVBJQ1slZF06IGFwaWNfaWQgJWQgYWxyZWFkeSB1c2VkLCAiCi0JCQkidHJ5aW5nICVkXG4iLCBpb2FwaWMsIGFwaWNfaWQsIGkpOwotCi0JCWFwaWNfaWQgPSBpOwotCX0KLQotCXRtcCA9IGFwaWNpZF90b19jcHVfcHJlc2VudChhcGljX2lkKTsKLQlwaHlzaWRzX29yKGFwaWNfaWRfbWFwLCBhcGljX2lkX21hcCwgdG1wKTsKLQotCWlmIChyZWdfMDAuYml0cy5JRCAhPSBhcGljX2lkKSB7Ci0JCXJlZ18wMC5iaXRzLklEID0gYXBpY19pZDsKLQotCQlzcGluX2xvY2tfaXJxc2F2ZSgmaW9hcGljX2xvY2ssIGZsYWdzKTsKLQkJaW9fYXBpY193cml0ZShpb2FwaWMsIDAsIHJlZ18wMC5yYXcpOwotCQlyZWdfMDAucmF3ID0gaW9fYXBpY19yZWFkKGlvYXBpYywgMCk7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYXBpY19sb2NrLCBmbGFncyk7Ci0KLQkJLyogU2FuaXR5IGNoZWNrICovCi0JCWlmIChyZWdfMDAuYml0cy5JRCAhPSBhcGljX2lkKSB7Ci0JCQlwcmludGsoIklPQVBJQ1slZF06IFVuYWJsZSB0byBjaGFuZ2UgYXBpY19pZCFcbiIsIGlvYXBpYyk7Ci0JCQlyZXR1cm4gLTE7Ci0JCX0KLQl9Ci0KLQlhcGljX3ByaW50ayhBUElDX1ZFUkJPU0UsIEtFUk5fSU5GTwotCQkJIklPQVBJQ1slZF06IEFzc2lnbmVkIGFwaWNfaWQgJWRcbiIsIGlvYXBpYywgYXBpY19pZCk7Ci0KLQlyZXR1cm4gYXBpY19pZDsKLX0KLQotCi1pbnQgX19pbml0IGlvX2FwaWNfZ2V0X3ZlcnNpb24oaW50IGlvYXBpYykKLXsKLQl1bmlvbiBJT19BUElDX3JlZ18wMQlyZWdfMDE7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZpb2FwaWNfbG9jaywgZmxhZ3MpOwotCXJlZ18wMS5yYXcgPSBpb19hcGljX3JlYWQoaW9hcGljLCAxKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2FwaWNfbG9jaywgZmxhZ3MpOwotCi0JcmV0dXJuIHJlZ18wMS5iaXRzLnZlcnNpb247Ci19Ci0KLQotaW50IF9faW5pdCBpb19hcGljX2dldF9yZWRpcl9lbnRyaWVzKGludCBpb2FwaWMpCi17Ci0JdW5pb24gSU9fQVBJQ19yZWdfMDEJcmVnXzAxOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmaW9hcGljX2xvY2ssIGZsYWdzKTsKLQlyZWdfMDEucmF3ID0gaW9fYXBpY19yZWFkKGlvYXBpYywgMSk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9hcGljX2xvY2ssIGZsYWdzKTsKLQotCXJldHVybiByZWdfMDEuYml0cy5lbnRyaWVzOwotfQotCi0KLWludCBpb19hcGljX3NldF9wY2lfcm91dGluZyhpbnQgaW9hcGljLCBpbnQgcGluLCBpbnQgaXJxLCBpbnQgZWRnZV9sZXZlbCwgaW50IGFjdGl2ZV9oaWdoX2xvdykKLXsKLQlzdHJ1Y3QgSU9fQVBJQ19yb3V0ZV9lbnRyeSBlbnRyeTsKLQotCWlmICghSU9fQVBJQ19JUlEoaXJxKSkgewotCQlwcmludGsoS0VSTl9FUlIgIklPQVBJQ1slZF06IEludmFsaWQgcmVmZXJlbmNlIHRvIElSUSAwXG4iLAotCQkJaW9hcGljKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JLyoKLQkgKiBHZW5lcmF0ZSBhIFBDSSBJUlEgcm91dGluZyBlbnRyeSBhbmQgcHJvZ3JhbSB0aGUgSU9BUElDIGFjY29yZGluZ2x5LgotCSAqIE5vdGUgdGhhdCB3ZSBtYXNrIChkaXNhYmxlKSBJUlFzIG5vdyAtLSB0aGVzZSBnZXQgZW5hYmxlZCB3aGVuIHRoZQotCSAqIGNvcnJlc3BvbmRpbmcgZGV2aWNlIGRyaXZlciByZWdpc3RlcnMgZm9yIHRoaXMgSVJRLgotCSAqLwotCi0JbWVtc2V0KCZlbnRyeSwgMCwgc2l6ZW9mKGVudHJ5KSk7Ci0KLQllbnRyeS5kZWxpdmVyeV9tb2RlID0gSU5UX0RFTElWRVJZX01PREU7Ci0JZW50cnkuZGVzdF9tb2RlID0gSU5UX0RFU1RfTU9ERTsKLQllbnRyeS5kZXN0LmxvZ2ljYWwubG9naWNhbF9kZXN0ID0gY3B1X21hc2tfdG9fYXBpY2lkKFRBUkdFVF9DUFVTKTsKLQllbnRyeS50cmlnZ2VyID0gZWRnZV9sZXZlbDsKLQllbnRyeS5wb2xhcml0eSA9IGFjdGl2ZV9oaWdoX2xvdzsKLQllbnRyeS5tYXNrICA9IDE7Ci0KLQkvKgotCSAqIElSUXMgPCAxNiBhcmUgYWxyZWFkeSBpbiB0aGUgaXJxXzJfcGluW10gbWFwCi0JICovCi0JaWYgKGlycSA+PSAxNikKLQkJYWRkX3Bpbl90b19pcnEoaXJxLCBpb2FwaWMsIHBpbik7Ci0KLQllbnRyeS52ZWN0b3IgPSBhc3NpZ25faXJxX3ZlY3RvcihpcnEpOwotCi0JYXBpY19wcmludGsoQVBJQ19ERUJVRywgS0VSTl9ERUJVRyAiSU9BUElDWyVkXTogU2V0IFBDSSByb3V0aW5nIGVudHJ5ICIKLQkJIiglZC0lZCAtPiAweCV4IC0+IElSUSAlZCBNb2RlOiVpIEFjdGl2ZTolaSlcbiIsIGlvYXBpYywKLQkJbXBfaW9hcGljc1tpb2FwaWNdLm1wX2FwaWNpZCwgcGluLCBlbnRyeS52ZWN0b3IsIGlycSwKLQkJZWRnZV9sZXZlbCwgYWN0aXZlX2hpZ2hfbG93KTsKLQotCWlvYXBpY19yZWdpc3Rlcl9pbnRyKGlycSwgZW50cnkudmVjdG9yLCBlZGdlX2xldmVsKTsKLQotCWlmICghaW9hcGljICYmIChpcnEgPCAxNikpCi0JCWRpc2FibGVfODI1OUFfaXJxKGlycSk7Ci0KLQlpb2FwaWNfd3JpdGVfZW50cnkoaW9hcGljLCBwaW4sIGVudHJ5KTsKLQotCXJldHVybiAwOwotfQotCi1pbnQgYWNwaV9nZXRfb3ZlcnJpZGVfaXJxKGludCBidXNfaXJxLCBpbnQgKnRyaWdnZXIsIGludCAqcG9sYXJpdHkpCi17Ci0JaW50IGk7Ci0KLQlpZiAoc2tpcF9pb2FwaWNfc2V0dXApCi0JCXJldHVybiAtMTsKLQotCWZvciAoaSA9IDA7IGkgPCBtcF9pcnFfZW50cmllczsgaSsrKQotCQlpZiAobXBfaXJxc1tpXS5tcF9pcnF0eXBlID09IG1wX0lOVCAmJgotCQkgICAgbXBfaXJxc1tpXS5tcF9zcmNidXNpcnEgPT0gYnVzX2lycSkKLQkJCWJyZWFrOwotCWlmIChpID49IG1wX2lycV9lbnRyaWVzKQotCQlyZXR1cm4gLTE7Ci0KLQkqdHJpZ2dlciA9IGlycV90cmlnZ2VyKGkpOwotCSpwb2xhcml0eSA9IGlycV9wb2xhcml0eShpKTsKLQlyZXR1cm4gMDsKLX0KLQotI2VuZGlmIC8qIENPTkZJR19BQ1BJICovCi0KLXN0YXRpYyBpbnQgX19pbml0IHBhcnNlX2Rpc2FibGVfdGltZXJfcGluXzEoY2hhciAqYXJnKQotewotCWRpc2FibGVfdGltZXJfcGluXzEgPSAxOwotCXJldHVybiAwOwotfQotZWFybHlfcGFyYW0oImRpc2FibGVfdGltZXJfcGluXzEiLCBwYXJzZV9kaXNhYmxlX3RpbWVyX3Bpbl8xKTsKLQotc3RhdGljIGludCBfX2luaXQgcGFyc2VfZW5hYmxlX3RpbWVyX3Bpbl8xKGNoYXIgKmFyZykKLXsKLQlkaXNhYmxlX3RpbWVyX3Bpbl8xID0gLTE7Ci0JcmV0dXJuIDA7Ci19Ci1lYXJseV9wYXJhbSgiZW5hYmxlX3RpbWVyX3Bpbl8xIiwgcGFyc2VfZW5hYmxlX3RpbWVyX3Bpbl8xKTsKLQotc3RhdGljIGludCBfX2luaXQgcGFyc2Vfbm9hcGljKGNoYXIgKmFyZykKLXsKLQkvKiBkaXNhYmxlIElPLUFQSUMgKi8KLQlkaXNhYmxlX2lvYXBpY19zZXR1cCgpOwotCXJldHVybiAwOwotfQotZWFybHlfcGFyYW0oIm5vYXBpYyIsIHBhcnNlX25vYXBpYyk7Ci0KLXZvaWQgX19pbml0IGlvYXBpY19pbml0X21hcHBpbmdzKHZvaWQpCi17Ci0JdW5zaWduZWQgbG9uZyBpb2FwaWNfcGh5cywgaWR4ID0gRklYX0lPX0FQSUNfQkFTRV8wOwotCWludCBpOwotCi0JZm9yIChpID0gMDsgaSA8IG5yX2lvYXBpY3M7IGkrKykgewotCQlpZiAoc21wX2ZvdW5kX2NvbmZpZykgewotCQkJaW9hcGljX3BoeXMgPSBtcF9pb2FwaWNzW2ldLm1wX2FwaWNhZGRyOwotCQkJaWYgKCFpb2FwaWNfcGh5cykgewotCQkJCXByaW50ayhLRVJOX0VSUgotCQkJCSAgICAgICAiV0FSTklORzogYm9ndXMgemVybyBJTy1BUElDICIKLQkJCQkgICAgICAgImFkZHJlc3MgZm91bmQgaW4gTVBUQUJMRSwgIgotCQkJCSAgICAgICAiZGlzYWJsaW5nIElPL0FQSUMgc3VwcG9ydCFcbiIpOwotCQkJCXNtcF9mb3VuZF9jb25maWcgPSAwOwotCQkJCXNraXBfaW9hcGljX3NldHVwID0gMTsKLQkJCQlnb3RvIGZha2VfaW9hcGljX3BhZ2U7Ci0JCQl9Ci0JCX0gZWxzZSB7Ci1mYWtlX2lvYXBpY19wYWdlOgotCQkJaW9hcGljX3BoeXMgPSAodW5zaWduZWQgbG9uZykKLQkJCQkgICAgICBhbGxvY19ib290bWVtX3BhZ2VzKFBBR0VfU0laRSk7Ci0JCQlpb2FwaWNfcGh5cyA9IF9fcGEoaW9hcGljX3BoeXMpOwotCQl9Ci0JCXNldF9maXhtYXBfbm9jYWNoZShpZHgsIGlvYXBpY19waHlzKTsKLQkJcHJpbnRrKEtFUk5fREVCVUcgIm1hcHBlZCBJT0FQSUMgdG8gJTA4bHggKCUwOGx4KVxuIiwKLQkJICAgICAgIF9fZml4X3RvX3ZpcnQoaWR4KSwgaW9hcGljX3BoeXMpOwotCQlpZHgrKzsKLQl9Ci19Ci0KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9pb19hcGljXzY0LmMgYi9hcmNoL3g4Ni9rZXJuZWwvaW9fYXBpY182NC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMjA2M2FlLi4wMDAwMDAwCi0tLSBhL2FyY2gveDg2L2tlcm5lbC9pb19hcGljXzY0LmMKKysrIC9kZXYvbnVsbApAQCAtMSwyOTc0ICswLDAgQEAKLS8qCi0gKglJbnRlbCBJTy1BUElDIHN1cHBvcnQgZm9yIG11bHRpLVBlbnRpdW0gaG9zdHMuCi0gKgotICoJQ29weXJpZ2h0IChDKSAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwIEluZ28gTW9sbmFyLCBIYWpuYWxrYSBTemFibwotICoKLSAqCU1hbnkgdGhhbmtzIHRvIFN0aWcgVmVuYWFzIGZvciB0cnlpbmcgb3V0IGNvdW50bGVzcyBleHBlcmltZW50YWwKLSAqCXBhdGNoZXMgYW5kIHJlcG9ydGluZy9kZWJ1Z2dpbmcgcHJvYmxlbXMgcGF0aWVudGx5IQotICoKLSAqCShjKSAxOTk5LCBNdWx0aXBsZSBJTy1BUElDIHN1cHBvcnQsIGRldmVsb3BlZCBieQotICoJS2VuLWljaGkgWWFrdSA8eWFrdUBjc3MxLmtibmVzLm5lYy5jby5qcD4gYW5kCi0gKiAgICAgIEhpZGVtaSBLaXNoaW1vdG8gPGtpc2ltb3RvQGNzczEua2JuZXMubmVjLmNvLmpwPiwKLSAqCWZ1cnRoZXIgdGVzdGVkIGFuZCBjbGVhbmVkIHVwIGJ5IFphY2ggQnJvd24gPHphYkByZWRoYXQuY29tPgotICoJYW5kIEluZ28gTW9sbmFyIDxtaW5nb0ByZWRoYXQuY29tPgotICoKLSAqCUZpeGVzCi0gKglNYWNpZWogVy4gUm96eWNraQk6CUJpdHMgZm9yIGdlbnVpbmUgODI0ODlEWCBBUElDczsKLSAqCQkJCQl0aGFua3MgdG8gRXJpYyBHaWxtb3JlCi0gKgkJCQkJYW5kIFJvbGYgRy4gVGV3cwotICoJCQkJCWZvciB0ZXN0aW5nIHRoZXNlIGV4dGVuc2l2ZWx5Ci0gKglQYXVsIERpZWZlbmJhdWdoCToJQWRkZWQgZnVsbCBBQ1BJIHN1cHBvcnQKLSAqLwotCi0jaW5jbHVkZSA8bGludXgvbW0uaD4KLSNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KLSNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgotI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgotI2luY2x1ZGUgPGxpbnV4L21jMTQ2ODE4cnRjLmg+Ci0jaW5jbHVkZSA8bGludXgvYWNwaS5oPgotI2luY2x1ZGUgPGxpbnV4L3N5c2Rldi5oPgotI2luY2x1ZGUgPGxpbnV4L21zaS5oPgotI2luY2x1ZGUgPGxpbnV4L2h0aXJxLmg+Ci0jaW5jbHVkZSA8bGludXgvZG1hci5oPgotI2luY2x1ZGUgPGxpbnV4L2ppZmZpZXMuaD4KLSNpZmRlZiBDT05GSUdfQUNQSQotI2luY2x1ZGUgPGFjcGkvYWNwaV9idXMuaD4KLSNlbmRpZgotI2luY2x1ZGUgPGxpbnV4L2Jvb3RtZW0uaD4KLSNpbmNsdWRlIDxsaW51eC9kbWFyLmg+Ci0KLSNpbmNsdWRlIDxhc20vaWRsZS5oPgotI2luY2x1ZGUgPGFzbS9pby5oPgotI2luY2x1ZGUgPGFzbS9zbXAuaD4KLSNpbmNsdWRlIDxhc20vZGVzYy5oPgotI2luY2x1ZGUgPGFzbS9wcm90by5oPgotI2luY2x1ZGUgPGFzbS9hY3BpLmg+Ci0jaW5jbHVkZSA8YXNtL2RtYS5oPgotI2luY2x1ZGUgPGFzbS9pODI1OS5oPgotI2luY2x1ZGUgPGFzbS9ubWkuaD4KLSNpbmNsdWRlIDxhc20vbXNpZGVmLmg+Ci0jaW5jbHVkZSA8YXNtL2h5cGVydHJhbnNwb3J0Lmg+Ci0jaW5jbHVkZSA8YXNtL2lycV9yZW1hcHBpbmcuaD4KLQotI2luY2x1ZGUgPG1hY2hfaXBpLmg+Ci0jaW5jbHVkZSA8bWFjaF9hcGljLmg+Ci0KLSNkZWZpbmUgX19hcGljZGVidWdpbml0KHR5cGUpIHN0YXRpYyB0eXBlIF9faW5pdAotCi1zdHJ1Y3QgaXJxX2NmZyB7Ci0JY3B1bWFza190IGRvbWFpbjsKLQljcHVtYXNrX3Qgb2xkX2RvbWFpbjsKLQl1bnNpZ25lZCBtb3ZlX2NsZWFudXBfY291bnQ7Ci0JdTggdmVjdG9yOwotCXU4IG1vdmVfaW5fcHJvZ3Jlc3MgOiAxOwotfTsKLQotLyogaXJxX2NmZyBpcyBpbmRleGVkIGJ5IHRoZSBzdW0gb2YgYWxsIFJURXMgaW4gYWxsIEkvTyBBUElDcy4gKi8KLXN0YXRpYyBzdHJ1Y3QgaXJxX2NmZyBpcnFfY2ZnW05SX0lSUVNdIF9fcmVhZF9tb3N0bHkgPSB7Ci0JWzBdICA9IHsgLmRvbWFpbiA9IENQVV9NQVNLX0FMTCwgLnZlY3RvciA9IElSUTBfVkVDVE9SLCAgfSwKLQlbMV0gID0geyAuZG9tYWluID0gQ1BVX01BU0tfQUxMLCAudmVjdG9yID0gSVJRMV9WRUNUT1IsICB9LAotCVsyXSAgPSB7IC5kb21haW4gPSBDUFVfTUFTS19BTEwsIC52ZWN0b3IgPSBJUlEyX1ZFQ1RPUiwgIH0sCi0JWzNdICA9IHsgLmRvbWFpbiA9IENQVV9NQVNLX0FMTCwgLnZlY3RvciA9IElSUTNfVkVDVE9SLCAgfSwKLQlbNF0gID0geyAuZG9tYWluID0gQ1BVX01BU0tfQUxMLCAudmVjdG9yID0gSVJRNF9WRUNUT1IsICB9LAotCVs1XSAgPSB7IC5kb21haW4gPSBDUFVfTUFTS19BTEwsIC52ZWN0b3IgPSBJUlE1X1ZFQ1RPUiwgIH0sCi0JWzZdICA9IHsgLmRvbWFpbiA9IENQVV9NQVNLX0FMTCwgLnZlY3RvciA9IElSUTZfVkVDVE9SLCAgfSwKLQlbN10gID0geyAuZG9tYWluID0gQ1BVX01BU0tfQUxMLCAudmVjdG9yID0gSVJRN19WRUNUT1IsICB9LAotCVs4XSAgPSB7IC5kb21haW4gPSBDUFVfTUFTS19BTEwsIC52ZWN0b3IgPSBJUlE4X1ZFQ1RPUiwgIH0sCi0JWzldICA9IHsgLmRvbWFpbiA9IENQVV9NQVNLX0FMTCwgLnZlY3RvciA9IElSUTlfVkVDVE9SLCAgfSwKLQlbMTBdID0geyAuZG9tYWluID0gQ1BVX01BU0tfQUxMLCAudmVjdG9yID0gSVJRMTBfVkVDVE9SLCB9LAotCVsxMV0gPSB7IC5kb21haW4gPSBDUFVfTUFTS19BTEwsIC52ZWN0b3IgPSBJUlExMV9WRUNUT1IsIH0sCi0JWzEyXSA9IHsgLmRvbWFpbiA9IENQVV9NQVNLX0FMTCwgLnZlY3RvciA9IElSUTEyX1ZFQ1RPUiwgfSwKLQlbMTNdID0geyAuZG9tYWluID0gQ1BVX01BU0tfQUxMLCAudmVjdG9yID0gSVJRMTNfVkVDVE9SLCB9LAotCVsxNF0gPSB7IC5kb21haW4gPSBDUFVfTUFTS19BTEwsIC52ZWN0b3IgPSBJUlExNF9WRUNUT1IsIH0sCi0JWzE1XSA9IHsgLmRvbWFpbiA9IENQVV9NQVNLX0FMTCwgLnZlY3RvciA9IElSUTE1X1ZFQ1RPUiwgfSwKLX07Ci0KLXN0YXRpYyBpbnQgYXNzaWduX2lycV92ZWN0b3IoaW50IGlycSwgY3B1bWFza190IG1hc2spOwotCi1pbnQgZmlyc3Rfc3lzdGVtX3ZlY3RvciA9IDB4ZmU7Ci0KLWNoYXIgc3lzdGVtX3ZlY3RvcnNbTlJfVkVDVE9SU10gPSB7IFswIC4uLiBOUl9WRUNUT1JTLTFdID0gU1lTX1ZFQ1RPUl9GUkVFfTsKLQotaW50IHNpc19hcGljX2J1ZzsgLyogbm90IGFjdHVhbGx5IHN1cHBvcnRlZCwgZHVtbXkgZm9yIGNvbXBpbGUgKi8KLQotc3RhdGljIGludCBub190aW1lcl9jaGVjazsKLQotc3RhdGljIGludCBkaXNhYmxlX3RpbWVyX3Bpbl8xIF9faW5pdGRhdGE7Ci0KLWludCB0aW1lcl90aHJvdWdoXzgyNTkgX19pbml0ZGF0YTsKLQotLyogV2hlcmUgaWYgYW55d2hlcmUgaXMgdGhlIGk4MjU5IGNvbm5lY3QgaW4gZXh0ZXJuYWwgaW50IG1vZGUgKi8KLXN0YXRpYyBzdHJ1Y3QgeyBpbnQgcGluLCBhcGljOyB9IGlvYXBpY19pODI1OSA9IHsgLTEsIC0xIH07Ci0KLXN0YXRpYyBERUZJTkVfU1BJTkxPQ0soaW9hcGljX2xvY2spOwotc3RhdGljIERFRklORV9TUElOTE9DSyh2ZWN0b3JfbG9jayk7Ci0KLS8qCi0gKiAjIG9mIElSUSByb3V0aW5nIHJlZ2lzdGVycwotICovCi1pbnQgbnJfaW9hcGljX3JlZ2lzdGVyc1tNQVhfSU9fQVBJQ1NdOwotCi0vKiBJL08gQVBJQyBSVEUgY29udGVudHMgYXQgdGhlIE9TIGJvb3QgdXAgKi8KLXN0cnVjdCBJT19BUElDX3JvdXRlX2VudHJ5ICplYXJseV9pb2FwaWNfZW50cmllc1tNQVhfSU9fQVBJQ1NdOwotCi0vKiBJL08gQVBJQyBlbnRyaWVzICovCi1zdHJ1Y3QgbXBfY29uZmlnX2lvYXBpYyBtcF9pb2FwaWNzW01BWF9JT19BUElDU107Ci1pbnQgbnJfaW9hcGljczsKLQotLyogTVAgSVJRIHNvdXJjZSBlbnRyaWVzICovCi1zdHJ1Y3QgbXBfY29uZmlnX2ludHNyYyBtcF9pcnFzW01BWF9JUlFfU09VUkNFU107Ci0KLS8qICMgb2YgTVAgSVJRIHNvdXJjZSBlbnRyaWVzICovCi1pbnQgbXBfaXJxX2VudHJpZXM7Ci0KLURFQ0xBUkVfQklUTUFQKG1wX2J1c19ub3RfcGNpLCBNQVhfTVBfQlVTU0VTKTsKLQotLyoKLSAqIFJvdWdoIGVzdGltYXRpb24gb2YgaG93IG1hbnkgc2hhcmVkIElSUXMgdGhlcmUgYXJlLCBjYW4KLSAqIGJlIGNoYW5nZWQgYW55dGltZS4KLSAqLwotI2RlZmluZSBNQVhfUExVU19TSEFSRURfSVJRUyBOUl9JUlFTCi0jZGVmaW5lIFBJTl9NQVBfU0laRSAoTUFYX1BMVVNfU0hBUkVEX0lSUVMgKyBOUl9JUlFTKQotCi0vKgotICogVGhpcyBpcyBwZXJmb3JtYW5jZS1jcml0aWNhbCwgd2Ugd2FudCB0byBkbyBpdCBPKDEpCi0gKgotICogdGhlIGluZGV4aW5nIG9yZGVyIG9mIHRoaXMgYXJyYXkgZmF2b3JzIDE6MSBtYXBwaW5ncwotICogYmV0d2VlbiBwaW5zIGFuZCBJUlFzLgotICovCi0KLXN0YXRpYyBzdHJ1Y3QgaXJxX3Bpbl9saXN0IHsKLQlzaG9ydCBhcGljLCBwaW4sIG5leHQ7Ci19IGlycV8yX3BpbltQSU5fTUFQX1NJWkVdOwotCi1zdHJ1Y3QgaW9fYXBpYyB7Ci0JdW5zaWduZWQgaW50IGluZGV4OwotCXVuc2lnbmVkIGludCB1bnVzZWRbM107Ci0JdW5zaWduZWQgaW50IGRhdGE7Ci19OwotCi1zdGF0aWMgX19hdHRyaWJ1dGVfY29uc3RfXyBzdHJ1Y3QgaW9fYXBpYyBfX2lvbWVtICppb19hcGljX2Jhc2UoaW50IGlkeCkKLXsKLQlyZXR1cm4gKHZvaWQgX19pb21lbSAqKSBfX2ZpeF90b192aXJ0KEZJWF9JT19BUElDX0JBU0VfMCArIGlkeCkKLQkJKyAobXBfaW9hcGljc1tpZHhdLm1wX2FwaWNhZGRyICYgflBBR0VfTUFTSyk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGlvX2FwaWNfcmVhZCh1bnNpZ25lZCBpbnQgYXBpYywgdW5zaWduZWQgaW50IHJlZykKLXsKLQlzdHJ1Y3QgaW9fYXBpYyBfX2lvbWVtICppb19hcGljID0gaW9fYXBpY19iYXNlKGFwaWMpOwotCXdyaXRlbChyZWcsICZpb19hcGljLT5pbmRleCk7Ci0JcmV0dXJuIHJlYWRsKCZpb19hcGljLT5kYXRhKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGlvX2FwaWNfd3JpdGUodW5zaWduZWQgaW50IGFwaWMsIHVuc2lnbmVkIGludCByZWcsIHVuc2lnbmVkIGludCB2YWx1ZSkKLXsKLQlzdHJ1Y3QgaW9fYXBpYyBfX2lvbWVtICppb19hcGljID0gaW9fYXBpY19iYXNlKGFwaWMpOwotCXdyaXRlbChyZWcsICZpb19hcGljLT5pbmRleCk7Ci0Jd3JpdGVsKHZhbHVlLCAmaW9fYXBpYy0+ZGF0YSk7Ci19Ci0KLS8qCi0gKiBSZS13cml0ZSBhIHZhbHVlOiB0byBiZSB1c2VkIGZvciByZWFkLW1vZGlmeS13cml0ZQotICogY3ljbGVzIHdoZXJlIHRoZSByZWFkIGFscmVhZHkgc2V0IHVwIHRoZSBpbmRleCByZWdpc3Rlci4KLSAqLwotc3RhdGljIGlubGluZSB2b2lkIGlvX2FwaWNfbW9kaWZ5KHVuc2lnbmVkIGludCBhcGljLCB1bnNpZ25lZCBpbnQgdmFsdWUpCi17Ci0Jc3RydWN0IGlvX2FwaWMgX19pb21lbSAqaW9fYXBpYyA9IGlvX2FwaWNfYmFzZShhcGljKTsKLQl3cml0ZWwodmFsdWUsICZpb19hcGljLT5kYXRhKTsKLX0KLQotc3RhdGljIGJvb2wgaW9fYXBpY19sZXZlbF9hY2tfcGVuZGluZyh1bnNpZ25lZCBpbnQgaXJxKQotewotCXN0cnVjdCBpcnFfcGluX2xpc3QgKmVudHJ5OwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmaW9hcGljX2xvY2ssIGZsYWdzKTsKLQllbnRyeSA9IGlycV8yX3BpbiArIGlycTsKLQlmb3IgKDs7KSB7Ci0JCXVuc2lnbmVkIGludCByZWc7Ci0JCWludCBwaW47Ci0KLQkJcGluID0gZW50cnktPnBpbjsKLQkJaWYgKHBpbiA9PSAtMSkKLQkJCWJyZWFrOwotCQlyZWcgPSBpb19hcGljX3JlYWQoZW50cnktPmFwaWMsIDB4MTAgKyBwaW4qMik7Ci0JCS8qIElzIHRoZSByZW1vdGUgSVJSIGJpdCBzZXQ/ICovCi0JCWlmIChyZWcgJiBJT19BUElDX1JFRElSX1JFTU9URV9JUlIpIHsKLQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYXBpY19sb2NrLCBmbGFncyk7Ci0JCQlyZXR1cm4gdHJ1ZTsKLQkJfQotCQlpZiAoIWVudHJ5LT5uZXh0KQotCQkJYnJlYWs7Ci0JCWVudHJ5ID0gaXJxXzJfcGluICsgZW50cnktPm5leHQ7Ci0JfQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYXBpY19sb2NrLCBmbGFncyk7Ci0KLQlyZXR1cm4gZmFsc2U7Ci19Ci0KLS8qCi0gKiBTeW5jaHJvbml6ZSB0aGUgSU8tQVBJQyBhbmQgdGhlIENQVSBieSBkb2luZwotICogYSBkdW1teSByZWFkIGZyb20gdGhlIElPLUFQSUMKLSAqLwotc3RhdGljIGlubGluZSB2b2lkIGlvX2FwaWNfc3luYyh1bnNpZ25lZCBpbnQgYXBpYykKLXsKLQlzdHJ1Y3QgaW9fYXBpYyBfX2lvbWVtICppb19hcGljID0gaW9fYXBpY19iYXNlKGFwaWMpOwotCXJlYWRsKCZpb19hcGljLT5kYXRhKTsKLX0KLQotI2RlZmluZSBfX0RPX0FDVElPTihSLCBBQ1RJT04sIEZJTkFMKQkJCQkJXAotCQkJCQkJCQkJXAotewkJCQkJCQkJCVwKLQlpbnQgcGluOwkJCQkJCQlcCi0Jc3RydWN0IGlycV9waW5fbGlzdCAqZW50cnkgPSBpcnFfMl9waW4gKyBpcnE7CQkJXAotCQkJCQkJCQkJXAotCUJVR19PTihpcnEgPj0gTlJfSVJRUyk7CQkJCQkJXAotCWZvciAoOzspIHsJCQkJCQkJXAotCQl1bnNpZ25lZCBpbnQgcmVnOwkJCQkJXAotCQlwaW4gPSBlbnRyeS0+cGluOwkJCQkJXAotCQlpZiAocGluID09IC0xKQkJCQkJCVwKLQkJCWJyZWFrOwkJCQkJCVwKLQkJcmVnID0gaW9fYXBpY19yZWFkKGVudHJ5LT5hcGljLCAweDEwICsgUiArIHBpbioyKTsJXAotCQlyZWcgQUNUSU9OOwkJCQkJCVwKLQkJaW9fYXBpY19tb2RpZnkoZW50cnktPmFwaWMsIHJlZyk7CQkJXAotCQlGSU5BTDsJCQkJCQkJXAotCQlpZiAoIWVudHJ5LT5uZXh0KQkJCQkJXAotCQkJYnJlYWs7CQkJCQkJXAotCQllbnRyeSA9IGlycV8yX3BpbiArIGVudHJ5LT5uZXh0OwkJCVwKLQl9CQkJCQkJCQlcCi19Ci0KLXVuaW9uIGVudHJ5X3VuaW9uIHsKLQlzdHJ1Y3QgeyB1MzIgdzEsIHcyOyB9OwotCXN0cnVjdCBJT19BUElDX3JvdXRlX2VudHJ5IGVudHJ5OwotfTsKLQotc3RhdGljIHN0cnVjdCBJT19BUElDX3JvdXRlX2VudHJ5IGlvYXBpY19yZWFkX2VudHJ5KGludCBhcGljLCBpbnQgcGluKQotewotCXVuaW9uIGVudHJ5X3VuaW9uIGV1OwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0Jc3Bpbl9sb2NrX2lycXNhdmUoJmlvYXBpY19sb2NrLCBmbGFncyk7Ci0JZXUudzEgPSBpb19hcGljX3JlYWQoYXBpYywgMHgxMCArIDIgKiBwaW4pOwotCWV1LncyID0gaW9fYXBpY19yZWFkKGFwaWMsIDB4MTEgKyAyICogcGluKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2FwaWNfbG9jaywgZmxhZ3MpOwotCXJldHVybiBldS5lbnRyeTsKLX0KLQotLyoKLSAqIFdoZW4gd2Ugd3JpdGUgYSBuZXcgSU8gQVBJQyByb3V0aW5nIGVudHJ5LCB3ZSBuZWVkIHRvIHdyaXRlIHRoZSBoaWdoCi0gKiB3b3JkIGZpcnN0ISBJZiB0aGUgbWFzayBiaXQgaW4gdGhlIGxvdyB3b3JkIGlzIGNsZWFyLCB3ZSB3aWxsIGVuYWJsZQotICogdGhlIGludGVycnVwdCwgYW5kIHdlIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSBlbnRyeSBpcyBmdWxseSBwb3B1bGF0ZWQKLSAqIGJlZm9yZSB0aGF0IGhhcHBlbnMuCi0gKi8KLXN0YXRpYyB2b2lkCi1fX2lvYXBpY193cml0ZV9lbnRyeShpbnQgYXBpYywgaW50IHBpbiwgc3RydWN0IElPX0FQSUNfcm91dGVfZW50cnkgZSkKLXsKLQl1bmlvbiBlbnRyeV91bmlvbiBldTsKLQlldS5lbnRyeSA9IGU7Ci0JaW9fYXBpY193cml0ZShhcGljLCAweDExICsgMipwaW4sIGV1LncyKTsKLQlpb19hcGljX3dyaXRlKGFwaWMsIDB4MTAgKyAyKnBpbiwgZXUudzEpOwotfQotCi1zdGF0aWMgdm9pZCBpb2FwaWNfd3JpdGVfZW50cnkoaW50IGFwaWMsIGludCBwaW4sIHN0cnVjdCBJT19BUElDX3JvdXRlX2VudHJ5IGUpCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlzcGluX2xvY2tfaXJxc2F2ZSgmaW9hcGljX2xvY2ssIGZsYWdzKTsKLQlfX2lvYXBpY193cml0ZV9lbnRyeShhcGljLCBwaW4sIGUpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYXBpY19sb2NrLCBmbGFncyk7Ci19Ci0KLS8qCi0gKiBXaGVuIHdlIG1hc2sgYW4gSU8gQVBJQyByb3V0aW5nIGVudHJ5LCB3ZSBuZWVkIHRvIHdyaXRlIHRoZSBsb3cKLSAqIHdvcmQgZmlyc3QsIGluIG9yZGVyIHRvIHNldCB0aGUgbWFzayBiaXQgYmVmb3JlIHdlIGNoYW5nZSB0aGUKLSAqIGhpZ2ggYml0cyEKLSAqLwotc3RhdGljIHZvaWQgaW9hcGljX21hc2tfZW50cnkoaW50IGFwaWMsIGludCBwaW4pCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQl1bmlvbiBlbnRyeV91bmlvbiBldSA9IHsgLmVudHJ5Lm1hc2sgPSAxIH07Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmaW9hcGljX2xvY2ssIGZsYWdzKTsKLQlpb19hcGljX3dyaXRlKGFwaWMsIDB4MTAgKyAyKnBpbiwgZXUudzEpOwotCWlvX2FwaWNfd3JpdGUoYXBpYywgMHgxMSArIDIqcGluLCBldS53Mik7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9hcGljX2xvY2ssIGZsYWdzKTsKLX0KLQotI2lmZGVmIENPTkZJR19TTVAKLXN0YXRpYyB2b2lkIF9fdGFyZ2V0X0lPX0FQSUNfaXJxKHVuc2lnbmVkIGludCBpcnEsIHVuc2lnbmVkIGludCBkZXN0LCB1OCB2ZWN0b3IpCi17Ci0JaW50IGFwaWMsIHBpbjsKLQlzdHJ1Y3QgaXJxX3Bpbl9saXN0ICplbnRyeSA9IGlycV8yX3BpbiArIGlycTsKLQotCUJVR19PTihpcnEgPj0gTlJfSVJRUyk7Ci0JZm9yICg7OykgewotCQl1bnNpZ25lZCBpbnQgcmVnOwotCQlhcGljID0gZW50cnktPmFwaWM7Ci0JCXBpbiA9IGVudHJ5LT5waW47Ci0JCWlmIChwaW4gPT0gLTEpCi0JCQlicmVhazsKLQkJLyoKLQkJICogV2l0aCBpbnRlcnJ1cHQtcmVtYXBwaW5nLCBkZXN0aW5hdGlvbiBpbmZvcm1hdGlvbiBjb21lcwotCQkgKiBmcm9tIGludGVycnVwdC1yZW1hcHBpbmcgdGFibGUgZW50cnkuCi0JCSAqLwotCQlpZiAoIWlycV9yZW1hcHBlZChpcnEpKQotCQkJaW9fYXBpY193cml0ZShhcGljLCAweDExICsgcGluKjIsIGRlc3QpOwotCQlyZWcgPSBpb19hcGljX3JlYWQoYXBpYywgMHgxMCArIHBpbioyKTsKLQkJcmVnICY9IH5JT19BUElDX1JFRElSX1ZFQ1RPUl9NQVNLOwotCQlyZWcgfD0gdmVjdG9yOwotCQlpb19hcGljX21vZGlmeShhcGljLCByZWcpOwotCQlpZiAoIWVudHJ5LT5uZXh0KQotCQkJYnJlYWs7Ci0JCWVudHJ5ID0gaXJxXzJfcGluICsgZW50cnktPm5leHQ7Ci0JfQotfQotCi1zdGF0aWMgdm9pZCBzZXRfaW9hcGljX2FmZmluaXR5X2lycSh1bnNpZ25lZCBpbnQgaXJxLCBjcHVtYXNrX3QgbWFzaykKLXsKLQlzdHJ1Y3QgaXJxX2NmZyAqY2ZnID0gaXJxX2NmZyArIGlycTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXVuc2lnbmVkIGludCBkZXN0OwotCWNwdW1hc2tfdCB0bXA7Ci0KLQljcHVzX2FuZCh0bXAsIG1hc2ssIGNwdV9vbmxpbmVfbWFwKTsKLQlpZiAoY3B1c19lbXB0eSh0bXApKQotCQlyZXR1cm47Ci0KLQlpZiAoYXNzaWduX2lycV92ZWN0b3IoaXJxLCBtYXNrKSkKLQkJcmV0dXJuOwotCi0JY3B1c19hbmQodG1wLCBjZmctPmRvbWFpbiwgbWFzayk7Ci0JZGVzdCA9IGNwdV9tYXNrX3RvX2FwaWNpZCh0bXApOwotCi0JLyoKLQkgKiBPbmx5IHRoZSBoaWdoIDggYml0cyBhcmUgdmFsaWQuCi0JICovCi0JZGVzdCA9IFNFVF9BUElDX0xPR0lDQUxfSUQoZGVzdCk7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmaW9hcGljX2xvY2ssIGZsYWdzKTsKLQlfX3RhcmdldF9JT19BUElDX2lycShpcnEsIGRlc3QsIGNmZy0+dmVjdG9yKTsKLQlpcnFfZGVzY1tpcnFdLmFmZmluaXR5ID0gbWFzazsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2FwaWNfbG9jaywgZmxhZ3MpOwotfQotI2VuZGlmCi0KLS8qCi0gKiBUaGUgY29tbW9uIGNhc2UgaXMgMToxIElSUTwtPnBpbiBtYXBwaW5ncy4gU29tZXRpbWVzIHRoZXJlIGFyZQotICogc2hhcmVkIElTQS1zcGFjZSBJUlFzLCBzbyB3ZSBoYXZlIHRvIHN1cHBvcnQgdGhlbS4gV2UgYXJlIHN1cGVyCi0gKiBmYXN0IGluIHRoZSBjb21tb24gY2FzZSwgYW5kIGZhc3QgZm9yIHNoYXJlZCBJU0Etc3BhY2UgSVJRcy4KLSAqLwotc3RhdGljIHZvaWQgYWRkX3Bpbl90b19pcnEodW5zaWduZWQgaW50IGlycSwgaW50IGFwaWMsIGludCBwaW4pCi17Ci0Jc3RhdGljIGludCBmaXJzdF9mcmVlX2VudHJ5ID0gTlJfSVJRUzsKLQlzdHJ1Y3QgaXJxX3Bpbl9saXN0ICplbnRyeSA9IGlycV8yX3BpbiArIGlycTsKLQotCUJVR19PTihpcnEgPj0gTlJfSVJRUyk7Ci0Jd2hpbGUgKGVudHJ5LT5uZXh0KQotCQllbnRyeSA9IGlycV8yX3BpbiArIGVudHJ5LT5uZXh0OwotCi0JaWYgKGVudHJ5LT5waW4gIT0gLTEpIHsKLQkJZW50cnktPm5leHQgPSBmaXJzdF9mcmVlX2VudHJ5OwotCQllbnRyeSA9IGlycV8yX3BpbiArIGVudHJ5LT5uZXh0OwotCQlpZiAoKytmaXJzdF9mcmVlX2VudHJ5ID49IFBJTl9NQVBfU0laRSkKLQkJCXBhbmljKCJpb19hcGljLmM6IHJhbiBvdXQgb2YgaXJxXzJfcGluIGVudHJpZXMhIik7Ci0JfQotCWVudHJ5LT5hcGljID0gYXBpYzsKLQllbnRyeS0+cGluID0gcGluOwotfQotCi0vKgotICogUmVyb3V0ZSBhbiBJUlEgdG8gYSBkaWZmZXJlbnQgcGluLgotICovCi1zdGF0aWMgdm9pZCBfX2luaXQgcmVwbGFjZV9waW5fYXRfaXJxKHVuc2lnbmVkIGludCBpcnEsCi0JCQkJICAgICAgaW50IG9sZGFwaWMsIGludCBvbGRwaW4sCi0JCQkJICAgICAgaW50IG5ld2FwaWMsIGludCBuZXdwaW4pCi17Ci0Jc3RydWN0IGlycV9waW5fbGlzdCAqZW50cnkgPSBpcnFfMl9waW4gKyBpcnE7Ci0KLQl3aGlsZSAoMSkgewotCQlpZiAoZW50cnktPmFwaWMgPT0gb2xkYXBpYyAmJiBlbnRyeS0+cGluID09IG9sZHBpbikgewotCQkJZW50cnktPmFwaWMgPSBuZXdhcGljOwotCQkJZW50cnktPnBpbiA9IG5ld3BpbjsKLQkJfQotCQlpZiAoIWVudHJ5LT5uZXh0KQotCQkJYnJlYWs7Ci0JCWVudHJ5ID0gaXJxXzJfcGluICsgZW50cnktPm5leHQ7Ci0JfQotfQotCi0KLSNkZWZpbmUgRE9fQUNUSU9OKG5hbWUsUixBQ1RJT04sIEZJTkFMKQkJCQkJXAotCQkJCQkJCQkJXAotCXN0YXRpYyB2b2lkIG5hbWUjI19JT19BUElDX2lycSAodW5zaWduZWQgaW50IGlycSkJCVwKLQlfX0RPX0FDVElPTihSLCBBQ1RJT04sIEZJTkFMKQotCi0vKiBtYXNrID0gMSAqLwotRE9fQUNUSU9OKF9fbWFzaywJMCwgfD0gSU9fQVBJQ19SRURJUl9NQVNLRUQsIGlvX2FwaWNfc3luYyhlbnRyeS0+YXBpYykpCi0KLS8qIG1hc2sgPSAwICovCi1ET19BQ1RJT04oX191bm1hc2ssCTAsICY9IH5JT19BUElDX1JFRElSX01BU0tFRCwgKQotCi1zdGF0aWMgdm9pZCBtYXNrX0lPX0FQSUNfaXJxICh1bnNpZ25lZCBpbnQgaXJxKQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmaW9hcGljX2xvY2ssIGZsYWdzKTsKLQlfX21hc2tfSU9fQVBJQ19pcnEoaXJxKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2FwaWNfbG9jaywgZmxhZ3MpOwotfQotCi1zdGF0aWMgdm9pZCB1bm1hc2tfSU9fQVBJQ19pcnEgKHVuc2lnbmVkIGludCBpcnEpCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZpb2FwaWNfbG9jaywgZmxhZ3MpOwotCV9fdW5tYXNrX0lPX0FQSUNfaXJxKGlycSk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9hcGljX2xvY2ssIGZsYWdzKTsKLX0KLQotc3RhdGljIHZvaWQgY2xlYXJfSU9fQVBJQ19waW4odW5zaWduZWQgaW50IGFwaWMsIHVuc2lnbmVkIGludCBwaW4pCi17Ci0Jc3RydWN0IElPX0FQSUNfcm91dGVfZW50cnkgZW50cnk7Ci0KLQkvKiBDaGVjayBkZWxpdmVyeV9tb2RlIHRvIGJlIHN1cmUgd2UncmUgbm90IGNsZWFyaW5nIGFuIFNNSSBwaW4gKi8KLQllbnRyeSA9IGlvYXBpY19yZWFkX2VudHJ5KGFwaWMsIHBpbik7Ci0JaWYgKGVudHJ5LmRlbGl2ZXJ5X21vZGUgPT0gZGVzdF9TTUkpCi0JCXJldHVybjsKLQkvKgotCSAqIERpc2FibGUgaXQgaW4gdGhlIElPLUFQSUMgaXJxLXJvdXRpbmcgdGFibGU6Ci0JICovCi0JaW9hcGljX21hc2tfZW50cnkoYXBpYywgcGluKTsKLX0KLQotc3RhdGljIHZvaWQgY2xlYXJfSU9fQVBJQyAodm9pZCkKLXsKLQlpbnQgYXBpYywgcGluOwotCi0JZm9yIChhcGljID0gMDsgYXBpYyA8IG5yX2lvYXBpY3M7IGFwaWMrKykKLQkJZm9yIChwaW4gPSAwOyBwaW4gPCBucl9pb2FwaWNfcmVnaXN0ZXJzW2FwaWNdOyBwaW4rKykKLQkJCWNsZWFyX0lPX0FQSUNfcGluKGFwaWMsIHBpbik7Ci19Ci0KLS8qCi0gKiBTYXZlcyBhbmQgbWFza3MgYWxsIHRoZSB1bm1hc2tlZCBJTy1BUElDIFJURSdzCi0gKi8KLWludCBzYXZlX21hc2tfSU9fQVBJQ19zZXR1cCh2b2lkKQotewotCXVuaW9uIElPX0FQSUNfcmVnXzAxIHJlZ18wMTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWludCBhcGljLCBwaW47Ci0KLQkvKgotCSAqIFRoZSBudW1iZXIgb2YgSU8tQVBJQyBJUlEgcmVnaXN0ZXJzICg9PSAjcGlucyk6Ci0JICovCi0JZm9yIChhcGljID0gMDsgYXBpYyA8IG5yX2lvYXBpY3M7IGFwaWMrKykgewotCQlzcGluX2xvY2tfaXJxc2F2ZSgmaW9hcGljX2xvY2ssIGZsYWdzKTsKLQkJcmVnXzAxLnJhdyA9IGlvX2FwaWNfcmVhZChhcGljLCAxKTsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9hcGljX2xvY2ssIGZsYWdzKTsKLQkJbnJfaW9hcGljX3JlZ2lzdGVyc1thcGljXSA9IHJlZ18wMS5iaXRzLmVudHJpZXMrMTsKLQl9Ci0KLQlmb3IgKGFwaWMgPSAwOyBhcGljIDwgbnJfaW9hcGljczsgYXBpYysrKSB7Ci0JCWVhcmx5X2lvYXBpY19lbnRyaWVzW2FwaWNdID0KLQkJCWt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBJT19BUElDX3JvdXRlX2VudHJ5KSAqCi0JCQkJbnJfaW9hcGljX3JlZ2lzdGVyc1thcGljXSwgR0ZQX0tFUk5FTCk7Ci0JCWlmICghZWFybHlfaW9hcGljX2VudHJpZXNbYXBpY10pCi0JCQlyZXR1cm4gLUVOT01FTTsKLQl9Ci0KLQlmb3IgKGFwaWMgPSAwOyBhcGljIDwgbnJfaW9hcGljczsgYXBpYysrKQotCQlmb3IgKHBpbiA9IDA7IHBpbiA8IG5yX2lvYXBpY19yZWdpc3RlcnNbYXBpY107IHBpbisrKSB7Ci0JCQlzdHJ1Y3QgSU9fQVBJQ19yb3V0ZV9lbnRyeSBlbnRyeTsKLQotCQkJZW50cnkgPSBlYXJseV9pb2FwaWNfZW50cmllc1thcGljXVtwaW5dID0KLQkJCQlpb2FwaWNfcmVhZF9lbnRyeShhcGljLCBwaW4pOwotCQkJaWYgKCFlbnRyeS5tYXNrKSB7Ci0JCQkJZW50cnkubWFzayA9IDE7Ci0JCQkJaW9hcGljX3dyaXRlX2VudHJ5KGFwaWMsIHBpbiwgZW50cnkpOwotCQkJfQotCQl9Ci0JcmV0dXJuIDA7Ci19Ci0KLXZvaWQgcmVzdG9yZV9JT19BUElDX3NldHVwKHZvaWQpCi17Ci0JaW50IGFwaWMsIHBpbjsKLQotCWZvciAoYXBpYyA9IDA7IGFwaWMgPCBucl9pb2FwaWNzOyBhcGljKyspCi0JCWZvciAocGluID0gMDsgcGluIDwgbnJfaW9hcGljX3JlZ2lzdGVyc1thcGljXTsgcGluKyspCi0JCQlpb2FwaWNfd3JpdGVfZW50cnkoYXBpYywgcGluLAotCQkJCQkgICBlYXJseV9pb2FwaWNfZW50cmllc1thcGljXVtwaW5dKTsKLX0KLQotdm9pZCByZWluaXRfaW50cl9yZW1hcHBlZF9JT19BUElDKGludCBpbnRyX3JlbWFwcGluZykKLXsKLQkvKgotCSAqIGZvciBub3cgcGxhaW4gcmVzdG9yZSBvZiBwcmV2aW91cyBzZXR0aW5ncy4KLQkgKiBUQkQ6IEluIHRoZSBjYXNlIG9mIE9TIGVuYWJsaW5nIGludGVycnVwdC1yZW1hcHBpbmcsCi0JICogSU8tQVBJQyBSVEUncyBuZWVkIHRvIGJlIHNldHVwIHRvIHBvaW50IHRvIGludGVycnVwdC1yZW1hcHBpbmcKLQkgKiB0YWJsZSBlbnRyaWVzLiBmb3Igbm93LCBkbyBhIHBsYWluIHJlc3RvcmUsIGFuZCB3YWl0IGZvcgotCSAqIHRoZSBzZXR1cF9JT19BUElDX2lycXMoKSB0byBkbyBwcm9wZXIgaW5pdGlhbGl6YXRpb24uCi0JICovCi0JcmVzdG9yZV9JT19BUElDX3NldHVwKCk7Ci19Ci0KLWludCBza2lwX2lvYXBpY19zZXR1cDsKLWludCBpb2FwaWNfZm9yY2U7Ci0KLXN0YXRpYyBpbnQgX19pbml0IHBhcnNlX25vYXBpYyhjaGFyICpzdHIpCi17Ci0JZGlzYWJsZV9pb2FwaWNfc2V0dXAoKTsKLQlyZXR1cm4gMDsKLX0KLWVhcmx5X3BhcmFtKCJub2FwaWMiLCBwYXJzZV9ub2FwaWMpOwotCi0vKiBBY3R1YWxseSB0aGUgbmV4dCBpcyBvYnNvbGV0ZSwgYnV0IGtlZXAgaXQgZm9yIHBhcmFub2lkIHJlYXNvbnMgLUFLICovCi1zdGF0aWMgaW50IF9faW5pdCBkaXNhYmxlX3RpbWVyX3Bpbl9zZXR1cChjaGFyICphcmcpCi17Ci0JZGlzYWJsZV90aW1lcl9waW5fMSA9IDE7Ci0JcmV0dXJuIDE7Ci19Ci1fX3NldHVwKCJkaXNhYmxlX3RpbWVyX3Bpbl8xIiwgZGlzYWJsZV90aW1lcl9waW5fc2V0dXApOwotCi0KLS8qCi0gKiBGaW5kIHRoZSBJUlEgZW50cnkgbnVtYmVyIG9mIGEgY2VydGFpbiBwaW4uCi0gKi8KLXN0YXRpYyBpbnQgZmluZF9pcnFfZW50cnkoaW50IGFwaWMsIGludCBwaW4sIGludCB0eXBlKQotewotCWludCBpOwotCi0JZm9yIChpID0gMDsgaSA8IG1wX2lycV9lbnRyaWVzOyBpKyspCi0JCWlmIChtcF9pcnFzW2ldLm1wX2lycXR5cGUgPT0gdHlwZSAmJgotCQkgICAgKG1wX2lycXNbaV0ubXBfZHN0YXBpYyA9PSBtcF9pb2FwaWNzW2FwaWNdLm1wX2FwaWNpZCB8fAotCQkgICAgIG1wX2lycXNbaV0ubXBfZHN0YXBpYyA9PSBNUF9BUElDX0FMTCkgJiYKLQkJICAgIG1wX2lycXNbaV0ubXBfZHN0aXJxID09IHBpbikKLQkJCXJldHVybiBpOwotCi0JcmV0dXJuIC0xOwotfQotCi0vKgotICogRmluZCB0aGUgcGluIHRvIHdoaWNoIElSUVtpcnFdIChJU0EpIGlzIGNvbm5lY3RlZAotICovCi1zdGF0aWMgaW50IF9faW5pdCBmaW5kX2lzYV9pcnFfcGluKGludCBpcnEsIGludCB0eXBlKQotewotCWludCBpOwotCi0JZm9yIChpID0gMDsgaSA8IG1wX2lycV9lbnRyaWVzOyBpKyspIHsKLQkJaW50IGxidXMgPSBtcF9pcnFzW2ldLm1wX3NyY2J1czsKLQotCQlpZiAodGVzdF9iaXQobGJ1cywgbXBfYnVzX25vdF9wY2kpICYmCi0JCSAgICAobXBfaXJxc1tpXS5tcF9pcnF0eXBlID09IHR5cGUpICYmCi0JCSAgICAobXBfaXJxc1tpXS5tcF9zcmNidXNpcnEgPT0gaXJxKSkKLQotCQkJcmV0dXJuIG1wX2lycXNbaV0ubXBfZHN0aXJxOwotCX0KLQlyZXR1cm4gLTE7Ci19Ci0KLXN0YXRpYyBpbnQgX19pbml0IGZpbmRfaXNhX2lycV9hcGljKGludCBpcnEsIGludCB0eXBlKQotewotCWludCBpOwotCi0JZm9yIChpID0gMDsgaSA8IG1wX2lycV9lbnRyaWVzOyBpKyspIHsKLQkJaW50IGxidXMgPSBtcF9pcnFzW2ldLm1wX3NyY2J1czsKLQotCQlpZiAodGVzdF9iaXQobGJ1cywgbXBfYnVzX25vdF9wY2kpICYmCi0JCSAgICAobXBfaXJxc1tpXS5tcF9pcnF0eXBlID09IHR5cGUpICYmCi0JCSAgICAobXBfaXJxc1tpXS5tcF9zcmNidXNpcnEgPT0gaXJxKSkKLQkJCWJyZWFrOwotCX0KLQlpZiAoaSA8IG1wX2lycV9lbnRyaWVzKSB7Ci0JCWludCBhcGljOwotCQlmb3IoYXBpYyA9IDA7IGFwaWMgPCBucl9pb2FwaWNzOyBhcGljKyspIHsKLQkJCWlmIChtcF9pb2FwaWNzW2FwaWNdLm1wX2FwaWNpZCA9PSBtcF9pcnFzW2ldLm1wX2RzdGFwaWMpCi0JCQkJcmV0dXJuIGFwaWM7Ci0JCX0KLQl9Ci0KLQlyZXR1cm4gLTE7Ci19Ci0KLS8qCi0gKiBGaW5kIGEgc3BlY2lmaWMgUENJIElSUSBlbnRyeS4KLSAqIE5vdCBhbiBfX2luaXQsIHBvc3NpYmx5IG5lZWRlZCBieSBtb2R1bGVzCi0gKi8KLXN0YXRpYyBpbnQgcGluXzJfaXJxKGludCBpZHgsIGludCBhcGljLCBpbnQgcGluKTsKLQotaW50IElPX0FQSUNfZ2V0X1BDSV9pcnFfdmVjdG9yKGludCBidXMsIGludCBzbG90LCBpbnQgcGluKQotewotCWludCBhcGljLCBpLCBiZXN0X2d1ZXNzID0gLTE7Ci0KLQlhcGljX3ByaW50ayhBUElDX0RFQlVHLCAicXVlcnlpbmcgUENJIC0+IElSUSBtYXBwaW5nIGJ1czolZCwgc2xvdDolZCwgcGluOiVkLlxuIiwKLQkJYnVzLCBzbG90LCBwaW4pOwotCWlmICh0ZXN0X2JpdChidXMsIG1wX2J1c19ub3RfcGNpKSkgewotCQlhcGljX3ByaW50ayhBUElDX1ZFUkJPU0UsICJQQ0kgQklPUyBwYXNzZWQgbm9uZXhpc3RlbnQgUENJIGJ1cyAlZCFcbiIsIGJ1cyk7Ci0JCXJldHVybiAtMTsKLQl9Ci0JZm9yIChpID0gMDsgaSA8IG1wX2lycV9lbnRyaWVzOyBpKyspIHsKLQkJaW50IGxidXMgPSBtcF9pcnFzW2ldLm1wX3NyY2J1czsKLQotCQlmb3IgKGFwaWMgPSAwOyBhcGljIDwgbnJfaW9hcGljczsgYXBpYysrKQotCQkJaWYgKG1wX2lvYXBpY3NbYXBpY10ubXBfYXBpY2lkID09IG1wX2lycXNbaV0ubXBfZHN0YXBpYyB8fAotCQkJICAgIG1wX2lycXNbaV0ubXBfZHN0YXBpYyA9PSBNUF9BUElDX0FMTCkKLQkJCQlicmVhazsKLQotCQlpZiAoIXRlc3RfYml0KGxidXMsIG1wX2J1c19ub3RfcGNpKSAmJgotCQkgICAgIW1wX2lycXNbaV0ubXBfaXJxdHlwZSAmJgotCQkgICAgKGJ1cyA9PSBsYnVzKSAmJgotCQkgICAgKHNsb3QgPT0gKChtcF9pcnFzW2ldLm1wX3NyY2J1c2lycSA+PiAyKSAmIDB4MWYpKSkgewotCQkJaW50IGlycSA9IHBpbl8yX2lycShpLGFwaWMsbXBfaXJxc1tpXS5tcF9kc3RpcnEpOwotCi0JCQlpZiAoIShhcGljIHx8IElPX0FQSUNfSVJRKGlycSkpKQotCQkJCWNvbnRpbnVlOwotCi0JCQlpZiAocGluID09IChtcF9pcnFzW2ldLm1wX3NyY2J1c2lycSAmIDMpKQotCQkJCXJldHVybiBpcnE7Ci0JCQkvKgotCQkJICogVXNlIHRoZSBmaXJzdCBhbGwtYnV0LXBpbiBtYXRjaGluZyBlbnRyeSBhcyBhCi0JCQkgKiBiZXN0LWd1ZXNzIGZ1enp5IHJlc3VsdCBmb3IgYnJva2VuIG1wdGFibGVzLgotCQkJICovCi0JCQlpZiAoYmVzdF9ndWVzcyA8IDApCi0JCQkJYmVzdF9ndWVzcyA9IGlycTsKLQkJfQotCX0KLQlCVUdfT04oYmVzdF9ndWVzcyA+PSBOUl9JUlFTKTsKLQlyZXR1cm4gYmVzdF9ndWVzczsKLX0KLQotLyogSVNBIGludGVycnVwdHMgYXJlIGFsd2F5cyBwb2xhcml0eSB6ZXJvIGVkZ2UgdHJpZ2dlcmVkLAotICogd2hlbiBsaXN0ZWQgYXMgY29uZm9ybWluZyBpbiB0aGUgTVAgdGFibGUuICovCi0KLSNkZWZpbmUgZGVmYXVsdF9JU0FfdHJpZ2dlcihpZHgpCSgwKQotI2RlZmluZSBkZWZhdWx0X0lTQV9wb2xhcml0eShpZHgpCSgwKQotCi0vKiBQQ0kgaW50ZXJydXB0cyBhcmUgYWx3YXlzIHBvbGFyaXR5IG9uZSBsZXZlbCB0cmlnZ2VyZWQsCi0gKiB3aGVuIGxpc3RlZCBhcyBjb25mb3JtaW5nIGluIHRoZSBNUCB0YWJsZS4gKi8KLQotI2RlZmluZSBkZWZhdWx0X1BDSV90cmlnZ2VyKGlkeCkJKDEpCi0jZGVmaW5lIGRlZmF1bHRfUENJX3BvbGFyaXR5KGlkeCkJKDEpCi0KLXN0YXRpYyBpbnQgTVBCSU9TX3BvbGFyaXR5KGludCBpZHgpCi17Ci0JaW50IGJ1cyA9IG1wX2lycXNbaWR4XS5tcF9zcmNidXM7Ci0JaW50IHBvbGFyaXR5OwotCi0JLyoKLQkgKiBEZXRlcm1pbmUgSVJRIGxpbmUgcG9sYXJpdHkgKGhpZ2ggYWN0aXZlIG9yIGxvdyBhY3RpdmUpOgotCSAqLwotCXN3aXRjaCAobXBfaXJxc1tpZHhdLm1wX2lycWZsYWcgJiAzKQotCXsKLQkJY2FzZSAwOiAvKiBjb25mb3JtcywgaWUuIGJ1cy10eXBlIGRlcGVuZGVudCBwb2xhcml0eSAqLwotCQkJaWYgKHRlc3RfYml0KGJ1cywgbXBfYnVzX25vdF9wY2kpKQotCQkJCXBvbGFyaXR5ID0gZGVmYXVsdF9JU0FfcG9sYXJpdHkoaWR4KTsKLQkJCWVsc2UKLQkJCQlwb2xhcml0eSA9IGRlZmF1bHRfUENJX3BvbGFyaXR5KGlkeCk7Ci0JCQlicmVhazsKLQkJY2FzZSAxOiAvKiBoaWdoIGFjdGl2ZSAqLwotCQl7Ci0JCQlwb2xhcml0eSA9IDA7Ci0JCQlicmVhazsKLQkJfQotCQljYXNlIDI6IC8qIHJlc2VydmVkICovCi0JCXsKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcgImJyb2tlbiBCSU9TISFcbiIpOwotCQkJcG9sYXJpdHkgPSAxOwotCQkJYnJlYWs7Ci0JCX0KLQkJY2FzZSAzOiAvKiBsb3cgYWN0aXZlICovCi0JCXsKLQkJCXBvbGFyaXR5ID0gMTsKLQkJCWJyZWFrOwotCQl9Ci0JCWRlZmF1bHQ6IC8qIGludmFsaWQgKi8KLQkJewotCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiYnJva2VuIEJJT1MhIVxuIik7Ci0JCQlwb2xhcml0eSA9IDE7Ci0JCQlicmVhazsKLQkJfQotCX0KLQlyZXR1cm4gcG9sYXJpdHk7Ci19Ci0KLXN0YXRpYyBpbnQgTVBCSU9TX3RyaWdnZXIoaW50IGlkeCkKLXsKLQlpbnQgYnVzID0gbXBfaXJxc1tpZHhdLm1wX3NyY2J1czsKLQlpbnQgdHJpZ2dlcjsKLQotCS8qCi0JICogRGV0ZXJtaW5lIElSUSB0cmlnZ2VyIG1vZGUgKGVkZ2Ugb3IgbGV2ZWwgc2Vuc2l0aXZlKToKLQkgKi8KLQlzd2l0Y2ggKChtcF9pcnFzW2lkeF0ubXBfaXJxZmxhZz4+MikgJiAzKQotCXsKLQkJY2FzZSAwOiAvKiBjb25mb3JtcywgaWUuIGJ1cy10eXBlIGRlcGVuZGVudCAqLwotCQkJaWYgKHRlc3RfYml0KGJ1cywgbXBfYnVzX25vdF9wY2kpKQotCQkJCXRyaWdnZXIgPSBkZWZhdWx0X0lTQV90cmlnZ2VyKGlkeCk7Ci0JCQllbHNlCi0JCQkJdHJpZ2dlciA9IGRlZmF1bHRfUENJX3RyaWdnZXIoaWR4KTsKLQkJCWJyZWFrOwotCQljYXNlIDE6IC8qIGVkZ2UgKi8KLQkJewotCQkJdHJpZ2dlciA9IDA7Ci0JCQlicmVhazsKLQkJfQotCQljYXNlIDI6IC8qIHJlc2VydmVkICovCi0JCXsKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcgImJyb2tlbiBCSU9TISFcbiIpOwotCQkJdHJpZ2dlciA9IDE7Ci0JCQlicmVhazsKLQkJfQotCQljYXNlIDM6IC8qIGxldmVsICovCi0JCXsKLQkJCXRyaWdnZXIgPSAxOwotCQkJYnJlYWs7Ci0JCX0KLQkJZGVmYXVsdDogLyogaW52YWxpZCAqLwotCQl7Ci0JCQlwcmludGsoS0VSTl9XQVJOSU5HICJicm9rZW4gQklPUyEhXG4iKTsKLQkJCXRyaWdnZXIgPSAwOwotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0JcmV0dXJuIHRyaWdnZXI7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IGlycV9wb2xhcml0eShpbnQgaWR4KQotewotCXJldHVybiBNUEJJT1NfcG9sYXJpdHkoaWR4KTsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgaXJxX3RyaWdnZXIoaW50IGlkeCkKLXsKLQlyZXR1cm4gTVBCSU9TX3RyaWdnZXIoaWR4KTsKLX0KLQotc3RhdGljIGludCBwaW5fMl9pcnEoaW50IGlkeCwgaW50IGFwaWMsIGludCBwaW4pCi17Ci0JaW50IGlycSwgaTsKLQlpbnQgYnVzID0gbXBfaXJxc1tpZHhdLm1wX3NyY2J1czsKLQotCS8qCi0JICogRGVidWdnaW5nIGNoZWNrLCB3ZSBhcmUgaW4gYmlnIHRyb3VibGUgaWYgdGhpcyBtZXNzYWdlIHBvcHMgdXAhCi0JICovCi0JaWYgKG1wX2lycXNbaWR4XS5tcF9kc3RpcnEgIT0gcGluKQotCQlwcmludGsoS0VSTl9FUlIgImJyb2tlbiBCSU9TIG9yIE1QVEFCTEUgcGFyc2VyLCBheWllZSEhXG4iKTsKLQotCWlmICh0ZXN0X2JpdChidXMsIG1wX2J1c19ub3RfcGNpKSkgewotCQlpcnEgPSBtcF9pcnFzW2lkeF0ubXBfc3JjYnVzaXJxOwotCX0gZWxzZSB7Ci0JCS8qCi0JCSAqIFBDSSBJUlFzIGFyZSBtYXBwZWQgaW4gb3JkZXIKLQkJICovCi0JCWkgPSBpcnEgPSAwOwotCQl3aGlsZSAoaSA8IGFwaWMpCi0JCQlpcnEgKz0gbnJfaW9hcGljX3JlZ2lzdGVyc1tpKytdOwotCQlpcnEgKz0gcGluOwotCX0KLQlCVUdfT04oaXJxID49IE5SX0lSUVMpOwotCXJldHVybiBpcnE7Ci19Ci0KLXZvaWQgbG9ja192ZWN0b3JfbG9jayh2b2lkKQotewotCS8qIFVzZWQgdG8gdGhlIG9ubGluZSBzZXQgb2YgY3B1cyBkb2VzIG5vdCBjaGFuZ2UKLQkgKiBkdXJpbmcgYXNzaWduX2lycV92ZWN0b3IuCi0JICovCi0Jc3Bpbl9sb2NrKCZ2ZWN0b3JfbG9jayk7Ci19Ci0KLXZvaWQgdW5sb2NrX3ZlY3Rvcl9sb2NrKHZvaWQpCi17Ci0Jc3Bpbl91bmxvY2soJnZlY3Rvcl9sb2NrKTsKLX0KLQotc3RhdGljIGludCBfX2Fzc2lnbl9pcnFfdmVjdG9yKGludCBpcnEsIGNwdW1hc2tfdCBtYXNrKQotewotCS8qCi0JICogTk9URSEgVGhlIGxvY2FsIEFQSUMgaXNuJ3QgdmVyeSBnb29kIGF0IGhhbmRsaW5nCi0JICogbXVsdGlwbGUgaW50ZXJydXB0cyBhdCB0aGUgc2FtZSBpbnRlcnJ1cHQgbGV2ZWwuCi0JICogQXMgdGhlIGludGVycnVwdCBsZXZlbCBpcyBkZXRlcm1pbmVkIGJ5IHRha2luZyB0aGUKLQkgKiB2ZWN0b3IgbnVtYmVyIGFuZCBzaGlmdGluZyB0aGF0IHJpZ2h0IGJ5IDQsIHdlCi0JICogd2FudCB0byBzcHJlYWQgdGhlc2Ugb3V0IGEgYml0IHNvIHRoYXQgdGhleSBkb24ndAotCSAqIGFsbCBmYWxsIGluIHRoZSBzYW1lIGludGVycnVwdCBsZXZlbC4KLQkgKgotCSAqIEFsc28sIHdlJ3ZlIGdvdCB0byBiZSBjYXJlZnVsIG5vdCB0byB0cmFzaCBnYXRlCi0JICogMHg4MCwgYmVjYXVzZSBpbnQgMHg4MCBpcyBobSwga2luZCBvZiBpbXBvcnRhbnRpc2guIDspCi0JICovCi0Jc3RhdGljIGludCBjdXJyZW50X3ZlY3RvciA9IEZJUlNUX0RFVklDRV9WRUNUT1IsIGN1cnJlbnRfb2Zmc2V0ID0gMDsKLQl1bnNpZ25lZCBpbnQgb2xkX3ZlY3RvcjsKLQlpbnQgY3B1OwotCXN0cnVjdCBpcnFfY2ZnICpjZmc7Ci0KLQlCVUdfT04oKHVuc2lnbmVkKWlycSA+PSBOUl9JUlFTKTsKLQljZmcgPSAmaXJxX2NmZ1tpcnFdOwotCi0JLyogT25seSB0cnkgYW5kIGFsbG9jYXRlIGlycXMgb24gY3B1cyB0aGF0IGFyZSBwcmVzZW50ICovCi0JY3B1c19hbmQobWFzaywgbWFzaywgY3B1X29ubGluZV9tYXApOwotCi0JaWYgKChjZmctPm1vdmVfaW5fcHJvZ3Jlc3MpIHx8IGNmZy0+bW92ZV9jbGVhbnVwX2NvdW50KQotCQlyZXR1cm4gLUVCVVNZOwotCi0Jb2xkX3ZlY3RvciA9IGNmZy0+dmVjdG9yOwotCWlmIChvbGRfdmVjdG9yKSB7Ci0JCWNwdW1hc2tfdCB0bXA7Ci0JCWNwdXNfYW5kKHRtcCwgY2ZnLT5kb21haW4sIG1hc2spOwotCQlpZiAoIWNwdXNfZW1wdHkodG1wKSkKLQkJCXJldHVybiAwOwotCX0KLQotCWZvcl9lYWNoX2NwdV9tYXNrX25yKGNwdSwgbWFzaykgewotCQljcHVtYXNrX3QgZG9tYWluLCBuZXdfbWFzazsKLQkJaW50IG5ld19jcHU7Ci0JCWludCB2ZWN0b3IsIG9mZnNldDsKLQotCQlkb21haW4gPSB2ZWN0b3JfYWxsb2NhdGlvbl9kb21haW4oY3B1KTsKLQkJY3B1c19hbmQobmV3X21hc2ssIGRvbWFpbiwgY3B1X29ubGluZV9tYXApOwotCi0JCXZlY3RvciA9IGN1cnJlbnRfdmVjdG9yOwotCQlvZmZzZXQgPSBjdXJyZW50X29mZnNldDsKLW5leHQ6Ci0JCXZlY3RvciArPSA4OwotCQlpZiAodmVjdG9yID49IGZpcnN0X3N5c3RlbV92ZWN0b3IpIHsKLQkJCS8qIElmIHdlIHJ1biBvdXQgb2YgdmVjdG9ycyBvbiBsYXJnZSBib3hlbiwgbXVzdCBzaGFyZSB0aGVtLiAqLwotCQkJb2Zmc2V0ID0gKG9mZnNldCArIDEpICUgODsKLQkJCXZlY3RvciA9IEZJUlNUX0RFVklDRV9WRUNUT1IgKyBvZmZzZXQ7Ci0JCX0KLQkJaWYgKHVubGlrZWx5KGN1cnJlbnRfdmVjdG9yID09IHZlY3RvcikpCi0JCQljb250aW51ZTsKLQkJaWYgKHZlY3RvciA9PSBJQTMyX1NZU0NBTExfVkVDVE9SKQotCQkJZ290byBuZXh0OwotCQlmb3JfZWFjaF9jcHVfbWFza19ucihuZXdfY3B1LCBuZXdfbWFzaykKLQkJCWlmIChwZXJfY3B1KHZlY3Rvcl9pcnEsIG5ld19jcHUpW3ZlY3Rvcl0gIT0gLTEpCi0JCQkJZ290byBuZXh0OwotCQkvKiBGb3VuZCBvbmUhICovCi0JCWN1cnJlbnRfdmVjdG9yID0gdmVjdG9yOwotCQljdXJyZW50X29mZnNldCA9IG9mZnNldDsKLQkJaWYgKG9sZF92ZWN0b3IpIHsKLQkJCWNmZy0+bW92ZV9pbl9wcm9ncmVzcyA9IDE7Ci0JCQljZmctPm9sZF9kb21haW4gPSBjZmctPmRvbWFpbjsKLQkJfQotCQlmb3JfZWFjaF9jcHVfbWFza19ucihuZXdfY3B1LCBuZXdfbWFzaykKLQkJCXBlcl9jcHUodmVjdG9yX2lycSwgbmV3X2NwdSlbdmVjdG9yXSA9IGlycTsKLQkJY2ZnLT52ZWN0b3IgPSB2ZWN0b3I7Ci0JCWNmZy0+ZG9tYWluID0gZG9tYWluOwotCQlyZXR1cm4gMDsKLQl9Ci0JcmV0dXJuIC1FTk9TUEM7Ci19Ci0KLXN0YXRpYyBpbnQgYXNzaWduX2lycV92ZWN0b3IoaW50IGlycSwgY3B1bWFza190IG1hc2spCi17Ci0JaW50IGVycjsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnZlY3Rvcl9sb2NrLCBmbGFncyk7Ci0JZXJyID0gX19hc3NpZ25faXJxX3ZlY3RvcihpcnEsIG1hc2spOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnZlY3Rvcl9sb2NrLCBmbGFncyk7Ci0JcmV0dXJuIGVycjsKLX0KLQotc3RhdGljIHZvaWQgX19jbGVhcl9pcnFfdmVjdG9yKGludCBpcnEpCi17Ci0Jc3RydWN0IGlycV9jZmcgKmNmZzsKLQljcHVtYXNrX3QgbWFzazsKLQlpbnQgY3B1LCB2ZWN0b3I7Ci0KLQlCVUdfT04oKHVuc2lnbmVkKWlycSA+PSBOUl9JUlFTKTsKLQljZmcgPSAmaXJxX2NmZ1tpcnFdOwotCUJVR19PTighY2ZnLT52ZWN0b3IpOwotCi0JdmVjdG9yID0gY2ZnLT52ZWN0b3I7Ci0JY3B1c19hbmQobWFzaywgY2ZnLT5kb21haW4sIGNwdV9vbmxpbmVfbWFwKTsKLQlmb3JfZWFjaF9jcHVfbWFza19ucihjcHUsIG1hc2spCi0JCXBlcl9jcHUodmVjdG9yX2lycSwgY3B1KVt2ZWN0b3JdID0gLTE7Ci0KLQljZmctPnZlY3RvciA9IDA7Ci0JY3B1c19jbGVhcihjZmctPmRvbWFpbik7Ci19Ci0KLXZvaWQgX19zZXR1cF92ZWN0b3JfaXJxKGludCBjcHUpCi17Ci0JLyogSW5pdGlhbGl6ZSB2ZWN0b3JfaXJxIG9uIGEgbmV3IGNwdSAqLwotCS8qIFRoaXMgZnVuY3Rpb24gbXVzdCBiZSBjYWxsZWQgd2l0aCB2ZWN0b3JfbG9jayBoZWxkICovCi0JaW50IGlycSwgdmVjdG9yOwotCi0JLyogTWFyayB0aGUgaW51c2UgdmVjdG9ycyAqLwotCWZvciAoaXJxID0gMDsgaXJxIDwgTlJfSVJRUzsgKytpcnEpIHsKLQkJaWYgKCFjcHVfaXNzZXQoY3B1LCBpcnFfY2ZnW2lycV0uZG9tYWluKSkKLQkJCWNvbnRpbnVlOwotCQl2ZWN0b3IgPSBpcnFfY2ZnW2lycV0udmVjdG9yOwotCQlwZXJfY3B1KHZlY3Rvcl9pcnEsIGNwdSlbdmVjdG9yXSA9IGlycTsKLQl9Ci0JLyogTWFyayB0aGUgZnJlZSB2ZWN0b3JzICovCi0JZm9yICh2ZWN0b3IgPSAwOyB2ZWN0b3IgPCBOUl9WRUNUT1JTOyArK3ZlY3RvcikgewotCQlpcnEgPSBwZXJfY3B1KHZlY3Rvcl9pcnEsIGNwdSlbdmVjdG9yXTsKLQkJaWYgKGlycSA8IDApCi0JCQljb250aW51ZTsKLQkJaWYgKCFjcHVfaXNzZXQoY3B1LCBpcnFfY2ZnW2lycV0uZG9tYWluKSkKLQkJCXBlcl9jcHUodmVjdG9yX2lycSwgY3B1KVt2ZWN0b3JdID0gLTE7Ci0JfQotfQotCi1zdGF0aWMgc3RydWN0IGlycV9jaGlwIGlvYXBpY19jaGlwOwotI2lmZGVmIENPTkZJR19JTlRSX1JFTUFQCi1zdGF0aWMgc3RydWN0IGlycV9jaGlwIGlyX2lvYXBpY19jaGlwOwotI2VuZGlmCi0KLXN0YXRpYyB2b2lkIGlvYXBpY19yZWdpc3Rlcl9pbnRyKGludCBpcnEsIHVuc2lnbmVkIGxvbmcgdHJpZ2dlcikKLXsKLQlpZiAodHJpZ2dlcikKLQkJaXJxX2Rlc2NbaXJxXS5zdGF0dXMgfD0gSVJRX0xFVkVMOwotCWVsc2UKLQkJaXJxX2Rlc2NbaXJxXS5zdGF0dXMgJj0gfklSUV9MRVZFTDsKLQotI2lmZGVmIENPTkZJR19JTlRSX1JFTUFQCi0JaWYgKGlycV9yZW1hcHBlZChpcnEpKSB7Ci0JCWlycV9kZXNjW2lycV0uc3RhdHVzIHw9IElSUV9NT1ZFX1BDTlRYVDsKLQkJaWYgKHRyaWdnZXIpCi0JCQlzZXRfaXJxX2NoaXBfYW5kX2hhbmRsZXJfbmFtZShpcnEsICZpcl9pb2FwaWNfY2hpcCwKLQkJCQkJCSAgICAgIGhhbmRsZV9mYXN0ZW9pX2lycSwKLQkJCQkJCSAgICAgImZhc3Rlb2kiKTsKLQkJZWxzZQotCQkJc2V0X2lycV9jaGlwX2FuZF9oYW5kbGVyX25hbWUoaXJxLCAmaXJfaW9hcGljX2NoaXAsCi0JCQkJCQkgICAgICBoYW5kbGVfZWRnZV9pcnEsICJlZGdlIik7Ci0JCXJldHVybjsKLQl9Ci0jZW5kaWYKLQlpZiAodHJpZ2dlcikKLQkJc2V0X2lycV9jaGlwX2FuZF9oYW5kbGVyX25hbWUoaXJxLCAmaW9hcGljX2NoaXAsCi0JCQkJCSAgICAgIGhhbmRsZV9mYXN0ZW9pX2lycSwKLQkJCQkJICAgICAgImZhc3Rlb2kiKTsKLQllbHNlCi0JCXNldF9pcnFfY2hpcF9hbmRfaGFuZGxlcl9uYW1lKGlycSwgJmlvYXBpY19jaGlwLAotCQkJCQkgICAgICBoYW5kbGVfZWRnZV9pcnEsICJlZGdlIik7Ci19Ci0KLXN0YXRpYyBpbnQgc2V0dXBfaW9hcGljX2VudHJ5KGludCBhcGljLCBpbnQgaXJxLAotCQkJICAgICAgc3RydWN0IElPX0FQSUNfcm91dGVfZW50cnkgKmVudHJ5LAotCQkJICAgICAgdW5zaWduZWQgaW50IGRlc3RpbmF0aW9uLCBpbnQgdHJpZ2dlciwKLQkJCSAgICAgIGludCBwb2xhcml0eSwgaW50IHZlY3RvcikKLXsKLQkvKgotCSAqIGFkZCBpdCB0byB0aGUgSU8tQVBJQyBpcnEtcm91dGluZyB0YWJsZToKLQkgKi8KLQltZW1zZXQoZW50cnksMCxzaXplb2YoKmVudHJ5KSk7Ci0KLSNpZmRlZiBDT05GSUdfSU5UUl9SRU1BUAotCWlmIChpbnRyX3JlbWFwcGluZ19lbmFibGVkKSB7Ci0JCXN0cnVjdCBpbnRlbF9pb21tdSAqaW9tbXUgPSBtYXBfaW9hcGljX3RvX2lyKGFwaWMpOwotCQlzdHJ1Y3QgaXJ0ZSBpcnRlOwotCQlzdHJ1Y3QgSVJfSU9fQVBJQ19yb3V0ZV9lbnRyeSAqaXJfZW50cnkgPQotCQkJKHN0cnVjdCBJUl9JT19BUElDX3JvdXRlX2VudHJ5ICopIGVudHJ5OwotCQlpbnQgaW5kZXg7Ci0KLQkJaWYgKCFpb21tdSkKLQkJCXBhbmljKCJObyBtYXBwaW5nIGlvbW11IGZvciBpb2FwaWMgJWRcbiIsIGFwaWMpOwotCi0JCWluZGV4ID0gYWxsb2NfaXJ0ZShpb21tdSwgaXJxLCAxKTsKLQkJaWYgKGluZGV4IDwgMCkKLQkJCXBhbmljKCJGYWlsZWQgdG8gYWxsb2NhdGUgSVJURSBmb3IgaW9hcGljICVkXG4iLCBhcGljKTsKLQotCQltZW1zZXQoJmlydGUsIDAsIHNpemVvZihpcnRlKSk7Ci0KLQkJaXJ0ZS5wcmVzZW50ID0gMTsKLQkJaXJ0ZS5kc3RfbW9kZSA9IElOVF9ERVNUX01PREU7Ci0JCWlydGUudHJpZ2dlcl9tb2RlID0gdHJpZ2dlcjsKLQkJaXJ0ZS5kbHZyeV9tb2RlID0gSU5UX0RFTElWRVJZX01PREU7Ci0JCWlydGUudmVjdG9yID0gdmVjdG9yOwotCQlpcnRlLmRlc3RfaWQgPSBJUlRFX0RFU1QoZGVzdGluYXRpb24pOwotCi0JCW1vZGlmeV9pcnRlKGlycSwgJmlydGUpOwotCi0JCWlyX2VudHJ5LT5pbmRleDIgPSAoaW5kZXggPj4gMTUpICYgMHgxOwotCQlpcl9lbnRyeS0+emVybyA9IDA7Ci0JCWlyX2VudHJ5LT5mb3JtYXQgPSAxOwotCQlpcl9lbnRyeS0+aW5kZXggPSAoaW5kZXggJiAweDdmZmYpOwotCX0gZWxzZQotI2VuZGlmCi0JewotCQllbnRyeS0+ZGVsaXZlcnlfbW9kZSA9IElOVF9ERUxJVkVSWV9NT0RFOwotCQllbnRyeS0+ZGVzdF9tb2RlID0gSU5UX0RFU1RfTU9ERTsKLQkJZW50cnktPmRlc3QgPSBkZXN0aW5hdGlvbjsKLQl9Ci0KLQllbnRyeS0+bWFzayA9IDA7CQkJCS8qIGVuYWJsZSBJUlEgKi8KLQllbnRyeS0+dHJpZ2dlciA9IHRyaWdnZXI7Ci0JZW50cnktPnBvbGFyaXR5ID0gcG9sYXJpdHk7Ci0JZW50cnktPnZlY3RvciA9IHZlY3RvcjsKLQotCS8qIE1hc2sgbGV2ZWwgdHJpZ2dlcmVkIGlycXMuCi0JICogVXNlIElSUV9ERUxBWUVEX0RJU0FCTEUgZm9yIGVkZ2UgdHJpZ2dlcmVkIGlycXMuCi0JICovCi0JaWYgKHRyaWdnZXIpCi0JCWVudHJ5LT5tYXNrID0gMTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgc2V0dXBfSU9fQVBJQ19pcnEoaW50IGFwaWMsIGludCBwaW4sIHVuc2lnbmVkIGludCBpcnEsCi0JCQkgICAgICBpbnQgdHJpZ2dlciwgaW50IHBvbGFyaXR5KQotewotCXN0cnVjdCBpcnFfY2ZnICpjZmcgPSBpcnFfY2ZnICsgaXJxOwotCXN0cnVjdCBJT19BUElDX3JvdXRlX2VudHJ5IGVudHJ5OwotCWNwdW1hc2tfdCBtYXNrOwotCi0JaWYgKCFJT19BUElDX0lSUShpcnEpKQotCQlyZXR1cm47Ci0KLQltYXNrID0gVEFSR0VUX0NQVVM7Ci0JaWYgKGFzc2lnbl9pcnFfdmVjdG9yKGlycSwgbWFzaykpCi0JCXJldHVybjsKLQotCWNwdXNfYW5kKG1hc2ssIGNmZy0+ZG9tYWluLCBtYXNrKTsKLQotCWFwaWNfcHJpbnRrKEFQSUNfVkVSQk9TRSxLRVJOX0RFQlVHCi0JCSAgICAiSU9BUElDWyVkXTogU2V0IHJvdXRpbmcgZW50cnkgKCVkLSVkIC0+IDB4JXggLT4gIgotCQkgICAgIklSUSAlZCBNb2RlOiVpIEFjdGl2ZTolaSlcbiIsCi0JCSAgICBhcGljLCBtcF9pb2FwaWNzW2FwaWNdLm1wX2FwaWNpZCwgcGluLCBjZmctPnZlY3RvciwKLQkJICAgIGlycSwgdHJpZ2dlciwgcG9sYXJpdHkpOwotCi0KLQlpZiAoc2V0dXBfaW9hcGljX2VudHJ5KG1wX2lvYXBpY3NbYXBpY10ubXBfYXBpY2lkLCBpcnEsICZlbnRyeSwKLQkJCSAgICAgICBjcHVfbWFza190b19hcGljaWQobWFzayksIHRyaWdnZXIsIHBvbGFyaXR5LAotCQkJICAgICAgIGNmZy0+dmVjdG9yKSkgewotCQlwcmludGsoIkZhaWxlZCB0byBzZXR1cCBpb2FwaWMgZW50cnkgZm9yIGlvYXBpYyAgJWQsIHBpbiAlZFxuIiwKLQkJICAgICAgIG1wX2lvYXBpY3NbYXBpY10ubXBfYXBpY2lkLCBwaW4pOwotCQlfX2NsZWFyX2lycV92ZWN0b3IoaXJxKTsKLQkJcmV0dXJuOwotCX0KLQotCWlvYXBpY19yZWdpc3Rlcl9pbnRyKGlycSwgdHJpZ2dlcik7Ci0JaWYgKGlycSA8IDE2KQotCQlkaXNhYmxlXzgyNTlBX2lycShpcnEpOwotCi0JaW9hcGljX3dyaXRlX2VudHJ5KGFwaWMsIHBpbiwgZW50cnkpOwotfQotCi1zdGF0aWMgdm9pZCBfX2luaXQgc2V0dXBfSU9fQVBJQ19pcnFzKHZvaWQpCi17Ci0JaW50IGFwaWMsIHBpbiwgaWR4LCBpcnEsIGZpcnN0X25vdGNvbiA9IDE7Ci0KLQlhcGljX3ByaW50ayhBUElDX1ZFUkJPU0UsIEtFUk5fREVCVUcgImluaXQgSU9fQVBJQyBJUlFzXG4iKTsKLQotCWZvciAoYXBpYyA9IDA7IGFwaWMgPCBucl9pb2FwaWNzOyBhcGljKyspIHsKLQlmb3IgKHBpbiA9IDA7IHBpbiA8IG5yX2lvYXBpY19yZWdpc3RlcnNbYXBpY107IHBpbisrKSB7Ci0KLQkJaWR4ID0gZmluZF9pcnFfZW50cnkoYXBpYyxwaW4sbXBfSU5UKTsKLQkJaWYgKGlkeCA9PSAtMSkgewotCQkJaWYgKGZpcnN0X25vdGNvbikgewotCQkJCWFwaWNfcHJpbnRrKEFQSUNfVkVSQk9TRSwgS0VSTl9ERUJVRyAiIElPLUFQSUMgKGFwaWNpZC1waW4pICVkLSVkIiwgbXBfaW9hcGljc1thcGljXS5tcF9hcGljaWQsIHBpbik7Ci0JCQkJZmlyc3Rfbm90Y29uID0gMDsKLQkJCX0gZWxzZQotCQkJCWFwaWNfcHJpbnRrKEFQSUNfVkVSQk9TRSwgIiwgJWQtJWQiLCBtcF9pb2FwaWNzW2FwaWNdLm1wX2FwaWNpZCwgcGluKTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0JCWlmICghZmlyc3Rfbm90Y29uKSB7Ci0JCQlhcGljX3ByaW50ayhBUElDX1ZFUkJPU0UsICIgbm90IGNvbm5lY3RlZC5cbiIpOwotCQkJZmlyc3Rfbm90Y29uID0gMTsKLQkJfQotCi0JCWlycSA9IHBpbl8yX2lycShpZHgsIGFwaWMsIHBpbik7Ci0JCWFkZF9waW5fdG9faXJxKGlycSwgYXBpYywgcGluKTsKLQotCQlzZXR1cF9JT19BUElDX2lycShhcGljLCBwaW4sIGlycSwKLQkJCQkgIGlycV90cmlnZ2VyKGlkeCksIGlycV9wb2xhcml0eShpZHgpKTsKLQl9Ci0JfQotCi0JaWYgKCFmaXJzdF9ub3Rjb24pCi0JCWFwaWNfcHJpbnRrKEFQSUNfVkVSQk9TRSwgIiBub3QgY29ubmVjdGVkLlxuIik7Ci19Ci0KLS8qCi0gKiBTZXQgdXAgdGhlIHRpbWVyIHBpbiwgcG9zc2libHkgd2l0aCB0aGUgODI1OUEtbWFzdGVyIGJlaGluZC4KLSAqLwotc3RhdGljIHZvaWQgX19pbml0IHNldHVwX3RpbWVyX0lSUTBfcGluKHVuc2lnbmVkIGludCBhcGljLCB1bnNpZ25lZCBpbnQgcGluLAotCQkJCQlpbnQgdmVjdG9yKQotewotCXN0cnVjdCBJT19BUElDX3JvdXRlX2VudHJ5IGVudHJ5OwotCi0JaWYgKGludHJfcmVtYXBwaW5nX2VuYWJsZWQpCi0JCXJldHVybjsKLQotCW1lbXNldCgmZW50cnksIDAsIHNpemVvZihlbnRyeSkpOwotCi0JLyoKLQkgKiBXZSB1c2UgbG9naWNhbCBkZWxpdmVyeSB0byBnZXQgdGhlIHRpbWVyIElSUQotCSAqIHRvIHRoZSBmaXJzdCBDUFUuCi0JICovCi0JZW50cnkuZGVzdF9tb2RlID0gSU5UX0RFU1RfTU9ERTsKLQllbnRyeS5tYXNrID0gMTsJCQkJCS8qIG1hc2sgSVJRIG5vdyAqLwotCWVudHJ5LmRlc3QgPSBjcHVfbWFza190b19hcGljaWQoVEFSR0VUX0NQVVMpOwotCWVudHJ5LmRlbGl2ZXJ5X21vZGUgPSBJTlRfREVMSVZFUllfTU9ERTsKLQllbnRyeS5wb2xhcml0eSA9IDA7Ci0JZW50cnkudHJpZ2dlciA9IDA7Ci0JZW50cnkudmVjdG9yID0gdmVjdG9yOwotCi0JLyoKLQkgKiBUaGUgdGltZXIgSVJRIGRvZXNuJ3QgaGF2ZSB0byBrbm93IHRoYXQgYmVoaW5kIHRoZQotCSAqIHNjZW5lIHdlIG1heSBoYXZlIGEgODI1OUEtbWFzdGVyIGluIEFFT0kgbW9kZSAuLi4KLQkgKi8KLQlzZXRfaXJxX2NoaXBfYW5kX2hhbmRsZXJfbmFtZSgwLCAmaW9hcGljX2NoaXAsIGhhbmRsZV9lZGdlX2lycSwgImVkZ2UiKTsKLQotCS8qCi0JICogQWRkIGl0IHRvIHRoZSBJTy1BUElDIGlycS1yb3V0aW5nIHRhYmxlOgotCSAqLwotCWlvYXBpY193cml0ZV9lbnRyeShhcGljLCBwaW4sIGVudHJ5KTsKLX0KLQotCi1fX2FwaWNkZWJ1Z2luaXQodm9pZCkgcHJpbnRfSU9fQVBJQyh2b2lkKQotewotCWludCBhcGljLCBpOwotCXVuaW9uIElPX0FQSUNfcmVnXzAwIHJlZ18wMDsKLQl1bmlvbiBJT19BUElDX3JlZ18wMSByZWdfMDE7Ci0JdW5pb24gSU9fQVBJQ19yZWdfMDIgcmVnXzAyOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlpZiAoYXBpY192ZXJib3NpdHkgPT0gQVBJQ19RVUlFVCkKLQkJcmV0dXJuOwotCi0JcHJpbnRrKEtFUk5fREVCVUcgIm51bWJlciBvZiBNUCBJUlEgc291cmNlczogJWQuXG4iLCBtcF9pcnFfZW50cmllcyk7Ci0JZm9yIChpID0gMDsgaSA8IG5yX2lvYXBpY3M7IGkrKykKLQkJcHJpbnRrKEtFUk5fREVCVUcgIm51bWJlciBvZiBJTy1BUElDICMlZCByZWdpc3RlcnM6ICVkLlxuIiwKLQkJICAgICAgIG1wX2lvYXBpY3NbaV0ubXBfYXBpY2lkLCBucl9pb2FwaWNfcmVnaXN0ZXJzW2ldKTsKLQotCS8qCi0JICogV2UgYXJlIGEgYml0IGNvbnNlcnZhdGl2ZSBhYm91dCB3aGF0IHdlIGV4cGVjdC4gIFdlIGhhdmUgdG8KLQkgKiBrbm93IGFib3V0IGV2ZXJ5IGhhcmR3YXJlIGNoYW5nZSBBU0FQLgotCSAqLwotCXByaW50ayhLRVJOX0lORk8gInRlc3RpbmcgdGhlIElPIEFQSUMuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLlxuIik7Ci0KLQlmb3IgKGFwaWMgPSAwOyBhcGljIDwgbnJfaW9hcGljczsgYXBpYysrKSB7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmaW9hcGljX2xvY2ssIGZsYWdzKTsKLQlyZWdfMDAucmF3ID0gaW9fYXBpY19yZWFkKGFwaWMsIDApOwotCXJlZ18wMS5yYXcgPSBpb19hcGljX3JlYWQoYXBpYywgMSk7Ci0JaWYgKHJlZ18wMS5iaXRzLnZlcnNpb24gPj0gMHgxMCkKLQkJcmVnXzAyLnJhdyA9IGlvX2FwaWNfcmVhZChhcGljLCAyKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2FwaWNfbG9jaywgZmxhZ3MpOwotCi0JcHJpbnRrKCJcbiIpOwotCXByaW50ayhLRVJOX0RFQlVHICJJTyBBUElDICMlZC4uLi4uLlxuIiwgbXBfaW9hcGljc1thcGljXS5tcF9hcGljaWQpOwotCXByaW50ayhLRVJOX0RFQlVHICIuLi4uIHJlZ2lzdGVyICMwMDogJTA4WFxuIiwgcmVnXzAwLnJhdyk7Ci0JcHJpbnRrKEtFUk5fREVCVUcgIi4uLi4uLi4gICAgOiBwaHlzaWNhbCBBUElDIGlkOiAlMDJYXG4iLCByZWdfMDAuYml0cy5JRCk7Ci0KLQlwcmludGsoS0VSTl9ERUJVRyAiLi4uLiByZWdpc3RlciAjMDE6ICUwOFhcbiIsICooaW50ICopJnJlZ18wMSk7Ci0JcHJpbnRrKEtFUk5fREVCVUcgIi4uLi4uLi4gICAgIDogbWF4IHJlZGlyZWN0aW9uIGVudHJpZXM6ICUwNFhcbiIsIHJlZ18wMS5iaXRzLmVudHJpZXMpOwotCi0JcHJpbnRrKEtFUk5fREVCVUcgIi4uLi4uLi4gICAgIDogUFJRIGltcGxlbWVudGVkOiAlWFxuIiwgcmVnXzAxLmJpdHMuUFJRKTsKLQlwcmludGsoS0VSTl9ERUJVRyAiLi4uLi4uLiAgICAgOiBJTyBBUElDIHZlcnNpb246ICUwNFhcbiIsIHJlZ18wMS5iaXRzLnZlcnNpb24pOwotCi0JaWYgKHJlZ18wMS5iaXRzLnZlcnNpb24gPj0gMHgxMCkgewotCQlwcmludGsoS0VSTl9ERUJVRyAiLi4uLiByZWdpc3RlciAjMDI6ICUwOFhcbiIsIHJlZ18wMi5yYXcpOwotCQlwcmludGsoS0VSTl9ERUJVRyAiLi4uLi4uLiAgICAgOiBhcmJpdHJhdGlvbjogJTAyWFxuIiwgcmVnXzAyLmJpdHMuYXJiaXRyYXRpb24pOwotCX0KLQotCXByaW50ayhLRVJOX0RFQlVHICIuLi4uIElSUSByZWRpcmVjdGlvbiB0YWJsZTpcbiIpOwotCi0JcHJpbnRrKEtFUk5fREVCVUcgIiBOUiBEc3QgTWFzayBUcmlnIElSUiBQb2wiCi0JCQkgICIgU3RhdCBEbW9kIERlbGkgVmVjdDogICBcbiIpOwotCi0JZm9yIChpID0gMDsgaSA8PSByZWdfMDEuYml0cy5lbnRyaWVzOyBpKyspIHsKLQkJc3RydWN0IElPX0FQSUNfcm91dGVfZW50cnkgZW50cnk7Ci0KLQkJZW50cnkgPSBpb2FwaWNfcmVhZF9lbnRyeShhcGljLCBpKTsKLQotCQlwcmludGsoS0VSTl9ERUJVRyAiICUwMnggJTAzWCAiLAotCQkJaSwKLQkJCWVudHJ5LmRlc3QKLQkJKTsKLQotCQlwcmludGsoIiUxZCAgICAlMWQgICAgJTFkICAgJTFkICAgJTFkICAgICUxZCAgICAlMWQgICAgJTAyWFxuIiwKLQkJCWVudHJ5Lm1hc2ssCi0JCQllbnRyeS50cmlnZ2VyLAotCQkJZW50cnkuaXJyLAotCQkJZW50cnkucG9sYXJpdHksCi0JCQllbnRyeS5kZWxpdmVyeV9zdGF0dXMsCi0JCQllbnRyeS5kZXN0X21vZGUsCi0JCQllbnRyeS5kZWxpdmVyeV9tb2RlLAotCQkJZW50cnkudmVjdG9yCi0JCSk7Ci0JfQotCX0KLQlwcmludGsoS0VSTl9ERUJVRyAiSVJRIHRvIHBpbiBtYXBwaW5nczpcbiIpOwotCWZvciAoaSA9IDA7IGkgPCBOUl9JUlFTOyBpKyspIHsKLQkJc3RydWN0IGlycV9waW5fbGlzdCAqZW50cnkgPSBpcnFfMl9waW4gKyBpOwotCQlpZiAoZW50cnktPnBpbiA8IDApCi0JCQljb250aW51ZTsKLQkJcHJpbnRrKEtFUk5fREVCVUcgIklSUSVkICIsIGkpOwotCQlmb3IgKDs7KSB7Ci0JCQlwcmludGsoIi0+ICVkOiVkIiwgZW50cnktPmFwaWMsIGVudHJ5LT5waW4pOwotCQkJaWYgKCFlbnRyeS0+bmV4dCkKLQkJCQlicmVhazsKLQkJCWVudHJ5ID0gaXJxXzJfcGluICsgZW50cnktPm5leHQ7Ci0JCX0KLQkJcHJpbnRrKCJcbiIpOwotCX0KLQotCXByaW50ayhLRVJOX0lORk8gIi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiBkb25lLlxuIik7Ci0KLQlyZXR1cm47Ci19Ci0KLV9fYXBpY2RlYnVnaW5pdCh2b2lkKSBwcmludF9BUElDX2JpdGZpZWxkKGludCBiYXNlKQotewotCXVuc2lnbmVkIGludCB2OwotCWludCBpLCBqOwotCi0JaWYgKGFwaWNfdmVyYm9zaXR5ID09IEFQSUNfUVVJRVQpCi0JCXJldHVybjsKLQotCXByaW50ayhLRVJOX0RFQlVHICIwMTIzNDU2Nzg5YWJjZGVmMDEyMzQ1Njc4OWFiY2RlZlxuIiBLRVJOX0RFQlVHKTsKLQlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKSB7Ci0JCXYgPSBhcGljX3JlYWQoYmFzZSArIGkqMHgxMCk7Ci0JCWZvciAoaiA9IDA7IGogPCAzMjsgaisrKSB7Ci0JCQlpZiAodiAmICgxPDxqKSkKLQkJCQlwcmludGsoIjEiKTsKLQkJCWVsc2UKLQkJCQlwcmludGsoIjAiKTsKLQkJfQotCQlwcmludGsoIlxuIik7Ci0JfQotfQotCi1fX2FwaWNkZWJ1Z2luaXQodm9pZCkgcHJpbnRfbG9jYWxfQVBJQyh2b2lkICpkdW1teSkKLXsKLQl1bnNpZ25lZCBpbnQgdiwgdmVyLCBtYXhsdnQ7Ci0JdW5zaWduZWQgbG9uZyBpY3I7Ci0KLQlpZiAoYXBpY192ZXJib3NpdHkgPT0gQVBJQ19RVUlFVCkKLQkJcmV0dXJuOwotCi0JcHJpbnRrKCJcbiIgS0VSTl9ERUJVRyAicHJpbnRpbmcgbG9jYWwgQVBJQyBjb250ZW50cyBvbiBDUFUjJWQvJWQ6XG4iLAotCQlzbXBfcHJvY2Vzc29yX2lkKCksIGhhcmRfc21wX3Byb2Nlc3Nvcl9pZCgpKTsKLQl2ID0gYXBpY19yZWFkKEFQSUNfSUQpOwotCXByaW50ayhLRVJOX0lORk8gIi4uLiBBUElDIElEOiAgICAgICUwOHggKCUwMXgpXG4iLCB2LCByZWFkX2FwaWNfaWQoKSk7Ci0JdiA9IGFwaWNfcmVhZChBUElDX0xWUik7Ci0JcHJpbnRrKEtFUk5fSU5GTyAiLi4uIEFQSUMgVkVSU0lPTjogJTA4eFxuIiwgdik7Ci0JdmVyID0gR0VUX0FQSUNfVkVSU0lPTih2KTsKLQltYXhsdnQgPSBsYXBpY19nZXRfbWF4bHZ0KCk7Ci0KLQl2ID0gYXBpY19yZWFkKEFQSUNfVEFTS1BSSSk7Ci0JcHJpbnRrKEtFUk5fREVCVUcgIi4uLiBBUElDIFRBU0tQUkk6ICUwOHggKCUwMngpXG4iLCB2LCB2ICYgQVBJQ19UUFJJX01BU0spOwotCi0JdiA9IGFwaWNfcmVhZChBUElDX0FSQlBSSSk7Ci0JcHJpbnRrKEtFUk5fREVCVUcgIi4uLiBBUElDIEFSQlBSSTogJTA4eCAoJTAyeClcbiIsIHYsCi0JCXYgJiBBUElDX0FSQlBSSV9NQVNLKTsKLQl2ID0gYXBpY19yZWFkKEFQSUNfUFJPQ1BSSSk7Ci0JcHJpbnRrKEtFUk5fREVCVUcgIi4uLiBBUElDIFBST0NQUkk6ICUwOHhcbiIsIHYpOwotCi0JdiA9IGFwaWNfcmVhZChBUElDX0VPSSk7Ci0JcHJpbnRrKEtFUk5fREVCVUcgIi4uLiBBUElDIEVPSTogJTA4eFxuIiwgdik7Ci0JdiA9IGFwaWNfcmVhZChBUElDX1JSUik7Ci0JcHJpbnRrKEtFUk5fREVCVUcgIi4uLiBBUElDIFJSUjogJTA4eFxuIiwgdik7Ci0JdiA9IGFwaWNfcmVhZChBUElDX0xEUik7Ci0JcHJpbnRrKEtFUk5fREVCVUcgIi4uLiBBUElDIExEUjogJTA4eFxuIiwgdik7Ci0JdiA9IGFwaWNfcmVhZChBUElDX0RGUik7Ci0JcHJpbnRrKEtFUk5fREVCVUcgIi4uLiBBUElDIERGUjogJTA4eFxuIiwgdik7Ci0JdiA9IGFwaWNfcmVhZChBUElDX1NQSVYpOwotCXByaW50ayhLRVJOX0RFQlVHICIuLi4gQVBJQyBTUElWOiAlMDh4XG4iLCB2KTsKLQotCXByaW50ayhLRVJOX0RFQlVHICIuLi4gQVBJQyBJU1IgZmllbGQ6XG4iKTsKLQlwcmludF9BUElDX2JpdGZpZWxkKEFQSUNfSVNSKTsKLQlwcmludGsoS0VSTl9ERUJVRyAiLi4uIEFQSUMgVE1SIGZpZWxkOlxuIik7Ci0JcHJpbnRfQVBJQ19iaXRmaWVsZChBUElDX1RNUik7Ci0JcHJpbnRrKEtFUk5fREVCVUcgIi4uLiBBUElDIElSUiBmaWVsZDpcbiIpOwotCXByaW50X0FQSUNfYml0ZmllbGQoQVBJQ19JUlIpOwotCi0JdiA9IGFwaWNfcmVhZChBUElDX0VTUik7Ci0JcHJpbnRrKEtFUk5fREVCVUcgIi4uLiBBUElDIEVTUjogJTA4eFxuIiwgdik7Ci0KLQlpY3IgPSBhcGljX2ljcl9yZWFkKCk7Ci0JcHJpbnRrKEtFUk5fREVCVUcgIi4uLiBBUElDIElDUjogJTA4eFxuIiwgKHUzMilpY3IpOwotCXByaW50ayhLRVJOX0RFQlVHICIuLi4gQVBJQyBJQ1IyOiAlMDh4XG4iLCAodTMyKShpY3IgPj4gMzIpKTsKLQotCXYgPSBhcGljX3JlYWQoQVBJQ19MVlRUKTsKLQlwcmludGsoS0VSTl9ERUJVRyAiLi4uIEFQSUMgTFZUVDogJTA4eFxuIiwgdik7Ci0KLQlpZiAobWF4bHZ0ID4gMykgeyAgICAgICAgICAgICAgICAgICAgICAgLyogUEMgaXMgTFZUIzQuICovCi0JCXYgPSBhcGljX3JlYWQoQVBJQ19MVlRQQyk7Ci0JCXByaW50ayhLRVJOX0RFQlVHICIuLi4gQVBJQyBMVlRQQzogJTA4eFxuIiwgdik7Ci0JfQotCXYgPSBhcGljX3JlYWQoQVBJQ19MVlQwKTsKLQlwcmludGsoS0VSTl9ERUJVRyAiLi4uIEFQSUMgTFZUMDogJTA4eFxuIiwgdik7Ci0JdiA9IGFwaWNfcmVhZChBUElDX0xWVDEpOwotCXByaW50ayhLRVJOX0RFQlVHICIuLi4gQVBJQyBMVlQxOiAlMDh4XG4iLCB2KTsKLQotCWlmIChtYXhsdnQgPiAyKSB7CQkJLyogRVJSIGlzIExWVCMzLiAqLwotCQl2ID0gYXBpY19yZWFkKEFQSUNfTFZURVJSKTsKLQkJcHJpbnRrKEtFUk5fREVCVUcgIi4uLiBBUElDIExWVEVSUjogJTA4eFxuIiwgdik7Ci0JfQotCi0JdiA9IGFwaWNfcmVhZChBUElDX1RNSUNUKTsKLQlwcmludGsoS0VSTl9ERUJVRyAiLi4uIEFQSUMgVE1JQ1Q6ICUwOHhcbiIsIHYpOwotCXYgPSBhcGljX3JlYWQoQVBJQ19UTUNDVCk7Ci0JcHJpbnRrKEtFUk5fREVCVUcgIi4uLiBBUElDIFRNQ0NUOiAlMDh4XG4iLCB2KTsKLQl2ID0gYXBpY19yZWFkKEFQSUNfVERDUik7Ci0JcHJpbnRrKEtFUk5fREVCVUcgIi4uLiBBUElDIFREQ1I6ICUwOHhcbiIsIHYpOwotCXByaW50aygiXG4iKTsKLX0KLQotX19hcGljZGVidWdpbml0KHZvaWQpIHByaW50X2FsbF9sb2NhbF9BUElDcyh2b2lkKQotewotCW9uX2VhY2hfY3B1KHByaW50X2xvY2FsX0FQSUMsIE5VTEwsIDEpOwotfQotCi1fX2FwaWNkZWJ1Z2luaXQodm9pZCkgcHJpbnRfUElDKHZvaWQpCi17Ci0JdW5zaWduZWQgaW50IHY7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCWlmIChhcGljX3ZlcmJvc2l0eSA9PSBBUElDX1FVSUVUKQotCQlyZXR1cm47Ci0KLQlwcmludGsoS0VSTl9ERUJVRyAiXG5wcmludGluZyBQSUMgY29udGVudHNcbiIpOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmk4MjU5QV9sb2NrLCBmbGFncyk7Ci0KLQl2ID0gaW5iKDB4YTEpIDw8IDggfCBpbmIoMHgyMSk7Ci0JcHJpbnRrKEtFUk5fREVCVUcgIi4uLiBQSUMgIElNUjogJTA0eFxuIiwgdik7Ci0KLQl2ID0gaW5iKDB4YTApIDw8IDggfCBpbmIoMHgyMCk7Ci0JcHJpbnRrKEtFUk5fREVCVUcgIi4uLiBQSUMgIElSUjogJTA0eFxuIiwgdik7Ci0KLQlvdXRiKDB4MGIsMHhhMCk7Ci0Jb3V0YigweDBiLDB4MjApOwotCXYgPSBpbmIoMHhhMCkgPDwgOCB8IGluYigweDIwKTsKLQlvdXRiKDB4MGEsMHhhMCk7Ci0Jb3V0YigweDBhLDB4MjApOwotCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaTgyNTlBX2xvY2ssIGZsYWdzKTsKLQotCXByaW50ayhLRVJOX0RFQlVHICIuLi4gUElDICBJU1I6ICUwNHhcbiIsIHYpOwotCi0JdiA9IGluYigweDRkMSkgPDwgOCB8IGluYigweDRkMCk7Ci0JcHJpbnRrKEtFUk5fREVCVUcgIi4uLiBQSUMgRUxDUjogJTA0eFxuIiwgdik7Ci19Ci0KLV9fYXBpY2RlYnVnaW5pdChpbnQpIHByaW50X2FsbF9JQ3Modm9pZCkKLXsKLQlwcmludF9QSUMoKTsKLQlwcmludF9hbGxfbG9jYWxfQVBJQ3MoKTsKLQlwcmludF9JT19BUElDKCk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotZnNfaW5pdGNhbGwocHJpbnRfYWxsX0lDcyk7Ci0KLQotdm9pZCBfX2luaXQgZW5hYmxlX0lPX0FQSUModm9pZCkKLXsKLQl1bmlvbiBJT19BUElDX3JlZ18wMSByZWdfMDE7Ci0JaW50IGk4MjU5X2FwaWMsIGk4MjU5X3BpbjsKLQlpbnQgaSwgYXBpYzsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JZm9yIChpID0gMDsgaSA8IFBJTl9NQVBfU0laRTsgaSsrKSB7Ci0JCWlycV8yX3BpbltpXS5waW4gPSAtMTsKLQkJaXJxXzJfcGluW2ldLm5leHQgPSAwOwotCX0KLQotCS8qCi0JICogVGhlIG51bWJlciBvZiBJTy1BUElDIElSUSByZWdpc3RlcnMgKD09ICNwaW5zKToKLQkgKi8KLQlmb3IgKGFwaWMgPSAwOyBhcGljIDwgbnJfaW9hcGljczsgYXBpYysrKSB7Ci0JCXNwaW5fbG9ja19pcnFzYXZlKCZpb2FwaWNfbG9jaywgZmxhZ3MpOwotCQlyZWdfMDEucmF3ID0gaW9fYXBpY19yZWFkKGFwaWMsIDEpOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2FwaWNfbG9jaywgZmxhZ3MpOwotCQlucl9pb2FwaWNfcmVnaXN0ZXJzW2FwaWNdID0gcmVnXzAxLmJpdHMuZW50cmllcysxOwotCX0KLQlmb3IoYXBpYyA9IDA7IGFwaWMgPCBucl9pb2FwaWNzOyBhcGljKyspIHsKLQkJaW50IHBpbjsKLQkJLyogU2VlIGlmIGFueSBvZiB0aGUgcGlucyBpcyBpbiBFeHRJTlQgbW9kZSAqLwotCQlmb3IgKHBpbiA9IDA7IHBpbiA8IG5yX2lvYXBpY19yZWdpc3RlcnNbYXBpY107IHBpbisrKSB7Ci0JCQlzdHJ1Y3QgSU9fQVBJQ19yb3V0ZV9lbnRyeSBlbnRyeTsKLQkJCWVudHJ5ID0gaW9hcGljX3JlYWRfZW50cnkoYXBpYywgcGluKTsKLQotCQkJLyogSWYgdGhlIGludGVycnVwdCBsaW5lIGlzIGVuYWJsZWQgYW5kIGluIEV4dEludCBtb2RlCi0JCQkgKiBJIGhhdmUgZm91bmQgdGhlIHBpbiB3aGVyZSB0aGUgaTgyNTkgaXMgY29ubmVjdGVkLgotCQkJICovCi0JCQlpZiAoKGVudHJ5Lm1hc2sgPT0gMCkgJiYgKGVudHJ5LmRlbGl2ZXJ5X21vZGUgPT0gZGVzdF9FeHRJTlQpKSB7Ci0JCQkJaW9hcGljX2k4MjU5LmFwaWMgPSBhcGljOwotCQkJCWlvYXBpY19pODI1OS5waW4gID0gcGluOwotCQkJCWdvdG8gZm91bmRfaTgyNTk7Ci0JCQl9Ci0JCX0KLQl9Ci0gZm91bmRfaTgyNTk6Ci0JLyogTG9vayB0byBzZWUgd2hhdCBpZiB0aGUgTVAgdGFibGUgaGFzIHJlcG9ydGVkIHRoZSBFeHRJTlQgKi8KLQlpODI1OV9waW4gID0gZmluZF9pc2FfaXJxX3BpbigwLCBtcF9FeHRJTlQpOwotCWk4MjU5X2FwaWMgPSBmaW5kX2lzYV9pcnFfYXBpYygwLCBtcF9FeHRJTlQpOwotCS8qIFRydXN0IHRoZSBNUCB0YWJsZSBpZiBub3RoaW5nIGlzIHNldHVwIGluIHRoZSBoYXJkd2FyZSAqLwotCWlmICgoaW9hcGljX2k4MjU5LnBpbiA9PSAtMSkgJiYgKGk4MjU5X3BpbiA+PSAwKSkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJFeHRJTlQgbm90IHNldHVwIGluIGhhcmR3YXJlIGJ1dCByZXBvcnRlZCBieSBNUCB0YWJsZVxuIik7Ci0JCWlvYXBpY19pODI1OS5waW4gID0gaTgyNTlfcGluOwotCQlpb2FwaWNfaTgyNTkuYXBpYyA9IGk4MjU5X2FwaWM7Ci0JfQotCS8qIENvbXBsYWluIGlmIHRoZSBNUCB0YWJsZSBhbmQgdGhlIGhhcmR3YXJlIGRpc2FncmVlICovCi0JaWYgKCgoaW9hcGljX2k4MjU5LmFwaWMgIT0gaTgyNTlfYXBpYykgfHwgKGlvYXBpY19pODI1OS5waW4gIT0gaTgyNTlfcGluKSkgJiYKLQkJKGk4MjU5X3BpbiA+PSAwKSAmJiAoaW9hcGljX2k4MjU5LnBpbiA+PSAwKSkKLQl7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIkV4dElOVCBpbiBoYXJkd2FyZSBhbmQgTVAgdGFibGUgZGlmZmVyXG4iKTsKLQl9Ci0KLQkvKgotCSAqIERvIG5vdCB0cnVzdCB0aGUgSU8tQVBJQyBiZWluZyBlbXB0eSBhdCBib290dXAKLQkgKi8KLQljbGVhcl9JT19BUElDKCk7Ci19Ci0KLS8qCi0gKiBOb3QgYW4gX19pbml0LCBuZWVkZWQgYnkgdGhlIHJlYm9vdCBjb2RlCi0gKi8KLXZvaWQgZGlzYWJsZV9JT19BUElDKHZvaWQpCi17Ci0JLyoKLQkgKiBDbGVhciB0aGUgSU8tQVBJQyBiZWZvcmUgcmVib290aW5nOgotCSAqLwotCWNsZWFyX0lPX0FQSUMoKTsKLQotCS8qCi0JICogSWYgdGhlIGk4MjU5IGlzIHJvdXRlZCB0aHJvdWdoIGFuIElPQVBJQwotCSAqIFB1dCB0aGF0IElPQVBJQyBpbiB2aXJ0dWFsIHdpcmUgbW9kZQotCSAqIHNvIGxlZ2FjeSBpbnRlcnJ1cHRzIGNhbiBiZSBkZWxpdmVyZWQuCi0JICovCi0JaWYgKGlvYXBpY19pODI1OS5waW4gIT0gLTEpIHsKLQkJc3RydWN0IElPX0FQSUNfcm91dGVfZW50cnkgZW50cnk7Ci0KLQkJbWVtc2V0KCZlbnRyeSwgMCwgc2l6ZW9mKGVudHJ5KSk7Ci0JCWVudHJ5Lm1hc2sgICAgICAgICAgICA9IDA7IC8qIEVuYWJsZWQgKi8KLQkJZW50cnkudHJpZ2dlciAgICAgICAgID0gMDsgLyogRWRnZSAqLwotCQllbnRyeS5pcnIgICAgICAgICAgICAgPSAwOwotCQllbnRyeS5wb2xhcml0eSAgICAgICAgPSAwOyAvKiBIaWdoICovCi0JCWVudHJ5LmRlbGl2ZXJ5X3N0YXR1cyA9IDA7Ci0JCWVudHJ5LmRlc3RfbW9kZSAgICAgICA9IDA7IC8qIFBoeXNpY2FsICovCi0JCWVudHJ5LmRlbGl2ZXJ5X21vZGUgICA9IGRlc3RfRXh0SU5UOyAvKiBFeHRJbnQgKi8KLQkJZW50cnkudmVjdG9yICAgICAgICAgID0gMDsKLQkJZW50cnkuZGVzdCAgICAgICAgICAgID0gcmVhZF9hcGljX2lkKCk7Ci0KLQkJLyoKLQkJICogQWRkIGl0IHRvIHRoZSBJTy1BUElDIGlycS1yb3V0aW5nIHRhYmxlOgotCQkgKi8KLQkJaW9hcGljX3dyaXRlX2VudHJ5KGlvYXBpY19pODI1OS5hcGljLCBpb2FwaWNfaTgyNTkucGluLCBlbnRyeSk7Ci0JfQotCi0JZGlzY29ubmVjdF9ic3BfQVBJQyhpb2FwaWNfaTgyNTkucGluICE9IC0xKTsKLX0KLQotLyoKLSAqIFRoZXJlIGlzIGEgbmFzdHkgYnVnIGluIHNvbWUgb2xkZXIgU01QIGJvYXJkcywgdGhlaXIgbXB0YWJsZSBsaWVzCi0gKiBhYm91dCB0aGUgdGltZXIgSVJRLiBXZSBkbyB0aGUgZm9sbG93aW5nIHRvIHdvcmsgYXJvdW5kIHRoZSBzaXR1YXRpb246Ci0gKgotICoJLSB0aW1lciBJUlEgZGVmYXVsdHMgdG8gSU8tQVBJQyBJUlEKLSAqCS0gaWYgdGhpcyBmdW5jdGlvbiBkZXRlY3RzIHRoYXQgdGltZXIgSVJRcyBhcmUgZGVmdW5jdCwgdGhlbiB3ZSBmYWxsCi0gKgkgIGJhY2sgdG8gSVNBIHRpbWVyIElSUXMKLSAqLwotc3RhdGljIGludCBfX2luaXQgdGltZXJfaXJxX3dvcmtzKHZvaWQpCi17Ci0JdW5zaWduZWQgbG9uZyB0MSA9IGppZmZpZXM7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCWxvY2FsX3NhdmVfZmxhZ3MoZmxhZ3MpOwotCWxvY2FsX2lycV9lbmFibGUoKTsKLQkvKiBMZXQgdGVuIHRpY2tzIHBhc3MuLi4gKi8KLQltZGVsYXkoKDEwICogMTAwMCkgLyBIWik7Ci0JbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwotCi0JLyoKLQkgKiBFeHBlY3QgYSBmZXcgdGlja3MgYXQgbGVhc3QsIHRvIGJlIHN1cmUgc29tZSBwb3NzaWJsZQotCSAqIGdsdWUgbG9naWMgZG9lcyBub3QgbG9jayB1cCBhZnRlciBvbmUgb3IgdHdvIGZpcnN0Ci0JICogdGlja3MgaW4gYSBub24tRXh0SU5UIG1vZGUuICBBbHNvIHRoZSBsb2NhbCBBUElDCi0JICogbWlnaHQgaGF2ZSBjYWNoZWQgb25lIEV4dElOVCBpbnRlcnJ1cHQuICBGaW5hbGx5LCBhdAotCSAqIGxlYXN0IG9uZSB0aWNrIG1heSBiZSBsb3N0IGR1ZSB0byBkZWxheXMuCi0JICovCi0KLQkvKiBqaWZmaWVzIHdyYXA/ICovCi0JaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgdDEgKyA0KSkKLQkJcmV0dXJuIDE7Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qCi0gKiBJbiB0aGUgU01QK0lPQVBJQyBjYXNlIGl0IG1pZ2h0IGhhcHBlbiB0aGF0IHRoZXJlIGFyZSBhbiB1bnNwZWNpZmllZAotICogbnVtYmVyIG9mIHBlbmRpbmcgSVJRIGV2ZW50cyB1bmhhbmRsZWQuIFRoZXNlIGNhc2VzIGFyZSB2ZXJ5IHJhcmUsCi0gKiBzbyB3ZSAncmVzZW5kJyB0aGVzZSBJUlFzIHZpYSBJUElzLCB0byB0aGUgc2FtZSBDUFUuIEl0J3MgbXVjaAotICogYmV0dGVyIHRvIGRvIGl0IHRoaXMgd2F5IGFzIHRodXMgd2UgZG8gbm90IGhhdmUgdG8gYmUgYXdhcmUgb2YKLSAqICdwZW5kaW5nJyBpbnRlcnJ1cHRzIGluIHRoZSBJUlEgcGF0aCwgZXhjZXB0IGF0IHRoaXMgcG9pbnQuCi0gKi8KLS8qCi0gKiBFZGdlIHRyaWdnZXJlZCBuZWVkcyB0byByZXNlbmQgYW55IGludGVycnVwdAotICogdGhhdCB3YXMgZGVsYXllZCBidXQgdGhpcyBpcyBub3cgaGFuZGxlZCBpbiB0aGUgZGV2aWNlCi0gKiBpbmRlcGVuZGVudCBjb2RlLgotICovCi0KLS8qCi0gKiBTdGFydGluZyB1cCBhIGVkZ2UtdHJpZ2dlcmVkIElPLUFQSUMgaW50ZXJydXB0IGlzCi0gKiBuYXN0eSAtIHdlIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgd2UgZ2V0IHRoZSBlZGdlLgotICogSWYgaXQgaXMgYWxyZWFkeSBhc3NlcnRlZCBmb3Igc29tZSByZWFzb24sIHdlIG5lZWQKLSAqIHJldHVybiAxIHRvIGluZGljYXRlIHRoYXQgaXMgd2FzIHBlbmRpbmcuCi0gKgotICogVGhpcyBpcyBub3QgY29tcGxldGUgLSB3ZSBzaG91bGQgYmUgYWJsZSB0byBmYWtlCi0gKiBhbiBlZGdlIGV2ZW4gaWYgaXQgaXNuJ3Qgb24gdGhlIDgyNTlBLi4uCi0gKi8KLQotc3RhdGljIHVuc2lnbmVkIGludCBzdGFydHVwX2lvYXBpY19pcnEodW5zaWduZWQgaW50IGlycSkKLXsKLQlpbnQgd2FzX3BlbmRpbmcgPSAwOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmaW9hcGljX2xvY2ssIGZsYWdzKTsKLQlpZiAoaXJxIDwgMTYpIHsKLQkJZGlzYWJsZV84MjU5QV9pcnEoaXJxKTsKLQkJaWYgKGk4MjU5QV9pcnFfcGVuZGluZyhpcnEpKQotCQkJd2FzX3BlbmRpbmcgPSAxOwotCX0KLQlfX3VubWFza19JT19BUElDX2lycShpcnEpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYXBpY19sb2NrLCBmbGFncyk7Ci0KLQlyZXR1cm4gd2FzX3BlbmRpbmc7Ci19Ci0KLXN0YXRpYyBpbnQgaW9hcGljX3JldHJpZ2dlcl9pcnEodW5zaWduZWQgaW50IGlycSkKLXsKLQlzdHJ1Y3QgaXJxX2NmZyAqY2ZnID0gJmlycV9jZmdbaXJxXTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnZlY3Rvcl9sb2NrLCBmbGFncyk7Ci0Jc2VuZF9JUElfbWFzayhjcHVtYXNrX29mX2NwdShmaXJzdF9jcHUoY2ZnLT5kb21haW4pKSwgY2ZnLT52ZWN0b3IpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnZlY3Rvcl9sb2NrLCBmbGFncyk7Ci0KLQlyZXR1cm4gMTsKLX0KLQotLyoKLSAqIExldmVsIGFuZCBlZGdlIHRyaWdnZXJlZCBJTy1BUElDIGludGVycnVwdHMgbmVlZCBkaWZmZXJlbnQgaGFuZGxpbmcsCi0gKiBzbyB3ZSB1c2UgdHdvIHNlcGFyYXRlIElSUSBkZXNjcmlwdG9ycy4gRWRnZSB0cmlnZ2VyZWQgSVJRcyBjYW4gYmUKLSAqIGhhbmRsZWQgd2l0aCB0aGUgbGV2ZWwtdHJpZ2dlcmVkIGRlc2NyaXB0b3IsIGJ1dCB0aGF0IG9uZSBoYXMgc2xpZ2h0bHkKLSAqIG1vcmUgb3ZlcmhlYWQuIExldmVsLXRyaWdnZXJlZCBpbnRlcnJ1cHRzIGNhbm5vdCBiZSBoYW5kbGVkIHdpdGggdGhlCi0gKiBlZGdlLXRyaWdnZXJlZCBoYW5kbGVyLCB3aXRob3V0IHJpc2tpbmcgSVJRIHN0b3JtcyBhbmQgb3RoZXIgdWdseQotICogcmFjZXMuCi0gKi8KLQotI2lmZGVmIENPTkZJR19TTVAKLQotI2lmZGVmIENPTkZJR19JTlRSX1JFTUFQCi1zdGF0aWMgdm9pZCBpcl9pcnFfbWlncmF0aW9uKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7Ci0KLXN0YXRpYyBERUNMQVJFX0RFTEFZRURfV09SSyhpcl9taWdyYXRpb25fd29yaywgaXJfaXJxX21pZ3JhdGlvbik7Ci0KLS8qCi0gKiBNaWdyYXRlIHRoZSBJTy1BUElDIGlycSBpbiB0aGUgcHJlc2VuY2Ugb2YgaW50ci1yZW1hcHBpbmcuCi0gKgotICogRm9yIGVkZ2UgdHJpZ2dlcmVkLCBpcnEgbWlncmF0aW9uIGlzIGEgc2ltcGxlIGF0b21pYyB1cGRhdGUob2YgdmVjdG9yCi0gKiBhbmQgY3B1IGRlc3RpbmF0aW9uKSBvZiBJUlRFIGFuZCBmbHVzaCB0aGUgaGFyZHdhcmUgY2FjaGUuCi0gKgotICogRm9yIGxldmVsIHRyaWdnZXJlZCwgd2UgbmVlZCB0byBtb2RpZnkgdGhlIGlvLWFwaWMgUlRFIGFzd2VsbCB3aXRoIHRoZSB1cGRhdGUKLSAqIHZlY3RvciBpbmZvcm1hdGlvbiwgYWxvbmcgd2l0aCBtb2RpZnlpbmcgSVJURSB3aXRoIHZlY3RvciBhbmQgZGVzdGluYXRpb24uCi0gKiBTbyBpcnEgbWlncmF0aW9uIGZvciBsZXZlbCB0cmlnZ2VyZWQgaXMgbGl0dGxlICBiaXQgbW9yZSBjb21wbGV4IGNvbXBhcmVkIHRvCi0gKiBlZGdlIHRyaWdnZXJlZCBtaWdyYXRpb24uIEJ1dCB0aGUgZ29vZCBuZXdzIGlzLCB3ZSB1c2UgdGhlIHNhbWUgYWxnb3JpdGhtCi0gKiBmb3IgbGV2ZWwgdHJpZ2dlcmVkIG1pZ3JhdGlvbiBhcyB3ZSBoYXZlIHRvZGF5LCBvbmx5IGRpZmZlcmVuY2UgYmVpbmcsCi0gKiB3ZSBub3cgaW5pdGlhdGUgdGhlIGlycSBtaWdyYXRpb24gZnJvbSBwcm9jZXNzIGNvbnRleHQgaW5zdGVhZCBvZiB0aGUKLSAqIGludGVycnVwdCBjb250ZXh0LgotICoKLSAqIEluIGZ1dHVyZSwgd2hlbiB3ZSBkbyBhIGRpcmVjdGVkIEVPSSAoY29tYmluZWQgd2l0aCBjcHUgRU9JIGJyb2FkY2FzdAotICogc3VwcHJlc3Npb24pIHRvIHRoZSBJTy1BUElDLCBsZXZlbCB0cmlnZ2VyZWQgaXJxIG1pZ3JhdGlvbiB3aWxsIGFsc28gYmUKLSAqIGFzIHNpbXBsZSBhcyBlZGdlIHRyaWdnZXJlZCBtaWdyYXRpb24gYW5kIHdlIGNhbiBkbyB0aGUgaXJxIG1pZ3JhdGlvbgotICogd2l0aCBhIHNpbXBsZSBhdG9taWMgdXBkYXRlIHRvIElPLUFQSUMgUlRFLgotICovCi1zdGF0aWMgdm9pZCBtaWdyYXRlX2lvYXBpY19pcnEoaW50IGlycSwgY3B1bWFza190IG1hc2spCi17Ci0Jc3RydWN0IGlycV9jZmcgKmNmZyA9IGlycV9jZmcgKyBpcnE7Ci0Jc3RydWN0IGlycV9kZXNjICpkZXNjID0gaXJxX2Rlc2MgKyBpcnE7Ci0JY3B1bWFza190IHRtcCwgY2xlYW51cF9tYXNrOwotCXN0cnVjdCBpcnRlIGlydGU7Ci0JaW50IG1vZGlmeV9pb2FwaWNfcnRlID0gZGVzYy0+c3RhdHVzICYgSVJRX0xFVkVMOwotCXVuc2lnbmVkIGludCBkZXN0OwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQljcHVzX2FuZCh0bXAsIG1hc2ssIGNwdV9vbmxpbmVfbWFwKTsKLQlpZiAoY3B1c19lbXB0eSh0bXApKQotCQlyZXR1cm47Ci0KLQlpZiAoZ2V0X2lydGUoaXJxLCAmaXJ0ZSkpCi0JCXJldHVybjsKLQotCWlmIChhc3NpZ25faXJxX3ZlY3RvcihpcnEsIG1hc2spKQotCQlyZXR1cm47Ci0KLQljcHVzX2FuZCh0bXAsIGNmZy0+ZG9tYWluLCBtYXNrKTsKLQlkZXN0ID0gY3B1X21hc2tfdG9fYXBpY2lkKHRtcCk7Ci0KLQlpZiAobW9kaWZ5X2lvYXBpY19ydGUpIHsKLQkJc3Bpbl9sb2NrX2lycXNhdmUoJmlvYXBpY19sb2NrLCBmbGFncyk7Ci0JCV9fdGFyZ2V0X0lPX0FQSUNfaXJxKGlycSwgZGVzdCwgY2ZnLT52ZWN0b3IpOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2FwaWNfbG9jaywgZmxhZ3MpOwotCX0KLQotCWlydGUudmVjdG9yID0gY2ZnLT52ZWN0b3I7Ci0JaXJ0ZS5kZXN0X2lkID0gSVJURV9ERVNUKGRlc3QpOwotCi0JLyoKLQkgKiBNb2RpZmllZCB0aGUgSVJURSBhbmQgZmx1c2hlcyB0aGUgSW50ZXJydXB0IGVudHJ5IGNhY2hlLgotCSAqLwotCW1vZGlmeV9pcnRlKGlycSwgJmlydGUpOwotCi0JaWYgKGNmZy0+bW92ZV9pbl9wcm9ncmVzcykgewotCQljcHVzX2FuZChjbGVhbnVwX21hc2ssIGNmZy0+b2xkX2RvbWFpbiwgY3B1X29ubGluZV9tYXApOwotCQljZmctPm1vdmVfY2xlYW51cF9jb3VudCA9IGNwdXNfd2VpZ2h0KGNsZWFudXBfbWFzayk7Ci0JCXNlbmRfSVBJX21hc2soY2xlYW51cF9tYXNrLCBJUlFfTU9WRV9DTEVBTlVQX1ZFQ1RPUik7Ci0JCWNmZy0+bW92ZV9pbl9wcm9ncmVzcyA9IDA7Ci0JfQotCi0JaXJxX2Rlc2NbaXJxXS5hZmZpbml0eSA9IG1hc2s7Ci19Ci0KLXN0YXRpYyBpbnQgbWlncmF0ZV9pcnFfcmVtYXBwZWRfbGV2ZWwoaW50IGlycSkKLXsKLQlpbnQgcmV0ID0gLTE7Ci0KLQltYXNrX0lPX0FQSUNfaXJxKGlycSk7Ci0KLQlpZiAoaW9fYXBpY19sZXZlbF9hY2tfcGVuZGluZyhpcnEpKSB7Ci0JCS8qCi0JIAkgKiBJbnRlcnJ1cHQgaW4gcHJvZ3Jlc3MuIE1pZ3JhdGluZyBpcnEgbm93IHdpbGwgY2hhbmdlIHRoZQotCQkgKiB2ZWN0b3IgaW5mb3JtYXRpb24gaW4gdGhlIElPLUFQSUMgUlRFIGFuZCB0aGF0IHdpbGwgY29uZnVzZQotCQkgKiB0aGUgRU9JIGJyb2FkY2FzdCBwZXJmb3JtZWQgYnkgY3B1LgotCQkgKiBTbywgZGVsYXkgdGhlIGlycSBtaWdyYXRpb24gdG8gdGhlIG5leHQgaW5zdGFuY2UuCi0JCSAqLwotCQlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJmlyX21pZ3JhdGlvbl93b3JrLCAxKTsKLQkJZ290byB1bm1hc2s7Ci0JfQotCi0JLyogZXZlcnRoaW5nIGlzIGNsZWFyLiB3ZSBoYXZlIHJpZ2h0IG9mIHdheSAqLwotCW1pZ3JhdGVfaW9hcGljX2lycShpcnEsIGlycV9kZXNjW2lycV0ucGVuZGluZ19tYXNrKTsKLQotCXJldCA9IDA7Ci0JaXJxX2Rlc2NbaXJxXS5zdGF0dXMgJj0gfklSUV9NT1ZFX1BFTkRJTkc7Ci0JY3B1c19jbGVhcihpcnFfZGVzY1tpcnFdLnBlbmRpbmdfbWFzayk7Ci0KLXVubWFzazoKLQl1bm1hc2tfSU9fQVBJQ19pcnEoaXJxKTsKLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgdm9pZCBpcl9pcnFfbWlncmF0aW9uKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKLXsKLQlpbnQgaXJxOwotCi0JZm9yIChpcnEgPSAwOyBpcnEgPCBOUl9JUlFTOyBpcnErKykgewotCQlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MgPSBpcnFfZGVzYyArIGlycTsKLQkJaWYgKGRlc2MtPnN0YXR1cyAmIElSUV9NT1ZFX1BFTkRJTkcpIHsKLQkJCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQkJCXNwaW5fbG9ja19pcnFzYXZlKCZkZXNjLT5sb2NrLCBmbGFncyk7Ci0JCQlpZiAoIWRlc2MtPmNoaXAtPnNldF9hZmZpbml0eSB8fAotCQkJICAgICEoZGVzYy0+c3RhdHVzICYgSVJRX01PVkVfUEVORElORykpIHsKLQkJCQlkZXNjLT5zdGF0dXMgJj0gfklSUV9NT1ZFX1BFTkRJTkc7Ci0JCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGVzYy0+bG9jaywgZmxhZ3MpOwotCQkJCWNvbnRpbnVlOwotCQkJfQotCi0JCQlkZXNjLT5jaGlwLT5zZXRfYWZmaW5pdHkoaXJxLAotCQkJCQkgICAgICAgICBpcnFfZGVzY1tpcnFdLnBlbmRpbmdfbWFzayk7Ci0JCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXNjLT5sb2NrLCBmbGFncyk7Ci0JCX0KLQl9Ci19Ci0KLS8qCi0gKiBNaWdyYXRlcyB0aGUgSVJRIGRlc3RpbmF0aW9uIGluIHRoZSBwcm9jZXNzIGNvbnRleHQuCi0gKi8KLXN0YXRpYyB2b2lkIHNldF9pcl9pb2FwaWNfYWZmaW5pdHlfaXJxKHVuc2lnbmVkIGludCBpcnEsIGNwdW1hc2tfdCBtYXNrKQotewotCWlmIChpcnFfZGVzY1tpcnFdLnN0YXR1cyAmIElSUV9MRVZFTCkgewotCQlpcnFfZGVzY1tpcnFdLnN0YXR1cyB8PSBJUlFfTU9WRV9QRU5ESU5HOwotCQlpcnFfZGVzY1tpcnFdLnBlbmRpbmdfbWFzayA9IG1hc2s7Ci0JCW1pZ3JhdGVfaXJxX3JlbWFwcGVkX2xldmVsKGlycSk7Ci0JCXJldHVybjsKLQl9Ci0KLQltaWdyYXRlX2lvYXBpY19pcnEoaXJxLCBtYXNrKTsKLX0KLSNlbmRpZgotCi1hc21saW5rYWdlIHZvaWQgc21wX2lycV9tb3ZlX2NsZWFudXBfaW50ZXJydXB0KHZvaWQpCi17Ci0JdW5zaWduZWQgdmVjdG9yLCBtZTsKLQlhY2tfQVBJQ19pcnEoKTsKLQlleGl0X2lkbGUoKTsKLQlpcnFfZW50ZXIoKTsKLQotCW1lID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwotCWZvciAodmVjdG9yID0gRklSU1RfRVhURVJOQUxfVkVDVE9SOyB2ZWN0b3IgPCBOUl9WRUNUT1JTOyB2ZWN0b3IrKykgewotCQl1bnNpZ25lZCBpbnQgaXJxOwotCQlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2M7Ci0JCXN0cnVjdCBpcnFfY2ZnICpjZmc7Ci0JCWlycSA9IF9fZ2V0X2NwdV92YXIodmVjdG9yX2lycSlbdmVjdG9yXTsKLQkJaWYgKGlycSA+PSBOUl9JUlFTKQotCQkJY29udGludWU7Ci0KLQkJZGVzYyA9IGlycV9kZXNjICsgaXJxOwotCQljZmcgPSBpcnFfY2ZnICsgaXJxOwotCQlzcGluX2xvY2soJmRlc2MtPmxvY2spOwotCQlpZiAoIWNmZy0+bW92ZV9jbGVhbnVwX2NvdW50KQotCQkJZ290byB1bmxvY2s7Ci0KLQkJaWYgKCh2ZWN0b3IgPT0gY2ZnLT52ZWN0b3IpICYmIGNwdV9pc3NldChtZSwgY2ZnLT5kb21haW4pKQotCQkJZ290byB1bmxvY2s7Ci0KLQkJX19nZXRfY3B1X3Zhcih2ZWN0b3JfaXJxKVt2ZWN0b3JdID0gLTE7Ci0JCWNmZy0+bW92ZV9jbGVhbnVwX2NvdW50LS07Ci11bmxvY2s6Ci0JCXNwaW5fdW5sb2NrKCZkZXNjLT5sb2NrKTsKLQl9Ci0KLQlpcnFfZXhpdCgpOwotfQotCi1zdGF0aWMgdm9pZCBpcnFfY29tcGxldGVfbW92ZSh1bnNpZ25lZCBpbnQgaXJxKQotewotCXN0cnVjdCBpcnFfY2ZnICpjZmcgPSBpcnFfY2ZnICsgaXJxOwotCXVuc2lnbmVkIHZlY3RvciwgbWU7Ci0KLQlpZiAobGlrZWx5KCFjZmctPm1vdmVfaW5fcHJvZ3Jlc3MpKQotCQlyZXR1cm47Ci0KLQl2ZWN0b3IgPSB+Z2V0X2lycV9yZWdzKCktPm9yaWdfYXg7Ci0JbWUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7Ci0JaWYgKCh2ZWN0b3IgPT0gY2ZnLT52ZWN0b3IpICYmIGNwdV9pc3NldChtZSwgY2ZnLT5kb21haW4pKSB7Ci0JCWNwdW1hc2tfdCBjbGVhbnVwX21hc2s7Ci0KLQkJY3B1c19hbmQoY2xlYW51cF9tYXNrLCBjZmctPm9sZF9kb21haW4sIGNwdV9vbmxpbmVfbWFwKTsKLQkJY2ZnLT5tb3ZlX2NsZWFudXBfY291bnQgPSBjcHVzX3dlaWdodChjbGVhbnVwX21hc2spOwotCQlzZW5kX0lQSV9tYXNrKGNsZWFudXBfbWFzaywgSVJRX01PVkVfQ0xFQU5VUF9WRUNUT1IpOwotCQljZmctPm1vdmVfaW5fcHJvZ3Jlc3MgPSAwOwotCX0KLX0KLSNlbHNlCi1zdGF0aWMgaW5saW5lIHZvaWQgaXJxX2NvbXBsZXRlX21vdmUodW5zaWduZWQgaW50IGlycSkge30KLSNlbmRpZgotI2lmZGVmIENPTkZJR19JTlRSX1JFTUFQCi1zdGF0aWMgdm9pZCBhY2tfeDJhcGljX2xldmVsKHVuc2lnbmVkIGludCBpcnEpCi17Ci0JYWNrX3gyQVBJQ19pcnEoKTsKLX0KLQotc3RhdGljIHZvaWQgYWNrX3gyYXBpY19lZGdlKHVuc2lnbmVkIGludCBpcnEpCi17Ci0JYWNrX3gyQVBJQ19pcnEoKTsKLX0KLSNlbmRpZgotCi1zdGF0aWMgdm9pZCBhY2tfYXBpY19lZGdlKHVuc2lnbmVkIGludCBpcnEpCi17Ci0JaXJxX2NvbXBsZXRlX21vdmUoaXJxKTsKLQltb3ZlX25hdGl2ZV9pcnEoaXJxKTsKLQlhY2tfQVBJQ19pcnEoKTsKLX0KLQotc3RhdGljIHZvaWQgYWNrX2FwaWNfbGV2ZWwodW5zaWduZWQgaW50IGlycSkKLXsKLQlpbnQgZG9fdW5tYXNrX2lycSA9IDA7Ci0KLQlpcnFfY29tcGxldGVfbW92ZShpcnEpOwotI2lmZGVmIENPTkZJR19HRU5FUklDX1BFTkRJTkdfSVJRCi0JLyogSWYgd2UgYXJlIG1vdmluZyB0aGUgaXJxIHdlIG5lZWQgdG8gbWFzayBpdCAqLwotCWlmICh1bmxpa2VseShpcnFfZGVzY1tpcnFdLnN0YXR1cyAmIElSUV9NT1ZFX1BFTkRJTkcpKSB7Ci0JCWRvX3VubWFza19pcnEgPSAxOwotCQltYXNrX0lPX0FQSUNfaXJxKGlycSk7Ci0JfQotI2VuZGlmCi0KLQkvKgotCSAqIFdlIG11c3QgYWNrbm93bGVkZ2UgdGhlIGlycSBiZWZvcmUgd2UgbW92ZSBpdCBvciB0aGUgYWNrbm93bGVkZ2Ugd2lsbAotCSAqIG5vdCBwcm9wYWdhdGUgcHJvcGVybHkuCi0JICovCi0JYWNrX0FQSUNfaXJxKCk7Ci0KLQkvKiBOb3cgd2UgY2FuIG1vdmUgYW5kIHJlbmFibGUgdGhlIGlycSAqLwotCWlmICh1bmxpa2VseShkb191bm1hc2tfaXJxKSkgewotCQkvKiBPbmx5IG1pZ3JhdGUgdGhlIGlycSBpZiB0aGUgYWNrIGhhcyBiZWVuIHJlY2VpdmVkLgotCQkgKgotCQkgKiBPbiByYXJlIG9jY2FzaW9ucyB0aGUgYnJvYWRjYXN0IGxldmVsIHRyaWdnZXJlZCBhY2sgZ2V0cwotCQkgKiBkZWxheWVkIGdvaW5nIHRvIGlvYXBpY3MsIGFuZCBpZiB3ZSByZXByb2dyYW0gdGhlCi0JCSAqIHZlY3RvciB3aGlsZSBSZW1vdGUgSVJSIGlzIHN0aWxsIHNldCB0aGUgaXJxIHdpbGwgbmV2ZXIKLQkJICogZmlyZSBhZ2Fpbi4KLQkJICoKLQkJICogVG8gcHJldmVudCB0aGlzIHNjZW5hcmlvIHdlIHJlYWQgdGhlIFJlbW90ZSBJUlIgYml0Ci0JCSAqIG9mIHRoZSBpb2FwaWMuICBUaGlzIGhhcyB0d28gZWZmZWN0cy4KLQkJICogLSBPbiBhbnkgc2FuZSBzeXN0ZW0gdGhlIHJlYWQgb2YgdGhlIGlvYXBpYyB3aWxsCi0JCSAqICAgZmx1c2ggd3JpdGVzIChhbmQgYWNrcykgZ29pbmcgdG8gdGhlIGlvYXBpYyBmcm9tCi0JCSAqICAgdGhpcyBjcHUuCi0JCSAqIC0gV2UgZ2V0IHRvIHNlZSBpZiB0aGUgQUNLIGhhcyBhY3R1YWxseSBiZWVuIGRlbGl2ZXJlZC4KLQkJICoKLQkJICogQmFzZWQgb24gZmFpbGVkIGV4cGVyaW1lbnRzIG9mIHJlcHJvZ3JhbW1pbmcgdGhlCi0JCSAqIGlvYXBpYyBlbnRyeSBmcm9tIG91dHNpZGUgb2YgaXJxIGNvbnRleHQgc3RhcnRpbmcKLQkJICogd2l0aCBtYXNraW5nIHRoZSBpb2FwaWMgZW50cnkgYW5kIHRoZW4gcG9sbGluZyB1bnRpbAotCQkgKiBSZW1vdGUgSVJSIHdhcyBjbGVhciBiZWZvcmUgcmVwcm9ncmFtbWluZyB0aGUKLQkJICogaW9hcGljIEkgZG9uJ3QgdHJ1c3QgdGhlIFJlbW90ZSBJUlIgYml0IHRvIGJlCi0JCSAqIGNvbXBsZXRleSBhY2N1cmF0ZS4KLQkJICoKLQkJICogSG93ZXZlciB0aGVyZSBhcHBlYXJzIHRvIGJlIG5vIG90aGVyIHdheSB0byBwbHVnCi0JCSAqIHRoaXMgcmFjZSwgc28gaWYgdGhlIFJlbW90ZSBJUlIgYml0IGlzIG5vdAotCQkgKiBhY2N1cmF0ZSBhbmQgaXMgY2F1c2luZyBwcm9ibGVtcyB0aGVuIGl0IGlzIGEgaGFyZHdhcmUgYnVnCi0JCSAqIGFuZCB5b3UgY2FuIGdvIHRhbGsgdG8gdGhlIGNoaXBzZXQgdmVuZG9yIGFib3V0IGl0LgotCQkgKi8KLQkJaWYgKCFpb19hcGljX2xldmVsX2Fja19wZW5kaW5nKGlycSkpCi0JCQltb3ZlX21hc2tlZF9pcnEoaXJxKTsKLQkJdW5tYXNrX0lPX0FQSUNfaXJxKGlycSk7Ci0JfQotfQotCi1zdGF0aWMgc3RydWN0IGlycV9jaGlwIGlvYXBpY19jaGlwIF9fcmVhZF9tb3N0bHkgPSB7Ci0JLm5hbWUgCQk9ICJJTy1BUElDIiwKLQkuc3RhcnR1cCAJPSBzdGFydHVwX2lvYXBpY19pcnEsCi0JLm1hc2sJIAk9IG1hc2tfSU9fQVBJQ19pcnEsCi0JLnVubWFzawkgCT0gdW5tYXNrX0lPX0FQSUNfaXJxLAotCS5hY2sgCQk9IGFja19hcGljX2VkZ2UsCi0JLmVvaSAJCT0gYWNrX2FwaWNfbGV2ZWwsCi0jaWZkZWYgQ09ORklHX1NNUAotCS5zZXRfYWZmaW5pdHkgCT0gc2V0X2lvYXBpY19hZmZpbml0eV9pcnEsCi0jZW5kaWYKLQkucmV0cmlnZ2VyCT0gaW9hcGljX3JldHJpZ2dlcl9pcnEsCi19OwotCi0jaWZkZWYgQ09ORklHX0lOVFJfUkVNQVAKLXN0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgaXJfaW9hcGljX2NoaXAgX19yZWFkX21vc3RseSA9IHsKLQkubmFtZSAJCT0gIklSLUlPLUFQSUMiLAotCS5zdGFydHVwIAk9IHN0YXJ0dXBfaW9hcGljX2lycSwKLQkubWFzawkgCT0gbWFza19JT19BUElDX2lycSwKLQkudW5tYXNrCSAJPSB1bm1hc2tfSU9fQVBJQ19pcnEsCi0JLmFjayAJCT0gYWNrX3gyYXBpY19lZGdlLAotCS5lb2kgCQk9IGFja194MmFwaWNfbGV2ZWwsCi0jaWZkZWYgQ09ORklHX1NNUAotCS5zZXRfYWZmaW5pdHkgCT0gc2V0X2lyX2lvYXBpY19hZmZpbml0eV9pcnEsCi0jZW5kaWYKLQkucmV0cmlnZ2VyCT0gaW9hcGljX3JldHJpZ2dlcl9pcnEsCi19OwotI2VuZGlmCi0KLXN0YXRpYyBpbmxpbmUgdm9pZCBpbml0X0lPX0FQSUNfdHJhcHModm9pZCkKLXsKLQlpbnQgaXJxOwotCi0JLyoKLQkgKiBOT1RFISBUaGUgbG9jYWwgQVBJQyBpc24ndCB2ZXJ5IGdvb2QgYXQgaGFuZGxpbmcKLQkgKiBtdWx0aXBsZSBpbnRlcnJ1cHRzIGF0IHRoZSBzYW1lIGludGVycnVwdCBsZXZlbC4KLQkgKiBBcyB0aGUgaW50ZXJydXB0IGxldmVsIGlzIGRldGVybWluZWQgYnkgdGFraW5nIHRoZQotCSAqIHZlY3RvciBudW1iZXIgYW5kIHNoaWZ0aW5nIHRoYXQgcmlnaHQgYnkgNCwgd2UKLQkgKiB3YW50IHRvIHNwcmVhZCB0aGVzZSBvdXQgYSBiaXQgc28gdGhhdCB0aGV5IGRvbid0Ci0JICogYWxsIGZhbGwgaW4gdGhlIHNhbWUgaW50ZXJydXB0IGxldmVsLgotCSAqCi0JICogQWxzbywgd2UndmUgZ290IHRvIGJlIGNhcmVmdWwgbm90IHRvIHRyYXNoIGdhdGUKLQkgKiAweDgwLCBiZWNhdXNlIGludCAweDgwIGlzIGhtLCBraW5kIG9mIGltcG9ydGFudGlzaC4gOykKLQkgKi8KLQlmb3IgKGlycSA9IDA7IGlycSA8IE5SX0lSUVMgOyBpcnErKykgewotCQlpZiAoSU9fQVBJQ19JUlEoaXJxKSAmJiAhaXJxX2NmZ1tpcnFdLnZlY3RvcikgewotCQkJLyoKLQkJCSAqIEhtbS4uIFdlIGRvbid0IGhhdmUgYW4gZW50cnkgZm9yIHRoaXMsCi0JCQkgKiBzbyBkZWZhdWx0IHRvIGFuIG9sZC1mYXNoaW9uZWQgODI1OQotCQkJICogaW50ZXJydXB0IGlmIHdlIGNhbi4uCi0JCQkgKi8KLQkJCWlmIChpcnEgPCAxNikKLQkJCQltYWtlXzgyNTlBX2lycShpcnEpOwotCQkJZWxzZQotCQkJCS8qIFN0cmFuZ2UuIE9oLCB3ZWxsLi4gKi8KLQkJCQlpcnFfZGVzY1tpcnFdLmNoaXAgPSAmbm9faXJxX2NoaXA7Ci0JCX0KLQl9Ci19Ci0KLXN0YXRpYyB2b2lkIHVubWFza19sYXBpY19pcnEodW5zaWduZWQgaW50IGlycSkKLXsKLQl1bnNpZ25lZCBsb25nIHY7Ci0KLQl2ID0gYXBpY19yZWFkKEFQSUNfTFZUMCk7Ci0JYXBpY193cml0ZShBUElDX0xWVDAsIHYgJiB+QVBJQ19MVlRfTUFTS0VEKTsKLX0KLQotc3RhdGljIHZvaWQgbWFza19sYXBpY19pcnEodW5zaWduZWQgaW50IGlycSkKLXsKLQl1bnNpZ25lZCBsb25nIHY7Ci0KLQl2ID0gYXBpY19yZWFkKEFQSUNfTFZUMCk7Ci0JYXBpY193cml0ZShBUElDX0xWVDAsIHYgfCBBUElDX0xWVF9NQVNLRUQpOwotfQotCi1zdGF0aWMgdm9pZCBhY2tfbGFwaWNfaXJxICh1bnNpZ25lZCBpbnQgaXJxKQotewotCWFja19BUElDX2lycSgpOwotfQotCi1zdGF0aWMgc3RydWN0IGlycV9jaGlwIGxhcGljX2NoaXAgX19yZWFkX21vc3RseSA9IHsKLQkubmFtZQkJPSAibG9jYWwtQVBJQyIsCi0JLm1hc2sJCT0gbWFza19sYXBpY19pcnEsCi0JLnVubWFzawkJPSB1bm1hc2tfbGFwaWNfaXJxLAotCS5hY2sJCT0gYWNrX2xhcGljX2lycSwKLX07Ci0KLXN0YXRpYyB2b2lkIGxhcGljX3JlZ2lzdGVyX2ludHIoaW50IGlycSkKLXsKLQlpcnFfZGVzY1tpcnFdLnN0YXR1cyAmPSB+SVJRX0xFVkVMOwotCXNldF9pcnFfY2hpcF9hbmRfaGFuZGxlcl9uYW1lKGlycSwgJmxhcGljX2NoaXAsIGhhbmRsZV9lZGdlX2lycSwKLQkJCQkgICAgICAiZWRnZSIpOwotfQotCi1zdGF0aWMgdm9pZCBfX2luaXQgc2V0dXBfbm1pKHZvaWQpCi17Ci0JLyoKLSAJICogRGlydHkgdHJpY2sgdG8gZW5hYmxlIHRoZSBOTUkgd2F0Y2hkb2cgLi4uCi0JICogV2UgcHV0IHRoZSA4MjU5QSBtYXN0ZXIgaW50byBBRU9JIG1vZGUgYW5kCi0JICogdW5tYXNrIG9uIGFsbCBsb2NhbCBBUElDcyBMVlQwIGFzIE5NSS4KLQkgKgotCSAqIFRoZSBpZGVhIHRvIHVzZSB0aGUgODI1OUEgaW4gQUVPSSBtb2RlICgnODI1OUEgVmlydHVhbCBXaXJlJykKLQkgKiBpcyBmcm9tIE1hY2llaiBXLiBSb3p5Y2tpIC0gc28gd2UgZG8gbm90IGhhdmUgdG8gRU9JIGZyb20KLQkgKiB0aGUgTk1JIGhhbmRsZXIgb3IgdGhlIHRpbWVyIGludGVycnVwdC4KLQkgKi8gCi0JcHJpbnRrKEtFUk5fSU5GTyAiYWN0aXZhdGluZyBOTUkgV2F0Y2hkb2cgLi4uIik7Ci0KLQllbmFibGVfTk1JX3Rocm91Z2hfTFZUMCgpOwotCi0JcHJpbnRrKCIgZG9uZS5cbiIpOwotfQotCi0vKgotICogVGhpcyBsb29rcyBhIGJpdCBoYWNraXNoIGJ1dCBpdCdzIGFib3V0IHRoZSBvbmx5IG9uZSB3YXkgb2Ygc2VuZGluZwotICogYSBmZXcgSU5UQSBjeWNsZXMgdG8gODI1OUFzIGFuZCBhbnkgYXNzb2NpYXRlZCBnbHVlIGxvZ2ljLiAgSUNSIGRvZXMKLSAqIG5vdCBzdXBwb3J0IHRoZSBFeHRJTlQgbW9kZSwgdW5mb3J0dW5hdGVseS4gIFdlIG5lZWQgdG8gc2VuZCB0aGVzZQotICogY3ljbGVzIGFzIHNvbWUgaTgyNDg5RFgtYmFzZWQgYm9hcmRzIGhhdmUgZ2x1ZSBsb2dpYyB0aGF0IGtlZXBzIHRoZQotICogODI1OUEgaW50ZXJydXB0IGxpbmUgYXNzZXJ0ZWQgdW50aWwgSU5UQS4gIC0tbWFjcm8KLSAqLwotc3RhdGljIGlubGluZSB2b2lkIF9faW5pdCB1bmxvY2tfRXh0SU5UX2xvZ2ljKHZvaWQpCi17Ci0JaW50IGFwaWMsIHBpbiwgaTsKLQlzdHJ1Y3QgSU9fQVBJQ19yb3V0ZV9lbnRyeSBlbnRyeTAsIGVudHJ5MTsKLQl1bnNpZ25lZCBjaGFyIHNhdmVfY29udHJvbCwgc2F2ZV9mcmVxX3NlbGVjdDsKLQotCXBpbiAgPSBmaW5kX2lzYV9pcnFfcGluKDgsIG1wX0lOVCk7Ci0JYXBpYyA9IGZpbmRfaXNhX2lycV9hcGljKDgsIG1wX0lOVCk7Ci0JaWYgKHBpbiA9PSAtMSkKLQkJcmV0dXJuOwotCi0JZW50cnkwID0gaW9hcGljX3JlYWRfZW50cnkoYXBpYywgcGluKTsKLQotCWNsZWFyX0lPX0FQSUNfcGluKGFwaWMsIHBpbik7Ci0KLQltZW1zZXQoJmVudHJ5MSwgMCwgc2l6ZW9mKGVudHJ5MSkpOwotCi0JZW50cnkxLmRlc3RfbW9kZSA9IDA7CQkJLyogcGh5c2ljYWwgZGVsaXZlcnkgKi8KLQllbnRyeTEubWFzayA9IDA7CQkJLyogdW5tYXNrIElSUSBub3cgKi8KLQllbnRyeTEuZGVzdCA9IGhhcmRfc21wX3Byb2Nlc3Nvcl9pZCgpOwotCWVudHJ5MS5kZWxpdmVyeV9tb2RlID0gZGVzdF9FeHRJTlQ7Ci0JZW50cnkxLnBvbGFyaXR5ID0gZW50cnkwLnBvbGFyaXR5OwotCWVudHJ5MS50cmlnZ2VyID0gMDsKLQllbnRyeTEudmVjdG9yID0gMDsKLQotCWlvYXBpY193cml0ZV9lbnRyeShhcGljLCBwaW4sIGVudHJ5MSk7Ci0KLQlzYXZlX2NvbnRyb2wgPSBDTU9TX1JFQUQoUlRDX0NPTlRST0wpOwotCXNhdmVfZnJlcV9zZWxlY3QgPSBDTU9TX1JFQUQoUlRDX0ZSRVFfU0VMRUNUKTsKLQlDTU9TX1dSSVRFKChzYXZlX2ZyZXFfc2VsZWN0ICYgflJUQ19SQVRFX1NFTEVDVCkgfCAweDYsCi0JCSAgIFJUQ19GUkVRX1NFTEVDVCk7Ci0JQ01PU19XUklURShzYXZlX2NvbnRyb2wgfCBSVENfUElFLCBSVENfQ09OVFJPTCk7Ci0KLQlpID0gMTAwOwotCXdoaWxlIChpLS0gPiAwKSB7Ci0JCW1kZWxheSgxMCk7Ci0JCWlmICgoQ01PU19SRUFEKFJUQ19JTlRSX0ZMQUdTKSAmIFJUQ19QRikgPT0gUlRDX1BGKQotCQkJaSAtPSAxMDsKLQl9Ci0KLQlDTU9TX1dSSVRFKHNhdmVfY29udHJvbCwgUlRDX0NPTlRST0wpOwotCUNNT1NfV1JJVEUoc2F2ZV9mcmVxX3NlbGVjdCwgUlRDX0ZSRVFfU0VMRUNUKTsKLQljbGVhcl9JT19BUElDX3BpbihhcGljLCBwaW4pOwotCi0JaW9hcGljX3dyaXRlX2VudHJ5KGFwaWMsIHBpbiwgZW50cnkwKTsKLX0KLQotLyoKLSAqIFRoaXMgY29kZSBtYXkgbG9vayBhIGJpdCBwYXJhbm9pZCwgYnV0IGl0J3Mgc3VwcG9zZWQgdG8gY29vcGVyYXRlIHdpdGgKLSAqIGEgd2lkZSByYW5nZSBvZiBib2FyZHMgYW5kIEJJT1MgYnVncy4gIEZvcnR1bmF0ZWx5IG9ubHkgdGhlIHRpbWVyIElSUQotICogaXMgc28gc2NyZXd5LiAgVGhhbmtzIHRvIEJyaWFuIFBlcmtpbnMgZm9yIHRlc3RpbmcvaGFja2luZyB0aGlzIGJlYXN0Ci0gKiBmYW5hdGljYWxseSBvbiBoaXMgdHJ1bHkgYnVnZ3kgYm9hcmQuCi0gKgotICogRklYTUU6IHJlYWxseSBuZWVkIHRvIHJldmFtcCB0aGlzIGZvciBtb2Rlcm4gcGxhdGZvcm1zIG9ubHkuCi0gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBfX2luaXQgY2hlY2tfdGltZXIodm9pZCkKLXsKLQlzdHJ1Y3QgaXJxX2NmZyAqY2ZnID0gaXJxX2NmZyArIDA7Ci0JaW50IGFwaWMxLCBwaW4xLCBhcGljMiwgcGluMjsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWludCBub19waW4xID0gMDsKLQotCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQotCS8qCi0JICogZ2V0L3NldCB0aGUgdGltZXIgSVJRIHZlY3RvcjoKLQkgKi8KLQlkaXNhYmxlXzgyNTlBX2lycSgwKTsKLQlhc3NpZ25faXJxX3ZlY3RvcigwLCBUQVJHRVRfQ1BVUyk7Ci0KLQkvKgotCSAqIEFzIElSUTAgaXMgdG8gYmUgZW5hYmxlZCBpbiB0aGUgODI1OUEsIHRoZSB2aXJ0dWFsCi0JICogd2lyZSBoYXMgdG8gYmUgZGlzYWJsZWQgaW4gdGhlIGxvY2FsIEFQSUMuCi0JICovCi0JYXBpY193cml0ZShBUElDX0xWVDAsIEFQSUNfTFZUX01BU0tFRCB8IEFQSUNfRE1fRVhUSU5UKTsKLQlpbml0XzgyNTlBKDEpOwotCi0JcGluMSAgPSBmaW5kX2lzYV9pcnFfcGluKDAsIG1wX0lOVCk7Ci0JYXBpYzEgPSBmaW5kX2lzYV9pcnFfYXBpYygwLCBtcF9JTlQpOwotCXBpbjIgID0gaW9hcGljX2k4MjU5LnBpbjsKLQlhcGljMiA9IGlvYXBpY19pODI1OS5hcGljOwotCi0JYXBpY19wcmludGsoQVBJQ19RVUlFVCwgS0VSTl9JTkZPICIuLlRJTUVSOiB2ZWN0b3I9MHglMDJYICIKLQkJICAgICJhcGljMT0lZCBwaW4xPSVkIGFwaWMyPSVkIHBpbjI9JWRcbiIsCi0JCSAgICBjZmctPnZlY3RvciwgYXBpYzEsIHBpbjEsIGFwaWMyLCBwaW4yKTsKLQotCS8qCi0JICogU29tZSBCSU9TIHdyaXRlcnMgYXJlIGNsdWVsZXNzIGFuZCByZXBvcnQgdGhlIEV4dElOVEEKLQkgKiBJL08gQVBJQyBpbnB1dCBmcm9tIHRoZSBjYXNjYWRlZCA4MjU5QSBhcyB0aGUgdGltZXIKLQkgKiBpbnRlcnJ1cHQgaW5wdXQuICBTbyBqdXN0IGluIGNhc2UsIGlmIG9ubHkgb25lIHBpbgotCSAqIHdhcyBmb3VuZCBhYm92ZSwgdHJ5IGl0IGJvdGggZGlyZWN0bHkgYW5kIHRocm91Z2ggdGhlCi0JICogODI1OUEuCi0JICovCi0JaWYgKHBpbjEgPT0gLTEpIHsKLQkJaWYgKGludHJfcmVtYXBwaW5nX2VuYWJsZWQpCi0JCQlwYW5pYygiQklPUyBidWc6IHRpbWVyIG5vdCBjb25uZWN0ZWQgdG8gSU8tQVBJQyIpOwotCQlwaW4xID0gcGluMjsKLQkJYXBpYzEgPSBhcGljMjsKLQkJbm9fcGluMSA9IDE7Ci0JfSBlbHNlIGlmIChwaW4yID09IC0xKSB7Ci0JCXBpbjIgPSBwaW4xOwotCQlhcGljMiA9IGFwaWMxOwotCX0KLQotCWlmIChwaW4xICE9IC0xKSB7Ci0JCS8qCi0JCSAqIE9rLCBkb2VzIElSUTAgdGhyb3VnaCB0aGUgSU9BUElDIHdvcms/Ci0JCSAqLwotCQlpZiAobm9fcGluMSkgewotCQkJYWRkX3Bpbl90b19pcnEoMCwgYXBpYzEsIHBpbjEpOwotCQkJc2V0dXBfdGltZXJfSVJRMF9waW4oYXBpYzEsIHBpbjEsIGNmZy0+dmVjdG9yKTsKLQkJfQotCQl1bm1hc2tfSU9fQVBJQ19pcnEoMCk7Ci0JCWlmICghbm9fdGltZXJfY2hlY2sgJiYgdGltZXJfaXJxX3dvcmtzKCkpIHsKLQkJCWlmIChubWlfd2F0Y2hkb2cgPT0gTk1JX0lPX0FQSUMpIHsKLQkJCQlzZXR1cF9ubWkoKTsKLQkJCQllbmFibGVfODI1OUFfaXJxKDApOwotCQkJfQotCQkJaWYgKGRpc2FibGVfdGltZXJfcGluXzEgPiAwKQotCQkJCWNsZWFyX0lPX0FQSUNfcGluKDAsIHBpbjEpOwotCQkJZ290byBvdXQ7Ci0JCX0KLQkJaWYgKGludHJfcmVtYXBwaW5nX2VuYWJsZWQpCi0JCQlwYW5pYygidGltZXIgZG9lc24ndCB3b3JrIHRocm91Z2ggSW50ZXJydXB0LXJlbWFwcGVkIElPLUFQSUMiKTsKLQkJY2xlYXJfSU9fQVBJQ19waW4oYXBpYzEsIHBpbjEpOwotCQlpZiAoIW5vX3BpbjEpCi0JCQlhcGljX3ByaW50ayhBUElDX1FVSUVULCBLRVJOX0VSUiAiLi5NUC1CSU9TIGJ1ZzogIgotCQkJCSAgICAiODI1NCB0aW1lciBub3QgY29ubmVjdGVkIHRvIElPLUFQSUNcbiIpOwotCi0JCWFwaWNfcHJpbnRrKEFQSUNfUVVJRVQsIEtFUk5fSU5GTyAiLi4udHJ5aW5nIHRvIHNldCB1cCB0aW1lciAiCi0JCQkgICAgIihJUlEwKSB0aHJvdWdoIHRoZSA4MjU5QSAuLi5cbiIpOwotCQlhcGljX3ByaW50ayhBUElDX1FVSUVULCBLRVJOX0lORk8KLQkJCSAgICAiLi4uLi4gKGZvdW5kIGFwaWMgJWQgcGluICVkKSAuLi5cbiIsIGFwaWMyLCBwaW4yKTsKLQkJLyoKLQkJICogbGVnYWN5IGRldmljZXMgc2hvdWxkIGJlIGNvbm5lY3RlZCB0byBJTyBBUElDICMwCi0JCSAqLwotCQlyZXBsYWNlX3Bpbl9hdF9pcnEoMCwgYXBpYzEsIHBpbjEsIGFwaWMyLCBwaW4yKTsKLQkJc2V0dXBfdGltZXJfSVJRMF9waW4oYXBpYzIsIHBpbjIsIGNmZy0+dmVjdG9yKTsKLQkJdW5tYXNrX0lPX0FQSUNfaXJxKDApOwotCQllbmFibGVfODI1OUFfaXJxKDApOwotCQlpZiAodGltZXJfaXJxX3dvcmtzKCkpIHsKLQkJCWFwaWNfcHJpbnRrKEFQSUNfUVVJRVQsIEtFUk5fSU5GTyAiLi4uLi4uLiB3b3Jrcy5cbiIpOwotCQkJdGltZXJfdGhyb3VnaF84MjU5ID0gMTsKLQkJCWlmIChubWlfd2F0Y2hkb2cgPT0gTk1JX0lPX0FQSUMpIHsKLQkJCQlkaXNhYmxlXzgyNTlBX2lycSgwKTsKLQkJCQlzZXR1cF9ubWkoKTsKLQkJCQllbmFibGVfODI1OUFfaXJxKDApOwotCQkJfQotCQkJZ290byBvdXQ7Ci0JCX0KLQkJLyoKLQkJICogQ2xlYW51cCwganVzdCBpbiBjYXNlIC4uLgotCQkgKi8KLQkJZGlzYWJsZV84MjU5QV9pcnEoMCk7Ci0JCWNsZWFyX0lPX0FQSUNfcGluKGFwaWMyLCBwaW4yKTsKLQkJYXBpY19wcmludGsoQVBJQ19RVUlFVCwgS0VSTl9JTkZPICIuLi4uLi4uIGZhaWxlZC5cbiIpOwotCX0KLQotCWlmIChubWlfd2F0Y2hkb2cgPT0gTk1JX0lPX0FQSUMpIHsKLQkJYXBpY19wcmludGsoQVBJQ19RVUlFVCwgS0VSTl9XQVJOSU5HICJ0aW1lciBkb2Vzbid0IHdvcmsgIgotCQkJICAgICJ0aHJvdWdoIHRoZSBJTy1BUElDIC0gZGlzYWJsaW5nIE5NSSBXYXRjaGRvZyFcbiIpOwotCQlubWlfd2F0Y2hkb2cgPSBOTUlfTk9ORTsKLQl9Ci0KLQlhcGljX3ByaW50ayhBUElDX1FVSUVULCBLRVJOX0lORk8KLQkJICAgICIuLi50cnlpbmcgdG8gc2V0IHVwIHRpbWVyIGFzIFZpcnR1YWwgV2lyZSBJUlEuLi5cbiIpOwotCi0JbGFwaWNfcmVnaXN0ZXJfaW50cigwKTsKLQlhcGljX3dyaXRlKEFQSUNfTFZUMCwgQVBJQ19ETV9GSVhFRCB8IGNmZy0+dmVjdG9yKTsJLyogRml4ZWQgbW9kZSAqLwotCWVuYWJsZV84MjU5QV9pcnEoMCk7Ci0KLQlpZiAodGltZXJfaXJxX3dvcmtzKCkpIHsKLQkJYXBpY19wcmludGsoQVBJQ19RVUlFVCwgS0VSTl9JTkZPICIuLi4uLiB3b3Jrcy5cbiIpOwotCQlnb3RvIG91dDsKLQl9Ci0JZGlzYWJsZV84MjU5QV9pcnEoMCk7Ci0JYXBpY193cml0ZShBUElDX0xWVDAsIEFQSUNfTFZUX01BU0tFRCB8IEFQSUNfRE1fRklYRUQgfCBjZmctPnZlY3Rvcik7Ci0JYXBpY19wcmludGsoQVBJQ19RVUlFVCwgS0VSTl9JTkZPICIuLi4uLiBmYWlsZWQuXG4iKTsKLQotCWFwaWNfcHJpbnRrKEFQSUNfUVVJRVQsIEtFUk5fSU5GTwotCQkgICAgIi4uLnRyeWluZyB0byBzZXQgdXAgdGltZXIgYXMgRXh0SU5UIElSUS4uLlxuIik7Ci0KLQlpbml0XzgyNTlBKDApOwotCW1ha2VfODI1OUFfaXJxKDApOwotCWFwaWNfd3JpdGUoQVBJQ19MVlQwLCBBUElDX0RNX0VYVElOVCk7Ci0KLQl1bmxvY2tfRXh0SU5UX2xvZ2ljKCk7Ci0KLQlpZiAodGltZXJfaXJxX3dvcmtzKCkpIHsKLQkJYXBpY19wcmludGsoQVBJQ19RVUlFVCwgS0VSTl9JTkZPICIuLi4uLiB3b3Jrcy5cbiIpOwotCQlnb3RvIG91dDsKLQl9Ci0JYXBpY19wcmludGsoQVBJQ19RVUlFVCwgS0VSTl9JTkZPICIuLi4uLiBmYWlsZWQgOiguXG4iKTsKLQlwYW5pYygiSU8tQVBJQyArIHRpbWVyIGRvZXNuJ3Qgd29yayEgIEJvb3Qgd2l0aCBhcGljPWRlYnVnIGFuZCBzZW5kIGEgIgotCQkicmVwb3J0LiAgVGhlbiB0cnkgYm9vdGluZyB3aXRoIHRoZSAnbm9hcGljJyBvcHRpb24uXG4iKTsKLW91dDoKLQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Ci19Ci0KLXN0YXRpYyBpbnQgX19pbml0IG5vdGltZXJjaGVjayhjaGFyICpzKQotewotCW5vX3RpbWVyX2NoZWNrID0gMTsKLQlyZXR1cm4gMTsKLX0KLV9fc2V0dXAoIm5vX3RpbWVyX2NoZWNrIiwgbm90aW1lcmNoZWNrKTsKLQotLyoKLSAqIFRyYWRpdGlvbmFsbHkgSVNBIElSUTIgaXMgdGhlIGNhc2NhZGUgSVJRLCBhbmQgaXMgbm90IGF2YWlsYWJsZQotICogdG8gZGV2aWNlcy4gIEhvd2V2ZXIgdGhlcmUgbWF5IGJlIGFuIEkvTyBBUElDIHBpbiBhdmFpbGFibGUgZm9yCi0gKiB0aGlzIGludGVycnVwdCByZWdhcmRsZXNzLiAgVGhlIHBpbiBtYXkgYmUgbGVmdCB1bmNvbm5lY3RlZCwgYnV0Ci0gKiB0eXBpY2FsbHkgaXQgd2lsbCBiZSByZXVzZWQgYXMgYW4gRXh0SU5UIGNhc2NhZGUgaW50ZXJydXB0IGZvcgotICogdGhlIG1hc3RlciA4MjU5QS4gIEluIHRoZSBNUFMgY2FzZSBzdWNoIGEgcGluIHdpbGwgbm9ybWFsbHkgYmUKLSAqIHJlcG9ydGVkIGFzIGFuIEV4dElOVCBpbnRlcnJ1cHQgaW4gdGhlIE1QIHRhYmxlLiAgV2l0aCBBQ1BJCi0gKiB0aGVyZSBpcyBubyBwcm92aXNpb24gZm9yIEV4dElOVCBpbnRlcnJ1cHRzLCBhbmQgaW4gdGhlIGFic2VuY2UKLSAqIG9mIGFuIG92ZXJyaWRlIGl0IHdvdWxkIGJlIHRyZWF0ZWQgYXMgYW4gb3JkaW5hcnkgSVNBIEkvTyBBUElDCi0gKiBpbnRlcnJ1cHQsIHRoYXQgaXMgZWRnZS10cmlnZ2VyZWQgYW5kIHVubWFza2VkIGJ5IGRlZmF1bHQuICBXZQotICogdXNlZCB0byBkbyB0aGlzLCBidXQgaXQgY2F1c2VkIHByb2JsZW1zIG9uIHNvbWUgc3lzdGVtcyBiZWNhdXNlCi0gKiBvZiB0aGUgTk1JIHdhdGNoZG9nIGFuZCBzb21ldGltZXMgSVJRMCBvZiB0aGUgODI1NCB0aW1lciB1c2luZwotICogdGhlIHNhbWUgRXh0SU5UIGNhc2NhZGUgaW50ZXJydXB0IHRvIGRyaXZlIHRoZSBsb2NhbCBBUElDIG9mIHRoZQotICogYm9vdHN0cmFwIHByb2Nlc3Nvci4gIFRoZXJlZm9yZSB3ZSByZWZyYWluIGZyb20gcm91dGluZyBJUlEyIHRvCi0gKiB0aGUgSS9PIEFQSUMgaW4gYWxsIGNhc2VzIG5vdy4gIE5vIGFjdHVhbCBkZXZpY2Ugc2hvdWxkIHJlcXVlc3QKLSAqIGl0IGFueXdheS4gIC0tbWFjcm8KLSAqLwotI2RlZmluZSBQSUNfSVJRUwkoMTw8MikKLQotdm9pZCBfX2luaXQgc2V0dXBfSU9fQVBJQyh2b2lkKQotewotCi0JLyoKLQkgKiBjYWxsaW5nIGVuYWJsZV9JT19BUElDKCkgaXMgbW92ZWQgdG8gc2V0dXBfbG9jYWxfQVBJQyBmb3IgQlAKLQkgKi8KLQotCWlvX2FwaWNfaXJxcyA9IH5QSUNfSVJRUzsKLQotCWFwaWNfcHJpbnRrKEFQSUNfVkVSQk9TRSwgIkVOQUJMSU5HIElPLUFQSUMgSVJRc1xuIik7Ci0KLQlzeW5jX0FyYl9JRHMoKTsKLQlzZXR1cF9JT19BUElDX2lycXMoKTsKLQlpbml0X0lPX0FQSUNfdHJhcHMoKTsKLQljaGVja190aW1lcigpOwotfQotCi1zdHJ1Y3Qgc3lzZnNfaW9hcGljX2RhdGEgewotCXN0cnVjdCBzeXNfZGV2aWNlIGRldjsKLQlzdHJ1Y3QgSU9fQVBJQ19yb3V0ZV9lbnRyeSBlbnRyeVswXTsKLX07Ci1zdGF0aWMgc3RydWN0IHN5c2ZzX2lvYXBpY19kYXRhICogbXBfaW9hcGljX2RhdGFbTUFYX0lPX0FQSUNTXTsKLQotc3RhdGljIGludCBpb2FwaWNfc3VzcGVuZChzdHJ1Y3Qgc3lzX2RldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCi17Ci0Jc3RydWN0IElPX0FQSUNfcm91dGVfZW50cnkgKmVudHJ5OwotCXN0cnVjdCBzeXNmc19pb2FwaWNfZGF0YSAqZGF0YTsKLQlpbnQgaTsKLQotCWRhdGEgPSBjb250YWluZXJfb2YoZGV2LCBzdHJ1Y3Qgc3lzZnNfaW9hcGljX2RhdGEsIGRldik7Ci0JZW50cnkgPSBkYXRhLT5lbnRyeTsKLQlmb3IgKGkgPSAwOyBpIDwgbnJfaW9hcGljX3JlZ2lzdGVyc1tkZXYtPmlkXTsgaSArKywgZW50cnkgKysgKQotCQkqZW50cnkgPSBpb2FwaWNfcmVhZF9lbnRyeShkZXYtPmlkLCBpKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGlvYXBpY19yZXN1bWUoc3RydWN0IHN5c19kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgSU9fQVBJQ19yb3V0ZV9lbnRyeSAqZW50cnk7Ci0Jc3RydWN0IHN5c2ZzX2lvYXBpY19kYXRhICpkYXRhOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JdW5pb24gSU9fQVBJQ19yZWdfMDAgcmVnXzAwOwotCWludCBpOwotCi0JZGF0YSA9IGNvbnRhaW5lcl9vZihkZXYsIHN0cnVjdCBzeXNmc19pb2FwaWNfZGF0YSwgZGV2KTsKLQllbnRyeSA9IGRhdGEtPmVudHJ5OwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmlvYXBpY19sb2NrLCBmbGFncyk7Ci0JcmVnXzAwLnJhdyA9IGlvX2FwaWNfcmVhZChkZXYtPmlkLCAwKTsKLQlpZiAocmVnXzAwLmJpdHMuSUQgIT0gbXBfaW9hcGljc1tkZXYtPmlkXS5tcF9hcGljaWQpIHsKLQkJcmVnXzAwLmJpdHMuSUQgPSBtcF9pb2FwaWNzW2Rldi0+aWRdLm1wX2FwaWNpZDsKLQkJaW9fYXBpY193cml0ZShkZXYtPmlkLCAwLCByZWdfMDAucmF3KTsKLQl9Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9hcGljX2xvY2ssIGZsYWdzKTsKLQlmb3IgKGkgPSAwOyBpIDwgbnJfaW9hcGljX3JlZ2lzdGVyc1tkZXYtPmlkXTsgaSsrKQotCQlpb2FwaWNfd3JpdGVfZW50cnkoZGV2LT5pZCwgaSwgZW50cnlbaV0pOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3Qgc3lzZGV2X2NsYXNzIGlvYXBpY19zeXNkZXZfY2xhc3MgPSB7Ci0JLm5hbWUgPSAiaW9hcGljIiwKLQkuc3VzcGVuZCA9IGlvYXBpY19zdXNwZW5kLAotCS5yZXN1bWUgPSBpb2FwaWNfcmVzdW1lLAotfTsKLQotc3RhdGljIGludCBfX2luaXQgaW9hcGljX2luaXRfc3lzZnModm9pZCkKLXsKLQlzdHJ1Y3Qgc3lzX2RldmljZSAqIGRldjsKLQlpbnQgaSwgc2l6ZSwgZXJyb3I7Ci0KLQllcnJvciA9IHN5c2Rldl9jbGFzc19yZWdpc3RlcigmaW9hcGljX3N5c2Rldl9jbGFzcyk7Ci0JaWYgKGVycm9yKQotCQlyZXR1cm4gZXJyb3I7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgbnJfaW9hcGljczsgaSsrICkgewotCQlzaXplID0gc2l6ZW9mKHN0cnVjdCBzeXNfZGV2aWNlKSArIG5yX2lvYXBpY19yZWdpc3RlcnNbaV0KLQkJCSogc2l6ZW9mKHN0cnVjdCBJT19BUElDX3JvdXRlX2VudHJ5KTsKLQkJbXBfaW9hcGljX2RhdGFbaV0gPSBremFsbG9jKHNpemUsIEdGUF9LRVJORUwpOwotCQlpZiAoIW1wX2lvYXBpY19kYXRhW2ldKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgIkNhbid0IHN1c3BlbmQvcmVzdW1lIElPQVBJQyAlZFxuIiwgaSk7Ci0JCQljb250aW51ZTsKLQkJfQotCQlkZXYgPSAmbXBfaW9hcGljX2RhdGFbaV0tPmRldjsKLQkJZGV2LT5pZCA9IGk7Ci0JCWRldi0+Y2xzID0gJmlvYXBpY19zeXNkZXZfY2xhc3M7Ci0JCWVycm9yID0gc3lzZGV2X3JlZ2lzdGVyKGRldik7Ci0JCWlmIChlcnJvcikgewotCQkJa2ZyZWUobXBfaW9hcGljX2RhdGFbaV0pOwotCQkJbXBfaW9hcGljX2RhdGFbaV0gPSBOVUxMOwotCQkJcHJpbnRrKEtFUk5fRVJSICJDYW4ndCBzdXNwZW5kL3Jlc3VtZSBJT0FQSUMgJWRcbiIsIGkpOwotCQkJY29udGludWU7Ci0JCX0KLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotZGV2aWNlX2luaXRjYWxsKGlvYXBpY19pbml0X3N5c2ZzKTsKLQotLyoKLSAqIER5bmFtaWMgaXJxIGFsbG9jYXRlIGFuZCBkZWFsbG9jYXRpb24KLSAqLwotaW50IGNyZWF0ZV9pcnEodm9pZCkKLXsKLQkvKiBBbGxvY2F0ZSBhbiB1bnVzZWQgaXJxICovCi0JaW50IGlycTsKLQlpbnQgbmV3OwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlpcnEgPSAtRU5PU1BDOwotCXNwaW5fbG9ja19pcnFzYXZlKCZ2ZWN0b3JfbG9jaywgZmxhZ3MpOwotCWZvciAobmV3ID0gKE5SX0lSUVMgLSAxKTsgbmV3ID49IDA7IG5ldy0tKSB7Ci0JCWlmIChwbGF0Zm9ybV9sZWdhY3lfaXJxKG5ldykpCi0JCQljb250aW51ZTsKLQkJaWYgKGlycV9jZmdbbmV3XS52ZWN0b3IgIT0gMCkKLQkJCWNvbnRpbnVlOwotCQlpZiAoX19hc3NpZ25faXJxX3ZlY3RvcihuZXcsIFRBUkdFVF9DUFVTKSA9PSAwKQotCQkJaXJxID0gbmV3OwotCQlicmVhazsKLQl9Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdmVjdG9yX2xvY2ssIGZsYWdzKTsKLQotCWlmIChpcnEgPj0gMCkgewotCQlkeW5hbWljX2lycV9pbml0KGlycSk7Ci0JfQotCXJldHVybiBpcnE7Ci19Ci0KLXZvaWQgZGVzdHJveV9pcnEodW5zaWduZWQgaW50IGlycSkKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JZHluYW1pY19pcnFfY2xlYW51cChpcnEpOwotCi0jaWZkZWYgQ09ORklHX0lOVFJfUkVNQVAKLQlmcmVlX2lydGUoaXJxKTsKLSNlbmRpZgotCXNwaW5fbG9ja19pcnFzYXZlKCZ2ZWN0b3JfbG9jaywgZmxhZ3MpOwotCV9fY2xlYXJfaXJxX3ZlY3RvcihpcnEpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnZlY3Rvcl9sb2NrLCBmbGFncyk7Ci19Ci0KLS8qCi0gKiBNU0kgbWVzc2FnZSBjb21wb3NpdGlvbgotICovCi0jaWZkZWYgQ09ORklHX1BDSV9NU0kKLXN0YXRpYyBpbnQgbXNpX2NvbXBvc2VfbXNnKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCB1bnNpZ25lZCBpbnQgaXJxLCBzdHJ1Y3QgbXNpX21zZyAqbXNnKQotewotCXN0cnVjdCBpcnFfY2ZnICpjZmcgPSBpcnFfY2ZnICsgaXJxOwotCWludCBlcnI7Ci0JdW5zaWduZWQgZGVzdDsKLQljcHVtYXNrX3QgdG1wOwotCi0JdG1wID0gVEFSR0VUX0NQVVM7Ci0JZXJyID0gYXNzaWduX2lycV92ZWN0b3IoaXJxLCB0bXApOwotCWlmIChlcnIpCi0JCXJldHVybiBlcnI7Ci0KLQljcHVzX2FuZCh0bXAsIGNmZy0+ZG9tYWluLCB0bXApOwotCWRlc3QgPSBjcHVfbWFza190b19hcGljaWQodG1wKTsKLQotI2lmZGVmIENPTkZJR19JTlRSX1JFTUFQCi0JaWYgKGlycV9yZW1hcHBlZChpcnEpKSB7Ci0JCXN0cnVjdCBpcnRlIGlydGU7Ci0JCWludCBpcl9pbmRleDsKLQkJdTE2IHN1Yl9oYW5kbGU7Ci0KLQkJaXJfaW5kZXggPSBtYXBfaXJxX3RvX2lydGVfaGFuZGxlKGlycSwgJnN1Yl9oYW5kbGUpOwotCQlCVUdfT04oaXJfaW5kZXggPT0gLTEpOwotCi0JCW1lbXNldCAoJmlydGUsIDAsIHNpemVvZihpcnRlKSk7Ci0KLQkJaXJ0ZS5wcmVzZW50ID0gMTsKLQkJaXJ0ZS5kc3RfbW9kZSA9IElOVF9ERVNUX01PREU7Ci0JCWlydGUudHJpZ2dlcl9tb2RlID0gMDsgLyogZWRnZSAqLwotCQlpcnRlLmRsdnJ5X21vZGUgPSBJTlRfREVMSVZFUllfTU9ERTsKLQkJaXJ0ZS52ZWN0b3IgPSBjZmctPnZlY3RvcjsKLQkJaXJ0ZS5kZXN0X2lkID0gSVJURV9ERVNUKGRlc3QpOwotCi0JCW1vZGlmeV9pcnRlKGlycSwgJmlydGUpOwotCi0JCW1zZy0+YWRkcmVzc19oaSA9IE1TSV9BRERSX0JBU0VfSEk7Ci0JCW1zZy0+ZGF0YSA9IHN1Yl9oYW5kbGU7Ci0JCW1zZy0+YWRkcmVzc19sbyA9IE1TSV9BRERSX0JBU0VfTE8gfCBNU0lfQUREUl9JUl9FWFRfSU5UIHwKLQkJCQkgIE1TSV9BRERSX0lSX1NIViB8Ci0JCQkJICBNU0lfQUREUl9JUl9JTkRFWDEoaXJfaW5kZXgpIHwKLQkJCQkgIE1TSV9BRERSX0lSX0lOREVYMihpcl9pbmRleCk7Ci0JfSBlbHNlCi0jZW5kaWYKLQl7Ci0JCW1zZy0+YWRkcmVzc19oaSA9IE1TSV9BRERSX0JBU0VfSEk7Ci0JCW1zZy0+YWRkcmVzc19sbyA9Ci0JCQlNU0lfQUREUl9CQVNFX0xPIHwKLQkJCSgoSU5UX0RFU1RfTU9ERSA9PSAwKSA/Ci0JCQkJTVNJX0FERFJfREVTVF9NT0RFX1BIWVNJQ0FMOgotCQkJCU1TSV9BRERSX0RFU1RfTU9ERV9MT0dJQ0FMKSB8Ci0JCQkoKElOVF9ERUxJVkVSWV9NT0RFICE9IGRlc3RfTG93ZXN0UHJpbykgPwotCQkJCU1TSV9BRERSX1JFRElSRUNUSU9OX0NQVToKLQkJCQlNU0lfQUREUl9SRURJUkVDVElPTl9MT1dQUkkpIHwKLQkJCU1TSV9BRERSX0RFU1RfSUQoZGVzdCk7Ci0KLQkJbXNnLT5kYXRhID0KLQkJCU1TSV9EQVRBX1RSSUdHRVJfRURHRSB8Ci0JCQlNU0lfREFUQV9MRVZFTF9BU1NFUlQgfAotCQkJKChJTlRfREVMSVZFUllfTU9ERSAhPSBkZXN0X0xvd2VzdFByaW8pID8KLQkJCQlNU0lfREFUQV9ERUxJVkVSWV9GSVhFRDoKLQkJCQlNU0lfREFUQV9ERUxJVkVSWV9MT1dQUkkpIHwKLQkJCU1TSV9EQVRBX1ZFQ1RPUihjZmctPnZlY3Rvcik7Ci0JfQotCXJldHVybiBlcnI7Ci19Ci0KLSNpZmRlZiBDT05GSUdfU01QCi1zdGF0aWMgdm9pZCBzZXRfbXNpX2lycV9hZmZpbml0eSh1bnNpZ25lZCBpbnQgaXJxLCBjcHVtYXNrX3QgbWFzaykKLXsKLQlzdHJ1Y3QgaXJxX2NmZyAqY2ZnID0gaXJxX2NmZyArIGlycTsKLQlzdHJ1Y3QgbXNpX21zZyBtc2c7Ci0JdW5zaWduZWQgaW50IGRlc3Q7Ci0JY3B1bWFza190IHRtcDsKLQotCWNwdXNfYW5kKHRtcCwgbWFzaywgY3B1X29ubGluZV9tYXApOwotCWlmIChjcHVzX2VtcHR5KHRtcCkpCi0JCXJldHVybjsKLQotCWlmIChhc3NpZ25faXJxX3ZlY3RvcihpcnEsIG1hc2spKQotCQlyZXR1cm47Ci0KLQljcHVzX2FuZCh0bXAsIGNmZy0+ZG9tYWluLCBtYXNrKTsKLQlkZXN0ID0gY3B1X21hc2tfdG9fYXBpY2lkKHRtcCk7Ci0KLQlyZWFkX21zaV9tc2coaXJxLCAmbXNnKTsKLQotCW1zZy5kYXRhICY9IH5NU0lfREFUQV9WRUNUT1JfTUFTSzsKLQltc2cuZGF0YSB8PSBNU0lfREFUQV9WRUNUT1IoY2ZnLT52ZWN0b3IpOwotCW1zZy5hZGRyZXNzX2xvICY9IH5NU0lfQUREUl9ERVNUX0lEX01BU0s7Ci0JbXNnLmFkZHJlc3NfbG8gfD0gTVNJX0FERFJfREVTVF9JRChkZXN0KTsKLQotCXdyaXRlX21zaV9tc2coaXJxLCAmbXNnKTsKLQlpcnFfZGVzY1tpcnFdLmFmZmluaXR5ID0gbWFzazsKLX0KLQotI2lmZGVmIENPTkZJR19JTlRSX1JFTUFQCi0vKgotICogTWlncmF0ZSB0aGUgTVNJIGlycSB0byBhbm90aGVyIGNwdW1hc2suIFRoaXMgbWlncmF0aW9uIGlzCi0gKiBkb25lIGluIHRoZSBwcm9jZXNzIGNvbnRleHQgdXNpbmcgaW50ZXJydXB0LXJlbWFwcGluZyBoYXJkd2FyZS4KLSAqLwotc3RhdGljIHZvaWQgaXJfc2V0X21zaV9pcnFfYWZmaW5pdHkodW5zaWduZWQgaW50IGlycSwgY3B1bWFza190IG1hc2spCi17Ci0Jc3RydWN0IGlycV9jZmcgKmNmZyA9IGlycV9jZmcgKyBpcnE7Ci0JdW5zaWduZWQgaW50IGRlc3Q7Ci0JY3B1bWFza190IHRtcCwgY2xlYW51cF9tYXNrOwotCXN0cnVjdCBpcnRlIGlydGU7Ci0KLQljcHVzX2FuZCh0bXAsIG1hc2ssIGNwdV9vbmxpbmVfbWFwKTsKLQlpZiAoY3B1c19lbXB0eSh0bXApKQotCQlyZXR1cm47Ci0KLQlpZiAoZ2V0X2lydGUoaXJxLCAmaXJ0ZSkpCi0JCXJldHVybjsKLQotCWlmIChhc3NpZ25faXJxX3ZlY3RvcihpcnEsIG1hc2spKQotCQlyZXR1cm47Ci0KLQljcHVzX2FuZCh0bXAsIGNmZy0+ZG9tYWluLCBtYXNrKTsKLQlkZXN0ID0gY3B1X21hc2tfdG9fYXBpY2lkKHRtcCk7Ci0KLQlpcnRlLnZlY3RvciA9IGNmZy0+dmVjdG9yOwotCWlydGUuZGVzdF9pZCA9IElSVEVfREVTVChkZXN0KTsKLQotCS8qCi0JICogYXRvbWljYWxseSB1cGRhdGUgdGhlIElSVEUgd2l0aCB0aGUgbmV3IGRlc3RpbmF0aW9uIGFuZCB2ZWN0b3IuCi0JICovCi0JbW9kaWZ5X2lydGUoaXJxLCAmaXJ0ZSk7Ci0KLQkvKgotCSAqIEFmdGVyIHRoaXMgcG9pbnQsIGFsbCB0aGUgaW50ZXJydXB0cyB3aWxsIHN0YXJ0IGFycml2aW5nCi0JICogYXQgdGhlIG5ldyBkZXN0aW5hdGlvbi4gU28sIHRpbWUgdG8gY2xlYW51cCB0aGUgcHJldmlvdXMKLQkgKiB2ZWN0b3IgYWxsb2NhdGlvbi4KLQkgKi8KLQlpZiAoY2ZnLT5tb3ZlX2luX3Byb2dyZXNzKSB7Ci0JCWNwdXNfYW5kKGNsZWFudXBfbWFzaywgY2ZnLT5vbGRfZG9tYWluLCBjcHVfb25saW5lX21hcCk7Ci0JCWNmZy0+bW92ZV9jbGVhbnVwX2NvdW50ID0gY3B1c193ZWlnaHQoY2xlYW51cF9tYXNrKTsKLQkJc2VuZF9JUElfbWFzayhjbGVhbnVwX21hc2ssIElSUV9NT1ZFX0NMRUFOVVBfVkVDVE9SKTsKLQkJY2ZnLT5tb3ZlX2luX3Byb2dyZXNzID0gMDsKLQl9Ci0KLQlpcnFfZGVzY1tpcnFdLmFmZmluaXR5ID0gbWFzazsKLX0KLSNlbmRpZgotI2VuZGlmIC8qIENPTkZJR19TTVAgKi8KLQotLyoKLSAqIElSUSBDaGlwIGZvciBNU0kgUENJL1BDSS1YL1BDSS1FeHByZXNzIERldmljZXMsCi0gKiB3aGljaCBpbXBsZW1lbnQgdGhlIE1TSSBvciBNU0ktWCBDYXBhYmlsaXR5IFN0cnVjdHVyZS4KLSAqLwotc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBtc2lfY2hpcCA9IHsKLQkubmFtZQkJPSAiUENJLU1TSSIsCi0JLnVubWFzawkJPSB1bm1hc2tfbXNpX2lycSwKLQkubWFzawkJPSBtYXNrX21zaV9pcnEsCi0JLmFjawkJPSBhY2tfYXBpY19lZGdlLAotI2lmZGVmIENPTkZJR19TTVAKLQkuc2V0X2FmZmluaXR5CT0gc2V0X21zaV9pcnFfYWZmaW5pdHksCi0jZW5kaWYKLQkucmV0cmlnZ2VyCT0gaW9hcGljX3JldHJpZ2dlcl9pcnEsCi19OwotCi0jaWZkZWYgQ09ORklHX0lOVFJfUkVNQVAKLXN0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgbXNpX2lyX2NoaXAgPSB7Ci0JLm5hbWUJCT0gIklSLVBDSS1NU0kiLAotCS51bm1hc2sJCT0gdW5tYXNrX21zaV9pcnEsCi0JLm1hc2sJCT0gbWFza19tc2lfaXJxLAotCS5hY2sJCT0gYWNrX3gyYXBpY19lZGdlLAotI2lmZGVmIENPTkZJR19TTVAKLQkuc2V0X2FmZmluaXR5CT0gaXJfc2V0X21zaV9pcnFfYWZmaW5pdHksCi0jZW5kaWYKLQkucmV0cmlnZ2VyCT0gaW9hcGljX3JldHJpZ2dlcl9pcnEsCi19OwotCi0vKgotICogTWFwIHRoZSBQQ0kgZGV2IHRvIHRoZSBjb3JyZXNwb25kaW5nIHJlbWFwcGluZyBoYXJkd2FyZSB1bml0Ci0gKiBhbmQgYWxsb2NhdGUgJ252ZWMnIGNvbnNlY3V0aXZlIGludGVycnVwdC1yZW1hcHBpbmcgdGFibGUgZW50cmllcwotICogaW4gaXQuCi0gKi8KLXN0YXRpYyBpbnQgbXNpX2FsbG9jX2lydGUoc3RydWN0IHBjaV9kZXYgKmRldiwgaW50IGlycSwgaW50IG52ZWMpCi17Ci0Jc3RydWN0IGludGVsX2lvbW11ICppb21tdTsKLQlpbnQgaW5kZXg7Ci0KLQlpb21tdSA9IG1hcF9kZXZfdG9faXIoZGV2KTsKLQlpZiAoIWlvbW11KSB7Ci0JCXByaW50ayhLRVJOX0VSUgotCQkgICAgICAgIlVuYWJsZSB0byBtYXAgUENJICVzIHRvIGlvbW11XG4iLCBwY2lfbmFtZShkZXYpKTsKLQkJcmV0dXJuIC1FTk9FTlQ7Ci0JfQotCi0JaW5kZXggPSBhbGxvY19pcnRlKGlvbW11LCBpcnEsIG52ZWMpOwotCWlmIChpbmRleCA8IDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSCi0JCSAgICAgICAiVW5hYmxlIHRvIGFsbG9jYXRlICVkIElSVEUgZm9yIFBDSSAlc1xuIiwgbnZlYywKLQkJICAgICAgICBwY2lfbmFtZShkZXYpKTsKLQkJcmV0dXJuIC1FTk9TUEM7Ci0JfQotCXJldHVybiBpbmRleDsKLX0KLSNlbmRpZgotCi1zdGF0aWMgaW50IHNldHVwX21zaV9pcnEoc3RydWN0IHBjaV9kZXYgKmRldiwgc3RydWN0IG1zaV9kZXNjICpkZXNjLCBpbnQgaXJxKQotewotCWludCByZXQ7Ci0Jc3RydWN0IG1zaV9tc2cgbXNnOwotCi0JcmV0ID0gbXNpX2NvbXBvc2VfbXNnKGRldiwgaXJxLCAmbXNnKTsKLQlpZiAocmV0IDwgMCkKLQkJcmV0dXJuIHJldDsKLQotCXNldF9pcnFfbXNpKGlycSwgZGVzYyk7Ci0Jd3JpdGVfbXNpX21zZyhpcnEsICZtc2cpOwotCi0jaWZkZWYgQ09ORklHX0lOVFJfUkVNQVAKLQlpZiAoaXJxX3JlbWFwcGVkKGlycSkpIHsKLQkJc3RydWN0IGlycV9kZXNjICpkZXNjID0gaXJxX2Rlc2MgKyBpcnE7Ci0JCS8qCi0JCSAqIGlycSBtaWdyYXRpb24gaW4gcHJvY2VzcyBjb250ZXh0Ci0JCSAqLwotCQlkZXNjLT5zdGF0dXMgfD0gSVJRX01PVkVfUENOVFhUOwotCQlzZXRfaXJxX2NoaXBfYW5kX2hhbmRsZXJfbmFtZShpcnEsICZtc2lfaXJfY2hpcCwgaGFuZGxlX2VkZ2VfaXJxLCAiZWRnZSIpOwotCX0gZWxzZQotI2VuZGlmCi0JCXNldF9pcnFfY2hpcF9hbmRfaGFuZGxlcl9uYW1lKGlycSwgJm1zaV9jaGlwLCBoYW5kbGVfZWRnZV9pcnEsICJlZGdlIik7Ci0KLQlyZXR1cm4gMDsKLX0KLQotaW50IGFyY2hfc2V0dXBfbXNpX2lycShzdHJ1Y3QgcGNpX2RldiAqZGV2LCBzdHJ1Y3QgbXNpX2Rlc2MgKmRlc2MpCi17Ci0JaW50IGlycSwgcmV0OwotCi0JaXJxID0gY3JlYXRlX2lycSgpOwotCWlmIChpcnEgPCAwKQotCQlyZXR1cm4gaXJxOwotCi0jaWZkZWYgQ09ORklHX0lOVFJfUkVNQVAKLQlpZiAoIWludHJfcmVtYXBwaW5nX2VuYWJsZWQpCi0JCWdvdG8gbm9faXI7Ci0KLQlyZXQgPSBtc2lfYWxsb2NfaXJ0ZShkZXYsIGlycSwgMSk7Ci0JaWYgKHJldCA8IDApCi0JCWdvdG8gZXJyb3I7Ci1ub19pcjoKLSNlbmRpZgotCXJldCA9IHNldHVwX21zaV9pcnEoZGV2LCBkZXNjLCBpcnEpOwotCWlmIChyZXQgPCAwKSB7Ci0JCWRlc3Ryb3lfaXJxKGlycSk7Ci0JCXJldHVybiByZXQ7Ci0JfQotCXJldHVybiAwOwotCi0jaWZkZWYgQ09ORklHX0lOVFJfUkVNQVAKLWVycm9yOgotCWRlc3Ryb3lfaXJxKGlycSk7Ci0JcmV0dXJuIHJldDsKLSNlbmRpZgotfQotCi1pbnQgYXJjaF9zZXR1cF9tc2lfaXJxcyhzdHJ1Y3QgcGNpX2RldiAqZGV2LCBpbnQgbnZlYywgaW50IHR5cGUpCi17Ci0JaW50IGlycSwgcmV0LCBzdWJfaGFuZGxlOwotCXN0cnVjdCBtc2lfZGVzYyAqZGVzYzsKLSNpZmRlZiBDT05GSUdfSU5UUl9SRU1BUAotCXN0cnVjdCBpbnRlbF9pb21tdSAqaW9tbXUgPSAwOwotCWludCBpbmRleCA9IDA7Ci0jZW5kaWYKLQotCXN1Yl9oYW5kbGUgPSAwOwotCWxpc3RfZm9yX2VhY2hfZW50cnkoZGVzYywgJmRldi0+bXNpX2xpc3QsIGxpc3QpIHsKLQkJaXJxID0gY3JlYXRlX2lycSgpOwotCQlpZiAoaXJxIDwgMCkKLQkJCXJldHVybiBpcnE7Ci0jaWZkZWYgQ09ORklHX0lOVFJfUkVNQVAKLQkJaWYgKCFpbnRyX3JlbWFwcGluZ19lbmFibGVkKQotCQkJZ290byBub19pcjsKLQotCQlpZiAoIXN1Yl9oYW5kbGUpIHsKLQkJCS8qCi0JCQkgKiBhbGxvY2F0ZSB0aGUgY29uc2VjdXRpdmUgYmxvY2sgb2YgSVJURSdzCi0JCQkgKiBmb3IgJ252ZWMnCi0JCQkgKi8KLQkJCWluZGV4ID0gbXNpX2FsbG9jX2lydGUoZGV2LCBpcnEsIG52ZWMpOwotCQkJaWYgKGluZGV4IDwgMCkgewotCQkJCXJldCA9IGluZGV4OwotCQkJCWdvdG8gZXJyb3I7Ci0JCQl9Ci0JCX0gZWxzZSB7Ci0JCQlpb21tdSA9IG1hcF9kZXZfdG9faXIoZGV2KTsKLQkJCWlmICghaW9tbXUpIHsKLQkJCQlyZXQgPSAtRU5PRU5UOwotCQkJCWdvdG8gZXJyb3I7Ci0JCQl9Ci0JCQkvKgotCQkJICogc2V0dXAgdGhlIG1hcHBpbmcgYmV0d2VlbiB0aGUgaXJxIGFuZCB0aGUgSVJURQotCQkJICogYmFzZSBpbmRleCwgdGhlIHN1Yl9oYW5kbGUgcG9pbnRpbmcgdG8gdGhlCi0JCQkgKiBhcHByb3ByaWF0ZSBpbnRlcnJ1cHQgcmVtYXAgdGFibGUgZW50cnkuCi0JCQkgKi8KLQkJCXNldF9pcnRlX2lycShpcnEsIGlvbW11LCBpbmRleCwgc3ViX2hhbmRsZSk7Ci0JCX0KLW5vX2lyOgotI2VuZGlmCi0JCXJldCA9IHNldHVwX21zaV9pcnEoZGV2LCBkZXNjLCBpcnEpOwotCQlpZiAocmV0IDwgMCkKLQkJCWdvdG8gZXJyb3I7Ci0JCXN1Yl9oYW5kbGUrKzsKLQl9Ci0JcmV0dXJuIDA7Ci0KLWVycm9yOgotCWRlc3Ryb3lfaXJxKGlycSk7Ci0JcmV0dXJuIHJldDsKLX0KLQotdm9pZCBhcmNoX3RlYXJkb3duX21zaV9pcnEodW5zaWduZWQgaW50IGlycSkKLXsKLQlkZXN0cm95X2lycShpcnEpOwotfQotCi0jaWZkZWYgQ09ORklHX0RNQVIKLSNpZmRlZiBDT05GSUdfU01QCi1zdGF0aWMgdm9pZCBkbWFyX21zaV9zZXRfYWZmaW5pdHkodW5zaWduZWQgaW50IGlycSwgY3B1bWFza190IG1hc2spCi17Ci0Jc3RydWN0IGlycV9jZmcgKmNmZyA9IGlycV9jZmcgKyBpcnE7Ci0Jc3RydWN0IG1zaV9tc2cgbXNnOwotCXVuc2lnbmVkIGludCBkZXN0OwotCWNwdW1hc2tfdCB0bXA7Ci0KLQljcHVzX2FuZCh0bXAsIG1hc2ssIGNwdV9vbmxpbmVfbWFwKTsKLQlpZiAoY3B1c19lbXB0eSh0bXApKQotCQlyZXR1cm47Ci0KLQlpZiAoYXNzaWduX2lycV92ZWN0b3IoaXJxLCBtYXNrKSkKLQkJcmV0dXJuOwotCi0JY3B1c19hbmQodG1wLCBjZmctPmRvbWFpbiwgbWFzayk7Ci0JZGVzdCA9IGNwdV9tYXNrX3RvX2FwaWNpZCh0bXApOwotCi0JZG1hcl9tc2lfcmVhZChpcnEsICZtc2cpOwotCi0JbXNnLmRhdGEgJj0gfk1TSV9EQVRBX1ZFQ1RPUl9NQVNLOwotCW1zZy5kYXRhIHw9IE1TSV9EQVRBX1ZFQ1RPUihjZmctPnZlY3Rvcik7Ci0JbXNnLmFkZHJlc3NfbG8gJj0gfk1TSV9BRERSX0RFU1RfSURfTUFTSzsKLQltc2cuYWRkcmVzc19sbyB8PSBNU0lfQUREUl9ERVNUX0lEKGRlc3QpOwotCi0JZG1hcl9tc2lfd3JpdGUoaXJxLCAmbXNnKTsKLQlpcnFfZGVzY1tpcnFdLmFmZmluaXR5ID0gbWFzazsKLX0KLSNlbmRpZiAvKiBDT05GSUdfU01QICovCi0KLXN0cnVjdCBpcnFfY2hpcCBkbWFyX21zaV90eXBlID0gewotCS5uYW1lID0gIkRNQVJfTVNJIiwKLQkudW5tYXNrID0gZG1hcl9tc2lfdW5tYXNrLAotCS5tYXNrID0gZG1hcl9tc2lfbWFzaywKLQkuYWNrID0gYWNrX2FwaWNfZWRnZSwKLSNpZmRlZiBDT05GSUdfU01QCi0JLnNldF9hZmZpbml0eSA9IGRtYXJfbXNpX3NldF9hZmZpbml0eSwKLSNlbmRpZgotCS5yZXRyaWdnZXIgPSBpb2FwaWNfcmV0cmlnZ2VyX2lycSwKLX07Ci0KLWludCBhcmNoX3NldHVwX2RtYXJfbXNpKHVuc2lnbmVkIGludCBpcnEpCi17Ci0JaW50IHJldDsKLQlzdHJ1Y3QgbXNpX21zZyBtc2c7Ci0KLQlyZXQgPSBtc2lfY29tcG9zZV9tc2coTlVMTCwgaXJxLCAmbXNnKTsKLQlpZiAocmV0IDwgMCkKLQkJcmV0dXJuIHJldDsKLQlkbWFyX21zaV93cml0ZShpcnEsICZtc2cpOwotCXNldF9pcnFfY2hpcF9hbmRfaGFuZGxlcl9uYW1lKGlycSwgJmRtYXJfbXNpX3R5cGUsIGhhbmRsZV9lZGdlX2lycSwKLQkJImVkZ2UiKTsKLQlyZXR1cm4gMDsKLX0KLSNlbmRpZgotCi0jZW5kaWYgLyogQ09ORklHX1BDSV9NU0kgKi8KLS8qCi0gKiBIeXBlcnRyYW5zcG9ydCBpbnRlcnJ1cHQgc3VwcG9ydAotICovCi0jaWZkZWYgQ09ORklHX0hUX0lSUQotCi0jaWZkZWYgQ09ORklHX1NNUAotCi1zdGF0aWMgdm9pZCB0YXJnZXRfaHRfaXJxKHVuc2lnbmVkIGludCBpcnEsIHVuc2lnbmVkIGludCBkZXN0LCB1OCB2ZWN0b3IpCi17Ci0Jc3RydWN0IGh0X2lycV9tc2cgbXNnOwotCWZldGNoX2h0X2lycV9tc2coaXJxLCAmbXNnKTsKLQotCW1zZy5hZGRyZXNzX2xvICY9IH4oSFRfSVJRX0xPV19WRUNUT1JfTUFTSyB8IEhUX0lSUV9MT1dfREVTVF9JRF9NQVNLKTsKLQltc2cuYWRkcmVzc19oaSAmPSB+KEhUX0lSUV9ISUdIX0RFU1RfSURfTUFTSyk7Ci0KLQltc2cuYWRkcmVzc19sbyB8PSBIVF9JUlFfTE9XX1ZFQ1RPUih2ZWN0b3IpIHwgSFRfSVJRX0xPV19ERVNUX0lEKGRlc3QpOwotCW1zZy5hZGRyZXNzX2hpIHw9IEhUX0lSUV9ISUdIX0RFU1RfSUQoZGVzdCk7Ci0KLQl3cml0ZV9odF9pcnFfbXNnKGlycSwgJm1zZyk7Ci19Ci0KLXN0YXRpYyB2b2lkIHNldF9odF9pcnFfYWZmaW5pdHkodW5zaWduZWQgaW50IGlycSwgY3B1bWFza190IG1hc2spCi17Ci0Jc3RydWN0IGlycV9jZmcgKmNmZyA9IGlycV9jZmcgKyBpcnE7Ci0JdW5zaWduZWQgaW50IGRlc3Q7Ci0JY3B1bWFza190IHRtcDsKLQotCWNwdXNfYW5kKHRtcCwgbWFzaywgY3B1X29ubGluZV9tYXApOwotCWlmIChjcHVzX2VtcHR5KHRtcCkpCi0JCXJldHVybjsKLQotCWlmIChhc3NpZ25faXJxX3ZlY3RvcihpcnEsIG1hc2spKQotCQlyZXR1cm47Ci0KLQljcHVzX2FuZCh0bXAsIGNmZy0+ZG9tYWluLCBtYXNrKTsKLQlkZXN0ID0gY3B1X21hc2tfdG9fYXBpY2lkKHRtcCk7Ci0KLQl0YXJnZXRfaHRfaXJxKGlycSwgZGVzdCwgY2ZnLT52ZWN0b3IpOwotCWlycV9kZXNjW2lycV0uYWZmaW5pdHkgPSBtYXNrOwotfQotI2VuZGlmCi0KLXN0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgaHRfaXJxX2NoaXAgPSB7Ci0JLm5hbWUJCT0gIlBDSS1IVCIsCi0JLm1hc2sJCT0gbWFza19odF9pcnEsCi0JLnVubWFzawkJPSB1bm1hc2tfaHRfaXJxLAotCS5hY2sJCT0gYWNrX2FwaWNfZWRnZSwKLSNpZmRlZiBDT05GSUdfU01QCi0JLnNldF9hZmZpbml0eQk9IHNldF9odF9pcnFfYWZmaW5pdHksCi0jZW5kaWYKLQkucmV0cmlnZ2VyCT0gaW9hcGljX3JldHJpZ2dlcl9pcnEsCi19OwotCi1pbnQgYXJjaF9zZXR1cF9odF9pcnEodW5zaWduZWQgaW50IGlycSwgc3RydWN0IHBjaV9kZXYgKmRldikKLXsKLQlzdHJ1Y3QgaXJxX2NmZyAqY2ZnID0gaXJxX2NmZyArIGlycTsKLQlpbnQgZXJyOwotCWNwdW1hc2tfdCB0bXA7Ci0KLQl0bXAgPSBUQVJHRVRfQ1BVUzsKLQllcnIgPSBhc3NpZ25faXJxX3ZlY3RvcihpcnEsIHRtcCk7Ci0JaWYgKCFlcnIpIHsKLQkJc3RydWN0IGh0X2lycV9tc2cgbXNnOwotCQl1bnNpZ25lZCBkZXN0OwotCi0JCWNwdXNfYW5kKHRtcCwgY2ZnLT5kb21haW4sIHRtcCk7Ci0JCWRlc3QgPSBjcHVfbWFza190b19hcGljaWQodG1wKTsKLQotCQltc2cuYWRkcmVzc19oaSA9IEhUX0lSUV9ISUdIX0RFU1RfSUQoZGVzdCk7Ci0KLQkJbXNnLmFkZHJlc3NfbG8gPQotCQkJSFRfSVJRX0xPV19CQVNFIHwKLQkJCUhUX0lSUV9MT1dfREVTVF9JRChkZXN0KSB8Ci0JCQlIVF9JUlFfTE9XX1ZFQ1RPUihjZmctPnZlY3RvcikgfAotCQkJKChJTlRfREVTVF9NT0RFID09IDApID8KLQkJCQlIVF9JUlFfTE9XX0RNX1BIWVNJQ0FMIDoKLQkJCQlIVF9JUlFfTE9XX0RNX0xPR0lDQUwpIHwKLQkJCUhUX0lSUV9MT1dfUlFFT0lfRURHRSB8Ci0JCQkoKElOVF9ERUxJVkVSWV9NT0RFICE9IGRlc3RfTG93ZXN0UHJpbykgPwotCQkJCUhUX0lSUV9MT1dfTVRfRklYRUQgOgotCQkJCUhUX0lSUV9MT1dfTVRfQVJCSVRSQVRFRCkgfAotCQkJSFRfSVJRX0xPV19JUlFfTUFTS0VEOwotCi0JCXdyaXRlX2h0X2lycV9tc2coaXJxLCAmbXNnKTsKLQotCQlzZXRfaXJxX2NoaXBfYW5kX2hhbmRsZXJfbmFtZShpcnEsICZodF9pcnFfY2hpcCwKLQkJCQkJICAgICAgaGFuZGxlX2VkZ2VfaXJxLCAiZWRnZSIpOwotCX0KLQlyZXR1cm4gZXJyOwotfQotI2VuZGlmIC8qIENPTkZJR19IVF9JUlEgKi8KLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgQUNQSS1iYXNlZCBJT0FQSUMgQ29uZmlndXJhdGlvbgotICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotI2lmZGVmIENPTkZJR19BQ1BJCi0KLSNkZWZpbmUgSU9fQVBJQ19NQVhfSUQJCTB4RkUKLQotaW50IF9faW5pdCBpb19hcGljX2dldF9yZWRpcl9lbnRyaWVzIChpbnQgaW9hcGljKQotewotCXVuaW9uIElPX0FQSUNfcmVnXzAxCXJlZ18wMTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmlvYXBpY19sb2NrLCBmbGFncyk7Ci0JcmVnXzAxLnJhdyA9IGlvX2FwaWNfcmVhZChpb2FwaWMsIDEpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYXBpY19sb2NrLCBmbGFncyk7Ci0KLQlyZXR1cm4gcmVnXzAxLmJpdHMuZW50cmllczsKLX0KLQotCi1pbnQgaW9fYXBpY19zZXRfcGNpX3JvdXRpbmcgKGludCBpb2FwaWMsIGludCBwaW4sIGludCBpcnEsIGludCB0cmlnZ2VyaW5nLCBpbnQgcG9sYXJpdHkpCi17Ci0JaWYgKCFJT19BUElDX0lSUShpcnEpKSB7Ci0JCWFwaWNfcHJpbnRrKEFQSUNfUVVJRVQsS0VSTl9FUlIgIklPQVBJQ1slZF06IEludmFsaWQgcmVmZXJlbmNlIHRvIElSUSAwXG4iLAotCQkJaW9hcGljKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JLyoKLQkgKiBJUlFzIDwgMTYgYXJlIGFscmVhZHkgaW4gdGhlIGlycV8yX3BpbltdIG1hcAotCSAqLwotCWlmIChpcnEgPj0gMTYpCi0JCWFkZF9waW5fdG9faXJxKGlycSwgaW9hcGljLCBwaW4pOwotCi0Jc2V0dXBfSU9fQVBJQ19pcnEoaW9hcGljLCBwaW4sIGlycSwgdHJpZ2dlcmluZywgcG9sYXJpdHkpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLQotaW50IGFjcGlfZ2V0X292ZXJyaWRlX2lycShpbnQgYnVzX2lycSwgaW50ICp0cmlnZ2VyLCBpbnQgKnBvbGFyaXR5KQotewotCWludCBpOwotCi0JaWYgKHNraXBfaW9hcGljX3NldHVwKQotCQlyZXR1cm4gLTE7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgbXBfaXJxX2VudHJpZXM7IGkrKykKLQkJaWYgKG1wX2lycXNbaV0ubXBfaXJxdHlwZSA9PSBtcF9JTlQgJiYKLQkJICAgIG1wX2lycXNbaV0ubXBfc3JjYnVzaXJxID09IGJ1c19pcnEpCi0JCQlicmVhazsKLQlpZiAoaSA+PSBtcF9pcnFfZW50cmllcykKLQkJcmV0dXJuIC0xOwotCi0JKnRyaWdnZXIgPSBpcnFfdHJpZ2dlcihpKTsKLQkqcG9sYXJpdHkgPSBpcnFfcG9sYXJpdHkoaSk7Ci0JcmV0dXJuIDA7Ci19Ci0KLSNlbmRpZiAvKiBDT05GSUdfQUNQSSAqLwotCi0vKgotICogVGhpcyBmdW5jdGlvbiBjdXJyZW50bHkgaXMgb25seSBhIGhlbHBlciBmb3IgdGhlIGkzODYgc21wIGJvb3QgcHJvY2VzcyB3aGVyZQotICogd2UgbmVlZCB0byByZXByb2dyYW0gdGhlIGlvcmVkdGJscyB0byBjYXRlciBmb3IgdGhlIGNwdXMgd2hpY2ggaGF2ZSBjb21lIG9ubGluZQotICogc28gbWFzayBpbiBhbGwgY2FzZXMgc2hvdWxkIHNpbXBseSBiZSBUQVJHRVRfQ1BVUwotICovCi0jaWZkZWYgQ09ORklHX1NNUAotdm9pZCBfX2luaXQgc2V0dXBfaW9hcGljX2Rlc3Qodm9pZCkKLXsKLQlpbnQgcGluLCBpb2FwaWMsIGlycSwgaXJxX2VudHJ5OwotCi0JaWYgKHNraXBfaW9hcGljX3NldHVwID09IDEpCi0JCXJldHVybjsKLQotCWZvciAoaW9hcGljID0gMDsgaW9hcGljIDwgbnJfaW9hcGljczsgaW9hcGljKyspIHsKLQkJZm9yIChwaW4gPSAwOyBwaW4gPCBucl9pb2FwaWNfcmVnaXN0ZXJzW2lvYXBpY107IHBpbisrKSB7Ci0JCQlpcnFfZW50cnkgPSBmaW5kX2lycV9lbnRyeShpb2FwaWMsIHBpbiwgbXBfSU5UKTsKLQkJCWlmIChpcnFfZW50cnkgPT0gLTEpCi0JCQkJY29udGludWU7Ci0JCQlpcnEgPSBwaW5fMl9pcnEoaXJxX2VudHJ5LCBpb2FwaWMsIHBpbik7Ci0KLQkJCS8qIHNldHVwX0lPX0FQSUNfaXJxcyBjb3VsZCBmYWlsIHRvIGdldCB2ZWN0b3IgZm9yIHNvbWUgZGV2aWNlCi0JCQkgKiB3aGVuIHlvdSBoYXZlIHRvbyBtYW55IGRldmljZXMsIGJlY2F1c2UgYXQgdGhhdCB0aW1lIG9ubHkgYm9vdAotCQkJICogY3B1IGlzIG9ubGluZS4KLQkJCSAqLwotCQkJaWYgKCFpcnFfY2ZnW2lycV0udmVjdG9yKQotCQkJCXNldHVwX0lPX0FQSUNfaXJxKGlvYXBpYywgcGluLCBpcnEsCi0JCQkJCQkgIGlycV90cmlnZ2VyKGlycV9lbnRyeSksCi0JCQkJCQkgIGlycV9wb2xhcml0eShpcnFfZW50cnkpKTsKLSNpZmRlZiBDT05GSUdfSU5UUl9SRU1BUAotCQkJZWxzZSBpZiAoaW50cl9yZW1hcHBpbmdfZW5hYmxlZCkKLQkJCQlzZXRfaXJfaW9hcGljX2FmZmluaXR5X2lycShpcnEsIFRBUkdFVF9DUFVTKTsKLSNlbmRpZgotCQkJZWxzZQotCQkJCXNldF9pb2FwaWNfYWZmaW5pdHlfaXJxKGlycSwgVEFSR0VUX0NQVVMpOwotCQl9Ci0KLQl9Ci19Ci0jZW5kaWYKLQotI2RlZmluZSBJT0FQSUNfUkVTT1VSQ0VfTkFNRV9TSVpFIDExCi0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgKmlvYXBpY19yZXNvdXJjZXM7Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgKiBfX2luaXQgaW9hcGljX3NldHVwX3Jlc291cmNlcyh2b2lkKQotewotCXVuc2lnbmVkIGxvbmcgbjsKLQlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKLQljaGFyICptZW07Ci0JaW50IGk7Ci0KLQlpZiAobnJfaW9hcGljcyA8PSAwKQotCQlyZXR1cm4gTlVMTDsKLQotCW4gPSBJT0FQSUNfUkVTT1VSQ0VfTkFNRV9TSVpFICsgc2l6ZW9mKHN0cnVjdCByZXNvdXJjZSk7Ci0JbiAqPSBucl9pb2FwaWNzOwotCi0JbWVtID0gYWxsb2NfYm9vdG1lbShuKTsKLQlyZXMgPSAodm9pZCAqKW1lbTsKLQotCWlmIChtZW0gIT0gTlVMTCkgewotCQltZW0gKz0gc2l6ZW9mKHN0cnVjdCByZXNvdXJjZSkgKiBucl9pb2FwaWNzOwotCi0JCWZvciAoaSA9IDA7IGkgPCBucl9pb2FwaWNzOyBpKyspIHsKLQkJCXJlc1tpXS5uYW1lID0gbWVtOwotCQkJcmVzW2ldLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0gfCBJT1JFU09VUkNFX0JVU1k7Ci0JCQlzcHJpbnRmKG1lbSwgICJJT0FQSUMgJXUiLCBpKTsKLQkJCW1lbSArPSBJT0FQSUNfUkVTT1VSQ0VfTkFNRV9TSVpFOwotCQl9Ci0JfQotCi0JaW9hcGljX3Jlc291cmNlcyA9IHJlczsKLQotCXJldHVybiByZXM7Ci19Ci0KLXZvaWQgX19pbml0IGlvYXBpY19pbml0X21hcHBpbmdzKHZvaWQpCi17Ci0JdW5zaWduZWQgbG9uZyBpb2FwaWNfcGh5cywgaWR4ID0gRklYX0lPX0FQSUNfQkFTRV8wOwotCXN0cnVjdCByZXNvdXJjZSAqaW9hcGljX3JlczsKLQlpbnQgaTsKLQotCWlvYXBpY19yZXMgPSBpb2FwaWNfc2V0dXBfcmVzb3VyY2VzKCk7Ci0JZm9yIChpID0gMDsgaSA8IG5yX2lvYXBpY3M7IGkrKykgewotCQlpZiAoc21wX2ZvdW5kX2NvbmZpZykgewotCQkJaW9hcGljX3BoeXMgPSBtcF9pb2FwaWNzW2ldLm1wX2FwaWNhZGRyOwotCQl9IGVsc2UgewotCQkJaW9hcGljX3BoeXMgPSAodW5zaWduZWQgbG9uZykKLQkJCQlhbGxvY19ib290bWVtX3BhZ2VzKFBBR0VfU0laRSk7Ci0JCQlpb2FwaWNfcGh5cyA9IF9fcGEoaW9hcGljX3BoeXMpOwotCQl9Ci0JCXNldF9maXhtYXBfbm9jYWNoZShpZHgsIGlvYXBpY19waHlzKTsKLQkJYXBpY19wcmludGsoQVBJQ19WRVJCT1NFLAotCQkJICAgICJtYXBwZWQgSU9BUElDIHRvICUwMTZseCAoJTAxNmx4KVxuIiwKLQkJCSAgICBfX2ZpeF90b192aXJ0KGlkeCksIGlvYXBpY19waHlzKTsKLQkJaWR4Kys7Ci0KLQkJaWYgKGlvYXBpY19yZXMgIT0gTlVMTCkgewotCQkJaW9hcGljX3Jlcy0+c3RhcnQgPSBpb2FwaWNfcGh5czsKLQkJCWlvYXBpY19yZXMtPmVuZCA9IGlvYXBpY19waHlzICsgKDQgKiAxMDI0KSAtIDE7Ci0JCQlpb2FwaWNfcmVzKys7Ci0JCX0KLQl9Ci19Ci0KLXN0YXRpYyBpbnQgX19pbml0IGlvYXBpY19pbnNlcnRfcmVzb3VyY2VzKHZvaWQpCi17Ci0JaW50IGk7Ci0Jc3RydWN0IHJlc291cmNlICpyID0gaW9hcGljX3Jlc291cmNlczsKLQotCWlmICghcikgewotCQlwcmludGsoS0VSTl9FUlIKLQkJICAgICAgICJJTyBBUElDIHJlc291cmNlcyBjb3VsZCBiZSBub3QgYmUgYWxsb2NhdGVkLlxuIik7Ci0JCXJldHVybiAtMTsKLQl9Ci0KLQlmb3IgKGkgPSAwOyBpIDwgbnJfaW9hcGljczsgaSsrKSB7Ci0JCWluc2VydF9yZXNvdXJjZSgmaW9tZW1fcmVzb3VyY2UsIHIpOwotCQlyKys7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qIEluc2VydCB0aGUgSU8gQVBJQyByZXNvdXJjZXMgYWZ0ZXIgUENJIGluaXRpYWxpemF0aW9uIGhhcyBvY2N1cmVkIHRvIGhhbmRsZQotICogSU8gQVBJQ1MgdGhhdCBhcmUgbWFwcGVkIGluIG9uIGEgQkFSIGluIFBDSSBzcGFjZS4gKi8KLWxhdGVfaW5pdGNhbGwoaW9hcGljX2luc2VydF9yZXNvdXJjZXMpOwotCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvaXJxLmMgYi9hcmNoL3g4Ni9rZXJuZWwvaXJxLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2NmNmM1MAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveDg2L2tlcm5lbC9pcnEuYwpAQCAtMCwwICsxLDE4OSBAQAorLyoKKyAqIENvbW1vbiBpbnRlcnJ1cHQgY29kZSBmb3IgMzIgYW5kIDY0IGJpdAorICovCisjaW5jbHVkZSA8bGludXgvY3B1Lmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsX3N0YXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgorCisjaW5jbHVkZSA8YXNtL2FwaWMuaD4KKyNpbmNsdWRlIDxhc20vaW9fYXBpYy5oPgorI2luY2x1ZGUgPGFzbS9zbXAuaD4KKworYXRvbWljX3QgaXJxX2Vycl9jb3VudDsKKworLyoKKyAqICd3aGF0IHNob3VsZCB3ZSBkbyBpZiB3ZSBnZXQgYSBodyBpcnEgZXZlbnQgb24gYW4gaWxsZWdhbCB2ZWN0b3InLgorICogZWFjaCBhcmNoaXRlY3R1cmUgaGFzIHRvIGFuc3dlciB0aGlzIHRoZW1zZWx2ZXMuCisgKi8KK3ZvaWQgYWNrX2JhZF9pcnEodW5zaWduZWQgaW50IGlycSkKK3sKKwlwcmludGsoS0VSTl9FUlIgInVuZXhwZWN0ZWQgSVJRIHRyYXAgYXQgdmVjdG9yICUwMnhcbiIsIGlycSk7CisKKyNpZmRlZiBDT05GSUdfWDg2X0xPQ0FMX0FQSUMKKwkvKgorCSAqIEN1cnJlbnRseSB1bmV4cGVjdGVkIHZlY3RvcnMgaGFwcGVuIG9ubHkgb24gU01QIGFuZCBBUElDLgorCSAqIFdlIF9tdXN0XyBhY2sgdGhlc2UgYmVjYXVzZSBldmVyeSBsb2NhbCBBUElDIGhhcyBvbmx5IE4KKwkgKiBpcnEgc2xvdHMgcGVyIHByaW9yaXR5IGxldmVsLCBhbmQgYSAnaGFuZ2luZywgdW5hY2tlZCcgSVJRCisJICogaG9sZHMgdXAgYW4gaXJxIHNsb3QgLSBpbiBleGNlc3NpdmUgY2FzZXMgKHdoZW4gbXVsdGlwbGUKKwkgKiB1bmV4cGVjdGVkIHZlY3RvcnMgb2NjdXIpIHRoYXQgbWlnaHQgbG9jayB1cCB0aGUgQVBJQworCSAqIGNvbXBsZXRlbHkuCisJICogQnV0IG9ubHkgYWNrIHdoZW4gdGhlIEFQSUMgaXMgZW5hYmxlZCAtQUsKKwkgKi8KKwlpZiAoY3B1X2hhc19hcGljKQorCQlhY2tfQVBJQ19pcnEoKTsKKyNlbmRpZgorfQorCisjaWZkZWYgQ09ORklHX1g4Nl8zMgorIyBkZWZpbmUgaXJxX3N0YXRzKHgpCQkoJnBlcl9jcHUoaXJxX3N0YXQseCkpCisjZWxzZQorIyBkZWZpbmUgaXJxX3N0YXRzKHgpCQljcHVfcGRhKHgpCisjZW5kaWYKKy8qCisgKiAvcHJvYy9pbnRlcnJ1cHRzIHByaW50aW5nOgorICovCitzdGF0aWMgaW50IHNob3dfb3RoZXJfaW50ZXJydXB0cyhzdHJ1Y3Qgc2VxX2ZpbGUgKnApCit7CisJaW50IGo7CisKKwlzZXFfcHJpbnRmKHAsICJOTUk6ICIpOworCWZvcl9lYWNoX29ubGluZV9jcHUoaikKKwkJc2VxX3ByaW50ZihwLCAiJTEwdSAiLCBpcnFfc3RhdHMoaiktPl9fbm1pX2NvdW50KTsKKwlzZXFfcHJpbnRmKHAsICIgIE5vbi1tYXNrYWJsZSBpbnRlcnJ1cHRzXG4iKTsKKyNpZmRlZiBDT05GSUdfWDg2X0xPQ0FMX0FQSUMKKwlzZXFfcHJpbnRmKHAsICJMT0M6ICIpOworCWZvcl9lYWNoX29ubGluZV9jcHUoaikKKwkJc2VxX3ByaW50ZihwLCAiJTEwdSAiLCBpcnFfc3RhdHMoaiktPmFwaWNfdGltZXJfaXJxcyk7CisJc2VxX3ByaW50ZihwLCAiICBMb2NhbCB0aW1lciBpbnRlcnJ1cHRzXG4iKTsKKyNlbmRpZgorI2lmZGVmIENPTkZJR19TTVAKKwlzZXFfcHJpbnRmKHAsICJSRVM6ICIpOworCWZvcl9lYWNoX29ubGluZV9jcHUoaikKKwkJc2VxX3ByaW50ZihwLCAiJTEwdSAiLCBpcnFfc3RhdHMoaiktPmlycV9yZXNjaGVkX2NvdW50KTsKKwlzZXFfcHJpbnRmKHAsICIgIFJlc2NoZWR1bGluZyBpbnRlcnJ1cHRzXG4iKTsKKwlzZXFfcHJpbnRmKHAsICJDQUw6ICIpOworCWZvcl9lYWNoX29ubGluZV9jcHUoaikKKwkJc2VxX3ByaW50ZihwLCAiJTEwdSAiLCBpcnFfc3RhdHMoaiktPmlycV9jYWxsX2NvdW50KTsKKwlzZXFfcHJpbnRmKHAsICIgIEZ1bmN0aW9uIGNhbGwgaW50ZXJydXB0c1xuIik7CisJc2VxX3ByaW50ZihwLCAiVExCOiAiKTsKKwlmb3JfZWFjaF9vbmxpbmVfY3B1KGopCisJCXNlcV9wcmludGYocCwgIiUxMHUgIiwgaXJxX3N0YXRzKGopLT5pcnFfdGxiX2NvdW50KTsKKwlzZXFfcHJpbnRmKHAsICIgIFRMQiBzaG9vdGRvd25zXG4iKTsKKyNlbmRpZgorI2lmZGVmIENPTkZJR19YODZfTUNFCisJc2VxX3ByaW50ZihwLCAiVFJNOiAiKTsKKwlmb3JfZWFjaF9vbmxpbmVfY3B1KGopCisJCXNlcV9wcmludGYocCwgIiUxMHUgIiwgaXJxX3N0YXRzKGopLT5pcnFfdGhlcm1hbF9jb3VudCk7CisJc2VxX3ByaW50ZihwLCAiICBUaGVybWFsIGV2ZW50IGludGVycnVwdHNcbiIpOworIyBpZmRlZiBDT05GSUdfWDg2XzY0CisJc2VxX3ByaW50ZihwLCAiVEhSOiAiKTsKKwlmb3JfZWFjaF9vbmxpbmVfY3B1KGopCisJCXNlcV9wcmludGYocCwgIiUxMHUgIiwgaXJxX3N0YXRzKGopLT5pcnFfdGhyZXNob2xkX2NvdW50KTsKKwlzZXFfcHJpbnRmKHAsICIgIFRocmVzaG9sZCBBUElDIGludGVycnVwdHNcbiIpOworIyBlbmRpZgorI2VuZGlmCisjaWZkZWYgQ09ORklHX1g4Nl9MT0NBTF9BUElDCisJc2VxX3ByaW50ZihwLCAiU1BVOiAiKTsKKwlmb3JfZWFjaF9vbmxpbmVfY3B1KGopCisJCXNlcV9wcmludGYocCwgIiUxMHUgIiwgaXJxX3N0YXRzKGopLT5pcnFfc3B1cmlvdXNfY291bnQpOworCXNlcV9wcmludGYocCwgIiAgU3B1cmlvdXMgaW50ZXJydXB0c1xuIik7CisjZW5kaWYKKwlzZXFfcHJpbnRmKHAsICJFUlI6ICUxMHVcbiIsIGF0b21pY19yZWFkKCZpcnFfZXJyX2NvdW50KSk7CisjaWYgZGVmaW5lZChDT05GSUdfWDg2X0lPX0FQSUMpCisJc2VxX3ByaW50ZihwLCAiTUlTOiAlMTB1XG4iLCBhdG9taWNfcmVhZCgmaXJxX21pc19jb3VudCkpOworI2VuZGlmCisJcmV0dXJuIDA7Cit9CisKK2ludCBzaG93X2ludGVycnVwdHMoc3RydWN0IHNlcV9maWxlICpwLCB2b2lkICp2KQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3MsIGFueV9jb3VudCA9IDA7CisJaW50IGkgPSAqKGxvZmZfdCAqKSB2LCBqOworCXN0cnVjdCBpcnFhY3Rpb24gKmFjdGlvbjsKKwlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2M7CisKKwlpZiAoaSA+IG5yX2lycXMpCisJCXJldHVybiAwOworCisJaWYgKGkgPT0gbnJfaXJxcykKKwkJcmV0dXJuIHNob3dfb3RoZXJfaW50ZXJydXB0cyhwKTsKKworCS8qIHByaW50IGhlYWRlciAqLworCWlmIChpID09IDApIHsKKwkJc2VxX3ByaW50ZihwLCAiICAgICAgICAgICAiKTsKKwkJZm9yX2VhY2hfb25saW5lX2NwdShqKQorCQkJc2VxX3ByaW50ZihwLCAiQ1BVJS04ZCIsaik7CisJCXNlcV9wdXRjKHAsICdcbicpOworCX0KKworCWRlc2MgPSBpcnFfdG9fZGVzYyhpKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZGVzYy0+bG9jaywgZmxhZ3MpOworI2lmbmRlZiBDT05GSUdfU01QCisJYW55X2NvdW50ID0ga3N0YXRfaXJxcyhpKTsKKyNlbHNlCisJZm9yX2VhY2hfb25saW5lX2NwdShqKQorCQlhbnlfY291bnQgfD0ga3N0YXRfaXJxc19jcHUoaSwgaik7CisjZW5kaWYKKwlhY3Rpb24gPSBkZXNjLT5hY3Rpb247CisJaWYgKCFhY3Rpb24gJiYgIWFueV9jb3VudCkKKwkJZ290byBvdXQ7CisKKwlzZXFfcHJpbnRmKHAsICIlM2Q6ICIsIGkpOworI2lmbmRlZiBDT05GSUdfU01QCisJc2VxX3ByaW50ZihwLCAiJTEwdSAiLCBrc3RhdF9pcnFzKGkpKTsKKyNlbHNlCisJZm9yX2VhY2hfb25saW5lX2NwdShqKQorCQlzZXFfcHJpbnRmKHAsICIlMTB1ICIsIGtzdGF0X2lycXNfY3B1KGksIGopKTsKKyNlbmRpZgorCXNlcV9wcmludGYocCwgIiAlOHMiLCBkZXNjLT5jaGlwLT5uYW1lKTsKKwlzZXFfcHJpbnRmKHAsICItJS04cyIsIGRlc2MtPm5hbWUpOworCisJaWYgKGFjdGlvbikgeworCQlzZXFfcHJpbnRmKHAsICIgICVzIiwgYWN0aW9uLT5uYW1lKTsKKwkJd2hpbGUgKChhY3Rpb24gPSBhY3Rpb24tPm5leHQpICE9IE5VTEwpCisJCQlzZXFfcHJpbnRmKHAsICIsICVzIiwgYWN0aW9uLT5uYW1lKTsKKwl9CisKKwlzZXFfcHV0YyhwLCAnXG4nKTsKK291dDoKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXNjLT5sb2NrLCBmbGFncyk7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiAvcHJvYy9zdGF0IGhlbHBlcnMKKyAqLwordTY0IGFyY2hfaXJxX3N0YXRfY3B1KHVuc2lnbmVkIGludCBjcHUpCit7CisJdTY0IHN1bSA9IGlycV9zdGF0cyhjcHUpLT5fX25taV9jb3VudDsKKworI2lmZGVmIENPTkZJR19YODZfTE9DQUxfQVBJQworCXN1bSArPSBpcnFfc3RhdHMoY3B1KS0+YXBpY190aW1lcl9pcnFzOworI2VuZGlmCisjaWZkZWYgQ09ORklHX1NNUAorCXN1bSArPSBpcnFfc3RhdHMoY3B1KS0+aXJxX3Jlc2NoZWRfY291bnQ7CisJc3VtICs9IGlycV9zdGF0cyhjcHUpLT5pcnFfY2FsbF9jb3VudDsKKwlzdW0gKz0gaXJxX3N0YXRzKGNwdSktPmlycV90bGJfY291bnQ7CisjZW5kaWYKKyNpZmRlZiBDT05GSUdfWDg2X01DRQorCXN1bSArPSBpcnFfc3RhdHMoY3B1KS0+aXJxX3RoZXJtYWxfY291bnQ7CisjIGlmZGVmIENPTkZJR19YODZfNjQKKwlzdW0gKz0gaXJxX3N0YXRzKGNwdSktPmlycV90aHJlc2hvbGRfY291bnQ7CisjZW5kaWYKKyNlbmRpZgorI2lmZGVmIENPTkZJR19YODZfTE9DQUxfQVBJQworCXN1bSArPSBpcnFfc3RhdHMoY3B1KS0+aXJxX3NwdXJpb3VzX2NvdW50OworI2VuZGlmCisJcmV0dXJuIHN1bTsKK30KKwordTY0IGFyY2hfaXJxX3N0YXQodm9pZCkKK3sKKwl1NjQgc3VtID0gYXRvbWljX3JlYWQoJmlycV9lcnJfY291bnQpOworCisjaWZkZWYgQ09ORklHX1g4Nl9JT19BUElDCisJc3VtICs9IGF0b21pY19yZWFkKCZpcnFfbWlzX2NvdW50KTsKKyNlbmRpZgorCXJldHVybiBzdW07Cit9CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvaXJxXzMyLmMgYi9hcmNoL3g4Ni9rZXJuZWwvaXJxXzMyLmMKaW5kZXggYjcxZTAyZC4uYTUxMzgyNiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2lycV8zMi5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9pcnFfMzIuYwpAQCAtMjUsMjkgKzI1LDYgQEAKIERFRklORV9QRVJfQ1BVKHN0cnVjdCBwdF9yZWdzICosIGlycV9yZWdzKTsKIEVYUE9SVF9QRVJfQ1BVX1NZTUJPTChpcnFfcmVncyk7CiAKLS8qCi0gKiAnd2hhdCBzaG91bGQgd2UgZG8gaWYgd2UgZ2V0IGEgaHcgaXJxIGV2ZW50IG9uIGFuIGlsbGVnYWwgdmVjdG9yJy4KLSAqIGVhY2ggYXJjaGl0ZWN0dXJlIGhhcyB0byBhbnN3ZXIgdGhpcyB0aGVtc2VsdmVzLgotICovCi12b2lkIGFja19iYWRfaXJxKHVuc2lnbmVkIGludCBpcnEpCi17Ci0JcHJpbnRrKEtFUk5fRVJSICJ1bmV4cGVjdGVkIElSUSB0cmFwIGF0IHZlY3RvciAlMDJ4XG4iLCBpcnEpOwotCi0jaWZkZWYgQ09ORklHX1g4Nl9MT0NBTF9BUElDCi0JLyoKLQkgKiBDdXJyZW50bHkgdW5leHBlY3RlZCB2ZWN0b3JzIGhhcHBlbiBvbmx5IG9uIFNNUCBhbmQgQVBJQy4KLQkgKiBXZSBfbXVzdF8gYWNrIHRoZXNlIGJlY2F1c2UgZXZlcnkgbG9jYWwgQVBJQyBoYXMgb25seSBOCi0JICogaXJxIHNsb3RzIHBlciBwcmlvcml0eSBsZXZlbCwgYW5kIGEgJ2hhbmdpbmcsIHVuYWNrZWQnIElSUQotCSAqIGhvbGRzIHVwIGFuIGlycSBzbG90IC0gaW4gZXhjZXNzaXZlIGNhc2VzICh3aGVuIG11bHRpcGxlCi0JICogdW5leHBlY3RlZCB2ZWN0b3JzIG9jY3VyKSB0aGF0IG1pZ2h0IGxvY2sgdXAgdGhlIEFQSUMKLQkgKiBjb21wbGV0ZWx5LgotCSAqIEJ1dCBvbmx5IGFjayB3aGVuIHRoZSBBUElDIGlzIGVuYWJsZWQgLUFLCi0JICovCi0JaWYgKGNwdV9oYXNfYXBpYykKLQkJYWNrX0FQSUNfaXJxKCk7Ci0jZW5kaWYKLX0KLQogI2lmZGVmIENPTkZJR19ERUJVR19TVEFDS09WRVJGTE9XCiAvKiBEZWJ1Z2dpbmcgY2hlY2sgZm9yIHN0YWNrIG92ZXJmbG93OiBpcyB0aGVyZSBsZXNzIHRoYW4gMUtCIGZyZWU/ICovCiBzdGF0aWMgaW50IGNoZWNrX3N0YWNrX292ZXJmbG93KHZvaWQpCkBAIC0yMjMsMjAgKzIwMCwyNSBAQAogewogCXN0cnVjdCBwdF9yZWdzICpvbGRfcmVnczsKIAkvKiBoaWdoIGJpdCB1c2VkIGluIHJldF9mcm9tXyBjb2RlICovCi0JaW50IG92ZXJmbG93LCBpcnEgPSB+cmVncy0+b3JpZ19heDsKLQlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MgPSBpcnFfZGVzYyArIGlycTsKKwlpbnQgb3ZlcmZsb3c7CisJdW5zaWduZWQgdmVjdG9yID0gfnJlZ3MtPm9yaWdfYXg7CisJc3RydWN0IGlycV9kZXNjICpkZXNjOworCXVuc2lnbmVkIGlycTsKIAotCWlmICh1bmxpa2VseSgodW5zaWduZWQpaXJxID49IE5SX0lSUVMpKSB7Ci0JCXByaW50ayhLRVJOX0VNRVJHICIlczogY2Fubm90IGhhbmRsZSBJUlEgJWRcbiIsCi0JCQkJCV9fZnVuY19fLCBpcnEpOwotCQlCVUcoKTsKLQl9CiAKIAlvbGRfcmVncyA9IHNldF9pcnFfcmVncyhyZWdzKTsKIAlpcnFfZW50ZXIoKTsKKwlpcnEgPSBfX2dldF9jcHVfdmFyKHZlY3Rvcl9pcnEpW3ZlY3Rvcl07CiAKIAlvdmVyZmxvdyA9IGNoZWNrX3N0YWNrX292ZXJmbG93KCk7CiAKKwlkZXNjID0gaXJxX3RvX2Rlc2MoaXJxKTsKKwlpZiAodW5saWtlbHkoIWRlc2MpKSB7CisJCXByaW50ayhLRVJOX0VNRVJHICIlczogY2Fubm90IGhhbmRsZSBJUlEgJWQgdmVjdG9yICUjeCBjcHUgJWRcbiIsCisJCQkJCV9fZnVuY19fLCBpcnEsIHZlY3Rvciwgc21wX3Byb2Nlc3Nvcl9pZCgpKTsKKwkJQlVHKCk7CisJfQorCiAJaWYgKCFleGVjdXRlX29uX2lycV9zdGFjayhvdmVyZmxvdywgZGVzYywgaXJxKSkgewogCQlpZiAodW5saWtlbHkob3ZlcmZsb3cpKQogCQkJcHJpbnRfc3RhY2tfb3ZlcmZsb3coKTsKQEAgLTI0OCwxNDYgKzIzMCw2IEBACiAJcmV0dXJuIDE7CiB9CiAKLS8qCi0gKiBJbnRlcnJ1cHQgc3RhdGlzdGljczoKLSAqLwotCi1hdG9taWNfdCBpcnFfZXJyX2NvdW50OwotCi0vKgotICogL3Byb2MvaW50ZXJydXB0cyBwcmludGluZzoKLSAqLwotCi1pbnQgc2hvd19pbnRlcnJ1cHRzKHN0cnVjdCBzZXFfZmlsZSAqcCwgdm9pZCAqdikKLXsKLQlpbnQgaSA9ICoobG9mZl90ICopIHYsIGo7Ci0Jc3RydWN0IGlycWFjdGlvbiAqIGFjdGlvbjsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JaWYgKGkgPT0gMCkgewotCQlzZXFfcHJpbnRmKHAsICIgICAgICAgICAgICIpOwotCQlmb3JfZWFjaF9vbmxpbmVfY3B1KGopCi0JCQlzZXFfcHJpbnRmKHAsICJDUFUlLThkIixqKTsKLQkJc2VxX3B1dGMocCwgJ1xuJyk7Ci0JfQotCi0JaWYgKGkgPCBOUl9JUlFTKSB7Ci0JCXVuc2lnbmVkIGFueV9jb3VudCA9IDA7Ci0KLQkJc3Bpbl9sb2NrX2lycXNhdmUoJmlycV9kZXNjW2ldLmxvY2ssIGZsYWdzKTsKLSNpZm5kZWYgQ09ORklHX1NNUAotCQlhbnlfY291bnQgPSBrc3RhdF9pcnFzKGkpOwotI2Vsc2UKLQkJZm9yX2VhY2hfb25saW5lX2NwdShqKQotCQkJYW55X2NvdW50IHw9IGtzdGF0X2NwdShqKS5pcnFzW2ldOwotI2VuZGlmCi0JCWFjdGlvbiA9IGlycV9kZXNjW2ldLmFjdGlvbjsKLQkJaWYgKCFhY3Rpb24gJiYgIWFueV9jb3VudCkKLQkJCWdvdG8gc2tpcDsKLQkJc2VxX3ByaW50ZihwLCAiJTNkOiAiLGkpOwotI2lmbmRlZiBDT05GSUdfU01QCi0JCXNlcV9wcmludGYocCwgIiUxMHUgIiwga3N0YXRfaXJxcyhpKSk7Ci0jZWxzZQotCQlmb3JfZWFjaF9vbmxpbmVfY3B1KGopCi0JCQlzZXFfcHJpbnRmKHAsICIlMTB1ICIsIGtzdGF0X2NwdShqKS5pcnFzW2ldKTsKLSNlbmRpZgotCQlzZXFfcHJpbnRmKHAsICIgJThzIiwgaXJxX2Rlc2NbaV0uY2hpcC0+bmFtZSk7Ci0JCXNlcV9wcmludGYocCwgIi0lLThzIiwgaXJxX2Rlc2NbaV0ubmFtZSk7Ci0KLQkJaWYgKGFjdGlvbikgewotCQkJc2VxX3ByaW50ZihwLCAiICAlcyIsIGFjdGlvbi0+bmFtZSk7Ci0JCQl3aGlsZSAoKGFjdGlvbiA9IGFjdGlvbi0+bmV4dCkgIT0gTlVMTCkKLQkJCQlzZXFfcHJpbnRmKHAsICIsICVzIiwgYWN0aW9uLT5uYW1lKTsKLQkJfQotCi0JCXNlcV9wdXRjKHAsICdcbicpOwotc2tpcDoKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaXJxX2Rlc2NbaV0ubG9jaywgZmxhZ3MpOwotCX0gZWxzZSBpZiAoaSA9PSBOUl9JUlFTKSB7Ci0JCXNlcV9wcmludGYocCwgIk5NSTogIik7Ci0JCWZvcl9lYWNoX29ubGluZV9jcHUoaikKLQkJCXNlcV9wcmludGYocCwgIiUxMHUgIiwgbm1pX2NvdW50KGopKTsKLQkJc2VxX3ByaW50ZihwLCAiICBOb24tbWFza2FibGUgaW50ZXJydXB0c1xuIik7Ci0jaWZkZWYgQ09ORklHX1g4Nl9MT0NBTF9BUElDCi0JCXNlcV9wcmludGYocCwgIkxPQzogIik7Ci0JCWZvcl9lYWNoX29ubGluZV9jcHUoaikKLQkJCXNlcV9wcmludGYocCwgIiUxMHUgIiwKLQkJCQlwZXJfY3B1KGlycV9zdGF0LGopLmFwaWNfdGltZXJfaXJxcyk7Ci0JCXNlcV9wcmludGYocCwgIiAgTG9jYWwgdGltZXIgaW50ZXJydXB0c1xuIik7Ci0jZW5kaWYKLSNpZmRlZiBDT05GSUdfU01QCi0JCXNlcV9wcmludGYocCwgIlJFUzogIik7Ci0JCWZvcl9lYWNoX29ubGluZV9jcHUoaikKLQkJCXNlcV9wcmludGYocCwgIiUxMHUgIiwKLQkJCQlwZXJfY3B1KGlycV9zdGF0LGopLmlycV9yZXNjaGVkX2NvdW50KTsKLQkJc2VxX3ByaW50ZihwLCAiICBSZXNjaGVkdWxpbmcgaW50ZXJydXB0c1xuIik7Ci0JCXNlcV9wcmludGYocCwgIkNBTDogIik7Ci0JCWZvcl9lYWNoX29ubGluZV9jcHUoaikKLQkJCXNlcV9wcmludGYocCwgIiUxMHUgIiwKLQkJCQlwZXJfY3B1KGlycV9zdGF0LGopLmlycV9jYWxsX2NvdW50KTsKLQkJc2VxX3ByaW50ZihwLCAiICBGdW5jdGlvbiBjYWxsIGludGVycnVwdHNcbiIpOwotCQlzZXFfcHJpbnRmKHAsICJUTEI6ICIpOwotCQlmb3JfZWFjaF9vbmxpbmVfY3B1KGopCi0JCQlzZXFfcHJpbnRmKHAsICIlMTB1ICIsCi0JCQkJcGVyX2NwdShpcnFfc3RhdCxqKS5pcnFfdGxiX2NvdW50KTsKLQkJc2VxX3ByaW50ZihwLCAiICBUTEIgc2hvb3Rkb3duc1xuIik7Ci0jZW5kaWYKLSNpZmRlZiBDT05GSUdfWDg2X01DRQotCQlzZXFfcHJpbnRmKHAsICJUUk06ICIpOwotCQlmb3JfZWFjaF9vbmxpbmVfY3B1KGopCi0JCQlzZXFfcHJpbnRmKHAsICIlMTB1ICIsCi0JCQkJcGVyX2NwdShpcnFfc3RhdCxqKS5pcnFfdGhlcm1hbF9jb3VudCk7Ci0JCXNlcV9wcmludGYocCwgIiAgVGhlcm1hbCBldmVudCBpbnRlcnJ1cHRzXG4iKTsKLSNlbmRpZgotI2lmZGVmIENPTkZJR19YODZfTE9DQUxfQVBJQwotCQlzZXFfcHJpbnRmKHAsICJTUFU6ICIpOwotCQlmb3JfZWFjaF9vbmxpbmVfY3B1KGopCi0JCQlzZXFfcHJpbnRmKHAsICIlMTB1ICIsCi0JCQkJcGVyX2NwdShpcnFfc3RhdCxqKS5pcnFfc3B1cmlvdXNfY291bnQpOwotCQlzZXFfcHJpbnRmKHAsICIgIFNwdXJpb3VzIGludGVycnVwdHNcbiIpOwotI2VuZGlmCi0JCXNlcV9wcmludGYocCwgIkVSUjogJTEwdVxuIiwgYXRvbWljX3JlYWQoJmlycV9lcnJfY291bnQpKTsKLSNpZiBkZWZpbmVkKENPTkZJR19YODZfSU9fQVBJQykKLQkJc2VxX3ByaW50ZihwLCAiTUlTOiAlMTB1XG4iLCBhdG9taWNfcmVhZCgmaXJxX21pc19jb3VudCkpOwotI2VuZGlmCi0JfQotCXJldHVybiAwOwotfQotCi0vKgotICogL3Byb2Mvc3RhdCBoZWxwZXJzCi0gKi8KLXU2NCBhcmNoX2lycV9zdGF0X2NwdSh1bnNpZ25lZCBpbnQgY3B1KQotewotCXU2NCBzdW0gPSBubWlfY291bnQoY3B1KTsKLQotI2lmZGVmIENPTkZJR19YODZfTE9DQUxfQVBJQwotCXN1bSArPSBwZXJfY3B1KGlycV9zdGF0LCBjcHUpLmFwaWNfdGltZXJfaXJxczsKLSNlbmRpZgotI2lmZGVmIENPTkZJR19TTVAKLQlzdW0gKz0gcGVyX2NwdShpcnFfc3RhdCwgY3B1KS5pcnFfcmVzY2hlZF9jb3VudDsKLQlzdW0gKz0gcGVyX2NwdShpcnFfc3RhdCwgY3B1KS5pcnFfY2FsbF9jb3VudDsKLQlzdW0gKz0gcGVyX2NwdShpcnFfc3RhdCwgY3B1KS5pcnFfdGxiX2NvdW50OwotI2VuZGlmCi0jaWZkZWYgQ09ORklHX1g4Nl9NQ0UKLQlzdW0gKz0gcGVyX2NwdShpcnFfc3RhdCwgY3B1KS5pcnFfdGhlcm1hbF9jb3VudDsKLSNlbmRpZgotI2lmZGVmIENPTkZJR19YODZfTE9DQUxfQVBJQwotCXN1bSArPSBwZXJfY3B1KGlycV9zdGF0LCBjcHUpLmlycV9zcHVyaW91c19jb3VudDsKLSNlbmRpZgotCXJldHVybiBzdW07Ci19Ci0KLXU2NCBhcmNoX2lycV9zdGF0KHZvaWQpCi17Ci0JdTY0IHN1bSA9IGF0b21pY19yZWFkKCZpcnFfZXJyX2NvdW50KTsKLQotI2lmZGVmIENPTkZJR19YODZfSU9fQVBJQwotCXN1bSArPSBhdG9taWNfcmVhZCgmaXJxX21pc19jb3VudCk7Ci0jZW5kaWYKLQlyZXR1cm4gc3VtOwotfQotCiAjaWZkZWYgQ09ORklHX0hPVFBMVUdfQ1BVCiAjaW5jbHVkZSA8bWFjaF9hcGljLmg+CiAKQEAgLTM5NSwyMCArMjM3LDIyIEBACiB7CiAJdW5zaWduZWQgaW50IGlycTsKIAlzdGF0aWMgaW50IHdhcm5lZDsKKwlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2M7CiAKLQlmb3IgKGlycSA9IDA7IGlycSA8IE5SX0lSUVM7IGlycSsrKSB7CisJZm9yX2VhY2hfaXJxX2Rlc2MoaXJxLCBkZXNjKSB7CiAJCWNwdW1hc2tfdCBtYXNrOworCiAJCWlmIChpcnEgPT0gMikKIAkJCWNvbnRpbnVlOwogCi0JCWNwdXNfYW5kKG1hc2ssIGlycV9kZXNjW2lycV0uYWZmaW5pdHksIG1hcCk7CisJCWNwdXNfYW5kKG1hc2ssIGRlc2MtPmFmZmluaXR5LCBtYXApOwogCQlpZiAoYW55X29ubGluZV9jcHUobWFzaykgPT0gTlJfQ1BVUykgewogCQkJcHJpbnRrKCJCcmVha2luZyBhZmZpbml0eSBmb3IgaXJxICVpXG4iLCBpcnEpOwogCQkJbWFzayA9IG1hcDsKIAkJfQotCQlpZiAoaXJxX2Rlc2NbaXJxXS5jaGlwLT5zZXRfYWZmaW5pdHkpCi0JCQlpcnFfZGVzY1tpcnFdLmNoaXAtPnNldF9hZmZpbml0eShpcnEsIG1hc2spOwotCQllbHNlIGlmIChpcnFfZGVzY1tpcnFdLmFjdGlvbiAmJiAhKHdhcm5lZCsrKSkKKwkJaWYgKGRlc2MtPmNoaXAtPnNldF9hZmZpbml0eSkKKwkJCWRlc2MtPmNoaXAtPnNldF9hZmZpbml0eShpcnEsIG1hc2spOworCQllbHNlIGlmIChkZXNjLT5hY3Rpb24gJiYgISh3YXJuZWQrKykpCiAJCQlwcmludGsoIkNhbm5vdCBzZXQgYWZmaW5pdHkgZm9yIGlycSAlaVxuIiwgaXJxKTsKIAl9CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9pcnFfNjQuYyBiL2FyY2gveDg2L2tlcm5lbC9pcnFfNjQuYwppbmRleCBmMDY1ZmU5Li42MGViODRlIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvaXJxXzY0LmMKKysrIGIvYXJjaC94ODYva2VybmVsL2lycV82NC5jCkBAIC0xOCwyOCArMTgsNiBAQAogI2luY2x1ZGUgPGFzbS9pZGxlLmg+CiAjaW5jbHVkZSA8YXNtL3NtcC5oPgogCi1hdG9taWNfdCBpcnFfZXJyX2NvdW50OwotCi0vKgotICogJ3doYXQgc2hvdWxkIHdlIGRvIGlmIHdlIGdldCBhIGh3IGlycSBldmVudCBvbiBhbiBpbGxlZ2FsIHZlY3RvcicuCi0gKiBlYWNoIGFyY2hpdGVjdHVyZSBoYXMgdG8gYW5zd2VyIHRoaXMgdGhlbXNlbHZlcy4KLSAqLwotdm9pZCBhY2tfYmFkX2lycSh1bnNpZ25lZCBpbnQgaXJxKQotewotCXByaW50ayhLRVJOX1dBUk5JTkcgInVuZXhwZWN0ZWQgSVJRIHRyYXAgYXQgdmVjdG9yICUwMnhcbiIsIGlycSk7Ci0JLyoKLQkgKiBDdXJyZW50bHkgdW5leHBlY3RlZCB2ZWN0b3JzIGhhcHBlbiBvbmx5IG9uIFNNUCBhbmQgQVBJQy4KLQkgKiBXZSBfbXVzdF8gYWNrIHRoZXNlIGJlY2F1c2UgZXZlcnkgbG9jYWwgQVBJQyBoYXMgb25seSBOCi0JICogaXJxIHNsb3RzIHBlciBwcmlvcml0eSBsZXZlbCwgYW5kIGEgJ2hhbmdpbmcsIHVuYWNrZWQnIElSUQotCSAqIGhvbGRzIHVwIGFuIGlycSBzbG90IC0gaW4gZXhjZXNzaXZlIGNhc2VzICh3aGVuIG11bHRpcGxlCi0JICogdW5leHBlY3RlZCB2ZWN0b3JzIG9jY3VyKSB0aGF0IG1pZ2h0IGxvY2sgdXAgdGhlIEFQSUMKLQkgKiBjb21wbGV0ZWx5LgotCSAqIEJ1dCBkb24ndCBhY2sgd2hlbiB0aGUgQVBJQyBpcyBkaXNhYmxlZC4gLUFLCi0JICovCi0JaWYgKCFkaXNhYmxlX2FwaWMpCi0JCWFja19BUElDX2lycSgpOwotfQotCiAjaWZkZWYgQ09ORklHX0RFQlVHX1NUQUNLT1ZFUkZMT1cKIC8qCiAgKiBQcm9iYWJpbGlzdGljIHN0YWNrIG92ZXJmbG93IGNoZWNrOgpAQCAtNjUsMTIyICs0Myw2IEBACiAjZW5kaWYKIAogLyoKLSAqIEdlbmVyaWMsIGNvbnRyb2xsZXItaW5kZXBlbmRlbnQgZnVuY3Rpb25zOgotICovCi0KLWludCBzaG93X2ludGVycnVwdHMoc3RydWN0IHNlcV9maWxlICpwLCB2b2lkICp2KQotewotCWludCBpID0gKihsb2ZmX3QgKikgdiwgajsKLQlzdHJ1Y3QgaXJxYWN0aW9uICogYWN0aW9uOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlpZiAoaSA9PSAwKSB7Ci0JCXNlcV9wcmludGYocCwgIiAgICAgICAgICAgIik7Ci0JCWZvcl9lYWNoX29ubGluZV9jcHUoaikKLQkJCXNlcV9wcmludGYocCwgIkNQVSUtOGQiLGopOwotCQlzZXFfcHV0YyhwLCAnXG4nKTsKLQl9Ci0KLQlpZiAoaSA8IE5SX0lSUVMpIHsKLQkJdW5zaWduZWQgYW55X2NvdW50ID0gMDsKLQotCQlzcGluX2xvY2tfaXJxc2F2ZSgmaXJxX2Rlc2NbaV0ubG9jaywgZmxhZ3MpOwotI2lmbmRlZiBDT05GSUdfU01QCi0JCWFueV9jb3VudCA9IGtzdGF0X2lycXMoaSk7Ci0jZWxzZQotCQlmb3JfZWFjaF9vbmxpbmVfY3B1KGopCi0JCQlhbnlfY291bnQgfD0ga3N0YXRfY3B1KGopLmlycXNbaV07Ci0jZW5kaWYKLQkJYWN0aW9uID0gaXJxX2Rlc2NbaV0uYWN0aW9uOwotCQlpZiAoIWFjdGlvbiAmJiAhYW55X2NvdW50KQotCQkJZ290byBza2lwOwotCQlzZXFfcHJpbnRmKHAsICIlM2Q6ICIsaSk7Ci0jaWZuZGVmIENPTkZJR19TTVAKLQkJc2VxX3ByaW50ZihwLCAiJTEwdSAiLCBrc3RhdF9pcnFzKGkpKTsKLSNlbHNlCi0JCWZvcl9lYWNoX29ubGluZV9jcHUoaikKLQkJCXNlcV9wcmludGYocCwgIiUxMHUgIiwga3N0YXRfY3B1KGopLmlycXNbaV0pOwotI2VuZGlmCi0JCXNlcV9wcmludGYocCwgIiAlOHMiLCBpcnFfZGVzY1tpXS5jaGlwLT5uYW1lKTsKLQkJc2VxX3ByaW50ZihwLCAiLSUtOHMiLCBpcnFfZGVzY1tpXS5uYW1lKTsKLQotCQlpZiAoYWN0aW9uKSB7Ci0JCQlzZXFfcHJpbnRmKHAsICIgICVzIiwgYWN0aW9uLT5uYW1lKTsKLQkJCXdoaWxlICgoYWN0aW9uID0gYWN0aW9uLT5uZXh0KSAhPSBOVUxMKQotCQkJCXNlcV9wcmludGYocCwgIiwgJXMiLCBhY3Rpb24tPm5hbWUpOwotCQl9Ci0JCXNlcV9wdXRjKHAsICdcbicpOwotc2tpcDoKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaXJxX2Rlc2NbaV0ubG9jaywgZmxhZ3MpOwotCX0gZWxzZSBpZiAoaSA9PSBOUl9JUlFTKSB7Ci0JCXNlcV9wcmludGYocCwgIk5NSTogIik7Ci0JCWZvcl9lYWNoX29ubGluZV9jcHUoaikKLQkJCXNlcV9wcmludGYocCwgIiUxMHUgIiwgY3B1X3BkYShqKS0+X19ubWlfY291bnQpOwotCQlzZXFfcHJpbnRmKHAsICIgIE5vbi1tYXNrYWJsZSBpbnRlcnJ1cHRzXG4iKTsKLQkJc2VxX3ByaW50ZihwLCAiTE9DOiAiKTsKLQkJZm9yX2VhY2hfb25saW5lX2NwdShqKQotCQkJc2VxX3ByaW50ZihwLCAiJTEwdSAiLCBjcHVfcGRhKGopLT5hcGljX3RpbWVyX2lycXMpOwotCQlzZXFfcHJpbnRmKHAsICIgIExvY2FsIHRpbWVyIGludGVycnVwdHNcbiIpOwotI2lmZGVmIENPTkZJR19TTVAKLQkJc2VxX3ByaW50ZihwLCAiUkVTOiAiKTsKLQkJZm9yX2VhY2hfb25saW5lX2NwdShqKQotCQkJc2VxX3ByaW50ZihwLCAiJTEwdSAiLCBjcHVfcGRhKGopLT5pcnFfcmVzY2hlZF9jb3VudCk7Ci0JCXNlcV9wcmludGYocCwgIiAgUmVzY2hlZHVsaW5nIGludGVycnVwdHNcbiIpOwotCQlzZXFfcHJpbnRmKHAsICJDQUw6ICIpOwotCQlmb3JfZWFjaF9vbmxpbmVfY3B1KGopCi0JCQlzZXFfcHJpbnRmKHAsICIlMTB1ICIsIGNwdV9wZGEoaiktPmlycV9jYWxsX2NvdW50KTsKLQkJc2VxX3ByaW50ZihwLCAiICBGdW5jdGlvbiBjYWxsIGludGVycnVwdHNcbiIpOwotCQlzZXFfcHJpbnRmKHAsICJUTEI6ICIpOwotCQlmb3JfZWFjaF9vbmxpbmVfY3B1KGopCi0JCQlzZXFfcHJpbnRmKHAsICIlMTB1ICIsIGNwdV9wZGEoaiktPmlycV90bGJfY291bnQpOwotCQlzZXFfcHJpbnRmKHAsICIgIFRMQiBzaG9vdGRvd25zXG4iKTsKLSNlbmRpZgotI2lmZGVmIENPTkZJR19YODZfTUNFCi0JCXNlcV9wcmludGYocCwgIlRSTTogIik7Ci0JCWZvcl9lYWNoX29ubGluZV9jcHUoaikKLQkJCXNlcV9wcmludGYocCwgIiUxMHUgIiwgY3B1X3BkYShqKS0+aXJxX3RoZXJtYWxfY291bnQpOwotCQlzZXFfcHJpbnRmKHAsICIgIFRoZXJtYWwgZXZlbnQgaW50ZXJydXB0c1xuIik7Ci0JCXNlcV9wcmludGYocCwgIlRIUjogIik7Ci0JCWZvcl9lYWNoX29ubGluZV9jcHUoaikKLQkJCXNlcV9wcmludGYocCwgIiUxMHUgIiwgY3B1X3BkYShqKS0+aXJxX3RocmVzaG9sZF9jb3VudCk7Ci0JCXNlcV9wcmludGYocCwgIiAgVGhyZXNob2xkIEFQSUMgaW50ZXJydXB0c1xuIik7Ci0jZW5kaWYKLQkJc2VxX3ByaW50ZihwLCAiU1BVOiAiKTsKLQkJZm9yX2VhY2hfb25saW5lX2NwdShqKQotCQkJc2VxX3ByaW50ZihwLCAiJTEwdSAiLCBjcHVfcGRhKGopLT5pcnFfc3B1cmlvdXNfY291bnQpOwotCQlzZXFfcHJpbnRmKHAsICIgIFNwdXJpb3VzIGludGVycnVwdHNcbiIpOwotCQlzZXFfcHJpbnRmKHAsICJFUlI6ICUxMHVcbiIsIGF0b21pY19yZWFkKCZpcnFfZXJyX2NvdW50KSk7Ci0JfQotCXJldHVybiAwOwotfQotCi0vKgotICogL3Byb2Mvc3RhdCBoZWxwZXJzCi0gKi8KLXU2NCBhcmNoX2lycV9zdGF0X2NwdSh1bnNpZ25lZCBpbnQgY3B1KQotewotCXU2NCBzdW0gPSBjcHVfcGRhKGNwdSktPl9fbm1pX2NvdW50OwotCi0Jc3VtICs9IGNwdV9wZGEoY3B1KS0+YXBpY190aW1lcl9pcnFzOwotI2lmZGVmIENPTkZJR19TTVAKLQlzdW0gKz0gY3B1X3BkYShjcHUpLT5pcnFfcmVzY2hlZF9jb3VudDsKLQlzdW0gKz0gY3B1X3BkYShjcHUpLT5pcnFfY2FsbF9jb3VudDsKLQlzdW0gKz0gY3B1X3BkYShjcHUpLT5pcnFfdGxiX2NvdW50OwotI2VuZGlmCi0jaWZkZWYgQ09ORklHX1g4Nl9NQ0UKLQlzdW0gKz0gY3B1X3BkYShjcHUpLT5pcnFfdGhlcm1hbF9jb3VudDsKLQlzdW0gKz0gY3B1X3BkYShjcHUpLT5pcnFfdGhyZXNob2xkX2NvdW50OwotI2VuZGlmCi0Jc3VtICs9IGNwdV9wZGEoY3B1KS0+aXJxX3NwdXJpb3VzX2NvdW50OwotCXJldHVybiBzdW07Ci19Ci0KLXU2NCBhcmNoX2lycV9zdGF0KHZvaWQpCi17Ci0JcmV0dXJuIGF0b21pY19yZWFkKCZpcnFfZXJyX2NvdW50KTsKLX0KLQotLyoKICAqIGRvX0lSUSBoYW5kbGVzIGFsbCBub3JtYWwgZGV2aWNlIElSUSdzICh0aGUgc3BlY2lhbAogICogU01QIGNyb3NzLUNQVSBpbnRlcnJ1cHRzIGhhdmUgdGhlaXIgb3duIHNwZWNpZmljCiAgKiBoYW5kbGVycykuCkBAIC0xODgsNiArNTAsNyBAQAogYXNtbGlua2FnZSB1bnNpZ25lZCBpbnQgZG9fSVJRKHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewogCXN0cnVjdCBwdF9yZWdzICpvbGRfcmVncyA9IHNldF9pcnFfcmVncyhyZWdzKTsKKwlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2M7CiAKIAkvKiBoaWdoIGJpdCB1c2VkIGluIHJldF9mcm9tXyBjb2RlICAqLwogCXVuc2lnbmVkIHZlY3RvciA9IH5yZWdzLT5vcmlnX2F4OwpAQCAtMjAxLDggKzY0LDkgQEAKIAlzdGFja19vdmVyZmxvd19jaGVjayhyZWdzKTsKICNlbmRpZgogCi0JaWYgKGxpa2VseShpcnEgPCBOUl9JUlFTKSkKLQkJZ2VuZXJpY19oYW5kbGVfaXJxKGlycSk7CisJZGVzYyA9IGlycV90b19kZXNjKGlycSk7CisJaWYgKGxpa2VseShkZXNjKSkKKwkJZ2VuZXJpY19oYW5kbGVfaXJxX2Rlc2MoaXJxLCBkZXNjKTsKIAllbHNlIHsKIAkJaWYgKCFkaXNhYmxlX2FwaWMpCiAJCQlhY2tfQVBJQ19pcnEoKTsKQEAgLTIyMyw4ICs4Nyw5IEBACiB7CiAJdW5zaWduZWQgaW50IGlycTsKIAlzdGF0aWMgaW50IHdhcm5lZDsKKwlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2M7CiAKLQlmb3IgKGlycSA9IDA7IGlycSA8IE5SX0lSUVM7IGlycSsrKSB7CisJZm9yX2VhY2hfaXJxX2Rlc2MoaXJxLCBkZXNjKSB7CiAJCWNwdW1hc2tfdCBtYXNrOwogCQlpbnQgYnJlYWtfYWZmaW5pdHkgPSAwOwogCQlpbnQgc2V0X2FmZmluaXR5ID0gMTsKQEAgLTIzMywzMiArOTgsMzIgQEAKIAkJCWNvbnRpbnVlOwogCiAJCS8qIGludGVycnVwdCdzIGFyZSBkaXNhYmxlZCBhdCB0aGlzIHBvaW50ICovCi0JCXNwaW5fbG9jaygmaXJxX2Rlc2NbaXJxXS5sb2NrKTsKKwkJc3Bpbl9sb2NrKCZkZXNjLT5sb2NrKTsKIAogCQlpZiAoIWlycV9oYXNfYWN0aW9uKGlycSkgfHwKLQkJICAgIGNwdXNfZXF1YWwoaXJxX2Rlc2NbaXJxXS5hZmZpbml0eSwgbWFwKSkgewotCQkJc3Bpbl91bmxvY2soJmlycV9kZXNjW2lycV0ubG9jayk7CisJCSAgICBjcHVzX2VxdWFsKGRlc2MtPmFmZmluaXR5LCBtYXApKSB7CisJCQlzcGluX3VubG9jaygmZGVzYy0+bG9jayk7CiAJCQljb250aW51ZTsKIAkJfQogCi0JCWNwdXNfYW5kKG1hc2ssIGlycV9kZXNjW2lycV0uYWZmaW5pdHksIG1hcCk7CisJCWNwdXNfYW5kKG1hc2ssIGRlc2MtPmFmZmluaXR5LCBtYXApOwogCQlpZiAoY3B1c19lbXB0eShtYXNrKSkgewogCQkJYnJlYWtfYWZmaW5pdHkgPSAxOwogCQkJbWFzayA9IG1hcDsKIAkJfQogCi0JCWlmIChpcnFfZGVzY1tpcnFdLmNoaXAtPm1hc2spCi0JCQlpcnFfZGVzY1tpcnFdLmNoaXAtPm1hc2soaXJxKTsKKwkJaWYgKGRlc2MtPmNoaXAtPm1hc2spCisJCQlkZXNjLT5jaGlwLT5tYXNrKGlycSk7CiAKLQkJaWYgKGlycV9kZXNjW2lycV0uY2hpcC0+c2V0X2FmZmluaXR5KQotCQkJaXJxX2Rlc2NbaXJxXS5jaGlwLT5zZXRfYWZmaW5pdHkoaXJxLCBtYXNrKTsKKwkJaWYgKGRlc2MtPmNoaXAtPnNldF9hZmZpbml0eSkKKwkJCWRlc2MtPmNoaXAtPnNldF9hZmZpbml0eShpcnEsIG1hc2spOwogCQllbHNlIGlmICghKHdhcm5lZCsrKSkKIAkJCXNldF9hZmZpbml0eSA9IDA7CiAKLQkJaWYgKGlycV9kZXNjW2lycV0uY2hpcC0+dW5tYXNrKQotCQkJaXJxX2Rlc2NbaXJxXS5jaGlwLT51bm1hc2soaXJxKTsKKwkJaWYgKGRlc2MtPmNoaXAtPnVubWFzaykKKwkJCWRlc2MtPmNoaXAtPnVubWFzayhpcnEpOwogCi0JCXNwaW5fdW5sb2NrKCZpcnFfZGVzY1tpcnFdLmxvY2spOworCQlzcGluX3VubG9jaygmZGVzYy0+bG9jayk7CiAKIAkJaWYgKGJyZWFrX2FmZmluaXR5ICYmIHNldF9hZmZpbml0eSkKIAkJCXByaW50aygiQnJva2UgYWZmaW5pdHkgZm9yIGlycSAlaVxuIiwgaXJxKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9pcnFpbml0XzMyLmMgYi9hcmNoL3g4Ni9rZXJuZWwvaXJxaW5pdF8zMi5jCmluZGV4IDkyMDBhMWUuLjg0NWFhOTggMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9pcnFpbml0XzMyLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2lycWluaXRfMzIuYwpAQCAtNjksNiArNjksMTMgQEAKIAkgKiAxNiBvbGQtc3R5bGUgSU5UQS1jeWNsZSBpbnRlcnJ1cHRzOgogCSAqLwogCWZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKSB7CisJCS8qIGZpcnN0IHRpbWUgY2FsbCB0aGlzIGlycV9kZXNjICovCisJCXN0cnVjdCBpcnFfZGVzYyAqZGVzYyA9IGlycV90b19kZXNjKGkpOworCisJCWRlc2MtPnN0YXR1cyA9IElSUV9ESVNBQkxFRDsKKwkJZGVzYy0+YWN0aW9uID0gTlVMTDsKKwkJZGVzYy0+ZGVwdGggPSAxOworCiAJCXNldF9pcnFfY2hpcF9hbmRfaGFuZGxlcl9uYW1lKGksICZpODI1OUFfY2hpcCwKIAkJCQkJICAgICAgaGFuZGxlX2xldmVsX2lycSwgIlhUIik7CiAJfQpAQCAtODMsNiArOTAsMjcgQEAKIAkubmFtZSA9ICJjYXNjYWRlIiwKIH07CiAKK0RFRklORV9QRVJfQ1BVKHZlY3Rvcl9pcnFfdCwgdmVjdG9yX2lycSkgPSB7CisJWzAgLi4uIElSUTBfVkVDVE9SIC0gMV0gPSAtMSwKKwlbSVJRMF9WRUNUT1JdID0gMCwKKwlbSVJRMV9WRUNUT1JdID0gMSwKKwlbSVJRMl9WRUNUT1JdID0gMiwKKwlbSVJRM19WRUNUT1JdID0gMywKKwlbSVJRNF9WRUNUT1JdID0gNCwKKwlbSVJRNV9WRUNUT1JdID0gNSwKKwlbSVJRNl9WRUNUT1JdID0gNiwKKwlbSVJRN19WRUNUT1JdID0gNywKKwlbSVJROF9WRUNUT1JdID0gOCwKKwlbSVJROV9WRUNUT1JdID0gOSwKKwlbSVJRMTBfVkVDVE9SXSA9IDEwLAorCVtJUlExMV9WRUNUT1JdID0gMTEsCisJW0lSUTEyX1ZFQ1RPUl0gPSAxMiwKKwlbSVJRMTNfVkVDVE9SXSA9IDEzLAorCVtJUlExNF9WRUNUT1JdID0gMTQsCisJW0lSUTE1X1ZFQ1RPUl0gPSAxNSwKKwlbSVJRMTVfVkVDVE9SICsgMSAuLi4gTlJfVkVDVE9SUyAtIDFdID0gLTEKK307CisKIC8qIE92ZXJyaWRkZW4gaW4gcGFyYXZpcnQuYyAqLwogdm9pZCBpbml0X0lSUSh2b2lkKSBfX2F0dHJpYnV0ZV9fKCh3ZWFrLCBhbGlhcygibmF0aXZlX2luaXRfSVJRIikpKTsKIApAQCAtOTgsMjIgKzEyNiwxNCBAQAogCSAqIHVzLiAoc29tZSBvZiB0aGVzZSB3aWxsIGJlIG92ZXJyaWRkZW4gYW5kIGJlY29tZQogCSAqICdzcGVjaWFsJyBTTVAgaW50ZXJydXB0cykKIAkgKi8KLQlmb3IgKGkgPSAwOyBpIDwgKE5SX1ZFQ1RPUlMgLSBGSVJTVF9FWFRFUk5BTF9WRUNUT1IpOyBpKyspIHsKLQkJaW50IHZlY3RvciA9IEZJUlNUX0VYVEVSTkFMX1ZFQ1RPUiArIGk7Ci0JCWlmIChpID49IE5SX0lSUVMpCi0JCQlicmVhazsKKwlmb3IgKGkgPSAgRklSU1RfRVhURVJOQUxfVkVDVE9SOyBpIDwgTlJfVkVDVE9SUzsgaSsrKSB7CiAJCS8qIFNZU0NBTExfVkVDVE9SIHdhcyByZXNlcnZlZCBpbiB0cmFwX2luaXQuICovCi0JCWlmICghdGVzdF9iaXQodmVjdG9yLCB1c2VkX3ZlY3RvcnMpKQotCQkJc2V0X2ludHJfZ2F0ZSh2ZWN0b3IsIGludGVycnVwdFtpXSk7CisJCWlmIChpICE9IFNZU0NBTExfVkVDVE9SKQorCQkJc2V0X2ludHJfZ2F0ZShpLCBpbnRlcnJ1cHRbaV0pOwogCX0KIAotI2lmIGRlZmluZWQoQ09ORklHX1g4Nl9MT0NBTF9BUElDKSAmJiBkZWZpbmVkKENPTkZJR19TTVApCi0JLyoKLQkgKiBJUlEwIG11c3QgYmUgZ2l2ZW4gYSBmaXhlZCBhc3NpZ25tZW50IGFuZCBpbml0aWFsaXplZCwKLQkgKiBiZWNhdXNlIGl0J3MgdXNlZCBiZWZvcmUgdGhlIElPLUFQSUMgaXMgc2V0IHVwLgotCSAqLwotCXNldF9pbnRyX2dhdGUoRklSU1RfREVWSUNFX1ZFQ1RPUiwgaW50ZXJydXB0WzBdKTsKIAorI2lmIGRlZmluZWQoQ09ORklHX1g4Nl9MT0NBTF9BUElDKSAmJiBkZWZpbmVkKENPTkZJR19TTVApCiAJLyoKIAkgKiBUaGUgcmVzY2hlZHVsZSBpbnRlcnJ1cHQgaXMgYSBDUFUtdG8tQ1BVIHJlc2NoZWR1bGUtaGVscGVyCiAJICogSVBJLCBkcml2ZW4gYnkgd2FrZXVwLgpAQCAtMTI4LDYgKzE0OCw5IEBACiAKIAkvKiBJUEkgZm9yIHNpbmdsZSBjYWxsIGZ1bmN0aW9uICovCiAJc2V0X2ludHJfZ2F0ZShDQUxMX0ZVTkNUSU9OX1NJTkdMRV9WRUNUT1IsIGNhbGxfZnVuY3Rpb25fc2luZ2xlX2ludGVycnVwdCk7CisKKwkvKiBMb3cgcHJpb3JpdHkgSVBJIHRvIGNsZWFudXAgYWZ0ZXIgbW92aW5nIGFuIGlycSAqLworCXNldF9pbnRyX2dhdGUoSVJRX01PVkVfQ0xFQU5VUF9WRUNUT1IsIGlycV9tb3ZlX2NsZWFudXBfaW50ZXJydXB0KTsKICNlbmRpZgogCiAjaWZkZWYgQ09ORklHX1g4Nl9MT0NBTF9BUElDCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvaXJxaW5pdF82NC5jIGIvYXJjaC94ODYva2VybmVsL2lycWluaXRfNjQuYwppbmRleCAxZjI2ZmQ5Li5mZjAyMzUzIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvaXJxaW5pdF82NC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9pcnFpbml0XzY0LmMKQEAgLTEzNSw1MSArMTM1LDMzIEBACiAJW0lSUTE1X1ZFQ1RPUiArIDEgLi4uIE5SX1ZFQ1RPUlMgLSAxXSA9IC0xCiB9OwogCi1zdGF0aWMgdm9pZCBfX2luaXQgaW5pdF9JU0FfaXJxcyAodm9pZCkKK3ZvaWQgX19pbml0IGluaXRfSVNBX2lycXModm9pZCkKIHsKIAlpbnQgaTsKIAogCWluaXRfYnNwX0FQSUMoKTsKIAlpbml0XzgyNTlBKDApOwogCi0JZm9yIChpID0gMDsgaSA8IE5SX0lSUVM7IGkrKykgewotCQlpcnFfZGVzY1tpXS5zdGF0dXMgPSBJUlFfRElTQUJMRUQ7Ci0JCWlycV9kZXNjW2ldLmFjdGlvbiA9IE5VTEw7Ci0JCWlycV9kZXNjW2ldLmRlcHRoID0gMTsKKwlmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykgeworCQkvKiBmaXJzdCB0aW1lIGNhbGwgdGhpcyBpcnFfZGVzYyAqLworCQlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MgPSBpcnFfdG9fZGVzYyhpKTsKIAotCQlpZiAoaSA8IDE2KSB7Ci0JCQkvKgotCQkJICogMTYgb2xkLXN0eWxlIElOVEEtY3ljbGUgaW50ZXJydXB0czoKLQkJCSAqLwotCQkJc2V0X2lycV9jaGlwX2FuZF9oYW5kbGVyX25hbWUoaSwgJmk4MjU5QV9jaGlwLAorCQlkZXNjLT5zdGF0dXMgPSBJUlFfRElTQUJMRUQ7CisJCWRlc2MtPmFjdGlvbiA9IE5VTEw7CisJCWRlc2MtPmRlcHRoID0gMTsKKworCQkvKgorCQkgKiAxNiBvbGQtc3R5bGUgSU5UQS1jeWNsZSBpbnRlcnJ1cHRzOgorCQkgKi8KKwkJc2V0X2lycV9jaGlwX2FuZF9oYW5kbGVyX25hbWUoaSwgJmk4MjU5QV9jaGlwLAogCQkJCQkJICAgICAgaGFuZGxlX2xldmVsX2lycSwgIlhUIik7Ci0JCX0gZWxzZSB7Ci0JCQkvKgotCQkJICogJ2hpZ2gnIFBDSSBJUlFzIGZpbGxlZCBpbiBvbiBkZW1hbmQKLQkJCSAqLwotCQkJaXJxX2Rlc2NbaV0uY2hpcCA9ICZub19pcnFfY2hpcDsKLQkJfQogCX0KIH0KIAogdm9pZCBpbml0X0lSUSh2b2lkKSBfX2F0dHJpYnV0ZV9fKCh3ZWFrLCBhbGlhcygibmF0aXZlX2luaXRfSVJRIikpKTsKIAotdm9pZCBfX2luaXQgbmF0aXZlX2luaXRfSVJRKHZvaWQpCitzdGF0aWMgdm9pZCBfX2luaXQgc21wX2ludHJfaW5pdCh2b2lkKQogewotCWludCBpOwotCi0JaW5pdF9JU0FfaXJxcygpOwotCS8qCi0JICogQ292ZXIgdGhlIHdob2xlIHZlY3RvciBzcGFjZSwgbm8gdmVjdG9yIGNhbiBlc2NhcGUKLQkgKiB1cy4gKHNvbWUgb2YgdGhlc2Ugd2lsbCBiZSBvdmVycmlkZGVuIGFuZCBiZWNvbWUKLQkgKiAnc3BlY2lhbCcgU01QIGludGVycnVwdHMpCi0JICovCi0JZm9yIChpID0gMDsgaSA8IChOUl9WRUNUT1JTIC0gRklSU1RfRVhURVJOQUxfVkVDVE9SKTsgaSsrKSB7Ci0JCWludCB2ZWN0b3IgPSBGSVJTVF9FWFRFUk5BTF9WRUNUT1IgKyBpOwotCQlpZiAodmVjdG9yICE9IElBMzJfU1lTQ0FMTF9WRUNUT1IpCi0JCQlzZXRfaW50cl9nYXRlKHZlY3RvciwgaW50ZXJydXB0W2ldKTsKLQl9Ci0KICNpZmRlZiBDT05GSUdfU01QCiAJLyoKIAkgKiBUaGUgcmVzY2hlZHVsZSBpbnRlcnJ1cHQgaXMgYSBDUFUtdG8tQ1BVIHJlc2NoZWR1bGUtaGVscGVyCkBAIC0yMDcsNiArMTg5LDEyIEBACiAJLyogTG93IHByaW9yaXR5IElQSSB0byBjbGVhbnVwIGFmdGVyIG1vdmluZyBhbiBpcnEgKi8KIAlzZXRfaW50cl9nYXRlKElSUV9NT1ZFX0NMRUFOVVBfVkVDVE9SLCBpcnFfbW92ZV9jbGVhbnVwX2ludGVycnVwdCk7CiAjZW5kaWYKK30KKworc3RhdGljIHZvaWQgX19pbml0IGFwaWNfaW50cl9pbml0KHZvaWQpCit7CisJc21wX2ludHJfaW5pdCgpOworCiAJYWxsb2NfaW50cl9nYXRlKFRIRVJNQUxfQVBJQ19WRUNUT1IsIHRoZXJtYWxfaW50ZXJydXB0KTsKIAlhbGxvY19pbnRyX2dhdGUoVEhSRVNIT0xEX0FQSUNfVkVDVE9SLCB0aHJlc2hvbGRfaW50ZXJydXB0KTsKIApAQCAtMjE2LDYgKzIwNCwyNSBAQAogCS8qIElQSSB2ZWN0b3JzIGZvciBBUElDIHNwdXJpb3VzIGFuZCBlcnJvciBpbnRlcnJ1cHRzICovCiAJYWxsb2NfaW50cl9nYXRlKFNQVVJJT1VTX0FQSUNfVkVDVE9SLCBzcHVyaW91c19pbnRlcnJ1cHQpOwogCWFsbG9jX2ludHJfZ2F0ZShFUlJPUl9BUElDX1ZFQ1RPUiwgZXJyb3JfaW50ZXJydXB0KTsKK30KKwordm9pZCBfX2luaXQgbmF0aXZlX2luaXRfSVJRKHZvaWQpCit7CisJaW50IGk7CisKKwlpbml0X0lTQV9pcnFzKCk7CisJLyoKKwkgKiBDb3ZlciB0aGUgd2hvbGUgdmVjdG9yIHNwYWNlLCBubyB2ZWN0b3IgY2FuIGVzY2FwZQorCSAqIHVzLiAoc29tZSBvZiB0aGVzZSB3aWxsIGJlIG92ZXJyaWRkZW4gYW5kIGJlY29tZQorCSAqICdzcGVjaWFsJyBTTVAgaW50ZXJydXB0cykKKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgKE5SX1ZFQ1RPUlMgLSBGSVJTVF9FWFRFUk5BTF9WRUNUT1IpOyBpKyspIHsKKwkJaW50IHZlY3RvciA9IEZJUlNUX0VYVEVSTkFMX1ZFQ1RPUiArIGk7CisJCWlmICh2ZWN0b3IgIT0gSUEzMl9TWVNDQUxMX1ZFQ1RPUikKKwkJCXNldF9pbnRyX2dhdGUodmVjdG9yLCBpbnRlcnJ1cHRbaV0pOworCX0KKworCWFwaWNfaW50cl9pbml0KCk7CiAKIAlpZiAoIWFjcGlfaW9hcGljKQogCQlzZXR1cF9pcnEoMiwgJmlycTIpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2t2bWNsb2NrLmMgYi9hcmNoL3g4Ni9rZXJuZWwva3ZtY2xvY2suYwppbmRleCBkMDJkZWYwLi43NzRhYzQ5IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwva3ZtY2xvY2suYworKysgYi9hcmNoL3g4Ni9rZXJuZWwva3ZtY2xvY2suYwpAQCAtNzgsNiArNzgsMzQgQEAKIAlyZXR1cm4gcmV0OwogfQogCisvKgorICogSWYgd2UgZG9uJ3QgZG8gdGhhdCwgdGhlcmUgaXMgdGhlIHBvc3NpYmlsaXR5IHRoYXQgdGhlIGd1ZXN0CisgKiB3aWxsIGNhbGlicmF0ZSB1bmRlciBoZWF2eSBsb2FkIC0gdGh1cywgZ2V0dGluZyBhIGxvd2VyIGxwaiAtCisgKiBhbmQgZXhlY3V0ZSB0aGUgZGVsYXlzIHRoZW1zZWx2ZXMgd2l0aG91dCBsb2FkLiBUaGlzIGlzIHdyb25nLAorICogYmVjYXVzZSBubyBkZWxheSBsb29wIGNhbiBmaW5pc2ggYmVmb3JlaGFuZC4KKyAqIEFueSBoZXVyaXN0aWNzIGlzIHN1YmplY3QgdG8gZmFpbCwgYmVjYXVzZSB1bHRpbWF0ZWx5LCBhIGxhcmdlCisgKiBwb2xsIG9mIGd1ZXN0cyBjYW4gYmUgcnVubmluZyBhbmQgdHJvdWJsZSBlYWNoIG90aGVyLiBTbyB3ZSBwcmVzZXQKKyAqIGxwaiBoZXJlCisgKi8KK3N0YXRpYyB1bnNpZ25lZCBsb25nIGt2bV9nZXRfdHNjX2toeih2b2lkKQoreworCXJldHVybiBwcmVzZXRfbHBqOworfQorCitzdGF0aWMgdm9pZCBrdm1fZ2V0X3ByZXNldF9scGoodm9pZCkKK3sKKwlzdHJ1Y3QgcHZjbG9ja192Y3B1X3RpbWVfaW5mbyAqc3JjOworCXVuc2lnbmVkIGxvbmcga2h6OworCXU2NCBscGo7CisKKwlzcmMgPSAmcGVyX2NwdShodl9jbG9jaywgMCk7CisJa2h6ID0gcHZjbG9ja190c2Nfa2h6KHNyYyk7CisKKwlscGogPSAoKHU2NClraHogKiAxMDAwKTsKKwlkb19kaXYobHBqLCBIWik7CisJcHJlc2V0X2xwaiA9IGxwajsKK30KKwogc3RhdGljIHN0cnVjdCBjbG9ja3NvdXJjZSBrdm1fY2xvY2sgPSB7CiAJLm5hbWUgPSAia3ZtLWNsb2NrIiwKIAkucmVhZCA9IGt2bV9jbG9ja19yZWFkLApAQCAtMTUzLDYgKzE4MSw3IEBACiAJCXB2X3RpbWVfb3BzLmdldF93YWxsY2xvY2sgPSBrdm1fZ2V0X3dhbGxjbG9jazsKIAkJcHZfdGltZV9vcHMuc2V0X3dhbGxjbG9jayA9IGt2bV9zZXRfd2FsbGNsb2NrOwogCQlwdl90aW1lX29wcy5zY2hlZF9jbG9jayA9IGt2bV9jbG9ja19yZWFkOworCQlwdl90aW1lX29wcy5nZXRfdHNjX2toeiA9IGt2bV9nZXRfdHNjX2toejsKICNpZmRlZiBDT05GSUdfWDg2X0xPQ0FMX0FQSUMKIAkJcHZfYXBpY19vcHMuc2V0dXBfc2Vjb25kYXJ5X2Nsb2NrID0ga3ZtX3NldHVwX3NlY29uZGFyeV9jbG9jazsKICNlbmRpZgpAQCAtMTYzLDYgKzE5Miw3IEBACiAjaWZkZWYgQ09ORklHX0tFWEVDCiAJCW1hY2hpbmVfb3BzLmNyYXNoX3NodXRkb3duICA9IGt2bV9jcmFzaF9zaHV0ZG93bjsKICNlbmRpZgorCQlrdm1fZ2V0X3ByZXNldF9scGooKTsKIAkJY2xvY2tzb3VyY2VfcmVnaXN0ZXIoJmt2bV9jbG9jayk7CiAJfQogfQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL21zci5jIGIvYXJjaC94ODYva2VybmVsL21zci5jCmluZGV4IDJlMmFmNWQuLjgyYTdjN2UgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9tc3IuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvbXNyLmMKQEAgLTE2Myw4ICsxNjMsOCBAQAogewogCXN0cnVjdCBkZXZpY2UgKmRldjsKIAotCWRldiA9IGRldmljZV9jcmVhdGVfZHJ2ZGF0YShtc3JfY2xhc3MsIE5VTEwsIE1LREVWKE1TUl9NQUpPUiwgY3B1KSwKLQkJCQkgICAgTlVMTCwgIm1zciVkIiwgY3B1KTsKKwlkZXYgPSBkZXZpY2VfY3JlYXRlKG1zcl9jbGFzcywgTlVMTCwgTUtERVYoTVNSX01BSk9SLCBjcHUpLCBOVUxMLAorCQkJICAgICJtc3IlZCIsIGNwdSk7CiAJcmV0dXJuIElTX0VSUihkZXYpID8gUFRSX0VSUihkZXYpIDogMDsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3BjaS1jYWxnYXJ5XzY0LmMgYi9hcmNoL3g4Ni9rZXJuZWwvcGNpLWNhbGdhcnlfNjQuYwppbmRleCAwODBkMWQyLi5lMWU3MzFkIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvcGNpLWNhbGdhcnlfNjQuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvcGNpLWNhbGdhcnlfNjQuYwpAQCAtMjE3LDE2ICsyMTcsNiBAQAogCiAjZW5kaWYgLyogQ09ORklHX0lPTU1VX0RFQlVHICovCiAKLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IG51bV9kbWFfcGFnZXModW5zaWduZWQgbG9uZyBkbWEsIHVuc2lnbmVkIGludCBkbWFsZW4pCi17Ci0JdW5zaWduZWQgaW50IG5wYWdlczsKLQotCW5wYWdlcyA9IFBBR0VfQUxJR04oZG1hICsgZG1hbGVuKSAtIChkbWEgJiBQQUdFX01BU0spOwotCW5wYWdlcyA+Pj0gUEFHRV9TSElGVDsKLQotCXJldHVybiBucGFnZXM7Ci19Ci0KIHN0YXRpYyBpbmxpbmUgaW50IHRyYW5zbGF0aW9uX2VuYWJsZWQoc3RydWN0IGlvbW11X3RhYmxlICp0YmwpCiB7CiAJLyogb25seSBQSEJzIHdpdGggdHJhbnNsYXRpb24gZW5hYmxlZCBoYXZlIGFuIElPTU1VIHRhYmxlICovCkBAIC00MDgsNyArMzk4LDcgQEAKIAkJaWYgKGRtYWxlbiA9PSAwKQogCQkJYnJlYWs7CiAKLQkJbnBhZ2VzID0gbnVtX2RtYV9wYWdlcyhkbWEsIGRtYWxlbik7CisJCW5wYWdlcyA9IGlvbW11X251bV9wYWdlcyhkbWEsIGRtYWxlbiwgUEFHRV9TSVpFKTsKIAkJaW9tbXVfZnJlZSh0YmwsIGRtYSwgbnBhZ2VzKTsKIAl9CiB9CkBAIC00MjcsNyArNDE3LDcgQEAKIAkJQlVHX09OKCFzZ19wYWdlKHMpKTsKIAogCQl2YWRkciA9ICh1bnNpZ25lZCBsb25nKSBzZ192aXJ0KHMpOwotCQlucGFnZXMgPSBudW1fZG1hX3BhZ2VzKHZhZGRyLCBzLT5sZW5ndGgpOworCQlucGFnZXMgPSBpb21tdV9udW1fcGFnZXModmFkZHIsIHMtPmxlbmd0aCwgUEFHRV9TSVpFKTsKIAogCQllbnRyeSA9IGlvbW11X3JhbmdlX2FsbG9jKGRldiwgdGJsLCBucGFnZXMpOwogCQlpZiAoZW50cnkgPT0gYmFkX2RtYV9hZGRyZXNzKSB7CkBAIC00NjQsNyArNDU0LDcgQEAKIAlzdHJ1Y3QgaW9tbXVfdGFibGUgKnRibCA9IGZpbmRfaW9tbXVfdGFibGUoZGV2KTsKIAogCXVhZGRyID0gKHVuc2lnbmVkIGxvbmcpdmFkZHI7Ci0JbnBhZ2VzID0gbnVtX2RtYV9wYWdlcyh1YWRkciwgc2l6ZSk7CisJbnBhZ2VzID0gaW9tbXVfbnVtX3BhZ2VzKHVhZGRyLCBzaXplLCBQQUdFX1NJWkUpOwogCiAJcmV0dXJuIGlvbW11X2FsbG9jKGRldiwgdGJsLCB2YWRkciwgbnBhZ2VzLCBkaXJlY3Rpb24pOwogfQpAQCAtNDc1LDcgKzQ2NSw3IEBACiAJc3RydWN0IGlvbW11X3RhYmxlICp0YmwgPSBmaW5kX2lvbW11X3RhYmxlKGRldik7CiAJdW5zaWduZWQgaW50IG5wYWdlczsKIAotCW5wYWdlcyA9IG51bV9kbWFfcGFnZXMoZG1hX2hhbmRsZSwgc2l6ZSk7CisJbnBhZ2VzID0gaW9tbXVfbnVtX3BhZ2VzKGRtYV9oYW5kbGUsIHNpemUsIFBBR0VfU0laRSk7CiAJaW9tbXVfZnJlZSh0YmwsIGRtYV9oYW5kbGUsIG5wYWdlcyk7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9wY2ktZG1hLmMgYi9hcmNoL3g4Ni9rZXJuZWwvcGNpLWRtYS5jCmluZGV4IDBhMzgyNGUuLjE5MjYyNDggMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9wY2ktZG1hLmMKKysrIGIvYXJjaC94ODYva2VybmVsL3BjaS1kbWEuYwpAQCAtMTI1LDEzICsxMjUsMTMgQEAKIAlwY2lfc3dpb3RsYl9pbml0KCk7CiB9CiAKLXVuc2lnbmVkIGxvbmcgaW9tbXVfbnVtX3BhZ2VzKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBsZW4pCit1bnNpZ25lZCBsb25nIGlvbW11X25yX3BhZ2VzKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBsZW4pCiB7CiAJdW5zaWduZWQgbG9uZyBzaXplID0gcm91bmR1cCgoYWRkciAmIH5QQUdFX01BU0spICsgbGVuLCBQQUdFX1NJWkUpOwogCiAJcmV0dXJuIHNpemUgPj4gUEFHRV9TSElGVDsKIH0KLUVYUE9SVF9TWU1CT0woaW9tbXVfbnVtX3BhZ2VzKTsKK0VYUE9SVF9TWU1CT0woaW9tbXVfbnJfcGFnZXMpOwogI2VuZGlmCiAKIHZvaWQgKmRtYV9nZW5lcmljX2FsbG9jX2NvaGVyZW50KHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvcGNpLWdhcnRfNjQuYyBiL2FyY2gveDg2L2tlcm5lbC9wY2ktZ2FydF82NC5jCmluZGV4IDE0NWYxYzguLmUzZjc1YmIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9wY2ktZ2FydF82NC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9wY2ktZ2FydF82NC5jCkBAIC0yMzEsNyArMjMxLDcgQEAKIHN0YXRpYyBkbWFfYWRkcl90IGRtYV9tYXBfYXJlYShzdHJ1Y3QgZGV2aWNlICpkZXYsIGRtYV9hZGRyX3QgcGh5c19tZW0sCiAJCQkJc2l6ZV90IHNpemUsIGludCBkaXIsIHVuc2lnbmVkIGxvbmcgYWxpZ25fbWFzaykKIHsKLQl1bnNpZ25lZCBsb25nIG5wYWdlcyA9IGlvbW11X251bV9wYWdlcyhwaHlzX21lbSwgc2l6ZSk7CisJdW5zaWduZWQgbG9uZyBucGFnZXMgPSBpb21tdV9udW1fcGFnZXMocGh5c19tZW0sIHNpemUsIFBBR0VfU0laRSk7CiAJdW5zaWduZWQgbG9uZyBpb21tdV9wYWdlID0gYWxsb2NfaW9tbXUoZGV2LCBucGFnZXMsIGFsaWduX21hc2spOwogCWludCBpOwogCkBAIC0yODUsNyArMjg1LDcgQEAKIAkJcmV0dXJuOwogCiAJaW9tbXVfcGFnZSA9IChkbWFfYWRkciAtIGlvbW11X2J1c19iYXNlKT4+UEFHRV9TSElGVDsKLQlucGFnZXMgPSBpb21tdV9udW1fcGFnZXMoZG1hX2FkZHIsIHNpemUpOworCW5wYWdlcyA9IGlvbW11X251bV9wYWdlcyhkbWFfYWRkciwgc2l6ZSwgUEFHRV9TSVpFKTsKIAlmb3IgKGkgPSAwOyBpIDwgbnBhZ2VzOyBpKyspIHsKIAkJaW9tbXVfZ2F0dF9iYXNlW2lvbW11X3BhZ2UgKyBpXSA9IGdhcnRfdW5tYXBwZWRfZW50cnk7CiAJCUNMRUFSX0xFQUsoaW9tbXVfcGFnZSArIGkpOwpAQCAtMzY4LDcgKzM2OCw3IEBACiAJCX0KIAogCQlhZGRyID0gcGh5c19hZGRyOwotCQlwYWdlcyA9IGlvbW11X251bV9wYWdlcyhzLT5vZmZzZXQsIHMtPmxlbmd0aCk7CisJCXBhZ2VzID0gaW9tbXVfbnVtX3BhZ2VzKHMtPm9mZnNldCwgcy0+bGVuZ3RoLCBQQUdFX1NJWkUpOwogCQl3aGlsZSAocGFnZXMtLSkgewogCQkJaW9tbXVfZ2F0dF9iYXNlW2lvbW11X3BhZ2VdID0gR1BURV9FTkNPREUoYWRkcik7CiAJCQlTRVRfTEVBSyhpb21tdV9wYWdlKTsKQEAgLTQ1MSw3ICs0NTEsNyBAQAogCiAJCXNlZ19zaXplICs9IHMtPmxlbmd0aDsKIAkJbmVlZCA9IG5leHRuZWVkOwotCQlwYWdlcyArPSBpb21tdV9udW1fcGFnZXMocy0+b2Zmc2V0LCBzLT5sZW5ndGgpOworCQlwYWdlcyArPSBpb21tdV9udW1fcGFnZXMocy0+b2Zmc2V0LCBzLT5sZW5ndGgsIFBBR0VfU0laRSk7CiAJCXBzID0gczsKIAl9CiAJaWYgKGRtYV9tYXBfY29udChkZXYsIHN0YXJ0X3NnLCBpIC0gc3RhcnQsIHNnbWFwLCBwYWdlcywgbmVlZCkgPCAwKQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3Byb2Nlc3NfMzIuYyBiL2FyY2gveDg2L2tlcm5lbC9wcm9jZXNzXzMyLmMKaW5kZXggOTIyYzE0MC4uMGExMzAyZiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3Byb2Nlc3NfMzIuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvcHJvY2Vzc18zMi5jCkBAIC0xMjMsNyArMTIzLDcgQEAKIAl9CiB9CiAKLXZvaWQgX19zaG93X3JlZ2lzdGVycyhzdHJ1Y3QgcHRfcmVncyAqcmVncywgaW50IGFsbCkKK3ZvaWQgX19zaG93X3JlZ3Moc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIGludCBhbGwpCiB7CiAJdW5zaWduZWQgbG9uZyBjcjAgPSAwTCwgY3IyID0gMEwsIGNyMyA9IDBMLCBjcjQgPSAwTDsKIAl1bnNpZ25lZCBsb25nIGQwLCBkMSwgZDIsIGQzLCBkNiwgZDc7CkBAIC0xODksNyArMTg5LDcgQEAKIAogdm9pZCBzaG93X3JlZ3Moc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7Ci0JX19zaG93X3JlZ2lzdGVycyhyZWdzLCAxKTsKKwlfX3Nob3dfcmVncyhyZWdzLCAxKTsKIAlzaG93X3RyYWNlKE5VTEwsIHJlZ3MsICZyZWdzLT5zcCwgcmVncy0+YnApOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvcHJvY2Vzc182NC5jIGIvYXJjaC94ODYva2VybmVsL3Byb2Nlc3NfNjQuYwppbmRleCBjYTgwMzk0Li5jZDhjMGVkIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvcHJvY2Vzc182NC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9wcm9jZXNzXzY0LmMKQEAgLTEzNiw3ICsxMzYsNyBAQAogfQogCiAvKiBQcmludHMgYWxzbyBzb21lIHN0YXRlIHRoYXQgaXNuJ3Qgc2F2ZWQgaW4gdGhlIHB0X3JlZ3MgKi8KLXZvaWQgX19zaG93X3JlZ3Moc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit2b2lkIF9fc2hvd19yZWdzKHN0cnVjdCBwdF9yZWdzICpyZWdzLCBpbnQgYWxsKQogewogCXVuc2lnbmVkIGxvbmcgY3IwID0gMEwsIGNyMiA9IDBMLCBjcjMgPSAwTCwgY3I0ID0gMEwsIGZzLCBncywgc2hhZG93Z3M7CiAJdW5zaWduZWQgbG9uZyBkMCwgZDEsIGQyLCBkMywgZDYsIGQ3OwpAQCAtMTc1LDYgKzE3NSw5IEBACiAJcmRtc3JsKE1TUl9HU19CQVNFLCBncyk7CiAJcmRtc3JsKE1TUl9LRVJORUxfR1NfQkFTRSwgc2hhZG93Z3MpOwogCisJaWYgKCFhbGwpCisJCXJldHVybjsKKwogCWNyMCA9IHJlYWRfY3IwKCk7CiAJY3IyID0gcmVhZF9jcjIoKTsKIAljcjMgPSByZWFkX2NyMygpOwpAQCAtMjAwLDcgKzIwMyw3IEBACiB2b2lkIHNob3dfcmVncyhzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKIAlwcmludGsoS0VSTl9JTkZPICJDUFUgJWQ6Iiwgc21wX3Byb2Nlc3Nvcl9pZCgpKTsKLQlfX3Nob3dfcmVncyhyZWdzKTsKKwlfX3Nob3dfcmVncyhyZWdzLCAxKTsKIAlzaG93X3RyYWNlKE5VTEwsIHJlZ3MsICh2b2lkICopKHJlZ3MgKyAxKSwgcmVncy0+YnApOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvcHZjbG9jay5jIGIvYXJjaC94ODYva2VybmVsL3B2Y2xvY2suYwppbmRleCAwNWZiZTlhLi40ZjljNTVmIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvcHZjbG9jay5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9wdmNsb2NrLmMKQEAgLTk3LDYgKzk3LDE4IEBACiAJcmV0dXJuIGRzdC0+dmVyc2lvbjsKIH0KIAordW5zaWduZWQgbG9uZyBwdmNsb2NrX3RzY19raHooc3RydWN0IHB2Y2xvY2tfdmNwdV90aW1lX2luZm8gKnNyYykKK3sKKwl1NjQgcHZfdHNjX2toeiA9IDEwMDAwMDBVTEwgPDwgMzI7CisKKwlkb19kaXYocHZfdHNjX2toeiwgc3JjLT50c2NfdG9fc3lzdGVtX211bCk7CisJaWYgKHNyYy0+dHNjX3NoaWZ0IDwgMCkKKwkJcHZfdHNjX2toeiA8PD0gLXNyYy0+dHNjX3NoaWZ0OworCWVsc2UKKwkJcHZfdHNjX2toeiA+Pj0gc3JjLT50c2Nfc2hpZnQ7CisJcmV0dXJuIHB2X3RzY19raHo7Cit9CisKIGN5Y2xlX3QgcHZjbG9ja19jbG9ja3NvdXJjZV9yZWFkKHN0cnVjdCBwdmNsb2NrX3ZjcHVfdGltZV9pbmZvICpzcmMpCiB7CiAJc3RydWN0IHB2Y2xvY2tfc2hhZG93X3RpbWUgc2hhZG93OwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3F1aXJrcy5jIGIvYXJjaC94ODYva2VybmVsL3F1aXJrcy5jCmluZGV4IGQxMzg1ODguLjY3NDY1ZWQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9xdWlya3MuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvcXVpcmtzLmMKQEAgLTM1LDkgKzM1LDYgQEAKIAlpZiAoISh3b3JkICYgKDEgPDwgMTMpKSkgewogCQlkZXZfaW5mbygmZGV2LT5kZXYsICJJbnRlbCBFNzUyMC83MzIwLzc1MjUgZGV0ZWN0ZWQ7ICIKIAkJCSJkaXNhYmxpbmcgaXJxIGJhbGFuY2luZyBhbmQgYWZmaW5pdHlcbiIpOwotI2lmZGVmIENPTkZJR19JUlFCQUxBTkNFCi0JCWlycWJhbGFuY2VfZGlzYWJsZSgiIik7Ci0jZW5kaWYKIAkJbm9pcnFkZWJ1Z19zZXR1cCgiIik7CiAjaWZkZWYgQ09ORklHX1BST0NfRlMKIAkJbm9faXJxX2FmZmluaXR5ID0gMTsKQEAgLTM1NCw5ICszNTEsMjcgQEAKIAlwcmludGsoS0VSTl9ERUJVRyAiRm9yY2UgZW5hYmxlZCBIUEVUIGF0IHJlc3VtZVxuIik7CiB9CiAKK3N0YXRpYyB1MzIgYXRpX2l4cDR4MF9yZXYoc3RydWN0IHBjaV9kZXYgKmRldikKK3sKKwl1MzIgZDsKKwl1OCAgYjsKKworCXBjaV9yZWFkX2NvbmZpZ19ieXRlKGRldiwgMHhhYywgJmIpOworCWIgJj0gfigxPDw1KTsKKwlwY2lfd3JpdGVfY29uZmlnX2J5dGUoZGV2LCAweGFjLCBiKTsKKwlwY2lfcmVhZF9jb25maWdfZHdvcmQoZGV2LCAweDcwLCAmZCk7CisJZCB8PSAxPDw4OworCXBjaV93cml0ZV9jb25maWdfZHdvcmQoZGV2LCAweDcwLCBkKTsKKwlwY2lfcmVhZF9jb25maWdfZHdvcmQoZGV2LCAweDgsICZkKTsKKwlkICY9IDB4ZmY7CisJZGV2X3ByaW50ayhLRVJOX0RFQlVHLCAmZGV2LT5kZXYsICJTQjRYMCByZXZpc2lvbiAweCV4XG4iLCBkKTsKKwlyZXR1cm4gZDsKK30KKwogc3RhdGljIHZvaWQgYXRpX2ZvcmNlX2VuYWJsZV9ocGV0KHN0cnVjdCBwY2lfZGV2ICpkZXYpCiB7Ci0JdTMyIHVuaW5pdGlhbGl6ZWRfdmFyKHZhbCk7CisJdTMyIGQsIHZhbDsKKwl1OCAgYjsKIAogCWlmIChocGV0X2FkZHJlc3MgfHwgZm9yY2VfaHBldF9hZGRyZXNzKQogCQlyZXR1cm47CkBAIC0zNjYsMTQgKzM4MSwzMyBAQAogCQlyZXR1cm47CiAJfQogCisJZCA9IGF0aV9peHA0eDBfcmV2KGRldik7CisJaWYgKGQgIDwgMHg4MikKKwkJcmV0dXJuOworCisJLyogYmFzZSBhZGRyZXNzICovCiAJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChkZXYsIDB4MTQsIDB4ZmVkMDAwMDApOwogCXBjaV9yZWFkX2NvbmZpZ19kd29yZChkZXYsIDB4MTQsICZ2YWwpOworCisJLyogZW5hYmxlIGludGVycnVwdCAqLworCW91dGIoMHg3MiwgMHhjZDYpOyBiID0gaW5iKDB4Y2Q3KTsKKwliIHw9IDB4MTsKKwlvdXRiKDB4NzIsIDB4Y2Q2KTsgb3V0YihiLCAweGNkNyk7CisJb3V0YigweDcyLCAweGNkNik7IGIgPSBpbmIoMHhjZDcpOworCWlmICghKGIgJiAweDEpKQorCQlyZXR1cm47CisJcGNpX3JlYWRfY29uZmlnX2R3b3JkKGRldiwgMHg2NCwgJmQpOworCWQgfD0gKDE8PDEwKTsKKwlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKGRldiwgMHg2NCwgZCk7CisJcGNpX3JlYWRfY29uZmlnX2R3b3JkKGRldiwgMHg2NCwgJmQpOworCWlmICghKGQgJiAoMTw8MTApKSkKKwkJcmV0dXJuOworCiAJZm9yY2VfaHBldF9hZGRyZXNzID0gdmFsOwogCWZvcmNlX2hwZXRfcmVzdW1lX3R5cGUgPSBBVElfRk9SQ0VfSFBFVF9SRVNVTUU7CiAJZGV2X3ByaW50ayhLRVJOX0RFQlVHLCAmZGV2LT5kZXYsICJGb3JjZSBlbmFibGVkIEhQRVQgYXQgMHglbHhcbiIsCiAJCSAgIGZvcmNlX2hwZXRfYWRkcmVzcyk7CiAJY2FjaGVkX2RldiA9IGRldjsKLQlyZXR1cm47CiB9CiBERUNMQVJFX1BDSV9GSVhVUF9IRUFERVIoUENJX1ZFTkRPUl9JRF9BVEksIFBDSV9ERVZJQ0VfSURfQVRJX0lYUDQwMF9TTUJVUywKIAkJCSBhdGlfZm9yY2VfZW5hYmxlX2hwZXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3J0Yy5jIGIvYXJjaC94ODYva2VybmVsL3J0Yy5jCmluZGV4IDA1MTkxYmIuLmRkNmYyYjcgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9ydGMuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvcnRjLmMKQEAgLTUyLDcgKzUyLDcgQEAKIAogCWNtb3NfbWludXRlcyA9IENNT1NfUkVBRChSVENfTUlOVVRFUyk7CiAJaWYgKCEoc2F2ZV9jb250cm9sICYgUlRDX0RNX0JJTkFSWSkgfHwgUlRDX0FMV0FZU19CQ0QpCi0JCUJDRF9UT19CSU4oY21vc19taW51dGVzKTsKKwkJY21vc19taW51dGVzID0gYmNkMmJpbihjbW9zX21pbnV0ZXMpOwogCiAJLyoKIAkgKiBzaW5jZSB3ZSdyZSBvbmx5IGFkanVzdGluZyBtaW51dGVzIGFuZCBzZWNvbmRzLApAQCAtNjksOCArNjksOCBAQAogCiAJaWYgKGFicyhyZWFsX21pbnV0ZXMgLSBjbW9zX21pbnV0ZXMpIDwgMzApIHsKIAkJaWYgKCEoc2F2ZV9jb250cm9sICYgUlRDX0RNX0JJTkFSWSkgfHwgUlRDX0FMV0FZU19CQ0QpIHsKLQkJCUJJTl9UT19CQ0QocmVhbF9zZWNvbmRzKTsKLQkJCUJJTl9UT19CQ0QocmVhbF9taW51dGVzKTsKKwkJCXJlYWxfc2Vjb25kcyA9IGJpbjJiY2QocmVhbF9zZWNvbmRzKTsKKwkJCXJlYWxfbWludXRlcyA9IGJpbjJiY2QocmVhbF9taW51dGVzKTsKIAkJfQogCQlDTU9TX1dSSVRFKHJlYWxfc2Vjb25kcyxSVENfU0VDT05EUyk7CiAJCUNNT1NfV1JJVEUocmVhbF9taW51dGVzLFJUQ19NSU5VVEVTKTsKQEAgLTEyNCwxNiArMTI0LDE2IEBACiAJV0FSTl9PTl9PTkNFKFJUQ19BTFdBWVNfQkNEICYmIChzdGF0dXMgJiBSVENfRE1fQklOQVJZKSk7CiAKIAlpZiAoUlRDX0FMV0FZU19CQ0QgfHwgIShzdGF0dXMgJiBSVENfRE1fQklOQVJZKSkgewotCQlCQ0RfVE9fQklOKHNlYyk7Ci0JCUJDRF9UT19CSU4obWluKTsKLQkJQkNEX1RPX0JJTihob3VyKTsKLQkJQkNEX1RPX0JJTihkYXkpOwotCQlCQ0RfVE9fQklOKG1vbik7Ci0JCUJDRF9UT19CSU4oeWVhcik7CisJCXNlYyA9IGJjZDJiaW4oc2VjKTsKKwkJbWluID0gYmNkMmJpbihtaW4pOworCQlob3VyID0gYmNkMmJpbihob3VyKTsKKwkJZGF5ID0gYmNkMmJpbihkYXkpOworCQltb24gPSBiY2QyYmluKG1vbik7CisJCXllYXIgPSBiY2QyYmluKHllYXIpOwogCX0KIAogCWlmIChjZW50dXJ5KSB7Ci0JCUJDRF9UT19CSU4oY2VudHVyeSk7CisJCWNlbnR1cnkgPSBiY2QyYmluKGNlbnR1cnkpOwogCQl5ZWFyICs9IGNlbnR1cnkgKiAxMDA7CiAJCXByaW50ayhLRVJOX0lORk8gIkV4dGVuZGVkIENNT1MgeWVhcjogJWRcbiIsIGNlbnR1cnkgKiAxMDApOwogCX0gZWxzZQpAQCAtMjIzLDExICsyMjMsMjUgQEAKIHN0YXRpYyBfX2luaXQgaW50IGFkZF9ydGNfY21vcyh2b2lkKQogewogI2lmZGVmIENPTkZJR19QTlAKLQlpZiAoIXBucF9wbGF0Zm9ybV9kZXZpY2VzKQotCQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJnJ0Y19kZXZpY2UpOwotI2Vsc2UKKwlzdGF0aWMgY29uc3QgY2hhciAqaWRzW10gX19pbml0Y29uc3QgPQorCSAgICB7ICJQTlAwYjAwIiwgIlBOUDBiMDEiLCAiUE5QMGIwMiIsIH07CisJc3RydWN0IHBucF9kZXYgKmRldjsKKwlzdHJ1Y3QgcG5wX2lkICppZDsKKwlpbnQgaTsKKworCXBucF9mb3JfZWFjaF9kZXYoZGV2KSB7CisJCWZvciAoaWQgPSBkZXYtPmlkOyBpZDsgaWQgPSBpZC0+bmV4dCkgeworCQkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoaWRzKTsgaSsrKSB7CisJCQkJaWYgKGNvbXBhcmVfcG5wX2lkKGlkLCBpZHNbaV0pICE9IDApCisJCQkJCXJldHVybiAwOworCQkJfQorCQl9CisJfQorI2VuZGlmCisKIAlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJnJ0Y19kZXZpY2UpOwotI2VuZGlmIC8qIENPTkZJR19QTlAgKi8KKwlkZXZfaW5mbygmcnRjX2RldmljZS5kZXYsCisJCSAicmVnaXN0ZXJlZCBwbGF0Zm9ybSBSVEMgZGV2aWNlIChubyBQTlAgZGV2aWNlIGZvdW5kKVxuIik7CiAJcmV0dXJuIDA7CiB9CiBkZXZpY2VfaW5pdGNhbGwoYWRkX3J0Y19jbW9zKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9zZXR1cC5jIGIvYXJjaC94ODYva2VybmVsL3NldHVwLmMKaW5kZXggMjFiOGUwYS4uMGZhNjc5MCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3NldHVwLmMKKysrIGIvYXJjaC94ODYva2VybmVsL3NldHVwLmMKQEAgLTMwMiw3ICszMDIsNyBAQAogCQlpZiAoY2xlbiA+IE1BWF9NQVBfQ0hVTkstc2xvcCkKIAkJCWNsZW4gPSBNQVhfTUFQX0NIVU5LLXNsb3A7CiAJCW1hcGFkZHIgPSByYW1kaXNrX2ltYWdlICYgUEFHRV9NQVNLOwotCQlwID0gZWFybHlfaW9yZW1hcChtYXBhZGRyLCBjbGVuK3Nsb3ApOworCQlwID0gZWFybHlfbWVtcmVtYXAobWFwYWRkciwgY2xlbitzbG9wKTsKIAkJbWVtY3B5KHEsIHArc2xvcCwgY2xlbik7CiAJCWVhcmx5X2lvdW5tYXAocCwgY2xlbitzbG9wKTsKIAkJcSArPSBjbGVuOwpAQCAtMzc5LDcgKzM3OSw3IEBACiAJCXJldHVybjsKIAlwYV9kYXRhID0gYm9vdF9wYXJhbXMuaGRyLnNldHVwX2RhdGE7CiAJd2hpbGUgKHBhX2RhdGEpIHsKLQkJZGF0YSA9IGVhcmx5X2lvcmVtYXAocGFfZGF0YSwgUEFHRV9TSVpFKTsKKwkJZGF0YSA9IGVhcmx5X21lbXJlbWFwKHBhX2RhdGEsIFBBR0VfU0laRSk7CiAJCXN3aXRjaCAoZGF0YS0+dHlwZSkgewogCQljYXNlIFNFVFVQX0U4MjBfRVhUOgogCQkJcGFyc2VfZTgyMF9leHQoZGF0YSwgcGFfZGF0YSk7CkBAIC00MDIsNyArNDAyLDcgQEAKIAkJcmV0dXJuOwogCXBhX2RhdGEgPSBib290X3BhcmFtcy5oZHIuc2V0dXBfZGF0YTsKIAl3aGlsZSAocGFfZGF0YSkgewotCQlkYXRhID0gZWFybHlfaW9yZW1hcChwYV9kYXRhLCBzaXplb2YoKmRhdGEpKTsKKwkJZGF0YSA9IGVhcmx5X21lbXJlbWFwKHBhX2RhdGEsIHNpemVvZigqZGF0YSkpOwogCQllODIwX3VwZGF0ZV9yYW5nZShwYV9kYXRhLCBzaXplb2YoKmRhdGEpK2RhdGEtPmxlbiwKIAkJCSBFODIwX1JBTSwgRTgyMF9SRVNFUlZFRF9LRVJOKTsKIAkJZm91bmQgPSAxOwpAQCAtNDI4LDcgKzQyOCw3IEBACiAJCXJldHVybjsKIAlwYV9kYXRhID0gYm9vdF9wYXJhbXMuaGRyLnNldHVwX2RhdGE7CiAJd2hpbGUgKHBhX2RhdGEpIHsKLQkJZGF0YSA9IGVhcmx5X2lvcmVtYXAocGFfZGF0YSwgc2l6ZW9mKCpkYXRhKSk7CisJCWRhdGEgPSBlYXJseV9tZW1yZW1hcChwYV9kYXRhLCBzaXplb2YoKmRhdGEpKTsKIAkJc3ByaW50ZihidWYsICJzZXR1cCBkYXRhICV4IiwgZGF0YS0+dHlwZSk7CiAJCXJlc2VydmVfZWFybHkocGFfZGF0YSwgcGFfZGF0YStzaXplb2YoKmRhdGEpK2RhdGEtPmxlbiwgYnVmKTsKIAkJcGFfZGF0YSA9IGRhdGEtPm5leHQ7CkBAIC01NjEsNyArNTYxLDEzIEBACiAKIH0KIAotI2lmZGVmIENPTkZJR19QUk9DX1ZNQ09SRQorLyoKKyAqIE5vdGU6IGVsZmNvcmVoZHJfYWRkciBpcyBub3QganVzdCBsaW1pdGVkIHRvIHZtY29yZS4gSXQgaXMgYWxzbyB1c2VkIGJ5CisgKiBpc19rZHVtcF9rZXJuZWwoKSB0byBkZXRlcm1pbmUgaWYgd2UgYXJlIGJvb3RpbmcgYWZ0ZXIgYSBwYW5pYy4gSGVuY2UKKyAqIGlmZGVmIGl0IHVuZGVyIENPTkZJR19DUkFTSF9EVU1QIGFuZCBub3QgQ09ORklHX1BST0NfVk1DT1JFLgorICovCisKKyNpZmRlZiBDT05GSUdfQ1JBU0hfRFVNUAogLyogZWxmY29yZWhkcj0gc3BlY2lmaWVzIHRoZSBsb2NhdGlvbiBvZiBlbGYgY29yZSBoZWFkZXIKICAqIHN0b3JlZCBieSB0aGUgY3Jhc2hlZCBrZXJuZWwuIFRoaXMgb3B0aW9uIHdpbGwgYmUgcGFzc2VkCiAgKiBieSBrZXhlYyBsb2FkZXIgdG8gdGhlIGNhcHR1cmUga2VybmVsLgpAQCAtOTk4LDYgKzEwMDQsOCBAQAogCSAqLwogCWFjcGlfYm9vdF90YWJsZV9pbml0KCk7CiAKKwllYXJseV9hY3BpX2Jvb3RfaW5pdCgpOworCiAjaWZkZWYgQ09ORklHX0FDUElfTlVNQQogCS8qCiAJICogUGFyc2UgU1JBVCB0byBkaXNjb3ZlciBub2Rlcy4KQEAgLTEwNjUsNiArMTA3Myw3IEBACiAjZW5kaWYKIAogCXByZWZpbGxfcG9zc2libGVfbWFwKCk7CisKICNpZmRlZiBDT05GSUdfWDg2XzY0CiAJaW5pdF9jcHVfdG9fbm9kZSgpOwogI2VuZGlmCkBAIC0xMDcyLDYgKzEwODEsOSBAQAogCWluaXRfYXBpY19tYXBwaW5ncygpOwogCWlvYXBpY19pbml0X21hcHBpbmdzKCk7CiAKKwkvKiBuZWVkIHRvIHdhaXQgZm9yIGlvX2FwaWMgaXMgbWFwcGVkICovCisJbnJfaXJxcyA9IHByb2JlX25yX2lycXMoKTsKKwogCWt2bV9ndWVzdF9pbml0KCk7CiAKIAllODIwX3Jlc2VydmVfcmVzb3VyY2VzKCk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvc2V0dXBfcGVyY3B1LmMgYi9hcmNoL3g4Ni9rZXJuZWwvc2V0dXBfcGVyY3B1LmMKaW5kZXggMGU2N2Y3Mi4uNDEwYzg4ZiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3NldHVwX3BlcmNwdS5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9zZXR1cF9wZXJjcHUuYwpAQCAtMTQwLDI1ICsxNDAsMzAgQEAKICAqLwogdm9pZCBfX2luaXQgc2V0dXBfcGVyX2NwdV9hcmVhcyh2b2lkKQogewotCXNzaXplX3Qgc2l6ZSA9IFBFUkNQVV9FTk9VR0hfUk9PTTsKKwlzc2l6ZV90IHNpemUsIG9sZF9zaXplOwogCWNoYXIgKnB0cjsKIAlpbnQgY3B1OworCXVuc2lnbmVkIGxvbmcgYWxpZ24gPSAxOwogCiAJLyogU2V0dXAgY3B1X3BkYSBtYXAgKi8KIAlzZXR1cF9jcHVfcGRhX21hcCgpOwogCiAJLyogQ29weSBzZWN0aW9uIGZvciBlYWNoIENQVSAod2UgZGlzY2FyZCB0aGUgb3JpZ2luYWwpICovCi0Jc2l6ZSA9IFBFUkNQVV9FTk9VR0hfUk9PTTsKKwlvbGRfc2l6ZSA9IFBFUkNQVV9FTk9VR0hfUk9PTTsKKwlhbGlnbiA9IG1heF90KHVuc2lnbmVkIGxvbmcsIFBBR0VfU0laRSwgYWxpZ24pOworCXNpemUgPSByb3VuZHVwKG9sZF9zaXplLCBhbGlnbik7CiAJcHJpbnRrKEtFUk5fSU5GTyAiUEVSQ1BVOiBBbGxvY2F0aW5nICV6ZCBieXRlcyBvZiBwZXIgY3B1IGRhdGFcbiIsCiAJCQkgIHNpemUpOwogCiAJZm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkgewogI2lmbmRlZiBDT05GSUdfTkVFRF9NVUxUSVBMRV9OT0RFUwotCQlwdHIgPSBhbGxvY19ib290bWVtX3BhZ2VzKHNpemUpOworCQlwdHIgPSBfX2FsbG9jX2Jvb3RtZW0oc2l6ZSwgYWxpZ24sCisJCQkJIF9fcGEoTUFYX0RNQV9BRERSRVNTKSk7CiAjZWxzZQogCQlpbnQgbm9kZSA9IGVhcmx5X2NwdV90b19ub2RlKGNwdSk7CiAJCWlmICghbm9kZV9vbmxpbmUobm9kZSkgfHwgIU5PREVfREFUQShub2RlKSkgewotCQkJcHRyID0gYWxsb2NfYm9vdG1lbV9wYWdlcyhzaXplKTsKKwkJCXB0ciA9IF9fYWxsb2NfYm9vdG1lbShzaXplLCBhbGlnbiwKKwkJCQkJIF9fcGEoTUFYX0RNQV9BRERSRVNTKSk7CiAJCQlwcmludGsoS0VSTl9JTkZPCiAJCQkgICAgICAgImNwdSAlZCBoYXMgbm8gbm9kZSAlZCBvciBub2RlLWxvY2FsIG1lbW9yeVxuIiwKIAkJCQljcHUsIG5vZGUpOwpAQCAtMTY3LDcgKzE3Miw4IEBACiAJCQkJCSBjcHUsIF9fcGEocHRyKSk7CiAJCX0KIAkJZWxzZSB7Ci0JCQlwdHIgPSBhbGxvY19ib290bWVtX3BhZ2VzX25vZGUoTk9ERV9EQVRBKG5vZGUpLCBzaXplKTsKKwkJCXB0ciA9IF9fYWxsb2NfYm9vdG1lbV9ub2RlKE5PREVfREFUQShub2RlKSwgc2l6ZSwgYWxpZ24sCisJCQkJCQkJX19wYShNQVhfRE1BX0FERFJFU1MpKTsKIAkJCWlmIChwdHIpCiAJCQkJcHJpbnRrKEtFUk5fREVCVUcgInBlciBjcHUgZGF0YSBmb3IgY3B1JWQgb24gbm9kZSVkIGF0ICUwMTZseFxuIiwKIAkJCQkJIGNwdSwgbm9kZSwgX19wYShwdHIpKTsKQEAgLTE3NSw3ICsxODEsNiBAQAogI2VuZGlmCiAJCXBlcl9jcHVfb2Zmc2V0KGNwdSkgPSBwdHIgLSBfX3Blcl9jcHVfc3RhcnQ7CiAJCW1lbWNweShwdHIsIF9fcGVyX2NwdV9zdGFydCwgX19wZXJfY3B1X2VuZCAtIF9fcGVyX2NwdV9zdGFydCk7Ci0KIAl9CiAKIAlwcmludGsoS0VSTl9ERUJVRyAiTlJfQ1BVUzogJWQsIG5yX2NwdV9pZHM6ICVkLCBucl9ub2RlX2lkcyAlZFxuIiwKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9zbXBib290LmMgYi9hcmNoL3g4Ni9rZXJuZWwvc21wYm9vdC5jCmluZGV4IDc2YjZmNTAuLjdlY2U4MTUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9zbXBib290LmMKKysrIGIvYXJjaC94ODYva2VybmVsL3NtcGJvb3QuYwpAQCAtMjgyLDYgKzI4Miw4IEBACiAJY3B1X3NldChjcHVpZCwgY3B1X2NhbGxpbl9tYXApOwogfQogCitzdGF0aWMgaW50IF9fY3B1aW5pdGRhdGEgdW5zYWZlX3NtcDsKKwogLyoKICAqIEFjdGl2YXRlIGEgc2Vjb25kYXJ5IHByb2Nlc3Nvci4KICAqLwpAQCAtMzM0LDE0ICszMzYsMTcgQEAKIAkgKiBkb2VzIG5vdCBjaGFuZ2Ugd2hpbGUgd2UgYXJlIGFzc2lnbmluZyB2ZWN0b3JzIHRvIGNwdXMuICBIb2xkaW5nCiAJICogdGhpcyBsb2NrIGVuc3VyZXMgd2UgZG9uJ3QgaGFsZiBhc3NpZ24gb3IgcmVtb3ZlIGFuIGlycSBmcm9tIGEgY3B1LgogCSAqLwotCWlwaV9jYWxsX2xvY2tfaXJxKCk7CisJaXBpX2NhbGxfbG9jaygpOwogCWxvY2tfdmVjdG9yX2xvY2soKTsKIAlfX3NldHVwX3ZlY3Rvcl9pcnEoc21wX3Byb2Nlc3Nvcl9pZCgpKTsKIAljcHVfc2V0KHNtcF9wcm9jZXNzb3JfaWQoKSwgY3B1X29ubGluZV9tYXApOwogCXVubG9ja192ZWN0b3JfbG9jaygpOwotCWlwaV9jYWxsX3VubG9ja19pcnEoKTsKKwlpcGlfY2FsbF91bmxvY2soKTsKIAlwZXJfY3B1KGNwdV9zdGF0ZSwgc21wX3Byb2Nlc3Nvcl9pZCgpKSA9IENQVV9PTkxJTkU7CiAKKwkvKiBlbmFibGUgbG9jYWwgaW50ZXJydXB0cyAqLworCWxvY2FsX2lycV9lbmFibGUoKTsKKwogCXNldHVwX3NlY29uZGFyeV9jbG9jaygpOwogCiAJd21iKCk7CkBAIC0zOTQsNyArMzk5LDcgQEAKIAkJCQlnb3RvIHZhbGlkX2s3OwogCiAJCS8qIElmIHdlIGdldCBoZXJlLCBub3QgYSBjZXJ0aWZpZWQgU01QIGNhcGFibGUgQU1EIHN5c3RlbS4gKi8KLQkJYWRkX3RhaW50KFRBSU5UX1VOU0FGRV9TTVApOworCQl1bnNhZmVfc21wID0gMTsKIAl9CiAKIHZhbGlkX2s3OgpAQCAtNDExLDEyICs0MTYsMTAgQEAKIAkgKiBEb24ndCB0YWludCBpZiB3ZSBhcmUgcnVubmluZyBTTVAga2VybmVsIG9uIGEgc2luZ2xlIG5vbi1NUAogCSAqIGFwcHJvdmVkIEF0aGxvbgogCSAqLwotCWlmICh0YWludGVkICYgVEFJTlRfVU5TQUZFX1NNUCkgewotCQlpZiAobnVtX29ubGluZV9jcHVzKCkpCi0JCQlwcmludGsoS0VSTl9JTkZPICJXQVJOSU5HOiBUaGlzIGNvbWJpbmF0aW9uIG9mIEFNRCIKLQkJCQkicHJvY2Vzc29ycyBpcyBub3Qgc3VpdGFibGUgZm9yIFNNUC5cbiIpOwotCQllbHNlCi0JCQl0YWludGVkICY9IH5UQUlOVF9VTlNBRkVfU01QOworCWlmICh1bnNhZmVfc21wICYmIG51bV9vbmxpbmVfY3B1cygpID4gMSkgeworCQlwcmludGsoS0VSTl9JTkZPICJXQVJOSU5HOiBUaGlzIGNvbWJpbmF0aW9uIG9mIEFNRCIKKwkJCSJwcm9jZXNzb3JzIGlzIG5vdCBzdWl0YWJsZSBmb3IgU01QLlxuIik7CisJCWFkZF90YWludChUQUlOVF9VTlNBRkVfU01QKTsKIAl9CiB9CiAKQEAgLTU0MCwxMCArNTQzLDEwIEBACiAJaW50IHRpbWVvdXQ7CiAJdTMyIHN0YXR1czsKIAotCXByaW50ayhLRVJOX0lORk8gIklucXVpcmluZyByZW1vdGUgQVBJQyAjJWQuLi5cbiIsIGFwaWNpZCk7CisJcHJpbnRrKEtFUk5fSU5GTyAiSW5xdWlyaW5nIHJlbW90ZSBBUElDIDB4JXguLi5cbiIsIGFwaWNpZCk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShyZWdzKTsgaSsrKSB7Ci0JCXByaW50ayhLRVJOX0lORk8gIi4uLiBBUElDICMlZCAlczogIiwgYXBpY2lkLCBuYW1lc1tpXSk7CisJCXByaW50ayhLRVJOX0lORk8gIi4uLiBBUElDIDB4JXggJXM6ICIsIGFwaWNpZCwgbmFtZXNbaV0pOwogCiAJCS8qCiAJCSAqIFdhaXQgZm9yIGlkbGUuCkBAIC01OTYsMTAgKzU5OSwxMiBAQAogCSAqIEdpdmUgdGhlIG90aGVyIENQVSBzb21lIHRpbWUgdG8gYWNjZXB0IHRoZSBJUEkuCiAJICovCiAJdWRlbGF5KDIwMCk7Ci0JbWF4bHZ0ID0gbGFwaWNfZ2V0X21heGx2dCgpOwotCWlmIChtYXhsdnQgPiAzKQkJCS8qIER1ZSB0byB0aGUgUGVudGl1bSBlcnJhdHVtIDNBUC4gICovCi0JCWFwaWNfd3JpdGUoQVBJQ19FU1IsIDApOwotCWFjY2VwdF9zdGF0dXMgPSAoYXBpY19yZWFkKEFQSUNfRVNSKSAmIDB4RUYpOworCWlmIChBUElDX0lOVEVHUkFURUQoYXBpY192ZXJzaW9uW3BoeXNfYXBpY2lkXSkpIHsKKwkJbWF4bHZ0ID0gbGFwaWNfZ2V0X21heGx2dCgpOworCQlpZiAobWF4bHZ0ID4gMykJCQkvKiBEdWUgdG8gdGhlIFBlbnRpdW0gZXJyYXR1bSAzQVAuICAqLworCQkJYXBpY193cml0ZShBUElDX0VTUiwgMCk7CisJCWFjY2VwdF9zdGF0dXMgPSAoYXBpY19yZWFkKEFQSUNfRVNSKSAmIDB4RUYpOworCX0KIAlwcl9kZWJ1ZygiTk1JIHNlbnQuXG4iKTsKIAogCWlmIChzZW5kX3N0YXR1cykKQEAgLTg2OSw3ICs4NzQsNyBAQAogCXN0YXJ0X2lwID0gc2V0dXBfdHJhbXBvbGluZSgpOwogCiAJLyogU28gd2Ugc2VlIHdoYXQncyB1cCAgICovCi0JcHJpbnRrKEtFUk5fSU5GTyAiQm9vdGluZyBwcm9jZXNzb3IgJWQvJWQgaXAgJWx4XG4iLAorCXByaW50ayhLRVJOX0lORk8gIkJvb3RpbmcgcHJvY2Vzc29yICVkIEFQSUMgMHgleCBpcCAweCVseFxuIiwKIAkJCSAgY3B1LCBhcGljaWQsIHN0YXJ0X2lwKTsKIAogCS8qCkBAIC0xMjU2LDYgKzEyNjEsNDQgQEAKIAljaGVja19ubWlfd2F0Y2hkb2coKTsKIH0KIAorLyoKKyAqIGNwdV9wb3NzaWJsZV9tYXAgc2hvdWxkIGJlIHN0YXRpYywgaXQgY2Fubm90IGNoYW5nZSBhcyBjcHUncworICogYXJlIG9ubGluZWQsIG9yIG9mZmxpbmVkLiBUaGUgcmVhc29uIGlzIHBlci1jcHUgZGF0YS1zdHJ1Y3R1cmVzCisgKiBhcmUgYWxsb2NhdGVkIGJ5IHNvbWUgbW9kdWxlcyBhdCBpbml0IHRpbWUsIGFuZCBkb250IGV4cGVjdCB0bworICogZG8gdGhpcyBkeW5hbWljYWxseSBvbiBjcHUgYXJyaXZhbC9kZXBhcnR1cmUuCisgKiBjcHVfcHJlc2VudF9tYXAgb24gdGhlIG90aGVyIGhhbmQgY2FuIGNoYW5nZSBkeW5hbWljYWxseS4KKyAqIEluIGNhc2Ugd2hlbiBjcHVfaG90cGx1ZyBpcyBub3QgY29tcGlsZWQsIHRoZW4gd2UgcmVzb3J0IHRvIGN1cnJlbnQKKyAqIGJlaGF2aW91ciwgd2hpY2ggaXMgY3B1X3Bvc3NpYmxlID09IGNwdV9wcmVzZW50LgorICogLSBBc2hvayBSYWoKKyAqCisgKiBUaHJlZSB3YXlzIHRvIGZpbmQgb3V0IHRoZSBudW1iZXIgb2YgYWRkaXRpb25hbCBob3RwbHVnIENQVXM6CisgKiAtIElmIHRoZSBCSU9TIHNwZWNpZmllZCBkaXNhYmxlZCBDUFVzIGluIEFDUEkvbXB0YWJsZXMgdXNlIHRoYXQuCisgKiAtIFRoZSB1c2VyIGNhbiBvdmVyd3JpdGUgaXQgd2l0aCBhZGRpdGlvbmFsX2NwdXM9TlVNCisgKiAtIE90aGVyd2lzZSBkb24ndCByZXNlcnZlIGFkZGl0aW9uYWwgQ1BVcy4KKyAqIFdlIGRvIHRoaXMgYmVjYXVzZSBhZGRpdGlvbmFsIENQVXMgd2FzdGUgYSBsb3Qgb2YgbWVtb3J5LgorICogLUFLCisgKi8KK19faW5pdCB2b2lkIHByZWZpbGxfcG9zc2libGVfbWFwKHZvaWQpCit7CisJaW50IGksIHBvc3NpYmxlOworCisJLyogbm8gcHJvY2Vzc29yIGZyb20gbXB0YWJsZSBvciBtYWR0ICovCisJaWYgKCFudW1fcHJvY2Vzc29ycykKKwkJbnVtX3Byb2Nlc3NvcnMgPSAxOworCisJcG9zc2libGUgPSBudW1fcHJvY2Vzc29ycyArIGRpc2FibGVkX2NwdXM7CisJaWYgKHBvc3NpYmxlID4gTlJfQ1BVUykKKwkJcG9zc2libGUgPSBOUl9DUFVTOworCisJcHJpbnRrKEtFUk5fSU5GTyAiU01QOiBBbGxvd2luZyAlZCBDUFVzLCAlZCBob3RwbHVnIENQVXNcbiIsCisJCXBvc3NpYmxlLCBtYXhfdChpbnQsIHBvc3NpYmxlIC0gbnVtX3Byb2Nlc3NvcnMsIDApKTsKKworCWZvciAoaSA9IDA7IGkgPCBwb3NzaWJsZTsgaSsrKQorCQljcHVfc2V0KGksIGNwdV9wb3NzaWJsZV9tYXApOworCisJbnJfY3B1X2lkcyA9IHBvc3NpYmxlOworfQorCiAjaWZkZWYgQ09ORklHX0hPVFBMVUdfQ1BVCiAKIHN0YXRpYyB2b2lkIHJlbW92ZV9zaWJsaW5naW5mbyhpbnQgY3B1KQpAQCAtMTI4MSw2MCArMTMyNCw2IEBACiAJY3B1X2NsZWFyKGNwdSwgY3B1X3NpYmxpbmdfc2V0dXBfbWFwKTsKIH0KIAotc3RhdGljIGludCBhZGRpdGlvbmFsX2NwdXMgX19pbml0ZGF0YSA9IC0xOwotCi1zdGF0aWMgX19pbml0IGludCBzZXR1cF9hZGRpdGlvbmFsX2NwdXMoY2hhciAqcykKLXsKLQlyZXR1cm4gcyAmJiBnZXRfb3B0aW9uKCZzLCAmYWRkaXRpb25hbF9jcHVzKSA/IDAgOiAtRUlOVkFMOwotfQotZWFybHlfcGFyYW0oImFkZGl0aW9uYWxfY3B1cyIsIHNldHVwX2FkZGl0aW9uYWxfY3B1cyk7Ci0KLS8qCi0gKiBjcHVfcG9zc2libGVfbWFwIHNob3VsZCBiZSBzdGF0aWMsIGl0IGNhbm5vdCBjaGFuZ2UgYXMgY3B1J3MKLSAqIGFyZSBvbmxpbmVkLCBvciBvZmZsaW5lZC4gVGhlIHJlYXNvbiBpcyBwZXItY3B1IGRhdGEtc3RydWN0dXJlcwotICogYXJlIGFsbG9jYXRlZCBieSBzb21lIG1vZHVsZXMgYXQgaW5pdCB0aW1lLCBhbmQgZG9udCBleHBlY3QgdG8KLSAqIGRvIHRoaXMgZHluYW1pY2FsbHkgb24gY3B1IGFycml2YWwvZGVwYXJ0dXJlLgotICogY3B1X3ByZXNlbnRfbWFwIG9uIHRoZSBvdGhlciBoYW5kIGNhbiBjaGFuZ2UgZHluYW1pY2FsbHkuCi0gKiBJbiBjYXNlIHdoZW4gY3B1X2hvdHBsdWcgaXMgbm90IGNvbXBpbGVkLCB0aGVuIHdlIHJlc29ydCB0byBjdXJyZW50Ci0gKiBiZWhhdmlvdXIsIHdoaWNoIGlzIGNwdV9wb3NzaWJsZSA9PSBjcHVfcHJlc2VudC4KLSAqIC0gQXNob2sgUmFqCi0gKgotICogVGhyZWUgd2F5cyB0byBmaW5kIG91dCB0aGUgbnVtYmVyIG9mIGFkZGl0aW9uYWwgaG90cGx1ZyBDUFVzOgotICogLSBJZiB0aGUgQklPUyBzcGVjaWZpZWQgZGlzYWJsZWQgQ1BVcyBpbiBBQ1BJL21wdGFibGVzIHVzZSB0aGF0LgotICogLSBUaGUgdXNlciBjYW4gb3ZlcndyaXRlIGl0IHdpdGggYWRkaXRpb25hbF9jcHVzPU5VTQotICogLSBPdGhlcndpc2UgZG9uJ3QgcmVzZXJ2ZSBhZGRpdGlvbmFsIENQVXMuCi0gKiBXZSBkbyB0aGlzIGJlY2F1c2UgYWRkaXRpb25hbCBDUFVzIHdhc3RlIGEgbG90IG9mIG1lbW9yeS4KLSAqIC1BSwotICovCi1fX2luaXQgdm9pZCBwcmVmaWxsX3Bvc3NpYmxlX21hcCh2b2lkKQotewotCWludCBpOwotCWludCBwb3NzaWJsZTsKLQotCS8qIG5vIHByb2Nlc3NvciBmcm9tIG1wdGFibGUgb3IgbWFkdCAqLwotCWlmICghbnVtX3Byb2Nlc3NvcnMpCi0JCW51bV9wcm9jZXNzb3JzID0gMTsKLQotCWlmIChhZGRpdGlvbmFsX2NwdXMgPT0gLTEpIHsKLQkJaWYgKGRpc2FibGVkX2NwdXMgPiAwKQotCQkJYWRkaXRpb25hbF9jcHVzID0gZGlzYWJsZWRfY3B1czsKLQkJZWxzZQotCQkJYWRkaXRpb25hbF9jcHVzID0gMDsKLQl9Ci0KLQlwb3NzaWJsZSA9IG51bV9wcm9jZXNzb3JzICsgYWRkaXRpb25hbF9jcHVzOwotCWlmIChwb3NzaWJsZSA+IE5SX0NQVVMpCi0JCXBvc3NpYmxlID0gTlJfQ1BVUzsKLQotCXByaW50ayhLRVJOX0lORk8gIlNNUDogQWxsb3dpbmcgJWQgQ1BVcywgJWQgaG90cGx1ZyBDUFVzXG4iLAotCQlwb3NzaWJsZSwgbWF4X3QoaW50LCBwb3NzaWJsZSAtIG51bV9wcm9jZXNzb3JzLCAwKSk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgcG9zc2libGU7IGkrKykKLQkJY3B1X3NldChpLCBjcHVfcG9zc2libGVfbWFwKTsKLQotCW5yX2NwdV9pZHMgPSBwb3NzaWJsZTsKLX0KLQogc3RhdGljIHZvaWQgX19yZWYgcmVtb3ZlX2NwdV9mcm9tX21hcHMoaW50IGNwdSkKIHsKIAljcHVfY2xlYXIoY3B1LCBjcHVfb25saW5lX21hcCk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvdGltZV8zMi5jIGIvYXJjaC94ODYva2VybmVsL3RpbWVfMzIuYwppbmRleCBiYmVjZjhiLi43N2I0MDBmIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvdGltZV8zMi5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC90aW1lXzMyLmMKQEAgLTQ3LDEwICs0Nyw5IEBACiAJdW5zaWduZWQgbG9uZyBwYyA9IGluc3RydWN0aW9uX3BvaW50ZXIocmVncyk7CiAKICNpZmRlZiBDT05GSUdfU01QCi0JaWYgKCF2ODA4Nl9tb2RlKHJlZ3MpICYmIFNFR01FTlRfSVNfS0VSTkVMX0NPREUocmVncy0+Y3MpICYmCi0JICAgIGluX2xvY2tfZnVuY3Rpb25zKHBjKSkgeworCWlmICghdXNlcl9tb2RlX3ZtKHJlZ3MpICYmIGluX2xvY2tfZnVuY3Rpb25zKHBjKSkgewogI2lmZGVmIENPTkZJR19GUkFNRV9QT0lOVEVSCi0JCXJldHVybiAqKHVuc2lnbmVkIGxvbmcgKikocmVncy0+YnAgKyA0KTsKKwkJcmV0dXJuICoodW5zaWduZWQgbG9uZyAqKShyZWdzLT5icCArIHNpemVvZihsb25nKSk7CiAjZWxzZQogCQl1bnNpZ25lZCBsb25nICpzcCA9ICh1bnNpZ25lZCBsb25nICopJnJlZ3MtPnNwOwogCkBAIC05NSw2ICs5NCw3IEBACiAKIAlkb190aW1lcl9pbnRlcnJ1cHRfaG9vaygpOwogCisjaWZkZWYgQ09ORklHX01DQQogCWlmIChNQ0FfYnVzKSB7CiAJCS8qIFRoZSBQUy8yIHVzZXMgbGV2ZWwtdHJpZ2dlcmVkIGludGVycnVwdHMuICBZb3UgY2FuJ3QKIAkJdHVybiB0aGVtIG9mZiwgbm9yIHdvdWxkIHlvdSB3YW50IHRvIChhbnkgYXR0ZW1wdCB0bwpAQCAtMTA4LDYgKzEwOCw3IEBACiAJCXU4IGlycV92ID0gaW5iX3AoIDB4NjEgKTsJLyogcmVhZCB0aGUgY3VycmVudCBzdGF0ZSAqLwogCQlvdXRiX3AoIGlycV92fDB4ODAsIDB4NjEgKTsJLyogcmVzZXQgdGhlIElSUSAqLwogCX0KKyNlbmRpZgogCiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3RpbWVfNjQuYyBiL2FyY2gveDg2L2tlcm5lbC90aW1lXzY0LmMKaW5kZXggZTNkNDljNS4uY2IxOWQ2NSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3RpbWVfNjQuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvdGltZV82NC5jCkBAIC0xNiw2ICsxNiw3IEBACiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvdGltZS5oPgorI2luY2x1ZGUgPGxpbnV4L21jYS5oPgogCiAjaW5jbHVkZSA8YXNtL2k4MjUzLmg+CiAjaW5jbHVkZSA8YXNtL2hwZXQuaD4KQEAgLTMzLDIzICszNCwzNCBAQAogCS8qIEFzc3VtZSB0aGUgbG9jayBmdW5jdGlvbiBoYXMgZWl0aGVyIG5vIHN0YWNrIGZyYW1lIG9yIGEgY29weQogCSAgIG9mIGZsYWdzIGZyb20gUFVTSEYKIAkgICBFZmxhZ3MgYWx3YXlzIGhhcyBiaXRzIDIyIGFuZCB1cCBjbGVhcmVkIHVubGlrZSBrZXJuZWwgYWRkcmVzc2VzLiAqLwotCWlmICghdXNlcl9tb2RlKHJlZ3MpICYmIGluX2xvY2tfZnVuY3Rpb25zKHBjKSkgeworCWlmICghdXNlcl9tb2RlX3ZtKHJlZ3MpICYmIGluX2xvY2tfZnVuY3Rpb25zKHBjKSkgeworI2lmZGVmIENPTkZJR19GUkFNRV9QT0lOVEVSCisJCXJldHVybiAqKHVuc2lnbmVkIGxvbmcgKikocmVncy0+YnAgKyBzaXplb2YobG9uZykpOworI2Vsc2UKIAkJdW5zaWduZWQgbG9uZyAqc3AgPSAodW5zaWduZWQgbG9uZyAqKXJlZ3MtPnNwOwogCQlpZiAoc3BbMF0gPj4gMjIpCiAJCQlyZXR1cm4gc3BbMF07CiAJCWlmIChzcFsxXSA+PiAyMikKIAkJCXJldHVybiBzcFsxXTsKKyNlbmRpZgogCX0KIAlyZXR1cm4gcGM7CiB9CiBFWFBPUlRfU1lNQk9MKHByb2ZpbGVfcGMpOwogCi1zdGF0aWMgaXJxcmV0dXJuX3QgdGltZXJfZXZlbnRfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCkKK2lycXJldHVybl90IHRpbWVyX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpCiB7CiAJYWRkX3BkYShpcnEwX2lycXMsIDEpOwogCiAJZ2xvYmFsX2Nsb2NrX2V2ZW50LT5ldmVudF9oYW5kbGVyKGdsb2JhbF9jbG9ja19ldmVudCk7CiAKKyNpZmRlZiBDT05GSUdfTUNBCisJaWYgKE1DQV9idXMpIHsKKwkJdTggaXJxX3YgPSBpbmJfcCgweDYxKTsgICAgICAgLyogcmVhZCB0aGUgY3VycmVudCBzdGF0ZSAqLworCQlvdXRiX3AoaXJxX3Z8MHg4MCwgMHg2MSk7ICAgICAvKiByZXNldCB0aGUgSVJRICovCisJfQorI2VuZGlmCisKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CiAKQEAgLTEwMCw3ICsxMTIsNyBAQAogfQogCiBzdGF0aWMgc3RydWN0IGlycWFjdGlvbiBpcnEwID0gewotCS5oYW5kbGVyCT0gdGltZXJfZXZlbnRfaW50ZXJydXB0LAorCS5oYW5kbGVyCT0gdGltZXJfaW50ZXJydXB0LAogCS5mbGFncwkJPSBJUlFGX0RJU0FCTEVEIHwgSVJRRl9JUlFQT0xMIHwgSVJRRl9OT0JBTEFOQ0lORywKIAkubWFzawkJPSBDUFVfTUFTS19OT05FLAogCS5uYW1lCQk9ICJ0aW1lciIKQEAgLTExMSwxNiArMTIzLDEzIEBACiAJaWYgKCFocGV0X2VuYWJsZSgpKQogCQlzZXR1cF9waXRfdGltZXIoKTsKIAorCWlycTAubWFzayA9IGNwdW1hc2tfb2ZfY3B1KDApOwogCXNldHVwX2lycSgwLCAmaXJxMCk7CiB9CiAKIHZvaWQgX19pbml0IHRpbWVfaW5pdCh2b2lkKQogewogCXRzY19pbml0KCk7Ci0JaWYgKGNwdV9oYXMoJmJvb3RfY3B1X2RhdGEsIFg4Nl9GRUFUVVJFX1JEVFNDUCkpCi0JCXZnZXRjcHVfbW9kZSA9IFZHRVRDUFVfUkRUU0NQOwotCWVsc2UKLQkJdmdldGNwdV9tb2RlID0gVkdFVENQVV9MU0w7CiAKIAlsYXRlX3RpbWVfaW5pdCA9IGNob29zZV90aW1lX2luaXQoKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC90cmFwcy5jIGIvYXJjaC94ODYva2VybmVsL3RyYXBzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTA2Mjk3NAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveDg2L2tlcm5lbC90cmFwcy5jCkBAIC0wLDAgKzEsMTAzNCBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIgIExpbnVzIFRvcnZhbGRzCisgKiAgQ29weXJpZ2h0IChDKSAyMDAwLCAyMDAxLCAyMDAyIEFuZGkgS2xlZW4sIFN1U0UgTGFicworICoKKyAqICBQZW50aXVtIElJSSBGWFNSLCBTU0Ugc3VwcG9ydAorICoJR2FyZXRoIEh1Z2hlcyA8Z2FyZXRoQHZhbGludXguY29tPiwgTWF5IDIwMDAKKyAqLworCisvKgorICogSGFuZGxlIGhhcmR3YXJlIHRyYXBzIGFuZCBmYXVsdHMuCisgKi8KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9rYWxsc3ltcy5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgva3Byb2Jlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC91dHNuYW1lLmg+CisjaW5jbHVkZSA8bGludXgva2RlYnVnLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvcHRyYWNlLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgvdW53aW5kLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L2tleGVjLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC90aW1lci5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9idWcuaD4KKyNpbmNsdWRlIDxsaW51eC9ubWkuaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisKKyNpZmRlZiBDT05GSUdfRUlTQQorI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vpc2EuaD4KKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX01DQQorI2luY2x1ZGUgPGxpbnV4L21jYS5oPgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKENPTkZJR19FREFDKQorI2luY2x1ZGUgPGxpbnV4L2VkYWMuaD4KKyNlbmRpZgorCisjaW5jbHVkZSA8YXNtL3N0YWNrdHJhY2UuaD4KKyNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CisjaW5jbHVkZSA8YXNtL2RlYnVncmVnLmg+CisjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgorI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KKyNpbmNsdWRlIDxhc20vdW53aW5kLmg+CisjaW5jbHVkZSA8YXNtL3RyYXBzLmg+CisjaW5jbHVkZSA8YXNtL2Rlc2MuaD4KKyNpbmNsdWRlIDxhc20vaTM4Ny5oPgorCisjaW5jbHVkZSA8bWFjaF90cmFwcy5oPgorCisjaWZkZWYgQ09ORklHX1g4Nl82NAorI2luY2x1ZGUgPGFzbS9wZ2FsbG9jLmg+CisjaW5jbHVkZSA8YXNtL3Byb3RvLmg+CisjaW5jbHVkZSA8YXNtL3BkYS5oPgorI2Vsc2UKKyNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLWZsYWdzLmg+CisjaW5jbHVkZSA8YXNtL2FyY2hfaG9va3MuaD4KKyNpbmNsdWRlIDxhc20vbm1pLmg+CisjaW5jbHVkZSA8YXNtL3NtcC5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS90cmFwcy5oPgorCisjaW5jbHVkZSAiY3B1L21jaGVjay9tY2UuaCIKKworREVDTEFSRV9CSVRNQVAodXNlZF92ZWN0b3JzLCBOUl9WRUNUT1JTKTsKK0VYUE9SVF9TWU1CT0xfR1BMKHVzZWRfdmVjdG9ycyk7CisKK2FzbWxpbmthZ2UgaW50IHN5c3RlbV9jYWxsKHZvaWQpOworCisvKiBEbyB3ZSBpZ25vcmUgRlBVIGludGVycnVwdHMgPyAqLworY2hhciBpZ25vcmVfZnB1X2lycTsKKworLyoKKyAqIFRoZSBJRFQgaGFzIHRvIGJlIHBhZ2UtYWxpZ25lZCB0byBzaW1wbGlmeSB0aGUgUGVudGl1bQorICogRjAgMEYgYnVnIHdvcmthcm91bmQuLiBXZSBoYXZlIGEgc3BlY2lhbCBsaW5rIHNlZ21lbnQKKyAqIGZvciB0aGlzLgorICovCitnYXRlX2Rlc2MgaWR0X3RhYmxlWzI1Nl0KKwlfX2F0dHJpYnV0ZV9fKChfX3NlY3Rpb25fXygiLmRhdGEuaWR0IikpKSA9IHsgeyB7IHsgMCwgMCB9IH0gfSwgfTsKKyNlbmRpZgorCitzdGF0aWMgaW50IGlnbm9yZV9ubWlzOworCitzdGF0aWMgaW5saW5lIHZvaWQgY29uZGl0aW9uYWxfc3RpKHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCWlmIChyZWdzLT5mbGFncyAmIFg4Nl9FRkxBR1NfSUYpCisJCWxvY2FsX2lycV9lbmFibGUoKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHByZWVtcHRfY29uZGl0aW9uYWxfc3RpKHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCWluY19wcmVlbXB0X2NvdW50KCk7CisJaWYgKHJlZ3MtPmZsYWdzICYgWDg2X0VGTEFHU19JRikKKwkJbG9jYWxfaXJxX2VuYWJsZSgpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgcHJlZW1wdF9jb25kaXRpb25hbF9jbGkoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJaWYgKHJlZ3MtPmZsYWdzICYgWDg2X0VGTEFHU19JRikKKwkJbG9jYWxfaXJxX2Rpc2FibGUoKTsKKwlkZWNfcHJlZW1wdF9jb3VudCgpOworfQorCisjaWZkZWYgQ09ORklHX1g4Nl8zMgorc3RhdGljIGlubGluZSB2b2lkCitkaWVfaWZfa2VybmVsKGNvbnN0IGNoYXIgKnN0ciwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIGxvbmcgZXJyKQoreworCWlmICghdXNlcl9tb2RlX3ZtKHJlZ3MpKQorCQlkaWUoc3RyLCByZWdzLCBlcnIpOworfQorCisvKgorICogUGVyZm9ybSB0aGUgbGF6eSBUU1MncyBJL08gYml0bWFwIGNvcHkuIElmIHRoZSBUU1MgaGFzIGFuCisgKiBpbnZhbGlkIG9mZnNldCBzZXQgKHRoZSBMQVpZIG9uZSkgYW5kIHRoZSBmYXVsdGluZyB0aHJlYWQgaGFzCisgKiBhIHZhbGlkIEkvTyBiaXRtYXAgcG9pbnRlciwgd2UgY29weSB0aGUgSS9PIGJpdG1hcCBpbiB0aGUgVFNTLAorICogd2Ugc2V0IHRoZSBvZmZzZXQgZmllbGQgY29ycmVjdGx5IGFuZCByZXR1cm4gMS4KKyAqLworc3RhdGljIGludCBsYXp5X2lvYml0bWFwX2NvcHkodm9pZCkKK3sKKwlzdHJ1Y3QgdGhyZWFkX3N0cnVjdCAqdGhyZWFkOworCXN0cnVjdCB0c3Nfc3RydWN0ICp0c3M7CisJaW50IGNwdTsKKworCWNwdSA9IGdldF9jcHUoKTsKKwl0c3MgPSAmcGVyX2NwdShpbml0X3RzcywgY3B1KTsKKwl0aHJlYWQgPSAmY3VycmVudC0+dGhyZWFkOworCisJaWYgKHRzcy0+eDg2X3Rzcy5pb19iaXRtYXBfYmFzZSA9PSBJTlZBTElEX0lPX0JJVE1BUF9PRkZTRVRfTEFaWSAmJgorCSAgICB0aHJlYWQtPmlvX2JpdG1hcF9wdHIpIHsKKwkJbWVtY3B5KHRzcy0+aW9fYml0bWFwLCB0aHJlYWQtPmlvX2JpdG1hcF9wdHIsCisJCSAgICAgICB0aHJlYWQtPmlvX2JpdG1hcF9tYXgpOworCQkvKgorCQkgKiBJZiB0aGUgcHJldmlvdXNseSBzZXQgbWFwIHdhcyBleHRlbmRpbmcgdG8gaGlnaGVyIHBvcnRzCisJCSAqIHRoYW4gdGhlIGN1cnJlbnQgb25lLCBwYWQgZXh0cmEgc3BhY2Ugd2l0aCAweGZmIChubyBhY2Nlc3MpLgorCQkgKi8KKwkJaWYgKHRocmVhZC0+aW9fYml0bWFwX21heCA8IHRzcy0+aW9fYml0bWFwX21heCkgeworCQkJbWVtc2V0KChjaGFyICopIHRzcy0+aW9fYml0bWFwICsKKwkJCQl0aHJlYWQtPmlvX2JpdG1hcF9tYXgsIDB4ZmYsCisJCQkJdHNzLT5pb19iaXRtYXBfbWF4IC0gdGhyZWFkLT5pb19iaXRtYXBfbWF4KTsKKwkJfQorCQl0c3MtPmlvX2JpdG1hcF9tYXggPSB0aHJlYWQtPmlvX2JpdG1hcF9tYXg7CisJCXRzcy0+eDg2X3Rzcy5pb19iaXRtYXBfYmFzZSA9IElPX0JJVE1BUF9PRkZTRVQ7CisJCXRzcy0+aW9fYml0bWFwX293bmVyID0gdGhyZWFkOworCQlwdXRfY3B1KCk7CisKKwkJcmV0dXJuIDE7CisJfQorCXB1dF9jcHUoKTsKKworCXJldHVybiAwOworfQorI2VuZGlmCisKK3N0YXRpYyB2b2lkIF9fa3Byb2JlcworZG9fdHJhcChpbnQgdHJhcG5yLCBpbnQgc2lnbnIsIGNoYXIgKnN0ciwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsCisJbG9uZyBlcnJvcl9jb2RlLCBzaWdpbmZvX3QgKmluZm8pCit7CisJc3RydWN0IHRhc2tfc3RydWN0ICp0c2sgPSBjdXJyZW50OworCisjaWZkZWYgQ09ORklHX1g4Nl8zMgorCWlmIChyZWdzLT5mbGFncyAmIFg4Nl9WTV9NQVNLKSB7CisJCS8qCisJCSAqIHRyYXBzIDAsIDEsIDMsIDQsIGFuZCA1IHNob3VsZCBiZSBmb3J3YXJkZWQgdG8gdm04Ni4KKwkJICogT24gbm1pIChpbnRlcnJ1cHQgMiksIGRvX3RyYXAgc2hvdWxkIG5vdCBiZSBjYWxsZWQuCisJCSAqLworCQlpZiAodHJhcG5yIDwgNikKKwkJCWdvdG8gdm04Nl90cmFwOworCQlnb3RvIHRyYXBfc2lnbmFsOworCX0KKyNlbmRpZgorCisJaWYgKCF1c2VyX21vZGUocmVncykpCisJCWdvdG8ga2VybmVsX3RyYXA7CisKKyNpZmRlZiBDT05GSUdfWDg2XzMyCit0cmFwX3NpZ25hbDoKKyNlbmRpZgorCS8qCisJICogV2Ugd2FudCBlcnJvcl9jb2RlIGFuZCB0cmFwX25vIHNldCBmb3IgdXNlcnNwYWNlIGZhdWx0cyBhbmQKKwkgKiBrZXJuZWxzcGFjZSBmYXVsdHMgd2hpY2ggcmVzdWx0IGluIGRpZSgpLCBidXQgbm90CisJICoga2VybmVsc3BhY2UgZmF1bHRzIHdoaWNoIGFyZSBmaXhlZCB1cC4gIGRpZSgpIGdpdmVzIHRoZQorCSAqIHByb2Nlc3Mgbm8gY2hhbmNlIHRvIGhhbmRsZSB0aGUgc2lnbmFsIGFuZCBub3RpY2UgdGhlCisJICoga2VybmVsIGZhdWx0IGluZm9ybWF0aW9uLCBzbyB0aGF0IHdvbid0IHJlc3VsdCBpbiBwb2xsdXRpbmcKKwkgKiB0aGUgaW5mb3JtYXRpb24gYWJvdXQgcHJldmlvdXNseSBxdWV1ZWQsIGJ1dCBub3QgeWV0CisJICogZGVsaXZlcmVkLCBmYXVsdHMuICBTZWUgYWxzbyBkb19nZW5lcmFsX3Byb3RlY3Rpb24gYmVsb3cuCisJICovCisJdHNrLT50aHJlYWQuZXJyb3JfY29kZSA9IGVycm9yX2NvZGU7CisJdHNrLT50aHJlYWQudHJhcF9ubyA9IHRyYXBucjsKKworI2lmZGVmIENPTkZJR19YODZfNjQKKwlpZiAoc2hvd191bmhhbmRsZWRfc2lnbmFscyAmJiB1bmhhbmRsZWRfc2lnbmFsKHRzaywgc2lnbnIpICYmCisJICAgIHByaW50a19yYXRlbGltaXQoKSkgeworCQlwcmludGsoS0VSTl9JTkZPCisJCSAgICAgICAiJXNbJWRdIHRyYXAgJXMgaXA6JWx4IHNwOiVseCBlcnJvcjolbHgiLAorCQkgICAgICAgdHNrLT5jb21tLCB0c2stPnBpZCwgc3RyLAorCQkgICAgICAgcmVncy0+aXAsIHJlZ3MtPnNwLCBlcnJvcl9jb2RlKTsKKwkJcHJpbnRfdm1hX2FkZHIoIiBpbiAiLCByZWdzLT5pcCk7CisJCXByaW50aygiXG4iKTsKKwl9CisjZW5kaWYKKworCWlmIChpbmZvKQorCQlmb3JjZV9zaWdfaW5mbyhzaWduciwgaW5mbywgdHNrKTsKKwllbHNlCisJCWZvcmNlX3NpZyhzaWduciwgdHNrKTsKKwlyZXR1cm47CisKK2tlcm5lbF90cmFwOgorCWlmICghZml4dXBfZXhjZXB0aW9uKHJlZ3MpKSB7CisJCXRzay0+dGhyZWFkLmVycm9yX2NvZGUgPSBlcnJvcl9jb2RlOworCQl0c2stPnRocmVhZC50cmFwX25vID0gdHJhcG5yOworCQlkaWUoc3RyLCByZWdzLCBlcnJvcl9jb2RlKTsKKwl9CisJcmV0dXJuOworCisjaWZkZWYgQ09ORklHX1g4Nl8zMgordm04Nl90cmFwOgorCWlmIChoYW5kbGVfdm04Nl90cmFwKChzdHJ1Y3Qga2VybmVsX3ZtODZfcmVncyAqKSByZWdzLAorCQkJCQkJZXJyb3JfY29kZSwgdHJhcG5yKSkKKwkJZ290byB0cmFwX3NpZ25hbDsKKwlyZXR1cm47CisjZW5kaWYKK30KKworI2RlZmluZSBET19FUlJPUih0cmFwbnIsIHNpZ25yLCBzdHIsIG5hbWUpCQkJCVwKK2RvdHJhcGxpbmthZ2Ugdm9pZCBkb18jI25hbWUoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIGxvbmcgZXJyb3JfY29kZSkJXAorewkJCQkJCQkJCVwKKwlpZiAobm90aWZ5X2RpZShESUVfVFJBUCwgc3RyLCByZWdzLCBlcnJvcl9jb2RlLCB0cmFwbnIsIHNpZ25yKQlcCisJCQkJCQkJPT0gTk9USUZZX1NUT1ApCVwKKwkJcmV0dXJuOwkJCQkJCQlcCisJY29uZGl0aW9uYWxfc3RpKHJlZ3MpOwkJCQkJCVwKKwlkb190cmFwKHRyYXBuciwgc2lnbnIsIHN0ciwgcmVncywgZXJyb3JfY29kZSwgTlVMTCk7CQlcCit9CisKKyNkZWZpbmUgRE9fRVJST1JfSU5GTyh0cmFwbnIsIHNpZ25yLCBzdHIsIG5hbWUsIHNpY29kZSwgc2lhZGRyKQkJXAorZG90cmFwbGlua2FnZSB2b2lkIGRvXyMjbmFtZShzdHJ1Y3QgcHRfcmVncyAqcmVncywgbG9uZyBlcnJvcl9jb2RlKQlcCit7CQkJCQkJCQkJXAorCXNpZ2luZm9fdCBpbmZvOwkJCQkJCQlcCisJaW5mby5zaV9zaWdubyA9IHNpZ25yOwkJCQkJCVwKKwlpbmZvLnNpX2Vycm5vID0gMDsJCQkJCQlcCisJaW5mby5zaV9jb2RlID0gc2ljb2RlOwkJCQkJCVwKKwlpbmZvLnNpX2FkZHIgPSAodm9pZCBfX3VzZXIgKilzaWFkZHI7CQkJCVwKKwlpZiAobm90aWZ5X2RpZShESUVfVFJBUCwgc3RyLCByZWdzLCBlcnJvcl9jb2RlLCB0cmFwbnIsIHNpZ25yKQlcCisJCQkJCQkJPT0gTk9USUZZX1NUT1ApCVwKKwkJcmV0dXJuOwkJCQkJCQlcCisJY29uZGl0aW9uYWxfc3RpKHJlZ3MpOwkJCQkJCVwKKwlkb190cmFwKHRyYXBuciwgc2lnbnIsIHN0ciwgcmVncywgZXJyb3JfY29kZSwgJmluZm8pOwkJXAorfQorCitET19FUlJPUl9JTkZPKDAsIFNJR0ZQRSwgImRpdmlkZSBlcnJvciIsIGRpdmlkZV9lcnJvciwgRlBFX0lOVERJViwgcmVncy0+aXApCitET19FUlJPUig0LCBTSUdTRUdWLCAib3ZlcmZsb3ciLCBvdmVyZmxvdykKK0RPX0VSUk9SKDUsIFNJR1NFR1YsICJib3VuZHMiLCBib3VuZHMpCitET19FUlJPUl9JTkZPKDYsIFNJR0lMTCwgImludmFsaWQgb3Bjb2RlIiwgaW52YWxpZF9vcCwgSUxMX0lMTE9QTiwgcmVncy0+aXApCitET19FUlJPUig5LCBTSUdGUEUsICJjb3Byb2Nlc3NvciBzZWdtZW50IG92ZXJydW4iLCBjb3Byb2Nlc3Nvcl9zZWdtZW50X292ZXJydW4pCitET19FUlJPUigxMCwgU0lHU0VHViwgImludmFsaWQgVFNTIiwgaW52YWxpZF9UU1MpCitET19FUlJPUigxMSwgU0lHQlVTLCAic2VnbWVudCBub3QgcHJlc2VudCIsIHNlZ21lbnRfbm90X3ByZXNlbnQpCisjaWZkZWYgQ09ORklHX1g4Nl8zMgorRE9fRVJST1IoMTIsIFNJR0JVUywgInN0YWNrIHNlZ21lbnQiLCBzdGFja19zZWdtZW50KQorI2VuZGlmCitET19FUlJPUl9JTkZPKDE3LCBTSUdCVVMsICJhbGlnbm1lbnQgY2hlY2siLCBhbGlnbm1lbnRfY2hlY2ssIEJVU19BRFJBTE4sIDApCisKKyNpZmRlZiBDT05GSUdfWDg2XzY0CisvKiBSdW5zIG9uIElTVCBzdGFjayAqLworZG90cmFwbGlua2FnZSB2b2lkIGRvX3N0YWNrX3NlZ21lbnQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIGxvbmcgZXJyb3JfY29kZSkKK3sKKwlpZiAobm90aWZ5X2RpZShESUVfVFJBUCwgInN0YWNrIHNlZ21lbnQiLCByZWdzLCBlcnJvcl9jb2RlLAorCQkJMTIsIFNJR0JVUykgPT0gTk9USUZZX1NUT1ApCisJCXJldHVybjsKKwlwcmVlbXB0X2NvbmRpdGlvbmFsX3N0aShyZWdzKTsKKwlkb190cmFwKDEyLCBTSUdCVVMsICJzdGFjayBzZWdtZW50IiwgcmVncywgZXJyb3JfY29kZSwgTlVMTCk7CisJcHJlZW1wdF9jb25kaXRpb25hbF9jbGkocmVncyk7Cit9CisKK2RvdHJhcGxpbmthZ2Ugdm9pZCBkb19kb3VibGVfZmF1bHQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIGxvbmcgZXJyb3JfY29kZSkKK3sKKwlzdGF0aWMgY29uc3QgY2hhciBzdHJbXSA9ICJkb3VibGUgZmF1bHQiOworCXN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrID0gY3VycmVudDsKKworCS8qIFJldHVybiBub3QgY2hlY2tlZCBiZWNhdXNlIGRvdWJsZSBjaGVjayBjYW5ub3QgYmUgaWdub3JlZCAqLworCW5vdGlmeV9kaWUoRElFX1RSQVAsIHN0ciwgcmVncywgZXJyb3JfY29kZSwgOCwgU0lHU0VHVik7CisKKwl0c2stPnRocmVhZC5lcnJvcl9jb2RlID0gZXJyb3JfY29kZTsKKwl0c2stPnRocmVhZC50cmFwX25vID0gODsKKworCS8qIFRoaXMgaXMgYWx3YXlzIGEga2VybmVsIHRyYXAgYW5kIG5ldmVyIGZpeGFibGUgKGFuZCB0aHVzIG11c3QKKwkgICBuZXZlciByZXR1cm4pLiAqLworCWZvciAoOzspCisJCWRpZShzdHIsIHJlZ3MsIGVycm9yX2NvZGUpOworfQorI2VuZGlmCisKK2RvdHJhcGxpbmthZ2Ugdm9pZCBfX2twcm9iZXMKK2RvX2dlbmVyYWxfcHJvdGVjdGlvbihzdHJ1Y3QgcHRfcmVncyAqcmVncywgbG9uZyBlcnJvcl9jb2RlKQoreworCXN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrOworCisJY29uZGl0aW9uYWxfc3RpKHJlZ3MpOworCisjaWZkZWYgQ09ORklHX1g4Nl8zMgorCWlmIChsYXp5X2lvYml0bWFwX2NvcHkoKSkgeworCQkvKiByZXN0YXJ0IHRoZSBmYXVsdGluZyBpbnN0cnVjdGlvbiAqLworCQlyZXR1cm47CisJfQorCisJaWYgKHJlZ3MtPmZsYWdzICYgWDg2X1ZNX01BU0spCisJCWdvdG8gZ3BfaW5fdm04NjsKKyNlbmRpZgorCisJdHNrID0gY3VycmVudDsKKwlpZiAoIXVzZXJfbW9kZShyZWdzKSkKKwkJZ290byBncF9pbl9rZXJuZWw7CisKKwl0c2stPnRocmVhZC5lcnJvcl9jb2RlID0gZXJyb3JfY29kZTsKKwl0c2stPnRocmVhZC50cmFwX25vID0gMTM7CisKKwlpZiAoc2hvd191bmhhbmRsZWRfc2lnbmFscyAmJiB1bmhhbmRsZWRfc2lnbmFsKHRzaywgU0lHU0VHVikgJiYKKwkJCXByaW50a19yYXRlbGltaXQoKSkgeworCQlwcmludGsoS0VSTl9JTkZPCisJCQkiJXNbJWRdIGdlbmVyYWwgcHJvdGVjdGlvbiBpcDolbHggc3A6JWx4IGVycm9yOiVseCIsCisJCQl0c2stPmNvbW0sIHRhc2tfcGlkX25yKHRzayksCisJCQlyZWdzLT5pcCwgcmVncy0+c3AsIGVycm9yX2NvZGUpOworCQlwcmludF92bWFfYWRkcigiIGluICIsIHJlZ3MtPmlwKTsKKwkJcHJpbnRrKCJcbiIpOworCX0KKworCWZvcmNlX3NpZyhTSUdTRUdWLCB0c2spOworCXJldHVybjsKKworI2lmZGVmIENPTkZJR19YODZfMzIKK2dwX2luX3ZtODY6CisJbG9jYWxfaXJxX2VuYWJsZSgpOworCWhhbmRsZV92bTg2X2ZhdWx0KChzdHJ1Y3Qga2VybmVsX3ZtODZfcmVncyAqKSByZWdzLCBlcnJvcl9jb2RlKTsKKwlyZXR1cm47CisjZW5kaWYKKworZ3BfaW5fa2VybmVsOgorCWlmIChmaXh1cF9leGNlcHRpb24ocmVncykpCisJCXJldHVybjsKKworCXRzay0+dGhyZWFkLmVycm9yX2NvZGUgPSBlcnJvcl9jb2RlOworCXRzay0+dGhyZWFkLnRyYXBfbm8gPSAxMzsKKwlpZiAobm90aWZ5X2RpZShESUVfR1BGLCAiZ2VuZXJhbCBwcm90ZWN0aW9uIGZhdWx0IiwgcmVncywKKwkJCQllcnJvcl9jb2RlLCAxMywgU0lHU0VHVikgPT0gTk9USUZZX1NUT1ApCisJCXJldHVybjsKKwlkaWUoImdlbmVyYWwgcHJvdGVjdGlvbiBmYXVsdCIsIHJlZ3MsIGVycm9yX2NvZGUpOworfQorCitzdGF0aWMgbm90cmFjZSBfX2twcm9iZXMgdm9pZAorbWVtX3Bhcml0eV9lcnJvcih1bnNpZ25lZCBjaGFyIHJlYXNvbiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJcHJpbnRrKEtFUk5fRU1FUkcKKwkJIlVoaHVoLiBOTUkgcmVjZWl2ZWQgZm9yIHVua25vd24gcmVhc29uICUwMnggb24gQ1BVICVkLlxuIiwKKwkJCXJlYXNvbiwgc21wX3Byb2Nlc3Nvcl9pZCgpKTsKKworCXByaW50ayhLRVJOX0VNRVJHCisJCSJZb3UgaGF2ZSBzb21lIGhhcmR3YXJlIHByb2JsZW0sIGxpa2VseSBvbiB0aGUgUENJIGJ1cy5cbiIpOworCisjaWYgZGVmaW5lZChDT05GSUdfRURBQykKKwlpZiAoZWRhY19oYW5kbGVyX3NldCgpKSB7CisJCWVkYWNfYXRvbWljX2Fzc2VydF9lcnJvcigpOworCQlyZXR1cm47CisJfQorI2VuZGlmCisKKwlpZiAocGFuaWNfb25fdW5yZWNvdmVyZWRfbm1pKQorCQlwYW5pYygiTk1JOiBOb3QgY29udGludWluZyIpOworCisJcHJpbnRrKEtFUk5fRU1FUkcgIkRhemVkIGFuZCBjb25mdXNlZCwgYnV0IHRyeWluZyB0byBjb250aW51ZVxuIik7CisKKwkvKiBDbGVhciBhbmQgZGlzYWJsZSB0aGUgbWVtb3J5IHBhcml0eSBlcnJvciBsaW5lLiAqLworCXJlYXNvbiA9IChyZWFzb24gJiAweGYpIHwgNDsKKwlvdXRiKHJlYXNvbiwgMHg2MSk7Cit9CisKK3N0YXRpYyBub3RyYWNlIF9fa3Byb2JlcyB2b2lkCitpb19jaGVja19lcnJvcih1bnNpZ25lZCBjaGFyIHJlYXNvbiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJdW5zaWduZWQgbG9uZyBpOworCisJcHJpbnRrKEtFUk5fRU1FUkcgIk5NSTogSU9DSyBlcnJvciAoZGVidWcgaW50ZXJydXB0PylcbiIpOworCXNob3dfcmVnaXN0ZXJzKHJlZ3MpOworCisJLyogUmUtZW5hYmxlIHRoZSBJT0NLIGxpbmUsIHdhaXQgZm9yIGEgZmV3IHNlY29uZHMgKi8KKwlyZWFzb24gPSAocmVhc29uICYgMHhmKSB8IDg7CisJb3V0YihyZWFzb24sIDB4NjEpOworCisJaSA9IDIwMDA7CisJd2hpbGUgKC0taSkKKwkJdWRlbGF5KDEwMDApOworCisJcmVhc29uICY9IH44OworCW91dGIocmVhc29uLCAweDYxKTsKK30KKworc3RhdGljIG5vdHJhY2UgX19rcHJvYmVzIHZvaWQKK3Vua25vd25fbm1pX2Vycm9yKHVuc2lnbmVkIGNoYXIgcmVhc29uLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlpZiAobm90aWZ5X2RpZShESUVfTk1JVU5LTk9XTiwgIm5taSIsIHJlZ3MsIHJlYXNvbiwgMiwgU0lHSU5UKSA9PQorCQkJTk9USUZZX1NUT1ApCisJCXJldHVybjsKKyNpZmRlZiBDT05GSUdfTUNBCisJLyoKKwkgKiBNaWdodCBhY3R1YWxseSBiZSBhYmxlIHRvIGZpZ3VyZSBvdXQgd2hhdCB0aGUgZ3VpbHR5IHBhcnR5CisJICogaXM6CisJICovCisJaWYgKE1DQV9idXMpIHsKKwkJbWNhX2hhbmRsZV9ubWkoKTsKKwkJcmV0dXJuOworCX0KKyNlbmRpZgorCXByaW50ayhLRVJOX0VNRVJHCisJCSJVaGh1aC4gTk1JIHJlY2VpdmVkIGZvciB1bmtub3duIHJlYXNvbiAlMDJ4IG9uIENQVSAlZC5cbiIsCisJCQlyZWFzb24sIHNtcF9wcm9jZXNzb3JfaWQoKSk7CisKKwlwcmludGsoS0VSTl9FTUVSRyAiRG8geW91IGhhdmUgYSBzdHJhbmdlIHBvd2VyIHNhdmluZyBtb2RlIGVuYWJsZWQ/XG4iKTsKKwlpZiAocGFuaWNfb25fdW5yZWNvdmVyZWRfbm1pKQorCQlwYW5pYygiTk1JOiBOb3QgY29udGludWluZyIpOworCisJcHJpbnRrKEtFUk5fRU1FUkcgIkRhemVkIGFuZCBjb25mdXNlZCwgYnV0IHRyeWluZyB0byBjb250aW51ZVxuIik7Cit9CisKK3N0YXRpYyBub3RyYWNlIF9fa3Byb2JlcyB2b2lkIGRlZmF1bHRfZG9fbm1pKHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXVuc2lnbmVkIGNoYXIgcmVhc29uID0gMDsKKwlpbnQgY3B1OworCisJY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOworCisJLyogT25seSB0aGUgQlNQIGdldHMgZXh0ZXJuYWwgTk1JcyBmcm9tIHRoZSBzeXN0ZW0uICovCisJaWYgKCFjcHUpCisJCXJlYXNvbiA9IGdldF9ubWlfcmVhc29uKCk7CisKKwlpZiAoIShyZWFzb24gJiAweGMwKSkgeworCQlpZiAobm90aWZ5X2RpZShESUVfTk1JX0lQSSwgIm5taV9pcGkiLCByZWdzLCByZWFzb24sIDIsIFNJR0lOVCkKKwkJCQkJCQkJPT0gTk9USUZZX1NUT1ApCisJCQlyZXR1cm47CisjaWZkZWYgQ09ORklHX1g4Nl9MT0NBTF9BUElDCisJCS8qCisJCSAqIE9rLCBzbyB0aGlzIGlzIG5vbmUgb2YgdGhlIGRvY3VtZW50ZWQgTk1JIHNvdXJjZXMsCisJCSAqIHNvIGl0IG11c3QgYmUgdGhlIE5NSSB3YXRjaGRvZy4KKwkJICovCisJCWlmIChubWlfd2F0Y2hkb2dfdGljayhyZWdzLCByZWFzb24pKQorCQkJcmV0dXJuOworCQlpZiAoIWRvX25taV9jYWxsYmFjayhyZWdzLCBjcHUpKQorCQkJdW5rbm93bl9ubWlfZXJyb3IocmVhc29uLCByZWdzKTsKKyNlbHNlCisJCXVua25vd25fbm1pX2Vycm9yKHJlYXNvbiwgcmVncyk7CisjZW5kaWYKKworCQlyZXR1cm47CisJfQorCWlmIChub3RpZnlfZGllKERJRV9OTUksICJubWkiLCByZWdzLCByZWFzb24sIDIsIFNJR0lOVCkgPT0gTk9USUZZX1NUT1ApCisJCXJldHVybjsKKworCS8qIEFLOiBmb2xsb3dpbmcgY2hlY2tzIHNlZW0gdG8gYmUgYnJva2VuIG9uIG1vZGVybiBjaGlwc2V0cy4gRklYTUUgKi8KKwlpZiAocmVhc29uICYgMHg4MCkKKwkJbWVtX3Bhcml0eV9lcnJvcihyZWFzb24sIHJlZ3MpOworCWlmIChyZWFzb24gJiAweDQwKQorCQlpb19jaGVja19lcnJvcihyZWFzb24sIHJlZ3MpOworI2lmZGVmIENPTkZJR19YODZfMzIKKwkvKgorCSAqIFJlYXNzZXJ0IE5NSSBpbiBjYXNlIGl0IGJlY2FtZSBhY3RpdmUgbWVhbndoaWxlCisJICogYXMgaXQncyBlZGdlLXRyaWdnZXJlZDoKKwkgKi8KKwlyZWFzc2VydF9ubWkoKTsKKyNlbmRpZgorfQorCitkb3RyYXBsaW5rYWdlIG5vdHJhY2UgX19rcHJvYmVzIHZvaWQKK2RvX25taShzdHJ1Y3QgcHRfcmVncyAqcmVncywgbG9uZyBlcnJvcl9jb2RlKQoreworCW5taV9lbnRlcigpOworCisjaWZkZWYgQ09ORklHX1g4Nl8zMgorCXsgaW50IGNwdTsgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOyArK25taV9jb3VudChjcHUpOyB9CisjZWxzZQorCWFkZF9wZGEoX19ubWlfY291bnQsIDEpOworI2VuZGlmCisKKwlpZiAoIWlnbm9yZV9ubWlzKQorCQlkZWZhdWx0X2RvX25taShyZWdzKTsKKworCW5taV9leGl0KCk7Cit9CisKK3ZvaWQgc3RvcF9ubWkodm9pZCkKK3sKKwlhY3BpX25taV9kaXNhYmxlKCk7CisJaWdub3JlX25taXMrKzsKK30KKwordm9pZCByZXN0YXJ0X25taSh2b2lkKQoreworCWlnbm9yZV9ubWlzLS07CisJYWNwaV9ubWlfZW5hYmxlKCk7Cit9CisKKy8qIE1heSBydW4gb24gSVNUIHN0YWNrLiAqLworZG90cmFwbGlua2FnZSB2b2lkIF9fa3Byb2JlcyBkb19pbnQzKHN0cnVjdCBwdF9yZWdzICpyZWdzLCBsb25nIGVycm9yX2NvZGUpCit7CisjaWZkZWYgQ09ORklHX0tQUk9CRVMKKwlpZiAobm90aWZ5X2RpZShESUVfSU5UMywgImludDMiLCByZWdzLCBlcnJvcl9jb2RlLCAzLCBTSUdUUkFQKQorCQkJPT0gTk9USUZZX1NUT1ApCisJCXJldHVybjsKKyNlbHNlCisJaWYgKG5vdGlmeV9kaWUoRElFX1RSQVAsICJpbnQzIiwgcmVncywgZXJyb3JfY29kZSwgMywgU0lHVFJBUCkKKwkJCT09IE5PVElGWV9TVE9QKQorCQlyZXR1cm47CisjZW5kaWYKKworCXByZWVtcHRfY29uZGl0aW9uYWxfc3RpKHJlZ3MpOworCWRvX3RyYXAoMywgU0lHVFJBUCwgImludDMiLCByZWdzLCBlcnJvcl9jb2RlLCBOVUxMKTsKKwlwcmVlbXB0X2NvbmRpdGlvbmFsX2NsaShyZWdzKTsKK30KKworI2lmZGVmIENPTkZJR19YODZfNjQKKy8qIEhlbHAgaGFuZGxlciBydW5uaW5nIG9uIElTVCBzdGFjayB0byBzd2l0Y2ggYmFjayB0byB1c2VyIHN0YWNrCisgICBmb3Igc2NoZWR1bGluZyBvciBzaWduYWwgaGFuZGxpbmcuIFRoZSBhY3R1YWwgc3RhY2sgc3dpdGNoIGlzIGRvbmUgaW4KKyAgIGVudHJ5LlMgKi8KK2FzbWxpbmthZ2UgX19rcHJvYmVzIHN0cnVjdCBwdF9yZWdzICpzeW5jX3JlZ3Moc3RydWN0IHB0X3JlZ3MgKmVyZWdzKQoreworCXN0cnVjdCBwdF9yZWdzICpyZWdzID0gZXJlZ3M7CisJLyogRGlkIGFscmVhZHkgc3luYyAqLworCWlmIChlcmVncyA9PSAoc3RydWN0IHB0X3JlZ3MgKillcmVncy0+c3ApCisJCTsKKwkvKiBFeGNlcHRpb24gZnJvbSB1c2VyIHNwYWNlICovCisJZWxzZSBpZiAodXNlcl9tb2RlKGVyZWdzKSkKKwkJcmVncyA9IHRhc2tfcHRfcmVncyhjdXJyZW50KTsKKwkvKiBFeGNlcHRpb24gZnJvbSBrZXJuZWwgYW5kIGludGVycnVwdHMgYXJlIGVuYWJsZWQuIE1vdmUgdG8KKwkgICBrZXJuZWwgcHJvY2VzcyBzdGFjay4gKi8KKwllbHNlIGlmIChlcmVncy0+ZmxhZ3MgJiBYODZfRUZMQUdTX0lGKQorCQlyZWdzID0gKHN0cnVjdCBwdF9yZWdzICopKGVyZWdzLT5zcCAtPSBzaXplb2Yoc3RydWN0IHB0X3JlZ3MpKTsKKwlpZiAoZXJlZ3MgIT0gcmVncykKKwkJKnJlZ3MgPSAqZXJlZ3M7CisJcmV0dXJuIHJlZ3M7Cit9CisjZW5kaWYKKworLyoKKyAqIE91ciBoYW5kbGluZyBvZiB0aGUgcHJvY2Vzc29yIGRlYnVnIHJlZ2lzdGVycyBpcyBub24tdHJpdmlhbC4KKyAqIFdlIGRvIG5vdCBjbGVhciB0aGVtIG9uIGVudHJ5IGFuZCBleGl0IGZyb20gdGhlIGtlcm5lbC4gVGhlcmVmb3JlCisgKiBpdCBpcyBwb3NzaWJsZSB0byBnZXQgYSB3YXRjaHBvaW50IHRyYXAgaGVyZSBmcm9tIGluc2lkZSB0aGUga2VybmVsLgorICogSG93ZXZlciwgdGhlIGNvZGUgaW4gLi9wdHJhY2UuYyBoYXMgZW5zdXJlZCB0aGF0IHRoZSB1c2VyIGNhbgorICogb25seSBzZXQgd2F0Y2hwb2ludHMgb24gdXNlcnNwYWNlIGFkZHJlc3Nlcy4gVGhlcmVmb3JlIHRoZSBpbi1rZXJuZWwKKyAqIHdhdGNocG9pbnQgdHJhcCBjYW4gb25seSBvY2N1ciBpbiBjb2RlIHdoaWNoIGlzIHJlYWRpbmcvd3JpdGluZworICogZnJvbSB1c2VyIHNwYWNlLiBTdWNoIGNvZGUgbXVzdCBub3QgaG9sZCBrZXJuZWwgbG9ja3MgKHNpbmNlIGl0CisgKiBjYW4gZXF1YWxseSB0YWtlIGEgcGFnZSBmYXVsdCksIHRoZXJlZm9yZSBpdCBpcyBzYWZlIHRvIGNhbGwKKyAqIGZvcmNlX3NpZ19pbmZvIGV2ZW4gdGhvdWdoIHRoYXQgY2xhaW1zIGFuZCByZWxlYXNlcyBsb2Nrcy4KKyAqCisgKiBDb2RlIGluIC4vc2lnbmFsLmMgZW5zdXJlcyB0aGF0IHRoZSBkZWJ1ZyBjb250cm9sIHJlZ2lzdGVyCisgKiBpcyByZXN0b3JlZCBiZWZvcmUgd2UgZGVsaXZlciBhbnkgc2lnbmFsLCBhbmQgdGhlcmVmb3JlIHRoYXQKKyAqIHVzZXIgY29kZSBydW5zIHdpdGggdGhlIGNvcnJlY3QgZGVidWcgY29udHJvbCByZWdpc3RlciBldmVuIHRob3VnaAorICogd2UgY2xlYXIgaXQgaGVyZS4KKyAqCisgKiBCZWluZyBjYXJlZnVsIGhlcmUgbWVhbnMgdGhhdCB3ZSBkb24ndCBoYXZlIHRvIGJlIGFzIGNhcmVmdWwgaW4gYQorICogbG90IG9mIG1vcmUgY29tcGxpY2F0ZWQgcGxhY2VzICh0YXNrIHN3aXRjaGluZyBjYW4gYmUgYSBiaXQgbGF6eQorICogYWJvdXQgcmVzdG9yaW5nIGFsbCB0aGUgZGVidWcgc3RhdGUsIGFuZCBwdHJhY2UgZG9lc24ndCBoYXZlIHRvCisgKiBmaW5kIGV2ZXJ5IG9jY3VycmVuY2Ugb2YgdGhlIFRGIGJpdCB0aGF0IGNvdWxkIGJlIHNhdmVkIGF3YXkgZXZlbgorICogYnkgdXNlciBjb2RlKQorICoKKyAqIE1heSBydW4gb24gSVNUIHN0YWNrLgorICovCitkb3RyYXBsaW5rYWdlIHZvaWQgX19rcHJvYmVzIGRvX2RlYnVnKHN0cnVjdCBwdF9yZWdzICpyZWdzLCBsb25nIGVycm9yX2NvZGUpCit7CisJc3RydWN0IHRhc2tfc3RydWN0ICp0c2sgPSBjdXJyZW50OworCXVuc2lnbmVkIGxvbmcgY29uZGl0aW9uOworCWludCBzaV9jb2RlOworCisJZ2V0X2RlYnVncmVnKGNvbmRpdGlvbiwgNik7CisKKwkvKgorCSAqIFRoZSBwcm9jZXNzb3IgY2xlYXJlZCBCVEYsIHNvIGRvbid0IG1hcmsgdGhhdCB3ZSBuZWVkIGl0IHNldC4KKwkgKi8KKwljbGVhcl90c2tfdGhyZWFkX2ZsYWcodHNrLCBUSUZfREVCVUdDVExNU1IpOworCXRzay0+dGhyZWFkLmRlYnVnY3RsbXNyID0gMDsKKworCWlmIChub3RpZnlfZGllKERJRV9ERUJVRywgImRlYnVnIiwgcmVncywgY29uZGl0aW9uLCBlcnJvcl9jb2RlLAorCQkJCQkJU0lHVFJBUCkgPT0gTk9USUZZX1NUT1ApCisJCXJldHVybjsKKworCS8qIEl0J3Mgc2FmZSB0byBhbGxvdyBpcnEncyBhZnRlciBEUjYgaGFzIGJlZW4gc2F2ZWQgKi8KKwlwcmVlbXB0X2NvbmRpdGlvbmFsX3N0aShyZWdzKTsKKworCS8qIE1hc2sgb3V0IHNwdXJpb3VzIGRlYnVnIHRyYXBzIGR1ZSB0byBsYXp5IERSNyBzZXR0aW5nICovCisJaWYgKGNvbmRpdGlvbiAmIChEUl9UUkFQMHxEUl9UUkFQMXxEUl9UUkFQMnxEUl9UUkFQMykpIHsKKwkJaWYgKCF0c2stPnRocmVhZC5kZWJ1Z3JlZzcpCisJCQlnb3RvIGNsZWFyX2RyNzsKKwl9CisKKyNpZmRlZiBDT05GSUdfWDg2XzMyCisJaWYgKHJlZ3MtPmZsYWdzICYgWDg2X1ZNX01BU0spCisJCWdvdG8gZGVidWdfdm04NjsKKyNlbmRpZgorCisJLyogU2F2ZSBkZWJ1ZyBzdGF0dXMgcmVnaXN0ZXIgd2hlcmUgcHRyYWNlIGNhbiBzZWUgaXQgKi8KKwl0c2stPnRocmVhZC5kZWJ1Z3JlZzYgPSBjb25kaXRpb247CisKKwkvKgorCSAqIFNpbmdsZS1zdGVwcGluZyB0aHJvdWdoIFRGOiBtYWtlIHN1cmUgd2UgaWdub3JlIGFueSBldmVudHMgaW4KKwkgKiBrZXJuZWwgc3BhY2UgKGJ1dCByZS1lbmFibGUgVEYgd2hlbiByZXR1cm5pbmcgdG8gdXNlciBtb2RlKS4KKwkgKi8KKwlpZiAoY29uZGl0aW9uICYgRFJfU1RFUCkgeworCQlpZiAoIXVzZXJfbW9kZShyZWdzKSkKKwkJCWdvdG8gY2xlYXJfVEZfcmVlbmFibGU7CisJfQorCisJc2lfY29kZSA9IGdldF9zaV9jb2RlKGNvbmRpdGlvbik7CisJLyogT2ssIGZpbmFsbHkgc29tZXRoaW5nIHdlIGNhbiBoYW5kbGUgKi8KKwlzZW5kX3NpZ3RyYXAodHNrLCByZWdzLCBlcnJvcl9jb2RlLCBzaV9jb2RlKTsKKworCS8qCisJICogRGlzYWJsZSBhZGRpdGlvbmFsIHRyYXBzLiBUaGV5J2xsIGJlIHJlLWVuYWJsZWQgd2hlbgorCSAqIHRoZSBzaWduYWwgaXMgZGVsaXZlcmVkLgorCSAqLworY2xlYXJfZHI3OgorCXNldF9kZWJ1Z3JlZygwLCA3KTsKKwlwcmVlbXB0X2NvbmRpdGlvbmFsX2NsaShyZWdzKTsKKwlyZXR1cm47CisKKyNpZmRlZiBDT05GSUdfWDg2XzMyCitkZWJ1Z192bTg2OgorCWhhbmRsZV92bTg2X3RyYXAoKHN0cnVjdCBrZXJuZWxfdm04Nl9yZWdzICopIHJlZ3MsIGVycm9yX2NvZGUsIDEpOworCXByZWVtcHRfY29uZGl0aW9uYWxfY2xpKHJlZ3MpOworCXJldHVybjsKKyNlbmRpZgorCitjbGVhcl9URl9yZWVuYWJsZToKKwlzZXRfdHNrX3RocmVhZF9mbGFnKHRzaywgVElGX1NJTkdMRVNURVApOworCXJlZ3MtPmZsYWdzICY9IH5YODZfRUZMQUdTX1RGOworCXByZWVtcHRfY29uZGl0aW9uYWxfY2xpKHJlZ3MpOworCXJldHVybjsKK30KKworI2lmZGVmIENPTkZJR19YODZfNjQKK3N0YXRpYyBpbnQga2VybmVsX21hdGhfZXJyb3Ioc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIGNvbnN0IGNoYXIgKnN0ciwgaW50IHRyYXBucikKK3sKKwlpZiAoZml4dXBfZXhjZXB0aW9uKHJlZ3MpKQorCQlyZXR1cm4gMTsKKworCW5vdGlmeV9kaWUoRElFX0dQRiwgc3RyLCByZWdzLCAwLCB0cmFwbnIsIFNJR0ZQRSk7CisJLyogSWxsZWdhbCBmbG9hdGluZyBwb2ludCBvcGVyYXRpb24gaW4gdGhlIGtlcm5lbCAqLworCWN1cnJlbnQtPnRocmVhZC50cmFwX25vID0gdHJhcG5yOworCWRpZShzdHIsIHJlZ3MsIDApOworCXJldHVybiAwOworfQorI2VuZGlmCisKKy8qCisgKiBOb3RlIHRoYXQgd2UgcGxheSBhcm91bmQgd2l0aCB0aGUgJ1RTJyBiaXQgaW4gYW4gYXR0ZW1wdCB0byBnZXQKKyAqIHRoZSBjb3JyZWN0IGJlaGF2aW91ciBldmVuIGluIHRoZSBwcmVzZW5jZSBvZiB0aGUgYXN5bmNocm9ub3VzCisgKiBJUlExMyBiZWhhdmlvdXIKKyAqLwordm9pZCBtYXRoX2Vycm9yKHZvaWQgX191c2VyICppcCkKK3sKKwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2s7CisJc2lnaW5mb190IGluZm87CisJdW5zaWduZWQgc2hvcnQgY3dkLCBzd2Q7CisKKwkvKgorCSAqIFNhdmUgdGhlIGluZm8gZm9yIHRoZSBleGNlcHRpb24gaGFuZGxlciBhbmQgY2xlYXIgdGhlIGVycm9yLgorCSAqLworCXRhc2sgPSBjdXJyZW50OworCXNhdmVfaW5pdF9mcHUodGFzayk7CisJdGFzay0+dGhyZWFkLnRyYXBfbm8gPSAxNjsKKwl0YXNrLT50aHJlYWQuZXJyb3JfY29kZSA9IDA7CisJaW5mby5zaV9zaWdubyA9IFNJR0ZQRTsKKwlpbmZvLnNpX2Vycm5vID0gMDsKKwlpbmZvLnNpX2NvZGUgPSBfX1NJX0ZBVUxUOworCWluZm8uc2lfYWRkciA9IGlwOworCS8qCisJICogKH5jd2QgJiBzd2QpIHdpbGwgbWFzayBvdXQgZXhjZXB0aW9ucyB0aGF0IGFyZSBub3Qgc2V0IHRvIHVubWFza2VkCisJICogc3RhdHVzLiAgMHgzZiBpcyB0aGUgZXhjZXB0aW9uIGJpdHMgaW4gdGhlc2UgcmVncywgMHgyMDAgaXMgdGhlCisJICogQzEgcmVnIHlvdSBuZWVkIGluIGNhc2Ugb2YgYSBzdGFjayBmYXVsdCwgMHgwNDAgaXMgdGhlIHN0YWNrCisJICogZmF1bHQgYml0LiAgV2Ugc2hvdWxkIG9ubHkgYmUgdGFraW5nIG9uZSBleGNlcHRpb24gYXQgYSB0aW1lLAorCSAqIHNvIGlmIHRoaXMgY29tYmluYXRpb24gZG9lc24ndCBwcm9kdWNlIGFueSBzaW5nbGUgZXhjZXB0aW9uLAorCSAqIHRoZW4gd2UgaGF2ZSBhIGJhZCBwcm9ncmFtIHRoYXQgaXNuJ3Qgc3luY2hyb25pemluZyBpdHMgRlBVIHVzYWdlCisJICogYW5kIGl0IHdpbGwgc3VmZmVyIHRoZSBjb25zZXF1ZW5jZXMgc2luY2Ugd2Ugd29uJ3QgYmUgYWJsZSB0bworCSAqIGZ1bGx5IHJlcHJvZHVjZSB0aGUgY29udGV4dCBvZiB0aGUgZXhjZXB0aW9uCisJICovCisJY3dkID0gZ2V0X2ZwdV9jd2QodGFzayk7CisJc3dkID0gZ2V0X2ZwdV9zd2QodGFzayk7CisJc3dpdGNoIChzd2QgJiB+Y3dkICYgMHgzZikgeworCWNhc2UgMHgwMDA6IC8qIE5vIHVubWFza2VkIGV4Y2VwdGlvbiAqLworI2lmZGVmIENPTkZJR19YODZfMzIKKwkJcmV0dXJuOworI2VuZGlmCisJZGVmYXVsdDogLyogTXVsdGlwbGUgZXhjZXB0aW9ucyAqLworCQlicmVhazsKKwljYXNlIDB4MDAxOiAvKiBJbnZhbGlkIE9wICovCisJCS8qCisJCSAqIHN3ZCAmIDB4MjQwID09IDB4MDQwOiBTdGFjayBVbmRlcmZsb3cKKwkJICogc3dkICYgMHgyNDAgPT0gMHgyNDA6IFN0YWNrIE92ZXJmbG93CisJCSAqIFVzZXIgbXVzdCBjbGVhciB0aGUgU0YgYml0ICgweDQwKSBpZiBzZXQKKwkJICovCisJCWluZm8uc2lfY29kZSA9IEZQRV9GTFRJTlY7CisJCWJyZWFrOworCWNhc2UgMHgwMDI6IC8qIERlbm9ybWFsaXplICovCisJY2FzZSAweDAxMDogLyogVW5kZXJmbG93ICovCisJCWluZm8uc2lfY29kZSA9IEZQRV9GTFRVTkQ7CisJCWJyZWFrOworCWNhc2UgMHgwMDQ6IC8qIFplcm8gRGl2aWRlICovCisJCWluZm8uc2lfY29kZSA9IEZQRV9GTFRESVY7CisJCWJyZWFrOworCWNhc2UgMHgwMDg6IC8qIE92ZXJmbG93ICovCisJCWluZm8uc2lfY29kZSA9IEZQRV9GTFRPVkY7CisJCWJyZWFrOworCWNhc2UgMHgwMjA6IC8qIFByZWNpc2lvbiAqLworCQlpbmZvLnNpX2NvZGUgPSBGUEVfRkxUUkVTOworCQlicmVhazsKKwl9CisJZm9yY2Vfc2lnX2luZm8oU0lHRlBFLCAmaW5mbywgdGFzayk7Cit9CisKK2RvdHJhcGxpbmthZ2Ugdm9pZCBkb19jb3Byb2Nlc3Nvcl9lcnJvcihzdHJ1Y3QgcHRfcmVncyAqcmVncywgbG9uZyBlcnJvcl9jb2RlKQoreworCWNvbmRpdGlvbmFsX3N0aShyZWdzKTsKKworI2lmZGVmIENPTkZJR19YODZfMzIKKwlpZ25vcmVfZnB1X2lycSA9IDE7CisjZWxzZQorCWlmICghdXNlcl9tb2RlKHJlZ3MpICYmCisJICAgIGtlcm5lbF9tYXRoX2Vycm9yKHJlZ3MsICJrZXJuZWwgeDg3IG1hdGggZXJyb3IiLCAxNikpCisJCXJldHVybjsKKyNlbmRpZgorCisJbWF0aF9lcnJvcigodm9pZCBfX3VzZXIgKilyZWdzLT5pcCk7Cit9CisKK3N0YXRpYyB2b2lkIHNpbWRfbWF0aF9lcnJvcih2b2lkIF9fdXNlciAqaXApCit7CisJc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrOworCXNpZ2luZm9fdCBpbmZvOworCXVuc2lnbmVkIHNob3J0IG14Y3NyOworCisJLyoKKwkgKiBTYXZlIHRoZSBpbmZvIGZvciB0aGUgZXhjZXB0aW9uIGhhbmRsZXIgYW5kIGNsZWFyIHRoZSBlcnJvci4KKwkgKi8KKwl0YXNrID0gY3VycmVudDsKKwlzYXZlX2luaXRfZnB1KHRhc2spOworCXRhc2stPnRocmVhZC50cmFwX25vID0gMTk7CisJdGFzay0+dGhyZWFkLmVycm9yX2NvZGUgPSAwOworCWluZm8uc2lfc2lnbm8gPSBTSUdGUEU7CisJaW5mby5zaV9lcnJubyA9IDA7CisJaW5mby5zaV9jb2RlID0gX19TSV9GQVVMVDsKKwlpbmZvLnNpX2FkZHIgPSBpcDsKKwkvKgorCSAqIFRoZSBTSU1EIEZQVSBleGNlcHRpb25zIGFyZSBoYW5kbGVkIGEgbGl0dGxlIGRpZmZlcmVudGx5LCBhcyB0aGVyZQorCSAqIGlzIG9ubHkgYSBzaW5nbGUgc3RhdHVzL2NvbnRyb2wgcmVnaXN0ZXIuICBUaHVzLCB0byBkZXRlcm1pbmUgd2hpY2gKKwkgKiB1bm1hc2tlZCBleGNlcHRpb24gd2FzIGNhdWdodCB3ZSBtdXN0IG1hc2sgdGhlIGV4Y2VwdGlvbiBtYXNrIGJpdHMKKwkgKiBhdCAweDFmODAsIGFuZCB0aGVuIHVzZSB0aGVzZSB0byBtYXNrIHRoZSBleGNlcHRpb24gYml0cyBhdCAweDNmLgorCSAqLworCW14Y3NyID0gZ2V0X2ZwdV9teGNzcih0YXNrKTsKKwlzd2l0Y2ggKH4oKG14Y3NyICYgMHgxZjgwKSA+PiA3KSAmIChteGNzciAmIDB4M2YpKSB7CisJY2FzZSAweDAwMDoKKwlkZWZhdWx0OgorCQlicmVhazsKKwljYXNlIDB4MDAxOiAvKiBJbnZhbGlkIE9wICovCisJCWluZm8uc2lfY29kZSA9IEZQRV9GTFRJTlY7CisJCWJyZWFrOworCWNhc2UgMHgwMDI6IC8qIERlbm9ybWFsaXplICovCisJY2FzZSAweDAxMDogLyogVW5kZXJmbG93ICovCisJCWluZm8uc2lfY29kZSA9IEZQRV9GTFRVTkQ7CisJCWJyZWFrOworCWNhc2UgMHgwMDQ6IC8qIFplcm8gRGl2aWRlICovCisJCWluZm8uc2lfY29kZSA9IEZQRV9GTFRESVY7CisJCWJyZWFrOworCWNhc2UgMHgwMDg6IC8qIE92ZXJmbG93ICovCisJCWluZm8uc2lfY29kZSA9IEZQRV9GTFRPVkY7CisJCWJyZWFrOworCWNhc2UgMHgwMjA6IC8qIFByZWNpc2lvbiAqLworCQlpbmZvLnNpX2NvZGUgPSBGUEVfRkxUUkVTOworCQlicmVhazsKKwl9CisJZm9yY2Vfc2lnX2luZm8oU0lHRlBFLCAmaW5mbywgdGFzayk7Cit9CisKK2RvdHJhcGxpbmthZ2Ugdm9pZAorZG9fc2ltZF9jb3Byb2Nlc3Nvcl9lcnJvcihzdHJ1Y3QgcHRfcmVncyAqcmVncywgbG9uZyBlcnJvcl9jb2RlKQoreworCWNvbmRpdGlvbmFsX3N0aShyZWdzKTsKKworI2lmZGVmIENPTkZJR19YODZfMzIKKwlpZiAoY3B1X2hhc194bW0pIHsKKwkJLyogSGFuZGxlIFNJTUQgRlBVIGV4Y2VwdGlvbnMgb24gUElJSSsgcHJvY2Vzc29ycy4gKi8KKwkJaWdub3JlX2ZwdV9pcnEgPSAxOworCQlzaW1kX21hdGhfZXJyb3IoKHZvaWQgX191c2VyICopcmVncy0+aXApOworCQlyZXR1cm47CisJfQorCS8qCisJICogSGFuZGxlIHN0cmFuZ2UgY2FjaGUgZmx1c2ggZnJvbSB1c2VyIHNwYWNlIGV4Y2VwdGlvbgorCSAqIGluIGFsbCBvdGhlciBjYXNlcy4gIFRoaXMgaXMgdW5kb2N1bWVudGVkIGJlaGF2aW91ci4KKwkgKi8KKwlpZiAocmVncy0+ZmxhZ3MgJiBYODZfVk1fTUFTSykgeworCQloYW5kbGVfdm04Nl9mYXVsdCgoc3RydWN0IGtlcm5lbF92bTg2X3JlZ3MgKilyZWdzLCBlcnJvcl9jb2RlKTsKKwkJcmV0dXJuOworCX0KKwljdXJyZW50LT50aHJlYWQudHJhcF9ubyA9IDE5OworCWN1cnJlbnQtPnRocmVhZC5lcnJvcl9jb2RlID0gZXJyb3JfY29kZTsKKwlkaWVfaWZfa2VybmVsKCJjYWNoZSBmbHVzaCBkZW5pZWQiLCByZWdzLCBlcnJvcl9jb2RlKTsKKwlmb3JjZV9zaWcoU0lHU0VHViwgY3VycmVudCk7CisjZWxzZQorCWlmICghdXNlcl9tb2RlKHJlZ3MpICYmCisJCQlrZXJuZWxfbWF0aF9lcnJvcihyZWdzLCAia2VybmVsIHNpbWQgbWF0aCBlcnJvciIsIDE5KSkKKwkJcmV0dXJuOworCXNpbWRfbWF0aF9lcnJvcigodm9pZCBfX3VzZXIgKilyZWdzLT5pcCk7CisjZW5kaWYKK30KKworZG90cmFwbGlua2FnZSB2b2lkCitkb19zcHVyaW91c19pbnRlcnJ1cHRfYnVnKHN0cnVjdCBwdF9yZWdzICpyZWdzLCBsb25nIGVycm9yX2NvZGUpCit7CisJY29uZGl0aW9uYWxfc3RpKHJlZ3MpOworI2lmIDAKKwkvKiBObyBuZWVkIHRvIHdhcm4gYWJvdXQgdGhpcyBhbnkgbG9uZ2VyLiAqLworCXByaW50ayhLRVJOX0lORk8gIklnbm9yaW5nIFA2IExvY2FsIEFQSUMgU3B1cmlvdXMgSW50ZXJydXB0IEJ1Zy4uLlxuIik7CisjZW5kaWYKK30KKworI2lmZGVmIENPTkZJR19YODZfMzIKK3Vuc2lnbmVkIGxvbmcgcGF0Y2hfZXNwZml4X2Rlc2ModW5zaWduZWQgbG9uZyB1ZXNwLCB1bnNpZ25lZCBsb25nIGtlc3ApCit7CisJc3RydWN0IGRlc2Nfc3RydWN0ICpnZHQgPSBnZXRfY3B1X2dkdF90YWJsZShzbXBfcHJvY2Vzc29yX2lkKCkpOworCXVuc2lnbmVkIGxvbmcgYmFzZSA9IChrZXNwIC0gdWVzcCkgJiAtVEhSRUFEX1NJWkU7CisJdW5zaWduZWQgbG9uZyBuZXdfa2VzcCA9IGtlc3AgLSBiYXNlOworCXVuc2lnbmVkIGxvbmcgbGltX3BhZ2VzID0gKG5ld19rZXNwIHwgKFRIUkVBRF9TSVpFIC0gMSkpID4+IFBBR0VfU0hJRlQ7CisJX191NjQgZGVzYyA9ICooX191NjQgKikmZ2R0W0dEVF9FTlRSWV9FU1BGSVhfU1NdOworCisJLyogU2V0IHVwIGJhc2UgZm9yIGVzcGZpeCBzZWdtZW50ICovCisJZGVzYyAmPSAweDAwZjBmZjAwMDAwMDAwMDBVTEw7CisJZGVzYyB8PQkoKCgoX191NjQpYmFzZSkgPDwgMTYpICYgMHgwMDAwMDBmZmZmZmYwMDAwVUxMKSB8CisJCSgoKChfX3U2NCliYXNlKSA8PCAzMikgJiAweGZmMDAwMDAwMDAwMDAwMDBVTEwpIHwKKwkJKCgoKF9fdTY0KWxpbV9wYWdlcykgPDwgMzIpICYgMHgwMDBmMDAwMDAwMDAwMDAwVUxMKSB8CisJCShsaW1fcGFnZXMgJiAweGZmZmYpOworCSooX191NjQgKikmZ2R0W0dEVF9FTlRSWV9FU1BGSVhfU1NdID0gZGVzYzsKKworCXJldHVybiBuZXdfa2VzcDsKK30KKyNlbHNlCithc21saW5rYWdlIHZvaWQgX19hdHRyaWJ1dGVfXygod2VhaykpIHNtcF90aGVybWFsX2ludGVycnVwdCh2b2lkKQoreworfQorCithc21saW5rYWdlIHZvaWQgX19hdHRyaWJ1dGVfXygod2VhaykpIG1jZV90aHJlc2hvbGRfaW50ZXJydXB0KHZvaWQpCit7Cit9CisjZW5kaWYKKworLyoKKyAqICdtYXRoX3N0YXRlX3Jlc3RvcmUoKScgc2F2ZXMgdGhlIGN1cnJlbnQgbWF0aCBpbmZvcm1hdGlvbiBpbiB0aGUKKyAqIG9sZCBtYXRoIHN0YXRlIGFycmF5LCBhbmQgZ2V0cyB0aGUgbmV3IG9uZXMgZnJvbSB0aGUgY3VycmVudCB0YXNrCisgKgorICogQ2FyZWZ1bC4uIFRoZXJlIGFyZSBwcm9ibGVtcyB3aXRoIElCTS1kZXNpZ25lZCBJUlExMyBiZWhhdmlvdXIuCisgKiBEb24ndCB0b3VjaCB1bmxlc3MgeW91ICpyZWFsbHkqIGtub3cgaG93IGl0IHdvcmtzLgorICoKKyAqIE11c3QgYmUgY2FsbGVkIHdpdGgga2VybmVsIHByZWVtcHRpb24gZGlzYWJsZWQgKGluIHRoaXMgY2FzZSwKKyAqIGxvY2FsIGludGVycnVwdHMgYXJlIGRpc2FibGVkIGF0IHRoZSBjYWxsLXNpdGUgaW4gZW50cnkuUykuCisgKi8KK2FzbWxpbmthZ2Ugdm9pZCBtYXRoX3N0YXRlX3Jlc3RvcmUodm9pZCkKK3sKKwlzdHJ1Y3QgdGhyZWFkX2luZm8gKnRocmVhZCA9IGN1cnJlbnRfdGhyZWFkX2luZm8oKTsKKwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzayA9IHRocmVhZC0+dGFzazsKKworCWlmICghdHNrX3VzZWRfbWF0aCh0c2spKSB7CisJCWxvY2FsX2lycV9lbmFibGUoKTsKKwkJLyoKKwkJICogZG9lcyBhIHNsYWIgYWxsb2Mgd2hpY2ggY2FuIHNsZWVwCisJCSAqLworCQlpZiAoaW5pdF9mcHUodHNrKSkgeworCQkJLyoKKwkJCSAqIHJhbiBvdXQgb2YgbWVtb3J5IQorCQkJICovCisJCQlkb19ncm91cF9leGl0KFNJR0tJTEwpOworCQkJcmV0dXJuOworCQl9CisJCWxvY2FsX2lycV9kaXNhYmxlKCk7CisJfQorCisJY2x0cygpOwkJCQkvKiBBbGxvdyBtYXRocyBvcHMgKG9yIHdlIHJlY3Vyc2UpICovCisjaWZkZWYgQ09ORklHX1g4Nl8zMgorCXJlc3RvcmVfZnB1KHRzayk7CisjZWxzZQorCS8qCisJICogUGFyYW5vaWQgcmVzdG9yZS4gc2VuZCBhIFNJR1NFR1YgaWYgd2UgZmFpbCB0byByZXN0b3JlIHRoZSBzdGF0ZS4KKwkgKi8KKwlpZiAodW5saWtlbHkocmVzdG9yZV9mcHVfY2hlY2tpbmcodHNrKSkpIHsKKwkJc3R0cygpOworCQlmb3JjZV9zaWcoU0lHU0VHViwgdHNrKTsKKwkJcmV0dXJuOworCX0KKyNlbmRpZgorCXRocmVhZC0+c3RhdHVzIHw9IFRTX1VTRURGUFU7CS8qIFNvIHdlIGZuc2F2ZSBvbiBzd2l0Y2hfdG8oKSAqLworCXRzay0+ZnB1X2NvdW50ZXIrKzsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKG1hdGhfc3RhdGVfcmVzdG9yZSk7CisKKyNpZm5kZWYgQ09ORklHX01BVEhfRU1VTEFUSU9OCithc21saW5rYWdlIHZvaWQgbWF0aF9lbXVsYXRlKGxvbmcgYXJnKQoreworCXByaW50ayhLRVJOX0VNRVJHCisJCSJtYXRoLWVtdWxhdGlvbiBub3QgZW5hYmxlZCBhbmQgbm8gY29wcm9jZXNzb3IgZm91bmQuXG4iKTsKKwlwcmludGsoS0VSTl9FTUVSRyAia2lsbGluZyAlcy5cbiIsIGN1cnJlbnQtPmNvbW0pOworCWZvcmNlX3NpZyhTSUdGUEUsIGN1cnJlbnQpOworCXNjaGVkdWxlKCk7Cit9CisjZW5kaWYgLyogQ09ORklHX01BVEhfRU1VTEFUSU9OICovCisKK2RvdHJhcGxpbmthZ2Ugdm9pZCBfX2twcm9iZXMKK2RvX2RldmljZV9ub3RfYXZhaWxhYmxlKHN0cnVjdCBwdF9yZWdzICpyZWdzLCBsb25nIGVycm9yKQoreworI2lmZGVmIENPTkZJR19YODZfMzIKKwlpZiAocmVhZF9jcjAoKSAmIFg4Nl9DUjBfRU0pIHsKKwkJY29uZGl0aW9uYWxfc3RpKHJlZ3MpOworCQltYXRoX2VtdWxhdGUoMCk7CisJfSBlbHNlIHsKKwkJbWF0aF9zdGF0ZV9yZXN0b3JlKCk7IC8qIGludGVycnVwdHMgc3RpbGwgb2ZmICovCisJCWNvbmRpdGlvbmFsX3N0aShyZWdzKTsKKwl9CisjZWxzZQorCW1hdGhfc3RhdGVfcmVzdG9yZSgpOworI2VuZGlmCit9CisKKyNpZmRlZiBDT05GSUdfWDg2XzMyCisjaWZkZWYgQ09ORklHX1g4Nl9NQ0UKK2RvdHJhcGxpbmthZ2Ugdm9pZCBfX2twcm9iZXMgZG9fbWFjaGluZV9jaGVjayhzdHJ1Y3QgcHRfcmVncyAqcmVncywgbG9uZyBlcnJvcikKK3sKKwljb25kaXRpb25hbF9zdGkocmVncyk7CisJbWFjaGluZV9jaGVja192ZWN0b3IocmVncywgZXJyb3IpOworfQorI2VuZGlmCisKK2RvdHJhcGxpbmthZ2Ugdm9pZCBkb19pcmV0X2Vycm9yKHN0cnVjdCBwdF9yZWdzICpyZWdzLCBsb25nIGVycm9yX2NvZGUpCit7CisJc2lnaW5mb190IGluZm87CisJbG9jYWxfaXJxX2VuYWJsZSgpOworCisJaW5mby5zaV9zaWdubyA9IFNJR0lMTDsKKwlpbmZvLnNpX2Vycm5vID0gMDsKKwlpbmZvLnNpX2NvZGUgPSBJTExfQkFEU1RLOworCWluZm8uc2lfYWRkciA9IDA7CisJaWYgKG5vdGlmeV9kaWUoRElFX1RSQVAsICJpcmV0IGV4Y2VwdGlvbiIsCisJCQlyZWdzLCBlcnJvcl9jb2RlLCAzMiwgU0lHSUxMKSA9PSBOT1RJRllfU1RPUCkKKwkJcmV0dXJuOworCWRvX3RyYXAoMzIsIFNJR0lMTCwgImlyZXQgZXhjZXB0aW9uIiwgcmVncywgZXJyb3JfY29kZSwgJmluZm8pOworfQorI2VuZGlmCisKK3ZvaWQgX19pbml0IHRyYXBfaW5pdCh2b2lkKQoreworI2lmZGVmIENPTkZJR19YODZfMzIKKwlpbnQgaTsKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX0VJU0EKKwl2b2lkIF9faW9tZW0gKnAgPSBlYXJseV9pb3JlbWFwKDB4MEZGRkQ5LCA0KTsKKworCWlmIChyZWFkbChwKSA9PSAnRScgKyAoJ0knPDw4KSArICgnUyc8PDE2KSArICgnQSc8PDI0KSkKKwkJRUlTQV9idXMgPSAxOworCWVhcmx5X2lvdW5tYXAocCwgNCk7CisjZW5kaWYKKworCXNldF9pbnRyX2dhdGUoMCwgJmRpdmlkZV9lcnJvcik7CisJc2V0X2ludHJfZ2F0ZV9pc3QoMSwgJmRlYnVnLCBERUJVR19TVEFDSyk7CisJc2V0X2ludHJfZ2F0ZV9pc3QoMiwgJm5taSwgTk1JX1NUQUNLKTsKKwkvKiBpbnQzIGNhbiBiZSBjYWxsZWQgZnJvbSBhbGwgKi8KKwlzZXRfc3lzdGVtX2ludHJfZ2F0ZV9pc3QoMywgJmludDMsIERFQlVHX1NUQUNLKTsKKwkvKiBpbnQ0IGNhbiBiZSBjYWxsZWQgZnJvbSBhbGwgKi8KKwlzZXRfc3lzdGVtX2ludHJfZ2F0ZSg0LCAmb3ZlcmZsb3cpOworCXNldF9pbnRyX2dhdGUoNSwgJmJvdW5kcyk7CisJc2V0X2ludHJfZ2F0ZSg2LCAmaW52YWxpZF9vcCk7CisJc2V0X2ludHJfZ2F0ZSg3LCAmZGV2aWNlX25vdF9hdmFpbGFibGUpOworI2lmZGVmIENPTkZJR19YODZfMzIKKwlzZXRfdGFza19nYXRlKDgsIEdEVF9FTlRSWV9ET1VCTEVGQVVMVF9UU1MpOworI2Vsc2UKKwlzZXRfaW50cl9nYXRlX2lzdCg4LCAmZG91YmxlX2ZhdWx0LCBET1VCTEVGQVVMVF9TVEFDSyk7CisjZW5kaWYKKwlzZXRfaW50cl9nYXRlKDksICZjb3Byb2Nlc3Nvcl9zZWdtZW50X292ZXJydW4pOworCXNldF9pbnRyX2dhdGUoMTAsICZpbnZhbGlkX1RTUyk7CisJc2V0X2ludHJfZ2F0ZSgxMSwgJnNlZ21lbnRfbm90X3ByZXNlbnQpOworCXNldF9pbnRyX2dhdGVfaXN0KDEyLCAmc3RhY2tfc2VnbWVudCwgU1RBQ0tGQVVMVF9TVEFDSyk7CisJc2V0X2ludHJfZ2F0ZSgxMywgJmdlbmVyYWxfcHJvdGVjdGlvbik7CisJc2V0X2ludHJfZ2F0ZSgxNCwgJnBhZ2VfZmF1bHQpOworCXNldF9pbnRyX2dhdGUoMTUsICZzcHVyaW91c19pbnRlcnJ1cHRfYnVnKTsKKwlzZXRfaW50cl9nYXRlKDE2LCAmY29wcm9jZXNzb3JfZXJyb3IpOworCXNldF9pbnRyX2dhdGUoMTcsICZhbGlnbm1lbnRfY2hlY2spOworI2lmZGVmIENPTkZJR19YODZfTUNFCisJc2V0X2ludHJfZ2F0ZV9pc3QoMTgsICZtYWNoaW5lX2NoZWNrLCBNQ0VfU1RBQ0spOworI2VuZGlmCisJc2V0X2ludHJfZ2F0ZSgxOSwgJnNpbWRfY29wcm9jZXNzb3JfZXJyb3IpOworCisjaWZkZWYgQ09ORklHX0lBMzJfRU1VTEFUSU9OCisJc2V0X3N5c3RlbV9pbnRyX2dhdGUoSUEzMl9TWVNDQUxMX1ZFQ1RPUiwgaWEzMl9zeXNjYWxsKTsKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX1g4Nl8zMgorCWlmIChjcHVfaGFzX2Z4c3IpIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiRW5hYmxpbmcgZmFzdCBGUFUgc2F2ZSBhbmQgcmVzdG9yZS4uLiAiKTsKKwkJc2V0X2luX2NyNChYODZfQ1I0X09TRlhTUik7CisJCXByaW50aygiZG9uZS5cbiIpOworCX0KKwlpZiAoY3B1X2hhc194bW0pIHsKKwkJcHJpbnRrKEtFUk5fSU5GTworCQkJIkVuYWJsaW5nIHVubWFza2VkIFNJTUQgRlBVIGV4Y2VwdGlvbiBzdXBwb3J0Li4uICIpOworCQlzZXRfaW5fY3I0KFg4Nl9DUjRfT1NYTU1FWENQVCk7CisJCXByaW50aygiZG9uZS5cbiIpOworCX0KKworCXNldF9zeXN0ZW1fdHJhcF9nYXRlKFNZU0NBTExfVkVDVE9SLCAmc3lzdGVtX2NhbGwpOworCisJLyogUmVzZXJ2ZSBhbGwgdGhlIGJ1aWx0aW4gYW5kIHRoZSBzeXNjYWxsIHZlY3RvcjogKi8KKwlmb3IgKGkgPSAwOyBpIDwgRklSU1RfRVhURVJOQUxfVkVDVE9SOyBpKyspCisJCXNldF9iaXQoaSwgdXNlZF92ZWN0b3JzKTsKKworCXNldF9iaXQoU1lTQ0FMTF9WRUNUT1IsIHVzZWRfdmVjdG9ycyk7CisjZW5kaWYKKwkvKgorCSAqIFNob3VsZCBiZSBhIGJhcnJpZXIgZm9yIGFueSBleHRlcm5hbCBDUFUgc3RhdGU6CisJICovCisJY3B1X2luaXQoKTsKKworI2lmZGVmIENPTkZJR19YODZfMzIKKwl0cmFwX2luaXRfaG9vaygpOworI2VuZGlmCit9CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvdHJhcHNfMzIuYyBiL2FyY2gveDg2L2tlcm5lbC90cmFwc18zMi5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNDI5YzVkLi4wMDAwMDAwCi0tLSBhL2FyY2gveDg2L2tlcm5lbC90cmFwc18zMi5jCisrKyAvZGV2L251bGwKQEAgLTEsMTI1NyArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAoQykgMTk5MSwgMTk5MiAgTGludXMgVG9ydmFsZHMKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDAsIDIwMDEsIDIwMDIgQW5kaSBLbGVlbiwgU3VTRSBMYWJzCi0gKgotICogIFBlbnRpdW0gSUlJIEZYU1IsIFNTRSBzdXBwb3J0Ci0gKglHYXJldGggSHVnaGVzIDxnYXJldGhAdmFsaW51eC5jb20+LCBNYXkgMjAwMAotICovCi0KLS8qCi0gKiAnVHJhcHMuYycgaGFuZGxlcyBoYXJkd2FyZSB0cmFwcyBhbmQgZmF1bHRzIGFmdGVyIHdlIGhhdmUgc2F2ZWQgc29tZQotICogc3RhdGUgaW4gJ2FzbS5zJy4KLSAqLwotI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgotI2luY2x1ZGUgPGxpbnV4L2thbGxzeW1zLmg+Ci0jaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KLSNpbmNsdWRlIDxsaW51eC9oaWdobWVtLmg+Ci0jaW5jbHVkZSA8bGludXgva3Byb2Jlcy5oPgotI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KLSNpbmNsdWRlIDxsaW51eC91dHNuYW1lLmg+Ci0jaW5jbHVkZSA8bGludXgva2RlYnVnLmg+Ci0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvcHRyYWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+Ci0jaW5jbHVkZSA8bGludXgvdW53aW5kLmg+Ci0jaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KLSNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgotI2luY2x1ZGUgPGxpbnV4L2tleGVjLmg+Ci0jaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KLSNpbmNsdWRlIDxsaW51eC90aW1lci5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9idWcuaD4KLSNpbmNsdWRlIDxsaW51eC9ubWkuaD4KLSNpbmNsdWRlIDxsaW51eC9tbS5oPgotCi0jaWZkZWYgQ09ORklHX0VJU0EKLSNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KLSNpbmNsdWRlIDxsaW51eC9laXNhLmg+Ci0jZW5kaWYKLQotI2lmZGVmIENPTkZJR19NQ0EKLSNpbmNsdWRlIDxsaW51eC9tY2EuaD4KLSNlbmRpZgotCi0jaWYgZGVmaW5lZChDT05GSUdfRURBQykKLSNpbmNsdWRlIDxsaW51eC9lZGFjLmg+Ci0jZW5kaWYKLQotI2luY2x1ZGUgPGFzbS9hcmNoX2hvb2tzLmg+Ci0jaW5jbHVkZSA8YXNtL3N0YWNrdHJhY2UuaD4KLSNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+Ci0jaW5jbHVkZSA8YXNtL2RlYnVncmVnLmg+Ci0jaW5jbHVkZSA8YXNtL2F0b21pYy5oPgotI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KLSNpbmNsdWRlIDxhc20vdW53aW5kLmg+Ci0jaW5jbHVkZSA8YXNtL2Rlc2MuaD4KLSNpbmNsdWRlIDxhc20vaTM4Ny5oPgotI2luY2x1ZGUgPGFzbS9ubWkuaD4KLSNpbmNsdWRlIDxhc20vc21wLmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+Ci0jaW5jbHVkZSA8YXNtL3RyYXBzLmg+Ci0KLSNpbmNsdWRlICJtYWNoX3RyYXBzLmgiCi0KLURFQ0xBUkVfQklUTUFQKHVzZWRfdmVjdG9ycywgTlJfVkVDVE9SUyk7Ci1FWFBPUlRfU1lNQk9MX0dQTCh1c2VkX3ZlY3RvcnMpOwotCi1hc21saW5rYWdlIGludCBzeXN0ZW1fY2FsbCh2b2lkKTsKLQotLyogRG8gd2UgaWdub3JlIEZQVSBpbnRlcnJ1cHRzID8gKi8KLWNoYXIgaWdub3JlX2ZwdV9pcnE7Ci0KLS8qCi0gKiBUaGUgSURUIGhhcyB0byBiZSBwYWdlLWFsaWduZWQgdG8gc2ltcGxpZnkgdGhlIFBlbnRpdW0KLSAqIEYwIDBGIGJ1ZyB3b3JrYXJvdW5kLi4gV2UgaGF2ZSBhIHNwZWNpYWwgbGluayBzZWdtZW50Ci0gKiBmb3IgdGhpcy4KLSAqLwotZ2F0ZV9kZXNjIGlkdF90YWJsZVsyNTZdCi0JX19hdHRyaWJ1dGVfXygoX19zZWN0aW9uX18oIi5kYXRhLmlkdCIpKSkgPSB7IHsgeyB7IDAsIDAgfSB9IH0sIH07Ci0KLWludCBwYW5pY19vbl91bnJlY292ZXJlZF9ubWk7Ci1pbnQga3N0YWNrX2RlcHRoX3RvX3ByaW50ID0gMjQ7Ci1zdGF0aWMgdW5zaWduZWQgaW50IGNvZGVfYnl0ZXMgPSA2NDsKLXN0YXRpYyBpbnQgaWdub3JlX25taXM7Ci1zdGF0aWMgaW50IGRpZV9jb3VudGVyOwotCi12b2lkIHByaW50a19hZGRyZXNzKHVuc2lnbmVkIGxvbmcgYWRkcmVzcywgaW50IHJlbGlhYmxlKQotewotI2lmZGVmIENPTkZJR19LQUxMU1lNUwotCXVuc2lnbmVkIGxvbmcgb2Zmc2V0ID0gMDsKLQl1bnNpZ25lZCBsb25nIHN5bXNpemU7Ci0JY29uc3QgY2hhciAqc3ltbmFtZTsKLQljaGFyICptb2RuYW1lOwotCWNoYXIgKmRlbGltID0gIjoiOwotCWNoYXIgbmFtZWJ1ZltLU1lNX05BTUVfTEVOXTsKLQljaGFyIHJlbGlhYls0XSA9ICIiOwotCi0Jc3ltbmFtZSA9IGthbGxzeW1zX2xvb2t1cChhZGRyZXNzLCAmc3ltc2l6ZSwgJm9mZnNldCwKLQkJCQkJJm1vZG5hbWUsIG5hbWVidWYpOwotCWlmICghc3ltbmFtZSkgewotCQlwcmludGsoIiBbPCUwOGx4Pl1cbiIsIGFkZHJlc3MpOwotCQlyZXR1cm47Ci0JfQotCWlmICghcmVsaWFibGUpCi0JCXN0cmNweShyZWxpYWIsICI/ICIpOwotCi0JaWYgKCFtb2RuYW1lKQotCQltb2RuYW1lID0gZGVsaW0gPSAiIjsKLQlwcmludGsoIiBbPCUwOGx4Pl0gJXMlcyVzJXMlcysweCVseC8weCVseFxuIiwKLQkJYWRkcmVzcywgcmVsaWFiLCBkZWxpbSwgbW9kbmFtZSwgZGVsaW0sIHN5bW5hbWUsIG9mZnNldCwgc3ltc2l6ZSk7Ci0jZWxzZQotCXByaW50aygiIFs8JTA4bHg+XVxuIiwgYWRkcmVzcyk7Ci0jZW5kaWYKLX0KLQotc3RhdGljIGlubGluZSBpbnQgdmFsaWRfc3RhY2tfcHRyKHN0cnVjdCB0aHJlYWRfaW5mbyAqdGluZm8sCi0JCQl2b2lkICpwLCB1bnNpZ25lZCBpbnQgc2l6ZSkKLXsKLQl2b2lkICp0ID0gdGluZm87Ci0JcmV0dXJuCXAgPiB0ICYmIHAgPD0gdCArIFRIUkVBRF9TSVpFIC0gc2l6ZTsKLX0KLQotLyogVGhlIGZvcm0gb2YgdGhlIHRvcCBvZiB0aGUgZnJhbWUgb24gdGhlIHN0YWNrICovCi1zdHJ1Y3Qgc3RhY2tfZnJhbWUgewotCXN0cnVjdCBzdGFja19mcmFtZSAqbmV4dF9mcmFtZTsKLQl1bnNpZ25lZCBsb25nIHJldHVybl9hZGRyZXNzOwotfTsKLQotc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nCi1wcmludF9jb250ZXh0X3N0YWNrKHN0cnVjdCB0aHJlYWRfaW5mbyAqdGluZm8sCi0JCXVuc2lnbmVkIGxvbmcgKnN0YWNrLCB1bnNpZ25lZCBsb25nIGJwLAotCQljb25zdCBzdHJ1Y3Qgc3RhY2t0cmFjZV9vcHMgKm9wcywgdm9pZCAqZGF0YSkKLXsKLQlzdHJ1Y3Qgc3RhY2tfZnJhbWUgKmZyYW1lID0gKHN0cnVjdCBzdGFja19mcmFtZSAqKWJwOwotCi0Jd2hpbGUgKHZhbGlkX3N0YWNrX3B0cih0aW5mbywgc3RhY2ssIHNpemVvZigqc3RhY2spKSkgewotCQl1bnNpZ25lZCBsb25nIGFkZHI7Ci0KLQkJYWRkciA9ICpzdGFjazsKLQkJaWYgKF9fa2VybmVsX3RleHRfYWRkcmVzcyhhZGRyKSkgewotCQkJaWYgKCh1bnNpZ25lZCBsb25nKSBzdGFjayA9PSBicCArIDQpIHsKLQkJCQlvcHMtPmFkZHJlc3MoZGF0YSwgYWRkciwgMSk7Ci0JCQkJZnJhbWUgPSBmcmFtZS0+bmV4dF9mcmFtZTsKLQkJCQlicCA9ICh1bnNpZ25lZCBsb25nKSBmcmFtZTsKLQkJCX0gZWxzZSB7Ci0JCQkJb3BzLT5hZGRyZXNzKGRhdGEsIGFkZHIsIGJwID09IDApOwotCQkJfQotCQl9Ci0JCXN0YWNrKys7Ci0JfQotCXJldHVybiBicDsKLX0KLQotdm9pZCBkdW1wX3RyYWNlKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsCi0JCXVuc2lnbmVkIGxvbmcgKnN0YWNrLCB1bnNpZ25lZCBsb25nIGJwLAotCQljb25zdCBzdHJ1Y3Qgc3RhY2t0cmFjZV9vcHMgKm9wcywgdm9pZCAqZGF0YSkKLXsKLQlpZiAoIXRhc2spCi0JCXRhc2sgPSBjdXJyZW50OwotCi0JaWYgKCFzdGFjaykgewotCQl1bnNpZ25lZCBsb25nIGR1bW15OwotCQlzdGFjayA9ICZkdW1teTsKLQkJaWYgKHRhc2sgIT0gY3VycmVudCkKLQkJCXN0YWNrID0gKHVuc2lnbmVkIGxvbmcgKil0YXNrLT50aHJlYWQuc3A7Ci0JfQotCi0jaWZkZWYgQ09ORklHX0ZSQU1FX1BPSU5URVIKLQlpZiAoIWJwKSB7Ci0JCWlmICh0YXNrID09IGN1cnJlbnQpIHsKLQkJCS8qIEdyYWIgYnAgcmlnaHQgZnJvbSBvdXIgcmVncyAqLwotCQkJYXNtKCJtb3ZsICUlZWJwLCAlMCIgOiAiPXIiIChicCkgOik7Ci0JCX0gZWxzZSB7Ci0JCQkvKiBicCBpcyB0aGUgbGFzdCByZWcgcHVzaGVkIGJ5IHN3aXRjaF90byAqLwotCQkJYnAgPSAqKHVuc2lnbmVkIGxvbmcgKikgdGFzay0+dGhyZWFkLnNwOwotCQl9Ci0JfQotI2VuZGlmCi0KLQlmb3IgKDs7KSB7Ci0JCXN0cnVjdCB0aHJlYWRfaW5mbyAqY29udGV4dDsKLQotCQljb250ZXh0ID0gKHN0cnVjdCB0aHJlYWRfaW5mbyAqKQotCQkJKCh1bnNpZ25lZCBsb25nKXN0YWNrICYgKH4oVEhSRUFEX1NJWkUgLSAxKSkpOwotCQlicCA9IHByaW50X2NvbnRleHRfc3RhY2soY29udGV4dCwgc3RhY2ssIGJwLCBvcHMsIGRhdGEpOwotCQkvKgotCQkgKiBTaG91bGQgYmUgYWZ0ZXIgdGhlIGxpbmUgYmVsb3csIGJ1dCBzb21ld2hlcmUKLQkJICogaW4gZWFybHkgYm9vdCBjb250ZXh0IGNvbWVzIG91dCBjb3JydXB0ZWQgYW5kIHdlCi0JCSAqIGNhbid0IHJlZmVyZW5jZSBpdDoKLQkJICovCi0JCWlmIChvcHMtPnN0YWNrKGRhdGEsICJJUlEiKSA8IDApCi0JCQlicmVhazsKLQkJc3RhY2sgPSAodW5zaWduZWQgbG9uZyAqKWNvbnRleHQtPnByZXZpb3VzX2VzcDsKLQkJaWYgKCFzdGFjaykKLQkJCWJyZWFrOwotCQl0b3VjaF9ubWlfd2F0Y2hkb2coKTsKLQl9Ci19Ci1FWFBPUlRfU1lNQk9MKGR1bXBfdHJhY2UpOwotCi1zdGF0aWMgdm9pZAotcHJpbnRfdHJhY2Vfd2FybmluZ19zeW1ib2wodm9pZCAqZGF0YSwgY2hhciAqbXNnLCB1bnNpZ25lZCBsb25nIHN5bWJvbCkKLXsKLQlwcmludGsoZGF0YSk7Ci0JcHJpbnRfc3ltYm9sKG1zZywgc3ltYm9sKTsKLQlwcmludGsoIlxuIik7Ci19Ci0KLXN0YXRpYyB2b2lkIHByaW50X3RyYWNlX3dhcm5pbmcodm9pZCAqZGF0YSwgY2hhciAqbXNnKQotewotCXByaW50aygiJXMlc1xuIiwgKGNoYXIgKilkYXRhLCBtc2cpOwotfQotCi1zdGF0aWMgaW50IHByaW50X3RyYWNlX3N0YWNrKHZvaWQgKmRhdGEsIGNoYXIgKm5hbWUpCi17Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qCi0gKiBQcmludCBvbmUgYWRkcmVzcy9zeW1ib2wgZW50cmllcyBwZXIgbGluZS4KLSAqLwotc3RhdGljIHZvaWQgcHJpbnRfdHJhY2VfYWRkcmVzcyh2b2lkICpkYXRhLCB1bnNpZ25lZCBsb25nIGFkZHIsIGludCByZWxpYWJsZSkKLXsKLQlwcmludGsoIiVzIFs8JTA4bHg+XSAiLCAoY2hhciAqKWRhdGEsIGFkZHIpOwotCWlmICghcmVsaWFibGUpCi0JCXByaW50aygiPyAiKTsKLQlwcmludF9zeW1ib2woIiVzXG4iLCBhZGRyKTsKLQl0b3VjaF9ubWlfd2F0Y2hkb2coKTsKLX0KLQotc3RhdGljIGNvbnN0IHN0cnVjdCBzdGFja3RyYWNlX29wcyBwcmludF90cmFjZV9vcHMgPSB7Ci0JLndhcm5pbmcgPSBwcmludF90cmFjZV93YXJuaW5nLAotCS53YXJuaW5nX3N5bWJvbCA9IHByaW50X3RyYWNlX3dhcm5pbmdfc3ltYm9sLAotCS5zdGFjayA9IHByaW50X3RyYWNlX3N0YWNrLAotCS5hZGRyZXNzID0gcHJpbnRfdHJhY2VfYWRkcmVzcywKLX07Ci0KLXN0YXRpYyB2b2lkCi1zaG93X3RyYWNlX2xvZ19sdmwoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCBzdHJ1Y3QgcHRfcmVncyAqcmVncywKLQkJdW5zaWduZWQgbG9uZyAqc3RhY2ssIHVuc2lnbmVkIGxvbmcgYnAsIGNoYXIgKmxvZ19sdmwpCi17Ci0JZHVtcF90cmFjZSh0YXNrLCByZWdzLCBzdGFjaywgYnAsICZwcmludF90cmFjZV9vcHMsIGxvZ19sdmwpOwotCXByaW50aygiJXMgPT09PT09PT09PT09PT09PT09PT09PT1cbiIsIGxvZ19sdmwpOwotfQotCi12b2lkIHNob3dfdHJhY2Uoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCBzdHJ1Y3QgcHRfcmVncyAqcmVncywKLQkJdW5zaWduZWQgbG9uZyAqc3RhY2ssIHVuc2lnbmVkIGxvbmcgYnApCi17Ci0Jc2hvd190cmFjZV9sb2dfbHZsKHRhc2ssIHJlZ3MsIHN0YWNrLCBicCwgIiIpOwotfQotCi1zdGF0aWMgdm9pZAotc2hvd19zdGFja19sb2dfbHZsKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsCi0JCSAgIHVuc2lnbmVkIGxvbmcgKnNwLCB1bnNpZ25lZCBsb25nIGJwLCBjaGFyICpsb2dfbHZsKQotewotCXVuc2lnbmVkIGxvbmcgKnN0YWNrOwotCWludCBpOwotCi0JaWYgKHNwID09IE5VTEwpIHsKLQkJaWYgKHRhc2spCi0JCQlzcCA9ICh1bnNpZ25lZCBsb25nICopdGFzay0+dGhyZWFkLnNwOwotCQllbHNlCi0JCQlzcCA9ICh1bnNpZ25lZCBsb25nICopJnNwOwotCX0KLQotCXN0YWNrID0gc3A7Ci0JZm9yIChpID0gMDsgaSA8IGtzdGFja19kZXB0aF90b19wcmludDsgaSsrKSB7Ci0JCWlmIChrc3RhY2tfZW5kKHN0YWNrKSkKLQkJCWJyZWFrOwotCQlpZiAoaSAmJiAoKGkgJSA4KSA9PSAwKSkKLQkJCXByaW50aygiXG4lcyAgICAgICAiLCBsb2dfbHZsKTsKLQkJcHJpbnRrKCIlMDhseCAiLCAqc3RhY2srKyk7Ci0JfQotCXByaW50aygiXG4lc0NhbGwgVHJhY2U6XG4iLCBsb2dfbHZsKTsKLQotCXNob3dfdHJhY2VfbG9nX2x2bCh0YXNrLCByZWdzLCBzcCwgYnAsIGxvZ19sdmwpOwotfQotCi12b2lkIHNob3dfc3RhY2soc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCB1bnNpZ25lZCBsb25nICpzcCkKLXsKLQlwcmludGsoIiAgICAgICAiKTsKLQlzaG93X3N0YWNrX2xvZ19sdmwodGFzaywgTlVMTCwgc3AsIDAsICIiKTsKLX0KLQotLyoKLSAqIFRoZSBhcmNoaXRlY3R1cmUtaW5kZXBlbmRlbnQgZHVtcF9zdGFjayBnZW5lcmF0b3IKLSAqLwotdm9pZCBkdW1wX3N0YWNrKHZvaWQpCi17Ci0JdW5zaWduZWQgbG9uZyBicCA9IDA7Ci0JdW5zaWduZWQgbG9uZyBzdGFjazsKLQotI2lmZGVmIENPTkZJR19GUkFNRV9QT0lOVEVSCi0JaWYgKCFicCkKLQkJYXNtKCJtb3ZsICUlZWJwLCAlMCIgOiAiPXIiIChicCk6KTsKLSNlbmRpZgotCi0JcHJpbnRrKCJQaWQ6ICVkLCBjb21tOiAlLjIwcyAlcyAlcyAlLipzXG4iLAotCQljdXJyZW50LT5waWQsIGN1cnJlbnQtPmNvbW0sIHByaW50X3RhaW50ZWQoKSwKLQkJaW5pdF91dHNuYW1lKCktPnJlbGVhc2UsCi0JCShpbnQpc3RyY3Nwbihpbml0X3V0c25hbWUoKS0+dmVyc2lvbiwgIiAiKSwKLQkJaW5pdF91dHNuYW1lKCktPnZlcnNpb24pOwotCi0Jc2hvd190cmFjZShjdXJyZW50LCBOVUxMLCAmc3RhY2ssIGJwKTsKLX0KLQotRVhQT1JUX1NZTUJPTChkdW1wX3N0YWNrKTsKLQotdm9pZCBzaG93X3JlZ2lzdGVycyhzdHJ1Y3QgcHRfcmVncyAqcmVncykKLXsKLQlpbnQgaTsKLQotCXByaW50X21vZHVsZXMoKTsKLQlfX3Nob3dfcmVnaXN0ZXJzKHJlZ3MsIDApOwotCi0JcHJpbnRrKEtFUk5fRU1FUkcgIlByb2Nlc3MgJS4qcyAocGlkOiAlZCwgdGk9JXAgdGFzaz0lcCB0YXNrLnRpPSVwKSIsCi0JCVRBU0tfQ09NTV9MRU4sIGN1cnJlbnQtPmNvbW0sIHRhc2tfcGlkX25yKGN1cnJlbnQpLAotCQljdXJyZW50X3RocmVhZF9pbmZvKCksIGN1cnJlbnQsIHRhc2tfdGhyZWFkX2luZm8oY3VycmVudCkpOwotCS8qCi0JICogV2hlbiBpbi1rZXJuZWwsIHdlIGFsc28gcHJpbnQgb3V0IHRoZSBzdGFjayBhbmQgY29kZSBhdCB0aGUKLQkgKiB0aW1lIG9mIHRoZSBmYXVsdC4uCi0JICovCi0JaWYgKCF1c2VyX21vZGVfdm0ocmVncykpIHsKLQkJdW5zaWduZWQgaW50IGNvZGVfcHJvbG9ndWUgPSBjb2RlX2J5dGVzICogNDMgLyA2NDsKLQkJdW5zaWduZWQgaW50IGNvZGVfbGVuID0gY29kZV9ieXRlczsKLQkJdW5zaWduZWQgY2hhciBjOwotCQl1OCAqaXA7Ci0KLQkJcHJpbnRrKCJcbiIgS0VSTl9FTUVSRyAiU3RhY2s6ICIpOwotCQlzaG93X3N0YWNrX2xvZ19sdmwoTlVMTCwgcmVncywgJnJlZ3MtPnNwLCAwLCBLRVJOX0VNRVJHKTsKLQotCQlwcmludGsoS0VSTl9FTUVSRyAiQ29kZTogIik7Ci0KLQkJaXAgPSAodTggKilyZWdzLT5pcCAtIGNvZGVfcHJvbG9ndWU7Ci0JCWlmIChpcCA8ICh1OCAqKVBBR0VfT0ZGU0VUIHx8IHByb2JlX2tlcm5lbF9hZGRyZXNzKGlwLCBjKSkgewotCQkJLyogdHJ5IHN0YXJ0aW5nIGF0IEVJUCAqLwotCQkJaXAgPSAodTggKilyZWdzLT5pcDsKLQkJCWNvZGVfbGVuID0gY29kZV9sZW4gLSBjb2RlX3Byb2xvZ3VlICsgMTsKLQkJfQotCQlmb3IgKGkgPSAwOyBpIDwgY29kZV9sZW47IGkrKywgaXArKykgewotCQkJaWYgKGlwIDwgKHU4ICopUEFHRV9PRkZTRVQgfHwKLQkJCQkJcHJvYmVfa2VybmVsX2FkZHJlc3MoaXAsIGMpKSB7Ci0JCQkJcHJpbnRrKCIgQmFkIEVJUCB2YWx1ZS4iKTsKLQkJCQlicmVhazsKLQkJCX0KLQkJCWlmIChpcCA9PSAodTggKilyZWdzLT5pcCkKLQkJCQlwcmludGsoIjwlMDJ4PiAiLCBjKTsKLQkJCWVsc2UKLQkJCQlwcmludGsoIiUwMnggIiwgYyk7Ci0JCX0KLQl9Ci0JcHJpbnRrKCJcbiIpOwotfQotCi1pbnQgaXNfdmFsaWRfYnVnYWRkcih1bnNpZ25lZCBsb25nIGlwKQotewotCXVuc2lnbmVkIHNob3J0IHVkMjsKLQotCWlmIChpcCA8IFBBR0VfT0ZGU0VUKQotCQlyZXR1cm4gMDsKLQlpZiAocHJvYmVfa2VybmVsX2FkZHJlc3MoKHVuc2lnbmVkIHNob3J0ICopaXAsIHVkMikpCi0JCXJldHVybiAwOwotCi0JcmV0dXJuIHVkMiA9PSAweDBiMGY7Ci19Ci0KLXN0YXRpYyByYXdfc3BpbmxvY2tfdCBkaWVfbG9jayA9IF9fUkFXX1NQSU5fTE9DS19VTkxPQ0tFRDsKLXN0YXRpYyBpbnQgZGllX293bmVyID0gLTE7Ci1zdGF0aWMgdW5zaWduZWQgaW50IGRpZV9uZXN0X2NvdW50OwotCi11bnNpZ25lZCBfX2twcm9iZXMgbG9uZyBvb3BzX2JlZ2luKHZvaWQpCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCW9vcHNfZW50ZXIoKTsKLQotCWlmIChkaWVfb3duZXIgIT0gcmF3X3NtcF9wcm9jZXNzb3JfaWQoKSkgewotCQljb25zb2xlX3ZlcmJvc2UoKTsKLQkJcmF3X2xvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQkJX19yYXdfc3Bpbl9sb2NrKCZkaWVfbG9jayk7Ci0JCWRpZV9vd25lciA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKLQkJZGllX25lc3RfY291bnQgPSAwOwotCQlidXN0X3NwaW5sb2NrcygxKTsKLQl9IGVsc2UgewotCQlyYXdfbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCX0KLQlkaWVfbmVzdF9jb3VudCsrOwotCXJldHVybiBmbGFnczsKLX0KLQotdm9pZCBfX2twcm9iZXMgb29wc19lbmQodW5zaWduZWQgbG9uZyBmbGFncywgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIGludCBzaWducikKLXsKLQlidXN0X3NwaW5sb2NrcygwKTsKLQlkaWVfb3duZXIgPSAtMTsKLQlhZGRfdGFpbnQoVEFJTlRfRElFKTsKLQlfX3Jhd19zcGluX3VubG9jaygmZGllX2xvY2spOwotCXJhd19sb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Ci0KLQlpZiAoIXJlZ3MpCi0JCXJldHVybjsKLQotCWlmIChrZXhlY19zaG91bGRfY3Jhc2goY3VycmVudCkpCi0JCWNyYXNoX2tleGVjKHJlZ3MpOwotCi0JaWYgKGluX2ludGVycnVwdCgpKQotCQlwYW5pYygiRmF0YWwgZXhjZXB0aW9uIGluIGludGVycnVwdCIpOwotCi0JaWYgKHBhbmljX29uX29vcHMpCi0JCXBhbmljKCJGYXRhbCBleGNlcHRpb24iKTsKLQotCW9vcHNfZXhpdCgpOwotCWRvX2V4aXQoc2lnbnIpOwotfQotCi1pbnQgX19rcHJvYmVzIF9fZGllKGNvbnN0IGNoYXIgKnN0ciwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIGxvbmcgZXJyKQotewotCXVuc2lnbmVkIHNob3J0IHNzOwotCXVuc2lnbmVkIGxvbmcgc3A7Ci0KLQlwcmludGsoS0VSTl9FTUVSRyAiJXM6ICUwNGx4IFsjJWRdICIsIHN0ciwgZXJyICYgMHhmZmZmLCArK2RpZV9jb3VudGVyKTsKLSNpZmRlZiBDT05GSUdfUFJFRU1QVAotCXByaW50aygiUFJFRU1QVCAiKTsKLSNlbmRpZgotI2lmZGVmIENPTkZJR19TTVAKLQlwcmludGsoIlNNUCAiKTsKLSNlbmRpZgotI2lmZGVmIENPTkZJR19ERUJVR19QQUdFQUxMT0MKLQlwcmludGsoIkRFQlVHX1BBR0VBTExPQyIpOwotI2VuZGlmCi0JcHJpbnRrKCJcbiIpOwotCWlmIChub3RpZnlfZGllKERJRV9PT1BTLCBzdHIsIHJlZ3MsIGVyciwKLQkJCWN1cnJlbnQtPnRocmVhZC50cmFwX25vLCBTSUdTRUdWKSA9PSBOT1RJRllfU1RPUCkKLQkJcmV0dXJuIDE7Ci0KLQlzaG93X3JlZ2lzdGVycyhyZWdzKTsKLQkvKiBFeGVjdXRpdmUgc3VtbWFyeSBpbiBjYXNlIHRoZSBvb3BzIHNjcm9sbGVkIGF3YXkgKi8KLQlzcCA9ICh1bnNpZ25lZCBsb25nKSAoJnJlZ3MtPnNwKTsKLQlzYXZlc2VnbWVudChzcywgc3MpOwotCWlmICh1c2VyX21vZGUocmVncykpIHsKLQkJc3AgPSByZWdzLT5zcDsKLQkJc3MgPSByZWdzLT5zcyAmIDB4ZmZmZjsKLQl9Ci0JcHJpbnRrKEtFUk5fRU1FUkcgIkVJUDogWzwlMDhseD5dICIsIHJlZ3MtPmlwKTsKLQlwcmludF9zeW1ib2woIiVzIiwgcmVncy0+aXApOwotCXByaW50aygiIFNTOkVTUCAlMDR4OiUwOGx4XG4iLCBzcywgc3ApOwotCXJldHVybiAwOwotfQotCi0vKgotICogVGhpcyBpcyBnb25lIHRocm91Z2ggd2hlbiBzb21ldGhpbmcgaW4gdGhlIGtlcm5lbCBoYXMgZG9uZSBzb21ldGhpbmcgYmFkCi0gKiBhbmQgaXMgYWJvdXQgdG8gYmUgdGVybWluYXRlZDoKLSAqLwotdm9pZCBkaWUoY29uc3QgY2hhciAqc3RyLCBzdHJ1Y3QgcHRfcmVncyAqcmVncywgbG9uZyBlcnIpCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFncyA9IG9vcHNfYmVnaW4oKTsKLQotCWlmIChkaWVfbmVzdF9jb3VudCA8IDMpIHsKLQkJcmVwb3J0X2J1ZyhyZWdzLT5pcCwgcmVncyk7Ci0KLQkJaWYgKF9fZGllKHN0ciwgcmVncywgZXJyKSkKLQkJCXJlZ3MgPSBOVUxMOwotCX0gZWxzZSB7Ci0JCXByaW50ayhLRVJOX0VNRVJHICJSZWN1cnNpdmUgZGllKCkgZmFpbHVyZSwgb3V0cHV0IHN1cHByZXNzZWRcbiIpOwotCX0KLQotCW9vcHNfZW5kKGZsYWdzLCByZWdzLCBTSUdTRUdWKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkCi1kaWVfaWZfa2VybmVsKGNvbnN0IGNoYXIgKnN0ciwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIGxvbmcgZXJyKQotewotCWlmICghdXNlcl9tb2RlX3ZtKHJlZ3MpKQotCQlkaWUoc3RyLCByZWdzLCBlcnIpOwotfQotCi1zdGF0aWMgdm9pZCBfX2twcm9iZXMKLWRvX3RyYXAoaW50IHRyYXBuciwgaW50IHNpZ25yLCBjaGFyICpzdHIsIGludCB2bTg2LCBzdHJ1Y3QgcHRfcmVncyAqcmVncywKLQlsb25nIGVycm9yX2NvZGUsIHNpZ2luZm9fdCAqaW5mbykKLXsKLQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzayA9IGN1cnJlbnQ7Ci0KLQlpZiAocmVncy0+ZmxhZ3MgJiBYODZfVk1fTUFTSykgewotCQlpZiAodm04NikKLQkJCWdvdG8gdm04Nl90cmFwOwotCQlnb3RvIHRyYXBfc2lnbmFsOwotCX0KLQotCWlmICghdXNlcl9tb2RlKHJlZ3MpKQotCQlnb3RvIGtlcm5lbF90cmFwOwotCi10cmFwX3NpZ25hbDoKLQkvKgotCSAqIFdlIHdhbnQgZXJyb3JfY29kZSBhbmQgdHJhcF9ubyBzZXQgZm9yIHVzZXJzcGFjZSBmYXVsdHMgYW5kCi0JICoga2VybmVsc3BhY2UgZmF1bHRzIHdoaWNoIHJlc3VsdCBpbiBkaWUoKSwgYnV0IG5vdAotCSAqIGtlcm5lbHNwYWNlIGZhdWx0cyB3aGljaCBhcmUgZml4ZWQgdXAuICBkaWUoKSBnaXZlcyB0aGUKLQkgKiBwcm9jZXNzIG5vIGNoYW5jZSB0byBoYW5kbGUgdGhlIHNpZ25hbCBhbmQgbm90aWNlIHRoZQotCSAqIGtlcm5lbCBmYXVsdCBpbmZvcm1hdGlvbiwgc28gdGhhdCB3b24ndCByZXN1bHQgaW4gcG9sbHV0aW5nCi0JICogdGhlIGluZm9ybWF0aW9uIGFib3V0IHByZXZpb3VzbHkgcXVldWVkLCBidXQgbm90IHlldAotCSAqIGRlbGl2ZXJlZCwgZmF1bHRzLiAgU2VlIGFsc28gZG9fZ2VuZXJhbF9wcm90ZWN0aW9uIGJlbG93LgotCSAqLwotCXRzay0+dGhyZWFkLmVycm9yX2NvZGUgPSBlcnJvcl9jb2RlOwotCXRzay0+dGhyZWFkLnRyYXBfbm8gPSB0cmFwbnI7Ci0KLQlpZiAoaW5mbykKLQkJZm9yY2Vfc2lnX2luZm8oc2lnbnIsIGluZm8sIHRzayk7Ci0JZWxzZQotCQlmb3JjZV9zaWcoc2lnbnIsIHRzayk7Ci0JcmV0dXJuOwotCi1rZXJuZWxfdHJhcDoKLQlpZiAoIWZpeHVwX2V4Y2VwdGlvbihyZWdzKSkgewotCQl0c2stPnRocmVhZC5lcnJvcl9jb2RlID0gZXJyb3JfY29kZTsKLQkJdHNrLT50aHJlYWQudHJhcF9ubyA9IHRyYXBucjsKLQkJZGllKHN0ciwgcmVncywgZXJyb3JfY29kZSk7Ci0JfQotCXJldHVybjsKLQotdm04Nl90cmFwOgotCWlmIChoYW5kbGVfdm04Nl90cmFwKChzdHJ1Y3Qga2VybmVsX3ZtODZfcmVncyAqKSByZWdzLAotCQkJCQkJZXJyb3JfY29kZSwgdHJhcG5yKSkKLQkJZ290byB0cmFwX3NpZ25hbDsKLQlyZXR1cm47Ci19Ci0KLSNkZWZpbmUgRE9fRVJST1IodHJhcG5yLCBzaWduciwgc3RyLCBuYW1lKQkJCQlcCi12b2lkIGRvXyMjbmFtZShzdHJ1Y3QgcHRfcmVncyAqcmVncywgbG9uZyBlcnJvcl9jb2RlKQkJCVwKLXsJCQkJCQkJCQlcCi0JdHJhY2VfaGFyZGlycXNfZml4dXAoKTsJCQkJCQlcCi0JaWYgKG5vdGlmeV9kaWUoRElFX1RSQVAsIHN0ciwgcmVncywgZXJyb3JfY29kZSwgdHJhcG5yLCBzaWducikJXAotCQkJCQkJCT09IE5PVElGWV9TVE9QKQlcCi0JCXJldHVybjsJCQkJCQkJXAotCWRvX3RyYXAodHJhcG5yLCBzaWduciwgc3RyLCAwLCByZWdzLCBlcnJvcl9jb2RlLCBOVUxMKTsJCVwKLX0KLQotI2RlZmluZSBET19FUlJPUl9JTkZPKHRyYXBuciwgc2lnbnIsIHN0ciwgbmFtZSwgc2ljb2RlLCBzaWFkZHIsIGlycSkJXAotdm9pZCBkb18jI25hbWUoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIGxvbmcgZXJyb3JfY29kZSkJCQlcCi17CQkJCQkJCQkJXAotCXNpZ2luZm9fdCBpbmZvOwkJCQkJCQlcCi0JaWYgKGlycSkJCQkJCQkJXAotCQlsb2NhbF9pcnFfZW5hYmxlKCk7CQkJCQlcCi0JaW5mby5zaV9zaWdubyA9IHNpZ25yOwkJCQkJCVwKLQlpbmZvLnNpX2Vycm5vID0gMDsJCQkJCQlcCi0JaW5mby5zaV9jb2RlID0gc2ljb2RlOwkJCQkJCVwKLQlpbmZvLnNpX2FkZHIgPSAodm9pZCBfX3VzZXIgKilzaWFkZHI7CQkJCVwKLQlpZiAobm90aWZ5X2RpZShESUVfVFJBUCwgc3RyLCByZWdzLCBlcnJvcl9jb2RlLCB0cmFwbnIsIHNpZ25yKQlcCi0JCQkJCQkJPT0gTk9USUZZX1NUT1ApCVwKLQkJcmV0dXJuOwkJCQkJCQlcCi0JZG9fdHJhcCh0cmFwbnIsIHNpZ25yLCBzdHIsIDAsIHJlZ3MsIGVycm9yX2NvZGUsICZpbmZvKTsJXAotfQotCi0jZGVmaW5lIERPX1ZNODZfRVJST1IodHJhcG5yLCBzaWduciwgc3RyLCBuYW1lKQkJCQlcCi12b2lkIGRvXyMjbmFtZShzdHJ1Y3QgcHRfcmVncyAqcmVncywgbG9uZyBlcnJvcl9jb2RlKQkJCVwKLXsJCQkJCQkJCQlcCi0JaWYgKG5vdGlmeV9kaWUoRElFX1RSQVAsIHN0ciwgcmVncywgZXJyb3JfY29kZSwgdHJhcG5yLCBzaWducikJXAotCQkJCQkJCT09IE5PVElGWV9TVE9QKQlcCi0JCXJldHVybjsJCQkJCQkJXAotCWRvX3RyYXAodHJhcG5yLCBzaWduciwgc3RyLCAxLCByZWdzLCBlcnJvcl9jb2RlLCBOVUxMKTsJCVwKLX0KLQotI2RlZmluZSBET19WTTg2X0VSUk9SX0lORk8odHJhcG5yLCBzaWduciwgc3RyLCBuYW1lLCBzaWNvZGUsIHNpYWRkcikJXAotdm9pZCBkb18jI25hbWUoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIGxvbmcgZXJyb3JfY29kZSkJCQlcCi17CQkJCQkJCQkJXAotCXNpZ2luZm9fdCBpbmZvOwkJCQkJCQlcCi0JaW5mby5zaV9zaWdubyA9IHNpZ25yOwkJCQkJCVwKLQlpbmZvLnNpX2Vycm5vID0gMDsJCQkJCQlcCi0JaW5mby5zaV9jb2RlID0gc2ljb2RlOwkJCQkJCVwKLQlpbmZvLnNpX2FkZHIgPSAodm9pZCBfX3VzZXIgKilzaWFkZHI7CQkJCVwKLQl0cmFjZV9oYXJkaXJxc19maXh1cCgpOwkJCQkJCVwKLQlpZiAobm90aWZ5X2RpZShESUVfVFJBUCwgc3RyLCByZWdzLCBlcnJvcl9jb2RlLCB0cmFwbnIsIHNpZ25yKQlcCi0JCQkJCQkJPT0gTk9USUZZX1NUT1ApCVwKLQkJcmV0dXJuOwkJCQkJCQlcCi0JZG9fdHJhcCh0cmFwbnIsIHNpZ25yLCBzdHIsIDEsIHJlZ3MsIGVycm9yX2NvZGUsICZpbmZvKTsJXAotfQotCi1ET19WTTg2X0VSUk9SX0lORk8oMCwgU0lHRlBFLCAiZGl2aWRlIGVycm9yIiwgZGl2aWRlX2Vycm9yLCBGUEVfSU5URElWLCByZWdzLT5pcCkKLSNpZm5kZWYgQ09ORklHX0tQUk9CRVMKLURPX1ZNODZfRVJST1IoMywgU0lHVFJBUCwgImludDMiLCBpbnQzKQotI2VuZGlmCi1ET19WTTg2X0VSUk9SKDQsIFNJR1NFR1YsICJvdmVyZmxvdyIsIG92ZXJmbG93KQotRE9fVk04Nl9FUlJPUig1LCBTSUdTRUdWLCAiYm91bmRzIiwgYm91bmRzKQotRE9fRVJST1JfSU5GTyg2LCBTSUdJTEwsICJpbnZhbGlkIG9wY29kZSIsIGludmFsaWRfb3AsIElMTF9JTExPUE4sIHJlZ3MtPmlwLCAwKQotRE9fRVJST1IoOSwgU0lHRlBFLCAiY29wcm9jZXNzb3Igc2VnbWVudCBvdmVycnVuIiwgY29wcm9jZXNzb3Jfc2VnbWVudF9vdmVycnVuKQotRE9fRVJST1IoMTAsIFNJR1NFR1YsICJpbnZhbGlkIFRTUyIsIGludmFsaWRfVFNTKQotRE9fRVJST1IoMTEsIFNJR0JVUywgInNlZ21lbnQgbm90IHByZXNlbnQiLCBzZWdtZW50X25vdF9wcmVzZW50KQotRE9fRVJST1IoMTIsIFNJR0JVUywgInN0YWNrIHNlZ21lbnQiLCBzdGFja19zZWdtZW50KQotRE9fRVJST1JfSU5GTygxNywgU0lHQlVTLCAiYWxpZ25tZW50IGNoZWNrIiwgYWxpZ25tZW50X2NoZWNrLCBCVVNfQURSQUxOLCAwLCAwKQotRE9fRVJST1JfSU5GTygzMiwgU0lHSUxMLCAiaXJldCBleGNlcHRpb24iLCBpcmV0X2Vycm9yLCBJTExfQkFEU1RLLCAwLCAxKQotCi12b2lkIF9fa3Byb2JlcwotZG9fZ2VuZXJhbF9wcm90ZWN0aW9uKHN0cnVjdCBwdF9yZWdzICpyZWdzLCBsb25nIGVycm9yX2NvZGUpCi17Ci0Jc3RydWN0IHRhc2tfc3RydWN0ICp0c2s7Ci0Jc3RydWN0IHRocmVhZF9zdHJ1Y3QgKnRocmVhZDsKLQlzdHJ1Y3QgdHNzX3N0cnVjdCAqdHNzOwotCWludCBjcHU7Ci0KLQljcHUgPSBnZXRfY3B1KCk7Ci0JdHNzID0gJnBlcl9jcHUoaW5pdF90c3MsIGNwdSk7Ci0JdGhyZWFkID0gJmN1cnJlbnQtPnRocmVhZDsKLQotCS8qCi0JICogUGVyZm9ybSB0aGUgbGF6eSBUU1MncyBJL08gYml0bWFwIGNvcHkuIElmIHRoZSBUU1MgaGFzIGFuCi0JICogaW52YWxpZCBvZmZzZXQgc2V0ICh0aGUgTEFaWSBvbmUpIGFuZCB0aGUgZmF1bHRpbmcgdGhyZWFkIGhhcwotCSAqIGEgdmFsaWQgSS9PIGJpdG1hcCBwb2ludGVyLCB3ZSBjb3B5IHRoZSBJL08gYml0bWFwIGluIHRoZSBUU1MKLQkgKiBhbmQgd2Ugc2V0IHRoZSBvZmZzZXQgZmllbGQgY29ycmVjdGx5LiBUaGVuIHdlIGxldCB0aGUgQ1BVIHRvCi0JICogcmVzdGFydCB0aGUgZmF1bHRpbmcgaW5zdHJ1Y3Rpb24uCi0JICovCi0JaWYgKHRzcy0+eDg2X3Rzcy5pb19iaXRtYXBfYmFzZSA9PSBJTlZBTElEX0lPX0JJVE1BUF9PRkZTRVRfTEFaWSAmJgotCSAgICB0aHJlYWQtPmlvX2JpdG1hcF9wdHIpIHsKLQkJbWVtY3B5KHRzcy0+aW9fYml0bWFwLCB0aHJlYWQtPmlvX2JpdG1hcF9wdHIsCi0JCSAgICAgICB0aHJlYWQtPmlvX2JpdG1hcF9tYXgpOwotCQkvKgotCQkgKiBJZiB0aGUgcHJldmlvdXNseSBzZXQgbWFwIHdhcyBleHRlbmRpbmcgdG8gaGlnaGVyIHBvcnRzCi0JCSAqIHRoYW4gdGhlIGN1cnJlbnQgb25lLCBwYWQgZXh0cmEgc3BhY2Ugd2l0aCAweGZmIChubyBhY2Nlc3MpLgotCQkgKi8KLQkJaWYgKHRocmVhZC0+aW9fYml0bWFwX21heCA8IHRzcy0+aW9fYml0bWFwX21heCkgewotCQkJbWVtc2V0KChjaGFyICopIHRzcy0+aW9fYml0bWFwICsKLQkJCQl0aHJlYWQtPmlvX2JpdG1hcF9tYXgsIDB4ZmYsCi0JCQkJdHNzLT5pb19iaXRtYXBfbWF4IC0gdGhyZWFkLT5pb19iaXRtYXBfbWF4KTsKLQkJfQotCQl0c3MtPmlvX2JpdG1hcF9tYXggPSB0aHJlYWQtPmlvX2JpdG1hcF9tYXg7Ci0JCXRzcy0+eDg2X3Rzcy5pb19iaXRtYXBfYmFzZSA9IElPX0JJVE1BUF9PRkZTRVQ7Ci0JCXRzcy0+aW9fYml0bWFwX293bmVyID0gdGhyZWFkOwotCQlwdXRfY3B1KCk7Ci0KLQkJcmV0dXJuOwotCX0KLQlwdXRfY3B1KCk7Ci0KLQlpZiAocmVncy0+ZmxhZ3MgJiBYODZfVk1fTUFTSykKLQkJZ290byBncF9pbl92bTg2OwotCi0JdHNrID0gY3VycmVudDsKLQlpZiAoIXVzZXJfbW9kZShyZWdzKSkKLQkJZ290byBncF9pbl9rZXJuZWw7Ci0KLQl0c2stPnRocmVhZC5lcnJvcl9jb2RlID0gZXJyb3JfY29kZTsKLQl0c2stPnRocmVhZC50cmFwX25vID0gMTM7Ci0KLQlpZiAoc2hvd191bmhhbmRsZWRfc2lnbmFscyAmJiB1bmhhbmRsZWRfc2lnbmFsKHRzaywgU0lHU0VHVikgJiYKLQkJCXByaW50a19yYXRlbGltaXQoKSkgewotCQlwcmludGsoS0VSTl9JTkZPCi0JCQkiJXNbJWRdIGdlbmVyYWwgcHJvdGVjdGlvbiBpcDolbHggc3A6JWx4IGVycm9yOiVseCIsCi0JCQl0c2stPmNvbW0sIHRhc2tfcGlkX25yKHRzayksCi0JCQlyZWdzLT5pcCwgcmVncy0+c3AsIGVycm9yX2NvZGUpOwotCQlwcmludF92bWFfYWRkcigiIGluICIsIHJlZ3MtPmlwKTsKLQkJcHJpbnRrKCJcbiIpOwotCX0KLQotCWZvcmNlX3NpZyhTSUdTRUdWLCB0c2spOwotCXJldHVybjsKLQotZ3BfaW5fdm04NjoKLQlsb2NhbF9pcnFfZW5hYmxlKCk7Ci0JaGFuZGxlX3ZtODZfZmF1bHQoKHN0cnVjdCBrZXJuZWxfdm04Nl9yZWdzICopIHJlZ3MsIGVycm9yX2NvZGUpOwotCXJldHVybjsKLQotZ3BfaW5fa2VybmVsOgotCWlmIChmaXh1cF9leGNlcHRpb24ocmVncykpCi0JCXJldHVybjsKLQotCXRzay0+dGhyZWFkLmVycm9yX2NvZGUgPSBlcnJvcl9jb2RlOwotCXRzay0+dGhyZWFkLnRyYXBfbm8gPSAxMzsKLQlpZiAobm90aWZ5X2RpZShESUVfR1BGLCAiZ2VuZXJhbCBwcm90ZWN0aW9uIGZhdWx0IiwgcmVncywKLQkJCQllcnJvcl9jb2RlLCAxMywgU0lHU0VHVikgPT0gTk9USUZZX1NUT1ApCi0JCXJldHVybjsKLQlkaWUoImdlbmVyYWwgcHJvdGVjdGlvbiBmYXVsdCIsIHJlZ3MsIGVycm9yX2NvZGUpOwotfQotCi1zdGF0aWMgbm90cmFjZSBfX2twcm9iZXMgdm9pZAotbWVtX3Bhcml0eV9lcnJvcih1bnNpZ25lZCBjaGFyIHJlYXNvbiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCi17Ci0JcHJpbnRrKEtFUk5fRU1FUkcKLQkJIlVoaHVoLiBOTUkgcmVjZWl2ZWQgZm9yIHVua25vd24gcmVhc29uICUwMnggb24gQ1BVICVkLlxuIiwKLQkJCXJlYXNvbiwgc21wX3Byb2Nlc3Nvcl9pZCgpKTsKLQotCXByaW50ayhLRVJOX0VNRVJHCi0JCSJZb3UgaGF2ZSBzb21lIGhhcmR3YXJlIHByb2JsZW0sIGxpa2VseSBvbiB0aGUgUENJIGJ1cy5cbiIpOwotCi0jaWYgZGVmaW5lZChDT05GSUdfRURBQykKLQlpZiAoZWRhY19oYW5kbGVyX3NldCgpKSB7Ci0JCWVkYWNfYXRvbWljX2Fzc2VydF9lcnJvcigpOwotCQlyZXR1cm47Ci0JfQotI2VuZGlmCi0KLQlpZiAocGFuaWNfb25fdW5yZWNvdmVyZWRfbm1pKQotCQlwYW5pYygiTk1JOiBOb3QgY29udGludWluZyIpOwotCi0JcHJpbnRrKEtFUk5fRU1FUkcgIkRhemVkIGFuZCBjb25mdXNlZCwgYnV0IHRyeWluZyB0byBjb250aW51ZVxuIik7Ci0KLQkvKiBDbGVhciBhbmQgZGlzYWJsZSB0aGUgbWVtb3J5IHBhcml0eSBlcnJvciBsaW5lLiAqLwotCWNsZWFyX21lbV9lcnJvcihyZWFzb24pOwotfQotCi1zdGF0aWMgbm90cmFjZSBfX2twcm9iZXMgdm9pZAotaW9fY2hlY2tfZXJyb3IodW5zaWduZWQgY2hhciByZWFzb24sIHN0cnVjdCBwdF9yZWdzICpyZWdzKQotewotCXVuc2lnbmVkIGxvbmcgaTsKLQotCXByaW50ayhLRVJOX0VNRVJHICJOTUk6IElPQ0sgZXJyb3IgKGRlYnVnIGludGVycnVwdD8pXG4iKTsKLQlzaG93X3JlZ2lzdGVycyhyZWdzKTsKLQotCS8qIFJlLWVuYWJsZSB0aGUgSU9DSyBsaW5lLCB3YWl0IGZvciBhIGZldyBzZWNvbmRzICovCi0JcmVhc29uID0gKHJlYXNvbiAmIDB4ZikgfCA4OwotCW91dGIocmVhc29uLCAweDYxKTsKLQotCWkgPSAyMDAwOwotCXdoaWxlICgtLWkpCi0JCXVkZWxheSgxMDAwKTsKLQotCXJlYXNvbiAmPSB+ODsKLQlvdXRiKHJlYXNvbiwgMHg2MSk7Ci19Ci0KLXN0YXRpYyBub3RyYWNlIF9fa3Byb2JlcyB2b2lkCi11bmtub3duX25taV9lcnJvcih1bnNpZ25lZCBjaGFyIHJlYXNvbiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCi17Ci0JaWYgKG5vdGlmeV9kaWUoRElFX05NSVVOS05PV04sICJubWkiLCByZWdzLCByZWFzb24sIDIsIFNJR0lOVCkgPT0gTk9USUZZX1NUT1ApCi0JCXJldHVybjsKLSNpZmRlZiBDT05GSUdfTUNBCi0JLyoKLQkgKiBNaWdodCBhY3R1YWxseSBiZSBhYmxlIHRvIGZpZ3VyZSBvdXQgd2hhdCB0aGUgZ3VpbHR5IHBhcnR5Ci0JICogaXM6Ci0JICovCi0JaWYgKE1DQV9idXMpIHsKLQkJbWNhX2hhbmRsZV9ubWkoKTsKLQkJcmV0dXJuOwotCX0KLSNlbmRpZgotCXByaW50ayhLRVJOX0VNRVJHCi0JCSJVaGh1aC4gTk1JIHJlY2VpdmVkIGZvciB1bmtub3duIHJlYXNvbiAlMDJ4IG9uIENQVSAlZC5cbiIsCi0JCQlyZWFzb24sIHNtcF9wcm9jZXNzb3JfaWQoKSk7Ci0KLQlwcmludGsoS0VSTl9FTUVSRyAiRG8geW91IGhhdmUgYSBzdHJhbmdlIHBvd2VyIHNhdmluZyBtb2RlIGVuYWJsZWQ/XG4iKTsKLQlpZiAocGFuaWNfb25fdW5yZWNvdmVyZWRfbm1pKQotCQlwYW5pYygiTk1JOiBOb3QgY29udGludWluZyIpOwotCi0JcHJpbnRrKEtFUk5fRU1FUkcgIkRhemVkIGFuZCBjb25mdXNlZCwgYnV0IHRyeWluZyB0byBjb250aW51ZVxuIik7Ci19Ci0KLXN0YXRpYyBERUZJTkVfU1BJTkxPQ0sobm1pX3ByaW50X2xvY2spOwotCi12b2lkIG5vdHJhY2UgX19rcHJvYmVzIGRpZV9ubWkoY2hhciAqc3RyLCBzdHJ1Y3QgcHRfcmVncyAqcmVncywgaW50IGRvX3BhbmljKQotewotCWlmIChub3RpZnlfZGllKERJRV9OTUlXQVRDSERPRywgc3RyLCByZWdzLCAwLCAyLCBTSUdJTlQpID09IE5PVElGWV9TVE9QKQotCQlyZXR1cm47Ci0KLQlzcGluX2xvY2soJm5taV9wcmludF9sb2NrKTsKLQkvKgotCSogV2UgYXJlIGluIHRyb3VibGUgYW55d2F5LCBsZXRzIGF0IGxlYXN0IHRyeQotCSogdG8gZ2V0IGEgbWVzc2FnZSBvdXQ6Ci0JKi8KLQlidXN0X3NwaW5sb2NrcygxKTsKLQlwcmludGsoS0VSTl9FTUVSRyAiJXMiLCBzdHIpOwotCXByaW50aygiIG9uIENQVSVkLCBpcCAlMDhseCwgcmVnaXN0ZXJzOlxuIiwKLQkJc21wX3Byb2Nlc3Nvcl9pZCgpLCByZWdzLT5pcCk7Ci0Jc2hvd19yZWdpc3RlcnMocmVncyk7Ci0JaWYgKGRvX3BhbmljKQotCQlwYW5pYygiTm9uIG1hc2thYmxlIGludGVycnVwdCIpOwotCWNvbnNvbGVfc2lsZW50KCk7Ci0Jc3Bpbl91bmxvY2soJm5taV9wcmludF9sb2NrKTsKLQlidXN0X3NwaW5sb2NrcygwKTsKLQotCS8qCi0JICogSWYgd2UgYXJlIGluIGtlcm5lbCB3ZSBhcmUgcHJvYmFibHkgbmVzdGVkIHVwIHByZXR0eSBiYWQKLQkgKiBhbmQgbWlnaHQgYXN3ZWxsIGdldCBvdXQgbm93IHdoaWxlIHdlIHN0aWxsIGNhbjoKLQkgKi8KLQlpZiAoIXVzZXJfbW9kZV92bShyZWdzKSkgewotCQljdXJyZW50LT50aHJlYWQudHJhcF9ubyA9IDI7Ci0JCWNyYXNoX2tleGVjKHJlZ3MpOwotCX0KLQotCWRvX2V4aXQoU0lHU0VHVik7Ci19Ci0KLXN0YXRpYyBub3RyYWNlIF9fa3Byb2JlcyB2b2lkIGRlZmF1bHRfZG9fbm1pKHN0cnVjdCBwdF9yZWdzICpyZWdzKQotewotCXVuc2lnbmVkIGNoYXIgcmVhc29uID0gMDsKLQlpbnQgY3B1OwotCi0JY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwotCi0JLyogT25seSB0aGUgQlNQIGdldHMgZXh0ZXJuYWwgTk1JcyBmcm9tIHRoZSBzeXN0ZW0uICovCi0JaWYgKCFjcHUpCi0JCXJlYXNvbiA9IGdldF9ubWlfcmVhc29uKCk7Ci0KLQlpZiAoIShyZWFzb24gJiAweGMwKSkgewotCQlpZiAobm90aWZ5X2RpZShESUVfTk1JX0lQSSwgIm5taV9pcGkiLCByZWdzLCByZWFzb24sIDIsIFNJR0lOVCkKLQkJCQkJCQkJPT0gTk9USUZZX1NUT1ApCi0JCQlyZXR1cm47Ci0jaWZkZWYgQ09ORklHX1g4Nl9MT0NBTF9BUElDCi0JCS8qCi0JCSAqIE9rLCBzbyB0aGlzIGlzIG5vbmUgb2YgdGhlIGRvY3VtZW50ZWQgTk1JIHNvdXJjZXMsCi0JCSAqIHNvIGl0IG11c3QgYmUgdGhlIE5NSSB3YXRjaGRvZy4KLQkJICovCi0JCWlmIChubWlfd2F0Y2hkb2dfdGljayhyZWdzLCByZWFzb24pKQotCQkJcmV0dXJuOwotCQlpZiAoIWRvX25taV9jYWxsYmFjayhyZWdzLCBjcHUpKQotCQkJdW5rbm93bl9ubWlfZXJyb3IocmVhc29uLCByZWdzKTsKLSNlbHNlCi0JCXVua25vd25fbm1pX2Vycm9yKHJlYXNvbiwgcmVncyk7Ci0jZW5kaWYKLQotCQlyZXR1cm47Ci0JfQotCWlmIChub3RpZnlfZGllKERJRV9OTUksICJubWkiLCByZWdzLCByZWFzb24sIDIsIFNJR0lOVCkgPT0gTk9USUZZX1NUT1ApCi0JCXJldHVybjsKLQotCS8qIEFLOiBmb2xsb3dpbmcgY2hlY2tzIHNlZW0gdG8gYmUgYnJva2VuIG9uIG1vZGVybiBjaGlwc2V0cy4gRklYTUUgKi8KLQlpZiAocmVhc29uICYgMHg4MCkKLQkJbWVtX3Bhcml0eV9lcnJvcihyZWFzb24sIHJlZ3MpOwotCWlmIChyZWFzb24gJiAweDQwKQotCQlpb19jaGVja19lcnJvcihyZWFzb24sIHJlZ3MpOwotCS8qCi0JICogUmVhc3NlcnQgTk1JIGluIGNhc2UgaXQgYmVjYW1lIGFjdGl2ZSBtZWFud2hpbGUKLQkgKiBhcyBpdCdzIGVkZ2UtdHJpZ2dlcmVkOgotCSAqLwotCXJlYXNzZXJ0X25taSgpOwotfQotCi1ub3RyYWNlIF9fa3Byb2JlcyB2b2lkIGRvX25taShzdHJ1Y3QgcHRfcmVncyAqcmVncywgbG9uZyBlcnJvcl9jb2RlKQotewotCWludCBjcHU7Ci0KLQlubWlfZW50ZXIoKTsKLQotCWNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKLQotCSsrbm1pX2NvdW50KGNwdSk7Ci0KLQlpZiAoIWlnbm9yZV9ubWlzKQotCQlkZWZhdWx0X2RvX25taShyZWdzKTsKLQotCW5taV9leGl0KCk7Ci19Ci0KLXZvaWQgc3RvcF9ubWkodm9pZCkKLXsKLQlhY3BpX25taV9kaXNhYmxlKCk7Ci0JaWdub3JlX25taXMrKzsKLX0KLQotdm9pZCByZXN0YXJ0X25taSh2b2lkKQotewotCWlnbm9yZV9ubWlzLS07Ci0JYWNwaV9ubWlfZW5hYmxlKCk7Ci19Ci0KLSNpZmRlZiBDT05GSUdfS1BST0JFUwotdm9pZCBfX2twcm9iZXMgZG9faW50MyhzdHJ1Y3QgcHRfcmVncyAqcmVncywgbG9uZyBlcnJvcl9jb2RlKQotewotCXRyYWNlX2hhcmRpcnFzX2ZpeHVwKCk7Ci0KLQlpZiAobm90aWZ5X2RpZShESUVfSU5UMywgImludDMiLCByZWdzLCBlcnJvcl9jb2RlLCAzLCBTSUdUUkFQKQotCQkJPT0gTk9USUZZX1NUT1ApCi0JCXJldHVybjsKLQkvKgotCSAqIFRoaXMgaXMgYW4gaW50ZXJydXB0IGdhdGUsIGJlY2F1c2Uga3Byb2JlcyB3YW50cyBpbnRlcnJ1cHRzCi0JICogZGlzYWJsZWQuIE5vcm1hbCB0cmFwIGhhbmRsZXJzIGRvbid0LgotCSAqLwotCXJlc3RvcmVfaW50ZXJydXB0cyhyZWdzKTsKLQotCWRvX3RyYXAoMywgU0lHVFJBUCwgImludDMiLCAxLCByZWdzLCBlcnJvcl9jb2RlLCBOVUxMKTsKLX0KLSNlbmRpZgotCi0vKgotICogT3VyIGhhbmRsaW5nIG9mIHRoZSBwcm9jZXNzb3IgZGVidWcgcmVnaXN0ZXJzIGlzIG5vbi10cml2aWFsLgotICogV2UgZG8gbm90IGNsZWFyIHRoZW0gb24gZW50cnkgYW5kIGV4aXQgZnJvbSB0aGUga2VybmVsLiBUaGVyZWZvcmUKLSAqIGl0IGlzIHBvc3NpYmxlIHRvIGdldCBhIHdhdGNocG9pbnQgdHJhcCBoZXJlIGZyb20gaW5zaWRlIHRoZSBrZXJuZWwuCi0gKiBIb3dldmVyLCB0aGUgY29kZSBpbiAuL3B0cmFjZS5jIGhhcyBlbnN1cmVkIHRoYXQgdGhlIHVzZXIgY2FuCi0gKiBvbmx5IHNldCB3YXRjaHBvaW50cyBvbiB1c2Vyc3BhY2UgYWRkcmVzc2VzLiBUaGVyZWZvcmUgdGhlIGluLWtlcm5lbAotICogd2F0Y2hwb2ludCB0cmFwIGNhbiBvbmx5IG9jY3VyIGluIGNvZGUgd2hpY2ggaXMgcmVhZGluZy93cml0aW5nCi0gKiBmcm9tIHVzZXIgc3BhY2UuIFN1Y2ggY29kZSBtdXN0IG5vdCBob2xkIGtlcm5lbCBsb2NrcyAoc2luY2UgaXQKLSAqIGNhbiBlcXVhbGx5IHRha2UgYSBwYWdlIGZhdWx0KSwgdGhlcmVmb3JlIGl0IGlzIHNhZmUgdG8gY2FsbAotICogZm9yY2Vfc2lnX2luZm8gZXZlbiB0aG91Z2ggdGhhdCBjbGFpbXMgYW5kIHJlbGVhc2VzIGxvY2tzLgotICoKLSAqIENvZGUgaW4gLi9zaWduYWwuYyBlbnN1cmVzIHRoYXQgdGhlIGRlYnVnIGNvbnRyb2wgcmVnaXN0ZXIKLSAqIGlzIHJlc3RvcmVkIGJlZm9yZSB3ZSBkZWxpdmVyIGFueSBzaWduYWwsIGFuZCB0aGVyZWZvcmUgdGhhdAotICogdXNlciBjb2RlIHJ1bnMgd2l0aCB0aGUgY29ycmVjdCBkZWJ1ZyBjb250cm9sIHJlZ2lzdGVyIGV2ZW4gdGhvdWdoCi0gKiB3ZSBjbGVhciBpdCBoZXJlLgotICoKLSAqIEJlaW5nIGNhcmVmdWwgaGVyZSBtZWFucyB0aGF0IHdlIGRvbid0IGhhdmUgdG8gYmUgYXMgY2FyZWZ1bCBpbiBhCi0gKiBsb3Qgb2YgbW9yZSBjb21wbGljYXRlZCBwbGFjZXMgKHRhc2sgc3dpdGNoaW5nIGNhbiBiZSBhIGJpdCBsYXp5Ci0gKiBhYm91dCByZXN0b3JpbmcgYWxsIHRoZSBkZWJ1ZyBzdGF0ZSwgYW5kIHB0cmFjZSBkb2Vzbid0IGhhdmUgdG8KLSAqIGZpbmQgZXZlcnkgb2NjdXJyZW5jZSBvZiB0aGUgVEYgYml0IHRoYXQgY291bGQgYmUgc2F2ZWQgYXdheSBldmVuCi0gKiBieSB1c2VyIGNvZGUpCi0gKi8KLXZvaWQgX19rcHJvYmVzIGRvX2RlYnVnKHN0cnVjdCBwdF9yZWdzICpyZWdzLCBsb25nIGVycm9yX2NvZGUpCi17Ci0Jc3RydWN0IHRhc2tfc3RydWN0ICp0c2sgPSBjdXJyZW50OwotCXVuc2lnbmVkIGludCBjb25kaXRpb247Ci0JaW50IHNpX2NvZGU7Ci0KLQl0cmFjZV9oYXJkaXJxc19maXh1cCgpOwotCi0JZ2V0X2RlYnVncmVnKGNvbmRpdGlvbiwgNik7Ci0KLQkvKgotCSAqIFRoZSBwcm9jZXNzb3IgY2xlYXJlZCBCVEYsIHNvIGRvbid0IG1hcmsgdGhhdCB3ZSBuZWVkIGl0IHNldC4KLQkgKi8KLQljbGVhcl90c2tfdGhyZWFkX2ZsYWcodHNrLCBUSUZfREVCVUdDVExNU1IpOwotCXRzay0+dGhyZWFkLmRlYnVnY3RsbXNyID0gMDsKLQotCWlmIChub3RpZnlfZGllKERJRV9ERUJVRywgImRlYnVnIiwgcmVncywgY29uZGl0aW9uLCBlcnJvcl9jb2RlLAotCQkJCQkJU0lHVFJBUCkgPT0gTk9USUZZX1NUT1ApCi0JCXJldHVybjsKLQkvKiBJdCdzIHNhZmUgdG8gYWxsb3cgaXJxJ3MgYWZ0ZXIgRFI2IGhhcyBiZWVuIHNhdmVkICovCi0JaWYgKHJlZ3MtPmZsYWdzICYgWDg2X0VGTEFHU19JRikKLQkJbG9jYWxfaXJxX2VuYWJsZSgpOwotCi0JLyogTWFzayBvdXQgc3B1cmlvdXMgZGVidWcgdHJhcHMgZHVlIHRvIGxhenkgRFI3IHNldHRpbmcgKi8KLQlpZiAoY29uZGl0aW9uICYgKERSX1RSQVAwfERSX1RSQVAxfERSX1RSQVAyfERSX1RSQVAzKSkgewotCQlpZiAoIXRzay0+dGhyZWFkLmRlYnVncmVnNykKLQkJCWdvdG8gY2xlYXJfZHI3OwotCX0KLQotCWlmIChyZWdzLT5mbGFncyAmIFg4Nl9WTV9NQVNLKQotCQlnb3RvIGRlYnVnX3ZtODY7Ci0KLQkvKiBTYXZlIGRlYnVnIHN0YXR1cyByZWdpc3RlciB3aGVyZSBwdHJhY2UgY2FuIHNlZSBpdCAqLwotCXRzay0+dGhyZWFkLmRlYnVncmVnNiA9IGNvbmRpdGlvbjsKLQotCS8qCi0JICogU2luZ2xlLXN0ZXBwaW5nIHRocm91Z2ggVEY6IG1ha2Ugc3VyZSB3ZSBpZ25vcmUgYW55IGV2ZW50cyBpbgotCSAqIGtlcm5lbCBzcGFjZSAoYnV0IHJlLWVuYWJsZSBURiB3aGVuIHJldHVybmluZyB0byB1c2VyIG1vZGUpLgotCSAqLwotCWlmIChjb25kaXRpb24gJiBEUl9TVEVQKSB7Ci0JCS8qCi0JCSAqIFdlIGFscmVhZHkgY2hlY2tlZCB2ODYgbW9kZSBhYm92ZSwgc28gd2UgY2FuCi0JCSAqIGNoZWNrIGZvciBrZXJuZWwgbW9kZSBieSBqdXN0IGNoZWNraW5nIHRoZSBDUEwKLQkJICogb2YgQ1MuCi0JCSAqLwotCQlpZiAoIXVzZXJfbW9kZShyZWdzKSkKLQkJCWdvdG8gY2xlYXJfVEZfcmVlbmFibGU7Ci0JfQotCi0Jc2lfY29kZSA9IGdldF9zaV9jb2RlKCh1bnNpZ25lZCBsb25nKWNvbmRpdGlvbik7Ci0JLyogT2ssIGZpbmFsbHkgc29tZXRoaW5nIHdlIGNhbiBoYW5kbGUgKi8KLQlzZW5kX3NpZ3RyYXAodHNrLCByZWdzLCBlcnJvcl9jb2RlLCBzaV9jb2RlKTsKLQotCS8qCi0JICogRGlzYWJsZSBhZGRpdGlvbmFsIHRyYXBzLiBUaGV5J2xsIGJlIHJlLWVuYWJsZWQgd2hlbgotCSAqIHRoZSBzaWduYWwgaXMgZGVsaXZlcmVkLgotCSAqLwotY2xlYXJfZHI3OgotCXNldF9kZWJ1Z3JlZygwLCA3KTsKLQlyZXR1cm47Ci0KLWRlYnVnX3ZtODY6Ci0JaGFuZGxlX3ZtODZfdHJhcCgoc3RydWN0IGtlcm5lbF92bTg2X3JlZ3MgKikgcmVncywgZXJyb3JfY29kZSwgMSk7Ci0JcmV0dXJuOwotCi1jbGVhcl9URl9yZWVuYWJsZToKLQlzZXRfdHNrX3RocmVhZF9mbGFnKHRzaywgVElGX1NJTkdMRVNURVApOwotCXJlZ3MtPmZsYWdzICY9IH5YODZfRUZMQUdTX1RGOwotCXJldHVybjsKLX0KLQotLyoKLSAqIE5vdGUgdGhhdCB3ZSBwbGF5IGFyb3VuZCB3aXRoIHRoZSAnVFMnIGJpdCBpbiBhbiBhdHRlbXB0IHRvIGdldAotICogdGhlIGNvcnJlY3QgYmVoYXZpb3VyIGV2ZW4gaW4gdGhlIHByZXNlbmNlIG9mIHRoZSBhc3luY2hyb25vdXMKLSAqIElSUTEzIGJlaGF2aW91cgotICovCi12b2lkIG1hdGhfZXJyb3Iodm9pZCBfX3VzZXIgKmlwKQotewotCXN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzazsKLQlzaWdpbmZvX3QgaW5mbzsKLQl1bnNpZ25lZCBzaG9ydCBjd2QsIHN3ZDsKLQotCS8qCi0JICogU2F2ZSB0aGUgaW5mbyBmb3IgdGhlIGV4Y2VwdGlvbiBoYW5kbGVyIGFuZCBjbGVhciB0aGUgZXJyb3IuCi0JICovCi0JdGFzayA9IGN1cnJlbnQ7Ci0Jc2F2ZV9pbml0X2ZwdSh0YXNrKTsKLQl0YXNrLT50aHJlYWQudHJhcF9ubyA9IDE2OwotCXRhc2stPnRocmVhZC5lcnJvcl9jb2RlID0gMDsKLQlpbmZvLnNpX3NpZ25vID0gU0lHRlBFOwotCWluZm8uc2lfZXJybm8gPSAwOwotCWluZm8uc2lfY29kZSA9IF9fU0lfRkFVTFQ7Ci0JaW5mby5zaV9hZGRyID0gaXA7Ci0JLyoKLQkgKiAofmN3ZCAmIHN3ZCkgd2lsbCBtYXNrIG91dCBleGNlcHRpb25zIHRoYXQgYXJlIG5vdCBzZXQgdG8gdW5tYXNrZWQKLQkgKiBzdGF0dXMuICAweDNmIGlzIHRoZSBleGNlcHRpb24gYml0cyBpbiB0aGVzZSByZWdzLCAweDIwMCBpcyB0aGUKLQkgKiBDMSByZWcgeW91IG5lZWQgaW4gY2FzZSBvZiBhIHN0YWNrIGZhdWx0LCAweDA0MCBpcyB0aGUgc3RhY2sKLQkgKiBmYXVsdCBiaXQuICBXZSBzaG91bGQgb25seSBiZSB0YWtpbmcgb25lIGV4Y2VwdGlvbiBhdCBhIHRpbWUsCi0JICogc28gaWYgdGhpcyBjb21iaW5hdGlvbiBkb2Vzbid0IHByb2R1Y2UgYW55IHNpbmdsZSBleGNlcHRpb24sCi0JICogdGhlbiB3ZSBoYXZlIGEgYmFkIHByb2dyYW0gdGhhdCBpc24ndCBzeW5jaHJvbml6aW5nIGl0cyBGUFUgdXNhZ2UKLQkgKiBhbmQgaXQgd2lsbCBzdWZmZXIgdGhlIGNvbnNlcXVlbmNlcyBzaW5jZSB3ZSB3b24ndCBiZSBhYmxlIHRvCi0JICogZnVsbHkgcmVwcm9kdWNlIHRoZSBjb250ZXh0IG9mIHRoZSBleGNlcHRpb24KLQkgKi8KLQljd2QgPSBnZXRfZnB1X2N3ZCh0YXNrKTsKLQlzd2QgPSBnZXRfZnB1X3N3ZCh0YXNrKTsKLQlzd2l0Y2ggKHN3ZCAmIH5jd2QgJiAweDNmKSB7Ci0JY2FzZSAweDAwMDogLyogTm8gdW5tYXNrZWQgZXhjZXB0aW9uICovCi0JCXJldHVybjsKLQlkZWZhdWx0OiAvKiBNdWx0aXBsZSBleGNlcHRpb25zICovCi0JCWJyZWFrOwotCWNhc2UgMHgwMDE6IC8qIEludmFsaWQgT3AgKi8KLQkJLyoKLQkJICogc3dkICYgMHgyNDAgPT0gMHgwNDA6IFN0YWNrIFVuZGVyZmxvdwotCQkgKiBzd2QgJiAweDI0MCA9PSAweDI0MDogU3RhY2sgT3ZlcmZsb3cKLQkJICogVXNlciBtdXN0IGNsZWFyIHRoZSBTRiBiaXQgKDB4NDApIGlmIHNldAotCQkgKi8KLQkJaW5mby5zaV9jb2RlID0gRlBFX0ZMVElOVjsKLQkJYnJlYWs7Ci0JY2FzZSAweDAwMjogLyogRGVub3JtYWxpemUgKi8KLQljYXNlIDB4MDEwOiAvKiBVbmRlcmZsb3cgKi8KLQkJaW5mby5zaV9jb2RlID0gRlBFX0ZMVFVORDsKLQkJYnJlYWs7Ci0JY2FzZSAweDAwNDogLyogWmVybyBEaXZpZGUgKi8KLQkJaW5mby5zaV9jb2RlID0gRlBFX0ZMVERJVjsKLQkJYnJlYWs7Ci0JY2FzZSAweDAwODogLyogT3ZlcmZsb3cgKi8KLQkJaW5mby5zaV9jb2RlID0gRlBFX0ZMVE9WRjsKLQkJYnJlYWs7Ci0JY2FzZSAweDAyMDogLyogUHJlY2lzaW9uICovCi0JCWluZm8uc2lfY29kZSA9IEZQRV9GTFRSRVM7Ci0JCWJyZWFrOwotCX0KLQlmb3JjZV9zaWdfaW5mbyhTSUdGUEUsICZpbmZvLCB0YXNrKTsKLX0KLQotdm9pZCBkb19jb3Byb2Nlc3Nvcl9lcnJvcihzdHJ1Y3QgcHRfcmVncyAqcmVncywgbG9uZyBlcnJvcl9jb2RlKQotewotCWlnbm9yZV9mcHVfaXJxID0gMTsKLQltYXRoX2Vycm9yKCh2b2lkIF9fdXNlciAqKXJlZ3MtPmlwKTsKLX0KLQotc3RhdGljIHZvaWQgc2ltZF9tYXRoX2Vycm9yKHZvaWQgX191c2VyICppcCkKLXsKLQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2s7Ci0Jc2lnaW5mb190IGluZm87Ci0JdW5zaWduZWQgc2hvcnQgbXhjc3I7Ci0KLQkvKgotCSAqIFNhdmUgdGhlIGluZm8gZm9yIHRoZSBleGNlcHRpb24gaGFuZGxlciBhbmQgY2xlYXIgdGhlIGVycm9yLgotCSAqLwotCXRhc2sgPSBjdXJyZW50OwotCXNhdmVfaW5pdF9mcHUodGFzayk7Ci0JdGFzay0+dGhyZWFkLnRyYXBfbm8gPSAxOTsKLQl0YXNrLT50aHJlYWQuZXJyb3JfY29kZSA9IDA7Ci0JaW5mby5zaV9zaWdubyA9IFNJR0ZQRTsKLQlpbmZvLnNpX2Vycm5vID0gMDsKLQlpbmZvLnNpX2NvZGUgPSBfX1NJX0ZBVUxUOwotCWluZm8uc2lfYWRkciA9IGlwOwotCS8qCi0JICogVGhlIFNJTUQgRlBVIGV4Y2VwdGlvbnMgYXJlIGhhbmRsZWQgYSBsaXR0bGUgZGlmZmVyZW50bHksIGFzIHRoZXJlCi0JICogaXMgb25seSBhIHNpbmdsZSBzdGF0dXMvY29udHJvbCByZWdpc3Rlci4gIFRodXMsIHRvIGRldGVybWluZSB3aGljaAotCSAqIHVubWFza2VkIGV4Y2VwdGlvbiB3YXMgY2F1Z2h0IHdlIG11c3QgbWFzayB0aGUgZXhjZXB0aW9uIG1hc2sgYml0cwotCSAqIGF0IDB4MWY4MCwgYW5kIHRoZW4gdXNlIHRoZXNlIHRvIG1hc2sgdGhlIGV4Y2VwdGlvbiBiaXRzIGF0IDB4M2YuCi0JICovCi0JbXhjc3IgPSBnZXRfZnB1X214Y3NyKHRhc2spOwotCXN3aXRjaCAofigobXhjc3IgJiAweDFmODApID4+IDcpICYgKG14Y3NyICYgMHgzZikpIHsKLQljYXNlIDB4MDAwOgotCWRlZmF1bHQ6Ci0JCWJyZWFrOwotCWNhc2UgMHgwMDE6IC8qIEludmFsaWQgT3AgKi8KLQkJaW5mby5zaV9jb2RlID0gRlBFX0ZMVElOVjsKLQkJYnJlYWs7Ci0JY2FzZSAweDAwMjogLyogRGVub3JtYWxpemUgKi8KLQljYXNlIDB4MDEwOiAvKiBVbmRlcmZsb3cgKi8KLQkJaW5mby5zaV9jb2RlID0gRlBFX0ZMVFVORDsKLQkJYnJlYWs7Ci0JY2FzZSAweDAwNDogLyogWmVybyBEaXZpZGUgKi8KLQkJaW5mby5zaV9jb2RlID0gRlBFX0ZMVERJVjsKLQkJYnJlYWs7Ci0JY2FzZSAweDAwODogLyogT3ZlcmZsb3cgKi8KLQkJaW5mby5zaV9jb2RlID0gRlBFX0ZMVE9WRjsKLQkJYnJlYWs7Ci0JY2FzZSAweDAyMDogLyogUHJlY2lzaW9uICovCi0JCWluZm8uc2lfY29kZSA9IEZQRV9GTFRSRVM7Ci0JCWJyZWFrOwotCX0KLQlmb3JjZV9zaWdfaW5mbyhTSUdGUEUsICZpbmZvLCB0YXNrKTsKLX0KLQotdm9pZCBkb19zaW1kX2NvcHJvY2Vzc29yX2Vycm9yKHN0cnVjdCBwdF9yZWdzICpyZWdzLCBsb25nIGVycm9yX2NvZGUpCi17Ci0JaWYgKGNwdV9oYXNfeG1tKSB7Ci0JCS8qIEhhbmRsZSBTSU1EIEZQVSBleGNlcHRpb25zIG9uIFBJSUkrIHByb2Nlc3NvcnMuICovCi0JCWlnbm9yZV9mcHVfaXJxID0gMTsKLQkJc2ltZF9tYXRoX2Vycm9yKCh2b2lkIF9fdXNlciAqKXJlZ3MtPmlwKTsKLQkJcmV0dXJuOwotCX0KLQkvKgotCSAqIEhhbmRsZSBzdHJhbmdlIGNhY2hlIGZsdXNoIGZyb20gdXNlciBzcGFjZSBleGNlcHRpb24KLQkgKiBpbiBhbGwgb3RoZXIgY2FzZXMuICBUaGlzIGlzIHVuZG9jdW1lbnRlZCBiZWhhdmlvdXIuCi0JICovCi0JaWYgKHJlZ3MtPmZsYWdzICYgWDg2X1ZNX01BU0spIHsKLQkJaGFuZGxlX3ZtODZfZmF1bHQoKHN0cnVjdCBrZXJuZWxfdm04Nl9yZWdzICopcmVncywgZXJyb3JfY29kZSk7Ci0JCXJldHVybjsKLQl9Ci0JY3VycmVudC0+dGhyZWFkLnRyYXBfbm8gPSAxOTsKLQljdXJyZW50LT50aHJlYWQuZXJyb3JfY29kZSA9IGVycm9yX2NvZGU7Ci0JZGllX2lmX2tlcm5lbCgiY2FjaGUgZmx1c2ggZGVuaWVkIiwgcmVncywgZXJyb3JfY29kZSk7Ci0JZm9yY2Vfc2lnKFNJR1NFR1YsIGN1cnJlbnQpOwotfQotCi12b2lkIGRvX3NwdXJpb3VzX2ludGVycnVwdF9idWcoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIGxvbmcgZXJyb3JfY29kZSkKLXsKLSNpZiAwCi0JLyogTm8gbmVlZCB0byB3YXJuIGFib3V0IHRoaXMgYW55IGxvbmdlci4gKi8KLQlwcmludGsoS0VSTl9JTkZPICJJZ25vcmluZyBQNiBMb2NhbCBBUElDIFNwdXJpb3VzIEludGVycnVwdCBCdWcuLi5cbiIpOwotI2VuZGlmCi19Ci0KLXVuc2lnbmVkIGxvbmcgcGF0Y2hfZXNwZml4X2Rlc2ModW5zaWduZWQgbG9uZyB1ZXNwLCB1bnNpZ25lZCBsb25nIGtlc3ApCi17Ci0Jc3RydWN0IGRlc2Nfc3RydWN0ICpnZHQgPSBnZXRfY3B1X2dkdF90YWJsZShzbXBfcHJvY2Vzc29yX2lkKCkpOwotCXVuc2lnbmVkIGxvbmcgYmFzZSA9IChrZXNwIC0gdWVzcCkgJiAtVEhSRUFEX1NJWkU7Ci0JdW5zaWduZWQgbG9uZyBuZXdfa2VzcCA9IGtlc3AgLSBiYXNlOwotCXVuc2lnbmVkIGxvbmcgbGltX3BhZ2VzID0gKG5ld19rZXNwIHwgKFRIUkVBRF9TSVpFIC0gMSkpID4+IFBBR0VfU0hJRlQ7Ci0JX191NjQgZGVzYyA9ICooX191NjQgKikmZ2R0W0dEVF9FTlRSWV9FU1BGSVhfU1NdOwotCi0JLyogU2V0IHVwIGJhc2UgZm9yIGVzcGZpeCBzZWdtZW50ICovCi0JZGVzYyAmPSAweDAwZjBmZjAwMDAwMDAwMDBVTEw7Ci0JZGVzYyB8PQkoKCgoX191NjQpYmFzZSkgPDwgMTYpICYgMHgwMDAwMDBmZmZmZmYwMDAwVUxMKSB8Ci0JCSgoKChfX3U2NCliYXNlKSA8PCAzMikgJiAweGZmMDAwMDAwMDAwMDAwMDBVTEwpIHwKLQkJKCgoKF9fdTY0KWxpbV9wYWdlcykgPDwgMzIpICYgMHgwMDBmMDAwMDAwMDAwMDAwVUxMKSB8Ci0JCShsaW1fcGFnZXMgJiAweGZmZmYpOwotCSooX191NjQgKikmZ2R0W0dEVF9FTlRSWV9FU1BGSVhfU1NdID0gZGVzYzsKLQotCXJldHVybiBuZXdfa2VzcDsKLX0KLQotLyoKLSAqICdtYXRoX3N0YXRlX3Jlc3RvcmUoKScgc2F2ZXMgdGhlIGN1cnJlbnQgbWF0aCBpbmZvcm1hdGlvbiBpbiB0aGUKLSAqIG9sZCBtYXRoIHN0YXRlIGFycmF5LCBhbmQgZ2V0cyB0aGUgbmV3IG9uZXMgZnJvbSB0aGUgY3VycmVudCB0YXNrCi0gKgotICogQ2FyZWZ1bC4uIFRoZXJlIGFyZSBwcm9ibGVtcyB3aXRoIElCTS1kZXNpZ25lZCBJUlExMyBiZWhhdmlvdXIuCi0gKiBEb24ndCB0b3VjaCB1bmxlc3MgeW91ICpyZWFsbHkqIGtub3cgaG93IGl0IHdvcmtzLgotICoKLSAqIE11c3QgYmUgY2FsbGVkIHdpdGgga2VybmVsIHByZWVtcHRpb24gZGlzYWJsZWQgKGluIHRoaXMgY2FzZSwKLSAqIGxvY2FsIGludGVycnVwdHMgYXJlIGRpc2FibGVkIGF0IHRoZSBjYWxsLXNpdGUgaW4gZW50cnkuUykuCi0gKi8KLWFzbWxpbmthZ2Ugdm9pZCBtYXRoX3N0YXRlX3Jlc3RvcmUodm9pZCkKLXsKLQlzdHJ1Y3QgdGhyZWFkX2luZm8gKnRocmVhZCA9IGN1cnJlbnRfdGhyZWFkX2luZm8oKTsKLQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzayA9IHRocmVhZC0+dGFzazsKLQotCWlmICghdHNrX3VzZWRfbWF0aCh0c2spKSB7Ci0JCWxvY2FsX2lycV9lbmFibGUoKTsKLQkJLyoKLQkJICogZG9lcyBhIHNsYWIgYWxsb2Mgd2hpY2ggY2FuIHNsZWVwCi0JCSAqLwotCQlpZiAoaW5pdF9mcHUodHNrKSkgewotCQkJLyoKLQkJCSAqIHJhbiBvdXQgb2YgbWVtb3J5IQotCQkJICovCi0JCQlkb19ncm91cF9leGl0KFNJR0tJTEwpOwotCQkJcmV0dXJuOwotCQl9Ci0JCWxvY2FsX2lycV9kaXNhYmxlKCk7Ci0JfQotCi0JY2x0cygpOwkJCQkvKiBBbGxvdyBtYXRocyBvcHMgKG9yIHdlIHJlY3Vyc2UpICovCi0JcmVzdG9yZV9mcHUodHNrKTsKLQl0aHJlYWQtPnN0YXR1cyB8PSBUU19VU0VERlBVOwkvKiBTbyB3ZSBmbnNhdmUgb24gc3dpdGNoX3RvKCkgKi8KLQl0c2stPmZwdV9jb3VudGVyKys7Ci19Ci1FWFBPUlRfU1lNQk9MX0dQTChtYXRoX3N0YXRlX3Jlc3RvcmUpOwotCi0jaWZuZGVmIENPTkZJR19NQVRIX0VNVUxBVElPTgotCi1hc21saW5rYWdlIHZvaWQgbWF0aF9lbXVsYXRlKGxvbmcgYXJnKQotewotCXByaW50ayhLRVJOX0VNRVJHCi0JCSJtYXRoLWVtdWxhdGlvbiBub3QgZW5hYmxlZCBhbmQgbm8gY29wcm9jZXNzb3IgZm91bmQuXG4iKTsKLQlwcmludGsoS0VSTl9FTUVSRyAia2lsbGluZyAlcy5cbiIsIGN1cnJlbnQtPmNvbW0pOwotCWZvcmNlX3NpZyhTSUdGUEUsIGN1cnJlbnQpOwotCXNjaGVkdWxlKCk7Ci19Ci0KLSNlbmRpZiAvKiBDT05GSUdfTUFUSF9FTVVMQVRJT04gKi8KLQotdm9pZCBfX2luaXQgdHJhcF9pbml0KHZvaWQpCi17Ci0JaW50IGk7Ci0KLSNpZmRlZiBDT05GSUdfRUlTQQotCXZvaWQgX19pb21lbSAqcCA9IGVhcmx5X2lvcmVtYXAoMHgwRkZGRDksIDQpOwotCi0JaWYgKHJlYWRsKHApID09ICdFJyArICgnSSc8PDgpICsgKCdTJzw8MTYpICsgKCdBJzw8MjQpKQotCQlFSVNBX2J1cyA9IDE7Ci0JZWFybHlfaW91bm1hcChwLCA0KTsKLSNlbmRpZgotCi0Jc2V0X3RyYXBfZ2F0ZSgwLCAmZGl2aWRlX2Vycm9yKTsKLQlzZXRfaW50cl9nYXRlKDEsICZkZWJ1Zyk7Ci0Jc2V0X2ludHJfZ2F0ZSgyLCAmbm1pKTsKLQlzZXRfc3lzdGVtX2ludHJfZ2F0ZSgzLCAmaW50Myk7IC8qIGludDMgY2FuIGJlIGNhbGxlZCBmcm9tIGFsbCAqLwotCXNldF9zeXN0ZW1fZ2F0ZSg0LCAmb3ZlcmZsb3cpOyAvKiBpbnQ0IGNhbiBiZSBjYWxsZWQgZnJvbSBhbGwgKi8KLQlzZXRfdHJhcF9nYXRlKDUsICZib3VuZHMpOwotCXNldF90cmFwX2dhdGUoNiwgJmludmFsaWRfb3ApOwotCXNldF90cmFwX2dhdGUoNywgJmRldmljZV9ub3RfYXZhaWxhYmxlKTsKLQlzZXRfdGFza19nYXRlKDgsIEdEVF9FTlRSWV9ET1VCTEVGQVVMVF9UU1MpOwotCXNldF90cmFwX2dhdGUoOSwgJmNvcHJvY2Vzc29yX3NlZ21lbnRfb3ZlcnJ1bik7Ci0Jc2V0X3RyYXBfZ2F0ZSgxMCwgJmludmFsaWRfVFNTKTsKLQlzZXRfdHJhcF9nYXRlKDExLCAmc2VnbWVudF9ub3RfcHJlc2VudCk7Ci0Jc2V0X3RyYXBfZ2F0ZSgxMiwgJnN0YWNrX3NlZ21lbnQpOwotCXNldF90cmFwX2dhdGUoMTMsICZnZW5lcmFsX3Byb3RlY3Rpb24pOwotCXNldF9pbnRyX2dhdGUoMTQsICZwYWdlX2ZhdWx0KTsKLQlzZXRfdHJhcF9nYXRlKDE1LCAmc3B1cmlvdXNfaW50ZXJydXB0X2J1Zyk7Ci0Jc2V0X3RyYXBfZ2F0ZSgxNiwgJmNvcHJvY2Vzc29yX2Vycm9yKTsKLQlzZXRfdHJhcF9nYXRlKDE3LCAmYWxpZ25tZW50X2NoZWNrKTsKLSNpZmRlZiBDT05GSUdfWDg2X01DRQotCXNldF90cmFwX2dhdGUoMTgsICZtYWNoaW5lX2NoZWNrKTsKLSNlbmRpZgotCXNldF90cmFwX2dhdGUoMTksICZzaW1kX2NvcHJvY2Vzc29yX2Vycm9yKTsKLQotCWlmIChjcHVfaGFzX2Z4c3IpIHsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiRW5hYmxpbmcgZmFzdCBGUFUgc2F2ZSBhbmQgcmVzdG9yZS4uLiAiKTsKLQkJc2V0X2luX2NyNChYODZfQ1I0X09TRlhTUik7Ci0JCXByaW50aygiZG9uZS5cbiIpOwotCX0KLQlpZiAoY3B1X2hhc194bW0pIHsKLQkJcHJpbnRrKEtFUk5fSU5GTwotCQkJIkVuYWJsaW5nIHVubWFza2VkIFNJTUQgRlBVIGV4Y2VwdGlvbiBzdXBwb3J0Li4uICIpOwotCQlzZXRfaW5fY3I0KFg4Nl9DUjRfT1NYTU1FWENQVCk7Ci0JCXByaW50aygiZG9uZS5cbiIpOwotCX0KLQotCXNldF9zeXN0ZW1fZ2F0ZShTWVNDQUxMX1ZFQ1RPUiwgJnN5c3RlbV9jYWxsKTsKLQotCS8qIFJlc2VydmUgYWxsIHRoZSBidWlsdGluIGFuZCB0aGUgc3lzY2FsbCB2ZWN0b3I6ICovCi0JZm9yIChpID0gMDsgaSA8IEZJUlNUX0VYVEVSTkFMX1ZFQ1RPUjsgaSsrKQotCQlzZXRfYml0KGksIHVzZWRfdmVjdG9ycyk7Ci0KLQlzZXRfYml0KFNZU0NBTExfVkVDVE9SLCB1c2VkX3ZlY3RvcnMpOwotCi0JLyoKLQkgKiBTaG91bGQgYmUgYSBiYXJyaWVyIGZvciBhbnkgZXh0ZXJuYWwgQ1BVIHN0YXRlOgotCSAqLwotCWNwdV9pbml0KCk7Ci0KLQl0cmFwX2luaXRfaG9vaygpOwotfQotCi1zdGF0aWMgaW50IF9faW5pdCBrc3RhY2tfc2V0dXAoY2hhciAqcykKLXsKLQlrc3RhY2tfZGVwdGhfdG9fcHJpbnQgPSBzaW1wbGVfc3RydG91bChzLCBOVUxMLCAwKTsKLQotCXJldHVybiAxOwotfQotX19zZXR1cCgia3N0YWNrPSIsIGtzdGFja19zZXR1cCk7Ci0KLXN0YXRpYyBpbnQgX19pbml0IGNvZGVfYnl0ZXNfc2V0dXAoY2hhciAqcykKLXsKLQljb2RlX2J5dGVzID0gc2ltcGxlX3N0cnRvdWwocywgTlVMTCwgMCk7Ci0JaWYgKGNvZGVfYnl0ZXMgPiA4MTkyKQotCQljb2RlX2J5dGVzID0gODE5MjsKLQotCXJldHVybiAxOwotfQotX19zZXR1cCgiY29kZV9ieXRlcz0iLCBjb2RlX2J5dGVzX3NldHVwKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC90cmFwc182NC5jIGIvYXJjaC94ODYva2VybmVsL3RyYXBzXzY0LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDljMGFjMGMuLjAwMDAwMDAKLS0tIGEvYXJjaC94ODYva2VybmVsL3RyYXBzXzY0LmMKKysrIC9kZXYvbnVsbApAQCAtMSwxMjE0ICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyICBMaW51cyBUb3J2YWxkcwotICogIENvcHlyaWdodCAoQykgMjAwMCwgMjAwMSwgMjAwMiBBbmRpIEtsZWVuLCBTdVNFIExhYnMKLSAqCi0gKiAgUGVudGl1bSBJSUkgRlhTUiwgU1NFIHN1cHBvcnQKLSAqCUdhcmV0aCBIdWdoZXMgPGdhcmV0aEB2YWxpbnV4LmNvbT4sIE1heSAyMDAwCi0gKi8KLQotLyoKLSAqICdUcmFwcy5jJyBoYW5kbGVzIGhhcmR3YXJlIHRyYXBzIGFuZCBmYXVsdHMgYWZ0ZXIgd2UgaGF2ZSBzYXZlZCBzb21lCi0gKiBzdGF0ZSBpbiAnZW50cnkuUycuCi0gKi8KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgotI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgotI2luY2x1ZGUgPGxpbnV4L2thbGxzeW1zLmg+Ci0jaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KLSNpbmNsdWRlIDxsaW51eC9rcHJvYmVzLmg+Ci0jaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgotI2luY2x1ZGUgPGxpbnV4L3V0c25hbWUuaD4KLSNpbmNsdWRlIDxsaW51eC9rZGVidWcuaD4KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9wdHJhY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KLSNpbmNsdWRlIDxsaW51eC91bndpbmQuaD4KLSNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+Ci0jaW5jbHVkZSA8bGludXgva2V4ZWMuaD4KLSNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgotI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L2J1Zy5oPgotI2luY2x1ZGUgPGxpbnV4L25taS5oPgotI2luY2x1ZGUgPGxpbnV4L21tLmg+Ci0jaW5jbHVkZSA8bGludXgvc21wLmg+Ci0jaW5jbHVkZSA8bGludXgvaW8uaD4KLQotI2lmIGRlZmluZWQoQ09ORklHX0VEQUMpCi0jaW5jbHVkZSA8bGludXgvZWRhYy5oPgotI2VuZGlmCi0KLSNpbmNsdWRlIDxhc20vc3RhY2t0cmFjZS5oPgotI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KLSNpbmNsdWRlIDxhc20vZGVidWdyZWcuaD4KLSNpbmNsdWRlIDxhc20vYXRvbWljLmg+Ci0jaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgotI2luY2x1ZGUgPGFzbS91bndpbmQuaD4KLSNpbmNsdWRlIDxhc20vZGVzYy5oPgotI2luY2x1ZGUgPGFzbS9pMzg3Lmg+Ci0jaW5jbHVkZSA8YXNtL3BnYWxsb2MuaD4KLSNpbmNsdWRlIDxhc20vcHJvdG8uaD4KLSNpbmNsdWRlIDxhc20vcGRhLmg+Ci0jaW5jbHVkZSA8YXNtL3RyYXBzLmg+Ci0KLSNpbmNsdWRlIDxtYWNoX3RyYXBzLmg+Ci0KLWludCBwYW5pY19vbl91bnJlY292ZXJlZF9ubWk7Ci1pbnQga3N0YWNrX2RlcHRoX3RvX3ByaW50ID0gMTI7Ci1zdGF0aWMgdW5zaWduZWQgaW50IGNvZGVfYnl0ZXMgPSA2NDsKLXN0YXRpYyBpbnQgaWdub3JlX25taXM7Ci1zdGF0aWMgaW50IGRpZV9jb3VudGVyOwotCi1zdGF0aWMgaW5saW5lIHZvaWQgY29uZGl0aW9uYWxfc3RpKHN0cnVjdCBwdF9yZWdzICpyZWdzKQotewotCWlmIChyZWdzLT5mbGFncyAmIFg4Nl9FRkxBR1NfSUYpCi0JCWxvY2FsX2lycV9lbmFibGUoKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHByZWVtcHRfY29uZGl0aW9uYWxfc3RpKHN0cnVjdCBwdF9yZWdzICpyZWdzKQotewotCWluY19wcmVlbXB0X2NvdW50KCk7Ci0JaWYgKHJlZ3MtPmZsYWdzICYgWDg2X0VGTEFHU19JRikKLQkJbG9jYWxfaXJxX2VuYWJsZSgpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgcHJlZW1wdF9jb25kaXRpb25hbF9jbGkoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCi17Ci0JaWYgKHJlZ3MtPmZsYWdzICYgWDg2X0VGTEFHU19JRikKLQkJbG9jYWxfaXJxX2Rpc2FibGUoKTsKLQkvKiBNYWtlIHN1cmUgdG8gbm90IHNjaGVkdWxlIGhlcmUgYmVjYXVzZSB3ZSBjb3VsZCBiZSBydW5uaW5nCi0JICAgb24gYW4gZXhjZXB0aW9uIHN0YWNrLiAqLwotCWRlY19wcmVlbXB0X2NvdW50KCk7Ci19Ci0KLXZvaWQgcHJpbnRrX2FkZHJlc3ModW5zaWduZWQgbG9uZyBhZGRyZXNzLCBpbnQgcmVsaWFibGUpCi17Ci0JcHJpbnRrKCIgWzwlMDE2bHg+XSAlcyVwU1xuIiwKLQkJCWFkZHJlc3MsIHJlbGlhYmxlID8JIiIgOiAiPyAiLCAodm9pZCAqKSBhZGRyZXNzKTsKLX0KLQotc3RhdGljIHVuc2lnbmVkIGxvbmcgKmluX2V4Y2VwdGlvbl9zdGFjayh1bnNpZ25lZCBjcHUsIHVuc2lnbmVkIGxvbmcgc3RhY2ssCi0JCQkJCXVuc2lnbmVkICp1c2VkcCwgY2hhciAqKmlkcCkKLXsKLQlzdGF0aWMgY2hhciBpZHNbXVs4XSA9IHsKLQkJW0RFQlVHX1NUQUNLIC0gMV0gPSAiI0RCIiwKLQkJW05NSV9TVEFDSyAtIDFdID0gIk5NSSIsCi0JCVtET1VCTEVGQVVMVF9TVEFDSyAtIDFdID0gIiNERiIsCi0JCVtTVEFDS0ZBVUxUX1NUQUNLIC0gMV0gPSAiI1NTIiwKLQkJW01DRV9TVEFDSyAtIDFdID0gIiNNQyIsCi0jaWYgREVCVUdfU1RLU1ogPiBFWENFUFRJT05fU1RLU1oKLQkJW05fRVhDRVBUSU9OX1NUQUNLUyAuLi4KLQkJCU5fRVhDRVBUSU9OX1NUQUNLUyArIERFQlVHX1NUS1NaIC8gRVhDRVBUSU9OX1NUS1NaIC0gMl0gPSAiI0RCWz9dIgotI2VuZGlmCi0JfTsKLQl1bnNpZ25lZCBrOwotCi0JLyoKLQkgKiBJdGVyYXRlIG92ZXIgYWxsIGV4Y2VwdGlvbiBzdGFja3MsIGFuZCBmaWd1cmUgb3V0IHdoZXRoZXIKLQkgKiAnc3RhY2snIGlzIGluIG9uZSBvZiB0aGVtOgotCSAqLwotCWZvciAoayA9IDA7IGsgPCBOX0VYQ0VQVElPTl9TVEFDS1M7IGsrKykgewotCQl1bnNpZ25lZCBsb25nIGVuZCA9IHBlcl9jcHUob3JpZ19pc3QsIGNwdSkuaXN0W2tdOwotCQkvKgotCQkgKiBJcyAnc3RhY2snIGFib3ZlIHRoaXMgZXhjZXB0aW9uIGZyYW1lJ3MgZW5kPwotCQkgKiBJZiB5ZXMgdGhlbiBza2lwIHRvIHRoZSBuZXh0IGZyYW1lLgotCQkgKi8KLQkJaWYgKHN0YWNrID49IGVuZCkKLQkJCWNvbnRpbnVlOwotCQkvKgotCQkgKiBJcyAnc3RhY2snIGFib3ZlIHRoaXMgZXhjZXB0aW9uIGZyYW1lJ3Mgc3RhcnQgYWRkcmVzcz8KLQkJICogSWYgeWVzIHRoZW4gd2UgZm91bmQgdGhlIHJpZ2h0IGZyYW1lLgotCQkgKi8KLQkJaWYgKHN0YWNrID49IGVuZCAtIEVYQ0VQVElPTl9TVEtTWikgewotCQkJLyoKLQkJCSAqIE1ha2Ugc3VyZSB3ZSBvbmx5IGl0ZXJhdGUgdGhyb3VnaCBhbiBleGNlcHRpb24KLQkJCSAqIHN0YWNrIG9uY2UuIElmIGl0IGNvbWVzIHVwIGZvciB0aGUgc2Vjb25kIHRpbWUKLQkJCSAqIHRoZW4gdGhlcmUncyBzb21ldGhpbmcgd3JvbmcgZ29pbmcgb24gLSBqdXN0Ci0JCQkgKiBicmVhayBvdXQgYW5kIHJldHVybiBOVUxMOgotCQkJICovCi0JCQlpZiAoKnVzZWRwICYgKDFVIDw8IGspKQotCQkJCWJyZWFrOwotCQkJKnVzZWRwIHw9IDFVIDw8IGs7Ci0JCQkqaWRwID0gaWRzW2tdOwotCQkJcmV0dXJuICh1bnNpZ25lZCBsb25nICopZW5kOwotCQl9Ci0JCS8qCi0JCSAqIElmIHRoaXMgaXMgYSBkZWJ1ZyBzdGFjaywgYW5kIGlmIGl0IGhhcyBhIGxhcmdlciBzaXplIHRoYW4KLQkJICogdGhlIHVzdWFsIGV4Y2VwdGlvbiBzdGFja3MsIHRoZW4gJ3N0YWNrJyBtaWdodCBzdGlsbAotCQkgKiBiZSB3aXRoaW4gdGhlIGxvd2VyIHBvcnRpb24gb2YgdGhlIGRlYnVnIHN0YWNrOgotCQkgKi8KLSNpZiBERUJVR19TVEtTWiA+IEVYQ0VQVElPTl9TVEtTWgotCQlpZiAoayA9PSBERUJVR19TVEFDSyAtIDEgJiYgc3RhY2sgPj0gZW5kIC0gREVCVUdfU1RLU1opIHsKLQkJCXVuc2lnbmVkIGogPSBOX0VYQ0VQVElPTl9TVEFDS1MgLSAxOwotCi0JCQkvKgotCQkJICogQmxhY2sgbWFnaWMuIEEgbGFyZ2UgZGVidWcgc3RhY2sgaXMgY29tcG9zZWQgb2YKLQkJCSAqIG11bHRpcGxlIGV4Y2VwdGlvbiBzdGFjayBlbnRyaWVzLCB3aGljaCB3ZQotCQkJICogaXRlcmF0ZSB0aHJvdWdoIG5vdy4gRG9udCBsb29rOgotCQkJICovCi0JCQlkbyB7Ci0JCQkJKytqOwotCQkJCWVuZCAtPSBFWENFUFRJT05fU1RLU1o7Ci0JCQkJaWRzW2pdWzRdID0gJzEnICsgKGogLSBOX0VYQ0VQVElPTl9TVEFDS1MpOwotCQkJfSB3aGlsZSAoc3RhY2sgPCBlbmQgLSBFWENFUFRJT05fU1RLU1opOwotCQkJaWYgKCp1c2VkcCAmICgxVSA8PCBqKSkKLQkJCQlicmVhazsKLQkJCSp1c2VkcCB8PSAxVSA8PCBqOwotCQkJKmlkcCA9IGlkc1tqXTsKLQkJCXJldHVybiAodW5zaWduZWQgbG9uZyAqKWVuZDsKLQkJfQotI2VuZGlmCi0JfQotCXJldHVybiBOVUxMOwotfQotCi0vKgotICogeDg2LTY0IGNhbiBoYXZlIHVwIHRvIHRocmVlIGtlcm5lbCBzdGFja3M6Ci0gKiBwcm9jZXNzIHN0YWNrCi0gKiBpbnRlcnJ1cHQgc3RhY2sKLSAqIHNldmVyZSBleGNlcHRpb24gKGRvdWJsZSBmYXVsdCwgbm1pLCBzdGFjayBmYXVsdCwgZGVidWcsIG1jZSkgaGFyZHdhcmUgc3RhY2sKLSAqLwotCi1zdGF0aWMgaW5saW5lIGludCB2YWxpZF9zdGFja19wdHIoc3RydWN0IHRocmVhZF9pbmZvICp0aW5mbywKLQkJCXZvaWQgKnAsIHVuc2lnbmVkIGludCBzaXplLCB2b2lkICplbmQpCi17Ci0Jdm9pZCAqdCA9IHRpbmZvOwotCWlmIChlbmQpIHsKLQkJaWYgKHAgPCBlbmQgJiYgcCA+PSAoZW5kLVRIUkVBRF9TSVpFKSkKLQkJCXJldHVybiAxOwotCQllbHNlCi0JCQlyZXR1cm4gMDsKLQl9Ci0JcmV0dXJuIHAgPiB0ICYmIHAgPCB0ICsgVEhSRUFEX1NJWkUgLSBzaXplOwotfQotCi0vKiBUaGUgZm9ybSBvZiB0aGUgdG9wIG9mIHRoZSBmcmFtZSBvbiB0aGUgc3RhY2sgKi8KLXN0cnVjdCBzdGFja19mcmFtZSB7Ci0Jc3RydWN0IHN0YWNrX2ZyYW1lICpuZXh0X2ZyYW1lOwotCXVuc2lnbmVkIGxvbmcgcmV0dXJuX2FkZHJlc3M7Ci19OwotCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcKLXByaW50X2NvbnRleHRfc3RhY2soc3RydWN0IHRocmVhZF9pbmZvICp0aW5mbywKLQkJdW5zaWduZWQgbG9uZyAqc3RhY2ssIHVuc2lnbmVkIGxvbmcgYnAsCi0JCWNvbnN0IHN0cnVjdCBzdGFja3RyYWNlX29wcyAqb3BzLCB2b2lkICpkYXRhLAotCQl1bnNpZ25lZCBsb25nICplbmQpCi17Ci0Jc3RydWN0IHN0YWNrX2ZyYW1lICpmcmFtZSA9IChzdHJ1Y3Qgc3RhY2tfZnJhbWUgKilicDsKLQotCXdoaWxlICh2YWxpZF9zdGFja19wdHIodGluZm8sIHN0YWNrLCBzaXplb2YoKnN0YWNrKSwgZW5kKSkgewotCQl1bnNpZ25lZCBsb25nIGFkZHI7Ci0KLQkJYWRkciA9ICpzdGFjazsKLQkJaWYgKF9fa2VybmVsX3RleHRfYWRkcmVzcyhhZGRyKSkgewotCQkJaWYgKCh1bnNpZ25lZCBsb25nKSBzdGFjayA9PSBicCArIDgpIHsKLQkJCQlvcHMtPmFkZHJlc3MoZGF0YSwgYWRkciwgMSk7Ci0JCQkJZnJhbWUgPSBmcmFtZS0+bmV4dF9mcmFtZTsKLQkJCQlicCA9ICh1bnNpZ25lZCBsb25nKSBmcmFtZTsKLQkJCX0gZWxzZSB7Ci0JCQkJb3BzLT5hZGRyZXNzKGRhdGEsIGFkZHIsIGJwID09IDApOwotCQkJfQotCQl9Ci0JCXN0YWNrKys7Ci0JfQotCXJldHVybiBicDsKLX0KLQotdm9pZCBkdW1wX3RyYWNlKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsCi0JCXVuc2lnbmVkIGxvbmcgKnN0YWNrLCB1bnNpZ25lZCBsb25nIGJwLAotCQljb25zdCBzdHJ1Y3Qgc3RhY2t0cmFjZV9vcHMgKm9wcywgdm9pZCAqZGF0YSkKLXsKLQljb25zdCB1bnNpZ25lZCBjcHUgPSBnZXRfY3B1KCk7Ci0JdW5zaWduZWQgbG9uZyAqaXJxc3RhY2tfZW5kID0gKHVuc2lnbmVkIGxvbmcgKiljcHVfcGRhKGNwdSktPmlycXN0YWNrcHRyOwotCXVuc2lnbmVkIHVzZWQgPSAwOwotCXN0cnVjdCB0aHJlYWRfaW5mbyAqdGluZm87Ci0KLQlpZiAoIXRhc2spCi0JCXRhc2sgPSBjdXJyZW50OwotCi0JaWYgKCFzdGFjaykgewotCQl1bnNpZ25lZCBsb25nIGR1bW15OwotCQlzdGFjayA9ICZkdW1teTsKLQkJaWYgKHRhc2sgJiYgdGFzayAhPSBjdXJyZW50KQotCQkJc3RhY2sgPSAodW5zaWduZWQgbG9uZyAqKXRhc2stPnRocmVhZC5zcDsKLQl9Ci0KLSNpZmRlZiBDT05GSUdfRlJBTUVfUE9JTlRFUgotCWlmICghYnApIHsKLQkJaWYgKHRhc2sgPT0gY3VycmVudCkgewotCQkJLyogR3JhYiBicCByaWdodCBmcm9tIG91ciByZWdzICovCi0JCQlhc20oIm1vdnEgJSVyYnAsICUwIiA6ICI9ciIgKGJwKSA6ICk7Ci0JCX0gZWxzZSB7Ci0JCQkvKiBicCBpcyB0aGUgbGFzdCByZWcgcHVzaGVkIGJ5IHN3aXRjaF90byAqLwotCQkJYnAgPSAqKHVuc2lnbmVkIGxvbmcgKikgdGFzay0+dGhyZWFkLnNwOwotCQl9Ci0JfQotI2VuZGlmCi0KLQkvKgotCSAqIFByaW50IGZ1bmN0aW9uIGNhbGwgZW50cmllcyBpbiBhbGwgc3RhY2tzLCBzdGFydGluZyBhdCB0aGUKLQkgKiBjdXJyZW50IHN0YWNrIGFkZHJlc3MuIElmIHRoZSBzdGFja3MgY29uc2lzdCBvZiBuZXN0ZWQKLQkgKiBleGNlcHRpb25zCi0JICovCi0JdGluZm8gPSB0YXNrX3RocmVhZF9pbmZvKHRhc2spOwotCWZvciAoOzspIHsKLQkJY2hhciAqaWQ7Ci0JCXVuc2lnbmVkIGxvbmcgKmVzdGFja19lbmQ7Ci0JCWVzdGFja19lbmQgPSBpbl9leGNlcHRpb25fc3RhY2soY3B1LCAodW5zaWduZWQgbG9uZylzdGFjaywKLQkJCQkJCSZ1c2VkLCAmaWQpOwotCi0JCWlmIChlc3RhY2tfZW5kKSB7Ci0JCQlpZiAob3BzLT5zdGFjayhkYXRhLCBpZCkgPCAwKQotCQkJCWJyZWFrOwotCi0JCQlicCA9IHByaW50X2NvbnRleHRfc3RhY2sodGluZm8sIHN0YWNrLCBicCwgb3BzLAotCQkJCQkJCWRhdGEsIGVzdGFja19lbmQpOwotCQkJb3BzLT5zdGFjayhkYXRhLCAiPEVPRT4iKTsKLQkJCS8qCi0JCQkgKiBXZSBsaW5rIHRvIHRoZSBuZXh0IHN0YWNrIHZpYSB0aGUKLQkJCSAqIHNlY29uZC10by1sYXN0IHBvaW50ZXIgKGluZGV4IC0yIHRvIGVuZCkgaW4gdGhlCi0JCQkgKiBleGNlcHRpb24gc3RhY2s6Ci0JCQkgKi8KLQkJCXN0YWNrID0gKHVuc2lnbmVkIGxvbmcgKikgZXN0YWNrX2VuZFstMl07Ci0JCQljb250aW51ZTsKLQkJfQotCQlpZiAoaXJxc3RhY2tfZW5kKSB7Ci0JCQl1bnNpZ25lZCBsb25nICppcnFzdGFjazsKLQkJCWlycXN0YWNrID0gaXJxc3RhY2tfZW5kIC0KLQkJCQkoSVJRU1RBQ0tTSVpFIC0gNjQpIC8gc2l6ZW9mKCppcnFzdGFjayk7Ci0KLQkJCWlmIChzdGFjayA+PSBpcnFzdGFjayAmJiBzdGFjayA8IGlycXN0YWNrX2VuZCkgewotCQkJCWlmIChvcHMtPnN0YWNrKGRhdGEsICJJUlEiKSA8IDApCi0JCQkJCWJyZWFrOwotCQkJCWJwID0gcHJpbnRfY29udGV4dF9zdGFjayh0aW5mbywgc3RhY2ssIGJwLAotCQkJCQkJb3BzLCBkYXRhLCBpcnFzdGFja19lbmQpOwotCQkJCS8qCi0JCQkJICogV2UgbGluayB0byB0aGUgbmV4dCBzdGFjayAod2hpY2ggd291bGQgYmUKLQkJCQkgKiB0aGUgcHJvY2VzcyBzdGFjayBub3JtYWxseSkgdGhlIGxhc3QKLQkJCQkgKiBwb2ludGVyIChpbmRleCAtMSB0byBlbmQpIGluIHRoZSBJUlEgc3RhY2s6Ci0JCQkJICovCi0JCQkJc3RhY2sgPSAodW5zaWduZWQgbG9uZyAqKSAoaXJxc3RhY2tfZW5kWy0xXSk7Ci0JCQkJaXJxc3RhY2tfZW5kID0gTlVMTDsKLQkJCQlvcHMtPnN0YWNrKGRhdGEsICJFT0kiKTsKLQkJCQljb250aW51ZTsKLQkJCX0KLQkJfQotCQlicmVhazsKLQl9Ci0KLQkvKgotCSAqIFRoaXMgaGFuZGxlcyB0aGUgcHJvY2VzcyBzdGFjazoKLQkgKi8KLQlicCA9IHByaW50X2NvbnRleHRfc3RhY2sodGluZm8sIHN0YWNrLCBicCwgb3BzLCBkYXRhLCBOVUxMKTsKLQlwdXRfY3B1KCk7Ci19Ci1FWFBPUlRfU1lNQk9MKGR1bXBfdHJhY2UpOwotCi1zdGF0aWMgdm9pZAotcHJpbnRfdHJhY2Vfd2FybmluZ19zeW1ib2wodm9pZCAqZGF0YSwgY2hhciAqbXNnLCB1bnNpZ25lZCBsb25nIHN5bWJvbCkKLXsKLQlwcmludF9zeW1ib2wobXNnLCBzeW1ib2wpOwotCXByaW50aygiXG4iKTsKLX0KLQotc3RhdGljIHZvaWQgcHJpbnRfdHJhY2Vfd2FybmluZyh2b2lkICpkYXRhLCBjaGFyICptc2cpCi17Ci0JcHJpbnRrKCIlc1xuIiwgbXNnKTsKLX0KLQotc3RhdGljIGludCBwcmludF90cmFjZV9zdGFjayh2b2lkICpkYXRhLCBjaGFyICpuYW1lKQotewotCXByaW50aygiIDwlcz4gIiwgbmFtZSk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIHByaW50X3RyYWNlX2FkZHJlc3Modm9pZCAqZGF0YSwgdW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgcmVsaWFibGUpCi17Ci0JdG91Y2hfbm1pX3dhdGNoZG9nKCk7Ci0JcHJpbnRrX2FkZHJlc3MoYWRkciwgcmVsaWFibGUpOwotfQotCi1zdGF0aWMgY29uc3Qgc3RydWN0IHN0YWNrdHJhY2Vfb3BzIHByaW50X3RyYWNlX29wcyA9IHsKLQkud2FybmluZyA9IHByaW50X3RyYWNlX3dhcm5pbmcsCi0JLndhcm5pbmdfc3ltYm9sID0gcHJpbnRfdHJhY2Vfd2FybmluZ19zeW1ib2wsCi0JLnN0YWNrID0gcHJpbnRfdHJhY2Vfc3RhY2ssCi0JLmFkZHJlc3MgPSBwcmludF90cmFjZV9hZGRyZXNzLAotfTsKLQotc3RhdGljIHZvaWQKLXNob3dfdHJhY2VfbG9nX2x2bChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIHN0cnVjdCBwdF9yZWdzICpyZWdzLAotCQl1bnNpZ25lZCBsb25nICpzdGFjaywgdW5zaWduZWQgbG9uZyBicCwgY2hhciAqbG9nX2x2bCkKLXsKLQlwcmludGsoIkNhbGwgVHJhY2U6XG4iKTsKLQlkdW1wX3RyYWNlKHRhc2ssIHJlZ3MsIHN0YWNrLCBicCwgJnByaW50X3RyYWNlX29wcywgbG9nX2x2bCk7Ci19Ci0KLXZvaWQgc2hvd190cmFjZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIHN0cnVjdCBwdF9yZWdzICpyZWdzLAotCQl1bnNpZ25lZCBsb25nICpzdGFjaywgdW5zaWduZWQgbG9uZyBicCkKLXsKLQlzaG93X3RyYWNlX2xvZ19sdmwodGFzaywgcmVncywgc3RhY2ssIGJwLCAiIik7Ci19Ci0KLXN0YXRpYyB2b2lkCi1zaG93X3N0YWNrX2xvZ19sdmwoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCBzdHJ1Y3QgcHRfcmVncyAqcmVncywKLQkJdW5zaWduZWQgbG9uZyAqc3AsIHVuc2lnbmVkIGxvbmcgYnAsIGNoYXIgKmxvZ19sdmwpCi17Ci0JdW5zaWduZWQgbG9uZyAqc3RhY2s7Ci0JaW50IGk7Ci0JY29uc3QgaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKLQl1bnNpZ25lZCBsb25nICppcnFzdGFja19lbmQgPQotCQkodW5zaWduZWQgbG9uZyAqKSAoY3B1X3BkYShjcHUpLT5pcnFzdGFja3B0cik7Ci0JdW5zaWduZWQgbG9uZyAqaXJxc3RhY2sgPQotCQkodW5zaWduZWQgbG9uZyAqKSAoY3B1X3BkYShjcHUpLT5pcnFzdGFja3B0ciAtIElSUVNUQUNLU0laRSk7Ci0KLQkvKgotCSAqIGRlYnVnZ2luZyBhaWQ6ICJzaG93X3N0YWNrKE5VTEwsIE5VTEwpOyIgcHJpbnRzIHRoZQotCSAqIGJhY2sgdHJhY2UgZm9yIHRoaXMgY3B1LgotCSAqLwotCi0JaWYgKHNwID09IE5VTEwpIHsKLQkJaWYgKHRhc2spCi0JCQlzcCA9ICh1bnNpZ25lZCBsb25nICopdGFzay0+dGhyZWFkLnNwOwotCQllbHNlCi0JCQlzcCA9ICh1bnNpZ25lZCBsb25nICopJnNwOwotCX0KLQotCXN0YWNrID0gc3A7Ci0JZm9yIChpID0gMDsgaSA8IGtzdGFja19kZXB0aF90b19wcmludDsgaSsrKSB7Ci0JCWlmIChzdGFjayA+PSBpcnFzdGFjayAmJiBzdGFjayA8PSBpcnFzdGFja19lbmQpIHsKLQkJCWlmIChzdGFjayA9PSBpcnFzdGFja19lbmQpIHsKLQkJCQlzdGFjayA9ICh1bnNpZ25lZCBsb25nICopIChpcnFzdGFja19lbmRbLTFdKTsKLQkJCQlwcmludGsoIiA8RU9JPiAiKTsKLQkJCX0KLQkJfSBlbHNlIHsKLQkJaWYgKCgobG9uZykgc3RhY2sgJiAoVEhSRUFEX1NJWkUtMSkpID09IDApCi0JCQlicmVhazsKLQkJfQotCQlpZiAoaSAmJiAoKGkgJSA0KSA9PSAwKSkKLQkJCXByaW50aygiXG4iKTsKLQkJcHJpbnRrKCIgJTAxNmx4IiwgKnN0YWNrKyspOwotCQl0b3VjaF9ubWlfd2F0Y2hkb2coKTsKLQl9Ci0JcHJpbnRrKCJcbiIpOwotCXNob3dfdHJhY2VfbG9nX2x2bCh0YXNrLCByZWdzLCBzcCwgYnAsIGxvZ19sdmwpOwotfQotCi12b2lkIHNob3dfc3RhY2soc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCB1bnNpZ25lZCBsb25nICpzcCkKLXsKLQlzaG93X3N0YWNrX2xvZ19sdmwodGFzaywgTlVMTCwgc3AsIDAsICIiKTsKLX0KLQotLyoKLSAqIFRoZSBhcmNoaXRlY3R1cmUtaW5kZXBlbmRlbnQgZHVtcF9zdGFjayBnZW5lcmF0b3IKLSAqLwotdm9pZCBkdW1wX3N0YWNrKHZvaWQpCi17Ci0JdW5zaWduZWQgbG9uZyBicCA9IDA7Ci0JdW5zaWduZWQgbG9uZyBzdGFjazsKLQotI2lmZGVmIENPTkZJR19GUkFNRV9QT0lOVEVSCi0JaWYgKCFicCkKLQkJYXNtKCJtb3ZxICUlcmJwLCAlMCIgOiAiPXIiIChicCkgOiApOwotI2VuZGlmCi0KLQlwcmludGsoIlBpZDogJWQsIGNvbW06ICUuMjBzICVzICVzICUuKnNcbiIsCi0JCWN1cnJlbnQtPnBpZCwgY3VycmVudC0+Y29tbSwgcHJpbnRfdGFpbnRlZCgpLAotCQlpbml0X3V0c25hbWUoKS0+cmVsZWFzZSwKLQkJKGludClzdHJjc3BuKGluaXRfdXRzbmFtZSgpLT52ZXJzaW9uLCAiICIpLAotCQlpbml0X3V0c25hbWUoKS0+dmVyc2lvbik7Ci0Jc2hvd190cmFjZShOVUxMLCBOVUxMLCAmc3RhY2ssIGJwKTsKLX0KLUVYUE9SVF9TWU1CT0woZHVtcF9zdGFjayk7Ci0KLXZvaWQgc2hvd19yZWdpc3RlcnMoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCi17Ci0JaW50IGk7Ci0JdW5zaWduZWQgbG9uZyBzcDsKLQljb25zdCBpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwotCXN0cnVjdCB0YXNrX3N0cnVjdCAqY3VyID0gY3B1X3BkYShjcHUpLT5wY3VycmVudDsKLQotCXNwID0gcmVncy0+c3A7Ci0JcHJpbnRrKCJDUFUgJWQgIiwgY3B1KTsKLQlfX3Nob3dfcmVncyhyZWdzKTsKLQlwcmludGsoIlByb2Nlc3MgJXMgKHBpZDogJWQsIHRocmVhZGluZm8gJXAsIHRhc2sgJXApXG4iLAotCQljdXItPmNvbW0sIGN1ci0+cGlkLCB0YXNrX3RocmVhZF9pbmZvKGN1ciksIGN1cik7Ci0KLQkvKgotCSAqIFdoZW4gaW4ta2VybmVsLCB3ZSBhbHNvIHByaW50IG91dCB0aGUgc3RhY2sgYW5kIGNvZGUgYXQgdGhlCi0JICogdGltZSBvZiB0aGUgZmF1bHQuLgotCSAqLwotCWlmICghdXNlcl9tb2RlKHJlZ3MpKSB7Ci0JCXVuc2lnbmVkIGludCBjb2RlX3Byb2xvZ3VlID0gY29kZV9ieXRlcyAqIDQzIC8gNjQ7Ci0JCXVuc2lnbmVkIGludCBjb2RlX2xlbiA9IGNvZGVfYnl0ZXM7Ci0JCXVuc2lnbmVkIGNoYXIgYzsKLQkJdTggKmlwOwotCi0JCXByaW50aygiU3RhY2s6ICIpOwotCQlzaG93X3N0YWNrX2xvZ19sdmwoTlVMTCwgcmVncywgKHVuc2lnbmVkIGxvbmcgKilzcCwKLQkJCQlyZWdzLT5icCwgIiIpOwotCi0JCXByaW50ayhLRVJOX0VNRVJHICJDb2RlOiAiKTsKLQotCQlpcCA9ICh1OCAqKXJlZ3MtPmlwIC0gY29kZV9wcm9sb2d1ZTsKLQkJaWYgKGlwIDwgKHU4ICopUEFHRV9PRkZTRVQgfHwgcHJvYmVfa2VybmVsX2FkZHJlc3MoaXAsIGMpKSB7Ci0JCQkvKiB0cnkgc3RhcnRpbmcgYXQgUklQICovCi0JCQlpcCA9ICh1OCAqKXJlZ3MtPmlwOwotCQkJY29kZV9sZW4gPSBjb2RlX2xlbiAtIGNvZGVfcHJvbG9ndWUgKyAxOwotCQl9Ci0JCWZvciAoaSA9IDA7IGkgPCBjb2RlX2xlbjsgaSsrLCBpcCsrKSB7Ci0JCQlpZiAoaXAgPCAodTggKilQQUdFX09GRlNFVCB8fAotCQkJCQlwcm9iZV9rZXJuZWxfYWRkcmVzcyhpcCwgYykpIHsKLQkJCQlwcmludGsoIiBCYWQgUklQIHZhbHVlLiIpOwotCQkJCWJyZWFrOwotCQkJfQotCQkJaWYgKGlwID09ICh1OCAqKXJlZ3MtPmlwKQotCQkJCXByaW50aygiPCUwMng+ICIsIGMpOwotCQkJZWxzZQotCQkJCXByaW50aygiJTAyeCAiLCBjKTsKLQkJfQotCX0KLQlwcmludGsoIlxuIik7Ci19Ci0KLWludCBpc192YWxpZF9idWdhZGRyKHVuc2lnbmVkIGxvbmcgaXApCi17Ci0JdW5zaWduZWQgc2hvcnQgdWQyOwotCi0JaWYgKF9fY29weV9mcm9tX3VzZXIoJnVkMiwgKGNvbnN0IHZvaWQgX191c2VyICopIGlwLCBzaXplb2YodWQyKSkpCi0JCXJldHVybiAwOwotCi0JcmV0dXJuIHVkMiA9PSAweDBiMGY7Ci19Ci0KLXN0YXRpYyByYXdfc3BpbmxvY2tfdCBkaWVfbG9jayA9IF9fUkFXX1NQSU5fTE9DS19VTkxPQ0tFRDsKLXN0YXRpYyBpbnQgZGllX293bmVyID0gLTE7Ci1zdGF0aWMgdW5zaWduZWQgaW50IGRpZV9uZXN0X2NvdW50OwotCi11bnNpZ25lZCBfX2twcm9iZXMgbG9uZyBvb3BzX2JlZ2luKHZvaWQpCi17Ci0JaW50IGNwdTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0Jb29wc19lbnRlcigpOwotCi0JLyogcmFjeSwgYnV0IGJldHRlciB0aGFuIHJpc2tpbmcgZGVhZGxvY2suICovCi0JcmF3X2xvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQljcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7Ci0JaWYgKCFfX3Jhd19zcGluX3RyeWxvY2soJmRpZV9sb2NrKSkgewotCQlpZiAoY3B1ID09IGRpZV9vd25lcikKLQkJCS8qIG5lc3RlZCBvb3BzLiBzaG91bGQgc3RvcCBldmVudHVhbGx5ICovOwotCQllbHNlCi0JCQlfX3Jhd19zcGluX2xvY2soJmRpZV9sb2NrKTsKLQl9Ci0JZGllX25lc3RfY291bnQrKzsKLQlkaWVfb3duZXIgPSBjcHU7Ci0JY29uc29sZV92ZXJib3NlKCk7Ci0JYnVzdF9zcGlubG9ja3MoMSk7Ci0JcmV0dXJuIGZsYWdzOwotfQotCi12b2lkIF9fa3Byb2JlcyBvb3BzX2VuZCh1bnNpZ25lZCBsb25nIGZsYWdzLCBzdHJ1Y3QgcHRfcmVncyAqcmVncywgaW50IHNpZ25yKQotewotCWRpZV9vd25lciA9IC0xOwotCWJ1c3Rfc3BpbmxvY2tzKDApOwotCWRpZV9uZXN0X2NvdW50LS07Ci0JaWYgKCFkaWVfbmVzdF9jb3VudCkKLQkJLyogTmVzdCBjb3VudCByZWFjaGVzIHplcm8sIHJlbGVhc2UgdGhlIGxvY2suICovCi0JCV9fcmF3X3NwaW5fdW5sb2NrKCZkaWVfbG9jayk7Ci0JcmF3X2xvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLQlpZiAoIXJlZ3MpIHsKLQkJb29wc19leGl0KCk7Ci0JCXJldHVybjsKLQl9Ci0JaWYgKHBhbmljX29uX29vcHMpCi0JCXBhbmljKCJGYXRhbCBleGNlcHRpb24iKTsKLQlvb3BzX2V4aXQoKTsKLQlkb19leGl0KHNpZ25yKTsKLX0KLQotaW50IF9fa3Byb2JlcyBfX2RpZShjb25zdCBjaGFyICpzdHIsIHN0cnVjdCBwdF9yZWdzICpyZWdzLCBsb25nIGVycikKLXsKLQlwcmludGsoS0VSTl9FTUVSRyAiJXM6ICUwNGx4IFsldV0gIiwgc3RyLCBlcnIgJiAweGZmZmYsICsrZGllX2NvdW50ZXIpOwotI2lmZGVmIENPTkZJR19QUkVFTVBUCi0JcHJpbnRrKCJQUkVFTVBUICIpOwotI2VuZGlmCi0jaWZkZWYgQ09ORklHX1NNUAotCXByaW50aygiU01QICIpOwotI2VuZGlmCi0jaWZkZWYgQ09ORklHX0RFQlVHX1BBR0VBTExPQwotCXByaW50aygiREVCVUdfUEFHRUFMTE9DIik7Ci0jZW5kaWYKLQlwcmludGsoIlxuIik7Ci0JaWYgKG5vdGlmeV9kaWUoRElFX09PUFMsIHN0ciwgcmVncywgZXJyLAotCQkJY3VycmVudC0+dGhyZWFkLnRyYXBfbm8sIFNJR1NFR1YpID09IE5PVElGWV9TVE9QKQotCQlyZXR1cm4gMTsKLQotCXNob3dfcmVnaXN0ZXJzKHJlZ3MpOwotCWFkZF90YWludChUQUlOVF9ESUUpOwotCS8qIEV4ZWN1dGl2ZSBzdW1tYXJ5IGluIGNhc2UgdGhlIG9vcHMgc2Nyb2xsZWQgYXdheSAqLwotCXByaW50ayhLRVJOX0FMRVJUICJSSVAgIik7Ci0JcHJpbnRrX2FkZHJlc3MocmVncy0+aXAsIDEpOwotCXByaW50aygiIFJTUCA8JTAxNmx4PlxuIiwgcmVncy0+c3ApOwotCWlmIChrZXhlY19zaG91bGRfY3Jhc2goY3VycmVudCkpCi0JCWNyYXNoX2tleGVjKHJlZ3MpOwotCXJldHVybiAwOwotfQotCi12b2lkIGRpZShjb25zdCBjaGFyICpzdHIsIHN0cnVjdCBwdF9yZWdzICpyZWdzLCBsb25nIGVycikKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzID0gb29wc19iZWdpbigpOwotCi0JaWYgKCF1c2VyX21vZGUocmVncykpCi0JCXJlcG9ydF9idWcocmVncy0+aXAsIHJlZ3MpOwotCi0JaWYgKF9fZGllKHN0ciwgcmVncywgZXJyKSkKLQkJcmVncyA9IE5VTEw7Ci0Jb29wc19lbmQoZmxhZ3MsIHJlZ3MsIFNJR1NFR1YpOwotfQotCi1ub3RyYWNlIF9fa3Byb2JlcyB2b2lkCi1kaWVfbm1pKGNoYXIgKnN0ciwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIGludCBkb19wYW5pYykKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JaWYgKG5vdGlmeV9kaWUoRElFX05NSVdBVENIRE9HLCBzdHIsIHJlZ3MsIDAsIDIsIFNJR0lOVCkgPT0gTk9USUZZX1NUT1ApCi0JCXJldHVybjsKLQotCWZsYWdzID0gb29wc19iZWdpbigpOwotCS8qCi0JICogV2UgYXJlIGluIHRyb3VibGUgYW55d2F5LCBsZXRzIGF0IGxlYXN0IHRyeQotCSAqIHRvIGdldCBhIG1lc3NhZ2Ugb3V0LgotCSAqLwotCXByaW50ayhLRVJOX0VNRVJHICIlcyIsIHN0cik7Ci0JcHJpbnRrKCIgb24gQ1BVJWQsIGlwICUwOGx4LCByZWdpc3RlcnM6XG4iLAotCQlzbXBfcHJvY2Vzc29yX2lkKCksIHJlZ3MtPmlwKTsKLQlzaG93X3JlZ2lzdGVycyhyZWdzKTsKLQlpZiAoa2V4ZWNfc2hvdWxkX2NyYXNoKGN1cnJlbnQpKQotCQljcmFzaF9rZXhlYyhyZWdzKTsKLQlpZiAoZG9fcGFuaWMgfHwgcGFuaWNfb25fb29wcykKLQkJcGFuaWMoIk5vbiBtYXNrYWJsZSBpbnRlcnJ1cHQiKTsKLQlvb3BzX2VuZChmbGFncywgTlVMTCwgU0lHQlVTKTsKLQlubWlfZXhpdCgpOwotCWxvY2FsX2lycV9lbmFibGUoKTsKLQlkb19leGl0KFNJR0JVUyk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fa3Byb2JlcwotZG9fdHJhcChpbnQgdHJhcG5yLCBpbnQgc2lnbnIsIGNoYXIgKnN0ciwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsCi0JbG9uZyBlcnJvcl9jb2RlLCBzaWdpbmZvX3QgKmluZm8pCi17Ci0Jc3RydWN0IHRhc2tfc3RydWN0ICp0c2sgPSBjdXJyZW50OwotCi0JaWYgKCF1c2VyX21vZGUocmVncykpCi0JCWdvdG8ga2VybmVsX3RyYXA7Ci0KLQkvKgotCSAqIFdlIHdhbnQgZXJyb3JfY29kZSBhbmQgdHJhcF9ubyBzZXQgZm9yIHVzZXJzcGFjZSBmYXVsdHMgYW5kCi0JICoga2VybmVsc3BhY2UgZmF1bHRzIHdoaWNoIHJlc3VsdCBpbiBkaWUoKSwgYnV0IG5vdAotCSAqIGtlcm5lbHNwYWNlIGZhdWx0cyB3aGljaCBhcmUgZml4ZWQgdXAuICBkaWUoKSBnaXZlcyB0aGUKLQkgKiBwcm9jZXNzIG5vIGNoYW5jZSB0byBoYW5kbGUgdGhlIHNpZ25hbCBhbmQgbm90aWNlIHRoZQotCSAqIGtlcm5lbCBmYXVsdCBpbmZvcm1hdGlvbiwgc28gdGhhdCB3b24ndCByZXN1bHQgaW4gcG9sbHV0aW5nCi0JICogdGhlIGluZm9ybWF0aW9uIGFib3V0IHByZXZpb3VzbHkgcXVldWVkLCBidXQgbm90IHlldAotCSAqIGRlbGl2ZXJlZCwgZmF1bHRzLiAgU2VlIGFsc28gZG9fZ2VuZXJhbF9wcm90ZWN0aW9uIGJlbG93LgotCSAqLwotCXRzay0+dGhyZWFkLmVycm9yX2NvZGUgPSBlcnJvcl9jb2RlOwotCXRzay0+dGhyZWFkLnRyYXBfbm8gPSB0cmFwbnI7Ci0KLQlpZiAoc2hvd191bmhhbmRsZWRfc2lnbmFscyAmJiB1bmhhbmRsZWRfc2lnbmFsKHRzaywgc2lnbnIpICYmCi0JICAgIHByaW50a19yYXRlbGltaXQoKSkgewotCQlwcmludGsoS0VSTl9JTkZPCi0JCSAgICAgICAiJXNbJWRdIHRyYXAgJXMgaXA6JWx4IHNwOiVseCBlcnJvcjolbHgiLAotCQkgICAgICAgdHNrLT5jb21tLCB0c2stPnBpZCwgc3RyLAotCQkgICAgICAgcmVncy0+aXAsIHJlZ3MtPnNwLCBlcnJvcl9jb2RlKTsKLQkJcHJpbnRfdm1hX2FkZHIoIiBpbiAiLCByZWdzLT5pcCk7Ci0JCXByaW50aygiXG4iKTsKLQl9Ci0KLQlpZiAoaW5mbykKLQkJZm9yY2Vfc2lnX2luZm8oc2lnbnIsIGluZm8sIHRzayk7Ci0JZWxzZQotCQlmb3JjZV9zaWcoc2lnbnIsIHRzayk7Ci0JcmV0dXJuOwotCi1rZXJuZWxfdHJhcDoKLQlpZiAoIWZpeHVwX2V4Y2VwdGlvbihyZWdzKSkgewotCQl0c2stPnRocmVhZC5lcnJvcl9jb2RlID0gZXJyb3JfY29kZTsKLQkJdHNrLT50aHJlYWQudHJhcF9ubyA9IHRyYXBucjsKLQkJZGllKHN0ciwgcmVncywgZXJyb3JfY29kZSk7Ci0JfQotCXJldHVybjsKLX0KLQotI2RlZmluZSBET19FUlJPUih0cmFwbnIsIHNpZ25yLCBzdHIsIG5hbWUpIFwKLWFzbWxpbmthZ2Ugdm9pZCBkb18jI25hbWUoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIGxvbmcgZXJyb3JfY29kZSkJXAotewkJCQkJCQkJCVwKLQlpZiAobm90aWZ5X2RpZShESUVfVFJBUCwgc3RyLCByZWdzLCBlcnJvcl9jb2RlLCB0cmFwbnIsIHNpZ25yKQlcCi0JCQkJCQkJPT0gTk9USUZZX1NUT1ApCVwKLQkJcmV0dXJuOwkJCQkJCQlcCi0JY29uZGl0aW9uYWxfc3RpKHJlZ3MpOwkJCQkJCVwKLQlkb190cmFwKHRyYXBuciwgc2lnbnIsIHN0ciwgcmVncywgZXJyb3JfY29kZSwgTlVMTCk7CQlcCi19Ci0KLSNkZWZpbmUgRE9fRVJST1JfSU5GTyh0cmFwbnIsIHNpZ25yLCBzdHIsIG5hbWUsIHNpY29kZSwgc2lhZGRyKQkJXAotYXNtbGlua2FnZSB2b2lkIGRvXyMjbmFtZShzdHJ1Y3QgcHRfcmVncyAqcmVncywgbG9uZyBlcnJvcl9jb2RlKQlcCi17CQkJCQkJCQkJXAotCXNpZ2luZm9fdCBpbmZvOwkJCQkJCQlcCi0JaW5mby5zaV9zaWdubyA9IHNpZ25yOwkJCQkJCVwKLQlpbmZvLnNpX2Vycm5vID0gMDsJCQkJCQlcCi0JaW5mby5zaV9jb2RlID0gc2ljb2RlOwkJCQkJCVwKLQlpbmZvLnNpX2FkZHIgPSAodm9pZCBfX3VzZXIgKilzaWFkZHI7CQkJCVwKLQl0cmFjZV9oYXJkaXJxc19maXh1cCgpOwkJCQkJCVwKLQlpZiAobm90aWZ5X2RpZShESUVfVFJBUCwgc3RyLCByZWdzLCBlcnJvcl9jb2RlLCB0cmFwbnIsIHNpZ25yKQlcCi0JCQkJCQkJPT0gTk9USUZZX1NUT1ApCVwKLQkJcmV0dXJuOwkJCQkJCQlcCi0JY29uZGl0aW9uYWxfc3RpKHJlZ3MpOwkJCQkJCVwKLQlkb190cmFwKHRyYXBuciwgc2lnbnIsIHN0ciwgcmVncywgZXJyb3JfY29kZSwgJmluZm8pOwkJXAotfQotCi1ET19FUlJPUl9JTkZPKDAsIFNJR0ZQRSwgImRpdmlkZSBlcnJvciIsIGRpdmlkZV9lcnJvciwgRlBFX0lOVERJViwgcmVncy0+aXApCi1ET19FUlJPUig0LCBTSUdTRUdWLCAib3ZlcmZsb3ciLCBvdmVyZmxvdykKLURPX0VSUk9SKDUsIFNJR1NFR1YsICJib3VuZHMiLCBib3VuZHMpCi1ET19FUlJPUl9JTkZPKDYsIFNJR0lMTCwgImludmFsaWQgb3Bjb2RlIiwgaW52YWxpZF9vcCwgSUxMX0lMTE9QTiwgcmVncy0+aXApCi1ET19FUlJPUig5LCBTSUdGUEUsICJjb3Byb2Nlc3NvciBzZWdtZW50IG92ZXJydW4iLCBjb3Byb2Nlc3Nvcl9zZWdtZW50X292ZXJydW4pCi1ET19FUlJPUigxMCwgU0lHU0VHViwgImludmFsaWQgVFNTIiwgaW52YWxpZF9UU1MpCi1ET19FUlJPUigxMSwgU0lHQlVTLCAic2VnbWVudCBub3QgcHJlc2VudCIsIHNlZ21lbnRfbm90X3ByZXNlbnQpCi1ET19FUlJPUl9JTkZPKDE3LCBTSUdCVVMsICJhbGlnbm1lbnQgY2hlY2siLCBhbGlnbm1lbnRfY2hlY2ssIEJVU19BRFJBTE4sIDApCi0KLS8qIFJ1bnMgb24gSVNUIHN0YWNrICovCi1hc21saW5rYWdlIHZvaWQgZG9fc3RhY2tfc2VnbWVudChzdHJ1Y3QgcHRfcmVncyAqcmVncywgbG9uZyBlcnJvcl9jb2RlKQotewotCWlmIChub3RpZnlfZGllKERJRV9UUkFQLCAic3RhY2sgc2VnbWVudCIsIHJlZ3MsIGVycm9yX2NvZGUsCi0JCQkxMiwgU0lHQlVTKSA9PSBOT1RJRllfU1RPUCkKLQkJcmV0dXJuOwotCXByZWVtcHRfY29uZGl0aW9uYWxfc3RpKHJlZ3MpOwotCWRvX3RyYXAoMTIsIFNJR0JVUywgInN0YWNrIHNlZ21lbnQiLCByZWdzLCBlcnJvcl9jb2RlLCBOVUxMKTsKLQlwcmVlbXB0X2NvbmRpdGlvbmFsX2NsaShyZWdzKTsKLX0KLQotYXNtbGlua2FnZSB2b2lkIGRvX2RvdWJsZV9mYXVsdChzdHJ1Y3QgcHRfcmVncyAqcmVncywgbG9uZyBlcnJvcl9jb2RlKQotewotCXN0YXRpYyBjb25zdCBjaGFyIHN0cltdID0gImRvdWJsZSBmYXVsdCI7Ci0Jc3RydWN0IHRhc2tfc3RydWN0ICp0c2sgPSBjdXJyZW50OwotCi0JLyogUmV0dXJuIG5vdCBjaGVja2VkIGJlY2F1c2UgZG91YmxlIGNoZWNrIGNhbm5vdCBiZSBpZ25vcmVkICovCi0Jbm90aWZ5X2RpZShESUVfVFJBUCwgc3RyLCByZWdzLCBlcnJvcl9jb2RlLCA4LCBTSUdTRUdWKTsKLQotCXRzay0+dGhyZWFkLmVycm9yX2NvZGUgPSBlcnJvcl9jb2RlOwotCXRzay0+dGhyZWFkLnRyYXBfbm8gPSA4OwotCi0JLyogVGhpcyBpcyBhbHdheXMgYSBrZXJuZWwgdHJhcCBhbmQgbmV2ZXIgZml4YWJsZSAoYW5kIHRodXMgbXVzdAotCSAgIG5ldmVyIHJldHVybikuICovCi0JZm9yICg7OykKLQkJZGllKHN0ciwgcmVncywgZXJyb3JfY29kZSk7Ci19Ci0KLWFzbWxpbmthZ2Ugdm9pZCBfX2twcm9iZXMKLWRvX2dlbmVyYWxfcHJvdGVjdGlvbihzdHJ1Y3QgcHRfcmVncyAqcmVncywgbG9uZyBlcnJvcl9jb2RlKQotewotCXN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrOwotCi0JY29uZGl0aW9uYWxfc3RpKHJlZ3MpOwotCi0JdHNrID0gY3VycmVudDsKLQlpZiAoIXVzZXJfbW9kZShyZWdzKSkKLQkJZ290byBncF9pbl9rZXJuZWw7Ci0KLQl0c2stPnRocmVhZC5lcnJvcl9jb2RlID0gZXJyb3JfY29kZTsKLQl0c2stPnRocmVhZC50cmFwX25vID0gMTM7Ci0KLQlpZiAoc2hvd191bmhhbmRsZWRfc2lnbmFscyAmJiB1bmhhbmRsZWRfc2lnbmFsKHRzaywgU0lHU0VHVikgJiYKLQkJCXByaW50a19yYXRlbGltaXQoKSkgewotCQlwcmludGsoS0VSTl9JTkZPCi0JCQkiJXNbJWRdIGdlbmVyYWwgcHJvdGVjdGlvbiBpcDolbHggc3A6JWx4IGVycm9yOiVseCIsCi0JCQl0c2stPmNvbW0sIHRzay0+cGlkLAotCQkJcmVncy0+aXAsIHJlZ3MtPnNwLCBlcnJvcl9jb2RlKTsKLQkJcHJpbnRfdm1hX2FkZHIoIiBpbiAiLCByZWdzLT5pcCk7Ci0JCXByaW50aygiXG4iKTsKLQl9Ci0KLQlmb3JjZV9zaWcoU0lHU0VHViwgdHNrKTsKLQlyZXR1cm47Ci0KLWdwX2luX2tlcm5lbDoKLQlpZiAoZml4dXBfZXhjZXB0aW9uKHJlZ3MpKQotCQlyZXR1cm47Ci0KLQl0c2stPnRocmVhZC5lcnJvcl9jb2RlID0gZXJyb3JfY29kZTsKLQl0c2stPnRocmVhZC50cmFwX25vID0gMTM7Ci0JaWYgKG5vdGlmeV9kaWUoRElFX0dQRiwgImdlbmVyYWwgcHJvdGVjdGlvbiBmYXVsdCIsIHJlZ3MsCi0JCQkJZXJyb3JfY29kZSwgMTMsIFNJR1NFR1YpID09IE5PVElGWV9TVE9QKQotCQlyZXR1cm47Ci0JZGllKCJnZW5lcmFsIHByb3RlY3Rpb24gZmF1bHQiLCByZWdzLCBlcnJvcl9jb2RlKTsKLX0KLQotc3RhdGljIG5vdHJhY2UgX19rcHJvYmVzIHZvaWQKLW1lbV9wYXJpdHlfZXJyb3IodW5zaWduZWQgY2hhciByZWFzb24sIHN0cnVjdCBwdF9yZWdzICpyZWdzKQotewotCXByaW50ayhLRVJOX0VNRVJHICJVaGh1aC4gTk1JIHJlY2VpdmVkIGZvciB1bmtub3duIHJlYXNvbiAlMDJ4LlxuIiwKLQkJcmVhc29uKTsKLQlwcmludGsoS0VSTl9FTUVSRyAiWW91IGhhdmUgc29tZSBoYXJkd2FyZSBwcm9ibGVtLCBsaWtlbHkgb24gdGhlIFBDSSBidXMuXG4iKTsKLQotI2lmIGRlZmluZWQoQ09ORklHX0VEQUMpCi0JaWYgKGVkYWNfaGFuZGxlcl9zZXQoKSkgewotCQllZGFjX2F0b21pY19hc3NlcnRfZXJyb3IoKTsKLQkJcmV0dXJuOwotCX0KLSNlbmRpZgotCi0JaWYgKHBhbmljX29uX3VucmVjb3ZlcmVkX25taSkKLQkJcGFuaWMoIk5NSTogTm90IGNvbnRpbnVpbmciKTsKLQotCXByaW50ayhLRVJOX0VNRVJHICJEYXplZCBhbmQgY29uZnVzZWQsIGJ1dCB0cnlpbmcgdG8gY29udGludWVcbiIpOwotCi0JLyogQ2xlYXIgYW5kIGRpc2FibGUgdGhlIG1lbW9yeSBwYXJpdHkgZXJyb3IgbGluZS4gKi8KLQlyZWFzb24gPSAocmVhc29uICYgMHhmKSB8IDQ7Ci0Jb3V0YihyZWFzb24sIDB4NjEpOwotfQotCi1zdGF0aWMgbm90cmFjZSBfX2twcm9iZXMgdm9pZAotaW9fY2hlY2tfZXJyb3IodW5zaWduZWQgY2hhciByZWFzb24sIHN0cnVjdCBwdF9yZWdzICpyZWdzKQotewotCXByaW50aygiTk1JOiBJT0NLIGVycm9yIChkZWJ1ZyBpbnRlcnJ1cHQ/KVxuIik7Ci0Jc2hvd19yZWdpc3RlcnMocmVncyk7Ci0KLQkvKiBSZS1lbmFibGUgdGhlIElPQ0sgbGluZSwgd2FpdCBmb3IgYSBmZXcgc2Vjb25kcyAqLwotCXJlYXNvbiA9IChyZWFzb24gJiAweGYpIHwgODsKLQlvdXRiKHJlYXNvbiwgMHg2MSk7Ci0JbWRlbGF5KDIwMDApOwotCXJlYXNvbiAmPSB+ODsKLQlvdXRiKHJlYXNvbiwgMHg2MSk7Ci19Ci0KLXN0YXRpYyBub3RyYWNlIF9fa3Byb2JlcyB2b2lkCi11bmtub3duX25taV9lcnJvcih1bnNpZ25lZCBjaGFyIHJlYXNvbiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCi17Ci0JaWYgKG5vdGlmeV9kaWUoRElFX05NSVVOS05PV04sICJubWkiLCByZWdzLCByZWFzb24sIDIsIFNJR0lOVCkgPT0KLQkJCU5PVElGWV9TVE9QKQotCQlyZXR1cm47Ci0JcHJpbnRrKEtFUk5fRU1FUkcgIlVoaHVoLiBOTUkgcmVjZWl2ZWQgZm9yIHVua25vd24gcmVhc29uICUwMnguXG4iLAotCQlyZWFzb24pOwotCXByaW50ayhLRVJOX0VNRVJHICJEbyB5b3UgaGF2ZSBhIHN0cmFuZ2UgcG93ZXIgc2F2aW5nIG1vZGUgZW5hYmxlZD9cbiIpOwotCi0JaWYgKHBhbmljX29uX3VucmVjb3ZlcmVkX25taSkKLQkJcGFuaWMoIk5NSTogTm90IGNvbnRpbnVpbmciKTsKLQotCXByaW50ayhLRVJOX0VNRVJHICJEYXplZCBhbmQgY29uZnVzZWQsIGJ1dCB0cnlpbmcgdG8gY29udGludWVcbiIpOwotfQotCi0vKiBSdW5zIG9uIElTVCBzdGFjay4gVGhpcyBjb2RlIG11c3Qga2VlcCBpbnRlcnJ1cHRzIG9mZiBhbGwgdGhlIHRpbWUuCi0gICBOZXN0ZWQgTk1JcyBhcmUgcHJldmVudGVkIGJ5IHRoZSBDUFUuICovCi1hc21saW5rYWdlIG5vdHJhY2UgX19rcHJvYmVzIHZvaWQgZGVmYXVsdF9kb19ubWkoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCi17Ci0JdW5zaWduZWQgY2hhciByZWFzb24gPSAwOwotCWludCBjcHU7Ci0KLQljcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7Ci0KLQkvKiBPbmx5IHRoZSBCU1AgZ2V0cyBleHRlcm5hbCBOTUlzIGZyb20gdGhlIHN5c3RlbS4gKi8KLQlpZiAoIWNwdSkKLQkJcmVhc29uID0gZ2V0X25taV9yZWFzb24oKTsKLQotCWlmICghKHJlYXNvbiAmIDB4YzApKSB7Ci0JCWlmIChub3RpZnlfZGllKERJRV9OTUlfSVBJLCAibm1pX2lwaSIsIHJlZ3MsIHJlYXNvbiwgMiwgU0lHSU5UKQotCQkJCQkJCQk9PSBOT1RJRllfU1RPUCkKLQkJCXJldHVybjsKLQkJLyoKLQkJICogT2ssIHNvIHRoaXMgaXMgbm9uZSBvZiB0aGUgZG9jdW1lbnRlZCBOTUkgc291cmNlcywKLQkJICogc28gaXQgbXVzdCBiZSB0aGUgTk1JIHdhdGNoZG9nLgotCQkgKi8KLQkJaWYgKG5taV93YXRjaGRvZ190aWNrKHJlZ3MsIHJlYXNvbikpCi0JCQlyZXR1cm47Ci0JCWlmICghZG9fbm1pX2NhbGxiYWNrKHJlZ3MsIGNwdSkpCi0JCQl1bmtub3duX25taV9lcnJvcihyZWFzb24sIHJlZ3MpOwotCi0JCXJldHVybjsKLQl9Ci0JaWYgKG5vdGlmeV9kaWUoRElFX05NSSwgIm5taSIsIHJlZ3MsIHJlYXNvbiwgMiwgU0lHSU5UKSA9PSBOT1RJRllfU1RPUCkKLQkJcmV0dXJuOwotCi0JLyogQUs6IGZvbGxvd2luZyBjaGVja3Mgc2VlbSB0byBiZSBicm9rZW4gb24gbW9kZXJuIGNoaXBzZXRzLiBGSVhNRSAqLwotCWlmIChyZWFzb24gJiAweDgwKQotCQltZW1fcGFyaXR5X2Vycm9yKHJlYXNvbiwgcmVncyk7Ci0JaWYgKHJlYXNvbiAmIDB4NDApCi0JCWlvX2NoZWNrX2Vycm9yKHJlYXNvbiwgcmVncyk7Ci19Ci0KLWFzbWxpbmthZ2Ugbm90cmFjZSBfX2twcm9iZXMgdm9pZAotZG9fbm1pKHN0cnVjdCBwdF9yZWdzICpyZWdzLCBsb25nIGVycm9yX2NvZGUpCi17Ci0Jbm1pX2VudGVyKCk7Ci0KLQlhZGRfcGRhKF9fbm1pX2NvdW50LCAxKTsKLQotCWlmICghaWdub3JlX25taXMpCi0JCWRlZmF1bHRfZG9fbm1pKHJlZ3MpOwotCi0Jbm1pX2V4aXQoKTsKLX0KLQotdm9pZCBzdG9wX25taSh2b2lkKQotewotCWFjcGlfbm1pX2Rpc2FibGUoKTsKLQlpZ25vcmVfbm1pcysrOwotfQotCi12b2lkIHJlc3RhcnRfbm1pKHZvaWQpCi17Ci0JaWdub3JlX25taXMtLTsKLQlhY3BpX25taV9lbmFibGUoKTsKLX0KLQotLyogcnVucyBvbiBJU1Qgc3RhY2suICovCi1hc21saW5rYWdlIHZvaWQgX19rcHJvYmVzIGRvX2ludDMoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIGxvbmcgZXJyb3JfY29kZSkKLXsKLQl0cmFjZV9oYXJkaXJxc19maXh1cCgpOwotCi0JaWYgKG5vdGlmeV9kaWUoRElFX0lOVDMsICJpbnQzIiwgcmVncywgZXJyb3JfY29kZSwgMywgU0lHVFJBUCkKLQkJCT09IE5PVElGWV9TVE9QKQotCQlyZXR1cm47Ci0KLQlwcmVlbXB0X2NvbmRpdGlvbmFsX3N0aShyZWdzKTsKLQlkb190cmFwKDMsIFNJR1RSQVAsICJpbnQzIiwgcmVncywgZXJyb3JfY29kZSwgTlVMTCk7Ci0JcHJlZW1wdF9jb25kaXRpb25hbF9jbGkocmVncyk7Ci19Ci0KLS8qIEhlbHAgaGFuZGxlciBydW5uaW5nIG9uIElTVCBzdGFjayB0byBzd2l0Y2ggYmFjayB0byB1c2VyIHN0YWNrCi0gICBmb3Igc2NoZWR1bGluZyBvciBzaWduYWwgaGFuZGxpbmcuIFRoZSBhY3R1YWwgc3RhY2sgc3dpdGNoIGlzIGRvbmUgaW4KLSAgIGVudHJ5LlMgKi8KLWFzbWxpbmthZ2UgX19rcHJvYmVzIHN0cnVjdCBwdF9yZWdzICpzeW5jX3JlZ3Moc3RydWN0IHB0X3JlZ3MgKmVyZWdzKQotewotCXN0cnVjdCBwdF9yZWdzICpyZWdzID0gZXJlZ3M7Ci0JLyogRGlkIGFscmVhZHkgc3luYyAqLwotCWlmIChlcmVncyA9PSAoc3RydWN0IHB0X3JlZ3MgKillcmVncy0+c3ApCi0JCTsKLQkvKiBFeGNlcHRpb24gZnJvbSB1c2VyIHNwYWNlICovCi0JZWxzZSBpZiAodXNlcl9tb2RlKGVyZWdzKSkKLQkJcmVncyA9IHRhc2tfcHRfcmVncyhjdXJyZW50KTsKLQkvKiBFeGNlcHRpb24gZnJvbSBrZXJuZWwgYW5kIGludGVycnVwdHMgYXJlIGVuYWJsZWQuIE1vdmUgdG8KLQkgICBrZXJuZWwgcHJvY2VzcyBzdGFjay4gKi8KLQllbHNlIGlmIChlcmVncy0+ZmxhZ3MgJiBYODZfRUZMQUdTX0lGKQotCQlyZWdzID0gKHN0cnVjdCBwdF9yZWdzICopKGVyZWdzLT5zcCAtPSBzaXplb2Yoc3RydWN0IHB0X3JlZ3MpKTsKLQlpZiAoZXJlZ3MgIT0gcmVncykKLQkJKnJlZ3MgPSAqZXJlZ3M7Ci0JcmV0dXJuIHJlZ3M7Ci19Ci0KLS8qIHJ1bnMgb24gSVNUIHN0YWNrLiAqLwotYXNtbGlua2FnZSB2b2lkIF9fa3Byb2JlcyBkb19kZWJ1ZyhzdHJ1Y3QgcHRfcmVncyAqcmVncywKLQkJCQkgICB1bnNpZ25lZCBsb25nIGVycm9yX2NvZGUpCi17Ci0Jc3RydWN0IHRhc2tfc3RydWN0ICp0c2sgPSBjdXJyZW50OwotCXVuc2lnbmVkIGxvbmcgY29uZGl0aW9uOwotCXNpZ2luZm9fdCBpbmZvOwotCi0JdHJhY2VfaGFyZGlycXNfZml4dXAoKTsKLQotCWdldF9kZWJ1Z3JlZyhjb25kaXRpb24sIDYpOwotCi0JLyoKLQkgKiBUaGUgcHJvY2Vzc29yIGNsZWFyZWQgQlRGLCBzbyBkb24ndCBtYXJrIHRoYXQgd2UgbmVlZCBpdCBzZXQuCi0JICovCi0JY2xlYXJfdHNrX3RocmVhZF9mbGFnKHRzaywgVElGX0RFQlVHQ1RMTVNSKTsKLQl0c2stPnRocmVhZC5kZWJ1Z2N0bG1zciA9IDA7Ci0KLQlpZiAobm90aWZ5X2RpZShESUVfREVCVUcsICJkZWJ1ZyIsIHJlZ3MsIGNvbmRpdGlvbiwgZXJyb3JfY29kZSwKLQkJCQkJCVNJR1RSQVApID09IE5PVElGWV9TVE9QKQotCQlyZXR1cm47Ci0KLQlwcmVlbXB0X2NvbmRpdGlvbmFsX3N0aShyZWdzKTsKLQotCS8qIE1hc2sgb3V0IHNwdXJpb3VzIGRlYnVnIHRyYXBzIGR1ZSB0byBsYXp5IERSNyBzZXR0aW5nICovCi0JaWYgKGNvbmRpdGlvbiAmIChEUl9UUkFQMHxEUl9UUkFQMXxEUl9UUkFQMnxEUl9UUkFQMykpIHsKLQkJaWYgKCF0c2stPnRocmVhZC5kZWJ1Z3JlZzcpCi0JCQlnb3RvIGNsZWFyX2RyNzsKLQl9Ci0KLQl0c2stPnRocmVhZC5kZWJ1Z3JlZzYgPSBjb25kaXRpb247Ci0KLQkvKgotCSAqIFNpbmdsZS1zdGVwcGluZyB0aHJvdWdoIFRGOiBtYWtlIHN1cmUgd2UgaWdub3JlIGFueSBldmVudHMgaW4KLQkgKiBrZXJuZWwgc3BhY2UgKGJ1dCByZS1lbmFibGUgVEYgd2hlbiByZXR1cm5pbmcgdG8gdXNlciBtb2RlKS4KLQkgKi8KLQlpZiAoY29uZGl0aW9uICYgRFJfU1RFUCkgewotCQlpZiAoIXVzZXJfbW9kZShyZWdzKSkKLQkJCWdvdG8gY2xlYXJfVEZfcmVlbmFibGU7Ci0JfQotCi0JLyogT2ssIGZpbmFsbHkgc29tZXRoaW5nIHdlIGNhbiBoYW5kbGUgKi8KLQl0c2stPnRocmVhZC50cmFwX25vID0gMTsKLQl0c2stPnRocmVhZC5lcnJvcl9jb2RlID0gZXJyb3JfY29kZTsKLQlpbmZvLnNpX3NpZ25vID0gU0lHVFJBUDsKLQlpbmZvLnNpX2Vycm5vID0gMDsKLQlpbmZvLnNpX2NvZGUgPSBnZXRfc2lfY29kZShjb25kaXRpb24pOwotCWluZm8uc2lfYWRkciA9IHVzZXJfbW9kZShyZWdzKSA/ICh2b2lkIF9fdXNlciAqKXJlZ3MtPmlwIDogTlVMTDsKLQlmb3JjZV9zaWdfaW5mbyhTSUdUUkFQLCAmaW5mbywgdHNrKTsKLQotY2xlYXJfZHI3OgotCXNldF9kZWJ1Z3JlZygwLCA3KTsKLQlwcmVlbXB0X2NvbmRpdGlvbmFsX2NsaShyZWdzKTsKLQlyZXR1cm47Ci0KLWNsZWFyX1RGX3JlZW5hYmxlOgotCXNldF90c2tfdGhyZWFkX2ZsYWcodHNrLCBUSUZfU0lOR0xFU1RFUCk7Ci0JcmVncy0+ZmxhZ3MgJj0gflg4Nl9FRkxBR1NfVEY7Ci0JcHJlZW1wdF9jb25kaXRpb25hbF9jbGkocmVncyk7Ci0JcmV0dXJuOwotfQotCi1zdGF0aWMgaW50IGtlcm5lbF9tYXRoX2Vycm9yKHN0cnVjdCBwdF9yZWdzICpyZWdzLCBjb25zdCBjaGFyICpzdHIsIGludCB0cmFwbnIpCi17Ci0JaWYgKGZpeHVwX2V4Y2VwdGlvbihyZWdzKSkKLQkJcmV0dXJuIDE7Ci0KLQlub3RpZnlfZGllKERJRV9HUEYsIHN0ciwgcmVncywgMCwgdHJhcG5yLCBTSUdGUEUpOwotCS8qIElsbGVnYWwgZmxvYXRpbmcgcG9pbnQgb3BlcmF0aW9uIGluIHRoZSBrZXJuZWwgKi8KLQljdXJyZW50LT50aHJlYWQudHJhcF9ubyA9IHRyYXBucjsKLQlkaWUoc3RyLCByZWdzLCAwKTsKLQlyZXR1cm4gMDsKLX0KLQotLyoKLSAqIE5vdGUgdGhhdCB3ZSBwbGF5IGFyb3VuZCB3aXRoIHRoZSAnVFMnIGJpdCBpbiBhbiBhdHRlbXB0IHRvIGdldAotICogdGhlIGNvcnJlY3QgYmVoYXZpb3VyIGV2ZW4gaW4gdGhlIHByZXNlbmNlIG9mIHRoZSBhc3luY2hyb25vdXMKLSAqIElSUTEzIGJlaGF2aW91cgotICovCi1hc21saW5rYWdlIHZvaWQgZG9fY29wcm9jZXNzb3JfZXJyb3Ioc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCi17Ci0Jdm9pZCBfX3VzZXIgKmlwID0gKHZvaWQgX191c2VyICopKHJlZ3MtPmlwKTsKLQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2s7Ci0Jc2lnaW5mb190IGluZm87Ci0JdW5zaWduZWQgc2hvcnQgY3dkLCBzd2Q7Ci0KLQljb25kaXRpb25hbF9zdGkocmVncyk7Ci0JaWYgKCF1c2VyX21vZGUocmVncykgJiYKLQkgICAga2VybmVsX21hdGhfZXJyb3IocmVncywgImtlcm5lbCB4ODcgbWF0aCBlcnJvciIsIDE2KSkKLQkJcmV0dXJuOwotCi0JLyoKLQkgKiBTYXZlIHRoZSBpbmZvIGZvciB0aGUgZXhjZXB0aW9uIGhhbmRsZXIgYW5kIGNsZWFyIHRoZSBlcnJvci4KLQkgKi8KLQl0YXNrID0gY3VycmVudDsKLQlzYXZlX2luaXRfZnB1KHRhc2spOwotCXRhc2stPnRocmVhZC50cmFwX25vID0gMTY7Ci0JdGFzay0+dGhyZWFkLmVycm9yX2NvZGUgPSAwOwotCWluZm8uc2lfc2lnbm8gPSBTSUdGUEU7Ci0JaW5mby5zaV9lcnJubyA9IDA7Ci0JaW5mby5zaV9jb2RlID0gX19TSV9GQVVMVDsKLQlpbmZvLnNpX2FkZHIgPSBpcDsKLQkvKgotCSAqICh+Y3dkICYgc3dkKSB3aWxsIG1hc2sgb3V0IGV4Y2VwdGlvbnMgdGhhdCBhcmUgbm90IHNldCB0byB1bm1hc2tlZAotCSAqIHN0YXR1cy4gIDB4M2YgaXMgdGhlIGV4Y2VwdGlvbiBiaXRzIGluIHRoZXNlIHJlZ3MsIDB4MjAwIGlzIHRoZQotCSAqIEMxIHJlZyB5b3UgbmVlZCBpbiBjYXNlIG9mIGEgc3RhY2sgZmF1bHQsIDB4MDQwIGlzIHRoZSBzdGFjawotCSAqIGZhdWx0IGJpdC4gIFdlIHNob3VsZCBvbmx5IGJlIHRha2luZyBvbmUgZXhjZXB0aW9uIGF0IGEgdGltZSwKLQkgKiBzbyBpZiB0aGlzIGNvbWJpbmF0aW9uIGRvZXNuJ3QgcHJvZHVjZSBhbnkgc2luZ2xlIGV4Y2VwdGlvbiwKLQkgKiB0aGVuIHdlIGhhdmUgYSBiYWQgcHJvZ3JhbSB0aGF0IGlzbid0IHN5bmNocm9uaXppbmcgaXRzIEZQVSB1c2FnZQotCSAqIGFuZCBpdCB3aWxsIHN1ZmZlciB0aGUgY29uc2VxdWVuY2VzIHNpbmNlIHdlIHdvbid0IGJlIGFibGUgdG8KLQkgKiBmdWxseSByZXByb2R1Y2UgdGhlIGNvbnRleHQgb2YgdGhlIGV4Y2VwdGlvbgotCSAqLwotCWN3ZCA9IGdldF9mcHVfY3dkKHRhc2spOwotCXN3ZCA9IGdldF9mcHVfc3dkKHRhc2spOwotCXN3aXRjaCAoc3dkICYgfmN3ZCAmIDB4M2YpIHsKLQljYXNlIDB4MDAwOiAvKiBObyB1bm1hc2tlZCBleGNlcHRpb24gKi8KLQlkZWZhdWx0OiAvKiBNdWx0aXBsZSBleGNlcHRpb25zICovCi0JCWJyZWFrOwotCWNhc2UgMHgwMDE6IC8qIEludmFsaWQgT3AgKi8KLQkJLyoKLQkJICogc3dkICYgMHgyNDAgPT0gMHgwNDA6IFN0YWNrIFVuZGVyZmxvdwotCQkgKiBzd2QgJiAweDI0MCA9PSAweDI0MDogU3RhY2sgT3ZlcmZsb3cKLQkJICogVXNlciBtdXN0IGNsZWFyIHRoZSBTRiBiaXQgKDB4NDApIGlmIHNldAotCQkgKi8KLQkJaW5mby5zaV9jb2RlID0gRlBFX0ZMVElOVjsKLQkJYnJlYWs7Ci0JY2FzZSAweDAwMjogLyogRGVub3JtYWxpemUgKi8KLQljYXNlIDB4MDEwOiAvKiBVbmRlcmZsb3cgKi8KLQkJaW5mby5zaV9jb2RlID0gRlBFX0ZMVFVORDsKLQkJYnJlYWs7Ci0JY2FzZSAweDAwNDogLyogWmVybyBEaXZpZGUgKi8KLQkJaW5mby5zaV9jb2RlID0gRlBFX0ZMVERJVjsKLQkJYnJlYWs7Ci0JY2FzZSAweDAwODogLyogT3ZlcmZsb3cgKi8KLQkJaW5mby5zaV9jb2RlID0gRlBFX0ZMVE9WRjsKLQkJYnJlYWs7Ci0JY2FzZSAweDAyMDogLyogUHJlY2lzaW9uICovCi0JCWluZm8uc2lfY29kZSA9IEZQRV9GTFRSRVM7Ci0JCWJyZWFrOwotCX0KLQlmb3JjZV9zaWdfaW5mbyhTSUdGUEUsICZpbmZvLCB0YXNrKTsKLX0KLQotYXNtbGlua2FnZSB2b2lkIGJhZF9pbnRyKHZvaWQpCi17Ci0JcHJpbnRrKCJiYWQgaW50ZXJydXB0Iik7Ci19Ci0KLWFzbWxpbmthZ2Ugdm9pZCBkb19zaW1kX2NvcHJvY2Vzc29yX2Vycm9yKHN0cnVjdCBwdF9yZWdzICpyZWdzKQotewotCXZvaWQgX191c2VyICppcCA9ICh2b2lkIF9fdXNlciAqKShyZWdzLT5pcCk7Ci0Jc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrOwotCXNpZ2luZm9fdCBpbmZvOwotCXVuc2lnbmVkIHNob3J0IG14Y3NyOwotCi0JY29uZGl0aW9uYWxfc3RpKHJlZ3MpOwotCWlmICghdXNlcl9tb2RlKHJlZ3MpICYmCi0JCQlrZXJuZWxfbWF0aF9lcnJvcihyZWdzLCAia2VybmVsIHNpbWQgbWF0aCBlcnJvciIsIDE5KSkKLQkJcmV0dXJuOwotCi0JLyoKLQkgKiBTYXZlIHRoZSBpbmZvIGZvciB0aGUgZXhjZXB0aW9uIGhhbmRsZXIgYW5kIGNsZWFyIHRoZSBlcnJvci4KLQkgKi8KLQl0YXNrID0gY3VycmVudDsKLQlzYXZlX2luaXRfZnB1KHRhc2spOwotCXRhc2stPnRocmVhZC50cmFwX25vID0gMTk7Ci0JdGFzay0+dGhyZWFkLmVycm9yX2NvZGUgPSAwOwotCWluZm8uc2lfc2lnbm8gPSBTSUdGUEU7Ci0JaW5mby5zaV9lcnJubyA9IDA7Ci0JaW5mby5zaV9jb2RlID0gX19TSV9GQVVMVDsKLQlpbmZvLnNpX2FkZHIgPSBpcDsKLQkvKgotCSAqIFRoZSBTSU1EIEZQVSBleGNlcHRpb25zIGFyZSBoYW5kbGVkIGEgbGl0dGxlIGRpZmZlcmVudGx5LCBhcyB0aGVyZQotCSAqIGlzIG9ubHkgYSBzaW5nbGUgc3RhdHVzL2NvbnRyb2wgcmVnaXN0ZXIuICBUaHVzLCB0byBkZXRlcm1pbmUgd2hpY2gKLQkgKiB1bm1hc2tlZCBleGNlcHRpb24gd2FzIGNhdWdodCB3ZSBtdXN0IG1hc2sgdGhlIGV4Y2VwdGlvbiBtYXNrIGJpdHMKLQkgKiBhdCAweDFmODAsIGFuZCB0aGVuIHVzZSB0aGVzZSB0byBtYXNrIHRoZSBleGNlcHRpb24gYml0cyBhdCAweDNmLgotCSAqLwotCW14Y3NyID0gZ2V0X2ZwdV9teGNzcih0YXNrKTsKLQlzd2l0Y2ggKH4oKG14Y3NyICYgMHgxZjgwKSA+PiA3KSAmIChteGNzciAmIDB4M2YpKSB7Ci0JY2FzZSAweDAwMDoKLQlkZWZhdWx0OgotCQlicmVhazsKLQljYXNlIDB4MDAxOiAvKiBJbnZhbGlkIE9wICovCi0JCWluZm8uc2lfY29kZSA9IEZQRV9GTFRJTlY7Ci0JCWJyZWFrOwotCWNhc2UgMHgwMDI6IC8qIERlbm9ybWFsaXplICovCi0JY2FzZSAweDAxMDogLyogVW5kZXJmbG93ICovCi0JCWluZm8uc2lfY29kZSA9IEZQRV9GTFRVTkQ7Ci0JCWJyZWFrOwotCWNhc2UgMHgwMDQ6IC8qIFplcm8gRGl2aWRlICovCi0JCWluZm8uc2lfY29kZSA9IEZQRV9GTFRESVY7Ci0JCWJyZWFrOwotCWNhc2UgMHgwMDg6IC8qIE92ZXJmbG93ICovCi0JCWluZm8uc2lfY29kZSA9IEZQRV9GTFRPVkY7Ci0JCWJyZWFrOwotCWNhc2UgMHgwMjA6IC8qIFByZWNpc2lvbiAqLwotCQlpbmZvLnNpX2NvZGUgPSBGUEVfRkxUUkVTOwotCQlicmVhazsKLQl9Ci0JZm9yY2Vfc2lnX2luZm8oU0lHRlBFLCAmaW5mbywgdGFzayk7Ci19Ci0KLWFzbWxpbmthZ2Ugdm9pZCBkb19zcHVyaW91c19pbnRlcnJ1cHRfYnVnKHN0cnVjdCBwdF9yZWdzICpyZWdzKQotewotfQotCi1hc21saW5rYWdlIHZvaWQgX19hdHRyaWJ1dGVfXygod2VhaykpIHNtcF90aGVybWFsX2ludGVycnVwdCh2b2lkKQotewotfQotCi1hc21saW5rYWdlIHZvaWQgX19hdHRyaWJ1dGVfXygod2VhaykpIG1jZV90aHJlc2hvbGRfaW50ZXJydXB0KHZvaWQpCi17Ci19Ci0KLS8qCi0gKiAnbWF0aF9zdGF0ZV9yZXN0b3JlKCknIHNhdmVzIHRoZSBjdXJyZW50IG1hdGggaW5mb3JtYXRpb24gaW4gdGhlCi0gKiBvbGQgbWF0aCBzdGF0ZSBhcnJheSwgYW5kIGdldHMgdGhlIG5ldyBvbmVzIGZyb20gdGhlIGN1cnJlbnQgdGFzawotICoKLSAqIENhcmVmdWwuLiBUaGVyZSBhcmUgcHJvYmxlbXMgd2l0aCBJQk0tZGVzaWduZWQgSVJRMTMgYmVoYXZpb3VyLgotICogRG9uJ3QgdG91Y2ggdW5sZXNzIHlvdSAqcmVhbGx5KiBrbm93IGhvdyBpdCB3b3Jrcy4KLSAqLwotYXNtbGlua2FnZSB2b2lkIG1hdGhfc3RhdGVfcmVzdG9yZSh2b2lkKQotewotCXN0cnVjdCB0YXNrX3N0cnVjdCAqbWUgPSBjdXJyZW50OwotCi0JaWYgKCF1c2VkX21hdGgoKSkgewotCQlsb2NhbF9pcnFfZW5hYmxlKCk7Ci0JCS8qCi0JCSAqIGRvZXMgYSBzbGFiIGFsbG9jIHdoaWNoIGNhbiBzbGVlcAotCQkgKi8KLQkJaWYgKGluaXRfZnB1KG1lKSkgewotCQkJLyoKLQkJCSAqIHJhbiBvdXQgb2YgbWVtb3J5IQotCQkJICovCi0JCQlkb19ncm91cF9leGl0KFNJR0tJTEwpOwotCQkJcmV0dXJuOwotCQl9Ci0JCWxvY2FsX2lycV9kaXNhYmxlKCk7Ci0JfQotCi0JY2x0cygpOwkJCQkvKiBBbGxvdyBtYXRocyBvcHMgKG9yIHdlIHJlY3Vyc2UpICovCi0JLyoKLQkgKiBQYXJhbm9pZCByZXN0b3JlLiBzZW5kIGEgU0lHU0VHViBpZiB3ZSBmYWlsIHRvIHJlc3RvcmUgdGhlIHN0YXRlLgotCSAqLwotCWlmICh1bmxpa2VseShyZXN0b3JlX2ZwdV9jaGVja2luZyhtZSkpKSB7Ci0JCXN0dHMoKTsKLQkJZm9yY2Vfc2lnKFNJR1NFR1YsIG1lKTsKLQkJcmV0dXJuOwotCX0KLQl0YXNrX3RocmVhZF9pbmZvKG1lKS0+c3RhdHVzIHw9IFRTX1VTRURGUFU7Ci0JbWUtPmZwdV9jb3VudGVyKys7Ci19Ci1FWFBPUlRfU1lNQk9MX0dQTChtYXRoX3N0YXRlX3Jlc3RvcmUpOwotCi12b2lkIF9faW5pdCB0cmFwX2luaXQodm9pZCkKLXsKLQlzZXRfaW50cl9nYXRlKDAsICZkaXZpZGVfZXJyb3IpOwotCXNldF9pbnRyX2dhdGVfaXN0KDEsICZkZWJ1ZywgREVCVUdfU1RBQ0spOwotCXNldF9pbnRyX2dhdGVfaXN0KDIsICZubWksIE5NSV9TVEFDSyk7Ci0JLyogaW50MyBjYW4gYmUgY2FsbGVkIGZyb20gYWxsICovCi0Jc2V0X3N5c3RlbV9nYXRlX2lzdCgzLCAmaW50MywgREVCVUdfU1RBQ0spOwotCS8qIGludDQgY2FuIGJlIGNhbGxlZCBmcm9tIGFsbCAqLwotCXNldF9zeXN0ZW1fZ2F0ZSg0LCAmb3ZlcmZsb3cpOwotCXNldF9pbnRyX2dhdGUoNSwgJmJvdW5kcyk7Ci0Jc2V0X2ludHJfZ2F0ZSg2LCAmaW52YWxpZF9vcCk7Ci0Jc2V0X2ludHJfZ2F0ZSg3LCAmZGV2aWNlX25vdF9hdmFpbGFibGUpOwotCXNldF9pbnRyX2dhdGVfaXN0KDgsICZkb3VibGVfZmF1bHQsIERPVUJMRUZBVUxUX1NUQUNLKTsKLQlzZXRfaW50cl9nYXRlKDksICZjb3Byb2Nlc3Nvcl9zZWdtZW50X292ZXJydW4pOwotCXNldF9pbnRyX2dhdGUoMTAsICZpbnZhbGlkX1RTUyk7Ci0Jc2V0X2ludHJfZ2F0ZSgxMSwgJnNlZ21lbnRfbm90X3ByZXNlbnQpOwotCXNldF9pbnRyX2dhdGVfaXN0KDEyLCAmc3RhY2tfc2VnbWVudCwgU1RBQ0tGQVVMVF9TVEFDSyk7Ci0Jc2V0X2ludHJfZ2F0ZSgxMywgJmdlbmVyYWxfcHJvdGVjdGlvbik7Ci0Jc2V0X2ludHJfZ2F0ZSgxNCwgJnBhZ2VfZmF1bHQpOwotCXNldF9pbnRyX2dhdGUoMTUsICZzcHVyaW91c19pbnRlcnJ1cHRfYnVnKTsKLQlzZXRfaW50cl9nYXRlKDE2LCAmY29wcm9jZXNzb3JfZXJyb3IpOwotCXNldF9pbnRyX2dhdGUoMTcsICZhbGlnbm1lbnRfY2hlY2spOwotI2lmZGVmIENPTkZJR19YODZfTUNFCi0Jc2V0X2ludHJfZ2F0ZV9pc3QoMTgsICZtYWNoaW5lX2NoZWNrLCBNQ0VfU1RBQ0spOwotI2VuZGlmCi0Jc2V0X2ludHJfZ2F0ZSgxOSwgJnNpbWRfY29wcm9jZXNzb3JfZXJyb3IpOwotCi0jaWZkZWYgQ09ORklHX0lBMzJfRU1VTEFUSU9OCi0Jc2V0X3N5c3RlbV9nYXRlKElBMzJfU1lTQ0FMTF9WRUNUT1IsIGlhMzJfc3lzY2FsbCk7Ci0jZW5kaWYKLQkvKgotCSAqIFNob3VsZCBiZSBhIGJhcnJpZXIgZm9yIGFueSBleHRlcm5hbCBDUFUgc3RhdGU6Ci0JICovCi0JY3B1X2luaXQoKTsKLX0KLQotc3RhdGljIGludCBfX2luaXQgb29wc19zZXR1cChjaGFyICpzKQotewotCWlmICghcykKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JaWYgKCFzdHJjbXAocywgInBhbmljIikpCi0JCXBhbmljX29uX29vcHMgPSAxOwotCXJldHVybiAwOwotfQotZWFybHlfcGFyYW0oIm9vcHMiLCBvb3BzX3NldHVwKTsKLQotc3RhdGljIGludCBfX2luaXQga3N0YWNrX3NldHVwKGNoYXIgKnMpCi17Ci0JaWYgKCFzKQotCQlyZXR1cm4gLUVJTlZBTDsKLQlrc3RhY2tfZGVwdGhfdG9fcHJpbnQgPSBzaW1wbGVfc3RydG91bChzLCBOVUxMLCAwKTsKLQlyZXR1cm4gMDsKLX0KLWVhcmx5X3BhcmFtKCJrc3RhY2siLCBrc3RhY2tfc2V0dXApOwotCi1zdGF0aWMgaW50IF9faW5pdCBjb2RlX2J5dGVzX3NldHVwKGNoYXIgKnMpCi17Ci0JY29kZV9ieXRlcyA9IHNpbXBsZV9zdHJ0b3VsKHMsIE5VTEwsIDApOwotCWlmIChjb2RlX2J5dGVzID4gODE5MikKLQkJY29kZV9ieXRlcyA9IDgxOTI7Ci0KLQlyZXR1cm4gMTsKLX0KLV9fc2V0dXAoImNvZGVfYnl0ZXM9IiwgY29kZV9ieXRlc19zZXR1cCk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvdXZfaXJxLmMgYi9hcmNoL3g4Ni9rZXJuZWwvdXZfaXJxLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWVlZjUyOQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveDg2L2tlcm5lbC91dl9pcnEuYwpAQCAtMCwwICsxLDc5IEBACisvKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogU0dJIFVWIElSUSBmdW5jdGlvbnMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggU2lsaWNvbiBHcmFwaGljcywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pcnEuaD4KKworI2luY2x1ZGUgPGFzbS9hcGljLmg+CisjaW5jbHVkZSA8YXNtL3V2L3V2X2lycS5oPgorCitzdGF0aWMgdm9pZCB1dl9ub29wKHVuc2lnbmVkIGludCBpcnEpCit7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgdXZfbm9vcF9yZXQodW5zaWduZWQgaW50IGlycSkKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgdXZfYWNrX2FwaWModW5zaWduZWQgaW50IGlycSkKK3sKKwlhY2tfQVBJQ19pcnEoKTsKK30KKworc3RydWN0IGlycV9jaGlwIHV2X2lycV9jaGlwID0geworCS5uYW1lCQk9ICJVVi1DT1JFIiwKKwkuc3RhcnR1cAk9IHV2X25vb3BfcmV0LAorCS5zaHV0ZG93bgk9IHV2X25vb3AsCisJLmVuYWJsZQkJPSB1dl9ub29wLAorCS5kaXNhYmxlCT0gdXZfbm9vcCwKKwkuYWNrCQk9IHV2X25vb3AsCisJLm1hc2sJCT0gdXZfbm9vcCwKKwkudW5tYXNrCQk9IHV2X25vb3AsCisJLmVvaQkJPSB1dl9hY2tfYXBpYywKKwkuZW5kCQk9IHV2X25vb3AsCit9OworCisvKgorICogU2V0IHVwIGEgbWFwcGluZyBvZiBhbiBhdmFpbGFibGUgaXJxIGFuZCB2ZWN0b3IsIGFuZCBlbmFibGUgdGhlIHNwZWNpZmllZAorICogTU1SIHRoYXQgZGVmaW5lcyB0aGUgTVNJIHRoYXQgaXMgdG8gYmUgc2VudCB0byB0aGUgc3BlY2lmaWVkIENQVSB3aGVuIGFuCisgKiBpbnRlcnJ1cHQgaXMgcmFpc2VkLgorICovCitpbnQgdXZfc2V0dXBfaXJxKGNoYXIgKmlycV9uYW1lLCBpbnQgY3B1LCBpbnQgbW1yX2JsYWRlLAorCQkgdW5zaWduZWQgbG9uZyBtbXJfb2Zmc2V0KQoreworCWludCBpcnE7CisJaW50IHJldDsKKworCWlycSA9IGNyZWF0ZV9pcnEoKTsKKwlpZiAoaXJxIDw9IDApCisJCXJldHVybiAtRUJVU1k7CisKKwlyZXQgPSBhcmNoX2VuYWJsZV91dl9pcnEoaXJxX25hbWUsIGlycSwgY3B1LCBtbXJfYmxhZGUsIG1tcl9vZmZzZXQpOworCWlmIChyZXQgIT0gaXJxKQorCQlkZXN0cm95X2lycShpcnEpOworCisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHV2X3NldHVwX2lycSk7CisKKy8qCisgKiBUZWFyIGRvd24gYSBtYXBwaW5nIG9mIGFuIGlycSBhbmQgdmVjdG9yLCBhbmQgZGlzYWJsZSB0aGUgc3BlY2lmaWVkIE1NUiB0aGF0CisgKiBkZWZpbmVkIHRoZSBNU0kgdGhhdCB3YXMgdG8gYmUgc2VudCB0byB0aGUgc3BlY2lmaWVkIENQVSB3aGVuIGFuIGludGVycnVwdAorICogd2FzIHJhaXNlZC4KKyAqCisgKiBTZXQgbW1yX2JsYWRlIGFuZCBtbXJfb2Zmc2V0IHRvIHdoYXQgd2FzIHBhc3NlZCBpbiBvbiB1dl9zZXR1cF9pcnEoKS4KKyAqLwordm9pZCB1dl90ZWFyZG93bl9pcnEodW5zaWduZWQgaW50IGlycSwgaW50IG1tcl9ibGFkZSwgdW5zaWduZWQgbG9uZyBtbXJfb2Zmc2V0KQoreworCWFyY2hfZGlzYWJsZV91dl9pcnEobW1yX2JsYWRlLCBtbXJfb2Zmc2V0KTsKKwlkZXN0cm95X2lycShpcnEpOworfQorRVhQT1JUX1NZTUJPTF9HUEwodXZfdGVhcmRvd25faXJxKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC91dl9zeXNmcy5jIGIvYXJjaC94ODYva2VybmVsL3V2X3N5c2ZzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjdmOWI5ZAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveDg2L2tlcm5lbC91dl9zeXNmcy5jCkBAIC0wLDAgKzEsNzIgQEAKKy8qCisgKiBUaGlzIGZpbGUgc3VwcG9ydHMgdGhlIC9zeXMvZmlybXdhcmUvc2dpX3V2IGludGVyZmFjZXMgZm9yIFNHSSBVVi4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3IFVTQQorICoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMDggU2lsaWNvbiBHcmFwaGljcywgSW5jLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKGMpIFJ1c3MgQW5kZXJzb24KKyAqLworCisjaW5jbHVkZSA8bGludXgvc3lzZGV2Lmg+CisjaW5jbHVkZSA8YXNtL3V2L2Jpb3MuaD4KKworc3RydWN0IGtvYmplY3QgKnNnaV91dl9rb2JqOworCitzdGF0aWMgc3NpemVfdCBwYXJ0aXRpb25faWRfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaiwKKwkJCXN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiVsZFxuIiwgc25fcGFydGl0aW9uX2lkKTsKK30KKworc3RhdGljIHNzaXplX3QgY29oZXJlbmNlX2lkX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosCisJCQlzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIlbGRcbiIsIHBhcnRpdGlvbl9jb2hlcmVuY2VfaWQoKSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgcGFydGl0aW9uX2lkX2F0dHIgPQorCV9fQVRUUihwYXJ0aXRpb25faWQsIFNfSVJVR08sIHBhcnRpdGlvbl9pZF9zaG93LCBOVUxMKTsKKworc3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBjb2hlcmVuY2VfaWRfYXR0ciA9CisJX19BVFRSKGNvaGVyZW5jZV9pZCwgU19JUlVHTywgY29oZXJlbmNlX2lkX3Nob3csIE5VTEwpOworCisKK3N0YXRpYyBpbnQgX19pbml0IHNnaV91dl9zeXNmc19pbml0KHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyByZXQ7CisKKwlpZiAoIXNnaV91dl9rb2JqKQorCQlzZ2lfdXZfa29iaiA9IGtvYmplY3RfY3JlYXRlX2FuZF9hZGQoInNnaV91diIsIGZpcm13YXJlX2tvYmopOworCWlmICghc2dpX3V2X2tvYmopIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAia29iamVjdF9jcmVhdGVfYW5kX2FkZCBzZ2lfdXYgZmFpbGVkIFxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldCA9IHN5c2ZzX2NyZWF0ZV9maWxlKHNnaV91dl9rb2JqLCAmcGFydGl0aW9uX2lkX2F0dHIuYXR0cik7CisJaWYgKHJldCkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICJzeXNmc19jcmVhdGVfZmlsZSBwYXJ0aXRpb25faWQgZmFpbGVkIFxuIik7CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0ID0gc3lzZnNfY3JlYXRlX2ZpbGUoc2dpX3V2X2tvYmosICZjb2hlcmVuY2VfaWRfYXR0ci5hdHRyKTsKKwlpZiAocmV0KSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgInN5c2ZzX2NyZWF0ZV9maWxlIGNvaGVyZW5jZV9pZCBmYWlsZWQgXG4iKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworZGV2aWNlX2luaXRjYWxsKHNnaV91dl9zeXNmc19pbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC92aXN3c19xdWlya3MuYyBiL2FyY2gveDg2L2tlcm5lbC92aXN3c19xdWlya3MuYwppbmRleCA2MWE5N2U2Li4wYzk2NjdmIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvdmlzd3NfcXVpcmtzLmMKKysrIGIvYXJjaC94ODYva2VybmVsL3Zpc3dzX3F1aXJrcy5jCkBAIC00ODQsMTAgKzQ4NCwxMSBAQAogc3RhdGljIHVuc2lnbmVkIGludCBzdGFydHVwX2NvYmFsdF9pcnEodW5zaWduZWQgaW50IGlycSkKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCBpcnFfZGVzYyAqZGVzYyA9IGlycV90b19kZXNjKGlycSk7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmY29iYWx0X2xvY2ssIGZsYWdzKTsKLQlpZiAoKGlycV9kZXNjW2lycV0uc3RhdHVzICYgKElSUV9ESVNBQkxFRCB8IElSUV9JTlBST0dSRVNTIHwgSVJRX1dBSVRJTkcpKSkKLQkJaXJxX2Rlc2NbaXJxXS5zdGF0dXMgJj0gfihJUlFfRElTQUJMRUQgfCBJUlFfSU5QUk9HUkVTUyB8IElSUV9XQUlUSU5HKTsKKwlpZiAoKGRlc2MtPnN0YXR1cyAmIChJUlFfRElTQUJMRUQgfCBJUlFfSU5QUk9HUkVTUyB8IElSUV9XQUlUSU5HKSkpCisJCWRlc2MtPnN0YXR1cyAmPSB+KElSUV9ESVNBQkxFRCB8IElSUV9JTlBST0dSRVNTIHwgSVJRX1dBSVRJTkcpOwogCWVuYWJsZV9jb2JhbHRfaXJxKGlycSk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY29iYWx0X2xvY2ssIGZsYWdzKTsKIAlyZXR1cm4gMDsKQEAgLTUwNiw5ICs1MDcsMTAgQEAKIHN0YXRpYyB2b2lkIGVuZF9jb2JhbHRfaXJxKHVuc2lnbmVkIGludCBpcnEpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MgPSBpcnFfdG9fZGVzYyhpcnEpOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmNvYmFsdF9sb2NrLCBmbGFncyk7Ci0JaWYgKCEoaXJxX2Rlc2NbaXJxXS5zdGF0dXMgJiAoSVJRX0RJU0FCTEVEIHwgSVJRX0lOUFJPR1JFU1MpKSkKKwlpZiAoIShkZXNjLT5zdGF0dXMgJiAoSVJRX0RJU0FCTEVEIHwgSVJRX0lOUFJPR1JFU1MpKSkKIAkJZW5hYmxlX2NvYmFsdF9pcnEoaXJxKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjb2JhbHRfbG9jaywgZmxhZ3MpOwogfQpAQCAtNjI2LDEyICs2MjgsMTIgQEAKIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmk4MjU5QV9sb2NrLCBmbGFncyk7CiAKLQlkZXNjID0gaXJxX2Rlc2MgKyByZWFsaXJxOworCWRlc2MgPSBpcnFfdG9fZGVzYyhyZWFsaXJxKTsKIAogCS8qCiAJICogaGFuZGxlIHRoaXMgJ3ZpcnR1YWwgaW50ZXJydXB0JyBhcyBhIENvYmFsdCBvbmUgbm93LgogCSAqLwotCWtzdGF0X2NwdShzbXBfcHJvY2Vzc29yX2lkKCkpLmlycXNbcmVhbGlycV0rKzsKKwlrc3RhdF9pbmNyX2lycXNfdGhpc19jcHUocmVhbGlycSwgZGVzYyk7CiAKIAlpZiAobGlrZWx5KGRlc2MtPmFjdGlvbiAhPSBOVUxMKSkKIAkJaGFuZGxlX0lSUV9ldmVudChyZWFsaXJxLCBkZXNjLT5hY3Rpb24pOwpAQCAtNjYyLDI3ICs2NjQsMjkgQEAKIAlpbnQgaTsKIAogCWZvciAoaSA9IDA7IGkgPCBDT19JUlFfQVBJQzAgKyBDT19BUElDX0xBU1QgKyAxOyBpKyspIHsKLQkJaXJxX2Rlc2NbaV0uc3RhdHVzID0gSVJRX0RJU0FCTEVEOwotCQlpcnFfZGVzY1tpXS5hY3Rpb24gPSAwOwotCQlpcnFfZGVzY1tpXS5kZXB0aCA9IDE7CisJCXN0cnVjdCBpcnFfZGVzYyAqZGVzYyA9IGlycV90b19kZXNjKGkpOworCisJCWRlc2MtPnN0YXR1cyA9IElSUV9ESVNBQkxFRDsKKwkJZGVzYy0+YWN0aW9uID0gMDsKKwkJZGVzYy0+ZGVwdGggPSAxOwogCiAJCWlmIChpID09IDApIHsKLQkJCWlycV9kZXNjW2ldLmNoaXAgPSAmY29iYWx0X2lycV90eXBlOworCQkJZGVzYy0+Y2hpcCA9ICZjb2JhbHRfaXJxX3R5cGU7CiAJCX0KIAkJZWxzZSBpZiAoaSA9PSBDT19JUlFfSURFMCkgewotCQkJaXJxX2Rlc2NbaV0uY2hpcCA9ICZjb2JhbHRfaXJxX3R5cGU7CisJCQlkZXNjLT5jaGlwID0gJmNvYmFsdF9pcnFfdHlwZTsKIAkJfQogCQllbHNlIGlmIChpID09IENPX0lSUV9JREUxKSB7Ci0JCQlpcnFfZGVzY1tpXS5jaGlwID0gJmNvYmFsdF9pcnFfdHlwZTsKKwkJCWRlc2MtPmNoaXAgPSAmY29iYWx0X2lycV90eXBlOwogCQl9CiAJCWVsc2UgaWYgKGkgPT0gQ09fSVJRXzgyNTkpIHsKLQkJCWlycV9kZXNjW2ldLmNoaXAgPSAmcGlpeDRfbWFzdGVyX2lycV90eXBlOworCQkJZGVzYy0+Y2hpcCA9ICZwaWl4NF9tYXN0ZXJfaXJxX3R5cGU7CiAJCX0KIAkJZWxzZSBpZiAoaSA8IENPX0lSUV9BUElDMCkgewotCQkJaXJxX2Rlc2NbaV0uY2hpcCA9ICZwaWl4NF92aXJ0dWFsX2lycV90eXBlOworCQkJZGVzYy0+Y2hpcCA9ICZwaWl4NF92aXJ0dWFsX2lycV90eXBlOwogCQl9CiAJCWVsc2UgaWYgKElTX0NPX0FQSUMoaSkpIHsKLQkJCWlycV9kZXNjW2ldLmNoaXAgPSAmY29iYWx0X2lycV90eXBlOworCQkJZGVzYy0+Y2hpcCA9ICZjb2JhbHRfaXJxX3R5cGU7CiAJCX0KIAl9CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC92bWljbG9ja18zMi5jIGIvYXJjaC94ODYva2VybmVsL3ZtaWNsb2NrXzMyLmMKaW5kZXggNjk1Mzg1OS4uMjU0ZWUwNyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3ZtaWNsb2NrXzMyLmMKKysrIGIvYXJjaC94ODYva2VybmVsL3ZtaWNsb2NrXzMyLmMKQEAgLTIzNSwxMSArMjM1LDE0IEBACiAKIHZvaWQgX19pbml0IHZtaV90aW1lX2luaXQodm9pZCkKIHsKKwl1bnNpZ25lZCBpbnQgY3B1OwogCS8qIERpc2FibGUgUElUOiBCSU9TZXMgc3RhcnQgUElUIENIMCB3aXRoIDE4LjJoeiBwZXJpZGljLiAqLwogCW91dGJfcGl0KDB4M2EsIFBJVF9NT0RFKTsgLyogYmluYXJ5LCBtb2RlIDUsIExTQi9NU0IsIGNoIDAgKi8KIAogCXZtaV90aW1lX2luaXRfY2xvY2tldmVudCgpOwogCXNldHVwX2lycSgwLCAmdm1pX2Nsb2NrX2FjdGlvbik7CisJZm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkKKwkJcGVyX2NwdSh2ZWN0b3JfaXJxLCBjcHUpW3ZtaV9nZXRfdGltZXJfdmVjdG9yKCldID0gMDsKIH0KIAogI2lmZGVmIENPTkZJR19YODZfTE9DQUxfQVBJQwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL01ha2VmaWxlIGIvYXJjaC94ODYva3ZtL01ha2VmaWxlCmluZGV4IGQwZTk0MGIuLmMwMjM0MzUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS9NYWtlZmlsZQorKysgYi9hcmNoL3g4Ni9rdm0vTWFrZWZpbGUKQEAgLTMsMTAgKzMsMTMgQEAKICMKIAogY29tbW9uLW9ianMgPSAkKGFkZHByZWZpeCAuLi8uLi8uLi92aXJ0L2t2bS8sIGt2bV9tYWluLm8gaW9hcGljLm8gXAotICAgICAgICAgICAgICAgIGNvYWxlc2NlZF9tbWlvLm8pCisgICAgICAgICAgICAgICAgY29hbGVzY2VkX21taW8ubyBpcnFfY29tbS5vKQogaWZlcSAoJChDT05GSUdfS1ZNX1RSQUNFKSx5KQogY29tbW9uLW9ianMgKz0gJChhZGRwcmVmaXggLi4vLi4vLi4vdmlydC9rdm0vLCBrdm1fdHJhY2UubykKIGVuZGlmCitpZmVxICgkKENPTkZJR19ETUFSKSx5KQorY29tbW9uLW9ianMgKz0gJChhZGRwcmVmaXggLi4vLi4vLi4vdmlydC9rdm0vLCB2dGQubykKK2VuZGlmCiAKIEVYVFJBX0NGTEFHUyArPSAtSXZpcnQva3ZtIC1JYXJjaC94ODYva3ZtCiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9pODI1NC5jIGIvYXJjaC94ODYva3ZtL2k4MjU0LmMKaW5kZXggYzBmNzg3Mi4uNjM0MTMyYSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL2k4MjU0LmMKKysrIGIvYXJjaC94ODYva3ZtL2k4MjU0LmMKQEAgLTIwMCwxMyArMjAwLDE0IEBACiAKIAlpZiAoIWF0b21pY19pbmNfYW5kX3Rlc3QoJnB0LT5wZW5kaW5nKSkKIAkJc2V0X2JpdChLVk1fUkVRX1BFTkRJTkdfVElNRVIsICZ2Y3B1MC0+cmVxdWVzdHMpOwotCWlmICh2Y3B1MCAmJiB3YWl0cXVldWVfYWN0aXZlKCZ2Y3B1MC0+d3EpKSB7Ci0JCXZjcHUwLT5hcmNoLm1wX3N0YXRlID0gS1ZNX01QX1NUQVRFX1JVTk5BQkxFOworCisJaWYgKHZjcHUwICYmIHdhaXRxdWV1ZV9hY3RpdmUoJnZjcHUwLT53cSkpCiAJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmdmNwdTAtPndxKTsKLQl9CiAKIAlwdC0+dGltZXIuZXhwaXJlcyA9IGt0aW1lX2FkZF9ucyhwdC0+dGltZXIuZXhwaXJlcywgcHQtPnBlcmlvZCk7CiAJcHQtPnNjaGVkdWxlZCA9IGt0aW1lX3RvX25zKHB0LT50aW1lci5leHBpcmVzKTsKKwlpZiAocHQtPnBlcmlvZCkKKwkJcHMtPmNoYW5uZWxzWzBdLmNvdW50X2xvYWRfdGltZSA9IHB0LT50aW1lci5leHBpcmVzOwogCiAJcmV0dXJuIChwdC0+cGVyaW9kID09IDAgPyAwIDogMSk7CiB9CkBAIC0yMTUsMTIgKzIxNiwyMiBAQAogewogCXN0cnVjdCBrdm1fcGl0ICpwaXQgPSB2Y3B1LT5rdm0tPmFyY2gudnBpdDsKIAotCWlmIChwaXQgJiYgdmNwdS0+dmNwdV9pZCA9PSAwICYmIHBpdC0+cGl0X3N0YXRlLmluamVjdF9wZW5kaW5nKQorCWlmIChwaXQgJiYgdmNwdS0+dmNwdV9pZCA9PSAwICYmIHBpdC0+cGl0X3N0YXRlLmlycV9hY2spCiAJCXJldHVybiBhdG9taWNfcmVhZCgmcGl0LT5waXRfc3RhdGUucGl0X3RpbWVyLnBlbmRpbmcpOwotCiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyB2b2lkIGt2bV9waXRfYWNrX2lycShzdHJ1Y3Qga3ZtX2lycV9hY2tfbm90aWZpZXIgKmtpYW4pCit7CisJc3RydWN0IGt2bV9rcGl0X3N0YXRlICpwcyA9IGNvbnRhaW5lcl9vZihraWFuLCBzdHJ1Y3Qga3ZtX2twaXRfc3RhdGUsCisJCQkJCQkgaXJxX2Fja19ub3RpZmllcik7CisJc3Bpbl9sb2NrKCZwcy0+aW5qZWN0X2xvY2spOworCWlmIChhdG9taWNfZGVjX3JldHVybigmcHMtPnBpdF90aW1lci5wZW5kaW5nKSA8IDApCisJCWF0b21pY19pbmMoJnBzLT5waXRfdGltZXIucGVuZGluZyk7CisJcHMtPmlycV9hY2sgPSAxOworCXNwaW5fdW5sb2NrKCZwcy0+aW5qZWN0X2xvY2spOworfQorCiBzdGF0aWMgZW51bSBocnRpbWVyX3Jlc3RhcnQgcGl0X3RpbWVyX2ZuKHN0cnVjdCBocnRpbWVyICpkYXRhKQogewogCXN0cnVjdCBrdm1fa3BpdF9zdGF0ZSAqcHM7CkBAIC0yNTUsOCArMjY2LDkgQEAKIAlocnRpbWVyX2NhbmNlbCgmcHQtPnRpbWVyKTsKIH0KIAotc3RhdGljIHZvaWQgY3JlYXRlX3BpdF90aW1lcihzdHJ1Y3Qga3ZtX2twaXRfdGltZXIgKnB0LCB1MzIgdmFsLCBpbnQgaXNfcGVyaW9kKQorc3RhdGljIHZvaWQgY3JlYXRlX3BpdF90aW1lcihzdHJ1Y3Qga3ZtX2twaXRfc3RhdGUgKnBzLCB1MzIgdmFsLCBpbnQgaXNfcGVyaW9kKQogeworCXN0cnVjdCBrdm1fa3BpdF90aW1lciAqcHQgPSAmcHMtPnBpdF90aW1lcjsKIAlzNjQgaW50ZXJ2YWw7CiAKIAlpbnRlcnZhbCA9IG11bGRpdjY0KHZhbCwgTlNFQ19QRVJfU0VDLCBLVk1fUElUX0ZSRVEpOwpAQCAtMjY4LDYgKzI4MCw3IEBACiAJcHQtPnBlcmlvZCA9IChpc19wZXJpb2QgPT0gMCkgPyAwIDogaW50ZXJ2YWw7CiAJcHQtPnRpbWVyLmZ1bmN0aW9uID0gcGl0X3RpbWVyX2ZuOwogCWF0b21pY19zZXQoJnB0LT5wZW5kaW5nLCAwKTsKKwlwcy0+aXJxX2FjayA9IDE7CiAKIAlocnRpbWVyX3N0YXJ0KCZwdC0+dGltZXIsIGt0aW1lX2FkZF9ucyhrdGltZV9nZXQoKSwgaW50ZXJ2YWwpLAogCQkgICAgICBIUlRJTUVSX01PREVfQUJTKTsKQEAgLTMwMiwxMSArMzE1LDExIEBACiAJY2FzZSAxOgogICAgICAgICAvKiBGSVhNRTogZW5oYW5jZSBtb2RlIDQgcHJlY2lzaW9uICovCiAJY2FzZSA0OgotCQljcmVhdGVfcGl0X3RpbWVyKCZwcy0+cGl0X3RpbWVyLCB2YWwsIDApOworCQljcmVhdGVfcGl0X3RpbWVyKHBzLCB2YWwsIDApOwogCQlicmVhazsKIAljYXNlIDI6CiAJY2FzZSAzOgotCQljcmVhdGVfcGl0X3RpbWVyKCZwcy0+cGl0X3RpbWVyLCB2YWwsIDEpOworCQljcmVhdGVfcGl0X3RpbWVyKHBzLCB2YWwsIDEpOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlkZXN0cm95X3BpdF90aW1lcigmcHMtPnBpdF90aW1lcik7CkBAIC01MjAsNyArNTMzLDcgQEAKIAltdXRleF91bmxvY2soJnBpdC0+cGl0X3N0YXRlLmxvY2spOwogCiAJYXRvbWljX3NldCgmcGl0LT5waXRfc3RhdGUucGl0X3RpbWVyLnBlbmRpbmcsIDApOwotCXBpdC0+cGl0X3N0YXRlLmluamVjdF9wZW5kaW5nID0gMTsKKwlwaXQtPnBpdF9zdGF0ZS5pcnFfYWNrID0gMTsKIH0KIAogc3RydWN0IGt2bV9waXQgKmt2bV9jcmVhdGVfcGl0KHN0cnVjdCBrdm0gKmt2bSkKQEAgLTUzNCw2ICs1NDcsNyBAQAogCiAJbXV0ZXhfaW5pdCgmcGl0LT5waXRfc3RhdGUubG9jayk7CiAJbXV0ZXhfbG9jaygmcGl0LT5waXRfc3RhdGUubG9jayk7CisJc3Bpbl9sb2NrX2luaXQoJnBpdC0+cGl0X3N0YXRlLmluamVjdF9sb2NrKTsKIAogCS8qIEluaXRpYWxpemUgUElPIGRldmljZSAqLwogCXBpdC0+ZGV2LnJlYWQgPSBwaXRfaW9wb3J0X3JlYWQ7CkBAIC01NTUsNiArNTY5LDkgQEAKIAlwaXRfc3RhdGUtPnBpdCA9IHBpdDsKIAlocnRpbWVyX2luaXQoJnBpdF9zdGF0ZS0+cGl0X3RpbWVyLnRpbWVyLAogCQkgICAgIENMT0NLX01PTk9UT05JQywgSFJUSU1FUl9NT0RFX0FCUyk7CisJcGl0X3N0YXRlLT5pcnFfYWNrX25vdGlmaWVyLmdzaSA9IDA7CisJcGl0X3N0YXRlLT5pcnFfYWNrX25vdGlmaWVyLmlycV9hY2tlZCA9IGt2bV9waXRfYWNrX2lycTsKKwlrdm1fcmVnaXN0ZXJfaXJxX2Fja19ub3RpZmllcihrdm0sICZwaXRfc3RhdGUtPmlycV9hY2tfbm90aWZpZXIpOwogCW11dGV4X3VubG9jaygmcGl0LT5waXRfc3RhdGUubG9jayk7CiAKIAlrdm1fcGl0X3Jlc2V0KHBpdCk7CkBAIC01NzgsMTAgKzU5NSw4IEBACiBzdGF0aWMgdm9pZCBfX2luamVjdF9waXRfdGltZXJfaW50cihzdHJ1Y3Qga3ZtICprdm0pCiB7CiAJbXV0ZXhfbG9jaygma3ZtLT5sb2NrKTsKLQlrdm1faW9hcGljX3NldF9pcnEoa3ZtLT5hcmNoLnZpb2FwaWMsIDAsIDEpOwotCWt2bV9pb2FwaWNfc2V0X2lycShrdm0tPmFyY2gudmlvYXBpYywgMCwgMCk7Ci0Ja3ZtX3BpY19zZXRfaXJxKHBpY19pcnFjaGlwKGt2bSksIDAsIDEpOwotCWt2bV9waWNfc2V0X2lycShwaWNfaXJxY2hpcChrdm0pLCAwLCAwKTsKKwlrdm1fc2V0X2lycShrdm0sIDAsIDEpOworCWt2bV9zZXRfaXJxKGt2bSwgMCwgMCk7CiAJbXV0ZXhfdW5sb2NrKCZrdm0tPmxvY2spOwogfQogCkBAIC01OTIsMzcgKzYwNywxOSBAQAogCXN0cnVjdCBrdm1fa3BpdF9zdGF0ZSAqcHM7CiAKIAlpZiAodmNwdSAmJiBwaXQpIHsKKwkJaW50IGluamVjdCA9IDA7CiAJCXBzID0gJnBpdC0+cGl0X3N0YXRlOwogCi0JCS8qIFRyeSB0byBpbmplY3QgcGVuZGluZyBpbnRlcnJ1cHRzIHdoZW46Ci0JCSAqIDEuIFBlbmRpbmcgZXhpc3RzCi0JCSAqIDIuIExhc3QgaW50ZXJydXB0IHdhcyBhY2NlcHRlZCBvciB3YWl0ZWQgZm9yIHRvbyBsb25nIHRpbWUqLwotCQlpZiAoYXRvbWljX3JlYWQoJnBzLT5waXRfdGltZXIucGVuZGluZykgJiYKLQkJICAgIChwcy0+aW5qZWN0X3BlbmRpbmcgfHwKLQkJICAgIChqaWZmaWVzIC0gcHMtPmxhc3RfaW5qZWN0ZWRfdGltZQotCQkJCT49IEtWTV9NQVhfUElUX0lOVFJfSU5URVJWQUwpKSkgewotCQkJcHMtPmluamVjdF9wZW5kaW5nID0gMDsKKwkJLyogVHJ5IHRvIGluamVjdCBwZW5kaW5nIGludGVycnVwdHMgd2hlbgorCQkgKiBsYXN0IG9uZSBoYXMgYmVlbiBhY2tlZC4KKwkJICovCisJCXNwaW5fbG9jaygmcHMtPmluamVjdF9sb2NrKTsKKwkJaWYgKGF0b21pY19yZWFkKCZwcy0+cGl0X3RpbWVyLnBlbmRpbmcpICYmIHBzLT5pcnFfYWNrKSB7CisJCQlwcy0+aXJxX2FjayA9IDA7CisJCQlpbmplY3QgPSAxOworCQl9CisJCXNwaW5fdW5sb2NrKCZwcy0+aW5qZWN0X2xvY2spOworCQlpZiAoaW5qZWN0KQogCQkJX19pbmplY3RfcGl0X3RpbWVyX2ludHIoa3ZtKTsKLQkJCXBzLT5sYXN0X2luamVjdGVkX3RpbWUgPSBqaWZmaWVzOwotCQl9Ci0JfQotfQotCi12b2lkIGt2bV9waXRfdGltZXJfaW50cl9wb3N0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IHZlYykKLXsKLQlzdHJ1Y3Qga3ZtX2FyY2ggKmFyY2ggPSAmdmNwdS0+a3ZtLT5hcmNoOwotCXN0cnVjdCBrdm1fa3BpdF9zdGF0ZSAqcHM7Ci0KLQlpZiAodmNwdSAmJiBhcmNoLT52cGl0KSB7Ci0JCXBzID0gJmFyY2gtPnZwaXQtPnBpdF9zdGF0ZTsKLQkJaWYgKGF0b21pY19yZWFkKCZwcy0+cGl0X3RpbWVyLnBlbmRpbmcpICYmCi0JCSgoKGFyY2gtPnZwaWMtPnBpY3NbMF0uaW1yICYgMSkgPT0gMCAmJgotCQkgIGFyY2gtPnZwaWMtPnBpY3NbMF0uaXJxX2Jhc2UgPT0gdmVjKSB8fAotCQkgIChhcmNoLT52aW9hcGljLT5yZWRpcnRibFswXS5maWVsZHMudmVjdG9yID09IHZlYyAmJgotCQkgIGFyY2gtPnZpb2FwaWMtPnJlZGlydGJsWzBdLmZpZWxkcy5tYXNrICE9IDEpKSkgewotCQkJcHMtPmluamVjdF9wZW5kaW5nID0gMTsKLQkJCWF0b21pY19kZWMoJnBzLT5waXRfdGltZXIucGVuZGluZyk7Ci0JCQlwcy0+Y2hhbm5lbHNbMF0uY291bnRfbG9hZF90aW1lID0ga3RpbWVfZ2V0KCk7Ci0JCX0KIAl9CiB9CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vaTgyNTQuaCBiL2FyY2gveDg2L2t2bS9pODI1NC5oCmluZGV4IGRiMjVjMmEuLmU0MzZkNDkgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS9pODI1NC5oCisrKyBiL2FyY2gveDg2L2t2bS9pODI1NC5oCkBAIC04LDcgKzgsNiBAQAogCWludCBpcnE7CiAJczY0IHBlcmlvZDsgLyogdW5pdDogbnMgKi8KIAlzNjQgc2NoZWR1bGVkOwotCWt0aW1lX3QgbGFzdF91cGRhdGU7CiAJYXRvbWljX3QgcGVuZGluZzsKIH07CiAKQEAgLTM0LDggKzMzLDkgQEAKIAl1MzIgICAgc3BlYWtlcl9kYXRhX29uOwogCXN0cnVjdCBtdXRleCBsb2NrOwogCXN0cnVjdCBrdm1fcGl0ICpwaXQ7Ci0JYm9vbCBpbmplY3RfcGVuZGluZzsgLyogaWYgaW5qZWN0IHBlbmRpbmcgaW50ZXJydXB0cyAqLwotCXVuc2lnbmVkIGxvbmcgbGFzdF9pbmplY3RlZF90aW1lOworCXNwaW5sb2NrX3QgaW5qZWN0X2xvY2s7CisJdW5zaWduZWQgbG9uZyBpcnFfYWNrOworCXN0cnVjdCBrdm1faXJxX2Fja19ub3RpZmllciBpcnFfYWNrX25vdGlmaWVyOwogfTsKIAogc3RydWN0IGt2bV9waXQgewpAQCAtNTQsNyArNTQsNiBAQAogI2RlZmluZSBLVk1fUElUX0NIQU5ORUxfTUFTSwkgICAgMHgzCiAKIHZvaWQga3ZtX2luamVjdF9waXRfdGltZXJfaXJxcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwotdm9pZCBrdm1fcGl0X3RpbWVyX2ludHJfcG9zdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCB2ZWMpOwogdm9pZCBrdm1fcGl0X2xvYWRfY291bnQoc3RydWN0IGt2bSAqa3ZtLCBpbnQgY2hhbm5lbCwgdTMyIHZhbCk7CiBzdHJ1Y3Qga3ZtX3BpdCAqa3ZtX2NyZWF0ZV9waXQoc3RydWN0IGt2bSAqa3ZtKTsKIHZvaWQga3ZtX2ZyZWVfcGl0KHN0cnVjdCBrdm0gKmt2bSk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vaTgyNTkuYyBiL2FyY2gveDg2L2t2bS9pODI1OS5jCmluZGV4IGMzMTE2NGUuLjE3ZTQxZTEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS9pODI1OS5jCisrKyBiL2FyY2gveDg2L2t2bS9pODI1OS5jCkBAIC0zMCw2ICszMCwxOSBAQAogCiAjaW5jbHVkZSA8bGludXgva3ZtX2hvc3QuaD4KIAorc3RhdGljIHZvaWQgcGljX2NsZWFyX2lzcihzdHJ1Y3Qga3ZtX2twaWNfc3RhdGUgKnMsIGludCBpcnEpCit7CisJcy0+aXNyICY9IH4oMSA8PCBpcnEpOworCXMtPmlzcl9hY2sgfD0gKDEgPDwgaXJxKTsKK30KKwordm9pZCBrdm1fcGljX2NsZWFyX2lzcl9hY2soc3RydWN0IGt2bSAqa3ZtKQoreworCXN0cnVjdCBrdm1fcGljICpzID0gcGljX2lycWNoaXAoa3ZtKTsKKwlzLT5waWNzWzBdLmlzcl9hY2sgPSAweGZmOworCXMtPnBpY3NbMV0uaXNyX2FjayA9IDB4ZmY7Cit9CisKIC8qCiAgKiBzZXQgaXJxIGxldmVsLiBJZiBhbiBlZGdlIGlzIGRldGVjdGVkLCB0aGVuIHRoZSBJUlIgaXMgc2V0IHRvIDEKICAqLwpAQCAtMTQxLDExICsxNTQsMTIgQEAKICAqLwogc3RhdGljIGlubGluZSB2b2lkIHBpY19pbnRhY2soc3RydWN0IGt2bV9rcGljX3N0YXRlICpzLCBpbnQgaXJxKQogeworCXMtPmlzciB8PSAxIDw8IGlycTsKIAlpZiAocy0+YXV0b19lb2kpIHsKIAkJaWYgKHMtPnJvdGF0ZV9vbl9hdXRvX2VvaSkKIAkJCXMtPnByaW9yaXR5X2FkZCA9IChpcnEgKyAxKSAmIDc7Ci0JfSBlbHNlCi0JCXMtPmlzciB8PSAoMSA8PCBpcnEpOworCQlwaWNfY2xlYXJfaXNyKHMsIGlycSk7CisJfQogCS8qCiAJICogV2UgZG9uJ3QgY2xlYXIgYSBsZXZlbCBzZW5zaXRpdmUgaW50ZXJydXB0IGhlcmUKIAkgKi8KQEAgLTE1Myw5ICsxNjcsMTAgQEAKIAkJcy0+aXJyICY9IH4oMSA8PCBpcnEpOwogfQogCi1pbnQga3ZtX3BpY19yZWFkX2lycShzdHJ1Y3Qga3ZtX3BpYyAqcykKK2ludCBrdm1fcGljX3JlYWRfaXJxKHN0cnVjdCBrdm0gKmt2bSkKIHsKIAlpbnQgaXJxLCBpcnEyLCBpbnRubzsKKwlzdHJ1Y3Qga3ZtX3BpYyAqcyA9IHBpY19pcnFjaGlwKGt2bSk7CiAKIAlpcnEgPSBwaWNfZ2V0X2lycSgmcy0+cGljc1swXSk7CiAJaWYgKGlycSA+PSAwKSB7CkBAIC0xODEsMTYgKzE5NiwzMiBAQAogCQlpbnRubyA9IHMtPnBpY3NbMF0uaXJxX2Jhc2UgKyBpcnE7CiAJfQogCXBpY191cGRhdGVfaXJxKHMpOworCWt2bV9ub3RpZnlfYWNrZWRfaXJxKGt2bSwgaXJxKTsKIAogCXJldHVybiBpbnRubzsKIH0KIAogdm9pZCBrdm1fcGljX3Jlc2V0KHN0cnVjdCBrdm1fa3BpY19zdGF0ZSAqcykKIHsKKwlpbnQgaXJxLCBpcnFiYXNlOworCXN0cnVjdCBrdm0gKmt2bSA9IHMtPnBpY3Nfc3RhdGUtPmlycV9yZXF1ZXN0X29wYXF1ZTsKKwlzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUwID0ga3ZtLT52Y3B1c1swXTsKKworCWlmIChzID09ICZzLT5waWNzX3N0YXRlLT5waWNzWzBdKQorCQlpcnFiYXNlID0gMDsKKwllbHNlCisJCWlycWJhc2UgPSA4OworCisJZm9yIChpcnEgPSAwOyBpcnEgPCBQSUNfTlVNX1BJTlMvMjsgaXJxKyspIHsKKwkJaWYgKHZjcHUwICYmIGt2bV9hcGljX2FjY2VwdF9waWNfaW50cih2Y3B1MCkpCisJCQlpZiAocy0+aXJyICYgKDEgPDwgaXJxKSB8fCBzLT5pc3IgJiAoMSA8PCBpcnEpKQorCQkJCWt2bV9ub3RpZnlfYWNrZWRfaXJxKGt2bSwgaXJxK2lycWJhc2UpOworCX0KIAlzLT5sYXN0X2lyciA9IDA7CiAJcy0+aXJyID0gMDsKIAlzLT5pbXIgPSAwOwogCXMtPmlzciA9IDA7CisJcy0+aXNyX2FjayA9IDB4ZmY7CiAJcy0+cHJpb3JpdHlfYWRkID0gMDsKIAlzLT5pcnFfYmFzZSA9IDA7CiAJcy0+cmVhZF9yZWdfc2VsZWN0ID0gMDsKQEAgLTI0Myw3ICsyNzQsNyBAQAogCQkJCXByaW9yaXR5ID0gZ2V0X3ByaW9yaXR5KHMsIHMtPmlzcik7CiAJCQkJaWYgKHByaW9yaXR5ICE9IDgpIHsKIAkJCQkJaXJxID0gKHByaW9yaXR5ICsgcy0+cHJpb3JpdHlfYWRkKSAmIDc7Ci0JCQkJCXMtPmlzciAmPSB+KDEgPDwgaXJxKTsKKwkJCQkJcGljX2NsZWFyX2lzcihzLCBpcnEpOwogCQkJCQlpZiAoY21kID09IDUpCiAJCQkJCQlzLT5wcmlvcml0eV9hZGQgPSAoaXJxICsgMSkgJiA3OwogCQkJCQlwaWNfdXBkYXRlX2lycShzLT5waWNzX3N0YXRlKTsKQEAgLTI1MSw3ICsyODIsNyBAQAogCQkJCWJyZWFrOwogCQkJY2FzZSAzOgogCQkJCWlycSA9IHZhbCAmIDc7Ci0JCQkJcy0+aXNyICY9IH4oMSA8PCBpcnEpOworCQkJCXBpY19jbGVhcl9pc3IocywgaXJxKTsKIAkJCQlwaWNfdXBkYXRlX2lycShzLT5waWNzX3N0YXRlKTsKIAkJCQlicmVhazsKIAkJCWNhc2UgNjoKQEAgLTI2MCw4ICsyOTEsOCBAQAogCQkJCWJyZWFrOwogCQkJY2FzZSA3OgogCQkJCWlycSA9IHZhbCAmIDc7Ci0JCQkJcy0+aXNyICY9IH4oMSA8PCBpcnEpOwogCQkJCXMtPnByaW9yaXR5X2FkZCA9IChpcnEgKyAxKSAmIDc7CisJCQkJcGljX2NsZWFyX2lzcihzLCBpcnEpOwogCQkJCXBpY191cGRhdGVfaXJxKHMtPnBpY3Nfc3RhdGUpOwogCQkJCWJyZWFrOwogCQkJZGVmYXVsdDoKQEAgLTMwMyw3ICszMzQsNyBAQAogCQkJcy0+cGljc19zdGF0ZS0+cGljc1swXS5pcnIgJj0gfigxIDw8IDIpOwogCQl9CiAJCXMtPmlyciAmPSB+KDEgPDwgcmV0KTsKLQkJcy0+aXNyICY9IH4oMSA8PCByZXQpOworCQlwaWNfY2xlYXJfaXNyKHMsIHJldCk7CiAJCWlmIChhZGRyMSA+PiA3IHx8IHJldCAhPSAyKQogCQkJcGljX3VwZGF0ZV9pcnEocy0+cGljc19zdGF0ZSk7CiAJfSBlbHNlIHsKQEAgLTQyMiwxMCArNDUzLDE0IEBACiB7CiAJc3RydWN0IGt2bSAqa3ZtID0gb3BhcXVlOwogCXN0cnVjdCBrdm1fdmNwdSAqdmNwdSA9IGt2bS0+dmNwdXNbMF07CisJc3RydWN0IGt2bV9waWMgKnMgPSBwaWNfaXJxY2hpcChrdm0pOworCWludCBpcnEgPSBwaWNfZ2V0X2lycSgmcy0+cGljc1swXSk7CiAKLQlwaWNfaXJxY2hpcChrdm0pLT5vdXRwdXQgPSBsZXZlbDsKLQlpZiAodmNwdSkKKwlzLT5vdXRwdXQgPSBsZXZlbDsKKwlpZiAodmNwdSAmJiBsZXZlbCAmJiAocy0+cGljc1swXS5pc3JfYWNrICYgKDEgPDwgaXJxKSkpIHsKKwkJcy0+cGljc1swXS5pc3JfYWNrICY9IH4oMSA8PCBpcnEpOwogCQlrdm1fdmNwdV9raWNrKHZjcHUpOworCX0KIH0KIAogc3RydWN0IGt2bV9waWMgKmt2bV9jcmVhdGVfcGljKHN0cnVjdCBrdm0gKmt2bSkKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9pcnEuYyBiL2FyY2gveDg2L2t2bS9pcnEuYwppbmRleCA3NmQ3MzZiLi5jMDE5YjhlIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0vaXJxLmMKKysrIGIvYXJjaC94ODYva3ZtL2lycS5jCkBAIC03Miw3ICs3Miw3IEBACiAJCWlmIChrdm1fYXBpY19hY2NlcHRfcGljX2ludHIodikpIHsKIAkJCXMgPSBwaWNfaXJxY2hpcCh2LT5rdm0pOwogCQkJcy0+b3V0cHV0ID0gMDsJCS8qIFBJQyAqLwotCQkJdmVjdG9yID0ga3ZtX3BpY19yZWFkX2lycShzKTsKKwkJCXZlY3RvciA9IGt2bV9waWNfcmVhZF9pcnEodi0+a3ZtKTsKIAkJfQogCX0KIAlyZXR1cm4gdmVjdG9yOwpAQCAtOTAsNyArOTAsNiBAQAogdm9pZCBrdm1fdGltZXJfaW50cl9wb3N0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IHZlYykKIHsKIAlrdm1fYXBpY190aW1lcl9pbnRyX3Bvc3QodmNwdSwgdmVjKTsKLQlrdm1fcGl0X3RpbWVyX2ludHJfcG9zdCh2Y3B1LCB2ZWMpOwogCS8qIFRPRE86IFBJVCwgUlRDIGV0Yy4gKi8KIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGt2bV90aW1lcl9pbnRyX3Bvc3QpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL2lycS5oIGIvYXJjaC94ODYva3ZtL2lycS5oCmluZGV4IDdjYTQ3Y2IuLmYxN2M4ZjUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS9pcnEuaAorKysgYi9hcmNoL3g4Ni9rdm0vaXJxLmgKQEAgLTQyLDYgKzQyLDcgQEAKIAl1OCBpcnI7CQkvKiBpbnRlcnJ1cHQgcmVxdWVzdCByZWdpc3RlciAqLwogCXU4IGltcjsJCS8qIGludGVycnVwdCBtYXNrIHJlZ2lzdGVyICovCiAJdTggaXNyOwkJLyogaW50ZXJydXB0IHNlcnZpY2UgcmVnaXN0ZXIgKi8KKwl1OCBpc3JfYWNrOwkvKiBpbnRlcnJ1cHQgYWNrIGRldGVjdGlvbiAqLwogCXU4IHByaW9yaXR5X2FkZDsJLyogaGlnaGVzdCBpcnEgcHJpb3JpdHkgKi8KIAl1OCBpcnFfYmFzZTsKIAl1OCByZWFkX3JlZ19zZWxlY3Q7CkBAIC02MywxMiArNjQsMTMgQEAKIAl2b2lkICppcnFfcmVxdWVzdF9vcGFxdWU7CiAJaW50IG91dHB1dDsJCS8qIGludHIgZnJvbSBtYXN0ZXIgUElDICovCiAJc3RydWN0IGt2bV9pb19kZXZpY2UgZGV2OworCXZvaWQgKCphY2tfbm90aWZpZXIpKHZvaWQgKm9wYXF1ZSwgaW50IGlycSk7CiB9OwogCiBzdHJ1Y3Qga3ZtX3BpYyAqa3ZtX2NyZWF0ZV9waWMoc3RydWN0IGt2bSAqa3ZtKTsKLXZvaWQga3ZtX3BpY19zZXRfaXJxKHZvaWQgKm9wYXF1ZSwgaW50IGlycSwgaW50IGxldmVsKTsKLWludCBrdm1fcGljX3JlYWRfaXJxKHN0cnVjdCBrdm1fcGljICpzKTsKK2ludCBrdm1fcGljX3JlYWRfaXJxKHN0cnVjdCBrdm0gKmt2bSk7CiB2b2lkIGt2bV9waWNfdXBkYXRlX2lycShzdHJ1Y3Qga3ZtX3BpYyAqcyk7Cit2b2lkIGt2bV9waWNfY2xlYXJfaXNyX2FjayhzdHJ1Y3Qga3ZtICprdm0pOwogCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBrdm1fcGljICpwaWNfaXJxY2hpcChzdHJ1Y3Qga3ZtICprdm0pCiB7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0va3ZtX2NhY2hlX3JlZ3MuaCBiL2FyY2gveDg2L2t2bS9rdm1fY2FjaGVfcmVncy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmZjgxOWQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3g4Ni9rdm0va3ZtX2NhY2hlX3JlZ3MuaApAQCAtMCwwICsxLDMyIEBACisjaWZuZGVmIEFTTV9LVk1fQ0FDSEVfUkVHU19ICisjZGVmaW5lIEFTTV9LVk1fQ0FDSEVfUkVHU19ICisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBrdm1fcmVnaXN0ZXJfcmVhZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCisJCQkJCSAgICAgIGVudW0ga3ZtX3JlZyByZWcpCit7CisJaWYgKCF0ZXN0X2JpdChyZWcsICh1bnNpZ25lZCBsb25nICopJnZjcHUtPmFyY2gucmVnc19hdmFpbCkpCisJCWt2bV94ODZfb3BzLT5jYWNoZV9yZWcodmNwdSwgcmVnKTsKKworCXJldHVybiB2Y3B1LT5hcmNoLnJlZ3NbcmVnXTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGt2bV9yZWdpc3Rlcl93cml0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCisJCQkJICAgICAgZW51bSBrdm1fcmVnIHJlZywKKwkJCQkgICAgICB1bnNpZ25lZCBsb25nIHZhbCkKK3sKKwl2Y3B1LT5hcmNoLnJlZ3NbcmVnXSA9IHZhbDsKKwlfX3NldF9iaXQocmVnLCAodW5zaWduZWQgbG9uZyAqKSZ2Y3B1LT5hcmNoLnJlZ3NfZGlydHkpOworCV9fc2V0X2JpdChyZWcsICh1bnNpZ25lZCBsb25nICopJnZjcHUtPmFyY2gucmVnc19hdmFpbCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBrdm1fcmlwX3JlYWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQoreworCXJldHVybiBrdm1fcmVnaXN0ZXJfcmVhZCh2Y3B1LCBWQ1BVX1JFR1NfUklQKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGt2bV9yaXBfd3JpdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBsb25nIHZhbCkKK3sKKwlrdm1fcmVnaXN0ZXJfd3JpdGUodmNwdSwgVkNQVV9SRUdTX1JJUCwgdmFsKTsKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vbGFwaWMuYyBiL2FyY2gveDg2L2t2bS9sYXBpYy5jCmluZGV4IDczZjQzZGUuLjY1NzE5MjYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS9sYXBpYy5jCisrKyBiL2FyY2gveDg2L2t2bS9sYXBpYy5jCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSA8YXNtL2N1cnJlbnQuaD4KICNpbmNsdWRlIDxhc20vYXBpY2RlZi5oPgogI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KKyNpbmNsdWRlICJrdm1fY2FjaGVfcmVncy5oIgogI2luY2x1ZGUgImlycS5oIgogCiAjZGVmaW5lIFBSSWQ2NCAiZCIKQEAgLTMzOCwxMyArMzM5LDcgQEAKIAkJfSBlbHNlCiAJCQlhcGljX2NsZWFyX3ZlY3Rvcih2ZWN0b3IsIGFwaWMtPnJlZ3MgKyBBUElDX1RNUik7CiAKLQkJaWYgKHZjcHUtPmFyY2gubXBfc3RhdGUgPT0gS1ZNX01QX1NUQVRFX1JVTk5BQkxFKQotCQkJa3ZtX3ZjcHVfa2ljayh2Y3B1KTsKLQkJZWxzZSBpZiAodmNwdS0+YXJjaC5tcF9zdGF0ZSA9PSBLVk1fTVBfU1RBVEVfSEFMVEVEKSB7Ci0JCQl2Y3B1LT5hcmNoLm1wX3N0YXRlID0gS1ZNX01QX1NUQVRFX1JVTk5BQkxFOwotCQkJaWYgKHdhaXRxdWV1ZV9hY3RpdmUoJnZjcHUtPndxKSkKLQkJCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJnZjcHUtPndxKTsKLQkJfQorCQlrdm1fdmNwdV9raWNrKHZjcHUpOwogCiAJCXJlc3VsdCA9IChvcmlnX2lyciA9PSAwKTsKIAkJYnJlYWs7CkBAIC0zNzAsMjEgKzM2NSwxOCBAQAogCQkJdmNwdS0+YXJjaC5tcF9zdGF0ZSA9IEtWTV9NUF9TVEFURV9JTklUX1JFQ0VJVkVEOwogCQkJa3ZtX3ZjcHVfa2ljayh2Y3B1KTsKIAkJfSBlbHNlIHsKLQkJCXByaW50ayhLRVJOX0RFQlVHCi0JCQkgICAgICAgIklnbm9yaW5nIGRlLWFzc2VydCBJTklUIHRvIHZjcHUgJWRcbiIsCi0JCQkgICAgICAgdmNwdS0+dmNwdV9pZCk7CisJCQlhcGljX2RlYnVnKCJJZ25vcmluZyBkZS1hc3NlcnQgSU5JVCB0byB2Y3B1ICVkXG4iLAorCQkJCSAgIHZjcHUtPnZjcHVfaWQpOwogCQl9Ci0KIAkJYnJlYWs7CiAKIAljYXNlIEFQSUNfRE1fU1RBUlRVUDoKLQkJcHJpbnRrKEtFUk5fREVCVUcgIlNJUEkgdG8gdmNwdSAlZCB2ZWN0b3IgMHglMDJ4XG4iLAotCQkgICAgICAgdmNwdS0+dmNwdV9pZCwgdmVjdG9yKTsKKwkJYXBpY19kZWJ1ZygiU0lQSSB0byB2Y3B1ICVkIHZlY3RvciAweCUwMnhcbiIsCisJCQkgICB2Y3B1LT52Y3B1X2lkLCB2ZWN0b3IpOwogCQlpZiAodmNwdS0+YXJjaC5tcF9zdGF0ZSA9PSBLVk1fTVBfU1RBVEVfSU5JVF9SRUNFSVZFRCkgewogCQkJdmNwdS0+YXJjaC5zaXBpX3ZlY3RvciA9IHZlY3RvcjsKIAkJCXZjcHUtPmFyY2gubXBfc3RhdGUgPSBLVk1fTVBfU1RBVEVfU0lQSV9SRUNFSVZFRDsKLQkJCWlmICh3YWl0cXVldWVfYWN0aXZlKCZ2Y3B1LT53cSkpCi0JCQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZ2Y3B1LT53cSk7CisJCQlrdm1fdmNwdV9raWNrKHZjcHUpOwogCQl9CiAJCWJyZWFrOwogCkBAIC00MzgsNyArNDMwLDcgQEAKIHN0YXRpYyB2b2lkIGFwaWNfc2V0X2VvaShzdHJ1Y3Qga3ZtX2xhcGljICphcGljKQogewogCWludCB2ZWN0b3IgPSBhcGljX2ZpbmRfaGlnaGVzdF9pc3IoYXBpYyk7Ci0KKwlpbnQgdHJpZ2dlcl9tb2RlOwogCS8qCiAJICogTm90IGV2ZXJ5IHdyaXRlIEVPSSB3aWxsIGhhcyBjb3JyZXNwb25kaW5nIElTUiwKIAkgKiBvbmUgZXhhbXBsZSBpcyB3aGVuIEtlcm5lbCBjaGVjayB0aW1lciBvbiBzZXR1cF9JT19BUElDCkBAIC00NTAsNyArNDQyLDEwIEBACiAJYXBpY191cGRhdGVfcHByKGFwaWMpOwogCiAJaWYgKGFwaWNfdGVzdF9hbmRfY2xlYXJfdmVjdG9yKHZlY3RvciwgYXBpYy0+cmVncyArIEFQSUNfVE1SKSkKLQkJa3ZtX2lvYXBpY191cGRhdGVfZW9pKGFwaWMtPnZjcHUtPmt2bSwgdmVjdG9yKTsKKwkJdHJpZ2dlcl9tb2RlID0gSU9BUElDX0xFVkVMX1RSSUc7CisJZWxzZQorCQl0cmlnZ2VyX21vZGUgPSBJT0FQSUNfRURHRV9UUklHOworCWt2bV9pb2FwaWNfdXBkYXRlX2VvaShhcGljLT52Y3B1LT5rdm0sIHZlY3RvciwgdHJpZ2dlcl9tb2RlKTsKIH0KIAogc3RhdGljIHZvaWQgYXBpY19zZW5kX2lwaShzdHJ1Y3Qga3ZtX2xhcGljICphcGljKQpAQCAtNTU4LDggKzU1Myw3IEBACiAJc3RydWN0IGt2bV9ydW4gKnJ1biA9IHZjcHUtPnJ1bjsKIAogCXNldF9iaXQoS1ZNX1JFUV9SRVBPUlRfVFBSX0FDQ0VTUywgJnZjcHUtPnJlcXVlc3RzKTsKLQlrdm1feDg2X29wcy0+Y2FjaGVfcmVncyh2Y3B1KTsKLQlydW4tPnRwcl9hY2Nlc3MucmlwID0gdmNwdS0+YXJjaC5yaXA7CisJcnVuLT50cHJfYWNjZXNzLnJpcCA9IGt2bV9yaXBfcmVhZCh2Y3B1KTsKIAlydW4tPnRwcl9hY2Nlc3MuaXNfd3JpdGUgPSB3cml0ZTsKIH0KIApAQCAtNjgzLDkgKzY3Nyw5IEBACiAJICogUmVmZXIgU0RNIDguNC4xCiAJICovCiAJaWYgKGxlbiAhPSA0IHx8IGFsaWdubWVudCkgewotCQlpZiAocHJpbnRrX3JhdGVsaW1pdCgpKQotCQkJcHJpbnRrKEtFUk5fRVJSICJhcGljIHdyaXRlOiBiYWQgc2l6ZT0lZCAlbHhcbiIsCi0JCQkgICAgICAgbGVuLCAobG9uZylhZGRyZXNzKTsKKwkJLyogRG9uJ3Qgc2hvdXQgbG91ZCwgJGluZmFtb3VzX29zIHdvdWxkIGNhdXNlIG9ubHkgbm9pc2UuICovCisJCWFwaWNfZGVidWcoImFwaWMgd3JpdGU6IGJhZCBzaXplPSVkICVseFxuIiwKKwkJCSAgIGxlbiwgKGxvbmcpYWRkcmVzcyk7CiAJCXJldHVybjsKIAl9CiAKQEAgLTk0NywxMCArOTQxLDkgQEAKIAogCWlmKCFhdG9taWNfaW5jX2FuZF90ZXN0KCZhcGljLT50aW1lci5wZW5kaW5nKSkKIAkJc2V0X2JpdChLVk1fUkVRX1BFTkRJTkdfVElNRVIsICZhcGljLT52Y3B1LT5yZXF1ZXN0cyk7Ci0JaWYgKHdhaXRxdWV1ZV9hY3RpdmUocSkpIHsKLQkJYXBpYy0+dmNwdS0+YXJjaC5tcF9zdGF0ZSA9IEtWTV9NUF9TVEFURV9SVU5OQUJMRTsKKwlpZiAod2FpdHF1ZXVlX2FjdGl2ZShxKSkKIAkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKHEpOwotCX0KKwogCWlmIChhcGljX2x2dHRfcGVyaW9kKGFwaWMpKSB7CiAJCXJlc3VsdCA9IDE7CiAJCWFwaWMtPnRpbWVyLmRldi5leHBpcmVzID0ga3RpbWVfYWRkX25zKApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL21tdS5jIGIvYXJjaC94ODYva3ZtL21tdS5jCmluZGV4IDNkYTI1MDguLjk5YzIzOWMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS9tbXUuYworKysgYi9hcmNoL3g4Ni9rdm0vbW11LmMKQEAgLTcwLDYgKzcwLDkgQEAKIG1vZHVsZV9wYXJhbShkYmcsIGJvb2wsIDA2NDQpOwogI2VuZGlmCiAKK3N0YXRpYyBpbnQgb29zX3NoYWRvdyA9IDE7Cittb2R1bGVfcGFyYW0ob29zX3NoYWRvdywgYm9vbCwgMDY0NCk7CisKICNpZm5kZWYgTU1VX0RFQlVHCiAjZGVmaW5lIEFTU0VSVCh4KSBkbyB7IH0gd2hpbGUgKDApCiAjZWxzZQpAQCAtMTM1LDE4ICsxMzgsMjQgQEAKICNkZWZpbmUgQUNDX1VTRVJfTUFTSyAgICBQVF9VU0VSX01BU0sKICNkZWZpbmUgQUNDX0FMTCAgICAgICAgICAoQUNDX0VYRUNfTUFTSyB8IEFDQ19XUklURV9NQVNLIHwgQUNDX1VTRVJfTUFTSykKIAotc3RydWN0IGt2bV9wdl9tbXVfb3BfYnVmZmVyIHsKLQl2b2lkICpwdHI7Ci0JdW5zaWduZWQgbGVuOwotCXVuc2lnbmVkIHByb2Nlc3NlZDsKLQljaGFyIGJ1Zls1MTJdIF9fYWxpZ25lZChzaXplb2YobG9uZykpOwotfTsKKyNkZWZpbmUgU0hBRE9XX1BUX0lOREVYKGFkZHIsIGxldmVsKSBQVDY0X0lOREVYKGFkZHIsIGxldmVsKQogCiBzdHJ1Y3Qga3ZtX3JtYXBfZGVzYyB7CiAJdTY0ICpzaGFkb3dfcHRlc1tSTUFQX0VYVF07CiAJc3RydWN0IGt2bV9ybWFwX2Rlc2MgKm1vcmU7CiB9OwogCitzdHJ1Y3Qga3ZtX3NoYWRvd193YWxrIHsKKwlpbnQgKCplbnRyeSkoc3RydWN0IGt2bV9zaGFkb3dfd2FsayAqd2Fsaywgc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAorCQkgICAgIHU2NCBhZGRyLCB1NjQgKnNwdGUsIGludCBsZXZlbCk7Cit9OworCitzdHJ1Y3Qga3ZtX3Vuc3luY193YWxrIHsKKwlpbnQgKCplbnRyeSkgKHN0cnVjdCBrdm1fbW11X3BhZ2UgKnNwLCBzdHJ1Y3Qga3ZtX3Vuc3luY193YWxrICp3YWxrKTsKK307CisKK3R5cGVkZWYgaW50ICgqbW11X3BhcmVudF93YWxrX2ZuKSAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX21tdV9wYWdlICpzcCk7CisKIHN0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqcHRlX2NoYWluX2NhY2hlOwogc3RhdGljIHN0cnVjdCBrbWVtX2NhY2hlICpybWFwX2Rlc2NfY2FjaGU7CiBzdGF0aWMgc3RydWN0IGttZW1fY2FjaGUgKm1tdV9wYWdlX2hlYWRlcl9jYWNoZTsKQEAgLTQwNSwxNiArNDE0LDE5IEBACiB7CiAJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7CiAJdW5zaWduZWQgbG9uZyBhZGRyOworCWludCByZXQgPSAwOwogCiAJYWRkciA9IGdmbl90b19odmEoa3ZtLCBnZm4pOwogCWlmIChrdm1faXNfZXJyb3JfaHZhKGFkZHIpKQotCQlyZXR1cm4gMDsKKwkJcmV0dXJuIHJldDsKIAorCWRvd25fcmVhZCgmY3VycmVudC0+bW0tPm1tYXBfc2VtKTsKIAl2bWEgPSBmaW5kX3ZtYShjdXJyZW50LT5tbSwgYWRkcik7CiAJaWYgKHZtYSAmJiBpc192bV9odWdldGxiX3BhZ2Uodm1hKSkKLQkJcmV0dXJuIDE7CisJCXJldCA9IDE7CisJdXBfcmVhZCgmY3VycmVudC0+bW0tPm1tYXBfc2VtKTsKIAotCXJldHVybiAwOworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBpbnQgaXNfbGFyZ2VwYWdlX2JhY2tlZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdmbl90IGxhcmdlX2dmbikKQEAgLTY0OSw4ICs2NjEsNiBAQAogCiAJaWYgKHdyaXRlX3Byb3RlY3RlZCkKIAkJa3ZtX2ZsdXNoX3JlbW90ZV90bGJzKGt2bSk7Ci0KLQlhY2NvdW50X3NoYWRvd2VkKGt2bSwgZ2ZuKTsKIH0KIAogc3RhdGljIGludCBrdm1fdW5tYXBfcm1hcHAoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBsb25nICpybWFwcCkKQEAgLTg1OSw2ICs4NjksNzcgQEAKIAlCVUcoKTsKIH0KIAorCitzdGF0aWMgdm9pZCBtbXVfcGFyZW50X3dhbGsoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX21tdV9wYWdlICpzcCwKKwkJCSAgICBtbXVfcGFyZW50X3dhbGtfZm4gZm4pCit7CisJc3RydWN0IGt2bV9wdGVfY2hhaW4gKnB0ZV9jaGFpbjsKKwlzdHJ1Y3QgaGxpc3Rfbm9kZSAqbm9kZTsKKwlzdHJ1Y3Qga3ZtX21tdV9wYWdlICpwYXJlbnRfc3A7CisJaW50IGk7CisKKwlpZiAoIXNwLT5tdWx0aW1hcHBlZCAmJiBzcC0+cGFyZW50X3B0ZSkgeworCQlwYXJlbnRfc3AgPSBwYWdlX2hlYWRlcihfX3BhKHNwLT5wYXJlbnRfcHRlKSk7CisJCWZuKHZjcHUsIHBhcmVudF9zcCk7CisJCW1tdV9wYXJlbnRfd2Fsayh2Y3B1LCBwYXJlbnRfc3AsIGZuKTsKKwkJcmV0dXJuOworCX0KKwlobGlzdF9mb3JfZWFjaF9lbnRyeShwdGVfY2hhaW4sIG5vZGUsICZzcC0+cGFyZW50X3B0ZXMsIGxpbmspCisJCWZvciAoaSA9IDA7IGkgPCBOUl9QVEVfQ0hBSU5fRU5UUklFUzsgKytpKSB7CisJCQlpZiAoIXB0ZV9jaGFpbi0+cGFyZW50X3B0ZXNbaV0pCisJCQkJYnJlYWs7CisJCQlwYXJlbnRfc3AgPSBwYWdlX2hlYWRlcihfX3BhKHB0ZV9jaGFpbi0+cGFyZW50X3B0ZXNbaV0pKTsKKwkJCWZuKHZjcHUsIHBhcmVudF9zcCk7CisJCQltbXVfcGFyZW50X3dhbGsodmNwdSwgcGFyZW50X3NwLCBmbik7CisJCX0KK30KKworc3RhdGljIHZvaWQga3ZtX21tdV91cGRhdGVfdW5zeW5jX2JpdG1hcCh1NjQgKnNwdGUpCit7CisJdW5zaWduZWQgaW50IGluZGV4OworCXN0cnVjdCBrdm1fbW11X3BhZ2UgKnNwID0gcGFnZV9oZWFkZXIoX19wYShzcHRlKSk7CisKKwlpbmRleCA9IHNwdGUgLSBzcC0+c3B0OworCV9fc2V0X2JpdChpbmRleCwgc3AtPnVuc3luY19jaGlsZF9iaXRtYXApOworCXNwLT51bnN5bmNfY2hpbGRyZW4gPSAxOworfQorCitzdGF0aWMgdm9pZCBrdm1fbW11X3VwZGF0ZV9wYXJlbnRzX3Vuc3luYyhzdHJ1Y3Qga3ZtX21tdV9wYWdlICpzcCkKK3sKKwlzdHJ1Y3Qga3ZtX3B0ZV9jaGFpbiAqcHRlX2NoYWluOworCXN0cnVjdCBobGlzdF9ub2RlICpub2RlOworCWludCBpOworCisJaWYgKCFzcC0+cGFyZW50X3B0ZSkKKwkJcmV0dXJuOworCisJaWYgKCFzcC0+bXVsdGltYXBwZWQpIHsKKwkJa3ZtX21tdV91cGRhdGVfdW5zeW5jX2JpdG1hcChzcC0+cGFyZW50X3B0ZSk7CisJCXJldHVybjsKKwl9CisKKwlobGlzdF9mb3JfZWFjaF9lbnRyeShwdGVfY2hhaW4sIG5vZGUsICZzcC0+cGFyZW50X3B0ZXMsIGxpbmspCisJCWZvciAoaSA9IDA7IGkgPCBOUl9QVEVfQ0hBSU5fRU5UUklFUzsgKytpKSB7CisJCQlpZiAoIXB0ZV9jaGFpbi0+cGFyZW50X3B0ZXNbaV0pCisJCQkJYnJlYWs7CisJCQlrdm1fbW11X3VwZGF0ZV91bnN5bmNfYml0bWFwKHB0ZV9jaGFpbi0+cGFyZW50X3B0ZXNbaV0pOworCQl9Cit9CisKK3N0YXRpYyBpbnQgdW5zeW5jX3dhbGtfZm4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX21tdV9wYWdlICpzcCkKK3sKKwlzcC0+dW5zeW5jX2NoaWxkcmVuID0gMTsKKwlrdm1fbW11X3VwZGF0ZV9wYXJlbnRzX3Vuc3luYyhzcCk7CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyB2b2lkIGt2bV9tbXVfbWFya19wYXJlbnRzX3Vuc3luYyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCisJCQkJCXN0cnVjdCBrdm1fbW11X3BhZ2UgKnNwKQoreworCW1tdV9wYXJlbnRfd2Fsayh2Y3B1LCBzcCwgdW5zeW5jX3dhbGtfZm4pOworCWt2bV9tbXVfdXBkYXRlX3BhcmVudHNfdW5zeW5jKHNwKTsKK30KKwogc3RhdGljIHZvaWQgbm9ucGFnaW5nX3ByZWZldGNoX3BhZ2Uoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAogCQkJCSAgICBzdHJ1Y3Qga3ZtX21tdV9wYWdlICpzcCkKIHsKQEAgLTg2OCw2ICs5NDksNTggQEAKIAkJc3AtPnNwdFtpXSA9IHNoYWRvd190cmFwX25vbnByZXNlbnRfcHRlOwogfQogCitzdGF0aWMgaW50IG5vbnBhZ2luZ19zeW5jX3BhZ2Uoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAorCQkJICAgICAgIHN0cnVjdCBrdm1fbW11X3BhZ2UgKnNwKQoreworCXJldHVybiAxOworfQorCitzdGF0aWMgdm9pZCBub25wYWdpbmdfaW52bHBnKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3ZhX3QgZ3ZhKQoreworfQorCisjZGVmaW5lIGZvcl9lYWNoX3Vuc3luY19jaGlsZHJlbihiaXRtYXAsIGlkeCkJCVwKKwlmb3IgKGlkeCA9IGZpbmRfZmlyc3RfYml0KGJpdG1hcCwgNTEyKTsJCVwKKwkgICAgIGlkeCA8IDUxMjsJCQkJCVwKKwkgICAgIGlkeCA9IGZpbmRfbmV4dF9iaXQoYml0bWFwLCA1MTIsIGlkeCsxKSkKKworc3RhdGljIGludCBtbXVfdW5zeW5jX3dhbGsoc3RydWN0IGt2bV9tbXVfcGFnZSAqc3AsCisJCQkgICBzdHJ1Y3Qga3ZtX3Vuc3luY193YWxrICp3YWxrZXIpCit7CisJaW50IGksIHJldDsKKworCWlmICghc3AtPnVuc3luY19jaGlsZHJlbikKKwkJcmV0dXJuIDA7CisKKwlmb3JfZWFjaF91bnN5bmNfY2hpbGRyZW4oc3AtPnVuc3luY19jaGlsZF9iaXRtYXAsIGkpIHsKKwkJdTY0IGVudCA9IHNwLT5zcHRbaV07CisKKwkJaWYgKGlzX3NoYWRvd19wcmVzZW50X3B0ZShlbnQpKSB7CisJCQlzdHJ1Y3Qga3ZtX21tdV9wYWdlICpjaGlsZDsKKwkJCWNoaWxkID0gcGFnZV9oZWFkZXIoZW50ICYgUFQ2NF9CQVNFX0FERFJfTUFTSyk7CisKKwkJCWlmIChjaGlsZC0+dW5zeW5jX2NoaWxkcmVuKSB7CisJCQkJcmV0ID0gbW11X3Vuc3luY193YWxrKGNoaWxkLCB3YWxrZXIpOworCQkJCWlmIChyZXQpCisJCQkJCXJldHVybiByZXQ7CisJCQkJX19jbGVhcl9iaXQoaSwgc3AtPnVuc3luY19jaGlsZF9iaXRtYXApOworCQkJfQorCisJCQlpZiAoY2hpbGQtPnVuc3luYykgeworCQkJCXJldCA9IHdhbGtlci0+ZW50cnkoY2hpbGQsIHdhbGtlcik7CisJCQkJX19jbGVhcl9iaXQoaSwgc3AtPnVuc3luY19jaGlsZF9iaXRtYXApOworCQkJCWlmIChyZXQpCisJCQkJCXJldHVybiByZXQ7CisJCQl9CisJCX0KKwl9CisKKwlpZiAoZmluZF9maXJzdF9iaXQoc3AtPnVuc3luY19jaGlsZF9iaXRtYXAsIDUxMikgPT0gNTEyKQorCQlzcC0+dW5zeW5jX2NoaWxkcmVuID0gMDsKKworCXJldHVybiAwOworfQorCiBzdGF0aWMgc3RydWN0IGt2bV9tbXVfcGFnZSAqa3ZtX21tdV9sb29rdXBfcGFnZShzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IGdmbikKIHsKIAl1bnNpZ25lZCBpbmRleDsKQEAgLTg4OCw2ICsxMDIxLDU5IEBACiAJcmV0dXJuIE5VTEw7CiB9CiAKK3N0YXRpYyB2b2lkIGt2bV91bmxpbmtfdW5zeW5jX3BhZ2Uoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX21tdV9wYWdlICpzcCkKK3sKKwlXQVJOX09OKCFzcC0+dW5zeW5jKTsKKwlzcC0+dW5zeW5jID0gMDsKKwktLWt2bS0+c3RhdC5tbXVfdW5zeW5jOworfQorCitzdGF0aWMgaW50IGt2bV9tbXVfemFwX3BhZ2Uoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX21tdV9wYWdlICpzcCk7CisKK3N0YXRpYyBpbnQga3ZtX3N5bmNfcGFnZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fbW11X3BhZ2UgKnNwKQoreworCWlmIChzcC0+cm9sZS5nbGV2ZWxzICE9IHZjcHUtPmFyY2gubW11LnJvb3RfbGV2ZWwpIHsKKwkJa3ZtX21tdV96YXBfcGFnZSh2Y3B1LT5rdm0sIHNwKTsKKwkJcmV0dXJuIDE7CisJfQorCisJcm1hcF93cml0ZV9wcm90ZWN0KHZjcHUtPmt2bSwgc3AtPmdmbik7CisJaWYgKHZjcHUtPmFyY2gubW11LnN5bmNfcGFnZSh2Y3B1LCBzcCkpIHsKKwkJa3ZtX21tdV96YXBfcGFnZSh2Y3B1LT5rdm0sIHNwKTsKKwkJcmV0dXJuIDE7CisJfQorCisJa3ZtX21tdV9mbHVzaF90bGIodmNwdSk7CisJa3ZtX3VubGlua191bnN5bmNfcGFnZSh2Y3B1LT5rdm0sIHNwKTsKKwlyZXR1cm4gMDsKK30KKworc3RydWN0IHN5bmNfd2Fsa2VyIHsKKwlzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7CisJc3RydWN0IGt2bV91bnN5bmNfd2FsayB3YWxrZXI7Cit9OworCitzdGF0aWMgaW50IG1tdV9zeW5jX2ZuKHN0cnVjdCBrdm1fbW11X3BhZ2UgKnNwLCBzdHJ1Y3Qga3ZtX3Vuc3luY193YWxrICp3YWxrKQoreworCXN0cnVjdCBzeW5jX3dhbGtlciAqc3luY193YWxrID0gY29udGFpbmVyX29mKHdhbGssIHN0cnVjdCBzeW5jX3dhbGtlciwKKwkJCQkJCSAgICAgd2Fsa2VyKTsKKwlzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUgPSBzeW5jX3dhbGstPnZjcHU7CisKKwlrdm1fc3luY19wYWdlKHZjcHUsIHNwKTsKKwlyZXR1cm4gKG5lZWRfcmVzY2hlZCgpIHx8IHNwaW5fbmVlZGJyZWFrKCZ2Y3B1LT5rdm0tPm1tdV9sb2NrKSk7Cit9CisKK3N0YXRpYyB2b2lkIG1tdV9zeW5jX2NoaWxkcmVuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9tbXVfcGFnZSAqc3ApCit7CisJc3RydWN0IHN5bmNfd2Fsa2VyIHdhbGtlciA9IHsKKwkJLndhbGtlciA9IHsgLmVudHJ5ID0gbW11X3N5bmNfZm4sIH0sCisJCS52Y3B1ID0gdmNwdSwKKwl9OworCisJd2hpbGUgKG1tdV91bnN5bmNfd2FsayhzcCwgJndhbGtlci53YWxrZXIpKQorCQljb25kX3Jlc2NoZWRfbG9jaygmdmNwdS0+a3ZtLT5tbXVfbG9jayk7Cit9CisKIHN0YXRpYyBzdHJ1Y3Qga3ZtX21tdV9wYWdlICprdm1fbW11X2dldF9wYWdlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKIAkJCQkJICAgICBnZm5fdCBnZm4sCiAJCQkJCSAgICAgZ3ZhX3QgZ2FkZHIsCkBAIC05MDEsNyArMTA4Nyw3IEBACiAJdW5zaWduZWQgcXVhZHJhbnQ7CiAJc3RydWN0IGhsaXN0X2hlYWQgKmJ1Y2tldDsKIAlzdHJ1Y3Qga3ZtX21tdV9wYWdlICpzcDsKLQlzdHJ1Y3QgaGxpc3Rfbm9kZSAqbm9kZTsKKwlzdHJ1Y3QgaGxpc3Rfbm9kZSAqbm9kZSwgKnRtcDsKIAogCXJvbGUud29yZCA9IDA7CiAJcm9sZS5nbGV2ZWxzID0gdmNwdS0+YXJjaC5tbXUucm9vdF9sZXZlbDsKQEAgLTkxNyw5ICsxMTAzLDIwIEBACiAJCSBnZm4sIHJvbGUud29yZCk7CiAJaW5kZXggPSBrdm1fcGFnZV90YWJsZV9oYXNoZm4oZ2ZuKTsKIAlidWNrZXQgPSAmdmNwdS0+a3ZtLT5hcmNoLm1tdV9wYWdlX2hhc2hbaW5kZXhdOwotCWhsaXN0X2Zvcl9lYWNoX2VudHJ5KHNwLCBub2RlLCBidWNrZXQsIGhhc2hfbGluaykKLQkJaWYgKHNwLT5nZm4gPT0gZ2ZuICYmIHNwLT5yb2xlLndvcmQgPT0gcm9sZS53b3JkKSB7CisJaGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShzcCwgbm9kZSwgdG1wLCBidWNrZXQsIGhhc2hfbGluaykKKwkJaWYgKHNwLT5nZm4gPT0gZ2ZuKSB7CisJCQlpZiAoc3AtPnVuc3luYykKKwkJCQlpZiAoa3ZtX3N5bmNfcGFnZSh2Y3B1LCBzcCkpCisJCQkJCWNvbnRpbnVlOworCisJCQlpZiAoc3AtPnJvbGUud29yZCAhPSByb2xlLndvcmQpCisJCQkJY29udGludWU7CisKIAkJCW1tdV9wYWdlX2FkZF9wYXJlbnRfcHRlKHZjcHUsIHNwLCBwYXJlbnRfcHRlKTsKKwkJCWlmIChzcC0+dW5zeW5jX2NoaWxkcmVuKSB7CisJCQkJc2V0X2JpdChLVk1fUkVRX01NVV9TWU5DLCAmdmNwdS0+cmVxdWVzdHMpOworCQkJCWt2bV9tbXVfbWFya19wYXJlbnRzX3Vuc3luYyh2Y3B1LCBzcCk7CisJCQl9CiAJCQlwZ3ByaW50aygiJXM6IGZvdW5kXG4iLCBfX2Z1bmNfXyk7CiAJCQlyZXR1cm4gc3A7CiAJCX0KQEAgLTkzMSw4ICsxMTI4LDEwIEBACiAJc3AtPmdmbiA9IGdmbjsKIAlzcC0+cm9sZSA9IHJvbGU7CiAJaGxpc3RfYWRkX2hlYWQoJnNwLT5oYXNoX2xpbmssIGJ1Y2tldCk7Ci0JaWYgKCFtZXRhcGh5c2ljYWwpCisJaWYgKCFtZXRhcGh5c2ljYWwpIHsKIAkJcm1hcF93cml0ZV9wcm90ZWN0KHZjcHUtPmt2bSwgZ2ZuKTsKKwkJYWNjb3VudF9zaGFkb3dlZCh2Y3B1LT5rdm0sIGdmbik7CisJfQogCWlmIChzaGFkb3dfdHJhcF9ub25wcmVzZW50X3B0ZSAhPSBzaGFkb3dfbm90cmFwX25vbnByZXNlbnRfcHRlKQogCQl2Y3B1LT5hcmNoLm1tdS5wcmVmZXRjaF9wYWdlKHZjcHUsIHNwKTsKIAllbHNlCkBAIC05NDAsNiArMTEzOSwzNSBAQAogCXJldHVybiBzcDsKIH0KIAorc3RhdGljIGludCB3YWxrX3NoYWRvdyhzdHJ1Y3Qga3ZtX3NoYWRvd193YWxrICp3YWxrZXIsCisJCSAgICAgICBzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBhZGRyKQoreworCWhwYV90IHNoYWRvd19hZGRyOworCWludCBsZXZlbDsKKwlpbnQgcjsKKwl1NjQgKnNwdGVwOworCXVuc2lnbmVkIGluZGV4OworCisJc2hhZG93X2FkZHIgPSB2Y3B1LT5hcmNoLm1tdS5yb290X2hwYTsKKwlsZXZlbCA9IHZjcHUtPmFyY2gubW11LnNoYWRvd19yb290X2xldmVsOworCWlmIChsZXZlbCA9PSBQVDMyRV9ST09UX0xFVkVMKSB7CisJCXNoYWRvd19hZGRyID0gdmNwdS0+YXJjaC5tbXUucGFlX3Jvb3RbKGFkZHIgPj4gMzApICYgM107CisJCXNoYWRvd19hZGRyICY9IFBUNjRfQkFTRV9BRERSX01BU0s7CisJCS0tbGV2ZWw7CisJfQorCisJd2hpbGUgKGxldmVsID49IFBUX1BBR0VfVEFCTEVfTEVWRUwpIHsKKwkJaW5kZXggPSBTSEFET1dfUFRfSU5ERVgoYWRkciwgbGV2ZWwpOworCQlzcHRlcCA9ICgodTY0ICopX192YShzaGFkb3dfYWRkcikpICsgaW5kZXg7CisJCXIgPSB3YWxrZXItPmVudHJ5KHdhbGtlciwgdmNwdSwgYWRkciwgc3B0ZXAsIGxldmVsKTsKKwkJaWYgKHIpCisJCQlyZXR1cm4gcjsKKwkJc2hhZG93X2FkZHIgPSAqc3B0ZXAgJiBQVDY0X0JBU0VfQUREUl9NQVNLOworCQktLWxldmVsOworCX0KKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIHZvaWQga3ZtX21tdV9wYWdlX3VubGlua19jaGlsZHJlbihzdHJ1Y3Qga3ZtICprdm0sCiAJCQkJCSBzdHJ1Y3Qga3ZtX21tdV9wYWdlICpzcCkKIHsKQEAgLTk1NSw3ICsxMTgzLDYgQEAKIAkJCQlybWFwX3JlbW92ZShrdm0sICZwdFtpXSk7CiAJCQlwdFtpXSA9IHNoYWRvd190cmFwX25vbnByZXNlbnRfcHRlOwogCQl9Ci0JCWt2bV9mbHVzaF9yZW1vdGVfdGxicyhrdm0pOwogCQlyZXR1cm47CiAJfQogCkBAIC05NzQsNyArMTIwMSw2IEBACiAJCX0KIAkJcHRbaV0gPSBzaGFkb3dfdHJhcF9ub25wcmVzZW50X3B0ZTsKIAl9Ci0Ja3ZtX2ZsdXNoX3JlbW90ZV90bGJzKGt2bSk7CiB9CiAKIHN0YXRpYyB2b2lkIGt2bV9tbXVfcHV0X3BhZ2Uoc3RydWN0IGt2bV9tbXVfcGFnZSAqc3AsIHU2NCAqcGFyZW50X3B0ZSkKQEAgLTk5MSwxMSArMTIxNywxMCBAQAogCQkJa3ZtLT52Y3B1c1tpXS0+YXJjaC5sYXN0X3B0ZV91cGRhdGVkID0gTlVMTDsKIH0KIAotc3RhdGljIHZvaWQga3ZtX21tdV96YXBfcGFnZShzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fbW11X3BhZ2UgKnNwKQorc3RhdGljIHZvaWQga3ZtX21tdV91bmxpbmtfcGFyZW50cyhzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fbW11X3BhZ2UgKnNwKQogewogCXU2NCAqcGFyZW50X3B0ZTsKIAotCSsra3ZtLT5zdGF0Lm1tdV9zaGFkb3dfemFwcGVkOwogCXdoaWxlIChzcC0+bXVsdGltYXBwZWQgfHwgc3AtPnBhcmVudF9wdGUpIHsKIAkJaWYgKCFzcC0+bXVsdGltYXBwZWQpCiAJCQlwYXJlbnRfcHRlID0gc3AtPnBhcmVudF9wdGU7CkBAIC0xMDEwLDIxICsxMjM1LDU5IEBACiAJCWt2bV9tbXVfcHV0X3BhZ2Uoc3AsIHBhcmVudF9wdGUpOwogCQlzZXRfc2hhZG93X3B0ZShwYXJlbnRfcHRlLCBzaGFkb3dfdHJhcF9ub25wcmVzZW50X3B0ZSk7CiAJfQorfQorCitzdHJ1Y3QgemFwX3dhbGtlciB7CisJc3RydWN0IGt2bV91bnN5bmNfd2FsayB3YWxrZXI7CisJc3RydWN0IGt2bSAqa3ZtOworCWludCB6YXBwZWQ7Cit9OworCitzdGF0aWMgaW50IG1tdV96YXBfZm4oc3RydWN0IGt2bV9tbXVfcGFnZSAqc3AsIHN0cnVjdCBrdm1fdW5zeW5jX3dhbGsgKndhbGspCit7CisJc3RydWN0IHphcF93YWxrZXIgKnphcF93YWxrID0gY29udGFpbmVyX29mKHdhbGssIHN0cnVjdCB6YXBfd2Fsa2VyLAorCQkJCQkJICAgICB3YWxrZXIpOworCWt2bV9tbXVfemFwX3BhZ2UoemFwX3dhbGstPmt2bSwgc3ApOworCXphcF93YWxrLT56YXBwZWQgPSAxOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG1tdV96YXBfdW5zeW5jX2NoaWxkcmVuKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tbXVfcGFnZSAqc3ApCit7CisJc3RydWN0IHphcF93YWxrZXIgd2Fsa2VyID0geworCQkud2Fsa2VyID0geyAuZW50cnkgPSBtbXVfemFwX2ZuLCB9LAorCQkua3ZtID0ga3ZtLAorCQkuemFwcGVkID0gMCwKKwl9OworCisJaWYgKHNwLT5yb2xlLmxldmVsID09IFBUX1BBR0VfVEFCTEVfTEVWRUwpCisJCXJldHVybiAwOworCW1tdV91bnN5bmNfd2FsayhzcCwgJndhbGtlci53YWxrZXIpOworCXJldHVybiB3YWxrZXIuemFwcGVkOworfQorCitzdGF0aWMgaW50IGt2bV9tbXVfemFwX3BhZ2Uoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX21tdV9wYWdlICpzcCkKK3sKKwlpbnQgcmV0OworCSsra3ZtLT5zdGF0Lm1tdV9zaGFkb3dfemFwcGVkOworCXJldCA9IG1tdV96YXBfdW5zeW5jX2NoaWxkcmVuKGt2bSwgc3ApOwogCWt2bV9tbXVfcGFnZV91bmxpbmtfY2hpbGRyZW4oa3ZtLCBzcCk7CisJa3ZtX21tdV91bmxpbmtfcGFyZW50cyhrdm0sIHNwKTsKKwlrdm1fZmx1c2hfcmVtb3RlX3RsYnMoa3ZtKTsKKwlpZiAoIXNwLT5yb2xlLmludmFsaWQgJiYgIXNwLT5yb2xlLm1ldGFwaHlzaWNhbCkKKwkJdW5hY2NvdW50X3NoYWRvd2VkKGt2bSwgc3AtPmdmbik7CisJaWYgKHNwLT51bnN5bmMpCisJCWt2bV91bmxpbmtfdW5zeW5jX3BhZ2Uoa3ZtLCBzcCk7CiAJaWYgKCFzcC0+cm9vdF9jb3VudCkgewotCQlpZiAoIXNwLT5yb2xlLm1ldGFwaHlzaWNhbCAmJiAhc3AtPnJvbGUuaW52YWxpZCkKLQkJCXVuYWNjb3VudF9zaGFkb3dlZChrdm0sIHNwLT5nZm4pOwogCQlobGlzdF9kZWwoJnNwLT5oYXNoX2xpbmspOwogCQlrdm1fbW11X2ZyZWVfcGFnZShrdm0sIHNwKTsKIAl9IGVsc2UgewotCQlpbnQgaW52YWxpZCA9IHNwLT5yb2xlLmludmFsaWQ7Ci0JCWxpc3RfbW92ZSgmc3AtPmxpbmssICZrdm0tPmFyY2guYWN0aXZlX21tdV9wYWdlcyk7CiAJCXNwLT5yb2xlLmludmFsaWQgPSAxOworCQlsaXN0X21vdmUoJnNwLT5saW5rLCAma3ZtLT5hcmNoLmFjdGl2ZV9tbXVfcGFnZXMpOwogCQlrdm1fcmVsb2FkX3JlbW90ZV9tbXVzKGt2bSk7Ci0JCWlmICghc3AtPnJvbGUubWV0YXBoeXNpY2FsICYmICFpbnZhbGlkKQotCQkJdW5hY2NvdW50X3NoYWRvd2VkKGt2bSwgc3AtPmdmbik7CiAJfQogCWt2bV9tbXVfcmVzZXRfbGFzdF9wdGVfdXBkYXRlZChrdm0pOworCXJldHVybiByZXQ7CiB9CiAKIC8qCkBAIC0xMDc3LDggKzEzNDAsOSBAQAogCQlpZiAoc3AtPmdmbiA9PSBnZm4gJiYgIXNwLT5yb2xlLm1ldGFwaHlzaWNhbCkgewogCQkJcGdwcmludGsoIiVzOiBnZm4gJWx4IHJvbGUgJXhcbiIsIF9fZnVuY19fLCBnZm4sCiAJCQkJIHNwLT5yb2xlLndvcmQpOwotCQkJa3ZtX21tdV96YXBfcGFnZShrdm0sIHNwKTsKIAkJCXIgPSAxOworCQkJaWYgKGt2bV9tbXVfemFwX3BhZ2Uoa3ZtLCBzcCkpCisJCQkJbiA9IGJ1Y2tldC0+Zmlyc3Q7CiAJCX0KIAlyZXR1cm4gcjsKIH0KQEAgLTExMDEsNiArMTM2NSwyMCBAQAogCV9fc2V0X2JpdChzbG90LCAmc3AtPnNsb3RfYml0bWFwKTsKIH0KIAorc3RhdGljIHZvaWQgbW11X2NvbnZlcnRfbm90cmFwKHN0cnVjdCBrdm1fbW11X3BhZ2UgKnNwKQoreworCWludCBpOworCXU2NCAqcHQgPSBzcC0+c3B0OworCisJaWYgKHNoYWRvd190cmFwX25vbnByZXNlbnRfcHRlID09IHNoYWRvd19ub3RyYXBfbm9ucHJlc2VudF9wdGUpCisJCXJldHVybjsKKworCWZvciAoaSA9IDA7IGkgPCBQVDY0X0VOVF9QRVJfUEFHRTsgKytpKSB7CisJCWlmIChwdFtpXSA9PSBzaGFkb3dfbm90cmFwX25vbnByZXNlbnRfcHRlKQorCQkJc2V0X3NoYWRvd19wdGUoJnB0W2ldLCBzaGFkb3dfdHJhcF9ub25wcmVzZW50X3B0ZSk7CisJfQorfQorCiBzdHJ1Y3QgcGFnZSAqZ3ZhX3RvX3BhZ2Uoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBndmFfdCBndmEpCiB7CiAJc3RydWN0IHBhZ2UgKnBhZ2U7CkBAIC0xMTEwLDIwICsxMzg4LDExNiBAQAogCWlmIChncGEgPT0gVU5NQVBQRURfR1ZBKQogCQlyZXR1cm4gTlVMTDsKIAotCWRvd25fcmVhZCgmY3VycmVudC0+bW0tPm1tYXBfc2VtKTsKIAlwYWdlID0gZ2ZuX3RvX3BhZ2UodmNwdS0+a3ZtLCBncGEgPj4gUEFHRV9TSElGVCk7Ci0JdXBfcmVhZCgmY3VycmVudC0+bW0tPm1tYXBfc2VtKTsKIAogCXJldHVybiBwYWdlOwogfQogCitzdGF0aWMgaW50IGt2bV91bnN5bmNfcGFnZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fbW11X3BhZ2UgKnNwKQoreworCXVuc2lnbmVkIGluZGV4OworCXN0cnVjdCBobGlzdF9oZWFkICpidWNrZXQ7CisJc3RydWN0IGt2bV9tbXVfcGFnZSAqczsKKwlzdHJ1Y3QgaGxpc3Rfbm9kZSAqbm9kZSwgKm47CisKKwlpbmRleCA9IGt2bV9wYWdlX3RhYmxlX2hhc2hmbihzcC0+Z2ZuKTsKKwlidWNrZXQgPSAmdmNwdS0+a3ZtLT5hcmNoLm1tdV9wYWdlX2hhc2hbaW5kZXhdOworCS8qIGRvbid0IHVuc3luYyBpZiBwYWdldGFibGUgaXMgc2hhZG93ZWQgd2l0aCBtdWx0aXBsZSByb2xlcyAqLworCWhsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocywgbm9kZSwgbiwgYnVja2V0LCBoYXNoX2xpbmspIHsKKwkJaWYgKHMtPmdmbiAhPSBzcC0+Z2ZuIHx8IHMtPnJvbGUubWV0YXBoeXNpY2FsKQorCQkJY29udGludWU7CisJCWlmIChzLT5yb2xlLndvcmQgIT0gc3AtPnJvbGUud29yZCkKKwkJCXJldHVybiAxOworCX0KKwlrdm1fbW11X21hcmtfcGFyZW50c191bnN5bmModmNwdSwgc3ApOworCSsrdmNwdS0+a3ZtLT5zdGF0Lm1tdV91bnN5bmM7CisJc3AtPnVuc3luYyA9IDE7CisJbW11X2NvbnZlcnRfbm90cmFwKHNwKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtbXVfbmVlZF93cml0ZV9wcm90ZWN0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ2ZuX3QgZ2ZuLAorCQkJCSAgYm9vbCBjYW5fdW5zeW5jKQoreworCXN0cnVjdCBrdm1fbW11X3BhZ2UgKnNoYWRvdzsKKworCXNoYWRvdyA9IGt2bV9tbXVfbG9va3VwX3BhZ2UodmNwdS0+a3ZtLCBnZm4pOworCWlmIChzaGFkb3cpIHsKKwkJaWYgKHNoYWRvdy0+cm9sZS5sZXZlbCAhPSBQVF9QQUdFX1RBQkxFX0xFVkVMKQorCQkJcmV0dXJuIDE7CisJCWlmIChzaGFkb3ctPnVuc3luYykKKwkJCXJldHVybiAwOworCQlpZiAoY2FuX3Vuc3luYyAmJiBvb3Nfc2hhZG93KQorCQkJcmV0dXJuIGt2bV91bnN5bmNfcGFnZSh2Y3B1LCBzaGFkb3cpOworCQlyZXR1cm4gMTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2V0X3NwdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgKnNoYWRvd19wdGUsCisJCSAgICB1bnNpZ25lZCBwdGVfYWNjZXNzLCBpbnQgdXNlcl9mYXVsdCwKKwkJICAgIGludCB3cml0ZV9mYXVsdCwgaW50IGRpcnR5LCBpbnQgbGFyZ2VwYWdlLAorCQkgICAgZ2ZuX3QgZ2ZuLCBwZm5fdCBwZm4sIGJvb2wgc3BlY3VsYXRpdmUsCisJCSAgICBib29sIGNhbl91bnN5bmMpCit7CisJdTY0IHNwdGU7CisJaW50IHJldCA9IDA7CisJLyoKKwkgKiBXZSBkb24ndCBzZXQgdGhlIGFjY2Vzc2VkIGJpdCwgc2luY2Ugd2Ugc29tZXRpbWVzIHdhbnQgdG8gc2VlCisJICogd2hldGhlciB0aGUgZ3Vlc3QgYWN0dWFsbHkgdXNlZCB0aGUgcHRlIChpbiBvcmRlciB0byBkZXRlY3QKKwkgKiBkZW1hbmQgcGFnaW5nKS4KKwkgKi8KKwlzcHRlID0gc2hhZG93X2Jhc2VfcHJlc2VudF9wdGUgfCBzaGFkb3dfZGlydHlfbWFzazsKKwlpZiAoIXNwZWN1bGF0aXZlKQorCQlzcHRlIHw9IHNoYWRvd19hY2Nlc3NlZF9tYXNrOworCWlmICghZGlydHkpCisJCXB0ZV9hY2Nlc3MgJj0gfkFDQ19XUklURV9NQVNLOworCWlmIChwdGVfYWNjZXNzICYgQUNDX0VYRUNfTUFTSykKKwkJc3B0ZSB8PSBzaGFkb3dfeF9tYXNrOworCWVsc2UKKwkJc3B0ZSB8PSBzaGFkb3dfbnhfbWFzazsKKwlpZiAocHRlX2FjY2VzcyAmIEFDQ19VU0VSX01BU0spCisJCXNwdGUgfD0gc2hhZG93X3VzZXJfbWFzazsKKwlpZiAobGFyZ2VwYWdlKQorCQlzcHRlIHw9IFBUX1BBR0VfU0laRV9NQVNLOworCisJc3B0ZSB8PSAodTY0KXBmbiA8PCBQQUdFX1NISUZUOworCisJaWYgKChwdGVfYWNjZXNzICYgQUNDX1dSSVRFX01BU0spCisJICAgIHx8ICh3cml0ZV9mYXVsdCAmJiAhaXNfd3JpdGVfcHJvdGVjdGlvbih2Y3B1KSAmJiAhdXNlcl9mYXVsdCkpIHsKKworCQlpZiAobGFyZ2VwYWdlICYmIGhhc193cnByb3RlY3RlZF9wYWdlKHZjcHUtPmt2bSwgZ2ZuKSkgeworCQkJcmV0ID0gMTsKKwkJCXNwdGUgPSBzaGFkb3dfdHJhcF9ub25wcmVzZW50X3B0ZTsKKwkJCWdvdG8gc2V0X3B0ZTsKKwkJfQorCisJCXNwdGUgfD0gUFRfV1JJVEFCTEVfTUFTSzsKKworCQlpZiAobW11X25lZWRfd3JpdGVfcHJvdGVjdCh2Y3B1LCBnZm4sIGNhbl91bnN5bmMpKSB7CisJCQlwZ3ByaW50aygiJXM6IGZvdW5kIHNoYWRvdyBwYWdlIGZvciAlbHgsIG1hcmtpbmcgcm9cbiIsCisJCQkJIF9fZnVuY19fLCBnZm4pOworCQkJcmV0ID0gMTsKKwkJCXB0ZV9hY2Nlc3MgJj0gfkFDQ19XUklURV9NQVNLOworCQkJaWYgKGlzX3dyaXRlYmxlX3B0ZShzcHRlKSkKKwkJCQlzcHRlICY9IH5QVF9XUklUQUJMRV9NQVNLOworCQl9CisJfQorCisJaWYgKHB0ZV9hY2Nlc3MgJiBBQ0NfV1JJVEVfTUFTSykKKwkJbWFya19wYWdlX2RpcnR5KHZjcHUtPmt2bSwgZ2ZuKTsKKworc2V0X3B0ZToKKwlzZXRfc2hhZG93X3B0ZShzaGFkb3dfcHRlLCBzcHRlKTsKKwlyZXR1cm4gcmV0OworfQorCiBzdGF0aWMgdm9pZCBtbXVfc2V0X3NwdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgKnNoYWRvd19wdGUsCiAJCQkgdW5zaWduZWQgcHRfYWNjZXNzLCB1bnNpZ25lZCBwdGVfYWNjZXNzLAogCQkJIGludCB1c2VyX2ZhdWx0LCBpbnQgd3JpdGVfZmF1bHQsIGludCBkaXJ0eSwKIAkJCSBpbnQgKnB0d3JpdGUsIGludCBsYXJnZXBhZ2UsIGdmbl90IGdmbiwKIAkJCSBwZm5fdCBwZm4sIGJvb2wgc3BlY3VsYXRpdmUpCiB7Ci0JdTY0IHNwdGU7CiAJaW50IHdhc19ybWFwcGVkID0gMDsKIAlpbnQgd2FzX3dyaXRlYmxlID0gaXNfd3JpdGVibGVfcHRlKCpzaGFkb3dfcHRlKTsKIApAQCAtMTE1NCw1OSArMTUyOCwxOSBAQAogCQkJCXdhc19ybWFwcGVkID0gMTsKIAkJfQogCX0KLQotCS8qCi0JICogV2UgZG9uJ3Qgc2V0IHRoZSBhY2Nlc3NlZCBiaXQsIHNpbmNlIHdlIHNvbWV0aW1lcyB3YW50IHRvIHNlZQotCSAqIHdoZXRoZXIgdGhlIGd1ZXN0IGFjdHVhbGx5IHVzZWQgdGhlIHB0ZSAoaW4gb3JkZXIgdG8gZGV0ZWN0Ci0JICogZGVtYW5kIHBhZ2luZykuCi0JICovCi0Jc3B0ZSA9IHNoYWRvd19iYXNlX3ByZXNlbnRfcHRlIHwgc2hhZG93X2RpcnR5X21hc2s7Ci0JaWYgKCFzcGVjdWxhdGl2ZSkKLQkJcHRlX2FjY2VzcyB8PSBQVF9BQ0NFU1NFRF9NQVNLOwotCWlmICghZGlydHkpCi0JCXB0ZV9hY2Nlc3MgJj0gfkFDQ19XUklURV9NQVNLOwotCWlmIChwdGVfYWNjZXNzICYgQUNDX0VYRUNfTUFTSykKLQkJc3B0ZSB8PSBzaGFkb3dfeF9tYXNrOwotCWVsc2UKLQkJc3B0ZSB8PSBzaGFkb3dfbnhfbWFzazsKLQlpZiAocHRlX2FjY2VzcyAmIEFDQ19VU0VSX01BU0spCi0JCXNwdGUgfD0gc2hhZG93X3VzZXJfbWFzazsKLQlpZiAobGFyZ2VwYWdlKQotCQlzcHRlIHw9IFBUX1BBR0VfU0laRV9NQVNLOwotCi0Jc3B0ZSB8PSAodTY0KXBmbiA8PCBQQUdFX1NISUZUOwotCi0JaWYgKChwdGVfYWNjZXNzICYgQUNDX1dSSVRFX01BU0spCi0JICAgIHx8ICh3cml0ZV9mYXVsdCAmJiAhaXNfd3JpdGVfcHJvdGVjdGlvbih2Y3B1KSAmJiAhdXNlcl9mYXVsdCkpIHsKLQkJc3RydWN0IGt2bV9tbXVfcGFnZSAqc2hhZG93OwotCi0JCXNwdGUgfD0gUFRfV1JJVEFCTEVfTUFTSzsKLQotCQlzaGFkb3cgPSBrdm1fbW11X2xvb2t1cF9wYWdlKHZjcHUtPmt2bSwgZ2ZuKTsKLQkJaWYgKHNoYWRvdyB8fAotCQkgICAobGFyZ2VwYWdlICYmIGhhc193cnByb3RlY3RlZF9wYWdlKHZjcHUtPmt2bSwgZ2ZuKSkpIHsKLQkJCXBncHJpbnRrKCIlczogZm91bmQgc2hhZG93IHBhZ2UgZm9yICVseCwgbWFya2luZyByb1xuIiwKLQkJCQkgX19mdW5jX18sIGdmbik7Ci0JCQlwdGVfYWNjZXNzICY9IH5BQ0NfV1JJVEVfTUFTSzsKLQkJCWlmIChpc193cml0ZWJsZV9wdGUoc3B0ZSkpIHsKLQkJCQlzcHRlICY9IH5QVF9XUklUQUJMRV9NQVNLOwotCQkJCWt2bV94ODZfb3BzLT50bGJfZmx1c2godmNwdSk7Ci0JCQl9Ci0JCQlpZiAod3JpdGVfZmF1bHQpCi0JCQkJKnB0d3JpdGUgPSAxOwotCQl9CisJaWYgKHNldF9zcHRlKHZjcHUsIHNoYWRvd19wdGUsIHB0ZV9hY2Nlc3MsIHVzZXJfZmF1bHQsIHdyaXRlX2ZhdWx0LAorCQkgICAgICBkaXJ0eSwgbGFyZ2VwYWdlLCBnZm4sIHBmbiwgc3BlY3VsYXRpdmUsIHRydWUpKSB7CisJCWlmICh3cml0ZV9mYXVsdCkKKwkJCSpwdHdyaXRlID0gMTsKKwkJa3ZtX3g4Nl9vcHMtPnRsYl9mbHVzaCh2Y3B1KTsKIAl9CiAKLQlpZiAocHRlX2FjY2VzcyAmIEFDQ19XUklURV9NQVNLKQotCQltYXJrX3BhZ2VfZGlydHkodmNwdS0+a3ZtLCBnZm4pOwotCi0JcGdwcmludGsoIiVzOiBzZXR0aW5nIHNwdGUgJWxseFxuIiwgX19mdW5jX18sIHNwdGUpOworCXBncHJpbnRrKCIlczogc2V0dGluZyBzcHRlICVsbHhcbiIsIF9fZnVuY19fLCAqc2hhZG93X3B0ZSk7CiAJcGdwcmludGsoImluc3RhbnRpYXRpbmcgJXMgUFRFICglcykgYXQgJWxkICglbGx4KSBhZGRyICVwXG4iLAotCQkgKHNwdGUmUFRfUEFHRV9TSVpFX01BU0spPyAiMk1CIiA6ICI0a0IiLAotCQkgKHNwdGUmUFRfV1JJVEFCTEVfTUFTSyk/IlJXIjoiUiIsIGdmbiwgc3B0ZSwgc2hhZG93X3B0ZSk7Ci0Jc2V0X3NoYWRvd19wdGUoc2hhZG93X3B0ZSwgc3B0ZSk7Ci0JaWYgKCF3YXNfcm1hcHBlZCAmJiAoc3B0ZSAmIFBUX1BBR0VfU0laRV9NQVNLKQotCSAgICAmJiAoc3B0ZSAmIFBUX1BSRVNFTlRfTUFTSykpCisJCSBpc19sYXJnZV9wdGUoKnNoYWRvd19wdGUpPyAiMk1CIiA6ICI0a0IiLAorCQkgaXNfcHJlc2VudF9wdGUoKnNoYWRvd19wdGUpPyJSVyI6IlIiLCBnZm4sCisJCSAqc2hhZG93X3B0ZSwgc2hhZG93X3B0ZSk7CisJaWYgKCF3YXNfcm1hcHBlZCAmJiBpc19sYXJnZV9wdGUoKnNoYWRvd19wdGUpKQogCQkrK3ZjcHUtPmt2bS0+c3RhdC5scGFnZXM7CiAKIAlwYWdlX2hlYWRlcl91cGRhdGVfc2xvdCh2Y3B1LT5rdm0sIHNoYWRvd19wdGUsIGdmbik7CkBAIC0xMjMwLDU0ICsxNTY0LDY3IEBACiB7CiB9CiAKLXN0YXRpYyBpbnQgX19kaXJlY3RfbWFwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgdiwgaW50IHdyaXRlLAotCQkJICAgaW50IGxhcmdlcGFnZSwgZ2ZuX3QgZ2ZuLCBwZm5fdCBwZm4sCi0JCQkgICBpbnQgbGV2ZWwpCitzdHJ1Y3QgZGlyZWN0X3NoYWRvd193YWxrIHsKKwlzdHJ1Y3Qga3ZtX3NoYWRvd193YWxrIHdhbGtlcjsKKwlwZm5fdCBwZm47CisJaW50IHdyaXRlOworCWludCBsYXJnZXBhZ2U7CisJaW50IHB0X3dyaXRlOworfTsKKworc3RhdGljIGludCBkaXJlY3RfbWFwX2VudHJ5KHN0cnVjdCBrdm1fc2hhZG93X3dhbGsgKl93YWxrLAorCQkJICAgIHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKKwkJCSAgICB1NjQgYWRkciwgdTY0ICpzcHRlcCwgaW50IGxldmVsKQogewotCWhwYV90IHRhYmxlX2FkZHIgPSB2Y3B1LT5hcmNoLm1tdS5yb290X2hwYTsKLQlpbnQgcHRfd3JpdGUgPSAwOworCXN0cnVjdCBkaXJlY3Rfc2hhZG93X3dhbGsgKndhbGsgPQorCQljb250YWluZXJfb2YoX3dhbGssIHN0cnVjdCBkaXJlY3Rfc2hhZG93X3dhbGssIHdhbGtlcik7CisJc3RydWN0IGt2bV9tbXVfcGFnZSAqc3A7CisJZ2ZuX3QgcHNldWRvX2dmbjsKKwlnZm5fdCBnZm4gPSBhZGRyID4+IFBBR0VfU0hJRlQ7CiAKLQlmb3IgKDsgOyBsZXZlbC0tKSB7Ci0JCXUzMiBpbmRleCA9IFBUNjRfSU5ERVgodiwgbGV2ZWwpOwotCQl1NjQgKnRhYmxlOwotCi0JCUFTU0VSVChWQUxJRF9QQUdFKHRhYmxlX2FkZHIpKTsKLQkJdGFibGUgPSBfX3ZhKHRhYmxlX2FkZHIpOwotCi0JCWlmIChsZXZlbCA9PSAxKSB7Ci0JCQltbXVfc2V0X3NwdGUodmNwdSwgJnRhYmxlW2luZGV4XSwgQUNDX0FMTCwgQUNDX0FMTCwKLQkJCQkgICAgIDAsIHdyaXRlLCAxLCAmcHRfd3JpdGUsIDAsIGdmbiwgcGZuLCBmYWxzZSk7Ci0JCQlyZXR1cm4gcHRfd3JpdGU7Ci0JCX0KLQotCQlpZiAobGFyZ2VwYWdlICYmIGxldmVsID09IDIpIHsKLQkJCW1tdV9zZXRfc3B0ZSh2Y3B1LCAmdGFibGVbaW5kZXhdLCBBQ0NfQUxMLCBBQ0NfQUxMLAotCQkJCSAgICAgMCwgd3JpdGUsIDEsICZwdF93cml0ZSwgMSwgZ2ZuLCBwZm4sIGZhbHNlKTsKLQkJCXJldHVybiBwdF93cml0ZTsKLQkJfQotCi0JCWlmICh0YWJsZVtpbmRleF0gPT0gc2hhZG93X3RyYXBfbm9ucHJlc2VudF9wdGUpIHsKLQkJCXN0cnVjdCBrdm1fbW11X3BhZ2UgKm5ld190YWJsZTsKLQkJCWdmbl90IHBzZXVkb19nZm47Ci0KLQkJCXBzZXVkb19nZm4gPSAodiAmIFBUNjRfRElSX0JBU0VfQUREUl9NQVNLKQotCQkJCT4+IFBBR0VfU0hJRlQ7Ci0JCQluZXdfdGFibGUgPSBrdm1fbW11X2dldF9wYWdlKHZjcHUsIHBzZXVkb19nZm4sCi0JCQkJCQkgICAgIHYsIGxldmVsIC0gMSwKLQkJCQkJCSAgICAgMSwgQUNDX0FMTCwgJnRhYmxlW2luZGV4XSk7Ci0JCQlpZiAoIW5ld190YWJsZSkgewotCQkJCXBncHJpbnRrKCJub25wYWdpbmdfbWFwOiBFTk9NRU1cbiIpOwotCQkJCWt2bV9yZWxlYXNlX3Bmbl9jbGVhbihwZm4pOwotCQkJCXJldHVybiAtRU5PTUVNOwotCQkJfQotCi0JCQlzZXRfc2hhZG93X3B0ZSgmdGFibGVbaW5kZXhdLAotCQkJCSAgICAgICBfX3BhKG5ld190YWJsZS0+c3B0KQotCQkJCSAgICAgICB8IFBUX1BSRVNFTlRfTUFTSyB8IFBUX1dSSVRBQkxFX01BU0sKLQkJCQkgICAgICAgfCBzaGFkb3dfdXNlcl9tYXNrIHwgc2hhZG93X3hfbWFzayk7Ci0JCX0KLQkJdGFibGVfYWRkciA9IHRhYmxlW2luZGV4XSAmIFBUNjRfQkFTRV9BRERSX01BU0s7CisJaWYgKGxldmVsID09IFBUX1BBR0VfVEFCTEVfTEVWRUwKKwkgICAgfHwgKHdhbGstPmxhcmdlcGFnZSAmJiBsZXZlbCA9PSBQVF9ESVJFQ1RPUllfTEVWRUwpKSB7CisJCW1tdV9zZXRfc3B0ZSh2Y3B1LCBzcHRlcCwgQUNDX0FMTCwgQUNDX0FMTCwKKwkJCSAgICAgMCwgd2Fsay0+d3JpdGUsIDEsICZ3YWxrLT5wdF93cml0ZSwKKwkJCSAgICAgd2Fsay0+bGFyZ2VwYWdlLCBnZm4sIHdhbGstPnBmbiwgZmFsc2UpOworCQkrK3ZjcHUtPnN0YXQucGZfZml4ZWQ7CisJCXJldHVybiAxOwogCX0KKworCWlmICgqc3B0ZXAgPT0gc2hhZG93X3RyYXBfbm9ucHJlc2VudF9wdGUpIHsKKwkJcHNldWRvX2dmbiA9IChhZGRyICYgUFQ2NF9ESVJfQkFTRV9BRERSX01BU0spID4+IFBBR0VfU0hJRlQ7CisJCXNwID0ga3ZtX21tdV9nZXRfcGFnZSh2Y3B1LCBwc2V1ZG9fZ2ZuLCAoZ3ZhX3QpYWRkciwgbGV2ZWwgLSAxLAorCQkJCSAgICAgIDEsIEFDQ19BTEwsIHNwdGVwKTsKKwkJaWYgKCFzcCkgeworCQkJcGdwcmludGsoIm5vbnBhZ2luZ19tYXA6IEVOT01FTVxuIik7CisJCQlrdm1fcmVsZWFzZV9wZm5fY2xlYW4od2Fsay0+cGZuKTsKKwkJCXJldHVybiAtRU5PTUVNOworCQl9CisKKwkJc2V0X3NoYWRvd19wdGUoc3B0ZXAsCisJCQkgICAgICAgX19wYShzcC0+c3B0KQorCQkJICAgICAgIHwgUFRfUFJFU0VOVF9NQVNLIHwgUFRfV1JJVEFCTEVfTUFTSworCQkJICAgICAgIHwgc2hhZG93X3VzZXJfbWFzayB8IHNoYWRvd194X21hc2spOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBfX2RpcmVjdF9tYXAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCB2LCBpbnQgd3JpdGUsCisJCQlpbnQgbGFyZ2VwYWdlLCBnZm5fdCBnZm4sIHBmbl90IHBmbikKK3sKKwlpbnQgcjsKKwlzdHJ1Y3QgZGlyZWN0X3NoYWRvd193YWxrIHdhbGtlciA9IHsKKwkJLndhbGtlciA9IHsgLmVudHJ5ID0gZGlyZWN0X21hcF9lbnRyeSwgfSwKKwkJLnBmbiA9IHBmbiwKKwkJLmxhcmdlcGFnZSA9IGxhcmdlcGFnZSwKKwkJLndyaXRlID0gd3JpdGUsCisJCS5wdF93cml0ZSA9IDAsCisJfTsKKworCXIgPSB3YWxrX3NoYWRvdygmd2Fsa2VyLndhbGtlciwgdmNwdSwgZ2ZuIDw8IFBBR0VfU0hJRlQpOworCWlmIChyIDwgMCkKKwkJcmV0dXJuIHI7CisJcmV0dXJuIHdhbGtlci5wdF93cml0ZTsKIH0KIAogc3RhdGljIGludCBub25wYWdpbmdfbWFwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3ZhX3QgdiwgaW50IHdyaXRlLCBnZm5fdCBnZm4pCkBAIC0xMjg3LDE2ICsxNjM0LDE0IEBACiAJcGZuX3QgcGZuOwogCXVuc2lnbmVkIGxvbmcgbW11X3NlcTsKIAotCWRvd25fcmVhZCgmY3VycmVudC0+bW0tPm1tYXBfc2VtKTsKIAlpZiAoaXNfbGFyZ2VwYWdlX2JhY2tlZCh2Y3B1LCBnZm4gJiB+KEtWTV9QQUdFU19QRVJfSFBBR0UtMSkpKSB7CiAJCWdmbiAmPSB+KEtWTV9QQUdFU19QRVJfSFBBR0UtMSk7CiAJCWxhcmdlcGFnZSA9IDE7CiAJfQogCiAJbW11X3NlcSA9IHZjcHUtPmt2bS0+bW11X25vdGlmaWVyX3NlcTsKLQkvKiBpbXBsaWNpdCBtYigpLCB3ZSdsbCByZWFkIGJlZm9yZSBQVCBsb2NrIGlzIHVubG9ja2VkICovCisJc21wX3JtYigpOwogCXBmbiA9IGdmbl90b19wZm4odmNwdS0+a3ZtLCBnZm4pOwotCXVwX3JlYWQoJmN1cnJlbnQtPm1tLT5tbWFwX3NlbSk7CiAKIAkvKiBtbWlvICovCiAJaWYgKGlzX2Vycm9yX3BmbihwZm4pKSB7CkBAIC0xMzA4LDggKzE2NTMsNyBAQAogCWlmIChtbXVfbm90aWZpZXJfcmV0cnkodmNwdSwgbW11X3NlcSkpCiAJCWdvdG8gb3V0X3VubG9jazsKIAlrdm1fbW11X2ZyZWVfc29tZV9wYWdlcyh2Y3B1KTsKLQlyID0gX19kaXJlY3RfbWFwKHZjcHUsIHYsIHdyaXRlLCBsYXJnZXBhZ2UsIGdmbiwgcGZuLAotCQkJIFBUMzJFX1JPT1RfTEVWRUwpOworCXIgPSBfX2RpcmVjdF9tYXAodmNwdSwgdiwgd3JpdGUsIGxhcmdlcGFnZSwgZ2ZuLCBwZm4pOwogCXNwaW5fdW5sb2NrKCZ2Y3B1LT5rdm0tPm1tdV9sb2NrKTsKIAogCkBAIC0xNDA1LDYgKzE3NDksMzcgQEAKIAl2Y3B1LT5hcmNoLm1tdS5yb290X2hwYSA9IF9fcGEodmNwdS0+YXJjaC5tbXUucGFlX3Jvb3QpOwogfQogCitzdGF0aWMgdm9pZCBtbXVfc3luY19yb290cyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCit7CisJaW50IGk7CisJc3RydWN0IGt2bV9tbXVfcGFnZSAqc3A7CisKKwlpZiAoIVZBTElEX1BBR0UodmNwdS0+YXJjaC5tbXUucm9vdF9ocGEpKQorCQlyZXR1cm47CisJaWYgKHZjcHUtPmFyY2gubW11LnNoYWRvd19yb290X2xldmVsID09IFBUNjRfUk9PVF9MRVZFTCkgeworCQlocGFfdCByb290ID0gdmNwdS0+YXJjaC5tbXUucm9vdF9ocGE7CisJCXNwID0gcGFnZV9oZWFkZXIocm9vdCk7CisJCW1tdV9zeW5jX2NoaWxkcmVuKHZjcHUsIHNwKTsKKwkJcmV0dXJuOworCX0KKwlmb3IgKGkgPSAwOyBpIDwgNDsgKytpKSB7CisJCWhwYV90IHJvb3QgPSB2Y3B1LT5hcmNoLm1tdS5wYWVfcm9vdFtpXTsKKworCQlpZiAocm9vdCkgeworCQkJcm9vdCAmPSBQVDY0X0JBU0VfQUREUl9NQVNLOworCQkJc3AgPSBwYWdlX2hlYWRlcihyb290KTsKKwkJCW1tdV9zeW5jX2NoaWxkcmVuKHZjcHUsIHNwKTsKKwkJfQorCX0KK30KKwordm9pZCBrdm1fbW11X3N5bmNfcm9vdHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQoreworCXNwaW5fbG9jaygmdmNwdS0+a3ZtLT5tbXVfbG9jayk7CisJbW11X3N5bmNfcm9vdHModmNwdSk7CisJc3Bpbl91bmxvY2soJnZjcHUtPmt2bS0+bW11X2xvY2spOworfQorCiBzdGF0aWMgZ3BhX3Qgbm9ucGFnaW5nX2d2YV90b19ncGEoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBndmFfdCB2YWRkcikKIHsKIAlyZXR1cm4gdmFkZHI7CkBAIC0xNDQ2LDE1ICsxODIxLDEzIEBACiAJaWYgKHIpCiAJCXJldHVybiByOwogCi0JZG93bl9yZWFkKCZjdXJyZW50LT5tbS0+bW1hcF9zZW0pOwogCWlmIChpc19sYXJnZXBhZ2VfYmFja2VkKHZjcHUsIGdmbiAmIH4oS1ZNX1BBR0VTX1BFUl9IUEFHRS0xKSkpIHsKIAkJZ2ZuICY9IH4oS1ZNX1BBR0VTX1BFUl9IUEFHRS0xKTsKIAkJbGFyZ2VwYWdlID0gMTsKIAl9CiAJbW11X3NlcSA9IHZjcHUtPmt2bS0+bW11X25vdGlmaWVyX3NlcTsKLQkvKiBpbXBsaWNpdCBtYigpLCB3ZSdsbCByZWFkIGJlZm9yZSBQVCBsb2NrIGlzIHVubG9ja2VkICovCisJc21wX3JtYigpOwogCXBmbiA9IGdmbl90b19wZm4odmNwdS0+a3ZtLCBnZm4pOwotCXVwX3JlYWQoJmN1cnJlbnQtPm1tLT5tbWFwX3NlbSk7CiAJaWYgKGlzX2Vycm9yX3BmbihwZm4pKSB7CiAJCWt2bV9yZWxlYXNlX3Bmbl9jbGVhbihwZm4pOwogCQlyZXR1cm4gMTsKQEAgLTE0NjQsNyArMTgzNyw3IEBACiAJCWdvdG8gb3V0X3VubG9jazsKIAlrdm1fbW11X2ZyZWVfc29tZV9wYWdlcyh2Y3B1KTsKIAlyID0gX19kaXJlY3RfbWFwKHZjcHUsIGdwYSwgZXJyb3JfY29kZSAmIFBGRVJSX1dSSVRFX01BU0ssCi0JCQkgbGFyZ2VwYWdlLCBnZm4sIHBmbiwga3ZtX3g4Nl9vcHMtPmdldF90ZHBfbGV2ZWwoKSk7CisJCQkgbGFyZ2VwYWdlLCBnZm4sIHBmbik7CiAJc3Bpbl91bmxvY2soJnZjcHUtPmt2bS0+bW11X2xvY2spOwogCiAJcmV0dXJuIHI7CkBAIC0xNDg5LDYgKzE4NjIsOCBAQAogCWNvbnRleHQtPmd2YV90b19ncGEgPSBub25wYWdpbmdfZ3ZhX3RvX2dwYTsKIAljb250ZXh0LT5mcmVlID0gbm9ucGFnaW5nX2ZyZWU7CiAJY29udGV4dC0+cHJlZmV0Y2hfcGFnZSA9IG5vbnBhZ2luZ19wcmVmZXRjaF9wYWdlOworCWNvbnRleHQtPnN5bmNfcGFnZSA9IG5vbnBhZ2luZ19zeW5jX3BhZ2U7CisJY29udGV4dC0+aW52bHBnID0gbm9ucGFnaW5nX2ludmxwZzsKIAljb250ZXh0LT5yb290X2xldmVsID0gMDsKIAljb250ZXh0LT5zaGFkb3dfcm9vdF9sZXZlbCA9IFBUMzJFX1JPT1RfTEVWRUw7CiAJY29udGV4dC0+cm9vdF9ocGEgPSBJTlZBTElEX1BBR0U7CkBAIC0xNTM2LDYgKzE5MTEsOCBAQAogCWNvbnRleHQtPnBhZ2VfZmF1bHQgPSBwYWdpbmc2NF9wYWdlX2ZhdWx0OwogCWNvbnRleHQtPmd2YV90b19ncGEgPSBwYWdpbmc2NF9ndmFfdG9fZ3BhOwogCWNvbnRleHQtPnByZWZldGNoX3BhZ2UgPSBwYWdpbmc2NF9wcmVmZXRjaF9wYWdlOworCWNvbnRleHQtPnN5bmNfcGFnZSA9IHBhZ2luZzY0X3N5bmNfcGFnZTsKKwljb250ZXh0LT5pbnZscGcgPSBwYWdpbmc2NF9pbnZscGc7CiAJY29udGV4dC0+ZnJlZSA9IHBhZ2luZ19mcmVlOwogCWNvbnRleHQtPnJvb3RfbGV2ZWwgPSBsZXZlbDsKIAljb250ZXh0LT5zaGFkb3dfcm9vdF9sZXZlbCA9IGxldmVsOwpAQCAtMTU1Nyw2ICsxOTM0LDggQEAKIAljb250ZXh0LT5ndmFfdG9fZ3BhID0gcGFnaW5nMzJfZ3ZhX3RvX2dwYTsKIAljb250ZXh0LT5mcmVlID0gcGFnaW5nX2ZyZWU7CiAJY29udGV4dC0+cHJlZmV0Y2hfcGFnZSA9IHBhZ2luZzMyX3ByZWZldGNoX3BhZ2U7CisJY29udGV4dC0+c3luY19wYWdlID0gcGFnaW5nMzJfc3luY19wYWdlOworCWNvbnRleHQtPmludmxwZyA9IHBhZ2luZzMyX2ludmxwZzsKIAljb250ZXh0LT5yb290X2xldmVsID0gUFQzMl9ST09UX0xFVkVMOwogCWNvbnRleHQtPnNoYWRvd19yb290X2xldmVsID0gUFQzMkVfUk9PVF9MRVZFTDsKIAljb250ZXh0LT5yb290X2hwYSA9IElOVkFMSURfUEFHRTsKQEAgLTE1NzYsNiArMTk1NSw4IEBACiAJY29udGV4dC0+cGFnZV9mYXVsdCA9IHRkcF9wYWdlX2ZhdWx0OwogCWNvbnRleHQtPmZyZWUgPSBub25wYWdpbmdfZnJlZTsKIAljb250ZXh0LT5wcmVmZXRjaF9wYWdlID0gbm9ucGFnaW5nX3ByZWZldGNoX3BhZ2U7CisJY29udGV4dC0+c3luY19wYWdlID0gbm9ucGFnaW5nX3N5bmNfcGFnZTsKKwljb250ZXh0LT5pbnZscGcgPSBub25wYWdpbmdfaW52bHBnOwogCWNvbnRleHQtPnNoYWRvd19yb290X2xldmVsID0ga3ZtX3g4Nl9vcHMtPmdldF90ZHBfbGV2ZWwoKTsKIAljb250ZXh0LT5yb290X2hwYSA9IElOVkFMSURfUEFHRTsKIApAQCAtMTY0Nyw2ICsyMDI4LDcgQEAKIAlzcGluX2xvY2soJnZjcHUtPmt2bS0+bW11X2xvY2spOwogCWt2bV9tbXVfZnJlZV9zb21lX3BhZ2VzKHZjcHUpOwogCW1tdV9hbGxvY19yb290cyh2Y3B1KTsKKwltbXVfc3luY19yb290cyh2Y3B1KTsKIAlzcGluX3VubG9jaygmdmNwdS0+a3ZtLT5tbXVfbG9jayk7CiAJa3ZtX3g4Nl9vcHMtPnNldF9jcjModmNwdSwgdmNwdS0+YXJjaC5tbXUucm9vdF9ocGEpOwogCWt2bV9tbXVfZmx1c2hfdGxiKHZjcHUpOwpAQCAtMTc2NywxNSArMjE0OSwxMyBAQAogCQlyZXR1cm47CiAJZ2ZuID0gKGdwdGUgJiBQVDY0X0JBU0VfQUREUl9NQVNLKSA+PiBQQUdFX1NISUZUOwogCi0JZG93bl9yZWFkKCZjdXJyZW50LT5tbS0+bW1hcF9zZW0pOwogCWlmIChpc19sYXJnZV9wdGUoZ3B0ZSkgJiYgaXNfbGFyZ2VwYWdlX2JhY2tlZCh2Y3B1LCBnZm4pKSB7CiAJCWdmbiAmPSB+KEtWTV9QQUdFU19QRVJfSFBBR0UtMSk7CiAJCXZjcHUtPmFyY2gudXBkYXRlX3B0ZS5sYXJnZXBhZ2UgPSAxOwogCX0KIAl2Y3B1LT5hcmNoLnVwZGF0ZV9wdGUubW11X3NlcSA9IHZjcHUtPmt2bS0+bW11X25vdGlmaWVyX3NlcTsKLQkvKiBpbXBsaWNpdCBtYigpLCB3ZSdsbCByZWFkIGJlZm9yZSBQVCBsb2NrIGlzIHVubG9ja2VkICovCisJc21wX3JtYigpOwogCXBmbiA9IGdmbl90b19wZm4odmNwdS0+a3ZtLCBnZm4pOwotCXVwX3JlYWQoJmN1cnJlbnQtPm1tLT5tbWFwX3NlbSk7CiAKIAlpZiAoaXNfZXJyb3JfcGZuKHBmbikpIHsKIAkJa3ZtX3JlbGVhc2VfcGZuX2NsZWFuKHBmbik7CkBAIC0xODM3LDcgKzIyMTcsNyBAQAogCWluZGV4ID0ga3ZtX3BhZ2VfdGFibGVfaGFzaGZuKGdmbik7CiAJYnVja2V0ID0gJnZjcHUtPmt2bS0+YXJjaC5tbXVfcGFnZV9oYXNoW2luZGV4XTsKIAlobGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHNwLCBub2RlLCBuLCBidWNrZXQsIGhhc2hfbGluaykgewotCQlpZiAoc3AtPmdmbiAhPSBnZm4gfHwgc3AtPnJvbGUubWV0YXBoeXNpY2FsKQorCQlpZiAoc3AtPmdmbiAhPSBnZm4gfHwgc3AtPnJvbGUubWV0YXBoeXNpY2FsIHx8IHNwLT5yb2xlLmludmFsaWQpCiAJCQljb250aW51ZTsKIAkJcHRlX3NpemUgPSBzcC0+cm9sZS5nbGV2ZWxzID09IFBUMzJfUk9PVF9MRVZFTCA/IDQgOiA4OwogCQltaXNhbGlnbmVkID0gKG9mZnNldCBeIChvZmZzZXQgKyBieXRlcyAtIDEpKSAmIH4ocHRlX3NpemUgLSAxKTsKQEAgLTE4NTUsNyArMjIzNSw4IEBACiAJCQkgKi8KIAkJCXBncHJpbnRrKCJtaXNhbGlnbmVkOiBncGEgJWxseCBieXRlcyAlZCByb2xlICV4XG4iLAogCQkJCSBncGEsIGJ5dGVzLCBzcC0+cm9sZS53b3JkKTsKLQkJCWt2bV9tbXVfemFwX3BhZ2UodmNwdS0+a3ZtLCBzcCk7CisJCQlpZiAoa3ZtX21tdV96YXBfcGFnZSh2Y3B1LT5rdm0sIHNwKSkKKwkJCQluID0gYnVja2V0LT5maXJzdDsKIAkJCSsrdmNwdS0+a3ZtLT5zdGF0Lm1tdV9mbG9vZGVkOwogCQkJY29udGludWU7CiAJCX0KQEAgLTE5NjksNiArMjM1MCwxNiBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwoa3ZtX21tdV9wYWdlX2ZhdWx0KTsKIAordm9pZCBrdm1fbW11X2ludmxwZyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGd2YV90IGd2YSkKK3sKKwlzcGluX2xvY2soJnZjcHUtPmt2bS0+bW11X2xvY2spOworCXZjcHUtPmFyY2gubW11LmludmxwZyh2Y3B1LCBndmEpOworCXNwaW5fdW5sb2NrKCZ2Y3B1LT5rdm0tPm1tdV9sb2NrKTsKKwlrdm1fbW11X2ZsdXNoX3RsYih2Y3B1KTsKKwkrK3ZjcHUtPnN0YXQuaW52bHBnOworfQorRVhQT1JUX1NZTUJPTF9HUEwoa3ZtX21tdV9pbnZscGcpOworCiB2b2lkIGt2bV9lbmFibGVfdGRwKHZvaWQpCiB7CiAJdGRwX2VuYWJsZWQgPSB0cnVlOwpAQCAtMjA1NSw2ICsyNDQ2LDcgQEAKIHsKIAlzdHJ1Y3Qga3ZtX21tdV9wYWdlICpzcDsKIAorCXNwaW5fbG9jaygma3ZtLT5tbXVfbG9jayk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeShzcCwgJmt2bS0+YXJjaC5hY3RpdmVfbW11X3BhZ2VzLCBsaW5rKSB7CiAJCWludCBpOwogCQl1NjQgKnB0OwpAQCAtMjA2OCw2ICsyNDYwLDggQEAKIAkJCWlmIChwdFtpXSAmIFBUX1dSSVRBQkxFX01BU0spCiAJCQkJcHRbaV0gJj0gflBUX1dSSVRBQkxFX01BU0s7CiAJfQorCWt2bV9mbHVzaF9yZW1vdGVfdGxicyhrdm0pOworCXNwaW5fdW5sb2NrKCZrdm0tPm1tdV9sb2NrKTsKIH0KIAogdm9pZCBrdm1fbW11X3phcF9hbGwoc3RydWN0IGt2bSAqa3ZtKQpAQCAtMjA3Niw3ICsyNDcwLDkgQEAKIAogCXNwaW5fbG9jaygma3ZtLT5tbXVfbG9jayk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHNwLCBub2RlLCAma3ZtLT5hcmNoLmFjdGl2ZV9tbXVfcGFnZXMsIGxpbmspCi0JCWt2bV9tbXVfemFwX3BhZ2Uoa3ZtLCBzcCk7CisJCWlmIChrdm1fbW11X3phcF9wYWdlKGt2bSwgc3ApKQorCQkJbm9kZSA9IGNvbnRhaW5lcl9vZihrdm0tPmFyY2guYWN0aXZlX21tdV9wYWdlcy5uZXh0LAorCQkJCQkgICAgc3RydWN0IGt2bV9tbXVfcGFnZSwgbGluayk7CiAJc3Bpbl91bmxvY2soJmt2bS0+bW11X2xvY2spOwogCiAJa3ZtX2ZsdXNoX3JlbW90ZV90bGJzKGt2bSk7CkBAIC0yMjkxLDE4ICsyNjg3LDE4IEBACiAJCSAgZ3BhX3QgYWRkciwgdW5zaWduZWQgbG9uZyAqcmV0KQogewogCWludCByOwotCXN0cnVjdCBrdm1fcHZfbW11X29wX2J1ZmZlciBidWZmZXI7CisJc3RydWN0IGt2bV9wdl9tbXVfb3BfYnVmZmVyICpidWZmZXIgPSAmdmNwdS0+YXJjaC5tbXVfb3BfYnVmZmVyOwogCi0JYnVmZmVyLnB0ciA9IGJ1ZmZlci5idWY7Ci0JYnVmZmVyLmxlbiA9IG1pbl90KHVuc2lnbmVkIGxvbmcsIGJ5dGVzLCBzaXplb2YgYnVmZmVyLmJ1Zik7Ci0JYnVmZmVyLnByb2Nlc3NlZCA9IDA7CisJYnVmZmVyLT5wdHIgPSBidWZmZXItPmJ1ZjsKKwlidWZmZXItPmxlbiA9IG1pbl90KHVuc2lnbmVkIGxvbmcsIGJ5dGVzLCBzaXplb2YgYnVmZmVyLT5idWYpOworCWJ1ZmZlci0+cHJvY2Vzc2VkID0gMDsKIAotCXIgPSBrdm1fcmVhZF9ndWVzdCh2Y3B1LT5rdm0sIGFkZHIsIGJ1ZmZlci5idWYsIGJ1ZmZlci5sZW4pOworCXIgPSBrdm1fcmVhZF9ndWVzdCh2Y3B1LT5rdm0sIGFkZHIsIGJ1ZmZlci0+YnVmLCBidWZmZXItPmxlbik7CiAJaWYgKHIpCiAJCWdvdG8gb3V0OwogCi0Jd2hpbGUgKGJ1ZmZlci5sZW4pIHsKLQkJciA9IGt2bV9wdl9tbXVfb3Bfb25lKHZjcHUsICZidWZmZXIpOworCXdoaWxlIChidWZmZXItPmxlbikgeworCQlyID0ga3ZtX3B2X21tdV9vcF9vbmUodmNwdSwgYnVmZmVyKTsKIAkJaWYgKHIgPCAwKQogCQkJZ290byBvdXQ7CiAJCWlmIChyID09IDApCkBAIC0yMzExLDcgKzI3MDcsNyBAQAogCiAJciA9IDE7CiBvdXQ6Ci0JKnJldCA9IGJ1ZmZlci5wcm9jZXNzZWQ7CisJKnJldCA9IGJ1ZmZlci0+cHJvY2Vzc2VkOwogCXJldHVybiByOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vcGFnaW5nX3RtcGwuaCBiL2FyY2gveDg2L2t2bS9wYWdpbmdfdG1wbC5oCmluZGV4IDRhODE0YmYuLjYxM2VjOWEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS9wYWdpbmdfdG1wbC5oCisrKyBiL2FyY2gveDg2L2t2bS9wYWdpbmdfdG1wbC5oCkBAIC0yNSwxMSArMjUsMTEgQEAKICNpZiBQVFRZUEUgPT0gNjQKIAkjZGVmaW5lIHB0X2VsZW1lbnRfdCB1NjQKIAkjZGVmaW5lIGd1ZXN0X3dhbGtlciBndWVzdF93YWxrZXI2NAorCSNkZWZpbmUgc2hhZG93X3dhbGtlciBzaGFkb3dfd2Fsa2VyNjQKIAkjZGVmaW5lIEZOQU1FKG5hbWUpIHBhZ2luZyMjNjRfIyNuYW1lCiAJI2RlZmluZSBQVF9CQVNFX0FERFJfTUFTSyBQVDY0X0JBU0VfQUREUl9NQVNLCiAJI2RlZmluZSBQVF9ESVJfQkFTRV9BRERSX01BU0sgUFQ2NF9ESVJfQkFTRV9BRERSX01BU0sKIAkjZGVmaW5lIFBUX0lOREVYKGFkZHIsIGxldmVsKSBQVDY0X0lOREVYKGFkZHIsIGxldmVsKQotCSNkZWZpbmUgU0hBRE9XX1BUX0lOREVYKGFkZHIsIGxldmVsKSBQVDY0X0lOREVYKGFkZHIsIGxldmVsKQogCSNkZWZpbmUgUFRfTEVWRUxfTUFTSyhsZXZlbCkgUFQ2NF9MRVZFTF9NQVNLKGxldmVsKQogCSNkZWZpbmUgUFRfTEVWRUxfQklUUyBQVDY0X0xFVkVMX0JJVFMKIAkjaWZkZWYgQ09ORklHX1g4Nl82NApAQCAtNDIsMTEgKzQyLDExIEBACiAjZWxpZiBQVFRZUEUgPT0gMzIKIAkjZGVmaW5lIHB0X2VsZW1lbnRfdCB1MzIKIAkjZGVmaW5lIGd1ZXN0X3dhbGtlciBndWVzdF93YWxrZXIzMgorCSNkZWZpbmUgc2hhZG93X3dhbGtlciBzaGFkb3dfd2Fsa2VyMzIKIAkjZGVmaW5lIEZOQU1FKG5hbWUpIHBhZ2luZyMjMzJfIyNuYW1lCiAJI2RlZmluZSBQVF9CQVNFX0FERFJfTUFTSyBQVDMyX0JBU0VfQUREUl9NQVNLCiAJI2RlZmluZSBQVF9ESVJfQkFTRV9BRERSX01BU0sgUFQzMl9ESVJfQkFTRV9BRERSX01BU0sKIAkjZGVmaW5lIFBUX0lOREVYKGFkZHIsIGxldmVsKSBQVDMyX0lOREVYKGFkZHIsIGxldmVsKQotCSNkZWZpbmUgU0hBRE9XX1BUX0lOREVYKGFkZHIsIGxldmVsKSBQVDY0X0lOREVYKGFkZHIsIGxldmVsKQogCSNkZWZpbmUgUFRfTEVWRUxfTUFTSyhsZXZlbCkgUFQzMl9MRVZFTF9NQVNLKGxldmVsKQogCSNkZWZpbmUgUFRfTEVWRUxfQklUUyBQVDMyX0xFVkVMX0JJVFMKIAkjZGVmaW5lIFBUX01BWF9GVUxMX0xFVkVMUyAyCkBAIC03Myw2ICs3MywxNyBAQAogCXUzMiBlcnJvcl9jb2RlOwogfTsKIAorc3RydWN0IHNoYWRvd193YWxrZXIgeworCXN0cnVjdCBrdm1fc2hhZG93X3dhbGsgd2Fsa2VyOworCXN0cnVjdCBndWVzdF93YWxrZXIgKmd1ZXN0X3dhbGtlcjsKKwlpbnQgdXNlcl9mYXVsdDsKKwlpbnQgd3JpdGVfZmF1bHQ7CisJaW50IGxhcmdlcGFnZTsKKwlpbnQgKnB0d3JpdGU7CisJcGZuX3QgcGZuOworCXU2NCAqc3B0ZXA7Cit9OworCiBzdGF0aWMgZ2ZuX3QgZ3B0ZV90b19nZm4ocHRfZWxlbWVudF90IGdwdGUpCiB7CiAJcmV0dXJuIChncHRlICYgUFRfQkFTRV9BRERSX01BU0spID4+IFBBR0VfU0hJRlQ7CkBAIC05MSwxNCArMTAyLDEwIEBACiAJcHRfZWxlbWVudF90ICp0YWJsZTsKIAlzdHJ1Y3QgcGFnZSAqcGFnZTsKIAotCWRvd25fcmVhZCgmY3VycmVudC0+bW0tPm1tYXBfc2VtKTsKIAlwYWdlID0gZ2ZuX3RvX3BhZ2Uoa3ZtLCB0YWJsZV9nZm4pOwotCXVwX3JlYWQoJmN1cnJlbnQtPm1tLT5tbWFwX3NlbSk7CiAKIAl0YWJsZSA9IGttYXBfYXRvbWljKHBhZ2UsIEtNX1VTRVIwKTsKLQogCXJldCA9IENNUFhDSEcoJnRhYmxlW2luZGV4XSwgb3JpZ19wdGUsIG5ld19wdGUpOwotCiAJa3VubWFwX2F0b21pYyh0YWJsZSwgS01fVVNFUjApOwogCiAJa3ZtX3JlbGVhc2VfcGFnZV9kaXJ0eShwYWdlKTsKQEAgLTI3NCw4NiArMjgxLDg5IEBACiAvKgogICogRmV0Y2ggYSBzaGFkb3cgcHRlIGZvciBhIHNwZWNpZmljIGxldmVsIGluIHRoZSBwYWdpbmcgaGllcmFyY2h5LgogICovCitzdGF0aWMgaW50IEZOQU1FKHNoYWRvd193YWxrX2VudHJ5KShzdHJ1Y3Qga3ZtX3NoYWRvd193YWxrICpfc3csCisJCQkJICAgIHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IGFkZHIsCisJCQkJICAgIHU2NCAqc3B0ZXAsIGludCBsZXZlbCkKK3sKKwlzdHJ1Y3Qgc2hhZG93X3dhbGtlciAqc3cgPQorCQljb250YWluZXJfb2YoX3N3LCBzdHJ1Y3Qgc2hhZG93X3dhbGtlciwgd2Fsa2VyKTsKKwlzdHJ1Y3QgZ3Vlc3Rfd2Fsa2VyICpndyA9IHN3LT5ndWVzdF93YWxrZXI7CisJdW5zaWduZWQgYWNjZXNzID0gZ3ctPnB0X2FjY2VzczsKKwlzdHJ1Y3Qga3ZtX21tdV9wYWdlICpzaGFkb3dfcGFnZTsKKwl1NjQgc3B0ZTsKKwlpbnQgbWV0YXBoeXNpY2FsOworCWdmbl90IHRhYmxlX2dmbjsKKwlpbnQgcjsKKwlwdF9lbGVtZW50X3QgY3Vycl9wdGU7CisKKwlpZiAobGV2ZWwgPT0gUFRfUEFHRV9UQUJMRV9MRVZFTAorCSAgICB8fCAoc3ctPmxhcmdlcGFnZSAmJiBsZXZlbCA9PSBQVF9ESVJFQ1RPUllfTEVWRUwpKSB7CisJCW1tdV9zZXRfc3B0ZSh2Y3B1LCBzcHRlcCwgYWNjZXNzLCBndy0+cHRlX2FjY2VzcyAmIGFjY2VzcywKKwkJCSAgICAgc3ctPnVzZXJfZmF1bHQsIHN3LT53cml0ZV9mYXVsdCwKKwkJCSAgICAgZ3ctPnB0ZXNbZ3ctPmxldmVsLTFdICYgUFRfRElSVFlfTUFTSywKKwkJCSAgICAgc3ctPnB0d3JpdGUsIHN3LT5sYXJnZXBhZ2UsIGd3LT5nZm4sIHN3LT5wZm4sCisJCQkgICAgIGZhbHNlKTsKKwkJc3ctPnNwdGVwID0gc3B0ZXA7CisJCXJldHVybiAxOworCX0KKworCWlmIChpc19zaGFkb3dfcHJlc2VudF9wdGUoKnNwdGVwKSAmJiAhaXNfbGFyZ2VfcHRlKCpzcHRlcCkpCisJCXJldHVybiAwOworCisJaWYgKGlzX2xhcmdlX3B0ZSgqc3B0ZXApKSB7CisJCXNldF9zaGFkb3dfcHRlKHNwdGVwLCBzaGFkb3dfdHJhcF9ub25wcmVzZW50X3B0ZSk7CisJCWt2bV9mbHVzaF9yZW1vdGVfdGxicyh2Y3B1LT5rdm0pOworCQlybWFwX3JlbW92ZSh2Y3B1LT5rdm0sIHNwdGVwKTsKKwl9CisKKwlpZiAobGV2ZWwgPT0gUFRfRElSRUNUT1JZX0xFVkVMICYmIGd3LT5sZXZlbCA9PSBQVF9ESVJFQ1RPUllfTEVWRUwpIHsKKwkJbWV0YXBoeXNpY2FsID0gMTsKKwkJaWYgKCFpc19kaXJ0eV9wdGUoZ3ctPnB0ZXNbbGV2ZWwgLSAxXSkpCisJCQlhY2Nlc3MgJj0gfkFDQ19XUklURV9NQVNLOworCQl0YWJsZV9nZm4gPSBncHRlX3RvX2dmbihndy0+cHRlc1tsZXZlbCAtIDFdKTsKKwl9IGVsc2UgeworCQltZXRhcGh5c2ljYWwgPSAwOworCQl0YWJsZV9nZm4gPSBndy0+dGFibGVfZ2ZuW2xldmVsIC0gMl07CisJfQorCXNoYWRvd19wYWdlID0ga3ZtX21tdV9nZXRfcGFnZSh2Y3B1LCB0YWJsZV9nZm4sIChndmFfdClhZGRyLCBsZXZlbC0xLAorCQkJCSAgICAgICBtZXRhcGh5c2ljYWwsIGFjY2Vzcywgc3B0ZXApOworCWlmICghbWV0YXBoeXNpY2FsKSB7CisJCXIgPSBrdm1fcmVhZF9ndWVzdF9hdG9taWModmNwdS0+a3ZtLCBndy0+cHRlX2dwYVtsZXZlbCAtIDJdLAorCQkJCQkgICZjdXJyX3B0ZSwgc2l6ZW9mKGN1cnJfcHRlKSk7CisJCWlmIChyIHx8IGN1cnJfcHRlICE9IGd3LT5wdGVzW2xldmVsIC0gMl0pIHsKKwkJCWt2bV9yZWxlYXNlX3Bmbl9jbGVhbihzdy0+cGZuKTsKKwkJCXN3LT5zcHRlcCA9IE5VTEw7CisJCQlyZXR1cm4gMTsKKwkJfQorCX0KKworCXNwdGUgPSBfX3BhKHNoYWRvd19wYWdlLT5zcHQpIHwgUFRfUFJFU0VOVF9NQVNLIHwgUFRfQUNDRVNTRURfTUFTSworCQl8IFBUX1dSSVRBQkxFX01BU0sgfCBQVF9VU0VSX01BU0s7CisJKnNwdGVwID0gc3B0ZTsKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIHU2NCAqRk5BTUUoZmV0Y2gpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3ZhX3QgYWRkciwKLQkJCSBzdHJ1Y3QgZ3Vlc3Rfd2Fsa2VyICp3YWxrZXIsCisJCQkgc3RydWN0IGd1ZXN0X3dhbGtlciAqZ3Vlc3Rfd2Fsa2VyLAogCQkJIGludCB1c2VyX2ZhdWx0LCBpbnQgd3JpdGVfZmF1bHQsIGludCBsYXJnZXBhZ2UsCiAJCQkgaW50ICpwdHdyaXRlLCBwZm5fdCBwZm4pCiB7Ci0JaHBhX3Qgc2hhZG93X2FkZHI7Ci0JaW50IGxldmVsOwotCXU2NCAqc2hhZG93X2VudDsKLQl1bnNpZ25lZCBhY2Nlc3MgPSB3YWxrZXItPnB0X2FjY2VzczsKKwlzdHJ1Y3Qgc2hhZG93X3dhbGtlciB3YWxrZXIgPSB7CisJCS53YWxrZXIgPSB7IC5lbnRyeSA9IEZOQU1FKHNoYWRvd193YWxrX2VudHJ5KSwgfSwKKwkJLmd1ZXN0X3dhbGtlciA9IGd1ZXN0X3dhbGtlciwKKwkJLnVzZXJfZmF1bHQgPSB1c2VyX2ZhdWx0LAorCQkud3JpdGVfZmF1bHQgPSB3cml0ZV9mYXVsdCwKKwkJLmxhcmdlcGFnZSA9IGxhcmdlcGFnZSwKKwkJLnB0d3JpdGUgPSBwdHdyaXRlLAorCQkucGZuID0gcGZuLAorCX07CiAKLQlpZiAoIWlzX3ByZXNlbnRfcHRlKHdhbGtlci0+cHRlc1t3YWxrZXItPmxldmVsIC0gMV0pKQorCWlmICghaXNfcHJlc2VudF9wdGUoZ3Vlc3Rfd2Fsa2VyLT5wdGVzW2d1ZXN0X3dhbGtlci0+bGV2ZWwgLSAxXSkpCiAJCXJldHVybiBOVUxMOwogCi0Jc2hhZG93X2FkZHIgPSB2Y3B1LT5hcmNoLm1tdS5yb290X2hwYTsKLQlsZXZlbCA9IHZjcHUtPmFyY2gubW11LnNoYWRvd19yb290X2xldmVsOwotCWlmIChsZXZlbCA9PSBQVDMyRV9ST09UX0xFVkVMKSB7Ci0JCXNoYWRvd19hZGRyID0gdmNwdS0+YXJjaC5tbXUucGFlX3Jvb3RbKGFkZHIgPj4gMzApICYgM107Ci0JCXNoYWRvd19hZGRyICY9IFBUNjRfQkFTRV9BRERSX01BU0s7Ci0JCS0tbGV2ZWw7Ci0JfQorCXdhbGtfc2hhZG93KCZ3YWxrZXIud2Fsa2VyLCB2Y3B1LCBhZGRyKTsKIAotCWZvciAoOyA7IGxldmVsLS0pIHsKLQkJdTMyIGluZGV4ID0gU0hBRE9XX1BUX0lOREVYKGFkZHIsIGxldmVsKTsKLQkJc3RydWN0IGt2bV9tbXVfcGFnZSAqc2hhZG93X3BhZ2U7Ci0JCXU2NCBzaGFkb3dfcHRlOwotCQlpbnQgbWV0YXBoeXNpY2FsOwotCQlnZm5fdCB0YWJsZV9nZm47Ci0KLQkJc2hhZG93X2VudCA9ICgodTY0ICopX192YShzaGFkb3dfYWRkcikpICsgaW5kZXg7Ci0JCWlmIChsZXZlbCA9PSBQVF9QQUdFX1RBQkxFX0xFVkVMKQotCQkJYnJlYWs7Ci0KLQkJaWYgKGxhcmdlcGFnZSAmJiBsZXZlbCA9PSBQVF9ESVJFQ1RPUllfTEVWRUwpCi0JCQlicmVhazsKLQotCQlpZiAoaXNfc2hhZG93X3ByZXNlbnRfcHRlKCpzaGFkb3dfZW50KQotCQkgICAgJiYgIWlzX2xhcmdlX3B0ZSgqc2hhZG93X2VudCkpIHsKLQkJCXNoYWRvd19hZGRyID0gKnNoYWRvd19lbnQgJiBQVDY0X0JBU0VfQUREUl9NQVNLOwotCQkJY29udGludWU7Ci0JCX0KLQotCQlpZiAoaXNfbGFyZ2VfcHRlKCpzaGFkb3dfZW50KSkKLQkJCXJtYXBfcmVtb3ZlKHZjcHUtPmt2bSwgc2hhZG93X2VudCk7Ci0KLQkJaWYgKGxldmVsIC0gMSA9PSBQVF9QQUdFX1RBQkxFX0xFVkVMCi0JCSAgICAmJiB3YWxrZXItPmxldmVsID09IFBUX0RJUkVDVE9SWV9MRVZFTCkgewotCQkJbWV0YXBoeXNpY2FsID0gMTsKLQkJCWlmICghaXNfZGlydHlfcHRlKHdhbGtlci0+cHRlc1tsZXZlbCAtIDFdKSkKLQkJCQlhY2Nlc3MgJj0gfkFDQ19XUklURV9NQVNLOwotCQkJdGFibGVfZ2ZuID0gZ3B0ZV90b19nZm4od2Fsa2VyLT5wdGVzW2xldmVsIC0gMV0pOwotCQl9IGVsc2UgewotCQkJbWV0YXBoeXNpY2FsID0gMDsKLQkJCXRhYmxlX2dmbiA9IHdhbGtlci0+dGFibGVfZ2ZuW2xldmVsIC0gMl07Ci0JCX0KLQkJc2hhZG93X3BhZ2UgPSBrdm1fbW11X2dldF9wYWdlKHZjcHUsIHRhYmxlX2dmbiwgYWRkciwgbGV2ZWwtMSwKLQkJCQkJICAgICAgIG1ldGFwaHlzaWNhbCwgYWNjZXNzLAotCQkJCQkgICAgICAgc2hhZG93X2VudCk7Ci0JCWlmICghbWV0YXBoeXNpY2FsKSB7Ci0JCQlpbnQgcjsKLQkJCXB0X2VsZW1lbnRfdCBjdXJyX3B0ZTsKLQkJCXIgPSBrdm1fcmVhZF9ndWVzdF9hdG9taWModmNwdS0+a3ZtLAotCQkJCQkJICB3YWxrZXItPnB0ZV9ncGFbbGV2ZWwgLSAyXSwKLQkJCQkJCSAgJmN1cnJfcHRlLCBzaXplb2YoY3Vycl9wdGUpKTsKLQkJCWlmIChyIHx8IGN1cnJfcHRlICE9IHdhbGtlci0+cHRlc1tsZXZlbCAtIDJdKSB7Ci0JCQkJa3ZtX3JlbGVhc2VfcGZuX2NsZWFuKHBmbik7Ci0JCQkJcmV0dXJuIE5VTEw7Ci0JCQl9Ci0JCX0KLQkJc2hhZG93X2FkZHIgPSBfX3BhKHNoYWRvd19wYWdlLT5zcHQpOwotCQlzaGFkb3dfcHRlID0gc2hhZG93X2FkZHIgfCBQVF9QUkVTRU5UX01BU0sgfCBQVF9BQ0NFU1NFRF9NQVNLCi0JCQl8IFBUX1dSSVRBQkxFX01BU0sgfCBQVF9VU0VSX01BU0s7Ci0JCXNldF9zaGFkb3dfcHRlKHNoYWRvd19lbnQsIHNoYWRvd19wdGUpOwotCX0KLQotCW1tdV9zZXRfc3B0ZSh2Y3B1LCBzaGFkb3dfZW50LCBhY2Nlc3MsIHdhbGtlci0+cHRlX2FjY2VzcyAmIGFjY2VzcywKLQkJICAgICB1c2VyX2ZhdWx0LCB3cml0ZV9mYXVsdCwKLQkJICAgICB3YWxrZXItPnB0ZXNbd2Fsa2VyLT5sZXZlbC0xXSAmIFBUX0RJUlRZX01BU0ssCi0JCSAgICAgcHR3cml0ZSwgbGFyZ2VwYWdlLCB3YWxrZXItPmdmbiwgcGZuLCBmYWxzZSk7Ci0KLQlyZXR1cm4gc2hhZG93X2VudDsKKwlyZXR1cm4gd2Fsa2VyLnNwdGVwOwogfQogCiAvKgpAQCAtNDA3LDcgKzQxNyw2IEBACiAJCXJldHVybiAwOwogCX0KIAotCWRvd25fcmVhZCgmY3VycmVudC0+bW0tPm1tYXBfc2VtKTsKIAlpZiAod2Fsa2VyLmxldmVsID09IFBUX0RJUkVDVE9SWV9MRVZFTCkgewogCQlnZm5fdCBsYXJnZV9nZm47CiAJCWxhcmdlX2dmbiA9IHdhbGtlci5nZm4gJiB+KEtWTV9QQUdFU19QRVJfSFBBR0UtMSk7CkBAIC00MTcsOSArNDI2LDggQEAKIAkJfQogCX0KIAltbXVfc2VxID0gdmNwdS0+a3ZtLT5tbXVfbm90aWZpZXJfc2VxOwotCS8qIGltcGxpY2l0IG1iKCksIHdlJ2xsIHJlYWQgYmVmb3JlIFBUIGxvY2sgaXMgdW5sb2NrZWQgKi8KKwlzbXBfcm1iKCk7CiAJcGZuID0gZ2ZuX3RvX3Bmbih2Y3B1LT5rdm0sIHdhbGtlci5nZm4pOwotCXVwX3JlYWQoJmN1cnJlbnQtPm1tLT5tbWFwX3NlbSk7CiAKIAkvKiBtbWlvICovCiAJaWYgKGlzX2Vycm9yX3BmbihwZm4pKSB7CkBAIC00NTMsNiArNDYxLDMxIEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgRk5BTUUoc2hhZG93X2ludmxwZ19lbnRyeSkoc3RydWN0IGt2bV9zaGFkb3dfd2FsayAqX3N3LAorCQkJCSAgICAgIHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IGFkZHIsCisJCQkJICAgICAgdTY0ICpzcHRlcCwgaW50IGxldmVsKQoreworCisJaWYgKGxldmVsID09IFBUX1BBR0VfVEFCTEVfTEVWRUwpIHsKKwkJaWYgKGlzX3NoYWRvd19wcmVzZW50X3B0ZSgqc3B0ZXApKQorCQkJcm1hcF9yZW1vdmUodmNwdS0+a3ZtLCBzcHRlcCk7CisJCXNldF9zaGFkb3dfcHRlKHNwdGVwLCBzaGFkb3dfdHJhcF9ub25wcmVzZW50X3B0ZSk7CisJCXJldHVybiAxOworCX0KKwlpZiAoIWlzX3NoYWRvd19wcmVzZW50X3B0ZSgqc3B0ZXApKQorCQlyZXR1cm4gMTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgRk5BTUUoaW52bHBnKShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGd2YV90IGd2YSkKK3sKKwlzdHJ1Y3Qgc2hhZG93X3dhbGtlciB3YWxrZXIgPSB7CisJCS53YWxrZXIgPSB7IC5lbnRyeSA9IEZOQU1FKHNoYWRvd19pbnZscGdfZW50cnkpLCB9LAorCX07CisKKwl3YWxrX3NoYWRvdygmd2Fsa2VyLndhbGtlciwgdmNwdSwgZ3ZhKTsKK30KKwogc3RhdGljIGdwYV90IEZOQU1FKGd2YV90b19ncGEpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3ZhX3QgdmFkZHIpCiB7CiAJc3RydWN0IGd1ZXN0X3dhbGtlciB3YWxrZXI7CkBAIC00OTksMTIgKzUzMiw2NiBAQAogCX0KIH0KIAorLyoKKyAqIFVzaW5nIHRoZSBjYWNoZWQgaW5mb3JtYXRpb24gZnJvbSBzcC0+Z2ZucyBpcyBzYWZlIGJlY2F1c2U6CisgKiAtIFRoZSBzcHRlIGhhcyBhIHJlZmVyZW5jZSB0byB0aGUgc3RydWN0IHBhZ2UsIHNvIHRoZSBwZm4gZm9yIGEgZ2l2ZW4gZ2ZuCisgKiAgIGNhbid0IGNoYW5nZSB1bmxlc3MgYWxsIHNwdGVzIHBvaW50aW5nIHRvIGl0IGFyZSBudWtlZCBmaXJzdC4KKyAqIC0gQWxpYXMgY2hhbmdlcyB6YXAgdGhlIGVudGlyZSBzaGFkb3cgY2FjaGUuCisgKi8KK3N0YXRpYyBpbnQgRk5BTUUoc3luY19wYWdlKShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fbW11X3BhZ2UgKnNwKQoreworCWludCBpLCBvZmZzZXQsIG5yX3ByZXNlbnQ7CisKKwlvZmZzZXQgPSBucl9wcmVzZW50ID0gMDsKKworCWlmIChQVFRZUEUgPT0gMzIpCisJCW9mZnNldCA9IHNwLT5yb2xlLnF1YWRyYW50IDw8IFBUNjRfTEVWRUxfQklUUzsKKworCWZvciAoaSA9IDA7IGkgPCBQVDY0X0VOVF9QRVJfUEFHRTsgaSsrKSB7CisJCXVuc2lnbmVkIHB0ZV9hY2Nlc3M7CisJCXB0X2VsZW1lbnRfdCBncHRlOworCQlncGFfdCBwdGVfZ3BhOworCQlnZm5fdCBnZm4gPSBzcC0+Z2Zuc1tpXTsKKworCQlpZiAoIWlzX3NoYWRvd19wcmVzZW50X3B0ZShzcC0+c3B0W2ldKSkKKwkJCWNvbnRpbnVlOworCisJCXB0ZV9ncGEgPSBnZm5fdG9fZ3BhKHNwLT5nZm4pOworCQlwdGVfZ3BhICs9IChpK29mZnNldCkgKiBzaXplb2YocHRfZWxlbWVudF90KTsKKworCQlpZiAoa3ZtX3JlYWRfZ3Vlc3RfYXRvbWljKHZjcHUtPmt2bSwgcHRlX2dwYSwgJmdwdGUsCisJCQkJCSAgc2l6ZW9mKHB0X2VsZW1lbnRfdCkpKQorCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJaWYgKGdwdGVfdG9fZ2ZuKGdwdGUpICE9IGdmbiB8fCAhaXNfcHJlc2VudF9wdGUoZ3B0ZSkgfHwKKwkJICAgICEoZ3B0ZSAmIFBUX0FDQ0VTU0VEX01BU0spKSB7CisJCQl1NjQgbm9ucHJlc2VudDsKKworCQkJcm1hcF9yZW1vdmUodmNwdS0+a3ZtLCAmc3AtPnNwdFtpXSk7CisJCQlpZiAoaXNfcHJlc2VudF9wdGUoZ3B0ZSkpCisJCQkJbm9ucHJlc2VudCA9IHNoYWRvd190cmFwX25vbnByZXNlbnRfcHRlOworCQkJZWxzZQorCQkJCW5vbnByZXNlbnQgPSBzaGFkb3dfbm90cmFwX25vbnByZXNlbnRfcHRlOworCQkJc2V0X3NoYWRvd19wdGUoJnNwLT5zcHRbaV0sIG5vbnByZXNlbnQpOworCQkJY29udGludWU7CisJCX0KKworCQlucl9wcmVzZW50Kys7CisJCXB0ZV9hY2Nlc3MgPSBzcC0+cm9sZS5hY2Nlc3MgJiBGTkFNRShncHRlX2FjY2VzcykodmNwdSwgZ3B0ZSk7CisJCXNldF9zcHRlKHZjcHUsICZzcC0+c3B0W2ldLCBwdGVfYWNjZXNzLCAwLCAwLAorCQkJIGlzX2RpcnR5X3B0ZShncHRlKSwgMCwgZ2ZuLAorCQkJIHNwdGVfdG9fcGZuKHNwLT5zcHRbaV0pLCB0cnVlLCBmYWxzZSk7CisJfQorCisJcmV0dXJuICFucl9wcmVzZW50OworfQorCiAjdW5kZWYgcHRfZWxlbWVudF90CiAjdW5kZWYgZ3Vlc3Rfd2Fsa2VyCisjdW5kZWYgc2hhZG93X3dhbGtlcgogI3VuZGVmIEZOQU1FCiAjdW5kZWYgUFRfQkFTRV9BRERSX01BU0sKICN1bmRlZiBQVF9JTkRFWAotI3VuZGVmIFNIQURPV19QVF9JTkRFWAogI3VuZGVmIFBUX0xFVkVMX01BU0sKICN1bmRlZiBQVF9ESVJfQkFTRV9BRERSX01BU0sKICN1bmRlZiBQVF9MRVZFTF9CSVRTCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vc3ZtLmMgYi9hcmNoL3g4Ni9rdm0vc3ZtLmMKaW5kZXggODIzM2I4Ni4uOWM0Y2U2NSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL3N2bS5jCisrKyBiL2FyY2gveDg2L2t2bS9zdm0uYwpAQCAtMTgsNiArMTgsNyBAQAogI2luY2x1ZGUgImt2bV9zdm0uaCIKICNpbmNsdWRlICJpcnEuaCIKICNpbmNsdWRlICJtbXUuaCIKKyNpbmNsdWRlICJrdm1fY2FjaGVfcmVncy5oIgogCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CkBAIC0zNSwxMCArMzYsNiBAQAogI2RlZmluZSBJT1BNX0FMTE9DX09SREVSIDIKICNkZWZpbmUgTVNSUE1fQUxMT0NfT1JERVIgMQogCi0jZGVmaW5lIERCX1ZFQ1RPUiAxCi0jZGVmaW5lIFVEX1ZFQ1RPUiA2Ci0jZGVmaW5lIEdQX1ZFQ1RPUiAxMwotCiAjZGVmaW5lIERSN19HRF9NQVNLICgxIDw8IDEzKQogI2RlZmluZSBEUjZfQkRfTUFTSyAoMSA8PCAxMykKIApAQCAtNDcsNyArNDQsNyBAQAogCiAjZGVmaW5lIFNWTV9GRUFUVVJFX05QVCAgKDEgPDwgMCkKICNkZWZpbmUgU1ZNX0ZFQVRVUkVfTEJSViAoMSA8PCAxKQotI2RlZmluZSBTVk1fREVBVFVSRV9TVk1MICgxIDw8IDIpCisjZGVmaW5lIFNWTV9GRUFUVVJFX1NWTUwgKDEgPDwgMikKIAogI2RlZmluZSBERUJVR0NUTF9SRVNFUlZFRF9CSVRTICh+KDB4M2ZVTEwpKQogCkBAIC0yMzYsMTMgKzIzMywxMSBAQAogCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IE5PUFxuIiwgX19mdW5jX18pOwogCQlyZXR1cm47CiAJfQotCWlmIChzdm0tPm5leHRfcmlwIC0gc3ZtLT52bWNiLT5zYXZlLnJpcCA+IE1BWF9JTlNUX1NJWkUpCi0JCXByaW50ayhLRVJOX0VSUiAiJXM6IGlwIDB4JWxseCBuZXh0IDB4JWxseFxuIiwKLQkJICAgICAgIF9fZnVuY19fLAotCQkgICAgICAgc3ZtLT52bWNiLT5zYXZlLnJpcCwKLQkJICAgICAgIHN2bS0+bmV4dF9yaXApOworCWlmIChzdm0tPm5leHRfcmlwIC0ga3ZtX3JpcF9yZWFkKHZjcHUpID4gTUFYX0lOU1RfU0laRSkKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogaXAgMHglbHggbmV4dCAweCVsbHhcbiIsCisJCSAgICAgICBfX2Z1bmNfXywga3ZtX3JpcF9yZWFkKHZjcHUpLCBzdm0tPm5leHRfcmlwKTsKIAotCXZjcHUtPmFyY2gucmlwID0gc3ZtLT52bWNiLT5zYXZlLnJpcCA9IHN2bS0+bmV4dF9yaXA7CisJa3ZtX3JpcF93cml0ZSh2Y3B1LCBzdm0tPm5leHRfcmlwKTsKIAlzdm0tPnZtY2ItPmNvbnRyb2wuaW50X3N0YXRlICY9IH5TVk1fSU5URVJSVVBUX1NIQURPV19NQVNLOwogCiAJdmNwdS0+YXJjaC5pbnRlcnJ1cHRfd2luZG93X29wZW4gPSAxOwpAQCAtNTMwLDYgKzUyNSw3IEBACiAJCQkJKDFVTEwgPDwgSU5URVJDRVBUX0NQVUlEKSB8CiAJCQkJKDFVTEwgPDwgSU5URVJDRVBUX0lOVkQpIHwKIAkJCQkoMVVMTCA8PCBJTlRFUkNFUFRfSExUKSB8CisJCQkJKDFVTEwgPDwgSU5URVJDRVBUX0lOVkxQRykgfAogCQkJCSgxVUxMIDw8IElOVEVSQ0VQVF9JTlZMUEdBKSB8CiAJCQkJKDFVTEwgPDwgSU5URVJDRVBUX0lPSU9fUFJPVCkgfAogCQkJCSgxVUxMIDw8IElOVEVSQ0VQVF9NU1JfUFJPVCkgfApAQCAtNTgxLDYgKzU3Nyw3IEBACiAJc2F2ZS0+ZHI3ID0gMHg0MDA7CiAJc2F2ZS0+cmZsYWdzID0gMjsKIAlzYXZlLT5yaXAgPSAweDAwMDBmZmYwOworCXN2bS0+dmNwdS5hcmNoLnJlZ3NbVkNQVV9SRUdTX1JJUF0gPSBzYXZlLT5yaXA7CiAKIAkvKgogCSAqIGNyMCB2YWwgb24gY3B1IGluaXQgc2hvdWxkIGJlIDB4NjAwMDAwMTAsIHdlIGVuYWJsZSBjcHUKQEAgLTU5Myw3ICs1OTAsOCBAQAogCWlmIChucHRfZW5hYmxlZCkgewogCQkvKiBTZXR1cCBWTUNCIGZvciBOZXN0ZWQgUGFnaW5nICovCiAJCWNvbnRyb2wtPm5lc3RlZF9jdGwgPSAxOwotCQljb250cm9sLT5pbnRlcmNlcHQgJj0gfigxVUxMIDw8IElOVEVSQ0VQVF9UQVNLX1NXSVRDSCk7CisJCWNvbnRyb2wtPmludGVyY2VwdCAmPSB+KCgxVUxMIDw8IElOVEVSQ0VQVF9UQVNLX1NXSVRDSCkgfAorCQkJCQkoMVVMTCA8PCBJTlRFUkNFUFRfSU5WTFBHKSk7CiAJCWNvbnRyb2wtPmludGVyY2VwdF9leGNlcHRpb25zICY9IH4oMSA8PCBQRl9WRUNUT1IpOwogCQljb250cm9sLT5pbnRlcmNlcHRfY3JfcmVhZCAmPSB+KElOVEVSQ0VQVF9DUjBfTUFTS3wKIAkJCQkJCUlOVEVSQ0VQVF9DUjNfTUFTSyk7CkBAIC02MTUsMTAgKzYxMywxMiBAQAogCWluaXRfdm1jYihzdm0pOwogCiAJaWYgKHZjcHUtPnZjcHVfaWQgIT0gMCkgewotCQlzdm0tPnZtY2ItPnNhdmUucmlwID0gMDsKKwkJa3ZtX3JpcF93cml0ZSh2Y3B1LCAwKTsKIAkJc3ZtLT52bWNiLT5zYXZlLmNzLmJhc2UgPSBzdm0tPnZjcHUuYXJjaC5zaXBpX3ZlY3RvciA8PCAxMjsKIAkJc3ZtLT52bWNiLT5zYXZlLmNzLnNlbGVjdG9yID0gc3ZtLT52Y3B1LmFyY2guc2lwaV92ZWN0b3IgPDwgODsKIAl9CisJdmNwdS0+YXJjaC5yZWdzX2F2YWlsID0gfjA7CisJdmNwdS0+YXJjaC5yZWdzX2RpcnR5ID0gfjA7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTcyMSwyMyArNzIxLDYgQEAKIAlyZHRzY2xsKHZjcHUtPmFyY2guaG9zdF90c2MpOwogfQogCi1zdGF0aWMgdm9pZCBzdm1fY2FjaGVfcmVncyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCi17Ci0Jc3RydWN0IHZjcHVfc3ZtICpzdm0gPSB0b19zdm0odmNwdSk7Ci0KLQl2Y3B1LT5hcmNoLnJlZ3NbVkNQVV9SRUdTX1JBWF0gPSBzdm0tPnZtY2ItPnNhdmUucmF4OwotCXZjcHUtPmFyY2gucmVnc1tWQ1BVX1JFR1NfUlNQXSA9IHN2bS0+dm1jYi0+c2F2ZS5yc3A7Ci0JdmNwdS0+YXJjaC5yaXAgPSBzdm0tPnZtY2ItPnNhdmUucmlwOwotfQotCi1zdGF0aWMgdm9pZCBzdm1fZGVjYWNoZV9yZWdzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKLXsKLQlzdHJ1Y3QgdmNwdV9zdm0gKnN2bSA9IHRvX3N2bSh2Y3B1KTsKLQlzdm0tPnZtY2ItPnNhdmUucmF4ID0gdmNwdS0+YXJjaC5yZWdzW1ZDUFVfUkVHU19SQVhdOwotCXN2bS0+dm1jYi0+c2F2ZS5yc3AgPSB2Y3B1LT5hcmNoLnJlZ3NbVkNQVV9SRUdTX1JTUF07Ci0Jc3ZtLT52bWNiLT5zYXZlLnJpcCA9IHZjcHUtPmFyY2gucmlwOwotfQotCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBzdm1fZ2V0X3JmbGFncyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7CiAJcmV0dXJuIHRvX3N2bSh2Y3B1KS0+dm1jYi0+c2F2ZS5yZmxhZ3M7CkBAIC0xMDQwLDcgKzEwMjMsNyBAQAogCWlmIChucHRfZW5hYmxlZCkKIAkJc3ZtX2ZsdXNoX3RsYigmc3ZtLT52Y3B1KTsKIAotCWlmIChldmVudF9pbmplY3Rpb24pCisJaWYgKCFucHRfZW5hYmxlZCAmJiBldmVudF9pbmplY3Rpb24pCiAJCWt2bV9tbXVfdW5wcm90ZWN0X3BhZ2VfdmlydCgmc3ZtLT52Y3B1LCBmYXVsdF9hZGRyZXNzKTsKIAlyZXR1cm4ga3ZtX21tdV9wYWdlX2ZhdWx0KCZzdm0tPnZjcHUsIGZhdWx0X2FkZHJlc3MsIGVycm9yX2NvZGUpOwogfQpAQCAtMTEzOSwxNCArMTEyMiwxNCBAQAogCiBzdGF0aWMgaW50IGhhbHRfaW50ZXJjZXB0aW9uKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtLCBzdHJ1Y3Qga3ZtX3J1biAqa3ZtX3J1bikKIHsKLQlzdm0tPm5leHRfcmlwID0gc3ZtLT52bWNiLT5zYXZlLnJpcCArIDE7CisJc3ZtLT5uZXh0X3JpcCA9IGt2bV9yaXBfcmVhZCgmc3ZtLT52Y3B1KSArIDE7CiAJc2tpcF9lbXVsYXRlZF9pbnN0cnVjdGlvbigmc3ZtLT52Y3B1KTsKIAlyZXR1cm4ga3ZtX2VtdWxhdGVfaGFsdCgmc3ZtLT52Y3B1KTsKIH0KIAogc3RhdGljIGludCB2bW1jYWxsX2ludGVyY2VwdGlvbihzdHJ1Y3QgdmNwdV9zdm0gKnN2bSwgc3RydWN0IGt2bV9ydW4gKmt2bV9ydW4pCiB7Ci0Jc3ZtLT5uZXh0X3JpcCA9IHN2bS0+dm1jYi0+c2F2ZS5yaXAgKyAzOworCXN2bS0+bmV4dF9yaXAgPSBrdm1fcmlwX3JlYWQoJnN2bS0+dmNwdSkgKyAzOwogCXNraXBfZW11bGF0ZWRfaW5zdHJ1Y3Rpb24oJnN2bS0+dmNwdSk7CiAJa3ZtX2VtdWxhdGVfaHlwZXJjYWxsKCZzdm0tPnZjcHUpOwogCXJldHVybiAxOwpAQCAtMTE3OCwxMSArMTE2MSwxOCBAQAogCiBzdGF0aWMgaW50IGNwdWlkX2ludGVyY2VwdGlvbihzdHJ1Y3QgdmNwdV9zdm0gKnN2bSwgc3RydWN0IGt2bV9ydW4gKmt2bV9ydW4pCiB7Ci0Jc3ZtLT5uZXh0X3JpcCA9IHN2bS0+dm1jYi0+c2F2ZS5yaXAgKyAyOworCXN2bS0+bmV4dF9yaXAgPSBrdm1fcmlwX3JlYWQoJnN2bS0+dmNwdSkgKyAyOwogCWt2bV9lbXVsYXRlX2NwdWlkKCZzdm0tPnZjcHUpOwogCXJldHVybiAxOwogfQogCitzdGF0aWMgaW50IGludmxwZ19pbnRlcmNlcHRpb24oc3RydWN0IHZjcHVfc3ZtICpzdm0sIHN0cnVjdCBrdm1fcnVuICprdm1fcnVuKQoreworCWlmIChlbXVsYXRlX2luc3RydWN0aW9uKCZzdm0tPnZjcHUsIGt2bV9ydW4sIDAsIDAsIDApICE9IEVNVUxBVEVfRE9ORSkKKwkJcHJfdW5pbXBsKCZzdm0tPnZjcHUsICIlczogZmFpbGVkXG4iLCBfX2Z1bmNfXyk7CisJcmV0dXJuIDE7Cit9CisKIHN0YXRpYyBpbnQgZW11bGF0ZV9vbl9pbnRlcmNlcHRpb24oc3RydWN0IHZjcHVfc3ZtICpzdm0sCiAJCQkJICAgc3RydWN0IGt2bV9ydW4gKmt2bV9ydW4pCiB7CkBAIC0xMjczLDkgKzEyNjMsOSBAQAogCQlLVk1UUkFDRV8zRChNU1JfUkVBRCwgJnN2bS0+dmNwdSwgZWN4LCAodTMyKWRhdGEsCiAJCQkgICAgKHUzMikoZGF0YSA+PiAzMiksIGhhbmRsZXIpOwogCi0JCXN2bS0+dm1jYi0+c2F2ZS5yYXggPSBkYXRhICYgMHhmZmZmZmZmZjsKKwkJc3ZtLT52Y3B1LmFyY2gucmVnc1tWQ1BVX1JFR1NfUkFYXSA9IGRhdGEgJiAweGZmZmZmZmZmOwogCQlzdm0tPnZjcHUuYXJjaC5yZWdzW1ZDUFVfUkVHU19SRFhdID0gZGF0YSA+PiAzMjsKLQkJc3ZtLT5uZXh0X3JpcCA9IHN2bS0+dm1jYi0+c2F2ZS5yaXAgKyAyOworCQlzdm0tPm5leHRfcmlwID0ga3ZtX3JpcF9yZWFkKCZzdm0tPnZjcHUpICsgMjsKIAkJc2tpcF9lbXVsYXRlZF9pbnN0cnVjdGlvbigmc3ZtLT52Y3B1KTsKIAl9CiAJcmV0dXJuIDE7CkBAIC0xMzU5LDEzICsxMzQ5LDEzIEBACiBzdGF0aWMgaW50IHdybXNyX2ludGVyY2VwdGlvbihzdHJ1Y3QgdmNwdV9zdm0gKnN2bSwgc3RydWN0IGt2bV9ydW4gKmt2bV9ydW4pCiB7CiAJdTMyIGVjeCA9IHN2bS0+dmNwdS5hcmNoLnJlZ3NbVkNQVV9SRUdTX1JDWF07Ci0JdTY0IGRhdGEgPSAoc3ZtLT52bWNiLT5zYXZlLnJheCAmIC0xdSkKKwl1NjQgZGF0YSA9IChzdm0tPnZjcHUuYXJjaC5yZWdzW1ZDUFVfUkVHU19SQVhdICYgLTF1KQogCQl8ICgodTY0KShzdm0tPnZjcHUuYXJjaC5yZWdzW1ZDUFVfUkVHU19SRFhdICYgLTF1KSA8PCAzMik7CiAKIAlLVk1UUkFDRV8zRChNU1JfV1JJVEUsICZzdm0tPnZjcHUsIGVjeCwgKHUzMilkYXRhLCAodTMyKShkYXRhID4+IDMyKSwKIAkJICAgIGhhbmRsZXIpOwogCi0Jc3ZtLT5uZXh0X3JpcCA9IHN2bS0+dm1jYi0+c2F2ZS5yaXAgKyAyOworCXN2bS0+bmV4dF9yaXAgPSBrdm1fcmlwX3JlYWQoJnN2bS0+dmNwdSkgKyAyOwogCWlmIChzdm1fc2V0X21zcigmc3ZtLT52Y3B1LCBlY3gsIGRhdGEpKQogCQlrdm1faW5qZWN0X2dwKCZzdm0tPnZjcHUsIDApOwogCWVsc2UKQEAgLTE0MzYsNyArMTQyNiw3IEBACiAJW1NWTV9FWElUX0NQVUlEXQkJCT0gY3B1aWRfaW50ZXJjZXB0aW9uLAogCVtTVk1fRVhJVF9JTlZEXSAgICAgICAgICAgICAgICAgICAgICAgICA9IGVtdWxhdGVfb25faW50ZXJjZXB0aW9uLAogCVtTVk1fRVhJVF9ITFRdCQkJCT0gaGFsdF9pbnRlcmNlcHRpb24sCi0JW1NWTV9FWElUX0lOVkxQR10JCQk9IGVtdWxhdGVfb25faW50ZXJjZXB0aW9uLAorCVtTVk1fRVhJVF9JTlZMUEddCQkJPSBpbnZscGdfaW50ZXJjZXB0aW9uLAogCVtTVk1fRVhJVF9JTlZMUEdBXQkJCT0gaW52YWxpZF9vcF9pbnRlcmNlcHRpb24sCiAJW1NWTV9FWElUX0lPSU9dIAkJICAJPSBpb19pbnRlcmNlcHRpb24sCiAJW1NWTV9FWElUX01TUl0JCQkJPSBtc3JfaW50ZXJjZXB0aW9uLApAQCAtMTUzOCw2ICsxNTI4LDcgQEAKIAogCUtWTVRSQUNFXzFEKElOSl9WSVJRLCAmc3ZtLT52Y3B1LCAodTMyKWlycSwgaGFuZGxlcik7CiAKKwkrK3N2bS0+dmNwdS5zdGF0LmlycV9pbmplY3Rpb25zOwogCWNvbnRyb2wgPSAmc3ZtLT52bWNiLT5jb250cm9sOwogCWNvbnRyb2wtPmludF92ZWN0b3IgPSBpcnE7CiAJY29udHJvbC0+aW50X2N0bCAmPSB+Vl9JTlRSX1BSSU9fTUFTSzsKQEAgLTE3MTYsNiArMTcwNywxMiBAQAogCXN2bS0+dm1jYi0+Y29udHJvbC5pbnRfY3RsIHw9IGNyOCAmIFZfVFBSX01BU0s7CiB9CiAKKyNpZmRlZiBDT05GSUdfWDg2XzY0CisjZGVmaW5lIFIgInIiCisjZWxzZQorI2RlZmluZSBSICJlIgorI2VuZGlmCisKIHN0YXRpYyB2b2lkIHN2bV92Y3B1X3J1bihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fcnVuICprdm1fcnVuKQogewogCXN0cnVjdCB2Y3B1X3N2bSAqc3ZtID0gdG9fc3ZtKHZjcHUpOwpAQCAtMTcyMyw2ICsxNzIwLDEwIEBACiAJdTE2IGdzX3NlbGVjdG9yOwogCXUxNiBsZHRfc2VsZWN0b3I7CiAKKwlzdm0tPnZtY2ItPnNhdmUucmF4ID0gdmNwdS0+YXJjaC5yZWdzW1ZDUFVfUkVHU19SQVhdOworCXN2bS0+dm1jYi0+c2F2ZS5yc3AgPSB2Y3B1LT5hcmNoLnJlZ3NbVkNQVV9SRUdTX1JTUF07CisJc3ZtLT52bWNiLT5zYXZlLnJpcCA9IHZjcHUtPmFyY2gucmVnc1tWQ1BVX1JFR1NfUklQXTsKKwogCXByZV9zdm1fcnVuKHN2bSk7CiAKIAlzeW5jX2xhcGljX3RvX2NyOCh2Y3B1KTsKQEAgLTE3NTAsMTkgKzE3NTEsMTQgQEAKIAlsb2NhbF9pcnFfZW5hYmxlKCk7CiAKIAlhc20gdm9sYXRpbGUgKAorCQkicHVzaCAlJSJSImJwOyBcblx0IgorCQkibW92ICVjW3JieF0oJVtzdm1dKSwgJSUiUiJieCBcblx0IgorCQkibW92ICVjW3JjeF0oJVtzdm1dKSwgJSUiUiJjeCBcblx0IgorCQkibW92ICVjW3JkeF0oJVtzdm1dKSwgJSUiUiJkeCBcblx0IgorCQkibW92ICVjW3JzaV0oJVtzdm1dKSwgJSUiUiJzaSBcblx0IgorCQkibW92ICVjW3JkaV0oJVtzdm1dKSwgJSUiUiJkaSBcblx0IgorCQkibW92ICVjW3JicF0oJVtzdm1dKSwgJSUiUiJicCBcblx0IgogI2lmZGVmIENPTkZJR19YODZfNjQKLQkJInB1c2ggJSVyYnA7IFxuXHQiCi0jZWxzZQotCQkicHVzaCAlJWVicDsgXG5cdCIKLSNlbmRpZgotCi0jaWZkZWYgQ09ORklHX1g4Nl82NAotCQkibW92ICVjW3JieF0oJVtzdm1dKSwgJSVyYnggXG5cdCIKLQkJIm1vdiAlY1tyY3hdKCVbc3ZtXSksICUlcmN4IFxuXHQiCi0JCSJtb3YgJWNbcmR4XSglW3N2bV0pLCAlJXJkeCBcblx0IgotCQkibW92ICVjW3JzaV0oJVtzdm1dKSwgJSVyc2kgXG5cdCIKLQkJIm1vdiAlY1tyZGldKCVbc3ZtXSksICUlcmRpIFxuXHQiCi0JCSJtb3YgJWNbcmJwXSglW3N2bV0pLCAlJXJicCBcblx0IgogCQkibW92ICVjW3I4XSglW3N2bV0pLCAgJSVyOCAgXG5cdCIKIAkJIm1vdiAlY1tyOV0oJVtzdm1dKSwgICUlcjkgIFxuXHQiCiAJCSJtb3YgJWNbcjEwXSglW3N2bV0pLCAlJXIxMCBcblx0IgpAQCAtMTc3MSw0MSArMTc2NywyNCBAQAogCQkibW92ICVjW3IxM10oJVtzdm1dKSwgJSVyMTMgXG5cdCIKIAkJIm1vdiAlY1tyMTRdKCVbc3ZtXSksICUlcjE0IFxuXHQiCiAJCSJtb3YgJWNbcjE1XSglW3N2bV0pLCAlJXIxNSBcblx0IgotI2Vsc2UKLQkJIm1vdiAlY1tyYnhdKCVbc3ZtXSksICUlZWJ4IFxuXHQiCi0JCSJtb3YgJWNbcmN4XSglW3N2bV0pLCAlJWVjeCBcblx0IgotCQkibW92ICVjW3JkeF0oJVtzdm1dKSwgJSVlZHggXG5cdCIKLQkJIm1vdiAlY1tyc2ldKCVbc3ZtXSksICUlZXNpIFxuXHQiCi0JCSJtb3YgJWNbcmRpXSglW3N2bV0pLCAlJWVkaSBcblx0IgotCQkibW92ICVjW3JicF0oJVtzdm1dKSwgJSVlYnAgXG5cdCIKICNlbmRpZgogCi0jaWZkZWYgQ09ORklHX1g4Nl82NAogCQkvKiBFbnRlciBndWVzdCBtb2RlICovCi0JCSJwdXNoICUlcmF4IFxuXHQiCi0JCSJtb3YgJWNbdm1jYl0oJVtzdm1dKSwgJSVyYXggXG5cdCIKKwkJInB1c2ggJSUiUiJheCBcblx0IgorCQkibW92ICVjW3ZtY2JdKCVbc3ZtXSksICUlIlIiYXggXG5cdCIKIAkJX19leChTVk1fVk1MT0FEKSAiXG5cdCIKIAkJX19leChTVk1fVk1SVU4pICJcblx0IgogCQlfX2V4KFNWTV9WTVNBVkUpICJcblx0IgotCQkicG9wICUlcmF4IFxuXHQiCi0jZWxzZQotCQkvKiBFbnRlciBndWVzdCBtb2RlICovCi0JCSJwdXNoICUlZWF4IFxuXHQiCi0JCSJtb3YgJWNbdm1jYl0oJVtzdm1dKSwgJSVlYXggXG5cdCIKLQkJX19leChTVk1fVk1MT0FEKSAiXG5cdCIKLQkJX19leChTVk1fVk1SVU4pICJcblx0IgotCQlfX2V4KFNWTV9WTVNBVkUpICJcblx0IgotCQkicG9wICUlZWF4IFxuXHQiCi0jZW5kaWYKKwkJInBvcCAlJSJSImF4IFxuXHQiCiAKIAkJLyogU2F2ZSBndWVzdCByZWdpc3RlcnMsIGxvYWQgaG9zdCByZWdpc3RlcnMgKi8KKwkJIm1vdiAlJSJSImJ4LCAlY1tyYnhdKCVbc3ZtXSkgXG5cdCIKKwkJIm1vdiAlJSJSImN4LCAlY1tyY3hdKCVbc3ZtXSkgXG5cdCIKKwkJIm1vdiAlJSJSImR4LCAlY1tyZHhdKCVbc3ZtXSkgXG5cdCIKKwkJIm1vdiAlJSJSInNpLCAlY1tyc2ldKCVbc3ZtXSkgXG5cdCIKKwkJIm1vdiAlJSJSImRpLCAlY1tyZGldKCVbc3ZtXSkgXG5cdCIKKwkJIm1vdiAlJSJSImJwLCAlY1tyYnBdKCVbc3ZtXSkgXG5cdCIKICNpZmRlZiBDT05GSUdfWDg2XzY0Ci0JCSJtb3YgJSVyYngsICVjW3JieF0oJVtzdm1dKSBcblx0IgotCQkibW92ICUlcmN4LCAlY1tyY3hdKCVbc3ZtXSkgXG5cdCIKLQkJIm1vdiAlJXJkeCwgJWNbcmR4XSglW3N2bV0pIFxuXHQiCi0JCSJtb3YgJSVyc2ksICVjW3JzaV0oJVtzdm1dKSBcblx0IgotCQkibW92ICUlcmRpLCAlY1tyZGldKCVbc3ZtXSkgXG5cdCIKLQkJIm1vdiAlJXJicCwgJWNbcmJwXSglW3N2bV0pIFxuXHQiCiAJCSJtb3YgJSVyOCwgICVjW3I4XSglW3N2bV0pIFxuXHQiCiAJCSJtb3YgJSVyOSwgICVjW3I5XSglW3N2bV0pIFxuXHQiCiAJCSJtb3YgJSVyMTAsICVjW3IxMF0oJVtzdm1dKSBcblx0IgpAQCAtMTgxNCwxOCArMTc5Myw4IEBACiAJCSJtb3YgJSVyMTMsICVjW3IxM10oJVtzdm1dKSBcblx0IgogCQkibW92ICUlcjE0LCAlY1tyMTRdKCVbc3ZtXSkgXG5cdCIKIAkJIm1vdiAlJXIxNSwgJWNbcjE1XSglW3N2bV0pIFxuXHQiCi0KLQkJInBvcCAgJSVyYnA7IFxuXHQiCi0jZWxzZQotCQkibW92ICUlZWJ4LCAlY1tyYnhdKCVbc3ZtXSkgXG5cdCIKLQkJIm1vdiAlJWVjeCwgJWNbcmN4XSglW3N2bV0pIFxuXHQiCi0JCSJtb3YgJSVlZHgsICVjW3JkeF0oJVtzdm1dKSBcblx0IgotCQkibW92ICUlZXNpLCAlY1tyc2ldKCVbc3ZtXSkgXG5cdCIKLQkJIm1vdiAlJWVkaSwgJWNbcmRpXSglW3N2bV0pIFxuXHQiCi0JCSJtb3YgJSVlYnAsICVjW3JicF0oJVtzdm1dKSBcblx0IgotCi0JCSJwb3AgICUlZWJwOyBcblx0IgogI2VuZGlmCisJCSJwb3AgJSUiUiJicCIKIAkJOgogCQk6IFtzdm1dImEiKHN2bSksCiAJCSAgW3ZtY2JdImkiKG9mZnNldG9mKHN0cnVjdCB2Y3B1X3N2bSwgdm1jYl9wYSkpLApAQCAtMTg0NiwxMSArMTgxNSw5IEBACiAJCSAgW3IxNV0iaSIob2Zmc2V0b2Yoc3RydWN0IHZjcHVfc3ZtLCB2Y3B1LmFyY2gucmVnc1tWQ1BVX1JFR1NfUjE1XSkpCiAjZW5kaWYKIAkJOiAiY2MiLCAibWVtb3J5IgorCQksIFIiYngiLCBSImN4IiwgUiJkeCIsIFIic2kiLCBSImRpIgogI2lmZGVmIENPTkZJR19YODZfNjQKLQkJLCAicmJ4IiwgInJjeCIsICJyZHgiLCAicnNpIiwgInJkaSIKIAkJLCAicjgiLCAicjkiLCAicjEwIiwgInIxMSIgLCAicjEyIiwgInIxMyIsICJyMTQiLCAicjE1IgotI2Vsc2UKLQkJLCAiZWJ4IiwgImVjeCIsICJlZHgiICwgImVzaSIsICJlZGkiCiAjZW5kaWYKIAkJKTsKIApAQCAtMTg1OCw2ICsxODI1LDkgQEAKIAkJbG9hZF9kYl9yZWdzKHN2bS0+aG9zdF9kYl9yZWdzKTsKIAogCXZjcHUtPmFyY2guY3IyID0gc3ZtLT52bWNiLT5zYXZlLmNyMjsKKwl2Y3B1LT5hcmNoLnJlZ3NbVkNQVV9SRUdTX1JBWF0gPSBzdm0tPnZtY2ItPnNhdmUucmF4OworCXZjcHUtPmFyY2gucmVnc1tWQ1BVX1JFR1NfUlNQXSA9IHN2bS0+dm1jYi0+c2F2ZS5yc3A7CisJdmNwdS0+YXJjaC5yZWdzW1ZDUFVfUkVHU19SSVBdID0gc3ZtLT52bWNiLT5zYXZlLnJpcDsKIAogCXdyaXRlX2RyNihzdm0tPmhvc3RfZHI2KTsKIAl3cml0ZV9kcjcoc3ZtLT5ob3N0X2RyNyk7CkBAIC0xODc5LDYgKzE4NDksOCBAQAogCXN2bS0+bmV4dF9yaXAgPSAwOwogfQogCisjdW5kZWYgUgorCiBzdGF0aWMgdm9pZCBzdm1fc2V0X2NyMyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGxvbmcgcm9vdCkKIHsKIAlzdHJ1Y3QgdmNwdV9zdm0gKnN2bSA9IHRvX3N2bSh2Y3B1KTsKQEAgLTE5NzcsOCArMTk0OSw2IEBACiAJLnNldF9nZHQgPSBzdm1fc2V0X2dkdCwKIAkuZ2V0X2RyID0gc3ZtX2dldF9kciwKIAkuc2V0X2RyID0gc3ZtX3NldF9kciwKLQkuY2FjaGVfcmVncyA9IHN2bV9jYWNoZV9yZWdzLAotCS5kZWNhY2hlX3JlZ3MgPSBzdm1fZGVjYWNoZV9yZWdzLAogCS5nZXRfcmZsYWdzID0gc3ZtX2dldF9yZmxhZ3MsCiAJLnNldF9yZmxhZ3MgPSBzdm1fc2V0X3JmbGFncywKIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3ZteC5jIGIvYXJjaC94ODYva3ZtL3ZteC5jCmluZGV4IDcwNDFjYzUuLjI2NDNiNDMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS92bXguYworKysgYi9hcmNoL3g4Ni9rdm0vdm14LmMKQEAgLTI2LDYgKzI2LDggQEAKICNpbmNsdWRlIDxsaW51eC9oaWdobWVtLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgorI2luY2x1ZGUgImt2bV9jYWNoZV9yZWdzLmgiCisjaW5jbHVkZSAieDg2LmgiCiAKICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vZGVzYy5oPgpAQCAtNDcsNiArNDksOSBAQAogc3RhdGljIGludCBlbmFibGVfZXB0ID0gMTsKIG1vZHVsZV9wYXJhbShlbmFibGVfZXB0LCBib29sLCAwKTsKIAorc3RhdGljIGludCBlbXVsYXRlX2ludmFsaWRfZ3Vlc3Rfc3RhdGUgPSAwOworbW9kdWxlX3BhcmFtKGVtdWxhdGVfaW52YWxpZF9ndWVzdF9zdGF0ZSwgYm9vbCwgMCk7CisKIHN0cnVjdCB2bWNzIHsKIAl1MzIgcmV2aXNpb25faWQ7CiAJdTMyIGFib3J0OwpAQCAtNTYsNiArNjEsNyBAQAogc3RydWN0IHZjcHVfdm14IHsKIAlzdHJ1Y3Qga3ZtX3ZjcHUgICAgICAgdmNwdTsKIAlzdHJ1Y3QgbGlzdF9oZWFkICAgICAgbG9jYWxfdmNwdXNfbGluazsKKwl1bnNpZ25lZCBsb25nICAgICAgICAgaG9zdF9yc3A7CiAJaW50ICAgICAgICAgICAgICAgICAgIGxhdW5jaGVkOwogCXU4ICAgICAgICAgICAgICAgICAgICBmYWlsOwogCXUzMiAgICAgICAgICAgICAgICAgICBpZHRfdmVjdG9yaW5nX2luZm87CkBAIC04Myw2ICs4OSw3IEBACiAJCX0gaXJxOwogCX0gcm1vZGU7CiAJaW50IHZwaWQ7CisJYm9vbCBlbXVsYXRpb25fcmVxdWlyZWQ7CiB9OwogCiBzdGF0aWMgaW5saW5lIHN0cnVjdCB2Y3B1X3ZteCAqdG9fdm14KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKQEAgLTQ2OCw3ICs0NzUsNyBAQAogCWlmICghdmNwdS0+ZnB1X2FjdGl2ZSkKIAkJZWIgfD0gMXUgPDwgTk1fVkVDVE9SOwogCWlmICh2Y3B1LT5ndWVzdF9kZWJ1Zy5lbmFibGVkKQotCQllYiB8PSAxdSA8PCAxOworCQllYiB8PSAxdSA8PCBEQl9WRUNUT1I7CiAJaWYgKHZjcHUtPmFyY2gucm1vZGUuYWN0aXZlKQogCQllYiA9IH4wOwogCWlmICh2bV9uZWVkX2VwdCgpKQpAQCAtNzE1LDkgKzcyMiw5IEBACiAJdW5zaWduZWQgbG9uZyByaXA7CiAJdTMyIGludGVycnVwdGliaWxpdHk7CiAKLQlyaXAgPSB2bWNzX3JlYWRsKEdVRVNUX1JJUCk7CisJcmlwID0ga3ZtX3JpcF9yZWFkKHZjcHUpOwogCXJpcCArPSB2bWNzX3JlYWQzMihWTV9FWElUX0lOU1RSVUNUSU9OX0xFTik7Ci0Jdm1jc193cml0ZWwoR1VFU1RfUklQLCByaXApOworCWt2bV9yaXBfd3JpdGUodmNwdSwgcmlwKTsKIAogCS8qCiAJICogV2UgZW11bGF0ZWQgYW4gaW5zdHJ1Y3Rpb24sIHNvIHRlbXBvcmFyeSBpbnRlcnJ1cHQgYmxvY2tpbmcKQEAgLTczMywxOSArNzQwLDM1IEBACiBzdGF0aWMgdm9pZCB2bXhfcXVldWVfZXhjZXB0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgbnIsCiAJCQkJYm9vbCBoYXNfZXJyb3JfY29kZSwgdTMyIGVycm9yX2NvZGUpCiB7CisJc3RydWN0IHZjcHVfdm14ICp2bXggPSB0b192bXgodmNwdSk7CisKKwlpZiAoaGFzX2Vycm9yX2NvZGUpCisJCXZtY3Nfd3JpdGUzMihWTV9FTlRSWV9FWENFUFRJT05fRVJST1JfQ09ERSwgZXJyb3JfY29kZSk7CisKKwlpZiAodmNwdS0+YXJjaC5ybW9kZS5hY3RpdmUpIHsKKwkJdm14LT5ybW9kZS5pcnEucGVuZGluZyA9IHRydWU7CisJCXZteC0+cm1vZGUuaXJxLnZlY3RvciA9IG5yOworCQl2bXgtPnJtb2RlLmlycS5yaXAgPSBrdm1fcmlwX3JlYWQodmNwdSk7CisJCWlmIChuciA9PSBCUF9WRUNUT1IpCisJCQl2bXgtPnJtb2RlLmlycS5yaXArKzsKKwkJdm1jc193cml0ZTMyKFZNX0VOVFJZX0lOVFJfSU5GT19GSUVMRCwKKwkJCSAgICAgbnIgfCBJTlRSX1RZUEVfU09GVF9JTlRSCisJCQkgICAgIHwgKGhhc19lcnJvcl9jb2RlID8gSU5UUl9JTkZPX0RFTElWRVJfQ09ERV9NQVNLIDogMCkKKwkJCSAgICAgfCBJTlRSX0lORk9fVkFMSURfTUFTSyk7CisJCXZtY3Nfd3JpdGUzMihWTV9FTlRSWV9JTlNUUlVDVElPTl9MRU4sIDEpOworCQlrdm1fcmlwX3dyaXRlKHZjcHUsIHZteC0+cm1vZGUuaXJxLnJpcCAtIDEpOworCQlyZXR1cm47CisJfQorCiAJdm1jc193cml0ZTMyKFZNX0VOVFJZX0lOVFJfSU5GT19GSUVMRCwKIAkJICAgICBuciB8IElOVFJfVFlQRV9FWENFUFRJT04KIAkJICAgICB8IChoYXNfZXJyb3JfY29kZSA/IElOVFJfSU5GT19ERUxJVkVSX0NPREVfTUFTSyA6IDApCiAJCSAgICAgfCBJTlRSX0lORk9fVkFMSURfTUFTSyk7Ci0JaWYgKGhhc19lcnJvcl9jb2RlKQotCQl2bWNzX3dyaXRlMzIoVk1fRU5UUllfRVhDRVBUSU9OX0VSUk9SX0NPREUsIGVycm9yX2NvZGUpOwogfQogCiBzdGF0aWMgYm9vbCB2bXhfZXhjZXB0aW9uX2luamVjdGVkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKLQlzdHJ1Y3QgdmNwdV92bXggKnZteCA9IHRvX3ZteCh2Y3B1KTsKLQotCXJldHVybiAhKHZteC0+aWR0X3ZlY3RvcmluZ19pbmZvICYgVkVDVE9SSU5HX0lORk9fVkFMSURfTUFTSyk7CisJcmV0dXJuIGZhbHNlOwogfQogCiAvKgpAQCAtOTQ3LDI0ICs5NzAsMTkgQEAKIAlyZXR1cm4gcmV0OwogfQogCi0vKgotICogU3luYyB0aGUgcnNwIGFuZCByaXAgcmVnaXN0ZXJzIGludG8gdGhlIHZjcHUgc3RydWN0dXJlLiAgVGhpcyBhbGxvd3MKLSAqIHJlZ2lzdGVycyB0byBiZSBhY2Nlc3NlZCBieSBpbmRleGluZyB2Y3B1LT5hcmNoLnJlZ3MuCi0gKi8KLXN0YXRpYyB2b2lkIHZjcHVfbG9hZF9yc3BfcmlwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKK3N0YXRpYyB2b2lkIHZteF9jYWNoZV9yZWcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBlbnVtIGt2bV9yZWcgcmVnKQogewotCXZjcHUtPmFyY2gucmVnc1tWQ1BVX1JFR1NfUlNQXSA9IHZtY3NfcmVhZGwoR1VFU1RfUlNQKTsKLQl2Y3B1LT5hcmNoLnJpcCA9IHZtY3NfcmVhZGwoR1VFU1RfUklQKTsKLX0KLQotLyoKLSAqIFN5bmNzIHJzcCBhbmQgcmlwIGJhY2sgaW50byB0aGUgdm1jcy4gIFNob3VsZCBiZSBjYWxsZWQgYWZ0ZXIgcG9zc2libGUKLSAqIG1vZGlmaWNhdGlvbi4KLSAqLwotc3RhdGljIHZvaWQgdmNwdV9wdXRfcnNwX3JpcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCi17Ci0Jdm1jc193cml0ZWwoR1VFU1RfUlNQLCB2Y3B1LT5hcmNoLnJlZ3NbVkNQVV9SRUdTX1JTUF0pOwotCXZtY3Nfd3JpdGVsKEdVRVNUX1JJUCwgdmNwdS0+YXJjaC5yaXApOworCV9fc2V0X2JpdChyZWcsICh1bnNpZ25lZCBsb25nICopJnZjcHUtPmFyY2gucmVnc19hdmFpbCk7CisJc3dpdGNoIChyZWcpIHsKKwljYXNlIFZDUFVfUkVHU19SU1A6CisJCXZjcHUtPmFyY2gucmVnc1tWQ1BVX1JFR1NfUlNQXSA9IHZtY3NfcmVhZGwoR1VFU1RfUlNQKTsKKwkJYnJlYWs7CisJY2FzZSBWQ1BVX1JFR1NfUklQOgorCQl2Y3B1LT5hcmNoLnJlZ3NbVkNQVV9SRUdTX1JJUF0gPSB2bWNzX3JlYWRsKEdVRVNUX1JJUCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KIH0KIAogc3RhdGljIGludCBzZXRfZ3Vlc3RfZGVidWcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX2RlYnVnX2d1ZXN0ICpkYmcpCkBAIC0xMDA3LDE3ICsxMDI1LDkgQEAKIAogc3RhdGljIGludCB2bXhfZ2V0X2lycShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7Ci0Jc3RydWN0IHZjcHVfdm14ICp2bXggPSB0b192bXgodmNwdSk7Ci0JdTMyIGlkdHZfaW5mb19maWVsZDsKLQotCWlkdHZfaW5mb19maWVsZCA9IHZteC0+aWR0X3ZlY3RvcmluZ19pbmZvOwotCWlmIChpZHR2X2luZm9fZmllbGQgJiBJTlRSX0lORk9fVkFMSURfTUFTSykgewotCQlpZiAoaXNfZXh0ZXJuYWxfaW50ZXJydXB0KGlkdHZfaW5mb19maWVsZCkpCi0JCQlyZXR1cm4gaWR0dl9pbmZvX2ZpZWxkICYgVkVDVE9SSU5HX0lORk9fVkVDVE9SX01BU0s7Ci0JCWVsc2UKLQkJCXByaW50ayhLRVJOX0RFQlVHICJwZW5kaW5nIGV4Y2VwdGlvbjogbm90IGhhbmRsZWQgeWV0XG4iKTsKLQl9Ci0JcmV0dXJuIC0xOworCWlmICghdmNwdS0+YXJjaC5pbnRlcnJ1cHQucGVuZGluZykKKwkJcmV0dXJuIC0xOworCXJldHVybiB2Y3B1LT5hcmNoLmludGVycnVwdC5ucjsKIH0KIAogc3RhdGljIF9faW5pdCBpbnQgY3B1X2hhc19rdm1fc3VwcG9ydCh2b2lkKQpAQCAtMTAzMSw5ICsxMDQxLDkgQEAKIAl1NjQgbXNyOwogCiAJcmRtc3JsKE1TUl9JQTMyX0ZFQVRVUkVfQ09OVFJPTCwgbXNyKTsKLQlyZXR1cm4gKG1zciAmIChNU1JfSUEzMl9GRUFUVVJFX0NPTlRST0xfTE9DS0VEIHwKLQkJICAgICAgIE1TUl9JQTMyX0ZFQVRVUkVfQ09OVFJPTF9WTVhPTl9FTkFCTEVEKSkKLQkgICAgPT0gTVNSX0lBMzJfRkVBVFVSRV9DT05UUk9MX0xPQ0tFRDsKKwlyZXR1cm4gKG1zciAmIChGRUFUVVJFX0NPTlRST0xfTE9DS0VEIHwKKwkJICAgICAgIEZFQVRVUkVfQ09OVFJPTF9WTVhPTl9FTkFCTEVEKSkKKwkgICAgPT0gRkVBVFVSRV9DT05UUk9MX0xPQ0tFRDsKIAkvKiBsb2NrZWQgYnV0IG5vdCBlbmFibGVkICovCiB9CiAKQEAgLTEwNDUsMTQgKzEwNTUsMTQgQEAKIAogCUlOSVRfTElTVF9IRUFEKCZwZXJfY3B1KHZjcHVzX29uX2NwdSwgY3B1KSk7CiAJcmRtc3JsKE1TUl9JQTMyX0ZFQVRVUkVfQ09OVFJPTCwgb2xkKTsKLQlpZiAoKG9sZCAmIChNU1JfSUEzMl9GRUFUVVJFX0NPTlRST0xfTE9DS0VEIHwKLQkJICAgIE1TUl9JQTMyX0ZFQVRVUkVfQ09OVFJPTF9WTVhPTl9FTkFCTEVEKSkKLQkgICAgIT0gKE1TUl9JQTMyX0ZFQVRVUkVfQ09OVFJPTF9MT0NLRUQgfAotCQlNU1JfSUEzMl9GRUFUVVJFX0NPTlRST0xfVk1YT05fRU5BQkxFRCkpCisJaWYgKChvbGQgJiAoRkVBVFVSRV9DT05UUk9MX0xPQ0tFRCB8CisJCSAgICBGRUFUVVJFX0NPTlRST0xfVk1YT05fRU5BQkxFRCkpCisJICAgICE9IChGRUFUVVJFX0NPTlRST0xfTE9DS0VEIHwKKwkJRkVBVFVSRV9DT05UUk9MX1ZNWE9OX0VOQUJMRUQpKQogCQkvKiBlbmFibGUgYW5kIGxvY2sgKi8KIAkJd3Jtc3JsKE1TUl9JQTMyX0ZFQVRVUkVfQ09OVFJPTCwgb2xkIHwKLQkJICAgICAgIE1TUl9JQTMyX0ZFQVRVUkVfQ09OVFJPTF9MT0NLRUQgfAotCQkgICAgICAgTVNSX0lBMzJfRkVBVFVSRV9DT05UUk9MX1ZNWE9OX0VOQUJMRUQpOworCQkgICAgICAgRkVBVFVSRV9DT05UUk9MX0xPQ0tFRCB8CisJCSAgICAgICBGRUFUVVJFX0NPTlRST0xfVk1YT05fRU5BQkxFRCk7CiAJd3JpdGVfY3I0KHJlYWRfY3I0KCkgfCBYODZfQ1I0X1ZNWEUpOyAvKiBGSVhNRTogbm90IGNwdSBob3RwbHVnIHNhZmUgKi8KIAlhc20gdm9sYXRpbGUgKEFTTV9WTVhfVk1YT05fUkFYCiAJCSAgICAgIDogOiAiYSIoJnBoeXNfYWRkciksICJtIihwaHlzX2FkZHIpCkBAIC0xMTIwLDcgKzExMzAsOCBAQAogCSAgICAgIENQVV9CQVNFRF9DUjNfU1RPUkVfRVhJVElORyB8CiAJICAgICAgQ1BVX0JBU0VEX1VTRV9JT19CSVRNQVBTIHwKIAkgICAgICBDUFVfQkFTRURfTU9WX0RSX0VYSVRJTkcgfAotCSAgICAgIENQVV9CQVNFRF9VU0VfVFNDX09GRlNFVElORzsKKwkgICAgICBDUFVfQkFTRURfVVNFX1RTQ19PRkZTRVRJTkcgfAorCSAgICAgIENQVV9CQVNFRF9JTlZMUEdfRVhJVElORzsKIAlvcHQgPSBDUFVfQkFTRURfVFBSX1NIQURPVyB8CiAJICAgICAgQ1BVX0JBU0VEX1VTRV9NU1JfQklUTUFQUyB8CiAJICAgICAgQ1BVX0JBU0VEX0FDVElWQVRFX1NFQ09OREFSWV9DT05UUk9MUzsKQEAgLTExNDksOSArMTE2MCwxMSBAQAogCQlfY3B1X2Jhc2VkX2V4ZWNfY29udHJvbCAmPSB+Q1BVX0JBU0VEX1RQUl9TSEFET1c7CiAjZW5kaWYKIAlpZiAoX2NwdV9iYXNlZF8ybmRfZXhlY19jb250cm9sICYgU0VDT05EQVJZX0VYRUNfRU5BQkxFX0VQVCkgewotCQkvKiBDUjMgYWNjZXNzZXMgZG9uJ3QgbmVlZCB0byBjYXVzZSBWTSBFeGl0cyB3aGVuIEVQVCBlbmFibGVkICovCisJCS8qIENSMyBhY2Nlc3NlcyBhbmQgaW52bHBnIGRvbid0IG5lZWQgdG8gY2F1c2UgVk0gRXhpdHMgd2hlbiBFUFQKKwkJICAgZW5hYmxlZCAqLwogCQltaW4gJj0gfihDUFVfQkFTRURfQ1IzX0xPQURfRVhJVElORyB8Ci0JCQkgQ1BVX0JBU0VEX0NSM19TVE9SRV9FWElUSU5HKTsKKwkJCSBDUFVfQkFTRURfQ1IzX1NUT1JFX0VYSVRJTkcgfAorCQkJIENQVV9CQVNFRF9JTlZMUEdfRVhJVElORyk7CiAJCWlmIChhZGp1c3Rfdm14X2NvbnRyb2xzKG1pbiwgb3B0LCBNU1JfSUEzMl9WTVhfUFJPQ0JBU0VEX0NUTFMsCiAJCQkJCSZfY3B1X2Jhc2VkX2V4ZWNfY29udHJvbCkgPCAwKQogCQkJcmV0dXJuIC1FSU87CkBAIC0xMjg4LDcgKzEzMDEsOSBAQAogc3RhdGljIHZvaWQgZW50ZXJfcG1vZGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IHZjcHVfdm14ICp2bXggPSB0b192bXgodmNwdSk7CiAKKwl2bXgtPmVtdWxhdGlvbl9yZXF1aXJlZCA9IDE7CiAJdmNwdS0+YXJjaC5ybW9kZS5hY3RpdmUgPSAwOwogCiAJdm1jc193cml0ZWwoR1VFU1RfVFJfQkFTRSwgdmNwdS0+YXJjaC5ybW9kZS50ci5iYXNlKTsKQEAgLTEzMDUsNiArMTMyMCw5IEBACiAKIAl1cGRhdGVfZXhjZXB0aW9uX2JpdG1hcCh2Y3B1KTsKIAorCWlmIChlbXVsYXRlX2ludmFsaWRfZ3Vlc3Rfc3RhdGUpCisJCXJldHVybjsKKwogCWZpeF9wbW9kZV9kYXRhc2VnKFZDUFVfU1JFR19FUywgJnZjcHUtPmFyY2gucm1vZGUuZXMpOwogCWZpeF9wbW9kZV9kYXRhc2VnKFZDUFVfU1JFR19EUywgJnZjcHUtPmFyY2gucm1vZGUuZHMpOwogCWZpeF9wbW9kZV9kYXRhc2VnKFZDUFVfU1JFR19HUywgJnZjcHUtPmFyY2gucm1vZGUuZ3MpOwpAQCAtMTM0NSw3ICsxMzYzLDkgQEAKIHN0YXRpYyB2b2lkIGVudGVyX3Jtb2RlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCB2Y3B1X3ZteCAqdm14ID0gdG9fdm14KHZjcHUpOwogCisJdm14LT5lbXVsYXRpb25fcmVxdWlyZWQgPSAxOwogCXZjcHUtPmFyY2gucm1vZGUuYWN0aXZlID0gMTsKIAogCXZjcHUtPmFyY2gucm1vZGUudHIuYmFzZSA9IHZtY3NfcmVhZGwoR1VFU1RfVFJfQkFTRSk7CkBAIC0xMzY3LDYgKzEzODcsOSBAQAogCXZtY3Nfd3JpdGVsKEdVRVNUX0NSNCwgdm1jc19yZWFkbChHVUVTVF9DUjQpIHwgWDg2X0NSNF9WTUUpOwogCXVwZGF0ZV9leGNlcHRpb25fYml0bWFwKHZjcHUpOwogCisJaWYgKGVtdWxhdGVfaW52YWxpZF9ndWVzdF9zdGF0ZSkKKwkJZ290byBjb250aW51ZV9ybW9kZTsKKwogCXZtY3Nfd3JpdGUxNihHVUVTVF9TU19TRUxFQ1RPUiwgdm1jc19yZWFkbChHVUVTVF9TU19CQVNFKSA+PiA0KTsKIAl2bWNzX3dyaXRlMzIoR1VFU1RfU1NfTElNSVQsIDB4ZmZmZik7CiAJdm1jc193cml0ZTMyKEdVRVNUX1NTX0FSX0JZVEVTLCAweGYzKTsKQEAgLTEzODIsNiArMTQwNSw3IEBACiAJZml4X3Jtb2RlX3NlZyhWQ1BVX1NSRUdfR1MsICZ2Y3B1LT5hcmNoLnJtb2RlLmdzKTsKIAlmaXhfcm1vZGVfc2VnKFZDUFVfU1JFR19GUywgJnZjcHUtPmFyY2gucm1vZGUuZnMpOwogCitjb250aW51ZV9ybW9kZToKIAlrdm1fbW11X3Jlc2V0X2NvbnRleHQodmNwdSk7CiAJaW5pdF9ybW9kZSh2Y3B1LT5rdm0pOwogfQpAQCAtMTcxNSw2ICsxNzM5LDE4NiBAQAogCXZtY3Nfd3JpdGVsKEdVRVNUX0dEVFJfQkFTRSwgZHQtPmJhc2UpOwogfQogCitzdGF0aWMgYm9vbCBybW9kZV9zZWdtZW50X3ZhbGlkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IHNlZykKK3sKKwlzdHJ1Y3Qga3ZtX3NlZ21lbnQgdmFyOworCXUzMiBhcjsKKworCXZteF9nZXRfc2VnbWVudCh2Y3B1LCAmdmFyLCBzZWcpOworCWFyID0gdm14X3NlZ21lbnRfYWNjZXNzX3JpZ2h0cygmdmFyKTsKKworCWlmICh2YXIuYmFzZSAhPSAodmFyLnNlbGVjdG9yIDw8IDQpKQorCQlyZXR1cm4gZmFsc2U7CisJaWYgKHZhci5saW1pdCAhPSAweGZmZmYpCisJCXJldHVybiBmYWxzZTsKKwlpZiAoYXIgIT0gMHhmMykKKwkJcmV0dXJuIGZhbHNlOworCisJcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBib29sIGNvZGVfc2VnbWVudF92YWxpZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCit7CisJc3RydWN0IGt2bV9zZWdtZW50IGNzOworCXVuc2lnbmVkIGludCBjc19ycGw7CisKKwl2bXhfZ2V0X3NlZ21lbnQodmNwdSwgJmNzLCBWQ1BVX1NSRUdfQ1MpOworCWNzX3JwbCA9IGNzLnNlbGVjdG9yICYgU0VMRUNUT1JfUlBMX01BU0s7CisKKwlpZiAofmNzLnR5cGUgJiAoQVJfVFlQRV9DT0RFX01BU0t8QVJfVFlQRV9BQ0NFU1NFU19NQVNLKSkKKwkJcmV0dXJuIGZhbHNlOworCWlmICghY3MucykKKwkJcmV0dXJuIGZhbHNlOworCWlmICghKH5jcy50eXBlICYgKEFSX1RZUEVfQ09ERV9NQVNLfEFSX1RZUEVfV1JJVEVBQkxFX01BU0spKSkgeworCQlpZiAoY3MuZHBsID4gY3NfcnBsKQorCQkJcmV0dXJuIGZhbHNlOworCX0gZWxzZSBpZiAoY3MudHlwZSAmIEFSX1RZUEVfQ09ERV9NQVNLKSB7CisJCWlmIChjcy5kcGwgIT0gY3NfcnBsKQorCQkJcmV0dXJuIGZhbHNlOworCX0KKwlpZiAoIWNzLnByZXNlbnQpCisJCXJldHVybiBmYWxzZTsKKworCS8qIFRPRE86IEFkZCBSZXNlcnZlZCBmaWVsZCBjaGVjaywgdGhpcydsbCByZXF1aXJlIGEgbmV3IG1lbWJlciBpbiB0aGUga3ZtX3NlZ21lbnRfZmllbGQgc3RydWN0dXJlICovCisJcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBib29sIHN0YWNrX3NlZ21lbnRfdmFsaWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQoreworCXN0cnVjdCBrdm1fc2VnbWVudCBzczsKKwl1bnNpZ25lZCBpbnQgc3NfcnBsOworCisJdm14X2dldF9zZWdtZW50KHZjcHUsICZzcywgVkNQVV9TUkVHX1NTKTsKKwlzc19ycGwgPSBzcy5zZWxlY3RvciAmIFNFTEVDVE9SX1JQTF9NQVNLOworCisJaWYgKChzcy50eXBlICE9IDMpIHx8IChzcy50eXBlICE9IDcpKQorCQlyZXR1cm4gZmFsc2U7CisJaWYgKCFzcy5zKQorCQlyZXR1cm4gZmFsc2U7CisJaWYgKHNzLmRwbCAhPSBzc19ycGwpIC8qIERQTCAhPSBSUEwgKi8KKwkJcmV0dXJuIGZhbHNlOworCWlmICghc3MucHJlc2VudCkKKwkJcmV0dXJuIGZhbHNlOworCisJcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBib29sIGRhdGFfc2VnbWVudF92YWxpZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBzZWcpCit7CisJc3RydWN0IGt2bV9zZWdtZW50IHZhcjsKKwl1bnNpZ25lZCBpbnQgcnBsOworCisJdm14X2dldF9zZWdtZW50KHZjcHUsICZ2YXIsIHNlZyk7CisJcnBsID0gdmFyLnNlbGVjdG9yICYgU0VMRUNUT1JfUlBMX01BU0s7CisKKwlpZiAoIXZhci5zKQorCQlyZXR1cm4gZmFsc2U7CisJaWYgKCF2YXIucHJlc2VudCkKKwkJcmV0dXJuIGZhbHNlOworCWlmICh+dmFyLnR5cGUgJiAoQVJfVFlQRV9DT0RFX01BU0t8QVJfVFlQRV9XUklURUFCTEVfTUFTSykpIHsKKwkJaWYgKHZhci5kcGwgPCBycGwpIC8qIERQTCA8IFJQTCAqLworCQkJcmV0dXJuIGZhbHNlOworCX0KKworCS8qIFRPRE86IEFkZCBvdGhlciBtZW1iZXJzIHRvIGt2bV9zZWdtZW50X2ZpZWxkIHRvIGFsbG93IGNoZWNraW5nIGZvciBvdGhlciBhY2Nlc3MKKwkgKiByaWdodHMgZmxhZ3MKKwkgKi8KKwlyZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIGJvb2wgdHJfdmFsaWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQoreworCXN0cnVjdCBrdm1fc2VnbWVudCB0cjsKKworCXZteF9nZXRfc2VnbWVudCh2Y3B1LCAmdHIsIFZDUFVfU1JFR19UUik7CisKKwlpZiAodHIuc2VsZWN0b3IgJiBTRUxFQ1RPUl9USV9NQVNLKQkvKiBUSSA9IDEgKi8KKwkJcmV0dXJuIGZhbHNlOworCWlmICgodHIudHlwZSAhPSAzKSB8fCAodHIudHlwZSAhPSAxMSkpIC8qIFRPRE86IENoZWNrIGlmIGd1ZXN0IGlzIGluIElBMzJlIG1vZGUgKi8KKwkJcmV0dXJuIGZhbHNlOworCWlmICghdHIucHJlc2VudCkKKwkJcmV0dXJuIGZhbHNlOworCisJcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBib29sIGxkdHJfdmFsaWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQoreworCXN0cnVjdCBrdm1fc2VnbWVudCBsZHRyOworCisJdm14X2dldF9zZWdtZW50KHZjcHUsICZsZHRyLCBWQ1BVX1NSRUdfTERUUik7CisKKwlpZiAobGR0ci5zZWxlY3RvciAmIFNFTEVDVE9SX1RJX01BU0spCS8qIFRJID0gMSAqLworCQlyZXR1cm4gZmFsc2U7CisJaWYgKGxkdHIudHlwZSAhPSAyKQorCQlyZXR1cm4gZmFsc2U7CisJaWYgKCFsZHRyLnByZXNlbnQpCisJCXJldHVybiBmYWxzZTsKKworCXJldHVybiB0cnVlOworfQorCitzdGF0aWMgYm9vbCBjc19zc19ycGxfY2hlY2soc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQoreworCXN0cnVjdCBrdm1fc2VnbWVudCBjcywgc3M7CisKKwl2bXhfZ2V0X3NlZ21lbnQodmNwdSwgJmNzLCBWQ1BVX1NSRUdfQ1MpOworCXZteF9nZXRfc2VnbWVudCh2Y3B1LCAmc3MsIFZDUFVfU1JFR19TUyk7CisKKwlyZXR1cm4gKChjcy5zZWxlY3RvciAmIFNFTEVDVE9SX1JQTF9NQVNLKSA9PQorCQkgKHNzLnNlbGVjdG9yICYgU0VMRUNUT1JfUlBMX01BU0spKTsKK30KKworLyoKKyAqIENoZWNrIGlmIGd1ZXN0IHN0YXRlIGlzIHZhbGlkLiBSZXR1cm5zIHRydWUgaWYgdmFsaWQsIGZhbHNlIGlmCisgKiBub3QuCisgKiBXZSBhc3N1bWUgdGhhdCByZWdpc3RlcnMgYXJlIGFsd2F5cyB1c2FibGUKKyAqLworc3RhdGljIGJvb2wgZ3Vlc3Rfc3RhdGVfdmFsaWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQoreworCS8qIHJlYWwgbW9kZSBndWVzdCBzdGF0ZSBjaGVja3MgKi8KKwlpZiAoISh2Y3B1LT5hcmNoLmNyMCAmIFg4Nl9DUjBfUEUpKSB7CisJCWlmICghcm1vZGVfc2VnbWVudF92YWxpZCh2Y3B1LCBWQ1BVX1NSRUdfQ1MpKQorCQkJcmV0dXJuIGZhbHNlOworCQlpZiAoIXJtb2RlX3NlZ21lbnRfdmFsaWQodmNwdSwgVkNQVV9TUkVHX1NTKSkKKwkJCXJldHVybiBmYWxzZTsKKwkJaWYgKCFybW9kZV9zZWdtZW50X3ZhbGlkKHZjcHUsIFZDUFVfU1JFR19EUykpCisJCQlyZXR1cm4gZmFsc2U7CisJCWlmICghcm1vZGVfc2VnbWVudF92YWxpZCh2Y3B1LCBWQ1BVX1NSRUdfRVMpKQorCQkJcmV0dXJuIGZhbHNlOworCQlpZiAoIXJtb2RlX3NlZ21lbnRfdmFsaWQodmNwdSwgVkNQVV9TUkVHX0ZTKSkKKwkJCXJldHVybiBmYWxzZTsKKwkJaWYgKCFybW9kZV9zZWdtZW50X3ZhbGlkKHZjcHUsIFZDUFVfU1JFR19HUykpCisJCQlyZXR1cm4gZmFsc2U7CisJfSBlbHNlIHsKKwkvKiBwcm90ZWN0ZWQgbW9kZSBndWVzdCBzdGF0ZSBjaGVja3MgKi8KKwkJaWYgKCFjc19zc19ycGxfY2hlY2sodmNwdSkpCisJCQlyZXR1cm4gZmFsc2U7CisJCWlmICghY29kZV9zZWdtZW50X3ZhbGlkKHZjcHUpKQorCQkJcmV0dXJuIGZhbHNlOworCQlpZiAoIXN0YWNrX3NlZ21lbnRfdmFsaWQodmNwdSkpCisJCQlyZXR1cm4gZmFsc2U7CisJCWlmICghZGF0YV9zZWdtZW50X3ZhbGlkKHZjcHUsIFZDUFVfU1JFR19EUykpCisJCQlyZXR1cm4gZmFsc2U7CisJCWlmICghZGF0YV9zZWdtZW50X3ZhbGlkKHZjcHUsIFZDUFVfU1JFR19FUykpCisJCQlyZXR1cm4gZmFsc2U7CisJCWlmICghZGF0YV9zZWdtZW50X3ZhbGlkKHZjcHUsIFZDUFVfU1JFR19GUykpCisJCQlyZXR1cm4gZmFsc2U7CisJCWlmICghZGF0YV9zZWdtZW50X3ZhbGlkKHZjcHUsIFZDUFVfU1JFR19HUykpCisJCQlyZXR1cm4gZmFsc2U7CisJCWlmICghdHJfdmFsaWQodmNwdSkpCisJCQlyZXR1cm4gZmFsc2U7CisJCWlmICghbGR0cl92YWxpZCh2Y3B1KSkKKwkJCXJldHVybiBmYWxzZTsKKwl9CisJLyogVE9ETzoKKwkgKiAtIEFkZCBjaGVja3Mgb24gUklQCisJICogLSBBZGQgY2hlY2tzIG9uIFJGTEFHUworCSAqLworCisJcmV0dXJuIHRydWU7Cit9CisKIHN0YXRpYyBpbnQgaW5pdF9ybW9kZV90c3Moc3RydWN0IGt2bSAqa3ZtKQogewogCWdmbl90IGZuID0gcm1vZGVfdHNzX2Jhc2Uoa3ZtKSA+PiBQQUdFX1NISUZUOwpAQCAtMTcyNiw3ICsxOTMwLDggQEAKIAlpZiAociA8IDApCiAJCWdvdG8gb3V0OwogCWRhdGEgPSBUU1NfQkFTRV9TSVpFICsgVFNTX1JFRElSRUNUSU9OX1NJWkU7Ci0JciA9IGt2bV93cml0ZV9ndWVzdF9wYWdlKGt2bSwgZm4rKywgJmRhdGEsIDB4NjYsIHNpemVvZih1MTYpKTsKKwlyID0ga3ZtX3dyaXRlX2d1ZXN0X3BhZ2Uoa3ZtLCBmbisrLCAmZGF0YSwKKwkJCVRTU19JT1BCX0JBU0VfT0ZGU0VULCBzaXplb2YodTE2KSk7CiAJaWYgKHIgPCAwKQogCQlnb3RvIG91dDsKIAlyID0ga3ZtX2NsZWFyX2d1ZXN0X3BhZ2Uoa3ZtLCBmbisrLCAwLCBQQUdFX1NJWkUpOwpAQCAtMTc4OSw3ICsxOTk0LDcgQEAKIAl2bWNzX3dyaXRlMTYoc2YtPnNlbGVjdG9yLCAwKTsKIAl2bWNzX3dyaXRlbChzZi0+YmFzZSwgMCk7CiAJdm1jc193cml0ZTMyKHNmLT5saW1pdCwgMHhmZmZmKTsKLQl2bWNzX3dyaXRlMzIoc2YtPmFyX2J5dGVzLCAweDkzKTsKKwl2bWNzX3dyaXRlMzIoc2YtPmFyX2J5dGVzLCAweGYzKTsKIH0KIAogc3RhdGljIGludCBhbGxvY19hcGljX2FjY2Vzc19wYWdlKHN0cnVjdCBrdm0gKmt2bSkKQEAgLTE4MDgsOSArMjAxMyw3IEBACiAJaWYgKHIpCiAJCWdvdG8gb3V0OwogCi0JZG93bl9yZWFkKCZjdXJyZW50LT5tbS0+bW1hcF9zZW0pOwogCWt2bS0+YXJjaC5hcGljX2FjY2Vzc19wYWdlID0gZ2ZuX3RvX3BhZ2Uoa3ZtLCAweGZlZTAwKTsKLQl1cF9yZWFkKCZjdXJyZW50LT5tbS0+bW1hcF9zZW0pOwogb3V0OgogCXVwX3dyaXRlKCZrdm0tPnNsb3RzX2xvY2spOwogCXJldHVybiByOwpAQCAtMTgzMiwxMCArMjAzNSw4IEBACiAJaWYgKHIpCiAJCWdvdG8gb3V0OwogCi0JZG93bl9yZWFkKCZjdXJyZW50LT5tbS0+bW1hcF9zZW0pOwogCWt2bS0+YXJjaC5lcHRfaWRlbnRpdHlfcGFnZXRhYmxlID0gZ2ZuX3RvX3BhZ2Uoa3ZtLAogCQkJVk1YX0VQVF9JREVOVElUWV9QQUdFVEFCTEVfQUREUiA+PiBQQUdFX1NISUZUKTsKLQl1cF9yZWFkKCZjdXJyZW50LT5tbS0+bW1hcF9zZW0pOwogb3V0OgogCXVwX3dyaXRlKCZrdm0tPnNsb3RzX2xvY2spOwogCXJldHVybiByOwpAQCAtMTkxNyw3ICsyMTE4LDggQEAKIAl9CiAJaWYgKCF2bV9uZWVkX2VwdCgpKQogCQlleGVjX2NvbnRyb2wgfD0gQ1BVX0JBU0VEX0NSM19TVE9SRV9FWElUSU5HIHwKLQkJCQlDUFVfQkFTRURfQ1IzX0xPQURfRVhJVElORzsKKwkJCQlDUFVfQkFTRURfQ1IzX0xPQURfRVhJVElORyAgfAorCQkJCUNQVV9CQVNFRF9JTlZMUEdfRVhJVElORzsKIAl2bWNzX3dyaXRlMzIoQ1BVX0JBU0VEX1ZNX0VYRUNfQ09OVFJPTCwgZXhlY19jb250cm9sKTsKIAogCWlmIChjcHVfaGFzX3NlY29uZGFyeV9leGVjX2N0cmxzKCkpIHsKQEAgLTIwMTksNiArMjIyMSw3IEBACiAJdTY0IG1zcjsKIAlpbnQgcmV0OwogCisJdmNwdS0+YXJjaC5yZWdzX2F2YWlsID0gfigoMSA8PCBWQ1BVX1JFR1NfUklQKSB8ICgxIDw8IFZDUFVfUkVHU19SU1ApKTsKIAlkb3duX3JlYWQoJnZjcHUtPmt2bS0+c2xvdHNfbG9jayk7CiAJaWYgKCFpbml0X3Jtb2RlKHZteC0+dmNwdS5rdm0pKSB7CiAJCXJldCA9IC1FTk9NRU07CkBAIC0yMDM2LDYgKzIyMzksNyBAQAogCiAJZnhfaW5pdCgmdm14LT52Y3B1KTsKIAorCXNlZ19zZXR1cChWQ1BVX1NSRUdfQ1MpOwogCS8qCiAJICogR1VFU1RfQ1NfQkFTRSBzaG91bGQgcmVhbGx5IGJlIDB4ZmZmZjAwMDAsIGJ1dCBWVCB2bTg2IG1vZGUKIAkgKiBpbnNpc3RzIG9uIGhhdmluZyBHVUVTVF9DU19CQVNFID09IEdVRVNUX0NTX1NFTEVDVE9SIDw8IDQuICBTaWdoLgpAQCAtMjA0Nyw4ICsyMjUxLDYgQEAKIAkJdm1jc193cml0ZTE2KEdVRVNUX0NTX1NFTEVDVE9SLCB2bXgtPnZjcHUuYXJjaC5zaXBpX3ZlY3RvciA8PCA4KTsKIAkJdm1jc193cml0ZWwoR1VFU1RfQ1NfQkFTRSwgdm14LT52Y3B1LmFyY2guc2lwaV92ZWN0b3IgPDwgMTIpOwogCX0KLQl2bWNzX3dyaXRlMzIoR1VFU1RfQ1NfTElNSVQsIDB4ZmZmZik7Ci0Jdm1jc193cml0ZTMyKEdVRVNUX0NTX0FSX0JZVEVTLCAweDliKTsKIAogCXNlZ19zZXR1cChWQ1BVX1NSRUdfRFMpOwogCXNlZ19zZXR1cChWQ1BVX1NSRUdfRVMpOwpAQCAtMjA3MiwxMCArMjI3NCwxMCBAQAogCiAJdm1jc193cml0ZWwoR1VFU1RfUkZMQUdTLCAweDAyKTsKIAlpZiAodm14LT52Y3B1LnZjcHVfaWQgPT0gMCkKLQkJdm1jc193cml0ZWwoR1VFU1RfUklQLCAweGZmZjApOworCQlrdm1fcmlwX3dyaXRlKHZjcHUsIDB4ZmZmMCk7CiAJZWxzZQotCQl2bWNzX3dyaXRlbChHVUVTVF9SSVAsIDApOwotCXZtY3Nfd3JpdGVsKEdVRVNUX1JTUCwgMCk7CisJCWt2bV9yaXBfd3JpdGUodmNwdSwgMCk7CisJa3ZtX3JlZ2lzdGVyX3dyaXRlKHZjcHUsIFZDUFVfUkVHU19SU1AsIDApOwogCiAJLyogdG9kbzogZHIwID0gZHIxID0gZHIyID0gZHIzID0gMDsgZHI2ID0gMHhmZmZmMGZmMCAqLwogCXZtY3Nfd3JpdGVsKEdVRVNUX0RSNywgMHg0MDApOwpAQCAtMjEyNSw2ICsyMzI3LDkgQEAKIAogCXJldCA9IDA7CiAKKwkvKiBIQUNLOiBEb24ndCBlbmFibGUgZW11bGF0aW9uIG9uIGd1ZXN0IGJvb3QvcmVzZXQgKi8KKwl2bXgtPmVtdWxhdGlvbl9yZXF1aXJlZCA9IDA7CisKIG91dDoKIAl1cF9yZWFkKCZ2Y3B1LT5rdm0tPnNsb3RzX2xvY2spOwogCXJldHVybiByZXQ7CkBAIC0yMTM2LDE0ICsyMzQxLDE1IEBACiAKIAlLVk1UUkFDRV8xRChJTkpfVklSUSwgdmNwdSwgKHUzMilpcnEsIGhhbmRsZXIpOwogCisJKyt2Y3B1LT5zdGF0LmlycV9pbmplY3Rpb25zOwogCWlmICh2Y3B1LT5hcmNoLnJtb2RlLmFjdGl2ZSkgewogCQl2bXgtPnJtb2RlLmlycS5wZW5kaW5nID0gdHJ1ZTsKIAkJdm14LT5ybW9kZS5pcnEudmVjdG9yID0gaXJxOwotCQl2bXgtPnJtb2RlLmlycS5yaXAgPSB2bWNzX3JlYWRsKEdVRVNUX1JJUCk7CisJCXZteC0+cm1vZGUuaXJxLnJpcCA9IGt2bV9yaXBfcmVhZCh2Y3B1KTsKIAkJdm1jc193cml0ZTMyKFZNX0VOVFJZX0lOVFJfSU5GT19GSUVMRCwKIAkJCSAgICAgaXJxIHwgSU5UUl9UWVBFX1NPRlRfSU5UUiB8IElOVFJfSU5GT19WQUxJRF9NQVNLKTsKIAkJdm1jc193cml0ZTMyKFZNX0VOVFJZX0lOU1RSVUNUSU9OX0xFTiwgMSk7Ci0JCXZtY3Nfd3JpdGVsKEdVRVNUX1JJUCwgdm14LT5ybW9kZS5pcnEucmlwIC0gMSk7CisJCWt2bV9yaXBfd3JpdGUodmNwdSwgdm14LT5ybW9kZS5pcnEucmlwIC0gMSk7CiAJCXJldHVybjsKIAl9CiAJdm1jc193cml0ZTMyKFZNX0VOVFJZX0lOVFJfSU5GT19GSUVMRCwKQEAgLTIxNTQsNyArMjM2MCw2IEBACiB7CiAJdm1jc193cml0ZTMyKFZNX0VOVFJZX0lOVFJfSU5GT19GSUVMRCwKIAkJCUlOVFJfVFlQRV9OTUlfSU5UUiB8IElOVFJfSU5GT19WQUxJRF9NQVNLIHwgTk1JX1ZFQ1RPUik7Ci0JdmNwdS0+YXJjaC5ubWlfcGVuZGluZyA9IDA7CiB9CiAKIHN0YXRpYyB2b2lkIGt2bV9kb19pbmplY3RfaXJxKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKQEAgLTIxNjYsNyArMjM3MSw3IEBACiAJY2xlYXJfYml0KGJpdF9pbmRleCwgJnZjcHUtPmFyY2guaXJxX3BlbmRpbmdbd29yZF9pbmRleF0pOwogCWlmICghdmNwdS0+YXJjaC5pcnFfcGVuZGluZ1t3b3JkX2luZGV4XSkKIAkJY2xlYXJfYml0KHdvcmRfaW5kZXgsICZ2Y3B1LT5hcmNoLmlycV9zdW1tYXJ5KTsKLQl2bXhfaW5qZWN0X2lycSh2Y3B1LCBpcnEpOworCWt2bV9xdWV1ZV9pbnRlcnJ1cHQodmNwdSwgaXJxKTsKIH0KIAogCkBAIC0yMTgwLDEzICsyMzg1LDEyIEBACiAJCSAodm1jc19yZWFkMzIoR1VFU1RfSU5URVJSVVBUSUJJTElUWV9JTkZPKSAmIDMpID09IDApOwogCiAJaWYgKHZjcHUtPmFyY2guaW50ZXJydXB0X3dpbmRvd19vcGVuICYmCi0JICAgIHZjcHUtPmFyY2guaXJxX3N1bW1hcnkgJiYKLQkgICAgISh2bWNzX3JlYWQzMihWTV9FTlRSWV9JTlRSX0lORk9fRklFTEQpICYgSU5UUl9JTkZPX1ZBTElEX01BU0spKQotCQkvKgotCQkgKiBJZiBpbnRlcnJ1cHRzIGVuYWJsZWQsIGFuZCBub3QgYmxvY2tlZCBieSBzdGkgb3IgbW92IHNzLiBHb29kLgotCQkgKi8KKwkgICAgdmNwdS0+YXJjaC5pcnFfc3VtbWFyeSAmJiAhdmNwdS0+YXJjaC5pbnRlcnJ1cHQucGVuZGluZykKIAkJa3ZtX2RvX2luamVjdF9pcnEodmNwdSk7CiAKKwlpZiAodmNwdS0+YXJjaC5pbnRlcnJ1cHRfd2luZG93X29wZW4gJiYgdmNwdS0+YXJjaC5pbnRlcnJ1cHQucGVuZGluZykKKwkJdm14X2luamVjdF9pcnEodmNwdSwgdmNwdS0+YXJjaC5pbnRlcnJ1cHQubnIpOworCiAJY3B1X2Jhc2VkX3ZtX2V4ZWNfY29udHJvbCA9IHZtY3NfcmVhZDMyKENQVV9CQVNFRF9WTV9FWEVDX0NPTlRST0wpOwogCWlmICghdmNwdS0+YXJjaC5pbnRlcnJ1cHRfd2luZG93X29wZW4gJiYKIAkgICAgKHZjcHUtPmFyY2guaXJxX3N1bW1hcnkgfHwga3ZtX3J1bi0+cmVxdWVzdF9pbnRlcnJ1cHRfd2luZG93KSkKQEAgLTIyMzcsOSArMjQ0MSw2IEBACiBzdGF0aWMgaW50IGhhbmRsZV9ybW9kZV9leGNlcHRpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAogCQkJCSAgaW50IHZlYywgdTMyIGVycl9jb2RlKQogewotCWlmICghdmNwdS0+YXJjaC5ybW9kZS5hY3RpdmUpCi0JCXJldHVybiAwOwotCiAJLyoKIAkgKiBJbnN0cnVjdGlvbiB3aXRoIGFkZHJlc3Mgc2l6ZSBvdmVycmlkZSBwcmVmaXggb3Bjb2RlIDB4NjcKIAkgKiBDYXVzZSB0aGUgI1NTIGZhdWx0IHdpdGggMCBlcnJvciBjb2RlIGluIFZNODYgbW9kZS4KQEAgLTIyNDcsNiArMjQ0OCwyNSBAQAogCWlmICgoKHZlYyA9PSBHUF9WRUNUT1IpIHx8ICh2ZWMgPT0gU1NfVkVDVE9SKSkgJiYgZXJyX2NvZGUgPT0gMCkKIAkJaWYgKGVtdWxhdGVfaW5zdHJ1Y3Rpb24odmNwdSwgTlVMTCwgMCwgMCwgMCkgPT0gRU1VTEFURV9ET05FKQogCQkJcmV0dXJuIDE7CisJLyoKKwkgKiBGb3J3YXJkIGFsbCBvdGhlciBleGNlcHRpb25zIHRoYXQgYXJlIHZhbGlkIGluIHJlYWwgbW9kZS4KKwkgKiBGSVhNRTogQnJlYWtzIGd1ZXN0IGRlYnVnZ2luZyBpbiByZWFsIG1vZGUsIG5lZWRzIHRvIGJlIGZpeGVkIHdpdGgKKwkgKiAgICAgICAgdGhlIHJlcXVpcmVkIGRlYnVnZ2luZyBpbmZyYXN0cnVjdHVyZSByZXdvcmsuCisJICovCisJc3dpdGNoICh2ZWMpIHsKKwljYXNlIERFX1ZFQ1RPUjoKKwljYXNlIERCX1ZFQ1RPUjoKKwljYXNlIEJQX1ZFQ1RPUjoKKwljYXNlIE9GX1ZFQ1RPUjoKKwljYXNlIEJSX1ZFQ1RPUjoKKwljYXNlIFVEX1ZFQ1RPUjoKKwljYXNlIERGX1ZFQ1RPUjoKKwljYXNlIFNTX1ZFQ1RPUjoKKwljYXNlIEdQX1ZFQ1RPUjoKKwljYXNlIE1GX1ZFQ1RPUjoKKwkJa3ZtX3F1ZXVlX2V4Y2VwdGlvbih2Y3B1LCB2ZWMpOworCQlyZXR1cm4gMTsKKwl9CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTIyODgsNyArMjUwOCw3IEBACiAJfQogCiAJZXJyb3JfY29kZSA9IDA7Ci0JcmlwID0gdm1jc19yZWFkbChHVUVTVF9SSVApOworCXJpcCA9IGt2bV9yaXBfcmVhZCh2Y3B1KTsKIAlpZiAoaW50cl9pbmZvICYgSU5UUl9JTkZPX0RFTElWRVJfQ09ERV9NQVNLKQogCQllcnJvcl9jb2RlID0gdm1jc19yZWFkMzIoVk1fRVhJVF9JTlRSX0VSUk9SX0NPREUpOwogCWlmIChpc19wYWdlX2ZhdWx0KGludHJfaW5mbykpIHsKQEAgLTIyOTgsNyArMjUxOCw3IEBACiAJCWNyMiA9IHZtY3NfcmVhZGwoRVhJVF9RVUFMSUZJQ0FUSU9OKTsKIAkJS1ZNVFJBQ0VfM0QoUEFHRV9GQVVMVCwgdmNwdSwgZXJyb3JfY29kZSwgKHUzMiljcjIsCiAJCQkgICAgKHUzMikoKHU2NCljcjIgPj4gMzIpLCBoYW5kbGVyKTsKLQkJaWYgKHZlY3RfaW5mbyAmIFZFQ1RPUklOR19JTkZPX1ZBTElEX01BU0spCisJCWlmICh2Y3B1LT5hcmNoLmludGVycnVwdC5wZW5kaW5nIHx8IHZjcHUtPmFyY2guZXhjZXB0aW9uLnBlbmRpbmcpCiAJCQlrdm1fbW11X3VucHJvdGVjdF9wYWdlX3ZpcnQodmNwdSwgY3IyKTsKIAkJcmV0dXJuIGt2bV9tbXVfcGFnZV9mYXVsdCh2Y3B1LCBjcjIsIGVycm9yX2NvZGUpOwogCX0KQEAgLTIzODYsMjcgKzI2MDYsMjUgQEAKIAlyZWcgPSAoZXhpdF9xdWFsaWZpY2F0aW9uID4+IDgpICYgMTU7CiAJc3dpdGNoICgoZXhpdF9xdWFsaWZpY2F0aW9uID4+IDQpICYgMykgewogCWNhc2UgMDogLyogbW92IHRvIGNyICovCi0JCUtWTVRSQUNFXzNEKENSX1dSSVRFLCB2Y3B1LCAodTMyKWNyLCAodTMyKXZjcHUtPmFyY2gucmVnc1tyZWddLAotCQkJICAgICh1MzIpKCh1NjQpdmNwdS0+YXJjaC5yZWdzW3JlZ10gPj4gMzIpLCBoYW5kbGVyKTsKKwkJS1ZNVFJBQ0VfM0QoQ1JfV1JJVEUsIHZjcHUsICh1MzIpY3IsCisJCQkgICAgKHUzMilrdm1fcmVnaXN0ZXJfcmVhZCh2Y3B1LCByZWcpLAorCQkJICAgICh1MzIpKCh1NjQpa3ZtX3JlZ2lzdGVyX3JlYWQodmNwdSwgcmVnKSA+PiAzMiksCisJCQkgICAgaGFuZGxlcik7CiAJCXN3aXRjaCAoY3IpIHsKIAkJY2FzZSAwOgotCQkJdmNwdV9sb2FkX3JzcF9yaXAodmNwdSk7Ci0JCQlrdm1fc2V0X2NyMCh2Y3B1LCB2Y3B1LT5hcmNoLnJlZ3NbcmVnXSk7CisJCQlrdm1fc2V0X2NyMCh2Y3B1LCBrdm1fcmVnaXN0ZXJfcmVhZCh2Y3B1LCByZWcpKTsKIAkJCXNraXBfZW11bGF0ZWRfaW5zdHJ1Y3Rpb24odmNwdSk7CiAJCQlyZXR1cm4gMTsKIAkJY2FzZSAzOgotCQkJdmNwdV9sb2FkX3JzcF9yaXAodmNwdSk7Ci0JCQlrdm1fc2V0X2NyMyh2Y3B1LCB2Y3B1LT5hcmNoLnJlZ3NbcmVnXSk7CisJCQlrdm1fc2V0X2NyMyh2Y3B1LCBrdm1fcmVnaXN0ZXJfcmVhZCh2Y3B1LCByZWcpKTsKIAkJCXNraXBfZW11bGF0ZWRfaW5zdHJ1Y3Rpb24odmNwdSk7CiAJCQlyZXR1cm4gMTsKIAkJY2FzZSA0OgotCQkJdmNwdV9sb2FkX3JzcF9yaXAodmNwdSk7Ci0JCQlrdm1fc2V0X2NyNCh2Y3B1LCB2Y3B1LT5hcmNoLnJlZ3NbcmVnXSk7CisJCQlrdm1fc2V0X2NyNCh2Y3B1LCBrdm1fcmVnaXN0ZXJfcmVhZCh2Y3B1LCByZWcpKTsKIAkJCXNraXBfZW11bGF0ZWRfaW5zdHJ1Y3Rpb24odmNwdSk7CiAJCQlyZXR1cm4gMTsKIAkJY2FzZSA4OgotCQkJdmNwdV9sb2FkX3JzcF9yaXAodmNwdSk7Ci0JCQlrdm1fc2V0X2NyOCh2Y3B1LCB2Y3B1LT5hcmNoLnJlZ3NbcmVnXSk7CisJCQlrdm1fc2V0X2NyOCh2Y3B1LCBrdm1fcmVnaXN0ZXJfcmVhZCh2Y3B1LCByZWcpKTsKIAkJCXNraXBfZW11bGF0ZWRfaW5zdHJ1Y3Rpb24odmNwdSk7CiAJCQlpZiAoaXJxY2hpcF9pbl9rZXJuZWwodmNwdS0+a3ZtKSkKIAkJCQlyZXR1cm4gMTsKQEAgLTI0MTUsNyArMjYzMyw2IEBACiAJCX07CiAJCWJyZWFrOwogCWNhc2UgMjogLyogY2x0cyAqLwotCQl2Y3B1X2xvYWRfcnNwX3JpcCh2Y3B1KTsKIAkJdm14X2ZwdV9kZWFjdGl2YXRlKHZjcHUpOwogCQl2Y3B1LT5hcmNoLmNyMCAmPSB+WDg2X0NSMF9UUzsKIAkJdm1jc193cml0ZWwoQ1IwX1JFQURfU0hBRE9XLCB2Y3B1LT5hcmNoLmNyMCk7CkBAIC0yNDI2LDIxICsyNjQzLDE3IEBACiAJY2FzZSAxOiAvKm1vdiBmcm9tIGNyKi8KIAkJc3dpdGNoIChjcikgewogCQljYXNlIDM6Ci0JCQl2Y3B1X2xvYWRfcnNwX3JpcCh2Y3B1KTsKLQkJCXZjcHUtPmFyY2gucmVnc1tyZWddID0gdmNwdS0+YXJjaC5jcjM7Ci0JCQl2Y3B1X3B1dF9yc3BfcmlwKHZjcHUpOworCQkJa3ZtX3JlZ2lzdGVyX3dyaXRlKHZjcHUsIHJlZywgdmNwdS0+YXJjaC5jcjMpOwogCQkJS1ZNVFJBQ0VfM0QoQ1JfUkVBRCwgdmNwdSwgKHUzMiljciwKLQkJCQkgICAgKHUzMil2Y3B1LT5hcmNoLnJlZ3NbcmVnXSwKLQkJCQkgICAgKHUzMikoKHU2NCl2Y3B1LT5hcmNoLnJlZ3NbcmVnXSA+PiAzMiksCisJCQkJICAgICh1MzIpa3ZtX3JlZ2lzdGVyX3JlYWQodmNwdSwgcmVnKSwKKwkJCQkgICAgKHUzMikoKHU2NClrdm1fcmVnaXN0ZXJfcmVhZCh2Y3B1LCByZWcpID4+IDMyKSwKIAkJCQkgICAgaGFuZGxlcik7CiAJCQlza2lwX2VtdWxhdGVkX2luc3RydWN0aW9uKHZjcHUpOwogCQkJcmV0dXJuIDE7CiAJCWNhc2UgODoKLQkJCXZjcHVfbG9hZF9yc3BfcmlwKHZjcHUpOwotCQkJdmNwdS0+YXJjaC5yZWdzW3JlZ10gPSBrdm1fZ2V0X2NyOCh2Y3B1KTsKLQkJCXZjcHVfcHV0X3JzcF9yaXAodmNwdSk7CisJCQlrdm1fcmVnaXN0ZXJfd3JpdGUodmNwdSwgcmVnLCBrdm1fZ2V0X2NyOCh2Y3B1KSk7CiAJCQlLVk1UUkFDRV8yRChDUl9SRUFELCB2Y3B1LCAodTMyKWNyLAotCQkJCSAgICAodTMyKXZjcHUtPmFyY2gucmVnc1tyZWddLCBoYW5kbGVyKTsKKwkJCQkgICAgKHUzMilrdm1fcmVnaXN0ZXJfcmVhZCh2Y3B1LCByZWcpLCBoYW5kbGVyKTsKIAkJCXNraXBfZW11bGF0ZWRfaW5zdHJ1Y3Rpb24odmNwdSk7CiAJCQlyZXR1cm4gMTsKIAkJfQpAQCAtMjQ3Miw3ICsyNjg1LDYgQEAKIAlleGl0X3F1YWxpZmljYXRpb24gPSB2bWNzX3JlYWRsKEVYSVRfUVVBTElGSUNBVElPTik7CiAJZHIgPSBleGl0X3F1YWxpZmljYXRpb24gJiA3OwogCXJlZyA9IChleGl0X3F1YWxpZmljYXRpb24gPj4gOCkgJiAxNTsKLQl2Y3B1X2xvYWRfcnNwX3JpcCh2Y3B1KTsKIAlpZiAoZXhpdF9xdWFsaWZpY2F0aW9uICYgMTYpIHsKIAkJLyogbW92IGZyb20gZHIgKi8KIAkJc3dpdGNoIChkcikgewpAQCAtMjQ4NSwxMiArMjY5NywxMSBAQAogCQlkZWZhdWx0OgogCQkJdmFsID0gMDsKIAkJfQotCQl2Y3B1LT5hcmNoLnJlZ3NbcmVnXSA9IHZhbDsKKwkJa3ZtX3JlZ2lzdGVyX3dyaXRlKHZjcHUsIHJlZywgdmFsKTsKIAkJS1ZNVFJBQ0VfMkQoRFJfUkVBRCwgdmNwdSwgKHUzMilkciwgKHUzMil2YWwsIGhhbmRsZXIpOwogCX0gZWxzZSB7CiAJCS8qIG1vdiB0byBkciAqLwogCX0KLQl2Y3B1X3B1dF9yc3BfcmlwKHZjcHUpOwogCXNraXBfZW11bGF0ZWRfaW5zdHJ1Y3Rpb24odmNwdSk7CiAJcmV0dXJuIDE7CiB9CkBAIC0yNTgzLDYgKzI3OTQsMTUgQEAKIAlyZXR1cm4gMTsKIH0KIAorc3RhdGljIGludCBoYW5kbGVfaW52bHBnKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9ydW4gKmt2bV9ydW4pCit7CisJdTY0IGV4aXRfcXVhbGlmaWNhdGlvbiA9IHZtY3NfcmVhZDY0KEVYSVRfUVVBTElGSUNBVElPTik7CisKKwlrdm1fbW11X2ludmxwZyh2Y3B1LCBleGl0X3F1YWxpZmljYXRpb24pOworCXNraXBfZW11bGF0ZWRfaW5zdHJ1Y3Rpb24odmNwdSk7CisJcmV0dXJuIDE7Cit9CisKIHN0YXRpYyBpbnQgaGFuZGxlX3diaW52ZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fcnVuICprdm1fcnVuKQogewogCXNraXBfZW11bGF0ZWRfaW5zdHJ1Y3Rpb24odmNwdSk7CkBAIC0yNjk1LDYgKzI5MTUsNDMgQEAKIAlyZXR1cm4gMTsKIH0KIAorc3RhdGljIHZvaWQgaGFuZGxlX2ludmFsaWRfZ3Vlc3Rfc3RhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAorCQkJCXN0cnVjdCBrdm1fcnVuICprdm1fcnVuKQoreworCXN0cnVjdCB2Y3B1X3ZteCAqdm14ID0gdG9fdm14KHZjcHUpOworCWludCBlcnI7CisKKwlwcmVlbXB0X2VuYWJsZSgpOworCWxvY2FsX2lycV9lbmFibGUoKTsKKworCXdoaWxlICghZ3Vlc3Rfc3RhdGVfdmFsaWQodmNwdSkpIHsKKwkJZXJyID0gZW11bGF0ZV9pbnN0cnVjdGlvbih2Y3B1LCBrdm1fcnVuLCAwLCAwLCAwKTsKKworCQlzd2l0Y2ggKGVycikgeworCQkJY2FzZSBFTVVMQVRFX0RPTkU6CisJCQkJYnJlYWs7CisJCQljYXNlIEVNVUxBVEVfRE9fTU1JTzoKKwkJCQlrdm1fcmVwb3J0X2VtdWxhdGlvbl9mYWlsdXJlKHZjcHUsICJtbWlvIik7CisJCQkJLyogVE9ETzogSGFuZGxlIE1NSU8gKi8KKwkJCQlyZXR1cm47CisJCQlkZWZhdWx0OgorCQkJCWt2bV9yZXBvcnRfZW11bGF0aW9uX2ZhaWx1cmUodmNwdSwgImVtdWxhdGlvbiBmYWlsdXJlIik7CisJCQkJcmV0dXJuOworCQl9CisKKwkJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKQorCQkJYnJlYWs7CisJCWlmIChuZWVkX3Jlc2NoZWQoKSkKKwkJCXNjaGVkdWxlKCk7CisJfQorCisJbG9jYWxfaXJxX2Rpc2FibGUoKTsKKwlwcmVlbXB0X2Rpc2FibGUoKTsKKworCS8qIEd1ZXN0IHN0YXRlIHNob3VsZCBiZSB2YWxpZCBub3csIG5vIG1vcmUgZW11bGF0aW9uIHNob3VsZCBiZSBuZWVkZWQgKi8KKwl2bXgtPmVtdWxhdGlvbl9yZXF1aXJlZCA9IDA7Cit9CisKIC8qCiAgKiBUaGUgZXhpdCBoYW5kbGVycyByZXR1cm4gMSBpZiB0aGUgZXhpdCB3YXMgaGFuZGxlZCBmdWxseSBhbmQgZ3Vlc3QgZXhlY3V0aW9uCiAgKiBtYXkgcmVzdW1lLiAgT3RoZXJ3aXNlIHRoZXkgc2V0IHRoZSBrdm1fcnVuIHBhcmFtZXRlciB0byBpbmRpY2F0ZSB3aGF0IG5lZWRzCkBAIC0yNzE0LDYgKzI5NzEsNyBAQAogCVtFWElUX1JFQVNPTl9NU1JfV1JJVEVdICAgICAgICAgICAgICAgPSBoYW5kbGVfd3Jtc3IsCiAJW0VYSVRfUkVBU09OX1BFTkRJTkdfSU5URVJSVVBUXSAgICAgICA9IGhhbmRsZV9pbnRlcnJ1cHRfd2luZG93LAogCVtFWElUX1JFQVNPTl9ITFRdICAgICAgICAgICAgICAgICAgICAgPSBoYW5kbGVfaGFsdCwKKwlbRVhJVF9SRUFTT05fSU5WTFBHXQkJICAgICAgPSBoYW5kbGVfaW52bHBnLAogCVtFWElUX1JFQVNPTl9WTUNBTExdICAgICAgICAgICAgICAgICAgPSBoYW5kbGVfdm1jYWxsLAogCVtFWElUX1JFQVNPTl9UUFJfQkVMT1dfVEhSRVNIT0xEXSAgICAgPSBoYW5kbGVfdHByX2JlbG93X3RocmVzaG9sZCwKIAlbRVhJVF9SRUFTT05fQVBJQ19BQ0NFU1NdICAgICAgICAgICAgID0gaGFuZGxlX2FwaWNfYWNjZXNzLApAQCAtMjczNSw4ICsyOTkzLDggQEAKIAlzdHJ1Y3QgdmNwdV92bXggKnZteCA9IHRvX3ZteCh2Y3B1KTsKIAl1MzIgdmVjdG9yaW5nX2luZm8gPSB2bXgtPmlkdF92ZWN0b3JpbmdfaW5mbzsKIAotCUtWTVRSQUNFXzNEKFZNRVhJVCwgdmNwdSwgZXhpdF9yZWFzb24sICh1MzIpdm1jc19yZWFkbChHVUVTVF9SSVApLAotCQkgICAgKHUzMikoKHU2NCl2bWNzX3JlYWRsKEdVRVNUX1JJUCkgPj4gMzIpLCBlbnRyeWV4aXQpOworCUtWTVRSQUNFXzNEKFZNRVhJVCwgdmNwdSwgZXhpdF9yZWFzb24sICh1MzIpa3ZtX3JpcF9yZWFkKHZjcHUpLAorCQkgICAgKHUzMikoKHU2NClrdm1fcmlwX3JlYWQodmNwdSkgPj4gMzIpLCBlbnRyeWV4aXQpOwogCiAJLyogQWNjZXNzIENSMyBkb24ndCBjYXVzZSBWTUV4aXQgaW4gcGFnaW5nIG1vZGUsIHNvIHdlIG5lZWQKIAkgKiB0byBzeW5jIHdpdGggZ3Vlc3QgcmVhbCBDUjMuICovCkBAIC0yODI5LDg4ICszMDg3LDkyIEBACiAJCWVuYWJsZV9pcnFfd2luZG93KHZjcHUpOwogfQogCi1zdGF0aWMgdm9pZCB2bXhfaW50cl9hc3Npc3Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQorc3RhdGljIHZvaWQgdm14X2NvbXBsZXRlX2ludGVycnVwdHMoc3RydWN0IHZjcHVfdm14ICp2bXgpCiB7Ci0Jc3RydWN0IHZjcHVfdm14ICp2bXggPSB0b192bXgodmNwdSk7Ci0JdTMyIGlkdHZfaW5mb19maWVsZCwgaW50cl9pbmZvX2ZpZWxkLCBleGl0X2ludHJfaW5mb19maWVsZDsKLQlpbnQgdmVjdG9yOworCXUzMiBleGl0X2ludHJfaW5mbzsKKwl1MzIgaWR0X3ZlY3RvcmluZ19pbmZvOworCWJvb2wgdW5ibG9ja19ubWk7CisJdTggdmVjdG9yOworCWludCB0eXBlOworCWJvb2wgaWR0dl9pbmZvX3ZhbGlkOworCXUzMiBlcnJvcjsKIAotCXVwZGF0ZV90cHJfdGhyZXNob2xkKHZjcHUpOwotCi0JaW50cl9pbmZvX2ZpZWxkID0gdm1jc19yZWFkMzIoVk1fRU5UUllfSU5UUl9JTkZPX0ZJRUxEKTsKLQlleGl0X2ludHJfaW5mb19maWVsZCA9IHZtY3NfcmVhZDMyKFZNX0VYSVRfSU5UUl9JTkZPKTsKLQlpZHR2X2luZm9fZmllbGQgPSB2bXgtPmlkdF92ZWN0b3JpbmdfaW5mbzsKLQlpZiAoaW50cl9pbmZvX2ZpZWxkICYgSU5UUl9JTkZPX1ZBTElEX01BU0spIHsKLQkJaWYgKGlkdHZfaW5mb19maWVsZCAmIElOVFJfSU5GT19WQUxJRF9NQVNLKSB7Ci0JCQkvKiBUT0RPOiBmYXVsdCB3aGVuIElEVF9WZWN0b3JpbmcgKi8KLQkJCWlmIChwcmludGtfcmF0ZWxpbWl0KCkpCi0JCQkJcHJpbnRrKEtFUk5fRVJSICJGYXVsdCB3aGVuIElEVF9WZWN0b3JpbmdcbiIpOwotCQl9Ci0JCWVuYWJsZV9pbnRyX3dpbmRvdyh2Y3B1KTsKLQkJcmV0dXJuOwotCX0KLQlpZiAodW5saWtlbHkoaWR0dl9pbmZvX2ZpZWxkICYgSU5UUl9JTkZPX1ZBTElEX01BU0spKSB7Ci0JCWlmICgoaWR0dl9pbmZvX2ZpZWxkICYgVkVDVE9SSU5HX0lORk9fVFlQRV9NQVNLKQotCQkgICAgPT0gSU5UUl9UWVBFX0VYVF9JTlRSCi0JCSAgICAmJiB2Y3B1LT5hcmNoLnJtb2RlLmFjdGl2ZSkgewotCQkJdTggdmVjdCA9IGlkdHZfaW5mb19maWVsZCAmIFZFQ1RPUklOR19JTkZPX1ZFQ1RPUl9NQVNLOwotCi0JCQl2bXhfaW5qZWN0X2lycSh2Y3B1LCB2ZWN0KTsKLQkJCWVuYWJsZV9pbnRyX3dpbmRvdyh2Y3B1KTsKLQkJCXJldHVybjsKLQkJfQotCi0JCUtWTVRSQUNFXzFEKFJFREVMSVZFUl9FVlQsIHZjcHUsIGlkdHZfaW5mb19maWVsZCwgaGFuZGxlcik7Ci0KLQkJLyoKLQkJICogU0RNIDM6IDI1LjcuMS4yCi0JCSAqIENsZWFyIGJpdCAiYmxvY2sgYnkgTk1JIiBiZWZvcmUgVk0gZW50cnkgaWYgYSBOTUkgZGVsaXZlcnkKLQkJICogZmF1bHRlZC4KLQkJICovCi0JCWlmICgoaWR0dl9pbmZvX2ZpZWxkICYgVkVDVE9SSU5HX0lORk9fVFlQRV9NQVNLKQotCQkgICAgPT0gSU5UUl9UWVBFX05NSV9JTlRSICYmIGNwdV9oYXNfdmlydHVhbF9ubWlzKCkpCi0JCQl2bWNzX3dyaXRlMzIoR1VFU1RfSU5URVJSVVBUSUJJTElUWV9JTkZPLAotCQkJCXZtY3NfcmVhZDMyKEdVRVNUX0lOVEVSUlVQVElCSUxJVFlfSU5GTykgJgotCQkJCX5HVUVTVF9JTlRSX1NUQVRFX05NSSk7Ci0KLQkJdm1jc193cml0ZTMyKFZNX0VOVFJZX0lOVFJfSU5GT19GSUVMRCwgaWR0dl9pbmZvX2ZpZWxkCi0JCQkJJiB+SU5UUl9JTkZPX1JFU1ZEX0JJVFNfTUFTSyk7Ci0JCXZtY3Nfd3JpdGUzMihWTV9FTlRSWV9JTlNUUlVDVElPTl9MRU4sCi0JCQkJdm1jc19yZWFkMzIoVk1fRVhJVF9JTlNUUlVDVElPTl9MRU4pKTsKLQotCQlpZiAodW5saWtlbHkoaWR0dl9pbmZvX2ZpZWxkICYgSU5UUl9JTkZPX0RFTElWRVJfQ09ERV9NQVNLKSkKLQkJCXZtY3Nfd3JpdGUzMihWTV9FTlRSWV9FWENFUFRJT05fRVJST1JfQ09ERSwKLQkJCQl2bWNzX3JlYWQzMihJRFRfVkVDVE9SSU5HX0VSUk9SX0NPREUpKTsKLQkJZW5hYmxlX2ludHJfd2luZG93KHZjcHUpOwotCQlyZXR1cm47Ci0JfQorCWV4aXRfaW50cl9pbmZvID0gdm1jc19yZWFkMzIoVk1fRVhJVF9JTlRSX0lORk8pOwogCWlmIChjcHVfaGFzX3ZpcnR1YWxfbm1pcygpKSB7CisJCXVuYmxvY2tfbm1pID0gKGV4aXRfaW50cl9pbmZvICYgSU5UUl9JTkZPX1VOQkxPQ0tfTk1JKSAhPSAwOworCQl2ZWN0b3IgPSBleGl0X2ludHJfaW5mbyAmIElOVFJfSU5GT19WRUNUT1JfTUFTSzsKIAkJLyoKIAkJICogU0RNIDM6IDI1LjcuMS4yCiAJCSAqIFJlLXNldCBiaXQgImJsb2NrIGJ5IE5NSSIgYmVmb3JlIFZNIGVudHJ5IGlmIHZtZXhpdCBjYXVzZWQgYnkKIAkJICogYSBndWVzdCBJUkVUIGZhdWx0LgogCQkgKi8KLQkJaWYgKChleGl0X2ludHJfaW5mb19maWVsZCAmIElOVFJfSU5GT19VTkJMT0NLX05NSSkgJiYKLQkJICAgIChleGl0X2ludHJfaW5mb19maWVsZCAmIElOVFJfSU5GT19WRUNUT1JfTUFTSykgIT0gOCkKLQkJCXZtY3Nfd3JpdGUzMihHVUVTVF9JTlRFUlJVUFRJQklMSVRZX0lORk8sCi0JCQkJdm1jc19yZWFkMzIoR1VFU1RfSU5URVJSVVBUSUJJTElUWV9JTkZPKSB8Ci0JCQkJR1VFU1RfSU5UUl9TVEFURV9OTUkpOwotCQllbHNlIGlmICh2Y3B1LT5hcmNoLm5taV9wZW5kaW5nKSB7Ci0JCQlpZiAodm14X25taV9lbmFibGVkKHZjcHUpKQotCQkJCXZteF9pbmplY3Rfbm1pKHZjcHUpOworCQlpZiAodW5ibG9ja19ubWkgJiYgdmVjdG9yICE9IERGX1ZFQ1RPUikKKwkJCXZtY3Nfc2V0X2JpdHMoR1VFU1RfSU5URVJSVVBUSUJJTElUWV9JTkZPLAorCQkJCSAgICAgIEdVRVNUX0lOVFJfU1RBVEVfTk1JKTsKKwl9CisKKwlpZHRfdmVjdG9yaW5nX2luZm8gPSB2bXgtPmlkdF92ZWN0b3JpbmdfaW5mbzsKKwlpZHR2X2luZm9fdmFsaWQgPSBpZHRfdmVjdG9yaW5nX2luZm8gJiBWRUNUT1JJTkdfSU5GT19WQUxJRF9NQVNLOworCXZlY3RvciA9IGlkdF92ZWN0b3JpbmdfaW5mbyAmIFZFQ1RPUklOR19JTkZPX1ZFQ1RPUl9NQVNLOworCXR5cGUgPSBpZHRfdmVjdG9yaW5nX2luZm8gJiBWRUNUT1JJTkdfSU5GT19UWVBFX01BU0s7CisJaWYgKHZteC0+dmNwdS5hcmNoLm5taV9pbmplY3RlZCkgeworCQkvKgorCQkgKiBTRE0gMzogMjUuNy4xLjIKKwkJICogQ2xlYXIgYml0ICJibG9jayBieSBOTUkiIGJlZm9yZSBWTSBlbnRyeSBpZiBhIE5NSSBkZWxpdmVyeQorCQkgKiBmYXVsdGVkLgorCQkgKi8KKwkJaWYgKGlkdHZfaW5mb192YWxpZCAmJiB0eXBlID09IElOVFJfVFlQRV9OTUlfSU5UUikKKwkJCXZtY3NfY2xlYXJfYml0cyhHVUVTVF9JTlRFUlJVUFRJQklMSVRZX0lORk8sCisJCQkJCUdVRVNUX0lOVFJfU1RBVEVfTk1JKTsKKwkJZWxzZQorCQkJdm14LT52Y3B1LmFyY2gubm1pX2luamVjdGVkID0gZmFsc2U7CisJfQorCWt2bV9jbGVhcl9leGNlcHRpb25fcXVldWUoJnZteC0+dmNwdSk7CisJaWYgKGlkdHZfaW5mb192YWxpZCAmJiB0eXBlID09IElOVFJfVFlQRV9FWENFUFRJT04pIHsKKwkJaWYgKGlkdF92ZWN0b3JpbmdfaW5mbyAmIFZFQ1RPUklOR19JTkZPX0RFTElWRVJfQ09ERV9NQVNLKSB7CisJCQllcnJvciA9IHZtY3NfcmVhZDMyKElEVF9WRUNUT1JJTkdfRVJST1JfQ09ERSk7CisJCQlrdm1fcXVldWVfZXhjZXB0aW9uX2UoJnZteC0+dmNwdSwgdmVjdG9yLCBlcnJvcik7CisJCX0gZWxzZQorCQkJa3ZtX3F1ZXVlX2V4Y2VwdGlvbigmdm14LT52Y3B1LCB2ZWN0b3IpOworCQl2bXgtPmlkdF92ZWN0b3JpbmdfaW5mbyA9IDA7CisJfQorCWt2bV9jbGVhcl9pbnRlcnJ1cHRfcXVldWUoJnZteC0+dmNwdSk7CisJaWYgKGlkdHZfaW5mb192YWxpZCAmJiB0eXBlID09IElOVFJfVFlQRV9FWFRfSU5UUikgeworCQlrdm1fcXVldWVfaW50ZXJydXB0KCZ2bXgtPnZjcHUsIHZlY3Rvcik7CisJCXZteC0+aWR0X3ZlY3RvcmluZ19pbmZvID0gMDsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHZteF9pbnRyX2Fzc2lzdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCit7CisJdXBkYXRlX3Rwcl90aHJlc2hvbGQodmNwdSk7CisKKwlpZiAoY3B1X2hhc192aXJ0dWFsX25taXMoKSkgeworCQlpZiAodmNwdS0+YXJjaC5ubWlfcGVuZGluZyAmJiAhdmNwdS0+YXJjaC5ubWlfaW5qZWN0ZWQpIHsKKwkJCWlmICh2bXhfbm1pX2VuYWJsZWQodmNwdSkpIHsKKwkJCQl2Y3B1LT5hcmNoLm5taV9wZW5kaW5nID0gZmFsc2U7CisJCQkJdmNwdS0+YXJjaC5ubWlfaW5qZWN0ZWQgPSB0cnVlOworCQkJfSBlbHNlIHsKKwkJCQllbmFibGVfaW50cl93aW5kb3codmNwdSk7CisJCQkJcmV0dXJuOworCQkJfQorCQl9CisJCWlmICh2Y3B1LT5hcmNoLm5taV9pbmplY3RlZCkgeworCQkJdm14X2luamVjdF9ubWkodmNwdSk7CiAJCQllbmFibGVfaW50cl93aW5kb3codmNwdSk7CiAJCQlyZXR1cm47CiAJCX0KLQogCX0KLQlpZiAoIWt2bV9jcHVfaGFzX2ludGVycnVwdCh2Y3B1KSkKLQkJcmV0dXJuOwotCWlmICh2bXhfaXJxX2VuYWJsZWQodmNwdSkpIHsKLQkJdmVjdG9yID0ga3ZtX2NwdV9nZXRfaW50ZXJydXB0KHZjcHUpOwotCQl2bXhfaW5qZWN0X2lycSh2Y3B1LCB2ZWN0b3IpOwotCQlrdm1fdGltZXJfaW50cl9wb3N0KHZjcHUsIHZlY3Rvcik7Ci0JfSBlbHNlCi0JCWVuYWJsZV9pcnFfd2luZG93KHZjcHUpOworCWlmICghdmNwdS0+YXJjaC5pbnRlcnJ1cHQucGVuZGluZyAmJiBrdm1fY3B1X2hhc19pbnRlcnJ1cHQodmNwdSkpIHsKKwkJaWYgKHZteF9pcnFfZW5hYmxlZCh2Y3B1KSkKKwkJCWt2bV9xdWV1ZV9pbnRlcnJ1cHQodmNwdSwga3ZtX2NwdV9nZXRfaW50ZXJydXB0KHZjcHUpKTsKKwkJZWxzZQorCQkJZW5hYmxlX2lycV93aW5kb3codmNwdSk7CisJfQorCWlmICh2Y3B1LT5hcmNoLmludGVycnVwdC5wZW5kaW5nKSB7CisJCXZteF9pbmplY3RfaXJxKHZjcHUsIHZjcHUtPmFyY2guaW50ZXJydXB0Lm5yKTsKKwkJa3ZtX3RpbWVyX2ludHJfcG9zdCh2Y3B1LCB2Y3B1LT5hcmNoLmludGVycnVwdC5ucik7CisJfQogfQogCiAvKgpAQCAtMjkyMiw5ICszMTg0LDkgQEAKIHN0YXRpYyB2b2lkIGZpeHVwX3Jtb2RlX2lycShzdHJ1Y3QgdmNwdV92bXggKnZteCkKIHsKIAl2bXgtPnJtb2RlLmlycS5wZW5kaW5nID0gMDsKLQlpZiAodm1jc19yZWFkbChHVUVTVF9SSVApICsgMSAhPSB2bXgtPnJtb2RlLmlycS5yaXApCisJaWYgKGt2bV9yaXBfcmVhZCgmdm14LT52Y3B1KSArIDEgIT0gdm14LT5ybW9kZS5pcnEucmlwKQogCQlyZXR1cm47Ci0Jdm1jc193cml0ZWwoR1VFU1RfUklQLCB2bXgtPnJtb2RlLmlycS5yaXApOworCWt2bV9yaXBfd3JpdGUoJnZteC0+dmNwdSwgdm14LT5ybW9kZS5pcnEucmlwKTsKIAlpZiAodm14LT5pZHRfdmVjdG9yaW5nX2luZm8gJiBWRUNUT1JJTkdfSU5GT19WQUxJRF9NQVNLKSB7CiAJCXZteC0+aWR0X3ZlY3RvcmluZ19pbmZvICY9IH5WRUNUT1JJTkdfSU5GT19UWVBFX01BU0s7CiAJCXZteC0+aWR0X3ZlY3RvcmluZ19pbmZvIHw9IElOVFJfVFlQRV9FWFRfSU5UUjsKQEAgLTI5MzYsMTEgKzMxOTgsMzAgQEAKIAkJfCB2bXgtPnJtb2RlLmlycS52ZWN0b3I7CiB9CiAKKyNpZmRlZiBDT05GSUdfWDg2XzY0CisjZGVmaW5lIFIgInIiCisjZGVmaW5lIFEgInEiCisjZWxzZQorI2RlZmluZSBSICJlIgorI2RlZmluZSBRICJsIgorI2VuZGlmCisKIHN0YXRpYyB2b2lkIHZteF92Y3B1X3J1bihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fcnVuICprdm1fcnVuKQogewogCXN0cnVjdCB2Y3B1X3ZteCAqdm14ID0gdG9fdm14KHZjcHUpOwogCXUzMiBpbnRyX2luZm87CiAKKwkvKiBIYW5kbGUgaW52YWxpZCBndWVzdCBzdGF0ZSBpbnN0ZWFkIG9mIGVudGVyaW5nIFZNWCAqLworCWlmICh2bXgtPmVtdWxhdGlvbl9yZXF1aXJlZCAmJiBlbXVsYXRlX2ludmFsaWRfZ3Vlc3Rfc3RhdGUpIHsKKwkJaGFuZGxlX2ludmFsaWRfZ3Vlc3Rfc3RhdGUodmNwdSwga3ZtX3J1bik7CisJCXJldHVybjsKKwl9CisKKwlpZiAodGVzdF9iaXQoVkNQVV9SRUdTX1JTUCwgKHVuc2lnbmVkIGxvbmcgKikmdmNwdS0+YXJjaC5yZWdzX2RpcnR5KSkKKwkJdm1jc193cml0ZWwoR1VFU1RfUlNQLCB2Y3B1LT5hcmNoLnJlZ3NbVkNQVV9SRUdTX1JTUF0pOworCWlmICh0ZXN0X2JpdChWQ1BVX1JFR1NfUklQLCAodW5zaWduZWQgbG9uZyAqKSZ2Y3B1LT5hcmNoLnJlZ3NfZGlydHkpKQorCQl2bWNzX3dyaXRlbChHVUVTVF9SSVAsIHZjcHUtPmFyY2gucmVnc1tWQ1BVX1JFR1NfUklQXSk7CisKIAkvKgogCSAqIExvYWRpbmcgZ3Vlc3QgZnB1IG1heSBoYXZlIGNsZWFyZWQgaG9zdCBjcjAudHMKIAkgKi8KQEAgLTI5NDgsMjYgKzMyMjksMjUgQEAKIAogCWFzbSgKIAkJLyogU3RvcmUgaG9zdCByZWdpc3RlcnMgKi8KLSNpZmRlZiBDT05GSUdfWDg2XzY0Ci0JCSJwdXNoICUlcmR4OyBwdXNoICUlcmJwOyIKLQkJInB1c2ggJSVyY3ggXG5cdCIKLSNlbHNlCi0JCSJwdXNoICUlZWR4OyBwdXNoICUlZWJwOyIKLQkJInB1c2ggJSVlY3ggXG5cdCIKLSNlbmRpZgorCQkicHVzaCAlJSJSImR4OyBwdXNoICUlIlIiYnA7IgorCQkicHVzaCAlJSJSImN4IFxuXHQiCisJCSJjbXAgJSUiUiJzcCwgJWNbaG9zdF9yc3BdKCUwKSBcblx0IgorCQkiamUgMWYgXG5cdCIKKwkJIm1vdiAlJSJSInNwLCAlY1tob3N0X3JzcF0oJTApIFxuXHQiCiAJCV9fZXgoQVNNX1ZNWF9WTVdSSVRFX1JTUF9SRFgpICJcblx0IgorCQkiMTogXG5cdCIKIAkJLyogQ2hlY2sgaWYgdm1sYXVuY2ggb2Ygdm1yZXN1bWUgaXMgbmVlZGVkICovCiAJCSJjbXBsICQwLCAlY1tsYXVuY2hlZF0oJTApIFxuXHQiCiAJCS8qIExvYWQgZ3Vlc3QgcmVnaXN0ZXJzLiAgRG9uJ3QgY2xvYmJlciBmbGFncy4gKi8KKwkJIm1vdiAlY1tjcjJdKCUwKSwgJSUiUiJheCBcblx0IgorCQkibW92ICUlIlIiYXgsICUlY3IyIFxuXHQiCisJCSJtb3YgJWNbcmF4XSglMCksICUlIlIiYXggXG5cdCIKKwkJIm1vdiAlY1tyYnhdKCUwKSwgJSUiUiJieCBcblx0IgorCQkibW92ICVjW3JkeF0oJTApLCAlJSJSImR4IFxuXHQiCisJCSJtb3YgJWNbcnNpXSglMCksICUlIlIic2kgXG5cdCIKKwkJIm1vdiAlY1tyZGldKCUwKSwgJSUiUiJkaSBcblx0IgorCQkibW92ICVjW3JicF0oJTApLCAlJSJSImJwIFxuXHQiCiAjaWZkZWYgQ09ORklHX1g4Nl82NAotCQkibW92ICVjW2NyMl0oJTApLCAlJXJheCBcblx0IgotCQkibW92ICUlcmF4LCAlJWNyMiBcblx0IgotCQkibW92ICVjW3JheF0oJTApLCAlJXJheCBcblx0IgotCQkibW92ICVjW3JieF0oJTApLCAlJXJieCBcblx0IgotCQkibW92ICVjW3JkeF0oJTApLCAlJXJkeCBcblx0IgotCQkibW92ICVjW3JzaV0oJTApLCAlJXJzaSBcblx0IgotCQkibW92ICVjW3JkaV0oJTApLCAlJXJkaSBcblx0IgotCQkibW92ICVjW3JicF0oJTApLCAlJXJicCBcblx0IgogCQkibW92ICVjW3I4XSglMCksICAlJXI4ICBcblx0IgogCQkibW92ICVjW3I5XSglMCksICAlJXI5ICBcblx0IgogCQkibW92ICVjW3IxMF0oJTApLCAlJXIxMCBcblx0IgpAQCAtMjk3NiwxOCArMzI1Niw5IEBACiAJCSJtb3YgJWNbcjEzXSglMCksICUlcjEzIFxuXHQiCiAJCSJtb3YgJWNbcjE0XSglMCksICUlcjE0IFxuXHQiCiAJCSJtb3YgJWNbcjE1XSglMCksICUlcjE1IFxuXHQiCi0JCSJtb3YgJWNbcmN4XSglMCksICUlcmN4IFxuXHQiIC8qIGtpbGxzICUwIChyY3gpICovCi0jZWxzZQotCQkibW92ICVjW2NyMl0oJTApLCAlJWVheCBcblx0IgotCQkibW92ICUlZWF4LCAgICUlY3IyIFxuXHQiCi0JCSJtb3YgJWNbcmF4XSglMCksICUlZWF4IFxuXHQiCi0JCSJtb3YgJWNbcmJ4XSglMCksICUlZWJ4IFxuXHQiCi0JCSJtb3YgJWNbcmR4XSglMCksICUlZWR4IFxuXHQiCi0JCSJtb3YgJWNbcnNpXSglMCksICUlZXNpIFxuXHQiCi0JCSJtb3YgJWNbcmRpXSglMCksICUlZWRpIFxuXHQiCi0JCSJtb3YgJWNbcmJwXSglMCksICUlZWJwIFxuXHQiCi0JCSJtb3YgJWNbcmN4XSglMCksICUlZWN4IFxuXHQiIC8qIGtpbGxzICUwIChlY3gpICovCiAjZW5kaWYKKwkJIm1vdiAlY1tyY3hdKCUwKSwgJSUiUiJjeCBcblx0IiAvKiBraWxscyAlMCAoZWN4KSAqLworCiAJCS8qIEVudGVyIGd1ZXN0IG1vZGUgKi8KIAkJImpuZSAuTGxhdW5jaGVkIFxuXHQiCiAJCV9fZXgoQVNNX1ZNWF9WTUxBVU5DSCkgIlxuXHQiCkBAIC0yOTk1LDE1ICszMjY2LDE1IEBACiAJCSIuTGxhdW5jaGVkOiAiIF9fZXgoQVNNX1ZNWF9WTVJFU1VNRSkgIlxuXHQiCiAJCSIuTGt2bV92bXhfcmV0dXJuOiAiCiAJCS8qIFNhdmUgZ3Vlc3QgcmVnaXN0ZXJzLCBsb2FkIGhvc3QgcmVnaXN0ZXJzLCBrZWVwIGZsYWdzICovCisJCSJ4Y2hnICUwLCAgICAgKCUlIlIic3ApIFxuXHQiCisJCSJtb3YgJSUiUiJheCwgJWNbcmF4XSglMCkgXG5cdCIKKwkJIm1vdiAlJSJSImJ4LCAlY1tyYnhdKCUwKSBcblx0IgorCQkicHVzaCJRIiAoJSUiUiJzcCk7IHBvcCJRIiAlY1tyY3hdKCUwKSBcblx0IgorCQkibW92ICUlIlIiZHgsICVjW3JkeF0oJTApIFxuXHQiCisJCSJtb3YgJSUiUiJzaSwgJWNbcnNpXSglMCkgXG5cdCIKKwkJIm1vdiAlJSJSImRpLCAlY1tyZGldKCUwKSBcblx0IgorCQkibW92ICUlIlIiYnAsICVjW3JicF0oJTApIFxuXHQiCiAjaWZkZWYgQ09ORklHX1g4Nl82NAotCQkieGNoZyAlMCwgICAgICglJXJzcCkgXG5cdCIKLQkJIm1vdiAlJXJheCwgJWNbcmF4XSglMCkgXG5cdCIKLQkJIm1vdiAlJXJieCwgJWNbcmJ4XSglMCkgXG5cdCIKLQkJInB1c2hxICglJXJzcCk7IHBvcHEgJWNbcmN4XSglMCkgXG5cdCIKLQkJIm1vdiAlJXJkeCwgJWNbcmR4XSglMCkgXG5cdCIKLQkJIm1vdiAlJXJzaSwgJWNbcnNpXSglMCkgXG5cdCIKLQkJIm1vdiAlJXJkaSwgJWNbcmRpXSglMCkgXG5cdCIKLQkJIm1vdiAlJXJicCwgJWNbcmJwXSglMCkgXG5cdCIKIAkJIm1vdiAlJXI4LCAgJWNbcjhdKCUwKSBcblx0IgogCQkibW92ICUlcjksICAlY1tyOV0oJTApIFxuXHQiCiAJCSJtb3YgJSVyMTAsICVjW3IxMF0oJTApIFxuXHQiCkBAIC0zMDEyLDI4ICszMjgzLDE2IEBACiAJCSJtb3YgJSVyMTMsICVjW3IxM10oJTApIFxuXHQiCiAJCSJtb3YgJSVyMTQsICVjW3IxNF0oJTApIFxuXHQiCiAJCSJtb3YgJSVyMTUsICVjW3IxNV0oJTApIFxuXHQiCi0JCSJtb3YgJSVjcjIsICUlcmF4ICAgXG5cdCIKLQkJIm1vdiAlJXJheCwgJWNbY3IyXSglMCkgXG5cdCIKLQotCQkicG9wICAlJXJicDsgcG9wICAlJXJicDsgcG9wICAlJXJkeCBcblx0IgotI2Vsc2UKLQkJInhjaGcgJTAsICglJWVzcCkgXG5cdCIKLQkJIm1vdiAlJWVheCwgJWNbcmF4XSglMCkgXG5cdCIKLQkJIm1vdiAlJWVieCwgJWNbcmJ4XSglMCkgXG5cdCIKLQkJInB1c2hsICglJWVzcCk7IHBvcGwgJWNbcmN4XSglMCkgXG5cdCIKLQkJIm1vdiAlJWVkeCwgJWNbcmR4XSglMCkgXG5cdCIKLQkJIm1vdiAlJWVzaSwgJWNbcnNpXSglMCkgXG5cdCIKLQkJIm1vdiAlJWVkaSwgJWNbcmRpXSglMCkgXG5cdCIKLQkJIm1vdiAlJWVicCwgJWNbcmJwXSglMCkgXG5cdCIKLQkJIm1vdiAlJWNyMiwgJSVlYXggIFxuXHQiCi0JCSJtb3YgJSVlYXgsICVjW2NyMl0oJTApIFxuXHQiCi0KLQkJInBvcCAlJWVicDsgcG9wICUlZWJwOyBwb3AgJSVlZHggXG5cdCIKICNlbmRpZgorCQkibW92ICUlY3IyLCAlJSJSImF4ICAgXG5cdCIKKwkJIm1vdiAlJSJSImF4LCAlY1tjcjJdKCUwKSBcblx0IgorCisJCSJwb3AgICUlIlIiYnA7IHBvcCAgJSUiUiJicDsgcG9wICAlJSJSImR4IFxuXHQiCiAJCSJzZXRiZSAlY1tmYWlsXSglMCkgXG5cdCIKIAkgICAgICA6IDogImMiKHZteCksICJkIigodW5zaWduZWQgbG9uZylIT1NUX1JTUCksCiAJCVtsYXVuY2hlZF0iaSIob2Zmc2V0b2Yoc3RydWN0IHZjcHVfdm14LCBsYXVuY2hlZCkpLAogCQlbZmFpbF0iaSIob2Zmc2V0b2Yoc3RydWN0IHZjcHVfdm14LCBmYWlsKSksCisJCVtob3N0X3JzcF0iaSIob2Zmc2V0b2Yoc3RydWN0IHZjcHVfdm14LCBob3N0X3JzcCkpLAogCQlbcmF4XSJpIihvZmZzZXRvZihzdHJ1Y3QgdmNwdV92bXgsIHZjcHUuYXJjaC5yZWdzW1ZDUFVfUkVHU19SQVhdKSksCiAJCVtyYnhdImkiKG9mZnNldG9mKHN0cnVjdCB2Y3B1X3ZteCwgdmNwdS5hcmNoLnJlZ3NbVkNQVV9SRUdTX1JCWF0pKSwKIAkJW3JjeF0iaSIob2Zmc2V0b2Yoc3RydWN0IHZjcHVfdm14LCB2Y3B1LmFyY2gucmVnc1tWQ1BVX1JFR1NfUkNYXSkpLApAQCAtMzA1MywxNCArMzMxMiwxNSBAQAogI2VuZGlmCiAJCVtjcjJdImkiKG9mZnNldG9mKHN0cnVjdCB2Y3B1X3ZteCwgdmNwdS5hcmNoLmNyMikpCiAJICAgICAgOiAiY2MiLCAibWVtb3J5IgorCQksIFIiYngiLCBSImRpIiwgUiJzaSIKICNpZmRlZiBDT05GSUdfWDg2XzY0Ci0JCSwgInJieCIsICJyZGkiLCAicnNpIgogCQksICJyOCIsICJyOSIsICJyMTAiLCAicjExIiwgInIxMiIsICJyMTMiLCAicjE0IiwgInIxNSIKLSNlbHNlCi0JCSwgImVieCIsICJlZGkiLCAicnNpIgogI2VuZGlmCiAJICAgICAgKTsKIAorCXZjcHUtPmFyY2gucmVnc19hdmFpbCA9IH4oKDEgPDwgVkNQVV9SRUdTX1JJUCkgfCAoMSA8PCBWQ1BVX1JFR1NfUlNQKSk7CisJdmNwdS0+YXJjaC5yZWdzX2RpcnR5ID0gMDsKKwogCXZteC0+aWR0X3ZlY3RvcmluZ19pbmZvID0gdm1jc19yZWFkMzIoSURUX1ZFQ1RPUklOR19JTkZPX0ZJRUxEKTsKIAlpZiAodm14LT5ybW9kZS5pcnEucGVuZGluZykKIAkJZml4dXBfcm1vZGVfaXJxKHZteCk7CkBAIC0zMDgwLDggKzMzNDAsMTMgQEAKIAkJS1ZNVFJBQ0VfMEQoTk1JLCB2Y3B1LCBoYW5kbGVyKTsKIAkJYXNtKCJpbnQgJDIiKTsKIAl9CisKKwl2bXhfY29tcGxldGVfaW50ZXJydXB0cyh2bXgpOwogfQogCisjdW5kZWYgUgorI3VuZGVmIFEKKwogc3RhdGljIHZvaWQgdm14X2ZyZWVfdm1jcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7CiAJc3RydWN0IHZjcHVfdm14ICp2bXggPSB0b192bXgodmNwdSk7CkBAIC0zMjI0LDggKzM0ODksNyBAQAogCS5zZXRfaWR0ID0gdm14X3NldF9pZHQsCiAJLmdldF9nZHQgPSB2bXhfZ2V0X2dkdCwKIAkuc2V0X2dkdCA9IHZteF9zZXRfZ2R0LAotCS5jYWNoZV9yZWdzID0gdmNwdV9sb2FkX3JzcF9yaXAsCi0JLmRlY2FjaGVfcmVncyA9IHZjcHVfcHV0X3JzcF9yaXAsCisJLmNhY2hlX3JlZyA9IHZteF9jYWNoZV9yZWcsCiAJLmdldF9yZmxhZ3MgPSB2bXhfZ2V0X3JmbGFncywKIAkuc2V0X3JmbGFncyA9IHZteF9zZXRfcmZsYWdzLAogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vdm14LmggYi9hcmNoL3g4Ni9rdm0vdm14LmgKaW5kZXggMTdlMjU5OS4uM2UwMTBkMiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL3ZteC5oCisrKyBiL2FyY2gveDg2L2t2bS92bXguaApAQCAtMzMxLDkgKzMzMSw2IEBACiAKICNkZWZpbmUgQVJfUkVTRVJWRF9NQVNLIDB4ZmZmZTBmMDAKIAotI2RlZmluZSBNU1JfSUEzMl9GRUFUVVJFX0NPTlRST0xfTE9DS0VEICAgICAgICAgMHgxCi0jZGVmaW5lIE1TUl9JQTMyX0ZFQVRVUkVfQ09OVFJPTF9WTVhPTl9FTkFCTEVEICAweDQKLQogI2RlZmluZSBBUElDX0FDQ0VTU19QQUdFX1BSSVZBVEVfTUVNU0xPVAk5CiAjZGVmaW5lIElERU5USVRZX1BBR0VUQUJMRV9QUklWQVRFX01FTVNMT1QJMTAKIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3g4Ni5jIGIvYXJjaC94ODYva3ZtL3g4Ni5jCmluZGV4IDBkNjgyZmMuLjRmMDY3N2QgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS94ODYuYworKysgYi9hcmNoL3g4Ni9rdm0veDg2LmMKQEAgLTQsMTAgKzQsMTQgQEAKICAqIGRlcml2ZWQgZnJvbSBkcml2ZXJzL2t2bS9rdm1fbWFpbi5jCiAgKgogICogQ29weXJpZ2h0IChDKSAyMDA2IFF1bXJhbmV0LCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggUXVtcmFuZXQsIEluYy4KKyAqIENvcHlyaWdodCBJQk0gQ29ycG9yYXRpb24sIDIwMDgKICAqCiAgKiBBdXRob3JzOgogICogICBBdmkgS2l2aXR5ICAgPGF2aUBxdW1yYW5ldC5jb20+CiAgKiAgIFlhbml2IEthbWF5ICA8eWFuaXZAcXVtcmFuZXQuY29tPgorICogICBBbWl0IFNoYWggICAgPGFtaXQuc2hhaEBxdW1yYW5ldC5jb20+CisgKiAgIEJlbi1BbWkgWWFzc291ciA8YmVuYW1pQGlsLmlibS5jb20+CiAgKgogICogVGhpcyB3b3JrIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdQTCwgdmVyc2lvbiAyLiAgU2VlCiAgKiB0aGUgQ09QWUlORyBmaWxlIGluIHRoZSB0b3AtbGV2ZWwgZGlyZWN0b3J5LgpAQCAtMTksMTQgKzIzLDE4IEBACiAjaW5jbHVkZSAibW11LmgiCiAjaW5jbHVkZSAiaTgyNTQuaCIKICNpbmNsdWRlICJ0c3MuaCIKKyNpbmNsdWRlICJrdm1fY2FjaGVfcmVncy5oIgorI2luY2x1ZGUgIng4Ni5oIgogCiAjaW5jbHVkZSA8bGludXgvY2xvY2tzb3VyY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9rdm0uaD4KICNpbmNsdWRlIDxsaW51eC9mcy5oPgogI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9tbWFuLmg+CiAjaW5jbHVkZSA8bGludXgvaGlnaG1lbS5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVsLWlvbW11Lmg+CiAKICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGFzbS9tc3IuaD4KQEAgLTYxLDYgKzY5LDcgQEAKIAkJCQkgICAgc3RydWN0IGt2bV9jcHVpZF9lbnRyeTIgX191c2VyICplbnRyaWVzKTsKIAogc3RydWN0IGt2bV94ODZfb3BzICprdm1feDg2X29wczsKK0VYUE9SVF9TWU1CT0xfR1BMKGt2bV94ODZfb3BzKTsKIAogc3RydWN0IGt2bV9zdGF0c19kZWJ1Z2ZzX2l0ZW0gZGVidWdmc19lbnRyaWVzW10gPSB7CiAJeyAicGZfZml4ZWQiLCBWQ1BVX1NUQVQocGZfZml4ZWQpIH0sCkBAIC04Myw2ICs5Miw3IEBACiAJeyAiZnB1X3JlbG9hZCIsIFZDUFVfU1RBVChmcHVfcmVsb2FkKSB9LAogCXsgImluc25fZW11bGF0aW9uIiwgVkNQVV9TVEFUKGluc25fZW11bGF0aW9uKSB9LAogCXsgImluc25fZW11bGF0aW9uX2ZhaWwiLCBWQ1BVX1NUQVQoaW5zbl9lbXVsYXRpb25fZmFpbCkgfSwKKwl7ICJpcnFfaW5qZWN0aW9ucyIsIFZDUFVfU1RBVChpcnFfaW5qZWN0aW9ucykgfSwKIAl7ICJtbXVfc2hhZG93X3phcHBlZCIsIFZNX1NUQVQobW11X3NoYWRvd196YXBwZWQpIH0sCiAJeyAibW11X3B0ZV93cml0ZSIsIFZNX1NUQVQobW11X3B0ZV93cml0ZSkgfSwKIAl7ICJtbXVfcHRlX3VwZGF0ZWQiLCBWTV9TVEFUKG1tdV9wdGVfdXBkYXRlZCkgfSwKQEAgLTkwLDEyICsxMDAsMTIgQEAKIAl7ICJtbXVfZmxvb2RlZCIsIFZNX1NUQVQobW11X2Zsb29kZWQpIH0sCiAJeyAibW11X3JlY3ljbGVkIiwgVk1fU1RBVChtbXVfcmVjeWNsZWQpIH0sCiAJeyAibW11X2NhY2hlX21pc3MiLCBWTV9TVEFUKG1tdV9jYWNoZV9taXNzKSB9LAorCXsgIm1tdV91bnN5bmMiLCBWTV9TVEFUKG1tdV91bnN5bmMpIH0sCiAJeyAicmVtb3RlX3RsYl9mbHVzaCIsIFZNX1NUQVQocmVtb3RlX3RsYl9mbHVzaCkgfSwKIAl7ICJsYXJnZXBhZ2VzIiwgVk1fU1RBVChscGFnZXMpIH0sCiAJeyBOVUxMIH0KIH07CiAKLQogdW5zaWduZWQgbG9uZyBzZWdtZW50X2Jhc2UodTE2IHNlbGVjdG9yKQogewogCXN0cnVjdCBkZXNjcmlwdG9yX3RhYmxlIGdkdDsKQEAgLTM1Miw2ICszNjIsNyBAQAogdm9pZCBrdm1fc2V0X2NyMyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGxvbmcgY3IzKQogewogCWlmIChjcjMgPT0gdmNwdS0+YXJjaC5jcjMgJiYgIXBkcHRyc19jaGFuZ2VkKHZjcHUpKSB7CisJCWt2bV9tbXVfc3luY19yb290cyh2Y3B1KTsKIAkJa3ZtX21tdV9mbHVzaF90bGIodmNwdSk7CiAJCXJldHVybjsKIAl9CkBAIC01NjQsNyArNTc1LDcgQEAKIAlodl9jbG9jay0+dHNjX3RvX3N5c3RlbV9tdWwgPSBkaXZfZnJhYyhuc2VjcywgdHBzMzIpOwogCiAJcHJfZGVidWcoIiVzOiB0c2Nfa2h6ICV1LCB0c2Nfc2hpZnQgJWQsIHRzY19tdWwgJXVcbiIsCi0JCSBfX0ZVTkNUSU9OX18sIHRzY19raHosIGh2X2Nsb2NrLT50c2Nfc2hpZnQsCisJCSBfX2Z1bmNfXywgdHNjX2toeiwgaHZfY2xvY2stPnRzY19zaGlmdCwKIAkJIGh2X2Nsb2NrLT50c2NfdG9fc3lzdGVtX211bCk7CiB9CiAKQEAgLTY2Miw2ICs2NzMsMTggQEAKIAkJcHJfdW5pbXBsKHZjcHUsICIlczogTVNSX0lBMzJfTUNHX0NUTCAweCVsbHgsIG5vcFxuIiwKIAkJCV9fZnVuY19fLCBkYXRhKTsKIAkJYnJlYWs7CisJY2FzZSBNU1JfSUEzMl9ERUJVR0NUTE1TUjoKKwkJaWYgKCFkYXRhKSB7CisJCQkvKiBXZSBzdXBwb3J0IHRoZSBub24tYWN0aXZhdGVkIGNhc2UgYWxyZWFkeSAqLworCQkJYnJlYWs7CisJCX0gZWxzZSBpZiAoZGF0YSAmIH4oREVCVUdDVExNU1JfTEJSIHwgREVCVUdDVExNU1JfQlRGKSkgeworCQkJLyogVmFsdWVzIG90aGVyIHRoYW4gTEJSIGFuZCBCVEYgYXJlIHZlbmRvci1zcGVjaWZpYywKKwkJCSAgIHRodXMgcmVzZXJ2ZWQgYW5kIHNob3VsZCB0aHJvdyBhICNHUCAqLworCQkJcmV0dXJuIDE7CisJCX0KKwkJcHJfdW5pbXBsKHZjcHUsICIlczogTVNSX0lBMzJfREVCVUdDVExNU1IgMHglbGx4LCBub3BcbiIsCisJCQlfX2Z1bmNfXywgZGF0YSk7CisJCWJyZWFrOwogCWNhc2UgTVNSX0lBMzJfVUNPREVfUkVWOgogCWNhc2UgTVNSX0lBMzJfVUNPREVfV1JJVEU6CiAJCWJyZWFrOwpAQCAtNjkyLDEwICs3MTUsOCBAQAogCQkvKiAuLi5idXQgY2xlYW4gaXQgYmVmb3JlIGRvaW5nIHRoZSBhY3R1YWwgd3JpdGUgKi8KIAkJdmNwdS0+YXJjaC50aW1lX29mZnNldCA9IGRhdGEgJiB+KFBBR0VfTUFTSyB8IDEpOwogCi0JCWRvd25fcmVhZCgmY3VycmVudC0+bW0tPm1tYXBfc2VtKTsKIAkJdmNwdS0+YXJjaC50aW1lX3BhZ2UgPQogCQkJCWdmbl90b19wYWdlKHZjcHUtPmt2bSwgZGF0YSA+PiBQQUdFX1NISUZUKTsKLQkJdXBfcmVhZCgmY3VycmVudC0+bW0tPm1tYXBfc2VtKTsKIAogCQlpZiAoaXNfZXJyb3JfcGFnZSh2Y3B1LT5hcmNoLnRpbWVfcGFnZSkpIHsKIAkJCWt2bV9yZWxlYXNlX3BhZ2VfY2xlYW4odmNwdS0+YXJjaC50aW1lX3BhZ2UpOwpAQCAtNzUyLDggKzc3MywxNCBAQAogCWNhc2UgTVNSX0lBMzJfTUMwX01JU0MrODoKIAljYXNlIE1TUl9JQTMyX01DMF9NSVNDKzEyOgogCWNhc2UgTVNSX0lBMzJfTUMwX01JU0MrMTY6CisJY2FzZSBNU1JfSUEzMl9NQzBfTUlTQysyMDoKIAljYXNlIE1TUl9JQTMyX1VDT0RFX1JFVjoKIAljYXNlIE1TUl9JQTMyX0VCTF9DUl9QT1dFUk9OOgorCWNhc2UgTVNSX0lBMzJfREVCVUdDVExNU1I6CisJY2FzZSBNU1JfSUEzMl9MQVNUQlJBTkNIRlJPTUlQOgorCWNhc2UgTVNSX0lBMzJfTEFTVEJSQU5DSFRPSVA6CisJY2FzZSBNU1JfSUEzMl9MQVNUSU5URlJPTUlQOgorCWNhc2UgTVNSX0lBMzJfTEFTVElOVFRPSVA6CiAJCWRhdGEgPSAwOwogCQlicmVhazsKIAljYXNlIE1TUl9NVFJSY2FwOgpAQCAtOTAxLDYgKzkyOCw5IEBACiAJY2FzZSBLVk1fQ0FQX1BWX01NVToKIAkJciA9ICF0ZHBfZW5hYmxlZDsKIAkJYnJlYWs7CisJY2FzZSBLVk1fQ0FQX0lPTU1VOgorCQlyID0gaW50ZWxfaW9tbXVfZm91bmQoKTsKKwkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJciA9IDA7CiAJCWJyZWFrOwpAQCAtMTMwMywyOCArMTMzMywzMyBAQAogCXN0cnVjdCBrdm1fdmNwdSAqdmNwdSA9IGZpbHAtPnByaXZhdGVfZGF0YTsKIAl2b2lkIF9fdXNlciAqYXJncCA9ICh2b2lkIF9fdXNlciAqKWFyZzsKIAlpbnQgcjsKKwlzdHJ1Y3Qga3ZtX2xhcGljX3N0YXRlICpsYXBpYyA9IE5VTEw7CiAKIAlzd2l0Y2ggKGlvY3RsKSB7CiAJY2FzZSBLVk1fR0VUX0xBUElDOiB7Ci0JCXN0cnVjdCBrdm1fbGFwaWNfc3RhdGUgbGFwaWM7CisJCWxhcGljID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGt2bV9sYXBpY19zdGF0ZSksIEdGUF9LRVJORUwpOwogCi0JCW1lbXNldCgmbGFwaWMsIDAsIHNpemVvZiBsYXBpYyk7Ci0JCXIgPSBrdm1fdmNwdV9pb2N0bF9nZXRfbGFwaWModmNwdSwgJmxhcGljKTsKKwkJciA9IC1FTk9NRU07CisJCWlmICghbGFwaWMpCisJCQlnb3RvIG91dDsKKwkJciA9IGt2bV92Y3B1X2lvY3RsX2dldF9sYXBpYyh2Y3B1LCBsYXBpYyk7CiAJCWlmIChyKQogCQkJZ290byBvdXQ7CiAJCXIgPSAtRUZBVUxUOwotCQlpZiAoY29weV90b191c2VyKGFyZ3AsICZsYXBpYywgc2l6ZW9mIGxhcGljKSkKKwkJaWYgKGNvcHlfdG9fdXNlcihhcmdwLCBsYXBpYywgc2l6ZW9mKHN0cnVjdCBrdm1fbGFwaWNfc3RhdGUpKSkKIAkJCWdvdG8gb3V0OwogCQlyID0gMDsKIAkJYnJlYWs7CiAJfQogCWNhc2UgS1ZNX1NFVF9MQVBJQzogewotCQlzdHJ1Y3Qga3ZtX2xhcGljX3N0YXRlIGxhcGljOwotCi0JCXIgPSAtRUZBVUxUOwotCQlpZiAoY29weV9mcm9tX3VzZXIoJmxhcGljLCBhcmdwLCBzaXplb2YgbGFwaWMpKQorCQlsYXBpYyA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBrdm1fbGFwaWNfc3RhdGUpLCBHRlBfS0VSTkVMKTsKKwkJciA9IC1FTk9NRU07CisJCWlmICghbGFwaWMpCiAJCQlnb3RvIG91dDsKLQkJciA9IGt2bV92Y3B1X2lvY3RsX3NldF9sYXBpYyh2Y3B1LCAmbGFwaWMpOzsKKwkJciA9IC1FRkFVTFQ7CisJCWlmIChjb3B5X2Zyb21fdXNlcihsYXBpYywgYXJncCwgc2l6ZW9mKHN0cnVjdCBrdm1fbGFwaWNfc3RhdGUpKSkKKwkJCWdvdG8gb3V0OworCQlyID0ga3ZtX3ZjcHVfaW9jdGxfc2V0X2xhcGljKHZjcHUsIGxhcGljKTsKIAkJaWYgKHIpCiAJCQlnb3RvIG91dDsKIAkJciA9IDA7CkBAIC0xNDIyLDYgKzE0NTcsOCBAQAogCQlyID0gLUVJTlZBTDsKIAl9CiBvdXQ6CisJaWYgKGxhcGljKQorCQlrZnJlZShsYXBpYyk7CiAJcmV0dXJuIHI7CiB9CiAKQEAgLTE2MzAsNiArMTY2NywxNSBAQAogCXN0cnVjdCBrdm0gKmt2bSA9IGZpbHAtPnByaXZhdGVfZGF0YTsKIAl2b2lkIF9fdXNlciAqYXJncCA9ICh2b2lkIF9fdXNlciAqKWFyZzsKIAlpbnQgciA9IC1FSU5WQUw7CisJLyoKKwkgKiBUaGlzIHVuaW9uIG1ha2VzIGl0IGNvbXBsZXRlbHkgZXhwbGljaXQgdG8gZ2NjLTMueAorCSAqIHRoYXQgdGhlc2UgdHdvIHZhcmlhYmxlcycgc3RhY2sgdXNhZ2Ugc2hvdWxkIGJlCisJICogY29tYmluZWQsIG5vdCBhZGRlZCB0b2dldGhlci4KKwkgKi8KKwl1bmlvbiB7CisJCXN0cnVjdCBrdm1fcGl0X3N0YXRlIHBzOworCQlzdHJ1Y3Qga3ZtX21lbW9yeV9hbGlhcyBhbGlhczsKKwl9IHU7CiAKIAlzd2l0Y2ggKGlvY3RsKSB7CiAJY2FzZSBLVk1fU0VUX1RTU19BRERSOgpAQCAtMTY2MSwxNyArMTcwNywxNCBAQAogCWNhc2UgS1ZNX0dFVF9OUl9NTVVfUEFHRVM6CiAJCXIgPSBrdm1fdm1faW9jdGxfZ2V0X25yX21tdV9wYWdlcyhrdm0pOwogCQlicmVhazsKLQljYXNlIEtWTV9TRVRfTUVNT1JZX0FMSUFTOiB7Ci0JCXN0cnVjdCBrdm1fbWVtb3J5X2FsaWFzIGFsaWFzOwotCisJY2FzZSBLVk1fU0VUX01FTU9SWV9BTElBUzoKIAkJciA9IC1FRkFVTFQ7Ci0JCWlmIChjb3B5X2Zyb21fdXNlcigmYWxpYXMsIGFyZ3AsIHNpemVvZiBhbGlhcykpCisJCWlmIChjb3B5X2Zyb21fdXNlcigmdS5hbGlhcywgYXJncCwgc2l6ZW9mKHN0cnVjdCBrdm1fbWVtb3J5X2FsaWFzKSkpCiAJCQlnb3RvIG91dDsKLQkJciA9IGt2bV92bV9pb2N0bF9zZXRfbWVtb3J5X2FsaWFzKGt2bSwgJmFsaWFzKTsKKwkJciA9IGt2bV92bV9pb2N0bF9zZXRfbWVtb3J5X2FsaWFzKGt2bSwgJnUuYWxpYXMpOwogCQlpZiAocikKIAkJCWdvdG8gb3V0OwogCQlicmVhazsKLQl9CiAJY2FzZSBLVk1fQ1JFQVRFX0lSUUNISVA6CiAJCXIgPSAtRU5PTUVNOwogCQlrdm0tPmFyY2gudnBpYyA9IGt2bV9jcmVhdGVfcGljKGt2bSk7CkBAIC0xNjk5LDEzICsxNzQyLDcgQEAKIAkJCWdvdG8gb3V0OwogCQlpZiAoaXJxY2hpcF9pbl9rZXJuZWwoa3ZtKSkgewogCQkJbXV0ZXhfbG9jaygma3ZtLT5sb2NrKTsKLQkJCWlmIChpcnFfZXZlbnQuaXJxIDwgMTYpCi0JCQkJa3ZtX3BpY19zZXRfaXJxKHBpY19pcnFjaGlwKGt2bSksCi0JCQkJCWlycV9ldmVudC5pcnEsCi0JCQkJCWlycV9ldmVudC5sZXZlbCk7Ci0JCQlrdm1faW9hcGljX3NldF9pcnEoa3ZtLT5hcmNoLnZpb2FwaWMsCi0JCQkJCWlycV9ldmVudC5pcnEsCi0JCQkJCWlycV9ldmVudC5sZXZlbCk7CisJCQlrdm1fc2V0X2lycShrdm0sIGlycV9ldmVudC5pcnEsIGlycV9ldmVudC5sZXZlbCk7CiAJCQltdXRleF91bmxvY2soJmt2bS0+bG9jayk7CiAJCQlyID0gMDsKIAkJfQpAQCAtMTcxMyw2NSArMTc1MCw3NyBAQAogCX0KIAljYXNlIEtWTV9HRVRfSVJRQ0hJUDogewogCQkvKiAwOiBQSUMgbWFzdGVyLCAxOiBQSUMgc2xhdmUsIDI6IElPQVBJQyAqLwotCQlzdHJ1Y3Qga3ZtX2lycWNoaXAgY2hpcDsKKwkJc3RydWN0IGt2bV9pcnFjaGlwICpjaGlwID0ga21hbGxvYyhzaXplb2YoKmNoaXApLCBHRlBfS0VSTkVMKTsKIAotCQlyID0gLUVGQVVMVDsKLQkJaWYgKGNvcHlfZnJvbV91c2VyKCZjaGlwLCBhcmdwLCBzaXplb2YgY2hpcCkpCisJCXIgPSAtRU5PTUVNOworCQlpZiAoIWNoaXApCiAJCQlnb3RvIG91dDsKKwkJciA9IC1FRkFVTFQ7CisJCWlmIChjb3B5X2Zyb21fdXNlcihjaGlwLCBhcmdwLCBzaXplb2YgKmNoaXApKQorCQkJZ290byBnZXRfaXJxY2hpcF9vdXQ7CiAJCXIgPSAtRU5YSU87CiAJCWlmICghaXJxY2hpcF9pbl9rZXJuZWwoa3ZtKSkKLQkJCWdvdG8gb3V0OwotCQlyID0ga3ZtX3ZtX2lvY3RsX2dldF9pcnFjaGlwKGt2bSwgJmNoaXApOworCQkJZ290byBnZXRfaXJxY2hpcF9vdXQ7CisJCXIgPSBrdm1fdm1faW9jdGxfZ2V0X2lycWNoaXAoa3ZtLCBjaGlwKTsKKwkJaWYgKHIpCisJCQlnb3RvIGdldF9pcnFjaGlwX291dDsKKwkJciA9IC1FRkFVTFQ7CisJCWlmIChjb3B5X3RvX3VzZXIoYXJncCwgY2hpcCwgc2l6ZW9mICpjaGlwKSkKKwkJCWdvdG8gZ2V0X2lycWNoaXBfb3V0OworCQlyID0gMDsKKwlnZXRfaXJxY2hpcF9vdXQ6CisJCWtmcmVlKGNoaXApOwogCQlpZiAocikKIAkJCWdvdG8gb3V0OwotCQlyID0gLUVGQVVMVDsKLQkJaWYgKGNvcHlfdG9fdXNlcihhcmdwLCAmY2hpcCwgc2l6ZW9mIGNoaXApKQotCQkJZ290byBvdXQ7Ci0JCXIgPSAwOwogCQlicmVhazsKIAl9CiAJY2FzZSBLVk1fU0VUX0lSUUNISVA6IHsKIAkJLyogMDogUElDIG1hc3RlciwgMTogUElDIHNsYXZlLCAyOiBJT0FQSUMgKi8KLQkJc3RydWN0IGt2bV9pcnFjaGlwIGNoaXA7CisJCXN0cnVjdCBrdm1faXJxY2hpcCAqY2hpcCA9IGttYWxsb2Moc2l6ZW9mKCpjaGlwKSwgR0ZQX0tFUk5FTCk7CiAKLQkJciA9IC1FRkFVTFQ7Ci0JCWlmIChjb3B5X2Zyb21fdXNlcigmY2hpcCwgYXJncCwgc2l6ZW9mIGNoaXApKQorCQlyID0gLUVOT01FTTsKKwkJaWYgKCFjaGlwKQogCQkJZ290byBvdXQ7CisJCXIgPSAtRUZBVUxUOworCQlpZiAoY29weV9mcm9tX3VzZXIoY2hpcCwgYXJncCwgc2l6ZW9mICpjaGlwKSkKKwkJCWdvdG8gc2V0X2lycWNoaXBfb3V0OwogCQlyID0gLUVOWElPOwogCQlpZiAoIWlycWNoaXBfaW5fa2VybmVsKGt2bSkpCi0JCQlnb3RvIG91dDsKLQkJciA9IGt2bV92bV9pb2N0bF9zZXRfaXJxY2hpcChrdm0sICZjaGlwKTsKKwkJCWdvdG8gc2V0X2lycWNoaXBfb3V0OworCQlyID0ga3ZtX3ZtX2lvY3RsX3NldF9pcnFjaGlwKGt2bSwgY2hpcCk7CisJCWlmIChyKQorCQkJZ290byBzZXRfaXJxY2hpcF9vdXQ7CisJCXIgPSAwOworCXNldF9pcnFjaGlwX291dDoKKwkJa2ZyZWUoY2hpcCk7CiAJCWlmIChyKQogCQkJZ290byBvdXQ7Ci0JCXIgPSAwOwogCQlicmVhazsKIAl9CiAJY2FzZSBLVk1fR0VUX1BJVDogewotCQlzdHJ1Y3Qga3ZtX3BpdF9zdGF0ZSBwczsKIAkJciA9IC1FRkFVTFQ7Ci0JCWlmIChjb3B5X2Zyb21fdXNlcigmcHMsIGFyZ3AsIHNpemVvZiBwcykpCisJCWlmIChjb3B5X2Zyb21fdXNlcigmdS5wcywgYXJncCwgc2l6ZW9mKHN0cnVjdCBrdm1fcGl0X3N0YXRlKSkpCiAJCQlnb3RvIG91dDsKIAkJciA9IC1FTlhJTzsKIAkJaWYgKCFrdm0tPmFyY2gudnBpdCkKIAkJCWdvdG8gb3V0OwotCQlyID0ga3ZtX3ZtX2lvY3RsX2dldF9waXQoa3ZtLCAmcHMpOworCQlyID0ga3ZtX3ZtX2lvY3RsX2dldF9waXQoa3ZtLCAmdS5wcyk7CiAJCWlmIChyKQogCQkJZ290byBvdXQ7CiAJCXIgPSAtRUZBVUxUOwotCQlpZiAoY29weV90b191c2VyKGFyZ3AsICZwcywgc2l6ZW9mIHBzKSkKKwkJaWYgKGNvcHlfdG9fdXNlcihhcmdwLCAmdS5wcywgc2l6ZW9mKHN0cnVjdCBrdm1fcGl0X3N0YXRlKSkpCiAJCQlnb3RvIG91dDsKIAkJciA9IDA7CiAJCWJyZWFrOwogCX0KIAljYXNlIEtWTV9TRVRfUElUOiB7Ci0JCXN0cnVjdCBrdm1fcGl0X3N0YXRlIHBzOwogCQlyID0gLUVGQVVMVDsKLQkJaWYgKGNvcHlfZnJvbV91c2VyKCZwcywgYXJncCwgc2l6ZW9mIHBzKSkKKwkJaWYgKGNvcHlfZnJvbV91c2VyKCZ1LnBzLCBhcmdwLCBzaXplb2YgdS5wcykpCiAJCQlnb3RvIG91dDsKIAkJciA9IC1FTlhJTzsKIAkJaWYgKCFrdm0tPmFyY2gudnBpdCkKIAkJCWdvdG8gb3V0OwotCQlyID0ga3ZtX3ZtX2lvY3RsX3NldF9waXQoa3ZtLCAmcHMpOworCQlyID0ga3ZtX3ZtX2lvY3RsX3NldF9waXQoa3ZtLCAmdS5wcyk7CiAJCWlmIChyKQogCQkJZ290byBvdXQ7CiAJCXIgPSAwOwpAQCAtMjAxOCw5ICsyMDY3LDcgQEAKIAogCQl2YWwgPSAqKHU2NCAqKW5ldzsKIAotCQlkb3duX3JlYWQoJmN1cnJlbnQtPm1tLT5tbWFwX3NlbSk7CiAJCXBhZ2UgPSBnZm5fdG9fcGFnZSh2Y3B1LT5rdm0sIGdwYSA+PiBQQUdFX1NISUZUKTsKLQkJdXBfcmVhZCgmY3VycmVudC0+bW0tPm1tYXBfc2VtKTsKIAogCQlrYWRkciA9IGttYXBfYXRvbWljKHBhZ2UsIEtNX1VTRVIwKTsKIAkJc2V0XzY0Yml0KCh1NjQgKikoa2FkZHIgKyBvZmZzZXRfaW5fcGFnZShncGEpKSwgdmFsKTsKQEAgLTIwNDAsNiArMjA4Nyw3IEBACiAKIGludCBlbXVsYXRlX2ludmxwZyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGd2YV90IGFkZHJlc3MpCiB7CisJa3ZtX21tdV9pbnZscGcodmNwdSwgYWRkcmVzcyk7CiAJcmV0dXJuIFg4NkVNVUxfQ09OVElOVUU7CiB9CiAKQEAgLTIwODAsNyArMjEyOCw3IEBACiB2b2lkIGt2bV9yZXBvcnRfZW11bGF0aW9uX2ZhaWx1cmUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBjb25zdCBjaGFyICpjb250ZXh0KQogewogCXU4IG9wY29kZXNbNF07Ci0JdW5zaWduZWQgbG9uZyByaXAgPSB2Y3B1LT5hcmNoLnJpcDsKKwl1bnNpZ25lZCBsb25nIHJpcCA9IGt2bV9yaXBfcmVhZCh2Y3B1KTsKIAl1bnNpZ25lZCBsb25nIHJpcF9saW5lYXI7CiAKIAlpZiAoIXByaW50a19yYXRlbGltaXQoKSkKQEAgLTIxMDIsNiArMjE1MCwxNCBAQAogCS5jbXB4Y2hnX2VtdWxhdGVkICAgID0gZW11bGF0b3JfY21weGNoZ19lbXVsYXRlZCwKIH07CiAKK3N0YXRpYyB2b2lkIGNhY2hlX2FsbF9yZWdzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKK3sKKwlrdm1fcmVnaXN0ZXJfcmVhZCh2Y3B1LCBWQ1BVX1JFR1NfUkFYKTsKKwlrdm1fcmVnaXN0ZXJfcmVhZCh2Y3B1LCBWQ1BVX1JFR1NfUlNQKTsKKwlrdm1fcmVnaXN0ZXJfcmVhZCh2Y3B1LCBWQ1BVX1JFR1NfUklQKTsKKwl2Y3B1LT5hcmNoLnJlZ3NfZGlydHkgPSB+MDsKK30KKwogaW50IGVtdWxhdGVfaW5zdHJ1Y3Rpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAogCQkJc3RydWN0IGt2bV9ydW4gKnJ1biwKIAkJCXVuc2lnbmVkIGxvbmcgY3IyLApAQCAtMjExMSw4ICsyMTY3LDE1IEBACiAJaW50IHI7CiAJc3RydWN0IGRlY29kZV9jYWNoZSAqYzsKIAorCWt2bV9jbGVhcl9leGNlcHRpb25fcXVldWUodmNwdSk7CiAJdmNwdS0+YXJjaC5tbWlvX2ZhdWx0X2NyMiA9IGNyMjsKLQlrdm1feDg2X29wcy0+Y2FjaGVfcmVncyh2Y3B1KTsKKwkvKgorCSAqIFRPRE86IGZpeCB4ODZfZW11bGF0ZS5jIHRvIHVzZSBndWVzdF9yZWFkL3dyaXRlX3JlZ2lzdGVyCisJICogaW5zdGVhZCBvZiBkaXJlY3QgLT5yZWdzIGFjY2Vzc2VzLCBjYW4gc2F2ZSBodW5kcmVkIGN5Y2xlcworCSAqIG9uIEludGVsIGZvciBpbnN0cnVjdGlvbnMgdGhhdCBkb24ndCByZWFkL2NoYW5nZSBSU1AsIGZvcgorCSAqIGZvciBleGFtcGxlLgorCSAqLworCWNhY2hlX2FsbF9yZWdzKHZjcHUpOwogCiAJdmNwdS0+bW1pb19pc193cml0ZSA9IDA7CiAJdmNwdS0+YXJjaC5waW8uc3RyaW5nID0gMDsKQEAgLTIxNzIsNyArMjIzNSw2IEBACiAJCXJldHVybiBFTVVMQVRFX0RPX01NSU87CiAJfQogCi0Ja3ZtX3g4Nl9vcHMtPmRlY2FjaGVfcmVncyh2Y3B1KTsKIAlrdm1feDg2X29wcy0+c2V0X3JmbGFncyh2Y3B1LCB2Y3B1LT5hcmNoLmVtdWxhdGVfY3R4dC5lZmxhZ3MpOwogCiAJaWYgKHZjcHUtPm1taW9faXNfd3JpdGUpIHsKQEAgLTIyMjUsMjAgKzIyODcsMTkgQEAKIAlzdHJ1Y3Qga3ZtX3Bpb19yZXF1ZXN0ICppbyA9ICZ2Y3B1LT5hcmNoLnBpbzsKIAlsb25nIGRlbHRhOwogCWludCByOwotCi0Ja3ZtX3g4Nl9vcHMtPmNhY2hlX3JlZ3ModmNwdSk7CisJdW5zaWduZWQgbG9uZyB2YWw7CiAKIAlpZiAoIWlvLT5zdHJpbmcpIHsKLQkJaWYgKGlvLT5pbikKLQkJCW1lbWNweSgmdmNwdS0+YXJjaC5yZWdzW1ZDUFVfUkVHU19SQVhdLCB2Y3B1LT5hcmNoLnBpb19kYXRhLAotCQkJICAgICAgIGlvLT5zaXplKTsKKwkJaWYgKGlvLT5pbikgeworCQkJdmFsID0ga3ZtX3JlZ2lzdGVyX3JlYWQodmNwdSwgVkNQVV9SRUdTX1JBWCk7CisJCQltZW1jcHkoJnZhbCwgdmNwdS0+YXJjaC5waW9fZGF0YSwgaW8tPnNpemUpOworCQkJa3ZtX3JlZ2lzdGVyX3dyaXRlKHZjcHUsIFZDUFVfUkVHU19SQVgsIHZhbCk7CisJCX0KIAl9IGVsc2UgewogCQlpZiAoaW8tPmluKSB7CiAJCQlyID0gcGlvX2NvcHlfZGF0YSh2Y3B1KTsKLQkJCWlmIChyKSB7Ci0JCQkJa3ZtX3g4Nl9vcHMtPmNhY2hlX3JlZ3ModmNwdSk7CisJCQlpZiAocikKIAkJCQlyZXR1cm4gcjsKLQkJCX0KIAkJfQogCiAJCWRlbHRhID0gMTsKQEAgLTIyNDgsMTkgKzIzMDksMjQgQEAKIAkJCSAqIFRoZSBzaXplIG9mIHRoZSByZWdpc3RlciBzaG91bGQgcmVhbGx5IGRlcGVuZCBvbgogCQkJICogY3VycmVudCBhZGRyZXNzIHNpemUuCiAJCQkgKi8KLQkJCXZjcHUtPmFyY2gucmVnc1tWQ1BVX1JFR1NfUkNYXSAtPSBkZWx0YTsKKwkJCXZhbCA9IGt2bV9yZWdpc3Rlcl9yZWFkKHZjcHUsIFZDUFVfUkVHU19SQ1gpOworCQkJdmFsIC09IGRlbHRhOworCQkJa3ZtX3JlZ2lzdGVyX3dyaXRlKHZjcHUsIFZDUFVfUkVHU19SQ1gsIHZhbCk7CiAJCX0KIAkJaWYgKGlvLT5kb3duKQogCQkJZGVsdGEgPSAtZGVsdGE7CiAJCWRlbHRhICo9IGlvLT5zaXplOwotCQlpZiAoaW8tPmluKQotCQkJdmNwdS0+YXJjaC5yZWdzW1ZDUFVfUkVHU19SREldICs9IGRlbHRhOwotCQllbHNlCi0JCQl2Y3B1LT5hcmNoLnJlZ3NbVkNQVV9SRUdTX1JTSV0gKz0gZGVsdGE7CisJCWlmIChpby0+aW4pIHsKKwkJCXZhbCA9IGt2bV9yZWdpc3Rlcl9yZWFkKHZjcHUsIFZDUFVfUkVHU19SREkpOworCQkJdmFsICs9IGRlbHRhOworCQkJa3ZtX3JlZ2lzdGVyX3dyaXRlKHZjcHUsIFZDUFVfUkVHU19SREksIHZhbCk7CisJCX0gZWxzZSB7CisJCQl2YWwgPSBrdm1fcmVnaXN0ZXJfcmVhZCh2Y3B1LCBWQ1BVX1JFR1NfUlNJKTsKKwkJCXZhbCArPSBkZWx0YTsKKwkJCWt2bV9yZWdpc3Rlcl93cml0ZSh2Y3B1LCBWQ1BVX1JFR1NfUlNJLCB2YWwpOworCQl9CiAJfQogCi0Ja3ZtX3g4Nl9vcHMtPmRlY2FjaGVfcmVncyh2Y3B1KTsKLQogCWlvLT5jb3VudCAtPSBpby0+Y3VyX2NvdW50OwogCWlvLT5jdXJfY291bnQgPSAwOwogCkBAIC0yMzEzLDYgKzIzNzksNyBAQAogCQkgIGludCBzaXplLCB1bnNpZ25lZCBwb3J0KQogewogCXN0cnVjdCBrdm1faW9fZGV2aWNlICpwaW9fZGV2OworCXVuc2lnbmVkIGxvbmcgdmFsOwogCiAJdmNwdS0+cnVuLT5leGl0X3JlYXNvbiA9IEtWTV9FWElUX0lPOwogCXZjcHUtPnJ1bi0+aW8uZGlyZWN0aW9uID0gaW4gPyBLVk1fRVhJVF9JT19JTiA6IEtWTV9FWElUX0lPX09VVDsKQEAgLTIzMzMsOCArMjQwMCw4IEBACiAJCUtWTVRSQUNFXzJEKElPX1dSSVRFLCB2Y3B1LCB2Y3B1LT5ydW4tPmlvLnBvcnQsICh1MzIpc2l6ZSwKIAkJCSAgICBoYW5kbGVyKTsKIAotCWt2bV94ODZfb3BzLT5jYWNoZV9yZWdzKHZjcHUpOwotCW1lbWNweSh2Y3B1LT5hcmNoLnBpb19kYXRhLCAmdmNwdS0+YXJjaC5yZWdzW1ZDUFVfUkVHU19SQVhdLCA0KTsKKwl2YWwgPSBrdm1fcmVnaXN0ZXJfcmVhZCh2Y3B1LCBWQ1BVX1JFR1NfUkFYKTsKKwltZW1jcHkodmNwdS0+YXJjaC5waW9fZGF0YSwgJnZhbCwgNCk7CiAKIAlrdm1feDg2X29wcy0+c2tpcF9lbXVsYXRlZF9pbnN0cnVjdGlvbih2Y3B1KTsKIApAQCAtMjQ5MiwxMSArMjU1OSw2IEBACiAJS1ZNVFJBQ0VfMEQoSExULCB2Y3B1LCBoYW5kbGVyKTsKIAlpZiAoaXJxY2hpcF9pbl9rZXJuZWwodmNwdS0+a3ZtKSkgewogCQl2Y3B1LT5hcmNoLm1wX3N0YXRlID0gS1ZNX01QX1NUQVRFX0hBTFRFRDsKLQkJdXBfcmVhZCgmdmNwdS0+a3ZtLT5zbG90c19sb2NrKTsKLQkJa3ZtX3ZjcHVfYmxvY2sodmNwdSk7Ci0JCWRvd25fcmVhZCgmdmNwdS0+a3ZtLT5zbG90c19sb2NrKTsKLQkJaWYgKHZjcHUtPmFyY2gubXBfc3RhdGUgIT0gS1ZNX01QX1NUQVRFX1JVTk5BQkxFKQotCQkJcmV0dXJuIC1FSU5UUjsKIAkJcmV0dXJuIDE7CiAJfSBlbHNlIHsKIAkJdmNwdS0+cnVuLT5leGl0X3JlYXNvbiA9IEtWTV9FWElUX0hMVDsKQEAgLTI1MTksMTMgKzI1ODEsMTEgQEAKIAl1bnNpZ25lZCBsb25nIG5yLCBhMCwgYTEsIGEyLCBhMywgcmV0OwogCWludCByID0gMTsKIAotCWt2bV94ODZfb3BzLT5jYWNoZV9yZWdzKHZjcHUpOwotCi0JbnIgPSB2Y3B1LT5hcmNoLnJlZ3NbVkNQVV9SRUdTX1JBWF07Ci0JYTAgPSB2Y3B1LT5hcmNoLnJlZ3NbVkNQVV9SRUdTX1JCWF07Ci0JYTEgPSB2Y3B1LT5hcmNoLnJlZ3NbVkNQVV9SRUdTX1JDWF07Ci0JYTIgPSB2Y3B1LT5hcmNoLnJlZ3NbVkNQVV9SRUdTX1JEWF07Ci0JYTMgPSB2Y3B1LT5hcmNoLnJlZ3NbVkNQVV9SRUdTX1JTSV07CisJbnIgPSBrdm1fcmVnaXN0ZXJfcmVhZCh2Y3B1LCBWQ1BVX1JFR1NfUkFYKTsKKwlhMCA9IGt2bV9yZWdpc3Rlcl9yZWFkKHZjcHUsIFZDUFVfUkVHU19SQlgpOworCWExID0ga3ZtX3JlZ2lzdGVyX3JlYWQodmNwdSwgVkNQVV9SRUdTX1JDWCk7CisJYTIgPSBrdm1fcmVnaXN0ZXJfcmVhZCh2Y3B1LCBWQ1BVX1JFR1NfUkRYKTsKKwlhMyA9IGt2bV9yZWdpc3Rlcl9yZWFkKHZjcHUsIFZDUFVfUkVHU19SU0kpOwogCiAJS1ZNVFJBQ0VfMUQoVk1NQ0FMTCwgdmNwdSwgKHUzMiluciwgaGFuZGxlcik7CiAKQEAgLTI1NDgsOCArMjYwOCw3IEBACiAJCXJldCA9IC1LVk1fRU5PU1lTOwogCQlicmVhazsKIAl9Ci0JdmNwdS0+YXJjaC5yZWdzW1ZDUFVfUkVHU19SQVhdID0gcmV0OwotCWt2bV94ODZfb3BzLT5kZWNhY2hlX3JlZ3ModmNwdSk7CisJa3ZtX3JlZ2lzdGVyX3dyaXRlKHZjcHUsIFZDUFVfUkVHU19SQVgsIHJldCk7CiAJKyt2Y3B1LT5zdGF0Lmh5cGVyY2FsbHM7CiAJcmV0dXJuIHI7CiB9CkBAIC0yNTU5LDYgKzI2MTgsNyBAQAogewogCWNoYXIgaW5zdHJ1Y3Rpb25bM107CiAJaW50IHJldCA9IDA7CisJdW5zaWduZWQgbG9uZyByaXAgPSBrdm1fcmlwX3JlYWQodmNwdSk7CiAKIAogCS8qCkBAIC0yNTY4LDkgKzI2MjgsOCBAQAogCSAqLwogCWt2bV9tbXVfemFwX2FsbCh2Y3B1LT5rdm0pOwogCi0Ja3ZtX3g4Nl9vcHMtPmNhY2hlX3JlZ3ModmNwdSk7CiAJa3ZtX3g4Nl9vcHMtPnBhdGNoX2h5cGVyY2FsbCh2Y3B1LCBpbnN0cnVjdGlvbik7Ci0JaWYgKGVtdWxhdG9yX3dyaXRlX2VtdWxhdGVkKHZjcHUtPmFyY2gucmlwLCBpbnN0cnVjdGlvbiwgMywgdmNwdSkKKwlpZiAoZW11bGF0b3Jfd3JpdGVfZW11bGF0ZWQocmlwLCBpbnN0cnVjdGlvbiwgMywgdmNwdSkKIAkgICAgIT0gWDg2RU1VTF9DT05USU5VRSkKIAkJcmV0ID0gLUVGQVVMVDsKIApAQCAtMjcwMCwxMyArMjc1OSwxMiBAQAogCXUzMiBmdW5jdGlvbiwgaW5kZXg7CiAJc3RydWN0IGt2bV9jcHVpZF9lbnRyeTIgKmUsICpiZXN0OwogCi0Ja3ZtX3g4Nl9vcHMtPmNhY2hlX3JlZ3ModmNwdSk7Ci0JZnVuY3Rpb24gPSB2Y3B1LT5hcmNoLnJlZ3NbVkNQVV9SRUdTX1JBWF07Ci0JaW5kZXggPSB2Y3B1LT5hcmNoLnJlZ3NbVkNQVV9SRUdTX1JDWF07Ci0JdmNwdS0+YXJjaC5yZWdzW1ZDUFVfUkVHU19SQVhdID0gMDsKLQl2Y3B1LT5hcmNoLnJlZ3NbVkNQVV9SRUdTX1JCWF0gPSAwOwotCXZjcHUtPmFyY2gucmVnc1tWQ1BVX1JFR1NfUkNYXSA9IDA7Ci0JdmNwdS0+YXJjaC5yZWdzW1ZDUFVfUkVHU19SRFhdID0gMDsKKwlmdW5jdGlvbiA9IGt2bV9yZWdpc3Rlcl9yZWFkKHZjcHUsIFZDUFVfUkVHU19SQVgpOworCWluZGV4ID0ga3ZtX3JlZ2lzdGVyX3JlYWQodmNwdSwgVkNQVV9SRUdTX1JDWCk7CisJa3ZtX3JlZ2lzdGVyX3dyaXRlKHZjcHUsIFZDUFVfUkVHU19SQVgsIDApOworCWt2bV9yZWdpc3Rlcl93cml0ZSh2Y3B1LCBWQ1BVX1JFR1NfUkJYLCAwKTsKKwlrdm1fcmVnaXN0ZXJfd3JpdGUodmNwdSwgVkNQVV9SRUdTX1JDWCwgMCk7CisJa3ZtX3JlZ2lzdGVyX3dyaXRlKHZjcHUsIFZDUFVfUkVHU19SRFgsIDApOwogCWJlc3QgPSBOVUxMOwogCWZvciAoaSA9IDA7IGkgPCB2Y3B1LT5hcmNoLmNwdWlkX25lbnQ7ICsraSkgewogCQllID0gJnZjcHUtPmFyY2guY3B1aWRfZW50cmllc1tpXTsKQEAgLTI3MjQsMTggKzI3ODIsMTcgQEAKIAkJCQliZXN0ID0gZTsKIAl9CiAJaWYgKGJlc3QpIHsKLQkJdmNwdS0+YXJjaC5yZWdzW1ZDUFVfUkVHU19SQVhdID0gYmVzdC0+ZWF4OwotCQl2Y3B1LT5hcmNoLnJlZ3NbVkNQVV9SRUdTX1JCWF0gPSBiZXN0LT5lYng7Ci0JCXZjcHUtPmFyY2gucmVnc1tWQ1BVX1JFR1NfUkNYXSA9IGJlc3QtPmVjeDsKLQkJdmNwdS0+YXJjaC5yZWdzW1ZDUFVfUkVHU19SRFhdID0gYmVzdC0+ZWR4OworCQlrdm1fcmVnaXN0ZXJfd3JpdGUodmNwdSwgVkNQVV9SRUdTX1JBWCwgYmVzdC0+ZWF4KTsKKwkJa3ZtX3JlZ2lzdGVyX3dyaXRlKHZjcHUsIFZDUFVfUkVHU19SQlgsIGJlc3QtPmVieCk7CisJCWt2bV9yZWdpc3Rlcl93cml0ZSh2Y3B1LCBWQ1BVX1JFR1NfUkNYLCBiZXN0LT5lY3gpOworCQlrdm1fcmVnaXN0ZXJfd3JpdGUodmNwdSwgVkNQVV9SRUdTX1JEWCwgYmVzdC0+ZWR4KTsKIAl9Ci0Ja3ZtX3g4Nl9vcHMtPmRlY2FjaGVfcmVncyh2Y3B1KTsKIAlrdm1feDg2X29wcy0+c2tpcF9lbXVsYXRlZF9pbnN0cnVjdGlvbih2Y3B1KTsKIAlLVk1UUkFDRV81RChDUFVJRCwgdmNwdSwgZnVuY3Rpb24sCi0JCSAgICAodTMyKXZjcHUtPmFyY2gucmVnc1tWQ1BVX1JFR1NfUkFYXSwKLQkJICAgICh1MzIpdmNwdS0+YXJjaC5yZWdzW1ZDUFVfUkVHU19SQlhdLAotCQkgICAgKHUzMil2Y3B1LT5hcmNoLnJlZ3NbVkNQVV9SRUdTX1JDWF0sCi0JCSAgICAodTMyKXZjcHUtPmFyY2gucmVnc1tWQ1BVX1JFR1NfUkRYXSwgaGFuZGxlcik7CisJCSAgICAodTMyKWt2bV9yZWdpc3Rlcl9yZWFkKHZjcHUsIFZDUFVfUkVHU19SQVgpLAorCQkgICAgKHUzMilrdm1fcmVnaXN0ZXJfcmVhZCh2Y3B1LCBWQ1BVX1JFR1NfUkJYKSwKKwkJICAgICh1MzIpa3ZtX3JlZ2lzdGVyX3JlYWQodmNwdSwgVkNQVV9SRUdTX1JDWCksCisJCSAgICAodTMyKWt2bV9yZWdpc3Rlcl9yZWFkKHZjcHUsIFZDUFVfUkVHU19SRFgpLCBoYW5kbGVyKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGt2bV9lbXVsYXRlX2NwdWlkKTsKIApAQCAtMjc3Niw5ICsyODMzLDcgQEAKIAlpZiAoIWFwaWMgfHwgIWFwaWMtPnZhcGljX2FkZHIpCiAJCXJldHVybjsKIAotCWRvd25fcmVhZCgmY3VycmVudC0+bW0tPm1tYXBfc2VtKTsKIAlwYWdlID0gZ2ZuX3RvX3BhZ2UodmNwdS0+a3ZtLCBhcGljLT52YXBpY19hZGRyID4+IFBBR0VfU0hJRlQpOwotCXVwX3JlYWQoJmN1cnJlbnQtPm1tLT5tbWFwX3NlbSk7CiAKIAl2Y3B1LT5hcmNoLmFwaWMtPnZhcGljX3BhZ2UgPSBwYWdlOwogfQpAQCAtMjc5NiwyOCArMjg1MSwxMCBAQAogCXVwX3JlYWQoJnZjcHUtPmt2bS0+c2xvdHNfbG9jayk7CiB9CiAKLXN0YXRpYyBpbnQgX192Y3B1X3J1bihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fcnVuICprdm1fcnVuKQorc3RhdGljIGludCB2Y3B1X2VudGVyX2d1ZXN0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9ydW4gKmt2bV9ydW4pCiB7CiAJaW50IHI7CiAKLQlpZiAodW5saWtlbHkodmNwdS0+YXJjaC5tcF9zdGF0ZSA9PSBLVk1fTVBfU1RBVEVfU0lQSV9SRUNFSVZFRCkpIHsKLQkJcHJfZGVidWcoInZjcHUgJWQgcmVjZWl2ZWQgc2lwaSB3aXRoIHZlY3RvciAjICV4XG4iLAotCQkgICAgICAgdmNwdS0+dmNwdV9pZCwgdmNwdS0+YXJjaC5zaXBpX3ZlY3Rvcik7Ci0JCWt2bV9sYXBpY19yZXNldCh2Y3B1KTsKLQkJciA9IGt2bV94ODZfb3BzLT52Y3B1X3Jlc2V0KHZjcHUpOwotCQlpZiAocikKLQkJCXJldHVybiByOwotCQl2Y3B1LT5hcmNoLm1wX3N0YXRlID0gS1ZNX01QX1NUQVRFX1JVTk5BQkxFOwotCX0KLQotCWRvd25fcmVhZCgmdmNwdS0+a3ZtLT5zbG90c19sb2NrKTsKLQl2YXBpY19lbnRlcih2Y3B1KTsKLQotcHJlZW1wdGVkOgotCWlmICh2Y3B1LT5ndWVzdF9kZWJ1Zy5lbmFibGVkKQotCQlrdm1feDg2X29wcy0+Z3Vlc3RfZGVidWdfcHJlKHZjcHUpOwotCi1hZ2FpbjoKIAlpZiAodmNwdS0+cmVxdWVzdHMpCiAJCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoS1ZNX1JFUV9NTVVfUkVMT0FELCAmdmNwdS0+cmVxdWVzdHMpKQogCQkJa3ZtX21tdV91bmxvYWQodmNwdSk7CkBAIC0yODI5LDYgKzI4NjYsOCBAQAogCWlmICh2Y3B1LT5yZXF1ZXN0cykgewogCQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KEtWTV9SRVFfTUlHUkFURV9USU1FUiwgJnZjcHUtPnJlcXVlc3RzKSkKIAkJCV9fa3ZtX21pZ3JhdGVfdGltZXJzKHZjcHUpOworCQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KEtWTV9SRVFfTU1VX1NZTkMsICZ2Y3B1LT5yZXF1ZXN0cykpCisJCQlrdm1fbW11X3N5bmNfcm9vdHModmNwdSk7CiAJCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoS1ZNX1JFUV9UTEJfRkxVU0gsICZ2Y3B1LT5yZXF1ZXN0cykpCiAJCQlrdm1feDg2X29wcy0+dGxiX2ZsdXNoKHZjcHUpOwogCQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KEtWTV9SRVFfUkVQT1JUX1RQUl9BQ0NFU1MsCkBAIC0yODU0LDIxICsyODkzLDE1IEBACiAKIAlsb2NhbF9pcnFfZGlzYWJsZSgpOwogCi0JaWYgKHZjcHUtPnJlcXVlc3RzIHx8IG5lZWRfcmVzY2hlZCgpKSB7CisJaWYgKHZjcHUtPnJlcXVlc3RzIHx8IG5lZWRfcmVzY2hlZCgpIHx8IHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSB7CiAJCWxvY2FsX2lycV9lbmFibGUoKTsKIAkJcHJlZW1wdF9lbmFibGUoKTsKIAkJciA9IDE7CiAJCWdvdG8gb3V0OwogCX0KIAotCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkgewotCQlsb2NhbF9pcnFfZW5hYmxlKCk7Ci0JCXByZWVtcHRfZW5hYmxlKCk7Ci0JCXIgPSAtRUlOVFI7Ci0JCWt2bV9ydW4tPmV4aXRfcmVhc29uID0gS1ZNX0VYSVRfSU5UUjsKLQkJKyt2Y3B1LT5zdGF0LnNpZ25hbF9leGl0czsKLQkJZ290byBvdXQ7Ci0JfQorCWlmICh2Y3B1LT5ndWVzdF9kZWJ1Zy5lbmFibGVkKQorCQlrdm1feDg2X29wcy0+Z3Vlc3RfZGVidWdfcHJlKHZjcHUpOwogCiAJdmNwdS0+Z3Vlc3RfbW9kZSA9IDE7CiAJLyoKQEAgLTI5MTcsOCArMjk1MCw4IEBACiAJICogUHJvZmlsZSBLVk0gZXhpdCBSSVBzOgogCSAqLwogCWlmICh1bmxpa2VseShwcm9mX29uID09IEtWTV9QUk9GSUxJTkcpKSB7Ci0JCWt2bV94ODZfb3BzLT5jYWNoZV9yZWdzKHZjcHUpOwotCQlwcm9maWxlX2hpdChLVk1fUFJPRklMSU5HLCAodm9pZCAqKXZjcHUtPmFyY2gucmlwKTsKKwkJdW5zaWduZWQgbG9uZyByaXAgPSBrdm1fcmlwX3JlYWQodmNwdSk7CisJCXByb2ZpbGVfaGl0KEtWTV9QUk9GSUxJTkcsICh2b2lkICopcmlwKTsKIAl9CiAKIAlpZiAodmNwdS0+YXJjaC5leGNlcHRpb24ucGVuZGluZyAmJiBrdm1feDg2X29wcy0+ZXhjZXB0aW9uX2luamVjdGVkKHZjcHUpKQpAQCAtMjkyNywyNiArMjk2MCw2MyBAQAogCWt2bV9sYXBpY19zeW5jX2Zyb21fdmFwaWModmNwdSk7CiAKIAlyID0ga3ZtX3g4Nl9vcHMtPmhhbmRsZV9leGl0KGt2bV9ydW4sIHZjcHUpOwotCi0JaWYgKHIgPiAwKSB7Ci0JCWlmIChkbV9yZXF1ZXN0X2Zvcl9pcnFfaW5qZWN0aW9uKHZjcHUsIGt2bV9ydW4pKSB7Ci0JCQlyID0gLUVJTlRSOwotCQkJa3ZtX3J1bi0+ZXhpdF9yZWFzb24gPSBLVk1fRVhJVF9JTlRSOwotCQkJKyt2Y3B1LT5zdGF0LnJlcXVlc3RfaXJxX2V4aXRzOwotCQkJZ290byBvdXQ7Ci0JCX0KLQkJaWYgKCFuZWVkX3Jlc2NoZWQoKSkKLQkJCWdvdG8gYWdhaW47Ci0JfQotCiBvdXQ6Ci0JdXBfcmVhZCgmdmNwdS0+a3ZtLT5zbG90c19sb2NrKTsKLQlpZiAociA+IDApIHsKLQkJa3ZtX3Jlc2NoZWQodmNwdSk7Ci0JCWRvd25fcmVhZCgmdmNwdS0+a3ZtLT5zbG90c19sb2NrKTsKLQkJZ290byBwcmVlbXB0ZWQ7CisJcmV0dXJuIHI7Cit9CisKK3N0YXRpYyBpbnQgX192Y3B1X3J1bihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fcnVuICprdm1fcnVuKQoreworCWludCByOworCisJaWYgKHVubGlrZWx5KHZjcHUtPmFyY2gubXBfc3RhdGUgPT0gS1ZNX01QX1NUQVRFX1NJUElfUkVDRUlWRUQpKSB7CisJCXByX2RlYnVnKCJ2Y3B1ICVkIHJlY2VpdmVkIHNpcGkgd2l0aCB2ZWN0b3IgIyAleFxuIiwKKwkJCSB2Y3B1LT52Y3B1X2lkLCB2Y3B1LT5hcmNoLnNpcGlfdmVjdG9yKTsKKwkJa3ZtX2xhcGljX3Jlc2V0KHZjcHUpOworCQlyID0ga3ZtX3g4Nl9vcHMtPnZjcHVfcmVzZXQodmNwdSk7CisJCWlmIChyKQorCQkJcmV0dXJuIHI7CisJCXZjcHUtPmFyY2gubXBfc3RhdGUgPSBLVk1fTVBfU1RBVEVfUlVOTkFCTEU7CiAJfQogCisJZG93bl9yZWFkKCZ2Y3B1LT5rdm0tPnNsb3RzX2xvY2spOworCXZhcGljX2VudGVyKHZjcHUpOworCisJciA9IDE7CisJd2hpbGUgKHIgPiAwKSB7CisJCWlmICh2Y3B1LT5hcmNoLm1wX3N0YXRlID09IEtWTV9NUF9TVEFURV9SVU5OQUJMRSkKKwkJCXIgPSB2Y3B1X2VudGVyX2d1ZXN0KHZjcHUsIGt2bV9ydW4pOworCQllbHNlIHsKKwkJCXVwX3JlYWQoJnZjcHUtPmt2bS0+c2xvdHNfbG9jayk7CisJCQlrdm1fdmNwdV9ibG9jayh2Y3B1KTsKKwkJCWRvd25fcmVhZCgmdmNwdS0+a3ZtLT5zbG90c19sb2NrKTsKKwkJCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoS1ZNX1JFUV9VTkhBTFQsICZ2Y3B1LT5yZXF1ZXN0cykpCisJCQkJaWYgKHZjcHUtPmFyY2gubXBfc3RhdGUgPT0gS1ZNX01QX1NUQVRFX0hBTFRFRCkKKwkJCQkJdmNwdS0+YXJjaC5tcF9zdGF0ZSA9CisJCQkJCQkJS1ZNX01QX1NUQVRFX1JVTk5BQkxFOworCQkJaWYgKHZjcHUtPmFyY2gubXBfc3RhdGUgIT0gS1ZNX01QX1NUQVRFX1JVTk5BQkxFKQorCQkJCXIgPSAtRUlOVFI7CisJCX0KKworCQlpZiAociA+IDApIHsKKwkJCWlmIChkbV9yZXF1ZXN0X2Zvcl9pcnFfaW5qZWN0aW9uKHZjcHUsIGt2bV9ydW4pKSB7CisJCQkJciA9IC1FSU5UUjsKKwkJCQlrdm1fcnVuLT5leGl0X3JlYXNvbiA9IEtWTV9FWElUX0lOVFI7CisJCQkJKyt2Y3B1LT5zdGF0LnJlcXVlc3RfaXJxX2V4aXRzOworCQkJfQorCQkJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSB7CisJCQkJciA9IC1FSU5UUjsKKwkJCQlrdm1fcnVuLT5leGl0X3JlYXNvbiA9IEtWTV9FWElUX0lOVFI7CisJCQkJKyt2Y3B1LT5zdGF0LnNpZ25hbF9leGl0czsKKwkJCX0KKwkJCWlmIChuZWVkX3Jlc2NoZWQoKSkgeworCQkJCXVwX3JlYWQoJnZjcHUtPmt2bS0+c2xvdHNfbG9jayk7CisJCQkJa3ZtX3Jlc2NoZWQodmNwdSk7CisJCQkJZG93bl9yZWFkKCZ2Y3B1LT5rdm0tPnNsb3RzX2xvY2spOworCQkJfQorCQl9CisJfQorCisJdXBfcmVhZCgmdmNwdS0+a3ZtLT5zbG90c19sb2NrKTsKIAlwb3N0X2t2bV9ydW5fc2F2ZSh2Y3B1LCBrdm1fcnVuKTsKIAogCXZhcGljX2V4aXQodmNwdSk7CkBAIC0yOTY2LDYgKzMwMzYsNyBAQAogCiAJaWYgKHVubGlrZWx5KHZjcHUtPmFyY2gubXBfc3RhdGUgPT0gS1ZNX01QX1NUQVRFX1VOSU5JVElBTElaRUQpKSB7CiAJCWt2bV92Y3B1X2Jsb2NrKHZjcHUpOworCQljbGVhcl9iaXQoS1ZNX1JFUV9VTkhBTFQsICZ2Y3B1LT5yZXF1ZXN0cyk7CiAJCXIgPSAtRUFHQUlOOwogCQlnb3RvIG91dDsKIAl9CkBAIC0yOTk5LDExICszMDcwLDkgQEAKIAkJfQogCX0KICNlbmRpZgotCWlmIChrdm1fcnVuLT5leGl0X3JlYXNvbiA9PSBLVk1fRVhJVF9IWVBFUkNBTEwpIHsKLQkJa3ZtX3g4Nl9vcHMtPmNhY2hlX3JlZ3ModmNwdSk7Ci0JCXZjcHUtPmFyY2gucmVnc1tWQ1BVX1JFR1NfUkFYXSA9IGt2bV9ydW4tPmh5cGVyY2FsbC5yZXQ7Ci0JCWt2bV94ODZfb3BzLT5kZWNhY2hlX3JlZ3ModmNwdSk7Ci0JfQorCWlmIChrdm1fcnVuLT5leGl0X3JlYXNvbiA9PSBLVk1fRVhJVF9IWVBFUkNBTEwpCisJCWt2bV9yZWdpc3Rlcl93cml0ZSh2Y3B1LCBWQ1BVX1JFR1NfUkFYLAorCQkJCSAgICAga3ZtX3J1bi0+aHlwZXJjYWxsLnJldCk7CiAKIAlyID0gX192Y3B1X3J1bih2Y3B1LCBrdm1fcnVuKTsKIApAQCAtMzAxOSwyOCArMzA4OCwyNiBAQAogewogCXZjcHVfbG9hZCh2Y3B1KTsKIAotCWt2bV94ODZfb3BzLT5jYWNoZV9yZWdzKHZjcHUpOwotCi0JcmVncy0+cmF4ID0gdmNwdS0+YXJjaC5yZWdzW1ZDUFVfUkVHU19SQVhdOwotCXJlZ3MtPnJieCA9IHZjcHUtPmFyY2gucmVnc1tWQ1BVX1JFR1NfUkJYXTsKLQlyZWdzLT5yY3ggPSB2Y3B1LT5hcmNoLnJlZ3NbVkNQVV9SRUdTX1JDWF07Ci0JcmVncy0+cmR4ID0gdmNwdS0+YXJjaC5yZWdzW1ZDUFVfUkVHU19SRFhdOwotCXJlZ3MtPnJzaSA9IHZjcHUtPmFyY2gucmVnc1tWQ1BVX1JFR1NfUlNJXTsKLQlyZWdzLT5yZGkgPSB2Y3B1LT5hcmNoLnJlZ3NbVkNQVV9SRUdTX1JESV07Ci0JcmVncy0+cnNwID0gdmNwdS0+YXJjaC5yZWdzW1ZDUFVfUkVHU19SU1BdOwotCXJlZ3MtPnJicCA9IHZjcHUtPmFyY2gucmVnc1tWQ1BVX1JFR1NfUkJQXTsKKwlyZWdzLT5yYXggPSBrdm1fcmVnaXN0ZXJfcmVhZCh2Y3B1LCBWQ1BVX1JFR1NfUkFYKTsKKwlyZWdzLT5yYnggPSBrdm1fcmVnaXN0ZXJfcmVhZCh2Y3B1LCBWQ1BVX1JFR1NfUkJYKTsKKwlyZWdzLT5yY3ggPSBrdm1fcmVnaXN0ZXJfcmVhZCh2Y3B1LCBWQ1BVX1JFR1NfUkNYKTsKKwlyZWdzLT5yZHggPSBrdm1fcmVnaXN0ZXJfcmVhZCh2Y3B1LCBWQ1BVX1JFR1NfUkRYKTsKKwlyZWdzLT5yc2kgPSBrdm1fcmVnaXN0ZXJfcmVhZCh2Y3B1LCBWQ1BVX1JFR1NfUlNJKTsKKwlyZWdzLT5yZGkgPSBrdm1fcmVnaXN0ZXJfcmVhZCh2Y3B1LCBWQ1BVX1JFR1NfUkRJKTsKKwlyZWdzLT5yc3AgPSBrdm1fcmVnaXN0ZXJfcmVhZCh2Y3B1LCBWQ1BVX1JFR1NfUlNQKTsKKwlyZWdzLT5yYnAgPSBrdm1fcmVnaXN0ZXJfcmVhZCh2Y3B1LCBWQ1BVX1JFR1NfUkJQKTsKICNpZmRlZiBDT05GSUdfWDg2XzY0Ci0JcmVncy0+cjggPSB2Y3B1LT5hcmNoLnJlZ3NbVkNQVV9SRUdTX1I4XTsKLQlyZWdzLT5yOSA9IHZjcHUtPmFyY2gucmVnc1tWQ1BVX1JFR1NfUjldOwotCXJlZ3MtPnIxMCA9IHZjcHUtPmFyY2gucmVnc1tWQ1BVX1JFR1NfUjEwXTsKLQlyZWdzLT5yMTEgPSB2Y3B1LT5hcmNoLnJlZ3NbVkNQVV9SRUdTX1IxMV07Ci0JcmVncy0+cjEyID0gdmNwdS0+YXJjaC5yZWdzW1ZDUFVfUkVHU19SMTJdOwotCXJlZ3MtPnIxMyA9IHZjcHUtPmFyY2gucmVnc1tWQ1BVX1JFR1NfUjEzXTsKLQlyZWdzLT5yMTQgPSB2Y3B1LT5hcmNoLnJlZ3NbVkNQVV9SRUdTX1IxNF07Ci0JcmVncy0+cjE1ID0gdmNwdS0+YXJjaC5yZWdzW1ZDUFVfUkVHU19SMTVdOworCXJlZ3MtPnI4ID0ga3ZtX3JlZ2lzdGVyX3JlYWQodmNwdSwgVkNQVV9SRUdTX1I4KTsKKwlyZWdzLT5yOSA9IGt2bV9yZWdpc3Rlcl9yZWFkKHZjcHUsIFZDUFVfUkVHU19SOSk7CisJcmVncy0+cjEwID0ga3ZtX3JlZ2lzdGVyX3JlYWQodmNwdSwgVkNQVV9SRUdTX1IxMCk7CisJcmVncy0+cjExID0ga3ZtX3JlZ2lzdGVyX3JlYWQodmNwdSwgVkNQVV9SRUdTX1IxMSk7CisJcmVncy0+cjEyID0ga3ZtX3JlZ2lzdGVyX3JlYWQodmNwdSwgVkNQVV9SRUdTX1IxMik7CisJcmVncy0+cjEzID0ga3ZtX3JlZ2lzdGVyX3JlYWQodmNwdSwgVkNQVV9SRUdTX1IxMyk7CisJcmVncy0+cjE0ID0ga3ZtX3JlZ2lzdGVyX3JlYWQodmNwdSwgVkNQVV9SRUdTX1IxNCk7CisJcmVncy0+cjE1ID0ga3ZtX3JlZ2lzdGVyX3JlYWQodmNwdSwgVkNQVV9SRUdTX1IxNSk7CiAjZW5kaWYKIAotCXJlZ3MtPnJpcCA9IHZjcHUtPmFyY2gucmlwOworCXJlZ3MtPnJpcCA9IGt2bV9yaXBfcmVhZCh2Y3B1KTsKIAlyZWdzLT5yZmxhZ3MgPSBrdm1feDg2X29wcy0+Z2V0X3JmbGFncyh2Y3B1KTsKIAogCS8qCkBAIC0zMDU4LDI5ICszMTI1LDI5IEBACiB7CiAJdmNwdV9sb2FkKHZjcHUpOwogCi0JdmNwdS0+YXJjaC5yZWdzW1ZDUFVfUkVHU19SQVhdID0gcmVncy0+cmF4OwotCXZjcHUtPmFyY2gucmVnc1tWQ1BVX1JFR1NfUkJYXSA9IHJlZ3MtPnJieDsKLQl2Y3B1LT5hcmNoLnJlZ3NbVkNQVV9SRUdTX1JDWF0gPSByZWdzLT5yY3g7Ci0JdmNwdS0+YXJjaC5yZWdzW1ZDUFVfUkVHU19SRFhdID0gcmVncy0+cmR4OwotCXZjcHUtPmFyY2gucmVnc1tWQ1BVX1JFR1NfUlNJXSA9IHJlZ3MtPnJzaTsKLQl2Y3B1LT5hcmNoLnJlZ3NbVkNQVV9SRUdTX1JESV0gPSByZWdzLT5yZGk7Ci0JdmNwdS0+YXJjaC5yZWdzW1ZDUFVfUkVHU19SU1BdID0gcmVncy0+cnNwOwotCXZjcHUtPmFyY2gucmVnc1tWQ1BVX1JFR1NfUkJQXSA9IHJlZ3MtPnJicDsKKwlrdm1fcmVnaXN0ZXJfd3JpdGUodmNwdSwgVkNQVV9SRUdTX1JBWCwgcmVncy0+cmF4KTsKKwlrdm1fcmVnaXN0ZXJfd3JpdGUodmNwdSwgVkNQVV9SRUdTX1JCWCwgcmVncy0+cmJ4KTsKKwlrdm1fcmVnaXN0ZXJfd3JpdGUodmNwdSwgVkNQVV9SRUdTX1JDWCwgcmVncy0+cmN4KTsKKwlrdm1fcmVnaXN0ZXJfd3JpdGUodmNwdSwgVkNQVV9SRUdTX1JEWCwgcmVncy0+cmR4KTsKKwlrdm1fcmVnaXN0ZXJfd3JpdGUodmNwdSwgVkNQVV9SRUdTX1JTSSwgcmVncy0+cnNpKTsKKwlrdm1fcmVnaXN0ZXJfd3JpdGUodmNwdSwgVkNQVV9SRUdTX1JESSwgcmVncy0+cmRpKTsKKwlrdm1fcmVnaXN0ZXJfd3JpdGUodmNwdSwgVkNQVV9SRUdTX1JTUCwgcmVncy0+cnNwKTsKKwlrdm1fcmVnaXN0ZXJfd3JpdGUodmNwdSwgVkNQVV9SRUdTX1JCUCwgcmVncy0+cmJwKTsKICNpZmRlZiBDT05GSUdfWDg2XzY0Ci0JdmNwdS0+YXJjaC5yZWdzW1ZDUFVfUkVHU19SOF0gPSByZWdzLT5yODsKLQl2Y3B1LT5hcmNoLnJlZ3NbVkNQVV9SRUdTX1I5XSA9IHJlZ3MtPnI5OwotCXZjcHUtPmFyY2gucmVnc1tWQ1BVX1JFR1NfUjEwXSA9IHJlZ3MtPnIxMDsKLQl2Y3B1LT5hcmNoLnJlZ3NbVkNQVV9SRUdTX1IxMV0gPSByZWdzLT5yMTE7Ci0JdmNwdS0+YXJjaC5yZWdzW1ZDUFVfUkVHU19SMTJdID0gcmVncy0+cjEyOwotCXZjcHUtPmFyY2gucmVnc1tWQ1BVX1JFR1NfUjEzXSA9IHJlZ3MtPnIxMzsKLQl2Y3B1LT5hcmNoLnJlZ3NbVkNQVV9SRUdTX1IxNF0gPSByZWdzLT5yMTQ7Ci0JdmNwdS0+YXJjaC5yZWdzW1ZDUFVfUkVHU19SMTVdID0gcmVncy0+cjE1OworCWt2bV9yZWdpc3Rlcl93cml0ZSh2Y3B1LCBWQ1BVX1JFR1NfUjgsIHJlZ3MtPnI4KTsKKwlrdm1fcmVnaXN0ZXJfd3JpdGUodmNwdSwgVkNQVV9SRUdTX1I5LCByZWdzLT5yOSk7CisJa3ZtX3JlZ2lzdGVyX3dyaXRlKHZjcHUsIFZDUFVfUkVHU19SMTAsIHJlZ3MtPnIxMCk7CisJa3ZtX3JlZ2lzdGVyX3dyaXRlKHZjcHUsIFZDUFVfUkVHU19SMTEsIHJlZ3MtPnIxMSk7CisJa3ZtX3JlZ2lzdGVyX3dyaXRlKHZjcHUsIFZDUFVfUkVHU19SMTIsIHJlZ3MtPnIxMik7CisJa3ZtX3JlZ2lzdGVyX3dyaXRlKHZjcHUsIFZDUFVfUkVHU19SMTMsIHJlZ3MtPnIxMyk7CisJa3ZtX3JlZ2lzdGVyX3dyaXRlKHZjcHUsIFZDUFVfUkVHU19SMTQsIHJlZ3MtPnIxNCk7CisJa3ZtX3JlZ2lzdGVyX3dyaXRlKHZjcHUsIFZDUFVfUkVHU19SMTUsIHJlZ3MtPnIxNSk7CisKICNlbmRpZgogCi0JdmNwdS0+YXJjaC5yaXAgPSByZWdzLT5yaXA7CisJa3ZtX3JpcF93cml0ZSh2Y3B1LCByZWdzLT5yaXApOwogCWt2bV94ODZfb3BzLT5zZXRfcmZsYWdzKHZjcHUsIHJlZ3MtPnJmbGFncyk7CiAKLQlrdm1feDg2X29wcy0+ZGVjYWNoZV9yZWdzKHZjcHUpOwogCiAJdmNwdS0+YXJjaC5leGNlcHRpb24ucGVuZGluZyA9IGZhbHNlOwogCkBAIC0zMjk0LDExICszMzYxLDMzIEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQga3ZtX2xvYWRfcmVhbG1vZGVfc2VnbWVudChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUxNiBzZWxlY3RvciwgaW50IHNlZykKK3sKKwlzdHJ1Y3Qga3ZtX3NlZ21lbnQgc2VndmFyID0geworCQkuYmFzZSA9IHNlbGVjdG9yIDw8IDQsCisJCS5saW1pdCA9IDB4ZmZmZiwKKwkJLnNlbGVjdG9yID0gc2VsZWN0b3IsCisJCS50eXBlID0gMywKKwkJLnByZXNlbnQgPSAxLAorCQkuZHBsID0gMywKKwkJLmRiID0gMCwKKwkJLnMgPSAxLAorCQkubCA9IDAsCisJCS5nID0gMCwKKwkJLmF2bCA9IDAsCisJCS51bnVzYWJsZSA9IDAsCisJfTsKKwlrdm1feDg2X29wcy0+c2V0X3NlZ21lbnQodmNwdSwgJnNlZ3Zhciwgc2VnKTsKKwlyZXR1cm4gMDsKK30KKwogaW50IGt2bV9sb2FkX3NlZ21lbnRfZGVzY3JpcHRvcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUxNiBzZWxlY3RvciwKIAkJCQlpbnQgdHlwZV9iaXRzLCBpbnQgc2VnKQogewogCXN0cnVjdCBrdm1fc2VnbWVudCBrdm1fc2VnOwogCisJaWYgKCEodmNwdS0+YXJjaC5jcjAgJiBYODZfQ1IwX1BFKSkKKwkJcmV0dXJuIGt2bV9sb2FkX3JlYWxtb2RlX3NlZ21lbnQodmNwdSwgc2VsZWN0b3IsIHNlZyk7CiAJaWYgKGxvYWRfc2VnbWVudF9kZXNjcmlwdG9yX3RvX2t2bV9kZXNjdCh2Y3B1LCBzZWxlY3RvciwgJmt2bV9zZWcpKQogCQlyZXR1cm4gMTsKIAlrdm1fc2VnLnR5cGUgfD0gdHlwZV9iaXRzOwpAQCAtMzMxNiwxNyArMzQwNSwxNiBAQAogCQkJCXN0cnVjdCB0c3Nfc2VnbWVudF8zMiAqdHNzKQogewogCXRzcy0+Y3IzID0gdmNwdS0+YXJjaC5jcjM7Ci0JdHNzLT5laXAgPSB2Y3B1LT5hcmNoLnJpcDsKKwl0c3MtPmVpcCA9IGt2bV9yaXBfcmVhZCh2Y3B1KTsKIAl0c3MtPmVmbGFncyA9IGt2bV94ODZfb3BzLT5nZXRfcmZsYWdzKHZjcHUpOwotCXRzcy0+ZWF4ID0gdmNwdS0+YXJjaC5yZWdzW1ZDUFVfUkVHU19SQVhdOwotCXRzcy0+ZWN4ID0gdmNwdS0+YXJjaC5yZWdzW1ZDUFVfUkVHU19SQ1hdOwotCXRzcy0+ZWR4ID0gdmNwdS0+YXJjaC5yZWdzW1ZDUFVfUkVHU19SRFhdOwotCXRzcy0+ZWJ4ID0gdmNwdS0+YXJjaC5yZWdzW1ZDUFVfUkVHU19SQlhdOwotCXRzcy0+ZXNwID0gdmNwdS0+YXJjaC5yZWdzW1ZDUFVfUkVHU19SU1BdOwotCXRzcy0+ZWJwID0gdmNwdS0+YXJjaC5yZWdzW1ZDUFVfUkVHU19SQlBdOwotCXRzcy0+ZXNpID0gdmNwdS0+YXJjaC5yZWdzW1ZDUFVfUkVHU19SU0ldOwotCXRzcy0+ZWRpID0gdmNwdS0+YXJjaC5yZWdzW1ZDUFVfUkVHU19SREldOwotCisJdHNzLT5lYXggPSBrdm1fcmVnaXN0ZXJfcmVhZCh2Y3B1LCBWQ1BVX1JFR1NfUkFYKTsKKwl0c3MtPmVjeCA9IGt2bV9yZWdpc3Rlcl9yZWFkKHZjcHUsIFZDUFVfUkVHU19SQ1gpOworCXRzcy0+ZWR4ID0ga3ZtX3JlZ2lzdGVyX3JlYWQodmNwdSwgVkNQVV9SRUdTX1JEWCk7CisJdHNzLT5lYnggPSBrdm1fcmVnaXN0ZXJfcmVhZCh2Y3B1LCBWQ1BVX1JFR1NfUkJYKTsKKwl0c3MtPmVzcCA9IGt2bV9yZWdpc3Rlcl9yZWFkKHZjcHUsIFZDUFVfUkVHU19SU1ApOworCXRzcy0+ZWJwID0ga3ZtX3JlZ2lzdGVyX3JlYWQodmNwdSwgVkNQVV9SRUdTX1JCUCk7CisJdHNzLT5lc2kgPSBrdm1fcmVnaXN0ZXJfcmVhZCh2Y3B1LCBWQ1BVX1JFR1NfUlNJKTsKKwl0c3MtPmVkaSA9IGt2bV9yZWdpc3Rlcl9yZWFkKHZjcHUsIFZDUFVfUkVHU19SREkpOwogCXRzcy0+ZXMgPSBnZXRfc2VnbWVudF9zZWxlY3Rvcih2Y3B1LCBWQ1BVX1NSRUdfRVMpOwogCXRzcy0+Y3MgPSBnZXRfc2VnbWVudF9zZWxlY3Rvcih2Y3B1LCBWQ1BVX1NSRUdfQ1MpOwogCXRzcy0+c3MgPSBnZXRfc2VnbWVudF9zZWxlY3Rvcih2Y3B1LCBWQ1BVX1NSRUdfU1MpOwpAQCAtMzM0MiwxNyArMzQzMCwxNyBAQAogewogCWt2bV9zZXRfY3IzKHZjcHUsIHRzcy0+Y3IzKTsKIAotCXZjcHUtPmFyY2gucmlwID0gdHNzLT5laXA7CisJa3ZtX3JpcF93cml0ZSh2Y3B1LCB0c3MtPmVpcCk7CiAJa3ZtX3g4Nl9vcHMtPnNldF9yZmxhZ3ModmNwdSwgdHNzLT5lZmxhZ3MgfCAyKTsKIAotCXZjcHUtPmFyY2gucmVnc1tWQ1BVX1JFR1NfUkFYXSA9IHRzcy0+ZWF4OwotCXZjcHUtPmFyY2gucmVnc1tWQ1BVX1JFR1NfUkNYXSA9IHRzcy0+ZWN4OwotCXZjcHUtPmFyY2gucmVnc1tWQ1BVX1JFR1NfUkRYXSA9IHRzcy0+ZWR4OwotCXZjcHUtPmFyY2gucmVnc1tWQ1BVX1JFR1NfUkJYXSA9IHRzcy0+ZWJ4OwotCXZjcHUtPmFyY2gucmVnc1tWQ1BVX1JFR1NfUlNQXSA9IHRzcy0+ZXNwOwotCXZjcHUtPmFyY2gucmVnc1tWQ1BVX1JFR1NfUkJQXSA9IHRzcy0+ZWJwOwotCXZjcHUtPmFyY2gucmVnc1tWQ1BVX1JFR1NfUlNJXSA9IHRzcy0+ZXNpOwotCXZjcHUtPmFyY2gucmVnc1tWQ1BVX1JFR1NfUkRJXSA9IHRzcy0+ZWRpOworCWt2bV9yZWdpc3Rlcl93cml0ZSh2Y3B1LCBWQ1BVX1JFR1NfUkFYLCB0c3MtPmVheCk7CisJa3ZtX3JlZ2lzdGVyX3dyaXRlKHZjcHUsIFZDUFVfUkVHU19SQ1gsIHRzcy0+ZWN4KTsKKwlrdm1fcmVnaXN0ZXJfd3JpdGUodmNwdSwgVkNQVV9SRUdTX1JEWCwgdHNzLT5lZHgpOworCWt2bV9yZWdpc3Rlcl93cml0ZSh2Y3B1LCBWQ1BVX1JFR1NfUkJYLCB0c3MtPmVieCk7CisJa3ZtX3JlZ2lzdGVyX3dyaXRlKHZjcHUsIFZDUFVfUkVHU19SU1AsIHRzcy0+ZXNwKTsKKwlrdm1fcmVnaXN0ZXJfd3JpdGUodmNwdSwgVkNQVV9SRUdTX1JCUCwgdHNzLT5lYnApOworCWt2bV9yZWdpc3Rlcl93cml0ZSh2Y3B1LCBWQ1BVX1JFR1NfUlNJLCB0c3MtPmVzaSk7CisJa3ZtX3JlZ2lzdGVyX3dyaXRlKHZjcHUsIFZDUFVfUkVHU19SREksIHRzcy0+ZWRpKTsKIAogCWlmIChrdm1fbG9hZF9zZWdtZW50X2Rlc2NyaXB0b3IodmNwdSwgdHNzLT5sZHRfc2VsZWN0b3IsIDAsIFZDUFVfU1JFR19MRFRSKSkKIAkJcmV0dXJuIDE7CkBAIC0zMzgwLDE2ICszNDY4LDE2IEBACiBzdGF0aWMgdm9pZCBzYXZlX3N0YXRlX3RvX3RzczE2KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKIAkJCQlzdHJ1Y3QgdHNzX3NlZ21lbnRfMTYgKnRzcykKIHsKLQl0c3MtPmlwID0gdmNwdS0+YXJjaC5yaXA7CisJdHNzLT5pcCA9IGt2bV9yaXBfcmVhZCh2Y3B1KTsKIAl0c3MtPmZsYWcgPSBrdm1feDg2X29wcy0+Z2V0X3JmbGFncyh2Y3B1KTsKLQl0c3MtPmF4ID0gdmNwdS0+YXJjaC5yZWdzW1ZDUFVfUkVHU19SQVhdOwotCXRzcy0+Y3ggPSB2Y3B1LT5hcmNoLnJlZ3NbVkNQVV9SRUdTX1JDWF07Ci0JdHNzLT5keCA9IHZjcHUtPmFyY2gucmVnc1tWQ1BVX1JFR1NfUkRYXTsKLQl0c3MtPmJ4ID0gdmNwdS0+YXJjaC5yZWdzW1ZDUFVfUkVHU19SQlhdOwotCXRzcy0+c3AgPSB2Y3B1LT5hcmNoLnJlZ3NbVkNQVV9SRUdTX1JTUF07Ci0JdHNzLT5icCA9IHZjcHUtPmFyY2gucmVnc1tWQ1BVX1JFR1NfUkJQXTsKLQl0c3MtPnNpID0gdmNwdS0+YXJjaC5yZWdzW1ZDUFVfUkVHU19SU0ldOwotCXRzcy0+ZGkgPSB2Y3B1LT5hcmNoLnJlZ3NbVkNQVV9SRUdTX1JESV07CisJdHNzLT5heCA9IGt2bV9yZWdpc3Rlcl9yZWFkKHZjcHUsIFZDUFVfUkVHU19SQVgpOworCXRzcy0+Y3ggPSBrdm1fcmVnaXN0ZXJfcmVhZCh2Y3B1LCBWQ1BVX1JFR1NfUkNYKTsKKwl0c3MtPmR4ID0ga3ZtX3JlZ2lzdGVyX3JlYWQodmNwdSwgVkNQVV9SRUdTX1JEWCk7CisJdHNzLT5ieCA9IGt2bV9yZWdpc3Rlcl9yZWFkKHZjcHUsIFZDUFVfUkVHU19SQlgpOworCXRzcy0+c3AgPSBrdm1fcmVnaXN0ZXJfcmVhZCh2Y3B1LCBWQ1BVX1JFR1NfUlNQKTsKKwl0c3MtPmJwID0ga3ZtX3JlZ2lzdGVyX3JlYWQodmNwdSwgVkNQVV9SRUdTX1JCUCk7CisJdHNzLT5zaSA9IGt2bV9yZWdpc3Rlcl9yZWFkKHZjcHUsIFZDUFVfUkVHU19SU0kpOworCXRzcy0+ZGkgPSBrdm1fcmVnaXN0ZXJfcmVhZCh2Y3B1LCBWQ1BVX1JFR1NfUkRJKTsKIAogCXRzcy0+ZXMgPSBnZXRfc2VnbWVudF9zZWxlY3Rvcih2Y3B1LCBWQ1BVX1NSRUdfRVMpOwogCXRzcy0+Y3MgPSBnZXRfc2VnbWVudF9zZWxlY3Rvcih2Y3B1LCBWQ1BVX1NSRUdfQ1MpOwpAQCAtMzQwMiwxNiArMzQ5MCwxNiBAQAogc3RhdGljIGludCBsb2FkX3N0YXRlX2Zyb21fdHNzMTYoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAogCQkJCSBzdHJ1Y3QgdHNzX3NlZ21lbnRfMTYgKnRzcykKIHsKLQl2Y3B1LT5hcmNoLnJpcCA9IHRzcy0+aXA7CisJa3ZtX3JpcF93cml0ZSh2Y3B1LCB0c3MtPmlwKTsKIAlrdm1feDg2X29wcy0+c2V0X3JmbGFncyh2Y3B1LCB0c3MtPmZsYWcgfCAyKTsKLQl2Y3B1LT5hcmNoLnJlZ3NbVkNQVV9SRUdTX1JBWF0gPSB0c3MtPmF4OwotCXZjcHUtPmFyY2gucmVnc1tWQ1BVX1JFR1NfUkNYXSA9IHRzcy0+Y3g7Ci0JdmNwdS0+YXJjaC5yZWdzW1ZDUFVfUkVHU19SRFhdID0gdHNzLT5keDsKLQl2Y3B1LT5hcmNoLnJlZ3NbVkNQVV9SRUdTX1JCWF0gPSB0c3MtPmJ4OwotCXZjcHUtPmFyY2gucmVnc1tWQ1BVX1JFR1NfUlNQXSA9IHRzcy0+c3A7Ci0JdmNwdS0+YXJjaC5yZWdzW1ZDUFVfUkVHU19SQlBdID0gdHNzLT5icDsKLQl2Y3B1LT5hcmNoLnJlZ3NbVkNQVV9SRUdTX1JTSV0gPSB0c3MtPnNpOwotCXZjcHUtPmFyY2gucmVnc1tWQ1BVX1JFR1NfUkRJXSA9IHRzcy0+ZGk7CisJa3ZtX3JlZ2lzdGVyX3dyaXRlKHZjcHUsIFZDUFVfUkVHU19SQVgsIHRzcy0+YXgpOworCWt2bV9yZWdpc3Rlcl93cml0ZSh2Y3B1LCBWQ1BVX1JFR1NfUkNYLCB0c3MtPmN4KTsKKwlrdm1fcmVnaXN0ZXJfd3JpdGUodmNwdSwgVkNQVV9SRUdTX1JEWCwgdHNzLT5keCk7CisJa3ZtX3JlZ2lzdGVyX3dyaXRlKHZjcHUsIFZDUFVfUkVHU19SQlgsIHRzcy0+YngpOworCWt2bV9yZWdpc3Rlcl93cml0ZSh2Y3B1LCBWQ1BVX1JFR1NfUlNQLCB0c3MtPnNwKTsKKwlrdm1fcmVnaXN0ZXJfd3JpdGUodmNwdSwgVkNQVV9SRUdTX1JCUCwgdHNzLT5icCk7CisJa3ZtX3JlZ2lzdGVyX3dyaXRlKHZjcHUsIFZDUFVfUkVHU19SU0ksIHRzcy0+c2kpOworCWt2bV9yZWdpc3Rlcl93cml0ZSh2Y3B1LCBWQ1BVX1JFR1NfUkRJLCB0c3MtPmRpKTsKIAogCWlmIChrdm1fbG9hZF9zZWdtZW50X2Rlc2NyaXB0b3IodmNwdSwgdHNzLT5sZHQsIDAsIFZDUFVfU1JFR19MRFRSKSkKIAkJcmV0dXJuIDE7CkBAIC0zNTM0LDcgKzM2MjIsNiBAQAogCX0KIAogCWt2bV94ODZfb3BzLT5za2lwX2VtdWxhdGVkX2luc3RydWN0aW9uKHZjcHUpOwotCWt2bV94ODZfb3BzLT5jYWNoZV9yZWdzKHZjcHUpOwogCiAJaWYgKG5zZWdfZGVzYy50eXBlICYgOCkKIAkJcmV0ID0ga3ZtX3Rhc2tfc3dpdGNoXzMyKHZjcHUsIHRzc19zZWxlY3Rvciwgb2xkX3Rzc19iYXNlLApAQCAtMzU1OSw3ICszNjQ2LDYgQEAKIAl0cl9zZWcudHlwZSA9IDExOwogCWt2bV9zZXRfc2VnbWVudCh2Y3B1LCAmdHJfc2VnLCBWQ1BVX1NSRUdfVFIpOwogb3V0OgotCWt2bV94ODZfb3BzLT5kZWNhY2hlX3JlZ3ModmNwdSk7CiAJcmV0dXJuIHJldDsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGt2bV90YXNrX3N3aXRjaCk7CkBAIC0zNjIyLDYgKzM3MDgsNyBAQAogCQkJcHJfZGVidWcoIlNldCBiYWNrIHBlbmRpbmcgaXJxICVkXG4iLAogCQkJCSBwZW5kaW5nX3ZlYyk7CiAJCX0KKwkJa3ZtX3BpY19jbGVhcl9pc3JfYWNrKHZjcHUtPmt2bSk7CiAJfQogCiAJa3ZtX3NldF9zZWdtZW50KHZjcHUsICZzcmVncy0+Y3MsIFZDUFVfU1JFR19DUyk7CkBAIC0zNjM0LDYgKzM3MjEsMTIgQEAKIAlrdm1fc2V0X3NlZ21lbnQodmNwdSwgJnNyZWdzLT50ciwgVkNQVV9TUkVHX1RSKTsKIAlrdm1fc2V0X3NlZ21lbnQodmNwdSwgJnNyZWdzLT5sZHQsIFZDUFVfU1JFR19MRFRSKTsKIAorCS8qIE9sZGVyIHVzZXJzcGFjZSB3b24ndCB1bmhhbHQgdGhlIHZjcHUgb24gcmVzZXQuICovCisJaWYgKHZjcHUtPnZjcHVfaWQgPT0gMCAmJiBrdm1fcmlwX3JlYWQodmNwdSkgPT0gMHhmZmYwICYmCisJICAgIHNyZWdzLT5jcy5zZWxlY3RvciA9PSAweGYwMDAgJiYgc3JlZ3MtPmNzLmJhc2UgPT0gMHhmZmZmMDAwMCAmJgorCSAgICAhKHZjcHUtPmFyY2guY3IwICYgWDg2X0NSMF9QRSkpCisJCXZjcHUtPmFyY2gubXBfc3RhdGUgPSBLVk1fTVBfU1RBVEVfUlVOTkFCTEU7CisKIAl2Y3B1X3B1dCh2Y3B1KTsKIAogCXJldHVybiAwOwpAQCAtMzkxOCw2ICs0MDExLDcgQEAKIAkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CiAKIAlJTklUX0xJU1RfSEVBRCgma3ZtLT5hcmNoLmFjdGl2ZV9tbXVfcGFnZXMpOworCUlOSVRfTElTVF9IRUFEKCZrdm0tPmFyY2guYXNzaWduZWRfZGV2X2hlYWQpOwogCiAJcmV0dXJuIGt2bTsKIH0KQEAgLTM5NTAsNiArNDA0NCw4IEBACiAKIHZvaWQga3ZtX2FyY2hfZGVzdHJveV92bShzdHJ1Y3Qga3ZtICprdm0pCiB7CisJa3ZtX2lvbW11X3VubWFwX2d1ZXN0KGt2bSk7CisJa3ZtX2ZyZWVfYWxsX2Fzc2lnbmVkX2RldmljZXMoa3ZtKTsKIAlrdm1fZnJlZV9waXQoa3ZtKTsKIAlrZnJlZShrdm0tPmFyY2gudnBpYyk7CiAJa2ZyZWUoa3ZtLT5hcmNoLnZpb2FwaWMpOwpAQCAtMzk4MSw3ICs0MDc3LDcgQEAKIAkJCXVzZXJzcGFjZV9hZGRyID0gZG9fbW1hcChOVUxMLCAwLAogCQkJCQkJIG5wYWdlcyAqIFBBR0VfU0laRSwKIAkJCQkJCSBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLAotCQkJCQkJIE1BUF9TSEFSRUQgfCBNQVBfQU5PTllNT1VTLAorCQkJCQkJIE1BUF9QUklWQVRFIHwgTUFQX0FOT05ZTU9VUywKIAkJCQkJCSAwKTsKIAkJCXVwX3dyaXRlKCZjdXJyZW50LT5tbS0+bW1hcF9zZW0pOwogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0veDg2LmggYi9hcmNoL3g4Ni9rdm0veDg2LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmE0YmU3OAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveDg2L2t2bS94ODYuaApAQCAtMCwwICsxLDIyIEBACisjaWZuZGVmIEFSQ0hfWDg2X0tWTV9YODZfSAorI2RlZmluZSBBUkNIX1g4Nl9LVk1fWDg2X0gKKworI2luY2x1ZGUgPGxpbnV4L2t2bV9ob3N0Lmg+CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBrdm1fY2xlYXJfZXhjZXB0aW9uX3F1ZXVlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKK3sKKwl2Y3B1LT5hcmNoLmV4Y2VwdGlvbi5wZW5kaW5nID0gZmFsc2U7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBrdm1fcXVldWVfaW50ZXJydXB0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTggdmVjdG9yKQoreworCXZjcHUtPmFyY2guaW50ZXJydXB0LnBlbmRpbmcgPSB0cnVlOworCXZjcHUtPmFyY2guaW50ZXJydXB0Lm5yID0gdmVjdG9yOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQga3ZtX2NsZWFyX2ludGVycnVwdF9xdWV1ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCit7CisJdmNwdS0+YXJjaC5pbnRlcnJ1cHQucGVuZGluZyA9IGZhbHNlOworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS94ODZfZW11bGF0ZS5jIGIvYXJjaC94ODYva3ZtL3g4Nl9lbXVsYXRlLmMKaW5kZXggZjJmOTA0Ni4uZWEwNTExNyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL3g4Nl9lbXVsYXRlLmMKKysrIGIvYXJjaC94ODYva3ZtL3g4Nl9lbXVsYXRlLmMKQEAgLTI2LDYgKzI2LDcgQEAKICNkZWZpbmUgRFBSSU5URihfZiwgX2EgLi4uKSBwcmludGYoX2YgLCAjIyBfYSkKICNlbHNlCiAjaW5jbHVkZSA8bGludXgva3ZtX2hvc3QuaD4KKyNpbmNsdWRlICJrdm1fY2FjaGVfcmVncy5oIgogI2RlZmluZSBEUFJJTlRGKHguLi4pIGRvIHt9IHdoaWxlICgwKQogI2VuZGlmCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CkBAIC00NiwyNSArNDcsMjYgQEAKICNkZWZpbmUgSW1wbGljaXRPcHMgKDE8PDEpCS8qIEltcGxpY2l0IGluIG9wY29kZS4gTm8gZ2VuZXJpYyBkZWNvZGUuICovCiAjZGVmaW5lIERzdFJlZyAgICAgICgyPDwxKQkvKiBSZWdpc3RlciBvcGVyYW5kLiAqLwogI2RlZmluZSBEc3RNZW0gICAgICAoMzw8MSkJLyogTWVtb3J5IG9wZXJhbmQuICovCi0jZGVmaW5lIERzdE1hc2sgICAgICgzPDwxKQorI2RlZmluZSBEc3RBY2MgICAgICAoNDw8MSkgICAgICAvKiBEZXN0aW5hdGlvbiBBY2N1bXVsYXRvciAqLworI2RlZmluZSBEc3RNYXNrICAgICAoNzw8MSkKIC8qIFNvdXJjZSBvcGVyYW5kIHR5cGUuICovCi0jZGVmaW5lIFNyY05vbmUgICAgICgwPDwzKQkvKiBObyBzb3VyY2Ugb3BlcmFuZC4gKi8KLSNkZWZpbmUgU3JjSW1wbGljaXQgKDA8PDMpCS8qIFNvdXJjZSBvcGVyYW5kIGlzIGltcGxpY2l0IGluIHRoZSBvcGNvZGUuICovCi0jZGVmaW5lIFNyY1JlZyAgICAgICgxPDwzKQkvKiBSZWdpc3RlciBvcGVyYW5kLiAqLwotI2RlZmluZSBTcmNNZW0gICAgICAoMjw8MykJLyogTWVtb3J5IG9wZXJhbmQuICovCi0jZGVmaW5lIFNyY01lbTE2ICAgICgzPDwzKQkvKiBNZW1vcnkgb3BlcmFuZCAoMTYtYml0KS4gKi8KLSNkZWZpbmUgU3JjTWVtMzIgICAgKDQ8PDMpCS8qIE1lbW9yeSBvcGVyYW5kICgzMi1iaXQpLiAqLwotI2RlZmluZSBTcmNJbW0gICAgICAoNTw8MykJLyogSW1tZWRpYXRlIG9wZXJhbmQuICovCi0jZGVmaW5lIFNyY0ltbUJ5dGUgICg2PDwzKQkvKiA4LWJpdCBzaWduLWV4dGVuZGVkIGltbWVkaWF0ZSBvcGVyYW5kLiAqLwotI2RlZmluZSBTcmNNYXNrICAgICAoNzw8MykKKyNkZWZpbmUgU3JjTm9uZSAgICAgKDA8PDQpCS8qIE5vIHNvdXJjZSBvcGVyYW5kLiAqLworI2RlZmluZSBTcmNJbXBsaWNpdCAoMDw8NCkJLyogU291cmNlIG9wZXJhbmQgaXMgaW1wbGljaXQgaW4gdGhlIG9wY29kZS4gKi8KKyNkZWZpbmUgU3JjUmVnICAgICAgKDE8PDQpCS8qIFJlZ2lzdGVyIG9wZXJhbmQuICovCisjZGVmaW5lIFNyY01lbSAgICAgICgyPDw0KQkvKiBNZW1vcnkgb3BlcmFuZC4gKi8KKyNkZWZpbmUgU3JjTWVtMTYgICAgKDM8PDQpCS8qIE1lbW9yeSBvcGVyYW5kICgxNi1iaXQpLiAqLworI2RlZmluZSBTcmNNZW0zMiAgICAoNDw8NCkJLyogTWVtb3J5IG9wZXJhbmQgKDMyLWJpdCkuICovCisjZGVmaW5lIFNyY0ltbSAgICAgICg1PDw0KQkvKiBJbW1lZGlhdGUgb3BlcmFuZC4gKi8KKyNkZWZpbmUgU3JjSW1tQnl0ZSAgKDY8PDQpCS8qIDgtYml0IHNpZ24tZXh0ZW5kZWQgaW1tZWRpYXRlIG9wZXJhbmQuICovCisjZGVmaW5lIFNyY01hc2sgICAgICg3PDw0KQogLyogR2VuZXJpYyBNb2RSTSBkZWNvZGUuICovCi0jZGVmaW5lIE1vZFJNICAgICAgICgxPDw2KQorI2RlZmluZSBNb2RSTSAgICAgICAoMTw8NykKIC8qIERlc3RpbmF0aW9uIGlzIG9ubHkgd3JpdHRlbjsgbmV2ZXIgcmVhZC4gKi8KLSNkZWZpbmUgTW92ICAgICAgICAgKDE8PDcpCi0jZGVmaW5lIEJpdE9wICAgICAgICgxPDw4KQotI2RlZmluZSBNZW1BYnMgICAgICAoMTw8OSkgICAgICAvKiBNZW1vcnkgb3BlcmFuZCBpcyBhYnNvbHV0ZSBkaXNwbGFjZW1lbnQgKi8KLSNkZWZpbmUgU3RyaW5nICAgICAgKDE8PDEwKSAgICAgLyogU3RyaW5nIGluc3RydWN0aW9uIChyZXAgY2FwYWJsZSkgKi8KLSNkZWZpbmUgU3RhY2sgICAgICAgKDE8PDExKSAgICAgLyogU3RhY2sgaW5zdHJ1Y3Rpb24gKHB1c2gvcG9wKSAqLworI2RlZmluZSBNb3YgICAgICAgICAoMTw8OCkKKyNkZWZpbmUgQml0T3AgICAgICAgKDE8PDkpCisjZGVmaW5lIE1lbUFicyAgICAgICgxPDwxMCkgICAgICAvKiBNZW1vcnkgb3BlcmFuZCBpcyBhYnNvbHV0ZSBkaXNwbGFjZW1lbnQgKi8KKyNkZWZpbmUgU3RyaW5nICAgICAgKDE8PDEyKSAgICAgLyogU3RyaW5nIGluc3RydWN0aW9uIChyZXAgY2FwYWJsZSkgKi8KKyNkZWZpbmUgU3RhY2sgICAgICAgKDE8PDEzKSAgICAgLyogU3RhY2sgaW5zdHJ1Y3Rpb24gKHB1c2gvcG9wKSAqLwogI2RlZmluZSBHcm91cCAgICAgICAoMTw8MTQpICAgICAvKiBCaXRzIDM6NSBvZiBtb2RybSBieXRlIGV4dGVuZCBvcGNvZGUgKi8KICNkZWZpbmUgR3JvdXBEdWFsICAgKDE8PDE1KSAgICAgLyogQWx0ZXJuYXRlIGRlY29kaW5nIG9mIG1vZCA9PSAzICovCiAjZGVmaW5lIEdyb3VwTWFzayAgIDB4ZmYgICAgICAgIC8qIEdyb3VwIG51bWJlciBzdG9yZWQgaW4gYml0cyAwOjcgKi8KQEAgLTk0LDcgKzk2LDcgQEAKIAkvKiAweDIwIC0gMHgyNyAqLwogCUJ5dGVPcCB8IERzdE1lbSB8IFNyY1JlZyB8IE1vZFJNLCBEc3RNZW0gfCBTcmNSZWcgfCBNb2RSTSwKIAlCeXRlT3AgfCBEc3RSZWcgfCBTcmNNZW0gfCBNb2RSTSwgRHN0UmVnIHwgU3JjTWVtIHwgTW9kUk0sCi0JU3JjSW1tQnl0ZSwgU3JjSW1tLCAwLCAwLAorCURzdEFjYyB8IFNyY0ltbUJ5dGUsIERzdEFjYyB8IFNyY0ltbSwgMCwgMCwKIAkvKiAweDI4IC0gMHgyRiAqLwogCUJ5dGVPcCB8IERzdE1lbSB8IFNyY1JlZyB8IE1vZFJNLCBEc3RNZW0gfCBTcmNSZWcgfCBNb2RSTSwKIAlCeXRlT3AgfCBEc3RSZWcgfCBTcmNNZW0gfCBNb2RSTSwgRHN0UmVnIHwgU3JjTWVtIHwgTW9kUk0sCkBAIC0xMDYsNyArMTA4LDggQEAKIAkvKiAweDM4IC0gMHgzRiAqLwogCUJ5dGVPcCB8IERzdE1lbSB8IFNyY1JlZyB8IE1vZFJNLCBEc3RNZW0gfCBTcmNSZWcgfCBNb2RSTSwKIAlCeXRlT3AgfCBEc3RSZWcgfCBTcmNNZW0gfCBNb2RSTSwgRHN0UmVnIHwgU3JjTWVtIHwgTW9kUk0sCi0JMCwgMCwgMCwgMCwKKwlCeXRlT3AgfCBEc3RBY2MgfCBTcmNJbW0sIERzdEFjYyB8IFNyY0ltbSwKKwkwLCAwLAogCS8qIDB4NDAgLSAweDQ3ICovCiAJRHN0UmVnLCBEc3RSZWcsIERzdFJlZywgRHN0UmVnLCBEc3RSZWcsIERzdFJlZywgRHN0UmVnLCBEc3RSZWcsCiAJLyogMHg0OCAtIDB4NEYgKi8KQEAgLTE1Myw5ICsxNTYsMTYgQEAKIAkwLCAwLCBCeXRlT3AgfCBJbXBsaWNpdE9wcyB8IE1vdiB8IFN0cmluZywgSW1wbGljaXRPcHMgfCBNb3YgfCBTdHJpbmcsCiAJQnl0ZU9wIHwgSW1wbGljaXRPcHMgfCBNb3YgfCBTdHJpbmcsIEltcGxpY2l0T3BzIHwgTW92IHwgU3RyaW5nLAogCUJ5dGVPcCB8IEltcGxpY2l0T3BzIHwgU3RyaW5nLCBJbXBsaWNpdE9wcyB8IFN0cmluZywKLQkvKiAweEIwIC0gMHhCRiAqLwotCTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCi0JRHN0UmVnIHwgU3JjSW1tIHwgTW92LCAwLCAwLCAwLCAwLCAwLCAwLCAwLAorCS8qIDB4QjAgLSAweEI3ICovCisJQnl0ZU9wIHwgRHN0UmVnIHwgU3JjSW1tIHwgTW92LCBCeXRlT3AgfCBEc3RSZWcgfCBTcmNJbW0gfCBNb3YsCisJQnl0ZU9wIHwgRHN0UmVnIHwgU3JjSW1tIHwgTW92LCBCeXRlT3AgfCBEc3RSZWcgfCBTcmNJbW0gfCBNb3YsCisJQnl0ZU9wIHwgRHN0UmVnIHwgU3JjSW1tIHwgTW92LCBCeXRlT3AgfCBEc3RSZWcgfCBTcmNJbW0gfCBNb3YsCisJQnl0ZU9wIHwgRHN0UmVnIHwgU3JjSW1tIHwgTW92LCBCeXRlT3AgfCBEc3RSZWcgfCBTcmNJbW0gfCBNb3YsCisJLyogMHhCOCAtIDB4QkYgKi8KKwlEc3RSZWcgfCBTcmNJbW0gfCBNb3YsIERzdFJlZyB8IFNyY0ltbSB8IE1vdiwKKwlEc3RSZWcgfCBTcmNJbW0gfCBNb3YsIERzdFJlZyB8IFNyY0ltbSB8IE1vdiwKKwlEc3RSZWcgfCBTcmNJbW0gfCBNb3YsIERzdFJlZyB8IFNyY0ltbSB8IE1vdiwKKwlEc3RSZWcgfCBTcmNJbW0gfCBNb3YsIERzdFJlZyB8IFNyY0ltbSB8IE1vdiwKIAkvKiAweEMwIC0gMHhDNyAqLwogCUJ5dGVPcCB8IERzdE1lbSB8IFNyY0ltbSB8IE1vZFJNLCBEc3RNZW0gfCBTcmNJbW1CeXRlIHwgTW9kUk0sCiAJMCwgSW1wbGljaXRPcHMgfCBTdGFjaywgMCwgMCwKQEAgLTE2OSwxNyArMTc5LDIwIEBACiAJLyogMHhEOCAtIDB4REYgKi8KIAkwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAogCS8qIDB4RTAgLSAweEU3ICovCi0JMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKwkwLCAwLCAwLCAwLAorCVNyY05vbmUgfCBCeXRlT3AgfCBJbXBsaWNpdE9wcywgU3JjTm9uZSB8IEltcGxpY2l0T3BzLAorCVNyY05vbmUgfCBCeXRlT3AgfCBJbXBsaWNpdE9wcywgU3JjTm9uZSB8IEltcGxpY2l0T3BzLAogCS8qIDB4RTggLSAweEVGICovCiAJSW1wbGljaXRPcHMgfCBTdGFjaywgU3JjSW1tIHwgSW1wbGljaXRPcHMsCiAJSW1wbGljaXRPcHMsIFNyY0ltbUJ5dGUgfCBJbXBsaWNpdE9wcywKLQkwLCAwLCAwLCAwLAorCVNyY05vbmUgfCBCeXRlT3AgfCBJbXBsaWNpdE9wcywgU3JjTm9uZSB8IEltcGxpY2l0T3BzLAorCVNyY05vbmUgfCBCeXRlT3AgfCBJbXBsaWNpdE9wcywgU3JjTm9uZSB8IEltcGxpY2l0T3BzLAogCS8qIDB4RjAgLSAweEY3ICovCiAJMCwgMCwgMCwgMCwKIAlJbXBsaWNpdE9wcywgSW1wbGljaXRPcHMsIEdyb3VwIHwgR3JvdXAzX0J5dGUsIEdyb3VwIHwgR3JvdXAzLAogCS8qIDB4RjggLSAweEZGICovCiAJSW1wbGljaXRPcHMsIDAsIEltcGxpY2l0T3BzLCBJbXBsaWNpdE9wcywKLQkwLCAwLCBHcm91cCB8IEdyb3VwNCwgR3JvdXAgfCBHcm91cDUsCisJSW1wbGljaXRPcHMsIEltcGxpY2l0T3BzLCBHcm91cCB8IEdyb3VwNCwgR3JvdXAgfCBHcm91cDUsCiB9OwogCiBzdGF0aWMgdTE2IHR3b2J5dGVfdGFibGVbMjU2XSA9IHsKQEAgLTI2OCwxNSArMjgxLDE2IEBACiAJQnl0ZU9wIHwgRHN0TWVtIHwgU3JjTm9uZSB8IE1vZFJNLCBCeXRlT3AgfCBEc3RNZW0gfCBTcmNOb25lIHwgTW9kUk0sCiAJMCwgMCwgMCwgMCwKIAlbR3JvdXAzKjhdID0KLQlEc3RNZW0gfCBTcmNJbW0gfCBNb2RSTSB8IFNyY0ltbSwgMCwKLQlEc3RNZW0gfCBTcmNOb25lIHwgTW9kUk0sIEJ5dGVPcCB8IERzdE1lbSB8IFNyY05vbmUgfCBNb2RSTSwKKwlEc3RNZW0gfCBTcmNJbW0gfCBNb2RSTSwgMCwKKwlEc3RNZW0gfCBTcmNOb25lIHwgTW9kUk0sIERzdE1lbSB8IFNyY05vbmUgfCBNb2RSTSwKIAkwLCAwLCAwLCAwLAogCVtHcm91cDQqOF0gPQogCUJ5dGVPcCB8IERzdE1lbSB8IFNyY05vbmUgfCBNb2RSTSwgQnl0ZU9wIHwgRHN0TWVtIHwgU3JjTm9uZSB8IE1vZFJNLAogCTAsIDAsIDAsIDAsIDAsIDAsCiAJW0dyb3VwNSo4XSA9Ci0JRHN0TWVtIHwgU3JjTm9uZSB8IE1vZFJNLCBEc3RNZW0gfCBTcmNOb25lIHwgTW9kUk0sIDAsIDAsCi0JU3JjTWVtIHwgTW9kUk0sIDAsIFNyY01lbSB8IE1vZFJNIHwgU3RhY2ssIDAsCisJRHN0TWVtIHwgU3JjTm9uZSB8IE1vZFJNLCBEc3RNZW0gfCBTcmNOb25lIHwgTW9kUk0sCisJU3JjTWVtIHwgTW9kUk0gfCBTdGFjaywgMCwKKwlTcmNNZW0gfCBNb2RSTSB8IFN0YWNrLCAwLCBTcmNNZW0gfCBNb2RSTSB8IFN0YWNrLCAwLAogCVtHcm91cDcqOF0gPQogCTAsIDAsIE1vZFJNIHwgU3JjTWVtLCBNb2RSTSB8IFNyY01lbSwKIAlTcmNOb25lIHwgTW9kUk0gfCBEc3RNZW0gfCBNb3YsIDAsCkBAIC04MzksNyArODUzLDcgQEAKIAkvKiBTaGFkb3cgY29weSBvZiByZWdpc3RlciBzdGF0ZS4gQ29tbWl0dGVkIG9uIHN1Y2Nlc3NmdWwgZW11bGF0aW9uLiAqLwogCiAJbWVtc2V0KGMsIDAsIHNpemVvZihzdHJ1Y3QgZGVjb2RlX2NhY2hlKSk7Ci0JYy0+ZWlwID0gY3R4dC0+dmNwdS0+YXJjaC5yaXA7CisJYy0+ZWlwID0ga3ZtX3JpcF9yZWFkKGN0eHQtPnZjcHUpOwogCWN0eHQtPmNzX2Jhc2UgPSBzZWdfYmFzZShjdHh0LCBWQ1BVX1NSRUdfQ1MpOwogCW1lbWNweShjLT5yZWdzLCBjdHh0LT52Y3B1LT5hcmNoLnJlZ3MsIHNpemVvZiBjLT5yZWdzKTsKIApAQCAtMTA0OCw2ICsxMDYyLDIzIEBACiAJCX0KIAkJYy0+ZHN0LnR5cGUgPSBPUF9NRU07CiAJCWJyZWFrOworCWNhc2UgRHN0QWNjOgorCQljLT5kc3QudHlwZSA9IE9QX1JFRzsKKwkJYy0+ZHN0LmJ5dGVzID0gYy0+b3BfYnl0ZXM7CisJCWMtPmRzdC5wdHIgPSAmYy0+cmVnc1tWQ1BVX1JFR1NfUkFYXTsKKwkJc3dpdGNoIChjLT5vcF9ieXRlcykgeworCQkJY2FzZSAxOgorCQkJCWMtPmRzdC52YWwgPSAqKHU4ICopYy0+ZHN0LnB0cjsKKwkJCQlicmVhazsKKwkJCWNhc2UgMjoKKwkJCQljLT5kc3QudmFsID0gKih1MTYgKiljLT5kc3QucHRyOworCQkJCWJyZWFrOworCQkJY2FzZSA0OgorCQkJCWMtPmRzdC52YWwgPSAqKHUzMiAqKWMtPmRzdC5wdHI7CisJCQkJYnJlYWs7CisJCX0KKwkJYy0+ZHN0Lm9yaWdfdmFsID0gYy0+ZHN0LnZhbDsKKwkJYnJlYWs7CiAJfQogCiAJaWYgKGMtPnJpcF9yZWxhdGl2ZSkKQEAgLTExNTEsNiArMTE4MiwxNCBAQAogCWNhc2UgMToJLyogZGVjICovCiAJCWVtdWxhdGVfMW9wKCJkZWMiLCBjLT5kc3QsIGN0eHQtPmVmbGFncyk7CiAJCWJyZWFrOworCWNhc2UgMjogLyogY2FsbCBuZWFyIGFicyAqLyB7CisJCWxvbmcgaW50IG9sZF9laXA7CisJCW9sZF9laXAgPSBjLT5laXA7CisJCWMtPmVpcCA9IGMtPnNyYy52YWw7CisJCWMtPnNyYy52YWwgPSBvbGRfZWlwOworCQllbXVsYXRlX3B1c2goY3R4dCk7CisJCWJyZWFrOworCX0KIAljYXNlIDQ6IC8qIGptcCBhYnMgKi8KIAkJYy0+ZWlwID0gYy0+c3JjLnZhbDsKIAkJYnJlYWs7CkBAIC0xMjUxLDYgKzEyOTAsOCBAQAogCXU2NCBtc3JfZGF0YTsKIAl1bnNpZ25lZCBsb25nIHNhdmVkX2VpcCA9IDA7CiAJc3RydWN0IGRlY29kZV9jYWNoZSAqYyA9ICZjdHh0LT5kZWNvZGU7CisJdW5zaWduZWQgaW50IHBvcnQ7CisJaW50IGlvX2Rpcl9pbjsKIAlpbnQgcmMgPSAwOwogCiAJLyogU2hhZG93IGNvcHkgb2YgcmVnaXN0ZXIgc3RhdGUuIENvbW1pdHRlZCBvbiBzdWNjZXNzZnVsIGVtdWxhdGlvbi4KQEAgLTEyNjcsNyArMTMwOCw3IEBACiAJaWYgKGMtPnJlcF9wcmVmaXggJiYgKGMtPmQgJiBTdHJpbmcpKSB7CiAJCS8qIEFsbCBSRVAgcHJlZml4ZXMgaGF2ZSB0aGUgc2FtZSBmaXJzdCB0ZXJtaW5hdGlvbiBjb25kaXRpb24gKi8KIAkJaWYgKGMtPnJlZ3NbVkNQVV9SRUdTX1JDWF0gPT0gMCkgewotCQkJY3R4dC0+dmNwdS0+YXJjaC5yaXAgPSBjLT5laXA7CisJCQlrdm1fcmlwX3dyaXRlKGN0eHQtPnZjcHUsIGMtPmVpcCk7CiAJCQlnb3RvIGRvbmU7CiAJCX0KIAkJLyogVGhlIHNlY29uZCB0ZXJtaW5hdGlvbiBjb25kaXRpb24gb25seSBhcHBsaWVzIGZvciBSRVBFCkBAIC0xMjgxLDE3ICsxMzIyLDE3IEBACiAJCQkJKGMtPmIgPT0gMHhhZSkgfHwgKGMtPmIgPT0gMHhhZikpIHsKIAkJCWlmICgoYy0+cmVwX3ByZWZpeCA9PSBSRVBFX1BSRUZJWCkgJiYKIAkJCQkoKGN0eHQtPmVmbGFncyAmIEVGTEdfWkYpID09IDApKSB7Ci0JCQkJCWN0eHQtPnZjcHUtPmFyY2gucmlwID0gYy0+ZWlwOworCQkJCQlrdm1fcmlwX3dyaXRlKGN0eHQtPnZjcHUsIGMtPmVpcCk7CiAJCQkJCWdvdG8gZG9uZTsKIAkJCX0KIAkJCWlmICgoYy0+cmVwX3ByZWZpeCA9PSBSRVBORV9QUkVGSVgpICYmCiAJCQkJKChjdHh0LT5lZmxhZ3MgJiBFRkxHX1pGKSA9PSBFRkxHX1pGKSkgewotCQkJCWN0eHQtPnZjcHUtPmFyY2gucmlwID0gYy0+ZWlwOworCQkJCWt2bV9yaXBfd3JpdGUoY3R4dC0+dmNwdSwgYy0+ZWlwKTsKIAkJCQlnb3RvIGRvbmU7CiAJCQl9CiAJCX0KIAkJYy0+cmVnc1tWQ1BVX1JFR1NfUkNYXS0tOwotCQljLT5laXAgPSBjdHh0LT52Y3B1LT5hcmNoLnJpcDsKKwkJYy0+ZWlwID0ga3ZtX3JpcF9yZWFkKGN0eHQtPnZjcHUpOwogCX0KIAogCWlmIChjLT5zcmMudHlwZSA9PSBPUF9NRU0pIHsKQEAgLTEzNTEsMjcgKzEzOTIsMTAgQEAKIAkgICAgICBzYmI6CQkvKiBzYmIgKi8KIAkJZW11bGF0ZV8yb3BfU3JjVigic2JiIiwgYy0+c3JjLCBjLT5kc3QsIGN0eHQtPmVmbGFncyk7CiAJCWJyZWFrOwotCWNhc2UgMHgyMCAuLi4gMHgyMzoKKwljYXNlIDB4MjAgLi4uIDB4MjU6CiAJICAgICAgYW5kOgkJLyogYW5kICovCiAJCWVtdWxhdGVfMm9wX1NyY1YoImFuZCIsIGMtPnNyYywgYy0+ZHN0LCBjdHh0LT5lZmxhZ3MpOwogCQlicmVhazsKLQljYXNlIDB4MjQ6ICAgICAgICAgICAgICAvKiBhbmQgYWwgaW1tOCAqLwotCQljLT5kc3QudHlwZSA9IE9QX1JFRzsKLQkJYy0+ZHN0LnB0ciA9ICZjLT5yZWdzW1ZDUFVfUkVHU19SQVhdOwotCQljLT5kc3QudmFsID0gKih1OCAqKWMtPmRzdC5wdHI7Ci0JCWMtPmRzdC5ieXRlcyA9IDE7Ci0JCWMtPmRzdC5vcmlnX3ZhbCA9IGMtPmRzdC52YWw7Ci0JCWdvdG8gYW5kOwotCWNhc2UgMHgyNTogICAgICAgICAgICAgIC8qIGFuZCBheCBpbW0xNiwgb3IgZWF4IGltbTMyICovCi0JCWMtPmRzdC50eXBlID0gT1BfUkVHOwotCQljLT5kc3QuYnl0ZXMgPSBjLT5vcF9ieXRlczsKLQkJYy0+ZHN0LnB0ciA9ICZjLT5yZWdzW1ZDUFVfUkVHU19SQVhdOwotCQlpZiAoYy0+b3BfYnl0ZXMgPT0gMikKLQkJCWMtPmRzdC52YWwgPSAqKHUxNiAqKWMtPmRzdC5wdHI7Ci0JCWVsc2UKLQkJCWMtPmRzdC52YWwgPSAqKHUzMiAqKWMtPmRzdC5wdHI7Ci0JCWMtPmRzdC5vcmlnX3ZhbCA9IGMtPmRzdC52YWw7Ci0JCWdvdG8gYW5kOwogCWNhc2UgMHgyOCAuLi4gMHgyZDoKIAkgICAgICBzdWI6CQkvKiBzdWIgKi8KIAkJZW11bGF0ZV8yb3BfU3JjVigic3ViIiwgYy0+c3JjLCBjLT5kc3QsIGN0eHQtPmVmbGFncyk7CkBAIC0xNjU5LDcgKzE2ODMsNyBAQAogCWNhc2UgMHhhZSAuLi4gMHhhZjoJLyogc2NhcyAqLwogCQlEUFJJTlRGKCJVcmshIEkgZG9uJ3QgaGFuZGxlIFNDQVMuXG4iKTsKIAkJZ290byBjYW5ub3RfZW11bGF0ZTsKLQljYXNlIDB4Yjg6IC8qIG1vdiByLCBpbW0gKi8KKwljYXNlIDB4YjAgLi4uIDB4YmY6IC8qIG1vdiByLCBpbW0gKi8KIAkJZ290byBtb3Y7CiAJY2FzZSAweGMwIC4uLiAweGMxOgogCQllbXVsYXRlX2dycDIoY3R4dCk7CkBAIC0xNjc5LDYgKzE3MDMsMTYgQEAKIAkJYy0+c3JjLnZhbCA9IGMtPnJlZ3NbVkNQVV9SRUdTX1JDWF07CiAJCWVtdWxhdGVfZ3JwMihjdHh0KTsKIAkJYnJlYWs7CisJY2FzZSAweGU0OiAJLyogaW5iICovCisJY2FzZSAweGU1OiAJLyogaW4gKi8KKwkJcG9ydCA9IGluc25fZmV0Y2godTgsIDEsIGMtPmVpcCk7CisJCWlvX2Rpcl9pbiA9IDE7CisJCWdvdG8gZG9faW87CisJY2FzZSAweGU2OiAvKiBvdXRiICovCisJY2FzZSAweGU3OiAvKiBvdXQgKi8KKwkJcG9ydCA9IGluc25fZmV0Y2godTgsIDEsIGMtPmVpcCk7CisJCWlvX2Rpcl9pbiA9IDA7CisJCWdvdG8gZG9faW87CiAJY2FzZSAweGU4OiAvKiBjYWxsIChuZWFyKSAqLyB7CiAJCWxvbmcgaW50IHJlbDsKIAkJc3dpdGNoIChjLT5vcF9ieXRlcykgewpAQCAtMTcyOSw2ICsxNzYzLDIyIEBACiAJCWptcF9yZWwoYywgYy0+c3JjLnZhbCk7CiAJCWMtPmRzdC50eXBlID0gT1BfTk9ORTsgLyogRGlzYWJsZSB3cml0ZWJhY2suICovCiAJCWJyZWFrOworCWNhc2UgMHhlYzogLyogaW4gYWwsZHggKi8KKwljYXNlIDB4ZWQ6IC8qIGluIChlL3IpYXgsZHggKi8KKwkJcG9ydCA9IGMtPnJlZ3NbVkNQVV9SRUdTX1JEWF07CisJCWlvX2Rpcl9pbiA9IDE7CisJCWdvdG8gZG9faW87CisJY2FzZSAweGVlOiAvKiBvdXQgYWwsZHggKi8KKwljYXNlIDB4ZWY6IC8qIG91dCAoZS9yKWF4LGR4ICovCisJCXBvcnQgPSBjLT5yZWdzW1ZDUFVfUkVHU19SRFhdOworCQlpb19kaXJfaW4gPSAwOworCWRvX2lvOglpZiAoa3ZtX2VtdWxhdGVfcGlvKGN0eHQtPnZjcHUsIE5VTEwsIGlvX2Rpcl9pbiwKKwkJCQkgICAoYy0+ZCAmIEJ5dGVPcCkgPyAxIDogYy0+b3BfYnl0ZXMsCisJCQkJICAgcG9ydCkgIT0gMCkgeworCQkJYy0+ZWlwID0gc2F2ZWRfZWlwOworCQkJZ290byBjYW5ub3RfZW11bGF0ZTsKKwkJfQorCQlyZXR1cm4gMDsKIAljYXNlIDB4ZjQ6ICAgICAgICAgICAgICAvKiBobHQgKi8KIAkJY3R4dC0+dmNwdS0+YXJjaC5oYWx0X3JlcXVlc3QgPSAxOwogCQlicmVhazsKQEAgLTE3NTQsNiArMTgwNCwxNCBAQAogCQljdHh0LT5lZmxhZ3MgfD0gWDg2X0VGTEFHU19JRjsKIAkJYy0+ZHN0LnR5cGUgPSBPUF9OT05FOwkvKiBEaXNhYmxlIHdyaXRlYmFjay4gKi8KIAkJYnJlYWs7CisJY2FzZSAweGZjOiAvKiBjbGQgKi8KKwkJY3R4dC0+ZWZsYWdzICY9IH5FRkxHX0RGOworCQljLT5kc3QudHlwZSA9IE9QX05PTkU7CS8qIERpc2FibGUgd3JpdGViYWNrLiAqLworCQlicmVhazsKKwljYXNlIDB4ZmQ6IC8qIHN0ZCAqLworCQljdHh0LT5lZmxhZ3MgfD0gRUZMR19ERjsKKwkJYy0+ZHN0LnR5cGUgPSBPUF9OT05FOwkvKiBEaXNhYmxlIHdyaXRlYmFjay4gKi8KKwkJYnJlYWs7CiAJY2FzZSAweGZlIC4uLiAweGZmOgkvKiBHcnA0L0dycDUgKi8KIAkJcmMgPSBlbXVsYXRlX2dycDQ1KGN0eHQsIG9wcyk7CiAJCWlmIChyYyAhPSAwKQpAQCAtMTc2OCw3ICsxODI2LDcgQEAKIAogCS8qIENvbW1pdCBzaGFkb3cgcmVnaXN0ZXIgc3RhdGUuICovCiAJbWVtY3B5KGN0eHQtPnZjcHUtPmFyY2gucmVncywgYy0+cmVncywgc2l6ZW9mIGMtPnJlZ3MpOwotCWN0eHQtPnZjcHUtPmFyY2gucmlwID0gYy0+ZWlwOworCWt2bV9yaXBfd3JpdGUoY3R4dC0+dmNwdSwgYy0+ZWlwKTsKIAogZG9uZToKIAlpZiAocmMgPT0gWDg2RU1VTF9VTkhBTkRMRUFCTEUpIHsKQEAgLTE3OTMsNyArMTg1MSw3IEBACiAJCQkJZ290byBkb25lOwogCiAJCQkvKiBMZXQgdGhlIHByb2Nlc3NvciByZS1leGVjdXRlIHRoZSBmaXhlZCBoeXBlcmNhbGwgKi8KLQkJCWMtPmVpcCA9IGN0eHQtPnZjcHUtPmFyY2gucmlwOworCQkJYy0+ZWlwID0ga3ZtX3JpcF9yZWFkKGN0eHQtPnZjcHUpOwogCQkJLyogRGlzYWJsZSB3cml0ZWJhY2suICovCiAJCQljLT5kc3QudHlwZSA9IE9QX05PTkU7CiAJCQlicmVhazsKQEAgLTE4ODksNyArMTk0Nyw3IEBACiAJCXJjID0ga3ZtX3NldF9tc3IoY3R4dC0+dmNwdSwgYy0+cmVnc1tWQ1BVX1JFR1NfUkNYXSwgbXNyX2RhdGEpOwogCQlpZiAocmMpIHsKIAkJCWt2bV9pbmplY3RfZ3AoY3R4dC0+dmNwdSwgMCk7Ci0JCQljLT5laXAgPSBjdHh0LT52Y3B1LT5hcmNoLnJpcDsKKwkJCWMtPmVpcCA9IGt2bV9yaXBfcmVhZChjdHh0LT52Y3B1KTsKIAkJfQogCQlyYyA9IFg4NkVNVUxfQ09OVElOVUU7CiAJCWMtPmRzdC50eXBlID0gT1BfTk9ORTsKQEAgLTE4OTksNyArMTk1Nyw3IEBACiAJCXJjID0ga3ZtX2dldF9tc3IoY3R4dC0+dmNwdSwgYy0+cmVnc1tWQ1BVX1JFR1NfUkNYXSwgJm1zcl9kYXRhKTsKIAkJaWYgKHJjKSB7CiAJCQlrdm1faW5qZWN0X2dwKGN0eHQtPnZjcHUsIDApOwotCQkJYy0+ZWlwID0gY3R4dC0+dmNwdS0+YXJjaC5yaXA7CisJCQljLT5laXAgPSBrdm1fcmlwX3JlYWQoY3R4dC0+dmNwdSk7CiAJCX0gZWxzZSB7CiAJCQljLT5yZWdzW1ZDUFVfUkVHU19SQVhdID0gKHUzMiltc3JfZGF0YTsKIAkJCWMtPnJlZ3NbVkNQVV9SRUdTX1JEWF0gPSBtc3JfZGF0YSA+PiAzMjsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2xndWVzdC9ib290LmMgYi9hcmNoL3g4Ni9sZ3Vlc3QvYm9vdC5jCmluZGV4IDY1ZjBiOGEuLjQ4ZWU0ZjkgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2xndWVzdC9ib290LmMKKysrIGIvYXJjaC94ODYvbGd1ZXN0L2Jvb3QuYwpAQCAtNTgyLDcgKzU4Miw3IEBACiAJZm9yIChpID0gMDsgaSA8IExHVUVTVF9JUlFTOyBpKyspIHsKIAkJaW50IHZlY3RvciA9IEZJUlNUX0VYVEVSTkFMX1ZFQ1RPUiArIGk7CiAJCWlmICh2ZWN0b3IgIT0gU1lTQ0FMTF9WRUNUT1IpIHsKLQkJCXNldF9pbnRyX2dhdGUodmVjdG9yLCBpbnRlcnJ1cHRbaV0pOworCQkJc2V0X2ludHJfZ2F0ZSh2ZWN0b3IsIGludGVycnVwdFt2ZWN0b3JdKTsKIAkJCXNldF9pcnFfY2hpcF9hbmRfaGFuZGxlcl9uYW1lKGksICZsZ3Vlc3RfaXJxX2NvbnRyb2xsZXIsCiAJCQkJCQkgICAgICBoYW5kbGVfbGV2ZWxfaXJxLAogCQkJCQkJICAgICAgImxldmVsIik7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9tYWNoLWdlbmVyaWMvYmlnc21wLmMgYi9hcmNoL3g4Ni9tYWNoLWdlbmVyaWMvYmlnc21wLmMKaW5kZXggZGYzN2ZjOS4uM2MzYjQ3MSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvbWFjaC1nZW5lcmljL2JpZ3NtcC5jCisrKyBiL2FyY2gveDg2L21hY2gtZ2VuZXJpYy9iaWdzbXAuYwpAQCAtNDEsNiArNDEsMTAgQEAKIAkgeyB9CiB9OwogCitzdGF0aWMgY3B1bWFza190IHZlY3Rvcl9hbGxvY2F0aW9uX2RvbWFpbihpbnQgY3B1KQoreworICAgICAgICByZXR1cm4gY3B1bWFza19vZl9jcHUoY3B1KTsKK30KIAogc3RhdGljIGludCBwcm9iZV9iaWdzbXAodm9pZCkKIHsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L21hY2gtZ2VuZXJpYy9lczcwMDAuYyBiL2FyY2gveDg2L21hY2gtZ2VuZXJpYy9lczcwMDAuYwppbmRleCA1MjBjY2EwLi4yODQ1OWNhIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9tYWNoLWdlbmVyaWMvZXM3MDAwLmMKKysrIGIvYXJjaC94ODYvbWFjaC1nZW5lcmljL2VzNzAwMC5jCkBAIC00NywxNiArNDcsMjYgQEAKIC8qIEhvb2sgZnJvbSBnZW5lcmljIEFDUEkgdGFibGVzLmMgKi8KIHN0YXRpYyBpbnQgX19pbml0IGFjcGlfbWFkdF9vZW1fY2hlY2soY2hhciAqb2VtX2lkLCBjaGFyICpvZW1fdGFibGVfaWQpCiB7Ci0JdW5zaWduZWQgbG9uZyBvZW1fYWRkcjsKKwl1bnNpZ25lZCBsb25nIG9lbV9hZGRyID0gMDsKKwlpbnQgY2hlY2tfZHNkdDsKKwlpbnQgcmV0ID0gMDsKKworCS8qIGNoZWNrIGRzZHQgYXQgZmlyc3QgdG8gYXZvaWQgY2xlYXIgZml4X21hcCBmb3Igb2VtX2FkZHIgKi8KKwljaGVja19kc2R0ID0gZXM3MDAwX2NoZWNrX2RzZHQoKTsKKwogCWlmICghZmluZF91bmlzeXNfYWNwaV9vZW1fdGFibGUoJm9lbV9hZGRyKSkgewotCQlpZiAoZXM3MDAwX2NoZWNrX2RzZHQoKSkKLQkJCXJldHVybiBwYXJzZV91bmlzeXNfb2VtKChjaGFyICopb2VtX2FkZHIpOworCQlpZiAoY2hlY2tfZHNkdCkKKwkJCXJldCA9IHBhcnNlX3VuaXN5c19vZW0oKGNoYXIgKilvZW1fYWRkcik7CiAJCWVsc2UgewogCQkJc2V0dXBfdW5pc3lzKCk7Ci0JCQlyZXR1cm4gMTsKKwkJCXJldCA9IDE7CiAJCX0KKwkJLyoKKwkJICogd2UgbmVlZCB0byB1bm1hcCBpdAorCQkgKi8KKwkJdW5tYXBfdW5pc3lzX2FjcGlfb2VtX3RhYmxlKG9lbV9hZGRyKTsKIAl9Ci0JcmV0dXJuIDA7CisJcmV0dXJuIHJldDsKIH0KICNlbHNlCiBzdGF0aWMgaW50IF9faW5pdCBhY3BpX21hZHRfb2VtX2NoZWNrKGNoYXIgKm9lbV9pZCwgY2hhciAqb2VtX3RhYmxlX2lkKQpAQCAtNjUsNCArNzUsMTggQEAKIH0KICNlbmRpZgogCitzdGF0aWMgY3B1bWFza190IHZlY3Rvcl9hbGxvY2F0aW9uX2RvbWFpbihpbnQgY3B1KQoreworCS8qIENhcmVmdWwuIFNvbWUgY3B1cyBkbyBub3Qgc3RyaWN0bHkgaG9ub3IgdGhlIHNldCBvZiBjcHVzCisJICogc3BlY2lmaWVkIGluIHRoZSBpbnRlcnJ1cHQgZGVzdGluYXRpb24gd2hlbiB1c2luZyBsb3dlc3QKKwkgKiBwcmlvcml0eSBpbnRlcnJ1cHQgZGVsaXZlcnkgbW9kZS4KKwkgKgorCSAqIEluIHBhcnRpY3VsYXIgdGhlcmUgd2FzIGEgaHlwZXJ0aHJlYWRpbmcgY3B1IG9ic2VydmVkIHRvCisJICogZGVsaXZlciBpbnRlcnJ1cHRzIHRvIHRoZSB3cm9uZyBoeXBlcnRocmVhZCB3aGVuIG9ubHkgb25lCisJICogaHlwZXJ0aHJlYWQgd2FzIHNwZWNpZmllZCBpbiB0aGUgaW50ZXJydXB0IGRlc2l0aW5hdGlvbi4KKwkgKi8KKwljcHVtYXNrX3QgZG9tYWluID0geyB7IFswXSA9IEFQSUNfQUxMX0NQVVMsIH0gfTsKKwlyZXR1cm4gZG9tYWluOworfQorCiBzdHJ1Y3QgZ2VuYXBpYyBfX2luaXRkYXRhX3JlZm9rIGFwaWNfZXM3MDAwID0gQVBJQ19JTklUKCJlczcwMDAiLCBwcm9iZV9lczcwMDApOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbWFjaC1nZW5lcmljL251bWFxLmMgYi9hcmNoL3g4Ni9tYWNoLWdlbmVyaWMvbnVtYXEuYwppbmRleCA4Y2Y1ODM5Li43MWEzMDliIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9tYWNoLWdlbmVyaWMvbnVtYXEuYworKysgYi9hcmNoL3g4Ni9tYWNoLWdlbmVyaWMvbnVtYXEuYwpAQCAtMzgsNCArMzgsMTggQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGNwdW1hc2tfdCB2ZWN0b3JfYWxsb2NhdGlvbl9kb21haW4oaW50IGNwdSkKK3sKKwkvKiBDYXJlZnVsLiBTb21lIGNwdXMgZG8gbm90IHN0cmljdGx5IGhvbm9yIHRoZSBzZXQgb2YgY3B1cworCSAqIHNwZWNpZmllZCBpbiB0aGUgaW50ZXJydXB0IGRlc3RpbmF0aW9uIHdoZW4gdXNpbmcgbG93ZXN0CisJICogcHJpb3JpdHkgaW50ZXJydXB0IGRlbGl2ZXJ5IG1vZGUuCisJICoKKwkgKiBJbiBwYXJ0aWN1bGFyIHRoZXJlIHdhcyBhIGh5cGVydGhyZWFkaW5nIGNwdSBvYnNlcnZlZCB0bworCSAqIGRlbGl2ZXIgaW50ZXJydXB0cyB0byB0aGUgd3JvbmcgaHlwZXJ0aHJlYWQgd2hlbiBvbmx5IG9uZQorCSAqIGh5cGVydGhyZWFkIHdhcyBzcGVjaWZpZWQgaW4gdGhlIGludGVycnVwdCBkZXNpdGluYXRpb24uCisJICovCisJY3B1bWFza190IGRvbWFpbiA9IHsgeyBbMF0gPSBBUElDX0FMTF9DUFVTLCB9IH07CisJcmV0dXJuIGRvbWFpbjsKK30KKwogc3RydWN0IGdlbmFwaWMgYXBpY19udW1hcSA9IEFQSUNfSU5JVCgiTlVNQVEiLCBwcm9iZV9udW1hcSk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9tYWNoLWdlbmVyaWMvc3VtbWl0LmMgYi9hcmNoL3g4Ni9tYWNoLWdlbmVyaWMvc3VtbWl0LmMKaW5kZXggNmFkNmI2Ny4uNjI3MmI1ZSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvbWFjaC1nZW5lcmljL3N1bW1pdC5jCisrKyBiL2FyY2gveDg2L21hY2gtZ2VuZXJpYy9zdW1taXQuYwpAQCAtMjMsNCArMjMsMTggQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGNwdW1hc2tfdCB2ZWN0b3JfYWxsb2NhdGlvbl9kb21haW4oaW50IGNwdSkKK3sKKwkvKiBDYXJlZnVsLiBTb21lIGNwdXMgZG8gbm90IHN0cmljdGx5IGhvbm9yIHRoZSBzZXQgb2YgY3B1cworCSAqIHNwZWNpZmllZCBpbiB0aGUgaW50ZXJydXB0IGRlc3RpbmF0aW9uIHdoZW4gdXNpbmcgbG93ZXN0CisJICogcHJpb3JpdHkgaW50ZXJydXB0IGRlbGl2ZXJ5IG1vZGUuCisJICoKKwkgKiBJbiBwYXJ0aWN1bGFyIHRoZXJlIHdhcyBhIGh5cGVydGhyZWFkaW5nIGNwdSBvYnNlcnZlZCB0bworCSAqIGRlbGl2ZXIgaW50ZXJydXB0cyB0byB0aGUgd3JvbmcgaHlwZXJ0aHJlYWQgd2hlbiBvbmx5IG9uZQorCSAqIGh5cGVydGhyZWFkIHdhcyBzcGVjaWZpZWQgaW4gdGhlIGludGVycnVwdCBkZXNpdGluYXRpb24uCisJICovCisJY3B1bWFza190IGRvbWFpbiA9IHsgeyBbMF0gPSBBUElDX0FMTF9DUFVTLCB9IH07CisJcmV0dXJuIGRvbWFpbjsKK30KKwogc3RydWN0IGdlbmFwaWMgYXBpY19zdW1taXQgPSBBUElDX0lOSVQoInN1bW1pdCIsIHByb2JlX3N1bW1pdCk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9tYWNoLXZveWFnZXIvdm95YWdlcl9zbXAuYyBiL2FyY2gveDg2L21hY2gtdm95YWdlci92b3lhZ2VyX3NtcC5jCmluZGV4IDE5OWE1ZjQuLjBmNmU4YTYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L21hY2gtdm95YWdlci92b3lhZ2VyX3NtcC5jCisrKyBiL2FyY2gveDg2L21hY2gtdm95YWdlci92b3lhZ2VyX3NtcC5jCkBAIC0xNDgzLDcgKzE0ODMsNyBAQAogICogdGhlIGludGVycnVwdCBvZmYgdG8gYW5vdGhlciBDUFUgKi8KIHN0YXRpYyB2b2lkIGJlZm9yZV9oYW5kbGVfdmljX2lycSh1bnNpZ25lZCBpbnQgaXJxKQogewotCWlycV9kZXNjX3QgKmRlc2MgPSBpcnFfZGVzYyArIGlycTsKKwlpcnFfZGVzY190ICpkZXNjID0gaXJxX3RvX2Rlc2MoaXJxKTsKIAlfX3U4IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKIAogCV9yYXdfc3Bpbl9sb2NrKCZ2aWNfaXJxX2xvY2spOwpAQCAtMTUxOCw3ICsxNTE4LDcgQEAKIC8qIEZpbmlzaCB0aGUgVklDIGludGVycnVwdDogYmFzaWNhbGx5IG1hc2sgKi8KIHN0YXRpYyB2b2lkIGFmdGVyX2hhbmRsZV92aWNfaXJxKHVuc2lnbmVkIGludCBpcnEpCiB7Ci0JaXJxX2Rlc2NfdCAqZGVzYyA9IGlycV9kZXNjICsgaXJxOworCWlycV9kZXNjX3QgKmRlc2MgPSBpcnFfdG9fZGVzYyhpcnEpOwogCiAJX3Jhd19zcGluX2xvY2soJnZpY19pcnFfbG9jayk7CiAJewpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbW0vTWFrZWZpbGUgYi9hcmNoL3g4Ni9tbS9NYWtlZmlsZQppbmRleCBkZmI5MzJkLi41OWY4OWI0IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9tbS9NYWtlZmlsZQorKysgYi9hcmNoL3g4Ni9tbS9NYWtlZmlsZQpAQCAtMTMsMTIgKzEzLDggQEAKIG1taW90cmFjZS15CQkJOj0gcGZfaW4ubyBtbWlvLW1vZC5vCiBvYmotJChDT05GSUdfTU1JT1RSQUNFX1RFU1QpCSs9IHRlc3RtbWlvdHJhY2UubwogCi1pZmVxICgkKENPTkZJR19YODZfMzIpLHkpCi1vYmotJChDT05GSUdfTlVNQSkJCSs9IGRpc2NvbnRpZ18zMi5vCi1lbHNlCi1vYmotJChDT05GSUdfTlVNQSkJCSs9IG51bWFfNjQubworb2JqLSQoQ09ORklHX05VTUEpCQkrPSBudW1hXyQoQklUUykubwogb2JqLSQoQ09ORklHX0s4X05VTUEpCQkrPSBrOHRvcG9sb2d5XzY0Lm8KLWVuZGlmCiBvYmotJChDT05GSUdfQUNQSV9OVU1BKQkJKz0gc3JhdF8kKEJJVFMpLm8KIAogb2JqLSQoQ09ORklHX01FTVRFU1QpCQkrPSBtZW10ZXN0Lm8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L21tL2ZhdWx0LmMgYi9hcmNoL3g4Ni9tbS9mYXVsdC5jCmluZGV4IDhiYzU5NTYuLjMxZTg3MzAgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L21tL2ZhdWx0LmMKKysrIGIvYXJjaC94ODYvbW0vZmF1bHQuYwpAQCAtNTkyLDExICs1OTIsNiBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAjZW5kaWYKIAotCS8qCi0JICogV2UgY2FuIGZhdWx0IGZyb20gcHJldHR5IG11Y2ggYW55d2hlcmUsIHdpdGggdW5rbm93biBJUlEgc3RhdGUuCi0JICovCi0JdHJhY2VfaGFyZGlycXNfZml4dXAoKTsKLQogCXRzayA9IGN1cnJlbnQ7CiAJbW0gPSB0c2stPm1tOwogCXByZWZldGNodygmbW0tPm1tYXBfc2VtKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L21tL2d1cC5jIGIvYXJjaC94ODYvbW0vZ3VwLmMKaW5kZXggMDA3YmIwNi4uNGJhMzczYyAxMDA2NDQKLS0tIGEvYXJjaC94ODYvbW0vZ3VwLmMKKysrIGIvYXJjaC94ODYvbW0vZ3VwLmMKQEAgLTgyLDcgKzgyLDcgQEAKIAkJcHRlX3QgcHRlID0gZ3VwX2dldF9wdGUocHRlcCk7CiAJCXN0cnVjdCBwYWdlICpwYWdlOwogCi0JCWlmICgocHRlX3ZhbChwdGUpICYgKG1hc2sgfCBfUEFHRV9TUEVDSUFMKSkgIT0gbWFzaykgeworCQlpZiAoKHB0ZV9mbGFncyhwdGUpICYgKG1hc2sgfCBfUEFHRV9TUEVDSUFMKSkgIT0gbWFzaykgewogCQkJcHRlX3VubWFwKHB0ZXApOwogCQkJcmV0dXJuIDA7CiAJCX0KQEAgLTExNiwxMCArMTE2LDEwIEBACiAJbWFzayA9IF9QQUdFX1BSRVNFTlR8X1BBR0VfVVNFUjsKIAlpZiAod3JpdGUpCiAJCW1hc2sgfD0gX1BBR0VfUlc7Ci0JaWYgKChwdGVfdmFsKHB0ZSkgJiBtYXNrKSAhPSBtYXNrKQorCWlmICgocHRlX2ZsYWdzKHB0ZSkgJiBtYXNrKSAhPSBtYXNrKQogCQlyZXR1cm4gMDsKIAkvKiBodWdlcGFnZXMgYXJlIG5ldmVyICJzcGVjaWFsIiAqLwotCVZNX0JVR19PTihwdGVfdmFsKHB0ZSkgJiBfUEFHRV9TUEVDSUFMKTsKKwlWTV9CVUdfT04ocHRlX2ZsYWdzKHB0ZSkgJiBfUEFHRV9TUEVDSUFMKTsKIAlWTV9CVUdfT04oIXBmbl92YWxpZChwdGVfcGZuKHB0ZSkpKTsKIAogCXJlZnMgPSAwOwpAQCAtMTczLDEwICsxNzMsMTAgQEAKIAltYXNrID0gX1BBR0VfUFJFU0VOVHxfUEFHRV9VU0VSOwogCWlmICh3cml0ZSkKIAkJbWFzayB8PSBfUEFHRV9SVzsKLQlpZiAoKHB0ZV92YWwocHRlKSAmIG1hc2spICE9IG1hc2spCisJaWYgKChwdGVfZmxhZ3MocHRlKSAmIG1hc2spICE9IG1hc2spCiAJCXJldHVybiAwOwogCS8qIGh1Z2VwYWdlcyBhcmUgbmV2ZXIgInNwZWNpYWwiICovCi0JVk1fQlVHX09OKHB0ZV92YWwocHRlKSAmIF9QQUdFX1NQRUNJQUwpOworCVZNX0JVR19PTihwdGVfZmxhZ3MocHRlKSAmIF9QQUdFX1NQRUNJQUwpOwogCVZNX0JVR19PTighcGZuX3ZhbGlkKHB0ZV9wZm4ocHRlKSkpOwogCiAJcmVmcyA9IDA7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9tbS9oaWdobWVtXzMyLmMgYi9hcmNoL3g4Ni9tbS9oaWdobWVtXzMyLmMKaW5kZXggMTY1Yzg3MS4uYmNjMDc5YyAxMDA2NDQKLS0tIGEvYXJjaC94ODYvbW0vaGlnaG1lbV8zMi5jCisrKyBiL2FyY2gveDg2L21tL2hpZ2htZW1fMzIuYwpAQCAtMTM3LDYgKzEzNyw3IEBACiAKIAlyZXR1cm4gKHZvaWQqKSB2YWRkcjsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKGttYXBfYXRvbWljX3Bmbik7IC8qIHRlbXBvcmFyaWx5IGluIHVzZSBieSBpOTE1IEdFTSB1bnRpbCB2bWFwICovCiAKIHN0cnVjdCBwYWdlICprbWFwX2F0b21pY190b19wYWdlKHZvaWQgKnB0cikKIHsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L21tL2luaXRfMzIuYyBiL2FyY2gveDg2L21tL2luaXRfMzIuYwppbmRleCBiYmUwNDRkLi44Mzk2ODY4IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9tbS9pbml0XzMyLmMKKysrIGIvYXJjaC94ODYvbW0vaW5pdF8zMi5jCkBAIC01NTgsNyArNTU4LDcgQEAKIAogaW50IG54X2VuYWJsZWQ7CiAKLXB0ZXZhbF90IF9fc3VwcG9ydGVkX3B0ZV9tYXNrIF9fcmVhZF9tb3N0bHkgPSB+KF9QQUdFX05YIHwgX1BBR0VfR0xPQkFMKTsKK3B0ZXZhbF90IF9fc3VwcG9ydGVkX3B0ZV9tYXNrIF9fcmVhZF9tb3N0bHkgPSB+KF9QQUdFX05YIHwgX1BBR0VfR0xPQkFMIHwgX1BBR0VfSU9NQVApOwogRVhQT1JUX1NZTUJPTF9HUEwoX19zdXBwb3J0ZWRfcHRlX21hc2spOwogCiAjaWZkZWYgQ09ORklHX1g4Nl9QQUUKZGlmZiAtLWdpdCBhL2FyY2gveDg2L21tL2luaXRfNjQuYyBiL2FyY2gveDg2L21tL2luaXRfNjQuYwppbmRleCAzZTEwMDU0Li5iOGU0NjFkIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9tbS9pbml0XzY0LmMKKysrIGIvYXJjaC94ODYvbW0vaW5pdF82NC5jCkBAIC04OSw3ICs4OSw3IEBACiAKIGludCBhZnRlcl9ib290bWVtOwogCi11bnNpZ25lZCBsb25nIF9fc3VwcG9ydGVkX3B0ZV9tYXNrIF9fcmVhZF9tb3N0bHkgPSB+MFVMOworcHRldmFsX3QgX19zdXBwb3J0ZWRfcHRlX21hc2sgX19yZWFkX21vc3RseSA9IH5fUEFHRV9JT01BUDsKIEVYUE9SVF9TWU1CT0xfR1BMKF9fc3VwcG9ydGVkX3B0ZV9tYXNrKTsKIAogc3RhdGljIGludCBkb19ub3RfbnggX19jcHVpbml0ZGF0YTsKQEAgLTE5Niw5ICsxOTYsNiBAQAogCX0KIAogCXB0ZSA9IHB0ZV9vZmZzZXRfa2VybmVsKHBtZCwgdmFkZHIpOwotCWlmICghcHRlX25vbmUoKnB0ZSkgJiYgcHRlX3ZhbChuZXdfcHRlKSAmJgotCSAgICBwdGVfdmFsKCpwdGUpICE9IChwdGVfdmFsKG5ld19wdGUpICYgX19zdXBwb3J0ZWRfcHRlX21hc2spKQotCQlwdGVfRVJST1IoKnB0ZSk7CiAJc2V0X3B0ZShwdGUsIG5ld19wdGUpOwogCiAJLyoKQEAgLTMxMyw3ICszMTAsNyBAQAogCWlmIChwZm4gPj0gdGFibGVfdG9wKQogCQlwYW5pYygiYWxsb2NfbG93X3BhZ2U6IHJhbiBvdXQgb2YgbWVtb3J5Iik7CiAKLQlhZHIgPSBlYXJseV9pb3JlbWFwKHBmbiAqIFBBR0VfU0laRSwgUEFHRV9TSVpFKTsKKwlhZHIgPSBlYXJseV9tZW1yZW1hcChwZm4gKiBQQUdFX1NJWkUsIFBBR0VfU0laRSk7CiAJbWVtc2V0KGFkciwgMCwgUEFHRV9TSVpFKTsKIAkqcGh5cyAgPSBwZm4gKiBQQUdFX1NJWkU7CiAJcmV0dXJuIGFkcjsKQEAgLTc0OSw3ICs3NDYsNyBAQAogCQlvbGRfc3RhcnQgPSBtcltpXS5zdGFydDsKIAkJbWVtbW92ZSgmbXJbaV0sICZtcltpKzFdLAogCQkJIChucl9yYW5nZSAtIDEgLSBpKSAqIHNpemVvZiAoc3RydWN0IG1hcF9yYW5nZSkpOwotCQltcltpXS5zdGFydCA9IG9sZF9zdGFydDsKKwkJbXJbaS0tXS5zdGFydCA9IG9sZF9zdGFydDsKIAkJbnJfcmFuZ2UtLTsKIAl9CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L21tL2lvcmVtYXAuYyBiL2FyY2gveDg2L21tL2lvcmVtYXAuYwppbmRleCA4Y2JlZGExLi5hZTcxZTExIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9tbS9pb3JlbWFwLmMKKysrIGIvYXJjaC94ODYvbW0vaW9yZW1hcC5jCkBAIC00NSw2ICs0NSwyNyBAQAogfQogRVhQT1JUX1NZTUJPTChfX3BoeXNfYWRkcik7CiAKK2Jvb2wgX192aXJ0X2FkZHJfdmFsaWQodW5zaWduZWQgbG9uZyB4KQoreworCWlmICh4ID49IF9fU1RBUlRfS0VSTkVMX21hcCkgeworCQl4IC09IF9fU1RBUlRfS0VSTkVMX21hcDsKKwkJaWYgKHggPj0gS0VSTkVMX0lNQUdFX1NJWkUpCisJCQlyZXR1cm4gZmFsc2U7CisJCXggKz0gcGh5c19iYXNlOworCX0gZWxzZSB7CisJCWlmICh4IDwgUEFHRV9PRkZTRVQpCisJCQlyZXR1cm4gZmFsc2U7CisJCXggLT0gUEFHRV9PRkZTRVQ7CisJCWlmIChzeXN0ZW1fc3RhdGUgPT0gU1lTVEVNX0JPT1RJTkcgPworCQkJCXggPiBNQVhNRU0gOiAhcGh5c19hZGRyX3ZhbGlkKHgpKSB7CisJCQlyZXR1cm4gZmFsc2U7CisJCX0KKwl9CisKKwlyZXR1cm4gcGZuX3ZhbGlkKHggPj4gUEFHRV9TSElGVCk7Cit9CitFWFBPUlRfU1lNQk9MKF9fdmlydF9hZGRyX3ZhbGlkKTsKKwogI2Vsc2UKIAogc3RhdGljIGlubGluZSBpbnQgcGh5c19hZGRyX3ZhbGlkKHVuc2lnbmVkIGxvbmcgYWRkcikKQEAgLTU2LDEzICs3NywyNCBAQAogdW5zaWduZWQgbG9uZyBfX3BoeXNfYWRkcih1bnNpZ25lZCBsb25nIHgpCiB7CiAJLyogVk1BTExPQ18qIGFyZW4ndCBjb25zdGFudHM7IG5vdCBhdmFpbGFibGUgYXQgdGhlIGJvb3QgdGltZSAqLwotCVZJUlRVQUxfQlVHX09OKHggPCBQQUdFX09GRlNFVCB8fCAoc3lzdGVtX3N0YXRlICE9IFNZU1RFTV9CT09USU5HICYmCi0JCQkJCWlzX3ZtYWxsb2NfYWRkcigodm9pZCAqKXgpKSk7CisJVklSVFVBTF9CVUdfT04oeCA8IFBBR0VfT0ZGU0VUKTsKKwlWSVJUVUFMX0JVR19PTihzeXN0ZW1fc3RhdGUgIT0gU1lTVEVNX0JPT1RJTkcgJiYKKwkJaXNfdm1hbGxvY19hZGRyKCh2b2lkICopIHgpKTsKIAlyZXR1cm4geCAtIFBBR0VfT0ZGU0VUOwogfQogRVhQT1JUX1NZTUJPTChfX3BoeXNfYWRkcik7CiAjZW5kaWYKIAorYm9vbCBfX3ZpcnRfYWRkcl92YWxpZCh1bnNpZ25lZCBsb25nIHgpCit7CisJaWYgKHggPCBQQUdFX09GRlNFVCkKKwkJcmV0dXJuIGZhbHNlOworCWlmIChzeXN0ZW1fc3RhdGUgIT0gU1lTVEVNX0JPT1RJTkcgJiYgaXNfdm1hbGxvY19hZGRyKCh2b2lkICopIHgpKQorCQlyZXR1cm4gZmFsc2U7CisJcmV0dXJuIHBmbl92YWxpZCgoeCAtIFBBR0VfT0ZGU0VUKSA+PiBQQUdFX1NISUZUKTsKK30KK0VYUE9SVF9TWU1CT0woX192aXJ0X2FkZHJfdmFsaWQpOworCiAjZW5kaWYKIAogaW50IHBhZ2VfaXNfcmFtKHVuc2lnbmVkIGxvbmcgcGFnZW5yKQpAQCAtMTg4LDYgKzIyMCwxMiBAQAogCQlyZXR1cm4gKF9fZm9yY2Ugdm9pZCBfX2lvbWVtICopcGh5c190b192aXJ0KHBoeXNfYWRkcik7CiAKIAkvKgorCSAqIENoZWNrIGlmIHRoZSByZXF1ZXN0IHNwYW5zIG1vcmUgdGhhbiBhbnkgQkFSIGluIHRoZSBpb21lbSByZXNvdXJjZQorCSAqIHRyZWUuCisJICovCisJV0FSTl9PTihpb21lbV9tYXBfc2FuaXR5X2NoZWNrKHBoeXNfYWRkciwgc2l6ZSkpOworCisJLyoKIAkgKiBEb24ndCBhbGxvdyBhbnlib2R5IHRvIHJlbWFwIG5vcm1hbCBSQU0gdGhhdCB3ZSdyZSB1c2luZy4uCiAJICovCiAJZm9yIChwZm4gPSBwaHlzX2FkZHIgPj4gUEFHRV9TSElGVDsKQEAgLTI0MiwxNiArMjgwLDE2IEBACiAJc3dpdGNoIChwcm90X3ZhbCkgewogCWNhc2UgX1BBR0VfQ0FDSEVfVUM6CiAJZGVmYXVsdDoKLQkJcHJvdCA9IFBBR0VfS0VSTkVMX05PQ0FDSEU7CisJCXByb3QgPSBQQUdFX0tFUk5FTF9JT19OT0NBQ0hFOwogCQlicmVhazsKIAljYXNlIF9QQUdFX0NBQ0hFX1VDX01JTlVTOgotCQlwcm90ID0gUEFHRV9LRVJORUxfVUNfTUlOVVM7CisJCXByb3QgPSBQQUdFX0tFUk5FTF9JT19VQ19NSU5VUzsKIAkJYnJlYWs7CiAJY2FzZSBfUEFHRV9DQUNIRV9XQzoKLQkJcHJvdCA9IFBBR0VfS0VSTkVMX1dDOworCQlwcm90ID0gUEFHRV9LRVJORUxfSU9fV0M7CiAJCWJyZWFrOwogCWNhc2UgX1BBR0VfQ0FDSEVfV0I6Ci0JCXByb3QgPSBQQUdFX0tFUk5FTDsKKwkJcHJvdCA9IFBBR0VfS0VSTkVMX0lPOwogCQlicmVhazsKIAl9CiAKQEAgLTU2OCwxMiArNjA2LDEyIEBACiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBfX2luaXQgZWFybHlfc2V0X2ZpeG1hcChlbnVtIGZpeGVkX2FkZHJlc3NlcyBpZHgsCi0JCQkJCXVuc2lnbmVkIGxvbmcgcGh5cykKKwkJCQkJICAgdW5zaWduZWQgbG9uZyBwaHlzLCBwZ3Byb3RfdCBwcm90KQogewogCWlmIChhZnRlcl9wYWdpbmdfaW5pdCkKLQkJc2V0X2ZpeG1hcChpZHgsIHBoeXMpOworCQlfX3NldF9maXhtYXAoaWR4LCBwaHlzLCBwcm90KTsKIAllbHNlCi0JCV9fZWFybHlfc2V0X2ZpeG1hcChpZHgsIHBoeXMsIFBBR0VfS0VSTkVMKTsKKwkJX19lYXJseV9zZXRfZml4bWFwKGlkeCwgcGh5cywgcHJvdCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBfX2luaXQgZWFybHlfY2xlYXJfZml4bWFwKGVudW0gZml4ZWRfYWRkcmVzc2VzIGlkeCkKQEAgLTU4NCwxNiArNjIyLDIyIEBACiAJCV9fZWFybHlfc2V0X2ZpeG1hcChpZHgsIDAsIF9fcGdwcm90KDApKTsKIH0KIAotCi1zdGF0aWMgaW50IF9faW5pdGRhdGEgZWFybHlfaW9yZW1hcF9uZXN0ZWQ7Ci0KK3N0YXRpYyB2b2lkICpwcmV2X21hcFtGSVhfQlRNQVBTX1NMT1RTXSBfX2luaXRkYXRhOworc3RhdGljIHVuc2lnbmVkIGxvbmcgcHJldl9zaXplW0ZJWF9CVE1BUFNfU0xPVFNdIF9faW5pdGRhdGE7CiBzdGF0aWMgaW50IF9faW5pdCBjaGVja19lYXJseV9pb3JlbWFwX2xlYWsodm9pZCkKIHsKLQlpZiAoIWVhcmx5X2lvcmVtYXBfbmVzdGVkKQorCWludCBjb3VudCA9IDA7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgRklYX0JUTUFQU19TTE9UUzsgaSsrKQorCQlpZiAocHJldl9tYXBbaV0pCisJCQljb3VudCsrOworCisJaWYgKCFjb3VudCkKIAkJcmV0dXJuIDA7CiAJV0FSTigxLCBLRVJOX1dBUk5JTkcKIAkgICAgICAgIkRlYnVnIHdhcm5pbmc6IGVhcmx5IGlvcmVtYXAgbGVhayBvZiAlZCBhcmVhcyBkZXRlY3RlZC5cbiIsCi0JCWVhcmx5X2lvcmVtYXBfbmVzdGVkKTsKKwkJY291bnQpOwogCXByaW50ayhLRVJOX1dBUk5JTkcKIAkJInBsZWFzZSBib290IHdpdGggZWFybHlfaW9yZW1hcF9kZWJ1ZyBhbmQgcmVwb3J0IHRoZSBkbWVzZy5cbiIpOwogCkBAIC02MDEsMTggKzY0NSwzMyBAQAogfQogbGF0ZV9pbml0Y2FsbChjaGVja19lYXJseV9pb3JlbWFwX2xlYWspOwogCi12b2lkIF9faW5pdCAqZWFybHlfaW9yZW1hcCh1bnNpZ25lZCBsb25nIHBoeXNfYWRkciwgdW5zaWduZWQgbG9uZyBzaXplKQorc3RhdGljIHZvaWQgX19pbml0ICpfX2Vhcmx5X2lvcmVtYXAodW5zaWduZWQgbG9uZyBwaHlzX2FkZHIsIHVuc2lnbmVkIGxvbmcgc2l6ZSwgcGdwcm90X3QgcHJvdCkKIHsKIAl1bnNpZ25lZCBsb25nIG9mZnNldCwgbGFzdF9hZGRyOwotCXVuc2lnbmVkIGludCBucnBhZ2VzLCBuZXN0aW5nOworCXVuc2lnbmVkIGludCBucnBhZ2VzOwogCWVudW0gZml4ZWRfYWRkcmVzc2VzIGlkeDAsIGlkeDsKKwlpbnQgaSwgc2xvdDsKIAogCVdBUk5fT04oc3lzdGVtX3N0YXRlICE9IFNZU1RFTV9CT09USU5HKTsKIAotCW5lc3RpbmcgPSBlYXJseV9pb3JlbWFwX25lc3RlZDsKKwlzbG90ID0gLTE7CisJZm9yIChpID0gMDsgaSA8IEZJWF9CVE1BUFNfU0xPVFM7IGkrKykgeworCQlpZiAoIXByZXZfbWFwW2ldKSB7CisJCQlzbG90ID0gaTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJaWYgKHNsb3QgPCAwKSB7CisJCXByaW50ayhLRVJOX0lORk8gImVhcmx5X2lvbWFwKCUwOGx4LCAlMDhseCkgbm90IGZvdW5kIHNsb3RcbiIsCisJCQkgcGh5c19hZGRyLCBzaXplKTsKKwkJV0FSTl9PTigxKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCiAJaWYgKGVhcmx5X2lvcmVtYXBfZGVidWcpIHsKIAkJcHJpbnRrKEtFUk5fSU5GTyAiZWFybHlfaW9yZW1hcCglMDhseCwgJTA4bHgpIFslZF0gPT4gIiwKLQkJICAgICAgIHBoeXNfYWRkciwgc2l6ZSwgbmVzdGluZyk7CisJCSAgICAgICBwaHlzX2FkZHIsIHNpemUsIHNsb3QpOwogCQlkdW1wX3N0YWNrKCk7CiAJfQogCkBAIC02MjMsMTEgKzY4Miw3IEBACiAJCXJldHVybiBOVUxMOwogCX0KIAotCWlmIChuZXN0aW5nID49IEZJWF9CVE1BUFNfTkVTVElORykgewotCQlXQVJOX09OKDEpOwotCQlyZXR1cm4gTlVMTDsKLQl9Ci0JZWFybHlfaW9yZW1hcF9uZXN0ZWQrKzsKKwlwcmV2X3NpemVbc2xvdF0gPSBzaXplOwogCS8qCiAJICogTWFwcGluZ3MgaGF2ZSB0byBiZSBwYWdlLWFsaWduZWQKIAkgKi8KQEAgLTY0NywxMCArNzAyLDEwIEBACiAJLyoKIAkgKiBPaywgZ28gZm9yIGl0Li4KIAkgKi8KLQlpZHgwID0gRklYX0JUTUFQX0JFR0lOIC0gTlJfRklYX0JUTUFQUypuZXN0aW5nOworCWlkeDAgPSBGSVhfQlRNQVBfQkVHSU4gLSBOUl9GSVhfQlRNQVBTKnNsb3Q7CiAJaWR4ID0gaWR4MDsKIAl3aGlsZSAobnJwYWdlcyA+IDApIHsKLQkJZWFybHlfc2V0X2ZpeG1hcChpZHgsIHBoeXNfYWRkcik7CisJCWVhcmx5X3NldF9maXhtYXAoaWR4LCBwaHlzX2FkZHIsIHByb3QpOwogCQlwaHlzX2FkZHIgKz0gUEFHRV9TSVpFOwogCQktLWlkeDsKIAkJLS1ucnBhZ2VzOwpAQCAtNjU4LDcgKzcxMywyMCBAQAogCWlmIChlYXJseV9pb3JlbWFwX2RlYnVnKQogCQlwcmludGsoS0VSTl9DT05UICIlMDhseCArICUwOGx4XG4iLCBvZmZzZXQsIGZpeF90b192aXJ0KGlkeDApKTsKIAotCXJldHVybiAodm9pZCAqKSAob2Zmc2V0ICsgZml4X3RvX3ZpcnQoaWR4MCkpOworCXByZXZfbWFwW3Nsb3RdID0gKHZvaWQgKikgKG9mZnNldCArIGZpeF90b192aXJ0KGlkeDApKTsKKwlyZXR1cm4gcHJldl9tYXBbc2xvdF07Cit9CisKKy8qIFJlbWFwIGFuIElPIGRldmljZSAqLwordm9pZCBfX2luaXQgKmVhcmx5X2lvcmVtYXAodW5zaWduZWQgbG9uZyBwaHlzX2FkZHIsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKK3sKKwlyZXR1cm4gX19lYXJseV9pb3JlbWFwKHBoeXNfYWRkciwgc2l6ZSwgUEFHRV9LRVJORUxfSU8pOworfQorCisvKiBSZW1hcCBtZW1vcnkgKi8KK3ZvaWQgX19pbml0ICplYXJseV9tZW1yZW1hcCh1bnNpZ25lZCBsb25nIHBoeXNfYWRkciwgdW5zaWduZWQgbG9uZyBzaXplKQoreworCXJldHVybiBfX2Vhcmx5X2lvcmVtYXAocGh5c19hZGRyLCBzaXplLCBQQUdFX0tFUk5FTCk7CiB9CiAKIHZvaWQgX19pbml0IGVhcmx5X2lvdW5tYXAodm9pZCAqYWRkciwgdW5zaWduZWQgbG9uZyBzaXplKQpAQCAtNjY3LDE1ICs3MzUsMzMgQEAKIAl1bnNpZ25lZCBsb25nIG9mZnNldDsKIAl1bnNpZ25lZCBpbnQgbnJwYWdlczsKIAllbnVtIGZpeGVkX2FkZHJlc3NlcyBpZHg7Ci0JaW50IG5lc3Rpbmc7CisJaW50IGksIHNsb3Q7CiAKLQluZXN0aW5nID0gLS1lYXJseV9pb3JlbWFwX25lc3RlZDsKLQlpZiAoV0FSTl9PTihuZXN0aW5nIDwgMCkpCisJc2xvdCA9IC0xOworCWZvciAoaSA9IDA7IGkgPCBGSVhfQlRNQVBTX1NMT1RTOyBpKyspIHsKKwkJaWYgKHByZXZfbWFwW2ldID09IGFkZHIpIHsKKwkJCXNsb3QgPSBpOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlpZiAoc2xvdCA8IDApIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiZWFybHlfaW91bm1hcCglcCwgJTA4bHgpIG5vdCBmb3VuZCBzbG90XG4iLAorCQkJIGFkZHIsIHNpemUpOworCQlXQVJOX09OKDEpOwogCQlyZXR1cm47CisJfQorCisJaWYgKHByZXZfc2l6ZVtzbG90XSAhPSBzaXplKSB7CisJCXByaW50ayhLRVJOX0lORk8gImVhcmx5X2lvdW5tYXAoJXAsICUwOGx4KSBbJWRdIHNpemUgbm90IGNvbnNpc3RlbnQgJTA4bHhcbiIsCisJCQkgYWRkciwgc2l6ZSwgc2xvdCwgcHJldl9zaXplW3Nsb3RdKTsKKwkJV0FSTl9PTigxKTsKKwkJcmV0dXJuOworCX0KIAogCWlmIChlYXJseV9pb3JlbWFwX2RlYnVnKSB7CiAJCXByaW50ayhLRVJOX0lORk8gImVhcmx5X2lvdW5tYXAoJXAsICUwOGx4KSBbJWRdXG4iLCBhZGRyLAotCQkgICAgICAgc2l6ZSwgbmVzdGluZyk7CisJCSAgICAgICBzaXplLCBzbG90KTsKIAkJZHVtcF9zdGFjaygpOwogCX0KIApAQCAtNjg3LDEyICs3NzMsMTMgQEAKIAlvZmZzZXQgPSB2aXJ0X2FkZHIgJiB+UEFHRV9NQVNLOwogCW5ycGFnZXMgPSBQQUdFX0FMSUdOKG9mZnNldCArIHNpemUgLSAxKSA+PiBQQUdFX1NISUZUOwogCi0JaWR4ID0gRklYX0JUTUFQX0JFR0lOIC0gTlJfRklYX0JUTUFQUypuZXN0aW5nOworCWlkeCA9IEZJWF9CVE1BUF9CRUdJTiAtIE5SX0ZJWF9CVE1BUFMqc2xvdDsKIAl3aGlsZSAobnJwYWdlcyA+IDApIHsKIAkJZWFybHlfY2xlYXJfZml4bWFwKGlkeCk7CiAJCS0taWR4OwogCQktLW5ycGFnZXM7CiAJfQorCXByZXZfbWFwW3Nsb3RdID0gMDsKIH0KIAogdm9pZCBfX3RoaXNfZml4bWFwX2RvZXNfbm90X2V4aXN0KHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9tbS9kaXNjb250aWdfMzIuYyBiL2FyY2gveDg2L21tL251bWFfMzIuYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYXJjaC94ODYvbW0vZGlzY29udGlnXzMyLmMKcmVuYW1lIHRvIGFyY2gveDg2L21tL251bWFfMzIuYwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbW0vcGFnZWF0dHIuYyBiL2FyY2gveDg2L21tL3BhZ2VhdHRyLmMKaW5kZXggYTllYzg5Yy4uNDA3ZDg3OCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvbW0vcGFnZWF0dHIuYworKysgYi9hcmNoL3g4Ni9tbS9wYWdlYXR0ci5jCkBAIC03OTIsNiArNzkyLDggQEAKIAkvKiBNdXN0IGF2b2lkIGFsaWFzaW5nIG1hcHBpbmdzIGluIHRoZSBoaWdobWVtIGNvZGUgKi8KIAlrbWFwX2ZsdXNoX3VudXNlZCgpOwogCisJdm1fdW5tYXBfYWxpYXNlcygpOworCiAJY3BhLnZhZGRyID0gYWRkcjsKIAljcGEubnVtcGFnZXMgPSBudW1wYWdlczsKIAljcGEubWFza19zZXQgPSBtYXNrX3NldDsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L21tL3NyYXRfNjQuYyBiL2FyY2gveDg2L21tL3NyYXRfNjQuYwppbmRleCAxYjQ3NjNlLi41MWMwYTJmIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9tbS9zcmF0XzY0LmMKKysrIGIvYXJjaC94ODYvbW0vc3JhdF82NC5jCkBAIC0xMzgsNyArMTM4LDcgQEAKIAkJcmV0dXJuOwogCX0KIAotCWlmIChpc191dl9zeXN0ZW0oKSkKKwlpZiAoZ2V0X3V2X3N5c3RlbV90eXBlKCkgPj0gVVZfWDJBUElDKQogCQlhcGljX2lkID0gKHBhLT5hcGljX2lkIDw8IDgpIHwgcGEtPmxvY2FsX3NhcGljX2VpZDsKIAllbHNlCiAJCWFwaWNfaWQgPSBwYS0+YXBpY19pZDsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L29wcm9maWxlL01ha2VmaWxlIGIvYXJjaC94ODYvb3Byb2ZpbGUvTWFrZWZpbGUKaW5kZXggMzBmM2ViMy4uNDQ2OTAyYiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvb3Byb2ZpbGUvTWFrZWZpbGUKKysrIGIvYXJjaC94ODYvb3Byb2ZpbGUvTWFrZWZpbGUKQEAgLTcsNiArNyw2IEBACiAJCXRpbWVyX2ludC5vICkKIAogb3Byb2ZpbGUteQkJCQk6PSAkKERSSVZFUl9PQkpTKSBpbml0Lm8gYmFja3RyYWNlLm8KLW9wcm9maWxlLSQoQ09ORklHX1g4Nl9MT0NBTF9BUElDKSAJKz0gbm1pX2ludC5vIG9wX21vZGVsX2F0aGxvbi5vIFwKK29wcm9maWxlLSQoQ09ORklHX1g4Nl9MT0NBTF9BUElDKSAJKz0gbm1pX2ludC5vIG9wX21vZGVsX2FtZC5vIFwKIAkJCQkJICAgb3BfbW9kZWxfcHByby5vIG9wX21vZGVsX3A0Lm8KIG9wcm9maWxlLSQoQ09ORklHX1g4Nl9JT19BUElDKQkJKz0gbm1pX3RpbWVyX2ludC5vCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9vcHJvZmlsZS9ubWlfaW50LmMgYi9hcmNoL3g4Ni9vcHJvZmlsZS9ubWlfaW50LmMKaW5kZXggOGE1ZjE2MS4uNTdmNmM5MCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvb3Byb2ZpbGUvbm1pX2ludC5jCisrKyBiL2FyY2gveDg2L29wcm9maWxlL25taV9pbnQuYwpAQCAtMSwxMCArMSwxMSBAQAogLyoqCiAgKiBAZmlsZSBubWlfaW50LmMKICAqCi0gKiBAcmVtYXJrIENvcHlyaWdodCAyMDAyIE9Qcm9maWxlIGF1dGhvcnMKKyAqIEByZW1hcmsgQ29weXJpZ2h0IDIwMDItMjAwOCBPUHJvZmlsZSBhdXRob3JzCiAgKiBAcmVtYXJrIFJlYWQgdGhlIGZpbGUgQ09QWUlORwogICoKICAqIEBhdXRob3IgSm9obiBMZXZvbiA8bGV2b25AbW92ZW1lbnRhcmlhbi5vcmc+CisgKiBAYXV0aG9yIFJvYmVydCBSaWNodGVyIDxyb2JlcnQucmljaHRlckBhbWQuY29tPgogICovCiAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CkBAIC00MzksNiArNDQwLDcgQEAKIAlfX3U4IHZlbmRvciA9IGJvb3RfY3B1X2RhdGEueDg2X3ZlbmRvcjsKIAlfX3U4IGZhbWlseSA9IGJvb3RfY3B1X2RhdGEueDg2OwogCWNoYXIgKmNwdV90eXBlOworCWludCByZXQgPSAwOwogCiAJaWYgKCFjcHVfaGFzX2FwaWMpCiAJCXJldHVybiAtRU5PREVWOwpAQCAtNDUxLDE5ICs0NTMsMjMgQEAKIAkJZGVmYXVsdDoKIAkJCXJldHVybiAtRU5PREVWOwogCQljYXNlIDY6Ci0JCQltb2RlbCA9ICZvcF9hdGhsb25fc3BlYzsKKwkJCW1vZGVsID0gJm9wX2FtZF9zcGVjOwogCQkJY3B1X3R5cGUgPSAiaTM4Ni9hdGhsb24iOwogCQkJYnJlYWs7CiAJCWNhc2UgMHhmOgotCQkJbW9kZWwgPSAmb3BfYXRobG9uX3NwZWM7CisJCQltb2RlbCA9ICZvcF9hbWRfc3BlYzsKIAkJCS8qIEFjdHVhbGx5IGl0IGNvdWxkIGJlIGkzODYvaGFtbWVyIHRvbywgYnV0IGdpdmUKIAkJCSB1c2VyIHNwYWNlIGFuIGNvbnNpc3RlbnQgbmFtZS4gKi8KIAkJCWNwdV90eXBlID0gIng4Ni02NC9oYW1tZXIiOwogCQkJYnJlYWs7CiAJCWNhc2UgMHgxMDoKLQkJCW1vZGVsID0gJm9wX2F0aGxvbl9zcGVjOworCQkJbW9kZWwgPSAmb3BfYW1kX3NwZWM7CiAJCQljcHVfdHlwZSA9ICJ4ODYtNjQvZmFtaWx5MTAiOwogCQkJYnJlYWs7CisJCWNhc2UgMHgxMToKKwkJCW1vZGVsID0gJm9wX2FtZF9zcGVjOworCQkJY3B1X3R5cGUgPSAieDg2LTY0L2ZhbWlseTExaCI7CisJCQlicmVhazsKIAkJfQogCQlicmVhazsKIApAQCAtNDkwLDE3ICs0OTYsMjQgQEAKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCi0JaW5pdF9zeXNmcygpOwogI2lmZGVmIENPTkZJR19TTVAKIAlyZWdpc3Rlcl9jcHVfbm90aWZpZXIoJm9wcm9maWxlX2NwdV9uYik7CiAjZW5kaWYKLQl1c2luZ19ubWkgPSAxOworCS8qIGRlZmF1bHQgdmFsdWVzLCBjYW4gYmUgb3ZlcndyaXR0ZW4gYnkgbW9kZWwgKi8KIAlvcHMtPmNyZWF0ZV9maWxlcyA9IG5taV9jcmVhdGVfZmlsZXM7CiAJb3BzLT5zZXR1cCA9IG5taV9zZXR1cDsKIAlvcHMtPnNodXRkb3duID0gbm1pX3NodXRkb3duOwogCW9wcy0+c3RhcnQgPSBubWlfc3RhcnQ7CiAJb3BzLT5zdG9wID0gbm1pX3N0b3A7CiAJb3BzLT5jcHVfdHlwZSA9IGNwdV90eXBlOworCisJaWYgKG1vZGVsLT5pbml0KQorCQlyZXQgPSBtb2RlbC0+aW5pdChvcHMpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlpbml0X3N5c2ZzKCk7CisJdXNpbmdfbm1pID0gMTsKIAlwcmludGsoS0VSTl9JTkZPICJvcHJvZmlsZTogdXNpbmcgTk1JIGludGVycnVwdC5cbiIpOwogCXJldHVybiAwOwogfQpAQCAtNTEzLDQgKzUyNiw2IEBACiAJCXVucmVnaXN0ZXJfY3B1X25vdGlmaWVyKCZvcHJvZmlsZV9jcHVfbmIpOwogI2VuZGlmCiAJfQorCWlmIChtb2RlbC0+ZXhpdCkKKwkJbW9kZWwtPmV4aXQoKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gveDg2L29wcm9maWxlL29wX21vZGVsX2FtZC5jIGIvYXJjaC94ODYvb3Byb2ZpbGUvb3BfbW9kZWxfYW1kLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDlmYWY2MAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveDg2L29wcm9maWxlL29wX21vZGVsX2FtZC5jCkBAIC0wLDAgKzEsNTQzIEBACisvKgorICogQGZpbGUgb3BfbW9kZWxfYW1kLmMKKyAqIGF0aGxvbiAvIEs3IC8gSzggLyBGYW1pbHkgMTBoIG1vZGVsLXNwZWNpZmljIE1TUiBvcGVyYXRpb25zCisgKgorICogQHJlbWFyayBDb3B5cmlnaHQgMjAwMi0yMDA4IE9Qcm9maWxlIGF1dGhvcnMKKyAqIEByZW1hcmsgUmVhZCB0aGUgZmlsZSBDT1BZSU5HCisgKgorICogQGF1dGhvciBKb2huIExldm9uCisgKiBAYXV0aG9yIFBoaWxpcHBlIEVsaWUKKyAqIEBhdXRob3IgR3JheWRvbiBIb2FyZQorICogQGF1dGhvciBSb2JlcnQgUmljaHRlciA8cm9iZXJ0LnJpY2h0ZXJAYW1kLmNvbT4KKyAqIEBhdXRob3IgQmFycnkgS2FzaW5kb3JmCisqLworCisjaW5jbHVkZSA8bGludXgvb3Byb2ZpbGUuaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKworI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KKyNpbmNsdWRlIDxhc20vbXNyLmg+CisjaW5jbHVkZSA8YXNtL25taS5oPgorCisjaW5jbHVkZSAib3BfeDg2X21vZGVsLmgiCisjaW5jbHVkZSAib3BfY291bnRlci5oIgorCisjZGVmaW5lIE5VTV9DT1VOVEVSUyA0CisjZGVmaW5lIE5VTV9DT05UUk9MUyA0CisKKyNkZWZpbmUgQ1RSX0lTX1JFU0VSVkVEKG1zcnMsIGMpIChtc3JzLT5jb3VudGVyc1soYyldLmFkZHIgPyAxIDogMCkKKyNkZWZpbmUgQ1RSX1JFQUQobCwgaCwgbXNycywgYykgZG8ge3JkbXNyKG1zcnMtPmNvdW50ZXJzWyhjKV0uYWRkciwgKGwpLCAoaCkpOyB9IHdoaWxlICgwKQorI2RlZmluZSBDVFJfV1JJVEUobCwgbXNycywgYykgZG8ge3dybXNyKG1zcnMtPmNvdW50ZXJzWyhjKV0uYWRkciwgLSh1bnNpZ25lZCBpbnQpKGwpLCAtMSk7IH0gd2hpbGUgKDApCisjZGVmaW5lIENUUl9PVkVSRkxPV0VEKG4pICghKChuKSAmICgxVTw8MzEpKSkKKworI2RlZmluZSBDVFJMX0lTX1JFU0VSVkVEKG1zcnMsIGMpIChtc3JzLT5jb250cm9sc1soYyldLmFkZHIgPyAxIDogMCkKKyNkZWZpbmUgQ1RSTF9SRUFEKGwsIGgsIG1zcnMsIGMpIGRvIHtyZG1zcihtc3JzLT5jb250cm9sc1soYyldLmFkZHIsIChsKSwgKGgpKTsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgQ1RSTF9XUklURShsLCBoLCBtc3JzLCBjKSBkbyB7d3Jtc3IobXNycy0+Y29udHJvbHNbKGMpXS5hZGRyLCAobCksIChoKSk7IH0gd2hpbGUgKDApCisjZGVmaW5lIENUUkxfU0VUX0FDVElWRShuKSAobiB8PSAoMTw8MjIpKQorI2RlZmluZSBDVFJMX1NFVF9JTkFDVElWRShuKSAobiAmPSB+KDE8PDIyKSkKKyNkZWZpbmUgQ1RSTF9DTEVBUl9MTyh4KSAoeCAmPSAoMTw8MjEpKQorI2RlZmluZSBDVFJMX0NMRUFSX0hJKHgpICh4ICY9IDB4ZmZmZmZjZjApCisjZGVmaW5lIENUUkxfU0VUX0VOQUJMRSh2YWwpICh2YWwgfD0gMTw8MjApCisjZGVmaW5lIENUUkxfU0VUX1VTUih2YWwsIHUpICh2YWwgfD0gKCh1ICYgMSkgPDwgMTYpKQorI2RlZmluZSBDVFJMX1NFVF9LRVJOKHZhbCwgaykgKHZhbCB8PSAoKGsgJiAxKSA8PCAxNykpCisjZGVmaW5lIENUUkxfU0VUX1VNKHZhbCwgbSkgKHZhbCB8PSAobSA8PCA4KSkKKyNkZWZpbmUgQ1RSTF9TRVRfRVZFTlRfTE9XKHZhbCwgZSkgKHZhbCB8PSAoZSAmIDB4ZmYpKQorI2RlZmluZSBDVFJMX1NFVF9FVkVOVF9ISUdIKHZhbCwgZSkgKHZhbCB8PSAoKGUgPj4gOCkgJiAweGYpKQorI2RlZmluZSBDVFJMX1NFVF9IT1NUX09OTFkodmFsLCBoKSAodmFsIHw9ICgoaCAmIDEpIDw8IDkpKQorI2RlZmluZSBDVFJMX1NFVF9HVUVTVF9PTkxZKHZhbCwgaCkgKHZhbCB8PSAoKGggJiAxKSA8PCA4KSkKKworc3RhdGljIHVuc2lnbmVkIGxvbmcgcmVzZXRfdmFsdWVbTlVNX0NPVU5URVJTXTsKKworI2lmZGVmIENPTkZJR19PUFJPRklMRV9JQlMKKworLyogSWJzRmV0Y2hDdGwgYml0cy9tYXNrcyAqLworI2RlZmluZSBJQlNfRkVUQ0hfSElHSF9WQUxJRF9CSVQJKDFVTCA8PCAxNykJLyogYml0IDQ5ICovCisjZGVmaW5lIElCU19GRVRDSF9ISUdIX0VOQUJMRQkJKDFVTCA8PCAxNikJLyogYml0IDQ4ICovCisjZGVmaW5lIElCU19GRVRDSF9MT1dfTUFYX0NOVF9NQVNLCTB4MDAwMEZGRkZVTAkvKiBNYXhDbnQgbWFzayAqLworCisvKklic09wQ3RsIGJpdHMgKi8KKyNkZWZpbmUgSUJTX09QX0xPV19WQUxJRF9CSVQJCSgxVUxMPDwxOCkJLyogYml0IDE4ICovCisjZGVmaW5lIElCU19PUF9MT1dfRU5BQkxFCQkoMVVMTDw8MTcpCS8qIGJpdCAxNyAqLworCisvKiBDb2RlcyB1c2VkIGluIGNwdV9idWZmZXIuYyAqLworLyogVGhpcyBwcm9kdWNlcyBkdXBsaWNhdGUgY29kZSwgbmVlZCB0byBiZSBmaXhlZCAqLworI2RlZmluZSBJQlNfRkVUQ0hfQkVHSU4gMworI2RlZmluZSBJQlNfT1BfQkVHSU4gICAgNAorCisvKiBUaGUgZnVuY3Rpb24gaW50ZXJmYWNlIG5lZWRzIHRvIGJlIGZpeGVkLCBzb21ldGhpbmcgbGlrZSBhZGQKKyAgIGRhdGEuIFNob3VsZCB0aGVuIGJlIGFkZGVkIHRvIGxpbnV4L29wcm9maWxlLmguICovCitleHRlcm4gdm9pZCBvcHJvZmlsZV9hZGRfaWJzX3NhbXBsZShzdHJ1Y3QgcHRfcmVncyAqY29uc3QgcmVncywKKwkJCQkgICAgdW5zaWduZWQgaW50ICogY29uc3QgaWJzX3NhbXBsZSwgdTggY29kZSk7CisKK3N0cnVjdCBpYnNfZmV0Y2hfc2FtcGxlIHsKKwkvKiBNU1JDMDAxXzEwMzEgSUJTIEZldGNoIExpbmVhciBBZGRyZXNzIFJlZ2lzdGVyICovCisJdW5zaWduZWQgaW50IGlic19mZXRjaF9saW5fYWRkcl9sb3c7CisJdW5zaWduZWQgaW50IGlic19mZXRjaF9saW5fYWRkcl9oaWdoOworCS8qIE1TUkMwMDFfMTAzMCBJQlMgRmV0Y2ggQ29udHJvbCBSZWdpc3RlciAqLworCXVuc2lnbmVkIGludCBpYnNfZmV0Y2hfY3RsX2xvdzsKKwl1bnNpZ25lZCBpbnQgaWJzX2ZldGNoX2N0bF9oaWdoOworCS8qIE1TUkMwMDFfMTAzMiBJQlMgRmV0Y2ggUGh5c2ljYWwgQWRkcmVzcyBSZWdpc3RlciAqLworCXVuc2lnbmVkIGludCBpYnNfZmV0Y2hfcGh5c19hZGRyX2xvdzsKKwl1bnNpZ25lZCBpbnQgaWJzX2ZldGNoX3BoeXNfYWRkcl9oaWdoOworfTsKKworc3RydWN0IGlic19vcF9zYW1wbGUgeworCS8qIE1TUkMwMDFfMTAzNCBJQlMgT3AgTG9naWNhbCBBZGRyZXNzIFJlZ2lzdGVyIChJYnNSSVApICovCisJdW5zaWduZWQgaW50IGlic19vcF9yaXBfbG93OworCXVuc2lnbmVkIGludCBpYnNfb3BfcmlwX2hpZ2g7CisJLyogTVNSQzAwMV8xMDM1IElCUyBPcCBEYXRhIFJlZ2lzdGVyICovCisJdW5zaWduZWQgaW50IGlic19vcF9kYXRhMV9sb3c7CisJdW5zaWduZWQgaW50IGlic19vcF9kYXRhMV9oaWdoOworCS8qIE1TUkMwMDFfMTAzNiBJQlMgT3AgRGF0YSAyIFJlZ2lzdGVyICovCisJdW5zaWduZWQgaW50IGlic19vcF9kYXRhMl9sb3c7CisJdW5zaWduZWQgaW50IGlic19vcF9kYXRhMl9oaWdoOworCS8qIE1TUkMwMDFfMTAzNyBJQlMgT3AgRGF0YSAzIFJlZ2lzdGVyICovCisJdW5zaWduZWQgaW50IGlic19vcF9kYXRhM19sb3c7CisJdW5zaWduZWQgaW50IGlic19vcF9kYXRhM19oaWdoOworCS8qIE1TUkMwMDFfMTAzOCBJQlMgREMgTGluZWFyIEFkZHJlc3MgUmVnaXN0ZXIgKElic0RjTGluQWQpICovCisJdW5zaWduZWQgaW50IGlic19kY19saW5lYXJfbG93OworCXVuc2lnbmVkIGludCBpYnNfZGNfbGluZWFyX2hpZ2g7CisJLyogTVNSQzAwMV8xMDM5IElCUyBEQyBQaHlzaWNhbCBBZGRyZXNzIFJlZ2lzdGVyIChJYnNEY1BoeXNBZCkgKi8KKwl1bnNpZ25lZCBpbnQgaWJzX2RjX3BoeXNfbG93OworCXVuc2lnbmVkIGludCBpYnNfZGNfcGh5c19oaWdoOworfTsKKworLyoKKyAqIHVuaXRpYWxpemUgdGhlIEFQSUMgZm9yIHRoZSBJQlMgaW50ZXJydXB0cyBpZiBuZWVkZWQgb24gQU1EIEZhbWlseTEwaCsKKyovCitzdGF0aWMgdm9pZCBjbGVhcl9pYnNfbm1pKHZvaWQpOworCitzdGF0aWMgaW50IGlic19hbGxvd2VkOwkvKiBBTUQgRmFtaWx5MTBoIGFuZCBsYXRlciAqLworCitzdHJ1Y3Qgb3BfaWJzX2NvbmZpZyB7CisJdW5zaWduZWQgbG9uZyBvcF9lbmFibGVkOworCXVuc2lnbmVkIGxvbmcgZmV0Y2hfZW5hYmxlZDsKKwl1bnNpZ25lZCBsb25nIG1heF9jbnRfZmV0Y2g7CisJdW5zaWduZWQgbG9uZyBtYXhfY250X29wOworCXVuc2lnbmVkIGxvbmcgcmFuZF9lbjsKKwl1bnNpZ25lZCBsb25nIGRpc3BhdGNoZWRfb3BzOworfTsKKworc3RhdGljIHN0cnVjdCBvcF9pYnNfY29uZmlnIGlic19jb25maWc7CisKKyNlbmRpZgorCisvKiBmdW5jdGlvbnMgZm9yIG9wX2FtZF9zcGVjICovCisKK3N0YXRpYyB2b2lkIG9wX2FtZF9maWxsX2luX2FkZHJlc3NlcyhzdHJ1Y3Qgb3BfbXNycyAqIGNvbnN0IG1zcnMpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgTlVNX0NPVU5URVJTOyBpKyspIHsKKwkJaWYgKHJlc2VydmVfcGVyZmN0cl9ubWkoTVNSX0s3X1BFUkZDVFIwICsgaSkpCisJCQltc3JzLT5jb3VudGVyc1tpXS5hZGRyID0gTVNSX0s3X1BFUkZDVFIwICsgaTsKKwkJZWxzZQorCQkJbXNycy0+Y291bnRlcnNbaV0uYWRkciA9IDA7CisJfQorCisJZm9yIChpID0gMDsgaSA8IE5VTV9DT05UUk9MUzsgaSsrKSB7CisJCWlmIChyZXNlcnZlX2V2bnRzZWxfbm1pKE1TUl9LN19FVk5UU0VMMCArIGkpKQorCQkJbXNycy0+Y29udHJvbHNbaV0uYWRkciA9IE1TUl9LN19FVk5UU0VMMCArIGk7CisJCWVsc2UKKwkJCW1zcnMtPmNvbnRyb2xzW2ldLmFkZHIgPSAwOworCX0KK30KKworCitzdGF0aWMgdm9pZCBvcF9hbWRfc2V0dXBfY3RycyhzdHJ1Y3Qgb3BfbXNycyBjb25zdCAqIGNvbnN0IG1zcnMpCit7CisJdW5zaWduZWQgaW50IGxvdywgaGlnaDsKKwlpbnQgaTsKKworCS8qIGNsZWFyIGFsbCBjb3VudGVycyAqLworCWZvciAoaSA9IDAgOyBpIDwgTlVNX0NPTlRST0xTOyArK2kpIHsKKwkJaWYgKHVubGlrZWx5KCFDVFJMX0lTX1JFU0VSVkVEKG1zcnMsIGkpKSkKKwkJCWNvbnRpbnVlOworCQlDVFJMX1JFQUQobG93LCBoaWdoLCBtc3JzLCBpKTsKKwkJQ1RSTF9DTEVBUl9MTyhsb3cpOworCQlDVFJMX0NMRUFSX0hJKGhpZ2gpOworCQlDVFJMX1dSSVRFKGxvdywgaGlnaCwgbXNycywgaSk7CisJfQorCisJLyogYXZvaWQgYSBmYWxzZSBkZXRlY3Rpb24gb2YgY3RyIG92ZXJmbG93cyBpbiBOTUkgaGFuZGxlciAqLworCWZvciAoaSA9IDA7IGkgPCBOVU1fQ09VTlRFUlM7ICsraSkgeworCQlpZiAodW5saWtlbHkoIUNUUl9JU19SRVNFUlZFRChtc3JzLCBpKSkpCisJCQljb250aW51ZTsKKwkJQ1RSX1dSSVRFKDEsIG1zcnMsIGkpOworCX0KKworCS8qIGVuYWJsZSBhY3RpdmUgY291bnRlcnMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgTlVNX0NPVU5URVJTOyArK2kpIHsKKwkJaWYgKChjb3VudGVyX2NvbmZpZ1tpXS5lbmFibGVkKSAmJiAoQ1RSX0lTX1JFU0VSVkVEKG1zcnMsIGkpKSkgeworCQkJcmVzZXRfdmFsdWVbaV0gPSBjb3VudGVyX2NvbmZpZ1tpXS5jb3VudDsKKworCQkJQ1RSX1dSSVRFKGNvdW50ZXJfY29uZmlnW2ldLmNvdW50LCBtc3JzLCBpKTsKKworCQkJQ1RSTF9SRUFEKGxvdywgaGlnaCwgbXNycywgaSk7CisJCQlDVFJMX0NMRUFSX0xPKGxvdyk7CisJCQlDVFJMX0NMRUFSX0hJKGhpZ2gpOworCQkJQ1RSTF9TRVRfRU5BQkxFKGxvdyk7CisJCQlDVFJMX1NFVF9VU1IobG93LCBjb3VudGVyX2NvbmZpZ1tpXS51c2VyKTsKKwkJCUNUUkxfU0VUX0tFUk4obG93LCBjb3VudGVyX2NvbmZpZ1tpXS5rZXJuZWwpOworCQkJQ1RSTF9TRVRfVU0obG93LCBjb3VudGVyX2NvbmZpZ1tpXS51bml0X21hc2spOworCQkJQ1RSTF9TRVRfRVZFTlRfTE9XKGxvdywgY291bnRlcl9jb25maWdbaV0uZXZlbnQpOworCQkJQ1RSTF9TRVRfRVZFTlRfSElHSChoaWdoLCBjb3VudGVyX2NvbmZpZ1tpXS5ldmVudCk7CisJCQlDVFJMX1NFVF9IT1NUX09OTFkoaGlnaCwgMCk7CisJCQlDVFJMX1NFVF9HVUVTVF9PTkxZKGhpZ2gsIDApOworCisJCQlDVFJMX1dSSVRFKGxvdywgaGlnaCwgbXNycywgaSk7CisJCX0gZWxzZSB7CisJCQlyZXNldF92YWx1ZVtpXSA9IDA7CisJCX0KKwl9Cit9CisKKyNpZmRlZiBDT05GSUdfT1BST0ZJTEVfSUJTCisKK3N0YXRpYyBpbmxpbmUgaW50CitvcF9hbWRfaGFuZGxlX2licyhzdHJ1Y3QgcHRfcmVncyAqIGNvbnN0IHJlZ3MsCisJCSAgc3RydWN0IG9wX21zcnMgY29uc3QgKiBjb25zdCBtc3JzKQoreworCXVuc2lnbmVkIGludCBsb3csIGhpZ2g7CisJc3RydWN0IGlic19mZXRjaF9zYW1wbGUgaWJzX2ZldGNoOworCXN0cnVjdCBpYnNfb3Bfc2FtcGxlIGlic19vcDsKKworCWlmICghaWJzX2FsbG93ZWQpCisJCXJldHVybiAxOworCisJaWYgKGlic19jb25maWcuZmV0Y2hfZW5hYmxlZCkgeworCQlyZG1zcihNU1JfQU1ENjRfSUJTRkVUQ0hDVEwsIGxvdywgaGlnaCk7CisJCWlmIChoaWdoICYgSUJTX0ZFVENIX0hJR0hfVkFMSURfQklUKSB7CisJCQlpYnNfZmV0Y2guaWJzX2ZldGNoX2N0bF9oaWdoID0gaGlnaDsKKwkJCWlic19mZXRjaC5pYnNfZmV0Y2hfY3RsX2xvdyA9IGxvdzsKKwkJCXJkbXNyKE1TUl9BTUQ2NF9JQlNGRVRDSExJTkFELCBsb3csIGhpZ2gpOworCQkJaWJzX2ZldGNoLmlic19mZXRjaF9saW5fYWRkcl9oaWdoID0gaGlnaDsKKwkJCWlic19mZXRjaC5pYnNfZmV0Y2hfbGluX2FkZHJfbG93ID0gbG93OworCQkJcmRtc3IoTVNSX0FNRDY0X0lCU0ZFVENIUEhZU0FELCBsb3csIGhpZ2gpOworCQkJaWJzX2ZldGNoLmlic19mZXRjaF9waHlzX2FkZHJfaGlnaCA9IGhpZ2g7CisJCQlpYnNfZmV0Y2guaWJzX2ZldGNoX3BoeXNfYWRkcl9sb3cgPSBsb3c7CisKKwkJCW9wcm9maWxlX2FkZF9pYnNfc2FtcGxlKHJlZ3MsCisJCQkJCQkodW5zaWduZWQgaW50ICopJmlic19mZXRjaCwKKwkJCQkJCUlCU19GRVRDSF9CRUdJTik7CisKKwkJCS8qcmVlbmFibGUgdGhlIElSUSAqLworCQkJcmRtc3IoTVNSX0FNRDY0X0lCU0ZFVENIQ1RMLCBsb3csIGhpZ2gpOworCQkJaGlnaCAmPSB+SUJTX0ZFVENIX0hJR0hfVkFMSURfQklUOworCQkJaGlnaCB8PSBJQlNfRkVUQ0hfSElHSF9FTkFCTEU7CisJCQlsb3cgJj0gSUJTX0ZFVENIX0xPV19NQVhfQ05UX01BU0s7CisJCQl3cm1zcihNU1JfQU1ENjRfSUJTRkVUQ0hDVEwsIGxvdywgaGlnaCk7CisJCX0KKwl9CisKKwlpZiAoaWJzX2NvbmZpZy5vcF9lbmFibGVkKSB7CisJCXJkbXNyKE1TUl9BTUQ2NF9JQlNPUENUTCwgbG93LCBoaWdoKTsKKwkJaWYgKGxvdyAmIElCU19PUF9MT1dfVkFMSURfQklUKSB7CisJCQlyZG1zcihNU1JfQU1ENjRfSUJTT1BSSVAsIGxvdywgaGlnaCk7CisJCQlpYnNfb3AuaWJzX29wX3JpcF9sb3cgPSBsb3c7CisJCQlpYnNfb3AuaWJzX29wX3JpcF9oaWdoID0gaGlnaDsKKwkJCXJkbXNyKE1TUl9BTUQ2NF9JQlNPUERBVEEsIGxvdywgaGlnaCk7CisJCQlpYnNfb3AuaWJzX29wX2RhdGExX2xvdyA9IGxvdzsKKwkJCWlic19vcC5pYnNfb3BfZGF0YTFfaGlnaCA9IGhpZ2g7CisJCQlyZG1zcihNU1JfQU1ENjRfSUJTT1BEQVRBMiwgbG93LCBoaWdoKTsKKwkJCWlic19vcC5pYnNfb3BfZGF0YTJfbG93ID0gbG93OworCQkJaWJzX29wLmlic19vcF9kYXRhMl9oaWdoID0gaGlnaDsKKwkJCXJkbXNyKE1TUl9BTUQ2NF9JQlNPUERBVEEzLCBsb3csIGhpZ2gpOworCQkJaWJzX29wLmlic19vcF9kYXRhM19sb3cgPSBsb3c7CisJCQlpYnNfb3AuaWJzX29wX2RhdGEzX2hpZ2ggPSBoaWdoOworCQkJcmRtc3IoTVNSX0FNRDY0X0lCU0RDTElOQUQsIGxvdywgaGlnaCk7CisJCQlpYnNfb3AuaWJzX2RjX2xpbmVhcl9sb3cgPSBsb3c7CisJCQlpYnNfb3AuaWJzX2RjX2xpbmVhcl9oaWdoID0gaGlnaDsKKwkJCXJkbXNyKE1TUl9BTUQ2NF9JQlNEQ1BIWVNBRCwgbG93LCBoaWdoKTsKKwkJCWlic19vcC5pYnNfZGNfcGh5c19sb3cgPSBsb3c7CisJCQlpYnNfb3AuaWJzX2RjX3BoeXNfaGlnaCA9IGhpZ2g7CisKKwkJCS8qIHJlZW5hYmxlIHRoZSBJUlEgKi8KKwkJCW9wcm9maWxlX2FkZF9pYnNfc2FtcGxlKHJlZ3MsCisJCQkJCQkodW5zaWduZWQgaW50ICopJmlic19vcCwKKwkJCQkJCUlCU19PUF9CRUdJTik7CisJCQlyZG1zcihNU1JfQU1ENjRfSUJTT1BDVEwsIGxvdywgaGlnaCk7CisJCQloaWdoID0gMDsKKwkJCWxvdyAmPSB+SUJTX09QX0xPV19WQUxJRF9CSVQ7CisJCQlsb3cgfD0gSUJTX09QX0xPV19FTkFCTEU7CisJCQl3cm1zcihNU1JfQU1ENjRfSUJTT1BDVEwsIGxvdywgaGlnaCk7CisJCX0KKwl9CisKKwlyZXR1cm4gMTsKK30KKworI2VuZGlmCisKK3N0YXRpYyBpbnQgb3BfYW1kX2NoZWNrX2N0cnMoc3RydWN0IHB0X3JlZ3MgKiBjb25zdCByZWdzLAorCQkJICAgICBzdHJ1Y3Qgb3BfbXNycyBjb25zdCAqIGNvbnN0IG1zcnMpCit7CisJdW5zaWduZWQgaW50IGxvdywgaGlnaDsKKwlpbnQgaTsKKworCWZvciAoaSA9IDAgOyBpIDwgTlVNX0NPVU5URVJTOyArK2kpIHsKKwkJaWYgKCFyZXNldF92YWx1ZVtpXSkKKwkJCWNvbnRpbnVlOworCQlDVFJfUkVBRChsb3csIGhpZ2gsIG1zcnMsIGkpOworCQlpZiAoQ1RSX09WRVJGTE9XRUQobG93KSkgeworCQkJb3Byb2ZpbGVfYWRkX3NhbXBsZShyZWdzLCBpKTsKKwkJCUNUUl9XUklURShyZXNldF92YWx1ZVtpXSwgbXNycywgaSk7CisJCX0KKwl9CisKKyNpZmRlZiBDT05GSUdfT1BST0ZJTEVfSUJTCisJb3BfYW1kX2hhbmRsZV9pYnMocmVncywgbXNycyk7CisjZW5kaWYKKworCS8qIFNlZSBvcF9tb2RlbF9wcHJvLmMgKi8KKwlyZXR1cm4gMTsKK30KKworc3RhdGljIHZvaWQgb3BfYW1kX3N0YXJ0KHN0cnVjdCBvcF9tc3JzIGNvbnN0ICogY29uc3QgbXNycykKK3sKKwl1bnNpZ25lZCBpbnQgbG93LCBoaWdoOworCWludCBpOworCWZvciAoaSA9IDAgOyBpIDwgTlVNX0NPVU5URVJTIDsgKytpKSB7CisJCWlmIChyZXNldF92YWx1ZVtpXSkgeworCQkJQ1RSTF9SRUFEKGxvdywgaGlnaCwgbXNycywgaSk7CisJCQlDVFJMX1NFVF9BQ1RJVkUobG93KTsKKwkJCUNUUkxfV1JJVEUobG93LCBoaWdoLCBtc3JzLCBpKTsKKwkJfQorCX0KKworI2lmZGVmIENPTkZJR19PUFJPRklMRV9JQlMKKwlpZiAoaWJzX2FsbG93ZWQgJiYgaWJzX2NvbmZpZy5mZXRjaF9lbmFibGVkKSB7CisJCWxvdyA9IChpYnNfY29uZmlnLm1heF9jbnRfZmV0Y2ggPj4gNCkgJiAweEZGRkY7CisJCWhpZ2ggPSBJQlNfRkVUQ0hfSElHSF9FTkFCTEU7CisJCXdybXNyKE1TUl9BTUQ2NF9JQlNGRVRDSENUTCwgbG93LCBoaWdoKTsKKwl9CisKKwlpZiAoaWJzX2FsbG93ZWQgJiYgaWJzX2NvbmZpZy5vcF9lbmFibGVkKSB7CisJCWxvdyA9ICgoaWJzX2NvbmZpZy5tYXhfY250X29wID4+IDQpICYgMHhGRkZGKSArIElCU19PUF9MT1dfRU5BQkxFOworCQloaWdoID0gMDsKKwkJd3Jtc3IoTVNSX0FNRDY0X0lCU09QQ1RMLCBsb3csIGhpZ2gpOworCX0KKyNlbmRpZgorfQorCisKK3N0YXRpYyB2b2lkIG9wX2FtZF9zdG9wKHN0cnVjdCBvcF9tc3JzIGNvbnN0ICogY29uc3QgbXNycykKK3sKKwl1bnNpZ25lZCBpbnQgbG93LCBoaWdoOworCWludCBpOworCisJLyogU3VidGxlOiBzdG9wIG9uIGFsbCBjb3VudGVycyB0byBhdm9pZCByYWNlIHdpdGgKKwkgKiBzZXR0aW5nIG91ciBwbSBjYWxsYmFjayAqLworCWZvciAoaSA9IDAgOyBpIDwgTlVNX0NPVU5URVJTIDsgKytpKSB7CisJCWlmICghcmVzZXRfdmFsdWVbaV0pCisJCQljb250aW51ZTsKKwkJQ1RSTF9SRUFEKGxvdywgaGlnaCwgbXNycywgaSk7CisJCUNUUkxfU0VUX0lOQUNUSVZFKGxvdyk7CisJCUNUUkxfV1JJVEUobG93LCBoaWdoLCBtc3JzLCBpKTsKKwl9CisKKyNpZmRlZiBDT05GSUdfT1BST0ZJTEVfSUJTCisJaWYgKGlic19hbGxvd2VkICYmIGlic19jb25maWcuZmV0Y2hfZW5hYmxlZCkgeworCQlsb3cgPSAwOwkJLyogY2xlYXIgbWF4IGNvdW50IGFuZCBlbmFibGUgKi8KKwkJaGlnaCA9IDA7CisJCXdybXNyKE1TUl9BTUQ2NF9JQlNGRVRDSENUTCwgbG93LCBoaWdoKTsKKwl9CisKKwlpZiAoaWJzX2FsbG93ZWQgJiYgaWJzX2NvbmZpZy5vcF9lbmFibGVkKSB7CisJCWxvdyA9IDA7CQkvKiBjbGVhciBtYXggY291bnQgYW5kIGVuYWJsZSAqLworCQloaWdoID0gMDsKKwkJd3Jtc3IoTVNSX0FNRDY0X0lCU09QQ1RMLCBsb3csIGhpZ2gpOworCX0KKyNlbmRpZgorfQorCitzdGF0aWMgdm9pZCBvcF9hbWRfc2h1dGRvd24oc3RydWN0IG9wX21zcnMgY29uc3QgKiBjb25zdCBtc3JzKQoreworCWludCBpOworCisJZm9yIChpID0gMCA7IGkgPCBOVU1fQ09VTlRFUlMgOyArK2kpIHsKKwkJaWYgKENUUl9JU19SRVNFUlZFRChtc3JzLCBpKSkKKwkJCXJlbGVhc2VfcGVyZmN0cl9ubWkoTVNSX0s3X1BFUkZDVFIwICsgaSk7CisJfQorCWZvciAoaSA9IDAgOyBpIDwgTlVNX0NPTlRST0xTIDsgKytpKSB7CisJCWlmIChDVFJMX0lTX1JFU0VSVkVEKG1zcnMsIGkpKQorCQkJcmVsZWFzZV9ldm50c2VsX25taShNU1JfSzdfRVZOVFNFTDAgKyBpKTsKKwl9Cit9CisKKyNpZm5kZWYgQ09ORklHX09QUk9GSUxFX0lCUworCisvKiBubyBJQlMgc3VwcG9ydCAqLworCitzdGF0aWMgaW50IG9wX2FtZF9pbml0KHN0cnVjdCBvcHJvZmlsZV9vcGVyYXRpb25zICpvcHMpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIG9wX2FtZF9leGl0KHZvaWQpIHt9CisKKyNlbHNlCisKK3N0YXRpYyB1OCBpYnNfZWlsdnRfb2ZmOworCitzdGF0aWMgaW5saW5lIHZvaWQgYXBpY19pbml0X2lic19ubWlfcGVyX2NwdSh2b2lkICphcmcpCit7CisJaWJzX2VpbHZ0X29mZiA9IHNldHVwX0FQSUNfZWlsdnRfaWJzKDAsIEFQSUNfRUlMVlRfTVNHX05NSSwgMCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBhcGljX2NsZWFyX2lic19ubWlfcGVyX2NwdSh2b2lkICphcmcpCit7CisJc2V0dXBfQVBJQ19laWx2dF9pYnMoMCwgQVBJQ19FSUxWVF9NU0dfRklYLCAxKTsKK30KKworc3RhdGljIGludCBwZm1fYW1kNjRfc2V0dXBfZWlsdnQodm9pZCkKK3sKKyNkZWZpbmUgSUJTQ1RMX0xWVE9GRlNFVFZBTAkJKDEgPDwgOCkKKyNkZWZpbmUgSUJTQ1RMCQkJCTB4MWNjCisJc3RydWN0IHBjaV9kZXYgKmNwdV9jZmc7CisJaW50IG5vZGVzOworCXUzMiB2YWx1ZSA9IDA7CisKKwkvKiBwZXIgQ1BVIHNldHVwICovCisJb25fZWFjaF9jcHUoYXBpY19pbml0X2lic19ubWlfcGVyX2NwdSwgTlVMTCwgMSk7CisKKwlub2RlcyA9IDA7CisJY3B1X2NmZyA9IE5VTEw7CisJZG8geworCQljcHVfY2ZnID0gcGNpX2dldF9kZXZpY2UoUENJX1ZFTkRPUl9JRF9BTUQsCisJCQkJCSBQQ0lfREVWSUNFX0lEX0FNRF8xMEhfTkJfTUlTQywKKwkJCQkJIGNwdV9jZmcpOworCQlpZiAoIWNwdV9jZmcpCisJCQlicmVhazsKKwkJKytub2RlczsKKwkJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChjcHVfY2ZnLCBJQlNDVEwsIGlic19laWx2dF9vZmYKKwkJCQkgICAgICAgfCBJQlNDVExfTFZUT0ZGU0VUVkFMKTsKKwkJcGNpX3JlYWRfY29uZmlnX2R3b3JkKGNwdV9jZmcsIElCU0NUTCwgJnZhbHVlKTsKKwkJaWYgKHZhbHVlICE9IChpYnNfZWlsdnRfb2ZmIHwgSUJTQ1RMX0xWVE9GRlNFVFZBTCkpIHsKKwkJCXByaW50ayhLRVJOX0RFQlVHICJGYWlsZWQgdG8gc2V0dXAgSUJTIExWVCBvZmZzZXQsICIKKwkJCQkiSUJTQ1RMID0gMHglMDh4IiwgdmFsdWUpOworCQkJcmV0dXJuIDE7CisJCX0KKwl9IHdoaWxlICgxKTsKKworCWlmICghbm9kZXMpIHsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIk5vIENQVSBub2RlIGNvbmZpZ3VyZWQgZm9yIElCUyIpOworCQlyZXR1cm4gMTsKKwl9CisKKyNpZmRlZiBDT05GSUdfTlVNQQorCS8qIFNhbml0eSBjaGVjayAqLworCS8qIFdvcmtzIG9ubHkgZm9yIDY0Yml0IHdpdGggcHJvcGVyIG51bWEgaW1wbGVtZW50YXRpb24uICovCisJaWYgKG5vZGVzICE9IG51bV9wb3NzaWJsZV9ub2RlcygpKSB7CisJCXByaW50ayhLRVJOX0RFQlVHICJGYWlsZWQgdG8gc2V0dXAgQ1BVIG5vZGUocykgZm9yIElCUywgIgorCQkJImZvdW5kOiAlZCwgZXhwZWN0ZWQgJWQiLAorCQkJbm9kZXMsIG51bV9wb3NzaWJsZV9ub2RlcygpKTsKKwkJcmV0dXJuIDE7CisJfQorI2VuZGlmCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBpbml0aWFsaXplIHRoZSBBUElDIGZvciB0aGUgSUJTIGludGVycnVwdHMKKyAqIGlmIGF2YWlsYWJsZSAoQU1EIEZhbWlseTEwaCByZXYgQjAgYW5kIGxhdGVyKQorICovCitzdGF0aWMgdm9pZCBzZXR1cF9pYnModm9pZCkKK3sKKwlpYnNfYWxsb3dlZCA9IGJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9JQlMpOworCisJaWYgKCFpYnNfYWxsb3dlZCkKKwkJcmV0dXJuOworCisJaWYgKHBmbV9hbWQ2NF9zZXR1cF9laWx2dCgpKSB7CisJCWlic19hbGxvd2VkID0gMDsKKwkJcmV0dXJuOworCX0KKworCXByaW50ayhLRVJOX0lORk8gIm9wcm9maWxlOiBBTUQgSUJTIGRldGVjdGVkXG4iKTsKK30KKworCisvKgorICogdW5pdGlhbGl6ZSB0aGUgQVBJQyBmb3IgdGhlIElCUyBpbnRlcnJ1cHRzIGlmIG5lZWRlZCBvbiBBTUQgRmFtaWx5MTBoCisgKiByZXYgQjAgYW5kIGxhdGVyICovCitzdGF0aWMgdm9pZCBjbGVhcl9pYnNfbm1pKHZvaWQpCit7CisJaWYgKGlic19hbGxvd2VkKQorCQlvbl9lYWNoX2NwdShhcGljX2NsZWFyX2lic19ubWlfcGVyX2NwdSwgTlVMTCwgMSk7Cit9CisKK3N0YXRpYyBpbnQgKCpjcmVhdGVfYXJjaF9maWxlcykoc3RydWN0IHN1cGVyX2Jsb2NrICogc2IsIHN0cnVjdCBkZW50cnkgKiByb290KTsKKworc3RhdGljIGludCBzZXR1cF9pYnNfZmlsZXMoc3RydWN0IHN1cGVyX2Jsb2NrICogc2IsIHN0cnVjdCBkZW50cnkgKiByb290KQoreworCWNoYXIgYnVmWzEyXTsKKwlzdHJ1Y3QgZGVudHJ5ICpkaXI7CisJaW50IHJldCA9IDA7CisKKwkvKiBhcmNoaXRlY3R1cmUgc3BlY2lmaWMgZmlsZXMgKi8KKwlpZiAoY3JlYXRlX2FyY2hfZmlsZXMpCisJCXJldCA9IGNyZWF0ZV9hcmNoX2ZpbGVzKHNiLCByb290KTsKKworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlpZiAoIWlic19hbGxvd2VkKQorCQlyZXR1cm4gcmV0OworCisJLyogbW9kZWwgc3BlY2lmaWMgZmlsZXMgKi8KKworCS8qIHNldHVwIHNvbWUgcmVhc29uYWJsZSBkZWZhdWx0cyAqLworCWlic19jb25maWcubWF4X2NudF9mZXRjaCA9IDI1MDAwMDsKKwlpYnNfY29uZmlnLmZldGNoX2VuYWJsZWQgPSAwOworCWlic19jb25maWcubWF4X2NudF9vcCA9IDI1MDAwMDsKKwlpYnNfY29uZmlnLm9wX2VuYWJsZWQgPSAwOworCWlic19jb25maWcuZGlzcGF0Y2hlZF9vcHMgPSAxOworCXNucHJpbnRmKGJ1ZiwgIHNpemVvZihidWYpLCAiaWJzX2ZldGNoIik7CisJZGlyID0gb3Byb2ZpbGVmc19ta2RpcihzYiwgcm9vdCwgYnVmKTsKKwlvcHJvZmlsZWZzX2NyZWF0ZV91bG9uZyhzYiwgZGlyLCAicmFuZF9lbmFibGUiLAorCQkJCSZpYnNfY29uZmlnLnJhbmRfZW4pOworCW9wcm9maWxlZnNfY3JlYXRlX3Vsb25nKHNiLCBkaXIsICJlbmFibGUiLAorCQkmaWJzX2NvbmZpZy5mZXRjaF9lbmFibGVkKTsKKwlvcHJvZmlsZWZzX2NyZWF0ZV91bG9uZyhzYiwgZGlyLCAibWF4X2NvdW50IiwKKwkJJmlic19jb25maWcubWF4X2NudF9mZXRjaCk7CisJc25wcmludGYoYnVmLCAgc2l6ZW9mKGJ1ZiksICJpYnNfdW9wcyIpOworCWRpciA9IG9wcm9maWxlZnNfbWtkaXIoc2IsIHJvb3QsIGJ1Zik7CisJb3Byb2ZpbGVmc19jcmVhdGVfdWxvbmcoc2IsIGRpciwgImVuYWJsZSIsCisJCSZpYnNfY29uZmlnLm9wX2VuYWJsZWQpOworCW9wcm9maWxlZnNfY3JlYXRlX3Vsb25nKHNiLCBkaXIsICJtYXhfY291bnQiLAorCQkmaWJzX2NvbmZpZy5tYXhfY250X29wKTsKKwlvcHJvZmlsZWZzX2NyZWF0ZV91bG9uZyhzYiwgZGlyLCAiZGlzcGF0Y2hlZF9vcHMiLAorCQkmaWJzX2NvbmZpZy5kaXNwYXRjaGVkX29wcyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBvcF9hbWRfaW5pdChzdHJ1Y3Qgb3Byb2ZpbGVfb3BlcmF0aW9ucyAqb3BzKQoreworCXNldHVwX2licygpOworCWNyZWF0ZV9hcmNoX2ZpbGVzID0gb3BzLT5jcmVhdGVfZmlsZXM7CisJb3BzLT5jcmVhdGVfZmlsZXMgPSBzZXR1cF9pYnNfZmlsZXM7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIG9wX2FtZF9leGl0KHZvaWQpCit7CisJY2xlYXJfaWJzX25taSgpOworfQorCisjZW5kaWYKKworc3RydWN0IG9wX3g4Nl9tb2RlbF9zcGVjIGNvbnN0IG9wX2FtZF9zcGVjID0geworCS5pbml0ID0gb3BfYW1kX2luaXQsCisJLmV4aXQgPSBvcF9hbWRfZXhpdCwKKwkubnVtX2NvdW50ZXJzID0gTlVNX0NPVU5URVJTLAorCS5udW1fY29udHJvbHMgPSBOVU1fQ09OVFJPTFMsCisJLmZpbGxfaW5fYWRkcmVzc2VzID0gJm9wX2FtZF9maWxsX2luX2FkZHJlc3NlcywKKwkuc2V0dXBfY3RycyA9ICZvcF9hbWRfc2V0dXBfY3RycywKKwkuY2hlY2tfY3RycyA9ICZvcF9hbWRfY2hlY2tfY3RycywKKwkuc3RhcnQgPSAmb3BfYW1kX3N0YXJ0LAorCS5zdG9wID0gJm9wX2FtZF9zdG9wLAorCS5zaHV0ZG93biA9ICZvcF9hbWRfc2h1dGRvd24KK307CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9vcHJvZmlsZS9vcF9tb2RlbF9hdGhsb24uYyBiL2FyY2gveDg2L29wcm9maWxlL29wX21vZGVsX2F0aGxvbi5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZDUzNDg3Li4wMDAwMDAwCi0tLSBhL2FyY2gveDg2L29wcm9maWxlL29wX21vZGVsX2F0aGxvbi5jCisrKyAvZGV2L251bGwKQEAgLTEsMTkwICswLDAgQEAKLS8qCi0gKiBAZmlsZSBvcF9tb2RlbF9hdGhsb24uaAotICogYXRobG9uIC8gSzcgLyBLOCAvIEZhbWlseSAxMGggbW9kZWwtc3BlY2lmaWMgTVNSIG9wZXJhdGlvbnMKLSAqCi0gKiBAcmVtYXJrIENvcHlyaWdodCAyMDAyIE9Qcm9maWxlIGF1dGhvcnMKLSAqIEByZW1hcmsgUmVhZCB0aGUgZmlsZSBDT1BZSU5HCi0gKgotICogQGF1dGhvciBKb2huIExldm9uCi0gKiBAYXV0aG9yIFBoaWxpcHBlIEVsaWUKLSAqIEBhdXRob3IgR3JheWRvbiBIb2FyZQotICovCi0KLSNpbmNsdWRlIDxsaW51eC9vcHJvZmlsZS5oPgotI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KLSNpbmNsdWRlIDxhc20vbXNyLmg+Ci0jaW5jbHVkZSA8YXNtL25taS5oPgotCi0jaW5jbHVkZSAib3BfeDg2X21vZGVsLmgiCi0jaW5jbHVkZSAib3BfY291bnRlci5oIgotCi0jZGVmaW5lIE5VTV9DT1VOVEVSUyA0Ci0jZGVmaW5lIE5VTV9DT05UUk9MUyA0Ci0KLSNkZWZpbmUgQ1RSX0lTX1JFU0VSVkVEKG1zcnMsIGMpIChtc3JzLT5jb3VudGVyc1soYyldLmFkZHIgPyAxIDogMCkKLSNkZWZpbmUgQ1RSX1JFQUQobCwgaCwgbXNycywgYykgZG8ge3JkbXNyKG1zcnMtPmNvdW50ZXJzWyhjKV0uYWRkciwgKGwpLCAoaCkpOyB9IHdoaWxlICgwKQotI2RlZmluZSBDVFJfV1JJVEUobCwgbXNycywgYykgZG8ge3dybXNyKG1zcnMtPmNvdW50ZXJzWyhjKV0uYWRkciwgLSh1bnNpZ25lZCBpbnQpKGwpLCAtMSk7IH0gd2hpbGUgKDApCi0jZGVmaW5lIENUUl9PVkVSRkxPV0VEKG4pICghKChuKSAmICgxVTw8MzEpKSkKLQotI2RlZmluZSBDVFJMX0lTX1JFU0VSVkVEKG1zcnMsIGMpIChtc3JzLT5jb250cm9sc1soYyldLmFkZHIgPyAxIDogMCkKLSNkZWZpbmUgQ1RSTF9SRUFEKGwsIGgsIG1zcnMsIGMpIGRvIHtyZG1zcihtc3JzLT5jb250cm9sc1soYyldLmFkZHIsIChsKSwgKGgpKTsgfSB3aGlsZSAoMCkKLSNkZWZpbmUgQ1RSTF9XUklURShsLCBoLCBtc3JzLCBjKSBkbyB7d3Jtc3IobXNycy0+Y29udHJvbHNbKGMpXS5hZGRyLCAobCksIChoKSk7IH0gd2hpbGUgKDApCi0jZGVmaW5lIENUUkxfU0VUX0FDVElWRShuKSAobiB8PSAoMTw8MjIpKQotI2RlZmluZSBDVFJMX1NFVF9JTkFDVElWRShuKSAobiAmPSB+KDE8PDIyKSkKLSNkZWZpbmUgQ1RSTF9DTEVBUl9MTyh4KSAoeCAmPSAoMTw8MjEpKQotI2RlZmluZSBDVFJMX0NMRUFSX0hJKHgpICh4ICY9IDB4ZmZmZmZjZjApCi0jZGVmaW5lIENUUkxfU0VUX0VOQUJMRSh2YWwpICh2YWwgfD0gMTw8MjApCi0jZGVmaW5lIENUUkxfU0VUX1VTUih2YWwsIHUpICh2YWwgfD0gKCh1ICYgMSkgPDwgMTYpKQotI2RlZmluZSBDVFJMX1NFVF9LRVJOKHZhbCwgaykgKHZhbCB8PSAoKGsgJiAxKSA8PCAxNykpCi0jZGVmaW5lIENUUkxfU0VUX1VNKHZhbCwgbSkgKHZhbCB8PSAobSA8PCA4KSkKLSNkZWZpbmUgQ1RSTF9TRVRfRVZFTlRfTE9XKHZhbCwgZSkgKHZhbCB8PSAoZSAmIDB4ZmYpKQotI2RlZmluZSBDVFJMX1NFVF9FVkVOVF9ISUdIKHZhbCwgZSkgKHZhbCB8PSAoKGUgPj4gOCkgJiAweGYpKQotI2RlZmluZSBDVFJMX1NFVF9IT1NUX09OTFkodmFsLCBoKSAodmFsIHw9ICgoaCAmIDEpIDw8IDkpKQotI2RlZmluZSBDVFJMX1NFVF9HVUVTVF9PTkxZKHZhbCwgaCkgKHZhbCB8PSAoKGggJiAxKSA8PCA4KSkKLQotc3RhdGljIHVuc2lnbmVkIGxvbmcgcmVzZXRfdmFsdWVbTlVNX0NPVU5URVJTXTsKLQotc3RhdGljIHZvaWQgYXRobG9uX2ZpbGxfaW5fYWRkcmVzc2VzKHN0cnVjdCBvcF9tc3JzICogY29uc3QgbXNycykKLXsKLQlpbnQgaTsKLQotCWZvciAoaSA9IDA7IGkgPCBOVU1fQ09VTlRFUlM7IGkrKykgewotCQlpZiAocmVzZXJ2ZV9wZXJmY3RyX25taShNU1JfSzdfUEVSRkNUUjAgKyBpKSkKLQkJCW1zcnMtPmNvdW50ZXJzW2ldLmFkZHIgPSBNU1JfSzdfUEVSRkNUUjAgKyBpOwotCQllbHNlCi0JCQltc3JzLT5jb3VudGVyc1tpXS5hZGRyID0gMDsKLQl9Ci0KLQlmb3IgKGkgPSAwOyBpIDwgTlVNX0NPTlRST0xTOyBpKyspIHsKLQkJaWYgKHJlc2VydmVfZXZudHNlbF9ubWkoTVNSX0s3X0VWTlRTRUwwICsgaSkpCi0JCQltc3JzLT5jb250cm9sc1tpXS5hZGRyID0gTVNSX0s3X0VWTlRTRUwwICsgaTsKLQkJZWxzZQotCQkJbXNycy0+Y29udHJvbHNbaV0uYWRkciA9IDA7Ci0JfQotfQotCi0KLXN0YXRpYyB2b2lkIGF0aGxvbl9zZXR1cF9jdHJzKHN0cnVjdCBvcF9tc3JzIGNvbnN0ICogY29uc3QgbXNycykKLXsKLQl1bnNpZ25lZCBpbnQgbG93LCBoaWdoOwotCWludCBpOwotCi0JLyogY2xlYXIgYWxsIGNvdW50ZXJzICovCi0JZm9yIChpID0gMCA7IGkgPCBOVU1fQ09OVFJPTFM7ICsraSkgewotCQlpZiAodW5saWtlbHkoIUNUUkxfSVNfUkVTRVJWRUQobXNycywgaSkpKQotCQkJY29udGludWU7Ci0JCUNUUkxfUkVBRChsb3csIGhpZ2gsIG1zcnMsIGkpOwotCQlDVFJMX0NMRUFSX0xPKGxvdyk7Ci0JCUNUUkxfQ0xFQVJfSEkoaGlnaCk7Ci0JCUNUUkxfV1JJVEUobG93LCBoaWdoLCBtc3JzLCBpKTsKLQl9Ci0KLQkvKiBhdm9pZCBhIGZhbHNlIGRldGVjdGlvbiBvZiBjdHIgb3ZlcmZsb3dzIGluIE5NSSBoYW5kbGVyICovCi0JZm9yIChpID0gMDsgaSA8IE5VTV9DT1VOVEVSUzsgKytpKSB7Ci0JCWlmICh1bmxpa2VseSghQ1RSX0lTX1JFU0VSVkVEKG1zcnMsIGkpKSkKLQkJCWNvbnRpbnVlOwotCQlDVFJfV1JJVEUoMSwgbXNycywgaSk7Ci0JfQotCi0JLyogZW5hYmxlIGFjdGl2ZSBjb3VudGVycyAqLwotCWZvciAoaSA9IDA7IGkgPCBOVU1fQ09VTlRFUlM7ICsraSkgewotCQlpZiAoKGNvdW50ZXJfY29uZmlnW2ldLmVuYWJsZWQpICYmIChDVFJfSVNfUkVTRVJWRUQobXNycywgaSkpKSB7Ci0JCQlyZXNldF92YWx1ZVtpXSA9IGNvdW50ZXJfY29uZmlnW2ldLmNvdW50OwotCi0JCQlDVFJfV1JJVEUoY291bnRlcl9jb25maWdbaV0uY291bnQsIG1zcnMsIGkpOwotCi0JCQlDVFJMX1JFQUQobG93LCBoaWdoLCBtc3JzLCBpKTsKLQkJCUNUUkxfQ0xFQVJfTE8obG93KTsKLQkJCUNUUkxfQ0xFQVJfSEkoaGlnaCk7Ci0JCQlDVFJMX1NFVF9FTkFCTEUobG93KTsKLQkJCUNUUkxfU0VUX1VTUihsb3csIGNvdW50ZXJfY29uZmlnW2ldLnVzZXIpOwotCQkJQ1RSTF9TRVRfS0VSTihsb3csIGNvdW50ZXJfY29uZmlnW2ldLmtlcm5lbCk7Ci0JCQlDVFJMX1NFVF9VTShsb3csIGNvdW50ZXJfY29uZmlnW2ldLnVuaXRfbWFzayk7Ci0JCQlDVFJMX1NFVF9FVkVOVF9MT1cobG93LCBjb3VudGVyX2NvbmZpZ1tpXS5ldmVudCk7Ci0JCQlDVFJMX1NFVF9FVkVOVF9ISUdIKGhpZ2gsIGNvdW50ZXJfY29uZmlnW2ldLmV2ZW50KTsKLQkJCUNUUkxfU0VUX0hPU1RfT05MWShoaWdoLCAwKTsKLQkJCUNUUkxfU0VUX0dVRVNUX09OTFkoaGlnaCwgMCk7Ci0KLQkJCUNUUkxfV1JJVEUobG93LCBoaWdoLCBtc3JzLCBpKTsKLQkJfSBlbHNlIHsKLQkJCXJlc2V0X3ZhbHVlW2ldID0gMDsKLQkJfQotCX0KLX0KLQotCi1zdGF0aWMgaW50IGF0aGxvbl9jaGVja19jdHJzKHN0cnVjdCBwdF9yZWdzICogY29uc3QgcmVncywKLQkJCSAgICAgc3RydWN0IG9wX21zcnMgY29uc3QgKiBjb25zdCBtc3JzKQotewotCXVuc2lnbmVkIGludCBsb3csIGhpZ2g7Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSAwIDsgaSA8IE5VTV9DT1VOVEVSUzsgKytpKSB7Ci0JCWlmICghcmVzZXRfdmFsdWVbaV0pCi0JCQljb250aW51ZTsKLQkJQ1RSX1JFQUQobG93LCBoaWdoLCBtc3JzLCBpKTsKLQkJaWYgKENUUl9PVkVSRkxPV0VEKGxvdykpIHsKLQkJCW9wcm9maWxlX2FkZF9zYW1wbGUocmVncywgaSk7Ci0JCQlDVFJfV1JJVEUocmVzZXRfdmFsdWVbaV0sIG1zcnMsIGkpOwotCQl9Ci0JfQotCi0JLyogU2VlIG9wX21vZGVsX3Bwcm8uYyAqLwotCXJldHVybiAxOwotfQotCi0KLXN0YXRpYyB2b2lkIGF0aGxvbl9zdGFydChzdHJ1Y3Qgb3BfbXNycyBjb25zdCAqIGNvbnN0IG1zcnMpCi17Ci0JdW5zaWduZWQgaW50IGxvdywgaGlnaDsKLQlpbnQgaTsKLQlmb3IgKGkgPSAwIDsgaSA8IE5VTV9DT1VOVEVSUyA7ICsraSkgewotCQlpZiAocmVzZXRfdmFsdWVbaV0pIHsKLQkJCUNUUkxfUkVBRChsb3csIGhpZ2gsIG1zcnMsIGkpOwotCQkJQ1RSTF9TRVRfQUNUSVZFKGxvdyk7Ci0JCQlDVFJMX1dSSVRFKGxvdywgaGlnaCwgbXNycywgaSk7Ci0JCX0KLQl9Ci19Ci0KLQotc3RhdGljIHZvaWQgYXRobG9uX3N0b3Aoc3RydWN0IG9wX21zcnMgY29uc3QgKiBjb25zdCBtc3JzKQotewotCXVuc2lnbmVkIGludCBsb3csIGhpZ2g7Ci0JaW50IGk7Ci0KLQkvKiBTdWJ0bGU6IHN0b3Agb24gYWxsIGNvdW50ZXJzIHRvIGF2b2lkIHJhY2Ugd2l0aAotCSAqIHNldHRpbmcgb3VyIHBtIGNhbGxiYWNrICovCi0JZm9yIChpID0gMCA7IGkgPCBOVU1fQ09VTlRFUlMgOyArK2kpIHsKLQkJaWYgKCFyZXNldF92YWx1ZVtpXSkKLQkJCWNvbnRpbnVlOwotCQlDVFJMX1JFQUQobG93LCBoaWdoLCBtc3JzLCBpKTsKLQkJQ1RSTF9TRVRfSU5BQ1RJVkUobG93KTsKLQkJQ1RSTF9XUklURShsb3csIGhpZ2gsIG1zcnMsIGkpOwotCX0KLX0KLQotc3RhdGljIHZvaWQgYXRobG9uX3NodXRkb3duKHN0cnVjdCBvcF9tc3JzIGNvbnN0ICogY29uc3QgbXNycykKLXsKLQlpbnQgaTsKLQotCWZvciAoaSA9IDAgOyBpIDwgTlVNX0NPVU5URVJTIDsgKytpKSB7Ci0JCWlmIChDVFJfSVNfUkVTRVJWRUQobXNycywgaSkpCi0JCQlyZWxlYXNlX3BlcmZjdHJfbm1pKE1TUl9LN19QRVJGQ1RSMCArIGkpOwotCX0KLQlmb3IgKGkgPSAwIDsgaSA8IE5VTV9DT05UUk9MUyA7ICsraSkgewotCQlpZiAoQ1RSTF9JU19SRVNFUlZFRChtc3JzLCBpKSkKLQkJCXJlbGVhc2VfZXZudHNlbF9ubWkoTVNSX0s3X0VWTlRTRUwwICsgaSk7Ci0JfQotfQotCi1zdHJ1Y3Qgb3BfeDg2X21vZGVsX3NwZWMgY29uc3Qgb3BfYXRobG9uX3NwZWMgPSB7Ci0JLm51bV9jb3VudGVycyA9IE5VTV9DT1VOVEVSUywKLQkubnVtX2NvbnRyb2xzID0gTlVNX0NPTlRST0xTLAotCS5maWxsX2luX2FkZHJlc3NlcyA9ICZhdGhsb25fZmlsbF9pbl9hZGRyZXNzZXMsCi0JLnNldHVwX2N0cnMgPSAmYXRobG9uX3NldHVwX2N0cnMsCi0JLmNoZWNrX2N0cnMgPSAmYXRobG9uX2NoZWNrX2N0cnMsCi0JLnN0YXJ0ID0gJmF0aGxvbl9zdGFydCwKLQkuc3RvcCA9ICZhdGhsb25fc3RvcCwKLQkuc2h1dGRvd24gPSAmYXRobG9uX3NodXRkb3duCi19OwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvb3Byb2ZpbGUvb3BfeDg2X21vZGVsLmggYi9hcmNoL3g4Ni9vcHJvZmlsZS9vcF94ODZfbW9kZWwuaAppbmRleCA0NWI2MDVmLi4wNWEwMjYxIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9vcHJvZmlsZS9vcF94ODZfbW9kZWwuaAorKysgYi9hcmNoL3g4Ni9vcHJvZmlsZS9vcF94ODZfbW9kZWwuaApAQCAtMzIsNiArMzIsOCBAQAogICogdmFyaW91cyB4ODYgQ1BVIG1vZGVscycgcGVyZmN0ciBzdXBwb3J0LgogICovCiBzdHJ1Y3Qgb3BfeDg2X21vZGVsX3NwZWMgeworCWludCAoKmluaXQpKHN0cnVjdCBvcHJvZmlsZV9vcGVyYXRpb25zICpvcHMpOworCXZvaWQgKCpleGl0KSh2b2lkKTsKIAl1bnNpZ25lZCBpbnQgY29uc3QgbnVtX2NvdW50ZXJzOwogCXVuc2lnbmVkIGludCBjb25zdCBudW1fY29udHJvbHM7CiAJdm9pZCAoKmZpbGxfaW5fYWRkcmVzc2VzKShzdHJ1Y3Qgb3BfbXNycyAqIGNvbnN0IG1zcnMpOwpAQCAtNDYsNiArNDgsNiBAQAogZXh0ZXJuIHN0cnVjdCBvcF94ODZfbW9kZWxfc3BlYyBjb25zdCBvcF9wcHJvX3NwZWM7CiBleHRlcm4gc3RydWN0IG9wX3g4Nl9tb2RlbF9zcGVjIGNvbnN0IG9wX3A0X3NwZWM7CiBleHRlcm4gc3RydWN0IG9wX3g4Nl9tb2RlbF9zcGVjIGNvbnN0IG9wX3A0X2h0Ml9zcGVjOwotZXh0ZXJuIHN0cnVjdCBvcF94ODZfbW9kZWxfc3BlYyBjb25zdCBvcF9hdGhsb25fc3BlYzsKK2V4dGVybiBzdHJ1Y3Qgb3BfeDg2X21vZGVsX3NwZWMgY29uc3Qgb3BfYW1kX3NwZWM7CiAKICNlbmRpZiAvKiBPUF9YODZfTU9ERUxfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvcGNpL2ZpeHVwLmMgYi9hcmNoL3g4Ni9wY2kvZml4dXAuYwppbmRleCA0YmRhYTU5Li4zYzI3YTgwIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9wY2kvZml4dXAuYworKysgYi9hcmNoL3g4Ni9wY2kvZml4dXAuYwpAQCAtNTExLDMgKzUxMSwzMSBAQAogREVDTEFSRV9QQ0lfRklYVVBfSEVBREVSKFBDSV9WRU5ET1JfSURfQU1ELCAweDEyMDIsIGZhbTEwaF9wY2lfY2ZnX3NwYWNlX3NpemUpOwogREVDTEFSRV9QQ0lfRklYVVBfSEVBREVSKFBDSV9WRU5ET1JfSURfQU1ELCAweDEyMDMsIGZhbTEwaF9wY2lfY2ZnX3NwYWNlX3NpemUpOwogREVDTEFSRV9QQ0lfRklYVVBfSEVBREVSKFBDSV9WRU5ET1JfSURfQU1ELCAweDEyMDQsIGZhbTEwaF9wY2lfY2ZnX3NwYWNlX3NpemUpOworCisvKgorICogU0I2MDA6IERpc2FibGUgQkFSMSBvbiBkZXZpY2UgMTQuMCB0byBhdm9pZCBIUEVUIHJlc291cmNlcyBmcm9tCisgKiBjb25mdXNpbmcgdGhlIFBDSSBlbmdpbmU6CisgKi8KK3N0YXRpYyB2b2lkIHNiNjAwX2Rpc2FibGVfaHBldF9iYXIoc3RydWN0IHBjaV9kZXYgKmRldikKK3sKKwl1OCB2YWw7CisKKwkvKgorCSAqIFRoZSBTQjYwMCBhbmQgU0I3MDAgYm90aCBzaGFyZSB0aGUgc2FtZSBkZXZpY2UKKwkgKiBJRCwgYnV0IHRoZSBQTSByZWdpc3RlciAweDU1IGRvZXMgc29tZXRoaW5nIGRpZmZlcmVudAorCSAqIGZvciB0aGUgU0I3MDAsIHNvIG1ha2Ugc3VyZSB3ZSBhcmUgZGVhbGluZyB3aXRoIHRoZQorCSAqIFNCNjAwIGJlZm9yZSB0b3VjaGluZyB0aGUgYml0OgorCSAqLworCisJcGNpX3JlYWRfY29uZmlnX2J5dGUoZGV2LCAweDA4LCAmdmFsKTsKKworCWlmICh2YWwgPCAweDJGKSB7CisJCW91dGIoMHg1NSwgMHhDRDYpOworCQl2YWwgPSBpbmIoMHhDRDcpOworCisJCS8qIFNldCBiaXQgNyBpbiBQTSByZWdpc3RlciAweDU1ICovCisJCW91dGIoMHg1NSwgMHhDRDYpOworCQlvdXRiKHZhbCB8IDB4ODAsIDB4Q0Q3KTsKKwl9Cit9CitERUNMQVJFX1BDSV9GSVhVUF9FQVJMWShQQ0lfVkVORE9SX0lEX0FUSSwgMHg0Mzg1LCBzYjYwMF9kaXNhYmxlX2hwZXRfYmFyKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L3hlbi9lbmxpZ2h0ZW4uYyBiL2FyY2gveDg2L3hlbi9lbmxpZ2h0ZW4uYwppbmRleCAwMDEzYTcyLi5iNjE1MzRjIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni94ZW4vZW5saWdodGVuLmMKKysrIGIvYXJjaC94ODYveGVuL2VubGlnaHRlbi5jCkBAIC04NzEsNiArODcxLDcgQEAKIAkJCS8qIG1ha2Ugc3VyZSB0aGVyZSBhcmUgbm8gc3RyYXkgbWFwcGluZ3Mgb2YKIAkJCSAgIHRoaXMgcGFnZSAqLwogCQkJa21hcF9mbHVzaF91bnVzZWQoKTsKKwkJCXZtX3VubWFwX2FsaWFzZXMoKTsKIAl9CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L3hlbi9pcnEuYyBiL2FyY2gveDg2L3hlbi9pcnEuYwppbmRleCAyOGI4NWFiLi5iYjA0MjYwIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni94ZW4vaXJxLmMKKysrIGIvYXJjaC94ODYveGVuL2lycS5jCkBAIC0yMSw3ICsyMSw2IEBACiAKIHN0YXRpYyB2b2lkIF9faW5pdCBfX3hlbl9pbml0X0lSUSh2b2lkKQogewotI2lmZGVmIENPTkZJR19YODZfNjQKIAlpbnQgaTsKIAogCS8qIENyZWF0ZSBpZGVudGl0eSB2ZWN0b3ItPmlycSBtYXAgKi8KQEAgLTMxLDcgKzMwLDYgQEAKIAkJZm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkKIAkJCXBlcl9jcHUodmVjdG9yX2lycSwgY3B1KVtpXSA9IGk7CiAJfQotI2VuZGlmCS8qIENPTkZJR19YODZfNjQgKi8KIAogCXhlbl9pbml0X0lSUSgpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYveGVuL21tdS5jIGIvYXJjaC94ODYveGVuL21tdS5jCmluZGV4IGFlMTczZjYuLmQ0ZDUyZjUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L3hlbi9tbXUuYworKysgYi9hcmNoL3g4Ni94ZW4vbW11LmMKQEAgLTg0Niw2ICs4NDYsNyBAQAogCQkvKiByZS1lbmFibGUgaW50ZXJydXB0cyBmb3Iga21hcF9mbHVzaF91bnVzZWQgKi8KIAkJeGVuX21jX2lzc3VlKDApOwogCQlrbWFwX2ZsdXNoX3VudXNlZCgpOworCQl2bV91bm1hcF9hbGlhc2VzKCk7CiAJCXhlbl9tY19iYXRjaCgpOwogCX0KIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYveGVuL3NwaW5sb2NrLmMgYi9hcmNoL3g4Ni94ZW4vc3BpbmxvY2suYwppbmRleCBkZDcxZTNhLi41NjAxNTA2IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni94ZW4vc3BpbmxvY2suYworKysgYi9hcmNoL3g4Ni94ZW4vc3BpbmxvY2suYwpAQCAtMjQxLDcgKzI0MSw3IEBACiAJCUFERF9TVEFUUyh0YWtlbl9zbG93X3NwdXJpb3VzLCAheGVuX3Rlc3RfaXJxX3BlbmRpbmcoaXJxKSk7CiAJfSB3aGlsZSAoIXhlbl90ZXN0X2lycV9wZW5kaW5nKGlycSkpOyAvKiBjaGVjayBmb3Igc3B1cmlvdXMgd2FrZXVwcyAqLwogCi0Ja3N0YXRfdGhpc19jcHUuaXJxc1tpcnFdKys7CisJa3N0YXRfaW5jcl9pcnFzX3RoaXNfY3B1KGlycSwgaXJxX3RvX2Rlc2MoaXJxKSk7CiAKIG91dDoKIAlyYXdfbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYveGVuL3RpbWUuYyBiL2FyY2gveDg2L3hlbi90aW1lLmMKaW5kZXggMDA0YmE4Ni4uYzlmN2NkYSAxMDA2NDQKLS0tIGEvYXJjaC94ODYveGVuL3RpbWUuYworKysgYi9hcmNoL3g4Ni94ZW4vdGltZS5jCkBAIC0xOTgsMTcgKzE5OCwxMCBAQAogLyogR2V0IHRoZSBUU0Mgc3BlZWQgZnJvbSBYZW4gKi8KIHVuc2lnbmVkIGxvbmcgeGVuX3RzY19raHoodm9pZCkKIHsKLQl1NjQgeGVuX2toeiA9IDEwMDAwMDBVTEwgPDwgMzI7Ci0JY29uc3Qgc3RydWN0IHB2Y2xvY2tfdmNwdV90aW1lX2luZm8gKmluZm8gPQorCXN0cnVjdCBwdmNsb2NrX3ZjcHVfdGltZV9pbmZvICppbmZvID0KIAkJJkhZUEVSVklTT1Jfc2hhcmVkX2luZm8tPnZjcHVfaW5mb1swXS50aW1lOwogCi0JZG9fZGl2KHhlbl9raHosIGluZm8tPnRzY190b19zeXN0ZW1fbXVsKTsKLQlpZiAoaW5mby0+dHNjX3NoaWZ0IDwgMCkKLQkJeGVuX2toeiA8PD0gLWluZm8tPnRzY19zaGlmdDsKLQllbHNlCi0JCXhlbl9raHogPj49IGluZm8tPnRzY19zaGlmdDsKLQotCXJldHVybiB4ZW5fa2h6OworCXJldHVybiBwdmNsb2NrX3RzY19raHooaW5mbyk7CiB9CiAKIGN5Y2xlX3QgeGVuX2Nsb2Nrc291cmNlX3JlYWQodm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gveHRlbnNhL0tjb25maWcgYi9hcmNoL3h0ZW5zYS9LY29uZmlnCmluZGV4IDAyZTQxN2QuLmEyMTMyNjAgMTAwNjQ0Ci0tLSBhL2FyY2gveHRlbnNhL0tjb25maWcKKysrIGIvYXJjaC94dGVuc2EvS2NvbmZpZwpAQCAtNTUsNiArNTUsNyBAQAogCWRlZmF1bHQgMTAwCiAKIHNvdXJjZSAiaW5pdC9LY29uZmlnIgorc291cmNlICJrZXJuZWwvS2NvbmZpZy5mcmVlemVyIgogCiBtZW51ICJQcm9jZXNzb3IgdHlwZSBhbmQgZmVhdHVyZXMiCiAKZGlmZiAtLWdpdCBhL2FyY2gveHRlbnNhL2tlcm5lbC9zZXR1cC5jIGIvYXJjaC94dGVuc2Eva2VybmVsL3NldHVwLmMKaW5kZXggYTAwMzU5ZS4uOTYwNmQyYiAxMDA2NDQKLS0tIGEvYXJjaC94dGVuc2Eva2VybmVsL3NldHVwLmMKKysrIGIvYXJjaC94dGVuc2Eva2VybmVsL3NldHVwLmMKQEAgLTUzLDExICs1Myw2IEBACiBzdHJ1Y3QgZmRfb3BzICpmZF9vcHM7CiAjZW5kaWYKIAotI2lmIGRlZmluZWQoQ09ORklHX0JMS19ERVZfSURFKSB8fCBkZWZpbmVkKENPTkZJR19CTEtfREVWX0lERV9NT0RVTEUpCi1leHRlcm4gc3RydWN0IGlkZV9vcHMgbm9faWRlX29wczsKLXN0cnVjdCBpZGVfb3BzICppZGVfb3BzOwotI2VuZGlmCi0KIGV4dGVybiBzdHJ1Y3QgcnRjX29wcyBub19ydGNfb3BzOwogc3RydWN0IHJ0Y19vcHMgKnJ0Y19vcHM7CiAKZGlmZiAtLWdpdCBhL2Jsb2NrL2Jsay1jb3JlLmMgYi9ibG9jay9ibGstY29yZS5jCmluZGV4IDJkMDUzYjUuLmMzZGYzMGMgMTAwNjQ0Ci0tLSBhL2Jsb2NrL2Jsay1jb3JlLmMKKysrIGIvYmxvY2svYmxrLWNvcmUuYwpAQCAtMjU3LDcgKzI1Nyw2IEBACiAKIAlxLT5yZXF1ZXN0X2ZuKHEpOwogfQotRVhQT1JUX1NZTUJPTChfX2dlbmVyaWNfdW5wbHVnX2RldmljZSk7CiAKIC8qKgogICogZ2VuZXJpY191bnBsdWdfZGV2aWNlIC0gZmlyZSBhIHJlcXVlc3QgcXVldWUKQEAgLTMyNSw2ICszMjQsOSBAQAogCiBzdGF0aWMgdm9pZCBibGtfaW52b2tlX3JlcXVlc3RfZm4oc3RydWN0IHJlcXVlc3RfcXVldWUgKnEpCiB7CisJaWYgKHVubGlrZWx5KGJsa19xdWV1ZV9zdG9wcGVkKHEpKSkKKwkJcmV0dXJuOworCiAJLyoKIAkgKiBvbmUgbGV2ZWwgb2YgcmVjdXJzaW9uIGlzIG9rIGFuZCBpcyBtdWNoIGZhc3RlciB0aGFuIGtpY2tpbmcKIAkgKiB0aGUgdW5wbHVnIGhhbmRsaW5nCkBAIC0zOTksOCArNDAxLDEzIEBACiBFWFBPUlRfU1lNQk9MKGJsa19zeW5jX3F1ZXVlKTsKIAogLyoqCi0gKiBibGtfcnVuX3F1ZXVlIC0gcnVuIGEgc2luZ2xlIGRldmljZSBxdWV1ZQorICogX19ibGtfcnVuX3F1ZXVlIC0gcnVuIGEgc2luZ2xlIGRldmljZSBxdWV1ZQogICogQHE6CVRoZSBxdWV1ZSB0byBydW4KKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqICAgIFNlZSBAYmxrX3J1bl9xdWV1ZS4gVGhpcyB2YXJpYW50IG11c3QgYmUgY2FsbGVkIHdpdGggdGhlIHF1ZXVlIGxvY2sKKyAqICAgIGhlbGQgYW5kIGludGVycnVwdHMgZGlzYWJsZWQuCisgKgogICovCiB2b2lkIF9fYmxrX3J1bl9xdWV1ZShzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSkKIHsKQEAgLTQxOCw2ICs0MjUsMTIgQEAKIC8qKgogICogYmxrX3J1bl9xdWV1ZSAtIHJ1biBhIHNpbmdsZSBkZXZpY2UgcXVldWUKICAqIEBxOiBUaGUgcXVldWUgdG8gcnVuCisgKgorICogRGVzY3JpcHRpb246CisgKiAgICBJbnZva2UgcmVxdWVzdCBoYW5kbGluZyBvbiB0aGlzIHF1ZXVlLCBpZiBpdCBoYXMgcGVuZGluZyB3b3JrIHRvIGRvLgorICogICAgTWF5IGJlIHVzZWQgdG8gcmVzdGFydCBxdWV1ZWluZyB3aGVuIGEgcmVxdWVzdCBoYXMgY29tcGxldGVkLiBBbHNvCisgKiAgICBTZWUgQGJsa19zdGFydF9xdWV1ZWluZy4KKyAqCiAgKi8KIHZvaWQgYmxrX3J1bl9xdWV1ZShzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSkKIHsKQEAgLTUwMSw2ICs1MTQsNyBAQAogCWluaXRfdGltZXIoJnEtPnVucGx1Z190aW1lcik7CiAJc2V0dXBfdGltZXIoJnEtPnRpbWVvdXQsIGJsa19ycV90aW1lZF9vdXRfdGltZXIsICh1bnNpZ25lZCBsb25nKSBxKTsKIAlJTklUX0xJU1RfSEVBRCgmcS0+dGltZW91dF9saXN0KTsKKwlJTklUX1dPUksoJnEtPnVucGx1Z193b3JrLCBibGtfdW5wbHVnX3dvcmspOwogCiAJa29iamVjdF9pbml0KCZxLT5rb2JqLCAmYmxrX3F1ZXVlX2t0eXBlKTsKIApAQCAtODg0LDcgKzg5OCw4IEBACiAgKgogICogVGhpcyBpcyBiYXNpY2FsbHkgYSBoZWxwZXIgdG8gcmVtb3ZlIHRoZSBuZWVkIHRvIGtub3cgd2hldGhlciBhIHF1ZXVlCiAgKiBpcyBwbHVnZ2VkIG9yIG5vdCBpZiBzb21lb25lIGp1c3Qgd2FudHMgdG8gaW5pdGlhdGUgZGlzcGF0Y2ggb2YgcmVxdWVzdHMKLSAqIGZvciB0aGlzIHF1ZXVlLgorICogZm9yIHRoaXMgcXVldWUuIFNob3VsZCBiZSB1c2VkIHRvIHN0YXJ0IHF1ZXVlaW5nIG9uIGEgZGV2aWNlIG91dHNpZGUKKyAqIG9mIC0+cmVxdWVzdF9mbigpIGNvbnRleHQuIEFsc28gc2VlIEBibGtfcnVuX3F1ZXVlLgogICoKICAqIFRoZSBxdWV1ZSBsb2NrIG11c3QgYmUgaGVsZCB3aXRoIGludGVycnVwdHMgZGlzYWJsZWQuCiAgKi8KQEAgLTEwMDMsOCArMTAxOCw5IEBACiB9CiAKIC8qKgotICogcGFydF9yb3VuZF9zdGF0cygpCS0gUm91bmQgb2ZmIHRoZSBwZXJmb3JtYW5jZSBzdGF0cyBvbiBhIHN0cnVjdAotICogZGlza19zdGF0cy4KKyAqIHBhcnRfcm91bmRfc3RhdHMoKSAtIFJvdW5kIG9mZiB0aGUgcGVyZm9ybWFuY2Ugc3RhdHMgb24gYSBzdHJ1Y3QgZGlza19zdGF0cy4KKyAqIEBjcHU6IGNwdSBudW1iZXIgZm9yIHN0YXRzIGFjY2VzcworICogQHBhcnQ6IHRhcmdldCBwYXJ0aXRpb24KICAqCiAgKiBUaGUgYXZlcmFnZSBJTyBxdWV1ZSBsZW5ndGggYW5kIHV0aWxpc2F0aW9uIHN0YXRpc3RpY3MgYXJlIG1haW50YWluZWQKICAqIGJ5IG9ic2VydmluZyB0aGUgY3VycmVudCBzdGF0ZSBvZiB0aGUgcXVldWUgbGVuZ3RoIGFuZCB0aGUgYW1vdW50IG9mCkBAIC0xMDc1LDggKzEwOTEsMTUgQEAKIAkvKgogCSAqIGluaGVyaXQgRkFJTEZBU1QgZnJvbSBiaW8gKGZvciByZWFkLWFoZWFkLCBhbmQgZXhwbGljaXQgRkFJTEZBU1QpCiAJICovCi0JaWYgKGJpb19yd19haGVhZChiaW8pIHx8IGJpb19mYWlsZmFzdChiaW8pKQotCQlyZXEtPmNtZF9mbGFncyB8PSBSRVFfRkFJTEZBU1Q7CisJaWYgKGJpb19yd19haGVhZChiaW8pKQorCQlyZXEtPmNtZF9mbGFncyB8PSAoUkVRX0ZBSUxGQVNUX0RFViB8IFJFUV9GQUlMRkFTVF9UUkFOU1BPUlQgfAorCQkJCSAgIFJFUV9GQUlMRkFTVF9EUklWRVIpOworCWlmIChiaW9fZmFpbGZhc3RfZGV2KGJpbykpCisJCXJlcS0+Y21kX2ZsYWdzIHw9IFJFUV9GQUlMRkFTVF9ERVY7CisJaWYgKGJpb19mYWlsZmFzdF90cmFuc3BvcnQoYmlvKSkKKwkJcmVxLT5jbWRfZmxhZ3MgfD0gUkVRX0ZBSUxGQVNUX1RSQU5TUE9SVDsKKwlpZiAoYmlvX2ZhaWxmYXN0X2RyaXZlcihiaW8pKQorCQlyZXEtPmNtZF9mbGFncyB8PSBSRVFfRkFJTEZBU1RfRFJJVkVSOwogCiAJLyoKIAkgKiBSRVFfQkFSUklFUiBpbXBsaWVzIG5vIG1lcmdpbmcsIGJ1dCBsZXRzIG1ha2UgaXQgZXhwbGljaXQKZGlmZiAtLWdpdCBhL2Jsb2NrL2Jsay1tZXJnZS5jIGIvYmxvY2svYmxrLW1lcmdlLmMKaW5kZXggOTA4ZDNlMS4uODY4MWNkNiAxMDA2NDQKLS0tIGEvYmxvY2svYmxrLW1lcmdlLmMKKysrIGIvYmxvY2svYmxrLW1lcmdlLmMKQEAgLTc3LDEyICs3NywyMCBAQAogCQkJY29udGludWU7CiAJCX0KIG5ld19zZWdtZW50OgorCQlpZiAobnJfcGh5c19zZWdzID09IDEgJiYgc2VnX3NpemUgPiBycS0+YmlvLT5iaV9zZWdfZnJvbnRfc2l6ZSkKKwkJCXJxLT5iaW8tPmJpX3NlZ19mcm9udF9zaXplID0gc2VnX3NpemU7CisKIAkJbnJfcGh5c19zZWdzKys7CiAJCWJ2cHJ2ID0gYnY7CiAJCXNlZ19zaXplID0gYnYtPmJ2X2xlbjsKIAkJaGlnaHBydiA9IGhpZ2g7CiAJfQogCisJaWYgKG5yX3BoeXNfc2VncyA9PSAxICYmIHNlZ19zaXplID4gcnEtPmJpby0+Ymlfc2VnX2Zyb250X3NpemUpCisJCXJxLT5iaW8tPmJpX3NlZ19mcm9udF9zaXplID0gc2VnX3NpemU7CisJaWYgKHNlZ19zaXplID4gcnEtPmJpb3RhaWwtPmJpX3NlZ19iYWNrX3NpemUpCisJCXJxLT5iaW90YWlsLT5iaV9zZWdfYmFja19zaXplID0gc2VnX3NpemU7CisKIAlycS0+bnJfcGh5c19zZWdtZW50cyA9IG5yX3BoeXNfc2VnczsKIH0KIApAQCAtMTA2LDcgKzExNCw4IEBACiAJaWYgKCF0ZXN0X2JpdChRVUVVRV9GTEFHX0NMVVNURVIsICZxLT5xdWV1ZV9mbGFncykpCiAJCXJldHVybiAwOwogCi0JaWYgKGJpby0+Ymlfc2l6ZSArIG54dC0+Ymlfc2l6ZSA+IHEtPm1heF9zZWdtZW50X3NpemUpCisJaWYgKGJpby0+Ymlfc2VnX2JhY2tfc2l6ZSArIG54dC0+Ymlfc2VnX2Zyb250X3NpemUgPgorCSAgICBxLT5tYXhfc2VnbWVudF9zaXplKQogCQlyZXR1cm4gMDsKIAogCWlmICghYmlvX2hhc19kYXRhKGJpbykpCkBAIC0zMDksNiArMzE4LDggQEAKIAkJCQlzdHJ1Y3QgcmVxdWVzdCAqbmV4dCkKIHsKIAlpbnQgdG90YWxfcGh5c19zZWdtZW50czsKKwl1bnNpZ25lZCBpbnQgc2VnX3NpemUgPQorCQlyZXEtPmJpb3RhaWwtPmJpX3NlZ19iYWNrX3NpemUgKyBuZXh0LT5iaW8tPmJpX3NlZ19mcm9udF9zaXplOwogCiAJLyoKIAkgKiBGaXJzdCBjaGVjayBpZiB0aGUgZWl0aGVyIG9mIHRoZSByZXF1ZXN0cyBhcmUgcmUtcXVldWVkCkBAIC0zMjQsOCArMzM1LDEzIEBACiAJCXJldHVybiAwOwogCiAJdG90YWxfcGh5c19zZWdtZW50cyA9IHJlcS0+bnJfcGh5c19zZWdtZW50cyArIG5leHQtPm5yX3BoeXNfc2VnbWVudHM7Ci0JaWYgKGJsa19waHlzX2NvbnRpZ19zZWdtZW50KHEsIHJlcS0+YmlvdGFpbCwgbmV4dC0+YmlvKSkKKwlpZiAoYmxrX3BoeXNfY29udGlnX3NlZ21lbnQocSwgcmVxLT5iaW90YWlsLCBuZXh0LT5iaW8pKSB7CisJCWlmIChyZXEtPm5yX3BoeXNfc2VnbWVudHMgPT0gMSkKKwkJCXJlcS0+YmlvLT5iaV9zZWdfZnJvbnRfc2l6ZSA9IHNlZ19zaXplOworCQlpZiAobmV4dC0+bnJfcGh5c19zZWdtZW50cyA9PSAxKQorCQkJbmV4dC0+YmlvdGFpbC0+Ymlfc2VnX2JhY2tfc2l6ZSA9IHNlZ19zaXplOwogCQl0b3RhbF9waHlzX3NlZ21lbnRzLS07CisJfQogCiAJaWYgKHRvdGFsX3BoeXNfc2VnbWVudHMgPiBxLT5tYXhfcGh5c19zZWdtZW50cykKIAkJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9ibG9jay9ibGstc2V0dGluZ3MuYyBiL2Jsb2NrL2Jsay1zZXR0aW5ncy5jCmluZGV4IGIyMWRjZGIuLjQxMzkyZmIgMTAwNjQ0Ci0tLSBhL2Jsb2NrL2Jsay1zZXR0aW5ncy5jCisrKyBiL2Jsb2NrL2Jsay1zZXR0aW5ncy5jCkBAIC0xNDEsOCArMTQxLDYgQEAKIAlpZiAocS0+dW5wbHVnX2RlbGF5ID09IDApCiAJCXEtPnVucGx1Z19kZWxheSA9IDE7CiAKLQlJTklUX1dPUksoJnEtPnVucGx1Z193b3JrLCBibGtfdW5wbHVnX3dvcmspOwotCiAJcS0+dW5wbHVnX3RpbWVyLmZ1bmN0aW9uID0gYmxrX3VucGx1Z190aW1lb3V0OwogCXEtPnVucGx1Z190aW1lci5kYXRhID0gKHVuc2lnbmVkIGxvbmcpcTsKIApkaWZmIC0tZ2l0IGEvYmxvY2svYmxrLmggYi9ibG9jay9ibGsuaAppbmRleCBlNWM1Nzk3Li5kMmU0OWFmIDEwMDY0NAotLS0gYS9ibG9jay9ibGsuaAorKysgYi9ibG9jay9ibGsuaApAQCAtMjAsNiArMjAsNyBAQAogdm9pZCBibGtfcnFfdGltZWRfb3V0X3RpbWVyKHVuc2lnbmVkIGxvbmcgZGF0YSk7CiB2b2lkIGJsa19kZWxldGVfdGltZXIoc3RydWN0IHJlcXVlc3QgKik7CiB2b2lkIGJsa19hZGRfdGltZXIoc3RydWN0IHJlcXVlc3QgKik7Cit2b2lkIF9fZ2VuZXJpY191bnBsdWdfZGV2aWNlKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICopOwogCiAvKgogICogSW50ZXJuYWwgYXRvbWljIGZsYWdzIGZvciByZXF1ZXN0IGhhbmRsaW5nCmRpZmYgLS1naXQgYS9ibG9jay9ic2cuYyBiL2Jsb2NrL2JzZy5jCmluZGV4IDU2Y2IzNDMuLjAzNDExMmIgMTAwNjQ0Ci0tLSBhL2Jsb2NrL2JzZy5jCisrKyBiL2Jsb2NrL2JzZy5jCkBAIC0xMDI0LDggKzEwMjQsNyBAQAogCWJjZC0+cmVsZWFzZSA9IHJlbGVhc2U7CiAJa3JlZl9pbml0KCZiY2QtPnJlZik7CiAJZGV2ID0gTUtERVYoYnNnX21ham9yLCBiY2QtPm1pbm9yKTsKLQljbGFzc19kZXYgPSBkZXZpY2VfY3JlYXRlX2RydmRhdGEoYnNnX2NsYXNzLCBwYXJlbnQsIGRldiwgTlVMTCwKLQkJCQkJICAiJXMiLCBkZXZuYW1lKTsKKwljbGFzc19kZXYgPSBkZXZpY2VfY3JlYXRlKGJzZ19jbGFzcywgcGFyZW50LCBkZXYsIE5VTEwsICIlcyIsIGRldm5hbWUpOwogCWlmIChJU19FUlIoY2xhc3NfZGV2KSkgewogCQlyZXQgPSBQVFJfRVJSKGNsYXNzX2Rldik7CiAJCWdvdG8gcHV0X2RldjsKZGlmZiAtLWdpdCBhL2Jsb2NrL2VsZXZhdG9yLmMgYi9ibG9jay9lbGV2YXRvci5jCmluZGV4IDA0NTE4OTIuLjU5MTczYTYgMTAwNjQ0Ci0tLSBhL2Jsb2NrL2VsZXZhdG9yLmMKKysrIGIvYmxvY2svZWxldmF0b3IuYwpAQCAtNjEyLDcgKzYxMiw3IEBACiAJCSAqICAgcHJvY2Vzc2luZy4KIAkJICovCiAJCWJsa19yZW1vdmVfcGx1ZyhxKTsKLQkJcS0+cmVxdWVzdF9mbihxKTsKKwkJYmxrX3N0YXJ0X3F1ZXVlaW5nKHEpOwogCQlicmVhazsKIAogCWNhc2UgRUxFVkFUT1JfSU5TRVJUX1NPUlQ6CkBAIC05NTAsNyArOTUwLDcgQEAKIAkJICAgIGJsa19vcmRlcmVkX2N1cl9zZXEocSkgPT0gUVVFVUVfT1JEU0VRX0RSQUlOICYmCiAJCSAgICBibGtfb3JkZXJlZF9yZXFfc2VxKGZpcnN0X3JxKSA+IFFVRVVFX09SRFNFUV9EUkFJTikgewogCQkJYmxrX29yZGVyZWRfY29tcGxldGVfc2VxKHEsIFFVRVVFX09SRFNFUV9EUkFJTiwgMCk7Ci0JCQlxLT5yZXF1ZXN0X2ZuKHEpOworCQkJYmxrX3N0YXJ0X3F1ZXVlaW5nKHEpOwogCQl9CiAJfQogfQpAQCAtMTEwOSw4ICsxMTA5LDcgQEAKIAllbHZfZHJhaW5fZWxldmF0b3IocSk7CiAKIAl3aGlsZSAocS0+cnEuZWx2cHJpdikgewotCQlibGtfcmVtb3ZlX3BsdWcocSk7Ci0JCXEtPnJlcXVlc3RfZm4ocSk7CisJCWJsa19zdGFydF9xdWV1ZWluZyhxKTsKIAkJc3Bpbl91bmxvY2tfaXJxKHEtPnF1ZXVlX2xvY2spOwogCQltc2xlZXAoMTApOwogCQlzcGluX2xvY2tfaXJxKHEtPnF1ZXVlX2xvY2spOwpAQCAtMTE2NiwxNSArMTE2NSwxMCBAQAogCQkJICBzaXplX3QgY291bnQpCiB7CiAJY2hhciBlbGV2YXRvcl9uYW1lW0VMVl9OQU1FX01BWF07Ci0Jc2l6ZV90IGxlbjsKIAlzdHJ1Y3QgZWxldmF0b3JfdHlwZSAqZTsKIAotCWVsZXZhdG9yX25hbWVbc2l6ZW9mKGVsZXZhdG9yX25hbWUpIC0gMV0gPSAnXDAnOwotCXN0cm5jcHkoZWxldmF0b3JfbmFtZSwgbmFtZSwgc2l6ZW9mKGVsZXZhdG9yX25hbWUpIC0gMSk7Ci0JbGVuID0gc3RybGVuKGVsZXZhdG9yX25hbWUpOwotCi0JaWYgKGxlbiAmJiBlbGV2YXRvcl9uYW1lW2xlbiAtIDFdID09ICdcbicpCi0JCWVsZXZhdG9yX25hbWVbbGVuIC0gMV0gPSAnXDAnOworCXN0cmxjcHkoZWxldmF0b3JfbmFtZSwgbmFtZSwgc2l6ZW9mKGVsZXZhdG9yX25hbWUpKTsKKwlzdHJzdHJpcChlbGV2YXRvcl9uYW1lKTsKIAogCWUgPSBlbGV2YXRvcl9nZXQoZWxldmF0b3JfbmFtZSk7CiAJaWYgKCFlKSB7CmRpZmYgLS1naXQgYS9ibG9jay9nZW5oZC5jIGIvYmxvY2svZ2VuaGQuYwppbmRleCA0Y2QzNDMzLi42NDZlMWQyIDEwMDY0NAotLS0gYS9ibG9jay9nZW5oZC5jCisrKyBiL2Jsb2NrL2dlbmhkLmMKQEAgLTM1OCw3ICszNTgsNiBAQAogLyoqCiAgKiBibGtfYWxsb2NfZGV2dCAtIGFsbG9jYXRlIGEgZGV2X3QgZm9yIGEgcGFydGl0aW9uCiAgKiBAcGFydDogcGFydGl0aW9uIHRvIGFsbG9jYXRlIGRldl90IGZvcgotICogQGdmcF9tYXNrOiBtZW1vcnkgYWxsb2NhdGlvbiBmbGFnCiAgKiBAZGV2dDogb3V0IHBhcmFtZXRlciBmb3IgcmVzdWx0aW5nIGRldl90CiAgKgogICogQWxsb2NhdGUgYSBkZXZfdCBmb3IgYmxvY2sgZGV2aWNlLgpAQCAtNTM1LDcgKzUzNCw3IEBACiAvKioKICAqIGdldF9nZW5kaXNrIC0gZ2V0IHBhcnRpdGlvbmluZyBpbmZvcm1hdGlvbiBmb3IgYSBnaXZlbiBkZXZpY2UKICAqIEBkZXZ0OiBkZXZpY2UgdG8gZ2V0IHBhcnRpdGlvbmluZyBpbmZvcm1hdGlvbiBmb3IKLSAqIEBwYXJ0OiByZXR1cm5lZCBwYXJ0aXRpb24gaW5kZXgKKyAqIEBwYXJ0bm86IHJldHVybmVkIHBhcnRpdGlvbiBpbmRleAogICoKICAqIFRoaXMgZnVuY3Rpb24gZ2V0cyB0aGUgc3RydWN0dXJlIGNvbnRhaW5pbmcgcGFydGl0aW9uaW5nCiAgKiBpbmZvcm1hdGlvbiBmb3IgdGhlIGdpdmVuIGRldmljZSBAZGV2dC4KZGlmZiAtLWdpdCBhL2NyeXB0by9hc3luY190eC9hc3luY190eC5jIGIvY3J5cHRvL2FzeW5jX3R4L2FzeW5jX3R4LmMKaW5kZXggZTgzNjJjMS4uZGNiZjFiZSAxMDA2NDQKLS0tIGEvY3J5cHRvL2FzeW5jX3R4L2FzeW5jX3R4LmMKKysrIGIvY3J5cHRvL2FzeW5jX3R4L2FzeW5jX3R4LmMKQEAgLTExNSwzNCArMTE1LDMyIEBACiAgKgkoc3RhcnQpIGRlcGVuZGVudCBvcGVyYXRpb25zIG9uIHRoZWlyIHRhcmdldCBjaGFubmVsCiAgKiBAdHg6IHRyYW5zYWN0aW9uIHdpdGggZGVwZW5kZW5jaWVzCiAgKi8KLXZvaWQKLWFzeW5jX3R4X3J1bl9kZXBlbmRlbmNpZXMoc3RydWN0IGRtYV9hc3luY190eF9kZXNjcmlwdG9yICp0eCkKK3ZvaWQgYXN5bmNfdHhfcnVuX2RlcGVuZGVuY2llcyhzdHJ1Y3QgZG1hX2FzeW5jX3R4X2Rlc2NyaXB0b3IgKnR4KQogewotCXN0cnVjdCBkbWFfYXN5bmNfdHhfZGVzY3JpcHRvciAqbmV4dCA9IHR4LT5uZXh0OworCXN0cnVjdCBkbWFfYXN5bmNfdHhfZGVzY3JpcHRvciAqZGVwID0gdHgtPm5leHQ7CisJc3RydWN0IGRtYV9hc3luY190eF9kZXNjcmlwdG9yICpkZXBfbmV4dDsKIAlzdHJ1Y3QgZG1hX2NoYW4gKmNoYW47CiAKLQlpZiAoIW5leHQpCisJaWYgKCFkZXApCiAJCXJldHVybjsKIAotCXR4LT5uZXh0ID0gTlVMTDsKLQljaGFuID0gbmV4dC0+Y2hhbjsKKwljaGFuID0gZGVwLT5jaGFuOwogCiAJLyoga2VlcCBzdWJtaXR0aW5nIHVwIHVudGlsIGEgY2hhbm5lbCBzd2l0Y2ggaXMgZGV0ZWN0ZWQKIAkgKiBpbiB0aGF0IGNhc2Ugd2Ugd2lsbCBiZSBjYWxsZWQgYWdhaW4gYXMgYSByZXN1bHQgb2YKIAkgKiBwcm9jZXNzaW5nIHRoZSBpbnRlcnJ1cHQgZnJvbSBhc3luY190eF9jaGFubmVsX3N3aXRjaAogCSAqLwotCXdoaWxlIChuZXh0ICYmIG5leHQtPmNoYW4gPT0gY2hhbikgewotCQlzdHJ1Y3QgZG1hX2FzeW5jX3R4X2Rlc2NyaXB0b3IgKl9uZXh0OworCWZvciAoOyBkZXA7IGRlcCA9IGRlcF9uZXh0KSB7CisJCXNwaW5fbG9ja19iaCgmZGVwLT5sb2NrKTsKKwkJZGVwLT5wYXJlbnQgPSBOVUxMOworCQlkZXBfbmV4dCA9IGRlcC0+bmV4dDsKKwkJaWYgKGRlcF9uZXh0ICYmIGRlcF9uZXh0LT5jaGFuID09IGNoYW4pCisJCQlkZXAtPm5leHQgPSBOVUxMOyAvKiAtPm5leHQgd2lsbCBiZSBzdWJtaXR0ZWQgKi8KKwkJZWxzZQorCQkJZGVwX25leHQgPSBOVUxMOyAvKiBzdWJtaXQgY3VycmVudCBkZXAgYW5kIHRlcm1pbmF0ZSAqLworCQlzcGluX3VubG9ja19iaCgmZGVwLT5sb2NrKTsKIAotCQlzcGluX2xvY2tfYmgoJm5leHQtPmxvY2spOwotCQluZXh0LT5wYXJlbnQgPSBOVUxMOwotCQlfbmV4dCA9IG5leHQtPm5leHQ7Ci0JCWlmIChfbmV4dCAmJiBfbmV4dC0+Y2hhbiA9PSBjaGFuKQotCQkJbmV4dC0+bmV4dCA9IE5VTEw7Ci0JCXNwaW5fdW5sb2NrX2JoKCZuZXh0LT5sb2NrKTsKLQotCQluZXh0LT50eF9zdWJtaXQobmV4dCk7Ci0JCW5leHQgPSBfbmV4dDsKKwkJZGVwLT50eF9zdWJtaXQoZGVwKTsKIAl9CiAKIAljaGFuLT5kZXZpY2UtPmRldmljZV9pc3N1ZV9wZW5kaW5nKGNoYW4pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9LY29uZmlnIGIvZHJpdmVycy9LY29uZmlnCmluZGV4IDU5ZjMzZmEuLmQxOWI2ZjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvS2NvbmZpZworKysgYi9kcml2ZXJzL0tjb25maWcKQEAgLTEwMSw0ICsxMDEsNiBAQAogc291cmNlICJkcml2ZXJzL3Vpby9LY29uZmlnIgogCiBzb3VyY2UgImRyaXZlcnMveGVuL0tjb25maWciCisKK3NvdXJjZSAiZHJpdmVycy9zdGFnaW5nL0tjb25maWciCiBlbmRtZW51CmRpZmYgLS1naXQgYS9kcml2ZXJzL01ha2VmaWxlIGIvZHJpdmVycy9NYWtlZmlsZQppbmRleCAyNzM1YmRlLi40NmM4NjgxIDEwMDY0NAotLS0gYS9kcml2ZXJzL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvTWFrZWZpbGUKQEAgLTk5LDMgKzk5LDQgQEAKIG9iai0kKENPTkZJR19TU0IpCQkrPSBzc2IvCiBvYmotJChDT05GSUdfVklSVElPKQkJKz0gdmlydGlvLwogb2JqLSQoQ09ORklHX1JFR1VMQVRPUikJCSs9IHJlZ3VsYXRvci8KK29iai0kKENPTkZJR19TVEFHSU5HKQkJKz0gc3RhZ2luZy8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9LY29uZmlnIGIvZHJpdmVycy9hY3BpL0tjb25maWcKaW5kZXggMTJjZjVkNC4uZGE0OWIwMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL0tjb25maWcKKysrIGIvZHJpdmVycy9hY3BpL0tjb25maWcKQEAgLTI1OSw3ICsyNTksNyBAQAogCiBjb25maWcgQUNQSV9UT1NISUJBCiAJdHJpc3RhdGUgIlRvc2hpYmEgTGFwdG9wIEV4dHJhcyIKLQlkZXBlbmRzIG9uIFg4NgorCWRlcGVuZHMgb24gWDg2ICYmIElOUFVUCiAJc2VsZWN0IElOUFVUX1BPTExERVYKIAlzZWxlY3QgTkVUCiAJc2VsZWN0IFJGS0lMTApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2JhdHRlcnkuYyBiL2RyaXZlcnMvYWNwaS9iYXR0ZXJ5LmMKaW5kZXggYjFjNzIzZi4uNzBmN2Y2MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2JhdHRlcnkuYworKysgYi9kcml2ZXJzL2FjcGkvYmF0dGVyeS5jCkBAIC00MzEsNyArNDMxLDcgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlIGFsYXJtX2F0dHIgPSB7Ci0JLmF0dHIgPSB7Lm5hbWUgPSAiYWxhcm0iLCAubW9kZSA9IDA2NDQsIC5vd25lciA9IFRISVNfTU9EVUxFfSwKKwkuYXR0ciA9IHsubmFtZSA9ICJhbGFybSIsIC5tb2RlID0gMDY0NH0sCiAJLnNob3cgPSBhY3BpX2JhdHRlcnlfYWxhcm1fc2hvdywKIAkuc3RvcmUgPSBhY3BpX2JhdHRlcnlfYWxhcm1fc3RvcmUsCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2dsdWUuYyBiL2RyaXZlcnMvYWNwaS9nbHVlLmMKaW5kZXggM2M1NzhlZi4uMjQ2NDlhZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2dsdWUuYworKysgYi9kcml2ZXJzL2FjcGkvZ2x1ZS5jCkBAIC0yNjAsMTE1ICsyNjAsMyBAQAogfQogCiBhcmNoX2luaXRjYWxsKGluaXRfYWNwaV9kZXZpY2Vfbm90aWZ5KTsKLQotCi0jaWYgZGVmaW5lZChDT05GSUdfUlRDX0RSVl9DTU9TKSB8fCBkZWZpbmVkKENPTkZJR19SVENfRFJWX0NNT1NfTU9EVUxFKQotCi0jaWZkZWYgQ09ORklHX1BNCi1zdGF0aWMgdTMyIHJ0Y19oYW5kbGVyKHZvaWQgKmNvbnRleHQpCi17Ci0JYWNwaV9jbGVhcl9ldmVudChBQ1BJX0VWRU5UX1JUQyk7Ci0JYWNwaV9kaXNhYmxlX2V2ZW50KEFDUElfRVZFTlRfUlRDLCAwKTsKLQlyZXR1cm4gQUNQSV9JTlRFUlJVUFRfSEFORExFRDsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHJ0Y193YWtlX3NldHVwKHZvaWQpCi17Ci0JYWNwaV9pbnN0YWxsX2ZpeGVkX2V2ZW50X2hhbmRsZXIoQUNQSV9FVkVOVF9SVEMsIHJ0Y19oYW5kbGVyLCBOVUxMKTsKLQkvKgotCSAqIEFmdGVyIHRoZSBSVEMgaGFuZGxlciBpcyBpbnN0YWxsZWQsIHRoZSBGaXhlZF9SVEMgZXZlbnQgc2hvdWxkCi0JICogYmUgZGlzYWJsZWQuIE9ubHkgd2hlbiB0aGUgUlRDIGFsYXJtIGlzIHNldCB3aWxsIGl0IGJlIGVuYWJsZWQuCi0JICovCi0JYWNwaV9jbGVhcl9ldmVudChBQ1BJX0VWRU5UX1JUQyk7Ci0JYWNwaV9kaXNhYmxlX2V2ZW50KEFDUElfRVZFTlRfUlRDLCAwKTsKLX0KLQotc3RhdGljIHZvaWQgcnRjX3dha2Vfb24oc3RydWN0IGRldmljZSAqZGV2KQotewotCWFjcGlfY2xlYXJfZXZlbnQoQUNQSV9FVkVOVF9SVEMpOwotCWFjcGlfZW5hYmxlX2V2ZW50KEFDUElfRVZFTlRfUlRDLCAwKTsKLX0KLQotc3RhdGljIHZvaWQgcnRjX3dha2Vfb2ZmKHN0cnVjdCBkZXZpY2UgKmRldikKLXsKLQlhY3BpX2Rpc2FibGVfZXZlbnQoQUNQSV9FVkVOVF9SVEMsIDApOwotfQotI2Vsc2UKLSNkZWZpbmUgcnRjX3dha2Vfc2V0dXAoKQlkb3t9d2hpbGUoMCkKLSNkZWZpbmUgcnRjX3dha2Vfb24JCU5VTEwKLSNkZWZpbmUgcnRjX3dha2Vfb2ZmCQlOVUxMCi0jZW5kaWYKLQotLyogRXZlcnkgQUNQSSBwbGF0Zm9ybSBoYXMgYSBtYzE0NjgxOCBjb21wYXRpYmxlICJjbW9zIHJ0YyIuICBIZXJlIHdlIGZpbmQKLSAqIGl0cyBkZXZpY2Ugbm9kZSBhbmQgcGFzcyBleHRyYSBjb25maWcgZGF0YS4gIFRoaXMgaGVscHMgaXRzIGRyaXZlciB1c2UKLSAqIGNhcGFiaWxpdGllcyB0aGF0IHRoZSBub3ctb2Jzb2xldGUgbWMxNDY4MTggZGlkbid0IGhhdmUsIGFuZCBpbmZvcm1zIGl0Ci0gKiB0aGF0IHRoaXMgYm9hcmQncyBSVEMgaXMgd2FrZXVwLWNhcGFibGUgKHBlciBBQ1BJIHNwZWMpLgotICovCi0jaW5jbHVkZSA8bGludXgvbWMxNDY4MThydGMuaD4KLQotc3RhdGljIHN0cnVjdCBjbW9zX3J0Y19ib2FyZF9pbmZvIHJ0Y19pbmZvOwotCi0KLS8qIFBOUCBkZXZpY2VzIGFyZSByZWdpc3RlcmVkIGluIGEgc3Vic3lzX2luaXRjYWxsKCk7Ci0gKiBBQ1BJIHNwZWNpZmllcyB0aGUgUE5QIElEcyB0byB1c2UuCi0gKi8KLSNpbmNsdWRlIDxsaW51eC9wbnAuaD4KLQotc3RhdGljIGludCBfX2luaXQgcG5wX21hdGNoKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZGF0YSkKLXsKLQlzdGF0aWMgY29uc3QgY2hhciAqaWRzW10gPSB7ICJQTlAwYjAwIiwgIlBOUDBiMDEiLCAiUE5QMGIwMiIsIH07Ci0Jc3RydWN0IHBucF9kZXYgKnBucCA9IHRvX3BucF9kZXYoZGV2KTsKLQlpbnQgaTsKLQotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGlkcyk7IGkrKykgewotCQlpZiAoY29tcGFyZV9wbnBfaWQocG5wLT5pZCwgaWRzW2ldKSAhPSAwKQotCQkJcmV0dXJuIDE7Ci0JfQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgc3RydWN0IGRldmljZSAqX19pbml0IGdldF9ydGNfZGV2KHZvaWQpCi17Ci0JcmV0dXJuIGJ1c19maW5kX2RldmljZSgmcG5wX2J1c190eXBlLCBOVUxMLCBOVUxMLCBwbnBfbWF0Y2gpOwotfQotCi1zdGF0aWMgaW50IF9faW5pdCBhY3BpX3J0Y19pbml0KHZvaWQpCi17Ci0Jc3RydWN0IGRldmljZSAqZGV2ID0gZ2V0X3J0Y19kZXYoKTsKLQotCWlmIChhY3BpX2Rpc2FibGVkKQotCQlyZXR1cm4gMDsKLQotCWlmIChkZXYpIHsKLQkJcnRjX3dha2Vfc2V0dXAoKTsKLQkJcnRjX2luZm8ud2FrZV9vbiA9IHJ0Y193YWtlX29uOwotCQlydGNfaW5mby53YWtlX29mZiA9IHJ0Y193YWtlX29mZjsKLQotCQkvKiB3b3JrYXJvdW5kIGJ1ZyBpbiBzb21lIEFDUEkgdGFibGVzICovCi0JCWlmIChhY3BpX2dibF9GQURULm1vbnRoX2FsYXJtICYmICFhY3BpX2dibF9GQURULmRheV9hbGFybSkgewotCQkJREJHKCJib2d1cyBGQURUIG1vbnRoX2FsYXJtXG4iKTsKLQkJCWFjcGlfZ2JsX0ZBRFQubW9udGhfYWxhcm0gPSAwOwotCQl9Ci0KLQkJcnRjX2luZm8ucnRjX2RheV9hbGFybSA9IGFjcGlfZ2JsX0ZBRFQuZGF5X2FsYXJtOwotCQlydGNfaW5mby5ydGNfbW9uX2FsYXJtID0gYWNwaV9nYmxfRkFEVC5tb250aF9hbGFybTsKLQkJcnRjX2luZm8ucnRjX2NlbnR1cnkgPSBhY3BpX2dibF9GQURULmNlbnR1cnk7Ci0KLQkJLyogTk9URTogIFM0X1JUQ19XQUtFIGlzIE5PVCBjdXJyZW50bHkgdXNlZnVsIHRvIExpbnV4ICovCi0JCWlmIChhY3BpX2dibF9GQURULmZsYWdzICYgQUNQSV9GQURUX1M0X1JUQ19XQUtFKQotCQkJcHJpbnRrKFBSRUZJWCAiUlRDIGNhbiB3YWtlIGZyb20gUzRcbiIpOwotCi0KLQkJZGV2LT5wbGF0Zm9ybV9kYXRhID0gJnJ0Y19pbmZvOwotCi0JCS8qIFJUQyBhbHdheXMgd2FrZXMgZnJvbSBTMS9TMi9TMywgYW5kIG9mdGVuIFM0L1NURCAqLwotCQlkZXZpY2VfaW5pdF93YWtldXAoZGV2LCAxKTsKLQotCQlwdXRfZGV2aWNlKGRldik7Ci0JfSBlbHNlCi0JCURCRygiUlRDIHVuYXZhaWxhYmxlP1xuIik7Ci0JcmV0dXJuIDA7Ci19Ci1tb2R1bGVfaW5pdChhY3BpX3J0Y19pbml0KTsKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvc2JzLmMgYi9kcml2ZXJzL2FjcGkvc2JzLmMKaW5kZXggMTBhMzY1MS4uN2IwMTFlNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL3Nicy5jCisrKyBiL2RyaXZlcnMvYWNwaS9zYnMuYwpAQCAtNDYzLDcgKzQ2Myw3IEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSBhbGFybV9hdHRyID0gewotCS5hdHRyID0gey5uYW1lID0gImFsYXJtIiwgLm1vZGUgPSAwNjQ0LCAub3duZXIgPSBUSElTX01PRFVMRX0sCisJLmF0dHIgPSB7Lm5hbWUgPSAiYWxhcm0iLCAubW9kZSA9IDA2NDR9LAogCS5zaG93ID0gYWNwaV9iYXR0ZXJ5X2FsYXJtX3Nob3csCiAJLnN0b3JlID0gYWNwaV9iYXR0ZXJ5X2FsYXJtX3N0b3JlLAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9zbGVlcC9wcm9jLmMgYi9kcml2ZXJzL2FjcGkvc2xlZXAvcHJvYy5jCmluZGV4IGJmNWIwNGQuLjYzMWVlMmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9zbGVlcC9wcm9jLmMKKysrIGIvZHJpdmVycy9hY3BpL3NsZWVwL3Byb2MuYwpAQCAtMTIwLDEzICsxMjAsMTMgQEAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZydGNfbG9jaywgZmxhZ3MpOwogCiAJaWYgKCEocnRjX2NvbnRyb2wgJiBSVENfRE1fQklOQVJZKSB8fCBSVENfQUxXQVlTX0JDRCkgewotCQlCQ0RfVE9fQklOKHNlYyk7Ci0JCUJDRF9UT19CSU4obWluKTsKLQkJQkNEX1RPX0JJTihocik7Ci0JCUJDRF9UT19CSU4oZGF5KTsKLQkJQkNEX1RPX0JJTihtbyk7Ci0JCUJDRF9UT19CSU4oeXIpOwotCQlCQ0RfVE9fQklOKGNlbnQpOworCQlzZWMgPSBiY2QyYmluKHNlYyk7CisJCW1pbiA9IGJjZDJiaW4obWluKTsKKwkJaHIgPSBiY2QyYmluKGhyKTsKKwkJZGF5ID0gYmNkMmJpbihkYXkpOworCQltbyA9IGJjZDJiaW4obW8pOworCQl5ciA9IGJjZDJiaW4oeXIpOworCQljZW50ID0gYmNkMmJpbihjZW50KTsKIAl9CiAKIAkvKiB3ZSdyZSB0cnVzdGluZyB0aGUgRkFEVCAoc2VlIGFib3ZlKSAqLwpAQCAtMjA0LDcgKzIwNCw3IEBACiB7CiAJdTMyIHZhbCA9IENNT1NfUkVBRChvZmZzZXQpOwogCWlmICghKHJ0Y19jb250cm9sICYgUlRDX0RNX0JJTkFSWSkgfHwgUlRDX0FMV0FZU19CQ0QpCi0JCUJDRF9UT19CSU4odmFsKTsKKwkJdmFsID0gYmNkMmJpbih2YWwpOwogCXJldHVybiB2YWw7CiB9CiAKQEAgLTIxMiw3ICsyMTIsNyBAQAogc3RhdGljIHZvaWQgY21vc19iY2Rfd3JpdGUodTMyIHZhbCwgaW50IG9mZnNldCwgaW50IHJ0Y19jb250cm9sKQogewogCWlmICghKHJ0Y19jb250cm9sICYgUlRDX0RNX0JJTkFSWSkgfHwgUlRDX0FMV0FZU19CQ0QpCi0JCUJJTl9UT19CQ0QodmFsKTsKKwkJdmFsID0gYmluMmJjZCh2YWwpOwogCUNNT1NfV1JJVEUodmFsLCBvZmZzZXQpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvc3lzdGVtLmMgYi9kcml2ZXJzL2FjcGkvc3lzdGVtLmMKaW5kZXggOTFkZWM0NC4uMjRlODBmZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL3N5c3RlbS5jCisrKyBiL2RyaXZlcnMvYWNwaS9zeXN0ZW0uYwpAQCAtMTE1LDcgKzExNSw2IEBACiAJdGFibGVfYXR0ci0+YXR0ci5yZWFkID0gYWNwaV90YWJsZV9zaG93OwogCXRhYmxlX2F0dHItPmF0dHIuYXR0ci5uYW1lID0gdGFibGVfYXR0ci0+bmFtZTsKIAl0YWJsZV9hdHRyLT5hdHRyLmF0dHIubW9kZSA9IDA0NDQ7Ci0JdGFibGVfYXR0ci0+YXR0ci5hdHRyLm93bmVyID0gVEhJU19NT0RVTEU7CiAKIAlyZXR1cm47CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wYXRhX29mX3BsYXRmb3JtLmMgYi9kcml2ZXJzL2F0YS9wYXRhX29mX3BsYXRmb3JtLmMKaW5kZXggNDA4ZGEzMC4uMWYxOGFkOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvcGF0YV9vZl9wbGF0Zm9ybS5jCisrKyBiL2RyaXZlcnMvYXRhL3BhdGFfb2ZfcGxhdGZvcm0uYwpAQCAtNTIsNyArNTIsNyBAQAogCiAJcmV0ID0gb2ZfaXJxX3RvX3Jlc291cmNlKGRuLCAwLCAmaXJxX3Jlcyk7CiAJaWYgKHJldCA9PSBOT19JUlEpCi0JCWlycV9yZXMuc3RhcnQgPSBpcnFfcmVzLmVuZCA9IC0xOworCQlpcnFfcmVzLnN0YXJ0ID0gaXJxX3Jlcy5lbmQgPSAwOwogCWVsc2UKIAkJaXJxX3Jlcy5mbGFncyA9IDA7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfcGNtY2lhLmMgYi9kcml2ZXJzL2F0YS9wYXRhX3BjbWNpYS5jCmluZGV4IDQxYjQzNjEuLjAyYjU5NmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfcGNtY2lhLmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV9wY21jaWEuYwpAQCAtMTQ4LDYgKzE0OCw2NCBAQAogI2RlZmluZSBDU19DSEVDSyhmbiwgcmV0KSBcCiBkbyB7IGxhc3RfZm4gPSAoZm4pOyBpZiAoKGxhc3RfcmV0ID0gKHJldCkpICE9IDApIGdvdG8gY3NfZmFpbGVkOyB9IHdoaWxlICgwKQogCisKK3N0cnVjdCBwY21jaWFfY29uZmlnX2NoZWNrIHsKKwl1bnNpZ25lZCBsb25nIGN0bF9iYXNlOworCWludCBza2lwX3ZjYzsKKwlpbnQgaXNfa21lOworfTsKKworc3RhdGljIGludCBwY21jaWFfY2hlY2tfb25lX2NvbmZpZyhzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcGRldiwKKwkJCQkgICBjaXN0cGxfY2Z0YWJsZV9lbnRyeV90ICpjZmcsCisJCQkJICAgY2lzdHBsX2NmdGFibGVfZW50cnlfdCAqZGZsdCwKKwkJCQkgICB1bnNpZ25lZCBpbnQgdmNjLAorCQkJCSAgIHZvaWQgKnByaXZfZGF0YSkKK3sKKwlzdHJ1Y3QgcGNtY2lhX2NvbmZpZ19jaGVjayAqc3RrID0gcHJpdl9kYXRhOworCisJLyogQ2hlY2sgZm9yIG1hdGNoaW5nIFZjYywgdW5sZXNzIHdlJ3JlIGRlc3BlcmF0ZSAqLworCWlmICghc3RrLT5za2lwX3ZjYykgeworCQlpZiAoY2ZnLT52Y2MucHJlc2VudCAmICgxIDw8IENJU1RQTF9QT1dFUl9WTk9NKSkgeworCQkJaWYgKHZjYyAhPSBjZmctPnZjYy5wYXJhbVtDSVNUUExfUE9XRVJfVk5PTV0gLyAxMDAwMCkKKwkJCQlyZXR1cm4gLUVOT0RFVjsKKwkJfSBlbHNlIGlmIChkZmx0LT52Y2MucHJlc2VudCAmICgxIDw8IENJU1RQTF9QT1dFUl9WTk9NKSkgeworCQkJaWYgKHZjYyAhPSBkZmx0LT52Y2MucGFyYW1bQ0lTVFBMX1BPV0VSX1ZOT01dIC8gMTAwMDApCisJCQkJcmV0dXJuIC1FTk9ERVY7CisJCX0KKwl9CisKKwlpZiAoY2ZnLT52cHAxLnByZXNlbnQgJiAoMSA8PCBDSVNUUExfUE9XRVJfVk5PTSkpCisJCXBkZXYtPmNvbmYuVnBwID0gY2ZnLT52cHAxLnBhcmFtW0NJU1RQTF9QT1dFUl9WTk9NXSAvIDEwMDAwOworCWVsc2UgaWYgKGRmbHQtPnZwcDEucHJlc2VudCAmICgxIDw8IENJU1RQTF9QT1dFUl9WTk9NKSkKKwkJcGRldi0+Y29uZi5WcHAgPSBkZmx0LT52cHAxLnBhcmFtW0NJU1RQTF9QT1dFUl9WTk9NXSAvIDEwMDAwOworCisJaWYgKChjZmctPmlvLm53aW4gPiAwKSB8fCAoZGZsdC0+aW8ubndpbiA+IDApKSB7CisJCWNpc3RwbF9pb190ICppbyA9IChjZmctPmlvLm53aW4pID8gJmNmZy0+aW8gOiAmZGZsdC0+aW87CisJCXBkZXYtPmlvLkJhc2VQb3J0MSA9IGlvLT53aW5bMF0uYmFzZTsKKwkJcGRldi0+aW8uSU9BZGRyTGluZXMgPSBpby0+ZmxhZ3MgJiBDSVNUUExfSU9fTElORVNfTUFTSzsKKwkJaWYgKCEoaW8tPmZsYWdzICYgQ0lTVFBMX0lPXzE2QklUKSkKKwkJCXBkZXYtPmlvLkF0dHJpYnV0ZXMxID0gSU9fREFUQV9QQVRIX1dJRFRIXzg7CisJCWlmIChpby0+bndpbiA9PSAyKSB7CisJCQlwZGV2LT5pby5OdW1Qb3J0czEgPSA4OworCQkJcGRldi0+aW8uQmFzZVBvcnQyID0gaW8tPndpblsxXS5iYXNlOworCQkJcGRldi0+aW8uTnVtUG9ydHMyID0gKHN0ay0+aXNfa21lKSA/IDIgOiAxOworCQkJaWYgKHBjbWNpYV9yZXF1ZXN0X2lvKHBkZXYsICZwZGV2LT5pbykgIT0gMCkKKwkJCQlyZXR1cm4gLUVOT0RFVjsKKwkJCXN0ay0+Y3RsX2Jhc2UgPSBwZGV2LT5pby5CYXNlUG9ydDI7CisJCX0gZWxzZSBpZiAoKGlvLT5ud2luID09IDEpICYmIChpby0+d2luWzBdLmxlbiA+PSAxNikpIHsKKwkJCXBkZXYtPmlvLk51bVBvcnRzMSA9IGlvLT53aW5bMF0ubGVuOworCQkJcGRldi0+aW8uTnVtUG9ydHMyID0gMDsKKwkJCWlmIChwY21jaWFfcmVxdWVzdF9pbyhwZGV2LCAmcGRldi0+aW8pICE9IDApCisJCQkJcmV0dXJuIC1FTk9ERVY7CisJCQlzdGstPmN0bF9iYXNlID0gcGRldi0+aW8uQmFzZVBvcnQxICsgMHgwZTsKKwkJfSBlbHNlCisJCQlyZXR1cm4gLUVOT0RFVjsKKwkJLyogSWYgd2UndmUgZ290IHRoaXMgZmFyLCB3ZSdyZSBkb25lICovCisJCXJldHVybiAwOworCX0KKwlyZXR1cm4gLUVOT0RFVjsKK30KKwogLyoqCiAgKglwY21jaWFfaW5pdF9vbmUJCS0JYXR0YWNoIGEgUENNQ0lBIGludGVyZmFjZQogICoJQHBkZXY6IHBjbWNpYSBkZXZpY2UKQEAgLTE2MSwxOSArMjE5LDExIEBACiAJc3RydWN0IGF0YV9ob3N0ICpob3N0OwogCXN0cnVjdCBhdGFfcG9ydCAqYXA7CiAJc3RydWN0IGF0YV9wY21jaWFfaW5mbyAqaW5mbzsKLQl0dXBsZV90IHR1cGxlOwotCXN0cnVjdCB7Ci0JCXVuc2lnbmVkIHNob3J0IGJ1ZlsxMjhdOwotCQljaXNwYXJzZV90IHBhcnNlOwotCQljb25maWdfaW5mb190IGNvbmY7Ci0JCWNpc3RwbF9jZnRhYmxlX2VudHJ5X3QgZGZsdDsKLQl9ICpzdGsgPSBOVUxMOwotCWNpc3RwbF9jZnRhYmxlX2VudHJ5X3QgKmNmZzsKLQlpbnQgcGFzcywgbGFzdF9yZXQgPSAwLCBsYXN0X2ZuID0gMCwgaXNfa21lID0gMCwgcmV0ID0gLUVOT01FTSwgcDsKKwlzdHJ1Y3QgcGNtY2lhX2NvbmZpZ19jaGVjayAqc3RrID0gTlVMTDsKKwlpbnQgbGFzdF9yZXQgPSAwLCBsYXN0X2ZuID0gMCwgaXNfa21lID0gMCwgcmV0ID0gLUVOT01FTSwgcDsKIAl1bnNpZ25lZCBsb25nIGlvX2Jhc2UsIGN0bF9iYXNlOwogCXZvaWQgX19pb21lbSAqaW9fYWRkciwgKmN0bF9hZGRyOwogCWludCBuX3BvcnRzID0gMTsKLQogCXN0cnVjdCBhdGFfcG9ydF9vcGVyYXRpb25zICpvcHMgPSAmcGNtY2lhX3BvcnRfb3BzOwogCiAJaW5mbyA9IGt6YWxsb2Moc2l6ZW9mKCppbmZvKSwgR0ZQX0tFUk5FTCk7CkBAIC0xOTMsOTYgKzI0MywyNyBAQAogCXBkZXYtPmNvbmYuQXR0cmlidXRlcyA9IENPTkZfRU5BQkxFX0lSUTsKIAlwZGV2LT5jb25mLkludFR5cGUgPSBJTlRfTUVNT1JZX0FORF9JTzsKIAotCS8qIEFsbG9jYXRlIHJlc291cmUgcHJvYmluZyBzdHJ1Y3R1cmVzICovCi0KLQlzdGsgPSBremFsbG9jKHNpemVvZigqc3RrKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFzdGspCi0JCWdvdG8gb3V0MTsKLQotCWNmZyA9ICZzdGstPnBhcnNlLmNmdGFibGVfZW50cnk7Ci0KLQkvKiBUdXBsZXMgd2UgYXJlIHdhbGtpbmcgKi8KLQl0dXBsZS5UdXBsZURhdGEgPSAoY2lzZGF0YV90ICopJnN0ay0+YnVmOwotCXR1cGxlLlR1cGxlT2Zmc2V0ID0gMDsKLQl0dXBsZS5UdXBsZURhdGFNYXggPSAyNTU7Ci0JdHVwbGUuQXR0cmlidXRlcyA9IDA7Ci0KIAkvKiBTZWUgaWYgd2UgaGF2ZSBhIG1hbnVmYWN0dXJlciBpZGVudGlmaWVyLiBVc2UgaXQgdG8gc2V0IGlzX2ttZSBmb3IKIAkgICB2ZW5kb3IgcXVpcmtzICovCiAJaXNfa21lID0gKChwZGV2LT5tYW5mX2lkID09IE1BTkZJRF9LTUUpICYmCiAJCSAgKChwZGV2LT5jYXJkX2lkID09IFBST0RJRF9LTUVfS1hMQzAwNV9BKSB8fAogCQkgICAocGRldi0+Y2FyZF9pZCA9PSBQUk9ESURfS01FX0tYTEMwMDVfQikpKTsKIAotCS8qIE5vdCBzdXJlIGlmIHRoaXMgaXMgcmlnaHQuLi4gbG9vayB1cCB0aGUgY3VycmVudCBWY2MgKi8KLQlDU19DSEVDSyhHZXRDb25maWd1cmF0aW9uSW5mbywgcGNtY2lhX2dldF9jb25maWd1cmF0aW9uX2luZm8ocGRldiwgJnN0ay0+Y29uZikpOwotLyoJbGluay0+Y29uZi5WY2MgPSBzdGstPmNvbmYuVmNjOyAqLworCS8qIEFsbG9jYXRlIHJlc291cmUgcHJvYmluZyBzdHJ1Y3R1cmVzICovCiAKLQlwYXNzID0gaW9fYmFzZSA9IGN0bF9iYXNlID0gMDsKLQl0dXBsZS5EZXNpcmVkVHVwbGUgPSBDSVNUUExfQ0ZUQUJMRV9FTlRSWTsKLQl0dXBsZS5BdHRyaWJ1dGVzID0gMDsKLQlDU19DSEVDSyhHZXRGaXJzdFR1cGxlLCBwY21jaWFfZ2V0X2ZpcnN0X3R1cGxlKHBkZXYsICZ0dXBsZSkpOworCXN0ayA9IGt6YWxsb2Moc2l6ZW9mKCpzdGspLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXN0aykKKwkJZ290byBvdXQxOworCXN0ay0+aXNfa21lID0gaXNfa21lOworCXN0ay0+c2tpcF92Y2MgPSBpb19iYXNlID0gY3RsX2Jhc2UgPSAwOwogCi0JLyogTm93IG11bmNoIHRoZSByZXNvdXJjZXMgbG9va2luZyBmb3IgYSBzdWl0YWJsZSBzZXQgKi8KLQl3aGlsZSAoMSkgewotCQlpZiAocGNtY2lhX2dldF90dXBsZV9kYXRhKHBkZXYsICZ0dXBsZSkgIT0gMCkKLQkJCWdvdG8gbmV4dF9lbnRyeTsKLQkJaWYgKHBjbWNpYV9wYXJzZV90dXBsZShwZGV2LCAmdHVwbGUsICZzdGstPnBhcnNlKSAhPSAwKQotCQkJZ290byBuZXh0X2VudHJ5OwotCQkvKiBDaGVjayBmb3IgbWF0Y2hpbmcgVmNjLCB1bmxlc3Mgd2UncmUgZGVzcGVyYXRlICovCi0JCWlmICghcGFzcykgewotCQkJaWYgKGNmZy0+dmNjLnByZXNlbnQgJiAoMSA8PCBDSVNUUExfUE9XRVJfVk5PTSkpIHsKLQkJCQlpZiAoc3RrLT5jb25mLlZjYyAhPSBjZmctPnZjYy5wYXJhbVtDSVNUUExfUE9XRVJfVk5PTV0gLyAxMDAwMCkKLQkJCQkJZ290byBuZXh0X2VudHJ5OwotCQkJfSBlbHNlIGlmIChzdGstPmRmbHQudmNjLnByZXNlbnQgJiAoMSA8PCBDSVNUUExfUE9XRVJfVk5PTSkpIHsKLQkJCQlpZiAoc3RrLT5jb25mLlZjYyAhPSBzdGstPmRmbHQudmNjLnBhcmFtW0NJU1RQTF9QT1dFUl9WTk9NXSAvIDEwMDAwKQotCQkJCQlnb3RvIG5leHRfZW50cnk7Ci0JCQl9Ci0JCX0KLQotCQlpZiAoY2ZnLT52cHAxLnByZXNlbnQgJiAoMSA8PCBDSVNUUExfUE9XRVJfVk5PTSkpCi0JCQlwZGV2LT5jb25mLlZwcCA9IGNmZy0+dnBwMS5wYXJhbVtDSVNUUExfUE9XRVJfVk5PTV0gLyAxMDAwMDsKLQkJZWxzZSBpZiAoc3RrLT5kZmx0LnZwcDEucHJlc2VudCAmICgxIDw8IENJU1RQTF9QT1dFUl9WTk9NKSkKLQkJCXBkZXYtPmNvbmYuVnBwID0gc3RrLT5kZmx0LnZwcDEucGFyYW1bQ0lTVFBMX1BPV0VSX1ZOT01dIC8gMTAwMDA7Ci0KLQkJaWYgKChjZmctPmlvLm53aW4gPiAwKSB8fCAoc3RrLT5kZmx0LmlvLm53aW4gPiAwKSkgewotCQkJY2lzdHBsX2lvX3QgKmlvID0gKGNmZy0+aW8ubndpbikgPyAmY2ZnLT5pbyA6ICZzdGstPmRmbHQuaW87Ci0JCQlwZGV2LT5jb25mLkNvbmZpZ0luZGV4ID0gY2ZnLT5pbmRleDsKLQkJCXBkZXYtPmlvLkJhc2VQb3J0MSA9IGlvLT53aW5bMF0uYmFzZTsKLQkJCXBkZXYtPmlvLklPQWRkckxpbmVzID0gaW8tPmZsYWdzICYgQ0lTVFBMX0lPX0xJTkVTX01BU0s7Ci0JCQlpZiAoIShpby0+ZmxhZ3MgJiBDSVNUUExfSU9fMTZCSVQpKQotCQkJCXBkZXYtPmlvLkF0dHJpYnV0ZXMxID0gSU9fREFUQV9QQVRIX1dJRFRIXzg7Ci0JCQlpZiAoaW8tPm53aW4gPT0gMikgewotCQkJCXBkZXYtPmlvLk51bVBvcnRzMSA9IDg7Ci0JCQkJcGRldi0+aW8uQmFzZVBvcnQyID0gaW8tPndpblsxXS5iYXNlOwotCQkJCXBkZXYtPmlvLk51bVBvcnRzMiA9IChpc19rbWUpID8gMiA6IDE7Ci0JCQkJaWYgKHBjbWNpYV9yZXF1ZXN0X2lvKHBkZXYsICZwZGV2LT5pbykgIT0gMCkKLQkJCQkJZ290byBuZXh0X2VudHJ5OwotCQkJCWlvX2Jhc2UgPSBwZGV2LT5pby5CYXNlUG9ydDE7Ci0JCQkJY3RsX2Jhc2UgPSBwZGV2LT5pby5CYXNlUG9ydDI7Ci0JCQl9IGVsc2UgaWYgKChpby0+bndpbiA9PSAxKSAmJiAoaW8tPndpblswXS5sZW4gPj0gMTYpKSB7Ci0JCQkJcGRldi0+aW8uTnVtUG9ydHMxID0gaW8tPndpblswXS5sZW47Ci0JCQkJcGRldi0+aW8uTnVtUG9ydHMyID0gMDsKLQkJCQlpZiAocGNtY2lhX3JlcXVlc3RfaW8ocGRldiwgJnBkZXYtPmlvKSAhPSAwKQotCQkJCQlnb3RvIG5leHRfZW50cnk7Ci0JCQkJaW9fYmFzZSA9IHBkZXYtPmlvLkJhc2VQb3J0MTsKLQkJCQljdGxfYmFzZSA9IHBkZXYtPmlvLkJhc2VQb3J0MSArIDB4MGU7Ci0JCQl9IGVsc2UKLQkJCQlnb3RvIG5leHRfZW50cnk7Ci0JCQkvKiBJZiB3ZSd2ZSBnb3QgdGhpcyBmYXIsIHdlJ3JlIGRvbmUgKi8KLQkJCWJyZWFrOwotCQl9Ci1uZXh0X2VudHJ5OgotCQlpZiAoY2ZnLT5mbGFncyAmIENJU1RQTF9DRlRBQkxFX0RFRkFVTFQpCi0JCQltZW1jcHkoJnN0ay0+ZGZsdCwgY2ZnLCBzaXplb2Yoc3RrLT5kZmx0KSk7Ci0JCWlmIChwYXNzKSB7Ci0JCQlDU19DSEVDSyhHZXROZXh0VHVwbGUsIHBjbWNpYV9nZXRfbmV4dF90dXBsZShwZGV2LCAmdHVwbGUpKTsKLQkJfSBlbHNlIGlmIChwY21jaWFfZ2V0X25leHRfdHVwbGUocGRldiwgJnR1cGxlKSAhPSAwKSB7Ci0JCQlDU19DSEVDSyhHZXRGaXJzdFR1cGxlLCBwY21jaWFfZ2V0X2ZpcnN0X3R1cGxlKHBkZXYsICZ0dXBsZSkpOwotCQkJbWVtc2V0KCZzdGstPmRmbHQsIDAsIHNpemVvZihzdGstPmRmbHQpKTsKLQkJCXBhc3MrKzsKLQkJfQorCWlmIChwY21jaWFfbG9vcF9jb25maWcocGRldiwgcGNtY2lhX2NoZWNrX29uZV9jb25maWcsIHN0aykpIHsKKwkJc3RrLT5za2lwX3ZjYyA9IDE7CisJCWlmIChwY21jaWFfbG9vcF9jb25maWcocGRldiwgcGNtY2lhX2NoZWNrX29uZV9jb25maWcsIHN0aykpCisJCQlnb3RvIGZhaWxlZDsgLyogTm8gc3VpdGFibGUgY29uZmlnIGZvdW5kICovCiAJfQotCisJaW9fYmFzZSA9IHBkZXYtPmlvLkJhc2VQb3J0MTsKKwljdGxfYmFzZSA9IHN0ay0+Y3RsX2Jhc2U7CiAJQ1NfQ0hFQ0soUmVxdWVzdElSUSwgcGNtY2lhX3JlcXVlc3RfaXJxKHBkZXYsICZwZGV2LT5pcnEpKTsKIAlDU19DSEVDSyhSZXF1ZXN0Q29uZmlndXJhdGlvbiwgcGNtY2lhX3JlcXVlc3RfY29uZmlndXJhdGlvbihwZGV2LCAmcGRldi0+Y29uZikpOwogCkBAIC0zODQsNiArMzY1LDcgQEAKIAlQQ01DSUFfREVWSUNFX01BTkZfQ0FSRCgweDAwMzIsIDB4MDcwNCksCiAJUENNQ0lBX0RFVklDRV9NQU5GX0NBUkQoMHgwMDMyLCAweDI5MDQpLAogCVBDTUNJQV9ERVZJQ0VfTUFORl9DQVJEKDB4MDA0NSwgMHgwNDAxKSwJLyogU2FuRGlzayBDRkEgKi8KKwlQQ01DSUFfREVWSUNFX01BTkZfQ0FSRCgweDAwNGYsIDB4MDAwMCksCS8qIEtpbmdzdG9uICovCiAJUENNQ0lBX0RFVklDRV9NQU5GX0NBUkQoMHgwMDk3LCAweDE2MjApLCAJLyogVEkgZW11bGF0ZWQgKi8KIAlQQ01DSUFfREVWSUNFX01BTkZfQ0FSRCgweDAwOTgsIDB4MDAwMCksCS8qIFRvc2hpYmEgKi8KIAlQQ01DSUFfREVWSUNFX01BTkZfQ0FSRCgweDAwYTQsIDB4MDAyZCksCkBAIC00MDQsOSArMzg2LDkgQEAKIAlQQ01DSUFfREVWSUNFX1BST0RfSUQxMigiRVhQICAgIiwgIkNELVJPTSIsIDB4MGE1YzUyZmQsIDB4NjY1MzY1OTEpLAogCVBDTUNJQV9ERVZJQ0VfUFJPRF9JRDEyKCJFWFAgICAiLCAiUG5QSURFIiwgMHgwYTVjNTJmZCwgMHgwYzY5NDcyOCksCiAJUENNQ0lBX0RFVklDRV9QUk9EX0lEMTIoIkZSRUVDT00iLCAiUENDQVJELUlERSIsIDB4NTcxNGNiZjcsIDB4NDhlMGFiOGUpLAotCVBDTUNJQV9ERVZJQ0VfUFJPRF9JRDEyKCJIeXBlcnN0b25lIiwgIk1vZGVsMSIsIDB4M2Q1YjllZjUsIDB4Y2E2YWI0MjApLAogCVBDTUNJQV9ERVZJQ0VfUFJPRF9JRDEyKCJISVRBQ0hJIiwgIkZMQVNIIiwgMHhmNGY0Mzk0OSwgMHg5ZWI4NmFhZSksCiAJUENNQ0lBX0RFVklDRV9QUk9EX0lEMTIoIkhJVEFDSEkiLCAibWljcm9kcml2ZSIsIDB4ZjRmNDM5NDksIDB4YTZkNzYxNzgpLAorCVBDTUNJQV9ERVZJQ0VfUFJPRF9JRDEyKCJIeXBlcnN0b25lIiwgIk1vZGVsMSIsIDB4M2Q1YjllZjUsIDB4Y2E2YWI0MjApLAogCVBDTUNJQV9ERVZJQ0VfUFJPRF9JRDEyKCJJQk0iLCAibWljcm9kcml2ZSIsIDB4YjU2OWE2ZTUsIDB4YTZkNzYxNzgpLAogCVBDTUNJQV9ERVZJQ0VfUFJPRF9JRDEyKCJJQk0iLCAiSUJNMTdKU1NGUDIwIiwgMHhiNTY5YTZlNSwgMHhmMjUwODc1MyksCiAJUENNQ0lBX0RFVklDRV9QUk9EX0lEMTIoIktJTkdTVE9OIiwgIkNGOEdCIiwgMHgyZTZkMTgyOSwgMHhhY2JlNjgyZSksCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jhc2UvS2NvbmZpZyBiL2RyaXZlcnMvYmFzZS9LY29uZmlnCmluZGV4IDYzMThmNmIuLmQ4ZThjNDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmFzZS9LY29uZmlnCisrKyBiL2RyaXZlcnMvYmFzZS9LY29uZmlnCkBAIC01NCw3ICs1NCw3IEBACiAJICBzdWNoIGZpcm13YXJlLCBhbmQgZG8gbm90IHdpc2ggdG8gdXNlIGFuIGluaXRyZC4KIAogCSAgVGhpcyBzaW5nbGUgb3B0aW9uIGNvbnRyb2xzIHRoZSBpbmNsdXNpb24gb2YgZmlybXdhcmUgZm9yCi0JICBldmVyeSBkcml2ZXIgd2hpY2ggdXNlZXMgcmVxdWVzdF9maXJtYXJlKCkgYW5kIHNoaXBzIGl0cworCSAgZXZlcnkgZHJpdmVyIHdoaWNoIHVzZXMgcmVxdWVzdF9maXJtYXJlKCkgYW5kIHNoaXBzIGl0cwogCSAgZmlybXdhcmUgaW4gdGhlIGtlcm5lbCBzb3VyY2UgdHJlZSwgdG8gYXZvaWQgYSBwcm9saWZlcmF0aW9uCiAJICBvZiAnSW5jbHVkZSBmaXJtd2FyZSBmb3IgeHh4IGRldmljZScgb3B0aW9ucy4KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9iYXNlL2J1cy5jIGIvZHJpdmVycy9iYXNlL2J1cy5jCmluZGV4IGVmNTIyYWUuLjVhZWUxYzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmFzZS9idXMuYworKysgYi9kcml2ZXJzL2Jhc2UvYnVzLmMKQEAgLTMzMyw5ICszMzMsNyBAQAogewogCWNvbnN0IGNoYXIgKm5hbWUgPSBkYXRhOwogCi0JaWYgKHN0cmNtcChuYW1lLCBkZXYtPmJ1c19pZCkgPT0gMCkKLQkJcmV0dXJuIDE7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIHN5c2ZzX3N0cmVxKG5hbWUsIGRldi0+YnVzX2lkKTsKIH0KIAogLyoqCkBAIC05ODIsNiArOTgwLDU2IEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTChidXNfZ2V0X2RldmljZV9rbGlzdCk7CiAKKy8qCisgKiBZZXMsIHRoaXMgZm9yY2FibHkgYnJlYWtzIHRoZSBrbGlzdCBhYnN0cmFjdGlvbiB0ZW1wb3JhcmlseS4gIEl0CisgKiBqdXN0IHdhbnRzIHRvIHNvcnQgdGhlIGtsaXN0LCBub3QgY2hhbmdlIHJlZmVyZW5jZSBjb3VudHMgYW5kCisgKiB0YWtlL2Ryb3AgbG9ja3MgcmFwaWRseSBpbiB0aGUgcHJvY2Vzcy4gIEl0IGRvZXMgYWxsIHRoaXMgd2hpbGUKKyAqIGhvbGRpbmcgdGhlIGxvY2sgZm9yIHRoZSBsaXN0LCBzbyBvYmplY3RzIGNhbid0IG90aGVyd2lzZSBiZQorICogYWRkZWQvcmVtb3ZlZCB3aGlsZSB3ZSdyZSBzd2l6emxpbmcuCisgKi8KK3N0YXRpYyB2b2lkIGRldmljZV9pbnNlcnRpb25fc29ydF9rbGlzdChzdHJ1Y3QgZGV2aWNlICphLCBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0LAorCQkJCQlpbnQgKCpjb21wYXJlKShjb25zdCBzdHJ1Y3QgZGV2aWNlICphLAorCQkJCQkJCWNvbnN0IHN0cnVjdCBkZXZpY2UgKmIpKQoreworCXN0cnVjdCBsaXN0X2hlYWQgKnBvczsKKwlzdHJ1Y3Qga2xpc3Rfbm9kZSAqbjsKKwlzdHJ1Y3QgZGV2aWNlICpiOworCisJbGlzdF9mb3JfZWFjaChwb3MsIGxpc3QpIHsKKwkJbiA9IGNvbnRhaW5lcl9vZihwb3MsIHN0cnVjdCBrbGlzdF9ub2RlLCBuX25vZGUpOworCQliID0gY29udGFpbmVyX29mKG4sIHN0cnVjdCBkZXZpY2UsIGtub2RlX2J1cyk7CisJCWlmIChjb21wYXJlKGEsIGIpIDw9IDApIHsKKwkJCWxpc3RfbW92ZV90YWlsKCZhLT5rbm9kZV9idXMubl9ub2RlLAorCQkJCSAgICAgICAmYi0+a25vZGVfYnVzLm5fbm9kZSk7CisJCQlyZXR1cm47CisJCX0KKwl9CisJbGlzdF9tb3ZlX3RhaWwoJmEtPmtub2RlX2J1cy5uX25vZGUsIGxpc3QpOworfQorCit2b2lkIGJ1c19zb3J0X2JyZWFkdGhmaXJzdChzdHJ1Y3QgYnVzX3R5cGUgKmJ1cywKKwkJCSAgIGludCAoKmNvbXBhcmUpKGNvbnN0IHN0cnVjdCBkZXZpY2UgKmEsCisJCQkJCSAgY29uc3Qgc3RydWN0IGRldmljZSAqYikpCit7CisJTElTVF9IRUFEKHNvcnRlZF9kZXZpY2VzKTsKKwlzdHJ1Y3QgbGlzdF9oZWFkICpwb3MsICp0bXA7CisJc3RydWN0IGtsaXN0X25vZGUgKm47CisJc3RydWN0IGRldmljZSAqZGV2OworCXN0cnVjdCBrbGlzdCAqZGV2aWNlX2tsaXN0OworCisJZGV2aWNlX2tsaXN0ID0gYnVzX2dldF9kZXZpY2Vfa2xpc3QoYnVzKTsKKworCXNwaW5fbG9jaygmZGV2aWNlX2tsaXN0LT5rX2xvY2spOworCWxpc3RfZm9yX2VhY2hfc2FmZShwb3MsIHRtcCwgJmRldmljZV9rbGlzdC0+a19saXN0KSB7CisJCW4gPSBjb250YWluZXJfb2YocG9zLCBzdHJ1Y3Qga2xpc3Rfbm9kZSwgbl9ub2RlKTsKKwkJZGV2ID0gY29udGFpbmVyX29mKG4sIHN0cnVjdCBkZXZpY2UsIGtub2RlX2J1cyk7CisJCWRldmljZV9pbnNlcnRpb25fc29ydF9rbGlzdChkZXYsICZzb3J0ZWRfZGV2aWNlcywgY29tcGFyZSk7CisJfQorCWxpc3Rfc3BsaWNlKCZzb3J0ZWRfZGV2aWNlcywgJmRldmljZV9rbGlzdC0+a19saXN0KTsKKwlzcGluX3VubG9jaygmZGV2aWNlX2tsaXN0LT5rX2xvY2spOworfQorRVhQT1JUX1NZTUJPTF9HUEwoYnVzX3NvcnRfYnJlYWR0aGZpcnN0KTsKKwogaW50IF9faW5pdCBidXNlc19pbml0KHZvaWQpCiB7CiAJYnVzX2tzZXQgPSBrc2V0X2NyZWF0ZV9hbmRfYWRkKCJidXMiLCAmYnVzX3VldmVudF9vcHMsIE5VTEwpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9iYXNlL2NvcmUuYyBiL2RyaXZlcnMvYmFzZS9jb3JlLmMKaW5kZXggYjk4Y2IxNC4uOGMyY2MyNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9iYXNlL2NvcmUuYworKysgYi9kcml2ZXJzL2Jhc2UvY29yZS5jCkBAIC01MjMsMTEgKzUyMywxNiBAQAogICogZGV2aWNlX2luaXRpYWxpemUgLSBpbml0IGRldmljZSBzdHJ1Y3R1cmUuCiAgKiBAZGV2OiBkZXZpY2UuCiAgKgotICogVGhpcyBwcmVwYXJlcyB0aGUgZGV2aWNlIGZvciB1c2UgYnkgb3RoZXIgbGF5ZXJzLAotICogaW5jbHVkaW5nIGFkZGluZyBpdCB0byB0aGUgZGV2aWNlIGhpZXJhcmNoeS4KKyAqIFRoaXMgcHJlcGFyZXMgdGhlIGRldmljZSBmb3IgdXNlIGJ5IG90aGVyIGxheWVycyBieSBpbml0aWFsaXppbmcKKyAqIGl0cyBmaWVsZHMuCiAgKiBJdCBpcyB0aGUgZmlyc3QgaGFsZiBvZiBkZXZpY2VfcmVnaXN0ZXIoKSwgaWYgY2FsbGVkIGJ5Ci0gKiB0aGF0LCB0aG91Z2ggaXQgY2FuIGFsc28gYmUgY2FsbGVkIHNlcGFyYXRlbHksIHNvIG9uZQotICogbWF5IHVzZSBAZGV2J3MgZmllbGRzIChlLmcuIHRoZSByZWZjb3VudCkuCisgKiB0aGF0IGZ1bmN0aW9uLCB0aG91Z2ggaXQgY2FuIGFsc28gYmUgY2FsbGVkIHNlcGFyYXRlbHksIHNvIG9uZQorICogbWF5IHVzZSBAZGV2J3MgZmllbGRzLiBJbiBwYXJ0aWN1bGFyLCBnZXRfZGV2aWNlKCkvcHV0X2RldmljZSgpCisgKiBtYXkgYmUgdXNlZCBmb3IgcmVmZXJlbmNlIGNvdW50aW5nIG9mIEBkZXYgYWZ0ZXIgY2FsbGluZyB0aGlzCisgKiBmdW5jdGlvbi4KKyAqCisgKiBOT1RFOiBVc2UgcHV0X2RldmljZSgpIHRvIGdpdmUgdXAgeW91ciByZWZlcmVuY2UgaW5zdGVhZCBvZiBmcmVlaW5nCisgKiBAZGV2IGRpcmVjdGx5IG9uY2UgeW91IGhhdmUgY2FsbGVkIHRoaXMgZnVuY3Rpb24uCiAgKi8KIHZvaWQgZGV2aWNlX2luaXRpYWxpemUoc3RydWN0IGRldmljZSAqZGV2KQogewpAQCAtODM1LDkgKzg0MCwxMyBAQAogICogVGhpcyBpcyBwYXJ0IDIgb2YgZGV2aWNlX3JlZ2lzdGVyKCksIHRob3VnaCBtYXkgYmUgY2FsbGVkCiAgKiBzZXBhcmF0ZWx5IF9pZmZfIGRldmljZV9pbml0aWFsaXplKCkgaGFzIGJlZW4gY2FsbGVkIHNlcGFyYXRlbHkuCiAgKgotICogVGhpcyBhZGRzIGl0IHRvIHRoZSBrb2JqZWN0IGhpZXJhcmNoeSB2aWEga29iamVjdF9hZGQoKSwgYWRkcyBpdAorICogVGhpcyBhZGRzIEBkZXYgdG8gdGhlIGtvYmplY3QgaGllcmFyY2h5IHZpYSBrb2JqZWN0X2FkZCgpLCBhZGRzIGl0CiAgKiB0byB0aGUgZ2xvYmFsIGFuZCBzaWJsaW5nIGxpc3RzIGZvciB0aGUgZGV2aWNlLCB0aGVuCiAgKiBhZGRzIGl0IHRvIHRoZSBvdGhlciByZWxldmFudCBzdWJzeXN0ZW1zIG9mIHRoZSBkcml2ZXIgbW9kZWwuCisgKgorICogTk9URTogX05ldmVyXyBkaXJlY3RseSBmcmVlIEBkZXYgYWZ0ZXIgY2FsbGluZyB0aGlzIGZ1bmN0aW9uLCBldmVuCisgKiBpZiBpdCByZXR1cm5lZCBhbiBlcnJvciEgQWx3YXlzIHVzZSBwdXRfZGV2aWNlKCkgdG8gZ2l2ZSB1cCB5b3VyCisgKiByZWZlcmVuY2UgaW5zdGVhZC4KICAqLwogaW50IGRldmljZV9hZGQoc3RydWN0IGRldmljZSAqZGV2KQogewpAQCAtOTY1LDYgKzk3NCwxMCBAQAogICogSS5lLiB5b3Ugc2hvdWxkIG9ubHkgY2FsbCB0aGUgdHdvIGhlbHBlcnMgc2VwYXJhdGVseSBpZgogICogaGF2ZSBhIGNsZWFybHkgZGVmaW5lZCBuZWVkIHRvIHVzZSBhbmQgcmVmY291bnQgdGhlIGRldmljZQogICogYmVmb3JlIGl0IGlzIGFkZGVkIHRvIHRoZSBoaWVyYXJjaHkuCisgKgorICogTk9URTogX05ldmVyXyBkaXJlY3RseSBmcmVlIEBkZXYgYWZ0ZXIgY2FsbGluZyB0aGlzIGZ1bmN0aW9uLCBldmVuCisgKiBpZiBpdCByZXR1cm5lZCBhbiBlcnJvciEgQWx3YXlzIHVzZSBwdXRfZGV2aWNlKCkgdG8gZ2l2ZSB1cCB0aGUKKyAqIHJlZmVyZW5jZSBpbml0aWFsaXplZCBpbiB0aGlzIGZ1bmN0aW9uIGluc3RlYWQuCiAgKi8KIGludCBkZXZpY2VfcmVnaXN0ZXIoc3RydWN0IGRldmljZSAqZGV2KQogewpAQCAtMTI0Myw3ICsxMjU2LDcgQEAKIAlyZXR1cm4gZGV2OwogCiBlcnJvcjoKLQlrZnJlZShkZXYpOworCXB1dF9kZXZpY2UoZGV2KTsKIAlyZXR1cm4gRVJSX1BUUihyZXR2YWwpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoZGV2aWNlX2NyZWF0ZV92YXJncyk7CkBAIC0xMzE0LDYgKzEzMjcsMTEgQEAKICAqIGRldmljZV9yZW5hbWUgLSByZW5hbWVzIGEgZGV2aWNlCiAgKiBAZGV2OiB0aGUgcG9pbnRlciB0byB0aGUgc3RydWN0IGRldmljZSB0byBiZSByZW5hbWVkCiAgKiBAbmV3X25hbWU6IHRoZSBuZXcgbmFtZSBvZiB0aGUgZGV2aWNlCisgKgorICogSXQgaXMgdGhlIHJlc3BvbnNpYmlsaXR5IG9mIHRoZSBjYWxsZXIgdG8gcHJvdmlkZSBtdXR1YWwKKyAqIGV4Y2x1c2lvbiBiZXR3ZWVuIHR3byBkaWZmZXJlbnQgY2FsbHMgb2YgZGV2aWNlX3JlbmFtZQorICogb24gdGhlIHNhbWUgZGV2aWNlIHRvIGVuc3VyZSB0aGF0IG5ld19uYW1lIGlzIHZhbGlkIGFuZAorICogd29uJ3QgY29uZmxpY3Qgd2l0aCBvdGhlciBkZXZpY2VzLgogICovCiBpbnQgZGV2aWNlX3JlbmFtZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGNoYXIgKm5ld19uYW1lKQogewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9iYXNlL2RkLmMgYi9kcml2ZXJzL2Jhc2UvZGQuYwppbmRleCAzYWM0NDNiLi4yMGZlYmMwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jhc2UvZGQuYworKysgYi9kcml2ZXJzL2Jhc2UvZGQuYwpAQCAtMjU3LDYgKzI1Nyw5IEBACiAJICogaXMgYW4gZXJyb3IuCiAJICovCiAKKwlpZiAoZHJ2LT5idXMtPm1hdGNoICYmICFkcnYtPmJ1cy0+bWF0Y2goZGV2LCBkcnYpKQorCQlyZXR1cm4gMDsKKwogCWlmIChkZXYtPnBhcmVudCkJLyogTmVlZGVkIGZvciBVU0IgKi8KIAkJZG93bigmZGV2LT5wYXJlbnQtPnNlbSk7CiAJZG93bigmZGV2LT5zZW0pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9iYXNlL2Zpcm13YXJlX2NsYXNzLmMgYi9kcml2ZXJzL2Jhc2UvZmlybXdhcmVfY2xhc3MuYwppbmRleCBjOWM5MmIwLi5iN2U1NzEwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jhc2UvZmlybXdhcmVfY2xhc3MuYworKysgYi9kcml2ZXJzL2Jhc2UvZmlybXdhcmVfY2xhc3MuYwpAQCAtMTY0LDggKzE2NCw3IEBACiAJCX0KIAkJLyogZmFsbHRocm91Z2ggKi8KIAlkZWZhdWx0OgotCQlwcmludGsoS0VSTl9FUlIgIiVzOiB1bmV4cGVjdGVkIHZhbHVlICglZClcbiIsIF9fZnVuY19fLAotCQkgICAgICAgbG9hZGluZyk7CisJCWRldl9lcnIoZGV2LCAiJXM6IHVuZXhwZWN0ZWQgdmFsdWUgKCVkKVxuIiwgX19mdW5jX18sIGxvYWRpbmcpOwogCQkvKiBmYWxsdGhyb3VnaCAqLwogCWNhc2UgLTE6CiAJCWZ3X2xvYWRfYWJvcnQoZndfcHJpdik7CkBAIC0zMDksNyArMzA4LDcgQEAKIAkqZGV2X3AgPSBOVUxMOwogCiAJaWYgKCFmd19wcml2IHx8ICFmX2RldikgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBrbWFsbG9jIGZhaWxlZFxuIiwgX19mdW5jX18pOworCQlkZXZfZXJyKGRldmljZSwgIiVzOiBrbWFsbG9jIGZhaWxlZFxuIiwgX19mdW5jX18pOwogCQlyZXR2YWwgPSAtRU5PTUVNOwogCQlnb3RvIGVycm9yX2tmcmVlOwogCX0KQEAgLTMyOSw4ICszMjgsNyBAQAogCWZfZGV2LT51ZXZlbnRfc3VwcHJlc3MgPSAxOwogCXJldHZhbCA9IGRldmljZV9yZWdpc3RlcihmX2Rldik7CiAJaWYgKHJldHZhbCkgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBkZXZpY2VfcmVnaXN0ZXIgZmFpbGVkXG4iLAotCQkgICAgICAgX19mdW5jX18pOworCQlkZXZfZXJyKGRldmljZSwgIiVzOiBkZXZpY2VfcmVnaXN0ZXIgZmFpbGVkXG4iLCBfX2Z1bmNfXyk7CiAJCWdvdG8gZXJyb3Jfa2ZyZWU7CiAJfQogCSpkZXZfcCA9IGZfZGV2OwpAQCAtMzYzLDE1ICszNjEsMTMgQEAKIAlmd19wcml2LT5mdyA9IGZ3OwogCXJldHZhbCA9IHN5c2ZzX2NyZWF0ZV9iaW5fZmlsZSgmZl9kZXYtPmtvYmosICZmd19wcml2LT5hdHRyX2RhdGEpOwogCWlmIChyZXR2YWwpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogc3lzZnNfY3JlYXRlX2Jpbl9maWxlIGZhaWxlZFxuIiwKLQkJICAgICAgIF9fZnVuY19fKTsKKwkJZGV2X2VycihkZXZpY2UsICIlczogc3lzZnNfY3JlYXRlX2Jpbl9maWxlIGZhaWxlZFxuIiwgX19mdW5jX18pOwogCQlnb3RvIGVycm9yX3VucmVnOwogCX0KIAogCXJldHZhbCA9IGRldmljZV9jcmVhdGVfZmlsZShmX2RldiwgJmRldl9hdHRyX2xvYWRpbmcpOwogCWlmIChyZXR2YWwpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogZGV2aWNlX2NyZWF0ZV9maWxlIGZhaWxlZFxuIiwKLQkJICAgICAgIF9fZnVuY19fKTsKKwkJZGV2X2VycihkZXZpY2UsICIlczogZGV2aWNlX2NyZWF0ZV9maWxlIGZhaWxlZFxuIiwgX19mdW5jX18pOwogCQlnb3RvIGVycm9yX3VucmVnOwogCX0KIApAQCAtNDAxLDggKzM5Nyw4IEBACiAKIAkqZmlybXdhcmVfcCA9IGZpcm13YXJlID0ga3phbGxvYyhzaXplb2YoKmZpcm13YXJlKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFmaXJtd2FyZSkgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBrbWFsbG9jKHN0cnVjdCBmaXJtd2FyZSkgZmFpbGVkXG4iLAotCQkgICAgICAgX19mdW5jX18pOworCQlkZXZfZXJyKGRldmljZSwgIiVzOiBrbWFsbG9jKHN0cnVjdCBmaXJtd2FyZSkgZmFpbGVkXG4iLAorCQkJX19mdW5jX18pOwogCQlyZXR2YWwgPSAtRU5PTUVNOwogCQlnb3RvIG91dDsKIAl9CkBAIC00MTEsMTUgKzQwNywxNSBAQAogCSAgICAgYnVpbHRpbisrKSB7CiAJCWlmIChzdHJjbXAobmFtZSwgYnVpbHRpbi0+bmFtZSkpCiAJCQljb250aW51ZTsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiZmlybXdhcmU6IHVzaW5nIGJ1aWx0LWluIGZpcm13YXJlICVzXG4iLAotCQkgICAgICAgbmFtZSk7CisJCWRldl9pbmZvKGRldmljZSwgImZpcm13YXJlOiB1c2luZyBidWlsdC1pbiBmaXJtd2FyZSAlc1xuIiwKKwkJCSBuYW1lKTsKIAkJZmlybXdhcmUtPnNpemUgPSBidWlsdGluLT5zaXplOwogCQlmaXJtd2FyZS0+ZGF0YSA9IGJ1aWx0aW4tPmRhdGE7CiAJCXJldHVybiAwOwogCX0KIAogCWlmICh1ZXZlbnQpCi0JCXByaW50ayhLRVJOX0lORk8gImZpcm13YXJlOiByZXF1ZXN0aW5nICVzXG4iLCBuYW1lKTsKKwkJZGV2X2luZm8oZGV2aWNlLCAiZmlybXdhcmU6IHJlcXVlc3RpbmcgJXNcbiIsIG5hbWUpOwogCiAJcmV0dmFsID0gZndfc2V0dXBfZGV2aWNlKGZpcm13YXJlLCAmZl9kZXYsIG5hbWUsIGRldmljZSwgdWV2ZW50KTsKIAlpZiAocmV0dmFsKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9iYXNlL21lbW9yeS5jIGIvZHJpdmVycy9iYXNlL21lbW9yeS5jCmluZGV4IGFmMGQxNzUuLjUyNjBlOWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmFzZS9tZW1vcnkuYworKysgYi9kcml2ZXJzL2Jhc2UvbWVtb3J5LmMKQEAgLTIxLDYgKzIxLDggQEAKICNpbmNsdWRlIDxsaW51eC9tZW1vcnlfaG90cGx1Zy5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KKyNpbmNsdWRlIDxsaW51eC9zdGF0Lmg+CisKICNpbmNsdWRlIDxhc20vYXRvbWljLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KIApAQCAtMzI1LDcgKzMyNyw3IEBACiAKIAlyZXR1cm4gY291bnQ7CiB9Ci1zdGF0aWMgQ0xBU1NfQVRUUihwcm9iZSwgMDcwMCwgTlVMTCwgbWVtb3J5X3Byb2JlX3N0b3JlKTsKK3N0YXRpYyBDTEFTU19BVFRSKHByb2JlLCBTX0lXVVNSLCBOVUxMLCBtZW1vcnlfcHJvYmVfc3RvcmUpOwogCiBzdGF0aWMgaW50IG1lbW9yeV9wcm9iZV9pbml0KHZvaWQpCiB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jhc2Uvbm9kZS5jIGIvZHJpdmVycy9iYXNlL25vZGUuYwppbmRleCA1MTE2Yjc4Li5mNTIwNzA5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jhc2Uvbm9kZS5jCisrKyBiL2RyaXZlcnMvYmFzZS9ub2RlLmMKQEAgLTEzLDYgKzEzLDcgQEAKICNpbmNsdWRlIDxsaW51eC9ub2RlbWFzay5oPgogI2luY2x1ZGUgPGxpbnV4L2NwdS5oPgogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3N3YXAuaD4KIAogc3RhdGljIHN0cnVjdCBzeXNkZXZfY2xhc3Mgbm9kZV9jbGFzcyA9IHsKIAkubmFtZSA9ICJub2RlIiwKQEAgLTYxLDM0ICs2Miw1MiBAQAogCXNpX21lbWluZm9fbm9kZSgmaSwgbmlkKTsKIAogCW4gPSBzcHJpbnRmKGJ1ZiwgIlxuIgotCQkgICAgICAgIk5vZGUgJWQgTWVtVG90YWw6ICAgICAlOGx1IGtCXG4iCi0JCSAgICAgICAiTm9kZSAlZCBNZW1GcmVlOiAgICAgICU4bHUga0JcbiIKLQkJICAgICAgICJOb2RlICVkIE1lbVVzZWQ6ICAgICAgJThsdSBrQlxuIgotCQkgICAgICAgIk5vZGUgJWQgQWN0aXZlOiAgICAgICAlOGx1IGtCXG4iCi0JCSAgICAgICAiTm9kZSAlZCBJbmFjdGl2ZTogICAgICU4bHUga0JcbiIKLSNpZmRlZiBDT05GSUdfSElHSE1FTQotCQkgICAgICAgIk5vZGUgJWQgSGlnaFRvdGFsOiAgICAlOGx1IGtCXG4iCi0JCSAgICAgICAiTm9kZSAlZCBIaWdoRnJlZTogICAgICU4bHUga0JcbiIKLQkJICAgICAgICJOb2RlICVkIExvd1RvdGFsOiAgICAgJThsdSBrQlxuIgotCQkgICAgICAgIk5vZGUgJWQgTG93RnJlZTogICAgICAlOGx1IGtCXG4iCisJCSAgICAgICAiTm9kZSAlZCBNZW1Ub3RhbDogICAgICAgJThsdSBrQlxuIgorCQkgICAgICAgIk5vZGUgJWQgTWVtRnJlZTogICAgICAgICU4bHUga0JcbiIKKwkJICAgICAgICJOb2RlICVkIE1lbVVzZWQ6ICAgICAgICAlOGx1IGtCXG4iCisJCSAgICAgICAiTm9kZSAlZCBBY3RpdmU6ICAgICAgICAgJThsdSBrQlxuIgorCQkgICAgICAgIk5vZGUgJWQgSW5hY3RpdmU6ICAgICAgICU4bHUga0JcbiIKKwkJICAgICAgICJOb2RlICVkIEFjdGl2ZShhbm9uKTogICAlOGx1IGtCXG4iCisJCSAgICAgICAiTm9kZSAlZCBJbmFjdGl2ZShhbm9uKTogJThsdSBrQlxuIgorCQkgICAgICAgIk5vZGUgJWQgQWN0aXZlKGZpbGUpOiAgICU4bHUga0JcbiIKKwkJICAgICAgICJOb2RlICVkIEluYWN0aXZlKGZpbGUpOiAlOGx1IGtCXG4iCisjaWZkZWYgQ09ORklHX1VORVZJQ1RBQkxFX0xSVQorCQkgICAgICAgIk5vZGUgJWQgVW5ldmljdGFibGU6ICAgICU4bHUga0JcbiIKKwkJICAgICAgICJOb2RlICVkIE1sb2NrZWQ6ICAgICAgICAlOGx1IGtCXG4iCiAjZW5kaWYKLQkJICAgICAgICJOb2RlICVkIERpcnR5OiAgICAgICAgJThsdSBrQlxuIgotCQkgICAgICAgIk5vZGUgJWQgV3JpdGViYWNrOiAgICAlOGx1IGtCXG4iCi0JCSAgICAgICAiTm9kZSAlZCBGaWxlUGFnZXM6ICAgICU4bHUga0JcbiIKLQkJICAgICAgICJOb2RlICVkIE1hcHBlZDogICAgICAgJThsdSBrQlxuIgotCQkgICAgICAgIk5vZGUgJWQgQW5vblBhZ2VzOiAgICAlOGx1IGtCXG4iCi0JCSAgICAgICAiTm9kZSAlZCBQYWdlVGFibGVzOiAgICU4bHUga0JcbiIKLQkJICAgICAgICJOb2RlICVkIE5GU19VbnN0YWJsZTogJThsdSBrQlxuIgotCQkgICAgICAgIk5vZGUgJWQgQm91bmNlOiAgICAgICAlOGx1IGtCXG4iCi0JCSAgICAgICAiTm9kZSAlZCBXcml0ZWJhY2tUbXA6ICU4bHUga0JcbiIKLQkJICAgICAgICJOb2RlICVkIFNsYWI6ICAgICAgICAgJThsdSBrQlxuIgotCQkgICAgICAgIk5vZGUgJWQgU1JlY2xhaW1hYmxlOiAlOGx1IGtCXG4iCi0JCSAgICAgICAiTm9kZSAlZCBTVW5yZWNsYWltOiAgICU4bHUga0JcbiIsCisjaWZkZWYgQ09ORklHX0hJR0hNRU0KKwkJICAgICAgICJOb2RlICVkIEhpZ2hUb3RhbDogICAgICAlOGx1IGtCXG4iCisJCSAgICAgICAiTm9kZSAlZCBIaWdoRnJlZTogICAgICAgJThsdSBrQlxuIgorCQkgICAgICAgIk5vZGUgJWQgTG93VG90YWw6ICAgICAgICU4bHUga0JcbiIKKwkJICAgICAgICJOb2RlICVkIExvd0ZyZWU6ICAgICAgICAlOGx1IGtCXG4iCisjZW5kaWYKKwkJICAgICAgICJOb2RlICVkIERpcnR5OiAgICAgICAgICAlOGx1IGtCXG4iCisJCSAgICAgICAiTm9kZSAlZCBXcml0ZWJhY2s6ICAgICAgJThsdSBrQlxuIgorCQkgICAgICAgIk5vZGUgJWQgRmlsZVBhZ2VzOiAgICAgICU4bHUga0JcbiIKKwkJICAgICAgICJOb2RlICVkIE1hcHBlZDogICAgICAgICAlOGx1IGtCXG4iCisJCSAgICAgICAiTm9kZSAlZCBBbm9uUGFnZXM6ICAgICAgJThsdSBrQlxuIgorCQkgICAgICAgIk5vZGUgJWQgUGFnZVRhYmxlczogICAgICU4bHUga0JcbiIKKwkJICAgICAgICJOb2RlICVkIE5GU19VbnN0YWJsZTogICAlOGx1IGtCXG4iCisJCSAgICAgICAiTm9kZSAlZCBCb3VuY2U6ICAgICAgICAgJThsdSBrQlxuIgorCQkgICAgICAgIk5vZGUgJWQgV3JpdGViYWNrVG1wOiAgICU4bHUga0JcbiIKKwkJICAgICAgICJOb2RlICVkIFNsYWI6ICAgICAgICAgICAlOGx1IGtCXG4iCisJCSAgICAgICAiTm9kZSAlZCBTUmVjbGFpbWFibGU6ICAgJThsdSBrQlxuIgorCQkgICAgICAgIk5vZGUgJWQgU1VucmVjbGFpbTogICAgICU4bHUga0JcbiIsCiAJCSAgICAgICBuaWQsIEsoaS50b3RhbHJhbSksCiAJCSAgICAgICBuaWQsIEsoaS5mcmVlcmFtKSwKIAkJICAgICAgIG5pZCwgSyhpLnRvdGFscmFtIC0gaS5mcmVlcmFtKSwKLQkJICAgICAgIG5pZCwgSyhub2RlX3BhZ2Vfc3RhdGUobmlkLCBOUl9BQ1RJVkUpKSwKLQkJICAgICAgIG5pZCwgSyhub2RlX3BhZ2Vfc3RhdGUobmlkLCBOUl9JTkFDVElWRSkpLAorCQkgICAgICAgbmlkLCBLKG5vZGVfcGFnZV9zdGF0ZShuaWQsIE5SX0FDVElWRV9BTk9OKSArCisJCQkJbm9kZV9wYWdlX3N0YXRlKG5pZCwgTlJfQUNUSVZFX0ZJTEUpKSwKKwkJICAgICAgIG5pZCwgSyhub2RlX3BhZ2Vfc3RhdGUobmlkLCBOUl9JTkFDVElWRV9BTk9OKSArCisJCQkJbm9kZV9wYWdlX3N0YXRlKG5pZCwgTlJfSU5BQ1RJVkVfRklMRSkpLAorCQkgICAgICAgbmlkLCBLKG5vZGVfcGFnZV9zdGF0ZShuaWQsIE5SX0FDVElWRV9BTk9OKSksCisJCSAgICAgICBuaWQsIEsobm9kZV9wYWdlX3N0YXRlKG5pZCwgTlJfSU5BQ1RJVkVfQU5PTikpLAorCQkgICAgICAgbmlkLCBLKG5vZGVfcGFnZV9zdGF0ZShuaWQsIE5SX0FDVElWRV9GSUxFKSksCisJCSAgICAgICBuaWQsIEsobm9kZV9wYWdlX3N0YXRlKG5pZCwgTlJfSU5BQ1RJVkVfRklMRSkpLAorI2lmZGVmIENPTkZJR19VTkVWSUNUQUJMRV9MUlUKKwkJICAgICAgIG5pZCwgSyhub2RlX3BhZ2Vfc3RhdGUobmlkLCBOUl9VTkVWSUNUQUJMRSkpLAorCQkgICAgICAgbmlkLCBLKG5vZGVfcGFnZV9zdGF0ZShuaWQsIE5SX01MT0NLKSksCisjZW5kaWYKICNpZmRlZiBDT05GSUdfSElHSE1FTQogCQkgICAgICAgbmlkLCBLKGkudG90YWxoaWdoKSwKIAkJICAgICAgIG5pZCwgSyhpLmZyZWVoaWdoKSwKQEAgLTE3Myw2ICsxOTIsOCBAQAogCQlzeXNkZXZfY3JlYXRlX2ZpbGUoJm5vZGUtPnN5c2RldiwgJmF0dHJfbWVtaW5mbyk7CiAJCXN5c2Rldl9jcmVhdGVfZmlsZSgmbm9kZS0+c3lzZGV2LCAmYXR0cl9udW1hc3RhdCk7CiAJCXN5c2Rldl9jcmVhdGVfZmlsZSgmbm9kZS0+c3lzZGV2LCAmYXR0cl9kaXN0YW5jZSk7CisKKwkJc2Nhbl91bmV2aWN0YWJsZV9yZWdpc3Rlcl9ub2RlKG5vZGUpOwogCX0KIAlyZXR1cm4gZXJyb3I7CiB9CkBAIC0xOTIsNiArMjEzLDggQEAKIAlzeXNkZXZfcmVtb3ZlX2ZpbGUoJm5vZGUtPnN5c2RldiwgJmF0dHJfbnVtYXN0YXQpOwogCXN5c2Rldl9yZW1vdmVfZmlsZSgmbm9kZS0+c3lzZGV2LCAmYXR0cl9kaXN0YW5jZSk7CiAKKwlzY2FuX3VuZXZpY3RhYmxlX3VucmVnaXN0ZXJfbm9kZShub2RlKTsKKwogCXN5c2Rldl91bnJlZ2lzdGVyKCZub2RlLT5zeXNkZXYpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jhc2UvcGxhdGZvcm0uYyBiL2RyaXZlcnMvYmFzZS9wbGF0Zm9ybS5jCmluZGV4IDNmOTQwMzkuLmRmY2JmZTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmFzZS9wbGF0Zm9ybS5jCisrKyBiL2RyaXZlcnMvYmFzZS9wbGF0Zm9ybS5jCkBAIC00MiwxMCArNDIsOCBAQAogCWZvciAoaSA9IDA7IGkgPCBkZXYtPm51bV9yZXNvdXJjZXM7IGkrKykgewogCQlzdHJ1Y3QgcmVzb3VyY2UgKnIgPSAmZGV2LT5yZXNvdXJjZVtpXTsKIAotCQlpZiAoKHItPmZsYWdzICYgKElPUkVTT1VSQ0VfSU98SU9SRVNPVVJDRV9NRU18Ci0JCQkJIElPUkVTT1VSQ0VfSVJRfElPUkVTT1VSQ0VfRE1BKSkgPT0gdHlwZSkKLQkJCWlmIChudW0tLSA9PSAwKQotCQkJCXJldHVybiByOworCQlpZiAodHlwZSA9PSByZXNvdXJjZV90eXBlKHIpICYmIG51bS0tID09IDApCisJCQlyZXR1cm4gcjsKIAl9CiAJcmV0dXJuIE5VTEw7CiB9CkBAIC03OCwxMCArNzYsOCBAQAogCWZvciAoaSA9IDA7IGkgPCBkZXYtPm51bV9yZXNvdXJjZXM7IGkrKykgewogCQlzdHJ1Y3QgcmVzb3VyY2UgKnIgPSAmZGV2LT5yZXNvdXJjZVtpXTsKIAotCQlpZiAoKHItPmZsYWdzICYgKElPUkVTT1VSQ0VfSU98SU9SRVNPVVJDRV9NRU18Ci0JCQkJIElPUkVTT1VSQ0VfSVJRfElPUkVTT1VSQ0VfRE1BKSkgPT0gdHlwZSkKLQkJCWlmICghc3RyY21wKHItPm5hbWUsIG5hbWUpKQotCQkJCXJldHVybiByOworCQlpZiAodHlwZSA9PSByZXNvdXJjZV90eXBlKHIpICYmICFzdHJjbXAoci0+bmFtZSwgbmFtZSkpCisJCQlyZXR1cm4gcjsKIAl9CiAJcmV0dXJuIE5VTEw7CiB9CkBAIC0yNTksOSArMjU1LDkgQEAKIAogCQlwID0gci0+cGFyZW50OwogCQlpZiAoIXApIHsKLQkJCWlmIChyLT5mbGFncyAmIElPUkVTT1VSQ0VfTUVNKQorCQkJaWYgKHJlc291cmNlX3R5cGUocikgPT0gSU9SRVNPVVJDRV9NRU0pCiAJCQkJcCA9ICZpb21lbV9yZXNvdXJjZTsKLQkJCWVsc2UgaWYgKHItPmZsYWdzICYgSU9SRVNPVVJDRV9JTykKKwkJCWVsc2UgaWYgKHJlc291cmNlX3R5cGUocikgPT0gSU9SRVNPVVJDRV9JTykKIAkJCQlwID0gJmlvcG9ydF9yZXNvdXJjZTsKIAkJfQogCkBAIC0yODIsOSArMjc4LDE0IEBACiAJCXJldHVybiByZXQ7CiAKICBmYWlsZWQ6Ci0Jd2hpbGUgKC0taSA+PSAwKQotCQlpZiAocGRldi0+cmVzb3VyY2VbaV0uZmxhZ3MgJiAoSU9SRVNPVVJDRV9NRU18SU9SRVNPVVJDRV9JTykpCi0JCQlyZWxlYXNlX3Jlc291cmNlKCZwZGV2LT5yZXNvdXJjZVtpXSk7CisJd2hpbGUgKC0taSA+PSAwKSB7CisJCXN0cnVjdCByZXNvdXJjZSAqciA9ICZwZGV2LT5yZXNvdXJjZVtpXTsKKwkJdW5zaWduZWQgbG9uZyB0eXBlID0gcmVzb3VyY2VfdHlwZShyKTsKKworCQlpZiAodHlwZSA9PSBJT1JFU09VUkNFX01FTSB8fCB0eXBlID09IElPUkVTT1VSQ0VfSU8pCisJCQlyZWxlYXNlX3Jlc291cmNlKHIpOworCX0KKwogCXJldHVybiByZXQ7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChwbGF0Zm9ybV9kZXZpY2VfYWRkKTsKQEAgLTMwNiw3ICszMDcsOSBAQAogCiAJCWZvciAoaSA9IDA7IGkgPCBwZGV2LT5udW1fcmVzb3VyY2VzOyBpKyspIHsKIAkJCXN0cnVjdCByZXNvdXJjZSAqciA9ICZwZGV2LT5yZXNvdXJjZVtpXTsKLQkJCWlmIChyLT5mbGFncyAmIChJT1JFU09VUkNFX01FTXxJT1JFU09VUkNFX0lPKSkKKwkJCXVuc2lnbmVkIGxvbmcgdHlwZSA9IHJlc291cmNlX3R5cGUocik7CisKKwkJCWlmICh0eXBlID09IElPUkVTT1VSQ0VfTUVNIHx8IHR5cGUgPT0gSU9SRVNPVVJDRV9JTykKIAkJCQlyZWxlYXNlX3Jlc291cmNlKHIpOwogCQl9CiAJfQpAQCAtMzkxLDYgKzM5NCw1MyBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwocGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyX3NpbXBsZSk7CiAKKy8qKgorICogcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyX2RhdGEKKyAqIEBwYXJlbnQ6IHBhcmVudCBkZXZpY2UgZm9yIHRoZSBkZXZpY2Ugd2UncmUgYWRkaW5nCisgKiBAbmFtZTogYmFzZSBuYW1lIG9mIHRoZSBkZXZpY2Ugd2UncmUgYWRkaW5nCisgKiBAaWQ6IGluc3RhbmNlIGlkCisgKiBAZGF0YTogcGxhdGZvcm0gc3BlY2lmaWMgZGF0YSBmb3IgdGhpcyBwbGF0Zm9ybSBkZXZpY2UKKyAqIEBzaXplOiBzaXplIG9mIHBsYXRmb3JtIHNwZWNpZmljIGRhdGEKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGNyZWF0ZXMgYSBzaW1wbGUgcGxhdGZvcm0gZGV2aWNlIHRoYXQgcmVxdWlyZXMgbWluaW1hbAorICogcmVzb3VyY2UgYW5kIG1lbW9yeSBtYW5hZ2VtZW50LiBDYW5uZWQgcmVsZWFzZSBmdW5jdGlvbiBmcmVlaW5nIG1lbW9yeQorICogYWxsb2NhdGVkIGZvciB0aGUgZGV2aWNlIGFsbG93cyBkcml2ZXJzIHVzaW5nIHN1Y2ggZGV2aWNlcyB0byBiZQorICogdW5sb2FkZWQgd2l0aG91dCB3YWl0aW5nIGZvciB0aGUgbGFzdCByZWZlcmVuY2UgdG8gdGhlIGRldmljZSB0byBiZQorICogZHJvcHBlZC4KKyAqLworc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyX2RhdGEoCisJCXN0cnVjdCBkZXZpY2UgKnBhcmVudCwKKwkJY29uc3QgY2hhciAqbmFtZSwgaW50IGlkLAorCQljb25zdCB2b2lkICpkYXRhLCBzaXplX3Qgc2l6ZSkKK3sKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2OworCWludCByZXR2YWw7CisKKwlwZGV2ID0gcGxhdGZvcm1fZGV2aWNlX2FsbG9jKG5hbWUsIGlkKTsKKwlpZiAoIXBkZXYpIHsKKwkJcmV0dmFsID0gLUVOT01FTTsKKwkJZ290byBlcnJvcjsKKwl9CisKKwlwZGV2LT5kZXYucGFyZW50ID0gcGFyZW50OworCisJaWYgKHNpemUpIHsKKwkJcmV0dmFsID0gcGxhdGZvcm1fZGV2aWNlX2FkZF9kYXRhKHBkZXYsIGRhdGEsIHNpemUpOworCQlpZiAocmV0dmFsKQorCQkJZ290byBlcnJvcjsKKwl9CisKKwlyZXR2YWwgPSBwbGF0Zm9ybV9kZXZpY2VfYWRkKHBkZXYpOworCWlmIChyZXR2YWwpCisJCWdvdG8gZXJyb3I7CisKKwlyZXR1cm4gcGRldjsKKworZXJyb3I6CisJcGxhdGZvcm1fZGV2aWNlX3B1dChwZGV2KTsKKwlyZXR1cm4gRVJSX1BUUihyZXR2YWwpOworfQorCiBzdGF0aWMgaW50IHBsYXRmb3JtX2Rydl9wcm9iZShzdHJ1Y3QgZGV2aWNlICpfZGV2KQogewogCXN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgKmRydiA9IHRvX3BsYXRmb3JtX2RyaXZlcihfZGV2LT5kcml2ZXIpOwpAQCAtODYyLDcgKzkxMiw3IEBACiAKICNlbmRpZiAvKiAhQ09ORklHX0hJQkVSTkFUSU9OICovCiAKLXN0cnVjdCBwbV9leHRfb3BzIHBsYXRmb3JtX3BtX29wcyA9IHsKK3N0YXRpYyBzdHJ1Y3QgcG1fZXh0X29wcyBwbGF0Zm9ybV9wbV9vcHMgPSB7CiAJLmJhc2UgPSB7CiAJCS5wcmVwYXJlID0gcGxhdGZvcm1fcG1fcHJlcGFyZSwKIAkJLmNvbXBsZXRlID0gcGxhdGZvcm1fcG1fY29tcGxldGUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jhc2UvcG93ZXIvbWFpbi5jIGIvZHJpdmVycy9iYXNlL3Bvd2VyL21haW4uYwppbmRleCAyNzNhOTQ0Li42OTJjMjBiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jhc2UvcG93ZXIvbWFpbi5jCisrKyBiL2RyaXZlcnMvYmFzZS9wb3dlci9tYWluLmMKQEAgLTgzLDcgKzgzLDcgQEAKIAkJICogdHJhbnNpdGlvbiBpcyBpbiBwcm9ncmVzcyBpbiBvcmRlciB0byBhdm9pZCBsZWF2aW5nIHRoZW0KIAkJICogdW5oYW5kbGVkIGRvd24gdGhlIHJvYWQKIAkJICovCi0JCVdBUk5fT04odHJ1ZSk7CisJCWRldl9XQVJOKGRldiwgIlBhcmVudGxlc3MgZGV2aWNlIHJlZ2lzdGVyZWQgZHVyaW5nIGEgUE0gdHJhbnNhY3Rpb25cbiIpOwogCX0KIAogCWxpc3RfYWRkX3RhaWwoJmRldi0+cG93ZXIuZW50cnksICZkcG1fbGlzdCk7CkBAIC03NzgsMTAgKzc3OCw3IEBACiAKIHZvaWQgX19zdXNwZW5kX3JlcG9ydF9yZXN1bHQoY29uc3QgY2hhciAqZnVuY3Rpb24sIHZvaWQgKmZuLCBpbnQgcmV0KQogewotCWlmIChyZXQpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlcygpOiAiLCBmdW5jdGlvbik7Ci0JCXByaW50X2ZuX2Rlc2NyaXB0b3Jfc3ltYm9sKCIlcyByZXR1cm5zICIsIGZuKTsKLQkJcHJpbnRrKCIlZFxuIiwgcmV0KTsKLQl9CisJaWYgKHJldCkKKwkJcHJpbnRrKEtFUk5fRVJSICIlcygpOiAlcEYgcmV0dXJucyAlZFxuIiwgZnVuY3Rpb24sIGZuLCByZXQpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoX19zdXNwZW5kX3JlcG9ydF9yZXN1bHQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9hb2UvYW9lYmxrLmMgYi9kcml2ZXJzL2Jsb2NrL2FvZS9hb2VibGsuYwppbmRleCBiODI2NTRlLi5kODc2YWQ4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL2FvZS9hb2VibGsuYworKysgYi9kcml2ZXJzL2Jsb2NrL2FvZS9hb2VibGsuYwpAQCAtOTAsNyArOTAsNyBAQAogc3RhdGljIERFVklDRV9BVFRSKG1hYywgU19JUlVHTywgYW9lZGlza19zaG93X21hYywgTlVMTCk7CiBzdGF0aWMgREVWSUNFX0FUVFIobmV0aWYsIFNfSVJVR08sIGFvZWRpc2tfc2hvd19uZXRpZiwgTlVMTCk7CiBzdGF0aWMgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgZGV2X2F0dHJfZmlybXdhcmVfdmVyc2lvbiA9IHsKLQkuYXR0ciA9IHsgLm5hbWUgPSAiZmlybXdhcmUtdmVyc2lvbiIsIC5tb2RlID0gU19JUlVHTywgLm93bmVyID0gVEhJU19NT0RVTEUgfSwKKwkuYXR0ciA9IHsgLm5hbWUgPSAiZmlybXdhcmUtdmVyc2lvbiIsIC5tb2RlID0gU19JUlVHTyB9LAogCS5zaG93ID0gYW9lZGlza19zaG93X2Z3dmVyLAogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9hb2UvYW9lY2hyLmMgYi9kcml2ZXJzL2Jsb2NrL2FvZS9hb2VjaHIuYwppbmRleCAxZjU2ZDJjLi4yMDBlZmM0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL2FvZS9hb2VjaHIuYworKysgYi9kcml2ZXJzL2Jsb2NrL2FvZS9hb2VjaHIuYwpAQCAtMjg0LDkgKzI4NCw5IEBACiAJCXJldHVybiBQVFJfRVJSKGFvZV9jbGFzcyk7CiAJfQogCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGNoYXJkZXZzKTsgKytpKQotCQlkZXZpY2VfY3JlYXRlX2RydmRhdGEoYW9lX2NsYXNzLCBOVUxMLAotCQkJCSAgICAgIE1LREVWKEFPRV9NQUpPUiwgY2hhcmRldnNbaV0ubWlub3IpLAotCQkJCSAgICAgIE5VTEwsIGNoYXJkZXZzW2ldLm5hbWUpOworCQlkZXZpY2VfY3JlYXRlKGFvZV9jbGFzcywgTlVMTCwKKwkJCSAgICAgIE1LREVWKEFPRV9NQUpPUiwgY2hhcmRldnNbaV0ubWlub3IpLCBOVUxMLAorCQkJICAgICAgY2hhcmRldnNbaV0ubmFtZSk7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svYXRhZmxvcC5jIGIvZHJpdmVycy9ibG9jay9hdGFmbG9wLmMKaW5kZXggNDlmMjc0MS4uNDMyY2Y0MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay9hdGFmbG9wLmMKKysrIGIvZHJpdmVycy9ibG9jay9hdGFmbG9wLmMKQEAgLTE4ODIsMTAgKzE4ODIsNiBAQAogCQkvKiBBbWlnYSwgTWFjLCAuLi4gZG9uJ3QgaGF2ZSBBdGFyaS1jb21wYXRpYmxlIGZsb3BweSA6LSkgKi8KIAkJcmV0dXJuIC1FTk9ERVY7CiAKLQlpZiAoTUFDSF9JU19IQURFUykKLQkJLyogSGFkZXMgZG9lc24ndCBoYXZlIEF0YXJpLWNvbXBhdGlibGUgZmxvcHB5ICovCi0JCXJldHVybiAtRU5PREVWOwotCiAJaWYgKHJlZ2lzdGVyX2Jsa2RldihGTE9QUFlfTUFKT1IsImZkIikpCiAJCXJldHVybiAtRUJVU1k7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svZmxvcHB5LmMgYi9kcml2ZXJzL2Jsb2NrL2Zsb3BweS5jCmluZGV4IGNmNjRkZGYuLjJjZWEyN2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svZmxvcHB5LmMKKysrIGIvZHJpdmVycy9ibG9jay9mbG9wcHkuYwpAQCAtNDE3Miw3ICs0MTcyLDcgQEAKIAlpbnQgaSwgdW5pdCwgZHJpdmU7CiAJaW50IGVyciwgZHI7CiAKLSNpZiBkZWZpbmVkKENPTkZJR19QUENfTUVSR0UpCisjaWYgZGVmaW5lZChDT05GSUdfUFBDKQogCWlmIChjaGVja19sZWdhY3lfaW9wb3J0KEZEQzEpKQogCQlyZXR1cm4gLUVOT0RFVjsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9uYmQuYyBiL2RyaXZlcnMvYmxvY2svbmJkLmMKaW5kZXggN2IzMzUxMi4uOTAzNGNhNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay9uYmQuYworKysgYi9kcml2ZXJzL2Jsb2NrL25iZC5jCkBAIC0zOTEsNyArMzkxLDcgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlIHBpZF9hdHRyID0gewotCS5hdHRyID0geyAubmFtZSA9ICJwaWQiLCAubW9kZSA9IFNfSVJVR08sIC5vd25lciA9IFRISVNfTU9EVUxFIH0sCisJLmF0dHIgPSB7IC5uYW1lID0gInBpZCIsIC5tb2RlID0gU19JUlVHT30sCiAJLnNob3cgPSBwaWRfc2hvdywKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svcGFyaWRlL3BnLmMgYi9kcml2ZXJzL2Jsb2NrL3BhcmlkZS9wZy5jCmluZGV4IGQ3MzFjYTQuLjlkZmEyNzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svcGFyaWRlL3BnLmMKKysrIGIvZHJpdmVycy9ibG9jay9wYXJpZGUvcGcuYwpAQCAtNjg2LDkgKzY4Niw4IEBACiAJZm9yICh1bml0ID0gMDsgdW5pdCA8IFBHX1VOSVRTOyB1bml0KyspIHsKIAkJc3RydWN0IHBnICpkZXYgPSAmZGV2aWNlc1t1bml0XTsKIAkJaWYgKGRldi0+cHJlc2VudCkKLQkJCWRldmljZV9jcmVhdGVfZHJ2ZGF0YShwZ19jbGFzcywgTlVMTCwKLQkJCQkJICAgICAgTUtERVYobWFqb3IsIHVuaXQpLCBOVUxMLAotCQkJCQkgICAgICAicGcldSIsIHVuaXQpOworCQkJZGV2aWNlX2NyZWF0ZShwZ19jbGFzcywgTlVMTCwgTUtERVYobWFqb3IsIHVuaXQpLCBOVUxMLAorCQkJCSAgICAgICJwZyV1IiwgdW5pdCk7CiAJfQogCWVyciA9IDA7CiAJZ290byBvdXQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL3BhcmlkZS9wdC5jIGIvZHJpdmVycy9ibG9jay9wYXJpZGUvcHQuYwppbmRleCA2NzNiOGIyLi41YWUyMjk2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL3BhcmlkZS9wdC5jCisrKyBiL2RyaXZlcnMvYmxvY2svcGFyaWRlL3B0LmMKQEAgLTk3OSwxMiArOTc5LDEwIEBACiAKIAlmb3IgKHVuaXQgPSAwOyB1bml0IDwgUFRfVU5JVFM7IHVuaXQrKykKIAkJaWYgKHB0W3VuaXRdLnByZXNlbnQpIHsKLQkJCWRldmljZV9jcmVhdGVfZHJ2ZGF0YShwdF9jbGFzcywgTlVMTCwKLQkJCQkJICAgICAgTUtERVYobWFqb3IsIHVuaXQpLCBOVUxMLAotCQkJCQkgICAgICAicHQlZCIsIHVuaXQpOwotCQkJZGV2aWNlX2NyZWF0ZV9kcnZkYXRhKHB0X2NsYXNzLCBOVUxMLAotCQkJCQkgICAgICBNS0RFVihtYWpvciwgdW5pdCArIDEyOCksIE5VTEwsCi0JCQkJCSAgICAgICJwdCVkbiIsIHVuaXQpOworCQkJZGV2aWNlX2NyZWF0ZShwdF9jbGFzcywgTlVMTCwgTUtERVYobWFqb3IsIHVuaXQpLCBOVUxMLAorCQkJCSAgICAgICJwdCVkIiwgdW5pdCk7CisJCQlkZXZpY2VfY3JlYXRlKHB0X2NsYXNzLCBOVUxMLCBNS0RFVihtYWpvciwgdW5pdCArIDEyOCksCisJCQkJICAgICAgTlVMTCwgInB0JWRuIiwgdW5pdCk7CiAJCX0KIAlnb3RvIG91dDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9wa3RjZHZkLmMgYi9kcml2ZXJzL2Jsb2NrL3BrdGNkdmQuYwppbmRleCAwZTA3NzE1Li4xOTVjYTdjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL3BrdGNkdmQuYworKysgYi9kcml2ZXJzL2Jsb2NrL3BrdGNkdmQuYwpAQCAtMzAyLDkgKzMwMiw4IEBACiBzdGF0aWMgdm9pZCBwa3Rfc3lzZnNfZGV2X25ldyhzdHJ1Y3QgcGt0Y2R2ZF9kZXZpY2UgKnBkKQogewogCWlmIChjbGFzc19wa3RjZHZkKSB7Ci0JCXBkLT5kZXYgPSBkZXZpY2VfY3JlYXRlX2RydmRhdGEoY2xhc3NfcGt0Y2R2ZCwgTlVMTCwKLQkJCQkJCXBkLT5wa3RfZGV2LCBOVUxMLAotCQkJCQkJIiVzIiwgcGQtPm5hbWUpOworCQlwZC0+ZGV2ID0gZGV2aWNlX2NyZWF0ZShjbGFzc19wa3RjZHZkLCBOVUxMLCBwZC0+cGt0X2RldiwgTlVMTCwKKwkJCQkJIiVzIiwgcGQtPm5hbWUpOwogCQlpZiAoSVNfRVJSKHBkLT5kZXYpKQogCQkJcGQtPmRldiA9IE5VTEw7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay91Yi5jIGIvZHJpdmVycy9ibG9jay91Yi5jCmluZGV4IDNhMjgxZWYuLmY2MGU0MTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svdWIuYworKysgYi9kcml2ZXJzL2Jsb2NrL3ViLmMKQEAgLTM0OSw4ICszNDksNiBAQAogCiAJc3RydWN0IHdvcmtfc3RydWN0IHJlc2V0X3dvcms7CiAJd2FpdF9xdWV1ZV9oZWFkX3QgcmVzZXRfd2FpdDsKLQotCWludCBzZ19zdGF0WzZdOwogfTsKIAogLyoKQEAgLTY4NSw3ICs2ODMsNiBAQAogCQlnb3RvIGRyb3A7CiAJfQogCXVycS0+bnNnID0gbl9lbGVtOwotCXNjLT5zZ19zdGF0W25fZWxlbSA8IDUgPyBuX2VsZW0gOiA1XSsrOwogCiAJaWYgKGJsa19wY19yZXF1ZXN0KHJxKSkgewogCQl1Yl9jbWRfYnVpbGRfcGFja2V0KHNjLCBsdW4sIGNtZCwgdXJxKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svdmlvZGFzZC5jIGIvZHJpdmVycy9ibG9jay92aW9kYXNkLmMKaW5kZXggZjFjOGZlYi4uMTczMGQyOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay92aW9kYXNkLmMKKysrIGIvZHJpdmVycy9ibG9jay92aW9kYXNkLmMKQEAgLTI0OSw3ICsyNDksNiBAQAogCXN0cnVjdCBIdkxwRXZlbnQgKmhldjsKIAlzdHJ1Y3Qgc2NhdHRlcmxpc3Qgc2dbVklPTUFYQkxPQ0tETUFdOwogCWludCBzZ2luZGV4OwotCWludCBzdGF0aW5kZXg7CiAJc3RydWN0IHZpb2Rhc2RfZGV2aWNlICpkOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKQEAgLTI1OCwxMSArMjU3LDkgQEAKIAlpZiAocnFfZGF0YV9kaXIocmVxKSA9PSBSRUFEKSB7CiAJCWRpcmVjdGlvbiA9IERNQV9GUk9NX0RFVklDRTsKIAkJdmlvY21kID0gdmlvbWFqb3JzdWJ0eXBlX2Jsb2NraW8gfCB2aW9ibG9ja3JlYWQ7Ci0JCXN0YXRpbmRleCA9IDA7CiAJfSBlbHNlIHsKIAkJZGlyZWN0aW9uID0gRE1BX1RPX0RFVklDRTsKIAkJdmlvY21kID0gdmlvbWFqb3JzdWJ0eXBlX2Jsb2NraW8gfCB2aW9ibG9ja3dyaXRlOwotCQlzdGF0aW5kZXggPSAxOwogCX0KIAogICAgICAgICBkID0gcmVxLT5ycV9kaXNrLT5wcml2YXRlX2RhdGE7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2JsdWV0b290aC9ibHVlY2FyZF9jcy5jIGIvZHJpdmVycy9ibHVldG9vdGgvYmx1ZWNhcmRfY3MuYwppbmRleCBiY2Y1NzkyLi5lNmVlMjFkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2JsdWV0b290aC9ibHVlY2FyZF9jcy5jCisrKyBiL2RyaXZlcnMvYmx1ZXRvb3RoL2JsdWVjYXJkX2NzLmMKQEAgLTkwMSwyMyArOTAxLDIzIEBACiAJZm9yIChuID0gMDsgbiA8IDB4NDAwOyBuICs9IDB4NDApIHsKIAkJbGluay0+aW8uQmFzZVBvcnQxID0gbiBeIDB4MzAwOwogCQlpID0gcGNtY2lhX3JlcXVlc3RfaW8obGluaywgJmxpbmstPmlvKTsKLQkJaWYgKGkgPT0gQ1NfU1VDQ0VTUykKKwkJaWYgKGkgPT0gMCkKIAkJCWJyZWFrOwogCX0KIAotCWlmIChpICE9IENTX1NVQ0NFU1MpIHsKKwlpZiAoaSAhPSAwKSB7CiAJCWNzX2Vycm9yKGxpbmssIFJlcXVlc3RJTywgaSk7CiAJCWdvdG8gZmFpbGVkOwogCX0KIAogCWkgPSBwY21jaWFfcmVxdWVzdF9pcnEobGluaywgJmxpbmstPmlycSk7Ci0JaWYgKGkgIT0gQ1NfU1VDQ0VTUykgeworCWlmIChpICE9IDApIHsKIAkJY3NfZXJyb3IobGluaywgUmVxdWVzdElSUSwgaSk7CiAJCWxpbmstPmlycS5Bc3NpZ25lZElSUSA9IDA7CiAJfQogCiAJaSA9IHBjbWNpYV9yZXF1ZXN0X2NvbmZpZ3VyYXRpb24obGluaywgJmxpbmstPmNvbmYpOwotCWlmIChpICE9IENTX1NVQ0NFU1MpIHsKKwlpZiAoaSAhPSAwKSB7CiAJCWNzX2Vycm9yKGxpbmssIFJlcXVlc3RDb25maWd1cmF0aW9uLCBpKTsKIAkJZ290byBmYWlsZWQ7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibHVldG9vdGgvYnQzY19jcy5jIGIvZHJpdmVycy9ibHVldG9vdGgvYnQzY19jcy5jCmluZGV4IDI3MDU4NDcuLjJjYmU3MGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmx1ZXRvb3RoL2J0M2NfY3MuYworKysgYi9kcml2ZXJzL2JsdWV0b290aC9idDNjX2NzLmMKQEAgLTY3OCwxMDEgKzY3OCw3OCBAQAogCWtmcmVlKGluZm8pOwogfQogCi1zdGF0aWMgaW50IGdldF90dXBsZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqaGFuZGxlLCB0dXBsZV90ICp0dXBsZSwgY2lzcGFyc2VfdCAqcGFyc2UpCitzdGF0aWMgaW50IGJ0M2NfY2hlY2tfY29uZmlnKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldiwKKwkJCSAgICAgY2lzdHBsX2NmdGFibGVfZW50cnlfdCAqY2YsCisJCQkgICAgIGNpc3RwbF9jZnRhYmxlX2VudHJ5X3QgKmRmbHQsCisJCQkgICAgIHVuc2lnbmVkIGludCB2Y2MsCisJCQkgICAgIHZvaWQgKnByaXZfZGF0YSkKIHsKLQlpbnQgaTsKKwl1bnNpZ25lZCBsb25nIHRyeSA9ICh1bnNpZ25lZCBsb25nKSBwcml2X2RhdGE7CiAKLQlpID0gcGNtY2lhX2dldF90dXBsZV9kYXRhKGhhbmRsZSwgdHVwbGUpOwotCWlmIChpICE9IENTX1NVQ0NFU1MpCi0JCXJldHVybiBpOwotCi0JcmV0dXJuIHBjbWNpYV9wYXJzZV90dXBsZShoYW5kbGUsIHR1cGxlLCBwYXJzZSk7CisJaWYgKGNmLT52cHAxLnByZXNlbnQgJiAoMSA8PCBDSVNUUExfUE9XRVJfVk5PTSkpCisJCXBfZGV2LT5jb25mLlZwcCA9IGNmLT52cHAxLnBhcmFtW0NJU1RQTF9QT1dFUl9WTk9NXSAvIDEwMDAwOworCWlmICgoY2YtPmlvLm53aW4gPiAwKSAmJiAoY2YtPmlvLndpblswXS5sZW4gPT0gOCkgJiYKKwkgICAgKGNmLT5pby53aW5bMF0uYmFzZSAhPSAwKSkgeworCQlwX2Rldi0+aW8uQmFzZVBvcnQxID0gY2YtPmlvLndpblswXS5iYXNlOworCQlwX2Rldi0+aW8uSU9BZGRyTGluZXMgPSAodHJ5ID09IDApID8gMTYgOgorCQkJY2YtPmlvLmZsYWdzICYgQ0lTVFBMX0lPX0xJTkVTX01BU0s7CisJCWlmICghcGNtY2lhX3JlcXVlc3RfaW8ocF9kZXYsICZwX2Rldi0+aW8pKQorCQkJcmV0dXJuIDA7CisJfQorCXJldHVybiAtRU5PREVWOwogfQogCi1zdGF0aWMgaW50IGZpcnN0X3R1cGxlKHN0cnVjdCBwY21jaWFfZGV2aWNlICpoYW5kbGUsIHR1cGxlX3QgKnR1cGxlLCBjaXNwYXJzZV90ICpwYXJzZSkKK3N0YXRpYyBpbnQgYnQzY19jaGVja19jb25maWdfbm90cGlja3koc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2LAorCQkJCSAgICAgIGNpc3RwbF9jZnRhYmxlX2VudHJ5X3QgKmNmLAorCQkJCSAgICAgIGNpc3RwbF9jZnRhYmxlX2VudHJ5X3QgKmRmbHQsCisJCQkJICAgICAgdW5zaWduZWQgaW50IHZjYywKKwkJCQkgICAgICB2b2lkICpwcml2X2RhdGEpCiB7Ci0JaWYgKHBjbWNpYV9nZXRfZmlyc3RfdHVwbGUoaGFuZGxlLCB0dXBsZSkgIT0gQ1NfU1VDQ0VTUykKLQkJcmV0dXJuIENTX05PX01PUkVfSVRFTVM7Ci0JcmV0dXJuIGdldF90dXBsZShoYW5kbGUsIHR1cGxlLCBwYXJzZSk7Ci19CisJc3RhdGljIHVuc2lnbmVkIGludCBiYXNlWzVdID0geyAweDNmOCwgMHgyZjgsIDB4M2U4LCAweDJlOCwgMHgwIH07CisJaW50IGo7CiAKLXN0YXRpYyBpbnQgbmV4dF90dXBsZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqaGFuZGxlLCB0dXBsZV90ICp0dXBsZSwgY2lzcGFyc2VfdCAqcGFyc2UpCi17Ci0JaWYgKHBjbWNpYV9nZXRfbmV4dF90dXBsZShoYW5kbGUsIHR1cGxlKSAhPSBDU19TVUNDRVNTKQotCQlyZXR1cm4gQ1NfTk9fTU9SRV9JVEVNUzsKLQlyZXR1cm4gZ2V0X3R1cGxlKGhhbmRsZSwgdHVwbGUsIHBhcnNlKTsKKwlpZiAoKGNmLT5pby5ud2luID4gMCkgJiYgKChjZi0+aW8uZmxhZ3MgJiBDSVNUUExfSU9fTElORVNfTUFTSykgPD0gMykpIHsKKwkJZm9yIChqID0gMDsgaiA8IDU7IGorKykgeworCQkJcF9kZXYtPmlvLkJhc2VQb3J0MSA9IGJhc2Vbal07CisJCQlwX2Rldi0+aW8uSU9BZGRyTGluZXMgPSBiYXNlW2pdID8gMTYgOiAzOworCQkJaWYgKCFwY21jaWFfcmVxdWVzdF9pbyhwX2RldiwgJnBfZGV2LT5pbykpCisJCQkJcmV0dXJuIDA7CisJCX0KKwl9CisJcmV0dXJuIC1FTk9ERVY7CiB9CiAKIHN0YXRpYyBpbnQgYnQzY19jb25maWcoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCiB7Ci0Jc3RhdGljIHVuc2lnbmVkIGludCBiYXNlWzVdID0geyAweDNmOCwgMHgyZjgsIDB4M2U4LCAweDJlOCwgMHgwIH07CiAJYnQzY19pbmZvX3QgKmluZm8gPSBsaW5rLT5wcml2OwotCXR1cGxlX3QgdHVwbGU7Ci0JdV9zaG9ydCBidWZbMjU2XTsKLQljaXNwYXJzZV90IHBhcnNlOwotCWNpc3RwbF9jZnRhYmxlX2VudHJ5X3QgKmNmID0gJnBhcnNlLmNmdGFibGVfZW50cnk7Ci0JaW50IGksIGosIHRyeTsKKwlpbnQgaTsKKwl1bnNpZ25lZCBsb25nIHRyeTsKIAotCS8qIEZpcnN0IHBhc3M6IGxvb2sgZm9yIGEgY29uZmlnIGVudHJ5IHRoYXQgbG9va3Mgbm9ybWFsLiAqLwotCXR1cGxlLlR1cGxlRGF0YSA9IChjaXNkYXRhX3QgKilidWY7Ci0JdHVwbGUuVHVwbGVPZmZzZXQgPSAwOwotCXR1cGxlLlR1cGxlRGF0YU1heCA9IDI1NTsKLQl0dXBsZS5BdHRyaWJ1dGVzID0gMDsKLQl0dXBsZS5EZXNpcmVkVHVwbGUgPSBDSVNUUExfQ0ZUQUJMRV9FTlRSWTsKLQkvKiBUd28gdHJpZXM6IHdpdGhvdXQgSU8gYWxpYXNlcywgdGhlbiB3aXRoIGFsaWFzZXMgKi8KLQlmb3IgKHRyeSA9IDA7IHRyeSA8IDI7IHRyeSsrKSB7Ci0JCWkgPSBmaXJzdF90dXBsZShsaW5rLCAmdHVwbGUsICZwYXJzZSk7Ci0JCXdoaWxlIChpICE9IENTX05PX01PUkVfSVRFTVMpIHsKLQkJCWlmIChpICE9IENTX1NVQ0NFU1MpCi0JCQkJZ290byBuZXh0X2VudHJ5OwotCQkJaWYgKGNmLT52cHAxLnByZXNlbnQgJiAoMSA8PCBDSVNUUExfUE9XRVJfVk5PTSkpCi0JCQkJbGluay0+Y29uZi5WcHAgPSBjZi0+dnBwMS5wYXJhbVtDSVNUUExfUE9XRVJfVk5PTV0gLyAxMDAwMDsKLQkJCWlmICgoY2YtPmlvLm53aW4gPiAwKSAmJiAoY2YtPmlvLndpblswXS5sZW4gPT0gOCkgJiYgKGNmLT5pby53aW5bMF0uYmFzZSAhPSAwKSkgewotCQkJCWxpbmstPmNvbmYuQ29uZmlnSW5kZXggPSBjZi0+aW5kZXg7Ci0JCQkJbGluay0+aW8uQmFzZVBvcnQxID0gY2YtPmlvLndpblswXS5iYXNlOwotCQkJCWxpbmstPmlvLklPQWRkckxpbmVzID0gKHRyeSA9PSAwKSA/IDE2IDogY2YtPmlvLmZsYWdzICYgQ0lTVFBMX0lPX0xJTkVTX01BU0s7Ci0JCQkJaSA9IHBjbWNpYV9yZXF1ZXN0X2lvKGxpbmssICZsaW5rLT5pbyk7Ci0JCQkJaWYgKGkgPT0gQ1NfU1VDQ0VTUykKLQkJCQkJZ290byBmb3VuZF9wb3J0OwotCQkJfQotbmV4dF9lbnRyeToKLQkJCWkgPSBuZXh0X3R1cGxlKGxpbmssICZ0dXBsZSwgJnBhcnNlKTsKLQkJfQotCX0KKwkvKiBGaXJzdCBwYXNzOiBsb29rIGZvciBhIGNvbmZpZyBlbnRyeSB0aGF0IGxvb2tzIG5vcm1hbC4KKwkgICBUd28gdHJpZXM6IHdpdGhvdXQgSU8gYWxpYXNlcywgdGhlbiB3aXRoIGFsaWFzZXMgKi8KKwlmb3IgKHRyeSA9IDA7IHRyeSA8IDI7IHRyeSsrKQorCQlpZiAoIXBjbWNpYV9sb29wX2NvbmZpZyhsaW5rLCBidDNjX2NoZWNrX2NvbmZpZywgKHZvaWQgKikgdHJ5KSkKKwkJCWdvdG8gZm91bmRfcG9ydDsKIAogCS8qIFNlY29uZCBwYXNzOiB0cnkgdG8gZmluZCBhbiBlbnRyeSB0aGF0IGlzbid0IHBpY2t5IGFib3V0CiAJICAgaXRzIGJhc2UgYWRkcmVzcywgdGhlbiB0cnkgdG8gZ3JhYiBhbnkgc3RhbmRhcmQgc2VyaWFsIHBvcnQKIAkgICBhZGRyZXNzLCBhbmQgZmluYWxseSB0cnkgdG8gZ2V0IGFueSBmcmVlIHBvcnQuICovCi0JaSA9IGZpcnN0X3R1cGxlKGxpbmssICZ0dXBsZSwgJnBhcnNlKTsKLQl3aGlsZSAoaSAhPSBDU19OT19NT1JFX0lURU1TKSB7Ci0JCWlmICgoaSA9PSBDU19TVUNDRVNTKSAmJiAoY2YtPmlvLm53aW4gPiAwKSAmJiAoKGNmLT5pby5mbGFncyAmIENJU1RQTF9JT19MSU5FU19NQVNLKSA8PSAzKSkgewotCQkJbGluay0+Y29uZi5Db25maWdJbmRleCA9IGNmLT5pbmRleDsKLQkJCWZvciAoaiA9IDA7IGogPCA1OyBqKyspIHsKLQkJCQlsaW5rLT5pby5CYXNlUG9ydDEgPSBiYXNlW2pdOwotCQkJCWxpbmstPmlvLklPQWRkckxpbmVzID0gYmFzZVtqXSA/IDE2IDogMzsKLQkJCQlpID0gcGNtY2lhX3JlcXVlc3RfaW8obGluaywgJmxpbmstPmlvKTsKLQkJCQlpZiAoaSA9PSBDU19TVUNDRVNTKQotCQkJCQlnb3RvIGZvdW5kX3BvcnQ7Ci0JCQl9Ci0JCX0KLQkJaSA9IG5leHRfdHVwbGUobGluaywgJnR1cGxlLCAmcGFyc2UpOwotCX0KKwlpZiAoIXBjbWNpYV9sb29wX2NvbmZpZyhsaW5rLCBidDNjX2NoZWNrX2NvbmZpZ19ub3RwaWNreSwgTlVMTCkpCisJCWdvdG8gZm91bmRfcG9ydDsKKworCUJUX0VSUigiTm8gdXNhYmxlIHBvcnQgcmFuZ2UgZm91bmQiKTsKKwljc19lcnJvcihsaW5rLCBSZXF1ZXN0SU8sIC1FTk9ERVYpOworCWdvdG8gZmFpbGVkOwogCiBmb3VuZF9wb3J0OgotCWlmIChpICE9IENTX1NVQ0NFU1MpIHsKLQkJQlRfRVJSKCJObyB1c2FibGUgcG9ydCByYW5nZSBmb3VuZCIpOwotCQljc19lcnJvcihsaW5rLCBSZXF1ZXN0SU8sIGkpOwotCQlnb3RvIGZhaWxlZDsKLQl9Ci0KIAlpID0gcGNtY2lhX3JlcXVlc3RfaXJxKGxpbmssICZsaW5rLT5pcnEpOwotCWlmIChpICE9IENTX1NVQ0NFU1MpIHsKKwlpZiAoaSAhPSAwKSB7CiAJCWNzX2Vycm9yKGxpbmssIFJlcXVlc3RJUlEsIGkpOwogCQlsaW5rLT5pcnEuQXNzaWduZWRJUlEgPSAwOwogCX0KIAogCWkgPSBwY21jaWFfcmVxdWVzdF9jb25maWd1cmF0aW9uKGxpbmssICZsaW5rLT5jb25mKTsKLQlpZiAoaSAhPSBDU19TVUNDRVNTKSB7CisJaWYgKGkgIT0gMCkgewogCQljc19lcnJvcihsaW5rLCBSZXF1ZXN0Q29uZmlndXJhdGlvbiwgaSk7CiAJCWdvdG8gZmFpbGVkOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmx1ZXRvb3RoL2J0dWFydF9jcy5jIGIvZHJpdmVycy9ibHVldG9vdGgvYnR1YXJ0X2NzLmMKaW5kZXggNjhkMWQyNS4uOGU1NTZiN2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmx1ZXRvb3RoL2J0dWFydF9jcy5jCisrKyBiL2RyaXZlcnMvYmx1ZXRvb3RoL2J0dWFydF9jcy5jCkBAIC02MDcsMTAyICs2MDcsNzggQEAKIAlrZnJlZShpbmZvKTsKIH0KIAotc3RhdGljIGludCBnZXRfdHVwbGUoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmhhbmRsZSwgdHVwbGVfdCAqdHVwbGUsIGNpc3BhcnNlX3QgKnBhcnNlKQorc3RhdGljIGludCBidHVhcnRfY2hlY2tfY29uZmlnKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldiwKKwkJCSAgICAgICBjaXN0cGxfY2Z0YWJsZV9lbnRyeV90ICpjZiwKKwkJCSAgICAgICBjaXN0cGxfY2Z0YWJsZV9lbnRyeV90ICpkZmx0LAorCQkJICAgICAgIHVuc2lnbmVkIGludCB2Y2MsCisJCQkgICAgICAgdm9pZCAqcHJpdl9kYXRhKQogewotCWludCBpOworCWludCAqdHJ5ID0gcHJpdl9kYXRhOwogCi0JaSA9IHBjbWNpYV9nZXRfdHVwbGVfZGF0YShoYW5kbGUsIHR1cGxlKTsKLQlpZiAoaSAhPSBDU19TVUNDRVNTKQotCQlyZXR1cm4gaTsKLQotCXJldHVybiBwY21jaWFfcGFyc2VfdHVwbGUoaGFuZGxlLCB0dXBsZSwgcGFyc2UpOworCWlmIChjZi0+dnBwMS5wcmVzZW50ICYgKDEgPDwgQ0lTVFBMX1BPV0VSX1ZOT00pKQorCQlwX2Rldi0+Y29uZi5WcHAgPSBjZi0+dnBwMS5wYXJhbVtDSVNUUExfUE9XRVJfVk5PTV0gLyAxMDAwMDsKKwlpZiAoKGNmLT5pby5ud2luID4gMCkgJiYgKGNmLT5pby53aW5bMF0ubGVuID09IDgpICYmCisJICAgIChjZi0+aW8ud2luWzBdLmJhc2UgIT0gMCkpIHsKKwkJcF9kZXYtPmlvLkJhc2VQb3J0MSA9IGNmLT5pby53aW5bMF0uYmFzZTsKKwkJcF9kZXYtPmlvLklPQWRkckxpbmVzID0gKCp0cnkgPT0gMCkgPyAxNiA6CisJCQljZi0+aW8uZmxhZ3MgJiBDSVNUUExfSU9fTElORVNfTUFTSzsKKwkJaWYgKCFwY21jaWFfcmVxdWVzdF9pbyhwX2RldiwgJnBfZGV2LT5pbykpCisJCQlyZXR1cm4gMDsKKwl9CisJcmV0dXJuIC1FTk9ERVY7CiB9CiAKLXN0YXRpYyBpbnQgZmlyc3RfdHVwbGUoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmhhbmRsZSwgdHVwbGVfdCAqdHVwbGUsIGNpc3BhcnNlX3QgKnBhcnNlKQorc3RhdGljIGludCBidHVhcnRfY2hlY2tfY29uZmlnX25vdHBpY2t5KHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldiwKKwkJCQkJY2lzdHBsX2NmdGFibGVfZW50cnlfdCAqY2YsCisJCQkJCWNpc3RwbF9jZnRhYmxlX2VudHJ5X3QgKmRmbHQsCisJCQkJCXVuc2lnbmVkIGludCB2Y2MsCisJCQkJCXZvaWQgKnByaXZfZGF0YSkKIHsKLQlpZiAocGNtY2lhX2dldF9maXJzdF90dXBsZShoYW5kbGUsIHR1cGxlKSAhPSBDU19TVUNDRVNTKQotCQlyZXR1cm4gQ1NfTk9fTU9SRV9JVEVNUzsKLQlyZXR1cm4gZ2V0X3R1cGxlKGhhbmRsZSwgdHVwbGUsIHBhcnNlKTsKLX0KKwlzdGF0aWMgdW5zaWduZWQgaW50IGJhc2VbNV0gPSB7IDB4M2Y4LCAweDJmOCwgMHgzZTgsIDB4MmU4LCAweDAgfTsKKwlpbnQgajsKIAotc3RhdGljIGludCBuZXh0X3R1cGxlKHN0cnVjdCBwY21jaWFfZGV2aWNlICpoYW5kbGUsIHR1cGxlX3QgKnR1cGxlLCBjaXNwYXJzZV90ICpwYXJzZSkKLXsKLQlpZiAocGNtY2lhX2dldF9uZXh0X3R1cGxlKGhhbmRsZSwgdHVwbGUpICE9IENTX1NVQ0NFU1MpCi0JCXJldHVybiBDU19OT19NT1JFX0lURU1TOwotCXJldHVybiBnZXRfdHVwbGUoaGFuZGxlLCB0dXBsZSwgcGFyc2UpOworCWlmICgoY2YtPmlvLm53aW4gPiAwKSAmJiAoKGNmLT5pby5mbGFncyAmIENJU1RQTF9JT19MSU5FU19NQVNLKSA8PSAzKSkgeworCQlmb3IgKGogPSAwOyBqIDwgNTsgaisrKSB7CisJCQlwX2Rldi0+aW8uQmFzZVBvcnQxID0gYmFzZVtqXTsKKwkJCXBfZGV2LT5pby5JT0FkZHJMaW5lcyA9IGJhc2Vbal0gPyAxNiA6IDM7CisJCQlpZiAoIXBjbWNpYV9yZXF1ZXN0X2lvKHBfZGV2LCAmcF9kZXYtPmlvKSkKKwkJCQlyZXR1cm4gMDsKKwkJfQorCX0KKwlyZXR1cm4gLUVOT0RFVjsKIH0KIAogc3RhdGljIGludCBidHVhcnRfY29uZmlnKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQogewotCXN0YXRpYyB1bnNpZ25lZCBpbnQgYmFzZVs1XSA9IHsgMHgzZjgsIDB4MmY4LCAweDNlOCwgMHgyZTgsIDB4MCB9OwogCWJ0dWFydF9pbmZvX3QgKmluZm8gPSBsaW5rLT5wcml2OwotCXR1cGxlX3QgdHVwbGU7Ci0JdV9zaG9ydCBidWZbMjU2XTsKLQljaXNwYXJzZV90IHBhcnNlOwotCWNpc3RwbF9jZnRhYmxlX2VudHJ5X3QgKmNmID0gJnBhcnNlLmNmdGFibGVfZW50cnk7Ci0JaW50IGksIGosIHRyeTsKKwlpbnQgaTsKKwlpbnQgdHJ5OwogCi0JLyogRmlyc3QgcGFzczogbG9vayBmb3IgYSBjb25maWcgZW50cnkgdGhhdCBsb29rcyBub3JtYWwuICovCi0JdHVwbGUuVHVwbGVEYXRhID0gKGNpc2RhdGFfdCAqKSBidWY7Ci0JdHVwbGUuVHVwbGVPZmZzZXQgPSAwOwotCXR1cGxlLlR1cGxlRGF0YU1heCA9IDI1NTsKLQl0dXBsZS5BdHRyaWJ1dGVzID0gMDsKLQl0dXBsZS5EZXNpcmVkVHVwbGUgPSBDSVNUUExfQ0ZUQUJMRV9FTlRSWTsKLQkvKiBUd28gdHJpZXM6IHdpdGhvdXQgSU8gYWxpYXNlcywgdGhlbiB3aXRoIGFsaWFzZXMgKi8KLQlmb3IgKHRyeSA9IDA7IHRyeSA8IDI7IHRyeSsrKSB7Ci0JCWkgPSBmaXJzdF90dXBsZShsaW5rLCAmdHVwbGUsICZwYXJzZSk7Ci0JCXdoaWxlIChpICE9IENTX05PX01PUkVfSVRFTVMpIHsKLQkJCWlmIChpICE9IENTX1NVQ0NFU1MpCi0JCQkJZ290byBuZXh0X2VudHJ5OwotCQkJaWYgKGNmLT52cHAxLnByZXNlbnQgJiAoMSA8PCBDSVNUUExfUE9XRVJfVk5PTSkpCi0JCQkJbGluay0+Y29uZi5WcHAgPSBjZi0+dnBwMS5wYXJhbVtDSVNUUExfUE9XRVJfVk5PTV0gLyAxMDAwMDsKLQkJCWlmICgoY2YtPmlvLm53aW4gPiAwKSAmJiAoY2YtPmlvLndpblswXS5sZW4gPT0gOCkgJiYgKGNmLT5pby53aW5bMF0uYmFzZSAhPSAwKSkgewotCQkJCWxpbmstPmNvbmYuQ29uZmlnSW5kZXggPSBjZi0+aW5kZXg7Ci0JCQkJbGluay0+aW8uQmFzZVBvcnQxID0gY2YtPmlvLndpblswXS5iYXNlOwotCQkJCWxpbmstPmlvLklPQWRkckxpbmVzID0gKHRyeSA9PSAwKSA/IDE2IDogY2YtPmlvLmZsYWdzICYgQ0lTVFBMX0lPX0xJTkVTX01BU0s7Ci0JCQkJaSA9IHBjbWNpYV9yZXF1ZXN0X2lvKGxpbmssICZsaW5rLT5pbyk7Ci0JCQkJaWYgKGkgPT0gQ1NfU1VDQ0VTUykKLQkJCQkJZ290byBmb3VuZF9wb3J0OwotCQkJfQotbmV4dF9lbnRyeToKLQkJCWkgPSBuZXh0X3R1cGxlKGxpbmssICZ0dXBsZSwgJnBhcnNlKTsKLQkJfQotCX0KKwkvKiBGaXJzdCBwYXNzOiBsb29rIGZvciBhIGNvbmZpZyBlbnRyeSB0aGF0IGxvb2tzIG5vcm1hbC4KKwkgICBUd28gdHJpZXM6IHdpdGhvdXQgSU8gYWxpYXNlcywgdGhlbiB3aXRoIGFsaWFzZXMgKi8KKwlmb3IgKHRyeSA9IDA7IHRyeSA8IDI7IHRyeSsrKQorCQlpZiAoIXBjbWNpYV9sb29wX2NvbmZpZyhsaW5rLCBidHVhcnRfY2hlY2tfY29uZmlnLCAmdHJ5KSkKKwkJCWdvdG8gZm91bmRfcG9ydDsKIAogCS8qIFNlY29uZCBwYXNzOiB0cnkgdG8gZmluZCBhbiBlbnRyeSB0aGF0IGlzbid0IHBpY2t5IGFib3V0CiAJICAgaXRzIGJhc2UgYWRkcmVzcywgdGhlbiB0cnkgdG8gZ3JhYiBhbnkgc3RhbmRhcmQgc2VyaWFsIHBvcnQKIAkgICBhZGRyZXNzLCBhbmQgZmluYWxseSB0cnkgdG8gZ2V0IGFueSBmcmVlIHBvcnQuICovCi0JaSA9IGZpcnN0X3R1cGxlKGxpbmssICZ0dXBsZSwgJnBhcnNlKTsKLQl3aGlsZSAoaSAhPSBDU19OT19NT1JFX0lURU1TKSB7Ci0JCWlmICgoaSA9PSBDU19TVUNDRVNTKSAmJiAoY2YtPmlvLm53aW4gPiAwKQotCQkgICAgJiYgKChjZi0+aW8uZmxhZ3MgJiBDSVNUUExfSU9fTElORVNfTUFTSykgPD0gMykpIHsKLQkJCWxpbmstPmNvbmYuQ29uZmlnSW5kZXggPSBjZi0+aW5kZXg7Ci0JCQlmb3IgKGogPSAwOyBqIDwgNTsgaisrKSB7Ci0JCQkJbGluay0+aW8uQmFzZVBvcnQxID0gYmFzZVtqXTsKLQkJCQlsaW5rLT5pby5JT0FkZHJMaW5lcyA9IGJhc2Vbal0gPyAxNiA6IDM7Ci0JCQkJaSA9IHBjbWNpYV9yZXF1ZXN0X2lvKGxpbmssICZsaW5rLT5pbyk7Ci0JCQkJaWYgKGkgPT0gQ1NfU1VDQ0VTUykKLQkJCQkJZ290byBmb3VuZF9wb3J0OwotCQkJfQotCQl9Ci0JCWkgPSBuZXh0X3R1cGxlKGxpbmssICZ0dXBsZSwgJnBhcnNlKTsKLQl9CisJaWYgKCFwY21jaWFfbG9vcF9jb25maWcobGluaywgYnR1YXJ0X2NoZWNrX2NvbmZpZ19ub3RwaWNreSwgTlVMTCkpCisJCWdvdG8gZm91bmRfcG9ydDsKKworCUJUX0VSUigiTm8gdXNhYmxlIHBvcnQgcmFuZ2UgZm91bmQiKTsKKwljc19lcnJvcihsaW5rLCBSZXF1ZXN0SU8sIC1FTk9ERVYpOworCWdvdG8gZmFpbGVkOwogCiBmb3VuZF9wb3J0OgotCWlmIChpICE9IENTX1NVQ0NFU1MpIHsKLQkJQlRfRVJSKCJObyB1c2FibGUgcG9ydCByYW5nZSBmb3VuZCIpOwotCQljc19lcnJvcihsaW5rLCBSZXF1ZXN0SU8sIGkpOwotCQlnb3RvIGZhaWxlZDsKLQl9Ci0KIAlpID0gcGNtY2lhX3JlcXVlc3RfaXJxKGxpbmssICZsaW5rLT5pcnEpOwotCWlmIChpICE9IENTX1NVQ0NFU1MpIHsKKwlpZiAoaSAhPSAwKSB7CiAJCWNzX2Vycm9yKGxpbmssIFJlcXVlc3RJUlEsIGkpOwogCQlsaW5rLT5pcnEuQXNzaWduZWRJUlEgPSAwOwogCX0KIAogCWkgPSBwY21jaWFfcmVxdWVzdF9jb25maWd1cmF0aW9uKGxpbmssICZsaW5rLT5jb25mKTsKLQlpZiAoaSAhPSBDU19TVUNDRVNTKSB7CisJaWYgKGkgIT0gMCkgewogCQljc19lcnJvcihsaW5rLCBSZXF1ZXN0Q29uZmlndXJhdGlvbiwgaSk7CiAJCWdvdG8gZmFpbGVkOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmx1ZXRvb3RoL2R0bDFfY3MuYyBiL2RyaXZlcnMvYmx1ZXRvb3RoL2R0bDFfY3MuYwppbmRleCBkYWU0NWNkZi4uZTZlNmIwMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibHVldG9vdGgvZHRsMV9jcy5jCisrKyBiL2RyaXZlcnMvYmx1ZXRvb3RoL2R0bDFfY3MuYwpAQCAtNTkwLDc1ICs1OTAsNDAgQEAKIAlrZnJlZShpbmZvKTsKIH0KIAotc3RhdGljIGludCBnZXRfdHVwbGUoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmhhbmRsZSwgdHVwbGVfdCAqdHVwbGUsIGNpc3BhcnNlX3QgKnBhcnNlKQorc3RhdGljIGludCBkdGwxX2NvbmZjaGVjayhzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYsCisJCQkgIGNpc3RwbF9jZnRhYmxlX2VudHJ5X3QgKmNmLAorCQkJICBjaXN0cGxfY2Z0YWJsZV9lbnRyeV90ICpkZmx0LAorCQkJICB1bnNpZ25lZCBpbnQgdmNjLAorCQkJICB2b2lkICpwcml2X2RhdGEpCiB7Ci0JaW50IGk7Ci0KLQlpID0gcGNtY2lhX2dldF90dXBsZV9kYXRhKGhhbmRsZSwgdHVwbGUpOwotCWlmIChpICE9IENTX1NVQ0NFU1MpCi0JCXJldHVybiBpOwotCi0JcmV0dXJuIHBjbWNpYV9wYXJzZV90dXBsZShoYW5kbGUsIHR1cGxlLCBwYXJzZSk7Ci19Ci0KLXN0YXRpYyBpbnQgZmlyc3RfdHVwbGUoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmhhbmRsZSwgdHVwbGVfdCAqdHVwbGUsIGNpc3BhcnNlX3QgKnBhcnNlKQotewotCWlmIChwY21jaWFfZ2V0X2ZpcnN0X3R1cGxlKGhhbmRsZSwgdHVwbGUpICE9IENTX1NVQ0NFU1MpCi0JCXJldHVybiBDU19OT19NT1JFX0lURU1TOwotCXJldHVybiBnZXRfdHVwbGUoaGFuZGxlLCB0dXBsZSwgcGFyc2UpOwotfQotCi1zdGF0aWMgaW50IG5leHRfdHVwbGUoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmhhbmRsZSwgdHVwbGVfdCAqdHVwbGUsIGNpc3BhcnNlX3QgKnBhcnNlKQotewotCWlmIChwY21jaWFfZ2V0X25leHRfdHVwbGUoaGFuZGxlLCB0dXBsZSkgIT0gQ1NfU1VDQ0VTUykKLQkJcmV0dXJuIENTX05PX01PUkVfSVRFTVM7Ci0JcmV0dXJuIGdldF90dXBsZShoYW5kbGUsIHR1cGxlLCBwYXJzZSk7CisJaWYgKChjZi0+aW8ubndpbiA9PSAxKSAmJiAoY2YtPmlvLndpblswXS5sZW4gPiA4KSkgeworCQlwX2Rldi0+aW8uQmFzZVBvcnQxID0gY2YtPmlvLndpblswXS5iYXNlOworCQlwX2Rldi0+aW8uTnVtUG9ydHMxID0gY2YtPmlvLndpblswXS5sZW47CS8qeW8gKi8KKwkJcF9kZXYtPmlvLklPQWRkckxpbmVzID0gY2YtPmlvLmZsYWdzICYgQ0lTVFBMX0lPX0xJTkVTX01BU0s7CisJCWlmICghcGNtY2lhX3JlcXVlc3RfaW8ocF9kZXYsICZwX2Rldi0+aW8pKQorCQkJcmV0dXJuIDA7CisJfQorCXJldHVybiAtRU5PREVWOwogfQogCiBzdGF0aWMgaW50IGR0bDFfY29uZmlnKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQogewogCWR0bDFfaW5mb190ICppbmZvID0gbGluay0+cHJpdjsKLQl0dXBsZV90IHR1cGxlOwotCXVfc2hvcnQgYnVmWzI1Nl07Ci0JY2lzcGFyc2VfdCBwYXJzZTsKLQljaXN0cGxfY2Z0YWJsZV9lbnRyeV90ICpjZiA9ICZwYXJzZS5jZnRhYmxlX2VudHJ5OwogCWludCBpOwogCi0JdHVwbGUuVHVwbGVEYXRhID0gKGNpc2RhdGFfdCAqKWJ1ZjsKLQl0dXBsZS5UdXBsZU9mZnNldCA9IDA7Ci0JdHVwbGUuVHVwbGVEYXRhTWF4ID0gMjU1OwotCXR1cGxlLkF0dHJpYnV0ZXMgPSAwOwotCXR1cGxlLkRlc2lyZWRUdXBsZSA9IENJU1RQTF9DRlRBQkxFX0VOVFJZOwotCiAJLyogTG9vayBmb3IgYSBnZW5lcmljIGZ1bGwtc2l6ZWQgd2luZG93ICovCiAJbGluay0+aW8uTnVtUG9ydHMxID0gODsKLQlpID0gZmlyc3RfdHVwbGUobGluaywgJnR1cGxlLCAmcGFyc2UpOwotCXdoaWxlIChpICE9IENTX05PX01PUkVfSVRFTVMpIHsKLQkJaWYgKChpID09IENTX1NVQ0NFU1MpICYmIChjZi0+aW8ubndpbiA9PSAxKSAmJiAoY2YtPmlvLndpblswXS5sZW4gPiA4KSkgewotCQkJbGluay0+Y29uZi5Db25maWdJbmRleCA9IGNmLT5pbmRleDsKLQkJCWxpbmstPmlvLkJhc2VQb3J0MSA9IGNmLT5pby53aW5bMF0uYmFzZTsKLQkJCWxpbmstPmlvLk51bVBvcnRzMSA9IGNmLT5pby53aW5bMF0ubGVuOwkvKnlvICovCi0JCQlsaW5rLT5pby5JT0FkZHJMaW5lcyA9IGNmLT5pby5mbGFncyAmIENJU1RQTF9JT19MSU5FU19NQVNLOwotCQkJaSA9IHBjbWNpYV9yZXF1ZXN0X2lvKGxpbmssICZsaW5rLT5pbyk7Ci0JCQlpZiAoaSA9PSBDU19TVUNDRVNTKQotCQkJCWJyZWFrOwotCQl9Ci0JCWkgPSBuZXh0X3R1cGxlKGxpbmssICZ0dXBsZSwgJnBhcnNlKTsKLQl9Ci0KLQlpZiAoaSAhPSBDU19TVUNDRVNTKSB7Ci0JCWNzX2Vycm9yKGxpbmssIFJlcXVlc3RJTywgaSk7CisJaWYgKCFwY21jaWFfbG9vcF9jb25maWcobGluaywgZHRsMV9jb25mY2hlY2ssIE5VTEwpKQogCQlnb3RvIGZhaWxlZDsKLQl9CiAKIAlpID0gcGNtY2lhX3JlcXVlc3RfaXJxKGxpbmssICZsaW5rLT5pcnEpOwotCWlmIChpICE9IENTX1NVQ0NFU1MpIHsKKwlpZiAoaSAhPSAwKSB7CiAJCWNzX2Vycm9yKGxpbmssIFJlcXVlc3RJUlEsIGkpOwogCQlsaW5rLT5pcnEuQXNzaWduZWRJUlEgPSAwOwogCX0KIAogCWkgPSBwY21jaWFfcmVxdWVzdF9jb25maWd1cmF0aW9uKGxpbmssICZsaW5rLT5jb25mKTsKLQlpZiAoaSAhPSBDU19TVUNDRVNTKSB7CisJaWYgKGkgIT0gMCkgewogCQljc19lcnJvcihsaW5rLCBSZXF1ZXN0Q29uZmlndXJhdGlvbiwgaSk7CiAJCWdvdG8gZmFpbGVkOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmx1ZXRvb3RoL2hjaV9sZGlzYy5jIGIvZHJpdmVycy9ibHVldG9vdGgvaGNpX2xkaXNjLmMKaW5kZXggOGRmY2Y3Ny4uNDQyNmJiNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibHVldG9vdGgvaGNpX2xkaXNjLmMKKysrIGIvZHJpdmVycy9ibHVldG9vdGgvaGNpX2xkaXNjLmMKQEAgLTQ4NCw3ICs0ODQsNyBAQAogCQlyZXR1cm4gLUVVTkFUQ0g7CiAKIAlkZWZhdWx0OgotCQllcnIgPSBuX3R0eV9pb2N0bCh0dHksIGZpbGUsIGNtZCwgYXJnKTsKKwkJZXJyID0gbl90dHlfaW9jdGxfaGVscGVyKHR0eSwgZmlsZSwgY21kLCBhcmcpOwogCQlicmVhazsKIAl9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvS2NvbmZpZyBiL2RyaXZlcnMvY2hhci9LY29uZmlnCmluZGV4IGNhZmY4NTEuLjEyMjI1NDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9LY29uZmlnCisrKyBiL2RyaXZlcnMvY2hhci9LY29uZmlnCkBAIC0zNTAsNyArMzUwLDcgQEAKIAogY29uZmlnIFNUQUxMSU9OCiAJdHJpc3RhdGUgIlN0YWxsaW9uIEVhc3lJTyBvciBFQzgvMzIgc3VwcG9ydCIKLQlkZXBlbmRzIG9uIFNUQUxEUlYgJiYgQlJPS0VOX09OX1NNUCAmJiAoSVNBIHx8IEVJU0EgfHwgUENJKQorCWRlcGVuZHMgb24gU1RBTERSViAmJiAoSVNBIHx8IEVJU0EgfHwgUENJKQogCWhlbHAKIAkgIElmIHlvdSBoYXZlIGFuIEVhc3lJTyBvciBFYXN5Q29ubmVjdGlvbiA4LzMyIG11bHRpcG9ydCBTdGFsbGlvbgogCSAgY2FyZCwgdGhlbiB0aGlzIGlzIGZvciB5b3U7IHNheSBZLiAgTWFrZSBzdXJlIHRvIHJlYWQKQEAgLTM2MSw3ICszNjEsNyBAQAogCiBjb25maWcgSVNUQUxMSU9OCiAJdHJpc3RhdGUgIlN0YWxsaW9uIEVDOC82NCwgT05ib2FyZCwgQnJ1bWJ5IHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBTVEFMRFJWICYmIEJST0tFTl9PTl9TTVAgJiYgKElTQSB8fCBFSVNBIHx8IFBDSSkKKwlkZXBlbmRzIG9uIFNUQUxEUlYgJiYgKElTQSB8fCBFSVNBIHx8IFBDSSkKIAloZWxwCiAJICBJZiB5b3UgaGF2ZSBhbiBFYXN5Q29ubmVjdGlvbiA4LzY0LCBPTmJvYXJkLCBCcnVtYnkgb3IgU3RhbGxpb24KIAkgIHNlcmlhbCBtdWx0aXBvcnQgY2FyZCwgc2F5IFkgaGVyZS4gTWFrZSBzdXJlIHRvIHJlYWQKQEAgLTEwNDMsMTUgKzEwNDMsNiBAQAogCSAgb3BlbiBzZWxlY3RzIG9uZSBvZiB0aGUgdGltZXJzIHN1cHBvcnRlZCBieSB0aGUgSFBFVC4gIFRoZSB0aW1lcnMgYXJlCiAJICBub24tcGVyaW9kaWMgYW5kL29yIHBlcmlvZGljLgogCi1jb25maWcgSFBFVF9SVENfSVJRCi0JYm9vbAotCWRlZmF1bHQgSFBFVF9FTVVMQVRFX1JUQwotCWRlcGVuZHMgb24gUlRDICYmIEhQRVQKLQloZWxwCi0JICBJZiB5b3Ugc2F5IFkgaGVyZSwgeW91IHdpbGwgZGlzYWJsZSBSVENfSVJRIGluIGRyaXZlcnMvY2hhci9ydGMuYy4gSXQKLQkgIGlzIGFzc3VtZWQgdGhlIHBsYXRmb3JtIGNhbGxlZCBocGV0X2FsbG9jIHdpdGggdGhlIFJUQyBJUlEgdmFsdWVzIGZvcgotCSAgdGhlIEhQRVQgdGltZXJzLgotCiBjb25maWcgSFBFVF9NTUFQCiAJYm9vbCAiQWxsb3cgbW1hcCBvZiBIUEVUIgogCWRlZmF1bHQgeQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL01ha2VmaWxlIGIvZHJpdmVycy9jaGFyL01ha2VmaWxlCmluZGV4IDY4NTBmNmQuLjFhNDI0N2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2NoYXIvTWFrZWZpbGUKQEAgLTcsNyArNyw3IEBACiAjCiBGT05UTUFQRklMRSA9IGNwNDM3LnVuaQogCi1vYmoteQkgKz0gbWVtLm8gcmFuZG9tLm8gdHR5X2lvLm8gbl90dHkubyB0dHlfaW9jdGwubyB0dHlfbGRpc2MubyAKK29iai15CSArPSBtZW0ubyByYW5kb20ubyB0dHlfaW8ubyBuX3R0eS5vIHR0eV9pb2N0bC5vIHR0eV9sZGlzYy5vIHR0eV9idWZmZXIubyB0dHlfcG9ydC5vCiAKIG9iai0kKENPTkZJR19MRUdBQ1lfUFRZUykJKz0gcHR5Lm8KIG9iai0kKENPTkZJR19VTklYOThfUFRZUykJKz0gcHR5Lm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9hZ3AvYWxpLWFncC5jIGIvZHJpdmVycy9jaGFyL2FncC9hbGktYWdwLmMKaW5kZXggMzFkY2Q5MS4uZGM4ZDFhOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2FncC9hbGktYWdwLmMKKysrIGIvZHJpdmVycy9jaGFyL2FncC9hbGktYWdwLmMKQEAgLTQxNyw2ICs0MTcsNiBAQAogbW9kdWxlX2luaXQoYWdwX2FsaV9pbml0KTsKIG1vZHVsZV9leGl0KGFncF9hbGlfY2xlYW51cCk7CiAKLU1PRFVMRV9BVVRIT1IoIkRhdmUgSm9uZXMgPGRhdmVqQGNvZGVtb25rZXkub3JnLnVrPiIpOworTU9EVUxFX0FVVEhPUigiRGF2ZSBKb25lcyA8ZGF2ZWpAcmVkaGF0LmNvbT4iKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwgYW5kIGFkZGl0aW9uYWwgcmlnaHRzIik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9hZ3AvYW1kLWs3LWFncC5jIGIvZHJpdmVycy9jaGFyL2FncC9hbWQtazctYWdwLmMKaW5kZXggNjAzYTk4Ni4uM2Y5ODI1NGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9hZ3AvYW1kLWs3LWFncC5jCisrKyBiL2RyaXZlcnMvY2hhci9hZ3AvYW1kLWs3LWFncC5jCkBAIC0yMjMsMTIgKzIyMywxNCBAQAogCiAJY3VycmVudF9zaXplID0gQV9TSVpFX0xWTDIoYWdwX2JyaWRnZS0+Y3VycmVudF9zaXplKTsKIAotCS8qIEdldCB0aGUgbWVtb3J5IG1hcHBlZCByZWdpc3RlcnMgKi8KLQlwY2lfcmVhZF9jb25maWdfZHdvcmQoYWdwX2JyaWRnZS0+ZGV2LCBBTURfTU1CQVNFLCAmdGVtcCk7Ci0JdGVtcCA9ICh0ZW1wICYgUENJX0JBU0VfQUREUkVTU19NRU1fTUFTSyk7Ci0JYW1kX2lyb25nYXRlX3ByaXZhdGUucmVnaXN0ZXJzID0gKHZvbGF0aWxlIHU4IF9faW9tZW0gKikgaW9yZW1hcCh0ZW1wLCA0MDk2KTsKLQlpZiAoIWFtZF9pcm9uZ2F0ZV9wcml2YXRlLnJlZ2lzdGVycykKLQkJcmV0dXJuIC1FTk9NRU07CisJaWYgKCFhbWRfaXJvbmdhdGVfcHJpdmF0ZS5yZWdpc3RlcnMpIHsKKwkJLyogR2V0IHRoZSBtZW1vcnkgbWFwcGVkIHJlZ2lzdGVycyAqLworCQlwY2lfcmVhZF9jb25maWdfZHdvcmQoYWdwX2JyaWRnZS0+ZGV2LCBBTURfTU1CQVNFLCAmdGVtcCk7CisJCXRlbXAgPSAodGVtcCAmIFBDSV9CQVNFX0FERFJFU1NfTUVNX01BU0spOworCQlhbWRfaXJvbmdhdGVfcHJpdmF0ZS5yZWdpc3RlcnMgPSAodm9sYXRpbGUgdTggX19pb21lbSAqKSBpb3JlbWFwKHRlbXAsIDQwOTYpOworCQlpZiAoIWFtZF9pcm9uZ2F0ZV9wcml2YXRlLnJlZ2lzdGVycykKKwkJCXJldHVybiAtRU5PTUVNOworCX0KIAogCS8qIFdyaXRlIG91dCB0aGUgYWRkcmVzcyBvZiB0aGUgZ2F0dCB0YWJsZSAqLwogCXdyaXRlbChhZ3BfYnJpZGdlLT5nYXR0X2J1c19hZGRyLCBhbWRfaXJvbmdhdGVfcHJpdmF0ZS5yZWdpc3RlcnMrQU1EX0FUVEJBU0UpOwpAQCAtNDkyLDYgKzQ5NCwyNiBAQAogCWFncF9wdXRfYnJpZGdlKGJyaWRnZSk7CiB9CiAKKyNpZmRlZiBDT05GSUdfUE0KKworc3RhdGljIGludCBhZ3BfYW1kazdfc3VzcGVuZChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQoreworCXBjaV9zYXZlX3N0YXRlKHBkZXYpOworCXBjaV9zZXRfcG93ZXJfc3RhdGUocGRldiwgcGNpX2Nob29zZV9zdGF0ZShwZGV2LCBzdGF0ZSkpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYWdwX2FtZGs3X3Jlc3VtZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKK3sKKwlwY2lfc2V0X3Bvd2VyX3N0YXRlKHBkZXYsIFBDSV9EMCk7CisJcGNpX3Jlc3RvcmVfc3RhdGUocGRldik7CisKKwlyZXR1cm4gYW1kX2lyb25nYXRlX2RyaXZlci5jb25maWd1cmUoKTsKK30KKworI2VuZGlmIC8qIENPTkZJR19QTSAqLworCiAvKiBtdXN0IGJlIHRoZSBzYW1lIG9yZGVyIGFzIG5hbWUgdGFibGUgYWJvdmUgKi8KIHN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBhZ3BfYW1kazdfcGNpX3RhYmxlW10gPSB7CiAJewpAQCAtNTI4LDYgKzU1MCwxMCBAQAogCS5pZF90YWJsZQk9IGFncF9hbWRrN19wY2lfdGFibGUsCiAJLnByb2JlCQk9IGFncF9hbWRrN19wcm9iZSwKIAkucmVtb3ZlCQk9IGFncF9hbWRrN19yZW1vdmUsCisjaWZkZWYgQ09ORklHX1BNCisJLnN1c3BlbmQJPSBhZ3BfYW1kazdfc3VzcGVuZCwKKwkucmVzdW1lCQk9IGFncF9hbWRrN19yZXN1bWUsCisjZW5kaWYKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IGFncF9hbWRrN19pbml0KHZvaWQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvYWdwL2FtZDY0LWFncC5jIGIvZHJpdmVycy9jaGFyL2FncC9hbWQ2NC1hZ3AuYwppbmRleCAyODEyZWUyLi41MmY0MzYxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvYWdwL2FtZDY0LWFncC5jCisrKyBiL2RyaXZlcnMvY2hhci9hZ3AvYW1kNjQtYWdwLmMKQEAgLTc3Miw2ICs3NzIsNiBAQAogbW9kdWxlX2V4aXQoYWdwX2FtZDY0X2NsZWFudXApOwogI2VuZGlmCiAKLU1PRFVMRV9BVVRIT1IoIkRhdmUgSm9uZXMgPGRhdmVqQGNvZGVtb25rZXkub3JnLnVrPiwgQW5kaSBLbGVlbiIpOworTU9EVUxFX0FVVEhPUigiRGF2ZSBKb25lcyA8ZGF2ZWpAcmVkaGF0LmNvbT4sIEFuZGkgS2xlZW4iKTsKIG1vZHVsZV9wYXJhbShhZ3BfdHJ5X3Vuc3VwcG9ydGVkLCBib29sLCAwKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9hZ3AvYXRpLWFncC5jIGIvZHJpdmVycy9jaGFyL2FncC9hdGktYWdwLmMKaW5kZXggYWUyNzkxYi4uZjE1MzdlZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2FncC9hdGktYWdwLmMKKysrIGIvZHJpdmVycy9jaGFyL2FncC9hdGktYWdwLmMKQEAgLTU2MSw2ICs1NjEsNiBAQAogbW9kdWxlX2luaXQoYWdwX2F0aV9pbml0KTsKIG1vZHVsZV9leGl0KGFncF9hdGlfY2xlYW51cCk7CiAKLU1PRFVMRV9BVVRIT1IoIkRhdmUgSm9uZXMgPGRhdmVqQGNvZGVtb25rZXkub3JnLnVrPiIpOworTU9EVUxFX0FVVEhPUigiRGF2ZSBKb25lcyA8ZGF2ZWpAcmVkaGF0LmNvbT4iKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwgYW5kIGFkZGl0aW9uYWwgcmlnaHRzIik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9hZ3AvYmFja2VuZC5jIGIvZHJpdmVycy9jaGFyL2FncC9iYWNrZW5kLmMKaW5kZXggM2EzY2MwMy4uOGM2MTdhZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2FncC9iYWNrZW5kLmMKKysrIGIvZHJpdmVycy9jaGFyL2FncC9iYWNrZW5kLmMKQEAgLTM0OSw3ICszNDksNyBAQAogX19zZXR1cCgiYWdwPSIsIGFncF9zZXR1cCk7CiAjZW5kaWYKIAotTU9EVUxFX0FVVEhPUigiRGF2ZSBKb25lcyA8ZGF2ZWpAY29kZW1vbmtleS5vcmcudWs+Iik7CitNT0RVTEVfQVVUSE9SKCJEYXZlIEpvbmVzIDxkYXZlakByZWRoYXQuY29tPiIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJBR1AgR0FSVCBkcml2ZXIiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwgYW5kIGFkZGl0aW9uYWwgcmlnaHRzIik7CiBNT0RVTEVfQUxJQVNfTUlTQ0RFVihBR1BHQVJUX01JTk9SKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9hZ3AvaW50ZWwtYWdwLmMgYi9kcml2ZXJzL2NoYXIvYWdwL2ludGVsLWFncC5jCmluZGV4IDA0M2UzNjYuLjljZjZlOWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9hZ3AvaW50ZWwtYWdwLmMKKysrIGIvZHJpdmVycy9jaGFyL2FncC9pbnRlbC1hZ3AuYwpAQCAtNTQsOCArNTQsNyBAQAogCQkgYWdwX2JyaWRnZS0+ZGV2LT5kZXZpY2UgPT0gUENJX0RFVklDRV9JRF9JTlRFTF84Mjk2NVFfSEIgfHwgXAogCQkgYWdwX2JyaWRnZS0+ZGV2LT5kZXZpY2UgPT0gUENJX0RFVklDRV9JRF9JTlRFTF84Mjk2NUdfSEIgfHwgXAogCQkgYWdwX2JyaWRnZS0+ZGV2LT5kZXZpY2UgPT0gUENJX0RFVklDRV9JRF9JTlRFTF84Mjk2NUdNX0hCIHx8IFwKLQkJIGFncF9icmlkZ2UtPmRldi0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfSU5URUxfODI5NjVHTUVfSEIgfHwgXAotCQkgYWdwX2JyaWRnZS0+ZGV2LT5kZXZpY2UgPT0gUENJX0RFVklDRV9JRF9JTlRFTF9HTTQ1X0hCKQorCQkgYWdwX2JyaWRnZS0+ZGV2LT5kZXZpY2UgPT0gUENJX0RFVklDRV9JRF9JTlRFTF84Mjk2NUdNRV9IQikKIAogI2RlZmluZSBJU19HMzMgKGFncF9icmlkZ2UtPmRldi0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfSU5URUxfRzMzX0hCIHx8IFwKIAkJYWdwX2JyaWRnZS0+ZGV2LT5kZXZpY2UgPT0gUENJX0RFVklDRV9JRF9JTlRFTF9RMzVfSEIgfHwgXApAQCAtNjMsNyArNjIsOCBAQAogCiAjZGVmaW5lIElTX0c0WCAoYWdwX2JyaWRnZS0+ZGV2LT5kZXZpY2UgPT0gUENJX0RFVklDRV9JRF9JTlRFTF9JR0RfRV9IQiB8fCBcCiAJCWFncF9icmlkZ2UtPmRldi0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfSU5URUxfUTQ1X0hCIHx8IFwKLQkJYWdwX2JyaWRnZS0+ZGV2LT5kZXZpY2UgPT0gUENJX0RFVklDRV9JRF9JTlRFTF9HNDVfSEIpCisJCWFncF9icmlkZ2UtPmRldi0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfSU5URUxfRzQ1X0hCIHx8IFwKKwkJYWdwX2JyaWRnZS0+ZGV2LT5kZXZpY2UgPT0gUENJX0RFVklDRV9JRF9JTlRFTF9HTTQ1X0hCKQogCiBleHRlcm4gaW50IGFncF9tZW1vcnlfcmVzZXJ2ZWQ7CiAKQEAgLTIxNCw4ICsyMTQsOCBAQAogCWlmIChhZ3BfYnJpZGdlLT5kcml2ZXItPm5lZWRzX3NjcmF0Y2hfcGFnZSkgewogCQlmb3IgKGkgPSAwOyBpIDwgY3VycmVudF9zaXplLT5udW1fZW50cmllczsgaSsrKSB7CiAJCQl3cml0ZWwoYWdwX2JyaWRnZS0+c2NyYXRjaF9wYWdlLCBpbnRlbF9wcml2YXRlLnJlZ2lzdGVycytJODEwX1BURV9CQVNFKyhpKjQpKTsKLQkJCXJlYWRsKGludGVsX3ByaXZhdGUucmVnaXN0ZXJzK0k4MTBfUFRFX0JBU0UrKGkqNCkpOwkvKiBQQ0kgcG9zdGluZy4gKi8KIAkJfQorCQlyZWFkbChpbnRlbF9wcml2YXRlLnJlZ2lzdGVycytJODEwX1BURV9CQVNFKygoaS0xKSo0KSk7CS8qIFBDSSBwb3N0aW5nLiAqLwogCX0KIAlnbG9iYWxfY2FjaGVfZmx1c2goKTsKIAlyZXR1cm4gMDsKQEAgLTUyNSw4ICs1MjUsMTAgQEAKIAkJc2l6ZSArPSA0OwogCX0gZWxzZSBpZiAoSVNfRzRYKSB7CiAJCS8qIE9uIDQgc2VyaWVzIGhhcmR3YXJlLCBHVFQgc3RvbGVuIGlzIHNlcGFyYXRlIGZyb20gZ3JhcGhpY3MKLQkJICogc3RvbGVuLCBpZ25vcmUgaXQgaW4gc3RvbGVuIGd0dCBlbnRyaWVzIGNvdW50aW5nICovCi0JCXNpemUgPSAwOworCQkgKiBzdG9sZW4sIGlnbm9yZSBpdCBpbiBzdG9sZW4gZ3R0IGVudHJpZXMgY291bnRpbmcuICBIb3dldmVyLAorCQkgKiA0S0Igb2YgdGhlIHN0b2xlbiBtZW1vcnkgZG9lc24ndCBnZXQgbWFwcGVkIHRvIHRoZSBHVFQuCisJCSAqLworCQlzaXplID0gNDsKIAl9IGVsc2UgewogCQkvKiBPbiBwcmV2aW91cyBoYXJkd2FyZSwgdGhlIEdUVCBzaXplIHdhcyBqdXN0IHdoYXQgd2FzCiAJCSAqIHJlcXVpcmVkIHRvIG1hcCB0aGUgYXBlcnR1cmUuCkBAIC03NzMsOCArNzc1LDggQEAKIAlpZiAoYWdwX2JyaWRnZS0+ZHJpdmVyLT5uZWVkc19zY3JhdGNoX3BhZ2UpIHsKIAkJZm9yIChpID0gaW50ZWxfcHJpdmF0ZS5ndHRfZW50cmllczsgaSA8IGN1cnJlbnRfc2l6ZS0+bnVtX2VudHJpZXM7IGkrKykgewogCQkJd3JpdGVsKGFncF9icmlkZ2UtPnNjcmF0Y2hfcGFnZSwgaW50ZWxfcHJpdmF0ZS5yZWdpc3RlcnMrSTgxMF9QVEVfQkFTRSsoaSo0KSk7Ci0JCQlyZWFkbChpbnRlbF9wcml2YXRlLnJlZ2lzdGVycytJODEwX1BURV9CQVNFKyhpKjQpKTsJLyogUENJIFBvc3RpbmcuICovCiAJCX0KKwkJcmVhZGwoaW50ZWxfcHJpdmF0ZS5yZWdpc3RlcnMrSTgxMF9QVEVfQkFTRSsoKGktMSkqNCkpOwkvKiBQQ0kgUG9zdGluZy4gKi8KIAl9CiAKIAlnbG9iYWxfY2FjaGVfZmx1c2goKTsKQEAgLTk4OSw4ICs5OTEsOCBAQAogCWlmIChhZ3BfYnJpZGdlLT5kcml2ZXItPm5lZWRzX3NjcmF0Y2hfcGFnZSkgewogCQlmb3IgKGkgPSBpbnRlbF9wcml2YXRlLmd0dF9lbnRyaWVzOyBpIDwgY3VycmVudF9zaXplLT5udW1fZW50cmllczsgaSsrKSB7CiAJCQl3cml0ZWwoYWdwX2JyaWRnZS0+c2NyYXRjaF9wYWdlLCBpbnRlbF9wcml2YXRlLmd0dCtpKTsKLQkJCXJlYWRsKGludGVsX3ByaXZhdGUuZ3R0K2kpOwkvKiBQQ0kgUG9zdGluZy4gKi8KIAkJfQorCQlyZWFkbChpbnRlbF9wcml2YXRlLmd0dCtpLTEpOwkvKiBQQ0kgUG9zdGluZy4gKi8KIAl9CiAKIAlnbG9iYWxfY2FjaGVfZmx1c2goKTsKQEAgLTIzODgsNSArMjM5MCw1IEBACiBtb2R1bGVfaW5pdChhZ3BfaW50ZWxfaW5pdCk7CiBtb2R1bGVfZXhpdChhZ3BfaW50ZWxfY2xlYW51cCk7CiAKLU1PRFVMRV9BVVRIT1IoIkRhdmUgSm9uZXMgPGRhdmVqQGNvZGVtb25rZXkub3JnLnVrPiIpOworTU9EVUxFX0FVVEhPUigiRGF2ZSBKb25lcyA8ZGF2ZWpAcmVkaGF0LmNvbT4iKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwgYW5kIGFkZGl0aW9uYWwgcmlnaHRzIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvYWdwL252aWRpYS1hZ3AuYyBiL2RyaXZlcnMvY2hhci9hZ3AvbnZpZGlhLWFncC5jCmluZGV4IGRjNzBkMzcuLjE2YWNlZTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9hZ3AvbnZpZGlhLWFncC5jCisrKyBiL2RyaXZlcnMvY2hhci9hZ3AvbnZpZGlhLWFncC5jCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqIE52aWRpYSBBR1BHQVJUIHJvdXRpbmVzLgogICogQmFzZWQgdXBvbiBhIDIuNCBhZ3BnYXJ0IGRpZmYgYnkgdGhlIGZvbGtzIGZyb20gTlZJRElBLCBhbmQgaGFja2VkIHVwCi0gKiB0byB3b3JrIGluIDIuNSBieSBEYXZlIEpvbmVzIDxkYXZlakBjb2RlbW9ua2V5Lm9yZy51az4KKyAqIHRvIHdvcmsgaW4gMi41IGJ5IERhdmUgSm9uZXMgPGRhdmVqQHJlZGhhdC5jb20+CiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgpAQCAtMjAxLDEwICsyMDEsMTUgQEAKIHN0YXRpYyBpbnQgbnZpZGlhX2luc2VydF9tZW1vcnkoc3RydWN0IGFncF9tZW1vcnkgKm1lbSwgb2ZmX3QgcGdfc3RhcnQsIGludCB0eXBlKQogewogCWludCBpLCBqOworCWludCBtYXNrX3R5cGU7CiAKLQlpZiAoKHR5cGUgIT0gMCkgfHwgKG1lbS0+dHlwZSAhPSAwKSkKKwltYXNrX3R5cGUgPSBhZ3BfZ2VuZXJpY190eXBlX3RvX21hc2tfdHlwZShtZW0tPmJyaWRnZSwgdHlwZSk7CisJaWYgKG1hc2tfdHlwZSAhPSAwIHx8IHR5cGUgIT0gbWVtLT50eXBlKQogCQlyZXR1cm4gLUVJTlZBTDsKIAorCWlmIChtZW0tPnBhZ2VfY291bnQgPT0gMCkKKwkJcmV0dXJuIDA7CisKIAlpZiAoKHBnX3N0YXJ0ICsgbWVtLT5wYWdlX2NvdW50KSA+CiAJCShudmlkaWFfcHJpdmF0ZS5udW1fYWN0aXZlX2VudHJpZXMgLSBhZ3BfbWVtb3J5X3Jlc2VydmVkL1BBR0VfU0laRSkpCiAJCXJldHVybiAtRUlOVkFMOwpAQCAtMjIwLDEwICsyMjUsMTMgQEAKIAl9CiAJZm9yIChpID0gMCwgaiA9IHBnX3N0YXJ0OyBpIDwgbWVtLT5wYWdlX2NvdW50OyBpKyssIGorKykgewogCQl3cml0ZWwoYWdwX2JyaWRnZS0+ZHJpdmVyLT5tYXNrX21lbW9yeShhZ3BfYnJpZGdlLAotCQkJbWVtLT5tZW1vcnlbaV0sIG1lbS0+dHlwZSksCisJCQltZW0tPm1lbW9yeVtpXSwgbWFza190eXBlKSwKIAkJCWFncF9icmlkZ2UtPmdhdHRfdGFibGUrbnZpZGlhX3ByaXZhdGUucGdfb2Zmc2V0K2opOwotCQlyZWFkbChhZ3BfYnJpZGdlLT5nYXR0X3RhYmxlK252aWRpYV9wcml2YXRlLnBnX29mZnNldCtqKTsJLyogUENJIFBvc3RpbmcuICovCiAJfQorCisJLyogUENJIFBvc3RpbmcuICovCisJcmVhZGwoYWdwX2JyaWRnZS0+Z2F0dF90YWJsZStudmlkaWFfcHJpdmF0ZS5wZ19vZmZzZXQraiAtIDEpOworCiAJYWdwX2JyaWRnZS0+ZHJpdmVyLT50bGJfZmx1c2gobWVtKTsKIAlyZXR1cm4gMDsKIH0KQEAgLTIzMyw5ICsyNDEsMTUgQEAKIHsKIAlpbnQgaTsKIAotCWlmICgodHlwZSAhPSAwKSB8fCAobWVtLT50eXBlICE9IDApKQorCWludCBtYXNrX3R5cGU7CisKKwltYXNrX3R5cGUgPSBhZ3BfZ2VuZXJpY190eXBlX3RvX21hc2tfdHlwZShtZW0tPmJyaWRnZSwgdHlwZSk7CisJaWYgKG1hc2tfdHlwZSAhPSAwIHx8IHR5cGUgIT0gbWVtLT50eXBlKQogCQlyZXR1cm4gLUVJTlZBTDsKIAorCWlmIChtZW0tPnBhZ2VfY291bnQgPT0gMCkKKwkJcmV0dXJuIDA7CisKIAlmb3IgKGkgPSBwZ19zdGFydDsgaSA8IChtZW0tPnBhZ2VfY291bnQgKyBwZ19zdGFydCk7IGkrKykKIAkJd3JpdGVsKGFncF9icmlkZ2UtPnNjcmF0Y2hfcGFnZSwgYWdwX2JyaWRnZS0+Z2F0dF90YWJsZStudmlkaWFfcHJpdmF0ZS5wZ19vZmZzZXQraSk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9hZ3AvdmlhLWFncC5jIGIvZHJpdmVycy9jaGFyL2FncC92aWEtYWdwLmMKaW5kZXggOWY0ZDQ5ZS4uZDNiZDI0MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2FncC92aWEtYWdwLmMKKysrIGIvZHJpdmVycy9jaGFyL2FncC92aWEtYWdwLmMKQEAgLTU5NSw0ICs1OTUsNCBAQAogbW9kdWxlX2V4aXQoYWdwX3ZpYV9jbGVhbnVwKTsKIAogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotTU9EVUxFX0FVVEhPUigiRGF2ZSBKb25lcyA8ZGF2ZWpAY29kZW1vbmtleS5vcmcudWs+Iik7CitNT0RVTEVfQVVUSE9SKCJEYXZlIEpvbmVzIDxkYXZlakByZWRoYXQuY29tPiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2FtaXNlcmlhbC5jIGIvZHJpdmVycy9jaGFyL2FtaXNlcmlhbC5jCmluZGV4IDZlNzYzZTMuLjk4ODIxZjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9hbWlzZXJpYWwuYworKysgYi9kcml2ZXJzL2NoYXIvYW1pc2VyaWFsLmMKQEAgLTgzNyw5ICs4MzcsNiBAQAogCXN0cnVjdCBhc3luY19zdHJ1Y3QgKmluZm87CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCWlmICghdHR5KQotCQlyZXR1cm4gMDsKLQogCWluZm8gPSB0dHktPmRyaXZlcl9kYXRhOwogCiAJaWYgKHNlcmlhbF9wYXJhbm9pYV9jaGVjayhpbmZvLCB0dHktPm5hbWUsICJyc19wdXRfY2hhciIpKQpAQCAtODkyLDkgKzg4OSw2IEBACiAJc3RydWN0IGFzeW5jX3N0cnVjdCAqaW5mbzsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JaWYgKCF0dHkpCi0JCXJldHVybiAwOwotCiAJaW5mbyA9IHR0eS0+ZHJpdmVyX2RhdGE7CiAKIAlpZiAoc2VyaWFsX3BhcmFub2lhX2NoZWNrKGluZm8sIHR0eS0+bmFtZSwgInJzX3dyaXRlIikpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvYXBwbGljb20uYyBiL2RyaXZlcnMvY2hhci9hcHBsaWNvbS5jCmluZGV4IDMxZDA4YjYuLjA1Njc0ZmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9hcHBsaWNvbS5jCisrKyBiL2RyaXZlcnMvY2hhci9hcHBsaWNvbS5jCkBAIC00NzgsNyArNDc4LDcgQEAKIAkJc3RydWN0IHN0X3JhbV9pbyAqc3RfbG9jLCBzdHJ1Y3QgbWFpbGJveCAqbWFpbGJveCkKIHsKIAl2b2lkIF9faW9tZW0gKmZyb20gPSBhcGJzW0luZGV4Q2FyZF0uUmFtSU8gKyBSQU1fVE9fUEM7Ci0JdW5zaWduZWQgY2hhciAqdG8gPSAodW5zaWduZWQgY2hhciAqKSZtYWlsYm94OworCXVuc2lnbmVkIGNoYXIgKnRvID0gKHVuc2lnbmVkIGNoYXIgKiltYWlsYm94OwogI2lmZGVmIERFQlVHCiAJaW50IGM7CiAjZW5kaWYKQEAgLTcxMiw4ICs3MTIsNyBAQAogCQogCUluZGV4Q2FyZCA9IGFkZ2wtPm51bV9jYXJkLTE7CiAJIAotCWlmKGNtZCAhPSAwICYmIGNtZCAhPSA2ICYmCi0JICAgKChJbmRleENhcmQgPj0gTUFYX0JPQVJEKSB8fCAhYXBic1tJbmRleENhcmRdLlJhbUlPKSkgeworCWlmKGNtZCAhPSA2ICYmICgoSW5kZXhDYXJkID49IE1BWF9CT0FSRCkgfHwgIWFwYnNbSW5kZXhDYXJkXS5SYW1JTykpIHsKIAkJc3RhdGljIGludCB3YXJuY291bnQgPSAxMDsKIAkJaWYgKHdhcm5jb3VudCkgewogCQkJcHJpbnRrKCBLRVJOX1dBUk5JTkcgIkFQUExJQ09NIGRyaXZlciBJT0NUTCwgYmFkIGJvYXJkIG51bWJlciAlZFxuIiwoaW50KUluZGV4Q2FyZCsxKTsKQEAgLTgzMiw4ICs4MzEsNyBAQAogCQl9CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCXByaW50ayhLRVJOX0lORk8gIkFQUExJQ09NIGRyaXZlciBpb2N0bCwgdW5rbm93biBmdW5jdGlvbiBjb2RlICVkXG4iLGNtZCkgOwotCQlyZXQgPSAtRUlOVkFMOworCQlyZXQgPSAtRU5PVFRZOwogCQlicmVhazsKIAl9CiAJRHVtbXkgPSByZWFkYihhcGJzW0luZGV4Q2FyZF0uUmFtSU8gKyBWRVJTKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9ic3IuYyBiL2RyaXZlcnMvY2hhci9ic3IuYwppbmRleCBiNjUwYjRlLi40NTZmNTRkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvYnNyLmMKKysrIGIvZHJpdmVycy9jaGFyL2Jzci5jCkBAIC0yMjksOSArMjI5LDggQEAKIAkJaWYgKHJlc3VsdCkKIAkJCWdvdG8gb3V0X2VycjsKIAotCQljdXItPmJzcl9kZXZpY2UgPSBkZXZpY2VfY3JlYXRlX2RydmRhdGEoYnNyX2NsYXNzLCBOVUxMLAotCQkJCQkJCWN1ci0+YnNyX2RldiwKLQkJCQkJCQljdXIsIGN1ci0+YnNyX25hbWUpOworCQljdXItPmJzcl9kZXZpY2UgPSBkZXZpY2VfY3JlYXRlKGJzcl9jbGFzcywgTlVMTCwgY3VyLT5ic3JfZGV2LAorCQkJCQkJY3VyLCBjdXItPmJzcl9uYW1lKTsKIAkJaWYgKCFjdXItPmJzcl9kZXZpY2UpIHsKIAkJCXByaW50ayhLRVJOX0VSUiAiZGV2aWNlX2NyZWF0ZSBmYWlsZWQgZm9yICVzXG4iLAogCQkJICAgICAgIGN1ci0+YnNyX25hbWUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2N5Y2xhZGVzLmMgYi9kcml2ZXJzL2NoYXIvY3ljbGFkZXMuYwppbmRleCBmZTZkNzc0Li41ZTViMWRjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvY3ljbGFkZXMuYworKysgYi9kcml2ZXJzL2NoYXIvY3ljbGFkZXMuYwpAQCAtNDk5MywxMiArNDk5MywxNCBAQAogCQkJZGV2aWNlX2lkID09IFBDSV9ERVZJQ0VfSURfQ1lDTE9NX1lfSGkpIHsKIAkJY2FyZF9uYW1lID0gIkN5Y2xvbS1ZIjsKIAotCQlhZGRyMCA9IHBjaV9pb21hcChwZGV2LCAwLCBDeVBDSV9ZY3RsKTsKKwkJYWRkcjAgPSBpb3JlbWFwX25vY2FjaGUocGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIDApLAorCQkJCUN5UENJX1ljdGwpOwogCQlpZiAoYWRkcjAgPT0gTlVMTCkgewogCQkJZGV2X2VycigmcGRldi0+ZGV2LCAiY2FuJ3QgcmVtYXAgY3RsIHJlZ2lvblxuIik7CiAJCQlnb3RvIGVycl9yZWc7CiAJCX0KLQkJYWRkcjIgPSBwY2lfaW9tYXAocGRldiwgMiwgQ3lQQ0lfWXdpbik7CisJCWFkZHIyID0gaW9yZW1hcF9ub2NhY2hlKHBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCAyKSwKKwkJCQlDeVBDSV9Zd2luKTsKIAkJaWYgKGFkZHIyID09IE5VTEwpIHsKIAkJCWRldl9lcnIoJnBkZXYtPmRldiwgImNhbid0IHJlbWFwIGJhc2UgcmVnaW9uXG4iKTsKIAkJCWdvdG8gZXJyX3VubWFwOwpAQCAtNTAxMyw3ICs1MDE1LDggQEAKIAl9IGVsc2UgaWYgKGRldmljZV9pZCA9PSBQQ0lfREVWSUNFX0lEX0NZQ0xPTV9aX0hpKSB7CiAJCXN0cnVjdCBSVU5USU1FXzkwNjAgX19pb21lbSAqY3RsX2FkZHI7CiAKLQkJY3RsX2FkZHIgPSBhZGRyMCA9IHBjaV9pb21hcChwZGV2LCAwLCBDeVBDSV9aY3RsKTsKKwkJY3RsX2FkZHIgPSBhZGRyMCA9IGlvcmVtYXBfbm9jYWNoZShwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgMCksCisJCQkJQ3lQQ0lfWmN0bCk7CiAJCWlmIChhZGRyMCA9PSBOVUxMKSB7CiAJCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJjYW4ndCByZW1hcCBjdGwgcmVnaW9uXG4iKTsKIAkJCWdvdG8gZXJyX3JlZzsKQEAgLTUwMjYsOCArNTAyOSw4IEBACiAKIAkJbWFpbGJveCA9ICh1MzIpcmVhZGwoJmN0bF9hZGRyLT5tYWlsX2JveF8wKTsKIAotCQlhZGRyMiA9IHBjaV9pb21hcChwZGV2LCAyLCBtYWlsYm94ID09IFpFX1YxID8KLQkJCQlDeVBDSV9aZV93aW4gOiBDeVBDSV9ad2luKTsKKwkJYWRkcjIgPSBpb3JlbWFwX25vY2FjaGUocGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIDIpLAorCQkJCW1haWxib3ggPT0gWkVfVjEgPyBDeVBDSV9aZV93aW4gOiBDeVBDSV9ad2luKTsKIAkJaWYgKGFkZHIyID09IE5VTEwpIHsKIAkJCWRldl9lcnIoJnBkZXYtPmRldiwgImNhbid0IHJlbWFwIGJhc2UgcmVnaW9uXG4iKTsKIAkJCWdvdG8gZXJyX3VubWFwOwpAQCAtNTE1OSw5ICs1MTYyLDkgQEAKIAljeV9jYXJkW2NhcmRfbm9dLmJhc2VfYWRkciA9IE5VTEw7CiAJZnJlZV9pcnEoaXJxLCAmY3lfY2FyZFtjYXJkX25vXSk7CiBlcnJfdW5tYXA6Ci0JcGNpX2lvdW5tYXAocGRldiwgYWRkcjApOworCWlvdW5tYXAoYWRkcjApOwogCWlmIChhZGRyMikKLQkJcGNpX2lvdW5tYXAocGRldiwgYWRkcjIpOworCQlpb3VubWFwKGFkZHIyKTsKIGVycl9yZWc6CiAJcGNpX3JlbGVhc2VfcmVnaW9ucyhwZGV2KTsKIGVycl9kaXM6CkBAIC01MTg2LDkgKzUxODksOSBAQAogCQljeV93cml0ZXcoY2luZm8tPmN0bF9hZGRyICsgMHg2OCwKIAkJCQlyZWFkdyhjaW5mby0+Y3RsX2FkZHIgKyAweDY4KSAmIH4weDA5MDApOwogCi0JcGNpX2lvdW5tYXAocGRldiwgY2luZm8tPmJhc2VfYWRkcik7CisJaW91bm1hcChjaW5mby0+YmFzZV9hZGRyKTsKIAlpZiAoY2luZm8tPmN0bF9hZGRyKQotCQlwY2lfaW91bm1hcChwZGV2LCBjaW5mby0+Y3RsX2FkZHIpOworCQlpb3VubWFwKGNpbmZvLT5jdGxfYWRkcik7CiAJaWYgKGNpbmZvLT5pcnEKICNpZm5kZWYgQ09ORklHX0NZWl9JTlRSCiAJCSYmICFJU19DWUNfWigqY2luZm8pCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvZHMxMjg2LmMgYi9kcml2ZXJzL2NoYXIvZHMxMjg2LmMKaW5kZXggZmI1ODQ5MzguLjBhODI2ZDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9kczEyODYuYworKysgYi9kcml2ZXJzL2NoYXIvZHMxMjg2LmMKQEAgLTIxMCw4ICsyMTAsOCBAQAogCQlpZiAoc2VjICE9IDApCiAJCQlyZXR1cm4gLUVJTlZBTDsKIAotCQltaW4gPSBCSU4yQkNEKG1pbik7Ci0JCW1pbiA9IEJJTjJCQ0QoaHJzKTsKKwkJbWluID0gYmluMmJjZChtaW4pOworCQltaW4gPSBiaW4yYmNkKGhycyk7CiAKIAkJc3Bpbl9sb2NrKCZkczEyODZfbG9jayk7CiAJCXJ0Y193cml0ZShocnMsIFJUQ19IT1VSU19BTEFSTSk7CkBAIC0zNTMsNyArMzUzLDcgQEAKIAogCWRzMTI4Nl9nZXRfdGltZSgmdG0pOwogCWh1bmRyZWR0aCA9IHJ0Y19yZWFkKFJUQ19IVU5EUkVEVEhfU0VDT05EKTsKLQlCQ0RfVE9fQklOKGh1bmRyZWR0aCk7CisJaHVuZHJlZHRoID0gYmNkMmJpbihodW5kcmVkdGgpOwogCiAJcCArPSBzcHJpbnRmKHAsCiAJICAgICAgICAgICAgICJydGNfdGltZVx0OiAlMDJkOiUwMmQ6JTAyZC4lMDJkXG4iCkBAIC00NDMsNyArNDQzLDYgQEAKIHsKIAl1bnNpZ25lZCBjaGFyIHNhdmVfY29udHJvbDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXVuc2lnbmVkIGxvbmcgdWlwX3dhdGNoZG9nID0gamlmZmllczsKIAogCS8qCiAJICogcmVhZCBSVEMgb25jZSBhbnkgdXBkYXRlIGluIHByb2dyZXNzIGlzIGRvbmUuIFRoZSB1cGRhdGUKQEAgLTQ1Niw4ICs0NTUsNyBAQAogCSAqLwogCiAJaWYgKGRzMTI4Nl9pc191cGRhdGluZygpICE9IDApCi0JCXdoaWxlICh0aW1lX2JlZm9yZShqaWZmaWVzLCB1aXBfd2F0Y2hkb2cgKyAyKkhaLzEwMCkpCi0JCQliYXJyaWVyKCk7CisJCW1zbGVlcCgyMCk7CiAKIAkvKgogCSAqIE9ubHkgdGhlIHZhbHVlcyB0aGF0IHdlIHJlYWQgZnJvbSB0aGUgUlRDIGFyZSBzZXQuIFdlIGxlYXZlCkBAIC00NzksMTIgKzQ3NywxMiBAQAogCXJ0Y193cml0ZShzYXZlX2NvbnRyb2wsIFJUQ19DTUQpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRzMTI4Nl9sb2NrLCBmbGFncyk7CiAKLQlCQ0RfVE9fQklOKHJ0Y190bS0+dG1fc2VjKTsKLQlCQ0RfVE9fQklOKHJ0Y190bS0+dG1fbWluKTsKLQlCQ0RfVE9fQklOKHJ0Y190bS0+dG1faG91cik7Ci0JQkNEX1RPX0JJTihydGNfdG0tPnRtX21kYXkpOwotCUJDRF9UT19CSU4ocnRjX3RtLT50bV9tb24pOwotCUJDRF9UT19CSU4ocnRjX3RtLT50bV95ZWFyKTsKKwlydGNfdG0tPnRtX3NlYyA9IGJjZDJiaW4ocnRjX3RtLT50bV9zZWMpOworCXJ0Y190bS0+dG1fbWluID0gYmNkMmJpbihydGNfdG0tPnRtX21pbik7CisJcnRjX3RtLT50bV9ob3VyID0gYmNkMmJpbihydGNfdG0tPnRtX2hvdXIpOworCXJ0Y190bS0+dG1fbWRheSA9IGJjZDJiaW4ocnRjX3RtLT50bV9tZGF5KTsKKwlydGNfdG0tPnRtX21vbiA9IGJjZDJiaW4ocnRjX3RtLT50bV9tb24pOworCXJ0Y190bS0+dG1feWVhciA9IGJjZDJiaW4ocnRjX3RtLT50bV95ZWFyKTsKIAogCS8qCiAJICogQWNjb3VudCBmb3IgZGlmZmVyZW5jZXMgYmV0d2VlbiBob3cgdGhlIFJUQyB1c2VzIHRoZSB2YWx1ZXMKQEAgLTUzMywxMiArNTMxLDEyIEBACiAJaWYgKHlycyA+PSAxMDApCiAJCXlycyAtPSAxMDA7CiAKLQlCSU5fVE9fQkNEKHNlYyk7Ci0JQklOX1RPX0JDRChtaW4pOwotCUJJTl9UT19CQ0QoaHJzKTsKLQlCSU5fVE9fQkNEKGRheSk7Ci0JQklOX1RPX0JDRChtb24pOwotCUJJTl9UT19CQ0QoeXJzKTsKKwlzZWMgPSBiaW4yYmNkKHNlYyk7CisJbWluID0gYmluMmJjZChtaW4pOworCWhycyA9IGJpbjJiY2QoaHJzKTsKKwlkYXkgPSBiaW4yYmNkKGRheSk7CisJbW9uID0gYmluMmJjZChtb24pOworCXlycyA9IGJpbjJiY2QoeXJzKTsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZkczEyODZfbG9jaywgZmxhZ3MpOwogCXNhdmVfY29udHJvbCA9IHJ0Y19yZWFkKFJUQ19DTUQpOwpAQCAtNTc0LDggKzU3Miw4IEBACiAJY21kID0gcnRjX3JlYWQoUlRDX0NNRCk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZHMxMjg2X2xvY2ssIGZsYWdzKTsKIAotCUJDRF9UT19CSU4oYWxtX3RtLT50bV9taW4pOwotCUJDRF9UT19CSU4oYWxtX3RtLT50bV9ob3VyKTsKKwlhbG1fdG0tPnRtX21pbiA9IGJjZDJiaW4oYWxtX3RtLT50bV9taW4pOworCWFsbV90bS0+dG1faG91ciA9IGJjZDJiaW4oYWxtX3RtLT50bV9ob3VyKTsKIAlhbG1fdG0tPnRtX3NlYyA9IDA7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9kczEzMDIuYyBiL2RyaXZlcnMvY2hhci9kczEzMDIuYwppbmRleCBjNWU2N2E2Li4xNzA2OTNjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvZHMxMzAyLmMKKysrIGIvZHJpdmVycy9jaGFyL2RzMTMwMi5jCkBAIC0xMzEsMTIgKzEzMSwxMiBAQAogCiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogCi0JQkNEX1RPX0JJTihydGNfdG0tPnRtX3NlYyk7Ci0JQkNEX1RPX0JJTihydGNfdG0tPnRtX21pbik7Ci0JQkNEX1RPX0JJTihydGNfdG0tPnRtX2hvdXIpOwotCUJDRF9UT19CSU4ocnRjX3RtLT50bV9tZGF5KTsKLQlCQ0RfVE9fQklOKHJ0Y190bS0+dG1fbW9uKTsKLQlCQ0RfVE9fQklOKHJ0Y190bS0+dG1feWVhcik7CisJcnRjX3RtLT50bV9zZWMgPSBiY2QyYmluKHJ0Y190bS0+dG1fc2VjKTsKKwlydGNfdG0tPnRtX21pbiA9IGJjZDJiaW4ocnRjX3RtLT50bV9taW4pOworCXJ0Y190bS0+dG1faG91ciA9IGJjZDJiaW4ocnRjX3RtLT50bV9ob3VyKTsKKwlydGNfdG0tPnRtX21kYXkgPSBiY2QyYmluKHJ0Y190bS0+dG1fbWRheSk7CisJcnRjX3RtLT50bV9tb24gPSBiY2QyYmluKHJ0Y190bS0+dG1fbW9uKTsKKwlydGNfdG0tPnRtX3llYXIgPSBiY2QyYmluKHJ0Y190bS0+dG1feWVhcik7CiAKIAkvKgogCSAqIEFjY291bnQgZm9yIGRpZmZlcmVuY2VzIGJldHdlZW4gaG93IHRoZSBSVEMgdXNlcyB0aGUgdmFsdWVzCkBAIC0yMTEsMTIgKzIxMSwxMiBAQAogCQkJZWxzZQogCQkJCXlycyAtPSAxOTAwOwkvKiBSVEMgKDcwLCA3MSwgLi4uIDk5KSAqLwogCi0JCQlCSU5fVE9fQkNEKHNlYyk7Ci0JCQlCSU5fVE9fQkNEKG1pbik7Ci0JCQlCSU5fVE9fQkNEKGhycyk7Ci0JCQlCSU5fVE9fQkNEKGRheSk7Ci0JCQlCSU5fVE9fQkNEKG1vbik7Ci0JCQlCSU5fVE9fQkNEKHlycyk7CisJCQlzZWMgPSBiaW4yYmNkKHNlYyk7CisJCQltaW4gPSBiaW4yYmNkKG1pbik7CisJCQlocnMgPSBiaW4yYmNkKGhycyk7CisJCQlkYXkgPSBiaW4yYmNkKGRheSk7CisJCQltb24gPSBiaW4yYmNkKG1vbik7CisJCQl5cnMgPSBiaW4yYmNkKHlycyk7CiAKIAkJCWxvY2tfa2VybmVsKCk7CiAJCQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvZHNwNTZrLmMgYi9kcml2ZXJzL2NoYXIvZHNwNTZrLmMKaW5kZXggY2E3YzcyYS4uODU4MzJhYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2RzcDU2ay5jCisrKyBiL2RyaXZlcnMvY2hhci9kc3A1NmsuYwpAQCAtNTA4LDggKzUwOCw4IEBACiAJCWVyciA9IFBUUl9FUlIoZHNwNTZrX2NsYXNzKTsKIAkJZ290byBvdXRfY2hyZGV2OwogCX0KLQlkZXZpY2VfY3JlYXRlX2RydmRhdGEoZHNwNTZrX2NsYXNzLCBOVUxMLCBNS0RFVihEU1A1NktfTUFKT1IsIDApLAotCQkJICAgICAgTlVMTCwgImRzcDU2ayIpOworCWRldmljZV9jcmVhdGUoZHNwNTZrX2NsYXNzLCBOVUxMLCBNS0RFVihEU1A1NktfTUFKT1IsIDApLCBOVUxMLAorCQkgICAgICAiZHNwNTZrIik7CiAKIAlwcmludGsoYmFubmVyKTsKIAlnb3RvIG91dDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9lcGNhLmMgYi9kcml2ZXJzL2NoYXIvZXBjYS5jCmluZGV4IDQ1NmU0ZWQuLmNmMjQ2MWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9lcGNhLmMKKysrIGIvZHJpdmVycy9jaGFyL2VwY2EuYwpAQCAtMTM3Niw2ICsxMzc2LDcgQEAKIAkJdW5zaWduZWQgbG9uZyBmbGFnczsKIAkJdTE2IHRzZWcsIHJzZWc7CiAKKwkJdHR5X3BvcnRfaW5pdCgmY2gtPnBvcnQpOwogCQljaC0+YnJkY2hhbiA9IGJjOwogCQljaC0+bWFpbGJveCA9IGdkOwogCQlJTklUX1dPUksoJmNoLT50cXVldWUsIGRvX3NvZnRpbnQpOwpAQCAtMTUxMCwxMCArMTUxMSw2IEBACiAJCWNoLT5mZXBzdG9wY2EgPSAwOwogCiAJCWNoLT5jbG9zZV9kZWxheSA9IDUwOwotCQljaC0+cG9ydC5jb3VudCA9IDA7Ci0JCWNoLT5wb3J0LmJsb2NrZWRfb3BlbiA9IDA7Ci0JCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmNoLT5wb3J0Lm9wZW5fd2FpdCk7Ci0JCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmNoLT5wb3J0LmNsb3NlX3dhaXQpOwogCiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmVwY2FfbG9jaywgZmxhZ3MpOwogCX0KQEAgLTI0ODAsNyArMjQ3NywxMSBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlpZiAobXNlYyA9PSAtMSkKLQkJcmV0dXJuIC1FT1BOT1RTVVBQOworCQltc2VjID0gMHhGRkZGOworCWVsc2UgaWYgKG1zZWMgPiAweEZGRkUpCisJCW1zZWMgPSAweEZGRkU7CisJZWxzZSBpZiAobXNlYyA8IDEpCisJCW1zZWMgPSAxOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmVwY2FfbG9jaywgZmxhZ3MpOwogCWdsb2JhbHdpbm9uKGNoKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9nZW5lcmljX3NlcmlhbC5jIGIvZHJpdmVycy9jaGFyL2dlbmVyaWNfc2VyaWFsLmMKaW5kZXggMTlkM2FmYi4uYzYwOTBmOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2dlbmVyaWNfc2VyaWFsLmMKKysrIGIvZHJpdmVycy9jaGFyL2dlbmVyaWNfc2VyaWFsLmMKQEAgLTU0LDggKzU0LDYgQEAKIAogCWZ1bmNfZW50ZXIgKCk7IAogCi0JaWYgKCF0dHkpIHJldHVybiAwOwotCiAJcG9ydCA9IHR0eS0+ZHJpdmVyX2RhdGE7CiAKIAlpZiAoIXBvcnQpIHJldHVybiAwOwpAQCAtOTcsOCArOTUsNiBAQAogCiAJZnVuY19lbnRlciAoKTsKIAotCWlmICghdHR5KSByZXR1cm4gMDsKLQogCXBvcnQgPSB0dHktPmRyaXZlcl9kYXRhOwogCiAJaWYgKCFwb3J0KSByZXR1cm4gMDsKQEAgLTE4NSw3ICsxODEsNiBAQAogCXN0cnVjdCBnc19wb3J0ICpwb3J0OwogCWZ1bmNfZW50ZXIgKCk7CiAKLQlpZiAoIXR0eSkgcmV0dXJuIDA7CiAJcG9ydCA9IHR0eS0+ZHJpdmVyX2RhdGE7CiAKIAlpZiAoIXBvcnQtPnJkKSByZXR1cm4gMDsKQEAgLTI3NCw4ICsyNjksNiBAQAogCiAJZnVuY19lbnRlciAoKTsKIAotCWlmICghdHR5KSByZXR1cm47Ci0KIAlwb3J0ID0gdHR5LT5kcml2ZXJfZGF0YTsKIAogCWlmICghcG9ydCkgcmV0dXJuOwpAQCAtMjk2LDggKzI4OSw2IEBACiAKIAlmdW5jX2VudGVyICgpOwogCi0JaWYgKCF0dHkpIHJldHVybjsKLQogCXBvcnQgPSB0dHktPmRyaXZlcl9kYXRhOwogCiAJaWYgKCFwb3J0KSByZXR1cm47CkBAIC0zMjEsOCArMzEyLDYgQEAKIAogCWZ1bmNfZW50ZXIgKCk7CiAKLQlpZiAoIXR0eSkgcmV0dXJuOwotCiAJcG9ydCA9IHR0eS0+ZHJpdmVyX2RhdGE7CiAKIAlpZiAoIXBvcnQpIHJldHVybjsKQEAgLTM0MSw4ICszMzAsNiBAQAogewogCXN0cnVjdCBnc19wb3J0ICpwb3J0OwogCi0JaWYgKCF0dHkpIHJldHVybjsKLQogCXBvcnQgPSB0dHktPmRyaXZlcl9kYXRhOwogCiAJaWYgKCFwb3J0KSByZXR1cm47CkBAIC0zOTMsOCArMzgwLDYgQEAKIAogCWZ1bmNfZW50ZXIgKCk7CiAKLQlpZiAoIXR0eSkgcmV0dXJuOwotCiAJcG9ydCA9IHR0eS0+ZHJpdmVyX2RhdGE7CiAJdHR5ID0gcG9ydC0+cG9ydC50dHk7CiAJaWYgKCF0dHkpIApAQCAtNDI2LDggKzQxMSw2IEBACiAKIAl0dHkgPSBwb3J0LT5wb3J0LnR0eTsKIAotCWlmICghdHR5KSByZXR1cm4gMDsKLQogCWdzX2RwcmludGsgKEdTX0RFQlVHX0JUUiwgIkVudGVyaW5nIGdzX2Jsb2NrX3RpbGxfcmVhZHkuXG4iKTsgCiAJLyoKIAkgKiBJZiB0aGUgZGV2aWNlIGlzIGluIHRoZSBtaWRkbGUgb2YgYmVpbmcgY2xvc2VkLCB0aGVuIGJsb2NrCkBAIC01MjMsOCArNTA2LDYgQEAKIAkKIAlmdW5jX2VudGVyICgpOwogCi0JaWYgKCF0dHkpIHJldHVybjsKLQogCXBvcnQgPSAoc3RydWN0IGdzX3BvcnQgKikgdHR5LT5kcml2ZXJfZGF0YTsKIAogCWlmICghcG9ydCkgcmV0dXJuOwpAQCAtNjIxLDggKzYwMiw2IEBACiAKIAlmdW5jX2VudGVyKCk7CiAKLQlpZiAoIXR0eSkgcmV0dXJuOwotCiAJcG9ydCA9IHR0eS0+ZHJpdmVyX2RhdGE7CiAKIAlpZiAoIXBvcnQpIHJldHVybjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9ocGV0LmMgYi9kcml2ZXJzL2NoYXIvaHBldC5jCmluZGV4IGIzZjVkYmMuLjQwOGY1ZjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9ocGV0LmMKKysrIGIvZHJpdmVycy9jaGFyL2hwZXQuYwpAQCAtNTMsNiArNTMsMTEgQEAKIAogI2RlZmluZSBIUEVUX1JBTkdFX1NJWkUJCTEwMjQJLyogZnJvbSBIUEVUIHNwZWMgKi8KIAorCisvKiBXQVJOSU5HIC0tIGRvbid0IGdldCBjb25mdXNlZC4gIFRoZXNlIG1hY3JvcyBhcmUgbmV2ZXIgdXNlZAorICogdG8gd3JpdGUgdGhlIChzaW5nbGUpIGNvdW50ZXIsIGFuZCByYXJlbHkgdG8gcmVhZCBpdC4KKyAqIFRoZXkncmUgYmFkbHkgbmFtZWQ7IHRvIGZpeCwgc29tZWRheS4KKyAqLwogI2lmIEJJVFNfUEVSX0xPTkcgPT0gNjQKICNkZWZpbmUJd3JpdGVfY291bnRlcihWLCBNQykJd3JpdGVxKFYsIE1DKQogI2RlZmluZQlyZWFkX2NvdW50ZXIoTUMpCXJlYWRxKE1DKQpAQCAtNzcsNyArODIsNyBAQAogICAgICAgICAucmF0aW5nICAgICAgICAgPSAyNTAsCiAgICAgICAgIC5yZWFkICAgICAgICAgICA9IHJlYWRfaHBldCwKICAgICAgICAgLm1hc2sgICAgICAgICAgID0gQ0xPQ0tTT1VSQ0VfTUFTSyg2NCksCi0gICAgICAgIC5tdWx0ICAgICAgICAgICA9IDAsIC8qdG8gYmUgY2FsdWNsYXRlZCovCisJLm11bHQJCT0gMCwgLyogdG8gYmUgY2FsY3VsYXRlZCAqLwogICAgICAgICAuc2hpZnQgICAgICAgICAgPSAxMCwKICAgICAgICAgLmZsYWdzICAgICAgICAgID0gQ0xPQ0tfU09VUkNFX0lTX0NPTlRJTlVPVVMsCiB9OwpAQCAtODYsOCArOTEsNiBAQAogCiAvKiBBIGxvY2sgZm9yIGNvbmN1cnJlbnQgYWNjZXNzIGJ5IGFwcCBhbmQgaXNyIGhwZXQgYWN0aXZpdHkuICovCiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGhwZXRfbG9jayk7Ci0vKiBBIGxvY2sgZm9yIGNvbmN1cnJlbnQgaW50ZXJtb2R1bGUgYWNjZXNzIHRvIGhwZXQgYW5kIGlzciBocGV0IGFjdGl2aXR5LiAqLwotc3RhdGljIERFRklORV9TUElOTE9DSyhocGV0X3Rhc2tfbG9jayk7CiAKICNkZWZpbmUJSFBFVF9ERVZfTkFNRQkoNykKIApAQCAtOTksNyArMTAyLDYgQEAKIAl1bnNpZ25lZCBsb25nIGhkX2lycWRhdGE7CiAJd2FpdF9xdWV1ZV9oZWFkX3QgaGRfd2FpdHF1ZXVlOwogCXN0cnVjdCBmYXN5bmNfc3RydWN0ICpoZF9hc3luY19xdWV1ZTsKLQlzdHJ1Y3QgaHBldF90YXNrICpoZF90YXNrOwogCXVuc2lnbmVkIGludCBoZF9mbGFnczsKIAl1bnNpZ25lZCBpbnQgaGRfaXJxOwogCXVuc2lnbmVkIGludCBoZF9oZHdpcnE7CkBAIC0xNzMsMTEgKzE3NSw2IEBACiAJCXdyaXRlbChpc3IsICZkZXZwLT5oZF9ocGV0LT5ocGV0X2lzcik7CiAJc3Bpbl91bmxvY2soJmhwZXRfbG9jayk7CiAKLQlzcGluX2xvY2soJmhwZXRfdGFza19sb2NrKTsKLQlpZiAoZGV2cC0+aGRfdGFzaykKLQkJZGV2cC0+aGRfdGFzay0+aHRfZnVuYyhkZXZwLT5oZF90YXNrLT5odF9kYXRhKTsKLQlzcGluX3VubG9jaygmaHBldF90YXNrX2xvY2spOwotCiAJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZkZXZwLT5oZF93YWl0cXVldWUpOwogCiAJa2lsbF9mYXN5bmMoJmRldnAtPmhkX2FzeW5jX3F1ZXVlLCBTSUdJTywgUE9MTF9JTik7CkBAIC0xODUsNiArMTgyLDY3IEBACiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQogCitzdGF0aWMgdm9pZCBocGV0X3RpbWVyX3NldF9pcnEoc3RydWN0IGhwZXRfZGV2ICpkZXZwKQoreworCXVuc2lnbmVkIGxvbmcgdjsKKwlpbnQgaXJxLCBnc2k7CisJc3RydWN0IGhwZXRfdGltZXIgX19pb21lbSAqdGltZXI7CisKKwlzcGluX2xvY2tfaXJxKCZocGV0X2xvY2spOworCWlmIChkZXZwLT5oZF9oZHdpcnEpIHsKKwkJc3Bpbl91bmxvY2tfaXJxKCZocGV0X2xvY2spOworCQlyZXR1cm47CisJfQorCisJdGltZXIgPSBkZXZwLT5oZF90aW1lcjsKKworCS8qIHdlIHByZWZlciBsZXZlbCB0cmlnZ2VyZWQgbW9kZSAqLworCXYgPSByZWFkbCgmdGltZXItPmhwZXRfY29uZmlnKTsKKwlpZiAoISh2ICYgVG5fSU5UX1RZUEVfQ05GX01BU0spKSB7CisJCXYgfD0gVG5fSU5UX1RZUEVfQ05GX01BU0s7CisJCXdyaXRlbCh2LCAmdGltZXItPmhwZXRfY29uZmlnKTsKKwl9CisJc3Bpbl91bmxvY2tfaXJxKCZocGV0X2xvY2spOworCisJdiA9IChyZWFkcSgmdGltZXItPmhwZXRfY29uZmlnKSAmIFRuX0lOVF9ST1VURV9DQVBfTUFTSykgPj4KKwkJCQkgVG5fSU5UX1JPVVRFX0NBUF9TSElGVDsKKworCS8qCisJICogSW4gUElDIG1vZGUsIHNraXAgSVJRMC00LCBJUlE2LTksIElSUTEyLTE1IHdoaWNoIGlzIGFsd2F5cyB1c2VkIGJ5CisJICogbGVnYWN5IGRldmljZS4gSW4gSU8gQVBJQyBtb2RlLCB3ZSBza2lwIGFsbCB0aGUgbGVnYWN5IElSUVMuCisJICovCisJaWYgKGFjcGlfaXJxX21vZGVsID09IEFDUElfSVJRX01PREVMX1BJQykKKwkJdiAmPSB+MHhmM2RmOworCWVsc2UKKwkJdiAmPSB+MHhmZmZmOworCisJZm9yIChpcnEgPSBmaW5kX2ZpcnN0X2JpdCgmdiwgSFBFVF9NQVhfSVJRKTsgaXJxIDwgSFBFVF9NQVhfSVJROworCQlpcnEgPSBmaW5kX25leHRfYml0KCZ2LCBIUEVUX01BWF9JUlEsIDEgKyBpcnEpKSB7CisKKwkJaWYgKGlycSA+PSBucl9pcnFzKSB7CisJCQlpcnEgPSBIUEVUX01BWF9JUlE7CisJCQlicmVhazsKKwkJfQorCisJCWdzaSA9IGFjcGlfcmVnaXN0ZXJfZ3NpKGlycSwgQUNQSV9MRVZFTF9TRU5TSVRJVkUsCisJCQkJCUFDUElfQUNUSVZFX0xPVyk7CisJCWlmIChnc2kgPiAwKQorCQkJYnJlYWs7CisKKwkJLyogRklYTUU6IFNldHVwIGludGVycnVwdCBzb3VyY2UgdGFibGUgKi8KKwl9CisKKwlpZiAoaXJxIDwgSFBFVF9NQVhfSVJRKSB7CisJCXNwaW5fbG9ja19pcnEoJmhwZXRfbG9jayk7CisJCXYgPSByZWFkbCgmdGltZXItPmhwZXRfY29uZmlnKTsKKwkJdiB8PSBpcnEgPDwgVG5fSU5UX1JPVVRFX0NORl9TSElGVDsKKwkJd3JpdGVsKHYsICZ0aW1lci0+aHBldF9jb25maWcpOworCQlkZXZwLT5oZF9oZHdpcnEgPSBnc2k7CisJCXNwaW5fdW5sb2NrX2lycSgmaHBldF9sb2NrKTsKKwl9CisJcmV0dXJuOworfQorCiBzdGF0aWMgaW50IGhwZXRfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKIAlzdHJ1Y3QgaHBldF9kZXYgKmRldnA7CkBAIC0xOTksOCArMjU3LDcgQEAKIAogCWZvciAoZGV2cCA9IE5VTEwsIGhwZXRwID0gaHBldHM7IGhwZXRwICYmICFkZXZwOyBocGV0cCA9IGhwZXRwLT5ocF9uZXh0KQogCQlmb3IgKGkgPSAwOyBpIDwgaHBldHAtPmhwX250aW1lcjsgaSsrKQotCQkJaWYgKGhwZXRwLT5ocF9kZXZbaV0uaGRfZmxhZ3MgJiBIUEVUX09QRU4KLQkJCSAgICB8fCBocGV0cC0+aHBfZGV2W2ldLmhkX3Rhc2spCisJCQlpZiAoaHBldHAtPmhwX2RldltpXS5oZF9mbGFncyAmIEhQRVRfT1BFTikKIAkJCQljb250aW51ZTsKIAkJCWVsc2UgewogCQkJCWRldnAgPSAmaHBldHAtPmhwX2RldltpXTsKQEAgLTIxOSw2ICsyNzYsOCBAQAogCXNwaW5fdW5sb2NrX2lycSgmaHBldF9sb2NrKTsKIAl1bmxvY2tfa2VybmVsKCk7CiAKKwlocGV0X3RpbWVyX3NldF9pcnEoZGV2cCk7CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtNDQxLDcgKzUwMCwxMSBAQAogCWRldnAtPmhkX2lycSA9IGlycTsKIAl0ID0gZGV2cC0+aGRfaXJlcWZyZXE7CiAJdiA9IHJlYWRxKCZ0aW1lci0+aHBldF9jb25maWcpOwotCWcgPSB2IHwgVG5fSU5UX0VOQl9DTkZfTUFTSzsKKworCS8qIDY0LWJpdCBjb21wYXJhdG9ycyBhcmUgbm90IHlldCBzdXBwb3J0ZWQgdGhyb3VnaCB0aGUgaW9jdGxzLAorCSAqIHNvIGZvcmNlIHRoaXMgaW50byAzMi1iaXQgbW9kZSBpZiBpdCBzdXBwb3J0cyBib3RoIG1vZGVzCisJICovCisJZyA9IHYgfCBUbl8zMk1PREVfQ05GX01BU0sgfCBUbl9JTlRfRU5CX0NORl9NQVNLOwogCiAJaWYgKGRldnAtPmhkX2ZsYWdzICYgSFBFVF9QRVJJT0RJQykgewogCQl3cml0ZV9jb3VudGVyKHQsICZ0aW1lci0+aHBldF9jb21wYXJlKTsKQEAgLTQ1MSw2ICs1MTQsMTIgQEAKIAkJdiB8PSBUbl9WQUxfU0VUX0NORl9NQVNLOwogCQl3cml0ZXEodiwgJnRpbWVyLT5ocGV0X2NvbmZpZyk7CiAJCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKworCQkvKiBOT1RFOiAgd2hhdCB3ZSBtb2RpZnkgaGVyZSBpcyBhIGhpZGRlbiBhY2N1bXVsYXRvcgorCQkgKiByZWdpc3RlciBzdXBwb3J0ZWQgYnkgcGVyaW9kaWMtY2FwYWJsZSBjb21wYXJhdG9ycy4KKwkJICogV2UgbmV2ZXIgd2FudCB0byBtb2RpZnkgdGhlIChzaW5nbGUpIGNvdW50ZXI7IHRoYXQKKwkJICogd291bGQgYWZmZWN0IGFsbCB0aGUgY29tcGFyYXRvcnMuCisJCSAqLwogCQltID0gcmVhZF9jb3VudGVyKCZocGV0LT5ocGV0X21jKTsKIAkJd3JpdGVfY291bnRlcih0ICsgbSArIGhwZXRwLT5ocF9kZWx0YSwgJnRpbWVyLT5ocGV0X2NvbXBhcmUpOwogCX0gZWxzZSB7CkBAIC02MDQsNTcgKzY3Myw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IGhwZXRfdHBjaGVjayhzdHJ1Y3QgaHBldF90YXNrICp0cCkKLXsKLQlzdHJ1Y3QgaHBldF9kZXYgKmRldnA7Ci0Jc3RydWN0IGhwZXRzICpocGV0cDsKLQotCWRldnAgPSB0cC0+aHRfb3BhcXVlOwotCi0JaWYgKCFkZXZwKQotCQlyZXR1cm4gLUVOWElPOwotCi0JZm9yIChocGV0cCA9IGhwZXRzOyBocGV0cDsgaHBldHAgPSBocGV0cC0+aHBfbmV4dCkKLQkJaWYgKGRldnAgPj0gaHBldHAtPmhwX2RldgotCQkgICAgJiYgZGV2cCA8IChocGV0cC0+aHBfZGV2ICsgaHBldHAtPmhwX250aW1lcikKLQkJICAgICYmIGRldnAtPmhkX2hwZXQgPT0gaHBldHAtPmhwX2hwZXQpCi0JCQlyZXR1cm4gMDsKLQotCXJldHVybiAtRU5YSU87Ci19Ci0KLSNpZiAwCi1pbnQgaHBldF91bnJlZ2lzdGVyKHN0cnVjdCBocGV0X3Rhc2sgKnRwKQotewotCXN0cnVjdCBocGV0X2RldiAqZGV2cDsKLQlzdHJ1Y3QgaHBldF90aW1lciBfX2lvbWVtICp0aW1lcjsKLQlpbnQgZXJyOwotCi0JaWYgKChlcnIgPSBocGV0X3RwY2hlY2sodHApKSkKLQkJcmV0dXJuIGVycjsKLQotCXNwaW5fbG9ja19pcnEoJmhwZXRfdGFza19sb2NrKTsKLQlzcGluX2xvY2soJmhwZXRfbG9jayk7Ci0KLQlkZXZwID0gdHAtPmh0X29wYXF1ZTsKLQlpZiAoZGV2cC0+aGRfdGFzayAhPSB0cCkgewotCQlzcGluX3VubG9jaygmaHBldF9sb2NrKTsKLQkJc3Bpbl91bmxvY2tfaXJxKCZocGV0X3Rhc2tfbG9jayk7Ci0JCXJldHVybiAtRU5YSU87Ci0JfQotCi0JdGltZXIgPSBkZXZwLT5oZF90aW1lcjsKLQl3cml0ZXEoKHJlYWRxKCZ0aW1lci0+aHBldF9jb25maWcpICYgflRuX0lOVF9FTkJfQ05GX01BU0spLAotCSAgICAgICAmdGltZXItPmhwZXRfY29uZmlnKTsKLQlkZXZwLT5oZF9mbGFncyAmPSB+KEhQRVRfSUUgfCBIUEVUX1BFUklPRElDKTsKLQlkZXZwLT5oZF90YXNrID0gTlVMTDsKLQlzcGluX3VubG9jaygmaHBldF9sb2NrKTsKLQlzcGluX3VubG9ja19pcnEoJmhwZXRfdGFza19sb2NrKTsKLQotCXJldHVybiAwOwotfQotI2VuZGlmICAvKiAgMCAgKi8KLQogc3RhdGljIGN0bF90YWJsZSBocGV0X3RhYmxlW10gPSB7CiAJewogCSAuY3RsX25hbWUgPSBDVExfVU5OVU1CRVJFRCwKQEAgLTc0Niw2ICs3NjQsNyBAQAogCXN0YXRpYyBzdHJ1Y3QgaHBldHMgKmxhc3QgPSBOVUxMOwogCXVuc2lnbmVkIGxvbmcgcGVyaW9kOwogCXVuc2lnbmVkIGxvbmcgbG9uZyB0ZW1wOworCXUzMiByZW1haW5kZXI7CiAKIAkvKgogCSAqIGhwZXRfYWxsb2MgY2FuIGJlIGNhbGxlZCBieSBwbGF0Zm9ybSBkZXBlbmRlbnQgY29kZS4KQEAgLTgwOSw5ICs4MjgsMTMgQEAKIAkJcHJpbnRrKCIlcyAlZCIsIGkgPiAwID8gIiwiIDogIiIsIGhkcC0+aGRfaXJxW2ldKTsKIAlwcmludGsoIlxuIik7CiAKLQlwcmludGsoS0VSTl9JTkZPICJocGV0JXU6ICV1ICVkLWJpdCB0aW1lcnMsICVMdSBIelxuIiwKLQkgICAgICAgaHBldHAtPmhwX3doaWNoLCBocGV0cC0+aHBfbnRpbWVyLAotCSAgICAgICBjYXAgJiBIUEVUX0NPVU5URVJfU0laRV9NQVNLID8gNjQgOiAzMiwgaHBldHAtPmhwX3RpY2tfZnJlcSk7CisJdGVtcCA9IGhwZXRwLT5ocF90aWNrX2ZyZXE7CisJcmVtYWluZGVyID0gZG9fZGl2KHRlbXAsIDEwMDAwMDApOworCXByaW50ayhLRVJOX0lORk8KKwkJImhwZXQldTogJXUgY29tcGFyYXRvcnMsICVkLWJpdCAldS4lMDZ1IE1IeiBjb3VudGVyXG4iLAorCQlocGV0cC0+aHBfd2hpY2gsIGhwZXRwLT5ocF9udGltZXIsCisJCWNhcCAmIEhQRVRfQ09VTlRFUl9TSVpFX01BU0sgPyA2NCA6IDMyLAorCQkodW5zaWduZWQpIHRlbXAsIHJlbWFpbmRlcik7CiAKIAltY2ZnID0gcmVhZHEoJmhwZXQtPmhwZXRfY29uZmlnKTsKIAlpZiAoKG1jZmcgJiBIUEVUX0VOQUJMRV9DTkZfTUFTSykgPT0gMCkgewpAQCAtODc0LDggKzg5Nyw2IEBACiAJCWhkcC0+aGRfYWRkcmVzcyA9IGlvcmVtYXAoYWRkci5taW5pbXVtLCBhZGRyLmFkZHJlc3NfbGVuZ3RoKTsKIAogCQlpZiAoaHBldF9pc19rbm93bihoZHApKSB7Ci0JCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IDB4JWx4IGlzIGJ1c3lcbiIsCi0JCQkJX19mdW5jX18sIGhkcC0+aGRfcGh5c19hZGRyZXNzKTsKIAkJCWlvdW5tYXAoaGRwLT5oZF9hZGRyZXNzKTsKIAkJCXJldHVybiBBRV9BTFJFQURZX0VYSVNUUzsKIAkJfQpAQCAtODkxLDggKzkxMiw2IEBACiAJCQkJCQlIUEVUX1JBTkdFX1NJWkUpOwogCiAJCWlmIChocGV0X2lzX2tub3duKGhkcCkpIHsKLQkJCXByaW50ayhLRVJOX0RFQlVHICIlczogMHglbHggaXMgYnVzeVxuIiwKLQkJCQlfX2Z1bmNfXywgaGRwLT5oZF9waHlzX2FkZHJlc3MpOwogCQkJaW91bm1hcChoZHAtPmhkX2FkZHJlc3MpOwogCQkJcmV0dXJuIEFFX0FMUkVBRFlfRVhJU1RTOwogCQl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvaHZjX2NvbnNvbGUuYyBiL2RyaXZlcnMvY2hhci9odmNfY29uc29sZS5jCmluZGV4IGZkNjQxMzcuLmJmNzA0NTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9odmNfY29uc29sZS5jCisrKyBiL2RyaXZlcnMvY2hhci9odmNfY29uc29sZS5jCkBAIC0zNjcsMTMgKzM2NywxMyBAQAogCXNwaW5fbG9ja19pcnFzYXZlKCZocC0+bG9jaywgZmxhZ3MpOwogCiAJaWYgKC0taHAtPmNvdW50ID09IDApIHsKLQkJaWYgKGhwLT5vcHMtPm5vdGlmaWVyX2RlbCkKLQkJCWhwLT5vcHMtPm5vdGlmaWVyX2RlbChocCwgaHAtPmRhdGEpOwotCiAJCS8qIFdlIGFyZSBkb25lIHdpdGggdGhlIHR0eSBwb2ludGVyIG5vdy4gKi8KIAkJaHAtPnR0eSA9IE5VTEw7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmhwLT5sb2NrLCBmbGFncyk7CiAKKwkJaWYgKGhwLT5vcHMtPm5vdGlmaWVyX2RlbCkKKwkJCWhwLT5vcHMtPm5vdGlmaWVyX2RlbChocCwgaHAtPmRhdGEpOworCiAJCS8qCiAJCSAqIENoYWluIGNhbGxzIGNoYXJzX2luX2J1ZmZlcigpIGFuZCByZXR1cm5zIGltbWVkaWF0ZWx5IGlmCiAJCSAqIHRoZXJlIGlzIG5vIGJ1ZmZlcmVkIGRhdGEgb3RoZXJ3aXNlIHNsZWVwcyBvbiBhIHdhaXQgcXVldWUKQEAgLTQxNiwxMSArNDE2LDExIEBACiAJaHAtPm5fb3V0YnVmID0gMDsKIAlocC0+dHR5ID0gTlVMTDsKIAorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmhwLT5sb2NrLCBmbGFncyk7CisKIAlpZiAoaHAtPm9wcy0+bm90aWZpZXJfZGVsKQogCQkJaHAtPm9wcy0+bm90aWZpZXJfZGVsKGhwLCBocC0+ZGF0YSk7CiAKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZocC0+bG9jaywgZmxhZ3MpOwotCiAJd2hpbGUodGVtcF9vcGVuX2NvdW50KSB7CiAJCS0tdGVtcF9vcGVuX2NvdW50OwogCQlrcmVmX3B1dCgmaHAtPmtyZWYsIGRlc3Ryb3lfaHZjX3N0cnVjdCk7CkBAIC04MTksMTEgKzgxOSwxMSBAQAogCWh2Y19kcml2ZXIgPSBkcnY7CiAJcmV0dXJuIDA7CiAKLXB1dF90dHk6Ci0JcHV0X3R0eV9kcml2ZXIoaHZjX2RyaXZlcik7CiBzdG9wX3RocmVhZDoKIAlrdGhyZWFkX3N0b3AoaHZjX3Rhc2spOwogCWh2Y190YXNrID0gTlVMTDsKK3B1dF90dHk6CisJcHV0X3R0eV9kcml2ZXIoZHJ2KTsKIG91dDoKIAlyZXR1cm4gZXJyOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2h3X3JhbmRvbS9vbWFwLXJuZy5jIGIvZHJpdmVycy9jaGFyL2h3X3JhbmRvbS9vbWFwLXJuZy5jCmluZGV4IDUxNzM4YmQuLmQ0ZTdkY2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9od19yYW5kb20vb21hcC1ybmcuYworKysgYi9kcml2ZXJzL2NoYXIvaHdfcmFuZG9tL29tYXAtcm5nLmMKQEAgLTExOCwxOCArMTE4LDIxIEBACiAKIAltZW0gPSByZXF1ZXN0X21lbV9yZWdpb24ocmVzLT5zdGFydCwgcmVzLT5lbmQgLSByZXMtPnN0YXJ0ICsgMSwKIAkJCQkgcGRldi0+bmFtZSk7Ci0JaWYgKG1lbSA9PSBOVUxMKQotCQlyZXR1cm4gLUVCVVNZOworCWlmIChtZW0gPT0gTlVMTCkgeworCQlyZXQgPSAtRUJVU1k7CisJCWdvdG8gZXJyX3JlZ2lvbjsKKwl9CiAKIAlkZXZfc2V0X2RydmRhdGEoJnBkZXYtPmRldiwgbWVtKTsKLQlybmdfYmFzZSA9ICh1MzIgX19mb3JjZSBfX2lvbWVtICopaW9fcDJ2KHJlcy0+c3RhcnQpOworCXJuZ19iYXNlID0gaW9yZW1hcChyZXMtPnN0YXJ0LCByZXMtPmVuZCAtIHJlcy0+c3RhcnQgKyAxKTsKKwlpZiAoIXJuZ19iYXNlKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gZXJyX2lvcmVtYXA7CisJfQogCiAJcmV0ID0gaHdybmdfcmVnaXN0ZXIoJm9tYXBfcm5nX29wcyk7Ci0JaWYgKHJldCkgewotCQlyZWxlYXNlX3Jlc291cmNlKG1lbSk7Ci0JCXJuZ19iYXNlID0gTlVMTDsKLQkJcmV0dXJuIHJldDsKLQl9CisJaWYgKHJldCkKKwkJZ290byBlcnJfcmVnaXN0ZXI7CiAKIAlkZXZfaW5mbygmcGRldi0+ZGV2LCAiT01BUCBSYW5kb20gTnVtYmVyIEdlbmVyYXRvciB2ZXIuICUwMnhcbiIsCiAJCW9tYXBfcm5nX3JlYWRfcmVnKFJOR19SRVZfUkVHKSk7CkBAIC0xMzgsNiArMTQxLDE4IEBACiAJcm5nX2RldiA9IHBkZXY7CiAKIAlyZXR1cm4gMDsKKworZXJyX3JlZ2lzdGVyOgorCWlvdW5tYXAocm5nX2Jhc2UpOworCXJuZ19iYXNlID0gTlVMTDsKK2Vycl9pb3JlbWFwOgorCXJlbGVhc2VfcmVzb3VyY2UobWVtKTsKK2Vycl9yZWdpb246CisJaWYgKGNwdV9pc19vbWFwMjR4eCgpKSB7CisJCWNsa19kaXNhYmxlKHJuZ19pY2spOworCQljbGtfcHV0KHJuZ19pY2spOworCX0KKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgaW50IF9fZXhpdCBvbWFwX3JuZ19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKQEAgLTE0OCw2ICsxNjMsOCBAQAogCiAJb21hcF9ybmdfd3JpdGVfcmVnKFJOR19NQVNLX1JFRywgMHgwKTsKIAorCWlvdW5tYXAocm5nX2Jhc2UpOworCiAJaWYgKGNwdV9pc19vbWFwMjR4eCgpKSB7CiAJCWNsa19kaXNhYmxlKHJuZ19pY2spOwogCQljbGtfcHV0KHJuZ19pY2spOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2lwMi9NYWtlZmlsZSBiL2RyaXZlcnMvY2hhci9pcDIvTWFrZWZpbGUKaW5kZXggOTM5NjE4Zi4uYmMzOTdkOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2lwMi9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2NoYXIvaXAyL01ha2VmaWxlCkBAIC00LDUgKzQsNSBAQAogCiBvYmotJChDT05GSUdfQ09NUFVUT05FKSAgICAgICAgICs9IGlwMi5vCiAKLWlwMi1vYmpzCQkJOj0gaXAyYmFzZS5vIGlwMm1haW4ubworaXAyLW9ianMJCQk6PSBpcDJtYWluLm8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2lwMi9pMmVsbGlzLmMgYi9kcml2ZXJzL2NoYXIvaXAyL2kyZWxsaXMuYwppbmRleCAzNjAxMDE3Li4yOWRiNDRkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvaXAyL2kyZWxsaXMuYworKysgYi9kcml2ZXJzL2NoYXIvaXAyL2kyZWxsaXMuYwpAQCAtNjksMzggKzY5LDYgQEAKIC8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCiAvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotLy8gRnVuY3Rpb246ICAgaWlFbGxpc0luaXQoKQotLy8gUGFyYW1ldGVyczogTm9uZQotLy8KLS8vIFJldHVybnM6ICAgIE5vdGhpbmcKLS8vCi0vLyBEZXNjcmlwdGlvbjoKLS8vCi0vLyBUaGlzIHJvdXRpbmUgcGVyZm9ybXMgYW55IHJlcXVpcmVkIGluaXRpYWxpemF0aW9uIG9mIHRoZSBpaUVsbGlzIHN1YnN5c3RlbS4KLS8vCi0vLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotc3RhdGljIHZvaWQKLWlpRWxsaXNJbml0KHZvaWQpCi17Ci19Ci0KLS8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0vLyBGdW5jdGlvbjogICBpaUVsbGlzQ2xlYW51cCgpCi0vLyBQYXJhbWV0ZXJzOiBOb25lCi0vLwotLy8gUmV0dXJuczogICAgTm90aGluZwotLy8KLS8vIERlc2NyaXB0aW9uOgotLy8KLS8vIFRoaXMgcm91dGluZSBwZXJmb3JtcyBhbnkgcmVxdWlyZWQgY2xlYW51cCBvZiB0aGUgaWlFbGxpcyBzdWJzeXN0ZW0uCi0vLwotLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLXN0YXRpYyB2b2lkCi1paUVsbGlzQ2xlYW51cCh2b2lkKQotewotfQotCi0vLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogLy8gRnVuY3Rpb246ICAgaWlTZXRBZGRyZXNzKHBCLCBhZGRyZXNzLCBkZWxheSkKIC8vIFBhcmFtZXRlcnM6IHBCICAgICAgLSBwb2ludGVyIHRvIHRoZSBib2FyZCBzdHJ1Y3R1cmUKIC8vICAgICAgICAgICAgIGFkZHJlc3MgLSB0aGUgcHVycG9ydGVkIEkvTyBhZGRyZXNzIG9mIHRoZSBib2FyZApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2lwMi9pMmVsbGlzLmggYi9kcml2ZXJzL2NoYXIvaXAyL2kyZWxsaXMuaAppbmRleCBjODhhNjRlLi5mYjZkZjI0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvaXAyL2kyZWxsaXMuaAorKysgYi9kcml2ZXJzL2NoYXIvaXAyL2kyZWxsaXMuaApAQCAtNTExLDcgKzUxMSw2IEBACiAvLwogLy8gSW5pdGlhbGl6YXRpb24gb2YgYSBib2FyZCAmIHN0cnVjdHVyZSBpcyBpbiBmb3VyIChmaXZlISkgcGFydHM6CiAvLwotLy8gMCkgaWlFbGxpc0luaXQoKSAgLSBJbml0aWFsaXplIGlpRWxsaXMgc3Vic3lzdGVtLgogLy8gMSkgaWlTZXRBZGRyZXNzKCkgLSBEZWZpbmUgdGhlIGJvYXJkIGFkZHJlc3MgJiBkZWxheSBmdW5jdGlvbiBmb3IgYSBib2FyZC4KIC8vIDIpIGlpUmVzZXQoKSAgICAgIC0gUmVzZXQgdGhlIGJvYXJkICAgKHByb3ZpZGVkIGl0IGV4aXN0cykKIC8vICAgICAgIC0tIE5vdGUgeW91IG1heSBkbyB0aGlzIHRvIHNldmVyYWwgYm9hcmRzIC0tCkBAIC01MjMsNyArNTIyLDYgQEAKIC8vIGxvYWR3YXJlLiAgVG8gY2hhbmdlIGxvYWR3YXJlLCB5b3UgbXVzdCBiZWdpbiBhZ2FpbiB3aXRoIHN0ZXAgMiwgcmVzZXR0aW5nCiAvLyB0aGUgYm9hcmQgYWdhaW4gKHN0ZXAgMSBub3QgbmVlZGVkKS4KIAotc3RhdGljIHZvaWQgaWlFbGxpc0luaXQodm9pZCk7CiBzdGF0aWMgaW50IGlpU2V0QWRkcmVzcyhpMmVCb3JkU3RyUHRyLCBpbnQsIGRlbGF5RnVuY190ICk7CiBzdGF0aWMgaW50IGlpUmVzZXQoaTJlQm9yZFN0clB0cik7CiBzdGF0aWMgaW50IGlpUmVzZXREZWxheShpMmVCb3JkU3RyUHRyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9pcDIvaXAyYmFzZS5jIGIvZHJpdmVycy9jaGFyL2lwMi9pcDJiYXNlLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgxNTVlMjQuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9jaGFyL2lwMi9pcDJiYXNlLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxMDggKzAsMCBAQAotLy8gaXAyLmMKLS8vIFRoaXMgaXMgYSBkdW1teSBtb2R1bGUgdG8gbWFrZSB0aGUgZmlybXdhcmUgYXZhaWxhYmxlIHdoZW4gbmVlZGVkCi0vLyBhbmQgYWxsb3dzIGl0IHRvIGJlIHVubG9hZGVkIHdoZW4gbm90LiBSdW1vciBpcyB0aGUgX19pbml0ZGF0YSAKLS8vIG1hY3JvIGRvZXNuJ3QgYWx3YXlzIHdvcmtzIG9uIGFsbCBwbGF0Zm9ybXMgc28gd2UgdXNlIHRoaXMga2x1ZGdlLgotLy8gSWYgbm90IGNvbXBpbGVkIGFzIGEgbW9kdWxlIGl0IGp1c3QgbWFrZXMgZmlwX2Zpcm0gYXZhbGlhYmxlIHRoZW4KLS8vICBfX2luaXRkYXRhIHNob3VsZCB3b3JrIGFzIGFkdmVydGl6ZWQKLS8vCi0KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvd2FpdC5oPgotCi0jaWZuZGVmIF9faW5pdAotI2RlZmluZSBfX2luaXQKLSNlbmRpZgotI2lmbmRlZiBfX2luaXRmdW5jCi0jZGVmaW5lIF9faW5pdGZ1bmMoYSkgYQotI2VuZGlmCi0jaWZuZGVmIF9faW5pdGRhdGEKLSNkZWZpbmUgX19pbml0ZGF0YQotI2VuZGlmCi0KLSNpbmNsdWRlICJpcDJ0eXBlcy5oIgkJCi0KLWludAotaXAyX2xvYWRtYWluKGludCAqLCBpbnQgKik7IC8vIHJlZiBpbnRvIGlwMm1haW4uYwotCi0vKiBOb3RlOiBBZGQgY29tcGlsZWQgaW4gZGVmYXVsdHMgdG8gdGhlc2UgYXJyYXlzLCBub3QgdG8gdGhlIHN0cnVjdHVyZQotCWluIGlwMi5oIGFueSBsb25nZXIuICBUaGF0IHN0cnVjdHVyZSBXSUxMIGdldCBvdmVycmlkZGVuCi0JYnkgdGhlc2UgdmFsdWVzLCBvciBjb21tYW5kIGxpbmUgdmFsdWVzLCBvciBpbnNtb2QgdmFsdWVzISEhICA9bWh3PQotKi8KLXN0YXRpYyBpbnQgaW9bSVAyX01BWF9CT0FSRFNdPSB7IDAsIDAsIDAsIDAgfTsKLXN0YXRpYyBpbnQgaXJxW0lQMl9NQVhfQk9BUkRTXSA9IHsgLTEsIC0xLCAtMSwgLTEgfTsgCi0KLXN0YXRpYyBpbnQgcG9sbF9vbmx5ID0gMDsKLQotTU9EVUxFX0FVVEhPUigiRG91ZyBNY05hc2giKTsKLU1PRFVMRV9ERVNDUklQVElPTigiQ29tcHV0b25lIEludGVsbGlQb3J0IFBsdXMgRHJpdmVyIik7Ci1tb2R1bGVfcGFyYW1fYXJyYXkoaXJxLCBpbnQsIE5VTEwsIDApOwotTU9EVUxFX1BBUk1fREVTQyhpcnEsIkludGVycnVwdHMgZm9yIEludGVsbGlQb3J0IENhcmRzIik7Ci1tb2R1bGVfcGFyYW1fYXJyYXkoaW8sIGludCwgTlVMTCwgMCk7Ci1NT0RVTEVfUEFSTV9ERVNDKGlvLCJJL08gcG9ydHMgZm9yIEludGVsbGlQb3J0IENhcmRzIik7Ci1tb2R1bGVfcGFyYW0ocG9sbF9vbmx5LCBib29sLCAwKTsKLU1PRFVMRV9QQVJNX0RFU0MocG9sbF9vbmx5LCJEbyBub3QgdXNlIGNhcmQgaW50ZXJydXB0cyIpOwotCi0KLXN0YXRpYyBpbnQgX19pbml0IGlwMl9pbml0KHZvaWQpCi17Ci0JaWYoIHBvbGxfb25seSApIHsKLQkJLyogSGFyZCBsb2NrIHRoZSBpbnRlcnJ1cHRzIHRvIHplcm8gKi8KLQkJaXJxWzBdID0gaXJxWzFdID0gaXJxWzJdID0gaXJxWzNdID0gMDsKLQl9Ci0KLQlyZXR1cm4gaXAyX2xvYWRtYWluKGlvLCBpcnEpOwotfQotbW9kdWxlX2luaXQoaXAyX2luaXQpOwotCi1NT0RVTEVfTElDRU5TRSgiR1BMIik7Ci0KLSNpZm5kZWYgTU9EVUxFCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKglpcDJfc2V0dXA6Ci0gKgkJc3RyOiBrZXJuZWwgY29tbWFuZCBsaW5lIHN0cmluZwotICoKLSAqCUNhbid0IGF1dG9wcm9iZSB0aGUgYm9hcmRzIHNvIHVzZXIgbXVzdCBzcGVjaWZ5IGNvbmZpZ3VyYXRpb24gb24KLSAqCWtlcm5lbCBjb21tYW5kIGxpbmUuICBTYW5lIHBlb3BsZSBidWlsZCBpdCBtb2R1bGFyIGJ1dCB0aGUgb3RoZXJzCi0gKgljb21lIGhlcmUuCi0gKgotICoJQWx0ZXJuYXRpbmcgcGFpcnMgb2YgaW8saXJxIGZvciB1cCB0byA0IGJvYXJkcy4KLSAqCQlpcDI9aW8wLGlycTAsaW8xLGlycTEsaW8yLGlycTIsaW8zLGlycTMKLSAqCi0gKgkJaW89MCA9PiBObyBib2FyZAotICoJCWlvPTEgPT4gUENJCi0gKgkJaW89MiA9PiBFSVNBCi0gKgkJZWxzZSA9PiBJU0EgSS9PIGFkZHJlc3MKLSAqCi0gKgkJaXJxPTAgb3IgaW52YWxpZCBmb3IgSVNBIHdpbGwgcmV2ZXJ0IHRvIHBvbGxpbmcgbW9kZQotICoKLSAqCQlBbnkgdmFsdWUgPSAtMSwgZG8gbm90IG92ZXJ3cml0ZSBjb21waWxlZCBpbiB2YWx1ZS4KLSAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotc3RhdGljIGludCBfX2luaXQgaXAyX3NldHVwKGNoYXIgKnN0cikKLXsKLQlpbnQJaW50c1sxMF07CS8qIDQgYm9hcmRzLCAyIHBhcmFtZXRlcnMgKyAyICovCi0JaW50CWksIGo7Ci0KLQlzdHIgPSBnZXRfb3B0aW9ucyAoc3RyLCBBUlJBWV9TSVpFKGludHMpLCBpbnRzKTsKLQotCWZvciggaSA9IDAsIGogPSAxOyBpIDwgNDsgaSsrICkgewotCQlpZiggaiA+IGludHNbMF0gKSB7Ci0JCQlicmVhazsKLQkJfQotCQlpZiggaW50c1tqXSA+PSAwICkgewotCQkJaW9baV0gPSBpbnRzW2pdOwotCQl9Ci0JCWorKzsKLQkJaWYoIGogPiBpbnRzWzBdICkgewotCQkJYnJlYWs7Ci0JCX0KLQkJaWYoIGludHNbal0gPj0gMCApIHsKLQkJCWlycVtpXSA9IGludHNbal07Ci0JCX0KLQkJaisrOwotCX0KLQlyZXR1cm4gMTsKLX0KLV9fc2V0dXAoImlwMj0iLCBpcDJfc2V0dXApOwotI2VuZGlmIC8qICFNT0RVTEUgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9pcDIvaXAybWFpbi5jIGIvZHJpdmVycy9jaGFyL2lwMi9pcDJtYWluLmMKaW5kZXggNjg5ZjlkYy4uNzBlMGViYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2lwMi9pcDJtYWluLmMKKysrIGIvZHJpdmVycy9jaGFyL2lwMi9pcDJtYWluLmMKQEAgLTE1MCwxNSArMTUwLDEyIEBACiAvKioqKioqKioqKioqKi8KIAogLyogU3RyaW5nIGNvbnN0YW50cyB0byBpZGVudGlmeSBvdXJzZWx2ZXMgKi8KLXN0YXRpYyBjaGFyICpwY05hbWUgICAgPSAiQ29tcHV0b25lIEludGVsbGlQb3J0IFBsdXMgbXVsdGlwb3J0IGRyaXZlciI7Ci1zdGF0aWMgY2hhciAqcGNWZXJzaW9uID0gIjEuMi4xNCI7CitzdGF0aWMgY29uc3QgY2hhciBwY05hbWVbXSA9ICJDb21wdXRvbmUgSW50ZWxsaVBvcnQgUGx1cyBtdWx0aXBvcnQgZHJpdmVyIjsKK3N0YXRpYyBjb25zdCBjaGFyIHBjVmVyc2lvbltdID0gIjEuMi4xNCI7CiAKIC8qIFN0cmluZyBjb25zdGFudHMgZm9yIHBvcnQgbmFtZXMgKi8KLXN0YXRpYyBjaGFyICpwY0RyaXZlcl9uYW1lICAgPSAiaXAyIjsKLXN0YXRpYyBjaGFyICpwY0lwbCAgICAJCSA9ICJpcDJpcGwiOwotCi0vLyBjaGVlenkga2x1ZGdlIG9yIGdlbml1cyAtIHlvdSBkZWNpZGU/Ci1pbnQgaXAyX2xvYWRtYWluKGludCAqLCBpbnQgKik7CitzdGF0aWMgY29uc3QgY2hhciBwY0RyaXZlcl9uYW1lW10gPSAiaXAyIjsKK3N0YXRpYyBjb25zdCBjaGFyIHBjSXBsW10gPSAiaXAyaXBsIjsKIAogLyoqKioqKioqKioqKioqKioqKioqKioqLwogLyogRnVuY3Rpb24gUHJvdG90eXBlcyAqLwpAQCAtMjQwLDggKzIzNyw4IEBACiAJLm9wZW4JCT0gaXAyX2lwbF9vcGVuLAogfTsgCiAKLXN0YXRpYyB1bnNpZ25lZCBsb25nIGlycV9jb3VudGVyID0gMDsKLXN0YXRpYyB1bnNpZ25lZCBsb25nIGJoX2NvdW50ZXIgPSAwOworc3RhdGljIHVuc2lnbmVkIGxvbmcgaXJxX2NvdW50ZXI7CitzdGF0aWMgdW5zaWduZWQgbG9uZyBiaF9jb3VudGVyOwogCiAvLyBVc2UgaW1tZWRpYXRlIHF1ZXVlIHRvIHNlcnZpY2UgaW50ZXJydXB0cwogI2RlZmluZSBVU0VfSVFJCkBAIC0yNTIsNyArMjQ5LDYgQEAKICAqLwogI2RlZmluZSAgUE9MTF9USU1FT1VUICAgKGppZmZpZXMgKyAxKQogc3RhdGljIERFRklORV9USU1FUihQb2xsVGltZXIsIGlwMl9wb2xsLCAwLCAwKTsKLXN0YXRpYyBjaGFyICBUaW1lck9uOwogCiAjaWZkZWYgSVAyREVCVUdfVFJBQ0UKIC8qIFRyYWNlIChkZWJ1ZykgYnVmZmVyIGRhdGEgKi8KQEAgLTI2OCw4ICsyNjQsOCBAQAogLyoqKioqKioqKiovCiAKICNpZiBkZWZpbmVkKE1PRFVMRSkgJiYgZGVmaW5lZChJUDJERUJVR19PUEVOKQotI2RlZmluZSBEQkdfQ05UKHMpIHByaW50ayhLRVJOX0RFQlVHICIoJXMpOiBbJXhdIHJlZmM9JWQsIHR0eWM9JWQsIG1vZGM9JXggLT4gJXNcbiIsIFwKLQkJICAgIHR0eS0+bmFtZSwocENoLT5mbGFncyksaXAyX3R0eV9kcml2ZXItPnJlZmNvdW50LCBcCisjZGVmaW5lIERCR19DTlQocykgcHJpbnRrKEtFUk5fREVCVUcgIiglcyk6IFsleF0gdHR5Yz0lZCwgbW9kYz0leCAtPiAlc1xuIiwgXAorCQkgICAgdHR5LT5uYW1lLChwQ2gtPmZsYWdzKSwgXAogCQkgICAgdHR5LT5jb3VudCwvKkdFVF9VU0VfQ09VTlQobW9kdWxlKSovMCxzKQogI2Vsc2UKICNkZWZpbmUgREJHX0NOVChzKQpAQCAtMjg3LDggKzI4Myw5IEBACiAKIE1PRFVMRV9BVVRIT1IoIkRvdWcgTWNOYXNoIik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIkNvbXB1dG9uZSBJbnRlbGxpUG9ydCBQbHVzIERyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogCi1zdGF0aWMgaW50IHBvbGxfb25seSA9IDA7CitzdGF0aWMgaW50IHBvbGxfb25seTsKIAogc3RhdGljIGludCBFaXNhX2lycTsKIHN0YXRpYyBpbnQgRWlzYV9zbG90OwpAQCAtMjk3LDM0ICsyOTQsNDYgQEAKIHN0YXRpYyBjaGFyIHJpcnFzW0lQMl9NQVhfQk9BUkRTXTsKIHN0YXRpYyBpbnQgVmFsaWRfSXJxc1tdID0geyAzLCA0LCA1LCA3LCAxMCwgMTEsIDEyLCAxNSwgMH07CiAKKy8qIE5vdGU6IEFkZCBjb21waWxlZCBpbiBkZWZhdWx0cyB0byB0aGVzZSBhcnJheXMsIG5vdCB0byB0aGUgc3RydWN0dXJlCisJaW4gaXAyLmggYW55IGxvbmdlci4gIFRoYXQgc3RydWN0dXJlIFdJTEwgZ2V0IG92ZXJyaWRkZW4KKwlieSB0aGVzZSB2YWx1ZXMsIG9yIGNvbW1hbmQgbGluZSB2YWx1ZXMsIG9yIGluc21vZCB2YWx1ZXMhISEgID1taHc9CisqLworc3RhdGljIGludCBpb1tJUDJfTUFYX0JPQVJEU107CitzdGF0aWMgaW50IGlycVtJUDJfTUFYX0JPQVJEU10gPSB7IC0xLCAtMSwgLTEsIC0xIH07CisKK01PRFVMRV9BVVRIT1IoIkRvdWcgTWNOYXNoIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkNvbXB1dG9uZSBJbnRlbGxpUG9ydCBQbHVzIERyaXZlciIpOworbW9kdWxlX3BhcmFtX2FycmF5KGlycSwgaW50LCBOVUxMLCAwKTsKK01PRFVMRV9QQVJNX0RFU0MoaXJxLCAiSW50ZXJydXB0cyBmb3IgSW50ZWxsaVBvcnQgQ2FyZHMiKTsKK21vZHVsZV9wYXJhbV9hcnJheShpbywgaW50LCBOVUxMLCAwKTsKK01PRFVMRV9QQVJNX0RFU0MoaW8sICJJL08gcG9ydHMgZm9yIEludGVsbGlQb3J0IENhcmRzIik7Cittb2R1bGVfcGFyYW0ocG9sbF9vbmx5LCBib29sLCAwKTsKK01PRFVMRV9QQVJNX0RFU0MocG9sbF9vbmx5LCAiRG8gbm90IHVzZSBjYXJkIGludGVycnVwdHMiKTsKKwogLyogZm9yIHN5c2ZzIGNsYXNzIHN1cHBvcnQgKi8KIHN0YXRpYyBzdHJ1Y3QgY2xhc3MgKmlwMl9jbGFzczsKIAotLy8gU29tZSBmdW5jdGlvbnMgdG8ga2VlcCB0cmFjayBvZiB3aGF0IGlycSdzIHdlIGhhdmUKKy8qIFNvbWUgZnVuY3Rpb25zIHRvIGtlZXAgdHJhY2sgb2Ygd2hhdCBpcnFzIHdlIGhhdmUgKi8KIAotc3RhdGljIGludAotaXNfdmFsaWRfaXJxKGludCBpcnEpCitzdGF0aWMgaW50IF9faW5pdCBpc192YWxpZF9pcnEoaW50IGlycSkKIHsKIAlpbnQgKmkgPSBWYWxpZF9JcnFzOwogCQotCXdoaWxlICgoKmkgIT0gMCkgJiYgKCppICE9IGlycSkpIHsKKwl3aGlsZSAoKmkgIT0gMCAmJiAqaSAhPSBpcnEpCiAJCWkrKzsKLQl9Ci0JcmV0dXJuICgqaSk7CisKKwlyZXR1cm4gKmk7CiB9CiAKLXN0YXRpYyB2b2lkCi1tYXJrX3JlcXVlc3RlZF9pcnEoIGNoYXIgaXJxICkKK3N0YXRpYyB2b2lkIF9faW5pdCBtYXJrX3JlcXVlc3RlZF9pcnEoY2hhciBpcnEpCiB7CiAJcmlycXNbaWluZHgrK10gPSBpcnE7CiB9CiAKLSNpZmRlZiBNT0RVTEUKLXN0YXRpYyBpbnQKLWNsZWFyX3JlcXVlc3RlZF9pcnEoIGNoYXIgaXJxICkKK3N0YXRpYyBpbnQgX19leGl0IGNsZWFyX3JlcXVlc3RlZF9pcnEoY2hhciBpcnEpCiB7CiAJaW50IGk7Ci0JZm9yICggaSA9IDA7IGkgPCBJUDJfTUFYX0JPQVJEUzsgKytpICkgeworCWZvciAoaSA9IDA7IGkgPCBJUDJfTUFYX0JPQVJEUzsgKytpKSB7CiAJCWlmIChyaXJxc1tpXSA9PSBpcnEpIHsKIAkJCXJpcnFzW2ldID0gMDsKIAkJCXJldHVybiAxOwpAQCAtMzMyLDE3ICszNDEsMTUgQEAKIAl9CiAJcmV0dXJuIDA7CiB9Ci0jZW5kaWYKIAotc3RhdGljIGludAotaGF2ZV9yZXF1ZXN0ZWRfaXJxKCBjaGFyIGlycSApCitzdGF0aWMgaW50IGhhdmVfcmVxdWVzdGVkX2lycShjaGFyIGlycSkKIHsKLQkvLyBhcnJheSBpbml0IHRvIHplcm9zIHNvIDAgaXJxIHdpbGwgbm90IGJlIHJlcXVlc3RlZCBhcyBhIHNpZGUgZWZmZWN0CisJLyogYXJyYXkgaW5pdCB0byB6ZXJvcyBzbyAwIGlycSB3aWxsIG5vdCBiZSByZXF1ZXN0ZWQgYXMgYSBzaWRlCisJICogZWZmZWN0ICovCiAJaW50IGk7Ci0JZm9yICggaSA9IDA7IGkgPCBJUDJfTUFYX0JPQVJEUzsgKytpICkgeworCWZvciAoaSA9IDA7IGkgPCBJUDJfTUFYX0JPQVJEUzsgKytpKQogCQlpZiAocmlycXNbaV0gPT0gaXJxKQogCQkJcmV0dXJuIDE7Ci0JfQogCXJldHVybiAwOwogfQogCkBAIC0zNjEsNTMgKzM2OCw0NSBAQAogLyogaGFuZGxlIHN1YnNlcXVlbnQgaW5zdGFsbGF0aW9ucyBvZiB0aGUgZHJpdmVyLiBBbGwgbWVtb3J5IGFsbG9jYXRlZCBieSB0aGUgKi8KIC8qIGRyaXZlciBzaG91bGQgYmUgcmV0dXJuZWQgc2luY2UgaXQgbWF5IGJlIHVubG9hZGVkIGZyb20gbWVtb3J5LiAgICAgICAgICAgICovCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotI2lmZGVmIE1PRFVMRQotdm9pZCBfX2V4aXQKLWlwMl9jbGVhbnVwX21vZHVsZSh2b2lkKQorc3RhdGljIHZvaWQgX19leGl0IGlwMl9jbGVhbnVwX21vZHVsZSh2b2lkKQogewogCWludCBlcnI7CiAJaW50IGk7CiAKLSNpZmRlZiBJUDJERUJVR19JTklUCi0JcHJpbnRrIChLRVJOX0RFQlVHICJVbmxvYWRpbmcgJXM6IHZlcnNpb24gJXNcbiIsIHBjTmFtZSwgcGNWZXJzaW9uICk7Ci0jZW5kaWYKLQkvKiBTdG9wIHBvbGwgdGltZXIgaWYgd2UgaGFkIG9uZS4gKi8KLQlpZiAoIFRpbWVyT24gKSB7Ci0JCWRlbF90aW1lciAoICZQb2xsVGltZXIgKTsKLQkJVGltZXJPbiA9IDA7Ci0JfQorCWRlbF90aW1lcl9zeW5jKCZQb2xsVGltZXIpOwogCiAJLyogUmVzZXQgdGhlIGJvYXJkcyB3ZSBoYXZlLiAqLwotCWZvciggaSA9IDA7IGkgPCBJUDJfTUFYX0JPQVJEUzsgKytpICkgewotCQlpZiAoIGkyQm9hcmRQdHJUYWJsZVtpXSApIHsKLQkJCWlpUmVzZXQoIGkyQm9hcmRQdHJUYWJsZVtpXSApOwotCQl9Ci0JfQorCWZvciAoaSA9IDA7IGkgPCBJUDJfTUFYX0JPQVJEUzsgaSsrKQorCQlpZiAoaTJCb2FyZFB0clRhYmxlW2ldKQorCQkJaWlSZXNldChpMkJvYXJkUHRyVGFibGVbaV0pOwogCiAJLyogVGhlIGZvbGxvd2luZyBpcyBkb25lIGF0IG1vc3Qgb25jZSwgaWYgYW55IGJvYXJkcyB3ZXJlIGluc3RhbGxlZC4gKi8KLQlmb3IgKCBpID0gMDsgaSA8IElQMl9NQVhfQk9BUkRTOyArK2kgKSB7Ci0JCWlmICggaTJCb2FyZFB0clRhYmxlW2ldICkgewotCQkJaWlSZXNldERlbGF5KCBpMkJvYXJkUHRyVGFibGVbaV0gKTsKKwlmb3IgKGkgPSAwOyBpIDwgSVAyX01BWF9CT0FSRFM7IGkrKykgeworCQlpZiAoaTJCb2FyZFB0clRhYmxlW2ldKSB7CisJCQlpaVJlc2V0RGVsYXkoaTJCb2FyZFB0clRhYmxlW2ldKTsKIAkJCS8qIGZyZWUgaW8gYWRkcmVzc2VzIGFuZCBUaWJldCAqLwotCQkJcmVsZWFzZV9yZWdpb24oIGlwMmNvbmZpZy5hZGRyW2ldLCA4ICk7CisJCQlyZWxlYXNlX3JlZ2lvbihpcDJjb25maWcuYWRkcltpXSwgOCk7CiAJCQlkZXZpY2VfZGVzdHJveShpcDJfY2xhc3MsIE1LREVWKElQMl9JUExfTUFKT1IsIDQgKiBpKSk7Ci0JCQlkZXZpY2VfZGVzdHJveShpcDJfY2xhc3MsIE1LREVWKElQMl9JUExfTUFKT1IsIDQgKiBpICsgMSkpOworCQkJZGV2aWNlX2Rlc3Ryb3koaXAyX2NsYXNzLCBNS0RFVihJUDJfSVBMX01BSk9SLAorCQkJCQkJNCAqIGkgKyAxKSk7CiAJCX0KIAkJLyogRGlzYWJsZSBhbmQgcmVtb3ZlIGludGVycnVwdCBoYW5kbGVyLiAqLwotCQlpZiAoIChpcDJjb25maWcuaXJxW2ldID4gMCkgJiYgaGF2ZV9yZXF1ZXN0ZWRfaXJxKGlwMmNvbmZpZy5pcnFbaV0pICkgewkKLQkJCWZyZWVfaXJxICggaXAyY29uZmlnLmlycVtpXSwgKHZvaWQgKikmcGNOYW1lKTsKLQkJCWNsZWFyX3JlcXVlc3RlZF9pcnEoIGlwMmNvbmZpZy5pcnFbaV0pOworCQlpZiAoaXAyY29uZmlnLmlycVtpXSA+IDAgJiYKKwkJCQloYXZlX3JlcXVlc3RlZF9pcnEoaXAyY29uZmlnLmlycVtpXSkpIHsKKwkJCWZyZWVfaXJxKGlwMmNvbmZpZy5pcnFbaV0sICh2b2lkICopJnBjTmFtZSk7CisJCQljbGVhcl9yZXF1ZXN0ZWRfaXJxKGlwMmNvbmZpZy5pcnFbaV0pOwogCQl9CiAJfQogCWNsYXNzX2Rlc3Ryb3koaXAyX2NsYXNzKTsKLQlpZiAoICggZXJyID0gdHR5X3VucmVnaXN0ZXJfZHJpdmVyICggaXAyX3R0eV9kcml2ZXIgKSApICkgewotCQlwcmludGsoS0VSTl9FUlIgIklQMjogZmFpbGVkIHRvIHVucmVnaXN0ZXIgdHR5IGRyaXZlciAoJWQpXG4iLCBlcnIpOwotCX0KKwllcnIgPSB0dHlfdW5yZWdpc3Rlcl9kcml2ZXIoaXAyX3R0eV9kcml2ZXIpOworCWlmIChlcnIpCisJCXByaW50ayhLRVJOX0VSUiAiSVAyOiBmYWlsZWQgdG8gdW5yZWdpc3RlciB0dHkgZHJpdmVyICglZClcbiIsCisJCQkJZXJyKTsKIAlwdXRfdHR5X2RyaXZlcihpcDJfdHR5X2RyaXZlcik7CiAJdW5yZWdpc3Rlcl9jaHJkZXYoSVAyX0lQTF9NQUpPUiwgcGNJcGwpOwogCXJlbW92ZV9wcm9jX2VudHJ5KCJpcDJtZW0iLCBOVUxMKTsKIAotCS8vIGZyZWUgbWVtb3J5CisJLyogZnJlZSBtZW1vcnkgKi8KIAlmb3IgKGkgPSAwOyBpIDwgSVAyX01BWF9CT0FSRFM7IGkrKykgewogCQl2b2lkICpwQjsKICNpZmRlZiBDT05GSUdfUENJCkBAIC00MTcsMjQgKzQxNiwxOCBAQAogCQkJaXAyY29uZmlnLnBjaV9kZXZbaV0gPSBOVUxMOwogCQl9CiAjZW5kaWYKLQkJaWYgKChwQiA9IGkyQm9hcmRQdHJUYWJsZVtpXSkgIT0gMCApIHsKLQkJCWtmcmVlICggcEIgKTsKKwkJcEIgPSBpMkJvYXJkUHRyVGFibGVbaV07CisJCWlmIChwQiAhPSBOVUxMKSB7CisJCQlrZnJlZShwQik7CiAJCQlpMkJvYXJkUHRyVGFibGVbaV0gPSBOVUxMOwogCQl9Ci0JCWlmICgoRGV2VGFibGVNZW1baV0pICE9IE5VTEwgKSB7Ci0JCQlrZnJlZSAoIERldlRhYmxlTWVtW2ldICApOworCQlpZiAoRGV2VGFibGVNZW1baV0gIT0gTlVMTCkgeworCQkJa2ZyZWUoRGV2VGFibGVNZW1baV0pOwogCQkJRGV2VGFibGVNZW1baV0gPSBOVUxMOwogCQl9CiAJfQotCi0JLyogQ2xlYW51cCB0aGUgaWlFbGxpcyBzdWJzeXN0ZW0uICovCi0JaWlFbGxpc0NsZWFudXAoKTsKLSNpZmRlZiBJUDJERUJVR19JTklUCi0JcHJpbnRrIChLRVJOX0RFQlVHICJJUDIgVW5sb2FkZWRcbiIgKTsKLSNlbmRpZgogfQogbW9kdWxlX2V4aXQoaXAyX2NsZWFudXBfbW9kdWxlKTsKLSNlbmRpZiAvKiBNT0RVTEUgKi8KIAogc3RhdGljIGNvbnN0IHN0cnVjdCB0dHlfb3BlcmF0aW9ucyBpcDJfb3BzID0gewogCS5vcGVuICAgICAgICAgICAgPSBpcDJfb3BlbiwKQEAgLTQ5NCwxMzkgKzQ4NywxNjggQEAKIAlyZXR1cm4gZnc7CiB9CiAKLWludAotaXAyX2xvYWRtYWluKGludCAqaW9wLCBpbnQgKmlycXApCisjaWZuZGVmIE1PRFVMRQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoJaXAyX3NldHVwOgorICoJCXN0cjoga2VybmVsIGNvbW1hbmQgbGluZSBzdHJpbmcKKyAqCisgKglDYW4ndCBhdXRvcHJvYmUgdGhlIGJvYXJkcyBzbyB1c2VyIG11c3Qgc3BlY2lmeSBjb25maWd1cmF0aW9uIG9uCisgKglrZXJuZWwgY29tbWFuZCBsaW5lLiAgU2FuZSBwZW9wbGUgYnVpbGQgaXQgbW9kdWxhciBidXQgdGhlIG90aGVycworICoJY29tZSBoZXJlLgorICoKKyAqCUFsdGVybmF0aW5nIHBhaXJzIG9mIGlvLGlycSBmb3IgdXAgdG8gNCBib2FyZHMuCisgKgkJaXAyPWlvMCxpcnEwLGlvMSxpcnExLGlvMixpcnEyLGlvMyxpcnEzCisgKgorICoJCWlvPTAgPT4gTm8gYm9hcmQKKyAqCQlpbz0xID0+IFBDSQorICoJCWlvPTIgPT4gRUlTQQorICoJCWVsc2UgPT4gSVNBIEkvTyBhZGRyZXNzCisgKgorICoJCWlycT0wIG9yIGludmFsaWQgZm9yIElTQSB3aWxsIHJldmVydCB0byBwb2xsaW5nIG1vZGUKKyAqCisgKgkJQW55IHZhbHVlID0gLTEsIGRvIG5vdCBvdmVyd3JpdGUgY29tcGlsZWQgaW4gdmFsdWUuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbnQgX19pbml0IGlwMl9zZXR1cChjaGFyICpzdHIpCit7CisJaW50IGosIGludHNbMTBdOwkvKiA0IGJvYXJkcywgMiBwYXJhbWV0ZXJzICsgMiAqLworCXVuc2lnbmVkIGludCBpOworCisJc3RyID0gZ2V0X29wdGlvbnMoc3RyLCBBUlJBWV9TSVpFKGludHMpLCBpbnRzKTsKKworCWZvciAoaSA9IDAsIGogPSAxOyBpIDwgNDsgaSsrKSB7CisJCWlmIChqID4gaW50c1swXSkKKwkJCWJyZWFrOworCQlpZiAoaW50c1tqXSA+PSAwKQorCQkJaW9baV0gPSBpbnRzW2pdOworCQlqKys7CisJCWlmIChqID4gaW50c1swXSkKKwkJCWJyZWFrOworCQlpZiAoaW50c1tqXSA+PSAwKQorCQkJaXJxW2ldID0gaW50c1tqXTsKKwkJaisrOworCX0KKwlyZXR1cm4gMTsKK30KK19fc2V0dXAoImlwMj0iLCBpcDJfc2V0dXApOworI2VuZGlmIC8qICFNT0RVTEUgKi8KKworc3RhdGljIGludCBfX2luaXQgaXAyX2xvYWRtYWluKHZvaWQpCiB7CiAJaW50IGksIGosIGJveDsKIAlpbnQgZXJyID0gMDsKLQlzdGF0aWMgaW50IGxvYWRlZDsKIAlpMmVCb3JkU3RyUHRyIHBCID0gTlVMTDsKIAlpbnQgcmMgPSAtMTsKLQlzdGF0aWMgc3RydWN0IHBjaV9kZXYgKnBjaV9kZXZfaSA9IE5VTEw7CisJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBOVUxMOwogCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZncgPSBOVUxMOwogCi0JaXAydHJhY2UgKElUUkNfTk9fUE9SVCwgSVRSQ19JTklULCBJVFJDX0VOVEVSLCAwICk7CisJaWYgKHBvbGxfb25seSkgeworCQkvKiBIYXJkIGxvY2sgdGhlIGludGVycnVwdHMgdG8gemVybyAqLworCQlpcnFbMF0gPSBpcnFbMV0gPSBpcnFbMl0gPSBpcnFbM10gPSBwb2xsX29ubHkgPSAwOworCX0KKworCWlwMnRyYWNlKElUUkNfTk9fUE9SVCwgSVRSQ19JTklULCBJVFJDX0VOVEVSLCAwKTsKIAogCS8qIHByb2Nlc3MgY29tbWFuZCBsaW5lIGFyZ3VtZW50cyB0byBtb2Rwcm9iZSBvcgogCQlpbnNtb2QgaS5lLiBpb3AgJiBpcnFwICovCiAJLyogaXJxcCBhbmQgaW9wIHNob3VsZCBBTFdBWVMgYmUgc3BlY2lmaWVkIG5vdy4uLiAgQnV0IHdlIGNoZWNrCiAJCXRoZW0gaW5kaXZpZHVhbGx5IGp1c3QgdG8gYmUgc3VyZSwgYW55d2F5cy4uLiAqLwotCWZvciAoIGkgPSAwOyBpIDwgSVAyX01BWF9CT0FSRFM7ICsraSApIHsKLQkJaWYgKGlvcCkgewotCQkJaXAyY29uZmlnLmFkZHJbaV0gPSBpb3BbaV07Ci0JCQlpZiAoaXJxcCkgewotCQkJCWlmKCBpcnFwW2ldID49IDAgKSB7Ci0JCQkJCWlwMmNvbmZpZy5pcnFbaV0gPSBpcnFwW2ldOwotCQkJCX0gZWxzZSB7Ci0JCQkJCWlwMmNvbmZpZy5pcnFbaV0gPSAwOwotCQkJCX0KLQkvLyBUaGlzIGlzIGEgbGl0dGxlIGJpdCBvZiBhIGhhY2suICBJZiBwb2xsX29ubHk9MSBvbiBjb21tYW5kCi0JLy8gbGluZSBiYWNrIGluIGlwMi5jIE9SIGFsbCBJUlFzIG9uIGFsbCBzcGVjaWZpZWQgYm9hcmRzIGFyZQotCS8vIGV4cGxpY2l0bHkgc2V0IHRvIDAsIHRoZW4gZHJvcCB0byBwb2xsIG9ubHkgbW9kZSBhbmQgb3ZlcnJpZGUKLQkvLyBQQ0kgb3IgRUlTQSBpbnRlcnJ1cHRzLiAgVGhpcyBzdXBlcmNlZWRzIHRoZSBvbGQgaGFjayBvZgotCS8vIHRyaWdnZXJpbmcgaWYgYWxsIGludGVycnVwdHMgd2VyZSB6ZXJvIChsaWtlIGRhIGRlZmF1bHQpLgotCS8vIFN0aWxsIGEgaGFjayBidXQgbGVzcyBwcm9uZSB0byByYW5kb20gYWN0cyBvZiB0ZXJyb3Jpc20uCi0JLy8KLQkvLyBXaGF0IHdlIHJlYWxseSBzaG91bGQgZG8sIG5vdyB0aGF0IHRoZSBJUlEgZGVmYXVsdCBpcyBzZXQKLQkvLyB0byAtMSwgaXMgdG8gdXNlIDAgYXMgYSBoYXJkIGNvZGVkLCBkbyBub3QgcHJvYmUuCi0JLy8KLQkvLwkvXC9cfD1taHc9fFwvXC8KLQkJCQlwb2xsX29ubHkgfD0gaXJxcFtpXTsKLQkJCX0KLQkJfQorCWZvciAoaSA9IDA7IGkgPCBJUDJfTUFYX0JPQVJEUzsgKytpKSB7CisJCWlwMmNvbmZpZy5hZGRyW2ldID0gaW9baV07CisJCWlmIChpcnFbaV0gPj0gMCkKKwkJCWlwMmNvbmZpZy5pcnFbaV0gPSBpcnFbaV07CisJCWVsc2UKKwkJCWlwMmNvbmZpZy5pcnFbaV0gPSAwOworCS8qIFRoaXMgaXMgYSBsaXR0bGUgYml0IG9mIGEgaGFjay4gIElmIHBvbGxfb25seT0xIG9uIGNvbW1hbmQKKwkgICBsaW5lIGJhY2sgaW4gaXAyLmMgT1IgYWxsIElSUXMgb24gYWxsIHNwZWNpZmllZCBib2FyZHMgYXJlCisJICAgZXhwbGljaXRseSBzZXQgdG8gMCwgdGhlbiBkcm9wIHRvIHBvbGwgb25seSBtb2RlIGFuZCBvdmVycmlkZQorCSAgIFBDSSBvciBFSVNBIGludGVycnVwdHMuICBUaGlzIHN1cGVyY2VlZHMgdGhlIG9sZCBoYWNrIG9mCisJICAgdHJpZ2dlcmluZyBpZiBhbGwgaW50ZXJydXB0cyB3ZXJlIHplcm8gKGxpa2UgZGEgZGVmYXVsdCkuCisJICAgU3RpbGwgYSBoYWNrIGJ1dCBsZXNzIHByb25lIHRvIHJhbmRvbSBhY3RzIG9mIHRlcnJvcmlzbS4KKworCSAgIFdoYXQgd2UgcmVhbGx5IHNob3VsZCBkbywgbm93IHRoYXQgdGhlIElSUSBkZWZhdWx0IGlzIHNldAorCSAgIHRvIC0xLCBpcyB0byB1c2UgMCBhcyBhIGhhcmQgY29kZWQsIGRvIG5vdCBwcm9iZS4KKworCQkvXC9cfD1taHc9fFwvXC8KKwkqLworCQlwb2xsX29ubHkgfD0gaXJxW2ldOwogCX0KIAlwb2xsX29ubHkgPSAhcG9sbF9vbmx5OwogCiAJLyogQW5ub3VuY2Ugb3VyIHByZXNlbmNlICovCi0JcHJpbnRrKCBLRVJOX0lORk8gIiVzIHZlcnNpb24gJXNcbiIsIHBjTmFtZSwgcGNWZXJzaW9uICk7Ci0KLQkvLyBpcDIgY2FuIGJlIHVubG9hZGVkIGFuZCByZWxvYWRlZCBmb3Igbm8gZ29vZCByZWFzb24KLQkvLyB3ZSBjYW4ndCBsZXQgdGhhdCBoYXBwZW4gaGVyZSBvciBiYWQgdGhpbmdzIGhhcHBlbgotCS8vIHNlY29uZCBsb2FkIGhvc2VzIGJvYXJkIGJ1dCBub3Qgc3lzdGVtIC0gZml4bWUgbGF0ZXIKLQlpZiAobG9hZGVkKSB7Ci0JCXByaW50ayggS0VSTl9JTkZPICJTdGlsbCBsb2FkZWRcbiIgKTsKLQkJcmV0dXJuIDA7Ci0JfQotCWxvYWRlZCsrOworCXByaW50ayhLRVJOX0lORk8gIiVzIHZlcnNpb24gJXNcbiIsIHBjTmFtZSwgcGNWZXJzaW9uKTsKIAogCWlwMl90dHlfZHJpdmVyID0gYWxsb2NfdHR5X2RyaXZlcihJUDJfTUFYX1BPUlRTKTsKIAlpZiAoIWlwMl90dHlfZHJpdmVyKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCS8qIEluaXRpYWxpc2UgdGhlIGlpRWxsaXMgc3Vic3lzdGVtLiAqLwotCWlpRWxsaXNJbml0KCk7Ci0KLQkvKiBJbml0aWFsaXplIGFycmF5cy4gKi8KLQltZW1zZXQoIGkyQm9hcmRQdHJUYWJsZSwgMCwgc2l6ZW9mIGkyQm9hcmRQdHJUYWJsZSApOwotCW1lbXNldCggRGV2VGFibGUsIDAsIHNpemVvZiBEZXZUYWJsZSApOwotCiAJLyogSW5pdGlhbGlzZSBhbGwgdGhlIGJvYXJkcyB3ZSBjYW4gZmluZCAodXAgdG8gdGhlIG1heGltdW0pLiAqLwotCWZvciAoIGkgPSAwOyBpIDwgSVAyX01BWF9CT0FSRFM7ICsraSApIHsKLQkJc3dpdGNoICggaXAyY29uZmlnLmFkZHJbaV0gKSB7IAorCWZvciAoaSA9IDA7IGkgPCBJUDJfTUFYX0JPQVJEUzsgKytpKSB7CisJCXN3aXRjaCAoaXAyY29uZmlnLmFkZHJbaV0pIHsKIAkJY2FzZSAwOgkvKiBza2lwIHRoaXMgc2xvdCBldmVuIGlmIGNhcmQgaXMgcHJlc2VudCAqLwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6IC8qIElTQSAqLwogCQkgICAvKiBJU0EgYWRkcmVzcyBtdXN0IGJlIHNwZWNpZmllZCAqLwotCQkJaWYgKCAoaXAyY29uZmlnLmFkZHJbaV0gPCAweDEwMCkgfHwgKGlwMmNvbmZpZy5hZGRyW2ldID4gMHgzZjgpICkgewotCQkJCXByaW50ayAoIEtFUk5fRVJSICJJUDI6IEJhZCBJU0EgYm9hcmQgJWQgYWRkcmVzcyAleFxuIiwKLQkJCQkJCQkgaSwgaXAyY29uZmlnLmFkZHJbaV0gKTsKKwkJCWlmIChpcDJjb25maWcuYWRkcltpXSA8IDB4MTAwIHx8CisJCQkJCWlwMmNvbmZpZy5hZGRyW2ldID4gMHgzZjgpIHsKKwkJCQlwcmludGsoS0VSTl9FUlIgIklQMjogQmFkIElTQSBib2FyZCAlZCAiCisJCQkJCQkiYWRkcmVzcyAleFxuIiwgaSwKKwkJCQkJCWlwMmNvbmZpZy5hZGRyW2ldKTsKIAkJCQlpcDJjb25maWcuYWRkcltpXSA9IDA7Ci0JCQl9IGVsc2UgewotCQkJCWlwMmNvbmZpZy50eXBlW2ldID0gSVNBOworCQkJCWJyZWFrOworCQkJfQorCQkJaXAyY29uZmlnLnR5cGVbaV0gPSBJU0E7CiAKLQkJCQkvKiBDaGVjayBmb3IgdmFsaWQgaXJxIGFyZ3VtZW50LCBzZXQgZm9yIHBvbGxpbmcgaWYgaW52YWxpZCAqLwotCQkJCWlmIChpcDJjb25maWcuaXJxW2ldICYmICFpc192YWxpZF9pcnEoaXAyY29uZmlnLmlycVtpXSkpIHsKLQkJCQkJcHJpbnRrKEtFUk5fRVJSICJJUDI6IEJhZCBJUlEoJWQpIHNwZWNpZmllZFxuIixpcDJjb25maWcuaXJxW2ldKTsKLQkJCQkJaXAyY29uZmlnLmlycVtpXSA9IDA7Ly8gMCBpcyBwb2xsaW5nIGFuZCBpcyB2YWxpZCBpbiB0aGF0IHNlbnNlCi0JCQkJfQorCQkJLyogQ2hlY2sgZm9yIHZhbGlkIGlycSBhcmd1bWVudCwgc2V0IGZvciBwb2xsaW5nIGlmCisJCQkgKiBpbnZhbGlkICovCisJCQlpZiAoaXAyY29uZmlnLmlycVtpXSAmJgorCQkJCQkhaXNfdmFsaWRfaXJxKGlwMmNvbmZpZy5pcnFbaV0pKSB7CisJCQkJcHJpbnRrKEtFUk5fRVJSICJJUDI6IEJhZCBJUlEoJWQpIHNwZWNpZmllZFxuIiwKKwkJCQkJCWlwMmNvbmZpZy5pcnFbaV0pOworCQkJCS8qIDAgaXMgcG9sbGluZyBhbmQgaXMgdmFsaWQgaW4gdGhhdCBzZW5zZSAqLworCQkJCWlwMmNvbmZpZy5pcnFbaV0gPSAwOwogCQkJfQogCQkJYnJlYWs7CiAJCWNhc2UgUENJOgogI2lmZGVmIENPTkZJR19QQ0kKLQkJCXsKLQkJCQlpbnQgc3RhdHVzOworCQl7CisJCQl1MzIgYWRkcjsKKwkJCWludCBzdGF0dXM7CiAKLQkJCQlwY2lfZGV2X2kgPSBwY2lfZ2V0X2RldmljZShQQ0lfVkVORE9SX0lEX0NPTVBVVE9ORSwKLQkJCQkJCQkgIFBDSV9ERVZJQ0VfSURfQ09NUFVUT05FX0lQMkVYLCBwY2lfZGV2X2kpOwotCQkJCWlmIChwY2lfZGV2X2kgIT0gTlVMTCkgewotCQkJCQl1bnNpZ25lZCBpbnQgYWRkcjsKLQotCQkJCQlpZiAocGNpX2VuYWJsZV9kZXZpY2UocGNpX2Rldl9pKSkgewotCQkJCQkJcHJpbnRrKCBLRVJOX0VSUiAiSVAyOiBjYW4ndCBlbmFibGUgUENJIGRldmljZSBhdCAlc1xuIiwKLQkJCQkJCQlwY2lfbmFtZShwY2lfZGV2X2kpKTsKLQkJCQkJCWJyZWFrOwotCQkJCQl9Ci0JCQkJCWlwMmNvbmZpZy50eXBlW2ldID0gUENJOwotCQkJCQlpcDJjb25maWcucGNpX2RldltpXSA9IHBjaV9kZXZfZ2V0KHBjaV9kZXZfaSk7Ci0JCQkJCXN0YXR1cyA9Ci0JCQkJCXBjaV9yZWFkX2NvbmZpZ19kd29yZChwY2lfZGV2X2ksIFBDSV9CQVNFX0FERFJFU1NfMSwgJmFkZHIpOwotCQkJCQlpZiAoIGFkZHIgJiAxICkgewotCQkJCQkJaXAyY29uZmlnLmFkZHJbaV09KFVTSE9SVCkoYWRkciYweGZmZmUpOwotCQkJCQl9IGVsc2UgewotCQkJCQkJcHJpbnRrKCBLRVJOX0VSUiAiSVAyOiBQQ0kgSS9PIGFkZHJlc3MgZXJyb3JcbiIpOwotCQkJCQl9Ci0KLS8vCQlJZiB0aGUgUENJIEJJT1MgYXNzaWduZWQgaXQsIGxldHMgdHJ5IGFuZCB1c2UgaXQuICBJZiB3ZQotLy8JCWNhbid0IGFjcXVpcmUgaXQgb3IgaXQgc2NyZXdzIHVwLCBkZWFsIHdpdGggaXQgdGhlbi4KLQotLy8JCQkJCWlmICghaXNfdmFsaWRfaXJxKHBjaV9pcnEpKSB7Ci0vLwkJCQkJCXByaW50ayggS0VSTl9FUlIgIklQMjogQmFkIFBDSSBCSU9TIElSUSglZClcbiIscGNpX2lycSk7Ci0vLwkJCQkJCXBjaV9pcnEgPSAwOwotLy8JCQkJCX0KLQkJCQkJaXAyY29uZmlnLmlycVtpXSA9IHBjaV9kZXZfaS0+aXJxOwotCQkJCX0gZWxzZSB7CS8vIGFubiBlcnJvcgotCQkJCQlpcDJjb25maWcuYWRkcltpXSA9IDA7Ci0JCQkJCXByaW50ayhLRVJOX0VSUiAiSVAyOiBQQ0kgYm9hcmQgJWQgbm90IGZvdW5kXG4iLCBpKTsKLQkJCQl9IAorCQkJcGRldiA9IHBjaV9nZXRfZGV2aWNlKFBDSV9WRU5ET1JfSURfQ09NUFVUT05FLAorCQkJCQlQQ0lfREVWSUNFX0lEX0NPTVBVVE9ORV9JUDJFWCwgcGRldik7CisJCQlpZiAocGRldiA9PSBOVUxMKSB7CisJCQkJaXAyY29uZmlnLmFkZHJbaV0gPSAwOworCQkJCXByaW50ayhLRVJOX0VSUiAiSVAyOiBQQ0kgYm9hcmQgJWQgbm90ICIKKwkJCQkJCSJmb3VuZFxuIiwgaSk7CisJCQkJYnJlYWs7CiAJCQl9CisKKwkJCWlmIChwY2lfZW5hYmxlX2RldmljZShwZGV2KSkgeworCQkJCWRldl9lcnIoJnBkZXYtPmRldiwgImNhbid0IGVuYWJsZSBkZXZpY2VcbiIpOworCQkJCWJyZWFrOworCQkJfQorCQkJaXAyY29uZmlnLnR5cGVbaV0gPSBQQ0k7CisJCQlpcDJjb25maWcucGNpX2RldltpXSA9IHBjaV9kZXZfZ2V0KHBkZXYpOworCQkJc3RhdHVzID0gcGNpX3JlYWRfY29uZmlnX2R3b3JkKHBkZXYsIFBDSV9CQVNFX0FERFJFU1NfMSwKKwkJCQkJJmFkZHIpOworCQkJaWYgKGFkZHIgJiAxKQorCQkJCWlwMmNvbmZpZy5hZGRyW2ldID0gKFVTSE9SVCkoYWRkciAmIDB4ZmZmZSk7CisJCQllbHNlCisJCQkJZGV2X2VycigmcGRldi0+ZGV2LCAiSS9PIGFkZHJlc3MgZXJyb3JcbiIpOworCisJCQlpcDJjb25maWcuaXJxW2ldID0gcGRldi0+aXJxOworCQl9CiAjZWxzZQotCQkJcHJpbnRrKCBLRVJOX0VSUiAiSVAyOiBQQ0kgY2FyZCBzcGVjaWZpZWQgYnV0IFBDSSBzdXBwb3J0IG5vdFxuIik7Ci0JCQlwcmludGsoIEtFUk5fRVJSICJJUDI6IGNvbmZpZ3VyZWQgaW4gdGhpcyBrZXJuZWwuXG4iKTsKLQkJCXByaW50ayggS0VSTl9FUlIgIklQMjogUmVjb21waWxlIGtlcm5lbCB3aXRoIENPTkZJR19QQ0kgZGVmaW5lZCFcbiIpOworCQkJcHJpbnRrKEtFUk5fRVJSICJJUDI6IFBDSSBjYXJkIHNwZWNpZmllZCBidXQgUENJICIKKwkJCQkJInN1cHBvcnQgbm90IGVuYWJsZWQuXG4iKTsKKwkJCXByaW50ayhLRVJOX0VSUiAiSVAyOiBSZWNvbXBpbGUga2VybmVsIHdpdGggQ09ORklHX1BDSSAiCisJCQkJCSJkZWZpbmVkIVxuIik7CiAjZW5kaWYgLyogQ09ORklHX1BDSSAqLwogCQkJYnJlYWs7CiAJCWNhc2UgRUlTQToKLQkJCWlmICggKGlwMmNvbmZpZy5hZGRyW2ldID0gZmluZF9laXNhX2JvYXJkKCBFaXNhX3Nsb3QgKyAxICkpICE9IDApIHsKKwkJCWlwMmNvbmZpZy5hZGRyW2ldID0gZmluZF9laXNhX2JvYXJkKEVpc2Ffc2xvdCArIDEpOworCQkJaWYgKGlwMmNvbmZpZy5hZGRyW2ldICE9IDApIHsKIAkJCQkvKiBFaXNhX2lycSBzZXQgYXMgc2lkZSBlZmZlY3QsIGJvbyAqLwogCQkJCWlwMmNvbmZpZy50eXBlW2ldID0gRUlTQTsKIAkJCX0gCkBAIC02MzQsMzEgKzY1NiwzMiBAQAogCQkJYnJlYWs7CiAJCX0JLyogc3dpdGNoICovCiAJfQkvKiBmb3IgKi8KLQlpZiAocGNpX2Rldl9pKQotCQlwY2lfZGV2X3B1dChwY2lfZGV2X2kpOworCXBjaV9kZXZfcHV0KHBkZXYpOwogCi0JZm9yICggaSA9IDA7IGkgPCBJUDJfTUFYX0JPQVJEUzsgKytpICkgewotCQlpZiAoIGlwMmNvbmZpZy5hZGRyW2ldICkgeworCWZvciAoaSA9IDA7IGkgPCBJUDJfTUFYX0JPQVJEUzsgKytpKSB7CisJCWlmIChpcDJjb25maWcuYWRkcltpXSkgewogCQkJcEIgPSBremFsbG9jKHNpemVvZihpMmVCb3JkU3RyKSwgR0ZQX0tFUk5FTCk7CiAJCQlpZiAocEIpIHsKIAkJCQlpMkJvYXJkUHRyVGFibGVbaV0gPSBwQjsKLQkJCQlpaVNldEFkZHJlc3MoIHBCLCBpcDJjb25maWcuYWRkcltpXSwgaWkyRGVsYXlUaW1lciApOwotCQkJCWlpUmVzZXQoIHBCICk7Ci0JCQl9IGVsc2UgewotCQkJCXByaW50ayhLRVJOX0VSUiAiSVAyOiBib2FyZCBtZW1vcnkgYWxsb2NhdGlvbiBlcnJvclxuIik7Ci0JCQl9CisJCQkJaWlTZXRBZGRyZXNzKHBCLCBpcDJjb25maWcuYWRkcltpXSwKKwkJCQkJCWlpMkRlbGF5VGltZXIpOworCQkJCWlpUmVzZXQocEIpOworCQkJfSBlbHNlCisJCQkJcHJpbnRrKEtFUk5fRVJSICJJUDI6IGJvYXJkIG1lbW9yeSBhbGxvY2F0aW9uICIKKwkJCQkJCSJlcnJvclxuIik7CiAJCX0KIAl9Ci0JZm9yICggaSA9IDA7IGkgPCBJUDJfTUFYX0JPQVJEUzsgKytpICkgewotCQlpZiAoICggcEIgPSBpMkJvYXJkUHRyVGFibGVbaV0gKSAhPSBOVUxMICkgewotCQkJaWlSZXNldERlbGF5KCBwQiApOworCWZvciAoaSA9IDA7IGkgPCBJUDJfTUFYX0JPQVJEUzsgKytpKSB7CisJCXBCID0gaTJCb2FyZFB0clRhYmxlW2ldOworCQlpZiAocEIgIT0gTlVMTCkgeworCQkJaWlSZXNldERlbGF5KHBCKTsKIAkJCWJyZWFrOwogCQl9CiAJfQotCWZvciAoIGkgPSAwOyBpIDwgSVAyX01BWF9CT0FSRFM7ICsraSApIHsKKwlmb3IgKGkgPSAwOyBpIDwgSVAyX01BWF9CT0FSRFM7ICsraSkgewogCQkvKiBXZSBkb24ndCB3YW50IHRvIHJlcXVlc3QgdGhlIGZpcm13YXJlIHVubGVzcyB3ZSBoYXZlIGF0CiAJCSAgIGxlYXN0IG9uZSBib2FyZCAqLwotCQlpZiAoIGkyQm9hcmRQdHJUYWJsZVtpXSAhPSBOVUxMICkgeworCQlpZiAoaTJCb2FyZFB0clRhYmxlW2ldICE9IE5VTEwpIHsKIAkJCWlmICghZncpCiAJCQkJZncgPSBpcDJfcmVxdWVzdF9maXJtd2FyZSgpOwogCQkJaWYgKCFmdykKQEAgLTY2OSw3ICs2OTIsNyBAQAogCWlmIChmdykKIAkJcmVsZWFzZV9maXJtd2FyZShmdyk7CiAKLQlpcDJ0cmFjZSAoSVRSQ19OT19QT1JULCBJVFJDX0lOSVQsIDIsIDAgKTsKKwlpcDJ0cmFjZShJVFJDX05PX1BPUlQsIElUUkNfSU5JVCwgMiwgMCk7CiAKIAlpcDJfdHR5X2RyaXZlci0+b3duZXIJCSAgICA9IFRISVNfTU9EVUxFOwogCWlwMl90dHlfZHJpdmVyLT5uYW1lICAgICAgICAgICAgICAgICA9ICJ0dHlGIjsKQEAgLTY4MCwyMCArNzAzLDIzIEBACiAJaXAyX3R0eV9kcml2ZXItPnN1YnR5cGUgICAgICAgICAgICAgID0gU0VSSUFMX1RZUEVfTk9STUFMOwogCWlwMl90dHlfZHJpdmVyLT5pbml0X3Rlcm1pb3MgICAgICAgICA9IHR0eV9zdGRfdGVybWlvczsKIAlpcDJfdHR5X2RyaXZlci0+aW5pdF90ZXJtaW9zLmNfY2ZsYWcgPSBCOTYwMHxDUzh8Q1JFQUR8SFVQQ0x8Q0xPQ0FMOwotCWlwMl90dHlfZHJpdmVyLT5mbGFncyAgICAgICAgICAgICAgICA9IFRUWV9EUklWRVJfUkVBTF9SQVcgfCBUVFlfRFJJVkVSX0RZTkFNSUNfREVWOworCWlwMl90dHlfZHJpdmVyLT5mbGFncyAgICAgICAgICAgICAgICA9IFRUWV9EUklWRVJfUkVBTF9SQVcgfAorCQlUVFlfRFJJVkVSX0RZTkFNSUNfREVWOwogCXR0eV9zZXRfb3BlcmF0aW9ucyhpcDJfdHR5X2RyaXZlciwgJmlwMl9vcHMpOwogCi0JaXAydHJhY2UgKElUUkNfTk9fUE9SVCwgSVRSQ19JTklULCAzLCAwICk7CisJaXAydHJhY2UoSVRSQ19OT19QT1JULCBJVFJDX0lOSVQsIDMsIDApOwogCi0JLyogUmVnaXN0ZXIgdGhlIHR0eSBkZXZpY2VzLiAqLwotCWlmICggKCBlcnIgPSB0dHlfcmVnaXN0ZXJfZHJpdmVyICggaXAyX3R0eV9kcml2ZXIgKSApICkgewotCQlwcmludGsoS0VSTl9FUlIgIklQMjogZmFpbGVkIHRvIHJlZ2lzdGVyIHR0eSBkcml2ZXIgKCVkKVxuIiwgZXJyKTsKKwllcnIgPSB0dHlfcmVnaXN0ZXJfZHJpdmVyKGlwMl90dHlfZHJpdmVyKTsKKwlpZiAoZXJyKSB7CisJCXByaW50ayhLRVJOX0VSUiAiSVAyOiBmYWlsZWQgdG8gcmVnaXN0ZXIgdHR5IGRyaXZlclxuIik7CiAJCXB1dF90dHlfZHJpdmVyKGlwMl90dHlfZHJpdmVyKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfSBlbHNlCi0JLyogUmVnaXN0ZXIgdGhlIElQTCBkcml2ZXIuICovCi0JaWYgKCAoIGVyciA9IHJlZ2lzdGVyX2NocmRldiAoIElQMl9JUExfTUFKT1IsIHBjSXBsLCAmaXAyX2lwbCApICkgKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiSVAyOiBmYWlsZWQgdG8gcmVnaXN0ZXIgSVBMIGRldmljZSAoJWQpXG4iLCBlcnIgKTsKKwkJcmV0dXJuIGVycjsgLyogbGVha2luZyByZXNvdXJjZXMgKi8KKwl9CisKKwllcnIgPSByZWdpc3Rlcl9jaHJkZXYoSVAyX0lQTF9NQUpPUiwgcGNJcGwsICZpcDJfaXBsKTsKKwlpZiAoZXJyKSB7CisJCXByaW50ayhLRVJOX0VSUiAiSVAyOiBmYWlsZWQgdG8gcmVnaXN0ZXIgSVBMIGRldmljZSAoJWQpXG4iLAorCQkJCWVycik7CiAJfSBlbHNlIHsKIAkJLyogY3JlYXRlIHRoZSBzeXNmcyBjbGFzcyAqLwogCQlpcDJfY2xhc3MgPSBjbGFzc19jcmVhdGUoVEhJU19NT0RVTEUsICJpcDIiKTsKQEAgLTcwNSw4NCArNzMxLDg2IEBACiAJLyogUmVnaXN0ZXIgdGhlIHJlYWRfcHJvY21lbSB0aGluZyAqLwogCWlmICghcHJvY19jcmVhdGUoImlwMm1lbSIsMCxOVUxMLCZpcDJtZW1fcHJvY19mb3BzKSkgewogCQlwcmludGsoS0VSTl9FUlIgIklQMjogZmFpbGVkIHRvIHJlZ2lzdGVyIHJlYWRfcHJvY21lbVxuIik7Ci0JfSBlbHNlIHsKKwkJcmV0dXJuIC1FSU87IC8qIGxlYWtpbmcgcmVzb3VyY2VzICovCisJfQogCi0JaXAydHJhY2UgKElUUkNfTk9fUE9SVCwgSVRSQ19JTklULCA0LCAwICk7Ci0JCS8qIFJlZ2lzdGVyIHRoZSBpbnRlcnJ1cHQgaGFuZGxlciBvciBwb2xsIGhhbmRsZXIsIGRlcGVuZGluZyB1cG9uIHRoZQotCQkgKiBzcGVjaWZpZWQgaW50ZXJydXB0LgotCQkgKi8KKwlpcDJ0cmFjZShJVFJDX05PX1BPUlQsIElUUkNfSU5JVCwgNCwgMCk7CisJLyogUmVnaXN0ZXIgdGhlIGludGVycnVwdCBoYW5kbGVyIG9yIHBvbGwgaGFuZGxlciwgZGVwZW5kaW5nIHVwb24gdGhlCisJICogc3BlY2lmaWVkIGludGVycnVwdC4KKwkgKi8KIAotCQlmb3IoIGkgPSAwOyBpIDwgSVAyX01BWF9CT0FSRFM7ICsraSApIHsKLQkJCWlmICggMCA9PSBpcDJjb25maWcuYWRkcltpXSApIHsKLQkJCQljb250aW51ZTsKLQkJCX0KKwlmb3IgKGkgPSAwOyBpIDwgSVAyX01BWF9CT0FSRFM7ICsraSkgeworCQlpZiAoaXAyY29uZmlnLmFkZHJbaV0gPT0gMCkKKwkJCWNvbnRpbnVlOwogCi0JCQlpZiAoIE5VTEwgIT0gKCBwQiA9IGkyQm9hcmRQdHJUYWJsZVtpXSApICkgewotCQkJCWRldmljZV9jcmVhdGVfZHJ2ZGF0YShpcDJfY2xhc3MsIE5VTEwsCi0JCQkJCQkgICAgICBNS0RFVihJUDJfSVBMX01BSk9SLCA0ICogaSksCi0JCQkJCQkgICAgICBOVUxMLCAiaXBsJWQiLCBpKTsKLQkJCQlkZXZpY2VfY3JlYXRlX2RydmRhdGEoaXAyX2NsYXNzLCBOVUxMLAotCQkJCQkJICAgICAgTUtERVYoSVAyX0lQTF9NQUpPUiwgNCAqIGkgKyAxKSwKLQkJCQkJCSAgICAgIE5VTEwsICJzdGF0JWQiLCBpKTsKKwkJcEIgPSBpMkJvYXJkUHRyVGFibGVbaV07CisJCWlmIChwQiAhPSBOVUxMKSB7CisJCQlkZXZpY2VfY3JlYXRlKGlwMl9jbGFzcywgTlVMTCwKKwkJCQkgICAgICBNS0RFVihJUDJfSVBMX01BSk9SLCA0ICogaSksCisJCQkJICAgICAgTlVMTCwgImlwbCVkIiwgaSk7CisJCQlkZXZpY2VfY3JlYXRlKGlwMl9jbGFzcywgTlVMTCwKKwkJCQkgICAgICBNS0RFVihJUDJfSVBMX01BSk9SLCA0ICogaSArIDEpLAorCQkJCSAgICAgIE5VTEwsICJzdGF0JWQiLCBpKTsKIAotCQkJICAgIGZvciAoIGJveCA9IDA7IGJveCA8IEFCU19NQVhfQk9YRVM7ICsrYm94ICkKLQkJCSAgICB7Ci0JCQkgICAgICAgIGZvciAoIGogPSAwOyBqIDwgQUJTX0JJR0dFU1RfQk9YOyArK2ogKQotCQkJICAgICAgICB7Ci0JCQkJICAgIGlmICggcEItPmkyZUNoYW5uZWxNYXBbYm94XSAmICgxIDw8IGopICkKLQkJCQkgICAgewotCQkJCSAgICAgICAgdHR5X3JlZ2lzdGVyX2RldmljZShpcDJfdHR5X2RyaXZlciwKLQkJCQkJICAgIGogKyBBQlNfQklHR0VTVF9CT1ggKgotCQkJCQkJICAgIChib3graSpBQlNfTUFYX0JPWEVTKSwgTlVMTCk7Ci0JCQkgICAgCSAgICB9Ci0JCQkgICAgICAgIH0KLQkJCSAgICB9Ci0JCQl9Ci0KLQkJCWlmIChwb2xsX29ubHkpIHsKLS8vCQlQb2xsIG9ubHkgZm9yY2VzIGRyaXZlciB0byBvbmx5IHVzZSBwb2xsaW5nIGFuZAotLy8JCXRvIGlnbm9yZSB0aGUgcHJvYmVkIFBDSSBvciBFSVNBIGludGVycnVwdHMuCi0JCQkJaXAyY29uZmlnLmlycVtpXSA9IENJUl9QT0xMOwotCQkJfQotCQkJaWYgKCBpcDJjb25maWcuaXJxW2ldID09IENJUl9QT0xMICkgewotcmV0cnk6Ci0JCQkJaWYgKCFUaW1lck9uKSB7Ci0JCQkJCVBvbGxUaW1lci5leHBpcmVzID0gUE9MTF9USU1FT1VUOwotCQkJCQlhZGRfdGltZXIgKCAmUG9sbFRpbWVyICk7Ci0JCQkJCVRpbWVyT24gPSAxOwotCQkJCQlwcmludGsoIEtFUk5fSU5GTyAiSVAyOiBwb2xsaW5nXG4iKTsKLQkJCQl9Ci0JCQl9IGVsc2UgewotCQkJCWlmIChoYXZlX3JlcXVlc3RlZF9pcnEoaXAyY29uZmlnLmlycVtpXSkpCi0JCQkJCWNvbnRpbnVlOwotCQkJCXJjID0gcmVxdWVzdF9pcnEoIGlwMmNvbmZpZy5pcnFbaV0sIGlwMl9pbnRlcnJ1cHQsCi0JCQkJCUlQMl9TQV9GTEFHUyB8IChpcDJjb25maWcudHlwZVtpXSA9PSBQQ0kgPyBJUlFGX1NIQVJFRCA6IDApLAotCQkJCQlwY05hbWUsIGkyQm9hcmRQdHJUYWJsZVtpXSk7Ci0JCQkJaWYgKHJjKSB7Ci0JCQkJCXByaW50ayhLRVJOX0VSUiAiSVAyOiBhbiByZXF1ZXN0X2lycSBmYWlsZWQ6IGVycm9yICVkXG4iLHJjKTsKLQkJCQkJaXAyY29uZmlnLmlycVtpXSA9IENJUl9QT0xMOwotCQkJCQlwcmludGsoIEtFUk5fSU5GTyAiSVAyOiBQb2xsaW5nICVsZC9zZWMuXG4iLAotCQkJCQkJCShQT0xMX1RJTUVPVVQgLSBqaWZmaWVzKSk7Ci0JCQkJCWdvdG8gcmV0cnk7Ci0JCQkJfSAKLQkJCQltYXJrX3JlcXVlc3RlZF9pcnEoaXAyY29uZmlnLmlycVtpXSk7Ci0JCQkJLyogSW5pdGlhbGlzZSB0aGUgaW50ZXJydXB0IGhhbmRsZXIgYm90dG9tIGhhbGYgKGFrYSBzbGloKS4gKi8KLQkJCX0KKwkJCWZvciAoYm94ID0gMDsgYm94IDwgQUJTX01BWF9CT1hFUzsgYm94KyspCisJCQkJZm9yIChqID0gMDsgaiA8IEFCU19CSUdHRVNUX0JPWDsgaisrKQorCQkJCQlpZiAocEItPmkyZUNoYW5uZWxNYXBbYm94XSAmICgxIDw8IGopKQorCQkJCQkJdHR5X3JlZ2lzdGVyX2RldmljZSgKKwkJCQkJCQlpcDJfdHR5X2RyaXZlciwKKwkJCQkJCQlqICsgQUJTX0JJR0dFU1RfQk9YICoKKwkJCQkJCQkoYm94K2kqQUJTX01BWF9CT1hFUyksCisJCQkJCQkJTlVMTCk7CiAJCX0KLQkJZm9yKCBpID0gMDsgaSA8IElQMl9NQVhfQk9BUkRTOyArK2kgKSB7Ci0JCQlpZiAoIGkyQm9hcmRQdHJUYWJsZVtpXSApIHsKLQkJCQlzZXRfaXJxKCBpLCBpcDJjb25maWcuaXJxW2ldICk7IC8qIHNldCBhbmQgZW5hYmxlIGJvYXJkIGludGVycnVwdCAqLworCisJCWlmIChwb2xsX29ubHkpIHsKKwkJCS8qIFBvbGwgb25seSBmb3JjZXMgZHJpdmVyIHRvIG9ubHkgdXNlIHBvbGxpbmcgYW5kCisJCQkgICB0byBpZ25vcmUgdGhlIHByb2JlZCBQQ0kgb3IgRUlTQSBpbnRlcnJ1cHRzLiAqLworCQkJaXAyY29uZmlnLmlycVtpXSA9IENJUl9QT0xMOworCQl9CisJCWlmIChpcDJjb25maWcuaXJxW2ldID09IENJUl9QT0xMKSB7CityZXRyeToKKwkJCWlmICghdGltZXJfcGVuZGluZygmUG9sbFRpbWVyKSkgeworCQkJCW1vZF90aW1lcigmUG9sbFRpbWVyLCBQT0xMX1RJTUVPVVQpOworCQkJCXByaW50ayhLRVJOX0lORk8gIklQMjogcG9sbGluZ1xuIik7CiAJCQl9CisJCX0gZWxzZSB7CisJCQlpZiAoaGF2ZV9yZXF1ZXN0ZWRfaXJxKGlwMmNvbmZpZy5pcnFbaV0pKQorCQkJCWNvbnRpbnVlOworCQkJcmMgPSByZXF1ZXN0X2lycShpcDJjb25maWcuaXJxW2ldLCBpcDJfaW50ZXJydXB0LAorCQkJCUlQMl9TQV9GTEFHUyB8CisJCQkJKGlwMmNvbmZpZy50eXBlW2ldID09IFBDSSA/IElSUUZfU0hBUkVEIDogMCksCisJCQkJcGNOYW1lLCBpMkJvYXJkUHRyVGFibGVbaV0pOworCQkJaWYgKHJjKSB7CisJCQkJcHJpbnRrKEtFUk5fRVJSICJJUDI6IHJlcXVlc3RfaXJxIGZhaWxlZDogIgorCQkJCQkJImVycm9yICVkXG4iLCByYyk7CisJCQkJaXAyY29uZmlnLmlycVtpXSA9IENJUl9QT0xMOworCQkJCXByaW50ayhLRVJOX0lORk8gIklQMjogUG9sbGluZyAlbGQvc2VjLlxuIiwKKwkJCQkJCShQT0xMX1RJTUVPVVQgLSBqaWZmaWVzKSk7CisJCQkJZ290byByZXRyeTsKKwkJCX0KKwkJCW1hcmtfcmVxdWVzdGVkX2lycShpcDJjb25maWcuaXJxW2ldKTsKKwkJCS8qIEluaXRpYWxpc2UgdGhlIGludGVycnVwdCBoYW5kbGVyIGJvdHRvbSBoYWxmCisJCQkgKiAoYWthIHNsaWgpLiAqLwogCQl9CiAJfQotCWlwMnRyYWNlIChJVFJDX05PX1BPUlQsIElUUkNfSU5JVCwgSVRSQ19SRVRVUk4sIDAgKTsKLQlnb3RvIG91dDsKKworCWZvciAoaSA9IDA7IGkgPCBJUDJfTUFYX0JPQVJEUzsgKytpKSB7CisJCWlmIChpMkJvYXJkUHRyVGFibGVbaV0pIHsKKwkJCS8qIHNldCBhbmQgZW5hYmxlIGJvYXJkIGludGVycnVwdCAqLworCQkJc2V0X2lycShpLCBpcDJjb25maWcuaXJxW2ldKTsKKwkJfQorCX0KKworCWlwMnRyYWNlKElUUkNfTk9fUE9SVCwgSVRSQ19JTklULCBJVFJDX1JFVFVSTiwgMCk7CisKKwlyZXR1cm4gMDsKIAogb3V0X2NocmRldjoKIAl1bnJlZ2lzdGVyX2NocmRldihJUDJfSVBMX01BSk9SLCAiaXAyIik7Ci1vdXQ6CisJLyogdW5yZWdpc3RlciBhbmQgcHV0IHR0eSBoZXJlICovCiAJcmV0dXJuIGVycjsKIH0KK21vZHVsZV9pbml0KGlwMl9sb2FkbWFpbik7CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAvKiBGdW5jdGlvbjogICBpcDJfaW5pdF9ib2FyZCgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwpAQCAtMTE5OSw5ICsxMjI3LDggQEAKIHsKIAlpbnQgaTsKIAlpMmVCb3JkU3RyUHRyICBwQjsKLQljb25zdCBpbnQgaXJxID0gMDsKIAotCWlwMnRyYWNlIChJVFJDX05PX1BPUlQsIElUUkNfSU5UUiwgOTksIDEsIGlycSApOworCWlwMnRyYWNlKElUUkNfTk9fUE9SVCwgSVRSQ19JTlRSLCA5OSwgMSwgMCk7CiAKIAkvKiBTZXJ2aWNlIGp1c3QgdGhlIGJvYXJkcyBvbiB0aGUgbGlzdCB1c2luZyB0aGlzIGlycSAqLwogCWZvciggaSA9IDA7IGkgPCBpMm5Cb2FyZHM7ICsraSApIHsKQEAgLTEyMTAsOSArMTIzNyw4IEBACiAvLwkJT25seSBwcm9jZXNzIHRob3NlIGJvYXJkcyB3aGljaCBtYXRjaCBvdXIgSVJRLgogLy8JCQlJUlEgPSAwIGZvciBwb2xsZWQgYm9hcmRzLCB3ZSB3b24ndCBwb2xsICJJUlEiIGJvYXJkcwogCi0JCWlmICggcEIgJiYgKHBCLT5pMmVVc2luZ0lycSA9PSBpcnEpICkgeworCQlpZiAocEIgJiYgcEItPmkyZVVzaW5nSXJxID09IDApCiAJCQlpcDJfaXJxX3dvcmsocEIpOwotCQl9CiAJfQogCiAJKytpcnFfY291bnRlcjsKQEAgLTEyNTAsMTYgKzEyNzYsMTIgQEAKIHsKIAlpcDJ0cmFjZSAoSVRSQ19OT19QT1JULCBJVFJDX0lOVFIsIDEwMCwgMCApOwogCi0JVGltZXJPbiA9IDA7IC8vIGl0J3MgdGhlIHRydXRoIGJ1dCBub3QgY2hlY2tlZCBpbiBzZXJ2aWNlCi0KIAkvLyBKdXN0IHBvbGxlZCBib2FyZHMsIElSUSA9IDAgd2lsbCBoaXQgYWxsIG5vbi1pbnRlcnJ1cHQgYm9hcmRzLgogCS8vIEl0IHdpbGwgTk9UIHBvbGwgYm9hcmRzIGhhbmRsZWQgYnkgaGFyZCBpbnRlcnJ1cHRzLgogCS8vIFRoZSBpc3N1ZSBvZiBxdWV1ZWQgQkggaW50ZXJydXB0cyBpcyBoYW5kbGVkIGluIGlwMl9pbnRlcnJ1cHQoKS4KIAlpcDJfcG9sbGVkX2ludGVycnVwdCgpOwogCi0JUG9sbFRpbWVyLmV4cGlyZXMgPSBQT0xMX1RJTUVPVVQ7Ci0JYWRkX3RpbWVyKCAmUG9sbFRpbWVyICk7Ci0JVGltZXJPbiA9IDE7CisJbW9kX3RpbWVyKCZQb2xsVGltZXIsIFBPTExfVElNRU9VVCk7CiAKIAlpcDJ0cmFjZSAoSVRSQ19OT19QT1JULCBJVFJDX0lOVFIsIElUUkNfUkVUVVJOLCAwICk7CiB9CkBAIC0yODcxLDcgKzI4OTMsNyBAQAogCWNhc2UgMTM6CiAJCXN3aXRjaCAoIGNtZCApIHsKIAkJY2FzZSA2NDoJLyogRHJpdmVyIC0gaXAyc3RhdCAqLwotCQkJcmMgPSBwdXRfdXNlcihpcDJfdHR5X2RyaXZlci0+cmVmY291bnQsIHBJbmRleCsrICk7CisJCQlyYyA9IHB1dF91c2VyKC0xLCBwSW5kZXgrKyApOwogCQkJcmMgPSBwdXRfdXNlcihpcnFfY291bnRlciwgcEluZGV4KysgICk7CiAJCQlyYyA9IHB1dF91c2VyKGJoX2NvdW50ZXIsIHBJbmRleCsrICApOwogCQkJYnJlYWs7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvaXAyNy1ydGMuYyBiL2RyaXZlcnMvY2hhci9pcDI3LXJ0Yy5jCmluZGV4IGVjOWQwNDQuLjJhYmQ4ODEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9pcDI3LXJ0Yy5jCisrKyBiL2RyaXZlcnMvY2hhci9pcDI3LXJ0Yy5jCkBAIC0xMzAsMTIgKzEzMCwxMiBAQAogCQlpZiAoeXJzID49IDEwMCkKIAkJCXlycyAtPSAxMDA7CiAKLQkJc2VjID0gQklOMkJDRChzZWMpOwotCQltaW4gPSBCSU4yQkNEKG1pbik7Ci0JCWhycyA9IEJJTjJCQ0QoaHJzKTsKLQkJZGF5ID0gQklOMkJDRChkYXkpOwotCQltb24gPSBCSU4yQkNEKG1vbik7Ci0JCXlycyA9IEJJTjJCQ0QoeXJzKTsKKwkJc2VjID0gYmluMmJjZChzZWMpOworCQltaW4gPSBiaW4yYmNkKG1pbik7CisJCWhycyA9IGJpbjJiY2QoaHJzKTsKKwkJZGF5ID0gYmluMmJjZChkYXkpOworCQltb24gPSBiaW4yYmNkKG1vbik7CisJCXlycyA9IGJpbjJiY2QoeXJzKTsKIAogCQlzcGluX2xvY2tfaXJxKCZydGNfbG9jayk7CiAJCXJ0Yy0+Y29udHJvbCB8PSBNNDhUMzVfUlRDX1NFVDsKQEAgLTMxMSwxMiArMzExLDEyIEBACiAJcnRjLT5jb250cm9sICY9IH5NNDhUMzVfUlRDX1JFQUQ7CiAJc3Bpbl91bmxvY2tfaXJxKCZydGNfbG9jayk7CiAKLQlydGNfdG0tPnRtX3NlYyA9IEJDRDJCSU4ocnRjX3RtLT50bV9zZWMpOwotCXJ0Y190bS0+dG1fbWluID0gQkNEMkJJTihydGNfdG0tPnRtX21pbik7Ci0JcnRjX3RtLT50bV9ob3VyID0gQkNEMkJJTihydGNfdG0tPnRtX2hvdXIpOwotCXJ0Y190bS0+dG1fbWRheSA9IEJDRDJCSU4ocnRjX3RtLT50bV9tZGF5KTsKLQlydGNfdG0tPnRtX21vbiA9IEJDRDJCSU4ocnRjX3RtLT50bV9tb24pOwotCXJ0Y190bS0+dG1feWVhciA9IEJDRDJCSU4ocnRjX3RtLT50bV95ZWFyKTsKKwlydGNfdG0tPnRtX3NlYyA9IGJjZDJiaW4ocnRjX3RtLT50bV9zZWMpOworCXJ0Y190bS0+dG1fbWluID0gYmNkMmJpbihydGNfdG0tPnRtX21pbik7CisJcnRjX3RtLT50bV9ob3VyID0gYmNkMmJpbihydGNfdG0tPnRtX2hvdXIpOworCXJ0Y190bS0+dG1fbWRheSA9IGJjZDJiaW4ocnRjX3RtLT50bV9tZGF5KTsKKwlydGNfdG0tPnRtX21vbiA9IGJjZDJiaW4ocnRjX3RtLT50bV9tb24pOworCXJ0Y190bS0+dG1feWVhciA9IGJjZDJiaW4ocnRjX3RtLT50bV95ZWFyKTsKIAogCS8qCiAJICogQWNjb3VudCBmb3IgZGlmZmVyZW5jZXMgYmV0d2VlbiBob3cgdGhlIFJUQyB1c2VzIHRoZSB2YWx1ZXMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9pcG1pL2lwbWlfZGV2aW50Zi5jIGIvZHJpdmVycy9jaGFyL2lwbWkvaXBtaV9kZXZpbnRmLmMKaW5kZXggNjRlMWMxNi4uODM1YTMzYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2lwbWkvaXBtaV9kZXZpbnRmLmMKKysrIGIvZHJpdmVycy9jaGFyL2lwbWkvaXBtaV9kZXZpbnRmLmMKQEAgLTg3MSw3ICs4NzEsNyBAQAogCWVudHJ5LT5kZXYgPSBkZXY7CiAKIAltdXRleF9sb2NrKCZyZWdfbGlzdF9tdXRleCk7Ci0JZGV2aWNlX2NyZWF0ZV9kcnZkYXRhKGlwbWlfY2xhc3MsIGRldmljZSwgZGV2LCBOVUxMLCAiaXBtaSVkIiwgaWZfbnVtKTsKKwlkZXZpY2VfY3JlYXRlKGlwbWlfY2xhc3MsIGRldmljZSwgZGV2LCBOVUxMLCAiaXBtaSVkIiwgaWZfbnVtKTsKIAlsaXN0X2FkZCgmZW50cnktPmxpbmssICZyZWdfbGlzdCk7CiAJbXV0ZXhfdW5sb2NrKCZyZWdfbGlzdF9tdXRleCk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvaXBtaS9pcG1pX3NpX2ludGYuYyBiL2RyaXZlcnMvY2hhci9pcG1pL2lwbWlfc2lfaW50Zi5jCmluZGV4IDhlOGFmYjYuLjMxMjNiZjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9pcG1pL2lwbWlfc2lfaW50Zi5jCisrKyBiL2RyaXZlcnMvY2hhci9pcG1pL2lwbWlfc2lfaW50Zi5jCkBAIC0yNjk1LDcgKzI2OTUsNyBAQAogCWZvciAoaSA9IDA7IDsgaSsrKSB7CiAJCWlmICghaXBtaV9kZWZhdWx0c1tpXS5wb3J0KQogCQkJYnJlYWs7Ci0jaWZkZWYgQ09ORklHX1BQQ19NRVJHRQorI2lmZGVmIENPTkZJR19QUEMKIAkJaWYgKGNoZWNrX2xlZ2FjeV9pb3BvcnQoaXBtaV9kZWZhdWx0c1tpXS5wb3J0KSkKIAkJCWNvbnRpbnVlOwogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvaXNpY29tLmMgYi9kcml2ZXJzL2NoYXIvaXNpY29tLmMKaW5kZXggOGY3Y2MxOS4uN2QzMGVlMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2lzaWNvbS5jCisrKyBiL2RyaXZlcnMvY2hhci9pc2ljb20uYwpAQCAtNDIxLDE3ICs0MjEsMTYgQEAKIAlpZiAocmV0cmllcyA+PSAxMDApCiAJCWdvdG8gdW5sb2NrOwogCisJdHR5ID0gdHR5X3BvcnRfdHR5X2dldCgmcG9ydC0+cG9ydCk7CisJaWYgKHR0eSA9PSBOVUxMKQorCQlnb3RvIHB1dF91bmxvY2s7CisKIAlmb3IgKDsgY291bnQgPiAwOyBjb3VudC0tLCBwb3J0KyspIHsKIAkJLyogcG9ydCBub3QgYWN0aXZlIG9yIHR4IGRpc2FibGVkIHRvIGZvcmNlIGZsb3cgY29udHJvbCAqLwogCQlpZiAoIShwb3J0LT5wb3J0LmZsYWdzICYgQVNZTkNfSU5JVElBTElaRUQpIHx8CiAJCQkJIShwb3J0LT5zdGF0dXMgJiBJU0lfVFhPSykpCiAJCQljb250aW51ZTsKIAotCQl0dHkgPSBwb3J0LT5wb3J0LnR0eTsKLQotCQlpZiAodHR5ID09IE5VTEwpCi0JCQljb250aW51ZTsKLQogCQl0eGNvdW50ID0gbWluX3Qoc2hvcnQsIFRYX1NJWkUsIHBvcnQtPnhtaXRfY250KTsKIAkJaWYgKHR4Y291bnQgPD0gMCB8fCB0dHktPnN0b3BwZWQgfHwgdHR5LT5od19zdG9wcGVkKQogCQkJY29udGludWU7CkBAIC00ODksNiArNDg4LDggQEAKIAkJCXR0eV93YWtldXAodHR5KTsKIAl9CiAKK3B1dF91bmxvY2s6CisJdHR5X2tyZWZfcHV0KHR0eSk7CiB1bmxvY2s6CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaXNpX2NhcmRbY2FyZF0uY2FyZF9sb2NrLCBmbGFncyk7CiAJLyoJc2NoZWR1bGUgYW5vdGhlciB0eCBmb3IgaG9wZWZ1bGx5IGluIGFib3V0IDEwbXMJKi8KQEAgLTU0Nyw3ICs1NDgsNyBAQAogCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CiAJfQogCi0JdHR5ID0gcG9ydC0+cG9ydC50dHk7CisJdHR5ID0gdHR5X3BvcnRfdHR5X2dldCgmcG9ydC0+cG9ydCk7CiAJaWYgKHR0eSA9PSBOVUxMKSB7CiAJCXdvcmRfY291bnQgPSBieXRlX2NvdW50ID4+IDE7CiAJCXdoaWxlIChieXRlX2NvdW50ID4gMSkgewpAQCAtNTg4LDcgKzU4OSw3IEBACiAJCQl9CiAKIAkJCWlmIChwb3J0LT5wb3J0LmZsYWdzICYgQVNZTkNfQ1RTX0ZMT1cpIHsKLQkJCQlpZiAocG9ydC0+cG9ydC50dHktPmh3X3N0b3BwZWQpIHsKKwkJCQlpZiAodHR5LT5od19zdG9wcGVkKSB7CiAJCQkJCWlmIChoZWFkZXIgJiBJU0lfQ1RTKSB7CiAJCQkJCQlwb3J0LT5wb3J0LnR0eS0+aHdfc3RvcHBlZCA9IDA7CiAJCQkJCQkvKiBzdGFydCB0eCBpbmcgKi8KQEAgLTU5Nyw3ICs1OTgsNyBAQAogCQkJCQkJdHR5X3dha2V1cCh0dHkpOwogCQkJCQl9CiAJCQkJfSBlbHNlIGlmICghKGhlYWRlciAmIElTSV9DVFMpKSB7Ci0JCQkJCXBvcnQtPnBvcnQudHR5LT5od19zdG9wcGVkID0gMTsKKwkJCQkJdHR5LT5od19zdG9wcGVkID0gMTsKIAkJCQkJLyogc3RvcCB0eCBpbmcgKi8KIAkJCQkJcG9ydC0+c3RhdHVzICY9IH4oSVNJX1RYT0sgfCBJU0lfQ1RTKTsKIAkJCQl9CkBAIC02NjAsMjQgKzY2MSwyMSBAQAogCX0KIAlvdXR3KDB4MDAwMCwgYmFzZSsweDA0KTsgLyogZW5hYmxlIGludGVycnVwdHMgKi8KIAlzcGluX3VubG9jaygmY2FyZC0+Y2FyZF9sb2NrKTsKKwl0dHlfa3JlZl9wdXQodHR5KTsKIAogCXJldHVybiBJUlFfSEFORExFRDsKIH0KIAotc3RhdGljIHZvaWQgaXNpY29tX2NvbmZpZ19wb3J0KHN0cnVjdCBpc2lfcG9ydCAqcG9ydCkKK3N0YXRpYyB2b2lkIGlzaWNvbV9jb25maWdfcG9ydChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQogeworCXN0cnVjdCBpc2lfcG9ydCAqcG9ydCA9IHR0eS0+ZHJpdmVyX2RhdGE7CiAJc3RydWN0IGlzaV9ib2FyZCAqY2FyZCA9IHBvcnQtPmNhcmQ7Ci0Jc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eTsKIAl1bnNpZ25lZCBsb25nIGJhdWQ7CiAJdW5zaWduZWQgbG9uZyBiYXNlID0gY2FyZC0+YmFzZTsKIAl1MTYgY2hhbm5lbF9zZXR1cCwgY2hhbm5lbCA9IHBvcnQtPmNoYW5uZWwsCiAJCXNoaWZ0X2NvdW50ID0gY2FyZC0+c2hpZnRfY291bnQ7CiAJdW5zaWduZWQgY2hhciBmbG93X2N0cmw7CiAKLQl0dHkgPSBwb3J0LT5wb3J0LnR0eTsKLQotCWlmICh0dHkgPT0gTlVMTCkKLQkJcmV0dXJuOwogCS8qIEZJWE1FOiBTd2l0Y2ggdG8gbmV3IHR0eSBiYXVkIEFQSSAqLwogCWJhdWQgPSBDX0JBVUQodHR5KTsKIAlpZiAoYmF1ZCAmIENCQVVERVgpIHsKQEAgLTY5MCw3ICs2ODgsNyBAQAogCiAJCS8qIDEsMiwzLDQgPT4gNTcuNiwgMTE1LjIsIDIzMCwgNDYwIGticHMgcmVzcC4gKi8KIAkJaWYgKGJhdWQgPCAxIHx8IGJhdWQgPiA0KQotCQkJcG9ydC0+cG9ydC50dHktPnRlcm1pb3MtPmNfY2ZsYWcgJj0gfkNCQVVERVg7CisJCQl0dHktPnRlcm1pb3MtPmNfY2ZsYWcgJj0gfkNCQVVERVg7CiAJCWVsc2UKIAkJCWJhdWQgKz0gMTU7CiAJfQpAQCAtNzk3LDggKzc5NSw5IEBACiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYnAtPmNhcmRfbG9jaywgZmxhZ3MpOwogfQogCi1zdGF0aWMgaW50IGlzaWNvbV9zZXR1cF9wb3J0KHN0cnVjdCBpc2lfcG9ydCAqcG9ydCkKK3N0YXRpYyBpbnQgaXNpY29tX3NldHVwX3BvcnQoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKIHsKKwlzdHJ1Y3QgaXNpX3BvcnQgKnBvcnQgPSB0dHktPmRyaXZlcl9kYXRhOwogCXN0cnVjdCBpc2lfYm9hcmQgKmNhcmQgPSBwb3J0LT5jYXJkOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKQEAgLTgwOCw4ICs4MDcsNyBAQAogCQlyZXR1cm4gLUVOT01FTTsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZjYXJkLT5jYXJkX2xvY2ssIGZsYWdzKTsKLQlpZiAocG9ydC0+cG9ydC50dHkpCi0JCWNsZWFyX2JpdChUVFlfSU9fRVJST1IsICZwb3J0LT5wb3J0LnR0eS0+ZmxhZ3MpOworCWNsZWFyX2JpdChUVFlfSU9fRVJST1IsICZ0dHktPmZsYWdzKTsKIAlpZiAocG9ydC0+cG9ydC5jb3VudCA9PSAxKQogCQljYXJkLT5jb3VudCsrOwogCkBAIC04MjMsNyArODIxLDcgQEAKIAkJSW50ZXJydXB0VGhlQ2FyZChjYXJkLT5iYXNlKTsKIAl9CiAKLQlpc2ljb21fY29uZmlnX3BvcnQocG9ydCk7CisJaXNpY29tX2NvbmZpZ19wb3J0KHR0eSk7CiAJcG9ydC0+cG9ydC5mbGFncyB8PSBBU1lOQ19JTklUSUFMSVpFRDsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjYXJkLT5jYXJkX2xvY2ssIGZsYWdzKTsKIApAQCAtOTM0LDggKzkzMiw4IEBACiAKIAlwb3J0LT5wb3J0LmNvdW50Kys7CiAJdHR5LT5kcml2ZXJfZGF0YSA9IHBvcnQ7Ci0JcG9ydC0+cG9ydC50dHkgPSB0dHk7Ci0JZXJyb3IgPSBpc2ljb21fc2V0dXBfcG9ydChwb3J0KTsKKwl0dHlfcG9ydF90dHlfc2V0KCZwb3J0LT5wb3J0LCB0dHkpOworCWVycm9yID0gaXNpY29tX3NldHVwX3BvcnQodHR5KTsKIAlpZiAoZXJyb3IgPT0gMCkKIAkJZXJyb3IgPSBibG9ja190aWxfcmVhZHkodHR5LCBmaWxwLCBwb3J0KTsKIAlyZXR1cm4gZXJyb3I7CkBAIC05NTUsMTUgKzk1MywxNyBAQAogCXN0cnVjdCBpc2lfYm9hcmQgKmNhcmQgPSBwb3J0LT5jYXJkOwogCXN0cnVjdCB0dHlfc3RydWN0ICp0dHk7CiAKLQl0dHkgPSBwb3J0LT5wb3J0LnR0eTsKKwl0dHkgPSB0dHlfcG9ydF90dHlfZ2V0KCZwb3J0LT5wb3J0KTsKIAotCWlmICghKHBvcnQtPnBvcnQuZmxhZ3MgJiBBU1lOQ19JTklUSUFMSVpFRCkpCisJaWYgKCEocG9ydC0+cG9ydC5mbGFncyAmIEFTWU5DX0lOSVRJQUxJWkVEKSkgeworCQl0dHlfa3JlZl9wdXQodHR5KTsKIAkJcmV0dXJuOworCX0KIAogCXR0eV9wb3J0X2ZyZWVfeG1pdF9idWYoJnBvcnQtPnBvcnQpOwogCXBvcnQtPnBvcnQuZmxhZ3MgJj0gfkFTWU5DX0lOSVRJQUxJWkVEOwogCS8qIDNyZCBPY3RvYmVyIDIwMDAgOiBWaW5heWFrIFAgUmlzYnVkICovCi0JcG9ydC0+cG9ydC50dHkgPSBOVUxMOworCXR0eV9wb3J0X3R0eV9zZXQoJnBvcnQtPnBvcnQsIE5VTEwpOwogCiAJLypGaXggZG9uZSBieSBBbmlsIC5TIG9uIDMwLTA0LTIwMDEKIAlyZW1vdGUgbG9naW4gdGhyb3VnaCBpc2kgcG9ydCBoYXMgZHRyIHRvZ2dsZSBwcm9ibGVtCkBAIC0xMjQzLDkgKzEyNDMsMTAgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBpc2ljb21fc2V0X3NlcmlhbF9pbmZvKHN0cnVjdCBpc2lfcG9ydCAqcG9ydCwKLQlzdHJ1Y3Qgc2VyaWFsX3N0cnVjdCBfX3VzZXIgKmluZm8pCitzdGF0aWMgaW50IGlzaWNvbV9zZXRfc2VyaWFsX2luZm8oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwKKwkJCQkJc3RydWN0IHNlcmlhbF9zdHJ1Y3QgX191c2VyICppbmZvKQogeworCXN0cnVjdCBpc2lfcG9ydCAqcG9ydCA9IHR0eS0+ZHJpdmVyX2RhdGE7CiAJc3RydWN0IHNlcmlhbF9zdHJ1Y3QgbmV3aW5mbzsKIAlpbnQgcmVjb25maWdfcG9ydDsKIApAQCAtMTI3Niw3ICsxMjc3LDcgQEAKIAlpZiAocmVjb25maWdfcG9ydCkgewogCQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCQlzcGluX2xvY2tfaXJxc2F2ZSgmcG9ydC0+Y2FyZC0+Y2FyZF9sb2NrLCBmbGFncyk7Ci0JCWlzaWNvbV9jb25maWdfcG9ydChwb3J0KTsKKwkJaXNpY29tX2NvbmZpZ19wb3J0KHR0eSk7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBvcnQtPmNhcmQtPmNhcmRfbG9jaywgZmxhZ3MpOwogCX0KIAl1bmxvY2tfa2VybmVsKCk7CkBAIC0xMzE4LDcgKzEzMTksNyBAQAogCQlyZXR1cm4gaXNpY29tX2dldF9zZXJpYWxfaW5mbyhwb3J0LCBhcmdwKTsKIAogCWNhc2UgVElPQ1NTRVJJQUw6Ci0JCXJldHVybiBpc2ljb21fc2V0X3NlcmlhbF9pbmZvKHBvcnQsIGFyZ3ApOworCQlyZXR1cm4gaXNpY29tX3NldF9zZXJpYWxfaW5mbyh0dHksIGFyZ3ApOwogCiAJZGVmYXVsdDoKIAkJcmV0dXJuIC1FTk9JT0NUTENNRDsKQEAgLTEzNDEsNyArMTM0Miw3IEBACiAJCXJldHVybjsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZwb3J0LT5jYXJkLT5jYXJkX2xvY2ssIGZsYWdzKTsKLQlpc2ljb21fY29uZmlnX3BvcnQocG9ydCk7CisJaXNpY29tX2NvbmZpZ19wb3J0KHR0eSk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG9ydC0+Y2FyZC0+Y2FyZF9sb2NrLCBmbGFncyk7CiAKIAlpZiAoKG9sZF90ZXJtaW9zLT5jX2NmbGFnICYgQ1JUU0NUUykgJiYKQEAgLTE0MTksNyArMTQyMCw3IEBACiAKIAlwb3J0LT5wb3J0LmNvdW50ID0gMDsKIAlwb3J0LT5wb3J0LmZsYWdzICY9IH5BU1lOQ19OT1JNQUxfQUNUSVZFOwotCXBvcnQtPnBvcnQudHR5ID0gTlVMTDsKKwl0dHlfcG9ydF90dHlfc2V0KCZwb3J0LT5wb3J0LCBOVUxMKTsKIAl3YWtlX3VwX2ludGVycnVwdGlibGUoJnBvcnQtPnBvcnQub3Blbl93YWl0KTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2lzdGFsbGlvbi5jIGIvZHJpdmVycy9jaGFyL2lzdGFsbGlvbi5jCmluZGV4IDg0M2EyYWYuLjQ0ZTVkNjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9pc3RhbGxpb24uYworKysgYi9kcml2ZXJzL2NoYXIvaXN0YWxsaW9uLmMKQEAgLTYyMywyNCArNjIzLDI1IEBACiBzdGF0aWMgdm9pZAlzdGxpX2JyZHBvbGwoc3RydWN0IHN0bGlicmQgKmJyZHAsIGNka2hkcl90IF9faW9tZW0gKmhkcnApOwogc3RhdGljIHZvaWQJc3RsaV9wb2xsKHVuc2lnbmVkIGxvbmcgYXJnKTsKIHN0YXRpYyBpbnQJc3RsaV9ob3N0Y21kKHN0cnVjdCBzdGxpYnJkICpicmRwLCBzdHJ1Y3Qgc3RsaXBvcnQgKnBvcnRwKTsKLXN0YXRpYyBpbnQJc3RsaV9pbml0b3BlbihzdHJ1Y3Qgc3RsaWJyZCAqYnJkcCwgc3RydWN0IHN0bGlwb3J0ICpwb3J0cCk7CitzdGF0aWMgaW50CXN0bGlfaW5pdG9wZW4oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IHN0bGlicmQgKmJyZHAsIHN0cnVjdCBzdGxpcG9ydCAqcG9ydHApOwogc3RhdGljIGludAlzdGxpX3Jhd29wZW4oc3RydWN0IHN0bGlicmQgKmJyZHAsIHN0cnVjdCBzdGxpcG9ydCAqcG9ydHAsIHVuc2lnbmVkIGxvbmcgYXJnLCBpbnQgd2FpdCk7CiBzdGF0aWMgaW50CXN0bGlfcmF3Y2xvc2Uoc3RydWN0IHN0bGlicmQgKmJyZHAsIHN0cnVjdCBzdGxpcG9ydCAqcG9ydHAsIHVuc2lnbmVkIGxvbmcgYXJnLCBpbnQgd2FpdCk7Ci1zdGF0aWMgaW50CXN0bGlfd2FpdGNhcnJpZXIoc3RydWN0IHN0bGlicmQgKmJyZHAsIHN0cnVjdCBzdGxpcG9ydCAqcG9ydHAsIHN0cnVjdCBmaWxlICpmaWxwKTsKLXN0YXRpYyBpbnQJc3RsaV9zZXRwb3J0KHN0cnVjdCBzdGxpcG9ydCAqcG9ydHApOworc3RhdGljIGludAlzdGxpX3dhaXRjYXJyaWVyKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBzdGxpYnJkICpicmRwLAorCQkJCXN0cnVjdCBzdGxpcG9ydCAqcG9ydHAsIHN0cnVjdCBmaWxlICpmaWxwKTsKK3N0YXRpYyBpbnQJc3RsaV9zZXRwb3J0KHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpOwogc3RhdGljIGludAlzdGxpX2NtZHdhaXQoc3RydWN0IHN0bGlicmQgKmJyZHAsIHN0cnVjdCBzdGxpcG9ydCAqcG9ydHAsIHVuc2lnbmVkIGxvbmcgY21kLCB2b2lkICphcmcsIGludCBzaXplLCBpbnQgY29weWJhY2spOwogc3RhdGljIHZvaWQJc3RsaV9zZW5kY21kKHN0cnVjdCBzdGxpYnJkICpicmRwLCBzdHJ1Y3Qgc3RsaXBvcnQgKnBvcnRwLCB1bnNpZ25lZCBsb25nIGNtZCwgdm9pZCAqYXJnLCBpbnQgc2l6ZSwgaW50IGNvcHliYWNrKTsKIHN0YXRpYyB2b2lkCV9fc3RsaV9zZW5kY21kKHN0cnVjdCBzdGxpYnJkICpicmRwLCBzdHJ1Y3Qgc3RsaXBvcnQgKnBvcnRwLCB1bnNpZ25lZCBsb25nIGNtZCwgdm9pZCAqYXJnLCBpbnQgc2l6ZSwgaW50IGNvcHliYWNrKTsKIHN0YXRpYyB2b2lkCXN0bGlfZG9kZWxheWNtZChzdHJ1Y3Qgc3RsaXBvcnQgKnBvcnRwLCBjZGtjdHJsX3QgX19pb21lbSAqY3ApOwotc3RhdGljIHZvaWQJc3RsaV9ta2FzeXBvcnQoc3RydWN0IHN0bGlwb3J0ICpwb3J0cCwgYXN5cG9ydF90ICpwcCwgc3RydWN0IGt0ZXJtaW9zICp0aW9zcCk7CitzdGF0aWMgdm9pZAlzdGxpX21rYXN5cG9ydChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3Qgc3RsaXBvcnQgKnBvcnRwLCBhc3lwb3J0X3QgKnBwLCBzdHJ1Y3Qga3Rlcm1pb3MgKnRpb3NwKTsKIHN0YXRpYyB2b2lkCXN0bGlfbWthc3lzaWdzKGFzeXNpZ3NfdCAqc3AsIGludCBkdHIsIGludCBydHMpOwogc3RhdGljIGxvbmcJc3RsaV9ta3Rpb2NtKHVuc2lnbmVkIGxvbmcgc2lndmFsdWUpOwogc3RhdGljIHZvaWQJc3RsaV9yZWFkKHN0cnVjdCBzdGxpYnJkICpicmRwLCBzdHJ1Y3Qgc3RsaXBvcnQgKnBvcnRwKTsKIHN0YXRpYyBpbnQJc3RsaV9nZXRzZXJpYWwoc3RydWN0IHN0bGlwb3J0ICpwb3J0cCwgc3RydWN0IHNlcmlhbF9zdHJ1Y3QgX191c2VyICpzcCk7Ci1zdGF0aWMgaW50CXN0bGlfc2V0c2VyaWFsKHN0cnVjdCBzdGxpcG9ydCAqcG9ydHAsIHN0cnVjdCBzZXJpYWxfc3RydWN0IF9fdXNlciAqc3ApOworc3RhdGljIGludAlzdGxpX3NldHNlcmlhbChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3Qgc2VyaWFsX3N0cnVjdCBfX3VzZXIgKnNwKTsKIHN0YXRpYyBpbnQJc3RsaV9nZXRicmRzdGF0cyhjb21icmRfdCBfX3VzZXIgKmJwKTsKLXN0YXRpYyBpbnQJc3RsaV9nZXRwb3J0c3RhdHMoc3RydWN0IHN0bGlwb3J0ICpwb3J0cCwgY29tc3RhdHNfdCBfX3VzZXIgKmNwKTsKLXN0YXRpYyBpbnQJc3RsaV9wb3J0Y21kc3RhdHMoc3RydWN0IHN0bGlwb3J0ICpwb3J0cCk7CitzdGF0aWMgaW50CXN0bGlfZ2V0cG9ydHN0YXRzKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBzdGxpcG9ydCAqcG9ydHAsIGNvbXN0YXRzX3QgX191c2VyICpjcCk7CitzdGF0aWMgaW50CXN0bGlfcG9ydGNtZHN0YXRzKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBzdGxpcG9ydCAqcG9ydHApOwogc3RhdGljIGludAlzdGxpX2NscnBvcnRzdGF0cyhzdHJ1Y3Qgc3RsaXBvcnQgKnBvcnRwLCBjb21zdGF0c190IF9fdXNlciAqY3ApOwogc3RhdGljIGludAlzdGxpX2dldHBvcnRzdHJ1Y3Qoc3RydWN0IHN0bGlwb3J0IF9fdXNlciAqYXJnKTsKIHN0YXRpYyBpbnQJc3RsaV9nZXRicmRzdHJ1Y3Qoc3RydWN0IHN0bGlicmQgX191c2VyICphcmcpOwpAQCAtNzMxLDEyICs3MzIsMTYgQEAKIHsKIAlzdHJ1Y3Qgc3RsaXBvcnQgKnBvcnRwOwogCXVuc2lnbmVkIGludCBqOworCXN0cnVjdCB0dHlfc3RydWN0ICp0dHk7CiAKIAlmb3IgKGogPSAwOyBqIDwgU1RMX01BWFBPUlRTOyBqKyspIHsKIAkJcG9ydHAgPSBicmRwLT5wb3J0c1tqXTsKIAkJaWYgKHBvcnRwICE9IE5VTEwpIHsKLQkJCWlmIChwb3J0cC0+cG9ydC50dHkgIT0gTlVMTCkKLQkJCQl0dHlfaGFuZ3VwKHBvcnRwLT5wb3J0LnR0eSk7CisJCQl0dHkgPSB0dHlfcG9ydF90dHlfZ2V0KCZwb3J0cC0+cG9ydCk7CisJCQlpZiAodHR5ICE9IE5VTEwpIHsKKwkJCQl0dHlfaGFuZ3VwKHR0eSk7CisJCQkJdHR5X2tyZWZfcHV0KHR0eSk7CisJCQl9CiAJCQlrZnJlZShwb3J0cCk7CiAJCX0KIAl9CkBAIC04MjQsNyArODI5LDcgQEAKICAqCXJlcXVpcmVzIHNldmVyYWwgY29tbWFuZHMgdG8gdGhlIGJvYXJkIHdlIHdpbGwgbmVlZCB0byB3YWl0IGZvciBhbnkKICAqCW90aGVyIG9wZW4gdGhhdCBpcyBhbHJlYWR5IGluaXRpYWxpemluZyB0aGUgcG9ydC4KICAqLwotCXBvcnRwLT5wb3J0LnR0eSA9IHR0eTsKKwl0dHlfcG9ydF90dHlfc2V0KCZwb3J0cC0+cG9ydCwgdHR5KTsKIAl0dHktPmRyaXZlcl9kYXRhID0gcG9ydHA7CiAJcG9ydHAtPnBvcnQuY291bnQrKzsKIApAQCAtODM1LDcgKzg0MCw3IEBACiAKIAlpZiAoKHBvcnRwLT5wb3J0LmZsYWdzICYgQVNZTkNfSU5JVElBTElaRUQpID09IDApIHsKIAkJc2V0X2JpdChTVF9JTklUSUFMSVpJTkcsICZwb3J0cC0+c3RhdGUpOwotCQlpZiAoKHJjID0gc3RsaV9pbml0b3BlbihicmRwLCBwb3J0cCkpID49IDApIHsKKwkJaWYgKChyYyA9IHN0bGlfaW5pdG9wZW4odHR5LCBicmRwLCBwb3J0cCkpID49IDApIHsKIAkJCXBvcnRwLT5wb3J0LmZsYWdzIHw9IEFTWU5DX0lOSVRJQUxJWkVEOwogCQkJY2xlYXJfYml0KFRUWV9JT19FUlJPUiwgJnR0eS0+ZmxhZ3MpOwogCQl9CkBAIC04NjQsNyArODY5LDcgQEAKICAqCXRoZW4gYWxzbyB3ZSBtaWdodCBoYXZlIHRvIHdhaXQgZm9yIGNhcnJpZXIuCiAgKi8KIAlpZiAoIShmaWxwLT5mX2ZsYWdzICYgT19OT05CTE9DSykpIHsKLQkJaWYgKChyYyA9IHN0bGlfd2FpdGNhcnJpZXIoYnJkcCwgcG9ydHAsIGZpbHApKSAhPSAwKQorCQlpZiAoKHJjID0gc3RsaV93YWl0Y2Fycmllcih0dHksIGJyZHAsIHBvcnRwLCBmaWxwKSkgIT0gMCkKIAkJCXJldHVybiByYzsKIAl9CiAJcG9ydHAtPnBvcnQuZmxhZ3MgfD0gQVNZTkNfTk9STUFMX0FDVElWRTsKQEAgLTkzMCw3ICs5MzUsNyBAQAogCXN0bGlfZmx1c2hidWZmZXIodHR5KTsKIAogCXR0eS0+Y2xvc2luZyA9IDA7Ci0JcG9ydHAtPnBvcnQudHR5ID0gTlVMTDsKKwl0dHlfcG9ydF90dHlfc2V0KCZwb3J0cC0+cG9ydCwgTlVMTCk7CiAKIAlpZiAocG9ydHAtPm9wZW53YWl0Y250KSB7CiAJCWlmIChwb3J0cC0+Y2xvc2VfZGVsYXkpCkBAIC05NTIsOSArOTU3LDkgQEAKICAqCXRoaXMgc3RpbGwgYWxsIGhhcHBlbnMgcHJldHR5IHF1aWNrbHkuCiAgKi8KIAotc3RhdGljIGludCBzdGxpX2luaXRvcGVuKHN0cnVjdCBzdGxpYnJkICpicmRwLCBzdHJ1Y3Qgc3RsaXBvcnQgKnBvcnRwKQorc3RhdGljIGludCBzdGxpX2luaXRvcGVuKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksCisJCQkJc3RydWN0IHN0bGlicmQgKmJyZHAsIHN0cnVjdCBzdGxpcG9ydCAqcG9ydHApCiB7Ci0Jc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eTsKIAlhc3lub3RpZnlfdCBudDsKIAlhc3lwb3J0X3QgYXBvcnQ7CiAJaW50IHJjOwpAQCAtOTY5LDEwICs5NzQsNyBAQAogCSAgICBzaXplb2YoYXN5bm90aWZ5X3QpLCAwKSkgPCAwKQogCQlyZXR1cm4gcmM7CiAKLQl0dHkgPSBwb3J0cC0+cG9ydC50dHk7Ci0JaWYgKHR0eSA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT0RFVjsKLQlzdGxpX21rYXN5cG9ydChwb3J0cCwgJmFwb3J0LCB0dHktPnRlcm1pb3MpOworCXN0bGlfbWthc3lwb3J0KHR0eSwgcG9ydHAsICZhcG9ydCwgdHR5LT50ZXJtaW9zKTsKIAlpZiAoKHJjID0gc3RsaV9jbWR3YWl0KGJyZHAsIHBvcnRwLCBBX1NFVFBPUlQsICZhcG9ydCwKIAkgICAgc2l6ZW9mKGFzeXBvcnRfdCksIDApKSA8IDApCiAJCXJldHVybiByYzsKQEAgLTExNjEsMjIgKzExNjMsMjEgQEAKICAqCXdhaXRpbmcgZm9yIHRoZSBjb21tYW5kIHRvIGNvbXBsZXRlIC0gc28gbXVzdCBoYXZlIHVzZXIgY29udGV4dC4KICAqLwogCi1zdGF0aWMgaW50IHN0bGlfc2V0cG9ydChzdHJ1Y3Qgc3RsaXBvcnQgKnBvcnRwKQorc3RhdGljIGludCBzdGxpX3NldHBvcnQoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKIHsKKwlzdHJ1Y3Qgc3RsaXBvcnQgKnBvcnRwID0gdHR5LT5kcml2ZXJfZGF0YTsKIAlzdHJ1Y3Qgc3RsaWJyZCAqYnJkcDsKIAlhc3lwb3J0X3QgYXBvcnQ7CiAKIAlpZiAocG9ydHAgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9ERVY7Ci0JaWYgKHBvcnRwLT5wb3J0LnR0eSA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT0RFVjsKIAlpZiAocG9ydHAtPmJyZG5yID49IHN0bGlfbnJicmRzKQogCQlyZXR1cm4gLUVOT0RFVjsKIAlicmRwID0gc3RsaV9icmRzW3BvcnRwLT5icmRucl07CiAJaWYgKGJyZHAgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKLQlzdGxpX21rYXN5cG9ydChwb3J0cCwgJmFwb3J0LCBwb3J0cC0+cG9ydC50dHktPnRlcm1pb3MpOworCXN0bGlfbWthc3lwb3J0KHR0eSwgcG9ydHAsICZhcG9ydCwgdHR5LT50ZXJtaW9zKTsKIAlyZXR1cm4oc3RsaV9jbWR3YWl0KGJyZHAsIHBvcnRwLCBBX1NFVFBPUlQsICZhcG9ydCwgc2l6ZW9mKGFzeXBvcnRfdCksIDApKTsKIH0KIApAQCAtMTE4Nyw3ICsxMTg4LDggQEAKICAqCW1heWJlIGJlY2F1c2UgaWYgd2UgYXJlIGNsb2NhbCB0aGVuIHdlIGRvbid0IG5lZWQgdG8gd2FpdC4uLgogICovCiAKLXN0YXRpYyBpbnQgc3RsaV93YWl0Y2FycmllcihzdHJ1Y3Qgc3RsaWJyZCAqYnJkcCwgc3RydWN0IHN0bGlwb3J0ICpwb3J0cCwgc3RydWN0IGZpbGUgKmZpbHApCitzdGF0aWMgaW50IHN0bGlfd2FpdGNhcnJpZXIoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IHN0bGlicmQgKmJyZHAsCisJCQkJc3RydWN0IHN0bGlwb3J0ICpwb3J0cCwgc3RydWN0IGZpbGUgKmZpbHApCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgcmMsIGRvY2xvY2FsOwpAQCAtMTE5NSw3ICsxMTk3LDcgQEAKIAlyYyA9IDA7CiAJZG9jbG9jYWwgPSAwOwogCi0JaWYgKHBvcnRwLT5wb3J0LnR0eS0+dGVybWlvcy0+Y19jZmxhZyAmIENMT0NBTCkKKwlpZiAodHR5LT50ZXJtaW9zLT5jX2NmbGFnICYgQ0xPQ0FMKQogCQlkb2Nsb2NhbCsrOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnN0bGlfbG9jaywgZmxhZ3MpOwpAQCAtMTM3Myw4ICsxMzc1LDYgQEAKIAlzdGxpX3R4Y29va3JlYWxzaXplID0gMDsKIAlzdGxpX3R4Y29va3R0eSA9IE5VTEw7CiAKLQlpZiAodHR5ID09IE5VTEwpCi0JCXJldHVybjsKIAlpZiAoY29va3R0eSA9PSBOVUxMKQogCQlyZXR1cm47CiAJaWYgKHR0eSAhPSBjb29rdHR5KQpAQCAtMTU3MiwxMCArMTU3MiwxMSBAQAogICoJanVzdCBxdWlldGx5IGlnbm9yZSBhbnkgcmVxdWVzdHMgdG8gY2hhbmdlIGlycSwgZXRjLgogICovCiAKLXN0YXRpYyBpbnQgc3RsaV9zZXRzZXJpYWwoc3RydWN0IHN0bGlwb3J0ICpwb3J0cCwgc3RydWN0IHNlcmlhbF9zdHJ1Y3QgX191c2VyICpzcCkKK3N0YXRpYyBpbnQgc3RsaV9zZXRzZXJpYWwoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IHNlcmlhbF9zdHJ1Y3QgX191c2VyICpzcCkKIHsKIAlzdHJ1Y3Qgc2VyaWFsX3N0cnVjdCBzaW87CiAJaW50IHJjOworCXN0cnVjdCBzdGxpcG9ydCAqcG9ydHAgPSB0dHktPmRyaXZlcl9kYXRhOwogCiAJaWYgKGNvcHlfZnJvbV91c2VyKCZzaW8sIHNwLCBzaXplb2Yoc3RydWN0IHNlcmlhbF9zdHJ1Y3QpKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CkBAIC0xNTk0LDcgKzE1OTUsNyBAQAogCXBvcnRwLT5jbG9zaW5nX3dhaXQgPSBzaW8uY2xvc2luZ193YWl0OwogCXBvcnRwLT5jdXN0b21fZGl2aXNvciA9IHNpby5jdXN0b21fZGl2aXNvcjsKIAotCWlmICgocmMgPSBzdGxpX3NldHBvcnQocG9ydHApKSA8IDApCisJaWYgKChyYyA9IHN0bGlfc2V0cG9ydCh0dHkpKSA8IDApCiAJCXJldHVybiByYzsKIAlyZXR1cm4gMDsKIH0KQEAgLTE2ODUsMTcgKzE2ODYsMTcgQEAKIAkJcmMgPSBzdGxpX2dldHNlcmlhbChwb3J0cCwgYXJncCk7CiAJCWJyZWFrOwogCWNhc2UgVElPQ1NTRVJJQUw6Ci0JCXJjID0gc3RsaV9zZXRzZXJpYWwocG9ydHAsIGFyZ3ApOworCQlyYyA9IHN0bGlfc2V0c2VyaWFsKHR0eSwgYXJncCk7CiAJCWJyZWFrOwogCWNhc2UgU1RMX0dFVFBGTEFHOgogCQlyYyA9IHB1dF91c2VyKHBvcnRwLT5wZmxhZywgKHVuc2lnbmVkIF9fdXNlciAqKWFyZ3ApOwogCQlicmVhazsKIAljYXNlIFNUTF9TRVRQRkxBRzoKIAkJaWYgKChyYyA9IGdldF91c2VyKHBvcnRwLT5wZmxhZywgKHVuc2lnbmVkIF9fdXNlciAqKWFyZ3ApKSA9PSAwKQotCQkJc3RsaV9zZXRwb3J0KHBvcnRwKTsKKwkJCXN0bGlfc2V0cG9ydCh0dHkpOwogCQlicmVhazsKIAljYXNlIENPTV9HRVRQT1JUU1RBVFM6Ci0JCXJjID0gc3RsaV9nZXRwb3J0c3RhdHMocG9ydHAsIGFyZ3ApOworCQlyYyA9IHN0bGlfZ2V0cG9ydHN0YXRzKHR0eSwgcG9ydHAsIGFyZ3ApOwogCQlicmVhazsKIAljYXNlIENPTV9DTFJQT1JUU1RBVFM6CiAJCXJjID0gc3RsaV9jbHJwb3J0c3RhdHMocG9ydHAsIGFyZ3ApOwpAQCAtMTcyOSw4ICsxNzMwLDYgQEAKIAlzdHJ1Y3Qga3Rlcm1pb3MgKnRpb3NwOwogCWFzeXBvcnRfdCBhcG9ydDsKIAotCWlmICh0dHkgPT0gTlVMTCkKLQkJcmV0dXJuOwogCXBvcnRwID0gdHR5LT5kcml2ZXJfZGF0YTsKIAlpZiAocG9ydHAgPT0gTlVMTCkKIAkJcmV0dXJuOwpAQCAtMTc0Miw3ICsxNzQxLDcgQEAKIAogCXRpb3NwID0gdHR5LT50ZXJtaW9zOwogCi0Jc3RsaV9ta2FzeXBvcnQocG9ydHAsICZhcG9ydCwgdGlvc3ApOworCXN0bGlfbWthc3lwb3J0KHR0eSwgcG9ydHAsICZhcG9ydCwgdGlvc3ApOwogCXN0bGlfY21kd2FpdChicmRwLCBwb3J0cCwgQV9TRVRQT1JULCAmYXBvcnQsIHNpemVvZihhc3lwb3J0X3QpLCAwKTsKIAlzdGxpX21rYXN5c2lncygmcG9ydHAtPmFzaWcsICgodGlvc3AtPmNfY2ZsYWcgJiBDQkFVRCkgPyAxIDogMCksIC0xKTsKIAlzdGxpX2NtZHdhaXQoYnJkcCwgcG9ydHAsIEFfU0VUU0lHTkFMUywgJnBvcnRwLT5hc2lnLApAQCAtMTg1NCw3ICsxODUzLDcgQEAKIAljbGVhcl9iaXQoU1RfVFhCVVNZLCAmcG9ydHAtPnN0YXRlKTsKIAljbGVhcl9iaXQoU1RfUlhTVE9QLCAmcG9ydHAtPnN0YXRlKTsKIAlzZXRfYml0KFRUWV9JT19FUlJPUiwgJnR0eS0+ZmxhZ3MpOwotCXBvcnRwLT5wb3J0LnR0eSA9IE5VTEw7CisJdHR5X3BvcnRfdHR5X3NldCgmcG9ydHAtPnBvcnQsIE5VTEwpOwogCXBvcnRwLT5wb3J0LmZsYWdzICY9IH5BU1lOQ19OT1JNQUxfQUNUSVZFOwogCXBvcnRwLT5wb3J0LmNvdW50ID0gMDsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzdGxpX2xvY2ssIGZsYWdzKTsKQEAgLTE5MzUsOCArMTkzNCw2IEBACiAJc3RydWN0IHN0bGlwb3J0ICpwb3J0cDsKIAl1bnNpZ25lZCBsb25nIHRlbmQ7CiAKLQlpZiAodHR5ID09IE5VTEwpCi0JCXJldHVybjsKIAlwb3J0cCA9IHR0eS0+ZHJpdmVyX2RhdGE7CiAJaWYgKHBvcnRwID09IE5VTEwpCiAJCXJldHVybjsKQEAgLTE5OTgsNyArMTk5NSw3IEBACiAJY2hhciAqc3AsICp1YXJ0OwogCWludCByYywgY250OwogCi0JcmMgPSBzdGxpX3BvcnRjbWRzdGF0cyhwb3J0cCk7CisJcmMgPSBzdGxpX3BvcnRjbWRzdGF0cyhOVUxMLCBwb3J0cCk7CiAKIAl1YXJ0ID0gIlVOS05PV04iOwogCWlmIChicmRwLT5zdGF0ZSAmIEJTVF9TVEFSVEVEKSB7CkBAIC0yMTg4LDcgKzIxODUsNyBAQAogCiAJaWYgKHRlc3RfYml0KFNUX1JYU1RPUCwgJnBvcnRwLT5zdGF0ZSkpCiAJCXJldHVybjsKLQl0dHkgPSBwb3J0cC0+cG9ydC50dHk7CisJdHR5ID0gdHR5X3BvcnRfdHR5X2dldCgmcG9ydHAtPnBvcnQpOwogCWlmICh0dHkgPT0gTlVMTCkKIAkJcmV0dXJuOwogCkBAIC0yMjMwLDYgKzIyMjcsNyBAQAogCQlzZXRfYml0KFNUX1JYSU5HLCAmcG9ydHAtPnN0YXRlKTsKIAogCXR0eV9zY2hlZHVsZV9mbGlwKHR0eSk7CisJdHR5X2tyZWZfcHV0KHR0eSk7CiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTIzNjIsNyArMjM2MCw3IEBACiAJaWYgKGFwLT5ub3RpZnkpIHsKIAkJbnQgPSBhcC0+Y2hhbmdlZDsKIAkJYXAtPm5vdGlmeSA9IDA7Ci0JCXR0eSA9IHBvcnRwLT5wb3J0LnR0eTsKKwkJdHR5ID0gdHR5X3BvcnRfdHR5X2dldCgmcG9ydHAtPnBvcnQpOwogCiAJCWlmIChudC5zaWduYWwgJiBTR19EQ0QpIHsKIAkJCW9sZHNpZ3MgPSBwb3J0cC0+c2lnczsKQEAgLTIzOTksNiArMjM5Nyw3IEBACiAJCQkJdHR5X3NjaGVkdWxlX2ZsaXAodHR5KTsKIAkJCX0KIAkJfQorCQl0dHlfa3JlZl9wdXQodHR5KTsKIAogCQlpZiAobnQuZGF0YSAmIERUX1JYQlVTWSkgewogCQkJZG9uZXJ4Kys7CkBAIC0yNTM1LDE0ICsyNTM0LDE1IEBACiAgKgl0aGUgc2xhdmUuCiAgKi8KIAotc3RhdGljIHZvaWQgc3RsaV9ta2FzeXBvcnQoc3RydWN0IHN0bGlwb3J0ICpwb3J0cCwgYXN5cG9ydF90ICpwcCwgc3RydWN0IGt0ZXJtaW9zICp0aW9zcCkKK3N0YXRpYyB2b2lkIHN0bGlfbWthc3lwb3J0KHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBzdGxpcG9ydCAqcG9ydHAsCisJCQkJYXN5cG9ydF90ICpwcCwgc3RydWN0IGt0ZXJtaW9zICp0aW9zcCkKIHsKIAltZW1zZXQocHAsIDAsIHNpemVvZihhc3lwb3J0X3QpKTsKIAogLyoKICAqCVN0YXJ0IG9mIGJ5IHNldHRpbmcgdGhlIGJhdWQsIGNoYXIgc2l6ZSwgcGFyaXR5IGFuZCBzdG9wIGJpdCBpbmZvLgogICovCi0JcHAtPmJhdWRvdXQgPSB0dHlfZ2V0X2JhdWRfcmF0ZShwb3J0cC0+cG9ydC50dHkpOworCXBwLT5iYXVkb3V0ID0gdHR5X2dldF9iYXVkX3JhdGUodHR5KTsKIAlpZiAoKHRpb3NwLT5jX2NmbGFnICYgQ0JBVUQpID09IEIzODQwMCkgewogCQlpZiAoKHBvcnRwLT5wb3J0LmZsYWdzICYgQVNZTkNfU1BEX01BU0spID09IEFTWU5DX1NQRF9ISSkKIAkJCXBwLT5iYXVkb3V0ID0gNTc2MDA7CkBAIC0yNjk1LDcgKzI2OTUsNyBAQAogCQkJcHJpbnRrKCJTVEFMTElPTjogZmFpbGVkIHRvIGFsbG9jYXRlIHBvcnQgc3RydWN0dXJlXG4iKTsKIAkJCWNvbnRpbnVlOwogCQl9Ci0KKwkJdHR5X3BvcnRfaW5pdCgmcG9ydHAtPnBvcnQpOwogCQlwb3J0cC0+bWFnaWMgPSBTVExJX1BPUlRNQUdJQzsKIAkJcG9ydHAtPnBvcnRuciA9IGk7CiAJCXBvcnRwLT5icmRuciA9IGJyZHAtPmJyZG5yOwpAQCAtNDIyMCw3ICs0MjIwLDcgQEAKICAqCXdoYXQgcG9ydCB0byBnZXQgc3RhdHMgZm9yICh1c2VkIHRocm91Z2ggYm9hcmQgY29udHJvbCBkZXZpY2UpLgogICovCiAKLXN0YXRpYyBpbnQgc3RsaV9wb3J0Y21kc3RhdHMoc3RydWN0IHN0bGlwb3J0ICpwb3J0cCkKK3N0YXRpYyBpbnQgc3RsaV9wb3J0Y21kc3RhdHMoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IHN0bGlwb3J0ICpwb3J0cCkKIHsKIAl1bnNpZ25lZCBsb25nCWZsYWdzOwogCXN0cnVjdCBzdGxpYnJkCSpicmRwOwpAQCAtNDI0OSwxNSArNDI0OSwxNSBAQAogCXN0bGlfY29tc3RhdHMuZmxhZ3MgPSBwb3J0cC0+cG9ydC5mbGFnczsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZicmRfbG9jaywgZmxhZ3MpOwotCWlmIChwb3J0cC0+cG9ydC50dHkgIT0gTlVMTCkgewotCQlpZiAocG9ydHAtPnBvcnQudHR5LT5kcml2ZXJfZGF0YSA9PSBwb3J0cCkgewotCQkJc3RsaV9jb21zdGF0cy50dHlzdGF0ZSA9IHBvcnRwLT5wb3J0LnR0eS0+ZmxhZ3M7CisJaWYgKHR0eSAhPSBOVUxMKSB7CisJCWlmIChwb3J0cC0+cG9ydC50dHkgPT0gdHR5KSB7CisJCQlzdGxpX2NvbXN0YXRzLnR0eXN0YXRlID0gdHR5LT5mbGFnczsKIAkJCXN0bGlfY29tc3RhdHMucnhidWZmZXJlZCA9IC0xOwotCQkJaWYgKHBvcnRwLT5wb3J0LnR0eS0+dGVybWlvcyAhPSBOVUxMKSB7Ci0JCQkJc3RsaV9jb21zdGF0cy5jZmxhZ3MgPSBwb3J0cC0+cG9ydC50dHktPnRlcm1pb3MtPmNfY2ZsYWc7Ci0JCQkJc3RsaV9jb21zdGF0cy5pZmxhZ3MgPSBwb3J0cC0+cG9ydC50dHktPnRlcm1pb3MtPmNfaWZsYWc7Ci0JCQkJc3RsaV9jb21zdGF0cy5vZmxhZ3MgPSBwb3J0cC0+cG9ydC50dHktPnRlcm1pb3MtPmNfb2ZsYWc7Ci0JCQkJc3RsaV9jb21zdGF0cy5sZmxhZ3MgPSBwb3J0cC0+cG9ydC50dHktPnRlcm1pb3MtPmNfbGZsYWc7CisJCQlpZiAodHR5LT50ZXJtaW9zICE9IE5VTEwpIHsKKwkJCQlzdGxpX2NvbXN0YXRzLmNmbGFncyA9IHR0eS0+dGVybWlvcy0+Y19jZmxhZzsKKwkJCQlzdGxpX2NvbXN0YXRzLmlmbGFncyA9IHR0eS0+dGVybWlvcy0+Y19pZmxhZzsKKwkJCQlzdGxpX2NvbXN0YXRzLm9mbGFncyA9IHR0eS0+dGVybWlvcy0+Y19vZmxhZzsKKwkJCQlzdGxpX2NvbXN0YXRzLmxmbGFncyA9IHR0eS0+dGVybWlvcy0+Y19sZmxhZzsKIAkJCX0KIAkJfQogCX0KQEAgLTQyOTQsNyArNDI5NCw4IEBACiAgKgl3aGF0IHBvcnQgdG8gZ2V0IHN0YXRzIGZvciAodXNlZCB0aHJvdWdoIGJvYXJkIGNvbnRyb2wgZGV2aWNlKS4KICAqLwogCi1zdGF0aWMgaW50IHN0bGlfZ2V0cG9ydHN0YXRzKHN0cnVjdCBzdGxpcG9ydCAqcG9ydHAsIGNvbXN0YXRzX3QgX191c2VyICpjcCkKK3N0YXRpYyBpbnQgc3RsaV9nZXRwb3J0c3RhdHMoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IHN0bGlwb3J0ICpwb3J0cCwKKwkJCQkJCQljb21zdGF0c190IF9fdXNlciAqY3ApCiB7CiAJc3RydWN0IHN0bGlicmQgKmJyZHA7CiAJaW50IHJjOwpAQCAtNDMxMiw3ICs0MzEzLDcgQEAKIAlpZiAoIWJyZHApCiAJCXJldHVybiAtRU5PREVWOwogCi0JaWYgKChyYyA9IHN0bGlfcG9ydGNtZHN0YXRzKHBvcnRwKSkgPCAwKQorCWlmICgocmMgPSBzdGxpX3BvcnRjbWRzdGF0cyh0dHksIHBvcnRwKSkgPCAwKQogCQlyZXR1cm4gcmM7CiAKIAlyZXR1cm4gY29weV90b191c2VyKGNwLCAmc3RsaV9jb21zdGF0cywgc2l6ZW9mKGNvbXN0YXRzX3QpKSA/CkBAIC00NDI3LDcgKzQ0MjgsNyBAQAogCiAJc3dpdGNoIChjbWQpIHsKIAljYXNlIENPTV9HRVRQT1JUU1RBVFM6Ci0JCXJjID0gc3RsaV9nZXRwb3J0c3RhdHMoTlVMTCwgYXJncCk7CisJCXJjID0gc3RsaV9nZXRwb3J0c3RhdHMoTlVMTCwgTlVMTCwgYXJncCk7CiAJCWRvbmUrKzsKIAkJYnJlYWs7CiAJY2FzZSBDT01fQ0xSUE9SVFNUQVRTOgpAQCAtNDU5OSw5ICs0NjAwLDggQEAKIAogCWlzdGFsbGlvbl9jbGFzcyA9IGNsYXNzX2NyZWF0ZShUSElTX01PRFVMRSwgInN0YWxpb21lbSIpOwogCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspCi0JCWRldmljZV9jcmVhdGVfZHJ2ZGF0YShpc3RhbGxpb25fY2xhc3MsIE5VTEwsCi0JCQkJICAgICAgTUtERVYoU1RMX1NJT01FTU1BSk9SLCBpKSwKLQkJCQkgICAgICBOVUxMLCAic3RhbGlvbWVtJWQiLCBpKTsKKwkJZGV2aWNlX2NyZWF0ZShpc3RhbGxpb25fY2xhc3MsIE5VTEwsIE1LREVWKFNUTF9TSU9NRU1NQUpPUiwgaSksCisJCQkgICAgICBOVUxMLCAic3RhbGlvbWVtJWQiLCBpKTsKIAogCXJldHVybiAwOwogZXJyX2RlaW5pdDoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9rZXlib2FyZC5jIGIvZHJpdmVycy9jaGFyL2tleWJvYXJkLmMKaW5kZXggN2IzYTIxMi4uZGUyNmE5NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2tleWJvYXJkLmMKKysrIGIvZHJpdmVycy9jaGFyL2tleWJvYXJkLmMKQEAgLTEyNDksNyArMTI0OSw3IEBACiAJCXJldHVybjsKIAl9CiAKLQlpZiAoa2V5Y29kZSA+IE5SX0tFWVMpCisJaWYgKGtleWNvZGUgPj0gTlJfS0VZUykKIAkJaWYgKGtleWNvZGUgPj0gS0VZX0JSTF9ET1QxICYmIGtleWNvZGUgPD0gS0VZX0JSTF9ET1Q4KQogCQkJa2V5c3ltID0gSyhLVF9CUkwsIGtleWNvZGUgLSBLRVlfQlJMX0RPVDEgKyAxKTsKIAkJZWxzZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2xwLmMgYi9kcml2ZXJzL2NoYXIvbHAuYwppbmRleCAzZjI3MTliLi5lNDQ0YzJkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvbHAuYworKysgYi9kcml2ZXJzL2NoYXIvbHAuYwpAQCAtODEzLDggKzgxMyw4IEBACiAJaWYgKHJlc2V0KQogCQlscF9yZXNldChucik7CiAKLQlkZXZpY2VfY3JlYXRlX2RydmRhdGEobHBfY2xhc3MsIHBvcnQtPmRldiwgTUtERVYoTFBfTUFKT1IsIG5yKSwgTlVMTCwKLQkJCSAgICAgICJscCVkIiwgbnIpOworCWRldmljZV9jcmVhdGUobHBfY2xhc3MsIHBvcnQtPmRldiwgTUtERVYoTFBfTUFKT1IsIG5yKSwgTlVMTCwKKwkJICAgICAgImxwJWQiLCBucik7CiAKIAlwcmludGsoS0VSTl9JTkZPICJscCVkOiB1c2luZyAlcyAoJXMpLlxuIiwgbnIsIHBvcnQtPm5hbWUsIAogCSAgICAgICAocG9ydC0+aXJxID09IFBBUlBPUlRfSVJRX05PTkUpPyJwb2xsaW5nIjoiaW50ZXJydXB0LWRyaXZlbiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL21lbS5jIGIvZHJpdmVycy9jaGFyL21lbS5jCmluZGV4IDY3MmIwOGUuLjY0MzFmNjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9tZW0uYworKysgYi9kcml2ZXJzL2NoYXIvbWVtLmMKQEAgLTk5Miw5ICs5OTIsOSBAQAogCiAJbWVtX2NsYXNzID0gY2xhc3NfY3JlYXRlKFRISVNfTU9EVUxFLCAibWVtIik7CiAJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZGV2bGlzdCk7IGkrKykKLQkJZGV2aWNlX2NyZWF0ZV9kcnZkYXRhKG1lbV9jbGFzcywgTlVMTCwKLQkJCQkgICAgICBNS0RFVihNRU1fTUFKT1IsIGRldmxpc3RbaV0ubWlub3IpLAotCQkJCSAgICAgIE5VTEwsIGRldmxpc3RbaV0ubmFtZSk7CisJCWRldmljZV9jcmVhdGUobWVtX2NsYXNzLCBOVUxMLAorCQkJICAgICAgTUtERVYoTUVNX01BSk9SLCBkZXZsaXN0W2ldLm1pbm9yKSwgTlVMTCwKKwkJCSAgICAgIGRldmxpc3RbaV0ubmFtZSk7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9taXNjLmMgYi9kcml2ZXJzL2NoYXIvbWlzYy5jCmluZGV4IDk5OWFhNzcuLmE1ZTBkYjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9taXNjLmMKKysrIGIvZHJpdmVycy9jaGFyL21pc2MuYwpAQCAtMjE3LDggKzIxNyw4IEBACiAJCW1pc2NfbWlub3JzW21pc2MtPm1pbm9yID4+IDNdIHw9IDEgPDwgKG1pc2MtPm1pbm9yICYgNyk7CiAJZGV2ID0gTUtERVYoTUlTQ19NQUpPUiwgbWlzYy0+bWlub3IpOwogCi0JbWlzYy0+dGhpc19kZXZpY2UgPSBkZXZpY2VfY3JlYXRlX2RydmRhdGEobWlzY19jbGFzcywgbWlzYy0+cGFyZW50LAotCQkJCQkJICBkZXYsIE5VTEwsICIlcyIsIG1pc2MtPm5hbWUpOworCW1pc2MtPnRoaXNfZGV2aWNlID0gZGV2aWNlX2NyZWF0ZShtaXNjX2NsYXNzLCBtaXNjLT5wYXJlbnQsIGRldiwgTlVMTCwKKwkJCQkJICAiJXMiLCBtaXNjLT5uYW1lKTsKIAlpZiAoSVNfRVJSKG1pc2MtPnRoaXNfZGV2aWNlKSkgewogCQllcnIgPSBQVFJfRVJSKG1pc2MtPnRoaXNfZGV2aWNlKTsKIAkJZ290byBvdXQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvbW94YS5jIGIvZHJpdmVycy9jaGFyL21veGEuYwppbmRleCBkM2Q3ODY0ZS4uMTJkMzI3YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL21veGEuYworKysgYi9kcml2ZXJzL2NoYXIvbW94YS5jCkBAIC0yMDUsNyArMjA1LDcgQEAKIHN0YXRpYyB2b2lkIG1veGFfcG9sbCh1bnNpZ25lZCBsb25nKTsKIHN0YXRpYyB2b2lkIG1veGFfc2V0X3R0eV9wYXJhbShzdHJ1Y3QgdHR5X3N0cnVjdCAqLCBzdHJ1Y3Qga3Rlcm1pb3MgKik7CiBzdGF0aWMgdm9pZCBtb3hhX3NldHVwX2VtcHR5X2V2ZW50KHN0cnVjdCB0dHlfc3RydWN0ICopOwotc3RhdGljIHZvaWQgbW94YV9zaHV0X2Rvd24oc3RydWN0IG1veGFfcG9ydCAqKTsKK3N0YXRpYyB2b2lkIG1veGFfc2h1dF9kb3duKHN0cnVjdCB0dHlfc3RydWN0ICopOwogLyoKICAqIG1veGEgYm9hcmQgaW50ZXJmYWNlIGZ1bmN0aW9uczoKICAqLwpAQCAtMjE3LDcgKzIxNyw3IEBACiBzdGF0aWMgdm9pZCBNb3hhUG9ydEZsb3dDdHJsKHN0cnVjdCBtb3hhX3BvcnQgKiwgaW50LCBpbnQsIGludCwgaW50LCBpbnQpOwogc3RhdGljIGludCBNb3hhUG9ydExpbmVTdGF0dXMoc3RydWN0IG1veGFfcG9ydCAqKTsKIHN0YXRpYyB2b2lkIE1veGFQb3J0Rmx1c2hEYXRhKHN0cnVjdCBtb3hhX3BvcnQgKiwgaW50KTsKLXN0YXRpYyBpbnQgTW94YVBvcnRXcml0ZURhdGEoc3RydWN0IG1veGFfcG9ydCAqLCBjb25zdCB1bnNpZ25lZCBjaGFyICosIGludCk7CitzdGF0aWMgaW50IE1veGFQb3J0V3JpdGVEYXRhKHN0cnVjdCB0dHlfc3RydWN0ICosIGNvbnN0IHVuc2lnbmVkIGNoYXIgKiwgaW50KTsKIHN0YXRpYyBpbnQgTW94YVBvcnRSZWFkRGF0YShzdHJ1Y3QgbW94YV9wb3J0ICopOwogc3RhdGljIGludCBNb3hhUG9ydFR4UXVldWUoc3RydWN0IG1veGFfcG9ydCAqKTsKIHN0YXRpYyBpbnQgTW94YVBvcnRSeFF1ZXVlKHN0cnVjdCBtb3hhX3BvcnQgKik7CkBAIC0zMzIsNiArMzMyLDcgQEAKIAkJZm9yIChpID0gMDsgaSA8IE1BWF9CT0FSRFM7IGkrKykgewogCQkJcCA9IG1veGFfYm9hcmRzW2ldLnBvcnRzOwogCQkJZm9yIChqID0gMDsgaiA8IE1BWF9QT1JUU19QRVJfQk9BUkQ7IGorKywgcCsrLCBhcmdtKyspIHsKKwkJCQlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5cDsKIAkJCQltZW1zZXQoJnRtcCwgMCwgc2l6ZW9mKHRtcCkpOwogCQkJCWlmICghbW94YV9ib2FyZHNbaV0ucmVhZHkpCiAJCQkJCWdvdG8gY29weTsKQEAgLTM0NCwxMCArMzQ1LDEyIEBACiAJCQkJaWYgKHN0YXR1cyAmIDQpCiAJCQkJCXRtcC5kY2QgPSAxOwogCi0JCQkJaWYgKCFwLT5wb3J0LnR0eSB8fCAhcC0+cG9ydC50dHktPnRlcm1pb3MpCisJCQkJdHR5cCA9IHR0eV9wb3J0X3R0eV9nZXQoJnAtPnBvcnQpOworCQkJCWlmICghdHR5cCB8fCAhdHR5cC0+dGVybWlvcykKIAkJCQkJdG1wLmNmbGFnID0gcC0+Y2ZsYWc7CiAJCQkJZWxzZQotCQkJCQl0bXAuY2ZsYWcgPSBwLT5wb3J0LnR0eS0+dGVybWlvcy0+Y19jZmxhZzsKKwkJCQkJdG1wLmNmbGFnID0gdHR5cC0+dGVybWlvcy0+Y19jZmxhZzsKKwkJCQl0dHlfa3JlZl9wdXQodHR5KTsKIGNvcHk6CiAJCQkJaWYgKGNvcHlfdG9fdXNlcihhcmdtLCAmdG1wLCBzaXplb2YodG1wKSkpIHsKIAkJCQkJbXV0ZXhfdW5sb2NrKCZtb3hhX29wZW5sb2NrKTsKQEAgLTUxMCw3ICs1MTMsNyBAQAogCQlzaXplX3QgbGVuKQogewogCXZvaWQgX19pb21lbSAqYmFzZUFkZHIgPSBicmQtPmJhc2VtZW07Ci0JY29uc3QgdTE2ICp1cHRyID0gcHRyOworCWNvbnN0IF9fbGUxNiAqdXB0ciA9IHB0cjsKIAlzaXplX3Qgd2xlbiwgbGVuMiwgajsKIAl1bnNpZ25lZCBsb25nIGtleSwgbG9hZGJ1ZiwgbG9hZGxlbiwgY2hlY2tzdW0sIGNoZWNrc3VtX29rOwogCXVuc2lnbmVkIGludCBpLCByZXRyeTsKQEAgLTg4MCw4ICs4ODMsMTQgQEAKIAogCS8qIHBjaSBob3QtdW4tcGx1ZyBzdXBwb3J0ICovCiAJZm9yIChhID0gMDsgYSA8IGJyZC0+bnVtUG9ydHM7IGErKykKLQkJaWYgKGJyZC0+cG9ydHNbYV0ucG9ydC5mbGFncyAmIEFTWU5DX0lOSVRJQUxJWkVEKQotCQkJdHR5X2hhbmd1cChicmQtPnBvcnRzW2FdLnBvcnQudHR5KTsKKwkJaWYgKGJyZC0+cG9ydHNbYV0ucG9ydC5mbGFncyAmIEFTWU5DX0lOSVRJQUxJWkVEKSB7CisJCQlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5ID0gdHR5X3BvcnRfdHR5X2dldCgKKwkJCQkJCSZicmQtPnBvcnRzW2FdLnBvcnQpOworCQkJaWYgKHR0eSkgeworCQkJCXR0eV9oYW5ndXAodHR5KTsKKwkJCQl0dHlfa3JlZl9wdXQodHR5KTsKKwkJCX0KKwkJfQogCXdoaWxlICgxKSB7CiAJCW9wZW5lZCA9IDA7CiAJCWZvciAoYSA9IDA7IGEgPCBicmQtPm51bVBvcnRzOyBhKyspCkBAIC0xMDk2LDEzICsxMTA1LDE0IEBACiBtb2R1bGVfaW5pdChtb3hhX2luaXQpOwogbW9kdWxlX2V4aXQobW94YV9leGl0KTsKIAotc3RhdGljIHZvaWQgbW94YV9jbG9zZV9wb3J0KHN0cnVjdCBtb3hhX3BvcnQgKmNoKQorc3RhdGljIHZvaWQgbW94YV9jbG9zZV9wb3J0KHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCiB7Ci0JbW94YV9zaHV0X2Rvd24oY2gpOworCXN0cnVjdCBtb3hhX3BvcnQgKmNoID0gdHR5LT5kcml2ZXJfZGF0YTsKKwltb3hhX3NodXRfZG93bih0dHkpOwogCU1veGFQb3J0Rmx1c2hEYXRhKGNoLCAyKTsKIAljaC0+cG9ydC5mbGFncyAmPSB+QVNZTkNfTk9STUFMX0FDVElWRTsKLQljaC0+cG9ydC50dHktPmRyaXZlcl9kYXRhID0gTlVMTDsKLQljaC0+cG9ydC50dHkgPSBOVUxMOworCXR0eS0+ZHJpdmVyX2RhdGEgPSBOVUxMOworCXR0eV9wb3J0X3R0eV9zZXQoJmNoLT5wb3J0LCBOVUxMKTsKIH0KIAogc3RhdGljIGludCBtb3hhX2Jsb2NrX3RpbGxfcmVhZHkoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKmZpbHAsCkBAIC0xMTYxLDcgKzExNzEsNyBAQAogCWNoID0gJmJyZC0+cG9ydHNbcG9ydCAlIE1BWF9QT1JUU19QRVJfQk9BUkRdOwogCWNoLT5wb3J0LmNvdW50Kys7CiAJdHR5LT5kcml2ZXJfZGF0YSA9IGNoOwotCWNoLT5wb3J0LnR0eSA9IHR0eTsKKwl0dHlfcG9ydF90dHlfc2V0KCZjaC0+cG9ydCwgdHR5KTsKIAlpZiAoIShjaC0+cG9ydC5mbGFncyAmIEFTWU5DX0lOSVRJQUxJWkVEKSkgewogCQljaC0+c3RhdHVzZmxhZ3MgPSAwOwogCQltb3hhX3NldF90dHlfcGFyYW0odHR5LCB0dHktPnRlcm1pb3MpOwpAQCAtMTE3OSw3ICsxMTg5LDcgQEAKIAlpZiAocmV0dmFsKSB7CiAJCWlmIChjaC0+cG9ydC5jb3VudCkgLyogMCBtZWFucyBhbHJlYWR5IGh1bmcgdXAuLi4gKi8KIAkJCWlmICgtLWNoLT5wb3J0LmNvdW50ID09IDApCi0JCQkJbW94YV9jbG9zZV9wb3J0KGNoKTsKKwkJCQltb3hhX2Nsb3NlX3BvcnQodHR5KTsKIAl9IGVsc2UKIAkJY2gtPnBvcnQuZmxhZ3MgfD0gQVNZTkNfTk9STUFMX0FDVElWRTsKIAltdXRleF91bmxvY2soJm1veGFfb3BlbmxvY2spOwpAQCAtMTIxOSw3ICsxMjI5LDcgQEAKIAkJdHR5X3dhaXRfdW50aWxfc2VudCh0dHksIDMwICogSFopOwkvKiAzMCBzZWNvbmRzIHRpbWVvdXQgKi8KIAl9CiAKLQltb3hhX2Nsb3NlX3BvcnQoY2gpOworCW1veGFfY2xvc2VfcG9ydCh0dHkpOwogdW5sb2NrOgogCW11dGV4X3VubG9jaygmbW94YV9vcGVubG9jayk7CiB9CkBAIC0xMjM0LDcgKzEyNDQsNyBAQAogCQlyZXR1cm4gMDsKIAogCXNwaW5fbG9ja19iaCgmbW94YV9sb2NrKTsKLQlsZW4gPSBNb3hhUG9ydFdyaXRlRGF0YShjaCwgYnVmLCBjb3VudCk7CisJbGVuID0gTW94YVBvcnRXcml0ZURhdGEodHR5LCBidWYsIGNvdW50KTsKIAlzcGluX3VubG9ja19iaCgmbW94YV9sb2NrKTsKIAogCWNoLT5zdGF0dXNmbGFncyB8PSBMT1dXQUlUOwpAQCAtMTQwOSw3ICsxNDE5LDcgQEAKIAkJcmV0dXJuOwogCX0KIAljaC0+cG9ydC5jb3VudCA9IDA7Ci0JbW94YV9jbG9zZV9wb3J0KGNoKTsKKwltb3hhX2Nsb3NlX3BvcnQodHR5KTsKIAltdXRleF91bmxvY2soJm1veGFfb3BlbmxvY2spOwogCiAJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZjaC0+cG9ydC5vcGVuX3dhaXQpOwpAQCAtMTQxNywxMSArMTQyNywxNCBAQAogCiBzdGF0aWMgdm9pZCBtb3hhX25ld19kY2RzdGF0ZShzdHJ1Y3QgbW94YV9wb3J0ICpwLCB1OCBkY2QpCiB7CisJc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eTsKIAlkY2QgPSAhIWRjZDsKIAotCWlmIChkY2QgIT0gcC0+RENEU3RhdGUgJiYgcC0+cG9ydC50dHkgJiYgQ19DTE9DQUwocC0+cG9ydC50dHkpKSB7Ci0JCWlmICghZGNkKQotCQkJdHR5X2hhbmd1cChwLT5wb3J0LnR0eSk7CisJaWYgKGRjZCAhPSBwLT5EQ0RTdGF0ZSkgeworCQl0dHkgPSB0dHlfcG9ydF90dHlfZ2V0KCZwLT5wb3J0KTsKKwkJaWYgKHR0eSAmJiBDX0NMT0NBTCh0dHkpICYmICFkY2QpCisJCQl0dHlfaGFuZ3VwKHR0eSk7CisJCXR0eV9rcmVmX3B1dCh0dHkpOwogCX0KIAlwLT5EQ0RTdGF0ZSA9IGRjZDsKIH0KQEAgLTE0MjksNyArMTQ0Miw3IEBACiBzdGF0aWMgaW50IG1veGFfcG9sbF9wb3J0KHN0cnVjdCBtb3hhX3BvcnQgKnAsIHVuc2lnbmVkIGludCBoYW5kbGUsCiAJCXUxNiBfX2lvbWVtICppcCkKIHsKLQlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5ID0gcC0+cG9ydC50dHk7CisJc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSA9IHR0eV9wb3J0X3R0eV9nZXQoJnAtPnBvcnQpOwogCXZvaWQgX19pb21lbSAqb2ZzQWRkcjsKIAl1bnNpZ25lZCBpbnQgaW5pdGVkID0gcC0+cG9ydC5mbGFncyAmIEFTWU5DX0lOSVRJQUxJWkVEOwogCXUxNiBpbnRyOwpAQCAtMTQ3Niw2ICsxNDg5LDcgQEAKIAkJdHR5X2luc2VydF9mbGlwX2NoYXIodHR5LCAwLCBUVFlfQlJFQUspOwogCQl0dHlfc2NoZWR1bGVfZmxpcCh0dHkpOwogCX0KKwl0dHlfa3JlZl9wdXQodHR5KTsKIAogCWlmIChpbnRyICYgSW50ckxpbmUpCiAJCW1veGFfbmV3X2RjZHN0YXRlKHAsIHJlYWRiKG9mc0FkZHIgKyBGbGFnU3RhdCkgJiBEQ0Rfc3RhdGUpOwpAQCAtMTU2MCw5ICsxNTc0LDkgQEAKIAlzcGluX3VubG9ja19iaCgmbW94YV9sb2NrKTsKIH0KIAotc3RhdGljIHZvaWQgbW94YV9zaHV0X2Rvd24oc3RydWN0IG1veGFfcG9ydCAqY2gpCitzdGF0aWMgdm9pZCBtb3hhX3NodXRfZG93bihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQogewotCXN0cnVjdCB0dHlfc3RydWN0ICp0cCA9IGNoLT5wb3J0LnR0eTsKKwlzdHJ1Y3QgbW94YV9wb3J0ICpjaCA9IHR0eS0+ZHJpdmVyX2RhdGE7CiAKIAlpZiAoIShjaC0+cG9ydC5mbGFncyAmIEFTWU5DX0lOSVRJQUxJWkVEKSkKIAkJcmV0dXJuOwpAQCAtMTU3Miw3ICsxNTg2LDcgQEAKIAkvKgogCSAqIElmIHdlJ3JlIGEgbW9kZW0gY29udHJvbCBkZXZpY2UgYW5kIEhVUENMIGlzIG9uLCBkcm9wIFJUUyAmIERUUi4KIAkgKi8KLQlpZiAoQ19IVVBDTCh0cCkpCisJaWYgKENfSFVQQ0wodHR5KSkKIAkJTW94YVBvcnRMaW5lQ3RybChjaCwgMCwgMCk7CiAKIAlzcGluX2xvY2tfYmgoJm1veGFfbG9jayk7CkBAIC0xOTUzLDkgKzE5NjcsMTAgQEAKIAlyZXR1cm4gdmFsOwogfQogCi1zdGF0aWMgaW50IE1veGFQb3J0V3JpdGVEYXRhKHN0cnVjdCBtb3hhX3BvcnQgKnBvcnQsCitzdGF0aWMgaW50IE1veGFQb3J0V3JpdGVEYXRhKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksCiAJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZmZlciwgaW50IGxlbikKIHsKKwlzdHJ1Y3QgbW94YV9wb3J0ICpwb3J0ID0gdHR5LT5kcml2ZXJfZGF0YTsKIAl2b2lkIF9faW9tZW0gKmJhc2VBZGRyLCAqb2ZzQWRkciwgKm9mczsKIAl1bnNpZ25lZCBpbnQgYywgdG90YWw7CiAJdTE2IGhlYWQsIHRhaWwsIHR4X21hc2ssIHNwYWdlLCBlcGFnZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9teHNlci5jIGIvZHJpdmVycy9jaGFyL214c2VyLmMKaW5kZXggYjYzODQwMy4uOGJlZWY1MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL214c2VyLmMKKysrIGIvZHJpdmVycy9jaGFyL214c2VyLmMKQEAgLTYxMCwxNSArNjEwLDEzIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgbXhzZXJfc2V0X2JhdWQoc3RydWN0IG14c2VyX3BvcnQgKmluZm8sIGxvbmcgbmV3c3BkKQorc3RhdGljIGludCBteHNlcl9zZXRfYmF1ZChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBsb25nIG5ld3NwZCkKIHsKKwlzdHJ1Y3QgbXhzZXJfcG9ydCAqaW5mbyA9IHR0eS0+ZHJpdmVyX2RhdGE7CiAJaW50IHF1b3QgPSAwLCBiYXVkOwogCXVuc2lnbmVkIGNoYXIgY3ZhbDsKIAotCWlmICghaW5mby0+cG9ydC50dHkgfHwgIWluZm8tPnBvcnQudHR5LT50ZXJtaW9zKQotCQlyZXR1cm4gLTE7Ci0KLQlpZiAoIShpbmZvLT5pb2FkZHIpKQorCWlmICghaW5mby0+aW9hZGRyKQogCQlyZXR1cm4gLTE7CiAKIAlpZiAobmV3c3BkID4gaW5mby0+bWF4X2JhdWQpCkBAIC02MjYsMTMgKzYyNCwxMyBAQAogCiAJaWYgKG5ld3NwZCA9PSAxMzQpIHsKIAkJcXVvdCA9IDIgKiBpbmZvLT5iYXVkX2Jhc2UgLyAyNjk7Ci0JCXR0eV9lbmNvZGVfYmF1ZF9yYXRlKGluZm8tPnBvcnQudHR5LCAxMzQsIDEzNCk7CisJCXR0eV9lbmNvZGVfYmF1ZF9yYXRlKHR0eSwgMTM0LCAxMzQpOwogCX0gZWxzZSBpZiAobmV3c3BkKSB7CiAJCXF1b3QgPSBpbmZvLT5iYXVkX2Jhc2UgLyBuZXdzcGQ7CiAJCWlmIChxdW90ID09IDApCiAJCQlxdW90ID0gMTsKIAkJYmF1ZCA9IGluZm8tPmJhdWRfYmFzZS9xdW90OwotCQl0dHlfZW5jb2RlX2JhdWRfcmF0ZShpbmZvLT5wb3J0LnR0eSwgYmF1ZCwgYmF1ZCk7CisJCXR0eV9lbmNvZGVfYmF1ZF9yYXRlKHR0eSwgYmF1ZCwgYmF1ZCk7CiAJfSBlbHNlIHsKIAkJcXVvdCA9IDA7CiAJfQpAQCAtNjU4LDcgKzY1Niw3IEBACiAJb3V0YihjdmFsLCBpbmZvLT5pb2FkZHIgKyBVQVJUX0xDUik7CS8qIHJlc2V0IERMQUIgKi8KIAogI2lmZGVmIEJPVEhFUgotCWlmIChDX0JBVUQoaW5mby0+cG9ydC50dHkpID09IEJPVEhFUikgeworCWlmIChDX0JBVUQodHR5KSA9PSBCT1RIRVIpIHsKIAkJcXVvdCA9IGluZm8tPmJhdWRfYmFzZSAlIG5ld3NwZDsKIAkJcXVvdCAqPSA4OwogCQlpZiAocXVvdCAlIG5ld3NwZCA+IG5ld3NwZCAvIDIpIHsKQEAgLTY3OSwyMSArNjc3LDIwIEBACiAgKiBUaGlzIHJvdXRpbmUgaXMgY2FsbGVkIHRvIHNldCB0aGUgVUFSVCBkaXZpc29yIHJlZ2lzdGVycyB0byBtYXRjaAogICogdGhlIHNwZWNpZmllZCBiYXVkIHJhdGUgZm9yIGEgc2VyaWFsIHBvcnQuCiAgKi8KLXN0YXRpYyBpbnQgbXhzZXJfY2hhbmdlX3NwZWVkKHN0cnVjdCBteHNlcl9wb3J0ICppbmZvLAotCQlzdHJ1Y3Qga3Rlcm1pb3MgKm9sZF90ZXJtaW9zKQorc3RhdGljIGludCBteHNlcl9jaGFuZ2Vfc3BlZWQoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwKKwkJCQkJc3RydWN0IGt0ZXJtaW9zICpvbGRfdGVybWlvcykKIHsKKwlzdHJ1Y3QgbXhzZXJfcG9ydCAqaW5mbyA9IHR0eS0+ZHJpdmVyX2RhdGE7CiAJdW5zaWduZWQgY2ZsYWcsIGN2YWwsIGZjcjsKIAlpbnQgcmV0ID0gMDsKIAl1bnNpZ25lZCBjaGFyIHN0YXR1czsKIAotCWlmICghaW5mby0+cG9ydC50dHkgfHwgIWluZm8tPnBvcnQudHR5LT50ZXJtaW9zKQotCQlyZXR1cm4gcmV0OwotCWNmbGFnID0gaW5mby0+cG9ydC50dHktPnRlcm1pb3MtPmNfY2ZsYWc7Ci0JaWYgKCEoaW5mby0+aW9hZGRyKSkKKwljZmxhZyA9IHR0eS0+dGVybWlvcy0+Y19jZmxhZzsKKwlpZiAoIWluZm8tPmlvYWRkcikKIAkJcmV0dXJuIHJldDsKIAotCWlmIChteHNlcl9zZXRfYmF1ZF9tZXRob2RbaW5mby0+cG9ydC50dHktPmluZGV4XSA9PSAwKQotCQlteHNlcl9zZXRfYmF1ZChpbmZvLCB0dHlfZ2V0X2JhdWRfcmF0ZShpbmZvLT5wb3J0LnR0eSkpOworCWlmIChteHNlcl9zZXRfYmF1ZF9tZXRob2RbdHR5LT5pbmRleF0gPT0gMCkKKwkJbXhzZXJfc2V0X2JhdWQodHR5LCB0dHlfZ2V0X2JhdWRfcmF0ZSh0dHkpKTsKIAogCS8qIGJ5dGUgc2l6ZSBhbmQgcGFyaXR5ICovCiAJc3dpdGNoIChjZmxhZyAmIENTSVpFKSB7CkBAIC03NjIsOSArNzU5LDkgQEAKIAkJCWluZm8tPk1DUiB8PSBVQVJUX01DUl9BRkU7CiAJCX0gZWxzZSB7CiAJCQlzdGF0dXMgPSBpbmIoaW5mby0+aW9hZGRyICsgVUFSVF9NU1IpOwotCQkJaWYgKGluZm8tPnBvcnQudHR5LT5od19zdG9wcGVkKSB7CisJCQlpZiAodHR5LT5od19zdG9wcGVkKSB7CiAJCQkJaWYgKHN0YXR1cyAmIFVBUlRfTVNSX0NUUykgewotCQkJCQlpbmZvLT5wb3J0LnR0eS0+aHdfc3RvcHBlZCA9IDA7CisJCQkJCXR0eS0+aHdfc3RvcHBlZCA9IDA7CiAJCQkJCWlmIChpbmZvLT50eXBlICE9IFBPUlRfMTY1NTBBICYmCiAJCQkJCQkJIWluZm8tPmJvYXJkLT5jaGlwX2ZsYWcpIHsKIAkJCQkJCW91dGIoaW5mby0+SUVSICYgflVBUlRfSUVSX1RIUkksCkBAIC03NzQsMTEgKzc3MSwxMSBAQAogCQkJCQkJb3V0YihpbmZvLT5JRVIsIGluZm8tPmlvYWRkciArCiAJCQkJCQkJCVVBUlRfSUVSKTsKIAkJCQkJfQotCQkJCQl0dHlfd2FrZXVwKGluZm8tPnBvcnQudHR5KTsKKwkJCQkJdHR5X3dha2V1cCh0dHkpOwogCQkJCX0KIAkJCX0gZWxzZSB7CiAJCQkJaWYgKCEoc3RhdHVzICYgVUFSVF9NU1JfQ1RTKSkgewotCQkJCQlpbmZvLT5wb3J0LnR0eS0+aHdfc3RvcHBlZCA9IDE7CisJCQkJCXR0eS0+aHdfc3RvcHBlZCA9IDE7CiAJCQkJCWlmICgoaW5mby0+dHlwZSAhPSBQT1JUXzE2NTUwQSkgJiYKIAkJCQkJCQkoIWluZm8tPmJvYXJkLT5jaGlwX2ZsYWcpKSB7CiAJCQkJCQlpbmZvLT5JRVIgJj0gflVBUlRfSUVSX1RIUkk7CkBAIC04MDQsMjEgKzgwMSwyMSBAQAogCSAqIFNldCB1cCBwYXJpdHkgY2hlY2sgZmxhZwogCSAqLwogCWluZm8tPnJlYWRfc3RhdHVzX21hc2sgPSBVQVJUX0xTUl9PRSB8IFVBUlRfTFNSX1RIUkUgfCBVQVJUX0xTUl9EUjsKLQlpZiAoSV9JTlBDSyhpbmZvLT5wb3J0LnR0eSkpCisJaWYgKElfSU5QQ0sodHR5KSkKIAkJaW5mby0+cmVhZF9zdGF0dXNfbWFzayB8PSBVQVJUX0xTUl9GRSB8IFVBUlRfTFNSX1BFOwotCWlmIChJX0JSS0lOVChpbmZvLT5wb3J0LnR0eSkgfHwgSV9QQVJNUksoaW5mby0+cG9ydC50dHkpKQorCWlmIChJX0JSS0lOVCh0dHkpIHx8IElfUEFSTVJLKHR0eSkpCiAJCWluZm8tPnJlYWRfc3RhdHVzX21hc2sgfD0gVUFSVF9MU1JfQkk7CiAKIAlpbmZvLT5pZ25vcmVfc3RhdHVzX21hc2sgPSAwOwogCi0JaWYgKElfSUdOQlJLKGluZm8tPnBvcnQudHR5KSkgeworCWlmIChJX0lHTkJSSyh0dHkpKSB7CiAJCWluZm8tPmlnbm9yZV9zdGF0dXNfbWFzayB8PSBVQVJUX0xTUl9CSTsKIAkJaW5mby0+cmVhZF9zdGF0dXNfbWFzayB8PSBVQVJUX0xTUl9CSTsKIAkJLyoKIAkJICogSWYgd2UncmUgaWdub3JlIHBhcml0eSBhbmQgYnJlYWsgaW5kaWNhdG9ycywgaWdub3JlCiAJCSAqIG92ZXJydW5zIHRvby4gIChGb3IgcmVhbCByYXcgc3VwcG9ydCkuCiAJCSAqLwotCQlpZiAoSV9JR05QQVIoaW5mby0+cG9ydC50dHkpKSB7CisJCWlmIChJX0lHTlBBUih0dHkpKSB7CiAJCQlpbmZvLT5pZ25vcmVfc3RhdHVzX21hc2sgfD0KIAkJCQkJCVVBUlRfTFNSX09FIHwKIAkJCQkJCVVBUlRfTFNSX1BFIHwKQEAgLTgzMCwxNiArODI3LDE2IEBACiAJCX0KIAl9CiAJaWYgKGluZm8tPmJvYXJkLT5jaGlwX2ZsYWcpIHsKLQkJbXhzZXJfc2V0X211c3RfeG9uMV92YWx1ZShpbmZvLT5pb2FkZHIsIFNUQVJUX0NIQVIoaW5mby0+cG9ydC50dHkpKTsKLQkJbXhzZXJfc2V0X211c3RfeG9mZjFfdmFsdWUoaW5mby0+aW9hZGRyLCBTVE9QX0NIQVIoaW5mby0+cG9ydC50dHkpKTsKLQkJaWYgKElfSVhPTihpbmZvLT5wb3J0LnR0eSkpIHsKKwkJbXhzZXJfc2V0X211c3RfeG9uMV92YWx1ZShpbmZvLT5pb2FkZHIsIFNUQVJUX0NIQVIodHR5KSk7CisJCW14c2VyX3NldF9tdXN0X3hvZmYxX3ZhbHVlKGluZm8tPmlvYWRkciwgU1RPUF9DSEFSKHR0eSkpOworCQlpZiAoSV9JWE9OKHR0eSkpIHsKIAkJCW14c2VyX2VuYWJsZV9tdXN0X3J4X3NvZnR3YXJlX2Zsb3dfY29udHJvbCgKIAkJCQkJaW5mby0+aW9hZGRyKTsKIAkJfSBlbHNlIHsKIAkJCW14c2VyX2Rpc2FibGVfbXVzdF9yeF9zb2Z0d2FyZV9mbG93X2NvbnRyb2woCiAJCQkJCWluZm8tPmlvYWRkcik7CiAJCX0KLQkJaWYgKElfSVhPRkYoaW5mby0+cG9ydC50dHkpKSB7CisJCWlmIChJX0lYT0ZGKHR0eSkpIHsKIAkJCW14c2VyX2VuYWJsZV9tdXN0X3R4X3NvZnR3YXJlX2Zsb3dfY29udHJvbCgKIAkJCQkJaW5mby0+aW9hZGRyKTsKIAkJfSBlbHNlIHsKQEAgLTg1NSw3ICs4NTIsOCBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyB2b2lkIG14c2VyX2NoZWNrX21vZGVtX3N0YXR1cyhzdHJ1Y3QgbXhzZXJfcG9ydCAqcG9ydCwgaW50IHN0YXR1cykKK3N0YXRpYyB2b2lkIG14c2VyX2NoZWNrX21vZGVtX3N0YXR1cyhzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LAorCQkJCXN0cnVjdCBteHNlcl9wb3J0ICpwb3J0LCBpbnQgc3RhdHVzKQogewogCS8qIHVwZGF0ZSBpbnB1dCBsaW5lIGNvdW50ZXJzICovCiAJaWYgKHN0YXR1cyAmIFVBUlRfTVNSX1RFUkkpCkBAIC04NzQsMTAgKzg3MiwxMSBAQAogCQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZwb3J0LT5wb3J0Lm9wZW5fd2FpdCk7CiAJfQogCisJdHR5ID0gdHR5X3BvcnRfdHR5X2dldCgmcG9ydC0+cG9ydCk7CiAJaWYgKHBvcnQtPnBvcnQuZmxhZ3MgJiBBU1lOQ19DVFNfRkxPVykgewotCQlpZiAocG9ydC0+cG9ydC50dHktPmh3X3N0b3BwZWQpIHsKKwkJaWYgKHR0eS0+aHdfc3RvcHBlZCkgewogCQkJaWYgKHN0YXR1cyAmIFVBUlRfTVNSX0NUUykgewotCQkJCXBvcnQtPnBvcnQudHR5LT5od19zdG9wcGVkID0gMDsKKwkJCQl0dHktPmh3X3N0b3BwZWQgPSAwOwogCiAJCQkJaWYgKChwb3J0LT50eXBlICE9IFBPUlRfMTY1NTBBKSAmJgogCQkJCQkJKCFwb3J0LT5ib2FyZC0+Y2hpcF9mbGFnKSkgewpAQCAtODg3LDExICs4ODYsMTEgQEAKIAkJCQkJb3V0Yihwb3J0LT5JRVIsIHBvcnQtPmlvYWRkciArCiAJCQkJCQkJVUFSVF9JRVIpOwogCQkJCX0KLQkJCQl0dHlfd2FrZXVwKHBvcnQtPnBvcnQudHR5KTsKKwkJCQl0dHlfd2FrZXVwKHR0eSk7CiAJCQl9CiAJCX0gZWxzZSB7CiAJCQlpZiAoIShzdGF0dXMgJiBVQVJUX01TUl9DVFMpKSB7Ci0JCQkJcG9ydC0+cG9ydC50dHktPmh3X3N0b3BwZWQgPSAxOworCQkJCXR0eS0+aHdfc3RvcHBlZCA9IDE7CiAJCQkJaWYgKHBvcnQtPnR5cGUgIT0gUE9SVF8xNjU1MEEgJiYKIAkJCQkJCSFwb3J0LT5ib2FyZC0+Y2hpcF9mbGFnKSB7CiAJCQkJCXBvcnQtPklFUiAmPSB+VUFSVF9JRVJfVEhSSTsKQEAgLTkwMyw4ICs5MDIsOSBAQAogCX0KIH0KIAotc3RhdGljIGludCBteHNlcl9zdGFydHVwKHN0cnVjdCBteHNlcl9wb3J0ICppbmZvKQorc3RhdGljIGludCBteHNlcl9zdGFydHVwKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCiB7CisJc3RydWN0IG14c2VyX3BvcnQgKmluZm8gPSB0dHktPmRyaXZlcl9kYXRhOwogCXVuc2lnbmVkIGxvbmcgcGFnZTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCkBAIC05MjEsOCArOTIxLDcgQEAKIAl9CiAKIAlpZiAoIWluZm8tPmlvYWRkciB8fCAhaW5mby0+dHlwZSkgewotCQlpZiAoaW5mby0+cG9ydC50dHkpCi0JCQlzZXRfYml0KFRUWV9JT19FUlJPUiwgJmluZm8tPnBvcnQudHR5LT5mbGFncyk7CisJCXNldF9iaXQoVFRZX0lPX0VSUk9SLCAmdHR5LT5mbGFncyk7CiAJCWZyZWVfcGFnZShwYWdlKTsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW5mby0+c2xvY2ssIGZsYWdzKTsKIAkJcmV0dXJuIDA7CkBAIC05NTIsOCArOTUxLDggQEAKIAlpZiAoaW5iKGluZm8tPmlvYWRkciArIFVBUlRfTFNSKSA9PSAweGZmKSB7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmluZm8tPnNsb2NrLCBmbGFncyk7CiAJCWlmIChjYXBhYmxlKENBUF9TWVNfQURNSU4pKSB7Ci0JCQlpZiAoaW5mby0+cG9ydC50dHkpCi0JCQkJc2V0X2JpdChUVFlfSU9fRVJST1IsICZpbmZvLT5wb3J0LnR0eS0+ZmxhZ3MpOworCQkJaWYgKHR0eSkKKwkJCQlzZXRfYml0KFRUWV9JT19FUlJPUiwgJnR0eS0+ZmxhZ3MpOwogCQkJcmV0dXJuIDA7CiAJCX0gZWxzZQogCQkJcmV0dXJuIC1FTk9ERVY7CkBAIC05OTEsMTQgKzk5MCwxMyBAQAogCSh2b2lkKSBpbmIoaW5mby0+aW9hZGRyICsgVUFSVF9JSVIpOwogCSh2b2lkKSBpbmIoaW5mby0+aW9hZGRyICsgVUFSVF9NU1IpOwogCi0JaWYgKGluZm8tPnBvcnQudHR5KQotCQljbGVhcl9iaXQoVFRZX0lPX0VSUk9SLCAmaW5mby0+cG9ydC50dHktPmZsYWdzKTsKKwljbGVhcl9iaXQoVFRZX0lPX0VSUk9SLCAmdHR5LT5mbGFncyk7CiAJaW5mby0+eG1pdF9jbnQgPSBpbmZvLT54bWl0X2hlYWQgPSBpbmZvLT54bWl0X3RhaWwgPSAwOwogCiAJLyoKIAkgKiBhbmQgc2V0IHRoZSBzcGVlZCBvZiB0aGUgc2VyaWFsIHBvcnQKIAkgKi8KLQlteHNlcl9jaGFuZ2Vfc3BlZWQoaW5mbywgTlVMTCk7CisJbXhzZXJfY2hhbmdlX3NwZWVkKHR0eSwgTlVMTCk7CiAJaW5mby0+cG9ydC5mbGFncyB8PSBBU1lOQ19JTklUSUFMSVpFRDsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpbmZvLT5zbG9jaywgZmxhZ3MpOwogCkBAIC0xMDA5LDggKzEwMDcsOSBAQAogICogVGhpcyByb3V0aW5lIHdpbGwgc2h1dGRvd24gYSBzZXJpYWwgcG9ydDsgaW50ZXJydXB0cyBtYXliZSBkaXNhYmxlZCwgYW5kCiAgKiBEVFIgaXMgZHJvcHBlZCBpZiB0aGUgaGFuZ3VwIG9uIGNsb3NlIHRlcm1pbyBmbGFnIGlzIG9uLgogICovCi1zdGF0aWMgdm9pZCBteHNlcl9zaHV0ZG93bihzdHJ1Y3QgbXhzZXJfcG9ydCAqaW5mbykKK3N0YXRpYyB2b2lkIG14c2VyX3NodXRkb3duKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCiB7CisJc3RydWN0IG14c2VyX3BvcnQgKmluZm8gPSB0dHktPmRyaXZlcl9kYXRhOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlpZiAoIShpbmZvLT5wb3J0LmZsYWdzICYgQVNZTkNfSU5JVElBTElaRUQpKQpAQCAtMTAzNSw3ICsxMDM0LDcgQEAKIAlpbmZvLT5JRVIgPSAwOwogCW91dGIoMHgwMCwgaW5mby0+aW9hZGRyICsgVUFSVF9JRVIpOwogCi0JaWYgKCFpbmZvLT5wb3J0LnR0eSB8fCAoaW5mby0+cG9ydC50dHktPnRlcm1pb3MtPmNfY2ZsYWcgJiBIVVBDTCkpCisJaWYgKHR0eS0+dGVybWlvcy0+Y19jZmxhZyAmIEhVUENMKQogCQlpbmZvLT5NQ1IgJj0gfihVQVJUX01DUl9EVFIgfCBVQVJUX01DUl9SVFMpOwogCW91dGIoaW5mby0+TUNSLCBpbmZvLT5pb2FkZHIgKyBVQVJUX01DUik7CiAKQEAgLTEwNTEsOCArMTA1MCw3IEBACiAJLyogcmVhZCBkYXRhIHBvcnQgdG8gcmVzZXQgdGhpbmdzICovCiAJKHZvaWQpIGluYihpbmZvLT5pb2FkZHIgKyBVQVJUX1JYKTsKIAotCWlmIChpbmZvLT5wb3J0LnR0eSkKLQkJc2V0X2JpdChUVFlfSU9fRVJST1IsICZpbmZvLT5wb3J0LnR0eS0+ZmxhZ3MpOworCXNldF9iaXQoVFRZX0lPX0VSUk9SLCAmdHR5LT5mbGFncyk7CiAKIAlpbmZvLT5wb3J0LmZsYWdzICY9IH5BU1lOQ19JTklUSUFMSVpFRDsKIApAQCAtMTA4NCwxNCArMTA4MiwxNCBAQAogCQlyZXR1cm4gLUVOT0RFVjsKIAogCXR0eS0+ZHJpdmVyX2RhdGEgPSBpbmZvOwotCWluZm8tPnBvcnQudHR5ID0gdHR5OworCXR0eV9wb3J0X3R0eV9zZXQoJmluZm8tPnBvcnQsIHR0eSk7CiAJLyoKIAkgKiBTdGFydCB1cCBzZXJpYWwgcG9ydAogCSAqLwogCXNwaW5fbG9ja19pcnFzYXZlKCZpbmZvLT5zbG9jaywgZmxhZ3MpOwogCWluZm8tPnBvcnQuY291bnQrKzsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpbmZvLT5zbG9jaywgZmxhZ3MpOwotCXJldHZhbCA9IG14c2VyX3N0YXJ0dXAoaW5mbyk7CisJcmV0dmFsID0gbXhzZXJfc3RhcnR1cCh0dHkpOwogCWlmIChyZXR2YWwpCiAJCXJldHVybiByZXR2YWw7CiAKQEAgLTEyMDksMTMgKzEyMDcsMTMgQEAKIAkJCQlicmVhazsKIAkJfQogCX0KLQlteHNlcl9zaHV0ZG93bihpbmZvKTsKKwlteHNlcl9zaHV0ZG93bih0dHkpOwogCiAJbXhzZXJfZmx1c2hfYnVmZmVyKHR0eSk7CiAJdHR5X2xkaXNjX2ZsdXNoKHR0eSk7CiAKIAl0dHktPmNsb3NpbmcgPSAwOwotCWluZm8tPnBvcnQudHR5ID0gTlVMTDsKKwl0dHlfcG9ydF90dHlfc2V0KCZpbmZvLT5wb3J0LCBOVUxMKTsKIAlpZiAoaW5mby0+cG9ydC5ibG9ja2VkX29wZW4pIHsKIAkJaWYgKGluZm8tPnBvcnQuY2xvc2VfZGVsYXkpCiAJCQlzY2hlZHVsZV90aW1lb3V0X2ludGVycnVwdGlibGUoaW5mby0+cG9ydC5jbG9zZV9kZWxheSk7CkBAIC0xMzM3LDEyICsxMzM1LDEzIEBACiAgKiBmcmllbmRzIG9mIG14c2VyX2lvY3RsKCkKICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICovCi1zdGF0aWMgaW50IG14c2VyX2dldF9zZXJpYWxfaW5mbyhzdHJ1Y3QgbXhzZXJfcG9ydCAqaW5mbywKK3N0YXRpYyBpbnQgbXhzZXJfZ2V0X3NlcmlhbF9pbmZvKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksCiAJCXN0cnVjdCBzZXJpYWxfc3RydWN0IF9fdXNlciAqcmV0aW5mbykKIHsKKwlzdHJ1Y3QgbXhzZXJfcG9ydCAqaW5mbyA9IHR0eS0+ZHJpdmVyX2RhdGE7CiAJc3RydWN0IHNlcmlhbF9zdHJ1Y3QgdG1wID0gewogCQkudHlwZSA9IGluZm8tPnR5cGUsCi0JCS5saW5lID0gaW5mby0+cG9ydC50dHktPmluZGV4LAorCQkubGluZSA9IHR0eS0+aW5kZXgsCiAJCS5wb3J0ID0gaW5mby0+aW9hZGRyLAogCQkuaXJxID0gaW5mby0+Ym9hcmQtPmlycSwKIAkJLmZsYWdzID0gaW5mby0+cG9ydC5mbGFncywKQEAgLTEzNTcsOSArMTM1NiwxMCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IG14c2VyX3NldF9zZXJpYWxfaW5mbyhzdHJ1Y3QgbXhzZXJfcG9ydCAqaW5mbywKK3N0YXRpYyBpbnQgbXhzZXJfc2V0X3NlcmlhbF9pbmZvKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksCiAJCXN0cnVjdCBzZXJpYWxfc3RydWN0IF9fdXNlciAqbmV3X2luZm8pCiB7CisJc3RydWN0IG14c2VyX3BvcnQgKmluZm8gPSB0dHktPmRyaXZlcl9kYXRhOwogCXN0cnVjdCBzZXJpYWxfc3RydWN0IG5ld19zZXJpYWw7CiAJc3BlZWRfdCBiYXVkOwogCXVuc2lnbmVkIGxvbmcgc2xfZmxhZ3M7CkBAIC0xMzkzLDE0ICsxMzkzLDE0IEBACiAJCQkJKG5ld19zZXJpYWwuZmxhZ3MgJiBBU1lOQ19GTEFHUykpOwogCQlpbmZvLT5wb3J0LmNsb3NlX2RlbGF5ID0gbmV3X3NlcmlhbC5jbG9zZV9kZWxheSAqIEhaIC8gMTAwOwogCQlpbmZvLT5wb3J0LmNsb3Npbmdfd2FpdCA9IG5ld19zZXJpYWwuY2xvc2luZ193YWl0ICogSFogLyAxMDA7Ci0JCWluZm8tPnBvcnQudHR5LT5sb3dfbGF0ZW5jeSA9Ci0JCQkJKGluZm8tPnBvcnQuZmxhZ3MgJiBBU1lOQ19MT1dfTEFURU5DWSkgPyAxIDogMDsKKwkJdHR5LT5sb3dfbGF0ZW5jeSA9IChpbmZvLT5wb3J0LmZsYWdzICYgQVNZTkNfTE9XX0xBVEVOQ1kpCisJCQkJCQkJCT8gMSA6IDA7CiAJCWlmICgoaW5mby0+cG9ydC5mbGFncyAmIEFTWU5DX1NQRF9NQVNLKSA9PSBBU1lOQ19TUERfQ1VTVCAmJgogCQkJCShuZXdfc2VyaWFsLmJhdWRfYmFzZSAhPSBpbmZvLT5iYXVkX2Jhc2UgfHwKIAkJCQluZXdfc2VyaWFsLmN1c3RvbV9kaXZpc29yICE9CiAJCQkJaW5mby0+Y3VzdG9tX2Rpdmlzb3IpKSB7CiAJCQliYXVkID0gbmV3X3NlcmlhbC5iYXVkX2Jhc2UgLyBuZXdfc2VyaWFsLmN1c3RvbV9kaXZpc29yOwotCQkJdHR5X2VuY29kZV9iYXVkX3JhdGUoaW5mby0+cG9ydC50dHksIGJhdWQsIGJhdWQpOworCQkJdHR5X2VuY29kZV9iYXVkX3JhdGUodHR5LCBiYXVkLCBiYXVkKTsKIAkJfQogCX0KIApAQCAtMTQxMSwxMSArMTQxMSwxMSBAQAogCWlmIChpbmZvLT5wb3J0LmZsYWdzICYgQVNZTkNfSU5JVElBTElaRUQpIHsKIAkJaWYgKGZsYWdzICE9IChpbmZvLT5wb3J0LmZsYWdzICYgQVNZTkNfU1BEX01BU0spKSB7CiAJCQlzcGluX2xvY2tfaXJxc2F2ZSgmaW5mby0+c2xvY2ssIHNsX2ZsYWdzKTsKLQkJCW14c2VyX2NoYW5nZV9zcGVlZChpbmZvLCBOVUxMKTsKKwkJCW14c2VyX2NoYW5nZV9zcGVlZCh0dHksIE5VTEwpOwogCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW5mby0+c2xvY2ssIHNsX2ZsYWdzKTsKIAkJfQogCX0gZWxzZQotCQlyZXR2YWwgPSBteHNlcl9zdGFydHVwKGluZm8pOworCQlyZXR2YWwgPSBteHNlcl9zdGFydHVwKHR0eSk7CiAKIAlyZXR1cm4gcmV0dmFsOwogfQpAQCAtMTQ2MSw3ICsxNDYxLDcgQEAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmaW5mby0+c2xvY2ssIGZsYWdzKTsKIAlzdGF0dXMgPSBpbmIoaW5mby0+aW9hZGRyICsgVUFSVF9NU1IpOwogCWlmIChzdGF0dXMgJiBVQVJUX01TUl9BTllfREVMVEEpCi0JCW14c2VyX2NoZWNrX21vZGVtX3N0YXR1cyhpbmZvLCBzdGF0dXMpOworCQlteHNlcl9jaGVja19tb2RlbV9zdGF0dXModHR5LCBpbmZvLCBzdGF0dXMpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmluZm8tPnNsb2NrLCBmbGFncyk7CiAJcmV0dXJuICgoY29udHJvbCAmIFVBUlRfTUNSX1JUUykgPyBUSU9DTV9SVFMgOiAwKSB8CiAJCSAgICAoKGNvbnRyb2wgJiBVQVJUX01DUl9EVFIpID8gVElPQ01fRFRSIDogMCkgfApAQCAtMTYwNiw2ICsxNjA2LDcgQEAKIHN0YXRpYyBpbnQgbXhzZXJfaW9jdGxfc3BlY2lhbCh1bnNpZ25lZCBpbnQgY21kLCB2b2lkIF9fdXNlciAqYXJncCkKIHsKIAlzdHJ1Y3QgbXhzZXJfcG9ydCAqcG9ydDsKKwlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5OwogCWludCByZXN1bHQsIHN0YXR1czsKIAl1bnNpZ25lZCBpbnQgaSwgajsKIAlpbnQgcmV0ID0gMDsKQEAgLTE2NDMsMTIgKzE2NDQsMTQgQEAKIAogCQkJCWlmICghcG9ydC0+aW9hZGRyKQogCQkJCQlnb3RvIGNvcHk7CisJCQkJCisJCQkJdHR5ID0gdHR5X3BvcnRfdHR5X2dldCgmcG9ydC0+cG9ydCk7CiAKLQkJCQlpZiAoIXBvcnQtPnBvcnQudHR5IHx8ICFwb3J0LT5wb3J0LnR0eS0+dGVybWlvcykKKwkJCQlpZiAoIXR0eSB8fCAhdHR5LT50ZXJtaW9zKQogCQkJCQltcy5jZmxhZyA9IHBvcnQtPm5vcm1hbF90ZXJtaW9zLmNfY2ZsYWc7CiAJCQkJZWxzZQotCQkJCQltcy5jZmxhZyA9IHBvcnQtPnBvcnQudHR5LT50ZXJtaW9zLT5jX2NmbGFnOwotCisJCQkJCW1zLmNmbGFnID0gdHR5LT50ZXJtaW9zLT5jX2NmbGFnOworCQkJCXR0eV9rcmVmX3B1dCh0dHkpOwogCQkJCXN0YXR1cyA9IGluYihwb3J0LT5pb2FkZHIgKyBVQVJUX01TUik7CiAJCQkJaWYgKHN0YXR1cyAmIFVBUlRfTVNSX0RDRCkKIAkJCQkJbXMuZGNkID0gMTsKQEAgLTE3MDQsMTUgKzE3MDcsMTggQEAKIAkJCQltZS0+dXBfdHhjbnRbcF0gPSBwb3J0LT5tb25fZGF0YS51cF90eGNudDsKIAkJCQltZS0+bW9kZW1fc3RhdHVzW3BdID0KIAkJCQkJcG9ydC0+bW9uX2RhdGEubW9kZW1fc3RhdHVzOwotCQkJCW1lLT5iYXVkcmF0ZVtwXSA9IHR0eV9nZXRfYmF1ZF9yYXRlKHBvcnQtPnBvcnQudHR5KTsKKwkJCQl0dHkgPSB0dHlfcG9ydF90dHlfZ2V0KCZwb3J0LT5wb3J0KTsKIAotCQkJCWlmICghcG9ydC0+cG9ydC50dHkgfHwgIXBvcnQtPnBvcnQudHR5LT50ZXJtaW9zKSB7CisJCQkJaWYgKCF0dHkgfHwgIXR0eS0+dGVybWlvcykgewogCQkJCQljZmxhZyA9IHBvcnQtPm5vcm1hbF90ZXJtaW9zLmNfY2ZsYWc7CiAJCQkJCWlmbGFnID0gcG9ydC0+bm9ybWFsX3Rlcm1pb3MuY19pZmxhZzsKKwkJCQkJbWUtPmJhdWRyYXRlW3BdID0gdHR5X3Rlcm1pb3NfYmF1ZF9yYXRlKCZwb3J0LT5ub3JtYWxfdGVybWlvcyk7CiAJCQkJfSBlbHNlIHsKLQkJCQkJY2ZsYWcgPSBwb3J0LT5wb3J0LnR0eS0+dGVybWlvcy0+Y19jZmxhZzsKLQkJCQkJaWZsYWcgPSBwb3J0LT5wb3J0LnR0eS0+dGVybWlvcy0+Y19pZmxhZzsKKwkJCQkJY2ZsYWcgPSB0dHktPnRlcm1pb3MtPmNfY2ZsYWc7CisJCQkJCWlmbGFnID0gdHR5LT50ZXJtaW9zLT5jX2lmbGFnOworCQkJCQltZS0+YmF1ZHJhdGVbcF0gPSB0dHlfZ2V0X2JhdWRfcmF0ZSh0dHkpOwogCQkJCX0KKwkJCQl0dHlfa3JlZl9wdXQodHR5KTsKIAogCQkJCW1lLT5kYXRhYml0c1twXSA9IGNmbGFnICYgQ1NJWkU7CiAJCQkJbWUtPnN0b3BiaXRzW3BdID0gY2ZsYWcgJiBDU1RPUEI7CkBAIC0xODIyLDEyICsxODI4LDEyIEBACiAJc3dpdGNoIChjbWQpIHsKIAljYXNlIFRJT0NHU0VSSUFMOgogCQlsb2NrX2tlcm5lbCgpOwotCQlyZXR2YWwgPSBteHNlcl9nZXRfc2VyaWFsX2luZm8oaW5mbywgYXJncCk7CisJCXJldHZhbCA9IG14c2VyX2dldF9zZXJpYWxfaW5mbyh0dHksIGFyZ3ApOwogCQl1bmxvY2tfa2VybmVsKCk7CiAJCXJldHVybiByZXR2YWw7CiAJY2FzZSBUSU9DU1NFUklBTDoKIAkJbG9ja19rZXJuZWwoKTsKLQkJcmV0dmFsID0gbXhzZXJfc2V0X3NlcmlhbF9pbmZvKGluZm8sIGFyZ3ApOworCQlyZXR2YWwgPSBteHNlcl9zZXRfc2VyaWFsX2luZm8odHR5LCBhcmdwKTsKIAkJdW5sb2NrX2tlcm5lbCgpOwogCQlyZXR1cm4gcmV0dmFsOwogCWNhc2UgVElPQ1NFUkdFVExTUjoJLyogR2V0IGxpbmUgc3RhdHVzIHJlZ2lzdGVyICovCkBAIC0xODk2LDcgKzE5MDIsNyBAQAogCiAJCWxvY2tfa2VybmVsKCk7CiAJCXN0YXR1cyA9IG14c2VyX2dldF9tc3IoaW5mby0+aW9hZGRyLCAxLCB0dHktPmluZGV4KTsKLQkJbXhzZXJfY2hlY2tfbW9kZW1fc3RhdHVzKGluZm8sIHN0YXR1cyk7CisJCW14c2VyX2NoZWNrX21vZGVtX3N0YXR1cyh0dHksIGluZm8sIHN0YXR1cyk7CiAKIAkJbWNyID0gaW5iKGluZm8tPmlvYWRkciArIFVBUlRfTUNSKTsKIAkJaWYgKG1jciAmIE1PWEFfTVVTVF9NQ1JfWE9OX0ZMQUcpCkBAIC0xOTA5LDcgKzE5MTUsNyBAQAogCQllbHNlCiAJCQlpbmZvLT5tb25fZGF0YS5ob2xkX3JlYXNvbiB8PSBOUFBJX05PVElGWV9YT0ZGWEVOVDsKIAotCQlpZiAoaW5mby0+cG9ydC50dHktPmh3X3N0b3BwZWQpCisJCWlmICh0dHktPmh3X3N0b3BwZWQpCiAJCQlpbmZvLT5tb25fZGF0YS5ob2xkX3JlYXNvbiB8PSBOUFBJX05PVElGWV9DVFNIT0xEOwogCQllbHNlCiAJCQlpbmZvLT5tb25fZGF0YS5ob2xkX3JlYXNvbiAmPSB+TlBQSV9OT1RJRllfQ1RTSE9MRDsKQEAgLTE5NTgsNyArMTk2NCw3IEBACiAJCX0KIAl9CiAKLQlpZiAoaW5mby0+cG9ydC50dHktPnRlcm1pb3MtPmNfY2ZsYWcgJiBDUlRTQ1RTKSB7CisJaWYgKHR0eS0+dGVybWlvcy0+Y19jZmxhZyAmIENSVFNDVFMpIHsKIAkJaW5mby0+TUNSICY9IH5VQVJUX01DUl9SVFM7CiAJCW91dGIoaW5mby0+TUNSLCBpbmZvLT5pb2FkZHIgKyBVQVJUX01DUik7CiAJfQpAQCAtMTk5NSw3ICsyMDAxLDcgQEAKIAkJfQogCX0KIAotCWlmIChpbmZvLT5wb3J0LnR0eS0+dGVybWlvcy0+Y19jZmxhZyAmIENSVFNDVFMpIHsKKwlpZiAodHR5LT50ZXJtaW9zLT5jX2NmbGFnICYgQ1JUU0NUUykgewogCQlpbmZvLT5NQ1IgfD0gVUFSVF9NQ1JfUlRTOwogCQlvdXRiKGluZm8tPk1DUiwgaW5mby0+aW9hZGRyICsgVUFSVF9NQ1IpOwogCX0KQEAgLTIwNDAsNyArMjA0Niw3IEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZpbmZvLT5zbG9jaywgZmxhZ3MpOwotCW14c2VyX2NoYW5nZV9zcGVlZChpbmZvLCBvbGRfdGVybWlvcyk7CisJbXhzZXJfY2hhbmdlX3NwZWVkKHR0eSwgb2xkX3Rlcm1pb3MpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmluZm8tPnNsb2NrLCBmbGFncyk7CiAKIAlpZiAoKG9sZF90ZXJtaW9zLT5jX2NmbGFnICYgQ1JUU0NUUykgJiYKQEAgLTIxMzgsMTAgKzIxNDQsMTAgQEAKIAlzdHJ1Y3QgbXhzZXJfcG9ydCAqaW5mbyA9IHR0eS0+ZHJpdmVyX2RhdGE7CiAKIAlteHNlcl9mbHVzaF9idWZmZXIodHR5KTsKLQlteHNlcl9zaHV0ZG93bihpbmZvKTsKKwlteHNlcl9zaHV0ZG93bih0dHkpOwogCWluZm8tPnBvcnQuY291bnQgPSAwOwogCWluZm8tPnBvcnQuZmxhZ3MgJj0gfkFTWU5DX05PUk1BTF9BQ1RJVkU7Ci0JaW5mby0+cG9ydC50dHkgPSBOVUxMOworCXR0eV9wb3J0X3R0eV9zZXQoJmluZm8tPnBvcnQsIE5VTEwpOwogCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmaW5mby0+cG9ydC5vcGVuX3dhaXQpOwogfQogCkBAIC0yMTY0LDkgKzIxNzAsOSBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBteHNlcl9yZWNlaXZlX2NoYXJzKHN0cnVjdCBteHNlcl9wb3J0ICpwb3J0LCBpbnQgKnN0YXR1cykKK3N0YXRpYyB2b2lkIG14c2VyX3JlY2VpdmVfY2hhcnMoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwKKwkJCQlzdHJ1Y3QgbXhzZXJfcG9ydCAqcG9ydCwgaW50ICpzdGF0dXMpCiB7Ci0Jc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSA9IHBvcnQtPnBvcnQudHR5OwogCXVuc2lnbmVkIGNoYXIgY2gsIGdkbDsKIAlpbnQgaWdub3JlZCA9IDA7CiAJaW50IGNudCA9IDA7CkBAIC0yMTc0LDkgKzIxODAsOCBAQAogCWludCBtYXggPSAyNTY7CiAKIAlyZWN2X3Jvb20gPSB0dHktPnJlY2VpdmVfcm9vbTsKLQlpZiAoKHJlY3Zfcm9vbSA9PSAwKSAmJiAoIXBvcnQtPmxkaXNjX3N0b3BfcngpKQorCWlmIChyZWN2X3Jvb20gPT0gMCAmJiAhcG9ydC0+bGRpc2Nfc3RvcF9yeCkKIAkJbXhzZXJfc3RvcHJ4KHR0eSk7Ci0KIAlpZiAocG9ydC0+Ym9hcmQtPmNoaXBfZmxhZyAhPSBNT1hBX09USEVSX1VBUlQpIHsKIAogCQlpZiAoKnN0YXR1cyAmIFVBUlRfTFNSX1NQRUNJQUwpCkBAIC0yMjUzLDcgKzIyNTgsNyBAQAogCX0gd2hpbGUgKCpzdGF0dXMgJiBVQVJUX0xTUl9EUik7CiAKIGVuZF9pbnRyOgotCW14dmFyX2xvZy5yeGNudFtwb3J0LT5wb3J0LnR0eS0+aW5kZXhdICs9IGNudDsKKwlteHZhcl9sb2cucnhjbnRbdHR5LT5pbmRleF0gKz0gY250OwogCXBvcnQtPm1vbl9kYXRhLnJ4Y250ICs9IGNudDsKIAlwb3J0LT5tb25fZGF0YS51cF9yeGNudCArPSBjbnQ7CiAKQEAgLTIyNjcsMTQgKzIyNzIsMTQgQEAKIAlzcGluX2xvY2soJnBvcnQtPnNsb2NrKTsKIH0KIAotc3RhdGljIHZvaWQgbXhzZXJfdHJhbnNtaXRfY2hhcnMoc3RydWN0IG14c2VyX3BvcnQgKnBvcnQpCitzdGF0aWMgdm9pZCBteHNlcl90cmFuc21pdF9jaGFycyhzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgbXhzZXJfcG9ydCAqcG9ydCkKIHsKIAlpbnQgY291bnQsIGNudDsKIAogCWlmIChwb3J0LT54X2NoYXIpIHsKIAkJb3V0Yihwb3J0LT54X2NoYXIsIHBvcnQtPmlvYWRkciArIFVBUlRfVFgpOwogCQlwb3J0LT54X2NoYXIgPSAwOwotCQlteHZhcl9sb2cudHhjbnRbcG9ydC0+cG9ydC50dHktPmluZGV4XSsrOworCQlteHZhcl9sb2cudHhjbnRbdHR5LT5pbmRleF0rKzsKIAkJcG9ydC0+bW9uX2RhdGEudHhjbnQrKzsKIAkJcG9ydC0+bW9uX2RhdGEudXBfdHhjbnQrKzsKIAkJcG9ydC0+aWNvdW50LnR4Kys7CkBAIC0yMjg0LDggKzIyODksOCBAQAogCWlmIChwb3J0LT5wb3J0LnhtaXRfYnVmID09IE5VTEwpCiAJCXJldHVybjsKIAotCWlmICgocG9ydC0+eG1pdF9jbnQgPD0gMCkgfHwgcG9ydC0+cG9ydC50dHktPnN0b3BwZWQgfHwKLQkJCShwb3J0LT5wb3J0LnR0eS0+aHdfc3RvcHBlZCAmJgorCWlmIChwb3J0LT54bWl0X2NudCA8PSAwIHx8IHR0eS0+c3RvcHBlZCB8fAorCQkJKHR0eS0+aHdfc3RvcHBlZCAmJgogCQkJKHBvcnQtPnR5cGUgIT0gUE9SVF8xNjU1MEEpICYmCiAJCQkoIXBvcnQtPmJvYXJkLT5jaGlwX2ZsYWcpKSkgewogCQlwb3J0LT5JRVIgJj0gflVBUlRfSUVSX1RIUkk7CkBAIC0yMzAyLDE0ICsyMzA3LDE0IEBACiAJCWlmICgtLXBvcnQtPnhtaXRfY250IDw9IDApCiAJCQlicmVhazsKIAl9IHdoaWxlICgtLWNvdW50ID4gMCk7Ci0JbXh2YXJfbG9nLnR4Y250W3BvcnQtPnBvcnQudHR5LT5pbmRleF0gKz0gKGNudCAtIHBvcnQtPnhtaXRfY250KTsKKwlteHZhcl9sb2cudHhjbnRbdHR5LT5pbmRleF0gKz0gKGNudCAtIHBvcnQtPnhtaXRfY250KTsKIAogCXBvcnQtPm1vbl9kYXRhLnR4Y250ICs9IChjbnQgLSBwb3J0LT54bWl0X2NudCk7CiAJcG9ydC0+bW9uX2RhdGEudXBfdHhjbnQgKz0gKGNudCAtIHBvcnQtPnhtaXRfY250KTsKIAlwb3J0LT5pY291bnQudHggKz0gKGNudCAtIHBvcnQtPnhtaXRfY250KTsKIAotCWlmIChwb3J0LT54bWl0X2NudCA8IFdBS0VVUF9DSEFSUykKLQkJdHR5X3dha2V1cChwb3J0LT5wb3J0LnR0eSk7CisJaWYgKHBvcnQtPnhtaXRfY250IDwgV0FLRVVQX0NIQVJTICYmIHR0eSkKKwkJdHR5X3dha2V1cCh0dHkpOwogCiAJaWYgKHBvcnQtPnhtaXRfY250IDw9IDApIHsKIAkJcG9ydC0+SUVSICY9IH5VQVJUX0lFUl9USFJJOwpAQCAtMjMyOCw2ICsyMzMzLDcgQEAKIAlpbnQgbWF4LCBpcnFiaXRzLCBiaXRzLCBtc3I7CiAJdW5zaWduZWQgaW50IGludF9jbnQsIHBhc3NfY291bnRlciA9IDA7CiAJaW50IGhhbmRsZWQgPSBJUlFfTk9ORTsKKwlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5OwogCiAJZm9yIChpID0gMDsgaSA8IE1YU0VSX0JPQVJEUzsgaSsrKQogCQlpZiAoZGV2X2lkID09ICZteHNlcl9ib2FyZHNbaV0pIHsKQEAgLTIzNjAsMTMgKzIzNjYsMTUgQEAKIAkJCQlpZiAoaWlyICYgVUFSVF9JSVJfTk9fSU5UKQogCQkJCQlicmVhazsKIAkJCQlpaXIgJj0gTU9YQV9NVVNUX0lJUl9NQVNLOwotCQkJCWlmICghcG9ydC0+cG9ydC50dHkgfHwKKwkJCQl0dHkgPSB0dHlfcG9ydF90dHlfZ2V0KCZwb3J0LT5wb3J0KTsKKwkJCQlpZiAoIXR0eSB8fAogCQkJCQkJKHBvcnQtPnBvcnQuZmxhZ3MgJiBBU1lOQ19DTE9TSU5HKSB8fAogCQkJCQkJIShwb3J0LT5wb3J0LmZsYWdzICYKIAkJCQkJCQlBU1lOQ19JTklUSUFMSVpFRCkpIHsKIAkJCQkJc3RhdHVzID0gaW5iKHBvcnQtPmlvYWRkciArIFVBUlRfTFNSKTsKIAkJCQkJb3V0YigweDI3LCBwb3J0LT5pb2FkZHIgKyBVQVJUX0ZDUik7CiAJCQkJCWluYihwb3J0LT5pb2FkZHIgKyBVQVJUX01TUik7CisJCQkJCXR0eV9rcmVmX3B1dCh0dHkpOwogCQkJCQlicmVhazsKIAkJCQl9CiAKQEAgLTIzODcsMjcgKzIzOTUsMjggQEAKIAkJCQkJICAgIGlpciA9PSBNT1hBX01VU1RfSUlSX1JEQSB8fAogCQkJCQkgICAgaWlyID09IE1PWEFfTVVTVF9JSVJfUlRPIHx8CiAJCQkJCSAgICBpaXIgPT0gTU9YQV9NVVNUX0lJUl9MU1IpCi0JCQkJCQlteHNlcl9yZWNlaXZlX2NoYXJzKHBvcnQsCisJCQkJCQlteHNlcl9yZWNlaXZlX2NoYXJzKHR0eSwgcG9ydCwKIAkJCQkJCQkJJnN0YXR1cyk7CiAKIAkJCQl9IGVsc2UgewogCQkJCQlzdGF0dXMgJj0gcG9ydC0+cmVhZF9zdGF0dXNfbWFzazsKIAkJCQkJaWYgKHN0YXR1cyAmIFVBUlRfTFNSX0RSKQotCQkJCQkJbXhzZXJfcmVjZWl2ZV9jaGFycyhwb3J0LAorCQkJCQkJbXhzZXJfcmVjZWl2ZV9jaGFycyh0dHksIHBvcnQsCiAJCQkJCQkJCSZzdGF0dXMpOwogCQkJCX0KIAkJCQltc3IgPSBpbmIocG9ydC0+aW9hZGRyICsgVUFSVF9NU1IpOwogCQkJCWlmIChtc3IgJiBVQVJUX01TUl9BTllfREVMVEEpCi0JCQkJCW14c2VyX2NoZWNrX21vZGVtX3N0YXR1cyhwb3J0LCBtc3IpOworCQkJCQlteHNlcl9jaGVja19tb2RlbV9zdGF0dXModHR5LCBwb3J0LCBtc3IpOwogCiAJCQkJaWYgKHBvcnQtPmJvYXJkLT5jaGlwX2ZsYWcpIHsKIAkJCQkJaWYgKGlpciA9PSAweDAyICYmIChzdGF0dXMgJgogCQkJCQkJCQlVQVJUX0xTUl9USFJFKSkKLQkJCQkJCW14c2VyX3RyYW5zbWl0X2NoYXJzKHBvcnQpOworCQkJCQkJbXhzZXJfdHJhbnNtaXRfY2hhcnModHR5LCBwb3J0KTsKIAkJCQl9IGVsc2UgewogCQkJCQlpZiAoc3RhdHVzICYgVUFSVF9MU1JfVEhSRSkKLQkJCQkJCW14c2VyX3RyYW5zbWl0X2NoYXJzKHBvcnQpOworCQkJCQkJbXhzZXJfdHJhbnNtaXRfY2hhcnModHR5LCBwb3J0KTsKIAkJCQl9CisJCQkJdHR5X2tyZWZfcHV0KHR0eSk7CiAJCQl9IHdoaWxlIChpbnRfY250KysgPCBNWFNFUl9JU1JfUEFTU19MSU1JVCk7CiAJCQlzcGluX3VubG9jaygmcG9ydC0+c2xvY2spOwogCQl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvbl9oZGxjLmMgYi9kcml2ZXJzL2NoYXIvbl9oZGxjLmMKaW5kZXggNjllYzYzOS4uYmFjYjNlMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL25faGRsYy5jCisrKyBiL2RyaXZlcnMvY2hhci9uX2hkbGMuYwpAQCAtNzY0LDcgKzc2NCw3IEBACiAJCWJyZWFrOwogCiAJZGVmYXVsdDoKLQkJZXJyb3IgPSBuX3R0eV9pb2N0bCAodHR5LCBmaWxlLCBjbWQsIGFyZyk7CisJCWVycm9yID0gbl90dHlfaW9jdGxfaGVscGVyKHR0eSwgZmlsZSwgY21kLCBhcmcpOwogCQlicmVhazsKIAl9CiAJcmV0dXJuIGVycm9yOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL25fcjM5NjQuYyBiL2RyaXZlcnMvY2hhci9uX3IzOTY0LmMKaW5kZXggYWUzNzdhYTQuLjRhODIxNWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9uX3IzOTY0LmMKKysrIGIvZHJpdmVycy9jaGFyL25fcjM5NjQuYwpAQCAtMzcyLDE0ICszNzIsOCBAQAogc3RhdGljIHZvaWQgcHV0X2NoYXIoc3RydWN0IHIzOTY0X2luZm8gKnBJbmZvLCB1bnNpZ25lZCBjaGFyIGNoKQogewogCXN0cnVjdCB0dHlfc3RydWN0ICp0dHkgPSBwSW5mby0+dHR5OwotCi0JaWYgKHR0eSA9PSBOVUxMKQotCQlyZXR1cm47Ci0KIAkvKiBGSVhNRTogcHV0X2NoYXIgc2hvdWxkIG5vdCBiZSBjYWxsZWQgZnJvbSBhbiBJUlEgKi8KLQlpZiAodHR5LT5vcHMtPnB1dF9jaGFyKSB7Ci0JCXR0eS0+b3BzLT5wdXRfY2hhcih0dHksIGNoKTsKLQl9CisJdHR5X3B1dF9jaGFyKHR0eSwgY2gpOwogCXBJbmZvLT5iY2MgXj0gY2g7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9uX3R0eS5jIGIvZHJpdmVycy9jaGFyL25fdHR5LmMKaW5kZXggNzA4YzJiMS4uZWZiZmU5NjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9uX3R0eS5jCisrKyBiL2RyaXZlcnMvY2hhci9uX3R0eS5jCkBAIC0yNiw3ICsyNiw3IEBACiAgKgogICogMjAwMi8wMy8xOCAgIEltcGxlbWVudGVkIG5fdHR5X3dha2V1cCB0byBzZW5kIFNJR0lPIFBPTExfT1VUcyB0bwogICoJCXdhaXRpbmcgd3JpdGluZyBwcm9jZXNzZXMtU2FwYW4gQmhhdGlhIDxzYXBhbkBjb3Jld2Fycy5vcmc+LgotICoJCUFsc28gZml4ZWQgYSBidWcgaW4gQkxPQ0tJTkcgbW9kZSB3aGVyZSB3cml0ZV9jaGFuIHJldHVybnMKKyAqCQlBbHNvIGZpeGVkIGEgYnVnIGluIEJMT0NLSU5HIG1vZGUgd2hlcmUgbl90dHlfd3JpdGUgcmV0dXJucwogICoJCUVBR0FJTgogICovCiAKQEAgLTk5LDYgKzk5LDcgQEAKIAogc3RhdGljIHZvaWQgbl90dHlfc2V0X3Jvb20oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKIHsKKwkvKiB0dHktPnJlYWRfY250IGlzIG5vdCByZWFkIGxvY2tlZCA/ICovCiAJaW50CWxlZnQgPSBOX1RUWV9CVUZfU0laRSAtIHR0eS0+cmVhZF9jbnQgLSAxOwogCiAJLyoKQEAgLTEyMSw2ICsxMjIsMTYgQEAKIAl9CiB9CiAKKy8qKgorICoJcHV0X3R0eV9xdWV1ZQkJLQlhZGQgY2hhcmFjdGVyIHRvIHR0eQorICoJQGM6IGNoYXJhY3RlcgorICoJQHR0eTogdHR5IGRldmljZQorICoKKyAqCUFkZCBhIGNoYXJhY3RlciB0byB0aGUgdHR5IHJlYWRfYnVmIHF1ZXVlLiBUaGlzIGlzIGRvbmUgdW5kZXIgdGhlCisgKglyZWFkX2xvY2sgdG8gc2VyaWFsaXplIGNoYXJhY3RlciBhZGRpdGlvbiBhbmQgYWxzbyB0byBwcm90ZWN0IHVzCisgKglhZ2FpbnN0IHBhcmFsbGVsIHJlYWRzIG9yIGZsdXNoZXMKKyAqLworCiBzdGF0aWMgdm9pZCBwdXRfdHR5X3F1ZXVlKHVuc2lnbmVkIGNoYXIgYywgc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwpAQCAtMTM3LDE0ICsxNDgsMTEgQEAKICAqCWNoZWNrX3VudGhyb3R0bGUJLQlhbGxvdyBuZXcgcmVjZWl2ZSBkYXRhCiAgKglAdHR5OyB0dHkgZGV2aWNlCiAgKgotICoJQ2hlY2sgd2hldGhlciB0byBjYWxsIHRoZSBkcml2ZXIudW50aHJvdHRsZSBmdW5jdGlvbi4KLSAqCVdlIHRlc3QgdGhlIFRUWV9USFJPVFRMRUQgYml0IGZpcnN0IHNvIHRoYXQgaXQgYWx3YXlzCi0gKglpbmRpY2F0ZXMgdGhlIGN1cnJlbnQgc3RhdGUuIFRoZSBkZWNpc2lvbiBhYm91dCB3aGV0aGVyCi0gKglpdCBpcyB3b3J0aCBhbGxvd2luZyBtb3JlIGlucHV0IGhhcyBiZWVuIHRha2VuIGJ5IHRoZSBjYWxsZXIuCisgKglDaGVjayB3aGV0aGVyIHRvIGNhbGwgdGhlIGRyaXZlciB1bnRocm90dGxlIGZ1bmN0aW9ucworICoKICAqCUNhbiBzbGVlcCwgbWF5IGJlIGNhbGxlZCB1bmRlciB0aGUgYXRvbWljX3JlYWRfbG9jayBtdXRleCBidXQKICAqCXRoaXMgaXMgbm90IGd1YXJhbnRlZWQuCiAgKi8KLQogc3RhdGljIHZvaWQgY2hlY2tfdW50aHJvdHRsZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQogewogCWlmICh0dHktPmNvdW50KQpAQCAtMTU4LDYgKzE2Niw4IEBACiAgKglSZXNldCB0aGUgcmVhZCBidWZmZXIgY291bnRlcnMsIGNsZWFyIHRoZSBmbGFncywKICAqCWFuZCBtYWtlIHN1cmUgdGhlIGRyaXZlciBpcyB1bnRocm90dGxlZC4gQ2FsbGVkCiAgKglmcm9tIG5fdHR5X29wZW4oKSBhbmQgbl90dHlfZmx1c2hfYnVmZmVyKCkuCisgKgorICoJTG9ja2luZzogdHR5X3JlYWRfbG9jayBmb3IgcmVhZCBmaWVsZHMuCiAgKi8KIHN0YXRpYyB2b2lkIHJlc2V0X2J1ZmZlcl9mbGFncyhzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQogewpAQCAtMTgxLDcgKzE5MSw3IEBACiAgKglhdCBoYW5ndXApIG9yIHdoZW4gdGhlIE5fVFRZIGxpbmUgZGlzY2lwbGluZSBpbnRlcm5hbGx5IGhhcyB0bwogICoJY2xlYW4gdGhlIHBlbmRpbmcgcXVldWUgKGZvciBleGFtcGxlIHNvbWUgc2lnbmFscykuCiAgKgotICoJTG9ja2luZzogY3RybF9sb2NrCisgKglMb2NraW5nOiBjdHJsX2xvY2ssIHJlYWRfbG9jay4KICAqLwogCiBzdGF0aWMgdm9pZCBuX3R0eV9mbHVzaF9idWZmZXIoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKQEAgLTIwNyw2ICsyMTcsOCBAQAogICoKICAqCVJlcG9ydCB0aGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgYnVmZmVyZWQgdG8gYmUgZGVsaXZlcmVkIHRvIHVzZXIKICAqCWF0IHRoaXMgaW5zdGFudCBpbiB0aW1lLgorICoKKyAqCUxvY2tpbmc6IHJlYWRfbG9jawogICovCiAKIHN0YXRpYyBzc2l6ZV90IG5fdHR5X2NoYXJzX2luX2J1ZmZlcihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQpAQCAtMzQ2LDcgKzM1OCw3IEBACiAgKgl0aGUgc2ltcGxlIGNhc2VzIG5vcm1hbGx5IGZvdW5kIGFuZCBoZWxwcyB0byBnZW5lcmF0ZSBibG9ja3Mgb2YKICAqCXN5bWJvbHMgZm9yIHRoZSBjb25zb2xlIGRyaXZlciBhbmQgdGh1cyBpbXByb3ZlIHBlcmZvcm1hbmNlLgogICoKLSAqCUNhbGxlZCBmcm9tIHdyaXRlX2NoYW4gdW5kZXIgdGhlIHR0eSBsYXllciB3cml0ZSBsb2NrLiBSZWxpZXMKKyAqCUNhbGxlZCBmcm9tIG5fdHR5X3dyaXRlIHVuZGVyIHRoZSB0dHkgbGF5ZXIgd3JpdGUgbG9jay4gUmVsaWVzCiAgKglvbiBsb2NrX2tlcm5lbCBmb3IgdGhlIHR0eS0+Y29sdW1uIHN0YXRlLgogICovCiAKQEAgLTQxMCw2ICs0MjIsOCBAQAogICoKICAqCUVjaG8gdXNlciBpbnB1dCBiYWNrIG9udG8gdGhlIHNjcmVlbi4gVGhpcyBtdXN0IGJlIGNhbGxlZCBvbmx5IHdoZW4KICAqCUxfRUNITyh0dHkpIGlzIHRydWUuIENhbGxlZCBmcm9tIHRoZSBkcml2ZXIgcmVjZWl2ZV9idWYgcGF0aC4KKyAqCisgKglSZWxpZXMgb24gQktMIGZvciB0dHkgY29sdW1uIGxvY2tpbmcKICAqLwogCiBzdGF0aWMgdm9pZCBlY2hvX2NoYXIodW5zaWduZWQgY2hhciBjLCBzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQpAQCAtNDIyLDYgKzQzNiwxMiBAQAogCQlvcG9zdChjLCB0dHkpOwogfQogCisvKioKKyAqCWZpbnNoX2VyYXNpbmcJCS0JY29tcGxldGUgZXJhc2UKKyAqCUB0dHk6IHR0eSBkb2luZyB0aGUgZXJhc2UKKyAqCisgKglSZWxpZXMgb24gQktMIGZvciB0dHkgY29sdW1uIGxvY2tpbmcKKyAqLwogc3RhdGljIGlubGluZSB2b2lkIGZpbmlzaF9lcmFzaW5nKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCiB7CiAJaWYgKHR0eS0+ZXJhc2luZykgewpAQCAtNDM5LDYgKzQ1OSw4IEBACiAgKglQZXJmb3JtIGVyYXNlIGFuZCBuZWNlc3Nhcnkgb3V0cHV0IHdoZW4gYW4gZXJhc2UgY2hhcmFjdGVyIGlzCiAgKglwcmVzZW50IGluIHRoZSBzdHJlYW0gZnJvbSB0aGUgZHJpdmVyIGxheWVyLiBIYW5kbGVzIHRoZSBjb21wbGV4aXRpZXMKICAqCW9mIFVURi04IG11bHRpYnl0ZSBzeW1ib2xzLgorICoKKyAqCUxvY2tpbmc6IHJlYWRfbG9jayBmb3IgdHR5IGJ1ZmZlcnMsIEJLTCBmb3IgY29sdW1uL2VyYXNpbmcgc3RhdGUKICAqLwogCiBzdGF0aWMgdm9pZCBlcmFzZXIodW5zaWduZWQgY2hhciBjLCBzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQpAQCAtNDQ3LDYgKzQ2OSw3IEBACiAJaW50IGhlYWQsIHNlZW5fYWxudW1zLCBjbnQ7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAorCS8qIEZJWE1FOiBsb2NraW5nIG5lZWRlZCA/ICovCiAJaWYgKHR0eS0+cmVhZF9oZWFkID09IHR0eS0+Y2Fub25faGVhZCkgewogCQkvKiBvcG9zdCgnXGEnLCB0dHkpOyAqLwkJLyogd2hhdCBkbyB5b3UgdGhpbms/ICovCiAJCXJldHVybjsKQEAgLTQ4MSw2ICs1MDQsNyBAQAogCX0KIAogCXNlZW5fYWxudW1zID0gMDsKKwkvKiBGSVhNRTogTG9ja2luZyA/PyAqLwogCXdoaWxlICh0dHktPnJlYWRfaGVhZCAhPSB0dHktPmNhbm9uX2hlYWQpIHsKIAkJaGVhZCA9IHR0eS0+cmVhZF9oZWFkOwogCkBAIC01ODMsNiArNjA3LDggQEAKICAqCW1heSBjYXVzIHRlcm1pbmFsIGZsdXNoaW5nIHRvIHRha2UgcGxhY2UgYWNjb3JkaW5nIHRvIHRoZSB0ZXJtaW9zCiAgKglzZXR0aW5ncyBhbmQgY2hhcmFjdGVyIHVzZWQuIENhbGxlZCBmcm9tIHRoZSBkcml2ZXIgcmVjZWl2ZV9idWYKICAqCXBhdGggc28gc2VyaWFsaXplZC4KKyAqCisgKglMb2NraW5nOiBjdHJsX2xvY2ssIHJlYWRfbG9jayAoYm90aCB2aWEgZmx1c2ggYnVmZmVyKQogICovCiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBpc2lnKGludCBzaWcsIHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIGludCBmbHVzaCkKQEAgLTEwMDcsMTIgKzEwMzMsMjYgQEAKICAqCWFuZCBpcyBwcm90ZWN0ZWQgZnJvbSByZS1lbnRyeSBieSB0aGUgdHR5IGxheWVyLiBUaGUgdXNlciBpcwogICoJZ3VhcmFudGVlZCB0aGF0IHRoaXMgZnVuY3Rpb24gd2lsbCBub3QgYmUgcmUtZW50ZXJlZCBvciBpbiBwcm9ncmVzcwogICoJd2hlbiB0aGUgbGRpc2MgaXMgY2xvc2VkLgorICoKKyAqCUxvY2tpbmc6IENhbGxlciBob2xkcyB0dHktPnRlcm1pb3NfbXV0ZXgKICAqLwogCiBzdGF0aWMgdm9pZCBuX3R0eV9zZXRfdGVybWlvcyhzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3Qga3Rlcm1pb3MgKm9sZCkKIHsKLQlpZiAoIXR0eSkKLQkJcmV0dXJuOworCWludCBjYW5vbl9jaGFuZ2UgPSAxOworCUJVR19PTighdHR5KTsKKworCWlmIChvbGQpCisJCWNhbm9uX2NoYW5nZSA9IChvbGQtPmNfbGZsYWcgXiB0dHktPnRlcm1pb3MtPmNfbGZsYWcpICYgSUNBTk9OOworCWlmIChjYW5vbl9jaGFuZ2UpIHsKKwkJbWVtc2V0KCZ0dHktPnJlYWRfZmxhZ3MsIDAsIHNpemVvZiB0dHktPnJlYWRfZmxhZ3MpOworCQl0dHktPmNhbm9uX2hlYWQgPSB0dHktPnJlYWRfdGFpbDsKKwkJdHR5LT5jYW5vbl9kYXRhID0gMDsKKwkJdHR5LT5lcmFzaW5nID0gMDsKKwl9CisKKwlpZiAoY2Fub25fY2hhbmdlICYmICFMX0lDQU5PTih0dHkpICYmIHR0eS0+cmVhZF9jbnQpCisJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmdHR5LT5yZWFkX3dhaXQpOwogCiAJdHR5LT5pY2Fub24gPSAoTF9JQ0FOT04odHR5KSAhPSAwKTsKIAlpZiAodGVzdF9iaXQoVFRZX0hXX0NPT0tfSU4sICZ0dHktPmZsYWdzKSkgewpAQCAtMTE0Myw3ICsxMTgzLDcgQEAKICAqCUBiOiB1c2VyIGRhdGEKICAqCUBucjogc2l6ZSBvZiBkYXRhCiAgKgotICoJSGVscGVyIGZ1bmN0aW9uIHRvIHNwZWVkIHVwIHJlYWRfY2hhbi4gIEl0IGlzIG9ubHkgY2FsbGVkIHdoZW4KKyAqCUhlbHBlciBmdW5jdGlvbiB0byBzcGVlZCB1cCBuX3R0eV9yZWFkLiAgSXQgaXMgb25seSBjYWxsZWQgd2hlbgogICoJSUNBTk9OIGlzIG9mZjsgaXQgY29waWVzIGNoYXJhY3RlcnMgc3RyYWlnaHQgZnJvbSB0aGUgdHR5IHF1ZXVlIHRvCiAgKgl1c2VyIHNwYWNlIGRpcmVjdGx5LiAgSXQgY2FuIGJlIHByb2ZpdGFibHkgY2FsbGVkIHR3aWNlOyBvbmNlIHRvCiAgKglkcmFpbiB0aGUgc3BhY2UgZnJvbSB0aGUgdGFpbCBwb2ludGVyIHRvIHRoZSAocGh5c2ljYWwpIGVuZCBvZiB0aGUKQEAgLTEyMTAsNyArMTI1MCw3IEBACiAJaWYgKGZpbGUtPmZfb3AtPndyaXRlICE9IHJlZGlyZWN0ZWRfdHR5X3dyaXRlICYmCiAJICAgIGN1cnJlbnQtPnNpZ25hbC0+dHR5ID09IHR0eSkgewogCQlpZiAoIXR0eS0+cGdycCkKLQkJCXByaW50ayhLRVJOX0VSUiAicmVhZF9jaGFuOiBubyB0dHktPnBncnAhXG4iKTsKKwkJCXByaW50ayhLRVJOX0VSUiAibl90dHlfcmVhZDogbm8gdHR5LT5wZ3JwIVxuIik7CiAJCWVsc2UgaWYgKHRhc2tfcGdycChjdXJyZW50KSAhPSB0dHktPnBncnApIHsKIAkJCWlmIChpc19pZ25vcmVkKFNJR1RUSU4pIHx8CiAJCQkgICAgaXNfY3VycmVudF9wZ3JwX29ycGhhbmVkKCkpCkBAIC0xMjI1LDcgKzEyNjUsNyBAQAogCiAKIC8qKgotICoJcmVhZF9jaGFuCQktCXJlYWQgZnVuY3Rpb24gZm9yIHR0eQorICoJbl90dHlfcmVhZAkJLQlyZWFkIGZ1bmN0aW9uIGZvciB0dHkKICAqCUB0dHk6IHR0eSBkZXZpY2UKICAqCUBmaWxlOiBmaWxlIG9iamVjdAogICoJQGJ1ZjogdXNlcnNwYWNlIGJ1ZmZlciBwb2ludGVyCkBAIC0xMjM5LDcgKzEyNzksNyBAQAogICoJVGhpcyBjb2RlIG11c3QgYmUgc3VyZSBuZXZlciB0byBzbGVlcCB0aHJvdWdoIGEgaGFuZ3VwLgogICovCiAKLXN0YXRpYyBzc2l6ZV90IHJlYWRfY2hhbihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAqZmlsZSwKK3N0YXRpYyBzc2l6ZV90IG5fdHR5X3JlYWQoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKmZpbGUsCiAJCQkgdW5zaWduZWQgY2hhciBfX3VzZXIgKmJ1Ziwgc2l6ZV90IG5yKQogewogCXVuc2lnbmVkIGNoYXIgX191c2VyICpiID0gYnVmOwpAQCAtMTI1NCwxMCArMTI5NCw3IEBACiAKIGRvX2l0X2FnYWluOgogCi0JaWYgKCF0dHktPnJlYWRfYnVmKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAibl90dHlfcmVhZF9jaGFuOiByZWFkX2J1ZiA9PSBOVUxMPyE/XG4iKTsKLQkJcmV0dXJuIC1FSU87Ci0JfQorCUJVR19PTighdHR5LT5yZWFkX2J1Zik7CiAKIAljID0gam9iX2NvbnRyb2wodHR5LCBmaWxlKTsKIAlpZiAoYyA8IDApCkBAIC0xNDQ0LDcgKzE0ODEsNyBAQAogfQogCiAvKioKLSAqCXdyaXRlX2NoYW4JCS0Jd3JpdGUgZnVuY3Rpb24gZm9yIHR0eQorICoJbl90dHlfd3JpdGUJCS0Jd3JpdGUgZnVuY3Rpb24gZm9yIHR0eQogICoJQHR0eTogdHR5IGRldmljZQogICoJQGZpbGU6IGZpbGUgb2JqZWN0CiAgKglAYnVmOiB1c2Vyc3BhY2UgYnVmZmVyIHBvaW50ZXIKQEAgLTE0NTgsNyArMTQ5NSw3IEBACiAgKglUaGlzIGNvZGUgbXVzdCBiZSBzdXJlIG5ldmVyIHRvIHNsZWVwIHRocm91Z2ggYSBoYW5ndXAuCiAgKi8KIAotc3RhdGljIHNzaXplX3Qgd3JpdGVfY2hhbihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAqZmlsZSwKK3N0YXRpYyBzc2l6ZV90IG5fdHR5X3dyaXRlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICpmaWxlLAogCQkJICBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsIHNpemVfdCBucikKIHsKIAljb25zdCB1bnNpZ25lZCBjaGFyICpiID0gYnVmOwpAQCAtMTUzMiw3ICsxNTY5LDcgQEAKIH0KIAogLyoqCi0gKglub3JtYWxfcG9sbAkJLQlwb2xsIG1ldGhvZCBmb3IgTl9UVFkKKyAqCW5fdHR5X3BvbGwJCS0JcG9sbCBtZXRob2QgZm9yIE5fVFRZCiAgKglAdHR5OiB0ZXJtaW5hbCBkZXZpY2UKICAqCUBmaWxlOiBmaWxlIGFjY2Vzc2luZyBpdAogICoJQHdhaXQ6IHBvbGwgdGFibGUKQEAgLTE1NDUsNyArMTU4Miw3IEBACiAgKglDYWxsZWQgd2l0aG91dCB0aGUga2VybmVsIGxvY2sgaGVsZCAtIGZpbmUKICAqLwogCi1zdGF0aWMgdW5zaWduZWQgaW50IG5vcm1hbF9wb2xsKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICpmaWxlLAorc3RhdGljIHVuc2lnbmVkIGludCBuX3R0eV9wb2xsKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICpmaWxlLAogCQkJCQkJCXBvbGxfdGFibGUgKndhaXQpCiB7CiAJdW5zaWduZWQgaW50IG1hc2sgPSAwOwpAQCAtMTU3Myw2ICsxNjEwLDQ0IEBACiAJcmV0dXJuIG1hc2s7CiB9CiAKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGlucV9jYW5vbihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQoreworCWludCBuciwgaGVhZCwgdGFpbDsKKworCWlmICghdHR5LT5jYW5vbl9kYXRhKQorCQlyZXR1cm4gMDsKKwloZWFkID0gdHR5LT5jYW5vbl9oZWFkOworCXRhaWwgPSB0dHktPnJlYWRfdGFpbDsKKwluciA9IChoZWFkIC0gdGFpbCkgJiAoTl9UVFlfQlVGX1NJWkUtMSk7CisJLyogU2tpcCBFT0YtY2hhcnMuLiAqLworCXdoaWxlIChoZWFkICE9IHRhaWwpIHsKKwkJaWYgKHRlc3RfYml0KHRhaWwsIHR0eS0+cmVhZF9mbGFncykgJiYKKwkJICAgIHR0eS0+cmVhZF9idWZbdGFpbF0gPT0gX19ESVNBQkxFRF9DSEFSKQorCQkJbnItLTsKKwkJdGFpbCA9ICh0YWlsKzEpICYgKE5fVFRZX0JVRl9TSVpFLTEpOworCX0KKwlyZXR1cm4gbnI7Cit9CisKK3N0YXRpYyBpbnQgbl90dHlfaW9jdGwoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKmZpbGUsCisJCSAgICAgICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKK3sKKwlpbnQgcmV0dmFsOworCisJc3dpdGNoIChjbWQpIHsKKwljYXNlIFRJT0NPVVRROgorCQlyZXR1cm4gcHV0X3VzZXIodHR5X2NoYXJzX2luX2J1ZmZlcih0dHkpLCAoaW50IF9fdXNlciAqKSBhcmcpOworCWNhc2UgVElPQ0lOUToKKwkJLyogRklYTUU6IExvY2tpbmcgKi8KKwkJcmV0dmFsID0gdHR5LT5yZWFkX2NudDsKKwkJaWYgKExfSUNBTk9OKHR0eSkpCisJCQlyZXR2YWwgPSBpbnFfY2Fub24odHR5KTsKKwkJcmV0dXJuIHB1dF91c2VyKHJldHZhbCwgKHVuc2lnbmVkIGludCBfX3VzZXIgKikgYXJnKTsKKwlkZWZhdWx0OgorCQlyZXR1cm4gbl90dHlfaW9jdGxfaGVscGVyKHR0eSwgZmlsZSwgY21kLCBhcmcpOworCX0KK30KKwogc3RydWN0IHR0eV9sZGlzY19vcHMgdHR5X2xkaXNjX05fVFRZID0gewogCS5tYWdpYyAgICAgICAgICAgPSBUVFlfTERJU0NfTUFHSUMsCiAJLm5hbWUgICAgICAgICAgICA9ICJuX3R0eSIsCkBAIC0xNTgwLDExICsxNjU1LDExIEBACiAJLmNsb3NlICAgICAgICAgICA9IG5fdHR5X2Nsb3NlLAogCS5mbHVzaF9idWZmZXIgICAgPSBuX3R0eV9mbHVzaF9idWZmZXIsCiAJLmNoYXJzX2luX2J1ZmZlciA9IG5fdHR5X2NoYXJzX2luX2J1ZmZlciwKLQkucmVhZCAgICAgICAgICAgID0gcmVhZF9jaGFuLAotCS53cml0ZSAgICAgICAgICAgPSB3cml0ZV9jaGFuLAorCS5yZWFkICAgICAgICAgICAgPSBuX3R0eV9yZWFkLAorCS53cml0ZSAgICAgICAgICAgPSBuX3R0eV93cml0ZSwKIAkuaW9jdGwgICAgICAgICAgID0gbl90dHlfaW9jdGwsCiAJLnNldF90ZXJtaW9zICAgICA9IG5fdHR5X3NldF90ZXJtaW9zLAotCS5wb2xsICAgICAgICAgICAgPSBub3JtYWxfcG9sbCwKKwkucG9sbCAgICAgICAgICAgID0gbl90dHlfcG9sbCwKIAkucmVjZWl2ZV9idWYgICAgID0gbl90dHlfcmVjZWl2ZV9idWYsCiAJLndyaXRlX3dha2V1cCAgICA9IG5fdHR5X3dyaXRlX3dha2V1cAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9ub3pvbWkuYyBiL2RyaXZlcnMvY2hhci9ub3pvbWkuYwppbmRleCA2NmEwZjkzLi45YTM0YTE5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvbm96b21pLmMKKysrIGIvZHJpdmVycy9jaGFyL25vem9taS5jCkBAIC0xNTk5LDcgKzE1OTksMTAgQEAKIAlyZXR1cm4gMDsKIH0KIAotLyogQ2FsbGVkIHdoZW4gdGhlIHVzZXJzcGFjZSBwcm9jZXNzIGNsb3NlIHRoZSB0dHksIC9kZXYvbm96Ki4gKi8KKy8qIENhbGxlZCB3aGVuIHRoZSB1c2Vyc3BhY2UgcHJvY2VzcyBjbG9zZSB0aGUgdHR5LCAvZGV2L25veiouIEFsc28KKyAgIGNhbGxlZCBpbW1lZGlhdGVseSBpZiBudHR5X29wZW4gZmFpbHMgaW4gd2hpY2ggY2FzZSB0dHktPmRyaXZlcl9kYXRhCisgICB3aWxsIGJlIE5VTEwgYW4gd2UgZXhpdCBieSB0aGUgZmlyc3QgcmV0dXJuICovCisKIHN0YXRpYyB2b2lkIG50dHlfY2xvc2Uoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKmZpbGUpCiB7CiAJc3RydWN0IG5vem9taSAqZGMgPSBnZXRfZGNfYnlfdHR5KHR0eSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvcGM4NzM2eF9ncGlvLmMgYi9kcml2ZXJzL2NoYXIvcGM4NzM2eF9ncGlvLmMKaW5kZXggYjkzMGRlNS4uM2Y3ZGE4YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3BjODczNnhfZ3Bpby5jCisrKyBiL2RyaXZlcnMvY2hhci9wYzg3MzZ4X2dwaW8uYwpAQCAtNDEsNyArNDEsOCBAQAogI2RlZmluZSBTSU9fQkFTRTIgICAgICAgMHg0RQkvKiBhbHQgY29tbWFuZC1yZWcgdG8gY2hlY2sgKi8KIAogI2RlZmluZSBTSU9fU0lECQkweDIwCS8qIFN1cGVySS9PIElEIFJlZ2lzdGVyICovCi0jZGVmaW5lIFNJT19TSURfVkFMVUUJMHhlOQkvKiBFeHBlY3RlZCB2YWx1ZSBpbiBTdXBlckkvTyBJRCBSZWdpc3RlciAqLworI2RlZmluZSBTSU9fU0lEX1BDODczNjUJMHhlNQkvKiBFeHBlY3RlZCB2YWx1ZSBpbiBJRCBSZWdpc3RlciBmb3IgUEM4NzM2NSAqLworI2RlZmluZSBTSU9fU0lEX1BDODczNjYJMHhlOQkvKiBFeHBlY3RlZCB2YWx1ZSBpbiBJRCBSZWdpc3RlciBmb3IgUEM4NzM2NiAqLwogCiAjZGVmaW5lIFNJT19DRjEJCTB4MjEJLyogY2hpcCBjb25maWcsIGJpdDAgaXMgY2hpcCBlbmFibGUgKi8KIApAQCAtOTEsMTMgKzkyLDE3IEBACiAKIHN0YXRpYyBpbnQgcGM4NzM2eF9zdXBlcmlvX3ByZXNlbnQodm9pZCkKIHsKKwlpbnQgaWQ7CisKIAkvKiB0cnkgdGhlIDIgcG9zc2libGUgdmFsdWVzLCByZWFkIGEgaGFyZHdhcmUgcmVnIHRvIHZlcmlmeSAqLwogCXN1cGVyaW9fY21kID0gU0lPX0JBU0UxOwotCWlmIChzdXBlcmlvX2luYihTSU9fU0lEKSA9PSBTSU9fU0lEX1ZBTFVFKQorCWlkID0gc3VwZXJpb19pbmIoU0lPX1NJRCk7CisJaWYgKGlkID09IFNJT19TSURfUEM4NzM2NSB8fCBpZCA9PSBTSU9fU0lEX1BDODczNjYpCiAJCXJldHVybiBzdXBlcmlvX2NtZDsKIAogCXN1cGVyaW9fY21kID0gU0lPX0JBU0UyOwotCWlmIChzdXBlcmlvX2luYihTSU9fU0lEKSA9PSBTSU9fU0lEX1ZBTFVFKQorCWlkID0gc3VwZXJpb19pbmIoU0lPX1NJRCk7CisJaWYgKGlkID09IFNJT19TSURfUEM4NzM2NSB8fCBpZCA9PSBTSU9fU0lEX1BDODczNjYpCiAJCXJldHVybiBzdXBlcmlvX2NtZDsKIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3BjbWNpYS9jbTQwMDBfY3MuYyBiL2RyaXZlcnMvY2hhci9wY21jaWEvY200MDAwX2NzLmMKaW5kZXggZjA3MGFlNy4uZGJiOTEyNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3BjbWNpYS9jbTQwMDBfY3MuYworKysgYi9kcml2ZXJzL2NoYXIvcGNtY2lhL2NtNDAwMF9jcy5jCkBAIC0xNzU5LDY1ICsxNzU5LDQwIEBACiAKIC8qPT09PSBJbnRlcmZhY2UgdG8gUENNQ0lBIExheWVyID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAKK3N0YXRpYyBpbnQgY200MDAwX2NvbmZpZ19jaGVjayhzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYsCisJCQkgICAgICAgY2lzdHBsX2NmdGFibGVfZW50cnlfdCAqY2ZnLAorCQkJICAgICAgIGNpc3RwbF9jZnRhYmxlX2VudHJ5X3QgKmRmbHQsCisJCQkgICAgICAgdW5zaWduZWQgaW50IHZjYywKKwkJCSAgICAgICB2b2lkICpwcml2X2RhdGEpCit7CisJaWYgKCFjZmctPmlvLm53aW4pCisJCXJldHVybiAtRU5PREVWOworCisJLyogR2V0IHRoZSBJT2FkZHIgKi8KKwlwX2Rldi0+aW8uQmFzZVBvcnQxID0gY2ZnLT5pby53aW5bMF0uYmFzZTsKKwlwX2Rldi0+aW8uTnVtUG9ydHMxID0gY2ZnLT5pby53aW5bMF0ubGVuOworCXBfZGV2LT5pby5BdHRyaWJ1dGVzMSA9IElPX0RBVEFfUEFUSF9XSURUSF9BVVRPOworCWlmICghKGNmZy0+aW8uZmxhZ3MgJiBDSVNUUExfSU9fOEJJVCkpCisJCXBfZGV2LT5pby5BdHRyaWJ1dGVzMSA9IElPX0RBVEFfUEFUSF9XSURUSF8xNjsKKwlpZiAoIShjZmctPmlvLmZsYWdzICYgQ0lTVFBMX0lPXzE2QklUKSkKKwkJcF9kZXYtPmlvLkF0dHJpYnV0ZXMxID0gSU9fREFUQV9QQVRIX1dJRFRIXzg7CisJcF9kZXYtPmlvLklPQWRkckxpbmVzID0gY2ZnLT5pby5mbGFncyAmIENJU1RQTF9JT19MSU5FU19NQVNLOworCisJcmV0dXJuIHBjbWNpYV9yZXF1ZXN0X2lvKHBfZGV2LCAmcF9kZXYtPmlvKTsKK30KKwogc3RhdGljIGludCBjbTQwMDBfY29uZmlnKHN0cnVjdCBwY21jaWFfZGV2aWNlICogbGluaywgaW50IGRldm5vKQogewogCXN0cnVjdCBjbTQwMDBfZGV2ICpkZXY7Ci0JdHVwbGVfdCB0dXBsZTsKLQljaXNwYXJzZV90IHBhcnNlOwotCXVfY2hhciBidWZbNjRdOwotCWludCBmYWlsX2ZuLCBmYWlsX3JjOwotCWludCByYzsKIAogCS8qIHJlYWQgdGhlIGNvbmZpZy10dXBsZXMgKi8KLQl0dXBsZS5BdHRyaWJ1dGVzID0gMDsKLQl0dXBsZS5UdXBsZURhdGEgPSBidWY7Ci0JdHVwbGUuVHVwbGVEYXRhTWF4ID0gc2l6ZW9mKGJ1Zik7Ci0JdHVwbGUuVHVwbGVPZmZzZXQgPSAwOwotCi0JbGluay0+aW8uQmFzZVBvcnQyID0gMDsKLQlsaW5rLT5pby5OdW1Qb3J0czIgPSAwOwotCWxpbmstPmlvLkF0dHJpYnV0ZXMyID0gMDsKLQl0dXBsZS5EZXNpcmVkVHVwbGUgPSBDSVNUUExfQ0ZUQUJMRV9FTlRSWTsKLQlmb3IgKHJjID0gcGNtY2lhX2dldF9maXJzdF90dXBsZShsaW5rLCAmdHVwbGUpOwotCSAgICAgcmMgPT0gQ1NfU1VDQ0VTUzsgcmMgPSBwY21jaWFfZ2V0X25leHRfdHVwbGUobGluaywgJnR1cGxlKSkgewotCi0JCXJjID0gcGNtY2lhX2dldF90dXBsZV9kYXRhKGxpbmssICZ0dXBsZSk7Ci0JCWlmIChyYyAhPSBDU19TVUNDRVNTKQotCQkJY29udGludWU7Ci0JCXJjID0gcGNtY2lhX3BhcnNlX3R1cGxlKGxpbmssICZ0dXBsZSwgJnBhcnNlKTsKLQkJaWYgKHJjICE9IENTX1NVQ0NFU1MpCi0JCQljb250aW51ZTsKLQotCQlsaW5rLT5jb25mLkNvbmZpZ0luZGV4ID0gcGFyc2UuY2Z0YWJsZV9lbnRyeS5pbmRleDsKLQotCQlpZiAoIXBhcnNlLmNmdGFibGVfZW50cnkuaW8ubndpbikKLQkJCWNvbnRpbnVlOwotCi0JCS8qIEdldCB0aGUgSU9hZGRyICovCi0JCWxpbmstPmlvLkJhc2VQb3J0MSA9IHBhcnNlLmNmdGFibGVfZW50cnkuaW8ud2luWzBdLmJhc2U7Ci0JCWxpbmstPmlvLk51bVBvcnRzMSA9IHBhcnNlLmNmdGFibGVfZW50cnkuaW8ud2luWzBdLmxlbjsKLQkJbGluay0+aW8uQXR0cmlidXRlczEgPSBJT19EQVRBX1BBVEhfV0lEVEhfQVVUTzsKLQkJaWYgKCEocGFyc2UuY2Z0YWJsZV9lbnRyeS5pby5mbGFncyAmIENJU1RQTF9JT184QklUKSkKLQkJCWxpbmstPmlvLkF0dHJpYnV0ZXMxID0gSU9fREFUQV9QQVRIX1dJRFRIXzE2OwotCQlpZiAoIShwYXJzZS5jZnRhYmxlX2VudHJ5LmlvLmZsYWdzICYgQ0lTVFBMX0lPXzE2QklUKSkKLQkJCWxpbmstPmlvLkF0dHJpYnV0ZXMxID0gSU9fREFUQV9QQVRIX1dJRFRIXzg7Ci0JCWxpbmstPmlvLklPQWRkckxpbmVzID0gcGFyc2UuY2Z0YWJsZV9lbnRyeS5pby5mbGFncwotCQkgICAgJiBDSVNUUExfSU9fTElORVNfTUFTSzsKLQotCQlyYyA9IHBjbWNpYV9yZXF1ZXN0X2lvKGxpbmssICZsaW5rLT5pbyk7Ci0JCWlmIChyYyA9PSBDU19TVUNDRVNTKQotCQkJYnJlYWs7CS8qIHdlIGFyZSBkb25lICovCi0JfQotCWlmIChyYyAhPSBDU19TVUNDRVNTKQorCWlmIChwY21jaWFfbG9vcF9jb25maWcobGluaywgY200MDAwX2NvbmZpZ19jaGVjaywgTlVMTCkpCiAJCWdvdG8gY3NfcmVsZWFzZTsKIAogCWxpbmstPmNvbmYuSW50VHlwZSA9IDAwMDAwMDAyOwogCi0JaWYgKChmYWlsX3JjID0KLQkgICAgIHBjbWNpYV9yZXF1ZXN0X2NvbmZpZ3VyYXRpb24obGluaywgJmxpbmstPmNvbmYpKSAhPSBDU19TVUNDRVNTKSB7Ci0JCWZhaWxfZm4gPSBSZXF1ZXN0Q29uZmlndXJhdGlvbjsKKwlpZiAocGNtY2lhX3JlcXVlc3RfY29uZmlndXJhdGlvbihsaW5rLCAmbGluay0+Y29uZikpCiAJCWdvdG8gY3NfcmVsZWFzZTsKLQl9CiAKIAlkZXYgPSBsaW5rLT5wcml2OwogCXNwcmludGYoZGV2LT5ub2RlLmRldl9uYW1lLCBERVZJQ0VfTkFNRSAiJWQiLCBkZXZubyk7CkBAIC0xODk2LDcgKzE4NzEsNyBAQAogCQlyZXR1cm4gcmV0OwogCX0KIAotCWRldmljZV9jcmVhdGVfZHJ2ZGF0YShjbW1fY2xhc3MsIE5VTEwsIE1LREVWKG1ham9yLCBpKSwgTlVMTCwgImNtbSVkIiwgaSk7CisJZGV2aWNlX2NyZWF0ZShjbW1fY2xhc3MsIE5VTEwsIE1LREVWKG1ham9yLCBpKSwgTlVMTCwgImNtbSVkIiwgaSk7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9wY21jaWEvY200MDQwX2NzLmMgYi9kcml2ZXJzL2NoYXIvcGNtY2lhL2NtNDA0MF9jcy5jCmluZGV4IDBiNTkzNGIuLjRmMDcyM2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9wY21jaWEvY200MDQwX2NzLmMKKysrIGIvZHJpdmVycy9jaGFyL3BjbWNpYS9jbTQwNDBfY3MuYwpAQCAtNTI2LDY1ICs1MjYsNDkgQEAKIAlyZXR1cm47CiB9CiAKK3N0YXRpYyBpbnQgY200MDQwX2NvbmZpZ19jaGVjayhzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYsCisJCQkgICAgICAgY2lzdHBsX2NmdGFibGVfZW50cnlfdCAqY2ZnLAorCQkJICAgICAgIGNpc3RwbF9jZnRhYmxlX2VudHJ5X3QgKmRmbHQsCisJCQkgICAgICAgdW5zaWduZWQgaW50IHZjYywKKwkJCSAgICAgICB2b2lkICpwcml2X2RhdGEpCit7CisJaW50IHJjOworCWlmICghY2ZnLT5pby5ud2luKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCS8qIEdldCB0aGUgSU9hZGRyICovCisJcF9kZXYtPmlvLkJhc2VQb3J0MSA9IGNmZy0+aW8ud2luWzBdLmJhc2U7CisJcF9kZXYtPmlvLk51bVBvcnRzMSA9IGNmZy0+aW8ud2luWzBdLmxlbjsKKwlwX2Rldi0+aW8uQXR0cmlidXRlczEgPSBJT19EQVRBX1BBVEhfV0lEVEhfQVVUTzsKKwlpZiAoIShjZmctPmlvLmZsYWdzICYgQ0lTVFBMX0lPXzhCSVQpKQorCQlwX2Rldi0+aW8uQXR0cmlidXRlczEgPSBJT19EQVRBX1BBVEhfV0lEVEhfMTY7CisJaWYgKCEoY2ZnLT5pby5mbGFncyAmIENJU1RQTF9JT18xNkJJVCkpCisJCXBfZGV2LT5pby5BdHRyaWJ1dGVzMSA9IElPX0RBVEFfUEFUSF9XSURUSF84OworCXBfZGV2LT5pby5JT0FkZHJMaW5lcyA9IGNmZy0+aW8uZmxhZ3MgJiBDSVNUUExfSU9fTElORVNfTUFTSzsKKworCXJjID0gcGNtY2lhX3JlcXVlc3RfaW8ocF9kZXYsICZwX2Rldi0+aW8pOworCWRldl9wcmludGsoS0VSTl9JTkZPLCAmaGFuZGxlX3RvX2RldihwX2RldiksCisJCSAgICJwY21jaWFfcmVxdWVzdF9pbyByZXR1cm5lZCAweCV4XG4iLCByYyk7CisJcmV0dXJuIHJjOworfQorCisKIHN0YXRpYyBpbnQgcmVhZGVyX2NvbmZpZyhzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaywgaW50IGRldm5vKQogewogCXN0cnVjdCByZWFkZXJfZGV2ICpkZXY7Ci0JdHVwbGVfdCB0dXBsZTsKLQljaXNwYXJzZV90IHBhcnNlOwotCXVfY2hhciBidWZbNjRdOwotCWludCBmYWlsX2ZuLCBmYWlsX3JjOwotCWludCByYzsKLQotCXR1cGxlLkF0dHJpYnV0ZXMgPSAwOwotCXR1cGxlLlR1cGxlRGF0YSA9IGJ1ZjsKLQl0dXBsZS5UdXBsZURhdGFNYXggPSBzaXplb2YoYnVmKTsKLSAJdHVwbGUuVHVwbGVPZmZzZXQgPSAwOworCWludCBmYWlsX3JjOwogCiAJbGluay0+aW8uQmFzZVBvcnQyID0gMDsKIAlsaW5rLT5pby5OdW1Qb3J0czIgPSAwOwogCWxpbmstPmlvLkF0dHJpYnV0ZXMyID0gMDsKLQl0dXBsZS5EZXNpcmVkVHVwbGUgPSBDSVNUUExfQ0ZUQUJMRV9FTlRSWTsKLQlmb3IgKHJjID0gcGNtY2lhX2dldF9maXJzdF90dXBsZShsaW5rLCAmdHVwbGUpOwotCSAgICAgcmMgPT0gQ1NfU1VDQ0VTUzsKLQkgICAgIHJjID0gcGNtY2lhX2dldF9uZXh0X3R1cGxlKGxpbmssICZ0dXBsZSkpIHsKLQkJcmMgPSBwY21jaWFfZ2V0X3R1cGxlX2RhdGEobGluaywgJnR1cGxlKTsKLQkJaWYgKHJjICE9IENTX1NVQ0NFU1MpCi0JCQljb250aW51ZTsKLQkJcmMgPSBwY21jaWFfcGFyc2VfdHVwbGUobGluaywgJnR1cGxlLCAmcGFyc2UpOwotCQlpZiAocmMgIT0gQ1NfU1VDQ0VTUykKLQkJCWNvbnRpbnVlOwogCi0JCWxpbmstPmNvbmYuQ29uZmlnSW5kZXggPSBwYXJzZS5jZnRhYmxlX2VudHJ5LmluZGV4OwotCi0JCWlmICghcGFyc2UuY2Z0YWJsZV9lbnRyeS5pby5ud2luKQotCQkJY29udGludWU7Ci0KLQkJbGluay0+aW8uQmFzZVBvcnQxID0gcGFyc2UuY2Z0YWJsZV9lbnRyeS5pby53aW5bMF0uYmFzZTsKLQkJbGluay0+aW8uTnVtUG9ydHMxID0gcGFyc2UuY2Z0YWJsZV9lbnRyeS5pby53aW5bMF0ubGVuOwotCQlsaW5rLT5pby5BdHRyaWJ1dGVzMSA9IElPX0RBVEFfUEFUSF9XSURUSF9BVVRPOwotCQlpZiAoIShwYXJzZS5jZnRhYmxlX2VudHJ5LmlvLmZsYWdzICYgQ0lTVFBMX0lPXzhCSVQpKQotCQkJbGluay0+aW8uQXR0cmlidXRlczEgPSBJT19EQVRBX1BBVEhfV0lEVEhfMTY7Ci0JCWlmICghKHBhcnNlLmNmdGFibGVfZW50cnkuaW8uZmxhZ3MgJiBDSVNUUExfSU9fMTZCSVQpKQotCQkJbGluay0+aW8uQXR0cmlidXRlczEgPSBJT19EQVRBX1BBVEhfV0lEVEhfODsKLQkJbGluay0+aW8uSU9BZGRyTGluZXMgPSBwYXJzZS5jZnRhYmxlX2VudHJ5LmlvLmZsYWdzCi0JCQkJCQkmIENJU1RQTF9JT19MSU5FU19NQVNLOwotCQlyYyA9IHBjbWNpYV9yZXF1ZXN0X2lvKGxpbmssICZsaW5rLT5pbyk7Ci0KLQkJZGV2X3ByaW50ayhLRVJOX0lORk8sICZoYW5kbGVfdG9fZGV2KGxpbmspLCAiZm9vIik7Ci0JCWlmIChyYyA9PSBDU19TVUNDRVNTKQotCQkJYnJlYWs7Ci0JCWVsc2UKLQkJCWRldl9wcmludGsoS0VSTl9JTkZPLCAmaGFuZGxlX3RvX2RldihsaW5rKSwKLQkJCQkgICAicGNtY2lhX3JlcXVlc3RfaW8gZmFpbGVkIDB4JXhcbiIsIHJjKTsKLQl9Ci0JaWYgKHJjICE9IENTX1NVQ0NFU1MpCisJaWYgKHBjbWNpYV9sb29wX2NvbmZpZyhsaW5rLCBjbTQwNDBfY29uZmlnX2NoZWNrLCBOVUxMKSkKIAkJZ290byBjc19yZWxlYXNlOwogCiAJbGluay0+Y29uZi5JbnRUeXBlID0gMDAwMDAwMDI7CiAKLQlpZiAoKGZhaWxfcmMgPSBwY21jaWFfcmVxdWVzdF9jb25maWd1cmF0aW9uKGxpbmssJmxpbmstPmNvbmYpKQotCQkJCQkJCQkhPUNTX1NVQ0NFU1MpIHsKLQkJZmFpbF9mbiA9IFJlcXVlc3RDb25maWd1cmF0aW9uOworCWZhaWxfcmMgPSBwY21jaWFfcmVxdWVzdF9jb25maWd1cmF0aW9uKGxpbmssICZsaW5rLT5jb25mKTsKKwlpZiAoZmFpbF9yYyAhPSAwKSB7CiAJCWRldl9wcmludGsoS0VSTl9JTkZPLCAmaGFuZGxlX3RvX2RldihsaW5rKSwKIAkJCSAgICJwY21jaWFfcmVxdWVzdF9jb25maWd1cmF0aW9uIGZhaWxlZCAweCV4XG4iLAogCQkJICAgZmFpbF9yYyk7CkBAIC02NTMsOCArNjM3LDcgQEAKIAkJcmV0dXJuIHJldDsKIAl9CiAKLQlkZXZpY2VfY3JlYXRlX2RydmRhdGEoY214X2NsYXNzLCBOVUxMLCBNS0RFVihtYWpvciwgaSksIE5VTEwsCi0JCQkgICAgICAiY214JWQiLCBpKTsKKwlkZXZpY2VfY3JlYXRlKGNteF9jbGFzcywgTlVMTCwgTUtERVYobWFqb3IsIGkpLCBOVUxMLCAiY214JWQiLCBpKTsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3BjbWNpYS9pcHdpcmVsZXNzL21haW4uYyBiL2RyaXZlcnMvY2hhci9wY21jaWEvaXB3aXJlbGVzcy9tYWluLmMKaW5kZXggNWVjYTdhOS4uNTIxNmZjZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3BjbWNpYS9pcHdpcmVsZXNzL21haW4uYworKysgYi9kcml2ZXJzL2NoYXIvcGNtY2lhL2lwd2lyZWxlc3MvbWFpbi5jCkBAIC02NSw5ICs2NSw5IEBACiAJc3RydWN0IGlwd19kZXYgKmlwdyA9IGNvbnRhaW5lcl9vZih3b3JrX3JlYm9vdCwgc3RydWN0IGlwd19kZXYsCiAJCQl3b3JrX3JlYm9vdCk7CiAJc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmsgPSBpcHctPmxpbms7Ci0JaW50IHJldCA9IHBjY2FyZF9yZXNldF9jYXJkKGxpbmstPnNvY2tldCk7CisJaW50IHJldCA9IHBjbWNpYV9yZXNldF9jYXJkKGxpbmstPnNvY2tldCk7CiAKLQlpZiAocmV0ICE9IENTX1NVQ0NFU1MpCisJaWYgKHJldCAhPSAwKQogCQljc19lcnJvcihsaW5rLCBSZXNldENhcmQsIHJldCk7CiB9CiAKQEAgLTgzLDcgKzgzLDYgQEAKIHsKIAlzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluayA9IGlwdy0+bGluazsKIAlpbnQgcmV0OwotCWNvbmZpZ19pbmZvX3QgY29uZjsKIAl0dXBsZV90IHR1cGxlOwogCXVuc2lnbmVkIHNob3J0IGJ1Zls2NF07CiAJY2lzcGFyc2VfdCBwYXJzZTsKQEAgLTEwNSw3ICsxMDQsNyBAQAogCXdoaWxlIChyZXQgPT0gMCkgewogCQlyZXQgPSBwY21jaWFfZ2V0X3R1cGxlX2RhdGEobGluaywgJnR1cGxlKTsKIAotCQlpZiAocmV0ICE9IENTX1NVQ0NFU1MpIHsKKwkJaWYgKHJldCAhPSAwKSB7CiAJCQljc19lcnJvcihsaW5rLCBHZXRUdXBsZURhdGEsIHJldCk7CiAJCQlnb3RvIGV4aXQwOwogCQl9CkBAIC0xMTYsMjEgKzExNSwyMSBAQAogCiAJcmV0ID0gcGNtY2lhX2dldF9maXJzdF90dXBsZShsaW5rLCAmdHVwbGUpOwogCi0JaWYgKHJldCAhPSBDU19TVUNDRVNTKSB7CisJaWYgKHJldCAhPSAwKSB7CiAJCWNzX2Vycm9yKGxpbmssIEdldEZpcnN0VHVwbGUsIHJldCk7CiAJCWdvdG8gZXhpdDA7CiAJfQogCiAJcmV0ID0gcGNtY2lhX2dldF90dXBsZV9kYXRhKGxpbmssICZ0dXBsZSk7CiAKLQlpZiAocmV0ICE9IENTX1NVQ0NFU1MpIHsKKwlpZiAocmV0ICE9IDApIHsKIAkJY3NfZXJyb3IobGluaywgR2V0VHVwbGVEYXRhLCByZXQpOwogCQlnb3RvIGV4aXQwOwogCX0KIAotCXJldCA9IHBjbWNpYV9wYXJzZV90dXBsZShsaW5rLCAmdHVwbGUsICZwYXJzZSk7CisJcmV0ID0gcGNtY2lhX3BhcnNlX3R1cGxlKCZ0dXBsZSwgJnBhcnNlKTsKIAotCWlmIChyZXQgIT0gQ1NfU1VDQ0VTUykgeworCWlmIChyZXQgIT0gMCkgewogCQljc19lcnJvcihsaW5rLCBQYXJzZVR1cGxlLCByZXQpOwogCQlnb3RvIGV4aXQwOwogCX0KQEAgLTE1MiwyMSArMTUxLDIxIEBACiAKIAlyZXQgPSBwY21jaWFfZ2V0X2ZpcnN0X3R1cGxlKGxpbmssICZ0dXBsZSk7CiAKLQlpZiAocmV0ICE9IENTX1NVQ0NFU1MpIHsKKwlpZiAocmV0ICE9IDApIHsKIAkJY3NfZXJyb3IobGluaywgR2V0Rmlyc3RUdXBsZSwgcmV0KTsKIAkJZ290byBleGl0MDsKIAl9CiAKIAlyZXQgPSBwY21jaWFfZ2V0X3R1cGxlX2RhdGEobGluaywgJnR1cGxlKTsKIAotCWlmIChyZXQgIT0gQ1NfU1VDQ0VTUykgeworCWlmIChyZXQgIT0gMCkgewogCQljc19lcnJvcihsaW5rLCBHZXRUdXBsZURhdGEsIHJldCk7CiAJCWdvdG8gZXhpdDA7CiAJfQogCi0JcmV0ID0gcGNtY2lhX3BhcnNlX3R1cGxlKGxpbmssICZ0dXBsZSwgJnBhcnNlKTsKKwlyZXQgPSBwY21jaWFfcGFyc2VfdHVwbGUoJnR1cGxlLCAmcGFyc2UpOwogCi0JaWYgKHJldCAhPSBDU19TVUNDRVNTKSB7CisJaWYgKHJldCAhPSAwKSB7CiAJCWNzX2Vycm9yKGxpbmssIEdldFR1cGxlRGF0YSwgcmV0KTsKIAkJZ290byBleGl0MDsKIAl9CkBAIC0xODEsNyArMTgwLDcgQEAKIAogCXJldCA9IHBjbWNpYV9yZXF1ZXN0X2lvKGxpbmssICZsaW5rLT5pbyk7CiAKLQlpZiAocmV0ICE9IENTX1NVQ0NFU1MpIHsKKwlpZiAocmV0ICE9IDApIHsKIAkJY3NfZXJyb3IobGluaywgUmVxdWVzdElPLCByZXQpOwogCQlnb3RvIGV4aXQwOwogCX0KQEAgLTE5NSwyMSArMTk0LDIxIEBACiAKIAlyZXQgPSBwY21jaWFfZ2V0X2ZpcnN0X3R1cGxlKGxpbmssICZ0dXBsZSk7CiAKLQlpZiAocmV0ICE9IENTX1NVQ0NFU1MpIHsKKwlpZiAocmV0ICE9IDApIHsKIAkJY3NfZXJyb3IobGluaywgR2V0Rmlyc3RUdXBsZSwgcmV0KTsKIAkJZ290byBleGl0MTsKIAl9CiAKIAlyZXQgPSBwY21jaWFfZ2V0X3R1cGxlX2RhdGEobGluaywgJnR1cGxlKTsKIAotCWlmIChyZXQgIT0gQ1NfU1VDQ0VTUykgeworCWlmIChyZXQgIT0gMCkgewogCQljc19lcnJvcihsaW5rLCBHZXRUdXBsZURhdGEsIHJldCk7CiAJCWdvdG8gZXhpdDE7CiAJfQogCi0JcmV0ID0gcGNtY2lhX3BhcnNlX3R1cGxlKGxpbmssICZ0dXBsZSwgJnBhcnNlKTsKKwlyZXQgPSBwY21jaWFfcGFyc2VfdHVwbGUoJnR1cGxlLCAmcGFyc2UpOwogCi0JaWYgKHJldCAhPSBDU19TVUNDRVNTKSB7CisJaWYgKHJldCAhPSAwKSB7CiAJCWNzX2Vycm9yKGxpbmssIFBhcnNlVHVwbGUsIHJldCk7CiAJCWdvdG8gZXhpdDE7CiAJfQpAQCAtMjI3LDcgKzIyNiw3IEBACiAJCXJldCA9IHBjbWNpYV9yZXF1ZXN0X3dpbmRvdygmbGluaywgJmlwdy0+cmVxdWVzdF9jb21tb25fbWVtb3J5LAogCQkJCSZpcHctPmhhbmRsZV9jb21tb25fbWVtb3J5KTsKIAotCQlpZiAocmV0ICE9IENTX1NVQ0NFU1MpIHsKKwkJaWYgKHJldCAhPSAwKSB7CiAJCQljc19lcnJvcihsaW5rLCBSZXF1ZXN0V2luZG93LCByZXQpOwogCQkJZ290byBleGl0MTsKIAkJfQpAQCAtMjM5LDcgKzIzOCw3IEBACiAJCXJldCA9IHBjbWNpYV9tYXBfbWVtX3BhZ2UoaXB3LT5oYW5kbGVfY29tbW9uX21lbW9yeSwKIAkJCQkmbWVtcmVxX2NvbW1vbl9tZW1vcnkpOwogCi0JCWlmIChyZXQgIT0gQ1NfU1VDQ0VTUykgeworCQlpZiAocmV0ICE9IDApIHsKIAkJCWNzX2Vycm9yKGxpbmssIE1hcE1lbVBhZ2UsIHJldCk7CiAJCQlnb3RvIGV4aXQxOwogCQl9CkBAIC0yNjEsNyArMjYwLDcgQEAKIAkJcmV0ID0gcGNtY2lhX3JlcXVlc3Rfd2luZG93KCZsaW5rLCAmaXB3LT5yZXF1ZXN0X2F0dHJfbWVtb3J5LAogCQkJCSZpcHctPmhhbmRsZV9hdHRyX21lbW9yeSk7CiAKLQkJaWYgKHJldCAhPSBDU19TVUNDRVNTKSB7CisJCWlmIChyZXQgIT0gMCkgewogCQkJY3NfZXJyb3IobGluaywgUmVxdWVzdFdpbmRvdywgcmV0KTsKIAkJCWdvdG8gZXhpdDI7CiAJCX0KQEAgLTI3Miw3ICsyNzEsNyBAQAogCQlyZXQgPSBwY21jaWFfbWFwX21lbV9wYWdlKGlwdy0+aGFuZGxlX2F0dHJfbWVtb3J5LAogCQkJCSZtZW1yZXFfYXR0cl9tZW1vcnkpOwogCi0JCWlmIChyZXQgIT0gQ1NfU1VDQ0VTUykgeworCQlpZiAocmV0ICE9IDApIHsKIAkJCWNzX2Vycm9yKGxpbmssIE1hcE1lbVBhZ2UsIHJldCk7CiAJCQlnb3RvIGV4aXQyOwogCQl9CkBAIC0yOTIsMjAgKzI5MSwxMSBAQAogCiAJcmV0ID0gcGNtY2lhX3JlcXVlc3RfaXJxKGxpbmssICZsaW5rLT5pcnEpOwogCi0JaWYgKHJldCAhPSBDU19TVUNDRVNTKSB7CisJaWYgKHJldCAhPSAwKSB7CiAJCWNzX2Vycm9yKGxpbmssIFJlcXVlc3RJUlEsIHJldCk7CiAJCWdvdG8gZXhpdDM7CiAJfQogCi0JLyogTG9vayB1cCBjdXJyZW50IFZjYyAqLwotCi0JcmV0ID0gcGNtY2lhX2dldF9jb25maWd1cmF0aW9uX2luZm8obGluaywgJmNvbmYpOwotCi0JaWYgKHJldCAhPSBDU19TVUNDRVNTKSB7Ci0JCWNzX2Vycm9yKGxpbmssIEdldENvbmZpZ3VyYXRpb25JbmZvLCByZXQpOwotCQlnb3RvIGV4aXQ0OwotCX0KLQogCXByaW50ayhLRVJOX0lORk8gSVBXSVJFTEVTU19QQ0NBUkRfTkFNRSAiOiBDYXJkIHR5cGUgJXNcbiIsCiAJCQlpcHctPmlzX3YyX2NhcmQgPyAiVjIvVjMiIDogIlYxIik7CiAJcHJpbnRrKEtFUk5fSU5GTyBJUFdJUkVMRVNTX1BDQ0FSRF9OQU1FCkBAIC0zNDEsNyArMzMxLDcgQEAKIAkgKi8KIAlyZXQgPSBwY21jaWFfcmVxdWVzdF9jb25maWd1cmF0aW9uKGxpbmssICZsaW5rLT5jb25mKTsKIAotCWlmIChyZXQgIT0gQ1NfU1VDQ0VTUykgeworCWlmIChyZXQgIT0gMCkgewogCQljc19lcnJvcihsaW5rLCBSZXF1ZXN0Q29uZmlndXJhdGlvbiwgcmV0KTsKIAkJZ290byBleGl0NDsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvcGNtY2lhL2lwd2lyZWxlc3MvdHR5LmMgYi9kcml2ZXJzL2NoYXIvcGNtY2lhL2lwd2lyZWxlc3MvdHR5LmMKaW5kZXggM2EyM2U3Ni4uNTY5ZjJmNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3BjbWNpYS9pcHdpcmVsZXNzL3R0eS5jCisrKyBiL2RyaXZlcnMvY2hhci9wY21jaWEvaXB3aXJlbGVzcy90dHkuYwpAQCAtMjc2LDYgKzI3Niw3IEBACiAJc3RydWN0IGlwd190dHkgKnR0eSA9IGxpbnV4X3R0eS0+ZHJpdmVyX2RhdGE7CiAJaW50IHJvb207CiAKKwkvKiBGSVhNRTogRXhhY3RseSBob3cgaXMgdGhlIHR0eSBvYmplY3QgbG9ja2VkIGhlcmUgLi4gKi8KIAlpZiAoIXR0eSkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKQEAgLTM5Nyw2ICszOTgsNyBAQAogc3RhdGljIGludCBpcHdfdGlvY21nZXQoc3RydWN0IHR0eV9zdHJ1Y3QgKmxpbnV4X3R0eSwgc3RydWN0IGZpbGUgKmZpbGUpCiB7CiAJc3RydWN0IGlwd190dHkgKnR0eSA9IGxpbnV4X3R0eS0+ZHJpdmVyX2RhdGE7CisJLyogRklYTUU6IEV4YWN0bHkgaG93IGlzIHRoZSB0dHkgb2JqZWN0IGxvY2tlZCBoZXJlIC4uICovCiAKIAlpZiAoIXR0eSkKIAkJcmV0dXJuIC1FTk9ERVY7CkBAIC00MTIsNiArNDE0LDcgQEAKIAkgICAgIHVuc2lnbmVkIGludCBzZXQsIHVuc2lnbmVkIGludCBjbGVhcikKIHsKIAlzdHJ1Y3QgaXB3X3R0eSAqdHR5ID0gbGludXhfdHR5LT5kcml2ZXJfZGF0YTsKKwkvKiBGSVhNRTogRXhhY3RseSBob3cgaXMgdGhlIHR0eSBvYmplY3QgbG9ja2VkIGhlcmUgLi4gKi8KIAogCWlmICghdHR5KQogCQlyZXR1cm4gLUVOT0RFVjsKQEAgLTQzMyw2ICs0MzYsOCBAQAogCWlmICghdHR5LT5vcGVuX2NvdW50KQogCQlyZXR1cm4gLUVJTlZBTDsKIAorCS8qIEZJWE1FOiBFeGFjdGx5IGhvdyBpcyB0aGUgdHR5IG9iamVjdCBsb2NrZWQgaGVyZSAuLiAqLworCiAJc3dpdGNoIChjbWQpIHsKIAljYXNlIFRJT0NHU0VSSUFMOgogCQlyZXR1cm4gaXB3aXJlbGVzc19nZXRfc2VyaWFsX2luZm8odHR5LCAodm9pZCBfX3VzZXIgKikgYXJnKTsKQEAgLTQ2NywxMyArNDcyLDYgQEAKIAkJCX0KIAkJCXJldHVybiAwOwogCi0JCWNhc2UgVENHRVRTOgotCQljYXNlIFRDR0VUQToKLQkJCXJldHVybiBuX3R0eV9pb2N0bChsaW51eF90dHksIGZpbGUsIGNtZCwgYXJnKTsKLQotCQljYXNlIFRDRkxTSDoKLQkJCXJldHVybiBuX3R0eV9pb2N0bChsaW51eF90dHksIGZpbGUsIGNtZCwgYXJnKTsKLQogCQljYXNlIEZJT05SRUFEOgogCQkJewogCQkJCWludCB2YWwgPSAwOwpAQCAtNDgyLDEwICs0ODAsMTEgQEAKIAkJCQkJcmV0dXJuIC1FRkFVTFQ7CiAJCQl9CiAJCQlyZXR1cm4gMDsKKwkJY2FzZSBUQ0ZMU0g6CisJCQlyZXR1cm4gdHR5X3BlcmZvcm1fZmx1c2gobGludXhfdHR5LCBhcmcpOwogCQl9CiAJfQotCi0JcmV0dXJuIC1FTk9JT0NUTENNRDsKKwlyZXR1cm4gdHR5X21vZGVfaW9jdGwobGludXhfdHR5LCBmaWxlLCBjbWQgLCBhcmcpOwogfQogCiBzdGF0aWMgaW50IGFkZF90dHkoZGV2X25vZGVfdCAqbm9kZXNwLCBpbnQgaiwKQEAgLTU4OCw2ICs1ODcsOCBAQAogCQkJCXR0eV9oYW5ndXAodHR5ai0+bGludXhfdHR5KTsKIAkJCQkvKiBXYWl0IHRpbGwgdGhlIHR0eV9oYW5ndXAgaGFzIGNvbXBsZXRlZCAqLwogCQkJCWZsdXNoX3NjaGVkdWxlZF93b3JrKCk7CisJCQkJLyogRklYTUU6IEV4YWN0bHkgaG93IGlzIHRoZSB0dHkgb2JqZWN0IGxvY2tlZCBoZXJlCisJCQkJICAgYWdhaW5zdCBhIHBhcmFsbGVsIGlvY3RsIGV0YyAqLwogCQkJCW11dGV4X2xvY2soJnR0eWotPmlwd190dHlfbXV0ZXgpOwogCQkJfQogCQkJd2hpbGUgKHR0eWotPm9wZW5fY291bnQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvcGNtY2lhL3N5bmNsaW5rX2NzLmMgYi9kcml2ZXJzL2NoYXIvcGNtY2lhL3N5bmNsaW5rX2NzLmMKaW5kZXggYzI0MDU2Mi4uOWE2MjZlNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3BjbWNpYS9zeW5jbGlua19jcy5jCisrKyBiL2RyaXZlcnMvY2hhci9wY21jaWEvc3luY2xpbmtfY3MuYwpAQCAtNjAxLDcgKzYwMSw3IEBACiAKICAgICBjZmcgPSAmKHBhcnNlLmNmdGFibGVfZW50cnkpOwogICAgIENTX0NIRUNLKEdldFR1cGxlRGF0YSwgcGNtY2lhX2dldF90dXBsZV9kYXRhKGxpbmssICZ0dXBsZSkpOwotICAgIENTX0NIRUNLKFBhcnNlVHVwbGUsIHBjbWNpYV9wYXJzZV90dXBsZShsaW5rLCAmdHVwbGUsICZwYXJzZSkpOworICAgIENTX0NIRUNLKFBhcnNlVHVwbGUsIHBjbWNpYV9wYXJzZV90dXBsZSgmdHVwbGUsICZwYXJzZSkpOwogCiAgICAgaWYgKGNmZy0+ZmxhZ3MgJiBDSVNUUExfQ0ZUQUJMRV9ERUZBVUxUKSBkZmx0ID0gKmNmZzsKICAgICBpZiAoY2ZnLT5pbmRleCA9PSAwKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3BwZGV2LmMgYi9kcml2ZXJzL2NoYXIvcHBkZXYuYwppbmRleCBiZWUzOWZkLi5jODRjMzRmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvcHBkZXYuYworKysgYi9kcml2ZXJzL2NoYXIvcHBkZXYuYwpAQCAtNzYwLDkgKzc2MCw4IEBACiAKIHN0YXRpYyB2b2lkIHBwX2F0dGFjaChzdHJ1Y3QgcGFycG9ydCAqcG9ydCkKIHsKLQlkZXZpY2VfY3JlYXRlX2RydmRhdGEocHBkZXZfY2xhc3MsIHBvcnQtPmRldiwKLQkJCSAgICAgIE1LREVWKFBQX01BSk9SLCBwb3J0LT5udW1iZXIpLAotCQkJICAgICAgTlVMTCwgInBhcnBvcnQlZCIsIHBvcnQtPm51bWJlcik7CisJZGV2aWNlX2NyZWF0ZShwcGRldl9jbGFzcywgcG9ydC0+ZGV2LCBNS0RFVihQUF9NQUpPUiwgcG9ydC0+bnVtYmVyKSwKKwkJICAgICAgTlVMTCwgInBhcnBvcnQlZCIsIHBvcnQtPm51bWJlcik7CiB9CiAKIHN0YXRpYyB2b2lkIHBwX2RldGFjaChzdHJ1Y3QgcGFycG9ydCAqcG9ydCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9wdHkuYyBiL2RyaXZlcnMvY2hhci9wdHkuYwppbmRleCA3NmIyNzkzLi42ZDQ1ODI3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvcHR5LmMKKysrIGIvZHJpdmVycy9jaGFyL3B0eS5jCkBAIC04LDEwICs4LDEyIEBACiAgKiAgQWRkZWQgVFRZX0RPX1dSSVRFX1dBS0VVUCB0byBlbmFibGUgbl90dHkgdG8gc2VuZCBQT0xMX09VVCB0bwogICogICAgICB3YWl0aW5nIHdyaXRlcnMgLS0gU2FwYW4gQmhhdGlhIDxzYXBhbkBjb3Jld2Fycy5vcmc+CiAgKgotICoKKyAqICBXaGVuIHJlYWRpbmcgdGhpcyBjb2RlIHNlZSBhbHNvIGZzL2RldnB0cy4gSW4gcGFydGljdWxhciBub3RlIHRoYXQgdGhlCisgKiAgZHJpdmVyX2RhdGEgZmllbGQgaXMgdXNlZCBieSB0aGUgZGV2cHRzIHNpZGUgYXMgYSBiaW5kaW5nIHRvIHRoZSBkZXZwdHMKKyAqICBpbm9kZS4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CS8qIEZvciBFWFBPUlRfU1lNQk9MICovCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAKICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgpAQCAtMjMsMjYgKzI1LDI1IEBACiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvc3lzY3RsLmg+Ci0KLSNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgotI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CiAjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CiAjaW5jbHVkZSA8bGludXgvZGV2cHRzX2ZzLmg+CiAKKyNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CisKIC8qIFRoZXNlIGFyZSBnbG9iYWwgYmVjYXVzZSB0aGV5IGFyZSBhY2Nlc3NlZCBpbiB0dHlfaW8uYyAqLwogI2lmZGVmIENPTkZJR19VTklYOThfUFRZUwogc3RydWN0IHR0eV9kcml2ZXIgKnB0bV9kcml2ZXI7CiBzdGF0aWMgc3RydWN0IHR0eV9kcml2ZXIgKnB0c19kcml2ZXI7CiAjZW5kaWYKIAotc3RhdGljIHZvaWQgcHR5X2Nsb3NlKHN0cnVjdCB0dHlfc3RydWN0ICogdHR5LCBzdHJ1Y3QgZmlsZSAqIGZpbHApCitzdGF0aWMgdm9pZCBwdHlfY2xvc2Uoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKmZpbHApCiB7Ci0JaWYgKCF0dHkpCi0JCXJldHVybjsKLQlpZiAodHR5LT5kcml2ZXItPnN1YnR5cGUgPT0gUFRZX1RZUEVfTUFTVEVSKSB7Ci0JCWlmICh0dHktPmNvdW50ID4gMSkKLQkJCXByaW50aygibWFzdGVyIHB0eV9jbG9zZTogY291bnQgPSAlZCEhXG4iLCB0dHktPmNvdW50KTsKLQl9IGVsc2UgeworCUJVR19PTighdHR5KTsKKwlpZiAodHR5LT5kcml2ZXItPnN1YnR5cGUgPT0gUFRZX1RZUEVfTUFTVEVSKQorCQlXQVJOX09OKHR0eS0+Y291bnQgPiAxKTsKKwllbHNlIHsKIAkJaWYgKHR0eS0+Y291bnQgPiAyKQogCQkJcmV0dXJuOwogCX0KQEAgLTU5LDcgKzYwLDcgQEAKIAkJc2V0X2JpdChUVFlfT1RIRVJfQ0xPU0VELCAmdHR5LT5mbGFncyk7CiAjaWZkZWYgQ09ORklHX1VOSVg5OF9QVFlTCiAJCWlmICh0dHktPmRyaXZlciA9PSBwdG1fZHJpdmVyKQotCQkJZGV2cHRzX3B0eV9raWxsKHR0eS0+aW5kZXgpOworCQkJZGV2cHRzX3B0eV9raWxsKHR0eS0+bGluayk7CiAjZW5kaWYKIAkJdHR5X3ZoYW5ndXAodHR5LT5saW5rKTsKIAl9CkBAIC02OSwxMyArNzAsMTMgQEAKICAqIFRoZSB1bnRocm90dGxlIHJvdXRpbmUgaXMgY2FsbGVkIGJ5IHRoZSBsaW5lIGRpc2NpcGxpbmUgdG8gc2lnbmFsCiAgKiB0aGF0IGl0IGNhbiByZWNlaXZlIG1vcmUgY2hhcmFjdGVycy4gIEZvciBQVFkncywgdGhlIFRUWV9USFJPVFRMRUQKICAqIGZsYWcgaXMgYWx3YXlzIHNldCwgdG8gZm9yY2UgdGhlIGxpbmUgZGlzY2lwbGluZSB0byBhbHdheXMgY2FsbCB0aGUKLSAqIHVudGhyb3R0bGUgcm91dGluZSB3aGVuIHRoZXJlIGFyZSBmZXdlciB0aGFuIFRUWV9USFJFU0hPTERfVU5USFJPVFRMRSAKKyAqIHVudGhyb3R0bGUgcm91dGluZSB3aGVuIHRoZXJlIGFyZSBmZXdlciB0aGFuIFRUWV9USFJFU0hPTERfVU5USFJPVFRMRQogICogY2hhcmFjdGVycyBpbiB0aGUgcXVldWUuICBUaGlzIGlzIG5lY2Vzc2FyeSBzaW5jZSBlYWNoIHRpbWUgdGhpcwogICogaGFwcGVucywgd2UgbmVlZCB0byB3YWtlIHVwIGFueSBzbGVlcGluZyBwcm9jZXNzZXMgdGhhdCBjb3VsZCBiZQogICogKDEpIHRyeWluZyB0byBzZW5kIGRhdGEgdG8gdGhlIHB0eSwgb3IgKDIpIHdhaXRpbmcgaW4gd2FpdF91bnRpbF9zZW50KCkKICAqIGZvciB0aGUgcHR5IGJ1ZmZlciB0byBiZSBkcmFpbmVkLgogICovCi1zdGF0aWMgdm9pZCBwdHlfdW50aHJvdHRsZShzdHJ1Y3QgdHR5X3N0cnVjdCAqIHR0eSkKK3N0YXRpYyB2b2lkIHB0eV91bnRocm90dGxlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCiB7CiAJc3RydWN0IHR0eV9zdHJ1Y3QgKm9fdHR5ID0gdHR5LT5saW5rOwogCkBAIC04Nyw3ICs4OCw3IEBACiB9CiAKIC8qCi0gKiBXU0ggMDUvMjQvOTc6IG1vZGlmaWVkIHRvIAorICogV1NIIDA1LzI0Lzk3OiBtb2RpZmllZCB0bwogICogICAoMSkgdXNlIHNwYWNlIGluIHR0eS0+ZmxpcCBpbnN0ZWFkIG9mIGEgc2hhcmVkIHRlbXAgYnVmZmVyCiAgKgkgVGhlIGZsaXAgYnVmZmVycyBhcmVuJ3QgYmVpbmcgdXNlZCBmb3IgYSBwdHksIHNvIHRoZXJlJ3MgbG90cwogICoJIG9mIHNwYWNlIGF2YWlsYWJsZS4gIFRoZSBidWZmZXIgaXMgcHJvdGVjdGVkIGJ5IGEgcGVyLXB0eQpAQCAtMTAwLDcgKzEwMSw4IEBACiAgKiBub3Qgb3VyIHBhcnRuZXJzLiBXZSBjYW4ndCBqdXN0IHRha2UgdGhlIG90aGVyIG9uZSBibGluZGx5IHdpdGhvdXQKICAqIHJpc2tpbmcgZGVhZGxvY2tzLgogICovCi1zdGF0aWMgaW50IHB0eV93cml0ZShzdHJ1Y3QgdHR5X3N0cnVjdCAqIHR0eSwgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLCBpbnQgY291bnQpCitzdGF0aWMgaW50IHB0eV93cml0ZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsCisJCQkJCQkJCWludCBjb3VudCkKIHsKIAlzdHJ1Y3QgdHR5X3N0cnVjdCAqdG8gPSB0dHktPmxpbms7CiAJaW50CWM7CkBAIC0xMTIsNyArMTE0LDcgQEAKIAlpZiAoYyA+IGNvdW50KQogCQljID0gY291bnQ7CiAJdG8tPmxkaXNjLm9wcy0+cmVjZWl2ZV9idWYodG8sIGJ1ZiwgTlVMTCwgYyk7Ci0JCisKIAlyZXR1cm4gYzsKIH0KIApAQCAtMTI4LDE3ICsxMzAsMTcgQEAKIAogLyoKICAqCVdTSCAwNS8yNC85NzogIE1vZGlmaWVkIGZvciBhc3ltbWV0cmljIE1BU1RFUi9TTEFWRSBiZWhhdmlvcgotICoJVGhlIGNoYXJzX2luX2J1ZmZlcigpIHZhbHVlIGlzIHVzZWQgYnkgdGhlIGxkaXNjIHNlbGVjdCgpIGZ1bmN0aW9uIAorICoJVGhlIGNoYXJzX2luX2J1ZmZlcigpIHZhbHVlIGlzIHVzZWQgYnkgdGhlIGxkaXNjIHNlbGVjdCgpIGZ1bmN0aW9uCiAgKgl0byBob2xkIG9mZiB3cml0aW5nIHdoZW4gY2hhcnNfaW5fYnVmZmVyID4gV0FLRVVQX0NIQVJTICg9PSAyNTYpLgogICoJVGhlIHB0eSBkcml2ZXIgY2hhcnNfaW5fYnVmZmVyKCkgTWFzdGVyL1NsYXZlIG11c3QgYmVoYXZlIGRpZmZlcmVudGx5OgogICoKICAqICAgICAgVGhlIE1hc3RlciBzaWRlIG5lZWRzIHRvIGFsbG93IHR5cGVkLWFoZWFkIGNvbW1hbmRzIHRvIGFjY3VtdWxhdGUKICAqICAgICAgd2hpbGUgYmVpbmcgY2Fub25pY2FsaXplZCwgc28gd2UgcmVwb3J0ICJvdXIgYnVmZmVyIiBhcyBlbXB0eSB1bnRpbAogICoJc29tZSB0aHJlc2hvbGQgaXMgcmVhY2hlZCwgYW5kIHRoZW4gcmVwb3J0IHRoZSBjb3VudC4gKEFueSBjb3VudCA+Ci0gKglXQUtFVVBfQ0hBUlMgaXMgcmVnYXJkZWQgYnkgc2VsZWN0KCkgYXMgImZ1bGwiLikgIFRvIGF2b2lkIGRlYWRsb2NrIAotICoJdGhlIGNvdW50IHJldHVybmVkIG11c3QgYmUgMCBpZiBubyBjYW5vbmljYWwgZGF0YSBpcyBhdmFpbGFibGUgdG8gYmUgCisgKglXQUtFVVBfQ0hBUlMgaXMgcmVnYXJkZWQgYnkgc2VsZWN0KCkgYXMgImZ1bGwiLikgIFRvIGF2b2lkIGRlYWRsb2NrCisgKgl0aGUgY291bnQgcmV0dXJuZWQgbXVzdCBiZSAwIGlmIG5vIGNhbm9uaWNhbCBkYXRhIGlzIGF2YWlsYWJsZSB0byBiZQogICoJcmVhZC4gKFRoZSBOX1RUWSBsZGlzYy5jaGFyc19pbl9idWZmZXIgbm93IGtub3dzIHRoaXMuKQotICogIAorICoKICAqCVRoZSBTbGF2ZSBzaWRlIHBhc3NlcyBhbGwgY2hhcmFjdGVycyBpbiByYXcgbW9kZSB0byB0aGUgTWFzdGVyIHNpZGUncwogICoJYnVmZmVyIHdoZXJlIHRoZXkgY2FuIGJlIHJlYWQgaW1tZWRpYXRlbHksIHNvIGluIHRoaXMgY2FzZSB3ZSBjYW4KICAqCXJldHVybiB0aGUgdHJ1ZSBjb3VudCBpbiB0aGUgYnVmZmVyLgpAQCAtMTU1LDIxICsxNTcsMjIgQEAKIAkvKiBUaGUgbGRpc2MgbXVzdCByZXBvcnQgMCBpZiBubyBjaGFyYWN0ZXJzIGF2YWlsYWJsZSB0byBiZSByZWFkICovCiAJY291bnQgPSB0by0+bGRpc2Mub3BzLT5jaGFyc19pbl9idWZmZXIodG8pOwogCi0JaWYgKHR0eS0+ZHJpdmVyLT5zdWJ0eXBlID09IFBUWV9UWVBFX1NMQVZFKSByZXR1cm4gY291bnQ7CisJaWYgKHR0eS0+ZHJpdmVyLT5zdWJ0eXBlID09IFBUWV9UWVBFX1NMQVZFKQorCQlyZXR1cm4gY291bnQ7CiAKLQkvKiBNYXN0ZXIgc2lkZSBkcml2ZXIgLi4uIGlmIHRoZSBvdGhlciBzaWRlJ3MgcmVhZCBidWZmZXIgaXMgbGVzcyB0aGFuIAorCS8qIE1hc3RlciBzaWRlIGRyaXZlciAuLi4gaWYgdGhlIG90aGVyIHNpZGUncyByZWFkIGJ1ZmZlciBpcyBsZXNzIHRoYW4KIAkgKiBoYWxmIGZ1bGwsIHJldHVybiAwIHRvIGFsbG93IHdyaXRlcnMgdG8gcHJvY2VlZDsgb3RoZXJ3aXNlIHJldHVybgotCSAqIHRoZSBjb3VudC4gIFRoaXMgbGVhdmVzIGEgY29tZm9ydGFibGUgbWFyZ2luIHRvIGF2b2lkIG92ZXJmbG93LCAKKwkgKiB0aGUgY291bnQuICBUaGlzIGxlYXZlcyBhIGNvbWZvcnRhYmxlIG1hcmdpbiB0byBhdm9pZCBvdmVyZmxvdywKIAkgKiBhbmQgc3RpbGwgYWxsb3dzIGhhbGYgYSBidWZmZXIncyB3b3J0aCBvZiB0eXBlZC1haGVhZCBjb21tYW5kcy4KIAkgKi8KLQlyZXR1cm4gKChjb3VudCA8IE5fVFRZX0JVRl9TSVpFLzIpID8gMCA6IGNvdW50KTsKKwlyZXR1cm4gKGNvdW50IDwgTl9UVFlfQlVGX1NJWkUvMikgPyAwIDogY291bnQ7CiB9CiAKIC8qIFNldCB0aGUgbG9jayBmbGFnIG9uIGEgcHR5ICovCi1zdGF0aWMgaW50IHB0eV9zZXRfbG9jayhzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBpbnQgX191c2VyICogYXJnKQorc3RhdGljIGludCBwdHlfc2V0X2xvY2soc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgaW50IF9fdXNlciAqYXJnKQogewogCWludCB2YWw7Ci0JaWYgKGdldF91c2VyKHZhbCxhcmcpKQorCWlmIChnZXRfdXNlcih2YWwsIGFyZykpCiAJCXJldHVybiAtRUZBVUxUOwogCWlmICh2YWwpCiAJCXNldF9iaXQoVFRZX1BUWV9MT0NLLCAmdHR5LT5mbGFncyk7CkBAIC0xODIsMTMgKzE4NSwxMyBAQAogewogCXN0cnVjdCB0dHlfc3RydWN0ICp0byA9IHR0eS0+bGluazsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCQorCiAJaWYgKCF0bykKIAkJcmV0dXJuOwotCQorCiAJaWYgKHRvLT5sZGlzYy5vcHMtPmZsdXNoX2J1ZmZlcikKIAkJdG8tPmxkaXNjLm9wcy0+Zmx1c2hfYnVmZmVyKHRvKTsKLQkKKwogCWlmICh0by0+cGFja2V0KSB7CiAJCXNwaW5fbG9ja19pcnFzYXZlKCZ0dHktPmN0cmxfbG9jaywgZmxhZ3MpOwogCQl0dHktPmN0cmxfc3RhdHVzIHw9IFRJT0NQS1RfRkxVU0hXUklURTsKQEAgLTE5Nyw3ICsyMDAsNyBAQAogCX0KIH0KIAotc3RhdGljIGludCBwdHlfb3BlbihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAqIGZpbHApCitzdGF0aWMgaW50IHB0eV9vcGVuKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICpmaWxwKQogewogCWludAlyZXR2YWwgPSAtRU5PREVWOwogCkBAIC0yMjAsMTMgKzIyMyw2NSBAQAogCXJldHVybiByZXR2YWw7CiB9CiAKLXN0YXRpYyB2b2lkIHB0eV9zZXRfdGVybWlvcyhzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3Qga3Rlcm1pb3MgKm9sZF90ZXJtaW9zKQorc3RhdGljIHZvaWQgcHR5X3NldF90ZXJtaW9zKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksCisJCQkJCXN0cnVjdCBrdGVybWlvcyAqb2xkX3Rlcm1pb3MpCiB7Ci0gICAgICAgIHR0eS0+dGVybWlvcy0+Y19jZmxhZyAmPSB+KENTSVpFIHwgUEFSRU5CKTsKLSAgICAgICAgdHR5LT50ZXJtaW9zLT5jX2NmbGFnIHw9IChDUzggfCBDUkVBRCk7CisJdHR5LT50ZXJtaW9zLT5jX2NmbGFnICY9IH4oQ1NJWkUgfCBQQVJFTkIpOworCXR0eS0+dGVybWlvcy0+Y19jZmxhZyB8PSAoQ1M4IHwgQ1JFQUQpOwogfQogCitzdGF0aWMgaW50IHB0eV9pbnN0YWxsKHN0cnVjdCB0dHlfZHJpdmVyICpkcml2ZXIsIHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCit7CisJc3RydWN0IHR0eV9zdHJ1Y3QgKm9fdHR5OworCWludCBpZHggPSB0dHktPmluZGV4OworCWludCByZXR2YWw7CisKKwlvX3R0eSA9IGFsbG9jX3R0eV9zdHJ1Y3QoKTsKKwlpZiAoIW9fdHR5KQorCQlyZXR1cm4gLUVOT01FTTsKKwlpZiAoIXRyeV9tb2R1bGVfZ2V0KGRyaXZlci0+b3RoZXItPm93bmVyKSkgeworCQkvKiBUaGlzIGNhbm5vdCBpbiBmYWN0IGN1cnJlbnRseSBoYXBwZW4gKi8KKwkJZnJlZV90dHlfc3RydWN0KG9fdHR5KTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCWluaXRpYWxpemVfdHR5X3N0cnVjdChvX3R0eSwgZHJpdmVyLT5vdGhlciwgaWR4KTsKKworCS8qIFdlIGFsd2F5cyB1c2UgbmV3IHR0eSB0ZXJtaW9zIGRhdGEgc28gd2UgY2FuIGRvIHRoaXMKKwkgICB0aGUgZWFzeSB3YXkgLi4gKi8KKwlyZXR2YWwgPSB0dHlfaW5pdF90ZXJtaW9zKHR0eSk7CisJaWYgKHJldHZhbCkKKwkJZ290byBmcmVlX21lbV9vdXQ7CisKKwlyZXR2YWwgPSB0dHlfaW5pdF90ZXJtaW9zKG9fdHR5KTsKKwlpZiAocmV0dmFsKSB7CisJCXR0eV9mcmVlX3Rlcm1pb3ModHR5KTsKKwkJZ290byBmcmVlX21lbV9vdXQ7CisJfQorCisJLyoKKwkgKiBFdmVyeXRoaW5nIGFsbG9jYXRlZCAuLi4gc2V0IHVwIHRoZSBvX3R0eSBzdHJ1Y3R1cmUuCisJICovCisJZHJpdmVyLT5vdGhlci0+dHR5c1tpZHhdID0gb190dHk7CisJdHR5X2RyaXZlcl9rcmVmX2dldChkcml2ZXItPm90aGVyKTsKKwlpZiAoZHJpdmVyLT5zdWJ0eXBlID09IFBUWV9UWVBFX01BU1RFUikKKwkJb190dHktPmNvdW50Kys7CisJLyogRXN0YWJsaXNoIHRoZSBsaW5rcyBpbiBib3RoIGRpcmVjdGlvbnMgKi8KKwl0dHktPmxpbmsgICA9IG9fdHR5OworCW9fdHR5LT5saW5rID0gdHR5OworCisJdHR5X2RyaXZlcl9rcmVmX2dldChkcml2ZXIpOworCXR0eS0+Y291bnQrKzsKKwlkcml2ZXItPnR0eXNbaWR4XSA9IHR0eTsKKwlyZXR1cm4gMDsKK2ZyZWVfbWVtX291dDoKKwltb2R1bGVfcHV0KG9fdHR5LT5kcml2ZXItPm93bmVyKTsKKwlmcmVlX3R0eV9zdHJ1Y3Qob190dHkpOworCXJldHVybiAtRU5PTUVNOworfQorCisKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdHR5X29wZXJhdGlvbnMgcHR5X29wcyA9IHsKKwkuaW5zdGFsbCA9IHB0eV9pbnN0YWxsLAogCS5vcGVuID0gcHR5X29wZW4sCiAJLmNsb3NlID0gcHR5X2Nsb3NlLAogCS53cml0ZSA9IHB0eV93cml0ZSwKQEAgLTMyOSw4ICszODQsMTEgQEAKICAqIE90aGVyd2lzZSBvbmUgY2FuIGVhdCB1cCBhbGwga2VybmVsIG1lbW9yeSBieSBvcGVuaW5nIC9kZXYvcHRteCByZXBlYXRlZGx5LgogICovCiBpbnQgcHR5X2xpbWl0ID0gTlJfVU5JWDk4X1BUWV9ERUZBVUxUOwotc3RhdGljIGludCBwdHlfbGltaXRfbWluID0gMDsKK3N0YXRpYyBpbnQgcHR5X2xpbWl0X21pbjsKIHN0YXRpYyBpbnQgcHR5X2xpbWl0X21heCA9IE5SX1VOSVg5OF9QVFlfTUFYOworc3RhdGljIGludCBwdHlfY291bnQ7CisKK3N0YXRpYyBzdHJ1Y3QgY2RldiBwdG14X2NkZXY7CiAKIHN0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlIHB0eV90YWJsZVtdID0gewogCXsKQEAgLTM0OCw2ICs0MDYsNyBAQAogCQkucHJvY25hbWUJPSAibnIiLAogCQkubWF4bGVuCQk9IHNpemVvZihpbnQpLAogCQkubW9kZQkJPSAwNDQ0LAorCQkuZGF0YQkJPSAmcHR5X2NvdW50LAogCQkucHJvY19oYW5kbGVyCT0gJnByb2NfZG9pbnR2ZWMsCiAJfSwgewogCQkuY3RsX25hbWUJPSAwCkBAIC0zODgsNyArNDQ3LDExMSBAQAogCXJldHVybiAtRU5PSU9DVExDTUQ7CiB9CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgdHR5X29wZXJhdGlvbnMgcHR5X3VuaXg5OF9vcHMgPSB7CisvKioKKyAqCXB0bV91bml4OThfbG9va3VwCS0JZmluZCBhIHB0eSBtYXN0ZXIKKyAqCUBkcml2ZXI6IHB0bSBkcml2ZXIKKyAqCUBpZHg6IHR0eSBpbmRleAorICoKKyAqCUxvb2sgdXAgYSBwdHkgbWFzdGVyIGRldmljZS4gQ2FsbGVkIHVuZGVyIHRoZSB0dHlfbXV0ZXggZm9yIG5vdy4KKyAqCVRoaXMgcHJvdmlkZXMgb3VyIGxvY2tpbmcuCisgKi8KKworc3RhdGljIHN0cnVjdCB0dHlfc3RydWN0ICpwdG1fdW5peDk4X2xvb2t1cChzdHJ1Y3QgdHR5X2RyaXZlciAqZHJpdmVyLAorCQlzdHJ1Y3QgaW5vZGUgKnB0bV9pbm9kZSwgaW50IGlkeCkKK3sKKwlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5ID0gZGV2cHRzX2dldF90dHkocHRtX2lub2RlLCBpZHgpOworCWlmICh0dHkpCisJCXR0eSA9IHR0eS0+bGluazsKKwlyZXR1cm4gdHR5OworfQorCisvKioKKyAqCXB0c191bml4OThfbG9va3VwCS0JZmluZCBhIHB0eSBzbGF2ZQorICoJQGRyaXZlcjogcHRzIGRyaXZlcgorICoJQGlkeDogdHR5IGluZGV4CisgKgorICoJTG9vayB1cCBhIHB0eSBtYXN0ZXIgZGV2aWNlLiBDYWxsZWQgdW5kZXIgdGhlIHR0eV9tdXRleCBmb3Igbm93LgorICoJVGhpcyBwcm92aWRlcyBvdXIgbG9ja2luZy4KKyAqLworCitzdGF0aWMgc3RydWN0IHR0eV9zdHJ1Y3QgKnB0c191bml4OThfbG9va3VwKHN0cnVjdCB0dHlfZHJpdmVyICpkcml2ZXIsCisJCXN0cnVjdCBpbm9kZSAqcHRzX2lub2RlLCBpbnQgaWR4KQoreworCXN0cnVjdCB0dHlfc3RydWN0ICp0dHkgPSBkZXZwdHNfZ2V0X3R0eShwdHNfaW5vZGUsIGlkeCk7CisJLyogTWFzdGVyIG11c3QgYmUgb3BlbiBiZWZvcmUgc2xhdmUgKi8KKwlpZiAoIXR0eSkKKwkJcmV0dXJuIEVSUl9QVFIoLUVJTyk7CisJcmV0dXJuIHR0eTsKK30KKworc3RhdGljIHZvaWQgcHR5X3VuaXg5OF9zaHV0ZG93bihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQoreworCS8qIFdlIGhhdmUgb3VyIG93biBtZXRob2QgYXMgd2UgZG9uJ3QgdXNlIHRoZSB0dHkgaW5kZXggKi8KKwlrZnJlZSh0dHktPnRlcm1pb3MpOworfQorCisvKiBXZSBoYXZlIG5vIG5lZWQgdG8gaW5zdGFsbCBhbmQgcmVtb3ZlIG91ciB0dHkgb2JqZWN0cyBhcyBkZXZwdHMgZG9lcyBhbGwKKyAgIHRoZSB3b3JrIGZvciB1cyAqLworCitzdGF0aWMgaW50IHB0eV91bml4OThfaW5zdGFsbChzdHJ1Y3QgdHR5X2RyaXZlciAqZHJpdmVyLCBzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQoreworCXN0cnVjdCB0dHlfc3RydWN0ICpvX3R0eTsKKwlpbnQgaWR4ID0gdHR5LT5pbmRleDsKKworCW9fdHR5ID0gYWxsb2NfdHR5X3N0cnVjdCgpOworCWlmICghb190dHkpCisJCXJldHVybiAtRU5PTUVNOworCWlmICghdHJ5X21vZHVsZV9nZXQoZHJpdmVyLT5vdGhlci0+b3duZXIpKSB7CisJCS8qIFRoaXMgY2Fubm90IGluIGZhY3QgY3VycmVudGx5IGhhcHBlbiAqLworCQlmcmVlX3R0eV9zdHJ1Y3Qob190dHkpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJaW5pdGlhbGl6ZV90dHlfc3RydWN0KG9fdHR5LCBkcml2ZXItPm90aGVyLCBpZHgpOworCisJdHR5LT50ZXJtaW9zID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGt0ZXJtaW9zWzJdKSwgR0ZQX0tFUk5FTCk7CisJaWYgKHR0eS0+dGVybWlvcyA9PSBOVUxMKQorCQlnb3RvIGZyZWVfbWVtX291dDsKKwkqdHR5LT50ZXJtaW9zID0gZHJpdmVyLT5pbml0X3Rlcm1pb3M7CisJdHR5LT50ZXJtaW9zX2xvY2tlZCA9IHR0eS0+dGVybWlvcyArIDE7CisKKwlvX3R0eS0+dGVybWlvcyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBrdGVybWlvc1syXSksIEdGUF9LRVJORUwpOworCWlmIChvX3R0eS0+dGVybWlvcyA9PSBOVUxMKQorCQlnb3RvIGZyZWVfbWVtX291dDsKKwkqb190dHktPnRlcm1pb3MgPSBkcml2ZXItPm90aGVyLT5pbml0X3Rlcm1pb3M7CisJb190dHktPnRlcm1pb3NfbG9ja2VkID0gb190dHktPnRlcm1pb3MgKyAxOworCisJdHR5X2RyaXZlcl9rcmVmX2dldChkcml2ZXItPm90aGVyKTsKKwlpZiAoZHJpdmVyLT5zdWJ0eXBlID09IFBUWV9UWVBFX01BU1RFUikKKwkJb190dHktPmNvdW50Kys7CisJLyogRXN0YWJsaXNoIHRoZSBsaW5rcyBpbiBib3RoIGRpcmVjdGlvbnMgKi8KKwl0dHktPmxpbmsgICA9IG9fdHR5OworCW9fdHR5LT5saW5rID0gdHR5OworCS8qCisJICogQWxsIHN0cnVjdHVyZXMgaGF2ZSBiZWVuIGFsbG9jYXRlZCwgc28gbm93IHdlIGluc3RhbGwgdGhlbS4KKwkgKiBGYWlsdXJlcyBhZnRlciB0aGlzIHBvaW50IHVzZSByZWxlYXNlX3R0eSB0byBjbGVhbiB1cCwgc28KKwkgKiB0aGVyZSdzIG5vIG5lZWQgdG8gbnVsbCBvdXQgdGhlIGxvY2FsIHBvaW50ZXJzLgorCSAqLworCXR0eV9kcml2ZXJfa3JlZl9nZXQoZHJpdmVyKTsKKwl0dHktPmNvdW50Kys7CisJcHR5X2NvdW50Kys7CisJcmV0dXJuIDA7CitmcmVlX21lbV9vdXQ6CisJa2ZyZWUob190dHktPnRlcm1pb3MpOworCW1vZHVsZV9wdXQob190dHktPmRyaXZlci0+b3duZXIpOworCWZyZWVfdHR5X3N0cnVjdChvX3R0eSk7CisJa2ZyZWUodHR5LT50ZXJtaW9zKTsKKwlyZXR1cm4gLUVOT01FTTsKK30KKworc3RhdGljIHZvaWQgcHR5X3VuaXg5OF9yZW1vdmUoc3RydWN0IHR0eV9kcml2ZXIgKmRyaXZlciwgc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKK3sKKwlwdHlfY291bnQtLTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCB0dHlfb3BlcmF0aW9ucyBwdG1fdW5peDk4X29wcyA9IHsKKwkubG9va3VwID0gcHRtX3VuaXg5OF9sb29rdXAsCisJLmluc3RhbGwgPSBwdHlfdW5peDk4X2luc3RhbGwsCisJLnJlbW92ZSA9IHB0eV91bml4OThfcmVtb3ZlLAogCS5vcGVuID0gcHR5X29wZW4sCiAJLmNsb3NlID0gcHR5X2Nsb3NlLAogCS53cml0ZSA9IHB0eV93cml0ZSwKQEAgLTM5Nyw5ICs1NjAsODkgQEAKIAkuY2hhcnNfaW5fYnVmZmVyID0gcHR5X2NoYXJzX2luX2J1ZmZlciwKIAkudW50aHJvdHRsZSA9IHB0eV91bnRocm90dGxlLAogCS5zZXRfdGVybWlvcyA9IHB0eV9zZXRfdGVybWlvcywKLQkuaW9jdGwgPSBwdHlfdW5peDk4X2lvY3RsCisJLmlvY3RsID0gcHR5X3VuaXg5OF9pb2N0bCwKKwkuc2h1dGRvd24gPSBwdHlfdW5peDk4X3NodXRkb3duCiB9OwogCitzdGF0aWMgY29uc3Qgc3RydWN0IHR0eV9vcGVyYXRpb25zIHB0eV91bml4OThfb3BzID0geworCS5sb29rdXAgPSBwdHNfdW5peDk4X2xvb2t1cCwKKwkuaW5zdGFsbCA9IHB0eV91bml4OThfaW5zdGFsbCwKKwkucmVtb3ZlID0gcHR5X3VuaXg5OF9yZW1vdmUsCisJLm9wZW4gPSBwdHlfb3BlbiwKKwkuY2xvc2UgPSBwdHlfY2xvc2UsCisJLndyaXRlID0gcHR5X3dyaXRlLAorCS53cml0ZV9yb29tID0gcHR5X3dyaXRlX3Jvb20sCisJLmZsdXNoX2J1ZmZlciA9IHB0eV9mbHVzaF9idWZmZXIsCisJLmNoYXJzX2luX2J1ZmZlciA9IHB0eV9jaGFyc19pbl9idWZmZXIsCisJLnVudGhyb3R0bGUgPSBwdHlfdW50aHJvdHRsZSwKKwkuc2V0X3Rlcm1pb3MgPSBwdHlfc2V0X3Rlcm1pb3MsCisJLnNodXRkb3duID0gcHR5X3VuaXg5OF9zaHV0ZG93bgorfTsKKworLyoqCisgKglwdG14X29wZW4JCS0Jb3BlbiBhIHVuaXggOTggcHR5IG1hc3RlcgorICoJQGlub2RlOiBpbm9kZSBvZiBkZXZpY2UgZmlsZQorICoJQGZpbHA6IGZpbGUgcG9pbnRlciB0byB0dHkKKyAqCisgKglBbGxvY2F0ZSBhIHVuaXg5OCBwdHkgbWFzdGVyIGRldmljZSBmcm9tIHRoZSBwdG14IGRyaXZlci4KKyAqCisgKglMb2NraW5nOiB0dHlfbXV0ZXggcHJvdGVjdHMgdGhlIGluaXRfZGV2IHdvcmsuIHR0eS0+Y291bnQgc2hvdWxkCisgKiAJCXByb3RlY3QgdGhlIHJlc3QuCisgKgkJYWxsb2NhdGVkX3B0eXNfbG9jayBoYW5kbGVzIHRoZSBsaXN0IG9mIGZyZWUgcHR5IG51bWJlcnMKKyAqLworCitzdGF0aWMgaW50IF9fcHRteF9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwKQoreworCXN0cnVjdCB0dHlfc3RydWN0ICp0dHk7CisJaW50IHJldHZhbDsKKwlpbnQgaW5kZXg7CisKKwlub25zZWVrYWJsZV9vcGVuKGlub2RlLCBmaWxwKTsKKworCS8qIGZpbmQgYSBkZXZpY2UgdGhhdCBpcyBub3QgaW4gdXNlLiAqLworCWluZGV4ID0gZGV2cHRzX25ld19pbmRleChpbm9kZSk7CisJaWYgKGluZGV4IDwgMCkKKwkJcmV0dXJuIGluZGV4OworCisJbXV0ZXhfbG9jaygmdHR5X211dGV4KTsKKwl0dHkgPSB0dHlfaW5pdF9kZXYocHRtX2RyaXZlciwgaW5kZXgsIDEpOworCW11dGV4X3VubG9jaygmdHR5X211dGV4KTsKKworCWlmIChJU19FUlIodHR5KSkgeworCQlyZXR2YWwgPSBQVFJfRVJSKHR0eSk7CisJCWdvdG8gb3V0OworCX0KKworCXNldF9iaXQoVFRZX1BUWV9MT0NLLCAmdHR5LT5mbGFncyk7IC8qIExPQ0sgVEhFIFNMQVZFICovCisJZmlscC0+cHJpdmF0ZV9kYXRhID0gdHR5OworCWZpbGVfbW92ZShmaWxwLCAmdHR5LT50dHlfZmlsZXMpOworCisJcmV0dmFsID0gZGV2cHRzX3B0eV9uZXcoaW5vZGUsIHR0eS0+bGluayk7CisJaWYgKHJldHZhbCkKKwkJZ290byBvdXQxOworCisJcmV0dmFsID0gcHRtX2RyaXZlci0+b3BzLT5vcGVuKHR0eSwgZmlscCk7CisJaWYgKCFyZXR2YWwpCisJCXJldHVybiAwOworb3V0MToKKwl0dHlfcmVsZWFzZV9kZXYoZmlscCk7CisJcmV0dXJuIHJldHZhbDsKK291dDoKKwlkZXZwdHNfa2lsbF9pbmRleChpbm9kZSwgaW5kZXgpOworCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyBpbnQgcHRteF9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwKQoreworCWludCByZXQ7CisKKwlsb2NrX2tlcm5lbCgpOworCXJldCA9IF9fcHRteF9vcGVuKGlub2RlLCBmaWxwKTsKKwl1bmxvY2tfa2VybmVsKCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcHRteF9mb3BzOwogCiBzdGF0aWMgdm9pZCBfX2luaXQgdW5peDk4X3B0eV9pbml0KHZvaWQpCiB7CkBAIC00MjcsNyArNjcwLDcgQEAKIAlwdG1fZHJpdmVyLT5mbGFncyA9IFRUWV9EUklWRVJfUkVTRVRfVEVSTUlPUyB8IFRUWV9EUklWRVJfUkVBTF9SQVcgfAogCQlUVFlfRFJJVkVSX0RZTkFNSUNfREVWIHwgVFRZX0RSSVZFUl9ERVZQVFNfTUVNOwogCXB0bV9kcml2ZXItPm90aGVyID0gcHRzX2RyaXZlcjsKLQl0dHlfc2V0X29wZXJhdGlvbnMocHRtX2RyaXZlciwgJnB0eV91bml4OThfb3BzKTsKKwl0dHlfc2V0X29wZXJhdGlvbnMocHRtX2RyaXZlciwgJnB0bV91bml4OThfb3BzKTsKIAogCXB0c19kcml2ZXItPm93bmVyID0gVEhJU19NT0RVTEU7CiAJcHRzX2RyaXZlci0+ZHJpdmVyX25hbWUgPSAicHR5X3NsYXZlIjsKQEAgLTQ0MywxNiArNjg2LDI2IEBACiAJcHRzX2RyaXZlci0+ZmxhZ3MgPSBUVFlfRFJJVkVSX1JFU0VUX1RFUk1JT1MgfCBUVFlfRFJJVkVSX1JFQUxfUkFXIHwKIAkJVFRZX0RSSVZFUl9EWU5BTUlDX0RFViB8IFRUWV9EUklWRVJfREVWUFRTX01FTTsKIAlwdHNfZHJpdmVyLT5vdGhlciA9IHB0bV9kcml2ZXI7Ci0JdHR5X3NldF9vcGVyYXRpb25zKHB0c19kcml2ZXIsICZwdHlfb3BzKTsKLQkKKwl0dHlfc2V0X29wZXJhdGlvbnMocHRzX2RyaXZlciwgJnB0eV91bml4OThfb3BzKTsKKwogCWlmICh0dHlfcmVnaXN0ZXJfZHJpdmVyKHB0bV9kcml2ZXIpKQogCQlwYW5pYygiQ291bGRuJ3QgcmVnaXN0ZXIgVW5peDk4IHB0bSBkcml2ZXIiKTsKIAlpZiAodHR5X3JlZ2lzdGVyX2RyaXZlcihwdHNfZHJpdmVyKSkKIAkJcGFuaWMoIkNvdWxkbid0IHJlZ2lzdGVyIFVuaXg5OCBwdHMgZHJpdmVyIik7CiAKLQlwdHlfdGFibGVbMV0uZGF0YSA9ICZwdG1fZHJpdmVyLT5yZWZjb3VudDsKIAlyZWdpc3Rlcl9zeXNjdGxfdGFibGUocHR5X3Jvb3RfdGFibGUpOworCisJLyogTm93IGNyZWF0ZSB0aGUgL2Rldi9wdG14IHNwZWNpYWwgZGV2aWNlICovCisJdHR5X2RlZmF1bHRfZm9wcygmcHRteF9mb3BzKTsKKwlwdG14X2ZvcHMub3BlbiA9IHB0bXhfb3BlbjsKKworCWNkZXZfaW5pdCgmcHRteF9jZGV2LCAmcHRteF9mb3BzKTsKKwlpZiAoY2Rldl9hZGQoJnB0bXhfY2RldiwgTUtERVYoVFRZQVVYX01BSk9SLCAyKSwgMSkgfHwKKwkgICAgcmVnaXN0ZXJfY2hyZGV2X3JlZ2lvbihNS0RFVihUVFlBVVhfTUFKT1IsIDIpLCAxLCAiL2Rldi9wdG14IikgPCAwKQorCQlwYW5pYygiQ291bGRuJ3QgcmVnaXN0ZXIgL2Rldi9wdG14IGRyaXZlclxuIik7CisJZGV2aWNlX2NyZWF0ZSh0dHlfY2xhc3MsIE5VTEwsIE1LREVWKFRUWUFVWF9NQUpPUiwgMiksIE5VTEwsICJwdG14Iik7CiB9CisKICNlbHNlCiBzdGF0aWMgaW5saW5lIHZvaWQgdW5peDk4X3B0eV9pbml0KHZvaWQpIHsgfQogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvcmFuZG9tLmMgYi9kcml2ZXJzL2NoYXIvcmFuZG9tLmMKaW5kZXggNmFmNDM1Yi4uNzA1YTgzOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3JhbmRvbS5jCisrKyBiL2RyaXZlcnMvY2hhci9yYW5kb20uYwpAQCAtNTU4LDkgKzU1OCwyNiBAQAogCXVuc2lnbmVkIGRvbnRfY291bnRfZW50cm9weToxOwogfTsKIAotc3RhdGljIHN0cnVjdCB0aW1lcl9yYW5kX3N0YXRlIGlucHV0X3RpbWVyX3N0YXRlOwogc3RhdGljIHN0cnVjdCB0aW1lcl9yYW5kX3N0YXRlICppcnFfdGltZXJfc3RhdGVbTlJfSVJRU107CiAKK3N0YXRpYyBzdHJ1Y3QgdGltZXJfcmFuZF9zdGF0ZSAqZ2V0X3RpbWVyX3JhbmRfc3RhdGUodW5zaWduZWQgaW50IGlycSkKK3sKKwlpZiAoaXJxID49IG5yX2lycXMpCisJCXJldHVybiBOVUxMOworCisJcmV0dXJuIGlycV90aW1lcl9zdGF0ZVtpcnFdOworfQorCitzdGF0aWMgdm9pZCBzZXRfdGltZXJfcmFuZF9zdGF0ZSh1bnNpZ25lZCBpbnQgaXJxLCBzdHJ1Y3QgdGltZXJfcmFuZF9zdGF0ZSAqc3RhdGUpCit7CisJaWYgKGlycSA+PSBucl9pcnFzKQorCQlyZXR1cm47CisKKwlpcnFfdGltZXJfc3RhdGVbaXJxXSA9IHN0YXRlOworfQorCitzdGF0aWMgc3RydWN0IHRpbWVyX3JhbmRfc3RhdGUgaW5wdXRfdGltZXJfc3RhdGU7CisKIC8qCiAgKiBUaGlzIGZ1bmN0aW9uIGFkZHMgZW50cm9weSB0byB0aGUgZW50cm9weSAicG9vbCIgYnkgdXNpbmcgdGltaW5nCiAgKiBkZWxheXMuICBJdCB1c2VzIHRoZSB0aW1lcl9yYW5kX3N0YXRlIHN0cnVjdHVyZSB0byBtYWtlIGFuIGVzdGltYXRlCkBAIC02NDgsMTEgKzY2NSwxNSBAQAogCiB2b2lkIGFkZF9pbnRlcnJ1cHRfcmFuZG9tbmVzcyhpbnQgaXJxKQogewotCWlmIChpcnEgPj0gTlJfSVJRUyB8fCBpcnFfdGltZXJfc3RhdGVbaXJxXSA9PSBOVUxMKQorCXN0cnVjdCB0aW1lcl9yYW5kX3N0YXRlICpzdGF0ZTsKKworCXN0YXRlID0gZ2V0X3RpbWVyX3JhbmRfc3RhdGUoaXJxKTsKKworCWlmIChzdGF0ZSA9PSBOVUxMKQogCQlyZXR1cm47CiAKIAlERUJVR19FTlQoImlycSBldmVudCAlZFxuIiwgaXJxKTsKLQlhZGRfdGltZXJfcmFuZG9tbmVzcyhpcnFfdGltZXJfc3RhdGVbaXJxXSwgMHgxMDAgKyBpcnEpOworCWFkZF90aW1lcl9yYW5kb21uZXNzKHN0YXRlLCAweDEwMCArIGlycSk7CiB9CiAKICNpZmRlZiBDT05GSUdfQkxPQ0sKQEAgLTkxMiw3ICs5MzMsMTIgQEAKIHsKIAlzdHJ1Y3QgdGltZXJfcmFuZF9zdGF0ZSAqc3RhdGU7CiAKLQlpZiAoaXJxID49IE5SX0lSUVMgfHwgaXJxX3RpbWVyX3N0YXRlW2lycV0pCisJaWYgKGlycSA+PSBucl9pcnFzKQorCQlyZXR1cm47CisKKwlzdGF0ZSA9IGdldF90aW1lcl9yYW5kX3N0YXRlKGlycSk7CisKKwlpZiAoc3RhdGUpCiAJCXJldHVybjsKIAogCS8qCkBAIC05MjEsNyArOTQ3LDcgQEAKIAkgKi8KIAlzdGF0ZSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB0aW1lcl9yYW5kX3N0YXRlKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKHN0YXRlKQotCQlpcnFfdGltZXJfc3RhdGVbaXJxXSA9IHN0YXRlOworCQlzZXRfdGltZXJfcmFuZF9zdGF0ZShpcnEsIHN0YXRlKTsKIH0KIAogI2lmZGVmIENPTkZJR19CTE9DSwpAQCAtMTIwNSw3ICsxMjMxLDcgQEAKIAlyZXR1cm4gcHJvY19kb3N0cmluZygmZmFrZV90YWJsZSwgd3JpdGUsIGZpbHAsIGJ1ZmZlciwgbGVucCwgcHBvcyk7CiB9CiAKLXN0YXRpYyBpbnQgdXVpZF9zdHJhdGVneShjdGxfdGFibGUgKnRhYmxlLCBpbnQgX191c2VyICpuYW1lLCBpbnQgbmxlbiwKK3N0YXRpYyBpbnQgdXVpZF9zdHJhdGVneShjdGxfdGFibGUgKnRhYmxlLAogCQkJIHZvaWQgX191c2VyICpvbGR2YWwsIHNpemVfdCBfX3VzZXIgKm9sZGxlbnAsCiAJCQkgdm9pZCBfX3VzZXIgKm5ld3ZhbCwgc2l6ZV90IG5ld2xlbikKIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9yYXcuYyBiL2RyaXZlcnMvY2hhci9yYXcuYwppbmRleCA0N2I4Y2YyLi5lMTM5MzcyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvcmF3LmMKKysrIGIvZHJpdmVycy9jaGFyL3Jhdy5jCkBAIC0xMzEsOCArMTMxLDggQEAKIHN0YXRpYyB2b2lkIGJpbmRfZGV2aWNlKHN0cnVjdCByYXdfY29uZmlnX3JlcXVlc3QgKnJxKQogewogCWRldmljZV9kZXN0cm95KHJhd19jbGFzcywgTUtERVYoUkFXX01BSk9SLCBycS0+cmF3X21pbm9yKSk7Ci0JZGV2aWNlX2NyZWF0ZV9kcnZkYXRhKHJhd19jbGFzcywgTlVMTCwgTUtERVYoUkFXX01BSk9SLCBycS0+cmF3X21pbm9yKSwKLQkJCSAgICAgIE5VTEwsICJyYXclZCIsIHJxLT5yYXdfbWlub3IpOworCWRldmljZV9jcmVhdGUocmF3X2NsYXNzLCBOVUxMLCBNS0RFVihSQVdfTUFKT1IsIHJxLT5yYXdfbWlub3IpLCBOVUxMLAorCQkgICAgICAicmF3JWQiLCBycS0+cmF3X21pbm9yKTsKIH0KIAogLyoKQEAgLTI4Myw4ICsyODMsNyBAQAogCQlyZXQgPSBQVFJfRVJSKHJhd19jbGFzcyk7CiAJCWdvdG8gZXJyb3JfcmVnaW9uOwogCX0KLQlkZXZpY2VfY3JlYXRlX2RydmRhdGEocmF3X2NsYXNzLCBOVUxMLCBNS0RFVihSQVdfTUFKT1IsIDApLCBOVUxMLAotCQkJICAgICAgInJhd2N0bCIpOworCWRldmljZV9jcmVhdGUocmF3X2NsYXNzLCBOVUxMLCBNS0RFVihSQVdfTUFKT1IsIDApLCBOVUxMLCAicmF3Y3RsIik7CiAKIAlyZXR1cm4gMDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3J0Yy5jIGIvZHJpdmVycy9jaGFyL3J0Yy5jCmluZGV4IGI0NzcxMGMuLjMyZGM4OTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9ydGMuYworKysgYi9kcml2ZXJzL2NoYXIvcnRjLmMKQEAgLTk2LDcgKzk2LDcgQEAKIHN0YXRpYyBpbnQgcnRjX2lycTsKICNlbmRpZgogCi0jaWZkZWYJQ09ORklHX0hQRVRfUlRDX0lSUQorI2lmZGVmCUNPTkZJR19IUEVUX0VNVUxBVEVfUlRDCiAjdW5kZWYJUlRDX0lSUQogI2VuZGlmCiAKQEAgLTUxOCwxNyArNTE4LDE3IEBACiAJCWlmICghKENNT1NfUkVBRChSVENfQ09OVFJPTCkgJiBSVENfRE1fQklOQVJZKSB8fAogCQkJCQkJCVJUQ19BTFdBWVNfQkNEKSB7CiAJCQlpZiAoc2VjIDwgNjApCi0JCQkJQklOX1RPX0JDRChzZWMpOworCQkJCXNlYyA9IGJpbjJiY2Qoc2VjKTsKIAkJCWVsc2UKIAkJCQlzZWMgPSAweGZmOwogCiAJCQlpZiAobWluIDwgNjApCi0JCQkJQklOX1RPX0JDRChtaW4pOworCQkJCW1pbiA9IGJpbjJiY2QobWluKTsKIAkJCWVsc2UKIAkJCQltaW4gPSAweGZmOwogCiAJCQlpZiAoaHJzIDwgMjQpCi0JCQkJQklOX1RPX0JDRChocnMpOworCQkJCWhycyA9IGJpbjJiY2QoaHJzKTsKIAkJCWVsc2UKIAkJCQlocnMgPSAweGZmOwogCQl9CkBAIC02MTQsMTIgKzYxNCwxMiBAQAogCiAJCWlmICghKENNT1NfUkVBRChSVENfQ09OVFJPTCkgJiBSVENfRE1fQklOQVJZKQogCQkgICAgfHwgUlRDX0FMV0FZU19CQ0QpIHsKLQkJCUJJTl9UT19CQ0Qoc2VjKTsKLQkJCUJJTl9UT19CQ0QobWluKTsKLQkJCUJJTl9UT19CQ0QoaHJzKTsKLQkJCUJJTl9UT19CQ0QoZGF5KTsKLQkJCUJJTl9UT19CQ0QobW9uKTsKLQkJCUJJTl9UT19CQ0QoeXJzKTsKKwkJCXNlYyA9IGJpbjJiY2Qoc2VjKTsKKwkJCW1pbiA9IGJpbjJiY2QobWluKTsKKwkJCWhycyA9IGJpbjJiY2QoaHJzKTsKKwkJCWRheSA9IGJpbjJiY2QoZGF5KTsKKwkJCW1vbiA9IGJpbjJiY2QobW9uKTsKKwkJCXlycyA9IGJpbjJiY2QoeXJzKTsKIAkJfQogCiAJCXNhdmVfY29udHJvbCA9IENNT1NfUkVBRChSVENfQ09OVFJPTCk7CkBAIC0xMDk5LDcgKzEwOTksNyBAQAogCXNwaW5fdW5sb2NrX2lycSgmcnRjX2xvY2spOwogCiAJaWYgKCEoY3RybCAmIFJUQ19ETV9CSU5BUlkpIHx8IFJUQ19BTFdBWVNfQkNEKQotCQlCQ0RfVE9fQklOKHllYXIpOyAgICAgICAvKiBUaGlzIHNob3VsZCBuZXZlciBoYXBwZW4uLi4gKi8KKwkJeWVhciA9IGJjZDJiaW4oeWVhcik7ICAgICAgIC8qIFRoaXMgc2hvdWxkIG5ldmVyIGhhcHBlbi4uLiAqLwogCiAJaWYgKHllYXIgPCAyMCkgewogCQllcG9jaCA9IDIwMDA7CkBAIC0xMzUyLDEzICsxMzUyLDEzIEBACiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcnRjX2xvY2ssIGZsYWdzKTsKIAogCWlmICghKGN0cmwgJiBSVENfRE1fQklOQVJZKSB8fCBSVENfQUxXQVlTX0JDRCkgewotCQlCQ0RfVE9fQklOKHJ0Y190bS0+dG1fc2VjKTsKLQkJQkNEX1RPX0JJTihydGNfdG0tPnRtX21pbik7Ci0JCUJDRF9UT19CSU4ocnRjX3RtLT50bV9ob3VyKTsKLQkJQkNEX1RPX0JJTihydGNfdG0tPnRtX21kYXkpOwotCQlCQ0RfVE9fQklOKHJ0Y190bS0+dG1fbW9uKTsKLQkJQkNEX1RPX0JJTihydGNfdG0tPnRtX3llYXIpOwotCQlCQ0RfVE9fQklOKHJ0Y190bS0+dG1fd2RheSk7CisJCXJ0Y190bS0+dG1fc2VjID0gYmNkMmJpbihydGNfdG0tPnRtX3NlYyk7CisJCXJ0Y190bS0+dG1fbWluID0gYmNkMmJpbihydGNfdG0tPnRtX21pbik7CisJCXJ0Y190bS0+dG1faG91ciA9IGJjZDJiaW4ocnRjX3RtLT50bV9ob3VyKTsKKwkJcnRjX3RtLT50bV9tZGF5ID0gYmNkMmJpbihydGNfdG0tPnRtX21kYXkpOworCQlydGNfdG0tPnRtX21vbiA9IGJjZDJiaW4ocnRjX3RtLT50bV9tb24pOworCQlydGNfdG0tPnRtX3llYXIgPSBiY2QyYmluKHJ0Y190bS0+dG1feWVhcik7CisJCXJ0Y190bS0+dG1fd2RheSA9IGJjZDJiaW4ocnRjX3RtLT50bV93ZGF5KTsKIAl9CiAKICNpZmRlZiBDT05GSUdfTUFDSF9ERUNTVEFUSU9OCkBAIC0xMzkyLDkgKzEzOTIsOSBAQAogCXNwaW5fdW5sb2NrX2lycSgmcnRjX2xvY2spOwogCiAJaWYgKCEoY3RybCAmIFJUQ19ETV9CSU5BUlkpIHx8IFJUQ19BTFdBWVNfQkNEKSB7Ci0JCUJDRF9UT19CSU4oYWxtX3RtLT50bV9zZWMpOwotCQlCQ0RfVE9fQklOKGFsbV90bS0+dG1fbWluKTsKLQkJQkNEX1RPX0JJTihhbG1fdG0tPnRtX2hvdXIpOworCQlhbG1fdG0tPnRtX3NlYyA9IGJjZDJiaW4oYWxtX3RtLT50bV9zZWMpOworCQlhbG1fdG0tPnRtX21pbiA9IGJjZDJiaW4oYWxtX3RtLT50bV9taW4pOworCQlhbG1fdG0tPnRtX2hvdXIgPSBiY2QyYmluKGFsbV90bS0+dG1faG91cik7CiAJfQogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvc25zYy5jIGIvZHJpdmVycy9jaGFyL3Nuc2MuYwppbmRleCAzY2U2MGRmLi4zMmI3NGRlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvc25zYy5jCisrKyBiL2RyaXZlcnMvY2hhci9zbnNjLmMKQEAgLTQ0NCw4ICs0NDQsOCBAQAogCQkJCWNvbnRpbnVlOwogCQkJfQogCi0JCQlkZXZpY2VfY3JlYXRlX2RydmRhdGEoc25zY19jbGFzcywgTlVMTCwgZGV2LCBOVUxMLAotCQkJCQkgICAgICAiJXMiLCBkZXZuYW1lKTsKKwkJCWRldmljZV9jcmVhdGUoc25zY19jbGFzcywgTlVMTCwgZGV2LCBOVUxMLAorCQkJCSAgICAgICIlcyIsIGRldm5hbWUpOwogCiAJCQlpYTY0X3NuX2lydHJfaW50cl9lbmFibGUoc2NkLT5zY2RfbmFzaWQsCiAJCQkJCQkgMCAvKmlnbm9yZWQgKi8gLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3N0YWxsaW9uLmMgYi9kcml2ZXJzL2NoYXIvc3RhbGxpb24uYwppbmRleCAxOWRiMWViLi45NjNiMDNmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvc3RhbGxpb24uYworKysgYi9kcml2ZXJzL2NoYXIvc3RhbGxpb24uYwpAQCAtNDA1LDkgKzQwNSw5IEBACiAKIHN0YXRpYyBpbnQJc3RsX21lbWlvY3RsKHN0cnVjdCBpbm9kZSAqaXAsIHN0cnVjdCBmaWxlICpmcCwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpOwogc3RhdGljIGludAlzdGxfYnJkaW5pdChzdHJ1Y3Qgc3RsYnJkICpicmRwKTsKLXN0YXRpYyBpbnQJc3RsX2dldHBvcnRzdGF0cyhzdHJ1Y3Qgc3RscG9ydCAqcG9ydHAsIGNvbXN0YXRzX3QgX191c2VyICpjcCk7CitzdGF0aWMgaW50CXN0bF9nZXRwb3J0c3RhdHMoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IHN0bHBvcnQgKnBvcnRwLCBjb21zdGF0c190IF9fdXNlciAqY3ApOwogc3RhdGljIGludAlzdGxfY2xycG9ydHN0YXRzKHN0cnVjdCBzdGxwb3J0ICpwb3J0cCwgY29tc3RhdHNfdCBfX3VzZXIgKmNwKTsKLXN0YXRpYyBpbnQJc3RsX3dhaXRjYXJyaWVyKHN0cnVjdCBzdGxwb3J0ICpwb3J0cCwgc3RydWN0IGZpbGUgKmZpbHApOworc3RhdGljIGludAlzdGxfd2FpdGNhcnJpZXIoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IHN0bHBvcnQgKnBvcnRwLCBzdHJ1Y3QgZmlsZSAqZmlscCk7CiAKIC8qCiAgKglDRDE0MDAgdWFydCBzcGVjaWZpYyBoYW5kbGluZyBmdW5jdGlvbnMuCkBAIC02MTIsOCArNjEyLDkgQEAKIHN0YXRpYyB2b2lkIHN0bF9jZF9jaGFuZ2Uoc3RydWN0IHN0bHBvcnQgKnBvcnRwKQogewogCXVuc2lnbmVkIGludCBvbGRzaWdzID0gcG9ydHAtPnNpZ3M7CisJc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSA9IHR0eV9wb3J0X3R0eV9nZXQoJnBvcnRwLT5wb3J0KTsKIAotCWlmICghcG9ydHAtPnBvcnQudHR5KQorCWlmICghdHR5KQogCQlyZXR1cm47CiAKIAlwb3J0cC0+c2lncyA9IHN0bF9nZXRzaWduYWxzKHBvcnRwKTsKQEAgLTYyMyw3ICs2MjQsOCBAQAogCiAJaWYgKChvbGRzaWdzICYgVElPQ01fQ0QpICYmICgocG9ydHAtPnNpZ3MgJiBUSU9DTV9DRCkgPT0gMCkpCiAJCWlmIChwb3J0cC0+cG9ydC5mbGFncyAmIEFTWU5DX0NIRUNLX0NEKQotCQkJdHR5X2hhbmd1cChwb3J0cC0+cG9ydC50dHkpOworCQkJdHR5X2hhbmd1cCh0dHkpOworCXR0eV9rcmVmX3B1dCh0dHkpOwogfQogCiAvKgpAQCAtNzM0LDcgKzczNiw3IEBACiAgKglPbiB0aGUgZmlyc3Qgb3BlbiBvZiB0aGUgZGV2aWNlIHNldHVwIHRoZSBwb3J0IGhhcmR3YXJlLCBhbmQKICAqCWluaXRpYWxpemUgdGhlIHBlciBwb3J0IGRhdGEgc3RydWN0dXJlLgogICovCi0JcG9ydHAtPnBvcnQudHR5ID0gdHR5OworCXR0eV9wb3J0X3R0eV9zZXQoJnBvcnRwLT5wb3J0LCB0dHkpOwogCXR0eS0+ZHJpdmVyX2RhdGEgPSBwb3J0cDsKIAlwb3J0cC0+cG9ydC5jb3VudCsrOwogCkBAIC03NzQsNyArNzc2LDcgQEAKICAqCXRoZW4gYWxzbyB3ZSBtaWdodCBoYXZlIHRvIHdhaXQgZm9yIGNhcnJpZXIuCiAgKi8KIAlpZiAoIShmaWxwLT5mX2ZsYWdzICYgT19OT05CTE9DSykpCi0JCWlmICgocmMgPSBzdGxfd2FpdGNhcnJpZXIocG9ydHAsIGZpbHApKSAhPSAwKQorCQlpZiAoKHJjID0gc3RsX3dhaXRjYXJyaWVyKHR0eSwgcG9ydHAsIGZpbHApKSAhPSAwKQogCQkJcmV0dXJuIHJjOwogCiAJcG9ydHAtPnBvcnQuZmxhZ3MgfD0gQVNZTkNfTk9STUFMX0FDVElWRTsKQEAgLTc4OSw3ICs3OTEsOCBAQAogICoJbWF5YmUgYmVjYXVzZSBpZiB3ZSBhcmUgY2xvY2FsIHRoZW4gd2UgZG9uJ3QgbmVlZCB0byB3YWl0Li4uCiAgKi8KIAotc3RhdGljIGludCBzdGxfd2FpdGNhcnJpZXIoc3RydWN0IHN0bHBvcnQgKnBvcnRwLCBzdHJ1Y3QgZmlsZSAqZmlscCkKK3N0YXRpYyBpbnQgc3RsX3dhaXRjYXJyaWVyKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBzdGxwb3J0ICpwb3J0cCwKKwkJCQkJCQlzdHJ1Y3QgZmlsZSAqZmlscCkKIHsKIAl1bnNpZ25lZCBsb25nCWZsYWdzOwogCWludAkJcmMsIGRvY2xvY2FsOwpAQCAtODAxLDcgKzgwNCw3IEBACiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmc3RhbGxpb25fbG9jaywgZmxhZ3MpOwogCi0JaWYgKHBvcnRwLT5wb3J0LnR0eS0+dGVybWlvcy0+Y19jZmxhZyAmIENMT0NBTCkKKwlpZiAodHR5LT50ZXJtaW9zLT5jX2NmbGFnICYgQ0xPQ0FMKQogCQlkb2Nsb2NhbCsrOwogCiAJcG9ydHAtPm9wZW53YWl0Y250Kys7CkBAIC04NDYsOCArODQ5LDYgQEAKIAogCXByX2RlYnVnKCJzdGxfZmx1c2hidWZmZXIodHR5PSVwKVxuIiwgdHR5KTsKIAotCWlmICh0dHkgPT0gTlVMTCkKLQkJcmV0dXJuOwogCXBvcnRwID0gdHR5LT5kcml2ZXJfZGF0YTsKIAlpZiAocG9ydHAgPT0gTlVMTCkKIAkJcmV0dXJuOwpAQCAtODY1LDggKzg2Niw2IEBACiAKIAlwcl9kZWJ1Zygic3RsX3dhaXR1bnRpbHNlbnQodHR5PSVwLHRpbWVvdXQ9JWQpXG4iLCB0dHksIHRpbWVvdXQpOwogCi0JaWYgKHR0eSA9PSBOVUxMKQotCQlyZXR1cm47CiAJcG9ydHAgPSB0dHktPmRyaXZlcl9kYXRhOwogCWlmIChwb3J0cCA9PSBOVUxMKQogCQlyZXR1cm47CkBAIC05NDksNyArOTQ4LDcgQEAKIAl0dHlfbGRpc2NfZmx1c2godHR5KTsKIAogCXR0eS0+Y2xvc2luZyA9IDA7Ci0JcG9ydHAtPnBvcnQudHR5ID0gTlVMTDsKKwl0dHlfcG9ydF90dHlfc2V0KCZwb3J0cC0+cG9ydCwgTlVMTCk7CiAKIAlpZiAocG9ydHAtPm9wZW53YWl0Y250KSB7CiAJCWlmIChwb3J0cC0+Y2xvc2VfZGVsYXkpCkBAIC0xMDMzLDggKzEwMzIsNiBAQAogCiAJcHJfZGVidWcoInN0bF9wdXRjaGFyKHR0eT0lcCxjaD0leClcbiIsIHR0eSwgY2gpOwogCi0JaWYgKHR0eSA9PSBOVUxMKQotCQlyZXR1cm4gLUVJTlZBTDsKIAlwb3J0cCA9IHR0eS0+ZHJpdmVyX2RhdGE7CiAJaWYgKHBvcnRwID09IE5VTEwpCiAJCXJldHVybiAtRUlOVkFMOwpAQCAtMTA3MCw4ICsxMDY3LDYgQEAKIAogCXByX2RlYnVnKCJzdGxfZmx1c2hjaGFycyh0dHk9JXApXG4iLCB0dHkpOwogCi0JaWYgKHR0eSA9PSBOVUxMKQotCQlyZXR1cm47CiAJcG9ydHAgPSB0dHktPmRyaXZlcl9kYXRhOwogCWlmIChwb3J0cCA9PSBOVUxMKQogCQlyZXR1cm47CkBAIC0xMDkwLDggKzEwODUsNiBAQAogCiAJcHJfZGVidWcoInN0bF93cml0ZXJvb20odHR5PSVwKVxuIiwgdHR5KTsKIAotCWlmICh0dHkgPT0gTlVMTCkKLQkJcmV0dXJuIDA7CiAJcG9ydHAgPSB0dHktPmRyaXZlcl9kYXRhOwogCWlmIChwb3J0cCA9PSBOVUxMKQogCQlyZXR1cm4gMDsKQEAgLTExMjIsOCArMTExNSw2IEBACiAKIAlwcl9kZWJ1Zygic3RsX2NoYXJzaW5idWZmZXIodHR5PSVwKVxuIiwgdHR5KTsKIAotCWlmICh0dHkgPT0gTlVMTCkKLQkJcmV0dXJuIDA7CiAJcG9ydHAgPSB0dHktPmRyaXZlcl9kYXRhOwogCWlmIChwb3J0cCA9PSBOVUxMKQogCQlyZXR1cm4gMDsKQEAgLTExODMsOCArMTE3NCw5IEBACiAgKglqdXN0IHF1aWV0bHkgaWdub3JlIGFueSByZXF1ZXN0cyB0byBjaGFuZ2UgaXJxLCBldGMuCiAgKi8KIAotc3RhdGljIGludCBzdGxfc2V0c2VyaWFsKHN0cnVjdCBzdGxwb3J0ICpwb3J0cCwgc3RydWN0IHNlcmlhbF9zdHJ1Y3QgX191c2VyICpzcCkKK3N0YXRpYyBpbnQgc3RsX3NldHNlcmlhbChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3Qgc2VyaWFsX3N0cnVjdCBfX3VzZXIgKnNwKQogeworCXN0cnVjdCBzdGxwb3J0ICoJcG9ydHAgPSB0dHktPmRyaXZlcl9kYXRhOwogCXN0cnVjdCBzZXJpYWxfc3RydWN0CXNpbzsKIAogCXByX2RlYnVnKCJzdGxfc2V0c2VyaWFsKHBvcnRwPSVwLHNwPSVwKVxuIiwgcG9ydHAsIHNwKTsKQEAgLTEyMDUsNyArMTE5Nyw3IEBACiAJcG9ydHAtPmNsb3NlX2RlbGF5ID0gc2lvLmNsb3NlX2RlbGF5OwogCXBvcnRwLT5jbG9zaW5nX3dhaXQgPSBzaW8uY2xvc2luZ193YWl0OwogCXBvcnRwLT5jdXN0b21fZGl2aXNvciA9IHNpby5jdXN0b21fZGl2aXNvcjsKLQlzdGxfc2V0cG9ydChwb3J0cCwgcG9ydHAtPnBvcnQudHR5LT50ZXJtaW9zKTsKKwlzdGxfc2V0cG9ydChwb3J0cCwgdHR5LT50ZXJtaW9zKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTIxNSw4ICsxMjA3LDYgQEAKIHsKIAlzdHJ1Y3Qgc3RscG9ydAkqcG9ydHA7CiAKLQlpZiAodHR5ID09IE5VTEwpCi0JCXJldHVybiAtRU5PREVWOwogCXBvcnRwID0gdHR5LT5kcml2ZXJfZGF0YTsKIAlpZiAocG9ydHAgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9ERVY7CkBAIC0xMjMyLDggKzEyMjIsNiBAQAogCXN0cnVjdCBzdGxwb3J0CSpwb3J0cDsKIAlpbnQgcnRzID0gLTEsIGR0ciA9IC0xOwogCi0JaWYgKHR0eSA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT0RFVjsKIAlwb3J0cCA9IHR0eS0+ZHJpdmVyX2RhdGE7CiAJaWYgKHBvcnRwID09IE5VTEwpCiAJCXJldHVybiAtRU5PREVWOwpAQCAtMTI2Miw4ICsxMjUwLDYgQEAKIAlwcl9kZWJ1Zygic3RsX2lvY3RsKHR0eT0lcCxmaWxlPSVwLGNtZD0leCxhcmc9JWx4KVxuIiwgdHR5LCBmaWxlLCBjbWQsCiAJCQlhcmcpOwogCi0JaWYgKHR0eSA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT0RFVjsKIAlwb3J0cCA9IHR0eS0+ZHJpdmVyX2RhdGE7CiAJaWYgKHBvcnRwID09IE5VTEwpCiAJCXJldHVybiAtRU5PREVWOwpAQCAtMTI4MiwxMCArMTI2OCwxMCBAQAogCQlyYyA9IHN0bF9nZXRzZXJpYWwocG9ydHAsIGFyZ3ApOwogCQlicmVhazsKIAljYXNlIFRJT0NTU0VSSUFMOgotCQlyYyA9IHN0bF9zZXRzZXJpYWwocG9ydHAsIGFyZ3ApOworCQlyYyA9IHN0bF9zZXRzZXJpYWwodHR5LCBhcmdwKTsKIAkJYnJlYWs7CiAJY2FzZSBDT01fR0VUUE9SVFNUQVRTOgotCQlyYyA9IHN0bF9nZXRwb3J0c3RhdHMocG9ydHAsIGFyZ3ApOworCQlyYyA9IHN0bF9nZXRwb3J0c3RhdHModHR5LCBwb3J0cCwgYXJncCk7CiAJCWJyZWFrOwogCWNhc2UgQ09NX0NMUlBPUlRTVEFUUzoKIAkJcmMgPSBzdGxfY2xycG9ydHN0YXRzKHBvcnRwLCBhcmdwKTsKQEAgLTEzMTcsOCArMTMwMyw2IEBACiAKIAlwcl9kZWJ1Zygic3RsX3N0YXJ0KHR0eT0lcClcbiIsIHR0eSk7CiAKLQlpZiAodHR5ID09IE5VTEwpCi0JCXJldHVybjsKIAlwb3J0cCA9IHR0eS0+ZHJpdmVyX2RhdGE7CiAJaWYgKHBvcnRwID09IE5VTEwpCiAJCXJldHVybjsKQEAgLTEzMzQsOCArMTMxOCw2IEBACiAKIAlwcl9kZWJ1Zygic3RsX3NldHRlcm1pb3ModHR5PSVwLG9sZD0lcClcbiIsIHR0eSwgb2xkKTsKIAotCWlmICh0dHkgPT0gTlVMTCkKLQkJcmV0dXJuOwogCXBvcnRwID0gdHR5LT5kcml2ZXJfZGF0YTsKIAlpZiAocG9ydHAgPT0gTlVMTCkKIAkJcmV0dXJuOwpAQCAtMTM2OSw4ICsxMzUxLDYgQEAKIAogCXByX2RlYnVnKCJzdGxfdGhyb3R0bGUodHR5PSVwKVxuIiwgdHR5KTsKIAotCWlmICh0dHkgPT0gTlVMTCkKLQkJcmV0dXJuOwogCXBvcnRwID0gdHR5LT5kcml2ZXJfZGF0YTsKIAlpZiAocG9ydHAgPT0gTlVMTCkKIAkJcmV0dXJuOwpAQCAtMTM4OSw4ICsxMzY5LDYgQEAKIAogCXByX2RlYnVnKCJzdGxfdW50aHJvdHRsZSh0dHk9JXApXG4iLCB0dHkpOwogCi0JaWYgKHR0eSA9PSBOVUxMKQotCQlyZXR1cm47CiAJcG9ydHAgPSB0dHktPmRyaXZlcl9kYXRhOwogCWlmIChwb3J0cCA9PSBOVUxMKQogCQlyZXR1cm47CkBAIC0xNDEwLDggKzEzODgsNiBAQAogCiAJcHJfZGVidWcoInN0bF9zdG9wKHR0eT0lcClcbiIsIHR0eSk7CiAKLQlpZiAodHR5ID09IE5VTEwpCi0JCXJldHVybjsKIAlwb3J0cCA9IHR0eS0+ZHJpdmVyX2RhdGE7CiAJaWYgKHBvcnRwID09IE5VTEwpCiAJCXJldHVybjsKQEAgLTE0MzIsOCArMTQwOCw2IEBACiAKIAlwcl9kZWJ1Zygic3RsX2hhbmd1cCh0dHk9JXApXG4iLCB0dHkpOwogCi0JaWYgKHR0eSA9PSBOVUxMKQotCQlyZXR1cm47CiAJcG9ydHAgPSB0dHktPmRyaXZlcl9kYXRhOwogCWlmIChwb3J0cCA9PSBOVUxMKQogCQlyZXR1cm47CkBAIC0xNDUyLDcgKzE0MjYsNyBAQAogCQlwb3J0cC0+dHguaGVhZCA9IE5VTEw7CiAJCXBvcnRwLT50eC50YWlsID0gTlVMTDsKIAl9Ci0JcG9ydHAtPnBvcnQudHR5ID0gTlVMTDsKKwl0dHlfcG9ydF90dHlfc2V0KCZwb3J0cC0+cG9ydCwgTlVMTCk7CiAJcG9ydHAtPnBvcnQuZmxhZ3MgJj0gfkFTWU5DX05PUk1BTF9BQ1RJVkU7CiAJcG9ydHAtPnBvcnQuY291bnQgPSAwOwogCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmcG9ydHAtPnBvcnQub3Blbl93YWl0KTsKQEAgLTE0NjYsOCArMTQ0MCw2IEBACiAKIAlwcl9kZWJ1Zygic3RsX2JyZWFrY3RsKHR0eT0lcCxzdGF0ZT0lZClcbiIsIHR0eSwgc3RhdGUpOwogCi0JaWYgKHR0eSA9PSBOVUxMKQotCQlyZXR1cm4gLUVJTlZBTDsKIAlwb3J0cCA9IHR0eS0+ZHJpdmVyX2RhdGE7CiAJaWYgKHBvcnRwID09IE5VTEwpCiAJCXJldHVybiAtRUlOVkFMOwpAQCAtMTQ4NCw4ICsxNDU2LDYgQEAKIAogCXByX2RlYnVnKCJzdGxfc2VuZHhjaGFyKHR0eT0lcCxjaD0leClcbiIsIHR0eSwgY2gpOwogCi0JaWYgKHR0eSA9PSBOVUxMKQotCQlyZXR1cm47CiAJcG9ydHAgPSB0dHktPmRyaXZlcl9kYXRhOwogCWlmIChwb3J0cCA9PSBOVUxMKQogCQlyZXR1cm47CkBAIC0xODA1LDcgKzE3NzUsNyBAQAogCQkJCSIoc2l6ZT0lWmQpXG4iLCBzaXplb2Yoc3RydWN0IHN0bHBvcnQpKTsKIAkJCWJyZWFrOwogCQl9Ci0KKwkJdHR5X3BvcnRfaW5pdCgmcG9ydHAtPnBvcnQpOwogCQlwb3J0cC0+bWFnaWMgPSBTVExfUE9SVE1BR0lDOwogCQlwb3J0cC0+cG9ydG5yID0gaTsKIAkJcG9ydHAtPmJyZG5yID0gcGFuZWxwLT5icmRucjsKQEAgLTE4MzIsNiArMTgwMiw3IEBACiAJc3RydWN0IHN0bHBhbmVsICpwYW5lbHA7CiAJc3RydWN0IHN0bHBvcnQgKnBvcnRwOwogCXVuc2lnbmVkIGludCBqLCBrOworCXN0cnVjdCB0dHlfc3RydWN0ICp0dHk7CiAKIAlmb3IgKGogPSAwOyBqIDwgU1RMX01BWFBBTkVMUzsgaisrKSB7CiAJCXBhbmVscCA9IGJyZHAtPnBhbmVsc1tqXTsKQEAgLTE4NDEsOCArMTgxMiwxMSBAQAogCQkJcG9ydHAgPSBwYW5lbHAtPnBvcnRzW2tdOwogCQkJaWYgKHBvcnRwID09IE5VTEwpCiAJCQkJY29udGludWU7Ci0JCQlpZiAocG9ydHAtPnBvcnQudHR5ICE9IE5VTEwpCi0JCQkJc3RsX2hhbmd1cChwb3J0cC0+cG9ydC50dHkpOworCQkJdHR5ID0gdHR5X3BvcnRfdHR5X2dldCgmcG9ydHAtPnBvcnQpOworCQkJaWYgKHR0eSAhPSBOVUxMKSB7CisJCQkJc3RsX2hhbmd1cCh0dHkpOworCQkJCXR0eV9rcmVmX3B1dCh0dHkpOworCQkJfQogCQkJa2ZyZWUocG9ydHAtPnR4LmJ1Zik7CiAJCQlrZnJlZShwb3J0cCk7CiAJCX0KQEAgLTI0OTgsNyArMjQ3Miw3IEBACiAgKgl3aGF0IHBvcnQgdG8gZ2V0IHN0YXRzIGZvciAodXNlZCB0aHJvdWdoIGJvYXJkIGNvbnRyb2wgZGV2aWNlKS4KICAqLwogCi1zdGF0aWMgaW50IHN0bF9nZXRwb3J0c3RhdHMoc3RydWN0IHN0bHBvcnQgKnBvcnRwLCBjb21zdGF0c190IF9fdXNlciAqY3ApCitzdGF0aWMgaW50IHN0bF9nZXRwb3J0c3RhdHMoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IHN0bHBvcnQgKnBvcnRwLCBjb21zdGF0c190IF9fdXNlciAqY3ApCiB7CiAJY29tc3RhdHNfdAlzdGxfY29tc3RhdHM7CiAJdW5zaWduZWQgY2hhcgkqaGVhZCwgKnRhaWw7CkBAIC0yNTI1LDE4ICsyNDk5LDE3IEBACiAJcG9ydHAtPnN0YXRzLnJ4YnVmZmVyZWQgPSAwOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnN0YWxsaW9uX2xvY2ssIGZsYWdzKTsKLQlpZiAocG9ydHAtPnBvcnQudHR5ICE9IE5VTEwpCi0JCWlmIChwb3J0cC0+cG9ydC50dHktPmRyaXZlcl9kYXRhID09IHBvcnRwKSB7Ci0JCQlwb3J0cC0+c3RhdHMudHR5c3RhdGUgPSBwb3J0cC0+cG9ydC50dHktPmZsYWdzOwotCQkJLyogTm8gbG9uZ2VyIGF2YWlsYWJsZSBhcyBhIHN0YXRpc3RpYyAqLwotCQkJcG9ydHAtPnN0YXRzLnJ4YnVmZmVyZWQgPSAxOyAvKnBvcnRwLT5wb3J0LnR0eS0+ZmxpcC5jb3VudDsgKi8KLQkJCWlmIChwb3J0cC0+cG9ydC50dHktPnRlcm1pb3MgIT0gTlVMTCkgewotCQkJCXBvcnRwLT5zdGF0cy5jZmxhZ3MgPSBwb3J0cC0+cG9ydC50dHktPnRlcm1pb3MtPmNfY2ZsYWc7Ci0JCQkJcG9ydHAtPnN0YXRzLmlmbGFncyA9IHBvcnRwLT5wb3J0LnR0eS0+dGVybWlvcy0+Y19pZmxhZzsKLQkJCQlwb3J0cC0+c3RhdHMub2ZsYWdzID0gcG9ydHAtPnBvcnQudHR5LT50ZXJtaW9zLT5jX29mbGFnOwotCQkJCXBvcnRwLT5zdGF0cy5sZmxhZ3MgPSBwb3J0cC0+cG9ydC50dHktPnRlcm1pb3MtPmNfbGZsYWc7Ci0JCQl9CisJaWYgKHR0eSAhPSBOVUxMICYmIHBvcnRwLT5wb3J0LnR0eSA9PSB0dHkpIHsKKwkJcG9ydHAtPnN0YXRzLnR0eXN0YXRlID0gdHR5LT5mbGFnczsKKwkJLyogTm8gbG9uZ2VyIGF2YWlsYWJsZSBhcyBhIHN0YXRpc3RpYyAqLworCQlwb3J0cC0+c3RhdHMucnhidWZmZXJlZCA9IDE7IC8qdHR5LT5mbGlwLmNvdW50OyAqLworCQlpZiAodHR5LT50ZXJtaW9zICE9IE5VTEwpIHsKKwkJCXBvcnRwLT5zdGF0cy5jZmxhZ3MgPSB0dHktPnRlcm1pb3MtPmNfY2ZsYWc7CisJCQlwb3J0cC0+c3RhdHMuaWZsYWdzID0gdHR5LT50ZXJtaW9zLT5jX2lmbGFnOworCQkJcG9ydHAtPnN0YXRzLm9mbGFncyA9IHR0eS0+dGVybWlvcy0+Y19vZmxhZzsKKwkJCXBvcnRwLT5zdGF0cy5sZmxhZ3MgPSB0dHktPnRlcm1pb3MtPmNfbGZsYWc7CiAJCX0KKwl9CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc3RhbGxpb25fbG9jaywgZmxhZ3MpOwogCiAJaGVhZCA9IHBvcnRwLT50eC5oZWFkOwpAQCAtMjY0MCw3ICsyNjEzLDcgQEAKIAogCXN3aXRjaCAoY21kKSB7CiAJY2FzZSBDT01fR0VUUE9SVFNUQVRTOgotCQlyYyA9IHN0bF9nZXRwb3J0c3RhdHMoTlVMTCwgYXJncCk7CisJCXJjID0gc3RsX2dldHBvcnRzdGF0cyhOVUxMLCBOVUxMLCBhcmdwKTsKIAkJYnJlYWs7CiAJY2FzZSBDT01fQ0xSUE9SVFNUQVRTOgogCQlyYyA9IHN0bF9jbHJwb3J0c3RhdHMoTlVMTCwgYXJncCk7CkBAIC0zMjQzLDcgKzMyMTYsNyBAQAogCiAJaWYgKHBvcnRwID09IE5VTEwpCiAJCXJldHVybjsKLQl0dHkgPSBwb3J0cC0+cG9ydC50dHk7CisJdHR5ID0gdHR5X3BvcnRfdHR5X2dldCgmcG9ydHAtPnBvcnQpOwogCWlmICh0dHkgPT0gTlVMTCkKIAkJcmV0dXJuOwogCkBAIC0zMjg4LDYgKzMyNjEsNyBAQAogCiAJQlJERElTQUJMRShwb3J0cC0+YnJkbnIpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJyZF9sb2NrLCBmbGFncyk7CisJdHR5X2tyZWZfcHV0KHR0eSk7CiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTMzMDUsNyArMzI3OSw3IEBACiAKIAlpZiAocG9ydHAgPT0gTlVMTCkKIAkJcmV0dXJuOwotCXR0eSA9IHBvcnRwLT5wb3J0LnR0eTsKKwl0dHkgPSB0dHlfcG9ydF90dHlfZ2V0KCZwb3J0cC0+cG9ydCk7CiAJaWYgKHR0eSA9PSBOVUxMKQogCQlyZXR1cm47CiAKQEAgLTMzMjUsNiArMzI5OSw3IEBACiAJfQogCUJSRERJU0FCTEUocG9ydHAtPmJyZG5yKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZicmRfbG9jaywgZmxhZ3MpOworCXR0eV9rcmVmX3B1dCh0dHkpOwogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC0zNDc4LDYgKzM0NTMsNyBAQAogCWludAkJbGVuLCBzdGxlbjsKIAljaGFyCQkqaGVhZCwgKnRhaWw7CiAJdW5zaWduZWQgY2hhcglpb2Fjaywgc3JlcjsKKwlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5OwogCiAJcHJfZGVidWcoInN0bF9jZDE0MDB0eGlzcihwYW5lbHA9JXAsaW9hZGRyPSV4KVxuIiwgcGFuZWxwLCBpb2FkZHIpOwogCkBAIC0zNTA0LDggKzM0ODAsMTEgQEAKIAlpZiAoKGxlbiA9PSAwKSB8fCAoKGxlbiA8IFNUTF9UWEJVRkxPVykgJiYKIAkgICAgKHRlc3RfYml0KEFTWUlfVFhMT1csICZwb3J0cC0+aXN0YXRlKSA9PSAwKSkpIHsKIAkJc2V0X2JpdChBU1lJX1RYTE9XLCAmcG9ydHAtPmlzdGF0ZSk7Ci0JCWlmIChwb3J0cC0+cG9ydC50dHkpCi0JCQl0dHlfd2FrZXVwKHBvcnRwLT5wb3J0LnR0eSk7CisJCXR0eSA9IHR0eV9wb3J0X3R0eV9nZXQoJnBvcnRwLT5wb3J0KTsKKwkJaWYgKHR0eSkgeworCQkJdHR5X3dha2V1cCh0dHkpOworCQkJdHR5X2tyZWZfcHV0KHR0eSk7CisJCX0KIAl9CiAKIAlpZiAobGVuID09IDApIHsKQEAgLTM1NjksNyArMzU0OCw3IEBACiAJCXJldHVybjsKIAl9CiAJcG9ydHAgPSBwYW5lbHAtPnBvcnRzWyhpb2FjayA+PiAzKV07Ci0JdHR5ID0gcG9ydHAtPnBvcnQudHR5OworCXR0eSA9IHR0eV9wb3J0X3R0eV9nZXQoJnBvcnRwLT5wb3J0KTsKIAogCWlmICgoaW9hY2sgJiBBQ0tfVFlQTUFTSykgPT0gQUNLX1RZUFJYR09PRCkgewogCQlvdXRiKChSRENSICsgcG9ydHAtPnVhcnRhZGRyKSwgaW9hZGRyKTsKQEAgLTM2MzMsMTAgKzM2MTIsMTIgQEAKIAkJfQogCX0gZWxzZSB7CiAJCXByaW50aygiU1RBTExJT046IGJhZCBSWCBpbnRlcnJ1cHQgYWNrIHZhbHVlPSV4XG4iLCBpb2Fjayk7CisJCXR0eV9rcmVmX3B1dCh0dHkpOwogCQlyZXR1cm47CiAJfQogCiBzdGxfcnhhbGxkb25lOgorCXR0eV9rcmVmX3B1dCh0dHkpOwogCW91dGIoKEVPU1JSICsgcG9ydHAtPnVhcnRhZGRyKSwgaW9hZGRyKTsKIAlvdXRiKDAsIChpb2FkZHIgKyBFUkVHX0RBVEEpKTsKIH0KQEAgLTQxNzUsNyArNDE1Niw3IEBACiAKIAlpZiAocG9ydHAgPT0gTlVMTCkKIAkJcmV0dXJuOwotCXR0eSA9IHBvcnRwLT5wb3J0LnR0eTsKKwl0dHkgPSB0dHlfcG9ydF90dHlfZ2V0KCZwb3J0cC0+cG9ydCk7CiAJaWYgKHR0eSA9PSBOVUxMKQogCQlyZXR1cm47CiAKQEAgLTQyMjYsNiArNDIwNyw3IEBACiAKIAlCUkRESVNBQkxFKHBvcnRwLT5icmRucik7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYnJkX2xvY2ssIGZsYWdzKTsKKwl0dHlfa3JlZl9wdXQodHR5KTsKIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpAQCAtNDI0NCw3ICs0MjI2LDcgQEAKIAogCWlmIChwb3J0cCA9PSBOVUxMKQogCQlyZXR1cm47Ci0JdHR5ID0gcG9ydHAtPnBvcnQudHR5OworCXR0eSA9IHR0eV9wb3J0X3R0eV9nZXQoJnBvcnRwLT5wb3J0KTsKIAlpZiAodHR5ID09IE5VTEwpCiAJCXJldHVybjsKIApAQCAtNDI2OSw2ICs0MjUxLDcgQEAKIAl9CiAJQlJERElTQUJMRShwb3J0cC0+YnJkbnIpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJyZF9sb2NrLCBmbGFncyk7CisJdHR5X2tyZWZfcHV0KHR0eSk7CiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTQ0MDgsNiArNDM5MSw3IEBACiAKIHN0YXRpYyB2b2lkIHN0bF9zYzI2MTk4dHhpc3Ioc3RydWN0IHN0bHBvcnQgKnBvcnRwKQogeworCXN0cnVjdCB0dHlfc3RydWN0ICp0dHk7CiAJdW5zaWduZWQgaW50CWlvYWRkcjsKIAl1bnNpZ25lZCBjaGFyCW1yMDsKIAlpbnQJCWxlbiwgc3RsZW47CkBAIC00NDIyLDggKzQ0MDYsMTEgQEAKIAlpZiAoKGxlbiA9PSAwKSB8fCAoKGxlbiA8IFNUTF9UWEJVRkxPVykgJiYKIAkgICAgKHRlc3RfYml0KEFTWUlfVFhMT1csICZwb3J0cC0+aXN0YXRlKSA9PSAwKSkpIHsKIAkJc2V0X2JpdChBU1lJX1RYTE9XLCAmcG9ydHAtPmlzdGF0ZSk7Ci0JCWlmIChwb3J0cC0+cG9ydC50dHkpCi0JCQl0dHlfd2FrZXVwKHBvcnRwLT5wb3J0LnR0eSk7CisJCXR0eSA9IHR0eV9wb3J0X3R0eV9nZXQoJnBvcnRwLT5wb3J0KTsKKwkJaWYgKHR0eSkgeworCQkJdHR5X3dha2V1cCh0dHkpOworCQkJdHR5X2tyZWZfcHV0KHR0eSk7CisJCX0KIAl9CiAKIAlpZiAobGVuID09IDApIHsKQEAgLTQ0NzYsNyArNDQ2Myw3IEBACiAKIAlwcl9kZWJ1Zygic3RsX3NjMjYxOThyeGlzcihwb3J0cD0lcCxpYWNrPSV4KVxuIiwgcG9ydHAsIGlhY2spOwogCi0JdHR5ID0gcG9ydHAtPnBvcnQudHR5OworCXR0eSA9IHR0eV9wb3J0X3R0eV9nZXQoJnBvcnRwLT5wb3J0KTsKIAlpb2FkZHIgPSBwb3J0cC0+aW9hZGRyOwogCW91dGIoR0lCQ1IsIChpb2FkZHIgKyBYUF9BRERSKSk7CiAJbGVuID0gaW5iKGlvYWRkciArIFhQX0RBVEEpICsgMTsKQEAgLTQ1MTUsNiArNDUwMiw3IEBACiAJCQlzdGxfc2MyNjE5OHR4dW5mbG93KHBvcnRwLCB0dHkpOwogCQl9CiAJfQorCXR0eV9rcmVmX3B1dCh0dHkpOwogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC00NTI4LDcgKzQ1MTYsNyBAQAogCXN0cnVjdCB0dHlfc3RydWN0CSp0dHk7CiAJdW5zaWduZWQgaW50CQlpb2FkZHI7CiAKLQl0dHkgPSBwb3J0cC0+cG9ydC50dHk7CisJdHR5ID0gdHR5X3BvcnRfdHR5X2dldCgmcG9ydHAtPnBvcnQpOwogCWlvYWRkciA9IHBvcnRwLT5pb2FkZHI7CiAKIAlpZiAoc3RhdHVzICYgU1JfUlhQQVJJVFkpCkBAIC00NTY2LDYgKzQ1NTQsNyBAQAogCQlpZiAoc3RhdHVzID09IDApCiAJCQlwb3J0cC0+c3RhdHMucnh0b3RhbCsrOwogCX0KKwl0dHlfa3JlZl9wdXQodHR5KTsKIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpAQCAtNDc1NCw4ICs0NzQzLDggQEAKIAlpZiAoSVNfRVJSKHN0YWxsaW9uX2NsYXNzKSkKIAkJcHJpbnRrKCJTVEFMTElPTjogZmFpbGVkIHRvIGNyZWF0ZSBjbGFzc1xuIik7CiAJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykKLQkJZGV2aWNlX2NyZWF0ZV9kcnZkYXRhKHN0YWxsaW9uX2NsYXNzLCBOVUxMLCBNS0RFVihTVExfU0lPTUVNTUFKT1IsIGkpLAotCQkJCSAgICAgIE5VTEwsICJzdGFsaW9tZW0lZCIsIGkpOworCQlkZXZpY2VfY3JlYXRlKHN0YWxsaW9uX2NsYXNzLCBOVUxMLCBNS0RFVihTVExfU0lPTUVNTUFKT1IsIGkpLAorCQkJICAgICAgTlVMTCwgInN0YWxpb21lbSVkIiwgaSk7CiAKIAlyZXR1cm4gMDsKIGVycl91bnJ0dHk6CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvc3guYyBiL2RyaXZlcnMvY2hhci9zeC5jCmluZGV4IGMzODUyMDYuLmJhNGU4NjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9zeC5jCisrKyBiL2RyaXZlcnMvY2hhci9zeC5jCkBAIC0yNTA0LDcgKzI1MDQsNyBAQAogCQlkZWxfdGltZXIoJmJvYXJkLT50aW1lcik7CiAJCWlmIChwZGV2KSB7CiAjaWZkZWYgQ09ORklHX1BDSQotCQkJcGNpX2lvdW5tYXAocGRldiwgYm9hcmQtPmJhc2UpOworCQkJaW91bm1hcChib2FyZC0+YmFzZTIpOwogCQkJcGNpX3JlbGVhc2VfcmVnaW9uKHBkZXYsIElTX0NGX0JPQVJEKGJvYXJkKSA/IDMgOiAyKTsKICNlbmRpZgogCQl9IGVsc2UgewpAQCAtMjY3Nyw3ICsyNjc3LDcgQEAKIAl9CiAJYm9hcmQtPmh3X2Jhc2UgPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgcmVnKTsKIAlib2FyZC0+YmFzZTIgPQotCWJvYXJkLT5iYXNlID0gcGNpX2lvbWFwKHBkZXYsIHJlZywgV0lORE9XX0xFTihib2FyZCkpOworCWJvYXJkLT5iYXNlID0gaW9yZW1hcF9ub2NhY2hlKGJvYXJkLT5od19iYXNlLCBXSU5ET1dfTEVOKGJvYXJkKSk7CiAJaWYgKCFib2FyZC0+YmFzZSkgewogCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJpb3JlbWFwIGZhaWxlZFxuIik7CiAJCWdvdG8gZXJyX3JlZzsKQEAgLTI3MDMsNyArMjcwMyw3IEBACiAKIAlyZXR1cm4gMDsKIGVycl91bm1hcDoKLQlwY2lfaW91bm1hcChwZGV2LCBib2FyZC0+YmFzZSk7CisJaW91bm1hcChib2FyZC0+YmFzZTIpOwogZXJyX3JlZzoKIAlwY2lfcmVsZWFzZV9yZWdpb24ocGRldiwgcmVnKTsKIGVycl9mbGFnOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3N5c3JxLmMgYi9kcml2ZXJzL2NoYXIvc3lzcnEuYwppbmRleCA4ZmRmZTljLi5jZTBkOWRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvc3lzcnEuYworKysgYi9kcml2ZXJzL2NoYXIvc3lzcnEuYwpAQCAtMjMsNiArMjMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3JlYm9vdC5oPgogI2luY2x1ZGUgPGxpbnV4L3N5c3JxLmg+CiAjaW5jbHVkZSA8bGludXgva2JkX2tlcm4uaD4KKyNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvcXVvdGFvcHMuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KQEAgLTE2Nyw3ICsxNjgsNyBAQAogc3RhdGljIHN0cnVjdCBzeXNycV9rZXlfb3Agc3lzcnFfc2hvd190aW1lcnNfb3AgPSB7CiAJLmhhbmRsZXIJPSBzeXNycV9oYW5kbGVfc2hvd190aW1lcnMsCiAJLmhlbHBfbXNnCT0gInNob3ctYWxsLXRpbWVycyhRKSIsCi0JLmFjdGlvbl9tc2cJPSAiU2hvdyBQZW5kaW5nIFRpbWVycyIsCisJLmFjdGlvbl9tc2cJPSAiU2hvdyBjbG9ja2V2ZW50IGRldmljZXMgJiBwZW5kaW5nIGhydGltZXJzIChubyBvdGhlcnMpIiwKIH07CiAKIHN0YXRpYyB2b2lkIHN5c3JxX2hhbmRsZV9tb3VudHJvKGludCBrZXksIHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCkBAIC0zMjYsNiArMzI3LDcgQEAKIAkuaGFuZGxlcgk9IHN5c3JxX2hhbmRsZV9tb29tLAogCS5oZWxwX21zZwk9ICJGdWxsIiwKIAkuYWN0aW9uX21zZwk9ICJNYW51YWwgT09NIGV4ZWN1dGlvbiIsCisJLmVuYWJsZV9tYXNrCT0gU1lTUlFfRU5BQkxFX1NJR05BTCwKIH07CiAKIHN0YXRpYyB2b2lkIHN5c3JxX2hhbmRsZV9raWxsKGludCBrZXksIHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCkBAIC01MzMsMyArNTM1LDMyIEBACiAJcmV0dXJuIF9fc3lzcnFfc3dhcF9rZXlfb3BzKGtleSwgTlVMTCwgb3BfcCk7CiB9CiBFWFBPUlRfU1lNQk9MKHVucmVnaXN0ZXJfc3lzcnFfa2V5KTsKKworI2lmZGVmIENPTkZJR19QUk9DX0ZTCisvKgorICogd3JpdGluZyAnQycgdG8gL3Byb2Mvc3lzcnEtdHJpZ2dlciBpcyBsaWtlIHN5c3JxLUMKKyAqLworc3RhdGljIHNzaXplX3Qgd3JpdGVfc3lzcnFfdHJpZ2dlcihzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZiwKKwkJCQkgICBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKK3sKKwlpZiAoY291bnQpIHsKKwkJY2hhciBjOworCisJCWlmIChnZXRfdXNlcihjLCBidWYpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisJCV9faGFuZGxlX3N5c3JxKGMsIE5VTEwsIDApOworCX0KKwlyZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHByb2Nfc3lzcnFfdHJpZ2dlcl9vcGVyYXRpb25zID0geworCS53cml0ZQkJPSB3cml0ZV9zeXNycV90cmlnZ2VyLAorfTsKKworc3RhdGljIGludCBfX2luaXQgc3lzcnFfaW5pdCh2b2lkKQoreworCXByb2NfY3JlYXRlKCJzeXNycS10cmlnZ2VyIiwgU19JV1VTUiwgTlVMTCwgJnByb2Nfc3lzcnFfdHJpZ2dlcl9vcGVyYXRpb25zKTsKKwlyZXR1cm4gMDsKK30KK21vZHVsZV9pbml0KHN5c3JxX2luaXQpOworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvdHBtL3RwbS5jIGIvZHJpdmVycy9jaGFyL3RwbS90cG0uYwppbmRleCBhZTc2NmQ4Li45YzQ3ZGM0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvdHBtL3RwbS5jCisrKyBiL2RyaXZlcnMvY2hhci90cG0vdHBtLmMKQEAgLTUyNSwxOSArNTI1LDE5IEBACiAJdGltZW91dCA9CiAJICAgIGJlMzJfdG9fY3B1KCooKF9fYmUzMiAqKSAoZGF0YSArIFRQTV9HRVRfQ0FQX1JFVF9VSU5UMzJfMV9JRFgpKSk7CiAJaWYgKHRpbWVvdXQpCi0JCWNoaXAtPnZlbmRvci50aW1lb3V0X2EgPSBtc2Vjc190b19qaWZmaWVzKHRpbWVvdXQpOworCQljaGlwLT52ZW5kb3IudGltZW91dF9hID0gdXNlY3NfdG9famlmZmllcyh0aW1lb3V0KTsKIAl0aW1lb3V0ID0KIAkgICAgYmUzMl90b19jcHUoKigoX19iZTMyICopIChkYXRhICsgVFBNX0dFVF9DQVBfUkVUX1VJTlQzMl8yX0lEWCkpKTsKIAlpZiAodGltZW91dCkKLQkJY2hpcC0+dmVuZG9yLnRpbWVvdXRfYiA9IG1zZWNzX3RvX2ppZmZpZXModGltZW91dCk7CisJCWNoaXAtPnZlbmRvci50aW1lb3V0X2IgPSB1c2Vjc190b19qaWZmaWVzKHRpbWVvdXQpOwogCXRpbWVvdXQgPQogCSAgICBiZTMyX3RvX2NwdSgqKChfX2JlMzIgKikgKGRhdGEgKyBUUE1fR0VUX0NBUF9SRVRfVUlOVDMyXzNfSURYKSkpOwogCWlmICh0aW1lb3V0KQotCQljaGlwLT52ZW5kb3IudGltZW91dF9jID0gbXNlY3NfdG9famlmZmllcyh0aW1lb3V0KTsKKwkJY2hpcC0+dmVuZG9yLnRpbWVvdXRfYyA9IHVzZWNzX3RvX2ppZmZpZXModGltZW91dCk7CiAJdGltZW91dCA9CiAJICAgIGJlMzJfdG9fY3B1KCooKF9fYmUzMiAqKSAoZGF0YSArIFRQTV9HRVRfQ0FQX1JFVF9VSU5UMzJfNF9JRFgpKSk7CiAJaWYgKHRpbWVvdXQpCi0JCWNoaXAtPnZlbmRvci50aW1lb3V0X2QgPSBtc2Vjc190b19qaWZmaWVzKHRpbWVvdXQpOworCQljaGlwLT52ZW5kb3IudGltZW91dF9kID0gdXNlY3NfdG9famlmZmllcyh0aW1lb3V0KTsKIAogZHVyYXRpb246CiAJbWVtY3B5KGRhdGEsIHRwbV9jYXAsIHNpemVvZih0cG1fY2FwKSk7CkBAIC01NTQsMTUgKzU1NCwyMiBAQAogCQlyZXR1cm47CiAKIAljaGlwLT52ZW5kb3IuZHVyYXRpb25bVFBNX1NIT1JUXSA9Ci0JICAgIG1zZWNzX3RvX2ppZmZpZXMoYmUzMl90b19jcHUKKwkgICAgdXNlY3NfdG9famlmZmllcyhiZTMyX3RvX2NwdQogCQkJICAgICAoKigoX19iZTMyICopIChkYXRhICsKIAkJCQkJICAgIFRQTV9HRVRfQ0FQX1JFVF9VSU5UMzJfMV9JRFgpKSkpOworCS8qIFRoZSBCcm9hZGNvbSBCQ00wMTAyIGNoaXBzZXQgaW4gYSBEZWxsIExhdGl0dWRlIEQ4MjAgZ2V0cyB0aGUgYWJvdmUKKwkgKiB2YWx1ZSB3cm9uZyBhbmQgYXBwYXJlbnRseSByZXBvcnRzIG1zZWNzIHJhdGhlciB0aGFuIHVzZWNzLiBTbyB3ZQorCSAqIGZpeCB1cCB0aGUgcmVzdWx0aW5nIHRvby1zbWFsbCBUUE1fU0hPUlQgdmFsdWUgdG8gbWFrZSB0aGluZ3Mgd29yay4KKwkgKi8KKwlpZiAoY2hpcC0+dmVuZG9yLmR1cmF0aW9uW1RQTV9TSE9SVF0gPCAoSFovMTAwKSkKKwkJY2hpcC0+dmVuZG9yLmR1cmF0aW9uW1RQTV9TSE9SVF0gPSBIWjsKKwogCWNoaXAtPnZlbmRvci5kdXJhdGlvbltUUE1fTUVESVVNXSA9Ci0JICAgIG1zZWNzX3RvX2ppZmZpZXMoYmUzMl90b19jcHUKKwkgICAgdXNlY3NfdG9famlmZmllcyhiZTMyX3RvX2NwdQogCQkJICAgICAoKigoX19iZTMyICopIChkYXRhICsKIAkJCQkJICAgIFRQTV9HRVRfQ0FQX1JFVF9VSU5UMzJfMl9JRFgpKSkpOwogCWNoaXAtPnZlbmRvci5kdXJhdGlvbltUUE1fTE9OR10gPQotCSAgICBtc2Vjc190b19qaWZmaWVzKGJlMzJfdG9fY3B1CisJICAgIHVzZWNzX3RvX2ppZmZpZXMoYmUzMl90b19jcHUKIAkJCSAgICAgKCooKF9fYmUzMiAqKSAoZGF0YSArCiAJCQkJCSAgICBUUE1fR0VUX0NBUF9SRVRfVUlOVDMyXzNfSURYKSkpKTsKIH0KQEAgLTk1NCw3MiArOTYxLDYzIEBACiAKIC8qCiAgKiBEZXZpY2UgZmlsZSBzeXN0ZW0gaW50ZXJmYWNlIHRvIHRoZSBUUE0KKyAqCisgKiBJdCdzIGFzc3VyZWQgdGhhdCB0aGUgY2hpcCB3aWxsIGJlIG9wZW5lZCBqdXN0IG9uY2UsCisgKiBieSB0aGUgY2hlY2sgb2YgaXNfb3BlbiB2YXJpYWJsZSwgd2hpY2ggaXMgcHJvdGVjdGVkCisgKiBieSBkcml2ZXJfbG9jay4KICAqLwogaW50IHRwbV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQogewotCWludCByYyA9IDAsIG1pbm9yID0gaW1pbm9yKGlub2RlKTsKKwlpbnQgbWlub3IgPSBpbWlub3IoaW5vZGUpOwogCXN0cnVjdCB0cG1fY2hpcCAqY2hpcCA9IE5VTEwsICpwb3M7CiAKLQlsb2NrX2tlcm5lbCgpOwotCXNwaW5fbG9jaygmZHJpdmVyX2xvY2spOwotCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShwb3MsICZ0cG1fY2hpcF9saXN0LCBsaXN0KSB7CisJcmN1X3JlYWRfbG9jaygpOworCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHBvcywgJnRwbV9jaGlwX2xpc3QsIGxpc3QpIHsKIAkJaWYgKHBvcy0+dmVuZG9yLm1pc2NkZXYubWlub3IgPT0gbWlub3IpIHsKIAkJCWNoaXAgPSBwb3M7CisJCQlnZXRfZGV2aWNlKGNoaXAtPmRldik7CiAJCQlicmVhazsKIAkJfQogCX0KKwlyY3VfcmVhZF91bmxvY2soKTsKIAotCWlmIChjaGlwID09IE5VTEwpIHsKLQkJcmMgPSAtRU5PREVWOwotCQlnb3RvIGVycl9vdXQ7Ci0JfQorCWlmICghY2hpcCkKKwkJcmV0dXJuIC1FTk9ERVY7CiAKLQlpZiAoY2hpcC0+bnVtX29wZW5zKSB7CisJaWYgKHRlc3RfYW5kX3NldF9iaXQoMCwgJmNoaXAtPmlzX29wZW4pKSB7CiAJCWRldl9kYmcoY2hpcC0+ZGV2LCAiQW5vdGhlciBwcm9jZXNzIG93bnMgdGhpcyBUUE1cbiIpOwotCQlyYyA9IC1FQlVTWTsKLQkJZ290byBlcnJfb3V0OworCQlwdXRfZGV2aWNlKGNoaXAtPmRldik7CisJCXJldHVybiAtRUJVU1k7CiAJfQogCi0JY2hpcC0+bnVtX29wZW5zKys7Ci0JZ2V0X2RldmljZShjaGlwLT5kZXYpOwotCi0Jc3Bpbl91bmxvY2soJmRyaXZlcl9sb2NrKTsKLQogCWNoaXAtPmRhdGFfYnVmZmVyID0ga21hbGxvYyhUUE1fQlVGU0laRSAqIHNpemVvZih1OCksIEdGUF9LRVJORUwpOwogCWlmIChjaGlwLT5kYXRhX2J1ZmZlciA9PSBOVUxMKSB7Ci0JCWNoaXAtPm51bV9vcGVucy0tOworCQljbGVhcl9iaXQoMCwgJmNoaXAtPmlzX29wZW4pOwogCQlwdXRfZGV2aWNlKGNoaXAtPmRldik7Ci0JCXVubG9ja19rZXJuZWwoKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCiAJYXRvbWljX3NldCgmY2hpcC0+ZGF0YV9wZW5kaW5nLCAwKTsKIAogCWZpbGUtPnByaXZhdGVfZGF0YSA9IGNoaXA7Ci0JdW5sb2NrX2tlcm5lbCgpOwogCXJldHVybiAwOwotCi1lcnJfb3V0OgotCXNwaW5fdW5sb2NrKCZkcml2ZXJfbG9jayk7Ci0JdW5sb2NrX2tlcm5lbCgpOwotCXJldHVybiByYzsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHRwbV9vcGVuKTsKIAorLyoKKyAqIENhbGxlZCBvbiBmaWxlIGNsb3NlCisgKi8KIGludCB0cG1fcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKIAlzdHJ1Y3QgdHBtX2NoaXAgKmNoaXAgPSBmaWxlLT5wcml2YXRlX2RhdGE7CiAKLQlmbHVzaF9zY2hlZHVsZWRfd29yaygpOwotCXNwaW5fbG9jaygmZHJpdmVyX2xvY2spOwotCWZpbGUtPnByaXZhdGVfZGF0YSA9IE5VTEw7CiAJZGVsX3NpbmdsZXNob3RfdGltZXJfc3luYygmY2hpcC0+dXNlcl9yZWFkX3RpbWVyKTsKKwlmbHVzaF9zY2hlZHVsZWRfd29yaygpOworCWZpbGUtPnByaXZhdGVfZGF0YSA9IE5VTEw7CiAJYXRvbWljX3NldCgmY2hpcC0+ZGF0YV9wZW5kaW5nLCAwKTsKLQljaGlwLT5udW1fb3BlbnMtLTsKLQlwdXRfZGV2aWNlKGNoaXAtPmRldik7CiAJa2ZyZWUoY2hpcC0+ZGF0YV9idWZmZXIpOwotCXNwaW5fdW5sb2NrKCZkcml2ZXJfbG9jayk7CisJY2xlYXJfYml0KDAsICZjaGlwLT5pc19vcGVuKTsKKwlwdXRfZGV2aWNlKGNoaXAtPmRldik7CiAJcmV0dXJuIDA7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTCh0cG1fcmVsZWFzZSk7CkBAIC0xMDkzLDEzICsxMDkxLDExIEBACiAJfQogCiAJc3Bpbl9sb2NrKCZkcml2ZXJfbG9jayk7Ci0KLQlsaXN0X2RlbCgmY2hpcC0+bGlzdCk7Ci0KKwlsaXN0X2RlbF9yY3UoJmNoaXAtPmxpc3QpOwogCXNwaW5fdW5sb2NrKCZkcml2ZXJfbG9jayk7CisJc3luY2hyb25pemVfcmN1KCk7CiAKIAltaXNjX2RlcmVnaXN0ZXIoJmNoaXAtPnZlbmRvci5taXNjZGV2KTsKLQogCXN5c2ZzX3JlbW92ZV9ncm91cCgmZGV2LT5rb2JqLCBjaGlwLT52ZW5kb3IuYXR0cl9ncm91cCk7CiAJdHBtX2Jpb3NfbG9nX3RlYXJkb3duKGNoaXAtPmJpb3NfZGlyKTsKIApAQCAtMTE0NCwyNSArMTE0MCwzMyBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwodHBtX3BtX3Jlc3VtZSk7CiAKLS8qCi0gKiBPbmNlIGFsbCByZWZlcmVuY2VzIHRvIHBsYXRmb3JtIGRldmljZSBhcmUgZG93biB0byAwLAotICogcmVsZWFzZSBhbGwgYWxsb2NhdGVkIHN0cnVjdHVyZXMuCi0gKiBJbiBjYXNlIHZlbmRvciBwcm92aWRlZCByZWxlYXNlIGZ1bmN0aW9uLAotICogY2FsbCBpdCB0b28uCi0gKi8KLXN0YXRpYyB2b2lkIHRwbV9kZXZfcmVsZWFzZShzdHJ1Y3QgZGV2aWNlICpkZXYpCisvKiBJbiBjYXNlIHZlbmRvciBwcm92aWRlZCByZWxlYXNlIGZ1bmN0aW9uLCBjYWxsIGl0IHRvby4qLworCit2b2lkIHRwbV9kZXZfdmVuZG9yX3JlbGVhc2Uoc3RydWN0IHRwbV9jaGlwICpjaGlwKQogewotCXN0cnVjdCB0cG1fY2hpcCAqY2hpcCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwotCiAJaWYgKGNoaXAtPnZlbmRvci5yZWxlYXNlKQotCQljaGlwLT52ZW5kb3IucmVsZWFzZShkZXYpOwotCi0JY2hpcC0+cmVsZWFzZShkZXYpOworCQljaGlwLT52ZW5kb3IucmVsZWFzZShjaGlwLT5kZXYpOwogCiAJY2xlYXJfYml0KGNoaXAtPmRldl9udW0sIGRldl9tYXNrKTsKIAlrZnJlZShjaGlwLT52ZW5kb3IubWlzY2Rldi5uYW1lKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHRwbV9kZXZfdmVuZG9yX3JlbGVhc2UpOworCisKKy8qCisgKiBPbmNlIGFsbCByZWZlcmVuY2VzIHRvIHBsYXRmb3JtIGRldmljZSBhcmUgZG93biB0byAwLAorICogcmVsZWFzZSBhbGwgYWxsb2NhdGVkIHN0cnVjdHVyZXMuCisgKi8KK3ZvaWQgdHBtX2Rldl9yZWxlYXNlKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgdHBtX2NoaXAgKmNoaXAgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKworCXRwbV9kZXZfdmVuZG9yX3JlbGVhc2UoY2hpcCk7CisKKwljaGlwLT5yZWxlYXNlKGRldik7CiAJa2ZyZWUoY2hpcCk7CiB9CitFWFBPUlRfU1lNQk9MX0dQTCh0cG1fZGV2X3JlbGVhc2UpOwogCiAvKgogICogQ2FsbGVkIGZyb20gdHBtXzxzcGVjaWZpYz4uYyBwcm9iZSBmdW5jdGlvbiBvbmx5IGZvciBkZXZpY2VzIApAQCAtMTE3MSw4ICsxMTc1LDggQEAKICAqIHVwb24gZXJyYW50IGV4aXQgZnJvbSB0aGlzIGZ1bmN0aW9uIHNwZWNpZmljIHByb2JlIGZ1bmN0aW9uIHNob3VsZCBjYWxsCiAgKiBwY2lfZGlzYWJsZV9kZXZpY2UKICAqLwotc3RydWN0IHRwbV9jaGlwICp0cG1fcmVnaXN0ZXJfaGFyZHdhcmUoc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBzdHJ1Y3QgdHBtX3ZlbmRvcl9zcGVjaWZpYwotCQkJCSAgICAgICAqZW50cnkpCitzdHJ1Y3QgdHBtX2NoaXAgKnRwbV9yZWdpc3Rlcl9oYXJkd2FyZShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJCWNvbnN0IHN0cnVjdCB0cG1fdmVuZG9yX3NwZWNpZmljICplbnRyeSkKIHsKICNkZWZpbmUgREVWTkFNRV9TSVpFIDcKIApAQCAtMTE4MywxMSArMTE4Nyw4IEBACiAJY2hpcCA9IGt6YWxsb2Moc2l6ZW9mKCpjaGlwKSwgR0ZQX0tFUk5FTCk7CiAJZGV2bmFtZSA9IGttYWxsb2MoREVWTkFNRV9TSVpFLCBHRlBfS0VSTkVMKTsKIAotCWlmIChjaGlwID09IE5VTEwgfHwgZGV2bmFtZSA9PSBOVUxMKSB7Ci0JCWtmcmVlKGNoaXApOwotCQlrZnJlZShkZXZuYW1lKTsKLQkJcmV0dXJuIE5VTEw7Ci0JfQorCWlmIChjaGlwID09IE5VTEwgfHwgZGV2bmFtZSA9PSBOVUxMKQorCQlnb3RvIG91dF9mcmVlOwogCiAJbXV0ZXhfaW5pdCgmY2hpcC0+YnVmZmVyX211dGV4KTsKIAltdXRleF9pbml0KCZjaGlwLT50cG1fbXV0ZXgpOwpAQCAtMTIwNCw4ICsxMjA1LDcgQEAKIAogCWlmIChjaGlwLT5kZXZfbnVtID49IFRQTV9OVU1fREVWSUNFUykgewogCQlkZXZfZXJyKGRldiwgIk5vIGF2YWlsYWJsZSB0cG0gZGV2aWNlIG51bWJlcnNcbiIpOwotCQlrZnJlZShjaGlwKTsKLQkJcmV0dXJuIE5VTEw7CisJCWdvdG8gb3V0X2ZyZWU7CiAJfSBlbHNlIGlmIChjaGlwLT5kZXZfbnVtID09IDApCiAJCWNoaXAtPnZlbmRvci5taXNjZGV2Lm1pbm9yID0gVFBNX01JTk9SOwogCWVsc2UKQEAgLTEyMzEsMjIgKzEyMzEsMjYgQEAKIAkJcmV0dXJuIE5VTEw7CiAJfQogCi0Jc3Bpbl9sb2NrKCZkcml2ZXJfbG9jayk7Ci0KLQlsaXN0X2FkZCgmY2hpcC0+bGlzdCwgJnRwbV9jaGlwX2xpc3QpOwotCi0Jc3Bpbl91bmxvY2soJmRyaXZlcl9sb2NrKTsKLQogCWlmIChzeXNmc19jcmVhdGVfZ3JvdXAoJmRldi0+a29iaiwgY2hpcC0+dmVuZG9yLmF0dHJfZ3JvdXApKSB7Ci0JCWxpc3RfZGVsKCZjaGlwLT5saXN0KTsKIAkJbWlzY19kZXJlZ2lzdGVyKCZjaGlwLT52ZW5kb3IubWlzY2Rldik7CiAJCXB1dF9kZXZpY2UoY2hpcC0+ZGV2KTsKKwogCQlyZXR1cm4gTlVMTDsKIAl9CiAKIAljaGlwLT5iaW9zX2RpciA9IHRwbV9iaW9zX2xvZ19zZXR1cChkZXZuYW1lKTsKIAorCS8qIE1ha2UgY2hpcCBhdmFpbGFibGUgKi8KKwlzcGluX2xvY2soJmRyaXZlcl9sb2NrKTsKKwlsaXN0X2FkZF9yY3UoJmNoaXAtPmxpc3QsICZ0cG1fY2hpcF9saXN0KTsKKwlzcGluX3VubG9jaygmZHJpdmVyX2xvY2spOworCiAJcmV0dXJuIGNoaXA7CisKK291dF9mcmVlOgorCWtmcmVlKGNoaXApOworCWtmcmVlKGRldm5hbWUpOworCXJldHVybiBOVUxMOwogfQogRVhQT1JUX1NZTUJPTF9HUEwodHBtX3JlZ2lzdGVyX2hhcmR3YXJlKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3RwbS90cG0uaCBiL2RyaXZlcnMvY2hhci90cG0vdHBtLmgKaW5kZXggZTg4NTE0OC4uOGUzMGRmNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3RwbS90cG0uaAorKysgYi9kcml2ZXJzL2NoYXIvdHBtL3RwbS5oCkBAIC05MCw3ICs5MCw3IEBACiAJc3RydWN0IGRldmljZSAqZGV2OwkvKiBEZXZpY2Ugc3R1ZmYgKi8KIAogCWludCBkZXZfbnVtOwkJLyogL2Rldi90cG0jICovCi0JaW50IG51bV9vcGVuczsJCS8qIG9ubHkgb25lIGFsbG93ZWQgKi8KKwl1bnNpZ25lZCBsb25nIGlzX29wZW47CS8qIG9ubHkgb25lIGFsbG93ZWQgKi8KIAlpbnQgdGltZV9leHBpcmVkOwogCiAJLyogRGF0YSBwYXNzZWQgdG8gYW5kIGZyb20gdGhlIHRwbSB2aWEgdGhlIHJlYWQvd3JpdGUgY2FsbHMgKi8KQEAgLTEzMiw2ICsxMzIsNyBAQAogCQkJCSBjb25zdCBzdHJ1Y3QgdHBtX3ZlbmRvcl9zcGVjaWZpYyAqKTsKIGV4dGVybiBpbnQgdHBtX29wZW4oc3RydWN0IGlub2RlICosIHN0cnVjdCBmaWxlICopOwogZXh0ZXJuIGludCB0cG1fcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGZpbGUgKik7CitleHRlcm4gdm9pZCB0cG1fZGV2X3ZlbmRvcl9yZWxlYXNlKHN0cnVjdCB0cG1fY2hpcCAqKTsKIGV4dGVybiBzc2l6ZV90IHRwbV93cml0ZShzdHJ1Y3QgZmlsZSAqLCBjb25zdCBjaGFyIF9fdXNlciAqLCBzaXplX3QsCiAJCQkgbG9mZl90ICopOwogZXh0ZXJuIHNzaXplX3QgdHBtX3JlYWQoc3RydWN0IGZpbGUgKiwgY2hhciBfX3VzZXIgKiwgc2l6ZV90LCBsb2ZmX3QgKik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvdHBtL3RwbV90aXMuYyBiL2RyaXZlcnMvY2hhci90cG0vdHBtX3Rpcy5jCmluZGV4IGVkMTg3OWMuLjcxN2FmN2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci90cG0vdHBtX3Rpcy5jCisrKyBiL2RyaXZlcnMvY2hhci90cG0vdHBtX3Rpcy5jCkBAIC02MzAsMTIgKzYzMCwyMyBAQAogCXsiIiwgMH0JCQkvKiBUZXJtaW5hdG9yICovCiB9OwogCitzdGF0aWMgX19kZXZleGl0IHZvaWQgdHBtX3Rpc19wbnBfcmVtb3ZlKHN0cnVjdCBwbnBfZGV2ICpkZXYpCit7CisJc3RydWN0IHRwbV9jaGlwICpjaGlwID0gcG5wX2dldF9kcnZkYXRhKGRldik7CisKKwl0cG1fZGV2X3ZlbmRvcl9yZWxlYXNlKGNoaXApOworCisJa2ZyZWUoY2hpcCk7Cit9CisKKwogc3RhdGljIHN0cnVjdCBwbnBfZHJpdmVyIHRpc19wbnBfZHJpdmVyID0gewogCS5uYW1lID0gInRwbV90aXMiLAogCS5pZF90YWJsZSA9IHRwbV9wbnBfdGJsLAogCS5wcm9iZSA9IHRwbV90aXNfcG5wX2luaXQsCiAJLnN1c3BlbmQgPSB0cG1fdGlzX3BucF9zdXNwZW5kLAogCS5yZXN1bWUgPSB0cG1fdGlzX3BucF9yZXN1bWUsCisJLnJlbW92ZSA9IHRwbV90aXNfcG5wX3JlbW92ZSwKIH07CiAKICNkZWZpbmUgVElTX0hJRF9VU1JfSURYIHNpemVvZih0cG1fcG5wX3RibCkvc2l6ZW9mKHN0cnVjdCBwbnBfZGV2aWNlX2lkKSAtMgpAQCAtNjgzLDYgKzY5NCw3IEBACiAJc3Bpbl9sb2NrKCZ0aXNfbG9jayk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGksIGosICZ0aXNfY2hpcHMsIGxpc3QpIHsKIAkJY2hpcCA9IHRvX3RwbV9jaGlwKGkpOworCQl0cG1fcmVtb3ZlX2hhcmR3YXJlKGNoaXAtPmRldik7CiAJCWlvd3JpdGUzMih+VFBNX0dMT0JBTF9JTlRfRU5BQkxFICYKIAkJCSAgaW9yZWFkMzIoY2hpcC0+dmVuZG9yLmlvYmFzZSArCiAJCQkJICAgVFBNX0lOVF9FTkFCTEUoY2hpcC0+dmVuZG9yLgpAQCAtNjk0LDkgKzcwNiw5IEBACiAJCQlmcmVlX2lycShjaGlwLT52ZW5kb3IuaXJxLCBjaGlwKTsKIAkJaW91bm1hcChpLT5pb2Jhc2UpOwogCQlsaXN0X2RlbCgmaS0+bGlzdCk7Ci0JCXRwbV9yZW1vdmVfaGFyZHdhcmUoY2hpcC0+ZGV2KTsKIAl9CiAJc3Bpbl91bmxvY2soJnRpc19sb2NrKTsKKwogCWlmIChmb3JjZSkgewogCQlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcihwZGV2KTsKIAkJZHJpdmVyX3VucmVnaXN0ZXIoJnRpc19kcnYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3R0eV9hdWRpdC5jIGIvZHJpdmVycy9jaGFyL3R0eV9hdWRpdC5jCmluZGV4IDM1ODJmNDMuLjU3ODcyNDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci90dHlfYXVkaXQuYworKysgYi9kcml2ZXJzL2NoYXIvdHR5X2F1ZGl0LmMKQEAgLTkzLDcgKzkzLDcgQEAKIAkJZ2V0X3Rhc2tfY29tbShuYW1lLCB0c2spOwogCQlhdWRpdF9sb2dfdW50cnVzdGVkc3RyaW5nKGFiLCBuYW1lKTsKIAkJYXVkaXRfbG9nX2Zvcm1hdChhYiwgIiBkYXRhPSIpOwotCQlhdWRpdF9sb2dfbl91bnRydXN0ZWRzdHJpbmcoYWIsIGJ1Zi0+ZGF0YSwgYnVmLT52YWxpZCk7CisJCWF1ZGl0X2xvZ19uX2hleChhYiwgYnVmLT5kYXRhLCBidWYtPnZhbGlkKTsKIAkJYXVkaXRfbG9nX2VuZChhYik7CiAJfQogCWJ1Zi0+dmFsaWQgPSAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3R0eV9idWZmZXIuYyBiL2RyaXZlcnMvY2hhci90dHlfYnVmZmVyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODEwZWUyNQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvY2hhci90dHlfYnVmZmVyLmMKQEAgLTAsMCArMSw1MTEgQEAKKy8qCisgKiBUdHkgYnVmZmVyIGFsbG9jYXRpb24gbWFuYWdlbWVudAorICovCisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvdHR5Lmg+CisjaW5jbHVkZSA8bGludXgvdHR5X2RyaXZlci5oPgorI2luY2x1ZGUgPGxpbnV4L3R0eV9mbGlwLmg+CisjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvd2FpdC5oPgorI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisKKy8qKgorICoJdHR5X2J1ZmZlcl9mcmVlX2FsbAkJLQlmcmVlIGJ1ZmZlcnMgdXNlZCBieSBhIHR0eQorICoJQHR0eTogdHR5IHRvIGZyZWUgZnJvbQorICoKKyAqCVJlbW92ZSBhbGwgdGhlIGJ1ZmZlcnMgcGVuZGluZyBvbiBhIHR0eSB3aGV0aGVyIHF1ZXVlZCB3aXRoIGRhdGEKKyAqCW9yIGluIHRoZSBmcmVlIHJpbmcuIE11c3QgYmUgY2FsbGVkIHdoZW4gdGhlIHR0eSBpcyBubyBsb25nZXIgaW4gdXNlCisgKgorICoJTG9ja2luZzogbm9uZQorICovCisKK3ZvaWQgdHR5X2J1ZmZlcl9mcmVlX2FsbChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQoreworCXN0cnVjdCB0dHlfYnVmZmVyICp0aGVhZDsKKwl3aGlsZSAoKHRoZWFkID0gdHR5LT5idWYuaGVhZCkgIT0gTlVMTCkgeworCQl0dHktPmJ1Zi5oZWFkID0gdGhlYWQtPm5leHQ7CisJCWtmcmVlKHRoZWFkKTsKKwl9CisJd2hpbGUgKCh0aGVhZCA9IHR0eS0+YnVmLmZyZWUpICE9IE5VTEwpIHsKKwkJdHR5LT5idWYuZnJlZSA9IHRoZWFkLT5uZXh0OworCQlrZnJlZSh0aGVhZCk7CisJfQorCXR0eS0+YnVmLnRhaWwgPSBOVUxMOworCXR0eS0+YnVmLm1lbW9yeV91c2VkID0gMDsKK30KKworLyoqCisgKgl0dHlfYnVmZmVyX2FsbG9jCS0JYWxsb2NhdGUgYSB0dHkgYnVmZmVyCisgKglAdHR5OiB0dHkgZGV2aWNlCisgKglAc2l6ZTogZGVzaXJlZCBzaXplIChjaGFyYWN0ZXJzKQorICoKKyAqCUFsbG9jYXRlIGEgbmV3IHR0eSBidWZmZXIgdG8gaG9sZCB0aGUgZGVzaXJlZCBudW1iZXIgb2YgY2hhcmFjdGVycy4KKyAqCVJldHVybiBOVUxMIGlmIG91dCBvZiBtZW1vcnkgb3IgdGhlIGFsbG9jYXRpb24gd291bGQgZXhjZWVkIHRoZQorICoJcGVyIGRldmljZSBxdWV1ZQorICoKKyAqCUxvY2tpbmc6IENhbGxlciBtdXN0IGhvbGQgdHR5LT5idWYubG9jaworICovCisKK3N0YXRpYyBzdHJ1Y3QgdHR5X2J1ZmZlciAqdHR5X2J1ZmZlcl9hbGxvYyhzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzaXplX3Qgc2l6ZSkKK3sKKwlzdHJ1Y3QgdHR5X2J1ZmZlciAqcDsKKworCWlmICh0dHktPmJ1Zi5tZW1vcnlfdXNlZCArIHNpemUgPiA2NTUzNikKKwkJcmV0dXJuIE5VTEw7CisJcCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCB0dHlfYnVmZmVyKSArIDIgKiBzaXplLCBHRlBfQVRPTUlDKTsKKwlpZiAocCA9PSBOVUxMKQorCQlyZXR1cm4gTlVMTDsKKwlwLT51c2VkID0gMDsKKwlwLT5zaXplID0gc2l6ZTsKKwlwLT5uZXh0ID0gTlVMTDsKKwlwLT5jb21taXQgPSAwOworCXAtPnJlYWQgPSAwOworCXAtPmNoYXJfYnVmX3B0ciA9IChjaGFyICopKHAtPmRhdGEpOworCXAtPmZsYWdfYnVmX3B0ciA9ICh1bnNpZ25lZCBjaGFyICopcC0+Y2hhcl9idWZfcHRyICsgc2l6ZTsKKwl0dHktPmJ1Zi5tZW1vcnlfdXNlZCArPSBzaXplOworCXJldHVybiBwOworfQorCisvKioKKyAqCXR0eV9idWZmZXJfZnJlZQkJLQlmcmVlIGEgdHR5IGJ1ZmZlcgorICoJQHR0eTogdHR5IG93bmluZyB0aGUgYnVmZmVyCisgKglAYjogdGhlIGJ1ZmZlciB0byBmcmVlCisgKgorICoJRnJlZSBhIHR0eSBidWZmZXIsIG9yIGFkZCBpdCB0byB0aGUgZnJlZSBsaXN0IGFjY29yZGluZyB0byBvdXIKKyAqCWludGVybmFsIHN0cmF0ZWd5CisgKgorICoJTG9ja2luZzogQ2FsbGVyIG11c3QgaG9sZCB0dHktPmJ1Zi5sb2NrCisgKi8KKworc3RhdGljIHZvaWQgdHR5X2J1ZmZlcl9mcmVlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCB0dHlfYnVmZmVyICpiKQoreworCS8qIER1bWIgc3RyYXRlZ3kgZm9yIG5vdyAtIHNob3VsZCBrZWVwIHNvbWUgc3RhdHMgKi8KKwl0dHktPmJ1Zi5tZW1vcnlfdXNlZCAtPSBiLT5zaXplOworCVdBUk5fT04odHR5LT5idWYubWVtb3J5X3VzZWQgPCAwKTsKKworCWlmIChiLT5zaXplID49IDUxMikKKwkJa2ZyZWUoYik7CisJZWxzZSB7CisJCWItPm5leHQgPSB0dHktPmJ1Zi5mcmVlOworCQl0dHktPmJ1Zi5mcmVlID0gYjsKKwl9Cit9CisKKy8qKgorICoJX190dHlfYnVmZmVyX2ZsdXNoCQktCWZsdXNoIGZ1bGwgdHR5IGJ1ZmZlcnMKKyAqCUB0dHk6IHR0eSB0byBmbHVzaAorICoKKyAqCWZsdXNoIGFsbCB0aGUgYnVmZmVycyBjb250YWluaW5nIHJlY2VpdmUgZGF0YS4gQ2FsbGVyIG11c3QKKyAqCWhvbGQgdGhlIGJ1ZmZlciBsb2NrIGFuZCBtdXN0IGhhdmUgZW5zdXJlZCBubyBwYXJhbGxlbCBmbHVzaCB0bworICoJbGRpc2MgaXMgcnVubmluZy4KKyAqCisgKglMb2NraW5nOiBDYWxsZXIgbXVzdCBob2xkIHR0eS0+YnVmLmxvY2sKKyAqLworCitzdGF0aWMgdm9pZCBfX3R0eV9idWZmZXJfZmx1c2goc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKK3sKKwlzdHJ1Y3QgdHR5X2J1ZmZlciAqdGhlYWQ7CisKKwl3aGlsZSAoKHRoZWFkID0gdHR5LT5idWYuaGVhZCkgIT0gTlVMTCkgeworCQl0dHktPmJ1Zi5oZWFkID0gdGhlYWQtPm5leHQ7CisJCXR0eV9idWZmZXJfZnJlZSh0dHksIHRoZWFkKTsKKwl9CisJdHR5LT5idWYudGFpbCA9IE5VTEw7Cit9CisKKy8qKgorICoJdHR5X2J1ZmZlcl9mbHVzaAkJLQlmbHVzaCBmdWxsIHR0eSBidWZmZXJzCisgKglAdHR5OiB0dHkgdG8gZmx1c2gKKyAqCisgKglmbHVzaCBhbGwgdGhlIGJ1ZmZlcnMgY29udGFpbmluZyByZWNlaXZlIGRhdGEuIElmIHRoZSBidWZmZXIgaXMKKyAqCWJlaW5nIHByb2Nlc3NlZCBieSBmbHVzaF90b19sZGlzYyB0aGVuIHdlIGRlZmVyIHRoZSBwcm9jZXNzaW5nCisgKgl0byB0aGF0IGZ1bmN0aW9uCisgKgorICoJTG9ja2luZzogbm9uZQorICovCisKK3ZvaWQgdHR5X2J1ZmZlcl9mbHVzaChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3Bpbl9sb2NrX2lycXNhdmUoJnR0eS0+YnVmLmxvY2ssIGZsYWdzKTsKKworCS8qIElmIHRoZSBkYXRhIGlzIGJlaW5nIHB1c2hlZCB0byB0aGUgdHR5IGxheWVyIHRoZW4gd2UgY2FuJ3QKKwkgICBwcm9jZXNzIGl0IGhlcmUuIEluc3RlYWQgc2V0IGEgZmxhZyBhbmQgdGhlIGZsdXNoX3RvX2xkaXNjCisJICAgcGF0aCB3aWxsIHByb2Nlc3MgdGhlIGZsdXNoIHJlcXVlc3QgYmVmb3JlIGl0IGV4aXRzICovCisJaWYgKHRlc3RfYml0KFRUWV9GTFVTSElORywgJnR0eS0+ZmxhZ3MpKSB7CisJCXNldF9iaXQoVFRZX0ZMVVNIUEVORElORywgJnR0eS0+ZmxhZ3MpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0dHktPmJ1Zi5sb2NrLCBmbGFncyk7CisJCXdhaXRfZXZlbnQodHR5LT5yZWFkX3dhaXQsCisJCQkJdGVzdF9iaXQoVFRZX0ZMVVNIUEVORElORywgJnR0eS0+ZmxhZ3MpID09IDApOworCQlyZXR1cm47CisJfSBlbHNlCisJCV9fdHR5X2J1ZmZlcl9mbHVzaCh0dHkpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnR0eS0+YnVmLmxvY2ssIGZsYWdzKTsKK30KKworLyoqCisgKgl0dHlfYnVmZmVyX2ZpbmQJCS0JZmluZCBhIGZyZWUgdHR5IGJ1ZmZlcgorICoJQHR0eTogdHR5IG93bmluZyB0aGUgYnVmZmVyCisgKglAc2l6ZTogY2hhcmFjdGVycyB3YW50ZWQKKyAqCisgKglMb2NhdGUgYW4gZXhpc3Rpbmcgc3VpdGFibGUgdHR5IGJ1ZmZlciBvciBpZiB3ZSBhcmUgbGFja2luZyBvbmUgdGhlbgorICoJYWxsb2NhdGUgYSBuZXcgb25lLiBXZSByb3VuZCBvdXIgYnVmZmVycyBvZmYgaW4gMjU2IGNoYXJhY3RlciBjaHVua3MKKyAqCXRvIGdldCBiZXR0ZXIgYWxsb2NhdGlvbiBiZWhhdmlvdXIuCisgKgorICoJTG9ja2luZzogQ2FsbGVyIG11c3QgaG9sZCB0dHktPmJ1Zi5sb2NrCisgKi8KKworc3RhdGljIHN0cnVjdCB0dHlfYnVmZmVyICp0dHlfYnVmZmVyX2ZpbmQoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc2l6ZV90IHNpemUpCit7CisJc3RydWN0IHR0eV9idWZmZXIgKip0YmggPSAmdHR5LT5idWYuZnJlZTsKKwl3aGlsZSAoKCp0YmgpICE9IE5VTEwpIHsKKwkJc3RydWN0IHR0eV9idWZmZXIgKnQgPSAqdGJoOworCQlpZiAodC0+c2l6ZSA+PSBzaXplKSB7CisJCQkqdGJoID0gdC0+bmV4dDsKKwkJCXQtPm5leHQgPSBOVUxMOworCQkJdC0+dXNlZCA9IDA7CisJCQl0LT5jb21taXQgPSAwOworCQkJdC0+cmVhZCA9IDA7CisJCQl0dHktPmJ1Zi5tZW1vcnlfdXNlZCArPSB0LT5zaXplOworCQkJcmV0dXJuIHQ7CisJCX0KKwkJdGJoID0gJigoKnRiaCktPm5leHQpOworCX0KKwkvKiBSb3VuZCB0aGUgYnVmZmVyIHNpemUgb3V0ICovCisJc2l6ZSA9IChzaXplICsgMHhGRikgJiB+MHhGRjsKKwlyZXR1cm4gdHR5X2J1ZmZlcl9hbGxvYyh0dHksIHNpemUpOworCS8qIFNob3VsZCBwb3NzaWJseSBjaGVjayBpZiB0aGlzIGZhaWxzIGZvciB0aGUgbGFyZ2VzdCBidWZmZXIgd2UKKwkgICBoYXZlIHF1ZXVlZCBhbmQgcmVjeWNsZSB0aGF0ID8gKi8KK30KKworLyoqCisgKgl0dHlfYnVmZmVyX3JlcXVlc3Rfcm9vbQkJLQlncm93IHR0eSBidWZmZXIgaWYgbmVlZGVkCisgKglAdHR5OiB0dHkgc3RydWN0dXJlCisgKglAc2l6ZTogc2l6ZSBkZXNpcmVkCisgKgorICoJTWFrZSBhdCBsZWFzdCBzaXplIGJ5dGVzIG9mIGxpbmVhciBzcGFjZSBhdmFpbGFibGUgZm9yIHRoZSB0dHkKKyAqCWJ1ZmZlci4gSWYgd2UgZmFpbCByZXR1cm4gdGhlIHNpemUgd2UgbWFuYWdlZCB0byBmaW5kLgorICoKKyAqCUxvY2tpbmc6IFRha2VzIHR0eS0+YnVmLmxvY2sKKyAqLworaW50IHR0eV9idWZmZXJfcmVxdWVzdF9yb29tKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHNpemVfdCBzaXplKQoreworCXN0cnVjdCB0dHlfYnVmZmVyICpiLCAqbjsKKwlpbnQgbGVmdDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnR0eS0+YnVmLmxvY2ssIGZsYWdzKTsKKworCS8qIE9QVElNSVNBVElPTjogV2UgY291bGQga2VlcCBhIHBlciB0dHkgInplcm8iIHNpemVkIGJ1ZmZlciB0bworCSAgIHJlbW92ZSB0aGlzIGNvbmRpdGlvbmFsIGlmIGl0cyB3b3J0aCBpdC4gVGhpcyB3b3VsZCBiZSBpbnZpc2libGUKKwkgICB0byB0aGUgY2FsbGVycyAqLworCWlmICgoYiA9IHR0eS0+YnVmLnRhaWwpICE9IE5VTEwpCisJCWxlZnQgPSBiLT5zaXplIC0gYi0+dXNlZDsKKwllbHNlCisJCWxlZnQgPSAwOworCisJaWYgKGxlZnQgPCBzaXplKSB7CisJCS8qIFRoaXMgaXMgdGhlIHNsb3cgcGF0aCAtIGxvb2tpbmcgZm9yIG5ldyBidWZmZXJzIHRvIHVzZSAqLworCQlpZiAoKG4gPSB0dHlfYnVmZmVyX2ZpbmQodHR5LCBzaXplKSkgIT0gTlVMTCkgeworCQkJaWYgKGIgIT0gTlVMTCkgeworCQkJCWItPm5leHQgPSBuOworCQkJCWItPmNvbW1pdCA9IGItPnVzZWQ7CisJCQl9IGVsc2UKKwkJCQl0dHktPmJ1Zi5oZWFkID0gbjsKKwkJCXR0eS0+YnVmLnRhaWwgPSBuOworCQl9IGVsc2UKKwkJCXNpemUgPSBsZWZ0OworCX0KKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnR0eS0+YnVmLmxvY2ssIGZsYWdzKTsKKwlyZXR1cm4gc2l6ZTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHR0eV9idWZmZXJfcmVxdWVzdF9yb29tKTsKKworLyoqCisgKgl0dHlfaW5zZXJ0X2ZsaXBfc3RyaW5nCS0JQWRkIGNoYXJhY3RlcnMgdG8gdGhlIHR0eSBidWZmZXIKKyAqCUB0dHk6IHR0eSBzdHJ1Y3R1cmUKKyAqCUBjaGFyczogY2hhcmFjdGVycworICoJQHNpemU6IHNpemUKKyAqCisgKglRdWV1ZSBhIHNlcmllcyBvZiBieXRlcyB0byB0aGUgdHR5IGJ1ZmZlcmluZy4gQWxsIHRoZSBjaGFyYWN0ZXJzCisgKglwYXNzZWQgYXJlIG1hcmtlZCBhcyB3aXRob3V0IGVycm9yLiBSZXR1cm5zIHRoZSBudW1iZXIgYWRkZWQuCisgKgorICoJTG9ja2luZzogQ2FsbGVkIGZ1bmN0aW9ucyBtYXkgdGFrZSB0dHktPmJ1Zi5sb2NrCisgKi8KKworaW50IHR0eV9pbnNlcnRfZmxpcF9zdHJpbmcoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgY29uc3QgdW5zaWduZWQgY2hhciAqY2hhcnMsCisJCQkJc2l6ZV90IHNpemUpCit7CisJaW50IGNvcGllZCA9IDA7CisJZG8geworCQlpbnQgc3BhY2UgPSB0dHlfYnVmZmVyX3JlcXVlc3Rfcm9vbSh0dHksIHNpemUgLSBjb3BpZWQpOworCQlzdHJ1Y3QgdHR5X2J1ZmZlciAqdGIgPSB0dHktPmJ1Zi50YWlsOworCQkvKiBJZiB0aGVyZSBpcyBubyBzcGFjZSB0aGVuIHRiIG1heSBiZSBOVUxMICovCisJCWlmICh1bmxpa2VseShzcGFjZSA9PSAwKSkKKwkJCWJyZWFrOworCQltZW1jcHkodGItPmNoYXJfYnVmX3B0ciArIHRiLT51c2VkLCBjaGFycywgc3BhY2UpOworCQltZW1zZXQodGItPmZsYWdfYnVmX3B0ciArIHRiLT51c2VkLCBUVFlfTk9STUFMLCBzcGFjZSk7CisJCXRiLT51c2VkICs9IHNwYWNlOworCQljb3BpZWQgKz0gc3BhY2U7CisJCWNoYXJzICs9IHNwYWNlOworCQkvKiBUaGVyZSBpcyBhIHNtYWxsIGNoYW5jZSB0aGF0IHdlIG5lZWQgdG8gc3BsaXQgdGhlIGRhdGEgb3ZlcgorCQkgICBzZXZlcmFsIGJ1ZmZlcnMuIElmIHRoaXMgaXMgdGhlIGNhc2Ugd2UgbXVzdCBsb29wICovCisJfSB3aGlsZSAodW5saWtlbHkoc2l6ZSA+IGNvcGllZCkpOworCXJldHVybiBjb3BpZWQ7Cit9CitFWFBPUlRfU1lNQk9MKHR0eV9pbnNlcnRfZmxpcF9zdHJpbmcpOworCisvKioKKyAqCXR0eV9pbnNlcnRfZmxpcF9zdHJpbmdfZmxhZ3MJLQlBZGQgY2hhcmFjdGVycyB0byB0aGUgdHR5IGJ1ZmZlcgorICoJQHR0eTogdHR5IHN0cnVjdHVyZQorICoJQGNoYXJzOiBjaGFyYWN0ZXJzCisgKglAZmxhZ3M6IGZsYWcgYnl0ZXMKKyAqCUBzaXplOiBzaXplCisgKgorICoJUXVldWUgYSBzZXJpZXMgb2YgYnl0ZXMgdG8gdGhlIHR0eSBidWZmZXJpbmcuIEZvciBlYWNoIGNoYXJhY3RlcgorICoJdGhlIGZsYWdzIGFycmF5IGluZGljYXRlcyB0aGUgc3RhdHVzIG9mIHRoZSBjaGFyYWN0ZXIuIFJldHVybnMgdGhlCisgKgludW1iZXIgYWRkZWQuCisgKgorICoJTG9ja2luZzogQ2FsbGVkIGZ1bmN0aW9ucyBtYXkgdGFrZSB0dHktPmJ1Zi5sb2NrCisgKi8KKworaW50IHR0eV9pbnNlcnRfZmxpcF9zdHJpbmdfZmxhZ3Moc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwKKwkJY29uc3QgdW5zaWduZWQgY2hhciAqY2hhcnMsIGNvbnN0IGNoYXIgKmZsYWdzLCBzaXplX3Qgc2l6ZSkKK3sKKwlpbnQgY29waWVkID0gMDsKKwlkbyB7CisJCWludCBzcGFjZSA9IHR0eV9idWZmZXJfcmVxdWVzdF9yb29tKHR0eSwgc2l6ZSAtIGNvcGllZCk7CisJCXN0cnVjdCB0dHlfYnVmZmVyICp0YiA9IHR0eS0+YnVmLnRhaWw7CisJCS8qIElmIHRoZXJlIGlzIG5vIHNwYWNlIHRoZW4gdGIgbWF5IGJlIE5VTEwgKi8KKwkJaWYgKHVubGlrZWx5KHNwYWNlID09IDApKQorCQkJYnJlYWs7CisJCW1lbWNweSh0Yi0+Y2hhcl9idWZfcHRyICsgdGItPnVzZWQsIGNoYXJzLCBzcGFjZSk7CisJCW1lbWNweSh0Yi0+ZmxhZ19idWZfcHRyICsgdGItPnVzZWQsIGZsYWdzLCBzcGFjZSk7CisJCXRiLT51c2VkICs9IHNwYWNlOworCQljb3BpZWQgKz0gc3BhY2U7CisJCWNoYXJzICs9IHNwYWNlOworCQlmbGFncyArPSBzcGFjZTsKKwkJLyogVGhlcmUgaXMgYSBzbWFsbCBjaGFuY2UgdGhhdCB3ZSBuZWVkIHRvIHNwbGl0IHRoZSBkYXRhIG92ZXIKKwkJICAgc2V2ZXJhbCBidWZmZXJzLiBJZiB0aGlzIGlzIHRoZSBjYXNlIHdlIG11c3QgbG9vcCAqLworCX0gd2hpbGUgKHVubGlrZWx5KHNpemUgPiBjb3BpZWQpKTsKKwlyZXR1cm4gY29waWVkOworfQorRVhQT1JUX1NZTUJPTCh0dHlfaW5zZXJ0X2ZsaXBfc3RyaW5nX2ZsYWdzKTsKKworLyoqCisgKgl0dHlfc2NoZWR1bGVfZmxpcAktCXB1c2ggY2hhcmFjdGVycyB0byBsZGlzYworICoJQHR0eTogdHR5IHRvIHB1c2ggZnJvbQorICoKKyAqCVRha2VzIGFueSBwZW5kaW5nIGJ1ZmZlcnMgYW5kIHRyYW5zZmVycyB0aGVpciBvd25lcnNoaXAgdG8gdGhlCisgKglsZGlzYyBzaWRlIG9mIHRoZSBxdWV1ZS4gSXQgdGhlbiBzY2hlZHVsZXMgdGhvc2UgY2hhcmFjdGVycyBmb3IKKyAqCXByb2Nlc3NpbmcgYnkgdGhlIGxpbmUgZGlzY2lwbGluZS4KKyAqCisgKglMb2NraW5nOiBUYWtlcyB0dHktPmJ1Zi5sb2NrCisgKi8KKwordm9pZCB0dHlfc2NoZWR1bGVfZmxpcChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3Bpbl9sb2NrX2lycXNhdmUoJnR0eS0+YnVmLmxvY2ssIGZsYWdzKTsKKwlpZiAodHR5LT5idWYudGFpbCAhPSBOVUxMKQorCQl0dHktPmJ1Zi50YWlsLT5jb21taXQgPSB0dHktPmJ1Zi50YWlsLT51c2VkOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnR0eS0+YnVmLmxvY2ssIGZsYWdzKTsKKwlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJnR0eS0+YnVmLndvcmssIDEpOworfQorRVhQT1JUX1NZTUJPTCh0dHlfc2NoZWR1bGVfZmxpcCk7CisKKy8qKgorICoJdHR5X3ByZXBhcmVfZmxpcF9zdHJpbmcJCS0JbWFrZSByb29tIGZvciBjaGFyYWN0ZXJzCisgKglAdHR5OiB0dHkKKyAqCUBjaGFyczogcmV0dXJuIHBvaW50ZXIgZm9yIGNoYXJhY3RlciB3cml0ZSBhcmVhCisgKglAc2l6ZTogZGVzaXJlZCBzaXplCisgKgorICoJUHJlcGFyZSBhIGJsb2NrIG9mIHNwYWNlIGluIHRoZSBidWZmZXIgZm9yIGRhdGEuIFJldHVybnMgdGhlIGxlbmd0aAorICoJYXZhaWxhYmxlIGFuZCBidWZmZXIgcG9pbnRlciB0byB0aGUgc3BhY2Ugd2hpY2ggaXMgbm93IGFsbG9jYXRlZCBhbmQKKyAqCWFjY291bnRlZCBmb3IgYXMgcmVhZHkgZm9yIG5vcm1hbCBjaGFyYWN0ZXJzLiBUaGlzIGlzIHVzZWQgZm9yIGRyaXZlcnMKKyAqCXRoYXQgbmVlZCB0aGVpciBvd24gYmxvY2sgY29weSByb3V0aW5lcyBpbnRvIHRoZSBidWZmZXIuIFRoZXJlIGlzIG5vCisgKglndWFyYW50ZWUgdGhlIGJ1ZmZlciBpcyBhIERNQSB0YXJnZXQhCisgKgorICoJTG9ja2luZzogTWF5IGNhbGwgZnVuY3Rpb25zIHRha2luZyB0dHktPmJ1Zi5sb2NrCisgKi8KKworaW50IHR0eV9wcmVwYXJlX2ZsaXBfc3RyaW5nKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHVuc2lnbmVkIGNoYXIgKipjaGFycywKKwkJCQkJCQkJc2l6ZV90IHNpemUpCit7CisJaW50IHNwYWNlID0gdHR5X2J1ZmZlcl9yZXF1ZXN0X3Jvb20odHR5LCBzaXplKTsKKwlpZiAobGlrZWx5KHNwYWNlKSkgeworCQlzdHJ1Y3QgdHR5X2J1ZmZlciAqdGIgPSB0dHktPmJ1Zi50YWlsOworCQkqY2hhcnMgPSB0Yi0+Y2hhcl9idWZfcHRyICsgdGItPnVzZWQ7CisJCW1lbXNldCh0Yi0+ZmxhZ19idWZfcHRyICsgdGItPnVzZWQsIFRUWV9OT1JNQUwsIHNwYWNlKTsKKwkJdGItPnVzZWQgKz0gc3BhY2U7CisJfQorCXJldHVybiBzcGFjZTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHR0eV9wcmVwYXJlX2ZsaXBfc3RyaW5nKTsKKworLyoqCisgKgl0dHlfcHJlcGFyZV9mbGlwX3N0cmluZ19mbGFncwktCW1ha2Ugcm9vbSBmb3IgY2hhcmFjdGVycworICoJQHR0eTogdHR5CisgKglAY2hhcnM6IHJldHVybiBwb2ludGVyIGZvciBjaGFyYWN0ZXIgd3JpdGUgYXJlYQorICoJQGZsYWdzOiByZXR1cm4gcG9pbnRlciBmb3Igc3RhdHVzIGZsYWcgd3JpdGUgYXJlYQorICoJQHNpemU6IGRlc2lyZWQgc2l6ZQorICoKKyAqCVByZXBhcmUgYSBibG9jayBvZiBzcGFjZSBpbiB0aGUgYnVmZmVyIGZvciBkYXRhLiBSZXR1cm5zIHRoZSBsZW5ndGgKKyAqCWF2YWlsYWJsZSBhbmQgYnVmZmVyIHBvaW50ZXIgdG8gdGhlIHNwYWNlIHdoaWNoIGlzIG5vdyBhbGxvY2F0ZWQgYW5kCisgKglhY2NvdW50ZWQgZm9yIGFzIHJlYWR5IGZvciBjaGFyYWN0ZXJzLiBUaGlzIGlzIHVzZWQgZm9yIGRyaXZlcnMKKyAqCXRoYXQgbmVlZCB0aGVpciBvd24gYmxvY2sgY29weSByb3V0aW5lcyBpbnRvIHRoZSBidWZmZXIuIFRoZXJlIGlzIG5vCisgKglndWFyYW50ZWUgdGhlIGJ1ZmZlciBpcyBhIERNQSB0YXJnZXQhCisgKgorICoJTG9ja2luZzogTWF5IGNhbGwgZnVuY3Rpb25zIHRha2luZyB0dHktPmJ1Zi5sb2NrCisgKi8KKworaW50IHR0eV9wcmVwYXJlX2ZsaXBfc3RyaW5nX2ZsYWdzKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksCisJCQl1bnNpZ25lZCBjaGFyICoqY2hhcnMsIGNoYXIgKipmbGFncywgc2l6ZV90IHNpemUpCit7CisJaW50IHNwYWNlID0gdHR5X2J1ZmZlcl9yZXF1ZXN0X3Jvb20odHR5LCBzaXplKTsKKwlpZiAobGlrZWx5KHNwYWNlKSkgeworCQlzdHJ1Y3QgdHR5X2J1ZmZlciAqdGIgPSB0dHktPmJ1Zi50YWlsOworCQkqY2hhcnMgPSB0Yi0+Y2hhcl9idWZfcHRyICsgdGItPnVzZWQ7CisJCSpmbGFncyA9IHRiLT5mbGFnX2J1Zl9wdHIgKyB0Yi0+dXNlZDsKKwkJdGItPnVzZWQgKz0gc3BhY2U7CisJfQorCXJldHVybiBzcGFjZTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHR0eV9wcmVwYXJlX2ZsaXBfc3RyaW5nX2ZsYWdzKTsKKworCisKKy8qKgorICoJZmx1c2hfdG9fbGRpc2MKKyAqCUB3b3JrOiB0dHkgc3RydWN0dXJlIHBhc3NlZCBmcm9tIHdvcmsgcXVldWUuCisgKgorICoJVGhpcyByb3V0aW5lIGlzIGNhbGxlZCBvdXQgb2YgdGhlIHNvZnR3YXJlIGludGVycnVwdCB0byBmbHVzaCBkYXRhCisgKglmcm9tIHRoZSBidWZmZXIgY2hhaW4gdG8gdGhlIGxpbmUgZGlzY2lwbGluZS4KKyAqCisgKglMb2NraW5nOiBob2xkcyB0dHktPmJ1Zi5sb2NrIHRvIGd1YXJkIGJ1ZmZlciBsaXN0LiBEcm9wcyB0aGUgbG9jaworICoJd2hpbGUgaW52b2tpbmcgdGhlIGxpbmUgZGlzY2lwbGluZSByZWNlaXZlX2J1ZiBtZXRob2QuIFRoZQorICoJcmVjZWl2ZV9idWYgbWV0aG9kIGlzIHNpbmdsZSB0aHJlYWRlZCBmb3IgZWFjaCB0dHkgaW5zdGFuY2UuCisgKi8KKworc3RhdGljIHZvaWQgZmx1c2hfdG9fbGRpc2Moc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCB0dHlfc3RydWN0ICp0dHkgPQorCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IHR0eV9zdHJ1Y3QsIGJ1Zi53b3JrLndvcmspOworCXVuc2lnbmVkIGxvbmcgCWZsYWdzOworCXN0cnVjdCB0dHlfbGRpc2MgKmRpc2M7CisJc3RydWN0IHR0eV9idWZmZXIgKnRidWYsICpoZWFkOworCWNoYXIgKmNoYXJfYnVmOworCXVuc2lnbmVkIGNoYXIgKmZsYWdfYnVmOworCisJZGlzYyA9IHR0eV9sZGlzY19yZWYodHR5KTsKKwlpZiAoZGlzYyA9PSBOVUxMKQkvKiAgIVRUWV9MRElTQyAqLworCQlyZXR1cm47CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmdHR5LT5idWYubG9jaywgZmxhZ3MpOworCS8qIFNvIHdlIGtub3cgYSBmbHVzaCBpcyBydW5uaW5nICovCisJc2V0X2JpdChUVFlfRkxVU0hJTkcsICZ0dHktPmZsYWdzKTsKKwloZWFkID0gdHR5LT5idWYuaGVhZDsKKwlpZiAoaGVhZCAhPSBOVUxMKSB7CisJCXR0eS0+YnVmLmhlYWQgPSBOVUxMOworCQlmb3IgKDs7KSB7CisJCQlpbnQgY291bnQgPSBoZWFkLT5jb21taXQgLSBoZWFkLT5yZWFkOworCQkJaWYgKCFjb3VudCkgeworCQkJCWlmIChoZWFkLT5uZXh0ID09IE5VTEwpCisJCQkJCWJyZWFrOworCQkJCXRidWYgPSBoZWFkOworCQkJCWhlYWQgPSBoZWFkLT5uZXh0OworCQkJCXR0eV9idWZmZXJfZnJlZSh0dHksIHRidWYpOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJLyogTGRpc2Mgb3IgdXNlciBpcyB0cnlpbmcgdG8gZmx1c2ggdGhlIGJ1ZmZlcnMKKwkJCSAgIHdlIGFyZSBmZWVkaW5nIHRvIHRoZSBsZGlzYywgc3RvcCBmZWVkaW5nIHRoZQorCQkJICAgbGluZSBkaXNjaXBsaW5lIGFzIHdlIHdhbnQgdG8gZW1wdHkgdGhlIHF1ZXVlICovCisJCQlpZiAodGVzdF9iaXQoVFRZX0ZMVVNIUEVORElORywgJnR0eS0+ZmxhZ3MpKQorCQkJCWJyZWFrOworCQkJaWYgKCF0dHktPnJlY2VpdmVfcm9vbSkgeworCQkJCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmdHR5LT5idWYud29yaywgMSk7CisJCQkJYnJlYWs7CisJCQl9CisJCQlpZiAoY291bnQgPiB0dHktPnJlY2VpdmVfcm9vbSkKKwkJCQljb3VudCA9IHR0eS0+cmVjZWl2ZV9yb29tOworCQkJY2hhcl9idWYgPSBoZWFkLT5jaGFyX2J1Zl9wdHIgKyBoZWFkLT5yZWFkOworCQkJZmxhZ19idWYgPSBoZWFkLT5mbGFnX2J1Zl9wdHIgKyBoZWFkLT5yZWFkOworCQkJaGVhZC0+cmVhZCArPSBjb3VudDsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnR0eS0+YnVmLmxvY2ssIGZsYWdzKTsKKwkJCWRpc2MtPm9wcy0+cmVjZWl2ZV9idWYodHR5LCBjaGFyX2J1ZiwKKwkJCQkJCQlmbGFnX2J1ZiwgY291bnQpOworCQkJc3Bpbl9sb2NrX2lycXNhdmUoJnR0eS0+YnVmLmxvY2ssIGZsYWdzKTsKKwkJfQorCQkvKiBSZXN0b3JlIHRoZSBxdWV1ZSBoZWFkICovCisJCXR0eS0+YnVmLmhlYWQgPSBoZWFkOworCX0KKwkvKiBXZSBtYXkgaGF2ZSBhIGRlZmVycmVkIHJlcXVlc3QgdG8gZmx1c2ggdGhlIGlucHV0IGJ1ZmZlciwKKwkgICBpZiBzbyBwdWxsIHRoZSBjaGFpbiB1bmRlciB0aGUgbG9jayBhbmQgZW1wdHkgdGhlIHF1ZXVlICovCisJaWYgKHRlc3RfYml0KFRUWV9GTFVTSFBFTkRJTkcsICZ0dHktPmZsYWdzKSkgeworCQlfX3R0eV9idWZmZXJfZmx1c2godHR5KTsKKwkJY2xlYXJfYml0KFRUWV9GTFVTSFBFTkRJTkcsICZ0dHktPmZsYWdzKTsKKwkJd2FrZV91cCgmdHR5LT5yZWFkX3dhaXQpOworCX0KKwljbGVhcl9iaXQoVFRZX0ZMVVNISU5HLCAmdHR5LT5mbGFncyk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdHR5LT5idWYubG9jaywgZmxhZ3MpOworCisJdHR5X2xkaXNjX2RlcmVmKGRpc2MpOworfQorCisvKioKKyAqCXR0eV9mbGlwX2J1ZmZlcl9wdXNoCS0JdGVybWluYWwKKyAqCUB0dHk6IHR0eSB0byBwdXNoCisgKgorICoJUXVldWUgYSBwdXNoIG9mIHRoZSB0ZXJtaW5hbCBmbGlwIGJ1ZmZlcnMgdG8gdGhlIGxpbmUgZGlzY2lwbGluZS4gVGhpcworICoJZnVuY3Rpb24gbXVzdCBub3QgYmUgY2FsbGVkIGZyb20gSVJRIGNvbnRleHQgaWYgdHR5LT5sb3dfbGF0ZW5jeSBpcyBzZXQuCisgKgorICoJSW4gdGhlIGV2ZW50IG9mIHRoZSBxdWV1ZSBiZWluZyBidXN5IGZvciBmbGlwcGluZyB0aGUgd29yayB3aWxsIGJlCisgKgloZWxkIG9mZiBhbmQgcmV0cmllZCBsYXRlci4KKyAqCisgKglMb2NraW5nOiB0dHkgYnVmZmVyIGxvY2suIERyaXZlciBsb2NrcyBpbiBsb3cgbGF0ZW5jeSBtb2RlLgorICovCisKK3ZvaWQgdHR5X2ZsaXBfYnVmZmVyX3B1c2goc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXNwaW5fbG9ja19pcnFzYXZlKCZ0dHktPmJ1Zi5sb2NrLCBmbGFncyk7CisJaWYgKHR0eS0+YnVmLnRhaWwgIT0gTlVMTCkKKwkJdHR5LT5idWYudGFpbC0+Y29tbWl0ID0gdHR5LT5idWYudGFpbC0+dXNlZDsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0dHktPmJ1Zi5sb2NrLCBmbGFncyk7CisKKwlpZiAodHR5LT5sb3dfbGF0ZW5jeSkKKwkJZmx1c2hfdG9fbGRpc2MoJnR0eS0+YnVmLndvcmsud29yayk7CisJZWxzZQorCQlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJnR0eS0+YnVmLndvcmssIDEpOworfQorRVhQT1JUX1NZTUJPTCh0dHlfZmxpcF9idWZmZXJfcHVzaCk7CisKKy8qKgorICoJdHR5X2J1ZmZlcl9pbml0CQktCXByZXBhcmUgYSB0dHkgYnVmZmVyIHN0cnVjdHVyZQorICoJQHR0eTogdHR5IHRvIGluaXRpYWxpc2UKKyAqCisgKglTZXQgdXAgdGhlIGluaXRpYWwgc3RhdGUgb2YgdGhlIGJ1ZmZlciBtYW5hZ2VtZW50IGZvciBhIHR0eSBkZXZpY2UuCisgKglNdXN0IGJlIGNhbGxlZCBiZWZvcmUgdGhlIG90aGVyIHR0eSBidWZmZXIgZnVuY3Rpb25zIGFyZSB1c2VkLgorICoKKyAqCUxvY2tpbmc6IG5vbmUKKyAqLworCit2b2lkIHR0eV9idWZmZXJfaW5pdChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQoreworCXNwaW5fbG9ja19pbml0KCZ0dHktPmJ1Zi5sb2NrKTsKKwl0dHktPmJ1Zi5oZWFkID0gTlVMTDsKKwl0dHktPmJ1Zi50YWlsID0gTlVMTDsKKwl0dHktPmJ1Zi5mcmVlID0gTlVMTDsKKwl0dHktPmJ1Zi5tZW1vcnlfdXNlZCA9IDA7CisJSU5JVF9ERUxBWUVEX1dPUksoJnR0eS0+YnVmLndvcmssIGZsdXNoX3RvX2xkaXNjKTsKK30KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3R0eV9pby5jIGIvZHJpdmVycy9jaGFyL3R0eV9pby5jCmluZGV4IGU0ZGNlODcuLjU5ZjQ3MjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci90dHlfaW8uYworKysgYi9kcml2ZXJzL2NoYXIvdHR5X2lvLmMKQEAgLTQ5LDcgKzQ5LDcgQEAKICAqIGltcGxlbWVudCBDT05GSUdfVlQgYW5kIGdlbmVyYWxpemUgY29uc29sZSBkZXZpY2UgaW50ZXJmYWNlLgogICoJLS0gTWFya28gS29odGFsYSA8TWFya28uS29odGFsYUBodXQuZmk+LCBNYXJjaCA5NwogICoKLSAqIFJld3JvdGUgaW5pdF9kZXYgYW5kIHJlbGVhc2VfZGV2IHRvIGVsaW1pbmF0ZSByYWNlcy4KKyAqIFJld3JvdGUgdHR5X2luaXRfZGV2IGFuZCB0dHlfcmVsZWFzZV9kZXYgdG8gZWxpbWluYXRlIHJhY2VzLgogICoJLS0gQmlsbCBIYXdlcyA8d2hhd2VzQHN0YXIubmV0PiwgSnVuZSA5NwogICoKICAqIEFkZGVkIGRldmZzIHN1cHBvcnQuCkBAIC0xMzYsMTMgKzEzNiw2IEBACiBERUZJTkVfTVVURVgodHR5X211dGV4KTsKIEVYUE9SVF9TWU1CT0wodHR5X211dGV4KTsKIAotI2lmZGVmIENPTkZJR19VTklYOThfUFRZUwotZXh0ZXJuIHN0cnVjdCB0dHlfZHJpdmVyICpwdG1fZHJpdmVyOwkvKiBVbml4OTggcHR5IG1hc3RlcnM7IGZvciAvZGV2L3B0bXggKi8KLXN0YXRpYyBpbnQgcHRteF9vcGVuKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgZmlsZSAqKTsKLSNlbmRpZgotCi1zdGF0aWMgdm9pZCBpbml0aWFsaXplX3R0eV9zdHJ1Y3Qoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSk7Ci0KIHN0YXRpYyBzc2l6ZV90IHR0eV9yZWFkKHN0cnVjdCBmaWxlICosIGNoYXIgX191c2VyICosIHNpemVfdCwgbG9mZl90ICopOwogc3RhdGljIHNzaXplX3QgdHR5X3dyaXRlKHN0cnVjdCBmaWxlICosIGNvbnN0IGNoYXIgX191c2VyICosIHNpemVfdCwgbG9mZl90ICopOwogc3NpemVfdCByZWRpcmVjdGVkX3R0eV93cml0ZShzdHJ1Y3QgZmlsZSAqLCBjb25zdCBjaGFyIF9fdXNlciAqLApAQCAtMTcxLDEzICsxNjQsMTEgQEAKICAqCUxvY2tpbmc6IG5vbmUKICAqLwogCi1zdGF0aWMgc3RydWN0IHR0eV9zdHJ1Y3QgKmFsbG9jX3R0eV9zdHJ1Y3Qodm9pZCkKK3N0cnVjdCB0dHlfc3RydWN0ICphbGxvY190dHlfc3RydWN0KHZvaWQpCiB7CiAJcmV0dXJuIGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB0dHlfc3RydWN0KSwgR0ZQX0tFUk5FTCk7CiB9CiAKLXN0YXRpYyB2b2lkIHR0eV9idWZmZXJfZnJlZV9hbGwoc3RydWN0IHR0eV9zdHJ1Y3QgKik7Ci0KIC8qKgogICoJZnJlZV90dHlfc3RydWN0CQktCWZyZWUgYSBkaXN1c2VkIHR0eQogICoJQHR0eTogdHR5IHN0cnVjdCB0byBmcmVlCkBAIC0xODcsNyArMTc4LDcgQEAKICAqCUxvY2tpbmc6IG5vbmUuIE11c3QgYmUgY2FsbGVkIGFmdGVyIHR0eSBpcyBkZWZpbml0ZWx5IHVudXNlZAogICovCiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBmcmVlX3R0eV9zdHJ1Y3Qoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKK3ZvaWQgZnJlZV90dHlfc3RydWN0KHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCiB7CiAJa2ZyZWUodHR5LT53cml0ZV9idWYpOwogCXR0eV9idWZmZXJfZnJlZV9hbGwodHR5KTsKQEAgLTI2MywzOTggKzI1NCw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLS8qCi0gKiBUdHkgYnVmZmVyIGFsbG9jYXRpb24gbWFuYWdlbWVudAotICovCi0KLS8qKgotICoJdHR5X2J1ZmZlcl9mcmVlX2FsbAkJLQlmcmVlIGJ1ZmZlcnMgdXNlZCBieSBhIHR0eQotICoJQHR0eTogdHR5IHRvIGZyZWUgZnJvbQotICoKLSAqCVJlbW92ZSBhbGwgdGhlIGJ1ZmZlcnMgcGVuZGluZyBvbiBhIHR0eSB3aGV0aGVyIHF1ZXVlZCB3aXRoIGRhdGEKLSAqCW9yIGluIHRoZSBmcmVlIHJpbmcuIE11c3QgYmUgY2FsbGVkIHdoZW4gdGhlIHR0eSBpcyBubyBsb25nZXIgaW4gdXNlCi0gKgotICoJTG9ja2luZzogbm9uZQotICovCi0KLXN0YXRpYyB2b2lkIHR0eV9idWZmZXJfZnJlZV9hbGwoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKLXsKLQlzdHJ1Y3QgdHR5X2J1ZmZlciAqdGhlYWQ7Ci0Jd2hpbGUgKCh0aGVhZCA9IHR0eS0+YnVmLmhlYWQpICE9IE5VTEwpIHsKLQkJdHR5LT5idWYuaGVhZCA9IHRoZWFkLT5uZXh0OwotCQlrZnJlZSh0aGVhZCk7Ci0JfQotCXdoaWxlICgodGhlYWQgPSB0dHktPmJ1Zi5mcmVlKSAhPSBOVUxMKSB7Ci0JCXR0eS0+YnVmLmZyZWUgPSB0aGVhZC0+bmV4dDsKLQkJa2ZyZWUodGhlYWQpOwotCX0KLQl0dHktPmJ1Zi50YWlsID0gTlVMTDsKLQl0dHktPmJ1Zi5tZW1vcnlfdXNlZCA9IDA7Ci19Ci0KLS8qKgotICoJdHR5X2J1ZmZlcl9pbml0CQktCXByZXBhcmUgYSB0dHkgYnVmZmVyIHN0cnVjdHVyZQotICoJQHR0eTogdHR5IHRvIGluaXRpYWxpc2UKLSAqCi0gKglTZXQgdXAgdGhlIGluaXRpYWwgc3RhdGUgb2YgdGhlIGJ1ZmZlciBtYW5hZ2VtZW50IGZvciBhIHR0eSBkZXZpY2UuCi0gKglNdXN0IGJlIGNhbGxlZCBiZWZvcmUgdGhlIG90aGVyIHR0eSBidWZmZXIgZnVuY3Rpb25zIGFyZSB1c2VkLgotICoKLSAqCUxvY2tpbmc6IG5vbmUKLSAqLwotCi1zdGF0aWMgdm9pZCB0dHlfYnVmZmVyX2luaXQoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKLXsKLQlzcGluX2xvY2tfaW5pdCgmdHR5LT5idWYubG9jayk7Ci0JdHR5LT5idWYuaGVhZCA9IE5VTEw7Ci0JdHR5LT5idWYudGFpbCA9IE5VTEw7Ci0JdHR5LT5idWYuZnJlZSA9IE5VTEw7Ci0JdHR5LT5idWYubWVtb3J5X3VzZWQgPSAwOwotfQotCi0vKioKLSAqCXR0eV9idWZmZXJfYWxsb2MJLQlhbGxvY2F0ZSBhIHR0eSBidWZmZXIKLSAqCUB0dHk6IHR0eSBkZXZpY2UKLSAqCUBzaXplOiBkZXNpcmVkIHNpemUgKGNoYXJhY3RlcnMpCi0gKgotICoJQWxsb2NhdGUgYSBuZXcgdHR5IGJ1ZmZlciB0byBob2xkIHRoZSBkZXNpcmVkIG51bWJlciBvZiBjaGFyYWN0ZXJzLgotICoJUmV0dXJuIE5VTEwgaWYgb3V0IG9mIG1lbW9yeSBvciB0aGUgYWxsb2NhdGlvbiB3b3VsZCBleGNlZWQgdGhlCi0gKglwZXIgZGV2aWNlIHF1ZXVlCi0gKgotICoJTG9ja2luZzogQ2FsbGVyIG11c3QgaG9sZCB0dHktPmJ1Zi5sb2NrCi0gKi8KLQotc3RhdGljIHN0cnVjdCB0dHlfYnVmZmVyICp0dHlfYnVmZmVyX2FsbG9jKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHNpemVfdCBzaXplKQotewotCXN0cnVjdCB0dHlfYnVmZmVyICpwOwotCi0JaWYgKHR0eS0+YnVmLm1lbW9yeV91c2VkICsgc2l6ZSA+IDY1NTM2KQotCQlyZXR1cm4gTlVMTDsKLQlwID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHR0eV9idWZmZXIpICsgMiAqIHNpemUsIEdGUF9BVE9NSUMpOwotCWlmIChwID09IE5VTEwpCi0JCXJldHVybiBOVUxMOwotCXAtPnVzZWQgPSAwOwotCXAtPnNpemUgPSBzaXplOwotCXAtPm5leHQgPSBOVUxMOwotCXAtPmNvbW1pdCA9IDA7Ci0JcC0+cmVhZCA9IDA7Ci0JcC0+Y2hhcl9idWZfcHRyID0gKGNoYXIgKikocC0+ZGF0YSk7Ci0JcC0+ZmxhZ19idWZfcHRyID0gKHVuc2lnbmVkIGNoYXIgKilwLT5jaGFyX2J1Zl9wdHIgKyBzaXplOwotCXR0eS0+YnVmLm1lbW9yeV91c2VkICs9IHNpemU7Ci0JcmV0dXJuIHA7Ci19Ci0KLS8qKgotICoJdHR5X2J1ZmZlcl9mcmVlCQktCWZyZWUgYSB0dHkgYnVmZmVyCi0gKglAdHR5OiB0dHkgb3duaW5nIHRoZSBidWZmZXIKLSAqCUBiOiB0aGUgYnVmZmVyIHRvIGZyZWUKLSAqCi0gKglGcmVlIGEgdHR5IGJ1ZmZlciwgb3IgYWRkIGl0IHRvIHRoZSBmcmVlIGxpc3QgYWNjb3JkaW5nIHRvIG91cgotICoJaW50ZXJuYWwgc3RyYXRlZ3kKLSAqCi0gKglMb2NraW5nOiBDYWxsZXIgbXVzdCBob2xkIHR0eS0+YnVmLmxvY2sKLSAqLwotCi1zdGF0aWMgdm9pZCB0dHlfYnVmZmVyX2ZyZWUoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IHR0eV9idWZmZXIgKmIpCi17Ci0JLyogRHVtYiBzdHJhdGVneSBmb3Igbm93IC0gc2hvdWxkIGtlZXAgc29tZSBzdGF0cyAqLwotCXR0eS0+YnVmLm1lbW9yeV91c2VkIC09IGItPnNpemU7Ci0JV0FSTl9PTih0dHktPmJ1Zi5tZW1vcnlfdXNlZCA8IDApOwotCi0JaWYgKGItPnNpemUgPj0gNTEyKQotCQlrZnJlZShiKTsKLQllbHNlIHsKLQkJYi0+bmV4dCA9IHR0eS0+YnVmLmZyZWU7Ci0JCXR0eS0+YnVmLmZyZWUgPSBiOwotCX0KLX0KLQotLyoqCi0gKglfX3R0eV9idWZmZXJfZmx1c2gJCS0JZmx1c2ggZnVsbCB0dHkgYnVmZmVycwotICoJQHR0eTogdHR5IHRvIGZsdXNoCi0gKgotICoJZmx1c2ggYWxsIHRoZSBidWZmZXJzIGNvbnRhaW5pbmcgcmVjZWl2ZSBkYXRhLiBDYWxsZXIgbXVzdAotICoJaG9sZCB0aGUgYnVmZmVyIGxvY2sgYW5kIG11c3QgaGF2ZSBlbnN1cmVkIG5vIHBhcmFsbGVsIGZsdXNoIHRvCi0gKglsZGlzYyBpcyBydW5uaW5nLgotICoKLSAqCUxvY2tpbmc6IENhbGxlciBtdXN0IGhvbGQgdHR5LT5idWYubG9jawotICovCi0KLXN0YXRpYyB2b2lkIF9fdHR5X2J1ZmZlcl9mbHVzaChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQotewotCXN0cnVjdCB0dHlfYnVmZmVyICp0aGVhZDsKLQotCXdoaWxlICgodGhlYWQgPSB0dHktPmJ1Zi5oZWFkKSAhPSBOVUxMKSB7Ci0JCXR0eS0+YnVmLmhlYWQgPSB0aGVhZC0+bmV4dDsKLQkJdHR5X2J1ZmZlcl9mcmVlKHR0eSwgdGhlYWQpOwotCX0KLQl0dHktPmJ1Zi50YWlsID0gTlVMTDsKLX0KLQotLyoqCi0gKgl0dHlfYnVmZmVyX2ZsdXNoCQktCWZsdXNoIGZ1bGwgdHR5IGJ1ZmZlcnMKLSAqCUB0dHk6IHR0eSB0byBmbHVzaAotICoKLSAqCWZsdXNoIGFsbCB0aGUgYnVmZmVycyBjb250YWluaW5nIHJlY2VpdmUgZGF0YS4gSWYgdGhlIGJ1ZmZlciBpcwotICoJYmVpbmcgcHJvY2Vzc2VkIGJ5IGZsdXNoX3RvX2xkaXNjIHRoZW4gd2UgZGVmZXIgdGhlIHByb2Nlc3NpbmcKLSAqCXRvIHRoYXQgZnVuY3Rpb24KLSAqCi0gKglMb2NraW5nOiBub25lCi0gKi8KLQotc3RhdGljIHZvaWQgdHR5X2J1ZmZlcl9mbHVzaChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0Jc3Bpbl9sb2NrX2lycXNhdmUoJnR0eS0+YnVmLmxvY2ssIGZsYWdzKTsKLQotCS8qIElmIHRoZSBkYXRhIGlzIGJlaW5nIHB1c2hlZCB0byB0aGUgdHR5IGxheWVyIHRoZW4gd2UgY2FuJ3QKLQkgICBwcm9jZXNzIGl0IGhlcmUuIEluc3RlYWQgc2V0IGEgZmxhZyBhbmQgdGhlIGZsdXNoX3RvX2xkaXNjCi0JICAgcGF0aCB3aWxsIHByb2Nlc3MgdGhlIGZsdXNoIHJlcXVlc3QgYmVmb3JlIGl0IGV4aXRzICovCi0JaWYgKHRlc3RfYml0KFRUWV9GTFVTSElORywgJnR0eS0+ZmxhZ3MpKSB7Ci0JCXNldF9iaXQoVFRZX0ZMVVNIUEVORElORywgJnR0eS0+ZmxhZ3MpOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0dHktPmJ1Zi5sb2NrLCBmbGFncyk7Ci0JCXdhaXRfZXZlbnQodHR5LT5yZWFkX3dhaXQsCi0JCQkJdGVzdF9iaXQoVFRZX0ZMVVNIUEVORElORywgJnR0eS0+ZmxhZ3MpID09IDApOwotCQlyZXR1cm47Ci0JfSBlbHNlCi0JCV9fdHR5X2J1ZmZlcl9mbHVzaCh0dHkpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnR0eS0+YnVmLmxvY2ssIGZsYWdzKTsKLX0KLQotLyoqCi0gKgl0dHlfYnVmZmVyX2ZpbmQJCS0JZmluZCBhIGZyZWUgdHR5IGJ1ZmZlcgotICoJQHR0eTogdHR5IG93bmluZyB0aGUgYnVmZmVyCi0gKglAc2l6ZTogY2hhcmFjdGVycyB3YW50ZWQKLSAqCi0gKglMb2NhdGUgYW4gZXhpc3Rpbmcgc3VpdGFibGUgdHR5IGJ1ZmZlciBvciBpZiB3ZSBhcmUgbGFja2luZyBvbmUgdGhlbgotICoJYWxsb2NhdGUgYSBuZXcgb25lLiBXZSByb3VuZCBvdXIgYnVmZmVycyBvZmYgaW4gMjU2IGNoYXJhY3RlciBjaHVua3MKLSAqCXRvIGdldCBiZXR0ZXIgYWxsb2NhdGlvbiBiZWhhdmlvdXIuCi0gKgotICoJTG9ja2luZzogQ2FsbGVyIG11c3QgaG9sZCB0dHktPmJ1Zi5sb2NrCi0gKi8KLQotc3RhdGljIHN0cnVjdCB0dHlfYnVmZmVyICp0dHlfYnVmZmVyX2ZpbmQoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc2l6ZV90IHNpemUpCi17Ci0Jc3RydWN0IHR0eV9idWZmZXIgKip0YmggPSAmdHR5LT5idWYuZnJlZTsKLQl3aGlsZSAoKCp0YmgpICE9IE5VTEwpIHsKLQkJc3RydWN0IHR0eV9idWZmZXIgKnQgPSAqdGJoOwotCQlpZiAodC0+c2l6ZSA+PSBzaXplKSB7Ci0JCQkqdGJoID0gdC0+bmV4dDsKLQkJCXQtPm5leHQgPSBOVUxMOwotCQkJdC0+dXNlZCA9IDA7Ci0JCQl0LT5jb21taXQgPSAwOwotCQkJdC0+cmVhZCA9IDA7Ci0JCQl0dHktPmJ1Zi5tZW1vcnlfdXNlZCArPSB0LT5zaXplOwotCQkJcmV0dXJuIHQ7Ci0JCX0KLQkJdGJoID0gJigoKnRiaCktPm5leHQpOwotCX0KLQkvKiBSb3VuZCB0aGUgYnVmZmVyIHNpemUgb3V0ICovCi0Jc2l6ZSA9IChzaXplICsgMHhGRikgJiB+MHhGRjsKLQlyZXR1cm4gdHR5X2J1ZmZlcl9hbGxvYyh0dHksIHNpemUpOwotCS8qIFNob3VsZCBwb3NzaWJseSBjaGVjayBpZiB0aGlzIGZhaWxzIGZvciB0aGUgbGFyZ2VzdCBidWZmZXIgd2UKLQkgICBoYXZlIHF1ZXVlZCBhbmQgcmVjeWNsZSB0aGF0ID8gKi8KLX0KLQotLyoqCi0gKgl0dHlfYnVmZmVyX3JlcXVlc3Rfcm9vbQkJLQlncm93IHR0eSBidWZmZXIgaWYgbmVlZGVkCi0gKglAdHR5OiB0dHkgc3RydWN0dXJlCi0gKglAc2l6ZTogc2l6ZSBkZXNpcmVkCi0gKgotICoJTWFrZSBhdCBsZWFzdCBzaXplIGJ5dGVzIG9mIGxpbmVhciBzcGFjZSBhdmFpbGFibGUgZm9yIHRoZSB0dHkKLSAqCWJ1ZmZlci4gSWYgd2UgZmFpbCByZXR1cm4gdGhlIHNpemUgd2UgbWFuYWdlZCB0byBmaW5kLgotICoKLSAqCUxvY2tpbmc6IFRha2VzIHR0eS0+YnVmLmxvY2sKLSAqLwotaW50IHR0eV9idWZmZXJfcmVxdWVzdF9yb29tKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHNpemVfdCBzaXplKQotewotCXN0cnVjdCB0dHlfYnVmZmVyICpiLCAqbjsKLQlpbnQgbGVmdDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnR0eS0+YnVmLmxvY2ssIGZsYWdzKTsKLQotCS8qIE9QVElNSVNBVElPTjogV2UgY291bGQga2VlcCBhIHBlciB0dHkgInplcm8iIHNpemVkIGJ1ZmZlciB0bwotCSAgIHJlbW92ZSB0aGlzIGNvbmRpdGlvbmFsIGlmIGl0cyB3b3J0aCBpdC4gVGhpcyB3b3VsZCBiZSBpbnZpc2libGUKLQkgICB0byB0aGUgY2FsbGVycyAqLwotCWlmICgoYiA9IHR0eS0+YnVmLnRhaWwpICE9IE5VTEwpCi0JCWxlZnQgPSBiLT5zaXplIC0gYi0+dXNlZDsKLQllbHNlCi0JCWxlZnQgPSAwOwotCi0JaWYgKGxlZnQgPCBzaXplKSB7Ci0JCS8qIFRoaXMgaXMgdGhlIHNsb3cgcGF0aCAtIGxvb2tpbmcgZm9yIG5ldyBidWZmZXJzIHRvIHVzZSAqLwotCQlpZiAoKG4gPSB0dHlfYnVmZmVyX2ZpbmQodHR5LCBzaXplKSkgIT0gTlVMTCkgewotCQkJaWYgKGIgIT0gTlVMTCkgewotCQkJCWItPm5leHQgPSBuOwotCQkJCWItPmNvbW1pdCA9IGItPnVzZWQ7Ci0JCQl9IGVsc2UKLQkJCQl0dHktPmJ1Zi5oZWFkID0gbjsKLQkJCXR0eS0+YnVmLnRhaWwgPSBuOwotCQl9IGVsc2UKLQkJCXNpemUgPSBsZWZ0OwotCX0KLQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnR0eS0+YnVmLmxvY2ssIGZsYWdzKTsKLQlyZXR1cm4gc2l6ZTsKLX0KLUVYUE9SVF9TWU1CT0xfR1BMKHR0eV9idWZmZXJfcmVxdWVzdF9yb29tKTsKLQotLyoqCi0gKgl0dHlfaW5zZXJ0X2ZsaXBfc3RyaW5nCS0JQWRkIGNoYXJhY3RlcnMgdG8gdGhlIHR0eSBidWZmZXIKLSAqCUB0dHk6IHR0eSBzdHJ1Y3R1cmUKLSAqCUBjaGFyczogY2hhcmFjdGVycwotICoJQHNpemU6IHNpemUKLSAqCi0gKglRdWV1ZSBhIHNlcmllcyBvZiBieXRlcyB0byB0aGUgdHR5IGJ1ZmZlcmluZy4gQWxsIHRoZSBjaGFyYWN0ZXJzCi0gKglwYXNzZWQgYXJlIG1hcmtlZCBhcyB3aXRob3V0IGVycm9yLiBSZXR1cm5zIHRoZSBudW1iZXIgYWRkZWQuCi0gKgotICoJTG9ja2luZzogQ2FsbGVkIGZ1bmN0aW9ucyBtYXkgdGFrZSB0dHktPmJ1Zi5sb2NrCi0gKi8KLQotaW50IHR0eV9pbnNlcnRfZmxpcF9zdHJpbmcoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgY29uc3QgdW5zaWduZWQgY2hhciAqY2hhcnMsCi0JCQkJc2l6ZV90IHNpemUpCi17Ci0JaW50IGNvcGllZCA9IDA7Ci0JZG8gewotCQlpbnQgc3BhY2UgPSB0dHlfYnVmZmVyX3JlcXVlc3Rfcm9vbSh0dHksIHNpemUgLSBjb3BpZWQpOwotCQlzdHJ1Y3QgdHR5X2J1ZmZlciAqdGIgPSB0dHktPmJ1Zi50YWlsOwotCQkvKiBJZiB0aGVyZSBpcyBubyBzcGFjZSB0aGVuIHRiIG1heSBiZSBOVUxMICovCi0JCWlmICh1bmxpa2VseShzcGFjZSA9PSAwKSkKLQkJCWJyZWFrOwotCQltZW1jcHkodGItPmNoYXJfYnVmX3B0ciArIHRiLT51c2VkLCBjaGFycywgc3BhY2UpOwotCQltZW1zZXQodGItPmZsYWdfYnVmX3B0ciArIHRiLT51c2VkLCBUVFlfTk9STUFMLCBzcGFjZSk7Ci0JCXRiLT51c2VkICs9IHNwYWNlOwotCQljb3BpZWQgKz0gc3BhY2U7Ci0JCWNoYXJzICs9IHNwYWNlOwotCQkvKiBUaGVyZSBpcyBhIHNtYWxsIGNoYW5jZSB0aGF0IHdlIG5lZWQgdG8gc3BsaXQgdGhlIGRhdGEgb3ZlcgotCQkgICBzZXZlcmFsIGJ1ZmZlcnMuIElmIHRoaXMgaXMgdGhlIGNhc2Ugd2UgbXVzdCBsb29wICovCi0JfSB3aGlsZSAodW5saWtlbHkoc2l6ZSA+IGNvcGllZCkpOwotCXJldHVybiBjb3BpZWQ7Ci19Ci1FWFBPUlRfU1lNQk9MKHR0eV9pbnNlcnRfZmxpcF9zdHJpbmcpOwotCi0vKioKLSAqCXR0eV9pbnNlcnRfZmxpcF9zdHJpbmdfZmxhZ3MJLQlBZGQgY2hhcmFjdGVycyB0byB0aGUgdHR5IGJ1ZmZlcgotICoJQHR0eTogdHR5IHN0cnVjdHVyZQotICoJQGNoYXJzOiBjaGFyYWN0ZXJzCi0gKglAZmxhZ3M6IGZsYWcgYnl0ZXMKLSAqCUBzaXplOiBzaXplCi0gKgotICoJUXVldWUgYSBzZXJpZXMgb2YgYnl0ZXMgdG8gdGhlIHR0eSBidWZmZXJpbmcuIEZvciBlYWNoIGNoYXJhY3RlcgotICoJdGhlIGZsYWdzIGFycmF5IGluZGljYXRlcyB0aGUgc3RhdHVzIG9mIHRoZSBjaGFyYWN0ZXIuIFJldHVybnMgdGhlCi0gKgludW1iZXIgYWRkZWQuCi0gKgotICoJTG9ja2luZzogQ2FsbGVkIGZ1bmN0aW9ucyBtYXkgdGFrZSB0dHktPmJ1Zi5sb2NrCi0gKi8KLQotaW50IHR0eV9pbnNlcnRfZmxpcF9zdHJpbmdfZmxhZ3Moc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwKLQkJY29uc3QgdW5zaWduZWQgY2hhciAqY2hhcnMsIGNvbnN0IGNoYXIgKmZsYWdzLCBzaXplX3Qgc2l6ZSkKLXsKLQlpbnQgY29waWVkID0gMDsKLQlkbyB7Ci0JCWludCBzcGFjZSA9IHR0eV9idWZmZXJfcmVxdWVzdF9yb29tKHR0eSwgc2l6ZSAtIGNvcGllZCk7Ci0JCXN0cnVjdCB0dHlfYnVmZmVyICp0YiA9IHR0eS0+YnVmLnRhaWw7Ci0JCS8qIElmIHRoZXJlIGlzIG5vIHNwYWNlIHRoZW4gdGIgbWF5IGJlIE5VTEwgKi8KLQkJaWYgKHVubGlrZWx5KHNwYWNlID09IDApKQotCQkJYnJlYWs7Ci0JCW1lbWNweSh0Yi0+Y2hhcl9idWZfcHRyICsgdGItPnVzZWQsIGNoYXJzLCBzcGFjZSk7Ci0JCW1lbWNweSh0Yi0+ZmxhZ19idWZfcHRyICsgdGItPnVzZWQsIGZsYWdzLCBzcGFjZSk7Ci0JCXRiLT51c2VkICs9IHNwYWNlOwotCQljb3BpZWQgKz0gc3BhY2U7Ci0JCWNoYXJzICs9IHNwYWNlOwotCQlmbGFncyArPSBzcGFjZTsKLQkJLyogVGhlcmUgaXMgYSBzbWFsbCBjaGFuY2UgdGhhdCB3ZSBuZWVkIHRvIHNwbGl0IHRoZSBkYXRhIG92ZXIKLQkJICAgc2V2ZXJhbCBidWZmZXJzLiBJZiB0aGlzIGlzIHRoZSBjYXNlIHdlIG11c3QgbG9vcCAqLwotCX0gd2hpbGUgKHVubGlrZWx5KHNpemUgPiBjb3BpZWQpKTsKLQlyZXR1cm4gY29waWVkOwotfQotRVhQT1JUX1NZTUJPTCh0dHlfaW5zZXJ0X2ZsaXBfc3RyaW5nX2ZsYWdzKTsKLQotLyoqCi0gKgl0dHlfc2NoZWR1bGVfZmxpcAktCXB1c2ggY2hhcmFjdGVycyB0byBsZGlzYwotICoJQHR0eTogdHR5IHRvIHB1c2ggZnJvbQotICoKLSAqCVRha2VzIGFueSBwZW5kaW5nIGJ1ZmZlcnMgYW5kIHRyYW5zZmVycyB0aGVpciBvd25lcnNoaXAgdG8gdGhlCi0gKglsZGlzYyBzaWRlIG9mIHRoZSBxdWV1ZS4gSXQgdGhlbiBzY2hlZHVsZXMgdGhvc2UgY2hhcmFjdGVycyBmb3IKLSAqCXByb2Nlc3NpbmcgYnkgdGhlIGxpbmUgZGlzY2lwbGluZS4KLSAqCi0gKglMb2NraW5nOiBUYWtlcyB0dHktPmJ1Zi5sb2NrCi0gKi8KLQotdm9pZCB0dHlfc2NoZWR1bGVfZmxpcChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0Jc3Bpbl9sb2NrX2lycXNhdmUoJnR0eS0+YnVmLmxvY2ssIGZsYWdzKTsKLQlpZiAodHR5LT5idWYudGFpbCAhPSBOVUxMKQotCQl0dHktPmJ1Zi50YWlsLT5jb21taXQgPSB0dHktPmJ1Zi50YWlsLT51c2VkOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnR0eS0+YnVmLmxvY2ssIGZsYWdzKTsKLQlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJnR0eS0+YnVmLndvcmssIDEpOwotfQotRVhQT1JUX1NZTUJPTCh0dHlfc2NoZWR1bGVfZmxpcCk7Ci0KLS8qKgotICoJdHR5X3ByZXBhcmVfZmxpcF9zdHJpbmcJCS0JbWFrZSByb29tIGZvciBjaGFyYWN0ZXJzCi0gKglAdHR5OiB0dHkKLSAqCUBjaGFyczogcmV0dXJuIHBvaW50ZXIgZm9yIGNoYXJhY3RlciB3cml0ZSBhcmVhCi0gKglAc2l6ZTogZGVzaXJlZCBzaXplCi0gKgotICoJUHJlcGFyZSBhIGJsb2NrIG9mIHNwYWNlIGluIHRoZSBidWZmZXIgZm9yIGRhdGEuIFJldHVybnMgdGhlIGxlbmd0aAotICoJYXZhaWxhYmxlIGFuZCBidWZmZXIgcG9pbnRlciB0byB0aGUgc3BhY2Ugd2hpY2ggaXMgbm93IGFsbG9jYXRlZCBhbmQKLSAqCWFjY291bnRlZCBmb3IgYXMgcmVhZHkgZm9yIG5vcm1hbCBjaGFyYWN0ZXJzLiBUaGlzIGlzIHVzZWQgZm9yIGRyaXZlcnMKLSAqCXRoYXQgbmVlZCB0aGVpciBvd24gYmxvY2sgY29weSByb3V0aW5lcyBpbnRvIHRoZSBidWZmZXIuIFRoZXJlIGlzIG5vCi0gKglndWFyYW50ZWUgdGhlIGJ1ZmZlciBpcyBhIERNQSB0YXJnZXQhCi0gKgotICoJTG9ja2luZzogTWF5IGNhbGwgZnVuY3Rpb25zIHRha2luZyB0dHktPmJ1Zi5sb2NrCi0gKi8KLQotaW50IHR0eV9wcmVwYXJlX2ZsaXBfc3RyaW5nKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHVuc2lnbmVkIGNoYXIgKipjaGFycywKLQkJCQkJCQkJc2l6ZV90IHNpemUpCi17Ci0JaW50IHNwYWNlID0gdHR5X2J1ZmZlcl9yZXF1ZXN0X3Jvb20odHR5LCBzaXplKTsKLQlpZiAobGlrZWx5KHNwYWNlKSkgewotCQlzdHJ1Y3QgdHR5X2J1ZmZlciAqdGIgPSB0dHktPmJ1Zi50YWlsOwotCQkqY2hhcnMgPSB0Yi0+Y2hhcl9idWZfcHRyICsgdGItPnVzZWQ7Ci0JCW1lbXNldCh0Yi0+ZmxhZ19idWZfcHRyICsgdGItPnVzZWQsIFRUWV9OT1JNQUwsIHNwYWNlKTsKLQkJdGItPnVzZWQgKz0gc3BhY2U7Ci0JfQotCXJldHVybiBzcGFjZTsKLX0KLQotRVhQT1JUX1NZTUJPTF9HUEwodHR5X3ByZXBhcmVfZmxpcF9zdHJpbmcpOwotCi0vKioKLSAqCXR0eV9wcmVwYXJlX2ZsaXBfc3RyaW5nX2ZsYWdzCS0JbWFrZSByb29tIGZvciBjaGFyYWN0ZXJzCi0gKglAdHR5OiB0dHkKLSAqCUBjaGFyczogcmV0dXJuIHBvaW50ZXIgZm9yIGNoYXJhY3RlciB3cml0ZSBhcmVhCi0gKglAZmxhZ3M6IHJldHVybiBwb2ludGVyIGZvciBzdGF0dXMgZmxhZyB3cml0ZSBhcmVhCi0gKglAc2l6ZTogZGVzaXJlZCBzaXplCi0gKgotICoJUHJlcGFyZSBhIGJsb2NrIG9mIHNwYWNlIGluIHRoZSBidWZmZXIgZm9yIGRhdGEuIFJldHVybnMgdGhlIGxlbmd0aAotICoJYXZhaWxhYmxlIGFuZCBidWZmZXIgcG9pbnRlciB0byB0aGUgc3BhY2Ugd2hpY2ggaXMgbm93IGFsbG9jYXRlZCBhbmQKLSAqCWFjY291bnRlZCBmb3IgYXMgcmVhZHkgZm9yIGNoYXJhY3RlcnMuIFRoaXMgaXMgdXNlZCBmb3IgZHJpdmVycwotICoJdGhhdCBuZWVkIHRoZWlyIG93biBibG9jayBjb3B5IHJvdXRpbmVzIGludG8gdGhlIGJ1ZmZlci4gVGhlcmUgaXMgbm8KLSAqCWd1YXJhbnRlZSB0aGUgYnVmZmVyIGlzIGEgRE1BIHRhcmdldCEKLSAqCi0gKglMb2NraW5nOiBNYXkgY2FsbCBmdW5jdGlvbnMgdGFraW5nIHR0eS0+YnVmLmxvY2sKLSAqLwotCi1pbnQgdHR5X3ByZXBhcmVfZmxpcF9zdHJpbmdfZmxhZ3Moc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwKLQkJCXVuc2lnbmVkIGNoYXIgKipjaGFycywgY2hhciAqKmZsYWdzLCBzaXplX3Qgc2l6ZSkKLXsKLQlpbnQgc3BhY2UgPSB0dHlfYnVmZmVyX3JlcXVlc3Rfcm9vbSh0dHksIHNpemUpOwotCWlmIChsaWtlbHkoc3BhY2UpKSB7Ci0JCXN0cnVjdCB0dHlfYnVmZmVyICp0YiA9IHR0eS0+YnVmLnRhaWw7Ci0JCSpjaGFycyA9IHRiLT5jaGFyX2J1Zl9wdHIgKyB0Yi0+dXNlZDsKLQkJKmZsYWdzID0gdGItPmZsYWdfYnVmX3B0ciArIHRiLT51c2VkOwotCQl0Yi0+dXNlZCArPSBzcGFjZTsKLQl9Ci0JcmV0dXJuIHNwYWNlOwotfQotCi1FWFBPUlRfU1lNQk9MX0dQTCh0dHlfcHJlcGFyZV9mbGlwX3N0cmluZ19mbGFncyk7Ci0KLQotCiAvKioKICAqCWdldF90dHlfZHJpdmVyCQktCWZpbmQgZGV2aWNlIG9mIGEgdHR5CiAgKglAZGV2X3Q6IGRldmljZSBpZGVudGlmaWVyCkBAIC02NzUsNyArMjc0LDcgQEAKIAkJaWYgKGRldmljZSA8IGJhc2UgfHwgZGV2aWNlID49IGJhc2UgKyBwLT5udW0pCiAJCQljb250aW51ZTsKIAkJKmluZGV4ID0gZGV2aWNlIC0gYmFzZTsKLQkJcmV0dXJuIHA7CisJCXJldHVybiB0dHlfZHJpdmVyX2tyZWZfZ2V0KHApOwogCX0KIAlyZXR1cm4gTlVMTDsKIH0KQEAgLTcxOSw3ICszMTgsNyBAQAogCiAJCWlmICh0dHlfbGluZSA+PSAwICYmIHR0eV9saW5lIDw9IHAtPm51bSAmJiBwLT5vcHMgJiYKIAkJICAgIHAtPm9wcy0+cG9sbF9pbml0ICYmICFwLT5vcHMtPnBvbGxfaW5pdChwLCB0dHlfbGluZSwgc3RyKSkgewotCQkJcmVzID0gcDsKKwkJCXJlcyA9IHR0eV9kcml2ZXJfa3JlZl9nZXQocCk7CiAJCQkqbGluZSA9IHR0eV9saW5lOwogCQkJYnJlYWs7CiAJCX0KQEAgLTgxOSwyMCArNDE4LDYgQEAKIAkuZmFzeW5jCQk9IHR0eV9mYXN5bmMsCiB9OwogCi0jaWZkZWYgQ09ORklHX1VOSVg5OF9QVFlTCi1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBwdG14X2ZvcHMgPSB7Ci0JLmxsc2VlawkJPSBub19sbHNlZWssCi0JLnJlYWQJCT0gdHR5X3JlYWQsCi0JLndyaXRlCQk9IHR0eV93cml0ZSwKLQkucG9sbAkJPSB0dHlfcG9sbCwKLQkudW5sb2NrZWRfaW9jdGwJPSB0dHlfaW9jdGwsCi0JLmNvbXBhdF9pb2N0bAk9IHR0eV9jb21wYXRfaW9jdGwsCi0JLm9wZW4JCT0gcHRteF9vcGVuLAotCS5yZWxlYXNlCT0gdHR5X3JlbGVhc2UsCi0JLmZhc3luYwkJPSB0dHlfZmFzeW5jLAotfTsKLSNlbmRpZgotCiBzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBjb25zb2xlX2ZvcHMgPSB7CiAJLmxsc2VlawkJPSBub19sbHNlZWssCiAJLnJlYWQJCT0gdHR5X3JlYWQsCkBAIC05NTMsNiArNTM4LDcgQEAKIAlzdHJ1Y3QgdHR5X2xkaXNjICpsZDsKIAlpbnQgICAgY2xvc2Vjb3VudCA9IDAsIG47CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgcmVmcyA9IDA7CiAKIAlpZiAoIXR0eSkKIAkJcmV0dXJuOwpAQCAtMTAxOSw4ICs2MDUsMTIgQEAKIAlpZiAodHR5LT5zZXNzaW9uKSB7CiAJCWRvX2VhY2hfcGlkX3Rhc2sodHR5LT5zZXNzaW9uLCBQSURUWVBFX1NJRCwgcCkgewogCQkJc3Bpbl9sb2NrX2lycSgmcC0+c2lnaGFuZC0+c2lnbG9jayk7Ci0JCQlpZiAocC0+c2lnbmFsLT50dHkgPT0gdHR5KQorCQkJaWYgKHAtPnNpZ25hbC0+dHR5ID09IHR0eSkgewogCQkJCXAtPnNpZ25hbC0+dHR5ID0gTlVMTDsKKwkJCQkvKiBXZSBkZWZlciB0aGUgZGVyZWZlcmVuY2VzIG91dHNpZGUgZm8KKwkJCQkgICB0aGUgdGFza2xpc3QgbG9jayAqLworCQkJCXJlZnMrKzsKKwkJCX0KIAkJCWlmICghcC0+c2lnbmFsLT5sZWFkZXIpIHsKIAkJCQlzcGluX3VubG9ja19pcnEoJnAtPnNpZ2hhbmQtPnNpZ2xvY2spOwogCQkJCWNvbnRpbnVlOwpAQCAtMTA0Niw2ICs2MzYsMTAgQEAKIAl0dHktPmN0cmxfc3RhdHVzID0gMDsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0dHktPmN0cmxfbG9jaywgZmxhZ3MpOwogCisJLyogQWNjb3VudCBmb3IgdGhlIHAtPnNpZ25hbCByZWZlcmVuY2VzIHdlIGtpbGxlZCAqLworCXdoaWxlIChyZWZzLS0pCisJCXR0eV9rcmVmX3B1dCh0dHkpOworCiAJLyoKIAkgKiBJZiBvbmUgb2YgdGhlIGRldmljZXMgbWF0Y2hlcyBhIGNvbnNvbGUgcG9pbnRlciwgd2UKIAkgKiBjYW5ub3QganVzdCBjYWxsIGhhbmd1cCgpIGJlY2F1c2UgdGhhdCB3aWxsIGNhdXNlCkBAIC0xMTE1LDYgKzcwOSwyMyBAQAogRVhQT1JUX1NZTUJPTCh0dHlfdmhhbmd1cCk7CiAKIC8qKgorICoJdHR5X3ZoYW5ndXBfc2VsZgktCXByb2Nlc3Mgdmhhbmd1cCBmb3Igb3duIGN0dHkKKyAqCisgKglQZXJmb3JtIGEgdmhhbmd1cCBvbiB0aGUgY3VycmVudCBjb250cm9sbGluZyB0dHkKKyAqLworCit2b2lkIHR0eV92aGFuZ3VwX3NlbGYodm9pZCkKK3sKKwlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5OworCisJdHR5ID0gZ2V0X2N1cnJlbnRfdHR5KCk7CisJaWYgKHR0eSkgeworCQl0dHlfdmhhbmd1cCh0dHkpOworCQl0dHlfa3JlZl9wdXQodHR5KTsKKwl9Cit9CisKKy8qKgogICoJdHR5X2h1bmdfdXBfcAkJLQl3YXMgdHR5IGh1bmcgdXAKICAqCUBmaWxwOiBmaWxlIHBvaW50ZXIgb2YgdHR5CiAgKgpAQCAtMTE2NywxNiArNzc4LDE0IEBACiAJc3RydWN0IHBpZCAqdHR5X3BncnAgPSBOVUxMOwogCiAKLQltdXRleF9sb2NrKCZ0dHlfbXV0ZXgpOwogCXR0eSA9IGdldF9jdXJyZW50X3R0eSgpOwogCWlmICh0dHkpIHsKIAkJdHR5X3BncnAgPSBnZXRfcGlkKHR0eS0+cGdycCk7CiAJCWxvY2tfa2VybmVsKCk7Ci0JCW11dGV4X3VubG9jaygmdHR5X211dGV4KTsKLQkJLyogWFhYOiBoZXJlIHdlIHJhY2UsIHRoZXJlIGlzIG5vdGhpbmcgcHJvdGVjdGluZyB0dHkgKi8KIAkJaWYgKG9uX2V4aXQgJiYgdHR5LT5kcml2ZXItPnR5cGUgIT0gVFRZX0RSSVZFUl9UWVBFX1BUWSkKIAkJCXR0eV92aGFuZ3VwKHR0eSk7CiAJCXVubG9ja19rZXJuZWwoKTsKKwkJdHR5X2tyZWZfcHV0KHR0eSk7CiAJfSBlbHNlIGlmIChvbl9leGl0KSB7CiAJCXN0cnVjdCBwaWQgKm9sZF9wZ3JwOwogCQlzcGluX2xvY2tfaXJxKCZjdXJyZW50LT5zaWdoYW5kLT5zaWdsb2NrKTsKQEAgLTExODgsNyArNzk3LDYgQEAKIAkJCWtpbGxfcGdycChvbGRfcGdycCwgU0lHQ09OVCwgb25fZXhpdCk7CiAJCQlwdXRfcGlkKG9sZF9wZ3JwKTsKIAkJfQotCQltdXRleF91bmxvY2soJnR0eV9tdXRleCk7CiAJCXJldHVybjsKIAl9CiAJaWYgKHR0eV9wZ3JwKSB7CkBAIC0xMjAzLDggKzgxMSw2IEBACiAJY3VycmVudC0+c2lnbmFsLT50dHlfb2xkX3BncnAgPSBOVUxMOwogCXNwaW5fdW5sb2NrX2lycSgmY3VycmVudC0+c2lnaGFuZC0+c2lnbG9jayk7CiAKLQltdXRleF9sb2NrKCZ0dHlfbXV0ZXgpOwotCS8qIEl0IGlzIHBvc3NpYmxlIHRoYXQgZG9fdHR5X2hhbmd1cCBoYXMgZnJlZSdkIHRoaXMgdHR5ICovCiAJdHR5ID0gZ2V0X2N1cnJlbnRfdHR5KCk7CiAJaWYgKHR0eSkgewogCQl1bnNpZ25lZCBsb25nIGZsYWdzOwpAQCAtMTIxNCwxMyArODIwLDEzIEBACiAJCXR0eS0+c2Vzc2lvbiA9IE5VTEw7CiAJCXR0eS0+cGdycCA9IE5VTEw7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnR0eS0+Y3RybF9sb2NrLCBmbGFncyk7CisJCXR0eV9rcmVmX3B1dCh0dHkpOwogCX0gZWxzZSB7CiAjaWZkZWYgVFRZX0RFQlVHX0hBTkdVUAogCQlwcmludGsoS0VSTl9ERUJVRyAiZXJyb3IgYXR0ZW1wdGVkIHRvIHdyaXRlIHRvIHR0eSBbMHglcF0iCiAJCSAgICAgICAiID0gTlVMTCIsIHR0eSk7CiAjZW5kaWYKIAl9Ci0JbXV0ZXhfdW5sb2NrKCZ0dHlfbXV0ZXgpOwogCiAJLyogTm93IGNsZWFyIHNpZ25hbC0+dHR5IHVuZGVyIHRoZSBsb2NrICovCiAJcmVhZF9sb2NrKCZ0YXNrbGlzdF9sb2NrKTsKQEAgLTE0MjAsMTkgKzEwMjYsMTkgQEAKIAogCS8qIHdyaXRlX2J1Zi93cml0ZV9jbnQgaXMgcHJvdGVjdGVkIGJ5IHRoZSBhdG9taWNfd3JpdGVfbG9jayBtdXRleCAqLwogCWlmICh0dHktPndyaXRlX2NudCA8IGNodW5rKSB7Ci0JCXVuc2lnbmVkIGNoYXIgKmJ1ZjsKKwkJdW5zaWduZWQgY2hhciAqYnVmX2NodW5rOwogCiAJCWlmIChjaHVuayA8IDEwMjQpCiAJCQljaHVuayA9IDEwMjQ7CiAKLQkJYnVmID0ga21hbGxvYyhjaHVuaywgR0ZQX0tFUk5FTCk7Ci0JCWlmICghYnVmKSB7CisJCWJ1Zl9jaHVuayA9IGttYWxsb2MoY2h1bmssIEdGUF9LRVJORUwpOworCQlpZiAoIWJ1Zl9jaHVuaykgewogCQkJcmV0ID0gLUVOT01FTTsKIAkJCWdvdG8gb3V0OwogCQl9CiAJCWtmcmVlKHR0eS0+d3JpdGVfYnVmKTsKIAkJdHR5LT53cml0ZV9jbnQgPSBjaHVuazsKLQkJdHR5LT53cml0ZV9idWYgPSBidWY7CisJCXR0eS0+d3JpdGVfYnVmID0gYnVmX2NodW5rOwogCX0KIAogCS8qIERvIHRoZSB3cml0ZSAuLiAqLwpAQCAtMTQ2Niw2ICsxMDcyLDMxIEBACiAJcmV0dXJuIHJldDsKIH0KIAorLyoqCisgKiB0dHlfd3JpdGVfbWVzc2FnZSAtIHdyaXRlIGEgbWVzc2FnZSB0byBhIGNlcnRhaW4gdHR5LCBub3QganVzdCB0aGUgY29uc29sZS4KKyAqIEB0dHk6IHRoZSBkZXN0aW5hdGlvbiB0dHlfc3RydWN0CisgKiBAbXNnOiB0aGUgbWVzc2FnZSB0byB3cml0ZQorICoKKyAqIFRoaXMgaXMgdXNlZCBmb3IgbWVzc2FnZXMgdGhhdCBuZWVkIHRvIGJlIHJlZGlyZWN0ZWQgdG8gYSBzcGVjaWZpYyB0dHkuCisgKiBXZSBkb24ndCBwdXQgaXQgaW50byB0aGUgc3lzbG9nIHF1ZXVlIHJpZ2h0IG5vdyBtYXliZSBpbiB0aGUgZnV0dXJlIGlmCisgKiByZWFsbHkgbmVlZGVkLgorICoKKyAqIFdlIG11c3Qgc3RpbGwgaG9sZCB0aGUgQktMIGFuZCB0ZXN0IHRoZSBDTE9TSU5HIGZsYWcgZm9yIHRoZSBtb21lbnQuCisgKi8KKwordm9pZCB0dHlfd3JpdGVfbWVzc2FnZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBjaGFyICptc2cpCit7CisJbG9ja19rZXJuZWwoKTsKKwlpZiAodHR5KSB7CisJCW11dGV4X2xvY2soJnR0eS0+YXRvbWljX3dyaXRlX2xvY2spOworCQlpZiAodHR5LT5vcHMtPndyaXRlICYmICF0ZXN0X2JpdChUVFlfQ0xPU0lORywgJnR0eS0+ZmxhZ3MpKQorCQkJdHR5LT5vcHMtPndyaXRlKHR0eSwgbXNnLCBzdHJsZW4obXNnKSk7CisJCXR0eV93cml0ZV91bmxvY2sodHR5KTsKKwl9CisJdW5sb2NrX2tlcm5lbCgpOworCXJldHVybjsKK30KKwogCiAvKioKICAqCXR0eV93cml0ZQkJLQl3cml0ZSBtZXRob2QgZm9yIHR0eSBkZXZpY2UgZmlsZQpAQCAtMTUzMyw0MiArMTE2NCw2IEBACiAJcmV0dXJuIHR0eV93cml0ZShmaWxlLCBidWYsIGNvdW50LCBwcG9zKTsKIH0KIAotdm9pZCB0dHlfcG9ydF9pbml0KHN0cnVjdCB0dHlfcG9ydCAqcG9ydCkKLXsKLQltZW1zZXQocG9ydCwgMCwgc2l6ZW9mKCpwb3J0KSk7Ci0JaW5pdF93YWl0cXVldWVfaGVhZCgmcG9ydC0+b3Blbl93YWl0KTsKLQlpbml0X3dhaXRxdWV1ZV9oZWFkKCZwb3J0LT5jbG9zZV93YWl0KTsKLQltdXRleF9pbml0KCZwb3J0LT5tdXRleCk7Ci0JcG9ydC0+Y2xvc2VfZGVsYXkgPSAoNTAgKiBIWikgLyAxMDA7Ci0JcG9ydC0+Y2xvc2luZ193YWl0ID0gKDMwMDAgKiBIWikgLyAxMDA7Ci19Ci1FWFBPUlRfU1lNQk9MKHR0eV9wb3J0X2luaXQpOwotCi1pbnQgdHR5X3BvcnRfYWxsb2NfeG1pdF9idWYoc3RydWN0IHR0eV9wb3J0ICpwb3J0KQotewotCS8qIFdlIG1heSBzbGVlcCBpbiBnZXRfemVyb2VkX3BhZ2UoKSAqLwotCW11dGV4X2xvY2soJnBvcnQtPm11dGV4KTsKLQlpZiAocG9ydC0+eG1pdF9idWYgPT0gTlVMTCkKLQkJcG9ydC0+eG1pdF9idWYgPSAodW5zaWduZWQgY2hhciAqKWdldF96ZXJvZWRfcGFnZShHRlBfS0VSTkVMKTsKLQltdXRleF91bmxvY2soJnBvcnQtPm11dGV4KTsKLQlpZiAocG9ydC0+eG1pdF9idWYgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9NRU07Ci0JcmV0dXJuIDA7Ci19Ci1FWFBPUlRfU1lNQk9MKHR0eV9wb3J0X2FsbG9jX3htaXRfYnVmKTsKLQotdm9pZCB0dHlfcG9ydF9mcmVlX3htaXRfYnVmKHN0cnVjdCB0dHlfcG9ydCAqcG9ydCkKLXsKLQltdXRleF9sb2NrKCZwb3J0LT5tdXRleCk7Ci0JaWYgKHBvcnQtPnhtaXRfYnVmICE9IE5VTEwpIHsKLQkJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKXBvcnQtPnhtaXRfYnVmKTsKLQkJcG9ydC0+eG1pdF9idWYgPSBOVUxMOwotCX0KLQltdXRleF91bmxvY2soJnBvcnQtPm11dGV4KTsKLX0KLUVYUE9SVF9TWU1CT0wodHR5X3BvcnRfZnJlZV94bWl0X2J1Zik7Ci0KLQogc3RhdGljIGNoYXIgcHR5Y2hhcltdID0gInBxcnN0dXZ3eHl6YWJjZGUiOwogCiAvKioKQEAgLTE1OTIsNyArMTE4Nyw3IEBACiB9CiAKIC8qKgotICoJcHR5X2xpbmVfbmFtZQktCWdlbmVyYXRlIG5hbWUgZm9yIGEgdHR5CisgKgl0dHlfbGluZV9uYW1lCS0JZ2VuZXJhdGUgbmFtZSBmb3IgYSB0dHkKICAqCUBkcml2ZXI6IHRoZSB0dHkgZHJpdmVyIGluIHVzZQogICoJQGluZGV4OiB0aGUgbWlub3IgbnVtYmVyCiAgKglAcDogb3V0cHV0IGJ1ZmZlciBvZiBhdCBsZWFzdCA3IGJ5dGVzCkBAIC0xNjA4LDEwICsxMjAzLDE0OCBAQAogfQogCiAvKioKLSAqCWluaXRfZGV2CQktCWluaXRpYWxpc2UgYSB0dHkgZGV2aWNlCisgKgl0dHlfZHJpdmVyX2xvb2t1cF90dHkoKSAtIGZpbmQgYW4gZXhpc3RpbmcgdHR5LCBpZiBhbnkKKyAqCUBkcml2ZXI6IHRoZSBkcml2ZXIgZm9yIHRoZSB0dHkKKyAqCUBpZHg6CSB0aGUgbWlub3IgbnVtYmVyCisgKgorICoJUmV0dXJuIHRoZSB0dHksIGlmIGZvdW5kIG9yIEVSUl9QVFIoKSBvdGhlcndpc2UuCisgKgorICoJTG9ja2luZzogdHR5X211dGV4IG11c3QgYmUgaGVsZC4gSWYgdHR5IGlzIGZvdW5kLCB0aGUgbXV0ZXggbXVzdAorICoJYmUgaGVsZCB1bnRpbCB0aGUgJ2Zhc3Qtb3BlbicgaXMgYWxzbyBkb25lLiBXaWxsIGNoYW5nZSBvbmNlIHdlCisgKgloYXZlIHJlZmNvdW50aW5nIGluIHRoZSBkcml2ZXIgYW5kIHBlciBkcml2ZXIgbG9ja2luZworICovCitzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5X2RyaXZlcl9sb29rdXBfdHR5KHN0cnVjdCB0dHlfZHJpdmVyICpkcml2ZXIsCisJCXN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBpZHgpCit7CisJc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eTsKKworCWlmIChkcml2ZXItPm9wcy0+bG9va3VwKQorCQlyZXR1cm4gZHJpdmVyLT5vcHMtPmxvb2t1cChkcml2ZXIsIGlub2RlLCBpZHgpOworCisJdHR5ID0gZHJpdmVyLT50dHlzW2lkeF07CisJcmV0dXJuIHR0eTsKK30KKworLyoqCisgKgl0dHlfaW5pdF90ZXJtaW9zCS0gIGhlbHBlciBmb3IgdGVybWlvcyBzZXR1cAorICoJQHR0eTogdGhlIHR0eSB0byBzZXQgdXAKKyAqCisgKglJbml0aWFsaXNlIHRoZSB0ZXJtaW9zIHN0cnVjdHVyZXMgZm9yIHRoaXMgdHR5LiBUaHVzIHJ1bnMgdW5kZXIKKyAqCXRoZSB0dHlfbXV0ZXggY3VycmVudGx5IHNvIHdlIGNhbiBiZSByZWxheGVkIGFib3V0IG9yZGVyaW5nLgorICovCisKK2ludCB0dHlfaW5pdF90ZXJtaW9zKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCit7CisJc3RydWN0IGt0ZXJtaW9zICp0cDsKKwlpbnQgaWR4ID0gdHR5LT5pbmRleDsKKworCXRwID0gdHR5LT5kcml2ZXItPnRlcm1pb3NbaWR4XTsKKwlpZiAodHAgPT0gTlVMTCkgeworCQl0cCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBrdGVybWlvc1syXSksIEdGUF9LRVJORUwpOworCQlpZiAodHAgPT0gTlVMTCkKKwkJCXJldHVybiAtRU5PTUVNOworCQltZW1jcHkodHAsICZ0dHktPmRyaXZlci0+aW5pdF90ZXJtaW9zLAorCQkJCQkJc2l6ZW9mKHN0cnVjdCBrdGVybWlvcykpOworCQl0dHktPmRyaXZlci0+dGVybWlvc1tpZHhdID0gdHA7CisJfQorCXR0eS0+dGVybWlvcyA9IHRwOworCXR0eS0+dGVybWlvc19sb2NrZWQgPSB0cCArIDE7CisKKwkvKiBDb21wYXRpYmlsaXR5IHVudGlsIGRyaXZlcnMgYWx3YXlzIHNldCB0aGlzICovCisJdHR5LT50ZXJtaW9zLT5jX2lzcGVlZCA9IHR0eV90ZXJtaW9zX2lucHV0X2JhdWRfcmF0ZSh0dHktPnRlcm1pb3MpOworCXR0eS0+dGVybWlvcy0+Y19vc3BlZWQgPSB0dHlfdGVybWlvc19iYXVkX3JhdGUodHR5LT50ZXJtaW9zKTsKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKgl0dHlfZHJpdmVyX2luc3RhbGxfdHR5KCkgLSBpbnN0YWxsIGEgdHR5IGVudHJ5IGluIHRoZSBkcml2ZXIKKyAqCUBkcml2ZXI6IHRoZSBkcml2ZXIgZm9yIHRoZSB0dHkKKyAqCUB0dHk6IHRoZSB0dHkKKyAqCisgKglJbnN0YWxsIGEgdHR5IG9iamVjdCBpbnRvIHRoZSBkcml2ZXIgdGFibGVzLiBUaGUgdHR5LT5pbmRleCBmaWVsZAorICoJd2lsbCBiZSBzZXQgYnkgdGhlIHRpbWUgdGhpcyBpcyBjYWxsZWQuIFRoaXMgbWV0aG9kIGlzIHJlc3BvbnNpYmxlCisgKglmb3IgZW5zdXJpbmcgYW55IG5lZWQgYWRkaXRpb25hbCBzdHJ1Y3R1cmVzIGFyZSBhbGxvY2F0ZWQgYW5kCisgKgljb25maWd1cmVkLgorICoKKyAqCUxvY2tpbmc6IHR0eV9tdXRleCBmb3Igbm93CisgKi8KK3N0YXRpYyBpbnQgdHR5X2RyaXZlcl9pbnN0YWxsX3R0eShzdHJ1Y3QgdHR5X2RyaXZlciAqZHJpdmVyLAorCQkJCQkJc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKK3sKKwlpbnQgaWR4ID0gdHR5LT5pbmRleDsKKworCWlmIChkcml2ZXItPm9wcy0+aW5zdGFsbCkKKwkJcmV0dXJuIGRyaXZlci0+b3BzLT5pbnN0YWxsKGRyaXZlciwgdHR5KTsKKworCWlmICh0dHlfaW5pdF90ZXJtaW9zKHR0eSkgPT0gMCkgeworCQl0dHlfZHJpdmVyX2tyZWZfZ2V0KGRyaXZlcik7CisJCXR0eS0+Y291bnQrKzsKKwkJZHJpdmVyLT50dHlzW2lkeF0gPSB0dHk7CisJCXJldHVybiAwOworCX0KKwlyZXR1cm4gLUVOT01FTTsKK30KKworLyoqCisgKgl0dHlfZHJpdmVyX3JlbW92ZV90dHkoKSAtIHJlbW92ZSBhIHR0eSBmcm9tIHRoZSBkcml2ZXIgdGFibGVzCisgKglAZHJpdmVyOiB0aGUgZHJpdmVyIGZvciB0aGUgdHR5CisgKglAaWR4OgkgdGhlIG1pbm9yIG51bWJlcgorICoKKyAqCVJlbXZvZSBhIHR0eSBvYmplY3QgZnJvbSB0aGUgZHJpdmVyIHRhYmxlcy4gVGhlIHR0eS0+aW5kZXggZmllbGQKKyAqCXdpbGwgYmUgc2V0IGJ5IHRoZSB0aW1lIHRoaXMgaXMgY2FsbGVkLgorICoKKyAqCUxvY2tpbmc6IHR0eV9tdXRleCBmb3Igbm93CisgKi8KK3N0YXRpYyB2b2lkIHR0eV9kcml2ZXJfcmVtb3ZlX3R0eShzdHJ1Y3QgdHR5X2RyaXZlciAqZHJpdmVyLAorCQkJCQkJc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKK3sKKwlpZiAoZHJpdmVyLT5vcHMtPnJlbW92ZSkKKwkJZHJpdmVyLT5vcHMtPnJlbW92ZShkcml2ZXIsIHR0eSk7CisJZWxzZQorCQlkcml2ZXItPnR0eXNbdHR5LT5pbmRleF0gPSBOVUxMOworfQorCisvKgorICogCXR0eV9yZW9wZW4oKQktIGZhc3QgcmUtb3BlbiBvZiBhbiBvcGVuIHR0eQorICogCUB0dHkJLSB0aGUgdHR5IHRvIG9wZW4KKyAqCisgKglSZXR1cm4gMCBvbiBzdWNjZXNzLCAtZXJybm8gb24gZXJyb3IuCisgKgorICoJTG9ja2luZzogdHR5X211dGV4IG11c3QgYmUgaGVsZCBmcm9tIHRoZSB0aW1lIHRoZSB0dHkgd2FzIGZvdW5kCisgKgkJIHRpbGwgdGhpcyBvcGVuIGNvbXBsZXRlcy4KKyAqLworc3RhdGljIGludCB0dHlfcmVvcGVuKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCit7CisJc3RydWN0IHR0eV9kcml2ZXIgKmRyaXZlciA9IHR0eS0+ZHJpdmVyOworCisJaWYgKHRlc3RfYml0KFRUWV9DTE9TSU5HLCAmdHR5LT5mbGFncykpCisJCXJldHVybiAtRUlPOworCisJaWYgKGRyaXZlci0+dHlwZSA9PSBUVFlfRFJJVkVSX1RZUEVfUFRZICYmCisJICAgIGRyaXZlci0+c3VidHlwZSA9PSBQVFlfVFlQRV9NQVNURVIpIHsKKwkJLyoKKwkJICogc3BlY2lhbCBjYXNlIGZvciBQVFkgbWFzdGVyczogb25seSBvbmUgb3BlbiBwZXJtaXR0ZWQsCisJCSAqIGFuZCB0aGUgc2xhdmUgc2lkZSBvcGVuIGNvdW50IGlzIGluY3JlbWVudGVkIGFzIHdlbGwuCisJCSAqLworCQlpZiAodHR5LT5jb3VudCkKKwkJCXJldHVybiAtRUlPOworCisJCXR0eS0+bGluay0+Y291bnQrKzsKKwl9CisJdHR5LT5jb3VudCsrOworCXR0eS0+ZHJpdmVyID0gZHJpdmVyOyAvKiBOLkIuIHdoeSBkbyB0aGlzIGV2ZXJ5IHRpbWU/PyAqLworCisJV0FSTl9PTighdGVzdF9iaXQoVFRZX0xESVNDLCAmdHR5LT5mbGFncykpOworCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICoJdHR5X2luaXRfZGV2CQktCWluaXRpYWxpc2UgYSB0dHkgZGV2aWNlCiAgKglAZHJpdmVyOiB0dHkgZHJpdmVyIHdlIGFyZSBvcGVuaW5nIGEgZGV2aWNlIG9uCiAgKglAaWR4OiBkZXZpY2UgaW5kZXgKLSAqCUB0dHk6IHJldHVybmVkIHR0eSBzdHJ1Y3R1cmUKKyAqCUByZXRfdHR5OiByZXR1cm5lZCB0dHkgc3RydWN0dXJlCisgKglAZmlyc3Rfb2s6IG9rIHRvIG9wZW4gYSBuZXcgZGV2aWNlICh1c2VkIGJ5IHB0bXgpCiAgKgogICoJUHJlcGFyZSBhIHR0eSBkZXZpY2UuIFRoaXMgbWF5IG5vdCBiZSBhICJuZXciIGNsZWFuIGRldmljZSBidXQKICAqCWNvdWxkIGFsc28gYmUgYW4gYWN0aXZlIGRldmljZS4gVGhlIHB0eSBkcml2ZXJzIHJlcXVpcmUgc3BlY2lhbApAQCAtMTYzMSwzNyArMTM2NCwxNiBAQAogICogcmVsYXhlZCBmb3IgdGhlIChtb3N0IGNvbW1vbikgY2FzZSBvZiByZW9wZW5pbmcgYSB0dHkuCiAgKi8KIAotc3RhdGljIGludCBpbml0X2RldihzdHJ1Y3QgdHR5X2RyaXZlciAqZHJpdmVyLCBpbnQgaWR4LAotCXN0cnVjdCB0dHlfc3RydWN0ICoqcmV0X3R0eSkKK3N0cnVjdCB0dHlfc3RydWN0ICp0dHlfaW5pdF9kZXYoc3RydWN0IHR0eV9kcml2ZXIgKmRyaXZlciwgaW50IGlkeCwKKwkJCQkJCQkJaW50IGZpcnN0X29rKQogewotCXN0cnVjdCB0dHlfc3RydWN0ICp0dHksICpvX3R0eTsKLQlzdHJ1Y3Qga3Rlcm1pb3MgKnRwLCAqKnRwX2xvYywgKm9fdHAsICoqb190cF9sb2M7Ci0Jc3RydWN0IGt0ZXJtaW9zICpsdHAsICoqbHRwX2xvYywgKm9fbHRwLCAqKm9fbHRwX2xvYzsKLQlpbnQgcmV0dmFsID0gMDsKKwlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5OworCWludCByZXR2YWw7CiAKLQkvKiBjaGVjayB3aGV0aGVyIHdlJ3JlIHJlb3BlbmluZyBhbiBleGlzdGluZyB0dHkgKi8KLQlpZiAoZHJpdmVyLT5mbGFncyAmIFRUWV9EUklWRVJfREVWUFRTX01FTSkgewotCQl0dHkgPSBkZXZwdHNfZ2V0X3R0eShpZHgpOwotCQkvKgotCQkgKiBJZiB3ZSBkb24ndCBoYXZlIGEgdHR5IGhlcmUgb24gYSBzbGF2ZSBvcGVuLCBpdCdzIGJlY2F1c2UKLQkJICogdGhlIG1hc3RlciBhbHJlYWR5IHN0YXJ0ZWQgdGhlIGNsb3NlIHByb2Nlc3MgYW5kIHRoZXJlJ3MKLQkJICogbm8gcmVsYXRpb24gYmV0d2VlbiBkZXZwdHMgZmlsZSBhbmQgdHR5IGFueW1vcmUuCi0JCSAqLwotCQlpZiAoIXR0eSAmJiBkcml2ZXItPnN1YnR5cGUgPT0gUFRZX1RZUEVfU0xBVkUpIHsKLQkJCXJldHZhbCA9IC1FSU87Ci0JCQlnb3RvIGVuZF9pbml0OwotCQl9Ci0JCS8qCi0JCSAqIEl0J3Mgc2FmZSBmcm9tIG5vdyBvbiBiZWNhdXNlIGluaXRfZGV2KCkgaXMgY2FsbGVkIHdpdGgKLQkJICogdHR5X211dGV4IGhlbGQgYW5kIHJlbGVhc2VfZGV2KCkgd29uJ3QgY2hhbmdlIHR0eS0+Y291bnQKLQkJICogb3IgdHR5LT5mbGFncyB3aXRob3V0IGhhdmluZyB0byBncmFiIHR0eV9tdXRleAotCQkgKi8KLQkJaWYgKHR0eSAmJiBkcml2ZXItPnN1YnR5cGUgPT0gUFRZX1RZUEVfTUFTVEVSKQotCQkJdHR5ID0gdHR5LT5saW5rOwotCX0gZWxzZSB7Ci0JCXR0eSA9IGRyaXZlci0+dHR5c1tpZHhdOwotCX0KLQlpZiAodHR5KSBnb3RvIGZhc3RfdHJhY2s7CisJLyogQ2hlY2sgaWYgcHR5IG1hc3RlciBpcyBiZWluZyBvcGVuZWQgbXVsdGlwbGUgdGltZXMgKi8KKwlpZiAoZHJpdmVyLT5zdWJ0eXBlID09IFBUWV9UWVBFX01BU1RFUiAmJgorCQkoZHJpdmVyLT5mbGFncyAmIFRUWV9EUklWRVJfREVWUFRTX01FTSkgJiYgIWZpcnN0X29rKQorCQlyZXR1cm4gRVJSX1BUUigtRUlPKTsKIAogCS8qCiAJICogRmlyc3QgdGltZSBvcGVuIGlzIGNvbXBsZXgsIGVzcGVjaWFsbHkgZm9yIFBUWSBkZXZpY2VzLgpAQCAtMTY3MSwxODkgKzEzODMsNjkgQEAKIAkgKiBhbmQgbG9ja2VkIHRlcm1pb3MgbWF5IGJlIHJldGFpbmVkLikKIAkgKi8KIAotCWlmICghdHJ5X21vZHVsZV9nZXQoZHJpdmVyLT5vd25lcikpIHsKLQkJcmV0dmFsID0gLUVOT0RFVjsKLQkJZ290byBlbmRfaW5pdDsKLQl9Ci0KLQlvX3R0eSA9IE5VTEw7Ci0JdHAgPSBvX3RwID0gTlVMTDsKLQlsdHAgPSBvX2x0cCA9IE5VTEw7CisJaWYgKCF0cnlfbW9kdWxlX2dldChkcml2ZXItPm93bmVyKSkKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT0RFVik7CiAKIAl0dHkgPSBhbGxvY190dHlfc3RydWN0KCk7CiAJaWYgKCF0dHkpCiAJCWdvdG8gZmFpbF9ub19tZW07Ci0JaW5pdGlhbGl6ZV90dHlfc3RydWN0KHR0eSk7Ci0JdHR5LT5kcml2ZXIgPSBkcml2ZXI7Ci0JdHR5LT5vcHMgPSBkcml2ZXItPm9wczsKLQl0dHktPmluZGV4ID0gaWR4OwotCXR0eV9saW5lX25hbWUoZHJpdmVyLCBpZHgsIHR0eS0+bmFtZSk7CisJaW5pdGlhbGl6ZV90dHlfc3RydWN0KHR0eSwgZHJpdmVyLCBpZHgpOwogCi0JaWYgKGRyaXZlci0+ZmxhZ3MgJiBUVFlfRFJJVkVSX0RFVlBUU19NRU0pIHsKLQkJdHBfbG9jID0gJnR0eS0+dGVybWlvczsKLQkJbHRwX2xvYyA9ICZ0dHktPnRlcm1pb3NfbG9ja2VkOwotCX0gZWxzZSB7Ci0JCXRwX2xvYyA9ICZkcml2ZXItPnRlcm1pb3NbaWR4XTsKLQkJbHRwX2xvYyA9ICZkcml2ZXItPnRlcm1pb3NfbG9ja2VkW2lkeF07CisJcmV0dmFsID0gdHR5X2RyaXZlcl9pbnN0YWxsX3R0eShkcml2ZXIsIHR0eSk7CisJaWYgKHJldHZhbCA8IDApIHsKKwkJZnJlZV90dHlfc3RydWN0KHR0eSk7CisJCW1vZHVsZV9wdXQoZHJpdmVyLT5vd25lcik7CisJCXJldHVybiBFUlJfUFRSKHJldHZhbCk7CiAJfQogCi0JaWYgKCEqdHBfbG9jKSB7Ci0JCXRwID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGt0ZXJtaW9zKSwgR0ZQX0tFUk5FTCk7Ci0JCWlmICghdHApCi0JCQlnb3RvIGZyZWVfbWVtX291dDsKLQkJKnRwID0gZHJpdmVyLT5pbml0X3Rlcm1pb3M7Ci0JfQotCi0JaWYgKCEqbHRwX2xvYykgewotCQlsdHAgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qga3Rlcm1pb3MpLCBHRlBfS0VSTkVMKTsKLQkJaWYgKCFsdHApCi0JCQlnb3RvIGZyZWVfbWVtX291dDsKLQl9Ci0KLQlpZiAoZHJpdmVyLT50eXBlID09IFRUWV9EUklWRVJfVFlQRV9QVFkpIHsKLQkJb190dHkgPSBhbGxvY190dHlfc3RydWN0KCk7Ci0JCWlmICghb190dHkpCi0JCQlnb3RvIGZyZWVfbWVtX291dDsKLQkJaW5pdGlhbGl6ZV90dHlfc3RydWN0KG9fdHR5KTsKLQkJb190dHktPmRyaXZlciA9IGRyaXZlci0+b3RoZXI7Ci0JCW9fdHR5LT5vcHMgPSBkcml2ZXItPm9wczsKLQkJb190dHktPmluZGV4ID0gaWR4OwotCQl0dHlfbGluZV9uYW1lKGRyaXZlci0+b3RoZXIsIGlkeCwgb190dHktPm5hbWUpOwotCi0JCWlmIChkcml2ZXItPmZsYWdzICYgVFRZX0RSSVZFUl9ERVZQVFNfTUVNKSB7Ci0JCQlvX3RwX2xvYyA9ICZvX3R0eS0+dGVybWlvczsKLQkJCW9fbHRwX2xvYyA9ICZvX3R0eS0+dGVybWlvc19sb2NrZWQ7Ci0JCX0gZWxzZSB7Ci0JCQlvX3RwX2xvYyA9ICZkcml2ZXItPm90aGVyLT50ZXJtaW9zW2lkeF07Ci0JCQlvX2x0cF9sb2MgPSAmZHJpdmVyLT5vdGhlci0+dGVybWlvc19sb2NrZWRbaWR4XTsKLQkJfQotCi0JCWlmICghKm9fdHBfbG9jKSB7Ci0JCQlvX3RwID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGt0ZXJtaW9zKSwgR0ZQX0tFUk5FTCk7Ci0JCQlpZiAoIW9fdHApCi0JCQkJZ290byBmcmVlX21lbV9vdXQ7Ci0JCQkqb190cCA9IGRyaXZlci0+b3RoZXItPmluaXRfdGVybWlvczsKLQkJfQotCi0JCWlmICghKm9fbHRwX2xvYykgewotCQkJb19sdHAgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qga3Rlcm1pb3MpLCBHRlBfS0VSTkVMKTsKLQkJCWlmICghb19sdHApCi0JCQkJZ290byBmcmVlX21lbV9vdXQ7Ci0JCX0KLQotCQkvKgotCQkgKiBFdmVyeXRoaW5nIGFsbG9jYXRlZCAuLi4gc2V0IHVwIHRoZSBvX3R0eSBzdHJ1Y3R1cmUuCi0JCSAqLwotCQlpZiAoIShkcml2ZXItPm90aGVyLT5mbGFncyAmIFRUWV9EUklWRVJfREVWUFRTX01FTSkpCi0JCQlkcml2ZXItPm90aGVyLT50dHlzW2lkeF0gPSBvX3R0eTsKLQkJaWYgKCEqb190cF9sb2MpCi0JCQkqb190cF9sb2MgPSBvX3RwOwotCQlpZiAoISpvX2x0cF9sb2MpCi0JCQkqb19sdHBfbG9jID0gb19sdHA7Ci0JCW9fdHR5LT50ZXJtaW9zID0gKm9fdHBfbG9jOwotCQlvX3R0eS0+dGVybWlvc19sb2NrZWQgPSAqb19sdHBfbG9jOwotCQlkcml2ZXItPm90aGVyLT5yZWZjb3VudCsrOwotCQlpZiAoZHJpdmVyLT5zdWJ0eXBlID09IFBUWV9UWVBFX01BU1RFUikKLQkJCW9fdHR5LT5jb3VudCsrOwotCi0JCS8qIEVzdGFibGlzaCB0aGUgbGlua3MgaW4gYm90aCBkaXJlY3Rpb25zICovCi0JCXR0eS0+bGluayAgID0gb190dHk7Ci0JCW9fdHR5LT5saW5rID0gdHR5OwotCX0KLQotCS8qCi0JICogQWxsIHN0cnVjdHVyZXMgaGF2ZSBiZWVuIGFsbG9jYXRlZCwgc28gbm93IHdlIGluc3RhbGwgdGhlbS4KLQkgKiBGYWlsdXJlcyBhZnRlciB0aGlzIHBvaW50IHVzZSByZWxlYXNlX3R0eSB0byBjbGVhbiB1cCwgc28KLQkgKiB0aGVyZSdzIG5vIG5lZWQgdG8gbnVsbCBvdXQgdGhlIGxvY2FsIHBvaW50ZXJzLgotCSAqLwotCWlmICghKGRyaXZlci0+ZmxhZ3MgJiBUVFlfRFJJVkVSX0RFVlBUU19NRU0pKQotCQlkcml2ZXItPnR0eXNbaWR4XSA9IHR0eTsKLQotCWlmICghKnRwX2xvYykKLQkJKnRwX2xvYyA9IHRwOwotCWlmICghKmx0cF9sb2MpCi0JCSpsdHBfbG9jID0gbHRwOwotCXR0eS0+dGVybWlvcyA9ICp0cF9sb2M7Ci0JdHR5LT50ZXJtaW9zX2xvY2tlZCA9ICpsdHBfbG9jOwotCS8qIENvbXBhdGliaWxpdHkgdW50aWwgZHJpdmVycyBhbHdheXMgc2V0IHRoaXMgKi8KLQl0dHktPnRlcm1pb3MtPmNfaXNwZWVkID0gdHR5X3Rlcm1pb3NfaW5wdXRfYmF1ZF9yYXRlKHR0eS0+dGVybWlvcyk7Ci0JdHR5LT50ZXJtaW9zLT5jX29zcGVlZCA9IHR0eV90ZXJtaW9zX2JhdWRfcmF0ZSh0dHktPnRlcm1pb3MpOwotCWRyaXZlci0+cmVmY291bnQrKzsKLQl0dHktPmNvdW50Kys7Ci0KIAkvKgogCSAqIFN0cnVjdHVyZXMgYWxsIGluc3RhbGxlZCAuLi4gY2FsbCB0aGUgbGRpc2Mgb3BlbiByb3V0aW5lcy4KIAkgKiBJZiB3ZSBmYWlsIGhlcmUganVzdCBjYWxsIHJlbGVhc2VfdHR5IHRvIGNsZWFuIHVwLiAgTm8gbmVlZAogCSAqIHRvIGRlY3JlbWVudCB0aGUgdXNlIGNvdW50cywgYXMgcmVsZWFzZV90dHkgZG9lc24ndCBjYXJlLgogCSAqLwogCi0JcmV0dmFsID0gdHR5X2xkaXNjX3NldHVwKHR0eSwgb190dHkpOwotCisJcmV0dmFsID0gdHR5X2xkaXNjX3NldHVwKHR0eSwgdHR5LT5saW5rKTsKIAlpZiAocmV0dmFsKQogCQlnb3RvIHJlbGVhc2VfbWVtX291dDsKLQkgZ290byBzdWNjZXNzOwotCi0JLyoKLQkgKiBUaGlzIGZhc3Qgb3BlbiBjYW4gYmUgdXNlZCBpZiB0aGUgdHR5IGlzIGFscmVhZHkgb3Blbi4KLQkgKiBObyBtZW1vcnkgaXMgYWxsb2NhdGVkLCBhbmQgdGhlIG9ubHkgZmFpbHVyZXMgYXJlIGZyb20KLQkgKiBhdHRlbXB0aW5nIHRvIG9wZW4gYSBjbG9zaW5nIHR0eSBvciBhdHRlbXB0aW5nIG11bHRpcGxlCi0JICogb3BlbnMgb24gYSBwdHkgbWFzdGVyLgotCSAqLwotZmFzdF90cmFjazoKLQlpZiAodGVzdF9iaXQoVFRZX0NMT1NJTkcsICZ0dHktPmZsYWdzKSkgewotCQlyZXR2YWwgPSAtRUlPOwotCQlnb3RvIGVuZF9pbml0OwotCX0KLQlpZiAoZHJpdmVyLT50eXBlID09IFRUWV9EUklWRVJfVFlQRV9QVFkgJiYKLQkgICAgZHJpdmVyLT5zdWJ0eXBlID09IFBUWV9UWVBFX01BU1RFUikgewotCQkvKgotCQkgKiBzcGVjaWFsIGNhc2UgZm9yIFBUWSBtYXN0ZXJzOiBvbmx5IG9uZSBvcGVuIHBlcm1pdHRlZCwKLQkJICogYW5kIHRoZSBzbGF2ZSBzaWRlIG9wZW4gY291bnQgaXMgaW5jcmVtZW50ZWQgYXMgd2VsbC4KLQkJICovCi0JCWlmICh0dHktPmNvdW50KSB7Ci0JCQlyZXR2YWwgPSAtRUlPOwotCQkJZ290byBlbmRfaW5pdDsKLQkJfQotCQl0dHktPmxpbmstPmNvdW50Kys7Ci0JfQotCXR0eS0+Y291bnQrKzsKLQl0dHktPmRyaXZlciA9IGRyaXZlcjsgLyogTi5CLiB3aHkgZG8gdGhpcyBldmVyeSB0aW1lPz8gKi8KLQotCS8qIEZJWE1FICovCi0JaWYgKCF0ZXN0X2JpdChUVFlfTERJU0MsICZ0dHktPmZsYWdzKSkKLQkJcHJpbnRrKEtFUk5fRVJSICJpbml0X2RldiBidXQgbm8gbGRpc2NcbiIpOwotc3VjY2VzczoKLQkqcmV0X3R0eSA9IHR0eTsKLQotCS8qIEFsbCBwYXRocyBjb21lIHRocm91Z2ggaGVyZSB0byByZWxlYXNlIHRoZSBtdXRleCAqLwotZW5kX2luaXQ6Ci0JcmV0dXJuIHJldHZhbDsKLQotCS8qIFJlbGVhc2UgbG9jYWxseSBhbGxvY2F0ZWQgbWVtb3J5IC4uLiBub3RoaW5nIHBsYWNlZCBpbiBzbG90cyAqLwotZnJlZV9tZW1fb3V0OgotCWtmcmVlKG9fdHApOwotCWlmIChvX3R0eSkKLQkJZnJlZV90dHlfc3RydWN0KG9fdHR5KTsKLQlrZnJlZShsdHApOwotCWtmcmVlKHRwKTsKLQlmcmVlX3R0eV9zdHJ1Y3QodHR5KTsKKwlyZXR1cm4gdHR5OwogCiBmYWlsX25vX21lbToKIAltb2R1bGVfcHV0KGRyaXZlci0+b3duZXIpOwotCXJldHZhbCA9IC1FTk9NRU07Ci0JZ290byBlbmRfaW5pdDsKKwlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKIAogCS8qIGNhbGwgdGhlIHR0eSByZWxlYXNlX3R0eSByb3V0aW5lIHRvIGNsZWFuIG91dCB0aGlzIHNsb3QgKi8KIHJlbGVhc2VfbWVtX291dDoKIAlpZiAocHJpbnRrX3JhdGVsaW1pdCgpKQotCQlwcmludGsoS0VSTl9JTkZPICJpbml0X2RldjogbGRpc2Mgb3BlbiBmYWlsZWQsICIKKwkJcHJpbnRrKEtFUk5fSU5GTyAidHR5X2luaXRfZGV2OiBsZGlzYyBvcGVuIGZhaWxlZCwgIgogCQkJCSAiY2xlYXJpbmcgc2xvdCAlZFxuIiwgaWR4KTsKIAlyZWxlYXNlX3R0eSh0dHksIGlkeCk7Ci0JZ290byBlbmRfaW5pdDsKKwlyZXR1cm4gRVJSX1BUUihyZXR2YWwpOwogfQogCit2b2lkIHR0eV9mcmVlX3Rlcm1pb3Moc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKK3sKKwlzdHJ1Y3Qga3Rlcm1pb3MgKnRwOworCWludCBpZHggPSB0dHktPmluZGV4OworCS8qIEtpbGwgdGhpcyBmbGFnIGFuZCBwdXNoIGludG8gZHJpdmVycyBmb3IgbG9ja2luZyBldGMgKi8KKwlpZiAodHR5LT5kcml2ZXItPmZsYWdzICYgVFRZX0RSSVZFUl9SRVNFVF9URVJNSU9TKSB7CisJCS8qIEZJWE1FOiBMb2NraW5nIG9uIC0+dGVybWlvcyBhcnJheSAqLworCQl0cCA9IHR0eS0+dGVybWlvczsKKwkJdHR5LT5kcml2ZXItPnRlcm1pb3NbaWR4XSA9IE5VTEw7CisJCWtmcmVlKHRwKTsKKwl9Cit9CitFWFBPUlRfU1lNQk9MKHR0eV9mcmVlX3Rlcm1pb3MpOworCit2b2lkIHR0eV9zaHV0ZG93bihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQoreworCXR0eV9kcml2ZXJfcmVtb3ZlX3R0eSh0dHktPmRyaXZlciwgdHR5KTsKKwl0dHlfZnJlZV90ZXJtaW9zKHR0eSk7Cit9CitFWFBPUlRfU1lNQk9MKHR0eV9zaHV0ZG93bik7CisKIC8qKgogICoJcmVsZWFzZV9vbmVfdHR5CQktCXJlbGVhc2UgdHR5IHN0cnVjdHVyZSBtZW1vcnkKKyAqCUBrcmVmOiBrcmVmIG9mIHR0eSB3ZSBhcmUgb2JsaXRlcmF0aW5nCiAgKgogICoJUmVsZWFzZXMgbWVtb3J5IGFzc29jaWF0ZWQgd2l0aCBhIHR0eSBzdHJ1Y3R1cmUsIGFuZCBjbGVhcnMgb3V0IHRoZQogICoJZHJpdmVyIHRhYmxlIHNsb3RzLiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIGEgZGV2aWNlIGlzIG5vIGxvbmdlcgpAQCAtMTg2MywzMSArMTQ1NSwxOSBAQAogICoJCXR0eV9tdXRleCAtIHNvbWV0aW1lcyBvbmx5CiAgKgkJdGFrZXMgdGhlIGZpbGUgbGlzdCBsb2NrIGludGVybmFsbHkgd2hlbiB3b3JraW5nIG9uIHRoZSBsaXN0CiAgKglvZiB0dHlzIHRoYXQgdGhlIGRyaXZlciBrZWVwcy4KLSAqCQlGSVhNRTogc2hvdWxkIHdlIHJlcXVpcmUgdHR5X211dGV4IGlzIGhlbGQgaGVyZSA/PwogICovCi1zdGF0aWMgdm9pZCByZWxlYXNlX29uZV90dHkoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgaW50IGlkeCkKK3N0YXRpYyB2b2lkIHJlbGVhc2Vfb25lX3R0eShzdHJ1Y3Qga3JlZiAqa3JlZikKIHsKLQlpbnQgZGV2cHRzID0gdHR5LT5kcml2ZXItPmZsYWdzICYgVFRZX0RSSVZFUl9ERVZQVFNfTUVNOwotCXN0cnVjdCBrdGVybWlvcyAqdHA7CisJc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSA9IGNvbnRhaW5lcl9vZihrcmVmLCBzdHJ1Y3QgdHR5X3N0cnVjdCwga3JlZik7CisJc3RydWN0IHR0eV9kcml2ZXIgKmRyaXZlciA9IHR0eS0+ZHJpdmVyOwogCi0JaWYgKCFkZXZwdHMpCi0JCXR0eS0+ZHJpdmVyLT50dHlzW2lkeF0gPSBOVUxMOwotCi0JaWYgKHR0eS0+ZHJpdmVyLT5mbGFncyAmIFRUWV9EUklWRVJfUkVTRVRfVEVSTUlPUykgewotCQl0cCA9IHR0eS0+dGVybWlvczsKLQkJaWYgKCFkZXZwdHMpCi0JCQl0dHktPmRyaXZlci0+dGVybWlvc1tpZHhdID0gTlVMTDsKLQkJa2ZyZWUodHApOwotCi0JCXRwID0gdHR5LT50ZXJtaW9zX2xvY2tlZDsKLQkJaWYgKCFkZXZwdHMpCi0JCQl0dHktPmRyaXZlci0+dGVybWlvc19sb2NrZWRbaWR4XSA9IE5VTEw7Ci0JCWtmcmVlKHRwKTsKLQl9Ci0KLQorCWlmICh0dHktPm9wcy0+c2h1dGRvd24pCisJCXR0eS0+b3BzLT5zaHV0ZG93bih0dHkpOworCWVsc2UKKwkJdHR5X3NodXRkb3duKHR0eSk7CiAJdHR5LT5tYWdpYyA9IDA7Ci0JdHR5LT5kcml2ZXItPnJlZmNvdW50LS07CisJdHR5X2RyaXZlcl9rcmVmX3B1dChkcml2ZXIpOworCW1vZHVsZV9wdXQoZHJpdmVyLT5vd25lcik7CiAKIAlmaWxlX2xpc3RfbG9jaygpOwogCWxpc3RfZGVsX2luaXQoJnR0eS0+dHR5X2ZpbGVzKTsKQEAgLTE4OTcsNiArMTQ3NywyMSBAQAogfQogCiAvKioKKyAqCXR0eV9rcmVmX3B1dAkJLQlyZWxlYXNlIGEgdHR5IGtyZWYKKyAqCUB0dHk6IHR0eSBkZXZpY2UKKyAqCisgKglSZWxlYXNlIGEgcmVmZXJlbmNlIHRvIGEgdHR5IGRldmljZSBhbmQgaWYgbmVlZCBiZSBsZXQgdGhlIGtyZWYKKyAqCWxheWVyIGRlc3RydWN0IHRoZSBvYmplY3QgZm9yIHVzCisgKi8KKwordm9pZCB0dHlfa3JlZl9wdXQoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKK3sKKwlpZiAodHR5KQorCQlrcmVmX3B1dCgmdHR5LT5rcmVmLCByZWxlYXNlX29uZV90dHkpOworfQorRVhQT1JUX1NZTUJPTCh0dHlfa3JlZl9wdXQpOworCisvKioKICAqCXJlbGVhc2VfdHR5CQktCXJlbGVhc2UgdHR5IHN0cnVjdHVyZSBtZW1vcnkKICAqCiAgKglSZWxlYXNlIGJvdGggQHR0eSBhbmQgYSBwb3NzaWJsZSBsaW5rZWQgcGFydG5lciAodGhpbmsgcHR5IHBhaXIpLApAQCAtMTkwNywxNSArMTUwMiwxNiBAQAogICoJCXRha2VzIHRoZSBmaWxlIGxpc3QgbG9jayBpbnRlcm5hbGx5IHdoZW4gd29ya2luZyBvbiB0aGUgbGlzdAogICoJb2YgdHR5cyB0aGF0IHRoZSBkcml2ZXIga2VlcHMuCiAgKgkJRklYTUU6IHNob3VsZCB3ZSByZXF1aXJlIHR0eV9tdXRleCBpcyBoZWxkIGhlcmUgPz8KKyAqCiAgKi8KIHN0YXRpYyB2b2lkIHJlbGVhc2VfdHR5KHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIGludCBpZHgpCiB7Ci0Jc3RydWN0IHR0eV9kcml2ZXIgKmRyaXZlciA9IHR0eS0+ZHJpdmVyOworCS8qIFRoaXMgc2hvdWxkIGFsd2F5cyBiZSB0cnVlIGJ1dCBjaGVjayBmb3IgdGhlIG1vbWVudCAqLworCVdBUk5fT04odHR5LT5pbmRleCAhPSBpZHgpOwogCiAJaWYgKHR0eS0+bGluaykKLQkJcmVsZWFzZV9vbmVfdHR5KHR0eS0+bGluaywgaWR4KTsKLQlyZWxlYXNlX29uZV90dHkodHR5LCBpZHgpOwotCW1vZHVsZV9wdXQoZHJpdmVyLT5vd25lcik7CisJCXR0eV9rcmVmX3B1dCh0dHktPmxpbmspOworCXR0eV9rcmVmX3B1dCh0dHkpOwogfQogCiAvKgpAQCAtMTkyNiwyMCArMTUyMiwyMSBAQAogICogV1NIIDA5LzA5Lzk3OiByZXdyaXR0ZW4gdG8gYXZvaWQgc29tZSBuYXN0eSByYWNlIGNvbmRpdGlvbnMgdGhhdCBjb3VsZAogICogbGVhZCB0byBkb3VibGUgZnJlZXMgb3IgcmVsZWFzaW5nIG1lbW9yeSBzdGlsbCBpbiB1c2UuCiAgKi8KLXN0YXRpYyB2b2lkIHJlbGVhc2VfZGV2KHN0cnVjdCBmaWxlICpmaWxwKQordm9pZCB0dHlfcmVsZWFzZV9kZXYoc3RydWN0IGZpbGUgKmZpbHApCiB7CiAJc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgKm9fdHR5OwogCWludAlwdHlfbWFzdGVyLCB0dHlfY2xvc2luZywgb190dHlfY2xvc2luZywgZG9fc2xlZXA7CiAJaW50CWRldnB0czsKIAlpbnQJaWR4OwogCWNoYXIJYnVmWzY0XTsKKwlzdHJ1Y3QgCWlub2RlICppbm9kZTsKIAorCWlub2RlID0gZmlscC0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZTsKIAl0dHkgPSAoc3RydWN0IHR0eV9zdHJ1Y3QgKilmaWxwLT5wcml2YXRlX2RhdGE7Ci0JaWYgKHR0eV9wYXJhbm9pYV9jaGVjayh0dHksIGZpbHAtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUsCi0JCQkJCQkJInJlbGVhc2VfZGV2IikpCisJaWYgKHR0eV9wYXJhbm9pYV9jaGVjayh0dHksIGlub2RlLCAidHR5X3JlbGVhc2VfZGV2IikpCiAJCXJldHVybjsKIAotCWNoZWNrX3R0eV9jb3VudCh0dHksICJyZWxlYXNlX2RldiIpOworCWNoZWNrX3R0eV9jb3VudCh0dHksICJ0dHlfcmVsZWFzZV9kZXYiKTsKIAogCXR0eV9mYXN5bmMoLTEsIGZpbHAsIDApOwogCkBAIC0xOTUxLDMzICsxNTQ4LDI3IEBACiAKICNpZmRlZiBUVFlfUEFSQU5PSUFfQ0hFQ0sKIAlpZiAoaWR4IDwgMCB8fCBpZHggPj0gdHR5LT5kcml2ZXItPm51bSkgewotCQlwcmludGsoS0VSTl9ERUJVRyAicmVsZWFzZV9kZXY6IGJhZCBpZHggd2hlbiB0cnlpbmcgdG8gIgorCQlwcmludGsoS0VSTl9ERUJVRyAidHR5X3JlbGVhc2VfZGV2OiBiYWQgaWR4IHdoZW4gdHJ5aW5nIHRvICIKIAkJCQkgICJmcmVlICglcylcbiIsIHR0eS0+bmFtZSk7CiAJCXJldHVybjsKIAl9Ci0JaWYgKCEodHR5LT5kcml2ZXItPmZsYWdzICYgVFRZX0RSSVZFUl9ERVZQVFNfTUVNKSkgeworCWlmICghZGV2cHRzKSB7CiAJCWlmICh0dHkgIT0gdHR5LT5kcml2ZXItPnR0eXNbaWR4XSkgewotCQkJcHJpbnRrKEtFUk5fREVCVUcgInJlbGVhc2VfZGV2OiBkcml2ZXIudGFibGVbJWRdIG5vdCB0dHkgIgorCQkJcHJpbnRrKEtFUk5fREVCVUcgInR0eV9yZWxlYXNlX2RldjogZHJpdmVyLnRhYmxlWyVkXSBub3QgdHR5ICIKIAkJCSAgICAgICAiZm9yICglcylcbiIsIGlkeCwgdHR5LT5uYW1lKTsKIAkJCXJldHVybjsKIAkJfQogCQlpZiAodHR5LT50ZXJtaW9zICE9IHR0eS0+ZHJpdmVyLT50ZXJtaW9zW2lkeF0pIHsKLQkJCXByaW50ayhLRVJOX0RFQlVHICJyZWxlYXNlX2RldjogZHJpdmVyLnRlcm1pb3NbJWRdIG5vdCB0ZXJtaW9zICIKKwkJCXByaW50ayhLRVJOX0RFQlVHICJ0dHlfcmVsZWFzZV9kZXY6IGRyaXZlci50ZXJtaW9zWyVkXSBub3QgdGVybWlvcyAiCiAJCQkgICAgICAgImZvciAoJXMpXG4iLAogCQkJICAgICAgIGlkeCwgdHR5LT5uYW1lKTsKIAkJCXJldHVybjsKIAkJfQotCQlpZiAodHR5LT50ZXJtaW9zX2xvY2tlZCAhPSB0dHktPmRyaXZlci0+dGVybWlvc19sb2NrZWRbaWR4XSkgewotCQkJcHJpbnRrKEtFUk5fREVCVUcgInJlbGVhc2VfZGV2OiBkcml2ZXIudGVybWlvc19sb2NrZWRbJWRdIG5vdCAiCi0JCQkgICAgICAgInRlcm1pb3NfbG9ja2VkIGZvciAoJXMpXG4iLAotCQkJICAgICAgIGlkeCwgdHR5LT5uYW1lKTsKLQkJCXJldHVybjsKLQkJfQogCX0KICNlbmRpZgogCiAjaWZkZWYgVFRZX0RFQlVHX0hBTkdVUAotCXByaW50ayhLRVJOX0RFQlVHICJyZWxlYXNlX2RldiBvZiAlcyAodHR5IGNvdW50PSVkKS4uLiIsCisJcHJpbnRrKEtFUk5fREVCVUcgInR0eV9yZWxlYXNlX2RldiBvZiAlcyAodHR5IGNvdW50PSVkKS4uLiIsCiAJICAgICAgIHR0eV9uYW1lKHR0eSwgYnVmKSwgdHR5LT5jb3VudCk7CiAjZW5kaWYKIApAQCAtMTk4NSwyNiArMTU3NiwxOSBAQAogCWlmICh0dHktPmRyaXZlci0+b3RoZXIgJiYKIAkgICAgICEodHR5LT5kcml2ZXItPmZsYWdzICYgVFRZX0RSSVZFUl9ERVZQVFNfTUVNKSkgewogCQlpZiAob190dHkgIT0gdHR5LT5kcml2ZXItPm90aGVyLT50dHlzW2lkeF0pIHsKLQkJCXByaW50ayhLRVJOX0RFQlVHICJyZWxlYXNlX2Rldjogb3RoZXItPnRhYmxlWyVkXSAiCisJCQlwcmludGsoS0VSTl9ERUJVRyAidHR5X3JlbGVhc2VfZGV2OiBvdGhlci0+dGFibGVbJWRdICIKIAkJCQkJICAibm90IG9fdHR5IGZvciAoJXMpXG4iLAogCQkJICAgICAgIGlkeCwgdHR5LT5uYW1lKTsKIAkJCXJldHVybjsKIAkJfQogCQlpZiAob190dHktPnRlcm1pb3MgIT0gdHR5LT5kcml2ZXItPm90aGVyLT50ZXJtaW9zW2lkeF0pIHsKLQkJCXByaW50ayhLRVJOX0RFQlVHICJyZWxlYXNlX2Rldjogb3RoZXItPnRlcm1pb3NbJWRdICIKKwkJCXByaW50ayhLRVJOX0RFQlVHICJ0dHlfcmVsZWFzZV9kZXY6IG90aGVyLT50ZXJtaW9zWyVkXSAiCiAJCQkJCSAgIm5vdCBvX3Rlcm1pb3MgZm9yICglcylcbiIsCiAJCQkgICAgICAgaWR4LCB0dHktPm5hbWUpOwogCQkJcmV0dXJuOwogCQl9Ci0JCWlmIChvX3R0eS0+dGVybWlvc19sb2NrZWQgIT0KLQkJICAgICAgdHR5LT5kcml2ZXItPm90aGVyLT50ZXJtaW9zX2xvY2tlZFtpZHhdKSB7Ci0JCQlwcmludGsoS0VSTl9ERUJVRyAicmVsZWFzZV9kZXY6IG90aGVyLT50ZXJtaW9zX2xvY2tlZFsiCi0JCQkJCSAgIiVkXSBub3Qgb190ZXJtaW9zX2xvY2tlZCBmb3IgKCVzKVxuIiwKLQkJCSAgICAgICBpZHgsIHR0eS0+bmFtZSk7Ci0JCQlyZXR1cm47Ci0JCX0KIAkJaWYgKG9fdHR5LT5saW5rICE9IHR0eSkgewotCQkJcHJpbnRrKEtFUk5fREVCVUcgInJlbGVhc2VfZGV2OiBiYWQgcHR5IHBvaW50ZXJzXG4iKTsKKwkJCXByaW50ayhLRVJOX0RFQlVHICJ0dHlfcmVsZWFzZV9kZXY6IGJhZCBwdHkgcG9pbnRlcnNcbiIpOwogCQkJcmV0dXJuOwogCQl9CiAJfQpAQCAtMjA2Miw3ICsxNjQ2LDcgQEAKIAkJaWYgKCFkb19zbGVlcCkKIAkJCWJyZWFrOwogCi0JCXByaW50ayhLRVJOX1dBUk5JTkcgInJlbGVhc2VfZGV2OiAlczogcmVhZC93cml0ZSB3YWl0IHF1ZXVlICIKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAidHR5X3JlbGVhc2VfZGV2OiAlczogcmVhZC93cml0ZSB3YWl0IHF1ZXVlICIKIAkJCQkgICAgImFjdGl2ZSFcbiIsIHR0eV9uYW1lKHR0eSwgYnVmKSk7CiAJCW11dGV4X3VubG9jaygmdHR5X211dGV4KTsKIAkJc2NoZWR1bGUoKTsKQEAgLTIwNzUsMTQgKzE2NTksMTQgQEAKIAkgKi8KIAlpZiAocHR5X21hc3RlcikgewogCQlpZiAoLS1vX3R0eS0+Y291bnQgPCAwKSB7Ci0JCQlwcmludGsoS0VSTl9XQVJOSU5HICJyZWxlYXNlX2RldjogYmFkIHB0eSBzbGF2ZSBjb3VudCAiCisJCQlwcmludGsoS0VSTl9XQVJOSU5HICJ0dHlfcmVsZWFzZV9kZXY6IGJhZCBwdHkgc2xhdmUgY291bnQgIgogCQkJCQkgICAgIiglZCkgZm9yICVzXG4iLAogCQkJICAgICAgIG9fdHR5LT5jb3VudCwgdHR5X25hbWUob190dHksIGJ1ZikpOwogCQkJb190dHktPmNvdW50ID0gMDsKIAkJfQogCX0KIAlpZiAoLS10dHktPmNvdW50IDwgMCkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJyZWxlYXNlX2RldjogYmFkIHR0eS0+Y291bnQgKCVkKSBmb3IgJXNcbiIsCisJCXByaW50ayhLRVJOX1dBUk5JTkcgInR0eV9yZWxlYXNlX2RldjogYmFkIHR0eS0+Y291bnQgKCVkKSBmb3IgJXNcbiIsCiAJCSAgICAgICB0dHktPmNvdW50LCB0dHlfbmFtZSh0dHksIGJ1ZikpOwogCQl0dHktPmNvdW50ID0gMDsKIAl9CkBAIC0yMTQ1LDExICsxNzI5LDExIEBACiAKIAkvKiBNYWtlIHRoaXMgcHR5IG51bWJlciBhdmFpbGFibGUgZm9yIHJlYWxsb2NhdGlvbiAqLwogCWlmIChkZXZwdHMpCi0JCWRldnB0c19raWxsX2luZGV4KGlkeCk7CisJCWRldnB0c19raWxsX2luZGV4KGlub2RlLCBpZHgpOwogfQogCiAvKioKLSAqCXR0eV9vcGVuCQktCW9wZW4gYSB0dHkgZGV2aWNlCisgKglfX3R0eV9vcGVuCQktCW9wZW4gYSB0dHkgZGV2aWNlCiAgKglAaW5vZGU6IGlub2RlIG9mIGRldmljZSBmaWxlCiAgKglAZmlscDogZmlsZSBwb2ludGVyIHRvIHR0eQogICoKQEAgLTIxNjQsMTQgKzE3NDgsMTQgQEAKICAqCVRoZSB0ZXJtaW9zIHN0YXRlIG9mIGEgcHR5IGlzIHJlc2V0IG9uIGZpcnN0IG9wZW4gc28gdGhhdAogICoJc2V0dGluZ3MgZG9uJ3QgcGVyc2lzdCBhY3Jvc3MgcmV1c2UuCiAgKgotICoJTG9ja2luZzogdHR5X211dGV4IHByb3RlY3RzIHR0eSwgZ2V0X3R0eV9kcml2ZXIgYW5kIGluaXRfZGV2IHdvcmsuCisgKglMb2NraW5nOiB0dHlfbXV0ZXggcHJvdGVjdHMgdHR5LCBnZXRfdHR5X2RyaXZlciBhbmQgdHR5X2luaXRfZGV2IHdvcmsuCiAgKgkJIHR0eS0+Y291bnQgc2hvdWxkIHByb3RlY3QgdGhlIHJlc3QuCiAgKgkJIC0+c2lnbG9jayBwcm90ZWN0cyAtPnNpZ25hbC8tPnNpZ2hhbmQKICAqLwogCiBzdGF0aWMgaW50IF9fdHR5X29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHApCiB7Ci0Jc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eTsKKwlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5ID0gTlVMTDsKIAlpbnQgbm9jdHR5LCByZXR2YWw7CiAJc3RydWN0IHR0eV9kcml2ZXIgKmRyaXZlcjsKIAlpbnQgaW5kZXg7CkBAIC0yMTkzLDIzICsxNzc3LDI1IEBACiAJCQltdXRleF91bmxvY2soJnR0eV9tdXRleCk7CiAJCQlyZXR1cm4gLUVOWElPOwogCQl9Ci0JCWRyaXZlciA9IHR0eS0+ZHJpdmVyOworCQlkcml2ZXIgPSB0dHlfZHJpdmVyX2tyZWZfZ2V0KHR0eS0+ZHJpdmVyKTsKIAkJaW5kZXggPSB0dHktPmluZGV4OwogCQlmaWxwLT5mX2ZsYWdzIHw9IE9fTk9OQkxPQ0s7IC8qIERvbid0IGxldCAvZGV2L3R0eSBibG9jayAqLwogCQkvKiBub2N0dHkgPSAxOyAqLworCQkvKiBGSVhNRTogU2hvdWxkIHdlIHRha2UgYSBkcml2ZXIgcmVmZXJlbmNlID8gKi8KKwkJdHR5X2tyZWZfcHV0KHR0eSk7CiAJCWdvdG8gZ290X2RyaXZlcjsKIAl9CiAjaWZkZWYgQ09ORklHX1ZUCiAJaWYgKGRldmljZSA9PSBNS0RFVihUVFlfTUFKT1IsIDApKSB7CiAJCWV4dGVybiBzdHJ1Y3QgdHR5X2RyaXZlciAqY29uc29sZV9kcml2ZXI7Ci0JCWRyaXZlciA9IGNvbnNvbGVfZHJpdmVyOworCQlkcml2ZXIgPSB0dHlfZHJpdmVyX2tyZWZfZ2V0KGNvbnNvbGVfZHJpdmVyKTsKIAkJaW5kZXggPSBmZ19jb25zb2xlOwogCQlub2N0dHkgPSAxOwogCQlnb3RvIGdvdF9kcml2ZXI7CiAJfQogI2VuZGlmCiAJaWYgKGRldmljZSA9PSBNS0RFVihUVFlBVVhfTUFKT1IsIDEpKSB7Ci0JCWRyaXZlciA9IGNvbnNvbGVfZGV2aWNlKCZpbmRleCk7CisJCWRyaXZlciA9IHR0eV9kcml2ZXJfa3JlZl9nZXQoY29uc29sZV9kZXZpY2UoJmluZGV4KSk7CiAJCWlmIChkcml2ZXIpIHsKIAkJCS8qIERvbid0IGxldCAvZGV2L2NvbnNvbGUgYmxvY2sgKi8KIAkJCWZpbHAtPmZfZmxhZ3MgfD0gT19OT05CTE9DSzsKQEAgLTIyMjYsMTAgKzE4MTIsMjUgQEAKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogZ290X2RyaXZlcjoKLQlyZXR2YWwgPSBpbml0X2Rldihkcml2ZXIsIGluZGV4LCAmdHR5KTsKKwlpZiAoIXR0eSkgeworCQkvKiBjaGVjayB3aGV0aGVyIHdlJ3JlIHJlb3BlbmluZyBhbiBleGlzdGluZyB0dHkgKi8KKwkJdHR5ID0gdHR5X2RyaXZlcl9sb29rdXBfdHR5KGRyaXZlciwgaW5vZGUsIGluZGV4KTsKKworCQlpZiAoSVNfRVJSKHR0eSkpCisJCQlyZXR1cm4gUFRSX0VSUih0dHkpOworCX0KKworCWlmICh0dHkpIHsKKwkJcmV0dmFsID0gdHR5X3Jlb3Blbih0dHkpOworCQlpZiAocmV0dmFsKQorCQkJdHR5ID0gRVJSX1BUUihyZXR2YWwpOworCX0gZWxzZQorCQl0dHkgPSB0dHlfaW5pdF9kZXYoZHJpdmVyLCBpbmRleCwgMCk7CisKIAltdXRleF91bmxvY2soJnR0eV9tdXRleCk7Ci0JaWYgKHJldHZhbCkKLQkJcmV0dXJuIHJldHZhbDsKKwl0dHlfZHJpdmVyX2tyZWZfcHV0KGRyaXZlcik7CisJaWYgKElTX0VSUih0dHkpKQorCQlyZXR1cm4gUFRSX0VSUih0dHkpOwogCiAJZmlscC0+cHJpdmF0ZV9kYXRhID0gdHR5OwogCWZpbGVfbW92ZShmaWxwLCAmdHR5LT50dHlfZmlsZXMpOwpAQCAtMjI1Nyw3ICsxODU4LDcgQEAKIAkJcHJpbnRrKEtFUk5fREVCVUcgImVycm9yICVkIGluIG9wZW5pbmcgJXMuLi4iLCByZXR2YWwsCiAJCSAgICAgICB0dHktPm5hbWUpOwogI2VuZGlmCi0JCXJlbGVhc2VfZGV2KGZpbHApOworCQl0dHlfcmVsZWFzZV9kZXYoZmlscCk7CiAJCWlmIChyZXR2YWwgIT0gLUVSRVNUQVJUU1lTKQogCQkJcmV0dXJuIHJldHZhbDsKIAkJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKQpAQCAtMjI5Niw2OSArMTg5Nyw2IEBACiAKIAogCi0jaWZkZWYgQ09ORklHX1VOSVg5OF9QVFlTCi0vKioKLSAqCXB0bXhfb3BlbgkJLQlvcGVuIGEgdW5peCA5OCBwdHkgbWFzdGVyCi0gKglAaW5vZGU6IGlub2RlIG9mIGRldmljZSBmaWxlCi0gKglAZmlscDogZmlsZSBwb2ludGVyIHRvIHR0eQotICoKLSAqCUFsbG9jYXRlIGEgdW5peDk4IHB0eSBtYXN0ZXIgZGV2aWNlIGZyb20gdGhlIHB0bXggZHJpdmVyLgotICoKLSAqCUxvY2tpbmc6IHR0eV9tdXRleCBwcm90ZWN0cyB0aGVpbml0X2RldiB3b3JrLiB0dHktPmNvdW50IHNob3VsZAotICogCQlwcm90ZWN0IHRoZSByZXN0LgotICoJCWFsbG9jYXRlZF9wdHlzX2xvY2sgaGFuZGxlcyB0aGUgbGlzdCBvZiBmcmVlIHB0eSBudW1iZXJzCi0gKi8KLQotc3RhdGljIGludCBfX3B0bXhfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCkKLXsKLQlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5OwotCWludCByZXR2YWw7Ci0JaW50IGluZGV4OwotCi0Jbm9uc2Vla2FibGVfb3Blbihpbm9kZSwgZmlscCk7Ci0KLQkvKiBmaW5kIGEgZGV2aWNlIHRoYXQgaXMgbm90IGluIHVzZS4gKi8KLQlpbmRleCA9IGRldnB0c19uZXdfaW5kZXgoKTsKLQlpZiAoaW5kZXggPCAwKQotCQlyZXR1cm4gaW5kZXg7Ci0KLQltdXRleF9sb2NrKCZ0dHlfbXV0ZXgpOwotCXJldHZhbCA9IGluaXRfZGV2KHB0bV9kcml2ZXIsIGluZGV4LCAmdHR5KTsKLQltdXRleF91bmxvY2soJnR0eV9tdXRleCk7Ci0KLQlpZiAocmV0dmFsKQotCQlnb3RvIG91dDsKLQotCXNldF9iaXQoVFRZX1BUWV9MT0NLLCAmdHR5LT5mbGFncyk7IC8qIExPQ0sgVEhFIFNMQVZFICovCi0JZmlscC0+cHJpdmF0ZV9kYXRhID0gdHR5OwotCWZpbGVfbW92ZShmaWxwLCAmdHR5LT50dHlfZmlsZXMpOwotCi0JcmV0dmFsID0gZGV2cHRzX3B0eV9uZXcodHR5LT5saW5rKTsKLQlpZiAocmV0dmFsKQotCQlnb3RvIG91dDE7Ci0KLQljaGVja190dHlfY291bnQodHR5LCAicHRteF9vcGVuIik7Ci0JcmV0dmFsID0gcHRtX2RyaXZlci0+b3BzLT5vcGVuKHR0eSwgZmlscCk7Ci0JaWYgKCFyZXR2YWwpCi0JCXJldHVybiAwOwotb3V0MToKLQlyZWxlYXNlX2RldihmaWxwKTsKLQlyZXR1cm4gcmV0dmFsOwotb3V0OgotCWRldnB0c19raWxsX2luZGV4KGluZGV4KTsKLQlyZXR1cm4gcmV0dmFsOwotfQotCi1zdGF0aWMgaW50IHB0bXhfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCkKLXsKLQlpbnQgcmV0OwotCi0JbG9ja19rZXJuZWwoKTsKLQlyZXQgPSBfX3B0bXhfb3Blbihpbm9kZSwgZmlscCk7Ci0JdW5sb2NrX2tlcm5lbCgpOwotCXJldHVybiByZXQ7Ci19Ci0jZW5kaWYKIAogLyoqCiAgKgl0dHlfcmVsZWFzZQkJLQl2ZnMgY2FsbGJhY2sgZm9yIGNsb3NlCkBAIC0yMzY5LDEzICsxOTA3LDEzIEBACiAgKgl0aGlzIHR0eS4gVGhlcmUgbWF5IGhvd2V2ZXIgYmUgc2V2ZXJhbCBzdWNoIHJlZmVyZW5jZXMuCiAgKgogICoJTG9ja2luZzoKLSAqCQlUYWtlcyBia2wuIFNlZSByZWxlYXNlX2RldgorICoJCVRha2VzIGJrbC4gU2VlIHR0eV9yZWxlYXNlX2RldgogICovCiAKIHN0YXRpYyBpbnQgdHR5X3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHApCiB7CiAJbG9ja19rZXJuZWwoKTsKLQlyZWxlYXNlX2RldihmaWxwKTsKKwl0dHlfcmVsZWFzZV9kZXYoZmlscCk7CiAJdW5sb2NrX2tlcm5lbCgpOwogCXJldHVybiAwOwogfQpAQCAtMjUyNCw3ICsyMDYyLDcgQEAKIAogCS8qIEZvciBhIFBUWSB3ZSBuZWVkIHRvIGxvY2sgdGhlIHR0eSBzaWRlICovCiAJbXV0ZXhfbG9jaygmcmVhbF90dHktPnRlcm1pb3NfbXV0ZXgpOwotCWlmICghbWVtY21wKHdzLCAmdHR5LT53aW5zaXplLCBzaXplb2YoKndzKSkpCisJaWYgKCFtZW1jbXAod3MsICZyZWFsX3R0eS0+d2luc2l6ZSwgc2l6ZW9mKCp3cykpKQogCQlnb3RvIGRvbmU7CiAJLyogR2V0IHRoZSBQSUQgdmFsdWVzIGFuZCByZWZlcmVuY2UgdGhlbSBzbyB3ZSBjYW4KIAkgICBhdm9pZCBob2xkaW5nIHRoZSB0dHkgY3RybCBsb2NrIHdoaWxlIHNlbmRpbmcgc2lnbmFscyAqLwpAQCAtMjk5Niw3ICsyNTM0LDcgQEAKIAljYXNlIFRJT0NTVEk6CiAJCXJldHVybiB0aW9jc3RpKHR0eSwgcCk7CiAJY2FzZSBUSU9DR1dJTlNaOgotCQlyZXR1cm4gdGlvY2d3aW5zeih0dHksIHApOworCQlyZXR1cm4gdGlvY2d3aW5zeihyZWFsX3R0eSwgcCk7CiAJY2FzZSBUSU9DU1dJTlNaOgogCQlyZXR1cm4gdGlvY3N3aW5zeih0dHksIHJlYWxfdHR5LCBwKTsKIAljYXNlIFRJT0NDT05TOgpAQCAtMzAyNiwxMCArMjU2NCw2IEBACiAJCXJldHVybiBwdXRfdXNlcih0dHktPmxkaXNjLm9wcy0+bnVtLCAoaW50IF9fdXNlciAqKXApOwogCWNhc2UgVElPQ1NFVEQ6CiAJCXJldHVybiB0aW9jc2V0ZCh0dHksIHApOwotI2lmZGVmIENPTkZJR19WVAotCWNhc2UgVElPQ0xJTlVYOgotCQlyZXR1cm4gdGlvY2xpbnV4KHR0eSwgYXJnKTsKLSNlbmRpZgogCS8qCiAJICogQnJlYWsgaGFuZGxpbmcKIAkgKi8KQEAgLTMyMjAsMTEzICsyNzU0LDYgQEAKIEVYUE9SVF9TWU1CT0woZG9fU0FLKTsKIAogLyoqCi0gKglmbHVzaF90b19sZGlzYwotICoJQHdvcms6IHR0eSBzdHJ1Y3R1cmUgcGFzc2VkIGZyb20gd29yayBxdWV1ZS4KLSAqCi0gKglUaGlzIHJvdXRpbmUgaXMgY2FsbGVkIG91dCBvZiB0aGUgc29mdHdhcmUgaW50ZXJydXB0IHRvIGZsdXNoIGRhdGEKLSAqCWZyb20gdGhlIGJ1ZmZlciBjaGFpbiB0byB0aGUgbGluZSBkaXNjaXBsaW5lLgotICoKLSAqCUxvY2tpbmc6IGhvbGRzIHR0eS0+YnVmLmxvY2sgdG8gZ3VhcmQgYnVmZmVyIGxpc3QuIERyb3BzIHRoZSBsb2NrCi0gKgl3aGlsZSBpbnZva2luZyB0aGUgbGluZSBkaXNjaXBsaW5lIHJlY2VpdmVfYnVmIG1ldGhvZC4gVGhlCi0gKglyZWNlaXZlX2J1ZiBtZXRob2QgaXMgc2luZ2xlIHRocmVhZGVkIGZvciBlYWNoIHR0eSBpbnN0YW5jZS4KLSAqLwotCi1zdGF0aWMgdm9pZCBmbHVzaF90b19sZGlzYyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCi17Ci0Jc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSA9Ci0JCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgdHR5X3N0cnVjdCwgYnVmLndvcmsud29yayk7Ci0JdW5zaWduZWQgbG9uZyAJZmxhZ3M7Ci0Jc3RydWN0IHR0eV9sZGlzYyAqZGlzYzsKLQlzdHJ1Y3QgdHR5X2J1ZmZlciAqdGJ1ZiwgKmhlYWQ7Ci0JY2hhciAqY2hhcl9idWY7Ci0JdW5zaWduZWQgY2hhciAqZmxhZ19idWY7Ci0KLQlkaXNjID0gdHR5X2xkaXNjX3JlZih0dHkpOwotCWlmIChkaXNjID09IE5VTEwpCS8qICAhVFRZX0xESVNDICovCi0JCXJldHVybjsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZ0dHktPmJ1Zi5sb2NrLCBmbGFncyk7Ci0JLyogU28gd2Uga25vdyBhIGZsdXNoIGlzIHJ1bm5pbmcgKi8KLQlzZXRfYml0KFRUWV9GTFVTSElORywgJnR0eS0+ZmxhZ3MpOwotCWhlYWQgPSB0dHktPmJ1Zi5oZWFkOwotCWlmIChoZWFkICE9IE5VTEwpIHsKLQkJdHR5LT5idWYuaGVhZCA9IE5VTEw7Ci0JCWZvciAoOzspIHsKLQkJCWludCBjb3VudCA9IGhlYWQtPmNvbW1pdCAtIGhlYWQtPnJlYWQ7Ci0JCQlpZiAoIWNvdW50KSB7Ci0JCQkJaWYgKGhlYWQtPm5leHQgPT0gTlVMTCkKLQkJCQkJYnJlYWs7Ci0JCQkJdGJ1ZiA9IGhlYWQ7Ci0JCQkJaGVhZCA9IGhlYWQtPm5leHQ7Ci0JCQkJdHR5X2J1ZmZlcl9mcmVlKHR0eSwgdGJ1Zik7Ci0JCQkJY29udGludWU7Ci0JCQl9Ci0JCQkvKiBMZGlzYyBvciB1c2VyIGlzIHRyeWluZyB0byBmbHVzaCB0aGUgYnVmZmVycwotCQkJICAgd2UgYXJlIGZlZWRpbmcgdG8gdGhlIGxkaXNjLCBzdG9wIGZlZWRpbmcgdGhlCi0JCQkgICBsaW5lIGRpc2NpcGxpbmUgYXMgd2Ugd2FudCB0byBlbXB0eSB0aGUgcXVldWUgKi8KLQkJCWlmICh0ZXN0X2JpdChUVFlfRkxVU0hQRU5ESU5HLCAmdHR5LT5mbGFncykpCi0JCQkJYnJlYWs7Ci0JCQlpZiAoIXR0eS0+cmVjZWl2ZV9yb29tKSB7Ci0JCQkJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZ0dHktPmJ1Zi53b3JrLCAxKTsKLQkJCQlicmVhazsKLQkJCX0KLQkJCWlmIChjb3VudCA+IHR0eS0+cmVjZWl2ZV9yb29tKQotCQkJCWNvdW50ID0gdHR5LT5yZWNlaXZlX3Jvb207Ci0JCQljaGFyX2J1ZiA9IGhlYWQtPmNoYXJfYnVmX3B0ciArIGhlYWQtPnJlYWQ7Ci0JCQlmbGFnX2J1ZiA9IGhlYWQtPmZsYWdfYnVmX3B0ciArIGhlYWQtPnJlYWQ7Ci0JCQloZWFkLT5yZWFkICs9IGNvdW50OwotCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdHR5LT5idWYubG9jaywgZmxhZ3MpOwotCQkJZGlzYy0+b3BzLT5yZWNlaXZlX2J1Zih0dHksIGNoYXJfYnVmLAotCQkJCQkJCWZsYWdfYnVmLCBjb3VudCk7Ci0JCQlzcGluX2xvY2tfaXJxc2F2ZSgmdHR5LT5idWYubG9jaywgZmxhZ3MpOwotCQl9Ci0JCS8qIFJlc3RvcmUgdGhlIHF1ZXVlIGhlYWQgKi8KLQkJdHR5LT5idWYuaGVhZCA9IGhlYWQ7Ci0JfQotCS8qIFdlIG1heSBoYXZlIGEgZGVmZXJyZWQgcmVxdWVzdCB0byBmbHVzaCB0aGUgaW5wdXQgYnVmZmVyLAotCSAgIGlmIHNvIHB1bGwgdGhlIGNoYWluIHVuZGVyIHRoZSBsb2NrIGFuZCBlbXB0eSB0aGUgcXVldWUgKi8KLQlpZiAodGVzdF9iaXQoVFRZX0ZMVVNIUEVORElORywgJnR0eS0+ZmxhZ3MpKSB7Ci0JCV9fdHR5X2J1ZmZlcl9mbHVzaCh0dHkpOwotCQljbGVhcl9iaXQoVFRZX0ZMVVNIUEVORElORywgJnR0eS0+ZmxhZ3MpOwotCQl3YWtlX3VwKCZ0dHktPnJlYWRfd2FpdCk7Ci0JfQotCWNsZWFyX2JpdChUVFlfRkxVU0hJTkcsICZ0dHktPmZsYWdzKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0dHktPmJ1Zi5sb2NrLCBmbGFncyk7Ci0KLQl0dHlfbGRpc2NfZGVyZWYoZGlzYyk7Ci19Ci0KLS8qKgotICoJdHR5X2ZsaXBfYnVmZmVyX3B1c2gJLQl0ZXJtaW5hbAotICoJQHR0eTogdHR5IHRvIHB1c2gKLSAqCi0gKglRdWV1ZSBhIHB1c2ggb2YgdGhlIHRlcm1pbmFsIGZsaXAgYnVmZmVycyB0byB0aGUgbGluZSBkaXNjaXBsaW5lLiBUaGlzCi0gKglmdW5jdGlvbiBtdXN0IG5vdCBiZSBjYWxsZWQgZnJvbSBJUlEgY29udGV4dCBpZiB0dHktPmxvd19sYXRlbmN5IGlzIHNldC4KLSAqCi0gKglJbiB0aGUgZXZlbnQgb2YgdGhlIHF1ZXVlIGJlaW5nIGJ1c3kgZm9yIGZsaXBwaW5nIHRoZSB3b3JrIHdpbGwgYmUKLSAqCWhlbGQgb2ZmIGFuZCByZXRyaWVkIGxhdGVyLgotICoKLSAqCUxvY2tpbmc6IHR0eSBidWZmZXIgbG9jay4gRHJpdmVyIGxvY2tzIGluIGxvdyBsYXRlbmN5IG1vZGUuCi0gKi8KLQotdm9pZCB0dHlfZmxpcF9idWZmZXJfcHVzaChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0Jc3Bpbl9sb2NrX2lycXNhdmUoJnR0eS0+YnVmLmxvY2ssIGZsYWdzKTsKLQlpZiAodHR5LT5idWYudGFpbCAhPSBOVUxMKQotCQl0dHktPmJ1Zi50YWlsLT5jb21taXQgPSB0dHktPmJ1Zi50YWlsLT51c2VkOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnR0eS0+YnVmLmxvY2ssIGZsYWdzKTsKLQotCWlmICh0dHktPmxvd19sYXRlbmN5KQotCQlmbHVzaF90b19sZGlzYygmdHR5LT5idWYud29yay53b3JrKTsKLQllbHNlCi0JCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmdHR5LT5idWYud29yaywgMSk7Ci19Ci0KLUVYUE9SVF9TWU1CT0wodHR5X2ZsaXBfYnVmZmVyX3B1c2gpOwotCi0KLS8qKgogICoJaW5pdGlhbGl6ZV90dHlfc3RydWN0CiAgKglAdHR5OiB0dHkgdG8gaW5pdGlhbGl6ZQogICoKQEAgLTMzMzYsOSArMjc2MywxMSBAQAogICoJTG9ja2luZzogbm9uZSAtIHR0eSBpbiBxdWVzdGlvbiBtdXN0IG5vdCBiZSBleHBvc2VkIGF0IHRoaXMgcG9pbnQKICAqLwogCi1zdGF0aWMgdm9pZCBpbml0aWFsaXplX3R0eV9zdHJ1Y3Qoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKK3ZvaWQgaW5pdGlhbGl6ZV90dHlfc3RydWN0KHN0cnVjdCB0dHlfc3RydWN0ICp0dHksCisJCXN0cnVjdCB0dHlfZHJpdmVyICpkcml2ZXIsIGludCBpZHgpCiB7CiAJbWVtc2V0KHR0eSwgMCwgc2l6ZW9mKHN0cnVjdCB0dHlfc3RydWN0KSk7CisJa3JlZl9pbml0KCZ0dHktPmtyZWYpOwogCXR0eS0+bWFnaWMgPSBUVFlfTUFHSUM7CiAJdHR5X2xkaXNjX2luaXQodHR5KTsKIAl0dHktPnNlc3Npb24gPSBOVUxMOwpAQCAtMzM0Niw3ICsyNzc1LDYgQEAKIAl0dHktPm92ZXJydW5fdGltZSA9IGppZmZpZXM7CiAJdHR5LT5idWYuaGVhZCA9IHR0eS0+YnVmLnRhaWwgPSBOVUxMOwogCXR0eV9idWZmZXJfaW5pdCh0dHkpOwotCUlOSVRfREVMQVlFRF9XT1JLKCZ0dHktPmJ1Zi53b3JrLCBmbHVzaF90b19sZGlzYyk7CiAJbXV0ZXhfaW5pdCgmdHR5LT50ZXJtaW9zX211dGV4KTsKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZ0dHktPndyaXRlX3dhaXQpOwogCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnR0eS0+cmVhZF93YWl0KTsKQEAgLTMzNTcsNiArMjc4NSwxMSBAQAogCXNwaW5fbG9ja19pbml0KCZ0dHktPmN0cmxfbG9jayk7CiAJSU5JVF9MSVNUX0hFQUQoJnR0eS0+dHR5X2ZpbGVzKTsKIAlJTklUX1dPUksoJnR0eS0+U0FLX3dvcmssIGRvX1NBS193b3JrKTsKKworCXR0eS0+ZHJpdmVyID0gZHJpdmVyOworCXR0eS0+b3BzID0gZHJpdmVyLT5vcHM7CisJdHR5LT5pbmRleCA9IGlkeDsKKwl0dHlfbGluZV9uYW1lKGRyaXZlciwgaWR4LCB0dHktPm5hbWUpOwogfQogCiAvKioKQEAgLTMzNzcsMTAgKzI4MTAsOSBAQAogCQlyZXR1cm4gdHR5LT5vcHMtPnB1dF9jaGFyKHR0eSwgY2gpOwogCXJldHVybiB0dHktPm9wcy0+d3JpdGUodHR5LCAmY2gsIDEpOwogfQotCiBFWFBPUlRfU1lNQk9MX0dQTCh0dHlfcHV0X2NoYXIpOwogCi1zdGF0aWMgc3RydWN0IGNsYXNzICp0dHlfY2xhc3M7CitzdHJ1Y3QgY2xhc3MgKnR0eV9jbGFzczsKIAogLyoqCiAgKgl0dHlfcmVnaXN0ZXJfZGV2aWNlIC0gcmVnaXN0ZXIgYSB0dHkgZGV2aWNlCkBAIC0zNDE4LDggKzI4NTAsOSBAQAogCWVsc2UKIAkJdHR5X2xpbmVfbmFtZShkcml2ZXIsIGluZGV4LCBuYW1lKTsKIAotCXJldHVybiBkZXZpY2VfY3JlYXRlX2RydmRhdGEodHR5X2NsYXNzLCBkZXZpY2UsIGRldiwgTlVMTCwgbmFtZSk7CisJcmV0dXJuIGRldmljZV9jcmVhdGUodHR5X2NsYXNzLCBkZXZpY2UsIGRldiwgTlVMTCwgbmFtZSk7CiB9CitFWFBPUlRfU1lNQk9MKHR0eV9yZWdpc3Rlcl9kZXZpY2UpOwogCiAvKioKICAqIAl0dHlfdW5yZWdpc3Rlcl9kZXZpY2UgLSB1bnJlZ2lzdGVyIGEgdHR5IGRldmljZQpAQCAtMzQzNyw4ICsyODcwLDYgQEAKIAlkZXZpY2VfZGVzdHJveSh0dHlfY2xhc3MsCiAJCU1LREVWKGRyaXZlci0+bWFqb3IsIGRyaXZlci0+bWlub3Jfc3RhcnQpICsgaW5kZXgpOwogfQotCi1FWFBPUlRfU1lNQk9MKHR0eV9yZWdpc3Rlcl9kZXZpY2UpOwogRVhQT1JUX1NZTUJPTCh0dHlfdW5yZWdpc3Rlcl9kZXZpY2UpOwogCiBzdHJ1Y3QgdHR5X2RyaXZlciAqYWxsb2NfdHR5X2RyaXZlcihpbnQgbGluZXMpCkBAIC0zNDQ3LDI4ICsyODc4LDY2IEBACiAKIAlkcml2ZXIgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgdHR5X2RyaXZlciksIEdGUF9LRVJORUwpOwogCWlmIChkcml2ZXIpIHsKKwkJa3JlZl9pbml0KCZkcml2ZXItPmtyZWYpOwogCQlkcml2ZXItPm1hZ2ljID0gVFRZX0RSSVZFUl9NQUdJQzsKIAkJZHJpdmVyLT5udW0gPSBsaW5lczsKIAkJLyogbGF0ZXIgd2UnbGwgbW92ZSBhbGxvY2F0aW9uIG9mIHRhYmxlcyBoZXJlICovCiAJfQogCXJldHVybiBkcml2ZXI7CiB9CitFWFBPUlRfU1lNQk9MKGFsbG9jX3R0eV9kcml2ZXIpOwogCi12b2lkIHB1dF90dHlfZHJpdmVyKHN0cnVjdCB0dHlfZHJpdmVyICpkcml2ZXIpCitzdGF0aWMgdm9pZCBkZXN0cnVjdF90dHlfZHJpdmVyKHN0cnVjdCBrcmVmICprcmVmKQogeworCXN0cnVjdCB0dHlfZHJpdmVyICpkcml2ZXIgPSBjb250YWluZXJfb2Yoa3JlZiwgc3RydWN0IHR0eV9kcml2ZXIsIGtyZWYpOworCWludCBpOworCXN0cnVjdCBrdGVybWlvcyAqdHA7CisJdm9pZCAqcDsKKworCWlmIChkcml2ZXItPmZsYWdzICYgVFRZX0RSSVZFUl9JTlNUQUxMRUQpIHsKKwkJLyoKKwkJICogRnJlZSB0aGUgdGVybWlvcyBhbmQgdGVybWlvc19sb2NrZWQgc3RydWN0dXJlcyBiZWNhdXNlCisJCSAqIHdlIGRvbid0IHdhbnQgdG8gZ2V0IG1lbW9yeSBsZWFrcyB3aGVuIG1vZHVsYXIgdHR5CisJCSAqIGRyaXZlcnMgYXJlIHJlbW92ZWQgZnJvbSB0aGUga2VybmVsLgorCQkgKi8KKwkJZm9yIChpID0gMDsgaSA8IGRyaXZlci0+bnVtOyBpKyspIHsKKwkJCXRwID0gZHJpdmVyLT50ZXJtaW9zW2ldOworCQkJaWYgKHRwKSB7CisJCQkJZHJpdmVyLT50ZXJtaW9zW2ldID0gTlVMTDsKKwkJCQlrZnJlZSh0cCk7CisJCQl9CisJCQlpZiAoIShkcml2ZXItPmZsYWdzICYgVFRZX0RSSVZFUl9EWU5BTUlDX0RFVikpCisJCQkJdHR5X3VucmVnaXN0ZXJfZGV2aWNlKGRyaXZlciwgaSk7CisJCX0KKwkJcCA9IGRyaXZlci0+dHR5czsKKwkJcHJvY190dHlfdW5yZWdpc3Rlcl9kcml2ZXIoZHJpdmVyKTsKKwkJZHJpdmVyLT50dHlzID0gTlVMTDsKKwkJZHJpdmVyLT50ZXJtaW9zID0gTlVMTDsKKwkJa2ZyZWUocCk7CisJCWNkZXZfZGVsKCZkcml2ZXItPmNkZXYpOworCX0KIAlrZnJlZShkcml2ZXIpOwogfQogCit2b2lkIHR0eV9kcml2ZXJfa3JlZl9wdXQoc3RydWN0IHR0eV9kcml2ZXIgKmRyaXZlcikKK3sKKwlrcmVmX3B1dCgmZHJpdmVyLT5rcmVmLCBkZXN0cnVjdF90dHlfZHJpdmVyKTsKK30KK0VYUE9SVF9TWU1CT0wodHR5X2RyaXZlcl9rcmVmX3B1dCk7CisKIHZvaWQgdHR5X3NldF9vcGVyYXRpb25zKHN0cnVjdCB0dHlfZHJpdmVyICpkcml2ZXIsCiAJCQljb25zdCBzdHJ1Y3QgdHR5X29wZXJhdGlvbnMgKm9wKQogewogCWRyaXZlci0+b3BzID0gb3A7CiB9OwotCi1FWFBPUlRfU1lNQk9MKGFsbG9jX3R0eV9kcml2ZXIpOwotRVhQT1JUX1NZTUJPTChwdXRfdHR5X2RyaXZlcik7CiBFWFBPUlRfU1lNQk9MKHR0eV9zZXRfb3BlcmF0aW9ucyk7CiAKK3ZvaWQgcHV0X3R0eV9kcml2ZXIoc3RydWN0IHR0eV9kcml2ZXIgKmQpCit7CisJdHR5X2RyaXZlcl9rcmVmX3B1dChkKTsKK30KK0VYUE9SVF9TWU1CT0wocHV0X3R0eV9kcml2ZXIpOworCiAvKgogICogQ2FsbGVkIGJ5IGEgdHR5IGRyaXZlciB0byByZWdpc3RlciBpdHNlbGYuCiAgKi8KQEAgLTM0NzksMTEgKzI5NDgsOCBAQAogCWRldl90IGRldjsKIAl2b2lkICoqcCA9IE5VTEw7CiAKLQlpZiAoZHJpdmVyLT5mbGFncyAmIFRUWV9EUklWRVJfSU5TVEFMTEVEKQotCQlyZXR1cm4gMDsKLQogCWlmICghKGRyaXZlci0+ZmxhZ3MgJiBUVFlfRFJJVkVSX0RFVlBUU19NRU0pICYmIGRyaXZlci0+bnVtKSB7Ci0JCXAgPSBremFsbG9jKGRyaXZlci0+bnVtICogMyAqIHNpemVvZih2b2lkICopLCBHRlBfS0VSTkVMKTsKKwkJcCA9IGt6YWxsb2MoZHJpdmVyLT5udW0gKiAyICogc2l6ZW9mKHZvaWQgKiksIEdGUF9LRVJORUwpOwogCQlpZiAoIXApCiAJCQlyZXR1cm4gLUVOT01FTTsKIAl9CkBAIC0zNTA3LDEyICsyOTczLDkgQEAKIAlpZiAocCkgewogCQlkcml2ZXItPnR0eXMgPSAoc3RydWN0IHR0eV9zdHJ1Y3QgKiopcDsKIAkJZHJpdmVyLT50ZXJtaW9zID0gKHN0cnVjdCBrdGVybWlvcyAqKikocCArIGRyaXZlci0+bnVtKTsKLQkJZHJpdmVyLT50ZXJtaW9zX2xvY2tlZCA9IChzdHJ1Y3Qga3Rlcm1pb3MgKiopCi0JCQkJCQkJKHAgKyBkcml2ZXItPm51bSAqIDIpOwogCX0gZWxzZSB7CiAJCWRyaXZlci0+dHR5cyA9IE5VTEw7CiAJCWRyaXZlci0+dGVybWlvcyA9IE5VTEw7Ci0JCWRyaXZlci0+dGVybWlvc19sb2NrZWQgPSBOVUxMOwogCX0KIAogCWNkZXZfaW5pdCgmZHJpdmVyLT5jZGV2LCAmdHR5X2ZvcHMpOwpAQCAtMzUyMSw3ICsyOTg0LDcgQEAKIAlpZiAoZXJyb3IpIHsKIAkJdW5yZWdpc3Rlcl9jaHJkZXZfcmVnaW9uKGRldiwgZHJpdmVyLT5udW0pOwogCQlkcml2ZXItPnR0eXMgPSBOVUxMOwotCQlkcml2ZXItPnRlcm1pb3MgPSBkcml2ZXItPnRlcm1pb3NfbG9ja2VkID0gTlVMTDsKKwkJZHJpdmVyLT50ZXJtaW9zID0gTlVMTDsKIAkJa2ZyZWUocCk7CiAJCXJldHVybiBlcnJvcjsKIAl9CkBAIC0zNTM1LDYgKzI5OTgsNyBAQAogCQkgICAgdHR5X3JlZ2lzdGVyX2RldmljZShkcml2ZXIsIGksIE5VTEwpOwogCX0KIAlwcm9jX3R0eV9yZWdpc3Rlcl9kcml2ZXIoZHJpdmVyKTsKKwlkcml2ZXItPmZsYWdzIHw9IFRUWV9EUklWRVJfSU5TVEFMTEVEOwogCXJldHVybiAwOwogfQogCkBAIC0zNTQ1LDQ2ICszMDA5LDE5IEBACiAgKi8KIGludCB0dHlfdW5yZWdpc3Rlcl9kcml2ZXIoc3RydWN0IHR0eV9kcml2ZXIgKmRyaXZlcikKIHsKLQlpbnQgaTsKLQlzdHJ1Y3Qga3Rlcm1pb3MgKnRwOwotCXZvaWQgKnA7Ci0KKyNpZiAwCisJLyogRklYTUUgKi8KIAlpZiAoZHJpdmVyLT5yZWZjb3VudCkKIAkJcmV0dXJuIC1FQlVTWTsKLQorI2VuZGlmCiAJdW5yZWdpc3Rlcl9jaHJkZXZfcmVnaW9uKE1LREVWKGRyaXZlci0+bWFqb3IsIGRyaXZlci0+bWlub3Jfc3RhcnQpLAogCQkJCWRyaXZlci0+bnVtKTsKIAltdXRleF9sb2NrKCZ0dHlfbXV0ZXgpOwogCWxpc3RfZGVsKCZkcml2ZXItPnR0eV9kcml2ZXJzKTsKIAltdXRleF91bmxvY2soJnR0eV9tdXRleCk7Ci0KLQkvKgotCSAqIEZyZWUgdGhlIHRlcm1pb3MgYW5kIHRlcm1pb3NfbG9ja2VkIHN0cnVjdHVyZXMgYmVjYXVzZQotCSAqIHdlIGRvbid0IHdhbnQgdG8gZ2V0IG1lbW9yeSBsZWFrcyB3aGVuIG1vZHVsYXIgdHR5Ci0JICogZHJpdmVycyBhcmUgcmVtb3ZlZCBmcm9tIHRoZSBrZXJuZWwuCi0JICovCi0JZm9yIChpID0gMDsgaSA8IGRyaXZlci0+bnVtOyBpKyspIHsKLQkJdHAgPSBkcml2ZXItPnRlcm1pb3NbaV07Ci0JCWlmICh0cCkgewotCQkJZHJpdmVyLT50ZXJtaW9zW2ldID0gTlVMTDsKLQkJCWtmcmVlKHRwKTsKLQkJfQotCQl0cCA9IGRyaXZlci0+dGVybWlvc19sb2NrZWRbaV07Ci0JCWlmICh0cCkgewotCQkJZHJpdmVyLT50ZXJtaW9zX2xvY2tlZFtpXSA9IE5VTEw7Ci0JCQlrZnJlZSh0cCk7Ci0JCX0KLQkJaWYgKCEoZHJpdmVyLT5mbGFncyAmIFRUWV9EUklWRVJfRFlOQU1JQ19ERVYpKQotCQkJdHR5X3VucmVnaXN0ZXJfZGV2aWNlKGRyaXZlciwgaSk7Ci0JfQotCXAgPSBkcml2ZXItPnR0eXM7Ci0JcHJvY190dHlfdW5yZWdpc3Rlcl9kcml2ZXIoZHJpdmVyKTsKLQlkcml2ZXItPnR0eXMgPSBOVUxMOwotCWRyaXZlci0+dGVybWlvcyA9IGRyaXZlci0+dGVybWlvc19sb2NrZWQgPSBOVUxMOwotCWtmcmVlKHApOwotCWNkZXZfZGVsKCZkcml2ZXItPmNkZXYpOwogCXJldHVybiAwOwogfQorCiBFWFBPUlRfU1lNQk9MKHR0eV91bnJlZ2lzdGVyX2RyaXZlcik7CiAKIGRldl90IHR0eV9kZXZudW0oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKQEAgLTM1OTUsOSArMzAzMiwxMyBAQAogCiB2b2lkIHByb2NfY2xlYXJfdHR5KHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkKIHsKLQlzcGluX2xvY2tfaXJxKCZwLT5zaWdoYW5kLT5zaWdsb2NrKTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCB0dHlfc3RydWN0ICp0dHk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJnAtPnNpZ2hhbmQtPnNpZ2xvY2ssIGZsYWdzKTsKKwl0dHkgPSBwLT5zaWduYWwtPnR0eTsKIAlwLT5zaWduYWwtPnR0eSA9IE5VTEw7Ci0Jc3Bpbl91bmxvY2tfaXJxKCZwLT5zaWdoYW5kLT5zaWdsb2NrKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwLT5zaWdoYW5kLT5zaWdsb2NrLCBmbGFncyk7CisJdHR5X2tyZWZfcHV0KHR0eSk7CiB9CiAKIC8qIENhbGxlZCB1bmRlciB0aGUgc2lnaGFuZCBsb2NrICovCkBAIC0zNjEzLDkgKzMwNTQsMTMgQEAKIAkJdHR5LT5wZ3JwID0gZ2V0X3BpZCh0YXNrX3BncnAodHNrKSk7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnR0eS0+Y3RybF9sb2NrLCBmbGFncyk7CiAJCXR0eS0+c2Vzc2lvbiA9IGdldF9waWQodGFza19zZXNzaW9uKHRzaykpOworCQlpZiAodHNrLT5zaWduYWwtPnR0eSkgeworCQkJcHJpbnRrKEtFUk5fREVCVUcgInR0eSBub3QgTlVMTCEhXG4iKTsKKwkJCXR0eV9rcmVmX3B1dCh0c2stPnNpZ25hbC0+dHR5KTsKKwkJfQogCX0KIAlwdXRfcGlkKHRzay0+c2lnbmFsLT50dHlfb2xkX3BncnApOwotCXRzay0+c2lnbmFsLT50dHkgPSB0dHk7CisJdHNrLT5zaWduYWwtPnR0eSA9IHR0eV9rcmVmX2dldCh0dHkpOwogCXRzay0+c2lnbmFsLT50dHlfb2xkX3BncnAgPSBOVUxMOwogfQogCkBAIC0zNjI5LDE4ICszMDc0LDIwIEBACiBzdHJ1Y3QgdHR5X3N0cnVjdCAqZ2V0X2N1cnJlbnRfdHR5KHZvaWQpCiB7CiAJc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eTsKLQlXQVJOX09OX09OQ0UoIW11dGV4X2lzX2xvY2tlZCgmdHR5X211dGV4KSk7Ci0JdHR5ID0gY3VycmVudC0+c2lnbmFsLT50dHk7Ci0JLyoKLQkgKiBzZXNzaW9uLT50dHkgY2FuIGJlIGNoYW5nZWQvY2xlYXJlZCBmcm9tIHVuZGVyIHVzLCBtYWtlIHN1cmUgd2UKLQkgKiBpc3N1ZSB0aGUgbG9hZC4gVGhlIG9idGFpbmVkIHBvaW50ZXIsIHdoZW4gbm90IE5VTEwsIGlzIHZhbGlkIGFzCi0JICogbG9uZyBhcyB3ZSBob2xkIHR0eV9tdXRleC4KLQkgKi8KLQliYXJyaWVyKCk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZjdXJyZW50LT5zaWdoYW5kLT5zaWdsb2NrLCBmbGFncyk7CisJdHR5ID0gdHR5X2tyZWZfZ2V0KGN1cnJlbnQtPnNpZ25hbC0+dHR5KTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjdXJyZW50LT5zaWdoYW5kLT5zaWdsb2NrLCBmbGFncyk7CiAJcmV0dXJuIHR0eTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGdldF9jdXJyZW50X3R0eSk7CiAKK3ZvaWQgdHR5X2RlZmF1bHRfZm9wcyhzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zICpmb3BzKQoreworCSpmb3BzID0gdHR5X2ZvcHM7Cit9CisKIC8qCiAgKiBJbml0aWFsaXplIHRoZSBjb25zb2xlIGRldmljZS4gVGhpcyBpcyBjYWxsZWQgKmVhcmx5Kiwgc28KICAqIHdlIGNhbid0IG5lY2Vzc2FyaWx5IGRlcGVuZCBvbiBsb3RzIG9mIGtlcm5lbCBoZWxwIGhlcmUuCkBAIC0zNjc4LDEyICszMTI1LDYgQEAKIC8qIDMvMjAwNCBqbWM6IHdoeSBkbyB0aGVzZSBkZXZpY2VzIGV4aXN0PyAqLwogCiBzdGF0aWMgc3RydWN0IGNkZXYgdHR5X2NkZXYsIGNvbnNvbGVfY2RldjsKLSNpZmRlZiBDT05GSUdfVU5JWDk4X1BUWVMKLXN0YXRpYyBzdHJ1Y3QgY2RldiBwdG14X2NkZXY7Ci0jZW5kaWYKLSNpZmRlZiBDT05GSUdfVlQKLXN0YXRpYyBzdHJ1Y3QgY2RldiB2YzBfY2RldjsKLSNlbmRpZgogCiAvKgogICogT2ssIG5vdyB3ZSBjYW4gaW5pdGlhbGl6ZSB0aGUgcmVzdCBvZiB0aGUgdHR5IGRldmljZXMgYW5kIGNhbiBjb3VudApAQCAtMzY5NSwzMiArMzEzNiwxOCBAQAogCWlmIChjZGV2X2FkZCgmdHR5X2NkZXYsIE1LREVWKFRUWUFVWF9NQUpPUiwgMCksIDEpIHx8CiAJICAgIHJlZ2lzdGVyX2NocmRldl9yZWdpb24oTUtERVYoVFRZQVVYX01BSk9SLCAwKSwgMSwgIi9kZXYvdHR5IikgPCAwKQogCQlwYW5pYygiQ291bGRuJ3QgcmVnaXN0ZXIgL2Rldi90dHkgZHJpdmVyXG4iKTsKLQlkZXZpY2VfY3JlYXRlX2RydmRhdGEodHR5X2NsYXNzLCBOVUxMLCBNS0RFVihUVFlBVVhfTUFKT1IsIDApLCBOVUxMLAorCWRldmljZV9jcmVhdGUodHR5X2NsYXNzLCBOVUxMLCBNS0RFVihUVFlBVVhfTUFKT1IsIDApLCBOVUxMLAogCQkJICAgICAgInR0eSIpOwogCiAJY2Rldl9pbml0KCZjb25zb2xlX2NkZXYsICZjb25zb2xlX2ZvcHMpOwogCWlmIChjZGV2X2FkZCgmY29uc29sZV9jZGV2LCBNS0RFVihUVFlBVVhfTUFKT1IsIDEpLCAxKSB8fAogCSAgICByZWdpc3Rlcl9jaHJkZXZfcmVnaW9uKE1LREVWKFRUWUFVWF9NQUpPUiwgMSksIDEsICIvZGV2L2NvbnNvbGUiKSA8IDApCiAJCXBhbmljKCJDb3VsZG4ndCByZWdpc3RlciAvZGV2L2NvbnNvbGUgZHJpdmVyXG4iKTsKLQlkZXZpY2VfY3JlYXRlX2RydmRhdGEodHR5X2NsYXNzLCBOVUxMLCBNS0RFVihUVFlBVVhfTUFKT1IsIDEpLCBOVUxMLAorCWRldmljZV9jcmVhdGUodHR5X2NsYXNzLCBOVUxMLCBNS0RFVihUVFlBVVhfTUFKT1IsIDEpLCBOVUxMLAogCQkJICAgICAgImNvbnNvbGUiKTsKIAotI2lmZGVmIENPTkZJR19VTklYOThfUFRZUwotCWNkZXZfaW5pdCgmcHRteF9jZGV2LCAmcHRteF9mb3BzKTsKLQlpZiAoY2Rldl9hZGQoJnB0bXhfY2RldiwgTUtERVYoVFRZQVVYX01BSk9SLCAyKSwgMSkgfHwKLQkgICAgcmVnaXN0ZXJfY2hyZGV2X3JlZ2lvbihNS0RFVihUVFlBVVhfTUFKT1IsIDIpLCAxLCAiL2Rldi9wdG14IikgPCAwKQotCQlwYW5pYygiQ291bGRuJ3QgcmVnaXN0ZXIgL2Rldi9wdG14IGRyaXZlclxuIik7Ci0JZGV2aWNlX2NyZWF0ZV9kcnZkYXRhKHR0eV9jbGFzcywgTlVMTCwgTUtERVYoVFRZQVVYX01BSk9SLCAyKSwgTlVMTCwgInB0bXgiKTsKLSNlbmRpZgotCiAjaWZkZWYgQ09ORklHX1ZUCi0JY2Rldl9pbml0KCZ2YzBfY2RldiwgJmNvbnNvbGVfZm9wcyk7Ci0JaWYgKGNkZXZfYWRkKCZ2YzBfY2RldiwgTUtERVYoVFRZX01BSk9SLCAwKSwgMSkgfHwKLQkgICAgcmVnaXN0ZXJfY2hyZGV2X3JlZ2lvbihNS0RFVihUVFlfTUFKT1IsIDApLCAxLCAiL2Rldi92Yy8wIikgPCAwKQotCQlwYW5pYygiQ291bGRuJ3QgcmVnaXN0ZXIgL2Rldi90dHkwIGRyaXZlclxuIik7Ci0JZGV2aWNlX2NyZWF0ZV9kcnZkYXRhKHR0eV9jbGFzcywgTlVMTCwgTUtERVYoVFRZX01BSk9SLCAwKSwgTlVMTCwgInR0eTAiKTsKLQotCXZ0eV9pbml0KCk7CisJdnR5X2luaXQoJmNvbnNvbGVfZm9wcyk7CiAjZW5kaWYKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci90dHlfaW9jdGwuYyBiL2RyaXZlcnMvY2hhci90dHlfaW9jdGwuYwppbmRleCBiZjM0ZTQ1Li5hNDA4YzhlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvdHR5X2lvY3RsLmMKKysrIGIvZHJpdmVycy9jaGFyL3R0eV9pb2N0bC5jCkBAIC00MCw2ICs0MCwxNSBAQAogI2RlZmluZSBURVJNSU9TX09MRAk4CiAKIAorLyoqCisgKgl0dHlfY2hhcnNfaW5fYnVmZmVyCS0JY2hhcmFjdGVycyBwZW5kaW5nCisgKglAdHR5OiB0ZXJtaW5hbAorICoKKyAqCVJldHVybiB0aGUgbnVtYmVyIG9mIGJ5dGVzIG9mIGRhdGEgaW4gdGhlIGRldmljZSBwcml2YXRlCisgKglvdXRwdXQgcXVldWUuIElmIG5vIHByaXZhdGUgbWV0aG9kIGlzIHN1cHBsaWVkIHRoZXJlIGlzIGFzc3VtZWQKKyAqCXRvIGJlIG5vIHF1ZXVlIG9uIHRoZSBkZXZpY2UuCisgKi8KKwogaW50IHR0eV9jaGFyc19pbl9idWZmZXIoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKIHsKIAlpZiAodHR5LT5vcHMtPmNoYXJzX2luX2J1ZmZlcikKQEAgLTQ3LDI2ICs1Niw0OSBAQAogCWVsc2UKIAkJcmV0dXJuIDA7CiB9Ci0KIEVYUE9SVF9TWU1CT0wodHR5X2NoYXJzX2luX2J1ZmZlcik7CiAKKy8qKgorICoJdHR5X3dyaXRlX3Jvb20JCS0Jd3JpdGUgcXVldWUgc3BhY2UKKyAqCUB0dHk6IHRlcm1pbmFsCisgKgorICoJUmV0dXJuIHRoZSBudW1iZXIgb2YgYnl0ZXMgdGhhdCBjYW4gYmUgcXVldWVkIHRvIHRoaXMgZGV2aWNlCisgKglhdCB0aGUgcHJlc2VudCB0aW1lLiBUaGUgcmVzdWx0IHNob3VsZCBiZSB0cmVhdGVkIGFzIGEgZ3VhcmFudGVlCisgKglhbmQgdGhlIGRyaXZlciBjYW5ub3Qgb2ZmZXIgYSB2YWx1ZSBpdCBsYXRlciBzaHJpbmtzIGJ5IG1vcmUgdGhhbgorICoJdGhlIG51bWJlciBvZiBieXRlcyB3cml0dGVuLiBJZiBubyBtZXRob2QgaXMgcHJvdmlkZWQgMksgaXMgYWx3YXlzCisgKglyZXR1cm5lZCBhbmQgZGF0YSBtYXkgYmUgbG9zdCBhcyB0aGVyZSB3aWxsIGJlIG5vIGZsb3cgY29udHJvbC4KKyAqLworIAogaW50IHR0eV93cml0ZV9yb29tKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCiB7CiAJaWYgKHR0eS0+b3BzLT53cml0ZV9yb29tKQogCQlyZXR1cm4gdHR5LT5vcHMtPndyaXRlX3Jvb20odHR5KTsKIAlyZXR1cm4gMjA0ODsKIH0KLQogRVhQT1JUX1NZTUJPTCh0dHlfd3JpdGVfcm9vbSk7CiAKKy8qKgorICoJdHR5X2RyaXZlcl9mbHVzaF9idWZmZXIJLQlkaXNjYXJkIGludGVybmFsIGJ1ZmZlcgorICoJQHR0eTogdGVybWluYWwKKyAqCisgKglEaXNjYXJkIHRoZSBpbnRlcm5hbCBvdXRwdXQgYnVmZmVyIGZvciB0aGlzIGRldmljZS4gSWYgbm8gbWV0aG9kCisgKglpcyBwcm92aWRlZCB0aGVuIGVpdGhlciB0aGUgYnVmZmVyIGNhbm5vdCBiZSBoYXJkd2FyZSBmbHVzaGVkIG9yCisgKgl0aGVyZSBpcyBubyBidWZmZXIgZHJpdmVyIHNpZGUuCisgKi8KIHZvaWQgdHR5X2RyaXZlcl9mbHVzaF9idWZmZXIoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKIHsKIAlpZiAodHR5LT5vcHMtPmZsdXNoX2J1ZmZlcikKIAkJdHR5LT5vcHMtPmZsdXNoX2J1ZmZlcih0dHkpOwogfQotCiBFWFBPUlRfU1lNQk9MKHR0eV9kcml2ZXJfZmx1c2hfYnVmZmVyKTsKIAorLyoqCisgKgl0dHlfdGhyb3R0bGUJCS0JZmxvdyBjb250cm9sCisgKglAdHR5OiB0ZXJtaW5hbAorICoKKyAqCUluZGljYXRlIHRoYXQgYSB0dHkgc2hvdWxkIHN0b3AgdHJhbnNtaXR0aW5nIGRhdGEgZG93biB0aGUgc3RhY2suCisgKi8KKwogdm9pZCB0dHlfdGhyb3R0bGUoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKIHsKIAkvKiBjaGVjayBUVFlfVEhST1RUTEVEIGZpcnN0IHNvIGl0IGluZGljYXRlcyBvdXIgc3RhdGUgKi8KQEAgLTc2LDYgKzEwOCwxMyBAQAogfQogRVhQT1JUX1NZTUJPTCh0dHlfdGhyb3R0bGUpOwogCisvKioKKyAqCXR0eV91bnRocm90dGxlCQktCWZsb3cgY29udHJvbAorICoJQHR0eTogdGVybWluYWwKKyAqCisgKglJbmRpY2F0ZSB0aGF0IGEgdHR5IG1heSBjb250aW51ZSB0cmFuc21pdHRpbmcgZGF0YSBkb3duIHRoZSBzdGFjay4KKyAqLworCiB2b2lkIHR0eV91bnRocm90dGxlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCiB7CiAJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChUVFlfVEhST1RUTEVELCAmdHR5LT5mbGFncykgJiYKQEAgLTExMiw2ICsxNTEsMTEgQEAKIH0KIEVYUE9SVF9TWU1CT0wodHR5X3dhaXRfdW50aWxfc2VudCk7CiAKKworLyoKKyAqCQlUZXJtaW9zIEhlbHBlciBNZXRob2RzCisgKi8KKwogc3RhdGljIHZvaWQgdW5zZXRfbG9ja2VkX3Rlcm1pb3Moc3RydWN0IGt0ZXJtaW9zICp0ZXJtaW9zLAogCQkJCSBzdHJ1Y3Qga3Rlcm1pb3MgKm9sZCwKIAkJCQkgc3RydWN0IGt0ZXJtaW9zICpsb2NrZWQpCkBAIC0zNDYsNiArMzkwLDE2IEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTCh0dHlfdGVybWlvc19lbmNvZGVfYmF1ZF9yYXRlKTsKIAorLyoqCisgKgl0dHlfZW5jb2RlX2JhdWRfcmF0ZQkJLQlzZXQgYmF1ZCByYXRlIG9mIHRoZSB0dHkKKyAqCUBpYmF1ZDogaW5wdXQgYmF1ZCByYXRlCisgKglAb2JhZDogb3V0cHV0IGJhdWQgcmF0ZQorICoKKyAqCVVwZGF0ZSB0aGUgY3VycmVudCB0ZXJtaW9zIGRhdGEgZm9yIHRoZSB0dHkgd2l0aCB0aGUgbmV3IHNwZWVkCisgKglzZXR0aW5ncy4gVGhlIGNhbGxlciBtdXN0IGhvbGQgdGhlIHRlcm1pb3NfbXV0ZXggZm9yIHRoZSB0dHkgaW4KKyAqCXF1ZXN0aW9uLgorICovCisKIHZvaWQgdHR5X2VuY29kZV9iYXVkX3JhdGUoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3BlZWRfdCBpYmF1ZCwgc3BlZWRfdCBvYmF1ZCkKIHsKIAl0dHlfdGVybWlvc19lbmNvZGVfYmF1ZF9yYXRlKHR0eS0+dGVybWlvcywgaWJhdWQsIG9iYXVkKTsKQEAgLTQzMCwxMiArNDg0LDExIEBACiAgKglpcyBhIGJpdCBvZiBsYXllcmluZyB2aW9sYXRpb24gaGVyZSB3aXRoIG5fdHR5IGluIHRlcm1zIG9mIHRoZQogICoJaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoaXMgZnVuY3Rpb24uCiAgKgotICoJTG9ja2luZzogdGVybWlvc19zZW0KKyAqCUxvY2tpbmc6IHRlcm1pb3NfbXV0ZXgKICAqLwogCiBzdGF0aWMgdm9pZCBjaGFuZ2VfdGVybWlvcyhzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3Qga3Rlcm1pb3MgKm5ld190ZXJtaW9zKQogewotCWludCBjYW5vbl9jaGFuZ2U7CiAJc3RydWN0IGt0ZXJtaW9zIG9sZF90ZXJtaW9zOwogCXN0cnVjdCB0dHlfbGRpc2MgKmxkOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CkBAIC00NTEsMTggKzUwNCw2IEBACiAJb2xkX3Rlcm1pb3MgPSAqdHR5LT50ZXJtaW9zOwogCSp0dHktPnRlcm1pb3MgPSAqbmV3X3Rlcm1pb3M7CiAJdW5zZXRfbG9ja2VkX3Rlcm1pb3ModHR5LT50ZXJtaW9zLCAmb2xkX3Rlcm1pb3MsIHR0eS0+dGVybWlvc19sb2NrZWQpOwotCWNhbm9uX2NoYW5nZSA9IChvbGRfdGVybWlvcy5jX2xmbGFnIF4gdHR5LT50ZXJtaW9zLT5jX2xmbGFnKSAmIElDQU5PTjsKLQlpZiAoY2Fub25fY2hhbmdlKSB7Ci0JCW1lbXNldCgmdHR5LT5yZWFkX2ZsYWdzLCAwLCBzaXplb2YgdHR5LT5yZWFkX2ZsYWdzKTsKLQkJdHR5LT5jYW5vbl9oZWFkID0gdHR5LT5yZWFkX3RhaWw7Ci0JCXR0eS0+Y2Fub25fZGF0YSA9IDA7Ci0JCXR0eS0+ZXJhc2luZyA9IDA7Ci0JfQotCi0JLyogVGhpcyBiaXQgc2hvdWxkIGJlIGluIHRoZSBsZGlzYyBjb2RlICovCi0JaWYgKGNhbm9uX2NoYW5nZSAmJiAhTF9JQ0FOT04odHR5KSAmJiB0dHktPnJlYWRfY250KQotCQkvKiBHZXQgY2hhcmFjdGVycyBsZWZ0IG92ZXIgZnJvbSBjYW5vbmljYWwgbW9kZS4gKi8KLQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZ0dHktPnJlYWRfd2FpdCk7CiAKIAkvKiBTZWUgaWYgcGFja2V0IG1vZGUgY2hhbmdlIG9mIHN0YXRlLiAqLwogCWlmICh0dHktPmxpbmsgJiYgdHR5LT5saW5rLT5wYWNrZXQpIHsKQEAgLTUwOCw3ICs1NDksNyBAQAogICoJZnVuY3Rpb25zIGJlZm9yZSB1c2luZyBjaGFuZ2VfdGVybWlvcyB0byBkbyB0aGUgYWN0dWFsIGNoYW5nZXMuCiAgKgogICoJTG9ja2luZzoKLSAqCQlDYWxsZWQgZnVuY3Rpb25zIHRha2UgbGRpc2MgYW5kIHRlcm1pb3Nfc2VtIGxvY2tzCisgKgkJQ2FsbGVkIGZ1bmN0aW9ucyB0YWtlIGxkaXNjIGFuZCB0ZXJtaW9zX211dGV4IGxvY2tzCiAgKi8KIAogc3RhdGljIGludCBzZXRfdGVybWlvcyhzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCB2b2lkIF9fdXNlciAqYXJnLCBpbnQgb3B0KQpAQCAtNTc5LDI1ICs2MjAsNTEgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHVuc2lnbmVkIGxvbmcgaW5xX2Nhbm9uKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCi17Ci0JaW50IG5yLCBoZWFkLCB0YWlsOwogCi0JaWYgKCF0dHktPmNhbm9uX2RhdGEgfHwgIXR0eS0+cmVhZF9idWYpCi0JCXJldHVybiAwOwotCWhlYWQgPSB0dHktPmNhbm9uX2hlYWQ7Ci0JdGFpbCA9IHR0eS0+cmVhZF90YWlsOwotCW5yID0gKGhlYWQgLSB0YWlsKSAmIChOX1RUWV9CVUZfU0laRS0xKTsKLQkvKiBTa2lwIEVPRi1jaGFycy4uICovCi0Jd2hpbGUgKGhlYWQgIT0gdGFpbCkgewotCQlpZiAodGVzdF9iaXQodGFpbCwgdHR5LT5yZWFkX2ZsYWdzKSAmJgotCQkgICAgdHR5LT5yZWFkX2J1Zlt0YWlsXSA9PSBfX0RJU0FCTEVEX0NIQVIpCi0JCQluci0tOwotCQl0YWlsID0gKHRhaWwrMSkgJiAoTl9UVFlfQlVGX1NJWkUtMSk7CisjaWZkZWYgVENHRVRYCisKKy8qKgorICoJc2V0X3Rlcm1pb3gJLQlzZXQgdGVybWlveCBmaWVsZHMgaWYgcG9zc2libGUKKyAqCUB0dHk6IHRlcm1pbmFsCisgKglAYXJnOiB0ZXJtaW94IHN0cnVjdHVyZSBmcm9tIHVzZXIKKyAqCUBvcHQ6IG9wdGlvbiBmbGFncyBmb3IgaW9jdGwgdHlwZQorICoKKyAqCUltcGxlbWVudCB0aGUgZGV2aWNlIGNhbGxpbmcgcG9pbnRzIGZvciB0aGUgU1lTNSB0ZXJtaW94IGlvY3RsCisgKglpbnRlcmZhY2UgaW4gTGludXgKKyAqLworCitzdGF0aWMgaW50IHNldF90ZXJtaW94KHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHZvaWQgX191c2VyICphcmcsIGludCBvcHQpCit7CisJc3RydWN0IHRlcm1pb3ggdG5ldzsKKwlzdHJ1Y3QgdHR5X2xkaXNjICpsZDsKKworCWlmICh0dHktPnRlcm1pb3ggPT0gTlVMTCkKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKGNvcHlfZnJvbV91c2VyKCZ0bmV3LCBhcmcsIHNpemVvZihzdHJ1Y3QgdGVybWlveCkpKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCWxkID0gdHR5X2xkaXNjX3JlZih0dHkpOworCWlmIChsZCAhPSBOVUxMKSB7CisJCWlmICgob3B0ICYgVEVSTUlPU19GTFVTSCkgJiYgbGQtPm9wcy0+Zmx1c2hfYnVmZmVyKQorCQkJbGQtPm9wcy0+Zmx1c2hfYnVmZmVyKHR0eSk7CisJCXR0eV9sZGlzY19kZXJlZihsZCk7CiAJfQotCXJldHVybiBucjsKKwlpZiAob3B0ICYgVEVSTUlPU19XQUlUKSB7CisJCXR0eV93YWl0X3VudGlsX3NlbnQodHR5LCAwKTsKKwkJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKQorCQkJcmV0dXJuIC1FSU5UUjsKKwl9CisKKwltdXRleF9sb2NrKCZ0dHktPnRlcm1pb3NfbXV0ZXgpOworCWlmICh0dHktPm9wcy0+c2V0X3Rlcm1pb3gpCisJCXR0eS0+b3BzLT5zZXRfdGVybWlveCh0dHksICZ0bmV3KTsKKwltdXRleF91bmxvY2soJnR0eS0+dGVybWlvc19tdXRleCk7CisJcmV0dXJuIDA7CiB9CiAKKyNlbmRpZgorCisKICNpZmRlZiBUSU9DR0VUUAogLyoKICAqIFRoZXNlIGFyZSBkZXByZWNhdGVkLCBidXQgdGhlcmUgaXMgbGltaXRlZCBzdXBwb3J0Li4KQEAgLTY3MSw3ICs3MzgsNyBAQAogICoJVXBkYXRlcyBhIHRlcm1pbmFsIGZyb20gdGhlIGxlZ2FjeSBCU0Qgc3R5bGUgdGVybWluYWwgaW5mb3JtYXRpb24KICAqCXN0cnVjdHVyZS4KICAqCi0gKglMb2NraW5nOiB0ZXJtaW9zX3NlbQorICoJTG9ja2luZzogdGVybWlvc19tdXRleAogICovCiAKIHN0YXRpYyBpbnQgc2V0X3NndHR5YihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3Qgc2d0dHliIF9fdXNlciAqc2d0dHliKQpAQCAtODQ5LDYgKzkxNiw3IEBACiB7CiAJc3RydWN0IHR0eV9zdHJ1Y3QgKnJlYWxfdHR5OwogCXZvaWQgX191c2VyICpwID0gKHZvaWQgX191c2VyICopYXJnOworCWludCByZXQgPSAwOwogCiAJaWYgKHR0eS0+ZHJpdmVyLT50eXBlID09IFRUWV9EUklWRVJfVFlQRV9QVFkgJiYKIAkgICAgdHR5LT5kcml2ZXItPnN1YnR5cGUgPT0gUFRZX1RZUEVfTUFTVEVSKQpAQCAtODg0LDE4ICs5NTIsMjQgQEAKIAkJcmV0dXJuIHNldF90ZXJtaW9zKHJlYWxfdHR5LCBwLCBURVJNSU9TX09MRCk7CiAjaWZuZGVmIFRDR0VUUzIKIAljYXNlIFRDR0VUUzoKKwkJbXV0ZXhfbG9jaygmcmVhbF90dHktPnRlcm1pb3NfbXV0ZXgpOwogCQlpZiAoa2VybmVsX3Rlcm1pb3NfdG9fdXNlcl90ZXJtaW9zKChzdHJ1Y3QgdGVybWlvcyBfX3VzZXIgKilhcmcsIHJlYWxfdHR5LT50ZXJtaW9zKSkKLQkJCXJldHVybiAtRUZBVUxUOwotCQlyZXR1cm4gMDsKKwkJCXJldCA9IC1FRkFVTFQ7CisJCW11dGV4X3VubG9jaygmcmVhbF90dHktPnRlcm1pb3NfbXV0ZXgpOworCQlyZXR1cm4gcmV0OwogI2Vsc2UKIAljYXNlIFRDR0VUUzoKKwkJbXV0ZXhfbG9jaygmcmVhbF90dHktPnRlcm1pb3NfbXV0ZXgpOwogCQlpZiAoa2VybmVsX3Rlcm1pb3NfdG9fdXNlcl90ZXJtaW9zXzEoKHN0cnVjdCB0ZXJtaW9zIF9fdXNlciAqKWFyZywgcmVhbF90dHktPnRlcm1pb3MpKQotCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCXJldHVybiAwOworCQkJcmV0ID0gLUVGQVVMVDsKKwkJbXV0ZXhfdW5sb2NrKCZyZWFsX3R0eS0+dGVybWlvc19tdXRleCk7CisJCXJldHVybiByZXQ7CiAJY2FzZSBUQ0dFVFMyOgorCQltdXRleF9sb2NrKCZyZWFsX3R0eS0+dGVybWlvc19tdXRleCk7CiAJCWlmIChrZXJuZWxfdGVybWlvc190b191c2VyX3Rlcm1pb3MoKHN0cnVjdCB0ZXJtaW9zMiBfX3VzZXIgKilhcmcsIHJlYWxfdHR5LT50ZXJtaW9zKSkKLQkJCXJldHVybiAtRUZBVUxUOwotCQlyZXR1cm4gMDsKKwkJCXJldCA9IC1FRkFVTFQ7CisJCW11dGV4X3VubG9jaygmcmVhbF90dHktPnRlcm1pb3NfbXV0ZXgpOworCQlyZXR1cm4gcmV0OwogCWNhc2UgVENTRVRTRjI6CiAJCXJldHVybiBzZXRfdGVybWlvcyhyZWFsX3R0eSwgcCwgIFRFUk1JT1NfRkxVU0ggfCBURVJNSU9TX1dBSVQpOwogCWNhc2UgVENTRVRTVzI6CkBAIC05MTMsMzQgKzk4Nyw1OSBAQAogCQlyZXR1cm4gc2V0X3Rlcm1pb3MocmVhbF90dHksIHAsIFRFUk1JT1NfVEVSTUlPKTsKICNpZm5kZWYgVENHRVRTMgogCWNhc2UgVElPQ0dMQ0tUUk1JT1M6CisJCW11dGV4X2xvY2soJnJlYWxfdHR5LT50ZXJtaW9zX211dGV4KTsKIAkJaWYgKGtlcm5lbF90ZXJtaW9zX3RvX3VzZXJfdGVybWlvcygoc3RydWN0IHRlcm1pb3MgX191c2VyICopYXJnLCByZWFsX3R0eS0+dGVybWlvc19sb2NrZWQpKQotCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCXJldHVybiAwOworCQkJcmV0ID0gLUVGQVVMVDsKKwkJbXV0ZXhfdW5sb2NrKCZyZWFsX3R0eS0+dGVybWlvc19tdXRleCk7CisJCXJldHVybiByZXQ7CiAJY2FzZSBUSU9DU0xDS1RSTUlPUzoKIAkJaWYgKCFjYXBhYmxlKENBUF9TWVNfQURNSU4pKQogCQkJcmV0dXJuIC1FUEVSTTsKKwkJbXV0ZXhfbG9jaygmcmVhbF90dHktPnRlcm1pb3NfbXV0ZXgpOwogCQlpZiAodXNlcl90ZXJtaW9zX3RvX2tlcm5lbF90ZXJtaW9zKHJlYWxfdHR5LT50ZXJtaW9zX2xvY2tlZCwKIAkJCQkJICAgICAgIChzdHJ1Y3QgdGVybWlvcyBfX3VzZXIgKikgYXJnKSkKLQkJCXJldHVybiAtRUZBVUxUOwotCQlyZXR1cm4gMDsKKwkJCXJldCA9IC1FRkFVTFQ7CisJCW11dGV4X3VubG9jaygmcmVhbF90dHktPnRlcm1pb3NfbXV0ZXgpOworCQlyZXR1cm4gcmV0OwogI2Vsc2UKIAljYXNlIFRJT0NHTENLVFJNSU9TOgorCQltdXRleF9sb2NrKCZyZWFsX3R0eS0+dGVybWlvc19tdXRleCk7CiAJCWlmIChrZXJuZWxfdGVybWlvc190b191c2VyX3Rlcm1pb3NfMSgoc3RydWN0IHRlcm1pb3MgX191c2VyICopYXJnLCByZWFsX3R0eS0+dGVybWlvc19sb2NrZWQpKQotCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCXJldHVybiAwOworCQkJcmV0ID0gLUVGQVVMVDsKKwkJbXV0ZXhfdW5sb2NrKCZyZWFsX3R0eS0+dGVybWlvc19tdXRleCk7CisJCXJldHVybiByZXQ7CiAJY2FzZSBUSU9DU0xDS1RSTUlPUzoKIAkJaWYgKCFjYXBhYmxlKENBUF9TWVNfQURNSU4pKQotCQkJcmV0dXJuIC1FUEVSTTsKKwkJCXJldCA9IC1FUEVSTTsKKwkJbXV0ZXhfbG9jaygmcmVhbF90dHktPnRlcm1pb3NfbXV0ZXgpOwogCQlpZiAodXNlcl90ZXJtaW9zX3RvX2tlcm5lbF90ZXJtaW9zXzEocmVhbF90dHktPnRlcm1pb3NfbG9ja2VkLAogCQkJCQkgICAgICAgKHN0cnVjdCB0ZXJtaW9zIF9fdXNlciAqKSBhcmcpKQotCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCQlyZXR1cm4gMDsKKwkJCXJldCA9IC1FRkFVTFQ7CisJCW11dGV4X3VubG9jaygmcmVhbF90dHktPnRlcm1pb3NfbXV0ZXgpOworCQlyZXR1cm4gcmV0OwogI2VuZGlmCisjaWZkZWYgVENHRVRYCisJY2FzZSBUQ0dFVFg6CisJCWlmIChyZWFsX3R0eS0+dGVybWlveCA9PSBOVUxMKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCW11dGV4X2xvY2soJnJlYWxfdHR5LT50ZXJtaW9zX211dGV4KTsKKwkJaWYgKGNvcHlfdG9fdXNlcihwLCByZWFsX3R0eS0+dGVybWlveCwgc2l6ZW9mKHN0cnVjdCB0ZXJtaW94KSkpCisJCQlyZXQgPSAtRUZBVUxUOworCQltdXRleF91bmxvY2soJnJlYWxfdHR5LT50ZXJtaW9zX211dGV4KTsKKwkJcmV0dXJuIHJldDsKKwljYXNlIFRDU0VUWDoKKwkJcmV0dXJuIHNldF90ZXJtaW94KHJlYWxfdHR5LCBwLCAwKTsKKwljYXNlIFRDU0VUWFc6CisJCXJldHVybiBzZXRfdGVybWlveChyZWFsX3R0eSwgcCwgVEVSTUlPU19XQUlUKTsKKwljYXNlIFRDU0VUWEY6CisJCXJldHVybiBzZXRfdGVybWlveChyZWFsX3R0eSwgcCwgVEVSTUlPU19GTFVTSCk7CisjZW5kaWYJCQogCWNhc2UgVElPQ0dTT0ZUQ0FSOgotCQkvKiBGSVhNRTogZm9yIGNvcnJlY3RuZXNzIHdlIG1heSBuZWVkIHRvIHRha2UgdGhlIHRlcm1pb3MKLQkJICAgbG9jayBoZXJlIC0gcmV2aWV3ICovCi0JCXJldHVybiBwdXRfdXNlcihDX0NMT0NBTChyZWFsX3R0eSkgPyAxIDogMCwKKwkJbXV0ZXhfbG9jaygmcmVhbF90dHktPnRlcm1pb3NfbXV0ZXgpOworCQlyZXQgPSBwdXRfdXNlcihDX0NMT0NBTChyZWFsX3R0eSkgPyAxIDogMCwKIAkJCQkJCShpbnQgX191c2VyICopYXJnKTsKKwkJbXV0ZXhfdW5sb2NrKCZyZWFsX3R0eS0+dGVybWlvc19tdXRleCk7CisJCXJldHVybiByZXQ7CiAJY2FzZSBUSU9DU1NPRlRDQVI6CiAJCWlmIChnZXRfdXNlcihhcmcsICh1bnNpZ25lZCBpbnQgX191c2VyICopIGFyZykpCiAJCQlyZXR1cm4gLUVGQVVMVDsKQEAgLTk4MCw3ICsxMDc5LDcgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHR0eV9wZXJmb3JtX2ZsdXNoKTsKIAotaW50IG5fdHR5X2lvY3RsKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICpmaWxlLAoraW50IG5fdHR5X2lvY3RsX2hlbHBlcihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAqZmlsZSwKIAkJICAgICAgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CkBAIC0xMDE4LDEzICsxMTE3LDYgQEAKIAkJcmV0dXJuIDA7CiAJY2FzZSBUQ0ZMU0g6CiAJCXJldHVybiB0dHlfcGVyZm9ybV9mbHVzaCh0dHksIGFyZyk7Ci0JY2FzZSBUSU9DT1VUUToKLQkJcmV0dXJuIHB1dF91c2VyKHR0eV9jaGFyc19pbl9idWZmZXIodHR5KSwgKGludCBfX3VzZXIgKikgYXJnKTsKLQljYXNlIFRJT0NJTlE6Ci0JCXJldHZhbCA9IHR0eS0+cmVhZF9jbnQ7Ci0JCWlmIChMX0lDQU5PTih0dHkpKQotCQkJcmV0dmFsID0gaW5xX2Nhbm9uKHR0eSk7Ci0JCXJldHVybiBwdXRfdXNlcihyZXR2YWwsICh1bnNpZ25lZCBpbnQgX191c2VyICopIGFyZyk7CiAJY2FzZSBUSU9DUEtUOgogCXsKIAkJaW50IHBrdG1vZGU7CkBAIC0xMDUwLDQgKzExNDIsNCBAQAogCQlyZXR1cm4gdHR5X21vZGVfaW9jdGwodHR5LCBmaWxlLCBjbWQsIGFyZyk7CiAJfQogfQotRVhQT1JUX1NZTUJPTChuX3R0eV9pb2N0bCk7CitFWFBPUlRfU1lNQk9MKG5fdHR5X2lvY3RsX2hlbHBlcik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvdHR5X3BvcnQuYyBiL2RyaXZlcnMvY2hhci90dHlfcG9ydC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU1M2IwZTkKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2NoYXIvdHR5X3BvcnQuYwpAQCAtMCwwICsxLDk2IEBACisvKgorICogVHR5IHBvcnQgZnVuY3Rpb25zCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC90dHkuaD4KKyNpbmNsdWRlIDxsaW51eC90dHlfZHJpdmVyLmg+CisjaW5jbHVkZSA8bGludXgvdHR5X2ZsaXAuaD4KKyNpbmNsdWRlIDxsaW51eC90aW1lci5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC93YWl0Lmg+CisjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKwordm9pZCB0dHlfcG9ydF9pbml0KHN0cnVjdCB0dHlfcG9ydCAqcG9ydCkKK3sKKwltZW1zZXQocG9ydCwgMCwgc2l6ZW9mKCpwb3J0KSk7CisJaW5pdF93YWl0cXVldWVfaGVhZCgmcG9ydC0+b3Blbl93YWl0KTsKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZwb3J0LT5jbG9zZV93YWl0KTsKKwltdXRleF9pbml0KCZwb3J0LT5tdXRleCk7CisJc3Bpbl9sb2NrX2luaXQoJnBvcnQtPmxvY2spOworCXBvcnQtPmNsb3NlX2RlbGF5ID0gKDUwICogSFopIC8gMTAwOworCXBvcnQtPmNsb3Npbmdfd2FpdCA9ICgzMDAwICogSFopIC8gMTAwOworfQorRVhQT1JUX1NZTUJPTCh0dHlfcG9ydF9pbml0KTsKKworaW50IHR0eV9wb3J0X2FsbG9jX3htaXRfYnVmKHN0cnVjdCB0dHlfcG9ydCAqcG9ydCkKK3sKKwkvKiBXZSBtYXkgc2xlZXAgaW4gZ2V0X3plcm9lZF9wYWdlKCkgKi8KKwltdXRleF9sb2NrKCZwb3J0LT5tdXRleCk7CisJaWYgKHBvcnQtPnhtaXRfYnVmID09IE5VTEwpCisJCXBvcnQtPnhtaXRfYnVmID0gKHVuc2lnbmVkIGNoYXIgKilnZXRfemVyb2VkX3BhZ2UoR0ZQX0tFUk5FTCk7CisJbXV0ZXhfdW5sb2NrKCZwb3J0LT5tdXRleCk7CisJaWYgKHBvcnQtPnhtaXRfYnVmID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTCh0dHlfcG9ydF9hbGxvY194bWl0X2J1Zik7CisKK3ZvaWQgdHR5X3BvcnRfZnJlZV94bWl0X2J1ZihzdHJ1Y3QgdHR5X3BvcnQgKnBvcnQpCit7CisJbXV0ZXhfbG9jaygmcG9ydC0+bXV0ZXgpOworCWlmIChwb3J0LT54bWl0X2J1ZiAhPSBOVUxMKSB7CisJCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZylwb3J0LT54bWl0X2J1Zik7CisJCXBvcnQtPnhtaXRfYnVmID0gTlVMTDsKKwl9CisJbXV0ZXhfdW5sb2NrKCZwb3J0LT5tdXRleCk7Cit9CitFWFBPUlRfU1lNQk9MKHR0eV9wb3J0X2ZyZWVfeG1pdF9idWYpOworCisKKy8qKgorICoJdHR5X3BvcnRfdHR5X2dldAktCWdldCBhIHR0eSByZWZlcmVuY2UKKyAqCUBwb3J0OiB0dHkgcG9ydAorICoKKyAqCVJldHVybiBhIHJlZmNvdW50IHByb3RlY3RlZCB0dHkgaW5zdGFuY2Ugb3IgTlVMTCBpZiB0aGUgcG9ydCBpcyBub3QKKyAqCWFzc29jaWF0ZWQgd2l0aCBhIHR0eSAoZWcgZHVlIHRvIGNsb3NlIG9yIGhhbmd1cCkKKyAqLworCitzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5X3BvcnRfdHR5X2dldChzdHJ1Y3QgdHR5X3BvcnQgKnBvcnQpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5OworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnBvcnQtPmxvY2ssIGZsYWdzKTsKKwl0dHkgPSB0dHlfa3JlZl9nZXQocG9ydC0+dHR5KTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwb3J0LT5sb2NrLCBmbGFncyk7CisJcmV0dXJuIHR0eTsKK30KK0VYUE9SVF9TWU1CT0wodHR5X3BvcnRfdHR5X2dldCk7CisKKy8qKgorICoJdHR5X3BvcnRfdHR5X3NldAktCXNldCB0aGUgdHR5IG9mIGEgcG9ydAorICoJQHBvcnQ6IHR0eSBwb3J0CisgKglAdHR5OiB0aGUgdHR5CisgKgorICoJQXNzb2NpYXRlIHRoZSBwb3J0IGFuZCB0dHkgcGFpci4gTWFuYWdlcyBhbnkgaW50ZXJuYWwgcmVmY291bnRzLgorICoJUGFzcyBOVUxMIHRvIGRlYXNzb2NpYXRlIGEgcG9ydAorICovCisKK3ZvaWQgdHR5X3BvcnRfdHR5X3NldChzdHJ1Y3QgdHR5X3BvcnQgKnBvcnQsIHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZwb3J0LT5sb2NrLCBmbGFncyk7CisJaWYgKHBvcnQtPnR0eSkKKwkJdHR5X2tyZWZfcHV0KHBvcnQtPnR0eSk7CisJcG9ydC0+dHR5ID0gdHR5OworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBvcnQtPmxvY2ssIGZsYWdzKTsKK30KK0VYUE9SVF9TWU1CT0wodHR5X3BvcnRfdHR5X3NldCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvdmNfc2NyZWVuLmMgYi9kcml2ZXJzL2NoYXIvdmNfc2NyZWVuLmMKaW5kZXggYzJhZTUyZC4uNGYzYjNmOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3ZjX3NjcmVlbi5jCisrKyBiL2RyaXZlcnMvY2hhci92Y19zY3JlZW4uYwpAQCAtNDgxLDEwICs0ODEsMTAgQEAKIAogdm9pZCB2Y3NfbWFrZV9zeXNmcyhzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQogewotCWRldmljZV9jcmVhdGVfZHJ2ZGF0YSh2Y19jbGFzcywgTlVMTCwgTUtERVYoVkNTX01BSk9SLCB0dHktPmluZGV4ICsgMSksCi0JCQkgICAgICBOVUxMLCAidmNzJXUiLCB0dHktPmluZGV4ICsgMSk7Ci0JZGV2aWNlX2NyZWF0ZV9kcnZkYXRhKHZjX2NsYXNzLCBOVUxMLCBNS0RFVihWQ1NfTUFKT1IsIHR0eS0+aW5kZXggKyAxMjkpLAotCQkJICAgICAgTlVMTCwgInZjc2EldSIsIHR0eS0+aW5kZXggKyAxKTsKKwlkZXZpY2VfY3JlYXRlKHZjX2NsYXNzLCBOVUxMLCBNS0RFVihWQ1NfTUFKT1IsIHR0eS0+aW5kZXggKyAxKSwgTlVMTCwKKwkJICAgICAgInZjcyV1IiwgdHR5LT5pbmRleCArIDEpOworCWRldmljZV9jcmVhdGUodmNfY2xhc3MsIE5VTEwsIE1LREVWKFZDU19NQUpPUiwgdHR5LT5pbmRleCArIDEyOSksIE5VTEwsCisJCSAgICAgICJ2Y3NhJXUiLCB0dHktPmluZGV4ICsgMSk7CiB9CiAKIHZvaWQgdmNzX3JlbW92ZV9zeXNmcyhzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQpAQCAtNDk5LDcgKzQ5OSw3IEBACiAJCXBhbmljKCJ1bmFibGUgdG8gZ2V0IG1ham9yICVkIGZvciB2Y3MgZGV2aWNlIiwgVkNTX01BSk9SKTsKIAl2Y19jbGFzcyA9IGNsYXNzX2NyZWF0ZShUSElTX01PRFVMRSwgInZjIik7CiAKLQlkZXZpY2VfY3JlYXRlX2RydmRhdGEodmNfY2xhc3MsIE5VTEwsIE1LREVWKFZDU19NQUpPUiwgMCksIE5VTEwsICJ2Y3MiKTsKLQlkZXZpY2VfY3JlYXRlX2RydmRhdGEodmNfY2xhc3MsIE5VTEwsIE1LREVWKFZDU19NQUpPUiwgMTI4KSwgTlVMTCwgInZjc2EiKTsKKwlkZXZpY2VfY3JlYXRlKHZjX2NsYXNzLCBOVUxMLCBNS0RFVihWQ1NfTUFKT1IsIDApLCBOVUxMLCAidmNzIik7CisJZGV2aWNlX2NyZWF0ZSh2Y19jbGFzcywgTlVMTCwgTUtERVYoVkNTX01BSk9SLCAxMjgpLCBOVUxMLCAidmNzYSIpOwogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3Zpb3RhcGUuYyBiL2RyaXZlcnMvY2hhci92aW90YXBlLmMKaW5kZXggN2E3MGE0MC4uZmZjOTI1NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3Zpb3RhcGUuYworKysgYi9kcml2ZXJzL2NoYXIvdmlvdGFwZS5jCkBAIC04ODYsMTAgKzg4NiwxMCBAQAogCXN0YXRlW2ldLmN1cl9wYXJ0ID0gMDsKIAlmb3IgKGogPSAwOyBqIDwgTUFYX1BBUlRJVElPTlM7ICsraikKIAkJc3RhdGVbaV0ucGFydF9zdGF0X3J3aVtqXSA9IFZJT1RfSURMRTsKLQlkZXZpY2VfY3JlYXRlX2RydmRhdGEodGFwZV9jbGFzcywgTlVMTCwgTUtERVYoVklPVEFQRV9NQUpPUiwgaSksCi0JCQkgICAgICBOVUxMLCAiaXNlcmllcyF2dCVkIiwgaSk7Ci0JZGV2aWNlX2NyZWF0ZV9kcnZkYXRhKHRhcGVfY2xhc3MsIE5VTEwsIE1LREVWKFZJT1RBUEVfTUFKT1IsIGkgfCAweDgwKSwKLQkJCSAgICAgIE5VTEwsICJpc2VyaWVzIW52dCVkIiwgaSk7CisJZGV2aWNlX2NyZWF0ZSh0YXBlX2NsYXNzLCBOVUxMLCBNS0RFVihWSU9UQVBFX01BSk9SLCBpKSwgTlVMTCwKKwkJICAgICAgImlzZXJpZXMhdnQlZCIsIGkpOworCWRldmljZV9jcmVhdGUodGFwZV9jbGFzcywgTlVMTCwgTUtERVYoVklPVEFQRV9NQUpPUiwgaSB8IDB4ODApLCBOVUxMLAorCQkgICAgICAiaXNlcmllcyFudnQlZCIsIGkpOwogCXByaW50ayhWSU9UQVBFX0tFUk5fSU5GTyAidGFwZSBpc2VyaWVzL3Z0JWQgaXMgaVNlcmllcyAiCiAJCQkicmVzb3VyY2UgJTEwLjEwcyB0eXBlICU0LjRzLCBtb2RlbCAlMy4zc1xuIiwKIAkJCWksIHZpb3RhcGVfdW5pdGluZm9baV0ucnNyY25hbWUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvdnI0MXh4X2dpdS5jIGIvZHJpdmVycy9jaGFyL3ZyNDF4eF9naXUuYwppbmRleCBmZmU5YjRlLi41NGM4MzcyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvdnI0MXh4X2dpdS5jCisrKyBiL2RyaXZlcnMvY2hhci92cjQxeHhfZ2l1LmMKQEAgLTY0MSw3ICs2NDEsNyBAQAogCX0KIAogCWlycSA9IHBsYXRmb3JtX2dldF9pcnEoZGV2LCAwKTsKLQlpZiAoaXJxIDwgMCB8fCBpcnEgPj0gTlJfSVJRUykKKwlpZiAoaXJxIDwgMCB8fCBpcnEgPj0gbnJfaXJxcykKIAkJcmV0dXJuIC1FQlVTWTsKIAogCXJldHVybiBjYXNjYWRlX2lycShpcnEsIGdpdV9nZXRfaXJxKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci92dC5jIGIvZHJpdmVycy9jaGFyL3Z0LmMKaW5kZXggNjAzNTljMy4uZDhmODNlMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3Z0LmMKKysrIGIvZHJpdmVycy9jaGFyL3Z0LmMKQEAgLTU5LDcgKzU5LDcgQEAKICAqIGJ5IE1hcnRpbiBNYXJlcyA8bWpAYXRyZXkua2FybGluLm1mZi5jdW5pLmN6PiwgSnVseSAxOTk4CiAgKgogICogUmVtb3ZlZCBvbGQtc3R5bGUgdGltZXJzLCBpbnRyb2R1Y2VkIGNvbnNvbGVfdGltZXIsIG1hZGUgdGltZXIKLSAqIGRlbGV0aW9uIFNNUC1zYWZlLiAgMTdKdW4wMCwgQW5kcmV3IE1vcnRvbiA8YW5kcmV3bUB1b3cuZWR1LmF1PgorICogZGVsZXRpb24gU01QLXNhZmUuICAxN0p1bjAwLCBBbmRyZXcgTW9ydG9uCiAgKgogICogUmVtb3ZlZCBjb25zb2xlX2xvY2ssIGVuYWJsZWQgaW50ZXJydXB0cyBhY3Jvc3MgYWxsIGNvbnNvbGUgb3BlcmF0aW9ucwogICogMTMgTWFyY2ggMjAwMSwgQW5kcmV3IE1vcnRvbgpAQCAtMTAwLDEwICsxMDAsMTAgQEAKICNpbmNsdWRlIDxsaW51eC9mb250Lmg+CiAjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CiAjaW5jbHVkZSA8bGludXgvbm90aWZpZXIuaD4KLQotI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgotI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CisjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgogCiAjZGVmaW5lIE1BWF9OUl9DT05fRFJJVkVSIDE2CiAKQEAgLTMwMSw3ICszMDEsNyBAQAogCWQgPSAodW5zaWduZWQgc2hvcnQgKikodmMtPnZjX29yaWdpbiArIHZjLT52Y19zaXplX3JvdyAqIHQpOwogCXMgPSAodW5zaWduZWQgc2hvcnQgKikodmMtPnZjX29yaWdpbiArIHZjLT52Y19zaXplX3JvdyAqICh0ICsgbnIpKTsKIAlzY3JfbWVtbW92ZXcoZCwgcywgKGIgLSB0IC0gbnIpICogdmMtPnZjX3NpemVfcm93KTsKLQlzY3JfbWVtc2V0dyhkICsgKGIgLSB0IC0gbnIpICogdmMtPnZjX2NvbHMsIHZjLT52Y19zY3JsX2VyYXNlX2NoYXIsCisJc2NyX21lbXNldHcoZCArIChiIC0gdCAtIG5yKSAqIHZjLT52Y19jb2xzLCB2Yy0+dmNfdmlkZW9fZXJhc2VfY2hhciwKIAkJICAgIHZjLT52Y19zaXplX3JvdyAqIG5yKTsKIH0KIApAQCAtMzE5LDcgKzMxOSw3IEBACiAJcyA9ICh1bnNpZ25lZCBzaG9ydCAqKSh2Yy0+dmNfb3JpZ2luICsgdmMtPnZjX3NpemVfcm93ICogdCk7CiAJc3RlcCA9IHZjLT52Y19jb2xzICogbnI7CiAJc2NyX21lbW1vdmV3KHMgKyBzdGVwLCBzLCAoYiAtIHQgLSBucikgKiB2Yy0+dmNfc2l6ZV9yb3cpOwotCXNjcl9tZW1zZXR3KHMsIHZjLT52Y19zY3JsX2VyYXNlX2NoYXIsIDIgKiBzdGVwKTsKKwlzY3JfbWVtc2V0dyhzLCB2Yy0+dmNfdmlkZW9fZXJhc2VfY2hhciwgMiAqIHN0ZXApOwogfQogCiBzdGF0aWMgdm9pZCBkb191cGRhdGVfcmVnaW9uKHN0cnVjdCB2Y19kYXRhICp2YywgdW5zaWduZWQgbG9uZyBzdGFydCwgaW50IGNvdW50KQpAQCAtNDM0LDcgKzQzNCw2IEBACiAJICAgICAgICAgICAgICB2Yy0+dmNfYmxpbmssIHZjLT52Y191bmRlcmxpbmUsCiAJICAgICAgICAgICAgICB2Yy0+dmNfcmV2ZXJzZSBeIHZjLT52Y19kZWNzY25tLCB2Yy0+dmNfaXRhbGljKTsKIAl2Yy0+dmNfdmlkZW9fZXJhc2VfY2hhciA9IChidWlsZF9hdHRyKHZjLCB2Yy0+dmNfY29sb3IsIDEsIHZjLT52Y19ibGluaywgMCwgdmMtPnZjX2RlY3Njbm0sIDApIDw8IDgpIHwgJyAnOwotCXZjLT52Y19zY3JsX2VyYXNlX2NoYXIgPSAoYnVpbGRfYXR0cih2YywgdmMtPnZjX2RlZl9jb2xvciwgMSwgZmFsc2UsIGZhbHNlLCB2Yy0+dmNfZGVjc2NubSwgZmFsc2UpIDw8IDgpIHwgJyAnOwogfQogCiAvKiBOb3RlOiBpbnZlcnRpbmcgdGhlIHNjcmVlbiB0d2ljZSBzaG91bGQgcmV2ZXJ0IHRvIHRoZSBvcmlnaW5hbCBzdGF0ZSAqLwpAQCAtMjEzNiwyNyArMjEzNSw5IEBACiAJICAgIHJlbGVhc2VfY29uc29sZV9zZW0oKTsKIAkgICAgcmV0dXJuIDA7CiAJfQotCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKLQogCW9yaWdfYnVmID0gYnVmOwogCW9yaWdfY291bnQgPSBjb3VudDsKIAotCS8qIEF0IHRoaXMgcG9pbnQgJ2J1ZicgaXMgZ3VhcmFudGVlZCB0byBiZSBhIGtlcm5lbCBidWZmZXIKLQkgKiBhbmQgdGhlcmVmb3JlIG5vIGFjY2VzcyB0byB1c2Vyc3BhY2UgKGFuZCB0aGVyZWZvcmUgc2xlZXBpbmcpCi0JICogd2lsbCBiZSBuZWVkZWQuICBUaGUgY29uX2J1Zl9tdHggc2VyaWFsaXplcyBhbGwgdHR5IGJhc2VkCi0JICogY29uc29sZSByZW5kZXJpbmcgYW5kIHZjcyB3cml0ZS9yZWFkIG9wZXJhdGlvbnMuICBXZSBob2xkCi0JICogdGhlIGNvbnNvbGUgc3BpbmxvY2sgZHVyaW5nIHRoZSBlbnRpcmUgd3JpdGUuCi0JICovCi0KLQlhY3F1aXJlX2NvbnNvbGVfc2VtKCk7Ci0KLQl2YyA9IHR0eS0+ZHJpdmVyX2RhdGE7Ci0JaWYgKHZjID09IE5VTEwpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJ2dDogYXJnaCwgZHJpdmVyX2RhdGEgX2JlY2FtZV8gTlVMTCAhXG4iKTsKLQkJcmVsZWFzZV9jb25zb2xlX3NlbSgpOwotCQlnb3RvIG91dDsKLQl9Ci0KIAloaW1hc2sgPSB2Yy0+dmNfaGlfZm9udF9tYXNrOwogCWNoYXJtYXNrID0gaGltYXNrID8gMHgxZmYgOiAweGZmOwogCkBAIC0yMzcwLDggKzIzNTEsNiBAQAogCUZMVVNICiAJY29uc29sZV9jb25kaXRpb25hbF9zY2hlZHVsZSgpOwogCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKLQotb3V0OgogCW5vdGlmeV91cGRhdGUodmMpOwogCXJldHVybiBuOwogI3VuZGVmIEZMVVNICkBAIC0yNTgzLDggKzI1NjIsNiBAQAogCWludCBsaW5lczsKIAlpbnQgcmV0OwogCi0JaWYgKHR0eS0+ZHJpdmVyLT50eXBlICE9IFRUWV9EUklWRVJfVFlQRV9DT05TT0xFKQotCQlyZXR1cm4gLUVJTlZBTDsKIAlpZiAoY3VycmVudC0+c2lnbmFsLT50dHkgIT0gdHR5ICYmICFjYXBhYmxlKENBUF9TWVNfQURNSU4pKQogCQlyZXR1cm4gLUVQRVJNOwogCWlmIChnZXRfdXNlcih0eXBlLCBwKSkKQEAgLTI3NzgsNiArMjc1NSwxMiBAQAogCQlyZXQgPSB2Y19hbGxvY2F0ZShjdXJyY29ucyk7CiAJCWlmIChyZXQgPT0gMCkgewogCQkJc3RydWN0IHZjX2RhdGEgKnZjID0gdmNfY29uc1tjdXJyY29uc10uZDsKKworCQkJLyogU3RpbGwgYmVpbmcgZnJlZWQgKi8KKwkJCWlmICh2Yy0+dmNfdHR5KSB7CisJCQkJcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCQkJCXJldHVybiAtRVJFU1RBUlRTWVM7CisJCQl9CiAJCQl0dHktPmRyaXZlcl9kYXRhID0gdmM7CiAJCQl2Yy0+dmNfdHR5ID0gdHR5OwogCkBAIC0yNzk4LDM0ICsyNzgxLDIwIEBACiAJcmV0dXJuIHJldDsKIH0KIAotLyoKLSAqIFdlIHRha2UgdHR5X211dGV4IGluIGhlcmUgdG8gcHJldmVudCBhbm90aGVyIHRocmVhZCBmcm9tIGNvbWluZyBpbiB2aWEgaW5pdF9kZXYKLSAqIGFuZCB0YWtpbmcgYSByZWYgYWdhaW5zdCB0aGUgdHR5IHdoaWxlIHdlJ3JlIGluIHRoZSBwcm9jZXNzIG9mIGZvcmdldHRpbmcKLSAqIGFib3V0IGl0IGFuZCBjbGVhbmluZyB0aGluZ3MgdXAuCi0gKgotICogVGhpcyBpcyBiZWNhdXNlIHZjc19yZW1vdmVfc3lzZnMoKSBjYW4gc2xlZXAgYW5kIHdpbGwgZHJvcCB0aGUgQktMLgotICovCiBzdGF0aWMgdm9pZCBjb25fY2xvc2Uoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKmZpbHApCiB7Ci0JbXV0ZXhfbG9jaygmdHR5X211dGV4KTsKLQlhY3F1aXJlX2NvbnNvbGVfc2VtKCk7Ci0JaWYgKHR0eSAmJiB0dHktPmNvdW50ID09IDEpIHsKLQkJc3RydWN0IHZjX2RhdGEgKnZjID0gdHR5LT5kcml2ZXJfZGF0YTsKKwkvKiBOb3RoaW5nIHRvIGRvIC0gd2UgZGVmZXIgdG8gc2h1dGRvd24gKi8KK30KIAotCQlpZiAodmMpCi0JCQl2Yy0+dmNfdHR5ID0gTlVMTDsKLQkJdHR5LT5kcml2ZXJfZGF0YSA9IE5VTEw7Ci0JCXZjc19yZW1vdmVfc3lzZnModHR5KTsKLQkJcmVsZWFzZV9jb25zb2xlX3NlbSgpOwotCQltdXRleF91bmxvY2soJnR0eV9tdXRleCk7Ci0JCS8qCi0JCSAqIHR0eV9tdXRleCBpcyByZWxlYXNlZCwgYnV0IHdlIHN0aWxsIGhvbGQgQktMLCBzbyB0aGVyZSBpcwotCQkgKiBzdGlsbCBleGNsdXNpb24gYWdhaW5zdCBpbml0X2RldigpCi0JCSAqLwotCQlyZXR1cm47Ci0JfQorc3RhdGljIHZvaWQgY29uX3NodXRkb3duKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCit7CisJc3RydWN0IHZjX2RhdGEgKnZjID0gdHR5LT5kcml2ZXJfZGF0YTsKKwlCVUdfT04odmMgPT0gTlVMTCk7CisJYWNxdWlyZV9jb25zb2xlX3NlbSgpOworCXZjLT52Y190dHkgPSBOVUxMOworCXZjc19yZW1vdmVfc3lzZnModHR5KTsKIAlyZWxlYXNlX2NvbnNvbGVfc2VtKCk7Ci0JbXV0ZXhfdW5sb2NrKCZ0dHlfbXV0ZXgpOworCXR0eV9zaHV0ZG93bih0dHkpOwogfQogCiBzdGF0aWMgaW50IGRlZmF1bHRfaXRhbGljX2NvbG9yICAgID0gMjsgLy8gZ3JlZW4gKEFTQ0lJKQpAQCAtMjk1MCwxMCArMjkxOSwxOSBAQAogCS50aHJvdHRsZSA9IGNvbl90aHJvdHRsZSwKIAkudW50aHJvdHRsZSA9IGNvbl91bnRocm90dGxlLAogCS5yZXNpemUgPSB2dF9yZXNpemUsCisJLnNodXRkb3duID0gY29uX3NodXRkb3duCiB9OwogCi1pbnQgX19pbml0IHZ0eV9pbml0KHZvaWQpCitzdGF0aWMgc3RydWN0IGNkZXYgdmMwX2NkZXY7CisKK2ludCBfX2luaXQgdnR5X2luaXQoY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyAqY29uc29sZV9mb3BzKQogeworCWNkZXZfaW5pdCgmdmMwX2NkZXYsIGNvbnNvbGVfZm9wcyk7CisJaWYgKGNkZXZfYWRkKCZ2YzBfY2RldiwgTUtERVYoVFRZX01BSk9SLCAwKSwgMSkgfHwKKwkgICAgcmVnaXN0ZXJfY2hyZGV2X3JlZ2lvbihNS0RFVihUVFlfTUFKT1IsIDApLCAxLCAiL2Rldi92Yy8wIikgPCAwKQorCQlwYW5pYygiQ291bGRuJ3QgcmVnaXN0ZXIgL2Rldi90dHkwIGRyaXZlclxuIik7CisJZGV2aWNlX2NyZWF0ZSh0dHlfY2xhc3MsIE5VTEwsIE1LREVWKFRUWV9NQUpPUiwgMCksIE5VTEwsICJ0dHkwIik7CisKIAl2Y3NfaW5pdCgpOwogCiAJY29uc29sZV9kcml2ZXIgPSBhbGxvY190dHlfZHJpdmVyKE1BWF9OUl9DT05TT0xFUyk7CkBAIC0yOTcyLDcgKzI5NTAsNiBAQAogCXR0eV9zZXRfb3BlcmF0aW9ucyhjb25zb2xlX2RyaXZlciwgJmNvbl9vcHMpOwogCWlmICh0dHlfcmVnaXN0ZXJfZHJpdmVyKGNvbnNvbGVfZHJpdmVyKSkKIAkJcGFuaWMoIkNvdWxkbid0IHJlZ2lzdGVyIGNvbnNvbGUgZHJpdmVyXG4iKTsKLQogCWtiZF9pbml0KCk7CiAJY29uc29sZV9tYXBfaW5pdCgpOwogI2lmZGVmIENPTkZJR19QUk9NX0NPTlNPTEUKQEAgLTM0NjYsNyArMzQ0Myw3IEBACiAJaWYgKHJldHZhbCkKIAkJZ290byBlcnI7CiAKLQljb25fZHJpdmVyLT5kZXYgPSBkZXZpY2VfY3JlYXRlX2RydmRhdGEodnRjb25zb2xlX2NsYXNzLCBOVUxMLAorCWNvbl9kcml2ZXItPmRldiA9IGRldmljZV9jcmVhdGUodnRjb25zb2xlX2NsYXNzLCBOVUxMLAogCQkJCQkJTUtERVYoMCwgY29uX2RyaXZlci0+bm9kZSksCiAJCQkJCQlOVUxMLCAidnRjb24laSIsCiAJCQkJCQljb25fZHJpdmVyLT5ub2RlKTsKQEAgLTM1NzcsNyArMzU1NCw3IEBACiAJCXN0cnVjdCBjb25fZHJpdmVyICpjb24gPSAmcmVnaXN0ZXJlZF9jb25fZHJpdmVyW2ldOwogCiAJCWlmIChjb24tPmNvbiAmJiAhY29uLT5kZXYpIHsKLQkJCWNvbi0+ZGV2ID0gZGV2aWNlX2NyZWF0ZV9kcnZkYXRhKHZ0Y29uc29sZV9jbGFzcywgTlVMTCwKKwkJCWNvbi0+ZGV2ID0gZGV2aWNlX2NyZWF0ZSh2dGNvbnNvbGVfY2xhc3MsIE5VTEwsCiAJCQkJCQkJIE1LREVWKDAsIGNvbi0+bm9kZSksCiAJCQkJCQkJIE5VTEwsICJ2dGNvbiVpIiwKIAkJCQkJCQkgY29uLT5ub2RlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci92dF9pb2N0bC5jIGIvZHJpdmVycy9jaGFyL3Z0X2lvY3RsLmMKaW5kZXggYzkwNGU5YS4uODk0NGNlNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3Z0X2lvY3RsLmMKKysrIGIvZHJpdmVycy9jaGFyL3Z0X2lvY3RsLmMKQEAgLTM5NSw2ICszOTUsOCBAQAogIAogCWtiZCA9IGtiZF90YWJsZSArIGNvbnNvbGU7CiAJc3dpdGNoIChjbWQpIHsKKwljYXNlIFRJT0NMSU5VWDoKKwkJcmV0dXJuIHRpb2NsaW51eCh0dHksIGFyZyk7CiAJY2FzZSBLSU9DU09VTkQ6CiAJCWlmICghcGVybSkKIAkJCWdvdG8gZXBlcm07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIveGlsaW54X2h3aWNhcC94aWxpbnhfaHdpY2FwLmMgYi9kcml2ZXJzL2NoYXIveGlsaW54X2h3aWNhcC94aWxpbnhfaHdpY2FwLmMKaW5kZXggMjc4Yzk4NS4uZWQxMzJmZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3hpbGlueF9od2ljYXAveGlsaW54X2h3aWNhcC5jCisrKyBiL2RyaXZlcnMvY2hhci94aWxpbnhfaHdpY2FwL3hpbGlueF9od2ljYXAuYwpAQCAtNjU3LDggKzY1Nyw3IEBACiAJCWdvdG8gZmFpbGVkMzsKIAl9CiAKLQlkZXZpY2VfY3JlYXRlX2RydmRhdGEoaWNhcF9jbGFzcywgZGV2LCBkZXZ0LCBOVUxMLAotCQkJICAgICAgIiVzJWQiLCBEUklWRVJfTkFNRSwgaWQpOworCWRldmljZV9jcmVhdGUoaWNhcF9jbGFzcywgZGV2LCBkZXZ0LCBOVUxMLCAiJXMlZCIsIERSSVZFUl9OQU1FLCBpZCk7CiAJcmV0dXJuIDA7CQkvKiBzdWNjZXNzICovCiAKICBmYWlsZWQzOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jbG9ja3NvdXJjZS9hY3BpX3BtLmMgYi9kcml2ZXJzL2Nsb2Nrc291cmNlL2FjcGlfcG0uYwppbmRleCA3MWQyYWM0Li5jMjAxNzEwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Nsb2Nrc291cmNlL2FjcGlfcG0uYworKysgYi9kcml2ZXJzL2Nsb2Nrc291cmNlL2FjcGlfcG0uYwpAQCAtMjM3LDkgKzIzNywxMiBAQAogCiAJaWYgKHN0cmljdF9zdHJ0b3VsKGFyZywgMTYsICZiYXNlKSkKIAkJcmV0dXJuIC1FSU5WQUw7Ci0KKyNpZmRlZiBDT05GSUdfWDg2XzY0CisJaWYgKGJhc2UgPiBVSU5UX01BWCkKKwkJcmV0dXJuIC1FUkFOR0U7CisjZW5kaWYKIAlwcmludGsoS0VSTl9JTkZPICJQTVRNUiBJT1BvcnQgb3ZlcnJpZGU6IDB4JTA0eCAtPiAweCUwNGx4XG4iLAotCSAgICAgICAodW5zaWduZWQgaW50KXBtdG1yX2lvcG9ydCwgYmFzZSk7CisJICAgICAgIHBtdG1yX2lvcG9ydCwgYmFzZSk7CiAJcG10bXJfaW9wb3J0ID0gYmFzZTsKIAogCXJldHVybiAxOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9kY2EvZGNhLXN5c2ZzLmMgYi9kcml2ZXJzL2RjYS9kY2Etc3lzZnMuYwppbmRleCA3YWY0YjQwLi5iYjUzOGI5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2RjYS9kY2Etc3lzZnMuYworKysgYi9kcml2ZXJzL2RjYS9kY2Etc3lzZnMuYwpAQCAtMTUsOSArMTUsOCBAQAogCXN0cnVjdCBkZXZpY2UgKmNkOwogCXN0YXRpYyBpbnQgcmVxX2NvdW50OwogCi0JY2QgPSBkZXZpY2VfY3JlYXRlX2RydmRhdGEoZGNhX2NsYXNzLCBkY2EtPmNkLAotCQkJCSAgIE1LREVWKDAsIHNsb3QgKyAxKSwgTlVMTCwKLQkJCQkgICAicmVxdWVzdGVyJWQiLCByZXFfY291bnQrKyk7CisJY2QgPSBkZXZpY2VfY3JlYXRlKGRjYV9jbGFzcywgZGNhLT5jZCwgTUtERVYoMCwgc2xvdCArIDEpLCBOVUxMLAorCQkJICAgInJlcXVlc3RlciVkIiwgcmVxX2NvdW50KyspOwogCWlmIChJU19FUlIoY2QpKQogCQlyZXR1cm4gUFRSX0VSUihjZCk7CiAJcmV0dXJuIDA7CkBAIC00OCw4ICs0Nyw3IEBACiAJCXJldHVybiBlcnI7CiAJfQogCi0JY2QgPSBkZXZpY2VfY3JlYXRlX2RydmRhdGEoZGNhX2NsYXNzLCBkZXYsIE1LREVWKDAsIDApLCBOVUxMLAotCQkJCSAgICJkY2ElZCIsIGRjYS0+aWQpOworCWNkID0gZGV2aWNlX2NyZWF0ZShkY2FfY2xhc3MsIGRldiwgTUtERVYoMCwgMCksIE5VTEwsICJkY2ElZCIsIGRjYS0+aWQpOwogCWlmIChJU19FUlIoY2QpKSB7CiAJCXNwaW5fbG9jaygmZGNhX2lkcl9sb2NrKTsKIAkJaWRyX3JlbW92ZSgmZGNhX2lkciwgZGNhLT5pZCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2RtYS9LY29uZmlnIGIvZHJpdmVycy9kbWEvS2NvbmZpZwppbmRleCBjZDMwMzkwLi45MDRlNTc1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2RtYS9LY29uZmlnCisrKyBiL2RyaXZlcnMvZG1hL0tjb25maWcKQEAgLTQ4LDEzICs0OCwxMyBAQAogCSAgY2FuIGJlIGludGVncmF0ZWQgaW4gY2hpcHMgc3VjaCBhcyB0aGUgQXRtZWwgQVQzMmFwNzAwMC4KIAogY29uZmlnIEZTTF9ETUEKLQlib29sICJGcmVlc2NhbGUgTVBDODV4eC9NUEM4M3h4IERNQSBzdXBwb3J0IgotCWRlcGVuZHMgb24gUFBDCisJdHJpc3RhdGUgIkZyZWVzY2FsZSBFbG8gYW5kIEVsbyBQbHVzIERNQSBzdXBwb3J0IgorCWRlcGVuZHMgb24gRlNMX1NPQwogCXNlbGVjdCBETUFfRU5HSU5FCiAJLS0taGVscC0tLQotCSAgRW5hYmxlIHN1cHBvcnQgZm9yIHRoZSBGcmVlc2NhbGUgRE1BIGVuZ2luZS4gTm93LCBpdCBzdXBwb3J0Ci0JICBNUEM4NTYwLzQwLCBNUEM4NTU1LCBNUEM4NTQ4IGFuZCBNUEM4NjQxIHByb2Nlc3NvcnMuCi0JICBUaGUgTVBDODM0OSwgTVBDODM2MCBpcyBhbHNvIHN1cHBvcnRlZC4KKwkgIEVuYWJsZSBzdXBwb3J0IGZvciB0aGUgRnJlZXNjYWxlIEVsbyBhbmQgRWxvIFBsdXMgRE1BIGNvbnRyb2xsZXJzLgorCSAgVGhlIEVsbyBpcyB0aGUgRE1BIGNvbnRyb2xsZXIgb24gc29tZSA4Mnh4IGFuZCA4M3h4IHBhcnRzLCBhbmQgdGhlCisJICBFbG8gUGx1cyBpcyB0aGUgRE1BIGNvbnRyb2xsZXIgb24gODV4eCBhbmQgODZ4eCBwYXJ0cy4KIAogY29uZmlnIE1WX1hPUgogCWJvb2wgIk1hcnZlbGwgWE9SIGVuZ2luZSBzdXBwb3J0IgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9kbWEvZG1hdGVzdC5jIGIvZHJpdmVycy9kbWEvZG1hdGVzdC5jCmluZGV4IGEwOGQxOTcuLmQxZTM4MWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZG1hL2RtYXRlc3QuYworKysgYi9kcml2ZXJzL2RtYS9kbWF0ZXN0LmMKQEAgLTMyNSw3ICszMjUsMTIgQEAKIAlzdHJ1Y3QgZG1hdGVzdF90aHJlYWQJKnRocmVhZDsKIAl1bnNpZ25lZCBpbnQJCWk7CiAKLQlkdGMgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgZG1hdGVzdF9jaGFuKSwgR0ZQX0FUT01JQyk7CisJLyogSGF2ZSB3ZSBhbHJlYWR5IGJlZW4gdG9sZCBhYm91dCB0aGlzIGNoYW5uZWw/ICovCisJbGlzdF9mb3JfZWFjaF9lbnRyeShkdGMsICZkbWF0ZXN0X2NoYW5uZWxzLCBub2RlKQorCQlpZiAoZHRjLT5jaGFuID09IGNoYW4pCisJCQlyZXR1cm4gRE1BX0RVUDsKKworCWR0YyA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBkbWF0ZXN0X2NoYW4pLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWR0YykgewogCQlwcl93YXJuaW5nKCJkbWF0ZXN0OiBObyBtZW1vcnkgZm9yICVzXG4iLCBjaGFuLT5kZXYuYnVzX2lkKTsKIAkJcmV0dXJuIERNQV9OQUs7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2RtYS9mc2xkbWEuYyBiL2RyaXZlcnMvZG1hL2ZzbGRtYS5jCmluZGV4IGMwMDU5Y2EuLjBiOTVkY2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZG1hL2ZzbGRtYS5jCisrKyBiL2RyaXZlcnMvZG1hL2ZzbGRtYS5jCkBAIC0zNzAsNyArMzcwLDEwIEBACiAJCQkJCXN0cnVjdCBkbWFfY2xpZW50ICpjbGllbnQpCiB7CiAJc3RydWN0IGZzbF9kbWFfY2hhbiAqZnNsX2NoYW4gPSB0b19mc2xfY2hhbihjaGFuKTsKLQlMSVNUX0hFQUQodG1wX2xpc3QpOworCisJLyogSGFzIHRoaXMgY2hhbm5lbCBhbHJlYWR5IGJlZW4gYWxsb2NhdGVkPyAqLworCWlmIChmc2xfY2hhbi0+ZGVzY19wb29sKQorCQlyZXR1cm4gMTsKIAogCS8qIFdlIG5lZWQgdGhlIGRlc2NyaXB0b3IgdG8gYmUgYWxpZ25lZCB0byAzMmJ5dGVzCiAJICogZm9yIG1lZXRpbmcgRlNMIERNQSBzcGVjaWZpY2F0aW9uIHJlcXVpcmVtZW50LgpAQCAtNDEwLDYgKzQxMyw4IEBACiAJfQogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmZzbF9jaGFuLT5kZXNjX2xvY2ssIGZsYWdzKTsKIAlkbWFfcG9vbF9kZXN0cm95KGZzbF9jaGFuLT5kZXNjX3Bvb2wpOworCisJZnNsX2NoYW4tPmRlc2NfcG9vbCA9IE5VTEw7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgZG1hX2FzeW5jX3R4X2Rlc2NyaXB0b3IgKgpAQCAtNzg2LDE1OSArNzkxLDI5IEBACiAJZnNsX2NoYW5fbGRfY2xlYW51cChmc2xfY2hhbik7CiB9CiAKLXN0YXRpYyB2b2lkIGZzbF9kbWFfY2FsbGJhY2tfdGVzdCh2b2lkICpwYXJhbSkKK3N0YXRpYyBpbnQgX19kZXZpbml0IGZzbF9kbWFfY2hhbl9wcm9iZShzdHJ1Y3QgZnNsX2RtYV9kZXZpY2UgKmZkZXYsCisJc3RydWN0IGRldmljZV9ub2RlICpub2RlLCB1MzIgZmVhdHVyZSwgY29uc3QgY2hhciAqY29tcGF0aWJsZSkKIHsKLQlzdHJ1Y3QgZnNsX2RtYV9jaGFuICpmc2xfY2hhbiA9IHBhcmFtOwotCWlmIChmc2xfY2hhbikKLQkJZGV2X2RiZyhmc2xfY2hhbi0+ZGV2LCAic2VsZnRlc3Q6IGNhbGxiYWNrIGlzIG9rIVxuIik7Ci19Ci0KLXN0YXRpYyBpbnQgZnNsX2RtYV9zZWxmX3Rlc3Qoc3RydWN0IGZzbF9kbWFfY2hhbiAqZnNsX2NoYW4pCi17Ci0Jc3RydWN0IGRtYV9jaGFuICpjaGFuOwotCWludCBlcnIgPSAwOwotCWRtYV9hZGRyX3QgZG1hX2Rlc3QsIGRtYV9zcmM7Ci0JZG1hX2Nvb2tpZV90IGNvb2tpZTsKLQl1OCAqc3JjLCAqZGVzdDsKLQlpbnQgaTsKLQlzaXplX3QgdGVzdF9zaXplOwotCXN0cnVjdCBkbWFfYXN5bmNfdHhfZGVzY3JpcHRvciAqdHgxLCAqdHgyLCAqdHgzOwotCi0JdGVzdF9zaXplID0gNDA5NjsKLQotCXNyYyA9IGttYWxsb2ModGVzdF9zaXplICogMiwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFzcmMpIHsKLQkJZGV2X2Vycihmc2xfY2hhbi0+ZGV2LAotCQkJCSJzZWxmdGVzdDogQ2Fubm90IGFsbG9jIG1lbW9yeSBmb3IgdGVzdCFcbiIpOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9Ci0KLQlkZXN0ID0gc3JjICsgdGVzdF9zaXplOwotCi0JZm9yIChpID0gMDsgaSA8IHRlc3Rfc2l6ZTsgaSsrKQotCQlzcmNbaV0gPSAodTgpIGk7Ci0KLQljaGFuID0gJmZzbF9jaGFuLT5jb21tb247Ci0KLQlpZiAoZnNsX2RtYV9hbGxvY19jaGFuX3Jlc291cmNlcyhjaGFuLCBOVUxMKSA8IDEpIHsKLQkJZGV2X2Vycihmc2xfY2hhbi0+ZGV2LAotCQkJCSJzZWxmdGVzdDogQ2Fubm90IGFsbG9jIHJlc291cmNlcyBmb3IgRE1BXG4iKTsKLQkJZXJyID0gLUVOT0RFVjsKLQkJZ290byBvdXQ7Ci0JfQotCi0JLyogVFggMSAqLwotCWRtYV9zcmMgPSBkbWFfbWFwX3NpbmdsZShmc2xfY2hhbi0+ZGV2LCBzcmMsIHRlc3Rfc2l6ZSAvIDIsCi0JCQkJIERNQV9UT19ERVZJQ0UpOwotCWRtYV9kZXN0ID0gZG1hX21hcF9zaW5nbGUoZnNsX2NoYW4tPmRldiwgZGVzdCwgdGVzdF9zaXplIC8gMiwKLQkJCQkgIERNQV9GUk9NX0RFVklDRSk7Ci0JdHgxID0gZnNsX2RtYV9wcmVwX21lbWNweShjaGFuLCBkbWFfZGVzdCwgZG1hX3NyYywgdGVzdF9zaXplIC8gMiwgMCk7Ci0JYXN5bmNfdHhfYWNrKHR4MSk7Ci0KLQljb29raWUgPSBmc2xfZG1hX3R4X3N1Ym1pdCh0eDEpOwotCWZzbF9kbWFfbWVtY3B5X2lzc3VlX3BlbmRpbmcoY2hhbik7Ci0JbXNsZWVwKDIpOwotCi0JaWYgKGZzbF9kbWFfaXNfY29tcGxldGUoY2hhbiwgY29va2llLCBOVUxMLCBOVUxMKSAhPSBETUFfU1VDQ0VTUykgewotCQlkZXZfZXJyKGZzbF9jaGFuLT5kZXYsICJzZWxmdGVzdDogVGltZSBvdXQhXG4iKTsKLQkJZXJyID0gLUVOT0RFVjsKLQkJZ290byBmcmVlX3Jlc291cmNlczsKLQl9Ci0KLQkvKiBUZXN0IGZyZWUgYW5kIHJlLWFsbG9jIGNoYW5uZWwgcmVzb3VyY2VzICovCi0JZnNsX2RtYV9mcmVlX2NoYW5fcmVzb3VyY2VzKGNoYW4pOwotCi0JaWYgKGZzbF9kbWFfYWxsb2NfY2hhbl9yZXNvdXJjZXMoY2hhbiwgTlVMTCkgPCAxKSB7Ci0JCWRldl9lcnIoZnNsX2NoYW4tPmRldiwKLQkJCQkic2VsZnRlc3Q6IENhbm5vdCBhbGxvYyByZXNvdXJjZXMgZm9yIERNQVxuIik7Ci0JCWVyciA9IC1FTk9ERVY7Ci0JCWdvdG8gZnJlZV9yZXNvdXJjZXM7Ci0JfQotCi0JLyogQ29udGludWUgdG8gdGVzdAotCSAqIFRYIDIKLQkgKi8KLQlkbWFfc3JjID0gZG1hX21hcF9zaW5nbGUoZnNsX2NoYW4tPmRldiwgc3JjICsgdGVzdF9zaXplIC8gMiwKLQkJCQkJdGVzdF9zaXplIC8gNCwgRE1BX1RPX0RFVklDRSk7Ci0JZG1hX2Rlc3QgPSBkbWFfbWFwX3NpbmdsZShmc2xfY2hhbi0+ZGV2LCBkZXN0ICsgdGVzdF9zaXplIC8gMiwKLQkJCQkJdGVzdF9zaXplIC8gNCwgRE1BX0ZST01fREVWSUNFKTsKLQl0eDIgPSBmc2xfZG1hX3ByZXBfbWVtY3B5KGNoYW4sIGRtYV9kZXN0LCBkbWFfc3JjLCB0ZXN0X3NpemUgLyA0LCAwKTsKLQlhc3luY190eF9hY2sodHgyKTsKLQotCS8qIFRYIDMgKi8KLQlkbWFfc3JjID0gZG1hX21hcF9zaW5nbGUoZnNsX2NoYW4tPmRldiwgc3JjICsgdGVzdF9zaXplICogMyAvIDQsCi0JCQkJCXRlc3Rfc2l6ZSAvIDQsIERNQV9UT19ERVZJQ0UpOwotCWRtYV9kZXN0ID0gZG1hX21hcF9zaW5nbGUoZnNsX2NoYW4tPmRldiwgZGVzdCArIHRlc3Rfc2l6ZSAqIDMgLyA0LAotCQkJCQl0ZXN0X3NpemUgLyA0LCBETUFfRlJPTV9ERVZJQ0UpOwotCXR4MyA9IGZzbF9kbWFfcHJlcF9tZW1jcHkoY2hhbiwgZG1hX2Rlc3QsIGRtYV9zcmMsIHRlc3Rfc2l6ZSAvIDQsIDApOwotCWFzeW5jX3R4X2Fjayh0eDMpOwotCi0JLyogSW50ZXJydXB0IHR4IHRlc3QgKi8KLQl0eDEgPSBmc2xfZG1hX3ByZXBfaW50ZXJydXB0KGNoYW4sIDApOwotCWFzeW5jX3R4X2Fjayh0eDEpOwotCWNvb2tpZSA9IGZzbF9kbWFfdHhfc3VibWl0KHR4MSk7Ci0KLQkvKiBUZXN0IGV4Y2hhbmdpbmcgdGhlIHByZXBhcmVkIHR4IHNvcnQgKi8KLQljb29raWUgPSBmc2xfZG1hX3R4X3N1Ym1pdCh0eDMpOwotCWNvb2tpZSA9IGZzbF9kbWFfdHhfc3VibWl0KHR4Mik7Ci0KLQlpZiAoZG1hX2hhc19jYXAoRE1BX0lOVEVSUlVQVCwgKChzdHJ1Y3QgZnNsX2RtYV9kZXZpY2UgKikKLQkgICAgZGV2X2dldF9kcnZkYXRhKGZzbF9jaGFuLT5kZXYtPnBhcmVudCkpLT5jb21tb24uY2FwX21hc2spKSB7Ci0JCXR4My0+Y2FsbGJhY2sgPSBmc2xfZG1hX2NhbGxiYWNrX3Rlc3Q7Ci0JCXR4My0+Y2FsbGJhY2tfcGFyYW0gPSBmc2xfY2hhbjsKLQl9Ci0JZnNsX2RtYV9tZW1jcHlfaXNzdWVfcGVuZGluZyhjaGFuKTsKLQltc2xlZXAoMik7Ci0KLQlpZiAoZnNsX2RtYV9pc19jb21wbGV0ZShjaGFuLCBjb29raWUsIE5VTEwsIE5VTEwpICE9IERNQV9TVUNDRVNTKSB7Ci0JCWRldl9lcnIoZnNsX2NoYW4tPmRldiwgInNlbGZ0ZXN0OiBUaW1lIG91dCFcbiIpOwotCQllcnIgPSAtRU5PREVWOwotCQlnb3RvIGZyZWVfcmVzb3VyY2VzOwotCX0KLQotCWVyciA9IG1lbWNtcChzcmMsIGRlc3QsIHRlc3Rfc2l6ZSk7Ci0JaWYgKGVycikgewotCQlmb3IgKGkgPSAwOyAoKihzcmMgKyBpKSA9PSAqKGRlc3QgKyBpKSkgJiYgKGkgPCB0ZXN0X3NpemUpOwotCQkJCWkrKyk7Ci0JCWRldl9lcnIoZnNsX2NoYW4tPmRldiwgInNlbGZ0ZXN0OiBUZXN0IGZhaWxlZCwgZGF0YSAlZC8lbGQgaXMgIgotCQkJCSJlcnJvciEgc3JjIDB4JXgsIGRlc3QgMHgleFxuIiwKLQkJCQlpLCAobG9uZyl0ZXN0X3NpemUsICooc3JjICsgaSksICooZGVzdCArIGkpKTsKLQl9Ci0KLWZyZWVfcmVzb3VyY2VzOgotCWZzbF9kbWFfZnJlZV9jaGFuX3Jlc291cmNlcyhjaGFuKTsKLW91dDoKLQlrZnJlZShzcmMpOwotCXJldHVybiBlcnI7Ci19Ci0KLXN0YXRpYyBpbnQgX19kZXZpbml0IG9mX2ZzbF9kbWFfY2hhbl9wcm9iZShzdHJ1Y3Qgb2ZfZGV2aWNlICpkZXYsCi0JCQljb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkICptYXRjaCkKLXsKLQlzdHJ1Y3QgZnNsX2RtYV9kZXZpY2UgKmZkZXY7CiAJc3RydWN0IGZzbF9kbWFfY2hhbiAqbmV3X2ZzbF9jaGFuOwogCWludCBlcnI7CiAKLQlmZGV2ID0gZGV2X2dldF9kcnZkYXRhKGRldi0+ZGV2LnBhcmVudCk7Ci0JQlVHX09OKCFmZGV2KTsKLQogCS8qIGFsbG9jIGNoYW5uZWwgKi8KIAluZXdfZnNsX2NoYW4gPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgZnNsX2RtYV9jaGFuKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFuZXdfZnNsX2NoYW4pIHsKLQkJZGV2X2VycigmZGV2LT5kZXYsICJObyBmcmVlIG1lbW9yeSBmb3IgYWxsb2NhdGluZyAiCisJCWRldl9lcnIoZmRldi0+ZGV2LCAiTm8gZnJlZSBtZW1vcnkgZm9yIGFsbG9jYXRpbmcgIgogCQkJCSJkbWEgY2hhbm5lbHMhXG4iKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCiAJLyogZ2V0IGRtYSBjaGFubmVsIHJlZ2lzdGVyIGJhc2UgKi8KLQllcnIgPSBvZl9hZGRyZXNzX3RvX3Jlc291cmNlKGRldi0+bm9kZSwgMCwgJm5ld19mc2xfY2hhbi0+cmVnKTsKKwllcnIgPSBvZl9hZGRyZXNzX3RvX3Jlc291cmNlKG5vZGUsIDAsICZuZXdfZnNsX2NoYW4tPnJlZyk7CiAJaWYgKGVycikgewotCQlkZXZfZXJyKCZkZXYtPmRldiwgIkNhbid0IGdldCAlcyBwcm9wZXJ0eSAncmVnJ1xuIiwKLQkJCQlkZXYtPm5vZGUtPmZ1bGxfbmFtZSk7CisJCWRldl9lcnIoZmRldi0+ZGV2LCAiQ2FuJ3QgZ2V0ICVzIHByb3BlcnR5ICdyZWcnXG4iLAorCQkJCW5vZGUtPmZ1bGxfbmFtZSk7CiAJCWdvdG8gZXJyX25vX3JlZzsKIAl9CiAKLQluZXdfZnNsX2NoYW4tPmZlYXR1cmUgPSAqKHUzMiAqKW1hdGNoLT5kYXRhOworCW5ld19mc2xfY2hhbi0+ZmVhdHVyZSA9IGZlYXR1cmU7CiAKIAlpZiAoIWZkZXYtPmZlYXR1cmUpCiAJCWZkZXYtPmZlYXR1cmUgPSBuZXdfZnNsX2NoYW4tPmZlYXR1cmU7CkBAIC05NDgsMTMgKzgyMywxMyBAQAogCSAqLwogCVdBUk5fT04oZmRldi0+ZmVhdHVyZSAhPSBuZXdfZnNsX2NoYW4tPmZlYXR1cmUpOwogCi0JbmV3X2ZzbF9jaGFuLT5kZXYgPSAmZGV2LT5kZXY7CisJbmV3X2ZzbF9jaGFuLT5kZXYgPSAmbmV3X2ZzbF9jaGFuLT5jb21tb24uZGV2OwogCW5ld19mc2xfY2hhbi0+cmVnX2Jhc2UgPSBpb3JlbWFwKG5ld19mc2xfY2hhbi0+cmVnLnN0YXJ0LAogCQkJbmV3X2ZzbF9jaGFuLT5yZWcuZW5kIC0gbmV3X2ZzbF9jaGFuLT5yZWcuc3RhcnQgKyAxKTsKIAogCW5ld19mc2xfY2hhbi0+aWQgPSAoKG5ld19mc2xfY2hhbi0+cmVnLnN0YXJ0IC0gMHgxMDApICYgMHhmZmYpID4+IDc7CiAJaWYgKG5ld19mc2xfY2hhbi0+aWQgPiBGU0xfRE1BX01BWF9DSEFOU19QRVJfREVWSUNFKSB7Ci0JCWRldl9lcnIoJmRldi0+ZGV2LCAiVGhlcmUgaXMgbm8gJWQgY2hhbm5lbCFcbiIsCisJCWRldl9lcnIoZmRldi0+ZGV2LCAiVGhlcmUgaXMgbm8gJWQgY2hhbm5lbCFcbiIsCiAJCQkJbmV3X2ZzbF9jaGFuLT5pZCk7CiAJCWVyciA9IC1FSU5WQUw7CiAJCWdvdG8gZXJyX25vX2NoYW47CkBAIC05ODgsMjkgKzg2MywyMyBAQAogCQkJJmZkZXYtPmNvbW1vbi5jaGFubmVscyk7CiAJZmRldi0+Y29tbW9uLmNoYW5jbnQrKzsKIAotCW5ld19mc2xfY2hhbi0+aXJxID0gaXJxX29mX3BhcnNlX2FuZF9tYXAoZGV2LT5ub2RlLCAwKTsKKwluZXdfZnNsX2NoYW4tPmlycSA9IGlycV9vZl9wYXJzZV9hbmRfbWFwKG5vZGUsIDApOwogCWlmIChuZXdfZnNsX2NoYW4tPmlycSAhPSBOT19JUlEpIHsKIAkJZXJyID0gcmVxdWVzdF9pcnEobmV3X2ZzbF9jaGFuLT5pcnEsCiAJCQkJCSZmc2xfZG1hX2NoYW5fZG9faW50ZXJydXB0LCBJUlFGX1NIQVJFRCwKIAkJCQkJImZzbGRtYS1jaGFubmVsIiwgbmV3X2ZzbF9jaGFuKTsKIAkJaWYgKGVycikgewotCQkJZGV2X2VycigmZGV2LT5kZXYsICJETUEgY2hhbm5lbCAlcyByZXF1ZXN0X2lycSBlcnJvciAiCi0JCQkJIndpdGggcmV0dXJuICVkXG4iLCBkZXYtPm5vZGUtPmZ1bGxfbmFtZSwgZXJyKTsKKwkJCWRldl9lcnIoZmRldi0+ZGV2LCAiRE1BIGNoYW5uZWwgJXMgcmVxdWVzdF9pcnEgZXJyb3IgIgorCQkJCSJ3aXRoIHJldHVybiAlZFxuIiwgbm9kZS0+ZnVsbF9uYW1lLCBlcnIpOwogCQkJZ290byBlcnJfbm9faXJxOwogCQl9CiAJfQogCi0JZXJyID0gZnNsX2RtYV9zZWxmX3Rlc3QobmV3X2ZzbF9jaGFuKTsKLQlpZiAoZXJyKQotCQlnb3RvIGVycl9zZWxmX3Rlc3Q7Ci0KLQlkZXZfaW5mbygmZGV2LT5kZXYsICIjJWQgKCVzKSwgaXJxICVkXG4iLCBuZXdfZnNsX2NoYW4tPmlkLAotCQkJCW1hdGNoLT5jb21wYXRpYmxlLCBuZXdfZnNsX2NoYW4tPmlycSk7CisJZGV2X2luZm8oZmRldi0+ZGV2LCAiIyVkICglcyksIGlycSAlZFxuIiwgbmV3X2ZzbF9jaGFuLT5pZCwKKwkJCQljb21wYXRpYmxlLCBuZXdfZnNsX2NoYW4tPmlycSk7CiAKIAlyZXR1cm4gMDsKIAotZXJyX3NlbGZfdGVzdDoKLQlmcmVlX2lycShuZXdfZnNsX2NoYW4tPmlycSwgbmV3X2ZzbF9jaGFuKTsKIGVycl9ub19pcnE6CiAJbGlzdF9kZWwoJm5ld19mc2xfY2hhbi0+Y29tbW9uLmRldmljZV9ub2RlKTsKIGVycl9ub19jaGFuOgpAQCAtMTAyMCwzOCArODg5LDIwIEBACiAJcmV0dXJuIGVycjsKIH0KIAotY29uc3QgdTMyIG1wYzg1NDBfZG1hX2lwX2ZlYXR1cmUgPSBGU0xfRE1BX0lQXzg1WFggfCBGU0xfRE1BX0JJR19FTkRJQU47Ci1jb25zdCB1MzIgbXBjODM0OV9kbWFfaXBfZmVhdHVyZSA9IEZTTF9ETUFfSVBfODNYWCB8IEZTTF9ETUFfTElUVExFX0VORElBTjsKLQotc3RhdGljIHN0cnVjdCBvZl9kZXZpY2VfaWQgb2ZfZnNsX2RtYV9jaGFuX2lkc1tdID0gewotCXsKLQkJLmNvbXBhdGlibGUgPSAiZnNsLGVsb3BsdXMtZG1hLWNoYW5uZWwiLAotCQkuZGF0YSA9ICh2b2lkICopJm1wYzg1NDBfZG1hX2lwX2ZlYXR1cmUsCi0JfSwKLQl7Ci0JCS5jb21wYXRpYmxlID0gImZzbCxlbG8tZG1hLWNoYW5uZWwiLAotCQkuZGF0YSA9ICh2b2lkICopJm1wYzgzNDlfZG1hX2lwX2ZlYXR1cmUsCi0JfSwKLQl7fQotfTsKLQotc3RhdGljIHN0cnVjdCBvZl9wbGF0Zm9ybV9kcml2ZXIgb2ZfZnNsX2RtYV9jaGFuX2RyaXZlciA9IHsKLQkubmFtZSA9ICJvZi1mc2wtZG1hLWNoYW5uZWwiLAotCS5tYXRjaF90YWJsZSA9IG9mX2ZzbF9kbWFfY2hhbl9pZHMsCi0JLnByb2JlID0gb2ZfZnNsX2RtYV9jaGFuX3Byb2JlLAotfTsKLQotc3RhdGljIF9faW5pdCBpbnQgb2ZfZnNsX2RtYV9jaGFuX2luaXQodm9pZCkKK3N0YXRpYyB2b2lkIGZzbF9kbWFfY2hhbl9yZW1vdmUoc3RydWN0IGZzbF9kbWFfY2hhbiAqZmNoYW4pCiB7Ci0JcmV0dXJuIG9mX3JlZ2lzdGVyX3BsYXRmb3JtX2RyaXZlcigmb2ZfZnNsX2RtYV9jaGFuX2RyaXZlcik7CisJZnJlZV9pcnEoZmNoYW4tPmlycSwgZmNoYW4pOworCWxpc3RfZGVsKCZmY2hhbi0+Y29tbW9uLmRldmljZV9ub2RlKTsKKwlpb3VubWFwKGZjaGFuLT5yZWdfYmFzZSk7CisJa2ZyZWUoZmNoYW4pOwogfQogCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBvZl9mc2xfZG1hX3Byb2JlKHN0cnVjdCBvZl9kZXZpY2UgKmRldiwKIAkJCWNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgKm1hdGNoKQogewogCWludCBlcnI7Ci0JdW5zaWduZWQgaW50IGlycTsKIAlzdHJ1Y3QgZnNsX2RtYV9kZXZpY2UgKmZkZXY7CisJc3RydWN0IGRldmljZV9ub2RlICpjaGlsZDsKIAogCWZkZXYgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgZnNsX2RtYV9kZXZpY2UpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWZkZXYpIHsKQEAgLTEwODUsOSArOTM2LDkgQEAKIAlmZGV2LT5jb21tb24uZGV2aWNlX2lzc3VlX3BlbmRpbmcgPSBmc2xfZG1hX21lbWNweV9pc3N1ZV9wZW5kaW5nOwogCWZkZXYtPmNvbW1vbi5kZXYgPSAmZGV2LT5kZXY7CiAKLQlpcnEgPSBpcnFfb2ZfcGFyc2VfYW5kX21hcChkZXYtPm5vZGUsIDApOwotCWlmIChpcnEgIT0gTk9fSVJRKSB7Ci0JCWVyciA9IHJlcXVlc3RfaXJxKGlycSwgJmZzbF9kbWFfZG9faW50ZXJydXB0LCBJUlFGX1NIQVJFRCwKKwlmZGV2LT5pcnEgPSBpcnFfb2ZfcGFyc2VfYW5kX21hcChkZXYtPm5vZGUsIDApOworCWlmIChmZGV2LT5pcnEgIT0gTk9fSVJRKSB7CisJCWVyciA9IHJlcXVlc3RfaXJxKGZkZXYtPmlycSwgJmZzbF9kbWFfZG9faW50ZXJydXB0LCBJUlFGX1NIQVJFRCwKIAkJCQkJImZzbGRtYS1kZXZpY2UiLCBmZGV2KTsKIAkJaWYgKGVycikgewogCQkJZGV2X2VycigmZGV2LT5kZXYsICJETUEgZGV2aWNlIHJlcXVlc3RfaXJxIGVycm9yICIKQEAgLTEwOTcsNyArOTQ4LDIxIEBACiAJfQogCiAJZGV2X3NldF9kcnZkYXRhKCYoZGV2LT5kZXYpLCBmZGV2KTsKLQlvZl9wbGF0Zm9ybV9idXNfcHJvYmUoZGV2LT5ub2RlLCBvZl9mc2xfZG1hX2NoYW5faWRzLCAmZGV2LT5kZXYpOworCisJLyogV2UgY2Fubm90IHVzZSBvZl9wbGF0Zm9ybV9idXNfcHJvYmUoKSBiZWNhdXNlIHRoZXJlIGlzIG5vCisJICogb2ZfcGxhdGZvcm1fYnVzX3JlbW92ZS4gIEluc3RlYWQsIHdlIG1hbnVhbGx5IGluc3RhbnRpYXRlIGV2ZXJ5IERNQQorCSAqIGNoYW5uZWwgb2JqZWN0LgorCSAqLworCWZvcl9lYWNoX2NoaWxkX29mX25vZGUoZGV2LT5ub2RlLCBjaGlsZCkgeworCQlpZiAob2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUoY2hpbGQsICJmc2wsZWxvcGx1cy1kbWEtY2hhbm5lbCIpKQorCQkJZnNsX2RtYV9jaGFuX3Byb2JlKGZkZXYsIGNoaWxkLAorCQkJCUZTTF9ETUFfSVBfODVYWCB8IEZTTF9ETUFfQklHX0VORElBTiwKKwkJCQkiZnNsLGVsb3BsdXMtZG1hLWNoYW5uZWwiKTsKKwkJaWYgKG9mX2RldmljZV9pc19jb21wYXRpYmxlKGNoaWxkLCAiZnNsLGVsby1kbWEtY2hhbm5lbCIpKQorCQkJZnNsX2RtYV9jaGFuX3Byb2JlKGZkZXYsIGNoaWxkLAorCQkJCUZTTF9ETUFfSVBfODNYWCB8IEZTTF9ETUFfTElUVExFX0VORElBTiwKKwkJCQkiZnNsLGVsby1kbWEtY2hhbm5lbCIpOworCX0KIAogCWRtYV9hc3luY19kZXZpY2VfcmVnaXN0ZXIoJmZkZXYtPmNvbW1vbik7CiAJcmV0dXJuIDA7CkBAIC0xMTA5LDYgKzk3NCwzMCBAQAogCXJldHVybiBlcnI7CiB9CiAKK3N0YXRpYyBpbnQgb2ZfZnNsX2RtYV9yZW1vdmUoc3RydWN0IG9mX2RldmljZSAqb2ZfZGV2KQoreworCXN0cnVjdCBmc2xfZG1hX2RldmljZSAqZmRldjsKKwl1bnNpZ25lZCBpbnQgaTsKKworCWZkZXYgPSBkZXZfZ2V0X2RydmRhdGEoJm9mX2Rldi0+ZGV2KTsKKworCWRtYV9hc3luY19kZXZpY2VfdW5yZWdpc3RlcigmZmRldi0+Y29tbW9uKTsKKworCWZvciAoaSA9IDA7IGkgPCBGU0xfRE1BX01BWF9DSEFOU19QRVJfREVWSUNFOyBpKyspCisJCWlmIChmZGV2LT5jaGFuW2ldKQorCQkJZnNsX2RtYV9jaGFuX3JlbW92ZShmZGV2LT5jaGFuW2ldKTsKKworCWlmIChmZGV2LT5pcnEgIT0gTk9fSVJRKQorCQlmcmVlX2lycShmZGV2LT5pcnEsIGZkZXYpOworCisJaW91bm1hcChmZGV2LT5yZWdfYmFzZSk7CisKKwlrZnJlZShmZGV2KTsKKwlkZXZfc2V0X2RydmRhdGEoJm9mX2Rldi0+ZGV2LCBOVUxMKTsKKworCXJldHVybiAwOworfQorCiBzdGF0aWMgc3RydWN0IG9mX2RldmljZV9pZCBvZl9mc2xfZG1hX2lkc1tdID0gewogCXsgLmNvbXBhdGlibGUgPSAiZnNsLGVsb3BsdXMtZG1hIiwgfSwKIAl7IC5jb21wYXRpYmxlID0gImZzbCxlbG8tZG1hIiwgfSwKQEAgLTExMTYsMTUgKzEwMDUsMzIgQEAKIH07CiAKIHN0YXRpYyBzdHJ1Y3Qgb2ZfcGxhdGZvcm1fZHJpdmVyIG9mX2ZzbF9kbWFfZHJpdmVyID0gewotCS5uYW1lID0gIm9mLWZzbC1kbWEiLAorCS5uYW1lID0gImZzbC1lbG8tZG1hIiwKIAkubWF0Y2hfdGFibGUgPSBvZl9mc2xfZG1hX2lkcywKIAkucHJvYmUgPSBvZl9mc2xfZG1hX3Byb2JlLAorCS5yZW1vdmUgPSBvZl9mc2xfZG1hX3JlbW92ZSwKIH07CiAKIHN0YXRpYyBfX2luaXQgaW50IG9mX2ZzbF9kbWFfaW5pdCh2b2lkKQogewotCXJldHVybiBvZl9yZWdpc3Rlcl9wbGF0Zm9ybV9kcml2ZXIoJm9mX2ZzbF9kbWFfZHJpdmVyKTsKKwlpbnQgcmV0OworCisJcHJfaW5mbygiRnJlZXNjYWxlIEVsbyAvIEVsbyBQbHVzIERNQSBkcml2ZXJcbiIpOworCisJcmV0ID0gb2ZfcmVnaXN0ZXJfcGxhdGZvcm1fZHJpdmVyKCZvZl9mc2xfZG1hX2RyaXZlcik7CisJaWYgKHJldCkKKwkJcHJfZXJyKCJmc2xkbWE6IGZhaWxlZCB0byByZWdpc3RlciBwbGF0Zm9ybSBkcml2ZXJcbiIpOworCisJcmV0dXJuIHJldDsKIH0KIAotc3Vic3lzX2luaXRjYWxsKG9mX2ZzbF9kbWFfY2hhbl9pbml0KTsKK3N0YXRpYyB2b2lkIF9fZXhpdCBvZl9mc2xfZG1hX2V4aXQodm9pZCkKK3sKKwlvZl91bnJlZ2lzdGVyX3BsYXRmb3JtX2RyaXZlcigmb2ZfZnNsX2RtYV9kcml2ZXIpOworfQorCiBzdWJzeXNfaW5pdGNhbGwob2ZfZnNsX2RtYV9pbml0KTsKK21vZHVsZV9leGl0KG9mX2ZzbF9kbWFfZXhpdCk7CisKK01PRFVMRV9ERVNDUklQVElPTigiRnJlZXNjYWxlIEVsbyAvIEVsbyBQbHVzIERNQSBkcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZG1hL2ZzbGRtYS5oIGIvZHJpdmVycy9kbWEvZnNsZG1hLmgKaW5kZXggNmZhZjA3Yi4uNGYyMWE1MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9kbWEvZnNsZG1hLmgKKysrIGIvZHJpdmVycy9kbWEvZnNsZG1hLmgKQEAgLTExNCw2ICsxMTQsNyBAQAogCXN0cnVjdCBkbWFfZGV2aWNlIGNvbW1vbjsKIAlzdHJ1Y3QgZnNsX2RtYV9jaGFuICpjaGFuW0ZTTF9ETUFfTUFYX0NIQU5TX1BFUl9ERVZJQ0VdOwogCXUzMiBmZWF0dXJlOwkJLyogVGhlIHNhbWUgYXMgRE1BIGNoYW5uZWxzICovCisJaW50IGlycTsJCS8qIENoYW5uZWwgSVJRICovCiB9OwogCiAvKiBEZWZpbmUgbWFjcm9zIGZvciBmc2xfZG1hX2NoYW4tPmZlYXR1cmUgcHJvcGVydHkgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZG1hL2lvYXRfZG1hLmMgYi9kcml2ZXJzL2RtYS9pb2F0X2RtYS5jCmluZGV4IGJjOGM2ZTMuLjFlZjY4YjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZG1hL2lvYXRfZG1hLmMKKysrIGIvZHJpdmVycy9kbWEvaW9hdF9kbWEuYwpAQCAtOTcxLDExICs5NzEsOSBAQAogCXN3aXRjaCAoaW9hdF9jaGFuLT5kZXZpY2UtPnZlcnNpb24pIHsKIAljYXNlIElPQVRfVkVSXzFfMjoKIAkJcmV0dXJuIGlvYXQxX2RtYV9nZXRfbmV4dF9kZXNjcmlwdG9yKGlvYXRfY2hhbik7Ci0JCWJyZWFrOwogCWNhc2UgSU9BVF9WRVJfMl8wOgogCWNhc2UgSU9BVF9WRVJfM18wOgogCQlyZXR1cm4gaW9hdDJfZG1hX2dldF9uZXh0X2Rlc2NyaXB0b3IoaW9hdF9jaGFuKTsKLQkJYnJlYWs7CiAJfQogCXJldHVybiBOVUxMOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9lZGFjL2NlbGxfZWRhYy5jIGIvZHJpdmVycy9lZGFjL2NlbGxfZWRhYy5jCmluZGV4IDBlMDI0ZmUuLjg4NzA3MmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZWRhYy9jZWxsX2VkYWMuYworKysgYi9kcml2ZXJzL2VkYWMvY2VsbF9lZGFjLmMKQEAgLTE0Miw3ICsxNDIsNyBAQAogCQljc3Jvdy0+bnJfcGFnZXMgPSAoci5lbmQgLSByLnN0YXJ0ICsgMSkgPj4gUEFHRV9TSElGVDsKIAkJY3Nyb3ctPmxhc3RfcGFnZSA9IGNzcm93LT5maXJzdF9wYWdlICsgY3Nyb3ctPm5yX3BhZ2VzIC0gMTsKIAkJY3Nyb3ctPm10eXBlID0gTUVNX1hEUjsKLQkJY3Nyb3ctPmVkYWNfbW9kZSA9IEVEQUNfRkxBR19FQyB8IEVEQUNfRkxBR19TRUNERUQ7CisJCWNzcm93LT5lZGFjX21vZGUgPSBFREFDX1NFQ0RFRDsKIAkJZGV2X2RiZyhtY2ktPmRldiwKIAkJCSJJbml0aWFsaXplZCBvbiBub2RlICVkLCBjaGFubWFzaz0weCV4LCIKIAkJCSIgZmlyc3RfcGFnZT0weCVseCwgbnJfcGFnZXM9MHgleFxuIiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZWRhYy9pNTAwMF9lZGFjLmMgYi9kcml2ZXJzL2VkYWMvaTUwMDBfZWRhYy5jCmluZGV4IDRhMTZiNWIuLmYwZDliNDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZWRhYy9pNTAwMF9lZGFjLmMKKysrIGIvZHJpdmVycy9lZGFjL2k1MDAwX2VkYWMuYwpAQCAtMTE5LDYgKzExOSw3IEBACiAjZGVmaW5lCQkJRkVSUl9ORl9VTkNPUlJFQ1RBQkxFCShGRVJSX05GX00xMkVSUiB8IFwKIAkJCQkJCQlGRVJSX05GX00xMUVSUiB8IFwKIAkJCQkJCQlGRVJSX05GX00xMEVSUiB8IFwKKwkJCQkJCQlGRVJSX05GX005RVJSIHwgXAogCQkJCQkJCUZFUlJfTkZfTThFUlIgfCBcCiAJCQkJCQkJRkVSUl9ORl9NN0VSUiB8IFwKIAkJCQkJCQlGRVJSX05GX002RVJSIHwgXApAQCAtMzAxLDYgKzMwMiw5IEBACiB9OwogI2VuZGlmCiAKKy8qIGVuYWJsZXMgdGhlIHJlcG9ydCBvZiBtaXNjZWxsYW5lb3VzIG1lc3NhZ2VzIGFzIENFIGVycm9ycyAtIGRlZmF1bHQgb2ZmICovCitzdGF0aWMgaW50IG1pc2NfbWVzc2FnZXM7CisKIC8qIEVudW1lcmF0aW9uIG9mIHN1cHBvcnRlZCBkZXZpY2VzICovCiBlbnVtIGk1MDAwX2NoaXBzIHsKIAlJNTAwMFAgPSAwLApAQCAtNDY2LDcgKzQ3MCw4IEBACiAJCQkJCXN0cnVjdCBpNTAwMF9lcnJvcl9pbmZvICppbmZvLAogCQkJCQlpbnQgaGFuZGxlX2Vycm9ycykKIHsKLQljaGFyIG1zZ1tFREFDX01DX0xBQkVMX0xFTiArIDEgKyA5MF07CisJY2hhciBtc2dbRURBQ19NQ19MQUJFTF9MRU4gKyAxICsgMTYwXTsKKwljaGFyICpzcGVjaWZpYyA9IE5VTEw7CiAJdTMyIGFsbEVycm9yczsKIAlpbnQgYnJhbmNoOwogCWludCBjaGFubmVsOwpAQCAtNDgwLDExICs0ODUsNiBAQAogCWlmICghYWxsRXJyb3JzKQogCQlyZXR1cm47CQkvKiBpZiBubyBlcnJvciwgcmV0dXJuIG5vdyAqLwogCi0JLyogT05MWSBPTkUgb2YgdGhlIHBvc3NpYmxlIGVycm9yIGJpdHMgd2lsbCBiZSBzZXQsIGFzIHBlciB0aGUgZG9jcyAqLwotCWk1MDAwX21jX3ByaW50ayhtY2ksIEtFUk5fRVJSLAotCQkJIkZBVEFMIEVSUk9SUyBGb3VuZCEhISAxc3QgRkFUQUwgRXJyIFJlZz0gMHgleFxuIiwKLQkJCWFsbEVycm9ycyk7Ci0KIAlicmFuY2ggPSBFWFRSQUNUX0ZCRENIQU5fSU5EWChpbmZvLT5mZXJyX2ZhdF9mYmQpOwogCWNoYW5uZWwgPSBicmFuY2g7CiAKQEAgLTUwMSwyOCArNTAxLDQyIEBACiAJCXJkd3IgPyAiV3JpdGUiIDogIlJlYWQiLCByYXMsIGNhcyk7CiAKIAkvKiBPbmx5IDEgYml0IHdpbGwgYmUgb24gKi8KLQlpZiAoYWxsRXJyb3JzICYgRkVSUl9GQVRfTTFFUlIpIHsKLQkJaTUwMDBfbWNfcHJpbnRrKG1jaSwgS0VSTl9FUlIsCi0JCQkJIkFsZXJ0IG9uIG5vbi1yZWR1bmRhbnQgcmV0cnkgb3IgZmFzdCAiCi0JCQkJInJlc2V0IHRpbWVvdXRcbiIpOworCXN3aXRjaCAoYWxsRXJyb3JzKSB7CisJY2FzZSBGRVJSX0ZBVF9NMUVSUjoKKwkJc3BlY2lmaWMgPSAiQWxlcnQgb24gbm9uLXJlZHVuZGFudCByZXRyeSBvciBmYXN0ICIKKwkJCQkicmVzZXQgdGltZW91dCI7CisJCWJyZWFrOworCWNhc2UgRkVSUl9GQVRfTTJFUlI6CisJCXNwZWNpZmljID0gIk5vcnRoYm91bmQgQ1JDIGVycm9yIG9uIG5vbi1yZWR1bmRhbnQgIgorCQkJCSJyZXRyeSI7CisJCWJyZWFrOworCWNhc2UgRkVSUl9GQVRfTTNFUlI6CisJCXsKKwkJc3RhdGljIGludCBkb25lOwogCi0JfSBlbHNlIGlmIChhbGxFcnJvcnMgJiBGRVJSX0ZBVF9NMkVSUikgewotCQlpNTAwMF9tY19wcmludGsobWNpLCBLRVJOX0VSUiwKLQkJCQkiTm9ydGhib3VuZCBDUkMgZXJyb3Igb24gbm9uLXJlZHVuZGFudCAiCi0JCQkJInJldHJ5XG4iKTsKKwkJLyoKKwkJICogVGhpcyBlcnJvciBpcyBnZW5lcmF0ZWQgdG8gaW5mb3JtIHRoYXQgdGhlIGludGVsbGlnZW50CisJCSAqIHRocm90dGxpbmcgaXMgZGlzYWJsZWQgYW5kIHRoZSB0ZW1wZXJhdHVyZSBwYXNzZWQgdGhlCisJCSAqIHNwZWNpZmllZCBtaWRkbGUgcG9pbnQuIFNpbmNlIHRoaXMgaXMgc29tZXRoaW5nIHRoZSBCSU9TCisJCSAqIHNob3VsZCB0YWtlIGNhcmUgb2YsIHdlJ2xsIHdhcm4gb25seSBvbmNlIHRvIGF2b2lkCisJCSAqIHdvcnRobGVzc2x5IGZsb29kaW5nIHRoZSBsb2cuCisJCSAqLworCQlpZiAoZG9uZSkKKwkJCXJldHVybjsKKwkJZG9uZSsrOwogCi0JfSBlbHNlIGlmIChhbGxFcnJvcnMgJiBGRVJSX0ZBVF9NM0VSUikgewotCQlpNTAwMF9tY19wcmludGsobWNpLCBLRVJOX0VSUiwKLQkJCQkiPlRtaWQgVGhlcm1hbCBldmVudCB3aXRoIGludGVsbGlnZW50ICIKLQkJCQkidGhyb3R0bGluZyBkaXNhYmxlZFxuIik7CisJCXNwZWNpZmljID0gIj5UbWlkIFRoZXJtYWwgZXZlbnQgd2l0aCBpbnRlbGxpZ2VudCAiCisJCQkgICAidGhyb3R0bGluZyBkaXNhYmxlZCI7CisJCX0KKwkJYnJlYWs7CiAJfQogCiAJLyogRm9ybSBvdXQgbWVzc2FnZSAqLwogCXNucHJpbnRmKG1zZywgc2l6ZW9mKG1zZyksCiAJCSAiKEJyYW5jaD0lZCBEUkFNLUJhbms9JWQgUkRXUj0lcyBSQVM9JWQgQ0FTPSVkICIKLQkJICJGQVRBTCBFcnI9MHgleCkiLAorCQkgIkZBVEFMIEVycj0weCV4ICglcykpIiwKIAkJIGJyYW5jaCA+PiAxLCBiYW5rLCByZHdyID8gIldyaXRlIiA6ICJSZWFkIiwgcmFzLCBjYXMsCi0JCSBhbGxFcnJvcnMpOworCQkgYWxsRXJyb3JzLCBzcGVjaWZpYyk7CiAKIAkvKiBDYWxsIHRoZSBoZWxwZXIgdG8gb3V0cHV0IG1lc3NhZ2UgKi8KIAllZGFjX21jX2hhbmRsZV9mYmRfdWUobWNpLCByYW5rLCBjaGFubmVsLCBjaGFubmVsICsgMSwgbXNnKTsKQEAgLTUzOSw3ICs1NTMsOCBAQAogCQkJCQlzdHJ1Y3QgaTUwMDBfZXJyb3JfaW5mbyAqaW5mbywKIAkJCQkJaW50IGhhbmRsZV9lcnJvcnMpCiB7Ci0JY2hhciBtc2dbRURBQ19NQ19MQUJFTF9MRU4gKyAxICsgOTBdOworCWNoYXIgbXNnW0VEQUNfTUNfTEFCRUxfTEVOICsgMSArIDE3MF07CisJY2hhciAqc3BlY2lmaWMgPSBOVUxMOwogCXUzMiBhbGxFcnJvcnM7CiAJdTMyIHVlX2Vycm9yczsKIAl1MzIgY2VfZXJyb3JzOwpAQCAtNTU3LDEwICs1NzIsNiBAQAogCQlyZXR1cm47CQkvKiBpZiBubyBlcnJvciwgcmV0dXJuIG5vdyAqLwogCiAJLyogT05MWSBPTkUgb2YgdGhlIHBvc3NpYmxlIGVycm9yIGJpdHMgd2lsbCBiZSBzZXQsIGFzIHBlciB0aGUgZG9jcyAqLwotCWk1MDAwX21jX3ByaW50ayhtY2ksIEtFUk5fV0FSTklORywKLQkJCSJOT04tRkFUQUwgRVJST1JTIEZvdW5kISEhIDFzdCBOT04tRkFUQUwgRXJyICIKLQkJCSJSZWc9IDB4JXhcbiIsIGFsbEVycm9ycyk7Ci0KIAl1ZV9lcnJvcnMgPSBhbGxFcnJvcnMgJiBGRVJSX05GX1VOQ09SUkVDVEFCTEU7CiAJaWYgKHVlX2Vycm9ycykgewogCQlkZWJ1Z2YwKCJcdFVuY29ycmVjdGVkIGJpdHM9IDB4JXhcbiIsIHVlX2Vycm9ycyk7CkBAIC01NzksMTIgKzU5MCw0NyBAQAogCQkJcmFuaywgY2hhbm5lbCwgY2hhbm5lbCArIDEsIGJyYW5jaCA+PiAxLCBiYW5rLAogCQkJcmR3ciA/ICJXcml0ZSIgOiAiUmVhZCIsIHJhcywgY2FzKTsKIAorCQlzd2l0Y2ggKHVlX2Vycm9ycykgeworCQljYXNlIEZFUlJfTkZfTTEyRVJSOgorCQkJc3BlY2lmaWMgPSAiTm9uLUFsaWFzZWQgVW5jb3JyZWN0YWJsZSBQYXRyb2wgRGF0YSBFQ0MiOworCQkJYnJlYWs7CisJCWNhc2UgRkVSUl9ORl9NMTFFUlI6CisJCQlzcGVjaWZpYyA9ICJOb24tQWxpYXNlZCBVbmNvcnJlY3RhYmxlIFNwYXJlLUNvcHkgIgorCQkJCQkiRGF0YSBFQ0MiOworCQkJYnJlYWs7CisJCWNhc2UgRkVSUl9ORl9NMTBFUlI6CisJCQlzcGVjaWZpYyA9ICJOb24tQWxpYXNlZCBVbmNvcnJlY3RhYmxlIE1pcnJvcmVkIERlbWFuZCAiCisJCQkJCSJEYXRhIEVDQyI7CisJCQlicmVhazsKKwkJY2FzZSBGRVJSX05GX005RVJSOgorCQkJc3BlY2lmaWMgPSAiTm9uLUFsaWFzZWQgVW5jb3JyZWN0YWJsZSBOb24tTWlycm9yZWQgIgorCQkJCQkiRGVtYW5kIERhdGEgRUNDIjsKKwkJCWJyZWFrOworCQljYXNlIEZFUlJfTkZfTThFUlI6CisJCQlzcGVjaWZpYyA9ICJBbGlhc2VkIFVuY29ycmVjdGFibGUgUGF0cm9sIERhdGEgRUNDIjsKKwkJCWJyZWFrOworCQljYXNlIEZFUlJfTkZfTTdFUlI6CisJCQlzcGVjaWZpYyA9ICJBbGlhc2VkIFVuY29ycmVjdGFibGUgU3BhcmUtQ29weSBEYXRhIEVDQyI7CisJCQlicmVhazsKKwkJY2FzZSBGRVJSX05GX002RVJSOgorCQkJc3BlY2lmaWMgPSAiQWxpYXNlZCBVbmNvcnJlY3RhYmxlIE1pcnJvcmVkIERlbWFuZCAiCisJCQkJCSJEYXRhIEVDQyI7CisJCQlicmVhazsKKwkJY2FzZSBGRVJSX05GX001RVJSOgorCQkJc3BlY2lmaWMgPSAiQWxpYXNlZCBVbmNvcnJlY3RhYmxlIE5vbi1NaXJyb3JlZCBEZW1hbmQgIgorCQkJCQkiRGF0YSBFQ0MiOworCQkJYnJlYWs7CisJCWNhc2UgRkVSUl9ORl9NNEVSUjoKKwkJCXNwZWNpZmljID0gIlVuY29ycmVjdGFibGUgRGF0YSBFQ0Mgb24gUmVwbGF5IjsKKwkJCWJyZWFrOworCQl9CisKIAkJLyogRm9ybSBvdXQgbWVzc2FnZSAqLwogCQlzbnByaW50Zihtc2csIHNpemVvZihtc2cpLAogCQkJICIoQnJhbmNoPSVkIERSQU0tQmFuaz0lZCBSRFdSPSVzIFJBUz0lZCAiCi0JCQkgIkNBUz0lZCwgVUUgRXJyPTB4JXgpIiwKKwkJCSAiQ0FTPSVkLCBVRSBFcnI9MHgleCAoJXMpKSIsCiAJCQkgYnJhbmNoID4+IDEsIGJhbmssIHJkd3IgPyAiV3JpdGUiIDogIlJlYWQiLCByYXMsIGNhcywKLQkJCSB1ZV9lcnJvcnMpOworCQkJIHVlX2Vycm9ycywgc3BlY2lmaWMpOwogCiAJCS8qIENhbGwgdGhlIGhlbHBlciB0byBvdXRwdXQgbWVzc2FnZSAqLwogCQllZGFjX21jX2hhbmRsZV9mYmRfdWUobWNpLCByYW5rLCBjaGFubmVsLCBjaGFubmVsICsgMSwgbXNnKTsKQEAgLTYxNiw1MSArNjYyLDc0IEBACiAJCQlyYW5rLCBjaGFubmVsLCBicmFuY2ggPj4gMSwgYmFuaywKIAkJCXJkd3IgPyAiV3JpdGUiIDogIlJlYWQiLCByYXMsIGNhcyk7CiAKKwkJc3dpdGNoIChjZV9lcnJvcnMpIHsKKwkJY2FzZSBGRVJSX05GX00xN0VSUjoKKwkJCXNwZWNpZmljID0gIkNvcnJlY3RhYmxlIE5vbi1NaXJyb3JlZCBEZW1hbmQgRGF0YSBFQ0MiOworCQkJYnJlYWs7CisJCWNhc2UgRkVSUl9ORl9NMThFUlI6CisJCQlzcGVjaWZpYyA9ICJDb3JyZWN0YWJsZSBNaXJyb3JlZCBEZW1hbmQgRGF0YSBFQ0MiOworCQkJYnJlYWs7CisJCWNhc2UgRkVSUl9ORl9NMTlFUlI6CisJCQlzcGVjaWZpYyA9ICJDb3JyZWN0YWJsZSBTcGFyZS1Db3B5IERhdGEgRUNDIjsKKwkJCWJyZWFrOworCQljYXNlIEZFUlJfTkZfTTIwRVJSOgorCQkJc3BlY2lmaWMgPSAiQ29ycmVjdGFibGUgUGF0cm9sIERhdGEgRUNDIjsKKwkJCWJyZWFrOworCQl9CisKIAkJLyogRm9ybSBvdXQgbWVzc2FnZSAqLwogCQlzbnByaW50Zihtc2csIHNpemVvZihtc2cpLAogCQkJICIoQnJhbmNoPSVkIERSQU0tQmFuaz0lZCBSRFdSPSVzIFJBUz0lZCAiCi0JCQkgIkNBUz0lZCwgQ0UgRXJyPTB4JXgpIiwgYnJhbmNoID4+IDEsIGJhbmssCi0JCQkgcmR3ciA/ICJXcml0ZSIgOiAiUmVhZCIsIHJhcywgY2FzLCBjZV9lcnJvcnMpOworCQkJICJDQVM9JWQsIENFIEVycj0weCV4ICglcykpIiwgYnJhbmNoID4+IDEsIGJhbmssCisJCQkgcmR3ciA/ICJXcml0ZSIgOiAiUmVhZCIsIHJhcywgY2FzLCBjZV9lcnJvcnMsCisJCQkgc3BlY2lmaWMpOwogCiAJCS8qIENhbGwgdGhlIGhlbHBlciB0byBvdXRwdXQgbWVzc2FnZSAqLwogCQllZGFjX21jX2hhbmRsZV9mYmRfY2UobWNpLCByYW5rLCBjaGFubmVsLCBtc2cpOwogCX0KIAotCS8qIFNlZSBpZiBhbnkgb2YgdGhlIHRoZXJtYWwgZXJyb3JzIGhhdmUgZmlyZWQgKi8KLQltaXNjX2Vycm9ycyA9IGFsbEVycm9ycyAmIEZFUlJfTkZfVEhFUk1BTDsKLQlpZiAobWlzY19lcnJvcnMpIHsKLQkJaTUwMDBfcHJpbnRrKEtFUk5fV0FSTklORywgIlx0VEhFUk1BTCBFcnJvciwgYml0cz0gMHgleFxuIiwKLQkJCW1pc2NfZXJyb3JzKTsKLQl9CisJaWYgKCFtaXNjX21lc3NhZ2VzKQorCQlyZXR1cm47CiAKLQkvKiBTZWUgaWYgYW55IG9mIHRoZSB0aGVybWFsIGVycm9ycyBoYXZlIGZpcmVkICovCi0JbWlzY19lcnJvcnMgPSBhbGxFcnJvcnMgJiBGRVJSX05GX05PTl9SRVRSWTsKKwltaXNjX2Vycm9ycyA9IGFsbEVycm9ycyAmIChGRVJSX05GX05PTl9SRVRSWSB8IEZFUlJfTkZfTk9SVEhfQ1JDIHwKKwkJCQkgICBGRVJSX05GX1NQRF9QUk9UT0NPTCB8IEZFUlJfTkZfRElNTV9TUEFSRSk7CiAJaWYgKG1pc2NfZXJyb3JzKSB7Ci0JCWk1MDAwX3ByaW50ayhLRVJOX1dBUk5JTkcsICJcdE5PTi1SZXRyeSAgRXJyb3JzLCBiaXRzPSAweCV4XG4iLAotCQkJbWlzY19lcnJvcnMpOwotCX0KKwkJc3dpdGNoIChtaXNjX2Vycm9ycykgeworCQljYXNlIEZFUlJfTkZfTTEzRVJSOgorCQkJc3BlY2lmaWMgPSAiTm9uLVJldHJ5IG9yIFJlZHVuZGFudCBSZXRyeSBGQkQgTWVtb3J5ICIKKwkJCQkJIkFsZXJ0IG9yIFJlZHVuZGFudCBGYXN0IFJlc2V0IFRpbWVvdXQiOworCQkJYnJlYWs7CisJCWNhc2UgRkVSUl9ORl9NMTRFUlI6CisJCQlzcGVjaWZpYyA9ICJOb24tUmV0cnkgb3IgUmVkdW5kYW50IFJldHJ5IEZCRCAiCisJCQkJCSJDb25maWd1cmF0aW9uIEFsZXJ0IjsKKwkJCWJyZWFrOworCQljYXNlIEZFUlJfTkZfTTE1RVJSOgorCQkJc3BlY2lmaWMgPSAiTm9uLVJldHJ5IG9yIFJlZHVuZGFudCBSZXRyeSBGQkQgIgorCQkJCQkiTm9ydGhib3VuZCBDUkMgZXJyb3Igb24gcmVhZCBkYXRhIjsKKwkJCWJyZWFrOworCQljYXNlIEZFUlJfTkZfTTIxRVJSOgorCQkJc3BlY2lmaWMgPSAiRkJEIE5vcnRoYm91bmQgQ1JDIGVycm9yIG9uICIKKwkJCQkJIkZCRCBTeW5jIFN0YXR1cyI7CisJCQlicmVhazsKKwkJY2FzZSBGRVJSX05GX00yMkVSUjoKKwkJCXNwZWNpZmljID0gIlNQRCBwcm90b2NvbCBlcnJvciI7CisJCQlicmVhazsKKwkJY2FzZSBGRVJSX05GX00yN0VSUjoKKwkJCXNwZWNpZmljID0gIkRJTU0tc3BhcmUgY29weSBzdGFydGVkIjsKKwkJCWJyZWFrOworCQljYXNlIEZFUlJfTkZfTTI4RVJSOgorCQkJc3BlY2lmaWMgPSAiRElNTS1zcGFyZSBjb3B5IGNvbXBsZXRlZCI7CisJCQlicmVhazsKKwkJfQorCQlicmFuY2ggPSBFWFRSQUNUX0ZCRENIQU5fSU5EWChpbmZvLT5mZXJyX25mX2ZiZCk7CiAKLQkvKiBTZWUgaWYgYW55IG9mIHRoZSB0aGVybWFsIGVycm9ycyBoYXZlIGZpcmVkICovCi0JbWlzY19lcnJvcnMgPSBhbGxFcnJvcnMgJiBGRVJSX05GX05PUlRIX0NSQzsKLQlpZiAobWlzY19lcnJvcnMpIHsKLQkJaTUwMDBfcHJpbnRrKEtFUk5fV0FSTklORywKLQkJCSJcdE5PUlRIQk9VTkQgQ1JDICBFcnJvciwgYml0cz0gMHgleFxuIiwKLQkJCW1pc2NfZXJyb3JzKTsKLQl9CisJCS8qIEZvcm0gb3V0IG1lc3NhZ2UgKi8KKwkJc25wcmludGYobXNnLCBzaXplb2YobXNnKSwKKwkJCSAiKEJyYW5jaD0lZCBFcnI9JSN4ICglcykpIiwgYnJhbmNoID4+IDEsCisJCQkgbWlzY19lcnJvcnMsIHNwZWNpZmljKTsKIAotCS8qIFNlZSBpZiBhbnkgb2YgdGhlIHRoZXJtYWwgZXJyb3JzIGhhdmUgZmlyZWQgKi8KLQltaXNjX2Vycm9ycyA9IGFsbEVycm9ycyAmIEZFUlJfTkZfU1BEX1BST1RPQ09MOwotCWlmIChtaXNjX2Vycm9ycykgewotCQlpNTAwMF9wcmludGsoS0VSTl9XQVJOSU5HLAotCQkJIlx0U1BEIFByb3RvY29sICBFcnJvciwgYml0cz0gMHgleFxuIiwKLQkJCW1pc2NfZXJyb3JzKTsKLQl9Ci0KLQkvKiBTZWUgaWYgYW55IG9mIHRoZSB0aGVybWFsIGVycm9ycyBoYXZlIGZpcmVkICovCi0JbWlzY19lcnJvcnMgPSBhbGxFcnJvcnMgJiBGRVJSX05GX0RJTU1fU1BBUkU7Ci0JaWYgKG1pc2NfZXJyb3JzKSB7Ci0JCWk1MDAwX3ByaW50ayhLRVJOX1dBUk5JTkcsICJcdERJTU0tU3BhcmUgIEVycm9yLCBiaXRzPSAweCV4XG4iLAotCQkJbWlzY19lcnJvcnMpOworCQkvKiBDYWxsIHRoZSBoZWxwZXIgdG8gb3V0cHV0IG1lc3NhZ2UgKi8KKwkJZWRhY19tY19oYW5kbGVfZmJkX2NlKG1jaSwgMCwgMCwgbXNnKTsKIAl9CiB9CiAKQEAgLTE0OTcsMyArMTU2Niw2IEBACiAKIG1vZHVsZV9wYXJhbShlZGFjX29wX3N0YXRlLCBpbnQsIDA0NDQpOwogTU9EVUxFX1BBUk1fREVTQyhlZGFjX29wX3N0YXRlLCAiRURBQyBFcnJvciBSZXBvcnRpbmcgc3RhdGU6IDA9UG9sbCwxPU5NSSIpOworbW9kdWxlX3BhcmFtKG1pc2NfbWVzc2FnZXMsIGludCwgMDQ0NCk7CitNT0RVTEVfUEFSTV9ERVNDKG1pc2NfbWVzc2FnZXMsICJMb2cgbWlzY2VsbGFuZW91cyBub24gZmF0YWwgbWVzc2FnZXMiKTsKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9lZGFjL2k4MjQ0M2J4Z3hfZWRhYy5jIGIvZHJpdmVycy9lZGFjL2k4MjQ0M2J4Z3hfZWRhYy5jCmluZGV4IGM1MzA1ZTMuLjU3Nzc2MGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZWRhYy9pODI0NDNieGd4X2VkYWMuYworKysgYi9kcml2ZXJzL2VkYWMvaTgyNDQzYnhneF9lZGFjLmMKQEAgLTExNCw2ICsxMTQsMTIgQEAKIAogc3RhdGljIHN0cnVjdCBlZGFjX3BjaV9jdGxfaW5mbyAqaTgyNDQzYnhneF9wY2k7CiAKK3N0YXRpYyBzdHJ1Y3QgcGNpX2RldiAqbWNpX3BkZXY7CS8qIGluaXQgZGV2OiBpbiBjYXNlIHRoYXQgQUdQIGNvZGUgaGFzCisJCQkJCSAqIGFscmVhZHkgcmVnaXN0ZXJlZCBkcml2ZXIKKwkJCQkJICovCisKK3N0YXRpYyBpbnQgaTgyNDQzYnhneF9yZWdpc3RlcmVkID0gMTsKKwogc3RhdGljIHZvaWQgaTgyNDQzYnhneF9lZGFjbWNfZ2V0X2Vycm9yX2luZm8oc3RydWN0IG1lbV9jdGxfaW5mbyAqbWNpLAogCQkJCXN0cnVjdCBpODI0NDNieGd4X2VkYWNtY19lcnJvcl9pbmZvCiAJCQkJKmluZm8pCkBAIC0zNDUsMTAgKzM1MSwxNyBAQAogc3RhdGljIGludCBfX2RldmluaXQgaTgyNDQzYnhneF9lZGFjbWNfaW5pdF9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsCiAJCQkJCQljb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KQogeworCWludCByYzsKKwogCWRlYnVnZjAoIk1DOiAiIF9fRklMRV9fICI6ICVzKClcbiIsIF9fZnVuY19fKTsKIAogCS8qIGRvbid0IG5lZWQgdG8gY2FsbCBwY2lfZGV2aWNlX2VuYWJsZSgpICovCi0JcmV0dXJuIGk4MjQ0M2J4Z3hfZWRhY21jX3Byb2JlMShwZGV2LCBlbnQtPmRyaXZlcl9kYXRhKTsKKwlyYyA9IGk4MjQ0M2J4Z3hfZWRhY21jX3Byb2JlMShwZGV2LCBlbnQtPmRyaXZlcl9kYXRhKTsKKworCWlmIChtY2lfcGRldiA9PSBOVUxMKQorCQltY2lfcGRldiA9IHBjaV9kZXZfZ2V0KHBkZXYpOworCisJcmV0dXJuIHJjOwogfQogCiBzdGF0aWMgdm9pZCBfX2RldmV4aXQgaTgyNDQzYnhneF9lZGFjbWNfcmVtb3ZlX29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKQEAgLTM4NywxNSArNDAwLDYxIEBACiAKIHN0YXRpYyBpbnQgX19pbml0IGk4MjQ0M2J4Z3hfZWRhY21jX2luaXQodm9pZCkKIHsKKwlpbnQgcGNpX3JjOwogICAgICAgIC8qIEVuc3VyZSB0aGF0IHRoZSBPUFNUQVRFIGlzIHNldCBjb3JyZWN0bHkgZm9yIFBPTEwgb3IgTk1JICovCiAgICAgICAgb3BzdGF0ZV9pbml0KCk7CiAKLQlyZXR1cm4gcGNpX3JlZ2lzdGVyX2RyaXZlcigmaTgyNDQzYnhneF9lZGFjbWNfZHJpdmVyKTsKKwlwY2lfcmMgPSBwY2lfcmVnaXN0ZXJfZHJpdmVyKCZpODI0NDNieGd4X2VkYWNtY19kcml2ZXIpOworCWlmIChwY2lfcmMgPCAwKQorCQlnb3RvIGZhaWwwOworCisJaWYgKG1jaV9wZGV2ID09IE5VTEwpIHsKKwkJY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkID0gJmk4MjQ0M2J4Z3hfcGNpX3RibFswXTsKKwkJaW50IGkgPSAwOworCQlpODI0NDNieGd4X3JlZ2lzdGVyZWQgPSAwOworCisJCXdoaWxlIChtY2lfcGRldiA9PSBOVUxMICYmIGlkLT52ZW5kb3IgIT0gMCkgeworCQkJbWNpX3BkZXYgPSBwY2lfZ2V0X2RldmljZShpZC0+dmVuZG9yLAorCQkJCQlpZC0+ZGV2aWNlLCBOVUxMKTsKKwkJCWkrKzsKKwkJCWlkID0gJmk4MjQ0M2J4Z3hfcGNpX3RibFtpXTsKKwkJfQorCQlpZiAoIW1jaV9wZGV2KSB7CisJCQlkZWJ1Z2YwKCJpODI0NDNieGd4IHBjaV9nZXRfZGV2aWNlIGZhaWxcbiIpOworCQkJcGNpX3JjID0gLUVOT0RFVjsKKwkJCWdvdG8gZmFpbDE7CisJCX0KKworCQlwY2lfcmMgPSBpODI0NDNieGd4X2VkYWNtY19pbml0X29uZShtY2lfcGRldiwgaTgyNDQzYnhneF9wY2lfdGJsKTsKKworCQlpZiAocGNpX3JjIDwgMCkgeworCQkJZGVidWdmMCgiaTgyNDQzYnhneCBpbml0IGZhaWxcbiIpOworCQkJcGNpX3JjID0gLUVOT0RFVjsKKwkJCWdvdG8gZmFpbDE7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKKworZmFpbDE6CisJcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZpODI0NDNieGd4X2VkYWNtY19kcml2ZXIpOworCitmYWlsMDoKKwlpZiAobWNpX3BkZXYgIT0gTlVMTCkKKwkJcGNpX2Rldl9wdXQobWNpX3BkZXYpOworCisJcmV0dXJuIHBjaV9yYzsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IGk4MjQ0M2J4Z3hfZWRhY21jX2V4aXQodm9pZCkKIHsKIAlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJmk4MjQ0M2J4Z3hfZWRhY21jX2RyaXZlcik7CisKKwlpZiAoIWk4MjQ0M2J4Z3hfcmVnaXN0ZXJlZCkKKwkJaTgyNDQzYnhneF9lZGFjbWNfcmVtb3ZlX29uZShtY2lfcGRldik7CisKKwlpZiAobWNpX3BkZXYpCisJCXBjaV9kZXZfcHV0KG1jaV9wZGV2KTsKIH0KIAogbW9kdWxlX2luaXQoaTgyNDQzYnhneF9lZGFjbWNfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2VkYWMvbXBjODV4eF9lZGFjLmMgYi9kcml2ZXJzL2VkYWMvbXBjODV4eF9lZGFjLmMKaW5kZXggMjI2NWQ5Yy4uMGNmY2IyZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9lZGFjL21wYzg1eHhfZWRhYy5jCisrKyBiL2RyaXZlcnMvZWRhYy9tcGM4NXh4X2VkYWMuYwpAQCAtMTcsNiArMTcsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kX2RldmljZXRhYmxlLmg+CiAjaW5jbHVkZSA8bGludXgvZWRhYy5oPgorI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgogCiAjaW5jbHVkZSA8bGludXgvb2ZfcGxhdGZvcm0uaD4KICNpbmNsdWRlIDxsaW51eC9vZl9kZXZpY2UuaD4KQEAgLTQwLDcgKzQxLDcgQEAKICNlbmRpZgogCiBzdGF0aWMgdTMyIG9yaWdfbDJfZXJyX2Rpc2FibGU7Ci1zdGF0aWMgdTMyIG9yaWdfaGlkMTsKK3N0YXRpYyB1MzIgb3JpZ19oaWQxWzJdOwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqIE1DIFNZU0ZTIHBhcnRzICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCkBAIC02NDcsNiArNjQ4LDkgQEAKIAl7CiAJIC5jb21wYXRpYmxlID0gImZzbCw4NTY4LWwyLWNhY2hlLWNvbnRyb2xsZXIiLAogCSB9LAorCXsKKwkgLmNvbXBhdGlibGUgPSAiZnNsLG1wYzg1NzItbDItY2FjaGUtY29udHJvbGxlciIsCisJIH0sCiAJe30sCiB9OwogCkBAIC05MTIsNyArOTE2LDggQEAKIAkJLyogcmVnaXN0ZXIgaW50ZXJydXB0cyAqLwogCQlwZGF0YS0+aXJxID0gaXJxX29mX3BhcnNlX2FuZF9tYXAob3AtPm5vZGUsIDApOwogCQlyZXMgPSBkZXZtX3JlcXVlc3RfaXJxKCZvcC0+ZGV2LCBwZGF0YS0+aXJxLAotCQkJCSAgICAgICBtcGM4NXh4X21jX2lzciwgSVJRRl9ESVNBQkxFRCwKKwkJCQkgICAgICAgbXBjODV4eF9tY19pc3IsCisJCQkJCUlSUUZfRElTQUJMRUQgfCBJUlFGX1NIQVJFRCwKIAkJCQkgICAgICAgIltFREFDXSBNQyBlcnIiLCBtY2kpOwogCQlpZiAocmVzIDwgMCkgewogCQkJcHJpbnRrKEtFUk5fRVJSICIlczogVW5hYmxlIHRvIHJlcXVlc3QgaXJxICVkIGZvciAiCkBAIC05ODAsNiArOTg1LDkgQEAKIAl7CiAJIC5jb21wYXRpYmxlID0gImZzbCw4NTY4LW1lbW9yeS1jb250cm9sbGVyIiwKIAkgfSwKKwl7CisJIC5jb21wYXRpYmxlID0gImZzbCxtcGM4NTcyLW1lbW9yeS1jb250cm9sbGVyIiwKKwkgfSwKIAl7fSwKIH07CiAKQEAgLTk5NSw2ICsxMDAzLDE0IEBACiAJCSAgIH0sCiB9OwogCisKK3N0YXRpYyB2b2lkIF9faW5pdCBtcGM4NXh4X21jX2NsZWFyX3JmeGUodm9pZCAqZGF0YSkKK3sKKwlvcmlnX2hpZDFbc21wX3Byb2Nlc3Nvcl9pZCgpXSA9IG1mc3ByKFNQUk5fSElEMSk7CisJbXRzcHIoU1BSTl9ISUQxLCAob3JpZ19oaWQxW3NtcF9wcm9jZXNzb3JfaWQoKV0gJiB+MHgyMDAwMCkpOworfQorCisKIHN0YXRpYyBpbnQgX19pbml0IG1wYzg1eHhfbWNfaW5pdCh2b2lkKQogewogCWludCByZXMgPSAwOwpAQCAtMTAzMCwxOSArMTA0NiwyMiBAQAogCSAqIG5lZWQgdG8gY2xlYXIgSElEMVtSRlhFXSB0byBkaXNhYmxlIG1hY2hpbmUgY2hlY2sgaW50CiAJICogc28gd2UgY2FuIGNhdGNoIGl0CiAJICovCi0JaWYgKGVkYWNfb3Bfc3RhdGUgPT0gRURBQ19PUFNUQVRFX0lOVCkgewotCQlvcmlnX2hpZDEgPSBtZnNwcihTUFJOX0hJRDEpOwotCQltdHNwcihTUFJOX0hJRDEsIChvcmlnX2hpZDEgJiB+MHgyMDAwMCkpOwotCX0KKwlpZiAoZWRhY19vcF9zdGF0ZSA9PSBFREFDX09QU1RBVEVfSU5UKQorCQlvbl9lYWNoX2NwdShtcGM4NXh4X21jX2NsZWFyX3JmeGUsIE5VTEwsIDApOwogCiAJcmV0dXJuIDA7CiB9CiAKIG1vZHVsZV9pbml0KG1wYzg1eHhfbWNfaW5pdCk7CiAKK3N0YXRpYyB2b2lkIF9fZXhpdCBtcGM4NXh4X21jX3Jlc3RvcmVfaGlkMSh2b2lkICpkYXRhKQoreworCW10c3ByKFNQUk5fSElEMSwgb3JpZ19oaWQxW3NtcF9wcm9jZXNzb3JfaWQoKV0pOworfQorCiBzdGF0aWMgdm9pZCBfX2V4aXQgbXBjODV4eF9tY19leGl0KHZvaWQpCiB7Ci0JbXRzcHIoU1BSTl9ISUQxLCBvcmlnX2hpZDEpOworCW9uX2VhY2hfY3B1KG1wYzg1eHhfbWNfcmVzdG9yZV9oaWQxLCBOVUxMLCAwKTsKICNpZmRlZiBDT05GSUdfUENJCiAJb2ZfdW5yZWdpc3Rlcl9wbGF0Zm9ybV9kcml2ZXIoJm1wYzg1eHhfcGNpX2Vycl9kcml2ZXIpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2ZpcmV3aXJlL2Z3LWNhcmQuYyBiL2RyaXZlcnMvZmlyZXdpcmUvZnctY2FyZC5jCmluZGV4IGJiZDczYTQuLjQxOGMxOGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZmlyZXdpcmUvZnctY2FyZC5jCisrKyBiL2RyaXZlcnMvZmlyZXdpcmUvZnctY2FyZC5jCkBAIC0xODksMzkgKzE4OSwxNiBAQAogCTYzLCA1LCA3LCA4LCAxMCwgMTMsIDE2LCAxOCwgMjEsIDI0LCAyNiwgMjksIDMyLCAzNSwgMzcsIDQwCiB9OwogCi1zdHJ1Y3QgYm1fZGF0YSB7Ci0Jc3RydWN0IGZ3X3RyYW5zYWN0aW9uIHQ7Ci0Jc3RydWN0IHsKLQkJX19iZTMyIGFyZzsKLQkJX19iZTMyIGRhdGE7Ci0JfSBsb2NrOwotCXUzMiBvbGQ7Ci0JaW50IHJjb2RlOwotCXN0cnVjdCBjb21wbGV0aW9uIGRvbmU7Ci19OwotCi1zdGF0aWMgdm9pZAotY29tcGxldGVfYm1fbG9jayhzdHJ1Y3QgZndfY2FyZCAqY2FyZCwgaW50IHJjb2RlLAotCQkgdm9pZCAqcGF5bG9hZCwgc2l6ZV90IGxlbmd0aCwgdm9pZCAqZGF0YSkKLXsKLQlzdHJ1Y3QgYm1fZGF0YSAqYm1kID0gZGF0YTsKLQotCWlmIChyY29kZSA9PSBSQ09ERV9DT01QTEVURSkKLQkJYm1kLT5vbGQgPSBiZTMyX3RvX2NwdSgqKF9fYmUzMiAqKSBwYXlsb2FkKTsKLQlibWQtPnJjb2RlID0gcmNvZGU7Ci0JY29tcGxldGUoJmJtZC0+ZG9uZSk7Ci19Ci0KIHN0YXRpYyB2b2lkCiBmd19jYXJkX2JtX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogewogCXN0cnVjdCBmd19jYXJkICpjYXJkID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBmd19jYXJkLCB3b3JrLndvcmspOwogCXN0cnVjdCBmd19kZXZpY2UgKnJvb3RfZGV2aWNlOwogCXN0cnVjdCBmd19ub2RlICpyb290X25vZGUsICpsb2NhbF9ub2RlOwotCXN0cnVjdCBibV9kYXRhIGJtZDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWludCByb290X2lkLCBuZXdfcm9vdF9pZCwgaXJtX2lkLCBnYXBfY291bnQsIGdlbmVyYXRpb24sIGdyYWNlOworCWludCByb290X2lkLCBuZXdfcm9vdF9pZCwgaXJtX2lkLCBnYXBfY291bnQsIGdlbmVyYXRpb24sIGdyYWNlLCByY29kZTsKIAlib29sIGRvX3Jlc2V0ID0gZmFsc2U7CisJX19iZTMyIGxvY2tfZGF0YVsyXTsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZjYXJkLT5sb2NrLCBmbGFncyk7CiAJbG9jYWxfbm9kZSA9IGNhcmQtPmxvY2FsX25vZGU7CkBAIC0yNjMsMzMgKzI0MCwyOCBAQAogCQkJZ290byBwaWNrX21lOwogCQl9CiAKLQkJYm1kLmxvY2suYXJnID0gY3B1X3RvX2JlMzIoMHgzZik7Ci0JCWJtZC5sb2NrLmRhdGEgPSBjcHVfdG9fYmUzMihsb2NhbF9ub2RlLT5ub2RlX2lkKTsKKwkJbG9ja19kYXRhWzBdID0gY3B1X3RvX2JlMzIoMHgzZik7CisJCWxvY2tfZGF0YVsxXSA9IGNwdV90b19iZTMyKGxvY2FsX25vZGUtPm5vZGVfaWQpOwogCiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNhcmQtPmxvY2ssIGZsYWdzKTsKIAotCQlpbml0X2NvbXBsZXRpb24oJmJtZC5kb25lKTsKLQkJZndfc2VuZF9yZXF1ZXN0KGNhcmQsICZibWQudCwgVENPREVfTE9DS19DT01QQVJFX1NXQVAsCi0JCQkJaXJtX2lkLCBnZW5lcmF0aW9uLAotCQkJCVNDT0RFXzEwMCwgQ1NSX1JFR0lTVEVSX0JBU0UgKyBDU1JfQlVTX01BTkFHRVJfSUQsCi0JCQkJJmJtZC5sb2NrLCBzaXplb2YoYm1kLmxvY2spLAotCQkJCWNvbXBsZXRlX2JtX2xvY2ssICZibWQpOwotCQl3YWl0X2Zvcl9jb21wbGV0aW9uKCZibWQuZG9uZSk7CisJCXJjb2RlID0gZndfcnVuX3RyYW5zYWN0aW9uKGNhcmQsIFRDT0RFX0xPQ0tfQ09NUEFSRV9TV0FQLAorCQkJCWlybV9pZCwgZ2VuZXJhdGlvbiwgU0NPREVfMTAwLAorCQkJCUNTUl9SRUdJU1RFUl9CQVNFICsgQ1NSX0JVU19NQU5BR0VSX0lELAorCQkJCWxvY2tfZGF0YSwgc2l6ZW9mKGxvY2tfZGF0YSkpOwogCi0JCWlmIChibWQucmNvZGUgPT0gUkNPREVfR0VORVJBVElPTikgewotCQkJLyoKLQkJCSAqIEFub3RoZXIgYnVzIHJlc2V0IGhhcHBlbmVkLiBKdXN0IHJldHVybiwKLQkJCSAqIHRoZSBCTSB3b3JrIGhhcyBiZWVuIHJlc2NoZWR1bGVkLgotCQkJICovCisJCWlmIChyY29kZSA9PSBSQ09ERV9HRU5FUkFUSU9OKQorCQkJLyogQW5vdGhlciBidXMgcmVzZXQsIEJNIHdvcmsgaGFzIGJlZW4gcmVzY2hlZHVsZWQuICovCiAJCQlnb3RvIG91dDsKLQkJfQogCi0JCWlmIChibWQucmNvZGUgPT0gUkNPREVfQ09NUExFVEUgJiYgYm1kLm9sZCAhPSAweDNmKQorCQlpZiAocmNvZGUgPT0gUkNPREVfQ09NUExFVEUgJiYKKwkJICAgIGxvY2tfZGF0YVswXSAhPSBjcHVfdG9fYmUzMigweDNmKSkKIAkJCS8qIFNvbWVib2R5IGVsc2UgaXMgQk0sIGxldCB0aGVtIGRvIHRoZSB3b3JrLiAqLwogCQkJZ290byBvdXQ7CiAKIAkJc3Bpbl9sb2NrX2lycXNhdmUoJmNhcmQtPmxvY2ssIGZsYWdzKTsKLQkJaWYgKGJtZC5yY29kZSAhPSBSQ09ERV9DT01QTEVURSkgeworCisJCWlmIChyY29kZSAhPSBSQ09ERV9DT01QTEVURSkgewogCQkJLyoKIAkJCSAqIFRoZSBsb2NrIHJlcXVlc3QgZmFpbGVkLCBtYXliZSB0aGUgSVJNCiAJCQkgKiBpc24ndCByZWFsbHkgSVJNIGNhcGFibGUgYWZ0ZXIgYWxsLiBMZXQncwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9maXJld2lyZS9mdy1jZGV2LmMgYi9kcml2ZXJzL2ZpcmV3aXJlL2Z3LWNkZXYuYwppbmRleCAyZTZkNTg0Li5lZDAzMjM0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2ZpcmV3aXJlL2Z3LWNkZXYuYworKysgYi9kcml2ZXJzL2ZpcmV3aXJlL2Z3LWNkZXYuYwpAQCAtNzIwLDggKzcyMCw4IEBACiAjZGVmaW5lIEdFVF9QQVlMT0FEX0xFTkdUSCh2KQkoKHYpICYgMHhmZmZmKQogI2RlZmluZSBHRVRfSU5URVJSVVBUKHYpCSgoKHYpID4+IDE2KSAmIDB4MDEpCiAjZGVmaW5lIEdFVF9TS0lQKHYpCQkoKCh2KSA+PiAxNykgJiAweDAxKQotI2RlZmluZSBHRVRfVEFHKHYpCQkoKCh2KSA+PiAxOCkgJiAweDAyKQotI2RlZmluZSBHRVRfU1kodikJCSgoKHYpID4+IDIwKSAmIDB4MDQpCisjZGVmaW5lIEdFVF9UQUcodikJCSgoKHYpID4+IDE4KSAmIDB4MDMpCisjZGVmaW5lIEdFVF9TWSh2KQkJKCgodikgPj4gMjApICYgMHgwZikKICNkZWZpbmUgR0VUX0hFQURFUl9MRU5HVEgodikJKCgodikgPj4gMjQpICYgMHhmZikKIAogc3RhdGljIGludCBpb2N0bF9xdWV1ZV9pc28oc3RydWN0IGNsaWVudCAqY2xpZW50LCB2b2lkICpidWZmZXIpCkBAIC05MTMsNyArOTEzLDcgQEAKIAkJCXJldHVybiAtRUZBVUxUOwogCX0KIAotCXJldHVybiAwOworCXJldHVybiByZXR2YWw7CiB9CiAKIHN0YXRpYyBsb25nCmRpZmYgLS1naXQgYS9kcml2ZXJzL2ZpcmV3aXJlL2Z3LWRldmljZS5jIGIvZHJpdmVycy9maXJld2lyZS9mdy1kZXZpY2UuYwppbmRleCAwODU1ZmI1Li4zZmNjZGQ0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2ZpcmV3aXJlL2Z3LWRldmljZS5jCisrKyBiL2RyaXZlcnMvZmlyZXdpcmUvZnctZGV2aWNlLmMKQEAgLTM4MSw0NiArMzgxLDIxIEBACiAJX19BVFRSX05VTEwsCiB9OwogCi1zdHJ1Y3QgcmVhZF9xdWFkbGV0X2NhbGxiYWNrX2RhdGEgewotCXN0cnVjdCBjb21wbGV0aW9uIGRvbmU7Ci0JaW50IHJjb2RlOwotCXUzMiBkYXRhOwotfTsKLQotc3RhdGljIHZvaWQKLWNvbXBsZXRlX3RyYW5zYWN0aW9uKHN0cnVjdCBmd19jYXJkICpjYXJkLCBpbnQgcmNvZGUsCi0JCSAgICAgdm9pZCAqcGF5bG9hZCwgc2l6ZV90IGxlbmd0aCwgdm9pZCAqZGF0YSkKLXsKLQlzdHJ1Y3QgcmVhZF9xdWFkbGV0X2NhbGxiYWNrX2RhdGEgKmNhbGxiYWNrX2RhdGEgPSBkYXRhOwotCi0JaWYgKHJjb2RlID09IFJDT0RFX0NPTVBMRVRFKQotCQljYWxsYmFja19kYXRhLT5kYXRhID0gYmUzMl90b19jcHUoKihfX2JlMzIgKilwYXlsb2FkKTsKLQljYWxsYmFja19kYXRhLT5yY29kZSA9IHJjb2RlOwotCWNvbXBsZXRlKCZjYWxsYmFja19kYXRhLT5kb25lKTsKLX0KLQogc3RhdGljIGludAogcmVhZF9yb20oc3RydWN0IGZ3X2RldmljZSAqZGV2aWNlLCBpbnQgZ2VuZXJhdGlvbiwgaW50IGluZGV4LCB1MzIgKmRhdGEpCiB7Ci0Jc3RydWN0IHJlYWRfcXVhZGxldF9jYWxsYmFja19kYXRhIGNhbGxiYWNrX2RhdGE7Ci0Jc3RydWN0IGZ3X3RyYW5zYWN0aW9uIHQ7Ci0JdTY0IG9mZnNldDsKKwlpbnQgcmNvZGU7CiAKIAkvKiBkZXZpY2UtPm5vZGVfaWQsIGFjY2Vzc2VkIGJlbG93LCBtdXN0IG5vdCBiZSBvbGRlciB0aGFuIGdlbmVyYXRpb24gKi8KIAlzbXBfcm1iKCk7CiAKLQlpbml0X2NvbXBsZXRpb24oJmNhbGxiYWNrX2RhdGEuZG9uZSk7Ci0KLQlvZmZzZXQgPSAoQ1NSX1JFR0lTVEVSX0JBU0UgfCBDU1JfQ09ORklHX1JPTSkgKyBpbmRleCAqIDQ7Ci0JZndfc2VuZF9yZXF1ZXN0KGRldmljZS0+Y2FyZCwgJnQsIFRDT0RFX1JFQURfUVVBRExFVF9SRVFVRVNULAorCXJjb2RlID0gZndfcnVuX3RyYW5zYWN0aW9uKGRldmljZS0+Y2FyZCwgVENPREVfUkVBRF9RVUFETEVUX1JFUVVFU1QsCiAJCQlkZXZpY2UtPm5vZGVfaWQsIGdlbmVyYXRpb24sIGRldmljZS0+bWF4X3NwZWVkLAotCQkJb2Zmc2V0LCBOVUxMLCA0LCBjb21wbGV0ZV90cmFuc2FjdGlvbiwgJmNhbGxiYWNrX2RhdGEpOworCQkJKENTUl9SRUdJU1RFUl9CQVNFIHwgQ1NSX0NPTkZJR19ST00pICsgaW5kZXggKiA0LAorCQkJZGF0YSwgNCk7CisJYmUzMl90b19jcHVzKGRhdGEpOwogCi0Jd2FpdF9mb3JfY29tcGxldGlvbigmY2FsbGJhY2tfZGF0YS5kb25lKTsKLQotCSpkYXRhID0gY2FsbGJhY2tfZGF0YS5kYXRhOwotCi0JcmV0dXJuIGNhbGxiYWNrX2RhdGEucmNvZGU7CisJcmV0dXJuIHJjb2RlOwogfQogCiAjZGVmaW5lIFJFQURfQklCX1JPTV9TSVpFCTI1NgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9maXJld2lyZS9mdy1zYnAyLmMgYi9kcml2ZXJzL2ZpcmV3aXJlL2Z3LXNicDIuYwppbmRleCBhYWZmNTBlLi5lZjBiOWI0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2ZpcmV3aXJlL2Z3LXNicDIuYworKysgYi9kcml2ZXJzL2ZpcmV3aXJlL2Z3LXNicDIuYwpAQCAtMjksNiArMjksNyBAQAogICovCiAKICNpbmNsdWRlIDxsaW51eC9ibGtkZXYuaD4KKyNpbmNsdWRlIDxsaW51eC9idWcuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CkBAIC0xODEsMTAgKzE4MiwxNiBAQAogI2RlZmluZSBTQlAyX01BWF9MT0dJTl9PUkJfVElNRU9VVAk0MDAwMFUJLyogVGltZW91dCBpbiBtcyAqLwogI2RlZmluZSBTQlAyX09SQl9USU1FT1VUCQkyMDAwVQkvKiBUaW1lb3V0IGluIG1zICovCiAjZGVmaW5lIFNCUDJfT1JCX05VTEwJCQkweDgwMDAwMDAwCi0jZGVmaW5lIFNCUDJfTUFYX1NHX0VMRU1FTlRfTEVOR1RICTB4ZjAwMAogI2RlZmluZSBTQlAyX1JFVFJZX0xJTUlUCQkweGYJCS8qIDE1IHJldHJpZXMgKi8KICNkZWZpbmUgU0JQMl9DWUNMRV9MSU1JVAkJKDB4YzggPDwgMTIpCS8qIDIwMCAxMjV1cyBjeWNsZXMgKi8KIAorLyoKKyAqIFRoZSBkZWZhdWx0IG1heGltdW0gcy9nIHNlZ21lbnQgc2l6ZSBvZiBhIEZpcmVXaXJlIGNvbnRyb2xsZXIgaXMKKyAqIHVzdWFsbHkgMHgxMDAwMCwgYnV0IFNCUC0yIG9ubHkgYWxsb3dzIDB4ZmZmZi4gU2luY2UgYnVmZmVycyBoYXZlIHRvCisgKiBiZSBxdWFkbGV0LWFsaWduZWQsIHdlIHNldCB0aGUgbGVuZ3RoIGxpbWl0IHRvIDB4ZmZmZiAmIH4zLgorICovCisjZGVmaW5lIFNCUDJfTUFYX1NFR19TSVpFCQkweGZmZmMKKwogLyogVW5pdCBkaXJlY3Rvcnkga2V5cyAqLwogI2RlZmluZSBTQlAyX0NTUl9VTklUX0NIQVJBQ1RFUklTVElDUwkweDNhCiAjZGVmaW5lIFNCUDJfQ1NSX0ZJUk1XQVJFX1JFVklTSU9OCTB4M2MKQEAgLTYyMSwyNSArNjI4LDE1IEBACiAJcmV0dXJuIHJldHZhbDsKIH0KIAotc3RhdGljIHZvaWQKLWNvbXBsZXRlX2FnZW50X3Jlc2V0X3dyaXRlKHN0cnVjdCBmd19jYXJkICpjYXJkLCBpbnQgcmNvZGUsCi0JCQkgICB2b2lkICpwYXlsb2FkLCBzaXplX3QgbGVuZ3RoLCB2b2lkICpkb25lKQotewotCWNvbXBsZXRlKGRvbmUpOwotfQotCiBzdGF0aWMgdm9pZCBzYnAyX2FnZW50X3Jlc2V0KHN0cnVjdCBzYnAyX2xvZ2ljYWxfdW5pdCAqbHUpCiB7CiAJc3RydWN0IGZ3X2RldmljZSAqZGV2aWNlID0gZndfZGV2aWNlKGx1LT50Z3QtPnVuaXQtPmRldmljZS5wYXJlbnQpOwotCURFQ0xBUkVfQ09NUExFVElPTl9PTlNUQUNLKGRvbmUpOwotCXN0cnVjdCBmd190cmFuc2FjdGlvbiB0OwotCXN0YXRpYyB1MzIgejsKKwlfX2JlMzIgZCA9IDA7CiAKLQlmd19zZW5kX3JlcXVlc3QoZGV2aWNlLT5jYXJkLCAmdCwgVENPREVfV1JJVEVfUVVBRExFVF9SRVFVRVNULAotCQkJbHUtPnRndC0+bm9kZV9pZCwgbHUtPmdlbmVyYXRpb24sIGRldmljZS0+bWF4X3NwZWVkLAotCQkJbHUtPmNvbW1hbmRfYmxvY2tfYWdlbnRfYWRkcmVzcyArIFNCUDJfQUdFTlRfUkVTRVQsCi0JCQkmeiwgc2l6ZW9mKHopLCBjb21wbGV0ZV9hZ2VudF9yZXNldF93cml0ZSwgJmRvbmUpOwotCXdhaXRfZm9yX2NvbXBsZXRpb24oJmRvbmUpOworCWZ3X3J1bl90cmFuc2FjdGlvbihkZXZpY2UtPmNhcmQsIFRDT0RFX1dSSVRFX1FVQURMRVRfUkVRVUVTVCwKKwkJCSAgIGx1LT50Z3QtPm5vZGVfaWQsIGx1LT5nZW5lcmF0aW9uLCBkZXZpY2UtPm1heF9zcGVlZCwKKwkJCSAgIGx1LT5jb21tYW5kX2Jsb2NrX2FnZW50X2FkZHJlc3MgKyBTQlAyX0FHRU5UX1JFU0VULAorCQkJICAgJmQsIHNpemVvZihkKSk7CiB9CiAKIHN0YXRpYyB2b2lkCkBAIC02NTMsNyArNjUwLDcgQEAKIHsKIAlzdHJ1Y3QgZndfZGV2aWNlICpkZXZpY2UgPSBmd19kZXZpY2UobHUtPnRndC0+dW5pdC0+ZGV2aWNlLnBhcmVudCk7CiAJc3RydWN0IGZ3X3RyYW5zYWN0aW9uICp0OwotCXN0YXRpYyB1MzIgejsKKwlzdGF0aWMgX19iZTMyIGQ7CiAKIAl0ID0ga21hbGxvYyhzaXplb2YoKnQpLCBHRlBfQVRPTUlDKTsKIAlpZiAodCA9PSBOVUxMKQpAQCAtNjYyLDcgKzY1OSw3IEBACiAJZndfc2VuZF9yZXF1ZXN0KGRldmljZS0+Y2FyZCwgdCwgVENPREVfV1JJVEVfUVVBRExFVF9SRVFVRVNULAogCQkJbHUtPnRndC0+bm9kZV9pZCwgbHUtPmdlbmVyYXRpb24sIGRldmljZS0+bWF4X3NwZWVkLAogCQkJbHUtPmNvbW1hbmRfYmxvY2tfYWdlbnRfYWRkcmVzcyArIFNCUDJfQUdFTlRfUkVTRVQsCi0JCQkmeiwgc2l6ZW9mKHopLCBjb21wbGV0ZV9hZ2VudF9yZXNldF93cml0ZV9ub193YWl0LCB0KTsKKwkJCSZkLCBzaXplb2YoZCksIGNvbXBsZXRlX2FnZW50X3Jlc2V0X3dyaXRlX25vX3dhaXQsIHQpOwogfQogCiBzdGF0aWMgdm9pZCBzYnAyX3NldF9nZW5lcmF0aW9uKHN0cnVjdCBzYnAyX2xvZ2ljYWxfdW5pdCAqbHUsIGludCBnZW5lcmF0aW9uKQpAQCAtODIzLDEzICs4MjAsNiBAQAogCWtyZWZfcHV0KCZ0Z3QtPmtyZWYsIHNicDJfcmVsZWFzZV90YXJnZXQpOwogfQogCi1zdGF0aWMgdm9pZAotY29tcGxldGVfc2V0X2J1c3lfdGltZW91dChzdHJ1Y3QgZndfY2FyZCAqY2FyZCwgaW50IHJjb2RlLAotCQkJICB2b2lkICpwYXlsb2FkLCBzaXplX3QgbGVuZ3RoLCB2b2lkICpkb25lKQotewotCWNvbXBsZXRlKGRvbmUpOwotfQotCiAvKgogICogV3JpdGUgcmV0cmFuc21pdCByZXRyeSB2YWx1ZXMgaW50byB0aGUgQlVTWV9USU1FT1VUIHJlZ2lzdGVyLgogICogLSBUaGUgc2luZ2xlLXBoYXNlIHJldHJ5IHByb3RvY29sIGlzIHN1cHBvcnRlZCBieSBhbGwgU0JQLTIgZGV2aWNlcywgYnV0IHRoZQpAQCAtODQ5LDE3ICs4MzksMTIgQEAKIHN0YXRpYyB2b2lkIHNicDJfc2V0X2J1c3lfdGltZW91dChzdHJ1Y3Qgc2JwMl9sb2dpY2FsX3VuaXQgKmx1KQogewogCXN0cnVjdCBmd19kZXZpY2UgKmRldmljZSA9IGZ3X2RldmljZShsdS0+dGd0LT51bml0LT5kZXZpY2UucGFyZW50KTsKLQlERUNMQVJFX0NPTVBMRVRJT05fT05TVEFDSyhkb25lKTsKLQlzdHJ1Y3QgZndfdHJhbnNhY3Rpb24gdDsKLQlzdGF0aWMgX19iZTMyIGJ1c3lfdGltZW91dDsKKwlfX2JlMzIgZCA9IGNwdV90b19iZTMyKFNCUDJfQ1lDTEVfTElNSVQgfCBTQlAyX1JFVFJZX0xJTUlUKTsKIAotCWJ1c3lfdGltZW91dCA9IGNwdV90b19iZTMyKFNCUDJfQ1lDTEVfTElNSVQgfCBTQlAyX1JFVFJZX0xJTUlUKTsKLQotCWZ3X3NlbmRfcmVxdWVzdChkZXZpY2UtPmNhcmQsICZ0LCBUQ09ERV9XUklURV9RVUFETEVUX1JFUVVFU1QsCi0JCQlsdS0+dGd0LT5ub2RlX2lkLCBsdS0+Z2VuZXJhdGlvbiwgZGV2aWNlLT5tYXhfc3BlZWQsCi0JCQlDU1JfUkVHSVNURVJfQkFTRSArIENTUl9CVVNZX1RJTUVPVVQsICZidXN5X3RpbWVvdXQsCi0JCQlzaXplb2YoYnVzeV90aW1lb3V0KSwgY29tcGxldGVfc2V0X2J1c3lfdGltZW91dCwgJmRvbmUpOwotCXdhaXRfZm9yX2NvbXBsZXRpb24oJmRvbmUpOworCWZ3X3J1bl90cmFuc2FjdGlvbihkZXZpY2UtPmNhcmQsIFRDT0RFX1dSSVRFX1FVQURMRVRfUkVRVUVTVCwKKwkJCSAgIGx1LT50Z3QtPm5vZGVfaWQsIGx1LT5nZW5lcmF0aW9uLCBkZXZpY2UtPm1heF9zcGVlZCwKKwkJCSAgIENTUl9SRUdJU1RFUl9CQVNFICsgQ1NSX0JVU1lfVElNRU9VVCwKKwkJCSAgICZkLCBzaXplb2YoZCkpOwogfQogCiBzdGF0aWMgdm9pZCBzYnAyX3JlY29ubmVjdChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOwpAQCAtMTEyMSw2ICsxMTA2LDEwIEBACiAJc3RydWN0IFNjc2lfSG9zdCAqc2hvc3Q7CiAJdTMyIG1vZGVsLCBmaXJtd2FyZV9yZXZpc2lvbjsKIAorCWlmIChkbWFfZ2V0X21heF9zZWdfc2l6ZShkZXZpY2UtPmNhcmQtPmRldmljZSkgPiBTQlAyX01BWF9TRUdfU0laRSkKKwkJQlVHX09OKGRtYV9zZXRfbWF4X3NlZ19zaXplKGRldmljZS0+Y2FyZC0+ZGV2aWNlLAorCQkJCQkgICAgU0JQMl9NQVhfU0VHX1NJWkUpKTsKKwogCXNob3N0ID0gc2NzaV9ob3N0X2FsbG9jKCZzY3NpX2RyaXZlcl90ZW1wbGF0ZSwgc2l6ZW9mKCp0Z3QpKTsKIAlpZiAoc2hvc3QgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07CkBAIC0xMzY5LDE0ICsxMzU4LDEyIEBACiBzYnAyX21hcF9zY2F0dGVybGlzdChzdHJ1Y3Qgc2JwMl9jb21tYW5kX29yYiAqb3JiLCBzdHJ1Y3QgZndfZGV2aWNlICpkZXZpY2UsCiAJCSAgICAgc3RydWN0IHNicDJfbG9naWNhbF91bml0ICpsdSkKIHsKLQlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnOwotCWludCBzZ19sZW4sIGwsIGksIGosIGNvdW50OwotCWRtYV9hZGRyX3Qgc2dfYWRkcjsKKwlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnID0gc2NzaV9zZ2xpc3Qob3JiLT5jbWQpOworCWludCBpLCBuOwogCi0Jc2cgPSBzY3NpX3NnbGlzdChvcmItPmNtZCk7Ci0JY291bnQgPSBkbWFfbWFwX3NnKGRldmljZS0+Y2FyZC0+ZGV2aWNlLCBzZywgc2NzaV9zZ19jb3VudChvcmItPmNtZCksCi0JCQkgICBvcmItPmNtZC0+c2NfZGF0YV9kaXJlY3Rpb24pOwotCWlmIChjb3VudCA9PSAwKQorCW4gPSBkbWFfbWFwX3NnKGRldmljZS0+Y2FyZC0+ZGV2aWNlLCBzZywgc2NzaV9zZ19jb3VudChvcmItPmNtZCksCisJCSAgICAgICBvcmItPmNtZC0+c2NfZGF0YV9kaXJlY3Rpb24pOworCWlmIChuID09IDApCiAJCWdvdG8gZmFpbDsKIAogCS8qCkBAIC0xMzg2LDcgKzEzNzMsNyBAQAogCSAqIGFzIHRoZSBzZWNvbmQgZ2VuZXJhdGlvbiBpUG9kIHdoaWNoIGRvZXNuJ3Qgc3VwcG9ydCBwYWdlCiAJICogdGFibGVzLgogCSAqLwotCWlmIChjb3VudCA9PSAxICYmIHNnX2RtYV9sZW4oc2cpIDwgU0JQMl9NQVhfU0dfRUxFTUVOVF9MRU5HVEgpIHsKKwlpZiAobiA9PSAxKSB7CiAJCW9yYi0+cmVxdWVzdC5kYXRhX2Rlc2NyaXB0b3IuaGlnaCA9CiAJCQljcHVfdG9fYmUzMihsdS0+dGd0LT5hZGRyZXNzX2hpZ2gpOwogCQlvcmItPnJlcXVlc3QuZGF0YV9kZXNjcmlwdG9yLmxvdyAgPQpAQCAtMTM5NiwyOSArMTM4Myw5IEBACiAJCXJldHVybiAwOwogCX0KIAotCS8qCi0JICogQ29udmVydCB0aGUgc2NhdHRlcmxpc3QgdG8gYW4gc2JwMiBwYWdlIHRhYmxlLiAgSWYgYW55Ci0JICogc2NhdHRlcmxpc3QgZW50cmllcyBhcmUgdG9vIGJpZyBmb3Igc2JwMiwgd2Ugc3BsaXQgdGhlbSBhcyB3ZQotCSAqIGdvLiAgRXZlbiBpZiB3ZSBhc2sgdGhlIGJsb2NrIEkvTyBsYXllciB0byBub3QgZ2l2ZSB1cyBzZwotCSAqIGVsZW1lbnRzIGxhcmdlciB0aGFuIDY1NTM1IGJ5dGVzLCBzb21lIElPTU1VcyBtYXkgbWVyZ2Ugc2cgZWxlbWVudHMKLQkgKiBkdXJpbmcgRE1BIG1hcHBpbmcsIGFuZCBMaW51eCBjdXJyZW50bHkgZG9lc24ndCBwcmV2ZW50IHRoaXMuCi0JICovCi0JZm9yIChpID0gMCwgaiA9IDA7IGkgPCBjb3VudDsgaSsrLCBzZyA9IHNnX25leHQoc2cpKSB7Ci0JCXNnX2xlbiA9IHNnX2RtYV9sZW4oc2cpOwotCQlzZ19hZGRyID0gc2dfZG1hX2FkZHJlc3Moc2cpOwotCQl3aGlsZSAoc2dfbGVuKSB7Ci0JCQkvKiBGSVhNRTogVGhpcyB3b24ndCBnZXQgdXMgb3V0IG9mIHRoZSBwaW5jaC4gKi8KLQkJCWlmICh1bmxpa2VseShqID49IEFSUkFZX1NJWkUob3JiLT5wYWdlX3RhYmxlKSkpIHsKLQkJCQlmd19lcnJvcigicGFnZSB0YWJsZSBvdmVyZmxvd1xuIik7Ci0JCQkJZ290byBmYWlsX3BhZ2VfdGFibGU7Ci0JCQl9Ci0JCQlsID0gbWluKHNnX2xlbiwgU0JQMl9NQVhfU0dfRUxFTUVOVF9MRU5HVEgpOwotCQkJb3JiLT5wYWdlX3RhYmxlW2pdLmxvdyA9IGNwdV90b19iZTMyKHNnX2FkZHIpOwotCQkJb3JiLT5wYWdlX3RhYmxlW2pdLmhpZ2ggPSBjcHVfdG9fYmUzMihsIDw8IDE2KTsKLQkJCXNnX2FkZHIgKz0gbDsKLQkJCXNnX2xlbiAtPSBsOwotCQkJaisrOwotCQl9CisJZm9yX2VhY2hfc2coc2csIHNnLCBuLCBpKSB7CisJCW9yYi0+cGFnZV90YWJsZVtpXS5oaWdoID0gY3B1X3RvX2JlMzIoc2dfZG1hX2xlbihzZykgPDwgMTYpOworCQlvcmItPnBhZ2VfdGFibGVbaV0ubG93ID0gY3B1X3RvX2JlMzIoc2dfZG1hX2FkZHJlc3Moc2cpKTsKIAl9CiAKIAlvcmItPnBhZ2VfdGFibGVfYnVzID0KQEAgLTE0MzcsMTMgKzE0MDQsMTMgQEAKIAlvcmItPnJlcXVlc3QuZGF0YV9kZXNjcmlwdG9yLmhpZ2ggPSBjcHVfdG9fYmUzMihsdS0+dGd0LT5hZGRyZXNzX2hpZ2gpOwogCW9yYi0+cmVxdWVzdC5kYXRhX2Rlc2NyaXB0b3IubG93ICA9IGNwdV90b19iZTMyKG9yYi0+cGFnZV90YWJsZV9idXMpOwogCW9yYi0+cmVxdWVzdC5taXNjIHw9IGNwdV90b19iZTMyKENPTU1BTkRfT1JCX1BBR0VfVEFCTEVfUFJFU0VOVCB8Ci0JCQkJCSBDT01NQU5EX09SQl9EQVRBX1NJWkUoaikpOworCQkJCQkgQ09NTUFORF9PUkJfREFUQV9TSVpFKG4pKTsKIAogCXJldHVybiAwOwogCiAgZmFpbF9wYWdlX3RhYmxlOgotCWRtYV91bm1hcF9zZyhkZXZpY2UtPmNhcmQtPmRldmljZSwgc2csIHNjc2lfc2dfY291bnQob3JiLT5jbWQpLAotCQkgICAgIG9yYi0+Y21kLT5zY19kYXRhX2RpcmVjdGlvbik7CisJZG1hX3VubWFwX3NnKGRldmljZS0+Y2FyZC0+ZGV2aWNlLCBzY3NpX3NnbGlzdChvcmItPmNtZCksCisJCSAgICAgc2NzaV9zZ19jb3VudChvcmItPmNtZCksIG9yYi0+Y21kLT5zY19kYXRhX2RpcmVjdGlvbik7CiAgZmFpbDoKIAlyZXR1cm4gLUVOT01FTTsKIH0KQEAgLTE0NTYsNyArMTQyMyw3IEBACiAJc3RydWN0IGZ3X2RldmljZSAqZGV2aWNlID0gZndfZGV2aWNlKGx1LT50Z3QtPnVuaXQtPmRldmljZS5wYXJlbnQpOwogCXN0cnVjdCBzYnAyX2NvbW1hbmRfb3JiICpvcmI7CiAJdW5zaWduZWQgaW50IG1heF9wYXlsb2FkOwotCWludCByZXR2YWwgPSBTQ1NJX01MUVVFVUVfSE9TVF9CVVNZOworCWludCBnZW5lcmF0aW9uLCByZXR2YWwgPSBTQ1NJX01MUVVFVUVfSE9TVF9CVVNZOwogCiAJLyoKIAkgKiBCaWRpcmVjdGlvbmFsIGNvbW1hbmRzIGFyZSBub3QgeWV0IGltcGxlbWVudGVkLCBhbmQgdW5rbm93bgpAQCAtMTUwMCw2ICsxNDY3LDkgQEAKIAlpZiAoY21kLT5zY19kYXRhX2RpcmVjdGlvbiA9PSBETUFfRlJPTV9ERVZJQ0UpCiAJCW9yYi0+cmVxdWVzdC5taXNjIHw9IGNwdV90b19iZTMyKENPTU1BTkRfT1JCX0RJUkVDVElPTik7CiAKKwlnZW5lcmF0aW9uID0gZGV2aWNlLT5nZW5lcmF0aW9uOworCXNtcF9ybWIoKTsgICAgLyogc2JwMl9tYXBfc2NhdHRlcmxpc3QgbG9va3MgYXQgdGd0LT5hZGRyZXNzX2hpZ2ggKi8KKwogCWlmIChzY3NpX3NnX2NvdW50KGNtZCkgJiYgc2JwMl9tYXBfc2NhdHRlcmxpc3Qob3JiLCBkZXZpY2UsIGx1KSA8IDApCiAJCWdvdG8gb3V0OwogCkBAIC0xNTEyLDcgKzE0ODIsNyBAQAogCWlmIChkbWFfbWFwcGluZ19lcnJvcihkZXZpY2UtPmNhcmQtPmRldmljZSwgb3JiLT5iYXNlLnJlcXVlc3RfYnVzKSkKIAkJZ290byBvdXQ7CiAKLQlzYnAyX3NlbmRfb3JiKCZvcmItPmJhc2UsIGx1LCBsdS0+dGd0LT5ub2RlX2lkLCBsdS0+Z2VuZXJhdGlvbiwKKwlzYnAyX3NlbmRfb3JiKCZvcmItPmJhc2UsIGx1LCBsdS0+dGd0LT5ub2RlX2lkLCBnZW5lcmF0aW9uLAogCQkgICAgICBsdS0+Y29tbWFuZF9ibG9ja19hZ2VudF9hZGRyZXNzICsgU0JQMl9PUkJfUE9JTlRFUik7CiAJcmV0dmFsID0gMDsKICBvdXQ6CkBAIC0xNTY0LDYgKzE1MzQsOCBAQAogCWlmIChsdS0+dGd0LT53b3JrYXJvdW5kcyAmIFNCUDJfV09SS0FST1VORF8xMjhLX01BWF9UUkFOUykKIAkJYmxrX3F1ZXVlX21heF9zZWN0b3JzKHNkZXYtPnJlcXVlc3RfcXVldWUsIDEyOCAqIDEwMjQgLyA1MTIpOwogCisJYmxrX3F1ZXVlX21heF9zZWdtZW50X3NpemUoc2Rldi0+cmVxdWVzdF9xdWV1ZSwgU0JQMl9NQVhfU0VHX1NJWkUpOworCiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZmlyZXdpcmUvZnctdHJhbnNhY3Rpb24uYyBiL2RyaXZlcnMvZmlyZXdpcmUvZnctdHJhbnNhY3Rpb24uYwppbmRleCBlNWQxYTBiLi4wMjJhYzRmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2ZpcmV3aXJlL2Z3LXRyYW5zYWN0aW9uLmMKKysrIGIvZHJpdmVycy9maXJld2lyZS9mdy10cmFuc2FjdGlvbi5jCkBAIC0yNDcsNyArMjQ3LDcgQEAKICAqLwogdm9pZAogZndfc2VuZF9yZXF1ZXN0KHN0cnVjdCBmd19jYXJkICpjYXJkLCBzdHJ1Y3QgZndfdHJhbnNhY3Rpb24gKnQsCi0JCWludCB0Y29kZSwgaW50IG5vZGVfaWQsIGludCBnZW5lcmF0aW9uLCBpbnQgc3BlZWQsCisJCWludCB0Y29kZSwgaW50IGRlc3RpbmF0aW9uX2lkLCBpbnQgZ2VuZXJhdGlvbiwgaW50IHNwZWVkLAogCQl1bnNpZ25lZCBsb25nIGxvbmcgb2Zmc2V0LAogCQl2b2lkICpwYXlsb2FkLCBzaXplX3QgbGVuZ3RoLAogCQlmd190cmFuc2FjdGlvbl9jYWxsYmFja190IGNhbGxiYWNrLCB2b2lkICpjYWxsYmFja19kYXRhKQpAQCAtMjc5LDEzICsyNzksMTQgQEAKIAljYXJkLT5jdXJyZW50X3RsYWJlbCA9IChjYXJkLT5jdXJyZW50X3RsYWJlbCArIDEpICYgMHgxZjsKIAljYXJkLT50bGFiZWxfbWFzayB8PSAoMSA8PCB0bGFiZWwpOwogCi0JdC0+bm9kZV9pZCA9IG5vZGVfaWQ7CisJdC0+bm9kZV9pZCA9IGRlc3RpbmF0aW9uX2lkOwogCXQtPnRsYWJlbCA9IHRsYWJlbDsKIAl0LT5jYWxsYmFjayA9IGNhbGxiYWNrOwogCXQtPmNhbGxiYWNrX2RhdGEgPSBjYWxsYmFja19kYXRhOwogCi0JZndfZmlsbF9yZXF1ZXN0KCZ0LT5wYWNrZXQsIHRjb2RlLCB0LT50bGFiZWwsIG5vZGVfaWQsIGNhcmQtPm5vZGVfaWQsCi0JCQlnZW5lcmF0aW9uLCBzcGVlZCwgb2Zmc2V0LCBwYXlsb2FkLCBsZW5ndGgpOworCWZ3X2ZpbGxfcmVxdWVzdCgmdC0+cGFja2V0LCB0Y29kZSwgdC0+dGxhYmVsLAorCQkJZGVzdGluYXRpb25faWQsIGNhcmQtPm5vZGVfaWQsIGdlbmVyYXRpb24sCisJCQlzcGVlZCwgb2Zmc2V0LCBwYXlsb2FkLCBsZW5ndGgpOwogCXQtPnBhY2tldC5jYWxsYmFjayA9IHRyYW5zbWl0X2NvbXBsZXRlX2NhbGxiYWNrOwogCiAJbGlzdF9hZGRfdGFpbCgmdC0+bGluaywgJmNhcmQtPnRyYW5zYWN0aW9uX2xpc3QpOwpAQCAtMjk2LDYgKzI5Nyw0NSBAQAogfQogRVhQT1JUX1NZTUJPTChmd19zZW5kX3JlcXVlc3QpOwogCitzdHJ1Y3QgdHJhbnNhY3Rpb25fY2FsbGJhY2tfZGF0YSB7CisJc3RydWN0IGNvbXBsZXRpb24gZG9uZTsKKwl2b2lkICpwYXlsb2FkOworCWludCByY29kZTsKK307CisKK3N0YXRpYyB2b2lkIHRyYW5zYWN0aW9uX2NhbGxiYWNrKHN0cnVjdCBmd19jYXJkICpjYXJkLCBpbnQgcmNvZGUsCisJCQkJIHZvaWQgKnBheWxvYWQsIHNpemVfdCBsZW5ndGgsIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IHRyYW5zYWN0aW9uX2NhbGxiYWNrX2RhdGEgKmQgPSBkYXRhOworCisJaWYgKHJjb2RlID09IFJDT0RFX0NPTVBMRVRFKQorCQltZW1jcHkoZC0+cGF5bG9hZCwgcGF5bG9hZCwgbGVuZ3RoKTsKKwlkLT5yY29kZSA9IHJjb2RlOworCWNvbXBsZXRlKCZkLT5kb25lKTsKK30KKworLyoqCisgKiBmd19ydW5fdHJhbnNhY3Rpb24gLSBzZW5kIHJlcXVlc3QgYW5kIHNsZWVwIHVudGlsIHRyYW5zYWN0aW9uIGlzIGNvbXBsZXRlZAorICoKKyAqIFJldHVybnMgdGhlIFJDT0RFLgorICovCitpbnQgZndfcnVuX3RyYW5zYWN0aW9uKHN0cnVjdCBmd19jYXJkICpjYXJkLCBpbnQgdGNvZGUsIGludCBkZXN0aW5hdGlvbl9pZCwKKwkJaW50IGdlbmVyYXRpb24sIGludCBzcGVlZCwgdW5zaWduZWQgbG9uZyBsb25nIG9mZnNldCwKKwkJdm9pZCAqZGF0YSwgc2l6ZV90IGxlbmd0aCkKK3sKKwlzdHJ1Y3QgdHJhbnNhY3Rpb25fY2FsbGJhY2tfZGF0YSBkOworCXN0cnVjdCBmd190cmFuc2FjdGlvbiB0OworCisJaW5pdF9jb21wbGV0aW9uKCZkLmRvbmUpOworCWQucGF5bG9hZCA9IGRhdGE7CisJZndfc2VuZF9yZXF1ZXN0KGNhcmQsICZ0LCB0Y29kZSwgZGVzdGluYXRpb25faWQsIGdlbmVyYXRpb24sIHNwZWVkLAorCQkJb2Zmc2V0LCBkYXRhLCBsZW5ndGgsIHRyYW5zYWN0aW9uX2NhbGxiYWNrLCAmZCk7CisJd2FpdF9mb3JfY29tcGxldGlvbigmZC5kb25lKTsKKworCXJldHVybiBkLnJjb2RlOworfQorRVhQT1JUX1NZTUJPTChmd19ydW5fdHJhbnNhY3Rpb24pOworCiBzdGF0aWMgREVGSU5FX01VVEVYKHBoeV9jb25maWdfbXV0ZXgpOwogc3RhdGljIERFQ0xBUkVfQ09NUExFVElPTihwaHlfY29uZmlnX2RvbmUpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2ZpcmV3aXJlL2Z3LXRyYW5zYWN0aW9uLmggYi9kcml2ZXJzL2ZpcmV3aXJlL2Z3LXRyYW5zYWN0aW9uLmgKaW5kZXggMmFlMWIwZC4uMDI3ZjU4Y2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZmlyZXdpcmUvZnctdHJhbnNhY3Rpb24uaAorKysgYi9kcml2ZXJzL2ZpcmV3aXJlL2Z3LXRyYW5zYWN0aW9uLmgKQEAgLTQyNiwxMSArNDI2LDE0IEBACiAKIHZvaWQKIGZ3X3NlbmRfcmVxdWVzdChzdHJ1Y3QgZndfY2FyZCAqY2FyZCwgc3RydWN0IGZ3X3RyYW5zYWN0aW9uICp0LAotCQlpbnQgdGNvZGUsIGludCBub2RlX2lkLCBpbnQgZ2VuZXJhdGlvbiwgaW50IHNwZWVkLAotCQl1bnNpZ25lZCBsb25nIGxvbmcgb2Zmc2V0LAotCQl2b2lkICpkYXRhLCBzaXplX3QgbGVuZ3RoLAorCQlpbnQgdGNvZGUsIGludCBkZXN0aW5hdGlvbl9pZCwgaW50IGdlbmVyYXRpb24sIGludCBzcGVlZCwKKwkJdW5zaWduZWQgbG9uZyBsb25nIG9mZnNldCwgdm9pZCAqZGF0YSwgc2l6ZV90IGxlbmd0aCwKIAkJZndfdHJhbnNhY3Rpb25fY2FsbGJhY2tfdCBjYWxsYmFjaywgdm9pZCAqY2FsbGJhY2tfZGF0YSk7CiAKK2ludCBmd19ydW5fdHJhbnNhY3Rpb24oc3RydWN0IGZ3X2NhcmQgKmNhcmQsIGludCB0Y29kZSwgaW50IGRlc3RpbmF0aW9uX2lkLAorCQkgICAgICAgaW50IGdlbmVyYXRpb24sIGludCBzcGVlZCwgdW5zaWduZWQgbG9uZyBsb25nIG9mZnNldCwKKwkJICAgICAgIHZvaWQgKmRhdGEsIHNpemVfdCBsZW5ndGgpOworCiBpbnQgZndfY2FuY2VsX3RyYW5zYWN0aW9uKHN0cnVjdCBmd19jYXJkICpjYXJkLAogCQkJICBzdHJ1Y3QgZndfdHJhbnNhY3Rpb24gKnRyYW5zYWN0aW9uKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9maXJtd2FyZS9kbWlfc2Nhbi5jIGIvZHJpdmVycy9maXJtd2FyZS9kbWlfc2Nhbi5jCmluZGV4IDQ1NTU3NWIuLjNlNTI2YjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZmlybXdhcmUvZG1pX3NjYW4uYworKysgYi9kcml2ZXJzL2Zpcm13YXJlL2RtaV9zY2FuLmMKQEAgLTE1LDYgKzE1LDExIEBACiAgKi8KIHN0YXRpYyBjaGFyIGRtaV9lbXB0eV9zdHJpbmdbXSA9ICIgICAgICAgICI7CiAKKy8qCisgKiBDYXRjaCB0b28gZWFybHkgY2FsbHMgdG8gZG1pX2NoZWNrX3N5c3RlbSgpOgorICovCitzdGF0aWMgaW50IGRtaV9pbml0aWFsaXplZDsKKwogc3RhdGljIGNvbnN0IGNoYXIgKiBfX2luaXQgZG1pX3N0cmluZ19ub3NhdmUoY29uc3Qgc3RydWN0IGRtaV9oZWFkZXIgKmRtLCB1OCBzKQogewogCWNvbnN0IHU4ICpicCA9ICgodTggKikgZG0pICsgZG0tPmxlbmd0aDsKQEAgLTM2Niw3ICszNzEsNyBAQAogCiAJaWYgKGVmaV9lbmFibGVkKSB7CiAJCWlmIChlZmkuc21iaW9zID09IEVGSV9JTlZBTElEX1RBQkxFX0FERFIpCi0JCQlnb3RvIG91dDsKKwkJCWdvdG8gZXJyb3I7CiAKIAkJLyogVGhpcyBpcyBjYWxsZWQgYXMgYSBjb3JlX2luaXRjYWxsKCkgYmVjYXVzZSBpdCBpc24ndAogCQkgKiBuZWVkZWQgZHVyaW5nIGVhcmx5IGJvb3QuICBUaGlzIGFsc28gbWVhbnMgd2UgY2FuCkBAIC0zNzQsMTMgKzM3OSwxMyBAQAogCQkgKi8KIAkJcCA9IGRtaV9pb3JlbWFwKGVmaS5zbWJpb3MsIDMyKTsKIAkJaWYgKHAgPT0gTlVMTCkKLQkJCWdvdG8gb3V0OworCQkJZ290byBlcnJvcjsKIAogCQlyYyA9IGRtaV9wcmVzZW50KHAgKyAweDEwKTsgLyogb2Zmc2V0IG9mIF9ETUlfIHN0cmluZyAqLwogCQlkbWlfaW91bm1hcChwLCAzMik7CiAJCWlmICghcmMpIHsKIAkJCWRtaV9hdmFpbGFibGUgPSAxOwotCQkJcmV0dXJuOworCQkJZ290byBvdXQ7CiAJCX0KIAl9CiAJZWxzZSB7CkBAIC0zOTEsMTkgKzM5NiwyMiBAQAogCQkgKi8KIAkJcCA9IGRtaV9pb3JlbWFwKDB4RjAwMDAsIDB4MTAwMDApOwogCQlpZiAocCA9PSBOVUxMKQotCQkJZ290byBvdXQ7CisJCQlnb3RvIGVycm9yOwogCiAJCWZvciAocSA9IHA7IHEgPCBwICsgMHgxMDAwMDsgcSArPSAxNikgewogCQkJcmMgPSBkbWlfcHJlc2VudChxKTsKIAkJCWlmICghcmMpIHsKIAkJCQlkbWlfYXZhaWxhYmxlID0gMTsKIAkJCQlkbWlfaW91bm1hcChwLCAweDEwMDAwKTsKLQkJCQlyZXR1cm47CisJCQkJZ290byBvdXQ7CiAJCQl9CiAJCX0KIAkJZG1pX2lvdW5tYXAocCwgMHgxMDAwMCk7CiAJfQotIG91dDoJcHJpbnRrKEtFUk5fSU5GTyAiRE1JIG5vdCBwcmVzZW50IG9yIGludmFsaWQuXG4iKTsKKyBlcnJvcjoKKwlwcmludGsoS0VSTl9JTkZPICJETUkgbm90IHByZXNlbnQgb3IgaW52YWxpZC5cbiIpOworIG91dDoKKwlkbWlfaW5pdGlhbGl6ZWQgPSAxOwogfQogCiAvKioKQEAgLTQyNCw2ICs0MzIsOCBAQAogCWludCBpLCBjb3VudCA9IDA7CiAJY29uc3Qgc3RydWN0IGRtaV9zeXN0ZW1faWQgKmQgPSBsaXN0OwogCisJV0FSTighZG1pX2luaXRpYWxpemVkLCBLRVJOX0VSUiAiZG1pIGNoZWNrOiBub3QgaW5pdGlhbGl6ZWQgeWV0LlxuIik7CisKIAl3aGlsZSAoZC0+aWRlbnQpIHsKIAkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZC0+bWF0Y2hlcyk7IGkrKykgewogCQkJaW50IHMgPSBkLT5tYXRjaGVzW2ldLnNsb3Q7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Zpcm13YXJlL2lzY3NpX2liZnQuYyBiL2RyaXZlcnMvZmlybXdhcmUvaXNjc2lfaWJmdC5jCmluZGV4IGI5MWVmNjMuLjQzNTM0MTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZmlybXdhcmUvaXNjc2lfaWJmdC5jCisrKyBiL2RyaXZlcnMvZmlybXdhcmUvaXNjc2lfaWJmdC5jCkBAIC0zMzQsOSArMzM0LDkgQEAKIC8qCiAgKiAgUm91dGluZXMgZm9yIHBhcnNpbmcgdGhlIGlCRlQgZGF0YSB0byBiZSBodW1hbiByZWFkYWJsZS4KICAqLwotc3NpemVfdCBpYmZ0X2F0dHJfc2hvd19pbml0aWF0b3Ioc3RydWN0IGliZnRfa29iamVjdCAqZW50cnksCi0JCQkJICBzdHJ1Y3QgaWJmdF9hdHRyaWJ1dGUgKmF0dHIsCi0JCQkJICBjaGFyICpidWYpCitzdGF0aWMgc3NpemVfdCBpYmZ0X2F0dHJfc2hvd19pbml0aWF0b3Ioc3RydWN0IGliZnRfa29iamVjdCAqZW50cnksCisJCQkJCXN0cnVjdCBpYmZ0X2F0dHJpYnV0ZSAqYXR0ciwKKwkJCQkJY2hhciAqYnVmKQogewogCXN0cnVjdCBpYmZ0X2luaXRpYXRvciAqaW5pdGlhdG9yID0gZW50cnktPmluaXRpYXRvcjsKIAl2b2lkICppYmZ0X2xvYyA9IGVudHJ5LT5oZWFkZXI7CkBAIC0zNzYsOSArMzc2LDkgQEAKIAlyZXR1cm4gc3RyIC0gYnVmOwogfQogCi1zc2l6ZV90IGliZnRfYXR0cl9zaG93X25pYyhzdHJ1Y3QgaWJmdF9rb2JqZWN0ICplbnRyeSwKLQkJCSAgICBzdHJ1Y3QgaWJmdF9hdHRyaWJ1dGUgKmF0dHIsCi0JCQkgICAgY2hhciAqYnVmKQorc3RhdGljIHNzaXplX3QgaWJmdF9hdHRyX3Nob3dfbmljKHN0cnVjdCBpYmZ0X2tvYmplY3QgKmVudHJ5LAorCQkJCSAgc3RydWN0IGliZnRfYXR0cmlidXRlICphdHRyLAorCQkJCSAgY2hhciAqYnVmKQogewogCXN0cnVjdCBpYmZ0X25pYyAqbmljID0gZW50cnktPm5pYzsKIAl2b2lkICppYmZ0X2xvYyA9IGVudHJ5LT5oZWFkZXI7CkBAIC00NDAsOSArNDQwLDkgQEAKIAlyZXR1cm4gc3RyIC0gYnVmOwogfTsKIAotc3NpemVfdCBpYmZ0X2F0dHJfc2hvd190YXJnZXQoc3RydWN0IGliZnRfa29iamVjdCAqZW50cnksCi0JCQkgICAgICAgc3RydWN0IGliZnRfYXR0cmlidXRlICphdHRyLAotCQkJICAgICAgIGNoYXIgKmJ1ZikKK3N0YXRpYyBzc2l6ZV90IGliZnRfYXR0cl9zaG93X3RhcmdldChzdHJ1Y3QgaWJmdF9rb2JqZWN0ICplbnRyeSwKKwkJCQkgICAgIHN0cnVjdCBpYmZ0X2F0dHJpYnV0ZSAqYXR0ciwKKwkJCQkgICAgIGNoYXIgKmJ1ZikKIHsKIAlzdHJ1Y3QgaWJmdF90Z3QgKnRndCA9IGVudHJ5LT50Z3Q7CiAJdm9pZCAqaWJmdF9sb2MgPSBlbnRyeS0+aGVhZGVyOwpAQCAtNzMyLDcgKzczMiw2IEBACiAKIAlhdHRyLT5hdHRyLm5hbWUgPSBuYW1lOwogCWF0dHItPmF0dHIubW9kZSA9IFNfSVJVU1I7Ci0JYXR0ci0+YXR0ci5vd25lciA9IFRISVNfTU9EVUxFOwogCiAJYXR0ci0+aGRyID0gaGRyOwogCWF0dHItPnNob3cgPSBzaG93OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncGlvL2dwaW9saWIuYyBiL2RyaXZlcnMvZ3Bpby9ncGlvbGliLmMKaW5kZXggOGQyOTQwNS4uZmFhMWNjNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncGlvL2dwaW9saWIuYworKysgYi9kcml2ZXJzL2dwaW8vZ3Bpb2xpYi5jCkBAIC02NywxNyArNjcsMjggQEAKICAqIHdoZW4gc2V0dGluZyBkaXJlY3Rpb24sIGFuZCBvdGhlcndpc2UgaWxsZWdhbC4gIFVudGlsIGJvYXJkIHNldHVwIGNvZGUKICAqIGFuZCBkcml2ZXJzIHVzZSBleHBsaWNpdCByZXF1ZXN0cyBldmVyeXdoZXJlICh3aGljaCB3b24ndCBoYXBwZW4gd2hlbgogICogdGhvc2UgY2FsbHMgaGF2ZSBubyB0ZWV0aCkgd2UgY2FuJ3QgYXZvaWQgYXV0b3JlcXVlc3RpbmcuICBUaGlzIG5hZwotICogbWVzc2FnZSBzaG91bGQgbW90aXZhdGUgc3dpdGNoaW5nIHRvIGV4cGxpY2l0IHJlcXVlc3RzLi4uCisgKiBtZXNzYWdlIHNob3VsZCBtb3RpdmF0ZSBzd2l0Y2hpbmcgdG8gZXhwbGljaXQgcmVxdWVzdHMuLi4gc28gc2hvdWxkCisgKiB0aGUgd2Vha2VyIGNsZWFudXAgYWZ0ZXIgZmF1bHRzLCBjb21wYXJlZCB0byBncGlvX3JlcXVlc3QoKS4KICAqLwotc3RhdGljIHZvaWQgZ3Bpb19lbnN1cmVfcmVxdWVzdGVkKHN0cnVjdCBncGlvX2Rlc2MgKmRlc2MpCitzdGF0aWMgaW50IGdwaW9fZW5zdXJlX3JlcXVlc3RlZChzdHJ1Y3QgZ3Bpb19kZXNjICpkZXNjLCB1bnNpZ25lZCBvZmZzZXQpCiB7CiAJaWYgKHRlc3RfYW5kX3NldF9iaXQoRkxBR19SRVFVRVNURUQsICZkZXNjLT5mbGFncykgPT0gMCkgewotCQlwcl93YXJuaW5nKCJHUElPLSVkIGF1dG9yZXF1ZXN0ZWRcbiIsIChpbnQpKGRlc2MgLSBncGlvX2Rlc2MpKTsKKwkJc3RydWN0IGdwaW9fY2hpcCAqY2hpcCA9IGRlc2MtPmNoaXA7CisJCWludCBncGlvID0gY2hpcC0+YmFzZSArIG9mZnNldDsKKworCQlpZiAoIXRyeV9tb2R1bGVfZ2V0KGNoaXAtPm93bmVyKSkgeworCQkJcHJfZXJyKCJHUElPLSVkOiBtb2R1bGUgY2FuJ3QgYmUgZ290dGVuIFxuIiwgZ3Bpbyk7CisJCQljbGVhcl9iaXQoRkxBR19SRVFVRVNURUQsICZkZXNjLT5mbGFncyk7CisJCQkvKiBsb3NlICovCisJCQlyZXR1cm4gLUVJTzsKKwkJfQorCQlwcl93YXJuaW5nKCJHUElPLSVkIGF1dG9yZXF1ZXN0ZWRcbiIsIGdwaW8pOwogCQlkZXNjX3NldF9sYWJlbChkZXNjLCAiW2F1dG9dIik7Ci0JCWlmICghdHJ5X21vZHVsZV9nZXQoZGVzYy0+Y2hpcC0+b3duZXIpKQotCQkJcHJfZXJyKCJHUElPLSVkOiBtb2R1bGUgY2FuJ3QgYmUgZ290dGVuIFxuIiwKLQkJCQkJKGludCkoZGVzYyAtIGdwaW9fZGVzYykpOworCQkvKiBjYWxsZXIgbXVzdCBjaGlwLT5yZXF1ZXN0KCkgdy9vIHNwaW5sb2NrICovCisJCWlmIChjaGlwLT5yZXF1ZXN0KQorCQkJcmV0dXJuIDE7CiAJfQorCXJldHVybiAwOwogfQogCiAvKiBjYWxsZXIgaG9sZHMgZ3Bpb19sb2NrICpPUiogZ3BpbyBpcyBtYXJrZWQgYXMgcmVxdWVzdGVkICovCkBAIC0yMzcsNyArMjQ4LDcgQEAKIAlpZiAoIXRlc3RfYml0KEZMQUdfRVhQT1JULCAmZGVzYy0+ZmxhZ3MpKQogCQlzdGF0dXMgPSAtRUlPOwogCWVsc2UKLQkJc3RhdHVzID0gc3ByaW50ZihidWYsICIlZFxuIiwgZ3Bpb19nZXRfdmFsdWVfY2Fuc2xlZXAoZ3BpbykpOworCQlzdGF0dXMgPSBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCAhIWdwaW9fZ2V0X3ZhbHVlX2NhbnNsZWVwKGdwaW8pKTsKIAogCW11dGV4X3VubG9jaygmc3lzZnNfbG9jayk7CiAJcmV0dXJuIHN0YXR1czsKQEAgLTc1Miw2ICs3NjMsNyBAQAogaW50IGdwaW9fcmVxdWVzdCh1bnNpZ25lZCBncGlvLCBjb25zdCBjaGFyICpsYWJlbCkKIHsKIAlzdHJ1Y3QgZ3Bpb19kZXNjCSpkZXNjOworCXN0cnVjdCBncGlvX2NoaXAJKmNoaXA7CiAJaW50CQkJc3RhdHVzID0gLUVJTlZBTDsKIAl1bnNpZ25lZCBsb25nCQlmbGFnczsKIApAQCAtNzYwLDE0ICs3NzIsMTUgQEAKIAlpZiAoIWdwaW9faXNfdmFsaWQoZ3BpbykpCiAJCWdvdG8gZG9uZTsKIAlkZXNjID0gJmdwaW9fZGVzY1tncGlvXTsKLQlpZiAoZGVzYy0+Y2hpcCA9PSBOVUxMKQorCWNoaXAgPSBkZXNjLT5jaGlwOworCWlmIChjaGlwID09IE5VTEwpCiAJCWdvdG8gZG9uZTsKIAotCWlmICghdHJ5X21vZHVsZV9nZXQoZGVzYy0+Y2hpcC0+b3duZXIpKQorCWlmICghdHJ5X21vZHVsZV9nZXQoY2hpcC0+b3duZXIpKQogCQlnb3RvIGRvbmU7CiAKIAkvKiBOT1RFOiAgZ3Bpb19yZXF1ZXN0KCkgY2FuIGJlIGNhbGxlZCBpbiBlYXJseSBib290LAotCSAqIGJlZm9yZSBJUlFzIGFyZSBlbmFibGVkLgorCSAqIGJlZm9yZSBJUlFzIGFyZSBlbmFibGVkLCBmb3Igbm9uLXNsZWVwaW5nIChTT0MpIEdQSU9zLgogCSAqLwogCiAJaWYgKHRlc3RfYW5kX3NldF9iaXQoRkxBR19SRVFVRVNURUQsICZkZXNjLT5mbGFncykgPT0gMCkgewpAQCAtNzc1LDcgKzc4OCwyMCBAQAogCQlzdGF0dXMgPSAwOwogCX0gZWxzZSB7CiAJCXN0YXR1cyA9IC1FQlVTWTsKLQkJbW9kdWxlX3B1dChkZXNjLT5jaGlwLT5vd25lcik7CisJCW1vZHVsZV9wdXQoY2hpcC0+b3duZXIpOworCX0KKworCWlmIChjaGlwLT5yZXF1ZXN0KSB7CisJCS8qIGNoaXAtPnJlcXVlc3QgbWF5IHNsZWVwICovCisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmdwaW9fbG9jaywgZmxhZ3MpOworCQlzdGF0dXMgPSBjaGlwLT5yZXF1ZXN0KGNoaXAsIGdwaW8gLSBjaGlwLT5iYXNlKTsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmdwaW9fbG9jaywgZmxhZ3MpOworCisJCWlmIChzdGF0dXMgPCAwKSB7CisJCQlkZXNjX3NldF9sYWJlbChkZXNjLCBOVUxMKTsKKwkJCW1vZHVsZV9wdXQoY2hpcC0+b3duZXIpOworCQkJY2xlYXJfYml0KEZMQUdfUkVRVUVTVEVELCAmZGVzYy0+ZmxhZ3MpOworCQl9CiAJfQogCiBkb25lOgpAQCAtNzkxLDYgKzgxNyw5IEBACiB7CiAJdW5zaWduZWQgbG9uZwkJZmxhZ3M7CiAJc3RydWN0IGdwaW9fZGVzYwkqZGVzYzsKKwlzdHJ1Y3QgZ3Bpb19jaGlwCSpjaGlwOworCisJbWlnaHRfc2xlZXAoKTsKIAogCWlmICghZ3Bpb19pc192YWxpZChncGlvKSkgewogCQlXQVJOX09OKGV4dHJhX2NoZWNrcyk7CkBAIC04MDIsOSArODMxLDE3IEBACiAJc3Bpbl9sb2NrX2lycXNhdmUoJmdwaW9fbG9jaywgZmxhZ3MpOwogCiAJZGVzYyA9ICZncGlvX2Rlc2NbZ3Bpb107Ci0JaWYgKGRlc2MtPmNoaXAgJiYgdGVzdF9hbmRfY2xlYXJfYml0KEZMQUdfUkVRVUVTVEVELCAmZGVzYy0+ZmxhZ3MpKSB7CisJY2hpcCA9IGRlc2MtPmNoaXA7CisJaWYgKGNoaXAgJiYgdGVzdF9iaXQoRkxBR19SRVFVRVNURUQsICZkZXNjLT5mbGFncykpIHsKKwkJaWYgKGNoaXAtPmZyZWUpIHsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmdwaW9fbG9jaywgZmxhZ3MpOworCQkJbWlnaHRfc2xlZXBfaWYoZXh0cmFfY2hlY2tzICYmIGNoaXAtPmNhbl9zbGVlcCk7CisJCQljaGlwLT5mcmVlKGNoaXAsIGdwaW8gLSBjaGlwLT5iYXNlKTsKKwkJCXNwaW5fbG9ja19pcnFzYXZlKCZncGlvX2xvY2ssIGZsYWdzKTsKKwkJfQogCQlkZXNjX3NldF9sYWJlbChkZXNjLCBOVUxMKTsKIAkJbW9kdWxlX3B1dChkZXNjLT5jaGlwLT5vd25lcik7CisJCWNsZWFyX2JpdChGTEFHX1JFUVVFU1RFRCwgJmRlc2MtPmZsYWdzKTsKIAl9IGVsc2UKIAkJV0FSTl9PTihleHRyYV9jaGVja3MpOwogCkBAIC04NjksNyArOTA2LDkgQEAKIAlncGlvIC09IGNoaXAtPmJhc2U7CiAJaWYgKGdwaW8gPj0gY2hpcC0+bmdwaW8pCiAJCWdvdG8gZmFpbDsKLQlncGlvX2Vuc3VyZV9yZXF1ZXN0ZWQoZGVzYyk7CisJc3RhdHVzID0gZ3Bpb19lbnN1cmVfcmVxdWVzdGVkKGRlc2MsIGdwaW8pOworCWlmIChzdGF0dXMgPCAwKQorCQlnb3RvIGZhaWw7CiAKIAkvKiBub3cgd2Uga25vdyB0aGUgZ3BpbyBpcyB2YWxpZCBhbmQgY2hpcCB3b24ndCB2YW5pc2ggKi8KIApAQCAtODc3LDkgKzkxNiwyMiBAQAogCiAJbWlnaHRfc2xlZXBfaWYoZXh0cmFfY2hlY2tzICYmIGNoaXAtPmNhbl9zbGVlcCk7CiAKKwlpZiAoc3RhdHVzKSB7CisJCXN0YXR1cyA9IGNoaXAtPnJlcXVlc3QoY2hpcCwgZ3Bpbyk7CisJCWlmIChzdGF0dXMgPCAwKSB7CisJCQlwcl9kZWJ1ZygiR1BJTy0lZDogY2hpcCByZXF1ZXN0IGZhaWwsICVkXG4iLAorCQkJCWNoaXAtPmJhc2UgKyBncGlvLCBzdGF0dXMpOworCQkJLyogYW5kIGl0J3Mgbm90IGF2YWlsYWJsZSB0byBhbnlvbmUgZWxzZSAuLi4KKwkJCSAqIGdwaW9fcmVxdWVzdCgpIGlzIHRoZSBmdWxseSBjbGVhbiBzb2x1dGlvbi4KKwkJCSAqLworCQkJZ290byBsb3NlOworCQl9CisJfQorCiAJc3RhdHVzID0gY2hpcC0+ZGlyZWN0aW9uX2lucHV0KGNoaXAsIGdwaW8pOwogCWlmIChzdGF0dXMgPT0gMCkKIAkJY2xlYXJfYml0KEZMQUdfSVNfT1VULCAmZGVzYy0+ZmxhZ3MpOworbG9zZToKIAlyZXR1cm4gc3RhdHVzOwogZmFpbDoKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZncGlvX2xvY2ssIGZsYWdzKTsKQEAgLTkwNyw3ICs5NTksOSBAQAogCWdwaW8gLT0gY2hpcC0+YmFzZTsKIAlpZiAoZ3BpbyA+PSBjaGlwLT5uZ3BpbykKIAkJZ290byBmYWlsOwotCWdwaW9fZW5zdXJlX3JlcXVlc3RlZChkZXNjKTsKKwlzdGF0dXMgPSBncGlvX2Vuc3VyZV9yZXF1ZXN0ZWQoZGVzYywgZ3Bpbyk7CisJaWYgKHN0YXR1cyA8IDApCisJCWdvdG8gZmFpbDsKIAogCS8qIG5vdyB3ZSBrbm93IHRoZSBncGlvIGlzIHZhbGlkIGFuZCBjaGlwIHdvbid0IHZhbmlzaCAqLwogCkBAIC05MTUsOSArOTY5LDIyIEBACiAKIAltaWdodF9zbGVlcF9pZihleHRyYV9jaGVja3MgJiYgY2hpcC0+Y2FuX3NsZWVwKTsKIAorCWlmIChzdGF0dXMpIHsKKwkJc3RhdHVzID0gY2hpcC0+cmVxdWVzdChjaGlwLCBncGlvKTsKKwkJaWYgKHN0YXR1cyA8IDApIHsKKwkJCXByX2RlYnVnKCJHUElPLSVkOiBjaGlwIHJlcXVlc3QgZmFpbCwgJWRcbiIsCisJCQkJY2hpcC0+YmFzZSArIGdwaW8sIHN0YXR1cyk7CisJCQkvKiBhbmQgaXQncyBub3QgYXZhaWxhYmxlIHRvIGFueW9uZSBlbHNlIC4uLgorCQkJICogZ3Bpb19yZXF1ZXN0KCkgaXMgdGhlIGZ1bGx5IGNsZWFuIHNvbHV0aW9uLgorCQkJICovCisJCQlnb3RvIGxvc2U7CisJCX0KKwl9CisKIAlzdGF0dXMgPSBjaGlwLT5kaXJlY3Rpb25fb3V0cHV0KGNoaXAsIGdwaW8sIHZhbHVlKTsKIAlpZiAoc3RhdHVzID09IDApCiAJCXNldF9iaXQoRkxBR19JU19PVVQsICZkZXNjLT5mbGFncyk7Citsb3NlOgogCXJldHVybiBzdGF0dXM7CiBmYWlsOgogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmdwaW9fbG9jaywgZmxhZ3MpOwpAQCAtMTAwOCw2ICsxMDc1LDI0IEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTChfX2dwaW9fY2Fuc2xlZXApOwogCisvKioKKyAqIF9fZ3Bpb190b19pcnEoKSAtIHJldHVybiB0aGUgSVJRIGNvcnJlc3BvbmRpbmcgdG8gYSBHUElPCisgKiBAZ3BpbzogZ3BpbyB3aG9zZSBJUlEgd2lsbCBiZSByZXR1cm5lZCAoYWxyZWFkeSByZXF1ZXN0ZWQpCisgKiBDb250ZXh0OiBhbnkKKyAqCisgKiBUaGlzIGlzIHVzZWQgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSB0byBpbXBsZW1lbnQgZ3Bpb190b19pcnEoKS4KKyAqIEl0IHJldHVybnMgdGhlIG51bWJlciBvZiB0aGUgSVJRIHNpZ25hbGVkIGJ5IHRoaXMgKGlucHV0KSBHUElPLAorICogb3IgYSBuZWdhdGl2ZSBlcnJuby4KKyAqLworaW50IF9fZ3Bpb190b19pcnEodW5zaWduZWQgZ3BpbykKK3sKKwlzdHJ1Y3QgZ3Bpb19jaGlwCSpjaGlwOworCisJY2hpcCA9IGdwaW9fdG9fY2hpcChncGlvKTsKKwlyZXR1cm4gY2hpcC0+dG9faXJxID8gY2hpcC0+dG9faXJxKGNoaXAsIGdwaW8gLSBjaGlwLT5iYXNlKSA6IC1FTlhJTzsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKF9fZ3Bpb190b19pcnEpOworCiAKIAogLyogVGhlcmUncyBubyB2YWx1ZSBpbiBtYWtpbmcgaXQgZWFzeSB0byBpbmxpbmUgR1BJTyBjYWxscyB0aGF0IG1heSBzbGVlcC4KQEAgLTEwMjAsNyArMTEwNSw3IEBACiAKIAltaWdodF9zbGVlcF9pZihleHRyYV9jaGVja3MpOwogCWNoaXAgPSBncGlvX3RvX2NoaXAoZ3Bpbyk7Ci0JcmV0dXJuIGNoaXAtPmdldChjaGlwLCBncGlvIC0gY2hpcC0+YmFzZSk7CisJcmV0dXJuIGNoaXAtPmdldCA/IGNoaXAtPmdldChjaGlwLCBncGlvIC0gY2hpcC0+YmFzZSkgOiAwOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoZ3Bpb19nZXRfdmFsdWVfY2Fuc2xlZXApOwogCkBAIC0xMDU4LDcgKzExNDMsNyBAQAogCiAJCWlmICghaXNfb3V0KSB7CiAJCQlpbnQJCWlycSA9IGdwaW9fdG9faXJxKGdwaW8pOwotCQkJc3RydWN0IGlycV9kZXNjCSpkZXNjID0gaXJxX2Rlc2MgKyBpcnE7CisJCQlzdHJ1Y3QgaXJxX2Rlc2MJKmRlc2MgPSBpcnFfdG9fZGVzYyhpcnEpOwogCiAJCQkvKiBUaGlzIHJhY2VzIHdpdGggcmVxdWVzdF9pcnEoKSwgc2V0X2lycV90eXBlKCksCiAJCQkgKiBhbmQgc2V0X2lycV93YWtlKCkgLi4uIGJ1dCB0aG9zZSBhcmUgInJhcmUiLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncGlvL21heDczMDEuYyBiL2RyaXZlcnMvZ3Bpby9tYXg3MzAxLmMKaW5kZXggMzljNzk1YS4uOGIyNGQ3OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncGlvL21heDczMDEuYworKysgYi9kcml2ZXJzL2dwaW8vbWF4NzMwMS5jCkBAIC0yNTUsMTAgKzI1NSw2IEBACiAJdHMtPmNoaXAuZGV2ID0gJnNwaS0+ZGV2OwogCXRzLT5jaGlwLm93bmVyID0gVEhJU19NT0RVTEU7CiAKLQlyZXQgPSBncGlvY2hpcF9hZGQoJnRzLT5jaGlwKTsKLQlpZiAocmV0KQotCQlnb3RvIGV4aXRfZGVzdHJveTsKLQogCS8qCiAJICogdHJpc3RhdGUgYWxsIHBpbnMgaW4gaGFyZHdhcmUgYW5kIGNhY2hlIHRoZQogCSAqIHJlZ2lzdGVyIHZhbHVlcyBmb3IgbGF0ZXIgdXNlLgpAQCAtMjY5LDE3ICsyNjUsMTkgQEAKIAkJbWF4NzMwMV93cml0ZShzcGksIDB4MDggKyBpLCAweEFBKTsKIAkJdHMtPnBvcnRfY29uZmlnW2ldID0gMHhBQTsKIAkJZm9yIChqID0gMDsgaiA8IDQ7IGorKykgewotCQkJaW50IGlkeCA9IHRzLT5jaGlwLmJhc2UgKyAoaSAtIDEpICogNCArIGo7Ci0JCQlyZXQgPSBncGlvX2RpcmVjdGlvbl9pbnB1dChpZHgpOworCQkJaW50IG9mZnNldCA9IChpIC0gMSkgKiA0ICsgajsKKwkJCXJldCA9IG1heDczMDFfZGlyZWN0aW9uX2lucHV0KCZ0cy0+Y2hpcCwgb2Zmc2V0KTsKIAkJCWlmIChyZXQpCi0JCQkJZ290byBleGl0X3JlbW92ZTsKLQkJCWdwaW9fZnJlZShpZHgpOworCQkJCWdvdG8gZXhpdF9kZXN0cm95OwogCQl9CiAJfQorCisJcmV0ID0gZ3Bpb2NoaXBfYWRkKCZ0cy0+Y2hpcCk7CisJaWYgKHJldCkKKwkJZ290byBleGl0X2Rlc3Ryb3k7CisKIAlyZXR1cm4gcmV0OwogCi1leGl0X3JlbW92ZToKLQlncGlvY2hpcF9yZW1vdmUoJnRzLT5jaGlwKTsKIGV4aXRfZGVzdHJveToKIAlkZXZfc2V0X2RydmRhdGEoJnNwaS0+ZGV2LCBOVUxMKTsKIAltdXRleF9kZXN0cm95KCZ0cy0+bG9jayk7CkBAIC0zMjUsMTMgKzMyMywxNSBAQAogewogCXJldHVybiBzcGlfcmVnaXN0ZXJfZHJpdmVyKCZtYXg3MzAxX2RyaXZlcik7CiB9CisvKiByZWdpc3RlciBhZnRlciBzcGkgcG9zdGNvcmUgaW5pdGNhbGwgYW5kIGJlZm9yZQorICogc3Vic3lzIGluaXRjYWxscyB0aGF0IG1heSByZWx5IG9uIHRoZXNlIEdQSU9zCisgKi8KK3N1YnN5c19pbml0Y2FsbChtYXg3MzAxX2luaXQpOwogCiBzdGF0aWMgdm9pZCBfX2V4aXQgbWF4NzMwMV9leGl0KHZvaWQpCiB7CiAJc3BpX3VucmVnaXN0ZXJfZHJpdmVyKCZtYXg3MzAxX2RyaXZlcik7CiB9Ci0KLW1vZHVsZV9pbml0KG1heDczMDFfaW5pdCk7CiBtb2R1bGVfZXhpdChtYXg3MzAxX2V4aXQpOwogCiBNT0RVTEVfQVVUSE9SKCJKdWVyZ2VuIEJlaXNlcnQiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3Bpby9tYXg3MzJ4LmMgYi9kcml2ZXJzL2dwaW8vbWF4NzMyeC5jCmluZGV4IGI1MWM4MTMuLjU1YWU5YTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3Bpby9tYXg3MzJ4LmMKKysrIGIvZHJpdmVycy9ncGlvL21heDczMnguYwpAQCAtMzcyLDcgKzM3MiwxMCBAQAogewogCXJldHVybiBpMmNfYWRkX2RyaXZlcigmbWF4NzMyeF9kcml2ZXIpOwogfQotbW9kdWxlX2luaXQobWF4NzMyeF9pbml0KTsKKy8qIHJlZ2lzdGVyIGFmdGVyIGkyYyBwb3N0Y29yZSBpbml0Y2FsbCBhbmQgYmVmb3JlCisgKiBzdWJzeXMgaW5pdGNhbGxzIHRoYXQgbWF5IHJlbHkgb24gdGhlc2UgR1BJT3MKKyAqLworc3Vic3lzX2luaXRjYWxsKG1heDczMnhfaW5pdCk7CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBtYXg3MzJ4X2V4aXQodm9pZCkKIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3Bpby9tY3AyM3MwOC5jIGIvZHJpdmVycy9ncGlvL21jcDIzczA4LmMKaW5kZXggOGExYjQwNS4uODljMWQyMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncGlvL21jcDIzczA4LmMKKysrIGIvZHJpdmVycy9ncGlvL21jcDIzczA4LmMKQEAgLTQxOSw3ICs0MTksMTAgQEAKIHsKIAlyZXR1cm4gc3BpX3JlZ2lzdGVyX2RyaXZlcigmbWNwMjNzMDhfZHJpdmVyKTsKIH0KLW1vZHVsZV9pbml0KG1jcDIzczA4X2luaXQpOworLyogcmVnaXN0ZXIgYWZ0ZXIgc3BpIHBvc3Rjb3JlIGluaXRjYWxsIGFuZCBiZWZvcmUKKyAqIHN1YnN5cyBpbml0Y2FsbHMgdGhhdCBtYXkgcmVseSBvbiB0aGVzZSBHUElPcworICovCitzdWJzeXNfaW5pdGNhbGwobWNwMjNzMDhfaW5pdCk7CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBtY3AyM3MwOF9leGl0KHZvaWQpCiB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwaW8vcGNhOTUzeC5jIGIvZHJpdmVycy9ncGlvL3BjYTk1M3guYwppbmRleCBjYzg0Njg2Li45Y2VlYjg5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwaW8vcGNhOTUzeC5jCisrKyBiL2RyaXZlcnMvZ3Bpby9wY2E5NTN4LmMKQEAgLTI4OSw3ICsyODksMTAgQEAKIHsKIAlyZXR1cm4gaTJjX2FkZF9kcml2ZXIoJnBjYTk1M3hfZHJpdmVyKTsKIH0KLW1vZHVsZV9pbml0KHBjYTk1M3hfaW5pdCk7CisvKiByZWdpc3RlciBhZnRlciBpMmMgcG9zdGNvcmUgaW5pdGNhbGwgYW5kIGJlZm9yZQorICogc3Vic3lzIGluaXRjYWxscyB0aGF0IG1heSByZWx5IG9uIHRoZXNlIEdQSU9zCisgKi8KK3N1YnN5c19pbml0Y2FsbChwY2E5NTN4X2luaXQpOwogCiBzdGF0aWMgdm9pZCBfX2V4aXQgcGNhOTUzeF9leGl0KHZvaWQpCiB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwaW8vcGNmODU3eC5jIGIvZHJpdmVycy9ncGlvL3BjZjg1N3guYwppbmRleCBmYzljNmFlLi40YmMyMDcwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwaW8vcGNmODU3eC5jCisrKyBiL2RyaXZlcnMvZ3Bpby9wY2Y4NTd4LmMKQEAgLTM1MSw3ICszNTEsMTAgQEAKIHsKIAlyZXR1cm4gaTJjX2FkZF9kcml2ZXIoJnBjZjg1N3hfZHJpdmVyKTsKIH0KLW1vZHVsZV9pbml0KHBjZjg1N3hfaW5pdCk7CisvKiByZWdpc3RlciBhZnRlciBpMmMgcG9zdGNvcmUgaW5pdGNhbGwgYW5kIGJlZm9yZQorICogc3Vic3lzIGluaXRjYWxscyB0aGF0IG1heSByZWx5IG9uIHRoZXNlIEdQSU9zCisgKi8KK3N1YnN5c19pbml0Y2FsbChwY2Y4NTd4X2luaXQpOwogCiBzdGF0aWMgdm9pZCBfX2V4aXQgcGNmODU3eF9leGl0KHZvaWQpCiB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vS2NvbmZpZyBiL2RyaXZlcnMvZ3B1L2RybS9LY29uZmlnCmluZGV4IDYxMGQ2ZmQuLjkwOTc1MDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9LY29uZmlnCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9LY29uZmlnCkBAIC02LDcgKzYsNyBAQAogIwogbWVudWNvbmZpZyBEUk0KIAl0cmlzdGF0ZSAiRGlyZWN0IFJlbmRlcmluZyBNYW5hZ2VyIChYRnJlZTg2IDQuMS4wIGFuZCBoaWdoZXIgRFJJIHN1cHBvcnQpIgotCWRlcGVuZHMgb24gKEFHUCB8fCBBR1A9bikgJiYgUENJICYmICFFTVVMQVRFRF9DTVBYQ0hHCisJZGVwZW5kcyBvbiAoQUdQIHx8IEFHUD1uKSAmJiBQQ0kgJiYgIUVNVUxBVEVEX0NNUFhDSEcgJiYgU0hNRU0KIAloZWxwCiAJICBLZXJuZWwtbGV2ZWwgc3VwcG9ydCBmb3IgdGhlIERpcmVjdCBSZW5kZXJpbmcgSW5mcmFzdHJ1Y3R1cmUgKERSSSkKIAkgIGludHJvZHVjZWQgaW4gWEZyZWU4NiA0LjAuIElmIHlvdSBzYXkgWSBoZXJlLCB5b3UgbmVlZCB0byBzZWxlY3QKQEAgLTg3LDYgKzg3LDcgQEAKIGNvbmZpZyBEUk1fU0lTCiAJdHJpc3RhdGUgIlNpUyB2aWRlbyBjYXJkcyIKIAlkZXBlbmRzIG9uIERSTSAmJiBBR1AKKwlkZXBlbmRzIG9uIEZCX1NJUyB8fCBGQl9TSVM9bgogCWhlbHAKIAkgIENob29zZSB0aGlzIG9wdGlvbiBpZiB5b3UgaGF2ZSBhIFNpUyA2MzAgb3IgY29tcGF0aWJsZSB2aWRlbwogICAgICAgICAgIGNoaXBzZXQuIElmIE0gaXMgc2VsZWN0ZWQgdGhlIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBzaXMuIEFHUApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL01ha2VmaWxlIGIvZHJpdmVycy9ncHUvZHJtL01ha2VmaWxlCmluZGV4IGU5ZjlhOTcuLjc0ZGE5OTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGUKQEAgLTQsOCArNCw5IEBACiAKIGNjZmxhZ3MteSA6PSAtSWluY2x1ZGUvZHJtCiAKLWRybS15ICAgICAgIDo9CWRybV9hdXRoLm8gZHJtX2J1ZnMubyBkcm1fY29udGV4dC5vIGRybV9kbWEubyBkcm1fZHJhd2FibGUubyBcCi0JCWRybV9kcnYubyBkcm1fZm9wcy5vIGRybV9pb2N0bC5vIGRybV9pcnEubyBcCitkcm0teSAgICAgICA6PQlkcm1fYXV0aC5vIGRybV9idWZzLm8gZHJtX2NhY2hlLm8gXAorCQlkcm1fY29udGV4dC5vIGRybV9kbWEubyBkcm1fZHJhd2FibGUubyBcCisJCWRybV9kcnYubyBkcm1fZm9wcy5vIGRybV9nZW0ubyBkcm1faW9jdGwubyBkcm1faXJxLm8gXAogCQlkcm1fbG9jay5vIGRybV9tZW1vcnkubyBkcm1fcHJvYy5vIGRybV9zdHViLm8gZHJtX3ZtLm8gXAogCQlkcm1fYWdwc3VwcG9ydC5vIGRybV9zY2F0dGVyLm8gYXRpX3BjaWdhcnQubyBkcm1fcGNpLm8gXAogCQlkcm1fc3lzZnMubyBkcm1faGFzaHRhYi5vIGRybV9zbWFuLm8gZHJtX21tLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fYWdwc3VwcG9ydC5jIGIvZHJpdmVycy9ncHUvZHJtL2RybV9hZ3BzdXBwb3J0LmMKaW5kZXggYWVmYTVhYy4uM2QzM2I4MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9hZ3BzdXBwb3J0LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2RybV9hZ3BzdXBwb3J0LmMKQEAgLTMzLDYgKzMzLDcgQEAKIAogI2luY2x1ZGUgImRybVAuaCIKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxhc20vYWdwLmg+CiAKICNpZiBfX09TX0hBU19BR1AKIApAQCAtNDUyLDQgKzQ1Myw1MyBAQAogCXJldHVybiBhZ3BfdW5iaW5kX21lbW9yeShoYW5kbGUpOwogfQogCi0jZW5kaWYJCQkJLyogX19PU19IQVNfQUdQICovCisvKioKKyAqIEJpbmRzIGEgY29sbGVjdGlvbiBvZiBwYWdlcyBpbnRvIEFHUCBtZW1vcnkgYXQgdGhlIGdpdmVuIG9mZnNldCwgcmV0dXJuaW5nCisgKiB0aGUgQUdQIG1lbW9yeSBzdHJ1Y3R1cmUgY29udGFpbmluZyB0aGVtLgorICoKKyAqIE5vIHJlZmVyZW5jZSBpcyBoZWxkIG9uIHRoZSBwYWdlcyBkdXJpbmcgdGhpcyB0aW1lIC0tIGl0IGlzIHVwIHRvIHRoZQorICogY2FsbGVyIHRvIGhhbmRsZSB0aGF0LgorICovCitEUk1fQUdQX01FTSAqCitkcm1fYWdwX2JpbmRfcGFnZXMoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJICAgc3RydWN0IHBhZ2UgKipwYWdlcywKKwkJICAgdW5zaWduZWQgbG9uZyBudW1fcGFnZXMsCisJCSAgIHVpbnQzMl90IGd0dF9vZmZzZXQsCisJCSAgIHUzMiB0eXBlKQoreworCURSTV9BR1BfTUVNICptZW07CisJaW50IHJldCwgaTsKKworCURSTV9ERUJVRygiXG4iKTsKKworCW1lbSA9IGRybV9hZ3BfYWxsb2NhdGVfbWVtb3J5KGRldi0+YWdwLT5icmlkZ2UsIG51bV9wYWdlcywKKwkJCQkgICAgICB0eXBlKTsKKwlpZiAobWVtID09IE5VTEwpIHsKKwkJRFJNX0VSUk9SKCJGYWlsZWQgdG8gYWxsb2NhdGUgbWVtb3J5IGZvciAlbGQgcGFnZXNcbiIsCisJCQkgIG51bV9wYWdlcyk7CisJCXJldHVybiBOVUxMOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBudW1fcGFnZXM7IGkrKykKKwkJbWVtLT5tZW1vcnlbaV0gPSBwaHlzX3RvX2dhcnQocGFnZV90b19waHlzKHBhZ2VzW2ldKSk7CisJbWVtLT5wYWdlX2NvdW50ID0gbnVtX3BhZ2VzOworCisJbWVtLT5pc19mbHVzaGVkID0gdHJ1ZTsKKwlyZXQgPSBkcm1fYWdwX2JpbmRfbWVtb3J5KG1lbSwgZ3R0X29mZnNldCAvIFBBR0VfU0laRSk7CisJaWYgKHJldCAhPSAwKSB7CisJCURSTV9FUlJPUigiRmFpbGVkIHRvIGJpbmQgQUdQIG1lbW9yeTogJWRcbiIsIHJldCk7CisJCWFncF9mcmVlX21lbW9yeShtZW0pOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlyZXR1cm4gbWVtOworfQorRVhQT1JUX1NZTUJPTChkcm1fYWdwX2JpbmRfcGFnZXMpOworCit2b2lkIGRybV9hZ3BfY2hpcHNldF9mbHVzaChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQoreworCWFncF9mbHVzaF9jaGlwc2V0KGRldi0+YWdwLT5icmlkZ2UpOworfQorRVhQT1JUX1NZTUJPTChkcm1fYWdwX2NoaXBzZXRfZmx1c2gpOworCisjZW5kaWYgLyogX19PU19IQVNfQUdQICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2NhY2hlLmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2NhY2hlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGU5OTRhMAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fY2FjaGUuYwpAQCAtMCwwICsxLDY5IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYtMjAwNyBUdW5nc3RlbiBHcmFwaGljcywgSW5jLiwgQ2VkYXIgUGFyaywgVFguLCBVU0EKKyAqIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwKKyAqIGRpc3RyaWJ1dGUsIHN1YiBsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8KKyAqIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0bworICogdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhlCisgKiBuZXh0IHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucworICogb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT04tSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTAorICogVEhFIENPUFlSSUdIVCBIT0xERVJTLCBBVVRIT1JTIEFORC9PUiBJVFMgU1VQUExJRVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLAorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFCisgKiBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qCisgKiBBdXRob3JzOiBUaG9tYXMgSGVsbHN0csO2bSA8dGhvbWFzLWF0LXR1bmdzdGVuZ3JhcGhpY3MtZG90LWNvbT4KKyAqLworCisjaW5jbHVkZSAiZHJtUC5oIgorCisjaWYgZGVmaW5lZChDT05GSUdfWDg2KQorc3RhdGljIHZvaWQKK2RybV9jbGZsdXNoX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpCit7CisJdWludDhfdCAqcGFnZV92aXJ0dWFsOworCXVuc2lnbmVkIGludCBpOworCisJaWYgKHVubGlrZWx5KHBhZ2UgPT0gTlVMTCkpCisJCXJldHVybjsKKworCXBhZ2VfdmlydHVhbCA9IGttYXBfYXRvbWljKHBhZ2UsIEtNX1VTRVIwKTsKKwlmb3IgKGkgPSAwOyBpIDwgUEFHRV9TSVpFOyBpICs9IGJvb3RfY3B1X2RhdGEueDg2X2NsZmx1c2hfc2l6ZSkKKwkJY2xmbHVzaChwYWdlX3ZpcnR1YWwgKyBpKTsKKwlrdW5tYXBfYXRvbWljKHBhZ2VfdmlydHVhbCwgS01fVVNFUjApOworfQorI2VuZGlmCisKK3ZvaWQKK2RybV9jbGZsdXNoX3BhZ2VzKHN0cnVjdCBwYWdlICpwYWdlc1tdLCB1bnNpZ25lZCBsb25nIG51bV9wYWdlcykKK3sKKworI2lmIGRlZmluZWQoQ09ORklHX1g4NikKKwlpZiAoY3B1X2hhc19jbGZsdXNoKSB7CisJCXVuc2lnbmVkIGxvbmcgaTsKKworCQltYigpOworCQlmb3IgKGkgPSAwOyBpIDwgbnVtX3BhZ2VzOyArK2kpCisJCQlkcm1fY2xmbHVzaF9wYWdlKCpwYWdlcysrKTsKKwkJbWIoKTsKKworCQlyZXR1cm47CisJfQorCisJd2JpbnZkKCk7CisjZW5kaWYKK30KK0VYUE9SVF9TWU1CT0woZHJtX2NsZmx1c2hfcGFnZXMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9kcnYuYyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fZHJ2LmMKaW5kZXggNDUyYzJkOC4uOTZmNDE2YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9kcnYuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2Rydi5jCkBAIC0xMTYsNyArMTE2LDEzIEBACiAKIAlEUk1fSU9DVExfREVGKERSTV9JT0NUTF9XQUlUX1ZCTEFOSywgZHJtX3dhaXRfdmJsYW5rLCAwKSwKIAorCURSTV9JT0NUTF9ERUYoRFJNX0lPQ1RMX01PREVTRVRfQ1RMLCBkcm1fbW9kZXNldF9jdGwsIDApLAorCiAJRFJNX0lPQ1RMX0RFRihEUk1fSU9DVExfVVBEQVRFX0RSQVcsIGRybV91cGRhdGVfZHJhd2FibGVfaW5mbywgRFJNX0FVVEh8RFJNX01BU1RFUnxEUk1fUk9PVF9PTkxZKSwKKworCURSTV9JT0NUTF9ERUYoRFJNX0lPQ1RMX0dFTV9DTE9TRSwgZHJtX2dlbV9jbG9zZV9pb2N0bCwgMCksCisJRFJNX0lPQ1RMX0RFRihEUk1fSU9DVExfR0VNX0ZMSU5LLCBkcm1fZ2VtX2ZsaW5rX2lvY3RsLCBEUk1fQVVUSCksCisJRFJNX0lPQ1RMX0RFRihEUk1fSU9DVExfR0VNX09QRU4sIGRybV9nZW1fb3Blbl9pb2N0bCwgRFJNX0FVVEgpLAogfTsKIAogI2RlZmluZSBEUk1fQ09SRV9JT0NUTF9DT1VOVAlBUlJBWV9TSVpFKCBkcm1faW9jdGxzICkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fZm9wcy5jIGIvZHJpdmVycy9ncHUvZHJtL2RybV9mb3BzLmMKaW5kZXggODUxYTUzZi4uMGQ0NjYyNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9mb3BzLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2RybV9mb3BzLmMKQEAgLTI0Niw3ICsyNDYsNyBAQAogCW1lbXNldChwcml2LCAwLCBzaXplb2YoKnByaXYpKTsKIAlmaWxwLT5wcml2YXRlX2RhdGEgPSBwcml2OwogCXByaXYtPmZpbHAgPSBmaWxwOwotCXByaXYtPnVpZCA9IGN1cnJlbnQtPmV1aWQ7CisJcHJpdi0+dWlkID0gY3VycmVudF9ldWlkKCk7CiAJcHJpdi0+cGlkID0gdGFza19waWRfbnIoY3VycmVudCk7CiAJcHJpdi0+bWlub3IgPSBpZHJfZmluZCgmZHJtX21pbm9yc19pZHIsIG1pbm9yX2lkKTsKIAlwcml2LT5pb2N0bF9jb3VudCA9IDA7CkBAIC0yNTYsNiArMjU2LDkgQEAKIAogCUlOSVRfTElTVF9IRUFEKCZwcml2LT5saGVhZCk7CiAKKwlpZiAoZGV2LT5kcml2ZXItPmRyaXZlcl9mZWF0dXJlcyAmIERSSVZFUl9HRU0pCisJCWRybV9nZW1fb3BlbihkZXYsIHByaXYpOworCiAJaWYgKGRldi0+ZHJpdmVyLT5vcGVuKSB7CiAJCXJldCA9IGRldi0+ZHJpdmVyLT5vcGVuKGRldiwgcHJpdik7CiAJCWlmIChyZXQgPCAwKQpAQCAtNDAwLDYgKzQwMyw5IEBACiAJCWRldi0+ZHJpdmVyLT5yZWNsYWltX2J1ZmZlcnMoZGV2LCBmaWxlX3ByaXYpOwogCX0KIAorCWlmIChkZXYtPmRyaXZlci0+ZHJpdmVyX2ZlYXR1cmVzICYgRFJJVkVSX0dFTSkKKwkJZHJtX2dlbV9yZWxlYXNlKGRldiwgZmlsZV9wcml2KTsKKwogCWRybV9mYXN5bmMoLTEsIGZpbHAsIDApOwogCiAJbXV0ZXhfbG9jaygmZGV2LT5jdHhsaXN0X211dGV4KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fZ2VtLmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2dlbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNjZDFhZmQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2dlbS5jCkBAIC0wLDAgKzEsNDIxIEBACisvKgorICogQ29weXJpZ2h0IMKpIDIwMDggSW50ZWwgQ29ycG9yYXRpb24KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAorICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhlIG5leHQKKyAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUKKyAqIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAorICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCisgKiBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTCisgKiBJTiBUSEUgU09GVFdBUkUuCisgKgorICogQXV0aG9yczoKKyAqICAgIEVyaWMgQW5ob2x0IDxlcmljQGFuaG9sdC5uZXQ+CisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC9mcy5oPgorI2luY2x1ZGUgPGxpbnV4L2ZpbGUuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9tbWFuLmg+CisjaW5jbHVkZSA8bGludXgvcGFnZW1hcC5oPgorI2luY2x1ZGUgImRybVAuaCIKKworLyoqIEBmaWxlIGRybV9nZW0uYworICoKKyAqIFRoaXMgZmlsZSBwcm92aWRlcyBzb21lIG9mIHRoZSBiYXNlIGlvY3RscyBhbmQgbGlicmFyeSByb3V0aW5lcyBmb3IKKyAqIHRoZSBncmFwaGljcyBtZW1vcnkgbWFuYWdlciBpbXBsZW1lbnRlZCBieSBlYWNoIGRldmljZSBkcml2ZXIuCisgKgorICogQmVjYXVzZSB2YXJpb3VzIGRldmljZXMgaGF2ZSBkaWZmZXJlbnQgcmVxdWlyZW1lbnRzIGluIHRlcm1zIG9mCisgKiBzeW5jaHJvbml6YXRpb24gYW5kIG1pZ3JhdGlvbiBzdHJhdGVnaWVzLCBpbXBsZW1lbnRpbmcgdGhhdCBpcyBsZWZ0IHVwIHRvCisgKiB0aGUgZHJpdmVyLCBhbmQgYWxsIHRoYXQgdGhlIGdlbmVyYWwgQVBJIHByb3ZpZGVzIHNob3VsZCBiZSBnZW5lcmljIC0tCisgKiBhbGxvY2F0aW5nIG9iamVjdHMsIHJlYWRpbmcvd3JpdGluZyBkYXRhIHdpdGggdGhlIGNwdSwgZnJlZWluZyBvYmplY3RzLgorICogRXZlbiB0aGVyZSwgcGxhdGZvcm0tZGVwZW5kZW50IG9wdGltaXphdGlvbnMgZm9yIHJlYWRpbmcvd3JpdGluZyBkYXRhIHdpdGgKKyAqIHRoZSBDUFUgbWVhbiB3ZSdsbCBsaWtlbHkgaG9vayB0aG9zZSBvdXQgdG8gZHJpdmVyLXNwZWNpZmljIGNhbGxzLiAgSG93ZXZlciwKKyAqIHRoZSBEUkkyIGltcGxlbWVudGF0aW9uIHdhbnRzIHRvIGhhdmUgYXQgbGVhc3QgYWxsb2NhdGUvbW1hcCBiZSBnZW5lcmljLgorICoKKyAqIFRoZSBnb2FsIHdhcyB0byBoYXZlIHN3YXAtYmFja2VkIG9iamVjdCBhbGxvY2F0aW9uIG1hbmFnZWQgdGhyb3VnaAorICogc3RydWN0IGZpbGUuICBIb3dldmVyLCBmaWxlIGRlc2NyaXB0b3JzIGFzIGhhbmRsZXMgdG8gYSBzdHJ1Y3QgZmlsZSBoYXZlCisgKiB0d28gbWFqb3IgZmFpbGluZ3M6CisgKiAtIFByb2Nlc3MgbGltaXRzIHByZXZlbnQgbW9yZSB0aGFuIDEwMjQgb3Igc28gYmVpbmcgdXNlZCBhdCBhIHRpbWUgYnkKKyAqICAgZGVmYXVsdC4KKyAqIC0gSW5hYmlsaXR5IHRvIGFsbG9jYXRlIGhpZ2ggZmRzIHdpbGwgYWdncmF2YXRlIHRoZSBYIFNlcnZlcidzIHNlbGVjdCgpCisgKiAgIGhhbmRsaW5nLCBhbmQgbGlrZWx5IHRoYXQgb2YgbWFueSBHTCBjbGllbnQgYXBwbGljYXRpb25zIGFzIHdlbGwuCisgKgorICogVGhpcyBsZWQgdG8gYSBwbGFuIG9mIHVzaW5nIG91ciBvd24gaW50ZWdlciBJRHMgKGNhbGxlZCBoYW5kbGVzLCBmb2xsb3dpbmcKKyAqIERSTSB0ZXJtaW5vbG9neSkgdG8gbWltaWMgZmRzLCBhbmQgaW1wbGVtZW50IHRoZSBmZCBzeXNjYWxscyB3ZSBuZWVkIGFzCisgKiBpb2N0bHMuICBUaGUgb2JqZWN0cyB0aGVtc2VsdmVzIHdpbGwgc3RpbGwgaW5jbHVkZSB0aGUgc3RydWN0IGZpbGUgc28KKyAqIHRoYXQgd2UgY2FuIHRyYW5zaXRpb24gdG8gZmRzIGlmIHRoZSByZXF1aXJlZCBrZXJuZWwgaW5mcmFzdHJ1Y3R1cmUgc2hvd3MKKyAqIHVwIGF0IGEgbGF0ZXIgZGF0ZSwgYW5kIGFzIG91ciBpbnRlcmZhY2Ugd2l0aCBzaG1mcyBmb3IgbWVtb3J5IGFsbG9jYXRpb24uCisgKi8KKworLyoqCisgKiBJbml0aWFsaXplIHRoZSBHRU0gZGV2aWNlIGZpZWxkcworICovCisKK2ludAorZHJtX2dlbV9pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCit7CisJc3Bpbl9sb2NrX2luaXQoJmRldi0+b2JqZWN0X25hbWVfbG9jayk7CisJaWRyX2luaXQoJmRldi0+b2JqZWN0X25hbWVfaWRyKTsKKwlhdG9taWNfc2V0KCZkZXYtPm9iamVjdF9jb3VudCwgMCk7CisJYXRvbWljX3NldCgmZGV2LT5vYmplY3RfbWVtb3J5LCAwKTsKKwlhdG9taWNfc2V0KCZkZXYtPnBpbl9jb3VudCwgMCk7CisJYXRvbWljX3NldCgmZGV2LT5waW5fbWVtb3J5LCAwKTsKKwlhdG9taWNfc2V0KCZkZXYtPmd0dF9jb3VudCwgMCk7CisJYXRvbWljX3NldCgmZGV2LT5ndHRfbWVtb3J5LCAwKTsKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBBbGxvY2F0ZSBhIEdFTSBvYmplY3Qgb2YgdGhlIHNwZWNpZmllZCBzaXplIHdpdGggc2htZnMgYmFja2luZyBzdG9yZQorICovCitzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKgorZHJtX2dlbV9vYmplY3RfYWxsb2Moc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc2l6ZV90IHNpemUpCit7CisJc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmo7CisKKwlCVUdfT04oKHNpemUgJiAoUEFHRV9TSVpFIC0gMSkpICE9IDApOworCisJb2JqID0ga2NhbGxvYygxLCBzaXplb2YoKm9iaiksIEdGUF9LRVJORUwpOworCisJb2JqLT5kZXYgPSBkZXY7CisJb2JqLT5maWxwID0gc2htZW1fZmlsZV9zZXR1cCgiZHJtIG1tIG9iamVjdCIsIHNpemUsIDApOworCWlmIChJU19FUlIob2JqLT5maWxwKSkgeworCQlrZnJlZShvYmopOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlrcmVmX2luaXQoJm9iai0+cmVmY291bnQpOworCWtyZWZfaW5pdCgmb2JqLT5oYW5kbGVjb3VudCk7CisJb2JqLT5zaXplID0gc2l6ZTsKKwlpZiAoZGV2LT5kcml2ZXItPmdlbV9pbml0X29iamVjdCAhPSBOVUxMICYmCisJICAgIGRldi0+ZHJpdmVyLT5nZW1faW5pdF9vYmplY3Qob2JqKSAhPSAwKSB7CisJCWZwdXQob2JqLT5maWxwKTsKKwkJa2ZyZWUob2JqKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCWF0b21pY19pbmMoJmRldi0+b2JqZWN0X2NvdW50KTsKKwlhdG9taWNfYWRkKG9iai0+c2l6ZSwgJmRldi0+b2JqZWN0X21lbW9yeSk7CisJcmV0dXJuIG9iajsKK30KK0VYUE9SVF9TWU1CT0woZHJtX2dlbV9vYmplY3RfYWxsb2MpOworCisvKioKKyAqIFJlbW92ZXMgdGhlIG1hcHBpbmcgZnJvbSBoYW5kbGUgdG8gZmlscCBmb3IgdGhpcyBvYmplY3QuCisgKi8KK3N0YXRpYyBpbnQKK2RybV9nZW1faGFuZGxlX2RlbGV0ZShzdHJ1Y3QgZHJtX2ZpbGUgKmZpbHAsIGludCBoYW5kbGUpCit7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldjsKKwlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iajsKKworCS8qIFRoaXMgaXMgZ3Jvc3MuIFRoZSBpZHIgc3lzdGVtIGRvZXNuJ3QgbGV0IHVzIHRyeSBhIGRlbGV0ZSBhbmQKKwkgKiByZXR1cm4gYW4gZXJyb3IgY29kZS4gIEl0IGp1c3Qgc3Bld3MgaWYgeW91IGZhaWwgYXQgZGVsZXRpbmcuCisJICogU28sIHdlIGhhdmUgdG8gZ3JhYiBhIGxvY2sgYXJvdW5kIGZpbmRpbmcgdGhlIG9iamVjdCBhbmQgdGhlbgorCSAqIGRvaW5nIHRoZSBkZWxldGUgb24gaXQgYW5kIGRyb3BwaW5nIHRoZSByZWZjb3VudCwgb3IgdGhlIHVzZXIKKwkgKiBjb3VsZCByYWNlIHVzIHRvIGRvdWJsZS1kZWNyZW1lbnQgdGhlIHJlZmNvdW50IGFuZCBjYXVzZSBhCisJICogdXNlLWFmdGVyLWZyZWUgbGF0ZXIuICBHaXZlbiB0aGUgZnJlcXVlbmN5IG9mIG91ciBoYW5kbGUgbG9va3VwcywKKwkgKiB3ZSBtYXkgd2FudCB0byB1c2UgaWRhIGZvciBudW1iZXIgYWxsb2NhdGlvbiBhbmQgYSBoYXNoIHRhYmxlCisJICogZm9yIHRoZSBwb2ludGVycywgYW55d2F5LgorCSAqLworCXNwaW5fbG9jaygmZmlscC0+dGFibGVfbG9jayk7CisKKwkvKiBDaGVjayBpZiB3ZSBjdXJyZW50bHkgaGF2ZSBhIHJlZmVyZW5jZSBvbiB0aGUgb2JqZWN0ICovCisJb2JqID0gaWRyX2ZpbmQoJmZpbHAtPm9iamVjdF9pZHIsIGhhbmRsZSk7CisJaWYgKG9iaiA9PSBOVUxMKSB7CisJCXNwaW5fdW5sb2NrKCZmaWxwLT50YWJsZV9sb2NrKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCWRldiA9IG9iai0+ZGV2OworCisJLyogUmVsZWFzZSByZWZlcmVuY2UgYW5kIGRlY3JlbWVudCByZWZjb3VudC4gKi8KKwlpZHJfcmVtb3ZlKCZmaWxwLT5vYmplY3RfaWRyLCBoYW5kbGUpOworCXNwaW5fdW5sb2NrKCZmaWxwLT50YWJsZV9sb2NrKTsKKworCW11dGV4X2xvY2soJmRldi0+c3RydWN0X211dGV4KTsKKwlkcm1fZ2VtX29iamVjdF9oYW5kbGVfdW5yZWZlcmVuY2Uob2JqKTsKKwltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKKworCXJldHVybiAwOworfQorCisvKioKKyAqIENyZWF0ZSBhIGhhbmRsZSBmb3IgdGhpcyBvYmplY3QuIFRoaXMgYWRkcyBhIGhhbmRsZSByZWZlcmVuY2UKKyAqIHRvIHRoZSBvYmplY3QsIHdoaWNoIGluY2x1ZGVzIGEgcmVndWxhciByZWZlcmVuY2UgY291bnQuIENhbGxlcnMKKyAqIHdpbGwgbGlrZWx5IHdhbnQgdG8gZGVyZWZlcmVuY2UgdGhlIG9iamVjdCBhZnRlcndhcmRzLgorICovCitpbnQKK2RybV9nZW1faGFuZGxlX2NyZWF0ZShzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdiwKKwkJICAgICAgIHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqLAorCQkgICAgICAgaW50ICpoYW5kbGVwKQoreworCWludAlyZXQ7CisKKwkvKgorCSAqIEdldCB0aGUgdXNlci12aXNpYmxlIGhhbmRsZSB1c2luZyBpZHIuCisJICovCithZ2FpbjoKKwkvKiBlbnN1cmUgdGhlcmUgaXMgc3BhY2UgYXZhaWxhYmxlIHRvIGFsbG9jYXRlIGEgaGFuZGxlICovCisJaWYgKGlkcl9wcmVfZ2V0KCZmaWxlX3ByaXYtPm9iamVjdF9pZHIsIEdGUF9LRVJORUwpID09IDApCisJCXJldHVybiAtRU5PTUVNOworCisJLyogZG8gdGhlIGFsbG9jYXRpb24gdW5kZXIgb3VyIHNwaW5sb2NrICovCisJc3Bpbl9sb2NrKCZmaWxlX3ByaXYtPnRhYmxlX2xvY2spOworCXJldCA9IGlkcl9nZXRfbmV3X2Fib3ZlKCZmaWxlX3ByaXYtPm9iamVjdF9pZHIsIG9iaiwgMSwgaGFuZGxlcCk7CisJc3Bpbl91bmxvY2soJmZpbGVfcHJpdi0+dGFibGVfbG9jayk7CisJaWYgKHJldCA9PSAtRUFHQUlOKQorCQlnb3RvIGFnYWluOworCisJaWYgKHJldCAhPSAwKQorCQlyZXR1cm4gcmV0OworCisJZHJtX2dlbV9vYmplY3RfaGFuZGxlX3JlZmVyZW5jZShvYmopOworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTChkcm1fZ2VtX2hhbmRsZV9jcmVhdGUpOworCisvKiogUmV0dXJucyBhIHJlZmVyZW5jZSB0byB0aGUgb2JqZWN0IG5hbWVkIGJ5IHRoZSBoYW5kbGUuICovCitzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKgorZHJtX2dlbV9vYmplY3RfbG9va3VwKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHN0cnVjdCBkcm1fZmlsZSAqZmlscCwKKwkJICAgICAgaW50IGhhbmRsZSkKK3sKKwlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iajsKKworCXNwaW5fbG9jaygmZmlscC0+dGFibGVfbG9jayk7CisKKwkvKiBDaGVjayBpZiB3ZSBjdXJyZW50bHkgaGF2ZSBhIHJlZmVyZW5jZSBvbiB0aGUgb2JqZWN0ICovCisJb2JqID0gaWRyX2ZpbmQoJmZpbHAtPm9iamVjdF9pZHIsIGhhbmRsZSk7CisJaWYgKG9iaiA9PSBOVUxMKSB7CisJCXNwaW5fdW5sb2NrKCZmaWxwLT50YWJsZV9sb2NrKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJZHJtX2dlbV9vYmplY3RfcmVmZXJlbmNlKG9iaik7CisKKwlzcGluX3VubG9jaygmZmlscC0+dGFibGVfbG9jayk7CisKKwlyZXR1cm4gb2JqOworfQorRVhQT1JUX1NZTUJPTChkcm1fZ2VtX29iamVjdF9sb29rdXApOworCisvKioKKyAqIFJlbGVhc2VzIHRoZSBoYW5kbGUgdG8gYW4gbW0gb2JqZWN0LgorICovCitpbnQKK2RybV9nZW1fY2xvc2VfaW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKKwkJICAgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KQoreworCXN0cnVjdCBkcm1fZ2VtX2Nsb3NlICphcmdzID0gZGF0YTsKKwlpbnQgcmV0OworCisJaWYgKCEoZGV2LT5kcml2ZXItPmRyaXZlcl9mZWF0dXJlcyAmIERSSVZFUl9HRU0pKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCXJldCA9IGRybV9nZW1faGFuZGxlX2RlbGV0ZShmaWxlX3ByaXYsIGFyZ3MtPmhhbmRsZSk7CisKKwlyZXR1cm4gcmV0OworfQorCisvKioKKyAqIENyZWF0ZSBhIGdsb2JhbCBuYW1lIGZvciBhbiBvYmplY3QsIHJldHVybmluZyB0aGUgbmFtZS4KKyAqCisgKiBOb3RlIHRoYXQgdGhlIG5hbWUgZG9lcyBub3QgaG9sZCBhIHJlZmVyZW5jZTsgd2hlbiB0aGUgb2JqZWN0CisgKiBpcyBmcmVlZCwgdGhlIG5hbWUgZ29lcyBhd2F5LgorICovCitpbnQKK2RybV9nZW1fZmxpbmtfaW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKKwkJICAgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KQoreworCXN0cnVjdCBkcm1fZ2VtX2ZsaW5rICphcmdzID0gZGF0YTsKKwlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iajsKKwlpbnQgcmV0OworCisJaWYgKCEoZGV2LT5kcml2ZXItPmRyaXZlcl9mZWF0dXJlcyAmIERSSVZFUl9HRU0pKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCW9iaiA9IGRybV9nZW1fb2JqZWN0X2xvb2t1cChkZXYsIGZpbGVfcHJpdiwgYXJncy0+aGFuZGxlKTsKKwlpZiAob2JqID09IE5VTEwpCisJCXJldHVybiAtRUJBREY7CisKK2FnYWluOgorCWlmIChpZHJfcHJlX2dldCgmZGV2LT5vYmplY3RfbmFtZV9pZHIsIEdGUF9LRVJORUwpID09IDApCisJCXJldHVybiAtRU5PTUVNOworCisJc3Bpbl9sb2NrKCZkZXYtPm9iamVjdF9uYW1lX2xvY2spOworCWlmIChvYmotPm5hbWUpIHsKKwkJYXJncy0+bmFtZSA9IG9iai0+bmFtZTsKKwkJc3Bpbl91bmxvY2soJmRldi0+b2JqZWN0X25hbWVfbG9jayk7CisJCXJldHVybiAwOworCX0KKwlyZXQgPSBpZHJfZ2V0X25ld19hYm92ZSgmZGV2LT5vYmplY3RfbmFtZV9pZHIsIG9iaiwgMSwKKwkJCQkgJm9iai0+bmFtZSk7CisJc3Bpbl91bmxvY2soJmRldi0+b2JqZWN0X25hbWVfbG9jayk7CisJaWYgKHJldCA9PSAtRUFHQUlOKQorCQlnb3RvIGFnYWluOworCisJaWYgKHJldCAhPSAwKSB7CisJCW11dGV4X2xvY2soJmRldi0+c3RydWN0X211dGV4KTsKKwkJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2Uob2JqKTsKKwkJbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CisJCXJldHVybiByZXQ7CisJfQorCisJLyoKKwkgKiBMZWF2ZSB0aGUgcmVmZXJlbmNlIGZyb20gdGhlIGxvb2t1cCBhcm91bmQgYXMgdGhlCisJICogbmFtZSB0YWJsZSBub3cgaG9sZHMgb25lCisJICovCisJYXJncy0+bmFtZSA9ICh1aW50NjRfdCkgb2JqLT5uYW1lOworCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogT3BlbiBhbiBvYmplY3QgdXNpbmcgdGhlIGdsb2JhbCBuYW1lLCByZXR1cm5pbmcgYSBoYW5kbGUgYW5kIHRoZSBzaXplLgorICoKKyAqIFRoaXMgaGFuZGxlIChvZiBjb3Vyc2UpIGhvbGRzIGEgcmVmZXJlbmNlIHRvIHRoZSBvYmplY3QsIHNvIHRoZSBvYmplY3QKKyAqIHdpbGwgbm90IGdvIGF3YXkgdW50aWwgdGhlIGhhbmRsZSBpcyBkZWxldGVkLgorICovCitpbnQKK2RybV9nZW1fb3Blbl9pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAorCQkgICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdikKK3sKKwlzdHJ1Y3QgZHJtX2dlbV9vcGVuICphcmdzID0gZGF0YTsKKwlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iajsKKwlpbnQgcmV0OworCWludCBoYW5kbGU7CisKKwlpZiAoIShkZXYtPmRyaXZlci0+ZHJpdmVyX2ZlYXR1cmVzICYgRFJJVkVSX0dFTSkpCisJCXJldHVybiAtRU5PREVWOworCisJc3Bpbl9sb2NrKCZkZXYtPm9iamVjdF9uYW1lX2xvY2spOworCW9iaiA9IGlkcl9maW5kKCZkZXYtPm9iamVjdF9uYW1lX2lkciwgKGludCkgYXJncy0+bmFtZSk7CisJaWYgKG9iaikKKwkJZHJtX2dlbV9vYmplY3RfcmVmZXJlbmNlKG9iaik7CisJc3Bpbl91bmxvY2soJmRldi0+b2JqZWN0X25hbWVfbG9jayk7CisJaWYgKCFvYmopCisJCXJldHVybiAtRU5PRU5UOworCisJcmV0ID0gZHJtX2dlbV9oYW5kbGVfY3JlYXRlKGZpbGVfcHJpdiwgb2JqLCAmaGFuZGxlKTsKKwltdXRleF9sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CisJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2Uob2JqKTsKKwltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJYXJncy0+aGFuZGxlID0gaGFuZGxlOworCWFyZ3MtPnNpemUgPSBvYmotPnNpemU7CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBDYWxsZWQgYXQgZGV2aWNlIG9wZW4gdGltZSwgc2V0cyB1cCB0aGUgc3RydWN0dXJlIGZvciBoYW5kbGluZyByZWZjb3VudGluZworICogb2YgbW0gb2JqZWN0cy4KKyAqLwordm9pZAorZHJtX2dlbV9vcGVuKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2YXRlKQoreworCWlkcl9pbml0KCZmaWxlX3ByaXZhdGUtPm9iamVjdF9pZHIpOworCXNwaW5fbG9ja19pbml0KCZmaWxlX3ByaXZhdGUtPnRhYmxlX2xvY2spOworfQorCisvKioKKyAqIENhbGxlZCBhdCBkZXZpY2UgY2xvc2UgdG8gcmVsZWFzZSB0aGUgZmlsZSdzCisgKiBoYW5kbGUgcmVmZXJlbmNlcyBvbiBvYmplY3RzLgorICovCitzdGF0aWMgaW50Citkcm1fZ2VtX29iamVjdF9yZWxlYXNlX2hhbmRsZShpbnQgaWQsIHZvaWQgKnB0ciwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiA9IHB0cjsKKworCWRybV9nZW1fb2JqZWN0X2hhbmRsZV91bnJlZmVyZW5jZShvYmopOworCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogQ2FsbGVkIGF0IGNsb3NlIHRpbWUgd2hlbiB0aGUgZmlscCBpcyBnb2luZyBhd2F5LgorICoKKyAqIFJlbGVhc2VzIGFueSByZW1haW5pbmcgcmVmZXJlbmNlcyBvbiBvYmplY3RzIGJ5IHRoaXMgZmlscC4KKyAqLwordm9pZAorZHJtX2dlbV9yZWxlYXNlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2YXRlKQoreworCW11dGV4X2xvY2soJmRldi0+c3RydWN0X211dGV4KTsKKwlpZHJfZm9yX2VhY2goJmZpbGVfcHJpdmF0ZS0+b2JqZWN0X2lkciwKKwkJICAgICAmZHJtX2dlbV9vYmplY3RfcmVsZWFzZV9oYW5kbGUsIE5VTEwpOworCisJaWRyX2Rlc3Ryb3koJmZpbGVfcHJpdmF0ZS0+b2JqZWN0X2lkcik7CisJbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7Cit9CisKKy8qKgorICogQ2FsbGVkIGFmdGVyIHRoZSBsYXN0IHJlZmVyZW5jZSB0byB0aGUgb2JqZWN0IGhhcyBiZWVuIGxvc3QuCisgKgorICogRnJlZXMgdGhlIG9iamVjdAorICovCit2b2lkCitkcm1fZ2VtX29iamVjdF9mcmVlKHN0cnVjdCBrcmVmICprcmVmKQoreworCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqID0gKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqKSBrcmVmOworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBvYmotPmRldjsKKworCUJVR19PTighbXV0ZXhfaXNfbG9ja2VkKCZkZXYtPnN0cnVjdF9tdXRleCkpOworCisJaWYgKGRldi0+ZHJpdmVyLT5nZW1fZnJlZV9vYmplY3QgIT0gTlVMTCkKKwkJZGV2LT5kcml2ZXItPmdlbV9mcmVlX29iamVjdChvYmopOworCisJZnB1dChvYmotPmZpbHApOworCWF0b21pY19kZWMoJmRldi0+b2JqZWN0X2NvdW50KTsKKwlhdG9taWNfc3ViKG9iai0+c2l6ZSwgJmRldi0+b2JqZWN0X21lbW9yeSk7CisJa2ZyZWUob2JqKTsKK30KK0VYUE9SVF9TWU1CT0woZHJtX2dlbV9vYmplY3RfZnJlZSk7CisKKy8qKgorICogQ2FsbGVkIGFmdGVyIHRoZSBsYXN0IGhhbmRsZSB0byB0aGUgb2JqZWN0IGhhcyBiZWVuIGNsb3NlZAorICoKKyAqIFJlbW92ZXMgYW55IG5hbWUgZm9yIHRoZSBvYmplY3QuIE5vdGUgdGhhdCB0aGlzIG11c3QgYmUKKyAqIGNhbGxlZCBiZWZvcmUgZHJtX2dlbV9vYmplY3RfZnJlZSBvciB3ZSdsbCBiZSB0b3VjaGluZworICogZnJlZWQgbWVtb3J5CisgKi8KK3ZvaWQKK2RybV9nZW1fb2JqZWN0X2hhbmRsZV9mcmVlKHN0cnVjdCBrcmVmICprcmVmKQoreworCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqID0gY29udGFpbmVyX29mKGtyZWYsCisJCQkJCQkgIHN0cnVjdCBkcm1fZ2VtX29iamVjdCwKKwkJCQkJCSAgaGFuZGxlY291bnQpOworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBvYmotPmRldjsKKworCS8qIFJlbW92ZSBhbnkgbmFtZSBmb3IgdGhpcyBvYmplY3QgKi8KKwlzcGluX2xvY2soJmRldi0+b2JqZWN0X25hbWVfbG9jayk7CisJaWYgKG9iai0+bmFtZSkgeworCQlpZHJfcmVtb3ZlKCZkZXYtPm9iamVjdF9uYW1lX2lkciwgb2JqLT5uYW1lKTsKKwkJc3Bpbl91bmxvY2soJmRldi0+b2JqZWN0X25hbWVfbG9jayk7CisJCS8qCisJCSAqIFRoZSBvYmplY3QgbmFtZSBoZWxkIGEgcmVmZXJlbmNlIHRvIHRoaXMgb2JqZWN0LCBkcm9wCisJCSAqIHRoYXQgbm93LgorCQkgKi8KKwkJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2Uob2JqKTsKKwl9IGVsc2UKKwkJc3Bpbl91bmxvY2soJmRldi0+b2JqZWN0X25hbWVfbG9jayk7CisKK30KK0VYUE9SVF9TWU1CT0woZHJtX2dlbV9vYmplY3RfaGFuZGxlX2ZyZWUpOworCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2lycS5jIGIvZHJpdmVycy9ncHUvZHJtL2RybV9pcnEuYwppbmRleCA1M2YwZTVhLi40MDkxYjllIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2lycS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1faXJxLmMKQEAgLTYzLDcgKzYzLDcgQEAKIAkgICAgcC0+ZGV2bnVtICE9IFBDSV9TTE9UKGRldi0+cGRldi0+ZGV2Zm4pIHx8IHAtPmZ1bmNudW0gIT0gUENJX0ZVTkMoZGV2LT5wZGV2LT5kZXZmbikpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JcC0+aXJxID0gZGV2LT5pcnE7CisJcC0+aXJxID0gZGV2LT5wZGV2LT5pcnE7CiAKIAlEUk1fREVCVUcoIiVkOiVkOiVkID0+IElSUSAlZFxuIiwgcC0+YnVzbnVtLCBwLT5kZXZudW0sIHAtPmZ1bmNudW0sCiAJCSAgcC0+aXJxKTsKQEAgLTcxLDI1ICs3MSwxMzcgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIHZvaWQgdmJsYW5rX2Rpc2FibGVfZm4odW5zaWduZWQgbG9uZyBhcmcpCit7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IChzdHJ1Y3QgZHJtX2RldmljZSAqKWFyZzsKKwl1bnNpZ25lZCBsb25nIGlycWZsYWdzOworCWludCBpOworCisJaWYgKCFkZXYtPnZibGFua19kaXNhYmxlX2FsbG93ZWQpCisJCXJldHVybjsKKworCWZvciAoaSA9IDA7IGkgPCBkZXYtPm51bV9jcnRjczsgaSsrKSB7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZkZXYtPnZibF9sb2NrLCBpcnFmbGFncyk7CisJCWlmIChhdG9taWNfcmVhZCgmZGV2LT52YmxhbmtfcmVmY291bnRbaV0pID09IDAgJiYKKwkJICAgIGRldi0+dmJsYW5rX2VuYWJsZWRbaV0pIHsKKwkJCURSTV9ERUJVRygiZGlzYWJsaW5nIHZibGFuayBvbiBjcnRjICVkXG4iLCBpKTsKKwkJCWRldi0+bGFzdF92YmxhbmtbaV0gPQorCQkJCWRldi0+ZHJpdmVyLT5nZXRfdmJsYW5rX2NvdW50ZXIoZGV2LCBpKTsKKwkJCWRldi0+ZHJpdmVyLT5kaXNhYmxlX3ZibGFuayhkZXYsIGkpOworCQkJZGV2LT52YmxhbmtfZW5hYmxlZFtpXSA9IDA7CisJCX0KKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT52YmxfbG9jaywgaXJxZmxhZ3MpOworCX0KK30KKworc3RhdGljIHZvaWQgZHJtX3ZibGFua19jbGVhbnVwKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCit7CisJLyogQmFpbCBpZiB0aGUgZHJpdmVyIGRpZG4ndCBjYWxsIGRybV92YmxhbmtfaW5pdCgpICovCisJaWYgKGRldi0+bnVtX2NydGNzID09IDApCisJCXJldHVybjsKKworCWRlbF90aW1lcigmZGV2LT52YmxhbmtfZGlzYWJsZV90aW1lcik7CisKKwl2YmxhbmtfZGlzYWJsZV9mbigodW5zaWduZWQgbG9uZylkZXYpOworCisJZHJtX2ZyZWUoZGV2LT52YmxfcXVldWUsIHNpemVvZigqZGV2LT52YmxfcXVldWUpICogZGV2LT5udW1fY3J0Y3MsCisJCSBEUk1fTUVNX0RSSVZFUik7CisJZHJtX2ZyZWUoZGV2LT52Ymxfc2lncywgc2l6ZW9mKCpkZXYtPnZibF9zaWdzKSAqIGRldi0+bnVtX2NydGNzLAorCQkgRFJNX01FTV9EUklWRVIpOworCWRybV9mcmVlKGRldi0+X3ZibGFua19jb3VudCwgc2l6ZW9mKCpkZXYtPl92YmxhbmtfY291bnQpICoKKwkJIGRldi0+bnVtX2NydGNzLCBEUk1fTUVNX0RSSVZFUik7CisJZHJtX2ZyZWUoZGV2LT52YmxhbmtfcmVmY291bnQsIHNpemVvZigqZGV2LT52YmxhbmtfcmVmY291bnQpICoKKwkJIGRldi0+bnVtX2NydGNzLCBEUk1fTUVNX0RSSVZFUik7CisJZHJtX2ZyZWUoZGV2LT52YmxhbmtfZW5hYmxlZCwgc2l6ZW9mKCpkZXYtPnZibGFua19lbmFibGVkKSAqCisJCSBkZXYtPm51bV9jcnRjcywgRFJNX01FTV9EUklWRVIpOworCWRybV9mcmVlKGRldi0+bGFzdF92YmxhbmssIHNpemVvZigqZGV2LT5sYXN0X3ZibGFuaykgKiBkZXYtPm51bV9jcnRjcywKKwkJIERSTV9NRU1fRFJJVkVSKTsKKwlkcm1fZnJlZShkZXYtPnZibGFua19pbm1vZGVzZXQsIHNpemVvZigqZGV2LT52YmxhbmtfaW5tb2Rlc2V0KSAqCisJCSBkZXYtPm51bV9jcnRjcywgRFJNX01FTV9EUklWRVIpOworCisJZGV2LT5udW1fY3J0Y3MgPSAwOworfQorCitpbnQgZHJtX3ZibGFua19pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGludCBudW1fY3J0Y3MpCit7CisJaW50IGksIHJldCA9IC1FTk9NRU07CisKKwlzZXR1cF90aW1lcigmZGV2LT52YmxhbmtfZGlzYWJsZV90aW1lciwgdmJsYW5rX2Rpc2FibGVfZm4sCisJCSAgICAodW5zaWduZWQgbG9uZylkZXYpOworCXNwaW5fbG9ja19pbml0KCZkZXYtPnZibF9sb2NrKTsKKwlhdG9taWNfc2V0KCZkZXYtPnZibF9zaWduYWxfcGVuZGluZywgMCk7CisJZGV2LT5udW1fY3J0Y3MgPSBudW1fY3J0Y3M7CisKKwlkZXYtPnZibF9xdWV1ZSA9IGRybV9hbGxvYyhzaXplb2Yod2FpdF9xdWV1ZV9oZWFkX3QpICogbnVtX2NydGNzLAorCQkJCSAgIERSTV9NRU1fRFJJVkVSKTsKKwlpZiAoIWRldi0+dmJsX3F1ZXVlKQorCQlnb3RvIGVycjsKKworCWRldi0+dmJsX3NpZ3MgPSBkcm1fYWxsb2Moc2l6ZW9mKHN0cnVjdCBsaXN0X2hlYWQpICogbnVtX2NydGNzLAorCQkJCSAgRFJNX01FTV9EUklWRVIpOworCWlmICghZGV2LT52Ymxfc2lncykKKwkJZ290byBlcnI7CisKKwlkZXYtPl92YmxhbmtfY291bnQgPSBkcm1fYWxsb2Moc2l6ZW9mKGF0b21pY190KSAqIG51bV9jcnRjcywKKwkJCQkgICAgICBEUk1fTUVNX0RSSVZFUik7CisJaWYgKCFkZXYtPl92YmxhbmtfY291bnQpCisJCWdvdG8gZXJyOworCisJZGV2LT52YmxhbmtfcmVmY291bnQgPSBkcm1fYWxsb2Moc2l6ZW9mKGF0b21pY190KSAqIG51bV9jcnRjcywKKwkJCQkJIERSTV9NRU1fRFJJVkVSKTsKKwlpZiAoIWRldi0+dmJsYW5rX3JlZmNvdW50KQorCQlnb3RvIGVycjsKKworCWRldi0+dmJsYW5rX2VuYWJsZWQgPSBkcm1fY2FsbG9jKG51bV9jcnRjcywgc2l6ZW9mKGludCksCisJCQkJCSBEUk1fTUVNX0RSSVZFUik7CisJaWYgKCFkZXYtPnZibGFua19lbmFibGVkKQorCQlnb3RvIGVycjsKKworCWRldi0+bGFzdF92YmxhbmsgPSBkcm1fY2FsbG9jKG51bV9jcnRjcywgc2l6ZW9mKHUzMiksIERSTV9NRU1fRFJJVkVSKTsKKwlpZiAoIWRldi0+bGFzdF92YmxhbmspCisJCWdvdG8gZXJyOworCisJZGV2LT52YmxhbmtfaW5tb2Rlc2V0ID0gZHJtX2NhbGxvYyhudW1fY3J0Y3MsIHNpemVvZihpbnQpLAorCQkJCQkgRFJNX01FTV9EUklWRVIpOworCWlmICghZGV2LT52YmxhbmtfaW5tb2Rlc2V0KQorCQlnb3RvIGVycjsKKworCS8qIFplcm8gcGVyLWNydGMgdmJsYW5rIHN0dWZmICovCisJZm9yIChpID0gMDsgaSA8IG51bV9jcnRjczsgaSsrKSB7CisJCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmRldi0+dmJsX3F1ZXVlW2ldKTsKKwkJSU5JVF9MSVNUX0hFQUQoJmRldi0+dmJsX3NpZ3NbaV0pOworCQlhdG9taWNfc2V0KCZkZXYtPl92YmxhbmtfY291bnRbaV0sIDApOworCQlhdG9taWNfc2V0KCZkZXYtPnZibGFua19yZWZjb3VudFtpXSwgMCk7CisJfQorCisJZGV2LT52YmxhbmtfZGlzYWJsZV9hbGxvd2VkID0gMDsKKworCXJldHVybiAwOworCitlcnI6CisJZHJtX3ZibGFua19jbGVhbnVwKGRldik7CisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0woZHJtX3ZibGFua19pbml0KTsKKwogLyoqCiAgKiBJbnN0YWxsIElSUSBoYW5kbGVyLgogICoKICAqIFxwYXJhbSBkZXYgRFJNIGRldmljZS4KLSAqIFxwYXJhbSBpcnEgSVJRIG51bWJlci4KICAqCi0gKiBJbml0aWFsaXplcyB0aGUgSVJRIHJlbGF0ZWQgZGF0YSwgYW5kIHNldHVwcyBkcm1fZGV2aWNlOjp2YmxfcXVldWUuIEluc3RhbGxzIHRoZSBoYW5kbGVyLCBjYWxsaW5nIHRoZSBkcml2ZXIKKyAqIEluaXRpYWxpemVzIHRoZSBJUlEgcmVsYXRlZCBkYXRhLiBJbnN0YWxscyB0aGUgaGFuZGxlciwgY2FsbGluZyB0aGUgZHJpdmVyCiAgKiBcYyBkcm1fZHJpdmVyX2lycV9wcmVpbnN0YWxsKCkgYW5kIFxjIGRybV9kcml2ZXJfaXJxX3Bvc3RpbnN0YWxsKCkgZnVuY3Rpb25zCiAgKiBiZWZvcmUgYW5kIGFmdGVyIHRoZSBpbnN0YWxsYXRpb24uCiAgKi8KLXN0YXRpYyBpbnQgZHJtX2lycV9pbnN0YWxsKHN0cnVjdCBkcm1fZGV2aWNlICogZGV2KQoraW50IGRybV9pcnFfaW5zdGFsbChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQogewotCWludCByZXQ7CisJaW50IHJldCA9IDA7CiAJdW5zaWduZWQgbG9uZyBzaF9mbGFncyA9IDA7CiAKIAlpZiAoIWRybV9jb3JlX2NoZWNrX2ZlYXR1cmUoZGV2LCBEUklWRVJfSEFWRV9JUlEpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWlmIChkZXYtPmlycSA9PSAwKQorCWlmIChkZXYtPnBkZXYtPmlycSA9PSAwKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCW11dGV4X2xvY2soJmRldi0+c3RydWN0X211dGV4KTsKQEAgLTEwNywxOCArMjE5LDcgQEAKIAlkZXYtPmlycV9lbmFibGVkID0gMTsKIAltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKIAotCURSTV9ERUJVRygiaXJxPSVkXG4iLCBkZXYtPmlycSk7Ci0KLQlpZiAoZHJtX2NvcmVfY2hlY2tfZmVhdHVyZShkZXYsIERSSVZFUl9JUlFfVkJMKSkgewotCQlpbml0X3dhaXRxdWV1ZV9oZWFkKCZkZXYtPnZibF9xdWV1ZSk7Ci0KLQkJc3Bpbl9sb2NrX2luaXQoJmRldi0+dmJsX2xvY2spOwotCi0JCUlOSVRfTElTVF9IRUFEKCZkZXYtPnZibF9zaWdzKTsKLQkJSU5JVF9MSVNUX0hFQUQoJmRldi0+dmJsX3NpZ3MyKTsKLQotCQlkZXYtPnZibF9wZW5kaW5nID0gMDsKLQl9CisJRFJNX0RFQlVHKCJpcnE9JWRcbiIsIGRldi0+cGRldi0+aXJxKTsKIAogCS8qIEJlZm9yZSBpbnN0YWxsaW5nIGhhbmRsZXIgKi8KIAlkZXYtPmRyaXZlci0+aXJxX3ByZWluc3RhbGwoZGV2KTsKQEAgLTEyNyw4ICsyMjgsOSBAQAogCWlmIChkcm1fY29yZV9jaGVja19mZWF0dXJlKGRldiwgRFJJVkVSX0lSUV9TSEFSRUQpKQogCQlzaF9mbGFncyA9IElSUUZfU0hBUkVEOwogCi0JcmV0ID0gcmVxdWVzdF9pcnEoZGV2LT5pcnEsIGRldi0+ZHJpdmVyLT5pcnFfaGFuZGxlciwKKwlyZXQgPSByZXF1ZXN0X2lycShkcm1fZGV2X3RvX2lycShkZXYpLCBkZXYtPmRyaXZlci0+aXJxX2hhbmRsZXIsCiAJCQkgIHNoX2ZsYWdzLCBkZXYtPmRldm5hbWUsIGRldik7CisKIAlpZiAocmV0IDwgMCkgewogCQltdXRleF9sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CiAJCWRldi0+aXJxX2VuYWJsZWQgPSAwOwpAQCAtMTM3LDEwICsyMzksMTYgQEAKIAl9CiAKIAkvKiBBZnRlciBpbnN0YWxsaW5nIGhhbmRsZXIgKi8KLQlkZXYtPmRyaXZlci0+aXJxX3Bvc3RpbnN0YWxsKGRldik7CisJcmV0ID0gZGV2LT5kcml2ZXItPmlycV9wb3N0aW5zdGFsbChkZXYpOworCWlmIChyZXQgPCAwKSB7CisJCW11dGV4X2xvY2soJmRldi0+c3RydWN0X211dGV4KTsKKwkJZGV2LT5pcnFfZW5hYmxlZCA9IDA7CisJCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOworCX0KIAotCXJldHVybiAwOworCXJldHVybiByZXQ7CiB9CitFWFBPUlRfU1lNQk9MKGRybV9pcnFfaW5zdGFsbCk7CiAKIC8qKgogICogVW5pbnN0YWxsIHRoZSBJUlEgaGFuZGxlci4KQEAgLTE2NCwxNyArMjcyLDE4IEBACiAJaWYgKCFpcnFfZW5hYmxlZCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlEUk1fREVCVUcoImlycT0lZFxuIiwgZGV2LT5pcnEpOworCURSTV9ERUJVRygiaXJxPSVkXG4iLCBkZXYtPnBkZXYtPmlycSk7CiAKIAlkZXYtPmRyaXZlci0+aXJxX3VuaW5zdGFsbChkZXYpOwogCi0JZnJlZV9pcnEoZGV2LT5pcnEsIGRldik7CisJZnJlZV9pcnEoZGV2LT5wZGV2LT5pcnEsIGRldik7CisKKwlkcm1fdmJsYW5rX2NsZWFudXAoZGV2KTsKIAogCWRldi0+bG9ja2VkX3Rhc2tsZXRfZnVuYyA9IE5VTEw7CiAKIAlyZXR1cm4gMDsKIH0KLQogRVhQT1JUX1NZTUJPTChkcm1faXJxX3VuaW5zdGFsbCk7CiAKIC8qKgpAQCAtMjAxLDcgKzMxMCw3IEBACiAJCWlmICghZHJtX2NvcmVfY2hlY2tfZmVhdHVyZShkZXYsIERSSVZFUl9IQVZFX0lSUSkpCiAJCQlyZXR1cm4gMDsKIAkJaWYgKGRldi0+aWZfdmVyc2lvbiA8IERSTV9JRl9WRVJTSU9OKDEsIDIpICYmCi0JCSAgICBjdGwtPmlycSAhPSBkZXYtPmlycSkKKwkJICAgIGN0bC0+aXJxICE9IGRldi0+cGRldi0+aXJxKQogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCXJldHVybiBkcm1faXJxX2luc3RhbGwoZGV2KTsKIAljYXNlIERSTV9VTklOU1RfSEFORExFUjoKQEAgLTIxNCw2ICszMjMsMTc0IEBACiB9CiAKIC8qKgorICogZHJtX3ZibGFua19jb3VudCAtIHJldHJpZXZlICJjb29rZWQiIHZibGFuayBjb3VudGVyIHZhbHVlCisgKiBAZGV2OiBEUk0gZGV2aWNlCisgKiBAY3J0Yzogd2hpY2ggY291bnRlciB0byByZXRyaWV2ZQorICoKKyAqIEZldGNoZXMgdGhlICJjb29rZWQiIHZibGFuayBjb3VudCB2YWx1ZSB0aGF0IHJlcHJlc2VudHMgdGhlIG51bWJlciBvZgorICogdmJsYW5rIGV2ZW50cyBzaW5jZSB0aGUgc3lzdGVtIHdhcyBib290ZWQsIGluY2x1ZGluZyBsb3N0IGV2ZW50cyBkdWUgdG8KKyAqIG1vZGVzZXR0aW5nIGFjdGl2aXR5LgorICovCit1MzIgZHJtX3ZibGFua19jb3VudChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgY3J0YykKK3sKKwlyZXR1cm4gYXRvbWljX3JlYWQoJmRldi0+X3ZibGFua19jb3VudFtjcnRjXSk7Cit9CitFWFBPUlRfU1lNQk9MKGRybV92YmxhbmtfY291bnQpOworCisvKioKKyAqIGRybV91cGRhdGVfdmJsYW5rX2NvdW50IC0gdXBkYXRlIHRoZSBtYXN0ZXIgdmJsYW5rIGNvdW50ZXIKKyAqIEBkZXY6IERSTSBkZXZpY2UKKyAqIEBjcnRjOiBjb3VudGVyIHRvIHVwZGF0ZQorICoKKyAqIENhbGwgYmFjayBpbnRvIHRoZSBkcml2ZXIgdG8gdXBkYXRlIHRoZSBhcHByb3ByaWF0ZSB2YmxhbmsgY291bnRlcgorICogKHNwZWNpZmllZCBieSBAY3J0YykuICBEZWFsIHdpdGggd3JhcGFyb3VuZCwgaWYgaXQgb2NjdXJyZWQsIGFuZAorICogdXBkYXRlIHRoZSBsYXN0IHJlYWQgdmFsdWUgc28gd2UgY2FuIGRlYWwgd2l0aCB3cmFwYXJvdW5kIG9uIHRoZSBuZXh0CisgKiBjYWxsIGlmIG5lY2Vzc2FyeS4KKyAqCisgKiBPbmx5IG5lY2Vzc2FyeSB3aGVuIGdvaW5nIGZyb20gb2ZmLT5vbiwgdG8gYWNjb3VudCBmb3IgZnJhbWVzIHdlCisgKiBkaWRuJ3QgZ2V0IGFuIGludGVycnVwdCBmb3IuCisgKgorICogTm90ZTogY2FsbGVyIG11c3QgaG9sZCBkZXYtPnZibF9sb2NrIHNpbmNlIHRoaXMgcmVhZHMgJiB3cml0ZXMKKyAqIGRldmljZSB2YmxhbmsgZmllbGRzLgorICovCitzdGF0aWMgdm9pZCBkcm1fdXBkYXRlX3ZibGFua19jb3VudChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgY3J0YykKK3sKKwl1MzIgY3VyX3ZibGFuaywgZGlmZjsKKworCS8qCisJICogSW50ZXJydXB0cyB3ZXJlIGRpc2FibGVkIHByaW9yIHRvIHRoaXMgY2FsbCwgc28gZGVhbCB3aXRoIGNvdW50ZXIKKwkgKiB3cmFwIGlmIG5lZWRlZC4KKwkgKiBOT1RFISAgSXQncyBwb3NzaWJsZSB3ZSBsb3N0IGEgZnVsbCBkZXYtPm1heF92YmxhbmtfY291bnQgZXZlbnRzCisJICogaGVyZSBpZiB0aGUgcmVnaXN0ZXIgaXMgc21hbGwgb3Igd2UgaGFkIHZibGFuayBpbnRlcnJ1cHRzIG9mZiBmb3IKKwkgKiBhIGxvbmcgdGltZS4KKwkgKi8KKwljdXJfdmJsYW5rID0gZGV2LT5kcml2ZXItPmdldF92YmxhbmtfY291bnRlcihkZXYsIGNydGMpOworCWRpZmYgPSBjdXJfdmJsYW5rIC0gZGV2LT5sYXN0X3ZibGFua1tjcnRjXTsKKwlpZiAoY3VyX3ZibGFuayA8IGRldi0+bGFzdF92YmxhbmtbY3J0Y10pIHsKKwkJZGlmZiArPSBkZXYtPm1heF92YmxhbmtfY291bnQ7CisKKwkJRFJNX0RFQlVHKCJsYXN0X3ZibGFua1slZF09MHgleCwgY3VyX3ZibGFuaz0weCV4ID0+IGRpZmY9MHgleFxuIiwKKwkJCSAgY3J0YywgZGV2LT5sYXN0X3ZibGFua1tjcnRjXSwgY3VyX3ZibGFuaywgZGlmZik7CisJfQorCisJRFJNX0RFQlVHKCJlbmFibGluZyB2YmxhbmsgaW50ZXJydXB0cyBvbiBjcnRjICVkLCBtaXNzZWQgJWRcbiIsCisJCSAgY3J0YywgZGlmZik7CisKKwlhdG9taWNfYWRkKGRpZmYsICZkZXYtPl92YmxhbmtfY291bnRbY3J0Y10pOworfQorCisvKioKKyAqIGRybV92YmxhbmtfZ2V0IC0gZ2V0IGEgcmVmZXJlbmNlIGNvdW50IG9uIHZibGFuayBldmVudHMKKyAqIEBkZXY6IERSTSBkZXZpY2UKKyAqIEBjcnRjOiB3aGljaCBDUlRDIHRvIG93bgorICoKKyAqIEFjcXVpcmUgYSByZWZlcmVuY2UgY291bnQgb24gdmJsYW5rIGV2ZW50cyB0byBhdm9pZCBoYXZpbmcgdGhlbSBkaXNhYmxlZAorICogd2hpbGUgaW4gdXNlLgorICoKKyAqIFJFVFVSTlMKKyAqIFplcm8gb24gc3VjY2Vzcywgbm9uemVybyBvbiBmYWlsdXJlLgorICovCitpbnQgZHJtX3ZibGFua19nZXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50IGNydGMpCit7CisJdW5zaWduZWQgbG9uZyBpcnFmbGFnczsKKwlpbnQgcmV0ID0gMDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZkZXYtPnZibF9sb2NrLCBpcnFmbGFncyk7CisJLyogR29pbmcgZnJvbSAwLT4xIG1lYW5zIHdlIGhhdmUgdG8gZW5hYmxlIGludGVycnVwdHMgYWdhaW4gKi8KKwlpZiAoYXRvbWljX2FkZF9yZXR1cm4oMSwgJmRldi0+dmJsYW5rX3JlZmNvdW50W2NydGNdKSA9PSAxICYmCisJICAgICFkZXYtPnZibGFua19lbmFibGVkW2NydGNdKSB7CisJCXJldCA9IGRldi0+ZHJpdmVyLT5lbmFibGVfdmJsYW5rKGRldiwgY3J0Yyk7CisJCURSTV9ERUJVRygiZW5hYmxpbmcgdmJsYW5rIG9uIGNydGMgJWQsIHJldDogJWRcbiIsIGNydGMsIHJldCk7CisJCWlmIChyZXQpCisJCQlhdG9taWNfZGVjKCZkZXYtPnZibGFua19yZWZjb3VudFtjcnRjXSk7CisJCWVsc2UgeworCQkJZGV2LT52YmxhbmtfZW5hYmxlZFtjcnRjXSA9IDE7CisJCQlkcm1fdXBkYXRlX3ZibGFua19jb3VudChkZXYsIGNydGMpOworCQl9CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+dmJsX2xvY2ssIGlycWZsYWdzKTsKKworCXJldHVybiByZXQ7Cit9CitFWFBPUlRfU1lNQk9MKGRybV92YmxhbmtfZ2V0KTsKKworLyoqCisgKiBkcm1fdmJsYW5rX3B1dCAtIGdpdmUgdXAgb3duZXJzaGlwIG9mIHZibGFuayBldmVudHMKKyAqIEBkZXY6IERSTSBkZXZpY2UKKyAqIEBjcnRjOiB3aGljaCBjb3VudGVyIHRvIGdpdmUgdXAKKyAqCisgKiBSZWxlYXNlIG93bmVyc2hpcCBvZiBhIGdpdmVuIHZibGFuayBjb3VudGVyLCB0dXJuaW5nIG9mZiBpbnRlcnJ1cHRzCisgKiBpZiBwb3NzaWJsZS4KKyAqLwordm9pZCBkcm1fdmJsYW5rX3B1dChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgY3J0YykKK3sKKwkvKiBMYXN0IHVzZXIgc2NoZWR1bGVzIGludGVycnVwdCBkaXNhYmxlICovCisJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJmRldi0+dmJsYW5rX3JlZmNvdW50W2NydGNdKSkKKwkJbW9kX3RpbWVyKCZkZXYtPnZibGFua19kaXNhYmxlX3RpbWVyLCBqaWZmaWVzICsgNSpEUk1fSFopOworfQorRVhQT1JUX1NZTUJPTChkcm1fdmJsYW5rX3B1dCk7CisKKy8qKgorICogZHJtX21vZGVzZXRfY3RsIC0gaGFuZGxlIHZibGFuayBldmVudCBjb3VudGVyIGNoYW5nZXMgYWNyb3NzIG1vZGUgc3dpdGNoCisgKiBARFJNX0lPQ1RMX0FSR1M6IHN0YW5kYXJkIGlvY3RsIGFyZ3VtZW50cworICoKKyAqIEFwcGxpY2F0aW9ucyBzaG91bGQgY2FsbCB0aGUgJV9EUk1fUFJFX01PREVTRVQgYW5kICVfRFJNX1BPU1RfTU9ERVNFVAorICogaW9jdGxzIGFyb3VuZCBtb2Rlc2V0dGluZyBzbyB0aGF0IGFueSBsb3N0IHZibGFuayBldmVudHMgYXJlIGFjY291bnRlZCBmb3IuCisgKgorICogR2VuZXJhbGx5IHRoZSBjb3VudGVyIHdpbGwgcmVzZXQgYWNyb3NzIG1vZGUgc2V0cy4gIElmIGludGVycnVwdHMgYXJlCisgKiBlbmFibGVkIGFyb3VuZCB0aGlzIGNhbGwsIHdlIGRvbid0IGhhdmUgdG8gZG8gYW55dGhpbmcgc2luY2UgdGhlIGNvdW50ZXIKKyAqIHdpbGwgaGF2ZSBhbHJlYWR5IGJlZW4gaW5jcmVtZW50ZWQuCisgKi8KK2ludCBkcm1fbW9kZXNldF9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKKwkJICAgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KQoreworCXN0cnVjdCBkcm1fbW9kZXNldF9jdGwgKm1vZGVzZXQgPSBkYXRhOworCXVuc2lnbmVkIGxvbmcgaXJxZmxhZ3M7CisJaW50IGNydGMsIHJldCA9IDA7CisKKwkvKiBJZiBkcm1fdmJsYW5rX2luaXQoKSBoYXNuJ3QgYmVlbiBjYWxsZWQgeWV0LCBqdXN0IG5vLW9wICovCisJaWYgKCFkZXYtPm51bV9jcnRjcykKKwkJZ290byBvdXQ7CisKKwljcnRjID0gbW9kZXNldC0+Y3J0YzsKKwlpZiAoY3J0YyA+PSBkZXYtPm51bV9jcnRjcykgeworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIG91dDsKKwl9CisKKwkvKgorCSAqIFRvIGF2b2lkIGFsbCB0aGUgcHJvYmxlbXMgdGhhdCBtaWdodCBoYXBwZW4gaWYgaW50ZXJydXB0cworCSAqIHdlcmUgZW5hYmxlZC9kaXNhYmxlZCBhcm91bmQgb3IgYmV0d2VlbiB0aGVzZSBjYWxscywgd2UganVzdAorCSAqIGhhdmUgdGhlIGtlcm5lbCB0YWtlIGEgcmVmZXJlbmNlIG9uIHRoZSBDUlRDIChqdXN0IG9uY2UgdGhvdWdoCisJICogdG8gYXZvaWQgY29ycnVwdGluZyB0aGUgY291bnQgaWYgbXVsdGlwbGUsIG1pc21hdGNoIGNhbGxzIG9jY3VyKSwKKwkgKiBzbyB0aGF0IGludGVycnVwdHMgcmVtYWluIGVuYWJsZWQgaW4gdGhlIGludGVyaW0uCisJICovCisJc3dpdGNoIChtb2Rlc2V0LT5jbWQpIHsKKwljYXNlIF9EUk1fUFJFX01PREVTRVQ6CisJCWlmICghZGV2LT52YmxhbmtfaW5tb2Rlc2V0W2NydGNdKSB7CisJCQlkZXYtPnZibGFua19pbm1vZGVzZXRbY3J0Y10gPSAxOworCQkJZHJtX3ZibGFua19nZXQoZGV2LCBjcnRjKTsKKwkJfQorCQlicmVhazsKKwljYXNlIF9EUk1fUE9TVF9NT0RFU0VUOgorCQlpZiAoZGV2LT52YmxhbmtfaW5tb2Rlc2V0W2NydGNdKSB7CisJCQlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT52YmxfbG9jaywgaXJxZmxhZ3MpOworCQkJZGV2LT52YmxhbmtfZGlzYWJsZV9hbGxvd2VkID0gMTsKKwkJCWRldi0+dmJsYW5rX2lubW9kZXNldFtjcnRjXSA9IDA7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPnZibF9sb2NrLCBpcnFmbGFncyk7CisJCQlkcm1fdmJsYW5rX3B1dChkZXYsIGNydGMpOworCQl9CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldCA9IC1FSU5WQUw7CisJCWJyZWFrOworCX0KKworb3V0OgorCXJldHVybiByZXQ7Cit9CisKKy8qKgogICogV2FpdCBmb3IgVkJMQU5LLgogICoKICAqIFxwYXJhbSBpbm9kZSBkZXZpY2UgaW5vZGUuCkBAIC0yMzIsMTQgKzUwOSwxNCBAQAogICoKICAqIElmIGEgc2lnbmFsIGlzIG5vdCByZXF1ZXN0ZWQsIHRoZW4gY2FsbHMgdmJsYW5rX3dhaXQoKS4KICAqLwotaW50IGRybV93YWl0X3ZibGFuayhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLCBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdikKK2ludCBkcm1fd2FpdF92Ymxhbmsoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKKwkJICAgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KQogewogCXVuaW9uIGRybV93YWl0X3ZibGFuayAqdmJsd2FpdCA9IGRhdGE7Ci0Jc3RydWN0IHRpbWV2YWwgbm93OwogCWludCByZXQgPSAwOwotCXVuc2lnbmVkIGludCBmbGFncywgc2VxOworCXVuc2lnbmVkIGludCBmbGFncywgc2VxLCBjcnRjOwogCi0JaWYgKCghZGV2LT5pcnEpIHx8ICghZGV2LT5pcnFfZW5hYmxlZCkpCisJaWYgKCghZGV2LT5wZGV2LT5pcnEpIHx8ICghZGV2LT5pcnFfZW5hYmxlZCkpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJaWYgKHZibHdhaXQtPnJlcXVlc3QudHlwZSAmCkBAIC0yNTEsMTMgKzUyOCwxNyBAQAogCX0KIAogCWZsYWdzID0gdmJsd2FpdC0+cmVxdWVzdC50eXBlICYgX0RSTV9WQkxBTktfRkxBR1NfTUFTSzsKKwljcnRjID0gZmxhZ3MgJiBfRFJNX1ZCTEFOS19TRUNPTkRBUlkgPyAxIDogMDsKIAotCWlmICghZHJtX2NvcmVfY2hlY2tfZmVhdHVyZShkZXYsIChmbGFncyAmIF9EUk1fVkJMQU5LX1NFQ09OREFSWSkgPwotCQkJCSAgICBEUklWRVJfSVJRX1ZCTDIgOiBEUklWRVJfSVJRX1ZCTCkpCisJaWYgKGNydGMgPj0gZGV2LT5udW1fY3J0Y3MpCiAJCXJldHVybiAtRUlOVkFMOwogCi0Jc2VxID0gYXRvbWljX3JlYWQoKGZsYWdzICYgX0RSTV9WQkxBTktfU0VDT05EQVJZKSA/ICZkZXYtPnZibF9yZWNlaXZlZDIKLQkJCSAgOiAmZGV2LT52YmxfcmVjZWl2ZWQpOworCXJldCA9IGRybV92YmxhbmtfZ2V0KGRldiwgY3J0Yyk7CisJaWYgKHJldCkgeworCQlEUk1fRVJST1IoImZhaWxlZCB0byBhY3F1aXJlIHZibGFuayBjb3VudGVyLCAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisJc2VxID0gZHJtX3ZibGFua19jb3VudChkZXYsIGNydGMpOwogCiAJc3dpdGNoICh2Ymx3YWl0LT5yZXF1ZXN0LnR5cGUgJiBfRFJNX1ZCTEFOS19UWVBFU19NQVNLKSB7CiAJY2FzZSBfRFJNX1ZCTEFOS19SRUxBVElWRToKQEAgLTI2Niw3ICs1NDcsOCBAQAogCWNhc2UgX0RSTV9WQkxBTktfQUJTT0xVVEU6CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCXJldHVybiAtRUlOVkFMOworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIGRvbmU7CiAJfQogCiAJaWYgKChmbGFncyAmIF9EUk1fVkJMQU5LX05FWFRPTk1JU1MpICYmCkBAIC0yNzYsOCArNTU4LDcgQEAKIAogCWlmIChmbGFncyAmIF9EUk1fVkJMQU5LX1NJR05BTCkgewogCQl1bnNpZ25lZCBsb25nIGlycWZsYWdzOwotCQlzdHJ1Y3QgbGlzdF9oZWFkICp2Ymxfc2lncyA9IChmbGFncyAmIF9EUk1fVkJMQU5LX1NFQ09OREFSWSkKLQkJCQkgICAgICA/ICZkZXYtPnZibF9zaWdzMiA6ICZkZXYtPnZibF9zaWdzOworCQlzdHJ1Y3QgbGlzdF9oZWFkICp2Ymxfc2lncyA9ICZkZXYtPnZibF9zaWdzW2NydGNdOwogCQlzdHJ1Y3QgZHJtX3ZibF9zaWcgKnZibF9zaWc7CiAKIAkJc3Bpbl9sb2NrX2lycXNhdmUoJmRldi0+dmJsX2xvY2ssIGlycWZsYWdzKTsKQEAgLTI5OCwyMiArNTc5LDI5IEBACiAJCQl9CiAJCX0KIAotCQlpZiAoZGV2LT52YmxfcGVuZGluZyA+PSAxMDApIHsKKwkJaWYgKGF0b21pY19yZWFkKCZkZXYtPnZibF9zaWduYWxfcGVuZGluZykgPj0gMTAwKSB7CiAJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPnZibF9sb2NrLCBpcnFmbGFncyk7Ci0JCQlyZXR1cm4gLUVCVVNZOworCQkJcmV0ID0gLUVCVVNZOworCQkJZ290byBkb25lOwogCQl9CiAKLQkJZGV2LT52YmxfcGVuZGluZysrOwotCiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+dmJsX2xvY2ssIGlycWZsYWdzKTsKIAotCQlpZiAoIQotCQkgICAgKHZibF9zaWcgPQotCQkgICAgIGRybV9hbGxvYyhzaXplb2Yoc3RydWN0IGRybV92Ymxfc2lnKSwgRFJNX01FTV9EUklWRVIpKSkgewotCQkJcmV0dXJuIC1FTk9NRU07CisJCXZibF9zaWcgPSBkcm1fY2FsbG9jKDEsIHNpemVvZihzdHJ1Y3QgZHJtX3ZibF9zaWcpLAorCQkJCSAgICAgRFJNX01FTV9EUklWRVIpOworCQlpZiAoIXZibF9zaWcpIHsKKwkJCXJldCA9IC1FTk9NRU07CisJCQlnb3RvIGRvbmU7CiAJCX0KIAotCQltZW1zZXQoKHZvaWQgKil2Ymxfc2lnLCAwLCBzaXplb2YoKnZibF9zaWcpKTsKKwkJcmV0ID0gZHJtX3ZibGFua19nZXQoZGV2LCBjcnRjKTsKKwkJaWYgKHJldCkgeworCQkJZHJtX2ZyZWUodmJsX3NpZywgc2l6ZW9mKHN0cnVjdCBkcm1fdmJsX3NpZyksCisJCQkJIERSTV9NRU1fRFJJVkVSKTsKKwkJCXJldHVybiByZXQ7CisJCX0KKworCQlhdG9taWNfaW5jKCZkZXYtPnZibF9zaWduYWxfcGVuZGluZyk7CiAKIAkJdmJsX3NpZy0+c2VxdWVuY2UgPSB2Ymx3YWl0LT5yZXF1ZXN0LnNlcXVlbmNlOwogCQl2Ymxfc2lnLT5pbmZvLnNpX3NpZ25vID0gdmJsd2FpdC0+cmVxdWVzdC5zaWduYWw7CkBAIC0zMjcsMjAgKzYxNSwyOSBAQAogCiAJCXZibHdhaXQtPnJlcGx5LnNlcXVlbmNlID0gc2VxOwogCX0gZWxzZSB7Ci0JCWlmIChmbGFncyAmIF9EUk1fVkJMQU5LX1NFQ09OREFSWSkgewotCQkJaWYgKGRldi0+ZHJpdmVyLT52Ymxhbmtfd2FpdDIpCi0JCQkJcmV0ID0gZGV2LT5kcml2ZXItPnZibGFua193YWl0MihkZXYsICZ2Ymx3YWl0LT5yZXF1ZXN0LnNlcXVlbmNlKTsKLQkJfSBlbHNlIGlmIChkZXYtPmRyaXZlci0+dmJsYW5rX3dhaXQpCi0JCQlyZXQgPQotCQkJICAgIGRldi0+ZHJpdmVyLT52Ymxhbmtfd2FpdChkZXYsCi0JCQkJCQkgICAgICZ2Ymx3YWl0LT5yZXF1ZXN0LnNlcXVlbmNlKTsKKwkJRFJNX0RFQlVHKCJ3YWl0aW5nIG9uIHZibGFuayBjb3VudCAlZCwgY3J0YyAlZFxuIiwKKwkJCSAgdmJsd2FpdC0+cmVxdWVzdC5zZXF1ZW5jZSwgY3J0Yyk7CisJCURSTV9XQUlUX09OKHJldCwgZGV2LT52YmxfcXVldWVbY3J0Y10sIDMgKiBEUk1fSFosCisJCQkgICAgKChkcm1fdmJsYW5rX2NvdW50KGRldiwgY3J0YykKKwkJCSAgICAgIC0gdmJsd2FpdC0+cmVxdWVzdC5zZXF1ZW5jZSkgPD0gKDEgPDwgMjMpKSk7CiAKLQkJZG9fZ2V0dGltZW9mZGF5KCZub3cpOwotCQl2Ymx3YWl0LT5yZXBseS50dmFsX3NlYyA9IG5vdy50dl9zZWM7Ci0JCXZibHdhaXQtPnJlcGx5LnR2YWxfdXNlYyA9IG5vdy50dl91c2VjOworCQlpZiAocmV0ICE9IC1FSU5UUikgeworCQkJc3RydWN0IHRpbWV2YWwgbm93OworCisJCQlkb19nZXR0aW1lb2ZkYXkoJm5vdyk7CisKKwkJCXZibHdhaXQtPnJlcGx5LnR2YWxfc2VjID0gbm93LnR2X3NlYzsKKwkJCXZibHdhaXQtPnJlcGx5LnR2YWxfdXNlYyA9IG5vdy50dl91c2VjOworCQkJdmJsd2FpdC0+cmVwbHkuc2VxdWVuY2UgPSBkcm1fdmJsYW5rX2NvdW50KGRldiwgY3J0Yyk7CisJCQlEUk1fREVCVUcoInJldHVybmluZyAlZCB0byBjbGllbnRcbiIsCisJCQkJICB2Ymx3YWl0LT5yZXBseS5zZXF1ZW5jZSk7CisJCX0gZWxzZSB7CisJCQlEUk1fREVCVUcoInZibGFuayB3YWl0IGludGVycnVwdGVkIGJ5IHNpZ25hbFxuIik7CisJCX0KIAl9CiAKLSAgICAgIGRvbmU6Citkb25lOgorCWRybV92YmxhbmtfcHV0KGRldiwgY3J0Yyk7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMzQ4LDQ0ICs2NDUsNTcgQEAKICAqIFNlbmQgdGhlIFZCTEFOSyBzaWduYWxzLgogICoKICAqIFxwYXJhbSBkZXYgRFJNIGRldmljZS4KKyAqIFxwYXJhbSBjcnRjIENSVEMgd2hlcmUgdGhlIHZibGFuayBldmVudCBvY2N1cnJlZAogICoKICAqIFNlbmRzIGEgc2lnbmFsIGZvciBlYWNoIHRhc2sgaW4gZHJtX2RldmljZTo6dmJsX3NpZ3MgYW5kIGVtcHRpZXMgdGhlIGxpc3QuCiAgKgogICogSWYgYSBzaWduYWwgaXMgbm90IHJlcXVlc3RlZCwgdGhlbiBjYWxscyB2Ymxhbmtfd2FpdCgpLgogICovCi12b2lkIGRybV92Ymxfc2VuZF9zaWduYWxzKHN0cnVjdCBkcm1fZGV2aWNlICogZGV2KQorc3RhdGljIHZvaWQgZHJtX3ZibF9zZW5kX3NpZ25hbHMoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50IGNydGMpCiB7CisJc3RydWN0IGRybV92Ymxfc2lnICp2Ymxfc2lnLCAqdG1wOworCXN0cnVjdCBsaXN0X2hlYWQgKnZibF9zaWdzOworCXVuc2lnbmVkIGludCB2Ymxfc2VxOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IGk7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT52YmxfbG9jaywgZmxhZ3MpOwogCi0JZm9yIChpID0gMDsgaSA8IDI7IGkrKykgewotCQlzdHJ1Y3QgZHJtX3ZibF9zaWcgKnZibF9zaWcsICp0bXA7Ci0JCXN0cnVjdCBsaXN0X2hlYWQgKnZibF9zaWdzID0gaSA/ICZkZXYtPnZibF9zaWdzMiA6ICZkZXYtPnZibF9zaWdzOwotCQl1bnNpZ25lZCBpbnQgdmJsX3NlcSA9IGF0b21pY19yZWFkKGkgPyAmZGV2LT52YmxfcmVjZWl2ZWQyIDoKLQkJCQkJCSAgICZkZXYtPnZibF9yZWNlaXZlZCk7CisJdmJsX3NpZ3MgPSAmZGV2LT52Ymxfc2lnc1tjcnRjXTsKKwl2Ymxfc2VxID0gZHJtX3ZibGFua19jb3VudChkZXYsIGNydGMpOwogCi0JCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSh2Ymxfc2lnLCB0bXAsIHZibF9zaWdzLCBoZWFkKSB7Ci0JCQlpZiAoKHZibF9zZXEgLSB2Ymxfc2lnLT5zZXF1ZW5jZSkgPD0gKDEgPDwgMjMpKSB7Ci0JCQkJdmJsX3NpZy0+aW5mby5zaV9jb2RlID0gdmJsX3NlcTsKLQkJCQlzZW5kX3NpZ19pbmZvKHZibF9zaWctPmluZm8uc2lfc2lnbm8sCi0JCQkJCSAgICAgICZ2Ymxfc2lnLT5pbmZvLCB2Ymxfc2lnLT50YXNrKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUodmJsX3NpZywgdG1wLCB2Ymxfc2lncywgaGVhZCkgeworCSAgICBpZiAoKHZibF9zZXEgLSB2Ymxfc2lnLT5zZXF1ZW5jZSkgPD0gKDEgPDwgMjMpKSB7CisJCXZibF9zaWctPmluZm8uc2lfY29kZSA9IHZibF9zZXE7CisJCXNlbmRfc2lnX2luZm8odmJsX3NpZy0+aW5mby5zaV9zaWdubywKKwkJCSAgICAgICZ2Ymxfc2lnLT5pbmZvLCB2Ymxfc2lnLT50YXNrKTsKIAotCQkJCWxpc3RfZGVsKCZ2Ymxfc2lnLT5oZWFkKTsKKwkJbGlzdF9kZWwoJnZibF9zaWctPmhlYWQpOwogCi0JCQkJZHJtX2ZyZWUodmJsX3NpZywgc2l6ZW9mKCp2Ymxfc2lnKSwKLQkJCQkJIERSTV9NRU1fRFJJVkVSKTsKLQotCQkJCWRldi0+dmJsX3BlbmRpbmctLTsKLQkJCX0KLQkJfQorCQlkcm1fZnJlZSh2Ymxfc2lnLCBzaXplb2YoKnZibF9zaWcpLAorCQkJIERSTV9NRU1fRFJJVkVSKTsKKwkJYXRvbWljX2RlYygmZGV2LT52Ymxfc2lnbmFsX3BlbmRpbmcpOworCQlkcm1fdmJsYW5rX3B1dChkZXYsIGNydGMpOworCSAgICB9CiAJfQogCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT52YmxfbG9jaywgZmxhZ3MpOwogfQogCi1FWFBPUlRfU1lNQk9MKGRybV92Ymxfc2VuZF9zaWduYWxzKTsKKy8qKgorICogZHJtX2hhbmRsZV92YmxhbmsgLSBoYW5kbGUgYSB2YmxhbmsgZXZlbnQKKyAqIEBkZXY6IERSTSBkZXZpY2UKKyAqIEBjcnRjOiB3aGVyZSB0aGlzIGV2ZW50IG9jY3VycmVkCisgKgorICogRHJpdmVycyBzaG91bGQgY2FsbCB0aGlzIHJvdXRpbmUgaW4gdGhlaXIgdmJsYW5rIGludGVycnVwdCBoYW5kbGVycyB0bworICogdXBkYXRlIHRoZSB2YmxhbmsgY291bnRlciBhbmQgc2VuZCBhbnkgc2lnbmFscyB0aGF0IG1heSBiZSBwZW5kaW5nLgorICovCit2b2lkIGRybV9oYW5kbGVfdmJsYW5rKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGludCBjcnRjKQoreworCWF0b21pY19pbmMoJmRldi0+X3ZibGFua19jb3VudFtjcnRjXSk7CisJRFJNX1dBS0VVUCgmZGV2LT52YmxfcXVldWVbY3J0Y10pOworCWRybV92Ymxfc2VuZF9zaWduYWxzKGRldiwgY3J0Yyk7Cit9CitFWFBPUlRfU1lNQk9MKGRybV9oYW5kbGVfdmJsYW5rKTsKIAogLyoqCiAgKiBUYXNrbGV0IHdyYXBwZXIgZnVuY3Rpb24uCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX21lbW9yeS5jIGIvZHJpdmVycy9ncHUvZHJtL2RybV9tZW1vcnkuYwppbmRleCAwMTc3MDEyLi44MDNiYzllIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vZHJtX21lbW9yeS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fbWVtb3J5LmMKQEAgLTEzMyw2ICsxMzMsNyBAQAogewogCXJldHVybiBkcm1fYWdwX2ZyZWVfbWVtb3J5KGhhbmRsZSkgPyAwIDogLUVJTlZBTDsKIH0KK0VYUE9SVF9TWU1CT0woZHJtX2ZyZWVfYWdwKTsKIAogLyoqIFdyYXBwZXIgYXJvdW5kIGFncF9iaW5kX21lbW9yeSgpICovCiBpbnQgZHJtX2JpbmRfYWdwKERSTV9BR1BfTUVNICogaGFuZGxlLCB1bnNpZ25lZCBpbnQgc3RhcnQpCkBAIC0xNDUsNiArMTQ2LDcgQEAKIHsKIAlyZXR1cm4gZHJtX2FncF91bmJpbmRfbWVtb3J5KGhhbmRsZSk7CiB9CitFWFBPUlRfU1lNQk9MKGRybV91bmJpbmRfYWdwKTsKIAogI2Vsc2UgIC8qICBfX09TX0hBU19BR1AgICovCiBzdGF0aWMgaW5saW5lIHZvaWQgKmFncF9yZW1hcCh1bnNpZ25lZCBsb25nIG9mZnNldCwgdW5zaWduZWQgbG9uZyBzaXplLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9tbS5jIGIvZHJpdmVycy9ncHUvZHJtL2RybV9tbS5jCmluZGV4IGRjZmY5ZTkuLjIxN2FkN2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fbW0uYworKysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX21tLmMKQEAgLTE2OSw2ICsxNjksNyBAQAogCiAJcmV0dXJuIGNoaWxkOwogfQorRVhQT1JUX1NZTUJPTChkcm1fbW1fZ2V0X2Jsb2NrKTsKIAogLyoKICAqIFB1dCBhIGJsb2NrLiBNZXJnZSB3aXRoIHRoZSBwcmV2aW91cyBhbmQgLyBvciBuZXh0IGJsb2NrIGlmIHRoZXkgYXJlIGZyZWUuCkBAIC0yMTcsNiArMjE4LDcgQEAKIAkJZHJtX2ZyZWUoY3VyLCBzaXplb2YoKmN1ciksIERSTV9NRU1fTU0pOwogCX0KIH0KK0VYUE9SVF9TWU1CT0woZHJtX21tX3B1dF9ibG9jayk7CiAKIHN0cnVjdCBkcm1fbW1fbm9kZSAqZHJtX21tX3NlYXJjaF9mcmVlKGNvbnN0IHN0cnVjdCBkcm1fbW0gKiBtbSwKIAkJCQkgIHVuc2lnbmVkIGxvbmcgc2l6ZSwKQEAgLTI2NSw2ICsyNjcsNyBAQAogCiAJcmV0dXJuIChoZWFkLT5uZXh0LT5uZXh0ID09IGhlYWQpOwogfQorRVhQT1JUX1NZTUJPTChkcm1fbW1fc2VhcmNoX2ZyZWUpOwogCiBpbnQgZHJtX21tX2luaXQoc3RydWN0IGRybV9tbSAqIG1tLCB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIHNpemUpCiB7CkBAIC0yNzMsNyArMjc2LDcgQEAKIAogCXJldHVybiBkcm1fbW1fY3JlYXRlX3RhaWxfbm9kZShtbSwgc3RhcnQsIHNpemUpOwogfQotCitFWFBPUlRfU1lNQk9MKGRybV9tbV9pbml0KTsKIAogdm9pZCBkcm1fbW1fdGFrZWRvd24oc3RydWN0IGRybV9tbSAqIG1tKQogewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9wcm9jLmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX3Byb2MuYwppbmRleCA5M2IxZTA0Li5kNDkwZGI0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vZHJtX3Byb2MuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX3Byb2MuYwpAQCAtNDksNiArNDksMTAgQEAKIAkJCSAgIGludCByZXF1ZXN0LCBpbnQgKmVvZiwgdm9pZCAqZGF0YSk7CiBzdGF0aWMgaW50IGRybV9idWZzX2luZm8oY2hhciAqYnVmLCBjaGFyICoqc3RhcnQsIG9mZl90IG9mZnNldCwKIAkJCSBpbnQgcmVxdWVzdCwgaW50ICplb2YsIHZvaWQgKmRhdGEpOworc3RhdGljIGludCBkcm1fZ2VtX25hbWVfaW5mbyhjaGFyICpidWYsIGNoYXIgKipzdGFydCwgb2ZmX3Qgb2Zmc2V0LAorCQkJICAgICBpbnQgcmVxdWVzdCwgaW50ICplb2YsIHZvaWQgKmRhdGEpOworc3RhdGljIGludCBkcm1fZ2VtX29iamVjdF9pbmZvKGNoYXIgKmJ1ZiwgY2hhciAqKnN0YXJ0LCBvZmZfdCBvZmZzZXQsCisJCQkgICAgICAgaW50IHJlcXVlc3QsIGludCAqZW9mLCB2b2lkICpkYXRhKTsKICNpZiBEUk1fREVCVUdfQ09ERQogc3RhdGljIGludCBkcm1fdm1hX2luZm8oY2hhciAqYnVmLCBjaGFyICoqc3RhcnQsIG9mZl90IG9mZnNldCwKIAkJCWludCByZXF1ZXN0LCBpbnQgKmVvZiwgdm9pZCAqZGF0YSk7CkBAIC02MCwxMyArNjQsMTYgQEAKIHN0YXRpYyBzdHJ1Y3QgZHJtX3Byb2NfbGlzdCB7CiAJY29uc3QgY2hhciAqbmFtZTsJLyoqPCBmaWxlIG5hbWUgKi8KIAlpbnQgKCpmKSAoY2hhciAqLCBjaGFyICoqLCBvZmZfdCwgaW50LCBpbnQgKiwgdm9pZCAqKTsJCS8qKjwgcHJvYyBjYWxsYmFjayovCisJdTMyIGRyaXZlcl9mZWF0dXJlczsgLyoqPCBSZXF1aXJlZCBkcml2ZXIgZmVhdHVyZXMgZm9yIHRoaXMgZW50cnkgKi8KIH0gZHJtX3Byb2NfbGlzdFtdID0gewotCXsibmFtZSIsIGRybV9uYW1lX2luZm99LAotCXsibWVtIiwgZHJtX21lbV9pbmZvfSwKLQl7InZtIiwgZHJtX3ZtX2luZm99LAotCXsiY2xpZW50cyIsIGRybV9jbGllbnRzX2luZm99LAotCXsicXVldWVzIiwgZHJtX3F1ZXVlc19pbmZvfSwKLQl7ImJ1ZnMiLCBkcm1fYnVmc19pbmZvfSwKKwl7Im5hbWUiLCBkcm1fbmFtZV9pbmZvLCAwfSwKKwl7Im1lbSIsIGRybV9tZW1faW5mbywgMH0sCisJeyJ2bSIsIGRybV92bV9pbmZvLCAwfSwKKwl7ImNsaWVudHMiLCBkcm1fY2xpZW50c19pbmZvLCAwfSwKKwl7InF1ZXVlcyIsIGRybV9xdWV1ZXNfaW5mbywgMH0sCisJeyJidWZzIiwgZHJtX2J1ZnNfaW5mbywgMH0sCisJeyJnZW1fbmFtZXMiLCBkcm1fZ2VtX25hbWVfaW5mbywgRFJJVkVSX0dFTX0sCisJeyJnZW1fb2JqZWN0cyIsIGRybV9nZW1fb2JqZWN0X2luZm8sIERSSVZFUl9HRU19LAogI2lmIERSTV9ERUJVR19DT0RFCiAJeyJ2bWEiLCBkcm1fdm1hX2luZm99LAogI2VuZGlmCkBAIC05MCw4ICs5Nyw5IEBACiBpbnQgZHJtX3Byb2NfaW5pdChzdHJ1Y3QgZHJtX21pbm9yICptaW5vciwgaW50IG1pbm9yX2lkLAogCQkgIHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcm9vdCkKIHsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gbWlub3ItPmRldjsKIAlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKmVudDsKLQlpbnQgaSwgajsKKwlpbnQgaSwgaiwgcmV0OwogCWNoYXIgbmFtZVs2NF07CiAKIAlzcHJpbnRmKG5hbWUsICIlZCIsIG1pbm9yX2lkKTsKQEAgLTEwMiwyMyArMTEwLDQyIEBACiAJfQogCiAJZm9yIChpID0gMDsgaSA8IERSTV9QUk9DX0VOVFJJRVM7IGkrKykgeworCQl1MzIgZmVhdHVyZXMgPSBkcm1fcHJvY19saXN0W2ldLmRyaXZlcl9mZWF0dXJlczsKKworCQlpZiAoZmVhdHVyZXMgIT0gMCAmJgorCQkgICAgKGRldi0+ZHJpdmVyLT5kcml2ZXJfZmVhdHVyZXMgJiBmZWF0dXJlcykgIT0gZmVhdHVyZXMpCisJCQljb250aW51ZTsKKwogCQllbnQgPSBjcmVhdGVfcHJvY19lbnRyeShkcm1fcHJvY19saXN0W2ldLm5hbWUsCiAJCQkJCVNfSUZSRUcgfCBTX0lSVUdPLCBtaW5vci0+ZGV2X3Jvb3QpOwogCQlpZiAoIWVudCkgewogCQkJRFJNX0VSUk9SKCJDYW5ub3QgY3JlYXRlIC9wcm9jL2RyaS8lcy8lc1xuIiwKIAkJCQkgIG5hbWUsIGRybV9wcm9jX2xpc3RbaV0ubmFtZSk7Ci0JCQlmb3IgKGogPSAwOyBqIDwgaTsgaisrKQotCQkJCXJlbW92ZV9wcm9jX2VudHJ5KGRybV9wcm9jX2xpc3RbaV0ubmFtZSwKLQkJCQkJCSAgbWlub3ItPmRldl9yb290KTsKLQkJCXJlbW92ZV9wcm9jX2VudHJ5KG5hbWUsIHJvb3QpOwotCQkJbWlub3ItPmRldl9yb290ID0gTlVMTDsKLQkJCXJldHVybiAtMTsKKwkJCXJldCA9IC0xOworCQkJZ290byBmYWlsOwogCQl9CiAJCWVudC0+cmVhZF9wcm9jID0gZHJtX3Byb2NfbGlzdFtpXS5mOwogCQllbnQtPmRhdGEgPSBtaW5vcjsKIAl9CiAKKwlpZiAoZGV2LT5kcml2ZXItPnByb2NfaW5pdCkgeworCQlyZXQgPSBkZXYtPmRyaXZlci0+cHJvY19pbml0KG1pbm9yKTsKKwkJaWYgKHJldCkgeworCQkJRFJNX0VSUk9SKCJEUk06IERyaXZlciBmYWlsZWQgdG8gaW5pdGlhbGl6ZSAiCisJCQkJICAiL3Byb2MvZHJpLlxuIik7CisJCQlnb3RvIGZhaWw7CisJCX0KKwl9CisKIAlyZXR1cm4gMDsKKyBmYWlsOgorCisJZm9yIChqID0gMDsgaiA8IGk7IGorKykKKwkJcmVtb3ZlX3Byb2NfZW50cnkoZHJtX3Byb2NfbGlzdFtpXS5uYW1lLAorCQkJCSAgbWlub3ItPmRldl9yb290KTsKKwlyZW1vdmVfcHJvY19lbnRyeShuYW1lLCByb290KTsKKwltaW5vci0+ZGV2X3Jvb3QgPSBOVUxMOworCXJldHVybiByZXQ7CiB9CiAKIC8qKgpAQCAtMTMzLDEyICsxNjAsMTYgQEAKICAqLwogaW50IGRybV9wcm9jX2NsZWFudXAoc3RydWN0IGRybV9taW5vciAqbWlub3IsIHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcm9vdCkKIHsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gbWlub3ItPmRldjsKIAlpbnQgaTsKIAljaGFyIG5hbWVbNjRdOwogCiAJaWYgKCFyb290IHx8ICFtaW5vci0+ZGV2X3Jvb3QpCiAJCXJldHVybiAwOwogCisJaWYgKGRldi0+ZHJpdmVyLT5wcm9jX2NsZWFudXApCisJCWRldi0+ZHJpdmVyLT5wcm9jX2NsZWFudXAobWlub3IpOworCiAJZm9yIChpID0gMDsgaSA8IERSTV9QUk9DX0VOVFJJRVM7IGkrKykKIAkJcmVtb3ZlX3Byb2NfZW50cnkoZHJtX3Byb2NfbGlzdFtpXS5uYW1lLCBtaW5vci0+ZGV2X3Jvb3QpOwogCXNwcmludGYobmFtZSwgIiVkIiwgbWlub3ItPmluZGV4KTsKQEAgLTQ4MCw2ICs1MTEsODQgQEAKIAlyZXR1cm4gcmV0OwogfQogCitzdHJ1Y3QgZHJtX2dlbV9uYW1lX2luZm9fZGF0YSB7CisgICAgICAgaW50ICAgICAgICAgICAgICAgICAgICAgbGVuOworICAgICAgIGNoYXIgICAgICAgICAgICAgICAgICAgICpidWY7CisgICAgICAgaW50ICAgICAgICAgICAgICAgICAgICAgZW9mOworfTsKKworc3RhdGljIGludCBkcm1fZ2VtX29uZV9uYW1lX2luZm8oaW50IGlkLCB2b2lkICpwdHIsIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmogPSBwdHI7CisJc3RydWN0IGRybV9nZW1fbmFtZV9pbmZvX2RhdGEgICAqbmlkID0gZGF0YTsKKworCURSTV9JTkZPKCJuYW1lICVkIHNpemUgJWRcbiIsIG9iai0+bmFtZSwgb2JqLT5zaXplKTsKKwlpZiAobmlkLT5lb2YpCisJCXJldHVybiAwOworCisJbmlkLT5sZW4gKz0gc3ByaW50ZigmbmlkLT5idWZbbmlkLT5sZW5dLAorCQkJICAgICIlNmQlOWQlOGQlOWRcbiIsCisJCQkgICAgb2JqLT5uYW1lLCBvYmotPnNpemUsCisJCQkgICAgYXRvbWljX3JlYWQoJm9iai0+aGFuZGxlY291bnQucmVmY291bnQpLAorCQkJICAgIGF0b21pY19yZWFkKCZvYmotPnJlZmNvdW50LnJlZmNvdW50KSk7CisJaWYgKG5pZC0+bGVuID4gRFJNX1BST0NfTElNSVQpIHsKKwkJbmlkLT5lb2YgPSAxOworCQlyZXR1cm4gMDsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZHJtX2dlbV9uYW1lX2luZm8oY2hhciAqYnVmLCBjaGFyICoqc3RhcnQsIG9mZl90IG9mZnNldCwKKwkJCSAgICAgaW50IHJlcXVlc3QsIGludCAqZW9mLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBkcm1fbWlub3IgKm1pbm9yID0gKHN0cnVjdCBkcm1fbWlub3IgKikgZGF0YTsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gbWlub3ItPmRldjsKKwlzdHJ1Y3QgZHJtX2dlbV9uYW1lX2luZm9fZGF0YSBuaWQ7CisKKwlpZiAob2Zmc2V0ID4gRFJNX1BST0NfTElNSVQpIHsKKwkJKmVvZiA9IDE7CisJCXJldHVybiAwOworCX0KKworCW5pZC5sZW4gPSBzcHJpbnRmKGJ1ZiwgIiAgbmFtZSAgICAgc2l6ZSBoYW5kbGVzIHJlZmNvdW50XG4iKTsKKwluaWQuYnVmID0gYnVmOworCW5pZC5lb2YgPSAwOworCWlkcl9mb3JfZWFjaCgmZGV2LT5vYmplY3RfbmFtZV9pZHIsIGRybV9nZW1fb25lX25hbWVfaW5mbywgJm5pZCk7CisKKwkqc3RhcnQgPSAmYnVmW29mZnNldF07CisJKmVvZiA9IDA7CisJaWYgKG5pZC5sZW4gPiByZXF1ZXN0ICsgb2Zmc2V0KQorCQlyZXR1cm4gcmVxdWVzdDsKKwkqZW9mID0gMTsKKwlyZXR1cm4gbmlkLmxlbiAtIG9mZnNldDsKK30KKworc3RhdGljIGludCBkcm1fZ2VtX29iamVjdF9pbmZvKGNoYXIgKmJ1ZiwgY2hhciAqKnN0YXJ0LCBvZmZfdCBvZmZzZXQsCisJCQkgICAgICAgaW50IHJlcXVlc3QsIGludCAqZW9mLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBkcm1fbWlub3IgKm1pbm9yID0gKHN0cnVjdCBkcm1fbWlub3IgKikgZGF0YTsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gbWlub3ItPmRldjsKKwlpbnQgbGVuID0gMDsKKworCWlmIChvZmZzZXQgPiBEUk1fUFJPQ19MSU1JVCkgeworCQkqZW9mID0gMTsKKwkJcmV0dXJuIDA7CisJfQorCisJKnN0YXJ0ID0gJmJ1ZltvZmZzZXRdOworCSplb2YgPSAwOworCURSTV9QUk9DX1BSSU5UKCIlZCBvYmplY3RzXG4iLCBhdG9taWNfcmVhZCgmZGV2LT5vYmplY3RfY291bnQpKTsKKwlEUk1fUFJPQ19QUklOVCgiJWQgb2JqZWN0IGJ5dGVzXG4iLCBhdG9taWNfcmVhZCgmZGV2LT5vYmplY3RfbWVtb3J5KSk7CisJRFJNX1BST0NfUFJJTlQoIiVkIHBpbm5lZFxuIiwgYXRvbWljX3JlYWQoJmRldi0+cGluX2NvdW50KSk7CisJRFJNX1BST0NfUFJJTlQoIiVkIHBpbiBieXRlc1xuIiwgYXRvbWljX3JlYWQoJmRldi0+cGluX21lbW9yeSkpOworCURSTV9QUk9DX1BSSU5UKCIlZCBndHQgYnl0ZXNcbiIsIGF0b21pY19yZWFkKCZkZXYtPmd0dF9tZW1vcnkpKTsKKwlEUk1fUFJPQ19QUklOVCgiJWQgZ3R0IHRvdGFsXG4iLCBkZXYtPmd0dF90b3RhbCk7CisJaWYgKGxlbiA+IHJlcXVlc3QgKyBvZmZzZXQpCisJCXJldHVybiByZXF1ZXN0OworCSplb2YgPSAxOworCXJldHVybiBsZW4gLSBvZmZzZXQ7Cit9CisKICNpZiBEUk1fREVCVUdfQ09ERQogCiBzdGF0aWMgaW50IGRybV9fdm1hX2luZm8oY2hhciAqYnVmLCBjaGFyICoqc3RhcnQsIG9mZl90IG9mZnNldCwgaW50IHJlcXVlc3QsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX3N0dWIuYyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fc3R1Yi5jCmluZGV4IGMyZjU4NGYuLjE0MWUzMzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fc3R1Yi5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fc3R1Yi5jCkBAIC0xMDcsNyArMTA3LDYgQEAKICNpZmRlZiBfX2FscGhhX18KIAlkZXYtPmhvc2UgPSBwZGV2LT5zeXNkYXRhOwogI2VuZGlmCi0JZGV2LT5pcnEgPSBwZGV2LT5pcnE7CiAKIAlpZiAoZHJtX2h0X2NyZWF0ZSgmZGV2LT5tYXBfaGFzaCwgMTIpKSB7CiAJCXJldHVybiAtRU5PTUVNOwpAQCAtMTUyLDYgKzE1MSwxNSBAQAogCQlnb3RvIGVycm9yX291dF91bnJlZzsKIAl9CiAKKwlpZiAoZHJpdmVyLT5kcml2ZXJfZmVhdHVyZXMgJiBEUklWRVJfR0VNKSB7CisJCXJldGNvZGUgPSBkcm1fZ2VtX2luaXQoZGV2KTsKKwkJaWYgKHJldGNvZGUpIHsKKwkJCURSTV9FUlJPUigiQ2Fubm90IGluaXRpYWxpemUgZ3JhcGhpY3MgZXhlY3V0aW9uICIKKwkJCQkgICJtYW5hZ2VyIChHRU0pXG4iKTsKKwkJCWdvdG8gZXJyb3Jfb3V0X3VucmVnOworCQl9CisJfQorCiAJcmV0dXJuIDA7CiAKICAgICAgIGVycm9yX291dF91bnJlZzoKQEAgLTMxNyw2ICszMjUsNyBAQAogaW50IGRybV9wdXRfbWlub3Ioc3RydWN0IGRybV9taW5vciAqKm1pbm9yX3ApCiB7CiAJc3RydWN0IGRybV9taW5vciAqbWlub3IgPSAqbWlub3JfcDsKKwogCURSTV9ERUJVRygicmVsZWFzZSBzZWNvbmRhcnkgbWlub3IgJWRcbiIsIG1pbm9yLT5pbmRleCk7CiAKIAlpZiAobWlub3ItPnR5cGUgPT0gRFJNX01JTk9SX0xFR0FDWSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fc3lzZnMuYyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fc3lzZnMuYwppbmRleCBhZjIxMWEwLi4xNjExYjliIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vZHJtX3N5c2ZzLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2RybV9zeXNmcy5jCkBAIC0xODQsNyArMTg0LDcgQEAKIGVycl9vdXRfZmlsZXM6CiAJaWYgKGkgPiAwKQogCQlmb3IgKGogPSAwOyBqIDwgaTsgaisrKQotCQkJZGV2aWNlX3JlbW92ZV9maWxlKCZtaW5vci0+a2RldiwgJmRldmljZV9hdHRyc1tpXSk7CisJCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoJm1pbm9yLT5rZGV2LCAmZGV2aWNlX2F0dHJzW2pdKTsKIAlkZXZpY2VfdW5yZWdpc3RlcigmbWlub3ItPmtkZXYpOwogZXJyX291dDoKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZQppbmRleCBhOWU2MDQ2Li41YmE3OGU0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZQpAQCAtMyw3ICszLDEyIEBACiAjIERpcmVjdCBSZW5kZXJpbmcgSW5mcmFzdHJ1Y3R1cmUgKERSSSkgaW4gWEZyZWU4NiA0LjEuMCBhbmQgaGlnaGVyLgogCiBjY2ZsYWdzLXkgOj0gLUlpbmNsdWRlL2RybQotaTkxNS15IDo9IGk5MTVfZHJ2Lm8gaTkxNV9kbWEubyBpOTE1X2lycS5vIGk5MTVfbWVtLm8KK2k5MTUteSA6PSBpOTE1X2Rydi5vIGk5MTVfZG1hLm8gaTkxNV9pcnEubyBpOTE1X21lbS5vIGk5MTVfb3ByZWdpb24ubyBcCisgICAgICAgICAgaTkxNV9zdXNwZW5kLm8gXAorCSAgaTkxNV9nZW0ubyBcCisJICBpOTE1X2dlbV9kZWJ1Zy5vIFwKKwkgIGk5MTVfZ2VtX3Byb2MubyBcCisJICBpOTE1X2dlbV90aWxpbmcubwogCiBpOTE1LSQoQ09ORklHX0NPTVBBVCkgICArPSBpOTE1X2lvYzMyLm8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kbWEuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZG1hLmMKaW5kZXggODg5NzQzNC4uZGIzNDc4MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kbWEuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2RtYS5jCkBAIC00MCw0MCArNDAsOTYgQEAKIHsKIAlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAlkcm1faTkxNV9yaW5nX2J1ZmZlcl90ICpyaW5nID0gJihkZXZfcHJpdi0+cmluZyk7Ci0JdTMyIGxhc3RfaGVhZCA9IEk5MTVfUkVBRChMUF9SSU5HICsgUklOR19IRUFEKSAmIEhFQURfQUREUjsKKwl1MzIgYWN0aGRfcmVnID0gSVNfSTk2NUcoZGV2KSA/IEFDVEhEX0k5NjUgOiBBQ1RIRDsKKwl1MzIgbGFzdF9hY3RoZCA9IEk5MTVfUkVBRChhY3RoZF9yZWcpOworCXUzMiBhY3RoZDsKKwl1MzIgbGFzdF9oZWFkID0gSTkxNV9SRUFEKFBSQjBfSEVBRCkgJiBIRUFEX0FERFI7CiAJaW50IGk7CiAKLQlmb3IgKGkgPSAwOyBpIDwgMTAwMDA7IGkrKykgewotCQlyaW5nLT5oZWFkID0gSTkxNV9SRUFEKExQX1JJTkcgKyBSSU5HX0hFQUQpICYgSEVBRF9BRERSOworCWZvciAoaSA9IDA7IGkgPCAxMDAwMDA7IGkrKykgeworCQlyaW5nLT5oZWFkID0gSTkxNV9SRUFEKFBSQjBfSEVBRCkgJiBIRUFEX0FERFI7CisJCWFjdGhkID0gSTkxNV9SRUFEKGFjdGhkX3JlZyk7CiAJCXJpbmctPnNwYWNlID0gcmluZy0+aGVhZCAtIChyaW5nLT50YWlsICsgOCk7CiAJCWlmIChyaW5nLT5zcGFjZSA8IDApCiAJCQlyaW5nLT5zcGFjZSArPSByaW5nLT5TaXplOwogCQlpZiAocmluZy0+c3BhY2UgPj0gbikKIAkJCXJldHVybiAwOwogCi0JCWRldl9wcml2LT5zYXJlYV9wcml2LT5wZXJmX2JveGVzIHw9IEk5MTVfQk9YX1dBSVQ7CisJCWlmIChkZXZfcHJpdi0+c2FyZWFfcHJpdikKKwkJCWRldl9wcml2LT5zYXJlYV9wcml2LT5wZXJmX2JveGVzIHw9IEk5MTVfQk9YX1dBSVQ7CiAKIAkJaWYgKHJpbmctPmhlYWQgIT0gbGFzdF9oZWFkKQogCQkJaSA9IDA7CisJCWlmIChhY3RoZCAhPSBsYXN0X2FjdGhkKQorCQkJaSA9IDA7CiAKIAkJbGFzdF9oZWFkID0gcmluZy0+aGVhZDsKKwkJbGFzdF9hY3RoZCA9IGFjdGhkOworCQltc2xlZXBfaW50ZXJydXB0aWJsZSgxMCk7CisKIAl9CiAKIAlyZXR1cm4gLUVCVVNZOwogfQogCisvKioKKyAqIFNldHMgdXAgdGhlIGhhcmR3YXJlIHN0YXR1cyBwYWdlIGZvciBkZXZpY2VzIHRoYXQgbmVlZCBhIHBoeXNpY2FsIGFkZHJlc3MKKyAqIGluIHRoZSByZWdpc3Rlci4KKyAqLworc3RhdGljIGludCBpOTE1X2luaXRfcGh5c19od3Moc3RydWN0IGRybV9kZXZpY2UgKmRldikKK3sKKwlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwkvKiBQcm9ncmFtIEhhcmR3YXJlIFN0YXR1cyBQYWdlICovCisJZGV2X3ByaXYtPnN0YXR1c19wYWdlX2RtYWggPQorCQlkcm1fcGNpX2FsbG9jKGRldiwgUEFHRV9TSVpFLCBQQUdFX1NJWkUsIDB4ZmZmZmZmZmYpOworCisJaWYgKCFkZXZfcHJpdi0+c3RhdHVzX3BhZ2VfZG1haCkgeworCQlEUk1fRVJST1IoIkNhbiBub3QgYWxsb2NhdGUgaGFyZHdhcmUgc3RhdHVzIHBhZ2VcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJZGV2X3ByaXYtPmh3X3N0YXR1c19wYWdlID0gZGV2X3ByaXYtPnN0YXR1c19wYWdlX2RtYWgtPnZhZGRyOworCWRldl9wcml2LT5kbWFfc3RhdHVzX3BhZ2UgPSBkZXZfcHJpdi0+c3RhdHVzX3BhZ2VfZG1haC0+YnVzYWRkcjsKKworCW1lbXNldChkZXZfcHJpdi0+aHdfc3RhdHVzX3BhZ2UsIDAsIFBBR0VfU0laRSk7CisKKwlJOTE1X1dSSVRFKEhXU19QR0EsIGRldl9wcml2LT5kbWFfc3RhdHVzX3BhZ2UpOworCURSTV9ERUJVRygiRW5hYmxlZCBoYXJkd2FyZSBzdGF0dXMgcGFnZVxuIik7CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogRnJlZXMgdGhlIGhhcmR3YXJlIHN0YXR1cyBwYWdlLCB3aGV0aGVyIGl0J3MgYSBwaHlzaWNhbCBhZGRyZXNzIG9yIGEgdmlydHVhbAorICogYWRkcmVzcyBzZXQgdXAgYnkgdGhlIFggU2VydmVyLgorICovCitzdGF0aWMgdm9pZCBpOTE1X2ZyZWVfaHdzKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCit7CisJZHJtX2k5MTVfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJaWYgKGRldl9wcml2LT5zdGF0dXNfcGFnZV9kbWFoKSB7CisJCWRybV9wY2lfZnJlZShkZXYsIGRldl9wcml2LT5zdGF0dXNfcGFnZV9kbWFoKTsKKwkJZGV2X3ByaXYtPnN0YXR1c19wYWdlX2RtYWggPSBOVUxMOworCX0KKworCWlmIChkZXZfcHJpdi0+c3RhdHVzX2dmeF9hZGRyKSB7CisJCWRldl9wcml2LT5zdGF0dXNfZ2Z4X2FkZHIgPSAwOworCQlkcm1fY29yZV9pb3JlbWFwZnJlZSgmZGV2X3ByaXYtPmh3c19tYXAsIGRldik7CisJfQorCisJLyogTmVlZCB0byByZXdyaXRlIGhhcmR3YXJlIHN0YXR1cyBwYWdlICovCisJSTkxNV9XUklURShIV1NfUEdBLCAweDFmZmZmMDAwKTsKK30KKwogdm9pZCBpOTE1X2tlcm5lbF9sb3N0X2NvbnRleHQoc3RydWN0IGRybV9kZXZpY2UgKiBkZXYpCiB7CiAJZHJtX2k5MTVfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CiAJZHJtX2k5MTVfcmluZ19idWZmZXJfdCAqcmluZyA9ICYoZGV2X3ByaXYtPnJpbmcpOwogCi0JcmluZy0+aGVhZCA9IEk5MTVfUkVBRChMUF9SSU5HICsgUklOR19IRUFEKSAmIEhFQURfQUREUjsKLQlyaW5nLT50YWlsID0gSTkxNV9SRUFEKExQX1JJTkcgKyBSSU5HX1RBSUwpICYgVEFJTF9BRERSOworCXJpbmctPmhlYWQgPSBJOTE1X1JFQUQoUFJCMF9IRUFEKSAmIEhFQURfQUREUjsKKwlyaW5nLT50YWlsID0gSTkxNV9SRUFEKFBSQjBfVEFJTCkgJiBUQUlMX0FERFI7CiAJcmluZy0+c3BhY2UgPSByaW5nLT5oZWFkIC0gKHJpbmctPnRhaWwgKyA4KTsKIAlpZiAocmluZy0+c3BhY2UgPCAwKQogCQlyaW5nLT5zcGFjZSArPSByaW5nLT5TaXplOwogCi0JaWYgKHJpbmctPmhlYWQgPT0gcmluZy0+dGFpbCkKKwlpZiAocmluZy0+aGVhZCA9PSByaW5nLT50YWlsICYmIGRldl9wcml2LT5zYXJlYV9wcml2KQogCQlkZXZfcHJpdi0+c2FyZWFfcHJpdi0+cGVyZl9ib3hlcyB8PSBJOTE1X0JPWF9SSU5HX0VNUFRZOwogfQogCkBAIC04NCwyOCArMTQwLDE5IEBACiAJICogbWF5IG5vdCBoYXZlIGJlZW4gY2FsbGVkIGZyb20gdXNlcnNwYWNlIGFuZCBhZnRlciBkZXZfcHJpdmF0ZQogCSAqIGlzIGZyZWVkLCBpdCdzIHRvbyBsYXRlLgogCSAqLwotCWlmIChkZXYtPmlycSkKKwlpZiAoZGV2LT5pcnFfZW5hYmxlZCkKIAkJZHJtX2lycV91bmluc3RhbGwoZGV2KTsKIAogCWlmIChkZXZfcHJpdi0+cmluZy52aXJ0dWFsX3N0YXJ0KSB7CiAJCWRybV9jb3JlX2lvcmVtYXBmcmVlKCZkZXZfcHJpdi0+cmluZy5tYXAsIGRldik7Ci0JCWRldl9wcml2LT5yaW5nLnZpcnR1YWxfc3RhcnQgPSAwOwotCQlkZXZfcHJpdi0+cmluZy5tYXAuaGFuZGxlID0gMDsKKwkJZGV2X3ByaXYtPnJpbmcudmlydHVhbF9zdGFydCA9IE5VTEw7CisJCWRldl9wcml2LT5yaW5nLm1hcC5oYW5kbGUgPSBOVUxMOwogCQlkZXZfcHJpdi0+cmluZy5tYXAuc2l6ZSA9IDA7CiAJfQogCi0JaWYgKGRldl9wcml2LT5zdGF0dXNfcGFnZV9kbWFoKSB7Ci0JCWRybV9wY2lfZnJlZShkZXYsIGRldl9wcml2LT5zdGF0dXNfcGFnZV9kbWFoKTsKLQkJZGV2X3ByaXYtPnN0YXR1c19wYWdlX2RtYWggPSBOVUxMOwotCQkvKiBOZWVkIHRvIHJld3JpdGUgaGFyZHdhcmUgc3RhdHVzIHBhZ2UgKi8KLQkJSTkxNV9XUklURSgweDAyMDgwLCAweDFmZmZmMDAwKTsKLQl9Ci0KLQlpZiAoZGV2X3ByaXYtPnN0YXR1c19nZnhfYWRkcikgewotCQlkZXZfcHJpdi0+c3RhdHVzX2dmeF9hZGRyID0gMDsKLQkJZHJtX2NvcmVfaW9yZW1hcGZyZWUoJmRldl9wcml2LT5od3NfbWFwLCBkZXYpOwotCQlJOTE1X1dSSVRFKDB4MjA4MCwgMHgxZmZmZjAwMCk7Ci0JfQorCS8qIENsZWFyIHRoZSBIV1MgdmlydHVhbCBhZGRyZXNzIGF0IHRlYXJkb3duICovCisJaWYgKEk5MTVfTkVFRF9HRlhfSFdTKGRldikpCisJCWk5MTVfZnJlZV9od3MoZGV2KTsKIAogCXJldHVybiAwOwogfQpAQCAtMTIxLDM0ICsxNjgsMzQgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JZGV2X3ByaXYtPm1taW9fbWFwID0gZHJtX2NvcmVfZmluZG1hcChkZXYsIGluaXQtPm1taW9fb2Zmc2V0KTsKLQlpZiAoIWRldl9wcml2LT5tbWlvX21hcCkgewotCQlpOTE1X2RtYV9jbGVhbnVwKGRldik7Ci0JCURSTV9FUlJPUigiY2FuIG5vdCBmaW5kIG1taW8gbWFwIVxuIik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQogCWRldl9wcml2LT5zYXJlYV9wcml2ID0gKGRybV9pOTE1X3NhcmVhX3QgKikKIAkgICAgKCh1OCAqKSBkZXZfcHJpdi0+c2FyZWEtPmhhbmRsZSArIGluaXQtPnNhcmVhX3ByaXZfb2Zmc2V0KTsKIAotCWRldl9wcml2LT5yaW5nLlN0YXJ0ID0gaW5pdC0+cmluZ19zdGFydDsKLQlkZXZfcHJpdi0+cmluZy5FbmQgPSBpbml0LT5yaW5nX2VuZDsKLQlkZXZfcHJpdi0+cmluZy5TaXplID0gaW5pdC0+cmluZ19zaXplOwotCWRldl9wcml2LT5yaW5nLnRhaWxfbWFzayA9IGRldl9wcml2LT5yaW5nLlNpemUgLSAxOworCWlmIChpbml0LT5yaW5nX3NpemUgIT0gMCkgeworCQlpZiAoZGV2X3ByaXYtPnJpbmcucmluZ19vYmogIT0gTlVMTCkgeworCQkJaTkxNV9kbWFfY2xlYW51cChkZXYpOworCQkJRFJNX0VSUk9SKCJDbGllbnQgdHJpZWQgdG8gaW5pdGlhbGl6ZSByaW5nYnVmZmVyIGluICIKKwkJCQkgICJHRU0gbW9kZVxuIik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQogCi0JZGV2X3ByaXYtPnJpbmcubWFwLm9mZnNldCA9IGluaXQtPnJpbmdfc3RhcnQ7Ci0JZGV2X3ByaXYtPnJpbmcubWFwLnNpemUgPSBpbml0LT5yaW5nX3NpemU7Ci0JZGV2X3ByaXYtPnJpbmcubWFwLnR5cGUgPSAwOwotCWRldl9wcml2LT5yaW5nLm1hcC5mbGFncyA9IDA7Ci0JZGV2X3ByaXYtPnJpbmcubWFwLm10cnIgPSAwOworCQlkZXZfcHJpdi0+cmluZy5TaXplID0gaW5pdC0+cmluZ19zaXplOworCQlkZXZfcHJpdi0+cmluZy50YWlsX21hc2sgPSBkZXZfcHJpdi0+cmluZy5TaXplIC0gMTsKIAotCWRybV9jb3JlX2lvcmVtYXAoJmRldl9wcml2LT5yaW5nLm1hcCwgZGV2KTsKKwkJZGV2X3ByaXYtPnJpbmcubWFwLm9mZnNldCA9IGluaXQtPnJpbmdfc3RhcnQ7CisJCWRldl9wcml2LT5yaW5nLm1hcC5zaXplID0gaW5pdC0+cmluZ19zaXplOworCQlkZXZfcHJpdi0+cmluZy5tYXAudHlwZSA9IDA7CisJCWRldl9wcml2LT5yaW5nLm1hcC5mbGFncyA9IDA7CisJCWRldl9wcml2LT5yaW5nLm1hcC5tdHJyID0gMDsKIAotCWlmIChkZXZfcHJpdi0+cmluZy5tYXAuaGFuZGxlID09IE5VTEwpIHsKLQkJaTkxNV9kbWFfY2xlYW51cChkZXYpOwotCQlEUk1fRVJST1IoImNhbiBub3QgaW9yZW1hcCB2aXJ0dWFsIGFkZHJlc3MgZm9yIgotCQkJICAiIHJpbmcgYnVmZmVyXG4iKTsKLQkJcmV0dXJuIC1FTk9NRU07CisJCWRybV9jb3JlX2lvcmVtYXAoJmRldl9wcml2LT5yaW5nLm1hcCwgZGV2KTsKKworCQlpZiAoZGV2X3ByaXYtPnJpbmcubWFwLmhhbmRsZSA9PSBOVUxMKSB7CisJCQlpOTE1X2RtYV9jbGVhbnVwKGRldik7CisJCQlEUk1fRVJST1IoImNhbiBub3QgaW9yZW1hcCB2aXJ0dWFsIGFkZHJlc3MgZm9yIgorCQkJCSAgIiByaW5nIGJ1ZmZlclxuIik7CisJCQlyZXR1cm4gLUVOT01FTTsKKwkJfQogCX0KIAogCWRldl9wcml2LT5yaW5nLnZpcnR1YWxfc3RhcnQgPSBkZXZfcHJpdi0+cmluZy5tYXAuaGFuZGxlOwpAQCAtMTU5LDM0ICsyMDYsMTAgQEAKIAlkZXZfcHJpdi0+Y3VycmVudF9wYWdlID0gMDsKIAlkZXZfcHJpdi0+c2FyZWFfcHJpdi0+cGZfY3VycmVudF9wYWdlID0gZGV2X3ByaXYtPmN1cnJlbnRfcGFnZTsKIAotCS8qIFdlIGFyZSB1c2luZyBzZXBhcmF0ZSB2YWx1ZXMgYXMgcGxhY2Vob2xkZXJzIGZvciBtZWNoYW5pc21zIGZvcgotCSAqIHByaXZhdGUgYmFja2J1ZmZlci9kZXB0aGJ1ZmZlciB1c2FnZS4KLQkgKi8KLQlkZXZfcHJpdi0+dXNlX21pX2JhdGNoYnVmZmVyX3N0YXJ0ID0gMDsKLQlpZiAoSVNfSTk2NUcoZGV2KSkgLyogOTY1IGRvZXNuJ3Qgc3VwcG9ydCBvbGRlciBtZXRob2QgKi8KLQkJZGV2X3ByaXYtPnVzZV9taV9iYXRjaGJ1ZmZlcl9zdGFydCA9IDE7Ci0KIAkvKiBBbGxvdyBoYXJkd2FyZSBiYXRjaGJ1ZmZlcnMgdW5sZXNzIHRvbGQgb3RoZXJ3aXNlLgogCSAqLwogCWRldl9wcml2LT5hbGxvd19iYXRjaGJ1ZmZlciA9IDE7CiAKLQkvKiBQcm9ncmFtIEhhcmR3YXJlIFN0YXR1cyBQYWdlICovCi0JaWYgKCFJOTE1X05FRURfR0ZYX0hXUyhkZXYpKSB7Ci0JCWRldl9wcml2LT5zdGF0dXNfcGFnZV9kbWFoID0KLQkJCWRybV9wY2lfYWxsb2MoZGV2LCBQQUdFX1NJWkUsIFBBR0VfU0laRSwgMHhmZmZmZmZmZik7Ci0KLQkJaWYgKCFkZXZfcHJpdi0+c3RhdHVzX3BhZ2VfZG1haCkgewotCQkJaTkxNV9kbWFfY2xlYW51cChkZXYpOwotCQkJRFJNX0VSUk9SKCJDYW4gbm90IGFsbG9jYXRlIGhhcmR3YXJlIHN0YXR1cyBwYWdlXG4iKTsKLQkJCXJldHVybiAtRU5PTUVNOwotCQl9Ci0JCWRldl9wcml2LT5od19zdGF0dXNfcGFnZSA9IGRldl9wcml2LT5zdGF0dXNfcGFnZV9kbWFoLT52YWRkcjsKLQkJZGV2X3ByaXYtPmRtYV9zdGF0dXNfcGFnZSA9IGRldl9wcml2LT5zdGF0dXNfcGFnZV9kbWFoLT5idXNhZGRyOwotCi0JCW1lbXNldChkZXZfcHJpdi0+aHdfc3RhdHVzX3BhZ2UsIDAsIFBBR0VfU0laRSk7Ci0JCUk5MTVfV1JJVEUoMHgwMjA4MCwgZGV2X3ByaXYtPmRtYV9zdGF0dXNfcGFnZSk7Ci0JfQotCURSTV9ERUJVRygiRW5hYmxlZCBoYXJkd2FyZSBzdGF0dXMgcGFnZVxuIik7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTIwMSwxMSArMjI0LDYgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JaWYgKCFkZXZfcHJpdi0+bW1pb19tYXApIHsKLQkJRFJNX0VSUk9SKCJjYW4gbm90IGZpbmQgbW1pbyBtYXAhXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCiAJaWYgKGRldl9wcml2LT5yaW5nLm1hcC5oYW5kbGUgPT0gTlVMTCkgewogCQlEUk1fRVJST1IoImNhbiBub3QgaW9yZW1hcCB2aXJ0dWFsIGFkZHJlc3MgZm9yIgogCQkJICAiIHJpbmcgYnVmZmVyXG4iKTsKQEAgLTIyMCw5ICsyMzgsOSBAQAogCURSTV9ERUJVRygiaHcgc3RhdHVzIHBhZ2UgQCAlcFxuIiwgZGV2X3ByaXYtPmh3X3N0YXR1c19wYWdlKTsKIAogCWlmIChkZXZfcHJpdi0+c3RhdHVzX2dmeF9hZGRyICE9IDApCi0JCUk5MTVfV1JJVEUoMHgwMjA4MCwgZGV2X3ByaXYtPnN0YXR1c19nZnhfYWRkcik7CisJCUk5MTVfV1JJVEUoSFdTX1BHQSwgZGV2X3ByaXYtPnN0YXR1c19nZnhfYWRkcik7CiAJZWxzZQotCQlJOTE1X1dSSVRFKDB4MDIwODAsIGRldl9wcml2LT5kbWFfc3RhdHVzX3BhZ2UpOworCQlJOTE1X1dSSVRFKEhXU19QR0EsIGRldl9wcml2LT5kbWFfc3RhdHVzX3BhZ2UpOwogCURSTV9ERUJVRygiRW5hYmxlZCBoYXJkd2FyZSBzdGF0dXMgcGFnZVxuIik7CiAKIAlyZXR1cm4gMDsKQEAgLTM2Nyw5ICszODUsMTAgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBpOTE1X2VtaXRfYm94KHN0cnVjdCBkcm1fZGV2aWNlICogZGV2LAotCQkJIHN0cnVjdCBkcm1fY2xpcF9yZWN0IF9fdXNlciAqIGJveGVzLAotCQkJIGludCBpLCBpbnQgRFIxLCBpbnQgRFI0KQoraW50CitpOTE1X2VtaXRfYm94KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCisJICAgICAgc3RydWN0IGRybV9jbGlwX3JlY3QgX191c2VyICpib3hlcywKKwkgICAgICBpbnQgaSwgaW50IERSMSwgaW50IERSNCkKIHsKIAlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAlzdHJ1Y3QgZHJtX2NsaXBfcmVjdCBib3g7CkBAIC00MTUsMTQgKzQzNCwxNSBAQAogCWRybV9pOTE1X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwogCVJJTkdfTE9DQUxTOwogCi0JZGV2X3ByaXYtPnNhcmVhX3ByaXYtPmxhc3RfZW5xdWV1ZSA9ICsrZGV2X3ByaXYtPmNvdW50ZXI7Ci0KKwlkZXZfcHJpdi0+Y291bnRlcisrOwogCWlmIChkZXZfcHJpdi0+Y291bnRlciA+IDB4N0ZGRkZGRkZVTCkKLQkJZGV2X3ByaXYtPnNhcmVhX3ByaXYtPmxhc3RfZW5xdWV1ZSA9IGRldl9wcml2LT5jb3VudGVyID0gMTsKKwkJZGV2X3ByaXYtPmNvdW50ZXIgPSAwOworCWlmIChkZXZfcHJpdi0+c2FyZWFfcHJpdikKKwkJZGV2X3ByaXYtPnNhcmVhX3ByaXYtPmxhc3RfZW5xdWV1ZSA9IGRldl9wcml2LT5jb3VudGVyOwogCiAJQkVHSU5fTFBfUklORyg0KTsKLQlPVVRfUklORyhDTURfU1RPUkVfRFdPUkRfSURYKTsKLQlPVVRfUklORygyMCk7CisJT1VUX1JJTkcoTUlfU1RPUkVfRFdPUkRfSU5ERVgpOworCU9VVF9SSU5HKDUgPDwgTUlfU1RPUkVfRFdPUkRfSU5ERVhfU0hJRlQpOwogCU9VVF9SSU5HKGRldl9wcml2LT5jb3VudGVyKTsKIAlPVVRfUklORygwKTsKIAlBRFZBTkNFX0xQX1JJTkcoKTsKQEAgLTQ4Niw3ICs1MDYsNyBAQAogCQkJCXJldHVybiByZXQ7CiAJCX0KIAotCQlpZiAoZGV2X3ByaXYtPnVzZV9taV9iYXRjaGJ1ZmZlcl9zdGFydCkgeworCQlpZiAoIUlTX0k4MzAoZGV2KSAmJiAhSVNfODQ1RyhkZXYpKSB7CiAJCQlCRUdJTl9MUF9SSU5HKDIpOwogCQkJaWYgKElTX0k5NjVHKGRldikpIHsKIAkJCQlPVVRfUklORyhNSV9CQVRDSF9CVUZGRVJfU1RBUlQgfCAoMiA8PCA2KSB8IE1JX0JBVENIX05PTl9TRUNVUkVfSTk2NSk7CkBAIC01MTYsMTUgKzUzNiwxOCBAQAogCWRybV9pOTE1X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwogCVJJTkdfTE9DQUxTOwogCisJaWYgKCFkZXZfcHJpdi0+c2FyZWFfcHJpdikKKwkJcmV0dXJuIC1FSU5WQUw7CisKIAlEUk1fREVCVUcoIiVzOiBwYWdlPSVkIHBmQ3VycmVudFBhZ2U9JWRcbiIsCi0JCSAgX19GVU5DVElPTl9fLAorCQkgIF9fZnVuY19fLAogCQkgIGRldl9wcml2LT5jdXJyZW50X3BhZ2UsCiAJCSAgZGV2X3ByaXYtPnNhcmVhX3ByaXYtPnBmX2N1cnJlbnRfcGFnZSk7CiAKIAlpOTE1X2tlcm5lbF9sb3N0X2NvbnRleHQoZGV2KTsKIAogCUJFR0lOX0xQX1JJTkcoMik7Ci0JT1VUX1JJTkcoSU5TVF9QQVJTRVJfQ0xJRU5UIHwgSU5TVF9PUF9GTFVTSCB8IElOU1RfRkxVU0hfTUFQX0NBQ0hFKTsKKwlPVVRfUklORyhNSV9GTFVTSCB8IE1JX1JFQURfRkxVU0gpOwogCU9VVF9SSU5HKDApOwogCUFEVkFOQ0VfTFBfUklORygpOwogCkBAIC01NDksOCArNTcyLDggQEAKIAlkZXZfcHJpdi0+c2FyZWFfcHJpdi0+bGFzdF9lbnF1ZXVlID0gZGV2X3ByaXYtPmNvdW50ZXIrKzsKIAogCUJFR0lOX0xQX1JJTkcoNCk7Ci0JT1VUX1JJTkcoQ01EX1NUT1JFX0RXT1JEX0lEWCk7Ci0JT1VUX1JJTkcoMjApOworCU9VVF9SSU5HKE1JX1NUT1JFX0RXT1JEX0lOREVYKTsKKwlPVVRfUklORyg1IDw8IE1JX1NUT1JFX0RXT1JEX0lOREVYX1NISUZUKTsKIAlPVVRfUklORyhkZXZfcHJpdi0+Y291bnRlcik7CiAJT1VUX1JJTkcoMCk7CiAJQURWQU5DRV9MUF9SSU5HKCk7CkBAIC01NzAsOSArNTkzLDE1IEBACiBzdGF0aWMgaW50IGk5MTVfZmx1c2hfaW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKIAkJCSAgICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdikKIHsKLQlMT0NLX1RFU1RfV0lUSF9SRVRVUk4oZGV2LCBmaWxlX3ByaXYpOworCWludCByZXQ7CiAKLQlyZXR1cm4gaTkxNV9xdWllc2NlbnQoZGV2KTsKKwlSSU5HX0xPQ0tfVEVTVF9XSVRIX1JFVFVSTihkZXYsIGZpbGVfcHJpdik7CisKKwltdXRleF9sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CisJcmV0ID0gaTkxNV9xdWllc2NlbnQoZGV2KTsKKwltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKKworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBpbnQgaTkxNV9iYXRjaGJ1ZmZlcihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLApAQCAtNTkzLDE2ICs2MjIsMTkgQEAKIAlEUk1fREVCVUcoImk5MTUgYmF0Y2hidWZmZXIsIHN0YXJ0ICV4IHVzZWQgJWQgY2xpcHJlY3RzICVkXG4iLAogCQkgIGJhdGNoLT5zdGFydCwgYmF0Y2gtPnVzZWQsIGJhdGNoLT5udW1fY2xpcHJlY3RzKTsKIAotCUxPQ0tfVEVTVF9XSVRIX1JFVFVSTihkZXYsIGZpbGVfcHJpdik7CisJUklOR19MT0NLX1RFU1RfV0lUSF9SRVRVUk4oZGV2LCBmaWxlX3ByaXYpOwogCiAJaWYgKGJhdGNoLT5udW1fY2xpcHJlY3RzICYmIERSTV9WRVJJRllBUkVBX1JFQUQoYmF0Y2gtPmNsaXByZWN0cywKIAkJCQkJCSAgICAgICBiYXRjaC0+bnVtX2NsaXByZWN0cyAqCiAJCQkJCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBkcm1fY2xpcF9yZWN0KSkpCiAJCXJldHVybiAtRUZBVUxUOwogCisJbXV0ZXhfbG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOwogCXJldCA9IGk5MTVfZGlzcGF0Y2hfYmF0Y2hidWZmZXIoZGV2LCBiYXRjaCk7CisJbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CiAKLQlzYXJlYV9wcml2LT5sYXN0X2Rpc3BhdGNoID0gKGludClod19zdGF0dXNbNV07CisJaWYgKHNhcmVhX3ByaXYpCisJCXNhcmVhX3ByaXYtPmxhc3RfZGlzcGF0Y2ggPSAoaW50KWh3X3N0YXR1c1s1XTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC02MTksNyArNjUxLDcgQEAKIAlEUk1fREVCVUcoImk5MTUgY21kYnVmZmVyLCBidWYgJXAgc3ogJWQgY2xpcHJlY3RzICVkXG4iLAogCQkgIGNtZGJ1Zi0+YnVmLCBjbWRidWYtPnN6LCBjbWRidWYtPm51bV9jbGlwcmVjdHMpOwogCi0JTE9DS19URVNUX1dJVEhfUkVUVVJOKGRldiwgZmlsZV9wcml2KTsKKwlSSU5HX0xPQ0tfVEVTVF9XSVRIX1JFVFVSTihkZXYsIGZpbGVfcHJpdik7CiAKIAlpZiAoY21kYnVmLT5udW1fY2xpcHJlY3RzICYmCiAJICAgIERSTV9WRVJJRllBUkVBX1JFQUQoY21kYnVmLT5jbGlwcmVjdHMsCkBAIC02MjksMjQgKzY2MSwzMyBAQAogCQlyZXR1cm4gLUVGQVVMVDsKIAl9CiAKKwltdXRleF9sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CiAJcmV0ID0gaTkxNV9kaXNwYXRjaF9jbWRidWZmZXIoZGV2LCBjbWRidWYpOworCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOwogCWlmIChyZXQpIHsKIAkJRFJNX0VSUk9SKCJpOTE1X2Rpc3BhdGNoX2NtZGJ1ZmZlciBmYWlsZWRcbiIpOwogCQlyZXR1cm4gcmV0OwogCX0KIAotCXNhcmVhX3ByaXYtPmxhc3RfZGlzcGF0Y2ggPSAoaW50KWh3X3N0YXR1c1s1XTsKKwlpZiAoc2FyZWFfcHJpdikKKwkJc2FyZWFfcHJpdi0+bGFzdF9kaXNwYXRjaCA9IChpbnQpaHdfc3RhdHVzWzVdOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IGk5MTVfZmxpcF9idWZzKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCiAJCQkgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KQogewotCURSTV9ERUJVRygiJXNcbiIsIF9fRlVOQ1RJT05fXyk7CisJaW50IHJldDsKIAotCUxPQ0tfVEVTVF9XSVRIX1JFVFVSTihkZXYsIGZpbGVfcHJpdik7CisJRFJNX0RFQlVHKCIlc1xuIiwgX19mdW5jX18pOwogCi0JcmV0dXJuIGk5MTVfZGlzcGF0Y2hfZmxpcChkZXYpOworCVJJTkdfTE9DS19URVNUX1dJVEhfUkVUVVJOKGRldiwgZmlsZV9wcml2KTsKKworCW11dGV4X2xvY2soJmRldi0+c3RydWN0X211dGV4KTsKKwlyZXQgPSBpOTE1X2Rpc3BhdGNoX2ZsaXAoZGV2KTsKKwltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKKworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBpbnQgaTkxNV9nZXRwYXJhbShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLApAQCAtNjYzLDcgKzcwNCw3IEBACiAKIAlzd2l0Y2ggKHBhcmFtLT5wYXJhbSkgewogCWNhc2UgSTkxNV9QQVJBTV9JUlFfQUNUSVZFOgotCQl2YWx1ZSA9IGRldi0+aXJxID8gMSA6IDA7CisJCXZhbHVlID0gZGV2LT5wZGV2LT5pcnEgPyAxIDogMDsKIAkJYnJlYWs7CiAJY2FzZSBJOTE1X1BBUkFNX0FMTE9XX0JBVENIQlVGRkVSOgogCQl2YWx1ZSA9IGRldl9wcml2LT5hbGxvd19iYXRjaGJ1ZmZlciA/IDEgOiAwOwpAQCAtNjcxLDYgKzcxMiwxMiBAQAogCWNhc2UgSTkxNV9QQVJBTV9MQVNUX0RJU1BBVENIOgogCQl2YWx1ZSA9IFJFQURfQlJFQURDUlVNQihkZXZfcHJpdik7CiAJCWJyZWFrOworCWNhc2UgSTkxNV9QQVJBTV9DSElQU0VUX0lEOgorCQl2YWx1ZSA9IGRldi0+cGNpX2RldmljZTsKKwkJYnJlYWs7CisJY2FzZSBJOTE1X1BBUkFNX0hBU19HRU06CisJCXZhbHVlID0gMTsKKwkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJRFJNX0VSUk9SKCJVbmtub3duIHBhcmFtZXRlciAlZFxuIiwgcGFyYW0tPnBhcmFtKTsKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC02OTcsOCArNzQ0LDYgQEAKIAogCXN3aXRjaCAocGFyYW0tPnBhcmFtKSB7CiAJY2FzZSBJOTE1X1NFVFBBUkFNX1VTRV9NSV9CQVRDSEJVRkZFUl9TVEFSVDoKLQkJaWYgKCFJU19JOTY1RyhkZXYpKQotCQkJZGV2X3ByaXYtPnVzZV9taV9iYXRjaGJ1ZmZlcl9zdGFydCA9IHBhcmFtLT52YWx1ZTsKIAkJYnJlYWs7CiAJY2FzZSBJOTE1X1NFVFBBUkFNX1RFWF9MUlVfTE9HX0dSQU5VTEFSSVRZOgogCQlkZXZfcHJpdi0+dGV4X2xydV9sb2dfZ3JhbnVsYXJpdHkgPSBwYXJhbS0+dmFsdWU7CkBAIC03NDksOCArNzk0LDggQEAKIAlkZXZfcHJpdi0+aHdfc3RhdHVzX3BhZ2UgPSBkZXZfcHJpdi0+aHdzX21hcC5oYW5kbGU7CiAKIAltZW1zZXQoZGV2X3ByaXYtPmh3X3N0YXR1c19wYWdlLCAwLCBQQUdFX1NJWkUpOwotCUk5MTVfV1JJVEUoMHgwMjA4MCwgZGV2X3ByaXYtPnN0YXR1c19nZnhfYWRkcik7Ci0JRFJNX0RFQlVHKCJsb2FkIGh3cyAweDIwODAgd2l0aCBnZnggbWVtIDB4JXhcbiIsCisJSTkxNV9XUklURShIV1NfUEdBLCBkZXZfcHJpdi0+c3RhdHVzX2dmeF9hZGRyKTsKKwlEUk1fREVCVUcoImxvYWQgaHdzIEhXU19QR0Egd2l0aCBnZnggbWVtIDB4JXhcbiIsCiAJCQlkZXZfcHJpdi0+c3RhdHVzX2dmeF9hZGRyKTsKIAlEUk1fREVCVUcoImxvYWQgaHdzIGF0ICVwXG4iLCBkZXZfcHJpdi0+aHdfc3RhdHVzX3BhZ2UpOwogCXJldHVybiAwOwpAQCAtNzc2LDE0ICs4MjEsMzggQEAKIAltZW1zZXQoZGV2X3ByaXYsIDAsIHNpemVvZihkcm1faTkxNV9wcml2YXRlX3QpKTsKIAogCWRldi0+ZGV2X3ByaXZhdGUgPSAodm9pZCAqKWRldl9wcml2OworCWRldl9wcml2LT5kZXYgPSBkZXY7CiAKIAkvKiBBZGQgcmVnaXN0ZXIgbWFwIChuZWVkZWQgZm9yIHN1c3BlbmQvcmVzdW1lKSAqLwogCWJhc2UgPSBkcm1fZ2V0X3Jlc291cmNlX3N0YXJ0KGRldiwgbW1pb19iYXIpOwogCXNpemUgPSBkcm1fZ2V0X3Jlc291cmNlX2xlbihkZXYsIG1taW9fYmFyKTsKIAotCXJldCA9IGRybV9hZGRtYXAoZGV2LCBiYXNlLCBzaXplLCBfRFJNX1JFR0lTVEVSUywKLQkJCSBfRFJNX0tFUk5FTCB8IF9EUk1fRFJJVkVSLAotCQkJICZkZXZfcHJpdi0+bW1pb19tYXApOworCWRldl9wcml2LT5yZWdzID0gaW9yZW1hcChiYXNlLCBzaXplKTsKKworCWk5MTVfZ2VtX2xvYWQoZGV2KTsKKworCS8qIEluaXQgSFdTICovCisJaWYgKCFJOTE1X05FRURfR0ZYX0hXUyhkZXYpKSB7CisJCXJldCA9IGk5MTVfaW5pdF9waHlzX2h3cyhkZXYpOworCQlpZiAocmV0ICE9IDApCisJCQlyZXR1cm4gcmV0OworCX0KKworCS8qIE9uIHRoZSA5NDVHL0dNLCB0aGUgY2hpcHNldCByZXBvcnRzIHRoZSBNU0kgY2FwYWJpbGl0eSBvbiB0aGUKKwkgKiBpbnRlZ3JhdGVkIGdyYXBoaWNzIGV2ZW4gdGhvdWdoIHRoZSBzdXBwb3J0IGlzbid0IGFjdHVhbGx5IHRoZXJlCisJICogYWNjb3JkaW5nIHRvIHRoZSBwdWJsaXNoZWQgc3BlY3MuICBJdCBkb2Vzbid0IGFwcGVhciB0byBmdW5jdGlvbgorCSAqIGNvcnJlY3RseSBpbiB0ZXN0aW5nIG9uIDk0NUcuCisJICogVGhpcyBtYXkgYmUgYSBzaWRlIGVmZmVjdCBvZiBNU0kgaGF2aW5nIGJlZW4gbWFkZSBhdmFpbGFibGUgZm9yIFBFRworCSAqIGFuZCB0aGUgcmVnaXN0ZXJzIGJlaW5nIGNsb3NlbHkgYXNzb2NpYXRlZC4KKwkgKi8KKwlpZiAoIUlTX0k5NDVHKGRldikgJiYgIUlTX0k5NDVHTShkZXYpKQorCQlpZiAocGNpX2VuYWJsZV9tc2koZGV2LT5wZGV2KSkKKwkJCURSTV9FUlJPUigiZmFpbGVkIHRvIGVuYWJsZSBNU0lcbiIpOworCisJaW50ZWxfb3ByZWdpb25faW5pdChkZXYpOworCisJc3Bpbl9sb2NrX2luaXQoJmRldl9wcml2LT51c2VyX2lycV9sb2NrKTsKKwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTc5MSw4ICs4NjAsMTUgQEAKIHsKIAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwogCi0JaWYgKGRldl9wcml2LT5tbWlvX21hcCkKLQkJZHJtX3JtbWFwKGRldiwgZGV2X3ByaXYtPm1taW9fbWFwKTsKKwlpZiAoZGV2LT5wZGV2LT5tc2lfZW5hYmxlZCkKKwkJcGNpX2Rpc2FibGVfbXNpKGRldi0+cGRldik7CisKKwlpOTE1X2ZyZWVfaHdzKGRldik7CisKKwlpZiAoZGV2X3ByaXYtPnJlZ3MgIT0gTlVMTCkKKwkJaW91bm1hcChkZXZfcHJpdi0+cmVncyk7CisKKwlpbnRlbF9vcHJlZ2lvbl9mcmVlKGRldik7CiAKIAlkcm1fZnJlZShkZXYtPmRldl9wcml2YXRlLCBzaXplb2YoZHJtX2k5MTVfcHJpdmF0ZV90KSwKIAkJIERSTV9NRU1fRFJJVkVSKTsKQEAgLTgwMCw2ICs4NzYsMjUgQEAKIAlyZXR1cm4gMDsKIH0KIAoraW50IGk5MTVfZHJpdmVyX29wZW4oc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpCit7CisJc3RydWN0IGRybV9pOTE1X2ZpbGVfcHJpdmF0ZSAqaTkxNV9maWxlX3ByaXY7CisKKwlEUk1fREVCVUcoIlxuIik7CisJaTkxNV9maWxlX3ByaXYgPSAoc3RydWN0IGRybV9pOTE1X2ZpbGVfcHJpdmF0ZSAqKQorCSAgICBkcm1fYWxsb2Moc2l6ZW9mKCppOTE1X2ZpbGVfcHJpdiksIERSTV9NRU1fRklMRVMpOworCisJaWYgKCFpOTE1X2ZpbGVfcHJpdikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlmaWxlX3ByaXYtPmRyaXZlcl9wcml2ID0gaTkxNV9maWxlX3ByaXY7CisKKwlpOTE1X2ZpbGVfcHJpdi0+bW0ubGFzdF9nZW1fc2Vxbm8gPSAwOworCWk5MTVfZmlsZV9wcml2LT5tbS5sYXN0X2dlbV90aHJvdHRsZV9zZXFubyA9IDA7CisKKwlyZXR1cm4gMDsKK30KKwogdm9pZCBpOTE1X2RyaXZlcl9sYXN0Y2xvc2Uoc3RydWN0IGRybV9kZXZpY2UgKiBkZXYpCiB7CiAJZHJtX2k5MTVfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CkBAIC04MDcsNiArOTAyLDggQEAKIAlpZiAoIWRldl9wcml2KQogCQlyZXR1cm47CiAKKwlpOTE1X2dlbV9sYXN0Y2xvc2UoZGV2KTsKKwogCWlmIChkZXZfcHJpdi0+YWdwX2hlYXApCiAJCWk5MTVfbWVtX3Rha2Vkb3duKCYoZGV2X3ByaXYtPmFncF9oZWFwKSk7CiAKQEAgLTgxOSw2ICs5MTYsMTMgQEAKIAlpOTE1X21lbV9yZWxlYXNlKGRldiwgZmlsZV9wcml2LCBkZXZfcHJpdi0+YWdwX2hlYXApOwogfQogCit2b2lkIGk5MTVfZHJpdmVyX3Bvc3RjbG9zZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdikKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfZmlsZV9wcml2YXRlICppOTE1X2ZpbGVfcHJpdiA9IGZpbGVfcHJpdi0+ZHJpdmVyX3ByaXY7CisKKwlkcm1fZnJlZShpOTE1X2ZpbGVfcHJpdiwgc2l6ZW9mKCppOTE1X2ZpbGVfcHJpdiksIERSTV9NRU1fRklMRVMpOworfQorCiBzdHJ1Y3QgZHJtX2lvY3RsX2Rlc2MgaTkxNV9pb2N0bHNbXSA9IHsKIAlEUk1fSU9DVExfREVGKERSTV9JOTE1X0lOSVQsIGk5MTVfZG1hX2luaXQsIERSTV9BVVRIfERSTV9NQVNURVJ8RFJNX1JPT1RfT05MWSksCiAJRFJNX0lPQ1RMX0RFRihEUk1fSTkxNV9GTFVTSCwgaTkxNV9mbHVzaF9pb2N0bCwgRFJNX0FVVEgpLApAQCAtODM2LDcgKzk0MCwyMyBAQAogCURSTV9JT0NUTF9ERUYoRFJNX0k5MTVfU0VUX1ZCTEFOS19QSVBFLCAgaTkxNV92YmxhbmtfcGlwZV9zZXQsIERSTV9BVVRIfERSTV9NQVNURVJ8RFJNX1JPT1RfT05MWSApLAogCURSTV9JT0NUTF9ERUYoRFJNX0k5MTVfR0VUX1ZCTEFOS19QSVBFLCAgaTkxNV92YmxhbmtfcGlwZV9nZXQsIERSTV9BVVRIICksCiAJRFJNX0lPQ1RMX0RFRihEUk1fSTkxNV9WQkxBTktfU1dBUCwgaTkxNV92Ymxhbmtfc3dhcCwgRFJNX0FVVEgpLAotCURSTV9JT0NUTF9ERUYoRFJNX0k5MTVfSFdTX0FERFIsIGk5MTVfc2V0X3N0YXR1c19wYWdlLCBEUk1fQVVUSCksCisJRFJNX0lPQ1RMX0RFRihEUk1fSTkxNV9IV1NfQUREUiwgaTkxNV9zZXRfc3RhdHVzX3BhZ2UsIERSTV9BVVRIfERSTV9NQVNURVJ8RFJNX1JPT1RfT05MWSksCisJRFJNX0lPQ1RMX0RFRihEUk1fSTkxNV9HRU1fSU5JVCwgaTkxNV9nZW1faW5pdF9pb2N0bCwgRFJNX0FVVEh8RFJNX01BU1RFUnxEUk1fUk9PVF9PTkxZKSwKKwlEUk1fSU9DVExfREVGKERSTV9JOTE1X0dFTV9FWEVDQlVGRkVSLCBpOTE1X2dlbV9leGVjYnVmZmVyLCBEUk1fQVVUSCksCisJRFJNX0lPQ1RMX0RFRihEUk1fSTkxNV9HRU1fUElOLCBpOTE1X2dlbV9waW5faW9jdGwsIERSTV9BVVRIfERSTV9ST09UX09OTFkpLAorCURSTV9JT0NUTF9ERUYoRFJNX0k5MTVfR0VNX1VOUElOLCBpOTE1X2dlbV91bnBpbl9pb2N0bCwgRFJNX0FVVEh8RFJNX1JPT1RfT05MWSksCisJRFJNX0lPQ1RMX0RFRihEUk1fSTkxNV9HRU1fQlVTWSwgaTkxNV9nZW1fYnVzeV9pb2N0bCwgRFJNX0FVVEgpLAorCURSTV9JT0NUTF9ERUYoRFJNX0k5MTVfR0VNX1RIUk9UVExFLCBpOTE1X2dlbV90aHJvdHRsZV9pb2N0bCwgRFJNX0FVVEgpLAorCURSTV9JT0NUTF9ERUYoRFJNX0k5MTVfR0VNX0VOVEVSVlQsIGk5MTVfZ2VtX2VudGVydnRfaW9jdGwsIERSTV9BVVRIfERSTV9NQVNURVJ8RFJNX1JPT1RfT05MWSksCisJRFJNX0lPQ1RMX0RFRihEUk1fSTkxNV9HRU1fTEVBVkVWVCwgaTkxNV9nZW1fbGVhdmV2dF9pb2N0bCwgRFJNX0FVVEh8RFJNX01BU1RFUnxEUk1fUk9PVF9PTkxZKSwKKwlEUk1fSU9DVExfREVGKERSTV9JOTE1X0dFTV9DUkVBVEUsIGk5MTVfZ2VtX2NyZWF0ZV9pb2N0bCwgMCksCisJRFJNX0lPQ1RMX0RFRihEUk1fSTkxNV9HRU1fUFJFQUQsIGk5MTVfZ2VtX3ByZWFkX2lvY3RsLCAwKSwKKwlEUk1fSU9DVExfREVGKERSTV9JOTE1X0dFTV9QV1JJVEUsIGk5MTVfZ2VtX3B3cml0ZV9pb2N0bCwgMCksCisJRFJNX0lPQ1RMX0RFRihEUk1fSTkxNV9HRU1fTU1BUCwgaTkxNV9nZW1fbW1hcF9pb2N0bCwgMCksCisJRFJNX0lPQ1RMX0RFRihEUk1fSTkxNV9HRU1fU0VUX0RPTUFJTiwgaTkxNV9nZW1fc2V0X2RvbWFpbl9pb2N0bCwgMCksCisJRFJNX0lPQ1RMX0RFRihEUk1fSTkxNV9HRU1fU1dfRklOSVNILCBpOTE1X2dlbV9zd19maW5pc2hfaW9jdGwsIDApLAorCURSTV9JT0NUTF9ERUYoRFJNX0k5MTVfR0VNX1NFVF9USUxJTkcsIGk5MTVfZ2VtX3NldF90aWxpbmcsIDApLAorCURSTV9JT0NUTF9ERUYoRFJNX0k5MTVfR0VNX0dFVF9USUxJTkcsIGk5MTVfZ2VtX2dldF90aWxpbmcsIDApLAogfTsKIAogaW50IGk5MTVfbWF4X2lvY3RsID0gRFJNX0FSUkFZX1NJWkUoaTkxNV9pb2N0bHMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmMKaW5kZXggOTNhZWQxYy4uYTgwZWFkMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5jCkBAIC0zOCwyMTEgKzM4LDkgQEAKIAlpOTE1X1BDSV9JRFMKIH07CiAKLWVudW0gcGlwZSB7Ci0gICAgUElQRV9BID0gMCwKLSAgICBQSVBFX0IsCi19OwotCi1zdGF0aWMgYm9vbCBpOTE1X3BpcGVfZW5hYmxlZChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBlbnVtIHBpcGUgcGlwZSkKLXsKLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwotCi0JaWYgKHBpcGUgPT0gUElQRV9BKQotCQlyZXR1cm4gKEk5MTVfUkVBRChEUExMX0EpICYgRFBMTF9WQ09fRU5BQkxFKTsKLQllbHNlCi0JCXJldHVybiAoSTkxNV9SRUFEKERQTExfQikgJiBEUExMX1ZDT19FTkFCTEUpOwotfQotCi1zdGF0aWMgdm9pZCBpOTE1X3NhdmVfcGFsZXR0ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBlbnVtIHBpcGUgcGlwZSkKLXsKLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwotCXVuc2lnbmVkIGxvbmcgcmVnID0gKHBpcGUgPT0gUElQRV9BID8gUEFMRVRURV9BIDogUEFMRVRURV9CKTsKLQl1MzIgKmFycmF5OwotCWludCBpOwotCi0JaWYgKCFpOTE1X3BpcGVfZW5hYmxlZChkZXYsIHBpcGUpKQotCQlyZXR1cm47Ci0KLQlpZiAocGlwZSA9PSBQSVBFX0EpCi0JCWFycmF5ID0gZGV2X3ByaXYtPnNhdmVfcGFsZXR0ZV9hOwotCWVsc2UKLQkJYXJyYXkgPSBkZXZfcHJpdi0+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+c2F2ZVNXRjFbaSs3XSk7Ci0JfQotCWZvciAoaSA9IDA7IGkgPCAzOyBpKyspCi0JCUk5MTVfV1JJVEUoU1dGMzAgKyAoaSA8PCAyKSwgZGV2X3ByaXYtPnNhdmVTV0YyW2ldKTsKLQotCWk5MTVfcmVzdG9yZV92Z2EoZGV2KTsKKwlpbnRlbF9vcHJlZ2lvbl9pbml0KGRldik7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTU0MSwxNyArODcsMTkgQEAKIAkgKi8KIAkuZHJpdmVyX2ZlYXR1cmVzID0KIAkgICAgRFJJVkVSX1VTRV9BR1AgfCBEUklWRVJfUkVRVUlSRV9BR1AgfCAvKiBEUklWRVJfVVNFX01UUlIgfCovCi0JICAgIERSSVZFUl9IQVZFX0lSUSB8IERSSVZFUl9JUlFfU0hBUkVEIHwgRFJJVkVSX0lSUV9WQkwgfAotCSAgICBEUklWRVJfSVJRX1ZCTDIsCisJICAgIERSSVZFUl9IQVZFX0lSUSB8IERSSVZFUl9JUlFfU0hBUkVEIHwgRFJJVkVSX0dFTSwKIAkubG9hZCA9IGk5MTVfZHJpdmVyX2xvYWQsCiAJLnVubG9hZCA9IGk5MTVfZHJpdmVyX3VubG9hZCwKKwkub3BlbiA9IGk5MTVfZHJpdmVyX29wZW4sCiAJLmxhc3RjbG9zZSA9IGk5MTVfZHJpdmVyX2xhc3RjbG9zZSwKIAkucHJlY2xvc2UgPSBpOTE1X2RyaXZlcl9wcmVjbG9zZSwKKwkucG9zdGNsb3NlID0gaTkxNV9kcml2ZXJfcG9zdGNsb3NlLAogCS5zdXNwZW5kID0gaTkxNV9zdXNwZW5kLAogCS5yZXN1bWUgPSBpOTE1X3Jlc3VtZSwKIAkuZGV2aWNlX2lzX2FncCA9IGk5MTVfZHJpdmVyX2RldmljZV9pc19hZ3AsCi0JLnZibGFua193YWl0ID0gaTkxNV9kcml2ZXJfdmJsYW5rX3dhaXQsCi0JLnZibGFua193YWl0MiA9IGk5MTVfZHJpdmVyX3ZibGFua193YWl0MiwKKwkuZ2V0X3ZibGFua19jb3VudGVyID0gaTkxNV9nZXRfdmJsYW5rX2NvdW50ZXIsCisJLmVuYWJsZV92YmxhbmsgPSBpOTE1X2VuYWJsZV92YmxhbmssCisJLmRpc2FibGVfdmJsYW5rID0gaTkxNV9kaXNhYmxlX3ZibGFuaywKIAkuaXJxX3ByZWluc3RhbGwgPSBpOTE1X2RyaXZlcl9pcnFfcHJlaW5zdGFsbCwKIAkuaXJxX3Bvc3RpbnN0YWxsID0gaTkxNV9kcml2ZXJfaXJxX3Bvc3RpbnN0YWxsLAogCS5pcnFfdW5pbnN0YWxsID0gaTkxNV9kcml2ZXJfaXJxX3VuaW5zdGFsbCwKQEAgLTU1OSw2ICsxMDcsMTAgQEAKIAkucmVjbGFpbV9idWZmZXJzID0gZHJtX2NvcmVfcmVjbGFpbV9idWZmZXJzLAogCS5nZXRfbWFwX29mcyA9IGRybV9jb3JlX2dldF9tYXBfb2ZzLAogCS5nZXRfcmVnX29mcyA9IGRybV9jb3JlX2dldF9yZWdfb2ZzLAorCS5wcm9jX2luaXQgPSBpOTE1X2dlbV9wcm9jX2luaXQsCisJLnByb2NfY2xlYW51cCA9IGk5MTVfZ2VtX3Byb2NfY2xlYW51cCwKKwkuZ2VtX2luaXRfb2JqZWN0ID0gaTkxNV9nZW1faW5pdF9vYmplY3QsCisJLmdlbV9mcmVlX29iamVjdCA9IGk5MTVfZ2VtX2ZyZWVfb2JqZWN0LAogCS5pb2N0bHMgPSBpOTE1X2lvY3RscywKIAkuZm9wcyA9IHsKIAkJIC5vd25lciA9IFRISVNfTU9EVUxFLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKaW5kZXggZDczMjZkOS4uZWFlNGVkMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCkBAIC0zMCw2ICszMCw4IEBACiAjaWZuZGVmIF9JOTE1X0RSVl9IXwogI2RlZmluZSBfSTkxNV9EUlZfSF8KIAorI2luY2x1ZGUgImk5MTVfcmVnLmgiCisKIC8qIEdlbmVyYWwgY3VzdG9taXphdGlvbjoKICAqLwogCkBAIC0zNyw3ICszOSwxMiBAQAogCiAjZGVmaW5lIERSSVZFUl9OQU1FCQkiaTkxNSIKICNkZWZpbmUgRFJJVkVSX0RFU0MJCSJJbnRlbCBHcmFwaGljcyIKLSNkZWZpbmUgRFJJVkVSX0RBVEUJCSIyMDA2MDExOSIKKyNkZWZpbmUgRFJJVkVSX0RBVEUJCSIyMDA4MDczMCIKKworZW51bSBwaXBlIHsKKwlQSVBFX0EgPSAwLAorCVBJUEVfQiwKK307CiAKIC8qIEludGVyZmFjZSBoaXN0b3J5OgogICoKQEAgLTUzLDE2ICs2MCwyMyBAQAogI2RlZmluZSBEUklWRVJfTUlOT1IJCTYKICNkZWZpbmUgRFJJVkVSX1BBVENITEVWRUwJMAogCisjZGVmaW5lIFdBVENIX0NPSEVSRU5DWQkwCisjZGVmaW5lIFdBVENIX0JVRgkwCisjZGVmaW5lIFdBVENIX0VYRUMJMAorI2RlZmluZSBXQVRDSF9MUlUJMAorI2RlZmluZSBXQVRDSF9SRUxPQwkwCisjZGVmaW5lIFdBVENIX0lOQUNUSVZFCTAKKyNkZWZpbmUgV0FUQ0hfUFdSSVRFCTAKKwogdHlwZWRlZiBzdHJ1Y3QgX2RybV9pOTE1X3JpbmdfYnVmZmVyIHsKIAlpbnQgdGFpbF9tYXNrOwotCXVuc2lnbmVkIGxvbmcgU3RhcnQ7Ci0JdW5zaWduZWQgbG9uZyBFbmQ7CiAJdW5zaWduZWQgbG9uZyBTaXplOwogCXU4ICp2aXJ0dWFsX3N0YXJ0OwogCWludCBoZWFkOwogCWludCB0YWlsOwogCWludCBzcGFjZTsKIAlkcm1fbG9jYWxfbWFwX3QgbWFwOworCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqcmluZ19vYmo7CiB9IGRybV9pOTE1X3JpbmdfYnVmZmVyX3Q7CiAKIHN0cnVjdCBtZW1fYmxvY2sgewpAQCAtNzYsMTMgKzkwLDI4IEBACiB0eXBlZGVmIHN0cnVjdCBfZHJtX2k5MTVfdmJsX3N3YXAgewogCXN0cnVjdCBsaXN0X2hlYWQgaGVhZDsKIAlkcm1fZHJhd2FibGVfdCBkcndfaWQ7Ci0JdW5zaWduZWQgaW50IHBpcGU7CisJdW5zaWduZWQgaW50IHBsYW5lOwogCXVuc2lnbmVkIGludCBzZXF1ZW5jZTsKIH0gZHJtX2k5MTVfdmJsX3N3YXBfdDsKIAorc3RydWN0IG9wcmVnaW9uX2hlYWRlcjsKK3N0cnVjdCBvcHJlZ2lvbl9hY3BpOworc3RydWN0IG9wcmVnaW9uX3N3c2NpOworc3RydWN0IG9wcmVnaW9uX2FzbGU7CisKK3N0cnVjdCBpbnRlbF9vcHJlZ2lvbiB7CisJc3RydWN0IG9wcmVnaW9uX2hlYWRlciAqaGVhZGVyOworCXN0cnVjdCBvcHJlZ2lvbl9hY3BpICphY3BpOworCXN0cnVjdCBvcHJlZ2lvbl9zd3NjaSAqc3dzY2k7CisJc3RydWN0IG9wcmVnaW9uX2FzbGUgKmFzbGU7CisJaW50IGVuYWJsZWQ7Cit9OworCiB0eXBlZGVmIHN0cnVjdCBkcm1faTkxNV9wcml2YXRlIHsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2OworCisJdm9pZCBfX2lvbWVtICpyZWdzOwogCWRybV9sb2NhbF9tYXBfdCAqc2FyZWE7Ci0JZHJtX2xvY2FsX21hcF90ICptbWlvX21hcDsKIAogCWRybV9pOTE1X3NhcmVhX3QgKnNhcmVhX3ByaXY7CiAJZHJtX2k5MTVfcmluZ19idWZmZXJfdCByaW5nOwpAQCAtOTAsMjAgKzExOSwyNSBAQAogCWRybV9kbWFfaGFuZGxlX3QgKnN0YXR1c19wYWdlX2RtYWg7CiAJdm9pZCAqaHdfc3RhdHVzX3BhZ2U7CiAJZG1hX2FkZHJfdCBkbWFfc3RhdHVzX3BhZ2U7Ci0JdW5zaWduZWQgbG9uZyBjb3VudGVyOworCXVpbnQzMl90IGNvdW50ZXI7CiAJdW5zaWduZWQgaW50IHN0YXR1c19nZnhfYWRkcjsKIAlkcm1fbG9jYWxfbWFwX3QgaHdzX21hcDsKKwlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKmh3c19vYmo7CiAKIAl1bnNpZ25lZCBpbnQgY3BwOwogCWludCBiYWNrX29mZnNldDsKIAlpbnQgZnJvbnRfb2Zmc2V0OwogCWludCBjdXJyZW50X3BhZ2U7CiAJaW50IHBhZ2VfZmxpcHBpbmc7Ci0JaW50IHVzZV9taV9iYXRjaGJ1ZmZlcl9zdGFydDsKIAogCXdhaXRfcXVldWVfaGVhZF90IGlycV9xdWV1ZTsKIAlhdG9taWNfdCBpcnFfcmVjZWl2ZWQ7Ci0JYXRvbWljX3QgaXJxX2VtaXR0ZWQ7CisJLyoqIFByb3RlY3RzIHVzZXJfaXJxX3JlZmNvdW50IGFuZCBpcnFfbWFza19yZWcgKi8KKwlzcGlubG9ja190IHVzZXJfaXJxX2xvY2s7CisJLyoqIFJlZmNvdW50IGZvciBpOTE1X3VzZXJfaXJxX2dldCgpIHZlcnN1cyBpOTE1X3VzZXJfaXJxX3B1dCgpLiAqLworCWludCB1c2VyX2lycV9yZWZjb3VudDsKKwkvKiogQ2FjaGVkIHZhbHVlIG9mIElNUiB0byBhdm9pZCByZWFkcyBpbiB1cGRhdGluZyB0aGUgYml0ZmllbGQgKi8KKwl1MzIgaXJxX21hc2tfcmVnOwogCiAJaW50IHRleF9scnVfbG9nX2dyYW51bGFyaXR5OwogCWludCBhbGxvd19iYXRjaGJ1ZmZlcjsKQEAgLTExNSw2ICsxNDksOCBAQAogCWRybV9pOTE1X3ZibF9zd2FwX3QgdmJsX3N3YXBzOwogCXVuc2lnbmVkIGludCBzd2Fwc19wZW5kaW5nOwogCisJc3RydWN0IGludGVsX29wcmVnaW9uIG9wcmVnaW9uOworCiAJLyogUmVnaXN0ZXIgc3RhdGUgKi8KIAl1OCBzYXZlTEJCOwogCXUzMiBzYXZlRFNQQUNOVFI7CkBAIC0xMzksNyArMTc1LDcgQEAKIAl1MzIgc2F2ZURTUEFTVFJJREU7CiAJdTMyIHNhdmVEU1BBU0laRTsKIAl1MzIgc2F2ZURTUEFQT1M7Ci0JdTMyIHNhdmVEU1BBQkFTRTsKKwl1MzIgc2F2ZURTUEFBRERSOwogCXUzMiBzYXZlRFNQQVNVUkY7CiAJdTMyIHNhdmVEU1BBVElMRU9GRjsKIAl1MzIgc2F2ZVBGSVRfUEdNX1JBVElPUzsKQEAgLTE2MCwyNCArMTk2LDI0IEBACiAJdTMyIHNhdmVEU1BCU1RSSURFOwogCXUzMiBzYXZlRFNQQlNJWkU7CiAJdTMyIHNhdmVEU1BCUE9TOwotCXUzMiBzYXZlRFNQQkJBU0U7CisJdTMyIHNhdmVEU1BCQUREUjsKIAl1MzIgc2F2ZURTUEJTVVJGOwogCXUzMiBzYXZlRFNQQlRJTEVPRkY7Ci0JdTMyIHNhdmVWQ0xLX0RJVklTT1JfVkdBMDsKLQl1MzIgc2F2ZVZDTEtfRElWSVNPUl9WR0ExOwotCXUzMiBzYXZlVkNMS19QT1NUX0RJVjsKKwl1MzIgc2F2ZVZHQTA7CisJdTMyIHNhdmVWR0ExOworCXUzMiBzYXZlVkdBX1BEOwogCXUzMiBzYXZlVkdBQ05UUkw7CiAJdTMyIHNhdmVBRFBBOwogCXUzMiBzYXZlTFZEUzsKLQl1MzIgc2F2ZUxWRFNQUF9PTjsKLQl1MzIgc2F2ZUxWRFNQUF9PRkY7CisJdTMyIHNhdmVQUF9PTl9ERUxBWVM7CisJdTMyIHNhdmVQUF9PRkZfREVMQVlTOwogCXUzMiBzYXZlRFZPQTsKIAl1MzIgc2F2ZURWT0I7CiAJdTMyIHNhdmVEVk9DOwogCXUzMiBzYXZlUFBfT047CiAJdTMyIHNhdmVQUF9PRkY7CiAJdTMyIHNhdmVQUF9DT05UUk9MOwotCXUzMiBzYXZlUFBfQ1lDTEU7CisJdTMyIHNhdmVQUF9ESVZJU09SOwogCXUzMiBzYXZlUEZJVF9DT05UUk9MOwogCXUzMiBzYXZlX3BhbGV0dGVfYVsyNTZdOwogCXUzMiBzYXZlX3BhbGV0dGVfYlsyNTZdOwpAQCAtMTkwLDcgKzIyNiw3IEBACiAJdTMyIHNhdmVJTVI7CiAJdTMyIHNhdmVDQUNIRV9NT0RFXzA7CiAJdTMyIHNhdmVEX1NUQVRFOwotCXUzMiBzYXZlRFNQQ0xLX0dBVEVfRDsKKwl1MzIgc2F2ZUNHXzJEX0RJUzsKIAl1MzIgc2F2ZU1JX0FSQl9TVEFURTsKIAl1MzIgc2F2ZVNXRjBbMTZdOwogCXUzMiBzYXZlU1dGMVsxNl07CkBAIC0yMDMsOCArMjM5LDE4MCBAQAogCXU4IHNhdmVEQUNNQVNLOwogCXU4IHNhdmVEQUNEQVRBWzI1NiozXTsgLyogMjU2IDMtYnl0ZSBjb2xvcnMgKi8KIAl1OCBzYXZlQ1JbMzddOworCisJc3RydWN0IHsKKwkJc3RydWN0IGRybV9tbSBndHRfc3BhY2U7CisKKwkJLyoqCisJCSAqIExpc3Qgb2Ygb2JqZWN0cyBjdXJyZW50bHkgaW52b2x2ZWQgaW4gcmVuZGVyaW5nIGZyb20gdGhlCisJCSAqIHJpbmdidWZmZXIuCisJCSAqCisJCSAqIEEgcmVmZXJlbmNlIGlzIGhlbGQgb24gdGhlIGJ1ZmZlciB3aGlsZSBvbiB0aGlzIGxpc3QuCisJCSAqLworCQlzdHJ1Y3QgbGlzdF9oZWFkIGFjdGl2ZV9saXN0OworCisJCS8qKgorCQkgKiBMaXN0IG9mIG9iamVjdHMgd2hpY2ggYXJlIG5vdCBpbiB0aGUgcmluZ2J1ZmZlciBidXQgd2hpY2gKKwkJICogc3RpbGwgaGF2ZSBhIHdyaXRlX2RvbWFpbiB3aGljaCBuZWVkcyB0byBiZSBmbHVzaGVkIGJlZm9yZQorCQkgKiB1bmJpbmRpbmcuCisJCSAqCisJCSAqIEEgcmVmZXJlbmNlIGlzIGhlbGQgb24gdGhlIGJ1ZmZlciB3aGlsZSBvbiB0aGlzIGxpc3QuCisJCSAqLworCQlzdHJ1Y3QgbGlzdF9oZWFkIGZsdXNoaW5nX2xpc3Q7CisKKwkJLyoqCisJCSAqIExSVSBsaXN0IG9mIG9iamVjdHMgd2hpY2ggYXJlIG5vdCBpbiB0aGUgcmluZ2J1ZmZlciBhbmQKKwkJICogYXJlIHJlYWR5IHRvIHVuYmluZCwgYnV0IGFyZSBzdGlsbCBpbiB0aGUgR1RULgorCQkgKgorCQkgKiBBIHJlZmVyZW5jZSBpcyBub3QgaGVsZCBvbiB0aGUgYnVmZmVyIHdoaWxlIG9uIHRoaXMgbGlzdCwKKwkJICogYXMgbWVyZWx5IGJlaW5nIEdUVC1ib3VuZCBzaG91bGRuJ3QgcHJldmVudCBpdHMgYmVpbmcKKwkJICogZnJlZWQsIGFuZCB3ZSdsbCBwdWxsIGl0IG9mZiB0aGUgbGlzdCBpbiB0aGUgZnJlZSBwYXRoLgorCQkgKi8KKwkJc3RydWN0IGxpc3RfaGVhZCBpbmFjdGl2ZV9saXN0OworCisJCS8qKgorCQkgKiBMaXN0IG9mIGJyZWFkY3J1bWJzIGFzc29jaWF0ZWQgd2l0aCBHUFUgcmVxdWVzdHMgY3VycmVudGx5CisJCSAqIG91dHN0YW5kaW5nLgorCQkgKi8KKwkJc3RydWN0IGxpc3RfaGVhZCByZXF1ZXN0X2xpc3Q7CisKKwkJLyoqCisJCSAqIFdlIGxlYXZlIHRoZSB1c2VyIElSUSBvZmYgYXMgbXVjaCBhcyBwb3NzaWJsZSwKKwkJICogYnV0IHRoaXMgbWVhbnMgdGhhdCByZXF1ZXN0cyB3aWxsIGZpbmlzaCBhbmQgbmV2ZXIKKwkJICogYmUgcmV0aXJlZCBvbmNlIHRoZSBzeXN0ZW0gZ29lcyBpZGxlLiBTZXQgYSB0aW1lciB0bworCQkgKiBmaXJlIHBlcmlvZGljYWxseSB3aGlsZSB0aGUgcmluZyBpcyBydW5uaW5nLiBXaGVuIGl0CisJCSAqIGZpcmVzLCBnbyByZXRpcmUgcmVxdWVzdHMuCisJCSAqLworCQlzdHJ1Y3QgZGVsYXllZF93b3JrIHJldGlyZV93b3JrOworCisJCS8qKiBXb3JrIHRhc2sgZm9yIHZibGFuay1yZWxhdGVkIHJpbmcgYWNjZXNzICovCisJCXN0cnVjdCB3b3JrX3N0cnVjdCB2Ymxhbmtfd29yazsKKworCQl1aW50MzJfdCBuZXh0X2dlbV9zZXFubzsKKworCQkvKioKKwkJICogV2FpdGluZyBzZXF1ZW5jZSBudW1iZXIsIGlmIGFueQorCQkgKi8KKwkJdWludDMyX3Qgd2FpdGluZ19nZW1fc2Vxbm87CisKKwkJLyoqCisJCSAqIExhc3Qgc2VxIHNlZW4gYXQgaXJxIHRpbWUKKwkJICovCisJCXVpbnQzMl90IGlycV9nZW1fc2Vxbm87CisKKwkJLyoqCisJCSAqIEZsYWcgaWYgdGhlIFggU2VydmVyLCBhbmQgdGh1cyBEUk0sIGlzIG5vdCBjdXJyZW50bHkgaW4KKwkJICogY29udHJvbCBvZiB0aGUgZGV2aWNlLgorCQkgKgorCQkgKiBUaGlzIGlzIHNldCBiZXR3ZWVuIExlYXZlVlQgYW5kIEVudGVyVlQuICBJdCBuZWVkcyB0byBiZQorCQkgKiByZXBsYWNlZCB3aXRoIGEgc2VtYXBob3JlLiAgSXQgYWxzbyBuZWVkcyB0byBiZQorCQkgKiB0cmFuc2l0aW9uZWQgYXdheSBmcm9tIGZvciBrZXJuZWwgbW9kZXNldHRpbmcuCisJCSAqLworCQlpbnQgc3VzcGVuZGVkOworCisJCS8qKgorCQkgKiBGbGFnIGlmIHRoZSBoYXJkd2FyZSBhcHBlYXJzIHRvIGJlIHdlZGdlZC4KKwkJICoKKwkJICogVGhpcyBpcyBzZXQgd2hlbiBhdHRlbXB0cyB0byBpZGxlIHRoZSBkZXZpY2UgdGltZW91dC4KKwkJICogSXQgcHJldmVudHMgY29tbWFuZCBzdWJtaXNzaW9uIGZyb20gb2NjdXJpbmcgYW5kIG1ha2VzCisJCSAqIGV2ZXJ5IHBlbmRpbmcgcmVxdWVzdCBmYWlsCisJCSAqLworCQlpbnQgd2VkZ2VkOworCisJCS8qKiBCaXQgNiBzd2l6emxpbmcgcmVxdWlyZWQgZm9yIFggdGlsaW5nICovCisJCXVpbnQzMl90IGJpdF82X3N3aXp6bGVfeDsKKwkJLyoqIEJpdCA2IHN3aXp6bGluZyByZXF1aXJlZCBmb3IgWSB0aWxpbmcgKi8KKwkJdWludDMyX3QgYml0XzZfc3dpenpsZV95OworCX0gbW07CiB9IGRybV9pOTE1X3ByaXZhdGVfdDsKIAorLyoqIGRyaXZlciBwcml2YXRlIHN0cnVjdHVyZSBhdHRhY2hlZCB0byBlYWNoIGRybV9nZW1fb2JqZWN0ICovCitzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCB7CisJc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmo7CisKKwkvKiogQ3VycmVudCBzcGFjZSBhbGxvY2F0ZWQgdG8gdGhpcyBvYmplY3QgaW4gdGhlIEdUVCwgaWYgYW55LiAqLworCXN0cnVjdCBkcm1fbW1fbm9kZSAqZ3R0X3NwYWNlOworCisJLyoqIFRoaXMgb2JqZWN0J3MgcGxhY2Ugb24gdGhlIGFjdGl2ZS9mbHVzaGluZy9pbmFjdGl2ZSBsaXN0cyAqLworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKKworCS8qKgorCSAqIFRoaXMgaXMgc2V0IGlmIHRoZSBvYmplY3QgaXMgb24gdGhlIGFjdGl2ZSBvciBmbHVzaGluZyBsaXN0cworCSAqIChoYXMgcGVuZGluZyByZW5kZXJpbmcpLCBhbmQgaXMgbm90IHNldCBpZiBpdCdzIG9uIGluYWN0aXZlIChyZWFkeQorCSAqIHRvIGJlIHVuYm91bmQpLgorCSAqLworCWludCBhY3RpdmU7CisKKwkvKioKKwkgKiBUaGlzIGlzIHNldCBpZiB0aGUgb2JqZWN0IGhhcyBiZWVuIHdyaXR0ZW4gdG8gc2luY2UgbGFzdCBib3VuZAorCSAqIHRvIHRoZSBHVFQKKwkgKi8KKwlpbnQgZGlydHk7CisKKwkvKiogQUdQIG1lbW9yeSBzdHJ1Y3R1cmUgZm9yIG91ciBHVFQgYmluZGluZy4gKi8KKwlEUk1fQUdQX01FTSAqYWdwX21lbTsKKworCXN0cnVjdCBwYWdlICoqcGFnZV9saXN0OworCisJLyoqCisJICogQ3VycmVudCBvZmZzZXQgb2YgdGhlIG9iamVjdCBpbiBHVFQgc3BhY2UuCisJICoKKwkgKiBUaGlzIGlzIHRoZSBzYW1lIGFzIGd0dF9zcGFjZS0+c3RhcnQKKwkgKi8KKwl1aW50MzJfdCBndHRfb2Zmc2V0OworCisJLyoqIEJvb2xlYW4gd2hldGhlciB0aGlzIG9iamVjdCBoYXMgYSB2YWxpZCBndHQgb2Zmc2V0LiAqLworCWludCBndHRfYm91bmQ7CisKKwkvKiogSG93IG1hbnkgdXNlcnMgaGF2ZSBwaW5uZWQgdGhpcyBvYmplY3QgaW4gR1RUIHNwYWNlICovCisJaW50IHBpbl9jb3VudDsKKworCS8qKiBCcmVhZGNydW1iIG9mIGxhc3QgcmVuZGVyaW5nIHRvIHRoZSBidWZmZXIuICovCisJdWludDMyX3QgbGFzdF9yZW5kZXJpbmdfc2Vxbm87CisKKwkvKiogQ3VycmVudCB0aWxpbmcgbW9kZSBmb3IgdGhlIG9iamVjdC4gKi8KKwl1aW50MzJfdCB0aWxpbmdfbW9kZTsKKworCS8qKiBBR1AgbWFwcGluZyB0eXBlIChBR1BfVVNFUl9NRU1PUlkgb3IgQUdQX1VTRVJfQ0FDSEVEX01FTU9SWSAqLworCXVpbnQzMl90IGFncF90eXBlOworCisJLyoqCisJICogRmxhZ2dpbmcgb2Ygd2hpY2ggaW5kaXZpZHVhbCBwYWdlcyBhcmUgdmFsaWQgaW4gR0VNX0RPTUFJTl9DUFUgd2hlbgorCSAqIEdFTV9ET01BSU5fQ1BVIGlzIG5vdCBpbiB0aGUgb2JqZWN0J3MgcmVhZCBkb21haW4uCisJICovCisJdWludDhfdCAqcGFnZV9jcHVfdmFsaWQ7Cit9OworCisvKioKKyAqIFJlcXVlc3QgcXVldWUgc3RydWN0dXJlLgorICoKKyAqIFRoZSByZXF1ZXN0IHF1ZXVlIGFsbG93cyB1cyB0byBub3RlIHNlcXVlbmNlIG51bWJlcnMgdGhhdCBoYXZlIGJlZW4gZW1pdHRlZAorICogYW5kIG1heSBiZSBhc3NvY2lhdGVkIHdpdGggYWN0aXZlIGJ1ZmZlcnMgdG8gYmUgcmV0aXJlZC4KKyAqCisgKiBCeSBrZWVwaW5nIHRoaXMgbGlzdCwgd2UgY2FuIGF2b2lkIGhhdmluZyB0byBkbyBxdWVzdGlvbmFibGUKKyAqIHNlcXVlbmNlLW51bWJlciBjb21wYXJpc29ucyBvbiBidWZmZXIgbGFzdF9yZW5kZXJpbmdfc2Vxbm9zLCBhbmQgYXNzb2NpYXRlCisgKiBhbiBlbWlzc2lvbiB0aW1lIHdpdGggc2Vxbm9zIGZvciB0cmFja2luZyBob3cgZmFyIGFoZWFkIG9mIHRoZSBHUFUgd2UgYXJlLgorICovCitzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3QgeworCS8qKiBHRU0gc2VxdWVuY2UgbnVtYmVyIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHJlcXVlc3QuICovCisJdWludDMyX3Qgc2Vxbm87CisKKwkvKiogVGltZSBhdCB3aGljaCB0aGlzIHJlcXVlc3Qgd2FzIGVtaXR0ZWQsIGluIGppZmZpZXMuICovCisJdW5zaWduZWQgbG9uZyBlbWl0dGVkX2ppZmZpZXM7CisKKwkvKiogQ2FjaGUgZG9tYWlucyB0aGF0IHdlcmUgZmx1c2hlZCBhdCB0aGUgc3RhcnQgb2YgdGhlIHJlcXVlc3QuICovCisJdWludDMyX3QgZmx1c2hfZG9tYWluczsKKworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKK307CisKK3N0cnVjdCBkcm1faTkxNV9maWxlX3ByaXZhdGUgeworCXN0cnVjdCB7CisJCXVpbnQzMl90IGxhc3RfZ2VtX3NlcW5vOworCQl1aW50MzJfdCBsYXN0X2dlbV90aHJvdHRsZV9zZXFubzsKKwl9IG1tOworfTsKKwogZXh0ZXJuIHN0cnVjdCBkcm1faW9jdGxfZGVzYyBpOTE1X2lvY3Rsc1tdOwogZXh0ZXJuIGludCBpOTE1X21heF9pb2N0bDsKIApAQCAtMjEyLDMxICs0MjAsNDIgQEAKIGV4dGVybiB2b2lkIGk5MTVfa2VybmVsX2xvc3RfY29udGV4dChzdHJ1Y3QgZHJtX2RldmljZSAqIGRldik7CiBleHRlcm4gaW50IGk5MTVfZHJpdmVyX2xvYWQoc3RydWN0IGRybV9kZXZpY2UgKiwgdW5zaWduZWQgbG9uZyBmbGFncyk7CiBleHRlcm4gaW50IGk5MTVfZHJpdmVyX3VubG9hZChzdHJ1Y3QgZHJtX2RldmljZSAqKTsKK2V4dGVybiBpbnQgaTkxNV9kcml2ZXJfb3BlbihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdik7CiBleHRlcm4gdm9pZCBpOTE1X2RyaXZlcl9sYXN0Y2xvc2Uoc3RydWN0IGRybV9kZXZpY2UgKiBkZXYpOwogZXh0ZXJuIHZvaWQgaTkxNV9kcml2ZXJfcHJlY2xvc2Uoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKIAkJCQkgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpOworZXh0ZXJuIHZvaWQgaTkxNV9kcml2ZXJfcG9zdGNsb3NlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCisJCQkJICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdik7CiBleHRlcm4gaW50IGk5MTVfZHJpdmVyX2RldmljZV9pc19hZ3Aoc3RydWN0IGRybV9kZXZpY2UgKiBkZXYpOwogZXh0ZXJuIGxvbmcgaTkxNV9jb21wYXRfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBjbWQsCiAJCQkgICAgICB1bnNpZ25lZCBsb25nIGFyZyk7CitleHRlcm4gaW50IGk5MTVfZW1pdF9ib3goc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJCSBzdHJ1Y3QgZHJtX2NsaXBfcmVjdCBfX3VzZXIgKmJveGVzLAorCQkJIGludCBpLCBpbnQgRFIxLCBpbnQgRFI0KTsKIAogLyogaTkxNV9pcnEuYyAqLwogZXh0ZXJuIGludCBpOTE1X2lycV9lbWl0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCiAJCQkgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpOwogZXh0ZXJuIGludCBpOTE1X2lycV93YWl0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCiAJCQkgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpOwordm9pZCBpOTE1X3VzZXJfaXJxX2dldChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKK3ZvaWQgaTkxNV91c2VyX2lycV9wdXQoc3RydWN0IGRybV9kZXZpY2UgKmRldik7CiAKLWV4dGVybiBpbnQgaTkxNV9kcml2ZXJfdmJsYW5rX3dhaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdW5zaWduZWQgaW50ICpzZXF1ZW5jZSk7Ci1leHRlcm4gaW50IGk5MTVfZHJpdmVyX3ZibGFua193YWl0MihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgKnNlcXVlbmNlKTsKK2V4dGVybiB2b2lkIGk5MTVfZ2VtX3ZibGFua193b3JrX2hhbmRsZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKIGV4dGVybiBpcnFyZXR1cm5fdCBpOTE1X2RyaXZlcl9pcnFfaGFuZGxlcihEUk1fSVJRX0FSR1MpOwogZXh0ZXJuIHZvaWQgaTkxNV9kcml2ZXJfaXJxX3ByZWluc3RhbGwoc3RydWN0IGRybV9kZXZpY2UgKiBkZXYpOwotZXh0ZXJuIHZvaWQgaTkxNV9kcml2ZXJfaXJxX3Bvc3RpbnN0YWxsKHN0cnVjdCBkcm1fZGV2aWNlICogZGV2KTsKK2V4dGVybiBpbnQgaTkxNV9kcml2ZXJfaXJxX3Bvc3RpbnN0YWxsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwogZXh0ZXJuIHZvaWQgaTkxNV9kcml2ZXJfaXJxX3VuaW5zdGFsbChzdHJ1Y3QgZHJtX2RldmljZSAqIGRldik7CiBleHRlcm4gaW50IGk5MTVfdmJsYW5rX3BpcGVfc2V0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCiAJCQkJc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpOwogZXh0ZXJuIGludCBpOTE1X3ZibGFua19waXBlX2dldChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAogCQkJCXN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KTsKK2V4dGVybiBpbnQgaTkxNV9lbmFibGVfdmJsYW5rKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGludCBjcnRjKTsKK2V4dGVybiB2b2lkIGk5MTVfZGlzYWJsZV92Ymxhbmsoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50IGNydGMpOworZXh0ZXJuIHUzMiBpOTE1X2dldF92YmxhbmtfY291bnRlcihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgY3J0Yyk7CiBleHRlcm4gaW50IGk5MTVfdmJsYW5rX3N3YXAoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKIAkJCSAgICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdik7CitleHRlcm4gdm9pZCBpOTE1X2VuYWJsZV9pcnEoZHJtX2k5MTVfcHJpdmF0ZV90ICpkZXZfcHJpdiwgdTMyIG1hc2spOwogCiAvKiBpOTE1X21lbS5jICovCiBleHRlcm4gaW50IGk5MTVfbWVtX2FsbG9jKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCkBAIC0yNTAsMTEgKzQ2OSw5OSBAQAogZXh0ZXJuIHZvaWQgaTkxNV9tZW1fdGFrZWRvd24oc3RydWN0IG1lbV9ibG9jayAqKmhlYXApOwogZXh0ZXJuIHZvaWQgaTkxNV9tZW1fcmVsZWFzZShzdHJ1Y3QgZHJtX2RldmljZSAqIGRldiwKIAkJCSAgICAgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYsIHN0cnVjdCBtZW1fYmxvY2sgKmhlYXApOworLyogaTkxNV9nZW0uYyAqLworaW50IGk5MTVfZ2VtX2luaXRfaW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKKwkJCXN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KTsKK2ludCBpOTE1X2dlbV9jcmVhdGVfaW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKKwkJCSAgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpOworaW50IGk5MTVfZ2VtX3ByZWFkX2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCisJCQkgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpOworaW50IGk5MTVfZ2VtX3B3cml0ZV9pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAorCQkJICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdik7CitpbnQgaTkxNV9nZW1fbW1hcF9pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAorCQkJc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpOworaW50IGk5MTVfZ2VtX3NldF9kb21haW5faW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKKwkJCSAgICAgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KTsKK2ludCBpOTE1X2dlbV9zd19maW5pc2hfaW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKKwkJCSAgICAgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpOworaW50IGk5MTVfZ2VtX2V4ZWNidWZmZXIoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKKwkJCXN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KTsKK2ludCBpOTE1X2dlbV9waW5faW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKKwkJICAgICAgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KTsKK2ludCBpOTE1X2dlbV91bnBpbl9pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAorCQkJIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KTsKK2ludCBpOTE1X2dlbV9idXN5X2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCisJCQlzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdik7CitpbnQgaTkxNV9nZW1fdGhyb3R0bGVfaW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKKwkJCSAgICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdik7CitpbnQgaTkxNV9nZW1fZW50ZXJ2dF9pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAorCQkJICAgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpOworaW50IGk5MTVfZ2VtX2xlYXZldnRfaW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKKwkJCSAgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KTsKK2ludCBpOTE1X2dlbV9zZXRfdGlsaW5nKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCisJCQlzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdik7CitpbnQgaTkxNV9nZW1fZ2V0X3RpbGluZyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAorCQkJc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpOwordm9pZCBpOTE1X2dlbV9sb2FkKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOworaW50IGk5MTVfZ2VtX3Byb2NfaW5pdChzdHJ1Y3QgZHJtX21pbm9yICptaW5vcik7Cit2b2lkIGk5MTVfZ2VtX3Byb2NfY2xlYW51cChzdHJ1Y3QgZHJtX21pbm9yICptaW5vcik7CitpbnQgaTkxNV9nZW1faW5pdF9vYmplY3Qoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmopOwordm9pZCBpOTE1X2dlbV9mcmVlX29iamVjdChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaik7CitpbnQgaTkxNV9nZW1fb2JqZWN0X3BpbihzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiwgdWludDMyX3QgYWxpZ25tZW50KTsKK3ZvaWQgaTkxNV9nZW1fb2JqZWN0X3VucGluKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqKTsKK3ZvaWQgaTkxNV9nZW1fbGFzdGNsb3NlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwordWludDMyX3QgaTkxNV9nZXRfZ2VtX3NlcW5vKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwordm9pZCBpOTE1X2dlbV9yZXRpcmVfcmVxdWVzdHMoc3RydWN0IGRybV9kZXZpY2UgKmRldik7Cit2b2lkIGk5MTVfZ2VtX3JldGlyZV93b3JrX2hhbmRsZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKK3ZvaWQgaTkxNV9nZW1fY2xmbHVzaF9vYmplY3Qoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmopOwogCi0jZGVmaW5lIEk5MTVfUkVBRChyZWcpICAgICAgICAgIERSTV9SRUFEMzIoZGV2X3ByaXYtPm1taW9fbWFwLCAocmVnKSkKLSNkZWZpbmUgSTkxNV9XUklURShyZWcsdmFsKSAgICAgRFJNX1dSSVRFMzIoZGV2X3ByaXYtPm1taW9fbWFwLCAocmVnKSwgKHZhbCkpCi0jZGVmaW5lIEk5MTVfUkVBRDE2KHJlZykJRFJNX1JFQUQxNihkZXZfcHJpdi0+bW1pb19tYXAsIChyZWcpKQotI2RlZmluZSBJOTE1X1dSSVRFMTYocmVnLHZhbCkJRFJNX1dSSVRFMTYoZGV2X3ByaXYtPm1taW9fbWFwLCAocmVnKSwgKHZhbCkpCisvKiBpOTE1X2dlbV90aWxpbmcuYyAqLwordm9pZCBpOTE1X2dlbV9kZXRlY3RfYml0XzZfc3dpenpsZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKKworLyogaTkxNV9nZW1fZGVidWcuYyAqLwordm9pZCBpOTE1X2dlbV9kdW1wX29iamVjdChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiwgaW50IGxlbiwKKwkJCSAgY29uc3QgY2hhciAqd2hlcmUsIHVpbnQzMl90IG1hcmspOworI2lmIFdBVENIX0lOQUNUSVZFCit2b2lkIGk5MTVfdmVyaWZ5X2luYWN0aXZlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGNoYXIgKmZpbGUsIGludCBsaW5lKTsKKyNlbHNlCisjZGVmaW5lIGk5MTVfdmVyaWZ5X2luYWN0aXZlKGRldiwgZmlsZSwgbGluZSkKKyNlbmRpZgordm9pZCBpOTE1X2dlbV9vYmplY3RfY2hlY2tfY29oZXJlbmN5KHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqLCBpbnQgaGFuZGxlKTsKK3ZvaWQgaTkxNV9nZW1fZHVtcF9vYmplY3Qoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmosIGludCBsZW4sCisJCQkgIGNvbnN0IGNoYXIgKndoZXJlLCB1aW50MzJfdCBtYXJrKTsKK3ZvaWQgaTkxNV9kdW1wX2xydShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBjb25zdCBjaGFyICp3aGVyZSk7CisKKy8qIGk5MTVfc3VzcGVuZC5jICovCitleHRlcm4gaW50IGk5MTVfc2F2ZV9zdGF0ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKK2V4dGVybiBpbnQgaTkxNV9yZXN0b3JlX3N0YXRlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOworCisvKiBpOTE1X3N1c3BlbmQuYyAqLworZXh0ZXJuIGludCBpOTE1X3NhdmVfc3RhdGUoc3RydWN0IGRybV9kZXZpY2UgKmRldik7CitleHRlcm4gaW50IGk5MTVfcmVzdG9yZV9zdGF0ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKKworLyogaTkxNV9vcHJlZ2lvbi5jICovCitleHRlcm4gaW50IGludGVsX29wcmVnaW9uX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldik7CitleHRlcm4gdm9pZCBpbnRlbF9vcHJlZ2lvbl9mcmVlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOworZXh0ZXJuIHZvaWQgb3ByZWdpb25fYXNsZV9pbnRyKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOworZXh0ZXJuIHZvaWQgb3ByZWdpb25fZW5hYmxlX2FzbGUoc3RydWN0IGRybV9kZXZpY2UgKmRldik7CisKKy8qKgorICogTG9jayB0ZXN0IGZvciB3aGVuIGl0J3MganVzdCBmb3Igc3luY2hyb25pemF0aW9uIG9mIHJpbmcgYWNjZXNzLgorICoKKyAqIEluIHRoYXQgY2FzZSwgd2UgZG9uJ3QgbmVlZCB0byBkbyBpdCB3aGVuIEdFTSBpcyBpbml0aWFsaXplZCBhcyBub2JvZHkgZWxzZQorICogaGFzIGFjY2VzcyB0byB0aGUgcmluZy4KKyAqLworI2RlZmluZSBSSU5HX0xPQ0tfVEVTVF9XSVRIX1JFVFVSTihkZXYsIGZpbGVfcHJpdikgZG8gewkJCVwKKwlpZiAoKChkcm1faTkxNV9wcml2YXRlX3QgKilkZXYtPmRldl9wcml2YXRlKS0+cmluZy5yaW5nX29iaiA9PSBOVUxMKSBcCisJCUxPQ0tfVEVTVF9XSVRIX1JFVFVSTihkZXYsIGZpbGVfcHJpdik7CQkJXAorfSB3aGlsZSAoMCkKKworI2RlZmluZSBJOTE1X1JFQUQocmVnKSAgICAgICAgICByZWFkbChkZXZfcHJpdi0+cmVncyArIChyZWcpKQorI2RlZmluZSBJOTE1X1dSSVRFKHJlZywgdmFsKSAgICAgd3JpdGVsKHZhbCwgZGV2X3ByaXYtPnJlZ3MgKyAocmVnKSkKKyNkZWZpbmUgSTkxNV9SRUFEMTYocmVnKQlyZWFkdyhkZXZfcHJpdi0+cmVncyArIChyZWcpKQorI2RlZmluZSBJOTE1X1dSSVRFMTYocmVnLCB2YWwpCXdyaXRlbCh2YWwsIGRldl9wcml2LT5yZWdzICsgKHJlZykpCisjZGVmaW5lIEk5MTVfUkVBRDgocmVnKQkJcmVhZGIoZGV2X3ByaXYtPnJlZ3MgKyAocmVnKSkKKyNkZWZpbmUgSTkxNV9XUklURTgocmVnLCB2YWwpCXdyaXRlYih2YWwsIGRldl9wcml2LT5yZWdzICsgKHJlZykpCiAKICNkZWZpbmUgSTkxNV9WRVJCT1NFIDAKIApAQCAtMjg0LDgxNiArNTkxLDI5IEBACiAJaWYgKEk5MTVfVkVSQk9TRSkgRFJNX0RFQlVHKCJBRFZBTkNFX0xQX1JJTkcgJXhcbiIsIG91dHJpbmcpOwlcCiAJZGV2X3ByaXYtPnJpbmcudGFpbCA9IG91dHJpbmc7CQkJCQlcCiAJZGV2X3ByaXYtPnJpbmcuc3BhY2UgLT0gb3V0Y291bnQgKiA0OwkJCQlcCi0JSTkxNV9XUklURShMUF9SSU5HICsgUklOR19UQUlMLCBvdXRyaW5nKTsJCQlcCisJSTkxNV9XUklURShQUkIwX1RBSUwsIG91dHJpbmcpOwkJCVwKIH0gd2hpbGUoMCkKIAotZXh0ZXJuIGludCBpOTE1X3dhaXRfcmluZyhzdHJ1Y3QgZHJtX2RldmljZSAqIGRldiwgaW50IG4sIGNvbnN0IGNoYXIgKmNhbGxlcik7Ci0KLS8qIEV4dGVuZGVkIGNvbmZpZyBzcGFjZSAqLwotI2RlZmluZSBMQkIgMHhmNAotCi0vKiBWR0Egc3R1ZmYgKi8KLQotI2RlZmluZSBWR0FfU1QwMV9NREEgMHgzYmEKLSNkZWZpbmUgVkdBX1NUMDFfQ0dBIDB4M2RhCi0KLSNkZWZpbmUgVkdBX01TUl9XUklURSAweDNjMgotI2RlZmluZSBWR0FfTVNSX1JFQUQgMHgzY2MKLSNkZWZpbmUgICBWR0FfTVNSX01FTV9FTiAoMTw8MSkKLSNkZWZpbmUgICBWR0FfTVNSX0NHQV9NT0RFICgxPDwwKQotCi0jZGVmaW5lIFZHQV9TUl9JTkRFWCAweDNjNAotI2RlZmluZSBWR0FfU1JfREFUQSAweDNjNQotCi0jZGVmaW5lIFZHQV9BUl9JTkRFWCAweDNjMAotI2RlZmluZSAgIFZHQV9BUl9WSURfRU4gKDE8PDUpCi0jZGVmaW5lIFZHQV9BUl9EQVRBX1dSSVRFIDB4M2MwCi0jZGVmaW5lIFZHQV9BUl9EQVRBX1JFQUQgMHgzYzEKLQotI2RlZmluZSBWR0FfR1JfSU5ERVggMHgzY2UKLSNkZWZpbmUgVkdBX0dSX0RBVEEgMHgzY2YKLS8qIEdSMDUgKi8KLSNkZWZpbmUgICBWR0FfR1JfTUVNX1JFQURfTU9ERV9TSElGVCAzCi0jZGVmaW5lICAgICBWR0FfR1JfTUVNX1JFQURfTU9ERV9QTEFORSAxCi0vKiBHUjA2ICovCi0jZGVmaW5lICAgVkdBX0dSX01FTV9NT0RFX01BU0sgMHhjCi0jZGVmaW5lICAgVkdBX0dSX01FTV9NT0RFX1NISUZUIDIKLSNkZWZpbmUgICBWR0FfR1JfTUVNX0EwMDAwX0FGRkZGIDAKLSNkZWZpbmUgICBWR0FfR1JfTUVNX0EwMDAwX0JGRkZGIDEKLSNkZWZpbmUgICBWR0FfR1JfTUVNX0IwMDAwX0I3RkZGIDIKLSNkZWZpbmUgICBWR0FfR1JfTUVNX0IwMDAwX0JGRkZGIDMKLQotI2RlZmluZSBWR0FfREFDTUFTSyAweDNjNgotI2RlZmluZSBWR0FfREFDUlggMHgzYzcKLSNkZWZpbmUgVkdBX0RBQ1dYIDB4M2M4Ci0jZGVmaW5lIFZHQV9EQUNEQVRBIDB4M2M5Ci0KLSNkZWZpbmUgVkdBX0NSX0lOREVYX01EQSAweDNiNAotI2RlZmluZSBWR0FfQ1JfREFUQV9NREEgMHgzYjUKLSNkZWZpbmUgVkdBX0NSX0lOREVYX0NHQSAweDNkNAotI2RlZmluZSBWR0FfQ1JfREFUQV9DR0EgMHgzZDUKLQotI2RlZmluZSBHRlhfT1BfVVNFUl9JTlRFUlJVUFQJCSgoMDw8MjkpfCgyPDwyMykpCi0jZGVmaW5lIEdGWF9PUF9CUkVBS1BPSU5UX0lOVEVSUlVQVAkoKDA8PDI5KXwoMTw8MjMpKQotI2RlZmluZSBDTURfUkVQT1JUX0hFQUQJCQkoNzw8MjMpCi0jZGVmaW5lIENNRF9TVE9SRV9EV09SRF9JRFgJCSgoMHgyMTw8MjMpIHwgMHgxKQotI2RlZmluZSBDTURfT1BfQkFUQ0hfQlVGRkVSICAoKDB4MDw8MjkpfCgweDMwPDwyMyl8MHgxKQotCi0jZGVmaW5lIElOU1RfUEFSU0VSX0NMSUVOVCAgIDB4MDAwMDAwMDAKLSNkZWZpbmUgSU5TVF9PUF9GTFVTSCAgICAgICAgMHgwMjAwMDAwMAotI2RlZmluZSBJTlNUX0ZMVVNIX01BUF9DQUNIRSAweDAwMDAwMDAxCi0KLSNkZWZpbmUgQkIxX1NUQVJUX0FERFJfTUFTSyAgICh+MHg3KQotI2RlZmluZSBCQjFfUFJPVEVDVEVEICAgICAgICAgKDE8PDApCi0jZGVmaW5lIEJCMV9VTlBST1RFQ1RFRCAgICAgICAoMDw8MCkKLSNkZWZpbmUgQkIyX0VORF9BRERSX01BU0sgICAgICh+MHg3KQotCi0vKiBGcmFtZWJ1ZmZlciBjb21wcmVzc2lvbiAqLwotI2RlZmluZSBGQkNfQ0ZCX0JBU0UJCTB4MDMyMDAgLyogNGsgcGFnZSBhbGlnbmVkICovCi0jZGVmaW5lIEZCQ19MTF9CQVNFCQkweDAzMjA0IC8qIDRrIHBhZ2UgYWxpZ25lZCAqLwotI2RlZmluZSBGQkNfQ09OVFJPTAkJMHgwMzIwOAotI2RlZmluZSAgIEZCQ19DVExfRU4JCSgxPDwzMSkKLSNkZWZpbmUgICBGQkNfQ1RMX1BFUklPRElDCSgxPDwzMCkKLSNkZWZpbmUgICBGQkNfQ1RMX0lOVEVSVkFMX1NISUZUICgxNikKLSNkZWZpbmUgICBGQkNfQ1RMX1VOQ09NUFJFU1NJQkxFICgxPDwxNCkKLSNkZWZpbmUgICBGQkNfQ1RMX1NUUklERV9TSElGVAkoNSkKLSNkZWZpbmUgICBGQkNfQ1RMX0ZFTkNFTk8JKDE8PDApCi0jZGVmaW5lIEZCQ19DT01NQU5ECQkweDAzMjBjCi0jZGVmaW5lICAgRkJDX0NNRF9DT01QUkVTUwkoMTw8MCkKLSNkZWZpbmUgRkJDX1NUQVRVUwkJMHgwMzIxMAotI2RlZmluZSAgIEZCQ19TVEFUX0NPTVBSRVNTSU5HCSgxPDwzMSkKLSNkZWZpbmUgICBGQkNfU1RBVF9DT01QUkVTU0VECSgxPDwzMCkKLSNkZWZpbmUgICBGQkNfU1RBVF9NT0RJRklFRAkoMTw8MjkpCi0jZGVmaW5lICAgRkJDX1NUQVRfQ1VSUkVOVF9MSU5FCSgxPDwwKQotI2RlZmluZSBGQkNfQ09OVFJPTDIJCTB4MDMyMTQKLSNkZWZpbmUgICBGQkNfQ1RMX0ZFTkNFX0RCTAkoMDw8NCkKLSNkZWZpbmUgICBGQkNfQ1RMX0lETEVfSU1NCSgwPDwyKQotI2RlZmluZSAgIEZCQ19DVExfSURMRV9GVUxMCSgxPDwyKQotI2RlZmluZSAgIEZCQ19DVExfSURMRV9MSU5FCSgyPDwyKQotI2RlZmluZSAgIEZCQ19DVExfSURMRV9ERUJVRwkoMzw8MikKLSNkZWZpbmUgICBGQkNfQ1RMX0NQVV9GRU5DRQkoMTw8MSkKLSNkZWZpbmUgICBGQkNfQ1RMX1BMQU5FQQkoMDw8MCkKLSNkZWZpbmUgICBGQkNfQ1RMX1BMQU5FQgkoMTw8MCkKLSNkZWZpbmUgRkJDX0ZFTkNFX09GRgkJMHgwMzIxYgotCi0jZGVmaW5lIEZCQ19MTF9TSVpFCQkoMTUzNikKLSNkZWZpbmUgRkJDX0xMX1BBRAkJKDMyKQotCi0vKiBJbnRlcnJ1cHQgYml0czoKLSAqLwotI2RlZmluZSBVU0VSX0lOVF9GTEFHICAgICgxPDwxKQotI2RlZmluZSBWU1lOQ19QSVBFQl9GTEFHICgxPDw1KQotI2RlZmluZSBWU1lOQ19QSVBFQV9GTEFHICgxPDw3KQotI2RlZmluZSBIV0JfT09NX0ZMQUcgICAgICgxPDwxMykgLyogYmlubmVyIG91dCBvZiBtZW1vcnkgKi8KLQotI2RlZmluZSBJOTE1UkVHX0hXU1RBTQkJMHgwMjA5OAotI2RlZmluZSBJOTE1UkVHX0lOVF9JREVOVElUWV9SCTB4MDIwYTQKLSNkZWZpbmUgSTkxNVJFR19JTlRfTUFTS19SCTB4MDIwYTgKLSNkZWZpbmUgSTkxNVJFR19JTlRfRU5BQkxFX1IJMHgwMjBhMAotCi0jZGVmaW5lIEk5MTVSRUdfUElQRUFTVEFUCTB4NzAwMjQKLSNkZWZpbmUgSTkxNVJFR19QSVBFQlNUQVQJMHg3MTAyNAotCi0jZGVmaW5lIEk5MTVfVkJMQU5LX0lOVEVSUlVQVF9FTkFCTEUJKDFVTDw8MTcpCi0jZGVmaW5lIEk5MTVfVkJMQU5LX0NMRUFSCQkoMVVMPDwxKQotCi0jZGVmaW5lIFNSWF9JTkRFWAkJMHgzYzQKLSNkZWZpbmUgU1JYX0RBVEEJCTB4M2M1Ci0jZGVmaW5lIFNSMDEJCQkxCi0jZGVmaW5lIFNSMDFfU0NSRUVOX09GRgkJKDE8PDUpCi0KLSNkZWZpbmUgUFBDUgkJCTB4NjEyMDQKLSNkZWZpbmUgUFBDUl9PTgkJCSgxPDwwKQotCi0jZGVmaW5lIERWT0IJCQkweDYxMTQwCi0jZGVmaW5lIERWT0JfT04JCQkoMTw8MzEpCi0jZGVmaW5lIERWT0MJCQkweDYxMTYwCi0jZGVmaW5lIERWT0NfT04JCQkoMTw8MzEpCi0jZGVmaW5lIExWRFMJCQkweDYxMTgwCi0jZGVmaW5lIExWRFNfT04JCQkoMTw8MzEpCi0KLSNkZWZpbmUgQURQQQkJCTB4NjExMDAKLSNkZWZpbmUgQURQQV9EUE1TX01BU0sJCSh+KDM8PDEwKSkKLSNkZWZpbmUgQURQQV9EUE1TX09OCQkoMDw8MTApCi0jZGVmaW5lIEFEUEFfRFBNU19TVVNQRU5ECSgxPDwxMCkKLSNkZWZpbmUgQURQQV9EUE1TX1NUQU5EQlkJKDI8PDEwKQotI2RlZmluZSBBRFBBX0RQTVNfT0ZGCQkoMzw8MTApCi0KLSNkZWZpbmUgTk9QSUQgICAgICAgICAgICAgICAgICAgMHgyMDk0Ci0jZGVmaW5lIExQX1JJTkcJCQkweDIwMzAKLSNkZWZpbmUgSFBfUklORwkJCTB4MjA0MAotLyogVGhlIGJpbm5lciBoYXMgaXRzIG93biByaW5nIGJ1ZmZlcjoKLSAqLwotI2RlZmluZSBIV0JfUklORwkJMHgyNDAwCi0KLSNkZWZpbmUgUklOR19UQUlMCQkweDAwCi0jZGVmaW5lIFRBSUxfQUREUgkJMHgwMDFGRkZGOAotI2RlZmluZSBSSU5HX0hFQUQJCTB4MDQKLSNkZWZpbmUgSEVBRF9XUkFQX0NPVU5UCQkweEZGRTAwMDAwCi0jZGVmaW5lIEhFQURfV1JBUF9PTkUJCTB4MDAyMDAwMDAKLSNkZWZpbmUgSEVBRF9BRERSCQkweDAwMUZGRkZDCi0jZGVmaW5lIFJJTkdfU1RBUlQJCTB4MDgKLSNkZWZpbmUgU1RBUlRfQUREUgkJMHgweEZGRkZGMDAwCi0jZGVmaW5lIFJJTkdfTEVOCQkweDBDCi0jZGVmaW5lIFJJTkdfTlJfUEFHRVMJCTB4MDAxRkYwMDAKLSNkZWZpbmUgUklOR19SRVBPUlRfTUFTSwkweDAwMDAwMDA2Ci0jZGVmaW5lIFJJTkdfUkVQT1JUXzY0SwkJMHgwMDAwMDAwMgotI2RlZmluZSBSSU5HX1JFUE9SVF8xMjhLCTB4MDAwMDAwMDQKLSNkZWZpbmUgUklOR19OT19SRVBPUlQJCTB4MDAwMDAwMDAKLSNkZWZpbmUgUklOR19WQUxJRF9NQVNLCQkweDAwMDAwMDAxCi0jZGVmaW5lIFJJTkdfVkFMSUQJCTB4MDAwMDAwMDEKLSNkZWZpbmUgUklOR19JTlZBTElECQkweDAwMDAwMDAwCi0KLS8qIEluc3RydWN0aW9uIHBhcnNlciBlcnJvciByZWc6Ci0gKi8KLSNkZWZpbmUgSVBFSVIJCQkweDIwODgKLQotLyogU2NyYXRjaCBwYWQgZGVidWcgMCByZWc6Ci0gKi8KLSNkZWZpbmUgU0NQRDAJCQkweDIwOWMKLQotLyogRXJyb3Igc3RhdHVzIHJlZzoKLSAqLwotI2RlZmluZSBFU1IJCQkweDIwYjgKLQotLyogU2Vjb25kYXJ5IERNQSBmZXRjaCBhZGRyZXNzIGRlYnVnIHJlZzoKLSAqLwotI2RlZmluZSBETUFfRkFERF9TCQkweDIwZDQKLQotLyogTWVtb3J5IEludGVyZmFjZSBBcmJpdHJhdGlvbiBTdGF0ZQotICovCi0jZGVmaW5lIE1JX0FSQl9TVEFURQkJMHgyMGU0Ci0KLS8qIENhY2hlIG1vZGUgMCByZWcuCi0gKiAgLSBNYW5pcHVsYXRpbmcgcmVuZGVyIGNhY2hlIGJlaGF2aW91ciBpcyBjZW50cmFsCi0gKiAgICB0byB0aGUgY29uY2VwdCBvZiB6b25lIHJlbmRlcmluZywgdHVuaW5nIHRoaXMgcmVnIGNhbiBoZWxwIGF2b2lkCi0gKiAgICB1bm5lY2Vzc2FyeSByZW5kZXIgY2FjaGUgcmVhZHMgYW5kIGV2ZW4gd3JpdGVzIChmb3Igei9zdGVuY2lsKQotICogICAgYXQgYmVnaW5uaW5nIGFuZCBlbmQgb2Ygc2NlbmUuCisvKioKKyAqIFJlYWRzIGEgZHdvcmQgb3V0IG9mIHRoZSBzdGF0dXMgcGFnZSwgd2hpY2ggaXMgd3JpdHRlbiB0byBmcm9tIHRoZSBjb21tYW5kCisgKiBxdWV1ZSBieSBhdXRvbWF0aWMgdXBkYXRlcywgTUlfUkVQT1JUX0hFQUQsIE1JX1NUT1JFX0RBVEFfSU5ERVgsIG9yCisgKiBNSV9TVE9SRV9EQVRBX0lNTS4KICAqCi0gKiAtIFRvIGNoYW5nZSBhIGJpdCwgd3JpdGUgdG8gdGhpcyByZWcgd2l0aCBhIG1hc2sgYml0IHNldCBhbmQgdGhlCi0gKiBiaXQgb2YgaW50ZXJlc3QgZWl0aGVyIHNldCBvciBjbGVhcmVkLiAgRUc6IChCSVQ8PDE2KSB8IEJJVCB0byBzZXQuCisgKiBUaGUgZm9sbG93aW5nIGR3b3JkcyBoYXZlIGEgcmVzZXJ2ZWQgbWVhbmluZzoKKyAqIDB4MDA6IElTUiBjb3B5LCB1cGRhdGVkIHdoZW4gYW4gSVNSIGJpdCBub3Qgc2V0IGluIHRoZSBIV1NUQU0gY2hhbmdlcy4KKyAqIDB4MDQ6IHJpbmcgMCBoZWFkIHBvaW50ZXIKKyAqIDB4MDU6IHJpbmcgMSBoZWFkIHBvaW50ZXIgKDkxNS1jbGFzcykKKyAqIDB4MDY6IHJpbmcgMiBoZWFkIHBvaW50ZXIgKDkxNS1jbGFzcykKKyAqIDB4MTAtMHgxYjogQ29udGV4dCBzdGF0dXMgRFdvcmRzIChHTTQ1KQorICogMHgxZjogTGFzdCB3cml0dGVuIHN0YXR1cyBvZmZzZXQuIChHTTQ1KQorICoKKyAqIFRoZSBhcmVhIGZyb20gZHdvcmQgMHgyMCB0byAweDNmZiBpcyBhdmFpbGFibGUgZm9yIGRyaXZlciB1c2FnZS4KICAqLwotI2RlZmluZSBDYWNoZV9Nb2RlXzAJCTB4MjEyMAotI2RlZmluZSBDQUNIRV9NT0RFXzAJCTB4MjEyMAotI2RlZmluZSBDTTBfTUFTS19TSElGVCAgICAgICAgICAxNgotI2RlZmluZSBDTTBfSVpfT1BUX0RJU0FCTEUgICAgICAoMTw8NikKLSNkZWZpbmUgQ00wX1pSX09QVF9ESVNBQkxFICAgICAgKDE8PDUpCi0jZGVmaW5lIENNMF9ERVBUSF9FVklDVF9ESVNBQkxFICgxPDw0KQotI2RlZmluZSBDTTBfQ09MT1JfRVZJQ1RfRElTQUJMRSAoMTw8MykKLSNkZWZpbmUgQ00wX0RFUFRIX1dSSVRFX0RJU0FCTEUgKDE8PDEpCi0jZGVmaW5lIENNMF9SQ19PUF9GTFVTSF9ESVNBQkxFICgxPDwwKQotCi0KLS8qIEdyYXBoaWNzIGZsdXNoIGNvbnRyb2wuICBBIENQVSB3cml0ZSBmbHVzaGVzIHRoZSBHV0Igb2YgYWxsIHdyaXRlcy4KLSAqIFRoZSBkYXRhIGlzIGRpc2NhcmRlZC4KLSAqLwotI2RlZmluZSBHRlhfRkxTSF9DTlRMCQkweDIxNzAKLQotLyogQmlubmVyIGNvbnRyb2wuICBEZWZpbmVzIHRoZSBsb2NhdGlvbiBvZiB0aGUgYmluIHBvaW50ZXIgbGlzdDoKLSAqLwotI2RlZmluZSBCSU5DVEwJCQkweDI0MjAKLSNkZWZpbmUgQkNfTUFTSwkJCSgxIDw8IDkpCi0KLS8qIEJpbm5lZCBzY2VuZSBpbmZvLgotICovCi0jZGVmaW5lIEJJTlNDRU5FCQkweDI0MjgKLSNkZWZpbmUgQlNfT1BfTE9BRAkJKDEgPDwgOCkKLSNkZWZpbmUgQlNfTUFTSwkJCSgxIDw8IDIyKQotCi0vKiBCaW4gY29tbWFuZCBwYXJzZXIgZGVidWcgcmVnOgotICovCi0jZGVmaW5lIEJDUEQJCQkweDI0ODAKLQotLyogQmluIG1lbW9yeSBjb250cm9sIGRlYnVnIHJlZzoKLSAqLwotI2RlZmluZSBCTUNECQkJMHgyNDg0Ci0KLS8qIEJpbiBkYXRhIGNhY2hlIGRlYnVnIHJlZzoKLSAqLwotI2RlZmluZSBCRENECQkJMHgyNDg4Ci0KLS8qIEJpbm5lciBwb2ludGVyIGNhY2hlIGRlYnVnIHJlZzoKLSAqLwotI2RlZmluZSBCUENECQkJMHgyNDhjCi0KLS8qIEJpbm5lciBzY3JhdGNoIHBhZCBkZWJ1ZyByZWc6Ci0gKi8KLSNkZWZpbmUgQklOU0tQRAkJCTB4MjRmMAotCi0vKiBIV0Igc2NyYXRjaCBwYWQgZGVidWcgcmVnOgotICovCi0jZGVmaW5lIEhXQlNLUEQJCQkweDI0ZjQKLQotLyogQmlubmVyIG1lbW9yeSBwb29sIHJlZzoKLSAqLwotI2RlZmluZSBCTVBfQlVGRkVSCQkweDI0MzAKLSNkZWZpbmUgQk1QX1BBR0VfU0laRV80SwkoMCA8PCAxMCkKLSNkZWZpbmUgQk1QX0JVRkZFUl9TSVpFX1NISUZUCTEKLSNkZWZpbmUgQk1QX0VOQUJMRQkJKDEgPDwgMCkKLQotLyogR2V0L3B1dCBtZW1vcnkgZnJvbSB0aGUgYmlubmVyIG1lbW9yeSBwb29sOgotICovCi0jZGVmaW5lIEJNUF9HRVQJCQkweDI0MzgKLSNkZWZpbmUgQk1QX1BVVAkJCTB4MjQ0MAotI2RlZmluZSBCTVBfT0ZGU0VUX1NISUZUCTUKLQotLyogM0Qgc3RhdGUgcGFja2V0czoKLSAqLwotI2RlZmluZSBHRlhfT1BfUkFTVEVSX1JVTEVTICAgICgoMHgzPDwyOSl8KDB4Nzw8MjQpKQotCi0jZGVmaW5lIEdGWF9PUF9TQ0lTU09SICAgICAgICAgKCgweDM8PDI5KXwoMHgxYzw8MjQpfCgweDEwPDwxOSkpCi0jZGVmaW5lIFNDX1VQREFURV9TQ0lTU09SICAgICAgICgweDE8PDEpCi0jZGVmaW5lIFNDX0VOQUJMRV9NQVNLICAgICAgICAgICgweDE8PDApCi0jZGVmaW5lIFNDX0VOQUJMRSAgICAgICAgICAgICAgICgweDE8PDApCi0KLSNkZWZpbmUgR0ZYX09QX0xPQURfSU5ESVJFQ1QgICAoKDB4Mzw8MjkpfCgweDFkPDwyNCl8KDB4Nzw8MTYpKQotCi0jZGVmaW5lIEdGWF9PUF9TQ0lTU09SX0lORk8gICAgKCgweDM8PDI5KXwoMHgxZDw8MjQpfCgweDgxPDwxNil8KDB4MSkpCi0jZGVmaW5lIFNDSV9ZTUlOX01BU0sgICAgICAoMHhmZmZmPDwxNikKLSNkZWZpbmUgU0NJX1hNSU5fTUFTSyAgICAgICgweGZmZmY8PDApCi0jZGVmaW5lIFNDSV9ZTUFYX01BU0sgICAgICAoMHhmZmZmPDwxNikKLSNkZWZpbmUgU0NJX1hNQVhfTUFTSyAgICAgICgweGZmZmY8PDApCi0KLSNkZWZpbmUgR0ZYX09QX1NDSVNTT1JfRU5BQkxFCSAoKDB4Mzw8MjkpfCgweDFjPDwyNCl8KDB4MTA8PDE5KSkKLSNkZWZpbmUgR0ZYX09QX1NDSVNTT1JfUkVDVAkgKCgweDM8PDI5KXwoMHgxZDw8MjQpfCgweDgxPDwxNil8MSkKLSNkZWZpbmUgR0ZYX09QX0NPTE9SX0ZBQ1RPUiAgICAgICgoMHgzPDwyOSl8KDB4MWQ8PDI0KXwoMHgxPDwxNil8MHgwKQotI2RlZmluZSBHRlhfT1BfU1RJUFBMRSAgICAgICAgICAgKCgweDM8PDI5KXwoMHgxZDw8MjQpfCgweDgzPDwxNikpCi0jZGVmaW5lIEdGWF9PUF9NQVBfSU5GTyAgICAgICAgICAoKDB4Mzw8MjkpfCgweDFkPDwyNCl8MHg0KQotI2RlZmluZSBHRlhfT1BfREVTVEJVRkZFUl9WQVJTICAgKCgweDM8PDI5KXwoMHgxZDw8MjQpfCgweDg1PDwxNil8MHgwKQotI2RlZmluZSBHRlhfT1BfRFJBV1JFQ1RfSU5GTyAgICAgKCgweDM8PDI5KXwoMHgxZDw8MjQpfCgweDgwPDwxNil8KDB4MykpCi0KLSNkZWZpbmUgR0ZYX09QX0RSQVdSRUNUX0lORk9fSTk2NSAoKDB4NzkwMDw8MTYpfDB4MikKLQotI2RlZmluZSBTUkNfQ09QWV9CTFRfQ01EICAgICAgICAgICAgICAgICgoMjw8MjkpfCgweDQzPDwyMil8NCkKLSNkZWZpbmUgWFlfU1JDX0NPUFlfQkxUX0NNRAkJKCgyPDwyOSl8KDB4NTM8PDIyKXw2KQotI2RlZmluZSBYWV9TUkNfQ09QWV9CTFRfV1JJVEVfQUxQSEEJKDE8PDIxKQotI2RlZmluZSBYWV9TUkNfQ09QWV9CTFRfV1JJVEVfUkdCCSgxPDwyMCkKLSNkZWZpbmUgWFlfU1JDX0NPUFlfQkxUX1NSQ19USUxFRAkoMTw8MTUpCi0jZGVmaW5lIFhZX1NSQ19DT1BZX0JMVF9EU1RfVElMRUQJKDE8PDExKQotCi0jZGVmaW5lIE1JX0JBVENIX0JVRkZFUgkJKCgweDMwPDwyMyl8MSkKLSNkZWZpbmUgTUlfQkFUQ0hfQlVGRkVSX1NUQVJUCSgweDMxPDwyMykKLSNkZWZpbmUgTUlfQkFUQ0hfQlVGRkVSX0VORAkoMHhBPDwyMykKLSNkZWZpbmUgTUlfQkFUQ0hfTk9OX1NFQ1VSRQkoMSkKLSNkZWZpbmUgTUlfQkFUQ0hfTk9OX1NFQ1VSRV9JOTY1ICgxPDw4KQotCi0jZGVmaW5lIE1JX1dBSVRfRk9SX0VWRU5UICAgICAgICgoMHgzPDwyMykpCi0jZGVmaW5lIE1JX1dBSVRfRk9SX1BMQU5FX0JfRkxJUCAgICAgICgxPDw2KQotI2RlZmluZSBNSV9XQUlUX0ZPUl9QTEFORV9BX0ZMSVAgICAgICAoMTw8MikKLSNkZWZpbmUgTUlfV0FJVF9GT1JfUExBTkVfQV9TQ0FOTElORVMgKDE8PDEpCi0KLSNkZWZpbmUgTUlfTE9BRF9TQ0FOX0xJTkVTX0lOQ0wgICgoMHgxMjw8MjMpKQotCi0jZGVmaW5lIENNRF9PUF9ESVNQTEFZQlVGRkVSX0lORk8gKCgweDA8PDI5KXwoMHgxNDw8MjMpfDIpCi0jZGVmaW5lIEFTWU5DX0ZMSVAgICAgICAgICAgICAgICAgKDE8PDIyKQotI2RlZmluZSBESVNQTEFZX1BMQU5FX0EgICAgICAgICAgICgwPDwyMCkKLSNkZWZpbmUgRElTUExBWV9QTEFORV9CICAgICAgICAgICAoMTw8MjApCi0KLS8qIERpc3BsYXkgcmVncyAqLwotI2RlZmluZSBEU1BBQ05UUiAgICAgICAgICAgICAgICAweDcwMTgwCi0jZGVmaW5lIERTUEJDTlRSICAgICAgICAgICAgICAgIDB4NzExODAKLSNkZWZpbmUgRElTUFBMQU5FX1NFTF9QSVBFX01BU0sgICAgICAgICAgICAgICAgICgxPDwyNCkKLQotLyogRGVmaW5lIHRoZSByZWdpb24gb2YgaW50ZXJlc3QgZm9yIHRoZSBiaW5uZXI6Ci0gKi8KLSNkZWZpbmUgQ01EX09QX0JJTl9DT05UUk9MCSAoKDB4Mzw8MjkpfCgweDFkPDwyNCl8KDB4ODQ8PDE2KXw0KQotCi0jZGVmaW5lIENNRF9PUF9ERVNUQlVGRkVSX0lORk8JICgoMHgzPDwyOSl8KDB4MWQ8PDI0KXwoMHg4ZTw8MTYpfDEpCi0KLSNkZWZpbmUgQ01EX01JX0ZMVVNIICAgICAgICAgKDB4MDQgPDwgMjMpCi0jZGVmaW5lIE1JX05PX1dSSVRFX0ZMVVNIICAgICgxIDw8IDIpCi0jZGVmaW5lIE1JX1JFQURfRkxVU0ggICAgICAgICgxIDw8IDApCi0jZGVmaW5lIE1JX0VYRV9GTFVTSCAgICAgICAgICgxIDw8IDEpCi0jZGVmaW5lIE1JX0VORF9TQ0VORSAgICAgICAgICgxIDw8IDQpIC8qIGZsdXNoIGJpbm5lciBhbmQgaW5jciBzY2VuZSBjb3VudCAqLwotI2RlZmluZSBNSV9TQ0VORV9DT1VOVCAgICAgICAoMSA8PCAzKSAvKiBqdXN0IGluY3JlbWVudCBzY2VuZSBjb3VudCAqLwotCi0jZGVmaW5lIEJSRUFEQ1JVTUJfQklUUyAzMQotI2RlZmluZSBCUkVBRENSVU1CX01BU0sgKCgxVSA8PCBCUkVBRENSVU1CX0JJVFMpIC0gMSkKLQotI2RlZmluZSBSRUFEX0JSRUFEQ1JVTUIoZGV2X3ByaXYpICAoKCh2b2xhdGlsZSB1MzIqKShkZXZfcHJpdi0+aHdfc3RhdHVzX3BhZ2UpKVs1XSkKICNkZWZpbmUgUkVBRF9IV1NQKGRldl9wcml2LCByZWcpICAoKCh2b2xhdGlsZSB1MzIqKShkZXZfcHJpdi0+aHdfc3RhdHVzX3BhZ2UpKVtyZWddKQorI2RlZmluZSBSRUFEX0JSRUFEQ1JVTUIoZGV2X3ByaXYpIFJFQURfSFdTUChkZXZfcHJpdiwgNSkKKyNkZWZpbmUgSTkxNV9HRU1fSFdTX0lOREVYCQkweDIwCiAKLSNkZWZpbmUgQkxDX1BXTV9DVEwJCTB4NjEyNTQKLSNkZWZpbmUgQkFDS0xJR0hUX01PRFVMQVRJT05fRlJFUV9TSElGVAkJKDE3KQotCi0jZGVmaW5lIEJMQ19QV01fQ1RMMgkJMHg2MTI1MAotLyoqCi0gKiBUaGlzIGlzIHRoZSBtb3N0IHNpZ25pZmljYW50IDE1IGJpdHMgb2YgdGhlIG51bWJlciBvZiBiYWNrbGlnaHQgY3ljbGVzIGluIGEKLSAqIGNvbXBsZXRlIGN5Y2xlIG9mIHRoZSBtb2R1bGF0ZWQgYmFja2xpZ2h0IGNvbnRyb2wuCi0gKgotICogVGhlIGFjdHVhbCB2YWx1ZSBpcyB0aGlzIGZpZWxkIG11bHRpcGxpZWQgYnkgdHdvLgotICovCi0jZGVmaW5lIEJBQ0tMSUdIVF9NT0RVTEFUSU9OX0ZSRVFfTUFTSwkJKDB4N2ZmZiA8PCAxNykKLSNkZWZpbmUgQkxNX0xFR0FDWV9NT0RFCQkJCSgxIDw8IDE2KQotLyoqCi0gKiBUaGlzIGlzIHRoZSBudW1iZXIgb2YgY3ljbGVzIG91dCBvZiB0aGUgYmFja2xpZ2h0IG1vZHVsYXRpb24gY3ljbGUgZm9yIHdoaWNoCi0gKiB0aGUgYmFja2xpZ2h0IGlzIG9uLgotICoKLSAqIFRoaXMgZmllbGQgbXVzdCBiZSBubyBncmVhdGVyIHRoYW4gdGhlIG51bWJlciBvZiBjeWNsZXMgaW4gdGhlIGNvbXBsZXRlCi0gKiBiYWNrbGlnaHQgbW9kdWxhdGlvbiBjeWNsZS4KLSAqLwotI2RlZmluZSBCQUNLTElHSFRfRFVUWV9DWUNMRV9TSElGVAkJKDApCi0jZGVmaW5lIEJBQ0tMSUdIVF9EVVRZX0NZQ0xFX01BU0sJCSgweGZmZmYpCi0KLSNkZWZpbmUgSTkxNV9HQ0ZHQwkJCTB4ZjAKLSNkZWZpbmUgSTkxNV9MT1dfRlJFUVVFTkNZX0VOQUJMRQkJKDEgPDwgNykKLSNkZWZpbmUgSTkxNV9ESVNQTEFZX0NMT0NLXzE5MF8yMDBfTUhaCQkoMCA8PCA0KQotI2RlZmluZSBJOTE1X0RJU1BMQVlfQ0xPQ0tfMzMzX01IWgkJKDQgPDwgNCkKLSNkZWZpbmUgSTkxNV9ESVNQTEFZX0NMT0NLX01BU0sJCQkoNyA8PCA0KQotCi0jZGVmaW5lIEk4NTVfSFBMTENDCQkJMHhjMAotI2RlZmluZSBJODU1X0NMT0NLX0NPTlRST0xfTUFTSwkJCSgzIDw8IDApCi0jZGVmaW5lIEk4NTVfQ0xPQ0tfMTMzXzIwMAkJCSgwIDw8IDApCi0jZGVmaW5lIEk4NTVfQ0xPQ0tfMTAwXzIwMAkJCSgxIDw8IDApCi0jZGVmaW5lIEk4NTVfQ0xPQ0tfMTAwXzEzMwkJCSgyIDw8IDApCi0jZGVmaW5lIEk4NTVfQ0xPQ0tfMTY2XzI1MAkJCSgzIDw8IDApCi0KLS8qIHAzMTcsIDMxOQotICovCi0jZGVmaW5lIFZDTEsyX1ZDT19NICAgICAgICAweDYwMDggLyogdHJlYXQgYXMgMTYgYml0PyAoaW5jbHVkZXMgbXNicykgKi8KLSNkZWZpbmUgVkNMSzJfVkNPX04gICAgICAgIDB4NjAwYQotI2RlZmluZSBWQ0xLMl9WQ09fRElWX1NFTCAgMHg2MDEyCi0KLSNkZWZpbmUgVkNMS19ESVZJU09SX1ZHQTAgICAweDYwMDAKLSNkZWZpbmUgVkNMS19ESVZJU09SX1ZHQTEgICAweDYwMDQKLSNkZWZpbmUgVkNMS19QT1NUX0RJVgkgICAgMHg2MDEwCi0vKiogU2VsZWN0cyBhIHBvc3QgZGl2aXNvciBvZiA0IGluc3RlYWQgb2YgMi4gKi8KLSMgZGVmaW5lIFZHQTFfUERfUDJfRElWXzQJKDEgPDwgMTUpCi0vKiogT3ZlcnJpZGVzIHRoZSBwMiBwb3N0IGRpdmlzb3IgZmllbGQgKi8KLSMgZGVmaW5lIFZHQTFfUERfUDFfRElWXzIJKDEgPDwgMTMpCi0jIGRlZmluZSBWR0ExX1BEX1AxX1NISUZUCTgKLS8qKiBQMSB2YWx1ZSBpcyAyIGdyZWF0ZXIgdGhhbiB0aGlzIGZpZWxkICovCi0jIGRlZmluZSBWR0ExX1BEX1AxX01BU0sJKDB4MWYgPDwgOCkKLS8qKiBTZWxlY3RzIGEgcG9zdCBkaXZpc29yIG9mIDQgaW5zdGVhZCBvZiAyLiAqLwotIyBkZWZpbmUgVkdBMF9QRF9QMl9ESVZfNAkoMSA8PCA3KQotLyoqIE92ZXJyaWRlcyB0aGUgcDIgcG9zdCBkaXZpc29yIGZpZWxkICovCi0jIGRlZmluZSBWR0EwX1BEX1AxX0RJVl8yCSgxIDw8IDUpCi0jIGRlZmluZSBWR0EwX1BEX1AxX1NISUZUCTAKLS8qKiBQMSB2YWx1ZSBpcyAyIGdyZWF0ZXIgdGhhbiB0aGlzIGZpZWxkICovCi0jIGRlZmluZSBWR0EwX1BEX1AxX01BU0sJKDB4MWYgPDwgMCkKLQotLyogUENJIEQgc3RhdGUgY29udHJvbCByZWdpc3RlciAqLwotI2RlZmluZSBEX1NUQVRFCQkweDYxMDQKLSNkZWZpbmUgRFNQQ0xLX0dBVEVfRAkweDYyMDAKLQotLyogSTgzMCBDUlRDIHJlZ2lzdGVycyAqLwotI2RlZmluZSBIVE9UQUxfQQkweDYwMDAwCi0jZGVmaW5lIEhCTEFOS19BCTB4NjAwMDQKLSNkZWZpbmUgSFNZTkNfQQkJMHg2MDAwOAotI2RlZmluZSBWVE9UQUxfQQkweDYwMDBjCi0jZGVmaW5lIFZCTEFOS19BCTB4NjAwMTAKLSNkZWZpbmUgVlNZTkNfQQkJMHg2MDAxNAotI2RlZmluZSBQSVBFQVNSQwkweDYwMDFjCi0jZGVmaW5lIEJDTFJQQVRfQQkweDYwMDIwCi0jZGVmaW5lIFZTWU5DU0hJRlRfQQkweDYwMDI4Ci0KLSNkZWZpbmUgSFRPVEFMX0IJMHg2MTAwMAotI2RlZmluZSBIQkxBTktfQgkweDYxMDA0Ci0jZGVmaW5lIEhTWU5DX0IJCTB4NjEwMDgKLSNkZWZpbmUgVlRPVEFMX0IJMHg2MTAwYwotI2RlZmluZSBWQkxBTktfQgkweDYxMDEwCi0jZGVmaW5lIFZTWU5DX0IJCTB4NjEwMTQKLSNkZWZpbmUgUElQRUJTUkMJMHg2MTAxYwotI2RlZmluZSBCQ0xSUEFUX0IJMHg2MTAyMAotI2RlZmluZSBWU1lOQ1NISUZUX0IJMHg2MTAyOAotCi0jZGVmaW5lIFBQX1NUQVRVUwkweDYxMjAwCi0jIGRlZmluZSBQUF9PTgkJCQkJKDEgPDwgMzEpCi0vKioKLSAqIEluZGljYXRlcyB0aGF0IGFsbCBkZXBlbmRlbmNpZXMgb2YgdGhlIHBhbmVsIGFyZSBvbjoKLSAqCi0gKiAtIFBMTCBlbmFibGVkCi0gKiAtIHBpcGUgZW5hYmxlZAotICogLSBMVkRTL0RWT0IvRFZPQyBvbgotICovCi0jIGRlZmluZSBQUF9SRUFEWQkJCQkoMSA8PCAzMCkKLSMgZGVmaW5lIFBQX1NFUVVFTkNFX05PTkUJCQkoMCA8PCAyOCkKLSMgZGVmaW5lIFBQX1NFUVVFTkNFX09OCQkJCSgxIDw8IDI4KQotIyBkZWZpbmUgUFBfU0VRVUVOQ0VfT0ZGCQkJKDIgPDwgMjgpCi0jIGRlZmluZSBQUF9TRVFVRU5DRV9NQVNLCQkJMHgzMDAwMDAwMAotI2RlZmluZSBQUF9DT05UUk9MCTB4NjEyMDQKLSMgZGVmaW5lIFBPV0VSX1RBUkdFVF9PTgkJCSgxIDw8IDApCi0KLSNkZWZpbmUgTFZEU1BQX09OICAgICAgIDB4NjEyMDgKLSNkZWZpbmUgTFZEU1BQX09GRiAgICAgIDB4NjEyMGMKLSNkZWZpbmUgUFBfQ1lDTEUgICAgICAgIDB4NjEyMTAKLQotI2RlZmluZSBQRklUX0NPTlRST0wJMHg2MTIzMAotIyBkZWZpbmUgUEZJVF9FTkFCTEUJCQkJKDEgPDwgMzEpCi0jIGRlZmluZSBQRklUX1BJUEVfTUFTSwkJCQkoMyA8PCAyOSkKLSMgZGVmaW5lIFBGSVRfUElQRV9TSElGVAkJCTI5Ci0jIGRlZmluZSBWRVJUX0lOVEVSUF9ESVNBQkxFCQkJKDAgPDwgMTApCi0jIGRlZmluZSBWRVJUX0lOVEVSUF9CSUxJTkVBUgkJCSgxIDw8IDEwKQotIyBkZWZpbmUgVkVSVF9JTlRFUlBfTUFTSwkJCSgzIDw8IDEwKQotIyBkZWZpbmUgVkVSVF9BVVRPX1NDQUxFCQkJKDEgPDwgOSkKLSMgZGVmaW5lIEhPUklaX0lOVEVSUF9ESVNBQkxFCQkJKDAgPDwgNikKLSMgZGVmaW5lIEhPUklaX0lOVEVSUF9CSUxJTkVBUgkJCSgxIDw8IDYpCi0jIGRlZmluZSBIT1JJWl9JTlRFUlBfTUFTSwkJCSgzIDw8IDYpCi0jIGRlZmluZSBIT1JJWl9BVVRPX1NDQUxFCQkJKDEgPDwgNSkKLSMgZGVmaW5lIFBBTkVMXzhUTzZfRElUSEVSX0VOQUJMRQkJKDEgPDwgMykKLQotI2RlZmluZSBQRklUX1BHTV9SQVRJT1MJMHg2MTIzNAotIyBkZWZpbmUgUEZJVF9WRVJUX1NDQUxFX01BU0sJCQkweGZmZjAwMDAwCi0jIGRlZmluZSBQRklUX0hPUklaX1NDQUxFX01BU0sJCQkweDAwMDBmZmYwCi0KLSNkZWZpbmUgUEZJVF9BVVRPX1JBVElPUwkweDYxMjM4Ci0KLQotI2RlZmluZSBEUExMX0EJCTB4MDYwMTQKLSNkZWZpbmUgRFBMTF9CCQkweDA2MDE4Ci0jIGRlZmluZSBEUExMX1ZDT19FTkFCTEUJCQkoMSA8PCAzMSkKLSMgZGVmaW5lIERQTExfRFZPX0hJR0hfU1BFRUQJCQkoMSA8PCAzMCkKLSMgZGVmaW5lIERQTExfU1lOQ0xPQ0tfRU5BQkxFCQkJKDEgPDwgMjkpCi0jIGRlZmluZSBEUExMX1ZHQV9NT0RFX0RJUwkJCSgxIDw8IDI4KQotIyBkZWZpbmUgRFBMTEJfTU9ERV9EQUNfU0VSSUFMCQkJKDEgPDwgMjYpIC8qIGk5MTUgKi8KLSMgZGVmaW5lIERQTExCX01PREVfTFZEUwkJCSgyIDw8IDI2KSAvKiBpOTE1ICovCi0jIGRlZmluZSBEUExMX01PREVfTUFTSwkJCQkoMyA8PCAyNikKLSMgZGVmaW5lIERQTExfREFDX1NFUklBTF9QMl9DTE9DS19ESVZfMTAJKDAgPDwgMjQpIC8qIGk5MTUgKi8KLSMgZGVmaW5lIERQTExfREFDX1NFUklBTF9QMl9DTE9DS19ESVZfNQkJKDEgPDwgMjQpIC8qIGk5MTUgKi8KLSMgZGVmaW5lIERQTExCX0xWRFNfUDJfQ0xPQ0tfRElWXzE0CQkoMCA8PCAyNCkgLyogaTkxNSAqLwotIyBkZWZpbmUgRFBMTEJfTFZEU19QMl9DTE9DS19ESVZfNwkJKDEgPDwgMjQpIC8qIGk5MTUgKi8KLSMgZGVmaW5lIERQTExfUDJfQ0xPQ0tfRElWX01BU0sJCQkweDAzMDAwMDAwIC8qIGk5MTUgKi8KLSMgZGVmaW5lIERQTExfRlBBMDFfUDFfUE9TVF9ESVZfTUFTSwkJMHgwMGZmMDAwMCAvKiBpOTE1ICovCi0vKioKLSAqICBUaGUgaTgzMCBnZW5lcmF0aW9uLCBpbiBEQUMvc2VyaWFsIG1vZGUsIGRlZmluZXMgcDEgYXMgdHdvIHBsdXMgdGhpcwotICogYml0ZmllbGQsIG9yIGp1c3QgMiBpZiBQTExfUDFfRElWSURFX0JZX1RXTyBpcyBzZXQuCi0gKi8KLSMgZGVmaW5lIERQTExfRlBBMDFfUDFfUE9TVF9ESVZfTUFTS19JODMwCTB4MDAxZjAwMDAKLS8qKgotICogVGhlIGk4MzAgZ2VuZXJhdGlvbiwgaW4gTFZEUyBtb2RlLCBkZWZpbmVzIFAxIGFzIHRoZSBiaXQgbnVtYmVyIHNldCB3aXRoaW4KLSAqIHRoaXMgZmllbGQgKG9ubHkgb25lIGJpdCBtYXkgYmUgc2V0KS4KLSAqLwotIyBkZWZpbmUgRFBMTF9GUEEwMV9QMV9QT1NUX0RJVl9NQVNLX0k4MzBfTFZEUwkweDAwM2YwMDAwCi0jIGRlZmluZSBEUExMX0ZQQTAxX1AxX1BPU1RfRElWX1NISUZUCQkxNgotIyBkZWZpbmUgUExMX1AyX0RJVklERV9CWV80CQkJKDEgPDwgMjMpIC8qIGk4MzAsIHJlcXVpcmVkIGluIERWTyBub24tZ2FuZyAqLwotIyBkZWZpbmUgUExMX1AxX0RJVklERV9CWV9UV08JCQkoMSA8PCAyMSkgLyogaTgzMCAqLwotIyBkZWZpbmUgUExMX1JFRl9JTlBVVF9EUkVGQ0xLCQkJKDAgPDwgMTMpCi0jIGRlZmluZSBQTExfUkVGX0lOUFVUX1RWQ0xLSU5BCQkJKDEgPDwgMTMpIC8qIGk4MzAgKi8KLSMgZGVmaW5lIFBMTF9SRUZfSU5QVVRfVFZDTEtJTkJDCQkoMiA8PCAxMykgLyogU0RWTyBUVkNMS0lOICovCi0jIGRlZmluZSBQTExCX1JFRl9JTlBVVF9TUFJFQURTUEVDVFJVTUlOCSgzIDw8IDEzKQotIyBkZWZpbmUgUExMX1JFRl9JTlBVVF9NQVNLCQkJKDMgPDwgMTMpCi0jIGRlZmluZSBQTExfTE9BRF9QVUxTRV9QSEFTRV9TSElGVAkJOQotLyoKLSAqIFBhcmFsbGVsIHRvIFNlcmlhbCBMb2FkIFB1bHNlIHBoYXNlIHNlbGVjdGlvbi4KLSAqIFNlbGVjdHMgdGhlIHBoYXNlIGZvciB0aGUgMTBYIERQTEwgY2xvY2sgZm9yIHRoZSBQQ0llCi0gKiBkaWdpdGFsIGRpc3BsYXkgcG9ydC4gVGhlIHJhbmdlIGlzIDQgdG8gMTM7IDEwIG9yIG1vcmUKLSAqIGlzIGp1c3QgYSBmbGlwIGRlbGF5LiBUaGUgZGVmYXVsdCBpcyA2Ci0gKi8KLSMgZGVmaW5lIFBMTF9MT0FEX1BVTFNFX1BIQVNFX01BU0sJCSgweGYgPDwgUExMX0xPQURfUFVMU0VfUEhBU0VfU0hJRlQpCi0jIGRlZmluZSBESVNQTEFZX1JBVEVfU0VMRUNUX0ZQQTEJCSgxIDw8IDgpCi0KLS8qKgotICogU0RWTyBtdWx0aXBsaWVyIGZvciA5NDVHL0dNLiBOb3QgdXNlZCBvbiA5NjUuCi0gKgotICogXHNhIERQTExfTURfVURJX01VTFRJUExJRVJfTUFTSwotICovCi0jIGRlZmluZSBTRFZPX01VTFRJUExJRVJfTUFTSwkJCTB4MDAwMDAwZmYKLSMgZGVmaW5lIFNEVk9fTVVMVElQTElFUl9TSElGVF9ISVJFUwkJNAotIyBkZWZpbmUgU0RWT19NVUxUSVBMSUVSX1NISUZUX1ZHQQkJMAotCi0vKiogQGRlZmdyb3VwIERQTExfTUQKLSAqIEB7Ci0gKi8KLS8qKiBQaXBlIEEgU0RWTy9VREkgY2xvY2sgbXVsdGlwbGllci9kaXZpZGVyIHJlZ2lzdGVyIGZvciBHOTY1LiAqLwotI2RlZmluZSBEUExMX0FfTUQJCTB4MDYwMWMKLS8qKiBQaXBlIEIgU0RWTy9VREkgY2xvY2sgbXVsdGlwbGllci9kaXZpZGVyIHJlZ2lzdGVyIGZvciBHOTY1LiAqLwotI2RlZmluZSBEUExMX0JfTUQJCTB4MDYwMjAKLS8qKgotICogVURJIHBpeGVsIGRpdmlkZXIsIGNvbnRyb2xsaW5nIGhvdyBtYW55IHBpeGVscyBhcmUgc3R1ZmZlZCBpbnRvIGEgcGFja2V0LgotICoKLSAqIFZhbHVlIGlzIHBpeGVscyBtaW51cyAxLiAgTXVzdCBiZSBzZXQgdG8gMSBwaXhlbCBmb3IgU0RWTy4KLSAqLwotIyBkZWZpbmUgRFBMTF9NRF9VRElfRElWSURFUl9NQVNLCQkweDNmMDAwMDAwCi0jIGRlZmluZSBEUExMX01EX1VESV9ESVZJREVSX1NISUZUCQkyNAotLyoqIFVESSBwaXhlbCBkaXZpZGVyIGZvciBWR0EsIHNhbWUgYXMgRFBMTF9NRF9VRElfRElWSURFUl9NQVNLLiAqLwotIyBkZWZpbmUgRFBMTF9NRF9WR0FfVURJX0RJVklERVJfTUFTSwkJMHgwMDNmMDAwMAotIyBkZWZpbmUgRFBMTF9NRF9WR0FfVURJX0RJVklERVJfU0hJRlQJCTE2Ci0vKioKLSAqIFNEVk8vVURJIHBpeGVsIG11bHRpcGxpZXIuCi0gKgotICogU0RWTyByZXF1aXJlcyB0aGF0IHRoZSBidXMgY2xvY2sgcmF0ZSBiZSBiZXR3ZWVuIDEgYW5kIDIgR2h6LCBhbmQgdGhlIGJ1cwotICogY2xvY2sgcmF0ZSBpcyAxMCB0aW1lcyB0aGUgRFBMTCBjbG9jay4gIEF0IGxvdyByZXNvbHV0aW9uL3JlZnJlc2ggcmF0ZQotICogbW9kZXMsIHRoZSBidXMgcmF0ZSB3b3VsZCBiZSBiZWxvdyB0aGUgbGltaXRzLCBzbyBTRFZPIGFsbG93cyBmb3Igc3R1ZmZpbmcKLSAqIGR1bW15IGJ5dGVzIGluIHRoZSBkYXRhc3RyZWFtIGF0IGFuIGluY3JlYXNlZCBjbG9jayByYXRlLCB3aXRoIGJvdGggc2lkZXMgb2YKLSAqIHRoZSBsaW5rIGtub3dpbmcgaG93IG1hbnkgYnl0ZXMgYXJlIGZpbGwuCi0gKgotICogU28sIGZvciBhIG1vZGUgd2l0aCBhIGRvdGNsb2NrIG9mIDY1TWh6LCB3ZSB3b3VsZCB3YW50IHRvIGRvdWJsZSB0aGUgY2xvY2sKLSAqIHJhdGUgdG8gMTMwTWh6IHRvIGdldCBhIGJ1cyByYXRlIG9mIDEuMzBHaHouICBUaGUgRFBMTCBjbG9jayByYXRlIHdvdWxkIGJlCi0gKiBzZXQgdG8gMTMwTWh6LCBhbmQgdGhlIFNEVk8gbXVsdGlwbGllciBzZXQgdG8gMnggaW4gdGhpcyByZWdpc3RlciBhbmQKLSAqIHRocm91Z2ggYW4gU0RWTyBjb21tYW5kLgotICoKLSAqIFRoaXMgcmVnaXN0ZXIgZmllbGQgaGFzIHZhbHVlcyBvZiBtdWx0aXBsaWNhdGlvbiBmYWN0b3IgbWludXMgMSwgd2l0aAotICogYSBtYXhpbXVtIG11bHRpcGxpZXIgb2YgNSBmb3IgU0RWTy4KLSAqLwotIyBkZWZpbmUgRFBMTF9NRF9VRElfTVVMVElQTElFUl9NQVNLCQkweDAwMDAzZjAwCi0jIGRlZmluZSBEUExMX01EX1VESV9NVUxUSVBMSUVSX1NISUZUCQk4Ci0vKiogU0RWTy9VREkgcGl4ZWwgbXVsdGlwbGllciBmb3IgVkdBLCBzYW1lIGFzIERQTExfTURfVURJX01VTFRJUExJRVJfTUFTSy4KLSAqIFRoaXMgYmVzdCBiZSBzZXQgdG8gdGhlIGRlZmF1bHQgdmFsdWUgKDMpIG9yIHRoZSBDUlQgd29uJ3Qgd29yay4gTm8sCi0gKiBJIGRvbid0IGVudGlyZWx5IHVuZGVyc3RhbmQgd2hhdCB0aGlzIGRvZXMuLi4KLSAqLwotIyBkZWZpbmUgRFBMTF9NRF9WR0FfVURJX01VTFRJUExJRVJfTUFTSwkweDAwMDAwMDNmCi0jIGRlZmluZSBEUExMX01EX1ZHQV9VRElfTVVMVElQTElFUl9TSElGVAkwCi0vKiogQH0gKi8KLQotI2RlZmluZSBEUExMX1RFU1QJCTB4NjA2YwotIyBkZWZpbmUgRFBMTEJfVEVTVF9TRFZPX0RJVl8xCQkJKDAgPDwgMjIpCi0jIGRlZmluZSBEUExMQl9URVNUX1NEVk9fRElWXzIJCQkoMSA8PCAyMikKLSMgZGVmaW5lIERQTExCX1RFU1RfU0RWT19ESVZfNAkJCSgyIDw8IDIyKQotIyBkZWZpbmUgRFBMTEJfVEVTVF9TRFZPX0RJVl9NQVNLCQkoMyA8PCAyMikKLSMgZGVmaW5lIERQTExCX1RFU1RfTl9CWVBBU1MJCQkoMSA8PCAxOSkKLSMgZGVmaW5lIERQTExCX1RFU1RfTV9CWVBBU1MJCQkoMSA8PCAxOCkKLSMgZGVmaW5lIERQTExCX0lOUFVUX0JVRkZFUl9FTkFCTEUJCSgxIDw8IDE2KQotIyBkZWZpbmUgRFBMTEFfVEVTVF9OX0JZUEFTUwkJCSgxIDw8IDMpCi0jIGRlZmluZSBEUExMQV9URVNUX01fQllQQVNTCQkJKDEgPDwgMikKLSMgZGVmaW5lIERQTExBX0lOUFVUX0JVRkZFUl9FTkFCTEUJCSgxIDw8IDApCi0KLSNkZWZpbmUgQURQQQkJCTB4NjExMDAKLSNkZWZpbmUgQURQQV9EQUNfRU5BQkxFCQkoMTw8MzEpCi0jZGVmaW5lIEFEUEFfREFDX0RJU0FCTEUJMAotI2RlZmluZSBBRFBBX1BJUEVfU0VMRUNUX01BU0sJKDE8PDMwKQotI2RlZmluZSBBRFBBX1BJUEVfQV9TRUxFQ1QJMAotI2RlZmluZSBBRFBBX1BJUEVfQl9TRUxFQ1QJKDE8PDMwKQotI2RlZmluZSBBRFBBX1VTRV9WR0FfSFZQT0xBUklUWSAoMTw8MTUpCi0jZGVmaW5lIEFEUEFfU0VUU19IVlBPTEFSSVRZCTAKLSNkZWZpbmUgQURQQV9WU1lOQ19DTlRMX0RJU0FCTEUgKDE8PDExKQotI2RlZmluZSBBRFBBX1ZTWU5DX0NOVExfRU5BQkxFCTAKLSNkZWZpbmUgQURQQV9IU1lOQ19DTlRMX0RJU0FCTEUgKDE8PDEwKQotI2RlZmluZSBBRFBBX0hTWU5DX0NOVExfRU5BQkxFCTAKLSNkZWZpbmUgQURQQV9WU1lOQ19BQ1RJVkVfSElHSAkoMTw8NCkKLSNkZWZpbmUgQURQQV9WU1lOQ19BQ1RJVkVfTE9XCTAKLSNkZWZpbmUgQURQQV9IU1lOQ19BQ1RJVkVfSElHSAkoMTw8MykKLSNkZWZpbmUgQURQQV9IU1lOQ19BQ1RJVkVfTE9XCTAKLQotI2RlZmluZSBGUEEwCQkweDA2MDQwCi0jZGVmaW5lIEZQQTEJCTB4MDYwNDQKLSNkZWZpbmUgRlBCMAkJMHgwNjA0OAotI2RlZmluZSBGUEIxCQkweDA2MDRjCi0jIGRlZmluZSBGUF9OX0RJVl9NQVNLCQkJCTB4MDAzZjAwMDAKLSMgZGVmaW5lIEZQX05fRElWX1NISUZUCQkJCTE2Ci0jIGRlZmluZSBGUF9NMV9ESVZfTUFTSwkJCQkweDAwMDAzZjAwCi0jIGRlZmluZSBGUF9NMV9ESVZfU0hJRlQJCQk4Ci0jIGRlZmluZSBGUF9NMl9ESVZfTUFTSwkJCQkweDAwMDAwMDNmCi0jIGRlZmluZSBGUF9NMl9ESVZfU0hJRlQJCQkwCi0KLQotI2RlZmluZSBQT1JUX0hPVFBMVUdfRU4JCTB4NjExMTAKLSMgZGVmaW5lIFNEVk9CX0hPVFBMVUdfSU5UX0VOCQkJKDEgPDwgMjYpCi0jIGRlZmluZSBTRFZPQ19IT1RQTFVHX0lOVF9FTgkJCSgxIDw8IDI1KQotIyBkZWZpbmUgVFZfSE9UUExVR19JTlRfRU4JCQkoMSA8PCAxOCkKLSMgZGVmaW5lIENSVF9IT1RQTFVHX0lOVF9FTgkJCSgxIDw8IDkpCi0jIGRlZmluZSBDUlRfSE9UUExVR19GT1JDRV9ERVRFQ1QJCSgxIDw8IDMpCi0KLSNkZWZpbmUgUE9SVF9IT1RQTFVHX1NUQVQJMHg2MTExNAotIyBkZWZpbmUgQ1JUX0hPVFBMVUdfSU5UX1NUQVRVUwkJCSgxIDw8IDExKQotIyBkZWZpbmUgVFZfSE9UUExVR19JTlRfU1RBVFVTCQkJKDEgPDwgMTApCi0jIGRlZmluZSBDUlRfSE9UUExVR19NT05JVE9SX01BU0sJCSgzIDw8IDgpCi0jIGRlZmluZSBDUlRfSE9UUExVR19NT05JVE9SX0NPTE9SCQkoMyA8PCA4KQotIyBkZWZpbmUgQ1JUX0hPVFBMVUdfTU9OSVRPUl9NT05PCQkoMiA8PCA4KQotIyBkZWZpbmUgQ1JUX0hPVFBMVUdfTU9OSVRPUl9OT05FCQkoMCA8PCA4KQotIyBkZWZpbmUgU0RWT0NfSE9UUExVR19JTlRfU1RBVFVTCQkoMSA8PCA3KQotIyBkZWZpbmUgU0RWT0JfSE9UUExVR19JTlRfU1RBVFVTCQkoMSA8PCA2KQotCi0jZGVmaW5lIFNEVk9CCQkJMHg2MTE0MAotI2RlZmluZSBTRFZPQwkJCTB4NjExNjAKLSNkZWZpbmUgU0RWT19FTkFCTEUJCQkJKDEgPDwgMzEpCi0jZGVmaW5lIFNEVk9fUElQRV9CX1NFTEVDVAkJCSgxIDw8IDMwKQotI2RlZmluZSBTRFZPX1NUQUxMX1NFTEVDVAkJCSgxIDw8IDI5KQotI2RlZmluZSBTRFZPX0lOVEVSUlVQVF9FTkFCTEUJCQkoMSA8PCAyNikKLS8qKgotICogOTE1Ry9HTSBTRFZPIHBpeGVsIG11bHRpcGxpZXIuCi0gKgotICogUHJvZ3JhbW1lZCB2YWx1ZSBpcyBtdWx0aXBsaWVyIC0gMSwgdXAgdG8gNXguCi0gKgotICogXHNhIERQTExfTURfVURJX01VTFRJUExJRVJfTUFTSwotICovCi0jZGVmaW5lIFNEVk9fUE9SVF9NVUxUSVBMWV9NQVNLCQkJKDcgPDwgMjMpCi0jZGVmaW5lIFNEVk9fUE9SVF9NVUxUSVBMWV9TSElGVAkJMjMKLSNkZWZpbmUgU0RWT19QSEFTRV9TRUxFQ1RfTUFTSwkJCSgxNSA8PCAxOSkKLSNkZWZpbmUgU0RWT19QSEFTRV9TRUxFQ1RfREVGQVVMVAkJKDYgPDwgMTkpCi0jZGVmaW5lIFNEVk9fQ0xPQ0tfT1VUUFVUX0lOVkVSVAkJKDEgPDwgMTgpCi0jZGVmaW5lIFNEVk9DX0dBTkdfTU9ERQkJCQkoMSA8PCAxNikKLSNkZWZpbmUgU0RWT19CT1JERVJfRU5BQkxFCQkJKDEgPDwgNykKLSNkZWZpbmUgU0RWT0JfUENJRV9DT05DVVJSRU5DWQkJCSgxIDw8IDMpCi0jZGVmaW5lIFNEVk9fREVURUNURUQJCQkJKDEgPDwgMikKLS8qIEJpdHMgdG8gYmUgcHJlc2VydmVkIHdoZW4gd3JpdGluZyAqLwotI2RlZmluZSBTRFZPQl9QUkVTRVJWRV9NQVNLCQkJKCgxIDw8IDE3KSB8ICgxIDw8IDE2KSB8ICgxIDw8IDE0KSkKLSNkZWZpbmUgU0RWT0NfUFJFU0VSVkVfTUFTSwkJCSgxIDw8IDE3KQotCi0vKiogQGRlZmdyb3VwIExWRFMKLSAqIEB7Ci0gKi8KLS8qKgotICogVGhpcyByZWdpc3RlciBjb250cm9scyB0aGUgTFZEUyBvdXRwdXQgZW5hYmxlLCBwaXBlIHNlbGVjdGlvbiwgYW5kIGRhdGEKLSAqIGZvcm1hdCBzZWxlY3Rpb24uCi0gKgotICogQWxsIG9mIHRoZSBjbG9jay9kYXRhIHBhaXJzIGFyZSBmb3JjZSBwb3dlcmVkIGRvd24gYnkgcG93ZXIgc2VxdWVuY2luZy4KLSAqLwotI2RlZmluZSBMVkRTCQkJMHg2MTE4MAotLyoqCi0gKiBFbmFibGVzIHRoZSBMVkRTIHBvcnQuICBUaGlzIGJpdCBtdXN0IGJlIHNldCBiZWZvcmUgRFBMTHMgYXJlIGVuYWJsZWQsIGFzCi0gKiB0aGUgRFBMTCBzZW1hbnRpY3MgY2hhbmdlIHdoZW4gdGhlIExWRFMgaXMgYXNzaWduZWQgdG8gdGhhdCBwaXBlLgotICovCi0jIGRlZmluZSBMVkRTX1BPUlRfRU4JCQkoMSA8PCAzMSkKLS8qKiBTZWxlY3RzIHBpcGUgQiBmb3IgTFZEUyBkYXRhLiAgTXVzdCBiZSBzZXQgb24gcHJlLTk2NS4gKi8KLSMgZGVmaW5lIExWRFNfUElQRUJfU0VMRUNUCQkoMSA8PCAzMCkKLQotLyoqCi0gKiBFbmFibGVzIHRoZSBBMC1BMiBkYXRhIHBhaXJzIGFuZCBDTEtBLCBjb250YWluaW5nIDE4IGJpdHMgb2YgY29sb3IgZGF0YSBwZXIKLSAqIHBpeGVsLgotICovCi0jIGRlZmluZSBMVkRTX0EwQTJfQ0xLQV9QT1dFUl9NQVNLCSgzIDw8IDgpCi0jIGRlZmluZSBMVkRTX0EwQTJfQ0xLQV9QT1dFUl9ET1dOCSgwIDw8IDgpCi0jIGRlZmluZSBMVkRTX0EwQTJfQ0xLQV9QT1dFUl9VUAkoMyA8PCA4KQotLyoqCi0gKiBDb250cm9scyB0aGUgQTMgZGF0YSBwYWlyLCB3aGljaCBjb250YWlucyB0aGUgYWRkaXRpb25hbCBMU0JzIGZvciAyNCBiaXQKLSAqIG1vZGUuICBPbmx5IGVuYWJsZWQgaWYgTFZEU19BMEEyX0NMS0FfUE9XRVJfVVAgYWxzbyBpbmRpY2F0ZXMgaXQgc2hvdWxkIGJlCi0gKiBvbi4KLSAqLwotIyBkZWZpbmUgTFZEU19BM19QT1dFUl9NQVNLCQkoMyA8PCA2KQotIyBkZWZpbmUgTFZEU19BM19QT1dFUl9ET1dOCQkoMCA8PCA2KQotIyBkZWZpbmUgTFZEU19BM19QT1dFUl9VUAkJKDMgPDwgNikKLS8qKgotICogQ29udHJvbHMgdGhlIENMS0IgcGFpci4gIFRoaXMgc2hvdWxkIG9ubHkgYmUgc2V0IHdoZW4gTFZEU19CMEIzX1BPV0VSX1VQCi0gKiBpcyBzZXQuCi0gKi8KLSMgZGVmaW5lIExWRFNfQ0xLQl9QT1dFUl9NQVNLCQkoMyA8PCA0KQotIyBkZWZpbmUgTFZEU19DTEtCX1BPV0VSX0RPV04JCSgwIDw8IDQpCi0jIGRlZmluZSBMVkRTX0NMS0JfUE9XRVJfVVAJCSgzIDw8IDQpCi0KLS8qKgotICogQ29udHJvbHMgdGhlIEIwLUIzIGRhdGEgcGFpcnMuICBUaGlzIG11c3QgYmUgc2V0IHRvIG1hdGNoIHRoZSBEUExMIHAyCi0gKiBzZXR0aW5nIGZvciB3aGV0aGVyIHdlIGFyZSBpbiBkdWFsLWNoYW5uZWwgbW9kZS4gIFRoZSBCMyBwYWlyIHdpbGwKLSAqIGFkZGl0aW9uYWxseSBvbmx5IGJlIHBvd2VyZWQgdXAgd2hlbiBMVkRTX0EzX1BPV0VSX1VQIGlzIHNldC4KLSAqLwotIyBkZWZpbmUgTFZEU19CMEIzX1BPV0VSX01BU0sJCSgzIDw8IDIpCi0jIGRlZmluZSBMVkRTX0IwQjNfUE9XRVJfRE9XTgkJKDAgPDwgMikKLSMgZGVmaW5lIExWRFNfQjBCM19QT1dFUl9VUAkJKDMgPDwgMikKLQotI2RlZmluZSBQSVBFQUNPTkYgMHg3MDAwOAotI2RlZmluZSBQSVBFQUNPTkZfRU5BQkxFCSgxPDwzMSkKLSNkZWZpbmUgUElQRUFDT05GX0RJU0FCTEUJMAotI2RlZmluZSBQSVBFQUNPTkZfRE9VQkxFX1dJREUJKDE8PDMwKQotI2RlZmluZSBJOTY1X1BJUEVDT05GX0FDVElWRQkoMTw8MzApCi0jZGVmaW5lIFBJUEVBQ09ORl9TSU5HTEVfV0lERQkwCi0jZGVmaW5lIFBJUEVBQ09ORl9QSVBFX1VOTE9DS0VEIDAKLSNkZWZpbmUgUElQRUFDT05GX1BJUEVfTE9DS0VECSgxPDwyNSkKLSNkZWZpbmUgUElQRUFDT05GX1BBTEVUVEUJMAotI2RlZmluZSBQSVBFQUNPTkZfR0FNTUEJCSgxPDwyNCkKLSNkZWZpbmUgUElQRUNPTkZfRk9SQ0VfQk9SREVSCSgxPDwyNSkKLSNkZWZpbmUgUElQRUNPTkZfUFJPR1JFU1NJVkUJKDAgPDwgMjEpCi0jZGVmaW5lIFBJUEVDT05GX0lOVEVSTEFDRV9XX0ZJRUxEX0lORElDQVRJT04JKDYgPDwgMjEpCi0jZGVmaW5lIFBJUEVDT05GX0lOVEVSTEFDRV9GSUVMRF8wX09OTFkJCSg3IDw8IDIxKQotCi0jZGVmaW5lIERTUEFSQgkgIDB4NzAwMzAKLSNkZWZpbmUgRFNQQVJCX0NTVEFSVF9NQVNLCSgweDdmIDw8IDcpCi0jZGVmaW5lIERTUEFSQl9DU1RBUlRfU0hJRlQJNwotI2RlZmluZSBEU1BBUkJfQlNUQVJUX01BU0sJKDB4N2YpCQkgCi0jZGVmaW5lIERTUEFSQl9CU1RBUlRfU0hJRlQJMAotCi0jZGVmaW5lIFBJUEVCQ09ORiAweDcxMDA4Ci0jZGVmaW5lIFBJUEVCQ09ORl9FTkFCTEUJKDE8PDMxKQotI2RlZmluZSBQSVBFQkNPTkZfRElTQUJMRQkwCi0jZGVmaW5lIFBJUEVCQ09ORl9ET1VCTEVfV0lERQkoMTw8MzApCi0jZGVmaW5lIFBJUEVCQ09ORl9ESVNBQkxFCTAKLSNkZWZpbmUgUElQRUJDT05GX0dBTU1BCQkoMTw8MjQpCi0jZGVmaW5lIFBJUEVCQ09ORl9QQUxFVFRFCTAKLQotI2RlZmluZSBQSVBFQkdDTUFYUkVECQkweDcxMDEwCi0jZGVmaW5lIFBJUEVCR0NNQVhHUkVFTgkJMHg3MTAxNAotI2RlZmluZSBQSVBFQkdDTUFYQkxVRQkJMHg3MTAxOAotI2RlZmluZSBQSVBFQlNUQVQJCTB4NzEwMjQKLSNkZWZpbmUgUElQRUJGUkFNRUhJR0gJCTB4NzEwNDAKLSNkZWZpbmUgUElQRUJGUkFNRVBJWEVMCQkweDcxMDQ0Ci0KLSNkZWZpbmUgRFNQQUNOVFIJCTB4NzAxODAKLSNkZWZpbmUgRFNQQkNOVFIJCTB4NzExODAKLSNkZWZpbmUgRElTUExBWV9QTEFORV9FTkFCTEUJCQkoMTw8MzEpCi0jZGVmaW5lIERJU1BMQVlfUExBTkVfRElTQUJMRQkJCTAKLSNkZWZpbmUgRElTUFBMQU5FX0dBTU1BX0VOQUJMRQkJCSgxPDwzMCkKLSNkZWZpbmUgRElTUFBMQU5FX0dBTU1BX0RJU0FCTEUJCQkwCi0jZGVmaW5lIERJU1BQTEFORV9QSVhGT1JNQVRfTUFTSwkJKDB4Zjw8MjYpCi0jZGVmaW5lIERJU1BQTEFORV84QlBQCQkJCSgweDI8PDI2KQotI2RlZmluZSBESVNQUExBTkVfMTVfMTZCUFAJCQkoMHg0PDwyNikKLSNkZWZpbmUgRElTUFBMQU5FXzE2QlBQCQkJCSgweDU8PDI2KQotI2RlZmluZSBESVNQUExBTkVfMzJCUFBfTk9fQUxQSEEJCSgweDY8PDI2KQotI2RlZmluZSBESVNQUExBTkVfMzJCUFAJCQkJKDB4Nzw8MjYpCi0jZGVmaW5lIERJU1BQTEFORV9TVEVSRU9fRU5BQkxFCQkJKDE8PDI1KQotI2RlZmluZSBESVNQUExBTkVfU1RFUkVPX0RJU0FCTEUJCTAKLSNkZWZpbmUgRElTUFBMQU5FX1NFTF9QSVBFX01BU0sJCQkoMTw8MjQpCi0jZGVmaW5lIERJU1BQTEFORV9TRUxfUElQRV9BCQkJMAotI2RlZmluZSBESVNQUExBTkVfU0VMX1BJUEVfQgkJCSgxPDwyNCkKLSNkZWZpbmUgRElTUFBMQU5FX1NSQ19LRVlfRU5BQkxFCQkoMTw8MjIpCi0jZGVmaW5lIERJU1BQTEFORV9TUkNfS0VZX0RJU0FCTEUJCTAKLSNkZWZpbmUgRElTUFBMQU5FX0xJTkVfRE9VQkxFCQkJKDE8PDIwKQotI2RlZmluZSBESVNQUExBTkVfTk9fTElORV9ET1VCTEUJCTAKLSNkZWZpbmUgRElTUFBMQU5FX1NURVJFT19QT0xBUklUWV9GSVJTVAkJMAotI2RlZmluZSBESVNQUExBTkVfU1RFUkVPX1BPTEFSSVRZX1NFQ09ORAkoMTw8MTgpCi0vKiBwbGFuZSBCIG9ubHkgKi8KLSNkZWZpbmUgRElTUFBMQU5FX0FMUEhBX1RSQU5TX0VOQUJMRQkJKDE8PDE1KQotI2RlZmluZSBESVNQUExBTkVfQUxQSEFfVFJBTlNfRElTQUJMRQkJMAotI2RlZmluZSBESVNQUExBTkVfU1BSSVRFX0FCT1ZFX0RJU1BMQVlBCQkwCi0jZGVmaW5lIERJU1BQTEFORV9TUFJJVEVfQUJPVkVfT1ZFUkxBWQkJKDEpCi0KLSNkZWZpbmUgRFNQQUJBU0UJCTB4NzAxODQKLSNkZWZpbmUgRFNQQVNUUklERQkJMHg3MDE4OAotCi0jZGVmaW5lIERTUEJCQVNFCQkweDcxMTg0Ci0jZGVmaW5lIERTUEJBRERSCQlEU1BCQkFTRQotI2RlZmluZSBEU1BCU1RSSURFCQkweDcxMTg4Ci0KLSNkZWZpbmUgRFNQQUtFWVZBTAkJMHg3MDE5NAotI2RlZmluZSBEU1BBS0VZTUFTSwkJMHg3MDE5OAotCi0jZGVmaW5lIERTUEFQT1MJCQkweDcwMThDIC8qIHJlc2VydmVkICovCi0jZGVmaW5lIERTUEFTSVpFCQkweDcwMTkwCi0jZGVmaW5lIERTUEJQT1MJCQkweDcxMThDCi0jZGVmaW5lIERTUEJTSVpFCQkweDcxMTkwCi0KLSNkZWZpbmUgRFNQQVNVUkYJCTB4NzAxOUMKLSNkZWZpbmUgRFNQQVRJTEVPRkYJCTB4NzAxQTQKLQotI2RlZmluZSBEU1BCU1VSRgkJMHg3MTE5QwotI2RlZmluZSBEU1BCVElMRU9GRgkJMHg3MTFBNAotCi0jZGVmaW5lIFZHQUNOVFJMCQkweDcxNDAwCi0jIGRlZmluZSBWR0FfRElTUF9ESVNBQkxFCQkJKDEgPDwgMzEpCi0jIGRlZmluZSBWR0FfMlhfTU9ERQkJCQkoMSA8PCAzMCkKLSMgZGVmaW5lIFZHQV9QSVBFX0JfU0VMRUNUCQkJKDEgPDwgMjkpCi0KLS8qCi0gKiBTb21lIEJJT1Mgc2NyYXRjaCBhcmVhIHJlZ2lzdGVycy4gIFRoZSA4NDUgKGFuZCA4MzA/KSBzdG9yZSB0aGUgYW1vdW50Ci0gKiBvZiB2aWRlbyBtZW1vcnkgYXZhaWxhYmxlIHRvIHRoZSBCSU9TIGluIFNXRjEuCi0gKi8KLQotI2RlZmluZSBTV0YwCQkJMHg3MTQxMAotCi0vKgotICogODU1IHNjcmF0Y2ggcmVnaXN0ZXJzLgotICovCi0jZGVmaW5lIFNXRjEwCQkJMHg3MDQxMAotCi0jZGVmaW5lIFNXRjMwCQkJMHg3MjQxNAotCi0vKgotICogT3ZlcmxheSByZWdpc3RlcnMuICBUaGVzZSBhcmUgb3ZlcmxheSByZWdpc3RlcnMgYWNjZXNzZWQgdmlhIE1NSU8uCi0gKiBUaG9zZSBsb2FkZWQgdmlhIHRoZSBvdmVybGF5IHJlZ2lzdGVyIHBhZ2UgYXJlIGRlZmluZWQgaW4gaTgzMF92aWRlby5jLgotICovCi0jZGVmaW5lIE9WQURECQkJMHgzMDAwMAotCi0jZGVmaW5lIERPVlNUQQkJCTB4MzAwMDgKLSNkZWZpbmUgT0NfQlVGCQkJKDB4Mzw8MjApCi0KLSNkZWZpbmUgT0dBTUM1CQkJMHgzMDAxMAotI2RlZmluZSBPR0FNQzQJCQkweDMwMDE0Ci0jZGVmaW5lIE9HQU1DMwkJCTB4MzAwMTgKLSNkZWZpbmUgT0dBTUMyCQkJMHgzMDAxYwotI2RlZmluZSBPR0FNQzEJCQkweDMwMDIwCi0jZGVmaW5lIE9HQU1DMAkJCTB4MzAwMjQKLS8qCi0gKiBQYWxldHRlIHJlZ2lzdGVycwotICovCi0jZGVmaW5lIFBBTEVUVEVfQQkJMHgwYTAwMAotI2RlZmluZSBQQUxFVFRFX0IJCTB4MGE4MDAKK2V4dGVybiBpbnQgaTkxNV93YWl0X3Jpbmcoc3RydWN0IGRybV9kZXZpY2UgKiBkZXYsIGludCBuLCBjb25zdCBjaGFyICpjYWxsZXIpOwogCiAjZGVmaW5lIElTX0k4MzAoZGV2KSAoKGRldiktPnBjaV9kZXZpY2UgPT0gMHgzNTc3KQogI2RlZmluZSBJU184NDVHKGRldikgKChkZXYpLT5wY2lfZGV2aWNlID09IDB4MjU2MikKQEAgLTExMTksNyArNjM5LDcgQEAKIAogI2RlZmluZSBJU19JOTY1R00oZGV2KSAoKGRldiktPnBjaV9kZXZpY2UgPT0gMHgyQTAyKQogCi0jZGVmaW5lIElTX0lHRF9HTShkZXYpICgoZGV2KS0+cGNpX2RldmljZSA9PSAweDJBNDIpCisjZGVmaW5lIElTX0dNNDUoZGV2KSAoKGRldiktPnBjaV9kZXZpY2UgPT0gMHgyQTQyKQogCiAjZGVmaW5lIElTX0c0WChkZXYpICgoZGV2KS0+cGNpX2RldmljZSA9PSAweDJFMDIgfHwgXAogCQkgICAgIChkZXYpLT5wY2lfZGV2aWNlID09IDB4MkUxMiB8fCBcCkBAIC0xMTMzLDkgKzY1Myw5IEBACiAJCSAgICAgIElTX0k5NDVHTShkZXYpIHx8IElTX0k5NjVHKGRldikgfHwgSVNfRzMzKGRldikpCiAKICNkZWZpbmUgSVNfTU9CSUxFKGRldikgKElTX0k4MzAoZGV2KSB8fCBJU19JODVYKGRldikgfHwgSVNfSTkxNUdNKGRldikgfHwgXAotCQkJSVNfSTk0NUdNKGRldikgfHwgSVNfSTk2NUdNKGRldikgfHwgSVNfSUdEX0dNKGRldikpCisJCQlJU19JOTQ1R00oZGV2KSB8fCBJU19JOTY1R00oZGV2KSB8fCBJU19HTTQ1KGRldikpCiAKLSNkZWZpbmUgSTkxNV9ORUVEX0dGWF9IV1MoZGV2KSAoSVNfRzMzKGRldikgfHwgSVNfSUdEX0dNKGRldikgfHwgSVNfRzRYKGRldikpCisjZGVmaW5lIEk5MTVfTkVFRF9HRlhfSFdTKGRldikgKElTX0czMyhkZXYpIHx8IElTX0dNNDUoZGV2KSB8fCBJU19HNFgoZGV2KSkKIAogI2RlZmluZSBQUklNQVJZX1JJTkdCVUZGRVJfU0laRSAgICAgICAgICgxMjgqMTAyNCkKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0uYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWFjNzNkZAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMKQEAgLTAsMCArMSwyNTU4IEBACisvKgorICogQ29weXJpZ2h0IMKpIDIwMDggSW50ZWwgQ29ycG9yYXRpb24KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAorICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhlIG5leHQKKyAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUKKyAqIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAorICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCisgKiBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTCisgKiBJTiBUSEUgU09GVFdBUkUuCisgKgorICogQXV0aG9yczoKKyAqICAgIEVyaWMgQW5ob2x0IDxlcmljQGFuaG9sdC5uZXQ+CisgKgorICovCisKKyNpbmNsdWRlICJkcm1QLmgiCisjaW5jbHVkZSAiZHJtLmgiCisjaW5jbHVkZSAiaTkxNV9kcm0uaCIKKyNpbmNsdWRlICJpOTE1X2Rydi5oIgorI2luY2x1ZGUgPGxpbnV4L3N3YXAuaD4KKworc3RhdGljIGludAoraTkxNV9nZW1fb2JqZWN0X3NldF9kb21haW4oc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmosCisJCQkgICAgdWludDMyX3QgcmVhZF9kb21haW5zLAorCQkJICAgIHVpbnQzMl90IHdyaXRlX2RvbWFpbik7CitzdGF0aWMgaW50CitpOTE1X2dlbV9vYmplY3Rfc2V0X2RvbWFpbl9yYW5nZShzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiwKKwkJCQkgdWludDY0X3Qgb2Zmc2V0LAorCQkJCSB1aW50NjRfdCBzaXplLAorCQkJCSB1aW50MzJfdCByZWFkX2RvbWFpbnMsCisJCQkJIHVpbnQzMl90IHdyaXRlX2RvbWFpbik7CitzdGF0aWMgaW50CitpOTE1X2dlbV9zZXRfZG9tYWluKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqLAorCQkgICAgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYsCisJCSAgICB1aW50MzJfdCByZWFkX2RvbWFpbnMsCisJCSAgICB1aW50MzJfdCB3cml0ZV9kb21haW4pOworc3RhdGljIGludCBpOTE1X2dlbV9vYmplY3RfZ2V0X3BhZ2VfbGlzdChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaik7CitzdGF0aWMgdm9pZCBpOTE1X2dlbV9vYmplY3RfZnJlZV9wYWdlX2xpc3Qoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmopOworc3RhdGljIGludCBpOTE1X2dlbV9vYmplY3Rfd2FpdF9yZW5kZXJpbmcoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmopOworCitzdGF0aWMgdm9pZAoraTkxNV9nZW1fY2xlYW51cF9yaW5nYnVmZmVyKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOworCitpbnQKK2k5MTVfZ2VtX2luaXRfaW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKKwkJICAgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KQoreworCWRybV9pOTE1X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCXN0cnVjdCBkcm1faTkxNV9nZW1faW5pdCAqYXJncyA9IGRhdGE7CisKKwltdXRleF9sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CisKKwlpZiAoYXJncy0+Z3R0X3N0YXJ0ID49IGFyZ3MtPmd0dF9lbmQgfHwKKwkgICAgKGFyZ3MtPmd0dF9zdGFydCAmIChQQUdFX1NJWkUgLSAxKSkgIT0gMCB8fAorCSAgICAoYXJncy0+Z3R0X2VuZCAmIChQQUdFX1NJWkUgLSAxKSkgIT0gMCkgeworCQltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJZHJtX21tX2luaXQoJmRldl9wcml2LT5tbS5ndHRfc3BhY2UsIGFyZ3MtPmd0dF9zdGFydCwKKwkgICAgYXJncy0+Z3R0X2VuZCAtIGFyZ3MtPmd0dF9zdGFydCk7CisKKwlkZXYtPmd0dF90b3RhbCA9ICh1aW50MzJfdCkgKGFyZ3MtPmd0dF9lbmQgLSBhcmdzLT5ndHRfc3RhcnQpOworCisJbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CisKKwlyZXR1cm4gMDsKK30KKworCisvKioKKyAqIENyZWF0ZXMgYSBuZXcgbW0gb2JqZWN0IGFuZCByZXR1cm5zIGEgaGFuZGxlIHRvIGl0LgorICovCitpbnQKK2k5MTVfZ2VtX2NyZWF0ZV9pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAorCQkgICAgICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdikKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2NyZWF0ZSAqYXJncyA9IGRhdGE7CisJc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmo7CisJaW50IGhhbmRsZSwgcmV0OworCisJYXJncy0+c2l6ZSA9IHJvdW5kdXAoYXJncy0+c2l6ZSwgUEFHRV9TSVpFKTsKKworCS8qIEFsbG9jYXRlIHRoZSBuZXcgb2JqZWN0ICovCisJb2JqID0gZHJtX2dlbV9vYmplY3RfYWxsb2MoZGV2LCBhcmdzLT5zaXplKTsKKwlpZiAob2JqID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCisJcmV0ID0gZHJtX2dlbV9oYW5kbGVfY3JlYXRlKGZpbGVfcHJpdiwgb2JqLCAmaGFuZGxlKTsKKwltdXRleF9sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CisJZHJtX2dlbV9vYmplY3RfaGFuZGxlX3VucmVmZXJlbmNlKG9iaik7CisJbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CisKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJYXJncy0+aGFuZGxlID0gaGFuZGxlOworCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogUmVhZHMgZGF0YSBmcm9tIHRoZSBvYmplY3QgcmVmZXJlbmNlZCBieSBoYW5kbGUuCisgKgorICogT24gZXJyb3IsIHRoZSBjb250ZW50cyBvZiAqZGF0YSBhcmUgdW5kZWZpbmVkLgorICovCitpbnQKK2k5MTVfZ2VtX3ByZWFkX2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCisJCSAgICAgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpCit7CisJc3RydWN0IGRybV9pOTE1X2dlbV9wcmVhZCAqYXJncyA9IGRhdGE7CisJc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmo7CisJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9ial9wcml2OworCXNzaXplX3QgcmVhZDsKKwlsb2ZmX3Qgb2Zmc2V0OworCWludCByZXQ7CisKKwlvYmogPSBkcm1fZ2VtX29iamVjdF9sb29rdXAoZGV2LCBmaWxlX3ByaXYsIGFyZ3MtPmhhbmRsZSk7CisJaWYgKG9iaiA9PSBOVUxMKQorCQlyZXR1cm4gLUVCQURGOworCW9ial9wcml2ID0gb2JqLT5kcml2ZXJfcHJpdmF0ZTsKKworCS8qIEJvdW5kcyBjaGVjayBzb3VyY2UuCisJICoKKwkgKiBYWFg6IFRoaXMgY291bGQgdXNlIHJldmlldyBmb3Igb3ZlcmZsb3cgaXNzdWVzLi4uCisJICovCisJaWYgKGFyZ3MtPm9mZnNldCA+IG9iai0+c2l6ZSB8fCBhcmdzLT5zaXplID4gb2JqLT5zaXplIHx8CisJICAgIGFyZ3MtPm9mZnNldCArIGFyZ3MtPnNpemUgPiBvYmotPnNpemUpIHsKKwkJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2Uob2JqKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJbXV0ZXhfbG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOworCisJcmV0ID0gaTkxNV9nZW1fb2JqZWN0X3NldF9kb21haW5fcmFuZ2Uob2JqLCBhcmdzLT5vZmZzZXQsIGFyZ3MtPnNpemUsCisJCQkJCSAgICAgICBJOTE1X0dFTV9ET01BSU5fQ1BVLCAwKTsKKwlpZiAocmV0ICE9IDApIHsKKwkJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2Uob2JqKTsKKwkJbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CisJCXJldHVybiByZXQ7CisJfQorCisJb2Zmc2V0ID0gYXJncy0+b2Zmc2V0OworCisJcmVhZCA9IHZmc19yZWFkKG9iai0+ZmlscCwgKGNoYXIgX191c2VyICopKHVpbnRwdHJfdClhcmdzLT5kYXRhX3B0ciwKKwkJCWFyZ3MtPnNpemUsICZvZmZzZXQpOworCWlmIChyZWFkICE9IGFyZ3MtPnNpemUpIHsKKwkJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2Uob2JqKTsKKwkJbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CisJCWlmIChyZWFkIDwgMCkKKwkJCXJldHVybiByZWFkOworCQllbHNlCisJCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZShvYmopOworCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK2k5MTVfZ2VtX2d0dF9wd3JpdGUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmosCisJCSAgICBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3B3cml0ZSAqYXJncywKKwkJICAgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KQoreworCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmpfcHJpdiA9IG9iai0+ZHJpdmVyX3ByaXZhdGU7CisJc3NpemVfdCByZW1haW47CisJbG9mZl90IG9mZnNldDsKKwljaGFyIF9fdXNlciAqdXNlcl9kYXRhOworCWNoYXIgX19pb21lbSAqdmFkZHI7CisJY2hhciAqdmFkZHJfYXRvbWljOworCWludCBpLCBvLCBsOworCWludCByZXQgPSAwOworCXVuc2lnbmVkIGxvbmcgcGZuOworCXVuc2lnbmVkIGxvbmcgdW53cml0dGVuOworCisJdXNlcl9kYXRhID0gKGNoYXIgX191c2VyICopICh1aW50cHRyX3QpIGFyZ3MtPmRhdGFfcHRyOworCXJlbWFpbiA9IGFyZ3MtPnNpemU7CisJaWYgKCFhY2Nlc3Nfb2soVkVSSUZZX1JFQUQsIHVzZXJfZGF0YSwgcmVtYWluKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKworCW11dGV4X2xvY2soJmRldi0+c3RydWN0X211dGV4KTsKKwlyZXQgPSBpOTE1X2dlbV9vYmplY3RfcGluKG9iaiwgMCk7CisJaWYgKHJldCkgeworCQltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKKwkJcmV0dXJuIHJldDsKKwl9CisJcmV0ID0gaTkxNV9nZW1fc2V0X2RvbWFpbihvYmosIGZpbGVfcHJpdiwKKwkJCQkgIEk5MTVfR0VNX0RPTUFJTl9HVFQsIEk5MTVfR0VNX0RPTUFJTl9HVFQpOworCWlmIChyZXQpCisJCWdvdG8gZmFpbDsKKworCW9ial9wcml2ID0gb2JqLT5kcml2ZXJfcHJpdmF0ZTsKKwlvZmZzZXQgPSBvYmpfcHJpdi0+Z3R0X29mZnNldCArIGFyZ3MtPm9mZnNldDsKKwlvYmpfcHJpdi0+ZGlydHkgPSAxOworCisJd2hpbGUgKHJlbWFpbiA+IDApIHsKKwkJLyogT3BlcmF0aW9uIGluIHRoaXMgcGFnZQorCQkgKgorCQkgKiBpID0gcGFnZSBudW1iZXIKKwkJICogbyA9IG9mZnNldCB3aXRoaW4gcGFnZQorCQkgKiBsID0gYnl0ZXMgdG8gY29weQorCQkgKi8KKwkJaSA9IG9mZnNldCA+PiBQQUdFX1NISUZUOworCQlvID0gb2Zmc2V0ICYgKFBBR0VfU0laRS0xKTsKKwkJbCA9IHJlbWFpbjsKKwkJaWYgKChvICsgbCkgPiBQQUdFX1NJWkUpCisJCQlsID0gUEFHRV9TSVpFIC0gbzsKKworCQlwZm4gPSAoZGV2LT5hZ3AtPmJhc2UgPj4gUEFHRV9TSElGVCkgKyBpOworCisjaWZkZWYgQ09ORklHX0hJR0hNRU0KKwkJLyogVGhpcyBpcyBhIHdvcmthcm91bmQgZm9yIHRoZSBsb3cgcGVyZm9ybWFuY2Ugb2YgaW91bm1hcAorCQkgKiAoYXBwcm94aW1hdGUgMTAlIGNwdSBjb3N0IG9uIG5vcm1hbCAzRCB3b3JrbG9hZHMpLgorCQkgKiBrbWFwX2F0b21pYyBvbiBISUdITUVNIGtlcm5lbHMgaGFwcGVucyB0byBsZXQgdXMgbWFwIGNhcmQKKwkJICogbWVtb3J5IHdpdGhvdXQgdGFraW5nIElQSXMuICBXaGVuIHRoZSB2bWFwIHJld29yayBsYW5kcworCQkgKiB3ZSBzaG91bGQgYmUgYWJsZSB0byBkdW1wIHRoaXMgaGFjay4KKwkJICovCisJCXZhZGRyX2F0b21pYyA9IGttYXBfYXRvbWljX3BmbihwZm4sIEtNX1VTRVIwKTsKKyNpZiBXQVRDSF9QV1JJVEUKKwkJRFJNX0lORk8oInB3cml0ZSBpICVkIG8gJWQgbCAlZCBwZm4gJWxkIHZhZGRyICVwXG4iLAorCQkJIGksIG8sIGwsIHBmbiwgdmFkZHJfYXRvbWljKTsKKyNlbmRpZgorCQl1bndyaXR0ZW4gPSBfX2NvcHlfZnJvbV91c2VyX2luYXRvbWljX25vY2FjaGUodmFkZHJfYXRvbWljICsgbywKKwkJCQkJCQkgICAgICB1c2VyX2RhdGEsIGwpOworCQlrdW5tYXBfYXRvbWljKHZhZGRyX2F0b21pYywgS01fVVNFUjApOworCisJCWlmICh1bndyaXR0ZW4pCisjZW5kaWYgLyogQ09ORklHX0hJR0hNRU0gKi8KKwkJeworCQkJdmFkZHIgPSBpb3JlbWFwX3djKHBmbiA8PCBQQUdFX1NISUZULCBQQUdFX1NJWkUpOworI2lmIFdBVENIX1BXUklURQorCQkJRFJNX0lORk8oInB3cml0ZSBzbG93IGkgJWQgbyAlZCBsICVkICIKKwkJCQkgInBmbiAlbGQgdmFkZHIgJXBcbiIsCisJCQkJIGksIG8sIGwsIHBmbiwgdmFkZHIpOworI2VuZGlmCisJCQlpZiAodmFkZHIgPT0gTlVMTCkgeworCQkJCXJldCA9IC1FRkFVTFQ7CisJCQkJZ290byBmYWlsOworCQkJfQorCQkJdW53cml0dGVuID0gX19jb3B5X2Zyb21fdXNlcih2YWRkciArIG8sIHVzZXJfZGF0YSwgbCk7CisjaWYgV0FUQ0hfUFdSSVRFCisJCQlEUk1fSU5GTygidW53cml0dGVuICVsZFxuIiwgdW53cml0dGVuKTsKKyNlbmRpZgorCQkJaW91bm1hcCh2YWRkcik7CisJCQlpZiAodW53cml0dGVuKSB7CisJCQkJcmV0ID0gLUVGQVVMVDsKKwkJCQlnb3RvIGZhaWw7CisJCQl9CisJCX0KKworCQlyZW1haW4gLT0gbDsKKwkJdXNlcl9kYXRhICs9IGw7CisJCW9mZnNldCArPSBsOworCX0KKyNpZiBXQVRDSF9QV1JJVEUgJiYgMQorCWk5MTVfZ2VtX2NsZmx1c2hfb2JqZWN0KG9iaik7CisJaTkxNV9nZW1fZHVtcF9vYmplY3Qob2JqLCBhcmdzLT5vZmZzZXQgKyBhcmdzLT5zaXplLCBfX2Z1bmNfXywgfjApOworCWk5MTVfZ2VtX2NsZmx1c2hfb2JqZWN0KG9iaik7CisjZW5kaWYKKworZmFpbDoKKwlpOTE1X2dlbV9vYmplY3RfdW5waW4ob2JqKTsKKwltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQKK2k5MTVfZ2VtX3NobWVtX3B3cml0ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiwKKwkJICAgICAgc3RydWN0IGRybV9pOTE1X2dlbV9wd3JpdGUgKmFyZ3MsCisJCSAgICAgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KQoreworCWludCByZXQ7CisJbG9mZl90IG9mZnNldDsKKwlzc2l6ZV90IHdyaXR0ZW47CisKKwltdXRleF9sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CisKKwlyZXQgPSBpOTE1X2dlbV9zZXRfZG9tYWluKG9iaiwgZmlsZV9wcml2LAorCQkJCSAgSTkxNV9HRU1fRE9NQUlOX0NQVSwgSTkxNV9HRU1fRE9NQUlOX0NQVSk7CisJaWYgKHJldCkgeworCQltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlvZmZzZXQgPSBhcmdzLT5vZmZzZXQ7CisKKwl3cml0dGVuID0gdmZzX3dyaXRlKG9iai0+ZmlscCwKKwkJCSAgICAoY2hhciBfX3VzZXIgKikodWludHB0cl90KSBhcmdzLT5kYXRhX3B0ciwKKwkJCSAgICBhcmdzLT5zaXplLCAmb2Zmc2V0KTsKKwlpZiAod3JpdHRlbiAhPSBhcmdzLT5zaXplKSB7CisJCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOworCQlpZiAod3JpdHRlbiA8IDApCisJCQlyZXR1cm4gd3JpdHRlbjsKKwkJZWxzZQorCQkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBXcml0ZXMgZGF0YSB0byB0aGUgb2JqZWN0IHJlZmVyZW5jZWQgYnkgaGFuZGxlLgorICoKKyAqIE9uIGVycm9yLCB0aGUgY29udGVudHMgb2YgdGhlIGJ1ZmZlciB0aGF0IHdlcmUgdG8gYmUgbW9kaWZpZWQgYXJlIHVuZGVmaW5lZC4KKyAqLworaW50CitpOTE1X2dlbV9wd3JpdGVfaW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKKwkJICAgICAgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpCit7CisJc3RydWN0IGRybV9pOTE1X2dlbV9wd3JpdGUgKmFyZ3MgPSBkYXRhOworCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqOworCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmpfcHJpdjsKKwlpbnQgcmV0ID0gMDsKKworCW9iaiA9IGRybV9nZW1fb2JqZWN0X2xvb2t1cChkZXYsIGZpbGVfcHJpdiwgYXJncy0+aGFuZGxlKTsKKwlpZiAob2JqID09IE5VTEwpCisJCXJldHVybiAtRUJBREY7CisJb2JqX3ByaXYgPSBvYmotPmRyaXZlcl9wcml2YXRlOworCisJLyogQm91bmRzIGNoZWNrIGRlc3RpbmF0aW9uLgorCSAqCisJICogWFhYOiBUaGlzIGNvdWxkIHVzZSByZXZpZXcgZm9yIG92ZXJmbG93IGlzc3Vlcy4uLgorCSAqLworCWlmIChhcmdzLT5vZmZzZXQgPiBvYmotPnNpemUgfHwgYXJncy0+c2l6ZSA+IG9iai0+c2l6ZSB8fAorCSAgICBhcmdzLT5vZmZzZXQgKyBhcmdzLT5zaXplID4gb2JqLT5zaXplKSB7CisJCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlKG9iaik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qIFdlIGNhbiBvbmx5IGRvIHRoZSBHVFQgcHdyaXRlIG9uIHVudGlsZWQgYnVmZmVycywgYXMgb3RoZXJ3aXNlCisJICogaXQgd291bGQgZW5kIHVwIGdvaW5nIHRocm91Z2ggdGhlIGZlbmNlZCBhY2Nlc3MsIGFuZCB3ZSdsbCBnZXQKKwkgKiBkaWZmZXJlbnQgZGV0aWxpbmcgYmVoYXZpb3IgYmV0d2VlbiByZWFkaW5nIGFuZCB3cml0aW5nLgorCSAqIHByZWFkL3B3cml0ZSBjdXJyZW50bHkgYXJlIHJlYWRpbmcgYW5kIHdyaXRpbmcgZnJvbSB0aGUgQ1BVCisJICogcGVyc3BlY3RpdmUsIHJlcXVpcmluZyBtYW51YWwgZGV0aWxpbmcgYnkgdGhlIGNsaWVudC4KKwkgKi8KKwlpZiAob2JqX3ByaXYtPnRpbGluZ19tb2RlID09IEk5MTVfVElMSU5HX05PTkUgJiYKKwkgICAgZGV2LT5ndHRfdG90YWwgIT0gMCkKKwkJcmV0ID0gaTkxNV9nZW1fZ3R0X3B3cml0ZShkZXYsIG9iaiwgYXJncywgZmlsZV9wcml2KTsKKwllbHNlCisJCXJldCA9IGk5MTVfZ2VtX3NobWVtX3B3cml0ZShkZXYsIG9iaiwgYXJncywgZmlsZV9wcml2KTsKKworI2lmIFdBVENIX1BXUklURQorCWlmIChyZXQpCisJCURSTV9JTkZPKCJwd3JpdGUgZmFpbGVkICVkXG4iLCByZXQpOworI2VuZGlmCisKKwlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZShvYmopOworCisJcmV0dXJuIHJldDsKK30KKworLyoqCisgKiBDYWxsZWQgd2hlbiB1c2VyIHNwYWNlIHByZXBhcmVzIHRvIHVzZSBhbiBvYmplY3QKKyAqLworaW50CitpOTE1X2dlbV9zZXRfZG9tYWluX2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCisJCQkgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KQoreworCXN0cnVjdCBkcm1faTkxNV9nZW1fc2V0X2RvbWFpbiAqYXJncyA9IGRhdGE7CisJc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmo7CisJaW50IHJldDsKKworCWlmICghKGRldi0+ZHJpdmVyLT5kcml2ZXJfZmVhdHVyZXMgJiBEUklWRVJfR0VNKSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlvYmogPSBkcm1fZ2VtX29iamVjdF9sb29rdXAoZGV2LCBmaWxlX3ByaXYsIGFyZ3MtPmhhbmRsZSk7CisJaWYgKG9iaiA9PSBOVUxMKQorCQlyZXR1cm4gLUVCQURGOworCisJbXV0ZXhfbG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOworI2lmIFdBVENIX0JVRgorCURSTV9JTkZPKCJzZXRfZG9tYWluX2lvY3RsICVwKCVkKSwgJTA4eCAlMDh4XG4iLAorCQkgb2JqLCBvYmotPnNpemUsIGFyZ3MtPnJlYWRfZG9tYWlucywgYXJncy0+d3JpdGVfZG9tYWluKTsKKyNlbmRpZgorCXJldCA9IGk5MTVfZ2VtX3NldF9kb21haW4ob2JqLCBmaWxlX3ByaXYsCisJCQkJICBhcmdzLT5yZWFkX2RvbWFpbnMsIGFyZ3MtPndyaXRlX2RvbWFpbik7CisJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2Uob2JqKTsKKwltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKKwlyZXR1cm4gcmV0OworfQorCisvKioKKyAqIENhbGxlZCB3aGVuIHVzZXIgc3BhY2UgaGFzIGRvbmUgd3JpdGVzIHRvIHRoaXMgYnVmZmVyCisgKi8KK2ludAoraTkxNV9nZW1fc3dfZmluaXNoX2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCisJCSAgICAgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KQoreworCXN0cnVjdCBkcm1faTkxNV9nZW1fc3dfZmluaXNoICphcmdzID0gZGF0YTsKKwlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iajsKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqX3ByaXY7CisJaW50IHJldCA9IDA7CisKKwlpZiAoIShkZXYtPmRyaXZlci0+ZHJpdmVyX2ZlYXR1cmVzICYgRFJJVkVSX0dFTSkpCisJCXJldHVybiAtRU5PREVWOworCisJbXV0ZXhfbG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOworCW9iaiA9IGRybV9nZW1fb2JqZWN0X2xvb2t1cChkZXYsIGZpbGVfcHJpdiwgYXJncy0+aGFuZGxlKTsKKwlpZiAob2JqID09IE5VTEwpIHsKKwkJbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CisJCXJldHVybiAtRUJBREY7CisJfQorCisjaWYgV0FUQ0hfQlVGCisJRFJNX0lORk8oIiVzOiBzd19maW5pc2ggJWQgKCVwICVkKVxuIiwKKwkJIF9fZnVuY19fLCBhcmdzLT5oYW5kbGUsIG9iaiwgb2JqLT5zaXplKTsKKyNlbmRpZgorCW9ial9wcml2ID0gb2JqLT5kcml2ZXJfcHJpdmF0ZTsKKworCS8qIFBpbm5lZCBidWZmZXJzIG1heSBiZSBzY2Fub3V0LCBzbyBmbHVzaCB0aGUgY2FjaGUgKi8KKwlpZiAoKG9iai0+d3JpdGVfZG9tYWluICYgSTkxNV9HRU1fRE9NQUlOX0NQVSkgJiYgb2JqX3ByaXYtPnBpbl9jb3VudCkgeworCQlpOTE1X2dlbV9jbGZsdXNoX29iamVjdChvYmopOworCQlkcm1fYWdwX2NoaXBzZXRfZmx1c2goZGV2KTsKKwl9CisJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2Uob2JqKTsKKwltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKKwlyZXR1cm4gcmV0OworfQorCisvKioKKyAqIE1hcHMgdGhlIGNvbnRlbnRzIG9mIGFuIG9iamVjdCwgcmV0dXJuaW5nIHRoZSBhZGRyZXNzIGl0IGlzIG1hcHBlZAorICogaW50by4KKyAqCisgKiBXaGlsZSB0aGUgbWFwcGluZyBob2xkcyBhIHJlZmVyZW5jZSBvbiB0aGUgY29udGVudHMgb2YgdGhlIG9iamVjdCwgaXQgZG9lc24ndAorICogaW1wbHkgYSByZWYgb24gdGhlIG9iamVjdCBpdHNlbGYuCisgKi8KK2ludAoraTkxNV9nZW1fbW1hcF9pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAorCQkgICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdikKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX21tYXAgKmFyZ3MgPSBkYXRhOworCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqOworCWxvZmZfdCBvZmZzZXQ7CisJdW5zaWduZWQgbG9uZyBhZGRyOworCisJaWYgKCEoZGV2LT5kcml2ZXItPmRyaXZlcl9mZWF0dXJlcyAmIERSSVZFUl9HRU0pKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCW9iaiA9IGRybV9nZW1fb2JqZWN0X2xvb2t1cChkZXYsIGZpbGVfcHJpdiwgYXJncy0+aGFuZGxlKTsKKwlpZiAob2JqID09IE5VTEwpCisJCXJldHVybiAtRUJBREY7CisKKwlvZmZzZXQgPSBhcmdzLT5vZmZzZXQ7CisKKwlkb3duX3dyaXRlKCZjdXJyZW50LT5tbS0+bW1hcF9zZW0pOworCWFkZHIgPSBkb19tbWFwKG9iai0+ZmlscCwgMCwgYXJncy0+c2l6ZSwKKwkJICAgICAgIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsIE1BUF9TSEFSRUQsCisJCSAgICAgICBhcmdzLT5vZmZzZXQpOworCXVwX3dyaXRlKCZjdXJyZW50LT5tbS0+bW1hcF9zZW0pOworCW11dGV4X2xvY2soJmRldi0+c3RydWN0X211dGV4KTsKKwlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZShvYmopOworCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOworCWlmIChJU19FUlIoKHZvaWQgKilhZGRyKSkKKwkJcmV0dXJuIGFkZHI7CisKKwlhcmdzLT5hZGRyX3B0ciA9ICh1aW50NjRfdCkgYWRkcjsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZAoraTkxNV9nZW1fb2JqZWN0X2ZyZWVfcGFnZV9saXN0KHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqKQoreworCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmpfcHJpdiA9IG9iai0+ZHJpdmVyX3ByaXZhdGU7CisJaW50IHBhZ2VfY291bnQgPSBvYmotPnNpemUgLyBQQUdFX1NJWkU7CisJaW50IGk7CisKKwlpZiAob2JqX3ByaXYtPnBhZ2VfbGlzdCA9PSBOVUxMKQorCQlyZXR1cm47CisKKworCWZvciAoaSA9IDA7IGkgPCBwYWdlX2NvdW50OyBpKyspCisJCWlmIChvYmpfcHJpdi0+cGFnZV9saXN0W2ldICE9IE5VTEwpIHsKKwkJCWlmIChvYmpfcHJpdi0+ZGlydHkpCisJCQkJc2V0X3BhZ2VfZGlydHkob2JqX3ByaXYtPnBhZ2VfbGlzdFtpXSk7CisJCQltYXJrX3BhZ2VfYWNjZXNzZWQob2JqX3ByaXYtPnBhZ2VfbGlzdFtpXSk7CisJCQlwYWdlX2NhY2hlX3JlbGVhc2Uob2JqX3ByaXYtPnBhZ2VfbGlzdFtpXSk7CisJCX0KKwlvYmpfcHJpdi0+ZGlydHkgPSAwOworCisJZHJtX2ZyZWUob2JqX3ByaXYtPnBhZ2VfbGlzdCwKKwkJIHBhZ2VfY291bnQgKiBzaXplb2Yoc3RydWN0IHBhZ2UgKiksCisJCSBEUk1fTUVNX0RSSVZFUik7CisJb2JqX3ByaXYtPnBhZ2VfbGlzdCA9IE5VTEw7Cit9CisKK3N0YXRpYyB2b2lkCitpOTE1X2dlbV9vYmplY3RfbW92ZV90b19hY3RpdmUoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmopCit7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IG9iai0+ZGV2OworCWRybV9pOTE1X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmpfcHJpdiA9IG9iai0+ZHJpdmVyX3ByaXZhdGU7CisKKwkvKiBBZGQgYSByZWZlcmVuY2UgaWYgd2UncmUgbmV3bHkgZW50ZXJpbmcgdGhlIGFjdGl2ZSBsaXN0LiAqLworCWlmICghb2JqX3ByaXYtPmFjdGl2ZSkgeworCQlkcm1fZ2VtX29iamVjdF9yZWZlcmVuY2Uob2JqKTsKKwkJb2JqX3ByaXYtPmFjdGl2ZSA9IDE7CisJfQorCS8qIE1vdmUgZnJvbSB3aGF0ZXZlciBsaXN0IHdlIHdlcmUgb24gdG8gdGhlIHRhaWwgb2YgZXhlY3V0aW9uLiAqLworCWxpc3RfbW92ZV90YWlsKCZvYmpfcHJpdi0+bGlzdCwKKwkJICAgICAgICZkZXZfcHJpdi0+bW0uYWN0aXZlX2xpc3QpOworfQorCisKK3N0YXRpYyB2b2lkCitpOTE1X2dlbV9vYmplY3RfbW92ZV90b19pbmFjdGl2ZShzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaikKK3sKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gb2JqLT5kZXY7CisJZHJtX2k5MTVfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9ial9wcml2ID0gb2JqLT5kcml2ZXJfcHJpdmF0ZTsKKworCWk5MTVfdmVyaWZ5X2luYWN0aXZlKGRldiwgX19GSUxFX18sIF9fTElORV9fKTsKKwlpZiAob2JqX3ByaXYtPnBpbl9jb3VudCAhPSAwKQorCQlsaXN0X2RlbF9pbml0KCZvYmpfcHJpdi0+bGlzdCk7CisJZWxzZQorCQlsaXN0X21vdmVfdGFpbCgmb2JqX3ByaXYtPmxpc3QsICZkZXZfcHJpdi0+bW0uaW5hY3RpdmVfbGlzdCk7CisKKwlpZiAob2JqX3ByaXYtPmFjdGl2ZSkgeworCQlvYmpfcHJpdi0+YWN0aXZlID0gMDsKKwkJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2Uob2JqKTsKKwl9CisJaTkxNV92ZXJpZnlfaW5hY3RpdmUoZGV2LCBfX0ZJTEVfXywgX19MSU5FX18pOworfQorCisvKioKKyAqIENyZWF0ZXMgYSBuZXcgc2VxdWVuY2UgbnVtYmVyLCBlbWl0dGluZyBhIHdyaXRlIG9mIGl0IHRvIHRoZSBzdGF0dXMgcGFnZQorICogcGx1cyBhbiBpbnRlcnJ1cHQsIHdoaWNoIHdpbGwgdHJpZ2dlciBpOTE1X3VzZXJfaW50ZXJydXB0X2hhbmRsZXIuCisgKgorICogTXVzdCBiZSBjYWxsZWQgd2l0aCBzdHJ1Y3RfbG9jayBoZWxkLgorICoKKyAqIFJldHVybmVkIHNlcXVlbmNlIG51bWJlcnMgYXJlIG5vbnplcm8gb24gc3VjY2Vzcy4KKyAqLworc3RhdGljIHVpbnQzMl90CitpOTE1X2FkZF9yZXF1ZXN0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHVpbnQzMl90IGZsdXNoX2RvbWFpbnMpCit7CisJZHJtX2k5MTVfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IGRybV9pOTE1X2dlbV9yZXF1ZXN0ICpyZXF1ZXN0OworCXVpbnQzMl90IHNlcW5vOworCWludCB3YXNfZW1wdHk7CisJUklOR19MT0NBTFM7CisKKwlyZXF1ZXN0ID0gZHJtX2NhbGxvYygxLCBzaXplb2YoKnJlcXVlc3QpLCBEUk1fTUVNX0RSSVZFUik7CisJaWYgKHJlcXVlc3QgPT0gTlVMTCkKKwkJcmV0dXJuIDA7CisKKwkvKiBHcmFiIHRoZSBzZXFubyB3ZSdyZSBnb2luZyB0byBtYWtlIHRoaXMgcmVxdWVzdCBiZSwgYW5kIGJ1bXAgdGhlCisJICogbmV4dCAoc2tpcHBpbmcgMCBzbyBpdCBjYW4gYmUgdGhlIHJlc2VydmVkIG5vLXNlcW5vIHZhbHVlKS4KKwkgKi8KKwlzZXFubyA9IGRldl9wcml2LT5tbS5uZXh0X2dlbV9zZXFubzsKKwlkZXZfcHJpdi0+bW0ubmV4dF9nZW1fc2Vxbm8rKzsKKwlpZiAoZGV2X3ByaXYtPm1tLm5leHRfZ2VtX3NlcW5vID09IDApCisJCWRldl9wcml2LT5tbS5uZXh0X2dlbV9zZXFubysrOworCisJQkVHSU5fTFBfUklORyg0KTsKKwlPVVRfUklORyhNSV9TVE9SRV9EV09SRF9JTkRFWCk7CisJT1VUX1JJTkcoSTkxNV9HRU1fSFdTX0lOREVYIDw8IE1JX1NUT1JFX0RXT1JEX0lOREVYX1NISUZUKTsKKwlPVVRfUklORyhzZXFubyk7CisKKwlPVVRfUklORyhNSV9VU0VSX0lOVEVSUlVQVCk7CisJQURWQU5DRV9MUF9SSU5HKCk7CisKKwlEUk1fREVCVUcoIiVkXG4iLCBzZXFubyk7CisKKwlyZXF1ZXN0LT5zZXFubyA9IHNlcW5vOworCXJlcXVlc3QtPmVtaXR0ZWRfamlmZmllcyA9IGppZmZpZXM7CisJcmVxdWVzdC0+Zmx1c2hfZG9tYWlucyA9IGZsdXNoX2RvbWFpbnM7CisJd2FzX2VtcHR5ID0gbGlzdF9lbXB0eSgmZGV2X3ByaXYtPm1tLnJlcXVlc3RfbGlzdCk7CisJbGlzdF9hZGRfdGFpbCgmcmVxdWVzdC0+bGlzdCwgJmRldl9wcml2LT5tbS5yZXF1ZXN0X2xpc3QpOworCisJaWYgKHdhc19lbXB0eSAmJiAhZGV2X3ByaXYtPm1tLnN1c3BlbmRlZCkKKwkJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZkZXZfcHJpdi0+bW0ucmV0aXJlX3dvcmssIEhaKTsKKwlyZXR1cm4gc2Vxbm87Cit9CisKKy8qKgorICogQ29tbWFuZCBleGVjdXRpb24gYmFycmllcgorICoKKyAqIEVuc3VyZXMgdGhhdCBhbGwgY29tbWFuZHMgaW4gdGhlIHJpbmcgYXJlIGZpbmlzaGVkCisgKiBiZWZvcmUgc2lnbmFsbGluZyB0aGUgQ1BVCisgKi8KK3N0YXRpYyB1aW50MzJfdAoraTkxNV9yZXRpcmVfY29tbWFuZHMoc3RydWN0IGRybV9kZXZpY2UgKmRldikKK3sKKwlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwl1aW50MzJfdCBjbWQgPSBNSV9GTFVTSCB8IE1JX05PX1dSSVRFX0ZMVVNIOworCXVpbnQzMl90IGZsdXNoX2RvbWFpbnMgPSAwOworCVJJTkdfTE9DQUxTOworCisJLyogVGhlIHNhbXBsZXIgYWx3YXlzIGdldHMgZmx1c2hlZCBvbiBpOTY1IChzaWdoKSAqLworCWlmIChJU19JOTY1RyhkZXYpKQorCQlmbHVzaF9kb21haW5zIHw9IEk5MTVfR0VNX0RPTUFJTl9TQU1QTEVSOworCUJFR0lOX0xQX1JJTkcoMik7CisJT1VUX1JJTkcoY21kKTsKKwlPVVRfUklORygwKTsgLyogbm9vcCAqLworCUFEVkFOQ0VfTFBfUklORygpOworCXJldHVybiBmbHVzaF9kb21haW5zOworfQorCisvKioKKyAqIE1vdmVzIGJ1ZmZlcnMgYXNzb2NpYXRlZCBvbmx5IHdpdGggdGhlIGdpdmVuIGFjdGl2ZSBzZXFubyBmcm9tIHRoZSBhY3RpdmUKKyAqIHRvIGluYWN0aXZlIGxpc3QsIHBvdGVudGlhbGx5IGZyZWVpbmcgdGhlbS4KKyAqLworc3RhdGljIHZvaWQKK2k5MTVfZ2VtX3JldGlyZV9yZXF1ZXN0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCisJCQlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3QgKnJlcXVlc3QpCit7CisJZHJtX2k5MTVfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisKKwkvKiBNb3ZlIGFueSBidWZmZXJzIG9uIHRoZSBhY3RpdmUgbGlzdCB0aGF0IGFyZSBubyBsb25nZXIgcmVmZXJlbmNlZAorCSAqIGJ5IHRoZSByaW5nYnVmZmVyIHRvIHRoZSBmbHVzaGluZy9pbmFjdGl2ZSBsaXN0cyBhcyBhcHByb3ByaWF0ZS4KKwkgKi8KKwl3aGlsZSAoIWxpc3RfZW1wdHkoJmRldl9wcml2LT5tbS5hY3RpdmVfbGlzdCkpIHsKKwkJc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmo7CisJCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmpfcHJpdjsKKworCQlvYmpfcHJpdiA9IGxpc3RfZmlyc3RfZW50cnkoJmRldl9wcml2LT5tbS5hY3RpdmVfbGlzdCwKKwkJCQkJICAgIHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0LAorCQkJCQkgICAgbGlzdCk7CisJCW9iaiA9IG9ial9wcml2LT5vYmo7CisKKwkJLyogSWYgdGhlIHNlcW5vIGJlaW5nIHJldGlyZWQgZG9lc24ndCBtYXRjaCB0aGUgb2xkZXN0IGluIHRoZQorCQkgKiBsaXN0LCB0aGVuIHRoZSBvbGRlc3QgaW4gdGhlIGxpc3QgbXVzdCBzdGlsbCBiZSBuZXdlciB0aGFuCisJCSAqIHRoaXMgc2Vxbm8uCisJCSAqLworCQlpZiAob2JqX3ByaXYtPmxhc3RfcmVuZGVyaW5nX3NlcW5vICE9IHJlcXVlc3QtPnNlcW5vKQorCQkJcmV0dXJuOworI2lmIFdBVENIX0xSVQorCQlEUk1fSU5GTygiJXM6IHJldGlyZSAlZCBtb3ZlcyB0byBpbmFjdGl2ZSBsaXN0ICVwXG4iLAorCQkJIF9fZnVuY19fLCByZXF1ZXN0LT5zZXFubywgb2JqKTsKKyNlbmRpZgorCisJCWlmIChvYmotPndyaXRlX2RvbWFpbiAhPSAwKSB7CisJCQlsaXN0X21vdmVfdGFpbCgmb2JqX3ByaXYtPmxpc3QsCisJCQkJICAgICAgICZkZXZfcHJpdi0+bW0uZmx1c2hpbmdfbGlzdCk7CisJCX0gZWxzZSB7CisJCQlpOTE1X2dlbV9vYmplY3RfbW92ZV90b19pbmFjdGl2ZShvYmopOworCQl9CisJfQorCisJaWYgKHJlcXVlc3QtPmZsdXNoX2RvbWFpbnMgIT0gMCkgeworCQlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqX3ByaXYsICpuZXh0OworCisJCS8qIENsZWFyIHRoZSB3cml0ZSBkb21haW4gYW5kIGFjdGl2aXR5IGZyb20gYW55IGJ1ZmZlcnMKKwkJICogdGhhdCBhcmUganVzdCB3YWl0aW5nIGZvciBhIGZsdXNoIG1hdGNoaW5nIHRoZSBvbmUgcmV0aXJlZC4KKwkJICovCisJCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShvYmpfcHJpdiwgbmV4dCwKKwkJCQkJICZkZXZfcHJpdi0+bW0uZmx1c2hpbmdfbGlzdCwgbGlzdCkgeworCQkJc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmogPSBvYmpfcHJpdi0+b2JqOworCisJCQlpZiAob2JqLT53cml0ZV9kb21haW4gJiByZXF1ZXN0LT5mbHVzaF9kb21haW5zKSB7CisJCQkJb2JqLT53cml0ZV9kb21haW4gPSAwOworCQkJCWk5MTVfZ2VtX29iamVjdF9tb3ZlX3RvX2luYWN0aXZlKG9iaik7CisJCQl9CisJCX0KKworCX0KK30KKworLyoqCisgKiBSZXR1cm5zIHRydWUgaWYgc2VxMSBpcyBsYXRlciB0aGFuIHNlcTIuCisgKi8KK3N0YXRpYyBpbnQKK2k5MTVfc2Vxbm9fcGFzc2VkKHVpbnQzMl90IHNlcTEsIHVpbnQzMl90IHNlcTIpCit7CisJcmV0dXJuIChpbnQzMl90KShzZXExIC0gc2VxMikgPj0gMDsKK30KKwordWludDMyX3QKK2k5MTVfZ2V0X2dlbV9zZXFubyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQoreworCWRybV9pOTE1X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCisJcmV0dXJuIFJFQURfSFdTUChkZXZfcHJpdiwgSTkxNV9HRU1fSFdTX0lOREVYKTsKK30KKworLyoqCisgKiBUaGlzIGZ1bmN0aW9uIGNsZWFycyB0aGUgcmVxdWVzdCBsaXN0IGFzIHNlcXVlbmNlIG51bWJlcnMgYXJlIHBhc3NlZC4KKyAqLwordm9pZAoraTkxNV9nZW1fcmV0aXJlX3JlcXVlc3RzKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCit7CisJZHJtX2k5MTVfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJdWludDMyX3Qgc2Vxbm87CisKKwlzZXFubyA9IGk5MTVfZ2V0X2dlbV9zZXFubyhkZXYpOworCisJd2hpbGUgKCFsaXN0X2VtcHR5KCZkZXZfcHJpdi0+bW0ucmVxdWVzdF9saXN0KSkgeworCQlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3QgKnJlcXVlc3Q7CisJCXVpbnQzMl90IHJldGlyaW5nX3NlcW5vOworCisJCXJlcXVlc3QgPSBsaXN0X2ZpcnN0X2VudHJ5KCZkZXZfcHJpdi0+bW0ucmVxdWVzdF9saXN0LAorCQkJCQkgICBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3QsCisJCQkJCSAgIGxpc3QpOworCQlyZXRpcmluZ19zZXFubyA9IHJlcXVlc3QtPnNlcW5vOworCisJCWlmIChpOTE1X3NlcW5vX3Bhc3NlZChzZXFubywgcmV0aXJpbmdfc2Vxbm8pIHx8CisJCSAgICBkZXZfcHJpdi0+bW0ud2VkZ2VkKSB7CisJCQlpOTE1X2dlbV9yZXRpcmVfcmVxdWVzdChkZXYsIHJlcXVlc3QpOworCisJCQlsaXN0X2RlbCgmcmVxdWVzdC0+bGlzdCk7CisJCQlkcm1fZnJlZShyZXF1ZXN0LCBzaXplb2YoKnJlcXVlc3QpLCBEUk1fTUVNX0RSSVZFUik7CisJCX0gZWxzZQorCQkJYnJlYWs7CisJfQorfQorCit2b2lkCitpOTE1X2dlbV9yZXRpcmVfd29ya19oYW5kbGVyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2OworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXY7CisKKwlkZXZfcHJpdiA9IGNvbnRhaW5lcl9vZih3b3JrLCBkcm1faTkxNV9wcml2YXRlX3QsCisJCQkJbW0ucmV0aXJlX3dvcmsud29yayk7CisJZGV2ID0gZGV2X3ByaXYtPmRldjsKKworCW11dGV4X2xvY2soJmRldi0+c3RydWN0X211dGV4KTsKKwlpOTE1X2dlbV9yZXRpcmVfcmVxdWVzdHMoZGV2KTsKKwlpZiAoIWRldl9wcml2LT5tbS5zdXNwZW5kZWQgJiYKKwkgICAgIWxpc3RfZW1wdHkoJmRldl9wcml2LT5tbS5yZXF1ZXN0X2xpc3QpKQorCQlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJmRldl9wcml2LT5tbS5yZXRpcmVfd29yaywgSFopOworCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOworfQorCisvKioKKyAqIFdhaXRzIGZvciBhIHNlcXVlbmNlIG51bWJlciB0byBiZSBzaWduYWxlZCwgYW5kIGNsZWFucyB1cCB0aGUKKyAqIHJlcXVlc3QgYW5kIG9iamVjdCBsaXN0cyBhcHByb3ByaWF0ZWx5IGZvciB0aGF0IGV2ZW50LgorICovCitzdGF0aWMgaW50CitpOTE1X3dhaXRfcmVxdWVzdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB1aW50MzJfdCBzZXFubykKK3sKKwlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlpbnQgcmV0ID0gMDsKKworCUJVR19PTihzZXFubyA9PSAwKTsKKworCWlmICghaTkxNV9zZXFub19wYXNzZWQoaTkxNV9nZXRfZ2VtX3NlcW5vKGRldiksIHNlcW5vKSkgeworCQlkZXZfcHJpdi0+bW0ud2FpdGluZ19nZW1fc2Vxbm8gPSBzZXFubzsKKwkJaTkxNV91c2VyX2lycV9nZXQoZGV2KTsKKwkJcmV0ID0gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKGRldl9wcml2LT5pcnFfcXVldWUsCisJCQkJCSAgICAgICBpOTE1X3NlcW5vX3Bhc3NlZChpOTE1X2dldF9nZW1fc2Vxbm8oZGV2KSwKKwkJCQkJCQkJIHNlcW5vKSB8fAorCQkJCQkgICAgICAgZGV2X3ByaXYtPm1tLndlZGdlZCk7CisJCWk5MTVfdXNlcl9pcnFfcHV0KGRldik7CisJCWRldl9wcml2LT5tbS53YWl0aW5nX2dlbV9zZXFubyA9IDA7CisJfQorCWlmIChkZXZfcHJpdi0+bW0ud2VkZ2VkKQorCQlyZXQgPSAtRUlPOworCisJaWYgKHJldCAmJiByZXQgIT0gLUVSRVNUQVJUU1lTKQorCQlEUk1fRVJST1IoIiVzIHJldHVybnMgJWQgKGF3YWl0aW5nICVkIGF0ICVkKVxuIiwKKwkJCSAgX19mdW5jX18sIHJldCwgc2Vxbm8sIGk5MTVfZ2V0X2dlbV9zZXFubyhkZXYpKTsKKworCS8qIERpcmVjdGx5IGRpc3BhdGNoIHJlcXVlc3QgcmV0aXJpbmcuICBXaGlsZSB3ZSBoYXZlIHRoZSB3b3JrIHF1ZXVlCisJICogdG8gaGFuZGxlIHRoaXMsIHRoZSB3YWl0ZXIgb24gYSByZXF1ZXN0IG9mdGVuIHdhbnRzIGFuIGFzc29jaWF0ZWQKKwkgKiBidWZmZXIgdG8gaGF2ZSBtYWRlIGl0IHRvIHRoZSBpbmFjdGl2ZSBsaXN0LCBhbmQgd2Ugd291bGQgbmVlZAorCSAqIGEgc2VwYXJhdGUgd2FpdCBxdWV1ZSB0byBoYW5kbGUgdGhhdC4KKwkgKi8KKwlpZiAocmV0ID09IDApCisJCWk5MTVfZ2VtX3JldGlyZV9yZXF1ZXN0cyhkZXYpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQKK2k5MTVfZ2VtX2ZsdXNoKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCisJICAgICAgIHVpbnQzMl90IGludmFsaWRhdGVfZG9tYWlucywKKwkgICAgICAgdWludDMyX3QgZmx1c2hfZG9tYWlucykKK3sKKwlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwl1aW50MzJfdCBjbWQ7CisJUklOR19MT0NBTFM7CisKKyNpZiBXQVRDSF9FWEVDCisJRFJNX0lORk8oIiVzOiBpbnZhbGlkYXRlICUwOHggZmx1c2ggJTA4eFxuIiwgX19mdW5jX18sCisJCSAgaW52YWxpZGF0ZV9kb21haW5zLCBmbHVzaF9kb21haW5zKTsKKyNlbmRpZgorCisJaWYgKGZsdXNoX2RvbWFpbnMgJiBJOTE1X0dFTV9ET01BSU5fQ1BVKQorCQlkcm1fYWdwX2NoaXBzZXRfZmx1c2goZGV2KTsKKworCWlmICgoaW52YWxpZGF0ZV9kb21haW5zIHwgZmx1c2hfZG9tYWlucykgJiB+KEk5MTVfR0VNX0RPTUFJTl9DUFUgfAorCQkJCQkJICAgICBJOTE1X0dFTV9ET01BSU5fR1RUKSkgeworCQkvKgorCQkgKiByZWFkL3dyaXRlIGNhY2hlczoKKwkJICoKKwkJICogSTkxNV9HRU1fRE9NQUlOX1JFTkRFUiBpcyBhbHdheXMgaW52YWxpZGF0ZWQsIGJ1dCBpcworCQkgKiBvbmx5IGZsdXNoZWQgaWYgTUlfTk9fV1JJVEVfRkxVU0ggaXMgdW5zZXQuICBPbiA5NjUsIGl0IGlzCisJCSAqIGFsc28gZmx1c2hlZCBhdCAyZCB2ZXJzdXMgM2QgcGlwZWxpbmUgc3dpdGNoZXMuCisJCSAqCisJCSAqIHJlYWQtb25seSBjYWNoZXM6CisJCSAqCisJCSAqIEk5MTVfR0VNX0RPTUFJTl9TQU1QTEVSIGlzIGZsdXNoZWQgb24gcHJlLTk2NSBpZgorCQkgKiBNSV9SRUFEX0ZMVVNIIGlzIHNldCwgYW5kIGlzIGFsd2F5cyBmbHVzaGVkIG9uIDk2NS4KKwkJICoKKwkJICogSTkxNV9HRU1fRE9NQUlOX0NPTU1BTkQgbWF5IG5vdCBleGlzdD8KKwkJICoKKwkJICogSTkxNV9HRU1fRE9NQUlOX0lOU1RSVUNUSU9OLCB3aGljaCBleGlzdHMgb24gOTY1LCBpcworCQkgKiBpbnZhbGlkYXRlZCB3aGVuIE1JX0VYRV9GTFVTSCBpcyBzZXQuCisJCSAqCisJCSAqIEk5MTVfR0VNX0RPTUFJTl9WRVJURVgsIHdoaWNoIGV4aXN0cyBvbiA5NjUsIGlzCisJCSAqIGludmFsaWRhdGVkIHdpdGggZXZlcnkgTUlfRkxVU0guCisJCSAqCisJCSAqIFRMQnM6CisJCSAqCisJCSAqIE9uIDk2NSwgVExCcyBhc3NvY2lhdGVkIHdpdGggSTkxNV9HRU1fRE9NQUlOX0NPTU1BTkQKKwkJICogYW5kIEk5MTVfR0VNX0RPTUFJTl9DUFUgaW4gYXJlIGludmFsaWRhdGVkIGF0IFBURSB3cml0ZSBhbmQKKwkJICogSTkxNV9HRU1fRE9NQUlOX1JFTkRFUiBhbmQgSTkxNV9HRU1fRE9NQUlOX1NBTVBMRVIKKwkJICogYXJlIGZsdXNoZWQgYXQgYW55IE1JX0ZMVVNILgorCQkgKi8KKworCQljbWQgPSBNSV9GTFVTSCB8IE1JX05PX1dSSVRFX0ZMVVNIOworCQlpZiAoKGludmFsaWRhdGVfZG9tYWluc3xmbHVzaF9kb21haW5zKSAmCisJCSAgICBJOTE1X0dFTV9ET01BSU5fUkVOREVSKQorCQkJY21kICY9IH5NSV9OT19XUklURV9GTFVTSDsKKwkJaWYgKCFJU19JOTY1RyhkZXYpKSB7CisJCQkvKgorCQkJICogT24gdGhlIDk2NSwgdGhlIHNhbXBsZXIgY2FjaGUgYWx3YXlzIGdldHMgZmx1c2hlZAorCQkJICogYW5kIHRoaXMgYml0IGlzIHJlc2VydmVkLgorCQkJICovCisJCQlpZiAoaW52YWxpZGF0ZV9kb21haW5zICYgSTkxNV9HRU1fRE9NQUlOX1NBTVBMRVIpCisJCQkJY21kIHw9IE1JX1JFQURfRkxVU0g7CisJCX0KKwkJaWYgKGludmFsaWRhdGVfZG9tYWlucyAmIEk5MTVfR0VNX0RPTUFJTl9JTlNUUlVDVElPTikKKwkJCWNtZCB8PSBNSV9FWEVfRkxVU0g7CisKKyNpZiBXQVRDSF9FWEVDCisJCURSTV9JTkZPKCIlczogcXVldWUgZmx1c2ggJTA4eCB0byByaW5nXG4iLCBfX2Z1bmNfXywgY21kKTsKKyNlbmRpZgorCQlCRUdJTl9MUF9SSU5HKDIpOworCQlPVVRfUklORyhjbWQpOworCQlPVVRfUklORygwKTsgLyogbm9vcCAqLworCQlBRFZBTkNFX0xQX1JJTkcoKTsKKwl9Cit9CisKKy8qKgorICogRW5zdXJlcyB0aGF0IGFsbCByZW5kZXJpbmcgdG8gdGhlIG9iamVjdCBoYXMgY29tcGxldGVkIGFuZCB0aGUgb2JqZWN0IGlzCisgKiBzYWZlIHRvIHVuYmluZCBmcm9tIHRoZSBHVFQgb3IgYWNjZXNzIGZyb20gdGhlIENQVS4KKyAqLworc3RhdGljIGludAoraTkxNV9nZW1fb2JqZWN0X3dhaXRfcmVuZGVyaW5nKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqKQoreworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBvYmotPmRldjsKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqX3ByaXYgPSBvYmotPmRyaXZlcl9wcml2YXRlOworCWludCByZXQ7CisKKwkvKiBJZiB0aGVyZSBhcmUgd3JpdGVzIHF1ZXVlZCB0byB0aGUgYnVmZmVyLCBmbHVzaCBhbmQKKwkgKiBjcmVhdGUgYSBuZXcgc2Vxbm8gdG8gd2FpdCBmb3IuCisJICovCisJaWYgKG9iai0+d3JpdGVfZG9tYWluICYgfihJOTE1X0dFTV9ET01BSU5fQ1BVfEk5MTVfR0VNX0RPTUFJTl9HVFQpKSB7CisJCXVpbnQzMl90IHdyaXRlX2RvbWFpbiA9IG9iai0+d3JpdGVfZG9tYWluOworI2lmIFdBVENIX0JVRgorCQlEUk1fSU5GTygiJXM6IGZsdXNoaW5nIG9iamVjdCAlcCBmcm9tIHdyaXRlIGRvbWFpbiAlMDh4XG4iLAorCQkJICBfX2Z1bmNfXywgb2JqLCB3cml0ZV9kb21haW4pOworI2VuZGlmCisJCWk5MTVfZ2VtX2ZsdXNoKGRldiwgMCwgd3JpdGVfZG9tYWluKTsKKworCQlpOTE1X2dlbV9vYmplY3RfbW92ZV90b19hY3RpdmUob2JqKTsKKwkJb2JqX3ByaXYtPmxhc3RfcmVuZGVyaW5nX3NlcW5vID0gaTkxNV9hZGRfcmVxdWVzdChkZXYsCisJCQkJCQkJCSAgd3JpdGVfZG9tYWluKTsKKwkJQlVHX09OKG9ial9wcml2LT5sYXN0X3JlbmRlcmluZ19zZXFubyA9PSAwKTsKKyNpZiBXQVRDSF9MUlUKKwkJRFJNX0lORk8oIiVzOiBmbHVzaCBtb3ZlcyB0byBleGVjIGxpc3QgJXBcbiIsIF9fZnVuY19fLCBvYmopOworI2VuZGlmCisJfQorCisJLyogSWYgdGhlcmUgaXMgcmVuZGVyaW5nIHF1ZXVlZCBvbiB0aGUgYnVmZmVyIGJlaW5nIGV2aWN0ZWQsIHdhaXQgZm9yCisJICogaXQuCisJICovCisJaWYgKG9ial9wcml2LT5hY3RpdmUpIHsKKyNpZiBXQVRDSF9CVUYKKwkJRFJNX0lORk8oIiVzOiBvYmplY3QgJXAgd2FpdCBmb3Igc2Vxbm8gJTA4eFxuIiwKKwkJCSAgX19mdW5jX18sIG9iaiwgb2JqX3ByaXYtPmxhc3RfcmVuZGVyaW5nX3NlcW5vKTsKKyNlbmRpZgorCQlyZXQgPSBpOTE1X3dhaXRfcmVxdWVzdChkZXYsIG9ial9wcml2LT5sYXN0X3JlbmRlcmluZ19zZXFubyk7CisJCWlmIChyZXQgIT0gMCkKKwkJCXJldHVybiByZXQ7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogVW5iaW5kcyBhbiBvYmplY3QgZnJvbSB0aGUgR1RUIGFwZXJ0dXJlLgorICovCitzdGF0aWMgaW50CitpOTE1X2dlbV9vYmplY3RfdW5iaW5kKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqKQoreworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBvYmotPmRldjsKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqX3ByaXYgPSBvYmotPmRyaXZlcl9wcml2YXRlOworCWludCByZXQgPSAwOworCisjaWYgV0FUQ0hfQlVGCisJRFJNX0lORk8oIiVzOiVkICVwXG4iLCBfX2Z1bmNfXywgX19MSU5FX18sIG9iaik7CisJRFJNX0lORk8oImd0dF9zcGFjZSAlcFxuIiwgb2JqX3ByaXYtPmd0dF9zcGFjZSk7CisjZW5kaWYKKwlpZiAob2JqX3ByaXYtPmd0dF9zcGFjZSA9PSBOVUxMKQorCQlyZXR1cm4gMDsKKworCWlmIChvYmpfcHJpdi0+cGluX2NvdW50ICE9IDApIHsKKwkJRFJNX0VSUk9SKCJBdHRlbXB0aW5nIHRvIHVuYmluZCBwaW5uZWQgYnVmZmVyXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogV2FpdCBmb3IgYW55IHJlbmRlcmluZyB0byBjb21wbGV0ZQorCSAqLworCXJldCA9IGk5MTVfZ2VtX29iamVjdF93YWl0X3JlbmRlcmluZyhvYmopOworCWlmIChyZXQpIHsKKwkJRFJNX0VSUk9SKCJ3YWl0X3JlbmRlcmluZyBmYWlsZWQ6ICVkXG4iLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCS8qIE1vdmUgdGhlIG9iamVjdCB0byB0aGUgQ1BVIGRvbWFpbiB0byBlbnN1cmUgdGhhdAorCSAqIGFueSBwb3NzaWJsZSBDUFUgd3JpdGVzIHdoaWxlIGl0J3Mgbm90IGluIHRoZSBHVFQKKwkgKiBhcmUgZmx1c2hlZCB3aGVuIHdlIGdvIHRvIHJlbWFwIGl0LiBUaGlzIHdpbGwKKwkgKiBhbHNvIGVuc3VyZSB0aGF0IGFsbCBwZW5kaW5nIEdQVSB3cml0ZXMgYXJlIGZpbmlzaGVkCisJICogYmVmb3JlIHdlIHVuYmluZC4KKwkgKi8KKwlyZXQgPSBpOTE1X2dlbV9vYmplY3Rfc2V0X2RvbWFpbihvYmosIEk5MTVfR0VNX0RPTUFJTl9DUFUsCisJCQkJCSBJOTE1X0dFTV9ET01BSU5fQ1BVKTsKKwlpZiAocmV0KSB7CisJCURSTV9FUlJPUigic2V0X2RvbWFpbiBmYWlsZWQ6ICVkXG4iLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCWlmIChvYmpfcHJpdi0+YWdwX21lbSAhPSBOVUxMKSB7CisJCWRybV91bmJpbmRfYWdwKG9ial9wcml2LT5hZ3BfbWVtKTsKKwkJZHJtX2ZyZWVfYWdwKG9ial9wcml2LT5hZ3BfbWVtLCBvYmotPnNpemUgLyBQQUdFX1NJWkUpOworCQlvYmpfcHJpdi0+YWdwX21lbSA9IE5VTEw7CisJfQorCisJQlVHX09OKG9ial9wcml2LT5hY3RpdmUpOworCisJaTkxNV9nZW1fb2JqZWN0X2ZyZWVfcGFnZV9saXN0KG9iaik7CisKKwlpZiAob2JqX3ByaXYtPmd0dF9zcGFjZSkgeworCQlhdG9taWNfZGVjKCZkZXYtPmd0dF9jb3VudCk7CisJCWF0b21pY19zdWIob2JqLT5zaXplLCAmZGV2LT5ndHRfbWVtb3J5KTsKKworCQlkcm1fbW1fcHV0X2Jsb2NrKG9ial9wcml2LT5ndHRfc3BhY2UpOworCQlvYmpfcHJpdi0+Z3R0X3NwYWNlID0gTlVMTDsKKwl9CisKKwkvKiBSZW1vdmUgb3Vyc2VsdmVzIGZyb20gdGhlIExSVSBsaXN0IGlmIHByZXNlbnQuICovCisJaWYgKCFsaXN0X2VtcHR5KCZvYmpfcHJpdi0+bGlzdCkpCisJCWxpc3RfZGVsX2luaXQoJm9ial9wcml2LT5saXN0KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50CitpOTE1X2dlbV9ldmljdF9zb21ldGhpbmcoc3RydWN0IGRybV9kZXZpY2UgKmRldikKK3sKKwlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iajsKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqX3ByaXY7CisJaW50IHJldCA9IDA7CisKKwlmb3IgKDs7KSB7CisJCS8qIElmIHRoZXJlJ3MgYW4gaW5hY3RpdmUgYnVmZmVyIGF2YWlsYWJsZSBub3csIGdyYWIgaXQKKwkJICogYW5kIGJlIGRvbmUuCisJCSAqLworCQlpZiAoIWxpc3RfZW1wdHkoJmRldl9wcml2LT5tbS5pbmFjdGl2ZV9saXN0KSkgeworCQkJb2JqX3ByaXYgPSBsaXN0X2ZpcnN0X2VudHJ5KCZkZXZfcHJpdi0+bW0uaW5hY3RpdmVfbGlzdCwKKwkJCQkJCSAgICBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCwKKwkJCQkJCSAgICBsaXN0KTsKKwkJCW9iaiA9IG9ial9wcml2LT5vYmo7CisJCQlCVUdfT04ob2JqX3ByaXYtPnBpbl9jb3VudCAhPSAwKTsKKyNpZiBXQVRDSF9MUlUKKwkJCURSTV9JTkZPKCIlczogZXZpY3RpbmcgJXBcbiIsIF9fZnVuY19fLCBvYmopOworI2VuZGlmCisJCQlCVUdfT04ob2JqX3ByaXYtPmFjdGl2ZSk7CisKKwkJCS8qIFdhaXQgb24gdGhlIHJlbmRlcmluZyBhbmQgdW5iaW5kIHRoZSBidWZmZXIuICovCisJCQlyZXQgPSBpOTE1X2dlbV9vYmplY3RfdW5iaW5kKG9iaik7CisJCQlicmVhazsKKwkJfQorCisJCS8qIElmIHdlIGRpZG4ndCBnZXQgYW55dGhpbmcsIGJ1dCB0aGUgcmluZyBpcyBzdGlsbCBwcm9jZXNzaW5nCisJCSAqIHRoaW5ncywgd2FpdCBmb3Igb25lIG9mIHRob3NlIHRoaW5ncyB0byBmaW5pc2ggYW5kIGhvcGVmdWxseQorCQkgKiBsZWF2ZSB1cyBhIGJ1ZmZlciB0byBldmljdC4KKwkJICovCisJCWlmICghbGlzdF9lbXB0eSgmZGV2X3ByaXYtPm1tLnJlcXVlc3RfbGlzdCkpIHsKKwkJCXN0cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVzdCAqcmVxdWVzdDsKKworCQkJcmVxdWVzdCA9IGxpc3RfZmlyc3RfZW50cnkoJmRldl9wcml2LT5tbS5yZXF1ZXN0X2xpc3QsCisJCQkJCQkgICBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3QsCisJCQkJCQkgICBsaXN0KTsKKworCQkJcmV0ID0gaTkxNV93YWl0X3JlcXVlc3QoZGV2LCByZXF1ZXN0LT5zZXFubyk7CisJCQlpZiAocmV0KQorCQkJCWJyZWFrOworCisJCQkvKiBpZiB3YWl0aW5nIGNhdXNlZCBhbiBvYmplY3QgdG8gYmVjb21lIGluYWN0aXZlLAorCQkJICogdGhlbiBsb29wIGFyb3VuZCBhbmQgd2FpdCBmb3IgaXQuIE90aGVyd2lzZSwgd2UKKwkJCSAqIGFzc3VtZSB0aGF0IHdhaXRpbmcgZnJlZWQgYW5kIHVuYm91bmQgc29tZXRoaW5nLAorCQkJICogc28gdGhlcmUgc2hvdWxkIG5vdyBiZSBzb21lIHNwYWNlIGluIHRoZSBHVFQKKwkJCSAqLworCQkJaWYgKCFsaXN0X2VtcHR5KCZkZXZfcHJpdi0+bW0uaW5hY3RpdmVfbGlzdCkpCisJCQkJY29udGludWU7CisJCQlicmVhazsKKwkJfQorCisJCS8qIElmIHdlIGRpZG4ndCBoYXZlIGFueXRoaW5nIG9uIHRoZSByZXF1ZXN0IGxpc3QgYnV0IHRoZXJlCisJCSAqIGFyZSBidWZmZXJzIGF3YWl0aW5nIGEgZmx1c2gsIGVtaXQgb25lIGFuZCB0cnkgYWdhaW4uCisJCSAqIFdoZW4gd2Ugd2FpdCBvbiBpdCwgdGhvc2UgYnVmZmVycyB3YWl0aW5nIGZvciB0aGF0IGZsdXNoCisJCSAqIHdpbGwgZ2V0IG1vdmVkIHRvIGluYWN0aXZlLgorCQkgKi8KKwkJaWYgKCFsaXN0X2VtcHR5KCZkZXZfcHJpdi0+bW0uZmx1c2hpbmdfbGlzdCkpIHsKKwkJCW9ial9wcml2ID0gbGlzdF9maXJzdF9lbnRyeSgmZGV2X3ByaXYtPm1tLmZsdXNoaW5nX2xpc3QsCisJCQkJCQkgICAgc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QsCisJCQkJCQkgICAgbGlzdCk7CisJCQlvYmogPSBvYmpfcHJpdi0+b2JqOworCisJCQlpOTE1X2dlbV9mbHVzaChkZXYsCisJCQkJICAgICAgIG9iai0+d3JpdGVfZG9tYWluLAorCQkJCSAgICAgICBvYmotPndyaXRlX2RvbWFpbik7CisJCQlpOTE1X2FkZF9yZXF1ZXN0KGRldiwgb2JqLT53cml0ZV9kb21haW4pOworCisJCQlvYmogPSBOVUxMOworCQkJY29udGludWU7CisJCX0KKworCQlEUk1fRVJST1IoImluYWN0aXZlIGVtcHR5ICVkIHJlcXVlc3QgZW1wdHkgJWQgIgorCQkJICAiZmx1c2hpbmcgZW1wdHkgJWRcbiIsCisJCQkgIGxpc3RfZW1wdHkoJmRldl9wcml2LT5tbS5pbmFjdGl2ZV9saXN0KSwKKwkJCSAgbGlzdF9lbXB0eSgmZGV2X3ByaXYtPm1tLnJlcXVlc3RfbGlzdCksCisJCQkgIGxpc3RfZW1wdHkoJmRldl9wcml2LT5tbS5mbHVzaGluZ19saXN0KSk7CisJCS8qIElmIHdlIGRpZG4ndCBkbyBhbnkgb2YgdGhlIGFib3ZlLCB0aGVyZSdzIG5vdGhpbmcgdG8gYmUgZG9uZQorCQkgKiBhbmQgd2UganVzdCBjYW4ndCBmaXQgaXQgaW4uCisJCSAqLworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludAoraTkxNV9nZW1fb2JqZWN0X2dldF9wYWdlX2xpc3Qoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmopCit7CisJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9ial9wcml2ID0gb2JqLT5kcml2ZXJfcHJpdmF0ZTsKKwlpbnQgcGFnZV9jb3VudCwgaTsKKwlzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZzsKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlOworCXN0cnVjdCBwYWdlICpwYWdlOworCWludCByZXQ7CisKKwlpZiAob2JqX3ByaXYtPnBhZ2VfbGlzdCkKKwkJcmV0dXJuIDA7CisKKwkvKiBHZXQgdGhlIGxpc3Qgb2YgcGFnZXMgb3V0IG9mIG91ciBzdHJ1Y3QgZmlsZS4gIFRoZXknbGwgYmUgcGlubmVkCisJICogYXQgdGhpcyBwb2ludCB1bnRpbCB3ZSByZWxlYXNlIHRoZW0uCisJICovCisJcGFnZV9jb3VudCA9IG9iai0+c2l6ZSAvIFBBR0VfU0laRTsKKwlCVUdfT04ob2JqX3ByaXYtPnBhZ2VfbGlzdCAhPSBOVUxMKTsKKwlvYmpfcHJpdi0+cGFnZV9saXN0ID0gZHJtX2NhbGxvYyhwYWdlX2NvdW50LCBzaXplb2Yoc3RydWN0IHBhZ2UgKiksCisJCQkJCSBEUk1fTUVNX0RSSVZFUik7CisJaWYgKG9ial9wcml2LT5wYWdlX2xpc3QgPT0gTlVMTCkgeworCQlEUk1fRVJST1IoIkZhbGVkIHRvIGFsbG9jYXRlIHBhZ2UgbGlzdFxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCWlub2RlID0gb2JqLT5maWxwLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlOworCW1hcHBpbmcgPSBpbm9kZS0+aV9tYXBwaW5nOworCWZvciAoaSA9IDA7IGkgPCBwYWdlX2NvdW50OyBpKyspIHsKKwkJcGFnZSA9IHJlYWRfbWFwcGluZ19wYWdlKG1hcHBpbmcsIGksIE5VTEwpOworCQlpZiAoSVNfRVJSKHBhZ2UpKSB7CisJCQlyZXQgPSBQVFJfRVJSKHBhZ2UpOworCQkJRFJNX0VSUk9SKCJyZWFkX21hcHBpbmdfcGFnZSBmYWlsZWQ6ICVkXG4iLCByZXQpOworCQkJaTkxNV9nZW1fb2JqZWN0X2ZyZWVfcGFnZV9saXN0KG9iaik7CisJCQlyZXR1cm4gcmV0OworCQl9CisJCW9ial9wcml2LT5wYWdlX2xpc3RbaV0gPSBwYWdlOworCX0KKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBGaW5kcyBmcmVlIHNwYWNlIGluIHRoZSBHVFQgYXBlcnR1cmUgYW5kIGJpbmRzIHRoZSBvYmplY3QgdGhlcmUuCisgKi8KK3N0YXRpYyBpbnQKK2k5MTVfZ2VtX29iamVjdF9iaW5kX3RvX2d0dChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiwgdW5zaWduZWQgYWxpZ25tZW50KQoreworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBvYmotPmRldjsKKwlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqX3ByaXYgPSBvYmotPmRyaXZlcl9wcml2YXRlOworCXN0cnVjdCBkcm1fbW1fbm9kZSAqZnJlZV9zcGFjZTsKKwlpbnQgcGFnZV9jb3VudCwgcmV0OworCisJaWYgKGFsaWdubWVudCA9PSAwKQorCQlhbGlnbm1lbnQgPSBQQUdFX1NJWkU7CisJaWYgKGFsaWdubWVudCAmIChQQUdFX1NJWkUgLSAxKSkgeworCQlEUk1fRVJST1IoIkludmFsaWQgb2JqZWN0IGFsaWdubWVudCByZXF1ZXN0ZWQgJXVcbiIsIGFsaWdubWVudCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworIHNlYXJjaF9mcmVlOgorCWZyZWVfc3BhY2UgPSBkcm1fbW1fc2VhcmNoX2ZyZWUoJmRldl9wcml2LT5tbS5ndHRfc3BhY2UsCisJCQkJCW9iai0+c2l6ZSwgYWxpZ25tZW50LCAwKTsKKwlpZiAoZnJlZV9zcGFjZSAhPSBOVUxMKSB7CisJCW9ial9wcml2LT5ndHRfc3BhY2UgPSBkcm1fbW1fZ2V0X2Jsb2NrKGZyZWVfc3BhY2UsIG9iai0+c2l6ZSwKKwkJCQkJCSAgICAgICBhbGlnbm1lbnQpOworCQlpZiAob2JqX3ByaXYtPmd0dF9zcGFjZSAhPSBOVUxMKSB7CisJCQlvYmpfcHJpdi0+Z3R0X3NwYWNlLT5wcml2YXRlID0gb2JqOworCQkJb2JqX3ByaXYtPmd0dF9vZmZzZXQgPSBvYmpfcHJpdi0+Z3R0X3NwYWNlLT5zdGFydDsKKwkJfQorCX0KKwlpZiAob2JqX3ByaXYtPmd0dF9zcGFjZSA9PSBOVUxMKSB7CisJCS8qIElmIHRoZSBndHQgaXMgZW1wdHkgYW5kIHdlJ3JlIHN0aWxsIGhhdmluZyB0cm91YmxlCisJCSAqIGZpdHRpbmcgb3VyIG9iamVjdCBpbiwgd2UncmUgb3V0IG9mIG1lbW9yeS4KKwkJICovCisjaWYgV0FUQ0hfTFJVCisJCURSTV9JTkZPKCIlczogR1RUIGZ1bGwsIGV2aWN0aW5nIHNvbWV0aGluZ1xuIiwgX19mdW5jX18pOworI2VuZGlmCisJCWlmIChsaXN0X2VtcHR5KCZkZXZfcHJpdi0+bW0uaW5hY3RpdmVfbGlzdCkgJiYKKwkJICAgIGxpc3RfZW1wdHkoJmRldl9wcml2LT5tbS5mbHVzaGluZ19saXN0KSAmJgorCQkgICAgbGlzdF9lbXB0eSgmZGV2X3ByaXYtPm1tLmFjdGl2ZV9saXN0KSkgeworCQkJRFJNX0VSUk9SKCJHVFQgZnVsbCwgYnV0IExSVSBsaXN0IGVtcHR5XG4iKTsKKwkJCXJldHVybiAtRU5PTUVNOworCQl9CisKKwkJcmV0ID0gaTkxNV9nZW1fZXZpY3Rfc29tZXRoaW5nKGRldik7CisJCWlmIChyZXQgIT0gMCkgeworCQkJRFJNX0VSUk9SKCJGYWlsZWQgdG8gZXZpY3QgYSBidWZmZXIgJWRcbiIsIHJldCk7CisJCQlyZXR1cm4gcmV0OworCQl9CisJCWdvdG8gc2VhcmNoX2ZyZWU7CisJfQorCisjaWYgV0FUQ0hfQlVGCisJRFJNX0lORk8oIkJpbmRpbmcgb2JqZWN0IG9mIHNpemUgJWQgYXQgMHglMDh4XG4iLAorCQkgb2JqLT5zaXplLCBvYmpfcHJpdi0+Z3R0X29mZnNldCk7CisjZW5kaWYKKwlyZXQgPSBpOTE1X2dlbV9vYmplY3RfZ2V0X3BhZ2VfbGlzdChvYmopOworCWlmIChyZXQpIHsKKwkJZHJtX21tX3B1dF9ibG9jayhvYmpfcHJpdi0+Z3R0X3NwYWNlKTsKKwkJb2JqX3ByaXYtPmd0dF9zcGFjZSA9IE5VTEw7CisJCXJldHVybiByZXQ7CisJfQorCisJcGFnZV9jb3VudCA9IG9iai0+c2l6ZSAvIFBBR0VfU0laRTsKKwkvKiBDcmVhdGUgYW4gQUdQIG1lbW9yeSBzdHJ1Y3R1cmUgcG9pbnRpbmcgYXQgb3VyIHBhZ2VzLCBhbmQgYmluZCBpdAorCSAqIGludG8gdGhlIEdUVC4KKwkgKi8KKwlvYmpfcHJpdi0+YWdwX21lbSA9IGRybV9hZ3BfYmluZF9wYWdlcyhkZXYsCisJCQkJCSAgICAgICBvYmpfcHJpdi0+cGFnZV9saXN0LAorCQkJCQkgICAgICAgcGFnZV9jb3VudCwKKwkJCQkJICAgICAgIG9ial9wcml2LT5ndHRfb2Zmc2V0LAorCQkJCQkgICAgICAgb2JqX3ByaXYtPmFncF90eXBlKTsKKwlpZiAob2JqX3ByaXYtPmFncF9tZW0gPT0gTlVMTCkgeworCQlpOTE1X2dlbV9vYmplY3RfZnJlZV9wYWdlX2xpc3Qob2JqKTsKKwkJZHJtX21tX3B1dF9ibG9jayhvYmpfcHJpdi0+Z3R0X3NwYWNlKTsKKwkJb2JqX3ByaXYtPmd0dF9zcGFjZSA9IE5VTEw7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwlhdG9taWNfaW5jKCZkZXYtPmd0dF9jb3VudCk7CisJYXRvbWljX2FkZChvYmotPnNpemUsICZkZXYtPmd0dF9tZW1vcnkpOworCisJLyogQXNzZXJ0IHRoYXQgdGhlIG9iamVjdCBpcyBub3QgY3VycmVudGx5IGluIGFueSBHUFUgZG9tYWluLiBBcyBpdAorCSAqIHdhc24ndCBpbiB0aGUgR1RULCB0aGVyZSBzaG91bGRuJ3QgYmUgYW55IHdheSBpdCBjb3VsZCBoYXZlIGJlZW4gaW4KKwkgKiBhIEdQVSBjYWNoZQorCSAqLworCUJVR19PTihvYmotPnJlYWRfZG9tYWlucyAmIH4oSTkxNV9HRU1fRE9NQUlOX0NQVXxJOTE1X0dFTV9ET01BSU5fR1RUKSk7CisJQlVHX09OKG9iai0+d3JpdGVfZG9tYWluICYgfihJOTE1X0dFTV9ET01BSU5fQ1BVfEk5MTVfR0VNX0RPTUFJTl9HVFQpKTsKKworCXJldHVybiAwOworfQorCit2b2lkCitpOTE1X2dlbV9jbGZsdXNoX29iamVjdChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaikKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdAkqb2JqX3ByaXYgPSBvYmotPmRyaXZlcl9wcml2YXRlOworCisJLyogSWYgd2UgZG9uJ3QgaGF2ZSBhIHBhZ2UgbGlzdCBzZXQgdXAsIHRoZW4gd2UncmUgbm90IHBpbm5lZAorCSAqIHRvIEdQVSwgYW5kIHdlIGNhbiBpZ25vcmUgdGhlIGNhY2hlIGZsdXNoIGJlY2F1c2UgaXQnbGwgaGFwcGVuCisJICogYWdhaW4gYXQgYmluZCB0aW1lLgorCSAqLworCWlmIChvYmpfcHJpdi0+cGFnZV9saXN0ID09IE5VTEwpCisJCXJldHVybjsKKworCWRybV9jbGZsdXNoX3BhZ2VzKG9ial9wcml2LT5wYWdlX2xpc3QsIG9iai0+c2l6ZSAvIFBBR0VfU0laRSk7Cit9CisKKy8qCisgKiBTZXQgdGhlIG5leHQgZG9tYWluIGZvciB0aGUgc3BlY2lmaWVkIG9iamVjdC4gVGhpcworICogbWF5IG5vdCBhY3R1YWxseSBwZXJmb3JtIHRoZSBuZWNlc3NhcnkgZmx1c2hpbmcvaW52YWxpZGluZyB0aG91Z2gsCisgKiBhcyB0aGF0IG1heSB3YW50IHRvIGJlIGJhdGNoZWQgd2l0aCBvdGhlciBzZXRfZG9tYWluIG9wZXJhdGlvbnMKKyAqCisgKiBUaGlzIGlzICh3ZSBob3BlKSB0aGUgb25seSByZWFsbHkgdHJpY2t5IHBhcnQgb2YgZ2VtLiBUaGUgZ29hbAorICogaXMgZmFpcmx5IHNpbXBsZSAtLSB0cmFjayB3aGljaCBjYWNoZXMgaG9sZCBiaXRzIG9mIHRoZSBvYmplY3QKKyAqIGFuZCBtYWtlIHN1cmUgdGhleSByZW1haW4gY29oZXJlbnQuIEEgZmV3IGNvbmNyZXRlIGV4YW1wbGVzIG1heQorICogaGVscCB0byBleHBsYWluIGhvdyBpdCB3b3Jrcy4gRm9yIHNob3J0aGFuZCwgd2UgdXNlIHRoZSBub3RhdGlvbgorICogKHJlYWRfZG9tYWlucywgd3JpdGVfZG9tYWluKSwgZS5nLiAoQ1BVLCBDUFUpIHRvIGluZGljYXRlIHRoZQorICogYSBwYWlyIG9mIHJlYWQgYW5kIHdyaXRlIGRvbWFpbiBtYXNrcy4KKyAqCisgKiBDYXNlIDE6IHRoZSBiYXRjaCBidWZmZXIKKyAqCisgKgkxLiBBbGxvY2F0ZWQKKyAqCTIuIFdyaXR0ZW4gYnkgQ1BVCisgKgkzLiBNYXBwZWQgdG8gR1RUCisgKgk0LiBSZWFkIGJ5IEdQVQorICoJNS4gVW5tYXBwZWQgZnJvbSBHVFQKKyAqCTYuIEZyZWVkCisgKgorICoJTGV0J3MgdGFrZSB0aGVzZSBhIHN0ZXAgYXQgYSB0aW1lCisgKgorICoJMS4gQWxsb2NhdGVkCisgKgkJUGFnZXMgYWxsb2NhdGVkIGZyb20gdGhlIGtlcm5lbCBtYXkgc3RpbGwgaGF2ZQorICoJCWNhY2hlIGNvbnRlbnRzLCBzbyB3ZSBzZXQgdGhlbSB0byAoQ1BVLCBDUFUpIGFsd2F5cy4KKyAqCTIuIFdyaXR0ZW4gYnkgQ1BVICh1c2luZyBwd3JpdGUpCisgKgkJVGhlIHB3cml0ZSBmdW5jdGlvbiBjYWxscyBzZXRfZG9tYWluIChDUFUsIENQVSkgYW5kCisgKgkJdGhpcyBmdW5jdGlvbiBkb2VzIG5vdGhpbmcgKGFzIG5vdGhpbmcgY2hhbmdlcykKKyAqCTMuIE1hcHBlZCBieSBHVFQKKyAqCQlUaGlzIGZ1bmN0aW9uIGFzc2VydHMgdGhhdCB0aGUgb2JqZWN0IGlzIG5vdAorICoJCWN1cnJlbnRseSBpbiBhbnkgR1BVLWJhc2VkIHJlYWQgb3Igd3JpdGUgZG9tYWlucworICoJNC4gUmVhZCBieSBHUFUKKyAqCQlpOTE1X2dlbV9leGVjYnVmZmVyIGNhbGxzIHNldF9kb21haW4gKENPTU1BTkQsIDApLgorICoJCUFzIHdyaXRlX2RvbWFpbiBpcyB6ZXJvLCB0aGlzIGZ1bmN0aW9uIGFkZHMgaW4gdGhlCisgKgkJY3VycmVudCByZWFkIGRvbWFpbnMgKENQVStDT01NQU5ELCAwKS4KKyAqCQlmbHVzaF9kb21haW5zIGlzIHNldCB0byBDUFUuCisgKgkJaW52YWxpZGF0ZV9kb21haW5zIGlzIHNldCB0byBDT01NQU5ECisgKgkJY2xmbHVzaCBpcyBydW4gdG8gZ2V0IGRhdGEgb3V0IG9mIHRoZSBDUFUgY2FjaGVzCisgKgkJdGhlbiBpOTE1X2Rldl9zZXRfZG9tYWluIGNhbGxzIGk5MTVfZ2VtX2ZsdXNoIHRvCisgKgkJZW1pdCBhbiBNSV9GTFVTSCBhbmQgZHJtX2FncF9jaGlwc2V0X2ZsdXNoCisgKgk1LiBVbm1hcHBlZCBmcm9tIEdUVAorICoJCWk5MTVfZ2VtX29iamVjdF91bmJpbmQgY2FsbHMgc2V0X2RvbWFpbiAoQ1BVLCBDUFUpCisgKgkJZmx1c2hfZG9tYWlucyBhbmQgaW52YWxpZGF0ZV9kb21haW5zIGVuZCB1cCBib3RoIHplcm8KKyAqCQlzbyBubyBmbHVzaGluZy9pbnZhbGlkYXRpbmcgaGFwcGVucworICoJNi4gRnJlZWQKKyAqCQl5YXksIGRvbmUKKyAqCisgKiBDYXNlIDI6IFRoZSBzaGFyZWQgcmVuZGVyIGJ1ZmZlcgorICoKKyAqCTEuIEFsbG9jYXRlZAorICoJMi4gTWFwcGVkIHRvIEdUVAorICoJMy4gUmVhZC93cml0dGVuIGJ5IEdQVQorICoJNC4gc2V0X2RvbWFpbiB0byAoQ1BVLENQVSkKKyAqCTUuIFJlYWQvd3JpdHRlbiBieSBDUFUKKyAqCTYuIFJlYWQvd3JpdHRlbiBieSBHUFUKKyAqCisgKgkxLiBBbGxvY2F0ZWQKKyAqCQlTYW1lIGFzIGxhc3QgZXhhbXBsZSwgKENQVSwgQ1BVKQorICoJMi4gTWFwcGVkIHRvIEdUVAorICoJCU5vdGhpbmcgY2hhbmdlcyAoYXNzZXJ0aW9ucyBmaW5kIHRoYXQgaXQgaXMgbm90IGluIHRoZSBHUFUpCisgKgkzLiBSZWFkL3dyaXR0ZW4gYnkgR1BVCisgKgkJZXhlY2J1ZmZlciBjYWxscyBzZXRfZG9tYWluIChSRU5ERVIsIFJFTkRFUikKKyAqCQlmbHVzaF9kb21haW5zIGdldHMgQ1BVCisgKgkJaW52YWxpZGF0ZV9kb21haW5zIGdldHMgR1BVCisgKgkJY2xmbHVzaCAob2JqKQorICoJCU1JX0ZMVVNIIGFuZCBkcm1fYWdwX2NoaXBzZXRfZmx1c2gKKyAqCTQuIHNldF9kb21haW4gKENQVSwgQ1BVKQorICoJCWZsdXNoX2RvbWFpbnMgZ2V0cyBHUFUKKyAqCQlpbnZhbGlkYXRlX2RvbWFpbnMgZ2V0cyBDUFUKKyAqCQl3YWl0X3JlbmRlcmluZyAob2JqKSB0byBtYWtlIHN1cmUgYWxsIGRyYXdpbmcgaXMgY29tcGxldGUuCisgKgkJVGhpcyB3aWxsIGluY2x1ZGUgYW4gTUlfRkxVU0ggdG8gZ2V0IHRoZSBkYXRhIGZyb20gR1BVCisgKgkJdG8gbWVtb3J5CisgKgkJY2xmbHVzaCAob2JqKSB0byBpbnZhbGlkYXRlIHRoZSBDUFUgY2FjaGUKKyAqCQlBbm90aGVyIE1JX0ZMVVNIIGluIGk5MTVfZ2VtX2ZsdXNoIChlbGltaW5hdGUgdGhpcyBzb21laG93PykKKyAqCTUuIFJlYWQvd3JpdHRlbiBieSBDUFUKKyAqCQljYWNoZSBsaW5lcyBhcmUgbG9hZGVkIGFuZCBkaXJ0aWVkCisgKgk2LiBSZWFkIHdyaXR0ZW4gYnkgR1BVCisgKgkJU2FtZSBhcyBsYXN0IEdQVSBhY2Nlc3MKKyAqCisgKiBDYXNlIDM6IFRoZSBjb25zdGFudCBidWZmZXIKKyAqCisgKgkxLiBBbGxvY2F0ZWQKKyAqCTIuIFdyaXR0ZW4gYnkgQ1BVCisgKgkzLiBSZWFkIGJ5IEdQVQorICoJNC4gVXBkYXRlZCAod3JpdHRlbikgYnkgQ1BVIGFnYWluCisgKgk1LiBSZWFkIGJ5IEdQVQorICoKKyAqCTEuIEFsbG9jYXRlZAorICoJCShDUFUsIENQVSkKKyAqCTIuIFdyaXR0ZW4gYnkgQ1BVCisgKgkJKENQVSwgQ1BVKQorICoJMy4gUmVhZCBieSBHUFUKKyAqCQkoQ1BVK1JFTkRFUiwgMCkKKyAqCQlmbHVzaF9kb21haW5zID0gQ1BVCisgKgkJaW52YWxpZGF0ZV9kb21haW5zID0gUkVOREVSCisgKgkJY2xmbHVzaCAob2JqKQorICoJCU1JX0ZMVVNICisgKgkJZHJtX2FncF9jaGlwc2V0X2ZsdXNoCisgKgk0LiBVcGRhdGVkICh3cml0dGVuKSBieSBDUFUgYWdhaW4KKyAqCQkoQ1BVLCBDUFUpCisgKgkJZmx1c2hfZG9tYWlucyA9IDAgKG5vIHByZXZpb3VzIHdyaXRlIGRvbWFpbikKKyAqCQlpbnZhbGlkYXRlX2RvbWFpbnMgPSAwIChubyBuZXcgcmVhZCBkb21haW5zKQorICoJNS4gUmVhZCBieSBHUFUKKyAqCQkoQ1BVK1JFTkRFUiwgMCkKKyAqCQlmbHVzaF9kb21haW5zID0gQ1BVCisgKgkJaW52YWxpZGF0ZV9kb21haW5zID0gUkVOREVSCisgKgkJY2xmbHVzaCAob2JqKQorICoJCU1JX0ZMVVNICisgKgkJZHJtX2FncF9jaGlwc2V0X2ZsdXNoCisgKi8KK3N0YXRpYyBpbnQKK2k5MTVfZ2VtX29iamVjdF9zZXRfZG9tYWluKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqLAorCQkJICAgIHVpbnQzMl90IHJlYWRfZG9tYWlucywKKwkJCSAgICB1aW50MzJfdCB3cml0ZV9kb21haW4pCit7CisJc3RydWN0IGRybV9kZXZpY2UJCSpkZXYgPSBvYmotPmRldjsKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdAkqb2JqX3ByaXYgPSBvYmotPmRyaXZlcl9wcml2YXRlOworCXVpbnQzMl90CQkJaW52YWxpZGF0ZV9kb21haW5zID0gMDsKKwl1aW50MzJfdAkJCWZsdXNoX2RvbWFpbnMgPSAwOworCWludAkJCQlyZXQ7CisKKyNpZiBXQVRDSF9CVUYKKwlEUk1fSU5GTygiJXM6IG9iamVjdCAlcCByZWFkICUwOHggLT4gJTA4eCB3cml0ZSAlMDh4IC0+ICUwOHhcbiIsCisJCSBfX2Z1bmNfXywgb2JqLAorCQkgb2JqLT5yZWFkX2RvbWFpbnMsIHJlYWRfZG9tYWlucywKKwkJIG9iai0+d3JpdGVfZG9tYWluLCB3cml0ZV9kb21haW4pOworI2VuZGlmCisJLyoKKwkgKiBJZiB0aGUgb2JqZWN0IGlzbid0IG1vdmluZyB0byBhIG5ldyB3cml0ZSBkb21haW4sCisJICogbGV0IHRoZSBvYmplY3Qgc3RheSBpbiBtdWx0aXBsZSByZWFkIGRvbWFpbnMKKwkgKi8KKwlpZiAod3JpdGVfZG9tYWluID09IDApCisJCXJlYWRfZG9tYWlucyB8PSBvYmotPnJlYWRfZG9tYWluczsKKwllbHNlCisJCW9ial9wcml2LT5kaXJ0eSA9IDE7CisKKwkvKgorCSAqIEZsdXNoIHRoZSBjdXJyZW50IHdyaXRlIGRvbWFpbiBpZgorCSAqIHRoZSBuZXcgcmVhZCBkb21haW5zIGRvbid0IG1hdGNoLiBJbnZhbGlkYXRlCisJICogYW55IHJlYWQgZG9tYWlucyB3aGljaCBkaWZmZXIgZnJvbSB0aGUgb2xkCisJICogd3JpdGUgZG9tYWluCisJICovCisJaWYgKG9iai0+d3JpdGVfZG9tYWluICYmIG9iai0+d3JpdGVfZG9tYWluICE9IHJlYWRfZG9tYWlucykgeworCQlmbHVzaF9kb21haW5zIHw9IG9iai0+d3JpdGVfZG9tYWluOworCQlpbnZhbGlkYXRlX2RvbWFpbnMgfD0gcmVhZF9kb21haW5zICYgfm9iai0+d3JpdGVfZG9tYWluOworCX0KKwkvKgorCSAqIEludmFsaWRhdGUgYW55IHJlYWQgY2FjaGVzIHdoaWNoIG1heSBoYXZlCisJICogc3RhbGUgZGF0YS4gVGhhdCBpcywgYW55IG5ldyByZWFkIGRvbWFpbnMuCisJICovCisJaW52YWxpZGF0ZV9kb21haW5zIHw9IHJlYWRfZG9tYWlucyAmIH5vYmotPnJlYWRfZG9tYWluczsKKwlpZiAoKGZsdXNoX2RvbWFpbnMgfCBpbnZhbGlkYXRlX2RvbWFpbnMpICYgSTkxNV9HRU1fRE9NQUlOX0NQVSkgeworI2lmIFdBVENIX0JVRgorCQlEUk1fSU5GTygiJXM6IENQVSBkb21haW4gZmx1c2ggJTA4eCBpbnZhbGlkYXRlICUwOHhcbiIsCisJCQkgX19mdW5jX18sIGZsdXNoX2RvbWFpbnMsIGludmFsaWRhdGVfZG9tYWlucyk7CisjZW5kaWYKKwkJLyoKKwkJICogSWYgd2UncmUgaW52YWxpZGluZyB0aGUgQ1BVIGNhY2hlIGFuZCBmbHVzaGluZyBhIEdQVSBjYWNoZSwKKwkJICogdGhlbiBwYXVzZSBmb3IgcmVuZGVyaW5nIHNvIHRoYXQgdGhlIEdQVSBjYWNoZXMgd2lsbCBiZQorCQkgKiBmbHVzaGVkIGJlZm9yZSB0aGUgY3B1IGNhY2hlIGlzIGludmFsaWRhdGVkCisJCSAqLworCQlpZiAoKGludmFsaWRhdGVfZG9tYWlucyAmIEk5MTVfR0VNX0RPTUFJTl9DUFUpICYmCisJCSAgICAoZmx1c2hfZG9tYWlucyAmIH4oSTkxNV9HRU1fRE9NQUlOX0NQVSB8CisJCQkJICAgICAgIEk5MTVfR0VNX0RPTUFJTl9HVFQpKSkgeworCQkJcmV0ID0gaTkxNV9nZW1fb2JqZWN0X3dhaXRfcmVuZGVyaW5nKG9iaik7CisJCQlpZiAocmV0KQorCQkJCXJldHVybiByZXQ7CisJCX0KKwkJaTkxNV9nZW1fY2xmbHVzaF9vYmplY3Qob2JqKTsKKwl9CisKKwlpZiAoKHdyaXRlX2RvbWFpbiB8IGZsdXNoX2RvbWFpbnMpICE9IDApCisJCW9iai0+d3JpdGVfZG9tYWluID0gd3JpdGVfZG9tYWluOworCisJLyogSWYgd2UncmUgaW52YWxpZGF0aW5nIHRoZSBDUFUgZG9tYWluLCBjbGVhciB0aGUgcGVyLXBhZ2UgQ1BVCisJICogZG9tYWluIGxpc3QgYXMgd2VsbC4KKwkgKi8KKwlpZiAob2JqX3ByaXYtPnBhZ2VfY3B1X3ZhbGlkICE9IE5VTEwgJiYKKwkgICAgKHdyaXRlX2RvbWFpbiAhPSAwIHx8CisJICAgICByZWFkX2RvbWFpbnMgJiBJOTE1X0dFTV9ET01BSU5fQ1BVKSkgeworCQlkcm1fZnJlZShvYmpfcHJpdi0+cGFnZV9jcHVfdmFsaWQsIG9iai0+c2l6ZSAvIFBBR0VfU0laRSwKKwkJCSBEUk1fTUVNX0RSSVZFUik7CisJCW9ial9wcml2LT5wYWdlX2NwdV92YWxpZCA9IE5VTEw7CisJfQorCW9iai0+cmVhZF9kb21haW5zID0gcmVhZF9kb21haW5zOworCisJZGV2LT5pbnZhbGlkYXRlX2RvbWFpbnMgfD0gaW52YWxpZGF0ZV9kb21haW5zOworCWRldi0+Zmx1c2hfZG9tYWlucyB8PSBmbHVzaF9kb21haW5zOworI2lmIFdBVENIX0JVRgorCURSTV9JTkZPKCIlczogcmVhZCAlMDh4IHdyaXRlICUwOHggaW52YWxpZGF0ZSAlMDh4IGZsdXNoICUwOHhcbiIsCisJCSBfX2Z1bmNfXywKKwkJIG9iai0+cmVhZF9kb21haW5zLCBvYmotPndyaXRlX2RvbWFpbiwKKwkJIGRldi0+aW52YWxpZGF0ZV9kb21haW5zLCBkZXYtPmZsdXNoX2RvbWFpbnMpOworI2VuZGlmCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogU2V0IHRoZSByZWFkL3dyaXRlIGRvbWFpbiBvbiBhIHJhbmdlIG9mIHRoZSBvYmplY3QuCisgKgorICogQ3VycmVudGx5IG9ubHkgaW1wbGVtZW50ZWQgZm9yIENQVSByZWFkcywgb3RoZXJ3aXNlIGRyb3BzIHRvIG5vcm1hbAorICogaTkxNV9nZW1fb2JqZWN0X3NldF9kb21haW4oKS4KKyAqLworc3RhdGljIGludAoraTkxNV9nZW1fb2JqZWN0X3NldF9kb21haW5fcmFuZ2Uoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmosCisJCQkJIHVpbnQ2NF90IG9mZnNldCwKKwkJCQkgdWludDY0X3Qgc2l6ZSwKKwkJCQkgdWludDMyX3QgcmVhZF9kb21haW5zLAorCQkJCSB1aW50MzJfdCB3cml0ZV9kb21haW4pCit7CisJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9ial9wcml2ID0gb2JqLT5kcml2ZXJfcHJpdmF0ZTsKKwlpbnQgcmV0LCBpOworCisJaWYgKG9iai0+cmVhZF9kb21haW5zICYgSTkxNV9HRU1fRE9NQUlOX0NQVSkKKwkJcmV0dXJuIDA7CisKKwlpZiAocmVhZF9kb21haW5zICE9IEk5MTVfR0VNX0RPTUFJTl9DUFUgfHwKKwkgICAgd3JpdGVfZG9tYWluICE9IDApCisJCXJldHVybiBpOTE1X2dlbV9vYmplY3Rfc2V0X2RvbWFpbihvYmosCisJCQkJCQkgIHJlYWRfZG9tYWlucywgd3JpdGVfZG9tYWluKTsKKworCS8qIFdhaXQgb24gYW55IEdQVSByZW5kZXJpbmcgdG8gdGhlIG9iamVjdCB0byBiZSBmbHVzaGVkLiAqLworCWlmIChvYmotPndyaXRlX2RvbWFpbiAmIH4oSTkxNV9HRU1fRE9NQUlOX0NQVSB8IEk5MTVfR0VNX0RPTUFJTl9HVFQpKSB7CisJCXJldCA9IGk5MTVfZ2VtX29iamVjdF93YWl0X3JlbmRlcmluZyhvYmopOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKwl9CisKKwlpZiAob2JqX3ByaXYtPnBhZ2VfY3B1X3ZhbGlkID09IE5VTEwpIHsKKwkJb2JqX3ByaXYtPnBhZ2VfY3B1X3ZhbGlkID0gZHJtX2NhbGxvYygxLCBvYmotPnNpemUgLyBQQUdFX1NJWkUsCisJCQkJCQkgICAgICBEUk1fTUVNX0RSSVZFUik7CisJfQorCisJLyogRmx1c2ggdGhlIGNhY2hlIG9uIGFueSBwYWdlcyB0aGF0IGFyZSBzdGlsbCBpbnZhbGlkIGZyb20gdGhlIENQVSdzCisJICogcGVyc3BlY3RpdmUuCisJICovCisJZm9yIChpID0gb2Zmc2V0IC8gUEFHRV9TSVpFOyBpIDw9IChvZmZzZXQgKyBzaXplIC0gMSkgLyBQQUdFX1NJWkU7IGkrKykgeworCQlpZiAob2JqX3ByaXYtPnBhZ2VfY3B1X3ZhbGlkW2ldKQorCQkJY29udGludWU7CisKKwkJZHJtX2NsZmx1c2hfcGFnZXMob2JqX3ByaXYtPnBhZ2VfbGlzdCArIGksIDEpOworCisJCW9ial9wcml2LT5wYWdlX2NwdV92YWxpZFtpXSA9IDE7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogT25jZSBhbGwgb2YgdGhlIG9iamVjdHMgaGF2ZSBiZWVuIHNldCBpbiB0aGUgcHJvcGVyIGRvbWFpbiwKKyAqIHBlcmZvcm0gdGhlIG5lY2Vzc2FyeSBmbHVzaCBhbmQgaW52YWxpZGF0ZSBvcGVyYXRpb25zLgorICoKKyAqIFJldHVybnMgdGhlIHdyaXRlIGRvbWFpbnMgZmx1c2hlZCwgZm9yIHVzZSBpbiBmbHVzaCB0cmFja2luZy4KKyAqLworc3RhdGljIHVpbnQzMl90CitpOTE1X2dlbV9kZXZfc2V0X2RvbWFpbihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQoreworCXVpbnQzMl90IGZsdXNoX2RvbWFpbnMgPSBkZXYtPmZsdXNoX2RvbWFpbnM7CisKKwkvKgorCSAqIE5vdyB0aGF0IGFsbCB0aGUgYnVmZmVycyBhcmUgc3luY2VkIHRvIHRoZSBwcm9wZXIgZG9tYWlucywKKwkgKiBmbHVzaCBhbmQgaW52YWxpZGF0ZSB0aGUgY29sbGVjdGVkIGRvbWFpbnMKKwkgKi8KKwlpZiAoZGV2LT5pbnZhbGlkYXRlX2RvbWFpbnMgfCBkZXYtPmZsdXNoX2RvbWFpbnMpIHsKKyNpZiBXQVRDSF9FWEVDCisJCURSTV9JTkZPKCIlczogaW52YWxpZGF0ZV9kb21haW5zICUwOHggZmx1c2hfZG9tYWlucyAlMDh4XG4iLAorCQkJICBfX2Z1bmNfXywKKwkJCSBkZXYtPmludmFsaWRhdGVfZG9tYWlucywKKwkJCSBkZXYtPmZsdXNoX2RvbWFpbnMpOworI2VuZGlmCisJCWk5MTVfZ2VtX2ZsdXNoKGRldiwKKwkJCSAgICAgICBkZXYtPmludmFsaWRhdGVfZG9tYWlucywKKwkJCSAgICAgICBkZXYtPmZsdXNoX2RvbWFpbnMpOworCQlkZXYtPmludmFsaWRhdGVfZG9tYWlucyA9IDA7CisJCWRldi0+Zmx1c2hfZG9tYWlucyA9IDA7CisJfQorCisJcmV0dXJuIGZsdXNoX2RvbWFpbnM7Cit9CisKKy8qKgorICogUGluIGFuIG9iamVjdCB0byB0aGUgR1RUIGFuZCBldmFsdWF0ZSB0aGUgcmVsb2NhdGlvbnMgbGFuZGluZyBpbiBpdC4KKyAqLworc3RhdGljIGludAoraTkxNV9nZW1fb2JqZWN0X3Bpbl9hbmRfcmVsb2NhdGUoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmosCisJCQkJIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2LAorCQkJCSBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNfb2JqZWN0ICplbnRyeSkKK3sKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gb2JqLT5kZXY7CisJc3RydWN0IGRybV9pOTE1X2dlbV9yZWxvY2F0aW9uX2VudHJ5IHJlbG9jOworCXN0cnVjdCBkcm1faTkxNV9nZW1fcmVsb2NhdGlvbl9lbnRyeSBfX3VzZXIgKnJlbG9jczsKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqX3ByaXYgPSBvYmotPmRyaXZlcl9wcml2YXRlOworCWludCBpLCByZXQ7CisJdWludDMyX3QgbGFzdF9yZWxvY19vZmZzZXQgPSAtMTsKKwl2b2lkIF9faW9tZW0gKnJlbG9jX3BhZ2UgPSBOVUxMOworCisJLyogQ2hvb3NlIHRoZSBHVFQgb2Zmc2V0IGZvciBvdXIgYnVmZmVyIGFuZCBwdXQgaXQgdGhlcmUuICovCisJcmV0ID0gaTkxNV9nZW1fb2JqZWN0X3BpbihvYmosICh1aW50MzJfdCkgZW50cnktPmFsaWdubWVudCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCWVudHJ5LT5vZmZzZXQgPSBvYmpfcHJpdi0+Z3R0X29mZnNldDsKKworCXJlbG9jcyA9IChzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlbG9jYXRpb25fZW50cnkgX191c2VyICopCisJCSAodWludHB0cl90KSBlbnRyeS0+cmVsb2NzX3B0cjsKKwkvKiBBcHBseSB0aGUgcmVsb2NhdGlvbnMsIHVzaW5nIHRoZSBHVFQgYXBlcnR1cmUgdG8gYXZvaWQgY2FjaGUKKwkgKiBmbHVzaGluZyByZXF1aXJlbWVudHMuCisJICovCisJZm9yIChpID0gMDsgaSA8IGVudHJ5LT5yZWxvY2F0aW9uX2NvdW50OyBpKyspIHsKKwkJc3RydWN0IGRybV9nZW1fb2JqZWN0ICp0YXJnZXRfb2JqOworCQlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqdGFyZ2V0X29ial9wcml2OworCQl1aW50MzJfdCByZWxvY192YWwsIHJlbG9jX29mZnNldDsKKwkJdWludDMyX3QgX19pb21lbSAqcmVsb2NfZW50cnk7CisKKwkJcmV0ID0gY29weV9mcm9tX3VzZXIoJnJlbG9jLCByZWxvY3MgKyBpLCBzaXplb2YocmVsb2MpKTsKKwkJaWYgKHJldCAhPSAwKSB7CisJCQlpOTE1X2dlbV9vYmplY3RfdW5waW4ob2JqKTsKKwkJCXJldHVybiByZXQ7CisJCX0KKworCQl0YXJnZXRfb2JqID0gZHJtX2dlbV9vYmplY3RfbG9va3VwKG9iai0+ZGV2LCBmaWxlX3ByaXYsCisJCQkJCQkgICByZWxvYy50YXJnZXRfaGFuZGxlKTsKKwkJaWYgKHRhcmdldF9vYmogPT0gTlVMTCkgeworCQkJaTkxNV9nZW1fb2JqZWN0X3VucGluKG9iaik7CisJCQlyZXR1cm4gLUVCQURGOworCQl9CisJCXRhcmdldF9vYmpfcHJpdiA9IHRhcmdldF9vYmotPmRyaXZlcl9wcml2YXRlOworCisJCS8qIFRoZSB0YXJnZXQgYnVmZmVyIHNob3VsZCBoYXZlIGFwcGVhcmVkIGJlZm9yZSB1cyBpbiB0aGUKKwkJICogZXhlY19vYmplY3QgbGlzdCwgc28gaXQgc2hvdWxkIGhhdmUgYSBHVFQgc3BhY2UgYm91bmQgYnkgbm93LgorCQkgKi8KKwkJaWYgKHRhcmdldF9vYmpfcHJpdi0+Z3R0X3NwYWNlID09IE5VTEwpIHsKKwkJCURSTV9FUlJPUigiTm8gR1RUIHNwYWNlIGZvdW5kIGZvciBvYmplY3QgJWRcbiIsCisJCQkJICByZWxvYy50YXJnZXRfaGFuZGxlKTsKKwkJCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlKHRhcmdldF9vYmopOworCQkJaTkxNV9nZW1fb2JqZWN0X3VucGluKG9iaik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCisJCWlmIChyZWxvYy5vZmZzZXQgPiBvYmotPnNpemUgLSA0KSB7CisJCQlEUk1fRVJST1IoIlJlbG9jYXRpb24gYmV5b25kIG9iamVjdCBib3VuZHM6ICIKKwkJCQkgICJvYmogJXAgdGFyZ2V0ICVkIG9mZnNldCAlZCBzaXplICVkLlxuIiwKKwkJCQkgIG9iaiwgcmVsb2MudGFyZ2V0X2hhbmRsZSwKKwkJCQkgIChpbnQpIHJlbG9jLm9mZnNldCwgKGludCkgb2JqLT5zaXplKTsKKwkJCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlKHRhcmdldF9vYmopOworCQkJaTkxNV9nZW1fb2JqZWN0X3VucGluKG9iaik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCQlpZiAocmVsb2Mub2Zmc2V0ICYgMykgeworCQkJRFJNX0VSUk9SKCJSZWxvY2F0aW9uIG5vdCA0LWJ5dGUgYWxpZ25lZDogIgorCQkJCSAgIm9iaiAlcCB0YXJnZXQgJWQgb2Zmc2V0ICVkLlxuIiwKKwkJCQkgIG9iaiwgcmVsb2MudGFyZ2V0X2hhbmRsZSwKKwkJCQkgIChpbnQpIHJlbG9jLm9mZnNldCk7CisJCQlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZSh0YXJnZXRfb2JqKTsKKwkJCWk5MTVfZ2VtX29iamVjdF91bnBpbihvYmopOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKworCQlpZiAocmVsb2Mud3JpdGVfZG9tYWluICYmIHRhcmdldF9vYmotPnBlbmRpbmdfd3JpdGVfZG9tYWluICYmCisJCSAgICByZWxvYy53cml0ZV9kb21haW4gIT0gdGFyZ2V0X29iai0+cGVuZGluZ193cml0ZV9kb21haW4pIHsKKwkJCURSTV9FUlJPUigiV3JpdGUgZG9tYWluIGNvbmZsaWN0OiAiCisJCQkJICAib2JqICVwIHRhcmdldCAlZCBvZmZzZXQgJWQgIgorCQkJCSAgIm5ldyAlMDh4IG9sZCAlMDh4XG4iLAorCQkJCSAgb2JqLCByZWxvYy50YXJnZXRfaGFuZGxlLAorCQkJCSAgKGludCkgcmVsb2Mub2Zmc2V0LAorCQkJCSAgcmVsb2Mud3JpdGVfZG9tYWluLAorCQkJCSAgdGFyZ2V0X29iai0+cGVuZGluZ193cml0ZV9kb21haW4pOworCQkJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2UodGFyZ2V0X29iaik7CisJCQlpOTE1X2dlbV9vYmplY3RfdW5waW4ob2JqKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisKKyNpZiBXQVRDSF9SRUxPQworCQlEUk1fSU5GTygiJXM6IG9iaiAlcCBvZmZzZXQgJTA4eCB0YXJnZXQgJWQgIgorCQkJICJyZWFkICUwOHggd3JpdGUgJTA4eCBndHQgJTA4eCAiCisJCQkgInByZXN1bWVkICUwOHggZGVsdGEgJTA4eFxuIiwKKwkJCSBfX2Z1bmNfXywKKwkJCSBvYmosCisJCQkgKGludCkgcmVsb2Mub2Zmc2V0LAorCQkJIChpbnQpIHJlbG9jLnRhcmdldF9oYW5kbGUsCisJCQkgKGludCkgcmVsb2MucmVhZF9kb21haW5zLAorCQkJIChpbnQpIHJlbG9jLndyaXRlX2RvbWFpbiwKKwkJCSAoaW50KSB0YXJnZXRfb2JqX3ByaXYtPmd0dF9vZmZzZXQsCisJCQkgKGludCkgcmVsb2MucHJlc3VtZWRfb2Zmc2V0LAorCQkJIHJlbG9jLmRlbHRhKTsKKyNlbmRpZgorCisJCXRhcmdldF9vYmotPnBlbmRpbmdfcmVhZF9kb21haW5zIHw9IHJlbG9jLnJlYWRfZG9tYWluczsKKwkJdGFyZ2V0X29iai0+cGVuZGluZ193cml0ZV9kb21haW4gfD0gcmVsb2Mud3JpdGVfZG9tYWluOworCisJCS8qIElmIHRoZSByZWxvY2F0aW9uIGFscmVhZHkgaGFzIHRoZSByaWdodCB2YWx1ZSBpbiBpdCwgbm8KKwkJICogbW9yZSB3b3JrIG5lZWRzIHRvIGJlIGRvbmUuCisJCSAqLworCQlpZiAodGFyZ2V0X29ial9wcml2LT5ndHRfb2Zmc2V0ID09IHJlbG9jLnByZXN1bWVkX29mZnNldCkgeworCQkJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2UodGFyZ2V0X29iaik7CisJCQljb250aW51ZTsKKwkJfQorCisJCS8qIE5vdyB0aGF0IHdlJ3JlIGdvaW5nIHRvIGFjdHVhbGx5IHdyaXRlIHNvbWUgZGF0YSBpbiwKKwkJICogbWFrZSBzdXJlIHRoYXQgYW55IHJlbmRlcmluZyB1c2luZyB0aGlzIGJ1ZmZlcidzIGNvbnRlbnRzCisJCSAqIGlzIGNvbXBsZXRlZC4KKwkJICovCisJCWk5MTVfZ2VtX29iamVjdF93YWl0X3JlbmRlcmluZyhvYmopOworCisJCS8qIEFzIHdlJ3JlIHdyaXRpbmcgdGhyb3VnaCB0aGUgZ3R0LCBmbHVzaAorCQkgKiBhbnkgQ1BVIHdyaXRlcyBiZWZvcmUgd2Ugd3JpdGUgdGhlIHJlbG9jYXRpb25zCisJCSAqLworCQlpZiAob2JqLT53cml0ZV9kb21haW4gJiBJOTE1X0dFTV9ET01BSU5fQ1BVKSB7CisJCQlpOTE1X2dlbV9jbGZsdXNoX29iamVjdChvYmopOworCQkJZHJtX2FncF9jaGlwc2V0X2ZsdXNoKGRldik7CisJCQlvYmotPndyaXRlX2RvbWFpbiA9IDA7CisJCX0KKworCQkvKiBNYXAgdGhlIHBhZ2UgY29udGFpbmluZyB0aGUgcmVsb2NhdGlvbiB3ZSdyZSBnb2luZyB0bworCQkgKiBwZXJmb3JtLgorCQkgKi8KKwkJcmVsb2Nfb2Zmc2V0ID0gb2JqX3ByaXYtPmd0dF9vZmZzZXQgKyByZWxvYy5vZmZzZXQ7CisJCWlmIChyZWxvY19wYWdlID09IE5VTEwgfHwKKwkJICAgIChsYXN0X3JlbG9jX29mZnNldCAmIH4oUEFHRV9TSVpFIC0gMSkpICE9CisJCSAgICAocmVsb2Nfb2Zmc2V0ICYgfihQQUdFX1NJWkUgLSAxKSkpIHsKKwkJCWlmIChyZWxvY19wYWdlICE9IE5VTEwpCisJCQkJaW91bm1hcChyZWxvY19wYWdlKTsKKworCQkJcmVsb2NfcGFnZSA9IGlvcmVtYXBfd2MoZGV2LT5hZ3AtPmJhc2UgKworCQkJCQkJKHJlbG9jX29mZnNldCAmCisJCQkJCQkgfihQQUdFX1NJWkUgLSAxKSksCisJCQkJCQlQQUdFX1NJWkUpOworCQkJbGFzdF9yZWxvY19vZmZzZXQgPSByZWxvY19vZmZzZXQ7CisJCQlpZiAocmVsb2NfcGFnZSA9PSBOVUxMKSB7CisJCQkJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2UodGFyZ2V0X29iaik7CisJCQkJaTkxNV9nZW1fb2JqZWN0X3VucGluKG9iaik7CisJCQkJcmV0dXJuIC1FTk9NRU07CisJCQl9CisJCX0KKworCQlyZWxvY19lbnRyeSA9ICh1aW50MzJfdCBfX2lvbWVtICopKHJlbG9jX3BhZ2UgKworCQkJCQkgICAocmVsb2Nfb2Zmc2V0ICYgKFBBR0VfU0laRSAtIDEpKSk7CisJCXJlbG9jX3ZhbCA9IHRhcmdldF9vYmpfcHJpdi0+Z3R0X29mZnNldCArIHJlbG9jLmRlbHRhOworCisjaWYgV0FUQ0hfQlVGCisJCURSTV9JTkZPKCJBcHBsaWVkIHJlbG9jYXRpb246ICVwQDB4JTA4eCAlMDh4IC0+ICUwOHhcbiIsCisJCQkgIG9iaiwgKHVuc2lnbmVkIGludCkgcmVsb2Mub2Zmc2V0LAorCQkJICByZWFkbChyZWxvY19lbnRyeSksIHJlbG9jX3ZhbCk7CisjZW5kaWYKKwkJd3JpdGVsKHJlbG9jX3ZhbCwgcmVsb2NfZW50cnkpOworCisJCS8qIFdyaXRlIHRoZSB1cGRhdGVkIHByZXN1bWVkIG9mZnNldCBmb3IgdGhpcyBlbnRyeSBiYWNrIG91dAorCQkgKiB0byB0aGUgdXNlci4KKwkJICovCisJCXJlbG9jLnByZXN1bWVkX29mZnNldCA9IHRhcmdldF9vYmpfcHJpdi0+Z3R0X29mZnNldDsKKwkJcmV0ID0gY29weV90b191c2VyKHJlbG9jcyArIGksICZyZWxvYywgc2l6ZW9mKHJlbG9jKSk7CisJCWlmIChyZXQgIT0gMCkgeworCQkJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2UodGFyZ2V0X29iaik7CisJCQlpOTE1X2dlbV9vYmplY3RfdW5waW4ob2JqKTsKKwkJCXJldHVybiByZXQ7CisJCX0KKworCQlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZSh0YXJnZXRfb2JqKTsKKwl9CisKKwlpZiAocmVsb2NfcGFnZSAhPSBOVUxMKQorCQlpb3VubWFwKHJlbG9jX3BhZ2UpOworCisjaWYgV0FUQ0hfQlVGCisJaWYgKDApCisJCWk5MTVfZ2VtX2R1bXBfb2JqZWN0KG9iaiwgMTI4LCBfX2Z1bmNfXywgfjApOworI2VuZGlmCisJcmV0dXJuIDA7Cit9CisKKy8qKiBEaXNwYXRjaCBhIGJhdGNoYnVmZmVyIHRvIHRoZSByaW5nCisgKi8KK3N0YXRpYyBpbnQKK2k5MTVfZGlzcGF0Y2hfZ2VtX2V4ZWNidWZmZXIoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJCSAgICAgIHN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY2J1ZmZlciAqZXhlYywKKwkJCSAgICAgIHVpbnQ2NF90IGV4ZWNfb2Zmc2V0KQoreworCWRybV9pOTE1X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCXN0cnVjdCBkcm1fY2xpcF9yZWN0IF9fdXNlciAqYm94ZXMgPSAoc3RydWN0IGRybV9jbGlwX3JlY3QgX191c2VyICopCisJCQkJCSAgICAgKHVpbnRwdHJfdCkgZXhlYy0+Y2xpcHJlY3RzX3B0cjsKKwlpbnQgbmJveCA9IGV4ZWMtPm51bV9jbGlwcmVjdHM7CisJaW50IGkgPSAwLCBjb3VudDsKKwl1aW50MzJfdAlleGVjX3N0YXJ0LCBleGVjX2xlbjsKKwlSSU5HX0xPQ0FMUzsKKworCWV4ZWNfc3RhcnQgPSAodWludDMyX3QpIGV4ZWNfb2Zmc2V0ICsgZXhlYy0+YmF0Y2hfc3RhcnRfb2Zmc2V0OworCWV4ZWNfbGVuID0gKHVpbnQzMl90KSBleGVjLT5iYXRjaF9sZW47CisKKwlpZiAoKGV4ZWNfc3RhcnQgfCBleGVjX2xlbikgJiAweDcpIHsKKwkJRFJNX0VSUk9SKCJhbGlnbm1lbnRcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAoIWV4ZWNfc3RhcnQpCisJCXJldHVybiAtRUlOVkFMOworCisJY291bnQgPSBuYm94ID8gbmJveCA6IDE7CisKKwlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykgeworCQlpZiAoaSA8IG5ib3gpIHsKKwkJCWludCByZXQgPSBpOTE1X2VtaXRfYm94KGRldiwgYm94ZXMsIGksCisJCQkJCQlleGVjLT5EUjEsIGV4ZWMtPkRSNCk7CisJCQlpZiAocmV0KQorCQkJCXJldHVybiByZXQ7CisJCX0KKworCQlpZiAoSVNfSTgzMChkZXYpIHx8IElTXzg0NUcoZGV2KSkgeworCQkJQkVHSU5fTFBfUklORyg0KTsKKwkJCU9VVF9SSU5HKE1JX0JBVENIX0JVRkZFUik7CisJCQlPVVRfUklORyhleGVjX3N0YXJ0IHwgTUlfQkFUQ0hfTk9OX1NFQ1VSRSk7CisJCQlPVVRfUklORyhleGVjX3N0YXJ0ICsgZXhlY19sZW4gLSA0KTsKKwkJCU9VVF9SSU5HKDApOworCQkJQURWQU5DRV9MUF9SSU5HKCk7CisJCX0gZWxzZSB7CisJCQlCRUdJTl9MUF9SSU5HKDIpOworCQkJaWYgKElTX0k5NjVHKGRldikpIHsKKwkJCQlPVVRfUklORyhNSV9CQVRDSF9CVUZGRVJfU1RBUlQgfAorCQkJCQkgKDIgPDwgNikgfAorCQkJCQkgTUlfQkFUQ0hfTk9OX1NFQ1VSRV9JOTY1KTsKKwkJCQlPVVRfUklORyhleGVjX3N0YXJ0KTsKKwkJCX0gZWxzZSB7CisJCQkJT1VUX1JJTkcoTUlfQkFUQ0hfQlVGRkVSX1NUQVJUIHwKKwkJCQkJICgyIDw8IDYpKTsKKwkJCQlPVVRfUklORyhleGVjX3N0YXJ0IHwgTUlfQkFUQ0hfTk9OX1NFQ1VSRSk7CisJCQl9CisJCQlBRFZBTkNFX0xQX1JJTkcoKTsKKwkJfQorCX0KKworCS8qIFhYWCBicmVhZGNydW1iICovCisJcmV0dXJuIDA7Cit9CisKKy8qIFRocm90dGxlIG91ciByZW5kZXJpbmcgYnkgd2FpdGluZyB1bnRpbCB0aGUgcmluZyBoYXMgY29tcGxldGVkIG91ciByZXF1ZXN0cworICogZW1pdHRlZCBvdmVyIDIwIG1zZWMgYWdvLgorICoKKyAqIFRoaXMgc2hvdWxkIGdldCB1cyByZWFzb25hYmxlIHBhcmFsbGVsaXNtIGJldHdlZW4gQ1BVIGFuZCBHUFUgYnV0IGFsc28KKyAqIHJlbGF0aXZlbHkgbG93IGxhdGVuY3kgd2hlbiBibG9ja2luZyBvbiBhIHBhcnRpY3VsYXIgcmVxdWVzdCB0byBmaW5pc2guCisgKi8KK3N0YXRpYyBpbnQKK2k5MTVfZ2VtX3JpbmdfdGhyb3R0bGUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpCit7CisJc3RydWN0IGRybV9pOTE1X2ZpbGVfcHJpdmF0ZSAqaTkxNV9maWxlX3ByaXYgPSBmaWxlX3ByaXYtPmRyaXZlcl9wcml2OworCWludCByZXQgPSAwOworCXVpbnQzMl90IHNlcW5vOworCisJbXV0ZXhfbG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOworCXNlcW5vID0gaTkxNV9maWxlX3ByaXYtPm1tLmxhc3RfZ2VtX3Rocm90dGxlX3NlcW5vOworCWk5MTVfZmlsZV9wcml2LT5tbS5sYXN0X2dlbV90aHJvdHRsZV9zZXFubyA9CisJCWk5MTVfZmlsZV9wcml2LT5tbS5sYXN0X2dlbV9zZXFubzsKKwlpZiAoc2Vxbm8pCisJCXJldCA9IGk5MTVfd2FpdF9yZXF1ZXN0KGRldiwgc2Vxbm8pOworCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOworCXJldHVybiByZXQ7Cit9CisKK2ludAoraTkxNV9nZW1fZXhlY2J1ZmZlcihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAorCQkgICAgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpCit7CisJZHJtX2k5MTVfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IGRybV9pOTE1X2ZpbGVfcHJpdmF0ZSAqaTkxNV9maWxlX3ByaXYgPSBmaWxlX3ByaXYtPmRyaXZlcl9wcml2OworCXN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY2J1ZmZlciAqYXJncyA9IGRhdGE7CisJc3RydWN0IGRybV9pOTE1X2dlbV9leGVjX29iamVjdCAqZXhlY19saXN0ID0gTlVMTDsKKwlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKipvYmplY3RfbGlzdCA9IE5VTEw7CisJc3RydWN0IGRybV9nZW1fb2JqZWN0ICpiYXRjaF9vYmo7CisJaW50IHJldCwgaSwgcGlubmVkID0gMDsKKwl1aW50NjRfdCBleGVjX29mZnNldDsKKwl1aW50MzJfdCBzZXFubywgZmx1c2hfZG9tYWluczsKKworI2lmIFdBVENIX0VYRUMKKwlEUk1fSU5GTygiYnVmZmVyc19wdHIgJWQgYnVmZmVyX2NvdW50ICVkIGxlbiAlMDh4XG4iLAorCQkgIChpbnQpIGFyZ3MtPmJ1ZmZlcnNfcHRyLCBhcmdzLT5idWZmZXJfY291bnQsIGFyZ3MtPmJhdGNoX2xlbik7CisjZW5kaWYKKworCWlmIChhcmdzLT5idWZmZXJfY291bnQgPCAxKSB7CisJCURSTV9FUlJPUigiZXhlY2J1ZiB3aXRoICVkIGJ1ZmZlcnNcbiIsIGFyZ3MtPmJ1ZmZlcl9jb3VudCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwkvKiBDb3B5IGluIHRoZSBleGVjIGxpc3QgZnJvbSB1c2VybGFuZCAqLworCWV4ZWNfbGlzdCA9IGRybV9jYWxsb2Moc2l6ZW9mKCpleGVjX2xpc3QpLCBhcmdzLT5idWZmZXJfY291bnQsCisJCQkgICAgICAgRFJNX01FTV9EUklWRVIpOworCW9iamVjdF9saXN0ID0gZHJtX2NhbGxvYyhzaXplb2YoKm9iamVjdF9saXN0KSwgYXJncy0+YnVmZmVyX2NvdW50LAorCQkJCSBEUk1fTUVNX0RSSVZFUik7CisJaWYgKGV4ZWNfbGlzdCA9PSBOVUxMIHx8IG9iamVjdF9saXN0ID09IE5VTEwpIHsKKwkJRFJNX0VSUk9SKCJGYWlsZWQgdG8gYWxsb2NhdGUgZXhlYyBvciBvYmplY3QgbGlzdCAiCisJCQkgICJmb3IgJWQgYnVmZmVyc1xuIiwKKwkJCSAgYXJncy0+YnVmZmVyX2NvdW50KTsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBwcmVfbXV0ZXhfZXJyOworCX0KKwlyZXQgPSBjb3B5X2Zyb21fdXNlcihleGVjX2xpc3QsCisJCQkgICAgIChzdHJ1Y3QgZHJtX2k5MTVfcmVsb2NhdGlvbl9lbnRyeSBfX3VzZXIgKikKKwkJCSAgICAgKHVpbnRwdHJfdCkgYXJncy0+YnVmZmVyc19wdHIsCisJCQkgICAgIHNpemVvZigqZXhlY19saXN0KSAqIGFyZ3MtPmJ1ZmZlcl9jb3VudCk7CisJaWYgKHJldCAhPSAwKSB7CisJCURSTV9FUlJPUigiY29weSAlZCBleGVjIGVudHJpZXMgZmFpbGVkICVkXG4iLAorCQkJICBhcmdzLT5idWZmZXJfY291bnQsIHJldCk7CisJCWdvdG8gcHJlX211dGV4X2VycjsKKwl9CisKKwltdXRleF9sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CisKKwlpOTE1X3ZlcmlmeV9pbmFjdGl2ZShkZXYsIF9fRklMRV9fLCBfX0xJTkVfXyk7CisKKwlpZiAoZGV2X3ByaXYtPm1tLndlZGdlZCkgeworCQlEUk1fRVJST1IoIkV4ZWNidWYgd2hpbGUgd2VkZ2VkXG4iKTsKKwkJbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CisJCXJldHVybiAtRUlPOworCX0KKworCWlmIChkZXZfcHJpdi0+bW0uc3VzcGVuZGVkKSB7CisJCURSTV9FUlJPUigiRXhlY2J1ZiB3aGlsZSBWVC1zd2l0Y2hlZC5cbiIpOworCQltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisKKwkvKiBaZXJvIHRoZSBnbG9hYmwgZmx1c2gvaW52YWxpZGF0ZSBmbGFncy4gVGhlc2UKKwkgKiB3aWxsIGJlIG1vZGlmaWVkIGFzIGVhY2ggb2JqZWN0IGlzIGJvdW5kIHRvIHRoZQorCSAqIGd0dAorCSAqLworCWRldi0+aW52YWxpZGF0ZV9kb21haW5zID0gMDsKKwlkZXYtPmZsdXNoX2RvbWFpbnMgPSAwOworCisJLyogTG9vayB1cCBvYmplY3QgaGFuZGxlcyBhbmQgcGVyZm9ybSB0aGUgcmVsb2NhdGlvbnMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgYXJncy0+YnVmZmVyX2NvdW50OyBpKyspIHsKKwkJb2JqZWN0X2xpc3RbaV0gPSBkcm1fZ2VtX29iamVjdF9sb29rdXAoZGV2LCBmaWxlX3ByaXYsCisJCQkJCQkgICAgICAgZXhlY19saXN0W2ldLmhhbmRsZSk7CisJCWlmIChvYmplY3RfbGlzdFtpXSA9PSBOVUxMKSB7CisJCQlEUk1fRVJST1IoIkludmFsaWQgb2JqZWN0IGhhbmRsZSAlZCBhdCBpbmRleCAlZFxuIiwKKwkJCQkgICBleGVjX2xpc3RbaV0uaGFuZGxlLCBpKTsKKwkJCXJldCA9IC1FQkFERjsKKwkJCWdvdG8gZXJyOworCQl9CisKKwkJb2JqZWN0X2xpc3RbaV0tPnBlbmRpbmdfcmVhZF9kb21haW5zID0gMDsKKwkJb2JqZWN0X2xpc3RbaV0tPnBlbmRpbmdfd3JpdGVfZG9tYWluID0gMDsKKwkJcmV0ID0gaTkxNV9nZW1fb2JqZWN0X3Bpbl9hbmRfcmVsb2NhdGUob2JqZWN0X2xpc3RbaV0sCisJCQkJCQkgICAgICAgZmlsZV9wcml2LAorCQkJCQkJICAgICAgICZleGVjX2xpc3RbaV0pOworCQlpZiAocmV0KSB7CisJCQlEUk1fRVJST1IoIm9iamVjdCBiaW5kIGFuZCByZWxvY2F0ZSBmYWlsZWQgJWRcbiIsIHJldCk7CisJCQlnb3RvIGVycjsKKwkJfQorCQlwaW5uZWQgPSBpICsgMTsKKwl9CisKKwkvKiBTZXQgdGhlIHBlbmRpbmcgcmVhZCBkb21haW5zIGZvciB0aGUgYmF0Y2ggYnVmZmVyIHRvIENPTU1BTkQgKi8KKwliYXRjaF9vYmogPSBvYmplY3RfbGlzdFthcmdzLT5idWZmZXJfY291bnQtMV07CisJYmF0Y2hfb2JqLT5wZW5kaW5nX3JlYWRfZG9tYWlucyA9IEk5MTVfR0VNX0RPTUFJTl9DT01NQU5EOworCWJhdGNoX29iai0+cGVuZGluZ193cml0ZV9kb21haW4gPSAwOworCisJaTkxNV92ZXJpZnlfaW5hY3RpdmUoZGV2LCBfX0ZJTEVfXywgX19MSU5FX18pOworCisJZm9yIChpID0gMDsgaSA8IGFyZ3MtPmJ1ZmZlcl9jb3VudDsgaSsrKSB7CisJCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqID0gb2JqZWN0X2xpc3RbaV07CisJCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmpfcHJpdiA9IG9iai0+ZHJpdmVyX3ByaXZhdGU7CisKKwkJaWYgKG9ial9wcml2LT5ndHRfc3BhY2UgPT0gTlVMTCkgeworCQkJLyogV2UgZXZpY3RlZCB0aGUgYnVmZmVyIGluIHRoZSBwcm9jZXNzIG9mIHZhbGlkYXRpbmcKKwkJCSAqIG91ciBzZXQgb2YgYnVmZmVycyBpbi4gIFdlIGNvdWxkIHRyeSB0byByZWNvdmVyIGJ5CisJCQkgKiBraWNraW5nIHRoZW0gZXZlcnl0aGluZyBvdXQgYW5kIHRyeWluZyBhZ2FpbiBmcm9tCisJCQkgKiB0aGUgc3RhcnQuCisJCQkgKi8KKwkJCXJldCA9IC1FTk9NRU07CisJCQlnb3RvIGVycjsKKwkJfQorCisJCS8qIG1ha2Ugc3VyZSBhbGwgcHJldmlvdXMgbWVtb3J5IG9wZXJhdGlvbnMgaGF2ZSBwYXNzZWQgKi8KKwkJcmV0ID0gaTkxNV9nZW1fb2JqZWN0X3NldF9kb21haW4ob2JqLAorCQkJCQkJIG9iai0+cGVuZGluZ19yZWFkX2RvbWFpbnMsCisJCQkJCQkgb2JqLT5wZW5kaW5nX3dyaXRlX2RvbWFpbik7CisJCWlmIChyZXQpCisJCQlnb3RvIGVycjsKKwl9CisKKwlpOTE1X3ZlcmlmeV9pbmFjdGl2ZShkZXYsIF9fRklMRV9fLCBfX0xJTkVfXyk7CisKKwkvKiBGbHVzaC9pbnZhbGlkYXRlIGNhY2hlcyBhbmQgY2hpcHNldCBidWZmZXIgKi8KKwlmbHVzaF9kb21haW5zID0gaTkxNV9nZW1fZGV2X3NldF9kb21haW4oZGV2KTsKKworCWk5MTVfdmVyaWZ5X2luYWN0aXZlKGRldiwgX19GSUxFX18sIF9fTElORV9fKTsKKworI2lmIFdBVENIX0NPSEVSRU5DWQorCWZvciAoaSA9IDA7IGkgPCBhcmdzLT5idWZmZXJfY291bnQ7IGkrKykgeworCQlpOTE1X2dlbV9vYmplY3RfY2hlY2tfY29oZXJlbmN5KG9iamVjdF9saXN0W2ldLAorCQkJCQkJZXhlY19saXN0W2ldLmhhbmRsZSk7CisJfQorI2VuZGlmCisKKwlleGVjX29mZnNldCA9IGV4ZWNfbGlzdFthcmdzLT5idWZmZXJfY291bnQgLSAxXS5vZmZzZXQ7CisKKyNpZiBXQVRDSF9FWEVDCisJaTkxNV9nZW1fZHVtcF9vYmplY3Qob2JqZWN0X2xpc3RbYXJncy0+YnVmZmVyX2NvdW50IC0gMV0sCisJCQkgICAgICBhcmdzLT5iYXRjaF9sZW4sCisJCQkgICAgICBfX2Z1bmNfXywKKwkJCSAgICAgIH4wKTsKKyNlbmRpZgorCisJKHZvaWQpaTkxNV9hZGRfcmVxdWVzdChkZXYsIGZsdXNoX2RvbWFpbnMpOworCisJLyogRXhlYyB0aGUgYmF0Y2hidWZmZXIgKi8KKwlyZXQgPSBpOTE1X2Rpc3BhdGNoX2dlbV9leGVjYnVmZmVyKGRldiwgYXJncywgZXhlY19vZmZzZXQpOworCWlmIChyZXQpIHsKKwkJRFJNX0VSUk9SKCJkaXNwYXRjaCBmYWlsZWQgJWRcbiIsIHJldCk7CisJCWdvdG8gZXJyOworCX0KKworCS8qCisJICogRW5zdXJlIHRoYXQgdGhlIGNvbW1hbmRzIGluIHRoZSBiYXRjaCBidWZmZXIgYXJlCisJICogZmluaXNoZWQgYmVmb3JlIHRoZSBpbnRlcnJ1cHQgZmlyZXMKKwkgKi8KKwlmbHVzaF9kb21haW5zID0gaTkxNV9yZXRpcmVfY29tbWFuZHMoZGV2KTsKKworCWk5MTVfdmVyaWZ5X2luYWN0aXZlKGRldiwgX19GSUxFX18sIF9fTElORV9fKTsKKworCS8qCisJICogR2V0IGEgc2Vxbm8gcmVwcmVzZW50aW5nIHRoZSBleGVjdXRpb24gb2YgdGhlIGN1cnJlbnQgYnVmZmVyLAorCSAqIHdoaWNoIHdlIGNhbiB3YWl0IG9uLiAgV2Ugd291bGQgbGlrZSB0byBtaXRpZ2F0ZSB0aGVzZSBpbnRlcnJ1cHRzLAorCSAqIGxpa2VseSBieSBvbmx5IGNyZWF0aW5nIHNlcW5vcyBvY2Nhc2lvbmFsbHkgKHNvIHRoYXQgd2UgaGF2ZQorCSAqICpzb21lKiBpbnRlcnJ1cHRzIHJlcHJlc2VudGluZyBjb21wbGV0aW9uIG9mIGJ1ZmZlcnMgdGhhdCB3ZSBjYW4KKwkgKiB3YWl0IG9uIHdoZW4gdHJ5aW5nIHRvIGNsZWFyIHVwIGd0dCBzcGFjZSkuCisJICovCisJc2Vxbm8gPSBpOTE1X2FkZF9yZXF1ZXN0KGRldiwgZmx1c2hfZG9tYWlucyk7CisJQlVHX09OKHNlcW5vID09IDApOworCWk5MTVfZmlsZV9wcml2LT5tbS5sYXN0X2dlbV9zZXFubyA9IHNlcW5vOworCWZvciAoaSA9IDA7IGkgPCBhcmdzLT5idWZmZXJfY291bnQ7IGkrKykgeworCQlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiA9IG9iamVjdF9saXN0W2ldOworCQlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqX3ByaXYgPSBvYmotPmRyaXZlcl9wcml2YXRlOworCisJCWk5MTVfZ2VtX29iamVjdF9tb3ZlX3RvX2FjdGl2ZShvYmopOworCQlvYmpfcHJpdi0+bGFzdF9yZW5kZXJpbmdfc2Vxbm8gPSBzZXFubzsKKyNpZiBXQVRDSF9MUlUKKwkJRFJNX0lORk8oIiVzOiBtb3ZlIHRvIGV4ZWMgbGlzdCAlcFxuIiwgX19mdW5jX18sIG9iaik7CisjZW5kaWYKKwl9CisjaWYgV0FUQ0hfTFJVCisJaTkxNV9kdW1wX2xydShkZXYsIF9fZnVuY19fKTsKKyNlbmRpZgorCisJaTkxNV92ZXJpZnlfaW5hY3RpdmUoZGV2LCBfX0ZJTEVfXywgX19MSU5FX18pOworCisJLyogQ29weSB0aGUgbmV3IGJ1ZmZlciBvZmZzZXRzIGJhY2sgdG8gdGhlIHVzZXIncyBleGVjIGxpc3QuICovCisJcmV0ID0gY29weV90b191c2VyKChzdHJ1Y3QgZHJtX2k5MTVfcmVsb2NhdGlvbl9lbnRyeSBfX3VzZXIgKikKKwkJCSAgICh1aW50cHRyX3QpIGFyZ3MtPmJ1ZmZlcnNfcHRyLAorCQkJICAgZXhlY19saXN0LAorCQkJICAgc2l6ZW9mKCpleGVjX2xpc3QpICogYXJncy0+YnVmZmVyX2NvdW50KTsKKwlpZiAocmV0KQorCQlEUk1fRVJST1IoImZhaWxlZCB0byBjb3B5ICVkIGV4ZWMgZW50cmllcyAiCisJCQkgICJiYWNrIHRvIHVzZXIgKCVkKVxuIiwKKwkJCSAgIGFyZ3MtPmJ1ZmZlcl9jb3VudCwgcmV0KTsKK2VycjoKKwlpZiAob2JqZWN0X2xpc3QgIT0gTlVMTCkgeworCQlmb3IgKGkgPSAwOyBpIDwgcGlubmVkOyBpKyspCisJCQlpOTE1X2dlbV9vYmplY3RfdW5waW4ob2JqZWN0X2xpc3RbaV0pOworCisJCWZvciAoaSA9IDA7IGkgPCBhcmdzLT5idWZmZXJfY291bnQ7IGkrKykKKwkJCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlKG9iamVjdF9saXN0W2ldKTsKKwl9CisJbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CisKK3ByZV9tdXRleF9lcnI6CisJZHJtX2ZyZWUob2JqZWN0X2xpc3QsIHNpemVvZigqb2JqZWN0X2xpc3QpICogYXJncy0+YnVmZmVyX2NvdW50LAorCQkgRFJNX01FTV9EUklWRVIpOworCWRybV9mcmVlKGV4ZWNfbGlzdCwgc2l6ZW9mKCpleGVjX2xpc3QpICogYXJncy0+YnVmZmVyX2NvdW50LAorCQkgRFJNX01FTV9EUklWRVIpOworCisJcmV0dXJuIHJldDsKK30KKworaW50CitpOTE1X2dlbV9vYmplY3RfcGluKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqLCB1aW50MzJfdCBhbGlnbm1lbnQpCit7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IG9iai0+ZGV2OworCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmpfcHJpdiA9IG9iai0+ZHJpdmVyX3ByaXZhdGU7CisJaW50IHJldDsKKworCWk5MTVfdmVyaWZ5X2luYWN0aXZlKGRldiwgX19GSUxFX18sIF9fTElORV9fKTsKKwlpZiAob2JqX3ByaXYtPmd0dF9zcGFjZSA9PSBOVUxMKSB7CisJCXJldCA9IGk5MTVfZ2VtX29iamVjdF9iaW5kX3RvX2d0dChvYmosIGFsaWdubWVudCk7CisJCWlmIChyZXQgIT0gMCkgeworCQkJRFJNX0VSUk9SKCJGYWlsdXJlIHRvIGJpbmQ6ICVkIiwgcmV0KTsKKwkJCXJldHVybiByZXQ7CisJCX0KKwl9CisJb2JqX3ByaXYtPnBpbl9jb3VudCsrOworCisJLyogSWYgdGhlIG9iamVjdCBpcyBub3QgYWN0aXZlIGFuZCBub3QgcGVuZGluZyBhIGZsdXNoLAorCSAqIHJlbW92ZSBpdCBmcm9tIHRoZSBpbmFjdGl2ZSBsaXN0CisJICovCisJaWYgKG9ial9wcml2LT5waW5fY291bnQgPT0gMSkgeworCQlhdG9taWNfaW5jKCZkZXYtPnBpbl9jb3VudCk7CisJCWF0b21pY19hZGQob2JqLT5zaXplLCAmZGV2LT5waW5fbWVtb3J5KTsKKwkJaWYgKCFvYmpfcHJpdi0+YWN0aXZlICYmCisJCSAgICAob2JqLT53cml0ZV9kb21haW4gJiB+KEk5MTVfR0VNX0RPTUFJTl9DUFUgfAorCQkJCQkgICBJOTE1X0dFTV9ET01BSU5fR1RUKSkgPT0gMCAmJgorCQkgICAgIWxpc3RfZW1wdHkoJm9ial9wcml2LT5saXN0KSkKKwkJCWxpc3RfZGVsX2luaXQoJm9ial9wcml2LT5saXN0KTsKKwl9CisJaTkxNV92ZXJpZnlfaW5hY3RpdmUoZGV2LCBfX0ZJTEVfXywgX19MSU5FX18pOworCisJcmV0dXJuIDA7Cit9CisKK3ZvaWQKK2k5MTVfZ2VtX29iamVjdF91bnBpbihzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaikKK3sKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gb2JqLT5kZXY7CisJZHJtX2k5MTVfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9ial9wcml2ID0gb2JqLT5kcml2ZXJfcHJpdmF0ZTsKKworCWk5MTVfdmVyaWZ5X2luYWN0aXZlKGRldiwgX19GSUxFX18sIF9fTElORV9fKTsKKwlvYmpfcHJpdi0+cGluX2NvdW50LS07CisJQlVHX09OKG9ial9wcml2LT5waW5fY291bnQgPCAwKTsKKwlCVUdfT04ob2JqX3ByaXYtPmd0dF9zcGFjZSA9PSBOVUxMKTsKKworCS8qIElmIHRoZSBvYmplY3QgaXMgbm8gbG9uZ2VyIHBpbm5lZCwgYW5kIGlzCisJICogbmVpdGhlciBhY3RpdmUgbm9yIGJlaW5nIGZsdXNoZWQsIHRoZW4gc3RpY2sgaXQgb24KKwkgKiB0aGUgaW5hY3RpdmUgbGlzdAorCSAqLworCWlmIChvYmpfcHJpdi0+cGluX2NvdW50ID09IDApIHsKKwkJaWYgKCFvYmpfcHJpdi0+YWN0aXZlICYmCisJCSAgICAob2JqLT53cml0ZV9kb21haW4gJiB+KEk5MTVfR0VNX0RPTUFJTl9DUFUgfAorCQkJCQkgICBJOTE1X0dFTV9ET01BSU5fR1RUKSkgPT0gMCkKKwkJCWxpc3RfbW92ZV90YWlsKCZvYmpfcHJpdi0+bGlzdCwKKwkJCQkgICAgICAgJmRldl9wcml2LT5tbS5pbmFjdGl2ZV9saXN0KTsKKwkJYXRvbWljX2RlYygmZGV2LT5waW5fY291bnQpOworCQlhdG9taWNfc3ViKG9iai0+c2l6ZSwgJmRldi0+cGluX21lbW9yeSk7CisJfQorCWk5MTVfdmVyaWZ5X2luYWN0aXZlKGRldiwgX19GSUxFX18sIF9fTElORV9fKTsKK30KKworaW50CitpOTE1X2dlbV9waW5faW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKKwkJICAgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpCit7CisJc3RydWN0IGRybV9pOTE1X2dlbV9waW4gKmFyZ3MgPSBkYXRhOworCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqOworCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmpfcHJpdjsKKwlpbnQgcmV0OworCisJbXV0ZXhfbG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOworCisJb2JqID0gZHJtX2dlbV9vYmplY3RfbG9va3VwKGRldiwgZmlsZV9wcml2LCBhcmdzLT5oYW5kbGUpOworCWlmIChvYmogPT0gTlVMTCkgeworCQlEUk1fRVJST1IoIkJhZCBoYW5kbGUgaW4gaTkxNV9nZW1fcGluX2lvY3RsKCk6ICVkXG4iLAorCQkJICBhcmdzLT5oYW5kbGUpOworCQltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKKwkJcmV0dXJuIC1FQkFERjsKKwl9CisJb2JqX3ByaXYgPSBvYmotPmRyaXZlcl9wcml2YXRlOworCisJcmV0ID0gaTkxNV9nZW1fb2JqZWN0X3BpbihvYmosIGFyZ3MtPmFsaWdubWVudCk7CisJaWYgKHJldCAhPSAwKSB7CisJCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlKG9iaik7CisJCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOworCQlyZXR1cm4gcmV0OworCX0KKworCS8qIFhYWCAtIGZsdXNoIHRoZSBDUFUgY2FjaGVzIGZvciBwaW5uZWQgb2JqZWN0cworCSAqIGFzIHRoZSBYIHNlcnZlciBkb2Vzbid0IG1hbmFnZSBkb21haW5zIHlldAorCSAqLworCWlmIChvYmotPndyaXRlX2RvbWFpbiAmIEk5MTVfR0VNX0RPTUFJTl9DUFUpIHsKKwkJaTkxNV9nZW1fY2xmbHVzaF9vYmplY3Qob2JqKTsKKwkJZHJtX2FncF9jaGlwc2V0X2ZsdXNoKGRldik7CisJCW9iai0+d3JpdGVfZG9tYWluID0gMDsKKwl9CisJYXJncy0+b2Zmc2V0ID0gb2JqX3ByaXYtPmd0dF9vZmZzZXQ7CisJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2Uob2JqKTsKKwltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKKworCXJldHVybiAwOworfQorCitpbnQKK2k5MTVfZ2VtX3VucGluX2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCisJCSAgICAgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpCit7CisJc3RydWN0IGRybV9pOTE1X2dlbV9waW4gKmFyZ3MgPSBkYXRhOworCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqOworCisJbXV0ZXhfbG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOworCisJb2JqID0gZHJtX2dlbV9vYmplY3RfbG9va3VwKGRldiwgZmlsZV9wcml2LCBhcmdzLT5oYW5kbGUpOworCWlmIChvYmogPT0gTlVMTCkgeworCQlEUk1fRVJST1IoIkJhZCBoYW5kbGUgaW4gaTkxNV9nZW1fdW5waW5faW9jdGwoKTogJWRcbiIsCisJCQkgIGFyZ3MtPmhhbmRsZSk7CisJCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOworCQlyZXR1cm4gLUVCQURGOworCX0KKworCWk5MTVfZ2VtX29iamVjdF91bnBpbihvYmopOworCisJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2Uob2JqKTsKKwltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKKwlyZXR1cm4gMDsKK30KKworaW50CitpOTE1X2dlbV9idXN5X2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCisJCSAgICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdikKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2J1c3kgKmFyZ3MgPSBkYXRhOworCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqOworCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmpfcHJpdjsKKworCW11dGV4X2xvY2soJmRldi0+c3RydWN0X211dGV4KTsKKwlvYmogPSBkcm1fZ2VtX29iamVjdF9sb29rdXAoZGV2LCBmaWxlX3ByaXYsIGFyZ3MtPmhhbmRsZSk7CisJaWYgKG9iaiA9PSBOVUxMKSB7CisJCURSTV9FUlJPUigiQmFkIGhhbmRsZSBpbiBpOTE1X2dlbV9idXN5X2lvY3RsKCk6ICVkXG4iLAorCQkJICBhcmdzLT5oYW5kbGUpOworCQltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKKwkJcmV0dXJuIC1FQkFERjsKKwl9CisKKwlvYmpfcHJpdiA9IG9iai0+ZHJpdmVyX3ByaXZhdGU7CisJYXJncy0+YnVzeSA9IG9ial9wcml2LT5hY3RpdmU7CisKKwlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZShvYmopOworCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOworCXJldHVybiAwOworfQorCitpbnQKK2k5MTVfZ2VtX3Rocm90dGxlX2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCisJCQlzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdikKK3sKKyAgICByZXR1cm4gaTkxNV9nZW1fcmluZ190aHJvdHRsZShkZXYsIGZpbGVfcHJpdik7Cit9CisKK2ludCBpOTE1X2dlbV9pbml0X29iamVjdChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaikKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqX3ByaXY7CisKKwlvYmpfcHJpdiA9IGRybV9jYWxsb2MoMSwgc2l6ZW9mKCpvYmpfcHJpdiksIERSTV9NRU1fRFJJVkVSKTsKKwlpZiAob2JqX3ByaXYgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwkvKgorCSAqIFdlJ3ZlIGp1c3QgYWxsb2NhdGVkIHBhZ2VzIGZyb20gdGhlIGtlcm5lbCwKKwkgKiBzbyB0aGV5J3ZlIGp1c3QgYmVlbiB3cml0dGVuIGJ5IHRoZSBDUFUgd2l0aAorCSAqIHplcm9zLiBUaGV5J2xsIG5lZWQgdG8gYmUgY2xmbHVzaGVkIGJlZm9yZSB3ZQorCSAqIHVzZSB0aGVtIHdpdGggdGhlIEdQVS4KKwkgKi8KKwlvYmotPndyaXRlX2RvbWFpbiA9IEk5MTVfR0VNX0RPTUFJTl9DUFU7CisJb2JqLT5yZWFkX2RvbWFpbnMgPSBJOTE1X0dFTV9ET01BSU5fQ1BVOworCisJb2JqX3ByaXYtPmFncF90eXBlID0gQUdQX1VTRVJfTUVNT1JZOworCisJb2JqLT5kcml2ZXJfcHJpdmF0ZSA9IG9ial9wcml2OworCW9ial9wcml2LT5vYmogPSBvYmo7CisJSU5JVF9MSVNUX0hFQUQoJm9ial9wcml2LT5saXN0KTsKKwlyZXR1cm4gMDsKK30KKwordm9pZCBpOTE1X2dlbV9mcmVlX29iamVjdChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaikKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqX3ByaXYgPSBvYmotPmRyaXZlcl9wcml2YXRlOworCisJd2hpbGUgKG9ial9wcml2LT5waW5fY291bnQgPiAwKQorCQlpOTE1X2dlbV9vYmplY3RfdW5waW4ob2JqKTsKKworCWk5MTVfZ2VtX29iamVjdF91bmJpbmQob2JqKTsKKworCWRybV9mcmVlKG9ial9wcml2LT5wYWdlX2NwdV92YWxpZCwgMSwgRFJNX01FTV9EUklWRVIpOworCWRybV9mcmVlKG9iai0+ZHJpdmVyX3ByaXZhdGUsIDEsIERSTV9NRU1fRFJJVkVSKTsKK30KKworc3RhdGljIGludAoraTkxNV9nZW1fc2V0X2RvbWFpbihzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiwKKwkJICAgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2LAorCQkgICAgdWludDMyX3QgcmVhZF9kb21haW5zLAorCQkgICAgdWludDMyX3Qgd3JpdGVfZG9tYWluKQoreworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBvYmotPmRldjsKKwlpbnQgcmV0OworCXVpbnQzMl90IGZsdXNoX2RvbWFpbnM7CisKKwlCVUdfT04oIW11dGV4X2lzX2xvY2tlZCgmZGV2LT5zdHJ1Y3RfbXV0ZXgpKTsKKworCXJldCA9IGk5MTVfZ2VtX29iamVjdF9zZXRfZG9tYWluKG9iaiwgcmVhZF9kb21haW5zLCB3cml0ZV9kb21haW4pOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisJZmx1c2hfZG9tYWlucyA9IGk5MTVfZ2VtX2Rldl9zZXRfZG9tYWluKG9iai0+ZGV2KTsKKworCWlmIChmbHVzaF9kb21haW5zICYgfihJOTE1X0dFTV9ET01BSU5fQ1BVfEk5MTVfR0VNX0RPTUFJTl9HVFQpKQorCQkodm9pZCkgaTkxNV9hZGRfcmVxdWVzdChkZXYsIGZsdXNoX2RvbWFpbnMpOworCisJcmV0dXJuIDA7Cit9CisKKy8qKiBVbmJpbmRzIGFsbCBvYmplY3RzIHRoYXQgYXJlIG9uIHRoZSBnaXZlbiBidWZmZXIgbGlzdC4gKi8KK3N0YXRpYyBpbnQKK2k5MTVfZ2VtX2V2aWN0X2Zyb21fbGlzdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKQoreworCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqOworCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmpfcHJpdjsKKwlpbnQgcmV0OworCisJd2hpbGUgKCFsaXN0X2VtcHR5KGhlYWQpKSB7CisJCW9ial9wcml2ID0gbGlzdF9maXJzdF9lbnRyeShoZWFkLAorCQkJCQkgICAgc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QsCisJCQkJCSAgICBsaXN0KTsKKwkJb2JqID0gb2JqX3ByaXYtPm9iajsKKworCQlpZiAob2JqX3ByaXYtPnBpbl9jb3VudCAhPSAwKSB7CisJCQlEUk1fRVJST1IoIlBpbm5lZCBvYmplY3QgaW4gdW5iaW5kIGxpc3RcbiIpOworCQkJbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCisJCXJldCA9IGk5MTVfZ2VtX29iamVjdF91bmJpbmQob2JqKTsKKwkJaWYgKHJldCAhPSAwKSB7CisJCQlEUk1fRVJST1IoIkVycm9yIHVuYmluZGluZyBvYmplY3QgaW4gTGVhdmVWVDogJWRcbiIsCisJCQkJICByZXQpOworCQkJbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CisJCQlyZXR1cm4gcmV0OworCQl9CisJfQorCisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludAoraTkxNV9nZW1faWRsZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQoreworCWRybV9pOTE1X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCXVpbnQzMl90IHNlcW5vLCBjdXJfc2Vxbm8sIGxhc3Rfc2Vxbm87CisJaW50IHN0dWNrLCByZXQ7CisKKwltdXRleF9sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CisKKwlpZiAoZGV2X3ByaXYtPm1tLnN1c3BlbmRlZCB8fCBkZXZfcHJpdi0+cmluZy5yaW5nX29iaiA9PSBOVUxMKSB7CisJCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOworCQlyZXR1cm4gMDsKKwl9CisKKwkvKiBIYWNrISAgRG9uJ3QgbGV0IGFueWJvZHkgZG8gZXhlY2J1ZiB3aGlsZSB3ZSBkb24ndCBjb250cm9sIHRoZSBjaGlwLgorCSAqIFdlIG5lZWQgdG8gcmVwbGFjZSB0aGlzIHdpdGggYSBzZW1hcGhvcmUsIG9yIHNvbWV0aGluZy4KKwkgKi8KKwlkZXZfcHJpdi0+bW0uc3VzcGVuZGVkID0gMTsKKworCS8qIENhbmNlbCB0aGUgcmV0aXJlIHdvcmsgaGFuZGxlciwgd2FpdCBmb3IgaXQgdG8gZmluaXNoIGlmIHJ1bm5pbmcKKwkgKi8KKwltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKKwljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJmRldl9wcml2LT5tbS5yZXRpcmVfd29yayk7CisJbXV0ZXhfbG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOworCisJaTkxNV9rZXJuZWxfbG9zdF9jb250ZXh0KGRldik7CisKKwkvKiBGbHVzaCB0aGUgR1BVIGFsb25nIHdpdGggYWxsIG5vbi1DUFUgd3JpdGUgZG9tYWlucworCSAqLworCWk5MTVfZ2VtX2ZsdXNoKGRldiwgfihJOTE1X0dFTV9ET01BSU5fQ1BVfEk5MTVfR0VNX0RPTUFJTl9HVFQpLAorCQkgICAgICAgfihJOTE1X0dFTV9ET01BSU5fQ1BVfEk5MTVfR0VNX0RPTUFJTl9HVFQpKTsKKwlzZXFubyA9IGk5MTVfYWRkX3JlcXVlc3QoZGV2LCB+KEk5MTVfR0VNX0RPTUFJTl9DUFUgfAorCQkJCQlJOTE1X0dFTV9ET01BSU5fR1RUKSk7CisKKwlpZiAoc2Vxbm8gPT0gMCkgeworCQltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJZGV2X3ByaXYtPm1tLndhaXRpbmdfZ2VtX3NlcW5vID0gc2Vxbm87CisJbGFzdF9zZXFubyA9IDA7CisJc3R1Y2sgPSAwOworCWZvciAoOzspIHsKKwkJY3VyX3NlcW5vID0gaTkxNV9nZXRfZ2VtX3NlcW5vKGRldik7CisJCWlmIChpOTE1X3NlcW5vX3Bhc3NlZChjdXJfc2Vxbm8sIHNlcW5vKSkKKwkJCWJyZWFrOworCQlpZiAobGFzdF9zZXFubyA9PSBjdXJfc2Vxbm8pIHsKKwkJCWlmIChzdHVjaysrID4gMTAwKSB7CisJCQkJRFJNX0VSUk9SKCJoYXJkd2FyZSB3ZWRnZWRcbiIpOworCQkJCWRldl9wcml2LT5tbS53ZWRnZWQgPSAxOworCQkJCURSTV9XQUtFVVAoJmRldl9wcml2LT5pcnFfcXVldWUpOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJCW1zbGVlcCgxMCk7CisJCWxhc3Rfc2Vxbm8gPSBjdXJfc2Vxbm87CisJfQorCWRldl9wcml2LT5tbS53YWl0aW5nX2dlbV9zZXFubyA9IDA7CisKKwlpOTE1X2dlbV9yZXRpcmVfcmVxdWVzdHMoZGV2KTsKKworCS8qIEFjdGl2ZSBhbmQgZmx1c2hpbmcgc2hvdWxkIG5vdyBiZSBlbXB0eSBhcyB3ZSd2ZQorCSAqIHdhaXRlZCBmb3IgYSBzZXF1ZW5jZSBoaWdoZXIgdGhhbiBhbnkgcGVuZGluZyBleGVjYnVmZmVyCisJICovCisJQlVHX09OKCFsaXN0X2VtcHR5KCZkZXZfcHJpdi0+bW0uYWN0aXZlX2xpc3QpKTsKKwlCVUdfT04oIWxpc3RfZW1wdHkoJmRldl9wcml2LT5tbS5mbHVzaGluZ19saXN0KSk7CisKKwkvKiBSZXF1ZXN0IHNob3VsZCBub3cgYmUgZW1wdHkgYXMgd2UndmUgYWxzbyB3YWl0ZWQKKwkgKiBmb3IgdGhlIGxhc3QgcmVxdWVzdCBpbiB0aGUgbGlzdAorCSAqLworCUJVR19PTighbGlzdF9lbXB0eSgmZGV2X3ByaXYtPm1tLnJlcXVlc3RfbGlzdCkpOworCisJLyogTW92ZSBhbGwgYnVmZmVycyBvdXQgb2YgdGhlIEdUVC4gKi8KKwlyZXQgPSBpOTE1X2dlbV9ldmljdF9mcm9tX2xpc3QoZGV2LCAmZGV2X3ByaXYtPm1tLmluYWN0aXZlX2xpc3QpOworCWlmIChyZXQpIHsKKwkJbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CisJCXJldHVybiByZXQ7CisJfQorCisJQlVHX09OKCFsaXN0X2VtcHR5KCZkZXZfcHJpdi0+bW0uYWN0aXZlX2xpc3QpKTsKKwlCVUdfT04oIWxpc3RfZW1wdHkoJmRldl9wcml2LT5tbS5mbHVzaGluZ19saXN0KSk7CisJQlVHX09OKCFsaXN0X2VtcHR5KCZkZXZfcHJpdi0+bW0uaW5hY3RpdmVfbGlzdCkpOworCUJVR19PTighbGlzdF9lbXB0eSgmZGV2X3ByaXYtPm1tLnJlcXVlc3RfbGlzdCkpOworCisJaTkxNV9nZW1fY2xlYW51cF9yaW5nYnVmZmVyKGRldik7CisJbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludAoraTkxNV9nZW1faW5pdF9od3Moc3RydWN0IGRybV9kZXZpY2UgKmRldikKK3sKKwlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iajsKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqX3ByaXY7CisJaW50IHJldDsKKworCS8qIElmIHdlIG5lZWQgYSBwaHlzaWNhbCBhZGRyZXNzIGZvciB0aGUgc3RhdHVzIHBhZ2UsIGl0J3MgYWxyZWFkeQorCSAqIGluaXRpYWxpemVkIGF0IGRyaXZlciBsb2FkIHRpbWUuCisJICovCisJaWYgKCFJOTE1X05FRURfR0ZYX0hXUyhkZXYpKQorCQlyZXR1cm4gMDsKKworCW9iaiA9IGRybV9nZW1fb2JqZWN0X2FsbG9jKGRldiwgNDA5Nik7CisJaWYgKG9iaiA9PSBOVUxMKSB7CisJCURSTV9FUlJPUigiRmFpbGVkIHRvIGFsbG9jYXRlIHN0YXR1cyBwYWdlXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCW9ial9wcml2ID0gb2JqLT5kcml2ZXJfcHJpdmF0ZTsKKwlvYmpfcHJpdi0+YWdwX3R5cGUgPSBBR1BfVVNFUl9DQUNIRURfTUVNT1JZOworCisJcmV0ID0gaTkxNV9nZW1fb2JqZWN0X3BpbihvYmosIDQwOTYpOworCWlmIChyZXQgIT0gMCkgeworCQlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZShvYmopOworCQlyZXR1cm4gcmV0OworCX0KKworCWRldl9wcml2LT5zdGF0dXNfZ2Z4X2FkZHIgPSBvYmpfcHJpdi0+Z3R0X29mZnNldDsKKworCWRldl9wcml2LT5od19zdGF0dXNfcGFnZSA9IGttYXAob2JqX3ByaXYtPnBhZ2VfbGlzdFswXSk7CisJaWYgKGRldl9wcml2LT5od19zdGF0dXNfcGFnZSA9PSBOVUxMKSB7CisJCURSTV9FUlJPUigiRmFpbGVkIHRvIG1hcCBzdGF0dXMgcGFnZS5cbiIpOworCQltZW1zZXQoJmRldl9wcml2LT5od3NfbWFwLCAwLCBzaXplb2YoZGV2X3ByaXYtPmh3c19tYXApKTsKKwkJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2Uob2JqKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCWRldl9wcml2LT5od3Nfb2JqID0gb2JqOworCW1lbXNldChkZXZfcHJpdi0+aHdfc3RhdHVzX3BhZ2UsIDAsIFBBR0VfU0laRSk7CisJSTkxNV9XUklURShIV1NfUEdBLCBkZXZfcHJpdi0+c3RhdHVzX2dmeF9hZGRyKTsKKwlJOTE1X1JFQUQoSFdTX1BHQSk7IC8qIHBvc3RpbmcgcmVhZCAqLworCURSTV9ERUJVRygiaHdzIG9mZnNldDogMHglMDh4XG4iLCBkZXZfcHJpdi0+c3RhdHVzX2dmeF9hZGRyKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50CitpOTE1X2dlbV9pbml0X3JpbmdidWZmZXIoc3RydWN0IGRybV9kZXZpY2UgKmRldikKK3sKKwlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iajsKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqX3ByaXY7CisJaW50IHJldDsKKwl1MzIgaGVhZDsKKworCXJldCA9IGk5MTVfZ2VtX2luaXRfaHdzKGRldik7CisJaWYgKHJldCAhPSAwKQorCQlyZXR1cm4gcmV0OworCisJb2JqID0gZHJtX2dlbV9vYmplY3RfYWxsb2MoZGV2LCAxMjggKiAxMDI0KTsKKwlpZiAob2JqID09IE5VTEwpIHsKKwkJRFJNX0VSUk9SKCJGYWlsZWQgdG8gYWxsb2NhdGUgcmluZ2J1ZmZlclxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwlvYmpfcHJpdiA9IG9iai0+ZHJpdmVyX3ByaXZhdGU7CisKKwlyZXQgPSBpOTE1X2dlbV9vYmplY3RfcGluKG9iaiwgNDA5Nik7CisJaWYgKHJldCAhPSAwKSB7CisJCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlKG9iaik7CisJCXJldHVybiByZXQ7CisJfQorCisJLyogU2V0IHVwIHRoZSBrZXJuZWwgbWFwcGluZyBmb3IgdGhlIHJpbmcuICovCisJZGV2X3ByaXYtPnJpbmcuU2l6ZSA9IG9iai0+c2l6ZTsKKwlkZXZfcHJpdi0+cmluZy50YWlsX21hc2sgPSBvYmotPnNpemUgLSAxOworCisJZGV2X3ByaXYtPnJpbmcubWFwLm9mZnNldCA9IGRldi0+YWdwLT5iYXNlICsgb2JqX3ByaXYtPmd0dF9vZmZzZXQ7CisJZGV2X3ByaXYtPnJpbmcubWFwLnNpemUgPSBvYmotPnNpemU7CisJZGV2X3ByaXYtPnJpbmcubWFwLnR5cGUgPSAwOworCWRldl9wcml2LT5yaW5nLm1hcC5mbGFncyA9IDA7CisJZGV2X3ByaXYtPnJpbmcubWFwLm10cnIgPSAwOworCisJZHJtX2NvcmVfaW9yZW1hcF93YygmZGV2X3ByaXYtPnJpbmcubWFwLCBkZXYpOworCWlmIChkZXZfcHJpdi0+cmluZy5tYXAuaGFuZGxlID09IE5VTEwpIHsKKwkJRFJNX0VSUk9SKCJGYWlsZWQgdG8gbWFwIHJpbmdidWZmZXIuXG4iKTsKKwkJbWVtc2V0KCZkZXZfcHJpdi0+cmluZywgMCwgc2l6ZW9mKGRldl9wcml2LT5yaW5nKSk7CisJCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlKG9iaik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlkZXZfcHJpdi0+cmluZy5yaW5nX29iaiA9IG9iajsKKwlkZXZfcHJpdi0+cmluZy52aXJ0dWFsX3N0YXJ0ID0gZGV2X3ByaXYtPnJpbmcubWFwLmhhbmRsZTsKKworCS8qIFN0b3AgdGhlIHJpbmcgaWYgaXQncyBydW5uaW5nLiAqLworCUk5MTVfV1JJVEUoUFJCMF9DVEwsIDApOworCUk5MTVfV1JJVEUoUFJCMF9UQUlMLCAwKTsKKwlJOTE1X1dSSVRFKFBSQjBfSEVBRCwgMCk7CisKKwkvKiBJbml0aWFsaXplIHRoZSByaW5nLiAqLworCUk5MTVfV1JJVEUoUFJCMF9TVEFSVCwgb2JqX3ByaXYtPmd0dF9vZmZzZXQpOworCWhlYWQgPSBJOTE1X1JFQUQoUFJCMF9IRUFEKSAmIEhFQURfQUREUjsKKworCS8qIEc0NSByaW5nIGluaXRpYWxpemF0aW9uIGZhaWxzIHRvIHJlc2V0IGhlYWQgdG8gemVybyAqLworCWlmIChoZWFkICE9IDApIHsKKwkJRFJNX0VSUk9SKCJSaW5nIGhlYWQgbm90IHJlc2V0IHRvIHplcm8gIgorCQkJICAiY3RsICUwOHggaGVhZCAlMDh4IHRhaWwgJTA4eCBzdGFydCAlMDh4XG4iLAorCQkJICBJOTE1X1JFQUQoUFJCMF9DVEwpLAorCQkJICBJOTE1X1JFQUQoUFJCMF9IRUFEKSwKKwkJCSAgSTkxNV9SRUFEKFBSQjBfVEFJTCksCisJCQkgIEk5MTVfUkVBRChQUkIwX1NUQVJUKSk7CisJCUk5MTVfV1JJVEUoUFJCMF9IRUFELCAwKTsKKworCQlEUk1fRVJST1IoIlJpbmcgaGVhZCBmb3JjZWQgdG8gemVybyAiCisJCQkgICJjdGwgJTA4eCBoZWFkICUwOHggdGFpbCAlMDh4IHN0YXJ0ICUwOHhcbiIsCisJCQkgIEk5MTVfUkVBRChQUkIwX0NUTCksCisJCQkgIEk5MTVfUkVBRChQUkIwX0hFQUQpLAorCQkJICBJOTE1X1JFQUQoUFJCMF9UQUlMKSwKKwkJCSAgSTkxNV9SRUFEKFBSQjBfU1RBUlQpKTsKKwl9CisKKwlJOTE1X1dSSVRFKFBSQjBfQ1RMLAorCQkgICAoKG9iai0+c2l6ZSAtIDQwOTYpICYgUklOR19OUl9QQUdFUykgfAorCQkgICBSSU5HX05PX1JFUE9SVCB8CisJCSAgIFJJTkdfVkFMSUQpOworCisJaGVhZCA9IEk5MTVfUkVBRChQUkIwX0hFQUQpICYgSEVBRF9BRERSOworCisJLyogSWYgdGhlIGhlYWQgaXMgc3RpbGwgbm90IHplcm8sIHRoZSByaW5nIGlzIGRlYWQgKi8KKwlpZiAoaGVhZCAhPSAwKSB7CisJCURSTV9FUlJPUigiUmluZyBpbml0aWFsaXphdGlvbiBmYWlsZWQgIgorCQkJICAiY3RsICUwOHggaGVhZCAlMDh4IHRhaWwgJTA4eCBzdGFydCAlMDh4XG4iLAorCQkJICBJOTE1X1JFQUQoUFJCMF9DVEwpLAorCQkJICBJOTE1X1JFQUQoUFJCMF9IRUFEKSwKKwkJCSAgSTkxNV9SRUFEKFBSQjBfVEFJTCksCisJCQkgIEk5MTVfUkVBRChQUkIwX1NUQVJUKSk7CisJCXJldHVybiAtRUlPOworCX0KKworCS8qIFVwZGF0ZSBvdXIgY2FjaGUgb2YgdGhlIHJpbmcgc3RhdGUgKi8KKwlpOTE1X2tlcm5lbF9sb3N0X2NvbnRleHQoZGV2KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZAoraTkxNV9nZW1fY2xlYW51cF9yaW5nYnVmZmVyKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCit7CisJZHJtX2k5MTVfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisKKwlpZiAoZGV2X3ByaXYtPnJpbmcucmluZ19vYmogPT0gTlVMTCkKKwkJcmV0dXJuOworCisJZHJtX2NvcmVfaW9yZW1hcGZyZWUoJmRldl9wcml2LT5yaW5nLm1hcCwgZGV2KTsKKworCWk5MTVfZ2VtX29iamVjdF91bnBpbihkZXZfcHJpdi0+cmluZy5yaW5nX29iaik7CisJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2UoZGV2X3ByaXYtPnJpbmcucmluZ19vYmopOworCWRldl9wcml2LT5yaW5nLnJpbmdfb2JqID0gTlVMTDsKKwltZW1zZXQoJmRldl9wcml2LT5yaW5nLCAwLCBzaXplb2YoZGV2X3ByaXYtPnJpbmcpKTsKKworCWlmIChkZXZfcHJpdi0+aHdzX29iaiAhPSBOVUxMKSB7CisJCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqID0gZGV2X3ByaXYtPmh3c19vYmo7CisJCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmpfcHJpdiA9IG9iai0+ZHJpdmVyX3ByaXZhdGU7CisKKwkJa3VubWFwKG9ial9wcml2LT5wYWdlX2xpc3RbMF0pOworCQlpOTE1X2dlbV9vYmplY3RfdW5waW4ob2JqKTsKKwkJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2Uob2JqKTsKKwkJZGV2X3ByaXYtPmh3c19vYmogPSBOVUxMOworCQltZW1zZXQoJmRldl9wcml2LT5od3NfbWFwLCAwLCBzaXplb2YoZGV2X3ByaXYtPmh3c19tYXApKTsKKwkJZGV2X3ByaXYtPmh3X3N0YXR1c19wYWdlID0gTlVMTDsKKworCQkvKiBXcml0ZSBoaWdoIGFkZHJlc3MgaW50byBIV1NfUEdBIHdoZW4gZGlzYWJsaW5nLiAqLworCQlJOTE1X1dSSVRFKEhXU19QR0EsIDB4MWZmZmYwMDApOworCX0KK30KKworaW50CitpOTE1X2dlbV9lbnRlcnZ0X2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCisJCSAgICAgICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdikKK3sKKwlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlpbnQgcmV0OworCisJaWYgKGRldl9wcml2LT5tbS53ZWRnZWQpIHsKKwkJRFJNX0VSUk9SKCJSZWVuYWJsaW5nIHdlZGdlZCBoYXJkd2FyZSwgZ29vZCBsdWNrXG4iKTsKKwkJZGV2X3ByaXYtPm1tLndlZGdlZCA9IDA7CisJfQorCisJcmV0ID0gaTkxNV9nZW1faW5pdF9yaW5nYnVmZmVyKGRldik7CisJaWYgKHJldCAhPSAwKQorCQlyZXR1cm4gcmV0OworCisJbXV0ZXhfbG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOworCUJVR19PTighbGlzdF9lbXB0eSgmZGV2X3ByaXYtPm1tLmFjdGl2ZV9saXN0KSk7CisJQlVHX09OKCFsaXN0X2VtcHR5KCZkZXZfcHJpdi0+bW0uZmx1c2hpbmdfbGlzdCkpOworCUJVR19PTighbGlzdF9lbXB0eSgmZGV2X3ByaXYtPm1tLmluYWN0aXZlX2xpc3QpKTsKKwlCVUdfT04oIWxpc3RfZW1wdHkoJmRldl9wcml2LT5tbS5yZXF1ZXN0X2xpc3QpKTsKKwlkZXZfcHJpdi0+bW0uc3VzcGVuZGVkID0gMDsKKwltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKKworCWRybV9pcnFfaW5zdGFsbChkZXYpOworCisJcmV0dXJuIDA7Cit9CisKK2ludAoraTkxNV9nZW1fbGVhdmV2dF9pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAorCQkgICAgICAgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpCit7CisJaW50IHJldDsKKworCXJldCA9IGk5MTVfZ2VtX2lkbGUoZGV2KTsKKwlkcm1faXJxX3VuaW5zdGFsbChkZXYpOworCisJcmV0dXJuIHJldDsKK30KKwordm9pZAoraTkxNV9nZW1fbGFzdGNsb3NlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCit7CisJaW50IHJldDsKKworCXJldCA9IGk5MTVfZ2VtX2lkbGUoZGV2KTsKKwlpZiAocmV0KQorCQlEUk1fRVJST1IoImZhaWxlZCB0byBpZGxlIGhhcmR3YXJlOiAlZFxuIiwgcmV0KTsKK30KKwordm9pZAoraTkxNV9nZW1fbG9hZChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQoreworCWRybV9pOTE1X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCisJSU5JVF9MSVNUX0hFQUQoJmRldl9wcml2LT5tbS5hY3RpdmVfbGlzdCk7CisJSU5JVF9MSVNUX0hFQUQoJmRldl9wcml2LT5tbS5mbHVzaGluZ19saXN0KTsKKwlJTklUX0xJU1RfSEVBRCgmZGV2X3ByaXYtPm1tLmluYWN0aXZlX2xpc3QpOworCUlOSVRfTElTVF9IRUFEKCZkZXZfcHJpdi0+bW0ucmVxdWVzdF9saXN0KTsKKwlJTklUX0RFTEFZRURfV09SSygmZGV2X3ByaXYtPm1tLnJldGlyZV93b3JrLAorCQkJICBpOTE1X2dlbV9yZXRpcmVfd29ya19oYW5kbGVyKTsKKwlJTklUX1dPUksoJmRldl9wcml2LT5tbS52Ymxhbmtfd29yaywKKwkJICBpOTE1X2dlbV92Ymxhbmtfd29ya19oYW5kbGVyKTsKKwlkZXZfcHJpdi0+bW0ubmV4dF9nZW1fc2Vxbm8gPSAxOworCisJaTkxNV9nZW1fZGV0ZWN0X2JpdF82X3N3aXp6bGUoZGV2KTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2RlYnVnLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9kZWJ1Zy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzMWMwODgKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9kZWJ1Zy5jCkBAIC0wLDAgKzEsMjAxIEBACisvKgorICogQ29weXJpZ2h0IMKpIDIwMDggSW50ZWwgQ29ycG9yYXRpb24KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAorICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhlIG5leHQKKyAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUKKyAqIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAorICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCisgKiBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTCisgKiBJTiBUSEUgU09GVFdBUkUuCisgKgorICogQXV0aG9yczoKKyAqICAgIEtlaXRoIFBhY2thcmQgPGtlaXRocEBrZWl0aHAuY29tPgorICoKKyAqLworCisjaW5jbHVkZSAiZHJtUC5oIgorI2luY2x1ZGUgImRybS5oIgorI2luY2x1ZGUgImk5MTVfZHJtLmgiCisjaW5jbHVkZSAiaTkxNV9kcnYuaCIKKworI2lmIFdBVENIX0lOQUNUSVZFCit2b2lkCitpOTE1X3ZlcmlmeV9pbmFjdGl2ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBjaGFyICpmaWxlLCBpbnQgbGluZSkKK3sKKwlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iajsKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqX3ByaXY7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KG9ial9wcml2LCAmZGV2X3ByaXYtPm1tLmluYWN0aXZlX2xpc3QsIGxpc3QpIHsKKwkJb2JqID0gb2JqX3ByaXYtPm9iajsKKwkJaWYgKG9ial9wcml2LT5waW5fY291bnQgfHwgb2JqX3ByaXYtPmFjdGl2ZSB8fAorCQkgICAgKG9iai0+d3JpdGVfZG9tYWluICYgfihJOTE1X0dFTV9ET01BSU5fQ1BVIHwKKwkJCQkJICAgSTkxNV9HRU1fRE9NQUlOX0dUVCkpKQorCQkJRFJNX0VSUk9SKCJpbmFjdGl2ZSAlcCAocCAlZCBhICVkIHcgJXgpICAlczolZFxuIiwKKwkJCQkgIG9iaiwKKwkJCQkgIG9ial9wcml2LT5waW5fY291bnQsIG9ial9wcml2LT5hY3RpdmUsCisJCQkJICBvYmotPndyaXRlX2RvbWFpbiwgZmlsZSwgbGluZSk7CisJfQorfQorI2VuZGlmIC8qIFdBVENIX0lOQUNUSVZFICovCisKKworI2lmIFdBVENIX0JVRiB8IFdBVENIX0VYRUMgfCBXQVRDSF9QV1JJVEUKK3N0YXRpYyB2b2lkCitpOTE1X2dlbV9kdW1wX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVpbnQzMl90IHN0YXJ0LCB1aW50MzJfdCBlbmQsCisJCSAgIHVpbnQzMl90IGJpYXMsIHVpbnQzMl90IG1hcmspCit7CisJdWludDMyX3QgKm1lbSA9IGttYXBfYXRvbWljKHBhZ2UsIEtNX1VTRVIwKTsKKwlpbnQgaTsKKwlmb3IgKGkgPSBzdGFydDsgaSA8IGVuZDsgaSArPSA0KQorCQlEUk1fSU5GTygiJTA4eDogJTA4eCVzXG4iLAorCQkJICAoaW50KSAoYmlhcyArIGkpLCBtZW1baSAvIDRdLAorCQkJICAoYmlhcyArIGkgPT0gbWFyaykgPyAiICoqKioqKioqIiA6ICIiKTsKKwlrdW5tYXBfYXRvbWljKG1lbSwgS01fVVNFUjApOworCS8qIGdpdmUgc3lzbG9nIHRpbWUgdG8gY2F0Y2ggdXAgKi8KKwltc2xlZXAoMSk7Cit9CisKK3ZvaWQKK2k5MTVfZ2VtX2R1bXBfb2JqZWN0KHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqLCBpbnQgbGVuLAorCQkgICAgIGNvbnN0IGNoYXIgKndoZXJlLCB1aW50MzJfdCBtYXJrKQoreworCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmpfcHJpdiA9IG9iai0+ZHJpdmVyX3ByaXZhdGU7CisJaW50IHBhZ2U7CisKKwlEUk1fSU5GTygiJXM6IG9iamVjdCBhdCBvZmZzZXQgJTA4eFxuIiwgd2hlcmUsIG9ial9wcml2LT5ndHRfb2Zmc2V0KTsKKwlmb3IgKHBhZ2UgPSAwOyBwYWdlIDwgKGxlbiArIFBBR0VfU0laRS0xKSAvIFBBR0VfU0laRTsgcGFnZSsrKSB7CisJCWludCBwYWdlX2xlbiwgY2h1bmssIGNodW5rX2xlbjsKKworCQlwYWdlX2xlbiA9IGxlbiAtIHBhZ2UgKiBQQUdFX1NJWkU7CisJCWlmIChwYWdlX2xlbiA+IFBBR0VfU0laRSkKKwkJCXBhZ2VfbGVuID0gUEFHRV9TSVpFOworCisJCWZvciAoY2h1bmsgPSAwOyBjaHVuayA8IHBhZ2VfbGVuOyBjaHVuayArPSAxMjgpIHsKKwkJCWNodW5rX2xlbiA9IHBhZ2VfbGVuIC0gY2h1bms7CisJCQlpZiAoY2h1bmtfbGVuID4gMTI4KQorCQkJCWNodW5rX2xlbiA9IDEyODsKKwkJCWk5MTVfZ2VtX2R1bXBfcGFnZShvYmpfcHJpdi0+cGFnZV9saXN0W3BhZ2VdLAorCQkJCQkgICBjaHVuaywgY2h1bmsgKyBjaHVua19sZW4sCisJCQkJCSAgIG9ial9wcml2LT5ndHRfb2Zmc2V0ICsKKwkJCQkJICAgcGFnZSAqIFBBR0VfU0laRSwKKwkJCQkJICAgbWFyayk7CisJCX0KKwl9Cit9CisjZW5kaWYKKworI2lmIFdBVENIX0xSVQordm9pZAoraTkxNV9kdW1wX2xydShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBjb25zdCBjaGFyICp3aGVyZSkKK3sKKwlkcm1faTkxNV9wcml2YXRlX3QJCSpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QJKm9ial9wcml2OworCisJRFJNX0lORk8oImFjdGl2ZSBsaXN0ICVzIHtcbiIsIHdoZXJlKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KG9ial9wcml2LCAmZGV2X3ByaXYtPm1tLmFjdGl2ZV9saXN0LAorCQkJICAgIGxpc3QpCisJeworCQlEUk1fSU5GTygiICAgICVwOiAlMDh4XG4iLCBvYmpfcHJpdiwKKwkJCSBvYmpfcHJpdi0+bGFzdF9yZW5kZXJpbmdfc2Vxbm8pOworCX0KKwlEUk1fSU5GTygifVxuIik7CisJRFJNX0lORk8oImZsdXNoaW5nIGxpc3QgJXMge1xuIiwgd2hlcmUpOworCWxpc3RfZm9yX2VhY2hfZW50cnkob2JqX3ByaXYsICZkZXZfcHJpdi0+bW0uZmx1c2hpbmdfbGlzdCwKKwkJCSAgICBsaXN0KQorCXsKKwkJRFJNX0lORk8oIiAgICAlcDogJTA4eFxuIiwgb2JqX3ByaXYsCisJCQkgb2JqX3ByaXYtPmxhc3RfcmVuZGVyaW5nX3NlcW5vKTsKKwl9CisJRFJNX0lORk8oIn1cbiIpOworCURSTV9JTkZPKCJpbmFjdGl2ZSAlcyB7XG4iLCB3aGVyZSk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShvYmpfcHJpdiwgJmRldl9wcml2LT5tbS5pbmFjdGl2ZV9saXN0LCBsaXN0KSB7CisJCURSTV9JTkZPKCIgICAgJXA6ICUwOHhcbiIsIG9ial9wcml2LAorCQkJIG9ial9wcml2LT5sYXN0X3JlbmRlcmluZ19zZXFubyk7CisJfQorCURSTV9JTkZPKCJ9XG4iKTsKK30KKyNlbmRpZgorCisKKyNpZiBXQVRDSF9DT0hFUkVOQ1kKK3ZvaWQKK2k5MTVfZ2VtX29iamVjdF9jaGVja19jb2hlcmVuY3koc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmosIGludCBoYW5kbGUpCit7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IG9iai0+ZGV2OworCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmpfcHJpdiA9IG9iai0+ZHJpdmVyX3ByaXZhdGU7CisJaW50IHBhZ2U7CisJdWludDMyX3QgKmd0dF9tYXBwaW5nOworCXVpbnQzMl90ICpiYWNraW5nX21hcCA9IE5VTEw7CisJaW50IGJhZF9jb3VudCA9IDA7CisKKwlEUk1fSU5GTygiJXM6IGNoZWNraW5nIGNvaGVyZW5jeSBvZiBvYmplY3QgJXBAMHglMDh4ICglZCwgJWRrYik6XG4iLAorCQkgX19mdW5jX18sIG9iaiwgb2JqX3ByaXYtPmd0dF9vZmZzZXQsIGhhbmRsZSwKKwkJIG9iai0+c2l6ZSAvIDEwMjQpOworCisJZ3R0X21hcHBpbmcgPSBpb3JlbWFwKGRldi0+YWdwLT5iYXNlICsgb2JqX3ByaXYtPmd0dF9vZmZzZXQsCisJCQkgICAgICBvYmotPnNpemUpOworCWlmIChndHRfbWFwcGluZyA9PSBOVUxMKSB7CisJCURSTV9FUlJPUigiZmFpbGVkIHRvIG1hcCBHVFQgc3BhY2VcbiIpOworCQlyZXR1cm47CisJfQorCisJZm9yIChwYWdlID0gMDsgcGFnZSA8IG9iai0+c2l6ZSAvIFBBR0VfU0laRTsgcGFnZSsrKSB7CisJCWludCBpOworCisJCWJhY2tpbmdfbWFwID0ga21hcF9hdG9taWMob2JqX3ByaXYtPnBhZ2VfbGlzdFtwYWdlXSwgS01fVVNFUjApOworCisJCWlmIChiYWNraW5nX21hcCA9PSBOVUxMKSB7CisJCQlEUk1fRVJST1IoImZhaWxlZCB0byBtYXAgYmFja2luZyBwYWdlXG4iKTsKKwkJCWdvdG8gb3V0OworCQl9CisKKwkJZm9yIChpID0gMDsgaSA8IFBBR0VfU0laRSAvIDQ7IGkrKykgeworCQkJdWludDMyX3QgY3B1dmFsID0gYmFja2luZ19tYXBbaV07CisJCQl1aW50MzJfdCBndHR2YWwgPSByZWFkbChndHRfbWFwcGluZyArCisJCQkJCQlwYWdlICogMTAyNCArIGkpOworCisJCQlpZiAoY3B1dmFsICE9IGd0dHZhbCkgeworCQkJCURSTV9JTkZPKCJpbmNvaGVyZW50IENQVSB2cyBHUFUgYXQgMHglMDh4OiAiCisJCQkJCSAiMHglMDh4IHZzIDB4JTA4eFxuIiwKKwkJCQkJIChpbnQpKG9ial9wcml2LT5ndHRfb2Zmc2V0ICsKKwkJCQkJICAgICAgIHBhZ2UgKiBQQUdFX1NJWkUgKyBpICogNCksCisJCQkJCSBjcHV2YWwsIGd0dHZhbCk7CisJCQkJaWYgKGJhZF9jb3VudCsrID49IDgpIHsKKwkJCQkJRFJNX0lORk8oIi4uLlxuIik7CisJCQkJCWdvdG8gb3V0OworCQkJCX0KKwkJCX0KKwkJfQorCQlrdW5tYXBfYXRvbWljKGJhY2tpbmdfbWFwLCBLTV9VU0VSMCk7CisJCWJhY2tpbmdfbWFwID0gTlVMTDsKKwl9CisKKyBvdXQ6CisJaWYgKGJhY2tpbmdfbWFwICE9IE5VTEwpCisJCWt1bm1hcF9hdG9taWMoYmFja2luZ19tYXAsIEtNX1VTRVIwKTsKKwlpb3VubWFwKGd0dF9tYXBwaW5nKTsKKworCS8qIGdpdmUgc3lzbG9nIHRpbWUgdG8gY2F0Y2ggdXAgKi8KKwltc2xlZXAoMSk7CisKKwkvKiBEaXJlY3RseSBmbHVzaCB0aGUgb2JqZWN0LCBzaW5jZSB3ZSBqdXN0IGxvYWRlZCB2YWx1ZXMgd2l0aCB0aGUgQ1BVCisJICogZnJvbSB0aGUgYmFja2luZyBwYWdlcyBhbmQgd2UgZG9uJ3Qgd2FudCB0byBkaXN0dXJiIHRoZSBjYWNoZQorCSAqIG1hbmFnZW1lbnQgdGhhdCB3ZSdyZSB0cnlpbmcgdG8gb2JzZXJ2ZS4KKwkgKi8KKworCWk5MTVfZ2VtX2NsZmx1c2hfb2JqZWN0KG9iaik7Cit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX3Byb2MuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX3Byb2MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNWQ0MTYwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fcHJvYy5jCkBAIC0wLDAgKzEsMjkyIEBACisvKgorICogQ29weXJpZ2h0IMKpIDIwMDggSW50ZWwgQ29ycG9yYXRpb24KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAorICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhlIG5leHQKKyAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUKKyAqIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAorICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCisgKiBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTCisgKiBJTiBUSEUgU09GVFdBUkUuCisgKgorICogQXV0aG9yczoKKyAqICAgIEVyaWMgQW5ob2x0IDxlcmljQGFuaG9sdC5uZXQ+CisgKiAgICBLZWl0aCBQYWNrYXJkIDxrZWl0aHBAa2VpdGhwLmNvbT4KKyAqCisgKi8KKworI2luY2x1ZGUgImRybVAuaCIKKyNpbmNsdWRlICJkcm0uaCIKKyNpbmNsdWRlICJpOTE1X2RybS5oIgorI2luY2x1ZGUgImk5MTVfZHJ2LmgiCisKK3N0YXRpYyBpbnQgaTkxNV9nZW1fYWN0aXZlX2luZm8oY2hhciAqYnVmLCBjaGFyICoqc3RhcnQsIG9mZl90IG9mZnNldCwKKwkJCQlpbnQgcmVxdWVzdCwgaW50ICplb2YsIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IGRybV9taW5vciAqbWlub3IgPSAoc3RydWN0IGRybV9taW5vciAqKSBkYXRhOworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBtaW5vci0+ZGV2OworCWRybV9pOTE1X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmpfcHJpdjsKKwlpbnQgbGVuID0gMDsKKworCWlmIChvZmZzZXQgPiBEUk1fUFJPQ19MSU1JVCkgeworCQkqZW9mID0gMTsKKwkJcmV0dXJuIDA7CisJfQorCisJKnN0YXJ0ID0gJmJ1ZltvZmZzZXRdOworCSplb2YgPSAwOworCURSTV9QUk9DX1BSSU5UKCJBY3RpdmU6XG4iKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KG9ial9wcml2LCAmZGV2X3ByaXYtPm1tLmFjdGl2ZV9saXN0LAorCQkJICAgIGxpc3QpCisJeworCQlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiA9IG9ial9wcml2LT5vYmo7CisJCWlmIChvYmotPm5hbWUpIHsKKwkJCURSTV9QUk9DX1BSSU5UKCIgICAgJXAoJWQpOiAlMDh4ICUwOHggJWRcbiIsCisJCQkJICAgICAgIG9iaiwgb2JqLT5uYW1lLAorCQkJCSAgICAgICBvYmotPnJlYWRfZG9tYWlucywgb2JqLT53cml0ZV9kb21haW4sCisJCQkJICAgICAgIG9ial9wcml2LT5sYXN0X3JlbmRlcmluZ19zZXFubyk7CisJCX0gZWxzZSB7CisJCQlEUk1fUFJPQ19QUklOVCgiICAgICAgICVwOiAlMDh4ICUwOHggJWRcbiIsCisJCQkJICAgICAgIG9iaiwKKwkJCQkgICAgICAgb2JqLT5yZWFkX2RvbWFpbnMsIG9iai0+d3JpdGVfZG9tYWluLAorCQkJCSAgICAgICBvYmpfcHJpdi0+bGFzdF9yZW5kZXJpbmdfc2Vxbm8pOworCQl9CisJfQorCWlmIChsZW4gPiByZXF1ZXN0ICsgb2Zmc2V0KQorCQlyZXR1cm4gcmVxdWVzdDsKKwkqZW9mID0gMTsKKwlyZXR1cm4gbGVuIC0gb2Zmc2V0OworfQorCitzdGF0aWMgaW50IGk5MTVfZ2VtX2ZsdXNoaW5nX2luZm8oY2hhciAqYnVmLCBjaGFyICoqc3RhcnQsIG9mZl90IG9mZnNldCwKKwkJCQkgIGludCByZXF1ZXN0LCBpbnQgKmVvZiwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgZHJtX21pbm9yICptaW5vciA9IChzdHJ1Y3QgZHJtX21pbm9yICopIGRhdGE7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IG1pbm9yLT5kZXY7CisJZHJtX2k5MTVfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9ial9wcml2OworCWludCBsZW4gPSAwOworCisJaWYgKG9mZnNldCA+IERSTV9QUk9DX0xJTUlUKSB7CisJCSplb2YgPSAxOworCQlyZXR1cm4gMDsKKwl9CisKKwkqc3RhcnQgPSAmYnVmW29mZnNldF07CisJKmVvZiA9IDA7CisJRFJNX1BST0NfUFJJTlQoIkZsdXNoaW5nOlxuIik7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShvYmpfcHJpdiwgJmRldl9wcml2LT5tbS5mbHVzaGluZ19saXN0LAorCQkJICAgIGxpc3QpCisJeworCQlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiA9IG9ial9wcml2LT5vYmo7CisJCWlmIChvYmotPm5hbWUpIHsKKwkJCURSTV9QUk9DX1BSSU5UKCIgICAgJXAoJWQpOiAlMDh4ICUwOHggJWRcbiIsCisJCQkJICAgICAgIG9iaiwgb2JqLT5uYW1lLAorCQkJCSAgICAgICBvYmotPnJlYWRfZG9tYWlucywgb2JqLT53cml0ZV9kb21haW4sCisJCQkJICAgICAgIG9ial9wcml2LT5sYXN0X3JlbmRlcmluZ19zZXFubyk7CisJCX0gZWxzZSB7CisJCQlEUk1fUFJPQ19QUklOVCgiICAgICAgICVwOiAlMDh4ICUwOHggJWRcbiIsIG9iaiwKKwkJCQkgICAgICAgb2JqLT5yZWFkX2RvbWFpbnMsIG9iai0+d3JpdGVfZG9tYWluLAorCQkJCSAgICAgICBvYmpfcHJpdi0+bGFzdF9yZW5kZXJpbmdfc2Vxbm8pOworCQl9CisJfQorCWlmIChsZW4gPiByZXF1ZXN0ICsgb2Zmc2V0KQorCQlyZXR1cm4gcmVxdWVzdDsKKwkqZW9mID0gMTsKKwlyZXR1cm4gbGVuIC0gb2Zmc2V0OworfQorCitzdGF0aWMgaW50IGk5MTVfZ2VtX2luYWN0aXZlX2luZm8oY2hhciAqYnVmLCBjaGFyICoqc3RhcnQsIG9mZl90IG9mZnNldCwKKwkJCQkgIGludCByZXF1ZXN0LCBpbnQgKmVvZiwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgZHJtX21pbm9yICptaW5vciA9IChzdHJ1Y3QgZHJtX21pbm9yICopIGRhdGE7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IG1pbm9yLT5kZXY7CisJZHJtX2k5MTVfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9ial9wcml2OworCWludCBsZW4gPSAwOworCisJaWYgKG9mZnNldCA+IERSTV9QUk9DX0xJTUlUKSB7CisJCSplb2YgPSAxOworCQlyZXR1cm4gMDsKKwl9CisKKwkqc3RhcnQgPSAmYnVmW29mZnNldF07CisJKmVvZiA9IDA7CisJRFJNX1BST0NfUFJJTlQoIkluYWN0aXZlOlxuIik7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShvYmpfcHJpdiwgJmRldl9wcml2LT5tbS5pbmFjdGl2ZV9saXN0LAorCQkJICAgIGxpc3QpCisJeworCQlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiA9IG9ial9wcml2LT5vYmo7CisJCWlmIChvYmotPm5hbWUpIHsKKwkJCURSTV9QUk9DX1BSSU5UKCIgICAgJXAoJWQpOiAlMDh4ICUwOHggJWRcbiIsCisJCQkJICAgICAgIG9iaiwgb2JqLT5uYW1lLAorCQkJCSAgICAgICBvYmotPnJlYWRfZG9tYWlucywgb2JqLT53cml0ZV9kb21haW4sCisJCQkJICAgICAgIG9ial9wcml2LT5sYXN0X3JlbmRlcmluZ19zZXFubyk7CisJCX0gZWxzZSB7CisJCQlEUk1fUFJPQ19QUklOVCgiICAgICAgICVwOiAlMDh4ICUwOHggJWRcbiIsIG9iaiwKKwkJCQkgICAgICAgb2JqLT5yZWFkX2RvbWFpbnMsIG9iai0+d3JpdGVfZG9tYWluLAorCQkJCSAgICAgICBvYmpfcHJpdi0+bGFzdF9yZW5kZXJpbmdfc2Vxbm8pOworCQl9CisJfQorCWlmIChsZW4gPiByZXF1ZXN0ICsgb2Zmc2V0KQorCQlyZXR1cm4gcmVxdWVzdDsKKwkqZW9mID0gMTsKKwlyZXR1cm4gbGVuIC0gb2Zmc2V0OworfQorCitzdGF0aWMgaW50IGk5MTVfZ2VtX3JlcXVlc3RfaW5mbyhjaGFyICpidWYsIGNoYXIgKipzdGFydCwgb2ZmX3Qgb2Zmc2V0LAorCQkJCSBpbnQgcmVxdWVzdCwgaW50ICplb2YsIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IGRybV9taW5vciAqbWlub3IgPSAoc3RydWN0IGRybV9taW5vciAqKSBkYXRhOworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBtaW5vci0+ZGV2OworCWRybV9pOTE1X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCXN0cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVzdCAqZ2VtX3JlcXVlc3Q7CisJaW50IGxlbiA9IDA7CisKKwlpZiAob2Zmc2V0ID4gRFJNX1BST0NfTElNSVQpIHsKKwkJKmVvZiA9IDE7CisJCXJldHVybiAwOworCX0KKworCSpzdGFydCA9ICZidWZbb2Zmc2V0XTsKKwkqZW9mID0gMDsKKwlEUk1fUFJPQ19QUklOVCgiUmVxdWVzdDpcbiIpOworCWxpc3RfZm9yX2VhY2hfZW50cnkoZ2VtX3JlcXVlc3QsICZkZXZfcHJpdi0+bW0ucmVxdWVzdF9saXN0LAorCQkJICAgIGxpc3QpCisJeworCQlEUk1fUFJPQ19QUklOVCgiICAgICVkIEAgJWQgJTA4eFxuIiwKKwkJCSAgICAgICBnZW1fcmVxdWVzdC0+c2Vxbm8sCisJCQkgICAgICAgKGludCkgKGppZmZpZXMgLSBnZW1fcmVxdWVzdC0+ZW1pdHRlZF9qaWZmaWVzKSwKKwkJCSAgICAgICBnZW1fcmVxdWVzdC0+Zmx1c2hfZG9tYWlucyk7CisJfQorCWlmIChsZW4gPiByZXF1ZXN0ICsgb2Zmc2V0KQorCQlyZXR1cm4gcmVxdWVzdDsKKwkqZW9mID0gMTsKKwlyZXR1cm4gbGVuIC0gb2Zmc2V0OworfQorCitzdGF0aWMgaW50IGk5MTVfZ2VtX3NlcW5vX2luZm8oY2hhciAqYnVmLCBjaGFyICoqc3RhcnQsIG9mZl90IG9mZnNldCwKKwkJCSAgICAgICBpbnQgcmVxdWVzdCwgaW50ICplb2YsIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IGRybV9taW5vciAqbWlub3IgPSAoc3RydWN0IGRybV9taW5vciAqKSBkYXRhOworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBtaW5vci0+ZGV2OworCWRybV9pOTE1X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCWludCBsZW4gPSAwOworCisJaWYgKG9mZnNldCA+IERSTV9QUk9DX0xJTUlUKSB7CisJCSplb2YgPSAxOworCQlyZXR1cm4gMDsKKwl9CisKKwkqc3RhcnQgPSAmYnVmW29mZnNldF07CisJKmVvZiA9IDA7CisJRFJNX1BST0NfUFJJTlQoIkN1cnJlbnQgc2VxdWVuY2U6ICVkXG4iLCBpOTE1X2dldF9nZW1fc2Vxbm8oZGV2KSk7CisJRFJNX1BST0NfUFJJTlQoIldhaXRlciBzZXF1ZW5jZTogICVkXG4iLAorCQkgICAgICAgZGV2X3ByaXYtPm1tLndhaXRpbmdfZ2VtX3NlcW5vKTsKKwlEUk1fUFJPQ19QUklOVCgiSVJRIHNlcXVlbmNlOiAgICAgJWRcbiIsIGRldl9wcml2LT5tbS5pcnFfZ2VtX3NlcW5vKTsKKwlpZiAobGVuID4gcmVxdWVzdCArIG9mZnNldCkKKwkJcmV0dXJuIHJlcXVlc3Q7CisJKmVvZiA9IDE7CisJcmV0dXJuIGxlbiAtIG9mZnNldDsKK30KKworCitzdGF0aWMgaW50IGk5MTVfaW50ZXJydXB0X2luZm8oY2hhciAqYnVmLCBjaGFyICoqc3RhcnQsIG9mZl90IG9mZnNldCwKKwkJCSAgICAgICBpbnQgcmVxdWVzdCwgaW50ICplb2YsIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IGRybV9taW5vciAqbWlub3IgPSAoc3RydWN0IGRybV9taW5vciAqKSBkYXRhOworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBtaW5vci0+ZGV2OworCWRybV9pOTE1X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCWludCBsZW4gPSAwOworCisJaWYgKG9mZnNldCA+IERSTV9QUk9DX0xJTUlUKSB7CisJCSplb2YgPSAxOworCQlyZXR1cm4gMDsKKwl9CisKKwkqc3RhcnQgPSAmYnVmW29mZnNldF07CisJKmVvZiA9IDA7CisJRFJNX1BST0NfUFJJTlQoIkludGVycnVwdCBlbmFibGU6ICAgICUwOHhcbiIsCisJCSAgICAgICBJOTE1X1JFQUQoSUVSKSk7CisJRFJNX1BST0NfUFJJTlQoIkludGVycnVwdCBpZGVudGl0eTogICUwOHhcbiIsCisJCSAgICAgICBJOTE1X1JFQUQoSUlSKSk7CisJRFJNX1BST0NfUFJJTlQoIkludGVycnVwdCBtYXNrOiAgICAgICUwOHhcbiIsCisJCSAgICAgICBJOTE1X1JFQUQoSU1SKSk7CisJRFJNX1BST0NfUFJJTlQoIlBpcGUgQSBzdGF0OiAgICAgICAgICUwOHhcbiIsCisJCSAgICAgICBJOTE1X1JFQUQoUElQRUFTVEFUKSk7CisJRFJNX1BST0NfUFJJTlQoIlBpcGUgQiBzdGF0OiAgICAgICAgICUwOHhcbiIsCisJCSAgICAgICBJOTE1X1JFQUQoUElQRUJTVEFUKSk7CisJRFJNX1BST0NfUFJJTlQoIkludGVycnVwdHMgcmVjZWl2ZWQ6ICVkXG4iLAorCQkgICAgICAgYXRvbWljX3JlYWQoJmRldl9wcml2LT5pcnFfcmVjZWl2ZWQpKTsKKwlEUk1fUFJPQ19QUklOVCgiQ3VycmVudCBzZXF1ZW5jZTogICAgJWRcbiIsCisJCSAgICAgICBpOTE1X2dldF9nZW1fc2Vxbm8oZGV2KSk7CisJRFJNX1BST0NfUFJJTlQoIldhaXRlciBzZXF1ZW5jZTogICAgICVkXG4iLAorCQkgICAgICAgZGV2X3ByaXYtPm1tLndhaXRpbmdfZ2VtX3NlcW5vKTsKKwlEUk1fUFJPQ19QUklOVCgiSVJRIHNlcXVlbmNlOiAgICAgICAgJWRcbiIsCisJCSAgICAgICBkZXZfcHJpdi0+bW0uaXJxX2dlbV9zZXFubyk7CisJaWYgKGxlbiA+IHJlcXVlc3QgKyBvZmZzZXQpCisJCXJldHVybiByZXF1ZXN0OworCSplb2YgPSAxOworCXJldHVybiBsZW4gLSBvZmZzZXQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZHJtX3Byb2NfbGlzdCB7CisJLyoqIGZpbGUgbmFtZSAqLworCWNvbnN0IGNoYXIgKm5hbWU7CisJLyoqIHByb2MgY2FsbGJhY2sqLworCWludCAoKmYpIChjaGFyICosIGNoYXIgKiosIG9mZl90LCBpbnQsIGludCAqLCB2b2lkICopOworfSBpOTE1X2dlbV9wcm9jX2xpc3RbXSA9IHsKKwl7Imk5MTVfZ2VtX2FjdGl2ZSIsIGk5MTVfZ2VtX2FjdGl2ZV9pbmZvfSwKKwl7Imk5MTVfZ2VtX2ZsdXNoaW5nIiwgaTkxNV9nZW1fZmx1c2hpbmdfaW5mb30sCisJeyJpOTE1X2dlbV9pbmFjdGl2ZSIsIGk5MTVfZ2VtX2luYWN0aXZlX2luZm99LAorCXsiaTkxNV9nZW1fcmVxdWVzdCIsIGk5MTVfZ2VtX3JlcXVlc3RfaW5mb30sCisJeyJpOTE1X2dlbV9zZXFubyIsIGk5MTVfZ2VtX3NlcW5vX2luZm99LAorCXsiaTkxNV9nZW1faW50ZXJydXB0IiwgaTkxNV9pbnRlcnJ1cHRfaW5mb30sCit9OworCisjZGVmaW5lIEk5MTVfR0VNX1BST0NfRU5UUklFUyBBUlJBWV9TSVpFKGk5MTVfZ2VtX3Byb2NfbGlzdCkKKworaW50IGk5MTVfZ2VtX3Byb2NfaW5pdChzdHJ1Y3QgZHJtX21pbm9yICptaW5vcikKK3sKKwlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKmVudDsKKwlpbnQgaSwgajsKKworCWZvciAoaSA9IDA7IGkgPCBJOTE1X0dFTV9QUk9DX0VOVFJJRVM7IGkrKykgeworCQllbnQgPSBjcmVhdGVfcHJvY19lbnRyeShpOTE1X2dlbV9wcm9jX2xpc3RbaV0ubmFtZSwKKwkJCQkJU19JRlJFRyB8IFNfSVJVR08sIG1pbm9yLT5kZXZfcm9vdCk7CisJCWlmICghZW50KSB7CisJCQlEUk1fRVJST1IoIkNhbm5vdCBjcmVhdGUgL3Byb2MvZHJpLy4uLi8lc1xuIiwKKwkJCQkgIGk5MTVfZ2VtX3Byb2NfbGlzdFtpXS5uYW1lKTsKKwkJCWZvciAoaiA9IDA7IGogPCBpOyBqKyspCisJCQkJcmVtb3ZlX3Byb2NfZW50cnkoaTkxNV9nZW1fcHJvY19saXN0W2ldLm5hbWUsCisJCQkJCQkgIG1pbm9yLT5kZXZfcm9vdCk7CisJCQlyZXR1cm4gLTE7CisJCX0KKwkJZW50LT5yZWFkX3Byb2MgPSBpOTE1X2dlbV9wcm9jX2xpc3RbaV0uZjsKKwkJZW50LT5kYXRhID0gbWlub3I7CisJfQorCXJldHVybiAwOworfQorCit2b2lkIGk5MTVfZ2VtX3Byb2NfY2xlYW51cChzdHJ1Y3QgZHJtX21pbm9yICptaW5vcikKK3sKKwlpbnQgaTsKKworCWlmICghbWlub3ItPmRldl9yb290KQorCQlyZXR1cm47CisKKwlmb3IgKGkgPSAwOyBpIDwgSTkxNV9HRU1fUFJPQ19FTlRSSUVTOyBpKyspCisJCXJlbW92ZV9wcm9jX2VudHJ5KGk5MTVfZ2VtX3Byb2NfbGlzdFtpXS5uYW1lLCBtaW5vci0+ZGV2X3Jvb3QpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fdGlsaW5nLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV90aWxpbmcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOGI4NWFjCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fdGlsaW5nLmMKQEAgLTAsMCArMSwyNTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgwqkgMjAwOCBJbnRlbCBDb3Jwb3JhdGlvbgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAorICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgorICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCisgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUgbmV4dAorICogcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZQorICogU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCisgKiBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKKyAqIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MKKyAqIElOIFRIRSBTT0ZUV0FSRS4KKyAqCisgKiBBdXRob3JzOgorICogICAgRXJpYyBBbmhvbHQgPGVyaWNAYW5ob2x0Lm5ldD4KKyAqCisgKi8KKworI2luY2x1ZGUgImRybVAuaCIKKyNpbmNsdWRlICJkcm0uaCIKKyNpbmNsdWRlICJpOTE1X2RybS5oIgorI2luY2x1ZGUgImk5MTVfZHJ2LmgiCisKKy8qKiBAZmlsZSBpOTE1X2dlbV90aWxpbmcuYworICoKKyAqIFN1cHBvcnQgZm9yIG1hbmFnaW5nIHRpbGluZyBzdGF0ZSBvZiBidWZmZXIgb2JqZWN0cy4KKyAqCisgKiBUaGUgaWRlYSBiZWhpbmQgdGlsaW5nIGlzIHRvIGluY3JlYXNlIGNhY2hlIGhpdCByYXRlcyBieSByZWFycmFuZ2luZworICogcGl4ZWwgZGF0YSBzbyB0aGF0IGEgZ3JvdXAgb2YgcGl4ZWwgYWNjZXNzZXMgYXJlIGluIHRoZSBzYW1lIGNhY2hlbGluZS4KKyAqIFBlcmZvcm1hbmNlIGltcHJvdmVtZW50IGZyb20gZG9pbmcgdGhpcyBvbiB0aGUgYmFjay9kZXB0aCBidWZmZXIgYXJlIG9uCisgKiB0aGUgb3JkZXIgb2YgMzAlLgorICoKKyAqIEludGVsIGFyY2hpdGVjdHVyZXMgbWFrZSB0aGlzIHNvbWV3aGF0IG1vcmUgY29tcGxpY2F0ZWQsIHRob3VnaCwgYnkKKyAqIGFkanVzdG1lbnRzIG1hZGUgdG8gYWRkcmVzc2luZyBvZiBkYXRhIHdoZW4gdGhlIG1lbW9yeSBpcyBpbiBpbnRlcmxlYXZlZAorICogbW9kZSAobWF0Y2hlZCBwYWlycyBvZiBESU1NUykgdG8gaW1wcm92ZSBtZW1vcnkgYmFuZHdpZHRoLgorICogRm9yIGludGVybGVhdmVkIG1lbW9yeSwgdGhlIENQVSBzZW5kcyBldmVyeSBzZXF1ZW50aWFsIDY0IGJ5dGVzCisgKiB0byBhbiBhbHRlcm5hdGUgbWVtb3J5IGNoYW5uZWwgc28gaXQgY2FuIGdldCB0aGUgYmFuZHdpZHRoIGZyb20gYm90aC4KKyAqCisgKiBUaGUgR1BVIGFsc28gcmVhcnJhbmdlcyBpdHMgYWNjZXNzZXMgZm9yIGluY3JlYXNlZCBiYW5kd2lkdGggdG8gaW50ZXJsZWF2ZWQKKyAqIG1lbW9yeSwgYW5kIGl0IG1hdGNoZXMgd2hhdCB0aGUgQ1BVIGRvZXMgZm9yIG5vbi10aWxlZC4gIEhvd2V2ZXIsIHdoZW4gdGlsZWQKKyAqIGl0IGRvZXMgaXQgYSBsaXR0bGUgZGlmZmVyZW50bHksIHNpbmNlIG9uZSB3YWxrcyBhZGRyZXNzZXMgbm90IGp1c3QgaW4gdGhlCisgKiBYIGRpcmVjdGlvbiBidXQgYWxzbyBZLiAgU28sIGFsb25nIHdpdGggYWx0ZXJuYXRpbmcgY2hhbm5lbHMgd2hlbiBiaXQKKyAqIDYgb2YgdGhlIGFkZHJlc3MgZmxpcHMsIGl0IGFsc28gYWx0ZXJuYXRlcyB3aGVuIG90aGVyIGJpdHMgZmxpcCAtLSAgQml0cyA5CisgKiAoZXZlcnkgNTEyIGJ5dGVzLCBhbiBYIHRpbGUgc2NhbmxpbmUpIGFuZCAxMCAoZXZlcnkgdHdvIFggdGlsZSBzY2FubGluZXMpCisgKiBhcmUgY29tbW9uIHRvIGJvdGggdGhlIDkxNSBhbmQgOTY1LWNsYXNzIGhhcmR3YXJlLgorICoKKyAqIFRoZSBDUFUgYWxzbyBzb21ldGltZXMgWE9ScyBpbiBoaWdoZXIgYml0cyBhcyB3ZWxsLCB0byBpbXByb3ZlCisgKiBiYW5kd2lkdGggZG9pbmcgc3RyaWRlZCBhY2Nlc3MgbGlrZSB3ZSBkbyBzbyBmcmVxdWVudGx5IGluIGdyYXBoaWNzLiAgVGhpcworICogaXMgY2FsbGVkICJDaGFubmVsIFhPUiBSYW5kb21pemF0aW9uIiBpbiB0aGUgTUNIIGRvY3VtZW50YXRpb24uICBUaGUgcmVzdWx0CisgKiBpcyB0aGF0IHRoZSBDUFUgaXMgWE9SaW5nIGluIGVpdGhlciBiaXQgMTEgb3IgYml0IDE3IHRvIGJpdCA2IG9mIGl0cyBhZGRyZXNzCisgKiBkZWNvZGUuCisgKgorICogQWxsIG9mIHRoaXMgYml0IDYgWE9SaW5nIGhhcyBhbiBlZmZlY3Qgb24gb3VyIG1lbW9yeSBtYW5hZ2VtZW50LAorICogYXMgd2UgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCB0aGUgM2QgZHJpdmVyIGNhbiBjb3JyZWN0bHkgYWRkcmVzcyBvYmplY3QKKyAqIGNvbnRlbnRzLgorICoKKyAqIElmIHdlIGRvbid0IGhhdmUgaW50ZXJsZWF2ZWQgbWVtb3J5LCBhbGwgdGlsaW5nIGlzIHNhZmUgYW5kIG5vIHN3aXp6bGluZyBpcworICogcmVxdWlyZWQuCisgKgorICogV2hlbiBiaXQgMTcgaXMgWE9SZWQgaW4sIHdlIHNpbXBseSByZWZ1c2UgdG8gdGlsZSBhdCBhbGwuICBCaXQKKyAqIDE3IGlzIG5vdCBqdXN0IGEgcGFnZSBvZmZzZXQsIHNvIGFzIHdlIHBhZ2UgYW4gb2JqZXQgb3V0IGFuZCBiYWNrIGluLAorICogaW5kaXZpZHVhbCBwYWdlcyBpbiBpdCB3aWxsIGhhdmUgZGlmZmVyZW50IGJpdCAxNyBhZGRyZXNzZXMsIHJlc3VsdGluZyBpbgorICogZWFjaCA2NCBieXRlcyBiZWluZyBzd2FwcGVkIHdpdGggaXRzIG5laWdoYm9yIQorICoKKyAqIE90aGVyd2lzZSwgaWYgaW50ZXJsZWF2ZWQsIHdlIGhhdmUgdG8gdGVsbCB0aGUgM2QgZHJpdmVyIHdoYXQgdGhlIGFkZHJlc3MKKyAqIHN3aXp6bGluZyBpdCBuZWVkcyB0byBkbyBpcywgc2luY2UgaXQncyB3cml0aW5nIHdpdGggdGhlIENQVSB0byB0aGUgcGFnZXMKKyAqIChiaXQgNiBhbmQgcG90ZW50aWFsbHkgYml0IDExIFhPUmVkIGluKSwgYW5kIHRoZSBHUFUgaXMgcmVhZGluZyBmcm9tIHRoZQorICogcGFnZXMgKGJpdCA2LCA5LCBhbmQgMTAgWE9SZWQgaW4pLCByZXN1bHRpbmcgaW4gYSBjdW11bGF0aXZlIGJpdCBzd2l6emxpbmcKKyAqIHJlcXVpcmVkIGJ5IHRoZSBDUFUgb2YgWE9SaW5nIGluIGJpdCA2LCA5LCAxMCwgYW5kIHBvdGVudGlhbGx5IDExLCBpbiBvcmRlcgorICogdG8gbWF0Y2ggd2hhdCB0aGUgR1BVIGV4cGVjdHMuCisgKi8KKworLyoqCisgKiBEZXRlY3RzIGJpdCA2IHN3aXp6bGluZyBvZiBhZGRyZXNzIGxvb2t1cCBiZXR3ZWVuIElHRCBhY2Nlc3MgYW5kIENQVQorICogYWNjZXNzIHRocm91Z2ggbWFpbiBtZW1vcnkuCisgKi8KK3ZvaWQKK2k5MTVfZ2VtX2RldGVjdF9iaXRfNl9zd2l6emxlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCit7CisJZHJtX2k5MTVfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJdWludDMyX3Qgc3dpenpsZV94ID0gSTkxNV9CSVRfNl9TV0laWkxFX1VOS05PV047CisJdWludDMyX3Qgc3dpenpsZV95ID0gSTkxNV9CSVRfNl9TV0laWkxFX1VOS05PV047CisKKwlpZiAoIUlTX0k5WFgoZGV2KSkgeworCQkvKiBBcyBmYXIgYXMgd2Uga25vdywgdGhlIDg2NSBkb2Vzbid0IGhhdmUgdGhlc2UgYml0IDYKKwkJICogc3dpenpsaW5nIGlzc3Vlcy4KKwkJICovCisJCXN3aXp6bGVfeCA9IEk5MTVfQklUXzZfU1dJWlpMRV9OT05FOworCQlzd2l6emxlX3kgPSBJOTE1X0JJVF82X1NXSVpaTEVfTk9ORTsKKwl9IGVsc2UgaWYgKCghSVNfSTk2NUcoZGV2KSAmJiAhSVNfRzMzKGRldikpIHx8IElTX0k5NjVHTShkZXYpIHx8CisJCSAgIElTX0dNNDUoZGV2KSkgeworCQl1aW50MzJfdCBkY2M7CisKKwkJLyogT24gOTE1LTk0NSBhbmQgR005NjUsIGNoYW5uZWwgaW50ZXJsZWF2ZSBieSB0aGUgQ1BVIGlzCisJCSAqIGRldGVybWluZWQgYnkgRENDLiAgVGhlIENQVSB3aWxsIGFsdGVybmF0ZSBiYXNlZCBvbiBiaXQgNgorCQkgKiBpbiBpbnRlcmxlYXZlZCBtb2RlLCBhbmQgdGhlIEdQVSB3aWxsIHRoZW4gYWxzbyBhbHRlcm5hdGUKKwkJICogb24gYml0IDYsIDksIGFuZCAxMCBmb3IgWCwgYnV0IHRoZSBDUFUgbWF5IGFsc28gb3B0aW9uYWxseQorCQkgKiBhbHRlcm5hdGUgYmFzZWQgb24gYml0IDE3IChYT1Igbm90IGRpc2FibGVkIGFuZCBYT1IKKwkJICogYml0ID09IDE3KS4KKwkJICovCisJCWRjYyA9IEk5MTVfUkVBRChEQ0MpOworCQlzd2l0Y2ggKGRjYyAmIERDQ19BRERSRVNTSU5HX01PREVfTUFTSykgeworCQljYXNlIERDQ19BRERSRVNTSU5HX01PREVfU0lOR0xFX0NIQU5ORUw6CisJCWNhc2UgRENDX0FERFJFU1NJTkdfTU9ERV9EVUFMX0NIQU5ORUxfQVNZTU1FVFJJQzoKKwkJCXN3aXp6bGVfeCA9IEk5MTVfQklUXzZfU1dJWlpMRV9OT05FOworCQkJc3dpenpsZV95ID0gSTkxNV9CSVRfNl9TV0laWkxFX05PTkU7CisJCQlicmVhazsKKwkJY2FzZSBEQ0NfQUREUkVTU0lOR19NT0RFX0RVQUxfQ0hBTk5FTF9JTlRFUkxFQVZFRDoKKwkJCWlmIChJU19JOTE1RyhkZXYpIHx8IElTX0k5MTVHTShkZXYpIHx8CisJCQkgICAgZGNjICYgRENDX0NIQU5ORUxfWE9SX0RJU0FCTEUpIHsKKwkJCQlzd2l6emxlX3ggPSBJOTE1X0JJVF82X1NXSVpaTEVfOV8xMDsKKwkJCQlzd2l6emxlX3kgPSBJOTE1X0JJVF82X1NXSVpaTEVfOTsKKwkJCX0gZWxzZSBpZiAoSVNfSTk2NUdNKGRldikgfHwgSVNfR000NShkZXYpKSB7CisJCQkJLyogR005NjUgb25seSBkb2VzIGJpdCAxMS1iYXNlZCBjaGFubmVsCisJCQkJICogcmFuZG9taXphdGlvbgorCQkJCSAqLworCQkJCXN3aXp6bGVfeCA9IEk5MTVfQklUXzZfU1dJWlpMRV85XzEwXzExOworCQkJCXN3aXp6bGVfeSA9IEk5MTVfQklUXzZfU1dJWlpMRV85XzExOworCQkJfSBlbHNlIHsKKwkJCQkvKiBCaXQgMTcgb3IgcGVyaGFwcyBvdGhlciBzd2l6emxpbmcgKi8KKwkJCQlzd2l6emxlX3ggPSBJOTE1X0JJVF82X1NXSVpaTEVfVU5LTk9XTjsKKwkJCQlzd2l6emxlX3kgPSBJOTE1X0JJVF82X1NXSVpaTEVfVU5LTk9XTjsKKwkJCX0KKwkJCWJyZWFrOworCQl9CisJCWlmIChkY2MgPT0gMHhmZmZmZmZmZikgeworCQkJRFJNX0VSUk9SKCJDb3VsZG4ndCByZWFkIGZyb20gTUNIQkFSLiAgIgorCQkJCSAgIkRpc2FibGluZyB0aWxpbmcuXG4iKTsKKwkJCXN3aXp6bGVfeCA9IEk5MTVfQklUXzZfU1dJWlpMRV9VTktOT1dOOworCQkJc3dpenpsZV95ID0gSTkxNV9CSVRfNl9TV0laWkxFX1VOS05PV047CisJCX0KKwl9IGVsc2UgeworCQkvKiBUaGUgOTY1LCBHMzMsIGFuZCBuZXdlciwgaGF2ZSBhIHZlcnkgZmxleGlibGUgbWVtb3J5CisJCSAqIGNvbmZpZ3VyYXRpb24uICBJdCB3aWxsIGVuYWJsZSBkdWFsLWNoYW5uZWwgbW9kZQorCQkgKiAoaW50ZXJsZWF2aW5nKSBvbiBhcyBtdWNoIG1lbW9yeSBhcyBpdCBjYW4sIGFuZCB0aGUgR1BVCisJCSAqIHdpbGwgYWRkaXRpb25hbGx5IHNvbWV0aW1lcyBlbmFibGUgZGlmZmVyZW50IGJpdCA2CisJCSAqIHN3aXp6bGluZyBmb3IgdGlsZWQgb2JqZWN0cyBmcm9tIHRoZSBDUFUuCisJCSAqCisJCSAqIEhlcmUncyB3aGF0IEkgZm91bmQgb24gdGhlIEc5NjU6CisJCSAqICAgIHNsb3QgZmlsbCAgICAgICAgIG1lbW9yeSBzaXplICBzd2l6emxpbmcKKwkJICogMEEgICAwQiAgIDFBICAgMUIgICAgMS1jaCAgIDItY2gKKwkJICogNTEyICAwICAgIDAgICAgMCAgICAgNTEyICAgIDAgICAgIE8KKwkJICogNTEyICAwICAgIDUxMiAgMCAgICAgMTYgICAgIDEwMDggIFgKKwkJICogNTEyICAwICAgIDAgICAgNTEyICAgMTYgICAgIDEwMDggIFgKKwkJICogMCAgICA1MTIgIDAgICAgNTEyICAgMTYgICAgIDEwMDggIFgKKwkJICogMTAyNCAxMDI0IDEwMjQgMCAgICAgMjA0OCAgIDEwMjQgIE8KKwkJICoKKwkJICogV2UgY291bGQgcHJvYmFibHkgZGV0ZWN0IHRoaXMgYmFzZWQgb24gZWl0aGVyIHRoZSBEUkIKKwkJICogbWF0Y2hpbmcsIHdoaWNoIHdhcyB0aGUgY2FzZSBmb3IgdGhlIHN3aXp6bGluZyByZXF1aXJlZCBpbgorCQkgKiB0aGUgdGFibGUgYWJvdmUsIG9yIGZyb20gdGhlIDEtY2ggdmFsdWUgYmVpbmcgbGVzcyB0aGFuCisJCSAqIHRoZSBtaW5pbXVtIHNpemUgb2YgYSByYW5rLgorCQkgKi8KKwkJaWYgKEk5MTVfUkVBRDE2KEMwRFJCMykgIT0gSTkxNV9SRUFEMTYoQzFEUkIzKSkgeworCQkJc3dpenpsZV94ID0gSTkxNV9CSVRfNl9TV0laWkxFX05PTkU7CisJCQlzd2l6emxlX3kgPSBJOTE1X0JJVF82X1NXSVpaTEVfTk9ORTsKKwkJfSBlbHNlIHsKKwkJCXN3aXp6bGVfeCA9IEk5MTVfQklUXzZfU1dJWlpMRV85XzEwOworCQkJc3dpenpsZV95ID0gSTkxNV9CSVRfNl9TV0laWkxFXzk7CisJCX0KKwl9CisKKwlkZXZfcHJpdi0+bW0uYml0XzZfc3dpenpsZV94ID0gc3dpenpsZV94OworCWRldl9wcml2LT5tbS5iaXRfNl9zd2l6emxlX3kgPSBzd2l6emxlX3k7Cit9CisKKy8qKgorICogU2V0cyB0aGUgdGlsaW5nIG1vZGUgb2YgYW4gb2JqZWN0LCByZXR1cm5pbmcgdGhlIHJlcXVpcmVkIHN3aXp6bGluZyBvZgorICogYml0IDYgb2YgYWRkcmVzc2VzIGluIHRoZSBvYmplY3QuCisgKi8KK2ludAoraTkxNV9nZW1fc2V0X3RpbGluZyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAorCQkgICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdikKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3NldF90aWxpbmcgKmFyZ3MgPSBkYXRhOworCWRybV9pOTE1X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqOworCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmpfcHJpdjsKKworCW9iaiA9IGRybV9nZW1fb2JqZWN0X2xvb2t1cChkZXYsIGZpbGVfcHJpdiwgYXJncy0+aGFuZGxlKTsKKwlpZiAob2JqID09IE5VTEwpCisJCXJldHVybiAtRUlOVkFMOworCW9ial9wcml2ID0gb2JqLT5kcml2ZXJfcHJpdmF0ZTsKKworCW11dGV4X2xvY2soJmRldi0+c3RydWN0X211dGV4KTsKKworCWlmIChhcmdzLT50aWxpbmdfbW9kZSA9PSBJOTE1X1RJTElOR19OT05FKSB7CisJCW9ial9wcml2LT50aWxpbmdfbW9kZSA9IEk5MTVfVElMSU5HX05PTkU7CisJCWFyZ3MtPnN3aXp6bGVfbW9kZSA9IEk5MTVfQklUXzZfU1dJWlpMRV9OT05FOworCX0gZWxzZSB7CisJCWlmIChhcmdzLT50aWxpbmdfbW9kZSA9PSBJOTE1X1RJTElOR19YKQorCQkJYXJncy0+c3dpenpsZV9tb2RlID0gZGV2X3ByaXYtPm1tLmJpdF82X3N3aXp6bGVfeDsKKwkJZWxzZQorCQkJYXJncy0+c3dpenpsZV9tb2RlID0gZGV2X3ByaXYtPm1tLmJpdF82X3N3aXp6bGVfeTsKKwkJLyogSWYgd2UgY2FuJ3QgaGFuZGxlIHRoZSBzd2l6emxpbmcsIG1ha2UgaXQgdW50aWxlZC4gKi8KKwkJaWYgKGFyZ3MtPnN3aXp6bGVfbW9kZSA9PSBJOTE1X0JJVF82X1NXSVpaTEVfVU5LTk9XTikgeworCQkJYXJncy0+dGlsaW5nX21vZGUgPSBJOTE1X1RJTElOR19OT05FOworCQkJYXJncy0+c3dpenpsZV9tb2RlID0gSTkxNV9CSVRfNl9TV0laWkxFX05PTkU7CisJCX0KKwl9CisJb2JqX3ByaXYtPnRpbGluZ19tb2RlID0gYXJncy0+dGlsaW5nX21vZGU7CisKKwltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKKworCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlKG9iaik7CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBSZXR1cm5zIHRoZSBjdXJyZW50IHRpbGluZyBtb2RlIGFuZCByZXF1aXJlZCBiaXQgNiBzd2l6emxpbmcgZm9yIHRoZSBvYmplY3QuCisgKi8KK2ludAoraTkxNV9nZW1fZ2V0X3RpbGluZyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAorCQkgICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdikKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2dldF90aWxpbmcgKmFyZ3MgPSBkYXRhOworCWRybV9pOTE1X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqOworCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmpfcHJpdjsKKworCW9iaiA9IGRybV9nZW1fb2JqZWN0X2xvb2t1cChkZXYsIGZpbGVfcHJpdiwgYXJncy0+aGFuZGxlKTsKKwlpZiAob2JqID09IE5VTEwpCisJCXJldHVybiAtRUlOVkFMOworCW9ial9wcml2ID0gb2JqLT5kcml2ZXJfcHJpdmF0ZTsKKworCW11dGV4X2xvY2soJmRldi0+c3RydWN0X211dGV4KTsKKworCWFyZ3MtPnRpbGluZ19tb2RlID0gb2JqX3ByaXYtPnRpbGluZ19tb2RlOworCXN3aXRjaCAob2JqX3ByaXYtPnRpbGluZ19tb2RlKSB7CisJY2FzZSBJOTE1X1RJTElOR19YOgorCQlhcmdzLT5zd2l6emxlX21vZGUgPSBkZXZfcHJpdi0+bW0uYml0XzZfc3dpenpsZV94OworCQlicmVhazsKKwljYXNlIEk5MTVfVElMSU5HX1k6CisJCWFyZ3MtPnN3aXp6bGVfbW9kZSA9IGRldl9wcml2LT5tbS5iaXRfNl9zd2l6emxlX3k7CisJCWJyZWFrOworCWNhc2UgSTkxNV9USUxJTkdfTk9ORToKKwkJYXJncy0+c3dpenpsZV9tb2RlID0gSTkxNV9CSVRfNl9TV0laWkxFX05PTkU7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCURSTV9FUlJPUigidW5rbm93biB0aWxpbmcgbW9kZVxuIik7CisJfQorCisJbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CisKKwlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZShvYmopOworCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2lycS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9pcnEuYwppbmRleCBkZjAzNjExLi5iYWFlNTExIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2lycS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfaXJxLmMKQEAgLTMxLDEyICszMSw5MiBAQAogI2luY2x1ZGUgImk5MTVfZHJtLmgiCiAjaW5jbHVkZSAiaTkxNV9kcnYuaCIKIAotI2RlZmluZSBVU0VSX0lOVF9GTEFHICgxPDwxKQotI2RlZmluZSBWU1lOQ19QSVBFQl9GTEFHICgxPDw1KQotI2RlZmluZSBWU1lOQ19QSVBFQV9GTEFHICgxPDw3KQotCiAjZGVmaW5lIE1BWF9OT1BJRCAoKHUzMil+MCkKIAorLyoqIFRoZXNlIGFyZSB0aGUgaW50ZXJydXB0cyB1c2VkIGJ5IHRoZSBkcml2ZXIgKi8KKyNkZWZpbmUgSTkxNV9JTlRFUlJVUFRfRU5BQkxFX01BU0sgKEk5MTVfVVNFUl9JTlRFUlJVUFQgfAkJXAorCQkJCSAgICBJOTE1X0FTTEVfSU5URVJSVVBUIHwJCVwKKwkJCQkgICAgSTkxNV9ESVNQTEFZX1BJUEVfQV9FVkVOVF9JTlRFUlJVUFQgfCBcCisJCQkJICAgIEk5MTVfRElTUExBWV9QSVBFX0JfRVZFTlRfSU5URVJSVVBUKQorCit2b2lkCitpOTE1X2VuYWJsZV9pcnEoZHJtX2k5MTVfcHJpdmF0ZV90ICpkZXZfcHJpdiwgdTMyIG1hc2spCit7CisJaWYgKChkZXZfcHJpdi0+aXJxX21hc2tfcmVnICYgbWFzaykgIT0gMCkgeworCQlkZXZfcHJpdi0+aXJxX21hc2tfcmVnICY9IH5tYXNrOworCQlJOTE1X1dSSVRFKElNUiwgZGV2X3ByaXYtPmlycV9tYXNrX3JlZyk7CisJCSh2b2lkKSBJOTE1X1JFQUQoSU1SKTsKKwl9Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAoraTkxNV9kaXNhYmxlX2lycShkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2LCB1MzIgbWFzaykKK3sKKwlpZiAoKGRldl9wcml2LT5pcnFfbWFza19yZWcgJiBtYXNrKSAhPSBtYXNrKSB7CisJCWRldl9wcml2LT5pcnFfbWFza19yZWcgfD0gbWFzazsKKwkJSTkxNV9XUklURShJTVIsIGRldl9wcml2LT5pcnFfbWFza19yZWcpOworCQkodm9pZCkgSTkxNV9SRUFEKElNUik7CisJfQorfQorCisvKioKKyAqIGk5MTVfZ2V0X3BpcGUgLSByZXR1cm4gdGhlIHRoZSBwaXBlIGFzc29jaWF0ZWQgd2l0aCBhIGdpdmVuIHBsYW5lCisgKiBAZGV2OiBEUk0gZGV2aWNlCisgKiBAcGxhbmU6IHBsYW5lIHRvIGxvb2sgZm9yCisgKgorICogVGhlIEludGVsIE1lc2EgJiAyRCBkcml2ZXJzIGNhbGwgdGhlIHZibGFuayByb3V0aW5lcyB3aXRoIGEgcGxhbmUgbnVtYmVyCisgKiByYXRoZXIgdGhhbiBhIHBpcGUgbnVtYmVyLCBzaW5jZSB0aGV5IG1heSBub3QgYWx3YXlzIGJlIGVxdWFsLiAgVGhpcyByb3V0aW5lCisgKiBtYXBzIHRoZSBnaXZlbiBAcGxhbmUgYmFjayB0byBhIHBpcGUgbnVtYmVyLgorICovCitzdGF0aWMgaW50CitpOTE1X2dldF9waXBlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGludCBwbGFuZSkKK3sKKwlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0gKGRybV9pOTE1X3ByaXZhdGVfdCAqKSBkZXYtPmRldl9wcml2YXRlOworCXUzMiBkc3BjbnRyOworCisJZHNwY250ciA9IHBsYW5lID8gSTkxNV9SRUFEKERTUEJDTlRSKSA6IEk5MTVfUkVBRChEU1BBQ05UUik7CisKKwlyZXR1cm4gZHNwY250ciAmIERJU1BQTEFORV9TRUxfUElQRV9NQVNLID8gMSA6IDA7Cit9CisKKy8qKgorICogaTkxNV9nZXRfcGxhbmUgLSByZXR1cm4gdGhlIHRoZSBwbGFuZSBhc3NvY2lhdGVkIHdpdGggYSBnaXZlbiBwaXBlCisgKiBAZGV2OiBEUk0gZGV2aWNlCisgKiBAcGlwZTogcGlwZSB0byBsb29rIGZvcgorICoKKyAqIFRoZSBJbnRlbCBNZXNhICYgMkQgZHJpdmVycyBjYWxsIHRoZSB2Ymxhbmsgcm91dGluZXMgd2l0aCBhIHBsYW5lIG51bWJlcgorICogcmF0aGVyIHRoYW4gYSBwbGFuZSBudW1iZXIsIHNpbmNlIHRoZXkgbWF5IG5vdCBhbHdheXMgYmUgZXF1YWwuICBUaGlzIHJvdXRpbmUKKyAqIG1hcHMgdGhlIGdpdmVuIEBwaXBlIGJhY2sgdG8gYSBwbGFuZSBudW1iZXIuCisgKi8KK3N0YXRpYyBpbnQKK2k5MTVfZ2V0X3BsYW5lKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGludCBwaXBlKQoreworCWlmIChpOTE1X2dldF9waXBlKGRldiwgMCkgPT0gcGlwZSkKKwkJcmV0dXJuIDA7CisJcmV0dXJuIDE7Cit9CisKKy8qKgorICogaTkxNV9waXBlX2VuYWJsZWQgLSBjaGVjayBpZiBhIHBpcGUgaXMgZW5hYmxlZAorICogQGRldjogRFJNIGRldmljZQorICogQHBpcGU6IHBpcGUgdG8gY2hlY2sKKyAqCisgKiBSZWFkaW5nIGNlcnRhaW4gcmVnaXN0ZXJzIHdoZW4gdGhlIHBpcGUgaXMgZGlzYWJsZWQgY2FuIGhhbmcgdGhlIGNoaXAuCisgKiBVc2UgdGhpcyByb3V0aW5lIHRvIG1ha2Ugc3VyZSB0aGUgUExMIGlzIHJ1bm5pbmcgYW5kIHRoZSBwaXBlIGlzIGFjdGl2ZQorICogYmVmb3JlIHJlYWRpbmcgc3VjaCByZWdpc3RlcnMgaWYgdW5zdXJlLgorICovCitzdGF0aWMgaW50CitpOTE1X3BpcGVfZW5hYmxlZChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgcGlwZSkKK3sKKwlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0gKGRybV9pOTE1X3ByaXZhdGVfdCAqKSBkZXYtPmRldl9wcml2YXRlOworCXVuc2lnbmVkIGxvbmcgcGlwZWNvbmYgPSBwaXBlID8gUElQRUJDT05GIDogUElQRUFDT05GOworCisJaWYgKEk5MTVfUkVBRChwaXBlY29uZikgJiBQSVBFQUNPTkZfRU5BQkxFKQorCQlyZXR1cm4gMTsKKworCXJldHVybiAwOworfQorCiAvKioKICAqIEVtaXQgYmxpdHMgZm9yIHNjaGVkdWxlZCBidWZmZXIgc3dhcHMuCiAgKgpAQCAtNDgsOCArMTI4LDcgQEAKIAl1bnNpZ25lZCBsb25nIGlycWZsYWdzOwogCXN0cnVjdCBsaXN0X2hlYWQgKmxpc3QsICp0bXAsIGhpdHMsICpoaXQ7CiAJaW50IG5oaXRzLCBucmVjdHMsIHNsaWNlWzJdLCB1cHBlclsyXSwgbG93ZXJbMl0sIGk7Ci0JdW5zaWduZWQgY291bnRlclsyXSA9IHsgYXRvbWljX3JlYWQoJmRldi0+dmJsX3JlY2VpdmVkKSwKLQkJCQlhdG9taWNfcmVhZCgmZGV2LT52YmxfcmVjZWl2ZWQyKSB9OworCXVuc2lnbmVkIGNvdW50ZXJbMl07CiAJc3RydWN0IGRybV9kcmF3YWJsZV9pbmZvICpkcnc7CiAJZHJtX2k5MTVfc2FyZWFfdCAqc2FyZWFfcHJpdiA9IGRldl9wcml2LT5zYXJlYV9wcml2OwogCXUzMiBjcHAgPSBkZXZfcHJpdi0+Y3BwOwpAQCAtNzEsNiArMTUwLDkgQEAKIAkJc3JjX3BpdGNoID4+PSAyOwogCX0KIAorCWNvdW50ZXJbMF0gPSBkcm1fdmJsYW5rX2NvdW50KGRldiwgMCk7CisJY291bnRlclsxXSA9IGRybV92YmxhbmtfY291bnQoZGV2LCAxKTsKKwogCURSTV9ERUJVRygiXG4iKTsKIAogCUlOSVRfTElTVF9IRUFEKCZoaXRzKTsKQEAgLTgzLDEyICsxNjUsMTQgQEAKIAlsaXN0X2Zvcl9lYWNoX3NhZmUobGlzdCwgdG1wLCAmZGV2X3ByaXYtPnZibF9zd2Fwcy5oZWFkKSB7CiAJCWRybV9pOTE1X3ZibF9zd2FwX3QgKnZibF9zd2FwID0KIAkJCWxpc3RfZW50cnkobGlzdCwgZHJtX2k5MTVfdmJsX3N3YXBfdCwgaGVhZCk7CisJCWludCBwaXBlID0gaTkxNV9nZXRfcGlwZShkZXYsIHZibF9zd2FwLT5wbGFuZSk7CiAKLQkJaWYgKChjb3VudGVyW3ZibF9zd2FwLT5waXBlXSAtIHZibF9zd2FwLT5zZXF1ZW5jZSkgPiAoMTw8MjMpKQorCQlpZiAoKGNvdW50ZXJbcGlwZV0gLSB2Ymxfc3dhcC0+c2VxdWVuY2UpID4gKDE8PDIzKSkKIAkJCWNvbnRpbnVlOwogCiAJCWxpc3RfZGVsKGxpc3QpOwogCQlkZXZfcHJpdi0+c3dhcHNfcGVuZGluZy0tOworCQlkcm1fdmJsYW5rX3B1dChkZXYsIHBpcGUpOwogCiAJCXNwaW5fdW5sb2NrKCZkZXZfcHJpdi0+c3dhcHNfbG9jayk7CiAJCXNwaW5fbG9jaygmZGV2LT5kcndfbG9jayk7CkBAIC0xODEsNyArMjY1LDcgQEAKIAkJCWRybV9pOTE1X3ZibF9zd2FwX3QgKnN3YXBfaGl0ID0KIAkJCQlsaXN0X2VudHJ5KGhpdCwgZHJtX2k5MTVfdmJsX3N3YXBfdCwgaGVhZCk7CiAJCQlzdHJ1Y3QgZHJtX2NsaXBfcmVjdCAqcmVjdDsKLQkJCWludCBudW1fcmVjdHMsIHBpcGU7CisJCQlpbnQgbnVtX3JlY3RzLCBwbGFuZTsKIAkJCXVuc2lnbmVkIHNob3J0IHRvcCwgYm90dG9tOwogCiAJCQlkcncgPSBkcm1fZ2V0X2RyYXdhYmxlX2luZm8oZGV2LCBzd2FwX2hpdC0+ZHJ3X2lkKTsKQEAgLTE5MCw5ICsyNzQsOSBAQAogCQkJCWNvbnRpbnVlOwogCiAJCQlyZWN0ID0gZHJ3LT5yZWN0czsKLQkJCXBpcGUgPSBzd2FwX2hpdC0+cGlwZTsKLQkJCXRvcCA9IHVwcGVyW3BpcGVdOwotCQkJYm90dG9tID0gbG93ZXJbcGlwZV07CisJCQlwbGFuZSA9IHN3YXBfaGl0LT5wbGFuZTsKKwkJCXRvcCA9IHVwcGVyW3BsYW5lXTsKKwkJCWJvdHRvbSA9IGxvd2VyW3BsYW5lXTsKIAogCQkJZm9yIChudW1fcmVjdHMgPSBkcnctPm51bV9yZWN0czsgbnVtX3JlY3RzLS07IHJlY3QrKykgewogCQkJCWludCB5MSA9IG1heChyZWN0LT55MSwgdG9wKTsKQEAgLTIyOSw2MSArMzEzLDEzOSBAQAogCX0KIH0KIAordTMyIGk5MTVfZ2V0X3ZibGFua19jb3VudGVyKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGludCBwbGFuZSkKK3sKKwlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0gKGRybV9pOTE1X3ByaXZhdGVfdCAqKSBkZXYtPmRldl9wcml2YXRlOworCXVuc2lnbmVkIGxvbmcgaGlnaF9mcmFtZTsKKwl1bnNpZ25lZCBsb25nIGxvd19mcmFtZTsKKwl1MzIgaGlnaDEsIGhpZ2gyLCBsb3csIGNvdW50OworCWludCBwaXBlOworCisJcGlwZSA9IGk5MTVfZ2V0X3BpcGUoZGV2LCBwbGFuZSk7CisJaGlnaF9mcmFtZSA9IHBpcGUgPyBQSVBFQkZSQU1FSElHSCA6IFBJUEVBRlJBTUVISUdIOworCWxvd19mcmFtZSA9IHBpcGUgPyBQSVBFQkZSQU1FUElYRUwgOiBQSVBFQUZSQU1FUElYRUw7CisKKwlpZiAoIWk5MTVfcGlwZV9lbmFibGVkKGRldiwgcGlwZSkpIHsKKwkJRFJNX0VSUk9SKCJ0cnlpbmcgdG8gZ2V0IHZibGFuayBjb3VudCBmb3IgZGlzYWJsZWQgcGlwZSAlZFxuIiwgcGlwZSk7CisJCXJldHVybiAwOworCX0KKworCS8qCisJICogSGlnaCAmIGxvdyByZWdpc3RlciBmaWVsZHMgYXJlbid0IHN5bmNocm9uaXplZCwgc28gbWFrZSBzdXJlCisJICogd2UgZ2V0IGEgbG93IHZhbHVlIHRoYXQncyBzdGFibGUgYWNyb3NzIHR3byByZWFkcyBvZiB0aGUgaGlnaAorCSAqIHJlZ2lzdGVyLgorCSAqLworCWRvIHsKKwkJaGlnaDEgPSAoKEk5MTVfUkVBRChoaWdoX2ZyYW1lKSAmIFBJUEVfRlJBTUVfSElHSF9NQVNLKSA+PgorCQkJIFBJUEVfRlJBTUVfSElHSF9TSElGVCk7CisJCWxvdyA9ICAoKEk5MTVfUkVBRChsb3dfZnJhbWUpICYgUElQRV9GUkFNRV9MT1dfTUFTSykgPj4KKwkJCVBJUEVfRlJBTUVfTE9XX1NISUZUKTsKKwkJaGlnaDIgPSAoKEk5MTVfUkVBRChoaWdoX2ZyYW1lKSAmIFBJUEVfRlJBTUVfSElHSF9NQVNLKSA+PgorCQkJIFBJUEVfRlJBTUVfSElHSF9TSElGVCk7CisJfSB3aGlsZSAoaGlnaDEgIT0gaGlnaDIpOworCisJY291bnQgPSAoaGlnaDEgPDwgOCkgfCBsb3c7CisKKwlyZXR1cm4gY291bnQ7Cit9CisKK3ZvaWQKK2k5MTVfZ2VtX3ZibGFua193b3JrX2hhbmRsZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCWRybV9pOTE1X3ByaXZhdGVfdCAqZGV2X3ByaXY7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldjsKKworCWRldl9wcml2ID0gY29udGFpbmVyX29mKHdvcmssIGRybV9pOTE1X3ByaXZhdGVfdCwKKwkJCQltbS52Ymxhbmtfd29yayk7CisJZGV2ID0gZGV2X3ByaXYtPmRldjsKKworCW11dGV4X2xvY2soJmRldi0+c3RydWN0X211dGV4KTsKKwlpOTE1X3ZibGFua190YXNrbGV0KGRldik7CisJbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7Cit9CisKIGlycXJldHVybl90IGk5MTVfZHJpdmVyX2lycV9oYW5kbGVyKERSTV9JUlFfQVJHUykKIHsKIAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gKHN0cnVjdCBkcm1fZGV2aWNlICopIGFyZzsKIAlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0gKGRybV9pOTE1X3ByaXZhdGVfdCAqKSBkZXYtPmRldl9wcml2YXRlOwotCXUxNiB0ZW1wOworCXUzMiBpaXI7CiAJdTMyIHBpcGVhX3N0YXRzLCBwaXBlYl9zdGF0czsKKwlpbnQgdmJsYW5rID0gMDsKIAotCXBpcGVhX3N0YXRzID0gSTkxNV9SRUFEKEk5MTVSRUdfUElQRUFTVEFUKTsKLQlwaXBlYl9zdGF0cyA9IEk5MTVfUkVBRChJOTE1UkVHX1BJUEVCU1RBVCk7CisJYXRvbWljX2luYygmZGV2X3ByaXYtPmlycV9yZWNlaXZlZCk7CiAKLQl0ZW1wID0gSTkxNV9SRUFEMTYoSTkxNVJFR19JTlRfSURFTlRJVFlfUik7CisJaWYgKGRldi0+cGRldi0+bXNpX2VuYWJsZWQpCisJCUk5MTVfV1JJVEUoSU1SLCB+MCk7CisJaWlyID0gSTkxNV9SRUFEKElJUik7CiAKLQl0ZW1wICY9IChVU0VSX0lOVF9GTEFHIHwgVlNZTkNfUElQRUFfRkxBRyB8IFZTWU5DX1BJUEVCX0ZMQUcpOwotCi0JRFJNX0RFQlVHKCIlcyBmbGFnPSUwOHhcbiIsIF9fRlVOQ1RJT05fXywgdGVtcCk7Ci0KLQlpZiAodGVtcCA9PSAwKQorCWlmIChpaXIgPT0gMCkgeworCQlpZiAoZGV2LT5wZGV2LT5tc2lfZW5hYmxlZCkgeworCQkJSTkxNV9XUklURShJTVIsIGRldl9wcml2LT5pcnFfbWFza19yZWcpOworCQkJKHZvaWQpIEk5MTVfUkVBRChJTVIpOworCQl9CiAJCXJldHVybiBJUlFfTk9ORTsKKwl9CiAKLQlJOTE1X1dSSVRFMTYoSTkxNVJFR19JTlRfSURFTlRJVFlfUiwgdGVtcCk7Ci0JKHZvaWQpIEk5MTVfUkVBRDE2KEk5MTVSRUdfSU5UX0lERU5USVRZX1IpOwotCURSTV9SRUFETUVNT1JZQkFSUklFUigpOworCS8qCisJICogQ2xlYXIgdGhlIFBJUEUoQXxCKVNUQVQgcmVncyBiZWZvcmUgdGhlIElJUiBvdGhlcndpc2UKKwkgKiB3ZSBtYXkgZ2V0IGV4dHJhIGludGVycnVwdHMuCisJICovCisJaWYgKGlpciAmIEk5MTVfRElTUExBWV9QSVBFX0FfRVZFTlRfSU5URVJSVVBUKSB7CisJCXBpcGVhX3N0YXRzID0gSTkxNV9SRUFEKFBJUEVBU1RBVCk7CisJCWlmICghKGRldl9wcml2LT52YmxhbmtfcGlwZSAmIERSTV9JOTE1X1ZCTEFOS19QSVBFX0EpKQorCQkJcGlwZWFfc3RhdHMgJj0gfihQSVBFX1NUQVJUX1ZCTEFOS19JTlRFUlJVUFRfRU5BQkxFIHwKKwkJCQkJIFBJUEVfVkJMQU5LX0lOVEVSUlVQVF9FTkFCTEUpOworCQllbHNlIGlmIChwaXBlYV9zdGF0cyAmIChQSVBFX1NUQVJUX1ZCTEFOS19JTlRFUlJVUFRfU1RBVFVTfAorCQkJCQlQSVBFX1ZCTEFOS19JTlRFUlJVUFRfU1RBVFVTKSkgeworCQkJdmJsYW5rKys7CisJCQlkcm1faGFuZGxlX3ZibGFuayhkZXYsIGk5MTVfZ2V0X3BsYW5lKGRldiwgMCkpOworCQl9CiAKLQlkZXZfcHJpdi0+c2FyZWFfcHJpdi0+bGFzdF9kaXNwYXRjaCA9IFJFQURfQlJFQURDUlVNQihkZXZfcHJpdik7CisJCUk5MTVfV1JJVEUoUElQRUFTVEFULCBwaXBlYV9zdGF0cyk7CisJfQorCWlmIChpaXIgJiBJOTE1X0RJU1BMQVlfUElQRV9CX0VWRU5UX0lOVEVSUlVQVCkgeworCQlwaXBlYl9zdGF0cyA9IEk5MTVfUkVBRChQSVBFQlNUQVQpOworCQkvKiBBY2sgdGhlIGV2ZW50ICovCisJCUk5MTVfV1JJVEUoUElQRUJTVEFULCBwaXBlYl9zdGF0cyk7CiAKLQlpZiAodGVtcCAmIFVTRVJfSU5UX0ZMQUcpCisJCS8qIFRoZSB2YmxhbmsgaW50ZXJydXB0IGdldHMgZW5hYmxlZCBldmVuIGlmIHdlIGRpZG4ndCBhc2sgZm9yCisJCSAgIGl0LCBzbyBtYWtlIHN1cmUgaXQncyBzaHV0IGRvd24gYWdhaW4gKi8KKwkJaWYgKCEoZGV2X3ByaXYtPnZibGFua19waXBlICYgRFJNX0k5MTVfVkJMQU5LX1BJUEVfQikpCisJCQlwaXBlYl9zdGF0cyAmPSB+KFBJUEVfU1RBUlRfVkJMQU5LX0lOVEVSUlVQVF9FTkFCTEUgfAorCQkJCQkgUElQRV9WQkxBTktfSU5URVJSVVBUX0VOQUJMRSk7CisJCWVsc2UgaWYgKHBpcGViX3N0YXRzICYgKFBJUEVfU1RBUlRfVkJMQU5LX0lOVEVSUlVQVF9TVEFUVVN8CisJCQkJCVBJUEVfVkJMQU5LX0lOVEVSUlVQVF9TVEFUVVMpKSB7CisJCQl2YmxhbmsrKzsKKwkJCWRybV9oYW5kbGVfdmJsYW5rKGRldiwgaTkxNV9nZXRfcGxhbmUoZGV2LCAxKSk7CisJCX0KKworCQlpZiAocGlwZWJfc3RhdHMgJiBJOTE1X0xFR0FDWV9CTENfRVZFTlRfU1RBVFVTKQorCQkJb3ByZWdpb25fYXNsZV9pbnRyKGRldik7CisJCUk5MTVfV1JJVEUoUElQRUJTVEFULCBwaXBlYl9zdGF0cyk7CisJfQorCisJSTkxNV9XUklURShJSVIsIGlpcik7CisJaWYgKGRldi0+cGRldi0+bXNpX2VuYWJsZWQpCisJCUk5MTVfV1JJVEUoSU1SLCBkZXZfcHJpdi0+aXJxX21hc2tfcmVnKTsKKwkodm9pZCkgSTkxNV9SRUFEKElJUik7IC8qIEZsdXNoIHBvc3RlZCB3cml0ZXMgKi8KKworCWlmIChkZXZfcHJpdi0+c2FyZWFfcHJpdikKKwkJZGV2X3ByaXYtPnNhcmVhX3ByaXYtPmxhc3RfZGlzcGF0Y2ggPQorCQkJUkVBRF9CUkVBRENSVU1CKGRldl9wcml2KTsKKworCWlmIChpaXIgJiBJOTE1X1VTRVJfSU5URVJSVVBUKSB7CisJCWRldl9wcml2LT5tbS5pcnFfZ2VtX3NlcW5vID0gaTkxNV9nZXRfZ2VtX3NlcW5vKGRldik7CiAJCURSTV9XQUtFVVAoJmRldl9wcml2LT5pcnFfcXVldWUpOworCX0KIAotCWlmICh0ZW1wICYgKFZTWU5DX1BJUEVBX0ZMQUcgfCBWU1lOQ19QSVBFQl9GTEFHKSkgewotCQlpbnQgdmJsYW5rX3BpcGUgPSBkZXZfcHJpdi0+dmJsYW5rX3BpcGU7CisJaWYgKGlpciAmIEk5MTVfQVNMRV9JTlRFUlJVUFQpCisJCW9wcmVnaW9uX2FzbGVfaW50cihkZXYpOwogCi0JCWlmICgodmJsYW5rX3BpcGUgJgotCQkgICAgIChEUk1fSTkxNV9WQkxBTktfUElQRV9BIHwgRFJNX0k5MTVfVkJMQU5LX1BJUEVfQikpCi0JCSAgICA9PSAoRFJNX0k5MTVfVkJMQU5LX1BJUEVfQSB8IERSTV9JOTE1X1ZCTEFOS19QSVBFX0IpKSB7Ci0JCQlpZiAodGVtcCAmIFZTWU5DX1BJUEVBX0ZMQUcpCi0JCQkJYXRvbWljX2luYygmZGV2LT52YmxfcmVjZWl2ZWQpOwotCQkJaWYgKHRlbXAgJiBWU1lOQ19QSVBFQl9GTEFHKQotCQkJCWF0b21pY19pbmMoJmRldi0+dmJsX3JlY2VpdmVkMik7Ci0JCX0gZWxzZSBpZiAoKCh0ZW1wICYgVlNZTkNfUElQRUFfRkxBRykgJiYKLQkJCSAgICAodmJsYW5rX3BpcGUgJiBEUk1fSTkxNV9WQkxBTktfUElQRV9BKSkgfHwKLQkJCSAgICgodGVtcCAmIFZTWU5DX1BJUEVCX0ZMQUcpICYmCi0JCQkgICAgKHZibGFua19waXBlICYgRFJNX0k5MTVfVkJMQU5LX1BJUEVfQikpKQotCQkJYXRvbWljX2luYygmZGV2LT52YmxfcmVjZWl2ZWQpOwotCi0JCURSTV9XQUtFVVAoJmRldi0+dmJsX3F1ZXVlKTsKLQkJZHJtX3ZibF9zZW5kX3NpZ25hbHMoZGV2KTsKLQotCQlpZiAoZGV2X3ByaXYtPnN3YXBzX3BlbmRpbmcgPiAwKQorCWlmICh2YmxhbmsgJiYgZGV2X3ByaXYtPnN3YXBzX3BlbmRpbmcgPiAwKSB7CisJCWlmIChkZXZfcHJpdi0+cmluZy5yaW5nX29iaiA9PSBOVUxMKQogCQkJZHJtX2xvY2tlZF90YXNrbGV0KGRldiwgaTkxNV92YmxhbmtfdGFza2xldCk7Ci0JCUk5MTVfV1JJVEUoSTkxNVJFR19QSVBFQVNUQVQsCi0JCQlwaXBlYV9zdGF0c3xJOTE1X1ZCTEFOS19JTlRFUlJVUFRfRU5BQkxFfAotCQkJSTkxNV9WQkxBTktfQ0xFQVIpOwotCQlJOTE1X1dSSVRFKEk5MTVSRUdfUElQRUJTVEFULAotCQkJcGlwZWJfc3RhdHN8STkxNV9WQkxBTktfSU5URVJSVVBUX0VOQUJMRXwKLQkJCUk5MTVfVkJMQU5LX0NMRUFSKTsKKwkJZWxzZQorCQkJc2NoZWR1bGVfd29yaygmZGV2X3ByaXYtPm1tLnZibGFua193b3JrKTsKIAl9CiAKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CkBAIC0yOTgsMjMgKzQ2MCw0NSBAQAogCiAJRFJNX0RFQlVHKCJcbiIpOwogCi0JZGV2X3ByaXYtPnNhcmVhX3ByaXYtPmxhc3RfZW5xdWV1ZSA9ICsrZGV2X3ByaXYtPmNvdW50ZXI7Ci0KKwlkZXZfcHJpdi0+Y291bnRlcisrOwogCWlmIChkZXZfcHJpdi0+Y291bnRlciA+IDB4N0ZGRkZGRkZVTCkKLQkJZGV2X3ByaXYtPnNhcmVhX3ByaXYtPmxhc3RfZW5xdWV1ZSA9IGRldl9wcml2LT5jb3VudGVyID0gMTsKKwkJZGV2X3ByaXYtPmNvdW50ZXIgPSAxOworCWlmIChkZXZfcHJpdi0+c2FyZWFfcHJpdikKKwkJZGV2X3ByaXYtPnNhcmVhX3ByaXYtPmxhc3RfZW5xdWV1ZSA9IGRldl9wcml2LT5jb3VudGVyOwogCiAJQkVHSU5fTFBfUklORyg2KTsKLQlPVVRfUklORyhDTURfU1RPUkVfRFdPUkRfSURYKTsKLQlPVVRfUklORygyMCk7CisJT1VUX1JJTkcoTUlfU1RPUkVfRFdPUkRfSU5ERVgpOworCU9VVF9SSU5HKDUgPDwgTUlfU1RPUkVfRFdPUkRfSU5ERVhfU0hJRlQpOwogCU9VVF9SSU5HKGRldl9wcml2LT5jb3VudGVyKTsKIAlPVVRfUklORygwKTsKIAlPVVRfUklORygwKTsKLQlPVVRfUklORyhHRlhfT1BfVVNFUl9JTlRFUlJVUFQpOworCU9VVF9SSU5HKE1JX1VTRVJfSU5URVJSVVBUKTsKIAlBRFZBTkNFX0xQX1JJTkcoKTsKIAogCXJldHVybiBkZXZfcHJpdi0+Y291bnRlcjsKIH0KIAordm9pZCBpOTE1X3VzZXJfaXJxX2dldChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQoreworCWRybV9pOTE1X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSAoZHJtX2k5MTVfcHJpdmF0ZV90ICopIGRldi0+ZGV2X3ByaXZhdGU7CisKKwlzcGluX2xvY2soJmRldl9wcml2LT51c2VyX2lycV9sb2NrKTsKKwlpZiAoZGV2LT5pcnFfZW5hYmxlZCAmJiAoKytkZXZfcHJpdi0+dXNlcl9pcnFfcmVmY291bnQgPT0gMSkpCisJCWk5MTVfZW5hYmxlX2lycShkZXZfcHJpdiwgSTkxNV9VU0VSX0lOVEVSUlVQVCk7CisJc3Bpbl91bmxvY2soJmRldl9wcml2LT51c2VyX2lycV9sb2NrKTsKK30KKwordm9pZCBpOTE1X3VzZXJfaXJxX3B1dChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQoreworCWRybV9pOTE1X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSAoZHJtX2k5MTVfcHJpdmF0ZV90ICopIGRldi0+ZGV2X3ByaXZhdGU7CisKKwlzcGluX2xvY2soJmRldl9wcml2LT51c2VyX2lycV9sb2NrKTsKKwlCVUdfT04oZGV2LT5pcnFfZW5hYmxlZCAmJiBkZXZfcHJpdi0+dXNlcl9pcnFfcmVmY291bnQgPD0gMCk7CisJaWYgKGRldi0+aXJxX2VuYWJsZWQgJiYgKC0tZGV2X3ByaXYtPnVzZXJfaXJxX3JlZmNvdW50ID09IDApKQorCQlpOTE1X2Rpc2FibGVfaXJxKGRldl9wcml2LCBJOTE1X1VTRVJfSU5URVJSVVBUKTsKKwlzcGluX3VubG9jaygmZGV2X3ByaXYtPnVzZXJfaXJxX2xvY2spOworfQorCiBzdGF0aWMgaW50IGk5MTVfd2FpdF9pcnEoc3RydWN0IGRybV9kZXZpY2UgKiBkZXYsIGludCBpcnFfbnIpCiB7CiAJZHJtX2k5MTVfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IChkcm1faTkxNV9wcml2YXRlX3QgKikgZGV2LT5kZXZfcHJpdmF0ZTsKQEAgLTMyMyw1NSArNTA3LDM0IEBACiAJRFJNX0RFQlVHKCJpcnFfbnI9JWQgYnJlYWRjcnVtYj0lZFxuIiwgaXJxX25yLAogCQkgIFJFQURfQlJFQURDUlVNQihkZXZfcHJpdikpOwogCi0JaWYgKFJFQURfQlJFQURDUlVNQihkZXZfcHJpdikgPj0gaXJxX25yKQorCWlmIChSRUFEX0JSRUFEQ1JVTUIoZGV2X3ByaXYpID49IGlycV9ucikgeworCQlpZiAoZGV2X3ByaXYtPnNhcmVhX3ByaXYpIHsKKwkJCWRldl9wcml2LT5zYXJlYV9wcml2LT5sYXN0X2Rpc3BhdGNoID0KKwkJCQlSRUFEX0JSRUFEQ1JVTUIoZGV2X3ByaXYpOworCQl9CiAJCXJldHVybiAwOworCX0KIAotCWRldl9wcml2LT5zYXJlYV9wcml2LT5wZXJmX2JveGVzIHw9IEk5MTVfQk9YX1dBSVQ7CisJaWYgKGRldl9wcml2LT5zYXJlYV9wcml2KQorCQlkZXZfcHJpdi0+c2FyZWFfcHJpdi0+cGVyZl9ib3hlcyB8PSBJOTE1X0JPWF9XQUlUOwogCisJaTkxNV91c2VyX2lycV9nZXQoZGV2KTsKIAlEUk1fV0FJVF9PTihyZXQsIGRldl9wcml2LT5pcnFfcXVldWUsIDMgKiBEUk1fSFosCiAJCSAgICBSRUFEX0JSRUFEQ1JVTUIoZGV2X3ByaXYpID49IGlycV9ucik7CisJaTkxNV91c2VyX2lycV9wdXQoZGV2KTsKIAogCWlmIChyZXQgPT0gLUVCVVNZKSB7CiAJCURSTV9FUlJPUigiRUJVU1kgLS0gcmVjOiAlZCBlbWl0dGVkOiAlZFxuIiwKIAkJCSAgUkVBRF9CUkVBRENSVU1CKGRldl9wcml2KSwgKGludClkZXZfcHJpdi0+Y291bnRlcik7CiAJfQogCi0JZGV2X3ByaXYtPnNhcmVhX3ByaXYtPmxhc3RfZGlzcGF0Y2ggPSBSRUFEX0JSRUFEQ1JVTUIoZGV2X3ByaXYpOwotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbnQgaTkxNV9kcml2ZXJfdmJsYW5rX2RvX3dhaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdW5zaWduZWQgaW50ICpzZXF1ZW5jZSwKLQkJCQkgICAgICBhdG9taWNfdCAqY291bnRlcikKLXsKLQlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKLQl1bnNpZ25lZCBpbnQgY3VyX3ZibGFuazsKLQlpbnQgcmV0ID0gMDsKLQotCWlmICghZGV2X3ByaXYpIHsKLQkJRFJNX0VSUk9SKCJjYWxsZWQgd2l0aCBubyBpbml0aWFsaXphdGlvblxuIik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCURSTV9XQUlUX09OKHJldCwgZGV2LT52YmxfcXVldWUsIDMgKiBEUk1fSFosCi0JCSAgICAoKChjdXJfdmJsYW5rID0gYXRvbWljX3JlYWQoY291bnRlcikpCi0JCQktICpzZXF1ZW5jZSkgPD0gKDE8PDIzKSkpOwotCi0JKnNlcXVlbmNlID0gY3VyX3ZibGFuazsKKwlpZiAoZGV2X3ByaXYtPnNhcmVhX3ByaXYpCisJCWRldl9wcml2LT5zYXJlYV9wcml2LT5sYXN0X2Rpc3BhdGNoID0KKwkJCVJFQURfQlJFQURDUlVNQihkZXZfcHJpdik7CiAKIAlyZXR1cm4gcmV0OwogfQogCi0KLWludCBpOTE1X2RyaXZlcl92Ymxhbmtfd2FpdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgKnNlcXVlbmNlKQotewotCXJldHVybiBpOTE1X2RyaXZlcl92YmxhbmtfZG9fd2FpdChkZXYsIHNlcXVlbmNlLCAmZGV2LT52YmxfcmVjZWl2ZWQpOwotfQotCi1pbnQgaTkxNV9kcml2ZXJfdmJsYW5rX3dhaXQyKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCAqc2VxdWVuY2UpCi17Ci0JcmV0dXJuIGk5MTVfZHJpdmVyX3ZibGFua19kb193YWl0KGRldiwgc2VxdWVuY2UsICZkZXYtPnZibF9yZWNlaXZlZDIpOwotfQotCiAvKiBOZWVkcyB0aGUgbG9jayBhcyBpdCB0b3VjaGVzIHRoZSByaW5nLgogICovCiBpbnQgaTkxNV9pcnFfZW1pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLApAQCAtMzgxLDE0ICs1NDQsMTUgQEAKIAlkcm1faTkxNV9pcnFfZW1pdF90ICplbWl0ID0gZGF0YTsKIAlpbnQgcmVzdWx0OwogCi0JTE9DS19URVNUX1dJVEhfUkVUVVJOKGRldiwgZmlsZV9wcml2KTsKKwlSSU5HX0xPQ0tfVEVTVF9XSVRIX1JFVFVSTihkZXYsIGZpbGVfcHJpdik7CiAKIAlpZiAoIWRldl9wcml2KSB7CiAJCURSTV9FUlJPUigiY2FsbGVkIHdpdGggbm8gaW5pdGlhbGl6YXRpb25cbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9Ci0KKwltdXRleF9sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CiAJcmVzdWx0ID0gaTkxNV9lbWl0X2lycShkZXYpOworCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOwogCiAJaWYgKERSTV9DT1BZX1RPX1VTRVIoZW1pdC0+aXJxX3NlcSwgJnJlc3VsdCwgc2l6ZW9mKGludCkpKSB7CiAJCURSTV9FUlJPUigiY29weV90b191c2VyXG4iKTsKQEAgLTQxNCwxOCArNTc4LDc0IEBACiAJcmV0dXJuIGk5MTVfd2FpdF9pcnEoZGV2LCBpcnF3YWl0LT5pcnFfc2VxKTsKIH0KIAotc3RhdGljIHZvaWQgaTkxNV9lbmFibGVfaW50ZXJydXB0IChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQoraW50IGk5MTVfZW5hYmxlX3ZibGFuayhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgcGxhbmUpCiB7CiAJZHJtX2k5MTVfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IChkcm1faTkxNV9wcml2YXRlX3QgKikgZGV2LT5kZXZfcHJpdmF0ZTsKLQl1MTYgZmxhZzsKKwlpbnQgcGlwZSA9IGk5MTVfZ2V0X3BpcGUoZGV2LCBwbGFuZSk7CisJdTMyCXBpcGVzdGF0X3JlZyA9IDA7CisJdTMyCXBpcGVzdGF0OwogCi0JZmxhZyA9IDA7Ci0JaWYgKGRldl9wcml2LT52YmxhbmtfcGlwZSAmIERSTV9JOTE1X1ZCTEFOS19QSVBFX0EpCi0JCWZsYWcgfD0gVlNZTkNfUElQRUFfRkxBRzsKLQlpZiAoZGV2X3ByaXYtPnZibGFua19waXBlICYgRFJNX0k5MTVfVkJMQU5LX1BJUEVfQikKLQkJZmxhZyB8PSBWU1lOQ19QSVBFQl9GTEFHOworCXN3aXRjaCAocGlwZSkgeworCWNhc2UgMDoKKwkJcGlwZXN0YXRfcmVnID0gUElQRUFTVEFUOworCQlpOTE1X2VuYWJsZV9pcnEoZGV2X3ByaXYsIEk5MTVfRElTUExBWV9QSVBFX0FfRVZFTlRfSU5URVJSVVBUKTsKKwkJYnJlYWs7CisJY2FzZSAxOgorCQlwaXBlc3RhdF9yZWcgPSBQSVBFQlNUQVQ7CisJCWk5MTVfZW5hYmxlX2lycShkZXZfcHJpdiwgSTkxNV9ESVNQTEFZX1BJUEVfQl9FVkVOVF9JTlRFUlJVUFQpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlEUk1fRVJST1IoInRyaWVkIHRvIGVuYWJsZSB2Ymxhbmsgb24gbm9uLWV4aXN0ZW50IHBpcGUgJWRcbiIsCisJCQkgIHBpcGUpOworCQlicmVhazsKKwl9CiAKLQlJOTE1X1dSSVRFMTYoSTkxNVJFR19JTlRfRU5BQkxFX1IsIFVTRVJfSU5UX0ZMQUcgfCBmbGFnKTsKKwlpZiAocGlwZXN0YXRfcmVnKSB7CisJCXBpcGVzdGF0ID0gSTkxNV9SRUFEKHBpcGVzdGF0X3JlZyk7CisJCWlmIChJU19JOTY1RyhkZXYpKQorCQkJcGlwZXN0YXQgfD0gUElQRV9TVEFSVF9WQkxBTktfSU5URVJSVVBUX0VOQUJMRTsKKwkJZWxzZQorCQkJcGlwZXN0YXQgfD0gUElQRV9WQkxBTktfSU5URVJSVVBUX0VOQUJMRTsKKwkJLyogQ2xlYXIgYW55IHN0YWxlIGludGVycnVwdCBzdGF0dXMgKi8KKwkJcGlwZXN0YXQgfD0gKFBJUEVfU1RBUlRfVkJMQU5LX0lOVEVSUlVQVF9TVEFUVVMgfAorCQkJICAgICBQSVBFX1ZCTEFOS19JTlRFUlJVUFRfU1RBVFVTKTsKKwkJSTkxNV9XUklURShwaXBlc3RhdF9yZWcsIHBpcGVzdGF0KTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKwordm9pZCBpOTE1X2Rpc2FibGVfdmJsYW5rKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGludCBwbGFuZSkKK3sKKwlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0gKGRybV9pOTE1X3ByaXZhdGVfdCAqKSBkZXYtPmRldl9wcml2YXRlOworCWludCBwaXBlID0gaTkxNV9nZXRfcGlwZShkZXYsIHBsYW5lKTsKKwl1MzIJcGlwZXN0YXRfcmVnID0gMDsKKwl1MzIJcGlwZXN0YXQ7CisKKwlzd2l0Y2ggKHBpcGUpIHsKKwljYXNlIDA6CisJCXBpcGVzdGF0X3JlZyA9IFBJUEVBU1RBVDsKKwkJaTkxNV9kaXNhYmxlX2lycShkZXZfcHJpdiwgSTkxNV9ESVNQTEFZX1BJUEVfQV9FVkVOVF9JTlRFUlJVUFQpOworCQlicmVhazsKKwljYXNlIDE6CisJCXBpcGVzdGF0X3JlZyA9IFBJUEVCU1RBVDsKKwkJaTkxNV9kaXNhYmxlX2lycShkZXZfcHJpdiwgSTkxNV9ESVNQTEFZX1BJUEVfQl9FVkVOVF9JTlRFUlJVUFQpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlEUk1fRVJST1IoInRyaWVkIHRvIGRpc2FibGUgdmJsYW5rIG9uIG5vbi1leGlzdGVudCBwaXBlICVkXG4iLAorCQkJICBwaXBlKTsKKwkJYnJlYWs7CisJfQorCisJaWYgKHBpcGVzdGF0X3JlZykgeworCQlwaXBlc3RhdCA9IEk5MTVfUkVBRChwaXBlc3RhdF9yZWcpOworCQlwaXBlc3RhdCAmPSB+KFBJUEVfU1RBUlRfVkJMQU5LX0lOVEVSUlVQVF9FTkFCTEUgfAorCQkJICAgICAgUElQRV9WQkxBTktfSU5URVJSVVBUX0VOQUJMRSk7CisJCS8qIENsZWFyIGFueSBzdGFsZSBpbnRlcnJ1cHQgc3RhdHVzICovCisJCXBpcGVzdGF0IHw9IChQSVBFX1NUQVJUX1ZCTEFOS19JTlRFUlJVUFRfU1RBVFVTIHwKKwkJCSAgICAgUElQRV9WQkxBTktfSU5URVJSVVBUX1NUQVRVUyk7CisJCUk5MTVfV1JJVEUocGlwZXN0YXRfcmVnLCBwaXBlc3RhdCk7CisJfQogfQogCiAvKiBTZXQgdGhlIHZibGFuayBtb25pdG9yIHBpcGUKQEAgLTQzNCwyMiArNjU0LDEyIEBACiAJCQkgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpCiB7CiAJZHJtX2k5MTVfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Ci0JZHJtX2k5MTVfdmJsYW5rX3BpcGVfdCAqcGlwZSA9IGRhdGE7CiAKIAlpZiAoIWRldl9wcml2KSB7CiAJCURSTV9FUlJPUigiY2FsbGVkIHdpdGggbm8gaW5pdGlhbGl6YXRpb25cbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQlpZiAocGlwZS0+cGlwZSAmIH4oRFJNX0k5MTVfVkJMQU5LX1BJUEVfQXxEUk1fSTkxNV9WQkxBTktfUElQRV9CKSkgewotCQlEUk1fRVJST1IoImNhbGxlZCB3aXRoIGludmFsaWQgcGlwZSAweCV4XG4iLCBwaXBlLT5waXBlKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JZGV2X3ByaXYtPnZibGFua19waXBlID0gcGlwZS0+cGlwZTsKLQotCWk5MTVfZW5hYmxlX2ludGVycnVwdCAoZGV2KTsKLQogCXJldHVybiAwOwogfQogCkBAIC00NTgsMTkgKzY2OCwxMyBAQAogewogCWRybV9pOTE1X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwogCWRybV9pOTE1X3ZibGFua19waXBlX3QgKnBpcGUgPSBkYXRhOwotCXUxNiBmbGFnOwogCiAJaWYgKCFkZXZfcHJpdikgewogCQlEUk1fRVJST1IoImNhbGxlZCB3aXRoIG5vIGluaXRpYWxpemF0aW9uXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JZmxhZyA9IEk5MTVfUkVBRChJOTE1UkVHX0lOVF9FTkFCTEVfUik7Ci0JcGlwZS0+cGlwZSA9IDA7Ci0JaWYgKGZsYWcgJiBWU1lOQ19QSVBFQV9GTEFHKQotCQlwaXBlLT5waXBlIHw9IERSTV9JOTE1X1ZCTEFOS19QSVBFX0E7Ci0JaWYgKGZsYWcgJiBWU1lOQ19QSVBFQl9GTEFHKQotCQlwaXBlLT5waXBlIHw9IERSTV9JOTE1X1ZCTEFOS19QSVBFX0I7CisJcGlwZS0+cGlwZSA9IERSTV9JOTE1X1ZCTEFOS19QSVBFX0EgfCBEUk1fSTkxNV9WQkxBTktfUElQRV9COwogCiAJcmV0dXJuIDA7CiB9CkBAIC00ODQsMTEgKzY4OCwxMiBAQAogCWRybV9pOTE1X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwogCWRybV9pOTE1X3ZibGFua19zd2FwX3QgKnN3YXAgPSBkYXRhOwogCWRybV9pOTE1X3ZibF9zd2FwX3QgKnZibF9zd2FwOwotCXVuc2lnbmVkIGludCBwaXBlLCBzZXF0eXBlLCBjdXJzZXE7CisJdW5zaWduZWQgaW50IHBpcGUsIHNlcXR5cGUsIGN1cnNlcSwgcGxhbmU7CiAJdW5zaWduZWQgbG9uZyBpcnFmbGFnczsKIAlzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0OworCWludCByZXQ7CiAKLQlpZiAoIWRldl9wcml2KSB7CisJaWYgKCFkZXZfcHJpdiB8fCAhZGV2X3ByaXYtPnNhcmVhX3ByaXYpIHsKIAkJRFJNX0VSUk9SKCIlcyBjYWxsZWQgd2l0aCBubyBpbml0aWFsaXphdGlvblxuIiwgX19mdW5jX18pOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CkBAIC01MDQsNyArNzA5LDggQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JcGlwZSA9IChzd2FwLT5zZXF0eXBlICYgX0RSTV9WQkxBTktfU0VDT05EQVJZKSA/IDEgOiAwOworCXBsYW5lID0gKHN3YXAtPnNlcXR5cGUgJiBfRFJNX1ZCTEFOS19TRUNPTkRBUlkpID8gMSA6IDA7CisJcGlwZSA9IGk5MTVfZ2V0X3BpcGUoZGV2LCBwbGFuZSk7CiAKIAlzZXF0eXBlID0gc3dhcC0+c2VxdHlwZSAmIChfRFJNX1ZCTEFOS19SRUxBVElWRSB8IF9EUk1fVkJMQU5LX0FCU09MVVRFKTsKIApAQCAtNTIzLDcgKzcyOSwxNCBAQAogCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5kcndfbG9jaywgaXJxZmxhZ3MpOwogCi0JY3Vyc2VxID0gYXRvbWljX3JlYWQocGlwZSA/ICZkZXYtPnZibF9yZWNlaXZlZDIgOiAmZGV2LT52YmxfcmVjZWl2ZWQpOworCS8qCisJICogV2UgdGFrZSB0aGUgcmVmIGhlcmUgYW5kIHB1dCBpdCB3aGVuIHRoZSBzd2FwIGFjdHVhbGx5IGNvbXBsZXRlcworCSAqIGluIHRoZSB0YXNrbGV0LgorCSAqLworCXJldCA9IGRybV92YmxhbmtfZ2V0KGRldiwgcGlwZSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKwljdXJzZXEgPSBkcm1fdmJsYW5rX2NvdW50KGRldiwgcGlwZSk7CiAKIAlpZiAoc2VxdHlwZSA9PSBfRFJNX1ZCTEFOS19SRUxBVElWRSkKIAkJc3dhcC0+c2VxdWVuY2UgKz0gY3Vyc2VxOwpAQCAtNTMzLDYgKzc0Niw3IEBACiAJCQlzd2FwLT5zZXF1ZW5jZSA9IGN1cnNlcSArIDE7CiAJCX0gZWxzZSB7CiAJCQlEUk1fREVCVUcoIk1pc3NlZCB0YXJnZXQgc2VxdWVuY2VcbiIpOworCQkJZHJtX3ZibGFua19wdXQoZGV2LCBwaXBlKTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAJfQpAQCAtNTQzLDcgKzc1Nyw3IEBACiAJCXZibF9zd2FwID0gbGlzdF9lbnRyeShsaXN0LCBkcm1faTkxNV92Ymxfc3dhcF90LCBoZWFkKTsKIAogCQlpZiAodmJsX3N3YXAtPmRyd19pZCA9PSBzd2FwLT5kcmF3YWJsZSAmJgotCQkgICAgdmJsX3N3YXAtPnBpcGUgPT0gcGlwZSAmJgorCQkgICAgdmJsX3N3YXAtPnBsYW5lID09IHBsYW5lICYmCiAJCSAgICB2Ymxfc3dhcC0+c2VxdWVuY2UgPT0gc3dhcC0+c2VxdWVuY2UpIHsKIAkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldl9wcml2LT5zd2Fwc19sb2NrLCBpcnFmbGFncyk7CiAJCQlEUk1fREVCVUcoIkFscmVhZHkgc2NoZWR1bGVkXG4iKTsKQEAgLTU1NSw2ICs3NjksNyBAQAogCiAJaWYgKGRldl9wcml2LT5zd2Fwc19wZW5kaW5nID49IDEwMCkgewogCQlEUk1fREVCVUcoIlRvbyBtYW55IHN3YXBzIHF1ZXVlZFxuIik7CisJCWRybV92YmxhbmtfcHV0KGRldiwgcGlwZSk7CiAJCXJldHVybiAtRUJVU1k7CiAJfQogCkBAIC01NjIsMTMgKzc3NywxNCBAQAogCiAJaWYgKCF2Ymxfc3dhcCkgewogCQlEUk1fRVJST1IoIkZhaWxlZCB0byBhbGxvY2F0ZSBtZW1vcnkgdG8gcXVldWUgc3dhcFxuIik7CisJCWRybV92YmxhbmtfcHV0KGRldiwgcGlwZSk7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAogCURSTV9ERUJVRygiXG4iKTsKIAogCXZibF9zd2FwLT5kcndfaWQgPSBzd2FwLT5kcmF3YWJsZTsKLQl2Ymxfc3dhcC0+cGlwZSA9IHBpcGU7CisJdmJsX3N3YXAtPnBsYW5lID0gcGxhbmU7CiAJdmJsX3N3YXAtPnNlcXVlbmNlID0gc3dhcC0+c2VxdWVuY2U7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2X3ByaXYtPnN3YXBzX2xvY2ssIGlycWZsYWdzKTsKQEAgLTU4NywzNyArODAzLDYzIEBACiB7CiAJZHJtX2k5MTVfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IChkcm1faTkxNV9wcml2YXRlX3QgKikgZGV2LT5kZXZfcHJpdmF0ZTsKIAotCUk5MTVfV1JJVEUxNihJOTE1UkVHX0hXU1RBTSwgMHhmZmZlKTsKLQlJOTE1X1dSSVRFMTYoSTkxNVJFR19JTlRfTUFTS19SLCAweDApOwotCUk5MTVfV1JJVEUxNihJOTE1UkVHX0lOVF9FTkFCTEVfUiwgMHgwKTsKKwlJOTE1X1dSSVRFKEhXU1RBTSwgMHhlZmZlKTsKKwlJOTE1X1dSSVRFKElNUiwgMHhmZmZmZmZmZik7CisJSTkxNV9XUklURShJRVIsIDB4MCk7CiB9CiAKLXZvaWQgaTkxNV9kcml2ZXJfaXJxX3Bvc3RpbnN0YWxsKHN0cnVjdCBkcm1fZGV2aWNlICogZGV2KQoraW50IGk5MTVfZHJpdmVyX2lycV9wb3N0aW5zdGFsbChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQogewogCWRybV9pOTE1X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSAoZHJtX2k5MTVfcHJpdmF0ZV90ICopIGRldi0+ZGV2X3ByaXZhdGU7CisJaW50IHJldCwgbnVtX3BpcGVzID0gMjsKIAogCXNwaW5fbG9ja19pbml0KCZkZXZfcHJpdi0+c3dhcHNfbG9jayk7CiAJSU5JVF9MSVNUX0hFQUQoJmRldl9wcml2LT52Ymxfc3dhcHMuaGVhZCk7CiAJZGV2X3ByaXYtPnN3YXBzX3BlbmRpbmcgPSAwOwogCi0JaWYgKCFkZXZfcHJpdi0+dmJsYW5rX3BpcGUpCi0JCWRldl9wcml2LT52YmxhbmtfcGlwZSA9IERSTV9JOTE1X1ZCTEFOS19QSVBFX0E7Ci0JaTkxNV9lbmFibGVfaW50ZXJydXB0KGRldik7CisJLyogU2V0IGluaXRpYWwgdW5tYXNrZWQgSVJRcyB0byBqdXN0IHRoZSBzZWxlY3RlZCB2YmxhbmsgcGlwZXMuICovCisJZGV2X3ByaXYtPmlycV9tYXNrX3JlZyA9IH4wOworCisJcmV0ID0gZHJtX3ZibGFua19pbml0KGRldiwgbnVtX3BpcGVzKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJZGV2X3ByaXYtPnZibGFua19waXBlID0gRFJNX0k5MTVfVkJMQU5LX1BJUEVfQSB8IERSTV9JOTE1X1ZCTEFOS19QSVBFX0I7CisJZGV2X3ByaXYtPmlycV9tYXNrX3JlZyAmPSB+STkxNV9ESVNQTEFZX1BJUEVfQV9WQkxBTktfSU5URVJSVVBUOworCWRldl9wcml2LT5pcnFfbWFza19yZWcgJj0gfkk5MTVfRElTUExBWV9QSVBFX0JfVkJMQU5LX0lOVEVSUlVQVDsKKworCWRldi0+bWF4X3ZibGFua19jb3VudCA9IDB4ZmZmZmZmOyAvKiBvbmx5IDI0IGJpdHMgb2YgZnJhbWUgY291bnQgKi8KKworCWRldl9wcml2LT5pcnFfbWFza19yZWcgJj0gSTkxNV9JTlRFUlJVUFRfRU5BQkxFX01BU0s7CisKKwlJOTE1X1dSSVRFKElNUiwgZGV2X3ByaXYtPmlycV9tYXNrX3JlZyk7CisJSTkxNV9XUklURShJRVIsIEk5MTVfSU5URVJSVVBUX0VOQUJMRV9NQVNLKTsKKwkodm9pZCkgSTkxNV9SRUFEKElFUik7CisKKwlvcHJlZ2lvbl9lbmFibGVfYXNsZShkZXYpOwogCURSTV9JTklUX1dBSVRRVUVVRSgmZGV2X3ByaXYtPmlycV9xdWV1ZSk7CisKKwlyZXR1cm4gMDsKIH0KIAogdm9pZCBpOTE1X2RyaXZlcl9pcnFfdW5pbnN0YWxsKHN0cnVjdCBkcm1fZGV2aWNlICogZGV2KQogewogCWRybV9pOTE1X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSAoZHJtX2k5MTVfcHJpdmF0ZV90ICopIGRldi0+ZGV2X3ByaXZhdGU7Ci0JdTE2IHRlbXA7CisJdTMyIHRlbXA7CiAKIAlpZiAoIWRldl9wcml2KQogCQlyZXR1cm47CiAKLQlJOTE1X1dSSVRFMTYoSTkxNVJFR19IV1NUQU0sIDB4ZmZmZik7Ci0JSTkxNV9XUklURTE2KEk5MTVSRUdfSU5UX01BU0tfUiwgMHhmZmZmKTsKLQlJOTE1X1dSSVRFMTYoSTkxNVJFR19JTlRfRU5BQkxFX1IsIDB4MCk7CisJZGV2X3ByaXYtPnZibGFua19waXBlID0gMDsKIAotCXRlbXAgPSBJOTE1X1JFQUQxNihJOTE1UkVHX0lOVF9JREVOVElUWV9SKTsKLQlJOTE1X1dSSVRFMTYoSTkxNVJFR19JTlRfSURFTlRJVFlfUiwgdGVtcCk7CisJSTkxNV9XUklURShIV1NUQU0sIDB4ZmZmZmZmZmYpOworCUk5MTVfV1JJVEUoSU1SLCAweGZmZmZmZmZmKTsKKwlJOTE1X1dSSVRFKElFUiwgMHgwKTsKKworCXRlbXAgPSBJOTE1X1JFQUQoUElQRUFTVEFUKTsKKwlJOTE1X1dSSVRFKFBJUEVBU1RBVCwgdGVtcCk7CisJdGVtcCA9IEk5MTVfUkVBRChQSVBFQlNUQVQpOworCUk5MTVfV1JJVEUoUElQRUJTVEFULCB0ZW1wKTsKKwl0ZW1wID0gSTkxNV9SRUFEKElJUik7CisJSTkxNV9XUklURShJSVIsIHRlbXApOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9vcHJlZ2lvbi5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9vcHJlZ2lvbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3ODdhMGMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X29wcmVnaW9uLmMKQEAgLTAsMCArMSwzNzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwOCBJbnRlbCBDb3Jwb3JhdGlvbiA8aG9uZy5saXVAaW50ZWwuY29tPgorICogQ29weXJpZ2h0IDIwMDggUmVkIEhhdCA8bWpnQHJlZGhhdC5jb20+CisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nCisgKiBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwKKyAqIGRpc3RyaWJ1dGUsIHN1YiBsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8KKyAqIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0bworICogdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhlCisgKiBuZXh0IHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbAorICogcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorICogRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorICogTk9OLUlORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMIElOVEVMIEFORC9PUiBJVFMgU1VQUExJRVJTIEJFCisgKiBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOCisgKiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFCisgKiBTT0ZUV0FSRS4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2FjcGkuaD4KKworI2luY2x1ZGUgImRybVAuaCIKKyNpbmNsdWRlICJpOTE1X2RybS5oIgorI2luY2x1ZGUgImk5MTVfZHJ2LmgiCisKKyNkZWZpbmUgUENJX0FTTEUgMHhlNAorI2RlZmluZSBQQ0lfTEJQQyAweGY0CisjZGVmaW5lIFBDSV9BU0xTIDB4ZmMKKworI2RlZmluZSBPUFJFR0lPTl9TWiAgICAgICAgICAgICg4KjEwMjQpCisjZGVmaW5lIE9QUkVHSU9OX0hFQURFUl9PRkZTRVQgMAorI2RlZmluZSBPUFJFR0lPTl9BQ1BJX09GRlNFVCAgIDB4MTAwCisjZGVmaW5lIE9QUkVHSU9OX1NXU0NJX09GRlNFVCAgMHgyMDAKKyNkZWZpbmUgT1BSRUdJT05fQVNMRV9PRkZTRVQgICAweDMwMAorI2RlZmluZSBPUFJFR0lPTl9WQlRfT0ZGU0VUICAgIDB4MTAwMAorCisjZGVmaW5lIE9QUkVHSU9OX1NJR05BVFVSRSAiSW50ZWxHcmFwaGljc01lbSIKKyNkZWZpbmUgTUJPWF9BQ1BJICAgICAgKDE8PDApCisjZGVmaW5lIE1CT1hfU1dTQ0kgICAgICgxPDwxKQorI2RlZmluZSBNQk9YX0FTTEUgICAgICAoMTw8MikKKworc3RydWN0IG9wcmVnaW9uX2hlYWRlciB7CisgICAgICAgdTggc2lnbmF0dXJlWzE2XTsKKyAgICAgICB1MzIgc2l6ZTsKKyAgICAgICB1MzIgb3ByZWdpb25fdmVyOworICAgICAgIHU4IGJpb3NfdmVyWzMyXTsKKyAgICAgICB1OCB2Ymlvc192ZXJbMTZdOworICAgICAgIHU4IGRyaXZlcl92ZXJbMTZdOworICAgICAgIHUzMiBtYm94ZXM7CisgICAgICAgdTggcmVzZXJ2ZWRbMTY0XTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKKy8qIE9wUmVnaW9uIG1haWxib3ggIzE6IHB1YmxpYyBBQ1BJIG1ldGhvZHMgKi8KK3N0cnVjdCBvcHJlZ2lvbl9hY3BpIHsKKyAgICAgICB1MzIgZHJkeTsgICAgICAgLyogZHJpdmVyIHJlYWRpbmVzcyAqLworICAgICAgIHUzMiBjc3RzOyAgICAgICAvKiBub3RpZmljYXRpb24gc3RhdHVzICovCisgICAgICAgdTMyIGNldnQ7ICAgICAgIC8qIGN1cnJlbnQgZXZlbnQgKi8KKyAgICAgICB1OCByc3ZkMVsyMF07CisgICAgICAgdTMyIGRpZGxbOF07ICAgIC8qIHN1cHBvcnRlZCBkaXNwbGF5IGRldmljZXMgSUQgbGlzdCAqLworICAgICAgIHUzMiBjcGRsWzhdOyAgICAvKiBjdXJyZW50bHkgcHJlc2VudGVkIGRpc3BsYXkgbGlzdCAqLworICAgICAgIHUzMiBjYWRsWzhdOyAgICAvKiBjdXJyZW50bHkgYWN0aXZlIGRpc3BsYXkgbGlzdCAqLworICAgICAgIHUzMiBuYWRsWzhdOyAgICAvKiBuZXh0IGFjdGl2ZSBkZXZpY2VzIGxpc3QgKi8KKyAgICAgICB1MzIgYXNscDsgICAgICAgLyogQVNMIHNsZWVwIHRpbWUtb3V0ICovCisgICAgICAgdTMyIHRpZHg7ICAgICAgIC8qIHRvZ2dsZSB0YWJsZSBpbmRleCAqLworICAgICAgIHUzMiBjaHBkOyAgICAgICAvKiBjdXJyZW50IGhvdHBsdWcgZW5hYmxlIGluZGljYXRvciAqLworICAgICAgIHUzMiBjbGlkOyAgICAgICAvKiBjdXJyZW50IGxpZCBzdGF0ZSovCisgICAgICAgdTMyIGNkY2s7ICAgICAgIC8qIGN1cnJlbnQgZG9ja2luZyBzdGF0ZSAqLworICAgICAgIHUzMiBzeHN3OyAgICAgICAvKiBTeCBzdGF0ZSByZXN1bWUgKi8KKyAgICAgICB1MzIgZXZ0czsgICAgICAgLyogQVNMIHN1cHBvcnRlZCBldmVudHMgKi8KKyAgICAgICB1MzIgY25vdDsgICAgICAgLyogY3VycmVudCBPUyBub3RpZmljYXRpb24gKi8KKyAgICAgICB1MzIgbnJkeTsgICAgICAgLyogZHJpdmVyIHN0YXR1cyAqLworICAgICAgIHU4IHJzdmQyWzYwXTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKKy8qIE9wUmVnaW9uIG1haWxib3ggIzI6IFNXU0NJICovCitzdHJ1Y3Qgb3ByZWdpb25fc3dzY2kgeworICAgICAgIHUzMiBzY2ljOyAgICAgICAvKiBTV1NDSSBjb21tYW5kfHN0YXR1c3xkYXRhICovCisgICAgICAgdTMyIHBhcm07ICAgICAgIC8qIGNvbW1hbmQgcGFyYW1ldGVycyAqLworICAgICAgIHUzMiBkc2xwOyAgICAgICAvKiBkcml2ZXIgc2xlZXAgdGltZS1vdXQgKi8KKyAgICAgICB1OCByc3ZkWzI0NF07Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCisvKiBPcFJlZ2lvbiBtYWlsYm94ICMzOiBBU0xFICovCitzdHJ1Y3Qgb3ByZWdpb25fYXNsZSB7CisgICAgICAgdTMyIGFyZHk7ICAgICAgIC8qIGRyaXZlciByZWFkaW5lc3MgKi8KKyAgICAgICB1MzIgYXNsYzsgICAgICAgLyogQVNMRSBpbnRlcnJ1cHQgY29tbWFuZCAqLworICAgICAgIHUzMiB0Y2hlOyAgICAgICAvKiB0ZWNobm9sb2d5IGVuYWJsZWQgaW5kaWNhdG9yICovCisgICAgICAgdTMyIGFsc2k7ICAgICAgIC8qIGN1cnJlbnQgQUxTIGlsbHVtaW5hbmNlIHJlYWRpbmcgKi8KKyAgICAgICB1MzIgYmNscDsgICAgICAgLyogYmFja2xpZ2h0IGJyaWdodG5lc3MgdG8gc2V0ICovCisgICAgICAgdTMyIHBmaXQ7ICAgICAgIC8qIHBhbmVsIGZpdHRpbmcgc3RhdGUgKi8KKyAgICAgICB1MzIgY2JsdjsgICAgICAgLyogY3VycmVudCBicmlnaHRuZXNzIGxldmVsICovCisgICAgICAgdTE2IGJjbG1bMjBdOyAgIC8qIGJhY2tsaWdodCBsZXZlbCBkdXR5IGN5Y2xlIG1hcHBpbmcgdGFibGUgKi8KKyAgICAgICB1MzIgY3BmbTsgICAgICAgLyogY3VycmVudCBwYW5lbCBmaXR0aW5nIG1vZGUgKi8KKyAgICAgICB1MzIgZXBmbTsgICAgICAgLyogZW5hYmxlZCBwYW5lbCBmaXR0aW5nIG1vZGVzICovCisgICAgICAgdTggcGx1dFs3NF07ICAgIC8qIHBhbmVsIExVVCBhbmQgaWRlbnRpZmllciAqLworICAgICAgIHUzMiBwZm1iOyAgICAgICAvKiBQV00gZnJlcSBhbmQgbWluIGJyaWdodG5lc3MgKi8KKyAgICAgICB1OCByc3ZkWzEwMl07Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCisvKiBBU0xFIGlycSByZXF1ZXN0IGJpdHMgKi8KKyNkZWZpbmUgQVNMRV9TRVRfQUxTX0lMTFVNICAgICAoMSA8PCAwKQorI2RlZmluZSBBU0xFX1NFVF9CQUNLTElHSFQgICAgICgxIDw8IDEpCisjZGVmaW5lIEFTTEVfU0VUX1BGSVQgICAgICAgICAgKDEgPDwgMikKKyNkZWZpbmUgQVNMRV9TRVRfUFdNX0ZSRVEgICAgICAoMSA8PCAzKQorI2RlZmluZSBBU0xFX1JFUV9NU0sgICAgICAgICAgIDB4ZgorCisvKiByZXNwb25zZSBiaXRzIG9mIEFTTEUgaXJxIHJlcXVlc3QgKi8KKyNkZWZpbmUgQVNMRV9BTFNfSUxMVU1fRkFJTCAgICAoMjw8MTApCisjZGVmaW5lIEFTTEVfQkFDS0xJR0hUX0ZBSUwgICAgKDI8PDEyKQorI2RlZmluZSBBU0xFX1BGSVRfRkFJTCAgICAgICAgICgyPDwxNCkKKyNkZWZpbmUgQVNMRV9QV01fRlJFUV9GQUlMICAgICAoMjw8MTYpCisKKy8qIEFTTEUgYmFja2xpZ2h0IGJyaWdodG5lc3MgdG8gc2V0ICovCisjZGVmaW5lIEFTTEVfQkNMUF9WQUxJRCAgICAgICAgICAgICAgICAoMTw8MzEpCisjZGVmaW5lIEFTTEVfQkNMUF9NU0sgICAgICAgICAgKH4oMTw8MzEpKQorCisvKiBBU0xFIHBhbmVsIGZpdHRpbmcgcmVxdWVzdCAqLworI2RlZmluZSBBU0xFX1BGSVRfVkFMSUQgICAgICAgICAoMTw8MzEpCisjZGVmaW5lIEFTTEVfUEZJVF9DRU5URVIgKDE8PDApCisjZGVmaW5lIEFTTEVfUEZJVF9TVFJFVENIX1RFWFQgKDE8PDEpCisjZGVmaW5lIEFTTEVfUEZJVF9TVFJFVENIX0dGWCAoMTw8MikKKworLyogUFdNIGZyZXF1ZW5jeSBhbmQgbWluaW11bSBicmlnaHRuZXNzICovCisjZGVmaW5lIEFTTEVfUEZNQl9CUklHSFRORVNTX01BU0sgKDB4ZmYpCisjZGVmaW5lIEFTTEVfUEZNQl9CUklHSFRORVNTX1ZBTElEICgxPDw4KQorI2RlZmluZSBBU0xFX1BGTUJfUFdNX01BU0sgKDB4N2ZmZmZlMDApCisjZGVmaW5lIEFTTEVfUEZNQl9QV01fVkFMSUQgKDE8PDMxKQorCisjZGVmaW5lIEFTTEVfQ0JMVl9WQUxJRCAgICAgICAgICgxPDwzMSkKKworc3RhdGljIHUzMiBhc2xlX3NldF9iYWNrbGlnaHQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdTMyIGJjbHApCit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3Qgb3ByZWdpb25fYXNsZSAqYXNsZSA9IGRldl9wcml2LT5vcHJlZ2lvbi5hc2xlOworCXUzMiBibGNfcHdtX2N0bCwgYmxjX3B3bV9jdGwyOworCisJaWYgKCEoYmNscCAmIEFTTEVfQkNMUF9WQUxJRCkpCisJCXJldHVybiBBU0xFX0JBQ0tMSUdIVF9GQUlMOworCisJYmNscCAmPSBBU0xFX0JDTFBfTVNLOworCWlmIChiY2xwIDwgMCB8fCBiY2xwID4gMjU1KQorCQlyZXR1cm4gQVNMRV9CQUNLTElHSFRfRkFJTDsKKworCWJsY19wd21fY3RsID0gSTkxNV9SRUFEKEJMQ19QV01fQ1RMKTsKKwlibGNfcHdtX2N0bCAmPSB+QkFDS0xJR0hUX0RVVFlfQ1lDTEVfTUFTSzsKKwlibGNfcHdtX2N0bDIgPSBJOTE1X1JFQUQoQkxDX1BXTV9DVEwyKTsKKworCWlmIChibGNfcHdtX2N0bDIgJiBCTE1fQ09NQklOQVRJT05fTU9ERSkKKwkJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChkZXYtPnBkZXYsIFBDSV9MQlBDLCBiY2xwKTsKKwllbHNlCisJCUk5MTVfV1JJVEUoQkxDX1BXTV9DVEwsIGJsY19wd21fY3RsIHwgKChiY2xwICogMHgxMDEpLTEpKTsKKworCWFzbGUtPmNibHYgPSAoYmNscCoweDY0KS8weGZmIHwgQVNMRV9DQkxWX1ZBTElEOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB1MzIgYXNsZV9zZXRfYWxzX2lsbHVtKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHUzMiBhbHNpKQoreworCS8qIGFsc2kgaXMgdGhlIGN1cnJlbnQgQUxTIHJlYWRpbmcgaW4gbHV4LiAwIGluZGljYXRlcyBiZWxvdyBzZW5zb3IKKwkgICByYW5nZSwgMHhmZmZmIGluZGljYXRlcyBhYm92ZSBzZW5zb3IgcmFuZ2UuIDEtMHhmZmZlIGFyZSB2YWxpZCAqLworCXJldHVybiAwOworfQorCitzdGF0aWMgdTMyIGFzbGVfc2V0X3B3bV9mcmVxKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHUzMiBwZm1iKQoreworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJaWYgKHBmbWIgJiBBU0xFX1BGTUJfUFdNX1ZBTElEKSB7CisJCXUzMiBibGNfcHdtX2N0bCA9IEk5MTVfUkVBRChCTENfUFdNX0NUTCk7CisJCXUzMiBwd20gPSBwZm1iICYgQVNMRV9QRk1CX1BXTV9NQVNLOworCQlibGNfcHdtX2N0bCAmPSBCQUNLTElHSFRfRFVUWV9DWUNMRV9NQVNLOworCQlwd20gPSBwd20gPj4gOTsKKwkJLyogRklYTUUgLSB3aGF0IGRvIHdlIGRvIHdpdGggdGhlIFBXTT8gKi8KKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB1MzIgYXNsZV9zZXRfcGZpdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB1MzIgcGZpdCkKK3sKKwkvKiBQYW5lbCBmaXR0aW5nIGlzIGN1cnJlbnRseSBjb250cm9sbGVkIGJ5IHRoZSBYIGNvZGUsIHNvIHRoaXMgaXMgYQorCSAgIG5vb3AgdW50aWwgbW9kZXNldHRpbmcgc3VwcG9ydCB3b3JrcyBmdWxseSAqLworCWlmICghKHBmaXQgJiBBU0xFX1BGSVRfVkFMSUQpKQorCQlyZXR1cm4gQVNMRV9QRklUX0ZBSUw7CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgb3ByZWdpb25fYXNsZV9pbnRyKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3Qgb3ByZWdpb25fYXNsZSAqYXNsZSA9IGRldl9wcml2LT5vcHJlZ2lvbi5hc2xlOworCXUzMiBhc2xlX3N0YXQgPSAwOworCXUzMiBhc2xlX3JlcTsKKworCWlmICghYXNsZSkKKwkJcmV0dXJuOworCisJYXNsZV9yZXEgPSBhc2xlLT5hc2xjICYgQVNMRV9SRVFfTVNLOworCisJaWYgKCFhc2xlX3JlcSkgeworCQlEUk1fREVCVUcoIm5vbiBhc2xlIHNldCByZXF1ZXN0Pz9cbiIpOworCQlyZXR1cm47CisJfQorCisJaWYgKGFzbGVfcmVxICYgQVNMRV9TRVRfQUxTX0lMTFVNKQorCQlhc2xlX3N0YXQgfD0gYXNsZV9zZXRfYWxzX2lsbHVtKGRldiwgYXNsZS0+YWxzaSk7CisKKwlpZiAoYXNsZV9yZXEgJiBBU0xFX1NFVF9CQUNLTElHSFQpCisJCWFzbGVfc3RhdCB8PSBhc2xlX3NldF9iYWNrbGlnaHQoZGV2LCBhc2xlLT5iY2xwKTsKKworCWlmIChhc2xlX3JlcSAmIEFTTEVfU0VUX1BGSVQpCisJCWFzbGVfc3RhdCB8PSBhc2xlX3NldF9wZml0KGRldiwgYXNsZS0+cGZpdCk7CisKKwlpZiAoYXNsZV9yZXEgJiBBU0xFX1NFVF9QV01fRlJFUSkKKwkJYXNsZV9zdGF0IHw9IGFzbGVfc2V0X3B3bV9mcmVxKGRldiwgYXNsZS0+cGZtYik7CisKKwlhc2xlLT5hc2xjID0gYXNsZV9zdGF0OworfQorCisjZGVmaW5lIEFTTEVfQUxTX0VOICAgICgxPDwwKQorI2RlZmluZSBBU0xFX0JMQ19FTiAgICAoMTw8MSkKKyNkZWZpbmUgQVNMRV9QRklUX0VOICAgKDE8PDIpCisjZGVmaW5lIEFTTEVfUEZNQl9FTiAgICgxPDwzKQorCit2b2lkIG9wcmVnaW9uX2VuYWJsZV9hc2xlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3Qgb3ByZWdpb25fYXNsZSAqYXNsZSA9IGRldl9wcml2LT5vcHJlZ2lvbi5hc2xlOworCisJaWYgKGFzbGUpIHsKKwkJdTMyIHBpcGViX3N0YXRzID0gSTkxNV9SRUFEKFBJUEVCU1RBVCk7CisJCWlmIChJU19NT0JJTEUoZGV2KSkgeworCQkJLyogTWFueSBkZXZpY2VzIHRyaWdnZXIgZXZlbnRzIHdpdGggYSB3cml0ZSB0byB0aGUKKwkJCSAgIGxlZ2FjeSBiYWNrbGlnaHQgY29udHJvbGxlciwgc28gd2UgbmVlZCB0byBlbnN1cmUKKwkJCSAgIHRoYXQgaXQncyBhYmxlIHRvIGdlbmVyYXRlIGludGVycnVwdHMgKi8KKwkJCUk5MTVfV1JJVEUoUElQRUJTVEFULCBwaXBlYl9zdGF0cyB8PQorCQkJCSAgIEk5MTVfTEVHQUNZX0JMQ19FVkVOVF9FTkFCTEUpOworCQkJaTkxNV9lbmFibGVfaXJxKGRldl9wcml2LCBJOTE1X0FTTEVfSU5URVJSVVBUIHwKKwkJCQkJSTkxNV9ESVNQTEFZX1BJUEVfQl9FVkVOVF9JTlRFUlJVUFQpOworCQl9IGVsc2UKKwkJCWk5MTVfZW5hYmxlX2lycShkZXZfcHJpdiwgSTkxNV9BU0xFX0lOVEVSUlVQVCk7CisKKwkJYXNsZS0+dGNoZSA9IEFTTEVfQUxTX0VOIHwgQVNMRV9CTENfRU4gfCBBU0xFX1BGSVRfRU4gfAorCQkJQVNMRV9QRk1CX0VOOworCQlhc2xlLT5hcmR5ID0gMTsKKwl9Cit9CisKKyNkZWZpbmUgQUNQSV9FVl9ESVNQTEFZX1NXSVRDSCAoMTw8MCkKKyNkZWZpbmUgQUNQSV9FVl9MSUQgICAgICAgICAgICAoMTw8MSkKKyNkZWZpbmUgQUNQSV9FVl9ET0NLICAgICAgICAgICAoMTw8MikKKworc3RhdGljIHN0cnVjdCBpbnRlbF9vcHJlZ2lvbiAqc3lzdGVtX29wcmVnaW9uOworCitpbnQgaW50ZWxfb3ByZWdpb25fdmlkZW9fZXZlbnQoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYiwgdW5zaWduZWQgbG9uZyB2YWwsCisJCQkgICAgICAgdm9pZCAqZGF0YSkKK3sKKwkvKiBUaGUgb25seSB2aWRlbyBldmVudHMgcmVsZXZhbnQgdG8gb3ByZWdpb24gYXJlIDB4ODAuIFRoZXNlIGluZGljYXRlCisJICAgZWl0aGVyIGEgZG9ja2luZyBldmVudCwgbGlkIHN3aXRjaCBvciBkaXNwbGF5IHN3aXRjaCByZXF1ZXN0LiBJbgorCSAgIExpbnV4LCB0aGVzZSBhcmUgaGFuZGxlZCBieSB0aGUgZG9jaywgYnV0dG9uIGFuZCB2aWRlbyBkcml2ZXJzLgorCSAgIFdlIG1pZ2h0IHdhbnQgdG8gZml4IHRoZSB2aWRlbyBkcml2ZXIgdG8gYmUgb3ByZWdpb24tYXdhcmUgaW4KKwkgICBmdXR1cmUsIGJ1dCByaWdodCBub3cgd2UganVzdCBpbmRpY2F0ZSB0byB0aGUgZmlybXdhcmUgdGhhdCB0aGUKKwkgICByZXF1ZXN0IGhhcyBiZWVuIGhhbmRsZWQgKi8KKworCXN0cnVjdCBvcHJlZ2lvbl9hY3BpICphY3BpOworCisJaWYgKCFzeXN0ZW1fb3ByZWdpb24pCisJCXJldHVybiBOT1RJRllfRE9ORTsKKworCWFjcGkgPSBzeXN0ZW1fb3ByZWdpb24tPmFjcGk7CisJYWNwaS0+Y3N0cyA9IDA7CisKKwlyZXR1cm4gTk9USUZZX09LOworfQorCitzdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIGludGVsX29wcmVnaW9uX25vdGlmaWVyID0geworCS5ub3RpZmllcl9jYWxsID0gaW50ZWxfb3ByZWdpb25fdmlkZW9fZXZlbnQsCit9OworCitpbnQgaW50ZWxfb3ByZWdpb25faW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQoreworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IGludGVsX29wcmVnaW9uICpvcHJlZ2lvbiA9ICZkZXZfcHJpdi0+b3ByZWdpb247CisJdm9pZCAqYmFzZTsKKwl1MzIgYXNscywgbWJveGVzOworCWludCBlcnIgPSAwOworCisJcGNpX3JlYWRfY29uZmlnX2R3b3JkKGRldi0+cGRldiwgUENJX0FTTFMsICZhc2xzKTsKKwlEUk1fREVCVUcoImdyYXBoaWMgb3ByZWdpb24gcGh5c2ljYWwgYWRkcjogMHgleFxuIiwgYXNscyk7CisJaWYgKGFzbHMgPT0gMCkgeworCQlEUk1fREVCVUcoIkFDUEkgT3BSZWdpb24gbm90IHN1cHBvcnRlZCFcbiIpOworCQlyZXR1cm4gLUVOT1RTVVBQOworCX0KKworCWJhc2UgPSBpb3JlbWFwKGFzbHMsIE9QUkVHSU9OX1NaKTsKKwlpZiAoIWJhc2UpCisJCXJldHVybiAtRU5PTUVNOworCisJb3ByZWdpb24tPmhlYWRlciA9IGJhc2U7CisJaWYgKG1lbWNtcChvcHJlZ2lvbi0+aGVhZGVyLT5zaWduYXR1cmUsIE9QUkVHSU9OX1NJR05BVFVSRSwgMTYpKSB7CisJCURSTV9ERUJVRygib3ByZWdpb24gc2lnbmF0dXJlIG1pc21hdGNoXG4iKTsKKwkJZXJyID0gLUVJTlZBTDsKKwkJZ290byBlcnJfb3V0OworCX0KKworCW1ib3hlcyA9IG9wcmVnaW9uLT5oZWFkZXItPm1ib3hlczsKKwlpZiAobWJveGVzICYgTUJPWF9BQ1BJKSB7CisJCURSTV9ERUJVRygiUHVibGljIEFDUEkgbWV0aG9kcyBzdXBwb3J0ZWRcbiIpOworCQlvcHJlZ2lvbi0+YWNwaSA9IGJhc2UgKyBPUFJFR0lPTl9BQ1BJX09GRlNFVDsKKwl9IGVsc2UgeworCQlEUk1fREVCVUcoIlB1YmxpYyBBQ1BJIG1ldGhvZHMgbm90IHN1cHBvcnRlZFxuIik7CisJCWVyciA9IC1FTk9UU1VQUDsKKwkJZ290byBlcnJfb3V0OworCX0KKwlvcHJlZ2lvbi0+ZW5hYmxlZCA9IDE7CisKKwlpZiAobWJveGVzICYgTUJPWF9TV1NDSSkgeworCQlEUk1fREVCVUcoIlNXU0NJIHN1cHBvcnRlZFxuIik7CisJCW9wcmVnaW9uLT5zd3NjaSA9IGJhc2UgKyBPUFJFR0lPTl9TV1NDSV9PRkZTRVQ7CisJfQorCWlmIChtYm94ZXMgJiBNQk9YX0FTTEUpIHsKKwkJRFJNX0RFQlVHKCJBU0xFIHN1cHBvcnRlZFxuIik7CisJCW9wcmVnaW9uLT5hc2xlID0gYmFzZSArIE9QUkVHSU9OX0FTTEVfT0ZGU0VUOworCX0KKworCS8qIE5vdGlmeSBCSU9TIHdlIGFyZSByZWFkeSB0byBoYW5kbGUgQUNQSSB2aWRlbyBleHQgbm90aWZzLgorCSAqIFJpZ2h0IG5vdywgYWxsIHRoZSBldmVudHMgYXJlIGhhbmRsZWQgYnkgdGhlIEFDUEkgdmlkZW8gbW9kdWxlLgorCSAqIFdlIGRvbid0IGFjdHVhbGx5IG5lZWQgdG8gZG8gYW55dGhpbmcgd2l0aCB0aGVtLiAqLworCW9wcmVnaW9uLT5hY3BpLT5jc3RzID0gMDsKKwlvcHJlZ2lvbi0+YWNwaS0+ZHJkeSA9IDE7CisKKwlzeXN0ZW1fb3ByZWdpb24gPSBvcHJlZ2lvbjsKKwlyZWdpc3Rlcl9hY3BpX25vdGlmaWVyKCZpbnRlbF9vcHJlZ2lvbl9ub3RpZmllcik7CisKKwlyZXR1cm4gMDsKKworZXJyX291dDoKKwlpb3VubWFwKG9wcmVnaW9uLT5oZWFkZXIpOworCW9wcmVnaW9uLT5oZWFkZXIgPSBOVUxMOworCXJldHVybiBlcnI7Cit9CisKK3ZvaWQgaW50ZWxfb3ByZWdpb25fZnJlZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQoreworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IGludGVsX29wcmVnaW9uICpvcHJlZ2lvbiA9ICZkZXZfcHJpdi0+b3ByZWdpb247CisKKwlpZiAoIW9wcmVnaW9uLT5lbmFibGVkKQorCQlyZXR1cm47CisKKwlvcHJlZ2lvbi0+YWNwaS0+ZHJkeSA9IDA7CisKKwlzeXN0ZW1fb3ByZWdpb24gPSBOVUxMOworCXVucmVnaXN0ZXJfYWNwaV9ub3RpZmllcigmaW50ZWxfb3ByZWdpb25fbm90aWZpZXIpOworCisJLyoganVzdCBjbGVhciBhbGwgb3ByZWdpb24gbWVtb3J5IHBvaW50ZXJzIG5vdyAqLworCWlvdW5tYXAob3ByZWdpb24tPmhlYWRlcik7CisJb3ByZWdpb24tPmhlYWRlciA9IE5VTEw7CisJb3ByZWdpb24tPmFjcGkgPSBOVUxMOworCW9wcmVnaW9uLT5zd3NjaSA9IE5VTEw7CisJb3ByZWdpb24tPmFzbGUgPSBOVUxMOworCisJb3ByZWdpb24tPmVuYWJsZWQgPSAwOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9yZWcuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcmVnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWMyZDlmMgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcmVnLmgKQEAgLTAsMCArMSwxNDE3IEBACisvKiBDb3B5cmlnaHQgMjAwMyBUdW5nc3RlbiBHcmFwaGljcywgSW5jLiwgQ2VkYXIgUGFyaywgVGV4YXMuCisgKiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsCisgKiBkaXN0cmlidXRlLCBzdWIgbGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvCisgKiBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8KKyAqIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5nIHRoZQorICogbmV4dCBwYXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMKKyAqIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUworICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OLUlORlJJTkdFTUVOVC4KKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRVTkdTVEVOIEdSQVBISUNTIEFORC9PUiBJVFMgU1VQUExJRVJTIEJFIExJQUJMRSBGT1IKKyAqIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULAorICogVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUKKyAqIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorICovCisKKyNpZm5kZWYgX0k5MTVfUkVHX0hfCisjZGVmaW5lIF9JOTE1X1JFR19IXworCisvKgorICogVGhlIEJyaWRnZSBkZXZpY2UncyBQQ0kgY29uZmlnIHNwYWNlIGhhcyBpbmZvcm1hdGlvbiBhYm91dCB0aGUKKyAqIGZiIGFwZXJ0dXJlIHNpemUgYW5kIHRoZSBhbW91bnQgb2YgcHJlLXJlc2VydmVkIG1lbW9yeS4KKyAqLworI2RlZmluZSBJTlRFTF9HTUNIX0NUUkwJCTB4NTIKKyNkZWZpbmUgSU5URUxfR01DSF9FTkFCTEVECTB4NAorI2RlZmluZSBJTlRFTF9HTUNIX01FTV9NQVNLCTB4MQorI2RlZmluZSBJTlRFTF9HTUNIX01FTV82NE0JMHgxCisjZGVmaW5lIElOVEVMX0dNQ0hfTUVNXzEyOE0JMAorCisjZGVmaW5lIElOVEVMXzg1NV9HTUNIX0dNU19NQVNLCQkoMHg3IDw8IDQpCisjZGVmaW5lIElOVEVMXzg1NV9HTUNIX0dNU19ESVNBQkxFRAkoMHgwIDw8IDQpCisjZGVmaW5lIElOVEVMXzg1NV9HTUNIX0dNU19TVE9MRU5fMU0JKDB4MSA8PCA0KQorI2RlZmluZSBJTlRFTF84NTVfR01DSF9HTVNfU1RPTEVOXzRNCSgweDIgPDwgNCkKKyNkZWZpbmUgSU5URUxfODU1X0dNQ0hfR01TX1NUT0xFTl84TQkoMHgzIDw8IDQpCisjZGVmaW5lIElOVEVMXzg1NV9HTUNIX0dNU19TVE9MRU5fMTZNCSgweDQgPDwgNCkKKyNkZWZpbmUgSU5URUxfODU1X0dNQ0hfR01TX1NUT0xFTl8zMk0JKDB4NSA8PCA0KQorCisjZGVmaW5lIElOVEVMXzkxNUdfR01DSF9HTVNfU1RPTEVOXzQ4TQkoMHg2IDw8IDQpCisjZGVmaW5lIElOVEVMXzkxNUdfR01DSF9HTVNfU1RPTEVOXzY0TQkoMHg3IDw8IDQpCisKKy8qIFBDSSBjb25maWcgc3BhY2UgKi8KKworI2RlZmluZSBIUExMQ0MJMHhjMCAvKiA4NTUgb25seSAqLworI2RlZmluZSAgIEdDX0NMT0NLX0NPTlRST0xfTUFTSwkJKDMgPDwgMCkKKyNkZWZpbmUgICBHQ19DTE9DS18xMzNfMjAwCQkoMCA8PCAwKQorI2RlZmluZSAgIEdDX0NMT0NLXzEwMF8yMDAJCSgxIDw8IDApCisjZGVmaW5lICAgR0NfQ0xPQ0tfMTAwXzEzMwkJKDIgPDwgMCkKKyNkZWZpbmUgICBHQ19DTE9DS18xNjZfMjUwCQkoMyA8PCAwKQorI2RlZmluZSBHQ0ZHQwkweGYwIC8qIDkxNSsgb25seSAqLworI2RlZmluZSAgIEdDX0xPV19GUkVRVUVOQ1lfRU5BQkxFCSgxIDw8IDcpCisjZGVmaW5lICAgR0NfRElTUExBWV9DTE9DS18xOTBfMjAwX01IWgkoMCA8PCA0KQorI2RlZmluZSAgIEdDX0RJU1BMQVlfQ0xPQ0tfMzMzX01IWgkoNCA8PCA0KQorI2RlZmluZSAgIEdDX0RJU1BMQVlfQ0xPQ0tfTUFTSwkJKDcgPDwgNCkKKyNkZWZpbmUgTEJCCTB4ZjQKKworLyogVkdBIHN0dWZmICovCisKKyNkZWZpbmUgVkdBX1NUMDFfTURBIDB4M2JhCisjZGVmaW5lIFZHQV9TVDAxX0NHQSAweDNkYQorCisjZGVmaW5lIFZHQV9NU1JfV1JJVEUgMHgzYzIKKyNkZWZpbmUgVkdBX01TUl9SRUFEIDB4M2NjCisjZGVmaW5lICAgVkdBX01TUl9NRU1fRU4gKDE8PDEpCisjZGVmaW5lICAgVkdBX01TUl9DR0FfTU9ERSAoMTw8MCkKKworI2RlZmluZSBWR0FfU1JfSU5ERVggMHgzYzQKKyNkZWZpbmUgVkdBX1NSX0RBVEEgMHgzYzUKKworI2RlZmluZSBWR0FfQVJfSU5ERVggMHgzYzAKKyNkZWZpbmUgICBWR0FfQVJfVklEX0VOICgxPDw1KQorI2RlZmluZSBWR0FfQVJfREFUQV9XUklURSAweDNjMAorI2RlZmluZSBWR0FfQVJfREFUQV9SRUFEIDB4M2MxCisKKyNkZWZpbmUgVkdBX0dSX0lOREVYIDB4M2NlCisjZGVmaW5lIFZHQV9HUl9EQVRBIDB4M2NmCisvKiBHUjA1ICovCisjZGVmaW5lICAgVkdBX0dSX01FTV9SRUFEX01PREVfU0hJRlQgMworI2RlZmluZSAgICAgVkdBX0dSX01FTV9SRUFEX01PREVfUExBTkUgMQorLyogR1IwNiAqLworI2RlZmluZSAgIFZHQV9HUl9NRU1fTU9ERV9NQVNLIDB4YworI2RlZmluZSAgIFZHQV9HUl9NRU1fTU9ERV9TSElGVCAyCisjZGVmaW5lICAgVkdBX0dSX01FTV9BMDAwMF9BRkZGRiAwCisjZGVmaW5lICAgVkdBX0dSX01FTV9BMDAwMF9CRkZGRiAxCisjZGVmaW5lICAgVkdBX0dSX01FTV9CMDAwMF9CN0ZGRiAyCisjZGVmaW5lICAgVkdBX0dSX01FTV9CMDAwMF9CRkZGRiAzCisKKyNkZWZpbmUgVkdBX0RBQ01BU0sgMHgzYzYKKyNkZWZpbmUgVkdBX0RBQ1JYIDB4M2M3CisjZGVmaW5lIFZHQV9EQUNXWCAweDNjOAorI2RlZmluZSBWR0FfREFDREFUQSAweDNjOQorCisjZGVmaW5lIFZHQV9DUl9JTkRFWF9NREEgMHgzYjQKKyNkZWZpbmUgVkdBX0NSX0RBVEFfTURBIDB4M2I1CisjZGVmaW5lIFZHQV9DUl9JTkRFWF9DR0EgMHgzZDQKKyNkZWZpbmUgVkdBX0NSX0RBVEFfQ0dBIDB4M2Q1CisKKy8qCisgKiBNZW1vcnkgaW50ZXJmYWNlIGluc3RydWN0aW9ucyB1c2VkIGJ5IHRoZSBrZXJuZWwKKyAqLworI2RlZmluZSBNSV9JTlNUUihvcGNvZGUsIGZsYWdzKSAoKChvcGNvZGUpIDw8IDIzKSB8IChmbGFncykpCisKKyNkZWZpbmUgTUlfTk9PUAkJCU1JX0lOU1RSKDAsIDApCisjZGVmaW5lIE1JX1VTRVJfSU5URVJSVVBUCU1JX0lOU1RSKDB4MDIsIDApCisjZGVmaW5lIE1JX1dBSVRfRk9SX0VWRU5UICAgICAgIE1JX0lOU1RSKDB4MDMsIDApCisjZGVmaW5lICAgTUlfV0FJVF9GT1JfUExBTkVfQl9GTElQICAgICAgKDE8PDYpCisjZGVmaW5lICAgTUlfV0FJVF9GT1JfUExBTkVfQV9GTElQICAgICAgKDE8PDIpCisjZGVmaW5lICAgTUlfV0FJVF9GT1JfUExBTkVfQV9TQ0FOTElORVMgKDE8PDEpCisjZGVmaW5lIE1JX0ZMVVNICQlNSV9JTlNUUigweDA0LCAwKQorI2RlZmluZSAgIE1JX1JFQURfRkxVU0gJCSgxIDw8IDApCisjZGVmaW5lICAgTUlfRVhFX0ZMVVNICQkoMSA8PCAxKQorI2RlZmluZSAgIE1JX05PX1dSSVRFX0ZMVVNICSgxIDw8IDIpCisjZGVmaW5lICAgTUlfU0NFTkVfQ09VTlQJKDEgPDwgMykgLyoganVzdCBpbmNyZW1lbnQgc2NlbmUgY291bnQgKi8KKyNkZWZpbmUgICBNSV9FTkRfU0NFTkUJCSgxIDw8IDQpIC8qIGZsdXNoIGJpbm5lciBhbmQgaW5jciBzY2VuZSBjb3VudCAqLworI2RlZmluZSBNSV9CQVRDSF9CVUZGRVJfRU5ECU1JX0lOU1RSKDB4MGEsIDApCisjZGVmaW5lIE1JX1JFUE9SVF9IRUFECQlNSV9JTlNUUigweDA3LCAwKQorI2RlZmluZSBNSV9MT0FEX1NDQU5fTElORVNfSU5DTCBNSV9JTlNUUigweDEyLCAwKQorI2RlZmluZSBNSV9TVE9SRV9EV09SRF9JTU0JTUlfSU5TVFIoMHgyMCwgMSkKKyNkZWZpbmUgICBNSV9NRU1fVklSVFVBTAkoMSA8PCAyMikgLyogOTY1KyBvbmx5ICovCisjZGVmaW5lIE1JX1NUT1JFX0RXT1JEX0lOREVYCU1JX0lOU1RSKDB4MjEsIDEpCisjZGVmaW5lICAgTUlfU1RPUkVfRFdPUkRfSU5ERVhfU0hJRlQgMgorI2RlZmluZSBNSV9MT0FEX1JFR0lTVEVSX0lNTQlNSV9JTlNUUigweDIyLCAxKQorI2RlZmluZSBNSV9CQVRDSF9CVUZGRVIJCU1JX0lOU1RSKDB4MzAsIDEpCisjZGVmaW5lICAgTUlfQkFUQ0hfTk9OX1NFQ1VSRQkoMSkKKyNkZWZpbmUgICBNSV9CQVRDSF9OT05fU0VDVVJFX0k5NjUgKDE8PDgpCisjZGVmaW5lIE1JX0JBVENIX0JVRkZFUl9TVEFSVAlNSV9JTlNUUigweDMxLCAwKQorCisvKgorICogM0QgaW5zdHJ1Y3Rpb25zIHVzZWQgYnkgdGhlIGtlcm5lbAorICovCisjZGVmaW5lIEdGWF9JTlNUUihvcGNvZGUsIGZsYWdzKSAoKDB4MyA8PCAyOSkgfCAoKG9wY29kZSkgPDwgMjQpIHwgKGZsYWdzKSkKKworI2RlZmluZSBHRlhfT1BfUkFTVEVSX1JVTEVTICAgICgoMHgzPDwyOSl8KDB4Nzw8MjQpKQorI2RlZmluZSBHRlhfT1BfU0NJU1NPUiAgICAgICAgICgoMHgzPDwyOSl8KDB4MWM8PDI0KXwoMHgxMDw8MTkpKQorI2RlZmluZSAgIFNDX1VQREFURV9TQ0lTU09SICAgICAgICgweDE8PDEpCisjZGVmaW5lICAgU0NfRU5BQkxFX01BU0sgICAgICAgICAgKDB4MTw8MCkKKyNkZWZpbmUgICBTQ19FTkFCTEUgICAgICAgICAgICAgICAoMHgxPDwwKQorI2RlZmluZSBHRlhfT1BfTE9BRF9JTkRJUkVDVCAgICgoMHgzPDwyOSl8KDB4MWQ8PDI0KXwoMHg3PDwxNikpCisjZGVmaW5lIEdGWF9PUF9TQ0lTU09SX0lORk8gICAgKCgweDM8PDI5KXwoMHgxZDw8MjQpfCgweDgxPDwxNil8KDB4MSkpCisjZGVmaW5lICAgU0NJX1lNSU5fTUFTSyAgICAgICgweGZmZmY8PDE2KQorI2RlZmluZSAgIFNDSV9YTUlOX01BU0sgICAgICAoMHhmZmZmPDwwKQorI2RlZmluZSAgIFNDSV9ZTUFYX01BU0sgICAgICAoMHhmZmZmPDwxNikKKyNkZWZpbmUgICBTQ0lfWE1BWF9NQVNLICAgICAgKDB4ZmZmZjw8MCkKKyNkZWZpbmUgR0ZYX09QX1NDSVNTT1JfRU5BQkxFCSAoKDB4Mzw8MjkpfCgweDFjPDwyNCl8KDB4MTA8PDE5KSkKKyNkZWZpbmUgR0ZYX09QX1NDSVNTT1JfUkVDVAkgKCgweDM8PDI5KXwoMHgxZDw8MjQpfCgweDgxPDwxNil8MSkKKyNkZWZpbmUgR0ZYX09QX0NPTE9SX0ZBQ1RPUiAgICAgICgoMHgzPDwyOSl8KDB4MWQ8PDI0KXwoMHgxPDwxNil8MHgwKQorI2RlZmluZSBHRlhfT1BfU1RJUFBMRSAgICAgICAgICAgKCgweDM8PDI5KXwoMHgxZDw8MjQpfCgweDgzPDwxNikpCisjZGVmaW5lIEdGWF9PUF9NQVBfSU5GTyAgICAgICAgICAoKDB4Mzw8MjkpfCgweDFkPDwyNCl8MHg0KQorI2RlZmluZSBHRlhfT1BfREVTVEJVRkZFUl9WQVJTICAgKCgweDM8PDI5KXwoMHgxZDw8MjQpfCgweDg1PDwxNil8MHgwKQorI2RlZmluZSBHRlhfT1BfREVTVEJVRkZFUl9JTkZPCSAoKDB4Mzw8MjkpfCgweDFkPDwyNCl8KDB4OGU8PDE2KXwxKQorI2RlZmluZSBHRlhfT1BfRFJBV1JFQ1RfSU5GTyAgICAgKCgweDM8PDI5KXwoMHgxZDw8MjQpfCgweDgwPDwxNil8KDB4MykpCisjZGVmaW5lIEdGWF9PUF9EUkFXUkVDVF9JTkZPX0k5NjUgICgoMHg3OTAwPDwxNil8MHgyKQorI2RlZmluZSBTUkNfQ09QWV9CTFRfQ01EICAgICAgICAgICAgICAgICgoMjw8MjkpfCgweDQzPDwyMil8NCkKKyNkZWZpbmUgWFlfU1JDX0NPUFlfQkxUX0NNRAkJKCgyPDwyOSl8KDB4NTM8PDIyKXw2KQorI2RlZmluZSBYWV9NT05PX1NSQ19DT1BZX0lNTV9CTFQJKCgyPDwyOSl8KDB4NzE8PDIyKXw1KQorI2RlZmluZSBYWV9TUkNfQ09QWV9CTFRfV1JJVEVfQUxQSEEJKDE8PDIxKQorI2RlZmluZSBYWV9TUkNfQ09QWV9CTFRfV1JJVEVfUkdCCSgxPDwyMCkKKyNkZWZpbmUgICBCTFRfREVQVEhfOAkJCSgwPDwyNCkKKyNkZWZpbmUgICBCTFRfREVQVEhfMTZfNTY1CQkoMTw8MjQpCisjZGVmaW5lICAgQkxUX0RFUFRIXzE2XzE1NTUJCSgyPDwyNCkKKyNkZWZpbmUgICBCTFRfREVQVEhfMzIJCQkoMzw8MjQpCisjZGVmaW5lICAgQkxUX1JPUF9HWENPUFkJCSgweGNjPDwxNikKKyNkZWZpbmUgWFlfU1JDX0NPUFlfQkxUX1NSQ19USUxFRAkoMTw8MTUpIC8qIDk2NSsgb25seSAqLworI2RlZmluZSBYWV9TUkNfQ09QWV9CTFRfRFNUX1RJTEVECSgxPDwxMSkgLyogOTY1KyBvbmx5ICovCisjZGVmaW5lIENNRF9PUF9ESVNQTEFZQlVGRkVSX0lORk8gKCgweDA8PDI5KXwoMHgxNDw8MjMpfDIpCisjZGVmaW5lICAgQVNZTkNfRkxJUCAgICAgICAgICAgICAgICAoMTw8MjIpCisjZGVmaW5lICAgRElTUExBWV9QTEFORV9BICAgICAgICAgICAoMDw8MjApCisjZGVmaW5lICAgRElTUExBWV9QTEFORV9CICAgICAgICAgICAoMTw8MjApCisKKy8qCisgKiBJbnN0cnVjdGlvbiBhbmQgaW50ZXJydXB0IGNvbnRyb2wgcmVncworICovCisKKyNkZWZpbmUgUFJCMF9UQUlMCTB4MDIwMzAKKyNkZWZpbmUgUFJCMF9IRUFECTB4MDIwMzQKKyNkZWZpbmUgUFJCMF9TVEFSVAkweDAyMDM4CisjZGVmaW5lIFBSQjBfQ1RMCTB4MDIwM2MKKyNkZWZpbmUgICBUQUlMX0FERFIJCTB4MDAxRkZGRjgKKyNkZWZpbmUgICBIRUFEX1dSQVBfQ09VTlQJMHhGRkUwMDAwMAorI2RlZmluZSAgIEhFQURfV1JBUF9PTkUJCTB4MDAyMDAwMDAKKyNkZWZpbmUgICBIRUFEX0FERFIJCTB4MDAxRkZGRkMKKyNkZWZpbmUgICBSSU5HX05SX1BBR0VTCQkweDAwMUZGMDAwCisjZGVmaW5lICAgUklOR19SRVBPUlRfTUFTSwkweDAwMDAwMDA2CisjZGVmaW5lICAgUklOR19SRVBPUlRfNjRLCTB4MDAwMDAwMDIKKyNkZWZpbmUgICBSSU5HX1JFUE9SVF8xMjhLCTB4MDAwMDAwMDQKKyNkZWZpbmUgICBSSU5HX05PX1JFUE9SVAkweDAwMDAwMDAwCisjZGVmaW5lICAgUklOR19WQUxJRF9NQVNLCTB4MDAwMDAwMDEKKyNkZWZpbmUgICBSSU5HX1ZBTElECQkweDAwMDAwMDAxCisjZGVmaW5lICAgUklOR19JTlZBTElECQkweDAwMDAwMDAwCisjZGVmaW5lIFBSQjFfVEFJTAkweDAyMDQwIC8qIDkxNSsgb25seSAqLworI2RlZmluZSBQUkIxX0hFQUQJMHgwMjA0NCAvKiA5MTUrIG9ubHkgKi8KKyNkZWZpbmUgUFJCMV9TVEFSVAkweDAyMDQ4IC8qIDkxNSsgb25seSAqLworI2RlZmluZSBQUkIxX0NUTAkweDAyMDRjIC8qIDkxNSsgb25seSAqLworI2RlZmluZSBBQ1RIRF9JOTY1CTB4MDIwNzQKKyNkZWZpbmUgSFdTX1BHQQkJMHgwMjA4MAorI2RlZmluZSBIV1NfQUREUkVTU19NQVNLCTB4ZmZmZmYwMDAKKyNkZWZpbmUgSFdTX1NUQVJUX0FERFJFU1NfU0hJRlQJNAorI2RlZmluZSBJUEVJUgkJMHgwMjA4OAorI2RlZmluZSBOT1BJRAkJMHgwMjA5NAorI2RlZmluZSBIV1NUQU0JCTB4MDIwOTgKKyNkZWZpbmUgU0NQRDAJCTB4MDIwOWMgLyogOTE1KyBvbmx5ICovCisjZGVmaW5lIElFUgkJMHgwMjBhMAorI2RlZmluZSBJSVIJCTB4MDIwYTQKKyNkZWZpbmUgSU1SCQkweDAyMGE4CisjZGVmaW5lIElTUgkJMHgwMjBhYworI2RlZmluZSAgIEk5MTVfUElQRV9DT05UUk9MX05PVElGWV9JTlRFUlJVUFQJCSgxPDwxOCkKKyNkZWZpbmUgICBJOTE1X0RJU1BMQVlfUE9SVF9JTlRFUlJVUFQJCQkoMTw8MTcpCisjZGVmaW5lICAgSTkxNV9SRU5ERVJfQ09NTUFORF9QQVJTRVJfRVJST1JfSU5URVJSVVBUCSgxPDwxNSkKKyNkZWZpbmUgICBJOTE1X0dNQ0hfVEhFUk1BTF9TRU5TT1JfRVZFTlRfSU5URVJSVVBUCSgxPDwxNCkKKyNkZWZpbmUgICBJOTE1X0hXQl9PT01fSU5URVJSVVBUCQkJKDE8PDEzKQorI2RlZmluZSAgIEk5MTVfU1lOQ19TVEFUVVNfSU5URVJSVVBUCQkJKDE8PDEyKQorI2RlZmluZSAgIEk5MTVfRElTUExBWV9QTEFORV9BX0ZMSVBfUEVORElOR19JTlRFUlJVUFQJKDE8PDExKQorI2RlZmluZSAgIEk5MTVfRElTUExBWV9QTEFORV9CX0ZMSVBfUEVORElOR19JTlRFUlJVUFQJKDE8PDEwKQorI2RlZmluZSAgIEk5MTVfT1ZFUkxBWV9QTEFORV9GTElQX1BFTkRJTkdfSU5URVJSVVBUCSgxPDw5KQorI2RlZmluZSAgIEk5MTVfRElTUExBWV9QTEFORV9DX0ZMSVBfUEVORElOR19JTlRFUlJVUFQJKDE8PDgpCisjZGVmaW5lICAgSTkxNV9ESVNQTEFZX1BJUEVfQV9WQkxBTktfSU5URVJSVVBUCQkoMTw8NykKKyNkZWZpbmUgICBJOTE1X0RJU1BMQVlfUElQRV9BX0VWRU5UX0lOVEVSUlVQVAkJKDE8PDYpCisjZGVmaW5lICAgSTkxNV9ESVNQTEFZX1BJUEVfQl9WQkxBTktfSU5URVJSVVBUCQkoMTw8NSkKKyNkZWZpbmUgICBJOTE1X0RJU1BMQVlfUElQRV9CX0VWRU5UX0lOVEVSUlVQVAkJKDE8PDQpCisjZGVmaW5lICAgSTkxNV9ERUJVR19JTlRFUlJVUFQJCQkJKDE8PDIpCisjZGVmaW5lICAgSTkxNV9VU0VSX0lOVEVSUlVQVAkJCQkoMTw8MSkKKyNkZWZpbmUgICBJOTE1X0FTTEVfSU5URVJSVVBUCQkJCSgxPDwwKQorI2RlZmluZSBFSVIJCTB4MDIwYjAKKyNkZWZpbmUgRU1SCQkweDAyMGI0CisjZGVmaW5lIEVTUgkJMHgwMjBiOAorI2RlZmluZSBJTlNUUE0JICAgICAgICAweDAyMGMwCisjZGVmaW5lIEFDVEhECSAgICAgICAgMHgwMjBjOAorI2RlZmluZSBGV19CTEMJCTB4MDIwZDgKKyNkZWZpbmUgRldfQkxDX1NFTEYJMHgwMjBlMCAvKiA5MTUrIG9ubHkgKi8KKyNkZWZpbmUgTUlfQVJCX1NUQVRFCTB4MDIwZTQgLyogOTE1KyBvbmx5ICovCisjZGVmaW5lIENBQ0hFX01PREVfMAkweDAyMTIwIC8qIDkxNSsgb25seSAqLworI2RlZmluZSAgIENNMF9NQVNLX1NISUZUICAgICAgICAgIDE2CisjZGVmaW5lICAgQ00wX0laX09QVF9ESVNBQkxFICAgICAgKDE8PDYpCisjZGVmaW5lICAgQ00wX1pSX09QVF9ESVNBQkxFICAgICAgKDE8PDUpCisjZGVmaW5lICAgQ00wX0RFUFRIX0VWSUNUX0RJU0FCTEUgKDE8PDQpCisjZGVmaW5lICAgQ00wX0NPTE9SX0VWSUNUX0RJU0FCTEUgKDE8PDMpCisjZGVmaW5lICAgQ00wX0RFUFRIX1dSSVRFX0RJU0FCTEUgKDE8PDEpCisjZGVmaW5lICAgQ00wX1JDX09QX0ZMVVNIX0RJU0FCTEUgKDE8PDApCisjZGVmaW5lIEdGWF9GTFNIX0NOVEwJMHgwMjE3MCAvKiA5MTUrIG9ubHkgKi8KKworLyoKKyAqIEZyYW1lYnVmZmVyIGNvbXByZXNzaW9uICg5MTUrIG9ubHkpCisgKi8KKworI2RlZmluZSBGQkNfQ0ZCX0JBU0UJCTB4MDMyMDAgLyogNGsgcGFnZSBhbGlnbmVkICovCisjZGVmaW5lIEZCQ19MTF9CQVNFCQkweDAzMjA0IC8qIDRrIHBhZ2UgYWxpZ25lZCAqLworI2RlZmluZSBGQkNfQ09OVFJPTAkJMHgwMzIwOAorI2RlZmluZSAgIEZCQ19DVExfRU4JCSgxPDwzMSkKKyNkZWZpbmUgICBGQkNfQ1RMX1BFUklPRElDCSgxPDwzMCkKKyNkZWZpbmUgICBGQkNfQ1RMX0lOVEVSVkFMX1NISUZUICgxNikKKyNkZWZpbmUgICBGQkNfQ1RMX1VOQ09NUFJFU1NJQkxFICgxPDwxNCkKKyNkZWZpbmUgICBGQkNfQ1RMX1NUUklERV9TSElGVAkoNSkKKyNkZWZpbmUgICBGQkNfQ1RMX0ZFTkNFTk8JKDE8PDApCisjZGVmaW5lIEZCQ19DT01NQU5ECQkweDAzMjBjCisjZGVmaW5lICAgRkJDX0NNRF9DT01QUkVTUwkoMTw8MCkKKyNkZWZpbmUgRkJDX1NUQVRVUwkJMHgwMzIxMAorI2RlZmluZSAgIEZCQ19TVEFUX0NPTVBSRVNTSU5HCSgxPDwzMSkKKyNkZWZpbmUgICBGQkNfU1RBVF9DT01QUkVTU0VECSgxPDwzMCkKKyNkZWZpbmUgICBGQkNfU1RBVF9NT0RJRklFRAkoMTw8MjkpCisjZGVmaW5lICAgRkJDX1NUQVRfQ1VSUkVOVF9MSU5FCSgxPDwwKQorI2RlZmluZSBGQkNfQ09OVFJPTDIJCTB4MDMyMTQKKyNkZWZpbmUgICBGQkNfQ1RMX0ZFTkNFX0RCTAkoMDw8NCkKKyNkZWZpbmUgICBGQkNfQ1RMX0lETEVfSU1NCSgwPDwyKQorI2RlZmluZSAgIEZCQ19DVExfSURMRV9GVUxMCSgxPDwyKQorI2RlZmluZSAgIEZCQ19DVExfSURMRV9MSU5FCSgyPDwyKQorI2RlZmluZSAgIEZCQ19DVExfSURMRV9ERUJVRwkoMzw8MikKKyNkZWZpbmUgICBGQkNfQ1RMX0NQVV9GRU5DRQkoMTw8MSkKKyNkZWZpbmUgICBGQkNfQ1RMX1BMQU5FQQkoMDw8MCkKKyNkZWZpbmUgICBGQkNfQ1RMX1BMQU5FQgkoMTw8MCkKKyNkZWZpbmUgRkJDX0ZFTkNFX09GRgkJMHgwMzIxYgorCisjZGVmaW5lIEZCQ19MTF9TSVpFCQkoMTUzNikKKworLyoKKyAqIEdQSU8gcmVncworICovCisjZGVmaW5lIEdQSU9BCQkJMHg1MDEwCisjZGVmaW5lIEdQSU9CCQkJMHg1MDE0CisjZGVmaW5lIEdQSU9DCQkJMHg1MDE4CisjZGVmaW5lIEdQSU9ECQkJMHg1MDFjCisjZGVmaW5lIEdQSU9FCQkJMHg1MDIwCisjZGVmaW5lIEdQSU9GCQkJMHg1MDI0CisjZGVmaW5lIEdQSU9HCQkJMHg1MDI4CisjZGVmaW5lIEdQSU9ICQkJMHg1MDJjCisjIGRlZmluZSBHUElPX0NMT0NLX0RJUl9NQVNLCQkoMSA8PCAwKQorIyBkZWZpbmUgR1BJT19DTE9DS19ESVJfSU4JCSgwIDw8IDEpCisjIGRlZmluZSBHUElPX0NMT0NLX0RJUl9PVVQJCSgxIDw8IDEpCisjIGRlZmluZSBHUElPX0NMT0NLX1ZBTF9NQVNLCQkoMSA8PCAyKQorIyBkZWZpbmUgR1BJT19DTE9DS19WQUxfT1VUCQkoMSA8PCAzKQorIyBkZWZpbmUgR1BJT19DTE9DS19WQUxfSU4JCSgxIDw8IDQpCisjIGRlZmluZSBHUElPX0NMT0NLX1BVTExVUF9ESVNBQkxFCSgxIDw8IDUpCisjIGRlZmluZSBHUElPX0RBVEFfRElSX01BU0sJCSgxIDw8IDgpCisjIGRlZmluZSBHUElPX0RBVEFfRElSX0lOCQkoMCA8PCA5KQorIyBkZWZpbmUgR1BJT19EQVRBX0RJUl9PVVQJCSgxIDw8IDkpCisjIGRlZmluZSBHUElPX0RBVEFfVkFMX01BU0sJCSgxIDw8IDEwKQorIyBkZWZpbmUgR1BJT19EQVRBX1ZBTF9PVVQJCSgxIDw8IDExKQorIyBkZWZpbmUgR1BJT19EQVRBX1ZBTF9JTgkJKDEgPDwgMTIpCisjIGRlZmluZSBHUElPX0RBVEFfUFVMTFVQX0RJU0FCTEUJKDEgPDwgMTMpCisKKy8qCisgKiBDbG9jayBjb250cm9sICYgcG93ZXIgbWFuYWdlbWVudAorICovCisKKyNkZWZpbmUgVkdBMAkweDYwMDAKKyNkZWZpbmUgVkdBMQkweDYwMDQKKyNkZWZpbmUgVkdBX1BECTB4NjAxMAorI2RlZmluZSAgIFZHQTBfUERfUDJfRElWXzQJKDEgPDwgNykKKyNkZWZpbmUgICBWR0EwX1BEX1AxX0RJVl8yCSgxIDw8IDUpCisjZGVmaW5lICAgVkdBMF9QRF9QMV9TSElGVAkwCisjZGVmaW5lICAgVkdBMF9QRF9QMV9NQVNLCSgweDFmIDw8IDApCisjZGVmaW5lICAgVkdBMV9QRF9QMl9ESVZfNAkoMSA8PCAxNSkKKyNkZWZpbmUgICBWR0ExX1BEX1AxX0RJVl8yCSgxIDw8IDEzKQorI2RlZmluZSAgIFZHQTFfUERfUDFfU0hJRlQJOAorI2RlZmluZSAgIFZHQTFfUERfUDFfTUFTSwkoMHgxZiA8PCA4KQorI2RlZmluZSBEUExMX0EJMHgwNjAxNAorI2RlZmluZSBEUExMX0IJMHgwNjAxOAorI2RlZmluZSAgIERQTExfVkNPX0VOQUJMRQkJKDEgPDwgMzEpCisjZGVmaW5lICAgRFBMTF9EVk9fSElHSF9TUEVFRAkJKDEgPDwgMzApCisjZGVmaW5lICAgRFBMTF9TWU5DTE9DS19FTkFCTEUJCSgxIDw8IDI5KQorI2RlZmluZSAgIERQTExfVkdBX01PREVfRElTCQkoMSA8PCAyOCkKKyNkZWZpbmUgICBEUExMQl9NT0RFX0RBQ19TRVJJQUwJCSgxIDw8IDI2KSAvKiBpOTE1ICovCisjZGVmaW5lICAgRFBMTEJfTU9ERV9MVkRTCQkoMiA8PCAyNikgLyogaTkxNSAqLworI2RlZmluZSAgIERQTExfTU9ERV9NQVNLCQkoMyA8PCAyNikKKyNkZWZpbmUgICBEUExMX0RBQ19TRVJJQUxfUDJfQ0xPQ0tfRElWXzEwICgwIDw8IDI0KSAvKiBpOTE1ICovCisjZGVmaW5lICAgRFBMTF9EQUNfU0VSSUFMX1AyX0NMT0NLX0RJVl81ICgxIDw8IDI0KSAvKiBpOTE1ICovCisjZGVmaW5lICAgRFBMTEJfTFZEU19QMl9DTE9DS19ESVZfMTQJKDAgPDwgMjQpIC8qIGk5MTUgKi8KKyNkZWZpbmUgICBEUExMQl9MVkRTX1AyX0NMT0NLX0RJVl83CSgxIDw8IDI0KSAvKiBpOTE1ICovCisjZGVmaW5lICAgRFBMTF9QMl9DTE9DS19ESVZfTUFTSwkweDAzMDAwMDAwIC8qIGk5MTUgKi8KKyNkZWZpbmUgICBEUExMX0ZQQTAxX1AxX1BPU1RfRElWX01BU0sJMHgwMGZmMDAwMCAvKiBpOTE1ICovCisKKyNkZWZpbmUgSTkxNV9GSUZPX1VOREVSUlVOX1NUQVRVUwkJKDFVTDw8MzEpCisjZGVmaW5lIEk5MTVfQ1JDX0VSUk9SX0VOQUJMRQkJCSgxVUw8PDI5KQorI2RlZmluZSBJOTE1X0NSQ19ET05FX0VOQUJMRQkJCSgxVUw8PDI4KQorI2RlZmluZSBJOTE1X0dNQlVTX0VWRU5UX0VOQUJMRQkJCSgxVUw8PDI3KQorI2RlZmluZSBJOTE1X1ZTWU5DX0lOVEVSUlVQVF9FTkFCTEUJCSgxVUw8PDI1KQorI2RlZmluZSBJOTE1X0RJU1BMQVlfTElORV9DT01QQVJFX0VOQUJMRQkoMVVMPDwyNCkKKyNkZWZpbmUgSTkxNV9EUFNUX0VWRU5UX0VOQUJMRQkJCSgxVUw8PDIzKQorI2RlZmluZSBJOTE1X0xFR0FDWV9CTENfRVZFTlRfRU5BQkxFCQkoMVVMPDwyMikKKyNkZWZpbmUgSTkxNV9PRERfRklFTERfSU5URVJSVVBUX0VOQUJMRQkJKDFVTDw8MjEpCisjZGVmaW5lIEk5MTVfRVZFTl9GSUVMRF9JTlRFUlJVUFRfRU5BQkxFCSgxVUw8PDIwKQorI2RlZmluZSBJOTE1X1NUQVJUX1ZCTEFOS19JTlRFUlJVUFRfRU5BQkxFCSgxVUw8PDE4KQkvKiA5NjUgb3IgbGF0ZXIgKi8KKyNkZWZpbmUgSTkxNV9WQkxBTktfSU5URVJSVVBUX0VOQUJMRQkJKDFVTDw8MTcpCisjZGVmaW5lIEk5MTVfT1ZFUkxBWV9VUERBVEVEX0VOQUJMRQkJKDFVTDw8MTYpCisjZGVmaW5lIEk5MTVfQ1JDX0VSUk9SX0lOVEVSUlVQVF9TVEFUVVMJCSgxVUw8PDEzKQorI2RlZmluZSBJOTE1X0NSQ19ET05FX0lOVEVSUlVQVF9TVEFUVVMJCSgxVUw8PDEyKQorI2RlZmluZSBJOTE1X0dNQlVTX0lOVEVSUlVQVF9TVEFUVVMJCSgxVUw8PDExKQorI2RlZmluZSBJOTE1X1ZTWU5DX0lOVEVSUlVQVF9TVEFUVVMJCSgxVUw8PDkpCisjZGVmaW5lIEk5MTVfRElTUExBWV9MSU5FX0NPTVBBUkVfU1RBVFVTCSgxVUw8PDgpCisjZGVmaW5lIEk5MTVfRFBTVF9FVkVOVF9TVEFUVVMJCQkoMVVMPDw3KQorI2RlZmluZSBJOTE1X0xFR0FDWV9CTENfRVZFTlRfU1RBVFVTCQkoMVVMPDw2KQorI2RlZmluZSBJOTE1X09ERF9GSUVMRF9JTlRFUlJVUFRfU1RBVFVTCQkoMVVMPDw1KQorI2RlZmluZSBJOTE1X0VWRU5fRklFTERfSU5URVJSVVBUX1NUQVRVUwkoMVVMPDw0KQorI2RlZmluZSBJOTE1X1NUQVJUX1ZCTEFOS19JTlRFUlJVUFRfU1RBVFVTCSgxVUw8PDIpCS8qIDk2NSBvciBsYXRlciAqLworI2RlZmluZSBJOTE1X1ZCTEFOS19JTlRFUlJVUFRfU1RBVFVTCQkoMVVMPDwxKQorI2RlZmluZSBJOTE1X09WRVJMQVlfVVBEQVRFRF9TVEFUVVMJCSgxVUw8PDApCisKKyNkZWZpbmUgU1JYX0lOREVYCQkweDNjNAorI2RlZmluZSBTUlhfREFUQQkJMHgzYzUKKyNkZWZpbmUgU1IwMQkJCTEKKyNkZWZpbmUgU1IwMV9TQ1JFRU5fT0ZGCQkoMTw8NSkKKworI2RlZmluZSBQUENSCQkJMHg2MTIwNAorI2RlZmluZSBQUENSX09OCQkJKDE8PDApCisKKyNkZWZpbmUgRFZPQgkJCTB4NjExNDAKKyNkZWZpbmUgRFZPQl9PTgkJCSgxPDwzMSkKKyNkZWZpbmUgRFZPQwkJCTB4NjExNjAKKyNkZWZpbmUgRFZPQ19PTgkJCSgxPDwzMSkKKyNkZWZpbmUgTFZEUwkJCTB4NjExODAKKyNkZWZpbmUgTFZEU19PTgkJCSgxPDwzMSkKKworI2RlZmluZSBBRFBBCQkJMHg2MTEwMAorI2RlZmluZSBBRFBBX0RQTVNfTUFTSwkJKH4oMzw8MTApKQorI2RlZmluZSBBRFBBX0RQTVNfT04JCSgwPDwxMCkKKyNkZWZpbmUgQURQQV9EUE1TX1NVU1BFTkQJKDE8PDEwKQorI2RlZmluZSBBRFBBX0RQTVNfU1RBTkRCWQkoMjw8MTApCisjZGVmaW5lIEFEUEFfRFBNU19PRkYJCSgzPDwxMCkKKworI2RlZmluZSBSSU5HX1RBSUwJCTB4MDAKKyNkZWZpbmUgVEFJTF9BRERSCQkweDAwMUZGRkY4CisjZGVmaW5lIFJJTkdfSEVBRAkJMHgwNAorI2RlZmluZSBIRUFEX1dSQVBfQ09VTlQJCTB4RkZFMDAwMDAKKyNkZWZpbmUgSEVBRF9XUkFQX09ORQkJMHgwMDIwMDAwMAorI2RlZmluZSBIRUFEX0FERFIJCTB4MDAxRkZGRkMKKyNkZWZpbmUgUklOR19TVEFSVAkJMHgwOAorI2RlZmluZSBTVEFSVF9BRERSCQkweEZGRkZGMDAwCisjZGVmaW5lIFJJTkdfTEVOCQkweDBDCisjZGVmaW5lIFJJTkdfTlJfUEFHRVMJCTB4MDAxRkYwMDAKKyNkZWZpbmUgUklOR19SRVBPUlRfTUFTSwkweDAwMDAwMDA2CisjZGVmaW5lIFJJTkdfUkVQT1JUXzY0SwkJMHgwMDAwMDAwMgorI2RlZmluZSBSSU5HX1JFUE9SVF8xMjhLCTB4MDAwMDAwMDQKKyNkZWZpbmUgUklOR19OT19SRVBPUlQJCTB4MDAwMDAwMDAKKyNkZWZpbmUgUklOR19WQUxJRF9NQVNLCQkweDAwMDAwMDAxCisjZGVmaW5lIFJJTkdfVkFMSUQJCTB4MDAwMDAwMDEKKyNkZWZpbmUgUklOR19JTlZBTElECQkweDAwMDAwMDAwCisKKy8qIFNjcmF0Y2ggcGFkIGRlYnVnIDAgcmVnOgorICovCisjZGVmaW5lICAgRFBMTF9GUEEwMV9QMV9QT1NUX0RJVl9NQVNLX0k4MzAJMHgwMDFmMDAwMAorLyoKKyAqIFRoZSBpODMwIGdlbmVyYXRpb24sIGluIExWRFMgbW9kZSwgZGVmaW5lcyBQMSBhcyB0aGUgYml0IG51bWJlciBzZXQgd2l0aGluCisgKiB0aGlzIGZpZWxkIChvbmx5IG9uZSBiaXQgbWF5IGJlIHNldCkuCisgKi8KKyNkZWZpbmUgICBEUExMX0ZQQTAxX1AxX1BPU1RfRElWX01BU0tfSTgzMF9MVkRTCTB4MDAzZjAwMDAKKyNkZWZpbmUgICBEUExMX0ZQQTAxX1AxX1BPU1RfRElWX1NISUZUCTE2CisvKiBpODMwLCByZXF1aXJlZCBpbiBEVk8gbm9uLWdhbmcgKi8KKyNkZWZpbmUgICBQTExfUDJfRElWSURFX0JZXzQJCSgxIDw8IDIzKQorI2RlZmluZSAgIFBMTF9QMV9ESVZJREVfQllfVFdPCQkoMSA8PCAyMSkgLyogaTgzMCAqLworI2RlZmluZSAgIFBMTF9SRUZfSU5QVVRfRFJFRkNMSwkJKDAgPDwgMTMpCisjZGVmaW5lICAgUExMX1JFRl9JTlBVVF9UVkNMS0lOQQkoMSA8PCAxMykgLyogaTgzMCAqLworI2RlZmluZSAgIFBMTF9SRUZfSU5QVVRfVFZDTEtJTkJDCSgyIDw8IDEzKSAvKiBTRFZPIFRWQ0xLSU4gKi8KKyNkZWZpbmUgICBQTExCX1JFRl9JTlBVVF9TUFJFQURTUEVDVFJVTUlOICgzIDw8IDEzKQorI2RlZmluZSAgIFBMTF9SRUZfSU5QVVRfTUFTSwkJKDMgPDwgMTMpCisjZGVmaW5lICAgUExMX0xPQURfUFVMU0VfUEhBU0VfU0hJRlQJCTkKKy8qCisgKiBQYXJhbGxlbCB0byBTZXJpYWwgTG9hZCBQdWxzZSBwaGFzZSBzZWxlY3Rpb24uCisgKiBTZWxlY3RzIHRoZSBwaGFzZSBmb3IgdGhlIDEwWCBEUExMIGNsb2NrIGZvciB0aGUgUENJZQorICogZGlnaXRhbCBkaXNwbGF5IHBvcnQuIFRoZSByYW5nZSBpcyA0IHRvIDEzOyAxMCBvciBtb3JlCisgKiBpcyBqdXN0IGEgZmxpcCBkZWxheS4gVGhlIGRlZmF1bHQgaXMgNgorICovCisjZGVmaW5lICAgUExMX0xPQURfUFVMU0VfUEhBU0VfTUFTSwkJKDB4ZiA8PCBQTExfTE9BRF9QVUxTRV9QSEFTRV9TSElGVCkKKyNkZWZpbmUgICBESVNQTEFZX1JBVEVfU0VMRUNUX0ZQQTEJCSgxIDw8IDgpCisvKgorICogU0RWTyBtdWx0aXBsaWVyIGZvciA5NDVHL0dNLiBOb3QgdXNlZCBvbiA5NjUuCisgKi8KKyNkZWZpbmUgICBTRFZPX01VTFRJUExJRVJfTUFTSwkJCTB4MDAwMDAwZmYKKyNkZWZpbmUgICBTRFZPX01VTFRJUExJRVJfU0hJRlRfSElSRVMJCTQKKyNkZWZpbmUgICBTRFZPX01VTFRJUExJRVJfU0hJRlRfVkdBCQkwCisjZGVmaW5lIERQTExfQV9NRCAweDA2MDFjIC8qIDk2NSsgb25seSAqLworLyoKKyAqIFVESSBwaXhlbCBkaXZpZGVyLCBjb250cm9sbGluZyBob3cgbWFueSBwaXhlbHMgYXJlIHN0dWZmZWQgaW50byBhIHBhY2tldC4KKyAqCisgKiBWYWx1ZSBpcyBwaXhlbHMgbWludXMgMS4gIE11c3QgYmUgc2V0IHRvIDEgcGl4ZWwgZm9yIFNEVk8uCisgKi8KKyNkZWZpbmUgICBEUExMX01EX1VESV9ESVZJREVSX01BU0sJCTB4M2YwMDAwMDAKKyNkZWZpbmUgICBEUExMX01EX1VESV9ESVZJREVSX1NISUZUCQkyNAorLyogVURJIHBpeGVsIGRpdmlkZXIgZm9yIFZHQSwgc2FtZSBhcyBEUExMX01EX1VESV9ESVZJREVSX01BU0suICovCisjZGVmaW5lICAgRFBMTF9NRF9WR0FfVURJX0RJVklERVJfTUFTSwkJMHgwMDNmMDAwMAorI2RlZmluZSAgIERQTExfTURfVkdBX1VESV9ESVZJREVSX1NISUZUCQkxNgorLyoKKyAqIFNEVk8vVURJIHBpeGVsIG11bHRpcGxpZXIuCisgKgorICogU0RWTyByZXF1aXJlcyB0aGF0IHRoZSBidXMgY2xvY2sgcmF0ZSBiZSBiZXR3ZWVuIDEgYW5kIDIgR2h6LCBhbmQgdGhlIGJ1cworICogY2xvY2sgcmF0ZSBpcyAxMCB0aW1lcyB0aGUgRFBMTCBjbG9jay4gIEF0IGxvdyByZXNvbHV0aW9uL3JlZnJlc2ggcmF0ZQorICogbW9kZXMsIHRoZSBidXMgcmF0ZSB3b3VsZCBiZSBiZWxvdyB0aGUgbGltaXRzLCBzbyBTRFZPIGFsbG93cyBmb3Igc3R1ZmZpbmcKKyAqIGR1bW15IGJ5dGVzIGluIHRoZSBkYXRhc3RyZWFtIGF0IGFuIGluY3JlYXNlZCBjbG9jayByYXRlLCB3aXRoIGJvdGggc2lkZXMgb2YKKyAqIHRoZSBsaW5rIGtub3dpbmcgaG93IG1hbnkgYnl0ZXMgYXJlIGZpbGwuCisgKgorICogU28sIGZvciBhIG1vZGUgd2l0aCBhIGRvdGNsb2NrIG9mIDY1TWh6LCB3ZSB3b3VsZCB3YW50IHRvIGRvdWJsZSB0aGUgY2xvY2sKKyAqIHJhdGUgdG8gMTMwTWh6IHRvIGdldCBhIGJ1cyByYXRlIG9mIDEuMzBHaHouICBUaGUgRFBMTCBjbG9jayByYXRlIHdvdWxkIGJlCisgKiBzZXQgdG8gMTMwTWh6LCBhbmQgdGhlIFNEVk8gbXVsdGlwbGllciBzZXQgdG8gMnggaW4gdGhpcyByZWdpc3RlciBhbmQKKyAqIHRocm91Z2ggYW4gU0RWTyBjb21tYW5kLgorICoKKyAqIFRoaXMgcmVnaXN0ZXIgZmllbGQgaGFzIHZhbHVlcyBvZiBtdWx0aXBsaWNhdGlvbiBmYWN0b3IgbWludXMgMSwgd2l0aAorICogYSBtYXhpbXVtIG11bHRpcGxpZXIgb2YgNSBmb3IgU0RWTy4KKyAqLworI2RlZmluZSAgIERQTExfTURfVURJX01VTFRJUExJRVJfTUFTSwkJMHgwMDAwM2YwMAorI2RlZmluZSAgIERQTExfTURfVURJX01VTFRJUExJRVJfU0hJRlQJCTgKKy8qCisgKiBTRFZPL1VESSBwaXhlbCBtdWx0aXBsaWVyIGZvciBWR0EsIHNhbWUgYXMgRFBMTF9NRF9VRElfTVVMVElQTElFUl9NQVNLLgorICogVGhpcyBiZXN0IGJlIHNldCB0byB0aGUgZGVmYXVsdCB2YWx1ZSAoMykgb3IgdGhlIENSVCB3b24ndCB3b3JrLiBObywKKyAqIEkgZG9uJ3QgZW50aXJlbHkgdW5kZXJzdGFuZCB3aGF0IHRoaXMgZG9lcy4uLgorICovCisjZGVmaW5lICAgRFBMTF9NRF9WR0FfVURJX01VTFRJUExJRVJfTUFTSwkweDAwMDAwMDNmCisjZGVmaW5lICAgRFBMTF9NRF9WR0FfVURJX01VTFRJUExJRVJfU0hJRlQJMAorI2RlZmluZSBEUExMX0JfTUQgMHgwNjAyMCAvKiA5NjUrIG9ubHkgKi8KKyNkZWZpbmUgRlBBMAkweDA2MDQwCisjZGVmaW5lIEZQQTEJMHgwNjA0NAorI2RlZmluZSBGUEIwCTB4MDYwNDgKKyNkZWZpbmUgRlBCMQkweDA2MDRjCisjZGVmaW5lICAgRlBfTl9ESVZfTUFTSwkJMHgwMDNmMDAwMAorI2RlZmluZSAgIEZQX05fRElWX1NISUZUCQkxNgorI2RlZmluZSAgIEZQX00xX0RJVl9NQVNLCTB4MDAwMDNmMDAKKyNkZWZpbmUgICBGUF9NMV9ESVZfU0hJRlQJCSA4CisjZGVmaW5lICAgRlBfTTJfRElWX01BU0sJMHgwMDAwMDAzZgorI2RlZmluZSAgIEZQX00yX0RJVl9TSElGVAkJIDAKKyNkZWZpbmUgRFBMTF9URVNUCTB4NjA2YworI2RlZmluZSAgIERQTExCX1RFU1RfU0RWT19ESVZfMQkJKDAgPDwgMjIpCisjZGVmaW5lICAgRFBMTEJfVEVTVF9TRFZPX0RJVl8yCQkoMSA8PCAyMikKKyNkZWZpbmUgICBEUExMQl9URVNUX1NEVk9fRElWXzQJCSgyIDw8IDIyKQorI2RlZmluZSAgIERQTExCX1RFU1RfU0RWT19ESVZfTUFTSwkoMyA8PCAyMikKKyNkZWZpbmUgICBEUExMQl9URVNUX05fQllQQVNTCQkoMSA8PCAxOSkKKyNkZWZpbmUgICBEUExMQl9URVNUX01fQllQQVNTCQkoMSA8PCAxOCkKKyNkZWZpbmUgICBEUExMQl9JTlBVVF9CVUZGRVJfRU5BQkxFCSgxIDw8IDE2KQorI2RlZmluZSAgIERQTExBX1RFU1RfTl9CWVBBU1MJCSgxIDw8IDMpCisjZGVmaW5lICAgRFBMTEFfVEVTVF9NX0JZUEFTUwkJKDEgPDwgMikKKyNkZWZpbmUgICBEUExMQV9JTlBVVF9CVUZGRVJfRU5BQkxFCSgxIDw8IDApCisjZGVmaW5lIERfU1RBVEUJCTB4NjEwNAorI2RlZmluZSBDR18yRF9ESVMJMHg2MjAwCisjZGVmaW5lIENHXzNEX0RJUwkweDYyMDQKKworLyoKKyAqIFBhbGV0dGUgcmVncworICovCisKKyNkZWZpbmUgUEFMRVRURV9BCQkweDBhMDAwCisjZGVmaW5lIFBBTEVUVEVfQgkJMHgwYTgwMAorCisvKiBNQ0ggTU1JTyBzcGFjZSAqLworCisvKgorICogTUNIQkFSIG1pcnJvci4KKyAqCisgKiBUaGlzIG1pcnJvcnMgdGhlIE1DSEJBUiBNTUlPIHNwYWNlIHdob3NlIGxvY2F0aW9uIGlzIGRldGVybWluZWQgYnkKKyAqIGRldmljZSAwIGZ1bmN0aW9uIDAncyBwY2kgY29uZmlnIHJlZ2lzdGVyIDB4NDQgb3IgMHg0OCBhbmQgbWF0Y2hlcyBpdCBpbgorICogZXZlcnkgd2F5LiAgSXQgaXMgbm90IGFjY2Vzc2libGUgZnJvbSB0aGUgQ1AgcmVnaXN0ZXIgcmVhZCBpbnN0cnVjdGlvbnMuCisgKgorICovCisjZGVmaW5lIE1DSEJBUl9NSVJST1JfQkFTRQkweDEwMDAwCisKKy8qKiA5MTUtOTQ1IGFuZCBHTTk2NSBNQ0ggcmVnaXN0ZXIgY29udHJvbGxpbmcgRFJBTSBjaGFubmVsIGFjY2VzcyAqLworI2RlZmluZSBEQ0MJCQkweDEwMjAwCisjZGVmaW5lIERDQ19BRERSRVNTSU5HX01PREVfU0lOR0xFX0NIQU5ORUwJCSgwIDw8IDApCisjZGVmaW5lIERDQ19BRERSRVNTSU5HX01PREVfRFVBTF9DSEFOTkVMX0FTWU1NRVRSSUMJKDEgPDwgMCkKKyNkZWZpbmUgRENDX0FERFJFU1NJTkdfTU9ERV9EVUFMX0NIQU5ORUxfSU5URVJMRUFWRUQJKDIgPDwgMCkKKyNkZWZpbmUgRENDX0FERFJFU1NJTkdfTU9ERV9NQVNLCQkJKDMgPDwgMCkKKyNkZWZpbmUgRENDX0NIQU5ORUxfWE9SX0RJU0FCTEUJCQkJKDEgPDwgMTApCisKKy8qKiA5NjUgTUNIIHJlZ2lzdGVyIGNvbnRyb2xsaW5nIERSQU0gY2hhbm5lbCBjb25maWd1cmF0aW9uICovCisjZGVmaW5lIEMwRFJCMwkJCTB4MTAyMDYKKyNkZWZpbmUgQzFEUkIzCQkJMHgxMDYwNgorCisvKgorICogT3ZlcmxheSByZWdzCisgKi8KKworI2RlZmluZSBPVkFERAkJCTB4MzAwMDAKKyNkZWZpbmUgRE9WU1RBCQkJMHgzMDAwOAorI2RlZmluZSBPQ19CVUYJCQkoMHgzPDwyMCkKKyNkZWZpbmUgT0dBTUM1CQkJMHgzMDAxMAorI2RlZmluZSBPR0FNQzQJCQkweDMwMDE0CisjZGVmaW5lIE9HQU1DMwkJCTB4MzAwMTgKKyNkZWZpbmUgT0dBTUMyCQkJMHgzMDAxYworI2RlZmluZSBPR0FNQzEJCQkweDMwMDIwCisjZGVmaW5lIE9HQU1DMAkJCTB4MzAwMjQKKworLyoKKyAqIERpc3BsYXkgZW5naW5lIHJlZ3MKKyAqLworCisvKiBQaXBlIEEgdGltaW5nIHJlZ3MgKi8KKyNkZWZpbmUgSFRPVEFMX0EJMHg2MDAwMAorI2RlZmluZSBIQkxBTktfQQkweDYwMDA0CisjZGVmaW5lIEhTWU5DX0EJCTB4NjAwMDgKKyNkZWZpbmUgVlRPVEFMX0EJMHg2MDAwYworI2RlZmluZSBWQkxBTktfQQkweDYwMDEwCisjZGVmaW5lIFZTWU5DX0EJCTB4NjAwMTQKKyNkZWZpbmUgUElQRUFTUkMJMHg2MDAxYworI2RlZmluZSBCQ0xSUEFUX0EJMHg2MDAyMAorCisvKiBQaXBlIEIgdGltaW5nIHJlZ3MgKi8KKyNkZWZpbmUgSFRPVEFMX0IJMHg2MTAwMAorI2RlZmluZSBIQkxBTktfQgkweDYxMDA0CisjZGVmaW5lIEhTWU5DX0IJCTB4NjEwMDgKKyNkZWZpbmUgVlRPVEFMX0IJMHg2MTAwYworI2RlZmluZSBWQkxBTktfQgkweDYxMDEwCisjZGVmaW5lIFZTWU5DX0IJCTB4NjEwMTQKKyNkZWZpbmUgUElQRUJTUkMJMHg2MTAxYworI2RlZmluZSBCQ0xSUEFUX0IJMHg2MTAyMAorCisvKiBWR0EgcG9ydCBjb250cm9sICovCisjZGVmaW5lIEFEUEEJCQkweDYxMTAwCisjZGVmaW5lICAgQURQQV9EQUNfRU5BQkxFCSgxPDwzMSkKKyNkZWZpbmUgICBBRFBBX0RBQ19ESVNBQkxFCTAKKyNkZWZpbmUgICBBRFBBX1BJUEVfU0VMRUNUX01BU0sJKDE8PDMwKQorI2RlZmluZSAgIEFEUEFfUElQRV9BX1NFTEVDVAkwCisjZGVmaW5lICAgQURQQV9QSVBFX0JfU0VMRUNUCSgxPDwzMCkKKyNkZWZpbmUgICBBRFBBX1VTRV9WR0FfSFZQT0xBUklUWSAoMTw8MTUpCisjZGVmaW5lICAgQURQQV9TRVRTX0hWUE9MQVJJVFkJMAorI2RlZmluZSAgIEFEUEFfVlNZTkNfQ05UTF9ESVNBQkxFICgxPDwxMSkKKyNkZWZpbmUgICBBRFBBX1ZTWU5DX0NOVExfRU5BQkxFIDAKKyNkZWZpbmUgICBBRFBBX0hTWU5DX0NOVExfRElTQUJMRSAoMTw8MTApCisjZGVmaW5lICAgQURQQV9IU1lOQ19DTlRMX0VOQUJMRSAwCisjZGVmaW5lICAgQURQQV9WU1lOQ19BQ1RJVkVfSElHSCAoMTw8NCkKKyNkZWZpbmUgICBBRFBBX1ZTWU5DX0FDVElWRV9MT1cJMAorI2RlZmluZSAgIEFEUEFfSFNZTkNfQUNUSVZFX0hJR0ggKDE8PDMpCisjZGVmaW5lICAgQURQQV9IU1lOQ19BQ1RJVkVfTE9XCTAKKyNkZWZpbmUgICBBRFBBX0RQTVNfTUFTSwkofigzPDwxMCkpCisjZGVmaW5lICAgQURQQV9EUE1TX09OCQkoMDw8MTApCisjZGVmaW5lICAgQURQQV9EUE1TX1NVU1BFTkQJKDE8PDEwKQorI2RlZmluZSAgIEFEUEFfRFBNU19TVEFOREJZCSgyPDwxMCkKKyNkZWZpbmUgICBBRFBBX0RQTVNfT0ZGCQkoMzw8MTApCisKKy8qIEhvdHBsdWcgY29udHJvbCAoOTQ1KyBvbmx5KSAqLworI2RlZmluZSBQT1JUX0hPVFBMVUdfRU4JCTB4NjExMTAKKyNkZWZpbmUgICBTRFZPQl9IT1RQTFVHX0lOVF9FTgkJCSgxIDw8IDI2KQorI2RlZmluZSAgIFNEVk9DX0hPVFBMVUdfSU5UX0VOCQkJKDEgPDwgMjUpCisjZGVmaW5lICAgVFZfSE9UUExVR19JTlRfRU4JCQkoMSA8PCAxOCkKKyNkZWZpbmUgICBDUlRfSE9UUExVR19JTlRfRU4JCQkoMSA8PCA5KQorI2RlZmluZSAgIENSVF9IT1RQTFVHX0ZPUkNFX0RFVEVDVAkJKDEgPDwgMykKKworI2RlZmluZSBQT1JUX0hPVFBMVUdfU1RBVAkweDYxMTE0CisjZGVmaW5lICAgQ1JUX0hPVFBMVUdfSU5UX1NUQVRVUwkJKDEgPDwgMTEpCisjZGVmaW5lICAgVFZfSE9UUExVR19JTlRfU1RBVFVTCQkJKDEgPDwgMTApCisjZGVmaW5lICAgQ1JUX0hPVFBMVUdfTU9OSVRPUl9NQVNLCQkoMyA8PCA4KQorI2RlZmluZSAgIENSVF9IT1RQTFVHX01PTklUT1JfQ09MT1IJCSgzIDw8IDgpCisjZGVmaW5lICAgQ1JUX0hPVFBMVUdfTU9OSVRPUl9NT05PCQkoMiA8PCA4KQorI2RlZmluZSAgIENSVF9IT1RQTFVHX01PTklUT1JfTk9ORQkJKDAgPDwgOCkKKyNkZWZpbmUgICBTRFZPQ19IT1RQTFVHX0lOVF9TVEFUVVMJCSgxIDw8IDcpCisjZGVmaW5lICAgU0RWT0JfSE9UUExVR19JTlRfU1RBVFVTCQkoMSA8PCA2KQorCisvKiBTRFZPIHBvcnQgY29udHJvbCAqLworI2RlZmluZSBTRFZPQgkJCTB4NjExNDAKKyNkZWZpbmUgU0RWT0MJCQkweDYxMTYwCisjZGVmaW5lICAgU0RWT19FTkFCTEUJCSgxIDw8IDMxKQorI2RlZmluZSAgIFNEVk9fUElQRV9CX1NFTEVDVAkoMSA8PCAzMCkKKyNkZWZpbmUgICBTRFZPX1NUQUxMX1NFTEVDVAkoMSA8PCAyOSkKKyNkZWZpbmUgICBTRFZPX0lOVEVSUlVQVF9FTkFCTEUJKDEgPDwgMjYpCisvKioKKyAqIDkxNUcvR00gU0RWTyBwaXhlbCBtdWx0aXBsaWVyLgorICoKKyAqIFByb2dyYW1tZWQgdmFsdWUgaXMgbXVsdGlwbGllciAtIDEsIHVwIHRvIDV4LgorICoKKyAqIFxzYSBEUExMX01EX1VESV9NVUxUSVBMSUVSX01BU0sKKyAqLworI2RlZmluZSAgIFNEVk9fUE9SVF9NVUxUSVBMWV9NQVNLCSg3IDw8IDIzKQorI2RlZmluZSAgIFNEVk9fUE9SVF9NVUxUSVBMWV9TSElGVAkJMjMKKyNkZWZpbmUgICBTRFZPX1BIQVNFX1NFTEVDVF9NQVNLCSgxNSA8PCAxOSkKKyNkZWZpbmUgICBTRFZPX1BIQVNFX1NFTEVDVF9ERUZBVUxUCSg2IDw8IDE5KQorI2RlZmluZSAgIFNEVk9fQ0xPQ0tfT1VUUFVUX0lOVkVSVAkoMSA8PCAxOCkKKyNkZWZpbmUgICBTRFZPQ19HQU5HX01PREUJCSgxIDw8IDE2KQorI2RlZmluZSAgIFNEVk9fQk9SREVSX0VOQUJMRQkJKDEgPDwgNykKKyNkZWZpbmUgICBTRFZPQl9QQ0lFX0NPTkNVUlJFTkNZCSgxIDw8IDMpCisjZGVmaW5lICAgU0RWT19ERVRFQ1RFRAkJCSgxIDw8IDIpCisvKiBCaXRzIHRvIGJlIHByZXNlcnZlZCB3aGVuIHdyaXRpbmcgKi8KKyNkZWZpbmUgICBTRFZPQl9QUkVTRVJWRV9NQVNLICgoMSA8PCAxNykgfCAoMSA8PCAxNikgfCAoMSA8PCAxNCkgfCAoMSA8PCAyNikpCisjZGVmaW5lICAgU0RWT0NfUFJFU0VSVkVfTUFTSyAoKDEgPDwgMTcpIHwgKDEgPDwgMjYpKQorCisvKiBEVk8gcG9ydCBjb250cm9sICovCisjZGVmaW5lIERWT0EJCQkweDYxMTIwCisjZGVmaW5lIERWT0IJCQkweDYxMTQwCisjZGVmaW5lIERWT0MJCQkweDYxMTYwCisjZGVmaW5lICAgRFZPX0VOQUJMRQkJCSgxIDw8IDMxKQorI2RlZmluZSAgIERWT19QSVBFX0JfU0VMRUNUCQkoMSA8PCAzMCkKKyNkZWZpbmUgICBEVk9fUElQRV9TVEFMTF9VTlVTRUQJCSgwIDw8IDI4KQorI2RlZmluZSAgIERWT19QSVBFX1NUQUxMCQkoMSA8PCAyOCkKKyNkZWZpbmUgICBEVk9fUElQRV9TVEFMTF9UVgkJKDIgPDwgMjgpCisjZGVmaW5lICAgRFZPX1BJUEVfU1RBTExfTUFTSwkJKDMgPDwgMjgpCisjZGVmaW5lICAgRFZPX1VTRV9WR0FfU1lOQwkJKDEgPDwgMTUpCisjZGVmaW5lICAgRFZPX0RBVEFfT1JERVJfSTc0MAkJKDAgPDwgMTQpCisjZGVmaW5lICAgRFZPX0RBVEFfT1JERVJfRlAJCSgxIDw8IDE0KQorI2RlZmluZSAgIERWT19WU1lOQ19ESVNBQkxFCQkoMSA8PCAxMSkKKyNkZWZpbmUgICBEVk9fSFNZTkNfRElTQUJMRQkJKDEgPDwgMTApCisjZGVmaW5lICAgRFZPX1ZTWU5DX1RSSVNUQVRFCQkoMSA8PCA5KQorI2RlZmluZSAgIERWT19IU1lOQ19UUklTVEFURQkJKDEgPDwgOCkKKyNkZWZpbmUgICBEVk9fQk9SREVSX0VOQUJMRQkJKDEgPDwgNykKKyNkZWZpbmUgICBEVk9fREFUQV9PUkRFUl9HQlJHCQkoMSA8PCA2KQorI2RlZmluZSAgIERWT19EQVRBX09SREVSX1JHR0IJCSgwIDw8IDYpCisjZGVmaW5lICAgRFZPX0RBVEFfT1JERVJfR0JSR19FUlJBVEEJKDAgPDwgNikKKyNkZWZpbmUgICBEVk9fREFUQV9PUkRFUl9SR0dCX0VSUkFUQQkoMSA8PCA2KQorI2RlZmluZSAgIERWT19WU1lOQ19BQ1RJVkVfSElHSAkJKDEgPDwgNCkKKyNkZWZpbmUgICBEVk9fSFNZTkNfQUNUSVZFX0hJR0gJCSgxIDw8IDMpCisjZGVmaW5lICAgRFZPX0JMQU5LX0FDVElWRV9ISUdICQkoMSA8PCAyKQorI2RlZmluZSAgIERWT19PVVRQVVRfQ1NUQVRFX1BJWEVMUwkoMSA8PCAxKQkvKiBTREcgb25seSAqLworI2RlZmluZSAgIERWT19PVVRQVVRfU09VUkNFX1NJWkVfUElYRUxTCSgxIDw8IDApCS8qIFNERyBvbmx5ICovCisjZGVmaW5lICAgRFZPX1BSRVNFUlZFX01BU0sJCSgweDc8PDI0KQorI2RlZmluZSBEVk9BX1NSQ0RJTQkJMHg2MTEyNAorI2RlZmluZSBEVk9CX1NSQ0RJTQkJMHg2MTE0NAorI2RlZmluZSBEVk9DX1NSQ0RJTQkJMHg2MTE2NAorI2RlZmluZSAgIERWT19TUkNESU1fSE9SSVpPTlRBTF9TSElGVAkxMgorI2RlZmluZSAgIERWT19TUkNESU1fVkVSVElDQUxfU0hJRlQJMAorCisvKiBMVkRTIHBvcnQgY29udHJvbCAqLworI2RlZmluZSBMVkRTCQkJMHg2MTE4MAorLyoKKyAqIEVuYWJsZXMgdGhlIExWRFMgcG9ydC4gIFRoaXMgYml0IG11c3QgYmUgc2V0IGJlZm9yZSBEUExMcyBhcmUgZW5hYmxlZCwgYXMKKyAqIHRoZSBEUExMIHNlbWFudGljcyBjaGFuZ2Ugd2hlbiB0aGUgTFZEUyBpcyBhc3NpZ25lZCB0byB0aGF0IHBpcGUuCisgKi8KKyNkZWZpbmUgICBMVkRTX1BPUlRfRU4JCQkoMSA8PCAzMSkKKy8qIFNlbGVjdHMgcGlwZSBCIGZvciBMVkRTIGRhdGEuICBNdXN0IGJlIHNldCBvbiBwcmUtOTY1LiAqLworI2RlZmluZSAgIExWRFNfUElQRUJfU0VMRUNUCQkoMSA8PCAzMCkKKy8qCisgKiBFbmFibGVzIHRoZSBBMC1BMiBkYXRhIHBhaXJzIGFuZCBDTEtBLCBjb250YWluaW5nIDE4IGJpdHMgb2YgY29sb3IgZGF0YSBwZXIKKyAqIHBpeGVsLgorICovCisjZGVmaW5lICAgTFZEU19BMEEyX0NMS0FfUE9XRVJfTUFTSwkoMyA8PCA4KQorI2RlZmluZSAgIExWRFNfQTBBMl9DTEtBX1BPV0VSX0RPV04JKDAgPDwgOCkKKyNkZWZpbmUgICBMVkRTX0EwQTJfQ0xLQV9QT1dFUl9VUAkoMyA8PCA4KQorLyoKKyAqIENvbnRyb2xzIHRoZSBBMyBkYXRhIHBhaXIsIHdoaWNoIGNvbnRhaW5zIHRoZSBhZGRpdGlvbmFsIExTQnMgZm9yIDI0IGJpdAorICogbW9kZS4gIE9ubHkgZW5hYmxlZCBpZiBMVkRTX0EwQTJfQ0xLQV9QT1dFUl9VUCBhbHNvIGluZGljYXRlcyBpdCBzaG91bGQgYmUKKyAqIG9uLgorICovCisjZGVmaW5lICAgTFZEU19BM19QT1dFUl9NQVNLCQkoMyA8PCA2KQorI2RlZmluZSAgIExWRFNfQTNfUE9XRVJfRE9XTgkJKDAgPDwgNikKKyNkZWZpbmUgICBMVkRTX0EzX1BPV0VSX1VQCQkoMyA8PCA2KQorLyoKKyAqIENvbnRyb2xzIHRoZSBDTEtCIHBhaXIuICBUaGlzIHNob3VsZCBvbmx5IGJlIHNldCB3aGVuIExWRFNfQjBCM19QT1dFUl9VUAorICogaXMgc2V0LgorICovCisjZGVmaW5lICAgTFZEU19DTEtCX1BPV0VSX01BU0sJCSgzIDw8IDQpCisjZGVmaW5lICAgTFZEU19DTEtCX1BPV0VSX0RPV04JCSgwIDw8IDQpCisjZGVmaW5lICAgTFZEU19DTEtCX1BPV0VSX1VQCQkoMyA8PCA0KQorLyoKKyAqIENvbnRyb2xzIHRoZSBCMC1CMyBkYXRhIHBhaXJzLiAgVGhpcyBtdXN0IGJlIHNldCB0byBtYXRjaCB0aGUgRFBMTCBwMgorICogc2V0dGluZyBmb3Igd2hldGhlciB3ZSBhcmUgaW4gZHVhbC1jaGFubmVsIG1vZGUuICBUaGUgQjMgcGFpciB3aWxsCisgKiBhZGRpdGlvbmFsbHkgb25seSBiZSBwb3dlcmVkIHVwIHdoZW4gTFZEU19BM19QT1dFUl9VUCBpcyBzZXQuCisgKi8KKyNkZWZpbmUgICBMVkRTX0IwQjNfUE9XRVJfTUFTSwkJKDMgPDwgMikKKyNkZWZpbmUgICBMVkRTX0IwQjNfUE9XRVJfRE9XTgkJKDAgPDwgMikKKyNkZWZpbmUgICBMVkRTX0IwQjNfUE9XRVJfVVAJCSgzIDw8IDIpCisKKy8qIFBhbmVsIHBvd2VyIHNlcXVlbmNpbmcgKi8KKyNkZWZpbmUgUFBfU1RBVFVTCTB4NjEyMDAKKyNkZWZpbmUgICBQUF9PTgkJKDEgPDwgMzEpCisvKgorICogSW5kaWNhdGVzIHRoYXQgYWxsIGRlcGVuZGVuY2llcyBvZiB0aGUgcGFuZWwgYXJlIG9uOgorICoKKyAqIC0gUExMIGVuYWJsZWQKKyAqIC0gcGlwZSBlbmFibGVkCisgKiAtIExWRFMvRFZPQi9EVk9DIG9uCisgKi8KKyNkZWZpbmUgICBQUF9SRUFEWQkJKDEgPDwgMzApCisjZGVmaW5lICAgUFBfU0VRVUVOQ0VfTk9ORQkoMCA8PCAyOCkKKyNkZWZpbmUgICBQUF9TRVFVRU5DRV9PTgkoMSA8PCAyOCkKKyNkZWZpbmUgICBQUF9TRVFVRU5DRV9PRkYJKDIgPDwgMjgpCisjZGVmaW5lICAgUFBfU0VRVUVOQ0VfTUFTSwkweDMwMDAwMDAwCisjZGVmaW5lIFBQX0NPTlRST0wJMHg2MTIwNAorI2RlZmluZSAgIFBPV0VSX1RBUkdFVF9PTgkoMSA8PCAwKQorI2RlZmluZSBQUF9PTl9ERUxBWVMJMHg2MTIwOAorI2RlZmluZSBQUF9PRkZfREVMQVlTCTB4NjEyMGMKKyNkZWZpbmUgUFBfRElWSVNPUgkweDYxMjEwCisKKy8qIFBhbmVsIGZpdHRpbmcgKi8KKyNkZWZpbmUgUEZJVF9DT05UUk9MCTB4NjEyMzAKKyNkZWZpbmUgICBQRklUX0VOQUJMRQkJKDEgPDwgMzEpCisjZGVmaW5lICAgUEZJVF9QSVBFX01BU0sJKDMgPDwgMjkpCisjZGVmaW5lICAgUEZJVF9QSVBFX1NISUZUCTI5CisjZGVmaW5lICAgVkVSVF9JTlRFUlBfRElTQUJMRQkoMCA8PCAxMCkKKyNkZWZpbmUgICBWRVJUX0lOVEVSUF9CSUxJTkVBUgkoMSA8PCAxMCkKKyNkZWZpbmUgICBWRVJUX0lOVEVSUF9NQVNLCSgzIDw8IDEwKQorI2RlZmluZSAgIFZFUlRfQVVUT19TQ0FMRQkoMSA8PCA5KQorI2RlZmluZSAgIEhPUklaX0lOVEVSUF9ESVNBQkxFCSgwIDw8IDYpCisjZGVmaW5lICAgSE9SSVpfSU5URVJQX0JJTElORUFSCSgxIDw8IDYpCisjZGVmaW5lICAgSE9SSVpfSU5URVJQX01BU0sJKDMgPDwgNikKKyNkZWZpbmUgICBIT1JJWl9BVVRPX1NDQUxFCSgxIDw8IDUpCisjZGVmaW5lICAgUEFORUxfOFRPNl9ESVRIRVJfRU5BQkxFICgxIDw8IDMpCisjZGVmaW5lIFBGSVRfUEdNX1JBVElPUwkweDYxMjM0CisjZGVmaW5lICAgUEZJVF9WRVJUX1NDQUxFX01BU0sJCQkweGZmZjAwMDAwCisjZGVmaW5lICAgUEZJVF9IT1JJWl9TQ0FMRV9NQVNLCQkJMHgwMDAwZmZmMAorI2RlZmluZSBQRklUX0FVVE9fUkFUSU9TIDB4NjEyMzgKKworLyogQmFja2xpZ2h0IGNvbnRyb2wgKi8KKyNkZWZpbmUgQkxDX1BXTV9DVEwJCTB4NjEyNTQKKyNkZWZpbmUgICBCQUNLTElHSFRfTU9EVUxBVElPTl9GUkVRX1NISUZUCQkoMTcpCisjZGVmaW5lIEJMQ19QV01fQ1RMMgkJMHg2MTI1MCAvKiA5NjUrIG9ubHkgKi8KKyNkZWZpbmUgICBCTE1fQ09NQklOQVRJT05fTU9ERSAoMSA8PCAzMCkKKy8qCisgKiBUaGlzIGlzIHRoZSBtb3N0IHNpZ25pZmljYW50IDE1IGJpdHMgb2YgdGhlIG51bWJlciBvZiBiYWNrbGlnaHQgY3ljbGVzIGluIGEKKyAqIGNvbXBsZXRlIGN5Y2xlIG9mIHRoZSBtb2R1bGF0ZWQgYmFja2xpZ2h0IGNvbnRyb2wuCisgKgorICogVGhlIGFjdHVhbCB2YWx1ZSBpcyB0aGlzIGZpZWxkIG11bHRpcGxpZWQgYnkgdHdvLgorICovCisjZGVmaW5lICAgQkFDS0xJR0hUX01PRFVMQVRJT05fRlJFUV9NQVNLCQkoMHg3ZmZmIDw8IDE3KQorI2RlZmluZSAgIEJMTV9MRUdBQ1lfTU9ERQkJCQkoMSA8PCAxNikKKy8qCisgKiBUaGlzIGlzIHRoZSBudW1iZXIgb2YgY3ljbGVzIG91dCBvZiB0aGUgYmFja2xpZ2h0IG1vZHVsYXRpb24gY3ljbGUgZm9yIHdoaWNoCisgKiB0aGUgYmFja2xpZ2h0IGlzIG9uLgorICoKKyAqIFRoaXMgZmllbGQgbXVzdCBiZSBubyBncmVhdGVyIHRoYW4gdGhlIG51bWJlciBvZiBjeWNsZXMgaW4gdGhlIGNvbXBsZXRlCisgKiBiYWNrbGlnaHQgbW9kdWxhdGlvbiBjeWNsZS4KKyAqLworI2RlZmluZSAgIEJBQ0tMSUdIVF9EVVRZX0NZQ0xFX1NISUZUCQkoMCkKKyNkZWZpbmUgICBCQUNLTElHSFRfRFVUWV9DWUNMRV9NQVNLCQkoMHhmZmZmKQorCisvKiBUViBwb3J0IGNvbnRyb2wgKi8KKyNkZWZpbmUgVFZfQ1RMCQkJMHg2ODAwMAorLyoqIEVuYWJsZXMgdGhlIFRWIGVuY29kZXIgKi8KKyMgZGVmaW5lIFRWX0VOQ19FTkFCTEUJCQkoMSA8PCAzMSkKKy8qKiBTb3VyY2VzIHRoZSBUViBlbmNvZGVyIGlucHV0IGZyb20gcGlwZSBCIGluc3RlYWQgb2YgQS4gKi8KKyMgZGVmaW5lIFRWX0VOQ19QSVBFQl9TRUxFQ1QJCSgxIDw8IDMwKQorLyoqIE91dHB1dHMgY29tcG9zaXRlIHZpZGVvIChEQUMgQSBvbmx5KSAqLworIyBkZWZpbmUgVFZfRU5DX09VVFBVVF9DT01QT1NJVEUJKDAgPDwgMjgpCisvKiogT3V0cHV0cyBTVmlkZW8gdmlkZW8gKERBQyBCL0MpICovCisjIGRlZmluZSBUVl9FTkNfT1VUUFVUX1NWSURFTwkJKDEgPDwgMjgpCisvKiogT3V0cHV0cyBDb21wb25lbnQgdmlkZW8gKERBQyBBL0IvQykgKi8KKyMgZGVmaW5lIFRWX0VOQ19PVVRQVVRfQ09NUE9ORU5UCSgyIDw8IDI4KQorLyoqIE91dHB1dHMgQ29tcG9zaXRlIGFuZCBTVmlkZW8gKERBQyBBL0IvQykgKi8KKyMgZGVmaW5lIFRWX0VOQ19PVVRQVVRfU1ZJREVPX0NPTVBPU0lURQkoMyA8PCAyOCkKKyMgZGVmaW5lIFRWX1RSSUxFVkVMX1NZTkMJCSgxIDw8IDIxKQorLyoqIEVuYWJsZXMgc2xvdyBzeW5jIGdlbmVyYXRpb24gKDk0NUdNIG9ubHkpICovCisjIGRlZmluZSBUVl9TTE9XX1NZTkMJCQkoMSA8PCAyMCkKKy8qKiBTZWxlY3RzIDR4IG92ZXJzYW1wbGluZyBmb3IgNDgwaSBhbmQgNTc2cCAqLworIyBkZWZpbmUgVFZfT1ZFUlNBTVBMRV80WAkJKDAgPDwgMTgpCisvKiogU2VsZWN0cyAyeCBvdmVyc2FtcGxpbmcgZm9yIDcyMHAgYW5kIDEwODBpICovCisjIGRlZmluZSBUVl9PVkVSU0FNUExFXzJYCQkoMSA8PCAxOCkKKy8qKiBTZWxlY3RzIG5vIG92ZXJzYW1wbGluZyBmb3IgMTA4MHAgKi8KKyMgZGVmaW5lIFRWX09WRVJTQU1QTEVfTk9ORQkJKDIgPDwgMTgpCisvKiogU2VsZWN0cyA4eCBvdmVyc2FtcGxpbmcgKi8KKyMgZGVmaW5lIFRWX09WRVJTQU1QTEVfOFgJCSgzIDw8IDE4KQorLyoqIFNlbGVjdHMgcHJvZ3Jlc3NpdmUgbW9kZSByYXRoZXIgdGhhbiBpbnRlcmxhY2VkICovCisjIGRlZmluZSBUVl9QUk9HUkVTU0lWRQkJCSgxIDw8IDE3KQorLyoqIFNldHMgdGhlIGNvbG9yYnVyc3QgdG8gUEFMIG1vZGUuICBSZXF1aXJlZCBmb3Igbm9uLU0gUEFMIG1vZGVzLiAqLworIyBkZWZpbmUgVFZfUEFMX0JVUlNUCQkJKDEgPDwgMTYpCisvKiogRmllbGQgZm9yIHNldHRpbmcgZGVsYXkgb2YgWSBjb21wYXJlZCB0byBDICovCisjIGRlZmluZSBUVl9ZQ19TS0VXX01BU0sJCSg3IDw8IDEyKQorLyoqIEVuYWJsZXMgYSBmaXggZm9yIDQ4MHAvNTc2cCBzdGFuZGFyZCBkZWZpbml0aW9uIG1vZGVzIG9uIHRoZSA5MTVHTSBvbmx5ICovCisjIGRlZmluZSBUVl9FTkNfU0RQX0ZJWAkJCSgxIDw8IDExKQorLyoqCisgKiBFbmFibGVzIGEgZml4IGZvciB0aGUgOTE1R00gb25seS4KKyAqCisgKiBOb3Qgc3VyZSB3aGF0IGl0IGRvZXMuCisgKi8KKyMgZGVmaW5lIFRWX0VOQ19DMF9GSVgJCQkoMSA8PCAxMCkKKy8qKiBCaXRzIHRoYXQgbXVzdCBiZSBwcmVzZXJ2ZWQgYnkgc29mdHdhcmUgKi8KKyMgZGVmaW5lIFRWX0NUTF9TQVZFCQkJKCgzIDw8IDgpIHwgKDMgPDwgNikpCisjIGRlZmluZSBUVl9GVVNFX1NUQVRFX01BU0sJCSgzIDw8IDQpCisvKiogUmVhZC1vbmx5IHN0YXRlIHRoYXQgcmVwb3J0cyBhbGwgZmVhdHVyZXMgZW5hYmxlZCAqLworIyBkZWZpbmUgVFZfRlVTRV9TVEFURV9FTkFCTEVECQkoMCA8PCA0KQorLyoqIFJlYWQtb25seSBzdGF0ZSB0aGF0IHJlcG9ydHMgdGhhdCBNYWNyb3Zpc2lvbiBpcyBkaXNhYmxlZCBpbiBoYXJkd2FyZSovCisjIGRlZmluZSBUVl9GVVNFX1NUQVRFX05PX01BQ1JPVklTSU9OCSgxIDw8IDQpCisvKiogUmVhZC1vbmx5IHN0YXRlIHRoYXQgcmVwb3J0cyB0aGF0IFRWLW91dCBpcyBkaXNhYmxlZCBpbiBoYXJkd2FyZS4gKi8KKyMgZGVmaW5lIFRWX0ZVU0VfU1RBVEVfRElTQUJMRUQJCSgyIDw8IDQpCisvKiogTm9ybWFsIG9wZXJhdGlvbiAqLworIyBkZWZpbmUgVFZfVEVTVF9NT0RFX05PUk1BTAkJKDAgPDwgMCkKKy8qKiBFbmNvZGVyIHRlc3QgcGF0dGVybiAxIC0gY29tYm8gcGF0dGVybiAqLworIyBkZWZpbmUgVFZfVEVTVF9NT0RFX1BBVFRFUk5fMQkJKDEgPDwgMCkKKy8qKiBFbmNvZGVyIHRlc3QgcGF0dGVybiAyIC0gZnVsbCBzY3JlZW4gdmVydGljYWwgNzUlIGNvbG9yIGJhcnMgKi8KKyMgZGVmaW5lIFRWX1RFU1RfTU9ERV9QQVRURVJOXzIJCSgyIDw8IDApCisvKiogRW5jb2RlciB0ZXN0IHBhdHRlcm4gMyAtIGZ1bGwgc2NyZWVuIGhvcml6b250YWwgNzUlIGNvbG9yIGJhcnMgKi8KKyMgZGVmaW5lIFRWX1RFU1RfTU9ERV9QQVRURVJOXzMJCSgzIDw8IDApCisvKiogRW5jb2RlciB0ZXN0IHBhdHRlcm4gNCAtIHJhbmRvbSBub2lzZSAqLworIyBkZWZpbmUgVFZfVEVTVF9NT0RFX1BBVFRFUk5fNAkJKDQgPDwgMCkKKy8qKiBFbmNvZGVyIHRlc3QgcGF0dGVybiA1IC0gbGluZWFyIGNvbG9yIHJhbXBzICovCisjIGRlZmluZSBUVl9URVNUX01PREVfUEFUVEVSTl81CQkoNSA8PCAwKQorLyoqCisgKiBUaGlzIHRlc3QgbW9kZSBmb3JjZXMgdGhlIERBQ3MgdG8gNTAlIG9mIGZ1bGwgb3V0cHV0LgorICoKKyAqIFRoaXMgaXMgdXNlZCBmb3IgbG9hZCBkZXRlY3Rpb24gaW4gY29tYmluYXRpb24gd2l0aCBUVkRBQ19TRU5TRV9NQVNLCisgKi8KKyMgZGVmaW5lIFRWX1RFU1RfTU9ERV9NT05JVE9SX0RFVEVDVAkoNyA8PCAwKQorIyBkZWZpbmUgVFZfVEVTVF9NT0RFX01BU0sJCSg3IDw8IDApCisKKyNkZWZpbmUgVFZfREFDCQkJMHg2ODAwNAorLyoqCisgKiBSZXBvcnRzIHRoYXQgREFDIHN0YXRlIGNoYW5nZSBsb2dpYyBoYXMgcmVwb3J0ZWQgY2hhbmdlIChSTykuCisgKgorICogVGhpcyBnZXRzIGNsZWFyZWQgd2hlbiBUVl9EQUNfU1RBVEVfRU4gaXMgY2xlYXJlZAorKi8KKyMgZGVmaW5lIFRWREFDX1NUQVRFX0NIRwkJKDEgPDwgMzEpCisjIGRlZmluZSBUVkRBQ19TRU5TRV9NQVNLCQkoNyA8PCAyOCkKKy8qKiBSZXBvcnRzIHRoYXQgREFDIEEgdm9sdGFnZSBpcyBhYm92ZSB0aGUgZGV0ZWN0IHRocmVzaG9sZCAqLworIyBkZWZpbmUgVFZEQUNfQV9TRU5TRQkJCSgxIDw8IDMwKQorLyoqIFJlcG9ydHMgdGhhdCBEQUMgQiB2b2x0YWdlIGlzIGFib3ZlIHRoZSBkZXRlY3QgdGhyZXNob2xkICovCisjIGRlZmluZSBUVkRBQ19CX1NFTlNFCQkJKDEgPDwgMjkpCisvKiogUmVwb3J0cyB0aGF0IERBQyBDIHZvbHRhZ2UgaXMgYWJvdmUgdGhlIGRldGVjdCB0aHJlc2hvbGQgKi8KKyMgZGVmaW5lIFRWREFDX0NfU0VOU0UJCQkoMSA8PCAyOCkKKy8qKgorICogRW5hYmxlcyBEQUMgc3RhdGUgZGV0ZWN0aW9uIGxvZ2ljLCBmb3IgbG9hZC1iYXNlZCBUViBkZXRlY3Rpb24uCisgKgorICogVGhlIFBMTCBvZiB0aGUgY2hvc2VuIHBpcGUgKGluIFRWX0NUTCkgbXVzdCBiZSBydW5uaW5nLCBhbmQgdGhlIGVuY29kZXIgc2V0CisgKiB0byBvZmYsIGZvciBsb2FkIGRldGVjdGlvbiB0byB3b3JrLgorICovCisjIGRlZmluZSBUVkRBQ19TVEFURV9DSEdfRU4JCSgxIDw8IDI3KQorLyoqIFNldHMgdGhlIERBQyBBIHNlbnNlIHZhbHVlIHRvIGhpZ2ggKi8KKyMgZGVmaW5lIFRWREFDX0FfU0VOU0VfQ1RMCQkoMSA8PCAyNikKKy8qKiBTZXRzIHRoZSBEQUMgQiBzZW5zZSB2YWx1ZSB0byBoaWdoICovCisjIGRlZmluZSBUVkRBQ19CX1NFTlNFX0NUTAkJKDEgPDwgMjUpCisvKiogU2V0cyB0aGUgREFDIEMgc2Vuc2UgdmFsdWUgdG8gaGlnaCAqLworIyBkZWZpbmUgVFZEQUNfQ19TRU5TRV9DVEwJCSgxIDw8IDI0KQorLyoqIE92ZXJyaWRlcyB0aGUgRU5DX0VOQUJMRSBhbmQgREFDIHZvbHRhZ2UgbGV2ZWxzICovCisjIGRlZmluZSBEQUNfQ1RMX09WRVJSSURFCQkoMSA8PCA3KQorLyoqIFNldHMgdGhlIHNsZXcgcmF0ZS4gIE11c3QgYmUgcHJlc2VydmVkIGluIHNvZnR3YXJlICovCisjIGRlZmluZSBFTkNfVFZEQUNfU0xFV19GQVNUCQkoMSA8PCA2KQorIyBkZWZpbmUgREFDX0FfMV8zX1YJCQkoMCA8PCA0KQorIyBkZWZpbmUgREFDX0FfMV8xX1YJCQkoMSA8PCA0KQorIyBkZWZpbmUgREFDX0FfMF83X1YJCQkoMiA8PCA0KQorIyBkZWZpbmUgREFDX0FfT0ZGCQkJKDMgPDwgNCkKKyMgZGVmaW5lIERBQ19CXzFfM19WCQkJKDAgPDwgMikKKyMgZGVmaW5lIERBQ19CXzFfMV9WCQkJKDEgPDwgMikKKyMgZGVmaW5lIERBQ19CXzBfN19WCQkJKDIgPDwgMikKKyMgZGVmaW5lIERBQ19CX09GRgkJCSgzIDw8IDIpCisjIGRlZmluZSBEQUNfQ18xXzNfVgkJCSgwIDw8IDApCisjIGRlZmluZSBEQUNfQ18xXzFfVgkJCSgxIDw8IDApCisjIGRlZmluZSBEQUNfQ18wXzdfVgkJCSgyIDw8IDApCisjIGRlZmluZSBEQUNfQ19PRkYJCQkoMyA8PCAwKQorCisvKioKKyAqIENTQyBjb2VmZmljaWVudHMgYXJlIHN0b3JlZCBpbiBhIGZsb2F0aW5nIHBvaW50IGZvcm1hdCB3aXRoIDkgYml0cyBvZgorICogbWFudGlzc2EgYW5kIDIgb3IgMyBiaXRzIG9mIGV4cG9uZW50LiAgVGhlIGV4cG9uZW50IGlzIHJlcHJlc2VudGVkIGFzIDIqKi1uLAorICogd2hlcmUgMi1iaXQgZXhwb25lbnRzIGFyZSB1bnNpZ25lZCBuLCBhbmQgMy1iaXQgZXhwb25lbnRzIGFyZSBzaWduZWQgbiB3aXRoCisgKiAtMSAoMHgzKSBiZWluZyB0aGUgb25seSBsZWdhbCBuZWdhdGl2ZSB2YWx1ZS4KKyAqLworI2RlZmluZSBUVl9DU0NfWQkJMHg2ODAxMAorIyBkZWZpbmUgVFZfUllfTUFTSwkJCTB4MDdmZjAwMDAKKyMgZGVmaW5lIFRWX1JZX1NISUZUCQkJMTYKKyMgZGVmaW5lIFRWX0dZX01BU0sJCQkweDAwMDAwZmZmCisjIGRlZmluZSBUVl9HWV9TSElGVAkJCTAKKworI2RlZmluZSBUVl9DU0NfWTIJCTB4NjgwMTQKKyMgZGVmaW5lIFRWX0JZX01BU0sJCQkweDA3ZmYwMDAwCisjIGRlZmluZSBUVl9CWV9TSElGVAkJCTE2CisvKioKKyAqIFkgYXR0ZW51YXRpb24gZm9yIGNvbXBvbmVudCB2aWRlby4KKyAqCisgKiBTdG9yZWQgaW4gMS45IGZpeGVkIHBvaW50LgorICovCisjIGRlZmluZSBUVl9BWV9NQVNLCQkJMHgwMDAwMDNmZgorIyBkZWZpbmUgVFZfQVlfU0hJRlQJCQkwCisKKyNkZWZpbmUgVFZfQ1NDX1UJCTB4NjgwMTgKKyMgZGVmaW5lIFRWX1JVX01BU0sJCQkweDA3ZmYwMDAwCisjIGRlZmluZSBUVl9SVV9TSElGVAkJCTE2CisjIGRlZmluZSBUVl9HVV9NQVNLCQkJMHgwMDAwMDdmZgorIyBkZWZpbmUgVFZfR1VfU0hJRlQJCQkwCisKKyNkZWZpbmUgVFZfQ1NDX1UyCQkweDY4MDFjCisjIGRlZmluZSBUVl9CVV9NQVNLCQkJMHgwN2ZmMDAwMAorIyBkZWZpbmUgVFZfQlVfU0hJRlQJCQkxNgorLyoqCisgKiBVIGF0dGVudWF0aW9uIGZvciBjb21wb25lbnQgdmlkZW8uCisgKgorICogU3RvcmVkIGluIDEuOSBmaXhlZCBwb2ludC4KKyAqLworIyBkZWZpbmUgVFZfQVVfTUFTSwkJCTB4MDAwMDAzZmYKKyMgZGVmaW5lIFRWX0FVX1NISUZUCQkJMAorCisjZGVmaW5lIFRWX0NTQ19WCQkweDY4MDIwCisjIGRlZmluZSBUVl9SVl9NQVNLCQkJMHgwZmZmMDAwMAorIyBkZWZpbmUgVFZfUlZfU0hJRlQJCQkxNgorIyBkZWZpbmUgVFZfR1ZfTUFTSwkJCTB4MDAwMDA3ZmYKKyMgZGVmaW5lIFRWX0dWX1NISUZUCQkJMAorCisjZGVmaW5lIFRWX0NTQ19WMgkJMHg2ODAyNAorIyBkZWZpbmUgVFZfQlZfTUFTSwkJCTB4MDdmZjAwMDAKKyMgZGVmaW5lIFRWX0JWX1NISUZUCQkJMTYKKy8qKgorICogViBhdHRlbnVhdGlvbiBmb3IgY29tcG9uZW50IHZpZGVvLgorICoKKyAqIFN0b3JlZCBpbiAxLjkgZml4ZWQgcG9pbnQuCisgKi8KKyMgZGVmaW5lIFRWX0FWX01BU0sJCQkweDAwMDAwN2ZmCisjIGRlZmluZSBUVl9BVl9TSElGVAkJCTAKKworI2RlZmluZSBUVl9DTFJfS05PQlMJCTB4NjgwMjgKKy8qKiAycy1jb21wbGVtZW50IGJyaWdodG5lc3MgYWRqdXN0bWVudCAqLworIyBkZWZpbmUgVFZfQlJJR0hUTkVTU19NQVNLCQkweGZmMDAwMDAwCisjIGRlZmluZSBUVl9CUklHSFRORVNTX1NISUZUCQkyNAorLyoqIENvbnRyYXN0IGFkanVzdG1lbnQsIGFzIGEgMi42IHVuc2lnbmVkIGZsb2F0aW5nIHBvaW50IG51bWJlciAqLworIyBkZWZpbmUgVFZfQ09OVFJBU1RfTUFTSwkJMHgwMGZmMDAwMAorIyBkZWZpbmUgVFZfQ09OVFJBU1RfU0hJRlQJCTE2CisvKiogU2F0dXJhdGlvbiBhZGp1c3RtZW50LCBhcyBhIDIuNiB1bnNpZ25lZCBmbG9hdGluZyBwb2ludCBudW1iZXIgKi8KKyMgZGVmaW5lIFRWX1NBVFVSQVRJT05fTUFTSwkJMHgwMDAwZmYwMAorIyBkZWZpbmUgVFZfU0FUVVJBVElPTl9TSElGVAkJOAorLyoqIEh1ZSBhZGp1c3RtZW50LCBhcyBhbiBpbnRlZ2VyIHBoYXNlIGFuZ2xlIGluIGRlZ3JlZXMgKi8KKyMgZGVmaW5lIFRWX0hVRV9NQVNLCQkJMHgwMDAwMDBmZgorIyBkZWZpbmUgVFZfSFVFX1NISUZUCQkJMAorCisjZGVmaW5lIFRWX0NMUl9MRVZFTAkJMHg2ODAyYworLyoqIENvbnRyb2xzIHRoZSBEQUMgbGV2ZWwgZm9yIGJsYWNrICovCisjIGRlZmluZSBUVl9CTEFDS19MRVZFTF9NQVNLCQkweDAxZmYwMDAwCisjIGRlZmluZSBUVl9CTEFDS19MRVZFTF9TSElGVAkJMTYKKy8qKiBDb250cm9scyB0aGUgREFDIGxldmVsIGZvciBibGFua2luZyAqLworIyBkZWZpbmUgVFZfQkxBTktfTEVWRUxfTUFTSwkJMHgwMDAwMDFmZgorIyBkZWZpbmUgVFZfQkxBTktfTEVWRUxfU0hJRlQJCTAKKworI2RlZmluZSBUVl9IX0NUTF8xCQkweDY4MDMwCisvKiogTnVtYmVyIG9mIHBpeGVscyBpbiB0aGUgaHN5bmMuICovCisjIGRlZmluZSBUVl9IU1lOQ19FTkRfTUFTSwkJMHgxZmZmMDAwMAorIyBkZWZpbmUgVFZfSFNZTkNfRU5EX1NISUZUCQkxNgorLyoqIFRvdGFsIG51bWJlciBvZiBwaXhlbHMgbWludXMgb25lIGluIHRoZSBsaW5lIChkaXNwbGF5IGFuZCBibGFua2luZykuICovCisjIGRlZmluZSBUVl9IVE9UQUxfTUFTSwkJCTB4MDAwMDFmZmYKKyMgZGVmaW5lIFRWX0hUT1RBTF9TSElGVAkJMAorCisjZGVmaW5lIFRWX0hfQ1RMXzIJCTB4NjgwMzQKKy8qKiBFbmFibGVzIHRoZSBjb2xvcmJ1cnN0IChuZWVkZWQgZm9yIG5vbi1jb21wb25lbnQgY29sb3IpICovCisjIGRlZmluZSBUVl9CVVJTVF9FTkEJCQkoMSA8PCAzMSkKKy8qKiBPZmZzZXQgb2YgdGhlIGNvbG9yYnVyc3QgZnJvbSB0aGUgc3RhcnQgb2YgaHN5bmMsIGluIHBpeGVscyBtaW51cyBvbmUuICovCisjIGRlZmluZSBUVl9IQlVSU1RfU1RBUlRfU0hJRlQJCTE2CisjIGRlZmluZSBUVl9IQlVSU1RfU1RBUlRfTUFTSwkJMHgxZmZmMDAwMAorLyoqIExlbmd0aCBvZiB0aGUgY29sb3JidXJzdCAqLworIyBkZWZpbmUgVFZfSEJVUlNUX0xFTl9TSElGVAkJMAorIyBkZWZpbmUgVFZfSEJVUlNUX0xFTl9NQVNLCQkweDAwMDFmZmYKKworI2RlZmluZSBUVl9IX0NUTF8zCQkweDY4MDM4CisvKiogRW5kIG9mIGhibGFuaywgbWVhc3VyZWQgaW4gcGl4ZWxzIG1pbnVzIG9uZSBmcm9tIHN0YXJ0IG9mIGhzeW5jICovCisjIGRlZmluZSBUVl9IQkxBTktfRU5EX1NISUZUCQkxNgorIyBkZWZpbmUgVFZfSEJMQU5LX0VORF9NQVNLCQkweDFmZmYwMDAwCisvKiogU3RhcnQgb2YgaGJsYW5rLCBtZWFzdXJlZCBpbiBwaXhlbHMgbWludXMgb25lIGZyb20gc3RhcnQgb2YgaHN5bmMgKi8KKyMgZGVmaW5lIFRWX0hCTEFOS19TVEFSVF9TSElGVAkJMAorIyBkZWZpbmUgVFZfSEJMQU5LX1NUQVJUX01BU0sJCTB4MDAwMWZmZgorCisjZGVmaW5lIFRWX1ZfQ1RMXzEJCTB4NjgwM2MKKy8qKiBYWFggKi8KKyMgZGVmaW5lIFRWX05CUl9FTkRfU0hJRlQJCTE2CisjIGRlZmluZSBUVl9OQlJfRU5EX01BU0sJCTB4MDdmZjAwMDAKKy8qKiBYWFggKi8KKyMgZGVmaW5lIFRWX1ZJX0VORF9GMV9TSElGVAkJOAorIyBkZWZpbmUgVFZfVklfRU5EX0YxX01BU0sJCTB4MDAwMDNmMDAKKy8qKiBYWFggKi8KKyMgZGVmaW5lIFRWX1ZJX0VORF9GMl9TSElGVAkJMAorIyBkZWZpbmUgVFZfVklfRU5EX0YyX01BU0sJCTB4MDAwMDAwM2YKKworI2RlZmluZSBUVl9WX0NUTF8yCQkweDY4MDQwCisvKiogTGVuZ3RoIG9mIHZzeW5jLCBpbiBoYWxmIGxpbmVzICovCisjIGRlZmluZSBUVl9WU1lOQ19MRU5fTUFTSwkJMHgwN2ZmMDAwMAorIyBkZWZpbmUgVFZfVlNZTkNfTEVOX1NISUZUCQkxNgorLyoqIE9mZnNldCBvZiB0aGUgc3RhcnQgb2YgdnN5bmMgaW4gZmllbGQgMSwgbWVhc3VyZWQgaW4gb25lIGxlc3MgdGhhbiB0aGUKKyAqIG51bWJlciBvZiBoYWxmIGxpbmVzLgorICovCisjIGRlZmluZSBUVl9WU1lOQ19TVEFSVF9GMV9NQVNLCQkweDAwMDA3ZjAwCisjIGRlZmluZSBUVl9WU1lOQ19TVEFSVF9GMV9TSElGVAk4CisvKioKKyAqIE9mZnNldCBvZiB0aGUgc3RhcnQgb2YgdnN5bmMgaW4gZmllbGQgMiwgbWVhc3VyZWQgaW4gb25lIGxlc3MgdGhhbiB0aGUKKyAqIG51bWJlciBvZiBoYWxmIGxpbmVzLgorICovCisjIGRlZmluZSBUVl9WU1lOQ19TVEFSVF9GMl9NQVNLCQkweDAwMDAwMDdmCisjIGRlZmluZSBUVl9WU1lOQ19TVEFSVF9GMl9TSElGVAkwCisKKyNkZWZpbmUgVFZfVl9DVExfMwkJMHg2ODA0NAorLyoqIEVuYWJsZXMgZ2VuZXJhdGlvbiBvZiB0aGUgZXF1YWxpemF0aW9uIHNpZ25hbCAqLworIyBkZWZpbmUgVFZfRVFVQUxfRU5BCQkJKDEgPDwgMzEpCisvKiogTGVuZ3RoIG9mIHZzeW5jLCBpbiBoYWxmIGxpbmVzICovCisjIGRlZmluZSBUVl9WRVFfTEVOX01BU0sJCTB4MDA3ZjAwMDAKKyMgZGVmaW5lIFRWX1ZFUV9MRU5fU0hJRlQJCTE2CisvKiogT2Zmc2V0IG9mIHRoZSBzdGFydCBvZiBlcXVhbGl6YXRpb24gaW4gZmllbGQgMSwgbWVhc3VyZWQgaW4gb25lIGxlc3MgdGhhbgorICogdGhlIG51bWJlciBvZiBoYWxmIGxpbmVzLgorICovCisjIGRlZmluZSBUVl9WRVFfU1RBUlRfRjFfTUFTSwkJMHgwMDA3ZjAwCisjIGRlZmluZSBUVl9WRVFfU1RBUlRfRjFfU0hJRlQJCTgKKy8qKgorICogT2Zmc2V0IG9mIHRoZSBzdGFydCBvZiBlcXVhbGl6YXRpb24gaW4gZmllbGQgMiwgbWVhc3VyZWQgaW4gb25lIGxlc3MgdGhhbgorICogdGhlIG51bWJlciBvZiBoYWxmIGxpbmVzLgorICovCisjIGRlZmluZSBUVl9WRVFfU1RBUlRfRjJfTUFTSwkJMHgwMDAwMDdmCisjIGRlZmluZSBUVl9WRVFfU1RBUlRfRjJfU0hJRlQJCTAKKworI2RlZmluZSBUVl9WX0NUTF80CQkweDY4MDQ4CisvKioKKyAqIE9mZnNldCB0byBzdGFydCBvZiB2ZXJ0aWNhbCBjb2xvcmJ1cnN0LCBtZWFzdXJlZCBpbiBvbmUgbGVzcyB0aGFuIHRoZQorICogbnVtYmVyIG9mIGxpbmVzIGZyb20gdmVydGljYWwgc3RhcnQuCisgKi8KKyMgZGVmaW5lIFRWX1ZCVVJTVF9TVEFSVF9GMV9NQVNLCTB4MDAzZjAwMDAKKyMgZGVmaW5lIFRWX1ZCVVJTVF9TVEFSVF9GMV9TSElGVAkxNgorLyoqCisgKiBPZmZzZXQgdG8gdGhlIGVuZCBvZiB2ZXJ0aWNhbCBjb2xvcmJ1cnN0LCBtZWFzdXJlZCBpbiBvbmUgbGVzcyB0aGFuIHRoZQorICogbnVtYmVyIG9mIGxpbmVzIGZyb20gdGhlIHN0YXJ0IG9mIE5CUi4KKyAqLworIyBkZWZpbmUgVFZfVkJVUlNUX0VORF9GMV9NQVNLCQkweDAwMDAwMGZmCisjIGRlZmluZSBUVl9WQlVSU1RfRU5EX0YxX1NISUZUCQkwCisKKyNkZWZpbmUgVFZfVl9DVExfNQkJMHg2ODA0YworLyoqCisgKiBPZmZzZXQgdG8gc3RhcnQgb2YgdmVydGljYWwgY29sb3JidXJzdCwgbWVhc3VyZWQgaW4gb25lIGxlc3MgdGhhbiB0aGUKKyAqIG51bWJlciBvZiBsaW5lcyBmcm9tIHZlcnRpY2FsIHN0YXJ0LgorICovCisjIGRlZmluZSBUVl9WQlVSU1RfU1RBUlRfRjJfTUFTSwkweDAwM2YwMDAwCisjIGRlZmluZSBUVl9WQlVSU1RfU1RBUlRfRjJfU0hJRlQJMTYKKy8qKgorICogT2Zmc2V0IHRvIHRoZSBlbmQgb2YgdmVydGljYWwgY29sb3JidXJzdCwgbWVhc3VyZWQgaW4gb25lIGxlc3MgdGhhbiB0aGUKKyAqIG51bWJlciBvZiBsaW5lcyBmcm9tIHRoZSBzdGFydCBvZiBOQlIuCisgKi8KKyMgZGVmaW5lIFRWX1ZCVVJTVF9FTkRfRjJfTUFTSwkJMHgwMDAwMDBmZgorIyBkZWZpbmUgVFZfVkJVUlNUX0VORF9GMl9TSElGVAkJMAorCisjZGVmaW5lIFRWX1ZfQ1RMXzYJCTB4NjgwNTAKKy8qKgorICogT2Zmc2V0IHRvIHN0YXJ0IG9mIHZlcnRpY2FsIGNvbG9yYnVyc3QsIG1lYXN1cmVkIGluIG9uZSBsZXNzIHRoYW4gdGhlCisgKiBudW1iZXIgb2YgbGluZXMgZnJvbSB2ZXJ0aWNhbCBzdGFydC4KKyAqLworIyBkZWZpbmUgVFZfVkJVUlNUX1NUQVJUX0YzX01BU0sJMHgwMDNmMDAwMAorIyBkZWZpbmUgVFZfVkJVUlNUX1NUQVJUX0YzX1NISUZUCTE2CisvKioKKyAqIE9mZnNldCB0byB0aGUgZW5kIG9mIHZlcnRpY2FsIGNvbG9yYnVyc3QsIG1lYXN1cmVkIGluIG9uZSBsZXNzIHRoYW4gdGhlCisgKiBudW1iZXIgb2YgbGluZXMgZnJvbSB0aGUgc3RhcnQgb2YgTkJSLgorICovCisjIGRlZmluZSBUVl9WQlVSU1RfRU5EX0YzX01BU0sJCTB4MDAwMDAwZmYKKyMgZGVmaW5lIFRWX1ZCVVJTVF9FTkRfRjNfU0hJRlQJCTAKKworI2RlZmluZSBUVl9WX0NUTF83CQkweDY4MDU0CisvKioKKyAqIE9mZnNldCB0byBzdGFydCBvZiB2ZXJ0aWNhbCBjb2xvcmJ1cnN0LCBtZWFzdXJlZCBpbiBvbmUgbGVzcyB0aGFuIHRoZQorICogbnVtYmVyIG9mIGxpbmVzIGZyb20gdmVydGljYWwgc3RhcnQuCisgKi8KKyMgZGVmaW5lIFRWX1ZCVVJTVF9TVEFSVF9GNF9NQVNLCTB4MDAzZjAwMDAKKyMgZGVmaW5lIFRWX1ZCVVJTVF9TVEFSVF9GNF9TSElGVAkxNgorLyoqCisgKiBPZmZzZXQgdG8gdGhlIGVuZCBvZiB2ZXJ0aWNhbCBjb2xvcmJ1cnN0LCBtZWFzdXJlZCBpbiBvbmUgbGVzcyB0aGFuIHRoZQorICogbnVtYmVyIG9mIGxpbmVzIGZyb20gdGhlIHN0YXJ0IG9mIE5CUi4KKyAqLworIyBkZWZpbmUgVFZfVkJVUlNUX0VORF9GNF9NQVNLCQkweDAwMDAwMGZmCisjIGRlZmluZSBUVl9WQlVSU1RfRU5EX0Y0X1NISUZUCQkwCisKKyNkZWZpbmUgVFZfU0NfQ1RMXzEJCTB4NjgwNjAKKy8qKiBUdXJucyBvbiB0aGUgZmlyc3Qgc3ViY2FycmllciBwaGFzZSBnZW5lcmF0aW9uIEREQSAqLworIyBkZWZpbmUgVFZfU0NfRERBMV9FTgkJCSgxIDw8IDMxKQorLyoqIFR1cm5zIG9uIHRoZSBmaXJzdCBzdWJjYXJyaWVyIHBoYXNlIGdlbmVyYXRpb24gRERBICovCisjIGRlZmluZSBUVl9TQ19EREEyX0VOCQkJKDEgPDwgMzApCisvKiogVHVybnMgb24gdGhlIGZpcnN0IHN1YmNhcnJpZXIgcGhhc2UgZ2VuZXJhdGlvbiBEREEgKi8KKyMgZGVmaW5lIFRWX1NDX0REQTNfRU4JCQkoMSA8PCAyOSkKKy8qKiBTZXRzIHRoZSBzdWJjYXJyaWVyIEREQSB0byByZXNldCBmcmVxdWVuY3kgZXZlcnkgb3RoZXIgZmllbGQgKi8KKyMgZGVmaW5lIFRWX1NDX1JFU0VUX0VWRVJZXzIJCSgwIDw8IDI0KQorLyoqIFNldHMgdGhlIHN1YmNhcnJpZXIgRERBIHRvIHJlc2V0IGZyZXF1ZW5jeSBldmVyeSBmb3VydGggZmllbGQgKi8KKyMgZGVmaW5lIFRWX1NDX1JFU0VUX0VWRVJZXzQJCSgxIDw8IDI0KQorLyoqIFNldHMgdGhlIHN1YmNhcnJpZXIgRERBIHRvIHJlc2V0IGZyZXF1ZW5jeSBldmVyeSBlaWdodGggZmllbGQgKi8KKyMgZGVmaW5lIFRWX1NDX1JFU0VUX0VWRVJZXzgJCSgyIDw8IDI0KQorLyoqIFNldHMgdGhlIHN1YmNhcnJpZXIgRERBIHRvIG5ldmVyIHJlc2V0IHRoZSBmcmVxdWVuY3kgKi8KKyMgZGVmaW5lIFRWX1NDX1JFU0VUX05FVkVSCQkoMyA8PCAyNCkKKy8qKiBTZXRzIHRoZSBwZWFrIGFtcGxpdHVkZSBvZiB0aGUgY29sb3JidXJzdC4qLworIyBkZWZpbmUgVFZfQlVSU1RfTEVWRUxfTUFTSwkJMHgwMGZmMDAwMAorIyBkZWZpbmUgVFZfQlVSU1RfTEVWRUxfU0hJRlQJCTE2CisvKiogU2V0cyB0aGUgaW5jcmVtZW50IG9mIHRoZSBmaXJzdCBzdWJjYXJyaWVyIHBoYXNlIGdlbmVyYXRpb24gRERBICovCisjIGRlZmluZSBUVl9TQ0REQTFfSU5DX01BU0sJCTB4MDAwMDBmZmYKKyMgZGVmaW5lIFRWX1NDRERBMV9JTkNfU0hJRlQJCTAKKworI2RlZmluZSBUVl9TQ19DVExfMgkJMHg2ODA2NAorLyoqIFNldHMgdGhlIHJvbGxvdmVyIGZvciB0aGUgc2Vjb25kIHN1YmNhcnJpZXIgcGhhc2UgZ2VuZXJhdGlvbiBEREEgKi8KKyMgZGVmaW5lIFRWX1NDRERBMl9TSVpFX01BU0sJCTB4N2ZmZjAwMDAKKyMgZGVmaW5lIFRWX1NDRERBMl9TSVpFX1NISUZUCQkxNgorLyoqIFNldHMgdGhlIGluY3JlZW50IG9mIHRoZSBzZWNvbmQgc3ViY2FycmllciBwaGFzZSBnZW5lcmF0aW9uIEREQSAqLworIyBkZWZpbmUgVFZfU0NEREEyX0lOQ19NQVNLCQkweDAwMDA3ZmZmCisjIGRlZmluZSBUVl9TQ0REQTJfSU5DX1NISUZUCQkwCisKKyNkZWZpbmUgVFZfU0NfQ1RMXzMJCTB4NjgwNjgKKy8qKiBTZXRzIHRoZSByb2xsb3ZlciBmb3IgdGhlIHRoaXJkIHN1YmNhcnJpZXIgcGhhc2UgZ2VuZXJhdGlvbiBEREEgKi8KKyMgZGVmaW5lIFRWX1NDRERBM19TSVpFX01BU0sJCTB4N2ZmZjAwMDAKKyMgZGVmaW5lIFRWX1NDRERBM19TSVpFX1NISUZUCQkxNgorLyoqIFNldHMgdGhlIGluY3JlZW50IG9mIHRoZSB0aGlyZCBzdWJjYXJyaWVyIHBoYXNlIGdlbmVyYXRpb24gRERBICovCisjIGRlZmluZSBUVl9TQ0REQTNfSU5DX01BU0sJCTB4MDAwMDdmZmYKKyMgZGVmaW5lIFRWX1NDRERBM19JTkNfU0hJRlQJCTAKKworI2RlZmluZSBUVl9XSU5fUE9TCQkweDY4MDcwCisvKiogWCBjb29yZGluYXRlIG9mIHRoZSBkaXNwbGF5IGZyb20gdGhlIHN0YXJ0IG9mIGhvcml6b250YWwgYWN0aXZlICovCisjIGRlZmluZSBUVl9YUE9TX01BU0sJCQkweDFmZmYwMDAwCisjIGRlZmluZSBUVl9YUE9TX1NISUZUCQkJMTYKKy8qKiBZIGNvb3JkaW5hdGUgb2YgdGhlIGRpc3BsYXkgZnJvbSB0aGUgc3RhcnQgb2YgdmVydGljYWwgYWN0aXZlIChOQlIpICovCisjIGRlZmluZSBUVl9ZUE9TX01BU0sJCQkweDAwMDAwZmZmCisjIGRlZmluZSBUVl9ZUE9TX1NISUZUCQkJMAorCisjZGVmaW5lIFRWX1dJTl9TSVpFCQkweDY4MDc0CisvKiogSG9yaXpvbnRhbCBzaXplIG9mIHRoZSBkaXNwbGF5IHdpbmRvdywgbWVhc3VyZWQgaW4gcGl4ZWxzKi8KKyMgZGVmaW5lIFRWX1hTSVpFX01BU0sJCQkweDFmZmYwMDAwCisjIGRlZmluZSBUVl9YU0laRV9TSElGVAkJCTE2CisvKioKKyAqIFZlcnRpY2FsIHNpemUgb2YgdGhlIGRpc3BsYXkgd2luZG93LCBtZWFzdXJlZCBpbiBwaXhlbHMuCisgKgorICogTXVzdCBiZSBldmVuIGZvciBpbnRlcmxhY2VkIG1vZGVzLgorICovCisjIGRlZmluZSBUVl9ZU0laRV9NQVNLCQkJMHgwMDAwMGZmZgorIyBkZWZpbmUgVFZfWVNJWkVfU0hJRlQJCQkwCisKKyNkZWZpbmUgVFZfRklMVEVSX0NUTF8xCQkweDY4MDgwCisvKioKKyAqIEVuYWJsZXMgYXV0b21hdGljIHNjYWxpbmcgY2FsY3VsYXRpb24uCisgKgorICogSWYgc2V0LCB0aGUgcmVzdCBvZiB0aGUgcmVnaXN0ZXJzIGFyZSBpZ25vcmVkLCBhbmQgdGhlIGNhbGN1bGF0ZWQgdmFsdWVzIGNhbgorICogYmUgcmVhZCBiYWNrIGZyb20gdGhlIHJlZ2lzdGVyLgorICovCisjIGRlZmluZSBUVl9BVVRPX1NDQUxFCQkJKDEgPDwgMzEpCisvKioKKyAqIERpc2FibGVzIHRoZSB2ZXJ0aWNhbCBmaWx0ZXIuCisgKgorICogVGhpcyBpcyByZXF1aXJlZCBvbiBtb2RlcyBtb3JlIHRoYW4gMTAyNCBwaXhlbHMgd2lkZSAqLworIyBkZWZpbmUgVFZfVl9GSUxURVJfQllQQVNTCQkoMSA8PCAyOSkKKy8qKiBFbmFibGVzIGFkYXB0aXZlIHZlcnRpY2FsIGZpbHRlcmluZyAqLworIyBkZWZpbmUgVFZfVkFEQVBUCQkJKDEgPDwgMjgpCisjIGRlZmluZSBUVl9WQURBUFRfTU9ERV9NQVNLCQkoMyA8PCAyNikKKy8qKiBTZWxlY3RzIHRoZSBsZWFzdCBhZGFwdGl2ZSB2ZXJ0aWNhbCBmaWx0ZXJpbmcgbW9kZSAqLworIyBkZWZpbmUgVFZfVkFEQVBUX01PREVfTEVBU1QJCSgwIDw8IDI2KQorLyoqIFNlbGVjdHMgdGhlIG1vZGVyYXRlbHkgYWRhcHRpdmUgdmVydGljYWwgZmlsdGVyaW5nIG1vZGUgKi8KKyMgZGVmaW5lIFRWX1ZBREFQVF9NT0RFX01PREVSQVRFCSgxIDw8IDI2KQorLyoqIFNlbGVjdHMgdGhlIG1vc3QgYWRhcHRpdmUgdmVydGljYWwgZmlsdGVyaW5nIG1vZGUgKi8KKyMgZGVmaW5lIFRWX1ZBREFQVF9NT0RFX01PU1QJCSgzIDw8IDI2KQorLyoqCisgKiBTZXRzIHRoZSBob3Jpem9udGFsIHNjYWxpbmcgZmFjdG9yLgorICoKKyAqIFRoaXMgc2hvdWxkIGJlIHRoZSBmcmFjdGlvbmFsIHBhcnQgb2YgdGhlIGhvcml6b250YWwgc2NhbGluZyBmYWN0b3IgZGl2aWRlZAorICogYnkgdGhlIG92ZXJzYW1wbGluZyByYXRlLiAgVFZfSFNDQUxFIHNob3VsZCBiZSBsZXNzIHRoYW4gMSwgYW5kIHNldCB0bzoKKyAqCisgKiAoc3JjIHdpZHRoIC0gMSkgLyAoKG92ZXJzYW1wbGUgKiBkZXN0IHdpZHRoKSAtIDEpCisgKi8KKyMgZGVmaW5lIFRWX0hTQ0FMRV9GUkFDX01BU0sJCTB4MDAwMDNmZmYKKyMgZGVmaW5lIFRWX0hTQ0FMRV9GUkFDX1NISUZUCQkwCisKKyNkZWZpbmUgVFZfRklMVEVSX0NUTF8yCQkweDY4MDg0CisvKioKKyAqIFNldHMgdGhlIGludGVnZXIgcGFydCBvZiB0aGUgMy4xNSBmaXhlZC1wb2ludCB2ZXJ0aWNhbCBzY2FsaW5nIGZhY3Rvci4KKyAqCisgKiBUVl9WU0NBTEUgc2hvdWxkIGJlIChzcmMgaGVpZ2h0IC0gMSkgLyAoKGludGVybGFjZSAqIGRlc3QgaGVpZ2h0KSAtIDEpCisgKi8KKyMgZGVmaW5lIFRWX1ZTQ0FMRV9JTlRfTUFTSwkJMHgwMDAzODAwMAorIyBkZWZpbmUgVFZfVlNDQUxFX0lOVF9TSElGVAkJMTUKKy8qKgorICogU2V0cyB0aGUgZnJhY3Rpb25hbCBwYXJ0IG9mIHRoZSAzLjE1IGZpeGVkLXBvaW50IHZlcnRpY2FsIHNjYWxpbmcgZmFjdG9yLgorICoKKyAqIFxzYSBUVl9WU0NBTEVfSU5UX01BU0sKKyAqLworIyBkZWZpbmUgVFZfVlNDQUxFX0ZSQUNfTUFTSwkJMHgwMDAwN2ZmZgorIyBkZWZpbmUgVFZfVlNDQUxFX0ZSQUNfU0hJRlQJCTAKKworI2RlZmluZSBUVl9GSUxURVJfQ1RMXzMJCTB4NjgwODgKKy8qKgorICogU2V0cyB0aGUgaW50ZWdlciBwYXJ0IG9mIHRoZSAzLjE1IGZpeGVkLXBvaW50IHZlcnRpY2FsIHNjYWxpbmcgZmFjdG9yLgorICoKKyAqIFRWX1ZTQ0FMRSBzaG91bGQgYmUgKHNyYyBoZWlnaHQgLSAxKSAvICgxLzQgKiAoZGVzdCBoZWlnaHQgLSAxKSkKKyAqCisgKiBGb3IgcHJvZ3Jlc3NpdmUgbW9kZXMsIFRWX1ZTQ0FMRV9JUF9JTlQgc2hvdWxkIGJlIHNldCB0byB6ZXJvZXMuCisgKi8KKyMgZGVmaW5lIFRWX1ZTQ0FMRV9JUF9JTlRfTUFTSwkJMHgwMDAzODAwMAorIyBkZWZpbmUgVFZfVlNDQUxFX0lQX0lOVF9TSElGVAkJMTUKKy8qKgorICogU2V0cyB0aGUgZnJhY3Rpb25hbCBwYXJ0IG9mIHRoZSAzLjE1IGZpeGVkLXBvaW50IHZlcnRpY2FsIHNjYWxpbmcgZmFjdG9yLgorICoKKyAqIEZvciBwcm9ncmVzc2l2ZSBtb2RlcywgVFZfVlNDQUxFX0lQX0lOVCBzaG91bGQgYmUgc2V0IHRvIHplcm9lcy4KKyAqCisgKiBcc2EgVFZfVlNDQUxFX0lQX0lOVF9NQVNLCisgKi8KKyMgZGVmaW5lIFRWX1ZTQ0FMRV9JUF9GUkFDX01BU0sJCTB4MDAwMDdmZmYKKyMgZGVmaW5lIFRWX1ZTQ0FMRV9JUF9GUkFDX1NISUZUCQkwCisKKyNkZWZpbmUgVFZfQ0NfQ09OVFJPTAkJMHg2ODA5MAorIyBkZWZpbmUgVFZfQ0NfRU5BQkxFCQkJKDEgPDwgMzEpCisvKioKKyAqIFNwZWNpZmllcyB3aGljaCBmaWVsZCB0byBzZW5kIHRoZSBDQyBkYXRhIGluLgorICoKKyAqIENDIGRhdGEgaXMgdXN1YWxseSBzZW50IGluIGZpZWxkIDAuCisgKi8KKyMgZGVmaW5lIFRWX0NDX0ZJRF9NQVNLCQkJKDEgPDwgMjcpCisjIGRlZmluZSBUVl9DQ19GSURfU0hJRlQJCTI3CisvKiogU2V0cyB0aGUgaG9yaXpvbnRhbCBwb3NpdGlvbiBvZiB0aGUgQ0MgZGF0YS4gIFVzdWFsbHkgMTM1LiAqLworIyBkZWZpbmUgVFZfQ0NfSE9GRl9NQVNLCQkweDAzZmYwMDAwCisjIGRlZmluZSBUVl9DQ19IT0ZGX1NISUZUCQkxNgorLyoqIFNldHMgdGhlIHZlcnRpY2FsIHBvc2l0aW9uIG9mIHRoZSBDQyBkYXRhLiAgVXN1YWxseSAyMSAqLworIyBkZWZpbmUgVFZfQ0NfTElORV9NQVNLCQkweDAwMDAwMDNmCisjIGRlZmluZSBUVl9DQ19MSU5FX1NISUZUCQkwCisKKyNkZWZpbmUgVFZfQ0NfREFUQQkJMHg2ODA5NAorIyBkZWZpbmUgVFZfQ0NfUkRZCQkJKDEgPDwgMzEpCisvKiogU2Vjb25kIHdvcmQgb2YgQ0MgZGF0YSB0byBiZSB0cmFuc21pdHRlZC4gKi8KKyMgZGVmaW5lIFRWX0NDX0RBVEFfMl9NQVNLCQkweDAwN2YwMDAwCisjIGRlZmluZSBUVl9DQ19EQVRBXzJfU0hJRlQJCTE2CisvKiogRmlyc3Qgd29yZCBvZiBDQyBkYXRhIHRvIGJlIHRyYW5zbWl0dGVkLiAqLworIyBkZWZpbmUgVFZfQ0NfREFUQV8xX01BU0sJCTB4MDAwMDAwN2YKKyMgZGVmaW5lIFRWX0NDX0RBVEFfMV9TSElGVAkJMAorCisjZGVmaW5lIFRWX0hfTFVNQV8wCQkweDY4MTAwCisjZGVmaW5lIFRWX0hfTFVNQV81OQkJMHg2ODFlYworI2RlZmluZSBUVl9IX0NIUk9NQV8wCQkweDY4MjAwCisjZGVmaW5lIFRWX0hfQ0hST01BXzU5CQkweDY4MmVjCisjZGVmaW5lIFRWX1ZfTFVNQV8wCQkweDY4MzAwCisjZGVmaW5lIFRWX1ZfTFVNQV80MgkJMHg2ODNhOAorI2RlZmluZSBUVl9WX0NIUk9NQV8wCQkweDY4NDAwCisjZGVmaW5lIFRWX1ZfQ0hST01BXzQyCQkweDY4NGE4CisKKy8qIERpc3BsYXkgJiBjdXJzb3IgY29udHJvbCAqLworCisvKiBQaXBlIEEgKi8KKyNkZWZpbmUgUElQRUFEU0wJCTB4NzAwMDAKKyNkZWZpbmUgUElQRUFDT05GCQkweDcwMDA4CisjZGVmaW5lICAgUElQRUFDT05GX0VOQUJMRQkoMTw8MzEpCisjZGVmaW5lICAgUElQRUFDT05GX0RJU0FCTEUJMAorI2RlZmluZSAgIFBJUEVBQ09ORl9ET1VCTEVfV0lERQkoMTw8MzApCisjZGVmaW5lICAgSTk2NV9QSVBFQ09ORl9BQ1RJVkUJKDE8PDMwKQorI2RlZmluZSAgIFBJUEVBQ09ORl9TSU5HTEVfV0lERQkwCisjZGVmaW5lICAgUElQRUFDT05GX1BJUEVfVU5MT0NLRUQgMAorI2RlZmluZSAgIFBJUEVBQ09ORl9QSVBFX0xPQ0tFRAkoMTw8MjUpCisjZGVmaW5lICAgUElQRUFDT05GX1BBTEVUVEUJMAorI2RlZmluZSAgIFBJUEVBQ09ORl9HQU1NQQkJKDE8PDI0KQorI2RlZmluZSAgIFBJUEVDT05GX0ZPUkNFX0JPUkRFUgkoMTw8MjUpCisjZGVmaW5lICAgUElQRUNPTkZfUFJPR1JFU1NJVkUJKDAgPDwgMjEpCisjZGVmaW5lICAgUElQRUNPTkZfSU5URVJMQUNFX1dfRklFTERfSU5ESUNBVElPTgkoNiA8PCAyMSkKKyNkZWZpbmUgICBQSVBFQ09ORl9JTlRFUkxBQ0VfRklFTERfMF9PTkxZCQkoNyA8PCAyMSkKKyNkZWZpbmUgUElQRUFTVEFUCQkweDcwMDI0CisjZGVmaW5lICAgUElQRV9GSUZPX1VOREVSUlVOX1NUQVRVUwkJKDFVTDw8MzEpCisjZGVmaW5lICAgUElQRV9DUkNfRVJST1JfRU5BQkxFCQkJKDFVTDw8MjkpCisjZGVmaW5lICAgUElQRV9DUkNfRE9ORV9FTkFCTEUJCQkoMVVMPDwyOCkKKyNkZWZpbmUgICBQSVBFX0dNQlVTX0VWRU5UX0VOQUJMRQkJKDFVTDw8MjcpCisjZGVmaW5lICAgUElQRV9IT1RQTFVHX0lOVEVSUlVQVF9FTkFCTEUJCSgxVUw8PDI2KQorI2RlZmluZSAgIFBJUEVfVlNZTkNfSU5URVJSVVBUX0VOQUJMRQkJKDFVTDw8MjUpCisjZGVmaW5lICAgUElQRV9ESVNQTEFZX0xJTkVfQ09NUEFSRV9FTkFCTEUJKDFVTDw8MjQpCisjZGVmaW5lICAgUElQRV9EUFNUX0VWRU5UX0VOQUJMRQkJKDFVTDw8MjMpCisjZGVmaW5lICAgUElQRV9MRUdBQ1lfQkxDX0VWRU5UX0VOQUJMRQkJKDFVTDw8MjIpCisjZGVmaW5lICAgUElQRV9PRERfRklFTERfSU5URVJSVVBUX0VOQUJMRQkoMVVMPDwyMSkKKyNkZWZpbmUgICBQSVBFX0VWRU5fRklFTERfSU5URVJSVVBUX0VOQUJMRQkoMVVMPDwyMCkKKyNkZWZpbmUgICBQSVBFX0hPVFBMVUdfVFZfSU5URVJSVVBUX0VOQUJMRQkoMVVMPDwxOCkgLyogcHJlLTk2NSAqLworI2RlZmluZSAgIFBJUEVfU1RBUlRfVkJMQU5LX0lOVEVSUlVQVF9FTkFCTEUJKDFVTDw8MTgpIC8qIDk2NSBvciBsYXRlciAqLworI2RlZmluZSAgIFBJUEVfVkJMQU5LX0lOVEVSUlVQVF9FTkFCTEUJCSgxVUw8PDE3KQorI2RlZmluZSAgIFBJUEVfT1ZFUkxBWV9VUERBVEVEX0VOQUJMRQkJKDFVTDw8MTYpCisjZGVmaW5lICAgUElQRV9DUkNfRVJST1JfSU5URVJSVVBUX1NUQVRVUwkoMVVMPDwxMykKKyNkZWZpbmUgICBQSVBFX0NSQ19ET05FX0lOVEVSUlVQVF9TVEFUVVMJKDFVTDw8MTIpCisjZGVmaW5lICAgUElQRV9HTUJVU19JTlRFUlJVUFRfU1RBVFVTCQkoMVVMPDwxMSkKKyNkZWZpbmUgICBQSVBFX0hPVFBMVUdfSU5URVJSVVBUX1NUQVRVUwkJKDFVTDw8MTApCisjZGVmaW5lICAgUElQRV9WU1lOQ19JTlRFUlJVUFRfU1RBVFVTCQkoMVVMPDw5KQorI2RlZmluZSAgIFBJUEVfRElTUExBWV9MSU5FX0NPTVBBUkVfU1RBVFVTCSgxVUw8PDgpCisjZGVmaW5lICAgUElQRV9EUFNUX0VWRU5UX1NUQVRVUwkJKDFVTDw8NykKKyNkZWZpbmUgICBQSVBFX0xFR0FDWV9CTENfRVZFTlRfU1RBVFVTCQkoMVVMPDw2KQorI2RlZmluZSAgIFBJUEVfT0REX0ZJRUxEX0lOVEVSUlVQVF9TVEFUVVMJKDFVTDw8NSkKKyNkZWZpbmUgICBQSVBFX0VWRU5fRklFTERfSU5URVJSVVBUX1NUQVRVUwkoMVVMPDw0KQorI2RlZmluZSAgIFBJUEVfSE9UUExVR19UVl9JTlRFUlJVUFRfU1RBVFVTCSgxVUw8PDIpIC8qIHByZS05NjUgKi8KKyNkZWZpbmUgICBQSVBFX1NUQVJUX1ZCTEFOS19JTlRFUlJVUFRfU1RBVFVTCSgxVUw8PDIpIC8qIDk2NSBvciBsYXRlciAqLworI2RlZmluZSAgIFBJUEVfVkJMQU5LX0lOVEVSUlVQVF9TVEFUVVMJCSgxVUw8PDEpCisjZGVmaW5lICAgUElQRV9PVkVSTEFZX1VQREFURURfU1RBVFVTCQkoMVVMPDwwKQorCisjZGVmaW5lIERTUEFSQgkJCTB4NzAwMzAKKyNkZWZpbmUgICBEU1BBUkJfQ1NUQVJUX01BU0sJKDB4N2YgPDwgNykKKyNkZWZpbmUgICBEU1BBUkJfQ1NUQVJUX1NISUZUCTcKKyNkZWZpbmUgICBEU1BBUkJfQlNUQVJUX01BU0sJKDB4N2YpCisjZGVmaW5lICAgRFNQQVJCX0JTVEFSVF9TSElGVAkwCisvKgorICogVGhlIHR3byBwaXBlIGZyYW1lIGNvdW50ZXIgcmVnaXN0ZXJzIGFyZSBub3Qgc3luY2hyb25pemVkLCBzbworICogcmVhZGluZyBhIHN0YWJsZSB2YWx1ZSBpcyBzb21ld2hhdCB0cmlja3kuIFRoZSBmb2xsb3dpbmcgY29kZQorICogc2hvdWxkIHdvcms6CisgKgorICogIGRvIHsKKyAqICAgIGhpZ2gxID0gKChJTlJFRyhQSVBFQUZSQU1FSElHSCkgJiBQSVBFX0ZSQU1FX0hJR0hfTUFTSykgPj4KKyAqICAgICAgICAgICAgIFBJUEVfRlJBTUVfSElHSF9TSElGVDsKKyAqICAgIGxvdzEgPSAgKChJTlJFRyhQSVBFQUZSQU1FUElYRUwpICYgUElQRV9GUkFNRV9MT1dfTUFTSykgPj4KKyAqICAgICAgICAgICAgIFBJUEVfRlJBTUVfTE9XX1NISUZUKTsKKyAqICAgIGhpZ2gyID0gKChJTlJFRyhQSVBFQUZSQU1FSElHSCkgJiBQSVBFX0ZSQU1FX0hJR0hfTUFTSykgPj4KKyAqICAgICAgICAgICAgIFBJUEVfRlJBTUVfSElHSF9TSElGVCk7CisgKiAgfSB3aGlsZSAoaGlnaDEgIT0gaGlnaDIpOworICogIGZyYW1lID0gKGhpZ2gxIDw8IDgpIHwgbG93MTsKKyAqLworI2RlZmluZSBQSVBFQUZSQU1FSElHSCAgICAgICAgICAweDcwMDQwCisjZGVmaW5lICAgUElQRV9GUkFNRV9ISUdIX01BU0sgICAgMHgwMDAwZmZmZgorI2RlZmluZSAgIFBJUEVfRlJBTUVfSElHSF9TSElGVCAgIDAKKyNkZWZpbmUgUElQRUFGUkFNRVBJWEVMICAgICAgICAgMHg3MDA0NAorI2RlZmluZSAgIFBJUEVfRlJBTUVfTE9XX01BU0sgICAgIDB4ZmYwMDAwMDAKKyNkZWZpbmUgICBQSVBFX0ZSQU1FX0xPV19TSElGVCAgICAyNAorI2RlZmluZSAgIFBJUEVfUElYRUxfTUFTSyAgICAgICAgIDB4MDBmZmZmZmYKKyNkZWZpbmUgICBQSVBFX1BJWEVMX1NISUZUICAgICAgICAwCisKKy8qIEN1cnNvciBBICYgQiByZWdzICovCisjZGVmaW5lIENVUkFDTlRSCQkweDcwMDgwCisjZGVmaW5lICAgQ1VSU09SX01PREVfRElTQUJMRSAgIDB4MDAKKyNkZWZpbmUgICBDVVJTT1JfTU9ERV82NF8zMkJfQVggMHgwNworI2RlZmluZSAgIENVUlNPUl9NT0RFXzY0X0FSR0JfQVggKCgxIDw8IDUpIHwgQ1VSU09SX01PREVfNjRfMzJCX0FYKQorI2RlZmluZSAgIE1DVVJTT1JfR0FNTUFfRU5BQkxFICAoMSA8PCAyNikKKyNkZWZpbmUgQ1VSQUJBU0UJCTB4NzAwODQKKyNkZWZpbmUgQ1VSQVBPUwkJCTB4NzAwODgKKyNkZWZpbmUgICBDVVJTT1JfUE9TX01BU0sgICAgICAgMHgwMDdGRgorI2RlZmluZSAgIENVUlNPUl9QT1NfU0lHTiAgICAgICAweDgwMDAKKyNkZWZpbmUgICBDVVJTT1JfWF9TSElGVCAgICAgICAgMAorI2RlZmluZSAgIENVUlNPUl9ZX1NISUZUICAgICAgICAxNgorI2RlZmluZSBDVVJCQ05UUgkJMHg3MDBjMAorI2RlZmluZSBDVVJCQkFTRQkJMHg3MDBjNAorI2RlZmluZSBDVVJCUE9TCQkJMHg3MDBjOAorCisvKiBEaXNwbGF5IEEgY29udHJvbCAqLworI2RlZmluZSBEU1BBQ05UUiAgICAgICAgICAgICAgICAweDcwMTgwCisjZGVmaW5lICAgRElTUExBWV9QTEFORV9FTkFCTEUJCQkoMTw8MzEpCisjZGVmaW5lICAgRElTUExBWV9QTEFORV9ESVNBQkxFCQkJMAorI2RlZmluZSAgIERJU1BQTEFORV9HQU1NQV9FTkFCTEUJCSgxPDwzMCkKKyNkZWZpbmUgICBESVNQUExBTkVfR0FNTUFfRElTQUJMRQkJMAorI2RlZmluZSAgIERJU1BQTEFORV9QSVhGT1JNQVRfTUFTSwkJKDB4Zjw8MjYpCisjZGVmaW5lICAgRElTUFBMQU5FXzhCUFAJCQkoMHgyPDwyNikKKyNkZWZpbmUgICBESVNQUExBTkVfMTVfMTZCUFAJCQkoMHg0PDwyNikKKyNkZWZpbmUgICBESVNQUExBTkVfMTZCUFAJCQkoMHg1PDwyNikKKyNkZWZpbmUgICBESVNQUExBTkVfMzJCUFBfTk9fQUxQSEEJCSgweDY8PDI2KQorI2RlZmluZSAgIERJU1BQTEFORV8zMkJQUAkJCSgweDc8PDI2KQorI2RlZmluZSAgIERJU1BQTEFORV9TVEVSRU9fRU5BQkxFCQkoMTw8MjUpCisjZGVmaW5lICAgRElTUFBMQU5FX1NURVJFT19ESVNBQkxFCQkwCisjZGVmaW5lICAgRElTUFBMQU5FX1NFTF9QSVBFX01BU0sJCSgxPDwyNCkKKyNkZWZpbmUgICBESVNQUExBTkVfU0VMX1BJUEVfQQkJCTAKKyNkZWZpbmUgICBESVNQUExBTkVfU0VMX1BJUEVfQgkJCSgxPDwyNCkKKyNkZWZpbmUgICBESVNQUExBTkVfU1JDX0tFWV9FTkFCTEUJCSgxPDwyMikKKyNkZWZpbmUgICBESVNQUExBTkVfU1JDX0tFWV9ESVNBQkxFCQkwCisjZGVmaW5lICAgRElTUFBMQU5FX0xJTkVfRE9VQkxFCQkJKDE8PDIwKQorI2RlZmluZSAgIERJU1BQTEFORV9OT19MSU5FX0RPVUJMRQkJMAorI2RlZmluZSAgIERJU1BQTEFORV9TVEVSRU9fUE9MQVJJVFlfRklSU1QJMAorI2RlZmluZSAgIERJU1BQTEFORV9TVEVSRU9fUE9MQVJJVFlfU0VDT05ECSgxPDwxOCkKKyNkZWZpbmUgRFNQQUFERFIJCTB4NzAxODQKKyNkZWZpbmUgRFNQQVNUUklERQkJMHg3MDE4OAorI2RlZmluZSBEU1BBUE9TCQkJMHg3MDE4QyAvKiByZXNlcnZlZCAqLworI2RlZmluZSBEU1BBU0laRQkJMHg3MDE5MAorI2RlZmluZSBEU1BBU1VSRgkJMHg3MDE5QyAvKiA5NjUrIG9ubHkgKi8KKyNkZWZpbmUgRFNQQVRJTEVPRkYJCTB4NzAxQTQgLyogOTY1KyBvbmx5ICovCisKKy8qIFZCSU9TIGZsYWdzICovCisjZGVmaW5lIFNXRjAwCQkJMHg3MTQxMAorI2RlZmluZSBTV0YwMQkJCTB4NzE0MTQKKyNkZWZpbmUgU1dGMDIJCQkweDcxNDE4CisjZGVmaW5lIFNXRjAzCQkJMHg3MTQxYworI2RlZmluZSBTV0YwNAkJCTB4NzE0MjAKKyNkZWZpbmUgU1dGMDUJCQkweDcxNDI0CisjZGVmaW5lIFNXRjA2CQkJMHg3MTQyOAorI2RlZmluZSBTV0YxMAkJCTB4NzA0MTAKKyNkZWZpbmUgU1dGMTEJCQkweDcwNDE0CisjZGVmaW5lIFNXRjE0CQkJMHg3MTQyMAorI2RlZmluZSBTV0YzMAkJCTB4NzI0MTQKKyNkZWZpbmUgU1dGMzEJCQkweDcyNDE4CisjZGVmaW5lIFNXRjMyCQkJMHg3MjQxYworCisvKiBQaXBlIEIgKi8KKyNkZWZpbmUgUElQRUJEU0wJCTB4NzEwMDAKKyNkZWZpbmUgUElQRUJDT05GCQkweDcxMDA4CisjZGVmaW5lIFBJUEVCU1RBVAkJMHg3MTAyNAorI2RlZmluZSBQSVBFQkZSQU1FSElHSAkJMHg3MTA0MAorI2RlZmluZSBQSVBFQkZSQU1FUElYRUwJCTB4NzEwNDQKKworLyogRGlzcGxheSBCIGNvbnRyb2wgKi8KKyNkZWZpbmUgRFNQQkNOVFIJCTB4NzExODAKKyNkZWZpbmUgICBESVNQUExBTkVfQUxQSEFfVFJBTlNfRU5BQkxFCQkoMTw8MTUpCisjZGVmaW5lICAgRElTUFBMQU5FX0FMUEhBX1RSQU5TX0RJU0FCTEUJCTAKKyNkZWZpbmUgICBESVNQUExBTkVfU1BSSVRFX0FCT1ZFX0RJU1BMQVkJMAorI2RlZmluZSAgIERJU1BQTEFORV9TUFJJVEVfQUJPVkVfT1ZFUkxBWQkoMSkKKyNkZWZpbmUgRFNQQkFERFIJCTB4NzExODQKKyNkZWZpbmUgRFNQQlNUUklERQkJMHg3MTE4OAorI2RlZmluZSBEU1BCUE9TCQkJMHg3MTE4QworI2RlZmluZSBEU1BCU0laRQkJMHg3MTE5MAorI2RlZmluZSBEU1BCU1VSRgkJMHg3MTE5QworI2RlZmluZSBEU1BCVElMRU9GRgkJMHg3MTFBNAorCisvKiBWQklPUyByZWdzICovCisjZGVmaW5lIFZHQUNOVFJMCQkweDcxNDAwCisjIGRlZmluZSBWR0FfRElTUF9ESVNBQkxFCQkJKDEgPDwgMzEpCisjIGRlZmluZSBWR0FfMlhfTU9ERQkJCQkoMSA8PCAzMCkKKyMgZGVmaW5lIFZHQV9QSVBFX0JfU0VMRUNUCQkJKDEgPDwgMjkpCisKKyNlbmRpZiAvKiBfSTkxNV9SRUdfSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfc3VzcGVuZC5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9zdXNwZW5kLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjAzZmU3NAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfc3VzcGVuZC5jCkBAIC0wLDAgKzEsNTA5IEBACisvKgorICoKKyAqIENvcHlyaWdodCAyMDA4IChjKSBJbnRlbCBDb3Jwb3JhdGlvbgorICogICBKZXNzZSBCYXJuZXMgPGpiYXJuZXNAdmlydHVvdXNnZWVrLm9yZz4KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZworICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLAorICogZGlzdHJpYnV0ZSwgc3ViIGxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0bworICogcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvCisgKiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUKKyAqIG5leHQgcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zCisgKiBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTi1JTkZSSU5HRU1FTlQuCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUVU5HU1RFTiBHUkFQSElDUyBBTkQvT1IgSVRTIFNVUFBMSUVSUyBCRSBMSUFCTEUgRk9SCisgKiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwKKyAqIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFCisgKiBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKyAqLworCisjaW5jbHVkZSAiZHJtUC5oIgorI2luY2x1ZGUgImRybS5oIgorI2luY2x1ZGUgImk5MTVfZHJtLmgiCisjaW5jbHVkZSAiaTkxNV9kcnYuaCIKKworc3RhdGljIGJvb2wgaTkxNV9waXBlX2VuYWJsZWQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgZW51bSBwaXBlIHBpcGUpCit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKworCWlmIChwaXBlID09IFBJUEVfQSkKKwkJcmV0dXJuIChJOTE1X1JFQUQoRFBMTF9BKSAmIERQTExfVkNPX0VOQUJMRSk7CisJZWxzZQorCQlyZXR1cm4gKEk5MTVfUkVBRChEUExMX0IpICYgRFBMTF9WQ09fRU5BQkxFKTsKK30KKworc3RhdGljIHZvaWQgaTkxNV9zYXZlX3BhbGV0dGUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgZW51bSBwaXBlIHBpcGUpCit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwl1bnNpZ25lZCBsb25nIHJlZyA9IChwaXBlID09IFBJUEVfQSA/IFBBTEVUVEVfQSA6IFBBTEVUVEVfQik7CisJdTMyICphcnJheTsKKwlpbnQgaTsKKworCWlmICghaTkxNV9waXBlX2VuYWJsZWQoZGV2LCBwaXBlKSkKKwkJcmV0dXJuOworCisJaWYgKHBpcGUgPT0gUElQRV9BKQorCQlhcnJheSA9IGRldl9wcml2LT5zYXZlX3BhbGV0dGVfYTsKKwllbHNlCisJCWFycmF5ID0gZGV2X3ByaXYtPnNhdmVfcGFsZXR0ZV9iOworCisJZm9yKGkgPSAwOyBpIDwgMjU2OyBpKyspCisJCWFycmF5W2ldID0gSTkxNV9SRUFEKHJlZyArIChpIDw8IDIpKTsKK30KKworc3RhdGljIHZvaWQgaTkxNV9yZXN0b3JlX3BhbGV0dGUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgZW51bSBwaXBlIHBpcGUpCit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwl1bnNpZ25lZCBsb25nIHJlZyA9IChwaXBlID09IFBJUEVfQSA/IFBBTEVUVEVfQSA6IFBBTEVUVEVfQik7CisJdTMyICphcnJheTsKKwlpbnQgaTsKKworCWlmICghaTkxNV9waXBlX2VuYWJsZWQoZGV2LCBwaXBlKSkKKwkJcmV0dXJuOworCisJaWYgKHBpcGUgPT0gUElQRV9BKQorCQlhcnJheSA9IGRldl9wcml2LT5zYXZlX3BhbGV0dGVfYTsKKwllbHNlCisJCWFycmF5ID0gZGV2X3ByaXYtPnNhdmVfcGFsZXR0ZV9iOworCisJZm9yKGkgPSAwOyBpIDwgMjU2OyBpKyspCisJCUk5MTVfV1JJVEUocmVnICsgKGkgPDwgMiksIGFycmF5W2ldKTsKK30KKworc3RhdGljIHU4IGk5MTVfcmVhZF9pbmRleGVkKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHUxNiBpbmRleF9wb3J0LCB1MTYgZGF0YV9wb3J0LCB1OCByZWcpCit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKworCUk5MTVfV1JJVEU4KGluZGV4X3BvcnQsIHJlZyk7CisJcmV0dXJuIEk5MTVfUkVBRDgoZGF0YV9wb3J0KTsKK30KKworc3RhdGljIHU4IGk5MTVfcmVhZF9hcihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB1MTYgc3QwMSwgdTggcmVnLCB1MTYgcGFsZXR0ZV9lbmFibGUpCit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKworCUk5MTVfUkVBRDgoc3QwMSk7CisJSTkxNV9XUklURTgoVkdBX0FSX0lOREVYLCBwYWxldHRlX2VuYWJsZSB8IHJlZyk7CisJcmV0dXJuIEk5MTVfUkVBRDgoVkdBX0FSX0RBVEFfUkVBRCk7Cit9CisKK3N0YXRpYyB2b2lkIGk5MTVfd3JpdGVfYXIoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdTE2IHN0MDEsIHU4IHJlZywgdTggdmFsLCB1MTYgcGFsZXR0ZV9lbmFibGUpCit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKworCUk5MTVfUkVBRDgoc3QwMSk7CisJSTkxNV9XUklURTgoVkdBX0FSX0lOREVYLCBwYWxldHRlX2VuYWJsZSB8IHJlZyk7CisJSTkxNV9XUklURTgoVkdBX0FSX0RBVEFfV1JJVEUsIHZhbCk7Cit9CisKK3N0YXRpYyB2b2lkIGk5MTVfd3JpdGVfaW5kZXhlZChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB1MTYgaW5kZXhfcG9ydCwgdTE2IGRhdGFfcG9ydCwgdTggcmVnLCB1OCB2YWwpCit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKworCUk5MTVfV1JJVEU4KGluZGV4X3BvcnQsIHJlZyk7CisJSTkxNV9XUklURTgoZGF0YV9wb3J0LCB2YWwpOworfQorCitzdGF0aWMgdm9pZCBpOTE1X3NhdmVfdmdhKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlpbnQgaTsKKwl1MTYgY3JfaW5kZXgsIGNyX2RhdGEsIHN0MDE7CisKKwkvKiBWR0EgY29sb3IgcGFsZXR0ZSByZWdpc3RlcnMgKi8KKwlkZXZfcHJpdi0+c2F2ZURBQ01BU0sgPSBJOTE1X1JFQUQ4KFZHQV9EQUNNQVNLKTsKKwkvKiBEQUNDUlggYXV0b21hdGljYWxseSBpbmNyZW1lbnRzIGR1cmluZyByZWFkICovCisJSTkxNV9XUklURTgoVkdBX0RBQ1JYLCAwKTsKKwkvKiBSZWFkIDMgYnl0ZXMgb2YgY29sb3IgZGF0YSBmcm9tIGVhY2ggaW5kZXggKi8KKwlmb3IgKGkgPSAwOyBpIDwgMjU2ICogMzsgaSsrKQorCQlkZXZfcHJpdi0+c2F2ZURBQ0RBVEFbaV0gPSBJOTE1X1JFQUQ4KFZHQV9EQUNEQVRBKTsKKworCS8qIE1TUiBiaXRzICovCisJZGV2X3ByaXYtPnNhdmVNU1IgPSBJOTE1X1JFQUQ4KFZHQV9NU1JfUkVBRCk7CisJaWYgKGRldl9wcml2LT5zYXZlTVNSICYgVkdBX01TUl9DR0FfTU9ERSkgeworCQljcl9pbmRleCA9IFZHQV9DUl9JTkRFWF9DR0E7CisJCWNyX2RhdGEgPSBWR0FfQ1JfREFUQV9DR0E7CisJCXN0MDEgPSBWR0FfU1QwMV9DR0E7CisJfSBlbHNlIHsKKwkJY3JfaW5kZXggPSBWR0FfQ1JfSU5ERVhfTURBOworCQljcl9kYXRhID0gVkdBX0NSX0RBVEFfTURBOworCQlzdDAxID0gVkdBX1NUMDFfTURBOworCX0KKworCS8qIENSVCBjb250cm9sbGVyIHJlZ3MgKi8KKwlpOTE1X3dyaXRlX2luZGV4ZWQoZGV2LCBjcl9pbmRleCwgY3JfZGF0YSwgMHgxMSwKKwkJCSAgIGk5MTVfcmVhZF9pbmRleGVkKGRldiwgY3JfaW5kZXgsIGNyX2RhdGEsIDB4MTEpICYKKwkJCSAgICh+MHg4MCkpOworCWZvciAoaSA9IDA7IGkgPD0gMHgyNDsgaSsrKQorCQlkZXZfcHJpdi0+c2F2ZUNSW2ldID0KKwkJCWk5MTVfcmVhZF9pbmRleGVkKGRldiwgY3JfaW5kZXgsIGNyX2RhdGEsIGkpOworCS8qIE1ha2Ugc3VyZSB3ZSBkb24ndCB0dXJuIG9mZiBDUiBncm91cCAwIHdyaXRlcyAqLworCWRldl9wcml2LT5zYXZlQ1JbMHgxMV0gJj0gfjB4ODA7CisKKwkvKiBBdHRyaWJ1dGUgY29udHJvbGxlciByZWdpc3RlcnMgKi8KKwlJOTE1X1JFQUQ4KHN0MDEpOworCWRldl9wcml2LT5zYXZlQVJfSU5ERVggPSBJOTE1X1JFQUQ4KFZHQV9BUl9JTkRFWCk7CisJZm9yIChpID0gMDsgaSA8PSAweDE0OyBpKyspCisJCWRldl9wcml2LT5zYXZlQVJbaV0gPSBpOTE1X3JlYWRfYXIoZGV2LCBzdDAxLCBpLCAwKTsKKwlJOTE1X1JFQUQ4KHN0MDEpOworCUk5MTVfV1JJVEU4KFZHQV9BUl9JTkRFWCwgZGV2X3ByaXYtPnNhdmVBUl9JTkRFWCk7CisJSTkxNV9SRUFEOChzdDAxKTsKKworCS8qIEdyYXBoaWNzIGNvbnRyb2xsZXIgcmVnaXN0ZXJzICovCisJZm9yIChpID0gMDsgaSA8IDk7IGkrKykKKwkJZGV2X3ByaXYtPnNhdmVHUltpXSA9CisJCQlpOTE1X3JlYWRfaW5kZXhlZChkZXYsIFZHQV9HUl9JTkRFWCwgVkdBX0dSX0RBVEEsIGkpOworCisJZGV2X3ByaXYtPnNhdmVHUlsweDEwXSA9CisJCWk5MTVfcmVhZF9pbmRleGVkKGRldiwgVkdBX0dSX0lOREVYLCBWR0FfR1JfREFUQSwgMHgxMCk7CisJZGV2X3ByaXYtPnNhdmVHUlsweDExXSA9CisJCWk5MTVfcmVhZF9pbmRleGVkKGRldiwgVkdBX0dSX0lOREVYLCBWR0FfR1JfREFUQSwgMHgxMSk7CisJZGV2X3ByaXYtPnNhdmVHUlsweDE4XSA9CisJCWk5MTVfcmVhZF9pbmRleGVkKGRldiwgVkdBX0dSX0lOREVYLCBWR0FfR1JfREFUQSwgMHgxOCk7CisKKwkvKiBTZXF1ZW5jZXIgcmVnaXN0ZXJzICovCisJZm9yIChpID0gMDsgaSA8IDg7IGkrKykKKwkJZGV2X3ByaXYtPnNhdmVTUltpXSA9CisJCQlpOTE1X3JlYWRfaW5kZXhlZChkZXYsIFZHQV9TUl9JTkRFWCwgVkdBX1NSX0RBVEEsIGkpOworfQorCitzdGF0aWMgdm9pZCBpOTE1X3Jlc3RvcmVfdmdhKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlpbnQgaTsKKwl1MTYgY3JfaW5kZXgsIGNyX2RhdGEsIHN0MDE7CisKKwkvKiBNU1IgYml0cyAqLworCUk5MTVfV1JJVEU4KFZHQV9NU1JfV1JJVEUsIGRldl9wcml2LT5zYXZlTVNSKTsKKwlpZiAoZGV2X3ByaXYtPnNhdmVNU1IgJiBWR0FfTVNSX0NHQV9NT0RFKSB7CisJCWNyX2luZGV4ID0gVkdBX0NSX0lOREVYX0NHQTsKKwkJY3JfZGF0YSA9IFZHQV9DUl9EQVRBX0NHQTsKKwkJc3QwMSA9IFZHQV9TVDAxX0NHQTsKKwl9IGVsc2UgeworCQljcl9pbmRleCA9IFZHQV9DUl9JTkRFWF9NREE7CisJCWNyX2RhdGEgPSBWR0FfQ1JfREFUQV9NREE7CisJCXN0MDEgPSBWR0FfU1QwMV9NREE7CisJfQorCisJLyogU2VxdWVuY2VyIHJlZ2lzdGVycywgZG9uJ3Qgd3JpdGUgU1IwNyAqLworCWZvciAoaSA9IDA7IGkgPCA3OyBpKyspCisJCWk5MTVfd3JpdGVfaW5kZXhlZChkZXYsIFZHQV9TUl9JTkRFWCwgVkdBX1NSX0RBVEEsIGksCisJCQkJICAgZGV2X3ByaXYtPnNhdmVTUltpXSk7CisKKwkvKiBDUlQgY29udHJvbGxlciByZWdzICovCisJLyogRW5hYmxlIENSIGdyb3VwIDAgd3JpdGVzICovCisJaTkxNV93cml0ZV9pbmRleGVkKGRldiwgY3JfaW5kZXgsIGNyX2RhdGEsIDB4MTEsIGRldl9wcml2LT5zYXZlQ1JbMHgxMV0pOworCWZvciAoaSA9IDA7IGkgPD0gMHgyNDsgaSsrKQorCQlpOTE1X3dyaXRlX2luZGV4ZWQoZGV2LCBjcl9pbmRleCwgY3JfZGF0YSwgaSwgZGV2X3ByaXYtPnNhdmVDUltpXSk7CisKKwkvKiBHcmFwaGljcyBjb250cm9sbGVyIHJlZ3MgKi8KKwlmb3IgKGkgPSAwOyBpIDwgOTsgaSsrKQorCQlpOTE1X3dyaXRlX2luZGV4ZWQoZGV2LCBWR0FfR1JfSU5ERVgsIFZHQV9HUl9EQVRBLCBpLAorCQkJCSAgIGRldl9wcml2LT5zYXZlR1JbaV0pOworCisJaTkxNV93cml0ZV9pbmRleGVkKGRldiwgVkdBX0dSX0lOREVYLCBWR0FfR1JfREFUQSwgMHgxMCwKKwkJCSAgIGRldl9wcml2LT5zYXZlR1JbMHgxMF0pOworCWk5MTVfd3JpdGVfaW5kZXhlZChkZXYsIFZHQV9HUl9JTkRFWCwgVkdBX0dSX0RBVEEsIDB4MTEsCisJCQkgICBkZXZfcHJpdi0+c2F2ZUdSWzB4MTFdKTsKKwlpOTE1X3dyaXRlX2luZGV4ZWQoZGV2LCBWR0FfR1JfSU5ERVgsIFZHQV9HUl9EQVRBLCAweDE4LAorCQkJICAgZGV2X3ByaXYtPnNhdmVHUlsweDE4XSk7CisKKwkvKiBBdHRyaWJ1dGUgY29udHJvbGxlciByZWdpc3RlcnMgKi8KKwlJOTE1X1JFQUQ4KHN0MDEpOyAvKiBzd2l0Y2ggYmFjayB0byBpbmRleCBtb2RlICovCisJZm9yIChpID0gMDsgaSA8PSAweDE0OyBpKyspCisJCWk5MTVfd3JpdGVfYXIoZGV2LCBzdDAxLCBpLCBkZXZfcHJpdi0+c2F2ZUFSW2ldLCAwKTsKKwlJOTE1X1JFQUQ4KHN0MDEpOyAvKiBzd2l0Y2ggYmFjayB0byBpbmRleCBtb2RlICovCisJSTkxNV9XUklURTgoVkdBX0FSX0lOREVYLCBkZXZfcHJpdi0+c2F2ZUFSX0lOREVYIHwgMHgyMCk7CisJSTkxNV9SRUFEOChzdDAxKTsKKworCS8qIFZHQSBjb2xvciBwYWxldHRlIHJlZ2lzdGVycyAqLworCUk5MTVfV1JJVEU4KFZHQV9EQUNNQVNLLCBkZXZfcHJpdi0+c2F2ZURBQ01BU0spOworCS8qIERBQ0NSWCBhdXRvbWF0aWNhbGx5IGluY3JlbWVudHMgZHVyaW5nIHJlYWQgKi8KKwlJOTE1X1dSSVRFOChWR0FfREFDV1gsIDApOworCS8qIFJlYWQgMyBieXRlcyBvZiBjb2xvciBkYXRhIGZyb20gZWFjaCBpbmRleCAqLworCWZvciAoaSA9IDA7IGkgPCAyNTYgKiAzOyBpKyspCisJCUk5MTVfV1JJVEU4KFZHQV9EQUNEQVRBLCBkZXZfcHJpdi0+c2F2ZURBQ0RBVEFbaV0pOworCit9CisKK2ludCBpOTE1X3NhdmVfc3RhdGUoc3RydWN0IGRybV9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCWludCBpOworCisJcGNpX3JlYWRfY29uZmlnX2J5dGUoZGV2LT5wZGV2LCBMQkIsICZkZXZfcHJpdi0+c2F2ZUxCQik7CisKKwkvKiBEaXNwbGF5IGFyYml0cmF0aW9uIGNvbnRyb2wgKi8KKwlkZXZfcHJpdi0+c2F2ZURTUEFSQiA9IEk5MTVfUkVBRChEU1BBUkIpOworCisJLyogUGlwZSAmIHBsYW5lIEEgaW5mbyAqLworCWRldl9wcml2LT5zYXZlUElQRUFDT05GID0gSTkxNV9SRUFEKFBJUEVBQ09ORik7CisJZGV2X3ByaXYtPnNhdmVQSVBFQVNSQyA9IEk5MTVfUkVBRChQSVBFQVNSQyk7CisJZGV2X3ByaXYtPnNhdmVGUEEwID0gSTkxNV9SRUFEKEZQQTApOworCWRldl9wcml2LT5zYXZlRlBBMSA9IEk5MTVfUkVBRChGUEExKTsKKwlkZXZfcHJpdi0+c2F2ZURQTExfQSA9IEk5MTVfUkVBRChEUExMX0EpOworCWlmIChJU19JOTY1RyhkZXYpKQorCQlkZXZfcHJpdi0+c2F2ZURQTExfQV9NRCA9IEk5MTVfUkVBRChEUExMX0FfTUQpOworCWRldl9wcml2LT5zYXZlSFRPVEFMX0EgPSBJOTE1X1JFQUQoSFRPVEFMX0EpOworCWRldl9wcml2LT5zYXZlSEJMQU5LX0EgPSBJOTE1X1JFQUQoSEJMQU5LX0EpOworCWRldl9wcml2LT5zYXZlSFNZTkNfQSA9IEk5MTVfUkVBRChIU1lOQ19BKTsKKwlkZXZfcHJpdi0+c2F2ZVZUT1RBTF9BID0gSTkxNV9SRUFEKFZUT1RBTF9BKTsKKwlkZXZfcHJpdi0+c2F2ZVZCTEFOS19BID0gSTkxNV9SRUFEKFZCTEFOS19BKTsKKwlkZXZfcHJpdi0+c2F2ZVZTWU5DX0EgPSBJOTE1X1JFQUQoVlNZTkNfQSk7CisJZGV2X3ByaXYtPnNhdmVCQ0xSUEFUX0EgPSBJOTE1X1JFQUQoQkNMUlBBVF9BKTsKKworCWRldl9wcml2LT5zYXZlRFNQQUNOVFIgPSBJOTE1X1JFQUQoRFNQQUNOVFIpOworCWRldl9wcml2LT5zYXZlRFNQQVNUUklERSA9IEk5MTVfUkVBRChEU1BBU1RSSURFKTsKKwlkZXZfcHJpdi0+c2F2ZURTUEFTSVpFID0gSTkxNV9SRUFEKERTUEFTSVpFKTsKKwlkZXZfcHJpdi0+c2F2ZURTUEFQT1MgPSBJOTE1X1JFQUQoRFNQQVBPUyk7CisJZGV2X3ByaXYtPnNhdmVEU1BBQUREUiA9IEk5MTVfUkVBRChEU1BBQUREUik7CisJaWYgKElTX0k5NjVHKGRldikpIHsKKwkJZGV2X3ByaXYtPnNhdmVEU1BBU1VSRiA9IEk5MTVfUkVBRChEU1BBU1VSRik7CisJCWRldl9wcml2LT5zYXZlRFNQQVRJTEVPRkYgPSBJOTE1X1JFQUQoRFNQQVRJTEVPRkYpOworCX0KKwlpOTE1X3NhdmVfcGFsZXR0ZShkZXYsIFBJUEVfQSk7CisJZGV2X3ByaXYtPnNhdmVQSVBFQVNUQVQgPSBJOTE1X1JFQUQoUElQRUFTVEFUKTsKKworCS8qIFBpcGUgJiBwbGFuZSBCIGluZm8gKi8KKwlkZXZfcHJpdi0+c2F2ZVBJUEVCQ09ORiA9IEk5MTVfUkVBRChQSVBFQkNPTkYpOworCWRldl9wcml2LT5zYXZlUElQRUJTUkMgPSBJOTE1X1JFQUQoUElQRUJTUkMpOworCWRldl9wcml2LT5zYXZlRlBCMCA9IEk5MTVfUkVBRChGUEIwKTsKKwlkZXZfcHJpdi0+c2F2ZUZQQjEgPSBJOTE1X1JFQUQoRlBCMSk7CisJZGV2X3ByaXYtPnNhdmVEUExMX0IgPSBJOTE1X1JFQUQoRFBMTF9CKTsKKwlpZiAoSVNfSTk2NUcoZGV2KSkKKwkJZGV2X3ByaXYtPnNhdmVEUExMX0JfTUQgPSBJOTE1X1JFQUQoRFBMTF9CX01EKTsKKwlkZXZfcHJpdi0+c2F2ZUhUT1RBTF9CID0gSTkxNV9SRUFEKEhUT1RBTF9CKTsKKwlkZXZfcHJpdi0+c2F2ZUhCTEFOS19CID0gSTkxNV9SRUFEKEhCTEFOS19CKTsKKwlkZXZfcHJpdi0+c2F2ZUhTWU5DX0IgPSBJOTE1X1JFQUQoSFNZTkNfQik7CisJZGV2X3ByaXYtPnNhdmVWVE9UQUxfQiA9IEk5MTVfUkVBRChWVE9UQUxfQik7CisJZGV2X3ByaXYtPnNhdmVWQkxBTktfQiA9IEk5MTVfUkVBRChWQkxBTktfQik7CisJZGV2X3ByaXYtPnNhdmVWU1lOQ19CID0gSTkxNV9SRUFEKFZTWU5DX0IpOworCWRldl9wcml2LT5zYXZlQkNMUlBBVF9BID0gSTkxNV9SRUFEKEJDTFJQQVRfQSk7CisKKwlkZXZfcHJpdi0+c2F2ZURTUEJDTlRSID0gSTkxNV9SRUFEKERTUEJDTlRSKTsKKwlkZXZfcHJpdi0+c2F2ZURTUEJTVFJJREUgPSBJOTE1X1JFQUQoRFNQQlNUUklERSk7CisJZGV2X3ByaXYtPnNhdmVEU1BCU0laRSA9IEk5MTVfUkVBRChEU1BCU0laRSk7CisJZGV2X3ByaXYtPnNhdmVEU1BCUE9TID0gSTkxNV9SRUFEKERTUEJQT1MpOworCWRldl9wcml2LT5zYXZlRFNQQkFERFIgPSBJOTE1X1JFQUQoRFNQQkFERFIpOworCWlmIChJU19JOTY1R00oZGV2KSB8fCBJU19HTTQ1KGRldikpIHsKKwkJZGV2X3ByaXYtPnNhdmVEU1BCU1VSRiA9IEk5MTVfUkVBRChEU1BCU1VSRik7CisJCWRldl9wcml2LT5zYXZlRFNQQlRJTEVPRkYgPSBJOTE1X1JFQUQoRFNQQlRJTEVPRkYpOworCX0KKwlpOTE1X3NhdmVfcGFsZXR0ZShkZXYsIFBJUEVfQik7CisJZGV2X3ByaXYtPnNhdmVQSVBFQlNUQVQgPSBJOTE1X1JFQUQoUElQRUJTVEFUKTsKKworCS8qIENSVCBzdGF0ZSAqLworCWRldl9wcml2LT5zYXZlQURQQSA9IEk5MTVfUkVBRChBRFBBKTsKKworCS8qIExWRFMgc3RhdGUgKi8KKwlkZXZfcHJpdi0+c2F2ZVBQX0NPTlRST0wgPSBJOTE1X1JFQUQoUFBfQ09OVFJPTCk7CisJZGV2X3ByaXYtPnNhdmVQRklUX1BHTV9SQVRJT1MgPSBJOTE1X1JFQUQoUEZJVF9QR01fUkFUSU9TKTsKKwlkZXZfcHJpdi0+c2F2ZUJMQ19QV01fQ1RMID0gSTkxNV9SRUFEKEJMQ19QV01fQ1RMKTsKKwlpZiAoSVNfSTk2NUcoZGV2KSkKKwkJZGV2X3ByaXYtPnNhdmVCTENfUFdNX0NUTDIgPSBJOTE1X1JFQUQoQkxDX1BXTV9DVEwyKTsKKwlpZiAoSVNfTU9CSUxFKGRldikgJiYgIUlTX0k4MzAoZGV2KSkKKwkJZGV2X3ByaXYtPnNhdmVMVkRTID0gSTkxNV9SRUFEKExWRFMpOworCWlmICghSVNfSTgzMChkZXYpICYmICFJU184NDVHKGRldikpCisJCWRldl9wcml2LT5zYXZlUEZJVF9DT05UUk9MID0gSTkxNV9SRUFEKFBGSVRfQ09OVFJPTCk7CisJZGV2X3ByaXYtPnNhdmVQUF9PTl9ERUxBWVMgPSBJOTE1X1JFQUQoUFBfT05fREVMQVlTKTsKKwlkZXZfcHJpdi0+c2F2ZVBQX09GRl9ERUxBWVMgPSBJOTE1X1JFQUQoUFBfT0ZGX0RFTEFZUyk7CisJZGV2X3ByaXYtPnNhdmVQUF9ESVZJU09SID0gSTkxNV9SRUFEKFBQX0RJVklTT1IpOworCisJLyogRklYTUU6IHNhdmUgVFYgJiBTRFZPIHN0YXRlICovCisKKwkvKiBGQkMgc3RhdGUgKi8KKwlkZXZfcHJpdi0+c2F2ZUZCQ19DRkJfQkFTRSA9IEk5MTVfUkVBRChGQkNfQ0ZCX0JBU0UpOworCWRldl9wcml2LT5zYXZlRkJDX0xMX0JBU0UgPSBJOTE1X1JFQUQoRkJDX0xMX0JBU0UpOworCWRldl9wcml2LT5zYXZlRkJDX0NPTlRST0wyID0gSTkxNV9SRUFEKEZCQ19DT05UUk9MMik7CisJZGV2X3ByaXYtPnNhdmVGQkNfQ09OVFJPTCA9IEk5MTVfUkVBRChGQkNfQ09OVFJPTCk7CisKKwkvKiBJbnRlcnJ1cHQgc3RhdGUgKi8KKwlkZXZfcHJpdi0+c2F2ZUlJUiA9IEk5MTVfUkVBRChJSVIpOworCWRldl9wcml2LT5zYXZlSUVSID0gSTkxNV9SRUFEKElFUik7CisJZGV2X3ByaXYtPnNhdmVJTVIgPSBJOTE1X1JFQUQoSU1SKTsKKworCS8qIFZHQSBzdGF0ZSAqLworCWRldl9wcml2LT5zYXZlVkdBMCA9IEk5MTVfUkVBRChWR0EwKTsKKwlkZXZfcHJpdi0+c2F2ZVZHQTEgPSBJOTE1X1JFQUQoVkdBMSk7CisJZGV2X3ByaXYtPnNhdmVWR0FfUEQgPSBJOTE1X1JFQUQoVkdBX1BEKTsKKwlkZXZfcHJpdi0+c2F2ZVZHQUNOVFJMID0gSTkxNV9SRUFEKFZHQUNOVFJMKTsKKworCS8qIENsb2NrIGdhdGluZyBzdGF0ZSAqLworCWRldl9wcml2LT5zYXZlRF9TVEFURSA9IEk5MTVfUkVBRChEX1NUQVRFKTsKKwlkZXZfcHJpdi0+c2F2ZUNHXzJEX0RJUyA9IEk5MTVfUkVBRChDR18yRF9ESVMpOworCisJLyogQ2FjaGUgbW9kZSBzdGF0ZSAqLworCWRldl9wcml2LT5zYXZlQ0FDSEVfTU9ERV8wID0gSTkxNV9SRUFEKENBQ0hFX01PREVfMCk7CisKKwkvKiBNZW1vcnkgQXJiaXRyYXRpb24gc3RhdGUgKi8KKwlkZXZfcHJpdi0+c2F2ZU1JX0FSQl9TVEFURSA9IEk5MTVfUkVBRChNSV9BUkJfU1RBVEUpOworCisJLyogU2NyYXRjaCBzcGFjZSAqLworCWZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKSB7CisJCWRldl9wcml2LT5zYXZlU1dGMFtpXSA9IEk5MTVfUkVBRChTV0YwMCArIChpIDw8IDIpKTsKKwkJZGV2X3ByaXYtPnNhdmVTV0YxW2ldID0gSTkxNV9SRUFEKFNXRjEwICsgKGkgPDwgMikpOworCX0KKwlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKQorCQlkZXZfcHJpdi0+c2F2ZVNXRjJbaV0gPSBJOTE1X1JFQUQoU1dGMzAgKyAoaSA8PCAyKSk7CisKKwlpOTE1X3NhdmVfdmdhKGRldik7CisKKwlyZXR1cm4gMDsKK30KKworaW50IGk5MTVfcmVzdG9yZV9zdGF0ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQoreworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJaW50IGk7CisKKwlwY2lfd3JpdGVfY29uZmlnX2J5dGUoZGV2LT5wZGV2LCBMQkIsIGRldl9wcml2LT5zYXZlTEJCKTsKKworCUk5MTVfV1JJVEUoRFNQQVJCLCBkZXZfcHJpdi0+c2F2ZURTUEFSQik7CisKKwkvKiBQaXBlICYgcGxhbmUgQSBpbmZvICovCisJLyogUHJpbWUgdGhlIGNsb2NrICovCisJaWYgKGRldl9wcml2LT5zYXZlRFBMTF9BICYgRFBMTF9WQ09fRU5BQkxFKSB7CisJCUk5MTVfV1JJVEUoRFBMTF9BLCBkZXZfcHJpdi0+c2F2ZURQTExfQSAmCisJCQkgICB+RFBMTF9WQ09fRU5BQkxFKTsKKwkJRFJNX1VERUxBWSgxNTApOworCX0KKwlJOTE1X1dSSVRFKEZQQTAsIGRldl9wcml2LT5zYXZlRlBBMCk7CisJSTkxNV9XUklURShGUEExLCBkZXZfcHJpdi0+c2F2ZUZQQTEpOworCS8qIEFjdHVhbGx5IGVuYWJsZSBpdCAqLworCUk5MTVfV1JJVEUoRFBMTF9BLCBkZXZfcHJpdi0+c2F2ZURQTExfQSk7CisJRFJNX1VERUxBWSgxNTApOworCWlmIChJU19JOTY1RyhkZXYpKQorCQlJOTE1X1dSSVRFKERQTExfQV9NRCwgZGV2X3ByaXYtPnNhdmVEUExMX0FfTUQpOworCURSTV9VREVMQVkoMTUwKTsKKworCS8qIFJlc3RvcmUgbW9kZSAqLworCUk5MTVfV1JJVEUoSFRPVEFMX0EsIGRldl9wcml2LT5zYXZlSFRPVEFMX0EpOworCUk5MTVfV1JJVEUoSEJMQU5LX0EsIGRldl9wcml2LT5zYXZlSEJMQU5LX0EpOworCUk5MTVfV1JJVEUoSFNZTkNfQSwgZGV2X3ByaXYtPnNhdmVIU1lOQ19BKTsKKwlJOTE1X1dSSVRFKFZUT1RBTF9BLCBkZXZfcHJpdi0+c2F2ZVZUT1RBTF9BKTsKKwlJOTE1X1dSSVRFKFZCTEFOS19BLCBkZXZfcHJpdi0+c2F2ZVZCTEFOS19BKTsKKwlJOTE1X1dSSVRFKFZTWU5DX0EsIGRldl9wcml2LT5zYXZlVlNZTkNfQSk7CisJSTkxNV9XUklURShCQ0xSUEFUX0EsIGRldl9wcml2LT5zYXZlQkNMUlBBVF9BKTsKKworCS8qIFJlc3RvcmUgcGxhbmUgaW5mbyAqLworCUk5MTVfV1JJVEUoRFNQQVNJWkUsIGRldl9wcml2LT5zYXZlRFNQQVNJWkUpOworCUk5MTVfV1JJVEUoRFNQQVBPUywgZGV2X3ByaXYtPnNhdmVEU1BBUE9TKTsKKwlJOTE1X1dSSVRFKFBJUEVBU1JDLCBkZXZfcHJpdi0+c2F2ZVBJUEVBU1JDKTsKKwlJOTE1X1dSSVRFKERTUEFBRERSLCBkZXZfcHJpdi0+c2F2ZURTUEFBRERSKTsKKwlJOTE1X1dSSVRFKERTUEFTVFJJREUsIGRldl9wcml2LT5zYXZlRFNQQVNUUklERSk7CisJaWYgKElTX0k5NjVHKGRldikpIHsKKwkJSTkxNV9XUklURShEU1BBU1VSRiwgZGV2X3ByaXYtPnNhdmVEU1BBU1VSRik7CisJCUk5MTVfV1JJVEUoRFNQQVRJTEVPRkYsIGRldl9wcml2LT5zYXZlRFNQQVRJTEVPRkYpOworCX0KKworCUk5MTVfV1JJVEUoUElQRUFDT05GLCBkZXZfcHJpdi0+c2F2ZVBJUEVBQ09ORik7CisKKwlpOTE1X3Jlc3RvcmVfcGFsZXR0ZShkZXYsIFBJUEVfQSk7CisJLyogRW5hYmxlIHRoZSBwbGFuZSAqLworCUk5MTVfV1JJVEUoRFNQQUNOVFIsIGRldl9wcml2LT5zYXZlRFNQQUNOVFIpOworCUk5MTVfV1JJVEUoRFNQQUFERFIsIEk5MTVfUkVBRChEU1BBQUREUikpOworCisJLyogUGlwZSAmIHBsYW5lIEIgaW5mbyAqLworCWlmIChkZXZfcHJpdi0+c2F2ZURQTExfQiAmIERQTExfVkNPX0VOQUJMRSkgeworCQlJOTE1X1dSSVRFKERQTExfQiwgZGV2X3ByaXYtPnNhdmVEUExMX0IgJgorCQkJICAgfkRQTExfVkNPX0VOQUJMRSk7CisJCURSTV9VREVMQVkoMTUwKTsKKwl9CisJSTkxNV9XUklURShGUEIwLCBkZXZfcHJpdi0+c2F2ZUZQQjApOworCUk5MTVfV1JJVEUoRlBCMSwgZGV2X3ByaXYtPnNhdmVGUEIxKTsKKwkvKiBBY3R1YWxseSBlbmFibGUgaXQgKi8KKwlJOTE1X1dSSVRFKERQTExfQiwgZGV2X3ByaXYtPnNhdmVEUExMX0IpOworCURSTV9VREVMQVkoMTUwKTsKKwlpZiAoSVNfSTk2NUcoZGV2KSkKKwkJSTkxNV9XUklURShEUExMX0JfTUQsIGRldl9wcml2LT5zYXZlRFBMTF9CX01EKTsKKwlEUk1fVURFTEFZKDE1MCk7CisKKwkvKiBSZXN0b3JlIG1vZGUgKi8KKwlJOTE1X1dSSVRFKEhUT1RBTF9CLCBkZXZfcHJpdi0+c2F2ZUhUT1RBTF9CKTsKKwlJOTE1X1dSSVRFKEhCTEFOS19CLCBkZXZfcHJpdi0+c2F2ZUhCTEFOS19CKTsKKwlJOTE1X1dSSVRFKEhTWU5DX0IsIGRldl9wcml2LT5zYXZlSFNZTkNfQik7CisJSTkxNV9XUklURShWVE9UQUxfQiwgZGV2X3ByaXYtPnNhdmVWVE9UQUxfQik7CisJSTkxNV9XUklURShWQkxBTktfQiwgZGV2X3ByaXYtPnNhdmVWQkxBTktfQik7CisJSTkxNV9XUklURShWU1lOQ19CLCBkZXZfcHJpdi0+c2F2ZVZTWU5DX0IpOworCUk5MTVfV1JJVEUoQkNMUlBBVF9CLCBkZXZfcHJpdi0+c2F2ZUJDTFJQQVRfQik7CisKKwkvKiBSZXN0b3JlIHBsYW5lIGluZm8gKi8KKwlJOTE1X1dSSVRFKERTUEJTSVpFLCBkZXZfcHJpdi0+c2F2ZURTUEJTSVpFKTsKKwlJOTE1X1dSSVRFKERTUEJQT1MsIGRldl9wcml2LT5zYXZlRFNQQlBPUyk7CisJSTkxNV9XUklURShQSVBFQlNSQywgZGV2X3ByaXYtPnNhdmVQSVBFQlNSQyk7CisJSTkxNV9XUklURShEU1BCQUREUiwgZGV2X3ByaXYtPnNhdmVEU1BCQUREUik7CisJSTkxNV9XUklURShEU1BCU1RSSURFLCBkZXZfcHJpdi0+c2F2ZURTUEJTVFJJREUpOworCWlmIChJU19JOTY1RyhkZXYpKSB7CisJCUk5MTVfV1JJVEUoRFNQQlNVUkYsIGRldl9wcml2LT5zYXZlRFNQQlNVUkYpOworCQlJOTE1X1dSSVRFKERTUEJUSUxFT0ZGLCBkZXZfcHJpdi0+c2F2ZURTUEJUSUxFT0ZGKTsKKwl9CisKKwlJOTE1X1dSSVRFKFBJUEVCQ09ORiwgZGV2X3ByaXYtPnNhdmVQSVBFQkNPTkYpOworCisJaTkxNV9yZXN0b3JlX3BhbGV0dGUoZGV2LCBQSVBFX0IpOworCS8qIEVuYWJsZSB0aGUgcGxhbmUgKi8KKwlJOTE1X1dSSVRFKERTUEJDTlRSLCBkZXZfcHJpdi0+c2F2ZURTUEJDTlRSKTsKKwlJOTE1X1dSSVRFKERTUEJBRERSLCBJOTE1X1JFQUQoRFNQQkFERFIpKTsKKworCS8qIENSVCBzdGF0ZSAqLworCUk5MTVfV1JJVEUoQURQQSwgZGV2X3ByaXYtPnNhdmVBRFBBKTsKKworCS8qIExWRFMgc3RhdGUgKi8KKwlpZiAoSVNfSTk2NUcoZGV2KSkKKwkJSTkxNV9XUklURShCTENfUFdNX0NUTDIsIGRldl9wcml2LT5zYXZlQkxDX1BXTV9DVEwyKTsKKwlpZiAoSVNfTU9CSUxFKGRldikgJiYgIUlTX0k4MzAoZGV2KSkKKwkJSTkxNV9XUklURShMVkRTLCBkZXZfcHJpdi0+c2F2ZUxWRFMpOworCWlmICghSVNfSTgzMChkZXYpICYmICFJU184NDVHKGRldikpCisJCUk5MTVfV1JJVEUoUEZJVF9DT05UUk9MLCBkZXZfcHJpdi0+c2F2ZVBGSVRfQ09OVFJPTCk7CisKKwlJOTE1X1dSSVRFKFBGSVRfUEdNX1JBVElPUywgZGV2X3ByaXYtPnNhdmVQRklUX1BHTV9SQVRJT1MpOworCUk5MTVfV1JJVEUoQkxDX1BXTV9DVEwsIGRldl9wcml2LT5zYXZlQkxDX1BXTV9DVEwpOworCUk5MTVfV1JJVEUoUFBfT05fREVMQVlTLCBkZXZfcHJpdi0+c2F2ZVBQX09OX0RFTEFZUyk7CisJSTkxNV9XUklURShQUF9PRkZfREVMQVlTLCBkZXZfcHJpdi0+c2F2ZVBQX09GRl9ERUxBWVMpOworCUk5MTVfV1JJVEUoUFBfRElWSVNPUiwgZGV2X3ByaXYtPnNhdmVQUF9ESVZJU09SKTsKKwlJOTE1X1dSSVRFKFBQX0NPTlRST0wsIGRldl9wcml2LT5zYXZlUFBfQ09OVFJPTCk7CisKKwkvKiBGSVhNRTogcmVzdG9yZSBUViAmIFNEVk8gc3RhdGUgKi8KKworCS8qIEZCQyBpbmZvICovCisJSTkxNV9XUklURShGQkNfQ0ZCX0JBU0UsIGRldl9wcml2LT5zYXZlRkJDX0NGQl9CQVNFKTsKKwlJOTE1X1dSSVRFKEZCQ19MTF9CQVNFLCBkZXZfcHJpdi0+c2F2ZUZCQ19MTF9CQVNFKTsKKwlJOTE1X1dSSVRFKEZCQ19DT05UUk9MMiwgZGV2X3ByaXYtPnNhdmVGQkNfQ09OVFJPTDIpOworCUk5MTVfV1JJVEUoRkJDX0NPTlRST0wsIGRldl9wcml2LT5zYXZlRkJDX0NPTlRST0wpOworCisJLyogVkdBIHN0YXRlICovCisJSTkxNV9XUklURShWR0FDTlRSTCwgZGV2X3ByaXYtPnNhdmVWR0FDTlRSTCk7CisJSTkxNV9XUklURShWR0EwLCBkZXZfcHJpdi0+c2F2ZVZHQTApOworCUk5MTVfV1JJVEUoVkdBMSwgZGV2X3ByaXYtPnNhdmVWR0ExKTsKKwlJOTE1X1dSSVRFKFZHQV9QRCwgZGV2X3ByaXYtPnNhdmVWR0FfUEQpOworCURSTV9VREVMQVkoMTUwKTsKKworCS8qIENsb2NrIGdhdGluZyBzdGF0ZSAqLworCUk5MTVfV1JJVEUgKERfU1RBVEUsIGRldl9wcml2LT5zYXZlRF9TVEFURSk7CisJSTkxNV9XUklURSAoQ0dfMkRfRElTLCBkZXZfcHJpdi0+c2F2ZUNHXzJEX0RJUyk7CisKKwkvKiBDYWNoZSBtb2RlIHN0YXRlICovCisJSTkxNV9XUklURSAoQ0FDSEVfTU9ERV8wLCBkZXZfcHJpdi0+c2F2ZUNBQ0hFX01PREVfMCB8IDB4ZmZmZjAwMDApOworCisJLyogTWVtb3J5IGFyYml0cmF0aW9uIHN0YXRlICovCisJSTkxNV9XUklURSAoTUlfQVJCX1NUQVRFLCBkZXZfcHJpdi0+c2F2ZU1JX0FSQl9TVEFURSB8IDB4ZmZmZjAwMDApOworCisJZm9yIChpID0gMDsgaSA8IDE2OyBpKyspIHsKKwkJSTkxNV9XUklURShTV0YwMCArIChpIDw8IDIpLCBkZXZfcHJpdi0+c2F2ZVNXRjBbaV0pOworCQlJOTE1X1dSSVRFKFNXRjEwICsgKGkgPDwgMiksIGRldl9wcml2LT5zYXZlU1dGMVtpKzddKTsKKwl9CisJZm9yIChpID0gMDsgaSA8IDM7IGkrKykKKwkJSTkxNV9XUklURShTV0YzMCArIChpIDw8IDIpLCBkZXZfcHJpdi0+c2F2ZVNXRjJbaV0pOworCisJaTkxNV9yZXN0b3JlX3ZnYShkZXYpOworCisJcmV0dXJuIDA7Cit9CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tZ2EvbWdhX2Rydi5jIGIvZHJpdmVycy9ncHUvZHJtL21nYS9tZ2FfZHJ2LmMKaW5kZXggNTU3MjkzOS4uOTdlZTU2NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL21nYS9tZ2FfZHJ2LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL21nYS9tZ2FfZHJ2LmMKQEAgLTQ1LDE1ICs0NSwxNiBAQAogc3RhdGljIHN0cnVjdCBkcm1fZHJpdmVyIGRyaXZlciA9IHsKIAkuZHJpdmVyX2ZlYXR1cmVzID0KIAkgICAgRFJJVkVSX1VTRV9BR1AgfCBEUklWRVJfVVNFX01UUlIgfCBEUklWRVJfUENJX0RNQSB8Ci0JICAgIERSSVZFUl9IQVZFX0RNQSB8IERSSVZFUl9IQVZFX0lSUSB8IERSSVZFUl9JUlFfU0hBUkVEIHwKLQkgICAgRFJJVkVSX0lSUV9WQkwsCisJICAgIERSSVZFUl9IQVZFX0RNQSB8IERSSVZFUl9IQVZFX0lSUSB8IERSSVZFUl9JUlFfU0hBUkVELAogCS5kZXZfcHJpdl9zaXplID0gc2l6ZW9mKGRybV9tZ2FfYnVmX3ByaXZfdCksCiAJLmxvYWQgPSBtZ2FfZHJpdmVyX2xvYWQsCiAJLnVubG9hZCA9IG1nYV9kcml2ZXJfdW5sb2FkLAogCS5sYXN0Y2xvc2UgPSBtZ2FfZHJpdmVyX2xhc3RjbG9zZSwKIAkuZG1hX3F1aWVzY2VudCA9IG1nYV9kcml2ZXJfZG1hX3F1aWVzY2VudCwKIAkuZGV2aWNlX2lzX2FncCA9IG1nYV9kcml2ZXJfZGV2aWNlX2lzX2FncCwKLQkudmJsYW5rX3dhaXQgPSBtZ2FfZHJpdmVyX3ZibGFua193YWl0LAorCS5nZXRfdmJsYW5rX2NvdW50ZXIgPSBtZ2FfZ2V0X3ZibGFua19jb3VudGVyLAorCS5lbmFibGVfdmJsYW5rID0gbWdhX2VuYWJsZV92YmxhbmssCisJLmRpc2FibGVfdmJsYW5rID0gbWdhX2Rpc2FibGVfdmJsYW5rLAogCS5pcnFfcHJlaW5zdGFsbCA9IG1nYV9kcml2ZXJfaXJxX3ByZWluc3RhbGwsCiAJLmlycV9wb3N0aW5zdGFsbCA9IG1nYV9kcml2ZXJfaXJxX3Bvc3RpbnN0YWxsLAogCS5pcnFfdW5pbnN0YWxsID0gbWdhX2RyaXZlcl9pcnFfdW5pbnN0YWxsLApAQCAtNjQsMjAgKzY1LDIwIEBACiAJLmlvY3RscyA9IG1nYV9pb2N0bHMsCiAJLmRtYV9pb2N0bCA9IG1nYV9kbWFfYnVmZmVycywKIAkuZm9wcyA9IHsKLQkJIC5vd25lciA9IFRISVNfTU9EVUxFLAotCQkgLm9wZW4gPSBkcm1fb3BlbiwKLQkJIC5yZWxlYXNlID0gZHJtX3JlbGVhc2UsCi0JCSAuaW9jdGwgPSBkcm1faW9jdGwsCi0JCSAubW1hcCA9IGRybV9tbWFwLAotCQkgLnBvbGwgPSBkcm1fcG9sbCwKLQkJIC5mYXN5bmMgPSBkcm1fZmFzeW5jLAorCQkub3duZXIgPSBUSElTX01PRFVMRSwKKwkJLm9wZW4gPSBkcm1fb3BlbiwKKwkJLnJlbGVhc2UgPSBkcm1fcmVsZWFzZSwKKwkJLmlvY3RsID0gZHJtX2lvY3RsLAorCQkubW1hcCA9IGRybV9tbWFwLAorCQkucG9sbCA9IGRybV9wb2xsLAorCQkuZmFzeW5jID0gZHJtX2Zhc3luYywKICNpZmRlZiBDT05GSUdfQ09NUEFUCi0JCSAuY29tcGF0X2lvY3RsID0gbWdhX2NvbXBhdF9pb2N0bCwKKwkJLmNvbXBhdF9pb2N0bCA9IG1nYV9jb21wYXRfaW9jdGwsCiAjZW5kaWYKLQkJIH0sCisJfSwKIAkucGNpX2RyaXZlciA9IHsKLQkJIC5uYW1lID0gRFJJVkVSX05BTUUsCi0JCSAuaWRfdGFibGUgPSBwY2lpZGxpc3QsCisJCS5uYW1lID0gRFJJVkVSX05BTUUsCisJCS5pZF90YWJsZSA9IHBjaWlkbGlzdCwKIAl9LAogCiAJLm5hbWUgPSBEUklWRVJfTkFNRSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tZ2EvbWdhX2Rydi5oIGIvZHJpdmVycy9ncHUvZHJtL21nYS9tZ2FfZHJ2LmgKaW5kZXggZjZlYmQyNC4uODgyNTdjMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL21nYS9tZ2FfZHJ2LmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL21nYS9tZ2FfZHJ2LmgKQEAgLTEyMCw2ICsxMjAsNyBAQAogCXUzMiBjbGVhcl9jbWQ7CiAJdTMyIG1hY2Nlc3M7CiAKKwlhdG9taWNfdCB2YmxfcmVjZWl2ZWQ7ICAgICAgICAgIC8qKjwgTnVtYmVyIG9mIHZibGFua3MgcmVjZWl2ZWQuICovCiAJd2FpdF9xdWV1ZV9oZWFkX3QgZmVuY2VfcXVldWU7CiAJYXRvbWljX3QgbGFzdF9mZW5jZV9yZXRpcmVkOwogCXUzMiBuZXh0X2ZlbmNlX3RvX3Bvc3Q7CkBAIC0xODEsMTEgKzE4MiwxNCBAQAogZXh0ZXJuIGludCBtZ2Ffd2FycF9pbml0KGRybV9tZ2FfcHJpdmF0ZV90ICogZGV2X3ByaXYpOwogCiAJCQkJLyogbWdhX2lycS5jICovCitleHRlcm4gaW50IG1nYV9lbmFibGVfdmJsYW5rKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGludCBjcnRjKTsKK2V4dGVybiB2b2lkIG1nYV9kaXNhYmxlX3ZibGFuayhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgY3J0Yyk7CitleHRlcm4gdTMyIG1nYV9nZXRfdmJsYW5rX2NvdW50ZXIoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50IGNydGMpOwogZXh0ZXJuIGludCBtZ2FfZHJpdmVyX2ZlbmNlX3dhaXQoc3RydWN0IGRybV9kZXZpY2UgKiBkZXYsIHVuc2lnbmVkIGludCAqc2VxdWVuY2UpOwogZXh0ZXJuIGludCBtZ2FfZHJpdmVyX3ZibGFua193YWl0KHN0cnVjdCBkcm1fZGV2aWNlICogZGV2LCB1bnNpZ25lZCBpbnQgKnNlcXVlbmNlKTsKIGV4dGVybiBpcnFyZXR1cm5fdCBtZ2FfZHJpdmVyX2lycV9oYW5kbGVyKERSTV9JUlFfQVJHUyk7CiBleHRlcm4gdm9pZCBtZ2FfZHJpdmVyX2lycV9wcmVpbnN0YWxsKHN0cnVjdCBkcm1fZGV2aWNlICogZGV2KTsKLWV4dGVybiB2b2lkIG1nYV9kcml2ZXJfaXJxX3Bvc3RpbnN0YWxsKHN0cnVjdCBkcm1fZGV2aWNlICogZGV2KTsKK2V4dGVybiBpbnQgbWdhX2RyaXZlcl9pcnFfcG9zdGluc3RhbGwoc3RydWN0IGRybV9kZXZpY2UgKmRldik7CiBleHRlcm4gdm9pZCBtZ2FfZHJpdmVyX2lycV91bmluc3RhbGwoc3RydWN0IGRybV9kZXZpY2UgKiBkZXYpOwogZXh0ZXJuIGxvbmcgbWdhX2NvbXBhdF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGNtZCwKIAkJCSAgICAgdW5zaWduZWQgbG9uZyBhcmcpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21nYS9tZ2FfaXJxLmMgYi9kcml2ZXJzL2dwdS9kcm0vbWdhL21nYV9pcnEuYwppbmRleCA5MzAyY2I4Li5iYWI0MmY0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbWdhL21nYV9pcnEuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbWdhL21nYV9pcnEuYwpAQCAtMSw1ICsxLDYgQEAKIC8qIG1nYV9pcnEuYyAtLSBJUlEgaGFuZGxpbmcgZm9yIHJhZGVvbiAtKi0gbGludXgtYyAtKi0KLSAqCisgKi8KKy8qCiAgKiBDb3B5cmlnaHQgKEMpIFRoZSBXZWF0aGVyIENoYW5uZWwsIEluYy4gIDIwMDIuICBBbGwgUmlnaHRzIFJlc2VydmVkLgogICoKICAqIFRoZSBXZWF0aGVyIENoYW5uZWwgKFRNKSBmdW5kZWQgVHVuZ3N0ZW4gR3JhcGhpY3MgdG8gZGV2ZWxvcCB0aGUKQEAgLTM1LDYgKzM2LDE4IEBACiAjaW5jbHVkZSAibWdhX2RybS5oIgogI2luY2x1ZGUgIm1nYV9kcnYuaCIKIAordTMyIG1nYV9nZXRfdmJsYW5rX2NvdW50ZXIoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50IGNydGMpCit7CisJY29uc3QgZHJtX21nYV9wcml2YXRlX3QgKmNvbnN0IGRldl9wcml2ID0KKwkJKGRybV9tZ2FfcHJpdmF0ZV90ICopIGRldi0+ZGV2X3ByaXZhdGU7CisKKwlpZiAoY3J0YyAhPSAwKQorCQlyZXR1cm4gMDsKKworCXJldHVybiBhdG9taWNfcmVhZCgmZGV2X3ByaXYtPnZibF9yZWNlaXZlZCk7Cit9CisKKwogaXJxcmV0dXJuX3QgbWdhX2RyaXZlcl9pcnFfaGFuZGxlcihEUk1fSVJRX0FSR1MpCiB7CiAJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IChzdHJ1Y3QgZHJtX2RldmljZSAqKSBhcmc7CkBAIC00Nyw5ICs2MCw4IEBACiAJLyogVkJMQU5LIGludGVycnVwdCAqLwogCWlmIChzdGF0dXMgJiBNR0FfVkxJTkVQRU4pIHsKIAkJTUdBX1dSSVRFKE1HQV9JQ0xFQVIsIE1HQV9WTElORUlDTFIpOwotCQlhdG9taWNfaW5jKCZkZXYtPnZibF9yZWNlaXZlZCk7Ci0JCURSTV9XQUtFVVAoJmRldi0+dmJsX3F1ZXVlKTsKLQkJZHJtX3ZibF9zZW5kX3NpZ25hbHMoZGV2KTsKKwkJYXRvbWljX2luYygmZGV2X3ByaXYtPnZibF9yZWNlaXZlZCk7CisJCWRybV9oYW5kbGVfdmJsYW5rKGRldiwgMCk7CiAJCWhhbmRsZWQgPSAxOwogCX0KIApAQCAtNTgsNiArNzAsNyBAQAogCQljb25zdCB1MzIgcHJpbV9zdGFydCA9IE1HQV9SRUFEKE1HQV9QUklNQUREUkVTUyk7CiAJCWNvbnN0IHUzMiBwcmltX2VuZCA9IE1HQV9SRUFEKE1HQV9QUklNRU5EKTsKIAorCiAJCU1HQV9XUklURShNR0FfSUNMRUFSLCBNR0FfU09GVFJBUElDTFIpOwogCiAJCS8qIEluIGFkZGl0aW9uIHRvIGNsZWFyaW5nIHRoZSBpbnRlcnJ1cHQtcGVuZGluZyBiaXQsIHdlCkBAIC03MiwyOCArODUsMzkgQEAKIAkJaGFuZGxlZCA9IDE7CiAJfQogCi0JaWYgKGhhbmRsZWQpIHsKKwlpZiAoaGFuZGxlZCkKIAkJcmV0dXJuIElSUV9IQU5ETEVEOwotCX0KIAlyZXR1cm4gSVJRX05PTkU7CiB9CiAKLWludCBtZ2FfZHJpdmVyX3ZibGFua193YWl0KHN0cnVjdCBkcm1fZGV2aWNlICogZGV2LCB1bnNpZ25lZCBpbnQgKnNlcXVlbmNlKQoraW50IG1nYV9lbmFibGVfdmJsYW5rKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGludCBjcnRjKQogewotCXVuc2lnbmVkIGludCBjdXJfdmJsYW5rOwotCWludCByZXQgPSAwOworCWRybV9tZ2FfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IChkcm1fbWdhX3ByaXZhdGVfdCAqKSBkZXYtPmRldl9wcml2YXRlOwogCi0JLyogQXNzdW1lIHRoYXQgdGhlIHVzZXIgaGFzIG1pc3NlZCB0aGUgY3VycmVudCBzZXF1ZW5jZSBudW1iZXIKLQkgKiBieSBhYm91dCBhIGRheSByYXRoZXIgdGhhbiBzaGUgd2FudHMgdG8gd2FpdCBmb3IgeWVhcnMKLQkgKiB1c2luZyB2ZXJ0aWNhbCBibGFua3MuLi4KKwlpZiAoY3J0YyAhPSAwKSB7CisJCURSTV9FUlJPUigidHJpZWQgdG8gZW5hYmxlIHZibGFuayBvbiBub24tZXhpc3RlbnQgY3J0YyAlZFxuIiwKKwkJCSAgY3J0Yyk7CisJCXJldHVybiAwOworCX0KKworCU1HQV9XUklURShNR0FfSUVOLCBNR0FfVkxJTkVJRU4gfCBNR0FfU09GVFJBUEVOKTsKKwlyZXR1cm4gMDsKK30KKworCit2b2lkIG1nYV9kaXNhYmxlX3ZibGFuayhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgY3J0YykKK3sKKwlpZiAoY3J0YyAhPSAwKSB7CisJCURSTV9FUlJPUigidHJpZWQgdG8gZGlzYWJsZSB2Ymxhbmsgb24gbm9uLWV4aXN0ZW50IGNydGMgJWRcbiIsCisJCQkgIGNydGMpOworCX0KKworCS8qIERvICpOT1QqIGRpc2FibGUgdGhlIHZlcnRpY2FsIHJlZnJlc2ggaW50ZXJydXB0LiAgTUdBIGRvZXNuJ3QgaGF2ZQorCSAqIGEgbmljZSBoYXJkd2FyZSBjb3VudGVyIHRoYXQgdHJhY2tzIHRoZSBudW1iZXIgb2YgcmVmcmVzaGVzIHdoZW4KKwkgKiB0aGUgaW50ZXJydXB0IGlzIGRpc2FibGVkLCBhbmQgdGhlIGtlcm5lbCBkb2Vzbid0IGtub3cgdGhlIHJlZnJlc2gKKwkgKiByYXRlIHRvIGNhbGN1bGF0ZSBhbiBlc3RpbWF0ZS4KIAkgKi8KLQlEUk1fV0FJVF9PTihyZXQsIGRldi0+dmJsX3F1ZXVlLCAzICogRFJNX0haLAotCQkgICAgKCgoY3VyX3ZibGFuayA9IGF0b21pY19yZWFkKCZkZXYtPnZibF9yZWNlaXZlZCkpCi0JCSAgICAgIC0gKnNlcXVlbmNlKSA8PSAoMSA8PCAyMykpKTsKLQotCSpzZXF1ZW5jZSA9IGN1cl92Ymxhbms7Ci0KLQlyZXR1cm4gcmV0OworCS8qIE1HQV9XUklURShNR0FfSUVOLCBNR0FfVkxJTkVJRU4gfCBNR0FfU09GVFJBUEVOKTsgKi8KIH0KIAogaW50IG1nYV9kcml2ZXJfZmVuY2Vfd2FpdChzdHJ1Y3QgZHJtX2RldmljZSAqIGRldiwgdW5zaWduZWQgaW50ICpzZXF1ZW5jZSkKQEAgLTEyNSwxNCArMTQ5LDIyIEBACiAJTUdBX1dSSVRFKE1HQV9JQ0xFQVIsIH4wKTsKIH0KIAotdm9pZCBtZ2FfZHJpdmVyX2lycV9wb3N0aW5zdGFsbChzdHJ1Y3QgZHJtX2RldmljZSAqIGRldikKK2ludCBtZ2FfZHJpdmVyX2lycV9wb3N0aW5zdGFsbChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQogewogCWRybV9tZ2FfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IChkcm1fbWdhX3ByaXZhdGVfdCAqKSBkZXYtPmRldl9wcml2YXRlOworCWludCByZXQ7CisKKwlyZXQgPSBkcm1fdmJsYW5rX2luaXQoZGV2LCAxKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OwogCiAJRFJNX0lOSVRfV0FJVFFVRVVFKCZkZXZfcHJpdi0+ZmVuY2VfcXVldWUpOwogCi0JLyogVHVybiBvbiB2ZXJ0aWNhbCBibGFuayBpbnRlcnJ1cHQgYW5kIHNvZnQgdHJhcCBpbnRlcnJ1cHQuICovCi0JTUdBX1dSSVRFKE1HQV9JRU4sIE1HQV9WTElORUlFTiB8IE1HQV9TT0ZUUkFQRU4pOworCS8qIFR1cm4gb24gc29mdCB0cmFwIGludGVycnVwdC4gIFZlcnRpY2FsIGJsYW5rIGludGVycnVwdHMgYXJlIGVuYWJsZWQKKwkgKiBpbiBtZ2FfZW5hYmxlX3ZibGFuay4KKwkgKi8KKwlNR0FfV1JJVEUoTUdBX0lFTiwgTUdBX1NPRlRSQVBFTik7CisJcmV0dXJuIDA7CiB9CiAKIHZvaWQgbWdhX2RyaXZlcl9pcnFfdW5pbnN0YWxsKHN0cnVjdCBkcm1fZGV2aWNlICogZGV2KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21nYS9tZ2Ffc3RhdGUuYyBiL2RyaXZlcnMvZ3B1L2RybS9tZ2EvbWdhX3N0YXRlLmMKaW5kZXggZDNmOGFhZC4uYjcxMGZhYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL21nYS9tZ2Ffc3RhdGUuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbWdhL21nYV9zdGF0ZS5jCkBAIC0xMDIyLDcgKzEwMjIsNyBAQAogCiAJc3dpdGNoIChwYXJhbS0+cGFyYW0pIHsKIAljYXNlIE1HQV9QQVJBTV9JUlFfTlI6Ci0JCXZhbHVlID0gZGV2LT5pcnE7CisJCXZhbHVlID0gZHJtX2Rldl90b19pcnEoZGV2KTsKIAkJYnJlYWs7CiAJY2FzZSBNR0FfUEFSQU1fQ0FSRF9UWVBFOgogCQl2YWx1ZSA9IGRldl9wcml2LT5jaGlwc2V0OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3IxMjgvcjEyOF9kcnYuYyBiL2RyaXZlcnMvZ3B1L2RybS9yMTI4L3IxMjhfZHJ2LmMKaW5kZXggNjEwOGU3NS4uMzI2NWQ1MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3IxMjgvcjEyOF9kcnYuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcjEyOC9yMTI4X2Rydi5jCkBAIC00MywxMiArNDMsMTMgQEAKIHN0YXRpYyBzdHJ1Y3QgZHJtX2RyaXZlciBkcml2ZXIgPSB7CiAJLmRyaXZlcl9mZWF0dXJlcyA9CiAJICAgIERSSVZFUl9VU0VfQUdQIHwgRFJJVkVSX1VTRV9NVFJSIHwgRFJJVkVSX1BDSV9ETUEgfCBEUklWRVJfU0cgfAotCSAgICBEUklWRVJfSEFWRV9ETUEgfCBEUklWRVJfSEFWRV9JUlEgfCBEUklWRVJfSVJRX1NIQVJFRCB8Ci0JICAgIERSSVZFUl9JUlFfVkJMLAorCSAgICBEUklWRVJfSEFWRV9ETUEgfCBEUklWRVJfSEFWRV9JUlEgfCBEUklWRVJfSVJRX1NIQVJFRCwKIAkuZGV2X3ByaXZfc2l6ZSA9IHNpemVvZihkcm1fcjEyOF9idWZfcHJpdl90KSwKIAkucHJlY2xvc2UgPSByMTI4X2RyaXZlcl9wcmVjbG9zZSwKIAkubGFzdGNsb3NlID0gcjEyOF9kcml2ZXJfbGFzdGNsb3NlLAotCS52Ymxhbmtfd2FpdCA9IHIxMjhfZHJpdmVyX3ZibGFua193YWl0LAorCS5nZXRfdmJsYW5rX2NvdW50ZXIgPSByMTI4X2dldF92YmxhbmtfY291bnRlciwKKwkuZW5hYmxlX3ZibGFuayA9IHIxMjhfZW5hYmxlX3ZibGFuaywKKwkuZGlzYWJsZV92YmxhbmsgPSByMTI4X2Rpc2FibGVfdmJsYW5rLAogCS5pcnFfcHJlaW5zdGFsbCA9IHIxMjhfZHJpdmVyX2lycV9wcmVpbnN0YWxsLAogCS5pcnFfcG9zdGluc3RhbGwgPSByMTI4X2RyaXZlcl9pcnFfcG9zdGluc3RhbGwsCiAJLmlycV91bmluc3RhbGwgPSByMTI4X2RyaXZlcl9pcnFfdW5pbnN0YWxsLApAQCAtNTksMjEgKzYwLDIwIEBACiAJLmlvY3RscyA9IHIxMjhfaW9jdGxzLAogCS5kbWFfaW9jdGwgPSByMTI4X2NjZV9idWZmZXJzLAogCS5mb3BzID0gewotCQkgLm93bmVyID0gVEhJU19NT0RVTEUsCi0JCSAub3BlbiA9IGRybV9vcGVuLAotCQkgLnJlbGVhc2UgPSBkcm1fcmVsZWFzZSwKLQkJIC5pb2N0bCA9IGRybV9pb2N0bCwKLQkJIC5tbWFwID0gZHJtX21tYXAsCi0JCSAucG9sbCA9IGRybV9wb2xsLAotCQkgLmZhc3luYyA9IGRybV9mYXN5bmMsCisJCS5vd25lciA9IFRISVNfTU9EVUxFLAorCQkub3BlbiA9IGRybV9vcGVuLAorCQkucmVsZWFzZSA9IGRybV9yZWxlYXNlLAorCQkuaW9jdGwgPSBkcm1faW9jdGwsCisJCS5tbWFwID0gZHJtX21tYXAsCisJCS5wb2xsID0gZHJtX3BvbGwsCisJCS5mYXN5bmMgPSBkcm1fZmFzeW5jLAogI2lmZGVmIENPTkZJR19DT01QQVQKLQkJIC5jb21wYXRfaW9jdGwgPSByMTI4X2NvbXBhdF9pb2N0bCwKKwkJLmNvbXBhdF9pb2N0bCA9IHIxMjhfY29tcGF0X2lvY3RsLAogI2VuZGlmCiAJfSwKLQogCS5wY2lfZHJpdmVyID0gewotCQkgLm5hbWUgPSBEUklWRVJfTkFNRSwKLQkJIC5pZF90YWJsZSA9IHBjaWlkbGlzdCwKKwkJLm5hbWUgPSBEUklWRVJfTkFNRSwKKwkJLmlkX3RhYmxlID0gcGNpaWRsaXN0LAogCX0sCiAKIAkubmFtZSA9IERSSVZFUl9OQU1FLApAQCAtODcsNiArODcsNyBAQAogc3RhdGljIGludCBfX2luaXQgcjEyOF9pbml0KHZvaWQpCiB7CiAJZHJpdmVyLm51bV9pb2N0bHMgPSByMTI4X21heF9pb2N0bDsKKwogCXJldHVybiBkcm1faW5pdCgmZHJpdmVyKTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3IxMjgvcjEyOF9kcnYuaCBiL2RyaXZlcnMvZ3B1L2RybS9yMTI4L3IxMjhfZHJ2LmgKaW5kZXggMDExMTA1ZS4uNTg5OGIyNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3IxMjgvcjEyOF9kcnYuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vcjEyOC9yMTI4X2Rydi5oCkBAIC0yOSw3ICsyOSw3IEBACiAgKiAgICBSaWNrYXJkIEUuIChSaWspIEZhaXRoIDxmYWl0aEB2YWxpbnV4LmNvbT4KICAqICAgIEtldmluIEUuIE1hcnRpbiA8bWFydGluQHZhbGludXguY29tPgogICogICAgR2FyZXRoIEh1Z2hlcyA8Z2FyZXRoQHZhbGludXguY29tPgotICogICAgTWljaGVsIETDpG56ZXIgPGRhZW56ZXJtQHN0dWRlbnQuZXRoei5jaD4KKyAqICAgIE1pY2hlbCBE77+9emVyIDxkYWVuemVybUBzdHVkZW50LmV0aHouY2g+CiAgKi8KIAogI2lmbmRlZiBfX1IxMjhfRFJWX0hfXwpAQCAtOTcsNiArOTcsOCBAQAogCXUzMiBjcnRjX29mZnNldDsKIAl1MzIgY3J0Y19vZmZzZXRfY250bDsKIAorCWF0b21pY190IHZibF9yZWNlaXZlZDsKKwogCXUzMiBjb2xvcl9mbXQ7CiAJdW5zaWduZWQgaW50IGZyb250X29mZnNldDsKIAl1bnNpZ25lZCBpbnQgZnJvbnRfcGl0Y2g7CkBAIC0xNDksMTEgKzE1MSwxMiBAQAogZXh0ZXJuIGludCByMTI4X2RvX2NjZV9pZGxlKGRybV9yMTI4X3ByaXZhdGVfdCAqIGRldl9wcml2KTsKIGV4dGVybiBpbnQgcjEyOF9kb19jbGVhbnVwX2NjZShzdHJ1Y3QgZHJtX2RldmljZSAqIGRldik7CiAKLWV4dGVybiBpbnQgcjEyOF9kcml2ZXJfdmJsYW5rX3dhaXQoc3RydWN0IGRybV9kZXZpY2UgKiBkZXYsIHVuc2lnbmVkIGludCAqc2VxdWVuY2UpOwotCitleHRlcm4gaW50IHIxMjhfZW5hYmxlX3ZibGFuayhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgY3J0Yyk7CitleHRlcm4gdm9pZCByMTI4X2Rpc2FibGVfdmJsYW5rKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGludCBjcnRjKTsKK2V4dGVybiB1MzIgcjEyOF9nZXRfdmJsYW5rX2NvdW50ZXIoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50IGNydGMpOwogZXh0ZXJuIGlycXJldHVybl90IHIxMjhfZHJpdmVyX2lycV9oYW5kbGVyKERSTV9JUlFfQVJHUyk7CiBleHRlcm4gdm9pZCByMTI4X2RyaXZlcl9pcnFfcHJlaW5zdGFsbChzdHJ1Y3QgZHJtX2RldmljZSAqIGRldik7Ci1leHRlcm4gdm9pZCByMTI4X2RyaXZlcl9pcnFfcG9zdGluc3RhbGwoc3RydWN0IGRybV9kZXZpY2UgKiBkZXYpOworZXh0ZXJuIGludCByMTI4X2RyaXZlcl9pcnFfcG9zdGluc3RhbGwoc3RydWN0IGRybV9kZXZpY2UgKmRldik7CiBleHRlcm4gdm9pZCByMTI4X2RyaXZlcl9pcnFfdW5pbnN0YWxsKHN0cnVjdCBkcm1fZGV2aWNlICogZGV2KTsKIGV4dGVybiB2b2lkIHIxMjhfZHJpdmVyX2xhc3RjbG9zZShzdHJ1Y3QgZHJtX2RldmljZSAqIGRldik7CiBleHRlcm4gdm9pZCByMTI4X2RyaXZlcl9wcmVjbG9zZShzdHJ1Y3QgZHJtX2RldmljZSAqIGRldiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yMTI4L3IxMjhfaXJxLmMgYi9kcml2ZXJzL2dwdS9kcm0vcjEyOC9yMTI4X2lycS5jCmluZGV4IGM3NmZkY2EuLmQ3MzQ5MDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yMTI4L3IxMjhfaXJxLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3IxMjgvcjEyOF9pcnEuYwpAQCAtMzUsNiArMzUsMTYgQEAKICNpbmNsdWRlICJyMTI4X2RybS5oIgogI2luY2x1ZGUgInIxMjhfZHJ2LmgiCiAKK3UzMiByMTI4X2dldF92YmxhbmtfY291bnRlcihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgY3J0YykKK3sKKwljb25zdCBkcm1fcjEyOF9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKworCWlmIChjcnRjICE9IDApCisJCXJldHVybiAwOworCisJcmV0dXJuIGF0b21pY19yZWFkKCZkZXZfcHJpdi0+dmJsX3JlY2VpdmVkKTsKK30KKwogaXJxcmV0dXJuX3QgcjEyOF9kcml2ZXJfaXJxX2hhbmRsZXIoRFJNX0lSUV9BUkdTKQogewogCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSAoc3RydWN0IGRybV9kZXZpY2UgKikgYXJnOwpAQCAtNDYsMzAgKzU2LDM4IEBACiAJLyogVkJMQU5LIGludGVycnVwdCAqLwogCWlmIChzdGF0dXMgJiBSMTI4X0NSVENfVkJMQU5LX0lOVCkgewogCQlSMTI4X1dSSVRFKFIxMjhfR0VOX0lOVF9TVEFUVVMsIFIxMjhfQ1JUQ19WQkxBTktfSU5UX0FLKTsKLQkJYXRvbWljX2luYygmZGV2LT52YmxfcmVjZWl2ZWQpOwotCQlEUk1fV0FLRVVQKCZkZXYtPnZibF9xdWV1ZSk7Ci0JCWRybV92Ymxfc2VuZF9zaWduYWxzKGRldik7CisJCWF0b21pY19pbmMoJmRldl9wcml2LT52YmxfcmVjZWl2ZWQpOworCQlkcm1faGFuZGxlX3ZibGFuayhkZXYsIDApOwogCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CiAJfQogCXJldHVybiBJUlFfTk9ORTsKIH0KIAotaW50IHIxMjhfZHJpdmVyX3ZibGFua193YWl0KHN0cnVjdCBkcm1fZGV2aWNlICogZGV2LCB1bnNpZ25lZCBpbnQgKnNlcXVlbmNlKQoraW50IHIxMjhfZW5hYmxlX3ZibGFuayhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgY3J0YykKIHsKLQl1bnNpZ25lZCBpbnQgY3VyX3ZibGFuazsKLQlpbnQgcmV0ID0gMDsKKwlkcm1fcjEyOF9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAotCS8qIEFzc3VtZSB0aGF0IHRoZSB1c2VyIGhhcyBtaXNzZWQgdGhlIGN1cnJlbnQgc2VxdWVuY2UgbnVtYmVyCi0JICogYnkgYWJvdXQgYSBkYXkgcmF0aGVyIHRoYW4gc2hlIHdhbnRzIHRvIHdhaXQgZm9yIHllYXJzCi0JICogdXNpbmcgdmVydGljYWwgYmxhbmtzLi4uCisJaWYgKGNydGMgIT0gMCkgeworCQlEUk1fRVJST1IoIiVzOiAgYmFkIGNydGMgJWRcbiIsIF9fZnVuY19fLCBjcnRjKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJUjEyOF9XUklURShSMTI4X0dFTl9JTlRfQ05UTCwgUjEyOF9DUlRDX1ZCTEFOS19JTlRfRU4pOworCXJldHVybiAwOworfQorCit2b2lkIHIxMjhfZGlzYWJsZV92Ymxhbmsoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50IGNydGMpCit7CisJaWYgKGNydGMgIT0gMCkKKwkJRFJNX0VSUk9SKCIlczogIGJhZCBjcnRjICVkXG4iLCBfX2Z1bmNfXywgY3J0Yyk7CisKKwkvKgorCSAqIEZJWE1FOiBpbXBsZW1lbnQgcHJvcGVyIGludGVycnVwdCBkaXNhYmxlIGJ5IHVzaW5nIHRoZSB2YmxhbmsKKwkgKiBjb3VudGVyIHJlZ2lzdGVyIChpZiBhdmFpbGFibGUpCisJICoKKwkgKiBSMTI4X1dSSVRFKFIxMjhfR0VOX0lOVF9DTlRMLAorCSAqICAgICAgICAgICAgUjEyOF9SRUFEKFIxMjhfR0VOX0lOVF9DTlRMKSAmIH5SMTI4X0NSVENfVkJMQU5LX0lOVF9FTik7CiAJICovCi0JRFJNX1dBSVRfT04ocmV0LCBkZXYtPnZibF9xdWV1ZSwgMyAqIERSTV9IWiwKLQkJICAgICgoKGN1cl92YmxhbmsgPSBhdG9taWNfcmVhZCgmZGV2LT52YmxfcmVjZWl2ZWQpKQotCQkgICAgICAtICpzZXF1ZW5jZSkgPD0gKDEgPDwgMjMpKSk7Ci0KLQkqc2VxdWVuY2UgPSBjdXJfdmJsYW5rOwotCi0JcmV0dXJuIHJldDsKIH0KIAogdm9pZCByMTI4X2RyaXZlcl9pcnFfcHJlaW5zdGFsbChzdHJ1Y3QgZHJtX2RldmljZSAqIGRldikKQEAgLTgyLDEyICsxMDAsOSBAQAogCVIxMjhfV1JJVEUoUjEyOF9HRU5fSU5UX1NUQVRVUywgUjEyOF9DUlRDX1ZCTEFOS19JTlRfQUspOwogfQogCi12b2lkIHIxMjhfZHJpdmVyX2lycV9wb3N0aW5zdGFsbChzdHJ1Y3QgZHJtX2RldmljZSAqIGRldikKK2ludCByMTI4X2RyaXZlcl9pcnFfcG9zdGluc3RhbGwoc3RydWN0IGRybV9kZXZpY2UgKmRldikKIHsKLQlkcm1fcjEyOF9wcml2YXRlX3QgKmRldl9wcml2ID0gKGRybV9yMTI4X3ByaXZhdGVfdCAqKSBkZXYtPmRldl9wcml2YXRlOwotCi0JLyogVHVybiBvbiBWQkwgaW50ZXJydXB0ICovCi0JUjEyOF9XUklURShSMTI4X0dFTl9JTlRfQ05UTCwgUjEyOF9DUlRDX1ZCTEFOS19JTlRfRU4pOworCXJldHVybiBkcm1fdmJsYW5rX2luaXQoZGV2LCAxKTsKIH0KIAogdm9pZCByMTI4X2RyaXZlcl9pcnFfdW5pbnN0YWxsKHN0cnVjdCBkcm1fZGV2aWNlICogZGV2KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3IxMjgvcjEyOF9zdGF0ZS5jIGIvZHJpdmVycy9ncHUvZHJtL3IxMjgvcjEyOF9zdGF0ZS5jCmluZGV4IDUxYTlhZmMuLmY3YTViNTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yMTI4L3IxMjhfc3RhdGUuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcjEyOC9yMTI4X3N0YXRlLmMKQEAgLTE2MjksNyArMTYyOSw3IEBACiAKIAlzd2l0Y2ggKHBhcmFtLT5wYXJhbSkgewogCWNhc2UgUjEyOF9QQVJBTV9JUlFfTlI6Ci0JCXZhbHVlID0gZGV2LT5pcnE7CisJCXZhbHVlID0gZHJtX2Rldl90b19pcnEoZGV2KTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcmV0dXJuIC1FSU5WQUw7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9jcC5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fY3AuYwppbmRleCAyNDhhYjRhLi41OWEyMTMyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9jcC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2NwLmMKQEAgLTcxLDcgKzcxLDggQEAKIAogc3RhdGljIHUzMiBJR1BfUkVBRF9NQ0lORChkcm1fcmFkZW9uX3ByaXZhdGVfdCAqZGV2X3ByaXYsIGludCBhZGRyKQogewotCWlmICgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA9PSBDSElQX1JTNjkwKQorCWlmICgoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPT0gQ0hJUF9SUzY5MCkgfHwKKwkgICAgKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID09IENISVBfUlM3NDApKQogCQlyZXR1cm4gUlM2OTBfUkVBRF9NQ0lORChkZXZfcHJpdiwgYWRkcik7CiAJZWxzZQogCQlyZXR1cm4gUlM0ODBfUkVBRF9NQ0lORChkZXZfcHJpdiwgYWRkcik7CkBAIC04Miw3ICs4Myw4IEBACiAKIAlpZiAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPT0gQ0hJUF9SVjUxNSkKIAkJcmV0dXJuIFI1MDBfUkVBRF9NQ0lORChkZXZfcHJpdiwgUlY1MTVfTUNfRkJfTE9DQVRJT04pOwotCWVsc2UgaWYgKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID09IENISVBfUlM2OTApCisJZWxzZSBpZiAoKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID09IENISVBfUlM2OTApIHx8CisJCSAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPT0gQ0hJUF9SUzc0MCkpCiAJCXJldHVybiBSUzY5MF9SRUFEX01DSU5EKGRldl9wcml2LCBSUzY5MF9NQ19GQl9MT0NBVElPTik7CiAJZWxzZSBpZiAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPiBDSElQX1JWNTE1KQogCQlyZXR1cm4gUjUwMF9SRUFEX01DSU5EKGRldl9wcml2LCBSNTIwX01DX0ZCX0xPQ0FUSU9OKTsKQEAgLTk0LDcgKzk2LDggQEAKIHsKIAlpZiAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPT0gQ0hJUF9SVjUxNSkKIAkJUjUwMF9XUklURV9NQ0lORChSVjUxNV9NQ19GQl9MT0NBVElPTiwgZmJfbG9jKTsKLQllbHNlIGlmICgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA9PSBDSElQX1JTNjkwKQorCWVsc2UgaWYgKCgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA9PSBDSElQX1JTNjkwKSB8fAorCQkgKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID09IENISVBfUlM3NDApKQogCQlSUzY5MF9XUklURV9NQ0lORChSUzY5MF9NQ19GQl9MT0NBVElPTiwgZmJfbG9jKTsKIAllbHNlIGlmICgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA+IENISVBfUlY1MTUpCiAJCVI1MDBfV1JJVEVfTUNJTkQoUjUyMF9NQ19GQl9MT0NBVElPTiwgZmJfbG9jKTsKQEAgLTEwNiw3ICsxMDksOCBAQAogewogCWlmICgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA9PSBDSElQX1JWNTE1KQogCQlSNTAwX1dSSVRFX01DSU5EKFJWNTE1X01DX0FHUF9MT0NBVElPTiwgYWdwX2xvYyk7Ci0JZWxzZSBpZiAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPT0gQ0hJUF9SUzY5MCkKKwllbHNlIGlmICgoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPT0gQ0hJUF9SUzY5MCkgfHwKKwkJICgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA9PSBDSElQX1JTNzQwKSkKIAkJUlM2OTBfV1JJVEVfTUNJTkQoUlM2OTBfTUNfQUdQX0xPQ0FUSU9OLCBhZ3BfbG9jKTsKIAllbHNlIGlmICgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA+IENISVBfUlY1MTUpCiAJCVI1MDBfV1JJVEVfTUNJTkQoUjUyMF9NQ19BR1BfTE9DQVRJT04sIGFncF9sb2MpOwpAQCAtMTIyLDE1ICsxMjYsMTcgQEAKIAlpZiAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPT0gQ0hJUF9SVjUxNSkgewogCQlSNTAwX1dSSVRFX01DSU5EKFJWNTE1X01DX0FHUF9CQVNFLCBhZ3BfYmFzZV9sbyk7CiAJCVI1MDBfV1JJVEVfTUNJTkQoUlY1MTVfTUNfQUdQX0JBU0VfMiwgYWdwX2Jhc2VfaGkpOwotCX0gZWxzZSBpZiAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPT0gQ0hJUF9SUzY5MCkgeworCX0gZWxzZSBpZiAoKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID09IENISVBfUlM2OTApIHx8CisJCSAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPT0gQ0hJUF9SUzc0MCkpIHsKIAkJUlM2OTBfV1JJVEVfTUNJTkQoUlM2OTBfTUNfQUdQX0JBU0UsIGFncF9iYXNlX2xvKTsKIAkJUlM2OTBfV1JJVEVfTUNJTkQoUlM2OTBfTUNfQUdQX0JBU0VfMiwgYWdwX2Jhc2VfaGkpOwogCX0gZWxzZSBpZiAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPiBDSElQX1JWNTE1KSB7CiAJCVI1MDBfV1JJVEVfTUNJTkQoUjUyMF9NQ19BR1BfQkFTRSwgYWdwX2Jhc2VfbG8pOwogCQlSNTAwX1dSSVRFX01DSU5EKFI1MjBfTUNfQUdQX0JBU0VfMiwgYWdwX2Jhc2VfaGkpOwotCX0gZWxzZSBpZiAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPT0gQ0hJUF9SUzQ4MCkgeworCX0gZWxzZSBpZiAoKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID09IENISVBfUlM0MDApIHx8CisJCSAgICgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA9PSBDSElQX1JTNDgwKSkgewogCQlSQURFT05fV1JJVEUoUkFERU9OX0FHUF9CQVNFLCBhZ3BfYmFzZV9sbyk7Ci0JCVJBREVPTl9XUklURShSUzQ4MF9BR1BfQkFTRV8yLCAwKTsKKwkJUkFERU9OX1dSSVRFKFJTNDgwX0FHUF9CQVNFXzIsIGFncF9iYXNlX2hpKTsKIAl9IGVsc2UgewogCQlSQURFT05fV1JJVEUoUkFERU9OX0FHUF9CQVNFLCBhZ3BfYmFzZV9sbyk7CiAJCWlmICgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA+PSBDSElQX1IyMDApCkBAIC0zNDcsNiArMzUzLDcgQEAKIAkJICAgKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID09IENISVBfUjM1MCkgfHwKIAkJICAgKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID09IENISVBfUlYzNTApIHx8CiAJCSAgICgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA9PSBDSElQX1JWMzgwKSB8fAorCQkgICAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPT0gQ0hJUF9SUzQwMCkgfHwKIAkJICAgKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID09IENISVBfUlM0ODApKSB7CiAJCURSTV9JTkZPKCJMb2FkaW5nIFIzMDAgTWljcm9jb2RlXG4iKTsKIAkJZm9yIChpID0gMDsgaSA8IDI1NjsgaSsrKSB7CkBAIC0zNTYsNiArMzYzLDcgQEAKIAkJCQkgICAgIFIzMDBfY3BfbWljcm9jb2RlW2ldWzBdKTsKIAkJfQogCX0gZWxzZSBpZiAoKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID09IENISVBfUjQyMCkgfHwKKwkJICAgKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID09IENISVBfUjQyMykgfHwKIAkJICAgKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID09IENISVBfUlY0MTApKSB7CiAJCURSTV9JTkZPKCJMb2FkaW5nIFI0MDAgTWljcm9jb2RlXG4iKTsKIAkJZm9yIChpID0gMDsgaSA8IDI1NjsgaSsrKSB7CkBAIC0zNjQsOCArMzcyLDkgQEAKIAkJCVJBREVPTl9XUklURShSQURFT05fQ1BfTUVfUkFNX0RBVEFMLAogCQkJCSAgICAgUjQyMF9jcF9taWNyb2NvZGVbaV1bMF0pOwogCQl9Ci0JfSBlbHNlIGlmICgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA9PSBDSElQX1JTNjkwKSB7Ci0JCURSTV9JTkZPKCJMb2FkaW5nIFJTNjkwIE1pY3JvY29kZVxuIik7CisJfSBlbHNlIGlmICgoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPT0gQ0hJUF9SUzY5MCkgfHwKKwkJICAgKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID09IENISVBfUlM3NDApKSB7CisJCURSTV9JTkZPKCJMb2FkaW5nIFJTNjkwL1JTNzQwIE1pY3JvY29kZVxuIik7CiAJCWZvciAoaSA9IDA7IGkgPCAyNTY7IGkrKykgewogCQkJUkFERU9OX1dSSVRFKFJBREVPTl9DUF9NRV9SQU1fREFUQUgsCiAJCQkJICAgICBSUzY5MF9jcF9taWNyb2NvZGVbaV1bMV0pOwpAQCAtNjI2LDggKzYzNSw2IEBACiAJCSAgICAgZGV2X3ByaXYtPnJpbmcuc2l6ZV9sMnF3KTsKICNlbmRpZgogCi0JLyogU3RhcnQgd2l0aCBhc3N1bWluZyB0aGF0IHdyaXRlYmFjayBkb2Vzbid0IHdvcmsgKi8KLQlkZXZfcHJpdi0+d3JpdGViYWNrX3dvcmtzID0gMDsKIAogCS8qIEluaXRpYWxpemUgdGhlIHNjcmF0Y2ggcmVnaXN0ZXIgcG9pbnRlci4gIFRoaXMgd2lsbCBjYXVzZQogCSAqIHRoZSBzY3JhdGNoIHJlZ2lzdGVyIHZhbHVlcyB0byBiZSB3cml0dGVuIG91dCB0byBtZW1vcnkKQEAgLTY0Niw4ICs2NTMsMTggQEAKIAlSQURFT05fV1JJVEUoUkFERU9OX1NDUkFUQ0hfVU1TSywgMHg3KTsKIAogCS8qIFR1cm4gb24gYnVzIG1hc3RlcmluZyAqLwotCXRtcCA9IFJBREVPTl9SRUFEKFJBREVPTl9CVVNfQ05UTCkgJiB+UkFERU9OX0JVU19NQVNURVJfRElTOwotCVJBREVPTl9XUklURShSQURFT05fQlVTX0NOVEwsIHRtcCk7CisJaWYgKCgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA9PSBDSElQX1JTNDAwKSB8fAorCSAgICAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPT0gQ0hJUF9SUzY5MCkgfHwKKwkgICAgKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID09IENISVBfUlM3NDApKSB7CisJCS8qIHJzNDAwLCByczY5MC9yczc0MCAqLworCQl0bXAgPSBSQURFT05fUkVBRChSQURFT05fQlVTX0NOVEwpICYgflJTNDAwX0JVU19NQVNURVJfRElTOworCQlSQURFT05fV1JJVEUoUkFERU9OX0JVU19DTlRMLCB0bXApOworCX0gZWxzZSBpZiAoISgoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPT0gQ0hJUF9SVjM4MCkgfHwKKwkJICAgICgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA+PSBDSElQX1I0MjMpKSkgeworCQkvKiByMXh4LCByMnh4LCByMzAwLCByKHYpMzUwLCByNDIwL3I0ODEsIHJzNDgwICovCisJCXRtcCA9IFJBREVPTl9SRUFEKFJBREVPTl9CVVNfQ05UTCkgJiB+UkFERU9OX0JVU19NQVNURVJfRElTOworCQlSQURFT05fV1JJVEUoUkFERU9OX0JVU19DTlRMLCB0bXApOworCX0gLyogUENJRSBjYXJkcyBhcHBlYXJzIHRvIG5vdCBuZWVkIHRoaXMgKi8KIAogCWRldl9wcml2LT5zYXJlYV9wcml2LT5sYXN0X2ZyYW1lID0gZGV2X3ByaXYtPnNjcmF0Y2hbMF0gPSAwOwogCVJBREVPTl9XUklURShSQURFT05fTEFTVF9GUkFNRV9SRUcsIGRldl9wcml2LT5zYXJlYV9wcml2LT5sYXN0X2ZyYW1lKTsKQEAgLTY3NCw2ICs2OTEsOSBAQAogewogCXUzMiB0bXA7CiAKKwkvKiBTdGFydCB3aXRoIGFzc3VtaW5nIHRoYXQgd3JpdGViYWNrIGRvZXNuJ3Qgd29yayAqLworCWRldl9wcml2LT53cml0ZWJhY2tfd29ya3MgPSAwOworCiAJLyogV3JpdGViYWNrIGRvZXNuJ3Qgc2VlbSB0byB3b3JrIGV2ZXJ5d2hlcmUsIHRlc3QgaXQgaGVyZSBhbmQgcG9zc2libHkKIAkgKiBlbmFibGUgaXQgaWYgaXQgYXBwZWFycyB0byB3b3JrCiAJICovCkBAIC03MTksNyArNzM5LDggQEAKIAkJCSAgZGV2X3ByaXYtPmdhcnRfc2l6ZSk7CiAKIAkJdGVtcCA9IElHUF9SRUFEX01DSU5EKGRldl9wcml2LCBSUzQ4MF9NQ19NSVNDX0NOVEwpOwotCQlpZiAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPT0gQ0hJUF9SUzY5MCkKKwkJaWYgKCgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA9PSBDSElQX1JTNjkwKSB8fAorCQkgICAgKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID09IENISVBfUlM3NDApKQogCQkJSUdQX1dSSVRFX01DSU5EKFJTNDgwX01DX01JU0NfQ05UTCwgKFJTNDgwX0dBUlRfSU5ERVhfUkVHX0VOIHwKIAkJCQkJCQkgICAgIFJTNjkwX0JMT0NLX0dGWF9EM19FTikpOwogCQllbHNlCkBAIC04MTIsNiArODMzLDcgQEAKIAl1MzIgdG1wOwogCiAJaWYgKCgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA9PSBDSElQX1JTNjkwKSB8fAorCSAgICAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPT0gQ0hJUF9SUzc0MCkgfHwKIAkgICAgKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9JU19JR1BHQVJUKSkgewogCQlyYWRlb25fc2V0X2lncGdhcnQoZGV2X3ByaXYsIG9uKTsKIAkJcmV0dXJuOwpAQCAtMTI4Niw3ICsxMzA4LDcgQEAKIAlyYWRlb25fY3BfaW5pdF9yaW5nX2J1ZmZlcihkZXYsIGRldl9wcml2KTsKIAogCXJhZGVvbl9kb19lbmdpbmVfcmVzZXQoZGV2KTsKLQlyYWRlb25fZW5hYmxlX2ludGVycnVwdChkZXYpOworCXJhZGVvbl9pcnFfc2V0X3N0YXRlKGRldiwgUkFERU9OX1NXX0lOVF9FTkFCTEUsIDEpOwogCiAJRFJNX0RFQlVHKCJyYWRlb25fZG9fcmVzdW1lX2NwKCkgY29tcGxldGVcbiIpOwogCkBAIC0xNzA4LDYgKzE3MzAsNyBAQAogCWNhc2UgQ0hJUF9SMzAwOgogCWNhc2UgQ0hJUF9SMzUwOgogCWNhc2UgQ0hJUF9SNDIwOgorCWNhc2UgQ0hJUF9SNDIzOgogCWNhc2UgQ0hJUF9SVjQxMDoKIAljYXNlIENISVBfUlY1MTU6CiAJY2FzZSBDSElQX1I1MjA6CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9kcnYuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2Rydi5jCmluZGV4IDYzN2JkN2YuLjcxYWY3NDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2Rydi5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2Rydi5jCkBAIC01Miw2ICs1MiwyOCBAQAogCQkgICAgICAgICJyMzAwIikpOwogfQogCitzdGF0aWMgaW50IHJhZGVvbl9zdXNwZW5kKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3sKKwlkcm1fcmFkZW9uX3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCisJLyogRGlzYWJsZSAqYWxsKiBpbnRlcnJ1cHRzICovCisJaWYgKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID49IENISVBfUlM2OTApCisJCVJBREVPTl9XUklURShSNTAwX0R4TU9ERV9JTlRfTUFTSywgMCk7CisJUkFERU9OX1dSSVRFKFJBREVPTl9HRU5fSU5UX0NOVEwsIDApOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHJhZGVvbl9yZXN1bWUoc3RydWN0IGRybV9kZXZpY2UgKmRldikKK3sKKwlkcm1fcmFkZW9uX3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCisJLyogUmVzdG9yZSBpbnRlcnJ1cHQgcmVnaXN0ZXJzICovCisJaWYgKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID49IENISVBfUlM2OTApCisJCVJBREVPTl9XUklURShSNTAwX0R4TU9ERV9JTlRfTUFTSywgZGV2X3ByaXYtPnI1MDBfZGlzcF9pcnFfcmVnKTsKKwlSQURFT05fV1JJVEUoUkFERU9OX0dFTl9JTlRfQ05UTCwgZGV2X3ByaXYtPmlycV9lbmFibGVfcmVnKTsKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHBjaWlkbGlzdFtdID0gewogCXJhZGVvbl9QQ0lfSURTCiB9OwpAQCAtNTksOCArODEsNyBAQAogc3RhdGljIHN0cnVjdCBkcm1fZHJpdmVyIGRyaXZlciA9IHsKIAkuZHJpdmVyX2ZlYXR1cmVzID0KIAkgICAgRFJJVkVSX1VTRV9BR1AgfCBEUklWRVJfVVNFX01UUlIgfCBEUklWRVJfUENJX0RNQSB8IERSSVZFUl9TRyB8Ci0JICAgIERSSVZFUl9IQVZFX0lSUSB8IERSSVZFUl9IQVZFX0RNQSB8IERSSVZFUl9JUlFfU0hBUkVEIHwKLQkgICAgRFJJVkVSX0lSUV9WQkwgfCBEUklWRVJfSVJRX1ZCTDIsCisJICAgIERSSVZFUl9IQVZFX0lSUSB8IERSSVZFUl9IQVZFX0RNQSB8IERSSVZFUl9JUlFfU0hBUkVELAogCS5kZXZfcHJpdl9zaXplID0gc2l6ZW9mKGRybV9yYWRlb25fYnVmX3ByaXZfdCksCiAJLmxvYWQgPSByYWRlb25fZHJpdmVyX2xvYWQsCiAJLmZpcnN0b3BlbiA9IHJhZGVvbl9kcml2ZXJfZmlyc3RvcGVuLApAQCAtNjksOCArOTAsMTEgQEAKIAkucG9zdGNsb3NlID0gcmFkZW9uX2RyaXZlcl9wb3N0Y2xvc2UsCiAJLmxhc3RjbG9zZSA9IHJhZGVvbl9kcml2ZXJfbGFzdGNsb3NlLAogCS51bmxvYWQgPSByYWRlb25fZHJpdmVyX3VubG9hZCwKLQkudmJsYW5rX3dhaXQgPSByYWRlb25fZHJpdmVyX3ZibGFua193YWl0LAotCS52Ymxhbmtfd2FpdDIgPSByYWRlb25fZHJpdmVyX3ZibGFua193YWl0MiwKKwkuc3VzcGVuZCA9IHJhZGVvbl9zdXNwZW5kLAorCS5yZXN1bWUgPSByYWRlb25fcmVzdW1lLAorCS5nZXRfdmJsYW5rX2NvdW50ZXIgPSByYWRlb25fZ2V0X3ZibGFua19jb3VudGVyLAorCS5lbmFibGVfdmJsYW5rID0gcmFkZW9uX2VuYWJsZV92YmxhbmssCisJLmRpc2FibGVfdmJsYW5rID0gcmFkZW9uX2Rpc2FibGVfdmJsYW5rLAogCS5kcmlfbGlicmFyeV9uYW1lID0gZHJpX2xpYnJhcnlfbmFtZSwKIAkuaXJxX3ByZWluc3RhbGwgPSByYWRlb25fZHJpdmVyX2lycV9wcmVpbnN0YWxsLAogCS5pcnFfcG9zdGluc3RhbGwgPSByYWRlb25fZHJpdmVyX2lycV9wb3N0aW5zdGFsbCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2Rydi5oIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZHJ2LmgKaW5kZXggMDk5MzgxNi4uNGRiYjgxMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZHJ2LmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZHJ2LmgKQEAgLTEyMiw5ICsxMjIsMTIgQEAKIAlDSElQX1JWMzUwLAogCUNISVBfUlYzODAsCiAJQ0hJUF9SNDIwLAorCUNISVBfUjQyMywKIAlDSElQX1JWNDEwLAorCUNISVBfUlM0MDAsCiAJQ0hJUF9SUzQ4MCwKIAlDSElQX1JTNjkwLAorCUNISVBfUlM3NDAsCiAJQ0hJUF9SVjUxNSwKIAlDSElQX1I1MjAsCiAJQ0hJUF9SVjUzMCwKQEAgLTM3OCwxNyArMzgxLDE3IEBACiAJCQkgICAgICAgc3RydWN0IG1lbV9ibG9jayAqaGVhcCk7CiAKIAkJCQkvKiByYWRlb25faXJxLmMgKi8KK2V4dGVybiB2b2lkIHJhZGVvbl9pcnFfc2V0X3N0YXRlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHUzMiBtYXNrLCBpbnQgc3RhdGUpOwogZXh0ZXJuIGludCByYWRlb25faXJxX2VtaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpOwogZXh0ZXJuIGludCByYWRlb25faXJxX3dhaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpOwogCiBleHRlcm4gdm9pZCByYWRlb25fZG9fcmVsZWFzZShzdHJ1Y3QgZHJtX2RldmljZSAqIGRldik7Ci1leHRlcm4gaW50IHJhZGVvbl9kcml2ZXJfdmJsYW5rX3dhaXQoc3RydWN0IGRybV9kZXZpY2UgKiBkZXYsCi0JCQkJICAgICB1bnNpZ25lZCBpbnQgKnNlcXVlbmNlKTsKLWV4dGVybiBpbnQgcmFkZW9uX2RyaXZlcl92Ymxhbmtfd2FpdDIoc3RydWN0IGRybV9kZXZpY2UgKiBkZXYsCi0JCQkJICAgICAgdW5zaWduZWQgaW50ICpzZXF1ZW5jZSk7CitleHRlcm4gdTMyIHJhZGVvbl9nZXRfdmJsYW5rX2NvdW50ZXIoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50IGNydGMpOworZXh0ZXJuIGludCByYWRlb25fZW5hYmxlX3ZibGFuayhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgY3J0Yyk7CitleHRlcm4gdm9pZCByYWRlb25fZGlzYWJsZV92Ymxhbmsoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50IGNydGMpOwogZXh0ZXJuIGlycXJldHVybl90IHJhZGVvbl9kcml2ZXJfaXJxX2hhbmRsZXIoRFJNX0lSUV9BUkdTKTsKIGV4dGVybiB2b2lkIHJhZGVvbl9kcml2ZXJfaXJxX3ByZWluc3RhbGwoc3RydWN0IGRybV9kZXZpY2UgKiBkZXYpOwotZXh0ZXJuIHZvaWQgcmFkZW9uX2RyaXZlcl9pcnFfcG9zdGluc3RhbGwoc3RydWN0IGRybV9kZXZpY2UgKiBkZXYpOworZXh0ZXJuIGludCByYWRlb25fZHJpdmVyX2lycV9wb3N0aW5zdGFsbChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKIGV4dGVybiB2b2lkIHJhZGVvbl9kcml2ZXJfaXJxX3VuaW5zdGFsbChzdHJ1Y3QgZHJtX2RldmljZSAqIGRldik7CiBleHRlcm4gdm9pZCByYWRlb25fZW5hYmxlX2ludGVycnVwdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKIGV4dGVybiBpbnQgcmFkZW9uX3ZibGFua19jcnRjX2dldChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKQEAgLTM5NywxOSArNDAwLDIyIEBACiBleHRlcm4gaW50IHJhZGVvbl9kcml2ZXJfbG9hZChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB1bnNpZ25lZCBsb25nIGZsYWdzKTsKIGV4dGVybiBpbnQgcmFkZW9uX2RyaXZlcl91bmxvYWQoc3RydWN0IGRybV9kZXZpY2UgKmRldik7CiBleHRlcm4gaW50IHJhZGVvbl9kcml2ZXJfZmlyc3RvcGVuKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwotZXh0ZXJuIHZvaWQgcmFkZW9uX2RyaXZlcl9wcmVjbG9zZShzdHJ1Y3QgZHJtX2RldmljZSAqIGRldiwgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpOwotZXh0ZXJuIHZvaWQgcmFkZW9uX2RyaXZlcl9wb3N0Y2xvc2Uoc3RydWN0IGRybV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBkcm1fZmlsZSAqIGZpbHApOworZXh0ZXJuIHZvaWQgcmFkZW9uX2RyaXZlcl9wcmVjbG9zZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAorCQkJCSAgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KTsKK2V4dGVybiB2b2lkIHJhZGVvbl9kcml2ZXJfcG9zdGNsb3NlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCisJCQkJICAgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KTsKIGV4dGVybiB2b2lkIHJhZGVvbl9kcml2ZXJfbGFzdGNsb3NlKHN0cnVjdCBkcm1fZGV2aWNlICogZGV2KTsKLWV4dGVybiBpbnQgcmFkZW9uX2RyaXZlcl9vcGVuKHN0cnVjdCBkcm1fZGV2aWNlICogZGV2LCBzdHJ1Y3QgZHJtX2ZpbGUgKiBmaWxwX3ByaXYpOworZXh0ZXJuIGludCByYWRlb25fZHJpdmVyX29wZW4oc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJCSAgICAgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KTsKIGV4dGVybiBsb25nIHJhZGVvbl9jb21wYXRfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBjbWQsCiAJCQkJdW5zaWduZWQgbG9uZyBhcmcpOwogCiAvKiByMzAwX2NtZGJ1Zi5jICovCiBleHRlcm4gdm9pZCByMzAwX2luaXRfcmVnX2ZsYWdzKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwogCi1leHRlcm4gaW50IHIzMDBfZG9fY3BfY21kYnVmKHN0cnVjdCBkcm1fZGV2aWNlICogZGV2LAorZXh0ZXJuIGludCByMzAwX2RvX2NwX2NtZGJ1ZihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAogCQkJICAgICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdiwKLQkJCSAgICAgZHJtX3JhZGVvbl9rY21kX2J1ZmZlcl90ICogY21kYnVmKTsKKwkJCSAgICAgZHJtX3JhZGVvbl9rY21kX2J1ZmZlcl90ICpjbWRidWYpOwogCiAvKiBGbGFncyBmb3Igc3RhdHMuYm94ZXMKICAqLwpAQCAtNDM0LDggKzQ0MCwzMSBAQAogIwlkZWZpbmUgUkFERU9OX1NDSVNTT1JfMV9FTkFCTEUJCSgxIDw8IDI5KQogIwlkZWZpbmUgUkFERU9OX1NDSVNTT1JfMl9FTkFCTEUJCSgxIDw8IDMwKQogCisvKgorICogUENJRSByYWRlb25zIChydjM3MC9ydjM4MCwgcnY0MTAsIHI0MjMvcjQzMC9yNDgwLCByNXh4KQorICogZG9uJ3QgaGF2ZSBhbiBleHBsaWNpdCBidXMgbWFzdGVyaW5nIGRpc2FibGUgYml0LiAgSXQncyBoYW5kbGVkCisgKiBieSB0aGUgUENJIEQtc3RhdGVzLiAgUE1JX0JNX0RJUyBkaXNhYmxlcyBELXN0YXRlIGJ1cyBtYXN0ZXIKKyAqIGhhbmRsaW5nLCBub3QgYnVzIG1hc3RlcmluZyBpdHNlbGYuCisgKi8KICNkZWZpbmUgUkFERU9OX0JVU19DTlRMCQkJMHgwMDMwCisvKiByMXh4LCByMnh4LCByMzAwLCByKHYpMzUwLCByNDIwL3I0ODEsIHJzNDgwICovCiAjCWRlZmluZSBSQURFT05fQlVTX01BU1RFUl9ESVMJCSgxIDw8IDYpCisvKiByczQwMCwgcnM2OTAvcnM3NDAgKi8KKyMJZGVmaW5lIFJTNDAwX0JVU19NQVNURVJfRElTCQkoMSA8PCAxNCkKKyMJZGVmaW5lIFJTNDAwX01TSV9SRUFSTQkJICAgICAgICAoMSA8PCAyMCkKKy8qIHNlZSBSUzQ4MF9NU0lfUkVBUk0gaW4gQUlDX0NOVEwgZm9yIHJzNDgwICovCisKKyNkZWZpbmUgUkFERU9OX0JVU19DTlRMMQkJMHgwMDM0CisjCWRlZmluZSBSQURFT05fUE1JX0JNX0RJUwkJKDEgPDwgMikKKyMJZGVmaW5lIFJBREVPTl9QTUlfSU5UX0RJUwkJKDEgPDwgMykKKworI2RlZmluZSBSVjM3MF9CVVNfQ05UTAkJCTB4MDA0YworIwlkZWZpbmUgUlYzNzBfUE1JX0JNX0RJUwkJICAgICAgICAoMSA8PCA1KQorIwlkZWZpbmUgUlYzNzBfUE1JX0lOVF9ESVMJCSgxIDw8IDYpCisKKyNkZWZpbmUgUkFERU9OX01TSV9SRUFSTV9FTgkJMHgwMTYwCisvKiBydjM3MC9ydjM4MCwgcnY0MTAsIHI0MjMvcjQzMC9yNDgwLCByNXh4ICovCisjCWRlZmluZSBSVjM3MF9NU0lfUkVBUk1fRU4JCSgxIDw8IDApCiAKICNkZWZpbmUgUkFERU9OX0NMT0NLX0NOVExfREFUQQkJMHgwMDBjCiAjCWRlZmluZSBSQURFT05fUExMX1dSX0VOCQkJKDEgPDwgNykKQEAgLTYyMyw2ICs2NTIsNyBAQAogIwlkZWZpbmUgUkFERU9OX1NXX0lOVF9URVNUCQkoMSA8PCAyNSkKICMJZGVmaW5lIFJBREVPTl9TV19JTlRfVEVTVF9BQ0sJCSgxIDw8IDI1KQogIwlkZWZpbmUgUkFERU9OX1NXX0lOVF9GSVJFCQkoMSA8PCAyNikKKyMgICAgICAgZGVmaW5lIFI1MDBfRElTUExBWV9JTlRfU1RBVFVTICAgICAgICAgICgxIDw8IDApCiAKICNkZWZpbmUgUkFERU9OX0hPU1RfUEFUSF9DTlRMCQkweDAxMzAKICMJZGVmaW5lIFJBREVPTl9IRFBfU09GVF9SRVNFVAkJKDEgPDwgMjYpCkBAIC05MDcsNiArOTM3LDcgQEAKIAogI2RlZmluZSBSQURFT05fQUlDX0NOVEwJCQkweDAxZDAKICMJZGVmaW5lIFJBREVPTl9QQ0lHQVJUX1RSQU5TTEFURV9FTgkoMSA8PCAwKQorIwlkZWZpbmUgUlM0ODBfTVNJX1JFQVJNCSAgICAgICAgICAgICAgICAoMSA8PCAzKQogI2RlZmluZSBSQURFT05fQUlDX1NUQVQJCQkweDAxZDQKICNkZWZpbmUgUkFERU9OX0FJQ19QVF9CQVNFCQkweDAxZDgKICNkZWZpbmUgUkFERU9OX0FJQ19MT19BRERSCQkweDAxZGMKQEAgLTExMTYsNiArMTE0Nyw5IEBACiAKICNkZWZpbmUgUjIwMF9WQVBfUFZTX0NOVExfMSAgICAgICAgICAgICAgIDB4MjJEMAogCisjZGVmaW5lIFJBREVPTl9DUlRDX0NSTlRfRlJBTUUgMHgwMjE0CisjZGVmaW5lIFJBREVPTl9DUlRDMl9DUk5UX0ZSQU1FIDB4MDMxNAorCiAjZGVmaW5lIFI1MDBfRDFDUlRDX1NUQVRVUyAweDYwOWMKICNkZWZpbmUgUjUwMF9EMkNSVENfU1RBVFVTIDB4Njg5YwogI2RlZmluZSBSNTAwX0NSVENfVl9CTEFOSyAoMTw8MCkKQEAgLTEyMDAsNyArMTIzNCw4IEBACiAKICNkZWZpbmUgSUdQX1dSSVRFX01DSU5EKGFkZHIsIHZhbCkJCQkJXAogZG8gewkJCQkJCQkJCVwKLQlpZiAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPT0gQ0hJUF9SUzY5MCkgICAgICAgXAorCWlmICgoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPT0gQ0hJUF9SUzY5MCkgfHwgICBcCisJICAgICgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA9PSBDSElQX1JTNzQwKSkgICAgICBcCiAJCVJTNjkwX1dSSVRFX01DSU5EKGFkZHIsIHZhbCk7CQkJCVwKIAllbHNlCQkJCQkJCQlcCiAJCVJTNDgwX1dSSVRFX01DSU5EKGFkZHIsIHZhbCk7CQkJCVwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2lycS5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25faXJxLmMKaW5kZXggZWU0MGQxOS4uNTA3OWY3MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25faXJxLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25faXJxLmMKQEAgLTI3LDcgKzI3LDcgQEAKICAqCiAgKiBBdXRob3JzOgogICogICAgS2VpdGggV2hpdHdlbGwgPGtlaXRoQHR1bmdzdGVuZ3JhcGhpY3MuY29tPgotICogICAgTWljaGVsIETDpG56ZXIgPG1pY2hlbEBkYWVuemVyLm5ldD4KKyAqICAgIE1pY2hlbCBE77+9emVyIDxtaWNoZWxAZGFlbnplci5uZXQ+CiAgKi8KIAogI2luY2x1ZGUgImRybVAuaCIKQEAgLTM1LDEyICszNSwxMjggQEAKICNpbmNsdWRlICJyYWRlb25fZHJtLmgiCiAjaW5jbHVkZSAicmFkZW9uX2Rydi5oIgogCi1zdGF0aWMgX19pbmxpbmVfXyB1MzIgcmFkZW9uX2Fja25vd2xlZGdlX2lycXMoZHJtX3JhZGVvbl9wcml2YXRlX3QgKiBkZXZfcHJpdiwKLQkJCQkJICAgICAgdTMyIG1hc2spCit2b2lkIHJhZGVvbl9pcnFfc2V0X3N0YXRlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHUzMiBtYXNrLCBpbnQgc3RhdGUpCiB7Ci0JdTMyIGlycXMgPSBSQURFT05fUkVBRChSQURFT05fR0VOX0lOVF9TVEFUVVMpICYgbWFzazsKKwlkcm1fcmFkZW9uX3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCisJaWYgKHN0YXRlKQorCQlkZXZfcHJpdi0+aXJxX2VuYWJsZV9yZWcgfD0gbWFzazsKKwllbHNlCisJCWRldl9wcml2LT5pcnFfZW5hYmxlX3JlZyAmPSB+bWFzazsKKworCVJBREVPTl9XUklURShSQURFT05fR0VOX0lOVF9DTlRMLCBkZXZfcHJpdi0+aXJxX2VuYWJsZV9yZWcpOworfQorCitzdGF0aWMgdm9pZCByNTAwX3ZibF9pcnFfc2V0X3N0YXRlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHUzMiBtYXNrLCBpbnQgc3RhdGUpCit7CisJZHJtX3JhZGVvbl9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKworCWlmIChzdGF0ZSkKKwkJZGV2X3ByaXYtPnI1MDBfZGlzcF9pcnFfcmVnIHw9IG1hc2s7CisJZWxzZQorCQlkZXZfcHJpdi0+cjUwMF9kaXNwX2lycV9yZWcgJj0gfm1hc2s7CisKKwlSQURFT05fV1JJVEUoUjUwMF9EeE1PREVfSU5UX01BU0ssIGRldl9wcml2LT5yNTAwX2Rpc3BfaXJxX3JlZyk7Cit9CisKK2ludCByYWRlb25fZW5hYmxlX3ZibGFuayhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgY3J0YykKK3sKKwlkcm1fcmFkZW9uX3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCisJaWYgKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID49IENISVBfUlM2OTApIHsKKwkJc3dpdGNoIChjcnRjKSB7CisJCWNhc2UgMDoKKwkJCXI1MDBfdmJsX2lycV9zZXRfc3RhdGUoZGV2LCBSNTAwX0QxTU9ERV9JTlRfTUFTSywgMSk7CisJCQlicmVhazsKKwkJY2FzZSAxOgorCQkJcjUwMF92YmxfaXJxX3NldF9zdGF0ZShkZXYsIFI1MDBfRDJNT0RFX0lOVF9NQVNLLCAxKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJRFJNX0VSUk9SKCJ0cmllZCB0byBlbmFibGUgdmJsYW5rIG9uIG5vbi1leGlzdGVudCBjcnRjICVkXG4iLAorCQkJCSAgY3J0Yyk7CisJCQlyZXR1cm4gRUlOVkFMOworCQl9CisJfSBlbHNlIHsKKwkJc3dpdGNoIChjcnRjKSB7CisJCWNhc2UgMDoKKwkJCXJhZGVvbl9pcnFfc2V0X3N0YXRlKGRldiwgUkFERU9OX0NSVENfVkJMQU5LX01BU0ssIDEpOworCQkJYnJlYWs7CisJCWNhc2UgMToKKwkJCXJhZGVvbl9pcnFfc2V0X3N0YXRlKGRldiwgUkFERU9OX0NSVEMyX1ZCTEFOS19NQVNLLCAxKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJRFJNX0VSUk9SKCJ0cmllZCB0byBlbmFibGUgdmJsYW5rIG9uIG5vbi1leGlzdGVudCBjcnRjICVkXG4iLAorCQkJCSAgY3J0Yyk7CisJCQlyZXR1cm4gRUlOVkFMOworCQl9CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgcmFkZW9uX2Rpc2FibGVfdmJsYW5rKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGludCBjcnRjKQoreworCWRybV9yYWRlb25fcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisKKwlpZiAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPj0gQ0hJUF9SUzY5MCkgeworCQlzd2l0Y2ggKGNydGMpIHsKKwkJY2FzZSAwOgorCQkJcjUwMF92YmxfaXJxX3NldF9zdGF0ZShkZXYsIFI1MDBfRDFNT0RFX0lOVF9NQVNLLCAwKTsKKwkJCWJyZWFrOworCQljYXNlIDE6CisJCQlyNTAwX3ZibF9pcnFfc2V0X3N0YXRlKGRldiwgUjUwMF9EMk1PREVfSU5UX01BU0ssIDApOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlEUk1fRVJST1IoInRyaWVkIHRvIGVuYWJsZSB2Ymxhbmsgb24gbm9uLWV4aXN0ZW50IGNydGMgJWRcbiIsCisJCQkJICBjcnRjKTsKKwkJCWJyZWFrOworCQl9CisJfSBlbHNlIHsKKwkJc3dpdGNoIChjcnRjKSB7CisJCWNhc2UgMDoKKwkJCXJhZGVvbl9pcnFfc2V0X3N0YXRlKGRldiwgUkFERU9OX0NSVENfVkJMQU5LX01BU0ssIDApOworCQkJYnJlYWs7CisJCWNhc2UgMToKKwkJCXJhZGVvbl9pcnFfc2V0X3N0YXRlKGRldiwgUkFERU9OX0NSVEMyX1ZCTEFOS19NQVNLLCAwKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJRFJNX0VSUk9SKCJ0cmllZCB0byBlbmFibGUgdmJsYW5rIG9uIG5vbi1leGlzdGVudCBjcnRjICVkXG4iLAorCQkJCSAgY3J0Yyk7CisJCQlicmVhazsKKwkJfQorCX0KK30KKworc3RhdGljIGlubGluZSB1MzIgcmFkZW9uX2Fja25vd2xlZGdlX2lycXMoZHJtX3JhZGVvbl9wcml2YXRlX3QgKmRldl9wcml2LCB1MzIgKnI1MDBfZGlzcF9pbnQpCit7CisJdTMyIGlycXMgPSBSQURFT05fUkVBRChSQURFT05fR0VOX0lOVF9TVEFUVVMpOworCXUzMiBpcnFfbWFzayA9IFJBREVPTl9TV19JTlRfVEVTVDsKKworCSpyNTAwX2Rpc3BfaW50ID0gMDsKKwlpZiAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPj0gQ0hJUF9SUzY5MCkgeworCQkvKiB2YmwgaW50ZXJydXB0cyBpbiBhIGRpZmZlcmVudCBwbGFjZSAqLworCisJCWlmIChpcnFzICYgUjUwMF9ESVNQTEFZX0lOVF9TVEFUVVMpIHsKKwkJCS8qIGlmIGEgZGlzcGxheSBpbnRlcnJ1cHQgKi8KKwkJCXUzMiBkaXNwX2lycTsKKworCQkJZGlzcF9pcnEgPSBSQURFT05fUkVBRChSNTAwX0RJU1BfSU5URVJSVVBUX1NUQVRVUyk7CisKKwkJCSpyNTAwX2Rpc3BfaW50ID0gZGlzcF9pcnE7CisJCQlpZiAoZGlzcF9pcnEgJiBSNTAwX0QxX1ZCTEFOS19JTlRFUlJVUFQpCisJCQkJUkFERU9OX1dSSVRFKFI1MDBfRDFNT0RFX1ZCTEFOS19TVEFUVVMsIFI1MDBfVkJMQU5LX0FDSyk7CisJCQlpZiAoZGlzcF9pcnEgJiBSNTAwX0QyX1ZCTEFOS19JTlRFUlJVUFQpCisJCQkJUkFERU9OX1dSSVRFKFI1MDBfRDJNT0RFX1ZCTEFOS19TVEFUVVMsIFI1MDBfVkJMQU5LX0FDSyk7CisJCX0KKwkJaXJxX21hc2sgfD0gUjUwMF9ESVNQTEFZX0lOVF9TVEFUVVM7CisJfSBlbHNlCisJCWlycV9tYXNrIHw9IFJBREVPTl9DUlRDX1ZCTEFOS19TVEFUIHwgUkFERU9OX0NSVEMyX1ZCTEFOS19TVEFUOworCisJaXJxcyAmPQlpcnFfbWFzazsKKwogCWlmIChpcnFzKQogCQlSQURFT05fV1JJVEUoUkFERU9OX0dFTl9JTlRfU1RBVFVTLCBpcnFzKTsKKwogCXJldHVybiBpcnFzOwogfQogCkBAIC02OCw0NCArMTg0LDMzIEBACiAJZHJtX3JhZGVvbl9wcml2YXRlX3QgKmRldl9wcml2ID0KIAkgICAgKGRybV9yYWRlb25fcHJpdmF0ZV90ICopIGRldi0+ZGV2X3ByaXZhdGU7CiAJdTMyIHN0YXQ7CisJdTMyIHI1MDBfZGlzcF9pbnQ7CiAKIAkvKiBPbmx5IGNvbnNpZGVyIHRoZSBiaXRzIHdlJ3JlIGludGVyZXN0ZWQgaW4gLSBvdGhlcnMgY291bGQgYmUgdXNlZAogCSAqIG91dHNpZGUgdGhlIERSTQogCSAqLwotCXN0YXQgPSByYWRlb25fYWNrbm93bGVkZ2VfaXJxcyhkZXZfcHJpdiwgKFJBREVPTl9TV19JTlRfVEVTVF9BQ0sgfAotCQkJCQkJICBSQURFT05fQ1JUQ19WQkxBTktfU1RBVCB8Ci0JCQkJCQkgIFJBREVPTl9DUlRDMl9WQkxBTktfU1RBVCkpOworCXN0YXQgPSByYWRlb25fYWNrbm93bGVkZ2VfaXJxcyhkZXZfcHJpdiwgJnI1MDBfZGlzcF9pbnQpOwogCWlmICghc3RhdCkKIAkJcmV0dXJuIElSUV9OT05FOwogCiAJc3RhdCAmPSBkZXZfcHJpdi0+aXJxX2VuYWJsZV9yZWc7CiAKIAkvKiBTVyBpbnRlcnJ1cHQgKi8KLQlpZiAoc3RhdCAmIFJBREVPTl9TV19JTlRfVEVTVCkgeworCWlmIChzdGF0ICYgUkFERU9OX1NXX0lOVF9URVNUKQogCQlEUk1fV0FLRVVQKCZkZXZfcHJpdi0+c3dpX3F1ZXVlKTsKLQl9CiAKIAkvKiBWQkxBTksgaW50ZXJydXB0ICovCi0JaWYgKHN0YXQgJiAoUkFERU9OX0NSVENfVkJMQU5LX1NUQVR8UkFERU9OX0NSVEMyX1ZCTEFOS19TVEFUKSkgewotCQlpbnQgdmJsYW5rX2NydGMgPSBkZXZfcHJpdi0+dmJsYW5rX2NydGM7Ci0KLQkJaWYgKCh2YmxhbmtfY3J0YyAmCi0JCSAgICAgKERSTV9SQURFT05fVkJMQU5LX0NSVEMxIHwgRFJNX1JBREVPTl9WQkxBTktfQ1JUQzIpKSA9PQotCQkgICAgKERSTV9SQURFT05fVkJMQU5LX0NSVEMxIHwgRFJNX1JBREVPTl9WQkxBTktfQ1JUQzIpKSB7Ci0JCQlpZiAoc3RhdCAmIFJBREVPTl9DUlRDX1ZCTEFOS19TVEFUKQotCQkJCWF0b21pY19pbmMoJmRldi0+dmJsX3JlY2VpdmVkKTsKLQkJCWlmIChzdGF0ICYgUkFERU9OX0NSVEMyX1ZCTEFOS19TVEFUKQotCQkJCWF0b21pY19pbmMoJmRldi0+dmJsX3JlY2VpdmVkMik7Ci0JCX0gZWxzZSBpZiAoKChzdGF0ICYgUkFERU9OX0NSVENfVkJMQU5LX1NUQVQpICYmCi0JCQkgICAodmJsYW5rX2NydGMgJiBEUk1fUkFERU9OX1ZCTEFOS19DUlRDMSkpIHx8Ci0JCQkgICAoKHN0YXQgJiBSQURFT05fQ1JUQzJfVkJMQU5LX1NUQVQpICYmCi0JCQkgICAgKHZibGFua19jcnRjICYgRFJNX1JBREVPTl9WQkxBTktfQ1JUQzIpKSkKLQkJCWF0b21pY19pbmMoJmRldi0+dmJsX3JlY2VpdmVkKTsKLQotCQlEUk1fV0FLRVVQKCZkZXYtPnZibF9xdWV1ZSk7Ci0JCWRybV92Ymxfc2VuZF9zaWduYWxzKGRldik7CisJaWYgKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID49IENISVBfUlM2OTApIHsKKwkJaWYgKHI1MDBfZGlzcF9pbnQgJiBSNTAwX0QxX1ZCTEFOS19JTlRFUlJVUFQpCisJCQlkcm1faGFuZGxlX3ZibGFuayhkZXYsIDApOworCQlpZiAocjUwMF9kaXNwX2ludCAmIFI1MDBfRDJfVkJMQU5LX0lOVEVSUlVQVCkKKwkJCWRybV9oYW5kbGVfdmJsYW5rKGRldiwgMSk7CisJfSBlbHNlIHsKKwkJaWYgKHN0YXQgJiBSQURFT05fQ1JUQ19WQkxBTktfU1RBVCkKKwkJCWRybV9oYW5kbGVfdmJsYW5rKGRldiwgMCk7CisJCWlmIChzdGF0ICYgUkFERU9OX0NSVEMyX1ZCTEFOS19TVEFUKQorCQkJZHJtX2hhbmRsZV92YmxhbmsoZGV2LCAxKTsKIAl9Ci0KIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CiAKQEAgLTE0NCw1NCArMjQ5LDMxIEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCByYWRlb25fZHJpdmVyX3ZibGFua19kb193YWl0KHN0cnVjdCBkcm1fZGV2aWNlICogZGV2LAotCQkJCQl1bnNpZ25lZCBpbnQgKnNlcXVlbmNlLCBpbnQgY3J0YykKK3UzMiByYWRlb25fZ2V0X3ZibGFua19jb3VudGVyKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGludCBjcnRjKQogewotCWRybV9yYWRlb25fcHJpdmF0ZV90ICpkZXZfcHJpdiA9Ci0JICAgIChkcm1fcmFkZW9uX3ByaXZhdGVfdCAqKSBkZXYtPmRldl9wcml2YXRlOwotCXVuc2lnbmVkIGludCBjdXJfdmJsYW5rOwotCWludCByZXQgPSAwOwotCWludCBhY2sgPSAwOwotCWF0b21pY190ICpjb3VudGVyOworCWRybV9yYWRlb25fcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisKIAlpZiAoIWRldl9wcml2KSB7CiAJCURSTV9FUlJPUigiY2FsbGVkIHdpdGggbm8gaW5pdGlhbGl6YXRpb25cbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQlpZiAoY3J0YyA9PSBEUk1fUkFERU9OX1ZCTEFOS19DUlRDMSkgewotCQljb3VudGVyID0gJmRldi0+dmJsX3JlY2VpdmVkOwotCQlhY2sgfD0gUkFERU9OX0NSVENfVkJMQU5LX1NUQVQ7Ci0JfSBlbHNlIGlmIChjcnRjID09IERSTV9SQURFT05fVkJMQU5LX0NSVEMyKSB7Ci0JCWNvdW50ZXIgPSAmZGV2LT52YmxfcmVjZWl2ZWQyOwotCQlhY2sgfD0gUkFERU9OX0NSVEMyX1ZCTEFOS19TVEFUOwotCX0gZWxzZQorCWlmIChjcnRjIDwgMCB8fCBjcnRjID4gMSkgeworCQlEUk1fRVJST1IoIkludmFsaWQgY3J0YyAlZFxuIiwgY3J0Yyk7CiAJCXJldHVybiAtRUlOVkFMOworCX0KIAotCXJhZGVvbl9hY2tub3dsZWRnZV9pcnFzKGRldl9wcml2LCBhY2spOwotCi0JZGV2X3ByaXYtPnN0YXRzLmJveGVzIHw9IFJBREVPTl9CT1hfV0FJVF9JRExFOwotCi0JLyogQXNzdW1lIHRoYXQgdGhlIHVzZXIgaGFzIG1pc3NlZCB0aGUgY3VycmVudCBzZXF1ZW5jZSBudW1iZXIKLQkgKiBieSBhYm91dCBhIGRheSByYXRoZXIgdGhhbiBzaGUgd2FudHMgdG8gd2FpdCBmb3IgeWVhcnMKLQkgKiB1c2luZyB2ZXJ0aWNhbCBibGFua3MuLi4KLQkgKi8KLQlEUk1fV0FJVF9PTihyZXQsIGRldi0+dmJsX3F1ZXVlLCAzICogRFJNX0haLAotCQkgICAgKCgoY3VyX3ZibGFuayA9IGF0b21pY19yZWFkKGNvdW50ZXIpKQotCQkgICAgICAtICpzZXF1ZW5jZSkgPD0gKDEgPDwgMjMpKSk7Ci0KLQkqc2VxdWVuY2UgPSBjdXJfdmJsYW5rOwotCi0JcmV0dXJuIHJldDsKLX0KLQotaW50IHJhZGVvbl9kcml2ZXJfdmJsYW5rX3dhaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdW5zaWduZWQgaW50ICpzZXF1ZW5jZSkKLXsKLQlyZXR1cm4gcmFkZW9uX2RyaXZlcl92YmxhbmtfZG9fd2FpdChkZXYsIHNlcXVlbmNlLCBEUk1fUkFERU9OX1ZCTEFOS19DUlRDMSk7Ci19Ci0KLWludCByYWRlb25fZHJpdmVyX3ZibGFua193YWl0MihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgKnNlcXVlbmNlKQotewotCXJldHVybiByYWRlb25fZHJpdmVyX3ZibGFua19kb193YWl0KGRldiwgc2VxdWVuY2UsIERSTV9SQURFT05fVkJMQU5LX0NSVEMyKTsKKwlpZiAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPj0gQ0hJUF9SUzY5MCkgeworCQlpZiAoY3J0YyA9PSAwKQorCQkJcmV0dXJuIFJBREVPTl9SRUFEKFI1MDBfRDFDUlRDX0ZSQU1FX0NPVU5UKTsKKwkJZWxzZQorCQkJcmV0dXJuIFJBREVPTl9SRUFEKFI1MDBfRDJDUlRDX0ZSQU1FX0NPVU5UKTsKKwl9IGVsc2UgeworCQlpZiAoY3J0YyA9PSAwKQorCQkJcmV0dXJuIFJBREVPTl9SRUFEKFJBREVPTl9DUlRDX0NSTlRfRlJBTUUpOworCQllbHNlCisJCQlyZXR1cm4gUkFERU9OX1JFQUQoUkFERU9OX0NSVEMyX0NSTlRfRlJBTUUpOworCX0KIH0KIAogLyogTmVlZHMgdGhlIGxvY2sgYXMgaXQgdG91Y2hlcyB0aGUgcmluZy4KQEAgLTIzNCw0NiArMzE2LDQxIEBACiAJcmV0dXJuIHJhZGVvbl93YWl0X2lycShkZXYsIGlycXdhaXQtPmlycV9zZXEpOwogfQogCi12b2lkIHJhZGVvbl9lbmFibGVfaW50ZXJydXB0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCi17Ci0JZHJtX3JhZGVvbl9wcml2YXRlX3QgKmRldl9wcml2ID0gKGRybV9yYWRlb25fcHJpdmF0ZV90ICopIGRldi0+ZGV2X3ByaXZhdGU7Ci0KLQlkZXZfcHJpdi0+aXJxX2VuYWJsZV9yZWcgPSBSQURFT05fU1dfSU5UX0VOQUJMRTsKLQlpZiAoZGV2X3ByaXYtPnZibGFua19jcnRjICYgRFJNX1JBREVPTl9WQkxBTktfQ1JUQzEpCi0JCWRldl9wcml2LT5pcnFfZW5hYmxlX3JlZyB8PSBSQURFT05fQ1JUQ19WQkxBTktfTUFTSzsKLQotCWlmIChkZXZfcHJpdi0+dmJsYW5rX2NydGMgJiBEUk1fUkFERU9OX1ZCTEFOS19DUlRDMikKLQkJZGV2X3ByaXYtPmlycV9lbmFibGVfcmVnIHw9IFJBREVPTl9DUlRDMl9WQkxBTktfTUFTSzsKLQotCVJBREVPTl9XUklURShSQURFT05fR0VOX0lOVF9DTlRMLCBkZXZfcHJpdi0+aXJxX2VuYWJsZV9yZWcpOwotCWRldl9wcml2LT5pcnFfZW5hYmxlZCA9IDE7Ci19Ci0KIC8qIGRybV9kbWEuaCBob29rcwogKi8KIHZvaWQgcmFkZW9uX2RyaXZlcl9pcnFfcHJlaW5zdGFsbChzdHJ1Y3QgZHJtX2RldmljZSAqIGRldikKIHsKIAlkcm1fcmFkZW9uX3ByaXZhdGVfdCAqZGV2X3ByaXYgPQogCSAgICAoZHJtX3JhZGVvbl9wcml2YXRlX3QgKikgZGV2LT5kZXZfcHJpdmF0ZTsKKwl1MzIgZHVtbXk7CiAKIAkvKiBEaXNhYmxlICphbGwqIGludGVycnVwdHMgKi8KKwlpZiAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPj0gQ0hJUF9SUzY5MCkKKwkJUkFERU9OX1dSSVRFKFI1MDBfRHhNT0RFX0lOVF9NQVNLLCAwKTsKIAlSQURFT05fV1JJVEUoUkFERU9OX0dFTl9JTlRfQ05UTCwgMCk7CiAKIAkvKiBDbGVhciBiaXRzIGlmIHRoZXkncmUgYWxyZWFkeSBoaWdoICovCi0JcmFkZW9uX2Fja25vd2xlZGdlX2lycXMoZGV2X3ByaXYsIChSQURFT05fU1dfSU5UX1RFU1RfQUNLIHwKLQkJCQkJICAgUkFERU9OX0NSVENfVkJMQU5LX1NUQVQgfAotCQkJCQkgICBSQURFT05fQ1JUQzJfVkJMQU5LX1NUQVQpKTsKKwlyYWRlb25fYWNrbm93bGVkZ2VfaXJxcyhkZXZfcHJpdiwgJmR1bW15KTsKIH0KIAotdm9pZCByYWRlb25fZHJpdmVyX2lycV9wb3N0aW5zdGFsbChzdHJ1Y3QgZHJtX2RldmljZSAqIGRldikKK2ludCByYWRlb25fZHJpdmVyX2lycV9wb3N0aW5zdGFsbChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQogewogCWRybV9yYWRlb25fcHJpdmF0ZV90ICpkZXZfcHJpdiA9CiAJICAgIChkcm1fcmFkZW9uX3ByaXZhdGVfdCAqKSBkZXYtPmRldl9wcml2YXRlOworCWludCByZXQ7CiAKIAlhdG9taWNfc2V0KCZkZXZfcHJpdi0+c3dpX2VtaXR0ZWQsIDApOwogCURSTV9JTklUX1dBSVRRVUVVRSgmZGV2X3ByaXYtPnN3aV9xdWV1ZSk7CiAKLQlyYWRlb25fZW5hYmxlX2ludGVycnVwdChkZXYpOworCXJldCA9IGRybV92YmxhbmtfaW5pdChkZXYsIDIpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlkZXYtPm1heF92YmxhbmtfY291bnQgPSAweDAwMWZmZmZmOworCisJcmFkZW9uX2lycV9zZXRfc3RhdGUoZGV2LCBSQURFT05fU1dfSU5UX0VOQUJMRSwgMSk7CisKKwlyZXR1cm4gMDsKIH0KIAogdm9pZCByYWRlb25fZHJpdmVyX2lycV91bmluc3RhbGwoc3RydWN0IGRybV9kZXZpY2UgKiBkZXYpCkBAIC0yODUsNiArMzYyLDggQEAKIAogCWRldl9wcml2LT5pcnFfZW5hYmxlZCA9IDA7CiAKKwlpZiAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPj0gQ0hJUF9SUzY5MCkKKwkJUkFERU9OX1dSSVRFKFI1MDBfRHhNT0RFX0lOVF9NQVNLLCAwKTsKIAkvKiBEaXNhYmxlICphbGwqIGludGVycnVwdHMgKi8KIAlSQURFT05fV1JJVEUoUkFERU9OX0dFTl9JTlRfQ05UTCwgMCk7CiB9CkBAIC0yOTMsMTggKzM3Miw4IEBACiBpbnQgcmFkZW9uX3ZibGFua19jcnRjX2dldChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQogewogCWRybV9yYWRlb25fcHJpdmF0ZV90ICpkZXZfcHJpdiA9IChkcm1fcmFkZW9uX3ByaXZhdGVfdCAqKSBkZXYtPmRldl9wcml2YXRlOwotCXUzMiBmbGFnOwotCXUzMiB2YWx1ZTsKIAotCWZsYWcgPSBSQURFT05fUkVBRChSQURFT05fR0VOX0lOVF9DTlRMKTsKLQl2YWx1ZSA9IDA7Ci0KLQlpZiAoZmxhZyAmIFJBREVPTl9DUlRDX1ZCTEFOS19NQVNLKQotCQl2YWx1ZSB8PSBEUk1fUkFERU9OX1ZCTEFOS19DUlRDMTsKLQotCWlmIChmbGFnICYgUkFERU9OX0NSVEMyX1ZCTEFOS19NQVNLKQotCQl2YWx1ZSB8PSBEUk1fUkFERU9OX1ZCTEFOS19DUlRDMjsKLQlyZXR1cm4gdmFsdWU7CisJcmV0dXJuIGRldl9wcml2LT52YmxhbmtfY3J0YzsKIH0KIAogaW50IHJhZGVvbl92YmxhbmtfY3J0Y19zZXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50NjRfdCB2YWx1ZSkKQEAgLTMxNSw2ICszODQsNSBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAJZGV2X3ByaXYtPnZibGFua19jcnRjID0gKHVuc2lnbmVkIGludCl2YWx1ZTsKLQlyYWRlb25fZW5hYmxlX2ludGVycnVwdChkZXYpOwogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fc3RhdGUuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX3N0YXRlLmMKaW5kZXggMTFjMTQ2Yi4uNWQ3MTUzZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fc3RhdGUuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9zdGF0ZS5jCkBAIC0yOTk3LDcgKzI5OTcsNyBAQAogCQl2YWx1ZSA9IEdFVF9TQ1JBVENIKDIpOwogCQlicmVhazsKIAljYXNlIFJBREVPTl9QQVJBTV9JUlFfTlI6Ci0JCXZhbHVlID0gZGV2LT5pcnE7CisJCXZhbHVlID0gZHJtX2Rldl90b19pcnEoZGV2KTsKIAkJYnJlYWs7CiAJY2FzZSBSQURFT05fUEFSQU1fR0FSVF9CQVNFOgogCQl2YWx1ZSA9IGRldl9wcml2LT5nYXJ0X3ZtX3N0YXJ0OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3Npcy9zaXNfbW0uYyBiL2RyaXZlcnMvZ3B1L2RybS9zaXMvc2lzX21tLmMKaW5kZXggYjM4Nzg3Ny4uYWYyMjExMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3Npcy9zaXNfbW0uYworKysgYi9kcml2ZXJzL2dwdS9kcm0vc2lzL3Npc19tbS5jCkBAIC00MSw3ICs0MSw3IEBACiAjZGVmaW5lIEFHUF9UWVBFIDEKIAogCi0jaWYgZGVmaW5lZChDT05GSUdfRkJfU0lTKQorI2lmIGRlZmluZWQoQ09ORklHX0ZCX1NJUykgfHwgZGVmaW5lZChDT05GSUdfRkJfU0lTX01PRFVMRSkKIC8qIGZiIG1hbmFnZW1lbnQgdmlhIGZiIGRldmljZSAqLwogCiAjZGVmaW5lIFNJU19NTV9BTElHTl9TSElGVCAwCkBAIC01Nyw3ICs1Nyw3IEBACiAJaWYgKHJlcS5zaXplID09IDApCiAJCXJldHVybiBOVUxMOwogCWVsc2UKLQkJcmV0dXJuICh2b2lkICopfnJlcS5vZmZzZXQ7CisJCXJldHVybiAodm9pZCAqKSh1bnNpZ25lZCBsb25nKX5yZXEub2Zmc2V0OwogfQogCiBzdGF0aWMgdm9pZCBzaXNfc21hbl9tbV9mcmVlKHZvaWQgKnByaXZhdGUsIHZvaWQgKnJlZikKQEAgLTc1LDEyICs3NSwxMiBAQAogCXJldHVybiB+KCh1bnNpZ25lZCBsb25nKXJlZik7CiB9CiAKLSNlbHNlIC8qIENPTkZJR19GQl9TSVMgKi8KKyNlbHNlIC8qIENPTkZJR19GQl9TSVNbX01PRFVMRV0gKi8KIAogI2RlZmluZSBTSVNfTU1fQUxJR05fU0hJRlQgNAogI2RlZmluZSBTSVNfTU1fQUxJR05fTUFTSyAoICgxIDw8IFNJU19NTV9BTElHTl9TSElGVCkgLSAxKQogCi0jZW5kaWYgLyogQ09ORklHX0ZCX1NJUyAqLworI2VuZGlmIC8qIENPTkZJR19GQl9TSVNbX01PRFVMRV0gKi8KIAogc3RhdGljIGludCBzaXNfZmJfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLCBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdikKIHsKQEAgLTg5LDcgKzg5LDcgQEAKIAlpbnQgcmV0OwogCiAJbXV0ZXhfbG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOwotI2lmIGRlZmluZWQoQ09ORklHX0ZCX1NJUykKKyNpZiBkZWZpbmVkKENPTkZJR19GQl9TSVMpIHx8IGRlZmluZWQoQ09ORklHX0ZCX1NJU19NT0RVTEUpCiAJewogCQlzdHJ1Y3QgZHJtX3NtYW5fbW0gc21hbl9tbTsKIAkJc21hbl9tbS5wcml2YXRlID0gKHZvaWQgKikweEZGRkZGRkZGOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3ZpYS92aWFfZHJ2LmMgYi9kcml2ZXJzL2dwdS9kcm0vdmlhL3ZpYV9kcnYuYwppbmRleCA4MGMwMWNkLi4wOTkzYjQ0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vdmlhL3ZpYV9kcnYuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vdmlhL3ZpYV9kcnYuYwpAQCAtNDAsMTEgKzQwLDEzIEBACiBzdGF0aWMgc3RydWN0IGRybV9kcml2ZXIgZHJpdmVyID0gewogCS5kcml2ZXJfZmVhdHVyZXMgPQogCSAgICBEUklWRVJfVVNFX0FHUCB8IERSSVZFUl9VU0VfTVRSUiB8IERSSVZFUl9IQVZFX0lSUSB8Ci0JICAgIERSSVZFUl9JUlFfU0hBUkVEIHwgRFJJVkVSX0lSUV9WQkwsCisJICAgIERSSVZFUl9JUlFfU0hBUkVELAogCS5sb2FkID0gdmlhX2RyaXZlcl9sb2FkLAogCS51bmxvYWQgPSB2aWFfZHJpdmVyX3VubG9hZCwKIAkuY29udGV4dF9kdG9yID0gdmlhX2ZpbmFsX2NvbnRleHQsCi0JLnZibGFua193YWl0ID0gdmlhX2RyaXZlcl92Ymxhbmtfd2FpdCwKKwkuZ2V0X3ZibGFua19jb3VudGVyID0gdmlhX2dldF92YmxhbmtfY291bnRlciwKKwkuZW5hYmxlX3ZibGFuayA9IHZpYV9lbmFibGVfdmJsYW5rLAorCS5kaXNhYmxlX3ZibGFuayA9IHZpYV9kaXNhYmxlX3ZibGFuaywKIAkuaXJxX3ByZWluc3RhbGwgPSB2aWFfZHJpdmVyX2lycV9wcmVpbnN0YWxsLAogCS5pcnFfcG9zdGluc3RhbGwgPSB2aWFfZHJpdmVyX2lycV9wb3N0aW5zdGFsbCwKIAkuaXJxX3VuaW5zdGFsbCA9IHZpYV9kcml2ZXJfaXJxX3VuaW5zdGFsbCwKQEAgLTU5LDE3ICs2MSwxNyBAQAogCS5nZXRfcmVnX29mcyA9IGRybV9jb3JlX2dldF9yZWdfb2ZzLAogCS5pb2N0bHMgPSB2aWFfaW9jdGxzLAogCS5mb3BzID0gewotCQkgLm93bmVyID0gVEhJU19NT0RVTEUsCi0JCSAub3BlbiA9IGRybV9vcGVuLAotCQkgLnJlbGVhc2UgPSBkcm1fcmVsZWFzZSwKLQkJIC5pb2N0bCA9IGRybV9pb2N0bCwKLQkJIC5tbWFwID0gZHJtX21tYXAsCi0JCSAucG9sbCA9IGRybV9wb2xsLAotCQkgLmZhc3luYyA9IGRybV9mYXN5bmMsCi0JfSwKKwkJLm93bmVyID0gVEhJU19NT0RVTEUsCisJCS5vcGVuID0gZHJtX29wZW4sCisJCS5yZWxlYXNlID0gZHJtX3JlbGVhc2UsCisJCS5pb2N0bCA9IGRybV9pb2N0bCwKKwkJLm1tYXAgPSBkcm1fbW1hcCwKKwkJLnBvbGwgPSBkcm1fcG9sbCwKKwkJLmZhc3luYyA9IGRybV9mYXN5bmMsCisJCX0sCiAJLnBjaV9kcml2ZXIgPSB7Ci0JCSAubmFtZSA9IERSSVZFUl9OQU1FLAotCQkgLmlkX3RhYmxlID0gcGNpaWRsaXN0LAorCQkubmFtZSA9IERSSVZFUl9OQU1FLAorCQkuaWRfdGFibGUgPSBwY2lpZGxpc3QsCiAJfSwKIAogCS5uYW1lID0gRFJJVkVSX05BTUUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdmlhL3ZpYV9kcnYuaCBiL2RyaXZlcnMvZ3B1L2RybS92aWEvdmlhX2Rydi5oCmluZGV4IDJkYWFlODEuLmNhZmNiODQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS92aWEvdmlhX2Rydi5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS92aWEvdmlhX2Rydi5oCkBAIC03NSw2ICs3NSw3IEBACiAJc3RydWN0IHRpbWV2YWwgbGFzdF92Ymxhbms7CiAJaW50IGxhc3RfdmJsYW5rX3ZhbGlkOwogCXVuc2lnbmVkIHVzZWNfcGVyX3ZibGFuazsKKwlhdG9taWNfdCB2YmxfcmVjZWl2ZWQ7CiAJZHJtX3ZpYV9zdGF0ZV90IGhjX3N0YXRlOwogCWNoYXIgcGNpX2J1ZltWSUFfUENJX0JVRl9TSVpFXTsKIAljb25zdCB1aW50MzJfdCAqZmlyZV9vZmZzZXRzW1ZJQV9GSVJFX0JVRl9TSVpFXTsKQEAgLTEzMCwyMSArMTMxLDI0IEBACiBleHRlcm4gaW50IHZpYV9maW5hbF9jb250ZXh0KHN0cnVjdCBkcm1fZGV2aWNlICogZGV2LCBpbnQgY29udGV4dCk7CiAKIGV4dGVybiBpbnQgdmlhX2RvX2NsZWFudXBfbWFwKHN0cnVjdCBkcm1fZGV2aWNlICogZGV2KTsKLWV4dGVybiBpbnQgdmlhX2RyaXZlcl92Ymxhbmtfd2FpdChzdHJ1Y3QgZHJtX2RldmljZSAqIGRldiwgdW5zaWduZWQgaW50ICpzZXF1ZW5jZSk7CitleHRlcm4gdTMyIHZpYV9nZXRfdmJsYW5rX2NvdW50ZXIoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50IGNydGMpOworZXh0ZXJuIGludCB2aWFfZW5hYmxlX3ZibGFuayhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgY3J0Yyk7CitleHRlcm4gdm9pZCB2aWFfZGlzYWJsZV92Ymxhbmsoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50IGNydGMpOwogCiBleHRlcm4gaXJxcmV0dXJuX3QgdmlhX2RyaXZlcl9pcnFfaGFuZGxlcihEUk1fSVJRX0FSR1MpOwogZXh0ZXJuIHZvaWQgdmlhX2RyaXZlcl9pcnFfcHJlaW5zdGFsbChzdHJ1Y3QgZHJtX2RldmljZSAqIGRldik7Ci1leHRlcm4gdm9pZCB2aWFfZHJpdmVyX2lycV9wb3N0aW5zdGFsbChzdHJ1Y3QgZHJtX2RldmljZSAqIGRldik7CitleHRlcm4gaW50IHZpYV9kcml2ZXJfaXJxX3Bvc3RpbnN0YWxsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwogZXh0ZXJuIHZvaWQgdmlhX2RyaXZlcl9pcnFfdW5pbnN0YWxsKHN0cnVjdCBkcm1fZGV2aWNlICogZGV2KTsKIAogZXh0ZXJuIGludCB2aWFfZG1hX2NsZWFudXAoc3RydWN0IGRybV9kZXZpY2UgKiBkZXYpOwogZXh0ZXJuIHZvaWQgdmlhX2luaXRfY29tbWFuZF92ZXJpZmllcih2b2lkKTsKIGV4dGVybiBpbnQgdmlhX2RyaXZlcl9kbWFfcXVpZXNjZW50KHN0cnVjdCBkcm1fZGV2aWNlICogZGV2KTsKLWV4dGVybiB2b2lkIHZpYV9pbml0X2Z1dGV4KGRybV92aWFfcHJpdmF0ZV90ICogZGV2X3ByaXYpOwotZXh0ZXJuIHZvaWQgdmlhX2NsZWFudXBfZnV0ZXgoZHJtX3ZpYV9wcml2YXRlX3QgKiBkZXZfcHJpdik7Ci1leHRlcm4gdm9pZCB2aWFfcmVsZWFzZV9mdXRleChkcm1fdmlhX3ByaXZhdGVfdCAqIGRldl9wcml2LCBpbnQgY29udGV4dCk7CitleHRlcm4gdm9pZCB2aWFfaW5pdF9mdXRleChkcm1fdmlhX3ByaXZhdGVfdCAqZGV2X3ByaXYpOworZXh0ZXJuIHZvaWQgdmlhX2NsZWFudXBfZnV0ZXgoZHJtX3ZpYV9wcml2YXRlX3QgKmRldl9wcml2KTsKK2V4dGVybiB2b2lkIHZpYV9yZWxlYXNlX2Z1dGV4KGRybV92aWFfcHJpdmF0ZV90ICpkZXZfcHJpdiwgaW50IGNvbnRleHQpOwogCi1leHRlcm4gdm9pZCB2aWFfcmVjbGFpbV9idWZmZXJzX2xvY2tlZChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdik7CitleHRlcm4gdm9pZCB2aWFfcmVjbGFpbV9idWZmZXJzX2xvY2tlZChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAorCQkJCSAgICAgICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdik7CiBleHRlcm4gdm9pZCB2aWFfbGFzdGNsb3NlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwogCiBleHRlcm4gdm9pZCB2aWFfZG1hYmxpdF9oYW5kbGVyKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGludCBlbmdpbmUsIGludCBmcm9tX2lycSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdmlhL3ZpYV9pcnEuYyBiL2RyaXZlcnMvZ3B1L2RybS92aWEvdmlhX2lycS5jCmluZGV4IGM2YmI5NzguLjY2NWQzMTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS92aWEvdmlhX2lycS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS92aWEvdmlhX2lycS5jCkBAIC00Myw3ICs0Myw3IEBACiAjZGVmaW5lIFZJQV9SRUdfSU5URVJSVVBUICAgICAgIDB4MjAwCiAKIC8qIFZJQV9SRUdfSU5URVJSVVBUICovCi0jZGVmaW5lIFZJQV9JUlFfR0xPQkFMICAgICAgICAgICgxIDw8IDMxKQorI2RlZmluZSBWSUFfSVJRX0dMT0JBTAkgICgxIDw8IDMxKQogI2RlZmluZSBWSUFfSVJRX1ZCTEFOS19FTkFCTEUgICAoMSA8PCAxOSkKICNkZWZpbmUgVklBX0lSUV9WQkxBTktfUEVORElORyAgKDEgPDwgMykKICNkZWZpbmUgVklBX0lSUV9IUVYwX0VOQUJMRSAgICAgKDEgPDwgMTEpCkBAIC02OCwxNiArNjgsMTUgQEAKIAogc3RhdGljIG1hc2thcnJheV90IHZpYV9wcm9fZ3JvdXBfYV9pcnFzW10gPSB7CiAJe1ZJQV9JUlFfSFFWMF9FTkFCTEUsIFZJQV9JUlFfSFFWMF9QRU5ESU5HLCAweDAwMDAwM0QwLCAweDAwMDA4MDEwLAotCSAweDAwMDAwMDAwfSwKKwkgMHgwMDAwMDAwMCB9LAogCXtWSUFfSVJRX0hRVjFfRU5BQkxFLCBWSUFfSVJRX0hRVjFfUEVORElORywgMHgwMDAwMTNEMCwgMHgwMDAwODAxMCwKLQkgMHgwMDAwMDAwMH0sCisJIDB4MDAwMDAwMDAgfSwKIAl7VklBX0lSUV9ETUEwX1REX0VOQUJMRSwgVklBX0lSUV9ETUEwX1REX1BFTkRJTkcsIFZJQV9QQ0lfRE1BX0NTUjAsCiAJIFZJQV9ETUFfQ1NSX1RBIHwgVklBX0RNQV9DU1JfVEQsIDB4MDAwMDAwMDh9LAogCXtWSUFfSVJRX0RNQTFfVERfRU5BQkxFLCBWSUFfSVJRX0RNQTFfVERfUEVORElORywgVklBX1BDSV9ETUFfQ1NSMSwKIAkgVklBX0RNQV9DU1JfVEEgfCBWSUFfRE1BX0NTUl9URCwgMHgwMDAwMDAwOH0sCiB9Owotc3RhdGljIGludCB2aWFfbnVtX3Byb19ncm91cF9hID0KLSAgICBzaXplb2YodmlhX3Byb19ncm91cF9hX2lycXMpIC8gc2l6ZW9mKG1hc2thcnJheV90KTsKK3N0YXRpYyBpbnQgdmlhX251bV9wcm9fZ3JvdXBfYSA9IEFSUkFZX1NJWkUodmlhX3Byb19ncm91cF9hX2lycXMpOwogc3RhdGljIGludCB2aWFfaXJxbWFwX3Byb19ncm91cF9hW10gPSB7MCwgMSwgLTEsIDIsIC0xLCAzfTsKIAogc3RhdGljIG1hc2thcnJheV90IHZpYV91bmljaHJvbWVfaXJxc1tdID0gewpAQCAtODYsMTQgKzg1LDI0IEBACiAJe1ZJQV9JUlFfRE1BMV9URF9FTkFCTEUsIFZJQV9JUlFfRE1BMV9URF9QRU5ESU5HLCBWSUFfUENJX0RNQV9DU1IxLAogCSBWSUFfRE1BX0NTUl9UQSB8IFZJQV9ETUFfQ1NSX1RELCAweDAwMDAwMDA4fQogfTsKLXN0YXRpYyBpbnQgdmlhX251bV91bmljaHJvbWUgPSBzaXplb2YodmlhX3VuaWNocm9tZV9pcnFzKSAvIHNpemVvZihtYXNrYXJyYXlfdCk7CitzdGF0aWMgaW50IHZpYV9udW1fdW5pY2hyb21lID0gQVJSQVlfU0laRSh2aWFfdW5pY2hyb21lX2lycXMpOwogc3RhdGljIGludCB2aWFfaXJxbWFwX3VuaWNocm9tZVtdID0gey0xLCAtMSwgLTEsIDAsIC0xLCAxfTsKIAorCiBzdGF0aWMgdW5zaWduZWQgdGltZV9kaWZmKHN0cnVjdCB0aW1ldmFsICpub3csIHN0cnVjdCB0aW1ldmFsICp0aGVuKQogewogCXJldHVybiAobm93LT50dl91c2VjID49IHRoZW4tPnR2X3VzZWMpID8KLQkgICAgbm93LT50dl91c2VjIC0gdGhlbi0+dHZfdXNlYyA6Ci0JICAgIDEwMDAwMDAgLSAodGhlbi0+dHZfdXNlYyAtIG5vdy0+dHZfdXNlYyk7CisJCW5vdy0+dHZfdXNlYyAtIHRoZW4tPnR2X3VzZWMgOgorCQkxMDAwMDAwIC0gKHRoZW4tPnR2X3VzZWMgLSBub3ctPnR2X3VzZWMpOworfQorCit1MzIgdmlhX2dldF92YmxhbmtfY291bnRlcihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgY3J0YykKK3sKKwlkcm1fdmlhX3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCWlmIChjcnRjICE9IDApCisJCXJldHVybiAwOworCisJcmV0dXJuIGF0b21pY19yZWFkKCZkZXZfcHJpdi0+dmJsX3JlY2VpdmVkKTsKIH0KIAogaXJxcmV0dXJuX3QgdmlhX2RyaXZlcl9pcnFfaGFuZGxlcihEUk1fSVJRX0FSR1MpCkBAIC0xMDgsMjMgKzExNywyMiBAQAogCiAJc3RhdHVzID0gVklBX1JFQUQoVklBX1JFR19JTlRFUlJVUFQpOwogCWlmIChzdGF0dXMgJiBWSUFfSVJRX1ZCTEFOS19QRU5ESU5HKSB7Ci0JCWF0b21pY19pbmMoJmRldi0+dmJsX3JlY2VpdmVkKTsKLQkJaWYgKCEoYXRvbWljX3JlYWQoJmRldi0+dmJsX3JlY2VpdmVkKSAmIDB4MEYpKSB7CisJCWF0b21pY19pbmMoJmRldl9wcml2LT52YmxfcmVjZWl2ZWQpOworCQlpZiAoIShhdG9taWNfcmVhZCgmZGV2X3ByaXYtPnZibF9yZWNlaXZlZCkgJiAweDBGKSkgewogCQkJZG9fZ2V0dGltZW9mZGF5KCZjdXJfdmJsYW5rKTsKIAkJCWlmIChkZXZfcHJpdi0+bGFzdF92YmxhbmtfdmFsaWQpIHsKIAkJCQlkZXZfcHJpdi0+dXNlY19wZXJfdmJsYW5rID0KLQkJCQkgICAgdGltZV9kaWZmKCZjdXJfdmJsYW5rLAotCQkJCQkgICAgICAmZGV2X3ByaXYtPmxhc3RfdmJsYW5rKSA+PiA0OworCQkJCQl0aW1lX2RpZmYoJmN1cl92YmxhbmssCisJCQkJCQkgICZkZXZfcHJpdi0+bGFzdF92YmxhbmspID4+IDQ7CiAJCQl9CiAJCQlkZXZfcHJpdi0+bGFzdF92YmxhbmsgPSBjdXJfdmJsYW5rOwogCQkJZGV2X3ByaXYtPmxhc3RfdmJsYW5rX3ZhbGlkID0gMTsKIAkJfQotCQlpZiAoIShhdG9taWNfcmVhZCgmZGV2LT52YmxfcmVjZWl2ZWQpICYgMHhGRikpIHsKKwkJaWYgKCEoYXRvbWljX3JlYWQoJmRldl9wcml2LT52YmxfcmVjZWl2ZWQpICYgMHhGRikpIHsKIAkJCURSTV9ERUJVRygiVVMgcGVyIHZibGFuayBpczogJXVcbiIsCiAJCQkJICBkZXZfcHJpdi0+dXNlY19wZXJfdmJsYW5rKTsKIAkJfQotCQlEUk1fV0FLRVVQKCZkZXYtPnZibF9xdWV1ZSk7Ci0JCWRybV92Ymxfc2VuZF9zaWduYWxzKGRldik7CisJCWRybV9oYW5kbGVfdmJsYW5rKGRldiwgMCk7CiAJCWhhbmRsZWQgPSAxOwogCX0KIApAQCAtMTQ1LDYgKzE1Myw3IEBACiAJLyogQWNrbm93bGVnZSBpbnRlcnJ1cHRzICovCiAJVklBX1dSSVRFKFZJQV9SRUdfSU5URVJSVVBULCBzdGF0dXMpOwogCisKIAlpZiAoaGFuZGxlZCkKIAkJcmV0dXJuIElSUV9IQU5ETEVEOwogCWVsc2UKQEAgLTE2MywzMSArMTcyLDM0IEBACiAJfQogfQogCi1pbnQgdmlhX2RyaXZlcl92Ymxhbmtfd2FpdChzdHJ1Y3QgZHJtX2RldmljZSAqIGRldiwgdW5zaWduZWQgaW50ICpzZXF1ZW5jZSkKK2ludCB2aWFfZW5hYmxlX3ZibGFuayhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgY3J0YykKIHsKLQlkcm1fdmlhX3ByaXZhdGVfdCAqZGV2X3ByaXYgPSAoZHJtX3ZpYV9wcml2YXRlX3QgKikgZGV2LT5kZXZfcHJpdmF0ZTsKLQl1bnNpZ25lZCBpbnQgY3VyX3ZibGFuazsKLQlpbnQgcmV0ID0gMDsKKwlkcm1fdmlhX3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCXUzMiBzdGF0dXM7CiAKLQlEUk1fREVCVUcoIlxuIik7Ci0JaWYgKCFkZXZfcHJpdikgewotCQlEUk1fRVJST1IoImNhbGxlZCB3aXRoIG5vIGluaXRpYWxpemF0aW9uXG4iKTsKKwlpZiAoY3J0YyAhPSAwKSB7CisJCURSTV9FUlJPUigiJXM6ICBiYWQgY3J0YyAlZFxuIiwgX19mdW5jX18sIGNydGMpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQl2aWFkcnZfYWNrbm93bGVkZ2VfaXJxcyhkZXZfcHJpdik7CisJc3RhdHVzID0gVklBX1JFQUQoVklBX1JFR19JTlRFUlJVUFQpOworCVZJQV9XUklURShWSUFfUkVHX0lOVEVSUlVQVCwgc3RhdHVzICYgVklBX0lSUV9WQkxBTktfRU5BQkxFKTsKIAotCS8qIEFzc3VtZSB0aGF0IHRoZSB1c2VyIGhhcyBtaXNzZWQgdGhlIGN1cnJlbnQgc2VxdWVuY2UgbnVtYmVyCi0JICogYnkgYWJvdXQgYSBkYXkgcmF0aGVyIHRoYW4gc2hlIHdhbnRzIHRvIHdhaXQgZm9yIHllYXJzCi0JICogdXNpbmcgdmVydGljYWwgYmxhbmtzLi4uCi0JICovCisJVklBX1dSSVRFOCgweDgzZDQsIDB4MTEpOworCVZJQV9XUklURTgoMHg4M2Q1LCBWSUFfUkVBRDgoMHg4M2Q1KSB8IDB4MzApOwogCi0JRFJNX1dBSVRfT04ocmV0LCBkZXYtPnZibF9xdWV1ZSwgMyAqIERSTV9IWiwKLQkJICAgICgoKGN1cl92YmxhbmsgPSBhdG9taWNfcmVhZCgmZGV2LT52YmxfcmVjZWl2ZWQpKSAtCi0JCSAgICAgICpzZXF1ZW5jZSkgPD0gKDEgPDwgMjMpKSk7CisJcmV0dXJuIDA7Cit9CiAKLQkqc2VxdWVuY2UgPSBjdXJfdmJsYW5rOwotCXJldHVybiByZXQ7Cit2b2lkIHZpYV9kaXNhYmxlX3ZibGFuayhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgY3J0YykKK3sKKwlkcm1fdmlhX3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCisJVklBX1dSSVRFOCgweDgzZDQsIDB4MTEpOworCVZJQV9XUklURTgoMHg4M2Q1LCBWSUFfUkVBRDgoMHg4M2Q1KSAmIH4weDMwKTsKKworCWlmIChjcnRjICE9IDApCisJCURSTV9FUlJPUigiJXM6ICBiYWQgY3J0YyAlZFxuIiwgX19mdW5jX18sIGNydGMpOwogfQogCiBzdGF0aWMgaW50CkBAIC0yMzksNiArMjUxLDcgQEAKIAlyZXR1cm4gcmV0OwogfQogCisKIC8qCiAgKiBkcm1fZG1hLmggaG9va3MKICAqLwpAQCAtMjkyLDIzICszMDUsMjUgQEAKIAl9CiB9CiAKLXZvaWQgdmlhX2RyaXZlcl9pcnFfcG9zdGluc3RhbGwoc3RydWN0IGRybV9kZXZpY2UgKiBkZXYpCitpbnQgdmlhX2RyaXZlcl9pcnFfcG9zdGluc3RhbGwoc3RydWN0IGRybV9kZXZpY2UgKmRldikKIHsKIAlkcm1fdmlhX3ByaXZhdGVfdCAqZGV2X3ByaXYgPSAoZHJtX3ZpYV9wcml2YXRlX3QgKikgZGV2LT5kZXZfcHJpdmF0ZTsKIAl1MzIgc3RhdHVzOwogCi0JRFJNX0RFQlVHKCJcbiIpOwotCWlmIChkZXZfcHJpdikgewotCQlzdGF0dXMgPSBWSUFfUkVBRChWSUFfUkVHX0lOVEVSUlVQVCk7Ci0JCVZJQV9XUklURShWSUFfUkVHX0lOVEVSUlVQVCwgc3RhdHVzIHwgVklBX0lSUV9HTE9CQUwKLQkJCSAgfCBkZXZfcHJpdi0+aXJxX2VuYWJsZV9tYXNrKTsKKwlEUk1fREVCVUcoInZpYV9kcml2ZXJfaXJxX3Bvc3RpbnN0YWxsXG4iKTsKKwlpZiAoIWRldl9wcml2KQorCQlyZXR1cm4gLUVJTlZBTDsKIAotCQkvKiBTb21lIG1hZ2ljLCBvaCBmb3Igc29tZSBkYXRhIHNoZWV0cyAhICovCisJZHJtX3ZibGFua19pbml0KGRldiwgMSk7CisJc3RhdHVzID0gVklBX1JFQUQoVklBX1JFR19JTlRFUlJVUFQpOworCVZJQV9XUklURShWSUFfUkVHX0lOVEVSUlVQVCwgc3RhdHVzIHwgVklBX0lSUV9HTE9CQUwKKwkJICB8IGRldl9wcml2LT5pcnFfZW5hYmxlX21hc2spOwogCi0JCVZJQV9XUklURTgoMHg4M2Q0LCAweDExKTsKLQkJVklBX1dSSVRFOCgweDgzZDUsIFZJQV9SRUFEOCgweDgzZDUpIHwgMHgzMCk7CisJLyogU29tZSBtYWdpYywgb2ggZm9yIHNvbWUgZGF0YSBzaGVldHMgISAqLworCVZJQV9XUklURTgoMHg4M2Q0LCAweDExKTsKKwlWSUFfV1JJVEU4KDB4ODNkNSwgVklBX1JFQUQ4KDB4ODNkNSkgfCAweDMwKTsKIAotCX0KKwlyZXR1cm4gMDsKIH0KIAogdm9pZCB2aWFfZHJpdmVyX2lycV91bmluc3RhbGwoc3RydWN0IGRybV9kZXZpY2UgKiBkZXYpCkBAIC0zMzksOSArMzU0LDYgQEAKIAlkcm1fdmlhX2lycV90ICpjdXJfaXJxID0gZGV2X3ByaXYtPnZpYV9pcnFzOwogCWludCBmb3JjZV9zZXF1ZW5jZTsKIAotCWlmICghZGV2LT5pcnEpCi0JCXJldHVybiAtRUlOVkFMOwotCiAJaWYgKGlycXdhaXQtPnJlcXVlc3QuaXJxID49IGRldl9wcml2LT5udW1faXJxcykgewogCQlEUk1fRVJST1IoIlRyeWluZyB0byB3YWl0IG9uIHVua25vd24gaXJxICVkXG4iLAogCQkJICBpcnF3YWl0LT5yZXF1ZXN0LmlycSk7CkBAIC0zNTIsNyArMzY0LDggQEAKIAogCXN3aXRjaCAoaXJxd2FpdC0+cmVxdWVzdC50eXBlICYgflZJQV9JUlFfRkxBR1NfTUFTSykgewogCWNhc2UgVklBX0lSUV9SRUxBVElWRToKLQkJaXJxd2FpdC0+cmVxdWVzdC5zZXF1ZW5jZSArPSBhdG9taWNfcmVhZCgmY3VyX2lycS0+aXJxX3JlY2VpdmVkKTsKKwkJaXJxd2FpdC0+cmVxdWVzdC5zZXF1ZW5jZSArPQorCQkJYXRvbWljX3JlYWQoJmN1cl9pcnEtPmlycV9yZWNlaXZlZCk7CiAJCWlycXdhaXQtPnJlcXVlc3QudHlwZSAmPSB+X0RSTV9WQkxBTktfUkVMQVRJVkU7CiAJY2FzZSBWSUFfSVJRX0FCU09MVVRFOgogCQlicmVhazsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS92aWEvdmlhX21tLmMgYi9kcml2ZXJzL2dwdS9kcm0vdmlhL3ZpYV9tbS5jCmluZGV4IGU2NDA5NDkuLmY2OTRjYjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS92aWEvdmlhX21tLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3ZpYS92aWFfbW0uYwpAQCAtOTMsOCArOTMsNyBAQAogCS8qIExhc3QgY29udGV4dCwgcGVyZm9ybSBjbGVhbnVwICovCiAJaWYgKGRldi0+Y3R4X2NvdW50ID09IDEgJiYgZGV2LT5kZXZfcHJpdmF0ZSkgewogCQlEUk1fREVCVUcoIkxhc3QgQ29udGV4dFxuIik7Ci0JCWlmIChkZXYtPmlycSkKLQkJCWRybV9pcnFfdW5pbnN0YWxsKGRldik7CisJCWRybV9pcnFfdW5pbnN0YWxsKGRldik7CiAJCXZpYV9jbGVhbnVwX2Z1dGV4KGRldl9wcml2KTsKIAkJdmlhX2RvX2NsZWFudXBfbWFwKGRldik7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9oaWQvS2NvbmZpZyBiL2RyaXZlcnMvaGlkL0tjb25maWcKaW5kZXggY2FjZjg5ZS4uZjU5OTlhOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9oaWQvS2NvbmZpZworKysgYi9kcml2ZXJzL2hpZC9LY29uZmlnCkBAIC02Nyw0ICs2NywyMDEgQEAKIAogc291cmNlICJkcml2ZXJzL2hpZC91c2JoaWQvS2NvbmZpZyIKIAorbWVudSAiU3BlY2lhbCBISUQgZHJpdmVycyIKKwlkZXBlbmRzIG9uIEhJRAorCitjb25maWcgSElEX0NPTVBBVAorCWJvb2wgIkxvYWQgYWxsIEhJRCBkcml2ZXJzIG9uIGhpZCBjb3JlIGxvYWQiCisJZGVmYXVsdCB5CisJLS0taGVscC0tLQorCUNvbXBhdGlibGUgb3B0aW9uIGZvciBvbGRlciB1c2Vyc3BhY2UuIElmIHlvdSBoYXZlIHN5c3RlbSB3aXRob3V0IHVkZXYKKwlzdXBwb3J0IG9mIG1vZHVsZSBsb2FkaW5nIHRocm91Z2ggYWxpYXNlcyBhbmQgYWxzbyBvbGQKKwltb2R1bGUtaW5pdC10b29scyB3aGljaCBjYW4ndCBoYW5kbGUgaGlkIGJ1cywgY2hvb3NlIFkgaGVyZS4gT3RoZXJ3aXNlCisJc2F5IE4uIElmIHlvdSBzYXkgTiBhbmQgeW91ciB1c2Vyc3BhY2UgaXMgb2xkIGVub3VnaCwgdGhlIG9ubHkKKwlmdW5jdGlvbmFsaXR5IHlvdSBsb3NlIGlzIG1vZHVsZXMgYXV0b2xvYWRpbmcuCisKKwlJZiB1bnN1cmUsIHNheSBZLgorCitjb25maWcgSElEX0E0VEVDSAorCXRyaXN0YXRlICJBNCB0ZWNoIiBpZiBFTUJFRERFRAorCWRlcGVuZHMgb24gVVNCX0hJRAorCWRlZmF1bHQgeQorCS0tLWhlbHAtLS0KKwlTdXBwb3J0IGZvciBBNCB0ZWNoIFg1IGFuZCBXT1AtMzUgLyBUcnVzdCA0NTBMIG1pY2UuCisKK2NvbmZpZyBISURfQVBQTEUKKwl0cmlzdGF0ZSAiQXBwbGUiIGlmIEVNQkVEREVECisJZGVwZW5kcyBvbiAoVVNCX0hJRCB8fCBCVF9ISURQKQorCWRlZmF1bHQgeQorCS0tLWhlbHAtLS0KKwlTdXBwb3J0IGZvciBzb21lIEFwcGxlIGRldmljZXMgd2hpY2ggbGVzcyBvciBtb3JlIGJyZWFrCisJSElEIHNwZWNpZmljYXRpb24uCisKKwlTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHN1cHBvcnQgZm9yIGtleWJvYXJkcyBvZglBcHBsZSBpQm9va3MsIFBvd2VyQm9va3MsCisJTWFjQm9va3MsIE1hY0Jvb2sgUHJvcyBhbmQgQXBwbGUgQWx1bWludW0uCisKK2NvbmZpZyBISURfQkVMS0lOCisJdHJpc3RhdGUgIkJlbGtpbiIgaWYgRU1CRURERUQKKwlkZXBlbmRzIG9uIFVTQl9ISUQKKwlkZWZhdWx0IHkKKwktLS1oZWxwLS0tCisJU3VwcG9ydCBmb3IgQmVsa2luIEZsaXAgS1ZNIGFuZCBXaXJlbGVzcyBrZXlib2FyZC4KKworY29uZmlnIEhJRF9CUklHSFQKKwl0cmlzdGF0ZSAiQnJpZ2h0IiBpZiBFTUJFRERFRAorCWRlcGVuZHMgb24gVVNCX0hJRAorCWRlZmF1bHQgeQorCS0tLWhlbHAtLS0KKwlTdXBwb3J0IGZvciBCcmlnaHQgQUJOVC0yIGtleWJvYXJkLgorCitjb25maWcgSElEX0NIRVJSWQorCXRyaXN0YXRlICJDaGVycnkiIGlmIEVNQkVEREVECisJZGVwZW5kcyBvbiBVU0JfSElECisJZGVmYXVsdCB5CisJLS0taGVscC0tLQorCVN1cHBvcnQgZm9yIENoZXJyeSBDeW1vdGlvbiBrZXlib2FyZC4KKworY29uZmlnIEhJRF9DSElDT05ZCisJdHJpc3RhdGUgIkNoaWNvbnkiIGlmIEVNQkVEREVECisJZGVwZW5kcyBvbiBVU0JfSElECisJZGVmYXVsdCB5CisJLS0taGVscC0tLQorCVN1cHBvcnQgZm9yIENoaWNvbnkgVGFjdGljYWwgcGFkLgorCitjb25maWcgSElEX0NZUFJFU1MKKwl0cmlzdGF0ZSAiQ3lwcmVzcyIgaWYgRU1CRURERUQKKwlkZXBlbmRzIG9uIFVTQl9ISUQKKwlkZWZhdWx0IHkKKwktLS1oZWxwLS0tCisJU3VwcG9ydCBmb3IgY3lwcmVzcyBtb3VzZSBhbmQgYmFyY29kZSByZWFkZXJzLgorCitjb25maWcgSElEX0RFTEwKKwl0cmlzdGF0ZSAiRGVsbCIgaWYgRU1CRURERUQKKwlkZXBlbmRzIG9uIFVTQl9ISUQKKwlkZWZhdWx0IHkKKwktLS1oZWxwLS0tCisJU3VwcG9ydCBmb3IgcXVpcmt5IERlbGwgSElEIGhhcmR3YXJlIHRoYXQgcmVxdWlyZQorCXNwZWNpYWwgTEVEIGhhbmRsaW5nIChXNzY1OCBhbmQgU0s4MTE1IG1vZGVscykKKworY29uZmlnIEhJRF9FWktFWQorCXRyaXN0YXRlICJFemtleSIgaWYgRU1CRURERUQKKwlkZXBlbmRzIG9uIFVTQl9ISUQKKwlkZWZhdWx0IHkKKwktLS1oZWxwLS0tCisJU3VwcG9ydCBmb3IgRXprZXkgQlRDIDgxOTMga2V5Ym9hcmQuCisKK2NvbmZpZyBISURfR1lSQVRJT04KKwl0cmlzdGF0ZSAiR3lyYXRpb24iIGlmIEVNQkVEREVECisJZGVwZW5kcyBvbiBVU0JfSElECisJZGVmYXVsdCB5CisJLS0taGVscC0tLQorCVN1cHBvcnQgZm9yIEd5cmF0aW9uIHJlbW90ZSBjb250cm9sLgorCitjb25maWcgSElEX0xPR0lURUNICisJdHJpc3RhdGUgIkxvZ2l0ZWNoIiBpZiBFTUJFRERFRAorCWRlcGVuZHMgb24gVVNCX0hJRAorCWRlZmF1bHQgeQorCS0tLWhlbHAtLS0KKwlTdXBwb3J0IGZvciBMb2dpdGVjaCBkZXZpY2VzIHRoYXQgYXJlIG5vdCBmdWxseSBjb21wbGlhbnQgd2l0aCBISUQgc3RhbmRhcmQuCisKK2NvbmZpZyBMT0dJVEVDSF9GRgorCWJvb2wgIkxvZ2l0ZWNoIGZvcmNlIGZlZWRiYWNrIgorCWRlcGVuZHMgb24gSElEX0xPR0lURUNICisJc2VsZWN0IElOUFVUX0ZGX01FTUxFU1MKKwloZWxwCisJICBTYXkgWSBoZXJlIGlmIHlvdSBoYXZlIG9uZSBvZiB0aGVzZSBkZXZpY2VzOgorCSAgLSBMb2dpdGVjaCBXaW5nTWFuIENvcmRsZXNzIFJ1bWJsZVBhZAorCSAgLSBMb2dpdGVjaCBXaW5nTWFuIENvcmRsZXNzIFJ1bWJsZVBhZCAyCisJICAtIExvZ2l0ZWNoIFdpbmdNYW4gRm9yY2UgM0QKKwkgIC0gTG9naXRlY2ggRm9ybXVsYSBGb3JjZSBFWAorCSAgLSBMb2dpdGVjaCBNT01PIEZvcmNlIHdoZWVsCisKKwkgIGFuZCBpZiB5b3Ugd2FudCB0byBlbmFibGUgZm9yY2UgZmVlZGJhY2sgZm9yIHRoZW0uCisJICBOb3RlOiBpZiB5b3Ugc2F5IE4gaGVyZSwgdGhpcyBkZXZpY2Ugd2lsbCBzdGlsbCBiZSBzdXBwb3J0ZWQsIGJ1dCB3aXRob3V0CisJICBmb3JjZSBmZWVkYmFjay4KKworY29uZmlnIExPR0lSVU1CTEVQQUQyX0ZGCisJYm9vbCAiTG9naXRlY2ggUnVtYmxlcGFkIDIgZm9yY2UgZmVlZGJhY2siCisJZGVwZW5kcyBvbiBISURfTE9HSVRFQ0gKKwlzZWxlY3QgSU5QVVRfRkZfTUVNTEVTUworCWhlbHAKKwkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gZW5hYmxlIGZvcmNlIGZlZWRiYWNrIHN1cHBvcnQgZm9yIExvZ2l0ZWNoCisJICBSdW1ibGVwYWQgMiBkZXZpY2VzLgorCitjb25maWcgSElEX01JQ1JPU09GVAorCXRyaXN0YXRlICJNaWNyb3NvZnQiIGlmIEVNQkVEREVECisJZGVwZW5kcyBvbiBVU0JfSElECisJZGVmYXVsdCB5CisJLS0taGVscC0tLQorCVN1cHBvcnQgZm9yIE1pY3Jvc29mdCBkZXZpY2VzIHRoYXQgYXJlIG5vdCBmdWxseSBjb21wbGlhbnQgd2l0aCBISUQgc3RhbmRhcmQuCisKK2NvbmZpZyBISURfTU9OVEVSRVkKKwl0cmlzdGF0ZSAiTW9udGVyZXkiIGlmIEVNQkVEREVECisJZGVwZW5kcyBvbiBVU0JfSElECisJZGVmYXVsdCB5CisJLS0taGVscC0tLQorCVN1cHBvcnQgZm9yIE1vbnRlcmV5IEdlbml1cyBLQjI5RS4KKworY29uZmlnIEhJRF9QQU5USEVSTE9SRAorCXRyaXN0YXRlICJQYW50aGVybG9yZCBkZXZpY2VzIHN1cHBvcnQiIGlmIEVNQkVEREVECisJZGVwZW5kcyBvbiBVU0JfSElECisJZGVmYXVsdCB5CisJLS0taGVscC0tLQorCVN1cHBvcnQgZm9yIFBhbnRoZXJMb3JkL0dyZWVuQXNpYSBiYXNlZCBkZXZpY2Ugc3VwcG9ydC4KKworY29uZmlnIFBBTlRIRVJMT1JEX0ZGCisJYm9vbCAiUGFudGhlcmxvcmQgZm9yY2UgZmVlZGJhY2sgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIEhJRF9QQU5USEVSTE9SRAorCXNlbGVjdCBJTlBVVF9GRl9NRU1MRVNTCisJaGVscAorCSAgU2F5IFkgaGVyZSBpZiB5b3UgaGF2ZSBhIFBhbnRoZXJMb3JkL0dyZWVuQXNpYSBiYXNlZCBnYW1lIGNvbnRyb2xsZXIKKwkgIG9yIGFkYXB0ZXIgYW5kIHdhbnQgdG8gZW5hYmxlIGZvcmNlIGZlZWRiYWNrIHN1cHBvcnQgZm9yIGl0LgorCitjb25maWcgSElEX1BFVEFMWU5YCisJdHJpc3RhdGUgIlBldGFseW54IiBpZiBFTUJFRERFRAorCWRlcGVuZHMgb24gVVNCX0hJRAorCWRlZmF1bHQgeQorCS0tLWhlbHAtLS0KKwlTdXBwb3J0IGZvciBQZXRhbHlueCBNYXh0ZXIgcmVtb3RlIGNvbnRyb2wuCisKK2NvbmZpZyBISURfU0FNU1VORworCXRyaXN0YXRlICJTYW1zdW5nIiBpZiBFTUJFRERFRAorCWRlcGVuZHMgb24gVVNCX0hJRAorCWRlZmF1bHQgeQorCS0tLWhlbHAtLS0KKwlTdXBwb3J0IGZvciBTYW1zdW5nIEluZnJhUmVkIHJlbW90ZSBjb250cm9sLgorCitjb25maWcgSElEX1NPTlkKKwl0cmlzdGF0ZSAiU29ueSIgaWYgRU1CRURERUQKKwlkZXBlbmRzIG9uIFVTQl9ISUQKKwlkZWZhdWx0IHkKKwktLS1oZWxwLS0tCisJU3VwcG9ydCBmb3IgU29ueSBQUzMgY29udHJvbGxlci4KKworY29uZmlnIEhJRF9TVU5QTFVTCisJdHJpc3RhdGUgIlN1bnBsdXMiIGlmIEVNQkVEREVECisJZGVwZW5kcyBvbiBVU0JfSElECisJZGVmYXVsdCB5CisJLS0taGVscC0tLQorCVN1cHBvcnQgZm9yIFN1bnBsdXMgd2lyZWxlc3MgZGVza3RvcC4KKworY29uZmlnIFRIUlVTVE1BU1RFUl9GRgorCXRyaXN0YXRlICJUaHJ1c3RNYXN0ZXIgZGV2aWNlcyBzdXBwb3J0IgorCWRlZmF1bHQgbQorCWRlcGVuZHMgb24gVVNCX0hJRAorCXNlbGVjdCBJTlBVVF9GRl9NRU1MRVNTCisJaGVscAorCSAgU2F5IFkgaGVyZSBpZiB5b3UgaGF2ZSBhIFRIUlVTVE1BU1RFUiBGaXJlU3RvcmUgRHVhbCBQb3dlciAyIG9yCisJICBhIFRIUlVTVE1BU1RFUiBGZXJyYXJpIEdUIFJ1bWJsZSBGb3JjZSBvciBGb3JjZSBGZWVkYmFjayBXaGVlbC4KKworY29uZmlnIFpFUk9QTFVTX0ZGCisJdHJpc3RhdGUgIlplcm9wbHVzIGJhc2VkIGdhbWUgY29udHJvbGxlciBzdXBwb3J0IgorCWRlZmF1bHQgbQorCWRlcGVuZHMgb24gVVNCX0hJRAorCXNlbGVjdCBJTlBVVF9GRl9NRU1MRVNTCisJaGVscAorCSAgU2F5IFkgaGVyZSBpZiB5b3UgaGF2ZSBhIFplcm9wbHVzIGJhc2VkIGdhbWUgY29udHJvbGxlci4KKworZW5kbWVudQorCiBlbmRpZiAjIEhJRF9TVVBQT1JUCmRpZmYgLS1naXQgYS9kcml2ZXJzL2hpZC9NYWtlZmlsZSBiL2RyaXZlcnMvaGlkL01ha2VmaWxlCmluZGV4IDI3NWRjNTIuLmIwOWU0M2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaGlkL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvaGlkL01ha2VmaWxlCkBAIC0xLDEzICsxLDQ2IEBACiAjCiAjIE1ha2VmaWxlIGZvciB0aGUgSElEIGRyaXZlcgogIwotaGlkLW9ianMJCQk6PSBoaWQtY29yZS5vIGhpZC1pbnB1dC5vIGhpZC1pbnB1dC1xdWlya3MubworaGlkLW9ianMJCQk6PSBoaWQtY29yZS5vIGhpZC1pbnB1dC5vCiAKIG9iai0kKENPTkZJR19ISUQpCQkrPSBoaWQubwogCiBoaWQtJChDT05GSUdfSElEX0RFQlVHKQkJKz0gaGlkLWRlYnVnLm8KIGhpZC0kKENPTkZJR19ISURSQVcpCQkrPSBoaWRyYXcubwogCitpZmRlZiBDT05GSUdfSElEX0NPTVBBVAorb2JqLW0JCQkJKz0gaGlkLWR1bW15Lm8KK2VuZGlmCisKK2hpZC1sb2dpdGVjaC1vYmpzCQk6PSBoaWQtbGcubworaWZkZWYgQ09ORklHX0xPR0lURUNIX0ZGCisJaGlkLWxvZ2l0ZWNoLW9ianMJKz0gaGlkLWxnZmYubworZW5kaWYKK2lmZGVmIENPTkZJR19MT0dJUlVNQkxFUEFEMl9GRgorCWhpZC1sb2dpdGVjaC1vYmpzCSs9IGhpZC1sZzJmZi5vCitlbmRpZgorCitvYmotJChDT05GSUdfSElEX0E0VEVDSCkJKz0gaGlkLWE0dGVjaC5vCitvYmotJChDT05GSUdfSElEX0FQUExFKQkJKz0gaGlkLWFwcGxlLm8KK29iai0kKENPTkZJR19ISURfQkVMS0lOKQkrPSBoaWQtYmVsa2luLm8KK29iai0kKENPTkZJR19ISURfQlJJR0hUKQkrPSBoaWQtYnJpZ2h0Lm8KK29iai0kKENPTkZJR19ISURfQ0hFUlJZKQkrPSBoaWQtY2hlcnJ5Lm8KK29iai0kKENPTkZJR19ISURfQ0hJQ09OWSkJKz0gaGlkLWNoaWNvbnkubworb2JqLSQoQ09ORklHX0hJRF9DWVBSRVNTKQkrPSBoaWQtY3lwcmVzcy5vCitvYmotJChDT05GSUdfSElEX0RFTEwpCQkrPSBoaWQtZGVsbC5vCitvYmotJChDT05GSUdfSElEX0VaS0VZKQkJKz0gaGlkLWV6a2V5Lm8KK29iai0kKENPTkZJR19ISURfR1lSQVRJT04pCSs9IGhpZC1neXJhdGlvbi5vCitvYmotJChDT05GSUdfSElEX0xPR0lURUNIKQkrPSBoaWQtbG9naXRlY2gubworb2JqLSQoQ09ORklHX0hJRF9NSUNST1NPRlQpCSs9IGhpZC1taWNyb3NvZnQubworb2JqLSQoQ09ORklHX0hJRF9NT05URVJFWSkJKz0gaGlkLW1vbnRlcmV5Lm8KK29iai0kKENPTkZJR19ISURfUEFOVEhFUkxPUkQpCSs9IGhpZC1wbC5vCitvYmotJChDT05GSUdfSElEX1BFVEFMWU5YKQkrPSBoaWQtcGV0YWx5bngubworb2JqLSQoQ09ORklHX0hJRF9TQU1TVU5HKQkrPSBoaWQtc2Ftc3VuZy5vCitvYmotJChDT05GSUdfSElEX1NPTlkpCQkrPSBoaWQtc29ueS5vCitvYmotJChDT05GSUdfSElEX1NVTlBMVVMpCSs9IGhpZC1zdW5wbHVzLm8KK29iai0kKENPTkZJR19USFJVU1RNQVNURVJfRkYpCSs9IGhpZC10bWZmLm8KK29iai0kKENPTkZJR19aRVJPUExVU19GRikJKz0gaGlkLXpwZmYubworCiBvYmotJChDT05GSUdfVVNCX0hJRCkJCSs9IHVzYmhpZC8KIG9iai0kKENPTkZJR19VU0JfTU9VU0UpCQkrPSB1c2JoaWQvCiBvYmotJChDT05GSUdfVVNCX0tCRCkJCSs9IHVzYmhpZC8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaGlkL2hpZC1hNHRlY2guYyBiL2RyaXZlcnMvaGlkL2hpZC1hNHRlY2guYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYmNhMDBlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9oaWQvaGlkLWE0dGVjaC5jCkBAIC0wLDAgKzEsMTYyIEBACisvKgorICogIEhJRCBkcml2ZXIgZm9yIHNvbWUgYTR0ZWNoICJzcGVjaWFsIiBkZXZpY2VzCisgKgorICogIENvcHlyaWdodCAoYykgMTk5OSBBbmRyZWFzIEdhbAorICogIENvcHlyaWdodCAoYykgMjAwMC0yMDA1IFZvanRlY2ggUGF2bGlrIDx2b2p0ZWNoQHN1c2UuY3o+CisgKiAgQ29weXJpZ2h0IChjKSAyMDA1IE1pY2hhZWwgSGFib3VzdGFrIDxtaWtlLUBjaW5jaS5yci5jb20+IGZvciBDb25jZXB0MiwgSW5jCisgKiAgQ29weXJpZ2h0IChjKSAyMDA2LTIwMDcgSmlyaSBLb3NpbmEKKyAqICBDb3B5cmlnaHQgKGMpIDIwMDcgUGF1bCBXYWxtc2xleQorICogIENvcHlyaWdodCAoYykgMjAwOCBKaXJpIFNsYWJ5CisgKi8KKworLyoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorICogU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKQorICogYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CisjaW5jbHVkZSA8bGludXgvaGlkLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisKKyNpbmNsdWRlICJoaWQtaWRzLmgiCisKKyNkZWZpbmUgQTRfMldIRUVMX01PVVNFX0hBQ0tfNwkweDAxCisjZGVmaW5lIEE0XzJXSEVFTF9NT1VTRV9IQUNLX0I4CTB4MDIKKworc3RydWN0IGE0dGVjaF9zYyB7CisJdW5zaWduZWQgbG9uZyBxdWlya3M7CisJdW5zaWduZWQgaW50IGh3X3doZWVsOworCV9fczMyIGRlbGF5ZWRfdmFsdWU7Cit9OworCitzdGF0aWMgaW50IGE0X2lucHV0X21hcHBlZChzdHJ1Y3QgaGlkX2RldmljZSAqaGRldiwgc3RydWN0IGhpZF9pbnB1dCAqaGksCisJCXN0cnVjdCBoaWRfZmllbGQgKmZpZWxkLCBzdHJ1Y3QgaGlkX3VzYWdlICp1c2FnZSwKKwkJdW5zaWduZWQgbG9uZyAqKmJpdCwgaW50ICptYXgpCit7CisJc3RydWN0IGE0dGVjaF9zYyAqYTQgPSBoaWRfZ2V0X2RydmRhdGEoaGRldik7CisKKwlpZiAodXNhZ2UtPnR5cGUgPT0gRVZfUkVMICYmIHVzYWdlLT5jb2RlID09IFJFTF9XSEVFTCkKKwkJc2V0X2JpdChSRUxfSFdIRUVMLCAqYml0KTsKKworCWlmICgoYTQtPnF1aXJrcyAmIEE0XzJXSEVFTF9NT1VTRV9IQUNLXzcpICYmIHVzYWdlLT5oaWQgPT0gMHgwMDA5MDAwNykKKwkJcmV0dXJuIC0xOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYTRfZXZlbnQoc3RydWN0IGhpZF9kZXZpY2UgKmhkZXYsIHN0cnVjdCBoaWRfZmllbGQgKmZpZWxkLAorCQlzdHJ1Y3QgaGlkX3VzYWdlICp1c2FnZSwgX19zMzIgdmFsdWUpCit7CisJc3RydWN0IGE0dGVjaF9zYyAqYTQgPSBoaWRfZ2V0X2RydmRhdGEoaGRldik7CisJc3RydWN0IGlucHV0X2RldiAqaW5wdXQ7CisKKwlpZiAoIShoZGV2LT5jbGFpbWVkICYgSElEX0NMQUlNRURfSU5QVVQpIHx8ICFmaWVsZC0+aGlkaW5wdXQgfHwKKwkJCSF1c2FnZS0+dHlwZSkKKwkJcmV0dXJuIDA7CisKKwlpbnB1dCA9IGZpZWxkLT5oaWRpbnB1dC0+aW5wdXQ7CisKKwlpZiAoYTQtPnF1aXJrcyAmIEE0XzJXSEVFTF9NT1VTRV9IQUNLX0I4KSB7CisJCWlmICh1c2FnZS0+dHlwZSA9PSBFVl9SRUwgJiYgdXNhZ2UtPmNvZGUgPT0gUkVMX1dIRUVMKSB7CisJCQlhNC0+ZGVsYXllZF92YWx1ZSA9IHZhbHVlOworCQkJcmV0dXJuIDE7CisJCX0KKworCQlpZiAodXNhZ2UtPmhpZCA9PSAweDAwMDEwMGI4KSB7CisJCQlpbnB1dF9ldmVudChpbnB1dCwgRVZfUkVMLCB2YWx1ZSA/IFJFTF9IV0hFRUwgOgorCQkJCQlSRUxfV0hFRUwsIGE0LT5kZWxheWVkX3ZhbHVlKTsKKwkJCXJldHVybiAxOworCQl9CisJfQorCisJaWYgKChhNC0+cXVpcmtzICYgQTRfMldIRUVMX01PVVNFX0hBQ0tfNykgJiYgdXNhZ2UtPmhpZCA9PSAweDAwMDkwMDA3KSB7CisJCWE0LT5od193aGVlbCA9ICEhdmFsdWU7CisJCXJldHVybiAxOworCX0KKworCWlmICh1c2FnZS0+Y29kZSA9PSBSRUxfV0hFRUwgJiYgYTQtPmh3X3doZWVsKSB7CisJCWlucHV0X2V2ZW50KGlucHV0LCB1c2FnZS0+dHlwZSwgUkVMX0hXSEVFTCwgdmFsdWUpOworCQlyZXR1cm4gMTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhNF9wcm9iZShzdHJ1Y3QgaGlkX2RldmljZSAqaGRldiwgY29uc3Qgc3RydWN0IGhpZF9kZXZpY2VfaWQgKmlkKQoreworCXN0cnVjdCBhNHRlY2hfc2MgKmE0OworCWludCByZXQ7CisKKwlhNCA9IGt6YWxsb2Moc2l6ZW9mKCphNCksIEdGUF9LRVJORUwpOworCWlmIChhNCA9PSBOVUxMKSB7CisJCWRldl9lcnIoJmhkZXYtPmRldiwgImNhbid0IGFsbG9jIGRldmljZSBkZXNjcmlwdG9yXG4iKTsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBlcnJfZnJlZTsKKwl9CisKKwlhNC0+cXVpcmtzID0gaWQtPmRyaXZlcl9kYXRhOworCisJaGlkX3NldF9kcnZkYXRhKGhkZXYsIGE0KTsKKworCXJldCA9IGhpZF9wYXJzZShoZGV2KTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoJmhkZXYtPmRldiwgInBhcnNlIGZhaWxlZFxuIik7CisJCWdvdG8gZXJyX2ZyZWU7CisJfQorCisJcmV0ID0gaGlkX2h3X3N0YXJ0KGhkZXYsIEhJRF9DT05ORUNUX0RFRkFVTFQpOworCWlmIChyZXQpIHsKKwkJZGV2X2VycigmaGRldi0+ZGV2LCAiaHcgc3RhcnQgZmFpbGVkXG4iKTsKKwkJZ290byBlcnJfZnJlZTsKKwl9CisKKwlyZXR1cm4gMDsKK2Vycl9mcmVlOgorCWtmcmVlKGE0KTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBhNF9yZW1vdmUoc3RydWN0IGhpZF9kZXZpY2UgKmhkZXYpCit7CisJc3RydWN0IGE0dGVjaF9zYyAqYTQgPSBoaWRfZ2V0X2RydmRhdGEoaGRldik7CisKKwloaWRfaHdfc3RvcChoZGV2KTsKKwlrZnJlZShhNCk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGlkX2RldmljZV9pZCBhNF9kZXZpY2VzW10gPSB7CisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0E0VEVDSCwgVVNCX0RFVklDRV9JRF9BNFRFQ0hfV0NQMzJQVSksCisJCS5kcml2ZXJfZGF0YSA9IEE0XzJXSEVFTF9NT1VTRV9IQUNLXzcgfSwKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfQTRURUNILCBVU0JfREVWSUNFX0lEX0E0VEVDSF9YNV8wMDVEKSwKKwkJLmRyaXZlcl9kYXRhID0gQTRfMldIRUVMX01PVVNFX0hBQ0tfQjggfSwKKwl7IH0KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKGhpZCwgYTRfZGV2aWNlcyk7CisKK3N0YXRpYyBzdHJ1Y3QgaGlkX2RyaXZlciBhNF9kcml2ZXIgPSB7CisJLm5hbWUgPSAiYTR0ZWNoIiwKKwkuaWRfdGFibGUgPSBhNF9kZXZpY2VzLAorCS5pbnB1dF9tYXBwZWQgPSBhNF9pbnB1dF9tYXBwZWQsCisJLmV2ZW50ID0gYTRfZXZlbnQsCisJLnByb2JlID0gYTRfcHJvYmUsCisJLnJlbW92ZSA9IGE0X3JlbW92ZSwKK307CisKK3N0YXRpYyBpbnQgYTRfaW5pdCh2b2lkKQoreworCXJldHVybiBoaWRfcmVnaXN0ZXJfZHJpdmVyKCZhNF9kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBhNF9leGl0KHZvaWQpCit7CisJaGlkX3VucmVnaXN0ZXJfZHJpdmVyKCZhNF9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChhNF9pbml0KTsKK21vZHVsZV9leGl0KGE0X2V4aXQpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCitISURfQ09NUEFUX0xPQURfRFJJVkVSKGE0dGVjaCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2hpZC9oaWQtYXBwbGUuYyBiL2RyaXZlcnMvaGlkL2hpZC1hcHBsZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZkN2Y4OTYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2hpZC9oaWQtYXBwbGUuYwpAQCAtMCwwICsxLDQ4NCBAQAorLyoKKyAqICBVU0IgSElEIHF1aXJrcyBzdXBwb3J0IGZvciBMaW51eAorICoKKyAqICBDb3B5cmlnaHQgKGMpIDE5OTkgQW5kcmVhcyBHYWwKKyAqICBDb3B5cmlnaHQgKGMpIDIwMDAtMjAwNSBWb2p0ZWNoIFBhdmxpayA8dm9qdGVjaEBzdXNlLmN6PgorICogIENvcHlyaWdodCAoYykgMjAwNSBNaWNoYWVsIEhhYm91c3RhayA8bWlrZS1AY2luY2kucnIuY29tPiBmb3IgQ29uY2VwdDIsIEluYworICogIENvcHlyaWdodCAoYykgMjAwNi0yMDA3IEppcmkgS29zaW5hCisgKiAgQ29weXJpZ2h0IChjKSAyMDA3IFBhdWwgV2FsbXNsZXkKKyAqICBDb3B5cmlnaHQgKGMpIDIwMDggSmlyaSBTbGFieSA8amlyaXNsYWJ5QGdtYWlsLmNvbT4KKyAqLworCisvKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgKiBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pCisgKiBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvaGlkLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvdXNiLmg+CisKKyNpbmNsdWRlICJoaWQtaWRzLmgiCisKKyNkZWZpbmUgQVBQTEVfUkRFU0NfSklTCQkweDAwMDEKKyNkZWZpbmUgQVBQTEVfSUdOT1JFX01PVVNFCTB4MDAwMgorI2RlZmluZSBBUFBMRV9IQVNfRk4JCTB4MDAwNAorI2RlZmluZSBBUFBMRV9ISURERVYJCTB4MDAwOAorI2RlZmluZSBBUFBMRV9JU09fS0VZQk9BUkQJMHgwMDEwCisjZGVmaW5lIEFQUExFX01JR0hUWU1PVVNFCTB4MDAyMAorI2RlZmluZSBBUFBMRV9JTlZFUlRfSFdIRUVMCTB4MDA0MAorI2RlZmluZSBBUFBMRV9JR05PUkVfSElESU5QVVQJMHgwMDgwCisjZGVmaW5lIEFQUExFX05VTUxPQ0tfRU1VTEFUSU9OCTB4MDEwMAorCisjZGVmaW5lIEFQUExFX0ZMQUdfRktFWQkJMHgwMQorCitzdGF0aWMgdW5zaWduZWQgaW50IGZubW9kZSA9IDE7Cittb2R1bGVfcGFyYW0oZm5tb2RlLCB1aW50LCAwNjQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoZm5tb2RlLCAiTW9kZSBvZiBmbiBrZXkgb24gQXBwbGUga2V5Ym9hcmRzICgwID0gZGlzYWJsZWQsICIKKwkJIlsxXSA9IGZrZXlzbGFzdCwgMiA9IGZrZXlzZmlyc3QpIik7CisKK3N0cnVjdCBhcHBsZV9zYyB7CisJdW5zaWduZWQgbG9uZyBxdWlya3M7CisJdW5zaWduZWQgaW50IGZuX29uOworCURFQ0xBUkVfQklUTUFQKHByZXNzZWRfZm4sIEtFWV9DTlQpOworCURFQ0xBUkVfQklUTUFQKHByZXNzZWRfbnVtbG9jaywgS0VZX0NOVCk7Cit9OworCitzdHJ1Y3QgYXBwbGVfa2V5X3RyYW5zbGF0aW9uIHsKKwl1MTYgZnJvbTsKKwl1MTYgdG87CisJdTggZmxhZ3M7Cit9OworCitzdGF0aWMgc3RydWN0IGFwcGxlX2tleV90cmFuc2xhdGlvbiBhcHBsZV9mbl9rZXlzW10gPSB7CisJeyBLRVlfQkFDS1NQQUNFLCBLRVlfREVMRVRFIH0sCisJeyBLRVlfRjEsCUtFWV9CUklHSFRORVNTRE9XTiwgQVBQTEVfRkxBR19GS0VZIH0sCisJeyBLRVlfRjIsCUtFWV9CUklHSFRORVNTVVAsICAgQVBQTEVfRkxBR19GS0VZIH0sCisJeyBLRVlfRjMsCUtFWV9GTl9GNSwgICAgICAgICAgQVBQTEVfRkxBR19GS0VZIH0sIC8qIEV4cG9zw6kgKi8KKwl7IEtFWV9GNCwJS0VZX0ZOX0Y0LCAgICAgICAgICBBUFBMRV9GTEFHX0ZLRVkgfSwgLyogRGFzaGJvYXJkICovCisJeyBLRVlfRjUsCUtFWV9LQkRJTExVTURPV04sICAgQVBQTEVfRkxBR19GS0VZIH0sCisJeyBLRVlfRjYsCUtFWV9LQkRJTExVTVVQLCAgICAgQVBQTEVfRkxBR19GS0VZIH0sCisJeyBLRVlfRjcsCUtFWV9QUkVWSU9VU1NPTkcsICAgQVBQTEVfRkxBR19GS0VZIH0sCisJeyBLRVlfRjgsCUtFWV9QTEFZUEFVU0UsICAgICAgQVBQTEVfRkxBR19GS0VZIH0sCisJeyBLRVlfRjksCUtFWV9ORVhUU09ORywgICAgICAgQVBQTEVfRkxBR19GS0VZIH0sCisJeyBLRVlfRjEwLAlLRVlfTVVURSwgICAgICAgICAgIEFQUExFX0ZMQUdfRktFWSB9LAorCXsgS0VZX0YxMSwJS0VZX1ZPTFVNRURPV04sICAgICBBUFBMRV9GTEFHX0ZLRVkgfSwKKwl7IEtFWV9GMTIsCUtFWV9WT0xVTUVVUCwgICAgICAgQVBQTEVfRkxBR19GS0VZIH0sCisJeyBLRVlfVVAsCUtFWV9QQUdFVVAgfSwKKwl7IEtFWV9ET1dOLAlLRVlfUEFHRURPV04gfSwKKwl7IEtFWV9MRUZULAlLRVlfSE9NRSB9LAorCXsgS0VZX1JJR0hULAlLRVlfRU5EIH0sCisJeyB9Cit9OworCitzdGF0aWMgc3RydWN0IGFwcGxlX2tleV90cmFuc2xhdGlvbiBwb3dlcmJvb2tfZm5fa2V5c1tdID0geworCXsgS0VZX0JBQ0tTUEFDRSwgS0VZX0RFTEVURSB9LAorCXsgS0VZX0YxLAlLRVlfQlJJR0hUTkVTU0RPV04sICAgICBBUFBMRV9GTEFHX0ZLRVkgfSwKKwl7IEtFWV9GMiwJS0VZX0JSSUdIVE5FU1NVUCwgICAgICAgQVBQTEVfRkxBR19GS0VZIH0sCisJeyBLRVlfRjMsCUtFWV9NVVRFLCAgICAgICAgICAgICAgIEFQUExFX0ZMQUdfRktFWSB9LAorCXsgS0VZX0Y0LAlLRVlfVk9MVU1FRE9XTiwgICAgICAgICBBUFBMRV9GTEFHX0ZLRVkgfSwKKwl7IEtFWV9GNSwJS0VZX1ZPTFVNRVVQLCAgICAgICAgICAgQVBQTEVfRkxBR19GS0VZIH0sCisJeyBLRVlfRjYsCUtFWV9OVU1MT0NLLCAgICAgICAgICAgIEFQUExFX0ZMQUdfRktFWSB9LAorCXsgS0VZX0Y3LAlLRVlfU1dJVENIVklERU9NT0RFLCAgICBBUFBMRV9GTEFHX0ZLRVkgfSwKKwl7IEtFWV9GOCwJS0VZX0tCRElMTFVNVE9HR0xFLCAgICAgQVBQTEVfRkxBR19GS0VZIH0sCisJeyBLRVlfRjksCUtFWV9LQkRJTExVTURPV04sICAgICAgIEFQUExFX0ZMQUdfRktFWSB9LAorCXsgS0VZX0YxMCwJS0VZX0tCRElMTFVNVVAsICAgICAgICAgQVBQTEVfRkxBR19GS0VZIH0sCisJeyBLRVlfVVAsCUtFWV9QQUdFVVAgfSwKKwl7IEtFWV9ET1dOLAlLRVlfUEFHRURPV04gfSwKKwl7IEtFWV9MRUZULAlLRVlfSE9NRSB9LAorCXsgS0VZX1JJR0hULAlLRVlfRU5EIH0sCisJeyB9Cit9OworCitzdGF0aWMgc3RydWN0IGFwcGxlX2tleV90cmFuc2xhdGlvbiBwb3dlcmJvb2tfbnVtbG9ja19rZXlzW10gPSB7CisJeyBLRVlfSiwJS0VZX0tQMSB9LAorCXsgS0VZX0ssCUtFWV9LUDIgfSwKKwl7IEtFWV9MLAlLRVlfS1AzIH0sCisJeyBLRVlfVSwJS0VZX0tQNCB9LAorCXsgS0VZX0ksCUtFWV9LUDUgfSwKKwl7IEtFWV9PLAlLRVlfS1A2IH0sCisJeyBLRVlfNywJS0VZX0tQNyB9LAorCXsgS0VZXzgsCUtFWV9LUDggfSwKKwl7IEtFWV85LAlLRVlfS1A5IH0sCisJeyBLRVlfTSwJS0VZX0tQMCB9LAorCXsgS0VZX0RPVCwJS0VZX0tQRE9UIH0sCisJeyBLRVlfU0xBU0gsCUtFWV9LUFBMVVMgfSwKKwl7IEtFWV9TRU1JQ09MT04sIEtFWV9LUE1JTlVTIH0sCisJeyBLRVlfUCwJS0VZX0tQQVNURVJJU0sgfSwKKwl7IEtFWV9NSU5VUywJS0VZX0tQRVFVQUwgfSwKKwl7IEtFWV8wLAlLRVlfS1BTTEFTSCB9LAorCXsgS0VZX0Y2LAlLRVlfTlVNTE9DSyB9LAorCXsgS0VZX0tQRU5URVIsCUtFWV9LUEVOVEVSIH0sCisJeyBLRVlfQkFDS1NQQUNFLCBLRVlfQkFDS1NQQUNFIH0sCisJeyB9Cit9OworCitzdGF0aWMgc3RydWN0IGFwcGxlX2tleV90cmFuc2xhdGlvbiBhcHBsZV9pc29fa2V5Ym9hcmRbXSA9IHsKKwl7IEtFWV9HUkFWRSwJS0VZXzEwMk5EIH0sCisJeyBLRVlfMTAyTkQsCUtFWV9HUkFWRSB9LAorCXsgfQorfTsKKworc3RhdGljIHN0cnVjdCBhcHBsZV9rZXlfdHJhbnNsYXRpb24gKmFwcGxlX2ZpbmRfdHJhbnNsYXRpb24oCisJCXN0cnVjdCBhcHBsZV9rZXlfdHJhbnNsYXRpb24gKnRhYmxlLCB1MTYgZnJvbSkKK3sKKwlzdHJ1Y3QgYXBwbGVfa2V5X3RyYW5zbGF0aW9uICp0cmFuczsKKworCS8qIExvb2sgZm9yIHRoZSB0cmFuc2xhdGlvbiAqLworCWZvciAodHJhbnMgPSB0YWJsZTsgdHJhbnMtPmZyb207IHRyYW5zKyspCisJCWlmICh0cmFucy0+ZnJvbSA9PSBmcm9tKQorCQkJcmV0dXJuIHRyYW5zOworCisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBpbnQgaGlkaW5wdXRfYXBwbGVfZXZlbnQoc3RydWN0IGhpZF9kZXZpY2UgKmhpZCwgc3RydWN0IGlucHV0X2RldiAqaW5wdXQsCisJCXN0cnVjdCBoaWRfdXNhZ2UgKnVzYWdlLCBfX3MzMiB2YWx1ZSkKK3sKKwlzdHJ1Y3QgYXBwbGVfc2MgKmFzYyA9IGhpZF9nZXRfZHJ2ZGF0YShoaWQpOworCXN0cnVjdCBhcHBsZV9rZXlfdHJhbnNsYXRpb24gKnRyYW5zOworCisJaWYgKHVzYWdlLT5jb2RlID09IEtFWV9GTikgeworCQlhc2MtPmZuX29uID0gISF2YWx1ZTsKKwkJaW5wdXRfZXZlbnQoaW5wdXQsIHVzYWdlLT50eXBlLCB1c2FnZS0+Y29kZSwgdmFsdWUpOworCQlyZXR1cm4gMTsKKwl9CisKKwlpZiAoZm5tb2RlKSB7CisJCWludCBkb190cmFuc2xhdGU7CisKKwkJdHJhbnMgPSBhcHBsZV9maW5kX3RyYW5zbGF0aW9uKChoaWQtPnByb2R1Y3QgPCAweDIyMCB8fAorCQkJCQloaWQtPnByb2R1Y3QgPj0gMHgzMDApID8KKwkJCQkJcG93ZXJib29rX2ZuX2tleXMgOiBhcHBsZV9mbl9rZXlzLAorCQkJCQl1c2FnZS0+Y29kZSk7CisJCWlmICh0cmFucykgeworCQkJaWYgKHRlc3RfYml0KHVzYWdlLT5jb2RlLCBhc2MtPnByZXNzZWRfZm4pKQorCQkJCWRvX3RyYW5zbGF0ZSA9IDE7CisJCQllbHNlIGlmICh0cmFucy0+ZmxhZ3MgJiBBUFBMRV9GTEFHX0ZLRVkpCisJCQkJZG9fdHJhbnNsYXRlID0gKGZubW9kZSA9PSAyICYmIGFzYy0+Zm5fb24pIHx8CisJCQkJCShmbm1vZGUgPT0gMSAmJiAhYXNjLT5mbl9vbik7CisJCQllbHNlCisJCQkJZG9fdHJhbnNsYXRlID0gYXNjLT5mbl9vbjsKKworCQkJaWYgKGRvX3RyYW5zbGF0ZSkgeworCQkJCWlmICh2YWx1ZSkKKwkJCQkJc2V0X2JpdCh1c2FnZS0+Y29kZSwgYXNjLT5wcmVzc2VkX2ZuKTsKKwkJCQllbHNlCisJCQkJCWNsZWFyX2JpdCh1c2FnZS0+Y29kZSwgYXNjLT5wcmVzc2VkX2ZuKTsKKworCQkJCWlucHV0X2V2ZW50KGlucHV0LCB1c2FnZS0+dHlwZSwgdHJhbnMtPnRvLAorCQkJCQkJdmFsdWUpOworCisJCQkJcmV0dXJuIDE7CisJCQl9CisJCX0KKworCQlpZiAoYXNjLT5xdWlya3MgJiBBUFBMRV9OVU1MT0NLX0VNVUxBVElPTiAmJgorCQkJCSh0ZXN0X2JpdCh1c2FnZS0+Y29kZSwgYXNjLT5wcmVzc2VkX251bWxvY2spIHx8CisJCQkJdGVzdF9iaXQoTEVEX05VTUwsIGlucHV0LT5sZWQpKSkgeworCQkJdHJhbnMgPSBhcHBsZV9maW5kX3RyYW5zbGF0aW9uKHBvd2VyYm9va19udW1sb2NrX2tleXMsCisJCQkJCXVzYWdlLT5jb2RlKTsKKworCQkJaWYgKHRyYW5zKSB7CisJCQkJaWYgKHZhbHVlKQorCQkJCQlzZXRfYml0KHVzYWdlLT5jb2RlLAorCQkJCQkJCWFzYy0+cHJlc3NlZF9udW1sb2NrKTsKKwkJCQllbHNlCisJCQkJCWNsZWFyX2JpdCh1c2FnZS0+Y29kZSwKKwkJCQkJCQlhc2MtPnByZXNzZWRfbnVtbG9jayk7CisKKwkJCQlpbnB1dF9ldmVudChpbnB1dCwgdXNhZ2UtPnR5cGUsIHRyYW5zLT50bywKKwkJCQkJCXZhbHVlKTsKKwkJCX0KKworCQkJcmV0dXJuIDE7CisJCX0KKwl9CisKKwlpZiAoYXNjLT5xdWlya3MgJiBBUFBMRV9JU09fS0VZQk9BUkQpIHsKKwkJdHJhbnMgPSBhcHBsZV9maW5kX3RyYW5zbGF0aW9uKGFwcGxlX2lzb19rZXlib2FyZCwgdXNhZ2UtPmNvZGUpOworCQlpZiAodHJhbnMpIHsKKwkJCWlucHV0X2V2ZW50KGlucHV0LCB1c2FnZS0+dHlwZSwgdHJhbnMtPnRvLCB2YWx1ZSk7CisJCQlyZXR1cm4gMTsKKwkJfQorCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGFwcGxlX2V2ZW50KHN0cnVjdCBoaWRfZGV2aWNlICpoZGV2LCBzdHJ1Y3QgaGlkX2ZpZWxkICpmaWVsZCwKKwkJc3RydWN0IGhpZF91c2FnZSAqdXNhZ2UsIF9fczMyIHZhbHVlKQoreworCXN0cnVjdCBhcHBsZV9zYyAqYXNjID0gaGlkX2dldF9kcnZkYXRhKGhkZXYpOworCisJaWYgKCEoaGRldi0+Y2xhaW1lZCAmIEhJRF9DTEFJTUVEX0lOUFVUKSB8fCAhZmllbGQtPmhpZGlucHV0IHx8CisJCQkhdXNhZ2UtPnR5cGUpCisJCXJldHVybiAwOworCisJaWYgKChhc2MtPnF1aXJrcyAmIEFQUExFX0lOVkVSVF9IV0hFRUwpICYmCisJCQl1c2FnZS0+Y29kZSA9PSBSRUxfSFdIRUVMKSB7CisJCWlucHV0X2V2ZW50KGZpZWxkLT5oaWRpbnB1dC0+aW5wdXQsIHVzYWdlLT50eXBlLCB1c2FnZS0+Y29kZSwKKwkJCQktdmFsdWUpOworCQlyZXR1cm4gMTsKKwl9CisKKwlpZiAoKGFzYy0+cXVpcmtzICYgQVBQTEVfSEFTX0ZOKSAmJgorCQkJaGlkaW5wdXRfYXBwbGVfZXZlbnQoaGRldiwgZmllbGQtPmhpZGlucHV0LT5pbnB1dCwKKwkJCQl1c2FnZSwgdmFsdWUpKQorCQlyZXR1cm4gMTsKKworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBNYWNCb29rIEpJUyBrZXlib2FyZCBoYXMgd3JvbmcgbG9naWNhbCBtYXhpbXVtCisgKi8KK3N0YXRpYyB2b2lkIGFwcGxlX3JlcG9ydF9maXh1cChzdHJ1Y3QgaGlkX2RldmljZSAqaGRldiwgX191OCAqcmRlc2MsCisJCXVuc2lnbmVkIGludCByc2l6ZSkKK3sKKwlzdHJ1Y3QgYXBwbGVfc2MgKmFzYyA9IGhpZF9nZXRfZHJ2ZGF0YShoZGV2KTsKKworCWlmICgoYXNjLT5xdWlya3MgJiBBUFBMRV9SREVTQ19KSVMpICYmIHJzaXplID49IDYwICYmCisJCQlyZGVzY1s1M10gPT0gMHg2NSAmJiByZGVzY1s1OV0gPT0gMHg2NSkgeworCQlkZXZfaW5mbygmaGRldi0+ZGV2LCAiZml4aW5nIHVwIE1hY0Jvb2sgSklTIGtleWJvYXJkIHJlcG9ydCAiCisJCQkJImRlc2NyaXB0b3JcbiIpOworCQlyZGVzY1s1M10gPSByZGVzY1s1OV0gPSAweGU3OworCX0KK30KKworc3RhdGljIHZvaWQgYXBwbGVfc2V0dXBfaW5wdXQoc3RydWN0IGlucHV0X2RldiAqaW5wdXQpCit7CisJc3RydWN0IGFwcGxlX2tleV90cmFuc2xhdGlvbiAqdHJhbnM7CisKKwlzZXRfYml0KEtFWV9OVU1MT0NLLCBpbnB1dC0+a2V5Yml0KTsKKworCS8qIEVuYWJsZSBhbGwgbmVlZGVkIGtleXMgKi8KKwlmb3IgKHRyYW5zID0gYXBwbGVfZm5fa2V5czsgdHJhbnMtPmZyb207IHRyYW5zKyspCisJCXNldF9iaXQodHJhbnMtPnRvLCBpbnB1dC0+a2V5Yml0KTsKKworCWZvciAodHJhbnMgPSBwb3dlcmJvb2tfZm5fa2V5czsgdHJhbnMtPmZyb207IHRyYW5zKyspCisJCXNldF9iaXQodHJhbnMtPnRvLCBpbnB1dC0+a2V5Yml0KTsKKworCWZvciAodHJhbnMgPSBwb3dlcmJvb2tfbnVtbG9ja19rZXlzOyB0cmFucy0+ZnJvbTsgdHJhbnMrKykKKwkJc2V0X2JpdCh0cmFucy0+dG8sIGlucHV0LT5rZXliaXQpOworCisJZm9yICh0cmFucyA9IGFwcGxlX2lzb19rZXlib2FyZDsgdHJhbnMtPmZyb207IHRyYW5zKyspCisJCXNldF9iaXQodHJhbnMtPnRvLCBpbnB1dC0+a2V5Yml0KTsKK30KKworc3RhdGljIGludCBhcHBsZV9pbnB1dF9tYXBwaW5nKHN0cnVjdCBoaWRfZGV2aWNlICpoZGV2LCBzdHJ1Y3QgaGlkX2lucHV0ICpoaSwKKwkJc3RydWN0IGhpZF9maWVsZCAqZmllbGQsIHN0cnVjdCBoaWRfdXNhZ2UgKnVzYWdlLAorCQl1bnNpZ25lZCBsb25nICoqYml0LCBpbnQgKm1heCkKK3sKKwlpZiAodXNhZ2UtPmhpZCA9PSAoSElEX1VQX0NVU1RPTSB8IDB4MDAwMykpIHsKKwkJLyogVGhlIGZuIGtleSBvbiBBcHBsZSBVU0Iga2V5Ym9hcmRzICovCisJCXNldF9iaXQoRVZfUkVQLCBoaS0+aW5wdXQtPmV2Yml0KTsKKwkJaGlkX21hcF91c2FnZV9jbGVhcihoaSwgdXNhZ2UsIGJpdCwgbWF4LCBFVl9LRVksIEtFWV9GTik7CisJCWFwcGxlX3NldHVwX2lucHV0KGhpLT5pbnB1dCk7CisJCXJldHVybiAxOworCX0KKworCS8qIHdlIHdhbnQgdGhlIGhpZCBsYXllciB0byBnbyB0aHJvdWdoIHN0YW5kYXJkIHBhdGggKHNldCBhbmQgaWdub3JlKSAqLworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGFwcGxlX2lucHV0X21hcHBlZChzdHJ1Y3QgaGlkX2RldmljZSAqaGRldiwgc3RydWN0IGhpZF9pbnB1dCAqaGksCisJCXN0cnVjdCBoaWRfZmllbGQgKmZpZWxkLCBzdHJ1Y3QgaGlkX3VzYWdlICp1c2FnZSwKKwkJdW5zaWduZWQgbG9uZyAqKmJpdCwgaW50ICptYXgpCit7CisJc3RydWN0IGFwcGxlX3NjICphc2MgPSBoaWRfZ2V0X2RydmRhdGEoaGRldik7CisKKwlpZiAoYXNjLT5xdWlya3MgJiBBUFBMRV9NSUdIVFlNT1VTRSkgeworCQlpZiAodXNhZ2UtPmhpZCA9PSBISURfR0RfWikKKwkJCWhpZF9tYXBfdXNhZ2UoaGksIHVzYWdlLCBiaXQsIG1heCwgRVZfUkVMLCBSRUxfSFdIRUVMKTsKKwkJZWxzZSBpZiAodXNhZ2UtPmNvZGUgPT0gQlROXzEpCisJCQloaWRfbWFwX3VzYWdlKGhpLCB1c2FnZSwgYml0LCBtYXgsIEVWX0tFWSwgQlROXzIpOworCQllbHNlIGlmICh1c2FnZS0+Y29kZSA9PSBCVE5fMikKKwkJCWhpZF9tYXBfdXNhZ2UoaGksIHVzYWdlLCBiaXQsIG1heCwgRVZfS0VZLCBCVE5fMSk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYXBwbGVfcHJvYmUoc3RydWN0IGhpZF9kZXZpY2UgKmhkZXYsCisJCWNvbnN0IHN0cnVjdCBoaWRfZGV2aWNlX2lkICppZCkKK3sKKwl1bnNpZ25lZCBsb25nIHF1aXJrcyA9IGlkLT5kcml2ZXJfZGF0YTsKKwlzdHJ1Y3QgYXBwbGVfc2MgKmFzYzsKKwl1bnNpZ25lZCBpbnQgY29ubmVjdF9tYXNrID0gSElEX0NPTk5FQ1RfREVGQVVMVDsKKwlpbnQgcmV0OworCisJLyogcmV0dXJuIHNvbWV0aGluZyBlbHNlIG9yIG1vdmUgdG8gaGlkIGxheWVyPyBkZXZpY2Ugd2lsbCByZXNpZGUKKwkgICBhbGxvY2F0ZWQgKi8KKwlpZiAoaWQtPmJ1cyA9PSBCVVNfVVNCICYmIChxdWlya3MgJiBBUFBMRV9JR05PUkVfTU9VU0UpICYmCisJCQl0b191c2JfaW50ZXJmYWNlKGhkZXYtPmRldi5wYXJlbnQpLT5jdXJfYWx0c2V0dGluZy0+CisJCQlkZXNjLmJJbnRlcmZhY2VQcm90b2NvbCA9PSBVU0JfSU5URVJGQUNFX1BST1RPQ09MX01PVVNFKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWFzYyA9IGt6YWxsb2Moc2l6ZW9mKCphc2MpLCBHRlBfS0VSTkVMKTsKKwlpZiAoYXNjID09IE5VTEwpIHsKKwkJZGV2X2VycigmaGRldi0+ZGV2LCAiY2FuJ3QgYWxsb2MgYXBwbGUgZGVzY3JpcHRvclxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCWFzYy0+cXVpcmtzID0gcXVpcmtzOworCisJaGlkX3NldF9kcnZkYXRhKGhkZXYsIGFzYyk7CisKKwlyZXQgPSBoaWRfcGFyc2UoaGRldik7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKCZoZGV2LT5kZXYsICJwYXJzZSBmYWlsZWRcbiIpOworCQlnb3RvIGVycl9mcmVlOworCX0KKworCWlmIChxdWlya3MgJiBBUFBMRV9ISURERVYpCisJCWNvbm5lY3RfbWFzayB8PSBISURfQ09OTkVDVF9ISURERVZfRk9SQ0U7CisJaWYgKHF1aXJrcyAmIEFQUExFX0lHTk9SRV9ISURJTlBVVCkKKwkJY29ubmVjdF9tYXNrICY9IH5ISURfQ09OTkVDVF9ISURJTlBVVDsKKworCXJldCA9IGhpZF9od19zdGFydChoZGV2LCBjb25uZWN0X21hc2spOworCWlmIChyZXQpIHsKKwkJZGV2X2VycigmaGRldi0+ZGV2LCAiaHcgc3RhcnQgZmFpbGVkXG4iKTsKKwkJZ290byBlcnJfZnJlZTsKKwl9CisKKwlyZXR1cm4gMDsKK2Vycl9mcmVlOgorCWtmcmVlKGFzYyk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgYXBwbGVfcmVtb3ZlKHN0cnVjdCBoaWRfZGV2aWNlICpoZGV2KQoreworCWhpZF9od19zdG9wKGhkZXYpOworCWtmcmVlKGhpZF9nZXRfZHJ2ZGF0YShoZGV2KSk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGlkX2RldmljZV9pZCBhcHBsZV9kZXZpY2VzW10gPSB7CisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0FQUExFLCBVU0JfREVWSUNFX0lEX0FQUExFX0FUVl9JUkNPTlRST0wpLAorCQkuZHJpdmVyX2RhdGEgPSBBUFBMRV9ISURERVYgfCBBUFBMRV9JR05PUkVfSElESU5QVVQgfSwKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfQVBQTEUsIFVTQl9ERVZJQ0VfSURfQVBQTEVfSVJDT05UUk9MNCksCisJCS5kcml2ZXJfZGF0YSA9IEFQUExFX0hJRERFViB8IEFQUExFX0lHTk9SRV9ISURJTlBVVCB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9BUFBMRSwgVVNCX0RFVklDRV9JRF9BUFBMRV9NSUdIVFlNT1VTRSksCisJCS5kcml2ZXJfZGF0YSA9IEFQUExFX01JR0hUWU1PVVNFIHwgQVBQTEVfSU5WRVJUX0hXSEVFTCB9LAorCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0FQUExFLCBVU0JfREVWSUNFX0lEX0FQUExFX0ZPVU5UQUlOX0FOU0kpLAorCQkuZHJpdmVyX2RhdGEgPSBBUFBMRV9OVU1MT0NLX0VNVUxBVElPTiB8IEFQUExFX0hBU19GTiB8CisJCQlBUFBMRV9JR05PUkVfTU9VU0UgfSwKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfQVBQTEUsIFVTQl9ERVZJQ0VfSURfQVBQTEVfRk9VTlRBSU5fSVNPKSwKKwkJLmRyaXZlcl9kYXRhID0gQVBQTEVfTlVNTE9DS19FTVVMQVRJT04gfCBBUFBMRV9IQVNfRk4gfAorCQkJQVBQTEVfSUdOT1JFX01PVVNFIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0FQUExFLCBVU0JfREVWSUNFX0lEX0FQUExFX0dFWVNFUl9BTlNJKSwKKwkJLmRyaXZlcl9kYXRhID0gQVBQTEVfTlVNTE9DS19FTVVMQVRJT04gfCBBUFBMRV9IQVNfRk4gfAorCQkJQVBQTEVfSUdOT1JFX01PVVNFIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0FQUExFLCBVU0JfREVWSUNFX0lEX0FQUExFX0dFWVNFUl9JU08pLAorCQkuZHJpdmVyX2RhdGEgPSBBUFBMRV9OVU1MT0NLX0VNVUxBVElPTiB8IEFQUExFX0hBU19GTiB8CisJCQlBUFBMRV9JR05PUkVfTU9VU0UgfCBBUFBMRV9JU09fS0VZQk9BUkQgfSwKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfQVBQTEUsIFVTQl9ERVZJQ0VfSURfQVBQTEVfR0VZU0VSX0pJUyksCisJCS5kcml2ZXJfZGF0YSA9IEFQUExFX05VTUxPQ0tfRU1VTEFUSU9OIHwgQVBQTEVfSEFTX0ZOIHwKKwkJCUFQUExFX0lHTk9SRV9NT1VTRSB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9BUFBMRSwgVVNCX0RFVklDRV9JRF9BUFBMRV9HRVlTRVIzX0FOU0kpLAorCQkuZHJpdmVyX2RhdGEgPSBBUFBMRV9OVU1MT0NLX0VNVUxBVElPTiB8IEFQUExFX0hBU19GTiB8CisJCQlBUFBMRV9JR05PUkVfTU9VU0UgfSwKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfQVBQTEUsIFVTQl9ERVZJQ0VfSURfQVBQTEVfR0VZU0VSM19JU08pLAorCQkuZHJpdmVyX2RhdGEgPSBBUFBMRV9OVU1MT0NLX0VNVUxBVElPTiB8IEFQUExFX0hBU19GTiB8CisJCQlBUFBMRV9JR05PUkVfTU9VU0UgfCBBUFBMRV9JU09fS0VZQk9BUkQgfSwKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfQVBQTEUsIFVTQl9ERVZJQ0VfSURfQVBQTEVfR0VZU0VSM19KSVMpLAorCQkuZHJpdmVyX2RhdGEgPSBBUFBMRV9OVU1MT0NLX0VNVUxBVElPTiB8IEFQUExFX0hBU19GTiB8CisJCQlBUFBMRV9JR05PUkVfTU9VU0UgfCBBUFBMRV9SREVTQ19KSVMgfSwKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfQVBQTEUsIFVTQl9ERVZJQ0VfSURfQVBQTEVfR0VZU0VSNF9BTlNJKSwKKwkJLmRyaXZlcl9kYXRhID0gQVBQTEVfTlVNTE9DS19FTVVMQVRJT04gfCBBUFBMRV9IQVNfRk4gfAorCQkJQVBQTEVfSUdOT1JFX01PVVNFIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0FQUExFLCBVU0JfREVWSUNFX0lEX0FQUExFX0dFWVNFUjRfSVNPKSwKKwkJLmRyaXZlcl9kYXRhID0gQVBQTEVfTlVNTE9DS19FTVVMQVRJT04gfCBBUFBMRV9IQVNfRk4gfAorCQkJQVBQTEVfSUdOT1JFX01PVVNFIHwgQVBQTEVfSVNPX0tFWUJPQVJEIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0FQUExFLCBVU0JfREVWSUNFX0lEX0FQUExFX0dFWVNFUjRfSklTKSwKKwkJLmRyaXZlcl9kYXRhID0gQVBQTEVfTlVNTE9DS19FTVVMQVRJT04gfCBBUFBMRV9IQVNfRk4gfAorCQkJQVBQTEVfSUdOT1JFX01PVVNFIHwgQVBQTEVfUkRFU0NfSklTfSwKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfQVBQTEUsIFVTQl9ERVZJQ0VfSURfQVBQTEVfQUxVX0FOU0kpLAorCQkuZHJpdmVyX2RhdGEgPSBBUFBMRV9IQVNfRk4gfSwKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfQVBQTEUsIFVTQl9ERVZJQ0VfSURfQVBQTEVfQUxVX0lTTyksCisJCS5kcml2ZXJfZGF0YSA9IEFQUExFX0hBU19GTiB8IEFQUExFX0lTT19LRVlCT0FSRCB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9BUFBMRSwgVVNCX0RFVklDRV9JRF9BUFBMRV9BTFVfSklTKSwKKwkJLmRyaXZlcl9kYXRhID0gQVBQTEVfSEFTX0ZOIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0FQUExFLCBVU0JfREVWSUNFX0lEX0FQUExFX0dFWVNFUjRfSEZfQU5TSSksCisJCS5kcml2ZXJfZGF0YSA9IEFQUExFX05VTUxPQ0tfRU1VTEFUSU9OIHwgQVBQTEVfSEFTX0ZOIHwKKwkJCUFQUExFX0lHTk9SRV9NT1VTRSB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9BUFBMRSwgVVNCX0RFVklDRV9JRF9BUFBMRV9HRVlTRVI0X0hGX0lTTyksCisJCS5kcml2ZXJfZGF0YSA9IEFQUExFX05VTUxPQ0tfRU1VTEFUSU9OIHwgQVBQTEVfSEFTX0ZOIHwKKwkJCUFQUExFX0lHTk9SRV9NT1VTRSB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9BUFBMRSwgVVNCX0RFVklDRV9JRF9BUFBMRV9HRVlTRVI0X0hGX0pJUyksCisJCS5kcml2ZXJfZGF0YSA9IEFQUExFX05VTUxPQ0tfRU1VTEFUSU9OIHwgQVBQTEVfSEFTX0ZOIHwKKwkJCUFQUExFX0lHTk9SRV9NT1VTRSB8IEFQUExFX1JERVNDX0pJUyB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9BUFBMRSwgVVNCX0RFVklDRV9JRF9BUFBMRV9BTFVfV0lSRUxFU1NfQU5TSSksCisJCS5kcml2ZXJfZGF0YSA9IEFQUExFX05VTUxPQ0tfRU1VTEFUSU9OIHwgQVBQTEVfSEFTX0ZOIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0FQUExFLCBVU0JfREVWSUNFX0lEX0FQUExFX0FMVV9XSVJFTEVTU19JU08pLAorCQkuZHJpdmVyX2RhdGEgPSBBUFBMRV9OVU1MT0NLX0VNVUxBVElPTiB8IEFQUExFX0hBU19GTiB8CisJCQlBUFBMRV9JU09fS0VZQk9BUkQgfSwKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfQVBQTEUsIFVTQl9ERVZJQ0VfSURfQVBQTEVfQUxVX1dJUkVMRVNTX0pJUyksCisJCS5kcml2ZXJfZGF0YSA9IEFQUExFX05VTUxPQ0tfRU1VTEFUSU9OIHwgQVBQTEVfSEFTX0ZOIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0FQUExFLCBVU0JfREVWSUNFX0lEX0FQUExFX1dFTExTUFJJTkdfQU5TSSksCisJCS5kcml2ZXJfZGF0YSA9IEFQUExFX0hBU19GTiB8IEFQUExFX0lHTk9SRV9NT1VTRSB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9BUFBMRSwgVVNCX0RFVklDRV9JRF9BUFBMRV9XRUxMU1BSSU5HX0lTTyksCisJCS5kcml2ZXJfZGF0YSA9IEFQUExFX0hBU19GTiB8IEFQUExFX0lTT19LRVlCT0FSRCB8CisJCQlBUFBMRV9JR05PUkVfTU9VU0UgfSwKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfQVBQTEUsIFVTQl9ERVZJQ0VfSURfQVBQTEVfV0VMTFNQUklOR19KSVMpLAorCQkuZHJpdmVyX2RhdGEgPSBBUFBMRV9IQVNfRk4gfCBBUFBMRV9JR05PUkVfTU9VU0UgfCBBUFBMRV9SREVTQ19KSVMgfSwKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfQVBQTEUsIFVTQl9ERVZJQ0VfSURfQVBQTEVfV0VMTFNQUklORzJfQU5TSSksCisJCS5kcml2ZXJfZGF0YSA9IEFQUExFX0hBU19GTiB8IEFQUExFX0lHTk9SRV9NT1VTRSB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9BUFBMRSwgVVNCX0RFVklDRV9JRF9BUFBMRV9XRUxMU1BSSU5HMl9JU08pLAorCQkuZHJpdmVyX2RhdGEgPSBBUFBMRV9IQVNfRk4gfCBBUFBMRV9JU09fS0VZQk9BUkQgfAorCQkJQVBQTEVfSUdOT1JFX01PVVNFIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0FQUExFLCBVU0JfREVWSUNFX0lEX0FQUExFX1dFTExTUFJJTkcyX0pJUyksCisJCS5kcml2ZXJfZGF0YSA9IEFQUExFX0hBU19GTiB8IEFQUExFX0lHTk9SRV9NT1VTRSB8IEFQUExFX1JERVNDX0pJUyB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9BUFBMRSwgVVNCX0RFVklDRV9JRF9BUFBMRV9GT1VOVEFJTl9UUF9PTkxZKSwKKwkJLmRyaXZlcl9kYXRhID0gQVBQTEVfTlVNTE9DS19FTVVMQVRJT04gfCBBUFBMRV9IQVNfRk4gfAorCQkJQVBQTEVfSUdOT1JFX01PVVNFIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0FQUExFLCBVU0JfREVWSUNFX0lEX0FQUExFX0dFWVNFUjFfVFBfT05MWSksCisJCS5kcml2ZXJfZGF0YSA9IEFQUExFX05VTUxPQ0tfRU1VTEFUSU9OIHwgQVBQTEVfSEFTX0ZOIHwKKwkJCUFQUExFX0lHTk9SRV9NT1VTRSB9LAorCisJLyogQXBwbGUgd2lyZWxlc3MgTWlnaHR5IE1vdXNlICovCisJeyBISURfQkxVRVRPT1RIX0RFVklDRShVU0JfVkVORE9SX0lEX0FQUExFLCAweDAzMGMpLAorCQkuZHJpdmVyX2RhdGEgPSBBUFBMRV9NSUdIVFlNT1VTRSB8IEFQUExFX0lOVkVSVF9IV0hFRUwgfSwKKworCXsgfQorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUoaGlkLCBhcHBsZV9kZXZpY2VzKTsKKworc3RhdGljIHN0cnVjdCBoaWRfZHJpdmVyIGFwcGxlX2RyaXZlciA9IHsKKwkubmFtZSA9ICJhcHBsZSIsCisJLmlkX3RhYmxlID0gYXBwbGVfZGV2aWNlcywKKwkucmVwb3J0X2ZpeHVwID0gYXBwbGVfcmVwb3J0X2ZpeHVwLAorCS5wcm9iZSA9IGFwcGxlX3Byb2JlLAorCS5yZW1vdmUgPSBhcHBsZV9yZW1vdmUsCisJLmV2ZW50ID0gYXBwbGVfZXZlbnQsCisJLmlucHV0X21hcHBpbmcgPSBhcHBsZV9pbnB1dF9tYXBwaW5nLAorCS5pbnB1dF9tYXBwZWQgPSBhcHBsZV9pbnB1dF9tYXBwZWQsCit9OworCitzdGF0aWMgaW50IGFwcGxlX2luaXQodm9pZCkKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gaGlkX3JlZ2lzdGVyX2RyaXZlcigmYXBwbGVfZHJpdmVyKTsKKwlpZiAocmV0KQorCQlwcmludGsoS0VSTl9FUlIgImNhbid0IHJlZ2lzdGVyIGFwcGxlIGRyaXZlclxuIik7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBhcHBsZV9leGl0KHZvaWQpCit7CisJaGlkX3VucmVnaXN0ZXJfZHJpdmVyKCZhcHBsZV9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChhcHBsZV9pbml0KTsKK21vZHVsZV9leGl0KGFwcGxlX2V4aXQpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCitISURfQ09NUEFUX0xPQURfRFJJVkVSKGFwcGxlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaGlkL2hpZC1iZWxraW4uYyBiL2RyaXZlcnMvaGlkL2hpZC1iZWxraW4uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMmM4YTliCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9oaWQvaGlkLWJlbGtpbi5jCkBAIC0wLDAgKzEsMTA1IEBACisvKgorICogIEhJRCBkcml2ZXIgZm9yIHNvbWUgYmVsa2luICJzcGVjaWFsIiBkZXZpY2VzCisgKgorICogIENvcHlyaWdodCAoYykgMTk5OSBBbmRyZWFzIEdhbAorICogIENvcHlyaWdodCAoYykgMjAwMC0yMDA1IFZvanRlY2ggUGF2bGlrIDx2b2p0ZWNoQHN1c2UuY3o+CisgKiAgQ29weXJpZ2h0IChjKSAyMDA1IE1pY2hhZWwgSGFib3VzdGFrIDxtaWtlLUBjaW5jaS5yci5jb20+IGZvciBDb25jZXB0MiwgSW5jCisgKiAgQ29weXJpZ2h0IChjKSAyMDA2LTIwMDcgSmlyaSBLb3NpbmEKKyAqICBDb3B5cmlnaHQgKGMpIDIwMDcgUGF1bCBXYWxtc2xleQorICogIENvcHlyaWdodCAoYykgMjAwOCBKaXJpIFNsYWJ5CisgKi8KKworLyoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorICogU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKQorICogYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2hpZC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorCisjaW5jbHVkZSAiaGlkLWlkcy5oIgorCisjZGVmaW5lIEJFTEtJTl9ISURERVYJMHgwMQorI2RlZmluZSBCRUxLSU5fV0tCRAkweDAyCisKKyNkZWZpbmUgYmVsa2luX21hcF9rZXlfY2xlYXIoYykJaGlkX21hcF91c2FnZV9jbGVhcihoaSwgdXNhZ2UsIGJpdCwgbWF4LCBcCisJCQkJCUVWX0tFWSwgKGMpKQorc3RhdGljIGludCBiZWxraW5faW5wdXRfbWFwcGluZyhzdHJ1Y3QgaGlkX2RldmljZSAqaGRldiwgc3RydWN0IGhpZF9pbnB1dCAqaGksCisJCXN0cnVjdCBoaWRfZmllbGQgKmZpZWxkLCBzdHJ1Y3QgaGlkX3VzYWdlICp1c2FnZSwKKwkJdW5zaWduZWQgbG9uZyAqKmJpdCwgaW50ICptYXgpCit7CisJdW5zaWduZWQgbG9uZyBxdWlya3MgPSAodW5zaWduZWQgbG9uZyloaWRfZ2V0X2RydmRhdGEoaGRldik7CisKKwlpZiAoKHVzYWdlLT5oaWQgJiBISURfVVNBR0VfUEFHRSkgIT0gSElEX1VQX0NPTlNVTUVSIHx8CisJCQkhKHF1aXJrcyAmIEJFTEtJTl9XS0JEKSkKKwkJcmV0dXJuIDA7CisKKwlzd2l0Y2ggKHVzYWdlLT5oaWQgJiBISURfVVNBR0UpIHsKKwljYXNlIDB4MDNhOiBiZWxraW5fbWFwX2tleV9jbGVhcihLRVlfU09VTkQpOwkJYnJlYWs7CisJY2FzZSAweDAzYjogYmVsa2luX21hcF9rZXlfY2xlYXIoS0VZX0NBTUVSQSk7CQlicmVhazsKKwljYXNlIDB4MDNjOiBiZWxraW5fbWFwX2tleV9jbGVhcihLRVlfRE9DVU1FTlRTKTsJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIDA7CisJfQorCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IGJlbGtpbl9wcm9iZShzdHJ1Y3QgaGlkX2RldmljZSAqaGRldiwgY29uc3Qgc3RydWN0IGhpZF9kZXZpY2VfaWQgKmlkKQoreworCXVuc2lnbmVkIGxvbmcgcXVpcmtzID0gaWQtPmRyaXZlcl9kYXRhOworCWludCByZXQ7CisKKwloaWRfc2V0X2RydmRhdGEoaGRldiwgKHZvaWQgKilxdWlya3MpOworCisJcmV0ID0gaGlkX3BhcnNlKGhkZXYpOworCWlmIChyZXQpIHsKKwkJZGV2X2VycigmaGRldi0+ZGV2LCAicGFyc2UgZmFpbGVkXG4iKTsKKwkJZ290byBlcnJfZnJlZTsKKwl9CisKKwlyZXQgPSBoaWRfaHdfc3RhcnQoaGRldiwgSElEX0NPTk5FQ1RfREVGQVVMVCB8CisJCSgocXVpcmtzICYgQkVMS0lOX0hJRERFVikgPyBISURfQ09OTkVDVF9ISURERVZfRk9SQ0UgOiAwKSk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKCZoZGV2LT5kZXYsICJodyBzdGFydCBmYWlsZWRcbiIpOworCQlnb3RvIGVycl9mcmVlOworCX0KKworCXJldHVybiAwOworZXJyX2ZyZWU6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBoaWRfZGV2aWNlX2lkIGJlbGtpbl9kZXZpY2VzW10gPSB7CisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0JFTEtJTiwgVVNCX0RFVklDRV9JRF9GTElQX0tWTSksCisJCS5kcml2ZXJfZGF0YSA9IEJFTEtJTl9ISURERVYgfSwKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfTEFCVEVDLCBVU0JfREVWSUNFX0lEX0xBQlRFQ19XSVJFTEVTU19LRVlCT0FSRCksCisJCS5kcml2ZXJfZGF0YSA9IEJFTEtJTl9XS0JEIH0sCisJeyB9Cit9OworTU9EVUxFX0RFVklDRV9UQUJMRShoaWQsIGJlbGtpbl9kZXZpY2VzKTsKKworc3RhdGljIHN0cnVjdCBoaWRfZHJpdmVyIGJlbGtpbl9kcml2ZXIgPSB7CisJLm5hbWUgPSAiYmVsa2luIiwKKwkuaWRfdGFibGUgPSBiZWxraW5fZGV2aWNlcywKKwkuaW5wdXRfbWFwcGluZyA9IGJlbGtpbl9pbnB1dF9tYXBwaW5nLAorCS5wcm9iZSA9IGJlbGtpbl9wcm9iZSwKK307CisKK3N0YXRpYyBpbnQgYmVsa2luX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gaGlkX3JlZ2lzdGVyX2RyaXZlcigmYmVsa2luX2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIGJlbGtpbl9leGl0KHZvaWQpCit7CisJaGlkX3VucmVnaXN0ZXJfZHJpdmVyKCZiZWxraW5fZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQoYmVsa2luX2luaXQpOworbW9kdWxlX2V4aXQoYmVsa2luX2V4aXQpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCitISURfQ09NUEFUX0xPQURfRFJJVkVSKGJlbGtpbik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2hpZC9oaWQtYnJpZ2h0LmMgYi9kcml2ZXJzL2hpZC9oaWQtYnJpZ2h0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzg1MTdhMQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvaGlkL2hpZC1icmlnaHQuYwpAQCAtMCwwICsxLDcxIEBACisvKgorICogIEhJRCBkcml2ZXIgZm9yIHNvbWUgYnJpZ2h0ICJzcGVjaWFsIiBkZXZpY2VzCisgKgorICogIENvcHlyaWdodCAoYykgMjAwOCBNYXVybyBDYXJ2YWxobyBDaGVoYWIgPG1jaGVoYWJAcmVkaGF0LmNvbT4KKyAqCisgKiBCYXNlZCBvbiBoaWQtZGVsbCBkcml2ZXIKKyAqLworCisvKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgKiBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pCisgKiBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvaGlkLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisKKyNpbmNsdWRlICJoaWQtaWRzLmgiCisKK3N0YXRpYyBpbnQgYnJpZ2h0X3Byb2JlKHN0cnVjdCBoaWRfZGV2aWNlICpoZGV2LCBjb25zdCBzdHJ1Y3QgaGlkX2RldmljZV9pZCAqaWQpCit7CisJaW50IHJldDsKKworCXJldCA9IGhpZF9wYXJzZShoZGV2KTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoJmhkZXYtPmRldiwgInBhcnNlIGZhaWxlZFxuIik7CisJCWdvdG8gZXJyX2ZyZWU7CisJfQorCisJcmV0ID0gaGlkX2h3X3N0YXJ0KGhkZXYsIEhJRF9DT05ORUNUX0RFRkFVTFQpOworCWlmIChyZXQpIHsKKwkJZGV2X2VycigmaGRldi0+ZGV2LCAiaHcgc3RhcnQgZmFpbGVkXG4iKTsKKwkJZ290byBlcnJfZnJlZTsKKwl9CisKKwl1c2JoaWRfc2V0X2xlZHMoaGRldik7CisKKwlyZXR1cm4gMDsKK2Vycl9mcmVlOgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGlkX2RldmljZV9pZCBicmlnaHRfZGV2aWNlc1tdID0geworCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9CUklHSFQsIFVTQl9ERVZJQ0VfSURfQlJJR0hUX0FCTlQyKSB9LAorCXsgfQorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUoaGlkLCBicmlnaHRfZGV2aWNlcyk7CisKK3N0YXRpYyBzdHJ1Y3QgaGlkX2RyaXZlciBicmlnaHRfZHJpdmVyID0geworCS5uYW1lID0gImJyaWdodCIsCisJLmlkX3RhYmxlID0gYnJpZ2h0X2RldmljZXMsCisJLnByb2JlID0gYnJpZ2h0X3Byb2JlLAorfTsKKworc3RhdGljIGludCBicmlnaHRfaW5pdCh2b2lkKQoreworCXJldHVybiBoaWRfcmVnaXN0ZXJfZHJpdmVyKCZicmlnaHRfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgYnJpZ2h0X2V4aXQodm9pZCkKK3sKKwloaWRfdW5yZWdpc3Rlcl9kcml2ZXIoJmJyaWdodF9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChicmlnaHRfaW5pdCk7Cittb2R1bGVfZXhpdChicmlnaHRfZXhpdCk7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKK0hJRF9DT01QQVRfTE9BRF9EUklWRVIoYnJpZ2h0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaGlkL2hpZC1jaGVycnkuYyBiL2RyaXZlcnMvaGlkL2hpZC1jaGVycnkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iODMzYjk3Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9oaWQvaGlkLWNoZXJyeS5jCkBAIC0wLDAgKzEsODcgQEAKKy8qCisgKiAgSElEIGRyaXZlciBmb3Igc29tZSBjaGVycnkgInNwZWNpYWwiIGRldmljZXMKKyAqCisgKiAgQ29weXJpZ2h0IChjKSAxOTk5IEFuZHJlYXMgR2FsCisgKiAgQ29weXJpZ2h0IChjKSAyMDAwLTIwMDUgVm9qdGVjaCBQYXZsaWsgPHZvanRlY2hAc3VzZS5jej4KKyAqICBDb3B5cmlnaHQgKGMpIDIwMDUgTWljaGFlbCBIYWJvdXN0YWsgPG1pa2UtQGNpbmNpLnJyLmNvbT4gZm9yIENvbmNlcHQyLCBJbmMKKyAqICBDb3B5cmlnaHQgKGMpIDIwMDYtMjAwNyBKaXJpIEtvc2luYQorICogIENvcHlyaWdodCAoYykgMjAwNyBQYXVsIFdhbG1zbGV5CisgKiAgQ29weXJpZ2h0IChjKSAyMDA4IEppcmkgU2xhYnkKKyAqLworCisvKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgKiBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pCisgKiBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvaGlkLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisKKyNpbmNsdWRlICJoaWQtaWRzLmgiCisKKy8qCisgKiBDaGVycnkgQ3ltb3Rpb24ga2V5Ym9hcmQgaGF2ZSBhbiBpbnZhbGlkIEhJRCByZXBvcnQgZGVzY3JpcHRvciwKKyAqIHRoYXQgbmVlZHMgZml4aW5nIGJlZm9yZSB3ZSBjYW4gcGFyc2UgaXQuCisgKi8KK3N0YXRpYyB2b2lkIGNoX3JlcG9ydF9maXh1cChzdHJ1Y3QgaGlkX2RldmljZSAqaGRldiwgX191OCAqcmRlc2MsCisJCXVuc2lnbmVkIGludCByc2l6ZSkKK3sKKwlpZiAocnNpemUgPj0gMTcgJiYgcmRlc2NbMTFdID09IDB4M2MgJiYgcmRlc2NbMTJdID09IDB4MDIpIHsKKwkJZGV2X2luZm8oJmhkZXYtPmRldiwgImZpeGluZyB1cCBDaGVycnkgQ3ltb3Rpb24gcmVwb3J0ICIKKwkJCQkiZGVzY3JpcHRvclxuIik7CisJCXJkZXNjWzExXSA9IHJkZXNjWzE2XSA9IDB4ZmY7CisJCXJkZXNjWzEyXSA9IHJkZXNjWzE3XSA9IDB4MDM7CisJfQorfQorCisjZGVmaW5lIGNoX21hcF9rZXlfY2xlYXIoYykJaGlkX21hcF91c2FnZV9jbGVhcihoaSwgdXNhZ2UsIGJpdCwgbWF4LCBcCisJCQkJCUVWX0tFWSwgKGMpKQorc3RhdGljIGludCBjaF9pbnB1dF9tYXBwaW5nKHN0cnVjdCBoaWRfZGV2aWNlICpoZGV2LCBzdHJ1Y3QgaGlkX2lucHV0ICpoaSwKKwkJc3RydWN0IGhpZF9maWVsZCAqZmllbGQsIHN0cnVjdCBoaWRfdXNhZ2UgKnVzYWdlLAorCQl1bnNpZ25lZCBsb25nICoqYml0LCBpbnQgKm1heCkKK3sKKwlpZiAoKHVzYWdlLT5oaWQgJiBISURfVVNBR0VfUEFHRSkgIT0gSElEX1VQX0NPTlNVTUVSKQorCQlyZXR1cm4gMDsKKworCXN3aXRjaCAodXNhZ2UtPmhpZCAmIEhJRF9VU0FHRSkgeworCWNhc2UgMHgzMDE6IGNoX21hcF9rZXlfY2xlYXIoS0VZX1BST0cxKTsJYnJlYWs7CisJY2FzZSAweDMwMjogY2hfbWFwX2tleV9jbGVhcihLRVlfUFJPRzIpOwlicmVhazsKKwljYXNlIDB4MzAzOiBjaF9tYXBfa2V5X2NsZWFyKEtFWV9QUk9HMyk7CWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAwOworCX0KKworCXJldHVybiAxOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGhpZF9kZXZpY2VfaWQgY2hfZGV2aWNlc1tdID0geworCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9DSEVSUlksIFVTQl9ERVZJQ0VfSURfQ0hFUlJZX0NZTU9USU9OKSB9LAorCXsgfQorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUoaGlkLCBjaF9kZXZpY2VzKTsKKworc3RhdGljIHN0cnVjdCBoaWRfZHJpdmVyIGNoX2RyaXZlciA9IHsKKwkubmFtZSA9ICJjaGVycnkiLAorCS5pZF90YWJsZSA9IGNoX2RldmljZXMsCisJLnJlcG9ydF9maXh1cCA9IGNoX3JlcG9ydF9maXh1cCwKKwkuaW5wdXRfbWFwcGluZyA9IGNoX2lucHV0X21hcHBpbmcsCit9OworCitzdGF0aWMgaW50IGNoX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gaGlkX3JlZ2lzdGVyX2RyaXZlcigmY2hfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgY2hfZXhpdCh2b2lkKQoreworCWhpZF91bnJlZ2lzdGVyX2RyaXZlcigmY2hfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQoY2hfaW5pdCk7Cittb2R1bGVfZXhpdChjaF9leGl0KTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKworSElEX0NPTVBBVF9MT0FEX0RSSVZFUihjaGVycnkpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9oaWQvaGlkLWNoaWNvbnkuYyBiL2RyaXZlcnMvaGlkL2hpZC1jaGljb255LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTU0ZDQwOQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvaGlkL2hpZC1jaGljb255LmMKQEAgLTAsMCArMSw4MCBAQAorLyoKKyAqICBISUQgZHJpdmVyIGZvciBzb21lIGNoaWNvbnkgInNwZWNpYWwiIGRldmljZXMKKyAqCisgKiAgQ29weXJpZ2h0IChjKSAxOTk5IEFuZHJlYXMgR2FsCisgKiAgQ29weXJpZ2h0IChjKSAyMDAwLTIwMDUgVm9qdGVjaCBQYXZsaWsgPHZvanRlY2hAc3VzZS5jej4KKyAqICBDb3B5cmlnaHQgKGMpIDIwMDUgTWljaGFlbCBIYWJvdXN0YWsgPG1pa2UtQGNpbmNpLnJyLmNvbT4gZm9yIENvbmNlcHQyLCBJbmMKKyAqICBDb3B5cmlnaHQgKGMpIDIwMDYtMjAwNyBKaXJpIEtvc2luYQorICogIENvcHlyaWdodCAoYykgMjAwNyBQYXVsIFdhbG1zbGV5CisgKiAgQ29weXJpZ2h0IChjKSAyMDA4IEppcmkgU2xhYnkKKyAqLworCisvKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgKiBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pCisgKiBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KKyNpbmNsdWRlIDxsaW51eC9oaWQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKworI2luY2x1ZGUgImhpZC1pZHMuaCIKKworI2RlZmluZSBjaF9tYXBfa2V5X2NsZWFyKGMpCWhpZF9tYXBfdXNhZ2VfY2xlYXIoaGksIHVzYWdlLCBiaXQsIG1heCwgXAorCQkJCQlFVl9LRVksIChjKSkKK3N0YXRpYyBpbnQgY2hfaW5wdXRfbWFwcGluZyhzdHJ1Y3QgaGlkX2RldmljZSAqaGRldiwgc3RydWN0IGhpZF9pbnB1dCAqaGksCisJCXN0cnVjdCBoaWRfZmllbGQgKmZpZWxkLCBzdHJ1Y3QgaGlkX3VzYWdlICp1c2FnZSwKKwkJdW5zaWduZWQgbG9uZyAqKmJpdCwgaW50ICptYXgpCit7CisJaWYgKCh1c2FnZS0+aGlkICYgSElEX1VTQUdFX1BBR0UpICE9IEhJRF9VUF9NU1ZFTkRPUikKKwkJcmV0dXJuIDA7CisKKwlzZXRfYml0KEVWX1JFUCwgaGktPmlucHV0LT5ldmJpdCk7CisJc3dpdGNoICh1c2FnZS0+aGlkICYgSElEX1VTQUdFKSB7CisJY2FzZSAweGZmMDE6IGNoX21hcF9rZXlfY2xlYXIoQlROXzEpOwlicmVhazsKKwljYXNlIDB4ZmYwMjogY2hfbWFwX2tleV9jbGVhcihCVE5fMik7CWJyZWFrOworCWNhc2UgMHhmZjAzOiBjaF9tYXBfa2V5X2NsZWFyKEJUTl8zKTsJYnJlYWs7CisJY2FzZSAweGZmMDQ6IGNoX21hcF9rZXlfY2xlYXIoQlROXzQpOwlicmVhazsKKwljYXNlIDB4ZmYwNTogY2hfbWFwX2tleV9jbGVhcihCVE5fNSk7CWJyZWFrOworCWNhc2UgMHhmZjA2OiBjaF9tYXBfa2V5X2NsZWFyKEJUTl82KTsJYnJlYWs7CisJY2FzZSAweGZmMDc6IGNoX21hcF9rZXlfY2xlYXIoQlROXzcpOwlicmVhazsKKwljYXNlIDB4ZmYwODogY2hfbWFwX2tleV9jbGVhcihCVE5fOCk7CWJyZWFrOworCWNhc2UgMHhmZjA5OiBjaF9tYXBfa2V5X2NsZWFyKEJUTl85KTsJYnJlYWs7CisJY2FzZSAweGZmMGE6IGNoX21hcF9rZXlfY2xlYXIoQlROX0EpOwlicmVhazsKKwljYXNlIDB4ZmYwYjogY2hfbWFwX2tleV9jbGVhcihCVE5fQik7CWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAwOworCX0KKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBoaWRfZGV2aWNlX2lkIGNoX2RldmljZXNbXSA9IHsKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfQ0hJQ09OWSwgVVNCX0RFVklDRV9JRF9DSElDT05ZX1RBQ1RJQ0FMX1BBRCkgfSwKKwl7IH0KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKGhpZCwgY2hfZGV2aWNlcyk7CisKK3N0YXRpYyBzdHJ1Y3QgaGlkX2RyaXZlciBjaF9kcml2ZXIgPSB7CisJLm5hbWUgPSAiY2hpY29ueSIsCisJLmlkX3RhYmxlID0gY2hfZGV2aWNlcywKKwkuaW5wdXRfbWFwcGluZyA9IGNoX2lucHV0X21hcHBpbmcsCit9OworCitzdGF0aWMgaW50IGNoX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gaGlkX3JlZ2lzdGVyX2RyaXZlcigmY2hfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgY2hfZXhpdCh2b2lkKQoreworCWhpZF91bnJlZ2lzdGVyX2RyaXZlcigmY2hfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQoY2hfaW5pdCk7Cittb2R1bGVfZXhpdChjaF9leGl0KTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKworSElEX0NPTVBBVF9MT0FEX0RSSVZFUihjaGljb255KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaGlkL2hpZC1jb3JlLmMgYi9kcml2ZXJzL2hpZC9oaWQtY29yZS5jCmluZGV4IDQyNmFjNWEuLjcyMWEzNmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaGlkL2hpZC1jb3JlLmMKKysrIGIvZHJpdmVycy9oaWQvaGlkLWNvcmUuYwpAQCAtMzMsNiArMzMsOCBAQAogI2luY2x1ZGUgPGxpbnV4L2hpZC1kZWJ1Zy5oPgogI2luY2x1ZGUgPGxpbnV4L2hpZHJhdy5oPgogCisjaW5jbHVkZSAiaGlkLWlkcy5oIgorCiAvKgogICogVmVyc2lvbiBJbmZvcm1hdGlvbgogICovCkBAIC0yNjgsOSArMjcwLDkgQEAKIHN0YXRpYyB1MzIgaXRlbV91ZGF0YShzdHJ1Y3QgaGlkX2l0ZW0gKml0ZW0pCiB7CiAJc3dpdGNoIChpdGVtLT5zaXplKSB7Ci0JCWNhc2UgMTogcmV0dXJuIGl0ZW0tPmRhdGEudTg7Ci0JCWNhc2UgMjogcmV0dXJuIGl0ZW0tPmRhdGEudTE2OwotCQljYXNlIDQ6IHJldHVybiBpdGVtLT5kYXRhLnUzMjsKKwljYXNlIDE6IHJldHVybiBpdGVtLT5kYXRhLnU4OworCWNhc2UgMjogcmV0dXJuIGl0ZW0tPmRhdGEudTE2OworCWNhc2UgNDogcmV0dXJuIGl0ZW0tPmRhdGEudTMyOwogCX0KIAlyZXR1cm4gMDsKIH0KQEAgLTI3OCw5ICsyODAsOSBAQAogc3RhdGljIHMzMiBpdGVtX3NkYXRhKHN0cnVjdCBoaWRfaXRlbSAqaXRlbSkKIHsKIAlzd2l0Y2ggKGl0ZW0tPnNpemUpIHsKLQkJY2FzZSAxOiByZXR1cm4gaXRlbS0+ZGF0YS5zODsKLQkJY2FzZSAyOiByZXR1cm4gaXRlbS0+ZGF0YS5zMTY7Ci0JCWNhc2UgNDogcmV0dXJuIGl0ZW0tPmRhdGEuczMyOworCWNhc2UgMTogcmV0dXJuIGl0ZW0tPmRhdGEuczg7CisJY2FzZSAyOiByZXR1cm4gaXRlbS0+ZGF0YS5zMTY7CisJY2FzZSA0OiByZXR1cm4gaXRlbS0+ZGF0YS5zMzI7CiAJfQogCXJldHVybiAwOwogfQpAQCAtMjkyLDg3ICsyOTQsOTEgQEAKIHN0YXRpYyBpbnQgaGlkX3BhcnNlcl9nbG9iYWwoc3RydWN0IGhpZF9wYXJzZXIgKnBhcnNlciwgc3RydWN0IGhpZF9pdGVtICppdGVtKQogewogCXN3aXRjaCAoaXRlbS0+dGFnKSB7CisJY2FzZSBISURfR0xPQkFMX0lURU1fVEFHX1BVU0g6CiAKLQkJY2FzZSBISURfR0xPQkFMX0lURU1fVEFHX1BVU0g6Ci0KLQkJCWlmIChwYXJzZXItPmdsb2JhbF9zdGFja19wdHIgPT0gSElEX0dMT0JBTF9TVEFDS19TSVpFKSB7Ci0JCQkJZGJnX2hpZCgiZ2xvYmFsIGVudmlyb21lbnQgc3RhY2sgb3ZlcmZsb3dcbiIpOwotCQkJCXJldHVybiAtMTsKLQkJCX0KLQotCQkJbWVtY3B5KHBhcnNlci0+Z2xvYmFsX3N0YWNrICsgcGFyc2VyLT5nbG9iYWxfc3RhY2tfcHRyKyssCi0JCQkJJnBhcnNlci0+Z2xvYmFsLCBzaXplb2Yoc3RydWN0IGhpZF9nbG9iYWwpKTsKLQkJCXJldHVybiAwOwotCi0JCWNhc2UgSElEX0dMT0JBTF9JVEVNX1RBR19QT1A6Ci0KLQkJCWlmICghcGFyc2VyLT5nbG9iYWxfc3RhY2tfcHRyKSB7Ci0JCQkJZGJnX2hpZCgiZ2xvYmFsIGVudmlyb21lbnQgc3RhY2sgdW5kZXJmbG93XG4iKTsKLQkJCQlyZXR1cm4gLTE7Ci0JCQl9Ci0KLQkJCW1lbWNweSgmcGFyc2VyLT5nbG9iYWwsIHBhcnNlci0+Z2xvYmFsX3N0YWNrICsgLS1wYXJzZXItPmdsb2JhbF9zdGFja19wdHIsCi0JCQkJc2l6ZW9mKHN0cnVjdCBoaWRfZ2xvYmFsKSk7Ci0JCQlyZXR1cm4gMDsKLQotCQljYXNlIEhJRF9HTE9CQUxfSVRFTV9UQUdfVVNBR0VfUEFHRToKLQkJCXBhcnNlci0+Z2xvYmFsLnVzYWdlX3BhZ2UgPSBpdGVtX3VkYXRhKGl0ZW0pOwotCQkJcmV0dXJuIDA7Ci0KLQkJY2FzZSBISURfR0xPQkFMX0lURU1fVEFHX0xPR0lDQUxfTUlOSU1VTToKLQkJCXBhcnNlci0+Z2xvYmFsLmxvZ2ljYWxfbWluaW11bSA9IGl0ZW1fc2RhdGEoaXRlbSk7Ci0JCQlyZXR1cm4gMDsKLQotCQljYXNlIEhJRF9HTE9CQUxfSVRFTV9UQUdfTE9HSUNBTF9NQVhJTVVNOgotCQkJaWYgKHBhcnNlci0+Z2xvYmFsLmxvZ2ljYWxfbWluaW11bSA8IDApCi0JCQkJcGFyc2VyLT5nbG9iYWwubG9naWNhbF9tYXhpbXVtID0gaXRlbV9zZGF0YShpdGVtKTsKLQkJCWVsc2UKLQkJCQlwYXJzZXItPmdsb2JhbC5sb2dpY2FsX21heGltdW0gPSBpdGVtX3VkYXRhKGl0ZW0pOwotCQkJcmV0dXJuIDA7Ci0KLQkJY2FzZSBISURfR0xPQkFMX0lURU1fVEFHX1BIWVNJQ0FMX01JTklNVU06Ci0JCQlwYXJzZXItPmdsb2JhbC5waHlzaWNhbF9taW5pbXVtID0gaXRlbV9zZGF0YShpdGVtKTsKLQkJCXJldHVybiAwOwotCi0JCWNhc2UgSElEX0dMT0JBTF9JVEVNX1RBR19QSFlTSUNBTF9NQVhJTVVNOgotCQkJaWYgKHBhcnNlci0+Z2xvYmFsLnBoeXNpY2FsX21pbmltdW0gPCAwKQotCQkJCXBhcnNlci0+Z2xvYmFsLnBoeXNpY2FsX21heGltdW0gPSBpdGVtX3NkYXRhKGl0ZW0pOwotCQkJZWxzZQotCQkJCXBhcnNlci0+Z2xvYmFsLnBoeXNpY2FsX21heGltdW0gPSBpdGVtX3VkYXRhKGl0ZW0pOwotCQkJcmV0dXJuIDA7Ci0KLQkJY2FzZSBISURfR0xPQkFMX0lURU1fVEFHX1VOSVRfRVhQT05FTlQ6Ci0JCQlwYXJzZXItPmdsb2JhbC51bml0X2V4cG9uZW50ID0gaXRlbV9zZGF0YShpdGVtKTsKLQkJCXJldHVybiAwOwotCi0JCWNhc2UgSElEX0dMT0JBTF9JVEVNX1RBR19VTklUOgotCQkJcGFyc2VyLT5nbG9iYWwudW5pdCA9IGl0ZW1fdWRhdGEoaXRlbSk7Ci0JCQlyZXR1cm4gMDsKLQotCQljYXNlIEhJRF9HTE9CQUxfSVRFTV9UQUdfUkVQT1JUX1NJWkU6Ci0JCQlpZiAoKHBhcnNlci0+Z2xvYmFsLnJlcG9ydF9zaXplID0gaXRlbV91ZGF0YShpdGVtKSkgPiAzMikgewotCQkJCWRiZ19oaWQoImludmFsaWQgcmVwb3J0X3NpemUgJWRcbiIsIHBhcnNlci0+Z2xvYmFsLnJlcG9ydF9zaXplKTsKLQkJCQlyZXR1cm4gLTE7Ci0JCQl9Ci0JCQlyZXR1cm4gMDsKLQotCQljYXNlIEhJRF9HTE9CQUxfSVRFTV9UQUdfUkVQT1JUX0NPVU5UOgotCQkJaWYgKChwYXJzZXItPmdsb2JhbC5yZXBvcnRfY291bnQgPSBpdGVtX3VkYXRhKGl0ZW0pKSA+IEhJRF9NQVhfVVNBR0VTKSB7Ci0JCQkJZGJnX2hpZCgiaW52YWxpZCByZXBvcnRfY291bnQgJWRcbiIsIHBhcnNlci0+Z2xvYmFsLnJlcG9ydF9jb3VudCk7Ci0JCQkJcmV0dXJuIC0xOwotCQkJfQotCQkJcmV0dXJuIDA7Ci0KLQkJY2FzZSBISURfR0xPQkFMX0lURU1fVEFHX1JFUE9SVF9JRDoKLQkJCWlmICgocGFyc2VyLT5nbG9iYWwucmVwb3J0X2lkID0gaXRlbV91ZGF0YShpdGVtKSkgPT0gMCkgewotCQkJCWRiZ19oaWQoInJlcG9ydF9pZCAwIGlzIGludmFsaWRcbiIpOwotCQkJCXJldHVybiAtMTsKLQkJCX0KLQkJCXJldHVybiAwOwotCi0JCWRlZmF1bHQ6Ci0JCQlkYmdfaGlkKCJ1bmtub3duIGdsb2JhbCB0YWcgMHgleFxuIiwgaXRlbS0+dGFnKTsKKwkJaWYgKHBhcnNlci0+Z2xvYmFsX3N0YWNrX3B0ciA9PSBISURfR0xPQkFMX1NUQUNLX1NJWkUpIHsKKwkJCWRiZ19oaWQoImdsb2JhbCBlbnZpcm9tZW50IHN0YWNrIG92ZXJmbG93XG4iKTsKIAkJCXJldHVybiAtMTsKKwkJfQorCisJCW1lbWNweShwYXJzZXItPmdsb2JhbF9zdGFjayArIHBhcnNlci0+Z2xvYmFsX3N0YWNrX3B0cisrLAorCQkJJnBhcnNlci0+Z2xvYmFsLCBzaXplb2Yoc3RydWN0IGhpZF9nbG9iYWwpKTsKKwkJcmV0dXJuIDA7CisKKwljYXNlIEhJRF9HTE9CQUxfSVRFTV9UQUdfUE9QOgorCisJCWlmICghcGFyc2VyLT5nbG9iYWxfc3RhY2tfcHRyKSB7CisJCQlkYmdfaGlkKCJnbG9iYWwgZW52aXJvbWVudCBzdGFjayB1bmRlcmZsb3dcbiIpOworCQkJcmV0dXJuIC0xOworCQl9CisKKwkJbWVtY3B5KCZwYXJzZXItPmdsb2JhbCwgcGFyc2VyLT5nbG9iYWxfc3RhY2sgKworCQkJLS1wYXJzZXItPmdsb2JhbF9zdGFja19wdHIsIHNpemVvZihzdHJ1Y3QgaGlkX2dsb2JhbCkpOworCQlyZXR1cm4gMDsKKworCWNhc2UgSElEX0dMT0JBTF9JVEVNX1RBR19VU0FHRV9QQUdFOgorCQlwYXJzZXItPmdsb2JhbC51c2FnZV9wYWdlID0gaXRlbV91ZGF0YShpdGVtKTsKKwkJcmV0dXJuIDA7CisKKwljYXNlIEhJRF9HTE9CQUxfSVRFTV9UQUdfTE9HSUNBTF9NSU5JTVVNOgorCQlwYXJzZXItPmdsb2JhbC5sb2dpY2FsX21pbmltdW0gPSBpdGVtX3NkYXRhKGl0ZW0pOworCQlyZXR1cm4gMDsKKworCWNhc2UgSElEX0dMT0JBTF9JVEVNX1RBR19MT0dJQ0FMX01BWElNVU06CisJCWlmIChwYXJzZXItPmdsb2JhbC5sb2dpY2FsX21pbmltdW0gPCAwKQorCQkJcGFyc2VyLT5nbG9iYWwubG9naWNhbF9tYXhpbXVtID0gaXRlbV9zZGF0YShpdGVtKTsKKwkJZWxzZQorCQkJcGFyc2VyLT5nbG9iYWwubG9naWNhbF9tYXhpbXVtID0gaXRlbV91ZGF0YShpdGVtKTsKKwkJcmV0dXJuIDA7CisKKwljYXNlIEhJRF9HTE9CQUxfSVRFTV9UQUdfUEhZU0lDQUxfTUlOSU1VTToKKwkJcGFyc2VyLT5nbG9iYWwucGh5c2ljYWxfbWluaW11bSA9IGl0ZW1fc2RhdGEoaXRlbSk7CisJCXJldHVybiAwOworCisJY2FzZSBISURfR0xPQkFMX0lURU1fVEFHX1BIWVNJQ0FMX01BWElNVU06CisJCWlmIChwYXJzZXItPmdsb2JhbC5waHlzaWNhbF9taW5pbXVtIDwgMCkKKwkJCXBhcnNlci0+Z2xvYmFsLnBoeXNpY2FsX21heGltdW0gPSBpdGVtX3NkYXRhKGl0ZW0pOworCQllbHNlCisJCQlwYXJzZXItPmdsb2JhbC5waHlzaWNhbF9tYXhpbXVtID0gaXRlbV91ZGF0YShpdGVtKTsKKwkJcmV0dXJuIDA7CisKKwljYXNlIEhJRF9HTE9CQUxfSVRFTV9UQUdfVU5JVF9FWFBPTkVOVDoKKwkJcGFyc2VyLT5nbG9iYWwudW5pdF9leHBvbmVudCA9IGl0ZW1fc2RhdGEoaXRlbSk7CisJCXJldHVybiAwOworCisJY2FzZSBISURfR0xPQkFMX0lURU1fVEFHX1VOSVQ6CisJCXBhcnNlci0+Z2xvYmFsLnVuaXQgPSBpdGVtX3VkYXRhKGl0ZW0pOworCQlyZXR1cm4gMDsKKworCWNhc2UgSElEX0dMT0JBTF9JVEVNX1RBR19SRVBPUlRfU0laRToKKwkJcGFyc2VyLT5nbG9iYWwucmVwb3J0X3NpemUgPSBpdGVtX3VkYXRhKGl0ZW0pOworCQlpZiAocGFyc2VyLT5nbG9iYWwucmVwb3J0X3NpemUgPiAzMikgeworCQkJZGJnX2hpZCgiaW52YWxpZCByZXBvcnRfc2l6ZSAlZFxuIiwKKwkJCQkJcGFyc2VyLT5nbG9iYWwucmVwb3J0X3NpemUpOworCQkJcmV0dXJuIC0xOworCQl9CisJCXJldHVybiAwOworCisJY2FzZSBISURfR0xPQkFMX0lURU1fVEFHX1JFUE9SVF9DT1VOVDoKKwkJcGFyc2VyLT5nbG9iYWwucmVwb3J0X2NvdW50ID0gaXRlbV91ZGF0YShpdGVtKTsKKwkJaWYgKHBhcnNlci0+Z2xvYmFsLnJlcG9ydF9jb3VudCA+IEhJRF9NQVhfVVNBR0VTKSB7CisJCQlkYmdfaGlkKCJpbnZhbGlkIHJlcG9ydF9jb3VudCAlZFxuIiwKKwkJCQkJcGFyc2VyLT5nbG9iYWwucmVwb3J0X2NvdW50KTsKKwkJCXJldHVybiAtMTsKKwkJfQorCQlyZXR1cm4gMDsKKworCWNhc2UgSElEX0dMT0JBTF9JVEVNX1RBR19SRVBPUlRfSUQ6CisJCXBhcnNlci0+Z2xvYmFsLnJlcG9ydF9pZCA9IGl0ZW1fdWRhdGEoaXRlbSk7CisJCWlmIChwYXJzZXItPmdsb2JhbC5yZXBvcnRfaWQgPT0gMCkgeworCQkJZGJnX2hpZCgicmVwb3J0X2lkIDAgaXMgaW52YWxpZFxuIik7CisJCQlyZXR1cm4gLTE7CisJCX0KKwkJcmV0dXJuIDA7CisKKwlkZWZhdWx0OgorCQlkYmdfaGlkKCJ1bmtub3duIGdsb2JhbCB0YWcgMHgleFxuIiwgaXRlbS0+dGFnKTsKKwkJcmV0dXJuIC0xOwogCX0KIH0KIApAQCAtMzkzLDc3ICszOTksNzYgQEAKIAlkYXRhID0gaXRlbV91ZGF0YShpdGVtKTsKIAogCXN3aXRjaCAoaXRlbS0+dGFnKSB7CisJY2FzZSBISURfTE9DQUxfSVRFTV9UQUdfREVMSU1JVEVSOgogCi0JCWNhc2UgSElEX0xPQ0FMX0lURU1fVEFHX0RFTElNSVRFUjoKLQotCQkJaWYgKGRhdGEpIHsKLQkJCQkvKgotCQkJCSAqIFdlIHRyZWF0IGl0ZW1zIGJlZm9yZSB0aGUgZmlyc3QgZGVsaW1pdGVyCi0JCQkJICogYXMgZ2xvYmFsIHRvIGFsbCB1c2FnZSBzZXRzIChicmFuY2ggMCkuCi0JCQkJICogSW4gdGhlIG1vbWVudCB3ZSBwcm9jZXNzIG9ubHkgdGhlc2UgZ2xvYmFsCi0JCQkJICogaXRlbXMgYW5kIHRoZSBmaXJzdCBkZWxpbWl0ZXIgc2V0LgotCQkJCSAqLwotCQkJCWlmIChwYXJzZXItPmxvY2FsLmRlbGltaXRlcl9kZXB0aCAhPSAwKSB7Ci0JCQkJCWRiZ19oaWQoIm5lc3RlZCBkZWxpbWl0ZXJzXG4iKTsKLQkJCQkJcmV0dXJuIC0xOwotCQkJCX0KLQkJCQlwYXJzZXItPmxvY2FsLmRlbGltaXRlcl9kZXB0aCsrOwotCQkJCXBhcnNlci0+bG9jYWwuZGVsaW1pdGVyX2JyYW5jaCsrOwotCQkJfSBlbHNlIHsKLQkJCQlpZiAocGFyc2VyLT5sb2NhbC5kZWxpbWl0ZXJfZGVwdGggPCAxKSB7Ci0JCQkJCWRiZ19oaWQoImJvZ3VzIGNsb3NlIGRlbGltaXRlclxuIik7Ci0JCQkJCXJldHVybiAtMTsKLQkJCQl9Ci0JCQkJcGFyc2VyLT5sb2NhbC5kZWxpbWl0ZXJfZGVwdGgtLTsKKwkJaWYgKGRhdGEpIHsKKwkJCS8qCisJCQkgKiBXZSB0cmVhdCBpdGVtcyBiZWZvcmUgdGhlIGZpcnN0IGRlbGltaXRlcgorCQkJICogYXMgZ2xvYmFsIHRvIGFsbCB1c2FnZSBzZXRzIChicmFuY2ggMCkuCisJCQkgKiBJbiB0aGUgbW9tZW50IHdlIHByb2Nlc3Mgb25seSB0aGVzZSBnbG9iYWwKKwkJCSAqIGl0ZW1zIGFuZCB0aGUgZmlyc3QgZGVsaW1pdGVyIHNldC4KKwkJCSAqLworCQkJaWYgKHBhcnNlci0+bG9jYWwuZGVsaW1pdGVyX2RlcHRoICE9IDApIHsKKwkJCQlkYmdfaGlkKCJuZXN0ZWQgZGVsaW1pdGVyc1xuIik7CisJCQkJcmV0dXJuIC0xOwogCQkJfQotCQkJcmV0dXJuIDE7Ci0KLQkJY2FzZSBISURfTE9DQUxfSVRFTV9UQUdfVVNBR0U6Ci0KLQkJCWlmIChwYXJzZXItPmxvY2FsLmRlbGltaXRlcl9icmFuY2ggPiAxKSB7Ci0JCQkJZGJnX2hpZCgiYWx0ZXJuYXRpdmUgdXNhZ2UgaWdub3JlZFxuIik7Ci0JCQkJcmV0dXJuIDA7CisJCQlwYXJzZXItPmxvY2FsLmRlbGltaXRlcl9kZXB0aCsrOworCQkJcGFyc2VyLT5sb2NhbC5kZWxpbWl0ZXJfYnJhbmNoKys7CisJCX0gZWxzZSB7CisJCQlpZiAocGFyc2VyLT5sb2NhbC5kZWxpbWl0ZXJfZGVwdGggPCAxKSB7CisJCQkJZGJnX2hpZCgiYm9ndXMgY2xvc2UgZGVsaW1pdGVyXG4iKTsKKwkJCQlyZXR1cm4gLTE7CiAJCQl9CisJCQlwYXJzZXItPmxvY2FsLmRlbGltaXRlcl9kZXB0aC0tOworCQl9CisJCXJldHVybiAxOwogCi0JCQlpZiAoaXRlbS0+c2l6ZSA8PSAyKQotCQkJCWRhdGEgPSAocGFyc2VyLT5nbG9iYWwudXNhZ2VfcGFnZSA8PCAxNikgKyBkYXRhOworCWNhc2UgSElEX0xPQ0FMX0lURU1fVEFHX1VTQUdFOgogCi0JCQlyZXR1cm4gaGlkX2FkZF91c2FnZShwYXJzZXIsIGRhdGEpOwotCi0JCWNhc2UgSElEX0xPQ0FMX0lURU1fVEFHX1VTQUdFX01JTklNVU06Ci0KLQkJCWlmIChwYXJzZXItPmxvY2FsLmRlbGltaXRlcl9icmFuY2ggPiAxKSB7Ci0JCQkJZGJnX2hpZCgiYWx0ZXJuYXRpdmUgdXNhZ2UgaWdub3JlZFxuIik7Ci0JCQkJcmV0dXJuIDA7Ci0JCQl9Ci0KLQkJCWlmIChpdGVtLT5zaXplIDw9IDIpCi0JCQkJZGF0YSA9IChwYXJzZXItPmdsb2JhbC51c2FnZV9wYWdlIDw8IDE2KSArIGRhdGE7Ci0KLQkJCXBhcnNlci0+bG9jYWwudXNhZ2VfbWluaW11bSA9IGRhdGE7CisJCWlmIChwYXJzZXItPmxvY2FsLmRlbGltaXRlcl9icmFuY2ggPiAxKSB7CisJCQlkYmdfaGlkKCJhbHRlcm5hdGl2ZSB1c2FnZSBpZ25vcmVkXG4iKTsKIAkJCXJldHVybiAwOworCQl9CiAKLQkJY2FzZSBISURfTE9DQUxfSVRFTV9UQUdfVVNBR0VfTUFYSU1VTToKKwkJaWYgKGl0ZW0tPnNpemUgPD0gMikKKwkJCWRhdGEgPSAocGFyc2VyLT5nbG9iYWwudXNhZ2VfcGFnZSA8PCAxNikgKyBkYXRhOwogCi0JCQlpZiAocGFyc2VyLT5sb2NhbC5kZWxpbWl0ZXJfYnJhbmNoID4gMSkgewotCQkJCWRiZ19oaWQoImFsdGVybmF0aXZlIHVzYWdlIGlnbm9yZWRcbiIpOwotCQkJCXJldHVybiAwOworCQlyZXR1cm4gaGlkX2FkZF91c2FnZShwYXJzZXIsIGRhdGEpOworCisJY2FzZSBISURfTE9DQUxfSVRFTV9UQUdfVVNBR0VfTUlOSU1VTToKKworCQlpZiAocGFyc2VyLT5sb2NhbC5kZWxpbWl0ZXJfYnJhbmNoID4gMSkgeworCQkJZGJnX2hpZCgiYWx0ZXJuYXRpdmUgdXNhZ2UgaWdub3JlZFxuIik7CisJCQlyZXR1cm4gMDsKKwkJfQorCisJCWlmIChpdGVtLT5zaXplIDw9IDIpCisJCQlkYXRhID0gKHBhcnNlci0+Z2xvYmFsLnVzYWdlX3BhZ2UgPDwgMTYpICsgZGF0YTsKKworCQlwYXJzZXItPmxvY2FsLnVzYWdlX21pbmltdW0gPSBkYXRhOworCQlyZXR1cm4gMDsKKworCWNhc2UgSElEX0xPQ0FMX0lURU1fVEFHX1VTQUdFX01BWElNVU06CisKKwkJaWYgKHBhcnNlci0+bG9jYWwuZGVsaW1pdGVyX2JyYW5jaCA+IDEpIHsKKwkJCWRiZ19oaWQoImFsdGVybmF0aXZlIHVzYWdlIGlnbm9yZWRcbiIpOworCQkJcmV0dXJuIDA7CisJCX0KKworCQlpZiAoaXRlbS0+c2l6ZSA8PSAyKQorCQkJZGF0YSA9IChwYXJzZXItPmdsb2JhbC51c2FnZV9wYWdlIDw8IDE2KSArIGRhdGE7CisKKwkJZm9yIChuID0gcGFyc2VyLT5sb2NhbC51c2FnZV9taW5pbXVtOyBuIDw9IGRhdGE7IG4rKykKKwkJCWlmIChoaWRfYWRkX3VzYWdlKHBhcnNlciwgbikpIHsKKwkJCQlkYmdfaGlkKCJoaWRfYWRkX3VzYWdlIGZhaWxlZFxuIik7CisJCQkJcmV0dXJuIC0xOwogCQkJfQorCQlyZXR1cm4gMDsKIAotCQkJaWYgKGl0ZW0tPnNpemUgPD0gMikKLQkJCQlkYXRhID0gKHBhcnNlci0+Z2xvYmFsLnVzYWdlX3BhZ2UgPDwgMTYpICsgZGF0YTsKKwlkZWZhdWx0OgogCi0JCQlmb3IgKG4gPSBwYXJzZXItPmxvY2FsLnVzYWdlX21pbmltdW07IG4gPD0gZGF0YTsgbisrKQotCQkJCWlmIChoaWRfYWRkX3VzYWdlKHBhcnNlciwgbikpIHsKLQkJCQkJZGJnX2hpZCgiaGlkX2FkZF91c2FnZSBmYWlsZWRcbiIpOwotCQkJCQlyZXR1cm4gLTE7Ci0JCQkJfQotCQkJcmV0dXJuIDA7Ci0KLQkJZGVmYXVsdDoKLQotCQkJZGJnX2hpZCgidW5rbm93biBsb2NhbCBpdGVtIHRhZyAweCV4XG4iLCBpdGVtLT50YWcpOwotCQkJcmV0dXJuIDA7CisJCWRiZ19oaWQoInVua25vd24gbG9jYWwgaXRlbSB0YWcgMHgleFxuIiwgaXRlbS0+dGFnKTsKKwkJcmV0dXJuIDA7CiAJfQogCXJldHVybiAwOwogfQpAQCAtNDgwLDI0ICs0ODUsMjQgQEAKIAlkYXRhID0gaXRlbV91ZGF0YShpdGVtKTsKIAogCXN3aXRjaCAoaXRlbS0+dGFnKSB7Ci0JCWNhc2UgSElEX01BSU5fSVRFTV9UQUdfQkVHSU5fQ09MTEVDVElPTjoKLQkJCXJldCA9IG9wZW5fY29sbGVjdGlvbihwYXJzZXIsIGRhdGEgJiAweGZmKTsKLQkJCWJyZWFrOwotCQljYXNlIEhJRF9NQUlOX0lURU1fVEFHX0VORF9DT0xMRUNUSU9OOgotCQkJcmV0ID0gY2xvc2VfY29sbGVjdGlvbihwYXJzZXIpOwotCQkJYnJlYWs7Ci0JCWNhc2UgSElEX01BSU5fSVRFTV9UQUdfSU5QVVQ6Ci0JCQlyZXQgPSBoaWRfYWRkX2ZpZWxkKHBhcnNlciwgSElEX0lOUFVUX1JFUE9SVCwgZGF0YSk7Ci0JCQlicmVhazsKLQkJY2FzZSBISURfTUFJTl9JVEVNX1RBR19PVVRQVVQ6Ci0JCQlyZXQgPSBoaWRfYWRkX2ZpZWxkKHBhcnNlciwgSElEX09VVFBVVF9SRVBPUlQsIGRhdGEpOwotCQkJYnJlYWs7Ci0JCWNhc2UgSElEX01BSU5fSVRFTV9UQUdfRkVBVFVSRToKLQkJCXJldCA9IGhpZF9hZGRfZmllbGQocGFyc2VyLCBISURfRkVBVFVSRV9SRVBPUlQsIGRhdGEpOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlkYmdfaGlkKCJ1bmtub3duIG1haW4gaXRlbSB0YWcgMHgleFxuIiwgaXRlbS0+dGFnKTsKLQkJCXJldCA9IDA7CisJY2FzZSBISURfTUFJTl9JVEVNX1RBR19CRUdJTl9DT0xMRUNUSU9OOgorCQlyZXQgPSBvcGVuX2NvbGxlY3Rpb24ocGFyc2VyLCBkYXRhICYgMHhmZik7CisJCWJyZWFrOworCWNhc2UgSElEX01BSU5fSVRFTV9UQUdfRU5EX0NPTExFQ1RJT046CisJCXJldCA9IGNsb3NlX2NvbGxlY3Rpb24ocGFyc2VyKTsKKwkJYnJlYWs7CisJY2FzZSBISURfTUFJTl9JVEVNX1RBR19JTlBVVDoKKwkJcmV0ID0gaGlkX2FkZF9maWVsZChwYXJzZXIsIEhJRF9JTlBVVF9SRVBPUlQsIGRhdGEpOworCQlicmVhazsKKwljYXNlIEhJRF9NQUlOX0lURU1fVEFHX09VVFBVVDoKKwkJcmV0ID0gaGlkX2FkZF9maWVsZChwYXJzZXIsIEhJRF9PVVRQVVRfUkVQT1JULCBkYXRhKTsKKwkJYnJlYWs7CisJY2FzZSBISURfTUFJTl9JVEVNX1RBR19GRUFUVVJFOgorCQlyZXQgPSBoaWRfYWRkX2ZpZWxkKHBhcnNlciwgSElEX0ZFQVRVUkVfUkVQT1JULCBkYXRhKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZGJnX2hpZCgidW5rbm93biBtYWluIGl0ZW0gdGFnIDB4JXhcbiIsIGl0ZW0tPnRhZyk7CisJCXJldCA9IDA7CiAJfQogCiAJbWVtc2V0KCZwYXJzZXItPmxvY2FsLCAwLCBzaXplb2YocGFyc2VyLT5sb2NhbCkpOwkvKiBSZXNldCB0aGUgbG9jYWwgcGFyc2VyIGVudmlyb25tZW50ICovCkBAIC01MzQsOSArNTM5LDEwIEBACiAgKiBGcmVlIGEgZGV2aWNlIHN0cnVjdHVyZSwgYWxsIHJlcG9ydHMsIGFuZCBhbGwgZmllbGRzLgogICovCiAKLXZvaWQgaGlkX2ZyZWVfZGV2aWNlKHN0cnVjdCBoaWRfZGV2aWNlICpkZXZpY2UpCitzdGF0aWMgdm9pZCBoaWRfZGV2aWNlX3JlbGVhc2Uoc3RydWN0IGRldmljZSAqZGV2KQogewotCXVuc2lnbmVkIGksajsKKwlzdHJ1Y3QgaGlkX2RldmljZSAqZGV2aWNlID0gY29udGFpbmVyX29mKGRldiwgc3RydWN0IGhpZF9kZXZpY2UsIGRldik7CisJdW5zaWduZWQgaSwgajsKIAogCWZvciAoaSA9IDA7IGkgPCBISURfUkVQT1JUX1RZUEVTOyBpKyspIHsKIAkJc3RydWN0IGhpZF9yZXBvcnRfZW51bSAqcmVwb3J0X2VudW0gPSBkZXZpY2UtPnJlcG9ydF9lbnVtICsgaTsKQEAgLTU1Miw3ICs1NTgsNiBAQAogCWtmcmVlKGRldmljZS0+Y29sbGVjdGlvbik7CiAJa2ZyZWUoZGV2aWNlKTsKIH0KLUVYUE9SVF9TWU1CT0xfR1BMKGhpZF9mcmVlX2RldmljZSk7CiAKIC8qCiAgKiBGZXRjaCBhIHJlcG9ydCBkZXNjcmlwdGlvbiBpdGVtIGZyb20gdGhlIGRhdGEgc3RyZWFtLiBXZSBzdXBwb3J0IGxvbmcKQEAgLTU5Myw0NyArNTk4LDUyIEBACiAJaXRlbS0+c2l6ZSA9IGIgJiAzOwogCiAJc3dpdGNoIChpdGVtLT5zaXplKSB7CisJY2FzZSAwOgorCQlyZXR1cm4gc3RhcnQ7CiAKLQkJY2FzZSAwOgotCQkJcmV0dXJuIHN0YXJ0OworCWNhc2UgMToKKwkJaWYgKChlbmQgLSBzdGFydCkgPCAxKQorCQkJcmV0dXJuIE5VTEw7CisJCWl0ZW0tPmRhdGEudTggPSAqc3RhcnQrKzsKKwkJcmV0dXJuIHN0YXJ0OwogCi0JCWNhc2UgMToKLQkJCWlmICgoZW5kIC0gc3RhcnQpIDwgMSkKLQkJCQlyZXR1cm4gTlVMTDsKLQkJCWl0ZW0tPmRhdGEudTggPSAqc3RhcnQrKzsKLQkJCXJldHVybiBzdGFydDsKKwljYXNlIDI6CisJCWlmICgoZW5kIC0gc3RhcnQpIDwgMikKKwkJCXJldHVybiBOVUxMOworCQlpdGVtLT5kYXRhLnUxNiA9IGdldF91bmFsaWduZWRfbGUxNihzdGFydCk7CisJCXN0YXJ0ID0gKF9fdTggKikoKF9fbGUxNiAqKXN0YXJ0ICsgMSk7CisJCXJldHVybiBzdGFydDsKIAotCQljYXNlIDI6Ci0JCQlpZiAoKGVuZCAtIHN0YXJ0KSA8IDIpCi0JCQkJcmV0dXJuIE5VTEw7Ci0JCQlpdGVtLT5kYXRhLnUxNiA9IGdldF91bmFsaWduZWRfbGUxNihzdGFydCk7Ci0JCQlzdGFydCA9IChfX3U4ICopKChfX2xlMTYgKilzdGFydCArIDEpOwotCQkJcmV0dXJuIHN0YXJ0OwotCi0JCWNhc2UgMzoKLQkJCWl0ZW0tPnNpemUrKzsKLQkJCWlmICgoZW5kIC0gc3RhcnQpIDwgNCkKLQkJCQlyZXR1cm4gTlVMTDsKLQkJCWl0ZW0tPmRhdGEudTMyID0gZ2V0X3VuYWxpZ25lZF9sZTMyKHN0YXJ0KTsKLQkJCXN0YXJ0ID0gKF9fdTggKikoKF9fbGUzMiAqKXN0YXJ0ICsgMSk7Ci0JCQlyZXR1cm4gc3RhcnQ7CisJY2FzZSAzOgorCQlpdGVtLT5zaXplKys7CisJCWlmICgoZW5kIC0gc3RhcnQpIDwgNCkKKwkJCXJldHVybiBOVUxMOworCQlpdGVtLT5kYXRhLnUzMiA9IGdldF91bmFsaWduZWRfbGUzMihzdGFydCk7CisJCXN0YXJ0ID0gKF9fdTggKikoKF9fbGUzMiAqKXN0YXJ0ICsgMSk7CisJCXJldHVybiBzdGFydDsKIAl9CiAKIAlyZXR1cm4gTlVMTDsKIH0KIAotLyoKKy8qKgorICogaGlkX3BhcnNlX3JlcG9ydCAtIHBhcnNlIGRldmljZSByZXBvcnQKKyAqCisgKiBAZGV2aWNlOiBoaWQgZGV2aWNlCisgKiBAc3RhcnQ6IHJlcG9ydCBzdGFydAorICogQHNpemU6IHJlcG9ydCBzaXplCisgKgogICogUGFyc2UgYSByZXBvcnQgZGVzY3JpcHRpb24gaW50byBhIGhpZF9kZXZpY2Ugc3RydWN0dXJlLiBSZXBvcnRzIGFyZQogICogZW51bWVyYXRlZCwgZmllbGRzIGFyZSBhdHRhY2hlZCB0byB0aGVzZSByZXBvcnRzLgorICogMCByZXR1cm5lZCBvbiBzdWNjZXNzLCBvdGhlcndpc2Ugbm9uemVybyBlcnJvciB2YWx1ZS4KICAqLwotCi1zdHJ1Y3QgaGlkX2RldmljZSAqaGlkX3BhcnNlX3JlcG9ydChfX3U4ICpzdGFydCwgdW5zaWduZWQgc2l6ZSkKK2ludCBoaWRfcGFyc2VfcmVwb3J0KHN0cnVjdCBoaWRfZGV2aWNlICpkZXZpY2UsIF9fdTggKnN0YXJ0LAorCQl1bnNpZ25lZCBzaXplKQogewotCXN0cnVjdCBoaWRfZGV2aWNlICpkZXZpY2U7CiAJc3RydWN0IGhpZF9wYXJzZXIgKnBhcnNlcjsKIAlzdHJ1Y3QgaGlkX2l0ZW0gaXRlbTsKIAlfX3U4ICplbmQ7Ci0JdW5zaWduZWQgaTsKKwlpbnQgcmV0OwogCXN0YXRpYyBpbnQgKCpkaXNwYXRjaF90eXBlW10pKHN0cnVjdCBoaWRfcGFyc2VyICpwYXJzZXIsCiAJCQkJICAgICAgc3RydWN0IGhpZF9pdGVtICppdGVtKSA9IHsKIAkJaGlkX3BhcnNlcl9tYWluLApAQCAtNjQyLDc2ICs2NTIsNTcgQEAKIAkJaGlkX3BhcnNlcl9yZXNlcnZlZAogCX07CiAKLQlpZiAoIShkZXZpY2UgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgaGlkX2RldmljZSksIEdGUF9LRVJORUwpKSkKLQkJcmV0dXJuIE5VTEw7CisJaWYgKGRldmljZS0+ZHJpdmVyLT5yZXBvcnRfZml4dXApCisJCWRldmljZS0+ZHJpdmVyLT5yZXBvcnRfZml4dXAoZGV2aWNlLCBzdGFydCwgc2l6ZSk7CiAKLQlpZiAoIShkZXZpY2UtPmNvbGxlY3Rpb24gPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgaGlkX2NvbGxlY3Rpb24pICoKLQkJCQkgICBISURfREVGQVVMVF9OVU1fQ09MTEVDVElPTlMsIEdGUF9LRVJORUwpKSkgewotCQlrZnJlZShkZXZpY2UpOwotCQlyZXR1cm4gTlVMTDsKLQl9Ci0JZGV2aWNlLT5jb2xsZWN0aW9uX3NpemUgPSBISURfREVGQVVMVF9OVU1fQ09MTEVDVElPTlM7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgSElEX1JFUE9SVF9UWVBFUzsgaSsrKQotCQlJTklUX0xJU1RfSEVBRCgmZGV2aWNlLT5yZXBvcnRfZW51bVtpXS5yZXBvcnRfbGlzdCk7Ci0KLQlpZiAoIShkZXZpY2UtPnJkZXNjID0ga21hbGxvYyhzaXplLCBHRlBfS0VSTkVMKSkpIHsKLQkJa2ZyZWUoZGV2aWNlLT5jb2xsZWN0aW9uKTsKLQkJa2ZyZWUoZGV2aWNlKTsKLQkJcmV0dXJuIE5VTEw7Ci0JfQorCWRldmljZS0+cmRlc2MgPSBrbWFsbG9jKHNpemUsIEdGUF9LRVJORUwpOworCWlmIChkZXZpY2UtPnJkZXNjID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOwogCW1lbWNweShkZXZpY2UtPnJkZXNjLCBzdGFydCwgc2l6ZSk7CiAJZGV2aWNlLT5yc2l6ZSA9IHNpemU7CiAKLQlpZiAoIShwYXJzZXIgPSB2bWFsbG9jKHNpemVvZihzdHJ1Y3QgaGlkX3BhcnNlcikpKSkgewotCQlrZnJlZShkZXZpY2UtPnJkZXNjKTsKLQkJa2ZyZWUoZGV2aWNlLT5jb2xsZWN0aW9uKTsKLQkJa2ZyZWUoZGV2aWNlKTsKLQkJcmV0dXJuIE5VTEw7CisJcGFyc2VyID0gdm1hbGxvYyhzaXplb2Yoc3RydWN0IGhpZF9wYXJzZXIpKTsKKwlpZiAoIXBhcnNlcikgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIGVycjsKIAl9CisKIAltZW1zZXQocGFyc2VyLCAwLCBzaXplb2Yoc3RydWN0IGhpZF9wYXJzZXIpKTsKIAlwYXJzZXItPmRldmljZSA9IGRldmljZTsKIAogCWVuZCA9IHN0YXJ0ICsgc2l6ZTsKKwlyZXQgPSAtRUlOVkFMOwogCXdoaWxlICgoc3RhcnQgPSBmZXRjaF9pdGVtKHN0YXJ0LCBlbmQsICZpdGVtKSkgIT0gTlVMTCkgewogCiAJCWlmIChpdGVtLmZvcm1hdCAhPSBISURfSVRFTV9GT1JNQVRfU0hPUlQpIHsKIAkJCWRiZ19oaWQoInVuZXhwZWN0ZWQgbG9uZyBnbG9iYWwgaXRlbVxuIik7Ci0JCQloaWRfZnJlZV9kZXZpY2UoZGV2aWNlKTsKLQkJCXZmcmVlKHBhcnNlcik7Ci0JCQlyZXR1cm4gTlVMTDsKKwkJCWdvdG8gZXJyOwogCQl9CiAKIAkJaWYgKGRpc3BhdGNoX3R5cGVbaXRlbS50eXBlXShwYXJzZXIsICZpdGVtKSkgewogCQkJZGJnX2hpZCgiaXRlbSAldSAldSAldSAldSBwYXJzaW5nIGZhaWxlZFxuIiwKIAkJCQlpdGVtLmZvcm1hdCwgKHVuc2lnbmVkKWl0ZW0uc2l6ZSwgKHVuc2lnbmVkKWl0ZW0udHlwZSwgKHVuc2lnbmVkKWl0ZW0udGFnKTsKLQkJCWhpZF9mcmVlX2RldmljZShkZXZpY2UpOwotCQkJdmZyZWUocGFyc2VyKTsKLQkJCXJldHVybiBOVUxMOworCQkJZ290byBlcnI7CiAJCX0KIAogCQlpZiAoc3RhcnQgPT0gZW5kKSB7CiAJCQlpZiAocGFyc2VyLT5jb2xsZWN0aW9uX3N0YWNrX3B0cikgewogCQkJCWRiZ19oaWQoInVuYmFsYW5jZWQgY29sbGVjdGlvbiBhdCBlbmQgb2YgcmVwb3J0IGRlc2NyaXB0aW9uXG4iKTsKLQkJCQloaWRfZnJlZV9kZXZpY2UoZGV2aWNlKTsKLQkJCQl2ZnJlZShwYXJzZXIpOwotCQkJCXJldHVybiBOVUxMOworCQkJCWdvdG8gZXJyOwogCQkJfQogCQkJaWYgKHBhcnNlci0+bG9jYWwuZGVsaW1pdGVyX2RlcHRoKSB7CiAJCQkJZGJnX2hpZCgidW5iYWxhbmNlZCBkZWxpbWl0ZXIgYXQgZW5kIG9mIHJlcG9ydCBkZXNjcmlwdGlvblxuIik7Ci0JCQkJaGlkX2ZyZWVfZGV2aWNlKGRldmljZSk7Ci0JCQkJdmZyZWUocGFyc2VyKTsKLQkJCQlyZXR1cm4gTlVMTDsKKwkJCQlnb3RvIGVycjsKIAkJCX0KIAkJCXZmcmVlKHBhcnNlcik7Ci0JCQlyZXR1cm4gZGV2aWNlOworCQkJcmV0dXJuIDA7CiAJCX0KIAl9CiAKIAlkYmdfaGlkKCJpdGVtIGZldGNoaW5nIGZhaWxlZCBhdCBvZmZzZXQgJWRcbiIsIChpbnQpKGVuZCAtIHN0YXJ0KSk7Ci0JaGlkX2ZyZWVfZGV2aWNlKGRldmljZSk7CitlcnI6CiAJdmZyZWUocGFyc2VyKTsKLQlyZXR1cm4gTlVMTDsKKwlyZXR1cm4gcmV0OwogfQogRVhQT1JUX1NZTUJPTF9HUEwoaGlkX3BhcnNlX3JlcG9ydCk7CiAKQEAgLTcyNCw5ICs3MTUsOSBAQAogc3RhdGljIHMzMiBzbnRvMzIoX191MzIgdmFsdWUsIHVuc2lnbmVkIG4pCiB7CiAJc3dpdGNoIChuKSB7Ci0JCWNhc2UgODogIHJldHVybiAoKF9fczgpdmFsdWUpOwotCQljYXNlIDE2OiByZXR1cm4gKChfX3MxNil2YWx1ZSk7Ci0JCWNhc2UgMzI6IHJldHVybiAoKF9fczMyKXZhbHVlKTsKKwljYXNlIDg6ICByZXR1cm4gKChfX3M4KXZhbHVlKTsKKwljYXNlIDE2OiByZXR1cm4gKChfX3MxNil2YWx1ZSk7CisJY2FzZSAzMjogcmV0dXJuICgoX19zMzIpdmFsdWUpOwogCX0KIAlyZXR1cm4gdmFsdWUgJiAoMSA8PCAobiAtIDEpKSA/IHZhbHVlIHwgKC0xIDw8IG4pIDogdmFsdWU7CiB9CkBAIC04MTUsOSArODA2LDczIEBACiAJcmV0dXJuIC0xOwogfQogCi1zdGF0aWMgdm9pZCBoaWRfcHJvY2Vzc19ldmVudChzdHJ1Y3QgaGlkX2RldmljZSAqaGlkLCBzdHJ1Y3QgaGlkX2ZpZWxkICpmaWVsZCwgc3RydWN0IGhpZF91c2FnZSAqdXNhZ2UsIF9fczMyIHZhbHVlLCBpbnQgaW50ZXJydXB0KQorLyoqCisgKiBoaWRfbWF0Y2hfcmVwb3J0IC0gY2hlY2sgaWYgZHJpdmVyJ3MgcmF3X2V2ZW50IHNob3VsZCBiZSBjYWxsZWQKKyAqCisgKiBAaGlkOiBoaWQgZGV2aWNlCisgKiBAcmVwb3J0X3R5cGU6IHR5cGUgdG8gbWF0Y2ggYWdhaW5zdAorICoKKyAqIGNvbXBhcmUgaGlkLT5kcml2ZXItPnJlcG9ydF90YWJsZS0+cmVwb3J0X3R5cGUgdG8gcmVwb3J0LT50eXBlCisgKi8KK3N0YXRpYyBpbnQgaGlkX21hdGNoX3JlcG9ydChzdHJ1Y3QgaGlkX2RldmljZSAqaGlkLCBzdHJ1Y3QgaGlkX3JlcG9ydCAqcmVwb3J0KQogeworCWNvbnN0IHN0cnVjdCBoaWRfcmVwb3J0X2lkICppZCA9IGhpZC0+ZHJpdmVyLT5yZXBvcnRfdGFibGU7CisKKwlpZiAoIWlkKSAvKiBOVUxMIG1lYW5zIGFsbCAqLworCQlyZXR1cm4gMTsKKworCWZvciAoOyBpZC0+cmVwb3J0X3R5cGUgIT0gSElEX1RFUk1JTkFUT1I7IGlkKyspCisJCWlmIChpZC0+cmVwb3J0X3R5cGUgPT0gSElEX0FOWV9JRCB8fAorCQkJCWlkLT5yZXBvcnRfdHlwZSA9PSByZXBvcnQtPnR5cGUpCisJCQlyZXR1cm4gMTsKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBoaWRfbWF0Y2hfdXNhZ2UgLSBjaGVjayBpZiBkcml2ZXIncyBldmVudCBzaG91bGQgYmUgY2FsbGVkCisgKgorICogQGhpZDogaGlkIGRldmljZQorICogQHVzYWdlOiB1c2FnZSB0byBtYXRjaCBhZ2FpbnN0CisgKgorICogY29tcGFyZSBoaWQtPmRyaXZlci0+dXNhZ2VfdGFibGUtPnVzYWdlX3t0eXBlLGNvZGV9IHRvCisgKiB1c2FnZS0+dXNhZ2Vfe3R5cGUsY29kZX0KKyAqLworc3RhdGljIGludCBoaWRfbWF0Y2hfdXNhZ2Uoc3RydWN0IGhpZF9kZXZpY2UgKmhpZCwgc3RydWN0IGhpZF91c2FnZSAqdXNhZ2UpCit7CisJY29uc3Qgc3RydWN0IGhpZF91c2FnZV9pZCAqaWQgPSBoaWQtPmRyaXZlci0+dXNhZ2VfdGFibGU7CisKKwlpZiAoIWlkKSAvKiBOVUxMIG1lYW5zIGFsbCAqLworCQlyZXR1cm4gMTsKKworCWZvciAoOyBpZC0+dXNhZ2VfdHlwZSAhPSBISURfQU5ZX0lEIC0gMTsgaWQrKykKKwkJaWYgKChpZC0+dXNhZ2VfaGlkID09IEhJRF9BTllfSUQgfHwKKwkJCQlpZC0+dXNhZ2VfaGlkID09IHVzYWdlLT5oaWQpICYmCisJCQkJKGlkLT51c2FnZV90eXBlID09IEhJRF9BTllfSUQgfHwKKwkJCQlpZC0+dXNhZ2VfdHlwZSA9PSB1c2FnZS0+dHlwZSkgJiYKKwkJCQkoaWQtPnVzYWdlX2NvZGUgPT0gSElEX0FOWV9JRCB8fAorCQkJCSBpZC0+dXNhZ2VfY29kZSA9PSB1c2FnZS0+Y29kZSkpCisJCQlyZXR1cm4gMTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgaGlkX3Byb2Nlc3NfZXZlbnQoc3RydWN0IGhpZF9kZXZpY2UgKmhpZCwgc3RydWN0IGhpZF9maWVsZCAqZmllbGQsCisJCXN0cnVjdCBoaWRfdXNhZ2UgKnVzYWdlLCBfX3MzMiB2YWx1ZSwgaW50IGludGVycnVwdCkKK3sKKwlzdHJ1Y3QgaGlkX2RyaXZlciAqaGRydiA9IGhpZC0+ZHJpdmVyOworCWludCByZXQ7CisKIAloaWRfZHVtcF9pbnB1dCh1c2FnZSwgdmFsdWUpOworCisJaWYgKGhkcnYgJiYgaGRydi0+ZXZlbnQgJiYgaGlkX21hdGNoX3VzYWdlKGhpZCwgdXNhZ2UpKSB7CisJCXJldCA9IGhkcnYtPmV2ZW50KGhpZCwgZmllbGQsIHVzYWdlLCB2YWx1ZSk7CisJCWlmIChyZXQgIT0gMCkgeworCQkJaWYgKHJldCA8IDApCisJCQkJZGJnX2hpZCgiJXMncyBldmVudCBmYWlsZWQgd2l0aCAlZFxuIiwKKwkJCQkJCWhkcnYtPm5hbWUsIHJldCk7CisJCQlyZXR1cm47CisJCX0KKwl9CisKIAlpZiAoaGlkLT5jbGFpbWVkICYgSElEX0NMQUlNRURfSU5QVVQpCiAJCWhpZGlucHV0X2hpZF9ldmVudChoaWQsIGZpZWxkLCB1c2FnZSwgdmFsdWUpOwogCWlmIChoaWQtPmNsYWltZWQgJiBISURfQ0xBSU1FRF9ISURERVYgJiYgaW50ZXJydXB0ICYmIGhpZC0+aGlkZGV2X2hpZF9ldmVudCkKQEAgLTk0Niw0NCArMTAwMSw0NyBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwoaGlkX3NldF9maWVsZCk7CiAKLWludCBoaWRfaW5wdXRfcmVwb3J0KHN0cnVjdCBoaWRfZGV2aWNlICpoaWQsIGludCB0eXBlLCB1OCAqZGF0YSwgaW50IHNpemUsIGludCBpbnRlcnJ1cHQpCitzdGF0aWMgc3RydWN0IGhpZF9yZXBvcnQgKmhpZF9nZXRfcmVwb3J0KHN0cnVjdCBoaWRfcmVwb3J0X2VudW0gKnJlcG9ydF9lbnVtLAorCQljb25zdCB1OCAqZGF0YSkKK3sKKwlzdHJ1Y3QgaGlkX3JlcG9ydCAqcmVwb3J0OworCXVuc2lnbmVkIGludCBuID0gMDsJLyogTm9ybWFsbHkgcmVwb3J0IG51bWJlciBpcyAwICovCisKKwkvKiBEZXZpY2UgdXNlcyBudW1iZXJlZCByZXBvcnRzLCBkYXRhWzBdIGlzIHJlcG9ydCBudW1iZXIgKi8KKwlpZiAocmVwb3J0X2VudW0tPm51bWJlcmVkKQorCQluID0gKmRhdGE7CisKKwlyZXBvcnQgPSByZXBvcnRfZW51bS0+cmVwb3J0X2lkX2hhc2hbbl07CisJaWYgKHJlcG9ydCA9PSBOVUxMKQorCQlkYmdfaGlkKCJ1bmRlZmluZWQgcmVwb3J0X2lkICV1IHJlY2VpdmVkXG4iLCBuKTsKKworCXJldHVybiByZXBvcnQ7Cit9CisKK3ZvaWQgaGlkX3JlcG9ydF9yYXdfZXZlbnQoc3RydWN0IGhpZF9kZXZpY2UgKmhpZCwgaW50IHR5cGUsIHU4ICpkYXRhLCBpbnQgc2l6ZSwKKwkJaW50IGludGVycnVwdCkKIHsKIAlzdHJ1Y3QgaGlkX3JlcG9ydF9lbnVtICpyZXBvcnRfZW51bSA9IGhpZC0+cmVwb3J0X2VudW0gKyB0eXBlOwogCXN0cnVjdCBoaWRfcmVwb3J0ICpyZXBvcnQ7Ci0JaW50IG4sIHJzaXplLCBpOworCXVuc2lnbmVkIGludCBhOworCWludCByc2l6ZSwgY3NpemUgPSBzaXplOworCXU4ICpjZGF0YSA9IGRhdGE7CiAKLQlpZiAoIWhpZCkKLQkJcmV0dXJuIC1FTk9ERVY7CisJcmVwb3J0ID0gaGlkX2dldF9yZXBvcnQocmVwb3J0X2VudW0sIGRhdGEpOworCWlmICghcmVwb3J0KQorCQlyZXR1cm47CiAKLQlpZiAoIXNpemUpIHsKLQkJZGJnX2hpZCgiZW1wdHkgcmVwb3J0XG4iKTsKLQkJcmV0dXJuIC0xOwotCX0KLQotCWRiZ19oaWQoInJlcG9ydCAoc2l6ZSAldSkgKCVzbnVtYmVyZWQpXG4iLCBzaXplLCByZXBvcnRfZW51bS0+bnVtYmVyZWQgPyAiIiA6ICJ1biIpOwotCi0JbiA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBOb3JtYWxseSByZXBvcnQgbnVtYmVyIGlzIDAgKi8KLQlpZiAocmVwb3J0X2VudW0tPm51bWJlcmVkKSB7ICAgIC8qIERldmljZSB1c2VzIG51bWJlcmVkIHJlcG9ydHMsIGRhdGFbMF0gaXMgcmVwb3J0IG51bWJlciAqLwotCQluID0gKmRhdGErKzsKLQkJc2l6ZS0tOwotCX0KLQotCS8qIGR1bXAgdGhlIHJlcG9ydCAqLwotCWRiZ19oaWQoInJlcG9ydCAlZCAoc2l6ZSAldSkgPSAiLCBuLCBzaXplKTsKLQlmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgaSsrKQotCQlkYmdfaGlkX2xpbmUoIiAlMDJ4IiwgZGF0YVtpXSk7Ci0JZGJnX2hpZF9saW5lKCJcbiIpOwotCi0JaWYgKCEocmVwb3J0ID0gcmVwb3J0X2VudW0tPnJlcG9ydF9pZF9oYXNoW25dKSkgewotCQlkYmdfaGlkKCJ1bmRlZmluZWQgcmVwb3J0X2lkICVkIHJlY2VpdmVkXG4iLCBuKTsKLQkJcmV0dXJuIC0xOworCWlmIChyZXBvcnRfZW51bS0+bnVtYmVyZWQpIHsKKwkJY2RhdGErKzsKKwkJY3NpemUtLTsKIAl9CiAKIAlyc2l6ZSA9ICgocmVwb3J0LT5zaXplIC0gMSkgPj4gMykgKyAxOwogCi0JaWYgKHNpemUgPCByc2l6ZSkgewotCQlkYmdfaGlkKCJyZXBvcnQgJWQgaXMgdG9vIHNob3J0LCAoJWQgPCAlZClcbiIsIHJlcG9ydC0+aWQsIHNpemUsIHJzaXplKTsKLQkJbWVtc2V0KGRhdGEgKyBzaXplLCAwLCByc2l6ZSAtIHNpemUpOworCWlmIChjc2l6ZSA8IHJzaXplKSB7CisJCWRiZ19oaWQoInJlcG9ydCAlZCBpcyB0b28gc2hvcnQsICglZCA8ICVkKVxuIiwgcmVwb3J0LT5pZCwKKwkJCQljc2l6ZSwgcnNpemUpOworCQltZW1zZXQoY2RhdGEgKyBjc2l6ZSwgMCwgcnNpemUgLSBjc2l6ZSk7CiAJfQogCiAJaWYgKChoaWQtPmNsYWltZWQgJiBISURfQ0xBSU1FRF9ISURERVYpICYmIGhpZC0+aGlkZGV2X3JlcG9ydF9ldmVudCkKQEAgLTk5NiwyNCArMTA1NCw2NjMgQEAKIAkJCWhpZHJhd19yZXBvcnRfZXZlbnQoaGlkLCBkYXRhLCBzaXplKTsKIAl9CiAKLQlmb3IgKG4gPSAwOyBuIDwgcmVwb3J0LT5tYXhmaWVsZDsgbisrKQotCQloaWRfaW5wdXRfZmllbGQoaGlkLCByZXBvcnQtPmZpZWxkW25dLCBkYXRhLCBpbnRlcnJ1cHQpOworCWZvciAoYSA9IDA7IGEgPCByZXBvcnQtPm1heGZpZWxkOyBhKyspCisJCWhpZF9pbnB1dF9maWVsZChoaWQsIHJlcG9ydC0+ZmllbGRbYV0sIGNkYXRhLCBpbnRlcnJ1cHQpOwogCiAJaWYgKGhpZC0+Y2xhaW1lZCAmIEhJRF9DTEFJTUVEX0lOUFVUKQogCQloaWRpbnB1dF9yZXBvcnRfZXZlbnQoaGlkLCByZXBvcnQpOworfQorRVhQT1JUX1NZTUJPTF9HUEwoaGlkX3JlcG9ydF9yYXdfZXZlbnQpOworCisvKioKKyAqIGhpZF9pbnB1dF9yZXBvcnQgLSByZXBvcnQgZGF0YSBmcm9tIGxvd2VyIGxheWVyICh1c2IsIGJ0Li4uKQorICoKKyAqIEBoaWQ6IGhpZCBkZXZpY2UKKyAqIEB0eXBlOiBISUQgcmVwb3J0IHR5cGUgKEhJRF8qX1JFUE9SVCkKKyAqIEBkYXRhOiByZXBvcnQgY29udGVudHMKKyAqIEBzaXplOiBzaXplIG9mIGRhdGEgcGFyYW1ldGVyCisgKiBAaW50ZXJydXB0OiBjYWxsZWQgZnJvbSBhdG9taWM/CisgKgorICogVGhpcyBpcyBkYXRhIGVudHJ5IGZvciBsb3dlciBsYXllcnMuCisgKi8KK2ludCBoaWRfaW5wdXRfcmVwb3J0KHN0cnVjdCBoaWRfZGV2aWNlICpoaWQsIGludCB0eXBlLCB1OCAqZGF0YSwgaW50IHNpemUsIGludCBpbnRlcnJ1cHQpCit7CisJc3RydWN0IGhpZF9yZXBvcnRfZW51bSAqcmVwb3J0X2VudW0gPSBoaWQtPnJlcG9ydF9lbnVtICsgdHlwZTsKKwlzdHJ1Y3QgaGlkX2RyaXZlciAqaGRydiA9IGhpZC0+ZHJpdmVyOworCXN0cnVjdCBoaWRfcmVwb3J0ICpyZXBvcnQ7CisJdW5zaWduZWQgaW50IGk7CisJaW50IHJldDsKKworCWlmICghaGlkIHx8ICFoaWQtPmRyaXZlcikKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlpZiAoIXNpemUpIHsKKwkJZGJnX2hpZCgiZW1wdHkgcmVwb3J0XG4iKTsKKwkJcmV0dXJuIC0xOworCX0KKworCWRiZ19oaWQoInJlcG9ydCAoc2l6ZSAldSkgKCVzbnVtYmVyZWQpXG4iLCBzaXplLCByZXBvcnRfZW51bS0+bnVtYmVyZWQgPyAiIiA6ICJ1biIpOworCisJcmVwb3J0ID0gaGlkX2dldF9yZXBvcnQocmVwb3J0X2VudW0sIGRhdGEpOworCWlmICghcmVwb3J0KQorCQlyZXR1cm4gLTE7CisKKwkvKiBkdW1wIHRoZSByZXBvcnQgKi8KKwlkYmdfaGlkKCJyZXBvcnQgJWQgKHNpemUgJXUpID0gIiwgcmVwb3J0LT5pZCwgc2l6ZSk7CisJZm9yIChpID0gMDsgaSA8IHNpemU7IGkrKykKKwkJZGJnX2hpZF9saW5lKCIgJTAyeCIsIGRhdGFbaV0pOworCWRiZ19oaWRfbGluZSgiXG4iKTsKKworCWlmIChoZHJ2ICYmIGhkcnYtPnJhd19ldmVudCAmJiBoaWRfbWF0Y2hfcmVwb3J0KGhpZCwgcmVwb3J0KSkgeworCQlyZXQgPSBoZHJ2LT5yYXdfZXZlbnQoaGlkLCByZXBvcnQsIGRhdGEsIHNpemUpOworCQlpZiAocmV0ICE9IDApCisJCQlyZXR1cm4gcmV0IDwgMCA/IHJldCA6IDA7CisJfQorCisJaGlkX3JlcG9ydF9yYXdfZXZlbnQoaGlkLCB0eXBlLCBkYXRhLCBzaXplLCBpbnRlcnJ1cHQpOwogCiAJcmV0dXJuIDA7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChoaWRfaW5wdXRfcmVwb3J0KTsKIAorc3RhdGljIGJvb2wgaGlkX21hdGNoX29uZV9pZChzdHJ1Y3QgaGlkX2RldmljZSAqaGRldiwKKwkJY29uc3Qgc3RydWN0IGhpZF9kZXZpY2VfaWQgKmlkKQoreworCXJldHVybiBpZC0+YnVzID09IGhkZXYtPmJ1cyAmJgorCQkoaWQtPnZlbmRvciA9PSBISURfQU5ZX0lEIHx8IGlkLT52ZW5kb3IgPT0gaGRldi0+dmVuZG9yKSAmJgorCQkoaWQtPnByb2R1Y3QgPT0gSElEX0FOWV9JRCB8fCBpZC0+cHJvZHVjdCA9PSBoZGV2LT5wcm9kdWN0KTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBoaWRfZGV2aWNlX2lkICpoaWRfbWF0Y2hfaWQoc3RydWN0IGhpZF9kZXZpY2UgKmhkZXYsCisJCWNvbnN0IHN0cnVjdCBoaWRfZGV2aWNlX2lkICppZCkKK3sKKwlmb3IgKDsgaWQtPmJ1czsgaWQrKykKKwkJaWYgKGhpZF9tYXRjaF9vbmVfaWQoaGRldiwgaWQpKQorCQkJcmV0dXJuIGlkOworCisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGlkX2RldmljZV9pZCBoaWRfaGlkZGV2X2xpc3RbXSA9IHsKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfTUdFLCBVU0JfREVWSUNFX0lEX01HRV9VUFMpIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX01HRSwgVVNCX0RFVklDRV9JRF9NR0VfVVBTMSkgfSwKKwl7IH0KK307CisKK3N0YXRpYyBib29sIGhpZF9oaWRkZXYoc3RydWN0IGhpZF9kZXZpY2UgKmhkZXYpCit7CisJcmV0dXJuICEhaGlkX21hdGNoX2lkKGhkZXYsIGhpZF9oaWRkZXZfbGlzdCk7Cit9CisKK2ludCBoaWRfY29ubmVjdChzdHJ1Y3QgaGlkX2RldmljZSAqaGRldiwgdW5zaWduZWQgaW50IGNvbm5lY3RfbWFzaykKK3sKKwlzdGF0aWMgY29uc3QgY2hhciAqdHlwZXNbXSA9IHsgIkRldmljZSIsICJQb2ludGVyIiwgIk1vdXNlIiwgIkRldmljZSIsCisJCSJKb3lzdGljayIsICJHYW1lcGFkIiwgIktleWJvYXJkIiwgIktleXBhZCIsCisJCSJNdWx0aS1BeGlzIENvbnRyb2xsZXIiCisJfTsKKwljb25zdCBjaGFyICp0eXBlLCAqYnVzOworCWNoYXIgYnVmWzY0XTsKKwl1bnNpZ25lZCBpbnQgaTsKKwlpbnQgbGVuOworCisJaWYgKGhkZXYtPmJ1cyAhPSBCVVNfVVNCKQorCQljb25uZWN0X21hc2sgJj0gfkhJRF9DT05ORUNUX0hJRERFVjsKKwlpZiAoaGlkX2hpZGRldihoZGV2KSkKKwkJY29ubmVjdF9tYXNrIHw9IEhJRF9DT05ORUNUX0hJRERFVl9GT1JDRTsKKworCWlmICgoY29ubmVjdF9tYXNrICYgSElEX0NPTk5FQ1RfSElESU5QVVQpICYmICFoaWRpbnB1dF9jb25uZWN0KGhkZXYsCisJCQkJY29ubmVjdF9tYXNrICYgSElEX0NPTk5FQ1RfSElESU5QVVRfRk9SQ0UpKQorCQloZGV2LT5jbGFpbWVkIHw9IEhJRF9DTEFJTUVEX0lOUFVUOworCWlmICgoY29ubmVjdF9tYXNrICYgSElEX0NPTk5FQ1RfSElEREVWKSAmJiBoZGV2LT5oaWRkZXZfY29ubmVjdCAmJgorCQkJIWhkZXYtPmhpZGRldl9jb25uZWN0KGhkZXYsCisJCQkJY29ubmVjdF9tYXNrICYgSElEX0NPTk5FQ1RfSElEREVWX0ZPUkNFKSkKKwkJaGRldi0+Y2xhaW1lZCB8PSBISURfQ0xBSU1FRF9ISURERVY7CisJaWYgKChjb25uZWN0X21hc2sgJiBISURfQ09OTkVDVF9ISURSQVcpICYmICFoaWRyYXdfY29ubmVjdChoZGV2KSkKKwkJaGRldi0+Y2xhaW1lZCB8PSBISURfQ0xBSU1FRF9ISURSQVc7CisKKwlpZiAoIWhkZXYtPmNsYWltZWQpIHsKKwkJZGV2X2VycigmaGRldi0+ZGV2LCAiY2xhaW1lZCBieSBuZWl0aGVyIGlucHV0LCBoaWRkZXYgbm9yICIKKwkJCQkiaGlkcmF3XG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJaWYgKChoZGV2LT5jbGFpbWVkICYgSElEX0NMQUlNRURfSU5QVVQpICYmCisJCQkoY29ubmVjdF9tYXNrICYgSElEX0NPTk5FQ1RfRkYpICYmIGhkZXYtPmZmX2luaXQpCisJCWhkZXYtPmZmX2luaXQoaGRldik7CisKKwlsZW4gPSAwOworCWlmIChoZGV2LT5jbGFpbWVkICYgSElEX0NMQUlNRURfSU5QVVQpCisJCWxlbiArPSBzcHJpbnRmKGJ1ZiArIGxlbiwgImlucHV0Iik7CisJaWYgKGhkZXYtPmNsYWltZWQgJiBISURfQ0xBSU1FRF9ISURERVYpCisJCWxlbiArPSBzcHJpbnRmKGJ1ZiArIGxlbiwgIiVzaGlkZGV2JWQiLCBsZW4gPyAiLCIgOiAiIiwKKwkJCQloZGV2LT5taW5vcik7CisJaWYgKGhkZXYtPmNsYWltZWQgJiBISURfQ0xBSU1FRF9ISURSQVcpCisJCWxlbiArPSBzcHJpbnRmKGJ1ZiArIGxlbiwgIiVzaGlkcmF3JWQiLCBsZW4gPyAiLCIgOiAiIiwKKwkJCQkoKHN0cnVjdCBoaWRyYXcgKiloZGV2LT5oaWRyYXcpLT5taW5vcik7CisKKwl0eXBlID0gIkRldmljZSI7CisJZm9yIChpID0gMDsgaSA8IGhkZXYtPm1heGNvbGxlY3Rpb247IGkrKykgeworCQlzdHJ1Y3QgaGlkX2NvbGxlY3Rpb24gKmNvbCA9ICZoZGV2LT5jb2xsZWN0aW9uW2ldOworCQlpZiAoY29sLT50eXBlID09IEhJRF9DT0xMRUNUSU9OX0FQUExJQ0FUSU9OICYmCisJCSAgIChjb2wtPnVzYWdlICYgSElEX1VTQUdFX1BBR0UpID09IEhJRF9VUF9HRU5ERVNLICYmCisJCSAgIChjb2wtPnVzYWdlICYgMHhmZmZmKSA8IEFSUkFZX1NJWkUodHlwZXMpKSB7CisJCQl0eXBlID0gdHlwZXNbY29sLT51c2FnZSAmIDB4ZmZmZl07CisJCQlicmVhazsKKwkJfQorCX0KKworCXN3aXRjaCAoaGRldi0+YnVzKSB7CisJY2FzZSBCVVNfVVNCOgorCQlidXMgPSAiVVNCIjsKKwkJYnJlYWs7CisJY2FzZSBCVVNfQkxVRVRPT1RIOgorCQlidXMgPSAiQkxVRVRPT1RIIjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnVzID0gIjxVTktOT1dOPiI7CisJfQorCisJZGV2X2luZm8oJmhkZXYtPmRldiwgIiVzOiAlcyBISUQgdiV4LiUwMnggJXMgWyVzXSBvbiAlc1xuIiwKKwkJCWJ1ZiwgYnVzLCBoZGV2LT52ZXJzaW9uID4+IDgsIGhkZXYtPnZlcnNpb24gJiAweGZmLAorCQkJdHlwZSwgaGRldi0+bmFtZSwgaGRldi0+cGh5cyk7CisKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGhpZF9jb25uZWN0KTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBoaWRfZGV2aWNlX2lkIGhpZF9ibGFja2xpc3RbXSA9IHsKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfQTRURUNILCBVU0JfREVWSUNFX0lEX0E0VEVDSF9XQ1AzMlBVKSB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9BNFRFQ0gsIFVTQl9ERVZJQ0VfSURfQTRURUNIX1g1XzAwNUQpIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0FQUExFLCBVU0JfREVWSUNFX0lEX0FQUExFX0FUVl9JUkNPTlRST0wpIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0FQUExFLCBVU0JfREVWSUNFX0lEX0FQUExFX0lSQ09OVFJPTDQpIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0FQUExFLCBVU0JfREVWSUNFX0lEX0FQUExFX01JR0hUWU1PVVNFKSB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9BUFBMRSwgVVNCX0RFVklDRV9JRF9BUFBMRV9GT1VOVEFJTl9BTlNJKSB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9BUFBMRSwgVVNCX0RFVklDRV9JRF9BUFBMRV9GT1VOVEFJTl9JU08pIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0FQUExFLCBVU0JfREVWSUNFX0lEX0FQUExFX0dFWVNFUl9BTlNJKSB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9BUFBMRSwgVVNCX0RFVklDRV9JRF9BUFBMRV9HRVlTRVJfSVNPKSB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9BUFBMRSwgVVNCX0RFVklDRV9JRF9BUFBMRV9HRVlTRVJfSklTKSB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9BUFBMRSwgVVNCX0RFVklDRV9JRF9BUFBMRV9HRVlTRVIzX0FOU0kpIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0FQUExFLCBVU0JfREVWSUNFX0lEX0FQUExFX0dFWVNFUjNfSVNPKSB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9BUFBMRSwgVVNCX0RFVklDRV9JRF9BUFBMRV9HRVlTRVIzX0pJUykgfSwKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfQVBQTEUsIFVTQl9ERVZJQ0VfSURfQVBQTEVfR0VZU0VSNF9BTlNJKSB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9BUFBMRSwgVVNCX0RFVklDRV9JRF9BUFBMRV9HRVlTRVI0X0lTTykgfSwKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfQVBQTEUsIFVTQl9ERVZJQ0VfSURfQVBQTEVfR0VZU0VSNF9KSVMpIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0FQUExFLCBVU0JfREVWSUNFX0lEX0FQUExFX0FMVV9BTlNJKSB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9BUFBMRSwgVVNCX0RFVklDRV9JRF9BUFBMRV9BTFVfSVNPKSB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9BUFBMRSwgVVNCX0RFVklDRV9JRF9BUFBMRV9BTFVfSklTKSB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9BUFBMRSwgVVNCX0RFVklDRV9JRF9BUFBMRV9HRVlTRVI0X0hGX0FOU0kpIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0FQUExFLCBVU0JfREVWSUNFX0lEX0FQUExFX0dFWVNFUjRfSEZfSVNPKSB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9BUFBMRSwgVVNCX0RFVklDRV9JRF9BUFBMRV9HRVlTRVI0X0hGX0pJUykgfSwKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfQVBQTEUsIFVTQl9ERVZJQ0VfSURfQVBQTEVfQUxVX1dJUkVMRVNTX0FOU0kpIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0FQUExFLCBVU0JfREVWSUNFX0lEX0FQUExFX0FMVV9XSVJFTEVTU19JU08pIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0FQUExFLCBVU0JfREVWSUNFX0lEX0FQUExFX0FMVV9XSVJFTEVTU19KSVMpIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0FQUExFLCBVU0JfREVWSUNFX0lEX0FQUExFX1dFTExTUFJJTkdfQU5TSSkgfSwKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfQVBQTEUsIFVTQl9ERVZJQ0VfSURfQVBQTEVfV0VMTFNQUklOR19JU08pIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0FQUExFLCBVU0JfREVWSUNFX0lEX0FQUExFX1dFTExTUFJJTkdfSklTKSB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9BUFBMRSwgVVNCX0RFVklDRV9JRF9BUFBMRV9XRUxMU1BSSU5HMl9BTlNJKSB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9BUFBMRSwgVVNCX0RFVklDRV9JRF9BUFBMRV9XRUxMU1BSSU5HMl9JU08pIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0FQUExFLCBVU0JfREVWSUNFX0lEX0FQUExFX1dFTExTUFJJTkcyX0pJUykgfSwKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfQVBQTEUsIFVTQl9ERVZJQ0VfSURfQVBQTEVfRk9VTlRBSU5fVFBfT05MWSkgfSwKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfQVBQTEUsIFVTQl9ERVZJQ0VfSURfQVBQTEVfR0VZU0VSMV9UUF9PTkxZKSB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9BVkVSTUVESUEsIFVTQl9ERVZJQ0VfSURfQVZFUl9GTV9NUjgwMCkgfSwKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfQkVMS0lOLCBVU0JfREVWSUNFX0lEX0ZMSVBfS1ZNKSB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9CUklHSFQsIFVTQl9ERVZJQ0VfSURfQlJJR0hUX0FCTlQyKSB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9DSEVSUlksIFVTQl9ERVZJQ0VfSURfQ0hFUlJZX0NZTU9USU9OKSB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9DSElDT05ZLCBVU0JfREVWSUNFX0lEX0NISUNPTllfVEFDVElDQUxfUEFEKSB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9DWVBSRVNTLCBVU0JfREVWSUNFX0lEX0NZUFJFU1NfQkFSQ09ERV8xKSB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9DWVBSRVNTLCBVU0JfREVWSUNFX0lEX0NZUFJFU1NfQkFSQ09ERV8yKSB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9DWVBSRVNTLCBVU0JfREVWSUNFX0lEX0NZUFJFU1NfTU9VU0UpIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0RFTEwsIFVTQl9ERVZJQ0VfSURfREVMTF9XNzY1OCkgfSwKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfREVMTCwgVVNCX0RFVklDRV9JRF9ERUxMX1NLODExNSkgfSwKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfRVpLRVksIFVTQl9ERVZJQ0VfSURfQlRDXzgxOTMpIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0dZUkFUSU9OLCBVU0JfREVWSUNFX0lEX0dZUkFUSU9OX1JFTU9URSkgfSwKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfTEFCVEVDLCBVU0JfREVWSUNFX0lEX0xBQlRFQ19XSVJFTEVTU19LRVlCT0FSRCkgfSwKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfTE9HSVRFQ0gsIFVTQl9ERVZJQ0VfSURfTVgzMDAwX1JFQ0VJVkVSKSB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9MT0dJVEVDSCwgVVNCX0RFVklDRV9JRF9TNTEwX1JFQ0VJVkVSKSB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9MT0dJVEVDSCwgVVNCX0RFVklDRV9JRF9TNTEwX1JFQ0VJVkVSXzIpIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0xPR0lURUNILCBVU0JfREVWSUNFX0lEX0xPR0lURUNIX1JFQ0VJVkVSKSB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9MT0dJVEVDSCwgVVNCX0RFVklDRV9JRF9ESU5PVk9fREVTS1RPUCkgfSwKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfTE9HSVRFQ0gsIFVTQl9ERVZJQ0VfSURfRElOT1ZPX0VER0UpIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0xPR0lURUNILCBVU0JfREVWSUNFX0lEX0RJTk9WT19NSU5JKSB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9MT0dJVEVDSCwgVVNCX0RFVklDRV9JRF9MT0dJVEVDSF9LQkQpIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0xPR0lURUNILCBVU0JfREVWSUNFX0lEX0xPR0lURUNIX0VMSVRFX0tCRCkgfSwKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfTE9HSVRFQ0gsIFVTQl9ERVZJQ0VfSURfTE9HSVRFQ0hfQ09SRExFU1NfREVTS1RPUF9MWDUwMCkgfSwKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfTE9HSVRFQ0gsIFVTQl9ERVZJQ0VfSURfTE9HSVRFQ0hfTFgzKSB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9MT0dJVEVDSCwgVVNCX0RFVklDRV9JRF9MT0dJVEVDSF9WMTUwKSB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9MT0dJVEVDSCwgVVNCX0RFVklDRV9JRF9MT0dJVEVDSF9FWFRSRU1FXzNEKSB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9MT0dJVEVDSCwgVVNCX0RFVklDRV9JRF9MT0dJVEVDSF9XSEVFTCkgfSwKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfTE9HSVRFQ0gsIFVTQl9ERVZJQ0VfSURfTE9HSVRFQ0hfUlVNQkxFUEFEKSB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9MT0dJVEVDSCwgVVNCX0RFVklDRV9JRF9MT0dJVEVDSF9SVU1CTEVQQUQyXzIpIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0xPR0lURUNILCBVU0JfREVWSUNFX0lEX0xPR0lURUNIX1dJTkdNQU5fRjNEKSB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9MT0dJVEVDSCwgVVNCX0RFVklDRV9JRF9MT0dJVEVDSF9GT1JDRTNEX1BSTykgfSwKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfTE9HSVRFQ0gsIFVTQl9ERVZJQ0VfSURfTE9HSVRFQ0hfTU9NT19XSEVFTCkgfSwKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfTE9HSVRFQ0gsIFVTQl9ERVZJQ0VfSURfTE9HSVRFQ0hfTU9NT19XSEVFTDIpIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0xPR0lURUNILCBVU0JfREVWSUNFX0lEX0xPR0lURUNIX1JVTUJMRVBBRDIpIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX01JQ1JPU09GVCwgVVNCX0RFVklDRV9JRF9TSURFV0lOREVSX0dWKSB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9NSUNST1NPRlQsIFVTQl9ERVZJQ0VfSURfTVNfTkU0SykgfSwKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfTUlDUk9TT0ZULCBVU0JfREVWSUNFX0lEX01TX0xLNkspIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX01JQ1JPU09GVCwgVVNCX0RFVklDRV9JRF9NU19QUkVTRU5URVJfOEtfVVNCKSB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9NSUNST1NPRlQsIFVTQl9ERVZJQ0VfSURfV0lSRUxFU1NfT1BUSUNBTF9ERVNLVE9QXzNfMCkgfSwKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfTU9OVEVSRVksIFVTQl9ERVZJQ0VfSURfR0VOSVVTX0tCMjlFKSB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9QRVRBTFlOWCwgVVNCX0RFVklDRV9JRF9QRVRBTFlOWF9NQVhURVJfUkVNT1RFKSB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9TQU1TVU5HLCBVU0JfREVWSUNFX0lEX1NBTVNVTkdfSVJfUkVNT1RFKSB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9TT05ZLCBVU0JfREVWSUNFX0lEX1NPTllfUFMzX0NPTlRST0xMRVIpIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1NVTlBMVVMsIFVTQl9ERVZJQ0VfSURfU1VOUExVU19XREVTS1RPUCkgfSwKKworCXsgSElEX0JMVUVUT09USF9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9BUFBMRSwgMHgwMzBjKSB9LAorCXsgSElEX0JMVUVUT09USF9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9NSUNST1NPRlQsIFVTQl9ERVZJQ0VfSURfTVNfUFJFU0VOVEVSXzhLX0JUKSB9LAorCXsgfQorfTsKKworc3RhdGljIGludCBoaWRfYnVzX21hdGNoKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9kcml2ZXIgKmRydikKK3sKKwlzdHJ1Y3QgaGlkX2RyaXZlciAqaGRydiA9IGNvbnRhaW5lcl9vZihkcnYsIHN0cnVjdCBoaWRfZHJpdmVyLCBkcml2ZXIpOworCXN0cnVjdCBoaWRfZGV2aWNlICpoZGV2ID0gY29udGFpbmVyX29mKGRldiwgc3RydWN0IGhpZF9kZXZpY2UsIGRldik7CisKKwlpZiAoIWhpZF9tYXRjaF9pZChoZGV2LCBoZHJ2LT5pZF90YWJsZSkpCisJCXJldHVybiAwOworCisJLyogZ2VuZXJpYyB3YW50cyBhbGwgbm9uLWJsYWNrbGlzdGVkICovCisJaWYgKCFzdHJuY21wKGhkcnYtPm5hbWUsICJnZW5lcmljLSIsIDgpKQorCQlyZXR1cm4gIWhpZF9tYXRjaF9pZChoZGV2LCBoaWRfYmxhY2tsaXN0KTsKKworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IGhpZF9kZXZpY2VfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBoaWRfZHJpdmVyICpoZHJ2ID0gY29udGFpbmVyX29mKGRldi0+ZHJpdmVyLAorCQkJc3RydWN0IGhpZF9kcml2ZXIsIGRyaXZlcik7CisJc3RydWN0IGhpZF9kZXZpY2UgKmhkZXYgPSBjb250YWluZXJfb2YoZGV2LCBzdHJ1Y3QgaGlkX2RldmljZSwgZGV2KTsKKwljb25zdCBzdHJ1Y3QgaGlkX2RldmljZV9pZCAqaWQ7CisJaW50IHJldCA9IDA7CisKKwlpZiAoIWhkZXYtPmRyaXZlcikgeworCQlpZCA9IGhpZF9tYXRjaF9pZChoZGV2LCBoZHJ2LT5pZF90YWJsZSk7CisJCWlmIChpZCA9PSBOVUxMKQorCQkJcmV0dXJuIC1FTk9ERVY7CisKKwkJaGRldi0+ZHJpdmVyID0gaGRydjsKKwkJaWYgKGhkcnYtPnByb2JlKSB7CisJCQlyZXQgPSBoZHJ2LT5wcm9iZShoZGV2LCBpZCk7CisJCX0gZWxzZSB7IC8qIGRlZmF1bHQgcHJvYmUgKi8KKwkJCXJldCA9IGhpZF9wYXJzZShoZGV2KTsKKwkJCWlmICghcmV0KQorCQkJCXJldCA9IGhpZF9od19zdGFydChoZGV2LCBISURfQ09OTkVDVF9ERUZBVUxUKTsKKwkJfQorCQlpZiAocmV0KQorCQkJaGRldi0+ZHJpdmVyID0gTlVMTDsKKwl9CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBoaWRfZGV2aWNlX3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGhpZF9kZXZpY2UgKmhkZXYgPSBjb250YWluZXJfb2YoZGV2LCBzdHJ1Y3QgaGlkX2RldmljZSwgZGV2KTsKKwlzdHJ1Y3QgaGlkX2RyaXZlciAqaGRydiA9IGhkZXYtPmRyaXZlcjsKKworCWlmIChoZHJ2KSB7CisJCWlmIChoZHJ2LT5yZW1vdmUpCisJCQloZHJ2LT5yZW1vdmUoaGRldik7CisJCWVsc2UgLyogZGVmYXVsdCByZW1vdmUgKi8KKwkJCWhpZF9od19zdG9wKGhkZXYpOworCQloZGV2LT5kcml2ZXIgPSBOVUxMOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGhpZF91ZXZlbnQoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qga29ial91ZXZlbnRfZW52ICplbnYpCit7CisJc3RydWN0IGhpZF9kZXZpY2UgKmhkZXYgPSBjb250YWluZXJfb2YoZGV2LCBzdHJ1Y3QgaGlkX2RldmljZSwgZGV2KTsKKworCWlmIChhZGRfdWV2ZW50X3ZhcihlbnYsICJISURfSUQ9JTA0WDolMDhYOiUwOFgiLAorCQkJaGRldi0+YnVzLCBoZGV2LT52ZW5kb3IsIGhkZXYtPnByb2R1Y3QpKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWlmIChhZGRfdWV2ZW50X3ZhcihlbnYsICJISURfTkFNRT0lcyIsIGhkZXYtPm5hbWUpKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWlmIChhZGRfdWV2ZW50X3ZhcihlbnYsICJISURfUEhZUz0lcyIsIGhkZXYtPnBoeXMpKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWlmIChhZGRfdWV2ZW50X3ZhcihlbnYsICJISURfVU5JUT0lcyIsIGhkZXYtPnVuaXEpKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWlmIChhZGRfdWV2ZW50X3ZhcihlbnYsICJNT0RBTElBUz1oaWQ6YiUwNFh2JTA4WHAlMDhYIiwKKwkJCWhkZXYtPmJ1cywgaGRldi0+dmVuZG9yLCBoZGV2LT5wcm9kdWN0KSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBidXNfdHlwZSBoaWRfYnVzX3R5cGUgPSB7CisJLm5hbWUJCT0gImhpZCIsCisJLm1hdGNoCQk9IGhpZF9idXNfbWF0Y2gsCisJLnByb2JlCQk9IGhpZF9kZXZpY2VfcHJvYmUsCisJLnJlbW92ZQkJPSBoaWRfZGV2aWNlX3JlbW92ZSwKKwkudWV2ZW50CQk9IGhpZF91ZXZlbnQsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGhpZF9kZXZpY2VfaWQgaGlkX2lnbm9yZV9saXN0W10gPSB7CisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0FDRUNBRCwgVVNCX0RFVklDRV9JRF9BQ0VDQURfRkxBSVIpIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0FDRUNBRCwgVVNCX0RFVklDRV9JRF9BQ0VDQURfMzAyKSB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9BRFNfVEVDSCwgVVNCX0RFVklDRV9JRF9BRFNfVEVDSF9SQURJT19TSTQ3MFgpIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0FJUFRFSywgVVNCX0RFVklDRV9JRF9BSVBURUtfMDEpIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0FJUFRFSywgVVNCX0RFVklDRV9JRF9BSVBURUtfMTApIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0FJUFRFSywgVVNCX0RFVklDRV9JRF9BSVBURUtfMjApIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0FJUFRFSywgVVNCX0RFVklDRV9JRF9BSVBURUtfMjEpIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0FJUFRFSywgVVNCX0RFVklDRV9JRF9BSVBURUtfMjIpIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0FJUFRFSywgVVNCX0RFVklDRV9JRF9BSVBURUtfMjMpIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0FJUFRFSywgVVNCX0RFVklDRV9JRF9BSVBURUtfMjQpIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0FJUkNBQkxFLCBVU0JfREVWSUNFX0lEX0FJUkNBQkxFMSkgfSwKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfQUxDT1IsIFVTQl9ERVZJQ0VfSURfQUxDT1JfVVNCUlMyMzIpIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0FTVVMsIFVTQl9ERVZJQ0VfSURfQVNVU19MQ00pfSwKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfQkVSS1NISVJFLCBVU0JfREVWSUNFX0lEX0JFUktTSElSRV9QQ1dEKSB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9DSURDLCAweDAxMDMpIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0NZR05BTCwgVVNCX0RFVklDRV9JRF9DWUdOQUxfUkFESU9fU0k0NzBYKSB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9DTUVESUEsIFVTQl9ERVZJQ0VfSURfQ00xMDkpIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0NZUFJFU1MsIFVTQl9ERVZJQ0VfSURfQ1lQUkVTU19ISURDT00pIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0NZUFJFU1MsIFVTQl9ERVZJQ0VfSURfQ1lQUkVTU19VTFRSQU1PVVNFKSB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9ERUxPUk1FLCBVU0JfREVWSUNFX0lEX0RFTE9STUVfRUFSVEhNQVRFKSB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9ERUxPUk1FLCBVU0JfREVWSUNFX0lEX0RFTE9STUVfRU1fTFQyMCkgfSwKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfRVNTRU5USUFMX1JFQUxJVFksIFVTQl9ERVZJQ0VfSURfRVNTRU5USUFMX1JFQUxJVFlfUDUpIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0dBTUVST04sIFVTQl9ERVZJQ0VfSURfR0FNRVJPTl9EVUFMX1BTWF9BREFQVE9SKSB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9HRU5FUkFMX1RPVUNILCAweDAwMDEpIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0dFTkVSQUxfVE9VQ0gsIDB4MDAwMikgfSwKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfR0VORVJBTF9UT1VDSCwgMHgwMDAzKSB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9HRU5FUkFMX1RPVUNILCAweDAwMDQpIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0dMQUIsIFVTQl9ERVZJQ0VfSURfNF9QSElER0VUU0VSVk9fMzApIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0dMQUIsIFVTQl9ERVZJQ0VfSURfMV9QSElER0VUU0VSVk9fMzApIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0dMQUIsIFVTQl9ERVZJQ0VfSURfMF8wXzRfSUZfS0lUKSB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9HTEFCLCBVU0JfREVWSUNFX0lEXzBfMTZfMTZfSUZfS0lUKSB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9HTEFCLCBVU0JfREVWSUNFX0lEXzhfOF84X0lGX0tJVCkgfSwKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfR0xBQiwgVVNCX0RFVklDRV9JRF8wXzhfN19JRl9LSVQpIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0dMQUIsIFVTQl9ERVZJQ0VfSURfMF84XzhfSUZfS0lUKSB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9HTEFCLCBVU0JfREVWSUNFX0lEX1BISURHRVRfTU9UT1JDT05UUk9MKSB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9HT1RPUCwgVVNCX0RFVklDRV9JRF9TVVBFUl9RMikgfSwKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfR09UT1AsIFVTQl9ERVZJQ0VfSURfR09HT1BFTikgfSwKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfR09UT1AsIFVTQl9ERVZJQ0VfSURfUEVOUE9XRVIpIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0dSRUVOQVNJQSwgMHgwMDAzKSB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9HUkVUQUdNQUNCRVRILCBVU0JfREVWSUNFX0lEX0dSRVRBR01BQ0JFVEhfSFVFWSkgfSwKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfR1JJRkZJTiwgVVNCX0RFVklDRV9JRF9QT1dFUk1BVEUpIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0dSSUZGSU4sIFVTQl9ERVZJQ0VfSURfU09VTkRLTk9CKSB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9HVENPLCBVU0JfREVWSUNFX0lEX0dUQ09fOTApIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0dUQ08sIFVTQl9ERVZJQ0VfSURfR1RDT18xMDApIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0dUQ08sIFVTQl9ERVZJQ0VfSURfR1RDT18xMDEpIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0dUQ08sIFVTQl9ERVZJQ0VfSURfR1RDT18xMDMpIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0dUQ08sIFVTQl9ERVZJQ0VfSURfR1RDT18xMDQpIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0dUQ08sIFVTQl9ERVZJQ0VfSURfR1RDT18xMDUpIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0dUQ08sIFVTQl9ERVZJQ0VfSURfR1RDT18xMDYpIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0dUQ08sIFVTQl9ERVZJQ0VfSURfR1RDT18xMDcpIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0dUQ08sIFVTQl9ERVZJQ0VfSURfR1RDT18xMDgpIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0dUQ08sIFVTQl9ERVZJQ0VfSURfR1RDT18yMDApIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0dUQ08sIFVTQl9ERVZJQ0VfSURfR1RDT18yMDEpIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0dUQ08sIFVTQl9ERVZJQ0VfSURfR1RDT18yMDIpIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0dUQ08sIFVTQl9ERVZJQ0VfSURfR1RDT18yMDMpIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0dUQ08sIFVTQl9ERVZJQ0VfSURfR1RDT18yMDQpIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0dUQ08sIFVTQl9ERVZJQ0VfSURfR1RDT18yMDUpIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0dUQ08sIFVTQl9ERVZJQ0VfSURfR1RDT18yMDYpIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0dUQ08sIFVTQl9ERVZJQ0VfSURfR1RDT18yMDcpIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0dUQ08sIFVTQl9ERVZJQ0VfSURfR1RDT18zMDApIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0dUQ08sIFVTQl9ERVZJQ0VfSURfR1RDT18zMDEpIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0dUQ08sIFVTQl9ERVZJQ0VfSURfR1RDT18zMDIpIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0dUQ08sIFVTQl9ERVZJQ0VfSURfR1RDT18zMDMpIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0dUQ08sIFVTQl9ERVZJQ0VfSURfR1RDT18zMDQpIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0dUQ08sIFVTQl9ERVZJQ0VfSURfR1RDT18zMDUpIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0dUQ08sIFVTQl9ERVZJQ0VfSURfR1RDT18zMDYpIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0dUQ08sIFVTQl9ERVZJQ0VfSURfR1RDT18zMDcpIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0dUQ08sIFVTQl9ERVZJQ0VfSURfR1RDT18zMDgpIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0dUQ08sIFVTQl9ERVZJQ0VfSURfR1RDT18zMDkpIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0dUQ08sIFVTQl9ERVZJQ0VfSURfR1RDT180MDApIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0dUQ08sIFVTQl9ERVZJQ0VfSURfR1RDT180MDEpIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0dUQ08sIFVTQl9ERVZJQ0VfSURfR1RDT180MDIpIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0dUQ08sIFVTQl9ERVZJQ0VfSURfR1RDT180MDMpIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0dUQ08sIFVTQl9ERVZJQ0VfSURfR1RDT180MDQpIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0dUQ08sIFVTQl9ERVZJQ0VfSURfR1RDT180MDUpIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0dUQ08sIFVTQl9ERVZJQ0VfSURfR1RDT181MDApIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0dUQ08sIFVTQl9ERVZJQ0VfSURfR1RDT181MDEpIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0dUQ08sIFVTQl9ERVZJQ0VfSURfR1RDT181MDIpIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0dUQ08sIFVTQl9ERVZJQ0VfSURfR1RDT181MDMpIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0dUQ08sIFVTQl9ERVZJQ0VfSURfR1RDT181MDQpIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0dUQ08sIFVTQl9ERVZJQ0VfSURfR1RDT18xMDAwKSB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9HVENPLCBVU0JfREVWSUNFX0lEX0dUQ09fMTAwMSkgfSwKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfR1RDTywgVVNCX0RFVklDRV9JRF9HVENPXzEwMDIpIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0dUQ08sIFVTQl9ERVZJQ0VfSURfR1RDT18xMDAzKSB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9HVENPLCBVU0JfREVWSUNFX0lEX0dUQ09fMTAwNCkgfSwKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfR1RDTywgVVNCX0RFVklDRV9JRF9HVENPXzEwMDUpIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0dUQ08sIFVTQl9ERVZJQ0VfSURfR1RDT18xMDA2KSB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9HVENPLCBVU0JfREVWSUNFX0lEX0dUQ09fMTAwNykgfSwKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfSU1BVElPTiwgVVNCX0RFVklDRV9JRF9ESVNDX1NUQUtLQSkgfSwKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfS0JHRUFSLCBVU0JfREVWSUNFX0lEX0tCR0VBUl9KQU1TVFVESU8pIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0tZRSwgVVNCX0RFVklDRV9JRF9LWUVfR1BFTl81NjApIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0xELCBVU0JfREVWSUNFX0lEX0xEX0NBU1NZKSB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9MRCwgVVNCX0RFVklDRV9JRF9MRF9QT0NLRVRDQVNTWSkgfSwKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfTEQsIFVTQl9ERVZJQ0VfSURfTERfTU9CSUxFQ0FTU1kpIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0xELCBVU0JfREVWSUNFX0lEX0xEX0pXTSkgfSwKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfTEQsIFVTQl9ERVZJQ0VfSURfTERfRE1NUCkgfSwKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfTEQsIFVTQl9ERVZJQ0VfSURfTERfVU1JUCkgfSwKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfTEQsIFVTQl9ERVZJQ0VfSURfTERfWFJBWTEpIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0xELCBVU0JfREVWSUNFX0lEX0xEX1hSQVkyKSB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9MRCwgVVNCX0RFVklDRV9JRF9MRF9WSURFT0NPTSkgfSwKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfTEQsIFVTQl9ERVZJQ0VfSURfTERfQ09NM0xBQikgfSwKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfTEQsIFVTQl9ERVZJQ0VfSURfTERfVEVMRVBPUlQpIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0xELCBVU0JfREVWSUNFX0lEX0xEX05FVFdPUktBTkFMWVNFUikgfSwKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfTEQsIFVTQl9ERVZJQ0VfSURfTERfUE9XRVJDT05UUk9MKSB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9MRCwgVVNCX0RFVklDRV9JRF9MRF9NQUNISU5FVEVTVCkgfSwKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfTUNDLCBVU0JfREVWSUNFX0lEX01DQ19QTUQxMDI0TFMpIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX01DQywgVVNCX0RFVklDRV9JRF9NQ0NfUE1EMTIwOExTKSB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9NSUNST0NISVAsIFVTQl9ERVZJQ0VfSURfUElDS0lUMSkgfSwKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfTUlDUk9DSElQLCBVU0JfREVWSUNFX0lEX1BJQ0tJVDIpIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX05BVElPTkFMX1NFTUlDT05EVUNUT1IsIFVTQl9ERVZJQ0VfSURfTl9TX0hBUk1PTlkpIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX09OVFJBSywgVVNCX0RFVklDRV9JRF9PTlRSQUtfQURVMTAwKSB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9PTlRSQUssIFVTQl9ERVZJQ0VfSURfT05UUkFLX0FEVTEwMCArIDIwKSB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9PTlRSQUssIFVTQl9ERVZJQ0VfSURfT05UUkFLX0FEVTEwMCArIDMwKSB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9PTlRSQUssIFVTQl9ERVZJQ0VfSURfT05UUkFLX0FEVTEwMCArIDEwMCkgfSwKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfT05UUkFLLCBVU0JfREVWSUNFX0lEX09OVFJBS19BRFUxMDAgKyAxMDgpIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX09OVFJBSywgVVNCX0RFVklDRV9JRF9PTlRSQUtfQURVMTAwICsgMTE4KSB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9PTlRSQUssIFVTQl9ERVZJQ0VfSURfT05UUkFLX0FEVTEwMCArIDIwMCkgfSwKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfT05UUkFLLCBVU0JfREVWSUNFX0lEX09OVFJBS19BRFUxMDAgKyAzMDApIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX09OVFJBSywgVVNCX0RFVklDRV9JRF9PTlRSQUtfQURVMTAwICsgNDAwKSB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9PTlRSQUssIFVTQl9ERVZJQ0VfSURfT05UUkFLX0FEVTEwMCArIDUwMCkgfSwKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfUEFOSklULCAweDAwMDEpIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1BBTkpJVCwgMHgwMDAyKSB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9QQU5KSVQsIDB4MDAwMykgfSwKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfUEFOSklULCAweDAwMDQpIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1NPVU5ER1JBUEgsIFVTQl9ERVZJQ0VfSURfU09VTkRHUkFQSF9JTU9OX0xDRCkgfSwKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfU09VTkRHUkFQSCwgVVNCX0RFVklDRV9JRF9TT1VOREdSQVBIX0lNT05fTENEMikgfSwKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfU09VTkRHUkFQSCwgVVNCX0RFVklDRV9JRF9TT1VOREdSQVBIX0lNT05fTENEMykgfSwKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfVEVOWCwgVVNCX0RFVklDRV9JRF9URU5YX0lCVUREWTEpIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1RFTlgsIFVTQl9ERVZJQ0VfSURfVEVOWF9JQlVERFkyKSB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9USFJVU1RNQVNURVIsIDB4YjMwMCkgfSwKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfVEhSVVNUTUFTVEVSLCAweGIzMDQpIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1RIUlVTVE1BU1RFUiwgMHhiNjUxKSB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9USFJVU1RNQVNURVIsIDB4YjY1NCkgfSwKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfVkVSTklFUiwgVVNCX0RFVklDRV9JRF9WRVJOSUVSX0xBQlBSTykgfSwKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfVkVSTklFUiwgVVNCX0RFVklDRV9JRF9WRVJOSUVSX0dPVEVNUCkgfSwKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfVkVSTklFUiwgVVNCX0RFVklDRV9JRF9WRVJOSUVSX1NLSVApIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1ZFUk5JRVIsIFVTQl9ERVZJQ0VfSURfVkVSTklFUl9DWUNMT1BTKSB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9WRVJOSUVSLCBVU0JfREVWSUNFX0lEX1ZFUk5JRVJfTENTUEVDKSB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9XQUNPTSwgSElEX0FOWV9JRCkgfSwKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfV0lTRUdST1VQLCBVU0JfREVWSUNFX0lEXzRfUEhJREdFVFNFUlZPXzIwKSB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9XSVNFR1JPVVAsIFVTQl9ERVZJQ0VfSURfMV9QSElER0VUU0VSVk9fMjApIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1dJU0VHUk9VUCwgVVNCX0RFVklDRV9JRF84XzhfNF9JRl9LSVQpIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1lFQUxJTkssIFVTQl9ERVZJQ0VfSURfWUVBTElOS19QMUtfUDRLX0IySykgfSwKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfWkVST1BMVVMsIDB4MDAwNSkgfSwKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfWkVST1BMVVMsIDB4MDAzMCkgfSwKKwl7IH0KK307CisKK3N0YXRpYyBib29sIGhpZF9pZ25vcmUoc3RydWN0IGhpZF9kZXZpY2UgKmhkZXYpCit7CisJc3dpdGNoIChoZGV2LT52ZW5kb3IpIHsKKwljYXNlIFVTQl9WRU5ET1JfSURfQ09ERU1FUkNTOgorCQkvKiBpZ25vcmUgYWxsIENvZGUgTWVyY2VuYXJpZXMgSU9XYXJyaW9yIGRldmljZXMgKi8KKwkJaWYgKGhkZXYtPnByb2R1Y3QgPj0gVVNCX0RFVklDRV9JRF9DT0RFTUVSQ1NfSU9XX0ZJUlNUICYmCisJCQkJaGRldi0+cHJvZHVjdCA8PSBVU0JfREVWSUNFX0lEX0NPREVNRVJDU19JT1dfTEFTVCkKKwkJCXJldHVybiB0cnVlOworCQlicmVhazsKKwljYXNlIFVTQl9WRU5ET1JfSURfTE9HSVRFQ0g6CisJCWlmIChoZGV2LT5wcm9kdWN0ID49IFVTQl9ERVZJQ0VfSURfTE9HSVRFQ0hfSEFSTU9OWV9GSVJTVCAmJgorCQkJCWhkZXYtPnByb2R1Y3QgPD0gVVNCX0RFVklDRV9JRF9MT0dJVEVDSF9IQVJNT05ZX0xBU1QpCisJCQlyZXR1cm4gdHJ1ZTsKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuICEhaGlkX21hdGNoX2lkKGhkZXYsIGhpZF9pZ25vcmVfbGlzdCk7Cit9CisKK2ludCBoaWRfYWRkX2RldmljZShzdHJ1Y3QgaGlkX2RldmljZSAqaGRldikKK3sKKwlzdGF0aWMgYXRvbWljX3QgaWQgPSBBVE9NSUNfSU5JVCgwKTsKKwlpbnQgcmV0OworCisJaWYgKFdBUk5fT04oaGRldi0+c3RhdHVzICYgSElEX1NUQVRfQURERUQpKQorCQlyZXR1cm4gLUVCVVNZOworCisJLyogd2UgbmVlZCB0byBraWxsIHRoZW0gaGVyZSwgb3RoZXJ3aXNlIHRoZXkgd2lsbCBzdGF5IGFsbG9jYXRlZCB0bworCSAqIHdhaXQgZm9yIGNvbWluZyBkcml2ZXIgKi8KKwlpZiAoaGlkX2lnbm9yZShoZGV2KSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwkvKiBYWFggaGFjaywgYW55IG90aGVyIGNsZWFuZXIgc29sdXRpb24gPCAyMCBidXNfaWQgYnl0ZXM/ICovCisJc3ByaW50ZihoZGV2LT5kZXYuYnVzX2lkLCAiJTA0WDolMDRYOiUwNFguJTA0WCIsIGhkZXYtPmJ1cywKKwkJCWhkZXYtPnZlbmRvciwgaGRldi0+cHJvZHVjdCwgYXRvbWljX2luY19yZXR1cm4oJmlkKSk7CisKKwlyZXQgPSBkZXZpY2VfYWRkKCZoZGV2LT5kZXYpOworCWlmICghcmV0KQorCQloZGV2LT5zdGF0dXMgfD0gSElEX1NUQVRfQURERUQ7CisKKwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTF9HUEwoaGlkX2FkZF9kZXZpY2UpOworCisvKioKKyAqIGhpZF9hbGxvY2F0ZV9kZXZpY2UgLSBhbGxvY2F0ZSBuZXcgaGlkIGRldmljZSBkZXNjcmlwdG9yCisgKgorICogQWxsb2NhdGUgYW5kIGluaXRpYWxpemUgaGlkIGRldmljZSwgc28gdGhhdCBoaWRfZGVzdHJveV9kZXZpY2UgbWlnaHQgYmUKKyAqIHVzZWQgdG8gZnJlZSBpdC4KKyAqCisgKiBOZXcgaGlkX2RldmljZSBwb2ludGVyIGlzIHJldHVybmVkIG9uIHN1Y2Nlc3MsIG90aGVyd2lzZSBFUlJfUFRSIGVuY29kZWQKKyAqIGVycm9yIHZhbHVlLgorICovCitzdHJ1Y3QgaGlkX2RldmljZSAqaGlkX2FsbG9jYXRlX2RldmljZSh2b2lkKQoreworCXN0cnVjdCBoaWRfZGV2aWNlICpoZGV2OworCXVuc2lnbmVkIGludCBpOworCWludCByZXQgPSAtRU5PTUVNOworCisJaGRldiA9IGt6YWxsb2Moc2l6ZW9mKCpoZGV2KSwgR0ZQX0tFUk5FTCk7CisJaWYgKGhkZXYgPT0gTlVMTCkKKwkJcmV0dXJuIEVSUl9QVFIocmV0KTsKKworCWRldmljZV9pbml0aWFsaXplKCZoZGV2LT5kZXYpOworCWhkZXYtPmRldi5yZWxlYXNlID0gaGlkX2RldmljZV9yZWxlYXNlOworCWhkZXYtPmRldi5idXMgPSAmaGlkX2J1c190eXBlOworCisJaGRldi0+Y29sbGVjdGlvbiA9IGtjYWxsb2MoSElEX0RFRkFVTFRfTlVNX0NPTExFQ1RJT05TLAorCQkJc2l6ZW9mKHN0cnVjdCBoaWRfY29sbGVjdGlvbiksIEdGUF9LRVJORUwpOworCWlmIChoZGV2LT5jb2xsZWN0aW9uID09IE5VTEwpCisJCWdvdG8gZXJyOworCWhkZXYtPmNvbGxlY3Rpb25fc2l6ZSA9IEhJRF9ERUZBVUxUX05VTV9DT0xMRUNUSU9OUzsKKworCWZvciAoaSA9IDA7IGkgPCBISURfUkVQT1JUX1RZUEVTOyBpKyspCisJCUlOSVRfTElTVF9IRUFEKCZoZGV2LT5yZXBvcnRfZW51bVtpXS5yZXBvcnRfbGlzdCk7CisKKwlyZXR1cm4gaGRldjsKK2VycjoKKwlwdXRfZGV2aWNlKCZoZGV2LT5kZXYpOworCXJldHVybiBFUlJfUFRSKHJldCk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChoaWRfYWxsb2NhdGVfZGV2aWNlKTsKKworc3RhdGljIHZvaWQgaGlkX3JlbW92ZV9kZXZpY2Uoc3RydWN0IGhpZF9kZXZpY2UgKmhkZXYpCit7CisJaWYgKGhkZXYtPnN0YXR1cyAmIEhJRF9TVEFUX0FEREVEKSB7CisJCWRldmljZV9kZWwoJmhkZXYtPmRldik7CisJCWhkZXYtPnN0YXR1cyAmPSB+SElEX1NUQVRfQURERUQ7CisJfQorfQorCisvKioKKyAqIGhpZF9kZXN0cm95X2RldmljZSAtIGZyZWUgcHJldmlvdXNseSBhbGxvY2F0ZWQgZGV2aWNlCisgKgorICogQGhkZXY6IGhpZCBkZXZpY2UKKyAqCisgKiBJZiB5b3UgYWxsb2NhdGUgaGlkX2RldmljZSB0aHJvdWdoIGhpZF9hbGxvY2F0ZV9kZXZpY2UsIHlvdSBzaG91bGQgZXZlcgorICogZnJlZSBieSB0aGlzIGZ1bmN0aW9uLgorICovCit2b2lkIGhpZF9kZXN0cm95X2RldmljZShzdHJ1Y3QgaGlkX2RldmljZSAqaGRldikKK3sKKwloaWRfcmVtb3ZlX2RldmljZShoZGV2KTsKKwlwdXRfZGV2aWNlKCZoZGV2LT5kZXYpOworfQorRVhQT1JUX1NZTUJPTF9HUEwoaGlkX2Rlc3Ryb3lfZGV2aWNlKTsKKworaW50IF9faGlkX3JlZ2lzdGVyX2RyaXZlcihzdHJ1Y3QgaGlkX2RyaXZlciAqaGRydiwgc3RydWN0IG1vZHVsZSAqb3duZXIsCisJCWNvbnN0IGNoYXIgKm1vZF9uYW1lKQoreworCWhkcnYtPmRyaXZlci5uYW1lID0gaGRydi0+bmFtZTsKKwloZHJ2LT5kcml2ZXIuYnVzID0gJmhpZF9idXNfdHlwZTsKKwloZHJ2LT5kcml2ZXIub3duZXIgPSBvd25lcjsKKwloZHJ2LT5kcml2ZXIubW9kX25hbWUgPSBtb2RfbmFtZTsKKworCXJldHVybiBkcml2ZXJfcmVnaXN0ZXIoJmhkcnYtPmRyaXZlcik7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChfX2hpZF9yZWdpc3Rlcl9kcml2ZXIpOworCit2b2lkIGhpZF91bnJlZ2lzdGVyX2RyaXZlcihzdHJ1Y3QgaGlkX2RyaXZlciAqaGRydikKK3sKKwlkcml2ZXJfdW5yZWdpc3RlcigmaGRydi0+ZHJpdmVyKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGhpZF91bnJlZ2lzdGVyX2RyaXZlcik7CisKKyNpZmRlZiBDT05GSUdfSElEX0NPTVBBVAorc3RhdGljIHZvaWQgaGlkX2NvbXBhdF9sb2FkKHN0cnVjdCB3b3JrX3N0cnVjdCAqd3MpCit7CisJcmVxdWVzdF9tb2R1bGUoImhpZC1kdW1teSIpOworfQorc3RhdGljIERFQ0xBUkVfV09SSyhoaWRfY29tcGF0X3dvcmssIGhpZF9jb21wYXRfbG9hZCk7CitzdGF0aWMgc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKmhpZF9jb21wYXRfd3E7CisjZW5kaWYKKwogc3RhdGljIGludCBfX2luaXQgaGlkX2luaXQodm9pZCkKIHsKLQlyZXR1cm4gaGlkcmF3X2luaXQoKTsKKwlpbnQgcmV0OworCisJcmV0ID0gYnVzX3JlZ2lzdGVyKCZoaWRfYnVzX3R5cGUpOworCWlmIChyZXQpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJISUQ6IGNhbid0IHJlZ2lzdGVyIGhpZCBidXNcbiIpOworCQlnb3RvIGVycjsKKwl9CisKKwlyZXQgPSBoaWRyYXdfaW5pdCgpOworCWlmIChyZXQpCisJCWdvdG8gZXJyX2J1czsKKworI2lmZGVmIENPTkZJR19ISURfQ09NUEFUCisJaGlkX2NvbXBhdF93cSA9IGNyZWF0ZV93b3JrcXVldWUoImhpZF9jb21wYXQiKTsKKwlpZiAoIWhpZF9jb21wYXRfd3EpIHsKKwkJaGlkcmF3X2V4aXQoKTsKKwkJZ290byBlcnI7CisJfQorCXF1ZXVlX3dvcmsoaGlkX2NvbXBhdF93cSwgJmhpZF9jb21wYXRfd29yayk7CisjZW5kaWYKKworCXJldHVybiAwOworZXJyX2J1czoKKwlidXNfdW5yZWdpc3RlcigmaGlkX2J1c190eXBlKTsKK2VycjoKKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgaGlkX2V4aXQodm9pZCkKIHsKKyNpZmRlZiBDT05GSUdfSElEX0NPTVBBVAorCWRlc3Ryb3lfd29ya3F1ZXVlKGhpZF9jb21wYXRfd3EpOworI2VuZGlmCiAJaGlkcmF3X2V4aXQoKTsKKwlidXNfdW5yZWdpc3RlcigmaGlkX2J1c190eXBlKTsKIH0KIAogbW9kdWxlX2luaXQoaGlkX2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9oaWQvaGlkLWN5cHJlc3MuYyBiL2RyaXZlcnMvaGlkL2hpZC1jeXByZXNzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWQ2OWQyNwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvaGlkL2hpZC1jeXByZXNzLmMKQEAgLTAsMCArMSwxNTggQEAKKy8qCisgKiAgSElEIGRyaXZlciBmb3Igc29tZSBjeXByZXNzICJzcGVjaWFsIiBkZXZpY2VzCisgKgorICogIENvcHlyaWdodCAoYykgMTk5OSBBbmRyZWFzIEdhbAorICogIENvcHlyaWdodCAoYykgMjAwMC0yMDA1IFZvanRlY2ggUGF2bGlrIDx2b2p0ZWNoQHN1c2UuY3o+CisgKiAgQ29weXJpZ2h0IChjKSAyMDA1IE1pY2hhZWwgSGFib3VzdGFrIDxtaWtlLUBjaW5jaS5yci5jb20+IGZvciBDb25jZXB0MiwgSW5jCisgKiAgQ29weXJpZ2h0IChjKSAyMDA2LTIwMDcgSmlyaSBLb3NpbmEKKyAqICBDb3B5cmlnaHQgKGMpIDIwMDcgUGF1bCBXYWxtc2xleQorICogIENvcHlyaWdodCAoYykgMjAwOCBKaXJpIFNsYWJ5CisgKi8KKworLyoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorICogU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKQorICogYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2hpZC5oPgorI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisKKyNpbmNsdWRlICJoaWQtaWRzLmgiCisKKyNkZWZpbmUgQ1BfUkRFU0NfU1dBUFBFRF9NSU5fTUFYCTB4MDEKKyNkZWZpbmUgQ1BfMldIRUVMX01PVVNFX0hBQ0sJCTB4MDIKKyNkZWZpbmUgQ1BfMldIRUVMX01PVVNFX0hBQ0tfT04JCTB4MDQKKworLyoKKyAqIFNvbWUgVVNCIGJhcmNvZGUgcmVhZGVycyBmcm9tIGN5cHJlc3MgaGF2ZSB1c2FnZSBtaW4gYW5kIHVzYWdlIG1heCBpbgorICogdGhlIHdyb25nIG9yZGVyCisgKi8KK3N0YXRpYyB2b2lkIGNwX3JlcG9ydF9maXh1cChzdHJ1Y3QgaGlkX2RldmljZSAqaGRldiwgX191OCAqcmRlc2MsCisJCXVuc2lnbmVkIGludCByc2l6ZSkKK3sKKwl1bnNpZ25lZCBsb25nIHF1aXJrcyA9ICh1bnNpZ25lZCBsb25nKWhpZF9nZXRfZHJ2ZGF0YShoZGV2KTsKKwl1bnNpZ25lZCBpbnQgaTsKKworCWlmICghKHF1aXJrcyAmIENQX1JERVNDX1NXQVBQRURfTUlOX01BWCkpCisJCXJldHVybjsKKworCWZvciAoaSA9IDA7IGkgPCByc2l6ZSAtIDQ7IGkrKykKKwkJaWYgKHJkZXNjW2ldID09IDB4MjkgJiYgcmRlc2NbaSArIDJdID09IDB4MTkpIHsKKwkJCV9fdTggdG1wOworCisJCQlyZGVzY1tpXSA9IDB4MTk7CisJCQlyZGVzY1tpICsgMl0gPSAweDI5OworCQkJdG1wID0gcmRlc2NbaSArIDNdOworCQkJcmRlc2NbaSArIDNdID0gcmRlc2NbaSArIDFdOworCQkJcmRlc2NbaSArIDFdID0gdG1wOworCQl9Cit9CisKK3N0YXRpYyBpbnQgY3BfaW5wdXRfbWFwcGVkKHN0cnVjdCBoaWRfZGV2aWNlICpoZGV2LCBzdHJ1Y3QgaGlkX2lucHV0ICpoaSwKKwkJc3RydWN0IGhpZF9maWVsZCAqZmllbGQsIHN0cnVjdCBoaWRfdXNhZ2UgKnVzYWdlLAorCQl1bnNpZ25lZCBsb25nICoqYml0LCBpbnQgKm1heCkKK3sKKwl1bnNpZ25lZCBsb25nIHF1aXJrcyA9ICh1bnNpZ25lZCBsb25nKWhpZF9nZXRfZHJ2ZGF0YShoZGV2KTsKKworCWlmICghKHF1aXJrcyAmIENQXzJXSEVFTF9NT1VTRV9IQUNLKSkKKwkJcmV0dXJuIDA7CisKKwlpZiAodXNhZ2UtPnR5cGUgPT0gRVZfUkVMICYmIHVzYWdlLT5jb2RlID09IFJFTF9XSEVFTCkKKwkJc2V0X2JpdChSRUxfSFdIRUVMLCAqYml0KTsKKwlpZiAodXNhZ2UtPmhpZCA9PSAweDAwMDkwMDA1KQorCQlyZXR1cm4gLTE7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjcF9ldmVudChzdHJ1Y3QgaGlkX2RldmljZSAqaGRldiwgc3RydWN0IGhpZF9maWVsZCAqZmllbGQsCisJCXN0cnVjdCBoaWRfdXNhZ2UgKnVzYWdlLCBfX3MzMiB2YWx1ZSkKK3sKKwl1bnNpZ25lZCBsb25nIHF1aXJrcyA9ICh1bnNpZ25lZCBsb25nKWhpZF9nZXRfZHJ2ZGF0YShoZGV2KTsKKworCWlmICghKGhkZXYtPmNsYWltZWQgJiBISURfQ0xBSU1FRF9JTlBVVCkgfHwgIWZpZWxkLT5oaWRpbnB1dCB8fAorCQkJIXVzYWdlLT50eXBlIHx8ICEocXVpcmtzICYgQ1BfMldIRUVMX01PVVNFX0hBQ0spKQorCQlyZXR1cm4gMDsKKworCWlmICh1c2FnZS0+aGlkID09IDB4MDAwOTAwMDUpIHsKKwkJaWYgKHZhbHVlKQorCQkJcXVpcmtzIHw9ICBDUF8yV0hFRUxfTU9VU0VfSEFDS19PTjsKKwkJZWxzZQorCQkJcXVpcmtzICY9IH5DUF8yV0hFRUxfTU9VU0VfSEFDS19PTjsKKwkJaGlkX3NldF9kcnZkYXRhKGhkZXYsICh2b2lkICopcXVpcmtzKTsKKwkJcmV0dXJuIDE7CisJfQorCisJaWYgKHVzYWdlLT5jb2RlID09IFJFTF9XSEVFTCAmJiAocXVpcmtzICYgQ1BfMldIRUVMX01PVVNFX0hBQ0tfT04pKSB7CisJCXN0cnVjdCBpbnB1dF9kZXYgKmlucHV0ID0gZmllbGQtPmhpZGlucHV0LT5pbnB1dDsKKworCQlpbnB1dF9ldmVudChpbnB1dCwgdXNhZ2UtPnR5cGUsIFJFTF9IV0hFRUwsIHZhbHVlKTsKKwkJcmV0dXJuIDE7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY3BfcHJvYmUoc3RydWN0IGhpZF9kZXZpY2UgKmhkZXYsIGNvbnN0IHN0cnVjdCBoaWRfZGV2aWNlX2lkICppZCkKK3sKKwl1bnNpZ25lZCBsb25nIHF1aXJrcyA9IGlkLT5kcml2ZXJfZGF0YTsKKwlpbnQgcmV0OworCisJaGlkX3NldF9kcnZkYXRhKGhkZXYsICh2b2lkICopcXVpcmtzKTsKKworCXJldCA9IGhpZF9wYXJzZShoZGV2KTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoJmhkZXYtPmRldiwgInBhcnNlIGZhaWxlZFxuIik7CisJCWdvdG8gZXJyX2ZyZWU7CisJfQorCisJcmV0ID0gaGlkX2h3X3N0YXJ0KGhkZXYsIEhJRF9DT05ORUNUX0RFRkFVTFQpOworCWlmIChyZXQpIHsKKwkJZGV2X2VycigmaGRldi0+ZGV2LCAiaHcgc3RhcnQgZmFpbGVkXG4iKTsKKwkJZ290byBlcnJfZnJlZTsKKwl9CisKKwlyZXR1cm4gMDsKK2Vycl9mcmVlOgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGlkX2RldmljZV9pZCBjcF9kZXZpY2VzW10gPSB7CisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0NZUFJFU1MsIFVTQl9ERVZJQ0VfSURfQ1lQUkVTU19CQVJDT0RFXzEpLAorCQkuZHJpdmVyX2RhdGEgPSBDUF9SREVTQ19TV0FQUEVEX01JTl9NQVggfSwKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfQ1lQUkVTUywgVVNCX0RFVklDRV9JRF9DWVBSRVNTX0JBUkNPREVfMiksCisJCS5kcml2ZXJfZGF0YSA9IENQX1JERVNDX1NXQVBQRURfTUlOX01BWCB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9DWVBSRVNTLCBVU0JfREVWSUNFX0lEX0NZUFJFU1NfTU9VU0UpLAorCQkuZHJpdmVyX2RhdGEgPSBDUF8yV0hFRUxfTU9VU0VfSEFDSyB9LAorCXsgfQorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUoaGlkLCBjcF9kZXZpY2VzKTsKKworc3RhdGljIHN0cnVjdCBoaWRfZHJpdmVyIGNwX2RyaXZlciA9IHsKKwkubmFtZSA9ICJjeXByZXNzIiwKKwkuaWRfdGFibGUgPSBjcF9kZXZpY2VzLAorCS5yZXBvcnRfZml4dXAgPSBjcF9yZXBvcnRfZml4dXAsCisJLmlucHV0X21hcHBlZCA9IGNwX2lucHV0X21hcHBlZCwKKwkuZXZlbnQgPSBjcF9ldmVudCwKKwkucHJvYmUgPSBjcF9wcm9iZSwKK307CisKK3N0YXRpYyBpbnQgY3BfaW5pdCh2b2lkKQoreworCXJldHVybiBoaWRfcmVnaXN0ZXJfZHJpdmVyKCZjcF9kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBjcF9leGl0KHZvaWQpCit7CisJaGlkX3VucmVnaXN0ZXJfZHJpdmVyKCZjcF9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChjcF9pbml0KTsKK21vZHVsZV9leGl0KGNwX2V4aXQpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCitISURfQ09NUEFUX0xPQURfRFJJVkVSKGN5cHJlc3MpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9oaWQvaGlkLWRlbGwuYyBiL2RyaXZlcnMvaGlkL2hpZC1kZWxsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWEwZDBkZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvaGlkL2hpZC1kZWxsLmMKQEAgLTAsMCArMSw3NSBAQAorLyoKKyAqICBISUQgZHJpdmVyIGZvciBzb21lIGRlbGwgInNwZWNpYWwiIGRldmljZXMKKyAqCisgKiAgQ29weXJpZ2h0IChjKSAxOTk5IEFuZHJlYXMgR2FsCisgKiAgQ29weXJpZ2h0IChjKSAyMDAwLTIwMDUgVm9qdGVjaCBQYXZsaWsgPHZvanRlY2hAc3VzZS5jej4KKyAqICBDb3B5cmlnaHQgKGMpIDIwMDUgTWljaGFlbCBIYWJvdXN0YWsgPG1pa2UtQGNpbmNpLnJyLmNvbT4gZm9yIENvbmNlcHQyLCBJbmMKKyAqICBDb3B5cmlnaHQgKGMpIDIwMDYtMjAwNyBKaXJpIEtvc2luYQorICogIENvcHlyaWdodCAoYykgMjAwNyBQYXVsIFdhbG1zbGV5CisgKiAgQ29weXJpZ2h0IChjKSAyMDA4IEppcmkgU2xhYnkKKyAqLworCisvKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgKiBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pCisgKiBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvaGlkLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisKKyNpbmNsdWRlICJoaWQtaWRzLmgiCisKK3N0YXRpYyBpbnQgZGVsbF9wcm9iZShzdHJ1Y3QgaGlkX2RldmljZSAqaGRldiwgY29uc3Qgc3RydWN0IGhpZF9kZXZpY2VfaWQgKmlkKQoreworCWludCByZXQ7CisKKwlyZXQgPSBoaWRfcGFyc2UoaGRldik7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKCZoZGV2LT5kZXYsICJwYXJzZSBmYWlsZWRcbiIpOworCQlnb3RvIGVycl9mcmVlOworCX0KKworCXJldCA9IGhpZF9od19zdGFydChoZGV2LCBISURfQ09OTkVDVF9ERUZBVUxUKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoJmhkZXYtPmRldiwgImh3IHN0YXJ0IGZhaWxlZFxuIik7CisJCWdvdG8gZXJyX2ZyZWU7CisJfQorCisJdXNiaGlkX3NldF9sZWRzKGhkZXYpOworCisJcmV0dXJuIDA7CitlcnJfZnJlZToKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGhpZF9kZXZpY2VfaWQgZGVsbF9kZXZpY2VzW10gPSB7CisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0RFTEwsIFVTQl9ERVZJQ0VfSURfREVMTF9XNzY1OCkgfSwKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfREVMTCwgVVNCX0RFVklDRV9JRF9ERUxMX1NLODExNSkgfSwKKwl7IH0KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKGhpZCwgZGVsbF9kZXZpY2VzKTsKKworc3RhdGljIHN0cnVjdCBoaWRfZHJpdmVyIGRlbGxfZHJpdmVyID0geworCS5uYW1lID0gImRlbGwiLAorCS5pZF90YWJsZSA9IGRlbGxfZGV2aWNlcywKKwkucHJvYmUgPSBkZWxsX3Byb2JlLAorfTsKKworc3RhdGljIGludCBkZWxsX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gaGlkX3JlZ2lzdGVyX2RyaXZlcigmZGVsbF9kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBkZWxsX2V4aXQodm9pZCkKK3sKKwloaWRfdW5yZWdpc3Rlcl9kcml2ZXIoJmRlbGxfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQoZGVsbF9pbml0KTsKK21vZHVsZV9leGl0KGRlbGxfZXhpdCk7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKK0hJRF9DT01QQVRfTE9BRF9EUklWRVIoZGVsbCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2hpZC9oaWQtZHVtbXkuYyBiL2RyaXZlcnMvaGlkL2hpZC1kdW1teS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUxNDhmODYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2hpZC9oaWQtZHVtbXkuYwpAQCAtMCwwICsxLDcyIEBACisjaW5jbHVkZSA8bGludXgvYXV0b2NvbmYuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9oaWQuaD4KKworc3RhdGljIGludCBfX2luaXQgaGlkX2R1bW15X2luaXQodm9pZCkKK3sKKyNpZmRlZiBDT05GSUdfSElEX0E0VEVDSF9NT0RVTEUKKwlISURfQ09NUEFUX0NBTExfRFJJVkVSKGE0dGVjaCk7CisjZW5kaWYKKyNpZmRlZiBDT05GSUdfSElEX0FQUExFX01PRFVMRQorCUhJRF9DT01QQVRfQ0FMTF9EUklWRVIoYXBwbGUpOworI2VuZGlmCisjaWZkZWYgQ09ORklHX0hJRF9CRUxLSU5fTU9EVUxFCisJSElEX0NPTVBBVF9DQUxMX0RSSVZFUihiZWxraW4pOworI2VuZGlmCisjaWZkZWYgQ09ORklHX0hJRF9CUklHSFRfTU9EVUxFCisJSElEX0NPTVBBVF9DQUxMX0RSSVZFUihicmlnaHQpOworI2VuZGlmCisjaWZkZWYgQ09ORklHX0hJRF9DSEVSUllfTU9EVUxFCisJSElEX0NPTVBBVF9DQUxMX0RSSVZFUihjaGVycnkpOworI2VuZGlmCisjaWZkZWYgQ09ORklHX0hJRF9DSElDT05ZX01PRFVMRQorCUhJRF9DT01QQVRfQ0FMTF9EUklWRVIoY2hpY29ueSk7CisjZW5kaWYKKyNpZmRlZiBDT05GSUdfSElEX0NZUFJFU1NfTU9EVUxFCisJSElEX0NPTVBBVF9DQUxMX0RSSVZFUihjeXByZXNzKTsKKyNlbmRpZgorI2lmZGVmIENPTkZJR19ISURfREVMTF9NT0RVTEUKKwlISURfQ09NUEFUX0NBTExfRFJJVkVSKGRlbGwpOworI2VuZGlmCisjaWZkZWYgQ09ORklHX0hJRF9FWktFWV9NT0RVTEUKKwlISURfQ09NUEFUX0NBTExfRFJJVkVSKGV6a2V5KTsKKyNlbmRpZgorI2lmZGVmIENPTkZJR19ISURfR1lSQVRJT05fTU9EVUxFCisJSElEX0NPTVBBVF9DQUxMX0RSSVZFUihneXJhdGlvbik7CisjZW5kaWYKKyNpZmRlZiBDT05GSUdfSElEX0xPR0lURUNIX01PRFVMRQorCUhJRF9DT01QQVRfQ0FMTF9EUklWRVIobG9naXRlY2gpOworI2VuZGlmCisjaWZkZWYgQ09ORklHX0hJRF9NSUNST1NPRlRfTU9EVUxFCisJSElEX0NPTVBBVF9DQUxMX0RSSVZFUihtaWNyb3NvZnQpOworI2VuZGlmCisjaWZkZWYgQ09ORklHX0hJRF9NT05URVJFWV9NT0RVTEUKKwlISURfQ09NUEFUX0NBTExfRFJJVkVSKG1vbnRlcmV5KTsKKyNlbmRpZgorI2lmZGVmIENPTkZJR19ISURfUEFOVEhFUkxPUkRfTU9EVUxFCisJSElEX0NPTVBBVF9DQUxMX0RSSVZFUihwYW50aGVybG9yZCk7CisjZW5kaWYKKyNpZmRlZiBDT05GSUdfSElEX1BFVEFMWU5YX01PRFVMRQorCUhJRF9DT01QQVRfQ0FMTF9EUklWRVIocGV0YWx5bngpOworI2VuZGlmCisjaWZkZWYgQ09ORklHX0hJRF9TQU1TVU5HX01PRFVMRQorCUhJRF9DT01QQVRfQ0FMTF9EUklWRVIoc2Ftc3VuZyk7CisjZW5kaWYKKyNpZmRlZiBDT05GSUdfSElEX1NPTllfTU9EVUxFCisJSElEX0NPTVBBVF9DQUxMX0RSSVZFUihzb255KTsKKyNlbmRpZgorI2lmZGVmIENPTkZJR19ISURfU1VOUExVU19NT0RVTEUKKwlISURfQ09NUEFUX0NBTExfRFJJVkVSKHN1bnBsdXMpOworI2VuZGlmCisjaWZkZWYgQ09ORklHX1RIUlVTVE1BU1RFUl9GRl9NT0RVTEUKKwlISURfQ09NUEFUX0NBTExfRFJJVkVSKHRocnVzdG1hc3Rlcik7CisjZW5kaWYKKyNpZmRlZiBDT05GSUdfWkVST1BMVVNfRkZfTU9EVUxFCisJSElEX0NPTVBBVF9DQUxMX0RSSVZFUih6ZXJvcGx1cyk7CisjZW5kaWYKKworCXJldHVybiAtRUlPOworfQorbW9kdWxlX2luaXQoaGlkX2R1bW15X2luaXQpOworCitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2hpZC9oaWQtZXprZXkuYyBiL2RyaXZlcnMvaGlkL2hpZC1lemtleS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlYjQyZjkKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2hpZC9oaWQtZXprZXkuYwpAQCAtMCwwICsxLDk1IEBACisvKgorICogIEhJRCBkcml2ZXIgZm9yIHNvbWUgZXprZXkgInNwZWNpYWwiIGRldmljZXMKKyAqCisgKiAgQ29weXJpZ2h0IChjKSAxOTk5IEFuZHJlYXMgR2FsCisgKiAgQ29weXJpZ2h0IChjKSAyMDAwLTIwMDUgVm9qdGVjaCBQYXZsaWsgPHZvanRlY2hAc3VzZS5jej4KKyAqICBDb3B5cmlnaHQgKGMpIDIwMDUgTWljaGFlbCBIYWJvdXN0YWsgPG1pa2UtQGNpbmNpLnJyLmNvbT4gZm9yIENvbmNlcHQyLCBJbmMKKyAqICBDb3B5cmlnaHQgKGMpIDIwMDYtMjAwNyBKaXJpIEtvc2luYQorICogIENvcHlyaWdodCAoYykgMjAwNyBQYXVsIFdhbG1zbGV5CisgKiAgQ29weXJpZ2h0IChjKSAyMDA4IEppcmkgU2xhYnkKKyAqLworCisvKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgKiBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pCisgKiBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KKyNpbmNsdWRlIDxsaW51eC9oaWQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKworI2luY2x1ZGUgImhpZC1pZHMuaCIKKworI2RlZmluZSBlel9tYXBfcmVsKGMpCWhpZF9tYXBfdXNhZ2UoaGksIHVzYWdlLCBiaXQsIG1heCwgRVZfUkVMLCAoYykpCisjZGVmaW5lIGV6X21hcF9rZXkoYykJaGlkX21hcF91c2FnZShoaSwgdXNhZ2UsIGJpdCwgbWF4LCBFVl9LRVksIChjKSkKKworc3RhdGljIGludCBlel9pbnB1dF9tYXBwaW5nKHN0cnVjdCBoaWRfZGV2aWNlICpoZGV2LCBzdHJ1Y3QgaGlkX2lucHV0ICpoaSwKKwkJc3RydWN0IGhpZF9maWVsZCAqZmllbGQsIHN0cnVjdCBoaWRfdXNhZ2UgKnVzYWdlLAorCQl1bnNpZ25lZCBsb25nICoqYml0LCBpbnQgKm1heCkKK3sKKwlpZiAoKHVzYWdlLT5oaWQgJiBISURfVVNBR0VfUEFHRSkgIT0gSElEX1VQX0NPTlNVTUVSKQorCQlyZXR1cm4gMDsKKworCXN3aXRjaCAodXNhZ2UtPmhpZCAmIEhJRF9VU0FHRSkgeworCWNhc2UgMHgyMzA6IGV6X21hcF9rZXkoQlROX01PVVNFKTsJYnJlYWs7CisJY2FzZSAweDIzMTogZXpfbWFwX3JlbChSRUxfV0hFRUwpOwlicmVhazsKKwkvKgorCSAqIHRoaXMga2V5Ym9hcmQgaGFzIGEgc2Nyb2xsd2hlZWwgaW1wbGVtZW50ZWQgaW4KKwkgKiB0b3RhbGx5IGJyb2tlbiB3YXkuIFdlIG1hcCB0aGlzIHVzYWdlIHRlbXBvcmFyaWx5CisJICogdG8gSFdIRUVMIGFuZCBoYW5kbGUgaXQgaW4gdGhlIGV2ZW50IHF1aXJrIGhhbmRsZXIKKwkgKi8KKwljYXNlIDB4MjMyOiBlel9tYXBfcmVsKFJFTF9IV0hFRUwpOwlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gMDsKKwl9CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgZXpfZXZlbnQoc3RydWN0IGhpZF9kZXZpY2UgKmhkZXYsIHN0cnVjdCBoaWRfZmllbGQgKmZpZWxkLAorCQlzdHJ1Y3QgaGlkX3VzYWdlICp1c2FnZSwgX19zMzIgdmFsdWUpCit7CisJaWYgKCEoaGRldi0+Y2xhaW1lZCAmIEhJRF9DTEFJTUVEX0lOUFVUKSB8fCAhZmllbGQtPmhpZGlucHV0IHx8CisJCQkhdXNhZ2UtPnR5cGUpCisJCXJldHVybiAwOworCisJLyogaGFuZGxlIHRoZSB0ZW1wb3JhcnkgcXVpcmt5IG1hcHBpbmcgdG8gSFdIRUVMICovCisJaWYgKHVzYWdlLT50eXBlID09IEVWX1JFTCAmJiB1c2FnZS0+Y29kZSA9PSBSRUxfSFdIRUVMKSB7CisJCXN0cnVjdCBpbnB1dF9kZXYgKmlucHV0ID0gZmllbGQtPmhpZGlucHV0LT5pbnB1dDsKKwkJaW5wdXRfZXZlbnQoaW5wdXQsIHVzYWdlLT50eXBlLCBSRUxfV0hFRUwsIC12YWx1ZSk7CisJCXJldHVybiAxOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGhpZF9kZXZpY2VfaWQgZXpfZGV2aWNlc1tdID0geworCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9FWktFWSwgVVNCX0RFVklDRV9JRF9CVENfODE5MykgfSwKKwl7IH0KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKGhpZCwgZXpfZGV2aWNlcyk7CisKK3N0YXRpYyBzdHJ1Y3QgaGlkX2RyaXZlciBlel9kcml2ZXIgPSB7CisJLm5hbWUgPSAiZXprZXkiLAorCS5pZF90YWJsZSA9IGV6X2RldmljZXMsCisJLmlucHV0X21hcHBpbmcgPSBlel9pbnB1dF9tYXBwaW5nLAorCS5ldmVudCA9IGV6X2V2ZW50LAorfTsKKworc3RhdGljIGludCBlel9pbml0KHZvaWQpCit7CisJcmV0dXJuIGhpZF9yZWdpc3Rlcl9kcml2ZXIoJmV6X2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIGV6X2V4aXQodm9pZCkKK3sKKwloaWRfdW5yZWdpc3Rlcl9kcml2ZXIoJmV6X2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KGV6X2luaXQpOworbW9kdWxlX2V4aXQoZXpfZXhpdCk7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKK0hJRF9DT01QQVRfTE9BRF9EUklWRVIoZXprZXkpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9oaWQvaGlkLWd5cmF0aW9uLmMgYi9kcml2ZXJzL2hpZC9oaWQtZ3lyYXRpb24uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYzUxMjBmCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9oaWQvaGlkLWd5cmF0aW9uLmMKQEAgLTAsMCArMSw5NiBAQAorLyoKKyAqICBISUQgZHJpdmVyIGZvciBzb21lIGd5cmF0aW9uICJzcGVjaWFsIiBkZXZpY2VzCisgKgorICogIENvcHlyaWdodCAoYykgMTk5OSBBbmRyZWFzIEdhbAorICogIENvcHlyaWdodCAoYykgMjAwMC0yMDA1IFZvanRlY2ggUGF2bGlrIDx2b2p0ZWNoQHN1c2UuY3o+CisgKiAgQ29weXJpZ2h0IChjKSAyMDA1IE1pY2hhZWwgSGFib3VzdGFrIDxtaWtlLUBjaW5jaS5yci5jb20+IGZvciBDb25jZXB0MiwgSW5jCisgKiAgQ29weXJpZ2h0IChjKSAyMDA2LTIwMDcgSmlyaSBLb3NpbmEKKyAqICBDb3B5cmlnaHQgKGMpIDIwMDcgUGF1bCBXYWxtc2xleQorICogIENvcHlyaWdodCAoYykgMjAwOCBKaXJpIFNsYWJ5CisgKi8KKworLyoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorICogU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKQorICogYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CisjaW5jbHVkZSA8bGludXgvaGlkLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisKKyNpbmNsdWRlICJoaWQtaWRzLmgiCisKKyNkZWZpbmUgZ3lfbWFwX2tleV9jbGVhcihjKQloaWRfbWFwX3VzYWdlX2NsZWFyKGhpLCB1c2FnZSwgYml0LCBtYXgsIFwKKwkJCQkJRVZfS0VZLCAoYykpCitzdGF0aWMgaW50IGd5cmF0aW9uX2lucHV0X21hcHBpbmcoc3RydWN0IGhpZF9kZXZpY2UgKmhkZXYsIHN0cnVjdCBoaWRfaW5wdXQgKmhpLAorCQlzdHJ1Y3QgaGlkX2ZpZWxkICpmaWVsZCwgc3RydWN0IGhpZF91c2FnZSAqdXNhZ2UsCisJCXVuc2lnbmVkIGxvbmcgKipiaXQsIGludCAqbWF4KQoreworCWlmICgodXNhZ2UtPmhpZCAmIEhJRF9VU0FHRV9QQUdFKSAhPSBISURfVVBfTE9HSVZFTkRPUikKKwkJcmV0dXJuIDA7CisKKwlzZXRfYml0KEVWX1JFUCwgaGktPmlucHV0LT5ldmJpdCk7CisJc3dpdGNoICh1c2FnZS0+aGlkICYgSElEX1VTQUdFKSB7CisJLyogUmVwb3J0ZWQgb24gR3lyYXRpb24gTUNFIFJlbW90ZSAqLworCWNhc2UgMHgwMGQ6IGd5X21hcF9rZXlfY2xlYXIoS0VZX0hPTUUpOwkJYnJlYWs7CisJY2FzZSAweDAyNDogZ3lfbWFwX2tleV9jbGVhcihLRVlfRFZEKTsJCWJyZWFrOworCWNhc2UgMHgwMjU6IGd5X21hcF9rZXlfY2xlYXIoS0VZX1BWUik7CQlicmVhazsKKwljYXNlIDB4MDQ2OiBneV9tYXBfa2V5X2NsZWFyKEtFWV9NRURJQSk7CWJyZWFrOworCWNhc2UgMHgwNDc6IGd5X21hcF9rZXlfY2xlYXIoS0VZX01QMyk7CQlicmVhazsKKwljYXNlIDB4MDQ5OiBneV9tYXBfa2V5X2NsZWFyKEtFWV9DQU1FUkEpOwlicmVhazsKKwljYXNlIDB4MDRhOiBneV9tYXBfa2V5X2NsZWFyKEtFWV9WSURFTyk7CWJyZWFrOworCisJZGVmYXVsdDoKKwkJcmV0dXJuIDA7CisJfQorCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IGd5cmF0aW9uX2V2ZW50KHN0cnVjdCBoaWRfZGV2aWNlICpoZGV2LCBzdHJ1Y3QgaGlkX2ZpZWxkICpmaWVsZCwKKwkJc3RydWN0IGhpZF91c2FnZSAqdXNhZ2UsIF9fczMyIHZhbHVlKQoreworCXN0cnVjdCBpbnB1dF9kZXYgKmlucHV0ID0gZmllbGQtPmhpZGlucHV0LT5pbnB1dDsKKworCWlmICgodXNhZ2UtPmhpZCAmIEhJRF9VU0FHRV9QQUdFKSA9PSBISURfVVBfR0VOREVTSyAmJgorCQkJKHVzYWdlLT5oaWQgJiAweGZmKSA9PSAweDgyKSB7CisJCWlucHV0X2V2ZW50KGlucHV0LCB1c2FnZS0+dHlwZSwgdXNhZ2UtPmNvZGUsIDEpOworCQlpbnB1dF9zeW5jKGlucHV0KTsKKwkJaW5wdXRfZXZlbnQoaW5wdXQsIHVzYWdlLT50eXBlLCB1c2FnZS0+Y29kZSwgMCk7CisJCWlucHV0X3N5bmMoaW5wdXQpOworCQlyZXR1cm4gMTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBoaWRfZGV2aWNlX2lkIGd5cmF0aW9uX2RldmljZXNbXSA9IHsKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfR1lSQVRJT04sIFVTQl9ERVZJQ0VfSURfR1lSQVRJT05fUkVNT1RFKSB9LAorCXsgfQorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUoaGlkLCBneXJhdGlvbl9kZXZpY2VzKTsKKworc3RhdGljIHN0cnVjdCBoaWRfZHJpdmVyIGd5cmF0aW9uX2RyaXZlciA9IHsKKwkubmFtZSA9ICJneXJhdGlvbiIsCisJLmlkX3RhYmxlID0gZ3lyYXRpb25fZGV2aWNlcywKKwkuaW5wdXRfbWFwcGluZyA9IGd5cmF0aW9uX2lucHV0X21hcHBpbmcsCisJLmV2ZW50ID0gZ3lyYXRpb25fZXZlbnQsCit9OworCitzdGF0aWMgaW50IGd5cmF0aW9uX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gaGlkX3JlZ2lzdGVyX2RyaXZlcigmZ3lyYXRpb25fZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgZ3lyYXRpb25fZXhpdCh2b2lkKQoreworCWhpZF91bnJlZ2lzdGVyX2RyaXZlcigmZ3lyYXRpb25fZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQoZ3lyYXRpb25faW5pdCk7Cittb2R1bGVfZXhpdChneXJhdGlvbl9leGl0KTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKworSElEX0NPTVBBVF9MT0FEX0RSSVZFUihneXJhdGlvbik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2hpZC9oaWQtaWRzLmggYi9kcml2ZXJzL2hpZC9oaWQtaWRzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDlhMWJhOQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvaGlkL2hpZC1pZHMuaApAQCAtMCwwICsxLDQwNiBAQAorLyoKKyAqICBVU0IgSElEIHF1aXJrcyBzdXBwb3J0IGZvciBMaW51eAorICoKKyAqICBDb3B5cmlnaHQgKGMpIDE5OTkgQW5kcmVhcyBHYWwKKyAqICBDb3B5cmlnaHQgKGMpIDIwMDAtMjAwNSBWb2p0ZWNoIFBhdmxpayA8dm9qdGVjaEBzdXNlLmN6PgorICogIENvcHlyaWdodCAoYykgMjAwNSBNaWNoYWVsIEhhYm91c3RhayA8bWlrZS1AY2luY2kucnIuY29tPiBmb3IgQ29uY2VwdDIsIEluYworICogIENvcHlyaWdodCAoYykgMjAwNi0yMDA3IEppcmkgS29zaW5hCisgKiAgQ29weXJpZ2h0IChjKSAyMDA3IFBhdWwgV2FsbXNsZXkKKyAqLworCisvKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgKiBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pCisgKiBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaWZuZGVmIEhJRF9JRFNfSF9GSUxFCisjZGVmaW5lIEhJRF9JRFNfSF9GSUxFCisKKyNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9BNFRFQ0gJCTB4MDlkYQorI2RlZmluZSBVU0JfREVWSUNFX0lEX0E0VEVDSF9XQ1AzMlBVCTB4MDAwNgorI2RlZmluZSBVU0JfREVWSUNFX0lEX0E0VEVDSF9YNV8wMDVECTB4MDAwYQorCisjZGVmaW5lIFVTQl9WRU5ET1JfSURfQUFTSElNQQkJMHgwNmQ2CisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfQUFTSElNQV9HQU1FUEFECTB4MDAyNQorI2RlZmluZSBVU0JfREVWSUNFX0lEX0FBU0hJTUFfUFJFREFUT1IJMHgwMDI2CisKKyNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9BQ0VDQUQJCTB4MDQ2MAorI2RlZmluZSBVU0JfREVWSUNFX0lEX0FDRUNBRF9GTEFJUgkweDAwMDQKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9BQ0VDQURfMzAyCTB4MDAwOAorCisjZGVmaW5lIFVTQl9WRU5ET1JfSURfQURTX1RFQ0ggCQkweDA2ZTEKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9BRFNfVEVDSF9SQURJT19TSTQ3MFgJMHhhMTU1CisKKyNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9BRkFURUNICQkweDE1YTQKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9BRkFURUNIX0FGOTAxNgkweDkwMTYKKworI2RlZmluZSBVU0JfVkVORE9SX0lEX0FJUFRFSwkJMHgwOGNhCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfQUlQVEVLXzAxCQkweDAwMDEKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9BSVBURUtfMTAJCTB4MDAxMAorI2RlZmluZSBVU0JfREVWSUNFX0lEX0FJUFRFS18yMAkJMHgwMDIwCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfQUlQVEVLXzIxCQkweDAwMjEKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9BSVBURUtfMjIJCTB4MDAyMgorI2RlZmluZSBVU0JfREVWSUNFX0lEX0FJUFRFS18yMwkJMHgwMDIzCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfQUlQVEVLXzI0CQkweDAwMjQKKworI2RlZmluZSBVU0JfVkVORE9SX0lEX0FJUkNBQkxFCQkweDE2Q0EKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9BSVJDQUJMRTEJCTB4MTUwMgorCisjZGVmaW5lIFVTQl9WRU5ET1JfSURfQUxDT1IJCTB4MDU4ZgorI2RlZmluZSBVU0JfREVWSUNFX0lEX0FMQ09SX1VTQlJTMjMyCTB4OTcyMAorCisjZGVmaW5lIFVTQl9WRU5ET1JfSURfQUxQUwkJMHgwNDMzCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfSUJNX0dBTUVQQUQJMHgxMTAxCisKKyNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9BUFBMRQkJMHgwNWFjCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfQVBQTEVfTUlHSFRZTU9VU0UJMHgwMzA0CisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfQVBQTEVfRk9VTlRBSU5fQU5TSQkweDAyMGUKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9BUFBMRV9GT1VOVEFJTl9JU08JMHgwMjBmCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfQVBQTEVfR0VZU0VSX0FOU0kJMHgwMjE0CisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfQVBQTEVfR0VZU0VSX0lTTwkweDAyMTUKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9BUFBMRV9HRVlTRVJfSklTCTB4MDIxNgorI2RlZmluZSBVU0JfREVWSUNFX0lEX0FQUExFX0dFWVNFUjNfQU5TSQkweDAyMTcKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9BUFBMRV9HRVlTRVIzX0lTTwkweDAyMTgKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9BUFBMRV9HRVlTRVIzX0pJUwkweDAyMTkKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9BUFBMRV9HRVlTRVI0X0FOU0kJMHgwMjFhCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfQVBQTEVfR0VZU0VSNF9JU08JMHgwMjFiCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfQVBQTEVfR0VZU0VSNF9KSVMJMHgwMjFjCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfQVBQTEVfQUxVX0FOU0kJMHgwMjIwCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfQVBQTEVfQUxVX0lTTwkweDAyMjEKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9BUFBMRV9BTFVfSklTCTB4MDIyMgorI2RlZmluZSBVU0JfREVWSUNFX0lEX0FQUExFX1dFTExTUFJJTkdfQU5TSQkweDAyMjMKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9BUFBMRV9XRUxMU1BSSU5HX0lTTwkweDAyMjQKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9BUFBMRV9XRUxMU1BSSU5HX0pJUwkweDAyMjUKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9BUFBMRV9HRVlTRVI0X0hGX0FOU0kgICAgMHgwMjI5CisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfQVBQTEVfR0VZU0VSNF9IRl9JU08gICAgIDB4MDIyYQorI2RlZmluZSBVU0JfREVWSUNFX0lEX0FQUExFX0dFWVNFUjRfSEZfSklTICAgICAweDAyMmIKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9BUFBMRV9BTFVfV0lSRUxFU1NfQU5TSSAgMHgwMjJjCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfQVBQTEVfQUxVX1dJUkVMRVNTX0lTTyAgIDB4MDIyZAorI2RlZmluZSBVU0JfREVWSUNFX0lEX0FQUExFX0FMVV9XSVJFTEVTU19KSVMgICAweDAyMmUKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9BUFBMRV9XRUxMU1BSSU5HMl9BTlNJCTB4MDIzMAorI2RlZmluZSBVU0JfREVWSUNFX0lEX0FQUExFX1dFTExTUFJJTkcyX0lTTwkweDAyMzEKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9BUFBMRV9XRUxMU1BSSU5HMl9KSVMJMHgwMjMyCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfQVBQTEVfRk9VTlRBSU5fVFBfT05MWQkweDAzMGEKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9BUFBMRV9HRVlTRVIxX1RQX09OTFkJMHgwMzBiCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfQVBQTEVfQVRWX0lSQ09OVFJPTAkweDgyNDEKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9BUFBMRV9JUkNPTlRST0w0CTB4ODI0MgorCisjZGVmaW5lIFVTQl9WRU5ET1JfSURfQVNVUwkJMHgwYjA1CisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfQVNVU19MQ00JCTB4MTcyNgorCisjZGVmaW5lIFVTQl9WRU5ET1JfSURfQVRFTgkJMHgwNTU3CisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfQVRFTl9VQzEwMEtNCTB4MjAwNAorI2RlZmluZSBVU0JfREVWSUNFX0lEX0FURU5fQ1MxMjRVCTB4MjIwMgorI2RlZmluZSBVU0JfREVWSUNFX0lEX0FURU5fMlBPUlRLVk0JMHgyMjA0CisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfQVRFTl80UE9SVEtWTQkweDIyMDUKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9BVEVOXzRQT1JUS1ZNQwkweDIyMDgKKworI2RlZmluZSBVU0JfVkVORE9SX0lEX0FWRVJNRURJQQkJMHgwN2NhCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfQVZFUl9GTV9NUjgwMAkweGI4MDAKKworI2RlZmluZSBVU0JfVkVORE9SX0lEX0JFTEtJTiAgICAgICAgICAgMHgwNTBkCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfRkxJUF9LVk0gICAgICAgICAweDMyMDEKKworI2RlZmluZSBVU0JfVkVORE9SX0lEX0JSSUdIVAkJMHgxMjQxCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfQlJJR0hUX0FCTlQyCTB4MTUwMworCisjZGVmaW5lIFVTQl9WRU5ET1JfSURfQkVSS1NISVJFCQkweDBjOTgKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9CRVJLU0hJUkVfUENXRAkweDExNDAKKworI2RlZmluZSBVU0JfVkVORE9SX0lEX0NIRVJSWQkJMHgwNDZhCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfQ0hFUlJZX0NZTU9USU9OCTB4MDAyMworCisjZGVmaW5lIFVTQl9WRU5ET1JfSURfQ0hJQwkJMHgwNWZlCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfQ0hJQ19HQU1FUEFECTB4MDAxNAorCisjZGVmaW5lIFVTQl9WRU5ET1JfSURfQ0hJQ09OWQkJMHgwNGYyCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfQ0hJQ09OWV9UQUNUSUNBTF9QQUQJMHgwNDE4CisKKyNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9DSURDCQkweDE2NzcKKworI2RlZmluZSBVU0JfVkVORE9SX0lEX0NNRURJQQkJMHgwZDhjCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfQ00xMDkJCTB4MDAwZQorCisjZGVmaW5lIFVTQl9WRU5ET1JfSURfQ09ERU1FUkNTCQkweDA3YzAKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9DT0RFTUVSQ1NfSU9XX0ZJUlNUCTB4MTUwMAorI2RlZmluZSBVU0JfREVWSUNFX0lEX0NPREVNRVJDU19JT1dfTEFTVAkweDE1ZmYKKworI2RlZmluZSBVU0JfVkVORE9SX0lEX0NZR05BTAkJMHgxMGM0CisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfQ1lHTkFMX1JBRElPX1NJNDcwWAkweDgxOGEKKworI2RlZmluZSBVU0JfVkVORE9SX0lEX0NZUFJFU1MJCTB4MDRiNAorI2RlZmluZSBVU0JfREVWSUNFX0lEX0NZUFJFU1NfTU9VU0UJMHgwMDAxCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfQ1lQUkVTU19ISURDT00JMHg1NTAwCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfQ1lQUkVTU19VTFRSQU1PVVNFCTB4NzQxNworI2RlZmluZSBVU0JfREVWSUNFX0lEX0NZUFJFU1NfQkFSQ09ERV8xCTB4ZGU2MQorI2RlZmluZSBVU0JfREVWSUNFX0lEX0NZUFJFU1NfQkFSQ09ERV8yCTB4ZGU2NAorCisjZGVmaW5lIFVTQl9WRU5ET1JfSURfREVMTAkJMHg0MTNjCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfREVMTF9XNzY1OAkweDIwMDUKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9ERUxMX1NLODExNQkweDIxMDUKKworI2RlZmluZSBVU0JfVkVORE9SX0lEX0RFTE9STUUJCTB4MTE2MworI2RlZmluZSBVU0JfREVWSUNFX0lEX0RFTE9STUVfRUFSVEhNQVRFIDB4MDEwMAorI2RlZmluZSBVU0JfREVWSUNFX0lEX0RFTE9STUVfRU1fTFQyMAkweDAyMDAKKworI2RlZmluZSBVU0JfVkVORE9SX0lEX0RNSQkJMHgwYzBiCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfRE1JX0VOQwkJMHg1ZmFiCisKKyNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9FTE8JCTB4MDRFNworI2RlZmluZSBVU0JfREVWSUNFX0lEX0VMT19UUzI3MDAJMHgwMDIwCisKKyNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9FU1NFTlRJQUxfUkVBTElUWQkweDBkN2YKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9FU1NFTlRJQUxfUkVBTElUWV9QNSAweDAxMDAKKworI2RlZmluZSBVU0JfVkVORE9SX0lEX0VaS0VZIAkJMHgwNTE4CisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfQlRDXzgxOTMJCTB4MDAwMgorCisjZGVmaW5lIFVTQl9WRU5ET1JfSURfR0FNRVJPTgkJMHgwODEwCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfR0FNRVJPTl9EVUFMX1BTWF9BREFQVE9SCTB4MDAwMQorCisjZGVmaW5lIFVTQl9WRU5ET1JfSURfR0VORVJBTF9UT1VDSAkweDBkZmMKKworI2RlZmluZSBVU0JfVkVORE9SX0lEX0dMQUIJCTB4MDZjMgorI2RlZmluZSBVU0JfREVWSUNFX0lEXzRfUEhJREdFVFNFUlZPXzMwCTB4MDAzOAorI2RlZmluZSBVU0JfREVWSUNFX0lEXzFfUEhJREdFVFNFUlZPXzMwCTB4MDAzOQorI2RlZmluZSBVU0JfREVWSUNFX0lEXzBfMF80X0lGX0tJVAkweDAwNDAKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF8wXzE2XzE2X0lGX0tJVAkweDAwNDQKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF84XzhfOF9JRl9LSVQJMHgwMDQ1CisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfMF84XzdfSUZfS0lUCTB4MDA1MQorI2RlZmluZSBVU0JfREVWSUNFX0lEXzBfOF84X0lGX0tJVAkweDAwNTMKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9QSElER0VUX01PVE9SQ09OVFJPTAkweDAwNTgKKworI2RlZmluZSBVU0JfVkVORE9SX0lEX0dPVE9QCQkweDA4ZjIKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9TVVBFUl9RMgkJMHgwMDdmCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfR09HT1BFTgkJMHgwMGNlCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfUEVOUE9XRVIJCTB4MDBmNAorCisjZGVmaW5lIFVTQl9WRU5ET1JfSURfR1JFRU5BU0lBCQkweDBlOGYKKworI2RlZmluZSBVU0JfVkVORE9SX0lEX0dSRVRBR01BQ0JFVEgJMHgwOTcxCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfR1JFVEFHTUFDQkVUSF9IVUVZCTB4MjAwNQorCisjZGVmaW5lIFVTQl9WRU5ET1JfSURfR1JJRkZJTgkJMHgwNzdkCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfUE9XRVJNQVRFCQkweDA0MTAKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9TT1VOREtOT0IJCTB4MDRBQQorCisjZGVmaW5lIFVTQl9WRU5ET1JfSURfR1RDTwkJMHgwNzhjCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfR1RDT185MAkJMHgwMDkwCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfR1RDT18xMDAJCTB4MDEwMAorI2RlZmluZSBVU0JfREVWSUNFX0lEX0dUQ09fMTAxCQkweDAxMDEKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9HVENPXzEwMwkJMHgwMTAzCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfR1RDT18xMDQJCTB4MDEwNAorI2RlZmluZSBVU0JfREVWSUNFX0lEX0dUQ09fMTA1CQkweDAxMDUKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9HVENPXzEwNgkJMHgwMTA2CisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfR1RDT18xMDcJCTB4MDEwNworI2RlZmluZSBVU0JfREVWSUNFX0lEX0dUQ09fMTA4CQkweDAxMDgKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9HVENPXzIwMAkJMHgwMjAwCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfR1RDT18yMDEJCTB4MDIwMQorI2RlZmluZSBVU0JfREVWSUNFX0lEX0dUQ09fMjAyCQkweDAyMDIKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9HVENPXzIwMwkJMHgwMjAzCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfR1RDT18yMDQJCTB4MDIwNAorI2RlZmluZSBVU0JfREVWSUNFX0lEX0dUQ09fMjA1CQkweDAyMDUKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9HVENPXzIwNgkJMHgwMjA2CisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfR1RDT18yMDcJCTB4MDIwNworI2RlZmluZSBVU0JfREVWSUNFX0lEX0dUQ09fMzAwCQkweDAzMDAKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9HVENPXzMwMQkJMHgwMzAxCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfR1RDT18zMDIJCTB4MDMwMgorI2RlZmluZSBVU0JfREVWSUNFX0lEX0dUQ09fMzAzCQkweDAzMDMKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9HVENPXzMwNAkJMHgwMzA0CisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfR1RDT18zMDUJCTB4MDMwNQorI2RlZmluZSBVU0JfREVWSUNFX0lEX0dUQ09fMzA2CQkweDAzMDYKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9HVENPXzMwNwkJMHgwMzA3CisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfR1RDT18zMDgJCTB4MDMwOAorI2RlZmluZSBVU0JfREVWSUNFX0lEX0dUQ09fMzA5CQkweDAzMDkKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9HVENPXzQwMAkJMHgwNDAwCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfR1RDT180MDEJCTB4MDQwMQorI2RlZmluZSBVU0JfREVWSUNFX0lEX0dUQ09fNDAyCQkweDA0MDIKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9HVENPXzQwMwkJMHgwNDAzCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfR1RDT180MDQJCTB4MDQwNAorI2RlZmluZSBVU0JfREVWSUNFX0lEX0dUQ09fNDA1CQkweDA0MDUKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9HVENPXzUwMAkJMHgwNTAwCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfR1RDT181MDEJCTB4MDUwMQorI2RlZmluZSBVU0JfREVWSUNFX0lEX0dUQ09fNTAyCQkweDA1MDIKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9HVENPXzUwMwkJMHgwNTAzCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfR1RDT181MDQJCTB4MDUwNAorI2RlZmluZSBVU0JfREVWSUNFX0lEX0dUQ09fMTAwMAkJMHgxMDAwCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfR1RDT18xMDAxCQkweDEwMDEKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9HVENPXzEwMDIJCTB4MTAwMgorI2RlZmluZSBVU0JfREVWSUNFX0lEX0dUQ09fMTAwMwkJMHgxMDAzCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfR1RDT18xMDA0CQkweDEwMDQKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9HVENPXzEwMDUJCTB4MTAwNQorI2RlZmluZSBVU0JfREVWSUNFX0lEX0dUQ09fMTAwNgkJMHgxMDA2CisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfR1RDT18xMDA3CQkweDEwMDcKKworI2RlZmluZSBVU0JfVkVORE9SX0lEX0dZUkFUSU9OCQkweDBjMTYKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9HWVJBVElPTl9SRU1PVEUJMHgwMDAyCisKKyNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9IQVBQCQkweDA3OGIKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9VR0NJX0RSSVZJTkcJMHgwMDEwCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfVUdDSV9GTFlJTkcJMHgwMDIwCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfVUdDSV9GSUdIVElORwkweDAwMzAKKworI2RlZmluZSBVU0JfVkVORE9SX0lEX0lNQVRJT04JCTB4MDcxOAorI2RlZmluZSBVU0JfREVWSUNFX0lEX0RJU0NfU1RBS0tBCTB4ZDAwMAorCisjZGVmaW5lIFVTQl9WRU5ET1JfSURfS0JHRUFSCQkweDA4NGUKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9LQkdFQVJfSkFNU1RVRElPCTB4MTAwMQorCisjZGVmaW5lIFVTQl9WRU5ET1JfSURfTEFCVEVDCQkweDEwMjAKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9MQUJURUNfV0lSRUxFU1NfS0VZQk9BUkQJMHgwMDA2CisKKyNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9MRAkJMHgwZjExCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfTERfQ0FTU1kJCTB4MTAwMAorI2RlZmluZSBVU0JfREVWSUNFX0lEX0xEX1BPQ0tFVENBU1NZCTB4MTAxMAorI2RlZmluZSBVU0JfREVWSUNFX0lEX0xEX01PQklMRUNBU1NZCTB4MTAyMAorI2RlZmluZSBVU0JfREVWSUNFX0lEX0xEX0pXTQkJMHgxMDgwCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfTERfRE1NUAkJMHgxMDgxCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfTERfVU1JUAkJMHgxMDkwCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfTERfWFJBWTEJCTB4MTEwMAorI2RlZmluZSBVU0JfREVWSUNFX0lEX0xEX1hSQVkyCQkweDExMDEKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9MRF9WSURFT0NPTQkweDEyMDAKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9MRF9DT00zTEFCCTB4MjAwMAorI2RlZmluZSBVU0JfREVWSUNFX0lEX0xEX1RFTEVQT1JUCTB4MjAxMAorI2RlZmluZSBVU0JfREVWSUNFX0lEX0xEX05FVFdPUktBTkFMWVNFUiAweDIwMjAKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9MRF9QT1dFUkNPTlRST0wJMHgyMDMwCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfTERfTUFDSElORVRFU1QJMHgyMDQwCisKKyNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9MT0dJVEVDSAkJMHgwNDZkCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfTE9HSVRFQ0hfTFgzCTB4YzA0NAorI2RlZmluZSBVU0JfREVWSUNFX0lEX0xPR0lURUNIX1YxNTAJMHhjMDQ3CisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfTE9HSVRFQ0hfUkVDRUlWRVIJMHhjMTAxCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfTE9HSVRFQ0hfSEFSTU9OWV9GSVJTVCAgMHhjMTEwCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfTE9HSVRFQ0hfSEFSTU9OWV9MQVNUIDB4YzE0ZgorI2RlZmluZSBVU0JfREVWSUNFX0lEX0xPR0lURUNIX1JVTUJMRVBBRAkweGMyMTEKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9MT0dJVEVDSF9FWFRSRU1FXzNECTB4YzIxNQorI2RlZmluZSBVU0JfREVWSUNFX0lEX0xPR0lURUNIX1JVTUJMRVBBRDIJMHhjMjE4CisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfTE9HSVRFQ0hfUlVNQkxFUEFEMl8yCTB4YzIxOQorI2RlZmluZSBVU0JfREVWSUNFX0lEX0xPR0lURUNIX1dJTkdNQU5fRjNECTB4YzI4MworI2RlZmluZSBVU0JfREVWSUNFX0lEX0xPR0lURUNIX0ZPUkNFM0RfUFJPCTB4YzI4NgorI2RlZmluZSBVU0JfREVWSUNFX0lEX0xPR0lURUNIX1dIRUVMCTB4YzI5NAorI2RlZmluZSBVU0JfREVWSUNFX0lEX0xPR0lURUNIX01PTU9fV0hFRUwJMHhjMjk1CisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfTE9HSVRFQ0hfRUxJVEVfS0JECTB4YzMwYQorI2RlZmluZSBVU0JfREVWSUNFX0lEX0xPR0lURUNIX0tCRAkweGMzMTEKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9TNTEwX1JFQ0VJVkVSCTB4YzUwYworI2RlZmluZSBVU0JfREVWSUNFX0lEX1M1MTBfUkVDRUlWRVJfMgkweGM1MTcKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9MT0dJVEVDSF9DT1JETEVTU19ERVNLVE9QX0xYNTAwCTB4YzUxMgorI2RlZmluZSBVU0JfREVWSUNFX0lEX01YMzAwMF9SRUNFSVZFUgkweGM1MTMKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9ESU5PVk9fREVTS1RPUAkweGM3MDQKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9ESU5PVk9fRURHRQkweGM3MTQKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9ESU5PVk9fTUlOSQkweGM3MWYKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9MT0dJVEVDSF9NT01PX1dIRUVMMgkweGNhMDMKKworI2RlZmluZSBVU0JfVkVORE9SX0lEX01DQwkJMHgwOWRiCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfTUNDX1BNRDEwMjRMUwkweDAwNzYKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9NQ0NfUE1EMTIwOExTCTB4MDA3YQorCisjZGVmaW5lIFVTQl9WRU5ET1JfSURfTUdFCQkweDA0NjMKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9NR0VfVVBTCQkweGZmZmYKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9NR0VfVVBTMQkJMHgwMDAxCisKKyNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9NSUNST0NISVAJCTB4MDRkOAorI2RlZmluZSBVU0JfREVWSUNFX0lEX1BJQ0tJVDEJCTB4MDAzMgorI2RlZmluZSBVU0JfREVWSUNFX0lEX1BJQ0tJVDIJCTB4MDAzMworCisjZGVmaW5lIFVTQl9WRU5ET1JfSURfTUlDUk9TT0ZUCQkweDA0NWUKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9TSURFV0lOREVSX0dWCTB4MDAzYgorI2RlZmluZSBVU0JfREVWSUNFX0lEX1dJUkVMRVNTX09QVElDQUxfREVTS1RPUF8zXzAgMHgwMDlkCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfTVNfTkU0SwkJMHgwMGRiCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfTVNfTEs2SwkJMHgwMGY5CisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfTVNfUFJFU0VOVEVSXzhLX0JUCTB4MDcwMQorI2RlZmluZSBVU0JfREVWSUNFX0lEX01TX1BSRVNFTlRFUl84S19VU0IJMHgwNzEzCisKKworI2RlZmluZSBVU0JfVkVORE9SX0lEX01PTlRFUkVZCQkweDA1NjYKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9HRU5JVVNfS0IyOUUJMHgzMDA0CisKKyNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9OQ1IJCTB4MDQwNAorI2RlZmluZSBVU0JfREVWSUNFX0lEX05DUl9GSVJTVAkJMHgwMzAwCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfTkNSX0xBU1QJCTB4MDNmZgorCisjZGVmaW5lIFVTQl9WRU5ET1JfSURfTkFUSU9OQUxfU0VNSUNPTkRVQ1RPUiAweDA0MDAKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9OX1NfSEFSTU9OWSAgICAgICAweGMzNTkKKworI2RlZmluZSBVU0JfVkVORE9SX0lEX05BVFNVICAgICAgICAgICAgIDB4MDhiNworI2RlZmluZSBVU0JfREVWSUNFX0lEX05BVFNVX0dBTUVQQUQgICAgIDB4MDAwMQorCisjZGVmaW5lIFVTQl9WRU5ET1JfSURfTkVDCQkweDA3M2UKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9ORUNfVVNCX0dBTUVfUEFECTB4MDMwMQorCisjZGVmaW5lIFVTQl9WRU5ET1JfSURfT05UUkFLCQkweDBhMDcKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9PTlRSQUtfQURVMTAwCTB4MDA2NAorCisjZGVmaW5lIFVTQl9WRU5ET1JfSURfUEFOSklUCQkweDEzNGMKKworI2RlZmluZSBVU0JfVkVORE9SX0lEX1BBTlRIRVJMT1JECTB4MDgxMAorI2RlZmluZSBVU0JfREVWSUNFX0lEX1BBTlRIRVJMT1JEX1RXSU5fVVNCX0pPWVNUSUNLCTB4MDAwMQorCisjZGVmaW5lIFVTQl9WRU5ET1JfSURfUEVUQUxZTlgJCTB4MThiMQorI2RlZmluZSBVU0JfREVWSUNFX0lEX1BFVEFMWU5YX01BWFRFUl9SRU1PVEUJMHgwMDM3CisKKyNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9QTEFZRE9UQ09NCTB4MGI0MworI2RlZmluZSBVU0JfREVWSUNFX0lEX1BMQVlET1RDT01fRU1TX1VTQklJCTB4MDAwMworCisjZGVmaW5lIFVTQl9WRU5ET1JfSURfU0FJVEVLCQkweDA2YTMKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9TQUlURUtfUlVNQkxFUEFECTB4ZmYxNworCisjZGVmaW5lIFVTQl9WRU5ET1JfSURfU0FNU1VORwkJMHgwNDE5CisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfU0FNU1VOR19JUl9SRU1PVEUJMHgwMDAxCisKKyNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9TT05ZCQkJMHgwNTRjCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfU09OWV9QUzNfQ09OVFJPTExFUgkweDAyNjgKKworI2RlZmluZSBVU0JfVkVORE9SX0lEX1NPVU5ER1JBUEgJMHgxNWMyCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfU09VTkRHUkFQSF9JTU9OX0xDRAkweDAwMzgKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9TT1VOREdSQVBIX0lNT05fTENEMgkweDAwMzYKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9TT1VOREdSQVBIX0lNT05fTENEMwkweDAwMzQKKworI2RlZmluZSBVU0JfVkVORE9SX0lEX1NVTgkJMHgwNDMwCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfUkFSSVRBTl9LVk1fRE9OR0xFCTB4Y2RhYgorCisjZGVmaW5lIFVTQl9WRU5ET1JfSURfU1VOUExVUwkJMHgwNGZjCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfU1VOUExVU19XREVTS1RPUAkweDA1ZDgKKworI2RlZmluZSBVU0JfVkVORE9SX0lEX1RFTlgJCTB4MTEzMAorI2RlZmluZSBVU0JfREVWSUNFX0lEX1RFTlhfSUJVRERZMQkweDAwMDEKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9URU5YX0lCVUREWTIJMHgwMDAyCisKKyNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9USFJVU1RNQVNURVIJMHgwNDRmCisKKyNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9UT1BNQVgJCTB4MDY2MworI2RlZmluZSBVU0JfREVWSUNFX0lEX1RPUE1BWF9DT0JSQVBBRAkweDAxMDMKKworI2RlZmluZSBVU0JfVkVORE9SX0lEX1RVUkJPWAkJMHgwNjJhCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfVFVSQk9YX0tFWUJPQVJECTB4MDIwMQorCisjZGVmaW5lIFVTQl9WRU5ET1JfSURfVkVSTklFUgkJMHgwOGY3CisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfVkVSTklFUl9MQUJQUk8JMHgwMDAxCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfVkVSTklFUl9HT1RFTVAJMHgwMDAyCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfVkVSTklFUl9TS0lQCTB4MDAwMworI2RlZmluZSBVU0JfREVWSUNFX0lEX1ZFUk5JRVJfQ1lDTE9QUwkweDAwMDQKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9WRVJOSUVSX0xDU1BFQwkweDAwMDYKKworI2RlZmluZSBVU0JfVkVORE9SX0lEX1dBQ09NCQkweDA1NmEKKworI2RlZmluZSBVU0JfVkVORE9SX0lEX1dJU0VHUk9VUAkJMHgwOTI1CisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfMV9QSElER0VUU0VSVk9fMjAJMHg4MTAxCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfNF9QSElER0VUU0VSVk9fMjAJMHg4MTA0CisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfOF84XzRfSUZfS0lUCTB4ODIwMQorI2RlZmluZSBVU0JfREVWSUNFX0lEX1FVQURfVVNCX0pPWVBBRAkweDg4MDAKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9EVUFMX1VTQl9KT1lQQUQJMHg4ODY2CisKKyNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9XSVNFR1JPVVBfTFRECTB4NjY2NgorI2RlZmluZSBVU0JfVkVORE9SX0lEX1dJU0VHUk9VUF9MVEQyCTB4NjY3NworI2RlZmluZSBVU0JfREVWSUNFX0lEX1NNQVJUSk9ZX0RVQUxfUExVUyAweDg4MDIKKworI2RlZmluZSBVU0JfVkVORE9SX0lEX1lFQUxJTksJCTB4Njk5MworI2RlZmluZSBVU0JfREVWSUNFX0lEX1lFQUxJTktfUDFLX1A0S19CMksJMHhiMDAxCisKKyNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9aRVJPUExVUwkJMHgwYzEyCisKKyNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9LWUUJCTB4MDQ1OAorI2RlZmluZSBVU0JfREVWSUNFX0lEX0tZRV9HUEVOXzU2MAkweDUwMDMKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2hpZC9oaWQtaW5wdXQtcXVpcmtzLmMgYi9kcml2ZXJzL2hpZC9oaWQtaW5wdXQtcXVpcmtzLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE2ZmVlYTAuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9oaWQvaGlkLWlucHV0LXF1aXJrcy5jCisrKyAvZGV2L251bGwKQEAgLTEsNDg0ICswLDAgQEAKLS8qCi0gKiAgSElELWlucHV0IHVzYWdlIG1hcHBpbmcgcXVpcmtzCi0gKgotICogIFRoaXMgaXMgdXNlZCB0byBoYW5kbGUgSElELWlucHV0IG1hcHBpbmdzIGZvciBkZXZpY2VzIHZpb2xhdGluZwotICogIEhVVCAxLjEyIHNwZWNpZmljYXRpb24uCi0gKgotICogQ29weXJpZ2h0IChjKSAyMDA3LTIwMDggSmlyaSBLb3NpbmEKLSAqLwotCi0vKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKLSAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCi0gKiBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+Ci0jaW5jbHVkZSA8bGludXgvaGlkLmg+Ci0KLSNkZWZpbmUgbWFwX2FicyhjKSAgICAgIGRvIHsgdXNhZ2UtPmNvZGUgPSBjOyB1c2FnZS0+dHlwZSA9IEVWX0FCUzsgKmJpdCA9IGlucHV0LT5hYnNiaXQ7ICptYXggPSBBQlNfTUFYOyB9IHdoaWxlICgwKQotI2RlZmluZSBtYXBfcmVsKGMpICAgICAgZG8geyB1c2FnZS0+Y29kZSA9IGM7IHVzYWdlLT50eXBlID0gRVZfUkVMOyAqYml0ID0gaW5wdXQtPnJlbGJpdDsgKm1heCA9IFJFTF9NQVg7IH0gd2hpbGUgKDApCi0jZGVmaW5lIG1hcF9rZXkoYykgICAgICBkbyB7IHVzYWdlLT5jb2RlID0gYzsgdXNhZ2UtPnR5cGUgPSBFVl9LRVk7ICpiaXQgPSBpbnB1dC0+a2V5Yml0OyAqbWF4ID0gS0VZX01BWDsgfSB3aGlsZSAoMCkKLSNkZWZpbmUgbWFwX2xlZChjKSAgICAgIGRvIHsgdXNhZ2UtPmNvZGUgPSBjOyB1c2FnZS0+dHlwZSA9IEVWX0xFRDsgKmJpdCA9IGlucHV0LT5sZWRiaXQ7ICptYXggPSBMRURfTUFYOyB9IHdoaWxlICgwKQotCi0jZGVmaW5lIG1hcF9hYnNfY2xlYXIoYykgICAgICAgIGRvIHsgbWFwX2FicyhjKTsgY2xlYXJfYml0KGMsICpiaXQpOyB9IHdoaWxlICgwKQotI2RlZmluZSBtYXBfa2V5X2NsZWFyKGMpICAgICAgICBkbyB7IG1hcF9rZXkoYyk7IGNsZWFyX2JpdChjLCAqYml0KTsgfSB3aGlsZSAoMCkKLQotc3RhdGljIGludCBxdWlya19iZWxraW5fd2tiZChzdHJ1Y3QgaGlkX3VzYWdlICp1c2FnZSwgc3RydWN0IGlucHV0X2RldiAqaW5wdXQsCi0JCQkgICAgICB1bnNpZ25lZCBsb25nICoqYml0LCBpbnQgKm1heCkKLXsKLQlpZiAoKHVzYWdlLT5oaWQgJiBISURfVVNBR0VfUEFHRSkgIT0gSElEX1VQX0NPTlNVTUVSKQotCQlyZXR1cm4gMDsKLQotCXN3aXRjaCAodXNhZ2UtPmhpZCAmIEhJRF9VU0FHRSkgewotCQljYXNlIDB4MDNhOiBtYXBfa2V5X2NsZWFyKEtFWV9TT1VORCk7CQlicmVhazsKLQkJY2FzZSAweDAzYjogbWFwX2tleV9jbGVhcihLRVlfQ0FNRVJBKTsJCWJyZWFrOwotCQljYXNlIDB4MDNjOiBtYXBfa2V5X2NsZWFyKEtFWV9ET0NVTUVOVFMpOwlicmVhazsKLQkJZGVmYXVsdDoKLQkJCXJldHVybiAwOwotCX0KLQlyZXR1cm4gMTsKLX0KLQotc3RhdGljIGludCBxdWlya19jaGVycnlfY3ltb3Rpb24oc3RydWN0IGhpZF91c2FnZSAqdXNhZ2UsIHN0cnVjdCBpbnB1dF9kZXYgKmlucHV0LAotCQkJICAgICAgdW5zaWduZWQgbG9uZyAqKmJpdCwgaW50ICptYXgpCi17Ci0JaWYgKCh1c2FnZS0+aGlkICYgSElEX1VTQUdFX1BBR0UpICE9IEhJRF9VUF9DT05TVU1FUikKLQkJcmV0dXJuIDA7Ci0KLQlzd2l0Y2ggKHVzYWdlLT5oaWQgJiBISURfVVNBR0UpIHsKLQkJY2FzZSAweDMwMTogbWFwX2tleV9jbGVhcihLRVlfUFJPRzEpOwkJYnJlYWs7Ci0JCWNhc2UgMHgzMDI6IG1hcF9rZXlfY2xlYXIoS0VZX1BST0cyKTsJCWJyZWFrOwotCQljYXNlIDB4MzAzOiBtYXBfa2V5X2NsZWFyKEtFWV9QUk9HMyk7CQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCXJldHVybiAwOwotCX0KLQlyZXR1cm4gMTsKLX0KLQotc3RhdGljIGludCBxdWlya19sb2dpdGVjaF91bHRyYXhfcmVtb3RlKHN0cnVjdCBoaWRfdXNhZ2UgKnVzYWdlLCBzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dCwKLQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgKipiaXQsIGludCAqbWF4KQotewotCWlmICgodXNhZ2UtPmhpZCAmIEhJRF9VU0FHRV9QQUdFKSAhPSBISURfVVBfTE9HSVZFTkRPUikKLQkJcmV0dXJuIDA7Ci0KLQlzZXRfYml0KEVWX1JFUCwgaW5wdXQtPmV2Yml0KTsKLQlzd2l0Y2godXNhZ2UtPmhpZCAmIEhJRF9VU0FHRSkgewotCQkvKiBSZXBvcnRlZCBvbiBMb2dpdGVjaCBVbHRyYSBYIE1lZGlhIFJlbW90ZSAqLwotCQljYXNlIDB4MDA0OiBtYXBfa2V5X2NsZWFyKEtFWV9BR0FJTik7CQlicmVhazsKLQkJY2FzZSAweDAwZDogbWFwX2tleV9jbGVhcihLRVlfSE9NRSk7CQlicmVhazsKLQkJY2FzZSAweDAyNDogbWFwX2tleV9jbGVhcihLRVlfU0hVRkZMRSk7CQlicmVhazsKLQkJY2FzZSAweDAyNTogbWFwX2tleV9jbGVhcihLRVlfVFYpOwkJYnJlYWs7Ci0JCWNhc2UgMHgwMjY6IG1hcF9rZXlfY2xlYXIoS0VZX01FTlUpOwkJYnJlYWs7Ci0JCWNhc2UgMHgwMzE6IG1hcF9rZXlfY2xlYXIoS0VZX0FVRElPKTsJCWJyZWFrOwotCQljYXNlIDB4MDMyOiBtYXBfa2V5X2NsZWFyKEtFWV9URVhUKTsJCWJyZWFrOwotCQljYXNlIDB4MDMzOiBtYXBfa2V5X2NsZWFyKEtFWV9MQVNUKTsJCWJyZWFrOwotCQljYXNlIDB4MDQ3OiBtYXBfa2V5X2NsZWFyKEtFWV9NUDMpOwkJYnJlYWs7Ci0JCWNhc2UgMHgwNDg6IG1hcF9rZXlfY2xlYXIoS0VZX0RWRCk7CQlicmVhazsKLQkJY2FzZSAweDA0OTogbWFwX2tleV9jbGVhcihLRVlfTUVESUEpOwkJYnJlYWs7Ci0JCWNhc2UgMHgwNGE6IG1hcF9rZXlfY2xlYXIoS0VZX1ZJREVPKTsJCWJyZWFrOwotCQljYXNlIDB4MDRiOiBtYXBfa2V5X2NsZWFyKEtFWV9BTkdMRSk7CQlicmVhazsKLQkJY2FzZSAweDA0YzogbWFwX2tleV9jbGVhcihLRVlfTEFOR1VBR0UpOwlicmVhazsKLQkJY2FzZSAweDA0ZDogbWFwX2tleV9jbGVhcihLRVlfU1VCVElUTEUpOwlicmVhazsKLQkJY2FzZSAweDA1MTogbWFwX2tleV9jbGVhcihLRVlfUkVEKTsJCWJyZWFrOwotCQljYXNlIDB4MDUyOiBtYXBfa2V5X2NsZWFyKEtFWV9DTE9TRSk7CQlicmVhazsKLQotCQlkZWZhdWx0OgotCQkJcmV0dXJuIDA7Ci0JfQotCXJldHVybiAxOwotfQotCi1zdGF0aWMgaW50IHF1aXJrX2d5cmF0aW9uX3JlbW90ZShzdHJ1Y3QgaGlkX3VzYWdlICp1c2FnZSwgc3RydWN0IGlucHV0X2RldiAqaW5wdXQsCi0JCQkgICAgICB1bnNpZ25lZCBsb25nICoqYml0LCBpbnQgKm1heCkKLXsKLQlpZiAoKHVzYWdlLT5oaWQgJiBISURfVVNBR0VfUEFHRSkgIT0gSElEX1VQX0xPR0lWRU5ET1IpCi0JCXJldHVybiAwOwotCi0Jc2V0X2JpdChFVl9SRVAsIGlucHV0LT5ldmJpdCk7Ci0Jc3dpdGNoKHVzYWdlLT5oaWQgJiBISURfVVNBR0UpIHsKLQkJLyogUmVwb3J0ZWQgb24gR3lyYXRpb24gTUNFIFJlbW90ZSAqLwotCQljYXNlIDB4MDBkOiBtYXBfa2V5X2NsZWFyKEtFWV9IT01FKTsJCWJyZWFrOwotCQljYXNlIDB4MDI0OiBtYXBfa2V5X2NsZWFyKEtFWV9EVkQpOwkJYnJlYWs7Ci0JCWNhc2UgMHgwMjU6IG1hcF9rZXlfY2xlYXIoS0VZX1BWUik7CQlicmVhazsKLQkJY2FzZSAweDA0NjogbWFwX2tleV9jbGVhcihLRVlfTUVESUEpOwkJYnJlYWs7Ci0JCWNhc2UgMHgwNDc6IG1hcF9rZXlfY2xlYXIoS0VZX01QMyk7CQlicmVhazsKLQkJY2FzZSAweDA0OTogbWFwX2tleV9jbGVhcihLRVlfQ0FNRVJBKTsJCWJyZWFrOwotCQljYXNlIDB4MDRhOiBtYXBfa2V5X2NsZWFyKEtFWV9WSURFTyk7CQlicmVhazsKLQotCQlkZWZhdWx0OgotCQkJcmV0dXJuIDA7Ci0JfQotCXJldHVybiAxOwotfQotCi1zdGF0aWMgaW50IHF1aXJrX2NoaWNvbnlfdGFjdGljYWxfcGFkKHN0cnVjdCBoaWRfdXNhZ2UgKnVzYWdlLCBzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dCwKLQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgKipiaXQsIGludCAqbWF4KQotewotCWlmICgodXNhZ2UtPmhpZCAmIEhJRF9VU0FHRV9QQUdFKSAhPSBISURfVVBfTVNWRU5ET1IpCi0JCXJldHVybiAwOwotCi0Jc2V0X2JpdChFVl9SRVAsIGlucHV0LT5ldmJpdCk7Ci0Jc3dpdGNoICh1c2FnZS0+aGlkICYgSElEX1VTQUdFKSB7Ci0JCWNhc2UgMHhmZjAxOiBtYXBfa2V5X2NsZWFyKEJUTl8xKTsJCWJyZWFrOwotCQljYXNlIDB4ZmYwMjogbWFwX2tleV9jbGVhcihCVE5fMik7CQlicmVhazsKLQkJY2FzZSAweGZmMDM6IG1hcF9rZXlfY2xlYXIoQlROXzMpOwkJYnJlYWs7Ci0JCWNhc2UgMHhmZjA0OiBtYXBfa2V5X2NsZWFyKEJUTl80KTsJCWJyZWFrOwotCQljYXNlIDB4ZmYwNTogbWFwX2tleV9jbGVhcihCVE5fNSk7CQlicmVhazsKLQkJY2FzZSAweGZmMDY6IG1hcF9rZXlfY2xlYXIoQlROXzYpOwkJYnJlYWs7Ci0JCWNhc2UgMHhmZjA3OiBtYXBfa2V5X2NsZWFyKEJUTl83KTsJCWJyZWFrOwotCQljYXNlIDB4ZmYwODogbWFwX2tleV9jbGVhcihCVE5fOCk7CQlicmVhazsKLQkJY2FzZSAweGZmMDk6IG1hcF9rZXlfY2xlYXIoQlROXzkpOwkJYnJlYWs7Ci0JCWNhc2UgMHhmZjBhOiBtYXBfa2V5X2NsZWFyKEJUTl9BKTsJCWJyZWFrOwotCQljYXNlIDB4ZmYwYjogbWFwX2tleV9jbGVhcihCVE5fQik7CQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCXJldHVybiAwOwotCX0KLQlyZXR1cm4gMTsKLX0KLQotc3RhdGljIGludCBxdWlya19taWNyb3NvZnRfZXJnb25vbXlfa2Ioc3RydWN0IGhpZF91c2FnZSAqdXNhZ2UsIHN0cnVjdCBpbnB1dF9kZXYgKmlucHV0LAotCQkJICAgICAgdW5zaWduZWQgbG9uZyAqKmJpdCwgaW50ICptYXgpCi17Ci0JaWYgKCh1c2FnZS0+aGlkICYgSElEX1VTQUdFX1BBR0UpICE9IEhJRF9VUF9NU1ZFTkRPUikKLQkJcmV0dXJuIDA7Ci0KLQlzd2l0Y2godXNhZ2UtPmhpZCAmIEhJRF9VU0FHRSkgewotCQljYXNlIDB4ZmQwNjogbWFwX2tleV9jbGVhcihLRVlfQ0hBVCk7CQlicmVhazsKLQkJY2FzZSAweGZkMDc6IG1hcF9rZXlfY2xlYXIoS0VZX1BIT05FKTsJCWJyZWFrOwotCQljYXNlIDB4ZmYwNToKLQkJCXNldF9iaXQoRVZfUkVQLCBpbnB1dC0+ZXZiaXQpOwotCQkJbWFwX2tleV9jbGVhcihLRVlfRjEzKTsKLQkJCXNldF9iaXQoS0VZX0YxNCwgaW5wdXQtPmtleWJpdCk7Ci0JCQlzZXRfYml0KEtFWV9GMTUsIGlucHV0LT5rZXliaXQpOwotCQkJc2V0X2JpdChLRVlfRjE2LCBpbnB1dC0+a2V5Yml0KTsKLQkJCXNldF9iaXQoS0VZX0YxNywgaW5wdXQtPmtleWJpdCk7Ci0JCQlzZXRfYml0KEtFWV9GMTgsIGlucHV0LT5rZXliaXQpOwotCQlkZWZhdWx0OgotCQkJcmV0dXJuIDA7Ci0JfQotCXJldHVybiAxOwotfQotCi1zdGF0aWMgaW50IHF1aXJrX21pY3Jvc29mdF9wcmVzZW50ZXJfOGsoc3RydWN0IGhpZF91c2FnZSAqdXNhZ2UsIHN0cnVjdCBpbnB1dF9kZXYgKmlucHV0LAotCQkJICAgICAgdW5zaWduZWQgbG9uZyAqKmJpdCwgaW50ICptYXgpCi17Ci0JaWYgKCh1c2FnZS0+aGlkICYgSElEX1VTQUdFX1BBR0UpICE9IEhJRF9VUF9NU1ZFTkRPUikKLQkJcmV0dXJuIDA7Ci0KLQlzZXRfYml0KEVWX1JFUCwgaW5wdXQtPmV2Yml0KTsKLQlzd2l0Y2godXNhZ2UtPmhpZCAmIEhJRF9VU0FHRSkgewotCQljYXNlIDB4ZmQwODogbWFwX2tleV9jbGVhcihLRVlfRk9SV0FSRCk7CWJyZWFrOwotCQljYXNlIDB4ZmQwOTogbWFwX2tleV9jbGVhcihLRVlfQkFDSyk7CQlicmVhazsKLQkJY2FzZSAweGZkMGI6IG1hcF9rZXlfY2xlYXIoS0VZX1BMQVlQQVVTRSk7CWJyZWFrOwotCQljYXNlIDB4ZmQwZTogbWFwX2tleV9jbGVhcihLRVlfQ0xPU0UpOwkJYnJlYWs7Ci0JCWNhc2UgMHhmZDBmOiBtYXBfa2V5X2NsZWFyKEtFWV9QTEFZKTsJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJcmV0dXJuIDA7Ci0JfQotCXJldHVybiAxOwotfQotCi1zdGF0aWMgaW50IHF1aXJrX3BldGFseW54X3JlbW90ZShzdHJ1Y3QgaGlkX3VzYWdlICp1c2FnZSwgc3RydWN0IGlucHV0X2RldiAqaW5wdXQsCi0JCQkgICAgICB1bnNpZ25lZCBsb25nICoqYml0LCBpbnQgKm1heCkKLXsKLQlpZiAoKCh1c2FnZS0+aGlkICYgSElEX1VTQUdFX1BBR0UpICE9IEhJRF9VUF9MT0dJVkVORE9SKSAmJgotCQkJKCh1c2FnZS0+aGlkICYgSElEX1VTQUdFX1BBR0UpICE9IEhJRF9VUF9DT05TVU1FUikpCi0JCXJldHVybiAwOwotCi0JaWYgKCh1c2FnZS0+aGlkICYgSElEX1VTQUdFX1BBR0UpID09IEhJRF9VUF9MT0dJVkVORE9SKQotCQlzd2l0Y2godXNhZ2UtPmhpZCAmIEhJRF9VU0FHRSkgewotCQkJY2FzZSAweDA1YTogbWFwX2tleV9jbGVhcihLRVlfVEVYVCk7CQlicmVhazsKLQkJCWNhc2UgMHgwNWI6IG1hcF9rZXlfY2xlYXIoS0VZX1JFRCk7CQlicmVhazsKLQkJCWNhc2UgMHgwNWM6IG1hcF9rZXlfY2xlYXIoS0VZX0dSRUVOKTsJCWJyZWFrOwotCQkJY2FzZSAweDA1ZDogbWFwX2tleV9jbGVhcihLRVlfWUVMTE9XKTsJCWJyZWFrOwotCQkJY2FzZSAweDA1ZTogbWFwX2tleV9jbGVhcihLRVlfQkxVRSk7CQlicmVhazsKLQkJCWRlZmF1bHQ6Ci0JCQkJcmV0dXJuIDA7Ci0JCX0KLQotCWlmICgodXNhZ2UtPmhpZCAmIEhJRF9VU0FHRV9QQUdFKSA9PSBISURfVVBfQ09OU1VNRVIpCi0JCXN3aXRjaCh1c2FnZS0+aGlkICYgSElEX1VTQUdFKSB7Ci0JCQljYXNlIDB4MGY2OiBtYXBfa2V5X2NsZWFyKEtFWV9ORVhUKTsgICAgICAgICAgICBicmVhazsKLQkJCWNhc2UgMHgwZmE6IG1hcF9rZXlfY2xlYXIoS0VZX0JBQ0spOyAgICAgICAgICAgIGJyZWFrOwotCQkJZGVmYXVsdDoKLQkJCQlyZXR1cm4gMDsKLQkJfQotCXJldHVybiAxOwotfQotCi1zdGF0aWMgaW50IHF1aXJrX2xvZ2l0ZWNoX3dpcmVsZXNzKHN0cnVjdCBoaWRfdXNhZ2UgKnVzYWdlLCBzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dCwKLQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgKipiaXQsIGludCAqbWF4KQotewotCWlmICgodXNhZ2UtPmhpZCAmIEhJRF9VU0FHRV9QQUdFKSAhPSBISURfVVBfQ09OU1VNRVIpCi0JCXJldHVybiAwOwotCi0Jc3dpdGNoICh1c2FnZS0+aGlkICYgSElEX1VTQUdFKSB7Ci0JCWNhc2UgMHgxMDAxOiBtYXBfa2V5X2NsZWFyKEtFWV9NRVNTRU5HRVIpOwlicmVhazsKLQkJY2FzZSAweDEwMDM6IG1hcF9rZXlfY2xlYXIoS0VZX1NPVU5EKTsJCWJyZWFrOwotCQljYXNlIDB4MTAwNDogbWFwX2tleV9jbGVhcihLRVlfVklERU8pOwkJYnJlYWs7Ci0JCWNhc2UgMHgxMDA1OiBtYXBfa2V5X2NsZWFyKEtFWV9BVURJTyk7CQlicmVhazsKLQkJY2FzZSAweDEwMGE6IG1hcF9rZXlfY2xlYXIoS0VZX0RPQ1VNRU5UUyk7CWJyZWFrOwotCQljYXNlIDB4MTAxMTogbWFwX2tleV9jbGVhcihLRVlfUFJFVklPVVNTT05HKTsJYnJlYWs7Ci0JCWNhc2UgMHgxMDEyOiBtYXBfa2V5X2NsZWFyKEtFWV9ORVhUU09ORyk7CWJyZWFrOwotCQljYXNlIDB4MTAxMzogbWFwX2tleV9jbGVhcihLRVlfQ0FNRVJBKTsJCWJyZWFrOwotCQljYXNlIDB4MTAxNDogbWFwX2tleV9jbGVhcihLRVlfTUVTU0VOR0VSKTsJYnJlYWs7Ci0JCWNhc2UgMHgxMDE1OiBtYXBfa2V5X2NsZWFyKEtFWV9SRUNPUkQpOwkJYnJlYWs7Ci0JCWNhc2UgMHgxMDE2OiBtYXBfa2V5X2NsZWFyKEtFWV9QTEFZRVIpOwkJYnJlYWs7Ci0JCWNhc2UgMHgxMDE3OiBtYXBfa2V5X2NsZWFyKEtFWV9FSkVDVENEKTsJYnJlYWs7Ci0JCWNhc2UgMHgxMDE4OiBtYXBfa2V5X2NsZWFyKEtFWV9NRURJQSk7CQlicmVhazsKLQkJY2FzZSAweDEwMTk6IG1hcF9rZXlfY2xlYXIoS0VZX1BST0cxKTsJCWJyZWFrOwotCQljYXNlIDB4MTAxYTogbWFwX2tleV9jbGVhcihLRVlfUFJPRzIpOwkJYnJlYWs7Ci0JCWNhc2UgMHgxMDFiOiBtYXBfa2V5X2NsZWFyKEtFWV9QUk9HMyk7CQlicmVhazsKLQkJY2FzZSAweDEwMWY6IG1hcF9rZXlfY2xlYXIoS0VZX1pPT01JTik7CQlicmVhazsKLQkJY2FzZSAweDEwMjA6IG1hcF9rZXlfY2xlYXIoS0VZX1pPT01PVVQpOwlicmVhazsKLQkJY2FzZSAweDEwMjE6IG1hcF9rZXlfY2xlYXIoS0VZX1pPT01SRVNFVCk7CWJyZWFrOwotCQljYXNlIDB4MTAyMzogbWFwX2tleV9jbGVhcihLRVlfQ0xPU0UpOwkJYnJlYWs7Ci0JCWNhc2UgMHgxMDI3OiBtYXBfa2V5X2NsZWFyKEtFWV9NRU5VKTsJCWJyZWFrOwotCQkvKiB0aGlzIG9uZSBpcyBtYXJrZWQgYXMgJ1JvdGF0ZScgKi8KLQkJY2FzZSAweDEwMjg6IG1hcF9rZXlfY2xlYXIoS0VZX0FOR0xFKTsJCWJyZWFrOwotCQljYXNlIDB4MTAyOTogbWFwX2tleV9jbGVhcihLRVlfU0hVRkZMRSk7CWJyZWFrOwotCQljYXNlIDB4MTAyYTogbWFwX2tleV9jbGVhcihLRVlfQkFDSyk7CQlicmVhazsKLQkJY2FzZSAweDEwMmI6IG1hcF9rZXlfY2xlYXIoS0VZX0NZQ0xFV0lORE9XUyk7CWJyZWFrOwotCQljYXNlIDB4MTA0MTogbWFwX2tleV9jbGVhcihLRVlfQkFUVEVSWSk7CWJyZWFrOwotCQljYXNlIDB4MTA0MjogbWFwX2tleV9jbGVhcihLRVlfV09SRFBST0NFU1NPUik7CWJyZWFrOwotCQljYXNlIDB4MTA0MzogbWFwX2tleV9jbGVhcihLRVlfU1BSRUFEU0hFRVQpOwlicmVhazsKLQkJY2FzZSAweDEwNDQ6IG1hcF9rZXlfY2xlYXIoS0VZX1BSRVNFTlRBVElPTik7CWJyZWFrOwotCQljYXNlIDB4MTA0NTogbWFwX2tleV9jbGVhcihLRVlfVU5ETyk7CQlicmVhazsKLQkJY2FzZSAweDEwNDY6IG1hcF9rZXlfY2xlYXIoS0VZX1JFRE8pOwkJYnJlYWs7Ci0JCWNhc2UgMHgxMDQ3OiBtYXBfa2V5X2NsZWFyKEtFWV9QUklOVCk7CQlicmVhazsKLQkJY2FzZSAweDEwNDg6IG1hcF9rZXlfY2xlYXIoS0VZX1NBVkUpOwkJYnJlYWs7Ci0JCWNhc2UgMHgxMDQ5OiBtYXBfa2V5X2NsZWFyKEtFWV9QUk9HMSk7CQlicmVhazsKLQkJY2FzZSAweDEwNGE6IG1hcF9rZXlfY2xlYXIoS0VZX1BST0cyKTsJCWJyZWFrOwotCQljYXNlIDB4MTA0YjogbWFwX2tleV9jbGVhcihLRVlfUFJPRzMpOwkJYnJlYWs7Ci0JCWNhc2UgMHgxMDRjOiBtYXBfa2V5X2NsZWFyKEtFWV9QUk9HNCk7CQlicmVhazsKLQotCQlkZWZhdWx0OgotCQkJcmV0dXJuIDA7Ci0JfQotCXJldHVybiAxOwotfQotCi1zdGF0aWMgaW50IHF1aXJrX2NoZXJyeV9nZW5pdXNfMjllKHN0cnVjdCBoaWRfdXNhZ2UgKnVzYWdlLCBzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dCwKLQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgKipiaXQsIGludCAqbWF4KQotewotCWlmICgodXNhZ2UtPmhpZCAmIEhJRF9VU0FHRV9QQUdFKSAhPSBISURfVVBfQ09OU1VNRVIpCi0JCXJldHVybiAwOwotCi0Jc3dpdGNoICh1c2FnZS0+aGlkICYgSElEX1VTQUdFKSB7Ci0JCWNhc2UgMHgxNTY6IG1hcF9rZXlfY2xlYXIoS0VZX1dPUkRQUk9DRVNTT1IpOwlicmVhazsKLQkJY2FzZSAweDE1NzogbWFwX2tleV9jbGVhcihLRVlfU1BSRUFEU0hFRVQpOwlicmVhazsKLQkJY2FzZSAweDE1ODogbWFwX2tleV9jbGVhcihLRVlfUFJFU0VOVEFUSU9OKTsJYnJlYWs7Ci0JCWNhc2UgMHgxNWM6IG1hcF9rZXlfY2xlYXIoS0VZX1NUT1ApOwkJYnJlYWs7Ci0KLQkJZGVmYXVsdDoKLQkJCXJldHVybiAwOwotCX0KLQlyZXR1cm4gMTsKLX0KLQotc3RhdGljIGludCBxdWlya19idGNfODE5MyhzdHJ1Y3QgaGlkX3VzYWdlICp1c2FnZSwgc3RydWN0IGlucHV0X2RldiAqaW5wdXQsCi0JCQkgICAgICB1bnNpZ25lZCBsb25nICoqYml0LCBpbnQgKm1heCkKLXsKLQlpZiAoKHVzYWdlLT5oaWQgJiBISURfVVNBR0VfUEFHRSkgIT0gSElEX1VQX0NPTlNVTUVSKQotCQlyZXR1cm4gMDsKLQotCXN3aXRjaCAodXNhZ2UtPmhpZCAmIEhJRF9VU0FHRSkgewotCQljYXNlIDB4MjMwOiBtYXBfa2V5KEJUTl9NT1VTRSk7CQkJYnJlYWs7Ci0JCWNhc2UgMHgyMzE6IG1hcF9yZWwoUkVMX1dIRUVMKTsJCQlicmVhazsKLQkJLyogCi0JCSAqIHRoaXMga2V5Ym9hcmQgaGFzIGEgc2Nyb2xsd2hlZWwgaW1wbGVtZW50ZWQgaW4KLQkJICogdG90YWxseSBicm9rZW4gd2F5LiBXZSBtYXAgdGhpcyB1c2FnZSB0ZW1wb3JhcmlseQotCQkgKiB0byBIV0hFRUwgYW5kIGhhbmRsZSBpdCBpbiB0aGUgZXZlbnQgcXVpcmsgaGFuZGxlcgotCQkgKi8KLQkJY2FzZSAweDIzMjogbWFwX3JlbChSRUxfSFdIRUVMKTsJCWJyZWFrOwotCi0JCWRlZmF1bHQ6Ci0JCQlyZXR1cm4gMDsKLQl9Ci0JcmV0dXJuIDE7Ci19Ci0KLXN0YXRpYyBpbnQgcXVpcmtfc3VucGx1c193ZGVza3RvcChzdHJ1Y3QgaGlkX3VzYWdlICp1c2FnZSwgc3RydWN0IGlucHV0X2RldiAqaW5wdXQsCi0JCQkgICAgICB1bnNpZ25lZCBsb25nICoqYml0LCBpbnQgKm1heCkKLXsKLQlpZiAoKHVzYWdlLT5oaWQgJiBISURfVVNBR0VfUEFHRSkgIT0gSElEX1VQX0NPTlNVTUVSKQotCQlyZXR1cm4gMDsKLQotCXN3aXRjaCAodXNhZ2UtPmhpZCAmIEhJRF9VU0FHRSkgewotCQljYXNlIDB4MjAwMzogbWFwX2tleV9jbGVhcihLRVlfWk9PTUlOKTsJCWJyZWFrOwotCQljYXNlIDB4MjEwMzogbWFwX2tleV9jbGVhcihLRVlfWk9PTU9VVCk7CWJyZWFrOwotCQlkZWZhdWx0OgotCQkJcmV0dXJuIDA7Ci0JfQotCXJldHVybiAxOwotfQotCi0jZGVmaW5lIFZFTkRPUl9JRF9CRUxLSU4JCQkweDEwMjAKLSNkZWZpbmUgREVWSUNFX0lEX0JFTEtJTl9XSVJFTEVTU19LRVlCT0FSRAkweDAwMDYKLQotI2RlZmluZSBWRU5ET1JfSURfQ0hFUlJZCQkJMHgwNDZhCi0jZGVmaW5lIERFVklDRV9JRF9DSEVSUllfQ1lNT1RJT04JCTB4MDAyMwotCi0jZGVmaW5lIFZFTkRPUl9JRF9DSElDT05ZCQkJMHgwNGYyCi0jZGVmaW5lIERFVklDRV9JRF9DSElDT05ZX1RBQ1RJQ0FMX1BBRAkJMHgwNDE4Ci0KLSNkZWZpbmUgVkVORE9SX0lEX0VaS0VZCQkJCTB4MDUxOAotI2RlZmluZSBERVZJQ0VfSURfQlRDXzgxOTMJCQkweDAwMDIKLQotI2RlZmluZSBWRU5ET1JfSURfR1lSQVRJT04JCQkweDBjMTYKLSNkZWZpbmUgREVWSUNFX0lEX0dZUkFUSU9OX1JFTU9URQkJMHgwMDAyCi0KLSNkZWZpbmUgVkVORE9SX0lEX0xPR0lURUNICQkJMHgwNDZkCi0jZGVmaW5lIERFVklDRV9JRF9MT0dJVEVDSF9SRUNFSVZFUgkJMHhjMTAxCi0jZGVmaW5lIERFVklDRV9JRF9TNTEwX1JFQ0VJVkVSCQkJMHhjNTBjCi0jZGVmaW5lIERFVklDRV9JRF9TNTEwX1JFQ0VJVkVSXzIJCTB4YzUxNwotI2RlZmluZSBERVZJQ0VfSURfTVgzMDAwX1JFQ0VJVkVSCQkweGM1MTMKLQotI2RlZmluZSBWRU5ET1JfSURfTUlDUk9TT0ZUCQkJMHgwNDVlCi0jZGVmaW5lIERFVklDRV9JRF9NUzRLCQkJCTB4MDBkYgotI2RlZmluZSBERVZJQ0VfSURfTVM2SwkJCQkweDAwZjkKLSNkZWZpbmUgREVWSUNFX0lTX01TX1BSRVNFTlRFUl84S19CVAkJMHgwNzAxCi0jZGVmaW5lIERFVklDRV9JRF9NU19QUkVTRU5URVJfOEtfVVNCCQkweDA3MTMKLQotI2RlZmluZSBWRU5ET1JfSURfTU9OVEVSRVkJCQkweDA1NjYKLSNkZWZpbmUgREVWSUNFX0lEX0dFTklVU19LQjI5RQkJCTB4MzAwNAotCi0jZGVmaW5lIFZFTkRPUl9JRF9QRVRBTFlOWAkJCTB4MThiMQotI2RlZmluZSBERVZJQ0VfSURfUEVUQUxZTlhfTUFYVEVSX1JFTU9URQkweDAwMzcKLQotI2RlZmluZSBWRU5ET1JfSURfU1VOUExVUwkJCTB4MDRmYwotI2RlZmluZSBERVZJQ0VfSURfU1VOUExVU19XREVTS1RPUAkJMHgwNWQ4Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgaGlkX2lucHV0X2JsYWNrbGlzdCB7Ci0JX191MTYgaWRWZW5kb3I7Ci0JX191MTYgaWRQcm9kdWN0OwotCWludCAoKnF1aXJrKShzdHJ1Y3QgaGlkX3VzYWdlICosIHN0cnVjdCBpbnB1dF9kZXYgKiwgdW5zaWduZWQgbG9uZyAqKiwgaW50ICopOwotfSBoaWRfaW5wdXRfYmxhY2tsaXN0W10gPSB7Ci0JeyBWRU5ET1JfSURfQkVMS0lOLCBERVZJQ0VfSURfQkVMS0lOX1dJUkVMRVNTX0tFWUJPQVJELCBxdWlya19iZWxraW5fd2tiZCB9LAotCi0JeyBWRU5ET1JfSURfQ0hFUlJZLCBERVZJQ0VfSURfQ0hFUlJZX0NZTU9USU9OLCBxdWlya19jaGVycnlfY3ltb3Rpb24gfSwKLQotCXsgVkVORE9SX0lEX0NISUNPTlksIERFVklDRV9JRF9DSElDT05ZX1RBQ1RJQ0FMX1BBRCwgcXVpcmtfY2hpY29ueV90YWN0aWNhbF9wYWQgfSwKLQotCXsgVkVORE9SX0lEX0VaS0VZLCBERVZJQ0VfSURfQlRDXzgxOTMsIHF1aXJrX2J0Y184MTkzIH0sCi0KLQl7IFZFTkRPUl9JRF9HWVJBVElPTiwgREVWSUNFX0lEX0dZUkFUSU9OX1JFTU9URSwgcXVpcmtfZ3lyYXRpb25fcmVtb3RlIH0sCi0KLQl7IFZFTkRPUl9JRF9MT0dJVEVDSCwgREVWSUNFX0lEX0xPR0lURUNIX1JFQ0VJVkVSLCBxdWlya19sb2dpdGVjaF91bHRyYXhfcmVtb3RlIH0sCi0JeyBWRU5ET1JfSURfTE9HSVRFQ0gsIERFVklDRV9JRF9TNTEwX1JFQ0VJVkVSLCBxdWlya19sb2dpdGVjaF93aXJlbGVzcyB9LAotCXsgVkVORE9SX0lEX0xPR0lURUNILCBERVZJQ0VfSURfUzUxMF9SRUNFSVZFUl8yLCBxdWlya19sb2dpdGVjaF93aXJlbGVzcyB9LAotCXsgVkVORE9SX0lEX0xPR0lURUNILCBERVZJQ0VfSURfTVgzMDAwX1JFQ0VJVkVSLCBxdWlya19sb2dpdGVjaF93aXJlbGVzcyB9LAotCi0JeyBWRU5ET1JfSURfTUlDUk9TT0ZULCBERVZJQ0VfSURfTVM0SywgcXVpcmtfbWljcm9zb2Z0X2VyZ29ub215X2tiIH0sCi0JeyBWRU5ET1JfSURfTUlDUk9TT0ZULCBERVZJQ0VfSURfTVM2SywgcXVpcmtfbWljcm9zb2Z0X2VyZ29ub215X2tiIH0sCi0JeyBWRU5ET1JfSURfTUlDUk9TT0ZULCBERVZJQ0VfSVNfTVNfUFJFU0VOVEVSXzhLX0JULCBxdWlya19taWNyb3NvZnRfcHJlc2VudGVyXzhrIH0sCi0JeyBWRU5ET1JfSURfTUlDUk9TT0ZULCBERVZJQ0VfSURfTVNfUFJFU0VOVEVSXzhLX1VTQiwgcXVpcmtfbWljcm9zb2Z0X3ByZXNlbnRlcl84ayB9LAotCi0JeyBWRU5ET1JfSURfTU9OVEVSRVksIERFVklDRV9JRF9HRU5JVVNfS0IyOUUsIHF1aXJrX2NoZXJyeV9nZW5pdXNfMjllIH0sCi0KLQl7IFZFTkRPUl9JRF9QRVRBTFlOWCwgREVWSUNFX0lEX1BFVEFMWU5YX01BWFRFUl9SRU1PVEUsIHF1aXJrX3BldGFseW54X3JlbW90ZSB9LAotCi0JeyBWRU5ET1JfSURfU1VOUExVUywgREVWSUNFX0lEX1NVTlBMVVNfV0RFU0tUT1AsIHF1aXJrX3N1bnBsdXNfd2Rlc2t0b3AgfSwKLQotCXsgMCwgMCwgTlVMTCB9Ci19OwotCi1pbnQgaGlkaW5wdXRfbWFwcGluZ19xdWlya3Moc3RydWN0IGhpZF91c2FnZSAqdXNhZ2UsIAotCQkJCSAgIHN0cnVjdCBpbnB1dF9kZXYgKmlucHV0LCAKLQkJCQkgICB1bnNpZ25lZCBsb25nICoqYml0LCBpbnQgKm1heCkKLXsKLQlzdHJ1Y3QgaGlkX2RldmljZSAqZGV2aWNlID0gaW5wdXRfZ2V0X2RydmRhdGEoaW5wdXQpOwotCWludCBpID0gMDsKLQkKLQl3aGlsZSAoaGlkX2lucHV0X2JsYWNrbGlzdFtpXS5xdWlyaykgewotCQlpZiAoaGlkX2lucHV0X2JsYWNrbGlzdFtpXS5pZFZlbmRvciA9PSBkZXZpY2UtPnZlbmRvciAmJgotCQkJCWhpZF9pbnB1dF9ibGFja2xpc3RbaV0uaWRQcm9kdWN0ID09IGRldmljZS0+cHJvZHVjdCkKLQkJCXJldHVybiBoaWRfaW5wdXRfYmxhY2tsaXN0W2ldLnF1aXJrKHVzYWdlLCBpbnB1dCwgYml0LCBtYXgpOwotCQlpKys7Ci0JfQotCXJldHVybiAwOwotfQotCi1pbnQgaGlkaW5wdXRfZXZlbnRfcXVpcmtzKHN0cnVjdCBoaWRfZGV2aWNlICpoaWQsIHN0cnVjdCBoaWRfZmllbGQgKmZpZWxkLCBzdHJ1Y3QgaGlkX3VzYWdlICp1c2FnZSwgX19zMzIgdmFsdWUpCi17Ci0Jc3RydWN0IGlucHV0X2RldiAqaW5wdXQ7Ci0KLQlpbnB1dCA9IGZpZWxkLT5oaWRpbnB1dC0+aW5wdXQ7Ci0KLQlpZiAoKChoaWQtPnF1aXJrcyAmIEhJRF9RVUlSS18yV0hFRUxfTU9VU0VfSEFDS181KSAmJiAodXNhZ2UtPmhpZCA9PSAweDAwMDkwMDA1KSkKLQkJfHwgKChoaWQtPnF1aXJrcyAmIEhJRF9RVUlSS18yV0hFRUxfTU9VU0VfSEFDS183KSAmJiAodXNhZ2UtPmhpZCA9PSAweDAwMDkwMDA3KSkpIHsKLQkJaWYgKHZhbHVlKSBoaWQtPnF1aXJrcyB8PSAgSElEX1FVSVJLXzJXSEVFTF9NT1VTRV9IQUNLX09OOwotCQllbHNlICAgICAgIGhpZC0+cXVpcmtzICY9IH5ISURfUVVJUktfMldIRUVMX01PVVNFX0hBQ0tfT047Ci0JCXJldHVybiAxOwotCX0KLQotCWlmICgoaGlkLT5xdWlya3MgJiBISURfUVVJUktfMldIRUVMX01PVVNFX0hBQ0tfQjgpICYmCi0JCQkodXNhZ2UtPnR5cGUgPT0gRVZfUkVMKSAmJgotCQkJKHVzYWdlLT5jb2RlID09IFJFTF9XSEVFTCkpIHsKLQkJaGlkLT5kZWxheWVkX3ZhbHVlID0gdmFsdWU7Ci0JCXJldHVybiAxOwotCX0KLQotCWlmICgoaGlkLT5xdWlya3MgJiBISURfUVVJUktfMldIRUVMX01PVVNFX0hBQ0tfQjgpICYmCi0JCQkodXNhZ2UtPmhpZCA9PSAweDAwMDEwMGI4KSkgewotCQlpbnB1dF9ldmVudChpbnB1dCwgRVZfUkVMLCB2YWx1ZSA/IFJFTF9IV0hFRUwgOiBSRUxfV0hFRUwsIGhpZC0+ZGVsYXllZF92YWx1ZSk7Ci0JCXJldHVybiAxOwotCX0KLQotCWlmICgoaGlkLT5xdWlya3MgJiBISURfUVVJUktfSU5WRVJUX0hXSEVFTCkgJiYgKHVzYWdlLT5jb2RlID09IFJFTF9IV0hFRUwpKSB7Ci0JCWlucHV0X2V2ZW50KGlucHV0LCB1c2FnZS0+dHlwZSwgdXNhZ2UtPmNvZGUsIC12YWx1ZSk7Ci0JCXJldHVybiAxOwotCX0KLQotCWlmICgoaGlkLT5xdWlya3MgJiBISURfUVVJUktfMldIRUVMX01PVVNFX0hBQ0tfT04pICYmICh1c2FnZS0+Y29kZSA9PSBSRUxfV0hFRUwpKSB7Ci0JCWlucHV0X2V2ZW50KGlucHV0LCB1c2FnZS0+dHlwZSwgUkVMX0hXSEVFTCwgdmFsdWUpOwotCQlyZXR1cm4gMTsKLQl9Ci0KLQlpZiAoKGhpZC0+cXVpcmtzICYgSElEX1FVSVJLX0FQUExFX0hBU19GTikgJiYgaGlkaW5wdXRfYXBwbGVfZXZlbnQoaGlkLCBpbnB1dCwgdXNhZ2UsIHZhbHVlKSkKLQkJcmV0dXJuIDE7Ci0KLQkvKiBIYW5kbGluZyBNUyBrZXlib2FyZHMgc3BlY2lhbCBidXR0b25zICovCi0JaWYgKGhpZC0+cXVpcmtzICYgSElEX1FVSVJLX01JQ1JPU09GVF9LRVlTICYmIAotCQkJdXNhZ2UtPmhpZCA9PSAoSElEX1VQX01TVkVORE9SIHwgMHhmZjA1KSkgewotCQlpbnQga2V5ID0gMDsKLQkJc3RhdGljIGludCBsYXN0X2tleSA9IDA7Ci0JCXN3aXRjaCAodmFsdWUpIHsKLQkJCWNhc2UgMHgwMToga2V5ID0gS0VZX0YxNDsgYnJlYWs7Ci0JCQljYXNlIDB4MDI6IGtleSA9IEtFWV9GMTU7IGJyZWFrOwotCQkJY2FzZSAweDA0OiBrZXkgPSBLRVlfRjE2OyBicmVhazsKLQkJCWNhc2UgMHgwODoga2V5ID0gS0VZX0YxNzsgYnJlYWs7Ci0JCQljYXNlIDB4MTA6IGtleSA9IEtFWV9GMTg7IGJyZWFrOwotCQkJZGVmYXVsdDogYnJlYWs7Ci0JCX0KLQkJaWYgKGtleSkgewotCQkJaW5wdXRfZXZlbnQoaW5wdXQsIHVzYWdlLT50eXBlLCBrZXksIDEpOwotCQkJbGFzdF9rZXkgPSBrZXk7Ci0JCX0gZWxzZSB7Ci0JCQlpbnB1dF9ldmVudChpbnB1dCwgdXNhZ2UtPnR5cGUsIGxhc3Rfa2V5LCAwKTsKLQkJfQotCX0KLQotCS8qIGhhbmRsZSB0aGUgdGVtcG9yYXJ5IHF1aXJreSBtYXBwaW5nIHRvIEhXSEVFTCAqLwotCWlmIChoaWQtPnF1aXJrcyAmIEhJRF9RVUlSS19IV0hFRUxfV0hFRUxfSU5WRVJUICYmCi0JCQl1c2FnZS0+dHlwZSA9PSBFVl9SRUwgJiYgdXNhZ2UtPmNvZGUgPT0gUkVMX0hXSEVFTCkgewotCQlpbnB1dF9ldmVudChpbnB1dCwgdXNhZ2UtPnR5cGUsIFJFTF9XSEVFTCwgLXZhbHVlKTsKLQkJcmV0dXJuIDE7Ci0JfQotCi0JLyogR3lyYXRpb24gTUNFIHJlbW90ZSAiU2xlZXAiIGtleSAqLwotCWlmIChoaWQtPnZlbmRvciA9PSBWRU5ET1JfSURfR1lSQVRJT04gJiYKLQkgICAgaGlkLT5wcm9kdWN0ID09IERFVklDRV9JRF9HWVJBVElPTl9SRU1PVEUgJiYKLQkgICAgKHVzYWdlLT5oaWQgJiBISURfVVNBR0VfUEFHRSkgPT0gSElEX1VQX0dFTkRFU0sgJiYKLQkgICAgKHVzYWdlLT5oaWQgJiAweGZmKSA9PSAweDgyKSB7Ci0JCWlucHV0X2V2ZW50KGlucHV0LCB1c2FnZS0+dHlwZSwgdXNhZ2UtPmNvZGUsIDEpOwotCQlpbnB1dF9zeW5jKGlucHV0KTsKLQkJaW5wdXRfZXZlbnQoaW5wdXQsIHVzYWdlLT50eXBlLCB1c2FnZS0+Y29kZSwgMCk7Ci0JCWlucHV0X3N5bmMoaW5wdXQpOwotCQlyZXR1cm4gMTsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KLQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9oaWQvaGlkLWlucHV0LmMgYi9kcml2ZXJzL2hpZC9oaWQtaW5wdXQuYwppbmRleCAxYjJlOGRjLi43ZjE4M2I3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2hpZC9oaWQtaW5wdXQuYworKysgYi9kcml2ZXJzL2hpZC9oaWQtaW5wdXQuYwpAQCAtMzIsMTEgKzMyLDYgQEAKICNpbmNsdWRlIDxsaW51eC9oaWQuaD4KICNpbmNsdWRlIDxsaW51eC9oaWQtZGVidWcuaD4KIAotc3RhdGljIGludCBoaWRfYXBwbGVfZm5tb2RlID0gMTsKLW1vZHVsZV9wYXJhbV9uYW1lZChwYl9mbm1vZGUsIGhpZF9hcHBsZV9mbm1vZGUsIGludCwgMDY0NCk7Ci1NT0RVTEVfUEFSTV9ERVNDKHBiX2ZubW9kZSwKLQkJIk1vZGUgb2YgZm4ga2V5IG9uIEFwcGxlIGtleWJvYXJkcyAoMCA9IGRpc2FibGVkLCAxID0gZmtleXNsYXN0LCAyID0gZmtleXNmaXJzdCkiKTsKLQogI2RlZmluZSB1bmsJS0VZX1VOS05PV04KIAogc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaGlkX2tleWJvYXJkWzI1Nl0gPSB7CkBAIC01OCwyMjcgKzUzLDIwIEBACiAJMTUwLDE1OCwxNTksMTI4LDEzNiwxNzcsMTc4LDE3NiwxNDIsMTUyLDE3MywxNDAsdW5rLHVuayx1bmssdW5rCiB9OwogCi0vKiBleHRlbmRlZCBtYXBwaW5nIGZvciBjZXJ0YWluIExvZ2l0ZWNoIGhhcmR3YXJlIChMb2dpdGVjaCBjb3JkbGVzcyBkZXNrdG9wIExYNTAwKSAqLwotI2RlZmluZSBMT0dJVEVDSF9FWFBBTkRFRF9LRVlNQVBfU0laRSA4MAotc3RhdGljIGludCBsb2dpdGVjaF9leHBhbmRlZF9rZXltYXBbTE9HSVRFQ0hfRVhQQU5ERURfS0VZTUFQX1NJWkVdID0gewotCSAgMCwyMTYsICAwLDIxMywxNzUsMTU2LCAgMCwgIDAsICAwLCAgMCwKLQkxNDQsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwyMTIsCi0JMTc0LDE2NywxNTIsMTYxLDExMiwgIDAsICAwLCAgMCwxNTQsICAwLAotCSAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwKLQkgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsCi0JICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLAotCSAgMCwgIDAsICAwLCAgMCwgIDAsMTgzLDE4NCwxODUsMTg2LDE4NywKLQkxODgsMTg5LDE5MCwxOTEsMTkyLDE5MywxOTQsICAwLCAgMCwgIDAKLX07Ci0KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgewogCV9fczMyIHg7CiAJX19zMzIgeTsKIH0gIGhpZF9oYXRfdG9fYXhpc1tdID0ge3sgMCwgMH0sIHsgMCwtMX0sIHsgMSwtMX0sIHsgMSwgMH0sIHsgMSwgMX0sIHsgMCwgMX0sIHstMSwgMX0sIHstMSwgMH0sIHstMSwtMX19OwogCi0jZGVmaW5lIG1hcF9hYnMoYykJZG8geyB1c2FnZS0+Y29kZSA9IGM7IHVzYWdlLT50eXBlID0gRVZfQUJTOyBiaXQgPSBpbnB1dC0+YWJzYml0OyBtYXggPSBBQlNfTUFYOyB9IHdoaWxlICgwKQotI2RlZmluZSBtYXBfcmVsKGMpCWRvIHsgdXNhZ2UtPmNvZGUgPSBjOyB1c2FnZS0+dHlwZSA9IEVWX1JFTDsgYml0ID0gaW5wdXQtPnJlbGJpdDsgbWF4ID0gUkVMX01BWDsgfSB3aGlsZSAoMCkKLSNkZWZpbmUgbWFwX2tleShjKQlkbyB7IHVzYWdlLT5jb2RlID0gYzsgdXNhZ2UtPnR5cGUgPSBFVl9LRVk7IGJpdCA9IGlucHV0LT5rZXliaXQ7IG1heCA9IEtFWV9NQVg7IH0gd2hpbGUgKDApCi0jZGVmaW5lIG1hcF9sZWQoYykJZG8geyB1c2FnZS0+Y29kZSA9IGM7IHVzYWdlLT50eXBlID0gRVZfTEVEOyBiaXQgPSBpbnB1dC0+bGVkYml0OyBtYXggPSBMRURfTUFYOyB9IHdoaWxlICgwKQorI2RlZmluZSBtYXBfYWJzKGMpCWhpZF9tYXBfdXNhZ2UoaGlkaW5wdXQsIHVzYWdlLCAmYml0LCAmbWF4LCBFVl9BQlMsIChjKSkKKyNkZWZpbmUgbWFwX3JlbChjKQloaWRfbWFwX3VzYWdlKGhpZGlucHV0LCB1c2FnZSwgJmJpdCwgJm1heCwgRVZfUkVMLCAoYykpCisjZGVmaW5lIG1hcF9rZXkoYykJaGlkX21hcF91c2FnZShoaWRpbnB1dCwgdXNhZ2UsICZiaXQsICZtYXgsIEVWX0tFWSwgKGMpKQorI2RlZmluZSBtYXBfbGVkKGMpCWhpZF9tYXBfdXNhZ2UoaGlkaW5wdXQsIHVzYWdlLCAmYml0LCAmbWF4LCBFVl9MRUQsIChjKSkKIAotI2RlZmluZSBtYXBfYWJzX2NsZWFyKGMpCWRvIHsgbWFwX2FicyhjKTsgY2xlYXJfYml0KGMsIGJpdCk7IH0gd2hpbGUgKDApCi0jZGVmaW5lIG1hcF9rZXlfY2xlYXIoYykJZG8geyBtYXBfa2V5KGMpOyBjbGVhcl9iaXQoYywgYml0KTsgfSB3aGlsZSAoMCkKLQotI2lmZGVmIENPTkZJR19VU0JfSElESU5QVVRfUE9XRVJCT09LCi0KLXN0cnVjdCBoaWRpbnB1dF9rZXlfdHJhbnNsYXRpb24gewotCXUxNiBmcm9tOwotCXUxNiB0bzsKLQl1OCBmbGFnczsKLX07Ci0KLSNkZWZpbmUgQVBQTEVfRkxBR19GS0VZIDB4MDEKLQotc3RhdGljIHN0cnVjdCBoaWRpbnB1dF9rZXlfdHJhbnNsYXRpb24gYXBwbGVfZm5fa2V5c1tdID0gewotCXsgS0VZX0JBQ0tTUEFDRSwgS0VZX0RFTEVURSB9LAotCXsgS0VZX0YxLCAgICAgICBLRVlfQlJJR0hUTkVTU0RPV04sIEFQUExFX0ZMQUdfRktFWSB9LAotCXsgS0VZX0YyLCAgICAgICBLRVlfQlJJR0hUTkVTU1VQLCAgIEFQUExFX0ZMQUdfRktFWSB9LAotCXsgS0VZX0YzLCAgICAgICBLRVlfRk5fRjUsICAgICAgICAgIEFQUExFX0ZMQUdfRktFWSB9LCAvKiBFeHBvc+kgKi8KLQl7IEtFWV9GNCwgICAgICAgS0VZX0ZOX0Y0LCAgICAgICAgICBBUFBMRV9GTEFHX0ZLRVkgfSwgLyogRGFzaGJvYXJkICovCi0JeyBLRVlfRjUsICAgICAgIEtFWV9LQkRJTExVTURPV04sICAgQVBQTEVfRkxBR19GS0VZIH0sCi0JeyBLRVlfRjYsICAgICAgIEtFWV9LQkRJTExVTVVQLCAgICAgQVBQTEVfRkxBR19GS0VZIH0sCi0JeyBLRVlfRjcsICAgICAgIEtFWV9QUkVWSU9VU1NPTkcsICAgQVBQTEVfRkxBR19GS0VZIH0sCi0JeyBLRVlfRjgsICAgICAgIEtFWV9QTEFZUEFVU0UsICAgICAgQVBQTEVfRkxBR19GS0VZIH0sCi0JeyBLRVlfRjksICAgICAgIEtFWV9ORVhUU09ORywgICAgICAgQVBQTEVfRkxBR19GS0VZIH0sCi0JeyBLRVlfRjEwLCAgICAgIEtFWV9NVVRFLCAgICAgICAgICAgQVBQTEVfRkxBR19GS0VZIH0sCi0JeyBLRVlfRjExLCAgICAgIEtFWV9WT0xVTUVET1dOLCAgICAgQVBQTEVfRkxBR19GS0VZIH0sCi0JeyBLRVlfRjEyLCAgICAgIEtFWV9WT0xVTUVVUCwgICAgICAgQVBQTEVfRkxBR19GS0VZIH0sCi0JeyBLRVlfVVAsICAgICAgIEtFWV9QQUdFVVAgfSwKLQl7IEtFWV9ET1dOLCAgICAgS0VZX1BBR0VET1dOIH0sCi0JeyBLRVlfTEVGVCwgICAgIEtFWV9IT01FIH0sCi0JeyBLRVlfUklHSFQsICAgIEtFWV9FTkQgfSwKLQl7IH0KLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgaGlkaW5wdXRfa2V5X3RyYW5zbGF0aW9uIHBvd2VyYm9va19mbl9rZXlzW10gPSB7Ci0JeyBLRVlfQkFDS1NQQUNFLCBLRVlfREVMRVRFIH0sCi0JeyBLRVlfRjEsICAgICAgIEtFWV9CUklHSFRORVNTRE9XTiwgICAgIEFQUExFX0ZMQUdfRktFWSB9LAotCXsgS0VZX0YyLCAgICAgICBLRVlfQlJJR0hUTkVTU1VQLCAgICAgICBBUFBMRV9GTEFHX0ZLRVkgfSwKLQl7IEtFWV9GMywgICAgICAgS0VZX01VVEUsICAgICAgICAgICAgICAgQVBQTEVfRkxBR19GS0VZIH0sCi0JeyBLRVlfRjQsICAgICAgIEtFWV9WT0xVTUVET1dOLCAgICAgICAgIEFQUExFX0ZMQUdfRktFWSB9LAotCXsgS0VZX0Y1LCAgICAgICBLRVlfVk9MVU1FVVAsICAgICAgICAgICBBUFBMRV9GTEFHX0ZLRVkgfSwKLQl7IEtFWV9GNiwgICAgICAgS0VZX05VTUxPQ0ssICAgICAgICAgICAgQVBQTEVfRkxBR19GS0VZIH0sCi0JeyBLRVlfRjcsICAgICAgIEtFWV9TV0lUQ0hWSURFT01PREUsICAgIEFQUExFX0ZMQUdfRktFWSB9LAotCXsgS0VZX0Y4LCAgICAgICBLRVlfS0JESUxMVU1UT0dHTEUsICAgICBBUFBMRV9GTEFHX0ZLRVkgfSwKLQl7IEtFWV9GOSwgICAgICAgS0VZX0tCRElMTFVNRE9XTiwgICAgICAgQVBQTEVfRkxBR19GS0VZIH0sCi0JeyBLRVlfRjEwLCAgICAgIEtFWV9LQkRJTExVTVVQLCAgICAgICAgIEFQUExFX0ZMQUdfRktFWSB9LAotCXsgS0VZX1VQLCAgICAgICBLRVlfUEFHRVVQIH0sCi0JeyBLRVlfRE9XTiwgICAgIEtFWV9QQUdFRE9XTiB9LAotCXsgS0VZX0xFRlQsICAgICBLRVlfSE9NRSB9LAotCXsgS0VZX1JJR0hULCAgICBLRVlfRU5EIH0sCi0JeyB9Ci19OwotCi1zdGF0aWMgc3RydWN0IGhpZGlucHV0X2tleV90cmFuc2xhdGlvbiBwb3dlcmJvb2tfbnVtbG9ja19rZXlzW10gPSB7Ci0JeyBLRVlfSiwgICAgICAgIEtFWV9LUDEgfSwKLQl7IEtFWV9LLCAgICAgICAgS0VZX0tQMiB9LAotCXsgS0VZX0wsICAgICAgICBLRVlfS1AzIH0sCi0JeyBLRVlfVSwgICAgICAgIEtFWV9LUDQgfSwKLQl7IEtFWV9JLCAgICAgICAgS0VZX0tQNSB9LAotCXsgS0VZX08sICAgICAgICBLRVlfS1A2IH0sCi0JeyBLRVlfNywgICAgICAgIEtFWV9LUDcgfSwKLQl7IEtFWV84LCAgICAgICAgS0VZX0tQOCB9LAotCXsgS0VZXzksICAgICAgICBLRVlfS1A5IH0sCi0JeyBLRVlfTSwgICAgICAgIEtFWV9LUDAgfSwKLQl7IEtFWV9ET1QsICAgICAgS0VZX0tQRE9UIH0sCi0JeyBLRVlfU0xBU0gsICAgIEtFWV9LUFBMVVMgfSwKLQl7IEtFWV9TRU1JQ09MT04sIEtFWV9LUE1JTlVTIH0sCi0JeyBLRVlfUCwgICAgICAgIEtFWV9LUEFTVEVSSVNLIH0sCi0JeyBLRVlfTUlOVVMsICAgIEtFWV9LUEVRVUFMIH0sCi0JeyBLRVlfMCwgICAgICAgIEtFWV9LUFNMQVNIIH0sCi0JeyBLRVlfRjYsICAgICAgIEtFWV9OVU1MT0NLIH0sCi0JeyBLRVlfS1BFTlRFUiwgIEtFWV9LUEVOVEVSIH0sCi0JeyBLRVlfQkFDS1NQQUNFLCBLRVlfQkFDS1NQQUNFIH0sCi0JeyB9Ci19OwotCi1zdGF0aWMgc3RydWN0IGhpZGlucHV0X2tleV90cmFuc2xhdGlvbiBhcHBsZV9pc29fa2V5Ym9hcmRbXSA9IHsKLQl7IEtFWV9HUkFWRSwgICAgS0VZXzEwMk5EIH0sCi0JeyBLRVlfMTAyTkQsICAgIEtFWV9HUkFWRSB9LAotCXsgfQotfTsKLQotc3RhdGljIHN0cnVjdCBoaWRpbnB1dF9rZXlfdHJhbnNsYXRpb24gKmZpbmRfdHJhbnNsYXRpb24oc3RydWN0IGhpZGlucHV0X2tleV90cmFuc2xhdGlvbiAqdGFibGUsIHUxNiBmcm9tKQotewotCXN0cnVjdCBoaWRpbnB1dF9rZXlfdHJhbnNsYXRpb24gKnRyYW5zOwotCi0JLyogTG9vayBmb3IgdGhlIHRyYW5zbGF0aW9uICovCi0JZm9yICh0cmFucyA9IHRhYmxlOyB0cmFucy0+ZnJvbTsgdHJhbnMrKykKLQkJaWYgKHRyYW5zLT5mcm9tID09IGZyb20pCi0JCQlyZXR1cm4gdHJhbnM7Ci0KLQlyZXR1cm4gTlVMTDsKLX0KLQotaW50IGhpZGlucHV0X2FwcGxlX2V2ZW50KHN0cnVjdCBoaWRfZGV2aWNlICpoaWQsIHN0cnVjdCBpbnB1dF9kZXYgKmlucHV0LAotCQlzdHJ1Y3QgaGlkX3VzYWdlICp1c2FnZSwgX19zMzIgdmFsdWUpCi17Ci0Jc3RydWN0IGhpZGlucHV0X2tleV90cmFuc2xhdGlvbiAqdHJhbnM7Ci0KLQlpZiAodXNhZ2UtPmNvZGUgPT0gS0VZX0ZOKSB7Ci0JCWlmICh2YWx1ZSkgaGlkLT5xdWlya3MgfD0gIEhJRF9RVUlSS19BUFBMRV9GTl9PTjsKLQkJZWxzZSAgICAgICBoaWQtPnF1aXJrcyAmPSB+SElEX1FVSVJLX0FQUExFX0ZOX09OOwotCi0JCWlucHV0X2V2ZW50KGlucHV0LCB1c2FnZS0+dHlwZSwgdXNhZ2UtPmNvZGUsIHZhbHVlKTsKLQotCQlyZXR1cm4gMTsKLQl9Ci0KLQlpZiAoaGlkX2FwcGxlX2ZubW9kZSkgewotCQlpbnQgZG9fdHJhbnNsYXRlOwotCi0JCXRyYW5zID0gZmluZF90cmFuc2xhdGlvbigoaGlkLT5wcm9kdWN0IDwgMHgyMjAgfHwKLQkJCQkJICBoaWQtPnByb2R1Y3QgPj0gMHgzMDApID8KLQkJCQkJIHBvd2VyYm9va19mbl9rZXlzIDogYXBwbGVfZm5fa2V5cywKLQkJCQkJIHVzYWdlLT5jb2RlKTsKLQkJaWYgKHRyYW5zKSB7Ci0JCQlpZiAodGVzdF9iaXQodXNhZ2UtPmNvZGUsIGhpZC0+YXBwbGVfcHJlc3NlZF9mbikpCi0JCQkJZG9fdHJhbnNsYXRlID0gMTsKLQkJCWVsc2UgaWYgKHRyYW5zLT5mbGFncyAmIEFQUExFX0ZMQUdfRktFWSkKLQkJCQlkb190cmFuc2xhdGUgPQotCQkJCQkoaGlkX2FwcGxlX2ZubW9kZSA9PSAyICYmICAoaGlkLT5xdWlya3MgJiBISURfUVVJUktfQVBQTEVfRk5fT04pKSB8fAotCQkJCQkoaGlkX2FwcGxlX2ZubW9kZSA9PSAxICYmICEoaGlkLT5xdWlya3MgJiBISURfUVVJUktfQVBQTEVfRk5fT04pKTsKLQkJCWVsc2UKLQkJCQlkb190cmFuc2xhdGUgPSAoaGlkLT5xdWlya3MgJiBISURfUVVJUktfQVBQTEVfRk5fT04pOwotCi0JCQlpZiAoZG9fdHJhbnNsYXRlKSB7Ci0JCQkJaWYgKHZhbHVlKQotCQkJCQlzZXRfYml0KHVzYWdlLT5jb2RlLCBoaWQtPmFwcGxlX3ByZXNzZWRfZm4pOwotCQkJCWVsc2UKLQkJCQkJY2xlYXJfYml0KHVzYWdlLT5jb2RlLCBoaWQtPmFwcGxlX3ByZXNzZWRfZm4pOwotCi0JCQkJaW5wdXRfZXZlbnQoaW5wdXQsIHVzYWdlLT50eXBlLCB0cmFucy0+dG8sIHZhbHVlKTsKLQotCQkJCXJldHVybiAxOwotCQkJfQotCQl9Ci0KLQkJaWYgKGhpZC0+cXVpcmtzICYgSElEX1FVSVJLX0FQUExFX05VTUxPQ0tfRU1VTEFUSU9OICYmICgKLQkJCQl0ZXN0X2JpdCh1c2FnZS0+Y29kZSwgaGlkLT5wYl9wcmVzc2VkX251bWxvY2spIHx8Ci0JCQkJdGVzdF9iaXQoTEVEX05VTUwsIGlucHV0LT5sZWQpKSkgewotCQkJdHJhbnMgPSBmaW5kX3RyYW5zbGF0aW9uKHBvd2VyYm9va19udW1sb2NrX2tleXMsIHVzYWdlLT5jb2RlKTsKLQotCQkJaWYgKHRyYW5zKSB7Ci0JCQkJaWYgKHZhbHVlKQotCQkJCQlzZXRfYml0KHVzYWdlLT5jb2RlLCBoaWQtPnBiX3ByZXNzZWRfbnVtbG9jayk7Ci0JCQkJZWxzZQotCQkJCQljbGVhcl9iaXQodXNhZ2UtPmNvZGUsIGhpZC0+cGJfcHJlc3NlZF9udW1sb2NrKTsKLQotCQkJCWlucHV0X2V2ZW50KGlucHV0LCB1c2FnZS0+dHlwZSwgdHJhbnMtPnRvLCB2YWx1ZSk7Ci0JCQl9Ci0KLQkJCXJldHVybiAxOwotCQl9Ci0JfQotCi0JaWYgKGhpZC0+cXVpcmtzICYgSElEX1FVSVJLX0FQUExFX0lTT19LRVlCT0FSRCkgewotCQl0cmFucyA9IGZpbmRfdHJhbnNsYXRpb24oYXBwbGVfaXNvX2tleWJvYXJkLCB1c2FnZS0+Y29kZSk7Ci0JCWlmICh0cmFucykgewotCQkJaW5wdXRfZXZlbnQoaW5wdXQsIHVzYWdlLT50eXBlLCB0cmFucy0+dG8sIHZhbHVlKTsKLQkJCXJldHVybiAxOwotCQl9Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIGhpZGlucHV0X2FwcGxlX3NldHVwKHN0cnVjdCBpbnB1dF9kZXYgKmlucHV0KQotewotCXN0cnVjdCBoaWRpbnB1dF9rZXlfdHJhbnNsYXRpb24gKnRyYW5zOwotCi0Jc2V0X2JpdChLRVlfTlVNTE9DSywgaW5wdXQtPmtleWJpdCk7Ci0KLQkvKiBFbmFibGUgYWxsIG5lZWRlZCBrZXlzICovCi0JZm9yICh0cmFucyA9IGFwcGxlX2ZuX2tleXM7IHRyYW5zLT5mcm9tOyB0cmFucysrKQotCQlzZXRfYml0KHRyYW5zLT50bywgaW5wdXQtPmtleWJpdCk7Ci0KLQlmb3IgKHRyYW5zID0gcG93ZXJib29rX2ZuX2tleXM7IHRyYW5zLT5mcm9tOyB0cmFucysrKQotCQlzZXRfYml0KHRyYW5zLT50bywgaW5wdXQtPmtleWJpdCk7Ci0KLQlmb3IgKHRyYW5zID0gcG93ZXJib29rX251bWxvY2tfa2V5czsgdHJhbnMtPmZyb207IHRyYW5zKyspCi0JCXNldF9iaXQodHJhbnMtPnRvLCBpbnB1dC0+a2V5Yml0KTsKLQotCWZvciAodHJhbnMgPSBhcHBsZV9pc29fa2V5Ym9hcmQ7IHRyYW5zLT5mcm9tOyB0cmFucysrKQotCQlzZXRfYml0KHRyYW5zLT50bywgaW5wdXQtPmtleWJpdCk7Ci0KLX0KLSNlbHNlCi1pbmxpbmUgaW50IGhpZGlucHV0X2FwcGxlX2V2ZW50KHN0cnVjdCBoaWRfZGV2aWNlICpoaWQsCi0JCQkJICAgICAgIHN0cnVjdCBpbnB1dF9kZXYgKmlucHV0LAotCQkJCSAgICAgICBzdHJ1Y3QgaGlkX3VzYWdlICp1c2FnZSwgX19zMzIgdmFsdWUpCi17Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBoaWRpbnB1dF9hcHBsZV9zZXR1cChzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dCkKLXsKLX0KLSNlbmRpZgorI2RlZmluZSBtYXBfYWJzX2NsZWFyKGMpCWhpZF9tYXBfdXNhZ2VfY2xlYXIoaGlkaW5wdXQsIHVzYWdlLCAmYml0LCBcCisJCSZtYXgsIEVWX0FCUywgKGMpKQorI2RlZmluZSBtYXBfa2V5X2NsZWFyKGMpCWhpZF9tYXBfdXNhZ2VfY2xlYXIoaGlkaW5wdXQsIHVzYWdlLCAmYml0LCBcCisJCSZtYXgsIEVWX0tFWSwgKGMpKQogCiBzdGF0aWMgaW5saW5lIGludCBtYXRjaF9zY2FuY29kZShpbnQgY29kZSwgaW50IHNjYW5jb2RlKQogewpAQCAtMzY2LDcgKzE1NCw3IEBACiB7CiAJc3RydWN0IGlucHV0X2RldiAqaW5wdXQgPSBoaWRpbnB1dC0+aW5wdXQ7CiAJc3RydWN0IGhpZF9kZXZpY2UgKmRldmljZSA9IGlucHV0X2dldF9kcnZkYXRhKGlucHV0KTsKLQlpbnQgbWF4ID0gMCwgY29kZSwgcmV0OworCWludCBtYXggPSAwLCBjb2RlOwogCXVuc2lnbmVkIGxvbmcgKmJpdCA9IE5VTEw7CiAKIAlmaWVsZC0+aGlkaW5wdXQgPSBoaWRpbnB1dDsKQEAgLTM4NSw0MDYgKzE3MywzNDUgQEAKIAkJZ290byBpZ25vcmU7CiAJfQogCi0JLyogaGFuZGxlIGlucHV0IG1hcHBpbmdzIGZvciBxdWlya3kgZGV2aWNlcyAqLwotCXJldCA9IGhpZGlucHV0X21hcHBpbmdfcXVpcmtzKHVzYWdlLCBpbnB1dCwgJmJpdCwgJm1heCk7Ci0JaWYgKHJldCkKLQkJZ290byBtYXBwZWQ7CisJaWYgKGRldmljZS0+ZHJpdmVyLT5pbnB1dF9tYXBwaW5nKSB7CisJCWludCByZXQgPSBkZXZpY2UtPmRyaXZlci0+aW5wdXRfbWFwcGluZyhkZXZpY2UsIGhpZGlucHV0LCBmaWVsZCwKKwkJCQl1c2FnZSwgJmJpdCwgJm1heCk7CisJCWlmIChyZXQgPiAwKQorCQkJZ290byBtYXBwZWQ7CisJCWlmIChyZXQgPCAwKQorCQkJZ290byBpZ25vcmU7CisJfQogCiAJc3dpdGNoICh1c2FnZS0+aGlkICYgSElEX1VTQUdFX1BBR0UpIHsKKwljYXNlIEhJRF9VUF9VTkRFRklORUQ6CisJCWdvdG8gaWdub3JlOwogCi0JCWNhc2UgSElEX1VQX1VOREVGSU5FRDoKLQkJCWdvdG8gaWdub3JlOworCWNhc2UgSElEX1VQX0tFWUJPQVJEOgorCQlzZXRfYml0KEVWX1JFUCwgaW5wdXQtPmV2Yml0KTsKIAotCQljYXNlIEhJRF9VUF9LRVlCT0FSRDoKKwkJaWYgKCh1c2FnZS0+aGlkICYgSElEX1VTQUdFKSA8IDI1NikgeworCQkJaWYgKCFoaWRfa2V5Ym9hcmRbdXNhZ2UtPmhpZCAmIEhJRF9VU0FHRV0pIGdvdG8gaWdub3JlOworCQkJbWFwX2tleV9jbGVhcihoaWRfa2V5Ym9hcmRbdXNhZ2UtPmhpZCAmIEhJRF9VU0FHRV0pOworCQl9IGVsc2UKKwkJCW1hcF9rZXkoS0VZX1VOS05PV04pOwogCi0JCQlzZXRfYml0KEVWX1JFUCwgaW5wdXQtPmV2Yml0KTsKKwkJYnJlYWs7CiAKLQkJCWlmICgodXNhZ2UtPmhpZCAmIEhJRF9VU0FHRSkgPCAyNTYpIHsKLQkJCQlpZiAoIWhpZF9rZXlib2FyZFt1c2FnZS0+aGlkICYgSElEX1VTQUdFXSkgZ290byBpZ25vcmU7Ci0JCQkJbWFwX2tleV9jbGVhcihoaWRfa2V5Ym9hcmRbdXNhZ2UtPmhpZCAmIEhJRF9VU0FHRV0pOwotCQkJfSBlbHNlCi0JCQkJbWFwX2tleShLRVlfVU5LTk9XTik7CisJY2FzZSBISURfVVBfQlVUVE9OOgorCQljb2RlID0gKCh1c2FnZS0+aGlkIC0gMSkgJiAweGYpOwogCi0JCQlicmVhazsKLQotCQljYXNlIEhJRF9VUF9CVVRUT046Ci0KLQkJCWNvZGUgPSAoKHVzYWdlLT5oaWQgLSAxKSAmIDB4Zik7Ci0KLQkJCXN3aXRjaCAoZmllbGQtPmFwcGxpY2F0aW9uKSB7Ci0JCQkJY2FzZSBISURfR0RfTU9VU0U6Ci0JCQkJY2FzZSBISURfR0RfUE9JTlRFUjogIGNvZGUgKz0gMHgxMTA7IGJyZWFrOwotCQkJCWNhc2UgSElEX0dEX0pPWVNUSUNLOiBjb2RlICs9IDB4MTIwOyBicmVhazsKLQkJCQljYXNlIEhJRF9HRF9HQU1FUEFEOiAgY29kZSArPSAweDEzMDsgYnJlYWs7Ci0JCQkJZGVmYXVsdDoKLQkJCQkJc3dpdGNoIChmaWVsZC0+cGh5c2ljYWwpIHsKLQkJCQkJCWNhc2UgSElEX0dEX01PVVNFOgotCQkJCQkJY2FzZSBISURfR0RfUE9JTlRFUjogIGNvZGUgKz0gMHgxMTA7IGJyZWFrOwotCQkJCQkJY2FzZSBISURfR0RfSk9ZU1RJQ0s6IGNvZGUgKz0gMHgxMjA7IGJyZWFrOwotCQkJCQkJY2FzZSBISURfR0RfR0FNRVBBRDogIGNvZGUgKz0gMHgxMzA7IGJyZWFrOwotCQkJCQkJZGVmYXVsdDogICAgICAgICAgICAgIGNvZGUgKz0gMHgxMDA7Ci0JCQkJCX0KLQkJCX0KLQotCQkJLyogU3BlY2lhbCBoYW5kbGluZyBmb3IgTG9naXRlY2ggQ29yZGxlc3MgRGVza3RvcCAqLwotCQkJaWYgKGZpZWxkLT5hcHBsaWNhdGlvbiAhPSBISURfR0RfTU9VU0UpIHsKLQkJCQlpZiAoZGV2aWNlLT5xdWlya3MgJiBISURfUVVJUktfTE9HSVRFQ0hfRVhQQU5ERURfS0VZTUFQKSB7Ci0JCQkJCWludCBoaWQgPSB1c2FnZS0+aGlkICYgSElEX1VTQUdFOwotCQkJCQlpZiAoaGlkIDwgTE9HSVRFQ0hfRVhQQU5ERURfS0VZTUFQX1NJWkUgJiYgbG9naXRlY2hfZXhwYW5kZWRfa2V5bWFwW2hpZF0gIT0gMCkKLQkJCQkJCWNvZGUgPSBsb2dpdGVjaF9leHBhbmRlZF9rZXltYXBbaGlkXTsKLQkJCQl9Ci0JCQl9IGVsc2UgewotCQkJCWlmIChkZXZpY2UtPnF1aXJrcyAmIEhJRF9RVUlSS19MT0dJVEVDSF9JR05PUkVfRE9VQkxFRF9XSEVFTCkgewotCQkJCQlpbnQgaGlkID0gdXNhZ2UtPmhpZCAmIEhJRF9VU0FHRTsKLQkJCQkJaWYgKGhpZCA9PSA3IHx8IGhpZCA9PSA4KQotCQkJCQkJZ290byBpZ25vcmU7Ci0JCQkJfQotCQkJfQotCi0JCQltYXBfa2V5KGNvZGUpOwotCQkJYnJlYWs7Ci0KLQotCQljYXNlIEhJRF9VUF9TSU1VTEFUSU9OOgotCi0JCQlzd2l0Y2ggKHVzYWdlLT5oaWQgJiAweGZmZmYpIHsKLQkJCQljYXNlIDB4YmE6IG1hcF9hYnMoQUJTX1JVRERFUik7ICAgYnJlYWs7Ci0JCQkJY2FzZSAweGJiOiBtYXBfYWJzKEFCU19USFJPVFRMRSk7IGJyZWFrOwotCQkJCWNhc2UgMHhjNDogbWFwX2FicyhBQlNfR0FTKTsgICAgICBicmVhazsKLQkJCQljYXNlIDB4YzU6IG1hcF9hYnMoQUJTX0JSQUtFKTsgICAgYnJlYWs7Ci0JCQkJY2FzZSAweGM4OiBtYXBfYWJzKEFCU19XSEVFTCk7ICAgIGJyZWFrOwotCQkJCWRlZmF1bHQ6ICAgZ290byBpZ25vcmU7Ci0JCQl9Ci0JCQlicmVhazsKLQotCQljYXNlIEhJRF9VUF9HRU5ERVNLOgotCi0JCQlpZiAoKHVzYWdlLT5oaWQgJiAweGYwKSA9PSAweDgwKSB7CS8qIFN5c3RlbUNvbnRyb2wgKi8KLQkJCQlzd2l0Y2ggKHVzYWdlLT5oaWQgJiAweGYpIHsKLQkJCQkJY2FzZSAweDE6IG1hcF9rZXlfY2xlYXIoS0VZX1BPV0VSKTsgIGJyZWFrOwotCQkJCQljYXNlIDB4MjogbWFwX2tleV9jbGVhcihLRVlfU0xFRVApOyAgYnJlYWs7Ci0JCQkJCWNhc2UgMHgzOiBtYXBfa2V5X2NsZWFyKEtFWV9XQUtFVVApOyBicmVhazsKLQkJCQkJZGVmYXVsdDogZ290byB1bmtub3duOwotCQkJCX0KLQkJCQlicmVhazsKLQkJCX0KLQotCQkJaWYgKCh1c2FnZS0+aGlkICYgMHhmMCkgPT0gMHg5MCkgewkvKiBELXBhZCAqLwotCQkJCXN3aXRjaCAodXNhZ2UtPmhpZCkgewotCQkJCQljYXNlIEhJRF9HRF9VUDoJICAgdXNhZ2UtPmhhdF9kaXIgPSAxOyBicmVhazsKLQkJCQkJY2FzZSBISURfR0RfRE9XTjogIHVzYWdlLT5oYXRfZGlyID0gNTsgYnJlYWs7Ci0JCQkJCWNhc2UgSElEX0dEX1JJR0hUOiB1c2FnZS0+aGF0X2RpciA9IDM7IGJyZWFrOwotCQkJCQljYXNlIEhJRF9HRF9MRUZUOiAgdXNhZ2UtPmhhdF9kaXIgPSA3OyBicmVhazsKLQkJCQkJZGVmYXVsdDogZ290byB1bmtub3duOwotCQkJCX0KLQkJCQlpZiAoZmllbGQtPmRwYWQpIHsKLQkJCQkJbWFwX2FicyhmaWVsZC0+ZHBhZCk7Ci0JCQkJCWdvdG8gaWdub3JlOwotCQkJCX0KLQkJCQltYXBfYWJzKEFCU19IQVQwWCk7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0KLQkJCXN3aXRjaCAodXNhZ2UtPmhpZCkgewotCi0JCQkJLyogVGhlc2UgdXNhZ2UgSURzIG1hcCBkaXJlY3RseSB0byB0aGUgdXNhZ2UgY29kZXMuICovCi0JCQkJY2FzZSBISURfR0RfWDogY2FzZSBISURfR0RfWTogY2FzZSBISURfR0RfWjoKLQkJCQljYXNlIEhJRF9HRF9SWDogY2FzZSBISURfR0RfUlk6IGNhc2UgSElEX0dEX1JaOgotCQkJCWNhc2UgSElEX0dEX1NMSURFUjogY2FzZSBISURfR0RfRElBTDogY2FzZSBISURfR0RfV0hFRUw6Ci0JCQkJCWlmIChmaWVsZC0+ZmxhZ3MgJiBISURfTUFJTl9JVEVNX1JFTEFUSVZFKQotCQkJCQkJbWFwX3JlbCh1c2FnZS0+aGlkICYgMHhmKTsKLQkJCQkJZWxzZQotCQkJCQkJbWFwX2Ficyh1c2FnZS0+aGlkICYgMHhmKTsKLQkJCQkJYnJlYWs7Ci0KLQkJCQljYXNlIEhJRF9HRF9IQVRTV0lUQ0g6Ci0JCQkJCXVzYWdlLT5oYXRfbWluID0gZmllbGQtPmxvZ2ljYWxfbWluaW11bTsKLQkJCQkJdXNhZ2UtPmhhdF9tYXggPSBmaWVsZC0+bG9naWNhbF9tYXhpbXVtOwotCQkJCQltYXBfYWJzKEFCU19IQVQwWCk7Ci0JCQkJCWJyZWFrOwotCi0JCQkJY2FzZSBISURfR0RfU1RBUlQ6CW1hcF9rZXlfY2xlYXIoQlROX1NUQVJUKTsJYnJlYWs7Ci0JCQkJY2FzZSBISURfR0RfU0VMRUNUOgltYXBfa2V5X2NsZWFyKEJUTl9TRUxFQ1QpOwlicmVhazsKLQotCQkJCWRlZmF1bHQ6IGdvdG8gdW5rbm93bjsKLQkJCX0KLQotCQkJYnJlYWs7Ci0KLQkJY2FzZSBISURfVVBfTEVEOgotCi0JCQlzd2l0Y2ggKHVzYWdlLT5oaWQgJiAweGZmZmYpIHsgICAgICAgICAgICAgICAgICAgICAgICAvKiBISUQtVmFsdWU6ICAgICAgICAgICAgICAgICAgICovCi0JCQkJY2FzZSAweDAxOiAgbWFwX2xlZCAoTEVEX05VTUwpOyAgICAgYnJlYWs7ICAgIC8qICAgIk51bSBMb2NrIiAgICAgICAgICAgICAgICAgKi8KLQkJCQljYXNlIDB4MDI6ICBtYXBfbGVkIChMRURfQ0FQU0wpOyAgICBicmVhazsgICAgLyogICAiQ2FwcyBMb2NrIiAgICAgICAgICAgICAgICAqLwotCQkJCWNhc2UgMHgwMzogIG1hcF9sZWQgKExFRF9TQ1JPTExMKTsgIGJyZWFrOyAgICAvKiAgICJTY3JvbGwgTG9jayIgICAgICAgICAgICAgICovCi0JCQkJY2FzZSAweDA0OiAgbWFwX2xlZCAoTEVEX0NPTVBPU0UpOyAgYnJlYWs7ICAgIC8qICAgIkNvbXBvc2UiICAgICAgICAgICAgICAgICAgKi8KLQkJCQljYXNlIDB4MDU6ICBtYXBfbGVkIChMRURfS0FOQSk7ICAgICBicmVhazsgICAgLyogICAiS2FuYSIgICAgICAgICAgICAgICAgICAgICAqLwotCQkJCWNhc2UgMHgyNzogIG1hcF9sZWQgKExFRF9TTEVFUCk7ICAgIGJyZWFrOyAgICAvKiAgICJTdGFuZC1CeSIgICAgICAgICAgICAgICAgICovCi0JCQkJY2FzZSAweDRjOiAgbWFwX2xlZCAoTEVEX1NVU1BFTkQpOyAgYnJlYWs7ICAgIC8qICAgIlN5c3RlbSBTdXNwZW5kIiAgICAgICAgICAgKi8KLQkJCQljYXNlIDB4MDk6ICBtYXBfbGVkIChMRURfTVVURSk7ICAgICBicmVhazsgICAgLyogICAiTXV0ZSIgICAgICAgICAgICAgICAgICAgICAqLwotCQkJCWNhc2UgMHg0YjogIG1hcF9sZWQgKExFRF9NSVNDKTsgICAgIGJyZWFrOyAgICAvKiAgICJHZW5lcmljIEluZGljYXRvciIgICAgICAgICovCi0JCQkJY2FzZSAweDE5OiAgbWFwX2xlZCAoTEVEX01BSUwpOyAgICAgYnJlYWs7ICAgIC8qICAgIk1lc3NhZ2UgV2FpdGluZyIgICAgICAgICAgKi8KLQkJCQljYXNlIDB4NGQ6ICBtYXBfbGVkIChMRURfQ0hBUkdJTkcpOyBicmVhazsgICAgLyogICAiRXh0ZXJuYWwgUG93ZXIgQ29ubmVjdGVkIiAqLwotCi0JCQkJZGVmYXVsdDogZ290byBpZ25vcmU7Ci0JCQl9Ci0JCQlicmVhazsKLQotCQljYXNlIEhJRF9VUF9ESUdJVElaRVI6Ci0KLQkJCXN3aXRjaCAodXNhZ2UtPmhpZCAmIDB4ZmYpIHsKLQotCQkJCWNhc2UgMHgzMDogLyogVGlwUHJlc3N1cmUgKi8KLQkJCQkJaWYgKCF0ZXN0X2JpdChCVE5fVE9VQ0gsIGlucHV0LT5rZXliaXQpKSB7Ci0JCQkJCQlkZXZpY2UtPnF1aXJrcyB8PSBISURfUVVJUktfTk9UT1VDSDsKLQkJCQkJCXNldF9iaXQoRVZfS0VZLCBpbnB1dC0+ZXZiaXQpOwotCQkJCQkJc2V0X2JpdChCVE5fVE9VQ0gsIGlucHV0LT5rZXliaXQpOwotCQkJCQl9Ci0KLQkJCQkJbWFwX2Fic19jbGVhcihBQlNfUFJFU1NVUkUpOwotCQkJCQlicmVhazsKLQotCQkJCWNhc2UgMHgzMjogLyogSW5SYW5nZSAqLwotCQkJCQlzd2l0Y2ggKGZpZWxkLT5waHlzaWNhbCAmIDB4ZmYpIHsKLQkJCQkJCWNhc2UgMHgyMTogbWFwX2tleShCVE5fVE9PTF9NT1VTRSk7IGJyZWFrOwotCQkJCQkJY2FzZSAweDIyOiBtYXBfa2V5KEJUTl9UT09MX0ZJTkdFUik7IGJyZWFrOwotCQkJCQkJZGVmYXVsdDogbWFwX2tleShCVE5fVE9PTF9QRU4pOyBicmVhazsKLQkJCQkJfQotCQkJCQlicmVhazsKLQotCQkJCWNhc2UgMHgzYzogLyogSW52ZXJ0ICovCi0JCQkJCW1hcF9rZXlfY2xlYXIoQlROX1RPT0xfUlVCQkVSKTsKLQkJCQkJYnJlYWs7Ci0KLQkJCQljYXNlIDB4MzM6IC8qIFRvdWNoICovCi0JCQkJY2FzZSAweDQyOiAvKiBUaXBTd2l0Y2ggKi8KLQkJCQljYXNlIDB4NDM6IC8qIFRpcFN3aXRjaDIgKi8KLQkJCQkJZGV2aWNlLT5xdWlya3MgJj0gfkhJRF9RVUlSS19OT1RPVUNIOwotCQkJCQltYXBfa2V5X2NsZWFyKEJUTl9UT1VDSCk7Ci0JCQkJCWJyZWFrOwotCi0JCQkJY2FzZSAweDQ0OiAvKiBCYXJyZWxTd2l0Y2ggKi8KLQkJCQkJbWFwX2tleV9jbGVhcihCVE5fU1RZTFVTKTsKLQkJCQkJYnJlYWs7Ci0KLQkJCQlkZWZhdWx0OiAgZ290byB1bmtub3duOwotCQkJfQotCQkJYnJlYWs7Ci0KLQkJY2FzZSBISURfVVBfQ09OU1VNRVI6CS8qIFVTQiBIVVQgdjEuMSwgcGFnZXMgNTYtNjIgKi8KLQotCQkJc3dpdGNoICh1c2FnZS0+aGlkICYgSElEX1VTQUdFKSB7Ci0JCQkJY2FzZSAweDAwMDogZ290byBpZ25vcmU7Ci0JCQkJY2FzZSAweDAzNDogbWFwX2tleV9jbGVhcihLRVlfU0xFRVApOwkJYnJlYWs7Ci0JCQkJY2FzZSAweDAzNjogbWFwX2tleV9jbGVhcihCVE5fTUlTQyk7CQlicmVhazsKLQotCQkJCWNhc2UgMHgwNDA6IG1hcF9rZXlfY2xlYXIoS0VZX01FTlUpOwkJYnJlYWs7Ci0JCQkJY2FzZSAweDA0NTogbWFwX2tleV9jbGVhcihLRVlfUkFESU8pOwkJYnJlYWs7Ci0KLQkJCQljYXNlIDB4MDgzOiBtYXBfa2V5X2NsZWFyKEtFWV9MQVNUKTsJCWJyZWFrOwotCQkJCWNhc2UgMHgwODg6IG1hcF9rZXlfY2xlYXIoS0VZX1BDKTsJCWJyZWFrOwotCQkJCWNhc2UgMHgwODk6IG1hcF9rZXlfY2xlYXIoS0VZX1RWKTsJCWJyZWFrOwotCQkJCWNhc2UgMHgwOGE6IG1hcF9rZXlfY2xlYXIoS0VZX1dXVyk7CQlicmVhazsKLQkJCQljYXNlIDB4MDhiOiBtYXBfa2V5X2NsZWFyKEtFWV9EVkQpOwkJYnJlYWs7Ci0JCQkJY2FzZSAweDA4YzogbWFwX2tleV9jbGVhcihLRVlfUEhPTkUpOwkJYnJlYWs7Ci0JCQkJY2FzZSAweDA4ZDogbWFwX2tleV9jbGVhcihLRVlfUFJPR1JBTSk7CQlicmVhazsKLQkJCQljYXNlIDB4MDhlOiBtYXBfa2V5X2NsZWFyKEtFWV9WSURFT1BIT05FKTsJYnJlYWs7Ci0JCQkJY2FzZSAweDA4ZjogbWFwX2tleV9jbGVhcihLRVlfR0FNRVMpOwkJYnJlYWs7Ci0JCQkJY2FzZSAweDA5MDogbWFwX2tleV9jbGVhcihLRVlfTUVNTyk7CQlicmVhazsKLQkJCQljYXNlIDB4MDkxOiBtYXBfa2V5X2NsZWFyKEtFWV9DRCk7CQlicmVhazsKLQkJCQljYXNlIDB4MDkyOiBtYXBfa2V5X2NsZWFyKEtFWV9WQ1IpOwkJYnJlYWs7Ci0JCQkJY2FzZSAweDA5MzogbWFwX2tleV9jbGVhcihLRVlfVFVORVIpOwkJYnJlYWs7Ci0JCQkJY2FzZSAweDA5NDogbWFwX2tleV9jbGVhcihLRVlfRVhJVCk7CQlicmVhazsKLQkJCQljYXNlIDB4MDk1OiBtYXBfa2V5X2NsZWFyKEtFWV9IRUxQKTsJCWJyZWFrOwotCQkJCWNhc2UgMHgwOTY6IG1hcF9rZXlfY2xlYXIoS0VZX1RBUEUpOwkJYnJlYWs7Ci0JCQkJY2FzZSAweDA5NzogbWFwX2tleV9jbGVhcihLRVlfVFYyKTsJCWJyZWFrOwotCQkJCWNhc2UgMHgwOTg6IG1hcF9rZXlfY2xlYXIoS0VZX1NBVCk7CQlicmVhazsKLQkJCQljYXNlIDB4MDlhOiBtYXBfa2V5X2NsZWFyKEtFWV9QVlIpOwkJYnJlYWs7Ci0KLQkJCQljYXNlIDB4MDljOiBtYXBfa2V5X2NsZWFyKEtFWV9DSEFOTkVMVVApOwlicmVhazsKLQkJCQljYXNlIDB4MDlkOiBtYXBfa2V5X2NsZWFyKEtFWV9DSEFOTkVMRE9XTik7CWJyZWFrOwotCQkJCWNhc2UgMHgwYTA6IG1hcF9rZXlfY2xlYXIoS0VZX1ZDUjIpOwkJYnJlYWs7Ci0KLQkJCQljYXNlIDB4MGIwOiBtYXBfa2V5X2NsZWFyKEtFWV9QTEFZKTsJCWJyZWFrOwotCQkJCWNhc2UgMHgwYjE6IG1hcF9rZXlfY2xlYXIoS0VZX1BBVVNFKTsJCWJyZWFrOwotCQkJCWNhc2UgMHgwYjI6IG1hcF9rZXlfY2xlYXIoS0VZX1JFQ09SRCk7CQlicmVhazsKLQkJCQljYXNlIDB4MGIzOiBtYXBfa2V5X2NsZWFyKEtFWV9GQVNURk9SV0FSRCk7CWJyZWFrOwotCQkJCWNhc2UgMHgwYjQ6IG1hcF9rZXlfY2xlYXIoS0VZX1JFV0lORCk7CQlicmVhazsKLQkJCQljYXNlIDB4MGI1OiBtYXBfa2V5X2NsZWFyKEtFWV9ORVhUU09ORyk7CWJyZWFrOwotCQkJCWNhc2UgMHgwYjY6IG1hcF9rZXlfY2xlYXIoS0VZX1BSRVZJT1VTU09ORyk7CWJyZWFrOwotCQkJCWNhc2UgMHgwYjc6IG1hcF9rZXlfY2xlYXIoS0VZX1NUT1BDRCk7CQlicmVhazsKLQkJCQljYXNlIDB4MGI4OiBtYXBfa2V5X2NsZWFyKEtFWV9FSkVDVENEKTsJCWJyZWFrOwotCQkJCWNhc2UgMHgwYmM6IG1hcF9rZXlfY2xlYXIoS0VZX01FRElBX1JFUEVBVCk7CWJyZWFrOwotCi0JCQkJY2FzZSAweDBjZDogbWFwX2tleV9jbGVhcihLRVlfUExBWVBBVVNFKTsJYnJlYWs7Ci0JCQkgICAgICAgIGNhc2UgMHgwZTA6IG1hcF9hYnNfY2xlYXIoQUJTX1ZPTFVNRSk7CQlicmVhazsKLQkJCQljYXNlIDB4MGUyOiBtYXBfa2V5X2NsZWFyKEtFWV9NVVRFKTsJCWJyZWFrOwotCQkJCWNhc2UgMHgwZTU6IG1hcF9rZXlfY2xlYXIoS0VZX0JBU1NCT09TVCk7CWJyZWFrOwotCQkJCWNhc2UgMHgwZTk6IG1hcF9rZXlfY2xlYXIoS0VZX1ZPTFVNRVVQKTsJYnJlYWs7Ci0JCQkJY2FzZSAweDBlYTogbWFwX2tleV9jbGVhcihLRVlfVk9MVU1FRE9XTik7CWJyZWFrOwotCi0JCQkJY2FzZSAweDE4MjogbWFwX2tleV9jbGVhcihLRVlfQk9PS01BUktTKTsJYnJlYWs7Ci0JCQkJY2FzZSAweDE4MzogbWFwX2tleV9jbGVhcihLRVlfQ09ORklHKTsJCWJyZWFrOwotCQkJCWNhc2UgMHgxODQ6IG1hcF9rZXlfY2xlYXIoS0VZX1dPUkRQUk9DRVNTT1IpOwlicmVhazsKLQkJCQljYXNlIDB4MTg1OiBtYXBfa2V5X2NsZWFyKEtFWV9FRElUT1IpOwkJYnJlYWs7Ci0JCQkJY2FzZSAweDE4NjogbWFwX2tleV9jbGVhcihLRVlfU1BSRUFEU0hFRVQpOwlicmVhazsKLQkJCQljYXNlIDB4MTg3OiBtYXBfa2V5X2NsZWFyKEtFWV9HUkFQSElDU0VESVRPUik7CWJyZWFrOwotCQkJCWNhc2UgMHgxODg6IG1hcF9rZXlfY2xlYXIoS0VZX1BSRVNFTlRBVElPTik7CWJyZWFrOwotCQkJCWNhc2UgMHgxODk6IG1hcF9rZXlfY2xlYXIoS0VZX0RBVEFCQVNFKTsJYnJlYWs7Ci0JCQkJY2FzZSAweDE4YTogbWFwX2tleV9jbGVhcihLRVlfTUFJTCk7CQlicmVhazsKLQkJCQljYXNlIDB4MThiOiBtYXBfa2V5X2NsZWFyKEtFWV9ORVdTKTsJCWJyZWFrOwotCQkJCWNhc2UgMHgxOGM6IG1hcF9rZXlfY2xlYXIoS0VZX1ZPSUNFTUFJTCk7CWJyZWFrOwotCQkJCWNhc2UgMHgxOGQ6IG1hcF9rZXlfY2xlYXIoS0VZX0FERFJFU1NCT09LKTsJYnJlYWs7Ci0JCQkJY2FzZSAweDE4ZTogbWFwX2tleV9jbGVhcihLRVlfQ0FMRU5EQVIpOwlicmVhazsKLQkJCQljYXNlIDB4MTkxOiBtYXBfa2V5X2NsZWFyKEtFWV9GSU5BTkNFKTsJCWJyZWFrOwotCQkJCWNhc2UgMHgxOTI6IG1hcF9rZXlfY2xlYXIoS0VZX0NBTEMpOwkJYnJlYWs7Ci0JCQkJY2FzZSAweDE5NDogbWFwX2tleV9jbGVhcihLRVlfRklMRSk7CQlicmVhazsKLQkJCQljYXNlIDB4MTk2OiBtYXBfa2V5X2NsZWFyKEtFWV9XV1cpOwkJYnJlYWs7Ci0JCQkJY2FzZSAweDE5YzogbWFwX2tleV9jbGVhcihLRVlfTE9HT0ZGKTsJCWJyZWFrOwotCQkJCWNhc2UgMHgxOWU6IG1hcF9rZXlfY2xlYXIoS0VZX0NPRkZFRSk7CQlicmVhazsKLQkJCQljYXNlIDB4MWE2OiBtYXBfa2V5X2NsZWFyKEtFWV9IRUxQKTsJCWJyZWFrOwotCQkJCWNhc2UgMHgxYTc6IG1hcF9rZXlfY2xlYXIoS0VZX0RPQ1VNRU5UUyk7CWJyZWFrOwotCQkJCWNhc2UgMHgxYWI6IG1hcF9rZXlfY2xlYXIoS0VZX1NQRUxMQ0hFQ0spOwlicmVhazsKLQkJCQljYXNlIDB4MWI2OiBtYXBfa2V5X2NsZWFyKEtFWV9NRURJQSk7CQlicmVhazsKLQkJCQljYXNlIDB4MWI3OiBtYXBfa2V5X2NsZWFyKEtFWV9TT1VORCk7CQlicmVhazsKLQkJCQljYXNlIDB4MWJjOiBtYXBfa2V5X2NsZWFyKEtFWV9NRVNTRU5HRVIpOwlicmVhazsKLQkJCQljYXNlIDB4MWJkOiBtYXBfa2V5X2NsZWFyKEtFWV9JTkZPKTsJCWJyZWFrOwotCQkJCWNhc2UgMHgyMDE6IG1hcF9rZXlfY2xlYXIoS0VZX05FVyk7CQlicmVhazsKLQkJCQljYXNlIDB4MjAyOiBtYXBfa2V5X2NsZWFyKEtFWV9PUEVOKTsJCWJyZWFrOwotCQkJCWNhc2UgMHgyMDM6IG1hcF9rZXlfY2xlYXIoS0VZX0NMT1NFKTsJCWJyZWFrOwotCQkJCWNhc2UgMHgyMDQ6IG1hcF9rZXlfY2xlYXIoS0VZX0VYSVQpOwkJYnJlYWs7Ci0JCQkJY2FzZSAweDIwNzogbWFwX2tleV9jbGVhcihLRVlfU0FWRSk7CQlicmVhazsKLQkJCQljYXNlIDB4MjA4OiBtYXBfa2V5X2NsZWFyKEtFWV9QUklOVCk7CQlicmVhazsKLQkJCQljYXNlIDB4MjA5OiBtYXBfa2V5X2NsZWFyKEtFWV9QUk9QUyk7CQlicmVhazsKLQkJCQljYXNlIDB4MjFhOiBtYXBfa2V5X2NsZWFyKEtFWV9VTkRPKTsJCWJyZWFrOwotCQkJCWNhc2UgMHgyMWI6IG1hcF9rZXlfY2xlYXIoS0VZX0NPUFkpOwkJYnJlYWs7Ci0JCQkJY2FzZSAweDIxYzogbWFwX2tleV9jbGVhcihLRVlfQ1VUKTsJCWJyZWFrOwotCQkJCWNhc2UgMHgyMWQ6IG1hcF9rZXlfY2xlYXIoS0VZX1BBU1RFKTsJCWJyZWFrOwotCQkJCWNhc2UgMHgyMWY6IG1hcF9rZXlfY2xlYXIoS0VZX0ZJTkQpOwkJYnJlYWs7Ci0JCQkJY2FzZSAweDIyMTogbWFwX2tleV9jbGVhcihLRVlfU0VBUkNIKTsJCWJyZWFrOwotCQkJCWNhc2UgMHgyMjI6IG1hcF9rZXlfY2xlYXIoS0VZX0dPVE8pOwkJYnJlYWs7Ci0JCQkJY2FzZSAweDIyMzogbWFwX2tleV9jbGVhcihLRVlfSE9NRVBBR0UpOwlicmVhazsKLQkJCQljYXNlIDB4MjI0OiBtYXBfa2V5X2NsZWFyKEtFWV9CQUNLKTsJCWJyZWFrOwotCQkJCWNhc2UgMHgyMjU6IG1hcF9rZXlfY2xlYXIoS0VZX0ZPUldBUkQpOwkJYnJlYWs7Ci0JCQkJY2FzZSAweDIyNjogbWFwX2tleV9jbGVhcihLRVlfU1RPUCk7CQlicmVhazsKLQkJCQljYXNlIDB4MjI3OiBtYXBfa2V5X2NsZWFyKEtFWV9SRUZSRVNIKTsJCWJyZWFrOwotCQkJCWNhc2UgMHgyMmE6IG1hcF9rZXlfY2xlYXIoS0VZX0JPT0tNQVJLUyk7CWJyZWFrOwotCQkJCWNhc2UgMHgyMmQ6IG1hcF9rZXlfY2xlYXIoS0VZX1pPT01JTik7CQlicmVhazsKLQkJCQljYXNlIDB4MjJlOiBtYXBfa2V5X2NsZWFyKEtFWV9aT09NT1VUKTsJCWJyZWFrOwotCQkJCWNhc2UgMHgyMmY6IG1hcF9rZXlfY2xlYXIoS0VZX1pPT01SRVNFVCk7CWJyZWFrOwotCQkJCWNhc2UgMHgyMzM6IG1hcF9rZXlfY2xlYXIoS0VZX1NDUk9MTFVQKTsJYnJlYWs7Ci0JCQkJY2FzZSAweDIzNDogbWFwX2tleV9jbGVhcihLRVlfU0NST0xMRE9XTik7CWJyZWFrOwotCQkJCWNhc2UgMHgyMzg6IG1hcF9yZWwoUkVMX0hXSEVFTCk7CQlicmVhazsKLQkJCQljYXNlIDB4MjVmOiBtYXBfa2V5X2NsZWFyKEtFWV9DQU5DRUwpOwkJYnJlYWs7Ci0JCQkJY2FzZSAweDI3OTogbWFwX2tleV9jbGVhcihLRVlfUkVETyk7CQlicmVhazsKLQotCQkJCWNhc2UgMHgyODk6IG1hcF9rZXlfY2xlYXIoS0VZX1JFUExZKTsJCWJyZWFrOwotCQkJCWNhc2UgMHgyOGI6IG1hcF9rZXlfY2xlYXIoS0VZX0ZPUldBUkRNQUlMKTsJYnJlYWs7Ci0JCQkJY2FzZSAweDI4YzogbWFwX2tleV9jbGVhcihLRVlfU0VORCk7CQlicmVhazsKLQotCQkJCWRlZmF1bHQ6ICAgIGdvdG8gaWdub3JlOwotCQkJfQotCQkJYnJlYWs7Ci0KLQkJY2FzZSBISURfVVBfSFBWRU5ET1I6CS8qIFJlcG9ydGVkIG9uIGEgRHV0Y2ggbGF5b3V0IEhQNTMwOCAqLwotCi0JCQlzZXRfYml0KEVWX1JFUCwgaW5wdXQtPmV2Yml0KTsKLQkJCXN3aXRjaCAodXNhZ2UtPmhpZCAmIEhJRF9VU0FHRSkgewotCQkJICAgICAgICBjYXNlIDB4MDIxOiBtYXBfa2V5X2NsZWFyKEtFWV9QUklOVCk7ICAgICAgICAgICBicmVhazsKLQkJCQljYXNlIDB4MDcwOiBtYXBfa2V5X2NsZWFyKEtFWV9IUCk7CQlicmVhazsKLQkJCQljYXNlIDB4MDcxOiBtYXBfa2V5X2NsZWFyKEtFWV9DQU1FUkEpOwkJYnJlYWs7Ci0JCQkJY2FzZSAweDA3MjogbWFwX2tleV9jbGVhcihLRVlfU09VTkQpOwkJYnJlYWs7Ci0JCQkJY2FzZSAweDA3MzogbWFwX2tleV9jbGVhcihLRVlfUVVFU1RJT04pOwlicmVhazsKLQkJCQljYXNlIDB4MDgwOiBtYXBfa2V5X2NsZWFyKEtFWV9FTUFJTCk7CQlicmVhazsKLQkJCQljYXNlIDB4MDgxOiBtYXBfa2V5X2NsZWFyKEtFWV9DSEFUKTsJCWJyZWFrOwotCQkJCWNhc2UgMHgwODI6IG1hcF9rZXlfY2xlYXIoS0VZX1NFQVJDSCk7CQlicmVhazsKLQkJCQljYXNlIDB4MDgzOiBtYXBfa2V5X2NsZWFyKEtFWV9DT05ORUNUKTsJICAgICAgICBicmVhazsKLQkJCQljYXNlIDB4MDg0OiBtYXBfa2V5X2NsZWFyKEtFWV9GSU5BTkNFKTsJCWJyZWFrOwotCQkJCWNhc2UgMHgwODU6IG1hcF9rZXlfY2xlYXIoS0VZX1NQT1JUKTsJCWJyZWFrOwotCQkJCWNhc2UgMHgwODY6IG1hcF9rZXlfY2xlYXIoS0VZX1NIT1ApOwkgICAgICAgIGJyZWFrOwotCQkJCWRlZmF1bHQ6ICAgIGdvdG8gaWdub3JlOwotCQkJfQotCQkJYnJlYWs7Ci0KLQkJY2FzZSBISURfVVBfTVNWRU5ET1I6Ci0KLQkJCWdvdG8gaWdub3JlOwotCi0JCWNhc2UgSElEX1VQX0NVU1RPTTogLyogUmVwb3J0ZWQgb24gTG9naXRlY2ggYW5kIEFwcGxlIFVTQiBrZXlib2FyZHMgKi8KLQotCQkJc2V0X2JpdChFVl9SRVAsIGlucHV0LT5ldmJpdCk7Ci0JCQlzd2l0Y2godXNhZ2UtPmhpZCAmIEhJRF9VU0FHRSkgewotCQkJCWNhc2UgMHgwMDM6Ci0JCQkJCS8qIFRoZSBmbiBrZXkgb24gQXBwbGUgVVNCIGtleWJvYXJkcyAqLwotCQkJCQltYXBfa2V5X2NsZWFyKEtFWV9GTik7Ci0JCQkJCWhpZGlucHV0X2FwcGxlX3NldHVwKGlucHV0KTsKLQkJCQkJYnJlYWs7Ci0KLQkJCQlkZWZhdWx0OiAgICBnb3RvIGlnbm9yZTsKLQkJCX0KLQkJCWJyZWFrOwotCi0JCWNhc2UgSElEX1VQX0xPR0lWRU5ET1I6Ci0KLQkJCWdvdG8gaWdub3JlOwotCQkKLQkJY2FzZSBISURfVVBfUElEOgotCi0JCQlzd2l0Y2godXNhZ2UtPmhpZCAmIEhJRF9VU0FHRSkgewotCQkJCWNhc2UgMHhhNDogbWFwX2tleV9jbGVhcihCVE5fREVBRCk7CWJyZWFrOwotCQkJCWRlZmF1bHQ6IGdvdG8gaWdub3JlOwotCQkJfQotCQkJYnJlYWs7Ci0KKwkJc3dpdGNoIChmaWVsZC0+YXBwbGljYXRpb24pIHsKKwkJY2FzZSBISURfR0RfTU9VU0U6CisJCWNhc2UgSElEX0dEX1BPSU5URVI6ICBjb2RlICs9IDB4MTEwOyBicmVhazsKKwkJY2FzZSBISURfR0RfSk9ZU1RJQ0s6IGNvZGUgKz0gMHgxMjA7IGJyZWFrOworCQljYXNlIEhJRF9HRF9HQU1FUEFEOiAgY29kZSArPSAweDEzMDsgYnJlYWs7CiAJCWRlZmF1bHQ6Ci0JCXVua25vd246Ci0JCQlpZiAoZmllbGQtPnJlcG9ydF9zaXplID09IDEpIHsKLQkJCQlpZiAoZmllbGQtPnJlcG9ydC0+dHlwZSA9PSBISURfT1VUUFVUX1JFUE9SVCkgewotCQkJCQltYXBfbGVkKExFRF9NSVNDKTsKLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJCW1hcF9rZXkoQlROX01JU0MpOwotCQkJCWJyZWFrOworCQkJc3dpdGNoIChmaWVsZC0+cGh5c2ljYWwpIHsKKwkJCWNhc2UgSElEX0dEX01PVVNFOgorCQkJY2FzZSBISURfR0RfUE9JTlRFUjogIGNvZGUgKz0gMHgxMTA7IGJyZWFrOworCQkJY2FzZSBISURfR0RfSk9ZU1RJQ0s6IGNvZGUgKz0gMHgxMjA7IGJyZWFrOworCQkJY2FzZSBISURfR0RfR0FNRVBBRDogIGNvZGUgKz0gMHgxMzA7IGJyZWFrOworCQkJZGVmYXVsdDogICAgICAgICAgICAgIGNvZGUgKz0gMHgxMDA7CiAJCQl9Ci0JCQlpZiAoZmllbGQtPmZsYWdzICYgSElEX01BSU5fSVRFTV9SRUxBVElWRSkgewotCQkJCW1hcF9yZWwoUkVMX01JU0MpOwotCQkJCWJyZWFrOworCQl9CisKKwkJbWFwX2tleShjb2RlKTsKKwkJYnJlYWs7CisKKwljYXNlIEhJRF9VUF9TSU1VTEFUSU9OOgorCQlzd2l0Y2ggKHVzYWdlLT5oaWQgJiAweGZmZmYpIHsKKwkJY2FzZSAweGJhOiBtYXBfYWJzKEFCU19SVURERVIpOyAgIGJyZWFrOworCQljYXNlIDB4YmI6IG1hcF9hYnMoQUJTX1RIUk9UVExFKTsgYnJlYWs7CisJCWNhc2UgMHhjNDogbWFwX2FicyhBQlNfR0FTKTsgICAgICBicmVhazsKKwkJY2FzZSAweGM1OiBtYXBfYWJzKEFCU19CUkFLRSk7ICAgIGJyZWFrOworCQljYXNlIDB4Yzg6IG1hcF9hYnMoQUJTX1dIRUVMKTsgICAgYnJlYWs7CisJCWRlZmF1bHQ6ICAgZ290byBpZ25vcmU7CisJCX0KKwkJYnJlYWs7CisKKwljYXNlIEhJRF9VUF9HRU5ERVNLOgorCQlpZiAoKHVzYWdlLT5oaWQgJiAweGYwKSA9PSAweDgwKSB7CS8qIFN5c3RlbUNvbnRyb2wgKi8KKwkJCXN3aXRjaCAodXNhZ2UtPmhpZCAmIDB4ZikgeworCQkJY2FzZSAweDE6IG1hcF9rZXlfY2xlYXIoS0VZX1BPV0VSKTsgIGJyZWFrOworCQkJY2FzZSAweDI6IG1hcF9rZXlfY2xlYXIoS0VZX1NMRUVQKTsgIGJyZWFrOworCQkJY2FzZSAweDM6IG1hcF9rZXlfY2xlYXIoS0VZX1dBS0VVUCk7IGJyZWFrOworCQkJZGVmYXVsdDogZ290byB1bmtub3duOwogCQkJfQotCQkJbWFwX2FicyhBQlNfTUlTQyk7CiAJCQlicmVhazsKKwkJfQorCisJCWlmICgodXNhZ2UtPmhpZCAmIDB4ZjApID09IDB4OTApIHsJLyogRC1wYWQgKi8KKwkJCXN3aXRjaCAodXNhZ2UtPmhpZCkgeworCQkJY2FzZSBISURfR0RfVVA6CSAgIHVzYWdlLT5oYXRfZGlyID0gMTsgYnJlYWs7CisJCQljYXNlIEhJRF9HRF9ET1dOOiAgdXNhZ2UtPmhhdF9kaXIgPSA1OyBicmVhazsKKwkJCWNhc2UgSElEX0dEX1JJR0hUOiB1c2FnZS0+aGF0X2RpciA9IDM7IGJyZWFrOworCQkJY2FzZSBISURfR0RfTEVGVDogIHVzYWdlLT5oYXRfZGlyID0gNzsgYnJlYWs7CisJCQlkZWZhdWx0OiBnb3RvIHVua25vd247CisJCQl9CisJCQlpZiAoZmllbGQtPmRwYWQpIHsKKwkJCQltYXBfYWJzKGZpZWxkLT5kcGFkKTsKKwkJCQlnb3RvIGlnbm9yZTsKKwkJCX0KKwkJCW1hcF9hYnMoQUJTX0hBVDBYKTsKKwkJCWJyZWFrOworCQl9CisKKwkJc3dpdGNoICh1c2FnZS0+aGlkKSB7CisJCS8qIFRoZXNlIHVzYWdlIElEcyBtYXAgZGlyZWN0bHkgdG8gdGhlIHVzYWdlIGNvZGVzLiAqLworCQljYXNlIEhJRF9HRF9YOiBjYXNlIEhJRF9HRF9ZOiBjYXNlIEhJRF9HRF9aOgorCQljYXNlIEhJRF9HRF9SWDogY2FzZSBISURfR0RfUlk6IGNhc2UgSElEX0dEX1JaOgorCQljYXNlIEhJRF9HRF9TTElERVI6IGNhc2UgSElEX0dEX0RJQUw6IGNhc2UgSElEX0dEX1dIRUVMOgorCQkJaWYgKGZpZWxkLT5mbGFncyAmIEhJRF9NQUlOX0lURU1fUkVMQVRJVkUpCisJCQkJbWFwX3JlbCh1c2FnZS0+aGlkICYgMHhmKTsKKwkJCWVsc2UKKwkJCQltYXBfYWJzKHVzYWdlLT5oaWQgJiAweGYpOworCQkJYnJlYWs7CisKKwkJY2FzZSBISURfR0RfSEFUU1dJVENIOgorCQkJdXNhZ2UtPmhhdF9taW4gPSBmaWVsZC0+bG9naWNhbF9taW5pbXVtOworCQkJdXNhZ2UtPmhhdF9tYXggPSBmaWVsZC0+bG9naWNhbF9tYXhpbXVtOworCQkJbWFwX2FicyhBQlNfSEFUMFgpOworCQkJYnJlYWs7CisKKwkJY2FzZSBISURfR0RfU1RBUlQ6CW1hcF9rZXlfY2xlYXIoQlROX1NUQVJUKTsJYnJlYWs7CisJCWNhc2UgSElEX0dEX1NFTEVDVDoJbWFwX2tleV9jbGVhcihCVE5fU0VMRUNUKTsJYnJlYWs7CisKKwkJZGVmYXVsdDogZ290byB1bmtub3duOworCQl9CisKKwkJYnJlYWs7CisKKwljYXNlIEhJRF9VUF9MRUQ6CisJCXN3aXRjaCAodXNhZ2UtPmhpZCAmIDB4ZmZmZikgewkJICAgICAgLyogSElELVZhbHVlOiAgICAgICAgICAgICAgICAgICAqLworCQljYXNlIDB4MDE6ICBtYXBfbGVkIChMRURfTlVNTCk7ICAgICBicmVhazsgICAgLyogICAiTnVtIExvY2siICAgICAgICAgICAgICAgICAqLworCQljYXNlIDB4MDI6ICBtYXBfbGVkIChMRURfQ0FQU0wpOyAgICBicmVhazsgICAgLyogICAiQ2FwcyBMb2NrIiAgICAgICAgICAgICAgICAqLworCQljYXNlIDB4MDM6ICBtYXBfbGVkIChMRURfU0NST0xMTCk7ICBicmVhazsgICAgLyogICAiU2Nyb2xsIExvY2siICAgICAgICAgICAgICAqLworCQljYXNlIDB4MDQ6ICBtYXBfbGVkIChMRURfQ09NUE9TRSk7ICBicmVhazsgICAgLyogICAiQ29tcG9zZSIgICAgICAgICAgICAgICAgICAqLworCQljYXNlIDB4MDU6ICBtYXBfbGVkIChMRURfS0FOQSk7ICAgICBicmVhazsgICAgLyogICAiS2FuYSIgICAgICAgICAgICAgICAgICAgICAqLworCQljYXNlIDB4Mjc6ICBtYXBfbGVkIChMRURfU0xFRVApOyAgICBicmVhazsgICAgLyogICAiU3RhbmQtQnkiICAgICAgICAgICAgICAgICAqLworCQljYXNlIDB4NGM6ICBtYXBfbGVkIChMRURfU1VTUEVORCk7ICBicmVhazsgICAgLyogICAiU3lzdGVtIFN1c3BlbmQiICAgICAgICAgICAqLworCQljYXNlIDB4MDk6ICBtYXBfbGVkIChMRURfTVVURSk7ICAgICBicmVhazsgICAgLyogICAiTXV0ZSIgICAgICAgICAgICAgICAgICAgICAqLworCQljYXNlIDB4NGI6ICBtYXBfbGVkIChMRURfTUlTQyk7ICAgICBicmVhazsgICAgLyogICAiR2VuZXJpYyBJbmRpY2F0b3IiICAgICAgICAqLworCQljYXNlIDB4MTk6ICBtYXBfbGVkIChMRURfTUFJTCk7ICAgICBicmVhazsgICAgLyogICAiTWVzc2FnZSBXYWl0aW5nIiAgICAgICAgICAqLworCQljYXNlIDB4NGQ6ICBtYXBfbGVkIChMRURfQ0hBUkdJTkcpOyBicmVhazsgICAgLyogICAiRXh0ZXJuYWwgUG93ZXIgQ29ubmVjdGVkIiAqLworCisJCWRlZmF1bHQ6IGdvdG8gaWdub3JlOworCQl9CisJCWJyZWFrOworCisJY2FzZSBISURfVVBfRElHSVRJWkVSOgorCQlzd2l0Y2ggKHVzYWdlLT5oaWQgJiAweGZmKSB7CisJCWNhc2UgMHgzMDogLyogVGlwUHJlc3N1cmUgKi8KKwkJCWlmICghdGVzdF9iaXQoQlROX1RPVUNILCBpbnB1dC0+a2V5Yml0KSkgeworCQkJCWRldmljZS0+cXVpcmtzIHw9IEhJRF9RVUlSS19OT1RPVUNIOworCQkJCXNldF9iaXQoRVZfS0VZLCBpbnB1dC0+ZXZiaXQpOworCQkJCXNldF9iaXQoQlROX1RPVUNILCBpbnB1dC0+a2V5Yml0KTsKKwkJCX0KKwkJCW1hcF9hYnNfY2xlYXIoQUJTX1BSRVNTVVJFKTsKKwkJCWJyZWFrOworCisJCWNhc2UgMHgzMjogLyogSW5SYW5nZSAqLworCQkJc3dpdGNoIChmaWVsZC0+cGh5c2ljYWwgJiAweGZmKSB7CisJCQljYXNlIDB4MjE6IG1hcF9rZXkoQlROX1RPT0xfTU9VU0UpOyBicmVhazsKKwkJCWNhc2UgMHgyMjogbWFwX2tleShCVE5fVE9PTF9GSU5HRVIpOyBicmVhazsKKwkJCWRlZmF1bHQ6IG1hcF9rZXkoQlROX1RPT0xfUEVOKTsgYnJlYWs7CisJCQl9CisJCQlicmVhazsKKworCQljYXNlIDB4M2M6IC8qIEludmVydCAqLworCQkJbWFwX2tleV9jbGVhcihCVE5fVE9PTF9SVUJCRVIpOworCQkJYnJlYWs7CisKKwkJY2FzZSAweDMzOiAvKiBUb3VjaCAqLworCQljYXNlIDB4NDI6IC8qIFRpcFN3aXRjaCAqLworCQljYXNlIDB4NDM6IC8qIFRpcFN3aXRjaDIgKi8KKwkJCWRldmljZS0+cXVpcmtzICY9IH5ISURfUVVJUktfTk9UT1VDSDsKKwkJCW1hcF9rZXlfY2xlYXIoQlROX1RPVUNIKTsKKwkJCWJyZWFrOworCisJCWNhc2UgMHg0NDogLyogQmFycmVsU3dpdGNoICovCisJCQltYXBfa2V5X2NsZWFyKEJUTl9TVFlMVVMpOworCQkJYnJlYWs7CisKKwkJZGVmYXVsdDogIGdvdG8gdW5rbm93bjsKKwkJfQorCQlicmVhazsKKworCWNhc2UgSElEX1VQX0NPTlNVTUVSOgkvKiBVU0IgSFVUIHYxLjEsIHBhZ2VzIDU2LTYyICovCisJCXN3aXRjaCAodXNhZ2UtPmhpZCAmIEhJRF9VU0FHRSkgeworCQljYXNlIDB4MDAwOiBnb3RvIGlnbm9yZTsKKwkJY2FzZSAweDAzNDogbWFwX2tleV9jbGVhcihLRVlfU0xFRVApOwkJYnJlYWs7CisJCWNhc2UgMHgwMzY6IG1hcF9rZXlfY2xlYXIoQlROX01JU0MpOwkJYnJlYWs7CisKKwkJY2FzZSAweDA0MDogbWFwX2tleV9jbGVhcihLRVlfTUVOVSk7CQlicmVhazsKKwkJY2FzZSAweDA0NTogbWFwX2tleV9jbGVhcihLRVlfUkFESU8pOwkJYnJlYWs7CisKKwkJY2FzZSAweDA4MzogbWFwX2tleV9jbGVhcihLRVlfTEFTVCk7CQlicmVhazsKKwkJY2FzZSAweDA4ODogbWFwX2tleV9jbGVhcihLRVlfUEMpOwkJYnJlYWs7CisJCWNhc2UgMHgwODk6IG1hcF9rZXlfY2xlYXIoS0VZX1RWKTsJCWJyZWFrOworCQljYXNlIDB4MDhhOiBtYXBfa2V5X2NsZWFyKEtFWV9XV1cpOwkJYnJlYWs7CisJCWNhc2UgMHgwOGI6IG1hcF9rZXlfY2xlYXIoS0VZX0RWRCk7CQlicmVhazsKKwkJY2FzZSAweDA4YzogbWFwX2tleV9jbGVhcihLRVlfUEhPTkUpOwkJYnJlYWs7CisJCWNhc2UgMHgwOGQ6IG1hcF9rZXlfY2xlYXIoS0VZX1BST0dSQU0pOwkJYnJlYWs7CisJCWNhc2UgMHgwOGU6IG1hcF9rZXlfY2xlYXIoS0VZX1ZJREVPUEhPTkUpOwlicmVhazsKKwkJY2FzZSAweDA4ZjogbWFwX2tleV9jbGVhcihLRVlfR0FNRVMpOwkJYnJlYWs7CisJCWNhc2UgMHgwOTA6IG1hcF9rZXlfY2xlYXIoS0VZX01FTU8pOwkJYnJlYWs7CisJCWNhc2UgMHgwOTE6IG1hcF9rZXlfY2xlYXIoS0VZX0NEKTsJCWJyZWFrOworCQljYXNlIDB4MDkyOiBtYXBfa2V5X2NsZWFyKEtFWV9WQ1IpOwkJYnJlYWs7CisJCWNhc2UgMHgwOTM6IG1hcF9rZXlfY2xlYXIoS0VZX1RVTkVSKTsJCWJyZWFrOworCQljYXNlIDB4MDk0OiBtYXBfa2V5X2NsZWFyKEtFWV9FWElUKTsJCWJyZWFrOworCQljYXNlIDB4MDk1OiBtYXBfa2V5X2NsZWFyKEtFWV9IRUxQKTsJCWJyZWFrOworCQljYXNlIDB4MDk2OiBtYXBfa2V5X2NsZWFyKEtFWV9UQVBFKTsJCWJyZWFrOworCQljYXNlIDB4MDk3OiBtYXBfa2V5X2NsZWFyKEtFWV9UVjIpOwkJYnJlYWs7CisJCWNhc2UgMHgwOTg6IG1hcF9rZXlfY2xlYXIoS0VZX1NBVCk7CQlicmVhazsKKwkJY2FzZSAweDA5YTogbWFwX2tleV9jbGVhcihLRVlfUFZSKTsJCWJyZWFrOworCisJCWNhc2UgMHgwOWM6IG1hcF9rZXlfY2xlYXIoS0VZX0NIQU5ORUxVUCk7CWJyZWFrOworCQljYXNlIDB4MDlkOiBtYXBfa2V5X2NsZWFyKEtFWV9DSEFOTkVMRE9XTik7CWJyZWFrOworCQljYXNlIDB4MGEwOiBtYXBfa2V5X2NsZWFyKEtFWV9WQ1IyKTsJCWJyZWFrOworCisJCWNhc2UgMHgwYjA6IG1hcF9rZXlfY2xlYXIoS0VZX1BMQVkpOwkJYnJlYWs7CisJCWNhc2UgMHgwYjE6IG1hcF9rZXlfY2xlYXIoS0VZX1BBVVNFKTsJCWJyZWFrOworCQljYXNlIDB4MGIyOiBtYXBfa2V5X2NsZWFyKEtFWV9SRUNPUkQpOwkJYnJlYWs7CisJCWNhc2UgMHgwYjM6IG1hcF9rZXlfY2xlYXIoS0VZX0ZBU1RGT1JXQVJEKTsJYnJlYWs7CisJCWNhc2UgMHgwYjQ6IG1hcF9rZXlfY2xlYXIoS0VZX1JFV0lORCk7CQlicmVhazsKKwkJY2FzZSAweDBiNTogbWFwX2tleV9jbGVhcihLRVlfTkVYVFNPTkcpOwlicmVhazsKKwkJY2FzZSAweDBiNjogbWFwX2tleV9jbGVhcihLRVlfUFJFVklPVVNTT05HKTsJYnJlYWs7CisJCWNhc2UgMHgwYjc6IG1hcF9rZXlfY2xlYXIoS0VZX1NUT1BDRCk7CQlicmVhazsKKwkJY2FzZSAweDBiODogbWFwX2tleV9jbGVhcihLRVlfRUpFQ1RDRCk7CQlicmVhazsKKwkJY2FzZSAweDBiYzogbWFwX2tleV9jbGVhcihLRVlfTUVESUFfUkVQRUFUKTsJYnJlYWs7CisKKwkJY2FzZSAweDBjZDogbWFwX2tleV9jbGVhcihLRVlfUExBWVBBVVNFKTsJYnJlYWs7CisJCWNhc2UgMHgwZTA6IG1hcF9hYnNfY2xlYXIoQUJTX1ZPTFVNRSk7CQlicmVhazsKKwkJY2FzZSAweDBlMjogbWFwX2tleV9jbGVhcihLRVlfTVVURSk7CQlicmVhazsKKwkJY2FzZSAweDBlNTogbWFwX2tleV9jbGVhcihLRVlfQkFTU0JPT1NUKTsJYnJlYWs7CisJCWNhc2UgMHgwZTk6IG1hcF9rZXlfY2xlYXIoS0VZX1ZPTFVNRVVQKTsJYnJlYWs7CisJCWNhc2UgMHgwZWE6IG1hcF9rZXlfY2xlYXIoS0VZX1ZPTFVNRURPV04pOwlicmVhazsKKworCQljYXNlIDB4MTgyOiBtYXBfa2V5X2NsZWFyKEtFWV9CT09LTUFSS1MpOwlicmVhazsKKwkJY2FzZSAweDE4MzogbWFwX2tleV9jbGVhcihLRVlfQ09ORklHKTsJCWJyZWFrOworCQljYXNlIDB4MTg0OiBtYXBfa2V5X2NsZWFyKEtFWV9XT1JEUFJPQ0VTU09SKTsJYnJlYWs7CisJCWNhc2UgMHgxODU6IG1hcF9rZXlfY2xlYXIoS0VZX0VESVRPUik7CQlicmVhazsKKwkJY2FzZSAweDE4NjogbWFwX2tleV9jbGVhcihLRVlfU1BSRUFEU0hFRVQpOwlicmVhazsKKwkJY2FzZSAweDE4NzogbWFwX2tleV9jbGVhcihLRVlfR1JBUEhJQ1NFRElUT1IpOwlicmVhazsKKwkJY2FzZSAweDE4ODogbWFwX2tleV9jbGVhcihLRVlfUFJFU0VOVEFUSU9OKTsJYnJlYWs7CisJCWNhc2UgMHgxODk6IG1hcF9rZXlfY2xlYXIoS0VZX0RBVEFCQVNFKTsJYnJlYWs7CisJCWNhc2UgMHgxOGE6IG1hcF9rZXlfY2xlYXIoS0VZX01BSUwpOwkJYnJlYWs7CisJCWNhc2UgMHgxOGI6IG1hcF9rZXlfY2xlYXIoS0VZX05FV1MpOwkJYnJlYWs7CisJCWNhc2UgMHgxOGM6IG1hcF9rZXlfY2xlYXIoS0VZX1ZPSUNFTUFJTCk7CWJyZWFrOworCQljYXNlIDB4MThkOiBtYXBfa2V5X2NsZWFyKEtFWV9BRERSRVNTQk9PSyk7CWJyZWFrOworCQljYXNlIDB4MThlOiBtYXBfa2V5X2NsZWFyKEtFWV9DQUxFTkRBUik7CWJyZWFrOworCQljYXNlIDB4MTkxOiBtYXBfa2V5X2NsZWFyKEtFWV9GSU5BTkNFKTsJCWJyZWFrOworCQljYXNlIDB4MTkyOiBtYXBfa2V5X2NsZWFyKEtFWV9DQUxDKTsJCWJyZWFrOworCQljYXNlIDB4MTk0OiBtYXBfa2V5X2NsZWFyKEtFWV9GSUxFKTsJCWJyZWFrOworCQljYXNlIDB4MTk2OiBtYXBfa2V5X2NsZWFyKEtFWV9XV1cpOwkJYnJlYWs7CisJCWNhc2UgMHgxOWM6IG1hcF9rZXlfY2xlYXIoS0VZX0xPR09GRik7CQlicmVhazsKKwkJY2FzZSAweDE5ZTogbWFwX2tleV9jbGVhcihLRVlfQ09GRkVFKTsJCWJyZWFrOworCQljYXNlIDB4MWE2OiBtYXBfa2V5X2NsZWFyKEtFWV9IRUxQKTsJCWJyZWFrOworCQljYXNlIDB4MWE3OiBtYXBfa2V5X2NsZWFyKEtFWV9ET0NVTUVOVFMpOwlicmVhazsKKwkJY2FzZSAweDFhYjogbWFwX2tleV9jbGVhcihLRVlfU1BFTExDSEVDSyk7CWJyZWFrOworCQljYXNlIDB4MWI2OiBtYXBfa2V5X2NsZWFyKEtFWV9NRURJQSk7CQlicmVhazsKKwkJY2FzZSAweDFiNzogbWFwX2tleV9jbGVhcihLRVlfU09VTkQpOwkJYnJlYWs7CisJCWNhc2UgMHgxYmM6IG1hcF9rZXlfY2xlYXIoS0VZX01FU1NFTkdFUik7CWJyZWFrOworCQljYXNlIDB4MWJkOiBtYXBfa2V5X2NsZWFyKEtFWV9JTkZPKTsJCWJyZWFrOworCQljYXNlIDB4MjAxOiBtYXBfa2V5X2NsZWFyKEtFWV9ORVcpOwkJYnJlYWs7CisJCWNhc2UgMHgyMDI6IG1hcF9rZXlfY2xlYXIoS0VZX09QRU4pOwkJYnJlYWs7CisJCWNhc2UgMHgyMDM6IG1hcF9rZXlfY2xlYXIoS0VZX0NMT1NFKTsJCWJyZWFrOworCQljYXNlIDB4MjA0OiBtYXBfa2V5X2NsZWFyKEtFWV9FWElUKTsJCWJyZWFrOworCQljYXNlIDB4MjA3OiBtYXBfa2V5X2NsZWFyKEtFWV9TQVZFKTsJCWJyZWFrOworCQljYXNlIDB4MjA4OiBtYXBfa2V5X2NsZWFyKEtFWV9QUklOVCk7CQlicmVhazsKKwkJY2FzZSAweDIwOTogbWFwX2tleV9jbGVhcihLRVlfUFJPUFMpOwkJYnJlYWs7CisJCWNhc2UgMHgyMWE6IG1hcF9rZXlfY2xlYXIoS0VZX1VORE8pOwkJYnJlYWs7CisJCWNhc2UgMHgyMWI6IG1hcF9rZXlfY2xlYXIoS0VZX0NPUFkpOwkJYnJlYWs7CisJCWNhc2UgMHgyMWM6IG1hcF9rZXlfY2xlYXIoS0VZX0NVVCk7CQlicmVhazsKKwkJY2FzZSAweDIxZDogbWFwX2tleV9jbGVhcihLRVlfUEFTVEUpOwkJYnJlYWs7CisJCWNhc2UgMHgyMWY6IG1hcF9rZXlfY2xlYXIoS0VZX0ZJTkQpOwkJYnJlYWs7CisJCWNhc2UgMHgyMjE6IG1hcF9rZXlfY2xlYXIoS0VZX1NFQVJDSCk7CQlicmVhazsKKwkJY2FzZSAweDIyMjogbWFwX2tleV9jbGVhcihLRVlfR09UTyk7CQlicmVhazsKKwkJY2FzZSAweDIyMzogbWFwX2tleV9jbGVhcihLRVlfSE9NRVBBR0UpOwlicmVhazsKKwkJY2FzZSAweDIyNDogbWFwX2tleV9jbGVhcihLRVlfQkFDSyk7CQlicmVhazsKKwkJY2FzZSAweDIyNTogbWFwX2tleV9jbGVhcihLRVlfRk9SV0FSRCk7CQlicmVhazsKKwkJY2FzZSAweDIyNjogbWFwX2tleV9jbGVhcihLRVlfU1RPUCk7CQlicmVhazsKKwkJY2FzZSAweDIyNzogbWFwX2tleV9jbGVhcihLRVlfUkVGUkVTSCk7CQlicmVhazsKKwkJY2FzZSAweDIyYTogbWFwX2tleV9jbGVhcihLRVlfQk9PS01BUktTKTsJYnJlYWs7CisJCWNhc2UgMHgyMmQ6IG1hcF9rZXlfY2xlYXIoS0VZX1pPT01JTik7CQlicmVhazsKKwkJY2FzZSAweDIyZTogbWFwX2tleV9jbGVhcihLRVlfWk9PTU9VVCk7CQlicmVhazsKKwkJY2FzZSAweDIyZjogbWFwX2tleV9jbGVhcihLRVlfWk9PTVJFU0VUKTsJYnJlYWs7CisJCWNhc2UgMHgyMzM6IG1hcF9rZXlfY2xlYXIoS0VZX1NDUk9MTFVQKTsJYnJlYWs7CisJCWNhc2UgMHgyMzQ6IG1hcF9rZXlfY2xlYXIoS0VZX1NDUk9MTERPV04pOwlicmVhazsKKwkJY2FzZSAweDIzODogbWFwX3JlbChSRUxfSFdIRUVMKTsJCWJyZWFrOworCQljYXNlIDB4MjVmOiBtYXBfa2V5X2NsZWFyKEtFWV9DQU5DRUwpOwkJYnJlYWs7CisJCWNhc2UgMHgyNzk6IG1hcF9rZXlfY2xlYXIoS0VZX1JFRE8pOwkJYnJlYWs7CisKKwkJY2FzZSAweDI4OTogbWFwX2tleV9jbGVhcihLRVlfUkVQTFkpOwkJYnJlYWs7CisJCWNhc2UgMHgyOGI6IG1hcF9rZXlfY2xlYXIoS0VZX0ZPUldBUkRNQUlMKTsJYnJlYWs7CisJCWNhc2UgMHgyOGM6IG1hcF9rZXlfY2xlYXIoS0VZX1NFTkQpOwkJYnJlYWs7CisKKwkJZGVmYXVsdDogICAgZ290byBpZ25vcmU7CisJCX0KKwkJYnJlYWs7CisKKwljYXNlIEhJRF9VUF9IUFZFTkRPUjoJLyogUmVwb3J0ZWQgb24gYSBEdXRjaCBsYXlvdXQgSFA1MzA4ICovCisJCXNldF9iaXQoRVZfUkVQLCBpbnB1dC0+ZXZiaXQpOworCQlzd2l0Y2ggKHVzYWdlLT5oaWQgJiBISURfVVNBR0UpIHsKKwkJY2FzZSAweDAyMTogbWFwX2tleV9jbGVhcihLRVlfUFJJTlQpOyAgICAgICAgICAgYnJlYWs7CisJCWNhc2UgMHgwNzA6IG1hcF9rZXlfY2xlYXIoS0VZX0hQKTsJCWJyZWFrOworCQljYXNlIDB4MDcxOiBtYXBfa2V5X2NsZWFyKEtFWV9DQU1FUkEpOwkJYnJlYWs7CisJCWNhc2UgMHgwNzI6IG1hcF9rZXlfY2xlYXIoS0VZX1NPVU5EKTsJCWJyZWFrOworCQljYXNlIDB4MDczOiBtYXBfa2V5X2NsZWFyKEtFWV9RVUVTVElPTik7CWJyZWFrOworCQljYXNlIDB4MDgwOiBtYXBfa2V5X2NsZWFyKEtFWV9FTUFJTCk7CQlicmVhazsKKwkJY2FzZSAweDA4MTogbWFwX2tleV9jbGVhcihLRVlfQ0hBVCk7CQlicmVhazsKKwkJY2FzZSAweDA4MjogbWFwX2tleV9jbGVhcihLRVlfU0VBUkNIKTsJCWJyZWFrOworCQljYXNlIDB4MDgzOiBtYXBfa2V5X2NsZWFyKEtFWV9DT05ORUNUKTsJICAgICAgICBicmVhazsKKwkJY2FzZSAweDA4NDogbWFwX2tleV9jbGVhcihLRVlfRklOQU5DRSk7CQlicmVhazsKKwkJY2FzZSAweDA4NTogbWFwX2tleV9jbGVhcihLRVlfU1BPUlQpOwkJYnJlYWs7CisJCWNhc2UgMHgwODY6IG1hcF9rZXlfY2xlYXIoS0VZX1NIT1ApOwkgICAgICAgIGJyZWFrOworCQlkZWZhdWx0OiAgICBnb3RvIGlnbm9yZTsKKwkJfQorCQlicmVhazsKKworCWNhc2UgSElEX1VQX01TVkVORE9SOgorCQlnb3RvIGlnbm9yZTsKKworCWNhc2UgSElEX1VQX0NVU1RPTTogLyogUmVwb3J0ZWQgb24gTG9naXRlY2ggYW5kIEFwcGxlIFVTQiBrZXlib2FyZHMgKi8KKwkJc2V0X2JpdChFVl9SRVAsIGlucHV0LT5ldmJpdCk7CisJCWdvdG8gaWdub3JlOworCisJY2FzZSBISURfVVBfTE9HSVZFTkRPUjoKKwkJZ290byBpZ25vcmU7CisJCisJY2FzZSBISURfVVBfUElEOgorCQlzd2l0Y2ggKHVzYWdlLT5oaWQgJiBISURfVVNBR0UpIHsKKwkJY2FzZSAweGE0OiBtYXBfa2V5X2NsZWFyKEJUTl9ERUFEKTsJYnJlYWs7CisJCWRlZmF1bHQ6IGdvdG8gaWdub3JlOworCQl9CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwl1bmtub3duOgorCQlpZiAoZmllbGQtPnJlcG9ydF9zaXplID09IDEpIHsKKwkJCWlmIChmaWVsZC0+cmVwb3J0LT50eXBlID09IEhJRF9PVVRQVVRfUkVQT1JUKSB7CisJCQkJbWFwX2xlZChMRURfTUlTQyk7CisJCQkJYnJlYWs7CisJCQl9CisJCQltYXBfa2V5KEJUTl9NSVNDKTsKKwkJCWJyZWFrOworCQl9CisJCWlmIChmaWVsZC0+ZmxhZ3MgJiBISURfTUFJTl9JVEVNX1JFTEFUSVZFKSB7CisJCQltYXBfcmVsKFJFTF9NSVNDKTsKKwkJCWJyZWFrOworCQl9CisJCW1hcF9hYnMoQUJTX01JU0MpOworCQlicmVhazsKIAl9CiAKIG1hcHBlZDoKLQlpZiAoZGV2aWNlLT5xdWlya3MgJiBISURfUVVJUktfTUlHSFRZTU9VU0UpIHsKLQkJaWYgKHVzYWdlLT5oaWQgPT0gSElEX0dEX1opCi0JCQltYXBfcmVsKFJFTF9IV0hFRUwpOwotCQllbHNlIGlmICh1c2FnZS0+Y29kZSA9PSBCVE5fMSkKLQkJCW1hcF9rZXkoQlROXzIpOwotCQllbHNlIGlmICh1c2FnZS0+Y29kZSA9PSBCVE5fMikKLQkJCW1hcF9rZXkoQlROXzEpOwotCX0KLQotCWlmICgoZGV2aWNlLT5xdWlya3MgJiAoSElEX1FVSVJLXzJXSEVFTF9NT1VTRV9IQUNLXzcgfCBISURfUVVJUktfMldIRUVMX01PVVNFX0hBQ0tfNSB8Ci0JCQlISURfUVVJUktfMldIRUVMX01PVVNFX0hBQ0tfQjgpKSAmJiAodXNhZ2UtPnR5cGUgPT0gRVZfUkVMKSAmJgotCQkJKHVzYWdlLT5jb2RlID09IFJFTF9XSEVFTCkpCi0JCXNldF9iaXQoUkVMX0hXSEVFTCwgYml0KTsKLQotCWlmICgoKGRldmljZS0+cXVpcmtzICYgSElEX1FVSVJLXzJXSEVFTF9NT1VTRV9IQUNLXzUpICYmICh1c2FnZS0+aGlkID09IDB4MDAwOTAwMDUpKQotCQl8fCAoKGRldmljZS0+cXVpcmtzICYgSElEX1FVSVJLXzJXSEVFTF9NT1VTRV9IQUNLXzcpICYmICh1c2FnZS0+aGlkID09IDB4MDAwOTAwMDcpKSkKKwlpZiAoZGV2aWNlLT5kcml2ZXItPmlucHV0X21hcHBlZCAmJiBkZXZpY2UtPmRyaXZlci0+aW5wdXRfbWFwcGVkKGRldmljZSwKKwkJCQloaWRpbnB1dCwgZmllbGQsIHVzYWdlLCAmYml0LCAmbWF4KSA8IDApCiAJCWdvdG8gaWdub3JlOwogCi0JaWYgKChkZXZpY2UtPnF1aXJrcyAmIEhJRF9RVUlSS19CQURfUkVMQVRJVkVfS0VZUykgJiYKLQkJdXNhZ2UtPnR5cGUgPT0gRVZfS0VZICYmIChmaWVsZC0+ZmxhZ3MgJiBISURfTUFJTl9JVEVNX1JFTEFUSVZFKSkKLQkJZmllbGQtPmZsYWdzICY9IH5ISURfTUFJTl9JVEVNX1JFTEFUSVZFOwotCiAJc2V0X2JpdCh1c2FnZS0+dHlwZSwgaW5wdXQtPmV2Yml0KTsKIAotCWlmIChkZXZpY2UtPnF1aXJrcyAmIEhJRF9RVUlSS19EVVBMSUNBVEVfVVNBR0VTICYmCi0JCQkodXNhZ2UtPnR5cGUgPT0gRVZfS0VZIHx8Ci0JCQkgdXNhZ2UtPnR5cGUgPT0gRVZfUkVMIHx8Ci0JCQkgdXNhZ2UtPnR5cGUgPT0gRVZfQUJTKSkKLQkJY2xlYXJfYml0KHVzYWdlLT5jb2RlLCBiaXQpOwotCiAJd2hpbGUgKHVzYWdlLT5jb2RlIDw9IG1heCAmJiB0ZXN0X2FuZF9zZXRfYml0KHVzYWdlLT5jb2RlLCBiaXQpKQogCQl1c2FnZS0+Y29kZSA9IGZpbmRfbmV4dF96ZXJvX2JpdChiaXQsIG1heCArIDEsIHVzYWdlLT5jb2RlKTsKIApAQCAtODU4LDEwICs1ODUsNiBAQAogCWlmICghdXNhZ2UtPnR5cGUpCiAJCXJldHVybjsKIAotCS8qIGhhbmRsZSBpbnB1dCBldmVudHMgZm9yIHF1aXJreSBkZXZpY2VzICovCi0JaWYgKGhpZGlucHV0X2V2ZW50X3F1aXJrcyhoaWQsIGZpZWxkLCB1c2FnZSwgdmFsdWUpKQotCQlyZXR1cm47Ci0KIAlpZiAodXNhZ2UtPmhhdF9taW4gPCB1c2FnZS0+aGF0X21heCB8fCB1c2FnZS0+aGF0X2RpcikgewogCQlpbnQgaGF0X2RpciA9IHVzYWdlLT5oYXRfZGlyOwogCQlpZiAoIWhhdF9kaXIpCkBAIC05NjEsMTQgKzY4NCwxNCBAQAogewogCXN0cnVjdCBoaWRfZGV2aWNlICpoaWQgPSBpbnB1dF9nZXRfZHJ2ZGF0YShkZXYpOwogCi0JcmV0dXJuIGhpZC0+aGlkX29wZW4oaGlkKTsKKwlyZXR1cm4gaGlkLT5sbF9kcml2ZXItPm9wZW4oaGlkKTsKIH0KIAogc3RhdGljIHZvaWQgaGlkaW5wdXRfY2xvc2Uoc3RydWN0IGlucHV0X2RldiAqZGV2KQogewogCXN0cnVjdCBoaWRfZGV2aWNlICpoaWQgPSBpbnB1dF9nZXRfZHJ2ZGF0YShkZXYpOwogCi0JaGlkLT5oaWRfY2xvc2UoaGlkKTsKKwloaWQtPmxsX2RyaXZlci0+Y2xvc2UoaGlkKTsKIH0KIAogLyoKQEAgLTk3Nyw3ICs3MDAsNyBAQAogICogUmVhZCBhbGwgcmVwb3J0cyBhbmQgaW5pdGlhbGl6ZSB0aGUgYWJzb2x1dGUgZmllbGQgdmFsdWVzLgogICovCiAKLWludCBoaWRpbnB1dF9jb25uZWN0KHN0cnVjdCBoaWRfZGV2aWNlICpoaWQpCitpbnQgaGlkaW5wdXRfY29ubmVjdChzdHJ1Y3QgaGlkX2RldmljZSAqaGlkLCB1bnNpZ25lZCBpbnQgZm9yY2UpCiB7CiAJc3RydWN0IGhpZF9yZXBvcnQgKnJlcG9ydDsKIAlzdHJ1Y3QgaGlkX2lucHV0ICpoaWRpbnB1dCA9IE5VTEw7CkBAIC05ODUsMTkgKzcwOCwyMCBAQAogCWludCBpLCBqLCBrOwogCWludCBtYXhfcmVwb3J0X3R5cGUgPSBISURfT1VUUFVUX1JFUE9SVDsKIAotCWlmIChoaWQtPnF1aXJrcyAmIEhJRF9RVUlSS19JR05PUkVfSElESU5QVVQpCi0JCXJldHVybiAtMTsKLQogCUlOSVRfTElTVF9IRUFEKCZoaWQtPmlucHV0cyk7CiAKLQlmb3IgKGkgPSAwOyBpIDwgaGlkLT5tYXhjb2xsZWN0aW9uOyBpKyspCi0JCWlmIChoaWQtPmNvbGxlY3Rpb25baV0udHlwZSA9PSBISURfQ09MTEVDVElPTl9BUFBMSUNBVElPTiB8fAotCQkgICAgaGlkLT5jb2xsZWN0aW9uW2ldLnR5cGUgPT0gSElEX0NPTExFQ1RJT05fUEhZU0lDQUwpCi0JCQlpZiAoSVNfSU5QVVRfQVBQTElDQVRJT04oaGlkLT5jb2xsZWN0aW9uW2ldLnVzYWdlKSkKLQkJCQlicmVhazsKKwlpZiAoIWZvcmNlKSB7CisJCWZvciAoaSA9IDA7IGkgPCBoaWQtPm1heGNvbGxlY3Rpb247IGkrKykgeworCQkJc3RydWN0IGhpZF9jb2xsZWN0aW9uICpjb2wgPSAmaGlkLT5jb2xsZWN0aW9uW2ldOworCQkJaWYgKGNvbC0+dHlwZSA9PSBISURfQ09MTEVDVElPTl9BUFBMSUNBVElPTiB8fAorCQkJCQljb2wtPnR5cGUgPT0gSElEX0NPTExFQ1RJT05fUEhZU0lDQUwpCisJCQkJaWYgKElTX0lOUFVUX0FQUExJQ0FUSU9OKGNvbC0+dXNhZ2UpKQorCQkJCQlicmVhazsKKwkJfQogCi0JaWYgKGkgPT0gaGlkLT5tYXhjb2xsZWN0aW9uICYmIChoaWQtPnF1aXJrcyAmIEhJRF9RVUlSS19ISURJTlBVVCkgPT0gMCkKLQkJcmV0dXJuIC0xOworCQlpZiAoaSA9PSBoaWQtPm1heGNvbGxlY3Rpb24pCisJCQlyZXR1cm4gLTE7CisJfQogCiAJaWYgKGhpZC0+cXVpcmtzICYgSElEX1FVSVJLX1NLSVBfT1VUUFVUX1JFUE9SVFMpCiAJCW1heF9yZXBvcnRfdHlwZSA9IEhJRF9JTlBVVF9SRVBPUlQ7CkBAIC0xMDE5LDcgKzc0Myw4IEBACiAJCQkJfQogCiAJCQkJaW5wdXRfc2V0X2RydmRhdGEoaW5wdXRfZGV2LCBoaWQpOwotCQkJCWlucHV0X2Rldi0+ZXZlbnQgPSBoaWQtPmhpZGlucHV0X2lucHV0X2V2ZW50OworCQkJCWlucHV0X2Rldi0+ZXZlbnQgPQorCQkJCQloaWQtPmxsX2RyaXZlci0+aGlkaW5wdXRfaW5wdXRfZXZlbnQ7CiAJCQkJaW5wdXRfZGV2LT5vcGVuID0gaGlkaW5wdXRfb3BlbjsKIAkJCQlpbnB1dF9kZXYtPmNsb3NlID0gaGlkaW5wdXRfY2xvc2U7CiAJCQkJaW5wdXRfZGV2LT5zZXRrZXljb2RlID0gaGlkaW5wdXRfc2V0a2V5Y29kZTsKQEAgLTEwMzIsNyArNzU3LDcgQEAKIAkJCQlpbnB1dF9kZXYtPmlkLnZlbmRvciAgPSBoaWQtPnZlbmRvcjsKIAkJCQlpbnB1dF9kZXYtPmlkLnByb2R1Y3QgPSBoaWQtPnByb2R1Y3Q7CiAJCQkJaW5wdXRfZGV2LT5pZC52ZXJzaW9uID0gaGlkLT52ZXJzaW9uOwotCQkJCWlucHV0X2Rldi0+ZGV2LnBhcmVudCA9IGhpZC0+ZGV2OworCQkJCWlucHV0X2Rldi0+ZGV2LnBhcmVudCA9IGhpZC0+ZGV2LnBhcmVudDsKIAkJCQloaWRpbnB1dC0+aW5wdXQgPSBpbnB1dF9kZXY7CiAJCQkJbGlzdF9hZGRfdGFpbCgmaGlkaW5wdXQtPmxpc3QsICZoaWQtPmlucHV0cyk7CiAJCQl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2hpZC9oaWQtbGcuYyBiL2RyaXZlcnMvaGlkL2hpZC1sZy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQwNmQ4YzgKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2hpZC9oaWQtbGcuYwpAQCAtMCwwICsxLDM0MiBAQAorLyoKKyAqICBISUQgZHJpdmVyIGZvciBzb21lIGxvZ2l0ZWNoICJzcGVjaWFsIiBkZXZpY2VzCisgKgorICogIENvcHlyaWdodCAoYykgMTk5OSBBbmRyZWFzIEdhbAorICogIENvcHlyaWdodCAoYykgMjAwMC0yMDA1IFZvanRlY2ggUGF2bGlrIDx2b2p0ZWNoQHN1c2UuY3o+CisgKiAgQ29weXJpZ2h0IChjKSAyMDA1IE1pY2hhZWwgSGFib3VzdGFrIDxtaWtlLUBjaW5jaS5yci5jb20+IGZvciBDb25jZXB0MiwgSW5jCisgKiAgQ29weXJpZ2h0IChjKSAyMDA2LTIwMDcgSmlyaSBLb3NpbmEKKyAqICBDb3B5cmlnaHQgKGMpIDIwMDcgUGF1bCBXYWxtc2xleQorICogIENvcHlyaWdodCAoYykgMjAwOCBKaXJpIFNsYWJ5CisgKi8KKworLyoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorICogU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKQorICogYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2hpZC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorCisjaW5jbHVkZSAiaGlkLWlkcy5oIgorI2luY2x1ZGUgImhpZC1sZy5oIgorCisjZGVmaW5lIExHX1JERVNDCQkweDAwMQorI2RlZmluZSBMR19CQURfUkVMQVRJVkVfS0VZUwkweDAwMgorI2RlZmluZSBMR19EVVBMSUNBVEVfVVNBR0VTCTB4MDA0CisjZGVmaW5lIExHX1JFU0VUX0xFRFMJCTB4MDA4CisjZGVmaW5lIExHX0VYUEFOREVEX0tFWU1BUAkweDAxMAorI2RlZmluZSBMR19JR05PUkVfRE9VQkxFRF9XSEVFTAkweDAyMAorI2RlZmluZSBMR19XSVJFTEVTUwkJMHgwNDAKKyNkZWZpbmUgTEdfSU5WRVJUX0hXSEVFTAkweDA4MAorI2RlZmluZSBMR19OT0dFVAkJMHgxMDAKKyNkZWZpbmUgTEdfRkYJCQkweDIwMAorI2RlZmluZSBMR19GRjIJCQkweDQwMAorCisvKgorICogQ2VydGFpbiBMb2dpdGVjaCBrZXlib2FyZHMgc2VuZCBpbiByZXBvcnQgIzMga2V5cyB3aGljaCBhcmUgZmFyCisgKiBhYm92ZSB0aGUgbG9naWNhbCBtYXhpbXVtIGRlc2NyaWJlZCBpbiBkZXNjcmlwdG9yLiBUaGlzIGV4dGVuZHMKKyAqIHRoZSBvcmlnaW5hbCB2YWx1ZSBvZiAweDI4YyBvZiBsb2dpY2FsIG1heGltdW0gdG8gMHgxMDRkCisgKi8KK3N0YXRpYyB2b2lkIGxnX3JlcG9ydF9maXh1cChzdHJ1Y3QgaGlkX2RldmljZSAqaGRldiwgX191OCAqcmRlc2MsCisJCXVuc2lnbmVkIGludCByc2l6ZSkKK3sKKwl1bnNpZ25lZCBsb25nIHF1aXJrcyA9ICh1bnNpZ25lZCBsb25nKWhpZF9nZXRfZHJ2ZGF0YShoZGV2KTsKKworCWlmICgocXVpcmtzICYgTEdfUkRFU0MpICYmIHJzaXplID49IDkwICYmIHJkZXNjWzgzXSA9PSAweDI2ICYmCisJCQlyZGVzY1s4NF0gPT0gMHg4YyAmJiByZGVzY1s4NV0gPT0gMHgwMikgeworCQlkZXZfaW5mbygmaGRldi0+ZGV2LCAiZml4aW5nIHVwIExvZ2l0ZWNoIGtleWJvYXJkIHJlcG9ydCAiCisJCQkJImRlc2NyaXB0b3JcbiIpOworCQlyZGVzY1s4NF0gPSByZGVzY1s4OV0gPSAweDRkOworCQlyZGVzY1s4NV0gPSByZGVzY1s5MF0gPSAweDEwOworCX0KK30KKworI2RlZmluZSBsZ19tYXBfa2V5X2NsZWFyKGMpCWhpZF9tYXBfdXNhZ2VfY2xlYXIoaGksIHVzYWdlLCBiaXQsIG1heCwgXAorCQlFVl9LRVksIChjKSkKKworc3RhdGljIGludCBsZ191bHRyYXhfcmVtb3RlX21hcHBpbmcoc3RydWN0IGhpZF9pbnB1dCAqaGksCisJCXN0cnVjdCBoaWRfdXNhZ2UgKnVzYWdlLCB1bnNpZ25lZCBsb25nICoqYml0LCBpbnQgKm1heCkKK3sKKwlpZiAoKHVzYWdlLT5oaWQgJiBISURfVVNBR0VfUEFHRSkgIT0gSElEX1VQX0xPR0lWRU5ET1IpCisJCXJldHVybiAwOworCisJc2V0X2JpdChFVl9SRVAsIGhpLT5pbnB1dC0+ZXZiaXQpOworCXN3aXRjaCAodXNhZ2UtPmhpZCAmIEhJRF9VU0FHRSkgeworCS8qIFJlcG9ydGVkIG9uIExvZ2l0ZWNoIFVsdHJhIFggTWVkaWEgUmVtb3RlICovCisJY2FzZSAweDAwNDogbGdfbWFwX2tleV9jbGVhcihLRVlfQUdBSU4pOwlicmVhazsKKwljYXNlIDB4MDBkOiBsZ19tYXBfa2V5X2NsZWFyKEtFWV9IT01FKTsJCWJyZWFrOworCWNhc2UgMHgwMjQ6IGxnX21hcF9rZXlfY2xlYXIoS0VZX1NIVUZGTEUpOwlicmVhazsKKwljYXNlIDB4MDI1OiBsZ19tYXBfa2V5X2NsZWFyKEtFWV9UVik7CQlicmVhazsKKwljYXNlIDB4MDI2OiBsZ19tYXBfa2V5X2NsZWFyKEtFWV9NRU5VKTsJCWJyZWFrOworCWNhc2UgMHgwMzE6IGxnX21hcF9rZXlfY2xlYXIoS0VZX0FVRElPKTsJYnJlYWs7CisJY2FzZSAweDAzMjogbGdfbWFwX2tleV9jbGVhcihLRVlfVEVYVCk7CQlicmVhazsKKwljYXNlIDB4MDMzOiBsZ19tYXBfa2V5X2NsZWFyKEtFWV9MQVNUKTsJCWJyZWFrOworCWNhc2UgMHgwNDc6IGxnX21hcF9rZXlfY2xlYXIoS0VZX01QMyk7CQlicmVhazsKKwljYXNlIDB4MDQ4OiBsZ19tYXBfa2V5X2NsZWFyKEtFWV9EVkQpOwkJYnJlYWs7CisJY2FzZSAweDA0OTogbGdfbWFwX2tleV9jbGVhcihLRVlfTUVESUEpOwlicmVhazsKKwljYXNlIDB4MDRhOiBsZ19tYXBfa2V5X2NsZWFyKEtFWV9WSURFTyk7CWJyZWFrOworCWNhc2UgMHgwNGI6IGxnX21hcF9rZXlfY2xlYXIoS0VZX0FOR0xFKTsJYnJlYWs7CisJY2FzZSAweDA0YzogbGdfbWFwX2tleV9jbGVhcihLRVlfTEFOR1VBR0UpOwlicmVhazsKKwljYXNlIDB4MDRkOiBsZ19tYXBfa2V5X2NsZWFyKEtFWV9TVUJUSVRMRSk7CWJyZWFrOworCWNhc2UgMHgwNTE6IGxnX21hcF9rZXlfY2xlYXIoS0VZX1JFRCk7CQlicmVhazsKKwljYXNlIDB4MDUyOiBsZ19tYXBfa2V5X2NsZWFyKEtFWV9DTE9TRSk7CWJyZWFrOworCisJZGVmYXVsdDoKKwkJcmV0dXJuIDA7CisJfQorCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IGxnX3dpcmVsZXNzX21hcHBpbmcoc3RydWN0IGhpZF9pbnB1dCAqaGksIHN0cnVjdCBoaWRfdXNhZ2UgKnVzYWdlLAorCQl1bnNpZ25lZCBsb25nICoqYml0LCBpbnQgKm1heCkKK3sKKwlpZiAoKHVzYWdlLT5oaWQgJiBISURfVVNBR0VfUEFHRSkgIT0gSElEX1VQX0NPTlNVTUVSKQorCQlyZXR1cm4gMDsKKworCXN3aXRjaCAodXNhZ2UtPmhpZCAmIEhJRF9VU0FHRSkgeworCWNhc2UgMHgxMDAxOiBsZ19tYXBfa2V5X2NsZWFyKEtFWV9NRVNTRU5HRVIpOwkJYnJlYWs7CisJY2FzZSAweDEwMDM6IGxnX21hcF9rZXlfY2xlYXIoS0VZX1NPVU5EKTsJCWJyZWFrOworCWNhc2UgMHgxMDA0OiBsZ19tYXBfa2V5X2NsZWFyKEtFWV9WSURFTyk7CQlicmVhazsKKwljYXNlIDB4MTAwNTogbGdfbWFwX2tleV9jbGVhcihLRVlfQVVESU8pOwkJYnJlYWs7CisJY2FzZSAweDEwMGE6IGxnX21hcF9rZXlfY2xlYXIoS0VZX0RPQ1VNRU5UUyk7CQlicmVhazsKKwljYXNlIDB4MTAxMTogbGdfbWFwX2tleV9jbGVhcihLRVlfUFJFVklPVVNTT05HKTsJYnJlYWs7CisJY2FzZSAweDEwMTI6IGxnX21hcF9rZXlfY2xlYXIoS0VZX05FWFRTT05HKTsJCWJyZWFrOworCWNhc2UgMHgxMDEzOiBsZ19tYXBfa2V5X2NsZWFyKEtFWV9DQU1FUkEpOwkJYnJlYWs7CisJY2FzZSAweDEwMTQ6IGxnX21hcF9rZXlfY2xlYXIoS0VZX01FU1NFTkdFUik7CQlicmVhazsKKwljYXNlIDB4MTAxNTogbGdfbWFwX2tleV9jbGVhcihLRVlfUkVDT1JEKTsJCWJyZWFrOworCWNhc2UgMHgxMDE2OiBsZ19tYXBfa2V5X2NsZWFyKEtFWV9QTEFZRVIpOwkJYnJlYWs7CisJY2FzZSAweDEwMTc6IGxnX21hcF9rZXlfY2xlYXIoS0VZX0VKRUNUQ0QpOwkJYnJlYWs7CisJY2FzZSAweDEwMTg6IGxnX21hcF9rZXlfY2xlYXIoS0VZX01FRElBKTsJCWJyZWFrOworCWNhc2UgMHgxMDE5OiBsZ19tYXBfa2V5X2NsZWFyKEtFWV9QUk9HMSk7CQlicmVhazsKKwljYXNlIDB4MTAxYTogbGdfbWFwX2tleV9jbGVhcihLRVlfUFJPRzIpOwkJYnJlYWs7CisJY2FzZSAweDEwMWI6IGxnX21hcF9rZXlfY2xlYXIoS0VZX1BST0czKTsJCWJyZWFrOworCWNhc2UgMHgxMDFmOiBsZ19tYXBfa2V5X2NsZWFyKEtFWV9aT09NSU4pOwkJYnJlYWs7CisJY2FzZSAweDEwMjA6IGxnX21hcF9rZXlfY2xlYXIoS0VZX1pPT01PVVQpOwkJYnJlYWs7CisJY2FzZSAweDEwMjE6IGxnX21hcF9rZXlfY2xlYXIoS0VZX1pPT01SRVNFVCk7CQlicmVhazsKKwljYXNlIDB4MTAyMzogbGdfbWFwX2tleV9jbGVhcihLRVlfQ0xPU0UpOwkJYnJlYWs7CisJY2FzZSAweDEwMjc6IGxnX21hcF9rZXlfY2xlYXIoS0VZX01FTlUpOwkJYnJlYWs7CisJLyogdGhpcyBvbmUgaXMgbWFya2VkIGFzICdSb3RhdGUnICovCisJY2FzZSAweDEwMjg6IGxnX21hcF9rZXlfY2xlYXIoS0VZX0FOR0xFKTsJCWJyZWFrOworCWNhc2UgMHgxMDI5OiBsZ19tYXBfa2V5X2NsZWFyKEtFWV9TSFVGRkxFKTsJCWJyZWFrOworCWNhc2UgMHgxMDJhOiBsZ19tYXBfa2V5X2NsZWFyKEtFWV9CQUNLKTsJCWJyZWFrOworCWNhc2UgMHgxMDJiOiBsZ19tYXBfa2V5X2NsZWFyKEtFWV9DWUNMRVdJTkRPV1MpOwlicmVhazsKKwljYXNlIDB4MTA0MTogbGdfbWFwX2tleV9jbGVhcihLRVlfQkFUVEVSWSk7CQlicmVhazsKKwljYXNlIDB4MTA0MjogbGdfbWFwX2tleV9jbGVhcihLRVlfV09SRFBST0NFU1NPUik7CWJyZWFrOworCWNhc2UgMHgxMDQzOiBsZ19tYXBfa2V5X2NsZWFyKEtFWV9TUFJFQURTSEVFVCk7CQlicmVhazsKKwljYXNlIDB4MTA0NDogbGdfbWFwX2tleV9jbGVhcihLRVlfUFJFU0VOVEFUSU9OKTsJYnJlYWs7CisJY2FzZSAweDEwNDU6IGxnX21hcF9rZXlfY2xlYXIoS0VZX1VORE8pOwkJYnJlYWs7CisJY2FzZSAweDEwNDY6IGxnX21hcF9rZXlfY2xlYXIoS0VZX1JFRE8pOwkJYnJlYWs7CisJY2FzZSAweDEwNDc6IGxnX21hcF9rZXlfY2xlYXIoS0VZX1BSSU5UKTsJCWJyZWFrOworCWNhc2UgMHgxMDQ4OiBsZ19tYXBfa2V5X2NsZWFyKEtFWV9TQVZFKTsJCWJyZWFrOworCWNhc2UgMHgxMDQ5OiBsZ19tYXBfa2V5X2NsZWFyKEtFWV9QUk9HMSk7CQlicmVhazsKKwljYXNlIDB4MTA0YTogbGdfbWFwX2tleV9jbGVhcihLRVlfUFJPRzIpOwkJYnJlYWs7CisJY2FzZSAweDEwNGI6IGxnX21hcF9rZXlfY2xlYXIoS0VZX1BST0czKTsJCWJyZWFrOworCWNhc2UgMHgxMDRjOiBsZ19tYXBfa2V5X2NsZWFyKEtFWV9QUk9HNCk7CQlicmVhazsKKworCWRlZmF1bHQ6CisJCXJldHVybiAwOworCX0KKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCBsZ19pbnB1dF9tYXBwaW5nKHN0cnVjdCBoaWRfZGV2aWNlICpoZGV2LCBzdHJ1Y3QgaGlkX2lucHV0ICpoaSwKKwkJc3RydWN0IGhpZF9maWVsZCAqZmllbGQsIHN0cnVjdCBoaWRfdXNhZ2UgKnVzYWdlLAorCQl1bnNpZ25lZCBsb25nICoqYml0LCBpbnQgKm1heCkKK3sKKwkvKiBleHRlbmRlZCBtYXBwaW5nIGZvciBjZXJ0YWluIExvZ2l0ZWNoIGhhcmR3YXJlIChMb2dpdGVjaCBjb3JkbGVzcworCSAgIGRlc2t0b3AgTFg1MDApICovCisJc3RhdGljIGNvbnN0IHU4IGVfa2V5bWFwW10gPSB7CisJCSAgMCwyMTYsICAwLDIxMywxNzUsMTU2LCAgMCwgIDAsICAwLCAgMCwKKwkJMTQ0LCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsMjEyLAorCQkxNzQsMTY3LDE1MiwxNjEsMTEyLCAgMCwgIDAsICAwLDE1NCwgIDAsCisJCSAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwKKwkJICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLAorCQkgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsCisJCSAgMCwgIDAsICAwLCAgMCwgIDAsMTgzLDE4NCwxODUsMTg2LDE4NywKKwkJMTg4LDE4OSwxOTAsMTkxLDE5MiwxOTMsMTk0LCAgMCwgIDAsICAwCisJfTsKKwl1bnNpZ25lZCBsb25nIHF1aXJrcyA9ICh1bnNpZ25lZCBsb25nKWhpZF9nZXRfZHJ2ZGF0YShoZGV2KTsKKwl1bnNpZ25lZCBpbnQgaGlkID0gdXNhZ2UtPmhpZDsKKworCWlmIChoZGV2LT5wcm9kdWN0ID09IFVTQl9ERVZJQ0VfSURfTE9HSVRFQ0hfUkVDRUlWRVIgJiYKKwkJCWxnX3VsdHJheF9yZW1vdGVfbWFwcGluZyhoaSwgdXNhZ2UsIGJpdCwgbWF4KSkKKwkJcmV0dXJuIDE7CisKKwlpZiAoKHF1aXJrcyAmIExHX1dJUkVMRVNTKSAmJiBsZ193aXJlbGVzc19tYXBwaW5nKGhpLCB1c2FnZSwgYml0LCBtYXgpKQorCQlyZXR1cm4gMTsKKworCWlmICgoaGlkICYgSElEX1VTQUdFX1BBR0UpICE9IEhJRF9VUF9CVVRUT04pCisJCXJldHVybiAwOworCisJaGlkICY9IEhJRF9VU0FHRTsKKworCS8qIFNwZWNpYWwgaGFuZGxpbmcgZm9yIExvZ2l0ZWNoIENvcmRsZXNzIERlc2t0b3AgKi8KKwlpZiAoZmllbGQtPmFwcGxpY2F0aW9uID09IEhJRF9HRF9NT1VTRSkgeworCQlpZiAoKHF1aXJrcyAmIExHX0lHTk9SRV9ET1VCTEVEX1dIRUVMKSAmJgorCQkJCShoaWQgPT0gNyB8fCBoaWQgPT0gOCkpCisJCQlyZXR1cm4gLTE7CisJfSBlbHNlIHsKKwkJaWYgKChxdWlya3MgJiBMR19FWFBBTkRFRF9LRVlNQVApICYmCisJCQkJaGlkIDwgQVJSQVlfU0laRShlX2tleW1hcCkgJiYKKwkJCQllX2tleW1hcFtoaWRdICE9IDApIHsKKwkJCWhpZF9tYXBfdXNhZ2UoaGksIHVzYWdlLCBiaXQsIG1heCwgRVZfS0VZLAorCQkJCQllX2tleW1hcFtoaWRdKTsKKwkJCXJldHVybiAxOworCQl9CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbGdfaW5wdXRfbWFwcGVkKHN0cnVjdCBoaWRfZGV2aWNlICpoZGV2LCBzdHJ1Y3QgaGlkX2lucHV0ICpoaSwKKwkJc3RydWN0IGhpZF9maWVsZCAqZmllbGQsIHN0cnVjdCBoaWRfdXNhZ2UgKnVzYWdlLAorCQl1bnNpZ25lZCBsb25nICoqYml0LCBpbnQgKm1heCkKK3sKKwl1bnNpZ25lZCBsb25nIHF1aXJrcyA9ICh1bnNpZ25lZCBsb25nKWhpZF9nZXRfZHJ2ZGF0YShoZGV2KTsKKworCWlmICgocXVpcmtzICYgTEdfQkFEX1JFTEFUSVZFX0tFWVMpICYmIHVzYWdlLT50eXBlID09IEVWX0tFWSAmJgorCQkJKGZpZWxkLT5mbGFncyAmIEhJRF9NQUlOX0lURU1fUkVMQVRJVkUpKQorCQlmaWVsZC0+ZmxhZ3MgJj0gfkhJRF9NQUlOX0lURU1fUkVMQVRJVkU7CisKKwlpZiAoKHF1aXJrcyAmIExHX0RVUExJQ0FURV9VU0FHRVMpICYmICh1c2FnZS0+dHlwZSA9PSBFVl9LRVkgfHwKKwkJCSB1c2FnZS0+dHlwZSA9PSBFVl9SRUwgfHwgdXNhZ2UtPnR5cGUgPT0gRVZfQUJTKSkKKwkJY2xlYXJfYml0KHVzYWdlLT5jb2RlLCAqYml0KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGxnX2V2ZW50KHN0cnVjdCBoaWRfZGV2aWNlICpoZGV2LCBzdHJ1Y3QgaGlkX2ZpZWxkICpmaWVsZCwKKwkJc3RydWN0IGhpZF91c2FnZSAqdXNhZ2UsIF9fczMyIHZhbHVlKQoreworCXVuc2lnbmVkIGxvbmcgcXVpcmtzID0gKHVuc2lnbmVkIGxvbmcpaGlkX2dldF9kcnZkYXRhKGhkZXYpOworCisJaWYgKChxdWlya3MgJiBMR19JTlZFUlRfSFdIRUVMKSAmJiB1c2FnZS0+Y29kZSA9PSBSRUxfSFdIRUVMKSB7CisJCWlucHV0X2V2ZW50KGZpZWxkLT5oaWRpbnB1dC0+aW5wdXQsIHVzYWdlLT50eXBlLCB1c2FnZS0+Y29kZSwKKwkJCQktdmFsdWUpOworCQlyZXR1cm4gMTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBsZ19wcm9iZShzdHJ1Y3QgaGlkX2RldmljZSAqaGRldiwgY29uc3Qgc3RydWN0IGhpZF9kZXZpY2VfaWQgKmlkKQoreworCXVuc2lnbmVkIGxvbmcgcXVpcmtzID0gaWQtPmRyaXZlcl9kYXRhOworCXVuc2lnbmVkIGludCBjb25uZWN0X21hc2sgPSBISURfQ09OTkVDVF9ERUZBVUxUOworCWludCByZXQ7CisKKwloaWRfc2V0X2RydmRhdGEoaGRldiwgKHZvaWQgKilxdWlya3MpOworCisJaWYgKHF1aXJrcyAmIExHX05PR0VUKQorCQloZGV2LT5xdWlya3MgfD0gSElEX1FVSVJLX05PR0VUOworCisJcmV0ID0gaGlkX3BhcnNlKGhkZXYpOworCWlmIChyZXQpIHsKKwkJZGV2X2VycigmaGRldi0+ZGV2LCAicGFyc2UgZmFpbGVkXG4iKTsKKwkJZ290byBlcnJfZnJlZTsKKwl9CisKKwlpZiAocXVpcmtzICYgKExHX0ZGIHwgTEdfRkYyKSkKKwkJY29ubmVjdF9tYXNrICY9IH5ISURfQ09OTkVDVF9GRjsKKworCXJldCA9IGhpZF9od19zdGFydChoZGV2LCBjb25uZWN0X21hc2spOworCWlmIChyZXQpIHsKKwkJZGV2X2VycigmaGRldi0+ZGV2LCAiaHcgc3RhcnQgZmFpbGVkXG4iKTsKKwkJZ290byBlcnJfZnJlZTsKKwl9CisKKwlpZiAocXVpcmtzICYgTEdfUkVTRVRfTEVEUykKKwkJdXNiaGlkX3NldF9sZWRzKGhkZXYpOworCisJaWYgKHF1aXJrcyAmIExHX0ZGKQorCQlsZ2ZmX2luaXQoaGRldik7CisJaWYgKHF1aXJrcyAmIExHX0ZGMikKKwkJbGcyZmZfaW5pdChoZGV2KTsKKworCXJldHVybiAwOworZXJyX2ZyZWU6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBoaWRfZGV2aWNlX2lkIGxnX2RldmljZXNbXSA9IHsKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfTE9HSVRFQ0gsIFVTQl9ERVZJQ0VfSURfTVgzMDAwX1JFQ0VJVkVSKSwKKwkJLmRyaXZlcl9kYXRhID0gTEdfUkRFU0MgfCBMR19XSVJFTEVTUyB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9MT0dJVEVDSCwgVVNCX0RFVklDRV9JRF9TNTEwX1JFQ0VJVkVSKSwKKwkJLmRyaXZlcl9kYXRhID0gTEdfUkRFU0MgfCBMR19XSVJFTEVTUyB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9MT0dJVEVDSCwgVVNCX0RFVklDRV9JRF9TNTEwX1JFQ0VJVkVSXzIpLAorCQkuZHJpdmVyX2RhdGEgPSBMR19SREVTQyB8IExHX1dJUkVMRVNTIH0sCisKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfTE9HSVRFQ0gsIFVTQl9ERVZJQ0VfSURfTE9HSVRFQ0hfUkVDRUlWRVIpLAorCQkuZHJpdmVyX2RhdGEgPSBMR19CQURfUkVMQVRJVkVfS0VZUyB9LAorCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0xPR0lURUNILCBVU0JfREVWSUNFX0lEX0RJTk9WT19ERVNLVE9QKSwKKwkJLmRyaXZlcl9kYXRhID0gTEdfRFVQTElDQVRFX1VTQUdFUyB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9MT0dJVEVDSCwgVVNCX0RFVklDRV9JRF9ESU5PVk9fRURHRSksCisJCS5kcml2ZXJfZGF0YSA9IExHX0RVUExJQ0FURV9VU0FHRVMgfSwKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfTE9HSVRFQ0gsIFVTQl9ERVZJQ0VfSURfRElOT1ZPX01JTkkpLAorCQkuZHJpdmVyX2RhdGEgPSBMR19EVVBMSUNBVEVfVVNBR0VTIH0sCisKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfTE9HSVRFQ0gsIFVTQl9ERVZJQ0VfSURfTE9HSVRFQ0hfS0JEKSwKKwkJLmRyaXZlcl9kYXRhID0gTEdfUkVTRVRfTEVEUyB9LAorCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0xPR0lURUNILCBVU0JfREVWSUNFX0lEX0xPR0lURUNIX0VMSVRFX0tCRCksCisJCS5kcml2ZXJfZGF0YSA9IExHX0lHTk9SRV9ET1VCTEVEX1dIRUVMIHwgTEdfRVhQQU5ERURfS0VZTUFQIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0xPR0lURUNILCBVU0JfREVWSUNFX0lEX0xPR0lURUNIX0NPUkRMRVNTX0RFU0tUT1BfTFg1MDApLAorCQkuZHJpdmVyX2RhdGEgPSBMR19JR05PUkVfRE9VQkxFRF9XSEVFTCB8IExHX0VYUEFOREVEX0tFWU1BUCB9LAorCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0xPR0lURUNILCBVU0JfREVWSUNFX0lEX0xPR0lURUNIX0xYMyksCisJCS5kcml2ZXJfZGF0YSA9IExHX0lOVkVSVF9IV0hFRUwgfSwKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfTE9HSVRFQ0gsIFVTQl9ERVZJQ0VfSURfTE9HSVRFQ0hfVjE1MCksCisJCS5kcml2ZXJfZGF0YSA9IExHX0lOVkVSVF9IV0hFRUwgfSwKKworCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9MT0dJVEVDSCwgVVNCX0RFVklDRV9JRF9MT0dJVEVDSF9FWFRSRU1FXzNEKSwKKwkJLmRyaXZlcl9kYXRhID0gTEdfTk9HRVQgfSwKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfTE9HSVRFQ0gsIFVTQl9ERVZJQ0VfSURfTE9HSVRFQ0hfV0hFRUwpLAorCQkuZHJpdmVyX2RhdGEgPSBMR19OT0dFVCB8IExHX0ZGIH0sCisKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfTE9HSVRFQ0gsIFVTQl9ERVZJQ0VfSURfTE9HSVRFQ0hfUlVNQkxFUEFEKSwKKwkJLmRyaXZlcl9kYXRhID0gTEdfRkYgfSwKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfTE9HSVRFQ0gsIFVTQl9ERVZJQ0VfSURfTE9HSVRFQ0hfUlVNQkxFUEFEMl8yKSwKKwkJLmRyaXZlcl9kYXRhID0gTEdfRkYgfSwKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfTE9HSVRFQ0gsIFVTQl9ERVZJQ0VfSURfTE9HSVRFQ0hfV0lOR01BTl9GM0QpLAorCQkuZHJpdmVyX2RhdGEgPSBMR19GRiB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9MT0dJVEVDSCwgVVNCX0RFVklDRV9JRF9MT0dJVEVDSF9GT1JDRTNEX1BSTyksCisJCS5kcml2ZXJfZGF0YSA9IExHX0ZGIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0xPR0lURUNILCBVU0JfREVWSUNFX0lEX0xPR0lURUNIX01PTU9fV0hFRUwpLAorCQkuZHJpdmVyX2RhdGEgPSBMR19GRiB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9MT0dJVEVDSCwgVVNCX0RFVklDRV9JRF9MT0dJVEVDSF9NT01PX1dIRUVMMiksCisJCS5kcml2ZXJfZGF0YSA9IExHX0ZGIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0xPR0lURUNILCBVU0JfREVWSUNFX0lEX0xPR0lURUNIX1JVTUJMRVBBRDIpLAorCQkuZHJpdmVyX2RhdGEgPSBMR19GRjIgfSwKKwl7IH0KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKGhpZCwgbGdfZGV2aWNlcyk7CisKK3N0YXRpYyBzdHJ1Y3QgaGlkX2RyaXZlciBsZ19kcml2ZXIgPSB7CisJLm5hbWUgPSAibG9naXRlY2giLAorCS5pZF90YWJsZSA9IGxnX2RldmljZXMsCisJLnJlcG9ydF9maXh1cCA9IGxnX3JlcG9ydF9maXh1cCwKKwkuaW5wdXRfbWFwcGluZyA9IGxnX2lucHV0X21hcHBpbmcsCisJLmlucHV0X21hcHBlZCA9IGxnX2lucHV0X21hcHBlZCwKKwkuZXZlbnQgPSBsZ19ldmVudCwKKwkucHJvYmUgPSBsZ19wcm9iZSwKK307CisKK3N0YXRpYyBpbnQgbGdfaW5pdCh2b2lkKQoreworCXJldHVybiBoaWRfcmVnaXN0ZXJfZHJpdmVyKCZsZ19kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBsZ19leGl0KHZvaWQpCit7CisJaGlkX3VucmVnaXN0ZXJfZHJpdmVyKCZsZ19kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChsZ19pbml0KTsKK21vZHVsZV9leGl0KGxnX2V4aXQpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCitISURfQ09NUEFUX0xPQURfRFJJVkVSKGxvZ2l0ZWNoKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaGlkL2hpZC1sZy5oIGIvZHJpdmVycy9oaWQvaGlkLWxnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjdhZTc1MAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvaGlkL2hpZC1sZy5oCkBAIC0wLDAgKzEsMTggQEAKKyNpZm5kZWYgX19ISURfTEdfSAorI2RlZmluZSBfX0hJRF9MR19ICisKKyNpbmNsdWRlIDxsaW51eC9hdXRvY29uZi5oPgorCisjaWZkZWYgQ09ORklHX0xPR0lURUNIX0ZGCitpbnQgbGdmZl9pbml0KHN0cnVjdCBoaWRfZGV2aWNlICpoZGV2KTsKKyNlbHNlCitzdGF0aWMgaW5saW5lIGludCBsZ2ZmX2luaXQoc3RydWN0IGhpZF9kZXZpY2UgKmhkZXYpIHsgcmV0dXJuIC0xOyB9CisjZW5kaWYKKworI2lmZGVmIENPTkZJR19MT0dJUlVNQkxFUEFEMl9GRgoraW50IGxnMmZmX2luaXQoc3RydWN0IGhpZF9kZXZpY2UgKmhkZXYpOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgaW50IGxnMmZmX2luaXQoc3RydWN0IGhpZF9kZXZpY2UgKmhkZXYpIHsgcmV0dXJuIC0xOyB9CisjZW5kaWYKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2hpZC9oaWQtbGcyZmYuYyBiL2RyaXZlcnMvaGlkL2hpZC1sZzJmZi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRlNmRjNmUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2hpZC9oaWQtbGcyZmYuYwpAQCAtMCwwICsxLDExNiBAQAorLyoKKyAqICBGb3JjZSBmZWVkYmFjayBzdXBwb3J0IGZvciBMb2dpdGVjaCBSdW1ibGVwYWQgMgorICoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMDggQW5zc2kgSGFubnVsYSA8YW5zc2kuaGFubnVsYUBnbWFpbC5jb20+CisgKi8KKworLyoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKworCisjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KKyNpbmNsdWRlIDxsaW51eC91c2IuaD4KKyNpbmNsdWRlIDxsaW51eC9oaWQuaD4KKworI2luY2x1ZGUgInVzYmhpZC91c2JoaWQuaCIKKyNpbmNsdWRlICJoaWQtbGcuaCIKKworc3RydWN0IGxnMmZmX2RldmljZSB7CisJc3RydWN0IGhpZF9yZXBvcnQgKnJlcG9ydDsKK307CisKK3N0YXRpYyBpbnQgcGxheV9lZmZlY3Qoc3RydWN0IGlucHV0X2RldiAqZGV2LCB2b2lkICpkYXRhLAorCQkJIHN0cnVjdCBmZl9lZmZlY3QgKmVmZmVjdCkKK3sKKwlzdHJ1Y3QgaGlkX2RldmljZSAqaGlkID0gaW5wdXRfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgbGcyZmZfZGV2aWNlICpsZzJmZiA9IGRhdGE7CisJaW50IHdlYWssIHN0cm9uZzsKKworCXN0cm9uZyA9IGVmZmVjdC0+dS5ydW1ibGUuc3Ryb25nX21hZ25pdHVkZTsKKwl3ZWFrID0gZWZmZWN0LT51LnJ1bWJsZS53ZWFrX21hZ25pdHVkZTsKKworCWlmICh3ZWFrIHx8IHN0cm9uZykgeworCQl3ZWFrID0gd2VhayAqIDB4ZmYgLyAweGZmZmY7CisJCXN0cm9uZyA9IHN0cm9uZyAqIDB4ZmYgLyAweGZmZmY7CisKKwkJbGcyZmYtPnJlcG9ydC0+ZmllbGRbMF0tPnZhbHVlWzBdID0gMHg1MTsKKwkJbGcyZmYtPnJlcG9ydC0+ZmllbGRbMF0tPnZhbHVlWzJdID0gd2VhazsKKwkJbGcyZmYtPnJlcG9ydC0+ZmllbGRbMF0tPnZhbHVlWzRdID0gc3Ryb25nOworCX0gZWxzZSB7CisJCWxnMmZmLT5yZXBvcnQtPmZpZWxkWzBdLT52YWx1ZVswXSA9IDB4ZjM7CisJCWxnMmZmLT5yZXBvcnQtPmZpZWxkWzBdLT52YWx1ZVsyXSA9IDB4MDA7CisJCWxnMmZmLT5yZXBvcnQtPmZpZWxkWzBdLT52YWx1ZVs0XSA9IDB4MDA7CisJfQorCisJdXNiaGlkX3N1Ym1pdF9yZXBvcnQoaGlkLCBsZzJmZi0+cmVwb3J0LCBVU0JfRElSX09VVCk7CisJcmV0dXJuIDA7Cit9CisKK2ludCBsZzJmZl9pbml0KHN0cnVjdCBoaWRfZGV2aWNlICpoaWQpCit7CisJc3RydWN0IGxnMmZmX2RldmljZSAqbGcyZmY7CisJc3RydWN0IGhpZF9yZXBvcnQgKnJlcG9ydDsKKwlzdHJ1Y3QgaGlkX2lucHV0ICpoaWRpbnB1dCA9IGxpc3RfZW50cnkoaGlkLT5pbnB1dHMubmV4dCwKKwkJCQkJCXN0cnVjdCBoaWRfaW5wdXQsIGxpc3QpOworCXN0cnVjdCBsaXN0X2hlYWQgKnJlcG9ydF9saXN0ID0KKwkJCSZoaWQtPnJlcG9ydF9lbnVtW0hJRF9PVVRQVVRfUkVQT1JUXS5yZXBvcnRfbGlzdDsKKwlzdHJ1Y3QgaW5wdXRfZGV2ICpkZXYgPSBoaWRpbnB1dC0+aW5wdXQ7CisJaW50IGVycm9yOworCisJaWYgKGxpc3RfZW1wdHkocmVwb3J0X2xpc3QpKSB7CisJCWRldl9lcnIoJmhpZC0+ZGV2LCAibm8gb3V0cHV0IHJlcG9ydCBmb3VuZFxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCXJlcG9ydCA9IGxpc3RfZW50cnkocmVwb3J0X2xpc3QtPm5leHQsIHN0cnVjdCBoaWRfcmVwb3J0LCBsaXN0KTsKKworCWlmIChyZXBvcnQtPm1heGZpZWxkIDwgMSkgeworCQlkZXZfZXJyKCZoaWQtPmRldiwgIm91dHB1dCByZXBvcnQgaXMgZW1wdHlcbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisJaWYgKHJlcG9ydC0+ZmllbGRbMF0tPnJlcG9ydF9jb3VudCA8IDcpIHsKKwkJZGV2X2VycigmaGlkLT5kZXYsICJub3QgZW5vdWdoIHZhbHVlcyBpbiB0aGUgZmllbGRcbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlsZzJmZiA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBsZzJmZl9kZXZpY2UpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWxnMmZmKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXNldF9iaXQoRkZfUlVNQkxFLCBkZXYtPmZmYml0KTsKKworCWVycm9yID0gaW5wdXRfZmZfY3JlYXRlX21lbWxlc3MoZGV2LCBsZzJmZiwgcGxheV9lZmZlY3QpOworCWlmIChlcnJvcikgeworCQlrZnJlZShsZzJmZik7CisJCXJldHVybiBlcnJvcjsKKwl9CisKKwlsZzJmZi0+cmVwb3J0ID0gcmVwb3J0OworCXJlcG9ydC0+ZmllbGRbMF0tPnZhbHVlWzBdID0gMHhmMzsKKwlyZXBvcnQtPmZpZWxkWzBdLT52YWx1ZVsxXSA9IDB4MDA7CisJcmVwb3J0LT5maWVsZFswXS0+dmFsdWVbMl0gPSAweDAwOworCXJlcG9ydC0+ZmllbGRbMF0tPnZhbHVlWzNdID0gMHgwMDsKKwlyZXBvcnQtPmZpZWxkWzBdLT52YWx1ZVs0XSA9IDB4MDA7CisJcmVwb3J0LT5maWVsZFswXS0+dmFsdWVbNV0gPSAweDAwOworCXJlcG9ydC0+ZmllbGRbMF0tPnZhbHVlWzZdID0gMHgwMDsKKworCXVzYmhpZF9zdWJtaXRfcmVwb3J0KGhpZCwgcmVwb3J0LCBVU0JfRElSX09VVCk7CisKKwlkZXZfaW5mbygmaGlkLT5kZXYsICJGb3JjZSBmZWVkYmFjayBmb3IgTG9naXRlY2ggUnVtYmxlcGFkIDIgYnkgIgorCSAgICAgICAiQW5zc2kgSGFubnVsYSA8YW5zc2kuaGFubnVsYUBnbWFpbC5jb20+XG4iKTsKKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9oaWQvaGlkLWxnZmYuYyBiL2RyaXZlcnMvaGlkL2hpZC1sZ2ZmLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTFhZmYwOAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvaGlkL2hpZC1sZ2ZmLmMKQEAgLTAsMCArMSwxNzkgQEAKKy8qCisgKiBGb3JjZSBmZWVkYmFjayBzdXBwb3J0IGZvciBoaWQtY29tcGxpYW50IGZvciBzb21lIG9mIHRoZSBkZXZpY2VzIGZyb20KKyAqIExvZ2l0ZWNoLCBuYW1lbHk6CisgKiAtIFdpbmdNYW4gQ29yZGxlc3MgUnVtYmxlUGFkCisgKiAtIFdpbmdNYW4gRm9yY2UgM0QKKyAqCisgKiAgQ29weXJpZ2h0IChjKSAyMDAyLTIwMDQgSm9oYW5uIERlbmV1eAorICogIENvcHlyaWdodCAoYykgMjAwNiBBbnNzaSBIYW5udWxhIDxhbnNzaS5oYW5udWxhQGdtYWlsLmNvbT4KKyAqLworCisvKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKKyAqCisgKiBTaG91bGQgeW91IG5lZWQgdG8gY29udGFjdCBtZSwgdGhlIGF1dGhvciwgeW91IGNhbiBkbyBzbyBieQorICogZS1tYWlsIC0gbWFpbCB5b3VyIG1lc3NhZ2UgdG8gPGpvaGFubi5kZW5ldXhAaXQudXUuc2U+CisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CisjaW5jbHVkZSA8bGludXgvdXNiLmg+CisjaW5jbHVkZSA8bGludXgvaGlkLmg+CisKKyNpbmNsdWRlICJ1c2JoaWQvdXNiaGlkLmgiCisjaW5jbHVkZSAiaGlkLWxnLmgiCisKK3N0cnVjdCBkZXZfdHlwZSB7CisJdTE2IGlkVmVuZG9yOworCXUxNiBpZFByb2R1Y3Q7CisJY29uc3Qgc2lnbmVkIHNob3J0ICpmZjsKK307CisKK3N0YXRpYyBjb25zdCBzaWduZWQgc2hvcnQgZmZfcnVtYmxlW10gPSB7CisJRkZfUlVNQkxFLAorCS0xCit9OworCitzdGF0aWMgY29uc3Qgc2lnbmVkIHNob3J0IGZmX2pveXN0aWNrW10gPSB7CisJRkZfQ09OU1RBTlQsCisJLTEKK307CisKK3N0YXRpYyBjb25zdCBzaWduZWQgc2hvcnQgZmZfd2hlZWxbXSA9IHsKKwlGRl9DT05TVEFOVCwKKwlGRl9BVVRPQ0VOVEVSLAorCS0xCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGRldl90eXBlIGRldmljZXNbXSA9IHsKKwl7IDB4MDQ2ZCwgMHhjMjExLCBmZl9ydW1ibGUgfSwKKwl7IDB4MDQ2ZCwgMHhjMjE5LCBmZl9ydW1ibGUgfSwKKwl7IDB4MDQ2ZCwgMHhjMjgzLCBmZl9qb3lzdGljayB9LAorCXsgMHgwNDZkLCAweGMyODYsIGZmX2pveXN0aWNrIH0sCisJeyAweDA0NmQsIDB4YzI5NCwgZmZfam95c3RpY2sgfSwKKwl7IDB4MDQ2ZCwgMHhjMjk1LCBmZl9qb3lzdGljayB9LAorCXsgMHgwNDZkLCAweGNhMDMsIGZmX3doZWVsIH0sCit9OworCitzdGF0aWMgaW50IGhpZF9sZ2ZmX3BsYXkoc3RydWN0IGlucHV0X2RldiAqZGV2LCB2b2lkICpkYXRhLCBzdHJ1Y3QgZmZfZWZmZWN0ICplZmZlY3QpCit7CisJc3RydWN0IGhpZF9kZXZpY2UgKmhpZCA9IGlucHV0X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IGxpc3RfaGVhZCAqcmVwb3J0X2xpc3QgPSAmaGlkLT5yZXBvcnRfZW51bVtISURfT1VUUFVUX1JFUE9SVF0ucmVwb3J0X2xpc3Q7CisJc3RydWN0IGhpZF9yZXBvcnQgKnJlcG9ydCA9IGxpc3RfZW50cnkocmVwb3J0X2xpc3QtPm5leHQsIHN0cnVjdCBoaWRfcmVwb3J0LCBsaXN0KTsKKwlpbnQgeCwgeTsKKwl1bnNpZ25lZCBpbnQgbGVmdCwgcmlnaHQ7CisKKyNkZWZpbmUgQ0xBTVAoeCkgaWYgKHggPCAwKSB4ID0gMDsgaWYgKHggPiAweGZmKSB4ID0gMHhmZgorCisJc3dpdGNoIChlZmZlY3QtPnR5cGUpIHsKKwljYXNlIEZGX0NPTlNUQU5UOgorCQl4ID0gZWZmZWN0LT51LnJhbXAuc3RhcnRfbGV2ZWwgKyAweDdmOwkvKiAweDdmIGlzIGNlbnRlciAqLworCQl5ID0gZWZmZWN0LT51LnJhbXAuZW5kX2xldmVsICsgMHg3ZjsKKwkJQ0xBTVAoeCk7CisJCUNMQU1QKHkpOworCQlyZXBvcnQtPmZpZWxkWzBdLT52YWx1ZVswXSA9IDB4NTE7CisJCXJlcG9ydC0+ZmllbGRbMF0tPnZhbHVlWzFdID0gMHgwODsKKwkJcmVwb3J0LT5maWVsZFswXS0+dmFsdWVbMl0gPSB4OworCQlyZXBvcnQtPmZpZWxkWzBdLT52YWx1ZVszXSA9IHk7CisJCWRiZ19oaWQoIih4LCB5KT0oJTA0eCwgJTA0eClcbiIsIHgsIHkpOworCQl1c2JoaWRfc3VibWl0X3JlcG9ydChoaWQsIHJlcG9ydCwgVVNCX0RJUl9PVVQpOworCQlicmVhazsKKworCWNhc2UgRkZfUlVNQkxFOgorCQlyaWdodCA9IGVmZmVjdC0+dS5ydW1ibGUuc3Ryb25nX21hZ25pdHVkZTsKKwkJbGVmdCA9IGVmZmVjdC0+dS5ydW1ibGUud2Vha19tYWduaXR1ZGU7CisJCXJpZ2h0ID0gcmlnaHQgKiAweGZmIC8gMHhmZmZmOworCQlsZWZ0ID0gbGVmdCAqIDB4ZmYgLyAweGZmZmY7CisJCUNMQU1QKGxlZnQpOworCQlDTEFNUChyaWdodCk7CisJCXJlcG9ydC0+ZmllbGRbMF0tPnZhbHVlWzBdID0gMHg0MjsKKwkJcmVwb3J0LT5maWVsZFswXS0+dmFsdWVbMV0gPSAweDAwOworCQlyZXBvcnQtPmZpZWxkWzBdLT52YWx1ZVsyXSA9IGxlZnQ7CisJCXJlcG9ydC0+ZmllbGRbMF0tPnZhbHVlWzNdID0gcmlnaHQ7CisJCWRiZ19oaWQoIihsZWZ0LCByaWdodCk9KCUwNHgsICUwNHgpXG4iLCBsZWZ0LCByaWdodCk7CisJCXVzYmhpZF9zdWJtaXRfcmVwb3J0KGhpZCwgcmVwb3J0LCBVU0JfRElSX09VVCk7CisJCWJyZWFrOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgaGlkX2xnZmZfc2V0X2F1dG9jZW50ZXIoc3RydWN0IGlucHV0X2RldiAqZGV2LCB1MTYgbWFnbml0dWRlKQoreworCXN0cnVjdCBoaWRfZGV2aWNlICpoaWQgPSBpbnB1dF9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBsaXN0X2hlYWQgKnJlcG9ydF9saXN0ID0gJmhpZC0+cmVwb3J0X2VudW1bSElEX09VVFBVVF9SRVBPUlRdLnJlcG9ydF9saXN0OworCXN0cnVjdCBoaWRfcmVwb3J0ICpyZXBvcnQgPSBsaXN0X2VudHJ5KHJlcG9ydF9saXN0LT5uZXh0LCBzdHJ1Y3QgaGlkX3JlcG9ydCwgbGlzdCk7CisJX19zMzIgKnZhbHVlID0gcmVwb3J0LT5maWVsZFswXS0+dmFsdWU7CisJbWFnbml0dWRlID0gKG1hZ25pdHVkZSA+PiAxMikgJiAweGY7CisJKnZhbHVlKysgPSAweGZlOworCSp2YWx1ZSsrID0gMHgwZDsKKwkqdmFsdWUrKyA9IG1hZ25pdHVkZTsgICAvKiBjbG9ja3dpc2Ugc3RyZW5ndGggKi8KKwkqdmFsdWUrKyA9IG1hZ25pdHVkZTsgICAvKiBjb3VudGVyLWNsb2Nrd2lzZSBzdHJlbmd0aCAqLworCSp2YWx1ZSsrID0gMHg4MDsKKwkqdmFsdWUrKyA9IDB4MDA7CisJKnZhbHVlID0gMHgwMDsKKwl1c2JoaWRfc3VibWl0X3JlcG9ydChoaWQsIHJlcG9ydCwgVVNCX0RJUl9PVVQpOworfQorCitpbnQgbGdmZl9pbml0KHN0cnVjdCBoaWRfZGV2aWNlKiBoaWQpCit7CisJc3RydWN0IGhpZF9pbnB1dCAqaGlkaW5wdXQgPSBsaXN0X2VudHJ5KGhpZC0+aW5wdXRzLm5leHQsIHN0cnVjdCBoaWRfaW5wdXQsIGxpc3QpOworCXN0cnVjdCBsaXN0X2hlYWQgKnJlcG9ydF9saXN0ID0gJmhpZC0+cmVwb3J0X2VudW1bSElEX09VVFBVVF9SRVBPUlRdLnJlcG9ydF9saXN0OworCXN0cnVjdCBpbnB1dF9kZXYgKmRldiA9IGhpZGlucHV0LT5pbnB1dDsKKwlzdHJ1Y3QgaGlkX3JlcG9ydCAqcmVwb3J0OworCXN0cnVjdCBoaWRfZmllbGQgKmZpZWxkOworCWNvbnN0IHNpZ25lZCBzaG9ydCAqZmZfYml0cyA9IGZmX2pveXN0aWNrOworCWludCBlcnJvcjsKKwlpbnQgaTsKKworCS8qIEZpbmQgdGhlIHJlcG9ydCB0byB1c2UgKi8KKwlpZiAobGlzdF9lbXB0eShyZXBvcnRfbGlzdCkpIHsKKwkJZXJyX2hpZCgiTm8gb3V0cHV0IHJlcG9ydCBmb3VuZCIpOworCQlyZXR1cm4gLTE7CisJfQorCisJLyogQ2hlY2sgdGhhdCB0aGUgcmVwb3J0IGxvb2tzIG9rICovCisJcmVwb3J0ID0gbGlzdF9lbnRyeShyZXBvcnRfbGlzdC0+bmV4dCwgc3RydWN0IGhpZF9yZXBvcnQsIGxpc3QpOworCWlmICghcmVwb3J0KSB7CisJCWVycl9oaWQoIk5VTEwgb3V0cHV0IHJlcG9ydCIpOworCQlyZXR1cm4gLTE7CisJfQorCisJZmllbGQgPSByZXBvcnQtPmZpZWxkWzBdOworCWlmICghZmllbGQpIHsKKwkJZXJyX2hpZCgiTlVMTCBmaWVsZCIpOworCQlyZXR1cm4gLTE7CisJfQorCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZGV2aWNlcyk7IGkrKykgeworCQlpZiAoZGV2LT5pZC52ZW5kb3IgPT0gZGV2aWNlc1tpXS5pZFZlbmRvciAmJgorCQkgICAgZGV2LT5pZC5wcm9kdWN0ID09IGRldmljZXNbaV0uaWRQcm9kdWN0KSB7CisJCQlmZl9iaXRzID0gZGV2aWNlc1tpXS5mZjsKKwkJCWJyZWFrOworCQl9CisJfQorCisJZm9yIChpID0gMDsgZmZfYml0c1tpXSA+PSAwOyBpKyspCisJCXNldF9iaXQoZmZfYml0c1tpXSwgZGV2LT5mZmJpdCk7CisKKwllcnJvciA9IGlucHV0X2ZmX2NyZWF0ZV9tZW1sZXNzKGRldiwgTlVMTCwgaGlkX2xnZmZfcGxheSk7CisJaWYgKGVycm9yKQorCQlyZXR1cm4gZXJyb3I7CisKKwlpZiAoIHRlc3RfYml0KEZGX0FVVE9DRU5URVIsIGRldi0+ZmZiaXQpICkKKwkJZGV2LT5mZi0+c2V0X2F1dG9jZW50ZXIgPSBoaWRfbGdmZl9zZXRfYXV0b2NlbnRlcjsKKworCXByaW50ayhLRVJOX0lORk8gIkZvcmNlIGZlZWRiYWNrIGZvciBMb2dpdGVjaCBmb3JjZSBmZWVkYmFjayBkZXZpY2VzIGJ5IEpvaGFubiBEZW5ldXggPGpvaGFubi5kZW5ldXhAaXQudXUuc2U+XG4iKTsKKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9oaWQvaGlkLW1pY3Jvc29mdC5jIGIvZHJpdmVycy9oaWQvaGlkLW1pY3Jvc29mdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3MThiMTYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2hpZC9oaWQtbWljcm9zb2Z0LmMKQEAgLTAsMCArMSwyMTkgQEAKKy8qCisgKiAgSElEIGRyaXZlciBmb3Igc29tZSBtaWNyb3NvZnQgInNwZWNpYWwiIGRldmljZXMKKyAqCisgKiAgQ29weXJpZ2h0IChjKSAxOTk5IEFuZHJlYXMgR2FsCisgKiAgQ29weXJpZ2h0IChjKSAyMDAwLTIwMDUgVm9qdGVjaCBQYXZsaWsgPHZvanRlY2hAc3VzZS5jej4KKyAqICBDb3B5cmlnaHQgKGMpIDIwMDUgTWljaGFlbCBIYWJvdXN0YWsgPG1pa2UtQGNpbmNpLnJyLmNvbT4gZm9yIENvbmNlcHQyLCBJbmMKKyAqICBDb3B5cmlnaHQgKGMpIDIwMDYtMjAwNyBKaXJpIEtvc2luYQorICogIENvcHlyaWdodCAoYykgMjAwNyBQYXVsIFdhbG1zbGV5CisgKiAgQ29weXJpZ2h0IChjKSAyMDA4IEppcmkgU2xhYnkKKyAqLworCisvKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgKiBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pCisgKiBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KKyNpbmNsdWRlIDxsaW51eC9oaWQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKworI2luY2x1ZGUgImhpZC1pZHMuaCIKKworI2RlZmluZSBNU19ISURJTlBVVAkweDAxCisjZGVmaW5lIE1TX0VSR09OT01ZCTB4MDIKKyNkZWZpbmUgTVNfUFJFU0VOVEVSCTB4MDQKKyNkZWZpbmUgTVNfUkRFU0MJMHgwOAorI2RlZmluZSBNU19OT0dFVAkweDEwCisKKy8qCisgKiBNaWNyb3NvZnQgV2lyZWxlc3MgRGVza3RvcCBSZWNlaXZlciAoTW9kZWwgMTAyOCkgaGFzIHNldmVyYWwKKyAqICdVc2FnZSBNaW4vTWF4JyB3aGVyZSBpdCBvdWdodCB0byBoYXZlICdQaHlzaWNhbCBNaW4vTWF4JworICovCitzdGF0aWMgdm9pZCBtc19yZXBvcnRfZml4dXAoc3RydWN0IGhpZF9kZXZpY2UgKmhkZXYsIF9fdTggKnJkZXNjLAorCQl1bnNpZ25lZCBpbnQgcnNpemUpCit7CisJdW5zaWduZWQgbG9uZyBxdWlya3MgPSAodW5zaWduZWQgbG9uZyloaWRfZ2V0X2RydmRhdGEoaGRldik7CisKKwlpZiAoKHF1aXJrcyAmIE1TX1JERVNDKSAmJiByc2l6ZSA9PSA1NzEgJiYgcmRlc2NbMjg0XSA9PSAweDE5ICYmCisJCQlyZGVzY1syODZdID09IDB4MmEgJiYgcmRlc2NbMzA0XSA9PSAweDE5ICYmCisJCQlyZGVzY1szMDZdID09IDB4MjkgJiYgcmRlc2NbMzUyXSA9PSAweDFhICYmCisJCQlyZGVzY1szNTVdID09IDB4MmEgJiYgcmRlc2NbNTU3XSA9PSAweDE5ICYmCisJCQlyZGVzY1s1NTldID09IDB4MjkpIHsKKwkJZGV2X2luZm8oJmhkZXYtPmRldiwgImZpeGluZyB1cCBNaWNyb3NvZnQgV2lyZWxlc3MgUmVjZWl2ZXIgIgorCQkJCSJNb2RlbCAxMDI4IHJlcG9ydCBkZXNjcmlwdG9yXG4iKTsKKwkJcmRlc2NbMjg0XSA9IHJkZXNjWzMwNF0gPSByZGVzY1s1NTddID0gMHgzNTsKKwkJcmRlc2NbMzUyXSA9IDB4MzY7CisJCXJkZXNjWzI4Nl0gPSByZGVzY1szNTVdID0gMHg0NjsKKwkJcmRlc2NbMzA2XSA9IHJkZXNjWzU1OV0gPSAweDQ1OworCX0KK30KKworI2RlZmluZSBtc19tYXBfa2V5X2NsZWFyKGMpCWhpZF9tYXBfdXNhZ2VfY2xlYXIoaGksIHVzYWdlLCBiaXQsIG1heCwgXAorCQkJCQlFVl9LRVksIChjKSkKK3N0YXRpYyBpbnQgbXNfZXJnb25vbXlfa2JfcXVpcmsoc3RydWN0IGhpZF9pbnB1dCAqaGksIHN0cnVjdCBoaWRfdXNhZ2UgKnVzYWdlLAorCQl1bnNpZ25lZCBsb25nICoqYml0LCBpbnQgKm1heCkKK3sKKwlzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dCA9IGhpLT5pbnB1dDsKKworCXN3aXRjaCAodXNhZ2UtPmhpZCAmIEhJRF9VU0FHRSkgeworCWNhc2UgMHhmZDA2OiBtc19tYXBfa2V5X2NsZWFyKEtFWV9DSEFUKTsJYnJlYWs7CisJY2FzZSAweGZkMDc6IG1zX21hcF9rZXlfY2xlYXIoS0VZX1BIT05FKTsJYnJlYWs7CisJY2FzZSAweGZmMDU6CisJCXNldF9iaXQoRVZfUkVQLCBpbnB1dC0+ZXZiaXQpOworCQltc19tYXBfa2V5X2NsZWFyKEtFWV9GMTMpOworCQlzZXRfYml0KEtFWV9GMTQsIGlucHV0LT5rZXliaXQpOworCQlzZXRfYml0KEtFWV9GMTUsIGlucHV0LT5rZXliaXQpOworCQlzZXRfYml0KEtFWV9GMTYsIGlucHV0LT5rZXliaXQpOworCQlzZXRfYml0KEtFWV9GMTcsIGlucHV0LT5rZXliaXQpOworCQlzZXRfYml0KEtFWV9GMTgsIGlucHV0LT5rZXliaXQpOworCWRlZmF1bHQ6CisJCXJldHVybiAwOworCX0KKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCBtc19wcmVzZW50ZXJfOGtfcXVpcmsoc3RydWN0IGhpZF9pbnB1dCAqaGksIHN0cnVjdCBoaWRfdXNhZ2UgKnVzYWdlLAorCQl1bnNpZ25lZCBsb25nICoqYml0LCBpbnQgKm1heCkKK3sKKwlzZXRfYml0KEVWX1JFUCwgaGktPmlucHV0LT5ldmJpdCk7CisJc3dpdGNoICh1c2FnZS0+aGlkICYgSElEX1VTQUdFKSB7CisJY2FzZSAweGZkMDg6IG1zX21hcF9rZXlfY2xlYXIoS0VZX0ZPUldBUkQpOwlicmVhazsKKwljYXNlIDB4ZmQwOTogbXNfbWFwX2tleV9jbGVhcihLRVlfQkFDSyk7CWJyZWFrOworCWNhc2UgMHhmZDBiOiBtc19tYXBfa2V5X2NsZWFyKEtFWV9QTEFZUEFVU0UpOwlicmVhazsKKwljYXNlIDB4ZmQwZTogbXNfbWFwX2tleV9jbGVhcihLRVlfQ0xPU0UpOwlicmVhazsKKwljYXNlIDB4ZmQwZjogbXNfbWFwX2tleV9jbGVhcihLRVlfUExBWSk7CWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAwOworCX0KKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCBtc19pbnB1dF9tYXBwaW5nKHN0cnVjdCBoaWRfZGV2aWNlICpoZGV2LCBzdHJ1Y3QgaGlkX2lucHV0ICpoaSwKKwkJc3RydWN0IGhpZF9maWVsZCAqZmllbGQsIHN0cnVjdCBoaWRfdXNhZ2UgKnVzYWdlLAorCQl1bnNpZ25lZCBsb25nICoqYml0LCBpbnQgKm1heCkKK3sKKwl1bnNpZ25lZCBsb25nIHF1aXJrcyA9ICh1bnNpZ25lZCBsb25nKWhpZF9nZXRfZHJ2ZGF0YShoZGV2KTsKKworCWlmICgodXNhZ2UtPmhpZCAmIEhJRF9VU0FHRV9QQUdFKSAhPSBISURfVVBfTVNWRU5ET1IpCisJCXJldHVybiAwOworCisJaWYgKHF1aXJrcyAmIE1TX0VSR09OT01ZKSB7CisJCWludCByZXQgPSBtc19lcmdvbm9teV9rYl9xdWlyayhoaSwgdXNhZ2UsIGJpdCwgbWF4KTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisJfQorCisJaWYgKChxdWlya3MgJiBNU19QUkVTRU5URVIpICYmCisJCQltc19wcmVzZW50ZXJfOGtfcXVpcmsoaGksIHVzYWdlLCBiaXQsIG1heCkpCisJCXJldHVybiAxOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbXNfZXZlbnQoc3RydWN0IGhpZF9kZXZpY2UgKmhkZXYsIHN0cnVjdCBoaWRfZmllbGQgKmZpZWxkLAorCQlzdHJ1Y3QgaGlkX3VzYWdlICp1c2FnZSwgX19zMzIgdmFsdWUpCit7CisJdW5zaWduZWQgbG9uZyBxdWlya3MgPSAodW5zaWduZWQgbG9uZyloaWRfZ2V0X2RydmRhdGEoaGRldik7CisKKwlpZiAoIShoZGV2LT5jbGFpbWVkICYgSElEX0NMQUlNRURfSU5QVVQpIHx8ICFmaWVsZC0+aGlkaW5wdXQgfHwKKwkJCSF1c2FnZS0+dHlwZSkKKwkJcmV0dXJuIDA7CisKKwkvKiBIYW5kbGluZyBNUyBrZXlib2FyZHMgc3BlY2lhbCBidXR0b25zICovCisJaWYgKHF1aXJrcyAmIE1TX0VSR09OT01ZICYmIHVzYWdlLT5oaWQgPT0gKEhJRF9VUF9NU1ZFTkRPUiB8IDB4ZmYwNSkpIHsKKwkJc3RydWN0IGlucHV0X2RldiAqaW5wdXQgPSBmaWVsZC0+aGlkaW5wdXQtPmlucHV0OworCQlzdGF0aWMgdW5zaWduZWQgaW50IGxhc3Rfa2V5ID0gMDsKKwkJdW5zaWduZWQgaW50IGtleSA9IDA7CisJCXN3aXRjaCAodmFsdWUpIHsKKwkJY2FzZSAweDAxOiBrZXkgPSBLRVlfRjE0OyBicmVhazsKKwkJY2FzZSAweDAyOiBrZXkgPSBLRVlfRjE1OyBicmVhazsKKwkJY2FzZSAweDA0OiBrZXkgPSBLRVlfRjE2OyBicmVhazsKKwkJY2FzZSAweDA4OiBrZXkgPSBLRVlfRjE3OyBicmVhazsKKwkJY2FzZSAweDEwOiBrZXkgPSBLRVlfRjE4OyBicmVhazsKKwkJfQorCQlpZiAoa2V5KSB7CisJCQlpbnB1dF9ldmVudChpbnB1dCwgdXNhZ2UtPnR5cGUsIGtleSwgMSk7CisJCQlsYXN0X2tleSA9IGtleTsKKwkJfSBlbHNlCisJCQlpbnB1dF9ldmVudChpbnB1dCwgdXNhZ2UtPnR5cGUsIGxhc3Rfa2V5LCAwKTsKKworCQlyZXR1cm4gMTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtc19wcm9iZShzdHJ1Y3QgaGlkX2RldmljZSAqaGRldiwgY29uc3Qgc3RydWN0IGhpZF9kZXZpY2VfaWQgKmlkKQoreworCXVuc2lnbmVkIGxvbmcgcXVpcmtzID0gaWQtPmRyaXZlcl9kYXRhOworCWludCByZXQ7CisKKwloaWRfc2V0X2RydmRhdGEoaGRldiwgKHZvaWQgKilxdWlya3MpOworCisJaWYgKHF1aXJrcyAmIE1TX05PR0VUKQorCQloZGV2LT5xdWlya3MgfD0gSElEX1FVSVJLX05PR0VUOworCisJcmV0ID0gaGlkX3BhcnNlKGhkZXYpOworCWlmIChyZXQpIHsKKwkJZGV2X2VycigmaGRldi0+ZGV2LCAicGFyc2UgZmFpbGVkXG4iKTsKKwkJZ290byBlcnJfZnJlZTsKKwl9CisKKwlyZXQgPSBoaWRfaHdfc3RhcnQoaGRldiwgSElEX0NPTk5FQ1RfREVGQVVMVCB8ICgocXVpcmtzICYgTVNfSElESU5QVVQpID8KKwkJCQlISURfQ09OTkVDVF9ISURJTlBVVF9GT1JDRSA6IDApKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoJmhkZXYtPmRldiwgImh3IHN0YXJ0IGZhaWxlZFxuIik7CisJCWdvdG8gZXJyX2ZyZWU7CisJfQorCisJcmV0dXJuIDA7CitlcnJfZnJlZToKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGhpZF9kZXZpY2VfaWQgbXNfZGV2aWNlc1tdID0geworCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9NSUNST1NPRlQsIFVTQl9ERVZJQ0VfSURfU0lERVdJTkRFUl9HViksCisJCS5kcml2ZXJfZGF0YSA9IE1TX0hJRElOUFVUIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX01JQ1JPU09GVCwgVVNCX0RFVklDRV9JRF9NU19ORTRLKSwKKwkJLmRyaXZlcl9kYXRhID0gTVNfRVJHT05PTVkgfSwKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfTUlDUk9TT0ZULCBVU0JfREVWSUNFX0lEX01TX0xLNkspLAorCQkuZHJpdmVyX2RhdGEgPSBNU19FUkdPTk9NWSB8IE1TX1JERVNDIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX01JQ1JPU09GVCwgVVNCX0RFVklDRV9JRF9NU19QUkVTRU5URVJfOEtfVVNCKSwKKwkJLmRyaXZlcl9kYXRhID0gTVNfUFJFU0VOVEVSIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX01JQ1JPU09GVCwgVVNCX0RFVklDRV9JRF9XSVJFTEVTU19PUFRJQ0FMX0RFU0tUT1BfM18wKSwKKwkJLmRyaXZlcl9kYXRhID0gTVNfTk9HRVQgfSwKKworCXsgSElEX0JMVUVUT09USF9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9NSUNST1NPRlQsIFVTQl9ERVZJQ0VfSURfTVNfUFJFU0VOVEVSXzhLX0JUKSwKKwkJLmRyaXZlcl9kYXRhID0gTVNfUFJFU0VOVEVSIH0sCisJeyB9Cit9OworTU9EVUxFX0RFVklDRV9UQUJMRShoaWQsIG1zX2RldmljZXMpOworCitzdGF0aWMgc3RydWN0IGhpZF9kcml2ZXIgbXNfZHJpdmVyID0geworCS5uYW1lID0gIm1pY3Jvc29mdCIsCisJLmlkX3RhYmxlID0gbXNfZGV2aWNlcywKKwkucmVwb3J0X2ZpeHVwID0gbXNfcmVwb3J0X2ZpeHVwLAorCS5pbnB1dF9tYXBwaW5nID0gbXNfaW5wdXRfbWFwcGluZywKKwkuZXZlbnQgPSBtc19ldmVudCwKKwkucHJvYmUgPSBtc19wcm9iZSwKK307CisKK3N0YXRpYyBpbnQgbXNfaW5pdCh2b2lkKQoreworCXJldHVybiBoaWRfcmVnaXN0ZXJfZHJpdmVyKCZtc19kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBtc19leGl0KHZvaWQpCit7CisJaGlkX3VucmVnaXN0ZXJfZHJpdmVyKCZtc19kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChtc19pbml0KTsKK21vZHVsZV9leGl0KG1zX2V4aXQpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCitISURfQ09NUEFUX0xPQURfRFJJVkVSKG1pY3Jvc29mdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2hpZC9oaWQtbW9udGVyZXkuYyBiL2RyaXZlcnMvaGlkL2hpZC1tb250ZXJleS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzYTg1YTAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2hpZC9oaWQtbW9udGVyZXkuYwpAQCAtMCwwICsxLDgyIEBACisvKgorICogIEhJRCBkcml2ZXIgZm9yIHNvbWUgbW9udGVyZXkgInNwZWNpYWwiIGRldmljZXMKKyAqCisgKiAgQ29weXJpZ2h0IChjKSAxOTk5IEFuZHJlYXMgR2FsCisgKiAgQ29weXJpZ2h0IChjKSAyMDAwLTIwMDUgVm9qdGVjaCBQYXZsaWsgPHZvanRlY2hAc3VzZS5jej4KKyAqICBDb3B5cmlnaHQgKGMpIDIwMDUgTWljaGFlbCBIYWJvdXN0YWsgPG1pa2UtQGNpbmNpLnJyLmNvbT4gZm9yIENvbmNlcHQyLCBJbmMKKyAqICBDb3B5cmlnaHQgKGMpIDIwMDYtMjAwNyBKaXJpIEtvc2luYQorICogIENvcHlyaWdodCAoYykgMjAwNyBQYXVsIFdhbG1zbGV5CisgKiAgQ29weXJpZ2h0IChjKSAyMDA4IEppcmkgU2xhYnkKKyAqLworCisvKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgKiBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pCisgKiBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvaGlkLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisKKyNpbmNsdWRlICJoaWQtaWRzLmgiCisKK3N0YXRpYyB2b2lkIG1yX3JlcG9ydF9maXh1cChzdHJ1Y3QgaGlkX2RldmljZSAqaGRldiwgX191OCAqcmRlc2MsCisJCXVuc2lnbmVkIGludCByc2l6ZSkKK3sKKwlpZiAocnNpemUgPj0gMzAgJiYgcmRlc2NbMjldID09IDB4MDUgJiYgcmRlc2NbMzBdID09IDB4MDkpIHsKKwkJZGV2X2luZm8oJmhkZXYtPmRldiwgImZpeGluZyB1cCBidXR0b24vY29uc3VtZXIgaW4gSElEIHJlcG9ydCAiCisJCQkJImRlc2NyaXB0b3JcbiIpOworCQlyZGVzY1szMF0gPSAweDBjOworCX0KK30KKworI2RlZmluZSBtcl9tYXBfa2V5X2NsZWFyKGMpCWhpZF9tYXBfdXNhZ2VfY2xlYXIoaGksIHVzYWdlLCBiaXQsIG1heCwgXAorCQkJCQlFVl9LRVksIChjKSkKK3N0YXRpYyBpbnQgbXJfaW5wdXRfbWFwcGluZyhzdHJ1Y3QgaGlkX2RldmljZSAqaGRldiwgc3RydWN0IGhpZF9pbnB1dCAqaGksCisJCXN0cnVjdCBoaWRfZmllbGQgKmZpZWxkLCBzdHJ1Y3QgaGlkX3VzYWdlICp1c2FnZSwKKwkJdW5zaWduZWQgbG9uZyAqKmJpdCwgaW50ICptYXgpCit7CisJaWYgKCh1c2FnZS0+aGlkICYgSElEX1VTQUdFX1BBR0UpICE9IEhJRF9VUF9DT05TVU1FUikKKwkJcmV0dXJuIDA7CisKKwlzd2l0Y2ggKHVzYWdlLT5oaWQgJiBISURfVVNBR0UpIHsKKwljYXNlIDB4MTU2OiBtcl9tYXBfa2V5X2NsZWFyKEtFWV9XT1JEUFJPQ0VTU09SKTsJYnJlYWs7CisJY2FzZSAweDE1NzogbXJfbWFwX2tleV9jbGVhcihLRVlfU1BSRUFEU0hFRVQpOwkJYnJlYWs7CisJY2FzZSAweDE1ODogbXJfbWFwX2tleV9jbGVhcihLRVlfUFJFU0VOVEFUSU9OKTsJCWJyZWFrOworCWNhc2UgMHgxNWM6IG1yX21hcF9rZXlfY2xlYXIoS0VZX1NUT1ApOwkJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAwOworCX0KKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBoaWRfZGV2aWNlX2lkIG1yX2RldmljZXNbXSA9IHsKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfTU9OVEVSRVksIFVTQl9ERVZJQ0VfSURfR0VOSVVTX0tCMjlFKSB9LAorCXsgfQorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUoaGlkLCBtcl9kZXZpY2VzKTsKKworc3RhdGljIHN0cnVjdCBoaWRfZHJpdmVyIG1yX2RyaXZlciA9IHsKKwkubmFtZSA9ICJtb250ZXJleSIsCisJLmlkX3RhYmxlID0gbXJfZGV2aWNlcywKKwkucmVwb3J0X2ZpeHVwID0gbXJfcmVwb3J0X2ZpeHVwLAorCS5pbnB1dF9tYXBwaW5nID0gbXJfaW5wdXRfbWFwcGluZywKK307CisKK3N0YXRpYyBpbnQgbXJfaW5pdCh2b2lkKQoreworCXJldHVybiBoaWRfcmVnaXN0ZXJfZHJpdmVyKCZtcl9kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBtcl9leGl0KHZvaWQpCit7CisJaGlkX3VucmVnaXN0ZXJfZHJpdmVyKCZtcl9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChtcl9pbml0KTsKK21vZHVsZV9leGl0KG1yX2V4aXQpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCitISURfQ09NUEFUX0xPQURfRFJJVkVSKG1vbnRlcmV5KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaGlkL2hpZC1wZXRhbHlueC5jIGIvZHJpdmVycy9oaWQvaGlkLXBldGFseW54LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTA5NDVmZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvaGlkL2hpZC1wZXRhbHlueC5jCkBAIC0wLDAgKzEsMTIyIEBACisvKgorICogIEhJRCBkcml2ZXIgZm9yIHNvbWUgcGV0YWx5bnggInNwZWNpYWwiIGRldmljZXMKKyAqCisgKiAgQ29weXJpZ2h0IChjKSAxOTk5IEFuZHJlYXMgR2FsCisgKiAgQ29weXJpZ2h0IChjKSAyMDAwLTIwMDUgVm9qdGVjaCBQYXZsaWsgPHZvanRlY2hAc3VzZS5jej4KKyAqICBDb3B5cmlnaHQgKGMpIDIwMDUgTWljaGFlbCBIYWJvdXN0YWsgPG1pa2UtQGNpbmNpLnJyLmNvbT4gZm9yIENvbmNlcHQyLCBJbmMKKyAqICBDb3B5cmlnaHQgKGMpIDIwMDYtMjAwNyBKaXJpIEtvc2luYQorICogIENvcHlyaWdodCAoYykgMjAwNyBQYXVsIFdhbG1zbGV5CisgKiAgQ29weXJpZ2h0IChjKSAyMDA4IEppcmkgU2xhYnkKKyAqLworCisvKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgKiBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pCisgKiBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvaGlkLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisKKyNpbmNsdWRlICJoaWQtaWRzLmgiCisKKy8qIFBldGFseW54IE1heHRlciBSZW1vdGUgaGFzIG1heGltdW0gZm9yIGNvbnN1bWVyIHBhZ2Ugc2V0IHRvbyBsb3cgKi8KK3N0YXRpYyB2b2lkIHBsX3JlcG9ydF9maXh1cChzdHJ1Y3QgaGlkX2RldmljZSAqaGRldiwgX191OCAqcmRlc2MsCisJCXVuc2lnbmVkIGludCByc2l6ZSkKK3sKKwlpZiAocnNpemUgPj0gNjAgJiYgcmRlc2NbMzldID09IDB4MmEgJiYgcmRlc2NbNDBdID09IDB4ZjUgJiYKKwkJCXJkZXNjWzQxXSA9PSAweDAwICYmIHJkZXNjWzU5XSA9PSAweDI2ICYmCisJCQlyZGVzY1s2MF0gPT0gMHhmOSAmJiByZGVzY1s2MV0gPT0gMHgwMCkgeworCQlkZXZfaW5mbygmaGRldi0+ZGV2LCAiZml4aW5nIHVwIFBldGFseW54IE1heHRlciBSZW1vdGUgcmVwb3J0ICIKKwkJCQkiZGVzY3JpcHRvclxuIik7CisJCXJkZXNjWzYwXSA9IDB4ZmE7CisJCXJkZXNjWzQwXSA9IDB4ZmE7CisJfQorfQorCisjZGVmaW5lIHBsX21hcF9rZXlfY2xlYXIoYykJaGlkX21hcF91c2FnZV9jbGVhcihoaSwgdXNhZ2UsIGJpdCwgbWF4LCBcCisJCQkJCUVWX0tFWSwgKGMpKQorc3RhdGljIGludCBwbF9pbnB1dF9tYXBwaW5nKHN0cnVjdCBoaWRfZGV2aWNlICpoZGV2LCBzdHJ1Y3QgaGlkX2lucHV0ICpoaSwKKwkJc3RydWN0IGhpZF9maWVsZCAqZmllbGQsIHN0cnVjdCBoaWRfdXNhZ2UgKnVzYWdlLAorCQl1bnNpZ25lZCBsb25nICoqYml0LCBpbnQgKm1heCkKK3sKKwlpZiAoKHVzYWdlLT5oaWQgJiBISURfVVNBR0VfUEFHRSkgPT0gSElEX1VQX0xPR0lWRU5ET1IpIHsKKwkJc3dpdGNoICh1c2FnZS0+aGlkICYgSElEX1VTQUdFKSB7CisJCWNhc2UgMHgwNWE6IHBsX21hcF9rZXlfY2xlYXIoS0VZX1RFWFQpOwkJYnJlYWs7CisJCWNhc2UgMHgwNWI6IHBsX21hcF9rZXlfY2xlYXIoS0VZX1JFRCk7CQlicmVhazsKKwkJY2FzZSAweDA1YzogcGxfbWFwX2tleV9jbGVhcihLRVlfR1JFRU4pOwlicmVhazsKKwkJY2FzZSAweDA1ZDogcGxfbWFwX2tleV9jbGVhcihLRVlfWUVMTE9XKTsJYnJlYWs7CisJCWNhc2UgMHgwNWU6IHBsX21hcF9rZXlfY2xlYXIoS0VZX0JMVUUpOwkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlyZXR1cm4gMDsKKwkJfQorCQlyZXR1cm4gMTsKKwl9CisKKwlpZiAoKHVzYWdlLT5oaWQgJiBISURfVVNBR0VfUEFHRSkgPT0gSElEX1VQX0NPTlNVTUVSKSB7CisJCXN3aXRjaCAodXNhZ2UtPmhpZCAmIEhJRF9VU0FHRSkgeworCQljYXNlIDB4MGY2OiBwbF9tYXBfa2V5X2NsZWFyKEtFWV9ORVhUKTsJCWJyZWFrOworCQljYXNlIDB4MGZhOiBwbF9tYXBfa2V5X2NsZWFyKEtFWV9CQUNLKTsJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcmV0dXJuIDA7CisJCX0KKwkJcmV0dXJuIDE7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcGxfcHJvYmUoc3RydWN0IGhpZF9kZXZpY2UgKmhkZXYsIGNvbnN0IHN0cnVjdCBoaWRfZGV2aWNlX2lkICppZCkKK3sKKwlpbnQgcmV0OworCisJaGRldi0+cXVpcmtzIHw9IEhJRF9RVUlSS19OT0dFVDsKKworCXJldCA9IGhpZF9wYXJzZShoZGV2KTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoJmhkZXYtPmRldiwgInBhcnNlIGZhaWxlZFxuIik7CisJCWdvdG8gZXJyX2ZyZWU7CisJfQorCisJcmV0ID0gaGlkX2h3X3N0YXJ0KGhkZXYsIEhJRF9DT05ORUNUX0RFRkFVTFQpOworCWlmIChyZXQpIHsKKwkJZGV2X2VycigmaGRldi0+ZGV2LCAiaHcgc3RhcnQgZmFpbGVkXG4iKTsKKwkJZ290byBlcnJfZnJlZTsKKwl9CisKKwlyZXR1cm4gMDsKK2Vycl9mcmVlOgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGlkX2RldmljZV9pZCBwbF9kZXZpY2VzW10gPSB7CisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1BFVEFMWU5YLCBVU0JfREVWSUNFX0lEX1BFVEFMWU5YX01BWFRFUl9SRU1PVEUpIH0sCisJeyB9Cit9OworTU9EVUxFX0RFVklDRV9UQUJMRShoaWQsIHBsX2RldmljZXMpOworCitzdGF0aWMgc3RydWN0IGhpZF9kcml2ZXIgcGxfZHJpdmVyID0geworCS5uYW1lID0gInBldGFseW54IiwKKwkuaWRfdGFibGUgPSBwbF9kZXZpY2VzLAorCS5yZXBvcnRfZml4dXAgPSBwbF9yZXBvcnRfZml4dXAsCisJLmlucHV0X21hcHBpbmcgPSBwbF9pbnB1dF9tYXBwaW5nLAorCS5wcm9iZSA9IHBsX3Byb2JlLAorfTsKKworc3RhdGljIGludCBwbF9pbml0KHZvaWQpCit7CisJcmV0dXJuIGhpZF9yZWdpc3Rlcl9kcml2ZXIoJnBsX2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIHBsX2V4aXQodm9pZCkKK3sKKwloaWRfdW5yZWdpc3Rlcl9kcml2ZXIoJnBsX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KHBsX2luaXQpOworbW9kdWxlX2V4aXQocGxfZXhpdCk7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKK0hJRF9DT01QQVRfTE9BRF9EUklWRVIocGV0YWx5bngpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9oaWQvaGlkLXBsLmMgYi9kcml2ZXJzL2hpZC9oaWQtcGwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hY2Q4MTU1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9oaWQvaGlkLXBsLmMKQEAgLTAsMCArMSwyMDYgQEAKKy8qCisgKiAgRm9yY2UgZmVlZGJhY2sgc3VwcG9ydCBmb3IgUGFudGhlckxvcmQvR3JlZW5Bc2lhIGJhc2VkIGRldmljZXMKKyAqCisgKiAgVGhlIGRldmljZXMgYXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHZhcmlvdXMgbmFtZXMgYW5kIHRoZSBzYW1lIFVTQiBkZXZpY2UgSUQKKyAqICBjYW4gYmUgdXNlZCBpbiBib3RoIGFkYXB0ZXJzIGFuZCBhY3R1YWwgZ2FtZSBjb250cm9sbGVycy4KKyAqCisgKiAgMDgxMDowMDAxICJUd2luIFVTQiBKb3lzdGljayIKKyAqICAgLSB0ZXN0ZWQgd2l0aCBQYW50aGVyTG9yZCBVU0IvUFMyIDJpbjEgQWRhcHRlcgorICogICAtIGNvbnRhaW5zIHR3byByZXBvcnRzLCBvbmUgZm9yIGVhY2ggcG9ydCAoSElEX1FVSVJLX01VTFRJX0lOUFVUKQorICoKKyAqICAwZThmOjAwMDMgIkdyZWVuQXNpYSBJbmMuICAgIFVTQiBKb3lzdGljayAgICAgIgorICogICAtIHRlc3RlZCB3aXRoIEs/P25nIEdhbWluZyBnYW1lcGFkCisgKgorICogIENvcHlyaWdodCAoYykgMjAwNyBBbnNzaSBIYW5udWxhIDxhbnNzaS5oYW5udWxhQGdtYWlsLmNvbT4KKyAqLworCisvKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKKyAqLworCisKKy8qICNkZWZpbmUgREVCVUcgKi8KKworI2RlZmluZSBkZWJ1Zyhmb3JtYXQsIGFyZy4uLikgcHJfZGVidWcoImhpZC1wbGZmOiAiIGZvcm1hdCAiXG4iICwgIyMgYXJnKQorCisjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KKyNpbmNsdWRlIDxsaW51eC91c2IuaD4KKyNpbmNsdWRlIDxsaW51eC9oaWQuaD4KKworI2luY2x1ZGUgImhpZC1pZHMuaCIKKworI2lmZGVmIENPTkZJR19QQU5USEVSTE9SRF9GRgorI2luY2x1ZGUgInVzYmhpZC91c2JoaWQuaCIKKworc3RydWN0IHBsZmZfZGV2aWNlIHsKKwlzdHJ1Y3QgaGlkX3JlcG9ydCAqcmVwb3J0OworfTsKKworc3RhdGljIGludCBoaWRfcGxmZl9wbGF5KHN0cnVjdCBpbnB1dF9kZXYgKmRldiwgdm9pZCAqZGF0YSwKKwkJCSBzdHJ1Y3QgZmZfZWZmZWN0ICplZmZlY3QpCit7CisJc3RydWN0IGhpZF9kZXZpY2UgKmhpZCA9IGlucHV0X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IHBsZmZfZGV2aWNlICpwbGZmID0gZGF0YTsKKwlpbnQgbGVmdCwgcmlnaHQ7CisKKwlsZWZ0ID0gZWZmZWN0LT51LnJ1bWJsZS5zdHJvbmdfbWFnbml0dWRlOworCXJpZ2h0ID0gZWZmZWN0LT51LnJ1bWJsZS53ZWFrX21hZ25pdHVkZTsKKwlkZWJ1ZygiY2FsbGVkIHdpdGggMHglMDR4IDB4JTA0eCIsIGxlZnQsIHJpZ2h0KTsKKworCWxlZnQgPSBsZWZ0ICogMHg3ZiAvIDB4ZmZmZjsKKwlyaWdodCA9IHJpZ2h0ICogMHg3ZiAvIDB4ZmZmZjsKKworCXBsZmYtPnJlcG9ydC0+ZmllbGRbMF0tPnZhbHVlWzJdID0gbGVmdDsKKwlwbGZmLT5yZXBvcnQtPmZpZWxkWzBdLT52YWx1ZVszXSA9IHJpZ2h0OworCWRlYnVnKCJydW5uaW5nIHdpdGggMHglMDJ4IDB4JTAyeCIsIGxlZnQsIHJpZ2h0KTsKKwl1c2JoaWRfc3VibWl0X3JlcG9ydChoaWQsIHBsZmYtPnJlcG9ydCwgVVNCX0RJUl9PVVQpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcGxmZl9pbml0KHN0cnVjdCBoaWRfZGV2aWNlICpoaWQpCit7CisJc3RydWN0IHBsZmZfZGV2aWNlICpwbGZmOworCXN0cnVjdCBoaWRfcmVwb3J0ICpyZXBvcnQ7CisJc3RydWN0IGhpZF9pbnB1dCAqaGlkaW5wdXQ7CisJc3RydWN0IGxpc3RfaGVhZCAqcmVwb3J0X2xpc3QgPQorCQkJJmhpZC0+cmVwb3J0X2VudW1bSElEX09VVFBVVF9SRVBPUlRdLnJlcG9ydF9saXN0OworCXN0cnVjdCBsaXN0X2hlYWQgKnJlcG9ydF9wdHIgPSByZXBvcnRfbGlzdDsKKwlzdHJ1Y3QgaW5wdXRfZGV2ICpkZXY7CisJaW50IGVycm9yOworCisJLyogVGhlIGRldmljZSBjb250YWlucyBvbmUgb3V0cHV0IHJlcG9ydCBwZXIgcGh5c2ljYWwgZGV2aWNlLCBhbGwKKwkgICBjb250YWluaW5nIDEgZmllbGQsIHdoaWNoIGNvbnRhaW5zIDQgZmYwMC4wMDAyIHVzYWdlcyBhbmQgNCAxNmJpdAorCSAgIGFic29sdXRlIHZhbHVlcy4KKworCSAgIFRoZSBpbnB1dCByZXBvcnRzIGFsc28gY29udGFpbiBhIGZpZWxkIHdoaWNoIGNvbnRhaW5zCisJICAgOCBmZjAwLjAwMDEgdXNhZ2VzIGFuZCA4IGJvb2xlYW4gdmFsdWVzLiBUaGVpciBtZWFuaW5nIGlzCisJICAgY3VycmVudGx5IHVua25vd24uICovCisKKwlpZiAobGlzdF9lbXB0eShyZXBvcnRfbGlzdCkpIHsKKwkJZGV2X2VycigmaGlkLT5kZXYsICJubyBvdXRwdXQgcmVwb3J0cyBmb3VuZFxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCWxpc3RfZm9yX2VhY2hfZW50cnkoaGlkaW5wdXQsICZoaWQtPmlucHV0cywgbGlzdCkgeworCisJCXJlcG9ydF9wdHIgPSByZXBvcnRfcHRyLT5uZXh0OworCisJCWlmIChyZXBvcnRfcHRyID09IHJlcG9ydF9saXN0KSB7CisJCQlkZXZfZXJyKCZoaWQtPmRldiwgInJlcXVpcmVkIG91dHB1dCByZXBvcnQgaXMgIgorCQkJCQkibWlzc2luZ1xuIik7CisJCQlyZXR1cm4gLUVOT0RFVjsKKwkJfQorCisJCXJlcG9ydCA9IGxpc3RfZW50cnkocmVwb3J0X3B0ciwgc3RydWN0IGhpZF9yZXBvcnQsIGxpc3QpOworCQlpZiAocmVwb3J0LT5tYXhmaWVsZCA8IDEpIHsKKwkJCWRldl9lcnIoJmhpZC0+ZGV2LCAibm8gZmllbGRzIGluIHRoZSByZXBvcnRcbiIpOworCQkJcmV0dXJuIC1FTk9ERVY7CisJCX0KKworCQlpZiAocmVwb3J0LT5maWVsZFswXS0+cmVwb3J0X2NvdW50IDwgNCkgeworCQkJZGV2X2VycigmaGlkLT5kZXYsICJub3QgZW5vdWdoIHZhbHVlcyBpbiB0aGUgZmllbGRcbiIpOworCQkJcmV0dXJuIC1FTk9ERVY7CisJCX0KKworCQlwbGZmID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHBsZmZfZGV2aWNlKSwgR0ZQX0tFUk5FTCk7CisJCWlmICghcGxmZikKKwkJCXJldHVybiAtRU5PTUVNOworCisJCWRldiA9IGhpZGlucHV0LT5pbnB1dDsKKworCQlzZXRfYml0KEZGX1JVTUJMRSwgZGV2LT5mZmJpdCk7CisKKwkJZXJyb3IgPSBpbnB1dF9mZl9jcmVhdGVfbWVtbGVzcyhkZXYsIHBsZmYsIGhpZF9wbGZmX3BsYXkpOworCQlpZiAoZXJyb3IpIHsKKwkJCWtmcmVlKHBsZmYpOworCQkJcmV0dXJuIGVycm9yOworCQl9CisKKwkJcGxmZi0+cmVwb3J0ID0gcmVwb3J0OworCQlwbGZmLT5yZXBvcnQtPmZpZWxkWzBdLT52YWx1ZVswXSA9IDB4MDA7CisJCXBsZmYtPnJlcG9ydC0+ZmllbGRbMF0tPnZhbHVlWzFdID0gMHgwMDsKKwkJcGxmZi0+cmVwb3J0LT5maWVsZFswXS0+dmFsdWVbMl0gPSAweDAwOworCQlwbGZmLT5yZXBvcnQtPmZpZWxkWzBdLT52YWx1ZVszXSA9IDB4MDA7CisJCXVzYmhpZF9zdWJtaXRfcmVwb3J0KGhpZCwgcGxmZi0+cmVwb3J0LCBVU0JfRElSX09VVCk7CisJfQorCisJZGV2X2luZm8oJmhpZC0+ZGV2LCAiRm9yY2UgZmVlZGJhY2sgZm9yIFBhbnRoZXJMb3JkL0dyZWVuQXNpYSAiCisJICAgICAgICJkZXZpY2VzIGJ5IEFuc3NpIEhhbm51bGEgPGFuc3NpLmhhbm51bGFAZ21haWwuY29tPlxuIik7CisKKwlyZXR1cm4gMDsKK30KKyNlbHNlCitzdGF0aWMgaW5saW5lIGludCBwbGZmX2luaXQoc3RydWN0IGhpZF9kZXZpY2UgKmhpZCkKK3sKKwlyZXR1cm4gMDsKK30KKyNlbmRpZgorCitzdGF0aWMgaW50IHBsX3Byb2JlKHN0cnVjdCBoaWRfZGV2aWNlICpoZGV2LCBjb25zdCBzdHJ1Y3QgaGlkX2RldmljZV9pZCAqaWQpCit7CisJaW50IHJldDsKKworCWlmIChpZC0+ZHJpdmVyX2RhdGEpCisJCWhkZXYtPnF1aXJrcyB8PSBISURfUVVJUktfTVVMVElfSU5QVVQ7CisKKwlyZXQgPSBoaWRfcGFyc2UoaGRldik7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKCZoZGV2LT5kZXYsICJwYXJzZSBmYWlsZWRcbiIpOworCQlnb3RvIGVycjsKKwl9CisKKwlyZXQgPSBoaWRfaHdfc3RhcnQoaGRldiwgSElEX0NPTk5FQ1RfREVGQVVMVCAmIH5ISURfQ09OTkVDVF9GRik7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKCZoZGV2LT5kZXYsICJodyBzdGFydCBmYWlsZWRcbiIpOworCQlnb3RvIGVycjsKKwl9CisKKwlwbGZmX2luaXQoaGRldik7CisKKwlyZXR1cm4gMDsKK2VycjoKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGhpZF9kZXZpY2VfaWQgcGxfZGV2aWNlc1tdID0geworCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9HQU1FUk9OLCBVU0JfREVWSUNFX0lEX0dBTUVST05fRFVBTF9QU1hfQURBUFRPUiksCisJCS5kcml2ZXJfZGF0YSA9IDEgfSwgLyogVHdpbiBVU0IgSm95c3RpY2sgKi8KKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfR1JFRU5BU0lBLCAweDAwMDMpLCB9LCAvKiBHcmVlbkFzaWEgSW5jLiBVU0IgSm95c3RpY2sgKi8KKwl7IH0KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKGhpZCwgcGxfZGV2aWNlcyk7CisKK3N0YXRpYyBzdHJ1Y3QgaGlkX2RyaXZlciBwbF9kcml2ZXIgPSB7CisJLm5hbWUgPSAicGFudGhlcmxvcmQiLAorCS5pZF90YWJsZSA9IHBsX2RldmljZXMsCisJLnByb2JlID0gcGxfcHJvYmUsCit9OworCitzdGF0aWMgaW50IHBsX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gaGlkX3JlZ2lzdGVyX2RyaXZlcigmcGxfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgcGxfZXhpdCh2b2lkKQoreworCWhpZF91bnJlZ2lzdGVyX2RyaXZlcigmcGxfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQocGxfaW5pdCk7Cittb2R1bGVfZXhpdChwbF9leGl0KTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKworSElEX0NPTVBBVF9MT0FEX0RSSVZFUihwYW50aGVybG9yZCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2hpZC9oaWQtc2Ftc3VuZy5jIGIvZHJpdmVycy9oaWQvaGlkLXNhbXN1bmcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNWYzYzA0Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9oaWQvaGlkLXNhbXN1bmcuYwpAQCAtMCwwICsxLDEwMCBAQAorLyoKKyAqICBISUQgZHJpdmVyIGZvciBzb21lIHNhbXN1bmcgInNwZWNpYWwiIGRldmljZXMKKyAqCisgKiAgQ29weXJpZ2h0IChjKSAxOTk5IEFuZHJlYXMgR2FsCisgKiAgQ29weXJpZ2h0IChjKSAyMDAwLTIwMDUgVm9qdGVjaCBQYXZsaWsgPHZvanRlY2hAc3VzZS5jej4KKyAqICBDb3B5cmlnaHQgKGMpIDIwMDUgTWljaGFlbCBIYWJvdXN0YWsgPG1pa2UtQGNpbmNpLnJyLmNvbT4gZm9yIENvbmNlcHQyLCBJbmMKKyAqICBDb3B5cmlnaHQgKGMpIDIwMDYtMjAwNyBKaXJpIEtvc2luYQorICogIENvcHlyaWdodCAoYykgMjAwNyBQYXVsIFdhbG1zbGV5CisgKiAgQ29weXJpZ2h0IChjKSAyMDA4IEppcmkgU2xhYnkKKyAqLworCisvKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgKiBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pCisgKiBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvaGlkLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisKKyNpbmNsdWRlICJoaWQtaWRzLmgiCisKKy8qCisgKiBTYW1zdW5nIElyREEgcmVtb3RlIGNvbnRyb2xsZXIgKHJlcG9ydHMgYXMgQ3lwcmVzcyBVU0IgTW91c2UpLgorICoKKyAqIFZlbmRvciBzcGVjaWZpYyByZXBvcnQgIzQgaGFzIGEgc2l6ZSBvZiA0OCBiaXQsCisgKiBhbmQgdGhlcmVmb3JlIGlzIG5vdCBhY2NlcHRlZCB3aGVuIGluc3BlY3RpbmcgdGhlIGRlc2NyaXB0b3JzLgorICogQXMgYSB3b3JrYXJvdW5kIHdlIHJlaW50ZXJwcmV0IHRoZSByZXBvcnQgYXM6CisgKiAgIFZhcmlhYmxlIHR5cGUsIGNvdW50IDYsIHNpemUgOCBiaXQsIGxvZy4gbWF4aW11bSAyNTUKKyAqIFRoZSBidXJkZW4gdG8gcmVjb25zdHJ1Y3QgdGhlIGRhdGEgaXMgbW92ZWQgaW50byB1c2VyIHNwYWNlLgorICovCitzdGF0aWMgdm9pZCBzYW1zdW5nX3JlcG9ydF9maXh1cChzdHJ1Y3QgaGlkX2RldmljZSAqaGRldiwgX191OCAqcmRlc2MsCisJCXVuc2lnbmVkIGludCByc2l6ZSkKK3sKKwlpZiAocnNpemUgPj0gMTgyICYmIHJkZXNjWzE3NV0gPT0gMHgyNSAmJiByZGVzY1sxNzZdID09IDB4NDAgJiYKKwkJCXJkZXNjWzE3N10gPT0gMHg3NSAmJiByZGVzY1sxNzhdID09IDB4MzAgJiYKKwkJCXJkZXNjWzE3OV0gPT0gMHg5NSAmJiByZGVzY1sxODBdID09IDB4MDEgJiYKKwkJCXJkZXNjWzE4Ml0gPT0gMHg0MCkgeworCQlkZXZfaW5mbygmaGRldi0+ZGV2LCAiZml4aW5nIHVwIFNhbXN1bmcgSXJEQSByZXBvcnQgIgorCQkJCSJkZXNjcmlwdG9yXG4iKTsKKwkJcmRlc2NbMTc2XSA9IDB4ZmY7CisJCXJkZXNjWzE3OF0gPSAweDA4OworCQlyZGVzY1sxODBdID0gMHgwNjsKKwkJcmRlc2NbMTgyXSA9IDB4NDI7CisJfQorfQorCitzdGF0aWMgaW50IHNhbXN1bmdfcHJvYmUoc3RydWN0IGhpZF9kZXZpY2UgKmhkZXYsCisJCWNvbnN0IHN0cnVjdCBoaWRfZGV2aWNlX2lkICppZCkKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gaGlkX3BhcnNlKGhkZXYpOworCWlmIChyZXQpIHsKKwkJZGV2X2VycigmaGRldi0+ZGV2LCAicGFyc2UgZmFpbGVkXG4iKTsKKwkJZ290byBlcnJfZnJlZTsKKwl9CisKKwlyZXQgPSBoaWRfaHdfc3RhcnQoaGRldiwgKEhJRF9DT05ORUNUX0RFRkFVTFQgJiB+SElEX0NPTk5FQ1RfSElESU5QVVQpIHwKKwkJCUhJRF9DT05ORUNUX0hJRERFVl9GT1JDRSk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKCZoZGV2LT5kZXYsICJodyBzdGFydCBmYWlsZWRcbiIpOworCQlnb3RvIGVycl9mcmVlOworCX0KKworCXJldHVybiAwOworZXJyX2ZyZWU6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBoaWRfZGV2aWNlX2lkIHNhbXN1bmdfZGV2aWNlc1tdID0geworCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9TQU1TVU5HLCBVU0JfREVWSUNFX0lEX1NBTVNVTkdfSVJfUkVNT1RFKSB9LAorCXsgfQorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUoaGlkLCBzYW1zdW5nX2RldmljZXMpOworCitzdGF0aWMgc3RydWN0IGhpZF9kcml2ZXIgc2Ftc3VuZ19kcml2ZXIgPSB7CisJLm5hbWUgPSAic2Ftc3VuZyIsCisJLmlkX3RhYmxlID0gc2Ftc3VuZ19kZXZpY2VzLAorCS5yZXBvcnRfZml4dXAgPSBzYW1zdW5nX3JlcG9ydF9maXh1cCwKKwkucHJvYmUgPSBzYW1zdW5nX3Byb2JlLAorfTsKKworc3RhdGljIGludCBzYW1zdW5nX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gaGlkX3JlZ2lzdGVyX2RyaXZlcigmc2Ftc3VuZ19kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBzYW1zdW5nX2V4aXQodm9pZCkKK3sKKwloaWRfdW5yZWdpc3Rlcl9kcml2ZXIoJnNhbXN1bmdfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQoc2Ftc3VuZ19pbml0KTsKK21vZHVsZV9leGl0KHNhbXN1bmdfZXhpdCk7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKK0hJRF9DT01QQVRfTE9BRF9EUklWRVIoc2Ftc3VuZyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2hpZC9oaWQtc29ueS5jIGIvZHJpdmVycy9oaWQvaGlkLXNvbnkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYWY4MDk1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9oaWQvaGlkLXNvbnkuYwpAQCAtMCwwICsxLDExMCBAQAorLyoKKyAqICBISUQgZHJpdmVyIGZvciBzb21lIHNvbnkgInNwZWNpYWwiIGRldmljZXMKKyAqCisgKiAgQ29weXJpZ2h0IChjKSAxOTk5IEFuZHJlYXMgR2FsCisgKiAgQ29weXJpZ2h0IChjKSAyMDAwLTIwMDUgVm9qdGVjaCBQYXZsaWsgPHZvanRlY2hAc3VzZS5jej4KKyAqICBDb3B5cmlnaHQgKGMpIDIwMDUgTWljaGFlbCBIYWJvdXN0YWsgPG1pa2UtQGNpbmNpLnJyLmNvbT4gZm9yIENvbmNlcHQyLCBJbmMKKyAqICBDb3B5cmlnaHQgKGMpIDIwMDYtMjAwNyBKaXJpIEtvc2luYQorICogIENvcHlyaWdodCAoYykgMjAwNyBQYXVsIFdhbG1zbGV5CisgKiAgQ29weXJpZ2h0IChjKSAyMDA4IEppcmkgU2xhYnkKKyAqLworCisvKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgKiBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pCisgKiBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvaGlkLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvdXNiLmg+CisKKyNpbmNsdWRlICJoaWQtaWRzLmgiCisKKy8qCisgKiBTZW5kaW5nIEhJRF9SRVFfR0VUX1JFUE9SVCBjaGFuZ2VzIHRoZSBvcGVyYXRpb24gbW9kZSBvZiB0aGUgcHMzIGNvbnRyb2xsZXIKKyAqIHRvICJvcGVyYXRpb25hbCIuICBXaXRob3V0IHRoaXMsIHRoZSBwczMgY29udHJvbGxlciB3aWxsIG5vdCByZXBvcnQgYW55CisgKiBldmVudHMuCisgKi8KK3N0YXRpYyBpbnQgc29ueV9zZXRfb3BlcmF0aW9uYWwoc3RydWN0IGhpZF9kZXZpY2UgKmhkZXYpCit7CisJc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYgPSB0b191c2JfaW50ZXJmYWNlKGhkZXYtPmRldi5wYXJlbnQpOworCXN0cnVjdCB1c2JfZGV2aWNlICpkZXYgPSBpbnRlcmZhY2VfdG9fdXNiZGV2KGludGYpOworCV9fdTE2IGlmbnVtID0gaW50Zi0+Y3VyX2FsdHNldHRpbmctPmRlc2MuYkludGVyZmFjZU51bWJlcjsKKwlpbnQgcmV0OworCWNoYXIgKmJ1ZiA9IGttYWxsb2MoMTgsIEdGUF9LRVJORUwpOworCisJaWYgKCFidWYpCisJCXJldHVybiAtRU5PTUVNOworCisJcmV0ID0gdXNiX2NvbnRyb2xfbXNnKGRldiwgdXNiX3JjdmN0cmxwaXBlKGRldiwgMCksCisJCQkJIEhJRF9SRVFfR0VUX1JFUE9SVCwKKwkJCQkgVVNCX0RJUl9JTiB8IFVTQl9UWVBFX0NMQVNTIHwKKwkJCQkgVVNCX1JFQ0lQX0lOVEVSRkFDRSwKKwkJCQkgKDMgPDwgOCkgfCAweGYyLCBpZm51bSwgYnVmLCAxNywKKwkJCQkgVVNCX0NUUkxfR0VUX1RJTUVPVVQpOworCWlmIChyZXQgPCAwKQorCQlkZXZfZXJyKCZoZGV2LT5kZXYsICJjYW4ndCBzZXQgb3BlcmF0aW9uYWwgbW9kZVxuIik7CisKKwlrZnJlZShidWYpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBzb255X3Byb2JlKHN0cnVjdCBoaWRfZGV2aWNlICpoZGV2LCBjb25zdCBzdHJ1Y3QgaGlkX2RldmljZV9pZCAqaWQpCit7CisJaW50IHJldDsKKworCXJldCA9IGhpZF9wYXJzZShoZGV2KTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoJmhkZXYtPmRldiwgInBhcnNlIGZhaWxlZFxuIik7CisJCWdvdG8gZXJyX2ZyZWU7CisJfQorCisJcmV0ID0gaGlkX2h3X3N0YXJ0KGhkZXYsIEhJRF9DT05ORUNUX0RFRkFVTFQgfAorCQkJSElEX0NPTk5FQ1RfSElEREVWX0ZPUkNFKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoJmhkZXYtPmRldiwgImh3IHN0YXJ0IGZhaWxlZFxuIik7CisJCWdvdG8gZXJyX2ZyZWU7CisJfQorCisJcmV0ID0gc29ueV9zZXRfb3BlcmF0aW9uYWwoaGRldik7CisJaWYgKHJldCkKKwkJZ290byBlcnJfc3RvcDsKKworCXJldHVybiAwOworZXJyX3N0b3A6CisJaGlkX2h3X3N0b3AoaGRldik7CitlcnJfZnJlZToKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGhpZF9kZXZpY2VfaWQgc29ueV9kZXZpY2VzW10gPSB7CisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1NPTlksIFVTQl9ERVZJQ0VfSURfU09OWV9QUzNfQ09OVFJPTExFUikgfSwKKwl7IH0KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKGhpZCwgc29ueV9kZXZpY2VzKTsKKworc3RhdGljIHN0cnVjdCBoaWRfZHJpdmVyIHNvbnlfZHJpdmVyID0geworCS5uYW1lID0gInNvbnkiLAorCS5pZF90YWJsZSA9IHNvbnlfZGV2aWNlcywKKwkucHJvYmUgPSBzb255X3Byb2JlLAorfTsKKworc3RhdGljIGludCBzb255X2luaXQodm9pZCkKK3sKKwlyZXR1cm4gaGlkX3JlZ2lzdGVyX2RyaXZlcigmc29ueV9kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBzb255X2V4aXQodm9pZCkKK3sKKwloaWRfdW5yZWdpc3Rlcl9kcml2ZXIoJnNvbnlfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQoc29ueV9pbml0KTsKK21vZHVsZV9leGl0KHNvbnlfZXhpdCk7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKK0hJRF9DT01QQVRfTE9BRF9EUklWRVIoc29ueSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2hpZC9oaWQtc3VucGx1cy5jIGIvZHJpdmVycy9oaWQvaGlkLXN1bnBsdXMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YmE2OGY3Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9oaWQvaGlkLXN1bnBsdXMuYwpAQCAtMCwwICsxLDgyIEBACisvKgorICogIEhJRCBkcml2ZXIgZm9yIHNvbWUgc3VucGx1cyAic3BlY2lhbCIgZGV2aWNlcworICoKKyAqICBDb3B5cmlnaHQgKGMpIDE5OTkgQW5kcmVhcyBHYWwKKyAqICBDb3B5cmlnaHQgKGMpIDIwMDAtMjAwNSBWb2p0ZWNoIFBhdmxpayA8dm9qdGVjaEBzdXNlLmN6PgorICogIENvcHlyaWdodCAoYykgMjAwNSBNaWNoYWVsIEhhYm91c3RhayA8bWlrZS1AY2luY2kucnIuY29tPiBmb3IgQ29uY2VwdDIsIEluYworICogIENvcHlyaWdodCAoYykgMjAwNi0yMDA3IEppcmkgS29zaW5hCisgKiAgQ29weXJpZ2h0IChjKSAyMDA3IFBhdWwgV2FsbXNsZXkKKyAqICBDb3B5cmlnaHQgKGMpIDIwMDggSmlyaSBTbGFieQorICovCisKKy8qCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAqIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAqIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9oaWQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKworI2luY2x1ZGUgImhpZC1pZHMuaCIKKworc3RhdGljIHZvaWQgc3BfcmVwb3J0X2ZpeHVwKHN0cnVjdCBoaWRfZGV2aWNlICpoZGV2LCBfX3U4ICpyZGVzYywKKwkJdW5zaWduZWQgaW50IHJzaXplKQoreworCWlmIChyc2l6ZSA+PSAxMDcgJiYgcmRlc2NbMTA0XSA9PSAweDI2ICYmIHJkZXNjWzEwNV0gPT0gMHg4MCAmJgorCQkJcmRlc2NbMTA2XSA9PSAweDAzKSB7CisJCWRldl9pbmZvKCZoZGV2LT5kZXYsICJmaXhpbmcgdXAgU3VucGx1cyBXaXJlbGVzcyBEZXNrdG9wICIKKwkJCQkicmVwb3J0IGRlc2NyaXB0b3JcbiIpOworCQlyZGVzY1sxMDVdID0gcmRlc2NbMTEwXSA9IDB4MDM7CisJCXJkZXNjWzEwNl0gPSByZGVzY1sxMTFdID0gMHgyMTsKKwl9Cit9CisKKyNkZWZpbmUgc3BfbWFwX2tleV9jbGVhcihjKQloaWRfbWFwX3VzYWdlX2NsZWFyKGhpLCB1c2FnZSwgYml0LCBtYXgsIFwKKwkJRVZfS0VZLCAoYykpCitzdGF0aWMgaW50IHNwX2lucHV0X21hcHBpbmcoc3RydWN0IGhpZF9kZXZpY2UgKmhkZXYsIHN0cnVjdCBoaWRfaW5wdXQgKmhpLAorCQlzdHJ1Y3QgaGlkX2ZpZWxkICpmaWVsZCwgc3RydWN0IGhpZF91c2FnZSAqdXNhZ2UsCisJCXVuc2lnbmVkIGxvbmcgKipiaXQsIGludCAqbWF4KQoreworCWlmICgodXNhZ2UtPmhpZCAmIEhJRF9VU0FHRV9QQUdFKSAhPSBISURfVVBfQ09OU1VNRVIpCisJCXJldHVybiAwOworCisJc3dpdGNoICh1c2FnZS0+aGlkICYgSElEX1VTQUdFKSB7CisJY2FzZSAweDIwMDM6IHNwX21hcF9rZXlfY2xlYXIoS0VZX1pPT01JTik7CQlicmVhazsKKwljYXNlIDB4MjEwMzogc3BfbWFwX2tleV9jbGVhcihLRVlfWk9PTU9VVCk7CWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAwOworCX0KKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBoaWRfZGV2aWNlX2lkIHNwX2RldmljZXNbXSA9IHsKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfU1VOUExVUywgVVNCX0RFVklDRV9JRF9TVU5QTFVTX1dERVNLVE9QKSB9LAorCXsgfQorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUoaGlkLCBzcF9kZXZpY2VzKTsKKworc3RhdGljIHN0cnVjdCBoaWRfZHJpdmVyIHNwX2RyaXZlciA9IHsKKwkubmFtZSA9ICJzdW5wbHVzIiwKKwkuaWRfdGFibGUgPSBzcF9kZXZpY2VzLAorCS5yZXBvcnRfZml4dXAgPSBzcF9yZXBvcnRfZml4dXAsCisJLmlucHV0X21hcHBpbmcgPSBzcF9pbnB1dF9tYXBwaW5nLAorfTsKKworc3RhdGljIGludCBzcF9pbml0KHZvaWQpCit7CisJcmV0dXJuIGhpZF9yZWdpc3Rlcl9kcml2ZXIoJnNwX2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIHNwX2V4aXQodm9pZCkKK3sKKwloaWRfdW5yZWdpc3Rlcl9kcml2ZXIoJnNwX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KHNwX2luaXQpOworbW9kdWxlX2V4aXQoc3BfZXhpdCk7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKK0hJRF9DT01QQVRfTE9BRF9EUklWRVIoc3VucGx1cyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2hpZC9oaWQtdG1mZi5jIGIvZHJpdmVycy9oaWQvaGlkLXRtZmYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYjdjYmEwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9oaWQvaGlkLXRtZmYuYwpAQCAtMCwwICsxLDI2OSBAQAorLyoKKyAqIEZvcmNlIGZlZWRiYWNrIHN1cHBvcnQgZm9yIHZhcmlvdXMgSElEIGNvbXBsaWFudCBkZXZpY2VzIGJ5IFRocnVzdE1hc3RlcjoKKyAqICAgIFRocnVzdE1hc3RlciBGaXJlU3Rvcm0gRHVhbCBQb3dlciAyCisgKiBhbmQgcG9zc2libHkgb3RoZXJzIHdob3NlIGRldmljZSBpZHMgaGF2ZW4ndCBiZWVuIGFkZGVkLgorICoKKyAqICBNb2RpZmllZCB0byBzdXBwb3J0IFRocnVzdE1hc3RlciBkZXZpY2VzIGJ5IFppbnggVmVyaXR1c2UKKyAqICBvbiAyMDAzLTAxLTI1IGZyb20gdGhlIExvZ2l0ZWNoIGZvcmNlIGZlZWRiYWNrIGRyaXZlciwKKyAqICB3aGljaCBpcyBieSBKb2hhbm4gRGVuZXV4LgorICoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMDMgWmlueCBWZXJpdHVzZSA8emlueEBlcGljc29sLm9yZz4KKyAqICBDb3B5cmlnaHQgKGMpIDIwMDIgSm9oYW5uIERlbmV1eAorICovCisKKy8qCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQorICovCisKKyNpbmNsdWRlIDxsaW51eC9oaWQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgorCisjaW5jbHVkZSAiaGlkLWlkcy5oIgorCisjaW5jbHVkZSAidXNiaGlkL3VzYmhpZC5oIgorCisvKiBVc2FnZXMgZm9yIHRocnVzdG1hc3RlciBkZXZpY2VzIEkga25vdyBhYm91dCAqLworI2RlZmluZSBUSFJVU1RNQVNURVJfVVNBR0VfRkYJKEhJRF9VUF9HRU5ERVNLIHwgMHhiYikKKworc3RhdGljIGNvbnN0IHNpZ25lZCBzaG9ydCBmZl9ydW1ibGVbXSA9IHsKKwlGRl9SVU1CTEUsCisJLTEKK307CisKK3N0YXRpYyBjb25zdCBzaWduZWQgc2hvcnQgZmZfam95c3RpY2tbXSA9IHsKKwlGRl9DT05TVEFOVCwKKwktMQorfTsKKworc3RydWN0IHRtZmZfZGV2aWNlIHsKKwlzdHJ1Y3QgaGlkX3JlcG9ydCAqcmVwb3J0OworCXN0cnVjdCBoaWRfZmllbGQgKmZmX2ZpZWxkOworfTsKKworLyogQ2hhbmdlcyB2YWx1ZXMgZnJvbSAwIHRvIDB4ZmZmZiBpbnRvIHZhbHVlcyBmcm9tIG1pbmltdW0gdG8gbWF4aW11bSAqLworc3RhdGljIGlubGluZSBpbnQgdG1mZl9zY2FsZV91MTYodW5zaWduZWQgaW50IGluLCBpbnQgbWluaW11bSwgaW50IG1heGltdW0pCit7CisJaW50IHJldDsKKworCXJldCA9IChpbiAqIChtYXhpbXVtIC0gbWluaW11bSkgLyAweGZmZmYpICsgbWluaW11bTsKKwlpZiAocmV0IDwgbWluaW11bSkKKwkJcmV0dXJuIG1pbmltdW07CisJaWYgKHJldCA+IG1heGltdW0pCisJCXJldHVybiBtYXhpbXVtOworCXJldHVybiByZXQ7Cit9CisKKy8qIENoYW5nZXMgdmFsdWVzIGZyb20gLTB4ODAgdG8gMHg3ZiBpbnRvIHZhbHVlcyBmcm9tIG1pbmltdW0gdG8gbWF4aW11bSAqLworc3RhdGljIGlubGluZSBpbnQgdG1mZl9zY2FsZV9zOChpbnQgaW4sIGludCBtaW5pbXVtLCBpbnQgbWF4aW11bSkKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gKCgoaW4gKyAweDgwKSAqIChtYXhpbXVtIC0gbWluaW11bSkpIC8gMHhmZikgKyBtaW5pbXVtOworCWlmIChyZXQgPCBtaW5pbXVtKQorCQlyZXR1cm4gbWluaW11bTsKKwlpZiAocmV0ID4gbWF4aW11bSkKKwkJcmV0dXJuIG1heGltdW07CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCB0bWZmX3BsYXkoc3RydWN0IGlucHV0X2RldiAqZGV2LCB2b2lkICpkYXRhLAorCQlzdHJ1Y3QgZmZfZWZmZWN0ICplZmZlY3QpCit7CisJc3RydWN0IGhpZF9kZXZpY2UgKmhpZCA9IGlucHV0X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IHRtZmZfZGV2aWNlICp0bWZmID0gZGF0YTsKKwlzdHJ1Y3QgaGlkX2ZpZWxkICpmZl9maWVsZCA9IHRtZmYtPmZmX2ZpZWxkOworCWludCB4LCB5OworCWludCBsZWZ0LCByaWdodDsJLyogUnVtYmxpbmcgKi8KKworCXN3aXRjaCAoZWZmZWN0LT50eXBlKSB7CisJY2FzZSBGRl9DT05TVEFOVDoKKwkJeCA9IHRtZmZfc2NhbGVfczgoZWZmZWN0LT51LnJhbXAuc3RhcnRfbGV2ZWwsCisJCQkJCWZmX2ZpZWxkLT5sb2dpY2FsX21pbmltdW0sCisJCQkJCWZmX2ZpZWxkLT5sb2dpY2FsX21heGltdW0pOworCQl5ID0gdG1mZl9zY2FsZV9zOChlZmZlY3QtPnUucmFtcC5lbmRfbGV2ZWwsCisJCQkJCWZmX2ZpZWxkLT5sb2dpY2FsX21pbmltdW0sCisJCQkJCWZmX2ZpZWxkLT5sb2dpY2FsX21heGltdW0pOworCisJCWRiZ19oaWQoIih4LCB5KT0oJTA0eCwgJTA0eClcbiIsIHgsIHkpOworCQlmZl9maWVsZC0+dmFsdWVbMF0gPSB4OworCQlmZl9maWVsZC0+dmFsdWVbMV0gPSB5OworCQl1c2JoaWRfc3VibWl0X3JlcG9ydChoaWQsIHRtZmYtPnJlcG9ydCwgVVNCX0RJUl9PVVQpOworCQlicmVhazsKKworCWNhc2UgRkZfUlVNQkxFOgorCQlsZWZ0ID0gdG1mZl9zY2FsZV91MTYoZWZmZWN0LT51LnJ1bWJsZS53ZWFrX21hZ25pdHVkZSwKKwkJCQkJZmZfZmllbGQtPmxvZ2ljYWxfbWluaW11bSwKKwkJCQkJZmZfZmllbGQtPmxvZ2ljYWxfbWF4aW11bSk7CisJCXJpZ2h0ID0gdG1mZl9zY2FsZV91MTYoZWZmZWN0LT51LnJ1bWJsZS5zdHJvbmdfbWFnbml0dWRlLAorCQkJCQlmZl9maWVsZC0+bG9naWNhbF9taW5pbXVtLAorCQkJCQlmZl9maWVsZC0+bG9naWNhbF9tYXhpbXVtKTsKKworCQlkYmdfaGlkKCIobGVmdCxyaWdodCk9KCUwOHgsICUwOHgpXG4iLCBsZWZ0LCByaWdodCk7CisJCWZmX2ZpZWxkLT52YWx1ZVswXSA9IGxlZnQ7CisJCWZmX2ZpZWxkLT52YWx1ZVsxXSA9IHJpZ2h0OworCQl1c2JoaWRfc3VibWl0X3JlcG9ydChoaWQsIHRtZmYtPnJlcG9ydCwgVVNCX0RJUl9PVVQpOworCQlicmVhazsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdG1mZl9pbml0KHN0cnVjdCBoaWRfZGV2aWNlICpoaWQsIGNvbnN0IHNpZ25lZCBzaG9ydCAqZmZfYml0cykKK3sKKwlzdHJ1Y3QgdG1mZl9kZXZpY2UgKnRtZmY7CisJc3RydWN0IGhpZF9yZXBvcnQgKnJlcG9ydDsKKwlzdHJ1Y3QgbGlzdF9oZWFkICpyZXBvcnRfbGlzdDsKKwlzdHJ1Y3QgaGlkX2lucHV0ICpoaWRpbnB1dCA9IGxpc3RfZW50cnkoaGlkLT5pbnB1dHMubmV4dCwKKwkJCQkJCQlzdHJ1Y3QgaGlkX2lucHV0LCBsaXN0KTsKKwlzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dF9kZXYgPSBoaWRpbnB1dC0+aW5wdXQ7CisJaW50IGVycm9yOworCWludCBpOworCisJdG1mZiA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB0bWZmX2RldmljZSksIEdGUF9LRVJORUwpOworCWlmICghdG1mZikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwkvKiBGaW5kIHRoZSByZXBvcnQgdG8gdXNlICovCisJcmVwb3J0X2xpc3QgPSAmaGlkLT5yZXBvcnRfZW51bVtISURfT1VUUFVUX1JFUE9SVF0ucmVwb3J0X2xpc3Q7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShyZXBvcnQsIHJlcG9ydF9saXN0LCBsaXN0KSB7CisJCWludCBmaWVsZG51bTsKKworCQlmb3IgKGZpZWxkbnVtID0gMDsgZmllbGRudW0gPCByZXBvcnQtPm1heGZpZWxkOyArK2ZpZWxkbnVtKSB7CisJCQlzdHJ1Y3QgaGlkX2ZpZWxkICpmaWVsZCA9IHJlcG9ydC0+ZmllbGRbZmllbGRudW1dOworCisJCQlpZiAoZmllbGQtPm1heHVzYWdlIDw9IDApCisJCQkJY29udGludWU7CisKKwkJCXN3aXRjaCAoZmllbGQtPnVzYWdlWzBdLmhpZCkgeworCQkJY2FzZSBUSFJVU1RNQVNURVJfVVNBR0VfRkY6CisJCQkJaWYgKGZpZWxkLT5yZXBvcnRfY291bnQgPCAyKSB7CisJCQkJCWRldl93YXJuKCZoaWQtPmRldiwgImlnbm9yaW5nIEZGIGZpZWxkICIKKwkJCQkJCSJ3aXRoIHJlcG9ydF9jb3VudCA8IDJcbiIpOworCQkJCQljb250aW51ZTsKKwkJCQl9CisKKwkJCQlpZiAoZmllbGQtPmxvZ2ljYWxfbWF4aW11bSA9PQorCQkJCQkJZmllbGQtPmxvZ2ljYWxfbWluaW11bSkgeworCQkJCQlkZXZfd2FybigmaGlkLT5kZXYsICJpZ25vcmluZyBGRiBmaWVsZCAiCisJCQkJCQkJIndpdGggbG9naWNhbF9tYXhpbXVtICIKKwkJCQkJCQkiPT0gbG9naWNhbF9taW5pbXVtXG4iKTsKKwkJCQkJY29udGludWU7CisJCQkJfQorCisJCQkJaWYgKHRtZmYtPnJlcG9ydCAmJiB0bWZmLT5yZXBvcnQgIT0gcmVwb3J0KSB7CisJCQkJCWRldl93YXJuKCZoaWQtPmRldiwgImlnbm9yaW5nIEZGIGZpZWxkICIKKwkJCQkJCQkiaW4gb3RoZXIgcmVwb3J0XG4iKTsKKwkJCQkJY29udGludWU7CisJCQkJfQorCisJCQkJaWYgKHRtZmYtPmZmX2ZpZWxkICYmIHRtZmYtPmZmX2ZpZWxkICE9IGZpZWxkKSB7CisJCQkJCWRldl93YXJuKCZoaWQtPmRldiwgImlnbm9yaW5nICIKKwkJCQkJCQkiZHVwbGljYXRlIEZGIGZpZWxkXG4iKTsKKwkJCQkJY29udGludWU7CisJCQkJfQorCisJCQkJdG1mZi0+cmVwb3J0ID0gcmVwb3J0OworCQkJCXRtZmYtPmZmX2ZpZWxkID0gZmllbGQ7CisKKwkJCQlmb3IgKGkgPSAwOyBmZl9iaXRzW2ldID49IDA7IGkrKykKKwkJCQkJc2V0X2JpdChmZl9iaXRzW2ldLCBpbnB1dF9kZXYtPmZmYml0KTsKKworCQkJCWJyZWFrOworCisJCQlkZWZhdWx0OgorCQkJCWRldl93YXJuKCZoaWQtPmRldiwgImlnbm9yaW5nIHVua25vd24gb3V0cHV0ICIKKwkJCQkJCSJ1c2FnZSAlMDh4XG4iLAorCQkJCQkJZmllbGQtPnVzYWdlWzBdLmhpZCk7CisJCQkJY29udGludWU7CisJCQl9CisJCX0KKwl9CisKKwlpZiAoIXRtZmYtPnJlcG9ydCkgeworCQlkZXZfZXJyKCZoaWQtPmRldiwgImNhbid0IGZpbmQgRkYgZmllbGQgaW4gb3V0cHV0IHJlcG9ydHNcbiIpOworCQllcnJvciA9IC1FTk9ERVY7CisJCWdvdG8gZmFpbDsKKwl9CisKKwllcnJvciA9IGlucHV0X2ZmX2NyZWF0ZV9tZW1sZXNzKGlucHV0X2RldiwgdG1mZiwgdG1mZl9wbGF5KTsKKwlpZiAoZXJyb3IpCisJCWdvdG8gZmFpbDsKKworCWRldl9pbmZvKCZoaWQtPmRldiwgImZvcmNlIGZlZWRiYWNrIGZvciBUaHJ1c3RNYXN0ZXIgZGV2aWNlcyBieSBaaW54ICIKKwkJCSJWZXJpdHVzZSA8emlueEBlcGljc29sLm9yZz4iKTsKKwlyZXR1cm4gMDsKKworZmFpbDoKKwlrZnJlZSh0bWZmKTsKKwlyZXR1cm4gZXJyb3I7Cit9CisKK3N0YXRpYyBpbnQgdG1fcHJvYmUoc3RydWN0IGhpZF9kZXZpY2UgKmhkZXYsIGNvbnN0IHN0cnVjdCBoaWRfZGV2aWNlX2lkICppZCkKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gaGlkX3BhcnNlKGhkZXYpOworCWlmIChyZXQpIHsKKwkJZGV2X2VycigmaGRldi0+ZGV2LCAicGFyc2UgZmFpbGVkXG4iKTsKKwkJZ290byBlcnI7CisJfQorCisJcmV0ID0gaGlkX2h3X3N0YXJ0KGhkZXYsIEhJRF9DT05ORUNUX0RFRkFVTFQgJiB+SElEX0NPTk5FQ1RfRkYpOworCWlmIChyZXQpIHsKKwkJZGV2X2VycigmaGRldi0+ZGV2LCAiaHcgc3RhcnQgZmFpbGVkXG4iKTsKKwkJZ290byBlcnI7CisJfQorCisJdG1mZl9pbml0KGhkZXYsICh2b2lkICopaWQtPmRyaXZlcl9kYXRhKTsKKworCXJldHVybiAwOworZXJyOgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGlkX2RldmljZV9pZCB0bV9kZXZpY2VzW10gPSB7CisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1RIUlVTVE1BU1RFUiwgMHhiMzAwKSwKKwkJLmRyaXZlcl9kYXRhID0gKHVuc2lnbmVkIGxvbmcpZmZfcnVtYmxlIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1RIUlVTVE1BU1RFUiwgMHhiMzA0KSwKKwkJLmRyaXZlcl9kYXRhID0gKHVuc2lnbmVkIGxvbmcpZmZfcnVtYmxlIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1RIUlVTVE1BU1RFUiwgMHhiNjUxKSwJLyogRkdUIFJ1bWJsZSBGb3JjZSBXaGVlbCAqLworCQkuZHJpdmVyX2RhdGEgPSAodW5zaWduZWQgbG9uZylmZl9ydW1ibGUgfSwKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfVEhSVVNUTUFTVEVSLCAweGI2NTQpLAkvKiBGR1QgRm9yY2UgRmVlZGJhY2sgV2hlZWwgKi8KKwkJLmRyaXZlcl9kYXRhID0gKHVuc2lnbmVkIGxvbmcpZmZfam95c3RpY2sgfSwKKwl7IH0KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKGhpZCwgdG1fZGV2aWNlcyk7CisKK3N0YXRpYyBzdHJ1Y3QgaGlkX2RyaXZlciB0bV9kcml2ZXIgPSB7CisJLm5hbWUgPSAidGhydXN0bWFzdGVyIiwKKwkuaWRfdGFibGUgPSB0bV9kZXZpY2VzLAorCS5wcm9iZSA9IHRtX3Byb2JlLAorfTsKKworc3RhdGljIGludCB0bV9pbml0KHZvaWQpCit7CisJcmV0dXJuIGhpZF9yZWdpc3Rlcl9kcml2ZXIoJnRtX2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIHRtX2V4aXQodm9pZCkKK3sKKwloaWRfdW5yZWdpc3Rlcl9kcml2ZXIoJnRtX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KHRtX2luaXQpOworbW9kdWxlX2V4aXQodG1fZXhpdCk7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKK0hJRF9DT01QQVRfTE9BRF9EUklWRVIodGhydXN0bWFzdGVyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaGlkL2hpZC16cGZmLmMgYi9kcml2ZXJzL2hpZC9oaWQtenBmZi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhODJmMzcKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2hpZC9oaWQtenBmZi5jCkBAIC0wLDAgKzEsMTYyIEBACisvKgorICogIEZvcmNlIGZlZWRiYWNrIHN1cHBvcnQgZm9yIFplcm9wbHVzIGJhc2VkIGRldmljZXMKKyAqCisgKiAgQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA2IEFuc3NpIEhhbm51bGEgPGFuc3NpLmhhbm51bGFAZ21haWwuY29tPgorICovCisKKy8qCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQorICovCisKKworI2luY2x1ZGUgPGxpbnV4L2hpZC5oPgorI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CisjaW5jbHVkZSA8bGludXgvdXNiLmg+CisKKyNpbmNsdWRlICJoaWQtaWRzLmgiCisKKyNpbmNsdWRlICJ1c2JoaWQvdXNiaGlkLmgiCisKK3N0cnVjdCB6cGZmX2RldmljZSB7CisJc3RydWN0IGhpZF9yZXBvcnQgKnJlcG9ydDsKK307CisKK3N0YXRpYyBpbnQgenBmZl9wbGF5KHN0cnVjdCBpbnB1dF9kZXYgKmRldiwgdm9pZCAqZGF0YSwKKwkJCSBzdHJ1Y3QgZmZfZWZmZWN0ICplZmZlY3QpCit7CisJc3RydWN0IGhpZF9kZXZpY2UgKmhpZCA9IGlucHV0X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IHpwZmZfZGV2aWNlICp6cGZmID0gZGF0YTsKKwlpbnQgbGVmdCwgcmlnaHQ7CisKKwkvKgorCSAqIFRoZSBmb2xsb3dpbmcgaXMgc3BlY2lmaWVkIHRoZSBvdGhlciB3YXkgYXJvdW5kIGluIHRoZSBaZXJvcGx1cworCSAqIGRhdGFzaGVldCBidXQgdGhlIG9yZGVyIGJlbG93IGlzIGNvcnJlY3QgZm9yIHRoZSBYRlggRXhlY3V0aW9uZXI7CisJICogaG93ZXZlciBpdCBpcyBwb3NzaWJsZSB0aGF0IHRoZSBYRlggRXhlY3V0aW9uZXIgaXMgYW4gZXhjZXB0aW9uCisJICovCisKKwlsZWZ0ID0gZWZmZWN0LT51LnJ1bWJsZS5zdHJvbmdfbWFnbml0dWRlOworCXJpZ2h0ID0gZWZmZWN0LT51LnJ1bWJsZS53ZWFrX21hZ25pdHVkZTsKKwlkYmdfaGlkKCJjYWxsZWQgd2l0aCAweCUwNHggMHglMDR4XG4iLCBsZWZ0LCByaWdodCk7CisKKwlsZWZ0ID0gbGVmdCAqIDB4N2YgLyAweGZmZmY7CisJcmlnaHQgPSByaWdodCAqIDB4N2YgLyAweGZmZmY7CisKKwl6cGZmLT5yZXBvcnQtPmZpZWxkWzJdLT52YWx1ZVswXSA9IGxlZnQ7CisJenBmZi0+cmVwb3J0LT5maWVsZFszXS0+dmFsdWVbMF0gPSByaWdodDsKKwlkYmdfaGlkKCJydW5uaW5nIHdpdGggMHglMDJ4IDB4JTAyeFxuIiwgbGVmdCwgcmlnaHQpOworCXVzYmhpZF9zdWJtaXRfcmVwb3J0KGhpZCwgenBmZi0+cmVwb3J0LCBVU0JfRElSX09VVCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB6cGZmX2luaXQoc3RydWN0IGhpZF9kZXZpY2UgKmhpZCkKK3sKKwlzdHJ1Y3QgenBmZl9kZXZpY2UgKnpwZmY7CisJc3RydWN0IGhpZF9yZXBvcnQgKnJlcG9ydDsKKwlzdHJ1Y3QgaGlkX2lucHV0ICpoaWRpbnB1dCA9IGxpc3RfZW50cnkoaGlkLT5pbnB1dHMubmV4dCwKKwkJCQkJCXN0cnVjdCBoaWRfaW5wdXQsIGxpc3QpOworCXN0cnVjdCBsaXN0X2hlYWQgKnJlcG9ydF9saXN0ID0KKwkJCSZoaWQtPnJlcG9ydF9lbnVtW0hJRF9PVVRQVVRfUkVQT1JUXS5yZXBvcnRfbGlzdDsKKwlzdHJ1Y3QgaW5wdXRfZGV2ICpkZXYgPSBoaWRpbnB1dC0+aW5wdXQ7CisJaW50IGVycm9yOworCisJaWYgKGxpc3RfZW1wdHkocmVwb3J0X2xpc3QpKSB7CisJCWRldl9lcnIoJmhpZC0+ZGV2LCAibm8gb3V0cHV0IHJlcG9ydCBmb3VuZFxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCXJlcG9ydCA9IGxpc3RfZW50cnkocmVwb3J0X2xpc3QtPm5leHQsIHN0cnVjdCBoaWRfcmVwb3J0LCBsaXN0KTsKKworCWlmIChyZXBvcnQtPm1heGZpZWxkIDwgNCkgeworCQlkZXZfZXJyKCZoaWQtPmRldiwgIm5vdCBlbm91Z2ggZmllbGRzIGluIHJlcG9ydFxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCXpwZmYgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgenBmZl9kZXZpY2UpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXpwZmYpCisJCXJldHVybiAtRU5PTUVNOworCisJc2V0X2JpdChGRl9SVU1CTEUsIGRldi0+ZmZiaXQpOworCisJZXJyb3IgPSBpbnB1dF9mZl9jcmVhdGVfbWVtbGVzcyhkZXYsIHpwZmYsIHpwZmZfcGxheSk7CisJaWYgKGVycm9yKSB7CisJCWtmcmVlKHpwZmYpOworCQlyZXR1cm4gZXJyb3I7CisJfQorCisJenBmZi0+cmVwb3J0ID0gcmVwb3J0OworCXpwZmYtPnJlcG9ydC0+ZmllbGRbMF0tPnZhbHVlWzBdID0gMHgwMDsKKwl6cGZmLT5yZXBvcnQtPmZpZWxkWzFdLT52YWx1ZVswXSA9IDB4MDI7CisJenBmZi0+cmVwb3J0LT5maWVsZFsyXS0+dmFsdWVbMF0gPSAweDAwOworCXpwZmYtPnJlcG9ydC0+ZmllbGRbM10tPnZhbHVlWzBdID0gMHgwMDsKKwl1c2JoaWRfc3VibWl0X3JlcG9ydChoaWQsIHpwZmYtPnJlcG9ydCwgVVNCX0RJUl9PVVQpOworCisJZGV2X2luZm8oJmhpZC0+ZGV2LCAiZm9yY2UgZmVlZGJhY2sgZm9yIFplcm9wbHVzIGJhc2VkIGRldmljZXMgYnkgIgorCSAgICAgICAiQW5zc2kgSGFubnVsYSA8YW5zc2kuaGFubnVsYUBnbWFpbC5jb20+XG4iKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHpwX3Byb2JlKHN0cnVjdCBoaWRfZGV2aWNlICpoZGV2LCBjb25zdCBzdHJ1Y3QgaGlkX2RldmljZV9pZCAqaWQpCit7CisJaW50IHJldDsKKworCXJldCA9IGhpZF9wYXJzZShoZGV2KTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoJmhkZXYtPmRldiwgInBhcnNlIGZhaWxlZFxuIik7CisJCWdvdG8gZXJyOworCX0KKworCXJldCA9IGhpZF9od19zdGFydChoZGV2LCBISURfQ09OTkVDVF9ERUZBVUxUICYgfkhJRF9DT05ORUNUX0ZGKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoJmhkZXYtPmRldiwgImh3IHN0YXJ0IGZhaWxlZFxuIik7CisJCWdvdG8gZXJyOworCX0KKworCXpwZmZfaW5pdChoZGV2KTsKKworCXJldHVybiAwOworZXJyOgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGlkX2RldmljZV9pZCB6cF9kZXZpY2VzW10gPSB7CisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1pFUk9QTFVTLCAweDAwMDUpIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1pFUk9QTFVTLCAweDAwMzApIH0sCisJeyB9Cit9OworTU9EVUxFX0RFVklDRV9UQUJMRShoaWQsIHpwX2RldmljZXMpOworCitzdGF0aWMgc3RydWN0IGhpZF9kcml2ZXIgenBfZHJpdmVyID0geworCS5uYW1lID0gInplcm9wbHVzIiwKKwkuaWRfdGFibGUgPSB6cF9kZXZpY2VzLAorCS5wcm9iZSA9IHpwX3Byb2JlLAorfTsKKworc3RhdGljIGludCB6cF9pbml0KHZvaWQpCit7CisJcmV0dXJuIGhpZF9yZWdpc3Rlcl9kcml2ZXIoJnpwX2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIHpwX2V4aXQodm9pZCkKK3sKKwloaWRfdW5yZWdpc3Rlcl9kcml2ZXIoJnpwX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KHpwX2luaXQpOworbW9kdWxlX2V4aXQoenBfZXhpdCk7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKK0hJRF9DT01QQVRfTE9BRF9EUklWRVIoemVyb3BsdXMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9oaWQvaGlkcmF3LmMgYi9kcml2ZXJzL2hpZC9oaWRyYXcuYwppbmRleCBjNDBmMDQwLi5hZjNlZGI5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2hpZC9oaWRyYXcuYworKysgYi9kcml2ZXJzL2hpZC9oaWRyYXcuYwpAQCAtMTEzLDcgKzExMyw3IEBACiAJaWYgKCFkZXYtPmhpZF9vdXRwdXRfcmF3X3JlcG9ydCkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKLQlpZiAoY291bnQgPiBISURfTUlOX0JVRkZFUl9TSVpFKSB7CisJaWYgKGNvdW50ID4gSElEX01BWF9CVUZGRVJfU0laRSkgewogCQlwcmludGsoS0VSTl9XQVJOSU5HICJoaWRyYXc6IHBpZCAlZCBwYXNzZWQgdG9vIGxhcmdlIHJlcG9ydFxuIiwKIAkJCQl0YXNrX3BpZF9ucihjdXJyZW50KSk7CiAJCXJldHVybiAtRUlOVkFMOwpAQCAtMTgxLDcgKzE4MSw3IEBACiAKIAlkZXYgPSBoaWRyYXdfdGFibGVbbWlub3JdOwogCWlmICghZGV2LT5vcGVuKyspCi0JCWRldi0+aGlkLT5oaWRfb3BlbihkZXYtPmhpZCk7CisJCWRldi0+aGlkLT5sbF9kcml2ZXItPm9wZW4oZGV2LT5oaWQpOwogCiBvdXRfdW5sb2NrOgogCXNwaW5fdW5sb2NrKCZtaW5vcnNfbG9jayk7CkBAIC0yMDcsNyArMjA3LDcgQEAKIAlkZXYgPSBoaWRyYXdfdGFibGVbbWlub3JdOwogCWlmICghZGV2LT5vcGVuLS0pIHsKIAkJaWYgKGxpc3QtPmhpZHJhdy0+ZXhpc3QpCi0JCQlkZXYtPmhpZC0+aGlkX2Nsb3NlKGRldi0+aGlkKTsKKwkJCWRldi0+aGlkLT5sbF9kcml2ZXItPmNsb3NlKGRldi0+aGlkKTsKIAkJZWxzZQogCQkJa2ZyZWUobGlzdC0+aGlkcmF3KTsKIAl9CkBAIC0zMjYsOSArMzI2LDggQEAKIAkJZ290byBvdXQ7CiAJfQogCi0JZGV2LT5kZXYgPSBkZXZpY2VfY3JlYXRlX2RydmRhdGEoaGlkcmF3X2NsYXNzLCBOVUxMLAotCQkJCQkgTUtERVYoaGlkcmF3X21ham9yLCBtaW5vciksIE5VTEwsCi0JCQkJCSAiJXMlZCIsICJoaWRyYXciLCBtaW5vcik7CisJZGV2LT5kZXYgPSBkZXZpY2VfY3JlYXRlKGhpZHJhd19jbGFzcywgTlVMTCwgTUtERVYoaGlkcmF3X21ham9yLCBtaW5vciksCisJCQkJIE5VTEwsICIlcyVkIiwgImhpZHJhdyIsIG1pbm9yKTsKIAogCWlmIChJU19FUlIoZGV2LT5kZXYpKSB7CiAJCXNwaW5fbG9jaygmbWlub3JzX2xvY2spOwpAQCAtMzY3LDcgKzM2Niw3IEBACiAJZGV2aWNlX2Rlc3Ryb3koaGlkcmF3X2NsYXNzLCBNS0RFVihoaWRyYXdfbWFqb3IsIGhpZHJhdy0+bWlub3IpKTsKIAogCWlmIChoaWRyYXctPm9wZW4pIHsKLQkJaGlkLT5oaWRfY2xvc2UoaGlkKTsKKwkJaGlkLT5sbF9kcml2ZXItPmNsb3NlKGhpZCk7CiAJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmaGlkcmF3LT53YWl0KTsKIAl9IGVsc2UgewogCQlrZnJlZShoaWRyYXcpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9oaWQvdXNiaGlkL0tjb25maWcgYi9kcml2ZXJzL2hpZC91c2JoaWQvS2NvbmZpZwppbmRleCAxOGYwOTEwLi41ZDlhYTk1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2hpZC91c2JoaWQvS2NvbmZpZworKysgYi9kcml2ZXJzL2hpZC91c2JoaWQvS2NvbmZpZwpAQCAtMjQsODggKzI0LDEzIEBACiBjb21tZW50ICJJbnB1dCBjb3JlIHN1cHBvcnQgaXMgbmVlZGVkIGZvciBVU0IgSElEIGlucHV0IGxheWVyIG9yIEhJREJQIHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBVU0JfSElEICYmIElOUFVUPW4KIAotY29uZmlnIFVTQl9ISURJTlBVVF9QT1dFUkJPT0sKLQlib29sICJFbmFibGUgc3VwcG9ydCBmb3IgQXBwbGUgbGFwdG9wL2FsdW1pbnVtIFVTQiBzcGVjaWFsIGtleXMiCi0JZGVmYXVsdCBuCi0JZGVwZW5kcyBvbiBVU0JfSElECi0JaGVscAotCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCBzdXBwb3J0IGZvciB0aGUgc3BlY2lhbCBrZXlzIChGbiwgTnVtbG9jaykgb24KLQkgIEFwcGxlIGlCb29rcywgUG93ZXJCb29rcywgTWFjQm9va3MsIE1hY0Jvb2sgUHJvcyBhbmQgYWx1bWludW0gVVNCCi0JICBrZXlib2FyZHMuCi0KLQkgIElmIHVuc3VyZSwgc2F5IE4uCi0KLWNvbmZpZyBISURfRkYKLQlib29sICJGb3JjZSBmZWVkYmFjayBzdXBwb3J0IChFWFBFUklNRU5UQUwpIgotCWRlcGVuZHMgb24gVVNCX0hJRCAmJiBFWFBFUklNRU5UQUwKLQloZWxwCi0JICBTYXkgWSBoZXJlIGlzIHlvdSB3YW50IGZvcmNlIGZlZWRiYWNrIHN1cHBvcnQgZm9yIGEgZmV3IEhJRCBkZXZpY2VzLgotCSAgU2VlIGJlbG93IGZvciBhIGxpc3Qgb2Ygc3VwcG9ydGVkIGRldmljZXMuCi0KLQkgIFNlZSA8ZmlsZTpEb2N1bWVudGF0aW9uL2lucHV0L2ZmLnR4dD4gZm9yIGEgZGVzY3JpcHRpb24gb2YgdGhlIGZvcmNlCi0JICBmZWVkYmFjayBBUEkuCi0KLQkgIElmIHVuc3VyZSwgc2F5IE4uCi0KIGNvbmZpZyBISURfUElECiAJYm9vbCAiUElEIGRldmljZSBzdXBwb3J0IgotCWRlcGVuZHMgb24gSElEX0ZGCiAJaGVscAogCSAgU2F5IFkgaGVyZSBpZiB5b3UgaGF2ZSBhIFBJRC1jb21wbGlhbnQgZGV2aWNlIGFuZCB3aXNoIHRvIGVuYWJsZSBmb3JjZQogCSAgZmVlZGJhY2sgZm9yIGl0LiBNaWNyb3NvZnQgU2lkZXdpbmRlciBGb3JjZSBGZWVkYmFjayAyIGlzIG9uZSBvZiBzdWNoCiAJICBkZXZpY2VzLgogCi1jb25maWcgTE9HSVRFQ0hfRkYKLQlib29sICJMb2dpdGVjaCBkZXZpY2VzIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBISURfRkYKLQlzZWxlY3QgSU5QVVRfRkZfTUVNTEVTUyBpZiBVU0JfSElECi0JaGVscAotCSAgU2F5IFkgaGVyZSBpZiB5b3UgaGF2ZSBvbmUgb2YgdGhlc2UgZGV2aWNlczoKLQkgIC0gTG9naXRlY2ggV2luZ01hbiBDb3JkbGVzcyBSdW1ibGVQYWQKLQkgIC0gTG9naXRlY2ggV2luZ01hbiBDb3JkbGVzcyBSdW1ibGVQYWQgMgotCSAgLSBMb2dpdGVjaCBXaW5nTWFuIEZvcmNlIDNECi0JICAtIExvZ2l0ZWNoIEZvcm11bGEgRm9yY2UgRVgKLQkgIC0gTG9naXRlY2ggTU9NTyBGb3JjZSB3aGVlbAotCi0JICBhbmQgaWYgeW91IHdhbnQgdG8gZW5hYmxlIGZvcmNlIGZlZWRiYWNrIGZvciB0aGVtLgotCSAgTm90ZTogaWYgeW91IHNheSBOIGhlcmUsIHRoaXMgZGV2aWNlIHdpbGwgc3RpbGwgYmUgc3VwcG9ydGVkLCBidXQgd2l0aG91dAotCSAgZm9yY2UgZmVlZGJhY2suCi0KLWNvbmZpZyBMT0dJUlVNQkxFUEFEMl9GRgotCWJvb2wgIkxvZ2l0ZWNoIFJ1bWJsZXBhZCAyIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBISURfRkYKLQlzZWxlY3QgSU5QVVRfRkZfTUVNTEVTUyBpZiBVU0JfSElECi0JaGVscAotCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byBlbmFibGUgZm9yY2UgZmVlZGJhY2sgc3VwcG9ydCBmb3IgTG9naXRlY2gKLQkgIFJ1bWJsZXBhZCAyIGRldmljZXMuCi0KLWNvbmZpZyBQQU5USEVSTE9SRF9GRgotCWJvb2wgIlBhbnRoZXJMb3JkL0dyZWVuQXNpYSBiYXNlZCBkZXZpY2Ugc3VwcG9ydCIKLQlkZXBlbmRzIG9uIEhJRF9GRgotCXNlbGVjdCBJTlBVVF9GRl9NRU1MRVNTIGlmIFVTQl9ISUQKLQloZWxwCi0JICBTYXkgWSBoZXJlIGlmIHlvdSBoYXZlIGEgUGFudGhlckxvcmQvR3JlZW5Bc2lhIGJhc2VkIGdhbWUgY29udHJvbGxlcgotCSAgb3IgYWRhcHRlciBhbmQgd2FudCB0byBlbmFibGUgZm9yY2UgZmVlZGJhY2sgc3VwcG9ydCBmb3IgaXQuCi0KLWNvbmZpZyBUSFJVU1RNQVNURVJfRkYKLQlib29sICJUaHJ1c3RNYXN0ZXIgZGV2aWNlcyBzdXBwb3J0IgotCWRlcGVuZHMgb24gSElEX0ZGCi0Jc2VsZWN0IElOUFVUX0ZGX01FTUxFU1MgaWYgVVNCX0hJRAotCWhlbHAKLQkgIFNheSBZIGhlcmUgaWYgeW91IGhhdmUgYSBUSFJVU1RNQVNURVIgRmlyZVN0b3JlIER1YWwgUG93ZXIgMiBvcgotCSAgYSBUSFJVU1RNQVNURVIgRmVycmFyaSBHVCBSdW1ibGUgRm9yY2Ugb3IgRm9yY2UgRmVlZGJhY2sgV2hlZWwsCi0JICBhbmQgd2FudCB0byBlbmFibGUgZm9yY2UgZmVlZGJhY2sgc3VwcG9ydCBmb3IgaXQuCi0JICBOb3RlOiBpZiB5b3Ugc2F5IE4gaGVyZSwgdGhpcyBkZXZpY2Ugd2lsbCBzdGlsbCBiZSBzdXBwb3J0ZWQsIGJ1dCB3aXRob3V0Ci0JICBmb3JjZSBmZWVkYmFjay4KLQotY29uZmlnIFpFUk9QTFVTX0ZGCi0JYm9vbCAiWmVyb3BsdXMgYmFzZWQgZ2FtZSBjb250cm9sbGVyIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBISURfRkYKLQlzZWxlY3QgSU5QVVRfRkZfTUVNTEVTUyBpZiBVU0JfSElECi0JaGVscAotCSAgU2F5IFkgaGVyZSBpZiB5b3UgaGF2ZSBhIFplcm9wbHVzIGJhc2VkIGdhbWUgY29udHJvbGxlciBhbmQgd2FudCB0bwotCSAgZW5hYmxlIGZvcmNlIGZlZWRiYWNrIGZvciBpdC4KLQogY29uZmlnIFVTQl9ISURERVYKIAlib29sICIvZGV2L2hpZGRldiByYXcgSElEIGRldmljZSBzdXBwb3J0IgogCWRlcGVuZHMgb24gVVNCX0hJRApkaWZmIC0tZ2l0IGEvZHJpdmVycy9oaWQvdXNiaGlkL01ha2VmaWxlIGIvZHJpdmVycy9oaWQvdXNiaGlkL01ha2VmaWxlCmluZGV4IDAwYTdiNzAuLjEzMjllY2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaGlkL3VzYmhpZC9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2hpZC91c2JoaWQvTWFrZWZpbGUKQEAgLTEzLDI0ICsxMyw2IEBACiBpZmVxICgkKENPTkZJR19ISURfUElEKSx5KQogCXVzYmhpZC1vYmpzCSs9IGhpZC1waWRmZi5vCiBlbmRpZgotaWZlcSAoJChDT05GSUdfTE9HSVRFQ0hfRkYpLHkpCi0JdXNiaGlkLW9ianMJKz0gaGlkLWxnZmYubwotZW5kaWYKLWlmZXEgKCQoQ09ORklHX0xPR0lSVU1CTEVQQUQyX0ZGKSx5KQotCXVzYmhpZC1vYmpzCSs9IGhpZC1sZzJmZi5vCi1lbmRpZgotaWZlcSAoJChDT05GSUdfUEFOVEhFUkxPUkRfRkYpLHkpCi0JdXNiaGlkLW9ianMJKz0gaGlkLXBsZmYubwotZW5kaWYKLWlmZXEgKCQoQ09ORklHX1RIUlVTVE1BU1RFUl9GRikseSkKLQl1c2JoaWQtb2JqcwkrPSBoaWQtdG1mZi5vCi1lbmRpZgotaWZlcSAoJChDT05GSUdfWkVST1BMVVNfRkYpLHkpCi0JdXNiaGlkLW9ianMJKz0gaGlkLXpwZmYubwotZW5kaWYKLWlmZXEgKCQoQ09ORklHX0hJRF9GRikseSkKLQl1c2JoaWQtb2JqcwkrPSBoaWQtZmYubwotZW5kaWYKIAogb2JqLSQoQ09ORklHX1VTQl9ISUQpCQkrPSB1c2JoaWQubwogb2JqLSQoQ09ORklHX1VTQl9LQkQpCQkrPSB1c2JrYmQubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9oaWQvdXNiaGlkL2hpZC1jb3JlLmMgYi9kcml2ZXJzL2hpZC91c2JoaWQvaGlkLWNvcmUuYwppbmRleCAyN2ZlNGQ4Li43MDVhNDNjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2hpZC91c2JoaWQvaGlkLWNvcmUuYworKysgYi9kcml2ZXJzL2hpZC91c2JoaWQvaGlkLWNvcmUuYwpAQCAtNDQsOCArNDQsNiBAQAogI2RlZmluZSBEUklWRVJfREVTQyAiVVNCIEhJRCBjb3JlIGRyaXZlciIKICNkZWZpbmUgRFJJVkVSX0xJQ0VOU0UgIkdQTCIKIAotc3RhdGljIGNoYXIgKmhpZF90eXBlc1tdID0geyJEZXZpY2UiLCAiUG9pbnRlciIsICJNb3VzZSIsICJEZXZpY2UiLCAiSm95c3RpY2siLAotCQkJCSJHYW1lcGFkIiwgIktleWJvYXJkIiwgIktleXBhZCIsICJNdWx0aS1BeGlzIENvbnRyb2xsZXIifTsKIC8qCiAgKiBNb2R1bGUgcGFyYW1ldGVycy4KICAqLwpAQCAtNjEsMTIgKzU5LDYgQEAKIAkJIiBxdWlya3M9dmVuZG9ySUQ6cHJvZHVjdElEOnF1aXJrcyIKIAkJIiB3aGVyZSB2ZW5kb3JJRCwgcHJvZHVjdElELCBhbmQgcXVpcmtzIGFyZSBhbGwgaW4iCiAJCSIgMHgtcHJlZml4ZWQgaGV4Iik7Ci1zdGF0aWMgY2hhciAqcmRlc2NfcXVpcmtzX3BhcmFtW01BWF9VU0JISURfQk9PVF9RVUlSS1NdID0geyBbIDAgLi4uIChNQVhfVVNCSElEX0JPT1RfUVVJUktTIC0gMSkgXSA9IE5VTEwgfTsKLW1vZHVsZV9wYXJhbV9hcnJheV9uYW1lZChyZGVzY19xdWlya3MsIHJkZXNjX3F1aXJrc19wYXJhbSwgY2hhcnAsIE5VTEwsIDA0NDQpOwotTU9EVUxFX1BBUk1fREVTQyhyZGVzY19xdWlya3MsICJBZGQvbW9kaWZ5IHJlcG9ydCBkZXNjcmlwdG9yIHF1aXJrcyBieSBzcGVjaWZ5aW5nICIKLQkJIiByZGVzY19xdWlya3M9dmVuZG9ySUQ6cHJvZHVjdElEOnJkZXNjX3F1aXJrcyIKLQkJIiB3aGVyZSB2ZW5kb3JJRCwgcHJvZHVjdElELCBhbmQgcmRlc2NfcXVpcmtzIGFyZSBhbGwgaW4iCi0JCSIgMHgtcHJlZml4ZWQgaGV4Iik7CiAvKgogICogSW5wdXQgc3VibWlzc2lvbiBhbmQgSS9PIGVycm9yIGhhbmRsZXIuCiAgKi8KQEAgLTE5NywzMSArMTg5LDMyIEBACiAJaW50CQkJc3RhdHVzOwogCiAJc3dpdGNoICh1cmItPnN0YXR1cykgewotCQljYXNlIDA6CQkJLyogc3VjY2VzcyAqLwotCQkJdXNiaGlkLT5yZXRyeV9kZWxheSA9IDA7Ci0JCQloaWRfaW5wdXRfcmVwb3J0KHVyYi0+Y29udGV4dCwgSElEX0lOUFVUX1JFUE9SVCwKLQkJCQkJIHVyYi0+dHJhbnNmZXJfYnVmZmVyLAotCQkJCQkgdXJiLT5hY3R1YWxfbGVuZ3RoLCAxKTsKLQkJCWJyZWFrOwotCQljYXNlIC1FUElQRToJCS8qIHN0YWxsICovCi0JCQljbGVhcl9iaXQoSElEX0lOX1JVTk5JTkcsICZ1c2JoaWQtPmlvZmwpOwotCQkJc2V0X2JpdChISURfQ0xFQVJfSEFMVCwgJnVzYmhpZC0+aW9mbCk7Ci0JCQlzY2hlZHVsZV93b3JrKCZ1c2JoaWQtPnJlc2V0X3dvcmspOwotCQkJcmV0dXJuOwotCQljYXNlIC1FQ09OTlJFU0VUOgkvKiB1bmxpbmsgKi8KLQkJY2FzZSAtRU5PRU5UOgotCQljYXNlIC1FU0hVVERPV046CS8qIHVucGx1ZyAqLwotCQkJY2xlYXJfYml0KEhJRF9JTl9SVU5OSU5HLCAmdXNiaGlkLT5pb2ZsKTsKLQkJCXJldHVybjsKLQkJY2FzZSAtRUlMU0VROgkJLyogcHJvdG9jb2wgZXJyb3Igb3IgdW5wbHVnICovCi0JCWNhc2UgLUVQUk9UTzoJCS8qIHByb3RvY29sIGVycm9yIG9yIHVucGx1ZyAqLwotCQljYXNlIC1FVElNRToJCS8qIHByb3RvY29sIGVycm9yIG9yIHVucGx1ZyAqLwotCQljYXNlIC1FVElNRURPVVQ6CS8qIFNob3VsZCBuZXZlciBoYXBwZW4sIGJ1dC4uLiAqLwotCQkJY2xlYXJfYml0KEhJRF9JTl9SVU5OSU5HLCAmdXNiaGlkLT5pb2ZsKTsKLQkJCWhpZF9pb19lcnJvcihoaWQpOwotCQkJcmV0dXJuOwotCQlkZWZhdWx0OgkJLyogZXJyb3IgKi8KLQkJCXdhcm4oImlucHV0IGlycSBzdGF0dXMgJWQgcmVjZWl2ZWQiLCB1cmItPnN0YXR1cyk7CisJY2FzZSAwOgkJCS8qIHN1Y2Nlc3MgKi8KKwkJdXNiaGlkLT5yZXRyeV9kZWxheSA9IDA7CisJCWhpZF9pbnB1dF9yZXBvcnQodXJiLT5jb250ZXh0LCBISURfSU5QVVRfUkVQT1JULAorCQkJCSB1cmItPnRyYW5zZmVyX2J1ZmZlciwKKwkJCQkgdXJiLT5hY3R1YWxfbGVuZ3RoLCAxKTsKKwkJYnJlYWs7CisJY2FzZSAtRVBJUEU6CQkvKiBzdGFsbCAqLworCQljbGVhcl9iaXQoSElEX0lOX1JVTk5JTkcsICZ1c2JoaWQtPmlvZmwpOworCQlzZXRfYml0KEhJRF9DTEVBUl9IQUxULCAmdXNiaGlkLT5pb2ZsKTsKKwkJc2NoZWR1bGVfd29yaygmdXNiaGlkLT5yZXNldF93b3JrKTsKKwkJcmV0dXJuOworCWNhc2UgLUVDT05OUkVTRVQ6CS8qIHVubGluayAqLworCWNhc2UgLUVOT0VOVDoKKwljYXNlIC1FU0hVVERPV046CS8qIHVucGx1ZyAqLworCQljbGVhcl9iaXQoSElEX0lOX1JVTk5JTkcsICZ1c2JoaWQtPmlvZmwpOworCQlyZXR1cm47CisJY2FzZSAtRUlMU0VROgkJLyogcHJvdG9jb2wgZXJyb3Igb3IgdW5wbHVnICovCisJY2FzZSAtRVBST1RPOgkJLyogcHJvdG9jb2wgZXJyb3Igb3IgdW5wbHVnICovCisJY2FzZSAtRVRJTUU6CQkvKiBwcm90b2NvbCBlcnJvciBvciB1bnBsdWcgKi8KKwljYXNlIC1FVElNRURPVVQ6CS8qIFNob3VsZCBuZXZlciBoYXBwZW4sIGJ1dC4uLiAqLworCQljbGVhcl9iaXQoSElEX0lOX1JVTk5JTkcsICZ1c2JoaWQtPmlvZmwpOworCQloaWRfaW9fZXJyb3IoaGlkKTsKKwkJcmV0dXJuOworCWRlZmF1bHQ6CQkvKiBlcnJvciAqLworCQlkZXZfd2FybigmdXJiLT5kZXYtPmRldiwgImlucHV0IGlycSBzdGF0dXMgJWQgICIKKwkJCQkicmVjZWl2ZWRcbiIsIHVyYi0+c3RhdHVzKTsKIAl9CiAKIAlzdGF0dXMgPSB1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9BVE9NSUMpOwpAQCAtMjQwLDEzICsyMzMsMTYgQEAKIHN0YXRpYyBpbnQgaGlkX3N1Ym1pdF9vdXQoc3RydWN0IGhpZF9kZXZpY2UgKmhpZCkKIHsKIAlzdHJ1Y3QgaGlkX3JlcG9ydCAqcmVwb3J0OworCWNoYXIgKnJhd19yZXBvcnQ7CiAJc3RydWN0IHVzYmhpZF9kZXZpY2UgKnVzYmhpZCA9IGhpZC0+ZHJpdmVyX2RhdGE7CiAKLQlyZXBvcnQgPSB1c2JoaWQtPm91dFt1c2JoaWQtPm91dHRhaWxdOworCXJlcG9ydCA9IHVzYmhpZC0+b3V0W3VzYmhpZC0+b3V0dGFpbF0ucmVwb3J0OworCXJhd19yZXBvcnQgPSB1c2JoaWQtPm91dFt1c2JoaWQtPm91dHRhaWxdLnJhd19yZXBvcnQ7CiAKLQloaWRfb3V0cHV0X3JlcG9ydChyZXBvcnQsIHVzYmhpZC0+b3V0YnVmKTsKIAl1c2JoaWQtPnVyYm91dC0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCA9ICgocmVwb3J0LT5zaXplIC0gMSkgPj4gMykgKyAxICsgKHJlcG9ydC0+aWQgPiAwKTsKIAl1c2JoaWQtPnVyYm91dC0+ZGV2ID0gaGlkX3RvX3VzYl9kZXYoaGlkKTsKKwltZW1jcHkodXNiaGlkLT5vdXRidWYsIHJhd19yZXBvcnQsIHVzYmhpZC0+dXJib3V0LT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoKTsKKwlrZnJlZShyYXdfcmVwb3J0KTsKIAogCWRiZ19oaWQoInN1Ym1pdHRpbmcgb3V0IHVyYlxuIik7CiAKQEAgLTI2MiwxNyArMjU4LDIwIEBACiB7CiAJc3RydWN0IGhpZF9yZXBvcnQgKnJlcG9ydDsKIAl1bnNpZ25lZCBjaGFyIGRpcjsKKwljaGFyICpyYXdfcmVwb3J0OwogCWludCBsZW47CiAJc3RydWN0IHVzYmhpZF9kZXZpY2UgKnVzYmhpZCA9IGhpZC0+ZHJpdmVyX2RhdGE7CiAKIAlyZXBvcnQgPSB1c2JoaWQtPmN0cmxbdXNiaGlkLT5jdHJsdGFpbF0ucmVwb3J0OworCXJhd19yZXBvcnQgPSB1c2JoaWQtPmN0cmxbdXNiaGlkLT5jdHJsdGFpbF0ucmF3X3JlcG9ydDsKIAlkaXIgPSB1c2JoaWQtPmN0cmxbdXNiaGlkLT5jdHJsdGFpbF0uZGlyOwogCiAJbGVuID0gKChyZXBvcnQtPnNpemUgLSAxKSA+PiAzKSArIDEgKyAocmVwb3J0LT5pZCA+IDApOwogCWlmIChkaXIgPT0gVVNCX0RJUl9PVVQpIHsKLQkJaGlkX291dHB1dF9yZXBvcnQocmVwb3J0LCB1c2JoaWQtPmN0cmxidWYpOwogCQl1c2JoaWQtPnVyYmN0cmwtPnBpcGUgPSB1c2Jfc25kY3RybHBpcGUoaGlkX3RvX3VzYl9kZXYoaGlkKSwgMCk7CiAJCXVzYmhpZC0+dXJiY3RybC0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCA9IGxlbjsKKwkJbWVtY3B5KHVzYmhpZC0+Y3RybGJ1ZiwgcmF3X3JlcG9ydCwgbGVuKTsKKwkJa2ZyZWUocmF3X3JlcG9ydCk7CiAJfSBlbHNlIHsKIAkJaW50IG1heHBhY2tldCwgcGFkbGVuOwogCkBAIC0zMTksMTcgKzMxOCwxOCBAQAogCWludCB1bnBsdWcgPSAwOwogCiAJc3dpdGNoICh1cmItPnN0YXR1cykgewotCQljYXNlIDA6CQkJLyogc3VjY2VzcyAqLwotCQkJYnJlYWs7Ci0JCWNhc2UgLUVTSFVURE9XTjoJLyogdW5wbHVnICovCi0JCQl1bnBsdWcgPSAxOwotCQljYXNlIC1FSUxTRVE6CQkvKiBwcm90b2NvbCBlcnJvciBvciB1bnBsdWcgKi8KLQkJY2FzZSAtRVBST1RPOgkJLyogcHJvdG9jb2wgZXJyb3Igb3IgdW5wbHVnICovCi0JCWNhc2UgLUVDT05OUkVTRVQ6CS8qIHVubGluayAqLwotCQljYXNlIC1FTk9FTlQ6Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoJCS8qIGVycm9yICovCi0JCQl3YXJuKCJvdXRwdXQgaXJxIHN0YXR1cyAlZCByZWNlaXZlZCIsIHVyYi0+c3RhdHVzKTsKKwljYXNlIDA6CQkJLyogc3VjY2VzcyAqLworCQlicmVhazsKKwljYXNlIC1FU0hVVERPV046CS8qIHVucGx1ZyAqLworCQl1bnBsdWcgPSAxOworCWNhc2UgLUVJTFNFUToJCS8qIHByb3RvY29sIGVycm9yIG9yIHVucGx1ZyAqLworCWNhc2UgLUVQUk9UTzoJCS8qIHByb3RvY29sIGVycm9yIG9yIHVucGx1ZyAqLworCWNhc2UgLUVDT05OUkVTRVQ6CS8qIHVubGluayAqLworCWNhc2UgLUVOT0VOVDoKKwkJYnJlYWs7CisJZGVmYXVsdDoJCS8qIGVycm9yICovCisJCWRldl93YXJuKCZ1cmItPmRldi0+ZGV2LCAib3V0cHV0IGlycSBzdGF0dXMgJWQgIgorCQkJCSJyZWNlaXZlZFxuIiwgdXJiLT5zdGF0dXMpOwogCX0KIAogCXNwaW5fbG9ja19pcnFzYXZlKCZ1c2JoaWQtPm91dGxvY2ssIGZsYWdzKTsKQEAgLTM2NywyMSArMzY3LDIzIEBACiAJc3Bpbl9sb2NrX2lycXNhdmUoJnVzYmhpZC0+Y3RybGxvY2ssIGZsYWdzKTsKIAogCXN3aXRjaCAodXJiLT5zdGF0dXMpIHsKLQkJY2FzZSAwOgkJCS8qIHN1Y2Nlc3MgKi8KLQkJCWlmICh1c2JoaWQtPmN0cmxbdXNiaGlkLT5jdHJsdGFpbF0uZGlyID09IFVTQl9ESVJfSU4pCi0JCQkJaGlkX2lucHV0X3JlcG9ydCh1cmItPmNvbnRleHQsIHVzYmhpZC0+Y3RybFt1c2JoaWQtPmN0cmx0YWlsXS5yZXBvcnQtPnR5cGUsCi0JCQkJCQl1cmItPnRyYW5zZmVyX2J1ZmZlciwgdXJiLT5hY3R1YWxfbGVuZ3RoLCAwKTsKLQkJCWJyZWFrOwotCQljYXNlIC1FU0hVVERPV046CS8qIHVucGx1ZyAqLwotCQkJdW5wbHVnID0gMTsKLQkJY2FzZSAtRUlMU0VROgkJLyogcHJvdG9jb2wgZXJyb3Igb3IgdW5wbHVnICovCi0JCWNhc2UgLUVQUk9UTzoJCS8qIHByb3RvY29sIGVycm9yIG9yIHVucGx1ZyAqLwotCQljYXNlIC1FQ09OTlJFU0VUOgkvKiB1bmxpbmsgKi8KLQkJY2FzZSAtRU5PRU5UOgotCQljYXNlIC1FUElQRToJCS8qIHJlcG9ydCBub3QgYXZhaWxhYmxlICovCi0JCQlicmVhazsKLQkJZGVmYXVsdDoJCS8qIGVycm9yICovCi0JCQl3YXJuKCJjdHJsIHVyYiBzdGF0dXMgJWQgcmVjZWl2ZWQiLCB1cmItPnN0YXR1cyk7CisJY2FzZSAwOgkJCS8qIHN1Y2Nlc3MgKi8KKwkJaWYgKHVzYmhpZC0+Y3RybFt1c2JoaWQtPmN0cmx0YWlsXS5kaXIgPT0gVVNCX0RJUl9JTikKKwkJCWhpZF9pbnB1dF9yZXBvcnQodXJiLT5jb250ZXh0LAorCQkJCXVzYmhpZC0+Y3RybFt1c2JoaWQtPmN0cmx0YWlsXS5yZXBvcnQtPnR5cGUsCisJCQkJdXJiLT50cmFuc2Zlcl9idWZmZXIsIHVyYi0+YWN0dWFsX2xlbmd0aCwgMCk7CisJCWJyZWFrOworCWNhc2UgLUVTSFVURE9XTjoJLyogdW5wbHVnICovCisJCXVucGx1ZyA9IDE7CisJY2FzZSAtRUlMU0VROgkJLyogcHJvdG9jb2wgZXJyb3Igb3IgdW5wbHVnICovCisJY2FzZSAtRVBST1RPOgkJLyogcHJvdG9jb2wgZXJyb3Igb3IgdW5wbHVnICovCisJY2FzZSAtRUNPTk5SRVNFVDoJLyogdW5saW5rICovCisJY2FzZSAtRU5PRU5UOgorCWNhc2UgLUVQSVBFOgkJLyogcmVwb3J0IG5vdCBhdmFpbGFibGUgKi8KKwkJYnJlYWs7CisJZGVmYXVsdDoJCS8qIGVycm9yICovCisJCWRldl93YXJuKCZ1cmItPmRldi0+ZGV2LCAiY3RybCB1cmIgc3RhdHVzICVkICIKKwkJCQkicmVjZWl2ZWRcbiIsIHVyYi0+c3RhdHVzKTsKIAl9CiAKIAlpZiAodW5wbHVnKQpAQCAtNDA4LDYgKzQxMCw3IEBACiAJaW50IGhlYWQ7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlzdHJ1Y3QgdXNiaGlkX2RldmljZSAqdXNiaGlkID0gaGlkLT5kcml2ZXJfZGF0YTsKKwlpbnQgbGVuID0gKChyZXBvcnQtPnNpemUgLSAxKSA+PiAzKSArIDEgKyAocmVwb3J0LT5pZCA+IDApOwogCiAJaWYgKChoaWQtPnF1aXJrcyAmIEhJRF9RVUlSS19OT0dFVCkgJiYgZGlyID09IFVTQl9ESVJfSU4pCiAJCXJldHVybjsKQEAgLTQxOCwxMSArNDIxLDE4IEBACiAKIAkJaWYgKChoZWFkID0gKHVzYmhpZC0+b3V0aGVhZCArIDEpICYgKEhJRF9PVVRQVVRfRklGT19TSVpFIC0gMSkpID09IHVzYmhpZC0+b3V0dGFpbCkgewogCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdXNiaGlkLT5vdXRsb2NrLCBmbGFncyk7Ci0JCQl3YXJuKCJvdXRwdXQgcXVldWUgZnVsbCIpOworCQkJZGV2X3dhcm4oJmhpZC0+ZGV2LCAib3V0cHV0IHF1ZXVlIGZ1bGxcbiIpOwogCQkJcmV0dXJuOwogCQl9CiAKLQkJdXNiaGlkLT5vdXRbdXNiaGlkLT5vdXRoZWFkXSA9IHJlcG9ydDsKKwkJdXNiaGlkLT5vdXRbdXNiaGlkLT5vdXRoZWFkXS5yYXdfcmVwb3J0ID0ga21hbGxvYyhsZW4sIEdGUF9BVE9NSUMpOworCQlpZiAoIXVzYmhpZC0+b3V0W3VzYmhpZC0+b3V0aGVhZF0ucmF3X3JlcG9ydCkgeworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdXNiaGlkLT5vdXRsb2NrLCBmbGFncyk7CisJCQlkZXZfd2FybigmaGlkLT5kZXYsICJvdXRwdXQgcXVldWVpbmcgZmFpbGVkXG4iKTsKKwkJCXJldHVybjsKKwkJfQorCQloaWRfb3V0cHV0X3JlcG9ydChyZXBvcnQsIHVzYmhpZC0+b3V0W3VzYmhpZC0+b3V0aGVhZF0ucmF3X3JlcG9ydCk7CisJCXVzYmhpZC0+b3V0W3VzYmhpZC0+b3V0aGVhZF0ucmVwb3J0ID0gcmVwb3J0OwogCQl1c2JoaWQtPm91dGhlYWQgPSBoZWFkOwogCiAJCWlmICghdGVzdF9hbmRfc2V0X2JpdChISURfT1VUX1JVTk5JTkcsICZ1c2JoaWQtPmlvZmwpKQpAQCAtNDM3LDEwICs0NDcsMTkgQEAKIAogCWlmICgoaGVhZCA9ICh1c2JoaWQtPmN0cmxoZWFkICsgMSkgJiAoSElEX0NPTlRST0xfRklGT19TSVpFIC0gMSkpID09IHVzYmhpZC0+Y3RybHRhaWwpIHsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdXNiaGlkLT5jdHJsbG9jaywgZmxhZ3MpOwotCQl3YXJuKCJjb250cm9sIHF1ZXVlIGZ1bGwiKTsKKwkJZGV2X3dhcm4oJmhpZC0+ZGV2LCAiY29udHJvbCBxdWV1ZSBmdWxsXG4iKTsKIAkJcmV0dXJuOwogCX0KIAorCWlmIChkaXIgPT0gVVNCX0RJUl9PVVQpIHsKKwkJdXNiaGlkLT5jdHJsW3VzYmhpZC0+Y3RybGhlYWRdLnJhd19yZXBvcnQgPSBrbWFsbG9jKGxlbiwgR0ZQX0FUT01JQyk7CisJCWlmICghdXNiaGlkLT5jdHJsW3VzYmhpZC0+Y3RybGhlYWRdLnJhd19yZXBvcnQpIHsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnVzYmhpZC0+Y3RybGxvY2ssIGZsYWdzKTsKKwkJCWRldl93YXJuKCZoaWQtPmRldiwgImNvbnRyb2wgcXVldWVpbmcgZmFpbGVkXG4iKTsKKwkJCXJldHVybjsKKwkJfQorCQloaWRfb3V0cHV0X3JlcG9ydChyZXBvcnQsIHVzYmhpZC0+Y3RybFt1c2JoaWQtPmN0cmxoZWFkXS5yYXdfcmVwb3J0KTsKKwl9CiAJdXNiaGlkLT5jdHJsW3VzYmhpZC0+Y3RybGhlYWRdLnJlcG9ydCA9IHJlcG9ydDsKIAl1c2JoaWQtPmN0cmxbdXNiaGlkLT5jdHJsaGVhZF0uZGlyID0gZGlyOwogCXVzYmhpZC0+Y3RybGhlYWQgPSBoZWFkOwpAQCAtNDUxLDYgKzQ3MCw3IEBACiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ1c2JoaWQtPmN0cmxsb2NrLCBmbGFncyk7CiB9CitFWFBPUlRfU1lNQk9MX0dQTCh1c2JoaWRfc3VibWl0X3JlcG9ydCk7CiAKIHN0YXRpYyBpbnQgdXNiX2hpZGlucHV0X2lucHV0X2V2ZW50KHN0cnVjdCBpbnB1dF9kZXYgKmRldiwgdW5zaWduZWQgaW50IHR5cGUsIHVuc2lnbmVkIGludCBjb2RlLCBpbnQgdmFsdWUpCiB7CkBAIC00NjUsNyArNDg1LDcgQEAKIAkJcmV0dXJuIC0xOwogCiAJaWYgKChvZmZzZXQgPSBoaWRpbnB1dF9maW5kX2ZpZWxkKGhpZCwgdHlwZSwgY29kZSwgJmZpZWxkKSkgPT0gLTEpIHsKLQkJd2FybigiZXZlbnQgZmllbGQgbm90IGZvdW5kIik7CisJCWRldl93YXJuKCZkZXYtPmRldiwgImV2ZW50IGZpZWxkIG5vdCBmb3VuZFxuIik7CiAJCXJldHVybiAtMTsKIAl9CiAKQEAgLTU2OCw3ICs1ODgsNyBAQAogCX0KIAogCWlmIChlcnIpCi0JCXdhcm4oInRpbWVvdXQgaW5pdGlhbGl6aW5nIHJlcG9ydHMiKTsKKwkJZGV2X3dhcm4oJmhpZC0+ZGV2LCAidGltZW91dCBpbml0aWFsaXppbmcgcmVwb3J0c1xuIik7CiB9CiAKIC8qCkBAIC01OTgsNyArNjE4LDcgQEAKIAlyZXR1cm4gLTE7CiB9CiAKLXN0YXRpYyB2b2lkIHVzYmhpZF9zZXRfbGVkcyhzdHJ1Y3QgaGlkX2RldmljZSAqaGlkKQordm9pZCB1c2JoaWRfc2V0X2xlZHMoc3RydWN0IGhpZF9kZXZpY2UgKmhpZCkKIHsKIAlzdHJ1Y3QgaGlkX2ZpZWxkICpmaWVsZDsKIAlpbnQgb2Zmc2V0OwpAQCAtNjA4LDYgKzYyOCw3IEBACiAJCXVzYmhpZF9zdWJtaXRfcmVwb3J0KGhpZCwgZmllbGQtPnJlcG9ydCwgVVNCX0RJUl9PVVQpOwogCX0KIH0KK0VYUE9SVF9TWU1CT0xfR1BMKHVzYmhpZF9zZXRfbGVkcyk7CiAKIC8qCiAgKiBUcmF2ZXJzZSB0aGUgc3VwcGxpZWQgbGlzdCBvZiByZXBvcnRzIGFuZCBmaW5kIHRoZSBsb25nZXN0CkBAIC02NzUsNDMgKzY5NiwxNiBAQAogCXVzYl9idWZmZXJfZnJlZShkZXYsIHVzYmhpZC0+YnVmc2l6ZSwgdXNiaGlkLT5jdHJsYnVmLCB1c2JoaWQtPmN0cmxidWZfZG1hKTsKIH0KIAotLyoKLSAqIFNlbmRpbmcgSElEX1JFUV9HRVRfUkVQT1JUIGNoYW5nZXMgdGhlIG9wZXJhdGlvbiBtb2RlIG9mIHRoZSBwczMgY29udHJvbGxlcgotICogdG8gIm9wZXJhdGlvbmFsIi4gIFdpdGhvdXQgdGhpcywgdGhlIHBzMyBjb250cm9sbGVyIHdpbGwgbm90IHJlcG9ydCBhbnkKLSAqIGV2ZW50cy4KLSAqLwotc3RhdGljIHZvaWQgaGlkX2ZpeHVwX3NvbnlfcHMzX2NvbnRyb2xsZXIoc3RydWN0IHVzYl9kZXZpY2UgKmRldiwgaW50IGlmbnVtKQorc3RhdGljIGludCB1c2JoaWRfcGFyc2Uoc3RydWN0IGhpZF9kZXZpY2UgKmhpZCkKIHsKLQlpbnQgcmVzdWx0OwotCWNoYXIgKmJ1ZiA9IGttYWxsb2MoMTgsIEdGUF9LRVJORUwpOwotCi0JaWYgKCFidWYpCi0JCXJldHVybjsKLQotCXJlc3VsdCA9IHVzYl9jb250cm9sX21zZyhkZXYsIHVzYl9yY3ZjdHJscGlwZShkZXYsIDApLAotCQkJCSBISURfUkVRX0dFVF9SRVBPUlQsCi0JCQkJIFVTQl9ESVJfSU4gfCBVU0JfVFlQRV9DTEFTUyB8Ci0JCQkJIFVTQl9SRUNJUF9JTlRFUkZBQ0UsCi0JCQkJICgzIDw8IDgpIHwgMHhmMiwgaWZudW0sIGJ1ZiwgMTcsCi0JCQkJIFVTQl9DVFJMX0dFVF9USU1FT1VUKTsKLQotCWlmIChyZXN1bHQgPCAwKQotCQllcnJfaGlkKCIlcyBmYWlsZWQ6ICVkXG4iLCBfX2Z1bmNfXywgcmVzdWx0KTsKLQotCWtmcmVlKGJ1Zik7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgaGlkX2RldmljZSAqdXNiX2hpZF9jb25maWd1cmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCi17CisJc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYgPSB0b191c2JfaW50ZXJmYWNlKGhpZC0+ZGV2LnBhcmVudCk7CiAJc3RydWN0IHVzYl9ob3N0X2ludGVyZmFjZSAqaW50ZXJmYWNlID0gaW50Zi0+Y3VyX2FsdHNldHRpbmc7CiAJc3RydWN0IHVzYl9kZXZpY2UgKmRldiA9IGludGVyZmFjZV90b191c2JkZXYgKGludGYpOwogCXN0cnVjdCBoaWRfZGVzY3JpcHRvciAqaGRlc2M7Ci0Jc3RydWN0IGhpZF9kZXZpY2UgKmhpZDsKIAl1MzIgcXVpcmtzID0gMDsKLQl1bnNpZ25lZCBpbnQgaW5zaXplID0gMCwgcnNpemUgPSAwOworCXVuc2lnbmVkIGludCByc2l6ZSA9IDA7CiAJY2hhciAqcmRlc2M7Ci0JaW50IG4sIGxlbjsKLQlzdHJ1Y3QgdXNiaGlkX2RldmljZSAqdXNiaGlkOworCWludCByZXQsIG47CiAKIAlxdWlya3MgPSB1c2JoaWRfbG9va3VwX3F1aXJrKGxlMTZfdG9fY3B1KGRldi0+ZGVzY3JpcHRvci5pZFZlbmRvciksCiAJCQlsZTE2X3RvX2NwdShkZXYtPmRlc2NyaXB0b3IuaWRQcm9kdWN0KSk7CkBAIC03MjQsNjMgKzcxOCw3NSBAQAogCQkJCXF1aXJrcyB8PSBISURfUVVJUktfTk9HRVQ7CiAJfQogCi0JaWYgKHF1aXJrcyAmIEhJRF9RVUlSS19JR05PUkUpCi0JCXJldHVybiBOVUxMOwotCi0JaWYgKChxdWlya3MgJiBISURfUVVJUktfSUdOT1JFX01PVVNFKSAmJgotCQkoaW50ZXJmYWNlLT5kZXNjLmJJbnRlcmZhY2VQcm90b2NvbCA9PSBVU0JfSU5URVJGQUNFX1BST1RPQ09MX01PVVNFKSkKLQkJCXJldHVybiBOVUxMOwotCi0KIAlpZiAodXNiX2dldF9leHRyYV9kZXNjcmlwdG9yKGludGVyZmFjZSwgSElEX0RUX0hJRCwgJmhkZXNjKSAmJgogCSAgICAoIWludGVyZmFjZS0+ZGVzYy5iTnVtRW5kcG9pbnRzIHx8CiAJICAgICB1c2JfZ2V0X2V4dHJhX2Rlc2NyaXB0b3IoJmludGVyZmFjZS0+ZW5kcG9pbnRbMF0sIEhJRF9EVF9ISUQsICZoZGVzYykpKSB7CiAJCWRiZ19oaWQoImNsYXNzIGRlc2NyaXB0b3Igbm90IHByZXNlbnRcbiIpOwotCQlyZXR1cm4gTlVMTDsKKwkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCisJaGlkLT52ZXJzaW9uID0gbGUxNl90b19jcHUoaGRlc2MtPmJjZEhJRCk7CisJaGlkLT5jb3VudHJ5ID0gaGRlc2MtPmJDb3VudHJ5Q29kZTsKKwogCWZvciAobiA9IDA7IG4gPCBoZGVzYy0+Yk51bURlc2NyaXB0b3JzOyBuKyspCiAJCWlmIChoZGVzYy0+ZGVzY1tuXS5iRGVzY3JpcHRvclR5cGUgPT0gSElEX0RUX1JFUE9SVCkKIAkJCXJzaXplID0gbGUxNl90b19jcHUoaGRlc2MtPmRlc2Nbbl0ud0Rlc2NyaXB0b3JMZW5ndGgpOwogCiAJaWYgKCFyc2l6ZSB8fCByc2l6ZSA+IEhJRF9NQVhfREVTQ1JJUFRPUl9TSVpFKSB7CiAJCWRiZ19oaWQoIndlaXJkIHNpemUgb2YgcmVwb3J0IGRlc2NyaXB0b3IgKCV1KVxuIiwgcnNpemUpOwotCQlyZXR1cm4gTlVMTDsKKwkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCiAJaWYgKCEocmRlc2MgPSBrbWFsbG9jKHJzaXplLCBHRlBfS0VSTkVMKSkpIHsKIAkJZGJnX2hpZCgiY291bGRuJ3QgYWxsb2NhdGUgcmRlc2MgbWVtb3J5XG4iKTsKLQkJcmV0dXJuIE5VTEw7CisJCXJldHVybiAtRU5PTUVNOwogCX0KIAogCWhpZF9zZXRfaWRsZShkZXYsIGludGVyZmFjZS0+ZGVzYy5iSW50ZXJmYWNlTnVtYmVyLCAwLCAwKTsKIAotCWlmICgobiA9IGhpZF9nZXRfY2xhc3NfZGVzY3JpcHRvcihkZXYsIGludGVyZmFjZS0+ZGVzYy5iSW50ZXJmYWNlTnVtYmVyLCBISURfRFRfUkVQT1JULCByZGVzYywgcnNpemUpKSA8IDApIHsKKwlyZXQgPSBoaWRfZ2V0X2NsYXNzX2Rlc2NyaXB0b3IoZGV2LCBpbnRlcmZhY2UtPmRlc2MuYkludGVyZmFjZU51bWJlciwKKwkJCUhJRF9EVF9SRVBPUlQsIHJkZXNjLCByc2l6ZSk7CisJaWYgKHJldCA8IDApIHsKIAkJZGJnX2hpZCgicmVhZGluZyByZXBvcnQgZGVzY3JpcHRvciBmYWlsZWRcbiIpOwogCQlrZnJlZShyZGVzYyk7Ci0JCXJldHVybiBOVUxMOworCQlnb3RvIGVycjsKIAl9CiAKLQl1c2JoaWRfZml4dXBfcmVwb3J0X2Rlc2NyaXB0b3IobGUxNl90b19jcHUoZGV2LT5kZXNjcmlwdG9yLmlkVmVuZG9yKSwKLQkJCWxlMTZfdG9fY3B1KGRldi0+ZGVzY3JpcHRvci5pZFByb2R1Y3QpLCByZGVzYywKLQkJCXJzaXplLCByZGVzY19xdWlya3NfcGFyYW0pOwotCiAJZGJnX2hpZCgicmVwb3J0IGRlc2NyaXB0b3IgKHNpemUgJXUsIHJlYWQgJWQpID0gIiwgcnNpemUsIG4pOwogCWZvciAobiA9IDA7IG4gPCByc2l6ZTsgbisrKQogCQlkYmdfaGlkX2xpbmUoIiAlMDJ4IiwgKHVuc2lnbmVkIGNoYXIpIHJkZXNjW25dKTsKIAlkYmdfaGlkX2xpbmUoIlxuIik7CiAKLQlpZiAoIShoaWQgPSBoaWRfcGFyc2VfcmVwb3J0KHJkZXNjLCBuKSkpIHsKKwlyZXQgPSBoaWRfcGFyc2VfcmVwb3J0KGhpZCwgcmRlc2MsIHJzaXplKTsKKwlrZnJlZShyZGVzYyk7CisJaWYgKHJldCkgewogCQlkYmdfaGlkKCJwYXJzaW5nIHJlcG9ydCBkZXNjcmlwdG9yIGZhaWxlZFxuIik7Ci0JCWtmcmVlKHJkZXNjKTsKLQkJcmV0dXJuIE5VTEw7CisJCWdvdG8gZXJyOwogCX0KIAotCWtmcmVlKHJkZXNjKTsKIAloaWQtPnF1aXJrcyA9IHF1aXJrczsKIAotCWlmICghKHVzYmhpZCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB1c2JoaWRfZGV2aWNlKSwgR0ZQX0tFUk5FTCkpKQotCQlnb3RvIGZhaWxfbm9fdXNiaGlkOworCXJldHVybiAwOworZXJyOgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgdXNiaGlkX3N0YXJ0KHN0cnVjdCBoaWRfZGV2aWNlICpoaWQpCit7CisJc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYgPSB0b191c2JfaW50ZXJmYWNlKGhpZC0+ZGV2LnBhcmVudCk7CisJc3RydWN0IHVzYl9ob3N0X2ludGVyZmFjZSAqaW50ZXJmYWNlID0gaW50Zi0+Y3VyX2FsdHNldHRpbmc7CisJc3RydWN0IHVzYl9kZXZpY2UgKmRldiA9IGludGVyZmFjZV90b191c2JkZXYoaW50Zik7CisJc3RydWN0IHVzYmhpZF9kZXZpY2UgKnVzYmhpZDsKKwl1bnNpZ25lZCBpbnQgbiwgaW5zaXplID0gMDsKKwlpbnQgcmV0OworCisJV0FSTl9PTihoaWQtPmRyaXZlcl9kYXRhKTsKKworCXVzYmhpZCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB1c2JoaWRfZGV2aWNlKSwgR0ZQX0tFUk5FTCk7CisJaWYgKHVzYmhpZCA9PSBOVUxMKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gZXJyOworCX0KIAogCWhpZC0+ZHJpdmVyX2RhdGEgPSB1c2JoaWQ7CiAJdXNiaGlkLT5oaWQgPSBoaWQ7CkBAIC03OTksMjggKzgwNSwxMSBAQAogCQlpbnNpemUgPSBISURfTUFYX0JVRkZFUl9TSVpFOwogCiAJaWYgKGhpZF9hbGxvY19idWZmZXJzKGRldiwgaGlkKSkgewotCQloaWRfZnJlZV9idWZmZXJzKGRldiwgaGlkKTsKKwkJcmV0ID0gLUVOT01FTTsKIAkJZ290byBmYWlsOwogCX0KIAotCWhpZC0+bmFtZVswXSA9IDA7Ci0KLQlpZiAoZGV2LT5tYW51ZmFjdHVyZXIpCi0JCXN0cmxjcHkoaGlkLT5uYW1lLCBkZXYtPm1hbnVmYWN0dXJlciwgc2l6ZW9mKGhpZC0+bmFtZSkpOwotCi0JaWYgKGRldi0+cHJvZHVjdCkgewotCQlpZiAoZGV2LT5tYW51ZmFjdHVyZXIpCi0JCQlzdHJsY2F0KGhpZC0+bmFtZSwgIiAiLCBzaXplb2YoaGlkLT5uYW1lKSk7Ci0JCXN0cmxjYXQoaGlkLT5uYW1lLCBkZXYtPnByb2R1Y3QsIHNpemVvZihoaWQtPm5hbWUpKTsKLQl9Ci0KLQlpZiAoIXN0cmxlbihoaWQtPm5hbWUpKQotCQlzbnByaW50ZihoaWQtPm5hbWUsIHNpemVvZihoaWQtPm5hbWUpLCAiSElEICUwNHg6JTA0eCIsCi0JCQkgbGUxNl90b19jcHUoZGV2LT5kZXNjcmlwdG9yLmlkVmVuZG9yKSwKLQkJCSBsZTE2X3RvX2NwdShkZXYtPmRlc2NyaXB0b3IuaWRQcm9kdWN0KSk7Ci0KIAlmb3IgKG4gPSAwOyBuIDwgaW50ZXJmYWNlLT5kZXNjLmJOdW1FbmRwb2ludHM7IG4rKykgewotCiAJCXN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqZW5kcG9pbnQ7CiAJCWludCBwaXBlOwogCQlpbnQgaW50ZXJ2YWw7CkBAIC04MzIsNyArODIxLDcgQEAKIAkJaW50ZXJ2YWwgPSBlbmRwb2ludC0+YkludGVydmFsOwogCiAJCS8qIFNvbWUgdmVuZG9ycyBnaXZlIGZ1bGxzcGVlZCBpbnRlcnZhbCBvbiBoaWdoc3BlZWQgZGV2aWRlcyAqLwotCQlpZiAocXVpcmtzICYgSElEX1FVSVJLX0ZVTExTUEVFRF9JTlRFUlZBTCAgJiYKKwkJaWYgKGhpZC0+cXVpcmtzICYgSElEX1FVSVJLX0ZVTExTUEVFRF9JTlRFUlZBTCAmJgogCQkgICAgZGV2LT5zcGVlZCA9PSBVU0JfU1BFRURfSElHSCkgewogCQkJaW50ZXJ2YWwgPSBmbHMoZW5kcG9pbnQtPmJJbnRlcnZhbCo4KTsKIAkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBGaXhpbmcgZnVsbHNwZWVkIHRvIGhpZ2hzcGVlZCBpbnRlcnZhbDogJWQgLT4gJWRcbiIsCkBAIC04NDMsNiArODMyLDcgQEAKIAkJaWYgKGhpZC0+Y29sbGVjdGlvbi0+dXNhZ2UgPT0gSElEX0dEX01PVVNFICYmIGhpZF9tb3VzZXBvbGxfaW50ZXJ2YWwgPiAwKQogCQkJaW50ZXJ2YWwgPSBoaWRfbW91c2Vwb2xsX2ludGVydmFsOwogCisJCXJldCA9IC1FTk9NRU07CiAJCWlmICh1c2JfZW5kcG9pbnRfZGlyX2luKGVuZHBvaW50KSkgewogCQkJaWYgKHVzYmhpZC0+dXJiaW4pCiAJCQkJY29udGludWU7CkBAIC04NjgsNiArODU4LDcgQEAKIAogCWlmICghdXNiaGlkLT51cmJpbikgewogCQllcnJfaGlkKCJjb3VsZG4ndCBmaW5kIGFuIGlucHV0IGludGVycnVwdCBlbmRwb2ludCIpOworCQlyZXQgPSAtRU5PREVWOwogCQlnb3RvIGZhaWw7CiAJfQogCkBAIC04NzksNDQgKzg3MCwyNSBAQAogCXNwaW5fbG9ja19pbml0KCZ1c2JoaWQtPm91dGxvY2spOwogCXNwaW5fbG9ja19pbml0KCZ1c2JoaWQtPmN0cmxsb2NrKTsKIAotCWhpZC0+dmVyc2lvbiA9IGxlMTZfdG9fY3B1KGhkZXNjLT5iY2RISUQpOwotCWhpZC0+Y291bnRyeSA9IGhkZXNjLT5iQ291bnRyeUNvZGU7Ci0JaGlkLT5kZXYgPSAmaW50Zi0+ZGV2OwogCXVzYmhpZC0+aW50ZiA9IGludGY7CiAJdXNiaGlkLT5pZm51bSA9IGludGVyZmFjZS0+ZGVzYy5iSW50ZXJmYWNlTnVtYmVyOwogCi0JaGlkLT5idXMgPSBCVVNfVVNCOwotCWhpZC0+dmVuZG9yID0gbGUxNl90b19jcHUoZGV2LT5kZXNjcmlwdG9yLmlkVmVuZG9yKTsKLQloaWQtPnByb2R1Y3QgPSBsZTE2X3RvX2NwdShkZXYtPmRlc2NyaXB0b3IuaWRQcm9kdWN0KTsKLQotCXVzYl9tYWtlX3BhdGgoZGV2LCBoaWQtPnBoeXMsIHNpemVvZihoaWQtPnBoeXMpKTsKLQlzdHJsY2F0KGhpZC0+cGh5cywgIi9pbnB1dCIsIHNpemVvZihoaWQtPnBoeXMpKTsKLQlsZW4gPSBzdHJsZW4oaGlkLT5waHlzKTsKLQlpZiAobGVuIDwgc2l6ZW9mKGhpZC0+cGh5cykgLSAxKQotCQlzbnByaW50ZihoaWQtPnBoeXMgKyBsZW4sIHNpemVvZihoaWQtPnBoeXMpIC0gbGVuLAotCQkJICIlZCIsIGludGYtPmFsdHNldHRpbmdbMF0uZGVzYy5iSW50ZXJmYWNlTnVtYmVyKTsKLQotCWlmICh1c2Jfc3RyaW5nKGRldiwgZGV2LT5kZXNjcmlwdG9yLmlTZXJpYWxOdW1iZXIsIGhpZC0+dW5pcSwgNjQpIDw9IDApCi0JCWhpZC0+dW5pcVswXSA9IDA7Ci0KIAl1c2JoaWQtPnVyYmN0cmwgPSB1c2JfYWxsb2NfdXJiKDAsIEdGUF9LRVJORUwpOwotCWlmICghdXNiaGlkLT51cmJjdHJsKQorCWlmICghdXNiaGlkLT51cmJjdHJsKSB7CisJCXJldCA9IC1FTk9NRU07CiAJCWdvdG8gZmFpbDsKKwl9CiAKIAl1c2JfZmlsbF9jb250cm9sX3VyYih1c2JoaWQtPnVyYmN0cmwsIGRldiwgMCwgKHZvaWQgKikgdXNiaGlkLT5jciwKIAkJCSAgICAgdXNiaGlkLT5jdHJsYnVmLCAxLCBoaWRfY3RybCwgaGlkKTsKIAl1c2JoaWQtPnVyYmN0cmwtPnNldHVwX2RtYSA9IHVzYmhpZC0+Y3JfZG1hOwogCXVzYmhpZC0+dXJiY3RybC0+dHJhbnNmZXJfZG1hID0gdXNiaGlkLT5jdHJsYnVmX2RtYTsKIAl1c2JoaWQtPnVyYmN0cmwtPnRyYW5zZmVyX2ZsYWdzIHw9IChVUkJfTk9fVFJBTlNGRVJfRE1BX01BUCB8IFVSQl9OT19TRVRVUF9ETUFfTUFQKTsKLQloaWQtPmhpZGlucHV0X2lucHV0X2V2ZW50ID0gdXNiX2hpZGlucHV0X2lucHV0X2V2ZW50OwotCWhpZC0+aGlkX29wZW4gPSB1c2JoaWRfb3BlbjsKLQloaWQtPmhpZF9jbG9zZSA9IHVzYmhpZF9jbG9zZTsKLSNpZmRlZiBDT05GSUdfVVNCX0hJRERFVgotCWhpZC0+aGlkZGV2X2hpZF9ldmVudCA9IGhpZGRldl9oaWRfZXZlbnQ7Ci0JaGlkLT5oaWRkZXZfcmVwb3J0X2V2ZW50ID0gaGlkZGV2X3JlcG9ydF9ldmVudDsKLSNlbmRpZgotCWhpZC0+aGlkX291dHB1dF9yYXdfcmVwb3J0ID0gdXNiaGlkX291dHB1dF9yYXdfcmVwb3J0OwotCXJldHVybiBoaWQ7CisKKwl1c2JoaWRfaW5pdF9yZXBvcnRzKGhpZCk7CisJaGlkX2R1bXBfZGV2aWNlKGhpZCk7CisKKwlyZXR1cm4gMDsKIAogZmFpbDoKIAl1c2JfZnJlZV91cmIodXNiaGlkLT51cmJpbik7CkBAIC05MjQsMjQgKzg5NiwxOCBAQAogCXVzYl9mcmVlX3VyYih1c2JoaWQtPnVyYmN0cmwpOwogCWhpZF9mcmVlX2J1ZmZlcnMoZGV2LCBoaWQpOwogCWtmcmVlKHVzYmhpZCk7Ci1mYWlsX25vX3VzYmhpZDoKLQloaWRfZnJlZV9kZXZpY2UoaGlkKTsKLQotCXJldHVybiBOVUxMOworZXJyOgorCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyB2b2lkIGhpZF9kaXNjb25uZWN0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKQorc3RhdGljIHZvaWQgdXNiaGlkX3N0b3Aoc3RydWN0IGhpZF9kZXZpY2UgKmhpZCkKIHsKLQlzdHJ1Y3QgaGlkX2RldmljZSAqaGlkID0gdXNiX2dldF9pbnRmZGF0YSAoaW50Zik7Ci0Jc3RydWN0IHVzYmhpZF9kZXZpY2UgKnVzYmhpZDsKKwlzdHJ1Y3QgdXNiaGlkX2RldmljZSAqdXNiaGlkID0gaGlkLT5kcml2ZXJfZGF0YTsKIAotCWlmICghaGlkKQorCWlmIChXQVJOX09OKCF1c2JoaWQpKQogCQlyZXR1cm47CiAKLQl1c2JoaWQgPSBoaWQtPmRyaXZlcl9kYXRhOwotCiAJc3Bpbl9sb2NrX2lycSgmdXNiaGlkLT5pbmxvY2spOwkvKiBTeW5jIHdpdGggZXJyb3IgaGFuZGxlciAqLwotCXVzYl9zZXRfaW50ZmRhdGEoaW50ZiwgTlVMTCk7CiAJc2V0X2JpdChISURfRElTQ09OTkVDVEVELCAmdXNiaGlkLT5pb2ZsKTsKIAlzcGluX3VubG9ja19pcnEoJnVzYmhpZC0+aW5sb2NrKTsKIAl1c2Jfa2lsbF91cmIodXNiaGlkLT51cmJpbik7CkBAIC05NTgsODYgKzkyNCwxMDAgQEAKIAlpZiAoaGlkLT5jbGFpbWVkICYgSElEX0NMQUlNRURfSElEUkFXKQogCQloaWRyYXdfZGlzY29ubmVjdChoaWQpOwogCisJaGlkLT5jbGFpbWVkID0gMDsKKwogCXVzYl9mcmVlX3VyYih1c2JoaWQtPnVyYmluKTsKIAl1c2JfZnJlZV91cmIodXNiaGlkLT51cmJjdHJsKTsKIAl1c2JfZnJlZV91cmIodXNiaGlkLT51cmJvdXQpOwogCiAJaGlkX2ZyZWVfYnVmZmVycyhoaWRfdG9fdXNiX2RldihoaWQpLCBoaWQpOwogCWtmcmVlKHVzYmhpZCk7Ci0JaGlkX2ZyZWVfZGV2aWNlKGhpZCk7CisJaGlkLT5kcml2ZXJfZGF0YSA9IE5VTEw7CiB9CiAKK3N0YXRpYyBzdHJ1Y3QgaGlkX2xsX2RyaXZlciB1c2JfaGlkX2RyaXZlciA9IHsKKwkucGFyc2UgPSB1c2JoaWRfcGFyc2UsCisJLnN0YXJ0ID0gdXNiaGlkX3N0YXJ0LAorCS5zdG9wID0gdXNiaGlkX3N0b3AsCisJLm9wZW4gPSB1c2JoaWRfb3BlbiwKKwkuY2xvc2UgPSB1c2JoaWRfY2xvc2UsCisJLmhpZGlucHV0X2lucHV0X2V2ZW50ID0gdXNiX2hpZGlucHV0X2lucHV0X2V2ZW50LAorfTsKKwogc3RhdGljIGludCBoaWRfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKIHsKKwlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldihpbnRmKTsKIAlzdHJ1Y3QgaGlkX2RldmljZSAqaGlkOwotCWNoYXIgcGF0aFs2NF07Ci0JaW50IGk7Ci0JY2hhciAqYzsKKwlzaXplX3QgbGVuOworCWludCByZXQ7CiAKIAlkYmdfaGlkKCJISUQgcHJvYmUgY2FsbGVkIGZvciBpZm51bSAlZFxuIiwKIAkJCWludGYtPmFsdHNldHRpbmctPmRlc2MuYkludGVyZmFjZU51bWJlcik7CiAKLQlpZiAoIShoaWQgPSB1c2JfaGlkX2NvbmZpZ3VyZShpbnRmKSkpCi0JCXJldHVybiAtRU5PREVWOwotCi0JdXNiaGlkX2luaXRfcmVwb3J0cyhoaWQpOwotCWhpZF9kdW1wX2RldmljZShoaWQpOwotCWlmIChoaWQtPnF1aXJrcyAmIEhJRF9RVUlSS19SRVNFVF9MRURTKQotCQl1c2JoaWRfc2V0X2xlZHMoaGlkKTsKLQotCWlmICghaGlkaW5wdXRfY29ubmVjdChoaWQpKQotCQloaWQtPmNsYWltZWQgfD0gSElEX0NMQUlNRURfSU5QVVQ7Ci0JaWYgKCFoaWRkZXZfY29ubmVjdChoaWQpKQotCQloaWQtPmNsYWltZWQgfD0gSElEX0NMQUlNRURfSElEREVWOwotCWlmICghaGlkcmF3X2Nvbm5lY3QoaGlkKSkKLQkJaGlkLT5jbGFpbWVkIHw9IEhJRF9DTEFJTUVEX0hJRFJBVzsKKwloaWQgPSBoaWRfYWxsb2NhdGVfZGV2aWNlKCk7CisJaWYgKElTX0VSUihoaWQpKQorCQlyZXR1cm4gUFRSX0VSUihoaWQpOwogCiAJdXNiX3NldF9pbnRmZGF0YShpbnRmLCBoaWQpOworCWhpZC0+bGxfZHJpdmVyID0gJnVzYl9oaWRfZHJpdmVyOworCWhpZC0+aGlkX291dHB1dF9yYXdfcmVwb3J0ID0gdXNiaGlkX291dHB1dF9yYXdfcmVwb3J0OworCWhpZC0+ZmZfaW5pdCA9IGhpZF9waWRmZl9pbml0OworI2lmZGVmIENPTkZJR19VU0JfSElEREVWCisJaGlkLT5oaWRkZXZfY29ubmVjdCA9IGhpZGRldl9jb25uZWN0OworCWhpZC0+aGlkZGV2X2hpZF9ldmVudCA9IGhpZGRldl9oaWRfZXZlbnQ7CisJaGlkLT5oaWRkZXZfcmVwb3J0X2V2ZW50ID0gaGlkZGV2X3JlcG9ydF9ldmVudDsKKyNlbmRpZgorCWhpZC0+ZGV2LnBhcmVudCA9ICZpbnRmLT5kZXY7CisJaGlkLT5idXMgPSBCVVNfVVNCOworCWhpZC0+dmVuZG9yID0gbGUxNl90b19jcHUoZGV2LT5kZXNjcmlwdG9yLmlkVmVuZG9yKTsKKwloaWQtPnByb2R1Y3QgPSBsZTE2X3RvX2NwdShkZXYtPmRlc2NyaXB0b3IuaWRQcm9kdWN0KTsKKwloaWQtPm5hbWVbMF0gPSAwOwogCi0JaWYgKCFoaWQtPmNsYWltZWQpIHsKLQkJcHJpbnRrICgiSElEIGRldmljZSBjbGFpbWVkIGJ5IG5laXRoZXIgaW5wdXQsIGhpZGRldiBub3IgaGlkcmF3XG4iKTsKLQkJaGlkX2Rpc2Nvbm5lY3QoaW50Zik7Ci0JCXJldHVybiAtRU5PREVWOworCWlmIChkZXYtPm1hbnVmYWN0dXJlcikKKwkJc3RybGNweShoaWQtPm5hbWUsIGRldi0+bWFudWZhY3R1cmVyLCBzaXplb2YoaGlkLT5uYW1lKSk7CisKKwlpZiAoZGV2LT5wcm9kdWN0KSB7CisJCWlmIChkZXYtPm1hbnVmYWN0dXJlcikKKwkJCXN0cmxjYXQoaGlkLT5uYW1lLCAiICIsIHNpemVvZihoaWQtPm5hbWUpKTsKKwkJc3RybGNhdChoaWQtPm5hbWUsIGRldi0+cHJvZHVjdCwgc2l6ZW9mKGhpZC0+bmFtZSkpOwogCX0KIAotCWlmICgoaGlkLT5jbGFpbWVkICYgSElEX0NMQUlNRURfSU5QVVQpKQotCQloaWRfZmZfaW5pdChoaWQpOworCWlmICghc3RybGVuKGhpZC0+bmFtZSkpCisJCXNucHJpbnRmKGhpZC0+bmFtZSwgc2l6ZW9mKGhpZC0+bmFtZSksICJISUQgJTA0eDolMDR4IiwKKwkJCSBsZTE2X3RvX2NwdShkZXYtPmRlc2NyaXB0b3IuaWRWZW5kb3IpLAorCQkJIGxlMTZfdG9fY3B1KGRldi0+ZGVzY3JpcHRvci5pZFByb2R1Y3QpKTsKIAotCWlmIChoaWQtPnF1aXJrcyAmIEhJRF9RVUlSS19TT05ZX1BTM19DT05UUk9MTEVSKQotCQloaWRfZml4dXBfc29ueV9wczNfY29udHJvbGxlcihpbnRlcmZhY2VfdG9fdXNiZGV2KGludGYpLAotCQkJaW50Zi0+Y3VyX2FsdHNldHRpbmctPmRlc2MuYkludGVyZmFjZU51bWJlcik7CisJdXNiX21ha2VfcGF0aChkZXYsIGhpZC0+cGh5cywgc2l6ZW9mKGhpZC0+cGh5cykpOworCXN0cmxjYXQoaGlkLT5waHlzLCAiL2lucHV0Iiwgc2l6ZW9mKGhpZC0+cGh5cykpOworCWxlbiA9IHN0cmxlbihoaWQtPnBoeXMpOworCWlmIChsZW4gPCBzaXplb2YoaGlkLT5waHlzKSAtIDEpCisJCXNucHJpbnRmKGhpZC0+cGh5cyArIGxlbiwgc2l6ZW9mKGhpZC0+cGh5cykgLSBsZW4sCisJCQkgIiVkIiwgaW50Zi0+YWx0c2V0dGluZ1swXS5kZXNjLmJJbnRlcmZhY2VOdW1iZXIpOwogCi0JcHJpbnRrKEtFUk5fSU5GTyk7CisJaWYgKHVzYl9zdHJpbmcoZGV2LCBkZXYtPmRlc2NyaXB0b3IuaVNlcmlhbE51bWJlciwgaGlkLT51bmlxLCA2NCkgPD0gMCkKKwkJaGlkLT51bmlxWzBdID0gMDsKIAotCWlmIChoaWQtPmNsYWltZWQgJiBISURfQ0xBSU1FRF9JTlBVVCkKLQkJcHJpbnRrKCJpbnB1dCIpOwotCWlmICgoaGlkLT5jbGFpbWVkICYgSElEX0NMQUlNRURfSU5QVVQpICYmICgoaGlkLT5jbGFpbWVkICYgSElEX0NMQUlNRURfSElEREVWKSB8fAotCQkJCWhpZC0+Y2xhaW1lZCAmIEhJRF9DTEFJTUVEX0hJRFJBVykpCi0JCXByaW50aygiLCIpOwotCWlmIChoaWQtPmNsYWltZWQgJiBISURfQ0xBSU1FRF9ISURERVYpCi0JCXByaW50aygiaGlkZGV2JWQiLCBoaWQtPm1pbm9yKTsKLQlpZiAoKGhpZC0+Y2xhaW1lZCAmIEhJRF9DTEFJTUVEX0lOUFVUKSAmJiAoaGlkLT5jbGFpbWVkICYgSElEX0NMQUlNRURfSElEREVWKSAmJgotCQkJKGhpZC0+Y2xhaW1lZCAmIEhJRF9DTEFJTUVEX0hJRFJBVykpCi0JCXByaW50aygiLCIpOwotCWlmIChoaWQtPmNsYWltZWQgJiBISURfQ0xBSU1FRF9ISURSQVcpCi0JCXByaW50aygiaGlkcmF3JWQiLCAoKHN0cnVjdCBoaWRyYXcqKWhpZC0+aGlkcmF3KS0+bWlub3IpOwotCi0JYyA9ICJEZXZpY2UiOwotCWZvciAoaSA9IDA7IGkgPCBoaWQtPm1heGNvbGxlY3Rpb247IGkrKykgewotCQlpZiAoaGlkLT5jb2xsZWN0aW9uW2ldLnR5cGUgPT0gSElEX0NPTExFQ1RJT05fQVBQTElDQVRJT04gJiYKLQkJICAgIChoaWQtPmNvbGxlY3Rpb25baV0udXNhZ2UgJiBISURfVVNBR0VfUEFHRSkgPT0gSElEX1VQX0dFTkRFU0sgJiYKLQkJICAgIChoaWQtPmNvbGxlY3Rpb25baV0udXNhZ2UgJiAweGZmZmYpIDwgQVJSQVlfU0laRShoaWRfdHlwZXMpKSB7Ci0JCQljID0gaGlkX3R5cGVzW2hpZC0+Y29sbGVjdGlvbltpXS51c2FnZSAmIDB4ZmZmZl07Ci0JCQlicmVhazsKLQkJfQorCXJldCA9IGhpZF9hZGRfZGV2aWNlKGhpZCk7CisJaWYgKHJldCkgeworCQlpZiAocmV0ICE9IC1FTk9ERVYpCisJCQlkZXZfZXJyKCZpbnRmLT5kZXYsICJjYW4ndCBhZGQgaGlkIGRldmljZTogJWRcbiIsIHJldCk7CisJCWdvdG8gZXJyOwogCX0KIAotCXVzYl9tYWtlX3BhdGgoaW50ZXJmYWNlX3RvX3VzYmRldihpbnRmKSwgcGF0aCwgNjMpOwotCi0JcHJpbnRrKCI6IFVTQiBISUQgdiV4LiUwMnggJXMgWyVzXSBvbiAlc1xuIiwKLQkJaGlkLT52ZXJzaW9uID4+IDgsIGhpZC0+dmVyc2lvbiAmIDB4ZmYsIGMsIGhpZC0+bmFtZSwgcGF0aCk7Ci0KIAlyZXR1cm4gMDsKK2VycjoKKwloaWRfZGVzdHJveV9kZXZpY2UoaGlkKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBoaWRfZGlzY29ubmVjdChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKK3sKKwlzdHJ1Y3QgaGlkX2RldmljZSAqaGlkID0gdXNiX2dldF9pbnRmZGF0YShpbnRmKTsKKworCWlmIChXQVJOX09OKCFoaWQpKQorCQlyZXR1cm47CisKKwloaWRfZGVzdHJveV9kZXZpY2UoaGlkKTsKIH0KIAogc3RhdGljIGludCBoaWRfc3VzcGVuZChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwgcG1fbWVzc2FnZV90IG1lc3NhZ2UpCkBAIC0xMTA3LDkgKzEwODcsMjIgQEAKIAkuc3VwcG9ydHNfYXV0b3N1c3BlbmQgPSAxLAogfTsKIAorc3RhdGljIGNvbnN0IHN0cnVjdCBoaWRfZGV2aWNlX2lkIGhpZF91c2JfdGFibGVbXSA9IHsKKwl7IEhJRF9VU0JfREVWSUNFKEhJRF9BTllfSUQsIEhJRF9BTllfSUQpIH0sCisJeyB9Cit9OworCitzdGF0aWMgc3RydWN0IGhpZF9kcml2ZXIgaGlkX3VzYl9kcml2ZXIgPSB7CisJLm5hbWUgPSAiZ2VuZXJpYy11c2IiLAorCS5pZF90YWJsZSA9IGhpZF91c2JfdGFibGUsCit9OworCiBzdGF0aWMgaW50IF9faW5pdCBoaWRfaW5pdCh2b2lkKQogewogCWludCByZXR2YWw7CisJcmV0dmFsID0gaGlkX3JlZ2lzdGVyX2RyaXZlcigmaGlkX3VzYl9kcml2ZXIpOworCWlmIChyZXR2YWwpCisJCWdvdG8gaGlkX3JlZ2lzdGVyX2ZhaWw7CiAJcmV0dmFsID0gdXNiaGlkX3F1aXJrc19pbml0KHF1aXJrc19wYXJhbSk7CiAJaWYgKHJldHZhbCkKIAkJZ290byB1c2JoaWRfcXVpcmtzX2luaXRfZmFpbDsKQEAgLTExMTksNyArMTExMiw4IEBACiAJcmV0dmFsID0gdXNiX3JlZ2lzdGVyKCZoaWRfZHJpdmVyKTsKIAlpZiAocmV0dmFsKQogCQlnb3RvIHVzYl9yZWdpc3Rlcl9mYWlsOwotCWluZm8oRFJJVkVSX1ZFUlNJT04gIjoiIERSSVZFUl9ERVNDKTsKKwlwcmludGsoS0VSTl9JTkZPIEtCVUlMRF9NT0ROQU1FICI6ICIgRFJJVkVSX1ZFUlNJT04gIjoiCisJCQlEUklWRVJfREVTQyAiXG4iKTsKIAogCXJldHVybiAwOwogdXNiX3JlZ2lzdGVyX2ZhaWw6CkBAIC0xMTI3LDYgKzExMjEsOCBAQAogaGlkZGV2X2luaXRfZmFpbDoKIAl1c2JoaWRfcXVpcmtzX2V4aXQoKTsKIHVzYmhpZF9xdWlya3NfaW5pdF9mYWlsOgorCWhpZF91bnJlZ2lzdGVyX2RyaXZlcigmaGlkX3VzYl9kcml2ZXIpOworaGlkX3JlZ2lzdGVyX2ZhaWw6CiAJcmV0dXJuIHJldHZhbDsKIH0KIApAQCAtMTEzNSw2ICsxMTMxLDcgQEAKIAl1c2JfZGVyZWdpc3RlcigmaGlkX2RyaXZlcik7CiAJaGlkZGV2X2V4aXQoKTsKIAl1c2JoaWRfcXVpcmtzX2V4aXQoKTsKKwloaWRfdW5yZWdpc3Rlcl9kcml2ZXIoJmhpZF91c2JfZHJpdmVyKTsKIH0KIAogbW9kdWxlX2luaXQoaGlkX2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9oaWQvdXNiaGlkL2hpZC1mZi5jIGIvZHJpdmVycy9oaWQvdXNiaGlkL2hpZC1mZi5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZDBkYWM1Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvaGlkL3VzYmhpZC9oaWQtZmYuYworKysgL2Rldi9udWxsCkBAIC0xLDk1ICswLDAgQEAKLS8qCi0gKiAgRm9yY2UgZmVlZGJhY2sgc3VwcG9ydCBmb3IgaGlkIGRldmljZXMuCi0gKiAgTm90IGFsbCBoaWQgZGV2aWNlcyB1c2UgdGhlIHNhbWUgcHJvdG9jb2wuIEZvciBleGFtcGxlLCBzb21lIHVzZSBQSUQsCi0gKiAgb3RoZXIgdXNlIHRoZWlyIG93biBwcm9wcmlldGFyeSBwcm9jb3RvbC4KLSAqCi0gKiAgQ29weXJpZ2h0IChjKSAyMDAyLTIwMDQgSm9oYW5uIERlbmV1eAotICovCi0KLS8qCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQotICoKLSAqIFNob3VsZCB5b3UgbmVlZCB0byBjb250YWN0IG1lLCB0aGUgYXV0aG9yLCB5b3UgY2FuIGRvIHNvIGJ5Ci0gKiBlLW1haWwgLSBtYWlsIHlvdXIgbWVzc2FnZSB0byA8am9oYW5uLmRlbmV1eEBpdC51dS5zZT4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KLQotI3VuZGVmIERFQlVHCi0jaW5jbHVkZSA8bGludXgvdXNiLmg+Ci0KLSNpbmNsdWRlIDxsaW51eC9oaWQuaD4KLSNpbmNsdWRlICJ1c2JoaWQuaCIKLQotLyoKLSAqIFRoaXMgdGFibGUgY29udGFpbnMgcG9pbnRlcnMgdG8gaW5pdGlhbGl6ZXJzLiBUbyBhZGQgc3VwcG9ydCBmb3IgbmV3Ci0gKiBkZXZpY2VzLCB5b3UgbmVlZCB0byBhZGQgdGhlIFVTQiB2ZW5kb3IgYW5kIHByb2R1Y3QgaWRzIGhlcmUuCi0gKi8KLXN0cnVjdCBoaWRfZmZfaW5pdGlhbGl6ZXIgewotCXUxNiBpZFZlbmRvcjsKLQl1MTYgaWRQcm9kdWN0OwotCWludCAoKmluaXQpKHN0cnVjdCBoaWRfZGV2aWNlKik7Ci19OwotCi0vKgotICogV2UgdHJ5IHBpZGZmIHdoZW4gbm8gb3RoZXIgZHJpdmVyIGlzIGZvdW5kIGJlY2F1c2UgUElEIGlzIHRoZQotICogc3RhbmRhcmRzIGNvbXBsaWFudCB3YXkgb2YgaW1wbGVtZW50aW5nIGZvcmNlIGZlZWRiYWNrIGluIEhJRC4KLSAqIHBpZGZmX2luaXQoKSB3aWxsIHF1aWNrbHkgYWJvcnQgaWYgdGhlIGRldmljZSBkb2Vzbid0IGFwcGVhciB0bwotICogYmUgYSBQSUQgZGV2aWNlCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgaGlkX2ZmX2luaXRpYWxpemVyIGluaXRzW10gPSB7Ci0jaWZkZWYgQ09ORklHX0xPR0lURUNIX0ZGCi0JeyAweDQ2ZCwgMHhjMjExLCBoaWRfbGdmZl9pbml0IH0sIC8qIExvZ2l0ZWNoIENvcmRsZXNzIHJ1bWJsZSBwYWQgKi8KLQl7IDB4NDZkLCAweGMyMTksIGhpZF9sZ2ZmX2luaXQgfSwgLyogTG9naXRlY2ggQ29yZGxlc3MgcnVtYmxlIHBhZCAyICovCi0JeyAweDQ2ZCwgMHhjMjgzLCBoaWRfbGdmZl9pbml0IH0sIC8qIExvZ2l0ZWNoIFdpbmdtYW4gRm9yY2UgM2QgKi8KLQl7IDB4NDZkLCAweGMyODYsIGhpZF9sZ2ZmX2luaXQgfSwgLyogTG9naXRlY2ggRm9yY2UgM0QgUHJvIEpveXN0aWNrICovCi0JeyAweDQ2ZCwgMHhjMjk0LCBoaWRfbGdmZl9pbml0IH0sIC8qIExvZ2l0ZWNoIEZvcm11bGEgRm9yY2UgRVggKi8KLQl7IDB4NDZkLCAweGMyOTUsIGhpZF9sZ2ZmX2luaXQgfSwgLyogTG9naXRlY2ggTU9NTyBmb3JjZSB3aGVlbCAqLwotCXsgMHg0NmQsIDB4Y2EwMywgaGlkX2xnZmZfaW5pdCB9LCAvKiBMb2dpdGVjaCBNT01PIGZvcmNlIHdoZWVsICovCi0jZW5kaWYKLSNpZmRlZiBDT05GSUdfTE9HSVJVTUJMRVBBRDJfRkYKLQl7IDB4NDZkLCAweGMyMTgsIGhpZF9sZzJmZl9pbml0IH0sIC8qIExvZ2l0ZWNoIFJ1bWJsZXBhZCAyICovCi0jZW5kaWYKLSNpZmRlZiBDT05GSUdfUEFOVEhFUkxPUkRfRkYKLQl7IDB4ODEwLCAweDAwMDEsIGhpZF9wbGZmX2luaXQgfSwgLyogIlR3aW4gVVNCIEpveXN0aWNrIiAqLwotCXsgMHhlOGYsIDB4MDAwMywgaGlkX3BsZmZfaW5pdCB9LCAvKiAiR3JlZW5Bc2lhIEluYy4gICAgVVNCIEpveXN0aWNrICAgICAiICovCi0jZW5kaWYKLSNpZmRlZiBDT05GSUdfVEhSVVNUTUFTVEVSX0ZGCi0JeyAweDQ0ZiwgMHhiMzAwLCBoaWRfdG1mZl9pbml0IH0sCi0JeyAweDQ0ZiwgMHhiMzA0LCBoaWRfdG1mZl9pbml0IH0sCi0JeyAweDQ0ZiwgMHhiNjUxLCBoaWRfdG1mZl9pbml0IH0sIC8qIEZHVCBSdW1ibGUgRm9yY2UgV2hlZWwgKi8KLQl7IDB4NDRmLCAweGI2NTQsIGhpZF90bWZmX2luaXQgfSwgLyogRkdUIEZvcmNlIEZlZWRiYWNrIFdoZWVsICovCi0jZW5kaWYKLSNpZmRlZiBDT05GSUdfWkVST1BMVVNfRkYKLQl7IDB4YzEyLCAweDAwMDUsIGhpZF96cGZmX2luaXQgfSwKLQl7IDB4YzEyLCAweDAwMzAsIGhpZF96cGZmX2luaXQgfSwKLSNlbmRpZgotCXsgMCwJIDAsCSBoaWRfcGlkZmZfaW5pdH0gIC8qIE1hdGNoZXMgYW55dGhpbmcgKi8KLX07Ci0KLWludCBoaWRfZmZfaW5pdChzdHJ1Y3QgaGlkX2RldmljZSogaGlkKQotewotCXN0cnVjdCBoaWRfZmZfaW5pdGlhbGl6ZXIgKmluaXQ7Ci0JaW50IHZlbmRvciA9IGxlMTZfdG9fY3B1KGhpZF90b191c2JfZGV2KGhpZCktPmRlc2NyaXB0b3IuaWRWZW5kb3IpOwotCWludCBwcm9kdWN0ID0gbGUxNl90b19jcHUoaGlkX3RvX3VzYl9kZXYoaGlkKS0+ZGVzY3JpcHRvci5pZFByb2R1Y3QpOwotCi0JZm9yIChpbml0ID0gaW5pdHM7IGluaXQtPmlkVmVuZG9yOyBpbml0KyspCi0JCWlmIChpbml0LT5pZFZlbmRvciA9PSB2ZW5kb3IgJiYgaW5pdC0+aWRQcm9kdWN0ID09IHByb2R1Y3QpCi0JCQlicmVhazsKLQotCXJldHVybiBpbml0LT5pbml0KGhpZCk7Ci19Ci1FWFBPUlRfU1lNQk9MX0dQTChoaWRfZmZfaW5pdCk7Ci0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaGlkL3VzYmhpZC9oaWQtbGcyZmYuYyBiL2RyaXZlcnMvaGlkL3VzYmhpZC9oaWQtbGcyZmYuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDQ2OWJkMC4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL2hpZC91c2JoaWQvaGlkLWxnMmZmLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxMTQgKzAsMCBAQAotLyoKLSAqICBGb3JjZSBmZWVkYmFjayBzdXBwb3J0IGZvciBMb2dpdGVjaCBSdW1ibGVwYWQgMgotICoKLSAqICBDb3B5cmlnaHQgKGMpIDIwMDggQW5zc2kgSGFubnVsYSA8YW5zc2kuaGFubnVsYUBnbWFpbC5jb20+Ci0gKi8KLQotLyoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCi0gKi8KLQotCi0jaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KLSNpbmNsdWRlIDxsaW51eC91c2IuaD4KLSNpbmNsdWRlIDxsaW51eC9oaWQuaD4KLSNpbmNsdWRlICJ1c2JoaWQuaCIKLQotc3RydWN0IGxnMmZmX2RldmljZSB7Ci0Jc3RydWN0IGhpZF9yZXBvcnQgKnJlcG9ydDsKLX07Ci0KLXN0YXRpYyBpbnQgcGxheV9lZmZlY3Qoc3RydWN0IGlucHV0X2RldiAqZGV2LCB2b2lkICpkYXRhLAotCQkJIHN0cnVjdCBmZl9lZmZlY3QgKmVmZmVjdCkKLXsKLQlzdHJ1Y3QgaGlkX2RldmljZSAqaGlkID0gaW5wdXRfZ2V0X2RydmRhdGEoZGV2KTsKLQlzdHJ1Y3QgbGcyZmZfZGV2aWNlICpsZzJmZiA9IGRhdGE7Ci0JaW50IHdlYWssIHN0cm9uZzsKLQotCXN0cm9uZyA9IGVmZmVjdC0+dS5ydW1ibGUuc3Ryb25nX21hZ25pdHVkZTsKLQl3ZWFrID0gZWZmZWN0LT51LnJ1bWJsZS53ZWFrX21hZ25pdHVkZTsKLQotCWlmICh3ZWFrIHx8IHN0cm9uZykgewotCQl3ZWFrID0gd2VhayAqIDB4ZmYgLyAweGZmZmY7Ci0JCXN0cm9uZyA9IHN0cm9uZyAqIDB4ZmYgLyAweGZmZmY7Ci0KLQkJbGcyZmYtPnJlcG9ydC0+ZmllbGRbMF0tPnZhbHVlWzBdID0gMHg1MTsKLQkJbGcyZmYtPnJlcG9ydC0+ZmllbGRbMF0tPnZhbHVlWzJdID0gd2VhazsKLQkJbGcyZmYtPnJlcG9ydC0+ZmllbGRbMF0tPnZhbHVlWzRdID0gc3Ryb25nOwotCX0gZWxzZSB7Ci0JCWxnMmZmLT5yZXBvcnQtPmZpZWxkWzBdLT52YWx1ZVswXSA9IDB4ZjM7Ci0JCWxnMmZmLT5yZXBvcnQtPmZpZWxkWzBdLT52YWx1ZVsyXSA9IDB4MDA7Ci0JCWxnMmZmLT5yZXBvcnQtPmZpZWxkWzBdLT52YWx1ZVs0XSA9IDB4MDA7Ci0JfQotCi0JdXNiaGlkX3N1Ym1pdF9yZXBvcnQoaGlkLCBsZzJmZi0+cmVwb3J0LCBVU0JfRElSX09VVCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLWludCBoaWRfbGcyZmZfaW5pdChzdHJ1Y3QgaGlkX2RldmljZSAqaGlkKQotewotCXN0cnVjdCBsZzJmZl9kZXZpY2UgKmxnMmZmOwotCXN0cnVjdCBoaWRfcmVwb3J0ICpyZXBvcnQ7Ci0Jc3RydWN0IGhpZF9pbnB1dCAqaGlkaW5wdXQgPSBsaXN0X2VudHJ5KGhpZC0+aW5wdXRzLm5leHQsCi0JCQkJCQlzdHJ1Y3QgaGlkX2lucHV0LCBsaXN0KTsKLQlzdHJ1Y3QgbGlzdF9oZWFkICpyZXBvcnRfbGlzdCA9Ci0JCQkmaGlkLT5yZXBvcnRfZW51bVtISURfT1VUUFVUX1JFUE9SVF0ucmVwb3J0X2xpc3Q7Ci0Jc3RydWN0IGlucHV0X2RldiAqZGV2ID0gaGlkaW5wdXQtPmlucHV0OwotCWludCBlcnJvcjsKLQotCWlmIChsaXN0X2VtcHR5KHJlcG9ydF9saXN0KSkgewotCQlwcmludGsoS0VSTl9FUlIgImhpZC1sZzJmZjogbm8gb3V0cHV0IHJlcG9ydCBmb3VuZFxuIik7Ci0JCXJldHVybiAtRU5PREVWOwotCX0KLQotCXJlcG9ydCA9IGxpc3RfZW50cnkocmVwb3J0X2xpc3QtPm5leHQsIHN0cnVjdCBoaWRfcmVwb3J0LCBsaXN0KTsKLQotCWlmIChyZXBvcnQtPm1heGZpZWxkIDwgMSkgewotCQlwcmludGsoS0VSTl9FUlIgImhpZC1sZzJmZjogb3V0cHV0IHJlcG9ydCBpcyBlbXB0eVxuIik7Ci0JCXJldHVybiAtRU5PREVWOwotCX0KLQlpZiAocmVwb3J0LT5maWVsZFswXS0+cmVwb3J0X2NvdW50IDwgNykgewotCQlwcmludGsoS0VSTl9FUlIgImhpZC1sZzJmZjogbm90IGVub3VnaCB2YWx1ZXMgaW4gdGhlIGZpZWxkXG4iKTsKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JfQotCi0JbGcyZmYgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgbGcyZmZfZGV2aWNlKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFsZzJmZikKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQlzZXRfYml0KEZGX1JVTUJMRSwgZGV2LT5mZmJpdCk7Ci0KLQllcnJvciA9IGlucHV0X2ZmX2NyZWF0ZV9tZW1sZXNzKGRldiwgbGcyZmYsIHBsYXlfZWZmZWN0KTsKLQlpZiAoZXJyb3IpIHsKLQkJa2ZyZWUobGcyZmYpOwotCQlyZXR1cm4gZXJyb3I7Ci0JfQotCi0JbGcyZmYtPnJlcG9ydCA9IHJlcG9ydDsKLQlyZXBvcnQtPmZpZWxkWzBdLT52YWx1ZVswXSA9IDB4ZjM7Ci0JcmVwb3J0LT5maWVsZFswXS0+dmFsdWVbMV0gPSAweDAwOwotCXJlcG9ydC0+ZmllbGRbMF0tPnZhbHVlWzJdID0gMHgwMDsKLQlyZXBvcnQtPmZpZWxkWzBdLT52YWx1ZVszXSA9IDB4MDA7Ci0JcmVwb3J0LT5maWVsZFswXS0+dmFsdWVbNF0gPSAweDAwOwotCXJlcG9ydC0+ZmllbGRbMF0tPnZhbHVlWzVdID0gMHgwMDsKLQlyZXBvcnQtPmZpZWxkWzBdLT52YWx1ZVs2XSA9IDB4MDA7Ci0KLQl1c2JoaWRfc3VibWl0X3JlcG9ydChoaWQsIHJlcG9ydCwgVVNCX0RJUl9PVVQpOwotCi0JcHJpbnRrKEtFUk5fSU5GTyAiRm9yY2UgZmVlZGJhY2sgZm9yIExvZ2l0ZWNoIFJ1bWJsZXBhZCAyIGJ5ICIKLQkgICAgICAgIkFuc3NpIEhhbm51bGEgPGFuc3NpLmhhbm51bGFAZ21haWwuY29tPlxuIik7Ci0KLQlyZXR1cm4gMDsKLX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaGlkL3VzYmhpZC9oaWQtbGdmZi5jIGIvZHJpdmVycy9oaWQvdXNiaGlkL2hpZC1sZ2ZmLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRiN2FiNmEuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9oaWQvdXNiaGlkL2hpZC1sZ2ZmLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxNTEgKzAsMCBAQAotLyoKLSAqIEZvcmNlIGZlZWRiYWNrIHN1cHBvcnQgZm9yIGhpZC1jb21wbGlhbnQgZm9yIHNvbWUgb2YgdGhlIGRldmljZXMgZnJvbQotICogTG9naXRlY2gsIG5hbWVseToKLSAqIC0gV2luZ01hbiBDb3JkbGVzcyBSdW1ibGVQYWQKLSAqIC0gV2luZ01hbiBGb3JjZSAzRAotICoKLSAqICBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNCBKb2hhbm4gRGVuZXV4Ci0gKiAgQ29weXJpZ2h0IChjKSAyMDA2IEFuc3NpIEhhbm51bGEgPGFuc3NpLmhhbm51bGFAZ21haWwuY29tPgotICovCi0KLS8qCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQotICoKLSAqIFNob3VsZCB5b3UgbmVlZCB0byBjb250YWN0IG1lLCB0aGUgYXV0aG9yLCB5b3UgY2FuIGRvIHNvIGJ5Ci0gKiBlLW1haWwgLSBtYWlsIHlvdXIgbWVzc2FnZSB0byA8am9oYW5uLmRlbmV1eEBpdC51dS5zZT4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KLSNpbmNsdWRlIDxsaW51eC91c2IuaD4KLSNpbmNsdWRlIDxsaW51eC9oaWQuaD4KLSNpbmNsdWRlICJ1c2JoaWQuaCIKLQotc3RydWN0IGRldl90eXBlIHsKLQl1MTYgaWRWZW5kb3I7Ci0JdTE2IGlkUHJvZHVjdDsKLQljb25zdCBzaWduZWQgc2hvcnQgKmZmOwotfTsKLQotc3RhdGljIGNvbnN0IHNpZ25lZCBzaG9ydCBmZl9ydW1ibGVbXSA9IHsKLQlGRl9SVU1CTEUsCi0JLTEKLX07Ci0KLXN0YXRpYyBjb25zdCBzaWduZWQgc2hvcnQgZmZfam95c3RpY2tbXSA9IHsKLQlGRl9DT05TVEFOVCwKLQktMQotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBkZXZfdHlwZSBkZXZpY2VzW10gPSB7Ci0JeyAweDA0NmQsIDB4YzIxMSwgZmZfcnVtYmxlIH0sCi0JeyAweDA0NmQsIDB4YzIxOSwgZmZfcnVtYmxlIH0sCi0JeyAweDA0NmQsIDB4YzI4MywgZmZfam95c3RpY2sgfSwKLQl7IDB4MDQ2ZCwgMHhjMjg2LCBmZl9qb3lzdGljayB9LAotCXsgMHgwNDZkLCAweGMyOTQsIGZmX2pveXN0aWNrIH0sCi0JeyAweDA0NmQsIDB4YzI5NSwgZmZfam95c3RpY2sgfSwKLQl7IDB4MDQ2ZCwgMHhjYTAzLCBmZl9qb3lzdGljayB9LAotfTsKLQotc3RhdGljIGludCBoaWRfbGdmZl9wbGF5KHN0cnVjdCBpbnB1dF9kZXYgKmRldiwgdm9pZCAqZGF0YSwgc3RydWN0IGZmX2VmZmVjdCAqZWZmZWN0KQotewotCXN0cnVjdCBoaWRfZGV2aWNlICpoaWQgPSBpbnB1dF9nZXRfZHJ2ZGF0YShkZXYpOwotCXN0cnVjdCBsaXN0X2hlYWQgKnJlcG9ydF9saXN0ID0gJmhpZC0+cmVwb3J0X2VudW1bSElEX09VVFBVVF9SRVBPUlRdLnJlcG9ydF9saXN0OwotCXN0cnVjdCBoaWRfcmVwb3J0ICpyZXBvcnQgPSBsaXN0X2VudHJ5KHJlcG9ydF9saXN0LT5uZXh0LCBzdHJ1Y3QgaGlkX3JlcG9ydCwgbGlzdCk7Ci0JaW50IHgsIHk7Ci0JdW5zaWduZWQgaW50IGxlZnQsIHJpZ2h0OwotCi0jZGVmaW5lIENMQU1QKHgpIGlmICh4IDwgMCkgeCA9IDA7IGlmICh4ID4gMHhmZikgeCA9IDB4ZmYKLQotCXN3aXRjaCAoZWZmZWN0LT50eXBlKSB7Ci0JY2FzZSBGRl9DT05TVEFOVDoKLQkJeCA9IGVmZmVjdC0+dS5yYW1wLnN0YXJ0X2xldmVsICsgMHg3ZjsJLyogMHg3ZiBpcyBjZW50ZXIgKi8KLQkJeSA9IGVmZmVjdC0+dS5yYW1wLmVuZF9sZXZlbCArIDB4N2Y7Ci0JCUNMQU1QKHgpOwotCQlDTEFNUCh5KTsKLQkJcmVwb3J0LT5maWVsZFswXS0+dmFsdWVbMF0gPSAweDUxOwotCQlyZXBvcnQtPmZpZWxkWzBdLT52YWx1ZVsxXSA9IDB4MDg7Ci0JCXJlcG9ydC0+ZmllbGRbMF0tPnZhbHVlWzJdID0geDsKLQkJcmVwb3J0LT5maWVsZFswXS0+dmFsdWVbM10gPSB5OwotCQlkYmdfaGlkKCIoeCwgeSk9KCUwNHgsICUwNHgpXG4iLCB4LCB5KTsKLQkJdXNiaGlkX3N1Ym1pdF9yZXBvcnQoaGlkLCByZXBvcnQsIFVTQl9ESVJfT1VUKTsKLQkJYnJlYWs7Ci0KLQljYXNlIEZGX1JVTUJMRToKLQkJcmlnaHQgPSBlZmZlY3QtPnUucnVtYmxlLnN0cm9uZ19tYWduaXR1ZGU7Ci0JCWxlZnQgPSBlZmZlY3QtPnUucnVtYmxlLndlYWtfbWFnbml0dWRlOwotCQlyaWdodCA9IHJpZ2h0ICogMHhmZiAvIDB4ZmZmZjsKLQkJbGVmdCA9IGxlZnQgKiAweGZmIC8gMHhmZmZmOwotCQlDTEFNUChsZWZ0KTsKLQkJQ0xBTVAocmlnaHQpOwotCQlyZXBvcnQtPmZpZWxkWzBdLT52YWx1ZVswXSA9IDB4NDI7Ci0JCXJlcG9ydC0+ZmllbGRbMF0tPnZhbHVlWzFdID0gMHgwMDsKLQkJcmVwb3J0LT5maWVsZFswXS0+dmFsdWVbMl0gPSBsZWZ0OwotCQlyZXBvcnQtPmZpZWxkWzBdLT52YWx1ZVszXSA9IHJpZ2h0OwotCQlkYmdfaGlkKCIobGVmdCwgcmlnaHQpPSglMDR4LCAlMDR4KVxuIiwgbGVmdCwgcmlnaHQpOwotCQl1c2JoaWRfc3VibWl0X3JlcG9ydChoaWQsIHJlcG9ydCwgVVNCX0RJUl9PVVQpOwotCQlicmVhazsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KLWludCBoaWRfbGdmZl9pbml0KHN0cnVjdCBoaWRfZGV2aWNlKiBoaWQpCi17Ci0Jc3RydWN0IGhpZF9pbnB1dCAqaGlkaW5wdXQgPSBsaXN0X2VudHJ5KGhpZC0+aW5wdXRzLm5leHQsIHN0cnVjdCBoaWRfaW5wdXQsIGxpc3QpOwotCXN0cnVjdCBsaXN0X2hlYWQgKnJlcG9ydF9saXN0ID0gJmhpZC0+cmVwb3J0X2VudW1bSElEX09VVFBVVF9SRVBPUlRdLnJlcG9ydF9saXN0OwotCXN0cnVjdCBpbnB1dF9kZXYgKmRldiA9IGhpZGlucHV0LT5pbnB1dDsKLQlzdHJ1Y3QgaGlkX3JlcG9ydCAqcmVwb3J0OwotCXN0cnVjdCBoaWRfZmllbGQgKmZpZWxkOwotCWNvbnN0IHNpZ25lZCBzaG9ydCAqZmZfYml0cyA9IGZmX2pveXN0aWNrOwotCWludCBlcnJvcjsKLQlpbnQgaTsKLQotCS8qIEZpbmQgdGhlIHJlcG9ydCB0byB1c2UgKi8KLQlpZiAobGlzdF9lbXB0eShyZXBvcnRfbGlzdCkpIHsKLQkJZXJyX2hpZCgiTm8gb3V0cHV0IHJlcG9ydCBmb3VuZCIpOwotCQlyZXR1cm4gLTE7Ci0JfQotCi0JLyogQ2hlY2sgdGhhdCB0aGUgcmVwb3J0IGxvb2tzIG9rICovCi0JcmVwb3J0ID0gbGlzdF9lbnRyeShyZXBvcnRfbGlzdC0+bmV4dCwgc3RydWN0IGhpZF9yZXBvcnQsIGxpc3QpOwotCWlmICghcmVwb3J0KSB7Ci0JCWVycl9oaWQoIk5VTEwgb3V0cHV0IHJlcG9ydCIpOwotCQlyZXR1cm4gLTE7Ci0JfQotCi0JZmllbGQgPSByZXBvcnQtPmZpZWxkWzBdOwotCWlmICghZmllbGQpIHsKLQkJZXJyX2hpZCgiTlVMTCBmaWVsZCIpOwotCQlyZXR1cm4gLTE7Ci0JfQotCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZGV2aWNlcyk7IGkrKykgewotCQlpZiAoZGV2LT5pZC52ZW5kb3IgPT0gZGV2aWNlc1tpXS5pZFZlbmRvciAmJgotCQkgICAgZGV2LT5pZC5wcm9kdWN0ID09IGRldmljZXNbaV0uaWRQcm9kdWN0KSB7Ci0JCQlmZl9iaXRzID0gZGV2aWNlc1tpXS5mZjsKLQkJCWJyZWFrOwotCQl9Ci0JfQotCi0JZm9yIChpID0gMDsgZmZfYml0c1tpXSA+PSAwOyBpKyspCi0JCXNldF9iaXQoZmZfYml0c1tpXSwgZGV2LT5mZmJpdCk7Ci0KLQllcnJvciA9IGlucHV0X2ZmX2NyZWF0ZV9tZW1sZXNzKGRldiwgTlVMTCwgaGlkX2xnZmZfcGxheSk7Ci0JaWYgKGVycm9yKQotCQlyZXR1cm4gZXJyb3I7Ci0KLQlwcmludGsoS0VSTl9JTkZPICJGb3JjZSBmZWVkYmFjayBmb3IgTG9naXRlY2ggZm9yY2UgZmVlZGJhY2sgZGV2aWNlcyBieSBKb2hhbm4gRGVuZXV4IDxqb2hhbm4uZGVuZXV4QGl0LnV1LnNlPlxuIik7Ci0KLQlyZXR1cm4gMDsKLX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaGlkL3VzYmhpZC9oaWQtcGlkZmYuYyBiL2RyaXZlcnMvaGlkL3VzYmhpZC9oaWQtcGlkZmYuYwppbmRleCAwMTEzMjYxLi40ODRlM2VlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2hpZC91c2JoaWQvaGlkLXBpZGZmLmMKKysrIGIvZHJpdmVycy9oaWQvdXNiaGlkL2hpZC1waWRmZi5jCkBAIC0zOTcsNyArMzk3LDYgQEAKIAkJCSAgZWZmZWN0LT51LmNvbmRpdGlvbltpXS5sZWZ0X3NhdHVyYXRpb24pOwogCQlwaWRmZl9zZXQoJnBpZGZmLT5zZXRfY29uZGl0aW9uW1BJRF9ERUFEX0JBTkRdLAogCQkJICBlZmZlY3QtPnUuY29uZGl0aW9uW2ldLmRlYWRiYW5kKTsKLQkJdXNiaGlkX3dhaXRfaW8ocGlkZmYtPmhpZCk7CiAJCXVzYmhpZF9zdWJtaXRfcmVwb3J0KHBpZGZmLT5oaWQsIHBpZGZmLT5yZXBvcnRzW1BJRF9TRVRfQ09ORElUSU9OXSwKIAkJCQkgIFVTQl9ESVJfT1VUKTsKIAl9CkBAIC01MTIsNyArNTExLDYgQEAKIAkJcGlkZmYtPmVmZmVjdF9vcGVyYXRpb25bUElEX0xPT1BfQ09VTlRdLnZhbHVlWzBdID0gbjsKIAl9CiAKLQl1c2JoaWRfd2FpdF9pbyhwaWRmZi0+aGlkKTsKIAl1c2JoaWRfc3VibWl0X3JlcG9ydChwaWRmZi0+aGlkLCBwaWRmZi0+cmVwb3J0c1tQSURfRUZGRUNUX09QRVJBVElPTl0sCiAJCQkgIFVTQl9ESVJfT1VUKTsKIH0KQEAgLTU0OCw2ICs1NDYsOSBAQAogCWludCBwaWRfaWQgPSBwaWRmZi0+cGlkX2lkW2VmZmVjdF9pZF07CiAKIAlkZWJ1Zygic3RhcnRpbmcgdG8gZXJhc2UgJWQvJWQiLCBlZmZlY3RfaWQsIHBpZGZmLT5waWRfaWRbZWZmZWN0X2lkXSk7CisJLyogV2FpdCBmb3IgdGhlIHF1ZXVlIHRvIGNsZWFyLiBXZSBkbyBub3Qgd2FudCBhIGZ1bGwgZmlmbyB0bworCSAgIHByZXZlbnQgdGhlIGVmZmVjdCByZW1vdmFsLiAqLworCXVzYmhpZF93YWl0X2lvKHBpZGZmLT5oaWQpOwogCXBpZGZmX3BsYXliYWNrX3BpZChwaWRmZiwgcGlkX2lkLCAwKTsKIAlwaWRmZl9lcmFzZV9waWQocGlkZmYsIHBpZF9pZCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaGlkL3VzYmhpZC9oaWQtcGxmZi5jIGIvZHJpdmVycy9oaWQvdXNiaGlkL2hpZC1wbGZmLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDllYjgzY2YuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9oaWQvdXNiaGlkL2hpZC1wbGZmLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxMzkgKzAsMCBAQAotLyoKLSAqICBGb3JjZSBmZWVkYmFjayBzdXBwb3J0IGZvciBQYW50aGVyTG9yZC9HcmVlbkFzaWEgYmFzZWQgZGV2aWNlcwotICoKLSAqICBUaGUgZGV2aWNlcyBhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdmFyaW91cyBuYW1lcyBhbmQgdGhlIHNhbWUgVVNCIGRldmljZSBJRAotICogIGNhbiBiZSB1c2VkIGluIGJvdGggYWRhcHRlcnMgYW5kIGFjdHVhbCBnYW1lIGNvbnRyb2xsZXJzLgotICoKLSAqICAwODEwOjAwMDEgIlR3aW4gVVNCIEpveXN0aWNrIgotICogICAtIHRlc3RlZCB3aXRoIFBhbnRoZXJMb3JkIFVTQi9QUzIgMmluMSBBZGFwdGVyCi0gKiAgIC0gY29udGFpbnMgdHdvIHJlcG9ydHMsIG9uZSBmb3IgZWFjaCBwb3J0IChISURfUVVJUktfTVVMVElfSU5QVVQpCi0gKgotICogIDBlOGY6MDAwMyAiR3JlZW5Bc2lhIEluYy4gICAgVVNCIEpveXN0aWNrICAgICAiCi0gKiAgIC0gdGVzdGVkIHdpdGggS8O2bmcgR2FtaW5nIGdhbWVwYWQKLSAqCi0gKiAgQ29weXJpZ2h0IChjKSAyMDA3IEFuc3NpIEhhbm51bGEgPGFuc3NpLmhhbm51bGFAZ21haWwuY29tPgotICovCi0KLS8qCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQotICovCi0KLQotLyogI2RlZmluZSBERUJVRyAqLwotCi0jZGVmaW5lIGRlYnVnKGZvcm1hdCwgYXJnLi4uKSBwcl9kZWJ1ZygiaGlkLXBsZmY6ICIgZm9ybWF0ICJcbiIgLCAjIyBhcmcpCi0KLSNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgotI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgotI2luY2x1ZGUgPGxpbnV4L2hpZC5oPgotI2luY2x1ZGUgInVzYmhpZC5oIgotCi1zdHJ1Y3QgcGxmZl9kZXZpY2UgewotCXN0cnVjdCBoaWRfcmVwb3J0ICpyZXBvcnQ7Ci19OwotCi1zdGF0aWMgaW50IGhpZF9wbGZmX3BsYXkoc3RydWN0IGlucHV0X2RldiAqZGV2LCB2b2lkICpkYXRhLAotCQkJIHN0cnVjdCBmZl9lZmZlY3QgKmVmZmVjdCkKLXsKLQlzdHJ1Y3QgaGlkX2RldmljZSAqaGlkID0gaW5wdXRfZ2V0X2RydmRhdGEoZGV2KTsKLQlzdHJ1Y3QgcGxmZl9kZXZpY2UgKnBsZmYgPSBkYXRhOwotCWludCBsZWZ0LCByaWdodDsKLQotCWxlZnQgPSBlZmZlY3QtPnUucnVtYmxlLnN0cm9uZ19tYWduaXR1ZGU7Ci0JcmlnaHQgPSBlZmZlY3QtPnUucnVtYmxlLndlYWtfbWFnbml0dWRlOwotCWRlYnVnKCJjYWxsZWQgd2l0aCAweCUwNHggMHglMDR4IiwgbGVmdCwgcmlnaHQpOwotCi0JbGVmdCA9IGxlZnQgKiAweDdmIC8gMHhmZmZmOwotCXJpZ2h0ID0gcmlnaHQgKiAweDdmIC8gMHhmZmZmOwotCi0JcGxmZi0+cmVwb3J0LT5maWVsZFswXS0+dmFsdWVbMl0gPSBsZWZ0OwotCXBsZmYtPnJlcG9ydC0+ZmllbGRbMF0tPnZhbHVlWzNdID0gcmlnaHQ7Ci0JZGVidWcoInJ1bm5pbmcgd2l0aCAweCUwMnggMHglMDJ4IiwgbGVmdCwgcmlnaHQpOwotCXVzYmhpZF9zdWJtaXRfcmVwb3J0KGhpZCwgcGxmZi0+cmVwb3J0LCBVU0JfRElSX09VVCk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotaW50IGhpZF9wbGZmX2luaXQoc3RydWN0IGhpZF9kZXZpY2UgKmhpZCkKLXsKLQlzdHJ1Y3QgcGxmZl9kZXZpY2UgKnBsZmY7Ci0Jc3RydWN0IGhpZF9yZXBvcnQgKnJlcG9ydDsKLQlzdHJ1Y3QgaGlkX2lucHV0ICpoaWRpbnB1dDsKLQlzdHJ1Y3QgbGlzdF9oZWFkICpyZXBvcnRfbGlzdCA9Ci0JCQkmaGlkLT5yZXBvcnRfZW51bVtISURfT1VUUFVUX1JFUE9SVF0ucmVwb3J0X2xpc3Q7Ci0Jc3RydWN0IGxpc3RfaGVhZCAqcmVwb3J0X3B0ciA9IHJlcG9ydF9saXN0OwotCXN0cnVjdCBpbnB1dF9kZXYgKmRldjsKLQlpbnQgZXJyb3I7Ci0KLQkvKiBUaGUgZGV2aWNlIGNvbnRhaW5zIG9uZSBvdXRwdXQgcmVwb3J0IHBlciBwaHlzaWNhbCBkZXZpY2UsIGFsbAotCSAgIGNvbnRhaW5pbmcgMSBmaWVsZCwgd2hpY2ggY29udGFpbnMgNCBmZjAwLjAwMDIgdXNhZ2VzIGFuZCA0IDE2Yml0Ci0JICAgYWJzb2x1dGUgdmFsdWVzLgotCi0JICAgVGhlIGlucHV0IHJlcG9ydHMgYWxzbyBjb250YWluIGEgZmllbGQgd2hpY2ggY29udGFpbnMKLQkgICA4IGZmMDAuMDAwMSB1c2FnZXMgYW5kIDggYm9vbGVhbiB2YWx1ZXMuIFRoZWlyIG1lYW5pbmcgaXMKLQkgICBjdXJyZW50bHkgdW5rbm93bi4gKi8KLQotCWlmIChsaXN0X2VtcHR5KHJlcG9ydF9saXN0KSkgewotCQlwcmludGsoS0VSTl9FUlIgImhpZC1wbGZmOiBubyBvdXRwdXQgcmVwb3J0cyBmb3VuZFxuIik7Ci0JCXJldHVybiAtRU5PREVWOwotCX0KLQotCWxpc3RfZm9yX2VhY2hfZW50cnkoaGlkaW5wdXQsICZoaWQtPmlucHV0cywgbGlzdCkgewotCi0JCXJlcG9ydF9wdHIgPSByZXBvcnRfcHRyLT5uZXh0OwotCi0JCWlmIChyZXBvcnRfcHRyID09IHJlcG9ydF9saXN0KSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgImhpZC1wbGZmOiByZXF1aXJlZCBvdXRwdXQgcmVwb3J0IGlzIG1pc3NpbmdcbiIpOwotCQkJcmV0dXJuIC1FTk9ERVY7Ci0JCX0KLQotCQlyZXBvcnQgPSBsaXN0X2VudHJ5KHJlcG9ydF9wdHIsIHN0cnVjdCBoaWRfcmVwb3J0LCBsaXN0KTsKLQkJaWYgKHJlcG9ydC0+bWF4ZmllbGQgPCAxKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgImhpZC1wbGZmOiBubyBmaWVsZHMgaW4gdGhlIHJlcG9ydFxuIik7Ci0JCQlyZXR1cm4gLUVOT0RFVjsKLQkJfQotCi0JCWlmIChyZXBvcnQtPmZpZWxkWzBdLT5yZXBvcnRfY291bnQgPCA0KSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgImhpZC1wbGZmOiBub3QgZW5vdWdoIHZhbHVlcyBpbiB0aGUgZmllbGRcbiIpOwotCQkJcmV0dXJuIC1FTk9ERVY7Ci0JCX0KLQotCQlwbGZmID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHBsZmZfZGV2aWNlKSwgR0ZQX0tFUk5FTCk7Ci0JCWlmICghcGxmZikKLQkJCXJldHVybiAtRU5PTUVNOwotCi0JCWRldiA9IGhpZGlucHV0LT5pbnB1dDsKLQotCQlzZXRfYml0KEZGX1JVTUJMRSwgZGV2LT5mZmJpdCk7Ci0KLQkJZXJyb3IgPSBpbnB1dF9mZl9jcmVhdGVfbWVtbGVzcyhkZXYsIHBsZmYsIGhpZF9wbGZmX3BsYXkpOwotCQlpZiAoZXJyb3IpIHsKLQkJCWtmcmVlKHBsZmYpOwotCQkJcmV0dXJuIGVycm9yOwotCQl9Ci0KLQkJcGxmZi0+cmVwb3J0ID0gcmVwb3J0OwotCQlwbGZmLT5yZXBvcnQtPmZpZWxkWzBdLT52YWx1ZVswXSA9IDB4MDA7Ci0JCXBsZmYtPnJlcG9ydC0+ZmllbGRbMF0tPnZhbHVlWzFdID0gMHgwMDsKLQkJcGxmZi0+cmVwb3J0LT5maWVsZFswXS0+dmFsdWVbMl0gPSAweDAwOwotCQlwbGZmLT5yZXBvcnQtPmZpZWxkWzBdLT52YWx1ZVszXSA9IDB4MDA7Ci0JCXVzYmhpZF9zdWJtaXRfcmVwb3J0KGhpZCwgcGxmZi0+cmVwb3J0LCBVU0JfRElSX09VVCk7Ci0JfQotCi0JcHJpbnRrKEtFUk5fSU5GTyAiaGlkLXBsZmY6IEZvcmNlIGZlZWRiYWNrIGZvciBQYW50aGVyTG9yZC9HcmVlbkFzaWEgIgotCSAgICAgICAiZGV2aWNlcyBieSBBbnNzaSBIYW5udWxhIDxhbnNzaS5oYW5udWxhQGdtYWlsLmNvbT5cbiIpOwotCi0JcmV0dXJuIDA7Ci19CmRpZmYgLS1naXQgYS9kcml2ZXJzL2hpZC91c2JoaWQvaGlkLXF1aXJrcy5jIGIvZHJpdmVycy9oaWQvdXNiaGlkL2hpZC1xdWlya3MuYwppbmRleCBiMTVmODgyLi40N2ViZTA0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2hpZC91c2JoaWQvaGlkLXF1aXJrcy5jCisrKyBiL2RyaXZlcnMvaGlkL3VzYmhpZC9oaWQtcXVpcmtzLmMKQEAgLTE3LDQxMiArMTcsNyBAQAogCiAjaW5jbHVkZSA8bGludXgvaGlkLmg+CiAKLSNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9BNFRFQ0gJCTB4MDlkYQotI2RlZmluZSBVU0JfREVWSUNFX0lEX0E0VEVDSF9XQ1AzMlBVCTB4MDAwNgotI2RlZmluZSBVU0JfREVWSUNFX0lEX0E0VEVDSF9YNV8wMDVECTB4MDAwYQotCi0jZGVmaW5lIFVTQl9WRU5ET1JfSURfQUFTSElNQQkJMHgwNmQ2Ci0jZGVmaW5lIFVTQl9ERVZJQ0VfSURfQUFTSElNQV9HQU1FUEFECTB4MDAyNQotI2RlZmluZSBVU0JfREVWSUNFX0lEX0FBU0hJTUFfUFJFREFUT1IJMHgwMDI2Ci0KLSNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9BQ0VDQUQJCTB4MDQ2MAotI2RlZmluZSBVU0JfREVWSUNFX0lEX0FDRUNBRF9GTEFJUgkweDAwMDQKLSNkZWZpbmUgVVNCX0RFVklDRV9JRF9BQ0VDQURfMzAyCTB4MDAwOAotCi0jZGVmaW5lIFVTQl9WRU5ET1JfSURfQURTX1RFQ0ggCQkweDA2ZTEKLSNkZWZpbmUgVVNCX0RFVklDRV9JRF9BRFNfVEVDSF9SQURJT19TSTQ3MFgJMHhhMTU1Ci0KLSNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9BRkFURUNICQkweDE1YTQKLSNkZWZpbmUgVVNCX0RFVklDRV9JRF9BRkFURUNIX0FGOTAxNgkweDkwMTYKLQotI2RlZmluZSBVU0JfVkVORE9SX0lEX0FJUFRFSwkJMHgwOGNhCi0jZGVmaW5lIFVTQl9ERVZJQ0VfSURfQUlQVEVLXzAxCQkweDAwMDEKLSNkZWZpbmUgVVNCX0RFVklDRV9JRF9BSVBURUtfMTAJCTB4MDAxMAotI2RlZmluZSBVU0JfREVWSUNFX0lEX0FJUFRFS18yMAkJMHgwMDIwCi0jZGVmaW5lIFVTQl9ERVZJQ0VfSURfQUlQVEVLXzIxCQkweDAwMjEKLSNkZWZpbmUgVVNCX0RFVklDRV9JRF9BSVBURUtfMjIJCTB4MDAyMgotI2RlZmluZSBVU0JfREVWSUNFX0lEX0FJUFRFS18yMwkJMHgwMDIzCi0jZGVmaW5lIFVTQl9ERVZJQ0VfSURfQUlQVEVLXzI0CQkweDAwMjQKLQotI2RlZmluZSBVU0JfVkVORE9SX0lEX0FJUkNBQkxFCQkweDE2Q0EKLSNkZWZpbmUgVVNCX0RFVklDRV9JRF9BSVJDQUJMRTEJCTB4MTUwMgotCi0jZGVmaW5lIFVTQl9WRU5ET1JfSURfQUxDT1IJCTB4MDU4ZgotI2RlZmluZSBVU0JfREVWSUNFX0lEX0FMQ09SX1VTQlJTMjMyCTB4OTcyMAotCi0jZGVmaW5lIFVTQl9WRU5ET1JfSURfQUxQUwkJMHgwNDMzCi0jZGVmaW5lIFVTQl9ERVZJQ0VfSURfSUJNX0dBTUVQQUQJMHgxMTAxCi0KLSNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9BUFBMRQkJMHgwNWFjCi0jZGVmaW5lIFVTQl9ERVZJQ0VfSURfQVBQTEVfTUlHSFRZTU9VU0UJMHgwMzA0Ci0jZGVmaW5lIFVTQl9ERVZJQ0VfSURfQVBQTEVfRk9VTlRBSU5fQU5TSQkweDAyMGUKLSNkZWZpbmUgVVNCX0RFVklDRV9JRF9BUFBMRV9GT1VOVEFJTl9JU08JMHgwMjBmCi0jZGVmaW5lIFVTQl9ERVZJQ0VfSURfQVBQTEVfR0VZU0VSX0FOU0kJMHgwMjE0Ci0jZGVmaW5lIFVTQl9ERVZJQ0VfSURfQVBQTEVfR0VZU0VSX0lTTwkweDAyMTUKLSNkZWZpbmUgVVNCX0RFVklDRV9JRF9BUFBMRV9HRVlTRVJfSklTCTB4MDIxNgotI2RlZmluZSBVU0JfREVWSUNFX0lEX0FQUExFX0dFWVNFUjNfQU5TSQkweDAyMTcKLSNkZWZpbmUgVVNCX0RFVklDRV9JRF9BUFBMRV9HRVlTRVIzX0lTTwkweDAyMTgKLSNkZWZpbmUgVVNCX0RFVklDRV9JRF9BUFBMRV9HRVlTRVIzX0pJUwkweDAyMTkKLSNkZWZpbmUgVVNCX0RFVklDRV9JRF9BUFBMRV9HRVlTRVI0X0FOU0kJMHgwMjFhCi0jZGVmaW5lIFVTQl9ERVZJQ0VfSURfQVBQTEVfR0VZU0VSNF9JU08JMHgwMjFiCi0jZGVmaW5lIFVTQl9ERVZJQ0VfSURfQVBQTEVfR0VZU0VSNF9KSVMJMHgwMjFjCi0jZGVmaW5lIFVTQl9ERVZJQ0VfSURfQVBQTEVfQUxVX0FOU0kJMHgwMjIwCi0jZGVmaW5lIFVTQl9ERVZJQ0VfSURfQVBQTEVfQUxVX0lTTwkweDAyMjEKLSNkZWZpbmUgVVNCX0RFVklDRV9JRF9BUFBMRV9BTFVfSklTCTB4MDIyMgotI2RlZmluZSBVU0JfREVWSUNFX0lEX0FQUExFX1dFTExTUFJJTkdfQU5TSQkweDAyMjMKLSNkZWZpbmUgVVNCX0RFVklDRV9JRF9BUFBMRV9XRUxMU1BSSU5HX0lTTwkweDAyMjQKLSNkZWZpbmUgVVNCX0RFVklDRV9JRF9BUFBMRV9XRUxMU1BSSU5HX0pJUwkweDAyMjUKLSNkZWZpbmUgVVNCX0RFVklDRV9JRF9BUFBMRV9HRVlTRVI0X0hGX0FOU0kgICAgMHgwMjI5Ci0jZGVmaW5lIFVTQl9ERVZJQ0VfSURfQVBQTEVfR0VZU0VSNF9IRl9JU08gICAgIDB4MDIyYQotI2RlZmluZSBVU0JfREVWSUNFX0lEX0FQUExFX0dFWVNFUjRfSEZfSklTICAgICAweDAyMmIKLSNkZWZpbmUgVVNCX0RFVklDRV9JRF9BUFBMRV9BTFVfV0lSRUxFU1NfQU5TSSAgMHgwMjJjCi0jZGVmaW5lIFVTQl9ERVZJQ0VfSURfQVBQTEVfQUxVX1dJUkVMRVNTX0lTTyAgIDB4MDIyZAotI2RlZmluZSBVU0JfREVWSUNFX0lEX0FQUExFX0FMVV9XSVJFTEVTU19KSVMgICAweDAyMmUKLSNkZWZpbmUgVVNCX0RFVklDRV9JRF9BUFBMRV9XRUxMU1BSSU5HMl9BTlNJCTB4MDIzMAotI2RlZmluZSBVU0JfREVWSUNFX0lEX0FQUExFX1dFTExTUFJJTkcyX0lTTwkweDAyMzEKLSNkZWZpbmUgVVNCX0RFVklDRV9JRF9BUFBMRV9XRUxMU1BSSU5HMl9KSVMJMHgwMjMyCi0jZGVmaW5lIFVTQl9ERVZJQ0VfSURfQVBQTEVfRk9VTlRBSU5fVFBfT05MWQkweDAzMGEKLSNkZWZpbmUgVVNCX0RFVklDRV9JRF9BUFBMRV9HRVlTRVIxX1RQX09OTFkJMHgwMzBiCi0jZGVmaW5lIFVTQl9ERVZJQ0VfSURfQVBQTEVfSVJDT05UUk9MNAkweDgyNDIKLQotI2RlZmluZSBVU0JfVkVORE9SX0lEX0FTVVMJCTB4MGIwNQotI2RlZmluZSBVU0JfREVWSUNFX0lEX0FTVVNfTENNCQkweDE3MjYKLQotI2RlZmluZSBVU0JfVkVORE9SX0lEX0FURU4JCTB4MDU1NwotI2RlZmluZSBVU0JfREVWSUNFX0lEX0FURU5fVUMxMDBLTQkweDIwMDQKLSNkZWZpbmUgVVNCX0RFVklDRV9JRF9BVEVOX0NTMTI0VQkweDIyMDIKLSNkZWZpbmUgVVNCX0RFVklDRV9JRF9BVEVOXzJQT1JUS1ZNCTB4MjIwNAotI2RlZmluZSBVU0JfREVWSUNFX0lEX0FURU5fNFBPUlRLVk0JMHgyMjA1Ci0jZGVmaW5lIFVTQl9ERVZJQ0VfSURfQVRFTl80UE9SVEtWTUMJMHgyMjA4Ci0KLSNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9CRUxLSU4gICAgICAgICAgIDB4MDUwZAotI2RlZmluZSBVU0JfREVWSUNFX0lEX0ZMSVBfS1ZNICAgICAgICAgMHgzMjAxCi0KLSNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9CRVJLU0hJUkUJCTB4MGM5OAotI2RlZmluZSBVU0JfREVWSUNFX0lEX0JFUktTSElSRV9QQ1dECTB4MTE0MAotCi0jZGVmaW5lIFVTQl9WRU5ET1JfSURfQ0hFUlJZCQkweDA0NmEKLSNkZWZpbmUgVVNCX0RFVklDRV9JRF9DSEVSUllfQ1lNT1RJT04JMHgwMDIzCi0KLSNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9DSElDCQkweDA1ZmUKLSNkZWZpbmUgVVNCX0RFVklDRV9JRF9DSElDX0dBTUVQQUQJMHgwMDE0Ci0KLSNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9DSURDCQkweDE2NzcKLQotI2RlZmluZSBVU0JfVkVORE9SX0lEX0NNRURJQQkJMHgwZDhjCi0jZGVmaW5lIFVTQl9ERVZJQ0VfSURfQ00xMDkJCTB4MDAwZQotCi0jZGVmaW5lIFVTQl9WRU5ET1JfSURfQ09ERU1FUkNTCQkweDA3YzAKLSNkZWZpbmUgVVNCX0RFVklDRV9JRF9DT0RFTUVSQ1NfSU9XX0ZJUlNUCTB4MTUwMAotI2RlZmluZSBVU0JfREVWSUNFX0lEX0NPREVNRVJDU19JT1dfTEFTVAkweDE1ZmYKLQotI2RlZmluZSBVU0JfVkVORE9SX0lEX0NZR05BTAkJMHgxMGM0Ci0jZGVmaW5lIFVTQl9ERVZJQ0VfSURfQ1lHTkFMX1JBRElPX1NJNDcwWAkweDgxOGEKLQotI2RlZmluZSBVU0JfVkVORE9SX0lEX0NZUFJFU1MJCTB4MDRiNAotI2RlZmluZSBVU0JfREVWSUNFX0lEX0NZUFJFU1NfTU9VU0UJMHgwMDAxCi0jZGVmaW5lIFVTQl9ERVZJQ0VfSURfQ1lQUkVTU19ISURDT00JMHg1NTAwCi0jZGVmaW5lIFVTQl9ERVZJQ0VfSURfQ1lQUkVTU19VTFRSQU1PVVNFCTB4NzQxNwotI2RlZmluZSBVU0JfREVWSUNFX0lEX0NZUFJFU1NfQkFSQ09ERV8xCTB4ZGU2MQotI2RlZmluZSBVU0JfREVWSUNFX0lEX0NZUFJFU1NfQkFSQ09ERV8yCTB4ZGU2NAotCi0jZGVmaW5lIFVTQl9WRU5ET1JfSURfREVMTAkJMHg0MTNjCi0jZGVmaW5lIFVTQl9ERVZJQ0VfSURfREVMTF9XNzY1OAkweDIwMDUKLQotI2RlZmluZSBVU0JfVkVORE9SX0lEX0RFTE9STUUJCTB4MTE2MwotI2RlZmluZSBVU0JfREVWSUNFX0lEX0RFTE9STUVfRUFSVEhNQVRFIDB4MDEwMAotI2RlZmluZSBVU0JfREVWSUNFX0lEX0RFTE9STUVfRU1fTFQyMAkweDAyMDAKLQotI2RlZmluZSBVU0JfVkVORE9SX0lEX0RNSQkJMHgwYzBiCi0jZGVmaW5lIFVTQl9ERVZJQ0VfSURfRE1JX0VOQwkJMHg1ZmFiCi0KLSNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9FTE8JCTB4MDRFNwotI2RlZmluZSBVU0JfREVWSUNFX0lEX0VMT19UUzI3MDAJMHgwMDIwCi0KLSNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9FU1NFTlRJQUxfUkVBTElUWQkweDBkN2YKLSNkZWZpbmUgVVNCX0RFVklDRV9JRF9FU1NFTlRJQUxfUkVBTElUWV9QNSAweDAxMDAKLQotI2RlZmluZSBVU0JfVkVORE9SX0lEX0VaS0VZIAkJMHgwNTE4Ci0jZGVmaW5lIFVTQl9ERVZJQ0VfSURfQlRDXzgxOTMJCTB4MDAwMgotCi0jZGVmaW5lIFVTQl9WRU5ET1JfSURfR0FNRVJPTgkJMHgwODEwCi0jZGVmaW5lIFVTQl9ERVZJQ0VfSURfR0FNRVJPTl9EVUFMX1BTWF9BREFQVE9SCTB4MDAwMQotCi0jZGVmaW5lIFVTQl9WRU5ET1JfSURfR0VORVJBTF9UT1VDSAkweDBkZmMKLQotI2RlZmluZSBVU0JfVkVORE9SX0lEX0dMQUIJCTB4MDZjMgotI2RlZmluZSBVU0JfREVWSUNFX0lEXzRfUEhJREdFVFNFUlZPXzMwCTB4MDAzOAotI2RlZmluZSBVU0JfREVWSUNFX0lEXzFfUEhJREdFVFNFUlZPXzMwCTB4MDAzOQotI2RlZmluZSBVU0JfREVWSUNFX0lEXzBfMF80X0lGX0tJVAkweDAwNDAKLSNkZWZpbmUgVVNCX0RFVklDRV9JRF8wXzE2XzE2X0lGX0tJVAkweDAwNDQKLSNkZWZpbmUgVVNCX0RFVklDRV9JRF84XzhfOF9JRl9LSVQJMHgwMDQ1Ci0jZGVmaW5lIFVTQl9ERVZJQ0VfSURfMF84XzdfSUZfS0lUCTB4MDA1MQotI2RlZmluZSBVU0JfREVWSUNFX0lEXzBfOF84X0lGX0tJVAkweDAwNTMKLSNkZWZpbmUgVVNCX0RFVklDRV9JRF9QSElER0VUX01PVE9SQ09OVFJPTAkweDAwNTgKLQotI2RlZmluZSBVU0JfVkVORE9SX0lEX0dPVE9QCQkweDA4ZjIKLSNkZWZpbmUgVVNCX0RFVklDRV9JRF9TVVBFUl9RMgkJMHgwMDdmCi0jZGVmaW5lIFVTQl9ERVZJQ0VfSURfR09HT1BFTgkJMHgwMGNlCi0jZGVmaW5lIFVTQl9ERVZJQ0VfSURfUEVOUE9XRVIJCTB4MDBmNAotCi0jZGVmaW5lIFVTQl9WRU5ET1JfSURfR1JFVEFHTUFDQkVUSAkweDA5NzEKLSNkZWZpbmUgVVNCX0RFVklDRV9JRF9HUkVUQUdNQUNCRVRIX0hVRVkJMHgyMDA1Ci0KLSNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9HUklGRklOCQkweDA3N2QKLSNkZWZpbmUgVVNCX0RFVklDRV9JRF9QT1dFUk1BVEUJCTB4MDQxMAotI2RlZmluZSBVU0JfREVWSUNFX0lEX1NPVU5ES05PQgkJMHgwNEFBCi0KLSNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9HVENPCQkweDA3OGMKLSNkZWZpbmUgVVNCX0RFVklDRV9JRF9HVENPXzkwCQkweDAwOTAKLSNkZWZpbmUgVVNCX0RFVklDRV9JRF9HVENPXzEwMAkJMHgwMTAwCi0jZGVmaW5lIFVTQl9ERVZJQ0VfSURfR1RDT18xMDEJCTB4MDEwMQotI2RlZmluZSBVU0JfREVWSUNFX0lEX0dUQ09fMTAzCQkweDAxMDMKLSNkZWZpbmUgVVNCX0RFVklDRV9JRF9HVENPXzEwNAkJMHgwMTA0Ci0jZGVmaW5lIFVTQl9ERVZJQ0VfSURfR1RDT18xMDUJCTB4MDEwNQotI2RlZmluZSBVU0JfREVWSUNFX0lEX0dUQ09fMTA2CQkweDAxMDYKLSNkZWZpbmUgVVNCX0RFVklDRV9JRF9HVENPXzEwNwkJMHgwMTA3Ci0jZGVmaW5lIFVTQl9ERVZJQ0VfSURfR1RDT18xMDgJCTB4MDEwOAotI2RlZmluZSBVU0JfREVWSUNFX0lEX0dUQ09fMjAwCQkweDAyMDAKLSNkZWZpbmUgVVNCX0RFVklDRV9JRF9HVENPXzIwMQkJMHgwMjAxCi0jZGVmaW5lIFVTQl9ERVZJQ0VfSURfR1RDT18yMDIJCTB4MDIwMgotI2RlZmluZSBVU0JfREVWSUNFX0lEX0dUQ09fMjAzCQkweDAyMDMKLSNkZWZpbmUgVVNCX0RFVklDRV9JRF9HVENPXzIwNAkJMHgwMjA0Ci0jZGVmaW5lIFVTQl9ERVZJQ0VfSURfR1RDT18yMDUJCTB4MDIwNQotI2RlZmluZSBVU0JfREVWSUNFX0lEX0dUQ09fMjA2CQkweDAyMDYKLSNkZWZpbmUgVVNCX0RFVklDRV9JRF9HVENPXzIwNwkJMHgwMjA3Ci0jZGVmaW5lIFVTQl9ERVZJQ0VfSURfR1RDT18zMDAJCTB4MDMwMAotI2RlZmluZSBVU0JfREVWSUNFX0lEX0dUQ09fMzAxCQkweDAzMDEKLSNkZWZpbmUgVVNCX0RFVklDRV9JRF9HVENPXzMwMgkJMHgwMzAyCi0jZGVmaW5lIFVTQl9ERVZJQ0VfSURfR1RDT18zMDMJCTB4MDMwMwotI2RlZmluZSBVU0JfREVWSUNFX0lEX0dUQ09fMzA0CQkweDAzMDQKLSNkZWZpbmUgVVNCX0RFVklDRV9JRF9HVENPXzMwNQkJMHgwMzA1Ci0jZGVmaW5lIFVTQl9ERVZJQ0VfSURfR1RDT18zMDYJCTB4MDMwNgotI2RlZmluZSBVU0JfREVWSUNFX0lEX0dUQ09fMzA3CQkweDAzMDcKLSNkZWZpbmUgVVNCX0RFVklDRV9JRF9HVENPXzMwOAkJMHgwMzA4Ci0jZGVmaW5lIFVTQl9ERVZJQ0VfSURfR1RDT18zMDkJCTB4MDMwOQotI2RlZmluZSBVU0JfREVWSUNFX0lEX0dUQ09fNDAwCQkweDA0MDAKLSNkZWZpbmUgVVNCX0RFVklDRV9JRF9HVENPXzQwMQkJMHgwNDAxCi0jZGVmaW5lIFVTQl9ERVZJQ0VfSURfR1RDT180MDIJCTB4MDQwMgotI2RlZmluZSBVU0JfREVWSUNFX0lEX0dUQ09fNDAzCQkweDA0MDMKLSNkZWZpbmUgVVNCX0RFVklDRV9JRF9HVENPXzQwNAkJMHgwNDA0Ci0jZGVmaW5lIFVTQl9ERVZJQ0VfSURfR1RDT180MDUJCTB4MDQwNQotI2RlZmluZSBVU0JfREVWSUNFX0lEX0dUQ09fNTAwCQkweDA1MDAKLSNkZWZpbmUgVVNCX0RFVklDRV9JRF9HVENPXzUwMQkJMHgwNTAxCi0jZGVmaW5lIFVTQl9ERVZJQ0VfSURfR1RDT181MDIJCTB4MDUwMgotI2RlZmluZSBVU0JfREVWSUNFX0lEX0dUQ09fNTAzCQkweDA1MDMKLSNkZWZpbmUgVVNCX0RFVklDRV9JRF9HVENPXzUwNAkJMHgwNTA0Ci0jZGVmaW5lIFVTQl9ERVZJQ0VfSURfR1RDT18xMDAwCQkweDEwMDAKLSNkZWZpbmUgVVNCX0RFVklDRV9JRF9HVENPXzEwMDEJCTB4MTAwMQotI2RlZmluZSBVU0JfREVWSUNFX0lEX0dUQ09fMTAwMgkJMHgxMDAyCi0jZGVmaW5lIFVTQl9ERVZJQ0VfSURfR1RDT18xMDAzCQkweDEwMDMKLSNkZWZpbmUgVVNCX0RFVklDRV9JRF9HVENPXzEwMDQJCTB4MTAwNAotI2RlZmluZSBVU0JfREVWSUNFX0lEX0dUQ09fMTAwNQkJMHgxMDA1Ci0jZGVmaW5lIFVTQl9ERVZJQ0VfSURfR1RDT18xMDA2CQkweDEwMDYKLSNkZWZpbmUgVVNCX0RFVklDRV9JRF9HVENPXzEwMDcJCTB4MTAwNwotI2RlZmluZSBVU0JfVkVORE9SX0lEX0hBUFAJCTB4MDc4YgotI2RlZmluZSBVU0JfREVWSUNFX0lEX1VHQ0lfRFJJVklORwkweDAwMTAKLSNkZWZpbmUgVVNCX0RFVklDRV9JRF9VR0NJX0ZMWUlORwkweDAwMjAKLSNkZWZpbmUgVVNCX0RFVklDRV9JRF9VR0NJX0ZJR0hUSU5HCTB4MDAzMAotCi0jZGVmaW5lIFVTQl9WRU5ET1JfSURfSU1BVElPTgkJMHgwNzE4Ci0jZGVmaW5lIFVTQl9ERVZJQ0VfSURfRElTQ19TVEFLS0EJMHhkMDAwCi0KLSNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9LQkdFQVIJCTB4MDg0ZQotI2RlZmluZSBVU0JfREVWSUNFX0lEX0tCR0VBUl9KQU1TVFVESU8JMHgxMDAxCi0KLSNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9MRAkJMHgwZjExCi0jZGVmaW5lIFVTQl9ERVZJQ0VfSURfTERfQ0FTU1kJCTB4MTAwMAotI2RlZmluZSBVU0JfREVWSUNFX0lEX0xEX1BPQ0tFVENBU1NZCTB4MTAxMAotI2RlZmluZSBVU0JfREVWSUNFX0lEX0xEX01PQklMRUNBU1NZCTB4MTAyMAotI2RlZmluZSBVU0JfREVWSUNFX0lEX0xEX0pXTQkJMHgxMDgwCi0jZGVmaW5lIFVTQl9ERVZJQ0VfSURfTERfRE1NUAkJMHgxMDgxCi0jZGVmaW5lIFVTQl9ERVZJQ0VfSURfTERfVU1JUAkJMHgxMDkwCi0jZGVmaW5lIFVTQl9ERVZJQ0VfSURfTERfWFJBWTEJCTB4MTEwMAotI2RlZmluZSBVU0JfREVWSUNFX0lEX0xEX1hSQVkyCQkweDExMDEKLSNkZWZpbmUgVVNCX0RFVklDRV9JRF9MRF9WSURFT0NPTQkweDEyMDAKLSNkZWZpbmUgVVNCX0RFVklDRV9JRF9MRF9DT00zTEFCCTB4MjAwMAotI2RlZmluZSBVU0JfREVWSUNFX0lEX0xEX1RFTEVQT1JUCTB4MjAxMAotI2RlZmluZSBVU0JfREVWSUNFX0lEX0xEX05FVFdPUktBTkFMWVNFUiAweDIwMjAKLSNkZWZpbmUgVVNCX0RFVklDRV9JRF9MRF9QT1dFUkNPTlRST0wJMHgyMDMwCi0jZGVmaW5lIFVTQl9ERVZJQ0VfSURfTERfTUFDSElORVRFU1QJMHgyMDQwCi0KLSNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9MT0dJVEVDSAkJMHgwNDZkCi0jZGVmaW5lIFVTQl9ERVZJQ0VfSURfTE9HSVRFQ0hfTFgzCTB4YzA0NAotI2RlZmluZSBVU0JfREVWSUNFX0lEX0xPR0lURUNIX1YxNTAJMHhjMDQ3Ci0jZGVmaW5lIFVTQl9ERVZJQ0VfSURfTE9HSVRFQ0hfUkVDRUlWRVIJMHhjMTAxCi0jZGVmaW5lIFVTQl9ERVZJQ0VfSURfTE9HSVRFQ0hfSEFSTU9OWSAgMHhjMTEwCi0jZGVmaW5lIFVTQl9ERVZJQ0VfSURfTE9HSVRFQ0hfSEFSTU9OWV8yIDB4YzExMQotI2RlZmluZSBVU0JfREVWSUNFX0lEX0xPR0lURUNIX0hBUk1PTllfMyAweGMxMTIKLSNkZWZpbmUgVVNCX0RFVklDRV9JRF9MT0dJVEVDSF9IQVJNT05ZXzQgMHhjMTEzCi0jZGVmaW5lIFVTQl9ERVZJQ0VfSURfTE9HSVRFQ0hfSEFSTU9OWV81IDB4YzExNAotI2RlZmluZSBVU0JfREVWSUNFX0lEX0xPR0lURUNIX0hBUk1PTllfNiAweGMxMTUKLSNkZWZpbmUgVVNCX0RFVklDRV9JRF9MT0dJVEVDSF9IQVJNT05ZXzcgMHhjMTE2Ci0jZGVmaW5lIFVTQl9ERVZJQ0VfSURfTE9HSVRFQ0hfSEFSTU9OWV84IDB4YzExNwotI2RlZmluZSBVU0JfREVWSUNFX0lEX0xPR0lURUNIX0hBUk1PTllfOSAweGMxMTgKLSNkZWZpbmUgVVNCX0RFVklDRV9JRF9MT0dJVEVDSF9IQVJNT05ZXzEwIDB4YzExOQotI2RlZmluZSBVU0JfREVWSUNFX0lEX0xPR0lURUNIX0hBUk1PTllfMTEgMHhjMTFhCi0jZGVmaW5lIFVTQl9ERVZJQ0VfSURfTE9HSVRFQ0hfSEFSTU9OWV8xMiAweGMxMWIKLSNkZWZpbmUgVVNCX0RFVklDRV9JRF9MT0dJVEVDSF9IQVJNT05ZXzEzIDB4YzExYwotI2RlZmluZSBVU0JfREVWSUNFX0lEX0xPR0lURUNIX0hBUk1PTllfMTQgMHhjMTFkCi0jZGVmaW5lIFVTQl9ERVZJQ0VfSURfTE9HSVRFQ0hfSEFSTU9OWV8xNSAweGMxMWUKLSNkZWZpbmUgVVNCX0RFVklDRV9JRF9MT0dJVEVDSF9IQVJNT05ZXzE2IDB4YzExZgotI2RlZmluZSBVU0JfREVWSUNFX0lEX0xPR0lURUNIX0hBUk1PTllfMTcgMHhjMTIwCi0jZGVmaW5lIFVTQl9ERVZJQ0VfSURfTE9HSVRFQ0hfSEFSTU9OWV8xOCAweGMxMjEKLSNkZWZpbmUgVVNCX0RFVklDRV9JRF9MT0dJVEVDSF9IQVJNT05ZXzE5IDB4YzEyMgotI2RlZmluZSBVU0JfREVWSUNFX0lEX0xPR0lURUNIX0hBUk1PTllfMjAgMHhjMTIzCi0jZGVmaW5lIFVTQl9ERVZJQ0VfSURfTE9HSVRFQ0hfSEFSTU9OWV8yMSAweGMxMjQKLSNkZWZpbmUgVVNCX0RFVklDRV9JRF9MT0dJVEVDSF9IQVJNT05ZXzIyIDB4YzEyNQotI2RlZmluZSBVU0JfREVWSUNFX0lEX0xPR0lURUNIX0hBUk1PTllfMjMgMHhjMTI2Ci0jZGVmaW5lIFVTQl9ERVZJQ0VfSURfTE9HSVRFQ0hfSEFSTU9OWV8yNCAweGMxMjcKLSNkZWZpbmUgVVNCX0RFVklDRV9JRF9MT0dJVEVDSF9IQVJNT05ZXzI1IDB4YzEyOAotI2RlZmluZSBVU0JfREVWSUNFX0lEX0xPR0lURUNIX0hBUk1PTllfMjYgMHhjMTI5Ci0jZGVmaW5lIFVTQl9ERVZJQ0VfSURfTE9HSVRFQ0hfSEFSTU9OWV8yNyAweGMxMmEKLSNkZWZpbmUgVVNCX0RFVklDRV9JRF9MT0dJVEVDSF9IQVJNT05ZXzI4IDB4YzEyYgotI2RlZmluZSBVU0JfREVWSUNFX0lEX0xPR0lURUNIX0hBUk1PTllfMjkgMHhjMTJjCi0jZGVmaW5lIFVTQl9ERVZJQ0VfSURfTE9HSVRFQ0hfSEFSTU9OWV8zMCAweGMxMmQKLSNkZWZpbmUgVVNCX0RFVklDRV9JRF9MT0dJVEVDSF9IQVJNT05ZXzMxIDB4YzEyZQotI2RlZmluZSBVU0JfREVWSUNFX0lEX0xPR0lURUNIX0hBUk1PTllfMzIgMHhjMTJmCi0jZGVmaW5lIFVTQl9ERVZJQ0VfSURfTE9HSVRFQ0hfSEFSTU9OWV8zMyAweGMxMzAKLSNkZWZpbmUgVVNCX0RFVklDRV9JRF9MT0dJVEVDSF9IQVJNT05ZXzM0IDB4YzEzMQotI2RlZmluZSBVU0JfREVWSUNFX0lEX0xPR0lURUNIX0hBUk1PTllfMzUgMHhjMTMyCi0jZGVmaW5lIFVTQl9ERVZJQ0VfSURfTE9HSVRFQ0hfSEFSTU9OWV8zNiAweGMxMzMKLSNkZWZpbmUgVVNCX0RFVklDRV9JRF9MT0dJVEVDSF9IQVJNT05ZXzM3IDB4YzEzNAotI2RlZmluZSBVU0JfREVWSUNFX0lEX0xPR0lURUNIX0hBUk1PTllfMzggMHhjMTM1Ci0jZGVmaW5lIFVTQl9ERVZJQ0VfSURfTE9HSVRFQ0hfSEFSTU9OWV8zOSAweGMxMzYKLSNkZWZpbmUgVVNCX0RFVklDRV9JRF9MT0dJVEVDSF9IQVJNT05ZXzQwIDB4YzEzNwotI2RlZmluZSBVU0JfREVWSUNFX0lEX0xPR0lURUNIX0hBUk1PTllfNDEgMHhjMTM4Ci0jZGVmaW5lIFVTQl9ERVZJQ0VfSURfTE9HSVRFQ0hfSEFSTU9OWV80MiAweGMxMzkKLSNkZWZpbmUgVVNCX0RFVklDRV9JRF9MT0dJVEVDSF9IQVJNT05ZXzQzIDB4YzEzYQotI2RlZmluZSBVU0JfREVWSUNFX0lEX0xPR0lURUNIX0hBUk1PTllfNDQgMHhjMTNiCi0jZGVmaW5lIFVTQl9ERVZJQ0VfSURfTE9HSVRFQ0hfSEFSTU9OWV80NSAweGMxM2MKLSNkZWZpbmUgVVNCX0RFVklDRV9JRF9MT0dJVEVDSF9IQVJNT05ZXzQ2IDB4YzEzZAotI2RlZmluZSBVU0JfREVWSUNFX0lEX0xPR0lURUNIX0hBUk1PTllfNDcgMHhjMTNlCi0jZGVmaW5lIFVTQl9ERVZJQ0VfSURfTE9HSVRFQ0hfSEFSTU9OWV80OCAweGMxM2YKLSNkZWZpbmUgVVNCX0RFVklDRV9JRF9MT0dJVEVDSF9IQVJNT05ZXzQ5IDB4YzE0MAotI2RlZmluZSBVU0JfREVWSUNFX0lEX0xPR0lURUNIX0hBUk1PTllfNTAgMHhjMTQxCi0jZGVmaW5lIFVTQl9ERVZJQ0VfSURfTE9HSVRFQ0hfSEFSTU9OWV81MSAweGMxNDIKLSNkZWZpbmUgVVNCX0RFVklDRV9JRF9MT0dJVEVDSF9IQVJNT05ZXzUyIDB4YzE0MwotI2RlZmluZSBVU0JfREVWSUNFX0lEX0xPR0lURUNIX0hBUk1PTllfNTMgMHhjMTQ0Ci0jZGVmaW5lIFVTQl9ERVZJQ0VfSURfTE9HSVRFQ0hfSEFSTU9OWV81NCAweGMxNDUKLSNkZWZpbmUgVVNCX0RFVklDRV9JRF9MT0dJVEVDSF9IQVJNT05ZXzU1IDB4YzE0NgotI2RlZmluZSBVU0JfREVWSUNFX0lEX0xPR0lURUNIX0hBUk1PTllfNTYgMHhjMTQ3Ci0jZGVmaW5lIFVTQl9ERVZJQ0VfSURfTE9HSVRFQ0hfSEFSTU9OWV81NyAweGMxNDgKLSNkZWZpbmUgVVNCX0RFVklDRV9JRF9MT0dJVEVDSF9IQVJNT05ZXzU4IDB4YzE0OQotI2RlZmluZSBVU0JfREVWSUNFX0lEX0xPR0lURUNIX0hBUk1PTllfNTkgMHhjMTRhCi0jZGVmaW5lIFVTQl9ERVZJQ0VfSURfTE9HSVRFQ0hfSEFSTU9OWV82MCAweGMxNGIKLSNkZWZpbmUgVVNCX0RFVklDRV9JRF9MT0dJVEVDSF9IQVJNT05ZXzYxIDB4YzE0YwotI2RlZmluZSBVU0JfREVWSUNFX0lEX0xPR0lURUNIX0hBUk1PTllfNjIgMHhjMTRkCi0jZGVmaW5lIFVTQl9ERVZJQ0VfSURfTE9HSVRFQ0hfSEFSTU9OWV82MyAweGMxNGUKLSNkZWZpbmUgVVNCX0RFVklDRV9JRF9MT0dJVEVDSF9IQVJNT05ZXzY0IDB4YzE0ZgotI2RlZmluZSBVU0JfREVWSUNFX0lEX0xPR0lURUNIX0VYVFJFTUVfM0QJMHhjMjE1Ci0jZGVmaW5lIFVTQl9ERVZJQ0VfSURfTE9HSVRFQ0hfV0hFRUwJMHhjMjk0Ci0jZGVmaW5lIFVTQl9ERVZJQ0VfSURfTE9HSVRFQ0hfRUxJVEVfS0JECTB4YzMwYQotI2RlZmluZSBVU0JfREVWSUNFX0lEX0xPR0lURUNIX0tCRAkweGMzMTEKLSNkZWZpbmUgVVNCX0RFVklDRV9JRF9TNTEwX1JFQ0VJVkVSCTB4YzUwYwotI2RlZmluZSBVU0JfREVWSUNFX0lEX1M1MTBfUkVDRUlWRVJfMgkweGM1MTcKLSNkZWZpbmUgVVNCX0RFVklDRV9JRF9MT0dJVEVDSF9DT1JETEVTU19ERVNLVE9QX0xYNTAwCTB4YzUxMgotI2RlZmluZSBVU0JfREVWSUNFX0lEX01YMzAwMF9SRUNFSVZFUgkweGM1MTMKLSNkZWZpbmUgVVNCX0RFVklDRV9JRF9ESU5PVk9fREVTS1RPUAkweGM3MDQKLSNkZWZpbmUgVVNCX0RFVklDRV9JRF9ESU5PVk9fRURHRQkweGM3MTQKLSNkZWZpbmUgVVNCX0RFVklDRV9JRF9ESU5PVk9fTUlOSQkweGM3MWYKLQotI2RlZmluZSBVU0JfVkVORE9SX0lEX01DQwkJMHgwOWRiCi0jZGVmaW5lIFVTQl9ERVZJQ0VfSURfTUNDX1BNRDEwMjRMUwkweDAwNzYKLSNkZWZpbmUgVVNCX0RFVklDRV9JRF9NQ0NfUE1EMTIwOExTCTB4MDA3YQotCi0jZGVmaW5lIFVTQl9WRU5ET1JfSURfTUdFCQkweDA0NjMKLSNkZWZpbmUgVVNCX0RFVklDRV9JRF9NR0VfVVBTCQkweGZmZmYKLSNkZWZpbmUgVVNCX0RFVklDRV9JRF9NR0VfVVBTMQkJMHgwMDAxCi0KLSNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9NSUNST0NISVAJCTB4MDRkOAotI2RlZmluZSBVU0JfREVWSUNFX0lEX1BJQ0tJVDEJCTB4MDAzMgotI2RlZmluZSBVU0JfREVWSUNFX0lEX1BJQ0tJVDIJCTB4MDAzMwotCi0jZGVmaW5lIFVTQl9WRU5ET1JfSURfTUlDUk9TT0ZUCQkweDA0NWUKLSNkZWZpbmUgVVNCX0RFVklDRV9JRF9TSURFV0lOREVSX0dWCTB4MDAzYgotI2RlZmluZSBVU0JfREVWSUNFX0lEX1dJUkVMRVNTX09QVElDQUxfREVTS1RPUF8zXzAgMHgwMDlkCi0jZGVmaW5lIFVTQl9ERVZJQ0VfSURfREVTS1RPUF9SRUNWXzEwMjggMHgwMGY5Ci0jZGVmaW5lIFVTQl9ERVZJQ0VfSURfTVNfTkU0SwkJMHgwMGRiCi0jZGVmaW5lIFVTQl9ERVZJQ0VfSURfTVNfTEs2SwkJMHgwMGY5Ci0KLSNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9NT05URVJFWQkJMHgwNTY2Ci0jZGVmaW5lIFVTQl9ERVZJQ0VfSURfR0VOSVVTX0tCMjlFCTB4MzAwNAotCi0jZGVmaW5lIFVTQl9WRU5ET1JfSURfTkNSCQkweDA0MDQKLSNkZWZpbmUgVVNCX0RFVklDRV9JRF9OQ1JfRklSU1QJCTB4MDMwMAotI2RlZmluZSBVU0JfREVWSUNFX0lEX05DUl9MQVNUCQkweDAzZmYKLQotI2RlZmluZSBVU0JfVkVORE9SX0lEX05BVElPTkFMX1NFTUlDT05EVUNUT1IgMHgwNDAwCi0jZGVmaW5lIFVTQl9ERVZJQ0VfSURfTl9TX0hBUk1PTlkgICAgICAgMHhjMzU5Ci0KLSNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9OQVRTVSAgICAgICAgICAgICAweDA4YjcKLSNkZWZpbmUgVVNCX0RFVklDRV9JRF9OQVRTVV9HQU1FUEFEICAgICAweDAwMDEKLQotI2RlZmluZSBVU0JfVkVORE9SX0lEX05FQwkJMHgwNzNlCi0jZGVmaW5lIFVTQl9ERVZJQ0VfSURfTkVDX1VTQl9HQU1FX1BBRAkweDAzMDEKLQotI2RlZmluZSBVU0JfVkVORE9SX0lEX09OVFJBSwkJMHgwYTA3Ci0jZGVmaW5lIFVTQl9ERVZJQ0VfSURfT05UUkFLX0FEVTEwMAkweDAwNjQKLQotI2RlZmluZSBVU0JfVkVORE9SX0lEX1BBTkpJVAkJMHgxMzRjCi0KLSNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9QQU5USEVSTE9SRAkweDA4MTAKLSNkZWZpbmUgVVNCX0RFVklDRV9JRF9QQU5USEVSTE9SRF9UV0lOX1VTQl9KT1lTVElDSwkweDAwMDEKLQotI2RlZmluZSBVU0JfVkVORE9SX0lEX1BFVEFMWU5YCQkweDE4YjEKLSNkZWZpbmUgVVNCX0RFVklDRV9JRF9QRVRBTFlOWF9NQVhURVJfUkVNT1RFCTB4MDAzNwotCi0jZGVmaW5lIFVTQl9WRU5ET1JfSURfUExBWURPVENPTQkweDBiNDMKLSNkZWZpbmUgVVNCX0RFVklDRV9JRF9QTEFZRE9UQ09NX0VNU19VU0JJSQkweDAwMDMKLQotI2RlZmluZSBVU0JfVkVORE9SX0lEX1NBSVRFSwkJMHgwNmEzCi0jZGVmaW5lIFVTQl9ERVZJQ0VfSURfU0FJVEVLX1JVTUJMRVBBRAkweGZmMTcKLQotI2RlZmluZSBVU0JfVkVORE9SX0lEX1NBTVNVTkcJCTB4MDQxOQotI2RlZmluZSBVU0JfREVWSUNFX0lEX1NBTVNVTkdfSVJfUkVNT1RFCTB4MDAwMQotCi0jZGVmaW5lIFVTQl9WRU5ET1JfSURfU09OWQkJCTB4MDU0YwotI2RlZmluZSBVU0JfREVWSUNFX0lEX1NPTllfUFMzX0NPTlRST0xMRVIJMHgwMjY4Ci0KLSNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9TT1VOREdSQVBICTB4MTVjMgotI2RlZmluZSBVU0JfREVWSUNFX0lEX1NPVU5ER1JBUEhfSU1PTl9MQ0QJMHgwMDM4Ci0KLSNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9TVU4JCTB4MDQzMAotI2RlZmluZSBVU0JfREVWSUNFX0lEX1JBUklUQU5fS1ZNX0RPTkdMRQkweGNkYWIKLQotI2RlZmluZSBVU0JfVkVORE9SX0lEX1NVTlBMVVMJCTB4MDRmYwotI2RlZmluZSBVU0JfREVWSUNFX0lEX1NVTlBMVVNfV0RFU0tUT1AJMHgwNWQ4Ci0KLSNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9UT1BNQVgJCTB4MDY2MwotI2RlZmluZSBVU0JfREVWSUNFX0lEX1RPUE1BWF9DT0JSQVBBRAkweDAxMDMKLQotI2RlZmluZSBVU0JfVkVORE9SX0lEX1RVUkJPWAkJMHgwNjJhCi0jZGVmaW5lIFVTQl9ERVZJQ0VfSURfVFVSQk9YX0tFWUJPQVJECTB4MDIwMQotCi0jZGVmaW5lIFVTQl9WRU5ET1JfSURfVkVSTklFUgkJMHgwOGY3Ci0jZGVmaW5lIFVTQl9ERVZJQ0VfSURfVkVSTklFUl9MQUJQUk8JMHgwMDAxCi0jZGVmaW5lIFVTQl9ERVZJQ0VfSURfVkVSTklFUl9HT1RFTVAJMHgwMDAyCi0jZGVmaW5lIFVTQl9ERVZJQ0VfSURfVkVSTklFUl9TS0lQCTB4MDAwMwotI2RlZmluZSBVU0JfREVWSUNFX0lEX1ZFUk5JRVJfQ1lDTE9QUwkweDAwMDQKLSNkZWZpbmUgVVNCX0RFVklDRV9JRF9WRVJOSUVSX0xDU1BFQwkweDAwMDYKLQotI2RlZmluZSBVU0JfVkVORE9SX0lEX1dBQ09NCQkweDA1NmEKLQotI2RlZmluZSBVU0JfVkVORE9SX0lEX1dJU0VHUk9VUAkJMHgwOTI1Ci0jZGVmaW5lIFVTQl9ERVZJQ0VfSURfMV9QSElER0VUU0VSVk9fMjAJMHg4MTAxCi0jZGVmaW5lIFVTQl9ERVZJQ0VfSURfNF9QSElER0VUU0VSVk9fMjAJMHg4MTA0Ci0jZGVmaW5lIFVTQl9ERVZJQ0VfSURfOF84XzRfSUZfS0lUCTB4ODIwMQotI2RlZmluZSBVU0JfREVWSUNFX0lEX1FVQURfVVNCX0pPWVBBRAkweDg4MDAKLSNkZWZpbmUgVVNCX0RFVklDRV9JRF9EVUFMX1VTQl9KT1lQQUQJMHg4ODY2Ci0KLSNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9XSVNFR1JPVVBfTFRECTB4NjY3NwotI2RlZmluZSBVU0JfREVWSUNFX0lEX1NNQVJUSk9ZX0RVQUxfUExVUyAweDg4MDIKLQotI2RlZmluZSBVU0JfVkVORE9SX0lEX1lFQUxJTksJCTB4Njk5MwotI2RlZmluZSBVU0JfREVWSUNFX0lEX1lFQUxJTktfUDFLX1A0S19CMksJMHhiMDAxCi0KLSNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9LWUUJCTB4MDQ1OAotI2RlZmluZSBVU0JfREVWSUNFX0lEX0tZRV9HUEVOXzU2MAkweDUwMDMKKyNpbmNsdWRlICIuLi9oaWQtaWRzLmgiCiAKIC8qCiAgKiBBbHBoYWJldGljYWxseSBzb3J0ZWQgYmxhY2tsaXN0IGJ5IHF1aXJrIHR5cGUuCkBAIC00MzMsMTggKzI4LDEwIEBACiAJX191MTYgaWRQcm9kdWN0OwogCV9fdTMyIHF1aXJrczsKIH0gaGlkX2JsYWNrbGlzdFtdID0gewotCi0JeyBVU0JfVkVORE9SX0lEX0E0VEVDSCwgVVNCX0RFVklDRV9JRF9BNFRFQ0hfV0NQMzJQVSwgSElEX1FVSVJLXzJXSEVFTF9NT1VTRV9IQUNLXzcgfSwKLQl7IFVTQl9WRU5ET1JfSURfQTRURUNILCBVU0JfREVWSUNFX0lEX0E0VEVDSF9YNV8wMDVELCBISURfUVVJUktfMldIRUVMX01PVVNFX0hBQ0tfQjggfSwKLQl7IFVTQl9WRU5ET1JfSURfQ1lQUkVTUywgVVNCX0RFVklDRV9JRF9DWVBSRVNTX01PVVNFLCBISURfUVVJUktfMldIRUVMX01PVVNFX0hBQ0tfNSB9LAotCi0JeyBVU0JfVkVORE9SX0lEX0xPR0lURUNILCBVU0JfREVWSUNFX0lEX0xPR0lURUNIX1JFQ0VJVkVSLCBISURfUVVJUktfQkFEX1JFTEFUSVZFX0tFWVMgfSwKLQogCXsgVVNCX1ZFTkRPUl9JRF9BQVNISU1BLCBVU0JfREVWSUNFX0lEX0FBU0hJTUFfR0FNRVBBRCwgSElEX1FVSVJLX0JBRFBBRCB9LAogCXsgVVNCX1ZFTkRPUl9JRF9BQVNISU1BLCBVU0JfREVWSUNFX0lEX0FBU0hJTUFfUFJFREFUT1IsIEhJRF9RVUlSS19CQURQQUQgfSwKIAl7IFVTQl9WRU5ET1JfSURfQUxQUywgVVNCX0RFVklDRV9JRF9JQk1fR0FNRVBBRCwgSElEX1FVSVJLX0JBRFBBRCB9LAogCXsgVVNCX1ZFTkRPUl9JRF9DSElDLCBVU0JfREVWSUNFX0lEX0NISUNfR0FNRVBBRCwgSElEX1FVSVJLX0JBRFBBRCB9LAotCXsgVVNCX1ZFTkRPUl9JRF9HQU1FUk9OLCBVU0JfREVWSUNFX0lEX0dBTUVST05fRFVBTF9QU1hfQURBUFRPUiwgSElEX1FVSVJLX01VTFRJX0lOUFVUIH0sCiAJeyBVU0JfVkVORE9SX0lEX0hBUFAsIFVTQl9ERVZJQ0VfSURfVUdDSV9EUklWSU5HLCBISURfUVVJUktfQkFEUEFEIHwgSElEX1FVSVJLX01VTFRJX0lOUFVUIH0sCiAJeyBVU0JfVkVORE9SX0lEX0hBUFAsIFVTQl9ERVZJQ0VfSURfVUdDSV9GTFlJTkcsIEhJRF9RVUlSS19CQURQQUQgfCBISURfUVVJUktfTVVMVElfSU5QVVQgfSwKIAl7IFVTQl9WRU5ET1JfSURfSEFQUCwgVVNCX0RFVklDRV9JRF9VR0NJX0ZJR0hUSU5HLCBISURfUVVJUktfQkFEUEFEIHwgSElEX1FVSVJLX01VTFRJX0lOUFVUIH0sCkBAIC00NTMsMTY5ICs0MCwxMSBAQAogCXsgVVNCX1ZFTkRPUl9JRF9TQUlURUssIFVTQl9ERVZJQ0VfSURfU0FJVEVLX1JVTUJMRVBBRCwgSElEX1FVSVJLX0JBRFBBRCB9LAogCXsgVVNCX1ZFTkRPUl9JRF9UT1BNQVgsIFVTQl9ERVZJQ0VfSURfVE9QTUFYX0NPQlJBUEFELCBISURfUVVJUktfQkFEUEFEIH0sCiAKLQl7IFVTQl9WRU5ET1JfSURfTE9HSVRFQ0gsIFVTQl9ERVZJQ0VfSURfRElOT1ZPX0RFU0tUT1AsIEhJRF9RVUlSS19EVVBMSUNBVEVfVVNBR0VTIH0sCi0JeyBVU0JfVkVORE9SX0lEX0xPR0lURUNILCBVU0JfREVWSUNFX0lEX0RJTk9WT19FREdFLCBISURfUVVJUktfRFVQTElDQVRFX1VTQUdFUyB9LAotCXsgVVNCX1ZFTkRPUl9JRF9MT0dJVEVDSCwgVVNCX0RFVklDRV9JRF9ESU5PVk9fTUlOSSwgSElEX1FVSVJLX0RVUExJQ0FURV9VU0FHRVMgfSwKLQogCXsgVVNCX1ZFTkRPUl9JRF9BRkFURUNILCBVU0JfREVWSUNFX0lEX0FGQVRFQ0hfQUY5MDE2LCBISURfUVVJUktfRlVMTFNQRUVEX0lOVEVSVkFMIH0sCiAKLQl7IFVTQl9WRU5ET1JfSURfQkVMS0lOLCBVU0JfREVWSUNFX0lEX0ZMSVBfS1ZNLCBISURfUVVJUktfSElEREVWIH0sCi0JeyBVU0JfVkVORE9SX0lEX0FQUExFLCBVU0JfREVWSUNFX0lEX0FQUExFX0lSQ09OVFJPTDQsIEhJRF9RVUlSS19ISURERVYgfCBISURfUVVJUktfSUdOT1JFX0hJRElOUFVUIH0sCi0JeyBVU0JfVkVORE9SX0lEX1NBTVNVTkcsIFVTQl9ERVZJQ0VfSURfU0FNU1VOR19JUl9SRU1PVEUsIEhJRF9RVUlSS19ISURERVYgfCBISURfUVVJUktfSUdOT1JFX0hJRElOUFVUIH0sCi0JeyBVU0JfVkVORE9SX0lEX01JQ1JPU09GVCwgVVNCX0RFVklDRV9JRF9TSURFV0lOREVSX0dWLCBISURfUVVJUktfSElESU5QVVQgfSwKLQotCXsgVVNCX1ZFTkRPUl9JRF9FWktFWSwgVVNCX0RFVklDRV9JRF9CVENfODE5MywgSElEX1FVSVJLX0hXSEVFTF9XSEVFTF9JTlZFUlQgfSwKLQotCXsgVVNCX1ZFTkRPUl9JRF9BRFNfVEVDSCwgVVNCX0RFVklDRV9JRF9BRFNfVEVDSF9SQURJT19TSTQ3MFgsIEhJRF9RVUlSS19JR05PUkUgfSwKLQl7IFVTQl9WRU5ET1JfSURfQUlQVEVLLCBVU0JfREVWSUNFX0lEX0FJUFRFS18wMSwgSElEX1FVSVJLX0lHTk9SRSB9LAotCXsgVVNCX1ZFTkRPUl9JRF9BSVBURUssIFVTQl9ERVZJQ0VfSURfQUlQVEVLXzEwLCBISURfUVVJUktfSUdOT1JFIH0sCi0JeyBVU0JfVkVORE9SX0lEX0FJUFRFSywgVVNCX0RFVklDRV9JRF9BSVBURUtfMjAsIEhJRF9RVUlSS19JR05PUkUgfSwKLQl7IFVTQl9WRU5ET1JfSURfQUlQVEVLLCBVU0JfREVWSUNFX0lEX0FJUFRFS18yMSwgSElEX1FVSVJLX0lHTk9SRSB9LAotCXsgVVNCX1ZFTkRPUl9JRF9BSVBURUssIFVTQl9ERVZJQ0VfSURfQUlQVEVLXzIyLCBISURfUVVJUktfSUdOT1JFIH0sCi0JeyBVU0JfVkVORE9SX0lEX0FJUFRFSywgVVNCX0RFVklDRV9JRF9BSVBURUtfMjMsIEhJRF9RVUlSS19JR05PUkUgfSwKLQl7IFVTQl9WRU5ET1JfSURfQUlQVEVLLCBVU0JfREVWSUNFX0lEX0FJUFRFS18yNCwgSElEX1FVSVJLX0lHTk9SRSB9LAotCXsgVVNCX1ZFTkRPUl9JRF9BSVJDQUJMRSwgVVNCX0RFVklDRV9JRF9BSVJDQUJMRTEsIEhJRF9RVUlSS19JR05PUkUgfSwKLQl7IFVTQl9WRU5ET1JfSURfQUxDT1IsIFVTQl9ERVZJQ0VfSURfQUxDT1JfVVNCUlMyMzIsIEhJRF9RVUlSS19JR05PUkUgfSwKLQl7IFVTQl9WRU5ET1JfSURfQVNVUywgVVNCX0RFVklDRV9JRF9BU1VTX0xDTSwgSElEX1FVSVJLX0lHTk9SRX0sCi0JeyBVU0JfVkVORE9SX0lEX0JFUktTSElSRSwgVVNCX0RFVklDRV9JRF9CRVJLU0hJUkVfUENXRCwgSElEX1FVSVJLX0lHTk9SRSB9LAotCXsgVVNCX1ZFTkRPUl9JRF9DSURDLCAweDAxMDMsIEhJRF9RVUlSS19JR05PUkUgfSwKLQl7IFVTQl9WRU5ET1JfSURfQ1lHTkFMLCBVU0JfREVWSUNFX0lEX0NZR05BTF9SQURJT19TSTQ3MFgsIEhJRF9RVUlSS19JR05PUkUgfSwKLQl7IFVTQl9WRU5ET1JfSURfQ01FRElBLCBVU0JfREVWSUNFX0lEX0NNMTA5LCBISURfUVVJUktfSUdOT1JFIH0sCi0JeyBVU0JfVkVORE9SX0lEX0NZUFJFU1MsIFVTQl9ERVZJQ0VfSURfQ1lQUkVTU19ISURDT00sIEhJRF9RVUlSS19JR05PUkUgfSwKLQl7IFVTQl9WRU5ET1JfSURfQ1lQUkVTUywgVVNCX0RFVklDRV9JRF9DWVBSRVNTX1VMVFJBTU9VU0UsIEhJRF9RVUlSS19JR05PUkUgfSwKLQl7IFVTQl9WRU5ET1JfSURfREVMT1JNRSwgVVNCX0RFVklDRV9JRF9ERUxPUk1FX0VBUlRITUFURSwgSElEX1FVSVJLX0lHTk9SRSB9LAotCXsgVVNCX1ZFTkRPUl9JRF9ERUxPUk1FLCBVU0JfREVWSUNFX0lEX0RFTE9STUVfRU1fTFQyMCwgSElEX1FVSVJLX0lHTk9SRSB9LAotCXsgVVNCX1ZFTkRPUl9JRF9FU1NFTlRJQUxfUkVBTElUWSwgVVNCX0RFVklDRV9JRF9FU1NFTlRJQUxfUkVBTElUWV9QNSwgSElEX1FVSVJLX0lHTk9SRSB9LAotCXsgVVNCX1ZFTkRPUl9JRF9HRU5FUkFMX1RPVUNILCAweDAwMDEsIEhJRF9RVUlSS19JR05PUkUgfSwKLQl7IFVTQl9WRU5ET1JfSURfR0VORVJBTF9UT1VDSCwgMHgwMDAyLCBISURfUVVJUktfSUdOT1JFIH0sCi0JeyBVU0JfVkVORE9SX0lEX0dFTkVSQUxfVE9VQ0gsIDB4MDAwMywgSElEX1FVSVJLX0lHTk9SRSB9LAotCXsgVVNCX1ZFTkRPUl9JRF9HRU5FUkFMX1RPVUNILCAweDAwMDQsIEhJRF9RVUlSS19JR05PUkUgfSwKLQl7IFVTQl9WRU5ET1JfSURfR0xBQiwgVVNCX0RFVklDRV9JRF80X1BISURHRVRTRVJWT18zMCwgSElEX1FVSVJLX0lHTk9SRSB9LAotCXsgVVNCX1ZFTkRPUl9JRF9HTEFCLCBVU0JfREVWSUNFX0lEXzFfUEhJREdFVFNFUlZPXzMwLCBISURfUVVJUktfSUdOT1JFIH0sCi0JeyBVU0JfVkVORE9SX0lEX0dMQUIsIFVTQl9ERVZJQ0VfSURfMF8wXzRfSUZfS0lULCBISURfUVVJUktfSUdOT1JFIH0sCi0JeyBVU0JfVkVORE9SX0lEX0dMQUIsIFVTQl9ERVZJQ0VfSURfMF8xNl8xNl9JRl9LSVQsIEhJRF9RVUlSS19JR05PUkUgfSwKLQl7IFVTQl9WRU5ET1JfSURfR0xBQiwgVVNCX0RFVklDRV9JRF84XzhfOF9JRl9LSVQsIEhJRF9RVUlSS19JR05PUkUgfSwKLQl7IFVTQl9WRU5ET1JfSURfR0xBQiwgVVNCX0RFVklDRV9JRF8wXzhfN19JRl9LSVQsIEhJRF9RVUlSS19JR05PUkUgfSwKLQl7IFVTQl9WRU5ET1JfSURfR0xBQiwgVVNCX0RFVklDRV9JRF8wXzhfOF9JRl9LSVQsIEhJRF9RVUlSS19JR05PUkUgfSwKLQl7IFVTQl9WRU5ET1JfSURfR0xBQiwgVVNCX0RFVklDRV9JRF9QSElER0VUX01PVE9SQ09OVFJPTCwgSElEX1FVSVJLX0lHTk9SRSB9LAotCXsgVVNCX1ZFTkRPUl9JRF9HT1RPUCwgVVNCX0RFVklDRV9JRF9TVVBFUl9RMiwgSElEX1FVSVJLX0lHTk9SRSB9LAotCXsgVVNCX1ZFTkRPUl9JRF9HT1RPUCwgVVNCX0RFVklDRV9JRF9HT0dPUEVOLCBISURfUVVJUktfSUdOT1JFIH0sCi0JeyBVU0JfVkVORE9SX0lEX0dPVE9QLCBVU0JfREVWSUNFX0lEX1BFTlBPV0VSLCBISURfUVVJUktfSUdOT1JFIH0sCi0JeyBVU0JfVkVORE9SX0lEX0dSRVRBR01BQ0JFVEgsIFVTQl9ERVZJQ0VfSURfR1JFVEFHTUFDQkVUSF9IVUVZLCBISURfUVVJUktfSUdOT1JFIH0sCi0JeyBVU0JfVkVORE9SX0lEX0dSSUZGSU4sIFVTQl9ERVZJQ0VfSURfUE9XRVJNQVRFLCBISURfUVVJUktfSUdOT1JFIH0sCi0JeyBVU0JfVkVORE9SX0lEX0dSSUZGSU4sIFVTQl9ERVZJQ0VfSURfU09VTkRLTk9CLCBISURfUVVJUktfSUdOT1JFIH0sCi0JeyBVU0JfVkVORE9SX0lEX0dUQ08sIFVTQl9ERVZJQ0VfSURfR1RDT185MCwgSElEX1FVSVJLX0lHTk9SRSB9LAotCXsgVVNCX1ZFTkRPUl9JRF9HVENPLCBVU0JfREVWSUNFX0lEX0dUQ09fMTAwLCBISURfUVVJUktfSUdOT1JFIH0sCi0JeyBVU0JfVkVORE9SX0lEX0dUQ08sIFVTQl9ERVZJQ0VfSURfR1RDT18xMDEsIEhJRF9RVUlSS19JR05PUkUgfSwKLQl7IFVTQl9WRU5ET1JfSURfR1RDTywgVVNCX0RFVklDRV9JRF9HVENPXzEwMywgSElEX1FVSVJLX0lHTk9SRSB9LAotCXsgVVNCX1ZFTkRPUl9JRF9HVENPLCBVU0JfREVWSUNFX0lEX0dUQ09fMTA0LCBISURfUVVJUktfSUdOT1JFIH0sCi0JeyBVU0JfVkVORE9SX0lEX0dUQ08sIFVTQl9ERVZJQ0VfSURfR1RDT18xMDUsIEhJRF9RVUlSS19JR05PUkUgfSwKLQl7IFVTQl9WRU5ET1JfSURfR1RDTywgVVNCX0RFVklDRV9JRF9HVENPXzEwNiwgSElEX1FVSVJLX0lHTk9SRSB9LAotCXsgVVNCX1ZFTkRPUl9JRF9HVENPLCBVU0JfREVWSUNFX0lEX0dUQ09fMTA3LCBISURfUVVJUktfSUdOT1JFIH0sCi0JeyBVU0JfVkVORE9SX0lEX0dUQ08sIFVTQl9ERVZJQ0VfSURfR1RDT18xMDgsIEhJRF9RVUlSS19JR05PUkUgfSwKLQl7IFVTQl9WRU5ET1JfSURfR1RDTywgVVNCX0RFVklDRV9JRF9HVENPXzIwMCwgSElEX1FVSVJLX0lHTk9SRSB9LAotCXsgVVNCX1ZFTkRPUl9JRF9HVENPLCBVU0JfREVWSUNFX0lEX0dUQ09fMjAxLCBISURfUVVJUktfSUdOT1JFIH0sCi0JeyBVU0JfVkVORE9SX0lEX0dUQ08sIFVTQl9ERVZJQ0VfSURfR1RDT18yMDIsIEhJRF9RVUlSS19JR05PUkUgfSwKLQl7IFVTQl9WRU5ET1JfSURfR1RDTywgVVNCX0RFVklDRV9JRF9HVENPXzIwMywgSElEX1FVSVJLX0lHTk9SRSB9LAotCXsgVVNCX1ZFTkRPUl9JRF9HVENPLCBVU0JfREVWSUNFX0lEX0dUQ09fMjA0LCBISURfUVVJUktfSUdOT1JFIH0sCi0JeyBVU0JfVkVORE9SX0lEX0dUQ08sIFVTQl9ERVZJQ0VfSURfR1RDT18yMDUsIEhJRF9RVUlSS19JR05PUkUgfSwKLQl7IFVTQl9WRU5ET1JfSURfR1RDTywgVVNCX0RFVklDRV9JRF9HVENPXzIwNiwgSElEX1FVSVJLX0lHTk9SRSB9LAotCXsgVVNCX1ZFTkRPUl9JRF9HVENPLCBVU0JfREVWSUNFX0lEX0dUQ09fMjA3LCBISURfUVVJUktfSUdOT1JFIH0sCi0JeyBVU0JfVkVORE9SX0lEX0dUQ08sIFVTQl9ERVZJQ0VfSURfR1RDT18zMDAsIEhJRF9RVUlSS19JR05PUkUgfSwKLQl7IFVTQl9WRU5ET1JfSURfR1RDTywgVVNCX0RFVklDRV9JRF9HVENPXzMwMSwgSElEX1FVSVJLX0lHTk9SRSB9LAotCXsgVVNCX1ZFTkRPUl9JRF9HVENPLCBVU0JfREVWSUNFX0lEX0dUQ09fMzAyLCBISURfUVVJUktfSUdOT1JFIH0sCi0JeyBVU0JfVkVORE9SX0lEX0dUQ08sIFVTQl9ERVZJQ0VfSURfR1RDT18zMDMsIEhJRF9RVUlSS19JR05PUkUgfSwKLQl7IFVTQl9WRU5ET1JfSURfR1RDTywgVVNCX0RFVklDRV9JRF9HVENPXzMwNCwgSElEX1FVSVJLX0lHTk9SRSB9LAotCXsgVVNCX1ZFTkRPUl9JRF9HVENPLCBVU0JfREVWSUNFX0lEX0dUQ09fMzA1LCBISURfUVVJUktfSUdOT1JFIH0sCi0JeyBVU0JfVkVORE9SX0lEX0dUQ08sIFVTQl9ERVZJQ0VfSURfR1RDT18zMDYsIEhJRF9RVUlSS19JR05PUkUgfSwKLQl7IFVTQl9WRU5ET1JfSURfR1RDTywgVVNCX0RFVklDRV9JRF9HVENPXzMwNywgSElEX1FVSVJLX0lHTk9SRSB9LAotCXsgVVNCX1ZFTkRPUl9JRF9HVENPLCBVU0JfREVWSUNFX0lEX0dUQ09fMzA4LCBISURfUVVJUktfSUdOT1JFIH0sCi0JeyBVU0JfVkVORE9SX0lEX0dUQ08sIFVTQl9ERVZJQ0VfSURfR1RDT18zMDksIEhJRF9RVUlSS19JR05PUkUgfSwKLQl7IFVTQl9WRU5ET1JfSURfR1RDTywgVVNCX0RFVklDRV9JRF9HVENPXzQwMCwgSElEX1FVSVJLX0lHTk9SRSB9LAotCXsgVVNCX1ZFTkRPUl9JRF9HVENPLCBVU0JfREVWSUNFX0lEX0dUQ09fNDAxLCBISURfUVVJUktfSUdOT1JFIH0sCi0JeyBVU0JfVkVORE9SX0lEX0dUQ08sIFVTQl9ERVZJQ0VfSURfR1RDT180MDIsIEhJRF9RVUlSS19JR05PUkUgfSwKLQl7IFVTQl9WRU5ET1JfSURfR1RDTywgVVNCX0RFVklDRV9JRF9HVENPXzQwMywgSElEX1FVSVJLX0lHTk9SRSB9LAotCXsgVVNCX1ZFTkRPUl9JRF9HVENPLCBVU0JfREVWSUNFX0lEX0dUQ09fNDA0LCBISURfUVVJUktfSUdOT1JFIH0sCi0JeyBVU0JfVkVORE9SX0lEX0dUQ08sIFVTQl9ERVZJQ0VfSURfR1RDT180MDUsIEhJRF9RVUlSS19JR05PUkUgfSwKLQl7IFVTQl9WRU5ET1JfSURfR1RDTywgVVNCX0RFVklDRV9JRF9HVENPXzUwMCwgSElEX1FVSVJLX0lHTk9SRSB9LAotCXsgVVNCX1ZFTkRPUl9JRF9HVENPLCBVU0JfREVWSUNFX0lEX0dUQ09fNTAxLCBISURfUVVJUktfSUdOT1JFIH0sCi0JeyBVU0JfVkVORE9SX0lEX0dUQ08sIFVTQl9ERVZJQ0VfSURfR1RDT181MDIsIEhJRF9RVUlSS19JR05PUkUgfSwKLQl7IFVTQl9WRU5ET1JfSURfR1RDTywgVVNCX0RFVklDRV9JRF9HVENPXzUwMywgSElEX1FVSVJLX0lHTk9SRSB9LAotCXsgVVNCX1ZFTkRPUl9JRF9HVENPLCBVU0JfREVWSUNFX0lEX0dUQ09fNTA0LCBISURfUVVJUktfSUdOT1JFIH0sCi0JeyBVU0JfVkVORE9SX0lEX0dUQ08sIFVTQl9ERVZJQ0VfSURfR1RDT18xMDAwLCBISURfUVVJUktfSUdOT1JFIH0sCi0JeyBVU0JfVkVORE9SX0lEX0dUQ08sIFVTQl9ERVZJQ0VfSURfR1RDT18xMDAxLCBISURfUVVJUktfSUdOT1JFIH0sCi0JeyBVU0JfVkVORE9SX0lEX0dUQ08sIFVTQl9ERVZJQ0VfSURfR1RDT18xMDAyLCBISURfUVVJUktfSUdOT1JFIH0sCi0JeyBVU0JfVkVORE9SX0lEX0dUQ08sIFVTQl9ERVZJQ0VfSURfR1RDT18xMDAzLCBISURfUVVJUktfSUdOT1JFIH0sCi0JeyBVU0JfVkVORE9SX0lEX0dUQ08sIFVTQl9ERVZJQ0VfSURfR1RDT18xMDA0LCBISURfUVVJUktfSUdOT1JFIH0sCi0JeyBVU0JfVkVORE9SX0lEX0dUQ08sIFVTQl9ERVZJQ0VfSURfR1RDT18xMDA1LCBISURfUVVJUktfSUdOT1JFIH0sCi0JeyBVU0JfVkVORE9SX0lEX0dUQ08sIFVTQl9ERVZJQ0VfSURfR1RDT18xMDA2LCBISURfUVVJUktfSUdOT1JFIH0sCi0JeyBVU0JfVkVORE9SX0lEX0dUQ08sIFVTQl9ERVZJQ0VfSURfR1RDT18xMDA3LCBISURfUVVJUktfSUdOT1JFIH0sCi0JeyBVU0JfVkVORE9SX0lEX0lNQVRJT04sIFVTQl9ERVZJQ0VfSURfRElTQ19TVEFLS0EsIEhJRF9RVUlSS19JR05PUkUgfSwKLQl7IFVTQl9WRU5ET1JfSURfS0JHRUFSLCBVU0JfREVWSUNFX0lEX0tCR0VBUl9KQU1TVFVESU8sIEhJRF9RVUlSS19JR05PUkUgfSwKLQl7IFVTQl9WRU5ET1JfSURfTEQsIFVTQl9ERVZJQ0VfSURfTERfQ0FTU1ksIEhJRF9RVUlSS19JR05PUkUgfSwKLQl7IFVTQl9WRU5ET1JfSURfTEQsIFVTQl9ERVZJQ0VfSURfTERfUE9DS0VUQ0FTU1ksIEhJRF9RVUlSS19JR05PUkUgfSwKLQl7IFVTQl9WRU5ET1JfSURfTEQsIFVTQl9ERVZJQ0VfSURfTERfTU9CSUxFQ0FTU1ksIEhJRF9RVUlSS19JR05PUkUgfSwKLQl7IFVTQl9WRU5ET1JfSURfTEQsIFVTQl9ERVZJQ0VfSURfTERfSldNLCBISURfUVVJUktfSUdOT1JFIH0sCi0JeyBVU0JfVkVORE9SX0lEX0xELCBVU0JfREVWSUNFX0lEX0xEX0RNTVAsIEhJRF9RVUlSS19JR05PUkUgfSwKLQl7IFVTQl9WRU5ET1JfSURfTEQsIFVTQl9ERVZJQ0VfSURfTERfVU1JUCwgSElEX1FVSVJLX0lHTk9SRSB9LAotCXsgVVNCX1ZFTkRPUl9JRF9MRCwgVVNCX0RFVklDRV9JRF9MRF9YUkFZMSwgSElEX1FVSVJLX0lHTk9SRSB9LAotCXsgVVNCX1ZFTkRPUl9JRF9MRCwgVVNCX0RFVklDRV9JRF9MRF9YUkFZMiwgSElEX1FVSVJLX0lHTk9SRSB9LAotCXsgVVNCX1ZFTkRPUl9JRF9MRCwgVVNCX0RFVklDRV9JRF9MRF9WSURFT0NPTSwgSElEX1FVSVJLX0lHTk9SRSB9LAotCXsgVVNCX1ZFTkRPUl9JRF9MRCwgVVNCX0RFVklDRV9JRF9MRF9DT00zTEFCLCBISURfUVVJUktfSUdOT1JFIH0sCi0JeyBVU0JfVkVORE9SX0lEX0xELCBVU0JfREVWSUNFX0lEX0xEX1RFTEVQT1JULCBISURfUVVJUktfSUdOT1JFIH0sCi0JeyBVU0JfVkVORE9SX0lEX0xELCBVU0JfREVWSUNFX0lEX0xEX05FVFdPUktBTkFMWVNFUiwgSElEX1FVSVJLX0lHTk9SRSB9LAotCXsgVVNCX1ZFTkRPUl9JRF9MRCwgVVNCX0RFVklDRV9JRF9MRF9QT1dFUkNPTlRST0wsIEhJRF9RVUlSS19JR05PUkUgfSwKLQl7IFVTQl9WRU5ET1JfSURfTEQsIFVTQl9ERVZJQ0VfSURfTERfTUFDSElORVRFU1QsIEhJRF9RVUlSS19JR05PUkUgfSwKLQl7IFVTQl9WRU5ET1JfSURfTUNDLCBVU0JfREVWSUNFX0lEX01DQ19QTUQxMDI0TFMsIEhJRF9RVUlSS19JR05PUkUgfSwKLQl7IFVTQl9WRU5ET1JfSURfTUNDLCBVU0JfREVWSUNFX0lEX01DQ19QTUQxMjA4TFMsIEhJRF9RVUlSS19JR05PUkUgfSwKLQl7IFVTQl9WRU5ET1JfSURfTUdFLCBVU0JfREVWSUNFX0lEX01HRV9VUFMsIEhJRF9RVUlSS19JR05PUkUgfSwKLQl7IFVTQl9WRU5ET1JfSURfTUdFLCBVU0JfREVWSUNFX0lEX01HRV9VUFMxLCBISURfUVVJUktfSUdOT1JFIH0sCi0JeyBVU0JfVkVORE9SX0lEX09OVFJBSywgVVNCX0RFVklDRV9JRF9PTlRSQUtfQURVMTAwLCBISURfUVVJUktfSUdOT1JFIH0sCi0JeyBVU0JfVkVORE9SX0lEX09OVFJBSywgVVNCX0RFVklDRV9JRF9PTlRSQUtfQURVMTAwICsgMjAsIEhJRF9RVUlSS19JR05PUkUgfSwKLQl7IFVTQl9WRU5ET1JfSURfT05UUkFLLCBVU0JfREVWSUNFX0lEX09OVFJBS19BRFUxMDAgKyAzMCwgSElEX1FVSVJLX0lHTk9SRSB9LAotCXsgVVNCX1ZFTkRPUl9JRF9PTlRSQUssIFVTQl9ERVZJQ0VfSURfT05UUkFLX0FEVTEwMCArIDEwMCwgSElEX1FVSVJLX0lHTk9SRSB9LAotCXsgVVNCX1ZFTkRPUl9JRF9PTlRSQUssIFVTQl9ERVZJQ0VfSURfT05UUkFLX0FEVTEwMCArIDEwOCwgSElEX1FVSVJLX0lHTk9SRSB9LAotCXsgVVNCX1ZFTkRPUl9JRF9PTlRSQUssIFVTQl9ERVZJQ0VfSURfT05UUkFLX0FEVTEwMCArIDExOCwgSElEX1FVSVJLX0lHTk9SRSB9LAotCXsgVVNCX1ZFTkRPUl9JRF9PTlRSQUssIFVTQl9ERVZJQ0VfSURfT05UUkFLX0FEVTEwMCArIDIwMCwgSElEX1FVSVJLX0lHTk9SRSB9LAotCXsgVVNCX1ZFTkRPUl9JRF9PTlRSQUssIFVTQl9ERVZJQ0VfSURfT05UUkFLX0FEVTEwMCArIDMwMCwgSElEX1FVSVJLX0lHTk9SRSB9LAotCXsgVVNCX1ZFTkRPUl9JRF9PTlRSQUssIFVTQl9ERVZJQ0VfSURfT05UUkFLX0FEVTEwMCArIDQwMCwgSElEX1FVSVJLX0lHTk9SRSB9LAotCXsgVVNCX1ZFTkRPUl9JRF9PTlRSQUssIFVTQl9ERVZJQ0VfSURfT05UUkFLX0FEVTEwMCArIDUwMCwgSElEX1FVSVJLX0lHTk9SRSB9LAotCXsgVVNCX1ZFTkRPUl9JRF9QQU5KSVQsIDB4MDAwMSwgSElEX1FVSVJLX0lHTk9SRSB9LAotCXsgVVNCX1ZFTkRPUl9JRF9QQU5KSVQsIDB4MDAwMiwgSElEX1FVSVJLX0lHTk9SRSB9LAotCXsgVVNCX1ZFTkRPUl9JRF9QQU5KSVQsIDB4MDAwMywgSElEX1FVSVJLX0lHTk9SRSB9LAotCXsgVVNCX1ZFTkRPUl9JRF9QQU5KSVQsIDB4MDAwNCwgSElEX1FVSVJLX0lHTk9SRSB9LAotCXsgVVNCX1ZFTkRPUl9JRF9TT1VOREdSQVBILCBVU0JfREVWSUNFX0lEX1NPVU5ER1JBUEhfSU1PTl9MQ0QsIEhJRF9RVUlSS19JR05PUkUgfSwKLQl7IFVTQl9WRU5ET1JfSURfVkVSTklFUiwgVVNCX0RFVklDRV9JRF9WRVJOSUVSX0xBQlBSTywgSElEX1FVSVJLX0lHTk9SRSB9LAotCXsgVVNCX1ZFTkRPUl9JRF9WRVJOSUVSLCBVU0JfREVWSUNFX0lEX1ZFUk5JRVJfR09URU1QLCBISURfUVVJUktfSUdOT1JFIH0sCi0JeyBVU0JfVkVORE9SX0lEX1ZFUk5JRVIsIFVTQl9ERVZJQ0VfSURfVkVSTklFUl9TS0lQLCBISURfUVVJUktfSUdOT1JFIH0sCi0JeyBVU0JfVkVORE9SX0lEX1ZFUk5JRVIsIFVTQl9ERVZJQ0VfSURfVkVSTklFUl9DWUNMT1BTLCBISURfUVVJUktfSUdOT1JFIH0sCi0JeyBVU0JfVkVORE9SX0lEX1ZFUk5JRVIsIFVTQl9ERVZJQ0VfSURfVkVSTklFUl9MQ1NQRUMsIEhJRF9RVUlSS19JR05PUkUgfSwKLQl7IFVTQl9WRU5ET1JfSURfV0lTRUdST1VQLCBVU0JfREVWSUNFX0lEXzRfUEhJREdFVFNFUlZPXzIwLCBISURfUVVJUktfSUdOT1JFIH0sCi0JeyBVU0JfVkVORE9SX0lEX1dJU0VHUk9VUCwgVVNCX0RFVklDRV9JRF8xX1BISURHRVRTRVJWT18yMCwgSElEX1FVSVJLX0lHTk9SRSB9LAotCXsgVVNCX1ZFTkRPUl9JRF9XSVNFR1JPVVAsIFVTQl9ERVZJQ0VfSURfOF84XzRfSUZfS0lULCBISURfUVVJUktfSUdOT1JFIH0sCi0JeyBVU0JfVkVORE9SX0lEX1lFQUxJTkssIFVTQl9ERVZJQ0VfSURfWUVBTElOS19QMUtfUDRLX0IySywgSElEX1FVSVJLX0lHTk9SRSB9LAotCi0JeyBVU0JfVkVORE9SX0lEX0FDRUNBRCwgVVNCX0RFVklDRV9JRF9BQ0VDQURfRkxBSVIsIEhJRF9RVUlSS19JR05PUkUgfSwKLQl7IFVTQl9WRU5ET1JfSURfQUNFQ0FELCBVU0JfREVWSUNFX0lEX0FDRUNBRF8zMDIsIEhJRF9RVUlSS19JR05PUkUgfSwKLQotCXsgVVNCX1ZFTkRPUl9JRF9NSUNST0NISVAsIFVTQl9ERVZJQ0VfSURfUElDS0lUMSwgSElEX1FVSVJLX0lHTk9SRSB9LAotCXsgVVNCX1ZFTkRPUl9JRF9NSUNST0NISVAsIFVTQl9ERVZJQ0VfSURfUElDS0lUMiwgSElEX1FVSVJLX0lHTk9SRSB9LAotCi0JeyBVU0JfVkVORE9SX0lEX0xPR0lURUNILCBVU0JfREVWSUNFX0lEX0xPR0lURUNIX0VMSVRFX0tCRCwgSElEX1FVSVJLX0xPR0lURUNIX0lHTk9SRV9ET1VCTEVEX1dIRUVMIHwgSElEX1FVSVJLX0xPR0lURUNIX0VYUEFOREVEX0tFWU1BUCB9LAotCXsgVVNCX1ZFTkRPUl9JRF9MT0dJVEVDSCwgVVNCX0RFVklDRV9JRF9MT0dJVEVDSF9DT1JETEVTU19ERVNLVE9QX0xYNTAwLCBISURfUVVJUktfTE9HSVRFQ0hfSUdOT1JFX0RPVUJMRURfV0hFRUwgfCBISURfUVVJUktfTE9HSVRFQ0hfRVhQQU5ERURfS0VZTUFQIH0sCi0JeyBVU0JfVkVORE9SX0lEX0xPR0lURUNILCBVU0JfREVWSUNFX0lEX0xPR0lURUNIX0xYMywgSElEX1FVSVJLX0lOVkVSVF9IV0hFRUwgfSwKLQl7IFVTQl9WRU5ET1JfSURfTE9HSVRFQ0gsIFVTQl9ERVZJQ0VfSURfTE9HSVRFQ0hfVjE1MCwgSElEX1FVSVJLX0lOVkVSVF9IV0hFRUwgfSwKLQotCXsgVVNCX1ZFTkRPUl9JRF9NSUNST1NPRlQsIFVTQl9ERVZJQ0VfSURfTVNfTkU0SywgSElEX1FVSVJLX01JQ1JPU09GVF9LRVlTIH0sCi0JeyBVU0JfVkVORE9SX0lEX01JQ1JPU09GVCwgVVNCX0RFVklDRV9JRF9NU19MSzZLLCBISURfUVVJUktfTUlDUk9TT0ZUX0tFWVMgfSwKLQotCXsgVVNCX1ZFTkRPUl9JRF9BUFBMRSwgVVNCX0RFVklDRV9JRF9BUFBMRV9NSUdIVFlNT1VTRSwgSElEX1FVSVJLX01JR0hUWU1PVVNFIHwgSElEX1FVSVJLX0lOVkVSVF9IV0hFRUwgfSwKLQogCXsgVVNCX1ZFTkRPUl9JRF9QQU5USEVSTE9SRCwgVVNCX0RFVklDRV9JRF9QQU5USEVSTE9SRF9UV0lOX1VTQl9KT1lTVElDSywgSElEX1FVSVJLX01VTFRJX0lOUFVUIHwgSElEX1FVSVJLX1NLSVBfT1VUUFVUX1JFUE9SVFMgfSwKIAl7IFVTQl9WRU5ET1JfSURfUExBWURPVENPTSwgVVNCX0RFVklDRV9JRF9QTEFZRE9UQ09NX0VNU19VU0JJSSwgSElEX1FVSVJLX01VTFRJX0lOUFVUIH0sCiAKLQl7IFVTQl9WRU5ET1JfSURfU09OWSwgVVNCX0RFVklDRV9JRF9TT05ZX1BTM19DT05UUk9MTEVSLCBISURfUVVJUktfU09OWV9QUzNfQ09OVFJPTExFUiB8IEhJRF9RVUlSS19ISURERVYgfSwKLQogCXsgVVNCX1ZFTkRPUl9JRF9BVEVOLCBVU0JfREVWSUNFX0lEX0FURU5fVUMxMDBLTSwgSElEX1FVSVJLX05PR0VUIH0sCiAJeyBVU0JfVkVORE9SX0lEX0FURU4sIFVTQl9ERVZJQ0VfSURfQVRFTl9DUzEyNFUsIEhJRF9RVUlSS19OT0dFVCB9LAogCXsgVVNCX1ZFTkRPUl9JRF9BVEVOLCBVU0JfREVWSUNFX0lEX0FURU5fMlBPUlRLVk0sIEhJRF9RVUlSS19OT0dFVCB9LApAQCAtNjIzLDE0NCArNTIsMTMgQEAKIAl7IFVTQl9WRU5ET1JfSURfQVRFTiwgVVNCX0RFVklDRV9JRF9BVEVOXzRQT1JUS1ZNQywgSElEX1FVSVJLX05PR0VUIH0sCiAJeyBVU0JfVkVORE9SX0lEX0RNSSwgVVNCX0RFVklDRV9JRF9ETUlfRU5DLCBISURfUVVJUktfTk9HRVQgfSwKIAl7IFVTQl9WRU5ET1JfSURfRUxPLCBVU0JfREVWSUNFX0lEX0VMT19UUzI3MDAsIEhJRF9RVUlSS19OT0dFVCB9LAotCXsgVVNCX1ZFTkRPUl9JRF9MT0dJVEVDSCwgVVNCX0RFVklDRV9JRF9MT0dJVEVDSF9FWFRSRU1FXzNELCBISURfUVVJUktfTk9HRVQgfSwKLQl7IFVTQl9WRU5ET1JfSURfTE9HSVRFQ0gsIFVTQl9ERVZJQ0VfSURfTE9HSVRFQ0hfV0hFRUwsIEhJRF9RVUlSS19OT0dFVCB9LAotCXsgVVNCX1ZFTkRPUl9JRF9NSUNST1NPRlQsIFVTQl9ERVZJQ0VfSURfV0lSRUxFU1NfT1BUSUNBTF9ERVNLVE9QXzNfMCwgSElEX1FVSVJLX05PR0VUIH0sCi0JeyBVU0JfVkVORE9SX0lEX1BFVEFMWU5YLCBVU0JfREVWSUNFX0lEX1BFVEFMWU5YX01BWFRFUl9SRU1PVEUsIEhJRF9RVUlSS19OT0dFVCB9LAogCXsgVVNCX1ZFTkRPUl9JRF9TVU4sIFVTQl9ERVZJQ0VfSURfUkFSSVRBTl9LVk1fRE9OR0xFLCBISURfUVVJUktfTk9HRVQgfSwKIAl7IFVTQl9WRU5ET1JfSURfVFVSQk9YLCBVU0JfREVWSUNFX0lEX1RVUkJPWF9LRVlCT0FSRCwgSElEX1FVSVJLX05PR0VUIH0sCiAJeyBVU0JfVkVORE9SX0lEX1dJU0VHUk9VUCwgVVNCX0RFVklDRV9JRF9EVUFMX1VTQl9KT1lQQUQsIEhJRF9RVUlSS19OT0dFVCB8IEhJRF9RVUlSS19NVUxUSV9JTlBVVCB8IEhJRF9RVUlSS19TS0lQX09VVFBVVF9SRVBPUlRTIH0sCiAJeyBVU0JfVkVORE9SX0lEX1dJU0VHUk9VUCwgVVNCX0RFVklDRV9JRF9RVUFEX1VTQl9KT1lQQUQsIEhJRF9RVUlSS19OT0dFVCB8IEhJRF9RVUlSS19NVUxUSV9JTlBVVCB9LAogCiAJeyBVU0JfVkVORE9SX0lEX1dJU0VHUk9VUF9MVEQsIFVTQl9ERVZJQ0VfSURfU01BUlRKT1lfRFVBTF9QTFVTLCBISURfUVVJUktfTk9HRVQgfCBISURfUVVJUktfTVVMVElfSU5QVVQgfSwKLQotCXsgVVNCX1ZFTkRPUl9JRF9BUFBMRSwgVVNCX0RFVklDRV9JRF9BUFBMRV9GT1VOVEFJTl9BTlNJLCBISURfUVVJUktfQVBQTEVfTlVNTE9DS19FTVVMQVRJT04gfCBISURfUVVJUktfQVBQTEVfSEFTX0ZOIHwgSElEX1FVSVJLX0lHTk9SRV9NT1VTRSB9LAotCXsgVVNCX1ZFTkRPUl9JRF9BUFBMRSwgVVNCX0RFVklDRV9JRF9BUFBMRV9GT1VOVEFJTl9JU08sIEhJRF9RVUlSS19BUFBMRV9OVU1MT0NLX0VNVUxBVElPTiB8IEhJRF9RVUlSS19BUFBMRV9IQVNfRk4gfCBISURfUVVJUktfSUdOT1JFX01PVVNFIH0sCi0JeyBVU0JfVkVORE9SX0lEX0FQUExFLCBVU0JfREVWSUNFX0lEX0FQUExFX0dFWVNFUl9BTlNJLCBISURfUVVJUktfQVBQTEVfTlVNTE9DS19FTVVMQVRJT04gfCBISURfUVVJUktfQVBQTEVfSEFTX0ZOIHwgSElEX1FVSVJLX0lHTk9SRV9NT1VTRSB9LAotCXsgVVNCX1ZFTkRPUl9JRF9BUFBMRSwgVVNCX0RFVklDRV9JRF9BUFBMRV9HRVlTRVJfSVNPLCBISURfUVVJUktfQVBQTEVfTlVNTE9DS19FTVVMQVRJT04gfCBISURfUVVJUktfQVBQTEVfSEFTX0ZOIHwgSElEX1FVSVJLX0lHTk9SRV9NT1VTRSB8IEhJRF9RVUlSS19BUFBMRV9JU09fS0VZQk9BUkR9LAotCXsgVVNCX1ZFTkRPUl9JRF9BUFBMRSwgVVNCX0RFVklDRV9JRF9BUFBMRV9HRVlTRVJfSklTLCBISURfUVVJUktfQVBQTEVfTlVNTE9DS19FTVVMQVRJT04gfCBISURfUVVJUktfQVBQTEVfSEFTX0ZOIHwgSElEX1FVSVJLX0lHTk9SRV9NT1VTRSB9LAotCXsgVVNCX1ZFTkRPUl9JRF9BUFBMRSwgVVNCX0RFVklDRV9JRF9BUFBMRV9HRVlTRVIzX0FOU0ksIEhJRF9RVUlSS19BUFBMRV9OVU1MT0NLX0VNVUxBVElPTiB8IEhJRF9RVUlSS19BUFBMRV9IQVNfRk4gfCBISURfUVVJUktfSUdOT1JFX01PVVNFIH0sCi0JeyBVU0JfVkVORE9SX0lEX0FQUExFLCBVU0JfREVWSUNFX0lEX0FQUExFX0dFWVNFUjNfSVNPLCBISURfUVVJUktfQVBQTEVfTlVNTE9DS19FTVVMQVRJT04gfCBISURfUVVJUktfQVBQTEVfSEFTX0ZOIHwgSElEX1FVSVJLX0lHTk9SRV9NT1VTRSB8IEhJRF9RVUlSS19BUFBMRV9JU09fS0VZQk9BUkR9LAotCXsgVVNCX1ZFTkRPUl9JRF9BUFBMRSwgVVNCX0RFVklDRV9JRF9BUFBMRV9HRVlTRVIzX0pJUywgSElEX1FVSVJLX0FQUExFX05VTUxPQ0tfRU1VTEFUSU9OIHwgSElEX1FVSVJLX0FQUExFX0hBU19GTiB8IEhJRF9RVUlSS19JR05PUkVfTU9VU0UgfSwKLQl7IFVTQl9WRU5ET1JfSURfQVBQTEUsIFVTQl9ERVZJQ0VfSURfQVBQTEVfR0VZU0VSNF9BTlNJLCBISURfUVVJUktfQVBQTEVfTlVNTE9DS19FTVVMQVRJT04gfCBISURfUVVJUktfQVBQTEVfSEFTX0ZOIHwgSElEX1FVSVJLX0lHTk9SRV9NT1VTRSB9LAotCXsgVVNCX1ZFTkRPUl9JRF9BUFBMRSwgVVNCX0RFVklDRV9JRF9BUFBMRV9HRVlTRVI0X0lTTywgSElEX1FVSVJLX0FQUExFX05VTUxPQ0tfRU1VTEFUSU9OIHwgSElEX1FVSVJLX0FQUExFX0hBU19GTiB8IEhJRF9RVUlSS19JR05PUkVfTU9VU0UgfCBISURfUVVJUktfQVBQTEVfSVNPX0tFWUJPQVJEfSwKLQl7IFVTQl9WRU5ET1JfSURfQVBQTEUsIFVTQl9ERVZJQ0VfSURfQVBQTEVfR0VZU0VSNF9KSVMsIEhJRF9RVUlSS19BUFBMRV9OVU1MT0NLX0VNVUxBVElPTiB8IEhJRF9RVUlSS19BUFBMRV9IQVNfRk4gfCBISURfUVVJUktfSUdOT1JFX01PVVNFIH0sCi0JeyBVU0JfVkVORE9SX0lEX0FQUExFLCBVU0JfREVWSUNFX0lEX0FQUExFX0FMVV9BTlNJLCBISURfUVVJUktfQVBQTEVfSEFTX0ZOIH0sCi0JeyBVU0JfVkVORE9SX0lEX0FQUExFLCBVU0JfREVWSUNFX0lEX0FQUExFX0FMVV9JU08sIEhJRF9RVUlSS19BUFBMRV9IQVNfRk4gfCBISURfUVVJUktfQVBQTEVfSVNPX0tFWUJPQVJEIH0sCi0JeyBVU0JfVkVORE9SX0lEX0FQUExFLCBVU0JfREVWSUNFX0lEX0FQUExFX0FMVV9KSVMsIEhJRF9RVUlSS19BUFBMRV9IQVNfRk4gfSwKLQl7IFVTQl9WRU5ET1JfSURfQVBQTEUsIFVTQl9ERVZJQ0VfSURfQVBQTEVfR0VZU0VSNF9IRl9BTlNJLCBISURfUVVJUktfQVBQTEVfTlVNTE9DS19FTVVMQVRJT04gfCBISURfUVVJUktfQVBQTEVfSEFTX0ZOIHwgSElEX1FVSVJLX0lHTk9SRV9NT1VTRSB9LAotCXsgVVNCX1ZFTkRPUl9JRF9BUFBMRSwgVVNCX0RFVklDRV9JRF9BUFBMRV9HRVlTRVI0X0hGX0lTTywgSElEX1FVSVJLX0FQUExFX05VTUxPQ0tfRU1VTEFUSU9OIHwgSElEX1FVSVJLX0FQUExFX0hBU19GTiB8IEhJRF9RVUlSS19JR05PUkVfTU9VU0UgfSwKLQl7IFVTQl9WRU5ET1JfSURfQVBQTEUsIFVTQl9ERVZJQ0VfSURfQVBQTEVfR0VZU0VSNF9IRl9KSVMsIEhJRF9RVUlSS19BUFBMRV9OVU1MT0NLX0VNVUxBVElPTiB8IEhJRF9RVUlSS19BUFBMRV9IQVNfRk4gfCBISURfUVVJUktfSUdOT1JFX01PVVNFIH0sCi0JeyBVU0JfVkVORE9SX0lEX0FQUExFLCBVU0JfREVWSUNFX0lEX0FQUExFX0FMVV9XSVJFTEVTU19BTlNJLCBISURfUVVJUktfQVBQTEVfTlVNTE9DS19FTVVMQVRJT04gfCBISURfUVVJUktfQVBQTEVfSEFTX0ZOIH0sCi0JeyBVU0JfVkVORE9SX0lEX0FQUExFLCBVU0JfREVWSUNFX0lEX0FQUExFX0FMVV9XSVJFTEVTU19JU08sIEhJRF9RVUlSS19BUFBMRV9OVU1MT0NLX0VNVUxBVElPTiB8IEhJRF9RVUlSS19BUFBMRV9IQVNfRk4gfCBISURfUVVJUktfQVBQTEVfSVNPX0tFWUJPQVJEIH0sCi0JeyBVU0JfVkVORE9SX0lEX0FQUExFLCBVU0JfREVWSUNFX0lEX0FQUExFX0FMVV9XSVJFTEVTU19KSVMsIEhJRF9RVUlSS19BUFBMRV9OVU1MT0NLX0VNVUxBVElPTiB8IEhJRF9RVUlSS19BUFBMRV9IQVNfRk4gfSwKLQl7IFVTQl9WRU5ET1JfSURfQVBQTEUsIFVTQl9ERVZJQ0VfSURfQVBQTEVfV0VMTFNQUklOR19BTlNJLCBISURfUVVJUktfQVBQTEVfSEFTX0ZOIHwgSElEX1FVSVJLX0lHTk9SRV9NT1VTRSB9LAotCXsgVVNCX1ZFTkRPUl9JRF9BUFBMRSwgVVNCX0RFVklDRV9JRF9BUFBMRV9XRUxMU1BSSU5HX0lTTywgSElEX1FVSVJLX0FQUExFX0hBU19GTiB8IEhJRF9RVUlSS19BUFBMRV9JU09fS0VZQk9BUkQgfCBISURfUVVJUktfSUdOT1JFX01PVVNFfSwKLQl7IFVTQl9WRU5ET1JfSURfQVBQTEUsIFVTQl9ERVZJQ0VfSURfQVBQTEVfV0VMTFNQUklOR19KSVMsIEhJRF9RVUlSS19BUFBMRV9IQVNfRk4gfCBISURfUVVJUktfSUdOT1JFX01PVVNFfSwKLQl7IFVTQl9WRU5ET1JfSURfQVBQTEUsIFVTQl9ERVZJQ0VfSURfQVBQTEVfV0VMTFNQUklORzJfQU5TSSwgSElEX1FVSVJLX0FQUExFX0hBU19GTiB8IEhJRF9RVUlSS19JR05PUkVfTU9VU0V9LAotCXsgVVNCX1ZFTkRPUl9JRF9BUFBMRSwgVVNCX0RFVklDRV9JRF9BUFBMRV9XRUxMU1BSSU5HMl9JU08sIEhJRF9RVUlSS19BUFBMRV9IQVNfRk4gfCBISURfUVVJUktfQVBQTEVfSVNPX0tFWUJPQVJEIHwgSElEX1FVSVJLX0lHTk9SRV9NT1VTRSB9LAotCXsgVVNCX1ZFTkRPUl9JRF9BUFBMRSwgVVNCX0RFVklDRV9JRF9BUFBMRV9XRUxMU1BSSU5HMl9KSVMsIEhJRF9RVUlSS19BUFBMRV9IQVNfRk4gIHwgSElEX1FVSVJLX0lHTk9SRV9NT1VTRSB9LAotCXsgVVNCX1ZFTkRPUl9JRF9BUFBMRSwgVVNCX0RFVklDRV9JRF9BUFBMRV9GT1VOVEFJTl9UUF9PTkxZLCBISURfUVVJUktfQVBQTEVfTlVNTE9DS19FTVVMQVRJT04gfCBISURfUVVJUktfQVBQTEVfSEFTX0ZOIHwgSElEX1FVSVJLX0lHTk9SRV9NT1VTRSB9LAotCXsgVVNCX1ZFTkRPUl9JRF9BUFBMRSwgVVNCX0RFVklDRV9JRF9BUFBMRV9HRVlTRVIxX1RQX09OTFksIEhJRF9RVUlSS19BUFBMRV9OVU1MT0NLX0VNVUxBVElPTiB8IEhJRF9RVUlSS19BUFBMRV9IQVNfRk4gfCBISURfUVVJUktfSUdOT1JFX01PVVNFIH0sCi0KLQl7IFVTQl9WRU5ET1JfSURfREVMTCwgVVNCX0RFVklDRV9JRF9ERUxMX1c3NjU4LCBISURfUVVJUktfUkVTRVRfTEVEUyB9LAotCXsgVVNCX1ZFTkRPUl9JRF9MT0dJVEVDSCwgVVNCX0RFVklDRV9JRF9MT0dJVEVDSF9LQkQsIEhJRF9RVUlSS19SRVNFVF9MRURTIH0sCi0JeyBVU0JfVkVORE9SX0lEX0xPR0lURUNILCBVU0JfREVWSUNFX0lEX0xPR0lURUNIX0hBUk1PTlksIEhJRF9RVUlSS19JR05PUkUgfSwKLQl7IFVTQl9WRU5ET1JfSURfTE9HSVRFQ0gsIFVTQl9ERVZJQ0VfSURfTE9HSVRFQ0hfSEFSTU9OWV8yLCBISURfUVVJUktfSUdOT1JFIH0sCi0JeyBVU0JfVkVORE9SX0lEX0xPR0lURUNILCBVU0JfREVWSUNFX0lEX0xPR0lURUNIX0hBUk1PTllfMywgSElEX1FVSVJLX0lHTk9SRSB9LAotCXsgVVNCX1ZFTkRPUl9JRF9MT0dJVEVDSCwgVVNCX0RFVklDRV9JRF9MT0dJVEVDSF9IQVJNT05ZXzQsIEhJRF9RVUlSS19JR05PUkUgfSwKLQl7IFVTQl9WRU5ET1JfSURfTE9HSVRFQ0gsIFVTQl9ERVZJQ0VfSURfTE9HSVRFQ0hfSEFSTU9OWV81LCBISURfUVVJUktfSUdOT1JFIH0sCi0JeyBVU0JfVkVORE9SX0lEX0xPR0lURUNILCBVU0JfREVWSUNFX0lEX0xPR0lURUNIX0hBUk1PTllfNiwgSElEX1FVSVJLX0lHTk9SRSB9LAotCXsgVVNCX1ZFTkRPUl9JRF9MT0dJVEVDSCwgVVNCX0RFVklDRV9JRF9MT0dJVEVDSF9IQVJNT05ZXzcsIEhJRF9RVUlSS19JR05PUkUgfSwKLQl7IFVTQl9WRU5ET1JfSURfTE9HSVRFQ0gsIFVTQl9ERVZJQ0VfSURfTE9HSVRFQ0hfSEFSTU9OWV84LCBISURfUVVJUktfSUdOT1JFIH0sCi0JeyBVU0JfVkVORE9SX0lEX0xPR0lURUNILCBVU0JfREVWSUNFX0lEX0xPR0lURUNIX0hBUk1PTllfOSwgSElEX1FVSVJLX0lHTk9SRSB9LAotCXsgVVNCX1ZFTkRPUl9JRF9MT0dJVEVDSCwgVVNCX0RFVklDRV9JRF9MT0dJVEVDSF9IQVJNT05ZXzEwLCBISURfUVVJUktfSUdOT1JFIH0sCi0JeyBVU0JfVkVORE9SX0lEX0xPR0lURUNILCBVU0JfREVWSUNFX0lEX0xPR0lURUNIX0hBUk1PTllfMTEsIEhJRF9RVUlSS19JR05PUkUgfSwKLQl7IFVTQl9WRU5ET1JfSURfTE9HSVRFQ0gsIFVTQl9ERVZJQ0VfSURfTE9HSVRFQ0hfSEFSTU9OWV8xMiwgSElEX1FVSVJLX0lHTk9SRSB9LAotCXsgVVNCX1ZFTkRPUl9JRF9MT0dJVEVDSCwgVVNCX0RFVklDRV9JRF9MT0dJVEVDSF9IQVJNT05ZXzEzLCBISURfUVVJUktfSUdOT1JFIH0sCi0JeyBVU0JfVkVORE9SX0lEX0xPR0lURUNILCBVU0JfREVWSUNFX0lEX0xPR0lURUNIX0hBUk1PTllfMTQsIEhJRF9RVUlSS19JR05PUkUgfSwKLQl7IFVTQl9WRU5ET1JfSURfTE9HSVRFQ0gsIFVTQl9ERVZJQ0VfSURfTE9HSVRFQ0hfSEFSTU9OWV8xNSwgSElEX1FVSVJLX0lHTk9SRSB9LAotCXsgVVNCX1ZFTkRPUl9JRF9MT0dJVEVDSCwgVVNCX0RFVklDRV9JRF9MT0dJVEVDSF9IQVJNT05ZXzE2LCBISURfUVVJUktfSUdOT1JFIH0sCi0JeyBVU0JfVkVORE9SX0lEX0xPR0lURUNILCBVU0JfREVWSUNFX0lEX0xPR0lURUNIX0hBUk1PTllfMTcsIEhJRF9RVUlSS19JR05PUkUgfSwKLQl7IFVTQl9WRU5ET1JfSURfTE9HSVRFQ0gsIFVTQl9ERVZJQ0VfSURfTE9HSVRFQ0hfSEFSTU9OWV8xOCwgSElEX1FVSVJLX0lHTk9SRSB9LAotCXsgVVNCX1ZFTkRPUl9JRF9MT0dJVEVDSCwgVVNCX0RFVklDRV9JRF9MT0dJVEVDSF9IQVJNT05ZXzE5LCBISURfUVVJUktfSUdOT1JFIH0sCi0JeyBVU0JfVkVORE9SX0lEX0xPR0lURUNILCBVU0JfREVWSUNFX0lEX0xPR0lURUNIX0hBUk1PTllfMjAsIEhJRF9RVUlSS19JR05PUkUgfSwKLQl7IFVTQl9WRU5ET1JfSURfTE9HSVRFQ0gsIFVTQl9ERVZJQ0VfSURfTE9HSVRFQ0hfSEFSTU9OWV8yMSwgSElEX1FVSVJLX0lHTk9SRSB9LAotCXsgVVNCX1ZFTkRPUl9JRF9MT0dJVEVDSCwgVVNCX0RFVklDRV9JRF9MT0dJVEVDSF9IQVJNT05ZXzIyLCBISURfUVVJUktfSUdOT1JFIH0sCi0JeyBVU0JfVkVORE9SX0lEX0xPR0lURUNILCBVU0JfREVWSUNFX0lEX0xPR0lURUNIX0hBUk1PTllfMjMsIEhJRF9RVUlSS19JR05PUkUgfSwKLQl7IFVTQl9WRU5ET1JfSURfTE9HSVRFQ0gsIFVTQl9ERVZJQ0VfSURfTE9HSVRFQ0hfSEFSTU9OWV8yNCwgSElEX1FVSVJLX0lHTk9SRSB9LAotCXsgVVNCX1ZFTkRPUl9JRF9MT0dJVEVDSCwgVVNCX0RFVklDRV9JRF9MT0dJVEVDSF9IQVJNT05ZXzI1LCBISURfUVVJUktfSUdOT1JFIH0sCi0JeyBVU0JfVkVORE9SX0lEX0xPR0lURUNILCBVU0JfREVWSUNFX0lEX0xPR0lURUNIX0hBUk1PTllfMjYsIEhJRF9RVUlSS19JR05PUkUgfSwKLQl7IFVTQl9WRU5ET1JfSURfTE9HSVRFQ0gsIFVTQl9ERVZJQ0VfSURfTE9HSVRFQ0hfSEFSTU9OWV8yNywgSElEX1FVSVJLX0lHTk9SRSB9LAotCXsgVVNCX1ZFTkRPUl9JRF9MT0dJVEVDSCwgVVNCX0RFVklDRV9JRF9MT0dJVEVDSF9IQVJNT05ZXzI4LCBISURfUVVJUktfSUdOT1JFIH0sCi0JeyBVU0JfVkVORE9SX0lEX0xPR0lURUNILCBVU0JfREVWSUNFX0lEX0xPR0lURUNIX0hBUk1PTllfMjksIEhJRF9RVUlSS19JR05PUkUgfSwKLQl7IFVTQl9WRU5ET1JfSURfTE9HSVRFQ0gsIFVTQl9ERVZJQ0VfSURfTE9HSVRFQ0hfSEFSTU9OWV8zMCwgSElEX1FVSVJLX0lHTk9SRSB9LAotCXsgVVNCX1ZFTkRPUl9JRF9MT0dJVEVDSCwgVVNCX0RFVklDRV9JRF9MT0dJVEVDSF9IQVJNT05ZXzMxLCBISURfUVVJUktfSUdOT1JFIH0sCi0JeyBVU0JfVkVORE9SX0lEX0xPR0lURUNILCBVU0JfREVWSUNFX0lEX0xPR0lURUNIX0hBUk1PTllfMzIsIEhJRF9RVUlSS19JR05PUkUgfSwKLQl7IFVTQl9WRU5ET1JfSURfTE9HSVRFQ0gsIFVTQl9ERVZJQ0VfSURfTE9HSVRFQ0hfSEFSTU9OWV8zMywgSElEX1FVSVJLX0lHTk9SRSB9LAotCXsgVVNCX1ZFTkRPUl9JRF9MT0dJVEVDSCwgVVNCX0RFVklDRV9JRF9MT0dJVEVDSF9IQVJNT05ZXzM0LCBISURfUVVJUktfSUdOT1JFIH0sCi0JeyBVU0JfVkVORE9SX0lEX0xPR0lURUNILCBVU0JfREVWSUNFX0lEX0xPR0lURUNIX0hBUk1PTllfMzUsIEhJRF9RVUlSS19JR05PUkUgfSwKLQl7IFVTQl9WRU5ET1JfSURfTE9HSVRFQ0gsIFVTQl9ERVZJQ0VfSURfTE9HSVRFQ0hfSEFSTU9OWV8zNiwgSElEX1FVSVJLX0lHTk9SRSB9LAotCXsgVVNCX1ZFTkRPUl9JRF9MT0dJVEVDSCwgVVNCX0RFVklDRV9JRF9MT0dJVEVDSF9IQVJNT05ZXzM3LCBISURfUVVJUktfSUdOT1JFIH0sCi0JeyBVU0JfVkVORE9SX0lEX0xPR0lURUNILCBVU0JfREVWSUNFX0lEX0xPR0lURUNIX0hBUk1PTllfMzgsIEhJRF9RVUlSS19JR05PUkUgfSwKLQl7IFVTQl9WRU5ET1JfSURfTE9HSVRFQ0gsIFVTQl9ERVZJQ0VfSURfTE9HSVRFQ0hfSEFSTU9OWV8zOSwgSElEX1FVSVJLX0lHTk9SRSB9LAotCXsgVVNCX1ZFTkRPUl9JRF9MT0dJVEVDSCwgVVNCX0RFVklDRV9JRF9MT0dJVEVDSF9IQVJNT05ZXzQwLCBISURfUVVJUktfSUdOT1JFIH0sCi0JeyBVU0JfVkVORE9SX0lEX0xPR0lURUNILCBVU0JfREVWSUNFX0lEX0xPR0lURUNIX0hBUk1PTllfNDEsIEhJRF9RVUlSS19JR05PUkUgfSwKLQl7IFVTQl9WRU5ET1JfSURfTE9HSVRFQ0gsIFVTQl9ERVZJQ0VfSURfTE9HSVRFQ0hfSEFSTU9OWV80MiwgSElEX1FVSVJLX0lHTk9SRSB9LAotCXsgVVNCX1ZFTkRPUl9JRF9MT0dJVEVDSCwgVVNCX0RFVklDRV9JRF9MT0dJVEVDSF9IQVJNT05ZXzQzLCBISURfUVVJUktfSUdOT1JFIH0sCi0JeyBVU0JfVkVORE9SX0lEX0xPR0lURUNILCBVU0JfREVWSUNFX0lEX0xPR0lURUNIX0hBUk1PTllfNDQsIEhJRF9RVUlSS19JR05PUkUgfSwKLQl7IFVTQl9WRU5ET1JfSURfTE9HSVRFQ0gsIFVTQl9ERVZJQ0VfSURfTE9HSVRFQ0hfSEFSTU9OWV80NSwgSElEX1FVSVJLX0lHTk9SRSB9LAotCXsgVVNCX1ZFTkRPUl9JRF9MT0dJVEVDSCwgVVNCX0RFVklDRV9JRF9MT0dJVEVDSF9IQVJNT05ZXzQ2LCBISURfUVVJUktfSUdOT1JFIH0sCi0JeyBVU0JfVkVORE9SX0lEX0xPR0lURUNILCBVU0JfREVWSUNFX0lEX0xPR0lURUNIX0hBUk1PTllfNDcsIEhJRF9RVUlSS19JR05PUkUgfSwKLQl7IFVTQl9WRU5ET1JfSURfTE9HSVRFQ0gsIFVTQl9ERVZJQ0VfSURfTE9HSVRFQ0hfSEFSTU9OWV80OCwgSElEX1FVSVJLX0lHTk9SRSB9LAotCXsgVVNCX1ZFTkRPUl9JRF9MT0dJVEVDSCwgVVNCX0RFVklDRV9JRF9MT0dJVEVDSF9IQVJNT05ZXzQ5LCBISURfUVVJUktfSUdOT1JFIH0sCi0JeyBVU0JfVkVORE9SX0lEX0xPR0lURUNILCBVU0JfREVWSUNFX0lEX0xPR0lURUNIX0hBUk1PTllfNTAsIEhJRF9RVUlSS19JR05PUkUgfSwKLQl7IFVTQl9WRU5ET1JfSURfTE9HSVRFQ0gsIFVTQl9ERVZJQ0VfSURfTE9HSVRFQ0hfSEFSTU9OWV81MSwgSElEX1FVSVJLX0lHTk9SRSB9LAotCXsgVVNCX1ZFTkRPUl9JRF9MT0dJVEVDSCwgVVNCX0RFVklDRV9JRF9MT0dJVEVDSF9IQVJNT05ZXzUyLCBISURfUVVJUktfSUdOT1JFIH0sCi0JeyBVU0JfVkVORE9SX0lEX0xPR0lURUNILCBVU0JfREVWSUNFX0lEX0xPR0lURUNIX0hBUk1PTllfNTMsIEhJRF9RVUlSS19JR05PUkUgfSwKLQl7IFVTQl9WRU5ET1JfSURfTE9HSVRFQ0gsIFVTQl9ERVZJQ0VfSURfTE9HSVRFQ0hfSEFSTU9OWV81NCwgSElEX1FVSVJLX0lHTk9SRSB9LAotCXsgVVNCX1ZFTkRPUl9JRF9MT0dJVEVDSCwgVVNCX0RFVklDRV9JRF9MT0dJVEVDSF9IQVJNT05ZXzU1LCBISURfUVVJUktfSUdOT1JFIH0sCi0JeyBVU0JfVkVORE9SX0lEX0xPR0lURUNILCBVU0JfREVWSUNFX0lEX0xPR0lURUNIX0hBUk1PTllfNTYsIEhJRF9RVUlSS19JR05PUkUgfSwKLQl7IFVTQl9WRU5ET1JfSURfTE9HSVRFQ0gsIFVTQl9ERVZJQ0VfSURfTE9HSVRFQ0hfSEFSTU9OWV81NywgSElEX1FVSVJLX0lHTk9SRSB9LAotCXsgVVNCX1ZFTkRPUl9JRF9MT0dJVEVDSCwgVVNCX0RFVklDRV9JRF9MT0dJVEVDSF9IQVJNT05ZXzU4LCBISURfUVVJUktfSUdOT1JFIH0sCi0JeyBVU0JfVkVORE9SX0lEX0xPR0lURUNILCBVU0JfREVWSUNFX0lEX0xPR0lURUNIX0hBUk1PTllfNTksIEhJRF9RVUlSS19JR05PUkUgfSwKLQl7IFVTQl9WRU5ET1JfSURfTE9HSVRFQ0gsIFVTQl9ERVZJQ0VfSURfTE9HSVRFQ0hfSEFSTU9OWV82MCwgSElEX1FVSVJLX0lHTk9SRSB9LAotCXsgVVNCX1ZFTkRPUl9JRF9MT0dJVEVDSCwgVVNCX0RFVklDRV9JRF9MT0dJVEVDSF9IQVJNT05ZXzYxLCBISURfUVVJUktfSUdOT1JFIH0sCi0JeyBVU0JfVkVORE9SX0lEX0xPR0lURUNILCBVU0JfREVWSUNFX0lEX0xPR0lURUNIX0hBUk1PTllfNjIsIEhJRF9RVUlSS19JR05PUkUgfSwKLQl7IFVTQl9WRU5ET1JfSURfTE9HSVRFQ0gsIFVTQl9ERVZJQ0VfSURfTE9HSVRFQ0hfSEFSTU9OWV82MywgSElEX1FVSVJLX0lHTk9SRSB9LAotCXsgVVNCX1ZFTkRPUl9JRF9MT0dJVEVDSCwgVVNCX0RFVklDRV9JRF9MT0dJVEVDSF9IQVJNT05ZXzY0LCBISURfUVVJUktfSUdOT1JFIH0sCi0JeyBVU0JfVkVORE9SX0lEX05BVElPTkFMX1NFTUlDT05EVUNUT1IsIFVTQl9ERVZJQ0VfSURfTl9TX0hBUk1PTlksIEhJRF9RVUlSS19JR05PUkUgfSwKLQl7IFVTQl9WRU5ET1JfSURfS1lFLCBVU0JfREVWSUNFX0lEX0tZRV9HUEVOXzU2MCwgSElEX1FVSVJLX0lHTk9SRSB9LAotCi0JeyAwLCAwIH0KLX07Ci0KLS8qIFF1aXJrcyBmb3IgZGV2aWNlcyB3aGljaCByZXF1aXJlIHJlcG9ydCBkZXNjcmlwdG9yIGZpeHVwIGdvIGhlcmUgKi8KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgaGlkX3JkZXNjX2JsYWNrbGlzdCB7Ci0JX191MTYgaWRWZW5kb3I7Ci0JX191MTYgaWRQcm9kdWN0OwotCV9fdTMyIHF1aXJrczsKLX0gaGlkX3JkZXNjX2JsYWNrbGlzdFtdID0gewotCi0JeyBVU0JfVkVORE9SX0lEX0NIRVJSWSwgVVNCX0RFVklDRV9JRF9DSEVSUllfQ1lNT1RJT04sIEhJRF9RVUlSS19SREVTQ19DWU1PVElPTiB9LAotCi0JeyBVU0JfVkVORE9SX0lEX0xPR0lURUNILCBVU0JfREVWSUNFX0lEX01YMzAwMF9SRUNFSVZFUiwgSElEX1FVSVJLX1JERVNDX0xPR0lURUNIIH0sCi0JeyBVU0JfVkVORE9SX0lEX0xPR0lURUNILCBVU0JfREVWSUNFX0lEX1M1MTBfUkVDRUlWRVIsIEhJRF9RVUlSS19SREVTQ19MT0dJVEVDSCB9LAotCXsgVVNCX1ZFTkRPUl9JRF9MT0dJVEVDSCwgVVNCX0RFVklDRV9JRF9TNTEwX1JFQ0VJVkVSXzIsIEhJRF9RVUlSS19SREVTQ19MT0dJVEVDSCB9LAotCXsgVVNCX1ZFTkRPUl9JRF9NSUNST1NPRlQsIFVTQl9ERVZJQ0VfSURfREVTS1RPUF9SRUNWXzEwMjgsIEhJRF9RVUlSS19SREVTQ19NSUNST1NPRlRfUkVDVl8xMDI4IH0sCi0KLQl7IFVTQl9WRU5ET1JfSURfTU9OVEVSRVksIFVTQl9ERVZJQ0VfSURfR0VOSVVTX0tCMjlFLCBISURfUVVJUktfUkRFU0NfQlVUVE9OX0NPTlNVTUVSIH0sCi0KLQl7IFVTQl9WRU5ET1JfSURfQVBQTEUsIFVTQl9ERVZJQ0VfSURfQVBQTEVfR0VZU0VSNF9KSVMsIEhJRF9RVUlSS19SREVTQ19NQUNCT09LX0pJUyB9LAotCi0JeyBVU0JfVkVORE9SX0lEX1BFVEFMWU5YLCBVU0JfREVWSUNFX0lEX1BFVEFMWU5YX01BWFRFUl9SRU1PVEUsIEhJRF9RVUlSS19SREVTQ19QRVRBTFlOWCB9LAotCi0JeyBVU0JfVkVORE9SX0lEX1NBTVNVTkcsIFVTQl9ERVZJQ0VfSURfU0FNU1VOR19JUl9SRU1PVEUsIEhJRF9RVUlSS19SREVTQ19TQU1TVU5HX1JFTU9URSB9LAotCi0JeyBVU0JfVkVORE9SX0lEX1NVTlBMVVMsIFVTQl9ERVZJQ0VfSURfU1VOUExVU19XREVTS1RPUCwgSElEX1FVSVJLX1JERVNDX1NVTlBMVVNfV0RFU0tUT1AgfSwKLQotCXsgVVNCX1ZFTkRPUl9JRF9DWVBSRVNTLCBVU0JfREVWSUNFX0lEX0NZUFJFU1NfQkFSQ09ERV8xLCBISURfUVVJUktfUkRFU0NfU1dBUFBFRF9NSU5fTUFYIH0sCi0JeyBVU0JfVkVORE9SX0lEX0NZUFJFU1MsIFVTQl9ERVZJQ0VfSURfQ1lQUkVTU19CQVJDT0RFXzIsIEhJRF9RVUlSS19SREVTQ19TV0FQUEVEX01JTl9NQVggfSwKKwl7IFVTQl9WRU5ET1JfSURfV0lTRUdST1VQX0xURDIsIFVTQl9ERVZJQ0VfSURfU01BUlRKT1lfRFVBTF9QTFVTLCBISURfUVVJUktfTk9HRVQgfCBISURfUVVJUktfTVVMVElfSU5QVVQgfSwKIAogCXsgMCwgMCB9CiB9OwpAQCAtOTc0LDE2ICsyNzIsNiBAQAogCXUzMiBxdWlya3MgPSAwOwogCWNvbnN0IHN0cnVjdCBoaWRfYmxhY2tsaXN0ICpibF9lbnRyeSA9IE5VTEw7CiAKLQkvKiBJZ25vcmUgYWxsIFdhY29tIGRldmljZXMgKi8KLQlpZiAoaWRWZW5kb3IgPT0gVVNCX1ZFTkRPUl9JRF9XQUNPTSkKLQkJcmV0dXJuIEhJRF9RVUlSS19JR05PUkU7Ci0KLQkvKiBpZ25vcmUgYWxsIENvZGUgTWVyY2VuYXJpZXMgSU9XYXJyaW9yIGRldmljZXMgKi8KLQlpZiAoaWRWZW5kb3IgPT0gVVNCX1ZFTkRPUl9JRF9DT0RFTUVSQ1MpCi0JCWlmIChpZFByb2R1Y3QgPj0gVVNCX0RFVklDRV9JRF9DT0RFTUVSQ1NfSU9XX0ZJUlNUICYmCi0JCQkJaWRQcm9kdWN0IDw9IFVTQl9ERVZJQ0VfSURfQ09ERU1FUkNTX0lPV19MQVNUKQotCQkJcmV0dXJuIEhJRF9RVUlSS19JR05PUkU7Ci0KIAkvKiBOQ1IgZGV2aWNlcyBtdXN0IG5vdCBiZSBxdWVyaWVkIGZvciByZXBvcnRzICovCiAJaWYgKGlkVmVuZG9yID09IFVTQl9WRU5ET1JfSURfTkNSICYmCiAJCQlpZFByb2R1Y3QgPj0gVVNCX0RFVklDRV9JRF9OQ1JfRklSU1QgJiYKQEAgLTEwMDIsMjIxICsyOTAsMyBAQAogfQogCiBFWFBPUlRfU1lNQk9MX0dQTCh1c2JoaWRfbG9va3VwX3F1aXJrKTsKLQotLyoKLSAqIENoZXJyeSBDeW1vdGlvbiBrZXlib2FyZCBoYXZlIGFuIGludmFsaWQgSElEIHJlcG9ydCBkZXNjcmlwdG9yLAotICogdGhhdCBuZWVkcyBmaXhpbmcgYmVmb3JlIHdlIGNhbiBwYXJzZSBpdC4KLSAqLwotc3RhdGljIHZvaWQgdXNiaGlkX2ZpeHVwX2N5bW90aW9uX2Rlc2NyaXB0b3IoY2hhciAqcmRlc2MsIGludCByc2l6ZSkKLXsKLQlpZiAocnNpemUgPj0gMTcgJiYgcmRlc2NbMTFdID09IDB4M2MgJiYgcmRlc2NbMTJdID09IDB4MDIpIHsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiRml4aW5nIHVwIENoZXJyeSBDeW1vdGlvbiByZXBvcnQgZGVzY3JpcHRvclxuIik7Ci0JCXJkZXNjWzExXSA9IHJkZXNjWzE2XSA9IDB4ZmY7Ci0JCXJkZXNjWzEyXSA9IHJkZXNjWzE3XSA9IDB4MDM7Ci0JfQotfQotCi0KLS8qCi0gKiBDZXJ0YWluIExvZ2l0ZWNoIGtleWJvYXJkcyBzZW5kIGluIHJlcG9ydCAjMyBrZXlzIHdoaWNoIGFyZSBmYXIKLSAqIGFib3ZlIHRoZSBsb2dpY2FsIG1heGltdW0gZGVzY3JpYmVkIGluIGRlc2NyaXB0b3IuIFRoaXMgZXh0ZW5kcwotICogdGhlIG9yaWdpbmFsIHZhbHVlIG9mIDB4MjhjIG9mIGxvZ2ljYWwgbWF4aW11bSB0byAweDEwNGQKLSAqLwotc3RhdGljIHZvaWQgdXNiaGlkX2ZpeHVwX2xvZ2l0ZWNoX2Rlc2NyaXB0b3IodW5zaWduZWQgY2hhciAqcmRlc2MsIGludCByc2l6ZSkKLXsKLQlpZiAocnNpemUgPj0gOTAgJiYgcmRlc2NbODNdID09IDB4MjYKLQkJCSYmIHJkZXNjWzg0XSA9PSAweDhjCi0JCQkmJiByZGVzY1s4NV0gPT0gMHgwMikgewotCQlwcmludGsoS0VSTl9JTkZPICJGaXhpbmcgdXAgTG9naXRlY2gga2V5Ym9hcmQgcmVwb3J0IGRlc2NyaXB0b3JcbiIpOwotCQlyZGVzY1s4NF0gPSByZGVzY1s4OV0gPSAweDRkOwotCQlyZGVzY1s4NV0gPSByZGVzY1s5MF0gPSAweDEwOwotCX0KLX0KLQotc3RhdGljIHZvaWQgdXNiaGlkX2ZpeHVwX3N1bnBsdXNfd2Rlc2t0b3AodW5zaWduZWQgY2hhciAqcmRlc2MsIGludCByc2l6ZSkKLXsKLQlpZiAocnNpemUgPj0gMTA3ICYmIHJkZXNjWzEwNF0gPT0gMHgyNgotCQkJICYmIHJkZXNjWzEwNV0gPT0gMHg4MAotCQkJICYmIHJkZXNjWzEwNl0gPT0gMHgwMykgewotCQlwcmludGsoS0VSTl9JTkZPICJGaXhpbmcgdXAgU3VucGx1cyBXaXJlbGVzcyBEZXNrdG9wIHJlcG9ydCBkZXNjcmlwdG9yXG4iKTsKLQkJcmRlc2NbMTA1XSA9IHJkZXNjWzExMF0gPSAweDAzOwotCQlyZGVzY1sxMDZdID0gcmRlc2NbMTExXSA9IDB4MjE7Ci0JfQotfQotCi0vKgotICogU2Ftc3VuZyBJckRBIHJlbW90ZSBjb250cm9sbGVyIChyZXBvcnRzIGFzIEN5cHJlc3MgVVNCIE1vdXNlKS4KLSAqCi0gKiBWZW5kb3Igc3BlY2lmaWMgcmVwb3J0ICM0IGhhcyBhIHNpemUgb2YgNDggYml0LAotICogYW5kIHRoZXJlZm9yZSBpcyBub3QgYWNjZXB0ZWQgd2hlbiBpbnNwZWN0aW5nIHRoZSBkZXNjcmlwdG9ycy4KLSAqIEFzIGEgd29ya2Fyb3VuZCB3ZSByZWludGVycHJldCB0aGUgcmVwb3J0IGFzOgotICogICBWYXJpYWJsZSB0eXBlLCBjb3VudCA2LCBzaXplIDggYml0LCBsb2cuIG1heGltdW0gMjU1Ci0gKiBUaGUgYnVyZGVuIHRvIHJlY29uc3RydWN0IHRoZSBkYXRhIGlzIG1vdmVkIGludG8gdXNlciBzcGFjZS4KLSAqLwotc3RhdGljIHZvaWQgdXNiaGlkX2ZpeHVwX3NhbXN1bmdfaXJkYV9kZXNjcmlwdG9yKHVuc2lnbmVkIGNoYXIgKnJkZXNjLAotCQkJCQkJICBpbnQgcnNpemUpCi17Ci0JaWYgKHJzaXplID49IDE4MiAmJiByZGVzY1sxNzVdID09IDB4MjUKLQkJCSAmJiByZGVzY1sxNzZdID09IDB4NDAKLQkJCSAmJiByZGVzY1sxNzddID09IDB4NzUKLQkJCSAmJiByZGVzY1sxNzhdID09IDB4MzAKLQkJCSAmJiByZGVzY1sxNzldID09IDB4OTUKLQkJCSAmJiByZGVzY1sxODBdID09IDB4MDEKLQkJCSAmJiByZGVzY1sxODJdID09IDB4NDApIHsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiRml4aW5nIHVwIFNhbXN1bmcgSXJEQSByZXBvcnQgZGVzY3JpcHRvclxuIik7Ci0JCXJkZXNjWzE3Nl0gPSAweGZmOwotCQlyZGVzY1sxNzhdID0gMHgwODsKLQkJcmRlc2NbMTgwXSA9IDB4MDY7Ci0JCXJkZXNjWzE4Ml0gPSAweDQyOwotCX0KLX0KLQotLyogUGV0YWx5bnggTWF4dGVyIFJlbW90ZSBoYXMgbWF4aW11bSBmb3IgY29uc3VtZXIgcGFnZSBzZXQgdG9vIGxvdyAqLwotc3RhdGljIHZvaWQgdXNiaGlkX2ZpeHVwX3BldGFseW54X2Rlc2NyaXB0b3IodW5zaWduZWQgY2hhciAqcmRlc2MsIGludCByc2l6ZSkKLXsKLQlpZiAocnNpemUgPj0gNjAgJiYgcmRlc2NbMzldID09IDB4MmEKLQkJCSYmIHJkZXNjWzQwXSA9PSAweGY1Ci0JCQkmJiByZGVzY1s0MV0gPT0gMHgwMAotCQkJJiYgcmRlc2NbNTldID09IDB4MjYKLQkJCSYmIHJkZXNjWzYwXSA9PSAweGY5Ci0JCQkmJiByZGVzY1s2MV0gPT0gMHgwMCkgewotCQlwcmludGsoS0VSTl9JTkZPICJGaXhpbmcgdXAgUGV0YWx5bnggTWF4dGVyIFJlbW90ZSByZXBvcnQgZGVzY3JpcHRvclxuIik7Ci0JCXJkZXNjWzYwXSA9IDB4ZmE7Ci0JCXJkZXNjWzQwXSA9IDB4ZmE7Ci0JfQotfQotCi0vKgotICogU29tZSBVU0IgYmFyY29kZSByZWFkZXJzIGZyb20gY3lwcmVzcyBoYXZlIHVzYWdlIG1pbiBhbmQgdXNhZ2UgbWF4IGluCi0gKiB0aGUgd3Jvbmcgb3JkZXIKLSAqLwotc3RhdGljIHZvaWQgdXNiaGlkX2ZpeHVwX2N5cHJlc3NfZGVzY3JpcHRvcih1bnNpZ25lZCBjaGFyICpyZGVzYywgaW50IHJzaXplKQotewotCXNob3J0IGZpeGVkID0gMDsKLQlpbnQgaTsKLQotCWZvciAoaSA9IDA7IGkgPCByc2l6ZSAtIDQ7IGkrKykgewotCQlpZiAocmRlc2NbaV0gPT0gMHgyOSAmJiByZGVzYyBbaSsyXSA9PSAweDE5KSB7Ci0JCQl1bnNpZ25lZCBjaGFyIHRtcDsKLQotCQkJcmRlc2NbaV0gPSAweDE5OyByZGVzY1tpKzJdID0gMHgyOTsKLQkJCXRtcCA9IHJkZXNjW2krM107Ci0JCQlyZGVzY1tpKzNdID0gcmRlc2NbaSsxXTsKLQkJCXJkZXNjW2krMV0gPSB0bXA7Ci0JCX0KLQl9Ci0KLQlpZiAoZml4ZWQpCi0JCXByaW50ayhLRVJOX0lORk8gIkZpeGluZyB1cCBDeXByZXNzIHJlcG9ydCBkZXNjcmlwdG9yXG4iKTsKLX0KLQotLyoKLSAqIE1hY0Jvb2sgSklTIGtleWJvYXJkIGhhcyB3cm9uZyBsb2dpY2FsIG1heGltdW0KLSAqLwotc3RhdGljIHZvaWQgdXNiaGlkX2ZpeHVwX21hY2Jvb2tfZGVzY3JpcHRvcih1bnNpZ25lZCBjaGFyICpyZGVzYywgaW50IHJzaXplKQotewotCWlmIChyc2l6ZSA+PSA2MCAmJiByZGVzY1s1M10gPT0gMHg2NQotCQkJJiYgcmRlc2NbNTldID09IDB4NjUpIHsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiRml4aW5nIHVwIE1hY0Jvb2sgSklTIGtleWJvYXJkIHJlcG9ydCBkZXNjcmlwdG9yXG4iKTsKLQkJcmRlc2NbNTNdID0gcmRlc2NbNTldID0gMHhlNzsKLQl9Ci19Ci0KLXN0YXRpYyB2b2lkIHVzYmhpZF9maXh1cF9idXR0b25fY29uc3VtZXJfZGVzY3JpcHRvcih1bnNpZ25lZCBjaGFyICpyZGVzYywgaW50IHJzaXplKQotewotCWlmIChyc2l6ZSA+PSAzMCAmJiByZGVzY1syOV0gPT0gMHgwNQotCQkJJiYgcmRlc2NbMzBdID09IDB4MDkpIHsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiRml4aW5nIHVwIGJ1dHRvbi9jb25zdW1lciBpbiBISUQgcmVwb3J0IGRlc2NyaXB0b3JcbiIpOwotCQlyZGVzY1szMF0gPSAweDBjOwotCX0KLX0KLQotLyoKLSAqIE1pY3Jvc29mdCBXaXJlbGVzcyBEZXNrdG9wIFJlY2VpdmVyIChNb2RlbCAxMDI4KSBoYXMgc2V2ZXJhbAotICogJ1VzYWdlIE1pbi9NYXgnIHdoZXJlIGl0IG91Z2h0IHRvIGhhdmUgJ1BoeXNpY2FsIE1pbi9NYXgnCi0gKi8KLXN0YXRpYyB2b2lkIHVzYmhpZF9maXh1cF9taWNyb3NvZnRfZGVzY3JpcHRvcih1bnNpZ25lZCBjaGFyICpyZGVzYywgaW50IHJzaXplKQotewotCWlmIChyc2l6ZSA9PSA1NzEgJiYgcmRlc2NbMjg0XSA9PSAweDE5Ci0JICAgICAgICAgICAgICAgICAmJiByZGVzY1syODZdID09IDB4MmEKLQkgICAgICAgICAgICAgICAgICYmIHJkZXNjWzMwNF0gPT0gMHgxOQotCSAgICAgICAgICAgICAgICAgJiYgcmRlc2NbMzA2XSA9PSAweDI5Ci0JICAgICAgICAgICAgICAgICAmJiByZGVzY1szNTJdID09IDB4MWEKLQkgICAgICAgICAgICAgICAgICYmIHJkZXNjWzM1NV0gPT0gMHgyYQotCQkJICYmIHJkZXNjWzU1N10gPT0gMHgxOQotCQkJICYmIHJkZXNjWzU1OV0gPT0gMHgyOSkgewotCQlwcmludGsoS0VSTl9JTkZPICJGaXhpbmcgdXAgTWljcm9zb2Z0IFdpcmVsZXNzIFJlY2VpdmVyIE1vZGVsIDEwMjggcmVwb3J0IGRlc2NyaXB0b3JcbiIpOwotCQlyZGVzY1syODRdID0gcmRlc2NbMzA0XSA9IHJkZXNjWzU1N10gPSAweDM1OwotCQlyZGVzY1szNTJdID0gMHgzNjsKLQkJcmRlc2NbMjg2XSA9IHJkZXNjWzM1NV0gPSAweDQ2OwotCQlyZGVzY1szMDZdID0gcmRlc2NbNTU5XSA9IDB4NDU7Ci0JfQotfQotCi1zdGF0aWMgdm9pZCBfX3VzYmhpZF9maXh1cF9yZXBvcnRfZGVzY3JpcHRvcihfX3UzMiBxdWlya3MsIGNoYXIgKnJkZXNjLCB1bnNpZ25lZCByc2l6ZSkKLXsKLQlpZiAoKHF1aXJrcyAmIEhJRF9RVUlSS19SREVTQ19DWU1PVElPTikpCi0JCXVzYmhpZF9maXh1cF9jeW1vdGlvbl9kZXNjcmlwdG9yKHJkZXNjLCByc2l6ZSk7Ci0KLQlpZiAocXVpcmtzICYgSElEX1FVSVJLX1JERVNDX0xPR0lURUNIKQotCQl1c2JoaWRfZml4dXBfbG9naXRlY2hfZGVzY3JpcHRvcihyZGVzYywgcnNpemUpOwotCi0JaWYgKHF1aXJrcyAmIEhJRF9RVUlSS19SREVTQ19TV0FQUEVEX01JTl9NQVgpCi0JCXVzYmhpZF9maXh1cF9jeXByZXNzX2Rlc2NyaXB0b3IocmRlc2MsIHJzaXplKTsKLQotCWlmIChxdWlya3MgJiBISURfUVVJUktfUkRFU0NfUEVUQUxZTlgpCi0JCXVzYmhpZF9maXh1cF9wZXRhbHlueF9kZXNjcmlwdG9yKHJkZXNjLCByc2l6ZSk7Ci0KLQlpZiAocXVpcmtzICYgSElEX1FVSVJLX1JERVNDX01BQ0JPT0tfSklTKQotCQl1c2JoaWRfZml4dXBfbWFjYm9va19kZXNjcmlwdG9yKHJkZXNjLCByc2l6ZSk7Ci0KLQlpZiAocXVpcmtzICYgSElEX1FVSVJLX1JERVNDX0JVVFRPTl9DT05TVU1FUikKLQkJdXNiaGlkX2ZpeHVwX2J1dHRvbl9jb25zdW1lcl9kZXNjcmlwdG9yKHJkZXNjLCByc2l6ZSk7Ci0KLQlpZiAocXVpcmtzICYgSElEX1FVSVJLX1JERVNDX1NBTVNVTkdfUkVNT1RFKQotCQl1c2JoaWRfZml4dXBfc2Ftc3VuZ19pcmRhX2Rlc2NyaXB0b3IocmRlc2MsIHJzaXplKTsKLQotCWlmIChxdWlya3MgJiBISURfUVVJUktfUkRFU0NfTUlDUk9TT0ZUX1JFQ1ZfMTAyOCkKLQkJdXNiaGlkX2ZpeHVwX21pY3Jvc29mdF9kZXNjcmlwdG9yKHJkZXNjLCByc2l6ZSk7Ci0KLQlpZiAocXVpcmtzICYgSElEX1FVSVJLX1JERVNDX1NVTlBMVVNfV0RFU0tUT1ApCi0JCXVzYmhpZF9maXh1cF9zdW5wbHVzX3dkZXNrdG9wKHJkZXNjLCByc2l6ZSk7Ci19Ci0KLS8qKgotICogdXNiaGlkX2ZpeHVwX3JlcG9ydF9kZXNjcmlwdG9yOiBjaGVjayBpZiByZXBvcnQgZGVzY3JpcHRvciBuZWVkcyBmaXh1cAotICoKLSAqIERlc2NyaXB0aW9uOgotICoJV2Fsa3MgdGhlIGhpZF9yZGVzY19ibGFja2xpc3RbXSBhcnJheSBhbmQgY2hlY2tzIHdoZXRoZXIgdGhlIGRldmljZQotICoJaXMga25vd24gdG8gaGF2ZSBicm9rZW4gcmVwb3J0IGRlc2NyaXB0b3IgdGhhdCBuZWVkcyB0byBiZSBmaXhlZCB1cAotICoJcHJpb3IgdG8gZW50ZXJpbmcgdGhlIEhJRCBwYXJzZXIKLSAqCi0gKiBSZXR1cm5zOiBub3RoaW5nCi0gKi8KLXZvaWQgdXNiaGlkX2ZpeHVwX3JlcG9ydF9kZXNjcmlwdG9yKGNvbnN0IHUxNiBpZFZlbmRvciwgY29uc3QgdTE2IGlkUHJvZHVjdCwKLQkJCQkgICAgY2hhciAqcmRlc2MsIHVuc2lnbmVkIHJzaXplLCBjaGFyICoqcXVpcmtzX3BhcmFtKQotewotCWludCBuLCBtOwotCXUxNiBwYXJhbVZlbmRvciwgcGFyYW1Qcm9kdWN0OwotCXUzMiBxdWlya3M7Ci0KLQkvKiBzdGF0aWMgcmRlc2MgcXVpcmsgZW50cmllcyAqLwotCWZvciAobiA9IDA7IGhpZF9yZGVzY19ibGFja2xpc3Rbbl0uaWRWZW5kb3I7IG4rKykKLQkJaWYgKGhpZF9yZGVzY19ibGFja2xpc3Rbbl0uaWRWZW5kb3IgPT0gaWRWZW5kb3IgJiYKLQkJCQloaWRfcmRlc2NfYmxhY2tsaXN0W25dLmlkUHJvZHVjdCA9PSBpZFByb2R1Y3QpCi0JCQlfX3VzYmhpZF9maXh1cF9yZXBvcnRfZGVzY3JpcHRvcihoaWRfcmRlc2NfYmxhY2tsaXN0W25dLnF1aXJrcywKLQkJCQkJcmRlc2MsIHJzaXplKTsKLQotCS8qIHJ1bnRpbWUgcmRlc2MgcXVpcmsgZW50cmllcyBoYW5kbGluZyAqLwotCWZvciAobiA9IDA7IHF1aXJrc19wYXJhbVtuXSAmJiBuIDwgTUFYX1VTQkhJRF9CT09UX1FVSVJLUzsgbisrKSB7Ci0JCW0gPSBzc2NhbmYocXVpcmtzX3BhcmFtW25dLCAiMHglaHg6MHglaHg6MHgleCIsCi0JCQkJJnBhcmFtVmVuZG9yLCAmcGFyYW1Qcm9kdWN0LCAmcXVpcmtzKTsKLQotCQlpZiAobSAhPSAzKQotCQkJcHJpbnRrKEtFUk5fV0FSTklORwotCQkJCSJDb3VsZCBub3QgcGFyc2UgSElEIHF1aXJrIG1vZHVsZSBwYXJhbSAlc1xuIiwKLQkJCQlxdWlya3NfcGFyYW1bbl0pOwotCQllbHNlIGlmIChwYXJhbVZlbmRvciA9PSBpZFZlbmRvciAmJiBwYXJhbVByb2R1Y3QgPT0gaWRQcm9kdWN0KQotCQkJX191c2JoaWRfZml4dXBfcmVwb3J0X2Rlc2NyaXB0b3IocXVpcmtzLCByZGVzYywgcnNpemUpOwotCX0KLX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaGlkL3VzYmhpZC9oaWQtdG1mZi5jIGIvZHJpdmVycy9oaWQvdXNiaGlkL2hpZC10bWZmLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE0NDU3OGIuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9oaWQvdXNiaGlkL2hpZC10bWZmLmMKKysrIC9kZXYvbnVsbApAQCAtMSwyMjUgKzAsMCBAQAotLyoKLSAqIEZvcmNlIGZlZWRiYWNrIHN1cHBvcnQgZm9yIHZhcmlvdXMgSElEIGNvbXBsaWFudCBkZXZpY2VzIGJ5IFRocnVzdE1hc3RlcjoKLSAqICAgIFRocnVzdE1hc3RlciBGaXJlU3Rvcm0gRHVhbCBQb3dlciAyCi0gKiBhbmQgcG9zc2libHkgb3RoZXJzIHdob3NlIGRldmljZSBpZHMgaGF2ZW4ndCBiZWVuIGFkZGVkLgotICoKLSAqICBNb2RpZmllZCB0byBzdXBwb3J0IFRocnVzdE1hc3RlciBkZXZpY2VzIGJ5IFppbnggVmVyaXR1c2UKLSAqICBvbiAyMDAzLTAxLTI1IGZyb20gdGhlIExvZ2l0ZWNoIGZvcmNlIGZlZWRiYWNrIGRyaXZlciwKLSAqICB3aGljaCBpcyBieSBKb2hhbm4gRGVuZXV4LgotICoKLSAqICBDb3B5cmlnaHQgKGMpIDIwMDMgWmlueCBWZXJpdHVzZSA8emlueEBlcGljc29sLm9yZz4KLSAqICBDb3B5cmlnaHQgKGMpIDIwMDIgSm9oYW5uIERlbmV1eAotICovCi0KLS8qCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQotICovCi0KLSNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgotCi0jdW5kZWYgREVCVUcKLSNpbmNsdWRlIDxsaW51eC91c2IuaD4KLQotI2luY2x1ZGUgPGxpbnV4L2hpZC5oPgotI2luY2x1ZGUgInVzYmhpZC5oIgotCi0vKiBVc2FnZXMgZm9yIHRocnVzdG1hc3RlciBkZXZpY2VzIEkga25vdyBhYm91dCAqLwotI2RlZmluZSBUSFJVU1RNQVNURVJfVVNBR0VfRkYJKEhJRF9VUF9HRU5ERVNLIHwgMHhiYikKLQotc3RydWN0IGRldl90eXBlIHsKLQl1MTYgaWRWZW5kb3I7Ci0JdTE2IGlkUHJvZHVjdDsKLQljb25zdCBzaWduZWQgc2hvcnQgKmZmOwotfTsKLQotc3RhdGljIGNvbnN0IHNpZ25lZCBzaG9ydCBmZl9ydW1ibGVbXSA9IHsKLQlGRl9SVU1CTEUsCi0JLTEKLX07Ci0KLXN0YXRpYyBjb25zdCBzaWduZWQgc2hvcnQgZmZfam95c3RpY2tbXSA9IHsKLQlGRl9DT05TVEFOVCwKLQktMQotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBkZXZfdHlwZSBkZXZpY2VzW10gPSB7Ci0JeyAweDQ0ZiwgMHhiMzAwLCBmZl9ydW1ibGUgfSwKLQl7IDB4NDRmLCAweGIzMDQsIGZmX3J1bWJsZSB9LAotCXsgMHg0NGYsIDB4YjY1MSwgZmZfcnVtYmxlIH0sCS8qIEZHVCBSdW1ibGUgRm9yY2UgV2hlZWwgKi8KLQl7IDB4NDRmLCAweGI2NTQsIGZmX2pveXN0aWNrIH0sCS8qIEZHVCBGb3JjZSBGZWVkYmFjayBXaGVlbCAqLwotfTsKLQotc3RydWN0IHRtZmZfZGV2aWNlIHsKLQlzdHJ1Y3QgaGlkX3JlcG9ydCAqcmVwb3J0OwotCXN0cnVjdCBoaWRfZmllbGQgKmZmX2ZpZWxkOwotfTsKLQotLyogQ2hhbmdlcyB2YWx1ZXMgZnJvbSAwIHRvIDB4ZmZmZiBpbnRvIHZhbHVlcyBmcm9tIG1pbmltdW0gdG8gbWF4aW11bSAqLwotc3RhdGljIGlubGluZSBpbnQgaGlkX3RtZmZfc2NhbGVfdTE2KHVuc2lnbmVkIGludCBpbiwKLQkJCQlpbnQgbWluaW11bSwgaW50IG1heGltdW0pCi17Ci0JaW50IHJldDsKLQotCXJldCA9IChpbiAqIChtYXhpbXVtIC0gbWluaW11bSkgLyAweGZmZmYpICsgbWluaW11bTsKLQlpZiAocmV0IDwgbWluaW11bSkKLQkJcmV0dXJuIG1pbmltdW07Ci0JaWYgKHJldCA+IG1heGltdW0pCi0JCXJldHVybiBtYXhpbXVtOwotCXJldHVybiByZXQ7Ci19Ci0KLS8qIENoYW5nZXMgdmFsdWVzIGZyb20gLTB4ODAgdG8gMHg3ZiBpbnRvIHZhbHVlcyBmcm9tIG1pbmltdW0gdG8gbWF4aW11bSAqLwotc3RhdGljIGlubGluZSBpbnQgaGlkX3RtZmZfc2NhbGVfczgoaW50IGluLAotCQkJCSAgICBpbnQgbWluaW11bSwgaW50IG1heGltdW0pCi17Ci0JaW50IHJldDsKLQotCXJldCA9ICgoKGluICsgMHg4MCkgKiAobWF4aW11bSAtIG1pbmltdW0pKSAvIDB4ZmYpICsgbWluaW11bTsKLQlpZiAocmV0IDwgbWluaW11bSkKLQkJcmV0dXJuIG1pbmltdW07Ci0JaWYgKHJldCA+IG1heGltdW0pCi0JCXJldHVybiBtYXhpbXVtOwotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbnQgaGlkX3RtZmZfcGxheShzdHJ1Y3QgaW5wdXRfZGV2ICpkZXYsIHZvaWQgKmRhdGEsIHN0cnVjdCBmZl9lZmZlY3QgKmVmZmVjdCkKLXsKLQlzdHJ1Y3QgaGlkX2RldmljZSAqaGlkID0gaW5wdXRfZ2V0X2RydmRhdGEoZGV2KTsKLQlzdHJ1Y3QgdG1mZl9kZXZpY2UgKnRtZmYgPSBkYXRhOwotCXN0cnVjdCBoaWRfZmllbGQgKmZmX2ZpZWxkID0gdG1mZi0+ZmZfZmllbGQ7Ci0JaW50IHgsIHk7Ci0JaW50IGxlZnQsIHJpZ2h0OwkvKiBSdW1ibGluZyAqLwotCi0Jc3dpdGNoIChlZmZlY3QtPnR5cGUpIHsKLQljYXNlIEZGX0NPTlNUQU5UOgotCQl4ID0gaGlkX3RtZmZfc2NhbGVfczgoZWZmZWN0LT51LnJhbXAuc3RhcnRfbGV2ZWwsCi0JCQkJCWZmX2ZpZWxkLT5sb2dpY2FsX21pbmltdW0sCi0JCQkJCWZmX2ZpZWxkLT5sb2dpY2FsX21heGltdW0pOwotCQl5ID0gaGlkX3RtZmZfc2NhbGVfczgoZWZmZWN0LT51LnJhbXAuZW5kX2xldmVsLAotCQkJCQlmZl9maWVsZC0+bG9naWNhbF9taW5pbXVtLAotCQkJCQlmZl9maWVsZC0+bG9naWNhbF9tYXhpbXVtKTsKLQotCQlkYmdfaGlkKCIoeCwgeSk9KCUwNHgsICUwNHgpXG4iLCB4LCB5KTsKLQkJZmZfZmllbGQtPnZhbHVlWzBdID0geDsKLQkJZmZfZmllbGQtPnZhbHVlWzFdID0geTsKLQkJdXNiaGlkX3N1Ym1pdF9yZXBvcnQoaGlkLCB0bWZmLT5yZXBvcnQsIFVTQl9ESVJfT1VUKTsKLQkJYnJlYWs7Ci0KLQljYXNlIEZGX1JVTUJMRToKLQkJbGVmdCA9IGhpZF90bWZmX3NjYWxlX3UxNihlZmZlY3QtPnUucnVtYmxlLndlYWtfbWFnbml0dWRlLAotCQkJCQlmZl9maWVsZC0+bG9naWNhbF9taW5pbXVtLAotCQkJCQlmZl9maWVsZC0+bG9naWNhbF9tYXhpbXVtKTsKLQkJcmlnaHQgPSBoaWRfdG1mZl9zY2FsZV91MTYoZWZmZWN0LT51LnJ1bWJsZS5zdHJvbmdfbWFnbml0dWRlLAotCQkJCQlmZl9maWVsZC0+bG9naWNhbF9taW5pbXVtLAotCQkJCQlmZl9maWVsZC0+bG9naWNhbF9tYXhpbXVtKTsKLQotCQlkYmdfaGlkKCIobGVmdCxyaWdodCk9KCUwOHgsICUwOHgpXG4iLCBsZWZ0LCByaWdodCk7Ci0JCWZmX2ZpZWxkLT52YWx1ZVswXSA9IGxlZnQ7Ci0JCWZmX2ZpZWxkLT52YWx1ZVsxXSA9IHJpZ2h0OwotCQl1c2JoaWRfc3VibWl0X3JlcG9ydChoaWQsIHRtZmYtPnJlcG9ydCwgVVNCX0RJUl9PVVQpOwotCQlicmVhazsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KLWludCBoaWRfdG1mZl9pbml0KHN0cnVjdCBoaWRfZGV2aWNlICpoaWQpCi17Ci0Jc3RydWN0IHRtZmZfZGV2aWNlICp0bWZmOwotCXN0cnVjdCBoaWRfcmVwb3J0ICpyZXBvcnQ7Ci0Jc3RydWN0IGxpc3RfaGVhZCAqcmVwb3J0X2xpc3Q7Ci0Jc3RydWN0IGhpZF9pbnB1dCAqaGlkaW5wdXQgPSBsaXN0X2VudHJ5KGhpZC0+aW5wdXRzLm5leHQsIHN0cnVjdCBoaWRfaW5wdXQsIGxpc3QpOwotCXN0cnVjdCBpbnB1dF9kZXYgKmlucHV0X2RldiA9IGhpZGlucHV0LT5pbnB1dDsKLQljb25zdCBzaWduZWQgc2hvcnQgKmZmX2JpdHMgPSBmZl9qb3lzdGljazsKLQlpbnQgZXJyb3I7Ci0JaW50IGk7Ci0KLQl0bWZmID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHRtZmZfZGV2aWNlKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCF0bWZmKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCS8qIEZpbmQgdGhlIHJlcG9ydCB0byB1c2UgKi8KLQlyZXBvcnRfbGlzdCA9ICZoaWQtPnJlcG9ydF9lbnVtW0hJRF9PVVRQVVRfUkVQT1JUXS5yZXBvcnRfbGlzdDsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHJlcG9ydCwgcmVwb3J0X2xpc3QsIGxpc3QpIHsKLQkJaW50IGZpZWxkbnVtOwotCi0JCWZvciAoZmllbGRudW0gPSAwOyBmaWVsZG51bSA8IHJlcG9ydC0+bWF4ZmllbGQ7ICsrZmllbGRudW0pIHsKLQkJCXN0cnVjdCBoaWRfZmllbGQgKmZpZWxkID0gcmVwb3J0LT5maWVsZFtmaWVsZG51bV07Ci0KLQkJCWlmIChmaWVsZC0+bWF4dXNhZ2UgPD0gMCkKLQkJCQljb250aW51ZTsKLQotCQkJc3dpdGNoIChmaWVsZC0+dXNhZ2VbMF0uaGlkKSB7Ci0JCQljYXNlIFRIUlVTVE1BU1RFUl9VU0FHRV9GRjoKLQkJCQlpZiAoZmllbGQtPnJlcG9ydF9jb3VudCA8IDIpIHsKLQkJCQkJd2FybigiaWdub3JpbmcgRkYgZmllbGQgd2l0aCByZXBvcnRfY291bnQgPCAyIik7Ci0JCQkJCWNvbnRpbnVlOwotCQkJCX0KLQotCQkJCWlmIChmaWVsZC0+bG9naWNhbF9tYXhpbXVtID09IGZpZWxkLT5sb2dpY2FsX21pbmltdW0pIHsKLQkJCQkJd2FybigiaWdub3JpbmcgRkYgZmllbGQgd2l0aCBsb2dpY2FsX21heGltdW0gPT0gbG9naWNhbF9taW5pbXVtIik7Ci0JCQkJCWNvbnRpbnVlOwotCQkJCX0KLQotCQkJCWlmICh0bWZmLT5yZXBvcnQgJiYgdG1mZi0+cmVwb3J0ICE9IHJlcG9ydCkgewotCQkJCQl3YXJuKCJpZ25vcmluZyBGRiBmaWVsZCBpbiBvdGhlciByZXBvcnQiKTsKLQkJCQkJY29udGludWU7Ci0JCQkJfQotCi0JCQkJaWYgKHRtZmYtPmZmX2ZpZWxkICYmIHRtZmYtPmZmX2ZpZWxkICE9IGZpZWxkKSB7Ci0JCQkJCXdhcm4oImlnbm9yaW5nIGR1cGxpY2F0ZSBGRiBmaWVsZCIpOwotCQkJCQljb250aW51ZTsKLQkJCQl9Ci0KLQkJCQl0bWZmLT5yZXBvcnQgPSByZXBvcnQ7Ci0JCQkJdG1mZi0+ZmZfZmllbGQgPSBmaWVsZDsKLQotCQkJCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGRldmljZXMpOyBpKyspIHsKLQkJCQkJaWYgKGlucHV0X2Rldi0+aWQudmVuZG9yID09IGRldmljZXNbaV0uaWRWZW5kb3IgJiYKLQkJCQkJICAgIGlucHV0X2Rldi0+aWQucHJvZHVjdCA9PSBkZXZpY2VzW2ldLmlkUHJvZHVjdCkgewotCQkJCQkJZmZfYml0cyA9IGRldmljZXNbaV0uZmY7Ci0JCQkJCQlicmVhazsKLQkJCQkJfQotCQkJCX0KLQotCQkJCWZvciAoaSA9IDA7IGZmX2JpdHNbaV0gPj0gMDsgaSsrKQotCQkJCQlzZXRfYml0KGZmX2JpdHNbaV0sIGlucHV0X2Rldi0+ZmZiaXQpOwotCi0JCQkJYnJlYWs7Ci0KLQkJCWRlZmF1bHQ6Ci0JCQkJd2FybigiaWdub3JpbmcgdW5rbm93biBvdXRwdXQgdXNhZ2UgJTA4eCIsIGZpZWxkLT51c2FnZVswXS5oaWQpOwotCQkJCWNvbnRpbnVlOwotCQkJfQotCQl9Ci0JfQotCi0JaWYgKCF0bWZmLT5yZXBvcnQpIHsKLQkJZXJyKCJjYW50IGZpbmQgRkYgZmllbGQgaW4gb3V0cHV0IHJlcG9ydHNcbiIpOwotCQllcnJvciA9IC1FTk9ERVY7Ci0JCWdvdG8gZmFpbDsKLQl9Ci0KLQllcnJvciA9IGlucHV0X2ZmX2NyZWF0ZV9tZW1sZXNzKGlucHV0X2RldiwgdG1mZiwgaGlkX3RtZmZfcGxheSk7Ci0JaWYgKGVycm9yKQotCQlnb3RvIGZhaWw7Ci0KLQlpbmZvKCJGb3JjZSBmZWVkYmFjayBmb3IgVGhydXN0TWFzdGVyIGRldmljZXMgYnkgWmlueCBWZXJpdHVzZSA8emlueEBlcGljc29sLm9yZz4iKTsKLQlyZXR1cm4gMDsKLQotIGZhaWw6Ci0Ja2ZyZWUodG1mZik7Ci0JcmV0dXJuIGVycm9yOwotfQotCmRpZmYgLS1naXQgYS9kcml2ZXJzL2hpZC91c2JoaWQvaGlkLXpwZmYuYyBiL2RyaXZlcnMvaGlkL3VzYmhpZC9oaWQtenBmZi5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YTY4ODI3Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvaGlkL3VzYmhpZC9oaWQtenBmZi5jCisrKyAvZGV2L251bGwKQEAgLTEsMTA3ICswLDAgQEAKLS8qCi0gKiAgRm9yY2UgZmVlZGJhY2sgc3VwcG9ydCBmb3IgWmVyb3BsdXMgYmFzZWQgZGV2aWNlcwotICoKLSAqICBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDYgQW5zc2kgSGFubnVsYSA8YW5zc2kuaGFubnVsYUBnbWFpbC5jb20+Ci0gKi8KLQotLyoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCi0gKi8KLQotCi0jaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KLSNpbmNsdWRlIDxsaW51eC91c2IuaD4KLSNpbmNsdWRlIDxsaW51eC9oaWQuaD4KLSNpbmNsdWRlICJ1c2JoaWQuaCIKLQotc3RydWN0IHpwZmZfZGV2aWNlIHsKLQlzdHJ1Y3QgaGlkX3JlcG9ydCAqcmVwb3J0OwotfTsKLQotc3RhdGljIGludCBoaWRfenBmZl9wbGF5KHN0cnVjdCBpbnB1dF9kZXYgKmRldiwgdm9pZCAqZGF0YSwKLQkJCSBzdHJ1Y3QgZmZfZWZmZWN0ICplZmZlY3QpCi17Ci0Jc3RydWN0IGhpZF9kZXZpY2UgKmhpZCA9IGlucHV0X2dldF9kcnZkYXRhKGRldik7Ci0Jc3RydWN0IHpwZmZfZGV2aWNlICp6cGZmID0gZGF0YTsKLQlpbnQgbGVmdCwgcmlnaHQ7Ci0KLQkvKgotCSAqIFRoZSBmb2xsb3dpbmcgaXMgc3BlY2lmaWVkIHRoZSBvdGhlciB3YXkgYXJvdW5kIGluIHRoZSBaZXJvcGx1cwotCSAqIGRhdGFzaGVldCBidXQgdGhlIG9yZGVyIGJlbG93IGlzIGNvcnJlY3QgZm9yIHRoZSBYRlggRXhlY3V0aW9uZXI7Ci0JICogaG93ZXZlciBpdCBpcyBwb3NzaWJsZSB0aGF0IHRoZSBYRlggRXhlY3V0aW9uZXIgaXMgYW4gZXhjZXB0aW9uCi0JICovCi0KLQlsZWZ0ID0gZWZmZWN0LT51LnJ1bWJsZS5zdHJvbmdfbWFnbml0dWRlOwotCXJpZ2h0ID0gZWZmZWN0LT51LnJ1bWJsZS53ZWFrX21hZ25pdHVkZTsKLQlkYmdfaGlkKCJjYWxsZWQgd2l0aCAweCUwNHggMHglMDR4XG4iLCBsZWZ0LCByaWdodCk7Ci0KLQlsZWZ0ID0gbGVmdCAqIDB4N2YgLyAweGZmZmY7Ci0JcmlnaHQgPSByaWdodCAqIDB4N2YgLyAweGZmZmY7Ci0KLQl6cGZmLT5yZXBvcnQtPmZpZWxkWzJdLT52YWx1ZVswXSA9IGxlZnQ7Ci0JenBmZi0+cmVwb3J0LT5maWVsZFszXS0+dmFsdWVbMF0gPSByaWdodDsKLQlkYmdfaGlkKCJydW5uaW5nIHdpdGggMHglMDJ4IDB4JTAyeFxuIiwgbGVmdCwgcmlnaHQpOwotCXVzYmhpZF9zdWJtaXRfcmVwb3J0KGhpZCwgenBmZi0+cmVwb3J0LCBVU0JfRElSX09VVCk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotaW50IGhpZF96cGZmX2luaXQoc3RydWN0IGhpZF9kZXZpY2UgKmhpZCkKLXsKLQlzdHJ1Y3QgenBmZl9kZXZpY2UgKnpwZmY7Ci0Jc3RydWN0IGhpZF9yZXBvcnQgKnJlcG9ydDsKLQlzdHJ1Y3QgaGlkX2lucHV0ICpoaWRpbnB1dCA9IGxpc3RfZW50cnkoaGlkLT5pbnB1dHMubmV4dCwKLQkJCQkJCXN0cnVjdCBoaWRfaW5wdXQsIGxpc3QpOwotCXN0cnVjdCBsaXN0X2hlYWQgKnJlcG9ydF9saXN0ID0KLQkJCSZoaWQtPnJlcG9ydF9lbnVtW0hJRF9PVVRQVVRfUkVQT1JUXS5yZXBvcnRfbGlzdDsKLQlzdHJ1Y3QgaW5wdXRfZGV2ICpkZXYgPSBoaWRpbnB1dC0+aW5wdXQ7Ci0JaW50IGVycm9yOwotCi0JaWYgKGxpc3RfZW1wdHkocmVwb3J0X2xpc3QpKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiaGlkLXpwZmY6IG5vIG91dHB1dCByZXBvcnQgZm91bmRcbiIpOwotCQlyZXR1cm4gLUVOT0RFVjsKLQl9Ci0KLQlyZXBvcnQgPSBsaXN0X2VudHJ5KHJlcG9ydF9saXN0LT5uZXh0LCBzdHJ1Y3QgaGlkX3JlcG9ydCwgbGlzdCk7Ci0KLQlpZiAocmVwb3J0LT5tYXhmaWVsZCA8IDQpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJoaWQtenBmZjogbm90IGVub3VnaCBmaWVsZHMgaW4gcmVwb3J0XG4iKTsKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JfQotCi0JenBmZiA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB6cGZmX2RldmljZSksIEdGUF9LRVJORUwpOwotCWlmICghenBmZikKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQlzZXRfYml0KEZGX1JVTUJMRSwgZGV2LT5mZmJpdCk7Ci0KLQllcnJvciA9IGlucHV0X2ZmX2NyZWF0ZV9tZW1sZXNzKGRldiwgenBmZiwgaGlkX3pwZmZfcGxheSk7Ci0JaWYgKGVycm9yKSB7Ci0JCWtmcmVlKHpwZmYpOwotCQlyZXR1cm4gZXJyb3I7Ci0JfQotCi0JenBmZi0+cmVwb3J0ID0gcmVwb3J0OwotCXpwZmYtPnJlcG9ydC0+ZmllbGRbMF0tPnZhbHVlWzBdID0gMHgwMDsKLQl6cGZmLT5yZXBvcnQtPmZpZWxkWzFdLT52YWx1ZVswXSA9IDB4MDI7Ci0JenBmZi0+cmVwb3J0LT5maWVsZFsyXS0+dmFsdWVbMF0gPSAweDAwOwotCXpwZmYtPnJlcG9ydC0+ZmllbGRbM10tPnZhbHVlWzBdID0gMHgwMDsKLQl1c2JoaWRfc3VibWl0X3JlcG9ydChoaWQsIHpwZmYtPnJlcG9ydCwgVVNCX0RJUl9PVVQpOwotCi0JcHJpbnRrKEtFUk5fSU5GTyAiRm9yY2UgZmVlZGJhY2sgZm9yIFplcm9wbHVzIGJhc2VkIGRldmljZXMgYnkgIgotCSAgICAgICAiQW5zc2kgSGFubnVsYSA8YW5zc2kuaGFubnVsYUBnbWFpbC5jb20+XG4iKTsKLQotCXJldHVybiAwOwotfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9oaWQvdXNiaGlkL2hpZGRldi5jIGIvZHJpdmVycy9oaWQvdXNiaGlkL2hpZGRldi5jCmluZGV4IDg0MmU5ZWQuLmJhYmQ2NWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaGlkL3VzYmhpZC9oaWRkZXYuYworKysgYi9kcml2ZXJzL2hpZC91c2JoaWQvaGlkZGV2LmMKQEAgLTc5MCwyMSArNzkwLDIzIEBACiAvKgogICogVGhpcyBpcyB3aGVyZSBoaWQuYyBjYWxscyB1cyB0byBjb25uZWN0IGEgaGlkIGRldmljZSB0byB0aGUgaGlkZGV2IGRyaXZlcgogICovCi1pbnQgaGlkZGV2X2Nvbm5lY3Qoc3RydWN0IGhpZF9kZXZpY2UgKmhpZCkKK2ludCBoaWRkZXZfY29ubmVjdChzdHJ1Y3QgaGlkX2RldmljZSAqaGlkLCB1bnNpZ25lZCBpbnQgZm9yY2UpCiB7CiAJc3RydWN0IGhpZGRldiAqaGlkZGV2OwogCXN0cnVjdCB1c2JoaWRfZGV2aWNlICp1c2JoaWQgPSBoaWQtPmRyaXZlcl9kYXRhOwotCWludCBpOwogCWludCByZXR2YWw7CiAKLQlmb3IgKGkgPSAwOyBpIDwgaGlkLT5tYXhjb2xsZWN0aW9uOyBpKyspCi0JCWlmIChoaWQtPmNvbGxlY3Rpb25baV0udHlwZSA9PQotCQkgICAgSElEX0NPTExFQ1RJT05fQVBQTElDQVRJT04gJiYKLQkJICAgICFJU19JTlBVVF9BUFBMSUNBVElPTihoaWQtPmNvbGxlY3Rpb25baV0udXNhZ2UpKQotCQkJYnJlYWs7CisJaWYgKCFmb3JjZSkgeworCQl1bnNpZ25lZCBpbnQgaTsKKwkJZm9yIChpID0gMDsgaSA8IGhpZC0+bWF4Y29sbGVjdGlvbjsgaSsrKQorCQkJaWYgKGhpZC0+Y29sbGVjdGlvbltpXS50eXBlID09CisJCQkgICAgSElEX0NPTExFQ1RJT05fQVBQTElDQVRJT04gJiYKKwkJCSAgICAhSVNfSU5QVVRfQVBQTElDQVRJT04oaGlkLT5jb2xsZWN0aW9uW2ldLnVzYWdlKSkKKwkJCQlicmVhazsKIAotCWlmIChpID09IGhpZC0+bWF4Y29sbGVjdGlvbiAmJiAoaGlkLT5xdWlya3MgJiBISURfUVVJUktfSElEREVWKSA9PSAwKQotCQlyZXR1cm4gLTE7CisJCWlmIChpID09IGhpZC0+bWF4Y29sbGVjdGlvbikKKwkJCXJldHVybiAtMTsKKwl9CiAKIAlpZiAoIShoaWRkZXYgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgaGlkZGV2KSwgR0ZQX0tFUk5FTCkpKQogCQlyZXR1cm4gLTE7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2hpZC91c2JoaWQvdXNiaGlkLmggYi9kcml2ZXJzL2hpZC91c2JoaWQvdXNiaGlkLmgKaW5kZXggNjJkMmQ3Yy4uYWJlZGIxMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9oaWQvdXNiaGlkL3VzYmhpZC5oCisrKyBiL2RyaXZlcnMvaGlkL3VzYmhpZC91c2JoaWQuaApAQCAtNjcsNyArNjcsNyBAQAogCXNwaW5sb2NrX3QgY3RybGxvY2s7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDb250cm9sIGZpZm8gc3BpbmxvY2sgKi8KIAogCXN0cnVjdCB1cmIgKnVyYm91dDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBPdXRwdXQgVVJCICovCi0Jc3RydWN0IGhpZF9yZXBvcnQgKm91dFtISURfQ09OVFJPTF9GSUZPX1NJWkVdOyAgICAgICAgICAgICAgICAgIC8qIE91dHB1dCBwaXBlIGZpZm8gKi8KKwlzdHJ1Y3QgaGlkX291dHB1dF9maWZvIG91dFtISURfQ09OVFJPTF9GSUZPX1NJWkVdOyAgICAgICAgICAgICAgLyogT3V0cHV0IHBpcGUgZmlmbyAqLwogCXVuc2lnbmVkIGNoYXIgb3V0aGVhZCwgb3V0dGFpbDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBPdXRwdXQgcGlwZSBmaWZvIGhlYWQgJiB0YWlsICovCiAJY2hhciAqb3V0YnVmOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE91dHB1dCBidWZmZXIgKi8KIAlkbWFfYWRkcl90IG91dGJ1Zl9kbWE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogT3V0cHV0IGJ1ZmZlciBkbWEgKi8KQEAgLTgyLDcgKzgyLDcgQEAKIH07CiAKICNkZWZpbmUJaGlkX3RvX3VzYl9kZXYoaGlkX2RldikgXAotCWNvbnRhaW5lcl9vZihoaWRfZGV2LT5kZXYtPnBhcmVudCwgc3RydWN0IHVzYl9kZXZpY2UsIGRldikKKwljb250YWluZXJfb2YoaGlkX2Rldi0+ZGV2LnBhcmVudC0+cGFyZW50LCBzdHJ1Y3QgdXNiX2RldmljZSwgZGV2KQogCiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9oaWQvdXNiaGlkL3VzYmtiZC5jIGIvZHJpdmVycy9oaWQvdXNiaGlkL3VzYmtiZC5jCmluZGV4IDBjYWFhZmUuLmIzNDI5MjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaGlkL3VzYmhpZC91c2JrYmQuYworKysgYi9kcml2ZXJzL2hpZC91c2JoaWQvdXNia2JkLmMKQEAgLTEwNSwxNCArMTA1LDE2IEBACiAJCQlpZiAodXNiX2tiZF9rZXljb2RlW2tiZC0+b2xkW2ldXSkKIAkJCQlpbnB1dF9yZXBvcnRfa2V5KGtiZC0+ZGV2LCB1c2Jfa2JkX2tleWNvZGVba2JkLT5vbGRbaV1dLCAwKTsKIAkJCWVsc2UKLQkJCQlpbmZvKCJVbmtub3duIGtleSAoc2NhbmNvZGUgJSN4KSByZWxlYXNlZC4iLCBrYmQtPm9sZFtpXSk7CisJCQkJZGV2X2luZm8oJnVyYi0+ZGV2LT5kZXYsCisJCQkJCQkiVW5rbm93biBrZXkgKHNjYW5jb2RlICUjeCkgcmVsZWFzZWQuXG4iLCBrYmQtPm9sZFtpXSk7CiAJCX0KIAogCQlpZiAoa2JkLT5uZXdbaV0gPiAzICYmIG1lbXNjYW4oa2JkLT5vbGQgKyAyLCBrYmQtPm5ld1tpXSwgNikgPT0ga2JkLT5vbGQgKyA4KSB7CiAJCQlpZiAodXNiX2tiZF9rZXljb2RlW2tiZC0+bmV3W2ldXSkKIAkJCQlpbnB1dF9yZXBvcnRfa2V5KGtiZC0+ZGV2LCB1c2Jfa2JkX2tleWNvZGVba2JkLT5uZXdbaV1dLCAxKTsKIAkJCWVsc2UKLQkJCQlpbmZvKCJVbmtub3duIGtleSAoc2NhbmNvZGUgJSN4KSBwcmVzc2VkLiIsIGtiZC0+bmV3W2ldKTsKKwkJCQlkZXZfaW5mbygmdXJiLT5kZXYtPmRldiwKKwkJCQkJCSJVbmtub3duIGtleSAoc2NhbmNvZGUgJSN4KSByZWxlYXNlZC5cbiIsIGtiZC0+bmV3W2ldKTsKIAkJfQogCX0KIApAQCAtMTU5LDcgKzE2MSw4IEBACiAJc3RydWN0IHVzYl9rYmQgKmtiZCA9IHVyYi0+Y29udGV4dDsKIAogCWlmICh1cmItPnN0YXR1cykKLQkJd2FybigibGVkIHVyYiBzdGF0dXMgJWQgcmVjZWl2ZWQiLCB1cmItPnN0YXR1cyk7CisJCWRldl93YXJuKCZ1cmItPmRldi0+ZGV2LCAibGVkIHVyYiBzdGF0dXMgJWQgcmVjZWl2ZWRcbiIsCisJCQkgdXJiLT5zdGF0dXMpOwogCiAJaWYgKCooa2JkLT5sZWRzKSA9PSBrYmQtPm5ld2xlZHMpCiAJCXJldHVybjsKQEAgLTM1Miw3ICszNTUsOCBAQAogewogCWludCByZXN1bHQgPSB1c2JfcmVnaXN0ZXIoJnVzYl9rYmRfZHJpdmVyKTsKIAlpZiAocmVzdWx0ID09IDApCi0JCWluZm8oRFJJVkVSX1ZFUlNJT04gIjoiIERSSVZFUl9ERVNDKTsKKwkJcHJpbnRrKEtFUk5fSU5GTyBLQlVJTERfTU9ETkFNRSAiOiAiIERSSVZFUl9WRVJTSU9OICI6IgorCQkJCURSSVZFUl9ERVNDICJcbiIpOwogCXJldHVybiByZXN1bHQ7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaGlkL3VzYmhpZC91c2Jtb3VzZS5jIGIvZHJpdmVycy9oaWQvdXNiaGlkL3VzYm1vdXNlLmMKaW5kZXggMzU2ODllZi4uNzJhYjRiMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9oaWQvdXNiaGlkL3VzYm1vdXNlLmMKKysrIGIvZHJpdmVycy9oaWQvdXNiaGlkL3VzYm1vdXNlLmMKQEAgLTMxLDYgKzMxLDExIEBACiAjaW5jbHVkZSA8bGludXgvdXNiL2lucHV0Lmg+CiAjaW5jbHVkZSA8bGludXgvaGlkLmg+CiAKKy8qIGZvciBhcHBsZSBJRHMgKi8KKyNpZmRlZiBDT05GSUdfVVNCX0hJRF9NT0RVTEUKKyNpbmNsdWRlICIuLi9oaWQtaWRzLmgiCisjZW5kaWYKKwogLyoKICAqIFZlcnNpb24gSW5mb3JtYXRpb24KICAqLwpAQCAtMjQwLDcgKzI0NSw4IEBACiB7CiAJaW50IHJldHZhbCA9IHVzYl9yZWdpc3RlcigmdXNiX21vdXNlX2RyaXZlcik7CiAJaWYgKHJldHZhbCA9PSAwKQotCQlpbmZvKERSSVZFUl9WRVJTSU9OICI6IiBEUklWRVJfREVTQyk7CisJCXByaW50ayhLRVJOX0lORk8gS0JVSUxEX01PRE5BTUUgIjogIiBEUklWRVJfVkVSU0lPTiAiOiIKKwkJCQlEUklWRVJfREVTQyAiXG4iKTsKIAlyZXR1cm4gcmV0dmFsOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL0tjb25maWcgYi9kcml2ZXJzL2h3bW9uL0tjb25maWcKaW5kZXggZWJhY2MwYS4uNmRlMWUwZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi9LY29uZmlnCisrKyBiL2RyaXZlcnMvaHdtb24vS2NvbmZpZwpAQCAtNTEwLDExICs1MTAsOSBAQAogCWRlcGVuZHMgb24gSTJDCiAJaGVscAogCSAgSWYgeW91IHNheSB5ZXMgaGVyZSB5b3UgZ2V0IHN1cHBvcnQgZm9yIE5hdGlvbmFsIFNlbWljb25kdWN0b3IgTE05MCwKLQkgIExNODYsIExNODkgYW5kIExNOTksIEFuYWxvZyBEZXZpY2VzIEFETTEwMzIgYW5kIE1heGltIE1BWDY2NTcsCi0JICBNQVg2NjU4LCBNQVg2NjU5LCBNQVg2NjgwIGFuZCBNQVg2NjgxIHNlbnNvciBjaGlwcy4KLQotCSAgVGhlIEFuYWxvZyBEZXZpY2VzIEFEVDc0NjEgc2Vuc29yIGNoaXAgaXMgYWxzbyBzdXBwb3J0ZWQsIGJ1dCBvbmx5Ci0JICBpZiBmb3VuZCBpbiBBRE0xMDMyIGNvbXBhdGliaWxpdHkgbW9kZS4KKwkgIExNODYsIExNODkgYW5kIExNOTksIEFuYWxvZyBEZXZpY2VzIEFETTEwMzIgYW5kIEFEVDc0NjEsIGFuZCBNYXhpbQorCSAgTUFYNjY0NiwgTUFYNjY0NywgTUFYNjY0OSwgTUFYNjY1NywgTUFYNjY1OCwgTUFYNjY1OSwgTUFYNjY4MCBhbmQKKwkgIE1BWDY2ODEgc2Vuc29yIGNoaXBzLgogCiAJICBUaGlzIGRyaXZlciBjYW4gYWxzbyBiZSBidWlsdCBhcyBhIG1vZHVsZS4gIElmIHNvLCB0aGUgbW9kdWxlCiAJICB3aWxsIGJlIGNhbGxlZCBsbTkwLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9hZG0xMDI2LmMgYi9kcml2ZXJzL2h3bW9uL2FkbTEwMjYuYwppbmRleCA3ZmUyNDQxLi5mZjdkZTQwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL2FkbTEwMjYuYworKysgYi9kcml2ZXJzL2h3bW9uL2FkbTEwMjYuYwpAQCAtMjc5LDcgKzI3OSw2IEBACiAJdTggZmFuX21pbls4XTsJCS8qIFJlZ2lzdGVyIHZhbHVlICovCiAJdTggZmFuX2Rpdls4XTsJCS8qIERlY29kZWQgdmFsdWUgKi8KIAlzdHJ1Y3QgcHdtX2RhdGEgcHdtMTsJLyogUHdtIGNvbnRyb2wgdmFsdWVzICovCi0JaW50IHZpZDsJCS8qIERlY29kZWQgdmFsdWUgKi8KIAl1OCB2cm07CQkJLyogVlJNIHZlcnNpb24gKi8KIAl1OCBhbmFsb2dfb3V0OwkJLyogUmVnaXN0ZXIgdmFsdWUgKERBQykgKi8KIAlsb25nIGFsYXJtczsJCS8qIFJlZ2lzdGVyIGVuY29kaW5nLCBjb21iaW5lZCAqLwpAQCAtNDU1LDcgKzQ1NCw3IEBACiAJc3RydWN0IGFkbTEwMjZfZGF0YSAqZGF0YSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwogCWludCBpOwogCi0JZGV2X2RiZygmY2xpZW50LT5kZXYsICJHUElPIGNvbmZpZyBpczoiKTsKKwlkZXZfZGJnKCZjbGllbnQtPmRldiwgIkdQSU8gY29uZmlnIGlzOlxuIik7CiAJZm9yIChpID0gMDtpIDw9IDc7KytpKSB7CiAJCWlmIChkYXRhLT5jb25maWcyICYgKDEgPDwgaSkpIHsKIAkJCWRldl9kYmcoJmNsaWVudC0+ZGV2LCAiXHQlc0dQJXMlZFxuIiwKQEAgLTY5Nyw4ICs2OTYsNiBAQAogCQlkYXRhLT5sYXN0X2NvbmZpZyA9IGppZmZpZXM7CiAJfTsgLyogbGFzdF9jb25maWcgKi8KIAotCWRldl9kYmcoJmNsaWVudC0+ZGV2LCAiU2V0dGluZyBWSUQgZnJvbSBHUElPMTEtMTUuXG4iKTsKLQlkYXRhLT52aWQgPSAoZGF0YS0+Z3BpbyA+PiAxMSkgJiAweDFmOwogCWRhdGEtPnZhbGlkID0gMTsKIAltdXRleF91bmxvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKIAlyZXR1cm4gZGF0YTsKQEAgLTEyMTUsNyArMTIxMiwxMCBAQAogc3RhdGljIHNzaXplX3Qgc2hvd192aWRfcmVnKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKIHsKIAlzdHJ1Y3QgYWRtMTAyNl9kYXRhICpkYXRhID0gYWRtMTAyNl91cGRhdGVfZGV2aWNlKGRldik7Ci0JcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIHZpZF9mcm9tX3JlZyhkYXRhLT52aWQgJiAweDNmLCBkYXRhLT52cm0pKTsKKwlpbnQgdmlkID0gKGRhdGEtPmdwaW8gPj4gMTEpICYgMHgxZjsKKworCWRldl9kYmcoZGV2LCAiU2V0dGluZyBWSUQgZnJvbSBHUElPMTEtMTUuXG4iKTsKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgdmlkX2Zyb21fcmVnKHZpZCwgZGF0YS0+dnJtKSk7CiB9CiBzdGF0aWMgREVWSUNFX0FUVFIoY3B1MF92aWQsIFNfSVJVR08sIHNob3dfdmlkX3JlZywgTlVMTCk7CiAKQEAgLTE2ODEsMTcgKzE2ODEsMTYgQEAKIAkJCWtpbmQgPSBhZG0xMDI2OwogCQl9IGVsc2UgaWYgKGNvbXBhbnkgPT0gQURNMTAyNl9DT01QQU5ZX0FOQUxPR19ERVYKIAkJCSYmICh2ZXJzdGVwICYgMHhmMCkgPT0gQURNMTAyNl9WRVJTVEVQX0dFTkVSSUMpIHsKLQkJCWRldl9lcnIoJmFkYXB0ZXItPmRldiwgIjogVW5yZWNvZ25pemVkIHN0ZXBwaW5nICIKKwkJCWRldl9lcnIoJmFkYXB0ZXItPmRldiwgIlVucmVjb2duaXplZCBzdGVwcGluZyAiCiAJCQkJIjB4JTAyeC4gRGVmYXVsdGluZyB0byBBRE0xMDI2LlxuIiwgdmVyc3RlcCk7CiAJCQlraW5kID0gYWRtMTAyNjsKIAkJfSBlbHNlIGlmICgodmVyc3RlcCAmIDB4ZjApID09IEFETTEwMjZfVkVSU1RFUF9HRU5FUklDKSB7Ci0JCQlkZXZfZXJyKCZhZGFwdGVyLT5kZXYsICI6IEZvdW5kIHZlcnNpb24vc3RlcHBpbmcgIgorCQkJZGV2X2VycigmYWRhcHRlci0+ZGV2LCAiRm91bmQgdmVyc2lvbi9zdGVwcGluZyAiCiAJCQkJIjB4JTAyeC4gQXNzdW1pbmcgZ2VuZXJpYyBBRE0xMDI2LlxuIiwKIAkJCQl2ZXJzdGVwKTsKIAkJCWtpbmQgPSBhbnlfY2hpcDsKIAkJfSBlbHNlIHsKLQkJCWRldl9kYmcoJmFkYXB0ZXItPmRldiwgIjogQXV0b2RldGVjdGlvbiAiCi0JCQkJImZhaWxlZFxuIik7CisJCQlkZXZfZGJnKCZhZGFwdGVyLT5kZXYsICJBdXRvZGV0ZWN0aW9uIGZhaWxlZFxuIik7CiAJCQkvKiBOb3QgYW4gQURNMTAyNiAuLi4gKi8KIAkJCWlmIChraW5kID09IDApIHsgLyogVXNlciB1c2VkIGZvcmNlPXgseSAqLwogCQkJCWRldl9lcnIoJmFkYXB0ZXItPmRldiwgIkdlbmVyaWMgQURNMTAyNiBub3QgIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9hZG0xMDI5LmMgYi9kcml2ZXJzL2h3bW9uL2FkbTEwMjkuYwppbmRleCBiYTg0Y2E1Li4zNjcxODE1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL2FkbTEwMjkuYworKysgYi9kcml2ZXJzL2h3bW9uL2FkbTEwMjkuYwpAQCAtMTc5LDcgKzE3OSw4IEBACiAJc3RydWN0IHNlbnNvcl9kZXZpY2VfYXR0cmlidXRlICphdHRyID0gdG9fc2Vuc29yX2Rldl9hdHRyKGRldmF0dHIpOwogCXN0cnVjdCBhZG0xMDI5X2RhdGEgKmRhdGEgPSBhZG0xMDI5X3VwZGF0ZV9kZXZpY2UoZGV2KTsKIAl1MTYgdmFsOwotCWlmIChkYXRhLT5mYW5bYXR0ci0+aW5kZXhdID09IDAgfHwgZGF0YS0+ZmFuX2RpdlthdHRyLT5pbmRleF0gPT0gMAorCWlmIChkYXRhLT5mYW5bYXR0ci0+aW5kZXhdID09IDAKKwkgICAgfHwgKGRhdGEtPmZhbl9kaXZbYXR0ci0+aW5kZXhdICYgMHhDMCkgPT0gMAogCSAgICB8fCBkYXRhLT5mYW5bYXR0ci0+aW5kZXhdID09IDI1NSkgewogCQlyZXR1cm4gc3ByaW50ZihidWYsICIwXG4iKTsKIAl9CkBAIC0xOTQsNyArMTk1LDcgQEAKIHsKIAlzdHJ1Y3Qgc2Vuc29yX2RldmljZV9hdHRyaWJ1dGUgKmF0dHIgPSB0b19zZW5zb3JfZGV2X2F0dHIoZGV2YXR0cik7CiAJc3RydWN0IGFkbTEwMjlfZGF0YSAqZGF0YSA9IGFkbTEwMjlfdXBkYXRlX2RldmljZShkZXYpOwotCWlmIChkYXRhLT5mYW5fZGl2W2F0dHItPmluZGV4XSA9PSAwKQorCWlmICgoZGF0YS0+ZmFuX2RpdlthdHRyLT5pbmRleF0gJiAweEMwKSA9PSAwKQogCQlyZXR1cm4gc3ByaW50ZihidWYsICIwXG4iKTsKIAlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgRElWX0ZST01fUkVHKGRhdGEtPmZhbl9kaXZbYXR0ci0+aW5kZXhdKSk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL2Ftcy9hbXMtY29yZS5jIGIvZHJpdmVycy9od21vbi9hbXMvYW1zLWNvcmUuYwppbmRleCBmYmVmYTgyLi42YzlhY2UxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL2Ftcy9hbXMtY29yZS5jCisrKyBiL2RyaXZlcnMvaHdtb24vYW1zL2Ftcy1jb3JlLmMKQEAgLTk5LDQwICs5OSwzMiBAQAogICovCiBzdGF0aWMgdm9pZCBhbXNfd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIHsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXU4IGlycXNfdG9fY2xlYXI7CisKIAltdXRleF9sb2NrKCZhbXNfaW5mby5sb2NrKTsKIAotCWlmIChhbXNfaW5mby5oYXNfZGV2aWNlKSB7Ci0JCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmFtc19pbmZvLmlycV9sb2NrLCBmbGFncyk7CisJaXJxc190b19jbGVhciA9IGFtc19pbmZvLndvcmtlcl9pcnFzOwogCi0JCXNwaW5fbG9ja19pcnFzYXZlKCZhbXNfaW5mby5pcnFfbG9jaywgZmxhZ3MpOworCWlmIChhbXNfaW5mby53b3JrZXJfaXJxcyAmIEFNU19JUlFfRlJFRUZBTEwpIHsKKwkJaWYgKHZlcmJvc2UpCisJCQlwcmludGsoS0VSTl9JTkZPICJhbXM6IGZyZWVmYWxsIGRldGVjdGVkIVxuIik7CiAKLQkJaWYgKGFtc19pbmZvLndvcmtlcl9pcnFzICYgQU1TX0lSUV9GUkVFRkFMTCkgewotCQkJaWYgKHZlcmJvc2UpCi0JCQkJcHJpbnRrKEtFUk5fSU5GTyAiYW1zOiBmcmVlZmFsbCBkZXRlY3RlZCFcbiIpOwotCi0JCQlhbXNfaW5mby53b3JrZXJfaXJxcyAmPSB+QU1TX0lSUV9GUkVFRkFMTDsKLQotCQkJLyogd2UgbXVzdCBjYWxsIHRoaXMgd2l0aCBpbnRlcnJ1cHRzIGVuYWJsZWQgKi8KLQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtc19pbmZvLmlycV9sb2NrLCBmbGFncyk7Ci0JCQlhbXNfaW5mby5jbGVhcl9pcnEoQU1TX0lSUV9GUkVFRkFMTCk7Ci0JCQlzcGluX2xvY2tfaXJxc2F2ZSgmYW1zX2luZm8uaXJxX2xvY2ssIGZsYWdzKTsKLQkJfQotCi0JCWlmIChhbXNfaW5mby53b3JrZXJfaXJxcyAmIEFNU19JUlFfU0hPQ0spIHsKLQkJCWlmICh2ZXJib3NlKQotCQkJCXByaW50ayhLRVJOX0lORk8gImFtczogc2hvY2sgZGV0ZWN0ZWQhXG4iKTsKLQotCQkJYW1zX2luZm8ud29ya2VyX2lycXMgJj0gfkFNU19JUlFfU0hPQ0s7Ci0KLQkJCS8qIHdlIG11c3QgY2FsbCB0aGlzIHdpdGggaW50ZXJydXB0cyBlbmFibGVkICovCi0JCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXNfaW5mby5pcnFfbG9jaywgZmxhZ3MpOwotCQkJYW1zX2luZm8uY2xlYXJfaXJxKEFNU19JUlFfU0hPQ0spOwotCQkJc3Bpbl9sb2NrX2lycXNhdmUoJmFtc19pbmZvLmlycV9sb2NrLCBmbGFncyk7Ci0JCX0KLQotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXNfaW5mby5pcnFfbG9jaywgZmxhZ3MpOworCQlhbXNfaW5mby53b3JrZXJfaXJxcyAmPSB+QU1TX0lSUV9GUkVFRkFMTDsKIAl9CiAKKwlpZiAoYW1zX2luZm8ud29ya2VyX2lycXMgJiBBTVNfSVJRX1NIT0NLKSB7CisJCWlmICh2ZXJib3NlKQorCQkJcHJpbnRrKEtFUk5fSU5GTyAiYW1zOiBzaG9jayBkZXRlY3RlZCFcbiIpOworCisJCWFtc19pbmZvLndvcmtlcl9pcnFzICY9IH5BTVNfSVJRX1NIT0NLOworCX0KKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtc19pbmZvLmlycV9sb2NrLCBmbGFncyk7CisKKwlhbXNfaW5mby5jbGVhcl9pcnEoaXJxc190b19jbGVhcik7CisKIAltdXRleF91bmxvY2soJmFtc19pbmZvLmxvY2spOwogfQogCkBAIC0yMjMsMzQgKzIxNSwyOCBAQAogCiB2b2lkIGFtc19leGl0KHZvaWQpCiB7Ci0JbXV0ZXhfbG9jaygmYW1zX2luZm8ubG9jayk7CisJLyogUmVtb3ZlIGlucHV0IGRldmljZSAqLworCWFtc19pbnB1dF9leGl0KCk7CiAKLQlpZiAoYW1zX2luZm8uaGFzX2RldmljZSkgewotCQkvKiBSZW1vdmUgaW5wdXQgZGV2aWNlICovCi0JCWFtc19pbnB1dF9leGl0KCk7CisJLyogUmVtb3ZlIGF0dHJpYnV0ZXMgKi8KKwlkZXZpY2VfcmVtb3ZlX2ZpbGUoJmFtc19pbmZvLm9mX2Rldi0+ZGV2LCAmZGV2X2F0dHJfY3VycmVudCk7CiAKLQkJLyogU2h1dCBkb3duIGltcGxlbWVudGF0aW9uICovCi0JCWFtc19pbmZvLmV4aXQoKTsKKwkvKiBTaHV0IGRvd24gaW1wbGVtZW50YXRpb24gKi8KKwlhbXNfaW5mby5leGl0KCk7CiAKLQkJLyogRmx1c2ggaW50ZXJydXB0IHdvcmtlcgotCQkgKgotCQkgKiBXZSBkbyB0aGlzIGFmdGVyIGFtc19pbmZvLmV4aXQoKSwgYmVjYXVzZSBhbiBpbnRlcnJ1cHQgbWlnaHQKLQkJICogaGF2ZSBhcnJpdmVkIGJlZm9yZSBkaXNhYmxpbmcgdGhlbS4KLQkJICovCi0JCWZsdXNoX3NjaGVkdWxlZF93b3JrKCk7CisJLyogRmx1c2ggaW50ZXJydXB0IHdvcmtlcgorCSAqCisJICogV2UgZG8gdGhpcyBhZnRlciBhbXNfaW5mby5leGl0KCksIGJlY2F1c2UgYW4gaW50ZXJydXB0IG1pZ2h0CisJICogaGF2ZSBhcnJpdmVkIGJlZm9yZSBkaXNhYmxpbmcgdGhlbS4KKwkgKi8KKwlmbHVzaF9zY2hlZHVsZWRfd29yaygpOwogCi0JCS8qIFJlbW92ZSBhdHRyaWJ1dGVzICovCi0JCWRldmljZV9yZW1vdmVfZmlsZSgmYW1zX2luZm8ub2ZfZGV2LT5kZXYsICZkZXZfYXR0cl9jdXJyZW50KTsKKwkvKiBSZW1vdmUgZGV2aWNlICovCisJb2ZfZGV2aWNlX3VucmVnaXN0ZXIoYW1zX2luZm8ub2ZfZGV2KTsKIAotCQkvKiBSZW1vdmUgZGV2aWNlICovCi0JCW9mX2RldmljZV91bnJlZ2lzdGVyKGFtc19pbmZvLm9mX2Rldik7Ci0KLQkJLyogUmVtb3ZlIGhhbmRsZXIgKi8KLQkJcG1mX3VucmVnaXN0ZXJfaXJxX2NsaWVudCgmYW1zX3Nob2NrX2NsaWVudCk7Ci0JCXBtZl91bnJlZ2lzdGVyX2lycV9jbGllbnQoJmFtc19mcmVlZmFsbF9jbGllbnQpOwotCX0KLQotCW11dGV4X3VubG9jaygmYW1zX2luZm8ubG9jayk7CisJLyogUmVtb3ZlIGhhbmRsZXIgKi8KKwlwbWZfdW5yZWdpc3Rlcl9pcnFfY2xpZW50KCZhbXNfc2hvY2tfY2xpZW50KTsKKwlwbWZfdW5yZWdpc3Rlcl9pcnFfY2xpZW50KCZhbXNfZnJlZWZhbGxfY2xpZW50KTsKIH0KIAogTU9EVUxFX0FVVEhPUigiU3RlbGlhbiBQb3AsIE1pY2hhZWwgSGFuc2VsbWFubiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9hbXMvYW1zLWkyYy5jIGIvZHJpdmVycy9od21vbi9hbXMvYW1zLWkyYy5jCmluZGV4IDk1Nzc2MDUzLi4yY2JmOGE2NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi9hbXMvYW1zLWkyYy5jCisrKyBiL2RyaXZlcnMvaHdtb24vYW1zL2Ftcy1pMmMuYwpAQCAtNjAsMjYgKzYwLDM0IEBACiAJQU1TX0NNRF9TVEFSVCwKIH07CiAKLXN0YXRpYyBpbnQgYW1zX2kyY19hdHRhY2goc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyKTsKLXN0YXRpYyBpbnQgYW1zX2kyY19kZXRhY2goc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyKTsKK3N0YXRpYyBpbnQgYW1zX2kyY19wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAorCQkJIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCk7CitzdGF0aWMgaW50IGFtc19pMmNfcmVtb3ZlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpOworCitzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgYW1zX2lkW10gPSB7CisJeyAiYW1zIiwgMCB9LAorCXsgfQorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUoaTJjLCBhbXNfaWQpOwogCiBzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgYW1zX2kyY19kcml2ZXIgPSB7CiAJLmRyaXZlciA9IHsKIAkJLm5hbWUgICA9ICJhbXMiLAogCQkub3duZXIgID0gVEhJU19NT0RVTEUsCiAJfSwKLQkuYXR0YWNoX2FkYXB0ZXIgPSBhbXNfaTJjX2F0dGFjaCwKLQkuZGV0YWNoX2FkYXB0ZXIgPSBhbXNfaTJjX2RldGFjaCwKKwkucHJvYmUgICAgICAgICAgPSBhbXNfaTJjX3Byb2JlLAorCS5yZW1vdmUgICAgICAgICA9IGFtc19pMmNfcmVtb3ZlLAorCS5pZF90YWJsZSAgICAgICA9IGFtc19pZCwKIH07CiAKIHN0YXRpYyBzMzIgYW1zX2kyY19yZWFkKHU4IHJlZykKIHsKLQlyZXR1cm4gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKCZhbXNfaW5mby5pMmNfY2xpZW50LCByZWcpOworCXJldHVybiBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoYW1zX2luZm8uaTJjX2NsaWVudCwgcmVnKTsKIH0KIAogc3RhdGljIGludCBhbXNfaTJjX3dyaXRlKHU4IHJlZywgdTggdmFsdWUpCiB7Ci0JcmV0dXJuIGkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoJmFtc19pbmZvLmkyY19jbGllbnQsIHJlZywgdmFsdWUpOworCXJldHVybiBpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGFtc19pbmZvLmkyY19jbGllbnQsIHJlZywgdmFsdWUpOwogfQogCiBzdGF0aWMgaW50IGFtc19pMmNfY21kKGVudW0gYW1zX2kyY19jbWQgY21kKQpAQCAtMTUyLDkgKzE2MCw5IEBACiAJKnogPSBhbXNfaTJjX3JlYWQoQU1TX0RBVEFaKTsKIH0KIAotc3RhdGljIGludCBhbXNfaTJjX2F0dGFjaChzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIpCitzdGF0aWMgaW50IGFtc19pMmNfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKKwkJCSBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpCiB7Ci0JdW5zaWduZWQgbG9uZyBidXM7CiAJaW50IHZtYWosIHZtaW47CiAJaW50IHJlc3VsdDsKIApAQCAtMTYyLDE3ICsxNzAsNyBAQAogCWlmICh1bmxpa2VseShhbXNfaW5mby5oYXNfZGV2aWNlKSkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKLQlpZiAoc3RybmNtcChhZGFwdGVyLT5uYW1lLCAidW5pLW4iLCA1KSkKLQkJcmV0dXJuIC1FTk9ERVY7Ci0KLQlidXMgPSBzaW1wbGVfc3RydG91bChhZGFwdGVyLT5uYW1lICsgNiwgTlVMTCwgMTApOwotCWlmIChidXMgIT0gYW1zX2luZm8uaTJjX2J1cykKLQkJcmV0dXJuIC1FTk9ERVY7Ci0KLQlhbXNfaW5mby5pMmNfY2xpZW50LmFkZHIgPSBhbXNfaW5mby5pMmNfYWRkcmVzczsKLQlhbXNfaW5mby5pMmNfY2xpZW50LmFkYXB0ZXIgPSBhZGFwdGVyOwotCWFtc19pbmZvLmkyY19jbGllbnQuZHJpdmVyID0gJmFtc19pMmNfZHJpdmVyOwotCXN0cmNweShhbXNfaW5mby5pMmNfY2xpZW50Lm5hbWUsICJBcHBsZSBNb3Rpb24gU2Vuc29yIik7CisJYW1zX2luZm8uaTJjX2NsaWVudCA9IGNsaWVudDsKIAogCWlmIChhbXNfaTJjX2NtZChBTVNfQ01EX1JFU0VUKSkgewogCQlwcmludGsoS0VSTl9JTkZPICJhbXM6IEZhaWxlZCB0byByZXNldCB0aGUgZGV2aWNlXG4iKTsKQEAgLTIzNyw3ICsyMzUsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGFtc19pMmNfZGV0YWNoKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlcikKK3N0YXRpYyBpbnQgYW1zX2kyY19yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKIHsKIAlpZiAoYW1zX2luZm8uaGFzX2RldmljZSkgewogCQkvKiBEaXNhYmxlIGludGVycnVwdHMgKi8KQEAgLTI2MSwxMSArMjU5LDcgQEAKIAogaW50IF9faW5pdCBhbXNfaTJjX2luaXQoc3RydWN0IGRldmljZV9ub2RlICpucCkKIHsKLQljaGFyICp0bXBfYnVzOwogCWludCByZXN1bHQ7Ci0JY29uc3QgdTMyICpwcm9wOwotCi0JbXV0ZXhfbG9jaygmYW1zX2luZm8ubG9jayk7CiAKIAkvKiBTZXQgaW1wbGVtZW50YXRpb24gc3R1ZmYgKi8KIAlhbXNfaW5mby5vZl9ub2RlID0gbnA7CkBAIC0yNzUsMjUgKzI2OSw3IEBACiAJYW1zX2luZm8uY2xlYXJfaXJxID0gYW1zX2kyY19jbGVhcl9pcnE7CiAJYW1zX2luZm8uYnVzdHlwZSA9IEJVU19JMkM7CiAKLQkvKiBsb29rIGZvciBidXMgZWl0aGVyIHVzaW5nICJyZWciIG9yIGJ5IHBhdGggKi8KLQlwcm9wID0gb2ZfZ2V0X3Byb3BlcnR5KGFtc19pbmZvLm9mX25vZGUsICJyZWciLCBOVUxMKTsKLQlpZiAoIXByb3ApIHsKLQkJcmVzdWx0ID0gLUVOT0RFVjsKLQotCQlnb3RvIGV4aXQ7Ci0JfQotCi0JdG1wX2J1cyA9IHN0cnN0cihhbXNfaW5mby5vZl9ub2RlLT5mdWxsX25hbWUsICIvaTJjLWJ1c0AiKTsKLQlpZiAodG1wX2J1cykKLQkJYW1zX2luZm8uaTJjX2J1cyA9ICoodG1wX2J1cyArIDkpIC0gJzAnOwotCWVsc2UKLQkJYW1zX2luZm8uaTJjX2J1cyA9ICgoKnByb3ApID4+IDgpICYgMHgwZjsKLQlhbXNfaW5mby5pMmNfYWRkcmVzcyA9ICgoKnByb3ApICYgMHhmZikgPj4gMTsKLQogCXJlc3VsdCA9IGkyY19hZGRfZHJpdmVyKCZhbXNfaTJjX2RyaXZlcik7CiAKLWV4aXQ6Ci0JbXV0ZXhfdW5sb2NrKCZhbXNfaW5mby5sb2NrKTsKLQogCXJldHVybiByZXN1bHQ7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL2Ftcy9hbXMtaW5wdXQuYyBiL2RyaXZlcnMvaHdtb24vYW1zL2Ftcy1pbnB1dC5jCmluZGV4IDdiODFlMGMyLi44YTcxMjM5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL2Ftcy9hbXMtaW5wdXQuYworKysgYi9kcml2ZXJzL2h3bW9uL2Ftcy9hbXMtaW5wdXQuYwpAQCAtMjAsMTMgKzIwLDE1IEBACiAjaW5jbHVkZSAiYW1zLmgiCiAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgam95c3RpY2s7Ci1tb2R1bGVfcGFyYW0oam95c3RpY2ssIGJvb2wsIDA2NDQpOworbW9kdWxlX3BhcmFtKGpveXN0aWNrLCBib29sLCBTX0lSVUdPKTsKIE1PRFVMRV9QQVJNX0RFU0Moam95c3RpY2ssICJFbmFibGUgdGhlIGlucHV0IGNsYXNzIGRldmljZSBvbiBtb2R1bGUgbG9hZCIpOwogCiBzdGF0aWMgdW5zaWduZWQgaW50IGludmVydDsKLW1vZHVsZV9wYXJhbShpbnZlcnQsIGJvb2wsIDA2NDQpOworbW9kdWxlX3BhcmFtKGludmVydCwgYm9vbCwgU19JV1VTUiB8IFNfSVJVR08pOwogTU9EVUxFX1BBUk1fREVTQyhpbnZlcnQsICJJbnZlcnQgaW5wdXQgZGF0YSBvbiBYIGFuZCBZIGF4aXMiKTsKIAorc3RhdGljIERFRklORV9NVVRFWChhbXNfaW5wdXRfbXV0ZXgpOworCiBzdGF0aWMgdm9pZCBhbXNfaWRldl9wb2xsKHN0cnVjdCBpbnB1dF9wb2xsZWRfZGV2ICpkZXYpCiB7CiAJc3RydWN0IGlucHV0X2RldiAqaWRldiA9IGRldi0+aW5wdXQ7CkBAIC01MCwxMyArNTIsMTEgQEAKIH0KIAogLyogQ2FsbCB3aXRoIGFtc19pbmZvLmxvY2sgaGVsZCEgKi8KLXN0YXRpYyB2b2lkIGFtc19pbnB1dF9lbmFibGUodm9pZCkKK3N0YXRpYyBpbnQgYW1zX2lucHV0X2VuYWJsZSh2b2lkKQogewogCXN0cnVjdCBpbnB1dF9kZXYgKmlucHV0OwogCXM4IHgsIHksIHo7Ci0KLQlpZiAoYW1zX2luZm8uaWRldikKLQkJcmV0dXJuOworCWludCBlcnJvcjsKIAogCWFtc19zZW5zb3JzKCZ4LCAmeSwgJnopOwogCWFtc19pbmZvLnhjYWxpYiA9IHg7CkBAIC02NSw3ICs2NSw3IEBACiAKIAlhbXNfaW5mby5pZGV2ID0gaW5wdXRfYWxsb2NhdGVfcG9sbGVkX2RldmljZSgpOwogCWlmICghYW1zX2luZm8uaWRldikKLQkJcmV0dXJuOworCQlyZXR1cm4gLUVOT01FTTsKIAogCWFtc19pbmZvLmlkZXYtPnBvbGwgPSBhbXNfaWRldl9wb2xsOwogCWFtc19pbmZvLmlkZXYtPnBvbGxfaW50ZXJ2YWwgPSAyNTsKQEAgLTg0LDE0ICs4NCwxOCBAQAogCXNldF9iaXQoRVZfS0VZLCBpbnB1dC0+ZXZiaXQpOwogCXNldF9iaXQoQlROX1RPVUNILCBpbnB1dC0+a2V5Yml0KTsKIAotCWlmIChpbnB1dF9yZWdpc3Rlcl9wb2xsZWRfZGV2aWNlKGFtc19pbmZvLmlkZXYpKSB7CisJZXJyb3IgPSBpbnB1dF9yZWdpc3Rlcl9wb2xsZWRfZGV2aWNlKGFtc19pbmZvLmlkZXYpOworCWlmIChlcnJvcikgewogCQlpbnB1dF9mcmVlX3BvbGxlZF9kZXZpY2UoYW1zX2luZm8uaWRldik7CiAJCWFtc19pbmZvLmlkZXYgPSBOVUxMOwotCQlyZXR1cm47CisJCXJldHVybiBlcnJvcjsKIAl9CisKKwlqb3lzdGljayA9IDE7CisKKwlyZXR1cm4gMDsKIH0KIAotLyogQ2FsbCB3aXRoIGFtc19pbmZvLmxvY2sgaGVsZCEgKi8KIHN0YXRpYyB2b2lkIGFtc19pbnB1dF9kaXNhYmxlKHZvaWQpCiB7CiAJaWYgKGFtc19pbmZvLmlkZXYpIHsKQEAgLTk5LDYgKzEwMyw4IEBACiAJCWlucHV0X2ZyZWVfcG9sbGVkX2RldmljZShhbXNfaW5mby5pZGV2KTsKIAkJYW1zX2luZm8uaWRldiA9IE5VTEw7CiAJfQorCisJam95c3RpY2sgPSAwOwogfQogCiBzdGF0aWMgc3NpemVfdCBhbXNfaW5wdXRfc2hvd19qb3lzdGljayhzdHJ1Y3QgZGV2aWNlICpkZXYsCkBAIC0xMTAsMzkgKzExNiw0MiBAQAogc3RhdGljIHNzaXplX3QgYW1zX2lucHV0X3N0b3JlX2pveXN0aWNrKHN0cnVjdCBkZXZpY2UgKmRldiwKIAlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCiB7Ci0JaWYgKHNzY2FuZihidWYsICIlZFxuIiwgJmpveXN0aWNrKSAhPSAxKQorCXVuc2lnbmVkIGxvbmcgZW5hYmxlOworCWludCBlcnJvciA9IDA7CisKKwlpZiAoc3RyaWN0X3N0cnRvdWwoYnVmLCAwLCAmZW5hYmxlKSB8fCBlbmFibGUgPiAxKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCW11dGV4X2xvY2soJmFtc19pbmZvLmxvY2spOworCW11dGV4X2xvY2soJmFtc19pbnB1dF9tdXRleCk7CiAKLQlpZiAoam95c3RpY2spCi0JCWFtc19pbnB1dF9lbmFibGUoKTsKLQllbHNlCi0JCWFtc19pbnB1dF9kaXNhYmxlKCk7CisJaWYgKGVuYWJsZSAhPSBqb3lzdGljaykgeworCQlpZiAoZW5hYmxlKQorCQkJZXJyb3IgPSBhbXNfaW5wdXRfZW5hYmxlKCk7CisJCWVsc2UKKwkJCWFtc19pbnB1dF9kaXNhYmxlKCk7CisJfQogCi0JbXV0ZXhfdW5sb2NrKCZhbXNfaW5mby5sb2NrKTsKKwltdXRleF91bmxvY2soJmFtc19pbnB1dF9tdXRleCk7CiAKLQlyZXR1cm4gY291bnQ7CisJcmV0dXJuIGVycm9yID8gZXJyb3IgOiBjb3VudDsKIH0KIAogc3RhdGljIERFVklDRV9BVFRSKGpveXN0aWNrLCBTX0lSVUdPIHwgU19JV1VTUiwKIAlhbXNfaW5wdXRfc2hvd19qb3lzdGljaywgYW1zX2lucHV0X3N0b3JlX2pveXN0aWNrKTsKIAotLyogQ2FsbCB3aXRoIGFtc19pbmZvLmxvY2sgaGVsZCEgKi8KIGludCBhbXNfaW5wdXRfaW5pdCh2b2lkKQogewotCWludCByZXN1bHQ7Ci0KLQlyZXN1bHQgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoJmFtc19pbmZvLm9mX2Rldi0+ZGV2LCAmZGV2X2F0dHJfam95c3RpY2spOwotCi0JaWYgKCFyZXN1bHQgJiYgam95c3RpY2spCisJaWYgKGpveXN0aWNrKQogCQlhbXNfaW5wdXRfZW5hYmxlKCk7Ci0JcmV0dXJuIHJlc3VsdDsKKworCXJldHVybiBkZXZpY2VfY3JlYXRlX2ZpbGUoJmFtc19pbmZvLm9mX2Rldi0+ZGV2LCAmZGV2X2F0dHJfam95c3RpY2spOwogfQogCi0vKiBDYWxsIHdpdGggYW1zX2luZm8ubG9jayBoZWxkISAqLwogdm9pZCBhbXNfaW5wdXRfZXhpdCh2b2lkKQogewotCWFtc19pbnB1dF9kaXNhYmxlKCk7CiAJZGV2aWNlX3JlbW92ZV9maWxlKCZhbXNfaW5mby5vZl9kZXYtPmRldiwgJmRldl9hdHRyX2pveXN0aWNrKTsKKworCW11dGV4X2xvY2soJmFtc19pbnB1dF9tdXRleCk7CisJYW1zX2lucHV0X2Rpc2FibGUoKTsKKwltdXRleF91bmxvY2soJmFtc19pbnB1dF9tdXRleCk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL2Ftcy9hbXMtcG11LmMgYi9kcml2ZXJzL2h3bW9uL2Ftcy9hbXMtcG11LmMKaW5kZXggOTQ2M2U5Ny4uZmIxOGIzZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi9hbXMvYW1zLXBtdS5jCisrKyBiL2RyaXZlcnMvaHdtb24vYW1zL2Ftcy1wbXUuYwpAQCAtMTQ5LDggKzE0OSw2IEBACiAJY29uc3QgdTMyICpwcm9wOwogCWludCByZXN1bHQ7CiAKLQltdXRleF9sb2NrKCZhbXNfaW5mby5sb2NrKTsKLQogCS8qIFNldCBpbXBsZW1lbnRhdGlvbiBzdHVmZiAqLwogCWFtc19pbmZvLm9mX25vZGUgPSBucDsKIAlhbXNfaW5mby5leGl0ID0gYW1zX3BtdV9leGl0OwpAQCAtMTYxLDEwICsxNTksOSBAQAogCiAJLyogR2V0IFBNVSBjb21tYW5kLCBzaG91bGQgYmUgMHg0ZSwgYnV0IHdlIGNhbiBuZXZlciBrbm93ICovCiAJcHJvcCA9IG9mX2dldF9wcm9wZXJ0eShhbXNfaW5mby5vZl9ub2RlLCAicmVnIiwgTlVMTCk7Ci0JaWYgKCFwcm9wKSB7Ci0JCXJlc3VsdCA9IC1FTk9ERVY7Ci0JCWdvdG8gZXhpdDsKLQl9CisJaWYgKCFwcm9wKQorCQlyZXR1cm4gLUVOT0RFVjsKKwogCWFtc19wbXVfY21kID0gKCgqcHJvcCkgPj4gOCkgJiAweGZmOwogCiAJLyogRGlzYWJsZSBpbnRlcnJ1cHRzICovCkBAIC0xNzUsNyArMTcyLDcgQEAKIAogCXJlc3VsdCA9IGFtc19zZW5zb3JfYXR0YWNoKCk7CiAJaWYgKHJlc3VsdCA8IDApCi0JCWdvdG8gZXhpdDsKKwkJcmV0dXJuIHJlc3VsdDsKIAogCS8qIFNldCBkZWZhdWx0IHZhbHVlcyAqLwogCWFtc19wbXVfc2V0X3JlZ2lzdGVyKEFNU19GRl9MT1dfTElNSVQsIDB4MTUpOwpAQCAtMTk4LDEwICsxOTUsNSBAQAogCiAJcHJpbnRrKEtFUk5fSU5GTyAiYW1zOiBGb3VuZCBQTVUgYmFzZWQgbW90aW9uIHNlbnNvclxuIik7CiAKLQlyZXN1bHQgPSAwOwotCi1leGl0OgotCW11dGV4X3VubG9jaygmYW1zX2luZm8ubG9jayk7Ci0KLQlyZXR1cm4gcmVzdWx0OworCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9hbXMvYW1zLmggYi9kcml2ZXJzL2h3bW9uL2Ftcy9hbXMuaAppbmRleCBhNjIyMWU1Li41ZWQzODdiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL2Ftcy9hbXMuaAorKysgYi9kcml2ZXJzL2h3bW9uL2Ftcy9hbXMuaApAQCAtNCw3ICs0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxhc20vb2ZfZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvb2ZfZGV2aWNlLmg+CiAKIGVudW0gYW1zX2lycSB7CiAJQU1TX0lSUV9GUkVFRkFMTCA9IDB4MDEsCkBAIC00Niw5ICs0Niw3IEBACiAKICNpZmRlZiBDT05GSUdfU0VOU09SU19BTVNfSTJDCiAJLyogSTJDIHByb3BlcnRpZXMgKi8KLQlpbnQgaTJjX2J1czsKLQlpbnQgaTJjX2FkZHJlc3M7Ci0Jc3RydWN0IGkyY19jbGllbnQgaTJjX2NsaWVudDsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqaTJjX2NsaWVudDsKICNlbmRpZgogCiAJLyogSm95c3RpY2sgZW11bGF0aW9uICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL2FwcGxlc21jLmMgYi9kcml2ZXJzL2h3bW9uL2FwcGxlc21jLmMKaW5kZXggYjA2YjhlMC4uYmMwMTFkYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi9hcHBsZXNtYy5jCisrKyBiL2RyaXZlcnMvaHdtb24vYXBwbGVzbWMuYwpAQCAtNDksNiArNDksOSBAQAogCiAjZGVmaW5lIEFQUExFU01DX01BWF9EQVRBX0xFTkdUSCAzMgogCisjZGVmaW5lIEFQUExFU01DX01JTl9XQUlUCTB4MDA0MAorI2RlZmluZSBBUFBMRVNNQ19NQVhfV0FJVAkweDgwMDAKKwogI2RlZmluZSBBUFBMRVNNQ19TVEFUVVNfTUFTSwkweDBmCiAjZGVmaW5lIEFQUExFU01DX1JFQURfQ01ECTB4MTAKICNkZWZpbmUgQVBQTEVTTUNfV1JJVEVfQ01ECTB4MTEKQEAgLTU3LDggKzYwLDggQEAKIAogI2RlZmluZSBLRVlfQ09VTlRfS0VZCQkiI0tFWSIgLyogci1vIHVpMzIgKi8KIAotI2RlZmluZSBMSUdIVF9TRU5TT1JfTEVGVF9LRVkJIkFMVjAiIC8qIHItbyB7YWx2ICg2IGJ5dGVzKSAqLwotI2RlZmluZSBMSUdIVF9TRU5TT1JfUklHSFRfS0VZCSJBTFYxIiAvKiByLW8ge2FsdiAoNiBieXRlcykgKi8KKyNkZWZpbmUgTElHSFRfU0VOU09SX0xFRlRfS0VZCSJBTFYwIiAvKiByLW8ge2FsdiAoNi0xMCBieXRlcykgKi8KKyNkZWZpbmUgTElHSFRfU0VOU09SX1JJR0hUX0tFWQkiQUxWMSIgLyogci1vIHthbHYgKDYtMTAgYnl0ZXMpICovCiAjZGVmaW5lIEJBQ0tMSUdIVF9LRVkJCSJMS1NCIiAvKiB3LW8ge2xrYiAoMiBieXRlcykgKi8KIAogI2RlZmluZSBDTEFNU0hFTExfS0VZCQkiTVNMRCIgLyogci1vIHVpOCAodW51c2VkKSAqLwpAQCAtMTA0LDYgKzEwNywxNSBAQAogLyogU2V0IDY6IE1hY2Jvb2szIHNldCAqLwogCXsgIlRCMFQiLCAiVEMwRCIsICJUQzBQIiwgIlRNMFAiLCAiVE4wUCIsICJUVEYwIiwgIlRXMFAiLCAiVGgwSCIsCiAJICAiVGgwUyIsICJUaDFIIiwgTlVMTCB9LAorLyogU2V0IDc6IE1hY2Jvb2sgQWlyICovCisJeyAiVEIwVCIsICJUQjFTIiwgIlRCMVQiLCAiVEIyUyIsICJUQjJUIiwgIlRDMEQiLCAiVEMwUCIsICJUQ0ZQIiwKKwkgICJUVEYwIiwgIlRXMFAiLCAiVGgwSCIsICJUcDBQIiwgIlRwRlAiLCAiVHMwUCIsICJUczBTIiwgTlVMTCB9LAorLyogU2V0IDg6IE1hY2Jvb2sgUHJvIDQsMSAoUGVucnluKSAqLworCXsgIlRCMFQiLCAiVEMwRCIsICJUQzBQIiwgIlRHMEQiLCAiVEcwSCIsICJUVEYwIiwgIlRXMFAiLCAiVGgwSCIsCisJICAiVGgxSCIsICJUaDJIIiwgIlRtMFAiLCAiVHMwUCIsIE5VTEwgfSwKKy8qIFNldCA5OiBNYWNib29rIFBybyAzLDEgKFNhbnRhIFJvc2EpICovCisJeyAiVEFMUCIsICJUQjBUIiwgIlRDMEQiLCAiVEMwUCIsICJURzBEIiwgIlRHMEgiLCAiVFRGMCIsICJUVzBQIiwKKwkgICJUaDBIIiwgIlRoMUgiLCAiVGgySCIsICJUbTBQIiwgIlRzMFAiLCBOVUxMIH0sCiB9OwogCiAvKiBMaXN0IG9mIGtleXMgdXNlZCB0byByZWFkL3dyaXRlIGZhbiBzcGVlZHMgKi8KQEAgLTE2MywyNSArMTc1LDI1IEBACiBzdGF0aWMgc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKmFwcGxlc21jX2xlZF93cTsKIAogLyoKLSAqIF9fd2FpdF9zdGF0dXMgLSBXYWl0IHVwIHRvIDJtcyBmb3IgdGhlIHN0YXR1cyBwb3J0IHRvIGdldCBhIGNlcnRhaW4gdmFsdWUKKyAqIF9fd2FpdF9zdGF0dXMgLSBXYWl0IHVwIHRvIDMybXMgZm9yIHRoZSBzdGF0dXMgcG9ydCB0byBnZXQgYSBjZXJ0YWluIHZhbHVlCiAgKiAobWFza2VkIHdpdGggMHgwZiksIHJldHVybmluZyB6ZXJvIGlmIHRoZSB2YWx1ZSBpcyBvYnRhaW5lZC4gIENhbGxlcnMgbXVzdAogICogaG9sZCBhcHBsZXNtY19sb2NrLgogICovCiBzdGF0aWMgaW50IF9fd2FpdF9zdGF0dXModTggdmFsKQogewotCXVuc2lnbmVkIGludCBpOworCWludCB1czsKIAogCXZhbCA9IHZhbCAmIEFQUExFU01DX1NUQVRVU19NQVNLOwogCi0JZm9yIChpID0gMDsgaSA8IDIwMDsgaSsrKSB7CisJZm9yICh1cyA9IEFQUExFU01DX01JTl9XQUlUOyB1cyA8IEFQUExFU01DX01BWF9XQUlUOyB1cyA8PD0gMSkgeworCQl1ZGVsYXkodXMpOwogCQlpZiAoKGluYihBUFBMRVNNQ19DTURfUE9SVCkgJiBBUFBMRVNNQ19TVEFUVVNfTUFTSykgPT0gdmFsKSB7CiAJCQlpZiAoZGVidWcpCiAJCQkJcHJpbnRrKEtFUk5fREVCVUcKLQkJCQkJCSJXYWl0ZWQgJWQgdXMgZm9yIHN0YXR1cyAleFxuIiwKLQkJCQkJCWkqMTAsIHZhbCk7CisJCQkJCSJXYWl0ZWQgJWQgdXMgZm9yIHN0YXR1cyAleFxuIiwKKwkJCQkJMiAqIHVzIC0gQVBQTEVTTUNfTUlOX1dBSVQsIHZhbCk7CiAJCQlyZXR1cm4gMDsKIAkJfQotCQl1ZGVsYXkoMTApOwogCX0KIAogCXByaW50ayhLRVJOX1dBUk5JTkcgImFwcGxlc21jOiB3YWl0IHN0YXR1cyBmYWlsZWQ6ICV4ICE9ICV4XG4iLApAQCAtMTkxLDYgKzIwMywyNSBAQAogfQogCiAvKgorICogc3BlY2lhbCB0cmVhdG1lbnQgb2YgY29tbWFuZCBwb3J0IC0gb24gbmV3ZXIgbWFjYm9va3MsIGl0IHNlZW1zIG5lY2Vzc2FyeQorICogdG8gcmVzZW5kIHRoZSBjb21tYW5kIGJ5dGUgYmVmb3JlIHBvbGxpbmcgdGhlIHN0YXR1cyBhZ2Fpbi4gQ2FsbGVycyBtdXN0CisgKiBob2xkIGFwcGxlc21jX2xvY2suCisgKi8KK3N0YXRpYyBpbnQgc2VuZF9jb21tYW5kKHU4IGNtZCkKK3sKKwlpbnQgdXM7CisJZm9yICh1cyA9IEFQUExFU01DX01JTl9XQUlUOyB1cyA8IEFQUExFU01DX01BWF9XQUlUOyB1cyA8PD0gMSkgeworCQlvdXRiKGNtZCwgQVBQTEVTTUNfQ01EX1BPUlQpOworCQl1ZGVsYXkodXMpOworCQlpZiAoKGluYihBUFBMRVNNQ19DTURfUE9SVCkgJiBBUFBMRVNNQ19TVEFUVVNfTUFTSykgPT0gMHgwYykKKwkJCXJldHVybiAwOworCX0KKwlwcmludGsoS0VSTl9XQVJOSU5HICJhcHBsZXNtYzogY29tbWFuZCBmYWlsZWQ6ICV4IC0+ICV4XG4iLAorCQljbWQsIGluYihBUFBMRVNNQ19DTURfUE9SVCkpOworCXJldHVybiAtRUlPOworfQorCisvKgogICogYXBwbGVzbWNfcmVhZF9rZXkgLSByZWFkcyBsZW4gYnl0ZXMgZnJvbSBhIGdpdmVuIGtleSwgYW5kIHB1dCB0aGVtIGluIGJ1ZmZlci4KICAqIFJldHVybnMgemVybyBvbiBzdWNjZXNzIG9yIGEgbmVnYXRpdmUgZXJyb3Igb24gZmFpbHVyZS4gQ2FsbGVycyBtdXN0CiAgKiBob2xkIGFwcGxlc21jX2xvY2suCkBAIC0yMDUsOCArMjM2LDcgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0Jb3V0YihBUFBMRVNNQ19SRUFEX0NNRCwgQVBQTEVTTUNfQ01EX1BPUlQpOwotCWlmIChfX3dhaXRfc3RhdHVzKDB4MGMpKQorCWlmIChzZW5kX2NvbW1hbmQoQVBQTEVTTUNfUkVBRF9DTUQpKQogCQlyZXR1cm4gLUVJTzsKIAogCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKQEAgLTI0OSw4ICsyNzksNyBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQlvdXRiKEFQUExFU01DX1dSSVRFX0NNRCwgQVBQTEVTTUNfQ01EX1BPUlQpOwotCWlmIChfX3dhaXRfc3RhdHVzKDB4MGMpKQorCWlmIChzZW5kX2NvbW1hbmQoQVBQTEVTTUNfV1JJVEVfQ01EKSkKIAkJcmV0dXJuIC1FSU87CiAKIAlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7CkBAIC0yODQsOCArMzEzLDcgQEAKIAlyZWFka2V5WzJdID0gaW5kZXggPj4gODsKIAlyZWFka2V5WzNdID0gaW5kZXg7CiAKLQlvdXRiKEFQUExFU01DX0dFVF9LRVlfQllfSU5ERVhfQ01ELCBBUFBMRVNNQ19DTURfUE9SVCk7Ci0JaWYgKF9fd2FpdF9zdGF0dXMoMHgwYykpCisJaWYgKHNlbmRfY29tbWFuZChBUFBMRVNNQ19HRVRfS0VZX0JZX0lOREVYX0NNRCkpCiAJCXJldHVybiAtRUlPOwogCiAJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgewpAQCAtMzE1LDggKzM0Myw3IEBACiB7CiAJaW50IGk7CiAKLQlvdXRiKEFQUExFU01DX0dFVF9LRVlfVFlQRV9DTUQsIEFQUExFU01DX0NNRF9QT1JUKTsKLQlpZiAoX193YWl0X3N0YXR1cygweDBjKSkKKwlpZiAoc2VuZF9jb21tYW5kKEFQUExFU01DX0dFVF9LRVlfVFlQRV9DTUQpKQogCQlyZXR1cm4gLUVJTzsKIAogCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKQEAgLTMyNSw3ICszNTIsNyBAQAogCQkJcmV0dXJuIC1FSU87CiAJfQogCi0Jb3V0Yig1LCBBUFBMRVNNQ19EQVRBX1BPUlQpOworCW91dGIoNiwgQVBQTEVTTUNfREFUQV9QT1JUKTsKIAogCWZvciAoaSA9IDA7IGkgPCA2OyBpKyspIHsKIAkJaWYgKF9fd2FpdF9zdGF0dXMoMHgwNSkpCkBAIC01MjcsMTcgKzU1NCwyNyBAQAogc3RhdGljIHNzaXplX3QgYXBwbGVzbWNfbGlnaHRfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCiAJCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKnN5c2ZzYnVmKQogeworCXN0YXRpYyBpbnQgZGF0YV9sZW5ndGg7CiAJaW50IHJldDsKIAl1OCBsZWZ0ID0gMCwgcmlnaHQgPSAwOwotCXU4IGJ1ZmZlcls2XTsKKwl1OCBidWZmZXJbMTBdLCBxdWVyeVs2XTsKIAogCW11dGV4X2xvY2soJmFwcGxlc21jX2xvY2spOwogCi0JcmV0ID0gYXBwbGVzbWNfcmVhZF9rZXkoTElHSFRfU0VOU09SX0xFRlRfS0VZLCBidWZmZXIsIDYpOworCWlmICghZGF0YV9sZW5ndGgpIHsKKwkJcmV0ID0gYXBwbGVzbWNfZ2V0X2tleV90eXBlKExJR0hUX1NFTlNPUl9MRUZUX0tFWSwgcXVlcnkpOworCQlpZiAocmV0KQorCQkJZ290byBvdXQ7CisJCWRhdGFfbGVuZ3RoID0gY2xhbXBfdmFsKHF1ZXJ5WzBdLCAwLCAxMCk7CisJCXByaW50ayhLRVJOX0lORk8gImFwcGxlc21jOiBsaWdodCBzZW5zb3IgZGF0YSBsZW5ndGggc2V0IHRvICIKKwkJCSIlZFxuIiwgZGF0YV9sZW5ndGgpOworCX0KKworCXJldCA9IGFwcGxlc21jX3JlYWRfa2V5KExJR0hUX1NFTlNPUl9MRUZUX0tFWSwgYnVmZmVyLCBkYXRhX2xlbmd0aCk7CiAJbGVmdCA9IGJ1ZmZlclsyXTsKIAlpZiAocmV0KQogCQlnb3RvIG91dDsKLQlyZXQgPSBhcHBsZXNtY19yZWFkX2tleShMSUdIVF9TRU5TT1JfUklHSFRfS0VZLCBidWZmZXIsIDYpOworCXJldCA9IGFwcGxlc21jX3JlYWRfa2V5KExJR0hUX1NFTlNPUl9SSUdIVF9LRVksIGJ1ZmZlciwgZGF0YV9sZW5ndGgpOwogCXJpZ2h0ID0gYnVmZmVyWzJdOwogCiBvdXQ6CkBAIC0xMjMzLDM5ICsxMjcwLDU3IEBACiAJeyAuYWNjZWxlcm9tZXRlciA9IDAsIC5saWdodCA9IDAsIC50ZW1wZXJhdHVyZV9zZXQgPSA1IH0sCiAvKiBNYWNCb29rMzogYWNjZWxlcm9tZXRlciBhbmQgdGVtcGVyYXR1cmUgc2V0IDYgKi8KIAl7IC5hY2NlbGVyb21ldGVyID0gMSwgLmxpZ2h0ID0gMCwgLnRlbXBlcmF0dXJlX3NldCA9IDYgfSwKKy8qIE1hY0Jvb2sgQWlyOiBhY2NlbGVyb21ldGVyLCBiYWNrbGlnaHQgYW5kIHRlbXBlcmF0dXJlIHNldCA3ICovCisJeyAuYWNjZWxlcm9tZXRlciA9IDEsIC5saWdodCA9IDEsIC50ZW1wZXJhdHVyZV9zZXQgPSA3IH0sCisvKiBNYWNCb29rIFBybyA0OiBhY2NlbGVyb21ldGVyLCBiYWNrbGlnaHQgYW5kIHRlbXBlcmF0dXJlIHNldCA4ICovCisJeyAuYWNjZWxlcm9tZXRlciA9IDEsIC5saWdodCA9IDEsIC50ZW1wZXJhdHVyZV9zZXQgPSA4IH0sCisvKiBNYWNCb29rIFBybyAzOiBhY2NlbGVyb21ldGVyLCBiYWNrbGlnaHQgYW5kIHRlbXBlcmF0dXJlIHNldCA5ICovCisJeyAuYWNjZWxlcm9tZXRlciA9IDEsIC5saWdodCA9IDEsIC50ZW1wZXJhdHVyZV9zZXQgPSA5IH0sCiB9OwogCiAvKiBOb3RlIHRoYXQgRE1JX01BVENIKC4uLiwiTWFjQm9vayIpIHdpbGwgbWF0Y2ggIk1hY0Jvb2tQcm8xLDEiLgogICogU28gd2UgbmVlZCB0byBwdXQgIkFwcGxlIE1hY0Jvb2sgUHJvIiBiZWZvcmUgIkFwcGxlIE1hY0Jvb2siLiAqLwogc3RhdGljIF9faW5pdGRhdGEgc3RydWN0IGRtaV9zeXN0ZW1faWQgYXBwbGVzbWNfd2hpdGVsaXN0W10gPSB7CisJeyBhcHBsZXNtY19kbWlfbWF0Y2gsICJBcHBsZSBNYWNCb29rIEFpciIsIHsKKwkgIERNSV9NQVRDSChETUlfQk9BUkRfVkVORE9SLCAiQXBwbGUiKSwKKwkgIERNSV9NQVRDSChETUlfUFJPRFVDVF9OQU1FLCAiTWFjQm9va0FpciIpIH0sCisJCSZhcHBsZXNtY19kbWlfZGF0YVs3XX0sCisJeyBhcHBsZXNtY19kbWlfbWF0Y2gsICJBcHBsZSBNYWNCb29rIFBybyA0IiwgeworCSAgRE1JX01BVENIKERNSV9CT0FSRF9WRU5ET1IsICJBcHBsZSIpLAorCSAgRE1JX01BVENIKERNSV9QUk9EVUNUX05BTUUsICJNYWNCb29rUHJvNCIpIH0sCisJCSZhcHBsZXNtY19kbWlfZGF0YVs4XX0sCisJeyBhcHBsZXNtY19kbWlfbWF0Y2gsICJBcHBsZSBNYWNCb29rIFBybyAzIiwgeworCSAgRE1JX01BVENIKERNSV9CT0FSRF9WRU5ET1IsICJBcHBsZSIpLAorCSAgRE1JX01BVENIKERNSV9QUk9EVUNUX05BTUUsICJNYWNCb29rUHJvMyIpIH0sCisJCSZhcHBsZXNtY19kbWlfZGF0YVs5XX0sCiAJeyBhcHBsZXNtY19kbWlfbWF0Y2gsICJBcHBsZSBNYWNCb29rIFBybyIsIHsKIAkgIERNSV9NQVRDSChETUlfQk9BUkRfVkVORE9SLCJBcHBsZSIpLAogCSAgRE1JX01BVENIKERNSV9QUk9EVUNUX05BTUUsIk1hY0Jvb2tQcm8iKSB9LAotCQkodm9pZCopJmFwcGxlc21jX2RtaV9kYXRhWzBdfSwKKwkJJmFwcGxlc21jX2RtaV9kYXRhWzBdfSwKIAl7IGFwcGxlc21jX2RtaV9tYXRjaCwgIkFwcGxlIE1hY0Jvb2sgKHYyKSIsIHsKIAkgIERNSV9NQVRDSChETUlfQk9BUkRfVkVORE9SLCJBcHBsZSIpLAogCSAgRE1JX01BVENIKERNSV9QUk9EVUNUX05BTUUsIk1hY0Jvb2syIikgfSwKLQkJKHZvaWQqKSZhcHBsZXNtY19kbWlfZGF0YVsxXX0sCisJCSZhcHBsZXNtY19kbWlfZGF0YVsxXX0sCiAJeyBhcHBsZXNtY19kbWlfbWF0Y2gsICJBcHBsZSBNYWNCb29rICh2MykiLCB7CiAJICBETUlfTUFUQ0goRE1JX0JPQVJEX1ZFTkRPUiwiQXBwbGUiKSwKIAkgIERNSV9NQVRDSChETUlfUFJPRFVDVF9OQU1FLCJNYWNCb29rMyIpIH0sCi0JCSh2b2lkKikmYXBwbGVzbWNfZG1pX2RhdGFbNl19LAorCQkmYXBwbGVzbWNfZG1pX2RhdGFbNl19LAogCXsgYXBwbGVzbWNfZG1pX21hdGNoLCAiQXBwbGUgTWFjQm9vayIsIHsKIAkgIERNSV9NQVRDSChETUlfQk9BUkRfVkVORE9SLCJBcHBsZSIpLAogCSAgRE1JX01BVENIKERNSV9QUk9EVUNUX05BTUUsIk1hY0Jvb2siKSB9LAotCQkodm9pZCopJmFwcGxlc21jX2RtaV9kYXRhWzJdfSwKKwkJJmFwcGxlc21jX2RtaV9kYXRhWzJdfSwKIAl7IGFwcGxlc21jX2RtaV9tYXRjaCwgIkFwcGxlIE1hY21pbmkiLCB7CiAJICBETUlfTUFUQ0goRE1JX0JPQVJEX1ZFTkRPUiwiQXBwbGUiKSwKIAkgIERNSV9NQVRDSChETUlfUFJPRFVDVF9OQU1FLCJNYWNtaW5pIikgfSwKLQkJKHZvaWQqKSZhcHBsZXNtY19kbWlfZGF0YVszXX0sCisJCSZhcHBsZXNtY19kbWlfZGF0YVszXX0sCiAJeyBhcHBsZXNtY19kbWlfbWF0Y2gsICJBcHBsZSBNYWNQcm8yIiwgewogCSAgRE1JX01BVENIKERNSV9CT0FSRF9WRU5ET1IsIkFwcGxlIiksCiAJICBETUlfTUFUQ0goRE1JX1BST0RVQ1RfTkFNRSwiTWFjUHJvMiIpIH0sCi0JCSh2b2lkKikmYXBwbGVzbWNfZG1pX2RhdGFbNF19LAorCQkmYXBwbGVzbWNfZG1pX2RhdGFbNF19LAogCXsgYXBwbGVzbWNfZG1pX21hdGNoLCAiQXBwbGUgaU1hYyIsIHsKIAkgIERNSV9NQVRDSChETUlfQk9BUkRfVkVORE9SLCJBcHBsZSIpLAogCSAgRE1JX01BVENIKERNSV9QUk9EVUNUX05BTUUsImlNYWMiKSB9LAotCQkodm9pZCopJmFwcGxlc21jX2RtaV9kYXRhWzVdfSwKKwkJJmFwcGxlc21jX2RtaV9kYXRhWzVdfSwKIAl7IC5pZGVudCA9IE5VTEwgfQogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9kbWUxNzM3LmMgYi9kcml2ZXJzL2h3bW9uL2RtZTE3MzcuYwppbmRleCBjZGI4MzExLi4yN2E1ZDM5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL2RtZTE3MzcuYworKysgYi9kcml2ZXJzL2h3bW9uL2RtZTE3MzcuYwpAQCAtMTc1LDExICsxNzUsMTEgQEAKICAqIERhdGEgc3RydWN0dXJlcyBhbmQgbWFuaXB1bGF0aW9uIHRoZXJlb2YKICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCi0vKiBGb3IgSVNBIGNoaXBzLCB3ZSBhYnVzZSB0aGUgaTJjX2NsaWVudCBhZGRyIGFuZCBuYW1lIGZpZWxkcy4gV2UgYWxzbyB1c2UKLSAgIHRoZSBkcml2ZXIgZmllbGQgdG8gZGlmZmVyZW50aWF0ZSBiZXR3ZWVuIEkyQyBhbmQgSVNBIGNoaXBzLiAqLwogc3RydWN0IGRtZTE3MzdfZGF0YSB7Ci0Jc3RydWN0IGkyY19jbGllbnQgY2xpZW50OworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQ7CS8qIGZvciBJMkMgZGV2aWNlcyBvbmx5ICovCiAJc3RydWN0IGRldmljZSAqaHdtb25fZGV2OworCWNvbnN0IGNoYXIgKm5hbWU7CisJdW5zaWduZWQgaW50IGFkZHI7CQkvKiBmb3IgSVNBIGRldmljZXMgb25seSAqLwogCiAJc3RydWN0IG11dGV4IHVwZGF0ZV9sb2NrOwogCWludCB2YWxpZDsJCQkvKiAhPTAgaWYgZm9sbG93aW5nIGZpZWxkcyBhcmUgdmFsaWQgKi8KQEAgLTUxMiwxMSArNTEyLDEyIEBACiAgKiBiZWZvcmUgY2FsbGluZyBkbWUxNzM3X3JlYWQgb3IgZG1lMTczN193cml0ZS4KICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCi1zdGF0aWMgdTggZG1lMTczN19yZWFkKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHU4IHJlZykKK3N0YXRpYyB1OCBkbWUxNzM3X3JlYWQoY29uc3Qgc3RydWN0IGRtZTE3MzdfZGF0YSAqZGF0YSwgdTggcmVnKQogeworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSBkYXRhLT5jbGllbnQ7CiAJczMyIHZhbDsKIAotCWlmIChjbGllbnQtPmRyaXZlcikgeyAvKiBJMkMgZGV2aWNlICovCisJaWYgKGNsaWVudCkgeyAvKiBJMkMgZGV2aWNlICovCiAJCXZhbCA9IGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsIHJlZyk7CiAKIAkJaWYgKHZhbCA8IDApIHsKQEAgLTUyNSwxOCArNTI2LDE5IEBACiAJCQkJICJtYWludGFpbmVyLlxuIiwgcmVnKTsKIAkJfQogCX0gZWxzZSB7IC8qIElTQSBkZXZpY2UgKi8KLQkJb3V0YihyZWcsIGNsaWVudC0+YWRkcik7Ci0JCXZhbCA9IGluYihjbGllbnQtPmFkZHIgKyAxKTsKKwkJb3V0YihyZWcsIGRhdGEtPmFkZHIpOworCQl2YWwgPSBpbmIoZGF0YS0+YWRkciArIDEpOwogCX0KIAogCXJldHVybiB2YWw7CiB9CiAKLXN0YXRpYyBzMzIgZG1lMTczN193cml0ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1OCByZWcsIHU4IHZhbCkKK3N0YXRpYyBzMzIgZG1lMTczN193cml0ZShjb25zdCBzdHJ1Y3QgZG1lMTczN19kYXRhICpkYXRhLCB1OCByZWcsIHU4IHZhbCkKIHsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gZGF0YS0+Y2xpZW50OwogCXMzMiByZXMgPSAwOwogCi0JaWYgKGNsaWVudC0+ZHJpdmVyKSB7IC8qIEkyQyBkZXZpY2UgKi8KKwlpZiAoY2xpZW50KSB7IC8qIEkyQyBkZXZpY2UgKi8KIAkJcmVzID0gaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsIHJlZywgdmFsKTsKIAogCQlpZiAocmVzIDwgMCkgewpAQCAtNTQ1LDggKzU0Nyw4IEBACiAJCQkJICJtYWludGFpbmVyLlxuIiwgcmVnKTsKIAkJfQogCX0gZWxzZSB7IC8qIElTQSBkZXZpY2UgKi8KLQkJb3V0YihyZWcsIGNsaWVudC0+YWRkcik7Ci0JCW91dGIodmFsLCBjbGllbnQtPmFkZHIgKyAxKTsKKwkJb3V0YihyZWcsIGRhdGEtPmFkZHIpOworCQlvdXRiKHZhbCwgZGF0YS0+YWRkciArIDEpOwogCX0KIAogCXJldHVybiByZXM7CkBAIC01NTUsNyArNTU3LDYgQEAKIHN0YXRpYyBzdHJ1Y3QgZG1lMTczN19kYXRhICpkbWUxNzM3X3VwZGF0ZV9kZXZpY2Uoc3RydWN0IGRldmljZSAqZGV2KQogewogCXN0cnVjdCBkbWUxNzM3X2RhdGEgKmRhdGEgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKLQlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gJmRhdGEtPmNsaWVudDsKIAlpbnQgaXg7CiAJdTggbHNiWzVdOwogCkBAIC01NjMsNyArNTY0LDcgQEAKIAogCS8qIEVuYWJsZSBhIFZiYXQgbW9uaXRvcmluZyBjeWNsZSBldmVyeSAxMCBtaW5zICovCiAJaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgZGF0YS0+bGFzdF92YmF0ICsgNjAwICogSFopIHx8ICFkYXRhLT52YWxpZCkgewotCQlkbWUxNzM3X3dyaXRlKGNsaWVudCwgRE1FMTczN19SRUdfQ09ORklHLCBkbWUxNzM3X3JlYWQoY2xpZW50LAorCQlkbWUxNzM3X3dyaXRlKGRhdGEsIERNRTE3MzdfUkVHX0NPTkZJRywgZG1lMTczN19yZWFkKGRhdGEsCiAJCQkJCQlETUUxNzM3X1JFR19DT05GSUcpIHwgMHgxMCk7CiAJCWRhdGEtPmxhc3RfdmJhdCA9IGppZmZpZXM7CiAJfQpAQCAtNTcxLDcgKzU3Miw3IEBACiAJLyogU2FtcGxlIHJlZ2lzdGVyIGNvbnRlbnRzIGV2ZXJ5IDEgc2VjICovCiAJaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgZGF0YS0+bGFzdF91cGRhdGUgKyBIWikgfHwgIWRhdGEtPnZhbGlkKSB7CiAJCWlmIChkYXRhLT50eXBlICE9IHNjaDUwMjcpIHsKLQkJCWRhdGEtPnZpZCA9IGRtZTE3MzdfcmVhZChjbGllbnQsIERNRTE3MzdfUkVHX1ZJRCkgJgorCQkJZGF0YS0+dmlkID0gZG1lMTczN19yZWFkKGRhdGEsIERNRTE3MzdfUkVHX1ZJRCkgJgogCQkJCTB4M2Y7CiAJCX0KIApAQCAtNTgwLDExICs1ODEsMTEgQEAKIAkJCS8qIFZvbHRhZ2UgaW5wdXRzIGFyZSBzdG9yZWQgYXMgMTYgYml0IHZhbHVlcyBldmVuCiAJCQkgKiB0aG91Z2ggdGhleSBoYXZlIG9ubHkgMTIgYml0cyByZXNvbHV0aW9uLiBUaGlzIGlzCiAJCQkgKiB0byBtYWtlIGl0IGNvbnNpc3RlbnQgd2l0aCB0aGUgdGVtcCBpbnB1dHMuICovCi0JCQlkYXRhLT5pbltpeF0gPSBkbWUxNzM3X3JlYWQoY2xpZW50LAorCQkJZGF0YS0+aW5baXhdID0gZG1lMTczN19yZWFkKGRhdGEsCiAJCQkJCURNRTE3MzdfUkVHX0lOKGl4KSkgPDwgODsKLQkJCWRhdGEtPmluX21pbltpeF0gPSBkbWUxNzM3X3JlYWQoY2xpZW50LAorCQkJZGF0YS0+aW5fbWluW2l4XSA9IGRtZTE3MzdfcmVhZChkYXRhLAogCQkJCQlETUUxNzM3X1JFR19JTl9NSU4oaXgpKTsKLQkJCWRhdGEtPmluX21heFtpeF0gPSBkbWUxNzM3X3JlYWQoY2xpZW50LAorCQkJZGF0YS0+aW5fbWF4W2l4XSA9IGRtZTE3MzdfcmVhZChkYXRhLAogCQkJCQlETUUxNzM3X1JFR19JTl9NQVgoaXgpKTsKIAkJfQogCkBAIC01OTUsMTQgKzU5NiwxNCBAQAogCQkJICogdG8gdGFrZSBhZHZhbnRhZ2Ugb2YgaW1wbGljaXQgY29udmVyc2lvbnMgYmV0d2VlbgogCQkJICogcmVnaXN0ZXIgdmFsdWVzICgyJ3MgY29tcGxlbWVudCkgYW5kIHRlbXAgdmFsdWVzCiAJCQkgKiAoc2lnbmVkIGRlY2ltYWwpLiAqLwotCQkJZGF0YS0+dGVtcFtpeF0gPSBkbWUxNzM3X3JlYWQoY2xpZW50LAorCQkJZGF0YS0+dGVtcFtpeF0gPSBkbWUxNzM3X3JlYWQoZGF0YSwKIAkJCQkJRE1FMTczN19SRUdfVEVNUChpeCkpIDw8IDg7Ci0JCQlkYXRhLT50ZW1wX21pbltpeF0gPSBkbWUxNzM3X3JlYWQoY2xpZW50LAorCQkJZGF0YS0+dGVtcF9taW5baXhdID0gZG1lMTczN19yZWFkKGRhdGEsCiAJCQkJCURNRTE3MzdfUkVHX1RFTVBfTUlOKGl4KSk7Ci0JCQlkYXRhLT50ZW1wX21heFtpeF0gPSBkbWUxNzM3X3JlYWQoY2xpZW50LAorCQkJZGF0YS0+dGVtcF9tYXhbaXhdID0gZG1lMTczN19yZWFkKGRhdGEsCiAJCQkJCURNRTE3MzdfUkVHX1RFTVBfTUFYKGl4KSk7CiAJCQlpZiAoZGF0YS0+dHlwZSAhPSBzY2g1MDI3KSB7Ci0JCQkJZGF0YS0+dGVtcF9vZmZzZXRbaXhdID0gZG1lMTczN19yZWFkKGNsaWVudCwKKwkJCQlkYXRhLT50ZW1wX29mZnNldFtpeF0gPSBkbWUxNzM3X3JlYWQoZGF0YSwKIAkJCQkJCURNRTE3MzdfUkVHX1RFTVBfT0ZGU0VUKGl4KSk7CiAJCQl9CiAJCX0KQEAgLTYxMiw3ICs2MTMsNyBAQAogCQkgKiB3aGljaCB0aGUgcmVnaXN0ZXJzIGFyZSByZWFkIChNU0IgZmlyc3QsIHRoZW4gTFNCKSBpcwogCQkgKiBpbXBvcnRhbnQhICovCiAJCWZvciAoaXggPSAwOyBpeCA8IEFSUkFZX1NJWkUobHNiKTsgaXgrKykgewotCQkJbHNiW2l4XSA9IGRtZTE3MzdfcmVhZChjbGllbnQsCisJCQlsc2JbaXhdID0gZG1lMTczN19yZWFkKGRhdGEsCiAJCQkJCURNRTE3MzdfUkVHX0lOX1RFTVBfTFNCKGl4KSk7CiAJCX0KIAkJZm9yIChpeCA9IDA7IGl4IDwgQVJSQVlfU0laRShkYXRhLT5pbik7IGl4KyspIHsKQEAgLTYzMSwxOSArNjMyLDE5IEBACiAJCQlpZiAoIShkYXRhLT5oYXNfZmFuICYgKDEgPDwgaXgpKSkgewogCQkJCWNvbnRpbnVlOwogCQkJfQotCQkJZGF0YS0+ZmFuW2l4XSA9IGRtZTE3MzdfcmVhZChjbGllbnQsCisJCQlkYXRhLT5mYW5baXhdID0gZG1lMTczN19yZWFkKGRhdGEsCiAJCQkJCURNRTE3MzdfUkVHX0ZBTihpeCkpOwotCQkJZGF0YS0+ZmFuW2l4XSB8PSBkbWUxNzM3X3JlYWQoY2xpZW50LAorCQkJZGF0YS0+ZmFuW2l4XSB8PSBkbWUxNzM3X3JlYWQoZGF0YSwKIAkJCQkJRE1FMTczN19SRUdfRkFOKGl4KSArIDEpIDw8IDg7Ci0JCQlkYXRhLT5mYW5fbWluW2l4XSA9IGRtZTE3MzdfcmVhZChjbGllbnQsCisJCQlkYXRhLT5mYW5fbWluW2l4XSA9IGRtZTE3MzdfcmVhZChkYXRhLAogCQkJCQlETUUxNzM3X1JFR19GQU5fTUlOKGl4KSk7Ci0JCQlkYXRhLT5mYW5fbWluW2l4XSB8PSBkbWUxNzM3X3JlYWQoY2xpZW50LAorCQkJZGF0YS0+ZmFuX21pbltpeF0gfD0gZG1lMTczN19yZWFkKGRhdGEsCiAJCQkJCURNRTE3MzdfUkVHX0ZBTl9NSU4oaXgpICsgMSkgPDwgODsKLQkJCWRhdGEtPmZhbl9vcHRbaXhdID0gZG1lMTczN19yZWFkKGNsaWVudCwKKwkJCWRhdGEtPmZhbl9vcHRbaXhdID0gZG1lMTczN19yZWFkKGRhdGEsCiAJCQkJCURNRTE3MzdfUkVHX0ZBTl9PUFQoaXgpKTsKIAkJCS8qIGZhbl9tYXggZXhpc3RzIG9ubHkgZm9yIGZhbls1LTZdICovCiAJCQlpZiAoaXggPiAzKSB7Ci0JCQkJZGF0YS0+ZmFuX21heFtpeCAtIDRdID0gZG1lMTczN19yZWFkKGNsaWVudCwKKwkJCQlkYXRhLT5mYW5fbWF4W2l4IC0gNF0gPSBkbWUxNzM3X3JlYWQoZGF0YSwKIAkJCQkJRE1FMTczN19SRUdfRkFOX01BWChpeCkpOwogCQkJfQogCQl9CkBAIC02NTUsNjMgKzY1Niw2MyBAQAogCQkJaWYgKCEoZGF0YS0+aGFzX3B3bSAmICgxIDw8IGl4KSkpIHsKIAkJCQljb250aW51ZTsKIAkJCX0KLQkJCWRhdGEtPnB3bVtpeF0gPSBkbWUxNzM3X3JlYWQoY2xpZW50LAorCQkJZGF0YS0+cHdtW2l4XSA9IGRtZTE3MzdfcmVhZChkYXRhLAogCQkJCQlETUUxNzM3X1JFR19QV00oaXgpKTsKLQkJCWRhdGEtPnB3bV9mcmVxW2l4XSA9IGRtZTE3MzdfcmVhZChjbGllbnQsCisJCQlkYXRhLT5wd21fZnJlcVtpeF0gPSBkbWUxNzM3X3JlYWQoZGF0YSwKIAkJCQkJRE1FMTczN19SRUdfUFdNX0ZSRVEoaXgpKTsKIAkJCS8qIHB3bV9jb25maWcgYW5kIHB3bV9taW4gZXhpc3Qgb25seSBmb3IgcHdtWzEtM10gKi8KIAkJCWlmIChpeCA8IDMpIHsKLQkJCQlkYXRhLT5wd21fY29uZmlnW2l4XSA9IGRtZTE3MzdfcmVhZChjbGllbnQsCisJCQkJZGF0YS0+cHdtX2NvbmZpZ1tpeF0gPSBkbWUxNzM3X3JlYWQoZGF0YSwKIAkJCQkJCURNRTE3MzdfUkVHX1BXTV9DT05GSUcoaXgpKTsKLQkJCQlkYXRhLT5wd21fbWluW2l4XSA9IGRtZTE3MzdfcmVhZChjbGllbnQsCisJCQkJZGF0YS0+cHdtX21pbltpeF0gPSBkbWUxNzM3X3JlYWQoZGF0YSwKIAkJCQkJCURNRTE3MzdfUkVHX1BXTV9NSU4oaXgpKTsKIAkJCX0KIAkJfQogCQlmb3IgKGl4ID0gMDsgaXggPCBBUlJBWV9TSVpFKGRhdGEtPnB3bV9ycik7IGl4KyspIHsKLQkJCWRhdGEtPnB3bV9ycltpeF0gPSBkbWUxNzM3X3JlYWQoY2xpZW50LAorCQkJZGF0YS0+cHdtX3JyW2l4XSA9IGRtZTE3MzdfcmVhZChkYXRhLAogCQkJCQkJRE1FMTczN19SRUdfUFdNX1JSKGl4KSk7CiAJCX0KIAogCQkvKiBUaGVybWFsIHpvbmUgcmVnaXN0ZXJzICovCiAJCWZvciAoaXggPSAwOyBpeCA8IEFSUkFZX1NJWkUoZGF0YS0+em9uZV9sb3cpOyBpeCsrKSB7Ci0JCQlkYXRhLT56b25lX2xvd1tpeF0gPSBkbWUxNzM3X3JlYWQoY2xpZW50LAorCQkJZGF0YS0+em9uZV9sb3dbaXhdID0gZG1lMTczN19yZWFkKGRhdGEsCiAJCQkJCURNRTE3MzdfUkVHX1pPTkVfTE9XKGl4KSk7Ci0JCQlkYXRhLT56b25lX2Fic1tpeF0gPSBkbWUxNzM3X3JlYWQoY2xpZW50LAorCQkJZGF0YS0+em9uZV9hYnNbaXhdID0gZG1lMTczN19yZWFkKGRhdGEsCiAJCQkJCURNRTE3MzdfUkVHX1pPTkVfQUJTKGl4KSk7CiAJCX0KIAkJaWYgKGRhdGEtPnR5cGUgIT0gc2NoNTAyNykgewogCQkJZm9yIChpeCA9IDA7IGl4IDwgQVJSQVlfU0laRShkYXRhLT56b25lX2h5c3QpOyBpeCsrKSB7Ci0JCQkJZGF0YS0+em9uZV9oeXN0W2l4XSA9IGRtZTE3MzdfcmVhZChjbGllbnQsCisJCQkJZGF0YS0+em9uZV9oeXN0W2l4XSA9IGRtZTE3MzdfcmVhZChkYXRhLAogCQkJCQkJRE1FMTczN19SRUdfWk9ORV9IWVNUKGl4KSk7CiAJCQl9CiAJCX0KIAogCQkvKiBBbGFybSByZWdpc3RlcnMgKi8KLQkJZGF0YS0+YWxhcm1zID0gZG1lMTczN19yZWFkKGNsaWVudCwKKwkJZGF0YS0+YWxhcm1zID0gZG1lMTczN19yZWFkKGRhdGEsCiAJCQkJCQlETUUxNzM3X1JFR19BTEFSTTEpOwogCQkvKiBCaXQgNyB0ZWxscyB1cyBpZiB0aGUgb3RoZXIgYWxhcm0gcmVnaXN0ZXJzIGFyZSBub24temVybyBhbmQKIAkJICogdGhlcmVmb3JlIGFsc28gbmVlZCB0byBiZSByZWFkICovCiAJCWlmIChkYXRhLT5hbGFybXMgJiAweDgwKSB7Ci0JCQlkYXRhLT5hbGFybXMgfD0gZG1lMTczN19yZWFkKGNsaWVudCwKKwkJCWRhdGEtPmFsYXJtcyB8PSBkbWUxNzM3X3JlYWQoZGF0YSwKIAkJCQkJCURNRTE3MzdfUkVHX0FMQVJNMikgPDwgODsKLQkJCWRhdGEtPmFsYXJtcyB8PSBkbWUxNzM3X3JlYWQoY2xpZW50LAorCQkJZGF0YS0+YWxhcm1zIHw9IGRtZTE3MzdfcmVhZChkYXRhLAogCQkJCQkJRE1FMTczN19SRUdfQUxBUk0zKSA8PCAxNjsKIAkJfQogCiAJCS8qIFRoZSBJU0EgY2hpcHMgcmVxdWlyZSBleHBsaWNpdCBjbGVhcmluZyBvZiBhbGFybSBiaXRzLgogCQkgKiBEb24ndCB3b3JyeSwgYW4gYWxhcm0gd2lsbCBjb21lIGJhY2sgaWYgdGhlIGNvbmRpdGlvbgogCQkgKiB0aGF0IGNhdXNlcyBpdCBzdGlsbCBleGlzdHMgKi8KLQkJaWYgKCFjbGllbnQtPmRyaXZlcikgeworCQlpZiAoIWRhdGEtPmNsaWVudCkgewogCQkJaWYgKGRhdGEtPmFsYXJtcyAmIDB4ZmYwMDAwKSB7Ci0JCQkJZG1lMTczN193cml0ZShjbGllbnQsIERNRTE3MzdfUkVHX0FMQVJNMywKKwkJCQlkbWUxNzM3X3dyaXRlKGRhdGEsIERNRTE3MzdfUkVHX0FMQVJNMywKIAkJCQkJICAgICAgMHhmZik7CiAJCQl9CiAJCQlpZiAoZGF0YS0+YWxhcm1zICYgMHhmZjAwKSB7Ci0JCQkJZG1lMTczN193cml0ZShjbGllbnQsIERNRTE3MzdfUkVHX0FMQVJNMiwKKwkJCQlkbWUxNzM3X3dyaXRlKGRhdGEsIERNRTE3MzdfUkVHX0FMQVJNMiwKIAkJCQkJICAgICAgMHhmZik7CiAJCQl9CiAJCQlpZiAoZGF0YS0+YWxhcm1zICYgMHhmZikgewotCQkJCWRtZTE3Mzdfd3JpdGUoY2xpZW50LCBETUUxNzM3X1JFR19BTEFSTTEsCisJCQkJZG1lMTczN193cml0ZShkYXRhLCBETUUxNzM3X1JFR19BTEFSTTEsCiAJCQkJCSAgICAgIDB4ZmYpOwogCQkJfQogCQl9CkBAIC03NzAsNyArNzcxLDYgQEAKIAkJICAgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCiB7CiAJc3RydWN0IGRtZTE3MzdfZGF0YSAqZGF0YSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwotCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSAmZGF0YS0+Y2xpZW50OwogCXN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZV8yCiAJCSpzZW5zb3JfYXR0cl8yID0gdG9fc2Vuc29yX2Rldl9hdHRyXzIoYXR0cik7CiAJaW50IGl4ID0gc2Vuc29yX2F0dHJfMi0+aW5kZXg7CkBAIC03ODEsMTIgKzc4MSwxMiBAQAogCXN3aXRjaCAoZm4pIHsKIAljYXNlIFNZU19JTl9NSU46CiAJCWRhdGEtPmluX21pbltpeF0gPSBJTl9UT19SRUcodmFsLCBkYXRhLT5pbl9ub21pbmFsW2l4XSk7Ci0JCWRtZTE3Mzdfd3JpdGUoY2xpZW50LCBETUUxNzM3X1JFR19JTl9NSU4oaXgpLAorCQlkbWUxNzM3X3dyaXRlKGRhdGEsIERNRTE3MzdfUkVHX0lOX01JTihpeCksCiAJCQkgICAgICBkYXRhLT5pbl9taW5baXhdKTsKIAkJYnJlYWs7CiAJY2FzZSBTWVNfSU5fTUFYOgogCQlkYXRhLT5pbl9tYXhbaXhdID0gSU5fVE9fUkVHKHZhbCwgZGF0YS0+aW5fbm9taW5hbFtpeF0pOwotCQlkbWUxNzM3X3dyaXRlKGNsaWVudCwgRE1FMTczN19SRUdfSU5fTUFYKGl4KSwKKwkJZG1lMTczN193cml0ZShkYXRhLCBETUUxNzM3X1JFR19JTl9NQVgoaXgpLAogCQkJICAgICAgZGF0YS0+aW5fbWF4W2l4XSk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CkBAIC04NTAsNyArODUwLDYgQEAKIAkJCWNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQogewogCXN0cnVjdCBkbWUxNzM3X2RhdGEgKmRhdGEgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKLQlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gJmRhdGEtPmNsaWVudDsKIAlzdHJ1Y3Qgc2Vuc29yX2RldmljZV9hdHRyaWJ1dGVfMgogCQkqc2Vuc29yX2F0dHJfMiA9IHRvX3NlbnNvcl9kZXZfYXR0cl8yKGF0dHIpOwogCWludCBpeCA9IHNlbnNvcl9hdHRyXzItPmluZGV4OwpAQCAtODYxLDE3ICs4NjAsMTcgQEAKIAlzd2l0Y2ggKGZuKSB7CiAJY2FzZSBTWVNfVEVNUF9NSU46CiAJCWRhdGEtPnRlbXBfbWluW2l4XSA9IFRFTVBfVE9fUkVHKHZhbCk7Ci0JCWRtZTE3Mzdfd3JpdGUoY2xpZW50LCBETUUxNzM3X1JFR19URU1QX01JTihpeCksCisJCWRtZTE3Mzdfd3JpdGUoZGF0YSwgRE1FMTczN19SRUdfVEVNUF9NSU4oaXgpLAogCQkJICAgICAgZGF0YS0+dGVtcF9taW5baXhdKTsKIAkJYnJlYWs7CiAJY2FzZSBTWVNfVEVNUF9NQVg6CiAJCWRhdGEtPnRlbXBfbWF4W2l4XSA9IFRFTVBfVE9fUkVHKHZhbCk7Ci0JCWRtZTE3Mzdfd3JpdGUoY2xpZW50LCBETUUxNzM3X1JFR19URU1QX01BWChpeCksCisJCWRtZTE3Mzdfd3JpdGUoZGF0YSwgRE1FMTczN19SRUdfVEVNUF9NQVgoaXgpLAogCQkJICAgICAgZGF0YS0+dGVtcF9tYXhbaXhdKTsKIAkJYnJlYWs7CiAJY2FzZSBTWVNfVEVNUF9PRkZTRVQ6CiAJCWRhdGEtPnRlbXBfb2Zmc2V0W2l4XSA9IFRFTVBfVE9fUkVHKHZhbCk7Ci0JCWRtZTE3Mzdfd3JpdGUoY2xpZW50LCBETUUxNzM3X1JFR19URU1QX09GRlNFVChpeCksCisJCWRtZTE3Mzdfd3JpdGUoZGF0YSwgRE1FMTczN19SRUdfVEVNUF9PRkZTRVQoaXgpLAogCQkJICAgICAgZGF0YS0+dGVtcF9vZmZzZXRbaXhdKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKQEAgLTkzOSw3ICs5MzgsNiBAQAogCQkJY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCiB7CiAJc3RydWN0IGRtZTE3MzdfZGF0YSAqZGF0YSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwotCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSAmZGF0YS0+Y2xpZW50OwogCXN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZV8yCiAJCSpzZW5zb3JfYXR0cl8yID0gdG9fc2Vuc29yX2Rldl9hdHRyXzIoYXR0cik7CiAJaW50IGl4ID0gc2Vuc29yX2F0dHJfMi0+aW5kZXg7CkBAIC05NTAsMzcgKzk0OCwzNyBAQAogCXN3aXRjaCAoZm4pIHsKIAljYXNlIFNZU19aT05FX0FVVE9fUE9JTlQxX1RFTVBfSFlTVDoKIAkJLyogUmVmcmVzaCB0aGUgY2FjaGUgKi8KLQkJZGF0YS0+em9uZV9sb3dbaXhdID0gZG1lMTczN19yZWFkKGNsaWVudCwKKwkJZGF0YS0+em9uZV9sb3dbaXhdID0gZG1lMTczN19yZWFkKGRhdGEsCiAJCQkJCQkgIERNRTE3MzdfUkVHX1pPTkVfTE9XKGl4KSk7CiAJCS8qIE1vZGlmeSB0aGUgdGVtcCBoeXN0IHZhbHVlICovCiAJCWRhdGEtPnpvbmVfaHlzdFtpeCA9PSAyXSA9IFRFTVBfSFlTVF9UT19SRUcoCiAJCQkJCVRFTVBfRlJPTV9SRUcoZGF0YS0+em9uZV9sb3dbaXhdLCA4KSAtCi0JCQkJCXZhbCwgaXgsIGRtZTE3MzdfcmVhZChjbGllbnQsCisJCQkJCXZhbCwgaXgsIGRtZTE3MzdfcmVhZChkYXRhLAogCQkJCQlETUUxNzM3X1JFR19aT05FX0hZU1QoaXggPT0gMikpKTsKLQkJZG1lMTczN193cml0ZShjbGllbnQsIERNRTE3MzdfUkVHX1pPTkVfSFlTVChpeCA9PSAyKSwKKwkJZG1lMTczN193cml0ZShkYXRhLCBETUUxNzM3X1JFR19aT05FX0hZU1QoaXggPT0gMiksCiAJCQkgICAgICBkYXRhLT56b25lX2h5c3RbaXggPT0gMl0pOwogCQlicmVhazsKIAljYXNlIFNZU19aT05FX0FVVE9fUE9JTlQxX1RFTVA6CiAJCWRhdGEtPnpvbmVfbG93W2l4XSA9IFRFTVBfVE9fUkVHKHZhbCk7Ci0JCWRtZTE3Mzdfd3JpdGUoY2xpZW50LCBETUUxNzM3X1JFR19aT05FX0xPVyhpeCksCisJCWRtZTE3Mzdfd3JpdGUoZGF0YSwgRE1FMTczN19SRUdfWk9ORV9MT1coaXgpLAogCQkJICAgICAgZGF0YS0+em9uZV9sb3dbaXhdKTsKIAkJYnJlYWs7CiAJY2FzZSBTWVNfWk9ORV9BVVRPX1BPSU5UMl9URU1QOgogCQkvKiBSZWZyZXNoIHRoZSBjYWNoZSAqLwotCQlkYXRhLT56b25lX2xvd1tpeF0gPSBkbWUxNzM3X3JlYWQoY2xpZW50LAorCQlkYXRhLT56b25lX2xvd1tpeF0gPSBkbWUxNzM3X3JlYWQoZGF0YSwKIAkJCQkJCSAgRE1FMTczN19SRUdfWk9ORV9MT1coaXgpKTsKIAkJLyogTW9kaWZ5IHRoZSB0ZW1wIHJhbmdlIHZhbHVlICh3aGljaCBpcyBzdG9yZWQgaW4gdGhlIHVwcGVyCiAJCSAqIG5pYmJsZSBvZiB0aGUgcHdtX2ZyZXEgcmVnaXN0ZXIpICovCiAJCWRhdGEtPnB3bV9mcmVxW2l4XSA9IFRFTVBfUkFOR0VfVE9fUkVHKHZhbCAtCiAJCQkJCVRFTVBfRlJPTV9SRUcoZGF0YS0+em9uZV9sb3dbaXhdLCA4KSwKLQkJCQkJZG1lMTczN19yZWFkKGNsaWVudCwKKwkJCQkJZG1lMTczN19yZWFkKGRhdGEsCiAJCQkJCURNRTE3MzdfUkVHX1BXTV9GUkVRKGl4KSkpOwotCQlkbWUxNzM3X3dyaXRlKGNsaWVudCwgRE1FMTczN19SRUdfUFdNX0ZSRVEoaXgpLAorCQlkbWUxNzM3X3dyaXRlKGRhdGEsIERNRTE3MzdfUkVHX1BXTV9GUkVRKGl4KSwKIAkJCSAgICAgIGRhdGEtPnB3bV9mcmVxW2l4XSk7CiAJCWJyZWFrOwogCWNhc2UgU1lTX1pPTkVfQVVUT19QT0lOVDNfVEVNUDoKIAkJZGF0YS0+em9uZV9hYnNbaXhdID0gVEVNUF9UT19SRUcodmFsKTsKLQkJZG1lMTczN193cml0ZShjbGllbnQsIERNRTE3MzdfUkVHX1pPTkVfQUJTKGl4KSwKKwkJZG1lMTczN193cml0ZShkYXRhLCBETUUxNzM3X1JFR19aT05FX0FCUyhpeCksCiAJCQkgICAgICBkYXRhLT56b25lX2Fic1tpeF0pOwogCQlicmVhazsKIAlkZWZhdWx0OgpAQCAtMTA0Niw3ICsxMDQ0LDYgQEAKIAkJICAgICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQogewogCXN0cnVjdCBkbWUxNzM3X2RhdGEgKmRhdGEgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKLQlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gJmRhdGEtPmNsaWVudDsKIAlzdHJ1Y3Qgc2Vuc29yX2RldmljZV9hdHRyaWJ1dGVfMgogCQkqc2Vuc29yX2F0dHJfMiA9IHRvX3NlbnNvcl9kZXZfYXR0cl8yKGF0dHIpOwogCWludCBpeCA9IHNlbnNvcl9hdHRyXzItPmluZGV4OwpAQCAtMTA2MCwyMSArMTA1NywyMSBAQAogCQkJZGF0YS0+ZmFuX21pbltpeF0gPSBGQU5fVE9fUkVHKHZhbCwgMCk7CiAJCX0gZWxzZSB7CiAJCQkvKiBSZWZyZXNoIHRoZSBjYWNoZSAqLwotCQkJZGF0YS0+ZmFuX29wdFtpeF0gPSBkbWUxNzM3X3JlYWQoY2xpZW50LAorCQkJZGF0YS0+ZmFuX29wdFtpeF0gPSBkbWUxNzM3X3JlYWQoZGF0YSwKIAkJCQkJCURNRTE3MzdfUkVHX0ZBTl9PUFQoaXgpKTsKIAkJCS8qIE1vZGlmeSB0aGUgZmFuIG1pbiB2YWx1ZSAqLwogCQkJZGF0YS0+ZmFuX21pbltpeF0gPSBGQU5fVE9fUkVHKHZhbCwKIAkJCQkJRkFOX1RQQ19GUk9NX1JFRyhkYXRhLT5mYW5fb3B0W2l4XSkpOwogCQl9Ci0JCWRtZTE3Mzdfd3JpdGUoY2xpZW50LCBETUUxNzM3X1JFR19GQU5fTUlOKGl4KSwKKwkJZG1lMTczN193cml0ZShkYXRhLCBETUUxNzM3X1JFR19GQU5fTUlOKGl4KSwKIAkJCSAgICAgIGRhdGEtPmZhbl9taW5baXhdICYgMHhmZik7Ci0JCWRtZTE3Mzdfd3JpdGUoY2xpZW50LCBETUUxNzM3X1JFR19GQU5fTUlOKGl4KSArIDEsCisJCWRtZTE3Mzdfd3JpdGUoZGF0YSwgRE1FMTczN19SRUdfRkFOX01JTihpeCkgKyAxLAogCQkJICAgICAgZGF0YS0+ZmFuX21pbltpeF0gPj4gOCk7CiAJCWJyZWFrOwogCWNhc2UgU1lTX0ZBTl9NQVg6CiAJCS8qIE9ubHkgdmFsaWQgZm9yIGZhbls1LTZdICovCiAJCWRhdGEtPmZhbl9tYXhbaXggLSA0XSA9IEZBTl9NQVhfVE9fUkVHKHZhbCk7Ci0JCWRtZTE3Mzdfd3JpdGUoY2xpZW50LCBETUUxNzM3X1JFR19GQU5fTUFYKGl4KSwKKwkJZG1lMTczN193cml0ZShkYXRhLCBETUUxNzM3X1JFR19GQU5fTUFYKGl4KSwKIAkJCSAgICAgIGRhdGEtPmZhbl9tYXhbaXggLSA0XSk7CiAJCWJyZWFrOwogCWNhc2UgU1lTX0ZBTl9UWVBFOgpAQCAtMTA4Niw5ICsxMDgzLDkgQEAKIAkJCQkgdmFsKTsKIAkJCWdvdG8gZXhpdDsKIAkJfQotCQlkYXRhLT5mYW5fb3B0W2l4XSA9IEZBTl9UWVBFX1RPX1JFRyh2YWwsIGRtZTE3MzdfcmVhZChjbGllbnQsCisJCWRhdGEtPmZhbl9vcHRbaXhdID0gRkFOX1RZUEVfVE9fUkVHKHZhbCwgZG1lMTczN19yZWFkKGRhdGEsCiAJCQkJCURNRTE3MzdfUkVHX0ZBTl9PUFQoaXgpKSk7Ci0JCWRtZTE3Mzdfd3JpdGUoY2xpZW50LCBETUUxNzM3X1JFR19GQU5fT1BUKGl4KSwKKwkJZG1lMTczN193cml0ZShkYXRhLCBETUUxNzM3X1JFR19GQU5fT1BUKGl4KSwKIAkJCSAgICAgIGRhdGEtPmZhbl9vcHRbaXhdKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKQEAgLTExODUsNyArMTE4Miw2IEBACiAJCSAgICAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKIHsKIAlzdHJ1Y3QgZG1lMTczN19kYXRhICpkYXRhID0gZGV2X2dldF9kcnZkYXRhKGRldik7Ci0Jc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9ICZkYXRhLT5jbGllbnQ7CiAJc3RydWN0IHNlbnNvcl9kZXZpY2VfYXR0cmlidXRlXzIKIAkJKnNlbnNvcl9hdHRyXzIgPSB0b19zZW5zb3JfZGV2X2F0dHJfMihhdHRyKTsKIAlpbnQgaXggPSBzZW5zb3JfYXR0cl8yLT5pbmRleDsKQEAgLTExOTYsMTIgKzExOTIsMTIgQEAKIAlzd2l0Y2ggKGZuKSB7CiAJY2FzZSBTWVNfUFdNOgogCQlkYXRhLT5wd21baXhdID0gU0VOU09SU19MSU1JVCh2YWwsIDAsIDI1NSk7Ci0JCWRtZTE3Mzdfd3JpdGUoY2xpZW50LCBETUUxNzM3X1JFR19QV00oaXgpLCBkYXRhLT5wd21baXhdKTsKKwkJZG1lMTczN193cml0ZShkYXRhLCBETUUxNzM3X1JFR19QV00oaXgpLCBkYXRhLT5wd21baXhdKTsKIAkJYnJlYWs7CiAJY2FzZSBTWVNfUFdNX0ZSRVE6Ci0JCWRhdGEtPnB3bV9mcmVxW2l4XSA9IFBXTV9GUkVRX1RPX1JFRyh2YWwsIGRtZTE3MzdfcmVhZChjbGllbnQsCisJCWRhdGEtPnB3bV9mcmVxW2l4XSA9IFBXTV9GUkVRX1RPX1JFRyh2YWwsIGRtZTE3MzdfcmVhZChkYXRhLAogCQkJCQkJRE1FMTczN19SRUdfUFdNX0ZSRVEoaXgpKSk7Ci0JCWRtZTE3Mzdfd3JpdGUoY2xpZW50LCBETUUxNzM3X1JFR19QV01fRlJFUShpeCksCisJCWRtZTE3Mzdfd3JpdGUoZGF0YSwgRE1FMTczN19SRUdfUFdNX0ZSRVEoaXgpLAogCQkJICAgICAgZGF0YS0+cHdtX2ZyZXFbaXhdKTsKIAkJYnJlYWs7CiAJY2FzZSBTWVNfUFdNX0VOQUJMRToKQEAgLTEyMTQsNyArMTIxMCw3IEBACiAJCQlnb3RvIGV4aXQ7CiAJCX0KIAkJLyogUmVmcmVzaCB0aGUgY2FjaGUgKi8KLQkJZGF0YS0+cHdtX2NvbmZpZ1tpeF0gPSBkbWUxNzM3X3JlYWQoY2xpZW50LAorCQlkYXRhLT5wd21fY29uZmlnW2l4XSA9IGRtZTE3MzdfcmVhZChkYXRhLAogCQkJCQkJRE1FMTczN19SRUdfUFdNX0NPTkZJRyhpeCkpOwogCQlpZiAodmFsID09IFBXTV9FTl9GUk9NX1JFRyhkYXRhLT5wd21fY29uZmlnW2l4XSkpIHsKIAkJCS8qIEJhaWwgb3V0IGlmIG5vIGNoYW5nZSAqLwpAQCAtMTIyNiwxNCArMTIyMiwxNCBAQAogCQkJZGF0YS0+cHdtX2FjeltpeF0gPSBQV01fQUNaX0ZST01fUkVHKAogCQkJCQkJCWRhdGEtPnB3bV9jb25maWdbaXhdKTsKIAkJCS8qIFNhdmUgdGhlIGN1cnJlbnQgcmFtcCByYXRlIHN0YXRlIGFuZCBkaXNhYmxlIGl0ICovCi0JCQlkYXRhLT5wd21fcnJbaXggPiAwXSA9IGRtZTE3MzdfcmVhZChjbGllbnQsCisJCQlkYXRhLT5wd21fcnJbaXggPiAwXSA9IGRtZTE3MzdfcmVhZChkYXRhLAogCQkJCQkJRE1FMTczN19SRUdfUFdNX1JSKGl4ID4gMCkpOwogCQkJZGF0YS0+cHdtX3JyX2VuICY9IH4oMSA8PCBpeCk7CiAJCQlpZiAoUFdNX1JSX0VOX0ZST01fUkVHKGRhdGEtPnB3bV9ycltpeCA+IDBdLCBpeCkpIHsKIAkJCQlkYXRhLT5wd21fcnJfZW4gfD0gKDEgPDwgaXgpOwogCQkJCWRhdGEtPnB3bV9ycltpeCA+IDBdID0gUFdNX1JSX0VOX1RPX1JFRygwLCBpeCwKIAkJCQkJCQlkYXRhLT5wd21fcnJbaXggPiAwXSk7Ci0JCQkJZG1lMTczN193cml0ZShjbGllbnQsCisJCQkJZG1lMTczN193cml0ZShkYXRhLAogCQkJCQkgICAgICBETUUxNzM3X1JFR19QV01fUlIoaXggPiAwKSwKIAkJCQkJICAgICAgZGF0YS0+cHdtX3JyW2l4ID4gMF0pOwogCQkJfQpAQCAtMTI0NywxNCArMTI0MywxNCBAQAogCQkJLyogVHVybiBmYW4gZnVsbHkgb24gKi8KIAkJCWRhdGEtPnB3bV9jb25maWdbaXhdID0gUFdNX0VOX1RPX1JFRygwLAogCQkJCQkJCWRhdGEtPnB3bV9jb25maWdbaXhdKTsKLQkJCWRtZTE3Mzdfd3JpdGUoY2xpZW50LCBETUUxNzM3X1JFR19QV01fQ09ORklHKGl4KSwKKwkJCWRtZTE3Mzdfd3JpdGUoZGF0YSwgRE1FMTczN19SRUdfUFdNX0NPTkZJRyhpeCksCiAJCQkJICAgICAgZGF0YS0+cHdtX2NvbmZpZ1tpeF0pOwogCQkJYnJlYWs7CiAJCWNhc2UgMToKIAkJCS8qIFR1cm4gb24gbWFudWFsIG1vZGUgKi8KIAkJCWRhdGEtPnB3bV9jb25maWdbaXhdID0gUFdNX0VOX1RPX1JFRygxLAogCQkJCQkJCWRhdGEtPnB3bV9jb25maWdbaXhdKTsKLQkJCWRtZTE3Mzdfd3JpdGUoY2xpZW50LCBETUUxNzM3X1JFR19QV01fQ09ORklHKGl4KSwKKwkJCWRtZTE3Mzdfd3JpdGUoZGF0YSwgRE1FMTczN19SRUdfUFdNX0NPTkZJRyhpeCksCiAJCQkJICAgICAgZGF0YS0+cHdtX2NvbmZpZ1tpeF0pOwogCQkJLyogQ2hhbmdlIHBlcm1pc3Npb25zIG9mIHB3bVtpeF0gdG8gcmVhZC13cml0ZWFibGUgKi8KIAkJCWRtZTE3MzdfY2htb2RfZmlsZShkZXYsIGRtZTE3MzdfcHdtX2NobW9kX2F0dHJbaXhdLApAQCAtMTI2OSwxNCArMTI2NSwxNCBAQAogCQkJZGF0YS0+cHdtX2NvbmZpZ1tpeF0gPSBQV01fQUNaX1RPX1JFRygKIAkJCQkJCQlkYXRhLT5wd21fYWN6W2l4XSwKIAkJCQkJCQlkYXRhLT5wd21fY29uZmlnW2l4XSk7Ci0JCQlkbWUxNzM3X3dyaXRlKGNsaWVudCwgRE1FMTczN19SRUdfUFdNX0NPTkZJRyhpeCksCisJCQlkbWUxNzM3X3dyaXRlKGRhdGEsIERNRTE3MzdfUkVHX1BXTV9DT05GSUcoaXgpLAogCQkJCSAgICAgIGRhdGEtPnB3bV9jb25maWdbaXhdKTsKIAkJCS8qIEVuYWJsZSBQV00gcmFtcCByYXRlIGlmIHByZXZpb3VzbHkgZW5hYmxlZCAqLwogCQkJaWYgKGRhdGEtPnB3bV9ycl9lbiAmICgxIDw8IGl4KSkgewogCQkJCWRhdGEtPnB3bV9ycltpeCA+IDBdID0gUFdNX1JSX0VOX1RPX1JFRygxLCBpeCwKLQkJCQkJCWRtZTE3MzdfcmVhZChjbGllbnQsCisJCQkJCQlkbWUxNzM3X3JlYWQoZGF0YSwKIAkJCQkJCURNRTE3MzdfUkVHX1BXTV9SUihpeCA+IDApKSk7Ci0JCQkJZG1lMTczN193cml0ZShjbGllbnQsCisJCQkJZG1lMTczN193cml0ZShkYXRhLAogCQkJCQkgICAgICBETUUxNzM3X1JFR19QV01fUlIoaXggPiAwKSwKIAkJCQkJICAgICAgZGF0YS0+cHdtX3JyW2l4ID4gMF0pOwogCQkJfQpAQCAtMTI4Niw5ICsxMjgyLDkgQEAKIAljYXNlIFNZU19QV01fUkFNUF9SQVRFOgogCQkvKiBPbmx5IHZhbGlkIGZvciBwd21bMS0zXSAqLwogCQkvKiBSZWZyZXNoIHRoZSBjYWNoZSAqLwotCQlkYXRhLT5wd21fY29uZmlnW2l4XSA9IGRtZTE3MzdfcmVhZChjbGllbnQsCisJCWRhdGEtPnB3bV9jb25maWdbaXhdID0gZG1lMTczN19yZWFkKGRhdGEsCiAJCQkJCQlETUUxNzM3X1JFR19QV01fQ09ORklHKGl4KSk7Ci0JCWRhdGEtPnB3bV9ycltpeCA+IDBdID0gZG1lMTczN19yZWFkKGNsaWVudCwKKwkJZGF0YS0+cHdtX3JyW2l4ID4gMF0gPSBkbWUxNzM3X3JlYWQoZGF0YSwKIAkJCQkJCURNRTE3MzdfUkVHX1BXTV9SUihpeCA+IDApKTsKIAkJLyogU2V0IHRoZSByYW1wIHJhdGUgdmFsdWUgKi8KIAkJaWYgKHZhbCA+IDApIHsKQEAgLTEzMDEsNyArMTI5Nyw3IEBACiAJCQlkYXRhLT5wd21fcnJbaXggPiAwXSA9IFBXTV9SUl9FTl9UT19SRUcodmFsID4gMCwgaXgsCiAJCQkJCQkJZGF0YS0+cHdtX3JyW2l4ID4gMF0pOwogCQl9Ci0JCWRtZTE3Mzdfd3JpdGUoY2xpZW50LCBETUUxNzM3X1JFR19QV01fUlIoaXggPiAwKSwKKwkJZG1lMTczN193cml0ZShkYXRhLCBETUUxNzM3X1JFR19QV01fUlIoaXggPiAwKSwKIAkJCSAgICAgIGRhdGEtPnB3bV9ycltpeCA+IDBdKTsKIAkJYnJlYWs7CiAJY2FzZSBTWVNfUFdNX0FVVE9fQ0hBTk5FTFNfWk9ORToKQEAgLTEzMTUsMTQgKzEzMTEsMTQgQEAKIAkJCWdvdG8gZXhpdDsKIAkJfQogCQkvKiBSZWZyZXNoIHRoZSBjYWNoZSAqLwotCQlkYXRhLT5wd21fY29uZmlnW2l4XSA9IGRtZTE3MzdfcmVhZChjbGllbnQsCisJCWRhdGEtPnB3bV9jb25maWdbaXhdID0gZG1lMTczN19yZWFkKGRhdGEsCiAJCQkJCQlETUUxNzM3X1JFR19QV01fQ09ORklHKGl4KSk7CiAJCWlmIChQV01fRU5fRlJPTV9SRUcoZGF0YS0+cHdtX2NvbmZpZ1tpeF0pID09IDIpIHsKIAkJCS8qIFBXTSBpcyBhbHJlYWR5IGluIGF1dG8gbW9kZSBzbyB1cGRhdGUgdGhlIHRlbXAKIAkJCSAqIGNoYW5uZWwgYXNzaWdubWVudCAqLwogCQkJZGF0YS0+cHdtX2NvbmZpZ1tpeF0gPSBQV01fQUNaX1RPX1JFRyh2YWwsCiAJCQkJCQlkYXRhLT5wd21fY29uZmlnW2l4XSk7Ci0JCQlkbWUxNzM3X3dyaXRlKGNsaWVudCwgRE1FMTczN19SRUdfUFdNX0NPTkZJRyhpeCksCisJCQlkbWUxNzM3X3dyaXRlKGRhdGEsIERNRTE3MzdfUkVHX1BXTV9DT05GSUcoaXgpLAogCQkJCSAgICAgIGRhdGEtPnB3bV9jb25maWdbaXhdKTsKIAkJfSBlbHNlIHsKIAkJCS8qIFBXTSBpcyBub3QgaW4gYXV0byBtb2RlIHNvIHdlIHNhdmUgdGhlIHRlbXAKQEAgLTEzMzMsNyArMTMyOSw3IEBACiAJY2FzZSBTWVNfUFdNX0FVVE9fUFdNX01JTjoKIAkJLyogT25seSB2YWxpZCBmb3IgcHdtWzEtM10gKi8KIAkJLyogUmVmcmVzaCB0aGUgY2FjaGUgKi8KLQkJZGF0YS0+cHdtX21pbltpeF0gPSBkbWUxNzM3X3JlYWQoY2xpZW50LAorCQlkYXRhLT5wd21fbWluW2l4XSA9IGRtZTE3MzdfcmVhZChkYXRhLAogCQkJCQkJRE1FMTczN19SRUdfUFdNX01JTihpeCkpOwogCQkvKiBUaGVyZSBhcmUgb25seSAyIHZhbHVlcyBzdXBwb3J0ZWQgZm9yIHRoZSBhdXRvX3B3bV9taW4KIAkJICogdmFsdWU6IDAgb3IgYXV0b19wb2ludDFfcHdtLiBTbyBpZiB0aGUgdGVtcGVyYXR1cmUgZHJvcHMKQEAgLTEzNDEsMjAgKzEzMzcsMjAgQEAKIAkJICogb2ZmIG9yIHJ1bnMgYXQgYXV0b19wb2ludDFfcHdtIGR1dHktY3ljbGUuICovCiAJCWlmICh2YWwgPiAoKGRhdGEtPnB3bV9taW5baXhdICsgMSkgLyAyKSkgewogCQkJZGF0YS0+cHdtX3JyWzBdID0gUFdNX09GRl9UT19SRUcoMSwgaXgsCi0JCQkJCQlkbWUxNzM3X3JlYWQoY2xpZW50LAorCQkJCQkJZG1lMTczN19yZWFkKGRhdGEsCiAJCQkJCQlETUUxNzM3X1JFR19QV01fUlIoMCkpKTsKIAkJfSBlbHNlIHsKIAkJCWRhdGEtPnB3bV9yclswXSA9IFBXTV9PRkZfVE9fUkVHKDAsIGl4LAotCQkJCQkJZG1lMTczN19yZWFkKGNsaWVudCwKKwkJCQkJCWRtZTE3MzdfcmVhZChkYXRhLAogCQkJCQkJRE1FMTczN19SRUdfUFdNX1JSKDApKSk7CiAJCX0KLQkJZG1lMTczN193cml0ZShjbGllbnQsIERNRTE3MzdfUkVHX1BXTV9SUigwKSwKKwkJZG1lMTczN193cml0ZShkYXRhLCBETUUxNzM3X1JFR19QV01fUlIoMCksCiAJCQkgICAgICBkYXRhLT5wd21fcnJbMF0pOwogCQlicmVhazsKIAljYXNlIFNZU19QV01fQVVUT19QT0lOVDFfUFdNOgogCQkvKiBPbmx5IHZhbGlkIGZvciBwd21bMS0zXSAqLwogCQlkYXRhLT5wd21fbWluW2l4XSA9IFNFTlNPUlNfTElNSVQodmFsLCAwLCAyNTUpOwotCQlkbWUxNzM3X3dyaXRlKGNsaWVudCwgRE1FMTczN19SRUdfUFdNX01JTihpeCksCisJCWRtZTE3Mzdfd3JpdGUoZGF0YSwgRE1FMTczN19SRUdfUFdNX01JTihpeCksCiAJCQkgICAgICBkYXRhLT5wd21fbWluW2l4XSk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CkBAIC0xNDAyLDcgKzEzOTgsNyBAQAogewogCXN0cnVjdCBkbWUxNzM3X2RhdGEgKmRhdGEgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKIAotCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVzXG4iLCBkYXRhLT5jbGllbnQubmFtZSk7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiJXNcbiIsIGRhdGEtPm5hbWUpOwogfQogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTE5MDgsNyArMTkwNCw3IEBACiAKIAlzeXNmc19yZW1vdmVfZ3JvdXAoJmRldi0+a29iaiwgJmRtZTE3MzdfZ3JvdXApOwogCi0JaWYgKCFkYXRhLT5jbGllbnQuZHJpdmVyKSB7CisJaWYgKCFkYXRhLT5jbGllbnQpIHsKIAkJc3lzZnNfcmVtb3ZlX2ZpbGUoJmRldi0+a29iaiwgJmRldl9hdHRyX25hbWUuYXR0cik7CiAJfQogfQpAQCAtMTkxOSw3ICsxOTE1LDcgQEAKIAlpbnQgZXJyLCBpeDsKIAogCS8qIENyZWF0ZSBhIG5hbWUgYXR0cmlidXRlIGZvciBJU0EgZGV2aWNlcyAqLwotCWlmICghZGF0YS0+Y2xpZW50LmRyaXZlciAmJgorCWlmICghZGF0YS0+Y2xpZW50ICYmCiAJICAgIChlcnIgPSBzeXNmc19jcmVhdGVfZmlsZSgmZGV2LT5rb2JqLCAmZGV2X2F0dHJfbmFtZS5hdHRyKSkpIHsKIAkJZ290byBleGl0OwogCX0KQEAgLTIwMTMsMTQgKzIwMDksMTQgQEAKIHN0YXRpYyBpbnQgZG1lMTczN19pbml0X2RldmljZShzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGRtZTE3MzdfZGF0YSAqZGF0YSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwotCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSAmZGF0YS0+Y2xpZW50OworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSBkYXRhLT5jbGllbnQ7CiAJaW50IGl4OwogCXU4IHJlZzsKIAogCS8qIFBvaW50IHRvIHRoZSByaWdodCBub21pbmFsIHZvbHRhZ2VzIGFycmF5ICovCiAJZGF0YS0+aW5fbm9taW5hbCA9IElOX05PTUlOQUwoZGF0YS0+dHlwZSk7CiAKLQlkYXRhLT5jb25maWcgPSBkbWUxNzM3X3JlYWQoY2xpZW50LCBETUUxNzM3X1JFR19DT05GSUcpOworCWRhdGEtPmNvbmZpZyA9IGRtZTE3MzdfcmVhZChkYXRhLCBETUUxNzM3X1JFR19DT05GSUcpOwogCS8qIEluZm9ybSBpZiBwYXJ0IGlzIG5vdCBtb25pdG9yaW5nL3N0YXJ0ZWQgKi8KIAlpZiAoIShkYXRhLT5jb25maWcgJiAweDAxKSkgewogCQlpZiAoIWZvcmNlX3N0YXJ0KSB7CkBAIC0yMDMyLDcgKzIwMjgsNyBAQAogCiAJCS8qIEZvcmNlIG1vbml0b3JpbmcgKi8KIAkJZGF0YS0+Y29uZmlnIHw9IDB4MDE7Ci0JCWRtZTE3Mzdfd3JpdGUoY2xpZW50LCBETUUxNzM3X1JFR19DT05GSUcsIGRhdGEtPmNvbmZpZyk7CisJCWRtZTE3Mzdfd3JpdGUoZGF0YSwgRE1FMTczN19SRUdfQ09ORklHLCBkYXRhLT5jb25maWcpOwogCX0KIAkvKiBJbmZvcm0gaWYgcGFydCBpcyBub3QgcmVhZHkgKi8KIAlpZiAoIShkYXRhLT5jb25maWcgJiAweDA0KSkgewpAQCAtMjA0MSw4ICsyMDM3LDggQEAKIAl9CiAKIAkvKiBEZXRlcm1pbmUgd2hpY2ggb3B0aW9uYWwgZmFuIGFuZCBwd20gZmVhdHVyZXMgYXJlIGVuYWJsZWQvcHJlc2VudCAqLwotCWlmIChjbGllbnQtPmRyaXZlcikgeyAgIC8qIEkyQyBjaGlwICovCi0JCWRhdGEtPmNvbmZpZzIgPSBkbWUxNzM3X3JlYWQoY2xpZW50LCBETUUxNzM3X1JFR19DT05GSUcyKTsKKwlpZiAoY2xpZW50KSB7ICAgLyogSTJDIGNoaXAgKi8KKwkJZGF0YS0+Y29uZmlnMiA9IGRtZTE3MzdfcmVhZChkYXRhLCBETUUxNzM3X1JFR19DT05GSUcyKTsKIAkJLyogQ2hlY2sgaWYgb3B0aW9uYWwgZmFuMyBpbnB1dCBpcyBlbmFibGVkICovCiAJCWlmIChkYXRhLT5jb25maWcyICYgMHgwNCkgewogCQkJZGF0YS0+aGFzX2ZhbiB8PSAoMSA8PCAyKTsKQEAgLTIwNTEsNyArMjA0Nyw3IEBACiAJCS8qIEZhbjQgYW5kIHB3bTMgYXJlIG9ubHkgYXZhaWxhYmxlIGlmIHRoZSBjbGllbnQncyBJMkMgYWRkcmVzcwogCQkgKiBpcyB0aGUgZGVmYXVsdCAweDJlLiBPdGhlcndpc2UgdGhlIEkvT3MgYXNzb2NpYXRlZCB3aXRoCiAJCSAqIHRoZXNlIGZ1bmN0aW9ucyBhcmUgdXNlZCBmb3IgYWRkciBlbmFibGUvc2VsZWN0LiAqLwotCQlpZiAoZGF0YS0+Y2xpZW50LmFkZHIgPT0gMHgyZSkgeworCQlpZiAoY2xpZW50LT5hZGRyID09IDB4MmUpIHsKIAkJCWRhdGEtPmhhc19mYW4gfD0gKDEgPDwgMyk7CiAJCQlkYXRhLT5oYXNfcHdtIHw9ICgxIDw8IDIpOwogCQl9CkBAIC0yMDg2LDE2ICsyMDgyLDE2IEBACiAJCSAoZGF0YS0+aGFzX2ZhbiAmICgxIDw8IDQpKSA/ICJ5ZXMiIDogIm5vIiwKIAkJIChkYXRhLT5oYXNfZmFuICYgKDEgPDwgNSkpID8gInllcyIgOiAibm8iKTsKIAotCXJlZyA9IGRtZTE3MzdfcmVhZChjbGllbnQsIERNRTE3MzdfUkVHX1RBQ0hfUFdNKTsKKwlyZWcgPSBkbWUxNzM3X3JlYWQoZGF0YSwgRE1FMTczN19SRUdfVEFDSF9QV00pOwogCS8qIEluZm9ybSBpZiBmYW4tdG8tcHdtIG1hcHBpbmcgZGlmZmVycyBmcm9tIHRoZSBkZWZhdWx0ICovCi0JaWYgKGNsaWVudC0+ZHJpdmVyICYmIHJlZyAhPSAweGE0KSB7ICAgLyogSTJDIGNoaXAgKi8KKwlpZiAoY2xpZW50ICYmIHJlZyAhPSAweGE0KSB7ICAgLyogSTJDIGNoaXAgKi8KIAkJZGV2X3dhcm4oZGV2LCAiTm9uLXN0YW5kYXJkIGZhbiB0byBwd20gbWFwcGluZzogIgogCQkJICJmYW4xLT5wd20lZCwgZmFuMi0+cHdtJWQsIGZhbjMtPnB3bSVkLCAiCiAJCQkgImZhbjQtPnB3bSVkLiBQbGVhc2UgcmVwb3J0IHRvIHRoZSBkcml2ZXIgIgogCQkJICJtYWludGFpbmVyLlxuIiwKIAkJCSAocmVnICYgMHgwMykgKyAxLCAoKHJlZyA+PiAyKSAmIDB4MDMpICsgMSwKIAkJCSAoKHJlZyA+PiA0KSAmIDB4MDMpICsgMSwgKChyZWcgPj4gNikgJiAweDAzKSArIDEpOwotCX0gZWxzZSBpZiAoIWNsaWVudC0+ZHJpdmVyICYmIHJlZyAhPSAweDI0KSB7ICAgLyogSVNBIGNoaXAgKi8KKwl9IGVsc2UgaWYgKCFjbGllbnQgJiYgcmVnICE9IDB4MjQpIHsgICAvKiBJU0EgY2hpcCAqLwogCQlkZXZfd2FybihkZXYsICJOb24tc3RhbmRhcmQgZmFuIHRvIHB3bSBtYXBwaW5nOiAiCiAJCQkgImZhbjEtPnB3bSVkLCBmYW4yLT5wd20lZCwgZmFuMy0+cHdtJWQuICIKIAkJCSAiUGxlYXNlIHJlcG9ydCB0byB0aGUgZHJpdmVyIG1haW50YWluZXIuXG4iLApAQCAtMjEwOCw3ICsyMTA0LDcgQEAKIAkgKiBkaXNhYmxlZCkuICovCiAJaWYgKCEoZGF0YS0+Y29uZmlnICYgMHgwMikpIHsKIAkJZm9yIChpeCA9IDA7IGl4IDwgMzsgaXgrKykgewotCQkJZGF0YS0+cHdtX2NvbmZpZ1tpeF0gPSBkbWUxNzM3X3JlYWQoY2xpZW50LAorCQkJZGF0YS0+cHdtX2NvbmZpZ1tpeF0gPSBkbWUxNzM3X3JlYWQoZGF0YSwKIAkJCQkJCURNRTE3MzdfUkVHX1BXTV9DT05GSUcoaXgpKTsKIAkJCWlmICgoZGF0YS0+aGFzX3B3bSAmICgxIDw8IGl4KSkgJiYKIAkJCSAgICAoUFdNX0VOX0ZST01fUkVHKGRhdGEtPnB3bV9jb25maWdbaXhdKSA9PSAtMSkpIHsKQEAgLTIxMTYsOCArMjExMiw4IEBACiAJCQkJCSAibWFudWFsIG1vZGUuXG4iLCBpeCArIDEpOwogCQkJCWRhdGEtPnB3bV9jb25maWdbaXhdID0gUFdNX0VOX1RPX1JFRygxLAogCQkJCQkJCWRhdGEtPnB3bV9jb25maWdbaXhdKTsKLQkJCQlkbWUxNzM3X3dyaXRlKGNsaWVudCwgRE1FMTczN19SRUdfUFdNKGl4KSwgMCk7Ci0JCQkJZG1lMTczN193cml0ZShjbGllbnQsCisJCQkJZG1lMTczN193cml0ZShkYXRhLCBETUUxNzM3X1JFR19QV00oaXgpLCAwKTsKKwkJCQlkbWUxNzM3X3dyaXRlKGRhdGEsCiAJCQkJCSAgICAgIERNRTE3MzdfUkVHX1BXTV9DT05GSUcoaXgpLAogCQkJCQkgICAgICBkYXRhLT5wd21fY29uZmlnW2l4XSk7CiAJCQl9CkBAIC0yMTkxLDM3ICsyMTg3LDI0IEBACiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIGludCBkbWUxNzM3X2kyY19kZXRlY3Qoc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyLCBpbnQgYWRkcmVzcywKLQkJCSAgICAgIGludCBraW5kKQorLyogUmV0dXJuIDAgaWYgZGV0ZWN0aW9uIGlzIHN1Y2Nlc3NmdWwsIC1FTk9ERVYgb3RoZXJ3aXNlICovCitzdGF0aWMgaW50IGRtZTE3MzdfaTJjX2RldGVjdChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBpbnQga2luZCwKKwkJCSAgICAgIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyAqaW5mbykKIHsKKwlzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIgPSBjbGllbnQtPmFkYXB0ZXI7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJmFkYXB0ZXItPmRldjsKIAl1OCBjb21wYW55LCB2ZXJzdGVwID0gMDsKLQlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50OwotCXN0cnVjdCBkbWUxNzM3X2RhdGEgKmRhdGE7Ci0Jc3RydWN0IGRldmljZSAqZGV2OwotCWludCBlcnIgPSAwOwogCWNvbnN0IGNoYXIgKm5hbWU7CiAKIAlpZiAoIWkyY19jaGVja19mdW5jdGlvbmFsaXR5KGFkYXB0ZXIsIEkyQ19GVU5DX1NNQlVTX0JZVEVfREFUQSkpIHsKLQkJZ290byBleGl0OworCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKLQlpZiAoIShkYXRhID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGRtZTE3MzdfZGF0YSksIEdGUF9LRVJORUwpKSkgewotCQllcnIgPSAtRU5PTUVNOwotCQlnb3RvIGV4aXQ7Ci0JfQotCi0JY2xpZW50ID0gJmRhdGEtPmNsaWVudDsKLQlpMmNfc2V0X2NsaWVudGRhdGEoY2xpZW50LCBkYXRhKTsKLQljbGllbnQtPmFkZHIgPSBhZGRyZXNzOwotCWNsaWVudC0+YWRhcHRlciA9IGFkYXB0ZXI7Ci0JY2xpZW50LT5kcml2ZXIgPSAmZG1lMTczN19pMmNfZHJpdmVyOwotCWRldiA9ICZjbGllbnQtPmRldjsKLQogCS8qIEEgbmVnYXRpdmUga2luZCBtZWFucyB0aGF0IHRoZSBkcml2ZXIgd2FzIGxvYWRlZCB3aXRoIG5vIGZvcmNlCiAJICogcGFyYW1ldGVyIChkZWZhdWx0KSwgc28gd2UgbXVzdCBpZGVudGlmeSB0aGUgY2hpcC4gKi8KIAlpZiAoa2luZCA8IDApIHsKLQkJY29tcGFueSA9IGRtZTE3MzdfcmVhZChjbGllbnQsIERNRTE3MzdfUkVHX0NPTVBBTlkpOwotCQl2ZXJzdGVwID0gZG1lMTczN19yZWFkKGNsaWVudCwgRE1FMTczN19SRUdfVkVSU1RFUCk7CisJCWNvbXBhbnkgPSBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LCBETUUxNzM3X1JFR19DT01QQU5ZKTsKKwkJdmVyc3RlcCA9IGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsIERNRTE3MzdfUkVHX1ZFUlNURVApOwogCiAJCWlmIChjb21wYW55ID09IERNRTE3MzdfQ09NUEFOWV9TTVNDICYmCiAJCSAgICAodmVyc3RlcCAmIERNRTE3MzdfVkVSU1RFUF9NQVNLKSA9PSBETUUxNzM3X1ZFUlNURVApIHsKQEAgLTIyMzAsOCArMjIxMyw3IEBACiAJCQkgICB2ZXJzdGVwID09IFNDSDUwMjdfVkVSU1RFUCkgewogCQkJa2luZCA9IHNjaDUwMjc7CiAJCX0gZWxzZSB7Ci0JCQllcnIgPSAtRU5PREVWOwotCQkJZ290byBleGl0X2tmcmVlOworCQkJcmV0dXJuIC1FTk9ERVY7CiAJCX0KIAl9CiAKQEAgLTIyNDEsMzIgKzIyMjMsNDQgQEAKIAkJa2luZCA9IGRtZTE3Mzc7CiAJCW5hbWUgPSAiZG1lMTczNyI7CiAJfQotCWRhdGEtPnR5cGUgPSBraW5kOwotCi0JLyogRmlsbCBpbiB0aGUgcmVtYWluaW5nIGNsaWVudCBmaWVsZHMgYW5kIHB1dCBpdCBpbnRvIHRoZSBnbG9iYWwKLQkgKiBsaXN0ICovCi0Jc3RybGNweShjbGllbnQtPm5hbWUsIG5hbWUsIEkyQ19OQU1FX1NJWkUpOwotCW11dGV4X2luaXQoJmRhdGEtPnVwZGF0ZV9sb2NrKTsKLQotCS8qIFRlbGwgdGhlIEkyQyBsYXllciBhIG5ldyBjbGllbnQgaGFzIGFycml2ZWQgKi8KLQlpZiAoKGVyciA9IGkyY19hdHRhY2hfY2xpZW50KGNsaWVudCkpKSB7Ci0JCWdvdG8gZXhpdF9rZnJlZTsKLQl9CiAKIAlkZXZfaW5mbyhkZXYsICJGb3VuZCBhICVzIGNoaXAgYXQgMHglMDJ4IChyZXYgMHglMDJ4KS5cbiIsCiAJCSBraW5kID09IHNjaDUwMjcgPyAiU0NINTAyNyIgOiAiRE1FMTczNyIsIGNsaWVudC0+YWRkciwKIAkJIHZlcnN0ZXApOworCXN0cmxjcHkoaW5mby0+dHlwZSwgbmFtZSwgSTJDX05BTUVfU0laRSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBkbWUxNzM3X2kyY19wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAorCQkJICAgICBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpCit7CisJc3RydWN0IGRtZTE3MzdfZGF0YSAqZGF0YTsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmY2xpZW50LT5kZXY7CisJaW50IGVycjsKKworCWRhdGEgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgZG1lMTczN19kYXRhKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFkYXRhKSB7CisJCWVyciA9IC1FTk9NRU07CisJCWdvdG8gZXhpdDsKKwl9CisKKwlpMmNfc2V0X2NsaWVudGRhdGEoY2xpZW50LCBkYXRhKTsKKwlkYXRhLT50eXBlID0gaWQtPmRyaXZlcl9kYXRhOworCWRhdGEtPmNsaWVudCA9IGNsaWVudDsKKwlkYXRhLT5uYW1lID0gY2xpZW50LT5uYW1lOworCW11dGV4X2luaXQoJmRhdGEtPnVwZGF0ZV9sb2NrKTsKIAogCS8qIEluaXRpYWxpemUgdGhlIERNRTE3MzcgY2hpcCAqLwogCWlmICgoZXJyID0gZG1lMTczN19pbml0X2RldmljZShkZXYpKSkgewogCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byBpbml0aWFsaXplIGRldmljZS5cbiIpOwotCQlnb3RvIGV4aXRfZGV0YWNoOworCQlnb3RvIGV4aXRfa2ZyZWU7CiAJfQogCiAJLyogQ3JlYXRlIHN5c2ZzIGZpbGVzICovCiAJaWYgKChlcnIgPSBkbWUxNzM3X2NyZWF0ZV9maWxlcyhkZXYpKSkgewogCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byBjcmVhdGUgc3lzZnMgZmlsZXMuXG4iKTsKLQkJZ290byBleGl0X2RldGFjaDsKKwkJZ290byBleGl0X2tmcmVlOwogCX0KIAogCS8qIFJlZ2lzdGVyIGRldmljZSAqLwpAQCAtMjI4MSw0NSArMjI3NSw0MCBAQAogCiBleGl0X3JlbW92ZToKIAlkbWUxNzM3X3JlbW92ZV9maWxlcyhkZXYpOwotZXhpdF9kZXRhY2g6Ci0JaTJjX2RldGFjaF9jbGllbnQoY2xpZW50KTsKIGV4aXRfa2ZyZWU6CiAJa2ZyZWUoZGF0YSk7CiBleGl0OgogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyBpbnQgZG1lMTczN19pMmNfYXR0YWNoX2FkYXB0ZXIoc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyKQotewotCWlmICghKGFkYXB0ZXItPmNsYXNzICYgSTJDX0NMQVNTX0hXTU9OKSkgewotCQlyZXR1cm4gMDsKLQl9Ci0KLQlyZXR1cm4gaTJjX3Byb2JlKGFkYXB0ZXIsICZhZGRyX2RhdGEsIGRtZTE3MzdfaTJjX2RldGVjdCk7Ci19Ci0KLXN0YXRpYyBpbnQgZG1lMTczN19pMmNfZGV0YWNoX2NsaWVudChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQorc3RhdGljIGludCBkbWUxNzM3X2kyY19yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKIHsKIAlzdHJ1Y3QgZG1lMTczN19kYXRhICpkYXRhID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7Ci0JaW50IGVycjsKIAogCWh3bW9uX2RldmljZV91bnJlZ2lzdGVyKGRhdGEtPmh3bW9uX2Rldik7CiAJZG1lMTczN19yZW1vdmVfZmlsZXMoJmNsaWVudC0+ZGV2KTsKIAotCWlmICgoZXJyID0gaTJjX2RldGFjaF9jbGllbnQoY2xpZW50KSkpIHsKLQkJcmV0dXJuIGVycjsKLQl9Ci0KIAlrZnJlZShkYXRhKTsKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkIGRtZTE3MzdfaWRbXSA9IHsKKwl7ICJkbWUxNzM3IiwgZG1lMTczNyB9LAorCXsgInNjaDUwMjciLCBzY2g1MDI3IH0sCisJeyB9Cit9OworTU9EVUxFX0RFVklDRV9UQUJMRShpMmMsIGRtZTE3MzdfaWQpOworCiBzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgZG1lMTczN19pMmNfZHJpdmVyID0geworCS5jbGFzcyA9IEkyQ19DTEFTU19IV01PTiwKIAkuZHJpdmVyID0gewogCQkubmFtZSA9ICJkbWUxNzM3IiwKIAl9LAotCS5hdHRhY2hfYWRhcHRlcgk9IGRtZTE3MzdfaTJjX2F0dGFjaF9hZGFwdGVyLAotCS5kZXRhY2hfY2xpZW50ID0gZG1lMTczN19pMmNfZGV0YWNoX2NsaWVudCwKKwkucHJvYmUgPSBkbWUxNzM3X2kyY19wcm9iZSwKKwkucmVtb3ZlID0gZG1lMTczN19pMmNfcmVtb3ZlLAorCS5pZF90YWJsZSA9IGRtZTE3MzdfaWQsCisJLmRldGVjdCA9IGRtZTE3MzdfaTJjX2RldGVjdCwKKwkuYWRkcmVzc19kYXRhID0gJmFkZHJfZGF0YSwKIH07CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtMjQwMyw3ICsyMzkyLDYgQEAKIHsKIAl1OCBjb21wYW55LCBkZXZpY2U7CiAJc3RydWN0IHJlc291cmNlICpyZXM7Ci0Jc3RydWN0IGkyY19jbGllbnQgKmNsaWVudDsKIAlzdHJ1Y3QgZG1lMTczN19kYXRhICpkYXRhOwogCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZwZGV2LT5kZXY7CiAJaW50IGVycjsKQEAgLTI0MjIsMTUgKzI0MTAsMTMgQEAKIAkJZ290byBleGl0X3JlbGVhc2VfcmVnaW9uOwogCX0KIAotCWNsaWVudCA9ICZkYXRhLT5jbGllbnQ7Ci0JaTJjX3NldF9jbGllbnRkYXRhKGNsaWVudCwgZGF0YSk7Ci0JY2xpZW50LT5hZGRyID0gcmVzLT5zdGFydDsKKwlkYXRhLT5hZGRyID0gcmVzLT5zdGFydDsKIAlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBkYXRhKTsKIAogCS8qIFNraXAgY2hpcCBkZXRlY3Rpb24gaWYgbW9kdWxlIGlzIGxvYWRlZCB3aXRoIGZvcmNlX2lkIHBhcmFtZXRlciAqLwogCWlmICghZm9yY2VfaWQpIHsKLQkJY29tcGFueSA9IGRtZTE3MzdfcmVhZChjbGllbnQsIERNRTE3MzdfUkVHX0NPTVBBTlkpOwotCQlkZXZpY2UgPSBkbWUxNzM3X3JlYWQoY2xpZW50LCBETUUxNzM3X1JFR19ERVZJQ0UpOworCQljb21wYW55ID0gZG1lMTczN19yZWFkKGRhdGEsIERNRTE3MzdfUkVHX0NPTVBBTlkpOworCQlkZXZpY2UgPSBkbWUxNzM3X3JlYWQoZGF0YSwgRE1FMTczN19SRUdfREVWSUNFKTsKIAogCQlpZiAoISgoY29tcGFueSA9PSBETUUxNzM3X0NPTVBBTllfU01TQykgJiYKIAkJICAgICAgKGRldmljZSA9PSBTQ0gzMTFYX0RFVklDRSkpKSB7CkBAIC0yNDQxLDEwICsyNDI3LDEwIEBACiAJZGF0YS0+dHlwZSA9IHNjaDMxMXg7CiAKIAkvKiBGaWxsIGluIHRoZSByZW1haW5pbmcgY2xpZW50IGZpZWxkcyBhbmQgaW5pdGlhbGl6ZSB0aGUgbXV0ZXggKi8KLQlzdHJsY3B5KGNsaWVudC0+bmFtZSwgInNjaDMxMXgiLCBJMkNfTkFNRV9TSVpFKTsKKwlkYXRhLT5uYW1lID0gInNjaDMxMXgiOwogCW11dGV4X2luaXQoJmRhdGEtPnVwZGF0ZV9sb2NrKTsKIAotCWRldl9pbmZvKGRldiwgIkZvdW5kIGEgU0NIMzExeCBjaGlwIGF0IDB4JTA0eFxuIiwgY2xpZW50LT5hZGRyKTsKKwlkZXZfaW5mbyhkZXYsICJGb3VuZCBhIFNDSDMxMXggY2hpcCBhdCAweCUwNHhcbiIsIGRhdGEtPmFkZHIpOwogCiAJLyogSW5pdGlhbGl6ZSB0aGUgY2hpcCAqLwogCWlmICgoZXJyID0gZG1lMTczN19pbml0X2RldmljZShkZXYpKSkgewpAQCAtMjQ4NSw3ICsyNDcxLDcgQEAKIAogCWh3bW9uX2RldmljZV91bnJlZ2lzdGVyKGRhdGEtPmh3bW9uX2Rldik7CiAJZG1lMTczN19yZW1vdmVfZmlsZXMoJnBkZXYtPmRldik7Ci0JcmVsZWFzZV9yZWdpb24oZGF0YS0+Y2xpZW50LmFkZHIsIERNRTE3MzdfRVhURU5UKTsKKwlyZWxlYXNlX3JlZ2lvbihkYXRhLT5hZGRyLCBETUUxNzM3X0VYVEVOVCk7CiAJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CiAJa2ZyZWUoZGF0YSk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vaHdtb24uYyBiL2RyaXZlcnMvaHdtb24vaHdtb24uYwppbmRleCA3MzIxYTg4Li4wNzZhNTljIDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL2h3bW9uLmMKKysrIGIvZHJpdmVycy9od21vbi9od21vbi5jCkBAIC01NSw4ICs1NSw4IEBACiAJCXJldHVybiBFUlJfUFRSKGVycik7CiAKIAlpZCA9IGlkICYgTUFYX0lEX01BU0s7Ci0JaHdkZXYgPSBkZXZpY2VfY3JlYXRlX2RydmRhdGEoaHdtb25fY2xhc3MsIGRldiwgTUtERVYoMCwgMCksIE5VTEwsCi0JCQkJICAgICAgSFdNT05fSURfRk9STUFULCBpZCk7CisJaHdkZXYgPSBkZXZpY2VfY3JlYXRlKGh3bW9uX2NsYXNzLCBkZXYsIE1LREVWKDAsIDApLCBOVUxMLAorCQkJICAgICAgSFdNT05fSURfRk9STUFULCBpZCk7CiAKIAlpZiAoSVNfRVJSKGh3ZGV2KSkgewogCQlzcGluX2xvY2soJmlkcl9sb2NrKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vaWJtYWVtLmMgYi9kcml2ZXJzL2h3bW9uL2libWFlbS5jCmluZGV4IDBmNzBkYzIuLjdiMGVkNWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vaWJtYWVtLmMKKysrIGIvZHJpdmVycy9od21vbi9pYm1hZW0uYwpAQCAtMTExOCwzICsxMTE4LDEwIEBACiAKIG1vZHVsZV9pbml0KGFlbV9pbml0KTsKIG1vZHVsZV9leGl0KGFlbV9leGl0KTsKKworTU9EVUxFX0FMSUFTKCJkbWk6YnZuSUJNOio6cG5JQk1TeXN0ZW14MzM1MC0qIik7CitNT0RVTEVfQUxJQVMoImRtaTpidm5JQk06KjpwbklCTVN5c3RlbXgzNTUwLSoiKTsKK01PRFVMRV9BTElBUygiZG1pOmJ2bklCTToqOnBuSUJNU3lzdGVteDM2NTAtKiIpOworTU9EVUxFX0FMSUFTKCJkbWk6YnZuSUJNOio6cG5JQk1TeXN0ZW14MzY1NS0qIik7CitNT0RVTEVfQUxJQVMoImRtaTpidm5JQk06KjpwbklCTVN5c3RlbXgzNzU1LSoiKTsKK01PRFVMRV9BTElBUygiZG1pOmJ2bklCTToqOnBuSUJNMzg1ME0yL3gzOTUwTTItKiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9pYm1wZXguYyBiL2RyaXZlcnMvaHdtb24vaWJtcGV4LmMKaW5kZXggNGU5YjE5Yy4uNTM3ZDlmYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi9pYm1wZXguYworKysgYi9kcml2ZXJzL2h3bW9uL2libXBleC5jCkBAIC02MDgsMyArNjA4LDkgQEAKIAogbW9kdWxlX2luaXQoaWJtcGV4X2luaXQpOwogbW9kdWxlX2V4aXQoaWJtcGV4X2V4aXQpOworCitNT0RVTEVfQUxJQVMoImRtaTpidm5JQk06KjpwbklCTVN5c3RlbXgzMzUwLSoiKTsKK01PRFVMRV9BTElBUygiZG1pOmJ2bklCTToqOnBuSUJNU3lzdGVteDM1NTAtKiIpOworTU9EVUxFX0FMSUFTKCJkbWk6YnZuSUJNOio6cG5JQk1TeXN0ZW14MzY1MC0qIik7CitNT0RVTEVfQUxJQVMoImRtaTpidm5JQk06KjpwbklCTVN5c3RlbXgzNjU1LSoiKTsKK01PRFVMRV9BTElBUygiZG1pOmJ2bklCTToqOnBuSUJNU3lzdGVteDM3NTUtKiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9pdDg3LmMgYi9kcml2ZXJzL2h3bW9uL2l0ODcuYwppbmRleCBkNzkzY2MwLi5iNzRjOTU3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL2l0ODcuYworKysgYi9kcml2ZXJzL2h3bW9uL2l0ODcuYwpAQCAtNDc3LDcgKzQ3Nyw3IEBACiAJaWYgKHJlZyAmICgxIDw8IG5yKSkKIAkJcmV0dXJuIHNwcmludGYoYnVmLCAiM1xuIik7ICAvKiB0aGVybWFsIGRpb2RlICovCiAJaWYgKHJlZyAmICg4IDw8IG5yKSkKLQkJcmV0dXJuIHNwcmludGYoYnVmLCAiMlxuIik7ICAvKiB0aGVybWlzdG9yICovCisJCXJldHVybiBzcHJpbnRmKGJ1ZiwgIjRcbiIpOyAgLyogdGhlcm1pc3RvciAqLwogCXJldHVybiBzcHJpbnRmKGJ1ZiwgIjBcbiIpOyAgICAgIC8qIGRpc2FibGVkICovCiB9CiBzdGF0aWMgc3NpemVfdCBzZXRfc2Vuc29yKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCkBAIC00OTMsMTAgKzQ5MywxNSBAQAogCiAJZGF0YS0+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+dGVtcF90YXJnZXRbaV0gPSB3ODM3OTFkX3JlYWQoY2xpZW50LAorCQkJCVc4Mzc5MURfUkVHX1RFTVBfVEFSR0VUW2ldKSAmIDB4N2Y7CisJCX0KKworCQkvKiBVcGRhdGUgUFdNIHRlbXBlcmF0dXJlIHRvbGVyYW5jZSAqLworCQlmb3IgKGkgPSAwOyBpIDwgMjsgaSsrKSB7CisJCQlyZWdfYXJyYXlfdG1wW2ldID0gdzgzNzkxZF9yZWFkKGNsaWVudCwKKwkJCQkJVzgzNzkxRF9SRUdfVEVNUF9UT0xbaV0pOworCQl9CisJCWRhdGEtPnRlbXBfdG9sZXJhbmNlWzBdID0gcmVnX2FycmF5X3RtcFswXSAmIDB4MGY7CisJCWRhdGEtPnRlbXBfdG9sZXJhbmNlWzFdID0gKHJlZ19hcnJheV90bXBbMF0gPj4gNCkgJiAweDBmOworCQlkYXRhLT50ZW1wX3RvbGVyYW5jZVsyXSA9IHJlZ19hcnJheV90bXBbMV0gJiAweDBmOworCiAJCS8qIFVwZGF0ZSB0aGUgZmlyc3QgdGVtcGVyYXR1cmUgc2Vuc29yICovCiAJCWZvciAoaSA9IDA7IGkgPCAzOyBpKyspIHsKIAkJCWRhdGEtPnRlbXAxW2ldID0gdzgzNzkxZF9yZWFkKGNsaWVudCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9LY29uZmlnIGIvZHJpdmVycy9pMmMvYnVzc2VzL0tjb25maWcKaW5kZXggNmVlOTk3Yi4uYWNhZGJjNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvYnVzc2VzL0tjb25maWcKKysrIGIvZHJpdmVycy9pMmMvYnVzc2VzL0tjb25maWcKQEAgLTU1LDcgKzU1LDcgQEAKIAogY29uZmlnIEkyQ19BTUQ3NTZfUzQ4ODIKIAl0cmlzdGF0ZSAiU01CdXMgbXVsdGlwbGV4aW5nIG9uIHRoZSBUeWFuIFM0ODgyIgotCWRlcGVuZHMgb24gSTJDX0FNRDc1NiAmJiBFWFBFUklNRU5UQUwKKwlkZXBlbmRzIG9uIEkyQ19BTUQ3NTYgJiYgWDg2ICYmIEVYUEVSSU1FTlRBTAogCWhlbHAKIAkgIEVuYWJsaW5nIHRoaXMgb3B0aW9uIHdpbGwgYWRkIHNwZWNpZmljIFNNQnVzIHN1cHBvcnQgZm9yIHRoZSBUeWFuCiAJICBTNDg4MiBtb3RoZXJib2FyZC4gIE9uIHRoaXMgNC1DUFUgYm9hcmQsIHRoZSBTTUJ1cyBpcyBtdWx0aXBsZXhlZApAQCAtMTQ4LDcgKzE0OCw3IEBACiAKIGNvbmZpZyBJMkNfTkZPUkNFMl9TNDk4NQogCXRyaXN0YXRlICJTTUJ1cyBtdWx0aXBsZXhpbmcgb24gdGhlIFR5YW4gUzQ5ODUiCi0JZGVwZW5kcyBvbiBJMkNfTkZPUkNFMiAmJiBFWFBFUklNRU5UQUwKKwlkZXBlbmRzIG9uIEkyQ19ORk9SQ0UyICYmIFg4NiAmJiBFWFBFUklNRU5UQUwKIAloZWxwCiAJICBFbmFibGluZyB0aGlzIG9wdGlvbiB3aWxsIGFkZCBzcGVjaWZpYyBTTUJ1cyBzdXBwb3J0IGZvciB0aGUgVHlhbgogCSAgUzQ5ODUgbW90aGVyYm9hcmQuICBPbiB0aGlzIDQtQ1BVIGJvYXJkLCB0aGUgU01CdXMgaXMgbXVsdGlwbGV4ZWQKQEAgLTIwOSw3ICsyMDksNyBAQAogCSAgd2lsbCBiZSBjYWxsZWQgaTJjLXZpYS4KIAogY29uZmlnIEkyQ19WSUFQUk8KLQl0cmlzdGF0ZSAiVklBIFZUODJDNTk2LzgyQzY4Ni84Mnh4IGFuZCBDWDcwMCIKKwl0cmlzdGF0ZSAiVklBIFZUODJDNTk2LzgyQzY4Ni84Mnh4IGFuZCBDWDcwMC9WWDgwMC9WWDgyMCIKIAlkZXBlbmRzIG9uIFBDSQogCWhlbHAKIAkgIElmIHlvdSBzYXkgeWVzIHRvIHRoaXMgb3B0aW9uLCBzdXBwb3J0IHdpbGwgYmUgaW5jbHVkZWQgZm9yIHRoZSBWSUEKQEAgLTIyMyw2ICsyMjMsOCBAQAogCSAgICBWVDgyMzdSL0EvUwogCSAgICBWVDgyNTEKIAkgICAgQ1g3MDAKKwkgICAgVlg4MDAKKwkgICAgVlg4MjAKIAogCSAgVGhpcyBkcml2ZXIgY2FuIGFsc28gYmUgYnVpbHQgYXMgYSBtb2R1bGUuICBJZiBzbywgdGhlIG1vZHVsZQogCSAgd2lsbCBiZSBjYWxsZWQgaTJjLXZpYXByby4KQEAgLTMzMCw2ICszMzIsMTggQEAKIAkgIFRoaXMgaXMgYSB2ZXJ5IHNpbXBsZSBiaXRiYW5naW5nIEkyQyBkcml2ZXIgdXRpbGl6aW5nIHRoZQogCSAgYXJjaC1uZXV0cmFsIEdQSU8gQVBJIHRvIGNvbnRyb2wgdGhlIFNDTCBhbmQgU0RBIGxpbmVzLgogCitjb25maWcgSTJDX0hJR0hMQU5ERVIKKwl0cmlzdGF0ZSAiSGlnaGxhbmRlciBGUEdBIFNNQnVzIGludGVyZmFjZSIKKwlkZXBlbmRzIG9uIFNIX0hJR0hMQU5ERVIKKwloZWxwCisJICBJZiB5b3Ugc2F5IHllcyB0byB0aGlzIG9wdGlvbiwgc3VwcG9ydCB3aWxsIGJlIGluY2x1ZGVkIGZvcgorCSAgdGhlIFNNQnVzIGludGVyZmFjZSBsb2NhdGVkIGluIHRoZSBGUEdBIG9uIHZhcmlvdXMgSGlnaGxhbmRlcgorCSAgYm9hcmRzLCBwYXJ0aWN1bGFybHkgdGhlIFIwUDc3ODBMQzAwMTFSTCBhbmQgUjBQNzc4NUxDMDAxMVJMCisJICBGUEdBcy4gVGhpcyBpcyB3aG9sbHkgdW5yZWxhdGVkIHRvIHRoZSBTb0MgSTJDLgorCisJICBUaGlzIGRyaXZlciBjYW4gYWxzbyBiZSBidWlsdCBhcyBhIG1vZHVsZS4gIElmIHNvLCB0aGUgbW9kdWxlCisJICB3aWxsIGJlIGNhbGxlZCBpMmMtaGlnaGxhbmRlci4KKwogY29uZmlnIEkyQ19JQk1fSUlDCiAJdHJpc3RhdGUgIklCTSBQUEMgNHh4IG9uLWNoaXAgSTJDIGludGVyZmFjZSIKIAlkZXBlbmRzIG9uIDR4eApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYnVzc2VzL01ha2VmaWxlIGIvZHJpdmVycy9pMmMvYnVzc2VzL01ha2VmaWxlCmluZGV4IDk3ZGJmYTIuLjBjMmM0YjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2kyYy9idXNzZXMvTWFrZWZpbGUKQEAgLTMxLDYgKzMxLDcgQEAKIG9iai0kKENPTkZJR19JMkNfQ1BNKQkJKz0gaTJjLWNwbS5vCiBvYmotJChDT05GSUdfSTJDX0RBVklOQ0kpCSs9IGkyYy1kYXZpbmNpLm8KIG9iai0kKENPTkZJR19JMkNfR1BJTykJCSs9IGkyYy1ncGlvLm8KK29iai0kKENPTkZJR19JMkNfSElHSExBTkRFUikJKz0gaTJjLWhpZ2hsYW5kZXIubwogb2JqLSQoQ09ORklHX0kyQ19JQk1fSUlDKQkrPSBpMmMtaWJtX2lpYy5vCiBvYmotJChDT05GSUdfSTJDX0lPUDNYWCkJKz0gaTJjLWlvcDN4eC5vCiBvYmotJChDT05GSUdfSTJDX0lYUDIwMDApCSs9IGkyYy1peHAyMDAwLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtaGlnaGxhbmRlci5jIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1oaWdobGFuZGVyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjRkMjJhZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtaGlnaGxhbmRlci5jCkBAIC0wLDAgKzEsNDk4IEBACisvKgorICogUmVuZXNhcyBTb2x1dGlvbnMgSGlnaGxhbmRlciBGUEdBIEkyQy9TTUJ1cyBzdXBwb3J0LgorICoKKyAqIFN1cHBvcnRlZCBkZXZpY2VzOiBSMFA3NzgwTEMwMDExUkwsIFIwUDc3ODVMQzAwMTFSTAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOCAgUGF1bCBNdW5kdAorICogQ29weXJpZ2h0IChDKSAyMDA4ICBSZW5lc2FzIFNvbHV0aW9ucyBDb3JwLgorICogQ29weXJpZ2h0IChDKSAyMDA4ICBBdG9tIENyZWF0ZSBFbmdpbmVlcmluZyBDby4sIEx0ZC4KKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsCisgKiBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5CisgKiBvZiB0aGlzIGFyY2hpdmUgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9jb21wbGV0aW9uLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorCisjZGVmaW5lIFNNQ1IJCTB4MDAKKyNkZWZpbmUgU01DUl9TVEFSVAkoMSA8PCAwKQorI2RlZmluZSBTTUNSX0lSSUMJKDEgPDwgMSkKKyNkZWZpbmUgU01DUl9CQlNZCSgxIDw8IDIpCisjZGVmaW5lIFNNQ1JfQUNLRQkoMSA8PCAzKQorI2RlZmluZSBTTUNSX1JTVAkoMSA8PCA0KQorI2RlZmluZSBTTUNSX0lFSUMJKDEgPDwgNikKKworI2RlZmluZSBTTVNNQURSCQkweDAyCisKKyNkZWZpbmUgU01NUgkJMHgwNAorI2RlZmluZSBTTU1SX01PREUwCSgxIDw8IDApCisjZGVmaW5lIFNNTVJfTU9ERTEJKDEgPDwgMSkKKyNkZWZpbmUgU01NUl9DQVAJKDEgPDwgMykKKyNkZWZpbmUgU01NUl9UTU1ECSgxIDw8IDQpCisjZGVmaW5lIFNNTVJfU1AJCSgxIDw8IDcpCisKKyNkZWZpbmUgU01TQURSCQkweDA2CisjZGVmaW5lIFNNVFJEUgkJMHg0NgorCitzdHJ1Y3QgaGlnaGxhbmRlcl9pMmNfZGV2IHsKKwlzdHJ1Y3QgZGV2aWNlCQkqZGV2OworCXZvaWQgX19pb21lbQkJKmJhc2U7CisJc3RydWN0IGkyY19hZGFwdGVyCWFkYXB0ZXI7CisJc3RydWN0IGNvbXBsZXRpb24JY21kX2NvbXBsZXRlOworCXVuc2lnbmVkIGxvbmcJCWxhc3RfcmVhZF90aW1lOworCWludAkJCWlycTsKKwl1OAkJCSpidWY7CisJc2l6ZV90CQkJYnVmX2xlbjsKK307CisKK3N0YXRpYyBpbnQgaWljX2ZvcmNlX3BvbGwsIGlpY19mb3JjZV9ub3JtYWw7CitzdGF0aWMgaW50IGlpY190aW1lb3V0ID0gMTAwMCwgaWljX3JlYWRfZGVsYXk7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBoaWdobGFuZGVyX2kyY19pcnFfZW5hYmxlKHN0cnVjdCBoaWdobGFuZGVyX2kyY19kZXYgKmRldikKK3sKKwlpb3dyaXRlMTYoaW9yZWFkMTYoZGV2LT5iYXNlICsgU01DUikgfCBTTUNSX0lFSUMsIGRldi0+YmFzZSArIFNNQ1IpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgaGlnaGxhbmRlcl9pMmNfaXJxX2Rpc2FibGUoc3RydWN0IGhpZ2hsYW5kZXJfaTJjX2RldiAqZGV2KQoreworCWlvd3JpdGUxNihpb3JlYWQxNihkZXYtPmJhc2UgKyBTTUNSKSAmIH5TTUNSX0lFSUMsIGRldi0+YmFzZSArIFNNQ1IpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgaGlnaGxhbmRlcl9pMmNfc3RhcnQoc3RydWN0IGhpZ2hsYW5kZXJfaTJjX2RldiAqZGV2KQoreworCWlvd3JpdGUxNihpb3JlYWQxNihkZXYtPmJhc2UgKyBTTUNSKSB8IFNNQ1JfU1RBUlQsIGRldi0+YmFzZSArIFNNQ1IpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgaGlnaGxhbmRlcl9pMmNfZG9uZShzdHJ1Y3QgaGlnaGxhbmRlcl9pMmNfZGV2ICpkZXYpCit7CisJaW93cml0ZTE2KGlvcmVhZDE2KGRldi0+YmFzZSArIFNNQ1IpIHwgU01DUl9JUklDLCBkZXYtPmJhc2UgKyBTTUNSKTsKK30KKworc3RhdGljIHZvaWQgaGlnaGxhbmRlcl9pMmNfc2V0dXAoc3RydWN0IGhpZ2hsYW5kZXJfaTJjX2RldiAqZGV2KQoreworCXUxNiBzbW1yOworCisJc21tciA9IGlvcmVhZDE2KGRldi0+YmFzZSArIFNNTVIpOworCXNtbXIgfD0gU01NUl9UTU1EOworCisJaWYgKGlpY19mb3JjZV9ub3JtYWwpCisJCXNtbXIgJj0gflNNTVJfU1A7CisJZWxzZQorCQlzbW1yIHw9IFNNTVJfU1A7CisKKwlpb3dyaXRlMTYoc21tciwgZGV2LT5iYXNlICsgU01NUik7Cit9CisKK3N0YXRpYyB2b2lkIHNtYnVzX3dyaXRlX2RhdGEodTggKnNyYywgdTE2ICpkc3QsIGludCBsZW4pCit7CisJZm9yICg7IGxlbiA+IDE7IGxlbiAtPSAyKSB7CisJCSpkc3QrKyA9IGJlMTZfdG9fY3B1cCgodTE2ICopc3JjKTsKKwkJc3JjICs9IDI7CisJfQorCisJaWYgKGxlbikKKwkJKmRzdCA9ICpzcmMgPDwgODsKK30KKworc3RhdGljIHZvaWQgc21idXNfcmVhZF9kYXRhKHUxNiAqc3JjLCB1OCAqZHN0LCBpbnQgbGVuKQoreworCWZvciAoOyBsZW4gPiAxOyBsZW4gLT0gMikgeworCQkqKHUxNiAqKWRzdCA9IGNwdV90b19iZTE2cChzcmMrKyk7CisJCWRzdCArPSAyOworCX0KKworCWlmIChsZW4pCisJCSpkc3QgPSAqc3JjID4+IDg7Cit9CisKK3N0YXRpYyB2b2lkIGhpZ2hsYW5kZXJfaTJjX2NvbW1hbmQoc3RydWN0IGhpZ2hsYW5kZXJfaTJjX2RldiAqZGV2LAorCQkJCSAgIHU4IGNvbW1hbmQsIGludCBsZW4pCit7CisJdW5zaWduZWQgaW50IGk7CisJdTE2IGNtZCA9IChjb21tYW5kIDw8IDgpIHwgY29tbWFuZDsKKworCWZvciAoaSA9IDA7IGkgPCBsZW47IGkgKz0gMikgeworCQlpZiAobGVuIC0gaSA9PSAxKQorCQkJY21kID0gY29tbWFuZCA8PCA4OworCQlpb3dyaXRlMTYoY21kLCBkZXYtPmJhc2UgKyBTTVNBRFIgKyBpKTsKKwkJZGV2X2RiZyhkZXYtPmRldiwgImNvbW1hbmQgZGF0YVsleF0gMHglMDR4XG4iLCBpLzIsIGNtZCk7CisJfQorfQorCitzdGF0aWMgaW50IGhpZ2hsYW5kZXJfaTJjX3dhaXRfZm9yX2Jic3koc3RydWN0IGhpZ2hsYW5kZXJfaTJjX2RldiAqZGV2KQoreworCXVuc2lnbmVkIGxvbmcgdGltZW91dDsKKworCXRpbWVvdXQgPSBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyhpaWNfdGltZW91dCk7CisJd2hpbGUgKGlvcmVhZDE2KGRldi0+YmFzZSArIFNNQ1IpICYgU01DUl9CQlNZKSB7CisJCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIHRpbWVvdXQpKSB7CisJCQlkZXZfd2FybihkZXYtPmRldiwgInRpbWVvdXQgd2FpdGluZyBmb3IgYnVzIHJlYWR5XG4iKTsKKwkJCXJldHVybiAtRVRJTUVET1VUOworCQl9CisKKwkJbXNsZWVwKDEpOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGhpZ2hsYW5kZXJfaTJjX3Jlc2V0KHN0cnVjdCBoaWdobGFuZGVyX2kyY19kZXYgKmRldikKK3sKKwlpb3dyaXRlMTYoaW9yZWFkMTYoZGV2LT5iYXNlICsgU01DUikgfCBTTUNSX1JTVCwgZGV2LT5iYXNlICsgU01DUik7CisJcmV0dXJuIGhpZ2hsYW5kZXJfaTJjX3dhaXRfZm9yX2Jic3koZGV2KTsKK30KKworc3RhdGljIGludCBoaWdobGFuZGVyX2kyY193YWl0X2Zvcl9hY2soc3RydWN0IGhpZ2hsYW5kZXJfaTJjX2RldiAqZGV2KQoreworCXUxNiB0bXAgPSBpb3JlYWQxNihkZXYtPmJhc2UgKyBTTUNSKTsKKworCWlmICgodG1wICYgKFNNQ1JfSVJJQyB8IFNNQ1JfQUNLRSkpID09IFNNQ1JfQUNLRSkgeworCQlkZXZfd2FybihkZXYtPmRldiwgImFjayBhYm5vcm1hbGl0eVxuIik7CisJCXJldHVybiBoaWdobGFuZGVyX2kyY19yZXNldChkZXYpOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaXJxcmV0dXJuX3QgaGlnaGxhbmRlcl9pMmNfaXJxKGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3sKKwlzdHJ1Y3QgaGlnaGxhbmRlcl9pMmNfZGV2ICpkZXYgPSBkZXZfaWQ7CisKKwloaWdobGFuZGVyX2kyY19kb25lKGRldik7CisJY29tcGxldGUoJmRldi0+Y21kX2NvbXBsZXRlKTsKKworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIHZvaWQgaGlnaGxhbmRlcl9pMmNfcG9sbChzdHJ1Y3QgaGlnaGxhbmRlcl9pMmNfZGV2ICpkZXYpCit7CisJdW5zaWduZWQgbG9uZyB0aW1lb3V0OworCXUxNiBzbWNyOworCisJdGltZW91dCA9IGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKGlpY190aW1lb3V0KTsKKwlmb3IgKDs7KSB7CisJCXNtY3IgPSBpb3JlYWQxNihkZXYtPmJhc2UgKyBTTUNSKTsKKworCQkvKgorCQkgKiBEb24ndCBib3RoZXIgY2hlY2tpbmcgQUNLRSBoZXJlLCB0aGlzIGFuZCB0aGUgcmVzZXQKKwkJICogYXJlIGhhbmRsZWQgaW4gaGlnaGxhbmRlcl9pMmNfd2FpdF94ZmVyX2RvbmUoKSB3aGVuCisJCSAqIHdhaXRpbmcgZm9yIHRoZSBBQ0suCisJCSAqLworCisJCWlmIChzbWNyICYgU01DUl9JUklDKQorCQkJcmV0dXJuOworCQlpZiAodGltZV9hZnRlcihqaWZmaWVzLCB0aW1lb3V0KSkKKwkJCWJyZWFrOworCisJCWNwdV9yZWxheCgpOworCQljb25kX3Jlc2NoZWQoKTsKKwl9CisKKwlkZXZfZXJyKGRldi0+ZGV2LCAicG9sbGluZyB0aW1lZCBvdXRcbiIpOworfQorCitzdGF0aWMgaW5saW5lIGludCBoaWdobGFuZGVyX2kyY193YWl0X3hmZXJfZG9uZShzdHJ1Y3QgaGlnaGxhbmRlcl9pMmNfZGV2ICpkZXYpCit7CisJaWYgKGRldi0+aXJxKQorCQl3YWl0X2Zvcl9jb21wbGV0aW9uX3RpbWVvdXQoJmRldi0+Y21kX2NvbXBsZXRlLAorCQkJCQkgIG1zZWNzX3RvX2ppZmZpZXMoaWljX3RpbWVvdXQpKTsKKwllbHNlCisJCS8qIGJ1c3kgbG9vcGluZywgdGhlIElSUSBvZiBjaGFtcGlvbnMgKi8KKwkJaGlnaGxhbmRlcl9pMmNfcG9sbChkZXYpOworCisJcmV0dXJuIGhpZ2hsYW5kZXJfaTJjX3dhaXRfZm9yX2FjayhkZXYpOworfQorCitzdGF0aWMgaW50IGhpZ2hsYW5kZXJfaTJjX3JlYWQoc3RydWN0IGhpZ2hsYW5kZXJfaTJjX2RldiAqZGV2KQoreworCWludCBpLCBjbnQ7CisJdTE2IGRhdGFbMTZdOworCisJaWYgKGhpZ2hsYW5kZXJfaTJjX3dhaXRfZm9yX2Jic3koZGV2KSkKKwkJcmV0dXJuIC1FQUdBSU47CisKKwloaWdobGFuZGVyX2kyY19zdGFydChkZXYpOworCisJaWYgKGhpZ2hsYW5kZXJfaTJjX3dhaXRfeGZlcl9kb25lKGRldikpIHsKKwkJZGV2X2VycihkZXYtPmRldiwgIkFyYml0cmF0aW9uIGxvc3NcbiIpOworCQlyZXR1cm4gLUVBR0FJTjsKKwl9CisKKwkvKgorCSAqIFRoZSBSMFA3NzgwTEMwMDExUkwgRlBHQSBuZWVkcyBhIHNpZ25pZmljYW50IGRlbGF5IGJldHdlZW4KKwkgKiBkYXRhIHJlYWQgY3ljbGVzLCBvdGhlcndpc2UgdGhlIHRyYW5zY2lldmVyIGdldHMgY29uZnVzZWQgYW5kCisJICogZ2FyYmFnZSBpcyByZXR1cm5lZCB3aGVuIHRoZSByZWFkIGlzIHN1YnNlcXVlbnRseSBhYm9ydGVkLgorCSAqCisJICogSXQgaXMgbm90IHN1ZmZpY2llbnQgdG8gd2FpdCBmb3IgQkJTWS4KKwkgKgorCSAqIFdoaWxlIHRoaXMgZ2VuZXJhbGx5IG9ubHkgYXBwbGllcyB0byB0aGUgb2xkZXIgU0g3NzgwLWJhc2VkCisJICogSGlnaGxhbmRlcnMsIHRoZSBzYW1lIGlzc3VlIGNhbiBiZSBvYnNlcnZlZCBvbiBTSDc3ODUgb25lcywKKwkgKiBhbGJlaXQgbGVzcyBmcmVxdWVudGx5LiBTSDc3ODAtYmFzZWQgSGlnaGxhbmRlcnMgbWF5IG5lZWQKKwkgKiB0aGlzIHRvIGJlIGFzIGhpZ2ggYXMgMTAwMCBtcy4KKwkgKi8KKwlpZiAoaWljX3JlYWRfZGVsYXkgJiYgdGltZV9iZWZvcmUoamlmZmllcywgZGV2LT5sYXN0X3JlYWRfdGltZSArCisJCQkJIG1zZWNzX3RvX2ppZmZpZXMoaWljX3JlYWRfZGVsYXkpKSkKKwkJbXNsZWVwKGppZmZpZXNfdG9fbXNlY3MoKGRldi0+bGFzdF9yZWFkX3RpbWUgKworCQkJCW1zZWNzX3RvX2ppZmZpZXMoaWljX3JlYWRfZGVsYXkpKSAtIGppZmZpZXMpKTsKKworCWNudCA9IChkZXYtPmJ1Zl9sZW4gKyAxKSA+PiAxOworCWZvciAoaSA9IDA7IGkgPCBjbnQ7IGkrKykgeworCQlkYXRhW2ldID0gaW9yZWFkMTYoZGV2LT5iYXNlICsgU01UUkRSICsgKGkgKiBzaXplb2YodTE2KSkpOworCQlkZXZfZGJnKGRldi0+ZGV2LCAicmVhZCBkYXRhWyV4XSAweCUwNHhcbiIsIGksIGRhdGFbaV0pOworCX0KKworCXNtYnVzX3JlYWRfZGF0YShkYXRhLCBkZXYtPmJ1ZiwgZGV2LT5idWZfbGVuKTsKKworCWRldi0+bGFzdF9yZWFkX3RpbWUgPSBqaWZmaWVzOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaGlnaGxhbmRlcl9pMmNfd3JpdGUoc3RydWN0IGhpZ2hsYW5kZXJfaTJjX2RldiAqZGV2KQoreworCWludCBpLCBjbnQ7CisJdTE2IGRhdGFbMTZdOworCisJc21idXNfd3JpdGVfZGF0YShkZXYtPmJ1ZiwgZGF0YSwgZGV2LT5idWZfbGVuKTsKKworCWNudCA9IChkZXYtPmJ1Zl9sZW4gKyAxKSA+PiAxOworCWZvciAoaSA9IDA7IGkgPCBjbnQ7IGkrKykgeworCQlpb3dyaXRlMTYoZGF0YVtpXSwgZGV2LT5iYXNlICsgU01UUkRSICsgKGkgKiBzaXplb2YodTE2KSkpOworCQlkZXZfZGJnKGRldi0+ZGV2LCAid3JpdGUgZGF0YVsleF0gMHglMDR4XG4iLCBpLCBkYXRhW2ldKTsKKwl9CisKKwlpZiAoaGlnaGxhbmRlcl9pMmNfd2FpdF9mb3JfYmJzeShkZXYpKQorCQlyZXR1cm4gLUVBR0FJTjsKKworCWhpZ2hsYW5kZXJfaTJjX3N0YXJ0KGRldik7CisKKwlyZXR1cm4gaGlnaGxhbmRlcl9pMmNfd2FpdF94ZmVyX2RvbmUoZGV2KTsKK30KKworc3RhdGljIGludCBoaWdobGFuZGVyX2kyY19zbWJ1c194ZmVyKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcCwgdTE2IGFkZHIsCisJCQkJICB1bnNpZ25lZCBzaG9ydCBmbGFncywgY2hhciByZWFkX3dyaXRlLAorCQkJCSAgdTggY29tbWFuZCwgaW50IHNpemUsCisJCQkJICB1bmlvbiBpMmNfc21idXNfZGF0YSAqZGF0YSkKK3sKKwlzdHJ1Y3QgaGlnaGxhbmRlcl9pMmNfZGV2ICpkZXYgPSBpMmNfZ2V0X2FkYXBkYXRhKGFkYXApOworCWludCByZWFkID0gcmVhZF93cml0ZSAmIEkyQ19TTUJVU19SRUFEOworCXUxNiB0bXA7CisKKwlpbml0X2NvbXBsZXRpb24oJmRldi0+Y21kX2NvbXBsZXRlKTsKKworCWRldl9kYmcoZGV2LT5kZXYsICJhZGRyICUwNHgsIGNvbW1hbmQgJTAyeCwgcmVhZF93cml0ZSAlZCwgc2l6ZSAlZFxuIiwKKwkJYWRkciwgY29tbWFuZCwgcmVhZF93cml0ZSwgc2l6ZSk7CisKKwkvKgorCSAqIFNldCB1cCB0aGUgYnVmZmVyIGFuZCB0cmFuc2ZlciBzaXplCisJICovCisJc3dpdGNoIChzaXplKSB7CisJY2FzZSBJMkNfU01CVVNfQllURV9EQVRBOgorCQlkZXYtPmJ1ZiA9ICZkYXRhLT5ieXRlOworCQlkZXYtPmJ1Zl9sZW4gPSAxOworCQlicmVhazsKKwljYXNlIEkyQ19TTUJVU19JMkNfQkxPQ0tfREFUQToKKwkJZGV2LT5idWYgPSAmZGF0YS0+YmxvY2tbMV07CisJCWRldi0+YnVmX2xlbiA9IGRhdGEtPmJsb2NrWzBdOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlkZXZfZXJyKGRldi0+ZGV2LCAidW5zdXBwb3J0ZWQgY29tbWFuZCAlZFxuIiwgc2l6ZSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qCisJICogRW5jb2RlIHRoZSBtb2RlIHNldHRpbmcKKwkgKi8KKwl0bXAgPSBpb3JlYWQxNihkZXYtPmJhc2UgKyBTTU1SKTsKKwl0bXAgJj0gfihTTU1SX01PREUwIHwgU01NUl9NT0RFMSk7CisKKwlzd2l0Y2ggKGRldi0+YnVmX2xlbikgeworCWNhc2UgMToKKwkJLyogZGVmYXVsdCAqLworCQlicmVhazsKKwljYXNlIDg6CisJCXRtcCB8PSBTTU1SX01PREUwOworCQlicmVhazsKKwljYXNlIDE2OgorCQl0bXAgfD0gU01NUl9NT0RFMTsKKwkJYnJlYWs7CisJY2FzZSAzMjoKKwkJdG1wIHw9IChTTU1SX01PREUwIHwgU01NUl9NT0RFMSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWRldl9lcnIoZGV2LT5kZXYsICJ1bnN1cHBvcnRlZCB4ZmVyIHNpemUgJWRcbiIsIGRldi0+YnVmX2xlbik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlvd3JpdGUxNih0bXAsIGRldi0+YmFzZSArIFNNTVIpOworCisJLyogRW5zdXJlIHdlJ3JlIGluIGEgc2FuZSBzdGF0ZSAqLworCWhpZ2hsYW5kZXJfaTJjX2RvbmUoZGV2KTsKKworCS8qIFNldCBzbGF2ZSBhZGRyZXNzICovCisJaW93cml0ZTE2KChhZGRyIDw8IDEpIHwgcmVhZCwgZGV2LT5iYXNlICsgU01TTUFEUik7CisKKwloaWdobGFuZGVyX2kyY19jb21tYW5kKGRldiwgY29tbWFuZCwgZGV2LT5idWZfbGVuKTsKKworCWlmIChyZWFkKQorCQlyZXR1cm4gaGlnaGxhbmRlcl9pMmNfcmVhZChkZXYpOworCWVsc2UKKwkJcmV0dXJuIGhpZ2hsYW5kZXJfaTJjX3dyaXRlKGRldik7Cit9CisKK3N0YXRpYyB1MzIgaGlnaGxhbmRlcl9pMmNfZnVuYyhzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJcmV0dXJuIEkyQ19GVU5DX1NNQlVTX0JZVEVfREFUQSB8IEkyQ19GVU5DX1NNQlVTX0kyQ19CTE9DSzsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfYWxnb3JpdGhtIGhpZ2hsYW5kZXJfaTJjX2FsZ28gPSB7CisJLnNtYnVzX3hmZXIJPSBoaWdobGFuZGVyX2kyY19zbWJ1c194ZmVyLAorCS5mdW5jdGlvbmFsaXR5CT0gaGlnaGxhbmRlcl9pMmNfZnVuYywKK307CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IGhpZ2hsYW5kZXJfaTJjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IGhpZ2hsYW5kZXJfaTJjX2RldiAqZGV2OworCXN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcDsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKKwlpbnQgcmV0OworCisJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwlpZiAodW5saWtlbHkoIXJlcykpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAibm8gbWVtIHJlc291cmNlXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJZGV2ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGhpZ2hsYW5kZXJfaTJjX2RldiksIEdGUF9LRVJORUwpOworCWlmICh1bmxpa2VseSghZGV2KSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlkZXYtPmJhc2UgPSBpb3JlbWFwX25vY2FjaGUocmVzLT5zdGFydCwgcmVzLT5lbmQgLSByZXMtPnN0YXJ0ICsgMSk7CisJaWYgKHVubGlrZWx5KCFkZXYtPmJhc2UpKSB7CisJCXJldCA9IC1FTlhJTzsKKwkJZ290byBlcnI7CisJfQorCisJZGV2LT5kZXYgPSAmcGRldi0+ZGV2OworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGRldik7CisKKwlkZXYtPmlycSA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCk7CisJaWYgKGlpY19mb3JjZV9wb2xsKQorCQlkZXYtPmlycSA9IDA7CisKKwlpZiAoZGV2LT5pcnEpIHsKKwkJcmV0ID0gcmVxdWVzdF9pcnEoZGV2LT5pcnEsIGhpZ2hsYW5kZXJfaTJjX2lycSwgSVJRRl9ESVNBQkxFRCwKKwkJCQkgIHBkZXYtPm5hbWUsIGRldik7CisJCWlmICh1bmxpa2VseShyZXQpKQorCQkJZ290byBlcnJfdW5tYXA7CisKKwkJaGlnaGxhbmRlcl9pMmNfaXJxX2VuYWJsZShkZXYpOworCX0gZWxzZSB7CisJCWRldl9ub3RpY2UoJnBkZXYtPmRldiwgIm5vIElSUSwgdXNpbmcgcG9sbGluZyBtb2RlXG4iKTsKKwkJaGlnaGxhbmRlcl9pMmNfaXJxX2Rpc2FibGUoZGV2KTsKKwl9CisKKwlkZXYtPmxhc3RfcmVhZF90aW1lID0gamlmZmllczsJLyogaW5pdGlhbCByZWFkIGppZmZpZXMgKi8KKworCWhpZ2hsYW5kZXJfaTJjX3NldHVwKGRldik7CisKKwlhZGFwID0gJmRldi0+YWRhcHRlcjsKKwlpMmNfc2V0X2FkYXBkYXRhKGFkYXAsIGRldik7CisJYWRhcC0+b3duZXIgPSBUSElTX01PRFVMRTsKKwlhZGFwLT5jbGFzcyA9IEkyQ19DTEFTU19IV01PTjsKKwlzdHJsY3B5KGFkYXAtPm5hbWUsICJITCBGUEdBIEkyQyBhZGFwdGVyIiwgc2l6ZW9mKGFkYXAtPm5hbWUpKTsKKwlhZGFwLT5hbGdvID0gJmhpZ2hsYW5kZXJfaTJjX2FsZ287CisJYWRhcC0+ZGV2LnBhcmVudCA9ICZwZGV2LT5kZXY7CisJYWRhcC0+bnIgPSBwZGV2LT5pZDsKKworCS8qCisJICogUmVzZXQgdGhlIGFkYXB0ZXIKKwkgKi8KKwlyZXQgPSBoaWdobGFuZGVyX2kyY19yZXNldChkZXYpOworCWlmICh1bmxpa2VseShyZXQpKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImNvbnRyb2xsZXIgZGlkbid0IGNvbWUgdXBcbiIpOworCQlnb3RvIGVycl9mcmVlX2lycTsKKwl9CisKKwlyZXQgPSBpMmNfYWRkX251bWJlcmVkX2FkYXB0ZXIoYWRhcCk7CisJaWYgKHVubGlrZWx5KHJldCkpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbHVyZSBhZGRpbmcgYWRhcHRlclxuIik7CisJCWdvdG8gZXJyX2ZyZWVfaXJxOworCX0KKworCXJldHVybiAwOworCitlcnJfZnJlZV9pcnE6CisJaWYgKGRldi0+aXJxKQorCQlmcmVlX2lycShkZXYtPmlycSwgZGV2KTsKK2Vycl91bm1hcDoKKwlpb3VubWFwKGRldi0+YmFzZSk7CitlcnI6CisJa2ZyZWUoZGV2KTsKKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBfX2RldmV4aXQgaGlnaGxhbmRlcl9pMmNfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IGhpZ2hsYW5kZXJfaTJjX2RldiAqZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisKKwlpMmNfZGVsX2FkYXB0ZXIoJmRldi0+YWRhcHRlcik7CisKKwlpZiAoZGV2LT5pcnEpCisJCWZyZWVfaXJxKGRldi0+aXJxLCBkZXYpOworCisJaW91bm1hcChkZXYtPmJhc2UpOworCWtmcmVlKGRldik7CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBoaWdobGFuZGVyX2kyY19kcml2ZXIgPSB7CisJLmRyaXZlcgkJPSB7CisJCS5uYW1lCT0gImkyYy1oaWdobGFuZGVyIiwKKwkJLm93bmVyCT0gVEhJU19NT0RVTEUsCisJfSwKKworCS5wcm9iZQkJPSBoaWdobGFuZGVyX2kyY19wcm9iZSwKKwkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKGhpZ2hsYW5kZXJfaTJjX3JlbW92ZSksCit9OworCitzdGF0aWMgaW50IF9faW5pdCBoaWdobGFuZGVyX2kyY19pbml0KHZvaWQpCit7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmaGlnaGxhbmRlcl9pMmNfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGhpZ2hsYW5kZXJfaTJjX2V4aXQodm9pZCkKK3sKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmaGlnaGxhbmRlcl9pMmNfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQoaGlnaGxhbmRlcl9pMmNfaW5pdCk7Cittb2R1bGVfZXhpdChoaWdobGFuZGVyX2kyY19leGl0KTsKKworTU9EVUxFX0FVVEhPUigiUGF1bCBNdW5kdCIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJSZW5lc2FzIEhpZ2hsYW5kZXIgRlBHQSBJMkMvU01CdXMgYWRhcHRlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOworCittb2R1bGVfcGFyYW0oaWljX2ZvcmNlX3BvbGwsIGJvb2wsIDApOworbW9kdWxlX3BhcmFtKGlpY19mb3JjZV9ub3JtYWwsIGJvb2wsIDApOworbW9kdWxlX3BhcmFtKGlpY190aW1lb3V0LCBpbnQsIDApOworbW9kdWxlX3BhcmFtKGlpY19yZWFkX2RlbGF5LCBpbnQsIDApOworCitNT0RVTEVfUEFSTV9ERVNDKGlpY19mb3JjZV9wb2xsLCAiRm9yY2UgcG9sbGluZyBtb2RlIik7CitNT0RVTEVfUEFSTV9ERVNDKGlpY19mb3JjZV9ub3JtYWwsCisJCSAiRm9yY2Ugbm9ybWFsIG1vZGUgKDEwMCBrSHopLCBkZWZhdWx0IGlzIGZhc3QgbW9kZSAoNDAwIGtIeikiKTsKK01PRFVMRV9QQVJNX0RFU0MoaWljX3RpbWVvdXQsICJTZXQgdGltZW91dCB2YWx1ZSBpbiBtc2VjcyAoZGVmYXVsdCAxMDAwIG1zKSIpOworTU9EVUxFX1BBUk1fREVTQyhpaWNfcmVhZF9kZWxheSwKKwkJICJEZWxheSBiZXR3ZWVuIGRhdGEgcmVhZCBjeWNsZXMgKGRlZmF1bHQgMCBtcykiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtbXBjLmMgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLW1wYy5jCmluZGV4IDI3NDQzZjAuLmE5YTQ1ZmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtbXBjLmMKKysrIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1tcGMuYwpAQCAtMzEyLDcgKzMxMiw2IEBACiAJLm5hbWUgPSAiTVBDIGFkYXB0ZXIiLAogCS5pZCA9IEkyQ19IV19NUEMxMDcsCiAJLmFsZ28gPSAmbXBjX2FsZ28sCi0JLmNsYXNzID0gSTJDX0NMQVNTX0hXTU9OIHwgSTJDX0NMQVNTX1NQRCwKIAkudGltZW91dCA9IDEsCiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLW9tYXAuYyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtb21hcC5jCmluZGV4IGU3ZWI3YmYuLjYwODAzOGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtb21hcC5jCisrKyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtb21hcC5jCkBAIC01ODksMTEgKzU4OSwxNiBAQAogCiAJZGV2LT5kZXYgPSAmcGRldi0+ZGV2OwogCWRldi0+aXJxID0gaXJxLT5zdGFydDsKLQlkZXYtPmJhc2UgPSAodm9pZCBfX2lvbWVtICopIElPX0FERFJFU1MobWVtLT5zdGFydCk7CisJZGV2LT5iYXNlID0gaW9yZW1hcChtZW0tPnN0YXJ0LCBtZW0tPmVuZCAtIG1lbS0+c3RhcnQgKyAxKTsKKwlpZiAoIWRldi0+YmFzZSkgeworCQlyID0gLUVOT01FTTsKKwkJZ290byBlcnJfZnJlZV9tZW07CisJfQorCiAJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgZGV2KTsKIAogCWlmICgociA9IG9tYXBfaTJjX2dldF9jbG9ja3MoZGV2KSkgIT0gMCkKLQkJZ290byBlcnJfZnJlZV9tZW07CisJCWdvdG8gZXJyX2lvdW5tYXA7CiAKIAlvbWFwX2kyY191bmlkbGUoZGV2KTsKIApAQCAtNjQwLDYgKzY0NSw4IEBACiAJb21hcF9pMmNfd3JpdGVfcmVnKGRldiwgT01BUF9JMkNfQ09OX1JFRywgMCk7CiAJb21hcF9pMmNfaWRsZShkZXYpOwogCW9tYXBfaTJjX3B1dF9jbG9ja3MoZGV2KTsKK2Vycl9pb3VubWFwOgorCWlvdW5tYXAoZGV2LT5iYXNlKTsKIGVycl9mcmVlX21lbToKIAlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKIAlrZnJlZShkZXYpOwpAQCAtNjYxLDYgKzY2OCw3IEBACiAJaTJjX2RlbF9hZGFwdGVyKCZkZXYtPmFkYXB0ZXIpOwogCW9tYXBfaTJjX3dyaXRlX3JlZyhkZXYsIE9NQVBfSTJDX0NPTl9SRUcsIDApOwogCW9tYXBfaTJjX3B1dF9jbG9ja3MoZGV2KTsKKwlpb3VubWFwKGRldi0+YmFzZSk7CiAJa2ZyZWUoZGV2KTsKIAltZW0gPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOwogCXJlbGVhc2VfbWVtX3JlZ2lvbihtZW0tPnN0YXJ0LCAobWVtLT5lbmQgLSBtZW0tPnN0YXJ0KSArIDEpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1wYXJwb3J0LWxpZ2h0LmMgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXBhcnBvcnQtbGlnaHQuYwppbmRleCBjNmZhZjliLi5iMmI4MzgwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXBhcnBvcnQtbGlnaHQuYworKysgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXBhcnBvcnQtbGlnaHQuYwpAQCAtMTIzLDExICsxMjMsNiBAQAogc3RhdGljIGludCBfX2RldmluaXQgaTJjX3BhcnBvcnRfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlpbnQgZXJyOwotCXN0cnVjdCByZXNvdXJjZSAqcmVzOwotCi0JcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfSU8sIDApOwotCWlmICghcmVxdWVzdF9yZWdpb24ocmVzLT5zdGFydCwgcmVzLT5lbmQgLSByZXMtPnN0YXJ0ICsgMSwgRFJWTkFNRSkpCi0JCXJldHVybiAtRUJVU1k7CiAKIAkvKiBSZXNldCBoYXJkd2FyZSB0byBhIHNhbmUgc3RhdGUgKFNDTCBhbmQgU0RBIGhpZ2gpICovCiAJcGFycG9ydF9zZXRzZGEoTlVMTCwgMSk7CkBAIC0xMzgsMjkgKzEzMywxOSBAQAogCiAJcGFycG9ydF9hZGFwdGVyLmRldi5wYXJlbnQgPSAmcGRldi0+ZGV2OwogCWVyciA9IGkyY19iaXRfYWRkX2J1cygmcGFycG9ydF9hZGFwdGVyKTsKLQlpZiAoZXJyKSB7CisJaWYgKGVycikKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAiVW5hYmxlIHRvIHJlZ2lzdGVyIHdpdGggSTJDXG4iKTsKLQkJZ290byBleGl0X3JlZ2lvbjsKLQl9Ci0JcmV0dXJuIDA7Ci0KLWV4aXRfcmVnaW9uOgotCXJlbGVhc2VfcmVnaW9uKHJlcy0+c3RhcnQsIHJlcy0+ZW5kIC0gcmVzLT5zdGFydCArIDEpOwogCXJldHVybiBlcnI7CiB9CiAKIHN0YXRpYyBpbnQgX19kZXZleGl0IGkyY19wYXJwb3J0X3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewotCXN0cnVjdCByZXNvdXJjZSAqcmVzOwotCiAJaTJjX2RlbF9hZGFwdGVyKCZwYXJwb3J0X2FkYXB0ZXIpOwogCiAJLyogVW4taW5pdCBpZiBuZWVkZWQgKHBvd2VyIG9mZi4uLikgKi8KIAlpZiAoYWRhcHRlcl9wYXJtW3R5cGVdLmluaXQudmFsKQogCQlsaW5lX3NldCgwLCAmYWRhcHRlcl9wYXJtW3R5cGVdLmluaXQpOwogCi0JcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfSU8sIDApOwotCXJlbGVhc2VfcmVnaW9uKHJlcy0+c3RhcnQsIHJlcy0+ZW5kIC0gcmVzLT5zdGFydCArIDEpOwogCXJldHVybiAwOwogfQogCkBAIC0xNzUsMTIgKzE2MCw2IEBACiAKIHN0YXRpYyBpbnQgX19pbml0IGkyY19wYXJwb3J0X2RldmljZV9hZGQodTE2IGFkZHJlc3MpCiB7Ci0Jc3RydWN0IHJlc291cmNlIHJlcyA9IHsKLQkJLnN0YXJ0CT0gYWRkcmVzcywKLQkJLmVuZAk9IGFkZHJlc3MgKyAyLAotCQkubmFtZQk9IERSVk5BTUUsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSU8sCi0JfTsKIAlpbnQgZXJyOwogCiAJcGRldiA9IHBsYXRmb3JtX2RldmljZV9hbGxvYyhEUlZOQU1FLCAtMSk7CkBAIC0xOTAsMTMgKzE2OSw2IEBACiAJCWdvdG8gZXhpdDsKIAl9CiAKLQllcnIgPSBwbGF0Zm9ybV9kZXZpY2VfYWRkX3Jlc291cmNlcyhwZGV2LCAmcmVzLCAxKTsKLQlpZiAoZXJyKSB7Ci0JCXByaW50ayhLRVJOX0VSUiBEUlZOQU1FICI6IERldmljZSByZXNvdXJjZSBhZGRpdGlvbiBmYWlsZWQgIgotCQkgICAgICAgIiglZClcbiIsIGVycik7Ci0JCWdvdG8gZXhpdF9kZXZpY2VfcHV0OwotCX0KLQogCWVyciA9IHBsYXRmb3JtX2RldmljZV9hZGQocGRldik7CiAJaWYgKGVycikgewogCQlwcmludGsoS0VSTl9FUlIgRFJWTkFNRSAiOiBEZXZpY2UgYWRkaXRpb24gZmFpbGVkICglZClcbiIsCkBAIC0yMzEsMTMgKzIwMywxNiBAQAogCQliYXNlID0gREVGQVVMVF9CQVNFOwogCX0KIAorCWlmICghcmVxdWVzdF9yZWdpb24oYmFzZSwgMywgRFJWTkFNRSkpCisJCXJldHVybiAtRUJVU1k7CisKICAgICAgICAgaWYgKCFhZGFwdGVyX3Bhcm1bdHlwZV0uZ2V0c2NsLnZhbCkKIAkJcGFycG9ydF9hbGdvX2RhdGEuZ2V0c2NsID0gTlVMTDsKIAogCS8qIFNldHMgZ2xvYmFsIHBkZXYgYXMgYSBzaWRlIGVmZmVjdCAqLwogCWVyciA9IGkyY19wYXJwb3J0X2RldmljZV9hZGQoYmFzZSk7CiAJaWYgKGVycikKLQkJZ290byBleGl0OworCQlnb3RvIGV4aXRfcmVsZWFzZTsKIAogCWVyciA9IHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmaTJjX3BhcnBvcnRfZHJpdmVyKTsKIAlpZiAoZXJyKQpAQCAtMjQ3LDcgKzIyMiw4IEBACiAKIGV4aXRfZGV2aWNlOgogCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKHBkZXYpOwotZXhpdDoKK2V4aXRfcmVsZWFzZToKKwlyZWxlYXNlX3JlZ2lvbihiYXNlLCAzKTsKIAlyZXR1cm4gZXJyOwogfQogCkBAIC0yNTUsNiArMjMxLDcgQEAKIHsKIAlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmaTJjX3BhcnBvcnRfZHJpdmVyKTsKIAlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcihwZGV2KTsKKwlyZWxlYXNlX3JlZ2lvbihiYXNlLCAzKTsKIH0KIAogTU9EVUxFX0FVVEhPUigiSmVhbiBEZWx2YXJlIDxraGFsaUBsaW51eC1mci5vcmc+Iik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXBjYS1pc2EuYyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtcGNhLWlzYS5jCmluZGV4IGExMTk3ODQuLjllYjc2MjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtcGNhLWlzYS5jCisrKyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtcGNhLWlzYS5jCkBAIC0zNiw4ICszNiw4IEBACiAjZGVmaW5lIERSSVZFUiAiaTJjLXBjYS1pc2EiCiAjZGVmaW5lIElPX1NJWkUgNAogCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBiYXNlICAgPSAweDMzMDsKLXN0YXRpYyBpbnQgaXJxIAkgID0gMTA7CitzdGF0aWMgdW5zaWduZWQgbG9uZyBiYXNlOworc3RhdGljIGludCBpcnEgPSAtMTsKIAogLyogRGF0YSBzaGVldCByZWNvbW1lbmRzIDU5a0h6IGZvciAxMDBrSHogb3BlcmF0aW9uIGR1ZSB0byB2YXJpYXRpb24KICAqIGluIHRoZSBhY3R1YWwgY2xvY2sgcmF0ZSAqLwpAQCAtMTA3LDEzICsxMDcsMjYgQEAKIAkudGltZW91dAk9IDEwMCwKIH07CiAKK3N0YXRpYyBpbnQgX19kZXZpbml0IHBjYV9pc2FfbWF0Y2goc3RydWN0IGRldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgaWQpCit7CisJaW50IG1hdGNoID0gYmFzZSAhPSAwOworCisJaWYgKG1hdGNoKSB7CisJCWlmIChpcnEgPD0gLTEpCisJCQlkZXZfd2FybihkZXYsICJVc2luZyBwb2xsaW5nIG1vZGUgKHNwZWNpZnkgaXJxKVxuIik7CisJfSBlbHNlCisJCWRldl9lcnIoZGV2LCAiUGxlYXNlIHNwZWNpZnkgSS9PIGJhc2VcbiIpOworCisJcmV0dXJuIG1hdGNoOworfQorCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBwY2FfaXNhX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IGlkKQogewogCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnBjYV93YWl0KTsKIAogCWRldl9pbmZvKGRldiwgImkvbyBiYXNlICUjMDhseC4gaXJxICVkXG4iLCBiYXNlLCBpcnEpOwogCi0jaWZkZWYgQ09ORklHX1BQQ19NRVJHRQorI2lmZGVmIENPTkZJR19QUEMKIAlpZiAoY2hlY2tfbGVnYWN5X2lvcG9ydChiYXNlKSkgewogCQlkZXZfZXJyKGRldiwgIkkvTyBhZGRyZXNzICUjMDhseCBpcyBub3QgYXZhaWxhYmxlXG4iLCBiYXNlKTsKIAkJZ290byBvdXQ7CkBAIC0xNTMsNyArMTY2LDcgQEAKIHsKIAlpMmNfZGVsX2FkYXB0ZXIoJnBjYV9pc2Ffb3BzKTsKIAotCWlmIChpcnEgPiAwKSB7CisJaWYgKGlycSA+IC0xKSB7CiAJCWRpc2FibGVfaXJxKGlycSk7CiAJCWZyZWVfaXJxKGlycSwgJnBjYV9pc2Ffb3BzKTsKIAl9CkBAIC0xNjMsNiArMTc2LDcgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBpc2FfZHJpdmVyIHBjYV9pc2FfZHJpdmVyID0geworCS5tYXRjaAkJPSBwY2FfaXNhX21hdGNoLAogCS5wcm9iZQkJPSBwY2FfaXNhX3Byb2JlLAogCS5yZW1vdmUJCT0gX19kZXZleGl0X3AocGNhX2lzYV9yZW1vdmUpLAogCS5kcml2ZXIgPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXBvd2VybWFjLmMgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXBvd2VybWFjLmMKaW5kZXggMGU3YjFjNi4uNjBjYTkxNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1wb3dlcm1hYy5jCisrKyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtcG93ZXJtYWMuYwpAQCAtMjU5LDYgKzI1OSwzNSBAQAogCX0KIAogCXByaW50ayhLRVJOX0lORk8gIlBvd2VyTWFjIGkyYyBidXMgJXMgcmVnaXN0ZXJlZFxuIiwgbmFtZSk7CisKKwlpZiAoIXN0cm5jbXAoYmFzZW5hbWUsICJ1bmktbiIsIDUpKSB7CisJCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnA7CisJCWNvbnN0IHUzMiAqcHJvcDsKKwkJc3RydWN0IGkyY19ib2FyZF9pbmZvIGluZm87CisKKwkJLyogSW5zdGFudGlhdGUgSTJDIG1vdGlvbiBzZW5zb3IgaWYgcHJlc2VudCAqLworCQlucCA9IG9mX2ZpbmRfbm9kZV9ieV9uYW1lKE5VTEwsICJhY2NlbGVyb21ldGVyIik7CisJCWlmIChucCAmJiBvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShucCwgIkFBUEwsYWNjZWxlcm9tZXRlcl8xIikgJiYKKwkJICAgIChwcm9wID0gb2ZfZ2V0X3Byb3BlcnR5KG5wLCAicmVnIiwgTlVMTCkpKSB7CisJCQlpbnQgaTJjX2J1czsKKwkJCWNvbnN0IGNoYXIgKnRtcF9idXM7CisKKwkJCS8qIGxvb2sgZm9yIGJ1cyBlaXRoZXIgdXNpbmcgInJlZyIgb3IgYnkgcGF0aCAqLworCQkJdG1wX2J1cyA9IHN0cnN0cihucC0+ZnVsbF9uYW1lLCAiL2kyYy1idXNAIik7CisJCQlpZiAodG1wX2J1cykKKwkJCQlpMmNfYnVzID0gKih0bXBfYnVzICsgOSkgLSAnMCc7CisJCQllbHNlCisJCQkJaTJjX2J1cyA9ICgoKnByb3ApID4+IDgpICYgMHgwZjsKKworCQkJaWYgKHBtYWNfaTJjX2dldF9jaGFubmVsKGJ1cykgPT0gaTJjX2J1cykgeworCQkJCW1lbXNldCgmaW5mbywgMCwgc2l6ZW9mKHN0cnVjdCBpMmNfYm9hcmRfaW5mbykpOworCQkJCWluZm8uYWRkciA9ICgoKnByb3ApICYgMHhmZikgPj4gMTsKKwkJCQlzdHJsY3B5KGluZm8udHlwZSwgImFtcyIsIEkyQ19OQU1FX1NJWkUpOworCQkJCWkyY19uZXdfZGV2aWNlKGFkYXB0ZXIsICZpbmZvKTsKKwkJCX0KKwkJfQorCX0KKwogCXJldHVybiByYzsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy12aWFwcm8uYyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtdmlhcHJvLmMKaW5kZXggODYyZWIzNS4uNzNkYzUyZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy12aWFwcm8uYworKysgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXZpYXByby5jCkBAIC0zNiw2ICszNiw3IEBACiAgICBWVDgyMzdTICAgICAgICAgICAgMHgzMzcyICAgICAgICAgICAgIHllcwogICAgVlQ4MjUxICAgICAgICAgICAgIDB4MzI4NyAgICAgICAgICAgICB5ZXMKICAgIENYNzAwICAgICAgICAgICAgICAweDgzMjQgICAgICAgICAgICAgeWVzCisgICBWWDgwMC9WWDgyMCAgICAgICAgMHg4MzUzICAgICAgICAgICAgIHllcwogCiAgICBOb3RlOiB3ZSBhc3N1bWUgdGhlcmUgY2FuIG9ubHkgYmUgb25lIGRldmljZSwgd2l0aCBvbmUgU01CdXMgaW50ZXJmYWNlLgogKi8KQEAgLTgyLDYgKzgzLDcgQEAKICNkZWZpbmUgVlQ1OTZfQllURQkJMHgwNAogI2RlZmluZSBWVDU5Nl9CWVRFX0RBVEEJCTB4MDgKICNkZWZpbmUgVlQ1OTZfV09SRF9EQVRBCQkweDBDCisjZGVmaW5lIFZUNTk2X1BST0NfQ0FMTAkJMHgxMAogI2RlZmluZSBWVDU5Nl9CTE9DS19EQVRBCTB4MTQKICNkZWZpbmUgVlQ1OTZfSTJDX0JMT0NLX0RBVEEJMHgzNAogCkBAIC0yMzIsNiArMjM0LDEyIEBACiAJCX0KIAkJc2l6ZSA9IFZUNTk2X1dPUkRfREFUQTsKIAkJYnJlYWs7CisJY2FzZSBJMkNfU01CVVNfUFJPQ19DQUxMOgorCQlvdXRiX3AoY29tbWFuZCwgU01CSFNUQ01EKTsKKwkJb3V0Yl9wKGRhdGEtPndvcmQgJiAweGZmLCBTTUJIU1REQVQwKTsKKwkJb3V0Yl9wKChkYXRhLT53b3JkICYgMHhmZjAwKSA+PiA4LCBTTUJIU1REQVQxKTsKKwkJc2l6ZSA9IFZUNTk2X1BST0NfQ0FMTDsKKwkJYnJlYWs7CiAJY2FzZSBJMkNfU01CVVNfSTJDX0JMT0NLX0RBVEE6CiAJCWlmICghKHZ0NTk2X2ZlYXR1cmVzICYgRkVBVFVSRV9JMkNCTE9DSykpCiAJCQlnb3RvIGV4aXRfdW5zdXBwb3J0ZWQ7CkBAIC0yNjIsNiArMjcwLDkgQEAKIAlpZiAoc3RhdHVzKQogCQlyZXR1cm4gc3RhdHVzOwogCisJaWYgKHNpemUgPT0gVlQ1OTZfUFJPQ19DQUxMKQorCQlyZWFkX3dyaXRlID0gSTJDX1NNQlVTX1JFQUQ7CisKIAlpZiAoKHJlYWRfd3JpdGUgPT0gSTJDX1NNQlVTX1dSSVRFKSB8fCAoc2l6ZSA9PSBWVDU5Nl9RVUlDSykpCiAJCXJldHVybiAwOwogCkBAIC0yNzEsNiArMjgyLDcgQEAKIAkJZGF0YS0+Ynl0ZSA9IGluYl9wKFNNQkhTVERBVDApOwogCQlicmVhazsKIAljYXNlIFZUNTk2X1dPUkRfREFUQToKKwljYXNlIFZUNTk2X1BST0NfQ0FMTDoKIAkJZGF0YS0+d29yZCA9IGluYl9wKFNNQkhTVERBVDApICsgKGluYl9wKFNNQkhTVERBVDEpIDw8IDgpOwogCQlicmVhazsKIAljYXNlIFZUNTk2X0kyQ19CTE9DS19EQVRBOgpAQCAtMjk1LDcgKzMwNyw3IEBACiB7CiAJdTMyIGZ1bmMgPSBJMkNfRlVOQ19TTUJVU19RVUlDSyB8IEkyQ19GVU5DX1NNQlVTX0JZVEUgfAogCSAgICBJMkNfRlVOQ19TTUJVU19CWVRFX0RBVEEgfCBJMkNfRlVOQ19TTUJVU19XT1JEX0RBVEEgfAotCSAgICBJMkNfRlVOQ19TTUJVU19CTE9DS19EQVRBOworCSAgICBJMkNfU01CVVNfUFJPQ19DQUxMIHwgSTJDX0ZVTkNfU01CVVNfQkxPQ0tfREFUQTsKIAogCWlmICh2dDU5Nl9mZWF0dXJlcyAmIEZFQVRVUkVfSTJDQkxPQ0spCiAJCWZ1bmMgfD0gSTJDX0ZVTkNfU01CVVNfSTJDX0JMT0NLOwpAQCAtMzk2LDYgKzQwOCw3IEBACiAKIAlzd2l0Y2ggKHBkZXYtPmRldmljZSkgewogCWNhc2UgUENJX0RFVklDRV9JRF9WSUFfQ1g3MDA6CisJY2FzZSBQQ0lfREVWSUNFX0lEX1ZJQV9WWDgwMDoKIAljYXNlIFBDSV9ERVZJQ0VfSURfVklBXzgyNTE6CiAJY2FzZSBQQ0lfREVWSUNFX0lEX1ZJQV84MjM3OgogCWNhc2UgUENJX0RFVklDRV9JRF9WSUFfODIzN0E6CkBAIC00NTksNiArNDcyLDggQEAKIAkgIC5kcml2ZXJfZGF0YSA9IFNNQkJBMyB9LAogCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX1ZJQSwgUENJX0RFVklDRV9JRF9WSUFfQ1g3MDApLAogCSAgLmRyaXZlcl9kYXRhID0gU01CQkEzIH0sCisJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfVklBLCBQQ0lfREVWSUNFX0lEX1ZJQV9WWDgwMCksCisJICAuZHJpdmVyX2RhdGEgPSBTTUJCQTMgfSwKIAl7IDAsIH0KIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2NoaXBzL0tjb25maWcgYi9kcml2ZXJzL2kyYy9jaGlwcy9LY29uZmlnCmluZGV4IGE5NWNiOTQuLjE3MzU2ODIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2NoaXBzL0tjb25maWcKKysrIGIvZHJpdmVycy9pMmMvY2hpcHMvS2NvbmZpZwpAQCAtMTcyLDQgKzE3MiwxNSBAQAogCSAgYW5kIG90aGVyIGZlYXR1cmVzIHRoYXQgYXJlIG9mdGVuIHVzZWQgaW4gcG9ydGFibGUgZGV2aWNlcyBsaWtlCiAJICBjZWxsIHBob25lcyBhbmQgUERBcy4KIAorY29uZmlnIE1DVV9NUEM4MzQ5RU1JVFgKKwl0cmlzdGF0ZSAiTVBDODM0OUUtbUlUWCBNQ1UgZHJpdmVyIgorCWRlcGVuZHMgb24gSTJDICYmIFBQQ184M3h4CisJc2VsZWN0IEdFTkVSSUNfR1BJTworCXNlbGVjdCBBUkNIX1JFUVVJUkVfR1BJT0xJQgorCWhlbHAKKwkgIFNheSBZIGhlcmUgdG8gZW5hYmxlIHNvZnQgcG93ZXItb2ZmIGZ1bmN0aW9uYWxpdHkgb24gdGhlIEZyZWVzY2FsZQorCSAgYm9hcmRzIHdpdGggdGhlIE1QQzgzNDlFLW1JVFgtY29tcGF0aWJsZSBNQ1UgY2hpcHMuIFRoaXMgZHJpdmVyIHdpbGwKKwkgIGFsc28gcmVnaXN0ZXIgTUNVIEdQSU9zIHdpdGggdGhlIGdlbmVyaWMgR1BJTyBBUEksIHNvIHlvdSdsbCBhYmxlCisJICB0byB1c2UgTUNVIHBpbnMgYXMgR1BJT3MuCisKIGVuZG1lbnUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2NoaXBzL01ha2VmaWxlIGIvZHJpdmVycy9pMmMvY2hpcHMvTWFrZWZpbGUKaW5kZXggMzllM2U2OS4uY2E1MjBmYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvY2hpcHMvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9pMmMvY2hpcHMvTWFrZWZpbGUKQEAgLTIxLDYgKzIxLDcgQEAKIG9iai0kKENPTkZJR19UUFM2NTAxMCkJCSs9IHRwczY1MDEwLm8KIG9iai0kKENPTkZJR19NRU5FTEFVUykJCSs9IG1lbmVsYXVzLm8KIG9iai0kKENPTkZJR19TRU5TT1JTX1RTTDI1NTApCSs9IHRzbDI1NTAubworb2JqLSQoQ09ORklHX01DVV9NUEM4MzQ5RU1JVFgpCSs9IG1jdV9tcGM4MzQ5ZW1pdHgubwogCiBpZmVxICgkKENPTkZJR19JMkNfREVCVUdfQ0hJUCkseSkKIEVYVFJBX0NGTEFHUyArPSAtRERFQlVHCmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9jaGlwcy9hdDI0LmMgYi9kcml2ZXJzL2kyYy9jaGlwcy9hdDI0LmMKaW5kZXggMmE0YWNiMi4uZDQ3NzU1MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvY2hpcHMvYXQyNC5jCisrKyBiL2RyaXZlcnMvaTJjL2NoaXBzL2F0MjQuYwpAQCAtNDYwLDcgKzQ2MCw2IEBACiAJICovCiAJYXQyNC0+YmluLmF0dHIubmFtZSA9ICJlZXByb20iOwogCWF0MjQtPmJpbi5hdHRyLm1vZGUgPSBjaGlwLmZsYWdzICYgQVQyNF9GTEFHX0lSVUdPID8gU19JUlVHTyA6IFNfSVJVU1I7Ci0JYXQyNC0+YmluLmF0dHIub3duZXIgPSBUSElTX01PRFVMRTsKIAlhdDI0LT5iaW4ucmVhZCA9IGF0MjRfYmluX3JlYWQ7CiAJYXQyNC0+YmluLnNpemUgPSBjaGlwLmJ5dGVfbGVuOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9jaGlwcy9kczE2ODIuYyBiL2RyaXZlcnMvaTJjL2NoaXBzL2RzMTY4Mi5jCmluZGV4IDIzYmU0ZDQuLmYzZWU0YTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2NoaXBzL2RzMTY4Mi5jCisrKyBiL2RyaXZlcnMvaTJjL2NoaXBzL2RzMTY4Mi5jCkBAIC0xOTAsNyArMTkwLDYgQEAKIAkuYXR0ciA9IHsKIAkJLm5hbWUgPSAiZWVwcm9tIiwKIAkJLm1vZGUgPSBTX0lSVUdPIHwgU19JV1VTUiwKLQkJLm93bmVyID0gVEhJU19NT0RVTEUsCiAJfSwKIAkuc2l6ZSA9IERTMTY4Ml9FRVBST01fU0laRSwKIAkucmVhZCA9IGRzMTY4Ml9lZXByb21fcmVhZCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2NoaXBzL2lzcDEzMDFfb21hcC5jIGIvZHJpdmVycy9pMmMvY2hpcHMvaXNwMTMwMV9vbWFwLmMKaW5kZXggNDY1NWI3OS4uMjg5MDJlYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvY2hpcHMvaXNwMTMwMV9vbWFwLmMKKysrIGIvZHJpdmVycy9pMmMvY2hpcHMvaXNwMTMwMV9vbWFwLmMKQEAgLTQ5LDEwICs0OSw5IEBACiAKIHN0cnVjdCBpc3AxMzAxIHsKIAlzdHJ1Y3Qgb3RnX3RyYW5zY2VpdmVyCW90ZzsKLQlzdHJ1Y3QgaTJjX2NsaWVudAljbGllbnQ7CisJc3RydWN0IGkyY19jbGllbnQJKmNsaWVudDsKIAl2b2lkCQkJKCppMmNfcmVsZWFzZSkoc3RydWN0IGRldmljZSAqZGV2KTsKIAotCWludAkJCWlycTsKIAlpbnQJCQlpcnFfdHlwZTsKIAogCXUzMgkJCWxhc3Rfb3RnX2N0cmw7CkBAIC0xMzgsMTQgKzEzNyw2IEBACiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKLS8qIG9ubHkgdHdvIGFkZHJlc3NlcyBwb3NzaWJsZSAqLwotI2RlZmluZQlJU1BfQkFTRQkJMHgyYwotc3RhdGljIHVuc2lnbmVkIHNob3J0IG5vcm1hbF9pMmNbXSA9IHsKLQlJU1BfQkFTRSwgSVNQX0JBU0UgKyAxLAotCUkyQ19DTElFTlRfRU5EIH07Ci0KLUkyQ19DTElFTlRfSU5TTU9EOwotCiBzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgaXNwMTMwMV9kcml2ZXI7CiAKIC8qIHNtYnVzIGFwaXMgYXJlIHVzZWQgZm9yIHBvcnRhYmlsaXR5ICovCkBAIC0xNTMsMjUgKzE0NCwyNSBAQAogc3RhdGljIGlubGluZSB1OAogaXNwMTMwMV9nZXRfdTgoc3RydWN0IGlzcDEzMDEgKmlzcCwgdTggcmVnKQogewotCXJldHVybiBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoJmlzcC0+Y2xpZW50LCByZWcgKyAwKTsKKwlyZXR1cm4gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGlzcC0+Y2xpZW50LCByZWcgKyAwKTsKIH0KIAogc3RhdGljIGlubGluZSBpbnQKIGlzcDEzMDFfZ2V0X3UxNihzdHJ1Y3QgaXNwMTMwMSAqaXNwLCB1OCByZWcpCiB7Ci0JcmV0dXJuIGkyY19zbWJ1c19yZWFkX3dvcmRfZGF0YSgmaXNwLT5jbGllbnQsIHJlZyk7CisJcmV0dXJuIGkyY19zbWJ1c19yZWFkX3dvcmRfZGF0YShpc3AtPmNsaWVudCwgcmVnKTsKIH0KIAogc3RhdGljIGlubGluZSBpbnQKIGlzcDEzMDFfc2V0X2JpdHMoc3RydWN0IGlzcDEzMDEgKmlzcCwgdTggcmVnLCB1OCBiaXRzKQogewotCXJldHVybiBpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKCZpc3AtPmNsaWVudCwgcmVnICsgMCwgYml0cyk7CisJcmV0dXJuIGkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoaXNwLT5jbGllbnQsIHJlZyArIDAsIGJpdHMpOwogfQogCiBzdGF0aWMgaW5saW5lIGludAogaXNwMTMwMV9jbGVhcl9iaXRzKHN0cnVjdCBpc3AxMzAxICppc3AsIHU4IHJlZywgdTggYml0cykKIHsKLQlyZXR1cm4gaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YSgmaXNwLT5jbGllbnQsIHJlZyArIDEsIGJpdHMpOworCXJldHVybiBpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGlzcC0+Y2xpZW50LCByZWcgKyAxLCBiaXRzKTsKIH0KIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KQEAgLTM0OSwxMCArMzQwLDEwIEBACiAJaW50IHN0YXR1czsKIAogCWlmIChpc3AgJiYgIXRlc3RfYW5kX3NldF9iaXQod29yaywgJmlzcC0+dG9kbykpIHsKLQkJKHZvaWQpIGdldF9kZXZpY2UoJmlzcC0+Y2xpZW50LmRldik7CisJCSh2b2lkKSBnZXRfZGV2aWNlKCZpc3AtPmNsaWVudC0+ZGV2KTsKIAkJc3RhdHVzID0gc2NoZWR1bGVfd29yaygmaXNwLT53b3JrKTsKIAkJaWYgKCFzdGF0dXMgJiYgIWlzcC0+d29ya2luZykKLQkJCWRldl92ZGJnKCZpc3AtPmNsaWVudC5kZXYsCisJCQlkZXZfdmRiZygmaXNwLT5jbGllbnQtPmRldiwKIAkJCQkid29yayBpdGVtICVkIG1heSBiZSBsb3N0XG4iLCB3b3JrKTsKIAl9CiB9CkBAIC0xMTM1LDcgKzExMjYsNyBAQAogCQkvKiB0cmFuc2ZlciBzdGF0ZSBmcm9tIG90ZyBlbmdpbmUgdG8gaXNwMTMwMSAqLwogCQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KFdPUktfVVBEQVRFX0lTUCwgJmlzcC0+dG9kbykpIHsKIAkJCW90Z191cGRhdGVfaXNwKGlzcCk7Ci0JCQlwdXRfZGV2aWNlKCZpc3AtPmNsaWVudC5kZXYpOworCQkJcHV0X2RldmljZSgmaXNwLT5jbGllbnQtPmRldik7CiAJCX0KICNlbmRpZgogCQkvKiB0cmFuc2ZlciBzdGF0ZSBmcm9tIGlzcDEzMDEgdG8gb3RnIGVuZ2luZSAqLwpAQCAtMTE0Myw3ICsxMTM0LDcgQEAKIAkJCXU4CQlzdGF0ID0gaXNwMTMwMV9jbGVhcl9sYXRjaChpc3ApOwogCiAJCQlpc3BfdXBkYXRlX290Zyhpc3AsIHN0YXQpOwotCQkJcHV0X2RldmljZSgmaXNwLT5jbGllbnQuZGV2KTsKKwkJCXB1dF9kZXZpY2UoJmlzcC0+Y2xpZW50LT5kZXYpOwogCQl9CiAKIAkJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChXT1JLX0hPU1RfUkVTVU1FLCAmaXNwLT50b2RvKSkgewpAQCAtMTE3OCw3ICsxMTY5LDcgQEAKIAkJCX0KIAkJCWhvc3RfcmVzdW1lKGlzcCk7CiAJCQkvLyBtZGVsYXkoMTApOwotCQkJcHV0X2RldmljZSgmaXNwLT5jbGllbnQuZGV2KTsKKwkJCXB1dF9kZXZpY2UoJmlzcC0+Y2xpZW50LT5kZXYpOwogCQl9CiAKIAkJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChXT1JLX1RJTUVSLCAmaXNwLT50b2RvKSkgewpAQCAtMTE4NywxNSArMTE3OCwxNSBAQAogCQkJaWYgKCFzdG9wKQogCQkJCW1vZF90aW1lcigmaXNwLT50aW1lciwgamlmZmllcyArIFRJTUVSX0pJRkZJRVMpOwogI2VuZGlmCi0JCQlwdXRfZGV2aWNlKCZpc3AtPmNsaWVudC5kZXYpOworCQkJcHV0X2RldmljZSgmaXNwLT5jbGllbnQtPmRldik7CiAJCX0KIAogCQlpZiAoaXNwLT50b2RvKQotCQkJZGV2X3ZkYmcoJmlzcC0+Y2xpZW50LmRldiwKKwkJCWRldl92ZGJnKCZpc3AtPmNsaWVudC0+ZGV2LAogCQkJCSJ3b3JrIGRvbmUsIHRvZG8gPSAweCVseFxuIiwKIAkJCQlpc3AtPnRvZG8pOwogCQlpZiAoc3RvcCkgewotCQkJZGV2X2RiZygmaXNwLT5jbGllbnQuZGV2LCAic3RvcFxuIik7CisJCQlkZXZfZGJnKCZpc3AtPmNsaWVudC0+ZGV2LCAic3RvcFxuIik7CiAJCQlicmVhazsKIAkJfQogCX0gd2hpbGUgKGlzcC0+dG9kbyk7CkBAIC0xMjE5LDcgKzEyMTAsNyBAQAogewogCXN0cnVjdCBpc3AxMzAxCSppc3A7CiAKLQlpc3AgPSBjb250YWluZXJfb2YoZGV2LCBzdHJ1Y3QgaXNwMTMwMSwgY2xpZW50LmRldik7CisJaXNwID0gZGV2X2dldF9kcnZkYXRhKGRldik7CiAKIAkvKiB1Z2x5IC0tIGkyYyBoaWphY2tzIG91ciBtZW1vcnkgaG9vayB0byB3YWl0X2Zvcl9jb21wbGV0aW9uKCkgKi8KIAlpZiAoaXNwLT5pMmNfcmVsZWFzZSkKQEAgLTEyMjksMTUgKzEyMjAsMTUgQEAKIAogc3RhdGljIHN0cnVjdCBpc3AxMzAxICp0aGVfdHJhbnNjZWl2ZXI7CiAKLXN0YXRpYyBpbnQgaXNwMTMwMV9kZXRhY2hfY2xpZW50KHN0cnVjdCBpMmNfY2xpZW50ICppMmMpCitzdGF0aWMgaW50IF9fZXhpdCBpc3AxMzAxX3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqaTJjKQogewogCXN0cnVjdCBpc3AxMzAxCSppc3A7CiAKLQlpc3AgPSBjb250YWluZXJfb2YoaTJjLCBzdHJ1Y3QgaXNwMTMwMSwgY2xpZW50KTsKKwlpc3AgPSBpMmNfZ2V0X2NsaWVudGRhdGEoaTJjKTsKIAogCWlzcDEzMDFfY2xlYXJfYml0cyhpc3AsIElTUDEzMDFfSU5URVJSVVBUX0ZBTExJTkcsIH4wKTsKIAlpc3AxMzAxX2NsZWFyX2JpdHMoaXNwLCBJU1AxMzAxX0lOVEVSUlVQVF9SSVNJTkcsIH4wKTsKLQlmcmVlX2lycShpc3AtPmlycSwgaXNwKTsKKwlmcmVlX2lycShpMmMtPmlycSwgaXNwKTsKICNpZmRlZglDT05GSUdfVVNCX09URwogCW90Z191bmJpbmQoaXNwKTsKICNlbmRpZgpAQCAtMTI1Miw3ICsxMjQzLDcgQEAKIAlwdXRfZGV2aWNlKCZpMmMtPmRldik7CiAJdGhlX3RyYW5zY2VpdmVyID0gMDsKIAotCXJldHVybiBpMmNfZGV0YWNoX2NsaWVudChpMmMpOworCXJldHVybiAwOwogfQogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwpAQCAtMTI4NSw3ICsxMjc2LDcgQEAKIAlpc3AxMzAxX3NldF9iaXRzKGlzcCwgSVNQMTMwMV9JTlRFUlJVUFRfRkFMTElORywKIAkJSU5UUl9WQlVTX1ZMRCB8IElOVFJfU0VTU19WTEQgfCBJTlRSX0lEX0dORCk7CiAKLQlkZXZfaW5mbygmaXNwLT5jbGllbnQuZGV2LCAicmVhZHkgZm9yIGR1YWwtcm9sZSBVU0IgLi4uXG4iKTsKKwlkZXZfaW5mbygmaXNwLT5jbGllbnQtPmRldiwgInJlYWR5IGZvciBkdWFsLXJvbGUgVVNCIC4uLlxuIik7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTEzMTAsNyArMTMwMSw3IEBACiAKICNpZmRlZglDT05GSUdfVVNCX09URwogCWlzcC0+b3RnLmhvc3QgPSBob3N0OwotCWRldl9kYmcoJmlzcC0+Y2xpZW50LmRldiwgInJlZ2lzdGVyZWQgaG9zdFxuIik7CisJZGV2X2RiZygmaXNwLT5jbGllbnQtPmRldiwgInJlZ2lzdGVyZWQgaG9zdFxuIik7CiAJaG9zdF9zdXNwZW5kKGlzcCk7CiAJaWYgKGlzcC0+b3RnLmdhZGdldCkKIAkJcmV0dXJuIGlzcDEzMDFfb3RnX2VuYWJsZShpc3ApOwpAQCAtMTMyNSw3ICsxMzE2LDcgQEAKIAlpZiAobWFjaGluZV9pc19vbWFwX2gyKCkpCiAJCWlzcDEzMDFfc2V0X2JpdHMoaXNwLCBJU1AxMzAxX01PREVfQ09OVFJPTF8xLCBNQzFfREFUX1NFMCk7CiAKLQlkZXZfaW5mbygmaXNwLT5jbGllbnQuZGV2LCAiQS1Ib3N0IHNlc3Npb25zIG9rXG4iKTsKKwlkZXZfaW5mbygmaXNwLT5jbGllbnQtPmRldiwgIkEtSG9zdCBzZXNzaW9ucyBva1xuIik7CiAJaXNwMTMwMV9zZXRfYml0cyhpc3AsIElTUDEzMDFfSU5URVJSVVBUX1JJU0lORywKIAkJSU5UUl9JRF9HTkQpOwogCWlzcDEzMDFfc2V0X2JpdHMoaXNwLCBJU1AxMzAxX0lOVEVSUlVQVF9GQUxMSU5HLApAQCAtMTM0Myw3ICsxMzM0LDcgQEAKIAlyZXR1cm4gMDsKIAogI2Vsc2UKLQlkZXZfZGJnKCZpc3AtPmNsaWVudC5kZXYsICJob3N0IHNlc3Npb25zIG5vdCBhbGxvd2VkXG4iKTsKKwlkZXZfZGJnKCZpc3AtPmNsaWVudC0+ZGV2LCAiaG9zdCBzZXNzaW9ucyBub3QgYWxsb3dlZFxuIik7CiAJcmV0dXJuIC1FSU5WQUw7CiAjZW5kaWYKIApAQCAtMTM3MCw3ICsxMzYxLDcgQEAKIAogI2lmZGVmCUNPTkZJR19VU0JfT1RHCiAJaXNwLT5vdGcuZ2FkZ2V0ID0gZ2FkZ2V0OwotCWRldl9kYmcoJmlzcC0+Y2xpZW50LmRldiwgInJlZ2lzdGVyZWQgZ2FkZ2V0XG4iKTsKKwlkZXZfZGJnKCZpc3AtPmNsaWVudC0+ZGV2LCAicmVnaXN0ZXJlZCBnYWRnZXRcbiIpOwogCS8qIGdhZGdldCBkcml2ZXIgbWF5IGJlIHN1c3BlbmRlZCB1bnRpbCB2YnVzX2Nvbm5lY3QgKCkgKi8KIAlpZiAoaXNwLT5vdGcuaG9zdCkKIAkJcmV0dXJuIGlzcDEzMDFfb3RnX2VuYWJsZShpc3ApOwpAQCAtMTM5NSw3ICsxMzg2LDcgQEAKIAkJSU5UUl9TRVNTX1ZMRCk7CiAJaXNwMTMwMV9zZXRfYml0cyhpc3AsIElTUDEzMDFfSU5URVJSVVBUX0ZBTExJTkcsCiAJCUlOVFJfVkJVU19WTEQpOwotCWRldl9pbmZvKCZpc3AtPmNsaWVudC5kZXYsICJCLVBlcmlwaGVyYWwgc2Vzc2lvbnMgb2tcbiIpOworCWRldl9pbmZvKCZpc3AtPmNsaWVudC0+ZGV2LCAiQi1QZXJpcGhlcmFsIHNlc3Npb25zIG9rXG4iKTsKIAlkdW1wX3JlZ3MoaXNwLCBfX2Z1bmNfXyk7CiAKIAkvKiBJZiB0aGlzIGhhcyBhIE1pbmktQUIgY29ubmVjdG9yLCB0aGlzIG1vZGUgaXMgaGlnaGx5CkBAIC0xNDA4LDcgKzEzOTksNyBAQAogCXJldHVybiAwOwogCiAjZWxzZQotCWRldl9kYmcoJmlzcC0+Y2xpZW50LmRldiwgInBlcmlwaGVyYWwgc2Vzc2lvbnMgbm90IGFsbG93ZWRcbiIpOworCWRldl9kYmcoJmlzcC0+Y2xpZW50LT5kZXYsICJwZXJpcGhlcmFsIHNlc3Npb25zIG5vdCBhbGxvd2VkXG4iKTsKIAlyZXR1cm4gLUVJTlZBTDsKICNlbmRpZgogfQpAQCAtMTUwOCwxMiArMTQ5OSwxMCBAQAogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCi0vKiBubyBlcnJvciByZXR1cm5zLCB0aGV5J2QganVzdCBtYWtlIGJ1cyBzY2FubmluZyBzdG9wICovCi1zdGF0aWMgaW50IGlzcDEzMDFfcHJvYmUoc3RydWN0IGkyY19hZGFwdGVyICpidXMsIGludCBhZGRyZXNzLCBpbnQga2luZCkKK3N0YXRpYyBpbnQgX19pbml0IGlzcDEzMDFfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmkyYykKIHsKIAlpbnQJCQlzdGF0dXM7CiAJc3RydWN0IGlzcDEzMDEJCSppc3A7Ci0Jc3RydWN0IGkyY19jbGllbnQJKmkyYzsKIAogCWlmICh0aGVfdHJhbnNjZWl2ZXIpCiAJCXJldHVybiAwOwpAQCAtMTUyNywzNyArMTUxNiwxOSBAQAogCWlzcC0+dGltZXIuZnVuY3Rpb24gPSBpc3AxMzAxX3RpbWVyOwogCWlzcC0+dGltZXIuZGF0YSA9ICh1bnNpZ25lZCBsb25nKSBpc3A7CiAKLQlpc3AtPmlycSA9IC0xOwotCWlzcC0+Y2xpZW50LmFkZHIgPSBhZGRyZXNzOwotCWkyY19zZXRfY2xpZW50ZGF0YSgmaXNwLT5jbGllbnQsIGlzcCk7Ci0JaXNwLT5jbGllbnQuYWRhcHRlciA9IGJ1czsKLQlpc3AtPmNsaWVudC5kcml2ZXIgPSAmaXNwMTMwMV9kcml2ZXI7Ci0Jc3RybGNweShpc3AtPmNsaWVudC5uYW1lLCBEUklWRVJfTkFNRSwgSTJDX05BTUVfU0laRSk7Ci0JaTJjID0gJmlzcC0+Y2xpZW50OworCWkyY19zZXRfY2xpZW50ZGF0YShpMmMsIGlzcCk7CisJaXNwLT5jbGllbnQgPSBpMmM7CiAKLQkvKiBpZiB0aGlzIGlzIGEgdHJ1ZSBwcm9iZSwgdmVyaWZ5IHRoZSBjaGlwIC4uLiAqLwotCWlmIChraW5kIDwgMCkgewotCQlzdGF0dXMgPSBpc3AxMzAxX2dldF91MTYoaXNwLCBJU1AxMzAxX1ZFTkRPUl9JRCk7Ci0JCWlmIChzdGF0dXMgIT0gSTJDX1ZFTkRPUl9JRF9QSElMSVBTKSB7Ci0JCQlkZXZfZGJnKCZidXMtPmRldiwgImFkZHIgJWQgbm90IHBoaWxpcHMgaWQ6ICVkXG4iLAotCQkJCWFkZHJlc3MsIHN0YXR1cyk7Ci0JCQlnb3RvIGZhaWwxOwotCQl9Ci0JCXN0YXR1cyA9IGlzcDEzMDFfZ2V0X3UxNihpc3AsIElTUDEzMDFfUFJPRFVDVF9JRCk7Ci0JCWlmIChzdGF0dXMgIT0gSTJDX1BST0RVQ1RfSURfUEhJTElQU18xMzAxKSB7Ci0JCQlkZXZfZGJnKCZidXMtPmRldiwgIiVkIG5vdCBpc3AxMzAxLCAlZFxuIiwKLQkJCQlhZGRyZXNzLCBzdGF0dXMpOwotCQkJZ290byBmYWlsMTsKLQkJfQorCS8qIHZlcmlmeSB0aGUgY2hpcCAoc2hvdWxkbid0IGJlIG5lY2VzYXJ5KSAqLworCXN0YXR1cyA9IGlzcDEzMDFfZ2V0X3UxNihpc3AsIElTUDEzMDFfVkVORE9SX0lEKTsKKwlpZiAoc3RhdHVzICE9IEkyQ19WRU5ET1JfSURfUEhJTElQUykgeworCQlkZXZfZGJnKCZpMmMtPmRldiwgIm5vdCBwaGlsaXBzIGlkOiAlZFxuIiwgc3RhdHVzKTsKKwkJZ290byBmYWlsOwogCX0KLQotCXN0YXR1cyA9IGkyY19hdHRhY2hfY2xpZW50KGkyYyk7Ci0JaWYgKHN0YXR1cyA8IDApIHsKLQkJZGV2X2RiZygmYnVzLT5kZXYsICJjYW4ndCBhdHRhY2ggJXMgdG8gZGV2aWNlICVkLCBlcnIgJWRcbiIsCi0JCQkJRFJJVkVSX05BTUUsIGFkZHJlc3MsIHN0YXR1cyk7Ci1mYWlsMToKLQkJa2ZyZWUoaXNwKTsKLQkJcmV0dXJuIDA7CisJc3RhdHVzID0gaXNwMTMwMV9nZXRfdTE2KGlzcCwgSVNQMTMwMV9QUk9EVUNUX0lEKTsKKwlpZiAoc3RhdHVzICE9IEkyQ19QUk9EVUNUX0lEX1BISUxJUFNfMTMwMSkgeworCQlkZXZfZGJnKCZpMmMtPmRldiwgIm5vdCBpc3AxMzAxLCAlZFxuIiwgc3RhdHVzKTsKKwkJZ290byBmYWlsOwogCX0KIAlpc3AtPmkyY19yZWxlYXNlID0gaTJjLT5kZXYucmVsZWFzZTsKIAlpMmMtPmRldi5yZWxlYXNlID0gaXNwMTMwMV9yZWxlYXNlOwpAQCAtMTU4Niw3ICsxNTU3LDcgQEAKIAlzdGF0dXMgPSBvdGdfYmluZChpc3ApOwogCWlmIChzdGF0dXMgPCAwKSB7CiAJCWRldl9kYmcoJmkyYy0+ZGV2LCAiY2FuJ3QgYmluZCBPVEdcbiIpOwotCQlnb3RvIGZhaWwyOworCQlnb3RvIGZhaWw7CiAJfQogI2VuZGlmCiAKQEAgLTE1OTksMjYgKzE1NzAsMjEgQEAKIAogCQkvKiBJUlEgd2lyZWQgYXQgTTE0ICovCiAJCW9tYXBfY2ZnX3JlZyhNMTRfMTUxMF9HUElPMik7Ci0JCWlzcC0+aXJxID0gT01BUF9HUElPX0lSUSgyKTsKIAkJaWYgKGdwaW9fcmVxdWVzdCgyLCAiaXNwMTMwMSIpID09IDApCiAJCQlncGlvX2RpcmVjdGlvbl9pbnB1dCgyKTsKIAkJaXNwLT5pcnFfdHlwZSA9IElSUUZfVFJJR0dFUl9GQUxMSU5HOwogCX0KIAogCWlzcC0+aXJxX3R5cGUgfD0gSVJRRl9TQU1QTEVfUkFORE9NOwotCXN0YXR1cyA9IHJlcXVlc3RfaXJxKGlzcC0+aXJxLCBpc3AxMzAxX2lycSwKKwlzdGF0dXMgPSByZXF1ZXN0X2lycShpMmMtPmlycSwgaXNwMTMwMV9pcnEsCiAJCQlpc3AtPmlycV90eXBlLCBEUklWRVJfTkFNRSwgaXNwKTsKIAlpZiAoc3RhdHVzIDwgMCkgewogCQlkZXZfZGJnKCZpMmMtPmRldiwgImNhbid0IGdldCBJUlEgJWQsIGVyciAlZFxuIiwKLQkJCQlpc3AtPmlycSwgc3RhdHVzKTsKLSNpZmRlZglDT05GSUdfVVNCX09URwotZmFpbDI6Ci0jZW5kaWYKLQkJaTJjX2RldGFjaF9jbGllbnQoaTJjKTsKLQkJZ290byBmYWlsMTsKKwkJCQlpMmMtPmlycSwgc3RhdHVzKTsKKwkJZ290byBmYWlsOwogCX0KIAotCWlzcC0+b3RnLmRldiA9ICZpc3AtPmNsaWVudC5kZXY7CisJaXNwLT5vdGcuZGV2ID0gJmkyYy0+ZGV2OwogCWlzcC0+b3RnLmxhYmVsID0gRFJJVkVSX05BTUU7CiAKIAlpc3AtPm90Zy5zZXRfaG9zdCA9IGlzcDEzMDFfc2V0X2hvc3QsCkBAIC0xNjQ5LDIyICsxNjE1LDI1IEBACiAJCQlzdGF0dXMpOwogCiAJcmV0dXJuIDA7CisKK2ZhaWw6CisJa2ZyZWUoaXNwKTsKKwlyZXR1cm4gLUVOT0RFVjsKIH0KIAotc3RhdGljIGludCBpc3AxMzAxX3NjYW5fYnVzKHN0cnVjdCBpMmNfYWRhcHRlciAqYnVzKQotewotCWlmICghaTJjX2NoZWNrX2Z1bmN0aW9uYWxpdHkoYnVzLCBJMkNfRlVOQ19TTUJVU19CWVRFX0RBVEEKLQkJCXwgSTJDX0ZVTkNfU01CVVNfUkVBRF9XT1JEX0RBVEEpKQotCQlyZXR1cm4gLUVJTlZBTDsKLQlyZXR1cm4gaTJjX3Byb2JlKGJ1cywgJmFkZHJfZGF0YSwgaXNwMTMwMV9wcm9iZSk7Ci19CitzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgaXNwMTMwMV9pZFtdID0geworCXsgImlzcDEzMDFfb21hcCIsIDAgfSwKKwl7IH0KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKGkyYywgaXNwMTMwMV9pZCk7CiAKIHN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBpc3AxMzAxX2RyaXZlciA9IHsKIAkuZHJpdmVyID0gewogCQkubmFtZQk9ICJpc3AxMzAxX29tYXAiLAogCX0sCi0JLmF0dGFjaF9hZGFwdGVyCT0gaXNwMTMwMV9zY2FuX2J1cywKLQkuZGV0YWNoX2NsaWVudAk9IGlzcDEzMDFfZGV0YWNoX2NsaWVudCwKKwkucHJvYmUJCT0gaXNwMTMwMV9wcm9iZSwKKwkucmVtb3ZlCQk9IF9fZXhpdF9wKGlzcDEzMDFfcmVtb3ZlKSwKKwkuaWRfdGFibGUJPSBpc3AxMzAxX2lkLAogfTsKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2NoaXBzL21jdV9tcGM4MzQ5ZW1pdHguYyBiL2RyaXZlcnMvaTJjL2NoaXBzL21jdV9tcGM4MzQ5ZW1pdHguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MmE5YmNiCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9pMmMvY2hpcHMvbWN1X21wYzgzNDllbWl0eC5jCkBAIC0wLDAgKzEsMjA5IEBACisvKgorICogUG93ZXIgTWFuYWdlbWVudCBhbmQgR1BJTyBleHBhbmRlciBkcml2ZXIgZm9yIE1QQzgzNDlFLW1JVFgtY29tcGF0aWJsZSBNQ1UKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggIE1vbnRhVmlzdGEgU29mdHdhcmUsIEluYy4KKyAqCisgKiBBdXRob3I6IEFudG9uIFZvcm9udHNvdiA8YXZvcm9udHNvdkBydS5tdmlzdGEuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9vZi5oPgorI2luY2x1ZGUgPGxpbnV4L29mX2dwaW8uaD4KKyNpbmNsdWRlIDxhc20vcHJvbS5oPgorI2luY2x1ZGUgPGFzbS9tYWNoZGVwLmg+CisKKy8qCisgKiBJIGRvbid0IGhhdmUgc3BlY2lmaWNhdGlvbnMgZm9yIHRoZSBNQ1UgZmlybXdhcmUsIEkgZm91bmQgdGhpcyByZWdpc3RlcgorICogYW5kIGJpdHMgcG9zaXRpb25zIGJ5IHRoZSB0cmlhbCZlcnJvciBtZXRob2QuCisgKi8KKyNkZWZpbmUgTUNVX1JFR19DVFJMCTB4MjAKKyNkZWZpbmUgTUNVX0NUUkxfUE9GRgkweDQwCisKKyNkZWZpbmUgTUNVX05VTV9HUElPCTIKKworc3RydWN0IG1jdSB7CisJc3RydWN0IG11dGV4IGxvY2s7CisJc3RydWN0IGRldmljZV9ub2RlICpucDsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50OworCXN0cnVjdCBvZl9ncGlvX2NoaXAgb2ZfZ2M7CisJdTggcmVnX2N0cmw7Cit9OworCitzdGF0aWMgc3RydWN0IG1jdSAqZ2xvYl9tY3U7CisKK3N0YXRpYyB2b2lkIG1jdV9wb3dlcl9vZmYodm9pZCkKK3sKKwlzdHJ1Y3QgbWN1ICptY3UgPSBnbG9iX21jdTsKKworCXByX2luZm8oIlNlbmRpbmcgcG93ZXItb2ZmIHJlcXVlc3QgdG8gdGhlIE1DVS4uLlxuIik7CisJbXV0ZXhfbG9jaygmbWN1LT5sb2NrKTsKKwlpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGdsb2JfbWN1LT5jbGllbnQsIE1DVV9SRUdfQ1RSTCwKKwkJCQkgIG1jdS0+cmVnX2N0cmwgfCBNQ1VfQ1RSTF9QT0ZGKTsKKwltdXRleF91bmxvY2soJm1jdS0+bG9jayk7Cit9CisKK3N0YXRpYyB2b2lkIG1jdV9ncGlvX3NldChzdHJ1Y3QgZ3Bpb19jaGlwICpnYywgdW5zaWduZWQgaW50IGdwaW8sIGludCB2YWwpCit7CisJc3RydWN0IG9mX2dwaW9fY2hpcCAqb2ZfZ2MgPSB0b19vZl9ncGlvX2NoaXAoZ2MpOworCXN0cnVjdCBtY3UgKm1jdSA9IGNvbnRhaW5lcl9vZihvZl9nYywgc3RydWN0IG1jdSwgb2ZfZ2MpOworCXU4IGJpdCA9IDEgPDwgKDQgKyBncGlvKTsKKworCW11dGV4X2xvY2soJm1jdS0+bG9jayk7CisJaWYgKHZhbCkKKwkJbWN1LT5yZWdfY3RybCAmPSB+Yml0OworCWVsc2UKKwkJbWN1LT5yZWdfY3RybCB8PSBiaXQ7CisKKwlpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKG1jdS0+Y2xpZW50LCBNQ1VfUkVHX0NUUkwsIG1jdS0+cmVnX2N0cmwpOworCW11dGV4X3VubG9jaygmbWN1LT5sb2NrKTsKK30KKworc3RhdGljIGludCBtY3VfZ3Bpb19kaXJfb3V0KHN0cnVjdCBncGlvX2NoaXAgKmdjLCB1bnNpZ25lZCBpbnQgZ3BpbywgaW50IHZhbCkKK3sKKwltY3VfZ3Bpb19zZXQoZ2MsIGdwaW8sIHZhbCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbWN1X2dwaW9jaGlwX2FkZChzdHJ1Y3QgbWN1ICptY3UpCit7CisJc3RydWN0IGRldmljZV9ub2RlICpucDsKKwlzdHJ1Y3Qgb2ZfZ3Bpb19jaGlwICpvZl9nYyA9ICZtY3UtPm9mX2djOworCXN0cnVjdCBncGlvX2NoaXAgKmdjID0gJm9mX2djLT5nYzsKKwlpbnQgcmV0OworCisJbnAgPSBvZl9maW5kX2NvbXBhdGlibGVfbm9kZShOVUxMLCBOVUxMLCAiZnNsLG1jdS1tcGM4MzQ5ZW1pdHgiKTsKKwlpZiAoIW5wKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWdjLT5vd25lciA9IFRISVNfTU9EVUxFOworCWdjLT5sYWJlbCA9IG5wLT5mdWxsX25hbWU7CisJZ2MtPmNhbl9zbGVlcCA9IDE7CisJZ2MtPm5ncGlvID0gTUNVX05VTV9HUElPOworCWdjLT5iYXNlID0gLTE7CisJZ2MtPnNldCA9IG1jdV9ncGlvX3NldDsKKwlnYy0+ZGlyZWN0aW9uX291dHB1dCA9IG1jdV9ncGlvX2Rpcl9vdXQ7CisJb2ZfZ2MtPmdwaW9fY2VsbHMgPSAyOworCW9mX2djLT54bGF0ZSA9IG9mX2dwaW9fc2ltcGxlX3hsYXRlOworCisJbnAtPmRhdGEgPSBvZl9nYzsKKwltY3UtPm5wID0gbnA7CisKKwkvKgorCSAqIFdlIGRvbid0IHdhbnQgdG8gbG9zZSB0aGUgbm9kZSwgaXRzIC0+ZGF0YSBhbmQgLT5mdWxsX25hbWUuLi4KKwkgKiBTbywgaWYgc3VjY2VlZGVkLCB3ZSBkb24ndCBwdXQgdGhlIG5vZGUgaGVyZS4KKwkgKi8KKwlyZXQgPSBncGlvY2hpcF9hZGQoZ2MpOworCWlmIChyZXQpCisJCW9mX25vZGVfcHV0KG5wKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IG1jdV9ncGlvY2hpcF9yZW1vdmUoc3RydWN0IG1jdSAqbWN1KQoreworCWludCByZXQ7CisKKwlyZXQgPSBncGlvY2hpcF9yZW1vdmUoJm1jdS0+b2ZfZ2MuZ2MpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisJb2Zfbm9kZV9wdXQobWN1LT5ucCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBfX2RldmluaXQgbWN1X3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCisJCQkgICAgICAgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKQoreworCXN0cnVjdCBtY3UgKm1jdTsKKwlpbnQgcmV0OworCisJbWN1ID0ga3phbGxvYyhzaXplb2YoKm1jdSksIEdGUF9LRVJORUwpOworCWlmICghbWN1KQorCQlyZXR1cm4gLUVOT01FTTsKKworCW11dGV4X2luaXQoJm1jdS0+bG9jayk7CisJbWN1LT5jbGllbnQgPSBjbGllbnQ7CisJaTJjX3NldF9jbGllbnRkYXRhKGNsaWVudCwgbWN1KTsKKworCXJldCA9IGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShtY3UtPmNsaWVudCwgTUNVX1JFR19DVFJMKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBlcnI7CisJbWN1LT5yZWdfY3RybCA9IHJldDsKKworCXJldCA9IG1jdV9ncGlvY2hpcF9hZGQobWN1KTsKKwlpZiAocmV0KQorCQlnb3RvIGVycjsKKworCS8qIFhYWDogdGhpcyBpcyBwb3RlbnRpYWxseSByYWN5LCBidXQgdGhlcmUgaXMgbm8gbG9jayBmb3IgcHBjX21kICovCisJaWYgKCFwcGNfbWQucG93ZXJfb2ZmKSB7CisJCWdsb2JfbWN1ID0gbWN1OworCQlwcGNfbWQucG93ZXJfb2ZmID0gbWN1X3Bvd2VyX29mZjsKKwkJZGV2X2luZm8oJmNsaWVudC0+ZGV2LCAid2lsbCBwcm92aWRlIHBvd2VyLW9mZiBzZXJ2aWNlXG4iKTsKKwl9CisKKwlyZXR1cm4gMDsKK2VycjoKKwlrZnJlZShtY3UpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZleGl0IG1jdV9yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKK3sKKwlzdHJ1Y3QgbWN1ICptY3UgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKwlpbnQgcmV0OworCisJaWYgKGdsb2JfbWN1ID09IG1jdSkgeworCQlwcGNfbWQucG93ZXJfb2ZmID0gTlVMTDsKKwkJZ2xvYl9tY3UgPSBOVUxMOworCX0KKworCXJldCA9IG1jdV9ncGlvY2hpcF9yZW1vdmUobWN1KTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCWkyY19zZXRfY2xpZW50ZGF0YShjbGllbnQsIE5VTEwpOworCWtmcmVlKG1jdSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCBtY3VfaWRzW10gPSB7CisJeyAibWN1LW1wYzgzNDllbWl0eCIsIH0sCisJe30sCit9OworTU9EVUxFX0RFVklDRV9UQUJMRShpMmMsIG1jdV9pZHMpOworCitzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgbWN1X2RyaXZlciA9IHsKKwkuZHJpdmVyID0geworCQkubmFtZSA9ICJtY3UtbXBjODM0OWVtaXR4IiwKKwkJLm93bmVyID0gVEhJU19NT0RVTEUsCisJfSwKKwkucHJvYmUgPSBtY3VfcHJvYmUsCisJLnJlbW92ZQk9IF9fZGV2ZXhpdF9wKG1jdV9yZW1vdmUpLAorCS5pZF90YWJsZSA9IG1jdV9pZHMsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBtY3VfaW5pdCh2b2lkKQoreworCXJldHVybiBpMmNfYWRkX2RyaXZlcigmbWN1X2RyaXZlcik7Cit9Cittb2R1bGVfaW5pdChtY3VfaW5pdCk7CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBtY3VfZXhpdCh2b2lkKQoreworCWkyY19kZWxfZHJpdmVyKCZtY3VfZHJpdmVyKTsKK30KK21vZHVsZV9leGl0KG1jdV9leGl0KTsKKworTU9EVUxFX0RFU0NSSVBUSU9OKCJQb3dlciBNYW5hZ2VtZW50IGFuZCBHUElPIGV4cGFuZGVyIGRyaXZlciBmb3IgIgorCQkgICAiTVBDODM0OUUtbUlUWC1jb21wYXRpYmxlIE1DVSIpOworTU9EVUxFX0FVVEhPUigiQW50b24gVm9yb250c292IDxhdm9yb250c292QHJ1Lm12aXN0YS5jb20+Iik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9jaGlwcy9tZW5lbGF1cy5jIGIvZHJpdmVycy9pMmMvY2hpcHMvbWVuZWxhdXMuYwppbmRleCAxNzYxMjZkLi40YjM2NGJhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9jaGlwcy9tZW5lbGF1cy5jCisrKyBiL2RyaXZlcnMvaTJjL2NoaXBzL21lbmVsYXVzLmMKQEAgLTgzMiw1MiArODMyLDUyIEBACiAKIHN0YXRpYyB2b2lkIG1lbmVsYXVzX3RvX3RpbWUoY2hhciAqcmVncywgc3RydWN0IHJ0Y190aW1lICp0KQogewotCXQtPnRtX3NlYyA9IEJDRDJCSU4ocmVnc1swXSk7Ci0JdC0+dG1fbWluID0gQkNEMkJJTihyZWdzWzFdKTsKKwl0LT50bV9zZWMgPSBiY2QyYmluKHJlZ3NbMF0pOworCXQtPnRtX21pbiA9IGJjZDJiaW4ocmVnc1sxXSk7CiAJaWYgKHRoZV9tZW5lbGF1cy0+cnRjX2NvbnRyb2wgJiBSVENfQ1RSTF9NT0RFMTIpIHsKLQkJdC0+dG1faG91ciA9IEJDRDJCSU4ocmVnc1syXSAmIDB4MWYpIC0gMTsKKwkJdC0+dG1faG91ciA9IGJjZDJiaW4ocmVnc1syXSAmIDB4MWYpIC0gMTsKIAkJaWYgKHJlZ3NbMl0gJiBSVENfSFJfUE0pCiAJCQl0LT50bV9ob3VyICs9IDEyOwogCX0gZWxzZQotCQl0LT50bV9ob3VyID0gQkNEMkJJTihyZWdzWzJdICYgMHgzZik7Ci0JdC0+dG1fbWRheSA9IEJDRDJCSU4ocmVnc1szXSk7Ci0JdC0+dG1fbW9uID0gQkNEMkJJTihyZWdzWzRdKSAtIDE7Ci0JdC0+dG1feWVhciA9IEJDRDJCSU4ocmVnc1s1XSkgKyAxMDA7CisJCXQtPnRtX2hvdXIgPSBiY2QyYmluKHJlZ3NbMl0gJiAweDNmKTsKKwl0LT50bV9tZGF5ID0gYmNkMmJpbihyZWdzWzNdKTsKKwl0LT50bV9tb24gPSBiY2QyYmluKHJlZ3NbNF0pIC0gMTsKKwl0LT50bV95ZWFyID0gYmNkMmJpbihyZWdzWzVdKSArIDEwMDsKIH0KIAogc3RhdGljIGludCB0aW1lX3RvX21lbmVsYXVzKHN0cnVjdCBydGNfdGltZSAqdCwgaW50IHJlZ251bSkKIHsKIAlpbnQJaG91ciwgc3RhdHVzOwogCi0Jc3RhdHVzID0gbWVuZWxhdXNfd3JpdGVfcmVnKHJlZ251bSsrLCBCSU4yQkNEKHQtPnRtX3NlYykpOworCXN0YXR1cyA9IG1lbmVsYXVzX3dyaXRlX3JlZyhyZWdudW0rKywgYmluMmJjZCh0LT50bV9zZWMpKTsKIAlpZiAoc3RhdHVzIDwgMCkKIAkJZ290byBmYWlsOwogCi0Jc3RhdHVzID0gbWVuZWxhdXNfd3JpdGVfcmVnKHJlZ251bSsrLCBCSU4yQkNEKHQtPnRtX21pbikpOworCXN0YXR1cyA9IG1lbmVsYXVzX3dyaXRlX3JlZyhyZWdudW0rKywgYmluMmJjZCh0LT50bV9taW4pKTsKIAlpZiAoc3RhdHVzIDwgMCkKIAkJZ290byBmYWlsOwogCiAJaWYgKHRoZV9tZW5lbGF1cy0+cnRjX2NvbnRyb2wgJiBSVENfQ1RSTF9NT0RFMTIpIHsKIAkJaG91ciA9IHQtPnRtX2hvdXIgKyAxOwogCQlpZiAoaG91ciA+IDEyKQotCQkJaG91ciA9IFJUQ19IUl9QTSB8IEJJTjJCQ0QoaG91ciAtIDEyKTsKKwkJCWhvdXIgPSBSVENfSFJfUE0gfCBiaW4yYmNkKGhvdXIgLSAxMik7CiAJCWVsc2UKLQkJCWhvdXIgPSBCSU4yQkNEKGhvdXIpOworCQkJaG91ciA9IGJpbjJiY2QoaG91cik7CiAJfSBlbHNlCi0JCWhvdXIgPSBCSU4yQkNEKHQtPnRtX2hvdXIpOworCQlob3VyID0gYmluMmJjZCh0LT50bV9ob3VyKTsKIAlzdGF0dXMgPSBtZW5lbGF1c193cml0ZV9yZWcocmVnbnVtKyssIGhvdXIpOwogCWlmIChzdGF0dXMgPCAwKQogCQlnb3RvIGZhaWw7CiAKLQlzdGF0dXMgPSBtZW5lbGF1c193cml0ZV9yZWcocmVnbnVtKyssIEJJTjJCQ0QodC0+dG1fbWRheSkpOworCXN0YXR1cyA9IG1lbmVsYXVzX3dyaXRlX3JlZyhyZWdudW0rKywgYmluMmJjZCh0LT50bV9tZGF5KSk7CiAJaWYgKHN0YXR1cyA8IDApCiAJCWdvdG8gZmFpbDsKIAotCXN0YXR1cyA9IG1lbmVsYXVzX3dyaXRlX3JlZyhyZWdudW0rKywgQklOMkJDRCh0LT50bV9tb24gKyAxKSk7CisJc3RhdHVzID0gbWVuZWxhdXNfd3JpdGVfcmVnKHJlZ251bSsrLCBiaW4yYmNkKHQtPnRtX21vbiArIDEpKTsKIAlpZiAoc3RhdHVzIDwgMCkKIAkJZ290byBmYWlsOwogCi0Jc3RhdHVzID0gbWVuZWxhdXNfd3JpdGVfcmVnKHJlZ251bSsrLCBCSU4yQkNEKHQtPnRtX3llYXIgLSAxMDApKTsKKwlzdGF0dXMgPSBtZW5lbGF1c193cml0ZV9yZWcocmVnbnVtKyssIGJpbjJiY2QodC0+dG1feWVhciAtIDEwMCkpOwogCWlmIChzdGF0dXMgPCAwKQogCQlnb3RvIGZhaWw7CiAKQEAgLTkxNCw3ICs5MTQsNyBAQAogCX0KIAogCW1lbmVsYXVzX3RvX3RpbWUocmVncywgdCk7Ci0JdC0+dG1fd2RheSA9IEJDRDJCSU4ocmVnc1s2XSk7CisJdC0+dG1fd2RheSA9IGJjZDJiaW4ocmVnc1s2XSk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTkyNyw3ICs5MjcsNyBAQAogCXN0YXR1cyA9IHRpbWVfdG9fbWVuZWxhdXModCwgTUVORUxBVVNfUlRDX1NFQyk7CiAJaWYgKHN0YXR1cyA8IDApCiAJCXJldHVybiBzdGF0dXM7Ci0Jc3RhdHVzID0gbWVuZWxhdXNfd3JpdGVfcmVnKE1FTkVMQVVTX1JUQ19XS0RBWSwgQklOMkJDRCh0LT50bV93ZGF5KSk7CisJc3RhdHVzID0gbWVuZWxhdXNfd3JpdGVfcmVnKE1FTkVMQVVTX1JUQ19XS0RBWSwgYmluMmJjZCh0LT50bV93ZGF5KSk7CiAJaWYgKHN0YXR1cyA8IDApIHsKIAkJZGV2X2VycigmdGhlX21lbmVsYXVzLT5jbGllbnQtPmRldiwgInJ0YyB3cml0ZSByZWcgJTAyeCAiCiAJCQkJImVyciAlZFxuIiwgTUVORUxBVVNfUlRDX1dLREFZLCBzdGF0dXMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvY2hpcHMvdHBzNjUwMTAuYyBiL2RyaXZlcnMvaTJjL2NoaXBzL3RwczY1MDEwLmMKaW5kZXggY2YwMmU4Zi4uYWNmOGI5ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvY2hpcHMvdHBzNjUwMTAuYworKysgYi9kcml2ZXJzL2kyYy9jaGlwcy90cHM2NTAxMC5jCkBAIC00NTYsMTQgKzQ1NiwxNyBAQAogCiAvKiBvZmZzZXRzIDAuLjMgPT0gR1BJTzEuLkdQSU80CiAgKiBvZmZzZXRzIDQuLjUgPT0gTEVEMS9uUEcsIExFRDIgKHdlIHNldCBvbmUgb2YgdGhlIG5vbi1CTElOSyBtb2RlcykKKyAqIG9mZnNldCA2ID09IHZpYnJhdG9yIG1vdG9yIGRyaXZlcgogICovCiBzdGF0aWMgdm9pZAogdHBzNjUwMTBfZ3Bpb19zZXQoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwgdW5zaWduZWQgb2Zmc2V0LCBpbnQgdmFsdWUpCiB7CiAJaWYgKG9mZnNldCA8IDQpCiAJCXRwczY1MDEwX3NldF9ncGlvX291dF92YWx1ZShvZmZzZXQgKyAxLCB2YWx1ZSk7Ci0JZWxzZQorCWVsc2UgaWYgKG9mZnNldCA8IDYpCiAJCXRwczY1MDEwX3NldF9sZWQob2Zmc2V0IC0gMywgdmFsdWUgPyBPTiA6IE9GRik7CisJZWxzZQorCQl0cHM2NTAxMF9zZXRfdmliKHZhbHVlKTsKIH0KIAogc3RhdGljIGludApAQCAtNDc3LDggKzQ4MCwxMCBAQAogCQlpZiAoISh0cHMtPm91dG1hc2sgJiAoMSA8PCBvZmZzZXQpKSkKIAkJCXJldHVybiAtRUlOVkFMOwogCQl0cHM2NTAxMF9zZXRfZ3Bpb19vdXRfdmFsdWUob2Zmc2V0ICsgMSwgdmFsdWUpOwotCX0gZWxzZQorCX0gZWxzZSBpZiAob2Zmc2V0IDwgNikKIAkJdHBzNjUwMTBfc2V0X2xlZChvZmZzZXQgLSAzLCB2YWx1ZSA/IE9OIDogT0ZGKTsKKwllbHNlCisJCXRwczY1MDEwX3NldF92aWIodmFsdWUpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC02NDYsNyArNjUxLDcgQEAKIAkJdHBzLT5jaGlwLmdldCA9IHRwczY1MDEwX2dwaW9fZ2V0OwogCiAJCXRwcy0+Y2hpcC5iYXNlID0gYm9hcmQtPmJhc2U7Ci0JCXRwcy0+Y2hpcC5uZ3BpbyA9IDY7CisJCXRwcy0+Y2hpcC5uZ3BpbyA9IDc7CiAJCXRwcy0+Y2hpcC5jYW5fc2xlZXAgPSAxOwogCiAJCXN0YXR1cyA9IGdwaW9jaGlwX2FkZCgmdHBzLT5jaGlwKTsKQEAgLTY3NSw2ICs2ODAsNyBAQAogCXsgInRwczY1MDExIiwgVFBTNjUwMTEgfSwKIAl7ICJ0cHM2NTAxMiIsIFRQUzY1MDEyIH0sCiAJeyAidHBzNjUwMTMiLCBUUFM2NTAxMyB9LAorCXsgInRwczY1MDE0IiwgVFBTNjUwMTEgfSwJLyogdHBzNjUwMTEgY2hhcmdpbmcgYXQgNi41ViBtYXggKi8KIAl7IH0KIH07CiBNT0RVTEVfREVWSUNFX1RBQkxFKGkyYywgdHBzNjUwMTBfaWQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvaTJjLWNvcmUuYyBiL2RyaXZlcnMvaTJjL2kyYy1jb3JlLmMKaW5kZXggYjM0NmE2OC4uNDJlODUyZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvaTJjLWNvcmUuYworKysgYi9kcml2ZXJzL2kyYy9pMmMtY29yZS5jCkBAIC00MzcsNiArNDM3LDEwIEBACiB7CiAJaW50IHJlcyA9IDAsIGR1bW15OwogCisJLyogQ2FuJ3QgcmVnaXN0ZXIgdW50aWwgYWZ0ZXIgZHJpdmVyIG1vZGVsIGluaXQgKi8KKwlpZiAodW5saWtlbHkoV0FSTl9PTighaTJjX2J1c190eXBlLnApKSkKKwkJcmV0dXJuIC1FQUdBSU47CisKIAltdXRleF9pbml0KCZhZGFwLT5idXNfbG9jayk7CiAJbXV0ZXhfaW5pdCgmYWRhcC0+Y2xpc3RfbG9jayk7CiAJSU5JVF9MSVNUX0hFQUQoJmFkYXAtPmNsaWVudHMpOwpAQCAtNjk2LDYgKzcwMCwxMCBAQAogewogCWludCByZXM7CiAKKwkvKiBDYW4ndCByZWdpc3RlciB1bnRpbCBhZnRlciBkcml2ZXIgbW9kZWwgaW5pdCAqLworCWlmICh1bmxpa2VseShXQVJOX09OKCFpMmNfYnVzX3R5cGUucCkpKQorCQlyZXR1cm4gLUVBR0FJTjsKKwogCS8qIG5ldyBzdHlsZSBkcml2ZXIgbWV0aG9kcyBjYW4ndCBtaXggd2l0aCBsZWdhY3kgb25lcyAqLwogCWlmIChpc19uZXdzdHlsZV9kcml2ZXIoZHJpdmVyKSkgewogCQlpZiAoZHJpdmVyLT5hdHRhY2hfYWRhcHRlciB8fCBkcml2ZXItPmRldGFjaF9hZGFwdGVyCkBAIC05NzgsNyArOTg2LDEwIEBACiAJYnVzX3VucmVnaXN0ZXIoJmkyY19idXNfdHlwZSk7CiB9CiAKLXN1YnN5c19pbml0Y2FsbChpMmNfaW5pdCk7CisvKiBXZSBtdXN0IGluaXRpYWxpemUgZWFybHksIGJlY2F1c2Ugc29tZSBzdWJzeXN0ZW1zIHJlZ2lzdGVyIGkyYyBkcml2ZXJzCisgKiBpbiBzdWJzeXNfaW5pdGNhbGwoKSBjb2RlLCBidXQgYXJlIGxpbmtlZCAoYW5kIGluaXRpYWxpemVkKSBiZWZvcmUgaTJjLgorICovCitwb3N0Y29yZV9pbml0Y2FsbChpMmNfaW5pdCk7CiBtb2R1bGVfZXhpdChpMmNfZXhpdCk7CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTE2NzcsNiArMTY4OCwyOCBAQAogRVhQT1JUX1NZTUJPTChpMmNfc21idXNfd3JpdGVfd29yZF9kYXRhKTsKIAogLyoqCisgKiBpMmNfc21idXNfcHJvY2Vzc19jYWxsIC0gU01CdXMgInByb2Nlc3MgY2FsbCIgcHJvdG9jb2wKKyAqIEBjbGllbnQ6IEhhbmRsZSB0byBzbGF2ZSBkZXZpY2UKKyAqIEBjb21tYW5kOiBCeXRlIGludGVycHJldGVkIGJ5IHNsYXZlCisgKiBAdmFsdWU6IDE2LWJpdCAid29yZCIgYmVpbmcgd3JpdHRlbgorICoKKyAqIFRoaXMgZXhlY3V0ZXMgdGhlIFNNQnVzICJwcm9jZXNzIGNhbGwiIHByb3RvY29sLCByZXR1cm5pbmcgbmVnYXRpdmUgZXJybm8KKyAqIGVsc2UgYSAxNi1iaXQgdW5zaWduZWQgIndvcmQiIHJlY2VpdmVkIGZyb20gdGhlIGRldmljZS4KKyAqLworczMyIGkyY19zbWJ1c19wcm9jZXNzX2NhbGwoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdTggY29tbWFuZCwgdTE2IHZhbHVlKQoreworCXVuaW9uIGkyY19zbWJ1c19kYXRhIGRhdGE7CisJaW50IHN0YXR1czsKKwlkYXRhLndvcmQgPSB2YWx1ZTsKKworCXN0YXR1cyA9IGkyY19zbWJ1c194ZmVyKGNsaWVudC0+YWRhcHRlciwgY2xpZW50LT5hZGRyLCBjbGllbnQtPmZsYWdzLAorCQkJCUkyQ19TTUJVU19XUklURSwgY29tbWFuZCwKKwkJCQlJMkNfU01CVVNfUFJPQ19DQUxMLCAmZGF0YSk7CisJcmV0dXJuIChzdGF0dXMgPCAwKSA/IHN0YXR1cyA6IGRhdGEud29yZDsKK30KK0VYUE9SVF9TWU1CT0woaTJjX3NtYnVzX3Byb2Nlc3NfY2FsbCk7CisKKy8qKgogICogaTJjX3NtYnVzX3JlYWRfYmxvY2tfZGF0YSAtIFNNQnVzICJibG9jayByZWFkIiBwcm90b2NvbAogICogQGNsaWVudDogSGFuZGxlIHRvIHNsYXZlIGRldmljZQogICogQGNvbW1hbmQ6IEJ5dGUgaW50ZXJwcmV0ZWQgYnkgc2xhdmUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2kyYy1kZXYuYyBiL2RyaXZlcnMvaTJjL2kyYy1kZXYuYwppbmRleCAzMDdkOTc2Li5jMTcxOTg4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9pMmMtZGV2LmMKKysrIGIvZHJpdmVycy9pMmMvaTJjLWRldi5jCkBAIC01MjEsOSArNTIxLDkgQEAKIAkJcmV0dXJuIFBUUl9FUlIoaTJjX2Rldik7CiAKIAkvKiByZWdpc3RlciB0aGlzIGkyYyBkZXZpY2Ugd2l0aCB0aGUgZHJpdmVyIGNvcmUgKi8KLQlpMmNfZGV2LT5kZXYgPSBkZXZpY2VfY3JlYXRlX2RydmRhdGEoaTJjX2Rldl9jbGFzcywgJmFkYXAtPmRldiwKLQkJCQkJICAgICBNS0RFVihJMkNfTUFKT1IsIGFkYXAtPm5yKSwKLQkJCQkJICAgICBOVUxMLCAiaTJjLSVkIiwgYWRhcC0+bnIpOworCWkyY19kZXYtPmRldiA9IGRldmljZV9jcmVhdGUoaTJjX2Rldl9jbGFzcywgJmFkYXAtPmRldiwKKwkJCQkgICAgIE1LREVWKEkyQ19NQUpPUiwgYWRhcC0+bnIpLCBOVUxMLAorCQkJCSAgICAgImkyYy0lZCIsIGFkYXAtPm5yKTsKIAlpZiAoSVNfRVJSKGkyY19kZXYtPmRldikpIHsKIAkJcmVzID0gUFRSX0VSUihpMmNfZGV2LT5kZXYpOwogCQlnb3RvIGVycm9yOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvS2NvbmZpZyBiL2RyaXZlcnMvaWRlL0tjb25maWcKaW5kZXggYjUwYjVkYS4uYTgyMGNhNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvS2NvbmZpZworKysgYi9kcml2ZXJzL2lkZS9LY29uZmlnCkBAIC00LDcgKzQsNyBAQAogCiAjIFNlbGVjdCBIQVZFX0lERSBpZiBJREUgaXMgc3VwcG9ydGVkCiBjb25maWcgSEFWRV9JREUKLQlkZWZfYm9vbCBuCisJYm9vbAogCiBtZW51Y29uZmlnIElERQogCXRyaXN0YXRlICJBVEEvQVRBUEkvTUZNL1JMTCBzdXBwb3J0IgpAQCAtNTQsMzggKzU0LDYgQEAKIAogaWYgSURFCiAKLWNvbmZpZyBCTEtfREVWX0lERQotCXRyaXN0YXRlICJFbmhhbmNlZCBJREUvTUZNL1JMTCBkaXNrL2Nkcm9tL3RhcGUvZmxvcHB5IHN1cHBvcnQiCi0JLS0taGVscC0tLQotCSAgSWYgeW91IHNheSBZIGhlcmUsIHlvdSB3aWxsIHVzZSB0aGUgZnVsbC1mZWF0dXJlZCBJREUgZHJpdmVyIHRvCi0JICBjb250cm9sIHVwIHRvIHRlbiBBVEEvSURFIGludGVyZmFjZXMsIGVhY2ggYmVpbmcgYWJsZSB0byBzZXJ2ZSBhCi0JICAibWFzdGVyIiBhbmQgYSAic2xhdmUiIGRldmljZSwgZm9yIGEgdG90YWwgb2YgdXAgdG8gdHdlbnR5IEFUQS9JREUKLQkgIGRpc2svY2Ryb20vdGFwZS9mbG9wcHkgZHJpdmVzLgotCi0JICBVc2VmdWwgaW5mb3JtYXRpb24gYWJvdXQgbGFyZ2UgKD41NDAgTUIpIElERSBkaXNrcywgbXVsdGlwbGUKLQkgIGludGVyZmFjZXMsIHdoYXQgdG8gZG8gaWYgQVRBL0lERSBkZXZpY2VzIGFyZSBub3QgYXV0b21hdGljYWxseQotCSAgZGV0ZWN0ZWQsIHNvdW5kIGNhcmQgQVRBL0lERSBwb3J0cywgbW9kdWxlIHN1cHBvcnQsIGFuZCBvdGhlcgotCSAgdG9waWNzLCBpcyBjb250YWluZWQgaW4gPGZpbGU6RG9jdW1lbnRhdGlvbi9pZGUvaWRlLnR4dD4uIEZvciBkZXRhaWxlZAotCSAgaW5mb3JtYXRpb24gYWJvdXQgaGFyZCBkcml2ZXMsIGNvbnN1bHQgdGhlIERpc2stSE9XVE8gYW5kIHRoZQotCSAgTXVsdGktRGlzay1IT1dUTywgYXZhaWxhYmxlIGZyb20KLQkgIDxodHRwOi8vd3d3LnRsZHAub3JnL2RvY3MuaHRtbCNob3d0bz4uCi0KLQkgIFRvIGZpbmUtdHVuZSBBVEEvSURFIGRyaXZlL2ludGVyZmFjZSBwYXJhbWV0ZXJzIGZvciBpbXByb3ZlZAotCSAgcGVyZm9ybWFuY2UsIGxvb2sgZm9yIHRoZSBoZHBhcm0gcGFja2FnZSBhdAotCSAgPGZ0cDovL2liaWJsaW8ub3JnL3B1Yi9MaW51eC9zeXN0ZW0vaGFyZHdhcmUvPi4KLQotCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZSBhbmQgcmVhZAotCSAgPGZpbGU6RG9jdW1lbnRhdGlvbi9pZGUvaWRlLnR4dD4uIFRoZSBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgaWRlLW1vZC4KLQkgIERvIG5vdCBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlIGlmIHlvdXIgcm9vdCBmaWxlIHN5c3RlbSAodGhlCi0JICBvbmUgY29udGFpbmluZyB0aGUgZGlyZWN0b3J5IC8pIGlzIGxvY2F0ZWQgb24gYW4gSURFIGRldmljZS4KLQotCSAgSWYgeW91IGhhdmUgb25lIG9yIG1vcmUgSURFIGRyaXZlcywgc2F5IFkgb3IgTSBoZXJlLiBJZiB5b3VyIHN5c3RlbQotCSAgaGFzIG5vIElERSBkcml2ZXMsIG9yIGlmIG1lbW9yeSByZXF1aXJlbWVudHMgYXJlIHJlYWxseSB0aWdodCwgeW91Ci0JICBjb3VsZCBzYXkgTiBoZXJlLCBhbmQgc2VsZWN0IHRoZSAiT2xkIGhhcmQgZGlzayBkcml2ZXIiIGJlbG93Ci0JICBpbnN0ZWFkIHRvIHNhdmUgYWJvdXQgMTMgS0Igb2YgbWVtb3J5IGluIHRoZSBrZXJuZWwuCi0KLWlmIEJMS19ERVZfSURFCi0KIGNvbW1lbnQgIlBsZWFzZSBzZWUgRG9jdW1lbnRhdGlvbi9pZGUvaWRlLnR4dCBmb3IgaGVscC9pbmZvIG9uIElERSBkcml2ZXMiCiAKIGNvbmZpZyBJREVfVElNSU5HUwpAQCAtMTE2LDIxICs4NCw0MCBAQAogCiAJICBJZiB1bnN1cmUsIHNheSBOLgogCi1jb25maWcgQkxLX0RFVl9JREVESVNLCi0JdHJpc3RhdGUgIkluY2x1ZGUgSURFL0FUQS0yIERJU0sgc3VwcG9ydCIKLQktLS1oZWxwLS0tCi0JICBUaGlzIHdpbGwgaW5jbHVkZSBlbmhhbmNlZCBzdXBwb3J0IGZvciBNRk0vUkxML0lERSBoYXJkIGRpc2tzLiAgSWYKLQkgIHlvdSBoYXZlIGEgTUZNL1JMTC9JREUgZGlzaywgYW5kIHRoZXJlIGlzIG5vIHNwZWNpYWwgcmVhc29uIHRvIHVzZQotCSAgdGhlIG9sZCBoYXJkIGRpc2sgZHJpdmVyIGluc3RlYWQsIHNheSBZLiAgSWYgeW91IGhhdmUgYW4gU0NTSS1vbmx5Ci0JICBzeXN0ZW0sIHlvdSBjYW4gc2F5IE4gaGVyZS4KK2NvbmZpZyBJREVfR0QKKwl0cmlzdGF0ZSAiZ2VuZXJpYyBBVEEvQVRBUEkgZGlzayBzdXBwb3J0IgorCWRlZmF1bHQgeQorCWhlbHAKKwkgIFN1cHBvcnQgZm9yIEFUQS9BVEFQSSBkaXNrcyAoaW5jbHVkaW5nIEFUQVBJIGZsb3BweSBkcml2ZXMpLgogCi0JICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKLQkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBpZGUtZGlzay4KLQkgIERvIG5vdCBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlIGlmIHlvdXIgcm9vdCBmaWxlIHN5c3RlbQotCSAgKHRoZSBvbmUgY29udGFpbmluZyB0aGUgZGlyZWN0b3J5IC8pIGlzIGxvY2F0ZWQgb24gdGhlIElERSBkaXNrLgorCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4KKwkgIFRoZSBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgaWRlLWdkX21vZC4KIAogCSAgSWYgdW5zdXJlLCBzYXkgWS4KIAorY29uZmlnIElERV9HRF9BVEEKKwlib29sICJBVEEgZGlzayBzdXBwb3J0IgorCWRlcGVuZHMgb24gSURFX0dECisJZGVmYXVsdCB5CisJaGVscAorCSAgVGhpcyB3aWxsIGluY2x1ZGUgc3VwcG9ydCBmb3IgQVRBIGhhcmQgZGlza3MuCisKKwkgIElmIHVuc3VyZSwgc2F5IFkuCisKK2NvbmZpZyBJREVfR0RfQVRBUEkKKwlib29sICJBVEFQSSBmbG9wcHkgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIElERV9HRAorCXNlbGVjdCBJREVfQVRBUEkKKwloZWxwCisJICBUaGlzIHdpbGwgaW5jbHVkZSBzdXBwb3J0IGZvciBBVEFQSSBmbG9wcHkgZHJpdmVzCisJICAoaS5lLiBJb21lZ2EgWklQIG9yIE1LRSBMUy0xMjApLgorCisJICBGb3IgaW5mb3JtYXRpb24gYWJvdXQganVtcGVyIHNldHRpbmdzIGFuZCB0aGUgcXVlc3Rpb24KKwkgIG9mIHdoZW4gYSBaSVAgZHJpdmUgdXNlcyBhIHBhcnRpdGlvbiB0YWJsZSwgc2VlCisJICA8aHR0cDovL3d3dy53aW4udHVlLm5sL35hZWIvbGludXgvemlwL3ppcC0xLmh0bWw+LgorCisJICBJZiB1bnN1cmUsIHNheSBOLgorCiBjb25maWcgQkxLX0RFVl9JREVDUwogCXRyaXN0YXRlICJQQ01DSUEgSURFIHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBQQ01DSUEKQEAgLTE5NSwyOSArMTgyLDYgQEAKIAkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQogCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGlkZS10YXBlLgogCi1jb25maWcgQkxLX0RFVl9JREVGTE9QUFkKLQl0cmlzdGF0ZSAiSW5jbHVkZSBJREUvQVRBUEkgRkxPUFBZIHN1cHBvcnQiCi0Jc2VsZWN0IElERV9BVEFQSQotCS0tLWhlbHAtLS0KLQkgIElmIHlvdSBoYXZlIGFuIElERSBmbG9wcHkgZHJpdmUgd2hpY2ggdXNlcyB0aGUgQVRBUEkgcHJvdG9jb2wsCi0JICBhbnN3ZXIgWS4gIEFUQVBJIGlzIGEgbmV3ZXIgcHJvdG9jb2wgdXNlZCBieSBJREUgQ0QtUk9NL3RhcGUvZmxvcHB5Ci0JICBkcml2ZXMsIHNpbWlsYXIgdG8gdGhlIFNDU0kgcHJvdG9jb2wuCi0KLQkgIFRoZSBMUy0xMjAgYW5kIHRoZSBJREUvQVRBUEkgSW9tZWdhIFpJUCBkcml2ZSBhcmUgYWxzbyBzdXBwb3J0ZWQgYnkKLQkgIHRoaXMgZHJpdmVyLiBGb3IgaW5mb3JtYXRpb24gYWJvdXQganVtcGVyIHNldHRpbmdzIGFuZCB0aGUgcXVlc3Rpb24KLQkgIG9mIHdoZW4gYSBaSVAgZHJpdmUgdXNlcyBhIHBhcnRpdGlvbiB0YWJsZSwgc2VlCi0JICA8aHR0cDovL3d3dy53aW4udHVlLm5sL35hZWIvbGludXgvemlwL3ppcC0xLmh0bWw+LgotCSAgKEFUQVBJIFBELUNEL0NEUiBkcml2ZXMgYXJlIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBkcml2ZXI7IHN1cHBvcnQKLQkgIGZvciBQRC1DRC9DRFIgZHJpdmVzIGlzIGF2YWlsYWJsZSBpZiB5b3UgYW5zd2VyIFkgdG8KLQkgICJTQ1NJIGVtdWxhdGlvbiBzdXBwb3J0IiwgYmVsb3cpLgotCi0JICBJZiB5b3Ugc2F5IFkgaGVyZSwgdGhlIEZMT1BQWSBkcml2ZSB3aWxsIGJlIGlkZW50aWZpZWQgYWxvbmcgd2l0aAotCSAgb3RoZXIgSURFIGRldmljZXMsIGFzICJoZGIiIG9yICJoZGMiLCBvciBzb21ldGhpbmcgc2ltaWxhciAoY2hlY2sKLQkgIHRoZSBib290IG1lc3NhZ2VzIHdpdGggZG1lc2cpLgotCi0JICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKLQkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBpZGUtZmxvcHB5LgotCiBjb25maWcgQkxLX0RFVl9JREVTQ1NJCiAJdHJpc3RhdGUgIlNDU0kgZW11bGF0aW9uIHN1cHBvcnQgKERFUFJFQ0FURUQpIgogCWRlcGVuZHMgb24gU0NTSQpAQCAtMzQ4LDcgKzMxMiw3IEBACiAKIGNvbmZpZyBJREVQQ0lfUENJQlVTX09SREVSCiAJYm9vbCAiUHJvYmUgSURFIFBDSSBkZXZpY2VzIGluIHRoZSBQQ0kgYnVzIG9yZGVyIChERVBSRUNBVEVEKSIKLQlkZXBlbmRzIG9uIEJMS19ERVZfSURFPXkgJiYgQkxLX0RFVl9JREVQQ0kKKwlkZXBlbmRzIG9uIElERT15ICYmIEJMS19ERVZfSURFUENJCiAJZGVmYXVsdCB5CiAJaGVscAogCSAgUHJvYmUgSURFIFBDSSBkZXZpY2VzIGluIHRoZSBvcmRlciBpbiB3aGljaCB0aGV5IGFwcGVhciBvbiB0aGUKQEAgLTM2NCw3ICszMjgsNyBAQAogIyBUT0RPOiBzcGxpdCBpdCBvbiBwZXIgaG9zdCBkcml2ZXIgY29uZmlnIG9wdGlvbnMgKG9yIG1vZHVsZSBwYXJhbWV0ZXJzKQogY29uZmlnIEJMS19ERVZfT0ZGQk9BUkQKIAlib29sICJCb290IG9mZi1ib2FyZCBjaGlwc2V0cyBmaXJzdCBzdXBwb3J0IChERVBSRUNBVEVEKSIKLQlkZXBlbmRzIG9uIEJMS19ERVZfSURFUENJICYmIChCTEtfREVWX0FFQzYyWFggfHwgQkxLX0RFVl9HRU5FUklDIHx8IEJMS19ERVZfSFBUMzRYIHx8IEJMS19ERVZfSFBUMzY2IHx8IEJMS19ERVZfUERDMjAyWFhfTkVXIHx8IEJMS19ERVZfUERDMjAyWFhfT0xEIHx8IEJMS19ERVZfVEM4NkMwMDEpCisJZGVwZW5kcyBvbiBCTEtfREVWX0lERVBDSSAmJiAoQkxLX0RFVl9BRUM2MlhYIHx8IEJMS19ERVZfR0VORVJJQyB8fCBCTEtfREVWX0hQVDM2NiB8fCBCTEtfREVWX1BEQzIwMlhYX05FVyB8fCBCTEtfREVWX1BEQzIwMlhYX09MRCB8fCBCTEtfREVWX1RDODZDMDAxKQogCWhlbHAKIAkgIE5vcm1hbGx5LCBJREUgY29udHJvbGxlcnMgYnVpbHQgaW50byB0aGUgbW90aGVyYm9hcmQgKG9uLWJvYXJkCiAJICBjb250cm9sbGVycykgYXJlIGFzc2lnbmVkIHRvIGlkZTAgYW5kIGlkZTEgd2hpbGUgdGhvc2Ugb24gYWRkLWluIFBDSQpAQCAtNTE0LDI4ICs0NzgsNiBAQAogCiAJICBJdCBpcyBzYWZlIHRvIHNheSBZIHRvIHRoaXMgcXVlc3Rpb24uCiAKLWNvbmZpZyBCTEtfREVWX0hQVDM0WAotCXRyaXN0YXRlICJIUFQzNFggY2hpcHNldCBzdXBwb3J0IgotCWRlcGVuZHMgb24gQlJPS0VOCi0Jc2VsZWN0IEJMS19ERVZfSURFRE1BX1BDSQotCWhlbHAKLQkgIFRoaXMgZHJpdmVyIGFkZHMgdXAgdG8gNCBtb3JlIEVJREUgZGV2aWNlcyBzaGFyaW5nIGEgc2luZ2xlCi0JICBpbnRlcnJ1cHQuIFRoZSBIUFQzNDMgY2hpcHNldCBpbiBpdHMgY3VycmVudCBmb3JtIGlzIGEgbm9uLWJvb3RhYmxlCi0JICBjb250cm9sbGVyOyB0aGUgSFBUMzQ1L0hQVDM2MyBjaGlwc2V0IGlzIGEgYm9vdGFibGUgKG5lZWRzIEJJT1MgRklYKQotCSAgUENJIFVETUEgY29udHJvbGxlcnMuIFRoaXMgZHJpdmVyIHJlcXVpcmVzIGR5bmFtaWMgdHVuaW5nIG9mIHRoZQotCSAgY2hpcHNldCBkdXJpbmcgdGhlIGlkZS1wcm9iZSBhdCBib290IHRpbWUuIEl0IGlzIHJlcG9ydGVkIHRvIHN1cHBvcnQKLQkgIERWRCBJSSBkcml2ZXMsIGJ5IHRoZSBtYW51ZmFjdHVyZXIuCi0KLWNvbmZpZyBIUFQzNFhfQVVUT0RNQQotCWJvb2wgIkhQVDM0WCBBVVRPRE1BIHN1cHBvcnQgKEVYUEVSSU1FTlRBTCkiCi0JZGVwZW5kcyBvbiBCTEtfREVWX0hQVDM0WCAmJiBFWFBFUklNRU5UQUwKLQloZWxwCi0JICBUaGlzIGlzIGEgZGFuZ2Vyb3VzIHRoaW5nIHRvIGF0dGVtcHQgY3VycmVudGx5ISBQbGVhc2UgcmVhZCB0aGUKLQkgIGNvbW1lbnRzIGF0IHRoZSB0b3Agb2YgPGZpbGU6ZHJpdmVycy9pZGUvcGNpL2hwdDM0eC5jPi4gIElmIHlvdSBzYXkgWQotCSAgaGVyZSwgdGhlbiBzYXkgWSB0byAiVXNlIERNQSBieSBkZWZhdWx0IHdoZW4gYXZhaWxhYmxlIiBhcyB3ZWxsLgotCi0JICBJZiB1bnN1cmUsIHNheSBOLgotCiBjb25maWcgQkxLX0RFVl9IUFQzNjYKIAl0cmlzdGF0ZSAiSFBUMzZYLzM3WCBjaGlwc2V0IHN1cHBvcnQiCiAJc2VsZWN0IEJMS19ERVZfSURFRE1BX1BDSQpAQCAtNzI5LDcgKzY3MSw3IEBACiAKIGNvbmZpZyBCTEtfREVWX0lERV9QTUFDCiAJdHJpc3RhdGUgIlBvd2VyTWFjIG9uLWJvYXJkIElERSBzdXBwb3J0IgotCWRlcGVuZHMgb24gUFBDX1BNQUMgJiYgSURFPXkgJiYgQkxLX0RFVl9JREU9eQorCWRlcGVuZHMgb24gUFBDX1BNQUMgJiYgSURFPXkKIAlzZWxlY3QgSURFX1RJTUlOR1MKIAloZWxwCiAJICBUaGlzIGRyaXZlciBwcm92aWRlcyBzdXBwb3J0IGZvciB0aGUgb24tYm9hcmQgSURFIGNvbnRyb2xsZXIgb24KQEAgLTk2Myw2ICs5MDUsNCBAQAogCWRlZl9ib29sIEJMS19ERVZfSURFRE1BX1NGRiB8fCBCTEtfREVWX0lERURNQV9QTUFDIHx8IFwKIAkJIEJMS19ERVZfSURFRE1BX0lDUyB8fCBCTEtfREVWX0lERV9BVTFYWFhfTURNQTJfREJETUEKIAotZW5kaWYKLQogZW5kaWYgIyBJREUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL01ha2VmaWxlIGIvZHJpdmVycy9pZGUvTWFrZWZpbGUKaW5kZXggMzA4YjhhMS4uMDkzZDMyNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9pZGUvTWFrZWZpbGUKQEAgLTUsMjQgKzUsMjUgQEAKIEVYVFJBX0NGTEFHUwkJCQkrPSAtSWRyaXZlcnMvaWRlCiAKIGlkZS1jb3JlLXkgKz0gaWRlLm8gaWRlLWlvY3Rscy5vIGlkZS1pby5vIGlkZS1pb3BzLm8gaWRlLWxpYi5vIGlkZS1wcm9iZS5vIFwKLQkgICAgICBpZGUtdGFza2ZpbGUubyBpZGUtcGlvLWJsYWNrbGlzdC5vCisJICAgICAgaWRlLXRhc2tmaWxlLm8gaWRlLXBhcmsubyBpZGUtcGlvLWJsYWNrbGlzdC5vCiAKICMgY29yZSBJREUgY29kZQogaWRlLWNvcmUtJChDT05GSUdfSURFX1RJTUlOR1MpCQkrPSBpZGUtdGltaW5ncy5vCiBpZGUtY29yZS0kKENPTkZJR19JREVfQVRBUEkpCQkrPSBpZGUtYXRhcGkubwogaWRlLWNvcmUtJChDT05GSUdfQkxLX0RFVl9JREVQQ0kpCSs9IHNldHVwLXBjaS5vCiBpZGUtY29yZS0kKENPTkZJR19CTEtfREVWX0lERURNQSkJKz0gaWRlLWRtYS5vCitpZGUtY29yZS0kKENPTkZJR19CTEtfREVWX0lERURNQV9TRkYpCSs9IGlkZS1kbWEtc2ZmLm8KIGlkZS1jb3JlLSQoQ09ORklHX0lERV9QUk9DX0ZTKQkJKz0gaWRlLXByb2MubwogaWRlLWNvcmUtJChDT05GSUdfQkxLX0RFVl9JREVBQ1BJKQkrPSBpZGUtYWNwaS5vCiAKLW9iai0kKENPTkZJR19CTEtfREVWX0lERSkJCSs9IGlkZS1jb3JlLm8KK29iai0kKENPTkZJR19JREUpCQkJKz0gaWRlLWNvcmUubwogCiBpZmVxICgkKENPTkZJR19JREVfQVJNKSwgeSkKIAlpZGUtYXJtLWNvcmUteSArPSBhcm0vaWRlX2FybS5vCiAJb2JqLXkgKz0gaWRlLWFybS1jb3JlLm8KIGVuZGlmCiAKLW9iai0kKENPTkZJR19CTEtfREVWX0lERSkJCSs9IGxlZ2FjeS8gcGNpLworb2JqLSQoQ09ORklHX0lERSkJCQkrPSBsZWdhY3kvIHBjaS8KIAogb2JqLSQoQ09ORklHX0lERVBDSV9QQ0lCVVNfT1JERVIpCSs9IGlkZS1zY2FuLXBjaS5vCiAKQEAgLTMxLDE3ICszMiwzMCBAQAogCW9iai15ICs9IGNtZDY0MC1jb3JlLm8KIGVuZGlmCiAKLW9iai0kKENPTkZJR19CTEtfREVWX0lERSkJCSs9IHBwYy8KK29iai0kKENPTkZJR19JREUpCQkJKz0gcHBjLwogb2JqLSQoQ09ORklHX0lERV9IODMwMCkJCQkrPSBoODMwMC8KIG9iai0kKENPTkZJR19JREVfR0VORVJJQykJCSs9IGlkZS1nZW5lcmljLm8KIG9iai0kKENPTkZJR19CTEtfREVWX0lERVBOUCkJCSs9IGlkZS1wbnAubwogCitpZGUtZ2RfbW9kLXkgKz0gaWRlLWdkLm8KIGlkZS1jZF9tb2QteSArPSBpZGUtY2QubyBpZGUtY2RfaW9jdGwubyBpZGUtY2RfdmVyYm9zZS5vCi1pZGUtZmxvcHB5X21vZC15ICs9IGlkZS1mbG9wcHkubyBpZGUtZmxvcHB5X2lvY3RsLm8KIAotb2JqLSQoQ09ORklHX0JMS19ERVZfSURFRElTSykJCSs9IGlkZS1kaXNrLm8KK2lmZXEgKCQoQ09ORklHX0lERV9HRF9BVEEpLCB5KQorCWlkZS1nZF9tb2QteSArPSBpZGUtZGlzay5vIGlkZS1kaXNrX2lvY3RsLm8KK2lmZXEgKCQoQ09ORklHX0lERV9QUk9DX0ZTKSwgeSkKKwlpZGUtZ2RfbW9kLXkgKz0gaWRlLWRpc2tfcHJvYy5vCitlbmRpZgorZW5kaWYKKworaWZlcSAoJChDT05GSUdfSURFX0dEX0FUQVBJKSwgeSkKKwlpZGUtZ2RfbW9kLXkgKz0gaWRlLWZsb3BweS5vIGlkZS1mbG9wcHlfaW9jdGwubworaWZlcSAoJChDT05GSUdfSURFX1BST0NfRlMpLCB5KQorCWlkZS1nZF9tb2QteSArPSBpZGUtZmxvcHB5X3Byb2MubworZW5kaWYKK2VuZGlmCisKK29iai0kKENPTkZJR19JREVfR0QpCQkJKz0gaWRlLWdkX21vZC5vCiBvYmotJChDT05GSUdfQkxLX0RFVl9JREVDRCkJCSs9IGlkZS1jZF9tb2Qubwotb2JqLSQoQ09ORklHX0JMS19ERVZfSURFRkxPUFBZKQkJKz0gaWRlLWZsb3BweV9tb2Qubwogb2JqLSQoQ09ORklHX0JMS19ERVZfSURFVEFQRSkJCSs9IGlkZS10YXBlLm8KIAogaWZlcSAoJChDT05GSUdfQkxLX0RFVl9JREVDUyksIHkpCkBAIC01NCw0ICs2OCw0IEBACiAJb2JqLXkgKz0gaWRlLXBsYXRmb3JtLWNvcmUubwogZW5kaWYKIAotb2JqLSQoQ09ORklHX0JMS19ERVZfSURFKQkJKz0gYXJtLyBtaXBzLworb2JqLSQoQ09ORklHX0lERSkJCQkrPSBhcm0vIG1pcHMvCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9hcm0vaWNzaWRlLmMgYi9kcml2ZXJzL2lkZS9hcm0vaWNzaWRlLmMKaW5kZXggNzBmNWIxNi4uNzZiZGM5YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvYXJtL2ljc2lkZS5jCisrKyBiL2RyaXZlcnMvaWRlL2FybS9pY3NpZGUuYwpAQCAtMzcyLDI1ICszNzIsNiBAQAogCQkJSUNTX0FSQ0lOX1Y2X0lOVFJTVEFUXzEpKSAmIDE7CiB9CiAKLXN0YXRpYyB2b2lkIGljc2lkZV9kbWFfdGltZW91dChpZGVfZHJpdmVfdCAqZHJpdmUpCi17Ci0JaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOwotCi0JcHJpbnRrKEtFUk5fRVJSICIlczogRE1BIHRpbWVvdXQgb2NjdXJyZWQ6ICIsIGRyaXZlLT5uYW1lKTsKLQotCWlmIChpY3NpZGVfZG1hX3Rlc3RfaXJxKGRyaXZlKSkKLQkJcmV0dXJuOwotCi0JaWRlX2R1bXBfc3RhdHVzKGRyaXZlLCAiRE1BIHRpbWVvdXQiLCBod2lmLT50cF9vcHMtPnJlYWRfc3RhdHVzKGh3aWYpKTsKLQotCWljc2lkZV9kbWFfZW5kKGRyaXZlKTsKLX0KLQotc3RhdGljIHZvaWQgaWNzaWRlX2RtYV9sb3N0X2lycShpZGVfZHJpdmVfdCAqZHJpdmUpCi17Ci0JcHJpbnRrKEtFUk5fRVJSICIlczogSVJRIGxvc3RcbiIsIGRyaXZlLT5uYW1lKTsKLX0KLQogc3RhdGljIGludCBpY3NpZGVfZG1hX2luaXQoaWRlX2h3aWZfdCAqaHdpZiwgY29uc3Qgc3RydWN0IGlkZV9wb3J0X2luZm8gKmQpCiB7CiAJaHdpZi0+ZG1hdGFibGVfY3B1CT0gTlVMTDsKQEAgLTQwNiw4ICszODcsOCBAQAogCS5kbWFfc3RhcnQJCT0gaWNzaWRlX2RtYV9zdGFydCwKIAkuZG1hX2VuZAkJPSBpY3NpZGVfZG1hX2VuZCwKIAkuZG1hX3Rlc3RfaXJxCQk9IGljc2lkZV9kbWFfdGVzdF9pcnEsCi0JLmRtYV90aW1lb3V0CQk9IGljc2lkZV9kbWFfdGltZW91dCwKLQkuZG1hX2xvc3RfaXJxCQk9IGljc2lkZV9kbWFfbG9zdF9pcnEsCisJLmRtYV90aW1lb3V0CQk9IGlkZV9kbWFfdGltZW91dCwKKwkuZG1hX2xvc3RfaXJxCQk9IGlkZV9kbWFfbG9zdF9pcnEsCiB9OwogI2Vsc2UKICNkZWZpbmUgaWNzaWRlX3Y2X2RtYV9vcHMgTlVMTApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvaDgzMDAvaWRlLWg4MzAwLmMgYi9kcml2ZXJzL2lkZS9oODMwMC9pZGUtaDgzMDAuYwppbmRleCBiZGU3YTU4Li5lMmNkZDJlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9oODMwMC9pZGUtaDgzMDAuYworKysgYi9kcml2ZXJzL2lkZS9oODMwMC9pZGUtaDgzMDAuYwpAQCAtODAsNyArODAsNyBAQAogCQlvdXRiKHRmLT5sYmFoLCBpb19wb3J0cy0+bGJhaF9hZGRyKTsKIAogCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfREVWSUNFKQotCQlvdXRiKCh0Zi0+ZGV2aWNlICYgSElISSkgfCBkcml2ZS0+c2VsZWN0LmFsbCwKKwkJb3V0YigodGYtPmRldmljZSAmIEhJSEkpIHwgZHJpdmUtPnNlbGVjdCwKIAkJICAgICBpb19wb3J0cy0+ZGV2aWNlX2FkZHIpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9pZGUtYWNwaS5jIGIvZHJpdmVycy9pZGUvaWRlLWFjcGkuYwppbmRleCAyNDI3YzM4Li4yNDRhOGEwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9pZGUtYWNwaS5jCisrKyBiL2RyaXZlcnMvaWRlL2lkZS1hY3BpLmMKQEAgLTI5MCw3ICsyOTAsNyBAQAogCURFQlBSSU5UKCJFTlRFUjogJXMgYXQgJXMsIHBvcnQjOiAlZCwgaGFyZF9wb3J0IzogJWRcbiIsCiAJCSBod2lmLT5uYW1lLCBkZXYtPmJ1c19pZCwgcG9ydCwgaHdpZi0+Y2hhbm5lbCk7CiAKLQlpZiAoIWRyaXZlLT5wcmVzZW50KSB7CisJaWYgKChkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX1BSRVNFTlQpID09IDApIHsKIAkJREVCUFJJTlQoIiVzIGRyaXZlICVkOiVkIG5vdCBwcmVzZW50XG4iLAogCQkJIGh3aWYtPm5hbWUsIGh3aWYtPmNoYW5uZWwsIHBvcnQpOwogCQlnb3RvIG91dDsKQEAgLTQyMCw4ICs0MjAsOSBAQAogCiAJREVCUFJJTlQoIkVOVEVSOiAlcywgaGFyZF9wb3J0IzogJWRcbiIsIGRyaXZlLT5uYW1lLCBkcml2ZS0+ZG4pOwogCi0JaWYgKCFkcml2ZS0+cHJlc2VudCkKKwlpZiAoKGRyaXZlLT5kZXZfZmxhZ3MgJiBJREVfREZMQUdfUFJFU0VOVCkgPT0gMCkKIAkJZ290byBvdXQ7CisKIAlpZiAoIWd0Zl9jb3VudCkJCS8qIHNob3VsZG4ndCBiZSBoZXJlICovCiAJCWdvdG8gb3V0OwogCkBAIC02NjAsNyArNjYxLDggQEAKIAkJaWYgKCFkcml2ZS0+YWNwaWRhdGEtPm9ial9oYW5kbGUpCiAJCQlkcml2ZS0+YWNwaWRhdGEtPm9ial9oYW5kbGUgPSBpZGVfYWNwaV9kcml2ZV9nZXRfaGFuZGxlKGRyaXZlKTsKIAotCQlpZiAoZHJpdmUtPmFjcGlkYXRhLT5vYmpfaGFuZGxlICYmIGRyaXZlLT5wcmVzZW50KSB7CisJCWlmIChkcml2ZS0+YWNwaWRhdGEtPm9ial9oYW5kbGUgJiYKKwkJICAgIChkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX1BSRVNFTlQpKSB7CiAJCQlhY3BpX2J1c19zZXRfcG93ZXIoZHJpdmUtPmFjcGlkYXRhLT5vYmpfaGFuZGxlLAogCQkJCW9uPyBBQ1BJX1NUQVRFX0QwOiBBQ1BJX1NUQVRFX0QzKTsKIAkJfQpAQCAtNzIwLDcgKzcyMiw3IEBACiAKIAkJbWVtc2V0KGRyaXZlLT5hY3BpZGF0YSwgMCwgc2l6ZW9mKCpkcml2ZS0+YWNwaWRhdGEpKTsKIAotCQlpZiAoIWRyaXZlLT5wcmVzZW50KQorCQlpZiAoKGRyaXZlLT5kZXZfZmxhZ3MgJiBJREVfREZMQUdfUFJFU0VOVCkgPT0gMCkKIAkJCWNvbnRpbnVlOwogCiAJCWVyciA9IHRhc2tmaWxlX2xpYl9nZXRfaWRlbnRpZnkoZHJpdmUsIGRyaXZlLT5hY3BpZGF0YS0+aWRidWZmKTsKQEAgLTc0NSw3ICs3NDcsNyBAQAogCWZvciAoaSA9IDA7IGkgPCBNQVhfRFJJVkVTOyBpKyspIHsKIAkJZHJpdmUgPSAmaHdpZi0+ZHJpdmVzW2ldOwogCi0JCWlmIChkcml2ZS0+cHJlc2VudCkKKwkJaWYgKGRyaXZlLT5kZXZfZmxhZ3MgJiBJREVfREZMQUdfUFJFU0VOVCkKIAkJCS8qIEV4ZWN1dGUgQUNQSSBzdGFydHVwIGNvZGUgKi8KIAkJCWlkZV9hY3BpX2V4ZWNfdGZzKGRyaXZlKTsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9pZGUtYXRhcGkuYyBiL2RyaXZlcnMvaWRlL2lkZS1hdGFwaS5jCmluZGV4IDYwOGM1YmEuLjRlNThiOWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2lkZS1hdGFwaS5jCisrKyBiL2RyaXZlcnMvaWRlL2lkZS1hdGFwaS5jCkBAIC0xMjQsOCArMTI0LDggQEAKICAqIHRoZSBjdXJyZW50IHJlcXVlc3QsIHNvIHRoYXQgaXQgd2lsbCBiZSBwcm9jZXNzZWQgaW1tZWRpYXRlbHksIG9uIHRoZSBuZXh0CiAgKiBwYXNzIHRocm91Z2ggdGhlIGRyaXZlci4KICAqLwotdm9pZCBpZGVfcXVldWVfcGNfaGVhZChpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCBnZW5kaXNrICpkaXNrLAotCQkgICAgICAgc3RydWN0IGlkZV9hdGFwaV9wYyAqcGMsIHN0cnVjdCByZXF1ZXN0ICpycSkKK3N0YXRpYyB2b2lkIGlkZV9xdWV1ZV9wY19oZWFkKGlkZV9kcml2ZV90ICpkcml2ZSwgc3RydWN0IGdlbmRpc2sgKmRpc2ssCisJCQkgICAgICBzdHJ1Y3QgaWRlX2F0YXBpX3BjICpwYywgc3RydWN0IHJlcXVlc3QgKnJxKQogewogCWJsa19ycV9pbml0KE5VTEwsIHJxKTsKIAlycS0+Y21kX3R5cGUgPSBSRVFfVFlQRV9TUEVDSUFMOwpAQCAtMTM3LDcgKzEzNyw2IEBACiAJCXJxLT5jbWRbMTNdID0gUkVRX0lERVRBUEVfUEMxOwogCWlkZV9kb19kcml2ZV9jbWQoZHJpdmUsIHJxKTsKIH0KLUVYUE9SVF9TWU1CT0xfR1BMKGlkZV9xdWV1ZV9wY19oZWFkKTsKIAogLyoKICAqIEFkZCBhIHNwZWNpYWwgcGFja2V0IGNvbW1hbmQgcmVxdWVzdCB0byB0aGUgdGFpbCBvZiB0aGUgcmVxdWVzdCBxdWV1ZSwKQEAgLTE5Miw3ICsxOTEsNyBAQAogewogCXN0cnVjdCBpZGVfYXRhcGlfcGMgcGM7CiAKLQlpZiAoZHJpdmUtPmF0YXBpX2ZsYWdzICYgSURFX0FGTEFHX05PX0RPT1JMT0NLKQorCWlmICgoZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19ET09STE9DS0lORykgPT0gMCkKIAkJcmV0dXJuIDA7CiAKIAlpZGVfaW5pdF9wYygmcGMpOwpAQCAtMjAzLDI1ICsyMDIsODAgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGlkZV9zZXRfbWVkaWFfbG9jayk7CiAKLS8qIFRPRE86IHVuaWZ5IHRoZSBjb2RlIHRodXMgbWFraW5nIHNvbWUgYXJndW1lbnRzIGdvIGF3YXkgKi8KLWlkZV9zdGFydHN0b3BfdCBpZGVfcGNfaW50cihpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCBpZGVfYXRhcGlfcGMgKnBjLAotCWlkZV9oYW5kbGVyX3QgKmhhbmRsZXIsIHVuc2lnbmVkIGludCB0aW1lb3V0LCBpZGVfZXhwaXJ5X3QgKmV4cGlyeSwKLQl2b2lkICgqdXBkYXRlX2J1ZmZlcnMpKGlkZV9kcml2ZV90ICosIHN0cnVjdCBpZGVfYXRhcGlfcGMgKiksCi0Jdm9pZCAoKnJldHJ5X3BjKShpZGVfZHJpdmVfdCAqKSwgdm9pZCAoKmRzY19oYW5kbGUpKGlkZV9kcml2ZV90ICopLAotCWludCAoKmlvX2J1ZmZlcnMpKGlkZV9kcml2ZV90ICosIHN0cnVjdCBpZGVfYXRhcGlfcGMgKiwgdW5zaWduZWQsIGludCkpCit2b2lkIGlkZV9jcmVhdGVfcmVxdWVzdF9zZW5zZV9jbWQoaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgaWRlX2F0YXBpX3BjICpwYykKIHsKKwlpZGVfaW5pdF9wYyhwYyk7CisJcGMtPmNbMF0gPSBSRVFVRVNUX1NFTlNFOworCWlmIChkcml2ZS0+bWVkaWEgPT0gaWRlX2Zsb3BweSkgeworCQlwYy0+Y1s0XSA9IDI1NTsKKwkJcGMtPnJlcV94ZmVyID0gMTg7CisJfSBlbHNlIHsKKwkJcGMtPmNbNF0gPSAyMDsKKwkJcGMtPnJlcV94ZmVyID0gMjA7CisJfQorfQorRVhQT1JUX1NZTUJPTF9HUEwoaWRlX2NyZWF0ZV9yZXF1ZXN0X3NlbnNlX2NtZCk7CisKKy8qCisgKiBDYWxsZWQgd2hlbiBhbiBlcnJvciB3YXMgZGV0ZWN0ZWQgZHVyaW5nIHRoZSBsYXN0IHBhY2tldCBjb21tYW5kLgorICogV2UgcXVldWUgYSByZXF1ZXN0IHNlbnNlIHBhY2tldCBjb21tYW5kIGluIHRoZSBoZWFkIG9mIHRoZSByZXF1ZXN0IGxpc3QuCisgKi8KK3ZvaWQgaWRlX3JldHJ5X3BjKGlkZV9kcml2ZV90ICpkcml2ZSwgc3RydWN0IGdlbmRpc2sgKmRpc2spCit7CisJc3RydWN0IHJlcXVlc3QgKnJxID0gJmRyaXZlLT5yZXF1ZXN0X3NlbnNlX3JxOworCXN0cnVjdCBpZGVfYXRhcGlfcGMgKnBjID0gJmRyaXZlLT5yZXF1ZXN0X3NlbnNlX3BjOworCisJKHZvaWQpaWRlX3JlYWRfZXJyb3IoZHJpdmUpOworCWlkZV9jcmVhdGVfcmVxdWVzdF9zZW5zZV9jbWQoZHJpdmUsIHBjKTsKKwlpZiAoZHJpdmUtPm1lZGlhID09IGlkZV90YXBlKQorCQlzZXRfYml0KElERV9BRkxBR19JR05PUkVfRFNDLCAmZHJpdmUtPmF0YXBpX2ZsYWdzKTsKKwlpZGVfcXVldWVfcGNfaGVhZChkcml2ZSwgZGlzaywgcGMsIHJxKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGlkZV9yZXRyeV9wYyk7CisKK2ludCBpZGVfc2NzaV9leHBpcnkoaWRlX2RyaXZlX3QgKmRyaXZlKQoreworCXN0cnVjdCBpZGVfYXRhcGlfcGMgKnBjID0gZHJpdmUtPnBjOworCisJZGVidWdfbG9nKCIlcyBjYWxsZWQgZm9yICVsdSBhdCAlbHVcbiIsIF9fZnVuY19fLAorCQkgIHBjLT5zY3NpX2NtZC0+c2VyaWFsX251bWJlciwgamlmZmllcyk7CisKKwlwYy0+ZmxhZ3MgfD0gUENfRkxBR19USU1FRE9VVDsKKworCXJldHVybiAwOyAvKiB3ZSBkbyBub3Qgd2FudCB0aGUgSURFIHN1YnN5c3RlbSB0byByZXRyeSAqLworfQorRVhQT1JUX1NZTUJPTF9HUEwoaWRlX3Njc2lfZXhwaXJ5KTsKKworLyoKKyAqIFRoaXMgaXMgdGhlIHVzdWFsIGludGVycnVwdCBoYW5kbGVyIHdoaWNoIHdpbGwgYmUgY2FsbGVkIGR1cmluZyBhIHBhY2tldAorICogY29tbWFuZC4gIFdlIHdpbGwgdHJhbnNmZXIgc29tZSBvZiB0aGUgZGF0YSAoYXMgcmVxdWVzdGVkIGJ5IHRoZSBkcml2ZSkKKyAqIGFuZCB3aWxsIHJlLXBvaW50IGludGVycnVwdCBoYW5kbGVyIHRvIHVzLgorICovCitzdGF0aWMgaWRlX3N0YXJ0c3RvcF90IGlkZV9wY19pbnRyKGlkZV9kcml2ZV90ICpkcml2ZSkKK3sKKwlzdHJ1Y3QgaWRlX2F0YXBpX3BjICpwYyA9IGRyaXZlLT5wYzsKIAlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7CiAJc3RydWN0IHJlcXVlc3QgKnJxID0gaHdpZi0+aHdncm91cC0+cnE7CiAJY29uc3Qgc3RydWN0IGlkZV90cF9vcHMgKnRwX29wcyA9IGh3aWYtPnRwX29wczsKIAl4ZmVyX2Z1bmNfdCAqeGZlcmZ1bmM7Ci0JdW5zaWduZWQgaW50IHRlbXA7CisJaWRlX2V4cGlyeV90ICpleHBpcnk7CisJdW5zaWduZWQgaW50IHRpbWVvdXQsIHRlbXA7CiAJdTE2IGJjb3VudDsKLQl1OCBzdGF0LCBpcmVhc29uLCBzY3NpID0gZHJpdmUtPnNjc2k7CisJdTggc3RhdCwgaXJlYXNvbiwgc2NzaSA9ICEhKGRyaXZlLT5kZXZfZmxhZ3MgJiBJREVfREZMQUdfU0NTSSksIGRzYyA9IDA7CiAKIAlkZWJ1Z19sb2coIkVudGVyICVzIC0gaW50ZXJydXB0IGhhbmRsZXJcbiIsIF9fZnVuY19fKTsKIAorCWlmIChzY3NpKSB7CisJCXRpbWVvdXQgPSBpZGVfc2NzaV9nZXRfdGltZW91dChwYyk7CisJCWV4cGlyeSA9IGlkZV9zY3NpX2V4cGlyeTsKKwl9IGVsc2UgeworCQl0aW1lb3V0ID0gKGRyaXZlLT5tZWRpYSA9PSBpZGVfZmxvcHB5KSA/IFdBSVRfRkxPUFBZX0NNRAorCQkJCQkJICAgICAgIDogV0FJVF9UQVBFX0NNRDsKKwkJZXhwaXJ5ID0gTlVMTDsKKwl9CisKIAlpZiAocGMtPmZsYWdzICYgUENfRkxBR19USU1FRE9VVCkgewotCQlkcml2ZS0+cGNfY2FsbGJhY2soZHJpdmUpOworCQlkcml2ZS0+cGNfY2FsbGJhY2soZHJpdmUsIDApOwogCQlyZXR1cm4gaWRlX3N0b3BwZWQ7CiAJfQogCkBAIC0yMzgsOCArMjkyLDggQEAKIAkJCXBjLT5mbGFncyB8PSBQQ19GTEFHX0RNQV9FUlJPUjsKIAkJfSBlbHNlIHsKIAkJCXBjLT54ZmVycmVkID0gcGMtPnJlcV94ZmVyOwotCQkJaWYgKHVwZGF0ZV9idWZmZXJzKQotCQkJCXVwZGF0ZV9idWZmZXJzKGRyaXZlLCBwYyk7CisJCQlpZiAoZHJpdmUtPnBjX3VwZGF0ZV9idWZmZXJzKQorCQkJCWRyaXZlLT5wY191cGRhdGVfYnVmZmVycyhkcml2ZSwgcGMpOwogCQl9CiAJCWRlYnVnX2xvZygiJXM6IERNQSBmaW5pc2hlZFxuIiwgZHJpdmUtPm5hbWUpOwogCX0KQEAgLTI3NiwyMSArMzMwLDE5IEBACiAJCQlkZWJ1Z19sb2coIltjbWQgJXhdOiBjaGVjayBjb25kaXRpb25cbiIsIHJxLT5jbWRbMF0pOwogCiAJCQkvKiBSZXRyeSBvcGVyYXRpb24gKi8KLQkJCXJldHJ5X3BjKGRyaXZlKTsKKwkJCWlkZV9yZXRyeV9wYyhkcml2ZSwgcnEtPnJxX2Rpc2spOwogCiAJCQkvKiBxdWV1ZWQsIGJ1dCBub3Qgc3RhcnRlZCAqLwogCQkJcmV0dXJuIGlkZV9zdG9wcGVkOwogCQl9CiBjbWRfZmluaXNoZWQ6CiAJCXBjLT5lcnJvciA9IDA7Ci0JCWlmICgocGMtPmZsYWdzICYgUENfRkxBR19XQUlUX0ZPUl9EU0MpICYmCi0JCSAgICAoc3RhdCAmIEFUQV9EU0MpID09IDApIHsKLQkJCWRzY19oYW5kbGUoZHJpdmUpOwotCQkJcmV0dXJuIGlkZV9zdG9wcGVkOwotCQl9CisKKwkJaWYgKChwYy0+ZmxhZ3MgJiBQQ19GTEFHX1dBSVRfRk9SX0RTQykgJiYgKHN0YXQgJiBBVEFfRFNDKSA9PSAwKQorCQkJZHNjID0gMTsKIAogCQkvKiBDb21tYW5kIGZpbmlzaGVkIC0gQ2FsbCB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gKi8KLQkJZHJpdmUtPnBjX2NhbGxiYWNrKGRyaXZlKTsKKwkJZHJpdmUtPnBjX2NhbGxiYWNrKGRyaXZlLCBkc2MpOwogCiAJCXJldHVybiBpZGVfc3RvcHBlZDsKIAl9CkBAIC0zMzYsNyArMzg4LDggQEAKIAkJCQkJdGVtcCA9IDA7CiAJCQkJaWYgKHRlbXApIHsKIAkJCQkJaWYgKHBjLT5zZykKLQkJCQkJCWlvX2J1ZmZlcnMoZHJpdmUsIHBjLCB0ZW1wLCAwKTsKKwkJCQkJCWRyaXZlLT5wY19pb19idWZmZXJzKGRyaXZlLCBwYywKKwkJCQkJCQkJICAgICB0ZW1wLCAwKTsKIAkJCQkJZWxzZQogCQkJCQkJdHBfb3BzLT5pbnB1dF9kYXRhKGRyaXZlLCBOVUxMLAogCQkJCQkJCXBjLT5jdXJfcG9zLCB0ZW1wKTsKQEAgLTM0OCw5ICs0MDEsNyBAQAogCQkJCXBjLT54ZmVycmVkICs9IHRlbXA7CiAJCQkJcGMtPmN1cl9wb3MgKz0gdGVtcDsKIAkJCQlpZGVfcGFkX3RyYW5zZmVyKGRyaXZlLCAwLCBiY291bnQgLSB0ZW1wKTsKLQkJCQlpZGVfc2V0X2hhbmRsZXIoZHJpdmUsIGhhbmRsZXIsIHRpbWVvdXQsCi0JCQkJCQlleHBpcnkpOwotCQkJCXJldHVybiBpZGVfc3RhcnRlZDsKKwkJCQlnb3RvIG5leHRfaXJxOwogCQkJfQogCQkJZGVidWdfbG9nKCJUaGUgZGV2aWNlIHdhbnRzIHRvIHNlbmQgdXMgbW9yZSBkYXRhIHRoYW4gIgogCQkJCSAgImV4cGVjdGVkIC0gYWxsb3dpbmcgdHJhbnNmZXJcbiIpOwpAQCAtMzYyLDcgKzQxMyw3IEBACiAJaWYgKChkcml2ZS0+bWVkaWEgPT0gaWRlX2Zsb3BweSAmJiAhc2NzaSAmJiAhcGMtPmJ1ZikgfHwKIAkgICAgKGRyaXZlLT5tZWRpYSA9PSBpZGVfdGFwZSAmJiAhc2NzaSAmJiBwYy0+YmgpIHx8CiAJICAgIChzY3NpICYmIHBjLT5zZykpIHsKLQkJaW50IGRvbmUgPSBpb19idWZmZXJzKGRyaXZlLCBwYywgYmNvdW50LAorCQlpbnQgZG9uZSA9IGRyaXZlLT5wY19pb19idWZmZXJzKGRyaXZlLCBwYywgYmNvdW50LAogCQkJCSAgISEocGMtPmZsYWdzICYgUENfRkxBR19XUklUSU5HKSk7CiAKIAkJLyogRklYTUU6IGRvbid0IGRvIHBhcnRpYWwgY29tcGxldGlvbnMgKi8KQEAgLTM3NywxMiArNDI4LDExIEBACiAKIAlkZWJ1Z19sb2coIltjbWQgJXhdIHRyYW5zZmVycmVkICVkIGJ5dGVzIG9uIHRoYXQgaW50ci5cbiIsCiAJCSAgcnEtPmNtZFswXSwgYmNvdW50KTsKLQorbmV4dF9pcnE6CiAJLyogQW5kIHNldCB0aGUgaW50ZXJydXB0IGhhbmRsZXIgYWdhaW4gKi8KLQlpZGVfc2V0X2hhbmRsZXIoZHJpdmUsIGhhbmRsZXIsIHRpbWVvdXQsIGV4cGlyeSk7CisJaWRlX3NldF9oYW5kbGVyKGRyaXZlLCBpZGVfcGNfaW50ciwgdGltZW91dCwgZXhwaXJ5KTsKIAlyZXR1cm4gaWRlX3N0YXJ0ZWQ7CiB9Ci1FWFBPUlRfU1lNQk9MX0dQTChpZGVfcGNfaW50cik7CiAKIHN0YXRpYyB1OCBpZGVfcmVhZF9pcmVhc29uKGlkZV9kcml2ZV90ICpkcml2ZSkKIHsKQEAgLTQxOCwxMiArNDY4LDIyIEBACiAJcmV0dXJuIGlyZWFzb247CiB9CiAKLWlkZV9zdGFydHN0b3BfdCBpZGVfdHJhbnNmZXJfcGMoaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgaWRlX2F0YXBpX3BjICpwYywKLQkJCQlpZGVfaGFuZGxlcl90ICpoYW5kbGVyLCB1bnNpZ25lZCBpbnQgdGltZW91dCwKLQkJCQlpZGVfZXhwaXJ5X3QgKmV4cGlyeSkKK3N0YXRpYyBpbnQgaWRlX2RlbGF5ZWRfdHJhbnNmZXJfcGMoaWRlX2RyaXZlX3QgKmRyaXZlKQogeworCS8qIFNlbmQgdGhlIGFjdHVhbCBwYWNrZXQgKi8KKwlkcml2ZS0+aHdpZi0+dHBfb3BzLT5vdXRwdXRfZGF0YShkcml2ZSwgTlVMTCwgZHJpdmUtPnBjLT5jLCAxMik7CisKKwkvKiBUaW1lb3V0IGZvciB0aGUgcGFja2V0IGNvbW1hbmQgKi8KKwlyZXR1cm4gV0FJVF9GTE9QUFlfQ01EOworfQorCitzdGF0aWMgaWRlX3N0YXJ0c3RvcF90IGlkZV90cmFuc2Zlcl9wYyhpZGVfZHJpdmVfdCAqZHJpdmUpCit7CisJc3RydWN0IGlkZV9hdGFwaV9wYyAqcGMgPSBkcml2ZS0+cGM7CiAJaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOwogCXN0cnVjdCByZXF1ZXN0ICpycSA9IGh3aWYtPmh3Z3JvdXAtPnJxOworCWlkZV9leHBpcnlfdCAqZXhwaXJ5OworCXVuc2lnbmVkIGludCB0aW1lb3V0OwogCWlkZV9zdGFydHN0b3BfdCBzdGFydHN0b3A7CiAJdTggaXJlYXNvbjsKIApAQCAtNDM0LDcgKzQ5NCw4IEBACiAJfQogCiAJaXJlYXNvbiA9IGlkZV9yZWFkX2lyZWFzb24oZHJpdmUpOwotCWlmIChkcml2ZS0+bWVkaWEgPT0gaWRlX3RhcGUgJiYgIWRyaXZlLT5zY3NpKQorCWlmIChkcml2ZS0+bWVkaWEgPT0gaWRlX3RhcGUgJiYKKwkgICAgKGRyaXZlLT5kZXZfZmxhZ3MgJiBJREVfREZMQUdfU0NTSSkgPT0gMCkKIAkJaXJlYXNvbiA9IGlkZV93YWl0X2lyZWFzb24oZHJpdmUsIGlyZWFzb24pOwogCiAJaWYgKChpcmVhc29uICYgQVRBUElfQ09EKSA9PSAwIHx8IChpcmVhc29uICYgQVRBUElfSU8pKSB7CkBAIC00NDMsOCArNTA0LDI3IEBACiAJCXJldHVybiBpZGVfZG9fcmVzZXQoZHJpdmUpOwogCX0KIAorCS8qCisJICogSWYgbmVjZXNzYXJ5IHNjaGVkdWxlIHRoZSBwYWNrZXQgdHJhbnNmZXIgdG8gb2NjdXIgJ3RpbWVvdXQnCisJICogbWlsaXNlY29uZHMgbGF0ZXIgaW4gaWRlX2RlbGF5ZWRfdHJhbnNmZXJfcGMoKSBhZnRlciB0aGUgZGV2aWNlCisJICogc2F5cyBpdCdzIHJlYWR5IGZvciBhIHBhY2tldC4KKwkgKi8KKwlpZiAoZHJpdmUtPmF0YXBpX2ZsYWdzICYgSURFX0FGTEFHX1pJUF9EUklWRSkgeworCQl0aW1lb3V0ID0gZHJpdmUtPnBjX2RlbGF5OworCQlleHBpcnkgPSAmaWRlX2RlbGF5ZWRfdHJhbnNmZXJfcGM7CisJfSBlbHNlIHsKKwkJaWYgKGRyaXZlLT5kZXZfZmxhZ3MgJiBJREVfREZMQUdfU0NTSSkgeworCQkJdGltZW91dCA9IGlkZV9zY3NpX2dldF90aW1lb3V0KHBjKTsKKwkJCWV4cGlyeSA9IGlkZV9zY3NpX2V4cGlyeTsKKwkJfSBlbHNlIHsKKwkJCXRpbWVvdXQgPSAoZHJpdmUtPm1lZGlhID09IGlkZV9mbG9wcHkpID8gV0FJVF9GTE9QUFlfQ01ECisJCQkJCQkJICAgICAgIDogV0FJVF9UQVBFX0NNRDsKKwkJCWV4cGlyeSA9IE5VTEw7CisJCX0KKwl9CisKIAkvKiBTZXQgdGhlIGludGVycnVwdCByb3V0aW5lICovCi0JaWRlX3NldF9oYW5kbGVyKGRyaXZlLCBoYW5kbGVyLCB0aW1lb3V0LCBleHBpcnkpOworCWlkZV9zZXRfaGFuZGxlcihkcml2ZSwgaWRlX3BjX2ludHIsIHRpbWVvdXQsIGV4cGlyeSk7CiAKIAkvKiBCZWdpbiBETUEsIGlmIG5lY2Vzc2FyeSAqLwogCWlmIChwYy0+ZmxhZ3MgJiBQQ19GTEFHX0RNQV9PSykgewpAQCAtNDU4LDIyICs1MzgsMjIgQEAKIAogCXJldHVybiBpZGVfc3RhcnRlZDsKIH0KLUVYUE9SVF9TWU1CT0xfR1BMKGlkZV90cmFuc2Zlcl9wYyk7CiAKLWlkZV9zdGFydHN0b3BfdCBpZGVfaXNzdWVfcGMoaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgaWRlX2F0YXBpX3BjICpwYywKLQkJCSAgICAgaWRlX2hhbmRsZXJfdCAqaGFuZGxlciwgdW5zaWduZWQgaW50IHRpbWVvdXQsCitpZGVfc3RhcnRzdG9wX3QgaWRlX2lzc3VlX3BjKGlkZV9kcml2ZV90ICpkcml2ZSwgdW5zaWduZWQgaW50IHRpbWVvdXQsCiAJCQkgICAgIGlkZV9leHBpcnlfdCAqZXhwaXJ5KQogeworCXN0cnVjdCBpZGVfYXRhcGlfcGMgKnBjID0gZHJpdmUtPnBjOwogCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKKwl1MzIgdGZfZmxhZ3M7CiAJdTE2IGJjb3VudDsKLQl1OCBkbWEgPSAwOworCXU4IHNjc2kgPSAhIShkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX1NDU0kpOwogCiAJLyogV2UgaGF2ZW4ndCB0cmFuc2ZlcnJlZCBhbnkgZGF0YSB5ZXQgKi8KIAlwYy0+eGZlcnJlZCA9IDA7CiAJcGMtPmN1cl9wb3MgPSBwYy0+YnVmOwogCiAJLyogUmVxdWVzdCB0byB0cmFuc2ZlciB0aGUgZW50aXJlIGJ1ZmZlciBhdCBvbmNlICovCi0JaWYgKGRyaXZlLT5tZWRpYSA9PSBpZGVfdGFwZSAmJiAhZHJpdmUtPnNjc2kpCisJaWYgKGRyaXZlLT5tZWRpYSA9PSBpZGVfdGFwZSAmJiBzY3NpID09IDApCiAJCWJjb3VudCA9IHBjLT5yZXFfeGZlcjsKIAllbHNlCiAJCWJjb3VudCA9IG1pbihwYy0+cmVxX3hmZXIsIDYzICogMTAyNCk7CkBAIC00ODMsMjggKzU2MywzNSBAQAogCQlpZGVfZG1hX29mZihkcml2ZSk7CiAJfQogCi0JaWYgKChwYy0+ZmxhZ3MgJiBQQ19GTEFHX0RNQV9PSykgJiYgZHJpdmUtPnVzaW5nX2RtYSkgewotCQlpZiAoZHJpdmUtPnNjc2kpCisJaWYgKChwYy0+ZmxhZ3MgJiBQQ19GTEFHX0RNQV9PSykgJiYKKwkgICAgKGRyaXZlLT5kZXZfZmxhZ3MgJiBJREVfREZMQUdfVVNJTkdfRE1BKSkgeworCQlpZiAoc2NzaSkKIAkJCWh3aWYtPnNnX21hcHBlZCA9IDE7Ci0JCWRtYSA9ICFod2lmLT5kbWFfb3BzLT5kbWFfc2V0dXAoZHJpdmUpOwotCQlpZiAoZHJpdmUtPnNjc2kpCisJCWRyaXZlLT5kbWEgPSAhaHdpZi0+ZG1hX29wcy0+ZG1hX3NldHVwKGRyaXZlKTsKKwkJaWYgKHNjc2kpCiAJCQlod2lmLT5zZ19tYXBwZWQgPSAwOwogCX0KIAotCWlmICghZG1hKQorCWlmICghZHJpdmUtPmRtYSkKIAkJcGMtPmZsYWdzICY9IH5QQ19GTEFHX0RNQV9PSzsKIAotCWlkZV9wa3RjbWRfdGZfbG9hZChkcml2ZSwgZHJpdmUtPnNjc2kgPyAwIDogSURFX1RGTEFHX09VVF9ERVZJQ0UsCi0JCQkgICBiY291bnQsIGRtYSk7CisJaWYgKHNjc2kpCisJCXRmX2ZsYWdzID0gMDsKKwllbHNlIGlmIChkcml2ZS0+bWVkaWEgPT0gaWRlX2Nkcm9tIHx8IGRyaXZlLT5tZWRpYSA9PSBpZGVfb3B0aWNhbCkKKwkJdGZfZmxhZ3MgPSBJREVfVEZMQUdfT1VUX05TRUNUIHwgSURFX1RGTEFHX09VVF9MQkFMOworCWVsc2UKKwkJdGZfZmxhZ3MgPSBJREVfVEZMQUdfT1VUX0RFVklDRTsKKworCWlkZV9wa3RjbWRfdGZfbG9hZChkcml2ZSwgdGZfZmxhZ3MsIGJjb3VudCwgZHJpdmUtPmRtYSk7CiAKIAkvKiBJc3N1ZSB0aGUgcGFja2V0IGNvbW1hbmQgKi8KIAlpZiAoZHJpdmUtPmF0YXBpX2ZsYWdzICYgSURFX0FGTEFHX0RSUV9JTlRFUlJVUFQpIHsKLQkJaWRlX2V4ZWN1dGVfY29tbWFuZChkcml2ZSwgQVRBX0NNRF9QQUNLRVQsIGhhbmRsZXIsCisJCWlkZV9leGVjdXRlX2NvbW1hbmQoZHJpdmUsIEFUQV9DTURfUEFDS0VULCBpZGVfdHJhbnNmZXJfcGMsCiAJCQkJICAgIHRpbWVvdXQsIE5VTEwpOwogCQlyZXR1cm4gaWRlX3N0YXJ0ZWQ7CiAJfSBlbHNlIHsKIAkJaWRlX2V4ZWN1dGVfcGt0X2NtZChkcml2ZSk7Ci0JCXJldHVybiAoKmhhbmRsZXIpKGRyaXZlKTsKKwkJcmV0dXJuIGlkZV90cmFuc2Zlcl9wYyhkcml2ZSk7CiAJfQogfQogRVhQT1JUX1NZTUJPTF9HUEwoaWRlX2lzc3VlX3BjKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2lkZS1jZC5jIGIvZHJpdmVycy9pZGUvaWRlLWNkLmMKaW5kZXggNDY1YTkyYy4uMTMyNjVhOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvaWRlLWNkLmMKKysrIGIvZHJpdmVycy9pZGUvaWRlLWNkLmMKQEAgLTIzLDYgKzIzLDkgQEAKICAqCURvY3VtZW50YXRpb24vaWRlL0NoYW5nZUxvZy5pZGUtY2QuMTk5NC0yMDA0CiAgKi8KIAorI2RlZmluZSBEUlZfTkFNRSAiaWRlLWNkIgorI2RlZmluZSBQRlggRFJWX05BTUUgIjogIgorCiAjZGVmaW5lIElERUNEX1ZFUlNJT04gIjUuMDAiCiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KQEAgLTUwLDEzICs1MywxNiBAQAogCiAjaW5jbHVkZSAiaWRlLWNkLmgiCiAKKyNkZWZpbmUgSURFQ0RfREVCVUdfTE9HCQkxCisKKyNpZiBJREVDRF9ERUJVR19MT0cKKyNkZWZpbmUgaWRlX2RlYnVnX2xvZyhsdmwsIGZtdCwgYXJncy4uLikgX19pZGVfZGVidWdfbG9nKGx2bCwgZm10LCBhcmdzKQorI2Vsc2UKKyNkZWZpbmUgaWRlX2RlYnVnX2xvZyhsdmwsIGZtdCwgYXJncy4uLikgZG8ge30gd2hpbGUgKDApCisjZW5kaWYKKwogc3RhdGljIERFRklORV9NVVRFWChpZGVjZF9yZWZfbXV0ZXgpOwogCi0jZGVmaW5lIHRvX2lkZV9jZChvYmopIGNvbnRhaW5lcl9vZihvYmosIHN0cnVjdCBjZHJvbV9pbmZvLCBrcmVmKQotCi0jZGVmaW5lIGlkZV9jZF9nKGRpc2spIFwKLQljb250YWluZXJfb2YoKGRpc2spLT5wcml2YXRlX2RhdGEsIHN0cnVjdCBjZHJvbV9pbmZvLCBkcml2ZXIpCi0KIHN0YXRpYyB2b2lkIGlkZV9jZF9yZWxlYXNlKHN0cnVjdCBrcmVmICopOwogCiBzdGF0aWMgc3RydWN0IGNkcm9tX2luZm8gKmlkZV9jZF9nZXQoc3RydWN0IGdlbmRpc2sgKmRpc2spCkBAIC02NCw3ICs3MCw3IEBACiAJc3RydWN0IGNkcm9tX2luZm8gKmNkID0gTlVMTDsKIAogCW11dGV4X2xvY2soJmlkZWNkX3JlZl9tdXRleCk7Ci0JY2QgPSBpZGVfY2RfZyhkaXNrKTsKKwljZCA9IGlkZV9kcnZfZyhkaXNrLCBjZHJvbV9pbmZvKTsKIAlpZiAoY2QpIHsKIAkJaWYgKGlkZV9kZXZpY2VfZ2V0KGNkLT5kcml2ZSkpCiAJCQljZCA9IE5VTEw7CkBAIC05Myw3ICs5OSw3IEBACiAvKiBNYXJrIHRoYXQgd2UndmUgc2VlbiBhIG1lZGlhIGNoYW5nZSBhbmQgaW52YWxpZGF0ZSBvdXIgaW50ZXJuYWwgYnVmZmVycy4gKi8KIHN0YXRpYyB2b2lkIGNkcm9tX3Nhd19tZWRpYV9jaGFuZ2UoaWRlX2RyaXZlX3QgKmRyaXZlKQogewotCWRyaXZlLT5hdGFwaV9mbGFncyB8PSBJREVfQUZMQUdfTUVESUFfQ0hBTkdFRDsKKwlkcml2ZS0+ZGV2X2ZsYWdzIHw9IElERV9ERkxBR19NRURJQV9DSEFOR0VEOwogCWRyaXZlLT5hdGFwaV9mbGFncyAmPSB+SURFX0FGTEFHX1RPQ19WQUxJRDsKIH0KIApAQCAtMTAyLDYgKzEwOCw5IEBACiB7CiAJaW50IGxvZyA9IDA7CiAKKwlpZGVfZGVidWdfbG9nKElERV9EQkdfU0VOU0UsICJDYWxsICVzLCBzZW5zZV9rZXk6IDB4JXhcbiIsIF9fZnVuY19fLAorCQkgICAgICBzZW5zZS0+c2Vuc2Vfa2V5KTsKKwogCWlmICghc2Vuc2UgfHwgIXJxIHx8IChycS0+Y21kX2ZsYWdzICYgUkVRX1FVSUVUKSkKIAkJcmV0dXJuIDA7CiAKQEAgLTE1MCw2ICsxNTksMTQgQEAKIAl1bnNpZ25lZCBsb25nIGJpb19zZWN0b3JzOwogCXN0cnVjdCBjZHJvbV9pbmZvICppbmZvID0gZHJpdmUtPmRyaXZlcl9kYXRhOwogCisJaWRlX2RlYnVnX2xvZyhJREVfREJHX1NFTlNFLCAiQ2FsbCAlcywgZXJyb3JfY29kZTogMHgleCwgIgorCQkJInNlbnNlX2tleTogMHgleFxuIiwgX19mdW5jX18sIHNlbnNlLT5lcnJvcl9jb2RlLAorCQkJc2Vuc2UtPnNlbnNlX2tleSk7CisKKwlpZiAoZmFpbGVkX2NvbW1hbmQpCisJCWlkZV9kZWJ1Z19sb2coSURFX0RCR19TRU5TRSwgIiVzOiBmYWlsZWQgY21kOiAweCV4XG4iLAorCQkJCV9fZnVuY19fLCBmYWlsZWRfY29tbWFuZC0+Y21kWzBdKTsKKwogCWlmICghY2Ryb21fbG9nX3NlbnNlKGRyaXZlLCBmYWlsZWRfY29tbWFuZCwgc2Vuc2UpKQogCQlyZXR1cm47CiAKQEAgLTIwMCw2ICsyMTcsOCBAQAogCXN0cnVjdCBjZHJvbV9pbmZvICppbmZvCQk9IGRyaXZlLT5kcml2ZXJfZGF0YTsKIAlzdHJ1Y3QgcmVxdWVzdCAqcnEJCT0gJmluZm8tPnJlcXVlc3Rfc2Vuc2VfcmVxdWVzdDsKIAorCWlkZV9kZWJ1Z19sb2coSURFX0RCR19TRU5TRSwgIkNhbGwgJXNcbiIsIF9fZnVuY19fKTsKKwogCWlmIChzZW5zZSA9PSBOVUxMKQogCQlzZW5zZSA9ICZpbmZvLT5zZW5zZV9kYXRhOwogCkBAIC0yMTksNiArMjM4LDEwIEBACiAJLyogTk9URSEgU2F2ZSB0aGUgZmFpbGVkIGNvbW1hbmQgaW4gInJxLT5idWZmZXIiICovCiAJcnEtPmJ1ZmZlciA9ICh2b2lkICopIGZhaWxlZF9jb21tYW5kOwogCisJaWYgKGZhaWxlZF9jb21tYW5kKQorCQlpZGVfZGVidWdfbG9nKElERV9EQkdfU0VOU0UsICJmYWlsZWRfY21kOiAweCV4XG4iLAorCQkJICAgICAgZmFpbGVkX2NvbW1hbmQtPmNtZFswXSk7CisKIAlpZGVfZG9fZHJpdmVfY21kKGRyaXZlLCBycSk7CiB9CiAKQEAgLTIyNyw2ICsyNTAsMTAgQEAKIAlzdHJ1Y3QgcmVxdWVzdCAqcnEgPSBIV0dST1VQKGRyaXZlKS0+cnE7CiAJaW50IG5zZWN0b3JzID0gcnEtPmhhcmRfY3VyX3NlY3RvcnM7CiAKKwlpZGVfZGVidWdfbG9nKElERV9EQkdfRlVOQywgIkNhbGwgJXMsIGNtZDogMHgleCwgdXB0b2RhdGU6IDB4JXgsICIKKwkJICAgICAgIm5zZWN0b3JzOiAlZFxuIiwgX19mdW5jX18sIHJxLT5jbWRbMF0sIHVwdG9kYXRlLAorCQkgICAgICBuc2VjdG9ycyk7CisKIAlpZiAoYmxrX3NlbnNlX3JlcXVlc3QocnEpICYmIHVwdG9kYXRlKSB7CiAJCS8qCiAJCSAqIEZvciBSRVFfVFlQRV9TRU5TRSwgInJxLT5idWZmZXIiIHBvaW50cyB0byB0aGUgb3JpZ2luYWwKQEAgLTI2OSw2ICsyOTYsOSBAQAogCWlmICghbnNlY3RvcnMpCiAJCW5zZWN0b3JzID0gMTsKIAorCWlkZV9kZWJ1Z19sb2coSURFX0RCR19GVU5DLCAiRXhpdCAlcywgdXB0b2RhdGU6IDB4JXgsIG5zZWN0b3JzOiAlZFxuIiwKKwkJICAgICAgX19mdW5jX18sIHVwdG9kYXRlLCBuc2VjdG9ycyk7CisKIAlpZGVfZW5kX3JlcXVlc3QoZHJpdmUsIHVwdG9kYXRlLCBuc2VjdG9ycyk7CiB9CiAKQEAgLTMwNCwxMSArMzM0LDE1IEBACiAJc2Vuc2Vfa2V5ID0gZXJyID4+IDQ7CiAKIAlpZiAocnEgPT0gTlVMTCkgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBtaXNzaW5nIHJxIGluICVzXG4iLAorCQlwcmludGsoS0VSTl9FUlIgUEZYICIlczogbWlzc2luZyBycSBpbiAlc1xuIiwKIAkJCQlkcml2ZS0+bmFtZSwgX19mdW5jX18pOwogCQlyZXR1cm4gMTsKIAl9CiAKKwlpZGVfZGVidWdfbG9nKElERV9EQkdfUlEsICIlczogc3RhdDogMHgleCwgZ29vZF9zdGF0OiAweCV4LCAiCisJCSAgICAgICJycS0+Y21kWzBdOiAweCV4LCBycS0+Y21kX3R5cGU6IDB4JXgsIGVycjogMHgleFxuIiwKKwkJICAgICAgX19mdW5jX18sIHN0YXQsIGdvb2Rfc3RhdCwgcnEtPmNtZFswXSwgcnEtPmNtZF90eXBlLCBlcnIpOworCiAJaWYgKGJsa19zZW5zZV9yZXF1ZXN0KHJxKSkgewogCQkvKgogCQkgKiBXZSBnb3QgYW4gZXJyb3IgdHJ5aW5nIHRvIGdldCBzZW5zZSBpbmZvIGZyb20gdGhlIGRyaXZlCkBAIC0zNzQsNyArNDA4LDggQEAKIAkJCQljZHJvbV9zYXdfbWVkaWFfY2hhbmdlKGRyaXZlKTsKIAogCQkJCS8qIGZhaWwgdGhlIHJlcXVlc3QgKi8KLQkJCQlwcmludGsoS0VSTl9FUlIgIiVzOiB0cmF5IG9wZW5cbiIsIGRyaXZlLT5uYW1lKTsKKwkJCQlwcmludGsoS0VSTl9FUlIgUEZYICIlczogdHJheSBvcGVuXG4iLAorCQkJCQkJZHJpdmUtPm5hbWUpOwogCQkJCWRvX2VuZF9yZXF1ZXN0ID0gMTsKIAkJCX0gZWxzZSB7CiAJCQkJc3RydWN0IGNkcm9tX2luZm8gKmluZm8gPSBkcml2ZS0+ZHJpdmVyX2RhdGE7CkBAIC00NjAsNyArNDk1LDcgQEAKIAkJaWYgKHN0YXQgJiBBVEFfRVJSKQogCQkJY2Ryb21fcXVldWVfcmVxdWVzdF9zZW5zZShkcml2ZSwgTlVMTCwgTlVMTCk7CiAJfSBlbHNlIHsKLQkJYmxrX2R1bXBfcnFfZmxhZ3MocnEsICJpZGUtY2Q6IGJhZCBycSIpOworCQlibGtfZHVtcF9ycV9mbGFncyhycSwgUEZYICJiYWQgcnEiKTsKIAkJY2Ryb21fZW5kX3JlcXVlc3QoZHJpdmUsIDApOwogCX0KIApAQCAtNDg4LDYgKzUyMyw5IEBACiAJc3RydWN0IHJlcXVlc3QgKnJxID0gSFdHUk9VUChkcml2ZSktPnJxOwogCXVuc2lnbmVkIGxvbmcgd2FpdCA9IDA7CiAKKwlpZGVfZGVidWdfbG9nKElERV9EQkdfUlEsICJDYWxsICVzOiBycS0+Y21kWzBdOiAweCV4XG4iLCBfX2Z1bmNfXywKKwkJICAgICAgcnEtPmNtZFswXSk7CisKIAkvKgogCSAqIFNvbWUgY29tbWFuZHMgYXJlICpzbG93KiBhbmQgbm9ybWFsbHkgdGFrZSBhIGxvbmcgdGltZSB0byBjb21wbGV0ZS4KIAkgKiBVc3VhbGx5IHdlIGNhbiB1c2UgdGhlIEFUQVBJICJkaXNjb25uZWN0IiB0byBieXBhc3MgdGhpcywgYnV0IG5vdCBhbGwKQEAgLTUwNCw3ICs1NDIsNyBAQAogCQlicmVhazsKIAlkZWZhdWx0OgogCQlpZiAoIShycS0+Y21kX2ZsYWdzICYgUkVRX1FVSUVUKSkKLQkJCXByaW50ayhLRVJOX0lORk8gImlkZS1jZDogY21kIDB4JXggdGltZWQgb3V0XG4iLAorCQkJcHJpbnRrKEtFUk5fSU5GTyBQRlggImNtZCAweCV4IHRpbWVkIG91dFxuIiwKIAkJCQkJIHJxLT5jbWRbMF0pOwogCQl3YWl0ID0gMDsKIAkJYnJlYWs7CkBAIC01MjQsMjAgKzU2MiwyMSBAQAogCQkJCQkJICBpbnQgeGZlcmxlbiwKIAkJCQkJCSAgaWRlX2hhbmRsZXJfdCAqaGFuZGxlcikKIHsKLQlzdHJ1Y3QgY2Ryb21faW5mbyAqaW5mbyA9IGRyaXZlLT5kcml2ZXJfZGF0YTsKIAlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7CiAKKwlpZGVfZGVidWdfbG9nKElERV9EQkdfUEMsICJDYWxsICVzLCB4ZmVybGVuOiAlZFxuIiwgX19mdW5jX18sIHhmZXJsZW4pOworCiAJLyogRklYTUU6IGZvciBWaXJ0dWFsIERNQSB3ZSBtdXN0IGNoZWNrIGhhcmRlciAqLwotCWlmIChpbmZvLT5kbWEpCi0JCWluZm8tPmRtYSA9ICFod2lmLT5kbWFfb3BzLT5kbWFfc2V0dXAoZHJpdmUpOworCWlmIChkcml2ZS0+ZG1hKQorCQlkcml2ZS0+ZG1hID0gIWh3aWYtPmRtYV9vcHMtPmRtYV9zZXR1cChkcml2ZSk7CiAKIAkvKiBzZXQgdXAgdGhlIGNvbnRyb2xsZXIgcmVnaXN0ZXJzICovCiAJaWRlX3BrdGNtZF90Zl9sb2FkKGRyaXZlLCBJREVfVEZMQUdfT1VUX05TRUNUIHwgSURFX1RGTEFHX09VVF9MQkFMLAotCQkJICAgeGZlcmxlbiwgaW5mby0+ZG1hKTsKKwkJCSAgIHhmZXJsZW4sIGRyaXZlLT5kbWEpOwogCiAJaWYgKGRyaXZlLT5hdGFwaV9mbGFncyAmIElERV9BRkxBR19EUlFfSU5URVJSVVBUKSB7CiAJCS8qIHdhaXRpbmcgZm9yIENEQiBpbnRlcnJ1cHQsIG5vdCBETUEgeWV0LiAqLwotCQlpZiAoaW5mby0+ZG1hKQorCQlpZiAoZHJpdmUtPmRtYSkKIAkJCWRyaXZlLT53YWl0aW5nX2Zvcl9kbWEgPSAwOwogCiAJCS8qIHBhY2tldCBjb21tYW5kICovCkBAIC01NjQsOSArNjAzLDEwIEBACiB7CiAJaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOwogCWludCBjbWRfbGVuOwotCXN0cnVjdCBjZHJvbV9pbmZvICppbmZvID0gZHJpdmUtPmRyaXZlcl9kYXRhOwogCWlkZV9zdGFydHN0b3BfdCBzdGFydHN0b3A7CiAKKwlpZGVfZGVidWdfbG9nKElERV9EQkdfUEMsICJDYWxsICVzXG4iLCBfX2Z1bmNfXyk7CisKIAlpZiAoZHJpdmUtPmF0YXBpX2ZsYWdzICYgSURFX0FGTEFHX0RSUV9JTlRFUlJVUFQpIHsKIAkJLyoKIAkJICogSGVyZSB3ZSBzaG91bGQgaGF2ZSBiZWVuIGNhbGxlZCBhZnRlciByZWNlaXZpbmcgYW4gaW50ZXJydXB0CkBAIC01NzgsNyArNjE4LDcgQEAKIAkJCXJldHVybiBpZGVfc3RvcHBlZDsKIAogCQkvKiBvaywgbmV4dCBpbnRlcnJ1cHQgd2lsbCBiZSBETUEgaW50ZXJydXB0ICovCi0JCWlmIChpbmZvLT5kbWEpCisJCWlmIChkcml2ZS0+ZG1hKQogCQkJZHJpdmUtPndhaXRpbmdfZm9yX2RtYSA9IDE7CiAJfSBlbHNlIHsKIAkJLyogb3RoZXJ3aXNlLCB3ZSBtdXN0IHdhaXQgZm9yIERSUSB0byBnZXQgc2V0ICovCkBAIC01OTksNyArNjM5LDcgQEAKIAlod2lmLT50cF9vcHMtPm91dHB1dF9kYXRhKGRyaXZlLCBOVUxMLCBycS0+Y21kLCBjbWRfbGVuKTsKIAogCS8qIHN0YXJ0IHRoZSBETUEgaWYgbmVlZCBiZSAqLwotCWlmIChpbmZvLT5kbWEpCisJaWYgKGRyaXZlLT5kbWEpCiAJCWh3aWYtPmRtYV9vcHMtPmRtYV9zdGFydChkcml2ZSk7CiAKIAlyZXR1cm4gaWRlX3N0YXJ0ZWQ7CkBAIC02MTUsNiArNjU1LDkgQEAKIHsKIAlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7CiAKKwlpZGVfZGVidWdfbG9nKElERV9EQkdfRlVOQywgIkNhbGwgJXMsIGlyZWFzb246IDB4JXgsIHJ3OiAweCV4XG4iLAorCQkgICAgICBfX2Z1bmNfXywgaXJlYXNvbiwgcncpOworCiAJLyoKIAkgKiBpcmVhc29uID09IDA6IHRoZSBkcml2ZSB3YW50cyB0byByZWNlaXZlIGRhdGEgZnJvbSB1cwogCSAqIGlyZWFzb24gPT0gMjogdGhlIGRyaXZlIGlzIGV4cGVjdGluZyB0byB0cmFuc2ZlciBkYXRhIHRvIHVzCkBAIC02MjQsNyArNjY3LDcgQEAKIAllbHNlIGlmIChpcmVhc29uID09IChydyA8PCAxKSkgewogCiAJCS8qIHdob29wcy4uLiAqLwotCQlwcmludGsoS0VSTl9FUlIgIiVzOiAlczogd3JvbmcgdHJhbnNmZXIgZGlyZWN0aW9uIVxuIiwKKwkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiJXM6ICVzOiB3cm9uZyB0cmFuc2ZlciBkaXJlY3Rpb24hXG4iLAogCQkJCWRyaXZlLT5uYW1lLCBfX2Z1bmNfXyk7CiAKIAkJaWRlX3BhZF90cmFuc2Zlcihkcml2ZSwgcncsIGxlbik7CkBAIC02MzcsNyArNjgwLDcgQEAKIAkJcmV0dXJuIDA7CiAJfSBlbHNlIHsKIAkJLyogZHJpdmUgd2FudHMgYSBjb21tYW5kIHBhY2tldCwgb3IgaW52YWxpZCBpcmVhc29uLi4uICovCi0JCXByaW50ayhLRVJOX0VSUiAiJXM6ICVzOiBiYWQgaW50ZXJydXB0IHJlYXNvbiAweCUwMnhcbiIsCisJCXByaW50ayhLRVJOX0VSUiBQRlggIiVzOiAlczogYmFkIGludGVycnVwdCByZWFzb24gMHglMDJ4XG4iLAogCQkJCWRyaXZlLT5uYW1lLCBfX2Z1bmNfXywgaXJlYXNvbik7CiAJfQogCkBAIC02NTQsMTcgKzY5NywxOSBAQAogICovCiBzdGF0aWMgaW50IGlkZV9jZF9jaGVja190cmFuc2Zlcl9zaXplKGlkZV9kcml2ZV90ICpkcml2ZSwgaW50IGxlbikKIHsKKwlpZGVfZGVidWdfbG9nKElERV9EQkdfRlVOQywgIkNhbGwgJXMsIGxlbjogJWRcbiIsIF9fZnVuY19fLCBsZW4pOworCiAJaWYgKChsZW4gJSBTRUNUT1JfU0laRSkgPT0gMCkKIAkJcmV0dXJuIDA7CiAKLQlwcmludGsoS0VSTl9FUlIgIiVzOiAlczogQmFkIHRyYW5zZmVyIHNpemUgJWRcbiIsCi0JCQlkcml2ZS0+bmFtZSwgX19mdW5jX18sIGxlbik7CisJcHJpbnRrKEtFUk5fRVJSIFBGWCAiJXM6ICVzOiBCYWQgdHJhbnNmZXIgc2l6ZSAlZFxuIiwgZHJpdmUtPm5hbWUsCisJCQlfX2Z1bmNfXywgbGVuKTsKIAogCWlmIChkcml2ZS0+YXRhcGlfZmxhZ3MgJiBJREVfQUZMQUdfTElNSVRfTkZSQU1FUykKLQkJcHJpbnRrKEtFUk5fRVJSICIgIFRoaXMgZHJpdmUgaXMgbm90IHN1cHBvcnRlZCBieSAiCi0JCQkJInRoaXMgdmVyc2lvbiBvZiB0aGUgZHJpdmVyXG4iKTsKKwkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiVGhpcyBkcml2ZSBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgIgorCQkJCSJ2ZXJzaW9uIG9mIHRoZSBkcml2ZXJcbiIpOwogCWVsc2UgewotCQlwcmludGsoS0VSTl9FUlIgIiAgVHJ5aW5nIHRvIGxpbWl0IHRyYW5zZmVyIHNpemVzXG4iKTsKKwkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiVHJ5aW5nIHRvIGxpbWl0IHRyYW5zZmVyIHNpemVzXG4iKTsKIAkJZHJpdmUtPmF0YXBpX2ZsYWdzIHw9IElERV9BRkxBR19MSU1JVF9ORlJBTUVTOwogCX0KIApAQCAtNjc2LDYgKzcyMSw5IEBACiBzdGF0aWMgaWRlX3N0YXJ0c3RvcF90IGlkZV9jZF9wcmVwYXJlX3J3X3JlcXVlc3QoaWRlX2RyaXZlX3QgKmRyaXZlLAogCQkJCQkJIHN0cnVjdCByZXF1ZXN0ICpycSkKIHsKKwlpZGVfZGVidWdfbG9nKElERV9EQkdfUlEsICJDYWxsICVzOiBycS0+Y21kX2ZsYWdzOiAweCV4XG4iLCBfX2Z1bmNfXywKKwkJICAgICAgcnEtPmNtZF9mbGFncyk7CisKIAlpZiAocnFfZGF0YV9kaXIocnEpID09IFJFQUQpIHsKIAkJdW5zaWduZWQgc2hvcnQgc2VjdG9yc19wZXJfZnJhbWUgPQogCQkJcXVldWVfaGFyZHNlY3Rfc2l6ZShkcml2ZS0+cXVldWUpID4+IFNFQ1RPUl9CSVRTOwpAQCAtNjk1LDcgKzc0Myw3IEBACiAJCQkvKiBzYW5pdHkgY2hlY2suLi4gKi8KIAkJCWlmIChycS0+Y3VycmVudF9ucl9zZWN0b3JzICE9CiAJCQkgICAgYmlvX2N1cl9zZWN0b3JzKHJxLT5iaW8pKSB7Ci0JCQkJcHJpbnRrKEtFUk5fRVJSICIlczogJXM6IGJ1ZmZlciBib3RjaCAoJXUpXG4iLAorCQkJCXByaW50ayhLRVJOX0VSUiBQRlggIiVzOiAlczogYnVmZmVyIGJvdGNoICgldSlcbiIsCiAJCQkJCQlkcml2ZS0+bmFtZSwgX19mdW5jX18sCiAJCQkJCQlycS0+Y3VycmVudF9ucl9zZWN0b3JzKTsKIAkJCQljZHJvbV9lbmRfcmVxdWVzdChkcml2ZSwgMCk7CkBAIC03MDQsMTEgKzc1Miw3IEBACiAJCQlycS0+Y3VycmVudF9ucl9zZWN0b3JzICs9IG5za2lwOwogCQl9CiAJfQotI2lmIDAKLQllbHNlCi0JCS8qIHRoZSBpbW1lZGlhdGUgYml0ICovCi0JCXJxLT5jbWRbMV0gPSAxIDw8IDM7Ci0jZW5kaWYKKwogCS8qIHNldCB1cCB0aGUgY29tbWFuZCAqLwogCXJxLT50aW1lb3V0ID0gQVRBUElfV0FJVF9QQzsKIApAQCAtNzM5LDYgKzc4Myw4IEBACiAJaW50IHN0YXQ7CiAJc3RhdGljIGludCByZXRyeSA9IDEwOwogCisJaWRlX2RlYnVnX2xvZyhJREVfREJHX0ZVTkMsICJDYWxsICVzXG4iLCBfX2Z1bmNfXyk7CisKIAlpZiAoY2Ryb21fZGVjb2RlX3N0YXR1cyhkcml2ZSwgMCwgJnN0YXQpKQogCQlyZXR1cm4gaWRlX3N0b3BwZWQ7CiAKQEAgLTc0Niw3ICs3OTIsNyBAQAogCiAJaWYgKHJldHJ5ICYmIHRpbWVfYWZ0ZXIoamlmZmllcywgaW5mby0+c3RhcnRfc2VlayArIElERUNEX1NFRUtfVElNRVIpKSB7CiAJCWlmICgtLXJldHJ5ID09IDApCi0JCQlkcml2ZS0+ZHNjX292ZXJsYXAgPSAwOworCQkJZHJpdmUtPmRldl9mbGFncyAmPSB+SURFX0RGTEFHX0RTQ19PVkVSTEFQOwogCX0KIAlyZXR1cm4gaWRlX3N0b3BwZWQ7CiB9CkBAIC03NTUsNiArODAxLDggQEAKIHsKIAlzZWN0b3JfdCBmcmFtZSA9IHJxLT5zZWN0b3I7CiAKKwlpZGVfZGVidWdfbG9nKElERV9EQkdfRlVOQywgIkNhbGwgJXNcbiIsIF9fZnVuY19fKTsKKwogCXNlY3Rvcl9kaXYoZnJhbWUsIHF1ZXVlX2hhcmRzZWN0X3NpemUoZHJpdmUtPnF1ZXVlKSA+PiBTRUNUT1JfQklUUyk7CiAKIAltZW1zZXQocnEtPmNtZCwgMCwgQkxLX01BWF9DREIpOwpAQCAtNzc1LDggKzgyMywxMSBAQAogICogRml4IHVwIGEgcG9zc2libHkgcGFydGlhbGx5LXByb2Nlc3NlZCByZXF1ZXN0IHNvIHRoYXQgd2UgY2FuIHN0YXJ0IGl0IG92ZXIKICAqIGVudGlyZWx5LCBvciBldmVuIHB1dCBpdCBiYWNrIG9uIHRoZSByZXF1ZXN0IHF1ZXVlLgogICovCi1zdGF0aWMgdm9pZCByZXN0b3JlX3JlcXVlc3Qoc3RydWN0IHJlcXVlc3QgKnJxKQorc3RhdGljIHZvaWQgaWRlX2NkX3Jlc3RvcmVfcmVxdWVzdChpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCByZXF1ZXN0ICpycSkKIHsKKworCWlkZV9kZWJ1Z19sb2coSURFX0RCR19GVU5DLCAiQ2FsbCAlc1xuIiwgX19mdW5jX18pOworCiAJaWYgKHJxLT5idWZmZXIgIT0gYmlvX2RhdGEocnEtPmJpbykpIHsKIAkJc2VjdG9yX3QgbiA9CiAJCQkocnEtPmJ1ZmZlciAtIChjaGFyICopYmlvX2RhdGEocnEtPmJpbykpIC8gU0VDVE9SX1NJWkU7CkBAIC03OTIsMTEgKzg0MywxMSBAQAogCXJxLT5xLT5wcmVwX3JxX2ZuKHJxLT5xLCBycSk7CiB9CiAKLS8qCi0gKiBBbGwgb3RoZXIgcGFja2V0IGNvbW1hbmRzLgotICovCi1zdGF0aWMgdm9pZCBpZGVfY2RfcmVxdWVzdF9zZW5zZV9maXh1cChzdHJ1Y3QgcmVxdWVzdCAqcnEpCitzdGF0aWMgdm9pZCBpZGVfY2RfcmVxdWVzdF9zZW5zZV9maXh1cChpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCByZXF1ZXN0ICpycSkKIHsKKwlpZGVfZGVidWdfbG9nKElERV9EQkdfRlVOQywgIkNhbGwgJXMsIHJxLT5jbWRbMF06IDB4JXhcbiIsCisJCSAgICAgIF9fZnVuY19fLCBycS0+Y21kWzBdKTsKKwogCS8qCiAJICogU29tZSBvZiB0aGUgdHJhaWxpbmcgcmVxdWVzdCBzZW5zZSBmaWVsZHMgYXJlIG9wdGlvbmFsLAogCSAqIGFuZCBzb21lIGRyaXZlcyBkb24ndCBzZW5kIHRoZW0uICBTaWdoLgpAQCAtODIyLDYgKzg3MywxMCBAQAogCWlmICghc2Vuc2UpCiAJCXNlbnNlID0gJmxvY2FsX3NlbnNlOwogCisJaWRlX2RlYnVnX2xvZyhJREVfREJHX1BDLCAiQ2FsbCAlcywgY21kWzBdOiAweCV4LCB3cml0ZTogMHgleCwgIgorCQkgICAgICAidGltZW91dDogJWQsIGNtZF9mbGFnczogMHgleFxuIiwgX19mdW5jX18sIGNtZFswXSwgd3JpdGUsCisJCSAgICAgIHRpbWVvdXQsIGNtZF9mbGFncyk7CisKIAkvKiBzdGFydCBvZiByZXRyeSBsb29wICovCiAJZG8gewogCQlzdHJ1Y3QgcmVxdWVzdCAqcnE7CkBAIC04OTUsNyArOTUwLDYgQEAKIHN0YXRpYyBpZGVfc3RhcnRzdG9wX3QgY2Ryb21fbmV3cGNfaW50cihpZGVfZHJpdmVfdCAqZHJpdmUpCiB7CiAJaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOwotCXN0cnVjdCBjZHJvbV9pbmZvICppbmZvID0gZHJpdmUtPmRyaXZlcl9kYXRhOwogCXN0cnVjdCByZXF1ZXN0ICpycSA9IEhXR1JPVVAoZHJpdmUpLT5ycTsKIAl4ZmVyX2Z1bmNfdCAqeGZlcmZ1bmM7CiAJaWRlX2V4cGlyeV90ICpleHBpcnkgPSBOVUxMOwpAQCAtOTA1LDEzICs5NTksMTYgQEAKIAl1MTYgbGVuOwogCXU4IGlyZWFzb247CiAKKwlpZGVfZGVidWdfbG9nKElERV9EQkdfUEMsICJDYWxsICVzLCBycS0+Y21kWzBdOiAweCV4LCB3cml0ZTogMHgleFxuIiwKKwkJICAgICAgX19mdW5jX18sIHJxLT5jbWRbMF0sIHdyaXRlKTsKKwogCS8qIGNoZWNrIGZvciBlcnJvcnMgKi8KLQlkbWEgPSBpbmZvLT5kbWE7CisJZG1hID0gZHJpdmUtPmRtYTsKIAlpZiAoZG1hKSB7Ci0JCWluZm8tPmRtYSA9IDA7CisJCWRyaXZlLT5kbWEgPSAwOwogCQlkbWFfZXJyb3IgPSBod2lmLT5kbWFfb3BzLT5kbWFfZW5kKGRyaXZlKTsKIAkJaWYgKGRtYV9lcnJvcikgewotCQkJcHJpbnRrKEtFUk5fRVJSICIlczogRE1BICVzIGVycm9yXG4iLCBkcml2ZS0+bmFtZSwKKwkJCXByaW50ayhLRVJOX0VSUiBQRlggIiVzOiBETUEgJXMgZXJyb3JcbiIsIGRyaXZlLT5uYW1lLAogCQkJCQl3cml0ZSA/ICJ3cml0ZSIgOiAicmVhZCIpOwogCQkJaWRlX2RtYV9vZmYoZHJpdmUpOwogCQl9CkBAIC05MzcsNiArOTk0LDkgQEAKIAlpZiAodGhpc2xlbiA+IGxlbikKIAkJdGhpc2xlbiA9IGxlbjsKIAorCWlkZV9kZWJ1Z19sb2coSURFX0RCR19QQywgIiVzOiBEUlE6IHN0YXQ6IDB4JXgsIHRoaXNsZW46ICVkXG4iLAorCQkgICAgICBfX2Z1bmNfXywgc3RhdCwgdGhpc2xlbik7CisKIAkvKiBJZiBEUlEgaXMgY2xlYXIsIHRoZSBjb21tYW5kIGhhcyBjb21wbGV0ZWQuICovCiAJaWYgKChzdGF0ICYgQVRBX0RSUSkgPT0gMCkgewogCQlpZiAoYmxrX2ZzX3JlcXVlc3QocnEpKSB7CkBAIC05NDYsNyArMTAwNiw3IEBACiAJCQkgKi8KIAkJCXVwdG9kYXRlID0gMTsKIAkJCWlmIChycS0+Y3VycmVudF9ucl9zZWN0b3JzID4gMCkgewotCQkJCXByaW50ayhLRVJOX0VSUiAiJXM6ICVzOiBkYXRhIHVuZGVycnVuICIKKwkJCQlwcmludGsoS0VSTl9FUlIgUEZYICIlczogJXM6IGRhdGEgdW5kZXJydW4gIgogCQkJCQkJIiglZCBibG9ja3MpXG4iLAogCQkJCQkJZHJpdmUtPm5hbWUsIF9fZnVuY19fLAogCQkJCQkJcnEtPmN1cnJlbnRfbnJfc2VjdG9ycyk7CkBAIC05NTcsNyArMTAxNyw3IEBACiAJCQljZHJvbV9lbmRfcmVxdWVzdChkcml2ZSwgdXB0b2RhdGUpOwogCQkJcmV0dXJuIGlkZV9zdG9wcGVkOwogCQl9IGVsc2UgaWYgKCFibGtfcGNfcmVxdWVzdChycSkpIHsKLQkJCWlkZV9jZF9yZXF1ZXN0X3NlbnNlX2ZpeHVwKHJxKTsKKwkJCWlkZV9jZF9yZXF1ZXN0X3NlbnNlX2ZpeHVwKGRyaXZlLCBycSk7CiAJCQkvKiBjb21wbGFpbiBpZiB3ZSBzdGlsbCBoYXZlIGRhdGEgbGVmdCB0byB0cmFuc2ZlciAqLwogCQkJdXB0b2RhdGUgPSBycS0+ZGF0YV9sZW4gPyAwIDogMTsKIAkJfQpAQCAtMTAwMCw2ICsxMDYwLDkgQEAKIAkJeGZlcmZ1bmMgPSBod2lmLT50cF9vcHMtPmlucHV0X2RhdGE7CiAJfQogCisJaWRlX2RlYnVnX2xvZyhJREVfREJHX1BDLCAiJXM6IGRhdGEgdHJhbnNmZXIsIHJxLT5jbWRfdHlwZTogMHgleCwgIgorCQkgICAgICAiaXJlYXNvbjogMHgleFxuIiwgX19mdW5jX18sIHJxLT5jbWRfdHlwZSwgaXJlYXNvbik7CisKIAkvKiB0cmFuc2ZlciBkYXRhICovCiAJd2hpbGUgKHRoaXNsZW4gPiAwKSB7CiAJCXU4ICpwdHIgPSBibGtfZnNfcmVxdWVzdChycSkgPyBOVUxMIDogcnEtPmRhdGE7CkBAIC0xMDI0LDcgKzEwODcsNyBAQAogCQkJCSAqLwogCQkJCWlkZV9wYWRfdHJhbnNmZXIoZHJpdmUsIDAsIHRoaXNsZW4pOwogCQkJZWxzZSB7Ci0JCQkJcHJpbnRrKEtFUk5fRVJSICIlczogY29uZnVzZWQsIG1pc3NpbmcgZGF0YVxuIiwKKwkJCQlwcmludGsoS0VSTl9FUlIgUEZYICIlczogY29uZnVzZWQsIG1pc3NpbmcgZGF0YVxuIiwKIAkJCQkJCWRyaXZlLT5uYW1lKTsKIAkJCQlibGtfZHVtcF9ycV9mbGFncyhycSwgcnFfZGF0YV9kaXIocnEpCiAJCQkJCQkgID8gImNkcm9tX25ld3BjX2ludHIsIHdyaXRlIgpAQCAtMTExMSw2ICsxMTc0LDEwIEBACiAJdW5zaWduZWQgc2hvcnQgc2VjdG9yc19wZXJfZnJhbWUgPQogCQlxdWV1ZV9oYXJkc2VjdF9zaXplKGRyaXZlLT5xdWV1ZSkgPj4gU0VDVE9SX0JJVFM7CiAKKwlpZGVfZGVidWdfbG9nKElERV9EQkdfUlEsICJDYWxsICVzLCBycS0+Y21kWzBdOiAweCV4LCB3cml0ZTogMHgleCwgIgorCQkgICAgICAic2Vjc19wZXJfZnJhbWU6ICV1XG4iLAorCQkgICAgICBfX2Z1bmNfXywgcnEtPmNtZFswXSwgd3JpdGUsIHNlY3RvcnNfcGVyX2ZyYW1lKTsKKwogCWlmICh3cml0ZSkgewogCQkvKiBkaXNrIGhhcyBiZWNvbWUgd3JpdGUgcHJvdGVjdGVkICovCiAJCWlmIChnZXRfZGlza19ybyhjZC0+ZGlzaykpIHsKQEAgLTExMjIsNyArMTE4OSw3IEBACiAJCSAqIFdlIG1heSBiZSByZXRyeWluZyB0aGlzIHJlcXVlc3QgYWZ0ZXIgYW4gZXJyb3IuICBGaXggdXAgYW55CiAJCSAqIHdlaXJkbmVzcyB3aGljaCBtaWdodCBiZSBwcmVzZW50IGluIHRoZSByZXF1ZXN0IHBhY2tldC4KIAkJICovCi0JCXJlc3RvcmVfcmVxdWVzdChycSk7CisJCWlkZV9jZF9yZXN0b3JlX3JlcXVlc3QoZHJpdmUsIHJxKTsKIAl9CiAKIAkvKiB1c2UgRE1BLCBpZiBwb3NzaWJsZSAvIHdyaXRlcyAqbXVzdCogYmUgaGFyZHdhcmUgZnJhbWUgYWxpZ25lZCAqLwpAQCAtMTEzMiw5ICsxMTk5LDkgQEAKIAkJCWNkcm9tX2VuZF9yZXF1ZXN0KGRyaXZlLCAwKTsKIAkJCXJldHVybiBpZGVfc3RvcHBlZDsKIAkJfQotCQljZC0+ZG1hID0gMDsKKwkJZHJpdmUtPmRtYSA9IDA7CiAJfSBlbHNlCi0JCWNkLT5kbWEgPSBkcml2ZS0+dXNpbmdfZG1hOworCQlkcml2ZS0+ZG1hID0gISEoZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19VU0lOR19ETUEpOwogCiAJaWYgKHdyaXRlKQogCQljZC0+ZGV2aW5mby5tZWRpYV93cml0dGVuID0gMTsKQEAgLTExNTEsMTQgKzEyMTgsMTcgQEAKIAogc3RhdGljIHZvaWQgY2Ryb21fZG9fYmxvY2tfcGMoaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgcmVxdWVzdCAqcnEpCiB7Ci0Jc3RydWN0IGNkcm9tX2luZm8gKmluZm8gPSBkcml2ZS0+ZHJpdmVyX2RhdGE7CisKKwlpZGVfZGVidWdfbG9nKElERV9EQkdfUEMsICJDYWxsICVzLCBycS0+Y21kWzBdOiAweCV4LCAiCisJCSAgICAgICJycS0+Y21kX3R5cGU6IDB4JXhcbiIsIF9fZnVuY19fLCBycS0+Y21kWzBdLAorCQkgICAgICBycS0+Y21kX3R5cGUpOwogCiAJaWYgKGJsa19wY19yZXF1ZXN0KHJxKSkKIAkJcnEtPmNtZF9mbGFncyB8PSBSRVFfUVVJRVQ7CiAJZWxzZQogCQlycS0+Y21kX2ZsYWdzICY9IH5SRVFfRkFJTEVEOwogCi0JaW5mby0+ZG1hID0gMDsKKwlkcml2ZS0+ZG1hID0gMDsKIAogCS8qIHNnIHJlcXVlc3QgKi8KIAlpZiAocnEtPmJpbyB8fCAoKHJxLT5jbWRfdHlwZSA9PSBSRVFfVFlQRV9BVEFfUEMpICYmIHJxLT5kYXRhX2xlbikpIHsKQEAgLTExNzEsNyArMTI0MSw3IEBACiAJCWVsc2UKIAkJCWJ1ZiA9IHJxLT5kYXRhOwogCi0JCWluZm8tPmRtYSA9IGRyaXZlLT51c2luZ19kbWE7CisJCWRyaXZlLT5kbWEgPSAhIShkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX1VTSU5HX0RNQSk7CiAKIAkJLyoKIAkJICogY2hlY2sgaWYgZG1hIGlzIHNhZmUKQEAgLTExODIsMTMgKzEyNTIsMTAgQEAKIAkJYWxpZ25tZW50ID0gcXVldWVfZG1hX2FsaWdubWVudChxKSB8IHEtPmRtYV9wYWRfbWFzazsKIAkJaWYgKCh1bnNpZ25lZCBsb25nKWJ1ZiAmIGFsaWdubWVudCB8fCBycS0+ZGF0YV9sZW4gJiBhbGlnbm1lbnQKIAkJICAgIHx8IG9iamVjdF9pc19vbl9zdGFjayhidWYpKQotCQkJaW5mby0+ZG1hID0gMDsKKwkJCWRyaXZlLT5kbWEgPSAwOwogCX0KIH0KIAotLyoKLSAqIGNkcm9tIGRyaXZlciByZXF1ZXN0IHJvdXRpbmUuCi0gKi8KIHN0YXRpYyBpZGVfc3RhcnRzdG9wX3QgaWRlX2NkX2RvX3JlcXVlc3QoaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgcmVxdWVzdCAqcnEsCiAJCQkJCXNlY3Rvcl90IGJsb2NrKQogewpAQCAtMTE5Niw2ICsxMjYzLDExIEBACiAJaWRlX2hhbmRsZXJfdCAqZm47CiAJaW50IHhmZXJsZW47CiAKKwlpZGVfZGVidWdfbG9nKElERV9EQkdfUlEsICJDYWxsICVzLCBycS0+Y21kWzBdOiAweCV4LCAiCisJCSAgICAgICJycS0+Y21kX3R5cGU6IDB4JXgsIGJsb2NrOiAlbGx1XG4iLAorCQkgICAgICBfX2Z1bmNfXywgcnEtPmNtZFswXSwgcnEtPmNtZF90eXBlLAorCQkgICAgICAodW5zaWduZWQgbG9uZyBsb25nKWJsb2NrKTsKKwogCWlmIChibGtfZnNfcmVxdWVzdChycSkpIHsKIAkJaWYgKGRyaXZlLT5hdGFwaV9mbGFncyAmIElERV9BRkxBR19TRUVLSU5HKSB7CiAJCQlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7CkBAIC0xMjA4LDcgKzEyODAsNyBAQAogCQkJCQkJCUlERUNEX1NFRUtfVElNRVIpOwogCQkJCQlyZXR1cm4gaWRlX3N0b3BwZWQ7CiAJCQkJfQotCQkJCXByaW50ayhLRVJOX0VSUiAiJXM6IERTQyB0aW1lb3V0XG4iLAorCQkJCXByaW50ayhLRVJOX0VSUiBQRlggIiVzOiBEU0MgdGltZW91dFxuIiwKIAkJCQkJCWRyaXZlLT5uYW1lKTsKIAkJCX0KIAkJCWRyaXZlLT5hdGFwaV9mbGFncyAmPSB+SURFX0FGTEFHX1NFRUtJTkc7CkBAIC0xMjE2LDExICsxMjg4LDExIEBACiAJCWlmIChycV9kYXRhX2RpcihycSkgPT0gUkVBRCAmJgogCQkgICAgSURFX0xBUkdFX1NFRUsoaW5mby0+bGFzdF9ibG9jaywgYmxvY2ssCiAJCQkgICAgSURFQ0RfU0VFS19USFJFU0hPTEQpICYmCi0JCSAgICBkcml2ZS0+ZHNjX292ZXJsYXApIHsKKwkJICAgIChkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX0RTQ19PVkVSTEFQKSkgewogCQkJeGZlcmxlbiA9IDA7CiAJCQlmbiA9IGNkcm9tX3N0YXJ0X3NlZWtfY29udGludWF0aW9uOwogCi0JCQlpbmZvLT5kbWEgPSAwOworCQkJZHJpdmUtPmRtYSA9IDA7CiAJCQlpbmZvLT5zdGFydF9zZWVrID0gamlmZmllczsKIAogCQkJaWRlX2NkX3ByZXBhcmVfc2Vla19yZXF1ZXN0KGRyaXZlLCBycSk7CkBAIC0xMjQ5LDcgKzEzMjEsNyBAQAogCQljZHJvbV9lbmRfcmVxdWVzdChkcml2ZSwgMSk7CiAJCXJldHVybiBpZGVfc3RvcHBlZDsKIAl9IGVsc2UgewotCQlibGtfZHVtcF9ycV9mbGFncyhycSwgImlkZS1jZCBiYWQgZmxhZ3MiKTsKKwkJYmxrX2R1bXBfcnFfZmxhZ3MocnEsIERSVl9OQU1FICIgYmFkIGZsYWdzIik7CiAJCWNkcm9tX2VuZF9yZXF1ZXN0KGRyaXZlLCAwKTsKIAkJcmV0dXJuIGlkZV9zdG9wcGVkOwogCX0KQEAgLTEyNzksNiArMTM1MSw4IEBACiAJc3RydWN0IGNkcm9tX2RldmljZV9pbmZvICpjZGkgPSAmaW5mby0+ZGV2aW5mbzsKIAl1bnNpZ25lZCBjaGFyIGNtZFtCTEtfTUFYX0NEQl07CiAKKwlpZGVfZGVidWdfbG9nKElERV9EQkdfRlVOQywgIkNhbGwgJXNcbiIsIF9fZnVuY19fKTsKKwogCW1lbXNldChjbWQsIDAsIEJMS19NQVhfQ0RCKTsKIAljbWRbMF0gPSBHUENNRF9URVNUX1VOSVRfUkVBRFk7CiAKQEAgLTEzMDUsNiArMTM3OSw4IEBACiAJdW5zaWduZWQgbGVuID0gc2l6ZW9mKGNhcGJ1Zik7CiAJdTMyIGJsb2NrbGVuOwogCisJaWRlX2RlYnVnX2xvZyhJREVfREJHX0ZVTkMsICJDYWxsICVzXG4iLCBfX2Z1bmNfXyk7CisKIAltZW1zZXQoY21kLCAwLCBCTEtfTUFYX0NEQik7CiAJY21kWzBdID0gR1BDTURfUkVBRF9DRFZEX0NBUEFDSVRZOwogCkBAIC0xMzI0LDE2ICsxNDAwLDIwIEBACiAJY2FzZSA0MDk2OgogCQlicmVhazsKIAlkZWZhdWx0OgotCQlwcmludGsoS0VSTl9FUlIgIiVzOiB3ZWlyZCBibG9jayBzaXplICV1XG4iLAotCQkJZHJpdmUtPm5hbWUsIGJsb2NrbGVuKTsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogZGVmYXVsdCB0byAya2IgYmxvY2sgc2l6ZVxuIiwKLQkJCWRyaXZlLT5uYW1lKTsKKwkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiJXM6IHdlaXJkIGJsb2NrIHNpemUgJXVcbiIsCisJCQkJZHJpdmUtPm5hbWUsIGJsb2NrbGVuKTsKKwkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiJXM6IGRlZmF1bHQgdG8gMmtiIGJsb2NrIHNpemVcbiIsCisJCQkJZHJpdmUtPm5hbWUpOwogCQlibG9ja2xlbiA9IDIwNDg7CiAJCWJyZWFrOwogCX0KIAogCSpjYXBhY2l0eSA9IDEgKyBiZTMyX3RvX2NwdShjYXBidWYubGJhKTsKIAkqc2VjdG9yc19wZXJfZnJhbWUgPSBibG9ja2xlbiA+PiBTRUNUT1JfQklUUzsKKworCWlkZV9kZWJ1Z19sb2coSURFX0RCR19QUk9CRSwgIiVzOiBjYXA6ICVsdSwgc2VjdG9yc19wZXJfZnJhbWU6ICVsdVxuIiwKKwkJICAgICAgX19mdW5jX18sICpjYXBhY2l0eSwgKnNlY3RvcnNfcGVyX2ZyYW1lKTsKKwogCXJldHVybiAwOwogfQogCkBAIC0xMzQzLDYgKzE0MjMsOCBAQAogewogCXVuc2lnbmVkIGNoYXIgY21kW0JMS19NQVhfQ0RCXTsKIAorCWlkZV9kZWJ1Z19sb2coSURFX0RCR19GVU5DLCAiQ2FsbCAlc1xuIiwgX19mdW5jX18pOworCiAJbWVtc2V0KGNtZCwgMCwgQkxLX01BWF9DREIpOwogCiAJY21kWzBdID0gR1BDTURfUkVBRF9UT0NfUE1BX0FUSVA7CkBAIC0xMzcxLDExICsxNDUzLDEzIEBACiAJbG9uZyBsYXN0X3dyaXR0ZW47CiAJdW5zaWduZWQgbG9uZyBzZWN0b3JzX3Blcl9mcmFtZSA9IFNFQ1RPUlNfUEVSX0ZSQU1FOwogCisJaWRlX2RlYnVnX2xvZyhJREVfREJHX0ZVTkMsICJDYWxsICVzXG4iLCBfX2Z1bmNfXyk7CisKIAlpZiAodG9jID09IE5VTEwpIHsKIAkJLyogdHJ5IHRvIGFsbG9jYXRlIHNwYWNlICovCiAJCXRvYyA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBhdGFwaV90b2MpLCBHRlBfS0VSTkVMKTsKIAkJaWYgKHRvYyA9PSBOVUxMKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgIiVzOiBObyBjZHJvbSBUT0MgYnVmZmVyIVxuIiwKKwkJCXByaW50ayhLRVJOX0VSUiBQRlggIiVzOiBObyBjZHJvbSBUT0MgYnVmZmVyIVxuIiwKIAkJCQkJZHJpdmUtPm5hbWUpOwogCQkJcmV0dXJuIC1FTk9NRU07CiAJCX0KQEAgLTE1MzEsNiArMTYxNSw4IEBACiAJc3RydWN0IHBhY2tldF9jb21tYW5kIGNnYzsKIAlpbnQgc3RhdCwgYXR0ZW1wdHMgPSAzLCBzaXplID0gQVRBUElfQ0FQQUJJTElUSUVTX1BBR0VfU0laRTsKIAorCWlkZV9kZWJ1Z19sb2coSURFX0RCR19GVU5DLCAiQ2FsbCAlc1xuIiwgX19mdW5jX18pOworCiAJaWYgKChkcml2ZS0+YXRhcGlfZmxhZ3MgJiBJREVfQUZMQUdfRlVMTF9DQVBTX1BBR0UpID09IDApCiAJCXNpemUgLT0gQVRBUElfQ0FQQUJJTElUSUVTX1BBR0VfUEFEX1NJWkU7CiAKQEAgLTE1NDksNiArMTYzNSw4IEBACiAJc3RydWN0IGNkcm9tX2luZm8gKmNkID0gZHJpdmUtPmRyaXZlcl9kYXRhOwogCXUxNiBjdXJzcGVlZCwgbWF4c3BlZWQ7CiAKKwlpZGVfZGVidWdfbG9nKElERV9EQkdfRlVOQywgIkNhbGwgJXNcbiIsIF9fZnVuY19fKTsKKwogCWlmIChkcml2ZS0+YXRhcGlfZmxhZ3MgJiBJREVfQUZMQUdfTEVfU1BFRURfRklFTERTKSB7CiAJCWN1cnNwZWVkID0gbGUxNl90b19jcHVwKChfX2xlMTYgKikmYnVmWzggKyAxNF0pOwogCQltYXhzcGVlZCA9IGxlMTZfdG9fY3B1cCgoX19sZTE2ICopJmJ1Zls4ICsgOF0pOwpAQCAtMTU1Nyw2ICsxNjQ1LDkgQEAKIAkJbWF4c3BlZWQgPSBiZTE2X3RvX2NwdXAoKF9fYmUxNiAqKSZidWZbOCArIDhdKTsKIAl9CiAKKwlpZGVfZGVidWdfbG9nKElERV9EQkdfUFJPQkUsICIlczogY3Vyc3BlZWQ6ICV1LCBtYXhzcGVlZDogJXVcbiIsCisJCSAgICAgIF9fZnVuY19fLCBjdXJzcGVlZCwgbWF4c3BlZWQpOworCiAJY2QtPmN1cnJlbnRfc3BlZWQgPSAoY3Vyc3BlZWQgKyAoMTc2LzIpKSAvIDE3NjsKIAljZC0+bWF4X3NwZWVkID0gKG1heHNwZWVkICsgKDE3Ni8yKSkgLyAxNzY7CiB9CkBAIC0xNTg5LDYgKzE2ODAsOCBAQAogCXN0cnVjdCBjZHJvbV9pbmZvICppbmZvID0gZHJpdmUtPmRyaXZlcl9kYXRhOwogCXN0cnVjdCBjZHJvbV9kZXZpY2VfaW5mbyAqZGV2aW5mbyA9ICZpbmZvLT5kZXZpbmZvOwogCisJaWRlX2RlYnVnX2xvZyhJREVfREJHX1BST0JFLCAiQ2FsbCAlcywgbnNsb3RzOiAlZFxuIiwgX19mdW5jX18sIG5zbG90cyk7CisKIAlkZXZpbmZvLT5vcHMgPSAmaWRlX2Nkcm9tX2RvcHM7CiAJZGV2aW5mby0+c3BlZWQgPSBpbmZvLT5jdXJyZW50X3NwZWVkOwogCWRldmluZm8tPmNhcGFjaXR5ID0gbnNsb3RzOwpAQCAtMTYxMCwxMyArMTcwMywxNyBAQAogCW1lY2h0eXBlX3QgbWVjaHR5cGU7CiAJaW50IG5zbG90cyA9IDE7CiAKKwlpZGVfZGVidWdfbG9nKElERV9EQkdfUFJPQkUsICJDYWxsICVzLCBkcml2ZS0+bWVkaWE6IDB4JXgsICIKKwkJICAgICAgImRyaXZlLT5hdGFwaV9mbGFnczogMHglbHhcbiIsIF9fZnVuY19fLCBkcml2ZS0+bWVkaWEsCisJCSAgICAgIGRyaXZlLT5hdGFwaV9mbGFncyk7CisKIAljZGktPm1hc2sgPSAoQ0RDX0NEX1IgfCBDRENfQ0RfUlcgfCBDRENfRFZEIHwgQ0RDX0RWRF9SIHwKIAkJICAgICBDRENfRFZEX1JBTSB8IENEQ19TRUxFQ1RfRElTQyB8IENEQ19QTEFZX0FVRElPIHwKIAkJICAgICBDRENfTU9fRFJJVkUgfCBDRENfUkFNKTsKIAogCWlmIChkcml2ZS0+bWVkaWEgPT0gaWRlX29wdGljYWwpIHsKIAkJY2RpLT5tYXNrICY9IH4oQ0RDX01PX0RSSVZFIHwgQ0RDX1JBTSk7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IEFUQVBJIG1hZ25ldG8tb3B0aWNhbCBkcml2ZVxuIiwKKwkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiJXM6IEFUQVBJIG1hZ25ldG8tb3B0aWNhbCBkcml2ZVxuIiwKIAkJCQlkcml2ZS0+bmFtZSk7CiAJCXJldHVybiBuc2xvdHM7CiAJfQpAQCAtMTY0MCw3ICsxNzM3LDcgQEAKIAkJcmV0dXJuIDA7CiAKIAlpZiAoKGJ1Zls4ICsgNl0gJiAweDAxKSA9PSAwKQotCQlkcml2ZS0+YXRhcGlfZmxhZ3MgfD0gSURFX0FGTEFHX05PX0RPT1JMT0NLOworCQlkcml2ZS0+ZGV2X2ZsYWdzICY9IH5JREVfREZMQUdfRE9PUkxPQ0tJTkc7CiAJaWYgKGJ1Zls4ICsgNl0gJiAweDA4KQogCQlkcml2ZS0+YXRhcGlfZmxhZ3MgJj0gfklERV9BRkxBR19OT19FSkVDVDsKIAlpZiAoYnVmWzggKyAzXSAmIDB4MDEpCkBAIC0xNjc0LDcgKzE3NzEsNyBAQAogCiAJaWRlX2Nkcm9tX3VwZGF0ZV9zcGVlZChkcml2ZSwgYnVmKTsKIAotCXByaW50ayhLRVJOX0lORk8gIiVzOiBBVEFQSSIsIGRyaXZlLT5uYW1lKTsKKwlwcmludGsoS0VSTl9JTkZPIFBGWCAiJXM6IEFUQVBJIiwgZHJpdmUtPm5hbWUpOwogCiAJLyogZG9uJ3QgcHJpbnQgc3BlZWQgaWYgdGhlIGRyaXZlIHJlcG9ydGVkIDAgKi8KIAlpZiAoY2QtPm1heF9zcGVlZCkKQEAgLTE2ODUsNyArMTc4Miw3IEBACiAJaWYgKChjZGktPm1hc2sgJiBDRENfRFZEX1IpID09IDAgfHwgKGNkaS0+bWFzayAmIENEQ19EVkRfUkFNKSA9PSAwKQogCQlwcmludGsoS0VSTl9DT05UICIgRFZEJXMlcyIsCiAJCQkJIChjZGktPm1hc2sgJiBDRENfRFZEX1IpID8gIiIgOiAiLVIiLAotCQkJCSAoY2RpLT5tYXNrICYgQ0RDX0RWRF9SQU0pID8gIiIgOiAiLVJBTSIpOworCQkJCSAoY2RpLT5tYXNrICYgQ0RDX0RWRF9SQU0pID8gIiIgOiAiL1JBTSIpOwogCiAJaWYgKChjZGktPm1hc2sgJiBDRENfQ0RfUikgPT0gMCB8fCAoY2RpLT5tYXNrICYgQ0RDX0NEX1JXKSA9PSAwKQogCQlwcmludGsoS0VSTl9DT05UICIgQ0QlcyVzIiwKQEAgLTE2OTcsNyArMTc5NCw4IEBACiAJZWxzZQogCQlwcmludGsoS0VSTl9DT05UICIgZHJpdmUiKTsKIAotCXByaW50ayhLRVJOX0NPTlQgIiwgJWRrQiBDYWNoZVxuIiwgYmUxNl90b19jcHVwKChfX2JlMTYgKikmYnVmWzggKyAxMl0pKTsKKwlwcmludGsoS0VSTl9DT05UICIsICVka0IgQ2FjaGVcbiIsCisJCQkgYmUxNl90b19jcHVwKChfX2JlMTYgKikmYnVmWzggKyAxMl0pKTsKIAogCXJldHVybiBuc2xvdHM7CiB9CkBAIC0xODA5LDEyICsxOTA3LDIyIEBACiAJeyBOVUxMLCAwLCBOVUxMLCBOVUxMIH0KIH07CiAKLWlkZV9kZXZzZXRfcndfZmllbGQoZHNjX292ZXJsYXAsIGRzY19vdmVybGFwKTsKK2lkZV9kZXZzZXRfcndfZmxhZyhkc2Nfb3ZlcmxhcCwgSURFX0RGTEFHX0RTQ19PVkVSTEFQKTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBpZGVfcHJvY19kZXZzZXQgaWRlY2Rfc2V0dGluZ3NbXSA9IHsKIAlJREVfUFJPQ19ERVZTRVQoZHNjX292ZXJsYXAsIDAsIDEpLAogCXsgMCB9LAogfTsKKworc3RhdGljIGlkZV9wcm9jX2VudHJ5X3QgKmlkZV9jZF9wcm9jX2VudHJpZXMoaWRlX2RyaXZlX3QgKmRyaXZlKQoreworCXJldHVybiBpZGVjZF9wcm9jOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGlkZV9wcm9jX2RldnNldCAqaWRlX2NkX3Byb2NfZGV2c2V0cyhpZGVfZHJpdmVfdCAqZHJpdmUpCit7CisJcmV0dXJuIGlkZWNkX3NldHRpbmdzOworfQogI2VuZGlmCiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgY2RfbGlzdF9lbnRyeSBpZGVfY2RfcXVpcmtzX2xpc3RbXSA9IHsKQEAgLTE4ODQsNiArMTk5Miw4IEBACiAJY2hhciAqZndfcmV2ID0gKGNoYXIgKikmaWRbQVRBX0lEX0ZXX1JFVl07CiAJaW50IG5zbG90czsKIAorCWlkZV9kZWJ1Z19sb2coSURFX0RCR19QUk9CRSwgIkNhbGwgJXNcbiIsIF9fZnVuY19fKTsKKwogCWJsa19xdWV1ZV9wcmVwX3JxKGRyaXZlLT5xdWV1ZSwgaWRlX2Nkcm9tX3ByZXBfZm4pOwogCWJsa19xdWV1ZV9kbWFfYWxpZ25tZW50KGRyaXZlLT5xdWV1ZSwgMzEpOwogCWJsa19xdWV1ZV91cGRhdGVfZG1hX3BhZChkcml2ZS0+cXVldWUsIDE1KTsKQEAgLTE4OTEsMTMgKzIwMDEsOCBAQAogCWlmICghZHJpdmUtPnF1ZXVlLT51bnBsdWdfZGVsYXkpCiAJCWRyaXZlLT5xdWV1ZS0+dW5wbHVnX2RlbGF5ID0gMTsKIAotCWRyaXZlLT5zcGVjaWFsLmFsbAk9IDA7Ci0KLQlkcml2ZS0+YXRhcGlfZmxhZ3MgPSBJREVfQUZMQUdfTUVESUFfQ0hBTkdFRCB8IElERV9BRkxBR19OT19FSkVDVCB8Ci0JCSAgICAgICBpZGVfY2RfZmxhZ3MoaWQpOwotCi0JaWYgKChpZFtBVEFfSURfQ09ORklHXSAmIDB4MDA2MCkgPT0gMHgyMCkKLQkJZHJpdmUtPmF0YXBpX2ZsYWdzIHw9IElERV9BRkxBR19EUlFfSU5URVJSVVBUOworCWRyaXZlLT5kZXZfZmxhZ3MgfD0gSURFX0RGTEFHX01FRElBX0NIQU5HRUQ7CisJZHJpdmUtPmF0YXBpX2ZsYWdzID0gSURFX0FGTEFHX05PX0VKRUNUIHwgaWRlX2NkX2ZsYWdzKGlkKTsKIAogCWlmICgoZHJpdmUtPmF0YXBpX2ZsYWdzICYgSURFX0FGTEFHX1ZFUlRPU18zMDBfU1NEKSAmJgogCSAgICBmd19yZXZbNF0gPT0gJzEnICYmIGZ3X3Jldls2XSA8PSAnMicpCkBAIC0xOTE1LDEwICsyMDIwLDEzIEBACiAJLyogc2V0IGNvcnJlY3QgYmxvY2sgc2l6ZSAqLwogCWJsa19xdWV1ZV9oYXJkc2VjdF9zaXplKGRyaXZlLT5xdWV1ZSwgQ0RfRlJBTUVTSVpFKTsKIAotCWRyaXZlLT5kc2Nfb3ZlcmxhcCA9IChkcml2ZS0+bmV4dCAhPSBkcml2ZSk7CisJaWYgKGRyaXZlLT5uZXh0ICE9IGRyaXZlKQorCQlkcml2ZS0+ZGV2X2ZsYWdzIHw9IElERV9ERkxBR19EU0NfT1ZFUkxBUDsKKwllbHNlCisJCWRyaXZlLT5kZXZfZmxhZ3MgJj0gfklERV9ERkxBR19EU0NfT1ZFUkxBUDsKIAogCWlmIChpZGVfY2Ryb21fcmVnaXN0ZXIoZHJpdmUsIG5zbG90cykpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogJXMgZmFpbGVkIHRvIHJlZ2lzdGVyIGRldmljZSB3aXRoIHRoZSIKKwkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiJXM6ICVzIGZhaWxlZCB0byByZWdpc3RlciBkZXZpY2Ugd2l0aCB0aGUiCiAJCQkJIiBjZHJvbSBkcml2ZXIuXG4iLCBkcml2ZS0+bmFtZSwgX19mdW5jX18pOwogCQljZC0+ZGV2aW5mby5oYW5kbGUgPSBOVUxMOwogCQlyZXR1cm4gMTsKQEAgLTE5MzIsNiArMjA0MCw4IEBACiB7CiAJc3RydWN0IGNkcm9tX2luZm8gKmluZm8gPSBkcml2ZS0+ZHJpdmVyX2RhdGE7CiAKKwlpZGVfZGVidWdfbG9nKElERV9EQkdfRlVOQywgIkNhbGwgJXNcbiIsIF9fZnVuY19fKTsKKwogCWlkZV9wcm9jX3VucmVnaXN0ZXJfZHJpdmVyKGRyaXZlLCBpbmZvLT5kcml2ZXIpOwogCiAJZGVsX2dlbmRpc2soaW5mby0+ZGlzayk7CkBAIC0xOTQxLDE1ICsyMDUxLDE3IEBACiAKIHN0YXRpYyB2b2lkIGlkZV9jZF9yZWxlYXNlKHN0cnVjdCBrcmVmICprcmVmKQogewotCXN0cnVjdCBjZHJvbV9pbmZvICppbmZvID0gdG9faWRlX2NkKGtyZWYpOworCXN0cnVjdCBjZHJvbV9pbmZvICppbmZvID0gdG9faWRlX2RydihrcmVmLCBjZHJvbV9pbmZvKTsKIAlzdHJ1Y3QgY2Ryb21fZGV2aWNlX2luZm8gKmRldmluZm8gPSAmaW5mby0+ZGV2aW5mbzsKIAlpZGVfZHJpdmVfdCAqZHJpdmUgPSBpbmZvLT5kcml2ZTsKIAlzdHJ1Y3QgZ2VuZGlzayAqZyA9IGluZm8tPmRpc2s7CiAKKwlpZGVfZGVidWdfbG9nKElERV9EQkdfRlVOQywgIkNhbGwgJXNcbiIsIF9fZnVuY19fKTsKKwogCWtmcmVlKGluZm8tPnRvYyk7CiAJaWYgKGRldmluZm8tPmhhbmRsZSA9PSBkcml2ZSkKIAkJdW5yZWdpc3Rlcl9jZHJvbShkZXZpbmZvKTsKLQlkcml2ZS0+ZHNjX292ZXJsYXAgPSAwOworCWRyaXZlLT5kZXZfZmxhZ3MgJj0gfklERV9ERkxBR19EU0NfT1ZFUkxBUDsKIAlkcml2ZS0+ZHJpdmVyX2RhdGEgPSBOVUxMOwogCWJsa19xdWV1ZV9wcmVwX3JxKGRyaXZlLT5xdWV1ZSwgTlVMTCk7CiAJZy0+cHJpdmF0ZV9kYXRhID0gTlVMTDsKQEAgLTE5NjgsMTMgKzIwODAsMTIgQEAKIAkucHJvYmUJCQk9IGlkZV9jZF9wcm9iZSwKIAkucmVtb3ZlCQkJPSBpZGVfY2RfcmVtb3ZlLAogCS52ZXJzaW9uCQk9IElERUNEX1ZFUlNJT04sCi0JLm1lZGlhCQkJPSBpZGVfY2Ryb20sCiAJLmRvX3JlcXVlc3QJCT0gaWRlX2NkX2RvX3JlcXVlc3QsCiAJLmVuZF9yZXF1ZXN0CQk9IGlkZV9lbmRfcmVxdWVzdCwKIAkuZXJyb3IJCQk9IF9faWRlX2Vycm9yLAogI2lmZGVmIENPTkZJR19JREVfUFJPQ19GUwotCS5wcm9jCQkJPSBpZGVjZF9wcm9jLAotCS5zZXR0aW5ncwkJPSBpZGVjZF9zZXR0aW5ncywKKwkucHJvY19lbnRyaWVzCQk9IGlkZV9jZF9wcm9jX2VudHJpZXMsCisJLnByb2NfZGV2c2V0cwkJPSBpZGVfY2RfcHJvY19kZXZzZXRzLAogI2VuZGlmCiB9OwogCkBAIC0xOTk5LDcgKzIxMTAsNyBAQAogc3RhdGljIGludCBpZGVjZF9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQogewogCXN0cnVjdCBnZW5kaXNrICpkaXNrID0gaW5vZGUtPmlfYmRldi0+YmRfZGlzazsKLQlzdHJ1Y3QgY2Ryb21faW5mbyAqaW5mbyA9IGlkZV9jZF9nKGRpc2spOworCXN0cnVjdCBjZHJvbV9pbmZvICppbmZvID0gaWRlX2Rydl9nKGRpc2ssIGNkcm9tX2luZm8pOwogCiAJY2Ryb21fcmVsZWFzZSgmaW5mby0+ZGV2aW5mbywgZmlsZSk7CiAKQEAgLTIwNTEsNyArMjE2Miw3IEBACiAJCQl1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKIHsKIAlzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2ID0gaW5vZGUtPmlfYmRldjsKLQlzdHJ1Y3QgY2Ryb21faW5mbyAqaW5mbyA9IGlkZV9jZF9nKGJkZXYtPmJkX2Rpc2spOworCXN0cnVjdCBjZHJvbV9pbmZvICppbmZvID0gaWRlX2Rydl9nKGJkZXYtPmJkX2Rpc2ssIGNkcm9tX2luZm8pOwogCWludCBlcnI7CiAKIAlzd2l0Y2ggKGNtZCkgewpAQCAtMjA3MiwxMyArMjE4MywxMyBAQAogCiBzdGF0aWMgaW50IGlkZWNkX21lZGlhX2NoYW5nZWQoc3RydWN0IGdlbmRpc2sgKmRpc2spCiB7Ci0Jc3RydWN0IGNkcm9tX2luZm8gKmluZm8gPSBpZGVfY2RfZyhkaXNrKTsKKwlzdHJ1Y3QgY2Ryb21faW5mbyAqaW5mbyA9IGlkZV9kcnZfZyhkaXNrLCBjZHJvbV9pbmZvKTsKIAlyZXR1cm4gY2Ryb21fbWVkaWFfY2hhbmdlZCgmaW5mby0+ZGV2aW5mbyk7CiB9CiAKIHN0YXRpYyBpbnQgaWRlY2RfcmV2YWxpZGF0ZV9kaXNrKHN0cnVjdCBnZW5kaXNrICpkaXNrKQogewotCXN0cnVjdCBjZHJvbV9pbmZvICppbmZvID0gaWRlX2NkX2coZGlzayk7CisJc3RydWN0IGNkcm9tX2luZm8gKmluZm8gPSBpZGVfZHJ2X2coZGlzaywgY2Ryb21faW5mbyk7CiAJc3RydWN0IHJlcXVlc3Rfc2Vuc2Ugc2Vuc2U7CiAKIAlpZGVfY2RfcmVhZF90b2MoaW5mby0+ZHJpdmUsICZzZW5zZSk7CkBAIC0yMDk3LDggKzIyMDgsMTEgQEAKIAogLyogbW9kdWxlIG9wdGlvbnMgKi8KIHN0YXRpYyBjaGFyICppZ25vcmU7Ci0KIG1vZHVsZV9wYXJhbShpZ25vcmUsIGNoYXJwLCAwNDAwKTsKKworc3RhdGljIHVuc2lnbmVkIGxvbmcgZGVidWdfbWFzazsKK21vZHVsZV9wYXJhbShkZWJ1Z19tYXNrLCB1bG9uZywgMDY0NCk7CisKIE1PRFVMRV9ERVNDUklQVElPTigiQVRBUEkgQ0QtUk9NIERyaXZlciIpOwogCiBzdGF0aWMgaW50IGlkZV9jZF9wcm9iZShpZGVfZHJpdmVfdCAqZHJpdmUpCkBAIC0yMTA3LDYgKzIyMjEsMTAgQEAKIAlzdHJ1Y3QgZ2VuZGlzayAqZzsKIAlzdHJ1Y3QgcmVxdWVzdF9zZW5zZSBzZW5zZTsKIAorCWlkZV9kZWJ1Z19sb2coSURFX0RCR19QUk9CRSwgIkNhbGwgJXMsIGRyaXZlLT5kcml2ZXJfcmVxOiAlcywgIgorCQkgICAgICAiZHJpdmUtPm1lZGlhOiAweCV4XG4iLCBfX2Z1bmNfXywgZHJpdmUtPmRyaXZlcl9yZXEsCisJCSAgICAgIGRyaXZlLT5tZWRpYSk7CisKIAlpZiAoIXN0cnN0cigiaWRlLWNkcm9tIiwgZHJpdmUtPmRyaXZlcl9yZXEpKQogCQlnb3RvIGZhaWxlZDsKIApAQCAtMjExNiwxNCArMjIzNCwxNyBAQAogCS8qIHNraXAgZHJpdmVzIHRoYXQgd2Ugd2VyZSB0b2xkIHRvIGlnbm9yZSAqLwogCWlmIChpZ25vcmUgIT0gTlVMTCkgewogCQlpZiAoc3Ryc3RyKGlnbm9yZSwgZHJpdmUtPm5hbWUpKSB7Ci0JCQlwcmludGsoS0VSTl9JTkZPICJpZGUtY2Q6IGlnbm9yaW5nIGRyaXZlICVzXG4iLAorCQkJcHJpbnRrKEtFUk5fSU5GTyBQRlggImlnbm9yaW5nIGRyaXZlICVzXG4iLAogCQkJCQkgZHJpdmUtPm5hbWUpOwogCQkJZ290byBmYWlsZWQ7CiAJCX0KIAl9CisKKwlkcml2ZS0+ZGVidWdfbWFzayA9IGRlYnVnX21hc2s7CisKIAlpbmZvID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGNkcm9tX2luZm8pLCBHRlBfS0VSTkVMKTsKIAlpZiAoaW5mbyA9PSBOVUxMKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IENhbid0IGFsbG9jYXRlIGEgY2Ryb20gc3RydWN0dXJlXG4iLAorCQlwcmludGsoS0VSTl9FUlIgUEZYICIlczogQ2FuJ3QgYWxsb2NhdGUgYSBjZHJvbSBzdHJ1Y3R1cmVcbiIsCiAJCQkJZHJpdmUtPm5hbWUpOwogCQlnb3RvIGZhaWxlZDsKIAl9CkBAIC0yMTcxLDYgKzIyOTIsNyBAQAogCiBzdGF0aWMgaW50IF9faW5pdCBpZGVfY2Ryb21faW5pdCh2b2lkKQogeworCXByaW50ayhLRVJOX0lORk8gRFJWX05BTUUgIiBkcml2ZXIgIiBJREVDRF9WRVJTSU9OICJcbiIpOwogCXJldHVybiBkcml2ZXJfcmVnaXN0ZXIoJmlkZV9jZHJvbV9kcml2ZXIuZ2VuX2RyaXZlcik7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2lkZS1jZC5oIGIvZHJpdmVycy9pZGUvaWRlLWNkLmgKaW5kZXggNjFhNDU5OS4uNTg4MmI5YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvaWRlLWNkLmgKKysrIGIvZHJpdmVycy9pZGUvaWRlLWNkLmgKQEAgLTg4LDcgKzg4LDYgQEAKIAlzdHJ1Y3QgcmVxdWVzdF9zZW5zZSBzZW5zZV9kYXRhOwogCiAJc3RydWN0IHJlcXVlc3QgcmVxdWVzdF9zZW5zZV9yZXF1ZXN0OwotCWludCBkbWE7CiAJdW5zaWduZWQgbG9uZyBsYXN0X2Jsb2NrOwogCXVuc2lnbmVkIGxvbmcgc3RhcnRfc2VlazsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvaWRlLWNkX2lvY3RsLmMgYi9kcml2ZXJzL2lkZS9pZGUtY2RfaW9jdGwuYwppbmRleCA3NDIzMWI0Li5kZjNkZjAwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9pZGUtY2RfaW9jdGwuYworKysgYi9kcml2ZXJzL2lkZS9pZGUtY2RfaW9jdGwuYwpAQCAtODYsOCArODYsOCBAQAogCiAJaWYgKHNsb3RfbnIgPT0gQ0RTTF9DVVJSRU5UKSB7CiAJCSh2b2lkKSBjZHJvbV9jaGVja19zdGF0dXMoZHJpdmUsIE5VTEwpOwotCQlyZXR2YWwgPSAoZHJpdmUtPmF0YXBpX2ZsYWdzICYgSURFX0FGTEFHX01FRElBX0NIQU5HRUQpID8gMSA6IDA7Ci0JCWRyaXZlLT5hdGFwaV9mbGFncyAmPSB+SURFX0FGTEFHX01FRElBX0NIQU5HRUQ7CisJCXJldHZhbCA9IChkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX01FRElBX0NIQU5HRUQpID8gMSA6IDA7CisJCWRyaXZlLT5kZXZfZmxhZ3MgJj0gfklERV9ERkxBR19NRURJQV9DSEFOR0VEOwogCQlyZXR1cm4gcmV0dmFsOwogCX0gZWxzZSB7CiAJCXJldHVybiAtRUlOVkFMOwpAQCAtMTM2LDcgKzEzNiw3IEBACiAJCXNlbnNlID0gJm15X3NlbnNlOwogCiAJLyogSWYgdGhlIGRyaXZlIGNhbm5vdCBsb2NrIHRoZSBkb29yLCBqdXN0IHByZXRlbmQuICovCi0JaWYgKGRyaXZlLT5hdGFwaV9mbGFncyAmIElERV9BRkxBR19OT19ET09STE9DSykgeworCWlmICgoZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19ET09STE9DS0lORykgPT0gMCkgewogCQlzdGF0ID0gMDsKIAl9IGVsc2UgewogCQl1bnNpZ25lZCBjaGFyIGNtZFtCTEtfTUFYX0NEQl07CkBAIC0xNTcsNyArMTU3LDcgQEAKIAkgICAgKHNlbnNlLT5hc2MgPT0gMHgyNCB8fCBzZW5zZS0+YXNjID09IDB4MjApKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiJXM6IGRvb3IgbG9ja2luZyBub3Qgc3VwcG9ydGVkXG4iLAogCQkJZHJpdmUtPm5hbWUpOwotCQlkcml2ZS0+YXRhcGlfZmxhZ3MgfD0gSURFX0FGTEFHX05PX0RPT1JMT0NLOworCQlkcml2ZS0+ZGV2X2ZsYWdzICY9IH5JREVfREZMQUdfRE9PUkxPQ0tJTkc7CiAJCXN0YXQgPSAwOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvaWRlLWRpc2suYyBiL2RyaXZlcnMvaWRlL2lkZS1kaXNrLmMKaW5kZXggMDE4NDZmMi4uMjIzNzUwYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvaWRlLWRpc2suYworKysgYi9kcml2ZXJzL2lkZS9pZGUtZGlzay5jCkBAIC0xNCw5ICsxNCw2IEBACiAgKiBUaGlzIGlzIHRoZSBJREUvQVRBIGRpc2sgZHJpdmVyLCBhcyBldm9sdmVkIGZyb20gaGQuYyBhbmQgaWRlLmMuCiAgKi8KIAotI2RlZmluZSBJREVESVNLX1ZFUlNJT04JIjEuMTgiCi0KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgpAQCAtMzksNTQgKzM2LDcgQEAKICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vZGl2NjQuaD4KIAotI2lmICFkZWZpbmVkKENPTkZJR19ERUJVR19CTE9DS19FWFRfREVWVCkKLSNkZWZpbmUgSURFX0RJU0tfTUlOT1JTCQkoMSA8PCBQQVJUTl9CSVRTKQotI2Vsc2UKLSNkZWZpbmUgSURFX0RJU0tfTUlOT1JTCQkwCi0jZW5kaWYKLQotc3RydWN0IGlkZV9kaXNrX29iaiB7Ci0JaWRlX2RyaXZlX3QJKmRyaXZlOwotCWlkZV9kcml2ZXJfdAkqZHJpdmVyOwotCXN0cnVjdCBnZW5kaXNrCSpkaXNrOwotCXN0cnVjdCBrcmVmCWtyZWY7Ci0JdW5zaWduZWQgaW50CW9wZW5lcnM7CS8qIHByb3RlY3RlZCBieSBCS0wgZm9yIG5vdyAqLwotfTsKLQotc3RhdGljIERFRklORV9NVVRFWChpZGVkaXNrX3JlZl9tdXRleCk7Ci0KLSNkZWZpbmUgdG9faWRlX2Rpc2sob2JqKSBjb250YWluZXJfb2Yob2JqLCBzdHJ1Y3QgaWRlX2Rpc2tfb2JqLCBrcmVmKQotCi0jZGVmaW5lIGlkZV9kaXNrX2coZGlzaykgXAotCWNvbnRhaW5lcl9vZigoZGlzayktPnByaXZhdGVfZGF0YSwgc3RydWN0IGlkZV9kaXNrX29iaiwgZHJpdmVyKQotCi1zdGF0aWMgdm9pZCBpZGVfZGlza19yZWxlYXNlKHN0cnVjdCBrcmVmICopOwotCi1zdGF0aWMgc3RydWN0IGlkZV9kaXNrX29iaiAqaWRlX2Rpc2tfZ2V0KHN0cnVjdCBnZW5kaXNrICpkaXNrKQotewotCXN0cnVjdCBpZGVfZGlza19vYmogKmlka3AgPSBOVUxMOwotCi0JbXV0ZXhfbG9jaygmaWRlZGlza19yZWZfbXV0ZXgpOwotCWlka3AgPSBpZGVfZGlza19nKGRpc2spOwotCWlmIChpZGtwKSB7Ci0JCWlmIChpZGVfZGV2aWNlX2dldChpZGtwLT5kcml2ZSkpCi0JCQlpZGtwID0gTlVMTDsKLQkJZWxzZQotCQkJa3JlZl9nZXQoJmlka3AtPmtyZWYpOwotCX0KLQltdXRleF91bmxvY2soJmlkZWRpc2tfcmVmX211dGV4KTsKLQlyZXR1cm4gaWRrcDsKLX0KLQotc3RhdGljIHZvaWQgaWRlX2Rpc2tfcHV0KHN0cnVjdCBpZGVfZGlza19vYmogKmlka3ApCi17Ci0JaWRlX2RyaXZlX3QgKmRyaXZlID0gaWRrcC0+ZHJpdmU7Ci0KLQltdXRleF9sb2NrKCZpZGVkaXNrX3JlZl9tdXRleCk7Ci0Ja3JlZl9wdXQoJmlka3AtPmtyZWYsIGlkZV9kaXNrX3JlbGVhc2UpOwotCWlkZV9kZXZpY2VfcHV0KGRyaXZlKTsKLQltdXRleF91bmxvY2soJmlkZWRpc2tfcmVmX211dGV4KTsKLX0KKyNpbmNsdWRlICJpZGUtZGlzay5oIgogCiBzdGF0aWMgY29uc3QgdTggaWRlX3J3X2NtZHNbXSA9IHsKIAlBVEFfQ01EX1JFQURfTVVMVEksCkBAIC0xNDAsOSArOTAsOSBAQAogCQkJCQlzZWN0b3JfdCBibG9jaykKIHsKIAlpZGVfaHdpZl90ICpod2lmCT0gSFdJRihkcml2ZSk7Ci0JdW5zaWduZWQgaW50IGRtYQk9IGRyaXZlLT51c2luZ19kbWE7CiAJdTE2IG5zZWN0b3JzCQk9ICh1MTYpcnEtPm5yX3NlY3RvcnM7Ci0JdTggbGJhNDgJCT0gKGRyaXZlLT5hZGRyZXNzaW5nID09IDEpID8gMSA6IDA7CisJdTggbGJhNDgJCT0gISEoZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19MQkE0OCk7CisJdTggZG1hCQkJPSAhIShkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX1VTSU5HX0RNQSk7CiAJaWRlX3Rhc2tfdAkJdGFzazsKIAlzdHJ1Y3QgaWRlX3Rhc2tmaWxlCSp0ZiA9ICZ0YXNrLnRmOwogCWlkZV9zdGFydHN0b3BfdAkJcmM7CkBAIC0xNjIsNyArMTEyLDcgQEAKIAltZW1zZXQoJnRhc2ssIDAsIHNpemVvZih0YXNrKSk7CiAJdGFzay50Zl9mbGFncyA9IElERV9URkxBR19URiB8IElERV9URkxBR19ERVZJQ0U7CiAKLQlpZiAoZHJpdmUtPnNlbGVjdC5iLmxiYSkgeworCWlmIChkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX0xCQSkgewogCQlpZiAobGJhNDgpIHsKIAkJCXByX2RlYnVnKCIlczogTEJBPTB4JTAxMmxseFxuIiwgZHJpdmUtPm5hbWUsCiAJCQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpYmxvY2spOwpAQCAtMTg3LDYgKzEzNyw4IEBACiAJCQl0Zi0+bGJhaCAgID0gYmxvY2sgPj49IDg7CiAJCQl0Zi0+ZGV2aWNlID0gKGJsb2NrID4+IDgpICYgMHhmOwogCQl9CisKKwkJdGYtPmRldmljZSB8PSBBVEFfTEJBOwogCX0gZWxzZSB7CiAJCXVuc2lnbmVkIGludCBzZWN0LCBoZWFkLCBjeWwsIHRyYWNrOwogCkBAIC0yMzcsNyArMTg5LDcgQEAKIHsKIAlpZGVfaHdpZl90ICpod2lmID0gSFdJRihkcml2ZSk7CiAKLQlCVUdfT04oZHJpdmUtPmJsb2NrZWQpOworCUJVR19PTihkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX0JMT0NLRUQpOwogCiAJaWYgKCFibGtfZnNfcmVxdWVzdChycSkpIHsKIAkJYmxrX2R1bXBfcnFfZmxhZ3MocnEsICJpZGVfZG9fcndfZGlzayAtIGJhZCBjb21tYW5kIik7CkBAIC0zODEsMTQyICszMzMsNTkgQEAKIAl9CiB9CiAKLXN0YXRpYyB2b2lkIGluaXRfaWRlZGlza19jYXBhY2l0eShpZGVfZHJpdmVfdCAqZHJpdmUpCitzdGF0aWMgaW50IGlkZV9kaXNrX2dldF9jYXBhY2l0eShpZGVfZHJpdmVfdCAqZHJpdmUpCiB7CiAJdTE2ICppZCA9IGRyaXZlLT5pZDsKLQkvKgotCSAqIElmIHRoaXMgZHJpdmUgc3VwcG9ydHMgdGhlIEhvc3QgUHJvdGVjdGVkIEFyZWEgZmVhdHVyZSBzZXQsCi0JICogdGhlbiB3ZSBtYXkgbmVlZCB0byBjaGFuZ2Ugb3VyIG9waW5pb24gYWJvdXQgdGhlIGRyaXZlJ3MgY2FwYWNpdHkuCi0JICovCi0JaW50IGhwYSA9IGF0YV9pZF9ocGFfZW5hYmxlZChpZCk7CisJaW50IGxiYTsKIAogCWlmIChhdGFfaWRfbGJhNDhfZW5hYmxlZChpZCkpIHsKIAkJLyogZHJpdmUgc3BlYWtzIDQ4LWJpdCBMQkEgKi8KLQkJZHJpdmUtPnNlbGVjdC5iLmxiYSA9IDE7CisJCWxiYSA9IDE7CiAJCWRyaXZlLT5jYXBhY2l0eTY0ID0gYXRhX2lkX3U2NChpZCwgQVRBX0lEX0xCQV9DQVBBQ0lUWV8yKTsKLQkJaWYgKGhwYSkKLQkJCWlkZWRpc2tfY2hlY2tfaHBhKGRyaXZlKTsKIAl9IGVsc2UgaWYgKGF0YV9pZF9oYXNfbGJhKGlkKSAmJiBhdGFfaWRfaXNfbGJhX2NhcGFjaXR5X29rKGlkKSkgewogCQkvKiBkcml2ZSBzcGVha3MgMjgtYml0IExCQSAqLwotCQlkcml2ZS0+c2VsZWN0LmIubGJhID0gMTsKKwkJbGJhID0gMTsKIAkJZHJpdmUtPmNhcGFjaXR5NjQgPSBhdGFfaWRfdTMyKGlkLCBBVEFfSURfTEJBX0NBUEFDSVRZKTsKLQkJaWYgKGhwYSkKLQkJCWlkZWRpc2tfY2hlY2tfaHBhKGRyaXZlKTsKIAl9IGVsc2UgewogCQkvKiBkcml2ZSBzcGVha3MgYm9yaW5nIG9sZCAyOC1iaXQgQ0hTICovCisJCWxiYSA9IDA7CiAJCWRyaXZlLT5jYXBhY2l0eTY0ID0gZHJpdmUtPmN5bCAqIGRyaXZlLT5oZWFkICogZHJpdmUtPnNlY3Q7CiAJfQotfQogCi1zdGF0aWMgc2VjdG9yX3QgaWRlZGlza19jYXBhY2l0eShpZGVfZHJpdmVfdCAqZHJpdmUpCi17Ci0JcmV0dXJuIGRyaXZlLT5jYXBhY2l0eTY0OwotfQorCWlmIChsYmEpIHsKKwkJZHJpdmUtPmRldl9mbGFncyB8PSBJREVfREZMQUdfTEJBOwogCi0jaWZkZWYgQ09ORklHX0lERV9QUk9DX0ZTCi1zdGF0aWMgaW50IHNtYXJ0X2VuYWJsZShpZGVfZHJpdmVfdCAqZHJpdmUpCi17Ci0JaWRlX3Rhc2tfdCBhcmdzOwotCXN0cnVjdCBpZGVfdGFza2ZpbGUgKnRmID0gJmFyZ3MudGY7Ci0KLQltZW1zZXQoJmFyZ3MsIDAsIHNpemVvZihpZGVfdGFza190KSk7Ci0JdGYtPmZlYXR1cmUgPSBBVEFfU01BUlRfRU5BQkxFOwotCXRmLT5sYmFtICAgID0gQVRBX1NNQVJUX0xCQU1fUEFTUzsKLQl0Zi0+bGJhaCAgICA9IEFUQV9TTUFSVF9MQkFIX1BBU1M7Ci0JdGYtPmNvbW1hbmQgPSBBVEFfQ01EX1NNQVJUOwotCWFyZ3MudGZfZmxhZ3MgPSBJREVfVEZMQUdfVEYgfCBJREVfVEZMQUdfREVWSUNFOwotCXJldHVybiBpZGVfbm9fZGF0YV90YXNrZmlsZShkcml2ZSwgJmFyZ3MpOwotfQotCi1zdGF0aWMgaW50IGdldF9zbWFydF9kYXRhKGlkZV9kcml2ZV90ICpkcml2ZSwgdTggKmJ1ZiwgdTggc3ViX2NtZCkKLXsKLQlpZGVfdGFza190IGFyZ3M7Ci0Jc3RydWN0IGlkZV90YXNrZmlsZSAqdGYgPSAmYXJncy50ZjsKLQotCW1lbXNldCgmYXJncywgMCwgc2l6ZW9mKGlkZV90YXNrX3QpKTsKLQl0Zi0+ZmVhdHVyZSA9IHN1Yl9jbWQ7Ci0JdGYtPm5zZWN0ICAgPSAweDAxOwotCXRmLT5sYmFtICAgID0gQVRBX1NNQVJUX0xCQU1fUEFTUzsKLQl0Zi0+bGJhaCAgICA9IEFUQV9TTUFSVF9MQkFIX1BBU1M7Ci0JdGYtPmNvbW1hbmQgPSBBVEFfQ01EX1NNQVJUOwotCWFyZ3MudGZfZmxhZ3MJPSBJREVfVEZMQUdfVEYgfCBJREVfVEZMQUdfREVWSUNFOwotCWFyZ3MuZGF0YV9waGFzZQk9IFRBU0tGSUxFX0lOOwotCSh2b2lkKSBzbWFydF9lbmFibGUoZHJpdmUpOwotCXJldHVybiBpZGVfcmF3X3Rhc2tmaWxlKGRyaXZlLCAmYXJncywgYnVmLCAxKTsKLX0KLQotc3RhdGljIGludCBwcm9jX2lkZWRpc2tfcmVhZF9jYWNoZQotCShjaGFyICpwYWdlLCBjaGFyICoqc3RhcnQsIG9mZl90IG9mZiwgaW50IGNvdW50LCBpbnQgKmVvZiwgdm9pZCAqZGF0YSkKLXsKLQlpZGVfZHJpdmVfdAkqZHJpdmUgPSAoaWRlX2RyaXZlX3QgKikgZGF0YTsKLQljaGFyCQkqb3V0ID0gcGFnZTsKLQlpbnQJCWxlbjsKLQotCWlmIChkcml2ZS0+aWRfcmVhZCkKLQkJbGVuID0gc3ByaW50ZihvdXQsICIlaVxuIiwgZHJpdmUtPmlkW0FUQV9JRF9CVUZfU0laRV0gLyAyKTsKLQllbHNlCi0JCWxlbiA9IHNwcmludGYob3V0LCAiKG5vbmUpXG4iKTsKLQotCVBST0NfSURFX1JFQURfUkVUVVJOKHBhZ2UsIHN0YXJ0LCBvZmYsIGNvdW50LCBlb2YsIGxlbik7Ci19Ci0KLXN0YXRpYyBpbnQgcHJvY19pZGVkaXNrX3JlYWRfY2FwYWNpdHkKLQkoY2hhciAqcGFnZSwgY2hhciAqKnN0YXJ0LCBvZmZfdCBvZmYsIGludCBjb3VudCwgaW50ICplb2YsIHZvaWQgKmRhdGEpCi17Ci0JaWRlX2RyaXZlX3QqZHJpdmUgPSAoaWRlX2RyaXZlX3QgKilkYXRhOwotCWludCBsZW47Ci0KLQlsZW4gPSBzcHJpbnRmKHBhZ2UsICIlbGx1XG4iLCAobG9uZyBsb25nKWlkZWRpc2tfY2FwYWNpdHkoZHJpdmUpKTsKLQotCVBST0NfSURFX1JFQURfUkVUVVJOKHBhZ2UsIHN0YXJ0LCBvZmYsIGNvdW50LCBlb2YsIGxlbik7Ci19Ci0KLXN0YXRpYyBpbnQgcHJvY19pZGVkaXNrX3JlYWRfc21hcnQoY2hhciAqcGFnZSwgY2hhciAqKnN0YXJ0LCBvZmZfdCBvZmYsCi0JCQkJICAgaW50IGNvdW50LCBpbnQgKmVvZiwgdm9pZCAqZGF0YSwgdTggc3ViX2NtZCkKLXsKLQlpZGVfZHJpdmVfdAkqZHJpdmUgPSAoaWRlX2RyaXZlX3QgKilkYXRhOwotCWludAkJbGVuID0gMCwgaSA9IDA7Ci0KLQlpZiAoZ2V0X3NtYXJ0X2RhdGEoZHJpdmUsIHBhZ2UsIHN1Yl9jbWQpID09IDApIHsKLQkJdW5zaWduZWQgc2hvcnQgKnZhbCA9ICh1bnNpZ25lZCBzaG9ydCAqKSBwYWdlOwotCQljaGFyICpvdXQgPSAoY2hhciAqKXZhbCArIFNFQ1RPUl9TSVpFOwotCi0JCXBhZ2UgPSBvdXQ7Ci0JCWRvIHsKLQkJCW91dCArPSBzcHJpbnRmKG91dCwgIiUwNHglYyIsIGxlMTZfdG9fY3B1KCp2YWwpLAotCQkJCSAgICAgICAoKytpICYgNykgPyAnICcgOiAnXG4nKTsKLQkJCXZhbCArPSAxOwotCQl9IHdoaWxlIChpIDwgU0VDVE9SX1NJWkUgLyAyKTsKLQkJbGVuID0gb3V0IC0gcGFnZTsKKwkJLyoKKwkJKiBJZiB0aGlzIGRldmljZSBzdXBwb3J0cyB0aGUgSG9zdCBQcm90ZWN0ZWQgQXJlYSBmZWF0dXJlIHNldCwKKwkJKiB0aGVuIHdlIG1heSBuZWVkIHRvIGNoYW5nZSBvdXIgb3BpbmlvbiBhYm91dCBpdHMgY2FwYWNpdHkuCisJCSovCisJCWlmIChhdGFfaWRfaHBhX2VuYWJsZWQoaWQpKQorCQkJaWRlZGlza19jaGVja19ocGEoZHJpdmUpOwogCX0KIAotCVBST0NfSURFX1JFQURfUkVUVVJOKHBhZ2UsIHN0YXJ0LCBvZmYsIGNvdW50LCBlb2YsIGxlbik7Ci19CisJLyogbGltaXQgZHJpdmUgY2FwYWNpdHkgdG8gMTM3R0IgaWYgTEJBNDggY2Fubm90IGJlIHVzZWQgKi8KKwlpZiAoKGRyaXZlLT5kZXZfZmxhZ3MgJiBJREVfREZMQUdfTEJBNDgpID09IDAgJiYKKwkgICAgZHJpdmUtPmNhcGFjaXR5NjQgPiAxVUxMIDw8IDI4KSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBjYW5ub3QgdXNlIExCQTQ4IC0gZnVsbCBjYXBhY2l0eSAiCisJCSAgICAgICAiJWxsdSBzZWN0b3JzICglbGx1IE1CKVxuIiwKKwkJICAgICAgIGRyaXZlLT5uYW1lLCAodW5zaWduZWQgbG9uZyBsb25nKWRyaXZlLT5jYXBhY2l0eTY0LAorCQkgICAgICAgc2VjdG9yc190b19NQihkcml2ZS0+Y2FwYWNpdHk2NCkpOworCQlkcml2ZS0+Y2FwYWNpdHk2NCA9IDFVTEwgPDwgMjg7CisJfQogCi1zdGF0aWMgaW50IHByb2NfaWRlZGlza19yZWFkX3N2Ci0JKGNoYXIgKnBhZ2UsIGNoYXIgKipzdGFydCwgb2ZmX3Qgb2ZmLCBpbnQgY291bnQsIGludCAqZW9mLCB2b2lkICpkYXRhKQotewotCXJldHVybiBwcm9jX2lkZWRpc2tfcmVhZF9zbWFydChwYWdlLCBzdGFydCwgb2ZmLCBjb3VudCwgZW9mLCBkYXRhLAotCQkJCSAgICAgICBBVEFfU01BUlRfUkVBRF9WQUxVRVMpOwotfQorCWlmICgoZHJpdmUtPmh3aWYtPmhvc3RfZmxhZ3MgJiBJREVfSEZMQUdfTk9fTEJBNDhfRE1BKSAmJgorCSAgICAoZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19MQkE0OCkpIHsKKwkJaWYgKGRyaXZlLT5jYXBhY2l0eTY0ID4gMVVMTCA8PCAyOCkgeworCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IGNhbm5vdCB1c2UgTEJBNDggRE1BIC0gUElPIG1vZGUiCisJCQkJCSAiIHdpbGwgYmUgdXNlZCBmb3IgYWNjZXNzaW5nIHNlY3RvcnMgIgorCQkJCQkgIj4gJXVcbiIsIGRyaXZlLT5uYW1lLCAxIDw8IDI4KTsKKwkJfSBlbHNlCisJCQlkcml2ZS0+ZGV2X2ZsYWdzICY9IH5JREVfREZMQUdfTEJBNDg7CisJfQogCi1zdGF0aWMgaW50IHByb2NfaWRlZGlza19yZWFkX3N0Ci0JKGNoYXIgKnBhZ2UsIGNoYXIgKipzdGFydCwgb2ZmX3Qgb2ZmLCBpbnQgY291bnQsIGludCAqZW9mLCB2b2lkICpkYXRhKQotewotCXJldHVybiBwcm9jX2lkZWRpc2tfcmVhZF9zbWFydChwYWdlLCBzdGFydCwgb2ZmLCBjb3VudCwgZW9mLCBkYXRhLAotCQkJCSAgICAgICBBVEFfU01BUlRfUkVBRF9USFJFU0hPTERTKTsKKwlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGlkZV9wcm9jX2VudHJ5X3QgaWRlZGlza19wcm9jW10gPSB7Ci0JeyAiY2FjaGUiLAkgIFNfSUZSRUd8U19JUlVHTywgcHJvY19pZGVkaXNrX3JlYWRfY2FjaGUsICAgIE5VTEwgfSwKLQl7ICJjYXBhY2l0eSIsCSAgU19JRlJFR3xTX0lSVUdPLCBwcm9jX2lkZWRpc2tfcmVhZF9jYXBhY2l0eSwgTlVMTCB9LAotCXsgImdlb21ldHJ5IiwJICBTX0lGUkVHfFNfSVJVR08sIHByb2NfaWRlX3JlYWRfZ2VvbWV0cnksICAgICBOVUxMIH0sCi0JeyAic21hcnRfdmFsdWVzIiwgU19JRlJFR3xTX0lSVVNSLCBwcm9jX2lkZWRpc2tfcmVhZF9zdiwgICAgICAgTlVMTCB9LAotCXsgInNtYXJ0X3RocmVzaG9sZHMiLCBTX0lGUkVHfFNfSVJVU1IsIHByb2NfaWRlZGlza19yZWFkX3N0LCAgIE5VTEwgfSwKLQl7IE5VTEwsIDAsIE5VTEwsIE5VTEwgfQotfTsKLSNlbmRpZgkvKiBDT05GSUdfSURFX1BST0NfRlMgKi8KLQogc3RhdGljIHZvaWQgaWRlZGlza19wcmVwYXJlX2ZsdXNoKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBzdHJ1Y3QgcmVxdWVzdCAqcnEpCiB7CiAJaWRlX2RyaXZlX3QgKmRyaXZlID0gcS0+cXVldWVkYXRhOwpAQCAtNTY4LDI1ICs0MzcsNDMgQEAKIAlyZXR1cm4gKGRyaXZlLT5tdWx0X2NvdW50ID09IGFyZykgPyAwIDogLUVJTzsKIH0KIAotaWRlX2RldnNldF9nZXQobm93ZXJyLCBub3dlcnIpOworaWRlX2RldnNldF9nZXRfZmxhZyhub3dlcnIsIElERV9ERkxBR19OT1dFUlIpOwogCiBzdGF0aWMgaW50IHNldF9ub3dlcnIoaWRlX2RyaXZlX3QgKmRyaXZlLCBpbnQgYXJnKQogewogCWlmIChhcmcgPCAwIHx8IGFyZyA+IDEpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JZHJpdmUtPm5vd2VyciA9IGFyZzsKKwlpZiAoYXJnKQorCQlkcml2ZS0+ZGV2X2ZsYWdzIHw9IElERV9ERkxBR19OT1dFUlI7CisJZWxzZQorCQlkcml2ZS0+ZGV2X2ZsYWdzICY9IH5JREVfREZMQUdfTk9XRVJSOworCiAJZHJpdmUtPmJhZF93c3RhdCA9IGFyZyA/IEJBRF9SX1NUQVQgOiBCQURfV19TVEFUOworCiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgaWRlX2RvX3NldGZlYXR1cmUoaWRlX2RyaXZlX3QgKmRyaXZlLCB1OCBmZWF0dXJlLCB1OCBuc2VjdCkKK3sKKwlpZGVfdGFza190IHRhc2s7CisKKwltZW1zZXQoJnRhc2ssIDAsIHNpemVvZih0YXNrKSk7CisJdGFzay50Zi5mZWF0dXJlID0gZmVhdHVyZTsKKwl0YXNrLnRmLm5zZWN0ICAgPSBuc2VjdDsKKwl0YXNrLnRmLmNvbW1hbmQgPSBBVEFfQ01EX1NFVF9GRUFUVVJFUzsKKwl0YXNrLnRmX2ZsYWdzID0gSURFX1RGTEFHX1RGIHwgSURFX1RGTEFHX0RFVklDRTsKKworCXJldHVybiBpZGVfbm9fZGF0YV90YXNrZmlsZShkcml2ZSwgJnRhc2spOworfQorCiBzdGF0aWMgdm9pZCB1cGRhdGVfb3JkZXJlZChpZGVfZHJpdmVfdCAqZHJpdmUpCiB7CiAJdTE2ICppZCA9IGRyaXZlLT5pZDsKIAl1bnNpZ25lZCBvcmRlcmVkID0gUVVFVUVfT1JERVJFRF9OT05FOwogCXByZXBhcmVfZmx1c2hfZm4gKnByZXBfZm4gPSBOVUxMOwogCi0JaWYgKGRyaXZlLT53Y2FjaGUpIHsKKwlpZiAoZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19XQ0FDSEUpIHsKIAkJdW5zaWduZWQgbG9uZyBsb25nIGNhcGFjaXR5OwogCQlpbnQgYmFycmllcjsKIAkJLyoKQEAgLTU5Nyw5ICs0ODQsMTEgQEAKIAkJICogdGltZSB3ZSBoYXZlIHRyaW1tZWQgdGhlIGRyaXZlIGNhcGFjaXR5IGlmIExCQTQ4IGlzCiAJCSAqIG5vdCBhdmFpbGFibGUgc28gd2UgZG9uJ3QgbmVlZCB0byByZWNoZWNrIHRoYXQuCiAJCSAqLwotCQljYXBhY2l0eSA9IGlkZWRpc2tfY2FwYWNpdHkoZHJpdmUpOwotCQliYXJyaWVyID0gYXRhX2lkX2ZsdXNoX2VuYWJsZWQoaWQpICYmICFkcml2ZS0+bm9mbHVzaCAmJgotCQkJKGRyaXZlLT5hZGRyZXNzaW5nID09IDAgfHwgY2FwYWNpdHkgPD0gKDFVTEwgPDwgMjgpIHx8CisJCWNhcGFjaXR5ID0gaWRlX2dkX2NhcGFjaXR5KGRyaXZlKTsKKwkJYmFycmllciA9IGF0YV9pZF9mbHVzaF9lbmFibGVkKGlkKSAmJgorCQkJKGRyaXZlLT5kZXZfZmxhZ3MgJiBJREVfREZMQUdfTk9GTFVTSCkgPT0gMCAmJgorCQkJKChkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX0xCQTQ4KSA9PSAwIHx8CisJCQkgY2FwYWNpdHkgPD0gKDFVTEwgPDwgMjgpIHx8CiAJCQkgYXRhX2lkX2ZsdXNoX2V4dF9lbmFibGVkKGlkKSk7CiAKIAkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IGNhY2hlIGZsdXNoZXMgJXNzdXBwb3J0ZWRcbiIsCkBAIC02MTUsMjUgKzUwNCwyNCBAQAogCWJsa19xdWV1ZV9vcmRlcmVkKGRyaXZlLT5xdWV1ZSwgb3JkZXJlZCwgcHJlcF9mbik7CiB9CiAKLWlkZV9kZXZzZXRfZ2V0KHdjYWNoZSwgd2NhY2hlKTsKK2lkZV9kZXZzZXRfZ2V0X2ZsYWcod2NhY2hlLCBJREVfREZMQUdfV0NBQ0hFKTsKIAogc3RhdGljIGludCBzZXRfd2NhY2hlKGlkZV9kcml2ZV90ICpkcml2ZSwgaW50IGFyZykKIHsKLQlpZGVfdGFza190IGFyZ3M7CiAJaW50IGVyciA9IDE7CiAKIAlpZiAoYXJnIDwgMCB8fCBhcmcgPiAxKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWlmIChhdGFfaWRfZmx1c2hfZW5hYmxlZChkcml2ZS0+aWQpKSB7Ci0JCW1lbXNldCgmYXJncywgMCwgc2l6ZW9mKGlkZV90YXNrX3QpKTsKLQkJYXJncy50Zi5mZWF0dXJlID0gYXJnID8KLQkJCVNFVEZFQVRVUkVTX1dDX09OIDogU0VURkVBVFVSRVNfV0NfT0ZGOwotCQlhcmdzLnRmLmNvbW1hbmQgPSBBVEFfQ01EX1NFVF9GRUFUVVJFUzsKLQkJYXJncy50Zl9mbGFncyA9IElERV9URkxBR19URiB8IElERV9URkxBR19ERVZJQ0U7Ci0JCWVyciA9IGlkZV9ub19kYXRhX3Rhc2tmaWxlKGRyaXZlLCAmYXJncyk7Ci0JCWlmIChlcnIgPT0gMCkKLQkJCWRyaXZlLT53Y2FjaGUgPSBhcmc7CisJCWVyciA9IGlkZV9kb19zZXRmZWF0dXJlKGRyaXZlLAorCQkJYXJnID8gU0VURkVBVFVSRVNfV0NfT04gOiBTRVRGRUFUVVJFU19XQ19PRkYsIDApOworCQlpZiAoZXJyID09IDApIHsKKwkJCWlmIChhcmcpCisJCQkJZHJpdmUtPmRldl9mbGFncyB8PSBJREVfREZMQUdfV0NBQ0hFOworCQkJZWxzZQorCQkJCWRyaXZlLT5kZXZfZmxhZ3MgJj0gfklERV9ERkxBR19XQ0FDSEU7CisJCX0KIAl9CiAKIAl1cGRhdGVfb3JkZXJlZChkcml2ZSk7CkBAIC02NTgsMjIgKzU0NiwxOCBAQAogCiBzdGF0aWMgaW50IHNldF9hY291c3RpYyhpZGVfZHJpdmVfdCAqZHJpdmUsIGludCBhcmcpCiB7Ci0JaWRlX3Rhc2tfdCBhcmdzOwotCiAJaWYgKGFyZyA8IDAgfHwgYXJnID4gMjU0KQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCW1lbXNldCgmYXJncywgMCwgc2l6ZW9mKGlkZV90YXNrX3QpKTsKLQlhcmdzLnRmLmZlYXR1cmUgPSBhcmcgPyBTRVRGRUFUVVJFU19BQU1fT04gOiBTRVRGRUFUVVJFU19BQU1fT0ZGOwotCWFyZ3MudGYubnNlY3QgICA9IGFyZzsKLQlhcmdzLnRmLmNvbW1hbmQgPSBBVEFfQ01EX1NFVF9GRUFUVVJFUzsKLQlhcmdzLnRmX2ZsYWdzID0gSURFX1RGTEFHX1RGIHwgSURFX1RGTEFHX0RFVklDRTsKLQlpZGVfbm9fZGF0YV90YXNrZmlsZShkcml2ZSwgJmFyZ3MpOworCWlkZV9kb19zZXRmZWF0dXJlKGRyaXZlLAorCQlhcmcgPyBTRVRGRUFUVVJFU19BQU1fT04gOiBTRVRGRUFUVVJFU19BQU1fT0ZGLCBhcmcpOworCiAJZHJpdmUtPmFjb3VzdGljID0gYXJnOworCiAJcmV0dXJuIDA7CiB9CiAKLWlkZV9kZXZzZXRfZ2V0KGFkZHJlc3NpbmcsIGFkZHJlc3NpbmcpOworaWRlX2RldnNldF9nZXRfZmxhZyhhZGRyZXNzaW5nLCBJREVfREZMQUdfTEJBNDgpOwogCiAvKgogICogZHJpdmUtPmFkZHJlc3Npbmc6CkBAIC02ODYsNTEgKzU3MCwzNCBAQAogCWlmIChhcmcgPCAwIHx8IGFyZyA+IDIpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JZHJpdmUtPmFkZHJlc3NpbmcgPSAgMDsKLQotCWlmIChkcml2ZS0+aHdpZi0+aG9zdF9mbGFncyAmIElERV9IRkxBR19OT19MQkE0OCkKLQkJcmV0dXJuIDA7Ci0KLQlpZiAoYXRhX2lkX2xiYTQ4X2VuYWJsZWQoZHJpdmUtPmlkKSA9PSAwKQorCWlmIChhcmcgJiYgKChkcml2ZS0+aHdpZi0+aG9zdF9mbGFncyAmIElERV9IRkxBR19OT19MQkE0OCkgfHwKKwkgICAgYXRhX2lkX2xiYTQ4X2VuYWJsZWQoZHJpdmUtPmlkKSA9PSAwKSkKIAkJcmV0dXJuIC1FSU87CiAKLQlkcml2ZS0+YWRkcmVzc2luZyA9IGFyZzsKKwlpZiAoYXJnID09IDIpCisJCWFyZyA9IDA7CisKKwlpZiAoYXJnKQorCQlkcml2ZS0+ZGV2X2ZsYWdzIHw9IElERV9ERkxBR19MQkE0ODsKKwllbHNlCisJCWRyaXZlLT5kZXZfZmxhZ3MgJj0gfklERV9ERkxBR19MQkE0ODsKIAogCXJldHVybiAwOwogfQogCi1pZGVfZGV2c2V0X3J3KGFjb3VzdGljLCBhY291c3RpYyk7Ci1pZGVfZGV2c2V0X3J3KGFkZHJlc3MsIGFkZHJlc3NpbmcpOwotaWRlX2RldnNldF9ydyhtdWx0Y291bnQsIG11bHRjb3VudCk7Ci1pZGVfZGV2c2V0X3J3KHdjYWNoZSwgd2NhY2hlKTsKK2lkZV9leHRfZGV2c2V0X3J3KGFjb3VzdGljLCBhY291c3RpYyk7CitpZGVfZXh0X2RldnNldF9ydyhhZGRyZXNzLCBhZGRyZXNzaW5nKTsKK2lkZV9leHRfZGV2c2V0X3J3KG11bHRjb3VudCwgbXVsdGNvdW50KTsKK2lkZV9leHRfZGV2c2V0X3J3KHdjYWNoZSwgd2NhY2hlKTsKIAotaWRlX2RldnNldF9yd19zeW5jKG5vd2Vyciwgbm93ZXJyKTsKK2lkZV9leHRfZGV2c2V0X3J3X3N5bmMobm93ZXJyLCBub3dlcnIpOwogCi0jaWZkZWYgQ09ORklHX0lERV9QUk9DX0ZTCi1pZGVfZGV2c2V0X3J3X2ZpZWxkKGJpb3NfY3lsLCBiaW9zX2N5bCk7Ci1pZGVfZGV2c2V0X3J3X2ZpZWxkKGJpb3NfaGVhZCwgYmlvc19oZWFkKTsKLWlkZV9kZXZzZXRfcndfZmllbGQoYmlvc19zZWN0LCBiaW9zX3NlY3QpOwotaWRlX2RldnNldF9yd19maWVsZChmYWlsdXJlcywgZmFpbHVyZXMpOwotaWRlX2RldnNldF9yd19maWVsZChsdW4sIGx1bik7Ci1pZGVfZGV2c2V0X3J3X2ZpZWxkKG1heF9mYWlsdXJlcywgbWF4X2ZhaWx1cmVzKTsKK3N0YXRpYyBpbnQgaWRlX2Rpc2tfY2hlY2soaWRlX2RyaXZlX3QgKmRyaXZlLCBjb25zdCBjaGFyICpzKQoreworCXJldHVybiAxOworfQogCi1zdGF0aWMgY29uc3Qgc3RydWN0IGlkZV9wcm9jX2RldnNldCBpZGVkaXNrX3NldHRpbmdzW10gPSB7Ci0JSURFX1BST0NfREVWU0VUKGFjb3VzdGljLAkwLCAgIDI1NCksCi0JSURFX1BST0NfREVWU0VUKGFkZHJlc3MsCTAsICAgICAyKSwKLQlJREVfUFJPQ19ERVZTRVQoYmlvc19jeWwsCTAsIDY1NTM1KSwKLQlJREVfUFJPQ19ERVZTRVQoYmlvc19oZWFkLAkwLCAgIDI1NSksCi0JSURFX1BST0NfREVWU0VUKGJpb3Nfc2VjdCwJMCwgICAgNjMpLAotCUlERV9QUk9DX0RFVlNFVChmYWlsdXJlcywJMCwgNjU1MzUpLAotCUlERV9QUk9DX0RFVlNFVChsdW4sCQkwLCAgICAgNyksCi0JSURFX1BST0NfREVWU0VUKG1heF9mYWlsdXJlcywJMCwgNjU1MzUpLAotCUlERV9QUk9DX0RFVlNFVChtdWx0Y291bnQsCTAsICAgIDE2KSwKLQlJREVfUFJPQ19ERVZTRVQobm93ZXJyLAkJMCwgICAgIDEpLAotCUlERV9QUk9DX0RFVlNFVCh3Y2FjaGUsCQkwLCAgICAgMSksCi0JeyAwIH0sCi19OwotI2VuZGlmCi0KLXN0YXRpYyB2b2lkIGlkZWRpc2tfc2V0dXAoaWRlX2RyaXZlX3QgKmRyaXZlKQorc3RhdGljIHZvaWQgaWRlX2Rpc2tfc2V0dXAoaWRlX2RyaXZlX3QgKmRyaXZlKQogewogCXN0cnVjdCBpZGVfZGlza19vYmogKmlka3AgPSBkcml2ZS0+ZHJpdmVyX2RhdGE7CiAJaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOwpAQCAtNzQwLDIwICs2MDcsMjAgQEAKIAogCWlkZV9wcm9jX3JlZ2lzdGVyX2RyaXZlcihkcml2ZSwgaWRrcC0+ZHJpdmVyKTsKIAotCWlmIChkcml2ZS0+aWRfcmVhZCA9PSAwKQorCWlmICgoZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19JRF9SRUFEKSA9PSAwKQogCQlyZXR1cm47CiAKLQlpZiAoZHJpdmUtPnJlbW92YWJsZSkgeworCWlmIChkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX1JFTU9WQUJMRSkgewogCQkvKgogCQkgKiBSZW1vdmFibGUgZGlza3MgKGVnLiBTWVFVRVNUKTsgaWdub3JlICdXRCcgZHJpdmVzCiAJCSAqLwogCQlpZiAobVswXSAhPSAnVycgfHwgbVsxXSAhPSAnRCcpCi0JCQlkcml2ZS0+ZG9vcmxvY2tpbmcgPSAxOworCQkJZHJpdmUtPmRldl9mbGFncyB8PSBJREVfREZMQUdfRE9PUkxPQ0tJTkc7CiAJfQogCiAJKHZvaWQpc2V0X2FkZHJlc3NpbmcoZHJpdmUsIDEpOwogCi0JaWYgKGRyaXZlLT5hZGRyZXNzaW5nID09IDEpIHsKKwlpZiAoZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19MQkE0OCkgewogCQlpbnQgbWF4X3MgPSAyMDQ4OwogCiAJCWlmIChtYXhfcyA+IGh3aWYtPnJxc2l6ZSkKQEAgLTc2NiwzMyArNjMzLDE1IEBACiAJCQkgZHJpdmUtPnF1ZXVlLT5tYXhfc2VjdG9ycyAvIDIpOwogCiAJLyogY2FsY3VsYXRlIGRyaXZlIGNhcGFjaXR5LCBhbmQgc2VsZWN0IExCQSBpZiBwb3NzaWJsZSAqLwotCWluaXRfaWRlZGlza19jYXBhY2l0eShkcml2ZSk7Ci0KLQkvKiBsaW1pdCBkcml2ZSBjYXBhY2l0eSB0byAxMzdHQiBpZiBMQkE0OCBjYW5ub3QgYmUgdXNlZCAqLwotCWlmIChkcml2ZS0+YWRkcmVzc2luZyA9PSAwICYmIGRyaXZlLT5jYXBhY2l0eTY0ID4gMVVMTCA8PCAyOCkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogY2Fubm90IHVzZSBMQkE0OCAtIGZ1bGwgY2FwYWNpdHkgIgotCQkgICAgICAgIiVsbHUgc2VjdG9ycyAoJWxsdSBNQilcbiIsCi0JCSAgICAgICBkcml2ZS0+bmFtZSwgKHVuc2lnbmVkIGxvbmcgbG9uZylkcml2ZS0+Y2FwYWNpdHk2NCwKLQkJICAgICAgIHNlY3RvcnNfdG9fTUIoZHJpdmUtPmNhcGFjaXR5NjQpKTsKLQkJZHJpdmUtPmNhcGFjaXR5NjQgPSAxVUxMIDw8IDI4OwotCX0KLQotCWlmICgoaHdpZi0+aG9zdF9mbGFncyAmIElERV9IRkxBR19OT19MQkE0OF9ETUEpICYmIGRyaXZlLT5hZGRyZXNzaW5nKSB7Ci0JCWlmIChkcml2ZS0+Y2FwYWNpdHk2NCA+IDFVTEwgPDwgMjgpIHsKLQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBjYW5ub3QgdXNlIExCQTQ4IERNQSAtIFBJTyBtb2RlIgotCQkJCQkgIiB3aWxsIGJlIHVzZWQgZm9yIGFjY2Vzc2luZyBzZWN0b3JzICIKLQkJCQkJICI+ICV1XG4iLCBkcml2ZS0+bmFtZSwgMSA8PCAyOCk7Ci0JCX0gZWxzZQotCQkJZHJpdmUtPmFkZHJlc3NpbmcgPSAwOwotCX0KKwlpZGVfZGlza19nZXRfY2FwYWNpdHkoZHJpdmUpOwogCiAJLyoKIAkgKiBpZiBwb3NzaWJsZSwgZ2l2ZSBmZGlzayBhY2Nlc3MgdG8gbW9yZSBvZiB0aGUgZHJpdmUsCiAJICogYnkgY29ycmVjdGluZyBiaW9zX2N5bHM6CiAJICovCi0JY2FwYWNpdHkgPSBpZGVkaXNrX2NhcGFjaXR5KGRyaXZlKTsKKwljYXBhY2l0eSA9IGlkZV9nZF9jYXBhY2l0eShkcml2ZSk7CiAKLQlpZiAoIWRyaXZlLT5mb3JjZWRfZ2VvbSkgeworCWlmICgoZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19GT1JDRURfR0VPTSkgPT0gMCkgewogCQlpZiAoYXRhX2lkX2xiYTQ4X2VuYWJsZWQoZHJpdmUtPmlkKSkgewogCQkJLyogY29tcGF0aWJpbGl0eSAqLwogCQkJZHJpdmUtPmJpb3Nfc2VjdCA9IDYzOwpAQCAtODI3LDMwMSArNjc2LDYzIEBACiAKIAkvKiB3cml0ZSBjYWNoZSBlbmFibGVkPyAqLwogCWlmICgoaWRbQVRBX0lEX0NTRk9dICYgMSkgfHwgYXRhX2lkX3djYWNoZV9lbmFibGVkKGlkKSkKLQkJZHJpdmUtPndjYWNoZSA9IDE7CisJCWRyaXZlLT5kZXZfZmxhZ3MgfD0gSURFX0RGTEFHX1dDQUNIRTsKIAogCXNldF93Y2FjaGUoZHJpdmUsIDEpOworCisJaWYgKChkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX0xCQSkgPT0gMCAmJgorCSAgICAoZHJpdmUtPmhlYWQgPT0gMCB8fCBkcml2ZS0+aGVhZCA+IDE2KSkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBpbnZhbGlkIGdlb21ldHJ5OiAlZCBwaHlzaWNhbCBoZWFkcz9cbiIsCisJCQlkcml2ZS0+bmFtZSwgZHJpdmUtPmhlYWQpOworCQlkcml2ZS0+ZGV2X2ZsYWdzICY9IH5JREVfREZMQUdfQVRUQUNIOworCX0gZWxzZQorCQlkcml2ZS0+ZGV2X2ZsYWdzIHw9IElERV9ERkxBR19BVFRBQ0g7CiB9CiAKLXN0YXRpYyB2b2lkIGlkZV9jYWNoZWZsdXNoX3AoaWRlX2RyaXZlX3QgKmRyaXZlKQorc3RhdGljIHZvaWQgaWRlX2Rpc2tfZmx1c2goaWRlX2RyaXZlX3QgKmRyaXZlKQogewotCWlmICghZHJpdmUtPndjYWNoZSB8fCBhdGFfaWRfZmx1c2hfZW5hYmxlZChkcml2ZS0+aWQpID09IDApCisJaWYgKGF0YV9pZF9mbHVzaF9lbmFibGVkKGRyaXZlLT5pZCkgPT0gMCB8fAorCSAgICAoZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19XQ0FDSEUpID09IDApCiAJCXJldHVybjsKIAogCWlmIChkb19pZGVkaXNrX2ZsdXNoY2FjaGUoZHJpdmUpKQogCQlwcmludGsoS0VSTl9JTkZPICIlczogd2NhY2hlIGZsdXNoIGZhaWxlZCFcbiIsIGRyaXZlLT5uYW1lKTsKIH0KIAotc3RhdGljIHZvaWQgaWRlX2Rpc2tfcmVtb3ZlKGlkZV9kcml2ZV90ICpkcml2ZSkKK3N0YXRpYyBpbnQgaWRlX2Rpc2tfaW5pdF9tZWRpYShpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCBnZW5kaXNrICpkaXNrKQogewotCXN0cnVjdCBpZGVfZGlza19vYmogKmlka3AgPSBkcml2ZS0+ZHJpdmVyX2RhdGE7Ci0Jc3RydWN0IGdlbmRpc2sgKmcgPSBpZGtwLT5kaXNrOwotCi0JaWRlX3Byb2NfdW5yZWdpc3Rlcl9kcml2ZXIoZHJpdmUsIGlka3AtPmRyaXZlcik7Ci0KLQlkZWxfZ2VuZGlzayhnKTsKLQotCWlkZV9jYWNoZWZsdXNoX3AoZHJpdmUpOwotCi0JaWRlX2Rpc2tfcHV0KGlka3ApOworCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBpZGVfZGlza19yZWxlYXNlKHN0cnVjdCBrcmVmICprcmVmKQotewotCXN0cnVjdCBpZGVfZGlza19vYmogKmlka3AgPSB0b19pZGVfZGlzayhrcmVmKTsKLQlpZGVfZHJpdmVfdCAqZHJpdmUgPSBpZGtwLT5kcml2ZTsKLQlzdHJ1Y3QgZ2VuZGlzayAqZyA9IGlka3AtPmRpc2s7Ci0KLQlkcml2ZS0+ZHJpdmVyX2RhdGEgPSBOVUxMOwotCWctPnByaXZhdGVfZGF0YSA9IE5VTEw7Ci0JcHV0X2Rpc2soZyk7Ci0Ja2ZyZWUoaWRrcCk7Ci19Ci0KLXN0YXRpYyBpbnQgaWRlX2Rpc2tfcHJvYmUoaWRlX2RyaXZlX3QgKmRyaXZlKTsKLQotLyoKLSAqIE9uIEhQQSBkcml2ZXMgdGhlIGNhcGFjaXR5IG5lZWRzIHRvIGJlCi0gKiByZWluaXRpbGl6ZWQgb24gcmVzdW1lIG90aGVyd2lzZSB0aGUgZGlzawotICogY2FuIG5vdCBiZSB1c2VkIGFuZCBhIGhhcmQgcmVzZXQgaXMgcmVxdWlyZWQKLSAqLwotc3RhdGljIHZvaWQgaWRlX2Rpc2tfcmVzdW1lKGlkZV9kcml2ZV90ICpkcml2ZSkKLXsKLQlpZiAoYXRhX2lkX2hwYV9lbmFibGVkKGRyaXZlLT5pZCkpCi0JCWluaXRfaWRlZGlza19jYXBhY2l0eShkcml2ZSk7Ci19Ci0KLXN0YXRpYyB2b2lkIGlkZV9kZXZpY2Vfc2h1dGRvd24oaWRlX2RyaXZlX3QgKmRyaXZlKQotewotI2lmZGVmCUNPTkZJR19BTFBIQQotCS8qIE9uIEFscGhhLCBoYWx0KDgpIGRvZXNuJ3QgYWN0dWFsbHkgdHVybiB0aGUgbWFjaGluZSBvZmYsCi0JICAgaXQgcHV0cyB5b3UgaW50byB0aGUgc29ydCBvZiBmaXJtd2FyZSBtb25pdG9yLiBUeXBpY2FsbHksCi0JICAgaXQncyB1c2VkIHRvIGJvb3QgYW5vdGhlciBrZXJuZWwgaW1hZ2UsIHNvIGl0J3Mgbm90IG11Y2gKLQkgICBkaWZmZXJlbnQgZnJvbSByZWJvb3QoOCkuIFRoZXJlZm9yZSwgd2UgZG9uJ3QgbmVlZCB0bwotCSAgIHNwaW4gZG93biB0aGUgZGlzayBpbiB0aGlzIGNhc2UsIGVzcGVjaWFsbHkgc2luY2UgQWxwaGEKLQkgICBmaXJtd2FyZSBkb2Vzbid0IGhhbmRsZSBkaXNrcyBpbiBzdGFuZGJ5IG1vZGUgcHJvcGVybHkuCi0JICAgT24gdGhlIG90aGVyIGhhbmQsIGl0J3MgcmVhc29uYWJseSBzYWZlIHRvIHR1cm4gdGhlIHBvd2VyCi0JICAgb2ZmIHdoZW4gdGhlIHNodXRkb3duIHByb2Nlc3MgcmVhY2hlcyB0aGUgZmlybXdhcmUgcHJvbXB0LAotCSAgIGFzIHRoZSBmaXJtd2FyZSBpbml0aWFsaXphdGlvbiB0YWtlcyByYXRoZXIgbG9uZyB0aW1lIC0KLQkgICBhdCBsZWFzdCAxMCBzZWNvbmRzLCB3aGljaCBzaG91bGQgYmUgc3VmZmljaWVudCBmb3IKLQkgICB0aGUgZGlzayB0byBleHBpcmUgaXRzIHdyaXRlIGNhY2hlLiAqLwotCWlmIChzeXN0ZW1fc3RhdGUgIT0gU1lTVEVNX1BPV0VSX09GRikgewotI2Vsc2UKLQlpZiAoc3lzdGVtX3N0YXRlID09IFNZU1RFTV9SRVNUQVJUKSB7Ci0jZW5kaWYKLQkJaWRlX2NhY2hlZmx1c2hfcChkcml2ZSk7Ci0JCXJldHVybjsKLQl9Ci0KLQlwcmludGsoS0VSTl9JTkZPICJTaHV0ZG93bjogJXNcbiIsIGRyaXZlLT5uYW1lKTsKLQotCWRyaXZlLT5nZW5kZXYuYnVzLT5zdXNwZW5kKCZkcml2ZS0+Z2VuZGV2LCBQTVNHX1NVU1BFTkQpOwotfQotCi1zdGF0aWMgaWRlX2RyaXZlcl90IGlkZWRpc2tfZHJpdmVyID0gewotCS5nZW5fZHJpdmVyID0gewotCQkub3duZXIJCT0gVEhJU19NT0RVTEUsCi0JCS5uYW1lCQk9ICJpZGUtZGlzayIsCi0JCS5idXMJCT0gJmlkZV9idXNfdHlwZSwKLQl9LAotCS5wcm9iZQkJCT0gaWRlX2Rpc2tfcHJvYmUsCi0JLnJlbW92ZQkJCT0gaWRlX2Rpc2tfcmVtb3ZlLAotCS5yZXN1bWUJCQk9IGlkZV9kaXNrX3Jlc3VtZSwKLQkuc2h1dGRvd24JCT0gaWRlX2RldmljZV9zaHV0ZG93biwKLQkudmVyc2lvbgkJPSBJREVESVNLX1ZFUlNJT04sCi0JLm1lZGlhCQkJPSBpZGVfZGlzaywKLQkuZG9fcmVxdWVzdAkJPSBpZGVfZG9fcndfZGlzaywKLQkuZW5kX3JlcXVlc3QJCT0gaWRlX2VuZF9yZXF1ZXN0LAotCS5lcnJvcgkJCT0gX19pZGVfZXJyb3IsCi0jaWZkZWYgQ09ORklHX0lERV9QUk9DX0ZTCi0JLnByb2MJCQk9IGlkZWRpc2tfcHJvYywKLQkuc2V0dGluZ3MJCT0gaWRlZGlza19zZXR0aW5ncywKLSNlbmRpZgotfTsKLQotc3RhdGljIGludCBpZGVkaXNrX3NldF9kb29ybG9jayhpZGVfZHJpdmVfdCAqZHJpdmUsIGludCBvbikKK3N0YXRpYyBpbnQgaWRlX2Rpc2tfc2V0X2Rvb3Jsb2NrKGlkZV9kcml2ZV90ICpkcml2ZSwgc3RydWN0IGdlbmRpc2sgKmRpc2ssCisJCQkJIGludCBvbikKIHsKIAlpZGVfdGFza190IHRhc2s7CisJaW50IHJldDsKKworCWlmICgoZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19ET09STE9DS0lORykgPT0gMCkKKwkJcmV0dXJuIDA7CiAKIAltZW1zZXQoJnRhc2ssIDAsIHNpemVvZih0YXNrKSk7CiAJdGFzay50Zi5jb21tYW5kID0gb24gPyBBVEFfQ01EX01FRElBX0xPQ0sgOiBBVEFfQ01EX01FRElBX1VOTE9DSzsKIAl0YXNrLnRmX2ZsYWdzID0gSURFX1RGTEFHX1RGIHwgSURFX1RGTEFHX0RFVklDRTsKIAotCXJldHVybiBpZGVfbm9fZGF0YV90YXNrZmlsZShkcml2ZSwgJnRhc2spOworCXJldCA9IGlkZV9ub19kYXRhX3Rhc2tmaWxlKGRyaXZlLCAmdGFzayk7CisKKwlpZiAocmV0KQorCQlkcml2ZS0+ZGV2X2ZsYWdzICY9IH5JREVfREZMQUdfRE9PUkxPQ0tJTkc7CisKKwlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IGlkZWRpc2tfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCkKLXsKLQlzdHJ1Y3QgZ2VuZGlzayAqZGlzayA9IGlub2RlLT5pX2JkZXYtPmJkX2Rpc2s7Ci0Jc3RydWN0IGlkZV9kaXNrX29iaiAqaWRrcDsKLQlpZGVfZHJpdmVfdCAqZHJpdmU7Ci0KLQlpZGtwID0gaWRlX2Rpc2tfZ2V0KGRpc2spOwotCWlmIChpZGtwID09IE5VTEwpCi0JCXJldHVybiAtRU5YSU87Ci0KLQlkcml2ZSA9IGlka3AtPmRyaXZlOwotCi0JaWRrcC0+b3BlbmVycysrOwotCi0JaWYgKGRyaXZlLT5yZW1vdmFibGUgJiYgaWRrcC0+b3BlbmVycyA9PSAxKSB7Ci0JCWNoZWNrX2Rpc2tfY2hhbmdlKGlub2RlLT5pX2JkZXYpOwotCQkvKgotCQkgKiBJZ25vcmUgdGhlIHJldHVybiBjb2RlIGZyb20gZG9vcl9sb2NrLAotCQkgKiBzaW5jZSB0aGUgb3BlbigpIGhhcyBhbHJlYWR5IHN1Y2NlZWRlZCwKLQkJICogYW5kIHRoZSBkb29yX2xvY2sgaXMgaXJyZWxldmFudCBhdCB0aGlzIHBvaW50LgotCQkgKi8KLQkJaWYgKGRyaXZlLT5kb29ybG9ja2luZyAmJiBpZGVkaXNrX3NldF9kb29ybG9jayhkcml2ZSwgMSkpCi0JCQlkcml2ZS0+ZG9vcmxvY2tpbmcgPSAwOwotCX0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBpZGVkaXNrX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHApCi17Ci0Jc3RydWN0IGdlbmRpc2sgKmRpc2sgPSBpbm9kZS0+aV9iZGV2LT5iZF9kaXNrOwotCXN0cnVjdCBpZGVfZGlza19vYmogKmlka3AgPSBpZGVfZGlza19nKGRpc2spOwotCWlkZV9kcml2ZV90ICpkcml2ZSA9IGlka3AtPmRyaXZlOwotCi0JaWYgKGlka3AtPm9wZW5lcnMgPT0gMSkKLQkJaWRlX2NhY2hlZmx1c2hfcChkcml2ZSk7Ci0KLQlpZiAoZHJpdmUtPnJlbW92YWJsZSAmJiBpZGtwLT5vcGVuZXJzID09IDEpIHsKLQkJaWYgKGRyaXZlLT5kb29ybG9ja2luZyAmJiBpZGVkaXNrX3NldF9kb29ybG9jayhkcml2ZSwgMCkpCi0JCQlkcml2ZS0+ZG9vcmxvY2tpbmcgPSAwOwotCX0KLQotCWlka3AtPm9wZW5lcnMtLTsKLQotCWlkZV9kaXNrX3B1dChpZGtwKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGlkZWRpc2tfZ2V0Z2VvKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIHN0cnVjdCBoZF9nZW9tZXRyeSAqZ2VvKQotewotCXN0cnVjdCBpZGVfZGlza19vYmogKmlka3AgPSBpZGVfZGlza19nKGJkZXYtPmJkX2Rpc2spOwotCWlkZV9kcml2ZV90ICpkcml2ZSA9IGlka3AtPmRyaXZlOwotCi0JZ2VvLT5oZWFkcyA9IGRyaXZlLT5iaW9zX2hlYWQ7Ci0JZ2VvLT5zZWN0b3JzID0gZHJpdmUtPmJpb3Nfc2VjdDsKLQlnZW8tPmN5bGluZGVycyA9ICh1MTYpZHJpdmUtPmJpb3NfY3lsOyAvKiB0cnVuY2F0ZSAqLwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGlkZV9pb2N0bF9kZXZzZXQgaWRlX2Rpc2tfaW9jdGxfc2V0dGluZ3NbXSA9IHsKLXsgSERJT19HRVRfQUREUkVTUywJSERJT19TRVRfQUREUkVTUywgICAmaWRlX2RldnNldF9hZGRyZXNzICAgfSwKLXsgSERJT19HRVRfTVVMVENPVU5ULAlIRElPX1NFVF9NVUxUQ09VTlQsICZpZGVfZGV2c2V0X211bHRjb3VudCB9LAoteyBIRElPX0dFVF9OT1dFUlIsCUhESU9fU0VUX05PV0VSUiwgICAgJmlkZV9kZXZzZXRfbm93ZXJyCSAgfSwKLXsgSERJT19HRVRfV0NBQ0hFLAlIRElPX1NFVF9XQ0FDSEUsICAgICZpZGVfZGV2c2V0X3djYWNoZQkgIH0sCi17IEhESU9fR0VUX0FDT1VTVElDLAlIRElPX1NFVF9BQ09VU1RJQywgICZpZGVfZGV2c2V0X2Fjb3VzdGljICB9LAoteyAwIH0KK2NvbnN0IHN0cnVjdCBpZGVfZGlza19vcHMgaWRlX2F0YV9kaXNrX29wcyA9IHsKKwkuY2hlY2sJCT0gaWRlX2Rpc2tfY2hlY2ssCisJLmdldF9jYXBhY2l0eQk9IGlkZV9kaXNrX2dldF9jYXBhY2l0eSwKKwkuc2V0dXAJCT0gaWRlX2Rpc2tfc2V0dXAsCisJLmZsdXNoCQk9IGlkZV9kaXNrX2ZsdXNoLAorCS5pbml0X21lZGlhCT0gaWRlX2Rpc2tfaW5pdF9tZWRpYSwKKwkuc2V0X2Rvb3Jsb2NrCT0gaWRlX2Rpc2tfc2V0X2Rvb3Jsb2NrLAorCS5kb19yZXF1ZXN0CT0gaWRlX2RvX3J3X2Rpc2ssCisJLmVuZF9yZXF1ZXN0CT0gaWRlX2VuZF9yZXF1ZXN0LAorCS5pb2N0bAkJPSBpZGVfZGlza19pb2N0bCwKIH07Ci0KLXN0YXRpYyBpbnQgaWRlZGlza19pb2N0bChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSwKLQkJCXVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQotewotCXN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYgPSBpbm9kZS0+aV9iZGV2OwotCXN0cnVjdCBpZGVfZGlza19vYmogKmlka3AgPSBpZGVfZGlza19nKGJkZXYtPmJkX2Rpc2spOwotCWlkZV9kcml2ZV90ICpkcml2ZSA9IGlka3AtPmRyaXZlOwotCWludCBlcnI7Ci0KLQllcnIgPSBpZGVfc2V0dGluZ19pb2N0bChkcml2ZSwgYmRldiwgY21kLCBhcmcsIGlkZV9kaXNrX2lvY3RsX3NldHRpbmdzKTsKLQlpZiAoZXJyICE9IC1FT1BOT1RTVVBQKQotCQlyZXR1cm4gZXJyOwotCi0JcmV0dXJuIGdlbmVyaWNfaWRlX2lvY3RsKGRyaXZlLCBmaWxlLCBiZGV2LCBjbWQsIGFyZyk7Ci19Ci0KLXN0YXRpYyBpbnQgaWRlZGlza19tZWRpYV9jaGFuZ2VkKHN0cnVjdCBnZW5kaXNrICpkaXNrKQotewotCXN0cnVjdCBpZGVfZGlza19vYmogKmlka3AgPSBpZGVfZGlza19nKGRpc2spOwotCWlkZV9kcml2ZV90ICpkcml2ZSA9IGlka3AtPmRyaXZlOwotCi0JLyogZG8gbm90IHNjYW4gcGFydGl0aW9ucyB0d2ljZSBpZiB0aGlzIGlzIGEgcmVtb3ZhYmxlIGRldmljZSAqLwotCWlmIChkcml2ZS0+YXR0YWNoKSB7Ci0JCWRyaXZlLT5hdHRhY2ggPSAwOwotCQlyZXR1cm4gMDsKLQl9Ci0JLyogaWYgcmVtb3ZhYmxlLCBhbHdheXMgYXNzdW1lIGl0IHdhcyBjaGFuZ2VkICovCi0JcmV0dXJuIGRyaXZlLT5yZW1vdmFibGU7Ci19Ci0KLXN0YXRpYyBpbnQgaWRlZGlza19yZXZhbGlkYXRlX2Rpc2soc3RydWN0IGdlbmRpc2sgKmRpc2spCi17Ci0Jc3RydWN0IGlkZV9kaXNrX29iaiAqaWRrcCA9IGlkZV9kaXNrX2coZGlzayk7Ci0Jc2V0X2NhcGFjaXR5KGRpc2ssIGlkZWRpc2tfY2FwYWNpdHkoaWRrcC0+ZHJpdmUpKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHN0cnVjdCBibG9ja19kZXZpY2Vfb3BlcmF0aW9ucyBpZGVkaXNrX29wcyA9IHsKLQkub3duZXIJCQk9IFRISVNfTU9EVUxFLAotCS5vcGVuCQkJPSBpZGVkaXNrX29wZW4sCi0JLnJlbGVhc2UJCT0gaWRlZGlza19yZWxlYXNlLAotCS5pb2N0bAkJCT0gaWRlZGlza19pb2N0bCwKLQkuZ2V0Z2VvCQkJPSBpZGVkaXNrX2dldGdlbywKLQkubWVkaWFfY2hhbmdlZAkJPSBpZGVkaXNrX21lZGlhX2NoYW5nZWQsCi0JLnJldmFsaWRhdGVfZGlzawk9IGlkZWRpc2tfcmV2YWxpZGF0ZV9kaXNrCi19OwotCi1NT0RVTEVfREVTQ1JJUFRJT04oIkFUQSBESVNLIERyaXZlciIpOwotCi1zdGF0aWMgaW50IGlkZV9kaXNrX3Byb2JlKGlkZV9kcml2ZV90ICpkcml2ZSkKLXsKLQlzdHJ1Y3QgaWRlX2Rpc2tfb2JqICppZGtwOwotCXN0cnVjdCBnZW5kaXNrICpnOwotCi0JLyogc3Ryc3RyKCJmb28iLCAiIikgaXMgbm9uLU5VTEwgKi8KLQlpZiAoIXN0cnN0cigiaWRlLWRpc2siLCBkcml2ZS0+ZHJpdmVyX3JlcSkpCi0JCWdvdG8gZmFpbGVkOwotCi0JaWYgKGRyaXZlLT5tZWRpYSAhPSBpZGVfZGlzaykKLQkJZ290byBmYWlsZWQ7Ci0KLQlpZGtwID0ga3phbGxvYyhzaXplb2YoKmlka3ApLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWlka3ApCi0JCWdvdG8gZmFpbGVkOwotCi0JZyA9IGFsbG9jX2Rpc2tfbm9kZShJREVfRElTS19NSU5PUlMsIGh3aWZfdG9fbm9kZShkcml2ZS0+aHdpZikpOwotCWlmICghZykKLQkJZ290byBvdXRfZnJlZV9pZGtwOwotCi0JaWRlX2luaXRfZGlzayhnLCBkcml2ZSk7Ci0KLQlrcmVmX2luaXQoJmlka3AtPmtyZWYpOwotCi0JaWRrcC0+ZHJpdmUgPSBkcml2ZTsKLQlpZGtwLT5kcml2ZXIgPSAmaWRlZGlza19kcml2ZXI7Ci0JaWRrcC0+ZGlzayA9IGc7Ci0KLQlnLT5wcml2YXRlX2RhdGEgPSAmaWRrcC0+ZHJpdmVyOwotCi0JZHJpdmUtPmRyaXZlcl9kYXRhID0gaWRrcDsKLQotCWlkZWRpc2tfc2V0dXAoZHJpdmUpOwotCWlmICgoIWRyaXZlLT5oZWFkIHx8IGRyaXZlLT5oZWFkID4gMTYpICYmICFkcml2ZS0+c2VsZWN0LmIubGJhKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IElOVkFMSUQgR0VPTUVUUlk6ICVkIFBIWVNJQ0FMIEhFQURTP1xuIiwKLQkJCWRyaXZlLT5uYW1lLCBkcml2ZS0+aGVhZCk7Ci0JCWRyaXZlLT5hdHRhY2ggPSAwOwotCX0gZWxzZQotCQlkcml2ZS0+YXR0YWNoID0gMTsKLQotCWctPm1pbm9ycyA9IElERV9ESVNLX01JTk9SUzsKLQlnLT5kcml2ZXJmc19kZXYgPSAmZHJpdmUtPmdlbmRldjsKLQlnLT5mbGFncyB8PSBHRU5IRF9GTF9FWFRfREVWVDsKLQlpZiAoZHJpdmUtPnJlbW92YWJsZSkKLQkJZy0+ZmxhZ3MgfD0gR0VOSERfRkxfUkVNT1ZBQkxFOwotCXNldF9jYXBhY2l0eShnLCBpZGVkaXNrX2NhcGFjaXR5KGRyaXZlKSk7Ci0JZy0+Zm9wcyA9ICZpZGVkaXNrX29wczsKLQlhZGRfZGlzayhnKTsKLQlyZXR1cm4gMDsKLQotb3V0X2ZyZWVfaWRrcDoKLQlrZnJlZShpZGtwKTsKLWZhaWxlZDoKLQlyZXR1cm4gLUVOT0RFVjsKLX0KLQotc3RhdGljIHZvaWQgX19leGl0IGlkZWRpc2tfZXhpdCh2b2lkKQotewotCWRyaXZlcl91bnJlZ2lzdGVyKCZpZGVkaXNrX2RyaXZlci5nZW5fZHJpdmVyKTsKLX0KLQotc3RhdGljIGludCBfX2luaXQgaWRlZGlza19pbml0KHZvaWQpCi17Ci0JcmV0dXJuIGRyaXZlcl9yZWdpc3RlcigmaWRlZGlza19kcml2ZXIuZ2VuX2RyaXZlcik7Ci19Ci0KLU1PRFVMRV9BTElBUygiaWRlOiptLWRpc2sqIik7Ci1tb2R1bGVfaW5pdChpZGVkaXNrX2luaXQpOwotbW9kdWxlX2V4aXQoaWRlZGlza19leGl0KTsKLU1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2lkZS1kaXNrLmggYi9kcml2ZXJzL2lkZS9pZGUtZGlzay5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIyMzRiMGYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2lkZS9pZGUtZGlzay5oCkBAIC0wLDAgKzEsMjkgQEAKKyNpZm5kZWYgX19JREVfRElTS19ICisjZGVmaW5lIF9fSURFX0RJU0tfSAorCisjaW5jbHVkZSAiaWRlLWdkLmgiCisKKyNpZmRlZiBDT05GSUdfSURFX0dEX0FUQQorLyogaWRlLWRpc2suYyAqLworZXh0ZXJuIGNvbnN0IHN0cnVjdCBpZGVfZGlza19vcHMgaWRlX2F0YV9kaXNrX29wczsKK2lkZV9kZWNsX2RldnNldChhZGRyZXNzKTsKK2lkZV9kZWNsX2RldnNldChtdWx0Y291bnQpOworaWRlX2RlY2xfZGV2c2V0KG5vd2Vycik7CitpZGVfZGVjbF9kZXZzZXQod2NhY2hlKTsKK2lkZV9kZWNsX2RldnNldChhY291c3RpYyk7CisKKy8qIGlkZS1kaXNrX2lvY3RsLmMgKi8KK2ludCBpZGVfZGlza19pb2N0bChpZGVfZHJpdmVfdCAqLCBzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGZpbGUgKiwgdW5zaWduZWQgaW50LAorCQkgICB1bnNpZ25lZCBsb25nKTsKKworI2lmZGVmIENPTkZJR19JREVfUFJPQ19GUworLyogaWRlLWRpc2tfcHJvYy5jICovCitleHRlcm4gaWRlX3Byb2NfZW50cnlfdCBpZGVfZGlza19wcm9jW107CitleHRlcm4gY29uc3Qgc3RydWN0IGlkZV9wcm9jX2RldnNldCBpZGVfZGlza19zZXR0aW5nc1tdOworI2VuZGlmCisjZWxzZQorI2RlZmluZSBpZGVfZGlza19wcm9jCQlOVUxMCisjZGVmaW5lIGlkZV9kaXNrX3NldHRpbmdzCU5VTEwKKyNlbmRpZgorCisjZW5kaWYgLyogX19JREVfRElTS19IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9pZGUtZGlza19pb2N0bC5jIGIvZHJpdmVycy9pZGUvaWRlLWRpc2tfaW9jdGwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNDk2OThiCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9pZGUvaWRlLWRpc2tfaW9jdGwuYwpAQCAtMCwwICsxLDI3IEBACisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaWRlLmg+CisjaW5jbHVkZSA8bGludXgvaGRyZWcuaD4KKworI2luY2x1ZGUgImlkZS1kaXNrLmgiCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaWRlX2lvY3RsX2RldnNldCBpZGVfZGlza19pb2N0bF9zZXR0aW5nc1tdID0geworeyBIRElPX0dFVF9BRERSRVNTLAlIRElPX1NFVF9BRERSRVNTLCAgICZpZGVfZGV2c2V0X2FkZHJlc3MgICB9LAoreyBIRElPX0dFVF9NVUxUQ09VTlQsCUhESU9fU0VUX01VTFRDT1VOVCwgJmlkZV9kZXZzZXRfbXVsdGNvdW50IH0sCit7IEhESU9fR0VUX05PV0VSUiwJSERJT19TRVRfTk9XRVJSLCAgICAmaWRlX2RldnNldF9ub3dlcnIJICB9LAoreyBIRElPX0dFVF9XQ0FDSEUsCUhESU9fU0VUX1dDQUNIRSwgICAgJmlkZV9kZXZzZXRfd2NhY2hlCSAgfSwKK3sgSERJT19HRVRfQUNPVVNUSUMsCUhESU9fU0VUX0FDT1VTVElDLCAgJmlkZV9kZXZzZXRfYWNvdXN0aWMgIH0sCit7IDAgfQorfTsKKworaW50IGlkZV9kaXNrX2lvY3RsKGlkZV9kcml2ZV90ICpkcml2ZSwgc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUsCisJCSAgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQoreworCXN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYgPSBpbm9kZS0+aV9iZGV2OworCWludCBlcnI7CisKKwllcnIgPSBpZGVfc2V0dGluZ19pb2N0bChkcml2ZSwgYmRldiwgY21kLCBhcmcsIGlkZV9kaXNrX2lvY3RsX3NldHRpbmdzKTsKKwlpZiAoZXJyICE9IC1FT1BOT1RTVVBQKQorCQlyZXR1cm4gZXJyOworCisJcmV0dXJuIGdlbmVyaWNfaWRlX2lvY3RsKGRyaXZlLCBmaWxlLCBiZGV2LCBjbWQsIGFyZyk7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9pZGUtZGlza19wcm9jLmMgYi9kcml2ZXJzL2lkZS9pZGUtZGlza19wcm9jLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTE0NmY0MgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvaWRlL2lkZS1kaXNrX3Byb2MuYwpAQCAtMCwwICsxLDEyOSBAQAorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2lkZS5oPgorI2luY2x1ZGUgPGxpbnV4L2hkcmVnLmg+CisKKyNpbmNsdWRlICJpZGUtZGlzay5oIgorCitzdGF0aWMgaW50IHNtYXJ0X2VuYWJsZShpZGVfZHJpdmVfdCAqZHJpdmUpCit7CisJaWRlX3Rhc2tfdCBhcmdzOworCXN0cnVjdCBpZGVfdGFza2ZpbGUgKnRmID0gJmFyZ3MudGY7CisKKwltZW1zZXQoJmFyZ3MsIDAsIHNpemVvZihpZGVfdGFza190KSk7CisJdGYtPmZlYXR1cmUgPSBBVEFfU01BUlRfRU5BQkxFOworCXRmLT5sYmFtICAgID0gQVRBX1NNQVJUX0xCQU1fUEFTUzsKKwl0Zi0+bGJhaCAgICA9IEFUQV9TTUFSVF9MQkFIX1BBU1M7CisJdGYtPmNvbW1hbmQgPSBBVEFfQ01EX1NNQVJUOworCWFyZ3MudGZfZmxhZ3MgPSBJREVfVEZMQUdfVEYgfCBJREVfVEZMQUdfREVWSUNFOworCXJldHVybiBpZGVfbm9fZGF0YV90YXNrZmlsZShkcml2ZSwgJmFyZ3MpOworfQorCitzdGF0aWMgaW50IGdldF9zbWFydF9kYXRhKGlkZV9kcml2ZV90ICpkcml2ZSwgdTggKmJ1ZiwgdTggc3ViX2NtZCkKK3sKKwlpZGVfdGFza190IGFyZ3M7CisJc3RydWN0IGlkZV90YXNrZmlsZSAqdGYgPSAmYXJncy50ZjsKKworCW1lbXNldCgmYXJncywgMCwgc2l6ZW9mKGlkZV90YXNrX3QpKTsKKwl0Zi0+ZmVhdHVyZSA9IHN1Yl9jbWQ7CisJdGYtPm5zZWN0ICAgPSAweDAxOworCXRmLT5sYmFtICAgID0gQVRBX1NNQVJUX0xCQU1fUEFTUzsKKwl0Zi0+bGJhaCAgICA9IEFUQV9TTUFSVF9MQkFIX1BBU1M7CisJdGYtPmNvbW1hbmQgPSBBVEFfQ01EX1NNQVJUOworCWFyZ3MudGZfZmxhZ3MJPSBJREVfVEZMQUdfVEYgfCBJREVfVEZMQUdfREVWSUNFOworCWFyZ3MuZGF0YV9waGFzZQk9IFRBU0tGSUxFX0lOOworCSh2b2lkKSBzbWFydF9lbmFibGUoZHJpdmUpOworCXJldHVybiBpZGVfcmF3X3Rhc2tmaWxlKGRyaXZlLCAmYXJncywgYnVmLCAxKTsKK30KKworc3RhdGljIGludCBwcm9jX2lkZWRpc2tfcmVhZF9jYWNoZQorCShjaGFyICpwYWdlLCBjaGFyICoqc3RhcnQsIG9mZl90IG9mZiwgaW50IGNvdW50LCBpbnQgKmVvZiwgdm9pZCAqZGF0YSkKK3sKKwlpZGVfZHJpdmVfdAkqZHJpdmUgPSAoaWRlX2RyaXZlX3QgKikgZGF0YTsKKwljaGFyCQkqb3V0ID0gcGFnZTsKKwlpbnQJCWxlbjsKKworCWlmIChkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX0lEX1JFQUQpCisJCWxlbiA9IHNwcmludGYob3V0LCAiJWlcbiIsIGRyaXZlLT5pZFtBVEFfSURfQlVGX1NJWkVdIC8gMik7CisJZWxzZQorCQlsZW4gPSBzcHJpbnRmKG91dCwgIihub25lKVxuIik7CisKKwlQUk9DX0lERV9SRUFEX1JFVFVSTihwYWdlLCBzdGFydCwgb2ZmLCBjb3VudCwgZW9mLCBsZW4pOworfQorCitzdGF0aWMgaW50IHByb2NfaWRlZGlza19yZWFkX2NhcGFjaXR5CisJKGNoYXIgKnBhZ2UsIGNoYXIgKipzdGFydCwgb2ZmX3Qgb2ZmLCBpbnQgY291bnQsIGludCAqZW9mLCB2b2lkICpkYXRhKQoreworCWlkZV9kcml2ZV90KmRyaXZlID0gKGlkZV9kcml2ZV90ICopZGF0YTsKKwlpbnQgbGVuOworCisJbGVuID0gc3ByaW50ZihwYWdlLCAiJWxsdVxuIiwgKGxvbmcgbG9uZylpZGVfZ2RfY2FwYWNpdHkoZHJpdmUpKTsKKworCVBST0NfSURFX1JFQURfUkVUVVJOKHBhZ2UsIHN0YXJ0LCBvZmYsIGNvdW50LCBlb2YsIGxlbik7Cit9CisKK3N0YXRpYyBpbnQgcHJvY19pZGVkaXNrX3JlYWRfc21hcnQoY2hhciAqcGFnZSwgY2hhciAqKnN0YXJ0LCBvZmZfdCBvZmYsCisJCQkJICAgaW50IGNvdW50LCBpbnQgKmVvZiwgdm9pZCAqZGF0YSwgdTggc3ViX2NtZCkKK3sKKwlpZGVfZHJpdmVfdAkqZHJpdmUgPSAoaWRlX2RyaXZlX3QgKilkYXRhOworCWludAkJbGVuID0gMCwgaSA9IDA7CisKKwlpZiAoZ2V0X3NtYXJ0X2RhdGEoZHJpdmUsIHBhZ2UsIHN1Yl9jbWQpID09IDApIHsKKwkJdW5zaWduZWQgc2hvcnQgKnZhbCA9ICh1bnNpZ25lZCBzaG9ydCAqKSBwYWdlOworCQljaGFyICpvdXQgPSAoY2hhciAqKXZhbCArIFNFQ1RPUl9TSVpFOworCisJCXBhZ2UgPSBvdXQ7CisJCWRvIHsKKwkJCW91dCArPSBzcHJpbnRmKG91dCwgIiUwNHglYyIsIGxlMTZfdG9fY3B1KCp2YWwpLAorCQkJCSAgICAgICAoKytpICYgNykgPyAnICcgOiAnXG4nKTsKKwkJCXZhbCArPSAxOworCQl9IHdoaWxlIChpIDwgU0VDVE9SX1NJWkUgLyAyKTsKKwkJbGVuID0gb3V0IC0gcGFnZTsKKwl9CisKKwlQUk9DX0lERV9SRUFEX1JFVFVSTihwYWdlLCBzdGFydCwgb2ZmLCBjb3VudCwgZW9mLCBsZW4pOworfQorCitzdGF0aWMgaW50IHByb2NfaWRlZGlza19yZWFkX3N2CisJKGNoYXIgKnBhZ2UsIGNoYXIgKipzdGFydCwgb2ZmX3Qgb2ZmLCBpbnQgY291bnQsIGludCAqZW9mLCB2b2lkICpkYXRhKQoreworCXJldHVybiBwcm9jX2lkZWRpc2tfcmVhZF9zbWFydChwYWdlLCBzdGFydCwgb2ZmLCBjb3VudCwgZW9mLCBkYXRhLAorCQkJCSAgICAgICBBVEFfU01BUlRfUkVBRF9WQUxVRVMpOworfQorCitzdGF0aWMgaW50IHByb2NfaWRlZGlza19yZWFkX3N0CisJKGNoYXIgKnBhZ2UsIGNoYXIgKipzdGFydCwgb2ZmX3Qgb2ZmLCBpbnQgY291bnQsIGludCAqZW9mLCB2b2lkICpkYXRhKQoreworCXJldHVybiBwcm9jX2lkZWRpc2tfcmVhZF9zbWFydChwYWdlLCBzdGFydCwgb2ZmLCBjb3VudCwgZW9mLCBkYXRhLAorCQkJCSAgICAgICBBVEFfU01BUlRfUkVBRF9USFJFU0hPTERTKTsKK30KKworaWRlX3Byb2NfZW50cnlfdCBpZGVfZGlza19wcm9jW10gPSB7CisJeyAiY2FjaGUiLAkgIFNfSUZSRUd8U19JUlVHTywgcHJvY19pZGVkaXNrX3JlYWRfY2FjaGUsICAgIE5VTEwgfSwKKwl7ICJjYXBhY2l0eSIsCSAgU19JRlJFR3xTX0lSVUdPLCBwcm9jX2lkZWRpc2tfcmVhZF9jYXBhY2l0eSwgTlVMTCB9LAorCXsgImdlb21ldHJ5IiwJICBTX0lGUkVHfFNfSVJVR08sIHByb2NfaWRlX3JlYWRfZ2VvbWV0cnksICAgICBOVUxMIH0sCisJeyAic21hcnRfdmFsdWVzIiwgU19JRlJFR3xTX0lSVVNSLCBwcm9jX2lkZWRpc2tfcmVhZF9zdiwgICAgICAgTlVMTCB9LAorCXsgInNtYXJ0X3RocmVzaG9sZHMiLCBTX0lGUkVHfFNfSVJVU1IsIHByb2NfaWRlZGlza19yZWFkX3N0LCAgIE5VTEwgfSwKKwl7IE5VTEwsIDAsIE5VTEwsIE5VTEwgfQorfTsKKworaWRlX2RldnNldF9yd19maWVsZChiaW9zX2N5bCwgYmlvc19jeWwpOworaWRlX2RldnNldF9yd19maWVsZChiaW9zX2hlYWQsIGJpb3NfaGVhZCk7CitpZGVfZGV2c2V0X3J3X2ZpZWxkKGJpb3Nfc2VjdCwgYmlvc19zZWN0KTsKK2lkZV9kZXZzZXRfcndfZmllbGQoZmFpbHVyZXMsIGZhaWx1cmVzKTsKK2lkZV9kZXZzZXRfcndfZmllbGQobHVuLCBsdW4pOworaWRlX2RldnNldF9yd19maWVsZChtYXhfZmFpbHVyZXMsIG1heF9mYWlsdXJlcyk7CisKK2NvbnN0IHN0cnVjdCBpZGVfcHJvY19kZXZzZXQgaWRlX2Rpc2tfc2V0dGluZ3NbXSA9IHsKKwlJREVfUFJPQ19ERVZTRVQoYWNvdXN0aWMsCTAsICAgMjU0KSwKKwlJREVfUFJPQ19ERVZTRVQoYWRkcmVzcywJMCwgICAgIDIpLAorCUlERV9QUk9DX0RFVlNFVChiaW9zX2N5bCwJMCwgNjU1MzUpLAorCUlERV9QUk9DX0RFVlNFVChiaW9zX2hlYWQsCTAsICAgMjU1KSwKKwlJREVfUFJPQ19ERVZTRVQoYmlvc19zZWN0LAkwLCAgICA2MyksCisJSURFX1BST0NfREVWU0VUKGZhaWx1cmVzLAkwLCA2NTUzNSksCisJSURFX1BST0NfREVWU0VUKGx1biwJCTAsICAgICA3KSwKKwlJREVfUFJPQ19ERVZTRVQobWF4X2ZhaWx1cmVzLAkwLCA2NTUzNSksCisJSURFX1BST0NfREVWU0VUKG11bHRjb3VudCwJMCwgICAgMTYpLAorCUlERV9QUk9DX0RFVlNFVChub3dlcnIsCQkwLCAgICAgMSksCisJSURFX1BST0NfREVWU0VUKHdjYWNoZSwJCTAsICAgICAxKSwKKwl7IDAgfSwKK307CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9pZGUtZG1hLXNmZi5jIGIvZHJpdmVycy9pZGUvaWRlLWRtYS1zZmYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYWM0MzFmCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9pZGUvaWRlLWRtYS1zZmYuYwpAQCAtMCwwICsxLDM1NiBAQAorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaWRlLmg+CisjaW5jbHVkZSA8bGludXgvc2NhdHRlcmxpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisKKy8qKgorICoJY29uZmlnX2RyaXZlX2Zvcl9kbWEJLQlhdHRlbXB0IHRvIGFjdGl2YXRlIElERSBETUEKKyAqCUBkcml2ZTogdGhlIGRyaXZlIHRvIHBsYWNlIGluIERNQSBtb2RlCisgKgorICoJSWYgdGhlIGRyaXZlIHN1cHBvcnRzIGF0IGxlYXN0IG1vZGUgMiBETUEgb3IgVURNQSBvZiBhbnkga2luZAorICoJdGhlbiBhdHRlbXB0IHRvIHBsYWNlIGl0IGludG8gRE1BIG1vZGUuIERyaXZlcyB0aGF0IGFyZSBrbm93biB0bworICoJc3VwcG9ydCBETUEgYnV0IHByZWRhdGUgdGhlIERNQSBwcm9wZXJ0aWVzIG9yIHRoYXQgYXJlIGtub3duCisgKgl0byBoYXZlIERNQSBoYW5kbGluZyBidWdzIGFyZSBhbHNvIHNldCB1cCBhcHByb3ByaWF0ZWx5IGJhc2VkCisgKglvbiB0aGUgZ29vZC9iYWQgZHJpdmUgbGlzdHMuCisgKi8KKworaW50IGNvbmZpZ19kcml2ZV9mb3JfZG1hKGlkZV9kcml2ZV90ICpkcml2ZSkKK3sKKwlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7CisJdTE2ICppZCA9IGRyaXZlLT5pZDsKKworCWlmIChkcml2ZS0+bWVkaWEgIT0gaWRlX2Rpc2spIHsKKwkJaWYgKGh3aWYtPmhvc3RfZmxhZ3MgJiBJREVfSEZMQUdfTk9fQVRBUElfRE1BKQorCQkJcmV0dXJuIDA7CisJfQorCisJLyoKKwkgKiBFbmFibGUgRE1BIG9uIGFueSBkcml2ZSB0aGF0IGhhcworCSAqIFVsdHJhRE1BIChtb2RlIDAvMS8yLzMvNC81LzYpIGVuYWJsZWQKKwkgKi8KKwlpZiAoKGlkW0FUQV9JRF9GSUVMRF9WQUxJRF0gJiA0KSAmJgorCSAgICAoKGlkW0FUQV9JRF9VRE1BX01PREVTXSA+PiA4KSAmIDB4N2YpKQorCQlyZXR1cm4gMTsKKworCS8qCisJICogRW5hYmxlIERNQSBvbiBhbnkgZHJpdmUgdGhhdCBoYXMgbW9kZTIgRE1BCisJICogKG11bHRpIG9yIHNpbmdsZSkgZW5hYmxlZAorCSAqLworCWlmIChpZFtBVEFfSURfRklFTERfVkFMSURdICYgMikJLyogcmVndWxhciBETUEgKi8KKwkJaWYgKChpZFtBVEFfSURfTVdETUFfTU9ERVNdICYgMHg0MDQpID09IDB4NDA0IHx8CisJCSAgICAoaWRbQVRBX0lEX1NXRE1BX01PREVTXSAmIDB4NDA0KSA9PSAweDQwNCkKKwkJCXJldHVybiAxOworCisJLyogQ29uc3VsdCB0aGUgbGlzdCBvZiBrbm93biAiZ29vZCIgZHJpdmVzICovCisJaWYgKGlkZV9kbWFfZ29vZF9kcml2ZShkcml2ZSkpCisJCXJldHVybiAxOworCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICoJaWRlX2RtYV9ob3N0X3NldAktCUVuYWJsZS9kaXNhYmxlIERNQSBvbiBhIGhvc3QKKyAqCUBkcml2ZTogZHJpdmUgdG8gY29udHJvbAorICoKKyAqCUVuYWJsZS9kaXNhYmxlIERNQSBvbiBhbiBJREUgY29udHJvbGxlciBmb2xsb3dpbmcgZ2VuZXJpYworICoJYnVzLW1hc3RlcmluZyBJREUgY29udHJvbGxlciBiZWhhdmlvdXIuCisgKi8KKwordm9pZCBpZGVfZG1hX2hvc3Rfc2V0KGlkZV9kcml2ZV90ICpkcml2ZSwgaW50IG9uKQoreworCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKKwl1OCB1bml0ID0gZHJpdmUtPmRuICYgMTsKKwl1OCBkbWFfc3RhdCA9IGh3aWYtPnRwX29wcy0+cmVhZF9zZmZfZG1hX3N0YXR1cyhod2lmKTsKKworCWlmIChvbikKKwkJZG1hX3N0YXQgfD0gKDEgPDwgKDUgKyB1bml0KSk7CisJZWxzZQorCQlkbWFfc3RhdCAmPSB+KDEgPDwgKDUgKyB1bml0KSk7CisKKwlpZiAoaHdpZi0+aG9zdF9mbGFncyAmIElERV9IRkxBR19NTUlPKQorCQl3cml0ZWIoZG1hX3N0YXQsCisJCSAgICAgICAodm9pZCBfX2lvbWVtICopKGh3aWYtPmRtYV9iYXNlICsgQVRBX0RNQV9TVEFUVVMpKTsKKwllbHNlCisJCW91dGIoZG1hX3N0YXQsIGh3aWYtPmRtYV9iYXNlICsgQVRBX0RNQV9TVEFUVVMpOworfQorRVhQT1JUX1NZTUJPTF9HUEwoaWRlX2RtYV9ob3N0X3NldCk7CisKKy8qKgorICoJaWRlX2J1aWxkX2RtYXRhYmxlCS0JYnVpbGQgSURFIERNQSB0YWJsZQorICoKKyAqCWlkZV9idWlsZF9kbWF0YWJsZSgpIHByZXBhcmVzIGEgZG1hIHJlcXVlc3QuIFdlIG1hcCB0aGUgY29tbWFuZAorICoJdG8gZ2V0IHRoZSBwY2kgYnVzIGFkZHJlc3NlcyBvZiB0aGUgYnVmZmVycyBhbmQgdGhlbiBidWlsZCB1cAorICoJdGhlIFBSRCB0YWJsZSB0aGF0IHRoZSBJREUgbGF5ZXIgd2FudHMgdG8gYmUgZmVkLgorICoKKyAqCU1vc3QgY2hpcHNldHMgY29ycmVjdGx5IGludGVycHJldCBhIGxlbmd0aCBvZiAweDAwMDAgYXMgNjRLQiwKKyAqCWJ1dCBhdCBsZWFzdCBvbmUgKGUuZy4gQ1M1NTMwKSBtaXNpbnRlcnByZXRzIGl0IGFzIHplcm8gKCEpLgorICoJU28gd2UgYnJlYWsgdGhlIDY0S0IgZW50cnkgaW50byB0d28gMzJLQiBlbnRyaWVzIGluc3RlYWQuCisgKgorICoJUmV0dXJucyB0aGUgbnVtYmVyIG9mIGJ1aWx0IFBSRCBlbnRyaWVzIGlmIGFsbCB3ZW50IG9rYXksCisgKglyZXR1cm5zIDAgb3RoZXJ3aXNlLgorICoKKyAqCU1heSBhbHNvIGJlIGludm9rZWQgZnJvbSB0cm0yOTAuYworICovCisKK2ludCBpZGVfYnVpbGRfZG1hdGFibGUoaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgcmVxdWVzdCAqcnEpCit7CisJaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOworCV9fbGUzMiAqdGFibGUgPSAoX19sZTMyICopaHdpZi0+ZG1hdGFibGVfY3B1OworCXVuc2lnbmVkIGludCBpc190cm0yOTAJPSAoaHdpZi0+Y2hpcHNldCA9PSBpZGVfdHJtMjkwKSA/IDEgOiAwOworCXVuc2lnbmVkIGludCBjb3VudCA9IDA7CisJaW50IGk7CisJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZzsKKworCWh3aWYtPnNnX25lbnRzID0gaWRlX2J1aWxkX3NnbGlzdChkcml2ZSwgcnEpOworCWlmIChod2lmLT5zZ19uZW50cyA9PSAwKQorCQlyZXR1cm4gMDsKKworCWZvcl9lYWNoX3NnKGh3aWYtPnNnX3RhYmxlLCBzZywgaHdpZi0+c2dfbmVudHMsIGkpIHsKKwkJdTMyIGN1cl9hZGRyLCBjdXJfbGVuLCB4Y291bnQsIGJjb3VudDsKKworCQljdXJfYWRkciA9IHNnX2RtYV9hZGRyZXNzKHNnKTsKKwkJY3VyX2xlbiA9IHNnX2RtYV9sZW4oc2cpOworCisJCS8qCisJCSAqIEZpbGwgaW4gdGhlIGRtYSB0YWJsZSwgd2l0aG91dCBjcm9zc2luZyBhbnkgNjRrQiBib3VuZGFyaWVzLgorCQkgKiBNb3N0IGhhcmR3YXJlIHJlcXVpcmVzIDE2LWJpdCBhbGlnbm1lbnQgb2YgYWxsIGJsb2NrcywKKwkJICogYnV0IHRoZSB0cm0yOTAgcmVxdWlyZXMgMzItYml0IGFsaWdubWVudC4KKwkJICovCisKKwkJd2hpbGUgKGN1cl9sZW4pIHsKKwkJCWlmIChjb3VudCsrID49IFBSRF9FTlRSSUVTKQorCQkJCWdvdG8gdXNlX3Bpb19pbnN0ZWFkOworCisJCQliY291bnQgPSAweDEwMDAwIC0gKGN1cl9hZGRyICYgMHhmZmZmKTsKKwkJCWlmIChiY291bnQgPiBjdXJfbGVuKQorCQkJCWJjb3VudCA9IGN1cl9sZW47CisJCQkqdGFibGUrKyA9IGNwdV90b19sZTMyKGN1cl9hZGRyKTsKKwkJCXhjb3VudCA9IGJjb3VudCAmIDB4ZmZmZjsKKwkJCWlmIChpc190cm0yOTApCisJCQkJeGNvdW50ID0gKCh4Y291bnQgPj4gMikgLSAxKSA8PCAxNjsKKwkJCWVsc2UgaWYgKHhjb3VudCA9PSAweDAwMDApIHsKKwkJCQlpZiAoY291bnQrKyA+PSBQUkRfRU5UUklFUykKKwkJCQkJZ290byB1c2VfcGlvX2luc3RlYWQ7CisJCQkJKnRhYmxlKysgPSBjcHVfdG9fbGUzMigweDgwMDApOworCQkJCSp0YWJsZSsrID0gY3B1X3RvX2xlMzIoY3VyX2FkZHIgKyAweDgwMDApOworCQkJCXhjb3VudCA9IDB4ODAwMDsKKwkJCX0KKwkJCSp0YWJsZSsrID0gY3B1X3RvX2xlMzIoeGNvdW50KTsKKwkJCWN1cl9hZGRyICs9IGJjb3VudDsKKwkJCWN1cl9sZW4gLT0gYmNvdW50OworCQl9CisJfQorCisJaWYgKGNvdW50KSB7CisJCWlmICghaXNfdHJtMjkwKQorCQkJKi0tdGFibGUgfD0gY3B1X3RvX2xlMzIoMHg4MDAwMDAwMCk7CisJCXJldHVybiBjb3VudDsKKwl9CisKK3VzZV9waW9faW5zdGVhZDoKKwlwcmludGsoS0VSTl9FUlIgIiVzOiAlc1xuIiwgZHJpdmUtPm5hbWUsCisJCWNvdW50ID8gIkRNQSB0YWJsZSB0b28gc21hbGwiIDogImVtcHR5IERNQSB0YWJsZT8iKTsKKworCWlkZV9kZXN0cm95X2RtYXRhYmxlKGRyaXZlKTsKKworCXJldHVybiAwOyAvKiByZXZlcnQgdG8gUElPIGZvciB0aGlzIHJlcXVlc3QgKi8KK30KK0VYUE9SVF9TWU1CT0xfR1BMKGlkZV9idWlsZF9kbWF0YWJsZSk7CisKKy8qKgorICoJaWRlX2RtYV9zZXR1cAktCWJlZ2luIGEgRE1BIHBoYXNlCisgKglAZHJpdmU6IHRhcmdldCBkZXZpY2UKKyAqCisgKglCdWlsZCBhbiBJREUgRE1BIFBSRCAoSURFIHNwZWFrIGZvciBzY2F0dGVyIGdhdGhlciB0YWJsZSkKKyAqCWFuZCB0aGVuIHNldCB1cCB0aGUgRE1BIHRyYW5zZmVyIHJlZ2lzdGVycyBmb3IgYSBkZXZpY2UKKyAqCXRoYXQgZm9sbG93cyBnZW5lcmljIElERSBQQ0kgRE1BIGJlaGF2aW91ci4gQ29udHJvbGxlcnMgY2FuCisgKglvdmVycmlkZSB0aGlzIGZ1bmN0aW9uIGlmIHRoZXkgbmVlZCB0bworICoKKyAqCVJldHVybnMgMCBvbiBzdWNjZXNzLiBJZiBhIFBJTyBmYWxsYmFjayBpcyByZXF1aXJlZCB0aGVuIDEKKyAqCWlzIHJldHVybmVkLgorICovCisKK2ludCBpZGVfZG1hX3NldHVwKGlkZV9kcml2ZV90ICpkcml2ZSkKK3sKKwlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7CisJc3RydWN0IHJlcXVlc3QgKnJxID0gaHdpZi0+aHdncm91cC0+cnE7CisJdW5zaWduZWQgaW50IHJlYWRpbmc7CisJdTggbW1pbyA9IChod2lmLT5ob3N0X2ZsYWdzICYgSURFX0hGTEFHX01NSU8pID8gMSA6IDA7CisJdTggZG1hX3N0YXQ7CisKKwlpZiAocnFfZGF0YV9kaXIocnEpKQorCQlyZWFkaW5nID0gMDsKKwllbHNlCisJCXJlYWRpbmcgPSAxIDw8IDM7CisKKwkvKiBmYWxsIGJhY2sgdG8gcGlvISAqLworCWlmICghaWRlX2J1aWxkX2RtYXRhYmxlKGRyaXZlLCBycSkpIHsKKwkJaWRlX21hcF9zZyhkcml2ZSwgcnEpOworCQlyZXR1cm4gMTsKKwl9CisKKwkvKiBQUkQgdGFibGUgKi8KKwlpZiAoaHdpZi0+aG9zdF9mbGFncyAmIElERV9IRkxBR19NTUlPKQorCQl3cml0ZWwoaHdpZi0+ZG1hdGFibGVfZG1hLAorCQkgICAgICAgKHZvaWQgX19pb21lbSAqKShod2lmLT5kbWFfYmFzZSArIEFUQV9ETUFfVEFCTEVfT0ZTKSk7CisJZWxzZQorCQlvdXRsKGh3aWYtPmRtYXRhYmxlX2RtYSwgaHdpZi0+ZG1hX2Jhc2UgKyBBVEFfRE1BX1RBQkxFX09GUyk7CisKKwkvKiBzcGVjaWZ5IHIvdyAqLworCWlmIChtbWlvKQorCQl3cml0ZWIocmVhZGluZywgKHZvaWQgX19pb21lbSAqKShod2lmLT5kbWFfYmFzZSArIEFUQV9ETUFfQ01EKSk7CisJZWxzZQorCQlvdXRiKHJlYWRpbmcsIGh3aWYtPmRtYV9iYXNlICsgQVRBX0RNQV9DTUQpOworCisJLyogcmVhZCBETUEgc3RhdHVzIGZvciBJTlRSICYgRVJST1IgZmxhZ3MgKi8KKwlkbWFfc3RhdCA9IGh3aWYtPnRwX29wcy0+cmVhZF9zZmZfZG1hX3N0YXR1cyhod2lmKTsKKworCS8qIGNsZWFyIElOVFIgJiBFUlJPUiBmbGFncyAqLworCWlmIChtbWlvKQorCQl3cml0ZWIoZG1hX3N0YXQgfCA2LAorCQkgICAgICAgKHZvaWQgX19pb21lbSAqKShod2lmLT5kbWFfYmFzZSArIEFUQV9ETUFfU1RBVFVTKSk7CisJZWxzZQorCQlvdXRiKGRtYV9zdGF0IHwgNiwgaHdpZi0+ZG1hX2Jhc2UgKyBBVEFfRE1BX1NUQVRVUyk7CisKKwlkcml2ZS0+d2FpdGluZ19mb3JfZG1hID0gMTsKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGlkZV9kbWFfc2V0dXApOworCisvKioKKyAqCWRtYV90aW1lcl9leHBpcnkJLQloYW5kbGUgYSBETUEgdGltZW91dAorICoJQGRyaXZlOiBEcml2ZSB0aGF0IHRpbWVkIG91dAorICoKKyAqCUFuIElERSBETUEgdHJhbnNmZXIgdGltZWQgb3V0LiBJbiB0aGUgZXZlbnQgb2YgYW4gZXJyb3Igd2UgYXNrCisgKgl0aGUgZHJpdmVyIHRvIHJlc29sdmUgdGhlIHByb2JsZW0sIGlmIGEgRE1BIHRyYW5zZmVyIGlzIHN0aWxsCisgKglpbiBwcm9ncmVzcyB3ZSBjb250aW51ZSB0byB3YWl0IChhcmd1YWJseSB3ZSBuZWVkIHRvIGFkZCBhCisgKglzZWNvbmRhcnkgJ0kgZG9uJ3QgY2FyZSB3aGF0IHRoZSBkcml2ZSB0aGlua3MnIHRpbWVvdXQgaGVyZSkKKyAqCUZpbmFsbHkgaWYgd2UgaGF2ZSBhbiBpbnRlcnJ1cHQgd2UgbGV0IGl0IGNvbXBsZXRlIHRoZSBJL08uCisgKglCdXQgb25seSBvbmUgdGltZSAtIHdlIGNsZWFyIGV4cGlyeSBhbmQgaWYgaXQncyBzdGlsbCBub3QKKyAqCWNvbXBsZXRlZCBhZnRlciBXQUlUX0NNRCwgd2UgZXJyb3IgYW5kIHJldHJ5IGluIFBJTy4KKyAqCVRoaXMgY2FuIG9jY3VyIGlmIGFuIGludGVycnVwdCBpcyBsb3N0IG9yIGR1ZSB0byBoYW5nIG9yIGJ1Z3MuCisgKi8KKworc3RhdGljIGludCBkbWFfdGltZXJfZXhwaXJ5KGlkZV9kcml2ZV90ICpkcml2ZSkKK3sKKwlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7CisJdTggZG1hX3N0YXQgPSBod2lmLT50cF9vcHMtPnJlYWRfc2ZmX2RtYV9zdGF0dXMoaHdpZik7CisKKwlwcmludGsoS0VSTl9XQVJOSU5HICIlczogJXM6IERNQSBzdGF0dXMgKDB4JTAyeClcbiIsCisJCWRyaXZlLT5uYW1lLCBfX2Z1bmNfXywgZG1hX3N0YXQpOworCisJaWYgKChkbWFfc3RhdCAmIDB4MTgpID09IDB4MTgpCS8qIEJVU1kgU3R1cGlkIEVhcmx5IFRpbWVyICEhICovCisJCXJldHVybiBXQUlUX0NNRDsKKworCWh3aWYtPmh3Z3JvdXAtPmV4cGlyeSA9IE5VTEw7CS8qIG9uZSBmcmVlIHJpZGUgZm9yIG5vdyAqLworCisJLyogMSBkbWFpbmcsIDIgZXJyb3IsIDQgaW50ciAqLworCWlmIChkbWFfc3RhdCAmIDIpCS8qIEVSUk9SICovCisJCXJldHVybiAtMTsKKworCWlmIChkbWFfc3RhdCAmIDEpCS8qIERNQWluZyAqLworCQlyZXR1cm4gV0FJVF9DTUQ7CisKKwlpZiAoZG1hX3N0YXQgJiA0KQkvKiBHb3QgYW4gSW50ZXJydXB0ICovCisJCXJldHVybiBXQUlUX0NNRDsKKworCXJldHVybiAwOwkvKiBTdGF0dXMgaXMgdW5rbm93biAtLSByZXNldCB0aGUgYnVzICovCit9CisKK3ZvaWQgaWRlX2RtYV9leGVjX2NtZChpZGVfZHJpdmVfdCAqZHJpdmUsIHU4IGNvbW1hbmQpCit7CisJLyogaXNzdWUgY21kIHRvIGRyaXZlICovCisJaWRlX2V4ZWN1dGVfY29tbWFuZChkcml2ZSwgY29tbWFuZCwgJmlkZV9kbWFfaW50ciwgMiAqIFdBSVRfQ01ELAorCQkJICAgIGRtYV90aW1lcl9leHBpcnkpOworfQorRVhQT1JUX1NZTUJPTF9HUEwoaWRlX2RtYV9leGVjX2NtZCk7CisKK3ZvaWQgaWRlX2RtYV9zdGFydChpZGVfZHJpdmVfdCAqZHJpdmUpCit7CisJaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOworCXU4IGRtYV9jbWQ7CisKKwkvKiBOb3RlIHRoYXQgdGhpcyBpcyBkb25lICphZnRlciogdGhlIGNtZCBoYXMKKwkgKiBiZWVuIGlzc3VlZCB0byB0aGUgZHJpdmUsIGFzIHBlciB0aGUgQk0tSURFIHNwZWMuCisJICogVGhlIFByb21pc2UgVWx0cmEzMyBkb2Vzbid0IHdvcmsgY29ycmVjdGx5IHdoZW4KKwkgKiB3ZSBkbyB0aGlzIHBhcnQgYmVmb3JlIGlzc3VpbmcgdGhlIGRyaXZlIGNtZC4KKwkgKi8KKwlpZiAoaHdpZi0+aG9zdF9mbGFncyAmIElERV9IRkxBR19NTUlPKSB7CisJCWRtYV9jbWQgPSByZWFkYigodm9pZCBfX2lvbWVtICopKGh3aWYtPmRtYV9iYXNlICsgQVRBX0RNQV9DTUQpKTsKKwkJLyogc3RhcnQgRE1BICovCisJCXdyaXRlYihkbWFfY21kIHwgMSwKKwkJICAgICAgICh2b2lkIF9faW9tZW0gKikoaHdpZi0+ZG1hX2Jhc2UgKyBBVEFfRE1BX0NNRCkpOworCX0gZWxzZSB7CisJCWRtYV9jbWQgPSBpbmIoaHdpZi0+ZG1hX2Jhc2UgKyBBVEFfRE1BX0NNRCk7CisJCW91dGIoZG1hX2NtZCB8IDEsIGh3aWYtPmRtYV9iYXNlICsgQVRBX0RNQV9DTUQpOworCX0KKworCXdtYigpOworfQorRVhQT1JUX1NZTUJPTF9HUEwoaWRlX2RtYV9zdGFydCk7CisKKy8qIHJldHVybnMgMSBvbiBlcnJvciwgMCBvdGhlcndpc2UgKi8KK2ludCBpZGVfZG1hX2VuZChpZGVfZHJpdmVfdCAqZHJpdmUpCit7CisJaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOworCXU4IG1taW8gPSAoaHdpZi0+aG9zdF9mbGFncyAmIElERV9IRkxBR19NTUlPKSA/IDEgOiAwOworCXU4IGRtYV9zdGF0ID0gMCwgZG1hX2NtZCA9IDA7CisKKwlkcml2ZS0+d2FpdGluZ19mb3JfZG1hID0gMDsKKworCWlmIChtbWlvKSB7CisJCS8qIGdldCBETUEgY29tbWFuZCBtb2RlICovCisJCWRtYV9jbWQgPSByZWFkYigodm9pZCBfX2lvbWVtICopKGh3aWYtPmRtYV9iYXNlICsgQVRBX0RNQV9DTUQpKTsKKwkJLyogc3RvcCBETUEgKi8KKwkJd3JpdGViKGRtYV9jbWQgJiB+MSwKKwkJICAgICAgICh2b2lkIF9faW9tZW0gKikoaHdpZi0+ZG1hX2Jhc2UgKyBBVEFfRE1BX0NNRCkpOworCX0gZWxzZSB7CisJCWRtYV9jbWQgPSBpbmIoaHdpZi0+ZG1hX2Jhc2UgKyBBVEFfRE1BX0NNRCk7CisJCW91dGIoZG1hX2NtZCAmIH4xLCBod2lmLT5kbWFfYmFzZSArIEFUQV9ETUFfQ01EKTsKKwl9CisKKwkvKiBnZXQgRE1BIHN0YXR1cyAqLworCWRtYV9zdGF0ID0gaHdpZi0+dHBfb3BzLT5yZWFkX3NmZl9kbWFfc3RhdHVzKGh3aWYpOworCisJaWYgKG1taW8pCisJCS8qIGNsZWFyIHRoZSBJTlRSICYgRVJST1IgYml0cyAqLworCQl3cml0ZWIoZG1hX3N0YXQgfCA2LAorCQkgICAgICAgKHZvaWQgX19pb21lbSAqKShod2lmLT5kbWFfYmFzZSArIEFUQV9ETUFfU1RBVFVTKSk7CisJZWxzZQorCQlvdXRiKGRtYV9zdGF0IHwgNiwgaHdpZi0+ZG1hX2Jhc2UgKyBBVEFfRE1BX1NUQVRVUyk7CisKKwkvKiBwdXJnZSBETUEgbWFwcGluZ3MgKi8KKwlpZGVfZGVzdHJveV9kbWF0YWJsZShkcml2ZSk7CisJLyogdmVyaWZ5IGdvb2QgRE1BIHN0YXR1cyAqLworCXdtYigpOworCXJldHVybiAoZG1hX3N0YXQgJiA3KSAhPSA0ID8gKDB4MTAgfCBkbWFfc3RhdCkgOiAwOworfQorRVhQT1JUX1NZTUJPTF9HUEwoaWRlX2RtYV9lbmQpOworCisvKiByZXR1cm5zIDEgaWYgZG1hIGlycSBpc3N1ZWQsIDAgb3RoZXJ3aXNlICovCitpbnQgaWRlX2RtYV90ZXN0X2lycShpZGVfZHJpdmVfdCAqZHJpdmUpCit7CisJaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOworCXU4IGRtYV9zdGF0ID0gaHdpZi0+dHBfb3BzLT5yZWFkX3NmZl9kbWFfc3RhdHVzKGh3aWYpOworCisJLyogcmV0dXJuIDEgaWYgSU5UUiBhc3NlcnRlZCAqLworCWlmICgoZG1hX3N0YXQgJiA0KSA9PSA0KQorCQlyZXR1cm4gMTsKKworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTF9HUEwoaWRlX2RtYV90ZXN0X2lycSk7CisKK2NvbnN0IHN0cnVjdCBpZGVfZG1hX29wcyBzZmZfZG1hX29wcyA9IHsKKwkuZG1hX2hvc3Rfc2V0CQk9IGlkZV9kbWFfaG9zdF9zZXQsCisJLmRtYV9zZXR1cAkJPSBpZGVfZG1hX3NldHVwLAorCS5kbWFfZXhlY19jbWQJCT0gaWRlX2RtYV9leGVjX2NtZCwKKwkuZG1hX3N0YXJ0CQk9IGlkZV9kbWFfc3RhcnQsCisJLmRtYV9lbmQJCT0gaWRlX2RtYV9lbmQsCisJLmRtYV90ZXN0X2lycQkJPSBpZGVfZG1hX3Rlc3RfaXJxLAorCS5kbWFfdGltZW91dAkJPSBpZGVfZG1hX3RpbWVvdXQsCisJLmRtYV9sb3N0X2lycQkJPSBpZGVfZG1hX2xvc3RfaXJxLAorfTsKK0VYUE9SVF9TWU1CT0xfR1BMKHNmZl9kbWFfb3BzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2lkZS1kbWEuYyBiL2RyaXZlcnMvaWRlL2lkZS1kbWEuYwppbmRleCBlZjJmMTUwLi5mZmZkMTE3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9pZGUtZG1hLmMKKysrIGIvZHJpdmVycy9pZGUvaWRlLWRtYS5jCkBAIC0yOCwyNCArMjgsMTMgQEAKICAqIGZvciBzdXBwbHlpbmcgYSBQcm9taXNlIFVETUEgYm9hcmQgJiBXRCBVRE1BIGRyaXZlIGZvciB0aGlzIHdvcmshCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvdGltZXIuaD4KLSNpbmNsdWRlIDxsaW51eC9tbS5oPgotI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgotI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9pZGUuaD4KLSNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L3NjYXR0ZXJsaXN0Lmg+CiAjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KIAotI2luY2x1ZGUgPGFzbS9pby5oPgotI2luY2x1ZGUgPGFzbS9pcnEuaD4KLQotc3RhdGljIGNvbnN0IHN0cnVjdCBkcml2ZV9saXN0X2VudHJ5IGRyaXZlX3doaXRlbGlzdCBbXSA9IHsKLQorc3RhdGljIGNvbnN0IHN0cnVjdCBkcml2ZV9saXN0X2VudHJ5IGRyaXZlX3doaXRlbGlzdFtdID0gewogCXsgIk1pY3JvcG9saXMgMjExMkEiCSwgICAgICAgTlVMTAkJfSwKIAl7ICJDT05ORVIgQ1RNQSA0MDAwIgksICAgICAgIE5VTEwJCX0sCiAJeyAiQ09OTkVSIENUVDgwMDAtQSIJLCAgICAgICBOVUxMCQl9LApAQCAtNTMsOCArNDIsNyBAQAogCXsgTlVMTAkJCSwJTlVMTAkJfQogfTsKIAotc3RhdGljIGNvbnN0IHN0cnVjdCBkcml2ZV9saXN0X2VudHJ5IGRyaXZlX2JsYWNrbGlzdCBbXSA9IHsKLQorc3RhdGljIGNvbnN0IHN0cnVjdCBkcml2ZV9saXN0X2VudHJ5IGRyaXZlX2JsYWNrbGlzdFtdID0gewogCXsgIldEQyBBQzExMDAwSCIJLAlOVUxMIAkJfSwKIAl7ICJXREMgQUMyMjEwMEgiCSwJTlVMTCAJCX0sCiAJeyAiV0RDIEFDMzI1MDBIIgksCU5VTEwgCQl9LApAQCAtOTQsMTEgKzgyLDExIEBACiAgKglpZGVfZG1hX2ludHIJLQlJREUgRE1BIGludGVycnVwdCBoYW5kbGVyCiAgKglAZHJpdmU6IHRoZSBkcml2ZSB0aGUgaW50ZXJydXB0IGlzIGZvcgogICoKLSAqCUhhbmRsZSBhbiBpbnRlcnJ1cHQgY29tcGxldGluZyBhIHJlYWQvd3JpdGUgRE1BIHRyYW5zZmVyIG9uIGFuIAorICoJSGFuZGxlIGFuIGludGVycnVwdCBjb21wbGV0aW5nIGEgcmVhZC93cml0ZSBETUEgdHJhbnNmZXIgb24gYW4KICAqCUlERSBkZXZpY2UKICAqLwotIAotaWRlX3N0YXJ0c3RvcF90IGlkZV9kbWFfaW50ciAoaWRlX2RyaXZlX3QgKmRyaXZlKQorCitpZGVfc3RhcnRzdG9wX3QgaWRlX2RtYV9pbnRyKGlkZV9kcml2ZV90ICpkcml2ZSkKIHsKIAlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7CiAJdTggc3RhdCA9IDAsIGRtYV9zdGF0ID0gMDsKQEAgLTEwOCwyMCArOTYsMTkgQEAKIAogCWlmIChPS19TVEFUKHN0YXQsIERSSVZFX1JFQURZLCBkcml2ZS0+YmFkX3dzdGF0IHwgQVRBX0RSUSkpIHsKIAkJaWYgKCFkbWFfc3RhdCkgewotCQkJc3RydWN0IHJlcXVlc3QgKnJxID0gSFdHUk9VUChkcml2ZSktPnJxOworCQkJc3RydWN0IHJlcXVlc3QgKnJxID0gaHdpZi0+aHdncm91cC0+cnE7CiAKIAkJCXRhc2tfZW5kX3JlcXVlc3QoZHJpdmUsIHJxLCBzdGF0KTsKIAkJCXJldHVybiBpZGVfc3RvcHBlZDsKIAkJfQotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBkbWFfaW50cjogYmFkIERNQSBzdGF0dXMgKGRtYV9zdGF0PSV4KVxuIiwgCi0JCSAgICAgICBkcml2ZS0+bmFtZSwgZG1hX3N0YXQpOworCQlwcmludGsoS0VSTl9FUlIgIiVzOiAlczogYmFkIERNQSBzdGF0dXMgKDB4JTAyeClcbiIsCisJCQlkcml2ZS0+bmFtZSwgX19mdW5jX18sIGRtYV9zdGF0KTsKIAl9CiAJcmV0dXJuIGlkZV9lcnJvcihkcml2ZSwgImRtYV9pbnRyIiwgc3RhdCk7CiB9Ci0KIEVYUE9SVF9TWU1CT0xfR1BMKGlkZV9kbWFfaW50cik7CiAKLXN0YXRpYyBpbnQgaWRlX2RtYV9nb29kX2RyaXZlKGlkZV9kcml2ZV90ICpkcml2ZSkKK2ludCBpZGVfZG1hX2dvb2RfZHJpdmUoaWRlX2RyaXZlX3QgKmRyaXZlKQogewogCXJldHVybiBpZGVfaW5fZHJpdmVfbGlzdChkcml2ZS0+aWQsIGRyaXZlX3doaXRlbGlzdCk7CiB9CkBAIC0xMzksNyArMTI2LDcgQEAKIAogaW50IGlkZV9idWlsZF9zZ2xpc3QoaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgcmVxdWVzdCAqcnEpCiB7Ci0JaWRlX2h3aWZfdCAqaHdpZiA9IEhXSUYoZHJpdmUpOworCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKIAlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnID0gaHdpZi0+c2dfdGFibGU7CiAKIAlpZGVfbWFwX3NnKGRyaXZlLCBycSk7CkBAIC0xNTIsMTA2ICsxMzksOCBAQAogCXJldHVybiBkbWFfbWFwX3NnKGh3aWYtPmRldiwgc2csIGh3aWYtPnNnX25lbnRzLAogCQkJICBod2lmLT5zZ19kbWFfZGlyZWN0aW9uKTsKIH0KLQogRVhQT1JUX1NZTUJPTF9HUEwoaWRlX2J1aWxkX3NnbGlzdCk7CiAKLSNpZmRlZiBDT05GSUdfQkxLX0RFVl9JREVETUFfU0ZGCi0vKioKLSAqCWlkZV9idWlsZF9kbWF0YWJsZQktCWJ1aWxkIElERSBETUEgdGFibGUKLSAqCi0gKglpZGVfYnVpbGRfZG1hdGFibGUoKSBwcmVwYXJlcyBhIGRtYSByZXF1ZXN0LiBXZSBtYXAgdGhlIGNvbW1hbmQKLSAqCXRvIGdldCB0aGUgcGNpIGJ1cyBhZGRyZXNzZXMgb2YgdGhlIGJ1ZmZlcnMgYW5kIHRoZW4gYnVpbGQgdXAKLSAqCXRoZSBQUkQgdGFibGUgdGhhdCB0aGUgSURFIGxheWVyIHdhbnRzIHRvIGJlIGZlZC4gVGhlIGNvZGUKLSAqCWtub3dzIGFib3V0IHRoZSA2NEsgd3JhcCBidWcgaW4gdGhlIENTNTUzMC4KLSAqCi0gKglSZXR1cm5zIHRoZSBudW1iZXIgb2YgYnVpbHQgUFJEIGVudHJpZXMgaWYgYWxsIHdlbnQgb2theSwKLSAqCXJldHVybnMgMCBvdGhlcndpc2UuCi0gKgotICoJTWF5IGFsc28gYmUgaW52b2tlZCBmcm9tIHRybTI5MC5jCi0gKi8KLSAKLWludCBpZGVfYnVpbGRfZG1hdGFibGUgKGlkZV9kcml2ZV90ICpkcml2ZSwgc3RydWN0IHJlcXVlc3QgKnJxKQotewotCWlkZV9od2lmX3QgKmh3aWYJPSBIV0lGKGRyaXZlKTsKLQlfX2xlMzIgKnRhYmxlID0gKF9fbGUzMiAqKWh3aWYtPmRtYXRhYmxlX2NwdTsKLQl1bnNpZ25lZCBpbnQgaXNfdHJtMjkwCT0gKGh3aWYtPmNoaXBzZXQgPT0gaWRlX3RybTI5MCkgPyAxIDogMDsKLQl1bnNpZ25lZCBpbnQgY291bnQgPSAwOwotCWludCBpOwotCXN0cnVjdCBzY2F0dGVybGlzdCAqc2c7Ci0KLQlod2lmLT5zZ19uZW50cyA9IGkgPSBpZGVfYnVpbGRfc2dsaXN0KGRyaXZlLCBycSk7Ci0KLQlpZiAoIWkpCi0JCXJldHVybiAwOwotCi0Jc2cgPSBod2lmLT5zZ190YWJsZTsKLQl3aGlsZSAoaSkgewotCQl1MzIgY3VyX2FkZHI7Ci0JCXUzMiBjdXJfbGVuOwotCi0JCWN1cl9hZGRyID0gc2dfZG1hX2FkZHJlc3Moc2cpOwotCQljdXJfbGVuID0gc2dfZG1hX2xlbihzZyk7Ci0KLQkJLyoKLQkJICogRmlsbCBpbiB0aGUgZG1hIHRhYmxlLCB3aXRob3V0IGNyb3NzaW5nIGFueSA2NGtCIGJvdW5kYXJpZXMuCi0JCSAqIE1vc3QgaGFyZHdhcmUgcmVxdWlyZXMgMTYtYml0IGFsaWdubWVudCBvZiBhbGwgYmxvY2tzLAotCQkgKiBidXQgdGhlIHRybTI5MCByZXF1aXJlcyAzMi1iaXQgYWxpZ25tZW50LgotCQkgKi8KLQotCQl3aGlsZSAoY3VyX2xlbikgewotCQkJaWYgKGNvdW50KysgPj0gUFJEX0VOVFJJRVMpIHsKLQkJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBETUEgdGFibGUgdG9vIHNtYWxsXG4iLCBkcml2ZS0+bmFtZSk7Ci0JCQkJZ290byB1c2VfcGlvX2luc3RlYWQ7Ci0JCQl9IGVsc2UgewotCQkJCXUzMiB4Y291bnQsIGJjb3VudCA9IDB4MTAwMDAgLSAoY3VyX2FkZHIgJiAweGZmZmYpOwotCi0JCQkJaWYgKGJjb3VudCA+IGN1cl9sZW4pCi0JCQkJCWJjb3VudCA9IGN1cl9sZW47Ci0JCQkJKnRhYmxlKysgPSBjcHVfdG9fbGUzMihjdXJfYWRkcik7Ci0JCQkJeGNvdW50ID0gYmNvdW50ICYgMHhmZmZmOwotCQkJCWlmIChpc190cm0yOTApCi0JCQkJCXhjb3VudCA9ICgoeGNvdW50ID4+IDIpIC0gMSkgPDwgMTY7Ci0JCQkJZWxzZSBpZiAoeGNvdW50ID09IDB4MDAwMCkgewotCS8qIAotCSAqIE1vc3QgY2hpcHNldHMgY29ycmVjdGx5IGludGVycHJldCBhIGxlbmd0aCBvZiAweDAwMDAgYXMgNjRLQiwKLQkgKiBidXQgYXQgbGVhc3Qgb25lIChlLmcuIENTNTUzMCkgbWlzaW50ZXJwcmV0cyBpdCBhcyB6ZXJvICghKS4KLQkgKiBTbyBoZXJlIHdlIGJyZWFrIHRoZSA2NEtCIGVudHJ5IGludG8gdHdvIDMyS0IgZW50cmllcyBpbnN0ZWFkLgotCSAqLwotCQkJCQlpZiAoY291bnQrKyA+PSBQUkRfRU5UUklFUykgewotCQkJCQkJcHJpbnRrKEtFUk5fRVJSICIlczogRE1BIHRhYmxlIHRvbyBzbWFsbFxuIiwgZHJpdmUtPm5hbWUpOwotCQkJCQkJZ290byB1c2VfcGlvX2luc3RlYWQ7Ci0JCQkJCX0KLQkJCQkJKnRhYmxlKysgPSBjcHVfdG9fbGUzMigweDgwMDApOwotCQkJCQkqdGFibGUrKyA9IGNwdV90b19sZTMyKGN1cl9hZGRyICsgMHg4MDAwKTsKLQkJCQkJeGNvdW50ID0gMHg4MDAwOwotCQkJCX0KLQkJCQkqdGFibGUrKyA9IGNwdV90b19sZTMyKHhjb3VudCk7Ci0JCQkJY3VyX2FkZHIgKz0gYmNvdW50OwotCQkJCWN1cl9sZW4gLT0gYmNvdW50OwotCQkJfQotCQl9Ci0KLQkJc2cgPSBzZ19uZXh0KHNnKTsKLQkJaS0tOwotCX0KLQotCWlmIChjb3VudCkgewotCQlpZiAoIWlzX3RybTI5MCkKLQkJCSotLXRhYmxlIHw9IGNwdV90b19sZTMyKDB4ODAwMDAwMDApOwotCQlyZXR1cm4gY291bnQ7Ci0JfQotCi0JcHJpbnRrKEtFUk5fRVJSICIlczogZW1wdHkgRE1BIHRhYmxlP1xuIiwgZHJpdmUtPm5hbWUpOwotCi11c2VfcGlvX2luc3RlYWQ6Ci0JaWRlX2Rlc3Ryb3lfZG1hdGFibGUoZHJpdmUpOwotCi0JcmV0dXJuIDA7IC8qIHJldmVydCB0byBQSU8gZm9yIHRoaXMgcmVxdWVzdCAqLwotfQotCi1FWFBPUlRfU1lNQk9MX0dQTChpZGVfYnVpbGRfZG1hdGFibGUpOwotI2VuZGlmCi0KIC8qKgogICoJaWRlX2Rlc3Ryb3lfZG1hdGFibGUJLQljbGVhbiB1cCBETUEgbWFwcGluZwogICoJQGRyaXZlOiBUaGUgZHJpdmUgdG8gdW5tYXAKQEAgLTI2MiwxNDcgKzE1MSwzMCBAQAogICoJYW4gb29wcyBhcyBvbmx5IG9uZSBtYXBwaW5nIGNhbiBiZSBsaXZlIGZvciBlYWNoIHRhcmdldCBhdCBhIGdpdmVuCiAgKgl0aW1lLgogICovCi0gCi12b2lkIGlkZV9kZXN0cm95X2RtYXRhYmxlIChpZGVfZHJpdmVfdCAqZHJpdmUpCisKK3ZvaWQgaWRlX2Rlc3Ryb3lfZG1hdGFibGUoaWRlX2RyaXZlX3QgKmRyaXZlKQogewogCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKIAogCWRtYV91bm1hcF9zZyhod2lmLT5kZXYsIGh3aWYtPnNnX3RhYmxlLCBod2lmLT5zZ19uZW50cywKIAkJICAgICBod2lmLT5zZ19kbWFfZGlyZWN0aW9uKTsKIH0KLQogRVhQT1JUX1NZTUJPTF9HUEwoaWRlX2Rlc3Ryb3lfZG1hdGFibGUpOwogCi0jaWZkZWYgQ09ORklHX0JMS19ERVZfSURFRE1BX1NGRgotLyoqCi0gKgljb25maWdfZHJpdmVfZm9yX2RtYQktCWF0dGVtcHQgdG8gYWN0aXZhdGUgSURFIERNQQotICoJQGRyaXZlOiB0aGUgZHJpdmUgdG8gcGxhY2UgaW4gRE1BIG1vZGUKLSAqCi0gKglJZiB0aGUgZHJpdmUgc3VwcG9ydHMgYXQgbGVhc3QgbW9kZSAyIERNQSBvciBVRE1BIG9mIGFueSBraW5kCi0gKgl0aGVuIGF0dGVtcHQgdG8gcGxhY2UgaXQgaW50byBETUEgbW9kZS4gRHJpdmVzIHRoYXQgYXJlIGtub3duIHRvCi0gKglzdXBwb3J0IERNQSBidXQgcHJlZGF0ZSB0aGUgRE1BIHByb3BlcnRpZXMgb3IgdGhhdCBhcmUga25vd24KLSAqCXRvIGhhdmUgRE1BIGhhbmRsaW5nIGJ1Z3MgYXJlIGFsc28gc2V0IHVwIGFwcHJvcHJpYXRlbHkgYmFzZWQKLSAqCW9uIHRoZSBnb29kL2JhZCBkcml2ZSBsaXN0cy4KLSAqLwotIAotc3RhdGljIGludCBjb25maWdfZHJpdmVfZm9yX2RtYSAoaWRlX2RyaXZlX3QgKmRyaXZlKQotewotCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKLQl1MTYgKmlkID0gZHJpdmUtPmlkOwotCi0JaWYgKGRyaXZlLT5tZWRpYSAhPSBpZGVfZGlzaykgewotCQlpZiAoaHdpZi0+aG9zdF9mbGFncyAmIElERV9IRkxBR19OT19BVEFQSV9ETUEpCi0JCQlyZXR1cm4gMDsKLQl9Ci0KLQkvKgotCSAqIEVuYWJsZSBETUEgb24gYW55IGRyaXZlIHRoYXQgaGFzCi0JICogVWx0cmFETUEgKG1vZGUgMC8xLzIvMy80LzUvNikgZW5hYmxlZAotCSAqLwotCWlmICgoaWRbQVRBX0lEX0ZJRUxEX1ZBTElEXSAmIDQpICYmCi0JICAgICgoaWRbQVRBX0lEX1VETUFfTU9ERVNdID4+IDgpICYgMHg3ZikpCi0JCXJldHVybiAxOwotCi0JLyoKLQkgKiBFbmFibGUgRE1BIG9uIGFueSBkcml2ZSB0aGF0IGhhcyBtb2RlMiBETUEKLQkgKiAobXVsdGkgb3Igc2luZ2xlKSBlbmFibGVkCi0JICovCi0JaWYgKGlkW0FUQV9JRF9GSUVMRF9WQUxJRF0gJiAyKQkvKiByZWd1bGFyIERNQSAqLwotCQlpZiAoKGlkW0FUQV9JRF9NV0RNQV9NT0RFU10gJiAweDQwNCkgPT0gMHg0MDQgfHwKLQkJICAgIChpZFtBVEFfSURfU1dETUFfTU9ERVNdICYgMHg0MDQpID09IDB4NDA0KQotCQkJcmV0dXJuIDE7Ci0KLQkvKiBDb25zdWx0IHRoZSBsaXN0IG9mIGtub3duICJnb29kIiBkcml2ZXMgKi8KLQlpZiAoaWRlX2RtYV9nb29kX2RyaXZlKGRyaXZlKSkKLQkJcmV0dXJuIDE7Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyoqCi0gKglkbWFfdGltZXJfZXhwaXJ5CS0JaGFuZGxlIGEgRE1BIHRpbWVvdXQKLSAqCUBkcml2ZTogRHJpdmUgdGhhdCB0aW1lZCBvdXQKLSAqCi0gKglBbiBJREUgRE1BIHRyYW5zZmVyIHRpbWVkIG91dC4gSW4gdGhlIGV2ZW50IG9mIGFuIGVycm9yIHdlIGFzawotICoJdGhlIGRyaXZlciB0byByZXNvbHZlIHRoZSBwcm9ibGVtLCBpZiBhIERNQSB0cmFuc2ZlciBpcyBzdGlsbAotICoJaW4gcHJvZ3Jlc3Mgd2UgY29udGludWUgdG8gd2FpdCAoYXJndWFibHkgd2UgbmVlZCB0byBhZGQgYSAKLSAqCXNlY29uZGFyeSAnSSBkb24ndCBjYXJlIHdoYXQgdGhlIGRyaXZlIHRoaW5rcycgdGltZW91dCBoZXJlKQotICoJRmluYWxseSBpZiB3ZSBoYXZlIGFuIGludGVycnVwdCB3ZSBsZXQgaXQgY29tcGxldGUgdGhlIEkvTy4KLSAqCUJ1dCBvbmx5IG9uZSB0aW1lIC0gd2UgY2xlYXIgZXhwaXJ5IGFuZCBpZiBpdCdzIHN0aWxsIG5vdAotICoJY29tcGxldGVkIGFmdGVyIFdBSVRfQ01ELCB3ZSBlcnJvciBhbmQgcmV0cnkgaW4gUElPLgotICoJVGhpcyBjYW4gb2NjdXIgaWYgYW4gaW50ZXJydXB0IGlzIGxvc3Qgb3IgZHVlIHRvIGhhbmcgb3IgYnVncy4KLSAqLwotIAotc3RhdGljIGludCBkbWFfdGltZXJfZXhwaXJ5IChpZGVfZHJpdmVfdCAqZHJpdmUpCi17Ci0JaWRlX2h3aWZfdCAqaHdpZgk9IEhXSUYoZHJpdmUpOwotCXU4IGRtYV9zdGF0CQk9IGh3aWYtPnRwX29wcy0+cmVhZF9zZmZfZG1hX3N0YXR1cyhod2lmKTsKLQotCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBkbWFfdGltZXJfZXhwaXJ5OiBkbWEgc3RhdHVzID09IDB4JTAyeFxuIiwKLQkJZHJpdmUtPm5hbWUsIGRtYV9zdGF0KTsKLQotCWlmICgoZG1hX3N0YXQgJiAweDE4KSA9PSAweDE4KQkvKiBCVVNZIFN0dXBpZCBFYXJseSBUaW1lciAhISAqLwotCQlyZXR1cm4gV0FJVF9DTUQ7Ci0KLQlIV0dST1VQKGRyaXZlKS0+ZXhwaXJ5ID0gTlVMTDsJLyogb25lIGZyZWUgcmlkZSBmb3Igbm93ICovCi0KLQkvKiAxIGRtYWluZywgMiBlcnJvciwgNCBpbnRyICovCi0JaWYgKGRtYV9zdGF0ICYgMikJLyogRVJST1IgKi8KLQkJcmV0dXJuIC0xOwotCi0JaWYgKGRtYV9zdGF0ICYgMSkJLyogRE1BaW5nICovCi0JCXJldHVybiBXQUlUX0NNRDsKLQotCWlmIChkbWFfc3RhdCAmIDQpCS8qIEdvdCBhbiBJbnRlcnJ1cHQgKi8KLQkJcmV0dXJuIFdBSVRfQ01EOwotCi0JcmV0dXJuIDA7CS8qIFN0YXR1cyBpcyB1bmtub3duIC0tIHJlc2V0IHRoZSBidXMgKi8KLX0KLQotLyoqCi0gKglpZGVfZG1hX2hvc3Rfc2V0CS0JRW5hYmxlL2Rpc2FibGUgRE1BIG9uIGEgaG9zdAotICoJQGRyaXZlOiBkcml2ZSB0byBjb250cm9sCi0gKgotICoJRW5hYmxlL2Rpc2FibGUgRE1BIG9uIGFuIElERSBjb250cm9sbGVyIGZvbGxvd2luZyBnZW5lcmljCi0gKglidXMtbWFzdGVyaW5nIElERSBjb250cm9sbGVyIGJlaGF2aW91ci4KLSAqLwotCi12b2lkIGlkZV9kbWFfaG9zdF9zZXQoaWRlX2RyaXZlX3QgKmRyaXZlLCBpbnQgb24pCi17Ci0JaWRlX2h3aWZfdCAqaHdpZgk9IEhXSUYoZHJpdmUpOwotCXU4IHVuaXQJCQk9IChkcml2ZS0+c2VsZWN0LmIudW5pdCAmIDB4MDEpOwotCXU4IGRtYV9zdGF0CQk9IGh3aWYtPnRwX29wcy0+cmVhZF9zZmZfZG1hX3N0YXR1cyhod2lmKTsKLQotCWlmIChvbikKLQkJZG1hX3N0YXQgfD0gKDEgPDwgKDUgKyB1bml0KSk7Ci0JZWxzZQotCQlkbWFfc3RhdCAmPSB+KDEgPDwgKDUgKyB1bml0KSk7Ci0KLQlpZiAoaHdpZi0+aG9zdF9mbGFncyAmIElERV9IRkxBR19NTUlPKQotCQl3cml0ZWIoZG1hX3N0YXQsCi0JCSAgICAgICAodm9pZCBfX2lvbWVtICopKGh3aWYtPmRtYV9iYXNlICsgQVRBX0RNQV9TVEFUVVMpKTsKLQllbHNlCi0JCW91dGIoZG1hX3N0YXQsIGh3aWYtPmRtYV9iYXNlICsgQVRBX0RNQV9TVEFUVVMpOwotfQotCi1FWFBPUlRfU1lNQk9MX0dQTChpZGVfZG1hX2hvc3Rfc2V0KTsKLSNlbmRpZiAvKiBDT05GSUdfQkxLX0RFVl9JREVETUFfU0ZGICAqLwotCiAvKioKICAqCWlkZV9kbWFfb2ZmX3F1aWV0bHkJLQlHZW5lcmljIERNQSBraWxsCiAgKglAZHJpdmU6IGRyaXZlIHRvIGNvbnRyb2wKICAqCi0gKglUdXJuIG9mZiB0aGUgY3VycmVudCBETUEgb24gdGhpcyBJREUgY29udHJvbGxlci4gCisgKglUdXJuIG9mZiB0aGUgY3VycmVudCBETUEgb24gdGhpcyBJREUgY29udHJvbGxlci4KICAqLwogCiB2b2lkIGlkZV9kbWFfb2ZmX3F1aWV0bHkoaWRlX2RyaXZlX3QgKmRyaXZlKQogewotCWRyaXZlLT51c2luZ19kbWEgPSAwOworCWRyaXZlLT5kZXZfZmxhZ3MgJj0gfklERV9ERkxBR19VU0lOR19ETUE7CiAJaWRlX3RvZ2dsZV9ib3VuY2UoZHJpdmUsIDApOwogCiAJZHJpdmUtPmh3aWYtPmRtYV9vcHMtPmRtYV9ob3N0X3NldChkcml2ZSwgMCk7CiB9Ci0KIEVYUE9SVF9TWU1CT0woaWRlX2RtYV9vZmZfcXVpZXRseSk7CiAKIC8qKgpAQCAtNDE4LDcgKzE5MCw2IEBACiAJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IERNQSBkaXNhYmxlZFxuIiwgZHJpdmUtPm5hbWUpOwogCWlkZV9kbWFfb2ZmX3F1aWV0bHkoZHJpdmUpOwogfQotCiBFWFBPUlRfU1lNQk9MKGlkZV9kbWFfb2ZmKTsKIAogLyoqCkBAIC00MzAsMTY3ICsyMDEsMTMgQEAKIAogdm9pZCBpZGVfZG1hX29uKGlkZV9kcml2ZV90ICpkcml2ZSkKIHsKLQlkcml2ZS0+dXNpbmdfZG1hID0gMTsKKwlkcml2ZS0+ZGV2X2ZsYWdzIHw9IElERV9ERkxBR19VU0lOR19ETUE7CiAJaWRlX3RvZ2dsZV9ib3VuY2UoZHJpdmUsIDEpOwogCiAJZHJpdmUtPmh3aWYtPmRtYV9vcHMtPmRtYV9ob3N0X3NldChkcml2ZSwgMSk7CiB9CiAKLSNpZmRlZiBDT05GSUdfQkxLX0RFVl9JREVETUFfU0ZGCi0vKioKLSAqCWlkZV9kbWFfc2V0dXAJLQliZWdpbiBhIERNQSBwaGFzZQotICoJQGRyaXZlOiB0YXJnZXQgZGV2aWNlCi0gKgotICoJQnVpbGQgYW4gSURFIERNQSBQUkQgKElERSBzcGVhayBmb3Igc2NhdHRlciBnYXRoZXIgdGFibGUpCi0gKglhbmQgdGhlbiBzZXQgdXAgdGhlIERNQSB0cmFuc2ZlciByZWdpc3RlcnMgZm9yIGEgZGV2aWNlCi0gKgl0aGF0IGZvbGxvd3MgZ2VuZXJpYyBJREUgUENJIERNQSBiZWhhdmlvdXIuIENvbnRyb2xsZXJzIGNhbgotICoJb3ZlcnJpZGUgdGhpcyBmdW5jdGlvbiBpZiB0aGV5IG5lZWQgdG8KLSAqCi0gKglSZXR1cm5zIDAgb24gc3VjY2Vzcy4gSWYgYSBQSU8gZmFsbGJhY2sgaXMgcmVxdWlyZWQgdGhlbiAxCi0gKglpcyByZXR1cm5lZC4gCi0gKi8KLQotaW50IGlkZV9kbWFfc2V0dXAoaWRlX2RyaXZlX3QgKmRyaXZlKQotewotCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKLQlzdHJ1Y3QgcmVxdWVzdCAqcnEgPSBIV0dST1VQKGRyaXZlKS0+cnE7Ci0JdW5zaWduZWQgaW50IHJlYWRpbmc7Ci0JdTggbW1pbyA9IChod2lmLT5ob3N0X2ZsYWdzICYgSURFX0hGTEFHX01NSU8pID8gMSA6IDA7Ci0JdTggZG1hX3N0YXQ7Ci0KLQlpZiAocnFfZGF0YV9kaXIocnEpKQotCQlyZWFkaW5nID0gMDsKLQllbHNlCi0JCXJlYWRpbmcgPSAxIDw8IDM7Ci0KLQkvKiBmYWxsIGJhY2sgdG8gcGlvISAqLwotCWlmICghaWRlX2J1aWxkX2RtYXRhYmxlKGRyaXZlLCBycSkpIHsKLQkJaWRlX21hcF9zZyhkcml2ZSwgcnEpOwotCQlyZXR1cm4gMTsKLQl9Ci0KLQkvKiBQUkQgdGFibGUgKi8KLQlpZiAoaHdpZi0+aG9zdF9mbGFncyAmIElERV9IRkxBR19NTUlPKQotCQl3cml0ZWwoaHdpZi0+ZG1hdGFibGVfZG1hLAotCQkgICAgICAgKHZvaWQgX19pb21lbSAqKShod2lmLT5kbWFfYmFzZSArIEFUQV9ETUFfVEFCTEVfT0ZTKSk7Ci0JZWxzZQotCQlvdXRsKGh3aWYtPmRtYXRhYmxlX2RtYSwgaHdpZi0+ZG1hX2Jhc2UgKyBBVEFfRE1BX1RBQkxFX09GUyk7Ci0KLQkvKiBzcGVjaWZ5IHIvdyAqLwotCWlmIChtbWlvKQotCQl3cml0ZWIocmVhZGluZywgKHZvaWQgX19pb21lbSAqKShod2lmLT5kbWFfYmFzZSArIEFUQV9ETUFfQ01EKSk7Ci0JZWxzZQotCQlvdXRiKHJlYWRpbmcsIGh3aWYtPmRtYV9iYXNlICsgQVRBX0RNQV9DTUQpOwotCi0JLyogcmVhZCBETUEgc3RhdHVzIGZvciBJTlRSICYgRVJST1IgZmxhZ3MgKi8KLQlkbWFfc3RhdCA9IGh3aWYtPnRwX29wcy0+cmVhZF9zZmZfZG1hX3N0YXR1cyhod2lmKTsKLQotCS8qIGNsZWFyIElOVFIgJiBFUlJPUiBmbGFncyAqLwotCWlmIChtbWlvKQotCQl3cml0ZWIoZG1hX3N0YXQgfCA2LAotCQkgICAgICAgKHZvaWQgX19pb21lbSAqKShod2lmLT5kbWFfYmFzZSArIEFUQV9ETUFfU1RBVFVTKSk7Ci0JZWxzZQotCQlvdXRiKGRtYV9zdGF0IHwgNiwgaHdpZi0+ZG1hX2Jhc2UgKyBBVEFfRE1BX1NUQVRVUyk7Ci0KLQlkcml2ZS0+d2FpdGluZ19mb3JfZG1hID0gMTsKLQlyZXR1cm4gMDsKLX0KLQotRVhQT1JUX1NZTUJPTF9HUEwoaWRlX2RtYV9zZXR1cCk7Ci0KLXZvaWQgaWRlX2RtYV9leGVjX2NtZChpZGVfZHJpdmVfdCAqZHJpdmUsIHU4IGNvbW1hbmQpCi17Ci0JLyogaXNzdWUgY21kIHRvIGRyaXZlICovCi0JaWRlX2V4ZWN1dGVfY29tbWFuZChkcml2ZSwgY29tbWFuZCwgJmlkZV9kbWFfaW50ciwgMipXQUlUX0NNRCwgZG1hX3RpbWVyX2V4cGlyeSk7Ci19Ci1FWFBPUlRfU1lNQk9MX0dQTChpZGVfZG1hX2V4ZWNfY21kKTsKLQotdm9pZCBpZGVfZG1hX3N0YXJ0KGlkZV9kcml2ZV90ICpkcml2ZSkKLXsKLQlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7Ci0JdTggZG1hX2NtZDsKLQotCS8qIE5vdGUgdGhhdCB0aGlzIGlzIGRvbmUgKmFmdGVyKiB0aGUgY21kIGhhcwotCSAqIGJlZW4gaXNzdWVkIHRvIHRoZSBkcml2ZSwgYXMgcGVyIHRoZSBCTS1JREUgc3BlYy4KLQkgKiBUaGUgUHJvbWlzZSBVbHRyYTMzIGRvZXNuJ3Qgd29yayBjb3JyZWN0bHkgd2hlbgotCSAqIHdlIGRvIHRoaXMgcGFydCBiZWZvcmUgaXNzdWluZyB0aGUgZHJpdmUgY21kLgotCSAqLwotCWlmIChod2lmLT5ob3N0X2ZsYWdzICYgSURFX0hGTEFHX01NSU8pIHsKLQkJZG1hX2NtZCA9IHJlYWRiKCh2b2lkIF9faW9tZW0gKikoaHdpZi0+ZG1hX2Jhc2UgKyBBVEFfRE1BX0NNRCkpOwotCQkvKiBzdGFydCBETUEgKi8KLQkJd3JpdGViKGRtYV9jbWQgfCAxLAotCQkgICAgICAgKHZvaWQgX19pb21lbSAqKShod2lmLT5kbWFfYmFzZSArIEFUQV9ETUFfQ01EKSk7Ci0JfSBlbHNlIHsKLQkJZG1hX2NtZCA9IGluYihod2lmLT5kbWFfYmFzZSArIEFUQV9ETUFfQ01EKTsKLQkJb3V0YihkbWFfY21kIHwgMSwgaHdpZi0+ZG1hX2Jhc2UgKyBBVEFfRE1BX0NNRCk7Ci0JfQotCi0JaHdpZi0+ZG1hID0gMTsKLQl3bWIoKTsKLX0KLQotRVhQT1JUX1NZTUJPTF9HUEwoaWRlX2RtYV9zdGFydCk7Ci0KLS8qIHJldHVybnMgMSBvbiBlcnJvciwgMCBvdGhlcndpc2UgKi8KLWludCBfX2lkZV9kbWFfZW5kIChpZGVfZHJpdmVfdCAqZHJpdmUpCi17Ci0JaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOwotCXU4IG1taW8gPSAoaHdpZi0+aG9zdF9mbGFncyAmIElERV9IRkxBR19NTUlPKSA/IDEgOiAwOwotCXU4IGRtYV9zdGF0ID0gMCwgZG1hX2NtZCA9IDA7Ci0KLQlkcml2ZS0+d2FpdGluZ19mb3JfZG1hID0gMDsKLQotCWlmIChtbWlvKSB7Ci0JCS8qIGdldCBETUEgY29tbWFuZCBtb2RlICovCi0JCWRtYV9jbWQgPSByZWFkYigodm9pZCBfX2lvbWVtICopKGh3aWYtPmRtYV9iYXNlICsgQVRBX0RNQV9DTUQpKTsKLQkJLyogc3RvcCBETUEgKi8KLQkJd3JpdGViKGRtYV9jbWQgJiB+MSwKLQkJICAgICAgICh2b2lkIF9faW9tZW0gKikoaHdpZi0+ZG1hX2Jhc2UgKyBBVEFfRE1BX0NNRCkpOwotCX0gZWxzZSB7Ci0JCWRtYV9jbWQgPSBpbmIoaHdpZi0+ZG1hX2Jhc2UgKyBBVEFfRE1BX0NNRCk7Ci0JCW91dGIoZG1hX2NtZCAmIH4xLCBod2lmLT5kbWFfYmFzZSArIEFUQV9ETUFfQ01EKTsKLQl9Ci0KLQkvKiBnZXQgRE1BIHN0YXR1cyAqLwotCWRtYV9zdGF0ID0gaHdpZi0+dHBfb3BzLT5yZWFkX3NmZl9kbWFfc3RhdHVzKGh3aWYpOwotCi0JaWYgKG1taW8pCi0JCS8qIGNsZWFyIHRoZSBJTlRSICYgRVJST1IgYml0cyAqLwotCQl3cml0ZWIoZG1hX3N0YXQgfCA2LAotCQkgICAgICAgKHZvaWQgX19pb21lbSAqKShod2lmLT5kbWFfYmFzZSArIEFUQV9ETUFfU1RBVFVTKSk7Ci0JZWxzZQotCQlvdXRiKGRtYV9zdGF0IHwgNiwgaHdpZi0+ZG1hX2Jhc2UgKyBBVEFfRE1BX1NUQVRVUyk7Ci0KLQkvKiBwdXJnZSBETUEgbWFwcGluZ3MgKi8KLQlpZGVfZGVzdHJveV9kbWF0YWJsZShkcml2ZSk7Ci0JLyogdmVyaWZ5IGdvb2QgRE1BIHN0YXR1cyAqLwotCWh3aWYtPmRtYSA9IDA7Ci0Jd21iKCk7Ci0JcmV0dXJuIChkbWFfc3RhdCAmIDcpICE9IDQgPyAoMHgxMCB8IGRtYV9zdGF0KSA6IDA7Ci19Ci0KLUVYUE9SVF9TWU1CT0woX19pZGVfZG1hX2VuZCk7Ci0KLS8qIHJldHVybnMgMSBpZiBkbWEgaXJxIGlzc3VlZCwgMCBvdGhlcndpc2UgKi8KLWludCBpZGVfZG1hX3Rlc3RfaXJxKGlkZV9kcml2ZV90ICpkcml2ZSkKLXsKLQlpZGVfaHdpZl90ICpod2lmCT0gSFdJRihkcml2ZSk7Ci0JdTggZG1hX3N0YXQJCT0gaHdpZi0+dHBfb3BzLT5yZWFkX3NmZl9kbWFfc3RhdHVzKGh3aWYpOwotCi0JLyogcmV0dXJuIDEgaWYgSU5UUiBhc3NlcnRlZCAqLwotCWlmICgoZG1hX3N0YXQgJiA0KSA9PSA0KQotCQlyZXR1cm4gMTsKLQlpZiAoIWRyaXZlLT53YWl0aW5nX2Zvcl9kbWEpCi0JCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiAoJXMpIGNhbGxlZCB3aGlsZSBub3Qgd2FpdGluZ1xuIiwKLQkJCWRyaXZlLT5uYW1lLCBfX2Z1bmNfXyk7Ci0JcmV0dXJuIDA7Ci19Ci1FWFBPUlRfU1lNQk9MX0dQTChpZGVfZG1hX3Rlc3RfaXJxKTsKLSNlbHNlCi1zdGF0aWMgaW5saW5lIGludCBjb25maWdfZHJpdmVfZm9yX2RtYShpZGVfZHJpdmVfdCAqZHJpdmUpIHsgcmV0dXJuIDA7IH0KLSNlbmRpZiAvKiBDT05GSUdfQkxLX0RFVl9JREVETUFfU0ZGICovCi0KLWludCBfX2lkZV9kbWFfYmFkX2RyaXZlIChpZGVfZHJpdmVfdCAqZHJpdmUpCitpbnQgX19pZGVfZG1hX2JhZF9kcml2ZShpZGVfZHJpdmVfdCAqZHJpdmUpCiB7CiAJdTE2ICppZCA9IGRyaXZlLT5pZDsKIApAQCAtNjAyLDcgKzIxOSw2IEBACiAJfQogCXJldHVybiAwOwogfQotCiBFWFBPUlRfU1lNQk9MKF9faWRlX2RtYV9iYWRfZHJpdmUpOwogCiBzdGF0aWMgY29uc3QgdTggeGZlcl9tb2RlX2Jhc2VzW10gPSB7CkBAIC02MTgsNyArMjM0LDcgQEAKIAljb25zdCBzdHJ1Y3QgaWRlX3BvcnRfb3BzICpwb3J0X29wcyA9IGh3aWYtPnBvcnRfb3BzOwogCXVuc2lnbmVkIGludCBtYXNrID0gMDsKIAotCXN3aXRjaChiYXNlKSB7CisJc3dpdGNoIChiYXNlKSB7CiAJY2FzZSBYRkVSX1VETUFfMDoKIAkJaWYgKChpZFtBVEFfSURfRklFTERfVkFMSURdICYgNCkgPT0gMCkKIAkJCWJyZWFrOwpAQCAtNzE5LDcgKzMzNSw2IEBACiAKIAlyZXR1cm4gbW9kZTsKIH0KLQogRVhQT1JUX1NZTUJPTF9HUEwoaWRlX2ZpbmRfZG1hX21vZGUpOwogCiBzdGF0aWMgaW50IGlkZV90dW5lX2RtYShpZGVfZHJpdmVfdCAqZHJpdmUpCkBAIC03MjcsNyArMzQyLDggQEAKIAlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7CiAJdTggc3BlZWQ7CiAKLQlpZiAoZHJpdmUtPm5vZG1hIHx8IGF0YV9pZF9oYXNfZG1hKGRyaXZlLT5pZCkgPT0gMCkKKwlpZiAoYXRhX2lkX2hhc19kbWEoZHJpdmUtPmlkKSA9PSAwIHx8CisJICAgIChkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX05PRE1BKSkKIAkJcmV0dXJuIDA7CiAKIAkvKiBjb25zdWx0IHRoZSBsaXN0IG9mIGtub3duICJiYWQiIGRyaXZlcyAqLwpAQCAtODI3LDY2ICs0NDMsNTkgQEAKIAkJaWRlX2RtYV9vbihkcml2ZSk7CiB9CiAKLSNpZmRlZiBDT05GSUdfQkxLX0RFVl9JREVETUFfU0ZGCi12b2lkIGlkZV9kbWFfbG9zdF9pcnEgKGlkZV9kcml2ZV90ICpkcml2ZSkKK3ZvaWQgaWRlX2RtYV9sb3N0X2lycShpZGVfZHJpdmVfdCAqZHJpdmUpCiB7Ci0JcHJpbnRrKCIlczogRE1BIGludGVycnVwdCByZWNvdmVyeVxuIiwgZHJpdmUtPm5hbWUpOworCXByaW50ayhLRVJOX0VSUiAiJXM6IERNQSBpbnRlcnJ1cHQgcmVjb3ZlcnlcbiIsIGRyaXZlLT5uYW1lKTsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKGlkZV9kbWFfbG9zdF9pcnEpOwogCi1FWFBPUlRfU1lNQk9MKGlkZV9kbWFfbG9zdF9pcnEpOwotCi12b2lkIGlkZV9kbWFfdGltZW91dCAoaWRlX2RyaXZlX3QgKmRyaXZlKQordm9pZCBpZGVfZG1hX3RpbWVvdXQoaWRlX2RyaXZlX3QgKmRyaXZlKQogewotCWlkZV9od2lmX3QgKmh3aWYgPSBIV0lGKGRyaXZlKTsKKwlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7CiAKIAlwcmludGsoS0VSTl9FUlIgIiVzOiB0aW1lb3V0IHdhaXRpbmcgZm9yIERNQVxuIiwgZHJpdmUtPm5hbWUpOwogCiAJaWYgKGh3aWYtPmRtYV9vcHMtPmRtYV90ZXN0X2lycShkcml2ZSkpCiAJCXJldHVybjsKIAorCWlkZV9kdW1wX3N0YXR1cyhkcml2ZSwgIkRNQSB0aW1lb3V0IiwgaHdpZi0+dHBfb3BzLT5yZWFkX3N0YXR1cyhod2lmKSk7CisKIAlod2lmLT5kbWFfb3BzLT5kbWFfZW5kKGRyaXZlKTsKIH0KLQotRVhQT1JUX1NZTUJPTChpZGVfZG1hX3RpbWVvdXQpOworRVhQT1JUX1NZTUJPTF9HUEwoaWRlX2RtYV90aW1lb3V0KTsKIAogdm9pZCBpZGVfcmVsZWFzZV9kbWFfZW5naW5lKGlkZV9od2lmX3QgKmh3aWYpCiB7CiAJaWYgKGh3aWYtPmRtYXRhYmxlX2NwdSkgewotCQlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHRvX3BjaV9kZXYoaHdpZi0+ZGV2KTsKKwkJaW50IHByZF9zaXplID0gaHdpZi0+cHJkX21heF9uZW50cyAqIGh3aWYtPnByZF9lbnRfc2l6ZTsKIAotCQlwY2lfZnJlZV9jb25zaXN0ZW50KHBkZXYsIFBSRF9FTlRSSUVTICogUFJEX0JZVEVTLAotCQkJCSAgICBod2lmLT5kbWF0YWJsZV9jcHUsIGh3aWYtPmRtYXRhYmxlX2RtYSk7CisJCWRtYV9mcmVlX2NvaGVyZW50KGh3aWYtPmRldiwgcHJkX3NpemUsCisJCQkJICBod2lmLT5kbWF0YWJsZV9jcHUsIGh3aWYtPmRtYXRhYmxlX2RtYSk7CiAJCWh3aWYtPmRtYXRhYmxlX2NwdSA9IE5VTEw7CiAJfQogfQorRVhQT1JUX1NZTUJPTF9HUEwoaWRlX3JlbGVhc2VfZG1hX2VuZ2luZSk7CiAKIGludCBpZGVfYWxsb2NhdGVfZG1hX2VuZ2luZShpZGVfaHdpZl90ICpod2lmKQogewotCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gdG9fcGNpX2Rldihod2lmLT5kZXYpOworCWludCBwcmRfc2l6ZTsKIAotCWh3aWYtPmRtYXRhYmxlX2NwdSA9IHBjaV9hbGxvY19jb25zaXN0ZW50KHBkZXYsCi0JCQkJCQkgIFBSRF9FTlRSSUVTICogUFJEX0JZVEVTLAotCQkJCQkJICAmaHdpZi0+ZG1hdGFibGVfZG1hKTsKKwlpZiAoaHdpZi0+cHJkX21heF9uZW50cyA9PSAwKQorCQlod2lmLT5wcmRfbWF4X25lbnRzID0gUFJEX0VOVFJJRVM7CisJaWYgKGh3aWYtPnByZF9lbnRfc2l6ZSA9PSAwKQorCQlod2lmLT5wcmRfZW50X3NpemUgPSBQUkRfQllURVM7CiAKLQlpZiAoaHdpZi0+ZG1hdGFibGVfY3B1KQotCQlyZXR1cm4gMDsKKwlwcmRfc2l6ZSA9IGh3aWYtPnByZF9tYXhfbmVudHMgKiBod2lmLT5wcmRfZW50X3NpemU7CiAKLQlwcmludGsoS0VSTl9FUlIgIiVzOiAtLSBFcnJvciwgdW5hYmxlIHRvIGFsbG9jYXRlIERNQSB0YWJsZS5cbiIsCisJaHdpZi0+ZG1hdGFibGVfY3B1ID0gZG1hX2FsbG9jX2NvaGVyZW50KGh3aWYtPmRldiwgcHJkX3NpemUsCisJCQkJCQkmaHdpZi0+ZG1hdGFibGVfZG1hLAorCQkJCQkJR0ZQX0FUT01JQyk7CisJaWYgKGh3aWYtPmRtYXRhYmxlX2NwdSA9PSBOVUxMKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IHVuYWJsZSB0byBhbGxvY2F0ZSBQUkQgdGFibGVcbiIsCiAJCQlod2lmLT5uYW1lKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQogCi0JcmV0dXJuIDE7CisJcmV0dXJuIDA7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChpZGVfYWxsb2NhdGVfZG1hX2VuZ2luZSk7Ci0KLWNvbnN0IHN0cnVjdCBpZGVfZG1hX29wcyBzZmZfZG1hX29wcyA9IHsKLQkuZG1hX2hvc3Rfc2V0CQk9IGlkZV9kbWFfaG9zdF9zZXQsCi0JLmRtYV9zZXR1cAkJPSBpZGVfZG1hX3NldHVwLAotCS5kbWFfZXhlY19jbWQJCT0gaWRlX2RtYV9leGVjX2NtZCwKLQkuZG1hX3N0YXJ0CQk9IGlkZV9kbWFfc3RhcnQsCi0JLmRtYV9lbmQJCT0gX19pZGVfZG1hX2VuZCwKLQkuZG1hX3Rlc3RfaXJxCQk9IGlkZV9kbWFfdGVzdF9pcnEsCi0JLmRtYV90aW1lb3V0CQk9IGlkZV9kbWFfdGltZW91dCwKLQkuZG1hX2xvc3RfaXJxCQk9IGlkZV9kbWFfbG9zdF9pcnEsCi19OwotRVhQT1JUX1NZTUJPTF9HUEwoc2ZmX2RtYV9vcHMpOwotI2VuZGlmIC8qIENPTkZJR19CTEtfREVWX0lERURNQV9TRkYgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2lkZS1mbG9wcHkuYyBiL2RyaXZlcnMvaWRlL2lkZS1mbG9wcHkuYwppbmRleCBkMzZmMTU1Li5hZWIxYWQ3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9pZGUtZmxvcHB5LmMKKysrIGIvZHJpdmVycy9pZGUvaWRlLWZsb3BweS5jCkBAIC0xNSwxMSArMTUsNiBAQAogICogRG9jdW1lbnRhdGlvbi9pZGUvQ2hhbmdlTG9nLmlkZS1mbG9wcHkuMTk5Ni0yMDAyCiAgKi8KIAotI2RlZmluZSBEUlZfTkFNRSAiaWRlLWZsb3BweSIKLQotI2RlZmluZSBJREVGTE9QUFlfVkVSU0lPTiAiMS4wMCIKLQotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CkBAIC00OCwxOSArNDMsNiBAQAogCiAjaW5jbHVkZSAiaWRlLWZsb3BweS5oIgogCi0vKiBkZWZpbmUgdG8gc2VlIGRlYnVnIGluZm8gKi8KLSNkZWZpbmUgSURFRkxPUFBZX0RFQlVHX0xPRwkJMAotCi0vKiAjZGVmaW5lIElERUZMT1BQWV9ERUJVRyhmbXQsIGFyZ3MuLi4pIHByaW50ayhLRVJOX0lORk8gZm10LCAjIyBhcmdzKSAqLwotI2RlZmluZSBJREVGTE9QUFlfREVCVUcoZm10LCBhcmdzLi4uKQotCi0jaWYgSURFRkxPUFBZX0RFQlVHX0xPRwotI2RlZmluZSBkZWJ1Z19sb2coZm10LCBhcmdzLi4uKSBcCi0JcHJpbnRrKEtFUk5fSU5GTyAiaWRlLWZsb3BweTogIiBmbXQsICMjIGFyZ3MpCi0jZWxzZQotI2RlZmluZSBkZWJ1Z19sb2coZm10LCBhcmdzLi4uKSBkbyB7fSB3aGlsZSAoMCkKLSNlbmRpZgotCiAvKgogICogQWZ0ZXIgZWFjaCBmYWlsZWQgcGFja2V0IGNvbW1hbmQgd2UgaXNzdWUgYSByZXF1ZXN0IHNlbnNlIGNvbW1hbmQgYW5kIHJldHJ5CiAgKiB0aGUgcGFja2V0IGNvbW1hbmQgSURFRkxPUFBZX01BWF9QQ19SRVRSSUVTIHRpbWVzLgpAQCAtNzMsNjMgKzU1LDQwIEBACiAjZGVmaW5lIENBUEFDSVRZX0NVUlJFTlQJMHgwMgogI2RlZmluZSBDQVBBQ0lUWV9OT19DQVJUUklER0UJMHgwMwogCi0jZGVmaW5lIElERUZMT1BQWV9USUNLU19ERUxBWQlIWi8yMAkvKiBkZWZhdWx0IGRlbGF5IGZvciBaSVAgMTAwICg1MG1zKSAqLworLyoKKyAqIFRoZSBmb2xsb3dpbmcgZGVsYXkgc29sdmVzIGEgcHJvYmxlbSB3aXRoIEFUQVBJIFppcCAxMDAgZHJpdmUgd2hlcmUgQlNZIGJpdAorICogd2FzIGFwcGFyZW50bHkgYmVpbmcgZGVhc3NlcnRlZCBiZWZvcmUgdGhlIHVuaXQgd2FzIHJlYWR5IHRvIHJlY2VpdmUgZGF0YS4KKyAqLworI2RlZmluZSBJREVGTE9QUFlfUENfREVMQVkJKEhaLzIwKQkvKiBkZWZhdWx0IGRlbGF5IGZvciBaSVAgMTAwICg1MG1zKSAqLwogCiAvKiBFcnJvciBjb2RlIHJldHVybmVkIGluIHJxLT5lcnJvcnMgdG8gdGhlIGhpZ2hlciBwYXJ0IG9mIHRoZSBkcml2ZXIuICovCiAjZGVmaW5lCUlERUZMT1BQWV9FUlJPUl9HRU5FUkFMCQkxMDEKIAotc3RhdGljIERFRklORV9NVVRFWChpZGVmbG9wcHlfcmVmX211dGV4KTsKLQotI2RlZmluZSB0b19pZGVfZmxvcHB5KG9iaikgY29udGFpbmVyX29mKG9iaiwgc3RydWN0IGlkZV9mbG9wcHlfb2JqLCBrcmVmKQotCi0jZGVmaW5lIGlkZV9mbG9wcHlfZyhkaXNrKSBcCi0JY29udGFpbmVyX29mKChkaXNrKS0+cHJpdmF0ZV9kYXRhLCBzdHJ1Y3QgaWRlX2Zsb3BweV9vYmosIGRyaXZlcikKLQotc3RhdGljIHZvaWQgaWRlZmxvcHB5X2NsZWFudXBfb2JqKHN0cnVjdCBrcmVmICopOwotCi1zdGF0aWMgc3RydWN0IGlkZV9mbG9wcHlfb2JqICppZGVfZmxvcHB5X2dldChzdHJ1Y3QgZ2VuZGlzayAqZGlzaykKLXsKLQlzdHJ1Y3QgaWRlX2Zsb3BweV9vYmogKmZsb3BweSA9IE5VTEw7Ci0KLQltdXRleF9sb2NrKCZpZGVmbG9wcHlfcmVmX211dGV4KTsKLQlmbG9wcHkgPSBpZGVfZmxvcHB5X2coZGlzayk7Ci0JaWYgKGZsb3BweSkgewotCQlpZiAoaWRlX2RldmljZV9nZXQoZmxvcHB5LT5kcml2ZSkpCi0JCQlmbG9wcHkgPSBOVUxMOwotCQllbHNlCi0JCQlrcmVmX2dldCgmZmxvcHB5LT5rcmVmKTsKLQl9Ci0JbXV0ZXhfdW5sb2NrKCZpZGVmbG9wcHlfcmVmX211dGV4KTsKLQlyZXR1cm4gZmxvcHB5OwotfQotCi1zdGF0aWMgdm9pZCBpZGVfZmxvcHB5X3B1dChzdHJ1Y3QgaWRlX2Zsb3BweV9vYmogKmZsb3BweSkKLXsKLQlpZGVfZHJpdmVfdCAqZHJpdmUgPSBmbG9wcHktPmRyaXZlOwotCi0JbXV0ZXhfbG9jaygmaWRlZmxvcHB5X3JlZl9tdXRleCk7Ci0Ja3JlZl9wdXQoJmZsb3BweS0+a3JlZiwgaWRlZmxvcHB5X2NsZWFudXBfb2JqKTsKLQlpZGVfZGV2aWNlX3B1dChkcml2ZSk7Ci0JbXV0ZXhfdW5sb2NrKCZpZGVmbG9wcHlfcmVmX211dGV4KTsKLX0KLQogLyoKICAqIFVzZWQgdG8gZmluaXNoIHNlcnZpY2luZyBhIHJlcXVlc3QuIEZvciByZWFkL3dyaXRlIHJlcXVlc3RzLCB3ZSB3aWxsIGNhbGwKICAqIGlkZV9lbmRfcmVxdWVzdCB0byBwYXNzIHRvIHRoZSBuZXh0IGJ1ZmZlci4KICAqLwotc3RhdGljIGludCBpZGVmbG9wcHlfZW5kX3JlcXVlc3QoaWRlX2RyaXZlX3QgKmRyaXZlLCBpbnQgdXB0b2RhdGUsIGludCBuc2VjcykKK3N0YXRpYyBpbnQgaWRlX2Zsb3BweV9lbmRfcmVxdWVzdChpZGVfZHJpdmVfdCAqZHJpdmUsIGludCB1cHRvZGF0ZSwgaW50IG5zZWNzKQogewotCWlkZWZsb3BweV9mbG9wcHlfdCAqZmxvcHB5ID0gZHJpdmUtPmRyaXZlcl9kYXRhOworCXN0cnVjdCBpZGVfZGlza19vYmogKmZsb3BweSA9IGRyaXZlLT5kcml2ZXJfZGF0YTsKIAlzdHJ1Y3QgcmVxdWVzdCAqcnEgPSBIV0dST1VQKGRyaXZlKS0+cnE7CiAJaW50IGVycm9yOwogCi0JZGVidWdfbG9nKCJSZWFjaGVkICVzXG4iLCBfX2Z1bmNfXyk7CisJaWRlX2RlYnVnX2xvZyhJREVfREJHX0ZVTkMsICJDYWxsICVzXG4iLCBfX2Z1bmNfXyk7CiAKIAlzd2l0Y2ggKHVwdG9kYXRlKSB7Ci0JY2FzZSAwOiBlcnJvciA9IElERUZMT1BQWV9FUlJPUl9HRU5FUkFMOyBicmVhazsKLQljYXNlIDE6IGVycm9yID0gMDsgYnJlYWs7Ci0JZGVmYXVsdDogZXJyb3IgPSB1cHRvZGF0ZTsKKwljYXNlIDA6CisJCWVycm9yID0gSURFRkxPUFBZX0VSUk9SX0dFTkVSQUw7CisJCWJyZWFrOworCisJY2FzZSAxOgorCQllcnJvciA9IDA7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJZXJyb3IgPSB1cHRvZGF0ZTsKIAl9CisKIAlpZiAoZXJyb3IpCiAJCWZsb3BweS0+ZmFpbGVkX3BjID0gTlVMTDsKIAkvKiBXaHkgZG9lcyB0aGlzIGhhcHBlbj8gKi8KQEAgLTE1MywxNiArMTEyLDE2IEBACiAJc3RydWN0IGJpbyAqYmlvID0gcnEtPmJpbzsKIAogCXdoaWxlICgoYmlvID0gcnEtPmJpbykgIT0gTlVMTCkKLQkJaWRlZmxvcHB5X2VuZF9yZXF1ZXN0KGRyaXZlLCAxLCAwKTsKKwkJaWRlX2Zsb3BweV9lbmRfcmVxdWVzdChkcml2ZSwgMSwgMCk7CiB9CiAKLXN0YXRpYyB2b2lkIGlkZV9mbG9wcHlfY2FsbGJhY2soaWRlX2RyaXZlX3QgKmRyaXZlKQorc3RhdGljIHZvaWQgaWRlX2Zsb3BweV9jYWxsYmFjayhpZGVfZHJpdmVfdCAqZHJpdmUsIGludCBkc2MpCiB7Ci0JaWRlZmxvcHB5X2Zsb3BweV90ICpmbG9wcHkgPSBkcml2ZS0+ZHJpdmVyX2RhdGE7Ci0Jc3RydWN0IGlkZV9hdGFwaV9wYyAqcGMgPSBmbG9wcHktPnBjOworCXN0cnVjdCBpZGVfZGlza19vYmogKmZsb3BweSA9IGRyaXZlLT5kcml2ZXJfZGF0YTsKKwlzdHJ1Y3QgaWRlX2F0YXBpX3BjICpwYyA9IGRyaXZlLT5wYzsKIAlpbnQgdXB0b2RhdGUgPSBwYy0+ZXJyb3IgPyAwIDogMTsKIAotCWRlYnVnX2xvZygiUmVhY2hlZCAlc1xuIiwgX19mdW5jX18pOworCWlkZV9kZWJ1Z19sb2coSURFX0RCR19GVU5DLCAiQ2FsbCAlc1xuIiwgX19mdW5jX18pOwogCiAJaWYgKGZsb3BweS0+ZmFpbGVkX3BjID09IHBjKQogCQlmbG9wcHktPmZhaWxlZF9wYyA9IE5VTEw7CkBAIC0xNzEsNyArMTMwLDcgQEAKIAkgICAgKHBjLT5ycSAmJiBibGtfcGNfcmVxdWVzdChwYy0+cnEpKSkKIAkJdXB0b2RhdGUgPSAxOyAvKiBGSVhNRSAqLwogCWVsc2UgaWYgKHBjLT5jWzBdID09IEdQQ01EX1JFUVVFU1RfU0VOU0UpIHsKLQkJdTggKmJ1ZiA9IGZsb3BweS0+cGMtPmJ1ZjsKKwkJdTggKmJ1ZiA9IHBjLT5idWY7CiAKIAkJaWYgKCFwYy0+ZXJyb3IpIHsKIAkJCWZsb3BweS0+c2Vuc2Vfa2V5ID0gYnVmWzJdICYgMHgwRjsKQEAgLTE4MSwxMDAgKzE0MCwyMSBAQAogCQkJCSh1MTYpZ2V0X3VuYWxpZ25lZCgodTE2ICopJmJ1ZlsxNl0pIDogMHgxMDAwMDsKIAogCQkJaWYgKGZsb3BweS0+ZmFpbGVkX3BjKQotCQkJCWRlYnVnX2xvZygicGMgPSAleCwgIiwgZmxvcHB5LT5mYWlsZWRfcGMtPmNbMF0pOworCQkJCWlkZV9kZWJ1Z19sb2coSURFX0RCR19QQywgInBjID0gJXgsICIsCisJCQkJCSAgICAgIGZsb3BweS0+ZmFpbGVkX3BjLT5jWzBdKTsKIAotCQkJZGVidWdfbG9nKCJzZW5zZSBrZXkgPSAleCwgYXNjID0gJXgsIGFzY3EgPSAleFxuIiwKLQkJCQkgIGZsb3BweS0+c2Vuc2Vfa2V5LCBmbG9wcHktPmFzYywgZmxvcHB5LT5hc2NxKTsKKwkJCWlkZV9kZWJ1Z19sb2coSURFX0RCR19TRU5TRSwgInNlbnNlIGtleSA9ICV4LCBhc2MgPSAleCwiCisJCQkJICAgICAgImFzY3EgPSAleFxuIiwgZmxvcHB5LT5zZW5zZV9rZXksCisJCQkJICAgICAgZmxvcHB5LT5hc2MsIGZsb3BweS0+YXNjcSk7CiAJCX0gZWxzZQotCQkJcHJpbnRrKEtFUk5fRVJSICJFcnJvciBpbiBSRVFVRVNUIFNFTlNFIGl0c2VsZiAtICIKLQkJCQkJIkFib3J0aW5nIHJlcXVlc3QhXG4iKTsKKwkJCXByaW50ayhLRVJOX0VSUiBQRlggIkVycm9yIGluIFJFUVVFU1QgU0VOU0UgaXRzZWxmIC0gIgorCQkJICAgICAgICJBYm9ydGluZyByZXF1ZXN0IVxuIik7CiAJfQogCi0JaWRlZmxvcHB5X2VuZF9yZXF1ZXN0KGRyaXZlLCB1cHRvZGF0ZSwgMCk7CisJaWRlX2Zsb3BweV9lbmRfcmVxdWVzdChkcml2ZSwgdXB0b2RhdGUsIDApOwogfQogCi12b2lkIGlkZV9mbG9wcHlfY3JlYXRlX3JlcXVlc3Rfc2Vuc2VfY21kKHN0cnVjdCBpZGVfYXRhcGlfcGMgKnBjKQotewotCWlkZV9pbml0X3BjKHBjKTsKLQlwYy0+Y1swXSA9IEdQQ01EX1JFUVVFU1RfU0VOU0U7Ci0JcGMtPmNbNF0gPSAyNTU7Ci0JcGMtPnJlcV94ZmVyID0gMTg7Ci19Ci0KLS8qCi0gKiBDYWxsZWQgd2hlbiBhbiBlcnJvciB3YXMgZGV0ZWN0ZWQgZHVyaW5nIHRoZSBsYXN0IHBhY2tldCBjb21tYW5kLiBXZSBxdWV1ZSBhCi0gKiByZXF1ZXN0IHNlbnNlIHBhY2tldCBjb21tYW5kIGluIHRoZSBoZWFkIG9mIHRoZSByZXF1ZXN0IGxpc3QuCi0gKi8KLXN0YXRpYyB2b2lkIGlkZWZsb3BweV9yZXRyeV9wYyhpZGVfZHJpdmVfdCAqZHJpdmUpCi17Ci0Jc3RydWN0IGlkZV9mbG9wcHlfb2JqICpmbG9wcHkgPSBkcml2ZS0+ZHJpdmVyX2RhdGE7Ci0Jc3RydWN0IHJlcXVlc3QgKnJxID0gJmZsb3BweS0+cmVxdWVzdF9zZW5zZV9ycTsKLQlzdHJ1Y3QgaWRlX2F0YXBpX3BjICpwYyA9ICZmbG9wcHktPnJlcXVlc3Rfc2Vuc2VfcGM7Ci0KLQkodm9pZClpZGVfcmVhZF9lcnJvcihkcml2ZSk7Ci0JaWRlX2Zsb3BweV9jcmVhdGVfcmVxdWVzdF9zZW5zZV9jbWQocGMpOwotCWlkZV9xdWV1ZV9wY19oZWFkKGRyaXZlLCBmbG9wcHktPmRpc2ssIHBjLCBycSk7Ci19Ci0KLS8qIFRoZSB1c3VhbCBpbnRlcnJ1cHQgaGFuZGxlciBjYWxsZWQgZHVyaW5nIGEgcGFja2V0IGNvbW1hbmQuICovCi1zdGF0aWMgaWRlX3N0YXJ0c3RvcF90IGlkZWZsb3BweV9wY19pbnRyKGlkZV9kcml2ZV90ICpkcml2ZSkKLXsKLQlpZGVmbG9wcHlfZmxvcHB5X3QgKmZsb3BweSA9IGRyaXZlLT5kcml2ZXJfZGF0YTsKLQotCXJldHVybiBpZGVfcGNfaW50cihkcml2ZSwgZmxvcHB5LT5wYywgaWRlZmxvcHB5X3BjX2ludHIsCi0JCQkgICBXQUlUX0ZMT1BQWV9DTUQsIE5VTEwsIGlkZWZsb3BweV91cGRhdGVfYnVmZmVycywKLQkJCSAgIGlkZWZsb3BweV9yZXRyeV9wYywgTlVMTCwgaWRlX2lvX2J1ZmZlcnMpOwotfQotCi0vKgotICogV2hhdCB3ZSBoYXZlIGhlcmUgaXMgYSBjbGFzc2ljIGNhc2Ugb2YgYSB0b3AgaGFsZiAvIGJvdHRvbSBoYWxmIGludGVycnVwdAotICogc2VydmljZSByb3V0aW5lLiBJbiBpbnRlcnJ1cHQgbW9kZSwgdGhlIGRldmljZSBzZW5kcyBhbiBpbnRlcnJ1cHQgdG8gc2lnbmFsCi0gKiB0aGF0IGl0IGlzIHJlYWR5IHRvIHJlY2VpdmUgYSBwYWNrZXQuIEhvd2V2ZXIsIHdlIG5lZWQgdG8gZGVsYXkgYWJvdXQgMi0zCi0gKiB0aWNrcyBiZWZvcmUgaXNzdWluZyB0aGUgcGFja2V0IG9yIHdlIGdldHMgaW4gdHJvdWJsZS4KLSAqLwotc3RhdGljIGludCBpZGVmbG9wcHlfdHJhbnNmZXJfcGMoaWRlX2RyaXZlX3QgKmRyaXZlKQotewotCWlkZWZsb3BweV9mbG9wcHlfdCAqZmxvcHB5ID0gZHJpdmUtPmRyaXZlcl9kYXRhOwotCi0JLyogU2VuZCB0aGUgYWN0dWFsIHBhY2tldCAqLwotCWRyaXZlLT5od2lmLT50cF9vcHMtPm91dHB1dF9kYXRhKGRyaXZlLCBOVUxMLCBmbG9wcHktPnBjLT5jLCAxMik7Ci0KLQkvKiBUaW1lb3V0IGZvciB0aGUgcGFja2V0IGNvbW1hbmQgKi8KLQlyZXR1cm4gV0FJVF9GTE9QUFlfQ01EOwotfQotCi0vKgotICogQ2FsbGVkIGFzIGFuIGludGVycnVwdCAob3IgZGlyZWN0bHkpLiBXaGVuIHRoZSBkZXZpY2Ugc2F5cyBpdCdzIHJlYWR5IGZvciBhCi0gKiBwYWNrZXQsIHdlIHNjaGVkdWxlIHRoZSBwYWNrZXQgdHJhbnNmZXIgdG8gb2NjdXIgYWJvdXQgMi0zIHRpY2tzIGxhdGVyIGluCi0gKiB0cmFuc2Zlcl9wYy4KLSAqLwotc3RhdGljIGlkZV9zdGFydHN0b3BfdCBpZGVmbG9wcHlfc3RhcnRfcGNfdHJhbnNmZXIoaWRlX2RyaXZlX3QgKmRyaXZlKQotewotCWlkZWZsb3BweV9mbG9wcHlfdCAqZmxvcHB5ID0gZHJpdmUtPmRyaXZlcl9kYXRhOwotCXN0cnVjdCBpZGVfYXRhcGlfcGMgKnBjID0gZmxvcHB5LT5wYzsKLQlpZGVfZXhwaXJ5X3QgKmV4cGlyeTsKLQl1bnNpZ25lZCBpbnQgdGltZW91dDsKLQotCS8qCi0JICogVGhlIGZvbGxvd2luZyBkZWxheSBzb2x2ZXMgYSBwcm9ibGVtIHdpdGggQVRBUEkgWmlwIDEwMCBkcml2ZXMKLQkgKiB3aGVyZSB0aGUgQnVzeSBmbGFnIHdhcyBhcHBhcmVudGx5IGJlaW5nIGRlYXNzZXJ0ZWQgYmVmb3JlIHRoZQotCSAqIHVuaXQgd2FzIHJlYWR5IHRvIHJlY2VpdmUgZGF0YS4gVGhpcyB3YXMgaGFwcGVuaW5nIG9uIGEKLQkgKiAxMjAwIE1IeiBBdGhsb24gc3lzdGVtLiAxMC8yNi8wMSAyNW1zZWMgaXMgdG9vIHNob3J0LAotCSAqIDQwIGFuZCA1MG1zZWMgd29yayB3ZWxsLiBpZGVmbG9wcHlfcGNfaW50ciB3aWxsIG5vdCBiZSBhY3R1YWxseQotCSAqIHVzZWQgdW50aWwgYWZ0ZXIgdGhlIHBhY2tldCBpcyBtb3ZlZCBpbiBhYm91dCA1MCBtc2VjLgotCSAqLwotCWlmIChkcml2ZS0+YXRhcGlfZmxhZ3MgJiBJREVfQUZMQUdfWklQX0RSSVZFKSB7Ci0JCXRpbWVvdXQgPSBmbG9wcHktPnRpY2tzOwotCQlleHBpcnkgPSAmaWRlZmxvcHB5X3RyYW5zZmVyX3BjOwotCX0gZWxzZSB7Ci0JCXRpbWVvdXQgPSBXQUlUX0ZMT1BQWV9DTUQ7Ci0JCWV4cGlyeSA9IE5VTEw7Ci0JfQotCi0JcmV0dXJuIGlkZV90cmFuc2Zlcl9wYyhkcml2ZSwgcGMsIGlkZWZsb3BweV9wY19pbnRyLCB0aW1lb3V0LCBleHBpcnkpOwotfQotCi1zdGF0aWMgdm9pZCBpZGVfZmxvcHB5X3JlcG9ydF9lcnJvcihpZGVmbG9wcHlfZmxvcHB5X3QgKmZsb3BweSwKK3N0YXRpYyB2b2lkIGlkZV9mbG9wcHlfcmVwb3J0X2Vycm9yKHN0cnVjdCBpZGVfZGlza19vYmogKmZsb3BweSwKIAkJCQkgICAgc3RydWN0IGlkZV9hdGFwaV9wYyAqcGMpCiB7CiAJLyogc3VwcmVzcyBlcnJvciBtZXNzYWdlcyByZXN1bHRpbmcgZnJvbSBNZWRpdW0gbm90IHByZXNlbnQgKi8KQEAgLTI4Myw3ICsxNjMsNyBAQAogCSAgICBmbG9wcHktPmFzY3EgICAgICA9PSAweDAwKQogCQlyZXR1cm47CiAKLQlwcmludGsoS0VSTl9FUlIgImlkZS1mbG9wcHk6ICVzOiBJL08gZXJyb3IsIHBjID0gJTJ4LCBrZXkgPSAlMngsICIKKwlwcmludGsoS0VSTl9FUlIgUEZYICIlczogSS9PIGVycm9yLCBwYyA9ICUyeCwga2V5ID0gJTJ4LCAiCiAJCQkiYXNjID0gJTJ4LCBhc2NxID0gJTJ4XG4iLAogCQkJZmxvcHB5LT5kcml2ZS0+bmFtZSwgcGMtPmNbMF0sIGZsb3BweS0+c2Vuc2Vfa2V5LAogCQkJZmxvcHB5LT5hc2MsIGZsb3BweS0+YXNjcSk7CkBAIC0yOTMsMTMgKzE3MywxNCBAQAogc3RhdGljIGlkZV9zdGFydHN0b3BfdCBpZGVmbG9wcHlfaXNzdWVfcGMoaWRlX2RyaXZlX3QgKmRyaXZlLAogCQlzdHJ1Y3QgaWRlX2F0YXBpX3BjICpwYykKIHsKLQlpZGVmbG9wcHlfZmxvcHB5X3QgKmZsb3BweSA9IGRyaXZlLT5kcml2ZXJfZGF0YTsKKwlzdHJ1Y3QgaWRlX2Rpc2tfb2JqICpmbG9wcHkgPSBkcml2ZS0+ZHJpdmVyX2RhdGE7CiAKIAlpZiAoZmxvcHB5LT5mYWlsZWRfcGMgPT0gTlVMTCAmJgogCSAgICBwYy0+Y1swXSAhPSBHUENNRF9SRVFVRVNUX1NFTlNFKQogCQlmbG9wcHktPmZhaWxlZF9wYyA9IHBjOworCiAJLyogU2V0IHRoZSBjdXJyZW50IHBhY2tldCBjb21tYW5kICovCi0JZmxvcHB5LT5wYyA9IHBjOworCWRyaXZlLT5wYyA9IHBjOwogCiAJaWYgKHBjLT5yZXRyaWVzID4gSURFRkxPUFBZX01BWF9QQ19SRVRSSUVTKSB7CiAJCWlmICghKHBjLT5mbGFncyAmIFBDX0ZMQUdfU1VQUFJFU1NfRVJST1IpKQpAQCAtMzA4LDE2ICsxODksMTUgQEAKIAkJcGMtPmVycm9yID0gSURFRkxPUFBZX0VSUk9SX0dFTkVSQUw7CiAKIAkJZmxvcHB5LT5mYWlsZWRfcGMgPSBOVUxMOwotCQlkcml2ZS0+cGNfY2FsbGJhY2soZHJpdmUpOworCQlkcml2ZS0+cGNfY2FsbGJhY2soZHJpdmUsIDApOwogCQlyZXR1cm4gaWRlX3N0b3BwZWQ7CiAJfQogCi0JZGVidWdfbG9nKCJSZXRyeSBudW1iZXIgLSAlZFxuIiwgcGMtPnJldHJpZXMpOworCWlkZV9kZWJ1Z19sb2coSURFX0RCR19GVU5DLCAiJXM6IFJldHJ5ICMlZFxuIiwgX19mdW5jX18sIHBjLT5yZXRyaWVzKTsKIAogCXBjLT5yZXRyaWVzKys7CiAKLQlyZXR1cm4gaWRlX2lzc3VlX3BjKGRyaXZlLCBwYywgaWRlZmxvcHB5X3N0YXJ0X3BjX3RyYW5zZmVyLAotCQkJICAgIFdBSVRfRkxPUFBZX0NNRCwgTlVMTCk7CisJcmV0dXJuIGlkZV9pc3N1ZV9wYyhkcml2ZSwgV0FJVF9GTE9QUFlfQ01ELCBOVUxMKTsKIH0KIAogdm9pZCBpZGVfZmxvcHB5X2NyZWF0ZV9yZWFkX2NhcGFjaXR5X2NtZChzdHJ1Y3QgaWRlX2F0YXBpX3BjICpwYykKQEAgLTM0NywyMyArMjI3LDIzIEBACiAJCWxlbmd0aCArPSAzMjsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJcHJpbnRrKEtFUk5fRVJSICJpZGUtZmxvcHB5OiB1bnN1cHBvcnRlZCBwYWdlIGNvZGUgIgotCQkJCSJpbiBjcmVhdGVfbW9kZV9zZW5zZV9jbWRcbiIpOworCQlwcmludGsoS0VSTl9FUlIgUEZYICJ1bnN1cHBvcnRlZCBwYWdlIGNvZGUgaW4gJXNcbiIsIF9fZnVuY19fKTsKIAl9CiAJcHV0X3VuYWxpZ25lZChjcHVfdG9fYmUxNihsZW5ndGgpLCAodTE2ICopICZwYy0+Y1s3XSk7CiAJcGMtPnJlcV94ZmVyID0gbGVuZ3RoOwogfQogCi1zdGF0aWMgdm9pZCBpZGVmbG9wcHlfY3JlYXRlX3J3X2NtZChpZGVmbG9wcHlfZmxvcHB5X3QgKmZsb3BweSwKK3N0YXRpYyB2b2lkIGlkZWZsb3BweV9jcmVhdGVfcndfY21kKGlkZV9kcml2ZV90ICpkcml2ZSwKIAkJCQkgICAgc3RydWN0IGlkZV9hdGFwaV9wYyAqcGMsIHN0cnVjdCByZXF1ZXN0ICpycSwKIAkJCQkgICAgdW5zaWduZWQgbG9uZyBzZWN0b3IpCiB7CisJc3RydWN0IGlkZV9kaXNrX29iaiAqZmxvcHB5ID0gZHJpdmUtPmRyaXZlcl9kYXRhOwogCWludCBibG9jayA9IHNlY3RvciAvIGZsb3BweS0+YnNfZmFjdG9yOwogCWludCBibG9ja3MgPSBycS0+bnJfc2VjdG9ycyAvIGZsb3BweS0+YnNfZmFjdG9yOwogCWludCBjbWQgPSBycV9kYXRhX2RpcihycSk7CiAKLQlkZWJ1Z19sb2coImNyZWF0ZV9ydzEwX2NtZDogYmxvY2sgPT0gJWQsIGJsb2NrcyA9PSAlZFxuIiwKLQkJYmxvY2ssIGJsb2Nrcyk7CisJaWRlX2RlYnVnX2xvZyhJREVfREJHX0ZVTkMsICIlczogYmxvY2s6ICVkLCBibG9ja3M6ICVkXG4iLCBfX2Z1bmNfXywKKwkJICAgICAgYmxvY2ssIGJsb2Nrcyk7CiAKIAlpZGVfaW5pdF9wYyhwYyk7CiAJcGMtPmNbMF0gPSBjbWQgPT0gUkVBRCA/IEdQQ01EX1JFQURfMTAgOiBHUENNRF9XUklURV8xMDsKQEAgLTM4MSw3ICsyNjEsNyBAQAogCXBjLT5mbGFncyB8PSBQQ19GTEFHX0RNQV9PSzsKIH0KIAotc3RhdGljIHZvaWQgaWRlZmxvcHB5X2Jsb2NrcGNfY21kKGlkZWZsb3BweV9mbG9wcHlfdCAqZmxvcHB5LAorc3RhdGljIHZvaWQgaWRlZmxvcHB5X2Jsb2NrcGNfY21kKHN0cnVjdCBpZGVfZGlza19vYmogKmZsb3BweSwKIAkJc3RydWN0IGlkZV9hdGFwaV9wYyAqcGMsIHN0cnVjdCByZXF1ZXN0ICpycSkKIHsKIAlpZGVfaW5pdF9wYyhwYyk7CkBAIC00MDAsNTAgKzI4MCw1MCBAQAogCXBjLT5yZXFfeGZlciA9IHBjLT5idWZfc2l6ZSA9IHJxLT5kYXRhX2xlbjsKIH0KIAotc3RhdGljIGlkZV9zdGFydHN0b3BfdCBpZGVmbG9wcHlfZG9fcmVxdWVzdChpZGVfZHJpdmVfdCAqZHJpdmUsCi0JCXN0cnVjdCByZXF1ZXN0ICpycSwgc2VjdG9yX3QgYmxvY2tfcykKK3N0YXRpYyBpZGVfc3RhcnRzdG9wX3QgaWRlX2Zsb3BweV9kb19yZXF1ZXN0KGlkZV9kcml2ZV90ICpkcml2ZSwKKwkJCQkJICAgICBzdHJ1Y3QgcmVxdWVzdCAqcnEsIHNlY3Rvcl90IGJsb2NrKQogewotCWlkZWZsb3BweV9mbG9wcHlfdCAqZmxvcHB5ID0gZHJpdmUtPmRyaXZlcl9kYXRhOworCXN0cnVjdCBpZGVfZGlza19vYmogKmZsb3BweSA9IGRyaXZlLT5kcml2ZXJfZGF0YTsKIAlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7CiAJc3RydWN0IGlkZV9hdGFwaV9wYyAqcGM7Ci0JdW5zaWduZWQgbG9uZyBibG9jayA9ICh1bnNpZ25lZCBsb25nKWJsb2NrX3M7CiAKLQlkZWJ1Z19sb2coIiVzOiBkZXY6ICVzLCBjbWQ6IDB4JXgsIGNtZF90eXBlOiAleCwgZXJyb3JzOiAlZFxuIiwKLQkJICBfX2Z1bmNfXywgcnEtPnJxX2Rpc2sgPyBycS0+cnFfZGlzay0+ZGlza19uYW1lIDogIj8iLAotCQkgIHJxLT5jbWRbMF0sIHJxLT5jbWRfdHlwZSwgcnEtPmVycm9ycyk7CisJaWRlX2RlYnVnX2xvZyhJREVfREJHX0ZVTkMsICIlczogZGV2OiAlcywgY21kOiAweCV4LCBjbWRfdHlwZTogJXgsICIKKwkJICAgICAgImVycm9yczogJWRcbiIsCisJCSAgICAgIF9fZnVuY19fLCBycS0+cnFfZGlzayA/IHJxLT5ycV9kaXNrLT5kaXNrX25hbWUgOiAiPyIsCisJCSAgICAgIHJxLT5jbWRbMF0sIHJxLT5jbWRfdHlwZSwgcnEtPmVycm9ycyk7CiAKLQlkZWJ1Z19sb2coIiVzOiBzZWN0b3I6ICVsZCwgbnJfc2VjdG9yczogJWxkLCBjdXJyZW50X25yX3NlY3RvcnM6ICVkXG4iLAotCQkgIF9fZnVuY19fLCAobG9uZylycS0+c2VjdG9yLCBycS0+bnJfc2VjdG9ycywKLQkJICBycS0+Y3VycmVudF9ucl9zZWN0b3JzKTsKKwlpZGVfZGVidWdfbG9nKElERV9EQkdfRlVOQywgIiVzOiBzZWN0b3I6ICVsZCwgbnJfc2VjdG9yczogJWxkLCAiCisJCSAgICAgICJjdXJyZW50X25yX3NlY3RvcnM6ICVkXG4iLAorCQkgICAgICBfX2Z1bmNfXywgKGxvbmcpcnEtPnNlY3RvciwgcnEtPm5yX3NlY3RvcnMsCisJCSAgICAgIHJxLT5jdXJyZW50X25yX3NlY3RvcnMpOwogCiAJaWYgKHJxLT5lcnJvcnMgPj0gRVJST1JfTUFYKSB7CiAJCWlmIChmbG9wcHktPmZhaWxlZF9wYykKIAkJCWlkZV9mbG9wcHlfcmVwb3J0X2Vycm9yKGZsb3BweSwgZmxvcHB5LT5mYWlsZWRfcGMpOwogCQllbHNlCi0JCQlwcmludGsoS0VSTl9FUlIgImlkZS1mbG9wcHk6ICVzOiBJL08gZXJyb3JcbiIsCi0JCQkJZHJpdmUtPm5hbWUpOwotCQlpZGVmbG9wcHlfZW5kX3JlcXVlc3QoZHJpdmUsIDAsIDApOworCQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiJXM6IEkvTyBlcnJvclxuIiwgZHJpdmUtPm5hbWUpOworCisJCWlkZV9mbG9wcHlfZW5kX3JlcXVlc3QoZHJpdmUsIDAsIDApOwogCQlyZXR1cm4gaWRlX3N0b3BwZWQ7CiAJfQogCWlmIChibGtfZnNfcmVxdWVzdChycSkpIHsKIAkJaWYgKCgobG9uZylycS0+c2VjdG9yICUgZmxvcHB5LT5ic19mYWN0b3IpIHx8CiAJCSAgICAocnEtPm5yX3NlY3RvcnMgJSBmbG9wcHktPmJzX2ZhY3RvcikpIHsKLQkJCXByaW50ayhLRVJOX0VSUiAiJXM6IHVuc3VwcG9ydGVkIHIvdyByZXF1ZXN0IHNpemVcbiIsCi0JCQkJCWRyaXZlLT5uYW1lKTsKLQkJCWlkZWZsb3BweV9lbmRfcmVxdWVzdChkcml2ZSwgMCwgMCk7CisJCQlwcmludGsoS0VSTl9FUlIgUEZYICIlczogdW5zdXBwb3J0ZWQgci93IHJxIHNpemVcbiIsCisJCQkJZHJpdmUtPm5hbWUpOworCQkJaWRlX2Zsb3BweV9lbmRfcmVxdWVzdChkcml2ZSwgMCwgMCk7CiAJCQlyZXR1cm4gaWRlX3N0b3BwZWQ7CiAJCX0KIAkJcGMgPSAmZmxvcHB5LT5xdWV1ZWRfcGM7Ci0JCWlkZWZsb3BweV9jcmVhdGVfcndfY21kKGZsb3BweSwgcGMsIHJxLCBibG9jayk7CisJCWlkZWZsb3BweV9jcmVhdGVfcndfY21kKGRyaXZlLCBwYywgcnEsICh1bnNpZ25lZCBsb25nKWJsb2NrKTsKIAl9IGVsc2UgaWYgKGJsa19zcGVjaWFsX3JlcXVlc3QocnEpKSB7CiAJCXBjID0gKHN0cnVjdCBpZGVfYXRhcGlfcGMgKikgcnEtPmJ1ZmZlcjsKIAl9IGVsc2UgaWYgKGJsa19wY19yZXF1ZXN0KHJxKSkgewogCQlwYyA9ICZmbG9wcHktPnF1ZXVlZF9wYzsKIAkJaWRlZmxvcHB5X2Jsb2NrcGNfY21kKGZsb3BweSwgcGMsIHJxKTsKIAl9IGVsc2UgewotCQlibGtfZHVtcF9ycV9mbGFncyhycSwKLQkJCSJpZGUtZmxvcHB5OiB1bnN1cHBvcnRlZCBjb21tYW5kIGluIHF1ZXVlIik7Ci0JCWlkZWZsb3BweV9lbmRfcmVxdWVzdChkcml2ZSwgMCwgMCk7CisJCWJsa19kdW1wX3JxX2ZsYWdzKHJxLCBQRlggInVuc3VwcG9ydGVkIGNvbW1hbmQgaW4gcXVldWUiKTsKKwkJaWRlX2Zsb3BweV9lbmRfcmVxdWVzdChkcml2ZSwgMCwgMCk7CiAJCXJldHVybiBpZGVfc3RvcHBlZDsKIAl9CiAKQEAgLTQ2NCw3ICszNDQsNyBAQAogICovCiBzdGF0aWMgaW50IGlkZV9mbG9wcHlfZ2V0X2ZsZXhpYmxlX2Rpc2tfcGFnZShpZGVfZHJpdmVfdCAqZHJpdmUpCiB7Ci0JaWRlZmxvcHB5X2Zsb3BweV90ICpmbG9wcHkgPSBkcml2ZS0+ZHJpdmVyX2RhdGE7CisJc3RydWN0IGlkZV9kaXNrX29iaiAqZmxvcHB5ID0gZHJpdmUtPmRyaXZlcl9kYXRhOwogCXN0cnVjdCBnZW5kaXNrICpkaXNrID0gZmxvcHB5LT5kaXNrOwogCXN0cnVjdCBpZGVfYXRhcGlfcGMgcGM7CiAJdTggKnBhZ2U7CkBAIC00NzUsMTcgKzM1NSwxNiBAQAogCWlkZV9mbG9wcHlfY3JlYXRlX21vZGVfc2Vuc2VfY21kKCZwYywgSURFRkxPUFBZX0ZMRVhJQkxFX0RJU0tfUEFHRSk7CiAKIAlpZiAoaWRlX3F1ZXVlX3BjX3RhaWwoZHJpdmUsIGRpc2ssICZwYykpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJpZGUtZmxvcHB5OiBDYW4ndCBnZXQgZmxleGlibGUgZGlzayBwYWdlIgotCQkJCSIgcGFyYW1ldGVyc1xuIik7CisJCXByaW50ayhLRVJOX0VSUiBQRlggIkNhbid0IGdldCBmbGV4aWJsZSBkaXNrIHBhZ2UgcGFyYW1zXG4iKTsKIAkJcmV0dXJuIDE7CiAJfQogCiAJaWYgKHBjLmJ1ZlszXSAmIDB4ODApCi0JCWRyaXZlLT5hdGFwaV9mbGFncyB8PSBJREVfQUZMQUdfV1A7CisJCWRyaXZlLT5kZXZfZmxhZ3MgfD0gSURFX0RGTEFHX1dQOwogCWVsc2UKLQkJZHJpdmUtPmF0YXBpX2ZsYWdzICY9IH5JREVfQUZMQUdfV1A7CisJCWRyaXZlLT5kZXZfZmxhZ3MgJj0gfklERV9ERkxBR19XUDsKIAotCXNldF9kaXNrX3JvKGRpc2ssICEhKGRyaXZlLT5hdGFwaV9mbGFncyAmIElERV9BRkxBR19XUCkpOworCXNldF9kaXNrX3JvKGRpc2ssICEhKGRyaXZlLT5kZXZfZmxhZ3MgJiBJREVfREZMQUdfV1ApKTsKIAogCXBhZ2UgPSAmcGMuYnVmWzhdOwogCkBAIC00OTksNyArMzc4LDcgQEAKIAljYXBhY2l0eSA9IGN5bHMgKiBoZWFkcyAqIHNlY3RvcnMgKiBzZWN0b3Jfc2l6ZTsKIAogCWlmIChtZW1jbXAocGFnZSwgJmZsb3BweS0+ZmxleGlibGVfZGlza19wYWdlLCAzMikpCi0JCXByaW50ayhLRVJOX0lORk8gIiVzOiAlZGtCLCAlZC8lZC8lZCBDSFMsICVkIGtCcHMsICIKKwkJcHJpbnRrKEtFUk5fSU5GTyBQRlggIiVzOiAlZGtCLCAlZC8lZC8lZCBDSFMsICVkIGtCcHMsICIKIAkJCQkiJWQgc2VjdG9yIHNpemUsICVkIHJwbVxuIiwKIAkJCQlkcml2ZS0+bmFtZSwgY2FwYWNpdHkgLyAxMDI0LCBjeWxzLCBoZWFkcywKIAkJCQlzZWN0b3JzLCB0cmFuc2Zlcl9yYXRlIC8gOCwgc2VjdG9yX3NpemUsIHJwbSk7CkBAIC01MTEsMTIgKzM5MCwxNCBAQAogCWxiYV9jYXBhY2l0eSA9IGZsb3BweS0+YmxvY2tzICogZmxvcHB5LT5ibG9ja19zaXplOwogCiAJaWYgKGNhcGFjaXR5IDwgbGJhX2NhcGFjaXR5KSB7Ci0JCXByaW50ayhLRVJOX05PVElDRSAiJXM6IFRoZSBkaXNrIHJlcG9ydHMgYSBjYXBhY2l0eSBvZiAlZCAiCisJCXByaW50ayhLRVJOX05PVElDRSBQRlggIiVzOiBUaGUgZGlzayByZXBvcnRzIGEgY2FwYWNpdHkgb2YgJWQgIgogCQkJImJ5dGVzLCBidXQgdGhlIGRyaXZlIG9ubHkgaGFuZGxlcyAlZFxuIiwKIAkJCWRyaXZlLT5uYW1lLCBsYmFfY2FwYWNpdHksIGNhcGFjaXR5KTsKIAkJZmxvcHB5LT5ibG9ja3MgPSBmbG9wcHktPmJsb2NrX3NpemUgPwogCQkJY2FwYWNpdHkgLyBmbG9wcHktPmJsb2NrX3NpemUgOiAwOworCQlkcml2ZS0+Y2FwYWNpdHk2NCA9IGZsb3BweS0+YmxvY2tzICogZmxvcHB5LT5ic19mYWN0b3I7CiAJfQorCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTUyNiw3ICs0MDcsNyBAQAogICovCiBzdGF0aWMgaW50IGlkZV9mbG9wcHlfZ2V0X2NhcGFjaXR5KGlkZV9kcml2ZV90ICpkcml2ZSkKIHsKLQlpZGVmbG9wcHlfZmxvcHB5X3QgKmZsb3BweSA9IGRyaXZlLT5kcml2ZXJfZGF0YTsKKwlzdHJ1Y3QgaWRlX2Rpc2tfb2JqICpmbG9wcHkgPSBkcml2ZS0+ZHJpdmVyX2RhdGE7CiAJc3RydWN0IGdlbmRpc2sgKmRpc2sgPSBmbG9wcHktPmRpc2s7CiAJc3RydWN0IGlkZV9hdGFwaV9wYyBwYzsKIAl1OCAqY2FwX2Rlc2M7CkBAIC01MzcsMTEgKzQxOCwxMSBAQAogCWRyaXZlLT5iaW9zX2hlYWQgPSBkcml2ZS0+Ymlvc19zZWN0ID0gMDsKIAlmbG9wcHktPmJsb2NrcyA9IDA7CiAJZmxvcHB5LT5ic19mYWN0b3IgPSAxOwotCXNldF9jYXBhY2l0eShmbG9wcHktPmRpc2ssIDApOworCWRyaXZlLT5jYXBhY2l0eTY0ID0gMDsKIAogCWlkZV9mbG9wcHlfY3JlYXRlX3JlYWRfY2FwYWNpdHlfY21kKCZwYyk7CiAJaWYgKGlkZV9xdWV1ZV9wY190YWlsKGRyaXZlLCBkaXNrLCAmcGMpKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiaWRlLWZsb3BweTogQ2FuJ3QgZ2V0IGZsb3BweSBwYXJhbWV0ZXJzXG4iKTsKKwkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiQ2FuJ3QgZ2V0IGZsb3BweSBwYXJhbWV0ZXJzXG4iKTsKIAkJcmV0dXJuIDE7CiAJfQogCWhlYWRlcl9sZW4gPSBwYy5idWZbM107CkBAIC01NTQsOCArNDM1LDkgQEAKIAkJYmxvY2tzID0gYmUzMl90b19jcHVwKChfX2JlMzIgKikmcGMuYnVmW2Rlc2Nfc3RhcnRdKTsKIAkJbGVuZ3RoID0gYmUxNl90b19jcHVwKChfX2JlMTYgKikmcGMuYnVmW2Rlc2Nfc3RhcnQgKyA2XSk7CiAKLQkJZGVidWdfbG9nKCJEZXNjcmlwdG9yICVkOiAlZGtCLCAlZCBibG9ja3MsICVkIHNlY3RvciBzaXplXG4iLAotCQkJCWksIGJsb2NrcyAqIGxlbmd0aCAvIDEwMjQsIGJsb2NrcywgbGVuZ3RoKTsKKwkJaWRlX2RlYnVnX2xvZyhJREVfREJHX1BST0JFLCAiRGVzY3JpcHRvciAlZDogJWRrQiwgJWQgYmxvY2tzLCAiCisJCQkgICAgICAiJWQgc2VjdG9yIHNpemVcbiIsCisJCQkgICAgICBpLCBibG9ja3MgKiBsZW5ndGggLyAxMDI0LCBibG9ja3MsIGxlbmd0aCk7CiAKIAkJaWYgKGkpCiAJCQljb250aW51ZTsKQEAgLTU3NSwyMyArNDU3LDI2IEBACiAJCWNhc2UgQ0FQQUNJVFlfQ1VSUkVOVDoKIAkJCS8qIE5vcm1hbCBaaXAvTFMtMTIwIGRpc2tzICovCiAJCQlpZiAobWVtY21wKGNhcF9kZXNjLCAmZmxvcHB5LT5jYXBfZGVzYywgOCkpCi0JCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6ICVka0IsICVkIGJsb2NrcywgJWQgIgotCQkJCQkic2VjdG9yIHNpemVcbiIsIGRyaXZlLT5uYW1lLAotCQkJCQlibG9ja3MgKiBsZW5ndGggLyAxMDI0LCBibG9ja3MsIGxlbmd0aCk7CisJCQkJcHJpbnRrKEtFUk5fSU5GTyBQRlggIiVzOiAlZGtCLCAlZCBibG9ja3MsICVkICIKKwkJCQkgICAgICAgInNlY3RvciBzaXplXG4iLAorCQkJCSAgICAgICBkcml2ZS0+bmFtZSwgYmxvY2tzICogbGVuZ3RoIC8gMTAyNCwKKwkJCQkgICAgICAgYmxvY2tzLCBsZW5ndGgpOwogCQkJbWVtY3B5KCZmbG9wcHktPmNhcF9kZXNjLCBjYXBfZGVzYywgOCk7CiAKIAkJCWlmICghbGVuZ3RoIHx8IGxlbmd0aCAlIDUxMikgewotCQkJCXByaW50ayhLRVJOX05PVElDRSAiJXM6ICVkIGJ5dGVzIGJsb2NrIHNpemUgIgotCQkJCQkibm90IHN1cHBvcnRlZFxuIiwgZHJpdmUtPm5hbWUsIGxlbmd0aCk7CisJCQkJcHJpbnRrKEtFUk5fTk9USUNFIFBGWCAiJXM6ICVkIGJ5dGVzIGJsb2NrIHNpemUiCisJCQkJICAgICAgICIgbm90IHN1cHBvcnRlZFxuIiwgZHJpdmUtPm5hbWUsIGxlbmd0aCk7CiAJCQl9IGVsc2UgewogCQkJCWZsb3BweS0+YmxvY2tzID0gYmxvY2tzOwogCQkJCWZsb3BweS0+YmxvY2tfc2l6ZSA9IGxlbmd0aDsKIAkJCQlmbG9wcHktPmJzX2ZhY3RvciA9IGxlbmd0aCAvIDUxMjsKIAkJCQlpZiAoZmxvcHB5LT5ic19mYWN0b3IgIT0gMSkKLQkJCQkJcHJpbnRrKEtFUk5fTk9USUNFICIlczogd2FybmluZzogbm9uICIKLQkJCQkJCSI1MTIgYnl0ZXMgYmxvY2sgc2l6ZSBub3QgIgotCQkJCQkJImZ1bGx5IHN1cHBvcnRlZFxuIiwKLQkJCQkJCWRyaXZlLT5uYW1lKTsKKwkJCQkJcHJpbnRrKEtFUk5fTk9USUNFIFBGWCAiJXM6IFdhcm5pbmc6ICIKKwkJCQkJICAgICAgICJub24gNTEyIGJ5dGVzIGJsb2NrIHNpemUgbm90ICIKKwkJCQkJICAgICAgICJmdWxseSBzdXBwb3J0ZWRcbiIsCisJCQkJCSAgICAgICBkcml2ZS0+bmFtZSk7CisJCQkJZHJpdmUtPmNhcGFjaXR5NjQgPQorCQkJCQlmbG9wcHktPmJsb2NrcyAqIGZsb3BweS0+YnNfZmFjdG9yOwogCQkJCXJjID0gMDsKIAkJCX0KIAkJCWJyZWFrOwpAQCAtNjAwLDc0ICs0ODUsMzQgQEAKIAkJCSAqIFRoaXMgaXMgYSBLRVJOX0VSUiBzbyBpdCBhcHBlYXJzIG9uIHNjcmVlbgogCQkJICogZm9yIHRoZSB1c2VyIHRvIHNlZQogCQkJICovCi0JCQlwcmludGsoS0VSTl9FUlIgIiVzOiBObyBkaXNrIGluIGRyaXZlXG4iLCBkcml2ZS0+bmFtZSk7CisJCQlwcmludGsoS0VSTl9FUlIgUEZYICIlczogTm8gZGlzayBpbiBkcml2ZVxuIiwKKwkJCSAgICAgICBkcml2ZS0+bmFtZSk7CiAJCQlicmVhazsKIAkJY2FzZSBDQVBBQ0lUWV9JTlZBTElEOgotCQkJcHJpbnRrKEtFUk5fRVJSICIlczogSW52YWxpZCBjYXBhY2l0eSBmb3IgZGlzayAiCisJCQlwcmludGsoS0VSTl9FUlIgUEZYICIlczogSW52YWxpZCBjYXBhY2l0eSBmb3IgZGlzayAiCiAJCQkJImluIGRyaXZlXG4iLCBkcml2ZS0+bmFtZSk7CiAJCQlicmVhazsKIAkJfQotCQlkZWJ1Z19sb2coIkRlc2NyaXB0b3IgMCBDb2RlOiAlZFxuIiwKLQkJCSAgcGMuYnVmW2Rlc2Nfc3RhcnQgKyA0XSAmIDB4MDMpOworCQlpZGVfZGVidWdfbG9nKElERV9EQkdfUFJPQkUsICJEZXNjcmlwdG9yIDAgQ29kZTogJWRcbiIsCisJCQkgICAgICBwYy5idWZbZGVzY19zdGFydCArIDRdICYgMHgwMyk7CiAJfQogCiAJLyogQ2xpayEgZGlzayBkb2VzIG5vdCBzdXBwb3J0IGdldF9mbGV4aWJsZV9kaXNrX3BhZ2UgKi8KIAlpZiAoIShkcml2ZS0+YXRhcGlfZmxhZ3MgJiBJREVfQUZMQUdfQ0xJS19EUklWRSkpCiAJCSh2b2lkKSBpZGVfZmxvcHB5X2dldF9mbGV4aWJsZV9kaXNrX3BhZ2UoZHJpdmUpOwogCi0Jc2V0X2NhcGFjaXR5KGRpc2ssIGZsb3BweS0+YmxvY2tzICogZmxvcHB5LT5ic19mYWN0b3IpOwotCiAJcmV0dXJuIHJjOwogfQogCi1zdGF0aWMgc2VjdG9yX3QgaWRlZmxvcHB5X2NhcGFjaXR5KGlkZV9kcml2ZV90ICpkcml2ZSkKK3N0YXRpYyB2b2lkIGlkZV9mbG9wcHlfc2V0dXAoaWRlX2RyaXZlX3QgKmRyaXZlKQogewotCWlkZWZsb3BweV9mbG9wcHlfdCAqZmxvcHB5ID0gZHJpdmUtPmRyaXZlcl9kYXRhOwotCXVuc2lnbmVkIGxvbmcgY2FwYWNpdHkgPSBmbG9wcHktPmJsb2NrcyAqIGZsb3BweS0+YnNfZmFjdG9yOwotCi0JcmV0dXJuIGNhcGFjaXR5OwotfQotCi0jaWZkZWYgQ09ORklHX0lERV9QUk9DX0ZTCi1pZGVfZGV2c2V0X3J3X2ZpZWxkKGJpb3NfY3lsLCBiaW9zX2N5bCk7Ci1pZGVfZGV2c2V0X3J3X2ZpZWxkKGJpb3NfaGVhZCwgYmlvc19oZWFkKTsKLWlkZV9kZXZzZXRfcndfZmllbGQoYmlvc19zZWN0LCBiaW9zX3NlY3QpOwotCi1zdGF0aWMgaW50IGdldF90aWNrcyhpZGVfZHJpdmVfdCAqZHJpdmUpCi17Ci0JaWRlZmxvcHB5X2Zsb3BweV90ICpmbG9wcHkgPSBkcml2ZS0+ZHJpdmVyX2RhdGE7Ci0JcmV0dXJuIGZsb3BweS0+dGlja3M7Ci19Ci0KLXN0YXRpYyBpbnQgc2V0X3RpY2tzKGlkZV9kcml2ZV90ICpkcml2ZSwgaW50IGFyZykKLXsKLQlpZGVmbG9wcHlfZmxvcHB5X3QgKmZsb3BweSA9IGRyaXZlLT5kcml2ZXJfZGF0YTsKLQlmbG9wcHktPnRpY2tzID0gYXJnOwotCXJldHVybiAwOwotfQotCi1JREVfREVWU0VUKHRpY2tzLCBEU19TWU5DLCBnZXRfdGlja3MsIHNldF90aWNrcyk7Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgaWRlX3Byb2NfZGV2c2V0IGlkZWZsb3BweV9zZXR0aW5nc1tdID0gewotCUlERV9QUk9DX0RFVlNFVChiaW9zX2N5bCwgIDAsIDEwMjMpLAotCUlERV9QUk9DX0RFVlNFVChiaW9zX2hlYWQsIDAsICAyNTUpLAotCUlERV9QUk9DX0RFVlNFVChiaW9zX3NlY3QsIDAsICAgNjMpLAotCUlERV9QUk9DX0RFVlNFVCh0aWNrcywJICAgMCwgIDI1NSksCi0JeyAwIH0sCi19OwotI2VuZGlmCi0KLXN0YXRpYyB2b2lkIGlkZWZsb3BweV9zZXR1cChpZGVfZHJpdmVfdCAqZHJpdmUsIGlkZWZsb3BweV9mbG9wcHlfdCAqZmxvcHB5KQoteworCXN0cnVjdCBpZGVfZGlza19vYmogKmZsb3BweSA9IGRyaXZlLT5kcml2ZXJfZGF0YTsKIAl1MTYgKmlkID0gZHJpdmUtPmlkOwotCXU4IGdjd1syXTsKIAotCSooKHUxNiAqKSZnY3cpID0gaWRbQVRBX0lEX0NPTkZJR107CisJZHJpdmUtPnBjX2NhbGxiYWNrCSA9IGlkZV9mbG9wcHlfY2FsbGJhY2s7CisJZHJpdmUtPnBjX3VwZGF0ZV9idWZmZXJzID0gaWRlZmxvcHB5X3VwZGF0ZV9idWZmZXJzOworCWRyaXZlLT5wY19pb19idWZmZXJzCSA9IGlkZV9pb19idWZmZXJzOwogCi0JZHJpdmUtPnBjX2NhbGxiYWNrID0gaWRlX2Zsb3BweV9jYWxsYmFjazsKLQotCWlmICgoKGdjd1swXSAmIDB4NjApID4+IDUpID09IDEpCi0JCWRyaXZlLT5hdGFwaV9mbGFncyB8PSBJREVfQUZMQUdfRFJRX0lOVEVSUlVQVDsKIAkvKgogCSAqIFdlIHVzZWQgdG8gY2hlY2sgcmV2aXNpb25zIGhlcmUuIEF0IHRoaXMgcG9pbnQgaG93ZXZlciBJJ20gZ2l2aW5nIHVwLgogCSAqIEp1c3QgYXNzdW1lIHRoZXkgYXJlIGFsbCBicm9rZW4sIGl0cyBlYXNpZXIuCkBAIC02ODAsNyArNTI1LDcgQEAKIAlpZiAoIXN0cm5jbXAoKGNoYXIgKikmaWRbQVRBX0lEX1BST0RdLCAiSU9NRUdBIFpJUCAxMDAgQVRBUEkiLCAyMCkpIHsKIAkJZHJpdmUtPmF0YXBpX2ZsYWdzIHw9IElERV9BRkxBR19aSVBfRFJJVkU7CiAJCS8qIFRoaXMgdmFsdWUgd2lsbCBiZSB2aXNpYmxlIGluIHRoZSAvcHJvYy9pZGUvaGR4L3NldHRpbmdzICovCi0JCWZsb3BweS0+dGlja3MgPSBJREVGTE9QUFlfVElDS1NfREVMQVk7CisJCWRyaXZlLT5wY19kZWxheSA9IElERUZMT1BQWV9QQ19ERUxBWTsKIAkJYmxrX3F1ZXVlX21heF9zZWN0b3JzKGRyaXZlLT5xdWV1ZSwgNjQpOwogCX0KIApAQCAtNjkyLDMxNiArNTM3LDQyIEBACiAJCWJsa19xdWV1ZV9tYXhfc2VjdG9ycyhkcml2ZS0+cXVldWUsIDY0KTsKIAkJZHJpdmUtPmF0YXBpX2ZsYWdzIHw9IElERV9BRkxBR19DTElLX0RSSVZFOwogCQkvKiBJT01FR0EgQ2xpayEgZHJpdmVzIGRvIG5vdCBzdXBwb3J0IGxvY2svdW5sb2NrIGNvbW1hbmRzICovCi0JCWRyaXZlLT5hdGFwaV9mbGFncyB8PSBJREVfQUZMQUdfTk9fRE9PUkxPQ0s7CisJCWRyaXZlLT5kZXZfZmxhZ3MgJj0gfklERV9ERkxBR19ET09STE9DS0lORzsKIAl9CiAKIAkodm9pZCkgaWRlX2Zsb3BweV9nZXRfY2FwYWNpdHkoZHJpdmUpOwogCiAJaWRlX3Byb2NfcmVnaXN0ZXJfZHJpdmVyKGRyaXZlLCBmbG9wcHktPmRyaXZlcik7CisKKwlkcml2ZS0+ZGV2X2ZsYWdzIHw9IElERV9ERkxBR19BVFRBQ0g7CiB9CiAKLXN0YXRpYyB2b2lkIGlkZV9mbG9wcHlfcmVtb3ZlKGlkZV9kcml2ZV90ICpkcml2ZSkKK3N0YXRpYyB2b2lkIGlkZV9mbG9wcHlfZmx1c2goaWRlX2RyaXZlX3QgKmRyaXZlKQogewotCWlkZWZsb3BweV9mbG9wcHlfdCAqZmxvcHB5ID0gZHJpdmUtPmRyaXZlcl9kYXRhOwotCXN0cnVjdCBnZW5kaXNrICpnID0gZmxvcHB5LT5kaXNrOwotCi0JaWRlX3Byb2NfdW5yZWdpc3Rlcl9kcml2ZXIoZHJpdmUsIGZsb3BweS0+ZHJpdmVyKTsKLQotCWRlbF9nZW5kaXNrKGcpOwotCi0JaWRlX2Zsb3BweV9wdXQoZmxvcHB5KTsKIH0KIAotc3RhdGljIHZvaWQgaWRlZmxvcHB5X2NsZWFudXBfb2JqKHN0cnVjdCBrcmVmICprcmVmKQorc3RhdGljIGludCBpZGVfZmxvcHB5X2luaXRfbWVkaWEoaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgZ2VuZGlzayAqZGlzaykKIHsKLQlzdHJ1Y3QgaWRlX2Zsb3BweV9vYmogKmZsb3BweSA9IHRvX2lkZV9mbG9wcHkoa3JlZik7Ci0JaWRlX2RyaXZlX3QgKmRyaXZlID0gZmxvcHB5LT5kcml2ZTsKLQlzdHJ1Y3QgZ2VuZGlzayAqZyA9IGZsb3BweS0+ZGlzazsKLQotCWRyaXZlLT5kcml2ZXJfZGF0YSA9IE5VTEw7Ci0JZy0+cHJpdmF0ZV9kYXRhID0gTlVMTDsKLQlwdXRfZGlzayhnKTsKLQlrZnJlZShmbG9wcHkpOwotfQotCi0jaWZkZWYgQ09ORklHX0lERV9QUk9DX0ZTCi1zdGF0aWMgaW50IHByb2NfaWRlZmxvcHB5X3JlYWRfY2FwYWNpdHkoY2hhciAqcGFnZSwgY2hhciAqKnN0YXJ0LCBvZmZfdCBvZmYsCi0JCWludCBjb3VudCwgaW50ICplb2YsIHZvaWQgKmRhdGEpCi17Ci0JaWRlX2RyaXZlX3QqZHJpdmUgPSAoaWRlX2RyaXZlX3QgKilkYXRhOwotCWludCBsZW47Ci0KLQlsZW4gPSBzcHJpbnRmKHBhZ2UsICIlbGx1XG4iLCAobG9uZyBsb25nKWlkZWZsb3BweV9jYXBhY2l0eShkcml2ZSkpOwotCVBST0NfSURFX1JFQURfUkVUVVJOKHBhZ2UsIHN0YXJ0LCBvZmYsIGNvdW50LCBlb2YsIGxlbik7Ci19Ci0KLXN0YXRpYyBpZGVfcHJvY19lbnRyeV90IGlkZWZsb3BweV9wcm9jW10gPSB7Ci0JeyAiY2FwYWNpdHkiLAlTX0lGUkVHfFNfSVJVR08sIHByb2NfaWRlZmxvcHB5X3JlYWRfY2FwYWNpdHksCU5VTEwgfSwKLQl7ICJnZW9tZXRyeSIsCVNfSUZSRUd8U19JUlVHTywgcHJvY19pZGVfcmVhZF9nZW9tZXRyeSwJTlVMTCB9LAotCXsgTlVMTCwgMCwgTlVMTCwgTlVMTCB9Ci19OwotI2VuZGlmCS8qIENPTkZJR19JREVfUFJPQ19GUyAqLwotCi1zdGF0aWMgaW50IGlkZV9mbG9wcHlfcHJvYmUoaWRlX2RyaXZlX3QgKik7Ci0KLXN0YXRpYyBpZGVfZHJpdmVyX3QgaWRlZmxvcHB5X2RyaXZlciA9IHsKLQkuZ2VuX2RyaXZlciA9IHsKLQkJLm93bmVyCQk9IFRISVNfTU9EVUxFLAotCQkubmFtZQkJPSAiaWRlLWZsb3BweSIsCi0JCS5idXMJCT0gJmlkZV9idXNfdHlwZSwKLQl9LAotCS5wcm9iZQkJCT0gaWRlX2Zsb3BweV9wcm9iZSwKLQkucmVtb3ZlCQkJPSBpZGVfZmxvcHB5X3JlbW92ZSwKLQkudmVyc2lvbgkJPSBJREVGTE9QUFlfVkVSU0lPTiwKLQkubWVkaWEJCQk9IGlkZV9mbG9wcHksCi0JLmRvX3JlcXVlc3QJCT0gaWRlZmxvcHB5X2RvX3JlcXVlc3QsCi0JLmVuZF9yZXF1ZXN0CQk9IGlkZWZsb3BweV9lbmRfcmVxdWVzdCwKLQkuZXJyb3IJCQk9IF9faWRlX2Vycm9yLAotI2lmZGVmIENPTkZJR19JREVfUFJPQ19GUwotCS5wcm9jCQkJPSBpZGVmbG9wcHlfcHJvYywKLQkuc2V0dGluZ3MJCT0gaWRlZmxvcHB5X3NldHRpbmdzLAotI2VuZGlmCi19OwotCi1zdGF0aWMgaW50IGlkZWZsb3BweV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwKQotewotCXN0cnVjdCBnZW5kaXNrICpkaXNrID0gaW5vZGUtPmlfYmRldi0+YmRfZGlzazsKLQlzdHJ1Y3QgaWRlX2Zsb3BweV9vYmogKmZsb3BweTsKLQlpZGVfZHJpdmVfdCAqZHJpdmU7CiAJaW50IHJldCA9IDA7CiAKLQlkZWJ1Z19sb2coIlJlYWNoZWQgJXNcbiIsIF9fZnVuY19fKTsKKwlpZiAoaWRlX2RvX3Rlc3RfdW5pdF9yZWFkeShkcml2ZSwgZGlzaykpCisJCWlkZV9kb19zdGFydF9zdG9wKGRyaXZlLCBkaXNrLCAxKTsKIAotCWZsb3BweSA9IGlkZV9mbG9wcHlfZ2V0KGRpc2spOwotCWlmICghZmxvcHB5KQotCQlyZXR1cm4gLUVOWElPOworCXJldCA9IGlkZV9mbG9wcHlfZ2V0X2NhcGFjaXR5KGRyaXZlKTsKIAotCWRyaXZlID0gZmxvcHB5LT5kcml2ZTsKKwlzZXRfY2FwYWNpdHkoZGlzaywgaWRlX2dkX2NhcGFjaXR5KGRyaXZlKSk7CiAKLQlmbG9wcHktPm9wZW5lcnMrKzsKLQotCWlmIChmbG9wcHktPm9wZW5lcnMgPT0gMSkgewotCQlkcml2ZS0+YXRhcGlfZmxhZ3MgJj0gfklERV9BRkxBR19GT1JNQVRfSU5fUFJPR1JFU1M7Ci0JCS8qIEp1c3QgaW4gY2FzZSAqLwotCi0JCWlmIChpZGVfZG9fdGVzdF91bml0X3JlYWR5KGRyaXZlLCBkaXNrKSkKLQkJCWlkZV9kb19zdGFydF9zdG9wKGRyaXZlLCBkaXNrLCAxKTsKLQotCQlpZiAoaWRlX2Zsb3BweV9nZXRfY2FwYWNpdHkoZHJpdmUpCi0JCSAgICYmIChmaWxwLT5mX2ZsYWdzICYgT19OREVMQVkpID09IDAKLQkJICAgIC8qCi0JCSAgICAgKiBBbGxvdyBPX05ERUxBWSB0byBvcGVuIGEgZHJpdmUgd2l0aG91dCBhIGRpc2ssIG9yIHdpdGggYW4KLQkJICAgICAqIHVucmVhZGFibGUgZGlzaywgc28gdGhhdCB3ZSBjYW4gZ2V0IHRoZSBmb3JtYXQgY2FwYWNpdHkKLQkJICAgICAqIG9mIHRoZSBkcml2ZSBvciBiZWdpbiB0aGUgZm9ybWF0IC0gU2FtCi0JCSAgICAgKi8KLQkJICAgICkgewotCQkJcmV0ID0gLUVJTzsKLQkJCWdvdG8gb3V0X3B1dF9mbG9wcHk7Ci0JCX0KLQotCQlpZiAoKGRyaXZlLT5hdGFwaV9mbGFncyAmIElERV9BRkxBR19XUCkgJiYgKGZpbHAtPmZfbW9kZSAmIDIpKSB7Ci0JCQlyZXQgPSAtRVJPRlM7Ci0JCQlnb3RvIG91dF9wdXRfZmxvcHB5OwotCQl9Ci0KLQkJZHJpdmUtPmF0YXBpX2ZsYWdzIHw9IElERV9BRkxBR19NRURJQV9DSEFOR0VEOwotCQlpZGVfc2V0X21lZGlhX2xvY2soZHJpdmUsIGRpc2ssIDEpOwotCQljaGVja19kaXNrX2NoYW5nZShpbm9kZS0+aV9iZGV2KTsKLQl9IGVsc2UgaWYgKGRyaXZlLT5hdGFwaV9mbGFncyAmIElERV9BRkxBR19GT1JNQVRfSU5fUFJPR1JFU1MpIHsKLQkJcmV0ID0gLUVCVVNZOwotCQlnb3RvIG91dF9wdXRfZmxvcHB5OwotCX0KLQlyZXR1cm4gMDsKLQotb3V0X3B1dF9mbG9wcHk6Ci0JZmxvcHB5LT5vcGVuZXJzLS07Ci0JaWRlX2Zsb3BweV9wdXQoZmxvcHB5KTsKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IGlkZWZsb3BweV9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwKQotewotCXN0cnVjdCBnZW5kaXNrICpkaXNrID0gaW5vZGUtPmlfYmRldi0+YmRfZGlzazsKLQlzdHJ1Y3QgaWRlX2Zsb3BweV9vYmogKmZsb3BweSA9IGlkZV9mbG9wcHlfZyhkaXNrKTsKLQlpZGVfZHJpdmVfdCAqZHJpdmUgPSBmbG9wcHktPmRyaXZlOwotCi0JZGVidWdfbG9nKCJSZWFjaGVkICVzXG4iLCBfX2Z1bmNfXyk7Ci0KLQlpZiAoZmxvcHB5LT5vcGVuZXJzID09IDEpIHsKLQkJaWRlX3NldF9tZWRpYV9sb2NrKGRyaXZlLCBkaXNrLCAwKTsKLQkJZHJpdmUtPmF0YXBpX2ZsYWdzICY9IH5JREVfQUZMQUdfRk9STUFUX0lOX1BST0dSRVNTOwotCX0KLQotCWZsb3BweS0+b3BlbmVycy0tOwotCi0JaWRlX2Zsb3BweV9wdXQoZmxvcHB5KTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGlkZWZsb3BweV9nZXRnZW8oc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgc3RydWN0IGhkX2dlb21ldHJ5ICpnZW8pCi17Ci0Jc3RydWN0IGlkZV9mbG9wcHlfb2JqICpmbG9wcHkgPSBpZGVfZmxvcHB5X2coYmRldi0+YmRfZGlzayk7Ci0JaWRlX2RyaXZlX3QgKmRyaXZlID0gZmxvcHB5LT5kcml2ZTsKLQotCWdlby0+aGVhZHMgPSBkcml2ZS0+Ymlvc19oZWFkOwotCWdlby0+c2VjdG9ycyA9IGRyaXZlLT5iaW9zX3NlY3Q7Ci0JZ2VvLT5jeWxpbmRlcnMgPSAodTE2KWRyaXZlLT5iaW9zX2N5bDsgLyogdHJ1bmNhdGUgKi8KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBpZGVfZmxvcHB5X2xvY2tkb29yKGlkZV9kcml2ZV90ICpkcml2ZSwgc3RydWN0IGlkZV9hdGFwaV9wYyAqcGMsCi0JCQkgICAgICAgdW5zaWduZWQgbG9uZyBhcmcsIHVuc2lnbmVkIGludCBjbWQpCi17Ci0JaWRlZmxvcHB5X2Zsb3BweV90ICpmbG9wcHkgPSBkcml2ZS0+ZHJpdmVyX2RhdGE7Ci0Jc3RydWN0IGdlbmRpc2sgKmRpc2sgPSBmbG9wcHktPmRpc2s7Ci0JaW50IHByZXZlbnQgPSAoYXJnICYmIGNtZCAhPSBDRFJPTUVKRUNUKSA/IDEgOiAwOwotCi0JaWYgKGZsb3BweS0+b3BlbmVycyA+IDEpCi0JCXJldHVybiAtRUJVU1k7Ci0KLQlpZGVfc2V0X21lZGlhX2xvY2soZHJpdmUsIGRpc2ssIHByZXZlbnQpOwotCi0JaWYgKGNtZCA9PSBDRFJPTUVKRUNUKQotCQlpZGVfZG9fc3RhcnRfc3RvcChkcml2ZSwgZGlzaywgMik7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBpZGVmbG9wcHlfaW9jdGwoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUsCi0JCQl1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKLXsKLQlzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2ID0gaW5vZGUtPmlfYmRldjsKLQlzdHJ1Y3QgaWRlX2Zsb3BweV9vYmogKmZsb3BweSA9IGlkZV9mbG9wcHlfZyhiZGV2LT5iZF9kaXNrKTsKLQlpZGVfZHJpdmVfdCAqZHJpdmUgPSBmbG9wcHktPmRyaXZlOwotCXN0cnVjdCBpZGVfYXRhcGlfcGMgcGM7Ci0Jdm9pZCBfX3VzZXIgKmFyZ3AgPSAodm9pZCBfX3VzZXIgKilhcmc7Ci0JaW50IGVycjsKLQotCWlmIChjbWQgPT0gQ0RST01FSkVDVCB8fCBjbWQgPT0gQ0RST01fTE9DS0RPT1IpCi0JCXJldHVybiBpZGVfZmxvcHB5X2xvY2tkb29yKGRyaXZlLCAmcGMsIGFyZywgY21kKTsKLQotCWVyciA9IGlkZV9mbG9wcHlfZm9ybWF0X2lvY3RsKGRyaXZlLCBmaWxlLCBjbWQsIGFyZ3ApOwotCWlmIChlcnIgIT0gLUVOT1RUWSkKLQkJcmV0dXJuIGVycjsKLQotCS8qCi0JICogc2tpcCBTQ1NJX0lPQ1RMX1NFTkRfQ09NTUFORCAoZGVwcmVjYXRlZCkKLQkgKiBhbmQgQ0RST01fU0VORF9QQUNLRVQgKGxlZ2FjeSkgaW9jdGxzCi0JICovCi0JaWYgKGNtZCAhPSBDRFJPTV9TRU5EX1BBQ0tFVCAmJiBjbWQgIT0gU0NTSV9JT0NUTF9TRU5EX0NPTU1BTkQpCi0JCWVyciA9IHNjc2lfY21kX2lvY3RsKGZpbGUsIGJkZXYtPmJkX2Rpc2stPnF1ZXVlLAotCQkJCQliZGV2LT5iZF9kaXNrLCBjbWQsIGFyZ3ApOwotCi0JaWYgKGVyciA9PSAtRU5PVFRZKQotCQllcnIgPSBnZW5lcmljX2lkZV9pb2N0bChkcml2ZSwgZmlsZSwgYmRldiwgY21kLCBhcmcpOwotCi0JcmV0dXJuIGVycjsKLX0KLQotc3RhdGljIGludCBpZGVmbG9wcHlfbWVkaWFfY2hhbmdlZChzdHJ1Y3QgZ2VuZGlzayAqZGlzaykKLXsKLQlzdHJ1Y3QgaWRlX2Zsb3BweV9vYmogKmZsb3BweSA9IGlkZV9mbG9wcHlfZyhkaXNrKTsKLQlpZGVfZHJpdmVfdCAqZHJpdmUgPSBmbG9wcHktPmRyaXZlOwotCWludCByZXQ7Ci0KLQkvKiBkbyBub3Qgc2NhbiBwYXJ0aXRpb25zIHR3aWNlIGlmIHRoaXMgaXMgYSByZW1vdmFibGUgZGV2aWNlICovCi0JaWYgKGRyaXZlLT5hdHRhY2gpIHsKLQkJZHJpdmUtPmF0dGFjaCA9IDA7Ci0JCXJldHVybiAwOwotCX0KLQlyZXQgPSAhIShkcml2ZS0+YXRhcGlfZmxhZ3MgJiBJREVfQUZMQUdfTUVESUFfQ0hBTkdFRCk7Ci0JZHJpdmUtPmF0YXBpX2ZsYWdzICY9IH5JREVfQUZMQUdfTUVESUFfQ0hBTkdFRDsKLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgaW50IGlkZWZsb3BweV9yZXZhbGlkYXRlX2Rpc2soc3RydWN0IGdlbmRpc2sgKmRpc2spCi17Ci0Jc3RydWN0IGlkZV9mbG9wcHlfb2JqICpmbG9wcHkgPSBpZGVfZmxvcHB5X2coZGlzayk7Ci0Jc2V0X2NhcGFjaXR5KGRpc2ssIGlkZWZsb3BweV9jYXBhY2l0eShmbG9wcHktPmRyaXZlKSk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgYmxvY2tfZGV2aWNlX29wZXJhdGlvbnMgaWRlZmxvcHB5X29wcyA9IHsKLQkub3duZXIJCQk9IFRISVNfTU9EVUxFLAotCS5vcGVuCQkJPSBpZGVmbG9wcHlfb3BlbiwKLQkucmVsZWFzZQkJPSBpZGVmbG9wcHlfcmVsZWFzZSwKLQkuaW9jdGwJCQk9IGlkZWZsb3BweV9pb2N0bCwKLQkuZ2V0Z2VvCQkJPSBpZGVmbG9wcHlfZ2V0Z2VvLAotCS5tZWRpYV9jaGFuZ2VkCQk9IGlkZWZsb3BweV9tZWRpYV9jaGFuZ2VkLAotCS5yZXZhbGlkYXRlX2Rpc2sJPSBpZGVmbG9wcHlfcmV2YWxpZGF0ZV9kaXNrCitjb25zdCBzdHJ1Y3QgaWRlX2Rpc2tfb3BzIGlkZV9hdGFwaV9kaXNrX29wcyA9IHsKKwkuY2hlY2sJCT0gaWRlX2NoZWNrX2F0YXBpX2RldmljZSwKKwkuZ2V0X2NhcGFjaXR5CT0gaWRlX2Zsb3BweV9nZXRfY2FwYWNpdHksCisJLnNldHVwCQk9IGlkZV9mbG9wcHlfc2V0dXAsCisJLmZsdXNoCQk9IGlkZV9mbG9wcHlfZmx1c2gsCisJLmluaXRfbWVkaWEJPSBpZGVfZmxvcHB5X2luaXRfbWVkaWEsCisJLnNldF9kb29ybG9jawk9IGlkZV9zZXRfbWVkaWFfbG9jaywKKwkuZG9fcmVxdWVzdAk9IGlkZV9mbG9wcHlfZG9fcmVxdWVzdCwKKwkuZW5kX3JlcXVlc3QJPSBpZGVfZmxvcHB5X2VuZF9yZXF1ZXN0LAorCS5pb2N0bAkJPSBpZGVfZmxvcHB5X2lvY3RsLAogfTsKLQotc3RhdGljIGludCBpZGVfZmxvcHB5X3Byb2JlKGlkZV9kcml2ZV90ICpkcml2ZSkKLXsKLQlpZGVmbG9wcHlfZmxvcHB5X3QgKmZsb3BweTsKLQlzdHJ1Y3QgZ2VuZGlzayAqZzsKLQotCWlmICghc3Ryc3RyKCJpZGUtZmxvcHB5IiwgZHJpdmUtPmRyaXZlcl9yZXEpKQotCQlnb3RvIGZhaWxlZDsKLQotCWlmIChkcml2ZS0+bWVkaWEgIT0gaWRlX2Zsb3BweSkKLQkJZ290byBmYWlsZWQ7Ci0KLQlpZiAoIWlkZV9jaGVja19hdGFwaV9kZXZpY2UoZHJpdmUsIERSVl9OQU1FKSkgewotCQlwcmludGsoS0VSTl9FUlIgImlkZS1mbG9wcHk6ICVzOiBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgdmVyc2lvbiIKLQkJCQkiIG9mIGlkZS1mbG9wcHlcbiIsIGRyaXZlLT5uYW1lKTsKLQkJZ290byBmYWlsZWQ7Ci0JfQotCWZsb3BweSA9IGt6YWxsb2Moc2l6ZW9mKGlkZWZsb3BweV9mbG9wcHlfdCksIEdGUF9LRVJORUwpOwotCWlmICghZmxvcHB5KSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiaWRlLWZsb3BweTogJXM6IENhbid0IGFsbG9jYXRlIGEgZmxvcHB5IgotCQkJCSIgc3RydWN0dXJlXG4iLCBkcml2ZS0+bmFtZSk7Ci0JCWdvdG8gZmFpbGVkOwotCX0KLQotCWcgPSBhbGxvY19kaXNrKDEgPDwgUEFSVE5fQklUUyk7Ci0JaWYgKCFnKQotCQlnb3RvIG91dF9mcmVlX2Zsb3BweTsKLQotCWlkZV9pbml0X2Rpc2soZywgZHJpdmUpOwotCi0Ja3JlZl9pbml0KCZmbG9wcHktPmtyZWYpOwotCi0JZmxvcHB5LT5kcml2ZSA9IGRyaXZlOwotCWZsb3BweS0+ZHJpdmVyID0gJmlkZWZsb3BweV9kcml2ZXI7Ci0JZmxvcHB5LT5kaXNrID0gZzsKLQotCWctPnByaXZhdGVfZGF0YSA9ICZmbG9wcHktPmRyaXZlcjsKLQotCWRyaXZlLT5kcml2ZXJfZGF0YSA9IGZsb3BweTsKLQotCWlkZWZsb3BweV9zZXR1cChkcml2ZSwgZmxvcHB5KTsKLQotCWctPm1pbm9ycyA9IDEgPDwgUEFSVE5fQklUUzsKLQlnLT5kcml2ZXJmc19kZXYgPSAmZHJpdmUtPmdlbmRldjsKLQlnLT5mbGFncyA9IGRyaXZlLT5yZW1vdmFibGUgPyBHRU5IRF9GTF9SRU1PVkFCTEUgOiAwOwotCWctPmZvcHMgPSAmaWRlZmxvcHB5X29wczsKLQlkcml2ZS0+YXR0YWNoID0gMTsKLQlhZGRfZGlzayhnKTsKLQlyZXR1cm4gMDsKLQotb3V0X2ZyZWVfZmxvcHB5OgotCWtmcmVlKGZsb3BweSk7Ci1mYWlsZWQ6Ci0JcmV0dXJuIC1FTk9ERVY7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fZXhpdCBpZGVmbG9wcHlfZXhpdCh2b2lkKQotewotCWRyaXZlcl91bnJlZ2lzdGVyKCZpZGVmbG9wcHlfZHJpdmVyLmdlbl9kcml2ZXIpOwotfQotCi1zdGF0aWMgaW50IF9faW5pdCBpZGVmbG9wcHlfaW5pdCh2b2lkKQotewotCXByaW50aygiaWRlLWZsb3BweSBkcml2ZXIgIiBJREVGTE9QUFlfVkVSU0lPTiAiXG4iKTsKLQlyZXR1cm4gZHJpdmVyX3JlZ2lzdGVyKCZpZGVmbG9wcHlfZHJpdmVyLmdlbl9kcml2ZXIpOwotfQotCi1NT0RVTEVfQUxJQVMoImlkZToqbS1mbG9wcHkqIik7Ci1NT0RVTEVfQUxJQVMoImlkZS1mbG9wcHkiKTsKLW1vZHVsZV9pbml0KGlkZWZsb3BweV9pbml0KTsKLW1vZHVsZV9leGl0KGlkZWZsb3BweV9leGl0KTsKLU1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLU1PRFVMRV9ERVNDUklQVElPTigiQVRBUEkgRkxPUFBZIERyaXZlciIpOwotCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9pZGUtZmxvcHB5LmggYi9kcml2ZXJzL2lkZS9pZGUtZmxvcHB5LmgKaW5kZXggZWNhZGMyYi4uYzE3MTI0ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvaWRlLWZsb3BweS5oCisrKyBiL2RyaXZlcnMvaWRlL2lkZS1mbG9wcHkuaApAQCAtMSw0MyArMSw5IEBACiAjaWZuZGVmIF9fSURFX0ZMT1BQWV9ICiAjZGVmaW5lIF9fSURFX0ZMT1BQWV9ICiAKLS8qCi0gKiBNb3N0IG9mIG91ciBnbG9iYWwgZGF0YSB3aGljaCB3ZSBuZWVkIHRvIHNhdmUgZXZlbiBhcyB3ZSBsZWF2ZSB0aGUgZHJpdmVyCi0gKiBkdWUgdG8gYW4gaW50ZXJydXB0IG9yIGEgdGltZXIgZXZlbnQgaXMgc3RvcmVkIGluIGEgdmFyaWFibGUgb2YgdHlwZQotICogaWRlZmxvcHB5X2Zsb3BweV90LCBkZWZpbmVkIGJlbG93LgotICovCi10eXBlZGVmIHN0cnVjdCBpZGVfZmxvcHB5X29iaiB7Ci0JaWRlX2RyaXZlX3QJKmRyaXZlOwotCWlkZV9kcml2ZXJfdAkqZHJpdmVyOwotCXN0cnVjdCBnZW5kaXNrCSpkaXNrOwotCXN0cnVjdCBrcmVmCWtyZWY7Ci0JdW5zaWduZWQgaW50CW9wZW5lcnM7CS8qIHByb3RlY3RlZCBieSBCS0wgZm9yIG5vdyAqLworI2luY2x1ZGUgImlkZS1nZC5oIgogCi0JLyogQ3VycmVudCBwYWNrZXQgY29tbWFuZCAqLwotCXN0cnVjdCBpZGVfYXRhcGlfcGMgKnBjOwotCS8qIExhc3QgZmFpbGVkIHBhY2tldCBjb21tYW5kICovCi0Jc3RydWN0IGlkZV9hdGFwaV9wYyAqZmFpbGVkX3BjOwotCS8qIHVzZWQgZm9yIGJsa197ZnMscGN9X3JlcXVlc3QoKSByZXF1ZXN0cyAqLwotCXN0cnVjdCBpZGVfYXRhcGlfcGMgcXVldWVkX3BjOwotCi0Jc3RydWN0IGlkZV9hdGFwaV9wYyByZXF1ZXN0X3NlbnNlX3BjOwotCXN0cnVjdCByZXF1ZXN0IHJlcXVlc3Rfc2Vuc2VfcnE7Ci0KLQkvKiBMYXN0IGVycm9yIGluZm9ybWF0aW9uICovCi0JdTggc2Vuc2Vfa2V5LCBhc2MsIGFzY3E7Ci0JLyogZGVsYXkgdGhpcyBsb25nIGJlZm9yZSBzZW5kaW5nIHBhY2tldCBjb21tYW5kICovCi0JdTggdGlja3M7Ci0JaW50IHByb2dyZXNzX2luZGljYXRpb247Ci0KLQkvKiBEZXZpY2UgaW5mb3JtYXRpb24gKi8KLQkvKiBDdXJyZW50IGZvcm1hdCAqLwotCWludCBibG9ja3MsIGJsb2NrX3NpemUsIGJzX2ZhY3RvcjsKLQkvKiBMYXN0IGZvcm1hdCBjYXBhY2l0eSBkZXNjcmlwdG9yICovCi0JdTggY2FwX2Rlc2NbOF07Ci0JLyogQ29weSBvZiB0aGUgZmxleGlibGUgZGlzayBwYWdlICovCi0JdTggZmxleGlibGVfZGlza19wYWdlWzMyXTsKLX0gaWRlZmxvcHB5X2Zsb3BweV90OwotCisjaWZkZWYgQ09ORklHX0lERV9HRF9BVEFQSQogLyoKICAqIFBhZ2VzIG9mIHRoZSBTRUxFQ1QgU0VOU0UgLyBNT0RFIFNFTlNFIHBhY2tldCBjb21tYW5kcy4KICAqIFNlZSBTRkYtODA3MGkgc3BlYy4KQEAgLTUyLDEyICsxOCwyMiBAQAogI2RlZmluZSBJREVGTE9QUFlfSU9DVExfRk9STUFUX0dFVF9QUk9HUkVTUwkweDQ2MDMKIAogLyogaWRlLWZsb3BweS5jICovCitleHRlcm4gY29uc3Qgc3RydWN0IGlkZV9kaXNrX29wcyBpZGVfYXRhcGlfZGlza19vcHM7CiB2b2lkIGlkZV9mbG9wcHlfY3JlYXRlX21vZGVfc2Vuc2VfY21kKHN0cnVjdCBpZGVfYXRhcGlfcGMgKiwgdTgpOwogdm9pZCBpZGVfZmxvcHB5X2NyZWF0ZV9yZWFkX2NhcGFjaXR5X2NtZChzdHJ1Y3QgaWRlX2F0YXBpX3BjICopOwotdm9pZCBpZGVfZmxvcHB5X2NyZWF0ZV9yZXF1ZXN0X3NlbnNlX2NtZChzdHJ1Y3QgaWRlX2F0YXBpX3BjICopOwogCiAvKiBpZGUtZmxvcHB5X2lvY3RsLmMgKi8KLWludCBpZGVfZmxvcHB5X2Zvcm1hdF9pb2N0bChpZGVfZHJpdmVfdCAqLCBzdHJ1Y3QgZmlsZSAqLCB1bnNpZ25lZCBpbnQsCi0JCQkgICAgdm9pZCBfX3VzZXIgKik7CitpbnQgaWRlX2Zsb3BweV9pb2N0bChpZGVfZHJpdmVfdCAqLCBzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGZpbGUgKiwgdW5zaWduZWQgaW50LAorCQkgICAgIHVuc2lnbmVkIGxvbmcpOworCisjaWZkZWYgQ09ORklHX0lERV9QUk9DX0ZTCisvKiBpZGUtZmxvcHB5X3Byb2MuYyAqLworZXh0ZXJuIGlkZV9wcm9jX2VudHJ5X3QgaWRlX2Zsb3BweV9wcm9jW107CitleHRlcm4gY29uc3Qgc3RydWN0IGlkZV9wcm9jX2RldnNldCBpZGVfZmxvcHB5X3NldHRpbmdzW107CisjZW5kaWYKKyNlbHNlCisjZGVmaW5lIGlkZV9mbG9wcHlfcHJvYwkJTlVMTAorI2RlZmluZSBpZGVfZmxvcHB5X3NldHRpbmdzCU5VTEwKKyNlbmRpZgogCiAjZW5kaWYgLypfX0lERV9GTE9QUFlfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvaWRlLWZsb3BweV9pb2N0bC5jIGIvZHJpdmVycy9pZGUvaWRlLWZsb3BweV9pb2N0bC5jCmluZGV4IDVmZmM0NTEuLjQwOWU0YzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2lkZS1mbG9wcHlfaW9jdGwuYworKysgYi9kcml2ZXJzL2lkZS9pZGUtZmxvcHB5X2lvY3RsLmMKQEAgLTMzLDcgKzMzLDcgQEAKIAogc3RhdGljIGludCBpZGVfZmxvcHB5X2dldF9mb3JtYXRfY2FwYWNpdGllcyhpZGVfZHJpdmVfdCAqZHJpdmUsIGludCBfX3VzZXIgKmFyZykKIHsKLQlzdHJ1Y3QgaWRlX2Zsb3BweV9vYmogKmZsb3BweSA9IGRyaXZlLT5kcml2ZXJfZGF0YTsKKwlzdHJ1Y3QgaWRlX2Rpc2tfb2JqICpmbG9wcHkgPSBkcml2ZS0+ZHJpdmVyX2RhdGE7CiAJc3RydWN0IGlkZV9hdGFwaV9wYyBwYzsKIAl1OCBoZWFkZXJfbGVuLCBkZXNjX2NudDsKIAlpbnQgaSwgYmxvY2tzLCBsZW5ndGgsIHVfYXJyYXlfc2l6ZSwgdV9pbmRleDsKQEAgLTExMyw3ICsxMTMsNyBAQAogCiBzdGF0aWMgaW50IGlkZV9mbG9wcHlfZ2V0X3NmcnBfYml0KGlkZV9kcml2ZV90ICpkcml2ZSkKIHsKLQlpZGVmbG9wcHlfZmxvcHB5X3QgKmZsb3BweSA9IGRyaXZlLT5kcml2ZXJfZGF0YTsKKwlzdHJ1Y3QgaWRlX2Rpc2tfb2JqICpmbG9wcHkgPSBkcml2ZS0+ZHJpdmVyX2RhdGE7CiAJc3RydWN0IGlkZV9hdGFwaV9wYyBwYzsKIAogCWRyaXZlLT5hdGFwaV9mbGFncyAmPSB+SURFX0FGTEFHX1NSRlA7CkBAIC0xMzIsMTcgKzEzMiwxNyBAQAogCiBzdGF0aWMgaW50IGlkZV9mbG9wcHlfZm9ybWF0X3VuaXQoaWRlX2RyaXZlX3QgKmRyaXZlLCBpbnQgX191c2VyICphcmcpCiB7Ci0JaWRlZmxvcHB5X2Zsb3BweV90ICpmbG9wcHkgPSBkcml2ZS0+ZHJpdmVyX2RhdGE7CisJc3RydWN0IGlkZV9kaXNrX29iaiAqZmxvcHB5ID0gZHJpdmUtPmRyaXZlcl9kYXRhOwogCXN0cnVjdCBpZGVfYXRhcGlfcGMgcGM7CiAJaW50IGJsb2NrcywgbGVuZ3RoLCBmbGFncywgZXJyID0gMDsKIAogCWlmIChmbG9wcHktPm9wZW5lcnMgPiAxKSB7CiAJCS8qIERvbid0IGZvcm1hdCBpZiBzb21lb25lIGlzIHVzaW5nIHRoZSBkaXNrICovCi0JCWRyaXZlLT5hdGFwaV9mbGFncyAmPSB+SURFX0FGTEFHX0ZPUk1BVF9JTl9QUk9HUkVTUzsKKwkJZHJpdmUtPmRldl9mbGFncyAmPSB+SURFX0RGTEFHX0ZPUk1BVF9JTl9QUk9HUkVTUzsKIAkJcmV0dXJuIC1FQlVTWTsKIAl9CiAKLQlkcml2ZS0+YXRhcGlfZmxhZ3MgfD0gSURFX0FGTEFHX0ZPUk1BVF9JTl9QUk9HUkVTUzsKKwlkcml2ZS0+ZGV2X2ZsYWdzIHw9IElERV9ERkxBR19GT1JNQVRfSU5fUFJPR1JFU1M7CiAKIAkvKgogCSAqIFNlbmQgQVRBUElfRk9STUFUX1VOSVQgdG8gdGhlIGRyaXZlLgpAQCAtMTc0LDcgKzE3NCw3IEBACiAKIG91dDoKIAlpZiAoZXJyKQotCQlkcml2ZS0+YXRhcGlfZmxhZ3MgJj0gfklERV9BRkxBR19GT1JNQVRfSU5fUFJPR1JFU1M7CisJCWRyaXZlLT5kZXZfZmxhZ3MgJj0gfklERV9ERkxBR19GT1JNQVRfSU5fUFJPR1JFU1M7CiAJcmV0dXJuIGVycjsKIH0KIApAQCAtMTkwLDEyICsxOTAsMTIgQEAKIAogc3RhdGljIGludCBpZGVfZmxvcHB5X2dldF9mb3JtYXRfcHJvZ3Jlc3MoaWRlX2RyaXZlX3QgKmRyaXZlLCBpbnQgX191c2VyICphcmcpCiB7Ci0JaWRlZmxvcHB5X2Zsb3BweV90ICpmbG9wcHkgPSBkcml2ZS0+ZHJpdmVyX2RhdGE7CisJc3RydWN0IGlkZV9kaXNrX29iaiAqZmxvcHB5ID0gZHJpdmUtPmRyaXZlcl9kYXRhOwogCXN0cnVjdCBpZGVfYXRhcGlfcGMgcGM7CiAJaW50IHByb2dyZXNzX2luZGljYXRpb24gPSAweDEwMDAwOwogCiAJaWYgKGRyaXZlLT5hdGFwaV9mbGFncyAmIElERV9BRkxBR19TUkZQKSB7Ci0JCWlkZV9mbG9wcHlfY3JlYXRlX3JlcXVlc3Rfc2Vuc2VfY21kKCZwYyk7CisJCWlkZV9jcmVhdGVfcmVxdWVzdF9zZW5zZV9jbWQoZHJpdmUsICZwYyk7CiAJCWlmIChpZGVfcXVldWVfcGNfdGFpbChkcml2ZSwgZmxvcHB5LT5kaXNrLCAmcGMpKQogCQkJcmV0dXJuIC1FSU87CiAKQEAgLTIyMyw4ICsyMjMsMjYgQEAKIAlyZXR1cm4gMDsKIH0KIAotaW50IGlkZV9mbG9wcHlfZm9ybWF0X2lvY3RsKGlkZV9kcml2ZV90ICpkcml2ZSwgc3RydWN0IGZpbGUgKmZpbGUsCi0JCQkgICAgdW5zaWduZWQgaW50IGNtZCwgdm9pZCBfX3VzZXIgKmFyZ3ApCitzdGF0aWMgaW50IGlkZV9mbG9wcHlfbG9ja2Rvb3IoaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgaWRlX2F0YXBpX3BjICpwYywKKwkJCSAgICAgICB1bnNpZ25lZCBsb25nIGFyZywgdW5zaWduZWQgaW50IGNtZCkKK3sKKwlzdHJ1Y3QgaWRlX2Rpc2tfb2JqICpmbG9wcHkgPSBkcml2ZS0+ZHJpdmVyX2RhdGE7CisJc3RydWN0IGdlbmRpc2sgKmRpc2sgPSBmbG9wcHktPmRpc2s7CisJaW50IHByZXZlbnQgPSAoYXJnICYmIGNtZCAhPSBDRFJPTUVKRUNUKSA/IDEgOiAwOworCisJaWYgKGZsb3BweS0+b3BlbmVycyA+IDEpCisJCXJldHVybiAtRUJVU1k7CisKKwlpZGVfc2V0X21lZGlhX2xvY2soZHJpdmUsIGRpc2ssIHByZXZlbnQpOworCisJaWYgKGNtZCA9PSBDRFJPTUVKRUNUKQorCQlpZGVfZG9fc3RhcnRfc3RvcChkcml2ZSwgZGlzaywgMik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBpZGVfZmxvcHB5X2Zvcm1hdF9pb2N0bChpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCBmaWxlICpmaWxlLAorCQkJCSAgIHVuc2lnbmVkIGludCBjbWQsIHZvaWQgX191c2VyICphcmdwKQogewogCXN3aXRjaCAoY21kKSB7CiAJY2FzZSBJREVGTE9QUFlfSU9DVExfRk9STUFUX1NVUFBPUlRFRDoKQEAgLTI0MSwzICsyNTksMzIgQEAKIAkJcmV0dXJuIC1FTk9UVFk7CiAJfQogfQorCitpbnQgaWRlX2Zsb3BweV9pb2N0bChpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCSAgICAgc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQoreworCXN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYgPSBpbm9kZS0+aV9iZGV2OworCXN0cnVjdCBpZGVfYXRhcGlfcGMgcGM7CisJdm9pZCBfX3VzZXIgKmFyZ3AgPSAodm9pZCBfX3VzZXIgKilhcmc7CisJaW50IGVycjsKKworCWlmIChjbWQgPT0gQ0RST01FSkVDVCB8fCBjbWQgPT0gQ0RST01fTE9DS0RPT1IpCisJCXJldHVybiBpZGVfZmxvcHB5X2xvY2tkb29yKGRyaXZlLCAmcGMsIGFyZywgY21kKTsKKworCWVyciA9IGlkZV9mbG9wcHlfZm9ybWF0X2lvY3RsKGRyaXZlLCBmaWxlLCBjbWQsIGFyZ3ApOworCWlmIChlcnIgIT0gLUVOT1RUWSkKKwkJcmV0dXJuIGVycjsKKworCS8qCisJICogc2tpcCBTQ1NJX0lPQ1RMX1NFTkRfQ09NTUFORCAoZGVwcmVjYXRlZCkKKwkgKiBhbmQgQ0RST01fU0VORF9QQUNLRVQgKGxlZ2FjeSkgaW9jdGxzCisJICovCisJaWYgKGNtZCAhPSBDRFJPTV9TRU5EX1BBQ0tFVCAmJiBjbWQgIT0gU0NTSV9JT0NUTF9TRU5EX0NPTU1BTkQpCisJCWVyciA9IHNjc2lfY21kX2lvY3RsKGZpbGUsIGJkZXYtPmJkX2Rpc2stPnF1ZXVlLAorCQkJCQliZGV2LT5iZF9kaXNrLCBjbWQsIGFyZ3ApOworCisJaWYgKGVyciA9PSAtRU5PVFRZKQorCQllcnIgPSBnZW5lcmljX2lkZV9pb2N0bChkcml2ZSwgZmlsZSwgYmRldiwgY21kLCBhcmcpOworCisJcmV0dXJuIGVycjsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2lkZS1mbG9wcHlfcHJvYy5jIGIvZHJpdmVycy9pZGUvaWRlLWZsb3BweV9wcm9jLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2VjNzYyYwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvaWRlL2lkZS1mbG9wcHlfcHJvYy5jCkBAIC0wLDAgKzEsMzMgQEAKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pZGUuaD4KKworI2luY2x1ZGUgImlkZS1mbG9wcHkuaCIKKworc3RhdGljIGludCBwcm9jX2lkZWZsb3BweV9yZWFkX2NhcGFjaXR5KGNoYXIgKnBhZ2UsIGNoYXIgKipzdGFydCwgb2ZmX3Qgb2ZmLAorCQlpbnQgY291bnQsIGludCAqZW9mLCB2b2lkICpkYXRhKQoreworCWlkZV9kcml2ZV90KmRyaXZlID0gKGlkZV9kcml2ZV90ICopZGF0YTsKKwlpbnQgbGVuOworCisJbGVuID0gc3ByaW50ZihwYWdlLCAiJWxsdVxuIiwgKGxvbmcgbG9uZylpZGVfZ2RfY2FwYWNpdHkoZHJpdmUpKTsKKwlQUk9DX0lERV9SRUFEX1JFVFVSTihwYWdlLCBzdGFydCwgb2ZmLCBjb3VudCwgZW9mLCBsZW4pOworfQorCitpZGVfcHJvY19lbnRyeV90IGlkZV9mbG9wcHlfcHJvY1tdID0geworCXsgImNhcGFjaXR5IiwJU19JRlJFR3xTX0lSVUdPLCBwcm9jX2lkZWZsb3BweV9yZWFkX2NhcGFjaXR5LAlOVUxMIH0sCisJeyAiZ2VvbWV0cnkiLAlTX0lGUkVHfFNfSVJVR08sIHByb2NfaWRlX3JlYWRfZ2VvbWV0cnksCU5VTEwgfSwKKwl7IE5VTEwsIDAsIE5VTEwsIE5VTEwgfQorfTsKKworaWRlX2RldnNldF9yd19maWVsZChiaW9zX2N5bCwgYmlvc19jeWwpOworaWRlX2RldnNldF9yd19maWVsZChiaW9zX2hlYWQsIGJpb3NfaGVhZCk7CitpZGVfZGV2c2V0X3J3X2ZpZWxkKGJpb3Nfc2VjdCwgYmlvc19zZWN0KTsKK2lkZV9kZXZzZXRfcndfZmllbGQodGlja3MsIHBjX2RlbGF5KTsKKworY29uc3Qgc3RydWN0IGlkZV9wcm9jX2RldnNldCBpZGVfZmxvcHB5X3NldHRpbmdzW10gPSB7CisJSURFX1BST0NfREVWU0VUKGJpb3NfY3lsLCAgMCwgMTAyMyksCisJSURFX1BST0NfREVWU0VUKGJpb3NfaGVhZCwgMCwgIDI1NSksCisJSURFX1BST0NfREVWU0VUKGJpb3Nfc2VjdCwgMCwgICA2MyksCisJSURFX1BST0NfREVWU0VUKHRpY2tzLAkgICAwLCAgMjU1KSwKKwl7IDAgfSwKK307CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9pZGUtZ2QuYyBiL2RyaXZlcnMvaWRlL2lkZS1nZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ0NDg5OGYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2lkZS9pZGUtZ2QuYwpAQCAtMCwwICsxLDM5OCBAQAorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9nZW5oZC5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisjaW5jbHVkZSA8bGludXgvaWRlLmg+CisjaW5jbHVkZSA8bGludXgvaGRyZWcuaD4KKworI2lmICFkZWZpbmVkKENPTkZJR19ERUJVR19CTE9DS19FWFRfREVWVCkKKyNkZWZpbmUgSURFX0RJU0tfTUlOT1JTCQkoMSA8PCBQQVJUTl9CSVRTKQorI2Vsc2UKKyNkZWZpbmUgSURFX0RJU0tfTUlOT1JTCQkwCisjZW5kaWYKKworI2luY2x1ZGUgImlkZS1kaXNrLmgiCisjaW5jbHVkZSAiaWRlLWZsb3BweS5oIgorCisjZGVmaW5lIElERV9HRF9WRVJTSU9OCSIxLjE4IgorCisvKiBtb2R1bGUgcGFyYW1ldGVycyAqLworc3RhdGljIHVuc2lnbmVkIGxvbmcgZGVidWdfbWFzazsKK21vZHVsZV9wYXJhbShkZWJ1Z19tYXNrLCB1bG9uZywgMDY0NCk7CisKK3N0YXRpYyBERUZJTkVfTVVURVgoaWRlX2Rpc2tfcmVmX211dGV4KTsKKworc3RhdGljIHZvaWQgaWRlX2Rpc2tfcmVsZWFzZShzdHJ1Y3Qga3JlZiAqKTsKKworc3RhdGljIHN0cnVjdCBpZGVfZGlza19vYmogKmlkZV9kaXNrX2dldChzdHJ1Y3QgZ2VuZGlzayAqZGlzaykKK3sKKwlzdHJ1Y3QgaWRlX2Rpc2tfb2JqICppZGtwID0gTlVMTDsKKworCW11dGV4X2xvY2soJmlkZV9kaXNrX3JlZl9tdXRleCk7CisJaWRrcCA9IGlkZV9kcnZfZyhkaXNrLCBpZGVfZGlza19vYmopOworCWlmIChpZGtwKSB7CisJCWlmIChpZGVfZGV2aWNlX2dldChpZGtwLT5kcml2ZSkpCisJCQlpZGtwID0gTlVMTDsKKwkJZWxzZQorCQkJa3JlZl9nZXQoJmlka3AtPmtyZWYpOworCX0KKwltdXRleF91bmxvY2soJmlkZV9kaXNrX3JlZl9tdXRleCk7CisJcmV0dXJuIGlka3A7Cit9CisKK3N0YXRpYyB2b2lkIGlkZV9kaXNrX3B1dChzdHJ1Y3QgaWRlX2Rpc2tfb2JqICppZGtwKQoreworCWlkZV9kcml2ZV90ICpkcml2ZSA9IGlka3AtPmRyaXZlOworCisJbXV0ZXhfbG9jaygmaWRlX2Rpc2tfcmVmX211dGV4KTsKKwlrcmVmX3B1dCgmaWRrcC0+a3JlZiwgaWRlX2Rpc2tfcmVsZWFzZSk7CisJaWRlX2RldmljZV9wdXQoZHJpdmUpOworCW11dGV4X3VubG9jaygmaWRlX2Rpc2tfcmVmX211dGV4KTsKK30KKworc2VjdG9yX3QgaWRlX2dkX2NhcGFjaXR5KGlkZV9kcml2ZV90ICpkcml2ZSkKK3sKKwlyZXR1cm4gZHJpdmUtPmNhcGFjaXR5NjQ7Cit9CisKK3N0YXRpYyBpbnQgaWRlX2dkX3Byb2JlKGlkZV9kcml2ZV90ICopOworCitzdGF0aWMgdm9pZCBpZGVfZ2RfcmVtb3ZlKGlkZV9kcml2ZV90ICpkcml2ZSkKK3sKKwlzdHJ1Y3QgaWRlX2Rpc2tfb2JqICppZGtwID0gZHJpdmUtPmRyaXZlcl9kYXRhOworCXN0cnVjdCBnZW5kaXNrICpnID0gaWRrcC0+ZGlzazsKKworCWlkZV9wcm9jX3VucmVnaXN0ZXJfZHJpdmVyKGRyaXZlLCBpZGtwLT5kcml2ZXIpOworCisJZGVsX2dlbmRpc2soZyk7CisKKwlkcml2ZS0+ZGlza19vcHMtPmZsdXNoKGRyaXZlKTsKKworCWlkZV9kaXNrX3B1dChpZGtwKTsKK30KKworc3RhdGljIHZvaWQgaWRlX2Rpc2tfcmVsZWFzZShzdHJ1Y3Qga3JlZiAqa3JlZikKK3sKKwlzdHJ1Y3QgaWRlX2Rpc2tfb2JqICppZGtwID0gdG9faWRlX2RydihrcmVmLCBpZGVfZGlza19vYmopOworCWlkZV9kcml2ZV90ICpkcml2ZSA9IGlka3AtPmRyaXZlOworCXN0cnVjdCBnZW5kaXNrICpnID0gaWRrcC0+ZGlzazsKKworCWRyaXZlLT5kaXNrX29wcyA9IE5VTEw7CisJZHJpdmUtPmRyaXZlcl9kYXRhID0gTlVMTDsKKwlnLT5wcml2YXRlX2RhdGEgPSBOVUxMOworCXB1dF9kaXNrKGcpOworCWtmcmVlKGlka3ApOworfQorCisvKgorICogT24gSFBBIGRyaXZlcyB0aGUgY2FwYWNpdHkgbmVlZHMgdG8gYmUKKyAqIHJlaW5pdGlsaXplZCBvbiByZXN1bWUgb3RoZXJ3aXNlIHRoZSBkaXNrCisgKiBjYW4gbm90IGJlIHVzZWQgYW5kIGEgaGFyZCByZXNldCBpcyByZXF1aXJlZAorICovCitzdGF0aWMgdm9pZCBpZGVfZ2RfcmVzdW1lKGlkZV9kcml2ZV90ICpkcml2ZSkKK3sKKwlpZiAoYXRhX2lkX2hwYV9lbmFibGVkKGRyaXZlLT5pZCkpCisJCSh2b2lkKWRyaXZlLT5kaXNrX29wcy0+Z2V0X2NhcGFjaXR5KGRyaXZlKTsKK30KKworc3RhdGljIHZvaWQgaWRlX2dkX3NodXRkb3duKGlkZV9kcml2ZV90ICpkcml2ZSkKK3sKKyNpZmRlZglDT05GSUdfQUxQSEEKKwkvKiBPbiBBbHBoYSwgaGFsdCg4KSBkb2Vzbid0IGFjdHVhbGx5IHR1cm4gdGhlIG1hY2hpbmUgb2ZmLAorCSAgIGl0IHB1dHMgeW91IGludG8gdGhlIHNvcnQgb2YgZmlybXdhcmUgbW9uaXRvci4gVHlwaWNhbGx5LAorCSAgIGl0J3MgdXNlZCB0byBib290IGFub3RoZXIga2VybmVsIGltYWdlLCBzbyBpdCdzIG5vdCBtdWNoCisJICAgZGlmZmVyZW50IGZyb20gcmVib290KDgpLiBUaGVyZWZvcmUsIHdlIGRvbid0IG5lZWQgdG8KKwkgICBzcGluIGRvd24gdGhlIGRpc2sgaW4gdGhpcyBjYXNlLCBlc3BlY2lhbGx5IHNpbmNlIEFscGhhCisJICAgZmlybXdhcmUgZG9lc24ndCBoYW5kbGUgZGlza3MgaW4gc3RhbmRieSBtb2RlIHByb3Blcmx5LgorCSAgIE9uIHRoZSBvdGhlciBoYW5kLCBpdCdzIHJlYXNvbmFibHkgc2FmZSB0byB0dXJuIHRoZSBwb3dlcgorCSAgIG9mZiB3aGVuIHRoZSBzaHV0ZG93biBwcm9jZXNzIHJlYWNoZXMgdGhlIGZpcm13YXJlIHByb21wdCwKKwkgICBhcyB0aGUgZmlybXdhcmUgaW5pdGlhbGl6YXRpb24gdGFrZXMgcmF0aGVyIGxvbmcgdGltZSAtCisJICAgYXQgbGVhc3QgMTAgc2Vjb25kcywgd2hpY2ggc2hvdWxkIGJlIHN1ZmZpY2llbnQgZm9yCisJICAgdGhlIGRpc2sgdG8gZXhwaXJlIGl0cyB3cml0ZSBjYWNoZS4gKi8KKwlpZiAoc3lzdGVtX3N0YXRlICE9IFNZU1RFTV9QT1dFUl9PRkYpIHsKKyNlbHNlCisJaWYgKHN5c3RlbV9zdGF0ZSA9PSBTWVNURU1fUkVTVEFSVCkgeworI2VuZGlmCisJCWRyaXZlLT5kaXNrX29wcy0+Zmx1c2goZHJpdmUpOworCQlyZXR1cm47CisJfQorCisJcHJpbnRrKEtFUk5fSU5GTyAiU2h1dGRvd246ICVzXG4iLCBkcml2ZS0+bmFtZSk7CisKKwlkcml2ZS0+Z2VuZGV2LmJ1cy0+c3VzcGVuZCgmZHJpdmUtPmdlbmRldiwgUE1TR19TVVNQRU5EKTsKK30KKworI2lmZGVmIENPTkZJR19JREVfUFJPQ19GUworc3RhdGljIGlkZV9wcm9jX2VudHJ5X3QgKmlkZV9kaXNrX3Byb2NfZW50cmllcyhpZGVfZHJpdmVfdCAqZHJpdmUpCit7CisJcmV0dXJuIChkcml2ZS0+bWVkaWEgPT0gaWRlX2Rpc2spID8gaWRlX2Rpc2tfcHJvYyA6IGlkZV9mbG9wcHlfcHJvYzsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBpZGVfcHJvY19kZXZzZXQgKmlkZV9kaXNrX3Byb2NfZGV2c2V0cyhpZGVfZHJpdmVfdCAqZHJpdmUpCit7CisJcmV0dXJuIChkcml2ZS0+bWVkaWEgPT0gaWRlX2Rpc2spID8gaWRlX2Rpc2tfc2V0dGluZ3MKKwkJCQkJICA6IGlkZV9mbG9wcHlfc2V0dGluZ3M7Cit9CisjZW5kaWYKKworc3RhdGljIGlkZV9zdGFydHN0b3BfdCBpZGVfZ2RfZG9fcmVxdWVzdChpZGVfZHJpdmVfdCAqZHJpdmUsCisJCQkJCSBzdHJ1Y3QgcmVxdWVzdCAqcnEsIHNlY3Rvcl90IHNlY3RvcikKK3sKKwlyZXR1cm4gZHJpdmUtPmRpc2tfb3BzLT5kb19yZXF1ZXN0KGRyaXZlLCBycSwgc2VjdG9yKTsKK30KKworc3RhdGljIGludCBpZGVfZ2RfZW5kX3JlcXVlc3QoaWRlX2RyaXZlX3QgKmRyaXZlLCBpbnQgdXB0b2RhdGUsIGludCBucnNlY3MpCit7CisJcmV0dXJuIGRyaXZlLT5kaXNrX29wcy0+ZW5kX3JlcXVlc3QoZHJpdmUsIHVwdG9kYXRlLCBucnNlY3MpOworfQorCitzdGF0aWMgaWRlX2RyaXZlcl90IGlkZV9nZF9kcml2ZXIgPSB7CisJLmdlbl9kcml2ZXIgPSB7CisJCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkJLm5hbWUJCT0gImlkZS1nZCIsCisJCS5idXMJCT0gJmlkZV9idXNfdHlwZSwKKwl9LAorCS5wcm9iZQkJCT0gaWRlX2dkX3Byb2JlLAorCS5yZW1vdmUJCQk9IGlkZV9nZF9yZW1vdmUsCisJLnJlc3VtZQkJCT0gaWRlX2dkX3Jlc3VtZSwKKwkuc2h1dGRvd24JCT0gaWRlX2dkX3NodXRkb3duLAorCS52ZXJzaW9uCQk9IElERV9HRF9WRVJTSU9OLAorCS5kb19yZXF1ZXN0CQk9IGlkZV9nZF9kb19yZXF1ZXN0LAorCS5lbmRfcmVxdWVzdAkJPSBpZGVfZ2RfZW5kX3JlcXVlc3QsCisJLmVycm9yCQkJPSBfX2lkZV9lcnJvciwKKyNpZmRlZiBDT05GSUdfSURFX1BST0NfRlMKKwkucHJvY19lbnRyaWVzCQk9IGlkZV9kaXNrX3Byb2NfZW50cmllcywKKwkucHJvY19kZXZzZXRzCQk9IGlkZV9kaXNrX3Byb2NfZGV2c2V0cywKKyNlbmRpZgorfTsKKworc3RhdGljIGludCBpZGVfZ2Rfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCkKK3sKKwlzdHJ1Y3QgZ2VuZGlzayAqZGlzayA9IGlub2RlLT5pX2JkZXYtPmJkX2Rpc2s7CisJc3RydWN0IGlkZV9kaXNrX29iaiAqaWRrcDsKKwlpZGVfZHJpdmVfdCAqZHJpdmU7CisJaW50IHJldCA9IDA7CisKKwlpZGtwID0gaWRlX2Rpc2tfZ2V0KGRpc2spOworCWlmIChpZGtwID09IE5VTEwpCisJCXJldHVybiAtRU5YSU87CisKKwlkcml2ZSA9IGlka3AtPmRyaXZlOworCisJaWRlX2RlYnVnX2xvZyhJREVfREJHX0ZVTkMsICJDYWxsICVzXG4iLCBfX2Z1bmNfXyk7CisKKwlpZGtwLT5vcGVuZXJzKys7CisKKwlpZiAoKGRyaXZlLT5kZXZfZmxhZ3MgJiBJREVfREZMQUdfUkVNT1ZBQkxFKSAmJiBpZGtwLT5vcGVuZXJzID09IDEpIHsKKwkJZHJpdmUtPmRldl9mbGFncyAmPSB+SURFX0RGTEFHX0ZPUk1BVF9JTl9QUk9HUkVTUzsKKwkJLyogSnVzdCBpbiBjYXNlICovCisKKwkJcmV0ID0gZHJpdmUtPmRpc2tfb3BzLT5pbml0X21lZGlhKGRyaXZlLCBkaXNrKTsKKworCQkvKgorCQkgKiBBbGxvdyBPX05ERUxBWSB0byBvcGVuIGEgZHJpdmUgd2l0aG91dCBhIGRpc2ssIG9yIHdpdGggYW4KKwkJICogdW5yZWFkYWJsZSBkaXNrLCBzbyB0aGF0IHdlIGNhbiBnZXQgdGhlIGZvcm1hdCBjYXBhY2l0eQorCQkgKiBvZiB0aGUgZHJpdmUgb3IgYmVnaW4gdGhlIGZvcm1hdCAtIFNhbQorCQkgKi8KKwkJaWYgKHJldCAmJiAoZmlscC0+Zl9mbGFncyAmIE9fTkRFTEFZKSA9PSAwKSB7CisJCQlyZXQgPSAtRUlPOworCQkJZ290byBvdXRfcHV0X2lka3A7CisJCX0KKworCQlpZiAoKGRyaXZlLT5kZXZfZmxhZ3MgJiBJREVfREZMQUdfV1ApICYmIChmaWxwLT5mX21vZGUgJiAyKSkgeworCQkJcmV0ID0gLUVST0ZTOworCQkJZ290byBvdXRfcHV0X2lka3A7CisJCX0KKworCQkvKgorCQkgKiBJZ25vcmUgdGhlIHJldHVybiBjb2RlIGZyb20gZG9vcl9sb2NrLAorCQkgKiBzaW5jZSB0aGUgb3BlbigpIGhhcyBhbHJlYWR5IHN1Y2NlZWRlZCwKKwkJICogYW5kIHRoZSBkb29yX2xvY2sgaXMgaXJyZWxldmFudCBhdCB0aGlzIHBvaW50LgorCQkgKi8KKwkJZHJpdmUtPmRpc2tfb3BzLT5zZXRfZG9vcmxvY2soZHJpdmUsIGRpc2ssIDEpOworCQlkcml2ZS0+ZGV2X2ZsYWdzIHw9IElERV9ERkxBR19NRURJQV9DSEFOR0VEOworCQljaGVja19kaXNrX2NoYW5nZShpbm9kZS0+aV9iZGV2KTsKKwl9IGVsc2UgaWYgKGRyaXZlLT5kZXZfZmxhZ3MgJiBJREVfREZMQUdfRk9STUFUX0lOX1BST0dSRVNTKSB7CisJCXJldCA9IC1FQlVTWTsKKwkJZ290byBvdXRfcHV0X2lka3A7CisJfQorCXJldHVybiAwOworCitvdXRfcHV0X2lka3A6CisJaWRrcC0+b3BlbmVycy0tOworCWlkZV9kaXNrX3B1dChpZGtwKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGlkZV9nZF9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwKQoreworCXN0cnVjdCBnZW5kaXNrICpkaXNrID0gaW5vZGUtPmlfYmRldi0+YmRfZGlzazsKKwlzdHJ1Y3QgaWRlX2Rpc2tfb2JqICppZGtwID0gaWRlX2Rydl9nKGRpc2ssIGlkZV9kaXNrX29iaik7CisJaWRlX2RyaXZlX3QgKmRyaXZlID0gaWRrcC0+ZHJpdmU7CisKKwlpZGVfZGVidWdfbG9nKElERV9EQkdfRlVOQywgIkNhbGwgJXNcbiIsIF9fZnVuY19fKTsKKworCWlmIChpZGtwLT5vcGVuZXJzID09IDEpCisJCWRyaXZlLT5kaXNrX29wcy0+Zmx1c2goZHJpdmUpOworCisJaWYgKChkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX1JFTU9WQUJMRSkgJiYgaWRrcC0+b3BlbmVycyA9PSAxKSB7CisJCWRyaXZlLT5kaXNrX29wcy0+c2V0X2Rvb3Jsb2NrKGRyaXZlLCBkaXNrLCAwKTsKKwkJZHJpdmUtPmRldl9mbGFncyAmPSB+SURFX0RGTEFHX0ZPUk1BVF9JTl9QUk9HUkVTUzsKKwl9CisKKwlpZGtwLT5vcGVuZXJzLS07CisKKwlpZGVfZGlza19wdXQoaWRrcCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBpZGVfZ2RfZ2V0Z2VvKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIHN0cnVjdCBoZF9nZW9tZXRyeSAqZ2VvKQoreworCXN0cnVjdCBpZGVfZGlza19vYmogKmlka3AgPSBpZGVfZHJ2X2coYmRldi0+YmRfZGlzaywgaWRlX2Rpc2tfb2JqKTsKKwlpZGVfZHJpdmVfdCAqZHJpdmUgPSBpZGtwLT5kcml2ZTsKKworCWdlby0+aGVhZHMgPSBkcml2ZS0+Ymlvc19oZWFkOworCWdlby0+c2VjdG9ycyA9IGRyaXZlLT5iaW9zX3NlY3Q7CisJZ2VvLT5jeWxpbmRlcnMgPSAodTE2KWRyaXZlLT5iaW9zX2N5bDsgLyogdHJ1bmNhdGUgKi8KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBpZGVfZ2RfbWVkaWFfY2hhbmdlZChzdHJ1Y3QgZ2VuZGlzayAqZGlzaykKK3sKKwlzdHJ1Y3QgaWRlX2Rpc2tfb2JqICppZGtwID0gaWRlX2Rydl9nKGRpc2ssIGlkZV9kaXNrX29iaik7CisJaWRlX2RyaXZlX3QgKmRyaXZlID0gaWRrcC0+ZHJpdmU7CisJaW50IHJldDsKKworCS8qIGRvIG5vdCBzY2FuIHBhcnRpdGlvbnMgdHdpY2UgaWYgdGhpcyBpcyBhIHJlbW92YWJsZSBkZXZpY2UgKi8KKwlpZiAoZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19BVFRBQ0gpIHsKKwkJZHJpdmUtPmRldl9mbGFncyAmPSB+SURFX0RGTEFHX0FUVEFDSDsKKwkJcmV0dXJuIDA7CisJfQorCisJcmV0ID0gISEoZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19NRURJQV9DSEFOR0VEKTsKKwlkcml2ZS0+ZGV2X2ZsYWdzICY9IH5JREVfREZMQUdfTUVESUFfQ0hBTkdFRDsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgaWRlX2dkX3JldmFsaWRhdGVfZGlzayhzdHJ1Y3QgZ2VuZGlzayAqZGlzaykKK3sKKwlzdHJ1Y3QgaWRlX2Rpc2tfb2JqICppZGtwID0gaWRlX2Rydl9nKGRpc2ssIGlkZV9kaXNrX29iaik7CisJc2V0X2NhcGFjaXR5KGRpc2ssIGlkZV9nZF9jYXBhY2l0eShpZGtwLT5kcml2ZSkpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGlkZV9nZF9pb2N0bChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJCSAgICAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCit7CisJc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiA9IGlub2RlLT5pX2JkZXY7CisJc3RydWN0IGlkZV9kaXNrX29iaiAqaWRrcCA9IGlkZV9kcnZfZyhiZGV2LT5iZF9kaXNrLCBpZGVfZGlza19vYmopOworCWlkZV9kcml2ZV90ICpkcml2ZSA9IGlka3AtPmRyaXZlOworCisJcmV0dXJuIGRyaXZlLT5kaXNrX29wcy0+aW9jdGwoZHJpdmUsIGlub2RlLCBmaWxlLCBjbWQsIGFyZyk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgYmxvY2tfZGV2aWNlX29wZXJhdGlvbnMgaWRlX2dkX29wcyA9IHsKKwkub3duZXIJCQk9IFRISVNfTU9EVUxFLAorCS5vcGVuCQkJPSBpZGVfZ2Rfb3BlbiwKKwkucmVsZWFzZQkJPSBpZGVfZ2RfcmVsZWFzZSwKKwkuaW9jdGwJCQk9IGlkZV9nZF9pb2N0bCwKKwkuZ2V0Z2VvCQkJPSBpZGVfZ2RfZ2V0Z2VvLAorCS5tZWRpYV9jaGFuZ2VkCQk9IGlkZV9nZF9tZWRpYV9jaGFuZ2VkLAorCS5yZXZhbGlkYXRlX2Rpc2sJPSBpZGVfZ2RfcmV2YWxpZGF0ZV9kaXNrCit9OworCitzdGF0aWMgaW50IGlkZV9nZF9wcm9iZShpZGVfZHJpdmVfdCAqZHJpdmUpCit7CisJY29uc3Qgc3RydWN0IGlkZV9kaXNrX29wcyAqZGlza19vcHMgPSBOVUxMOworCXN0cnVjdCBpZGVfZGlza19vYmogKmlka3A7CisJc3RydWN0IGdlbmRpc2sgKmc7CisKKwkvKiBzdHJzdHIoImZvbyIsICIiKSBpcyBub24tTlVMTCAqLworCWlmICghc3Ryc3RyKCJpZGUtZ2QiLCBkcml2ZS0+ZHJpdmVyX3JlcSkpCisJCWdvdG8gZmFpbGVkOworCisjaWZkZWYgQ09ORklHX0lERV9HRF9BVEEKKwlpZiAoZHJpdmUtPm1lZGlhID09IGlkZV9kaXNrKQorCQlkaXNrX29wcyA9ICZpZGVfYXRhX2Rpc2tfb3BzOworI2VuZGlmCisjaWZkZWYgQ09ORklHX0lERV9HRF9BVEFQSQorCWlmIChkcml2ZS0+bWVkaWEgPT0gaWRlX2Zsb3BweSkKKwkJZGlza19vcHMgPSAmaWRlX2F0YXBpX2Rpc2tfb3BzOworI2VuZGlmCisJaWYgKGRpc2tfb3BzID09IE5VTEwpCisJCWdvdG8gZmFpbGVkOworCisJaWYgKGRpc2tfb3BzLT5jaGVjayhkcml2ZSwgRFJWX05BTUUpID09IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiJXM6IG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBkcml2ZXJcbiIsCisJCQlkcml2ZS0+bmFtZSk7CisJCWdvdG8gZmFpbGVkOworCX0KKworCWlka3AgPSBremFsbG9jKHNpemVvZigqaWRrcCksIEdGUF9LRVJORUwpOworCWlmICghaWRrcCkgeworCQlwcmludGsoS0VSTl9FUlIgUEZYICIlczogY2FuJ3QgYWxsb2NhdGUgYSBkaXNrIHN0cnVjdHVyZVxuIiwKKwkJCWRyaXZlLT5uYW1lKTsKKwkJZ290byBmYWlsZWQ7CisJfQorCisJZyA9IGFsbG9jX2Rpc2tfbm9kZShJREVfRElTS19NSU5PUlMsIGh3aWZfdG9fbm9kZShkcml2ZS0+aHdpZikpOworCWlmICghZykKKwkJZ290byBvdXRfZnJlZV9pZGtwOworCisJaWRlX2luaXRfZGlzayhnLCBkcml2ZSk7CisKKwlrcmVmX2luaXQoJmlka3AtPmtyZWYpOworCisJaWRrcC0+ZHJpdmUgPSBkcml2ZTsKKwlpZGtwLT5kcml2ZXIgPSAmaWRlX2dkX2RyaXZlcjsKKwlpZGtwLT5kaXNrID0gZzsKKworCWctPnByaXZhdGVfZGF0YSA9ICZpZGtwLT5kcml2ZXI7CisKKwlkcml2ZS0+ZHJpdmVyX2RhdGEgPSBpZGtwOworCWRyaXZlLT5kZWJ1Z19tYXNrID0gZGVidWdfbWFzazsKKwlkcml2ZS0+ZGlza19vcHMgPSBkaXNrX29wczsKKworCWRpc2tfb3BzLT5zZXR1cChkcml2ZSk7CisKKwlzZXRfY2FwYWNpdHkoZywgaWRlX2dkX2NhcGFjaXR5KGRyaXZlKSk7CisKKwlnLT5taW5vcnMgPSBJREVfRElTS19NSU5PUlM7CisJZy0+ZHJpdmVyZnNfZGV2ID0gJmRyaXZlLT5nZW5kZXY7CisJZy0+ZmxhZ3MgfD0gR0VOSERfRkxfRVhUX0RFVlQ7CisJaWYgKGRyaXZlLT5kZXZfZmxhZ3MgJiBJREVfREZMQUdfUkVNT1ZBQkxFKQorCQlnLT5mbGFncyA9IEdFTkhEX0ZMX1JFTU9WQUJMRTsKKwlnLT5mb3BzID0gJmlkZV9nZF9vcHM7CisJYWRkX2Rpc2soZyk7CisJcmV0dXJuIDA7CisKK291dF9mcmVlX2lka3A6CisJa2ZyZWUoaWRrcCk7CitmYWlsZWQ6CisJcmV0dXJuIC1FTk9ERVY7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IGlkZV9nZF9pbml0KHZvaWQpCit7CisJcHJpbnRrKEtFUk5fSU5GTyBEUlZfTkFNRSAiIGRyaXZlciAiIElERV9HRF9WRVJTSU9OICJcbiIpOworCXJldHVybiBkcml2ZXJfcmVnaXN0ZXIoJmlkZV9nZF9kcml2ZXIuZ2VuX2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBpZGVfZ2RfZXhpdCh2b2lkKQoreworCWRyaXZlcl91bnJlZ2lzdGVyKCZpZGVfZ2RfZHJpdmVyLmdlbl9kcml2ZXIpOworfQorCitNT0RVTEVfQUxJQVMoImlkZToqbS1kaXNrKiIpOworTU9EVUxFX0FMSUFTKCJpZGUtZGlzayIpOworTU9EVUxFX0FMSUFTKCJpZGU6Km0tZmxvcHB5KiIpOworTU9EVUxFX0FMSUFTKCJpZGUtZmxvcHB5Iik7Cittb2R1bGVfaW5pdChpZGVfZ2RfaW5pdCk7Cittb2R1bGVfZXhpdChpZGVfZ2RfZXhpdCk7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfREVTQ1JJUFRJT04oImdlbmVyaWMgQVRBL0FUQVBJIGRpc2sgZHJpdmVyIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9pZGUtZ2QuaCBiL2RyaXZlcnMvaWRlL2lkZS1nZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdkM2QxMDEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2lkZS9pZGUtZ2QuaApAQCAtMCwwICsxLDQ0IEBACisjaWZuZGVmIF9fSURFX0dEX0gKKyNkZWZpbmUgX19JREVfR0RfSAorCisjZGVmaW5lIERSVl9OQU1FICJpZGUtZ2QiCisjZGVmaW5lIFBGWCBEUlZfTkFNRSAiOiAiCisKKy8qIGRlZmluZSB0byBzZWUgZGVidWcgaW5mbyAqLworI2RlZmluZSBJREVfR0RfREVCVUdfTE9HCTAKKworI2lmIElERV9HRF9ERUJVR19MT0cKKyNkZWZpbmUgaWRlX2RlYnVnX2xvZyhsdmwsIGZtdCwgYXJncy4uLikgX19pZGVfZGVidWdfbG9nKGx2bCwgZm10LCBhcmdzKQorI2Vsc2UKKyNkZWZpbmUgaWRlX2RlYnVnX2xvZyhsdmwsIGZtdCwgYXJncy4uLikgZG8ge30gd2hpbGUgKDApCisjZW5kaWYKKworc3RydWN0IGlkZV9kaXNrX29iaiB7CisJaWRlX2RyaXZlX3QJKmRyaXZlOworCWlkZV9kcml2ZXJfdAkqZHJpdmVyOworCXN0cnVjdCBnZW5kaXNrCSpkaXNrOworCXN0cnVjdCBrcmVmCWtyZWY7CisJdW5zaWduZWQgaW50CW9wZW5lcnM7CS8qIHByb3RlY3RlZCBieSBCS0wgZm9yIG5vdyAqLworCisJLyogTGFzdCBmYWlsZWQgcGFja2V0IGNvbW1hbmQgKi8KKwlzdHJ1Y3QgaWRlX2F0YXBpX3BjICpmYWlsZWRfcGM7CisJLyogdXNlZCBmb3IgYmxrX3tmcyxwY31fcmVxdWVzdCgpIHJlcXVlc3RzICovCisJc3RydWN0IGlkZV9hdGFwaV9wYyBxdWV1ZWRfcGM7CisKKwkvKiBMYXN0IGVycm9yIGluZm9ybWF0aW9uICovCisJdTggc2Vuc2Vfa2V5LCBhc2MsIGFzY3E7CisKKwlpbnQgcHJvZ3Jlc3NfaW5kaWNhdGlvbjsKKworCS8qIERldmljZSBpbmZvcm1hdGlvbiAqLworCS8qIEN1cnJlbnQgZm9ybWF0ICovCisJaW50IGJsb2NrcywgYmxvY2tfc2l6ZSwgYnNfZmFjdG9yOworCS8qIExhc3QgZm9ybWF0IGNhcGFjaXR5IGRlc2NyaXB0b3IgKi8KKwl1OCBjYXBfZGVzY1s4XTsKKwkvKiBDb3B5IG9mIHRoZSBmbGV4aWJsZSBkaXNrIHBhZ2UgKi8KKwl1OCBmbGV4aWJsZV9kaXNrX3BhZ2VbMzJdOworfTsKKworc2VjdG9yX3QgaWRlX2dkX2NhcGFjaXR5KGlkZV9kcml2ZV90ICopOworCisjZW5kaWYgLyogX19JREVfR0RfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvaWRlLWdlbmVyaWMuYyBiL2RyaXZlcnMvaWRlL2lkZS1nZW5lcmljLmMKaW5kZXggMGEzY2IwYy4uODFhNTI4MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvaWRlLWdlbmVyaWMuYworKysgYi9kcml2ZXJzL2lkZS9pZGUtZ2VuZXJpYy5jCkBAIC0xMzcsMTUgKzEzNywxMCBAQAogCiBzdGF0aWMgaW50IF9faW5pdCBpZGVfZ2VuZXJpY19pbml0KHZvaWQpCiB7Ci0JaHdfcmVnc190IGh3W01BWF9IV0lGU10sICpod3NbTUFYX0hXSUZTXTsKLQlzdHJ1Y3QgaWRlX2hvc3QgKmhvc3Q7CisJaHdfcmVnc190IGh3LCAqaHdzW10gPSB7ICZodywgTlVMTCwgTlVMTCwgTlVMTCB9OwogCXVuc2lnbmVkIGxvbmcgaW9fYWRkcjsKLQlpbnQgaSwgcmMsIHByaW1hcnkgPSAwLCBzZWNvbmRhcnkgPSAwOworCWludCBpLCByYyA9IDAsIHByaW1hcnkgPSAwLCBzZWNvbmRhcnkgPSAwOwogCi0jaWZkZWYgQ09ORklHX01JUFMKLQlpZiAoIWlkZV9wcm9iZV9sZWdhY3koKSkKLQkJcmV0dXJuIC1FTk9ERVY7Ci0jZW5kaWYKIAlpZGVfZ2VuZXJpY19jaGVja19wY2lfbGVnYWN5X2lvYmFzZXMoJnByaW1hcnksICZzZWNvbmRhcnkpOwogCiAJaWYgKCFwcm9iZV9tYXNrKSB7CkBAIC0xNjEsMTMgKzE1Niw5IEBACiAJCXByaW50ayhLRVJOX0lORk8gRFJWX05BTUUgIjogZW5mb3JjaW5nIHByb2Jpbmcgb2YgSS9PIHBvcnRzICIKIAkJCSJ1cG9uIHVzZXIgcmVxdWVzdFxuIik7CiAKLQltZW1zZXQoaHdzLCAwLCBzaXplb2YoaHdfcmVnc190ICopICogTUFYX0hXSUZTKTsKLQogCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGxlZ2FjeV9iYXNlcyk7IGkrKykgewogCQlpb19hZGRyID0gbGVnYWN5X2Jhc2VzW2ldOwogCi0JCWh3c1tpXSA9IE5VTEw7Ci0KIAkJaWYgKChwcm9iZV9tYXNrICYgKDEgPDwgaSkpICYmIGlvX2FkZHIpIHsKIAkJCWlmICghcmVxdWVzdF9yZWdpb24oaW9fYWRkciwgOCwgRFJWX05BTUUpKSB7CiAJCQkJcHJpbnRrKEtFUk5fRVJSICIlczogSS9PIHJlc291cmNlIDB4JWxYLTB4JWxYICIKQEAgLTE4NCw0NSArMTc1LDI3IEBACiAJCQkJY29udGludWU7CiAJCQl9CiAKLQkJCW1lbXNldCgmaHdbaV0sIDAsIHNpemVvZihod1tpXSkpOwotCQkJaWRlX3N0ZF9pbml0X3BvcnRzKCZod1tpXSwgaW9fYWRkciwgaW9fYWRkciArIDB4MjA2KTsKKwkJCW1lbXNldCgmaHcsIDAsIHNpemVvZihodykpOworCQkJaWRlX3N0ZF9pbml0X3BvcnRzKCZodywgaW9fYWRkciwgaW9fYWRkciArIDB4MjA2KTsKICNpZmRlZiBDT05GSUdfSUE2NAotCQkJaHdbaV0uaXJxID0gaXNhX2lycV90b192ZWN0b3IobGVnYWN5X2lycXNbaV0pOworCQkJaHcuaXJxID0gaXNhX2lycV90b192ZWN0b3IobGVnYWN5X2lycXNbaV0pOwogI2Vsc2UKLQkJCWh3W2ldLmlycSA9IGxlZ2FjeV9pcnFzW2ldOworCQkJaHcuaXJxID0gbGVnYWN5X2lycXNbaV07CiAjZW5kaWYKLQkJCWh3W2ldLmNoaXBzZXQgPSBpZGVfZ2VuZXJpYzsKKwkJCWh3LmNoaXBzZXQgPSBpZGVfZ2VuZXJpYzsKIAotCQkJaHdzW2ldID0gJmh3W2ldOworCQkJcmMgPSBpZGVfaG9zdF9hZGQoTlVMTCwgaHdzLCBOVUxMKTsKKwkJCWlmIChyYykgeworCQkJCXJlbGVhc2VfcmVnaW9uKGlvX2FkZHIgKyAweDIwNiwgMSk7CisJCQkJcmVsZWFzZV9yZWdpb24oaW9fYWRkciwgOCk7CisJCQl9CiAJCX0KIAl9CiAKLQlob3N0ID0gaWRlX2hvc3RfYWxsb2NfYWxsKE5VTEwsIGh3cyk7Ci0JaWYgKGhvc3QgPT0gTlVMTCkgewotCQlyYyA9IC1FTk9NRU07Ci0JCWdvdG8gZXJyOwotCX0KLQotCXJjID0gaWRlX2hvc3RfcmVnaXN0ZXIoaG9zdCwgTlVMTCwgaHdzKTsKLQlpZiAocmMpCi0JCWdvdG8gZXJyX2ZyZWU7Ci0KIAlpZiAoaWRlX2dlbmVyaWNfc3lzZnNfaW5pdCgpKQogCQlwcmludGsoS0VSTl9FUlIgRFJWX05BTUUgIjogZmFpbGVkIHRvIGNyZWF0ZSBpZGVfZ2VuZXJpYyAiCiAJCQkJCSAiY2xhc3NcbiIpOwogCi0JcmV0dXJuIDA7Ci1lcnJfZnJlZToKLQlpZGVfaG9zdF9mcmVlKGhvc3QpOwotZXJyOgotCWZvciAoaSA9IDA7IGkgPCBNQVhfSFdJRlM7IGkrKykgewotCQlpZiAoaHdzW2ldID09IE5VTEwpCi0JCQljb250aW51ZTsKLQotCQlpb19hZGRyID0gaHdzW2ldLT5pb19wb3J0cy5kYXRhX2FkZHI7Ci0JCXJlbGVhc2VfcmVnaW9uKGlvX2FkZHIgKyAweDIwNiwgMSk7Ci0JCXJlbGVhc2VfcmVnaW9uKGlvX2FkZHIsIDgpOwotCX0KIAlyZXR1cm4gcmM7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2lkZS1pby5jIGIvZHJpdmVycy9pZGUvaWRlLWlvLmMKaW5kZXggMWM1MTk0OS4uNzE2MmQ2NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvaWRlLWlvLmMKKysrIGIvZHJpdmVycy9pZGUvaWRlLWlvLmMKQEAgLTc4LDggKzc4LDkgQEAKIAkgKiBkZWNpZGUgd2hldGhlciB0byByZWVuYWJsZSBETUEgLS0gMyBpcyBhIHJhbmRvbSBtYWdpYyBmb3Igbm93LAogCSAqIGlmIHdlIERNQSB0aW1lb3V0IG1vcmUgdGhhbiAzIHRpbWVzLCBqdXN0IHN0YXkgaW4gUElPCiAJICovCi0JaWYgKGRyaXZlLT5zdGF0ZSA9PSBETUFfUElPX1JFVFJZICYmIGRyaXZlLT5yZXRyeV9waW8gPD0gMykgewotCQlkcml2ZS0+c3RhdGUgPSAwOworCWlmICgoZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19ETUFfUElPX1JFVFJZKSAmJgorCSAgICBkcml2ZS0+cmV0cnlfcGlvIDw9IDMpIHsKKwkJZHJpdmUtPmRldl9mbGFncyAmPSB+SURFX0RGTEFHX0RNQV9QSU9fUkVUUlk7CiAJCWlkZV9kbWFfb24oZHJpdmUpOwogCX0KIApAQCAtMTMxLDIxICsxMzIsNiBAQAogfQogRVhQT1JUX1NZTUJPTChpZGVfZW5kX3JlcXVlc3QpOwogCi0vKgotICogUG93ZXIgTWFuYWdlbWVudCBzdGF0ZSBtYWNoaW5lLiBUaGlzIG9uZSBpcyByYXRoZXIgdHJpdmlhbCBmb3Igbm93LAotICogd2Ugc2hvdWxkIHByb2JhYmx5IGFkZCBtb3JlLCBsaWtlIHN3aXRjaGluZyBiYWNrIHRvIFBJTyBvbiBzdXNwZW5kCi0gKiB0byBoZWxwIHNvbWUgQklPU2VzLCByZS1kbyB0aGUgZG9vciBsb2NraW5nIG9uIHJlc3VtZSwgZXRjLi4uCi0gKi8KLQotZW51bSB7Ci0JaWRlX3BtX2ZsdXNoX2NhY2hlCT0gaWRlX3BtX3N0YXRlX3N0YXJ0X3N1c3BlbmQsCi0JaWRlZGlza19wbV9zdGFuZGJ5LAotCi0JaWRlZGlza19wbV9yZXN0b3JlX3Bpbwk9IGlkZV9wbV9zdGF0ZV9zdGFydF9yZXN1bWUsCi0JaWRlZGlza19wbV9pZGxlLAotCWlkZV9wbV9yZXN0b3JlX2RtYSwKLX07Ci0KIHN0YXRpYyB2b2lkIGlkZV9jb21wbGV0ZV9wb3dlcl9zdGVwKGlkZV9kcml2ZV90ICpkcml2ZSwgc3RydWN0IHJlcXVlc3QgKnJxLCB1OCBzdGF0LCB1OCBlcnJvcikKIHsKIAlzdHJ1Y3QgcmVxdWVzdF9wbV9zdGF0ZSAqcG0gPSBycS0+ZGF0YTsKQEAgLTE1NCwyMCArMTQwLDIwIEBACiAJCXJldHVybjsKIAogCXN3aXRjaCAocG0tPnBtX3N0ZXApIHsKLQljYXNlIGlkZV9wbV9mbHVzaF9jYWNoZToJLyogU3VzcGVuZCBzdGVwIDEgKGZsdXNoIGNhY2hlKSBjb21wbGV0ZSAqLworCWNhc2UgSURFX1BNX0ZMVVNIX0NBQ0hFOgkvKiBTdXNwZW5kIHN0ZXAgMSAoZmx1c2ggY2FjaGUpICovCiAJCWlmIChwbS0+cG1fc3RhdGUgPT0gUE1fRVZFTlRfRlJFRVpFKQotCQkJcG0tPnBtX3N0ZXAgPSBpZGVfcG1fc3RhdGVfY29tcGxldGVkOworCQkJcG0tPnBtX3N0ZXAgPSBJREVfUE1fQ09NUExFVEVEOwogCQllbHNlCi0JCQlwbS0+cG1fc3RlcCA9IGlkZWRpc2tfcG1fc3RhbmRieTsKKwkJCXBtLT5wbV9zdGVwID0gSURFX1BNX1NUQU5EQlk7CiAJCWJyZWFrOwotCWNhc2UgaWRlZGlza19wbV9zdGFuZGJ5OgkvKiBTdXNwZW5kIHN0ZXAgMiAoc3RhbmRieSkgY29tcGxldGUgKi8KLQkJcG0tPnBtX3N0ZXAgPSBpZGVfcG1fc3RhdGVfY29tcGxldGVkOworCWNhc2UgSURFX1BNX1NUQU5EQlk6CQkvKiBTdXNwZW5kIHN0ZXAgMiAoc3RhbmRieSkgKi8KKwkJcG0tPnBtX3N0ZXAgPSBJREVfUE1fQ09NUExFVEVEOwogCQlicmVhazsKLQljYXNlIGlkZWRpc2tfcG1fcmVzdG9yZV9waW86CS8qIFJlc3VtZSBzdGVwIDEgY29tcGxldGUgKi8KLQkJcG0tPnBtX3N0ZXAgPSBpZGVkaXNrX3BtX2lkbGU7CisJY2FzZSBJREVfUE1fUkVTVE9SRV9QSU86CS8qIFJlc3VtZSBzdGVwIDEgKHJlc3RvcmUgUElPKSAqLworCQlwbS0+cG1fc3RlcCA9IElERV9QTV9JRExFOwogCQlicmVhazsKLQljYXNlIGlkZWRpc2tfcG1faWRsZToJCS8qIFJlc3VtZSBzdGVwIDIgKGlkbGUpIGNvbXBsZXRlICovCi0JCXBtLT5wbV9zdGVwID0gaWRlX3BtX3Jlc3RvcmVfZG1hOworCWNhc2UgSURFX1BNX0lETEU6CQkvKiBSZXN1bWUgc3RlcCAyIChpZGxlKSovCisJCXBtLT5wbV9zdGVwID0gSURFX1BNX1JFU1RPUkVfRE1BOwogCQlicmVhazsKIAl9CiB9CkBAIC0xODAsMTEgKzE2NiwxMiBAQAogCW1lbXNldChhcmdzLCAwLCBzaXplb2YoKmFyZ3MpKTsKIAogCXN3aXRjaCAocG0tPnBtX3N0ZXApIHsKLQljYXNlIGlkZV9wbV9mbHVzaF9jYWNoZToJLyogU3VzcGVuZCBzdGVwIDEgKGZsdXNoIGNhY2hlKSAqLworCWNhc2UgSURFX1BNX0ZMVVNIX0NBQ0hFOgkvKiBTdXNwZW5kIHN0ZXAgMSAoZmx1c2ggY2FjaGUpICovCiAJCWlmIChkcml2ZS0+bWVkaWEgIT0gaWRlX2Rpc2spCiAJCQlicmVhazsKIAkJLyogTm90IHN1cHBvcnRlZD8gU3dpdGNoIHRvIG5leHQgc3RlcCBub3cuICovCi0JCWlmICghZHJpdmUtPndjYWNoZSB8fCBhdGFfaWRfZmx1c2hfZW5hYmxlZChkcml2ZS0+aWQpID09IDApIHsKKwkJaWYgKGF0YV9pZF9mbHVzaF9lbmFibGVkKGRyaXZlLT5pZCkgPT0gMCB8fAorCQkgICAgKGRyaXZlLT5kZXZfZmxhZ3MgJiBJREVfREZMQUdfV0NBQ0hFKSA9PSAwKSB7CiAJCQlpZGVfY29tcGxldGVfcG93ZXJfc3RlcChkcml2ZSwgcnEsIDAsIDApOwogCQkJcmV0dXJuIGlkZV9zdG9wcGVkOwogCQl9CkBAIC0xOTMsMjcgKzE4MCwyMyBAQAogCQllbHNlCiAJCQlhcmdzLT50Zi5jb21tYW5kID0gQVRBX0NNRF9GTFVTSDsKIAkJZ290byBvdXRfZG9fdGY7Ci0KLQljYXNlIGlkZWRpc2tfcG1fc3RhbmRieToJLyogU3VzcGVuZCBzdGVwIDIgKHN0YW5kYnkpICovCisJY2FzZSBJREVfUE1fU1RBTkRCWToJCS8qIFN1c3BlbmQgc3RlcCAyIChzdGFuZGJ5KSAqLwogCQlhcmdzLT50Zi5jb21tYW5kID0gQVRBX0NNRF9TVEFOREJZTk9XMTsKIAkJZ290byBvdXRfZG9fdGY7Ci0KLQljYXNlIGlkZWRpc2tfcG1fcmVzdG9yZV9waW86CS8qIFJlc3VtZSBzdGVwIDEgKHJlc3RvcmUgUElPKSAqLworCWNhc2UgSURFX1BNX1JFU1RPUkVfUElPOgkvKiBSZXN1bWUgc3RlcCAxIChyZXN0b3JlIFBJTykgKi8KIAkJaWRlX3NldF9tYXhfcGlvKGRyaXZlKTsKIAkJLyoKLQkJICogc2tpcCBpZGVkaXNrX3BtX2lkbGUgZm9yIEFUQVBJIGRldmljZXMKKwkJICogc2tpcCBJREVfUE1fSURMRSBmb3IgQVRBUEkgZGV2aWNlcwogCQkgKi8KIAkJaWYgKGRyaXZlLT5tZWRpYSAhPSBpZGVfZGlzaykKLQkJCXBtLT5wbV9zdGVwID0gaWRlX3BtX3Jlc3RvcmVfZG1hOworCQkJcG0tPnBtX3N0ZXAgPSBJREVfUE1fUkVTVE9SRV9ETUE7CiAJCWVsc2UKIAkJCWlkZV9jb21wbGV0ZV9wb3dlcl9zdGVwKGRyaXZlLCBycSwgMCwgMCk7CiAJCXJldHVybiBpZGVfc3RvcHBlZDsKLQotCWNhc2UgaWRlZGlza19wbV9pZGxlOgkJLyogUmVzdW1lIHN0ZXAgMiAoaWRsZSkgKi8KKwljYXNlIElERV9QTV9JRExFOgkJLyogUmVzdW1lIHN0ZXAgMiAoaWRsZSkgKi8KIAkJYXJncy0+dGYuY29tbWFuZCA9IEFUQV9DTURfSURMRUlNTUVESUFURTsKIAkJZ290byBvdXRfZG9fdGY7Ci0KLQljYXNlIGlkZV9wbV9yZXN0b3JlX2RtYToJLyogUmVzdW1lIHN0ZXAgMyAocmVzdG9yZSBETUEpICovCisJY2FzZSBJREVfUE1fUkVTVE9SRV9ETUE6CS8qIFJlc3VtZSBzdGVwIDMgKHJlc3RvcmUgRE1BKSAqLwogCQkvKgogCQkgKiBSaWdodCBub3csIGFsbCB3ZSBkbyBpcyBjYWxsIGlkZV9zZXRfZG1hKGRyaXZlKSwKIAkJICogd2UgY291bGQgYmUgc21hcnRlciBhbmQgY2hlY2sgZm9yIGN1cnJlbnQgeGZlcl9zcGVlZApAQCAtMjIyLDEyICsyMDUsMTMgQEAKIAkJaWYgKGRyaXZlLT5od2lmLT5kbWFfb3BzID09IE5VTEwpCiAJCQlicmVhazsKIAkJLyoKLQkJICogVE9ETzogcmVzcGVjdCAtPnVzaW5nX2RtYSBzZXR0aW5nCisJCSAqIFRPRE86IHJlc3BlY3QgSURFX0RGTEFHX1VTSU5HX0RNQQogCQkgKi8KIAkJaWRlX3NldF9kbWEoZHJpdmUpOwogCQlicmVhazsKIAl9Ci0JcG0tPnBtX3N0ZXAgPSBpZGVfcG1fc3RhdGVfY29tcGxldGVkOworCisJcG0tPnBtX3N0ZXAgPSBJREVfUE1fQ09NUExFVEVEOwogCXJldHVybiBpZGVfc3RvcHBlZDsKIAogb3V0X2RvX3RmOgpAQCAtMjg3LDcgKzI3MSw3IEBACiAJaWYgKGJsa19wbV9zdXNwZW5kX3JlcXVlc3QocnEpKSB7CiAJCWJsa19zdG9wX3F1ZXVlKGRyaXZlLT5xdWV1ZSk7CiAJfSBlbHNlIHsKLQkJZHJpdmUtPmJsb2NrZWQgPSAwOworCQlkcml2ZS0+ZGV2X2ZsYWdzICY9IH5JREVfREZMQUdfQkxPQ0tFRDsKIAkJYmxrX3N0YXJ0X3F1ZXVlKGRyaXZlLT5xdWV1ZSk7CiAJfQogCUhXR1JPVVAoZHJpdmUpLT5ycSA9IE5VTEw7CkBAIC0zNDMsNyArMzI3LDcgQEAKIAkJCWRyaXZlLT5uYW1lLCBycS0+cG0tPnBtX3N0ZXAsIHN0YXQsIGVycik7CiAjZW5kaWYKIAkJaWRlX2NvbXBsZXRlX3Bvd2VyX3N0ZXAoZHJpdmUsIHJxLCBzdGF0LCBlcnIpOwotCQlpZiAocG0tPnBtX3N0ZXAgPT0gaWRlX3BtX3N0YXRlX2NvbXBsZXRlZCkKKwkJaWYgKHBtLT5wbV9zdGVwID09IElERV9QTV9DT01QTEVURUQpCiAJCQlpZGVfY29tcGxldGVfcG1fcmVxdWVzdChkcml2ZSwgcnEpOwogCQlyZXR1cm47CiAJfQpAQCAtMzc0LDEzICszNTgsMTQgQEAKIHsKIAlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7CiAKLQlpZiAoKHN0YXQgJiBBVEFfQlVTWSkgfHwgKChzdGF0ICYgQVRBX0RGKSAmJiAhZHJpdmUtPm5vd2VycikpIHsKKwlpZiAoKHN0YXQgJiBBVEFfQlVTWSkgfHwKKwkgICAgKChzdGF0ICYgQVRBX0RGKSAmJiAoZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19OT1dFUlIpID09IDApKSB7CiAJCS8qIG90aGVyIGJpdHMgYXJlIHVzZWxlc3Mgd2hlbiBCVVNZICovCiAJCXJxLT5lcnJvcnMgfD0gRVJST1JfUkVTRVQ7CiAJfSBlbHNlIGlmIChzdGF0ICYgQVRBX0VSUikgewogCQkvKiBlcnIgaGFzIGRpZmZlcmVudCBtZWFuaW5nIG9uIGNkcm9tIGFuZCB0YXBlICovCiAJCWlmIChlcnIgPT0gQVRBX0FCT1JURUQpIHsKLQkJCWlmIChkcml2ZS0+c2VsZWN0LmIubGJhICYmCisJCQlpZiAoKGRyaXZlLT5kZXZfZmxhZ3MgJiBJREVfREZMQUdfTEJBKSAmJgogCQkJICAgIC8qIHNvbWUgbmV3ZXIgZHJpdmVzIGRvbid0IHN1cHBvcnQgQVRBX0NNRF9JTklUX0RFVl9QQVJBTVMgKi8KIAkJCSAgICBod2lmLT50cF9vcHMtPnJlYWRfc3RhdHVzKGh3aWYpID09IEFUQV9DTURfSU5JVF9ERVZfUEFSQU1TKQogCQkJCXJldHVybiBpZGVfc3RvcHBlZDsKQEAgLTQyOCw3ICs0MTMsOCBAQAogewogCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKIAotCWlmICgoc3RhdCAmIEFUQV9CVVNZKSB8fCAoKHN0YXQgJiBBVEFfREYpICYmICFkcml2ZS0+bm93ZXJyKSkgeworCWlmICgoc3RhdCAmIEFUQV9CVVNZKSB8fAorCSAgICAoKHN0YXQgJiBBVEFfREYpICYmIChkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX05PV0VSUikgPT0gMCkpIHsKIAkJLyogb3RoZXIgYml0cyBhcmUgdXNlbGVzcyB3aGVuIEJVU1kgKi8KIAkJcnEtPmVycm9ycyB8PSBFUlJPUl9SRVNFVDsKIAl9IGVsc2UgewpAQCAtNTA5LDcgKzQ5NSw3IEBACiAJdGYtPmxiYWwgICAgPSBkcml2ZS0+c2VjdDsKIAl0Zi0+bGJhbSAgICA9IGRyaXZlLT5jeWw7CiAJdGYtPmxiYWggICAgPSBkcml2ZS0+Y3lsID4+IDg7Ci0JdGYtPmRldmljZSAgPSAoKGRyaXZlLT5oZWFkIC0gMSkgfCBkcml2ZS0+c2VsZWN0LmFsbCkgJiB+QVRBX0xCQTsKKwl0Zi0+ZGV2aWNlICA9IChkcml2ZS0+aGVhZCAtIDEpIHwgZHJpdmUtPnNlbGVjdDsKIAl0Zi0+Y29tbWFuZCA9IEFUQV9DTURfSU5JVF9ERVZfUEFSQU1TOwogfQogCkBAIC01NTcsMzAgKzU0Myw2IEBACiAJcmV0dXJuIGlkZV9zdGFydGVkOwogfQogCi0vKgotICogaGFuZGxlIEhESU9fU0VUX1BJT19NT0RFIGlvY3RsIGFidXNlcnMgaGVyZSwgZXZlbnR1YWxseSBpdCB3aWxsIGdvIGF3YXkKLSAqLwotc3RhdGljIGludCBzZXRfcGlvX21vZGVfYWJ1c2UoaWRlX2h3aWZfdCAqaHdpZiwgdTggcmVxX3BpbykKLXsKLQlzd2l0Y2ggKHJlcV9waW8pIHsKLQljYXNlIDIwMjoKLQljYXNlIDIwMToKLQljYXNlIDIwMDoKLQljYXNlIDEwMjoKLQljYXNlIDEwMToKLQljYXNlIDEwMDoKLQkJcmV0dXJuIChod2lmLT5ob3N0X2ZsYWdzICYgSURFX0hGTEFHX0FCVVNFX0RNQV9NT0RFUykgPyAxIDogMDsKLQljYXNlIDk6Ci0JY2FzZSA4OgotCQlyZXR1cm4gKGh3aWYtPmhvc3RfZmxhZ3MgJiBJREVfSEZMQUdfQUJVU0VfUFJFRkVUQ0gpID8gMSA6IDA7Ci0JY2FzZSA3OgotCWNhc2UgNjoKLQkJcmV0dXJuIChod2lmLT5ob3N0X2ZsYWdzICYgSURFX0hGTEFHX0FCVVNFX0ZBU1RfREVWU0VMKSA/IDEgOiAwOwotCWRlZmF1bHQ6Ci0JCXJldHVybiAwOwotCX0KLX0KLQogLyoqCiAgKglkb19zcGVjaWFsCQktCWlzc3VlIHNvbWUgc3BlY2lhbCBjb21tYW5kcwogICoJQGRyaXZlOiBkcml2ZSB0aGUgY29tbWFuZCBpcyBmb3IKQEAgLTU5OCw0NSArNTYwLDEyIEBACiAjaWZkZWYgREVCVUcKIAlwcmludGsoIiVzOiBkb19zcGVjaWFsOiAweCUwMnhcbiIsIGRyaXZlLT5uYW1lLCBzLT5hbGwpOwogI2VuZGlmCi0JaWYgKHMtPmIuc2V0X3R1bmUpIHsKLQkJaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOwotCQljb25zdCBzdHJ1Y3QgaWRlX3BvcnRfb3BzICpwb3J0X29wcyA9IGh3aWYtPnBvcnRfb3BzOwotCQl1OCByZXFfcGlvID0gZHJpdmUtPnR1bmVfcmVxOworCWlmIChkcml2ZS0+bWVkaWEgPT0gaWRlX2Rpc2spCisJCXJldHVybiBpZGVfZGlza19zcGVjaWFsKGRyaXZlKTsKIAotCQlzLT5iLnNldF90dW5lID0gMDsKLQotCQlpZiAoc2V0X3Bpb19tb2RlX2FidXNlKGRyaXZlLT5od2lmLCByZXFfcGlvKSkgewotCQkJLyoKLQkJCSAqIHRha2UgaWRlX2xvY2sgZm9yIGRyaXZlLT5bbm9fXXVubWFzay9bbm9fXWlvXzMyYml0Ci0JCQkgKi8KLQkJCWlmIChyZXFfcGlvID09IDggfHwgcmVxX3BpbyA9PSA5KSB7Ci0JCQkJdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCQkJCXNwaW5fbG9ja19pcnFzYXZlKCZpZGVfbG9jaywgZmxhZ3MpOwotCQkJCXBvcnRfb3BzLT5zZXRfcGlvX21vZGUoZHJpdmUsIHJlcV9waW8pOwotCQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlkZV9sb2NrLCBmbGFncyk7Ci0JCQl9IGVsc2UKLQkJCQlwb3J0X29wcy0+c2V0X3Bpb19tb2RlKGRyaXZlLCByZXFfcGlvKTsKLQkJfSBlbHNlIHsKLQkJCWludCBrZWVwX2RtYSA9IGRyaXZlLT51c2luZ19kbWE7Ci0KLQkJCWlkZV9zZXRfcGlvKGRyaXZlLCByZXFfcGlvKTsKLQotCQkJaWYgKGh3aWYtPmhvc3RfZmxhZ3MgJiBJREVfSEZMQUdfU0VUX1BJT19NT0RFX0tFRVBfRE1BKSB7Ci0JCQkJaWYgKGtlZXBfZG1hKQotCQkJCQlpZGVfZG1hX29uKGRyaXZlKTsKLQkJCX0KLQkJfQotCi0JCXJldHVybiBpZGVfc3RvcHBlZDsKLQl9IGVsc2UgewotCQlpZiAoZHJpdmUtPm1lZGlhID09IGlkZV9kaXNrKQotCQkJcmV0dXJuIGlkZV9kaXNrX3NwZWNpYWwoZHJpdmUpOwotCi0JCXMtPmFsbCA9IDA7Ci0JCWRyaXZlLT5tdWx0X3JlcSA9IDA7Ci0JCXJldHVybiBpZGVfc3RvcHBlZDsKLQl9CisJcy0+YWxsID0gMDsKKwlkcml2ZS0+bXVsdF9yZXEgPSAwOworCXJldHVybiBpZGVfc3RvcHBlZDsKIH0KIAogdm9pZCBpZGVfbWFwX3NnKGlkZV9kcml2ZV90ICpkcml2ZSwgc3RydWN0IHJlcXVlc3QgKnJxKQpAQCAtNzI2LDEwICs2NTUsNyBAQAogCWlmICghKHNldHRpbmctPmZsYWdzICYgRFNfU1lOQykpCiAJCXJldHVybiBzZXR0aW5nLT5zZXQoZHJpdmUsIGFyZyk7CiAKLQlycSA9IGJsa19nZXRfcmVxdWVzdChxLCBSRUFELCBHRlBfS0VSTkVMKTsKLQlpZiAoIXJxKQotCQlyZXR1cm4gLUVOT01FTTsKLQorCXJxID0gYmxrX2dldF9yZXF1ZXN0KHEsIFJFQUQsIF9fR0ZQX1dBSVQpOwogCXJxLT5jbWRfdHlwZSA9IFJFUV9UWVBFX1NQRUNJQUw7CiAJcnEtPmNtZF9sZW4gPSA1OwogCXJxLT5jbWRbMF0gPSBSRVFfREVWU0VUX0VYRUM7CkBAIC03NDYsNyArNjcyLDMyIEBACiAKIHN0YXRpYyBpZGVfc3RhcnRzdG9wX3QgaWRlX3NwZWNpYWxfcnEoaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgcmVxdWVzdCAqcnEpCiB7Ci0Jc3dpdGNoIChycS0+Y21kWzBdKSB7CisJdTggY21kID0gcnEtPmNtZFswXTsKKworCWlmIChjbWQgPT0gUkVRX1BBUktfSEVBRFMgfHwgY21kID09IFJFUV9VTlBBUktfSEVBRFMpIHsKKwkJaWRlX3Rhc2tfdCB0YXNrOworCQlzdHJ1Y3QgaWRlX3Rhc2tmaWxlICp0ZiA9ICZ0YXNrLnRmOworCisJCW1lbXNldCgmdGFzaywgMCwgc2l6ZW9mKHRhc2spKTsKKwkJaWYgKGNtZCA9PSBSRVFfUEFSS19IRUFEUykgeworCQkJZHJpdmUtPnNsZWVwID0gKih1bnNpZ25lZCBsb25nICopcnEtPnNwZWNpYWw7CisJCQlkcml2ZS0+ZGV2X2ZsYWdzIHw9IElERV9ERkxBR19TTEVFUElORzsKKwkJCXRmLT5jb21tYW5kID0gQVRBX0NNRF9JRExFSU1NRURJQVRFOworCQkJdGYtPmZlYXR1cmUgPSAweDQ0OworCQkJdGYtPmxiYWwgPSAweDRjOworCQkJdGYtPmxiYW0gPSAweDRlOworCQkJdGYtPmxiYWggPSAweDU1OworCQkJdGFzay50Zl9mbGFncyB8PSBJREVfVEZMQUdfQ1VTVE9NX0hBTkRMRVI7CisJCX0gZWxzZQkJLyogY21kID09IFJFUV9VTlBBUktfSEVBRFMgKi8KKwkJCXRmLT5jb21tYW5kID0gQVRBX0NNRF9DSEtfUE9XRVI7CisKKwkJdGFzay50Zl9mbGFncyB8PSBJREVfVEZMQUdfVEYgfCBJREVfVEZMQUdfREVWSUNFOworCQl0YXNrLnJxID0gcnE7CisJCWRyaXZlLT5od2lmLT5kYXRhX3BoYXNlID0gdGFzay5kYXRhX3BoYXNlID0gVEFTS0ZJTEVfTk9fREFUQTsKKwkJcmV0dXJuIGRvX3J3X3Rhc2tmaWxlKGRyaXZlLCAmdGFzayk7CisJfQorCisJc3dpdGNoIChjbWQpIHsKIAljYXNlIFJFUV9ERVZTRVRfRVhFQzoKIAl7CiAJCWludCBlcnIsICgqc2V0ZnVuYykoaWRlX2RyaXZlX3QgKiwgaW50KSA9IHJxLT5zcGVjaWFsOwpAQCAtNzczLDExICs3MjQsMTEgQEAKIAlzdHJ1Y3QgcmVxdWVzdF9wbV9zdGF0ZSAqcG0gPSBycS0+ZGF0YTsKIAogCWlmIChibGtfcG1fc3VzcGVuZF9yZXF1ZXN0KHJxKSAmJgotCSAgICBwbS0+cG1fc3RlcCA9PSBpZGVfcG1fc3RhdGVfc3RhcnRfc3VzcGVuZCkKKwkgICAgcG0tPnBtX3N0ZXAgPT0gSURFX1BNX1NUQVJUX1NVU1BFTkQpCiAJCS8qIE1hcmsgZHJpdmUgYmxvY2tlZCB3aGVuIHN0YXJ0aW5nIHRoZSBzdXNwZW5kIHNlcXVlbmNlLiAqLwotCQlkcml2ZS0+YmxvY2tlZCA9IDE7CisJCWRyaXZlLT5kZXZfZmxhZ3MgfD0gSURFX0RGTEFHX0JMT0NLRUQ7CiAJZWxzZSBpZiAoYmxrX3BtX3Jlc3VtZV9yZXF1ZXN0KHJxKSAmJgotCQkgcG0tPnBtX3N0ZXAgPT0gaWRlX3BtX3N0YXRlX3N0YXJ0X3Jlc3VtZSkgeworCQkgcG0tPnBtX3N0ZXAgPT0gSURFX1BNX1NUQVJUX1JFU1VNRSkgewogCQkvKiAKIAkJICogVGhlIGZpcnN0IHRoaW5nIHdlIGRvIG9uIHdha2V1cCBpcyB0byB3YWl0IGZvciBCU1kgYml0IHRvCiAJCSAqIGdvIGF3YXkgKHdpdGggYSBsb29vbmcgdGltZW91dCkgYXMgYSBkcml2ZSBvbiB0aGlzIGh3aWYgbWF5CkBAIC04NTcsNyArODA4LDcgQEAKICNlbmRpZgogCQkJc3RhcnRzdG9wID0gaWRlX3N0YXJ0X3Bvd2VyX3N0ZXAoZHJpdmUsIHJxKTsKIAkJCWlmIChzdGFydHN0b3AgPT0gaWRlX3N0b3BwZWQgJiYKLQkJCSAgICBwbS0+cG1fc3RlcCA9PSBpZGVfcG1fc3RhdGVfY29tcGxldGVkKQorCQkJICAgIHBtLT5wbV9zdGVwID09IElERV9QTV9DT01QTEVURUQpCiAJCQkJaWRlX2NvbXBsZXRlX3BtX3JlcXVlc3QoZHJpdmUsIHJxKTsKIAkJCXJldHVybiBzdGFydHN0b3A7CiAJCX0gZWxzZSBpZiAoIXJxLT5ycV9kaXNrICYmIGJsa19zcGVjaWFsX3JlcXVlc3QocnEpKQpAQCAtODk1LDcgKzg0Niw3IEBACiAJaWYgKHRpbWVvdXQgPiBXQUlUX1dPUlNUQ0FTRSkKIAkJdGltZW91dCA9IFdBSVRfV09SU1RDQVNFOwogCWRyaXZlLT5zbGVlcCA9IHRpbWVvdXQgKyBqaWZmaWVzOwotCWRyaXZlLT5zbGVlcGluZyA9IDE7CisJZHJpdmUtPmRldl9mbGFncyB8PSBJREVfREZMQUdfU0xFRVBJTkc7CiB9CiAKIEVYUE9SVF9TWU1CT0woaWRlX3N0YWxsX3F1ZXVlKTsKQEAgLTkzNSwxOCArODg2LDIzIEBACiAJfQogCiAJZG8gewotCQlpZiAoKCFkcml2ZS0+c2xlZXBpbmcgfHwgdGltZV9hZnRlcl9lcShqaWZmaWVzLCBkcml2ZS0+c2xlZXApKQotCQkgICAgJiYgIWVsdl9xdWV1ZV9lbXB0eShkcml2ZS0+cXVldWUpKSB7Ci0JCQlpZiAoIWJlc3QKLQkJCSB8fCAoZHJpdmUtPnNsZWVwaW5nICYmICghYmVzdC0+c2xlZXBpbmcgfHwgdGltZV9iZWZvcmUoZHJpdmUtPnNsZWVwLCBiZXN0LT5zbGVlcCkpKQotCQkJIHx8ICghYmVzdC0+c2xlZXBpbmcgJiYgdGltZV9iZWZvcmUoV0FLRVVQKGRyaXZlKSwgV0FLRVVQKGJlc3QpKSkpCi0JCQl7CisJCXU4IGRldl9zID0gISEoZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19TTEVFUElORyk7CisJCXU4IGJlc3RfcyA9IChiZXN0ICYmICEhKGJlc3QtPmRldl9mbGFncyAmIElERV9ERkxBR19TTEVFUElORykpOworCisJCWlmICgoZGV2X3MgPT0gMCB8fCB0aW1lX2FmdGVyX2VxKGppZmZpZXMsIGRyaXZlLT5zbGVlcCkpICYmCisJCSAgICAhZWx2X3F1ZXVlX2VtcHR5KGRyaXZlLT5xdWV1ZSkpIHsKKwkJCWlmIChiZXN0ID09IE5VTEwgfHwKKwkJCSAgICAoZGV2X3MgJiYgKGJlc3RfcyA9PSAwIHx8IHRpbWVfYmVmb3JlKGRyaXZlLT5zbGVlcCwgYmVzdC0+c2xlZXApKSkgfHwKKwkJCSAgICAoYmVzdF9zID09IDAgJiYgdGltZV9iZWZvcmUoV0FLRVVQKGRyaXZlKSwgV0FLRVVQKGJlc3QpKSkpIHsKIAkJCQlpZiAoIWJsa19xdWV1ZV9wbHVnZ2VkKGRyaXZlLT5xdWV1ZSkpCiAJCQkJCWJlc3QgPSBkcml2ZTsKIAkJCX0KIAkJfQogCX0gd2hpbGUgKChkcml2ZSA9IGRyaXZlLT5uZXh0KSAhPSBod2dyb3VwLT5kcml2ZSk7Ci0JaWYgKGJlc3QgJiYgYmVzdC0+bmljZTEgJiYgIWJlc3QtPnNsZWVwaW5nICYmIGJlc3QgIT0gaHdncm91cC0+ZHJpdmUgJiYgYmVzdC0+c2VydmljZV90aW1lID4gV0FJVF9NSU5fU0xFRVApIHsKKworCWlmIChiZXN0ICYmIChiZXN0LT5kZXZfZmxhZ3MgJiBJREVfREZMQUdfTklDRTEpICYmCisJICAgIChiZXN0LT5kZXZfZmxhZ3MgJiBJREVfREZMQUdfU0xFRVBJTkcpID09IDAgJiYKKwkgICAgYmVzdCAhPSBod2dyb3VwLT5kcml2ZSAmJiBiZXN0LT5zZXJ2aWNlX3RpbWUgPiBXQUlUX01JTl9TTEVFUCkgewogCQlsb25nIHQgPSAoc2lnbmVkIGxvbmcpKFdBS0VVUChiZXN0KSAtIGppZmZpZXMpOwogCQlpZiAodCA+PSBXQUlUX01JTl9TTEVFUCkgewogCQkvKgpAQCAtOTU1LDcgKzkxMSw3IEBACiAJCSAqLwogCQkJZHJpdmUgPSBiZXN0LT5uZXh0OwogCQkJZG8gewotCQkJCWlmICghZHJpdmUtPnNsZWVwaW5nCisJCQkJaWYgKChkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX1NMRUVQSU5HKSA9PSAwCiAJCQkJICYmIHRpbWVfYmVmb3JlKGppZmZpZXMgLSBiZXN0LT5zZXJ2aWNlX3RpbWUsIFdBS0VVUChkcml2ZSkpCiAJCQkJICYmIHRpbWVfYmVmb3JlKFdBS0VVUChkcml2ZSksIGppZmZpZXMgKyB0KSkKIAkJCQl7CkBAIC0xMDI2LDcgKzk4Miw5IEBACiAJCQlod2dyb3VwLT5ycSA9IE5VTEw7CiAJCQlkcml2ZSA9IGh3Z3JvdXAtPmRyaXZlOwogCQkJZG8gewotCQkJCWlmIChkcml2ZS0+c2xlZXBpbmcgJiYgKCFzbGVlcGluZyB8fCB0aW1lX2JlZm9yZShkcml2ZS0+c2xlZXAsIHNsZWVwKSkpIHsKKwkJCQlpZiAoKGRyaXZlLT5kZXZfZmxhZ3MgJiBJREVfREZMQUdfU0xFRVBJTkcpICYmCisJCQkJICAgIChzbGVlcGluZyA9PSAwIHx8CisJCQkJICAgICB0aW1lX2JlZm9yZShkcml2ZS0+c2xlZXAsIHNsZWVwKSkpIHsKIAkJCQkJc2xlZXBpbmcgPSAxOwogCQkJCQlzbGVlcCA9IGRyaXZlLT5zbGVlcDsKIAkJCQl9CkBAIC0xMDc1LDcgKzEwMzMsNyBAQAogCQl9CiAJCWh3Z3JvdXAtPmh3aWYgPSBod2lmOwogCQlod2dyb3VwLT5kcml2ZSA9IGRyaXZlOwotCQlkcml2ZS0+c2xlZXBpbmcgPSAwOworCQlkcml2ZS0+ZGV2X2ZsYWdzICY9IH4oSURFX0RGTEFHX1NMRUVQSU5HIHwgSURFX0RGTEFHX1BBUktFRCk7CiAJCWRyaXZlLT5zZXJ2aWNlX3N0YXJ0ID0gamlmZmllczsKIAogCQlpZiAoYmxrX3F1ZXVlX3BsdWdnZWQoZHJpdmUtPnF1ZXVlKSkgewpAQCAtMTEwOSw3ICsxMDY3LDkgQEAKIAkJICogV2UgY291bnQgaG93IG1hbnkgdGltZXMgd2UgbG9vcCBoZXJlIHRvIG1ha2Ugc3VyZSB3ZSBzZXJ2aWNlCiAJCSAqIGFsbCBkcml2ZXMgaW4gdGhlIGh3Z3JvdXAgd2l0aG91dCBsb29waW5nIGZvciBldmVyCiAJCSAqLwotCQlpZiAoZHJpdmUtPmJsb2NrZWQgJiYgIWJsa19wbV9yZXF1ZXN0KHJxKSAmJiAhKHJxLT5jbWRfZmxhZ3MgJiBSRVFfUFJFRU1QVCkpIHsKKwkJaWYgKChkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX0JMT0NLRUQpICYmCisJCSAgICBibGtfcG1fcmVxdWVzdChycSkgPT0gMCAmJgorCQkgICAgKHJxLT5jbWRfZmxhZ3MgJiBSRVFfUFJFRU1QVCkgPT0gMCkgewogCQkJZHJpdmUgPSBkcml2ZS0+bmV4dCA/IGRyaXZlLT5uZXh0IDogaHdncm91cC0+ZHJpdmU7CiAJCQlpZiAobG9vcHMrKyA8IDQgJiYgIWJsa19xdWV1ZV9wbHVnZ2VkKGRyaXZlLT5xdWV1ZSkpCiAJCQkJZ290byBhZ2FpbjsKQEAgLTExODIsOCArMTE0Miw4IEBACiAJICogYSB0aW1lb3V0IC0tIHdlJ2xsIHJlZW5hYmxlIGFmdGVyIHdlIGZpbmlzaCB0aGlzIG5leHQgcmVxdWVzdAogCSAqIChvciByYXRoZXIgdGhlIGZpcnN0IGNodW5rIG9mIGl0KSBpbiBwaW8uCiAJICovCisJZHJpdmUtPmRldl9mbGFncyB8PSBJREVfREZMQUdfRE1BX1BJT19SRVRSWTsKIAlkcml2ZS0+cmV0cnlfcGlvKys7Ci0JZHJpdmUtPnN0YXRlID0gRE1BX1BJT19SRVRSWTsKIAlpZGVfZG1hX29mZl9xdWlldGx5KGRyaXZlKTsKIAogCS8qCkBAIC0xNDgwLDIzICsxNDQwLDE2IEBACiAJZGVsX3RpbWVyKCZod2dyb3VwLT50aW1lcik7CiAJc3Bpbl91bmxvY2soJmlkZV9sb2NrKTsKIAotCS8qIFNvbWUgY29udHJvbGxlcnMgbWlnaHQgc2V0IERNQSBJTlRSIG5vIG1hdHRlciBETUEgb3IgUElPOwotCSAqIGJtZG1hIHN0YXR1cyBtaWdodCBuZWVkIHRvIGJlIGNsZWFyZWQgZXZlbiBmb3IKLQkgKiBQSU8gaW50ZXJydXB0cyB0byBwcmV2ZW50IHNwdXJpb3VzL2xvc3QgaXJxLgotCSAqLwotCWlmIChod2lmLT5pZGVfZG1hX2NsZWFyX2lycSAmJiAhKGRyaXZlLT53YWl0aW5nX2Zvcl9kbWEpKQotCQkvKiBpZGVfZG1hX2VuZCgpIG5lZWRzIGJtZG1hIHN0YXR1cyBmb3IgZXJyb3IgY2hlY2tpbmcuCi0JCSAqIFNvLCBza2lwIGNsZWFyaW5nIGJtZG1hIHN0YXR1cyBoZXJlIGFuZCBsZWF2ZSBpdAotCQkgKiB0byBpZGVfZG1hX2VuZCgpIGlmIHRoaXMgaXMgZG1hIGludGVycnVwdC4KLQkJICovCi0JCWh3aWYtPmlkZV9kbWFfY2xlYXJfaXJxKGRyaXZlKTsKKwlpZiAoaHdpZi0+cG9ydF9vcHMgJiYgaHdpZi0+cG9ydF9vcHMtPmNsZWFyX2lycSkKKwkJaHdpZi0+cG9ydF9vcHMtPmNsZWFyX2lycShkcml2ZSk7CiAKLQlpZiAoZHJpdmUtPnVubWFzaykKKwlpZiAoZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19VTk1BU0spCiAJCWxvY2FsX2lycV9lbmFibGVfaW5faGFyZGlycSgpOworCiAJLyogc2VydmljZSB0aGlzIGludGVycnVwdCwgbWF5IHNldCBoYW5kbGVyIGZvciBuZXh0IGludGVycnVwdCAqLwogCXN0YXJ0c3RvcCA9IGhhbmRsZXIoZHJpdmUpOwotCXNwaW5fbG9ja19pcnEoJmlkZV9sb2NrKTsKIAorCXNwaW5fbG9ja19pcnEoJmlkZV9sb2NrKTsKIAkvKgogCSAqIE5vdGUgdGhhdCBoYW5kbGVyKCkgbWF5IGhhdmUgc2V0IHRoaW5ncyB1cCBmb3IgYW5vdGhlcgogCSAqIGludGVycnVwdCB0byBvY2N1ciBzb29uLCBidXQgaXQgY2Fubm90IGhhcHBlbiB1bnRpbApAQCAtMTU0MCw4ICsxNDkzLDggQEAKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZpZGVfbG9jaywgZmxhZ3MpOwogCWh3Z3JvdXAtPnJxID0gTlVMTDsKLQlfX2Vsdl9hZGRfcmVxdWVzdChkcml2ZS0+cXVldWUsIHJxLCBFTEVWQVRPUl9JTlNFUlRfRlJPTlQsIDEpOwotCV9fZ2VuZXJpY191bnBsdWdfZGV2aWNlKGRyaXZlLT5xdWV1ZSk7CisJX19lbHZfYWRkX3JlcXVlc3QoZHJpdmUtPnF1ZXVlLCBycSwgRUxFVkFUT1JfSU5TRVJUX0ZST05ULCAwKTsKKwlibGtfc3RhcnRfcXVldWVpbmcoZHJpdmUtPnF1ZXVlKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpZGVfbG9jaywgZmxhZ3MpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9pZGUtaW9jdGxzLmMgYi9kcml2ZXJzL2lkZS9pZGUtaW9jdGxzLmMKaW5kZXggY2YwMTU2NC4uYTkwOTQ1ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvaWRlLWlvY3Rscy5jCisrKyBiL2RyaXZlcnMvaWRlL2lkZS1pb2N0bHMuYwpAQCAtNjIsNyArNjIsNyBAQAogCWludCBzaXplID0gKGNtZCA9PSBIRElPX0dFVF9JREVOVElUWSkgPyAoQVRBX0lEX1dPUkRTICogMikgOiAxNDI7CiAJaW50IHJjID0gMDsKIAotCWlmIChkcml2ZS0+aWRfcmVhZCA9PSAwKSB7CisJaWYgKChkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX0lEX1JFQUQpID09IDApIHsKIAkJcmMgPSAtRU5PTVNHOwogCQlnb3RvIG91dDsKIAl9CkBAIC04Niw4ICs4NiwxMCBAQAogCiBzdGF0aWMgaW50IGlkZV9nZXRfbmljZV9pb2N0bChpZGVfZHJpdmVfdCAqZHJpdmUsIHVuc2lnbmVkIGxvbmcgYXJnKQogewotCXJldHVybiBwdXRfdXNlcigoZHJpdmUtPmRzY19vdmVybGFwIDw8IElERV9OSUNFX0RTQ19PVkVSTEFQKSB8Ci0JCQkoZHJpdmUtPm5pY2UxIDw8IElERV9OSUNFXzEpLCAobG9uZyBfX3VzZXIgKilhcmcpOworCXJldHVybiBwdXRfdXNlcigoISEoZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19EU0NfT1ZFUkxBUCkKKwkJCSA8PCBJREVfTklDRV9EU0NfT1ZFUkxBUCkgfAorCQkJKCEhKGRyaXZlLT5kZXZfZmxhZ3MgJiBJREVfREZMQUdfTklDRTEpCisJCQkgPDwgSURFX05JQ0VfMSksIChsb25nIF9fdXNlciAqKWFyZyk7CiB9CiAKIHN0YXRpYyBpbnQgaWRlX3NldF9uaWNlX2lvY3RsKGlkZV9kcml2ZV90ICpkcml2ZSwgdW5zaWduZWQgbG9uZyBhcmcpCkBAIC05NywxMSArOTksMTggQEAKIAogCWlmICgoKGFyZyA+PiBJREVfTklDRV9EU0NfT1ZFUkxBUCkgJiAxKSAmJgogCSAgICAoZHJpdmUtPm1lZGlhID09IGlkZV9kaXNrIHx8IGRyaXZlLT5tZWRpYSA9PSBpZGVfZmxvcHB5IHx8Ci0JICAgICBkcml2ZS0+c2NzaSkpCisJICAgICAoZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19TQ1NJKSkpCiAJCXJldHVybiAtRVBFUk07CiAKLQlkcml2ZS0+ZHNjX292ZXJsYXAgPSAoYXJnID4+IElERV9OSUNFX0RTQ19PVkVSTEFQKSAmIDE7Ci0JZHJpdmUtPm5pY2UxID0gKGFyZyA+PiBJREVfTklDRV8xKSAmIDE7CisJaWYgKChhcmcgPj4gSURFX05JQ0VfRFNDX09WRVJMQVApICYgMSkKKwkJZHJpdmUtPmRldl9mbGFncyB8PSBJREVfREZMQUdfRFNDX09WRVJMQVA7CisJZWxzZQorCQlkcml2ZS0+ZGV2X2ZsYWdzICY9IH5JREVfREZMQUdfRFNDX09WRVJMQVA7CisKKwlpZiAoKGFyZyA+PiBJREVfTklDRV8xKSAmIDEpCisJCWRyaXZlLT5kZXZfZmxhZ3MgfD0gSURFX0RGTEFHX05JQ0UxOworCWVsc2UKKwkJZHJpdmUtPmRldl9mbGFncyAmPSB+SURFX0RGTEFHX05JQ0UxOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9pZGUtaW9wcy5jIGIvZHJpdmVycy9pZGUvaWRlLWlvcHMuYwppbmRleCAwYTJmZDNiLi5iYjdhMWVkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9pZGUtaW9wcy5jCisrKyBiL2RyaXZlcnMvaWRlL2lkZS1pb3BzLmMKQEAgLTE4MSw3ICsxODEsNyBAQAogCQl0Zl9vdXRiKHRmLT5sYmFoLCBpb19wb3J0cy0+bGJhaF9hZGRyKTsKIAogCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfREVWSUNFKQotCQl0Zl9vdXRiKCh0Zi0+ZGV2aWNlICYgSElISSkgfCBkcml2ZS0+c2VsZWN0LmFsbCwKKwkJdGZfb3V0YigodGYtPmRldmljZSAmIEhJSEkpIHwgZHJpdmUtPnNlbGVjdCwKIAkJCSBpb19wb3J0cy0+ZGV2aWNlX2FkZHIpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoaWRlX3RmX2xvYWQpOwpAQCAtNjQ3LDcgKzY0Nyw3IEBACiAJCXJldHVybiAxOwogCiBub184MHc6Ci0JaWYgKGRyaXZlLT51ZG1hMzNfd2FybmVkID09IDEpCisJaWYgKGRyaXZlLT5kZXZfZmxhZ3MgJiBJREVfREZMQUdfVURNQTMzX1dBUk5FRCkKIAkJcmV0dXJuIDA7CiAKIAlwcmludGsoS0VSTl9XQVJOSU5HICIlczogJXMgc2lkZSA4MC13aXJlIGNhYmxlIGRldGVjdGlvbiBmYWlsZWQsICIKQEAgLTY1NSw3ICs2NTUsNyBAQAogCQkJICAgIGRyaXZlLT5uYW1lLAogCQkJICAgIGh3aWYtPmNibCA9PSBBVEFfQ0JMX1BBVEE4MCA/ICJkcml2ZSIgOiAiaG9zdCIpOwogCi0JZHJpdmUtPnVkbWEzM193YXJuZWQgPSAxOworCWRyaXZlLT5kZXZfZmxhZ3MgfD0gSURFX0RGTEFHX1VETUEzM19XQVJORUQ7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTcxMSw3ICs3MTEsNyBAQAogCiAJa2ZyZWUoaWQpOwogCi0JaWYgKGRyaXZlLT51c2luZ19kbWEgJiYgaWRlX2lkX2RtYV9idWcoZHJpdmUpKQorCWlmICgoZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19VU0lOR19ETUEpICYmIGlkZV9pZF9kbWFfYnVnKGRyaXZlKSkKIAkJaWRlX2RtYV9vZmYoZHJpdmUpOwogCiAJcmV0dXJuIDE7CkBAIC03NTUsNyArNzU1LDcgQEAKIAkgCiAJdWRlbGF5KDEpOwogCVNFTEVDVF9EUklWRShkcml2ZSk7Ci0JU0VMRUNUX01BU0soZHJpdmUsIDApOworCVNFTEVDVF9NQVNLKGRyaXZlLCAxKTsKIAl1ZGVsYXkoMSk7CiAJdHBfb3BzLT5zZXRfaXJxKGh3aWYsIDApOwogCkBAIC03OTAsNyArNzkwLDcgQEAKIAogIHNraXA6CiAjaWZkZWYgQ09ORklHX0JMS19ERVZfSURFRE1BCi0JaWYgKHNwZWVkID49IFhGRVJfU1dfRE1BXzAgJiYgZHJpdmUtPnVzaW5nX2RtYSkKKwlpZiAoc3BlZWQgPj0gWEZFUl9TV19ETUFfMCAmJiAoZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19VU0lOR19ETUEpKQogCQlod2lmLT5kbWFfb3BzLT5kbWFfaG9zdF9zZXQoZHJpdmUsIDEpOwogCWVsc2UgaWYgKGh3aWYtPmRtYV9vcHMpCS8qIGNoZWNrIGlmIGhvc3Qgc3VwcG9ydHMgRE1BICovCiAJCWlkZV9kbWFfb2ZmX3F1aWV0bHkoZHJpdmUpOwpAQCAtOTQwLDYgKzk0MCwyNSBAQAogCXJldHVybiBpZGVfc3RvcHBlZDsKIH0KIAorc3RhdGljIHZvaWQgaWRlX3Jlc2V0X3JlcG9ydF9lcnJvcihpZGVfaHdpZl90ICpod2lmLCB1OCBlcnIpCit7CisJc3RhdGljIGNvbnN0IGNoYXIgKmVycl9tYXN0ZXJfdmFsc1tdID0KKwkJeyBOVUxMLCAicGFzc2VkIiwgImZvcm1hdHRlciBkZXZpY2UgZXJyb3IiLAorCQkgICJzZWN0b3IgYnVmZmVyIGVycm9yIiwgIkVDQyBjaXJjdWl0cnkgZXJyb3IiLAorCQkgICJjb250cm9sbGluZyBNUFUgZXJyb3IiIH07CisKKwl1OCBlcnJfbWFzdGVyID0gZXJyICYgMHg3ZjsKKworCXByaW50ayhLRVJOX0VSUiAiJXM6IHJlc2V0OiBtYXN0ZXI6ICIsIGh3aWYtPm5hbWUpOworCWlmIChlcnJfbWFzdGVyICYmIGVycl9tYXN0ZXIgPCA2KQorCQlwcmludGsoS0VSTl9DT05UICIlcyIsIGVycl9tYXN0ZXJfdmFsc1tlcnJfbWFzdGVyXSk7CisJZWxzZQorCQlwcmludGsoS0VSTl9DT05UICJlcnJvciAoMHglMDJ4PykiLCBlcnIpOworCWlmIChlcnIgJiAweDgwKQorCQlwcmludGsoS0VSTl9DT05UICI7IHNsYXZlOiBmYWlsZWQiKTsKKwlwcmludGsoS0VSTl9DT05UICJcbiIpOworfQorCiAvKgogICogcmVzZXRfcG9sbGZ1bmMoKSBnZXRzIGludm9rZWQgdG8gcG9sbCB0aGUgaW50ZXJmYWNlIGZvciBjb21wbGV0aW9uIGV2ZXJ5IDUwbXMKICAqIGR1cmluZyBhbiBpZGUgcmVzZXQgb3BlcmF0aW9uLiBJZiB0aGUgZHJpdmVzIGhhdmUgbm90IHlldCByZXNwb25kZWQsCkBAIC05NzUsMzEgKzk5NCwxNCBAQAogCQlkcml2ZS0+ZmFpbHVyZXMrKzsKIAkJZXJyID0gLUVJTzsKIAl9IGVsc2UgIHsKLQkJcHJpbnRrKCIlczogcmVzZXQ6ICIsIGh3aWYtPm5hbWUpOwogCQl0bXAgPSBpZGVfcmVhZF9lcnJvcihkcml2ZSk7CiAKIAkJaWYgKHRtcCA9PSAxKSB7Ci0JCQlwcmludGsoInN1Y2Nlc3NcbiIpOworCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IHJlc2V0OiBzdWNjZXNzXG4iLCBod2lmLT5uYW1lKTsKIAkJCWRyaXZlLT5mYWlsdXJlcyA9IDA7CiAJCX0gZWxzZSB7CisJCQlpZGVfcmVzZXRfcmVwb3J0X2Vycm9yKGh3aWYsIHRtcCk7CiAJCQlkcml2ZS0+ZmFpbHVyZXMrKzsKLQkJCXByaW50aygibWFzdGVyOiAiKTsKLQkJCXN3aXRjaCAodG1wICYgMHg3ZikgewotCQkJCWNhc2UgMTogcHJpbnRrKCJwYXNzZWQiKTsKLQkJCQkJYnJlYWs7Ci0JCQkJY2FzZSAyOiBwcmludGsoImZvcm1hdHRlciBkZXZpY2UgZXJyb3IiKTsKLQkJCQkJYnJlYWs7Ci0JCQkJY2FzZSAzOiBwcmludGsoInNlY3RvciBidWZmZXIgZXJyb3IiKTsKLQkJCQkJYnJlYWs7Ci0JCQkJY2FzZSA0OiBwcmludGsoIkVDQyBjaXJjdWl0cnkgZXJyb3IiKTsKLQkJCQkJYnJlYWs7Ci0JCQkJY2FzZSA1OiBwcmludGsoImNvbnRyb2xsaW5nIE1QVSBlcnJvciIpOwotCQkJCQlicmVhazsKLQkJCQlkZWZhdWx0OnByaW50aygiZXJyb3IgKDB4JTAyeD8pIiwgdG1wKTsKLQkJCX0KLQkJCWlmICh0bXAgJiAweDgwKQotCQkJCXByaW50aygiOyBzbGF2ZTogZmFpbGVkIik7Ci0JCQlwcmludGsoIlxuIik7CiAJCQllcnIgPSAtRUlPOwogCQl9CiAJfQpAQCAtMTAxNiw5ICsxMDE4LDE0IEBACiAJZHJpdmUtPnNwZWNpYWwuYWxsID0gMDsKIAlkcml2ZS0+c3BlY2lhbC5iLnNldF9nZW9tZXRyeSA9IGxlZ2FjeTsKIAlkcml2ZS0+c3BlY2lhbC5iLnJlY2FsaWJyYXRlICA9IGxlZ2FjeTsKKwogCWRyaXZlLT5tdWx0X2NvdW50ID0gMDsKLQlpZiAoIWRyaXZlLT5rZWVwX3NldHRpbmdzICYmICFkcml2ZS0+dXNpbmdfZG1hKQorCWRyaXZlLT5kZXZfZmxhZ3MgJj0gfklERV9ERkxBR19QQVJLRUQ7CisKKwlpZiAoKGRyaXZlLT5kZXZfZmxhZ3MgJiBJREVfREZMQUdfS0VFUF9TRVRUSU5HUykgPT0gMCAmJgorCSAgICAoZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19VU0lOR19ETUEpID09IDApCiAJCWRyaXZlLT5tdWx0X3JlcSA9IDA7CisKIAlpZiAoZHJpdmUtPm11bHRfcmVxICE9IGRyaXZlLT5tdWx0X2NvdW50KQogCQlkcml2ZS0+c3BlY2lhbC5iLnNldF9tdWx0bW9kZSA9IDE7CiB9CkBAIC0xMDMwLDE4ICsxMDM3LDE4IEBACiAJaWYgKGRyaXZlLT5tZWRpYSA9PSBpZGVfZGlzaykKIAkJaWRlX2Rpc2tfcHJlX3Jlc2V0KGRyaXZlKTsKIAllbHNlCi0JCWRyaXZlLT5wb3N0X3Jlc2V0ID0gMTsKKwkJZHJpdmUtPmRldl9mbGFncyB8PSBJREVfREZMQUdfUE9TVF9SRVNFVDsKIAotCWlmIChkcml2ZS0+dXNpbmdfZG1hKSB7CisJaWYgKGRyaXZlLT5kZXZfZmxhZ3MgJiBJREVfREZMQUdfVVNJTkdfRE1BKSB7CiAJCWlmIChkcml2ZS0+Y3JjX2NvdW50KQogCQkJaWRlX2NoZWNrX2RtYV9jcmMoZHJpdmUpOwogCQllbHNlCiAJCQlpZGVfZG1hX29mZihkcml2ZSk7CiAJfQogCi0JaWYgKCFkcml2ZS0+a2VlcF9zZXR0aW5ncykgewotCQlpZiAoIWRyaXZlLT51c2luZ19kbWEpIHsKLQkJCWRyaXZlLT51bm1hc2sgPSAwOworCWlmICgoZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19LRUVQX1NFVFRJTkdTKSA9PSAwKSB7CisJCWlmICgoZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19VU0lOR19ETUEpID09IDApIHsKKwkJCWRyaXZlLT5kZXZfZmxhZ3MgJj0gfklERV9ERkxBR19VTk1BU0s7CiAJCQlkcml2ZS0+aW9fMzJiaXQgPSAwOwogCQl9CiAJCXJldHVybjsKQEAgLTEwNzMsMTIgKzEwODAsMTMgQEAKIHN0YXRpYyBpZGVfc3RhcnRzdG9wX3QgZG9fcmVzZXQxIChpZGVfZHJpdmVfdCAqZHJpdmUsIGludCBkb19ub3RfdHJ5X2F0YXBpKQogewogCXVuc2lnbmVkIGludCB1bml0OwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdW5zaWduZWQgbG9uZyBmbGFncywgdGltZW91dDsKIAlpZGVfaHdpZl90ICpod2lmOwogCWlkZV9od2dyb3VwX3QgKmh3Z3JvdXA7CiAJc3RydWN0IGlkZV9pb19wb3J0cyAqaW9fcG9ydHM7CiAJY29uc3Qgc3RydWN0IGlkZV90cF9vcHMgKnRwX29wczsKIAljb25zdCBzdHJ1Y3QgaWRlX3BvcnRfb3BzICpwb3J0X29wczsKKwlERUZJTkVfV0FJVCh3YWl0KTsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZpZGVfbG9jaywgZmxhZ3MpOwogCWh3aWYgPSBIV0lGKGRyaXZlKTsKQEAgLTExMDUsNiArMTExMywzMSBAQAogCQlyZXR1cm4gaWRlX3N0YXJ0ZWQ7CiAJfQogCisJLyogV2UgbXVzdCBub3QgZGlzdHVyYiBkZXZpY2VzIGluIHRoZSBJREVfREZMQUdfUEFSS0VEIHN0YXRlLiAqLworCWRvIHsKKwkJdW5zaWduZWQgbG9uZyBub3c7CisKKwkJcHJlcGFyZV90b193YWl0KCZpZGVfcGFya193cSwgJndhaXQsIFRBU0tfVU5JTlRFUlJVUFRJQkxFKTsKKwkJdGltZW91dCA9IGppZmZpZXM7CisJCWZvciAodW5pdCA9IDA7IHVuaXQgPCBNQVhfRFJJVkVTOyB1bml0KyspIHsKKwkJCWlkZV9kcml2ZV90ICp0ZHJpdmUgPSAmaHdpZi0+ZHJpdmVzW3VuaXRdOworCisJCQlpZiAodGRyaXZlLT5kZXZfZmxhZ3MgJiBJREVfREZMQUdfUFJFU0VOVCAmJgorCQkJICAgIHRkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX1BBUktFRCAmJgorCQkJICAgIHRpbWVfYWZ0ZXIodGRyaXZlLT5zbGVlcCwgdGltZW91dCkpCisJCQkJdGltZW91dCA9IHRkcml2ZS0+c2xlZXA7CisJCX0KKworCQlub3cgPSBqaWZmaWVzOworCQlpZiAodGltZV9iZWZvcmVfZXEodGltZW91dCwgbm93KSkKKwkJCWJyZWFrOworCisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlkZV9sb2NrLCBmbGFncyk7CisJCXRpbWVvdXQgPSBzY2hlZHVsZV90aW1lb3V0X3VuaW50ZXJydXB0aWJsZSh0aW1lb3V0IC0gbm93KTsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmlkZV9sb2NrLCBmbGFncyk7CisJfSB3aGlsZSAodGltZW91dCk7CisJZmluaXNoX3dhaXQoJmlkZV9wYXJrX3dxLCAmd2FpdCk7CisKIAkvKgogCSAqIEZpcnN0LCByZXNldCBhbnkgZGV2aWNlIHN0YXRlIGRhdGEgd2Ugd2VyZSBtYWludGFpbmluZwogCSAqIGZvciBhbnkgb2YgdGhlIGRyaXZlcyBvbiB0aGlzIGludGVyZmFjZS4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2lkZS1saWIuYyBiL2RyaXZlcnMvaWRlL2lkZS1saWIuYwppbmRleCBlZDQyNmRkLi45ZmM0Y2ZiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9pZGUtbGliLmMKKysrIGIvZHJpdmVycy9pZGUvaWRlLWxpYi5jCkBAIC0zMTcsNyArMzE3LDcgQEAKIHsKIAlpZGVfdGFza190IHRhc2s7CiAJc3RydWN0IGlkZV90YXNrZmlsZSAqdGYgPSAmdGFzay50ZjsKLQlpbnQgbGJhNDggPSAoZHJpdmUtPmFkZHJlc3NpbmcgPT0gMSkgPyAxIDogMDsKKwl1OCBsYmE0OCA9ICEhKGRyaXZlLT5kZXZfZmxhZ3MgJiBJREVfREZMQUdfTEJBNDgpOwogCiAJbWVtc2V0KCZ0YXNrLCAwLCBzaXplb2YodGFzaykpOwogCWlmIChsYmE0OCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2lkZS1wYXJrLmMgYi9kcml2ZXJzL2lkZS9pZGUtcGFyay5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAzYjAwZTUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2lkZS9pZGUtcGFyay5jCkBAIC0wLDAgKzEsMTIxIEBACisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaWRlLmg+CisjaW5jbHVkZSA8bGludXgvamlmZmllcy5oPgorI2luY2x1ZGUgPGxpbnV4L2Jsa2Rldi5oPgorCitERUNMQVJFX1dBSVRfUVVFVUVfSEVBRChpZGVfcGFya193cSk7CisKK3N0YXRpYyB2b2lkIGlzc3VlX3BhcmtfY21kKGlkZV9kcml2ZV90ICpkcml2ZSwgdW5zaWduZWQgbG9uZyB0aW1lb3V0KQoreworCXN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxID0gZHJpdmUtPnF1ZXVlOworCXN0cnVjdCByZXF1ZXN0ICpycTsKKwlpbnQgcmM7CisKKwl0aW1lb3V0ICs9IGppZmZpZXM7CisJc3Bpbl9sb2NrX2lycSgmaWRlX2xvY2spOworCWlmIChkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX1BBUktFRCkgeworCQlpZGVfaHdncm91cF90ICpod2dyb3VwID0gZHJpdmUtPmh3aWYtPmh3Z3JvdXA7CisJCWludCByZXNldF90aW1lcjsKKworCQlyZXNldF90aW1lciA9IHRpbWVfYmVmb3JlKHRpbWVvdXQsIGRyaXZlLT5zbGVlcCk7CisJCWRyaXZlLT5zbGVlcCA9IHRpbWVvdXQ7CisJCXdha2VfdXBfYWxsKCZpZGVfcGFya193cSk7CisJCWlmIChyZXNldF90aW1lciAmJiBod2dyb3VwLT5zbGVlcGluZyAmJgorCQkgICAgZGVsX3RpbWVyKCZod2dyb3VwLT50aW1lcikpIHsKKwkJCWh3Z3JvdXAtPnNsZWVwaW5nID0gMDsKKwkJCWh3Z3JvdXAtPmJ1c3kgPSAwOworCQkJYmxrX3N0YXJ0X3F1ZXVlaW5nKHEpOworCQl9CisJCXNwaW5fdW5sb2NrX2lycSgmaWRlX2xvY2spOworCQlyZXR1cm47CisJfQorCXNwaW5fdW5sb2NrX2lycSgmaWRlX2xvY2spOworCisJcnEgPSBibGtfZ2V0X3JlcXVlc3QocSwgUkVBRCwgX19HRlBfV0FJVCk7CisJcnEtPmNtZFswXSA9IFJFUV9QQVJLX0hFQURTOworCXJxLT5jbWRfbGVuID0gMTsKKwlycS0+Y21kX3R5cGUgPSBSRVFfVFlQRV9TUEVDSUFMOworCXJxLT5zcGVjaWFsID0gJnRpbWVvdXQ7CisJcmMgPSBibGtfZXhlY3V0ZV9ycShxLCBOVUxMLCBycSwgMSk7CisJYmxrX3B1dF9yZXF1ZXN0KHJxKTsKKwlpZiAocmMpCisJCWdvdG8gb3V0OworCisJLyoKKwkgKiBNYWtlIHN1cmUgdGhhdCAqc29tZSogY29tbWFuZCBpcyBzZW50IHRvIHRoZSBkcml2ZSBhZnRlciB0aGUKKwkgKiB0aW1lb3V0IGhhcyBleHBpcmVkLCBzbyBwb3dlciBtYW5hZ2VtZW50IHdpbGwgYmUgcmVlbmFibGVkLgorCSAqLworCXJxID0gYmxrX2dldF9yZXF1ZXN0KHEsIFJFQUQsIEdGUF9OT1dBSVQpOworCWlmICh1bmxpa2VseSghcnEpKQorCQlnb3RvIG91dDsKKworCXJxLT5jbWRbMF0gPSBSRVFfVU5QQVJLX0hFQURTOworCXJxLT5jbWRfbGVuID0gMTsKKwlycS0+Y21kX3R5cGUgPSBSRVFfVFlQRV9TUEVDSUFMOworCWVsdl9hZGRfcmVxdWVzdChxLCBycSwgRUxFVkFUT1JfSU5TRVJUX0ZST05ULCAxKTsKKworb3V0OgorCXJldHVybjsKK30KKworc3NpemVfdCBpZGVfcGFya19zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCSAgICAgIGNoYXIgKmJ1ZikKK3sKKwlpZGVfZHJpdmVfdCAqZHJpdmUgPSB0b19pZGVfZGV2aWNlKGRldik7CisJdW5zaWduZWQgbG9uZyBub3c7CisJdW5zaWduZWQgaW50IG1zZWNzOworCisJaWYgKGRyaXZlLT5kZXZfZmxhZ3MgJiBJREVfREZMQUdfTk9fVU5MT0FEKQorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisKKwlzcGluX2xvY2tfaXJxKCZpZGVfbG9jayk7CisJbm93ID0gamlmZmllczsKKwlpZiAoZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19QQVJLRUQgJiYKKwkgICAgdGltZV9hZnRlcihkcml2ZS0+c2xlZXAsIG5vdykpCisJCW1zZWNzID0gamlmZmllc190b19tc2Vjcyhkcml2ZS0+c2xlZXAgLSBub3cpOworCWVsc2UKKwkJbXNlY3MgPSAwOworCXNwaW5fdW5sb2NrX2lycSgmaWRlX2xvY2spOworCisJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgMjAsICIldVxuIiwgbXNlY3MpOworfQorCitzc2l6ZV90IGlkZV9wYXJrX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCSAgICAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4pCit7CisjZGVmaW5lIE1BWF9QQVJLX1RJTUVPVVQgMzAwMDAKKwlpZGVfZHJpdmVfdCAqZHJpdmUgPSB0b19pZGVfZGV2aWNlKGRldik7CisJbG9uZyBpbnQgaW5wdXQ7CisJaW50IHJjOworCisJcmMgPSBzdHJpY3Rfc3RydG9sKGJ1ZiwgMTAsICZpbnB1dCk7CisJaWYgKHJjIHx8IGlucHV0IDwgLTIpCisJCXJldHVybiAtRUlOVkFMOworCWlmIChpbnB1dCA+IE1BWF9QQVJLX1RJTUVPVVQpIHsKKwkJaW5wdXQgPSBNQVhfUEFSS19USU1FT1VUOworCQlyYyA9IC1FT1ZFUkZMT1c7CisJfQorCisJbXV0ZXhfbG9jaygmaWRlX3NldHRpbmdfbXR4KTsKKwlpZiAoaW5wdXQgPj0gMCkgeworCQlpZiAoZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19OT19VTkxPQUQpCisJCQlyYyA9IC1FT1BOT1RTVVBQOworCQllbHNlIGlmIChpbnB1dCB8fCBkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX1BBUktFRCkKKwkJCWlzc3VlX3BhcmtfY21kKGRyaXZlLCBtc2Vjc190b19qaWZmaWVzKGlucHV0KSk7CisJfSBlbHNlIHsKKwkJaWYgKGRyaXZlLT5tZWRpYSA9PSBpZGVfZGlzaykKKwkJCXN3aXRjaCAoaW5wdXQpIHsKKwkJCWNhc2UgLTE6CisJCQkJZHJpdmUtPmRldl9mbGFncyAmPSB+SURFX0RGTEFHX05PX1VOTE9BRDsKKwkJCQlicmVhazsKKwkJCWNhc2UgLTI6CisJCQkJZHJpdmUtPmRldl9mbGFncyB8PSBJREVfREZMQUdfTk9fVU5MT0FEOworCQkJCWJyZWFrOworCQkJfQorCQllbHNlCisJCQlyYyA9IC1FT1BOT1RTVVBQOworCX0KKwltdXRleF91bmxvY2soJmlkZV9zZXR0aW5nX210eCk7CisKKwlyZXR1cm4gcmMgPyByYyA6IGxlbjsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2lkZS1wcm9iZS5jIGIvZHJpdmVycy9pZGUvaWRlLXByb2JlLmMKaW5kZXggMDY1NzVhMS4uMTY0OWVhNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvaWRlLXByb2JlLmMKKysrIGIvZHJpdmVycy9pZGUvaWRlLXByb2JlLmMKQEAgLTEyMSw3ICsxMjEsOCBAQAogCS8qIHJlYWQgNTEyIGJ5dGVzIG9mIGlkIGluZm8gKi8KIAlod2lmLT50cF9vcHMtPmlucHV0X2RhdGEoZHJpdmUsIE5VTEwsIGlkLCBTRUNUT1JfU0laRSk7CiAKLQlkcml2ZS0+aWRfcmVhZCA9IDE7CisJZHJpdmUtPmRldl9mbGFncyB8PSBJREVfREZMQUdfSURfUkVBRDsKKwogCWxvY2FsX2lycV9lbmFibGUoKTsKICNpZmRlZiBERUJVRwogCXByaW50ayhLRVJOX0lORk8gIiVzOiBkdW1waW5nIGlkZW50aWZ5IGRhdGFcbiIsIGRyaXZlLT5uYW1lKTsKQEAgLTE1Myw4ICsxNTQsOCBAQAogCiAJcHJpbnRrKEtFUk5fSU5GTyAiJXM6ICVzLCAiLCBkcml2ZS0+bmFtZSwgbSk7CiAKLQlkcml2ZS0+cHJlc2VudCA9IDE7Ci0JZHJpdmUtPmRlYWQgPSAwOworCWRyaXZlLT5kZXZfZmxhZ3MgfD0gSURFX0RGTEFHX1BSRVNFTlQ7CisJZHJpdmUtPmRldl9mbGFncyAmPSB+SURFX0RGTEFHX0RFQUQ7CiAKIAkvKgogCSAqIENoZWNrIGZvciBhbiBBVEFQSSBkZXZpY2UKQEAgLTE3MiwxNCArMTczLDE0IEBACiAJCQkJCQlwcmludGsoS0VSTl9DT05UICJjZHJvbSBvciBmbG9wcHk/LCBhc3N1bWluZyAiKTsKIAkJCQkJaWYgKGRyaXZlLT5tZWRpYSAhPSBpZGVfY2Ryb20pIHsKIAkJCQkJCXByaW50ayhLRVJOX0NPTlQgIkZMT1BQWSIpOwotCQkJCQkJZHJpdmUtPnJlbW92YWJsZSA9IDE7CisJCQkJCQlkcml2ZS0+ZGV2X2ZsYWdzIHw9IElERV9ERkxBR19SRU1PVkFCTEU7CiAJCQkJCQlicmVhazsKIAkJCQkJfQogCQkJCX0KIAkJCQkvKiBFYXJseSBjZHJvbSBtb2RlbHMgdXNlZCB6ZXJvICovCiAJCQkJdHlwZSA9IGlkZV9jZHJvbTsKIAkJCWNhc2UgaWRlX2Nkcm9tOgotCQkJCWRyaXZlLT5yZW1vdmFibGUgPSAxOworCQkJCWRyaXZlLT5kZXZfZmxhZ3MgfD0gSURFX0RGTEFHX1JFTU9WQUJMRTsKICNpZmRlZiBDT05GSUdfUFBDCiAJCQkJLyoga2x1ZGdlIGZvciBBcHBsZSBQb3dlckJvb2sgaW50ZXJuYWwgemlwICovCiAJCQkJaWYgKCFzdHJzdHIobSwgIkNELVJPTSIpICYmIHN0cnN0cihtLCAiWklQIikpIHsKQEAgLTE5NSw3ICsxOTYsNyBAQAogCQkJCWJyZWFrOwogCQkJY2FzZSBpZGVfb3B0aWNhbDoKIAkJCQlwcmludGsoS0VSTl9DT05UICJPUFRJQ0FMIik7Ci0JCQkJZHJpdmUtPnJlbW92YWJsZSA9IDE7CisJCQkJZHJpdmUtPmRldl9mbGFncyB8PSBJREVfREZMQUdfUkVNT1ZBQkxFOwogCQkJCWJyZWFrOwogCQkJZGVmYXVsdDoKIAkJCQlwcmludGsoS0VSTl9DT05UICJVTktOT1dOICh0eXBlICVkKSIsIHR5cGUpOwpAQCAtMjA1LDYgKzIwNiwxMSBAQAogCQlkcml2ZS0+bWVkaWEgPSB0eXBlOwogCQkvKiBhbiBBVEFQSSBkZXZpY2UgaWdub3JlcyBEUkRZICovCiAJCWRyaXZlLT5yZWFkeV9zdGF0ID0gMDsKKwkJaWYgKGF0YV9pZF9jZGJfaW50cihpZCkpCisJCQlkcml2ZS0+YXRhcGlfZmxhZ3MgfD0gSURFX0FGTEFHX0RSUV9JTlRFUlJVUFQ7CisJCWRyaXZlLT5kZXZfZmxhZ3MgfD0gSURFX0RGTEFHX0RPT1JMT0NLSU5HOworCQkvKiB3ZSBkb24ndCBkbyBoZWFkIHVubG9hZGluZyBvbiBBVEFQSSBkZXZpY2VzICovCisJCWRyaXZlLT5kZXZfZmxhZ3MgfD0gSURFX0RGTEFHX05PX1VOTE9BRDsKIAkJcmV0dXJuOwogCX0KIApAQCAtMjE2LDE3ICsyMjIsMjAgQEAKIAogCS8qIENGIGRldmljZXMgYXJlICpub3QqIHJlbW92YWJsZSBpbiBMaW51eCBkZWZpbml0aW9uIG9mIHRoZSB0ZXJtICovCiAJaWYgKGlzX2NmYSA9PSAwICYmIChpZFtBVEFfSURfQ09ORklHXSAmICgxIDw8IDcpKSkKLQkJZHJpdmUtPnJlbW92YWJsZSA9IDE7CisJCWRyaXZlLT5kZXZfZmxhZ3MgfD0gSURFX0RGTEFHX1JFTU9WQUJMRTsKIAogCWRyaXZlLT5tZWRpYSA9IGlkZV9kaXNrOwogCisJaWYgKCFhdGFfaWRfaGFzX3VubG9hZChkcml2ZS0+aWQpKQorCQlkcml2ZS0+ZGV2X2ZsYWdzIHw9IElERV9ERkxBR19OT19VTkxPQUQ7CisKIAlwcmludGsoS0VSTl9DT05UICIlcyBESVNLIGRyaXZlXG4iLCBpc19jZmEgPyAiQ0ZBIiA6ICJBVEEiKTsKIAogCXJldHVybjsKIAogZXJyX21pc2M6CiAJa2ZyZWUoaWQpOwotCWRyaXZlLT5wcmVzZW50ID0gMDsKKwlkcml2ZS0+ZGV2X2ZsYWdzICY9IH5JREVfREZMQUdfUFJFU0VOVDsKIAlyZXR1cm47CiB9CiAKQEAgLTQyNiwxNiArNDM1LDE1IEBACiAJaWRlX2h3aWZfdCAqaHdpZiA9IEhXSUYoZHJpdmUpOwogCWNvbnN0IHN0cnVjdCBpZGVfdHBfb3BzICp0cF9vcHMgPSBod2lmLT50cF9vcHM7CiAJaW50IHJjOwotCXU4IHN0YXQ7CisJdTggcHJlc2VudCA9ICEhKGRyaXZlLT5kZXZfZmxhZ3MgJiBJREVfREZMQUdfUFJFU0VOVCksIHN0YXQ7CiAKLQlpZiAoZHJpdmUtPnByZXNlbnQpIHsKLQkJLyogYXZvaWQgd2FpdGluZyBmb3IgaW5hcHByb3ByaWF0ZSBwcm9iZXMgKi8KLQkJaWYgKGRyaXZlLT5tZWRpYSAhPSBpZGVfZGlzayAmJiBjbWQgPT0gQVRBX0NNRF9JRF9BVEEpCi0JCQlyZXR1cm4gNDsKLQl9CisJLyogYXZvaWQgd2FpdGluZyBmb3IgaW5hcHByb3ByaWF0ZSBwcm9iZXMgKi8KKwlpZiAocHJlc2VudCAmJiBkcml2ZS0+bWVkaWEgIT0gaWRlX2Rpc2sgJiYgY21kID09IEFUQV9DTURfSURfQVRBKQorCQlyZXR1cm4gNDsKKwogI2lmZGVmIERFQlVHCiAJcHJpbnRrKEtFUk5fSU5GTyAicHJvYmluZyBmb3IgJXM6IHByZXNlbnQ9JWQsIG1lZGlhPSVkLCBwcm9iZXR5cGU9JXNcbiIsCi0JCWRyaXZlLT5uYW1lLCBkcml2ZS0+cHJlc2VudCwgZHJpdmUtPm1lZGlhLAorCQlkcml2ZS0+bmFtZSwgcHJlc2VudCwgZHJpdmUtPm1lZGlhLAogCQkoY21kID09IEFUQV9DTURfSURfQVRBKSA/ICJBVEEiIDogIkFUQVBJIik7CiAjZW5kaWYKIApAQCAtNDQ2LDggKzQ1NCw4IEBACiAJU0VMRUNUX0RSSVZFKGRyaXZlKTsKIAltc2xlZXAoNTApOwogCi0JaWYgKGlkZV9yZWFkX2RldmljZShkcml2ZSkgIT0gZHJpdmUtPnNlbGVjdC5hbGwgJiYgIWRyaXZlLT5wcmVzZW50KSB7Ci0JCWlmIChkcml2ZS0+c2VsZWN0LmIudW5pdCAhPSAwKSB7CisJaWYgKGlkZV9yZWFkX2RldmljZShkcml2ZSkgIT0gZHJpdmUtPnNlbGVjdCAmJiBwcmVzZW50ID09IDApIHsKKwkJaWYgKGRyaXZlLT5kbiAmIDEpIHsKIAkJCS8qIGV4aXQgd2l0aCBkcml2ZTAgc2VsZWN0ZWQgKi8KIAkJCVNFTEVDVF9EUklWRSgmaHdpZi0+ZHJpdmVzWzBdKTsKIAkJCS8qIGFsbG93IEFUQV9CVVNZIHRvIGFzc2VydCAmIGNsZWFyICovCkBAIC00NjAsNyArNDY4LDcgQEAKIAlzdGF0ID0gdHBfb3BzLT5yZWFkX3N0YXR1cyhod2lmKTsKIAogCWlmIChPS19TVEFUKHN0YXQsIEFUQV9EUkRZLCBBVEFfQlVTWSkgfHwKLQkgICAgZHJpdmUtPnByZXNlbnQgfHwgY21kID09IEFUQV9DTURfSURfQVRBUEkpIHsKKwkgICAgcHJlc2VudCB8fCBjbWQgPT0gQVRBX0NNRF9JRF9BVEFQSSkgewogCQkvKiBzZW5kIGNtZCBhbmQgd2FpdCAqLwogCQlpZiAoKHJjID0gdHJ5X3RvX2lkZW50aWZ5KGRyaXZlLCBjbWQpKSkgewogCQkJLyogZmFpbGVkOiB0cnkgYWdhaW4gKi8KQEAgLTQ5Myw3ICs1MDEsNyBAQAogCQkvKiBub3QgcHJlc2VudCBvciBtYXliZSBBVEFQSSAqLwogCQlyYyA9IDM7CiAJfQotCWlmIChkcml2ZS0+c2VsZWN0LmIudW5pdCAhPSAwKSB7CisJaWYgKGRyaXZlLT5kbiAmIDEpIHsKIAkJLyogZXhpdCB3aXRoIGRyaXZlMCBzZWxlY3RlZCAqLwogCQlTRUxFQ1RfRFJJVkUoJmh3aWYtPmRyaXZlc1swXSk7CiAJCW1zbGVlcCg1MCk7CkBAIC01NDIsOCArNTUwLDggQEAKICAqCWFuZCBwcmVzZW50cyB0aGluZ3MgdG8gdGhlIHVzZXIgYXMgbmVlZGVkLgogICoKICAqCVJldHVybnM6CTAgIG5vIGRldmljZSB3YXMgZm91bmQKLSAqCQkJMSAgZGV2aWNlIHdhcyBmb3VuZCAobm90ZTogZHJpdmUtPnByZXNlbnQgbWlnaHQKLSAqCQkJICAgc3RpbGwgYmUgMCkKKyAqCQkJMSAgZGV2aWNlIHdhcyBmb3VuZAorICoJCQkgICAobm90ZTogSURFX0RGTEFHX1BSRVNFTlQgbWlnaHQgc3RpbGwgYmUgbm90IHNldCkKICAqLwogIAogc3RhdGljIGlubGluZSB1OCBwcm9iZV9mb3JfZHJpdmUgKGlkZV9kcml2ZV90ICpkcml2ZSkKQEAgLTU1OSwxMCArNTY3LDEwIEBACiAJICoJQWxzbyBub3RlIHRoYXQgMCBldmVyeXdoZXJlIG1lYW5zICJjYW4ndCBkbyBYIgogCSAqLwogIAorCWRyaXZlLT5kZXZfZmxhZ3MgJj0gfklERV9ERkxBR19JRF9SRUFEOworCiAJZHJpdmUtPmlkID0ga3phbGxvYyhTRUNUT1JfU0laRSwgR0ZQX0tFUk5FTCk7Ci0JZHJpdmUtPmlkX3JlYWQgPSAwOwotCWlmKGRyaXZlLT5pZCA9PSBOVUxMKQotCXsKKwlpZiAoZHJpdmUtPmlkID09IE5VTEwpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJpZGU6IG91dCBvZiBtZW1vcnkgZm9yIGlkIGRhdGEuXG4iKTsKIAkJcmV0dXJuIDA7CiAJfQpAQCAtNTcxLDE0ICs1NzksMTQgQEAKIAlzdHJjcHkobSwgIlVOS05PV04iKTsKIAogCS8qIHNraXAgcHJvYmluZz8gKi8KLQlpZiAoIWRyaXZlLT5ub3Byb2JlKSB7CisJaWYgKChkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX05PUFJPQkUpID09IDApIHsKIHJldHJ5OgogCQkvKiBpZiAhKHN1Y2Nlc3N8fHRpbWVkLW91dCkgKi8KIAkJaWYgKGRvX3Byb2JlKGRyaXZlLCBBVEFfQ01EX0lEX0FUQSkgPj0gMikKIAkJCS8qIGxvb2sgZm9yIEFUQVBJIGRldmljZSAqLwogCQkJKHZvaWQpZG9fcHJvYmUoZHJpdmUsIEFUQV9DTURfSURfQVRBUEkpOwogCi0JCWlmICghZHJpdmUtPnByZXNlbnQpCisJCWlmICgoZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19QUkVTRU5UKSA9PSAwKQogCQkJLyogZHJpdmUgbm90IGZvdW5kICovCiAJCQlyZXR1cm4gMDsKIApAQCAtNTg4LDcgKzU5Niw3IEBACiAJCX0KIAogCQkvKiBpZGVudGlmaWNhdGlvbiBmYWlsZWQ/ICovCi0JCWlmICghZHJpdmUtPmlkX3JlYWQpIHsKKwkJaWYgKChkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX0lEX1JFQUQpID09IDApIHsKIAkJCWlmIChkcml2ZS0+bWVkaWEgPT0gaWRlX2Rpc2spIHsKIAkJCQlwcmludGsoS0VSTl9JTkZPICIlczogbm9uLUlERSBkcml2ZSwgQ0hTPSVkLyVkLyVkXG4iLAogCQkJCQlkcml2ZS0+bmFtZSwgZHJpdmUtPmN5bCwKQEAgLTU5OCwxNSArNjA2LDE3IEBACiAJCQl9IGVsc2UgewogCQkJCS8qIG51a2UgaXQgKi8KIAkJCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogVW5rbm93biBkZXZpY2Ugb24gYnVzIHJlZnVzZWQgaWRlbnRpZmljYXRpb24uIElnbm9yaW5nLlxuIiwgZHJpdmUtPm5hbWUpOwotCQkJCWRyaXZlLT5wcmVzZW50ID0gMDsKKwkJCQlkcml2ZS0+ZGV2X2ZsYWdzICY9IH5JREVfREZMQUdfUFJFU0VOVDsKIAkJCX0KIAkJfQogCQkvKiBkcml2ZSB3YXMgZm91bmQgKi8KIAl9Ci0JaWYoIWRyaXZlLT5wcmVzZW50KQorCisJaWYgKChkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX1BSRVNFTlQpID09IDApCiAJCXJldHVybiAwOworCiAJLyogVGhlIGRyaXZlIHdhc24ndCBiZWluZyBoZWxwZnVsLiBBZGQgZ2VuZXJpYyBpbmZvIG9ubHkgKi8KLQlpZiAoZHJpdmUtPmlkX3JlYWQgPT0gMCkgeworCWlmICgoZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19JRF9SRUFEKSA9PSAwKSB7CiAJCWdlbmVyaWNfaWQoZHJpdmUpOwogCQlyZXR1cm4gMTsKIAl9CkBAIC02MTYsNyArNjI2LDcgQEAKIAkJaWRlX2Rpc2tfaW5pdF9tdWx0X2NvdW50KGRyaXZlKTsKIAl9CiAKLQlyZXR1cm4gZHJpdmUtPnByZXNlbnQ7CisJcmV0dXJuICEhKGRyaXZlLT5kZXZfZmxhZ3MgJiBJREVfREZMQUdfUFJFU0VOVCk7CiB9CiAKIHN0YXRpYyB2b2lkIGh3aWZfcmVsZWFzZV9kZXYoc3RydWN0IGRldmljZSAqZGV2KQpAQCAtNjQ4LDggKzY1OCw4IEBACiAJCWdvdG8gb3V0OwogCX0KIAotCWh3aWYtPnBvcnRkZXYgPSBkZXZpY2VfY3JlYXRlX2RydmRhdGEoaWRlX3BvcnRfY2xhc3MsICZod2lmLT5nZW5kZXYsCi0JCQkJCSAgICAgIE1LREVWKDAsIDApLCBod2lmLCBod2lmLT5uYW1lKTsKKwlod2lmLT5wb3J0ZGV2ID0gZGV2aWNlX2NyZWF0ZShpZGVfcG9ydF9jbGFzcywgJmh3aWYtPmdlbmRldiwKKwkJCQkgICAgICBNS0RFVigwLCAwKSwgaHdpZiwgaHdpZi0+bmFtZSk7CiAJaWYgKElTX0VSUihod2lmLT5wb3J0ZGV2KSkgewogCQlyZXQgPSBQVFJfRVJSKGh3aWYtPnBvcnRkZXYpOwogCQlkZXZpY2VfdW5yZWdpc3RlcigmaHdpZi0+Z2VuZGV2KTsKQEAgLTcwNyw3ICs3MTcsOCBAQAogCQlpZGVfZHJpdmVfdCAqZHJpdmUgPSAmaHdpZi0+ZHJpdmVzW3VuaXRdOwogCiAJCS8qIElnbm9yZSBkaXNrcyB0aGF0IHdlIHdpbGwgbm90IHByb2JlIGZvciBsYXRlci4gKi8KLQkJaWYgKCFkcml2ZS0+bm9wcm9iZSB8fCBkcml2ZS0+cHJlc2VudCkgeworCQlpZiAoKGRyaXZlLT5kZXZfZmxhZ3MgJiBJREVfREZMQUdfTk9QUk9CRSkgPT0gMCB8fAorCQkgICAgKGRyaXZlLT5kZXZfZmxhZ3MgJiBJREVfREZMQUdfUFJFU0VOVCkpIHsKIAkJCVNFTEVDVF9EUklWRShkcml2ZSk7CiAJCQlod2lmLT50cF9vcHMtPnNldF9pcnEoaHdpZiwgMSk7CiAJCQltZGVsYXkoMik7CkBAIC03MzksNyArNzUwLDcgQEAKIHsKIAlpZGVfZHJpdmVfdCAqZGV2MCA9ICZkZXYxLT5od2lmLT5kcml2ZXNbMF07CiAKLQlpZiAoKGRldjEtPmRuICYgMSkgPT0gMCB8fCBkZXYwLT5wcmVzZW50ID09IDApCisJaWYgKChkZXYxLT5kbiAmIDEpID09IDAgfHwgKGRldjAtPmRldl9mbGFncyAmIElERV9ERkxBR19QUkVTRU5UKSA9PSAwKQogCQlyZXR1cm47CiAKIAkvKiBJZiB0aGUgbW9kZWxzIGRvbid0IG1hdGNoIHRoZXkgYXJlIG5vdCB0aGUgc2FtZSBwcm9kdWN0ICovCkBAIC03NTksNyArNzcwLDcgQEAKIAkvKiBBcHBlYXJzIHRvIGJlIGFuIElERSBmbGFzaCBhZGFwdGVyIHdpdGggZGVjb2RlIGJ1Z3MgKi8KIAlwcmludGsoS0VSTl9XQVJOSU5HICJpZGUtcHJvYmU6IGlnbm9yaW5nIHVuZGVjb2RlZCBzbGF2ZVxuIik7CiAKLQlkZXYxLT5wcmVzZW50ID0gMDsKKwlkZXYxLT5kZXZfZmxhZ3MgJj0gfklERV9ERkxBR19QUkVTRU5UOwogfQogCiBFWFBPUlRfU1lNQk9MX0dQTChpZGVfdW5kZWNvZGVkX3NsYXZlKTsKQEAgLTc3Miw3ICs3ODMsOCBAQAogCiAJQlVHX09OKGh3aWYtPnByZXNlbnQpOwogCi0JaWYgKGh3aWYtPmRyaXZlc1swXS5ub3Byb2JlICYmIGh3aWYtPmRyaXZlc1sxXS5ub3Byb2JlKQorCWlmICgoaHdpZi0+ZHJpdmVzWzBdLmRldl9mbGFncyAmIElERV9ERkxBR19OT1BST0JFKSAmJgorCSAgICAoaHdpZi0+ZHJpdmVzWzFdLmRldl9mbGFncyAmIElERV9ERkxBR19OT1BST0JFKSkKIAkJcmV0dXJuIC1FQUNDRVM7CiAKIAkvKgpAQCAtNzk0LDkgKzgwNiw5IEBACiAJICovCiAJZm9yICh1bml0ID0gMDsgdW5pdCA8IE1BWF9EUklWRVM7ICsrdW5pdCkgewogCQlpZGVfZHJpdmVfdCAqZHJpdmUgPSAmaHdpZi0+ZHJpdmVzW3VuaXRdOwotCQlkcml2ZS0+ZG4gPSAoaHdpZi0+Y2hhbm5lbCA/IDIgOiAwKSArIHVuaXQ7CisKIAkJKHZvaWQpIHByb2JlX2Zvcl9kcml2ZShkcml2ZSk7Ci0JCWlmIChkcml2ZS0+cHJlc2VudCkKKwkJaWYgKGRyaXZlLT5kZXZfZmxhZ3MgJiBJREVfREZMQUdfUFJFU0VOVCkKIAkJCXJjID0gMDsKIAl9CiAKQEAgLTgyMCwxNyArODMyLDE5IEBACiAJZm9yICh1bml0ID0gMDsgdW5pdCA8IE1BWF9EUklWRVM7IHVuaXQrKykgewogCQlpZGVfZHJpdmVfdCAqZHJpdmUgPSAmaHdpZi0+ZHJpdmVzW3VuaXRdOwogCi0JCWlmIChkcml2ZS0+cHJlc2VudCAmJiBwb3J0X29wcyAmJiBwb3J0X29wcy0+cXVpcmtwcm9jKQotCQkJcG9ydF9vcHMtPnF1aXJrcHJvYyhkcml2ZSk7CisJCWlmIChkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX1BSRVNFTlQpIHsKKwkJCWlmIChwb3J0X29wcyAmJiBwb3J0X29wcy0+cXVpcmtwcm9jKQorCQkJCXBvcnRfb3BzLT5xdWlya3Byb2MoZHJpdmUpOworCQl9CiAJfQogCiAJZm9yICh1bml0ID0gMDsgdW5pdCA8IE1BWF9EUklWRVM7ICsrdW5pdCkgewogCQlpZGVfZHJpdmVfdCAqZHJpdmUgPSAmaHdpZi0+ZHJpdmVzW3VuaXRdOwogCi0JCWlmIChkcml2ZS0+cHJlc2VudCkgeworCQlpZiAoZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19QUkVTRU5UKSB7CiAJCQlpZGVfc2V0X21heF9waW8oZHJpdmUpOwogCi0JCQlkcml2ZS0+bmljZTEgPSAxOworCQkJZHJpdmUtPmRldl9mbGFncyB8PSBJREVfREZMQUdfTklDRTE7CiAKIAkJCWlmIChod2lmLT5kbWFfb3BzKQogCQkJCWlkZV9zZXRfZG1hKGRyaXZlKTsKQEAgLTg0MCwxNCArODU0LDE0IEBACiAJZm9yICh1bml0ID0gMDsgdW5pdCA8IE1BWF9EUklWRVM7ICsrdW5pdCkgewogCQlpZGVfZHJpdmVfdCAqZHJpdmUgPSAmaHdpZi0+ZHJpdmVzW3VuaXRdOwogCi0JCWlmIChod2lmLT5ob3N0X2ZsYWdzICYgSURFX0hGTEFHX05PX0lPXzMyQklUKQotCQkJZHJpdmUtPm5vX2lvXzMyYml0ID0gMTsKKwkJaWYgKChod2lmLT5ob3N0X2ZsYWdzICYgSURFX0hGTEFHX05PX0lPXzMyQklUKSB8fAorCQkgICAgZHJpdmUtPmlkW0FUQV9JRF9EV09SRF9JT10pCisJCQlkcml2ZS0+ZGV2X2ZsYWdzIHw9IElERV9ERkxBR19OT19JT18zMkJJVDsKIAkJZWxzZQotCQkJZHJpdmUtPm5vX2lvXzMyYml0ID0gZHJpdmUtPmlkW0FUQV9JRF9EV09SRF9JT10gPyAxIDogMDsKKwkJCWRyaXZlLT5kZXZfZmxhZ3MgJj0gfklERV9ERkxBR19OT19JT18zMkJJVDsKIAl9CiB9CiAKLSNpZiBNQVhfSFdJRlMgPiAxCiAvKgogICogc2F2ZV9tYXRjaCgpIGlzIHVzZWQgdG8gc2ltcGxpZnkgbG9naWMgaW4gaW5pdF9pcnEoKSBiZWxvdy4KICAqCkBAIC04NzIsNyArODg2LDYgQEAKIAlpZiAoIW0gfHwgbS0+aXJxICE9IGh3aWYtPmlycSkgLyogZG9uJ3QgdW5kbyBhIHByaW9yIHBlcmZlY3QgbWF0Y2ggKi8KIAkJKm1hdGNoID0gbmV3OwogfQotI2VuZGlmIC8qIE1BWF9IV0lGUyA+IDEgKi8KIAogLyoKICAqIGluaXQgcmVxdWVzdCBxdWV1ZQpAQCAtOTUxLDI2ICs5NjQsMzMgQEAKICAqIC0gYWxsb2NhdGUgdGhlIGJsb2NrIGRldmljZSBxdWV1ZQogICogLSBsaW5rIGRyaXZlIGludG8gdGhlIGh3Z3JvdXAKICAqLwotc3RhdGljIHZvaWQgaWRlX3BvcnRfc2V0dXBfZGV2aWNlcyhpZGVfaHdpZl90ICpod2lmKQorc3RhdGljIGludCBpZGVfcG9ydF9zZXR1cF9kZXZpY2VzKGlkZV9od2lmX3QgKmh3aWYpCiB7Ci0JaW50IGk7CisJaW50IGksIGogPSAwOwogCiAJbXV0ZXhfbG9jaygmaWRlX2NmZ19tdHgpOwogCWZvciAoaSA9IDA7IGkgPCBNQVhfRFJJVkVTOyBpKyspIHsKIAkJaWRlX2RyaXZlX3QgKmRyaXZlID0gJmh3aWYtPmRyaXZlc1tpXTsKIAotCQlpZiAoIWRyaXZlLT5wcmVzZW50KQorCQlpZiAoKGRyaXZlLT5kZXZfZmxhZ3MgJiBJREVfREZMQUdfUFJFU0VOVCkgPT0gMCkKIAkJCWNvbnRpbnVlOwogCiAJCWlmIChpZGVfaW5pdF9xdWV1ZShkcml2ZSkpIHsKIAkJCXByaW50ayhLRVJOX0VSUiAiaWRlOiBmYWlsZWQgdG8gaW5pdCAlc1xuIiwKIAkJCQkJZHJpdmUtPm5hbWUpOworCQkJa2ZyZWUoZHJpdmUtPmlkKTsKKwkJCWRyaXZlLT5pZCA9IE5VTEw7CisJCQlkcml2ZS0+ZGV2X2ZsYWdzICY9IH5JREVfREZMQUdfUFJFU0VOVDsKIAkJCWNvbnRpbnVlOwogCQl9CiAKKwkJaisrOworCiAJCWlkZV9hZGRfZHJpdmVfdG9faHdncm91cChkcml2ZSk7CiAJfQogCW11dGV4X3VubG9jaygmaWRlX2NmZ19tdHgpOworCisJcmV0dXJuIGo7CiB9CiAKIHN0YXRpYyBpZGVfaHdpZl90ICppZGVfcG9ydHNbTUFYX0hXSUZTXTsKQEAgLTEwMjksNyArMTA0OSw3IEBACiAKIAltdXRleF9sb2NrKCZpZGVfY2ZnX210eCk7CiAJaHdpZi0+aHdncm91cCA9IE5VTEw7Ci0jaWYgTUFYX0hXSUZTID4gMQorCiAJLyoKIAkgKiBHcm91cCB1cCB3aXRoIGFueSBvdGhlciBod2lmcyB0aGF0IHNoYXJlIG91ciBpcnEocykuCiAJICovCkBAIC0xMDU0LDcgKzEwNzQsNyBAQAogCQkJfQogCQl9CiAJfQotI2VuZGlmIC8qIE1BWF9IV0lGUyA+IDEgKi8KKwogCS8qCiAJICogSWYgd2UgYXJlIHN0aWxsIHdpdGhvdXQgYSBod2dyb3VwLCB0aGVuIGZvcm0gYSBuZXcgb25lCiAJICovCkBAIC0xMTUzLDEyICsxMTczLDEzIEBACiAJaWRlX2h3aWZfdCAqaHdpZiA9IGRhdGE7CiAJaW50IHVuaXQgPSAqcGFydCA+PiBQQVJUTl9CSVRTOwogCWlkZV9kcml2ZV90ICpkcml2ZSA9ICZod2lmLT5kcml2ZXNbdW5pdF07Ci0JaWYgKCFkcml2ZS0+cHJlc2VudCkKKworCWlmICgoZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19QUkVTRU5UKSA9PSAwKQogCQlyZXR1cm4gTlVMTDsKIAogCWlmIChkcml2ZS0+bWVkaWEgPT0gaWRlX2Rpc2spCiAJCXJlcXVlc3RfbW9kdWxlKCJpZGUtZGlzayIpOwotCWlmIChkcml2ZS0+c2NzaSkKKwlpZiAoZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19TQ1NJKQogCQlyZXF1ZXN0X21vZHVsZSgiaWRlLXNjc2kiKTsKIAlpZiAoZHJpdmUtPm1lZGlhID09IGlkZV9jZHJvbSB8fCBkcml2ZS0+bWVkaWEgPT0gaWRlX29wdGljYWwpCiAJCXJlcXVlc3RfbW9kdWxlKCJpZGUtY2QiKTsKQEAgLTEyMDUsNyArMTIyNiw3IEBACiB2b2lkIGlkZV9pbml0X2Rpc2soc3RydWN0IGdlbmRpc2sgKmRpc2ssIGlkZV9kcml2ZV90ICpkcml2ZSkKIHsKIAlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7Ci0JdW5zaWduZWQgaW50IHVuaXQgPSAoZHJpdmUtPnNlbGVjdC5hbGwgPj4gNCkgJiAxOworCXVuc2lnbmVkIGludCB1bml0ID0gZHJpdmUtPmRuICYgMTsKIAogCWRpc2stPm1ham9yID0gaHdpZi0+bWFqb3I7CiAJZGlzay0+Zmlyc3RfbWlub3IgPSB1bml0IDw8IFBBUlROX0JJVFM7CkBAIC0xMjQ4LDcgKzEyNjksNyBAQAogCWlkZV9yZW1vdmVfZHJpdmVfZnJvbV9od2dyb3VwKGRyaXZlKTsKIAlrZnJlZShkcml2ZS0+aWQpOwogCWRyaXZlLT5pZCA9IE5VTEw7Ci0JZHJpdmUtPnByZXNlbnQgPSAwOworCWRyaXZlLT5kZXZfZmxhZ3MgJj0gfklERV9ERkxBR19QUkVTRU5UOwogCS8qIE1lc3NlZCB1cCBsb2NraW5nIC4uLiAqLwogCXNwaW5fdW5sb2NrX2lycSgmaWRlX2xvY2spOwogCWJsa19jbGVhbnVwX3F1ZXVlKGRyaXZlLT5xdWV1ZSk7CkBAIC0xMzI3LDcgKzEzNDgsNyBAQAogCQlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmZHJpdmUtPmdlbmRldjsKIAkJaW50IHJldDsKIAotCQlpZiAoIWRyaXZlLT5wcmVzZW50KQorCQlpZiAoKGRyaXZlLT5kZXZfZmxhZ3MgJiBJREVfREZMQUdfUFJFU0VOVCkgPT0gMCkKIAkJCWNvbnRpbnVlOwogCiAJCXNucHJpbnRmKGRldi0+YnVzX2lkLCBCVVNfSURfU0laRSwgIiV1LiV1IiwgaHdpZi0+aW5kZXgsIGkpOwpAQCAtMTM1MSwxMiArMTM3MiwxNCBAQAogCWZvciAoaSA9IDA7IGkgPCBNQVhfRFJJVkVTOyBpKyspIHsKIAkJaWRlX2RyaXZlX3QgKmRyaXZlID0gJmh3aWYtPmRyaXZlc1tpXTsKIAorCQlkcml2ZS0+ZG4gPSBpICsgaHdpZi0+Y2hhbm5lbCAqIDI7CisKIAkJaWYgKGh3aWYtPmhvc3RfZmxhZ3MgJiBJREVfSEZMQUdfSU9fMzJCSVQpCiAJCQlkcml2ZS0+aW9fMzJiaXQgPSAxOwogCQlpZiAoaHdpZi0+aG9zdF9mbGFncyAmIElERV9IRkxBR19VTk1BU0tfSVJRUykKLQkJCWRyaXZlLT51bm1hc2sgPSAxOworCQkJZHJpdmUtPmRldl9mbGFncyB8PSBJREVfREZMQUdfVU5NQVNLOwogCQlpZiAoaHdpZi0+aG9zdF9mbGFncyAmIElERV9IRkxBR19OT19VTk1BU0tfSVJRUykKLQkJCWRyaXZlLT5ub191bm1hc2sgPSAxOworCQkJZHJpdmUtPmRldl9mbGFncyB8PSBJREVfREZMQUdfTk9fVU5NQVNLOwogCiAJCWlmIChwb3J0X29wcyAmJiBwb3J0X29wcy0+aW5pdF9kZXYpCiAJCQlwb3J0X29wcy0+aW5pdF9kZXYoZHJpdmUpOwpAQCAtMTUxMywxOSArMTUzNiwxNCBAQAogCSAqIHBvcnRzIDB4MWYwLzB4MTcwICh0aGUgaWRlMC9pZGUxIGRlZmF1bHRzKS4KIAkgKi8KIAltdXRleF9sb2NrKCZpZGVfY2ZnX210eCk7Ci0JaWYgKE1BWF9IV0lGUyA9PSAxKSB7Ci0JCWlmIChpZGVfaW5kZXhlcyA9PSAwICYmIGkgPT0gMCkKLQkJCWlkeCA9IDE7CisJaWYgKGJvb3RhYmxlKSB7CisJCWlmICgoaWRlX2luZGV4ZXMgfCBpKSAhPSAoMSA8PCBNQVhfSFdJRlMpIC0gMSkKKwkJCWlkeCA9IGZmeihpZGVfaW5kZXhlcyB8IGkpOwogCX0gZWxzZSB7Ci0JCWlmIChib290YWJsZSkgewotCQkJaWYgKChpZGVfaW5kZXhlcyB8IGkpICE9ICgxIDw8IE1BWF9IV0lGUykgLSAxKQotCQkJCWlkeCA9IGZmeihpZGVfaW5kZXhlcyB8IGkpOwotCQl9IGVsc2UgewotCQkJaWYgKChpZGVfaW5kZXhlcyB8IDMpICE9ICgxIDw8IE1BWF9IV0lGUykgLSAxKQotCQkJCWlkeCA9IGZmeihpZGVfaW5kZXhlcyB8IDMpOwotCQkJZWxzZSBpZiAoKGlkZV9pbmRleGVzICYgMykgIT0gMykKLQkJCQlpZHggPSBmZnooaWRlX2luZGV4ZXMpOwotCQl9CisJCWlmICgoaWRlX2luZGV4ZXMgfCAzKSAhPSAoMSA8PCBNQVhfSFdJRlMpIC0gMSkKKwkJCWlkeCA9IGZmeihpZGVfaW5kZXhlcyB8IDMpOworCQllbHNlIGlmICgoaWRlX2luZGV4ZXMgJiAzKSAhPSAzKQorCQkJaWR4ID0gZmZ6KGlkZV9pbmRleGVzKTsKIAl9CiAJaWYgKGlkeCA+PSAwKQogCQlpZGVfaW5kZXhlcyB8PSAoMSA8PCBpZHgpOwpAQCAtMTU0MSw4ICsxNTU5LDcgQEAKIAltdXRleF91bmxvY2soJmlkZV9jZmdfbXR4KTsKIH0KIAotc3RydWN0IGlkZV9ob3N0ICppZGVfaG9zdF9hbGxvY19hbGwoY29uc3Qgc3RydWN0IGlkZV9wb3J0X2luZm8gKmQsCi0JCQkJICAgIGh3X3JlZ3NfdCAqKmh3cykKK3N0cnVjdCBpZGVfaG9zdCAqaWRlX2hvc3RfYWxsb2MoY29uc3Qgc3RydWN0IGlkZV9wb3J0X2luZm8gKmQsIGh3X3JlZ3NfdCAqKmh3cykKIHsKIAlzdHJ1Y3QgaWRlX2hvc3QgKmhvc3Q7CiAJaW50IGk7CkBAIC0xNTUxLDcgKzE1NjgsNyBAQAogCWlmIChob3N0ID09IE5VTEwpCiAJCXJldHVybiBOVUxMOwogCi0JZm9yIChpID0gMDsgaSA8IE1BWF9IV0lGUzsgaSsrKSB7CisJZm9yIChpID0gMDsgaSA8IE1BWF9IT1NUX1BPUlRTOyBpKyspIHsKIAkJaWRlX2h3aWZfdCAqaHdpZjsKIAkJaW50IGlkeDsKIApAQCAtMTU5MywxOCArMTYxMCw2IEBACiAKIAlyZXR1cm4gaG9zdDsKIH0KLUVYUE9SVF9TWU1CT0xfR1BMKGlkZV9ob3N0X2FsbG9jX2FsbCk7Ci0KLXN0cnVjdCBpZGVfaG9zdCAqaWRlX2hvc3RfYWxsb2MoY29uc3Qgc3RydWN0IGlkZV9wb3J0X2luZm8gKmQsIGh3X3JlZ3NfdCAqKmh3cykKLXsKLQlod19yZWdzX3QgKmh3c19hbGxbTUFYX0hXSUZTXTsKLQlpbnQgaTsKLQotCWZvciAoaSA9IDA7IGkgPCBNQVhfSFdJRlM7IGkrKykKLQkJaHdzX2FsbFtpXSA9IChpIDwgNCkgPyBod3NbaV0gOiBOVUxMOwotCi0JcmV0dXJuIGlkZV9ob3N0X2FsbG9jX2FsbChkLCBod3NfYWxsKTsKLX0KIEVYUE9SVF9TWU1CT0xfR1BMKGlkZV9ob3N0X2FsbG9jKTsKIAogaW50IGlkZV9ob3N0X3JlZ2lzdGVyKHN0cnVjdCBpZGVfaG9zdCAqaG9zdCwgY29uc3Qgc3RydWN0IGlkZV9wb3J0X2luZm8gKmQsCkBAIC0xNjEzLDcgKzE2MTgsNyBAQAogCWlkZV9od2lmX3QgKmh3aWYsICptYXRlID0gTlVMTDsKIAlpbnQgaSwgaiA9IDA7CiAKLQlmb3IgKGkgPSAwOyBpIDwgTUFYX0hXSUZTOyBpKyspIHsKKwlmb3IgKGkgPSAwOyBpIDwgTUFYX0hPU1RfUE9SVFM7IGkrKykgewogCQlod2lmID0gaG9zdC0+cG9ydHNbaV07CiAKIAkJaWYgKGh3aWYgPT0gTlVMTCkgewpAQCAtMTYyNiwyMiArMTYzMSwyMiBAQAogCiAJCWlmIChkID09IE5VTEwpIHsKIAkJCW1hdGUgPSBOVUxMOwotCQkJY29udGludWU7CisJCX0gZWxzZSB7CisJCQlpZiAoKGkgJiAxKSAmJiBtYXRlKSB7CisJCQkJaHdpZi0+bWF0ZSA9IG1hdGU7CisJCQkJbWF0ZS0+bWF0ZSA9IGh3aWY7CisJCQl9CisKKwkJCW1hdGUgPSAoaSAmIDEpID8gTlVMTCA6IGh3aWY7CisKKwkJCWlkZV9pbml0X3BvcnQoaHdpZiwgaSAmIDEsIGQpOworCQkJaWRlX3BvcnRfY2FibGVfZGV0ZWN0KGh3aWYpOwogCQl9CiAKLQkJaWYgKChpICYgMSkgJiYgbWF0ZSkgewotCQkJaHdpZi0+bWF0ZSA9IG1hdGU7Ci0JCQltYXRlLT5tYXRlID0gaHdpZjsKLQkJfQotCi0JCW1hdGUgPSAoaSAmIDEpID8gTlVMTCA6IGh3aWY7Ci0KLQkJaWRlX2luaXRfcG9ydChod2lmLCBpICYgMSwgZCk7Ci0JCWlkZV9wb3J0X2NhYmxlX2RldGVjdChod2lmKTsKIAkJaWRlX3BvcnRfaW5pdF9kZXZpY2VzKGh3aWYpOwogCX0KIAotCWZvciAoaSA9IDA7IGkgPCBNQVhfSFdJRlM7IGkrKykgeworCWZvciAoaSA9IDA7IGkgPCBNQVhfSE9TVF9QT1JUUzsgaSsrKSB7CiAJCWh3aWYgPSBob3N0LT5wb3J0c1tpXTsKIAogCQlpZiAoaHdpZiA9PSBOVUxMKQpAQCAtMTY1OCw3ICsxNjYzLDcgQEAKIAkJCWlkZV9wb3J0X3R1bmVfZGV2aWNlcyhod2lmKTsKIAl9CiAKLQlmb3IgKGkgPSAwOyBpIDwgTUFYX0hXSUZTOyBpKyspIHsKKwlmb3IgKGkgPSAwOyBpIDwgTUFYX0hPU1RfUE9SVFM7IGkrKykgewogCQlod2lmID0gaG9zdC0+cG9ydHNbaV07CiAKIAkJaWYgKGh3aWYgPT0gTlVMTCkKQEAgLTE2NzEsMTAgKzE2NzYsMTMgQEAKIAkJCWNvbnRpbnVlOwogCQl9CiAKLQkJaisrOwotCiAJCWlmIChod2lmLT5wcmVzZW50KQotCQkJaWRlX3BvcnRfc2V0dXBfZGV2aWNlcyhod2lmKTsKKwkJCWlmIChpZGVfcG9ydF9zZXR1cF9kZXZpY2VzKGh3aWYpID09IDApIHsKKwkJCQlod2lmLT5wcmVzZW50ID0gMDsKKwkJCQljb250aW51ZTsKKwkJCX0KKworCQlqKys7CiAKIAkJaWRlX2FjcGlfaW5pdChod2lmKTsKIApAQCAtMTY4Miw3ICsxNjkwLDcgQEAKIAkJCWlkZV9hY3BpX3BvcnRfaW5pdF9kZXZpY2VzKGh3aWYpOwogCX0KIAotCWZvciAoaSA9IDA7IGkgPCBNQVhfSFdJRlM7IGkrKykgeworCWZvciAoaSA9IDA7IGkgPCBNQVhfSE9TVF9QT1JUUzsgaSsrKSB7CiAJCWh3aWYgPSBob3N0LT5wb3J0c1tpXTsKIAogCQlpZiAoaHdpZiA9PSBOVUxMKQpAQCAtMTY5NSw3ICsxNzAzLDcgQEAKIAkJCWh3aWZfcmVnaXN0ZXJfZGV2aWNlcyhod2lmKTsKIAl9CiAKLQlmb3IgKGkgPSAwOyBpIDwgTUFYX0hXSUZTOyBpKyspIHsKKwlmb3IgKGkgPSAwOyBpIDwgTUFYX0hPU1RfUE9SVFM7IGkrKykgewogCQlod2lmID0gaG9zdC0+cG9ydHNbaV07CiAKIAkJaWYgKGh3aWYgPT0gTlVMTCkKQEAgLTE3NDAsNyArMTc0OCw3IEBACiAJaWRlX2h3aWZfdCAqaHdpZjsKIAlpbnQgaTsKIAotCWZvciAoaSA9IDA7IGkgPCBNQVhfSFdJRlM7IGkrKykgeworCWZvciAoaSA9IDA7IGkgPCBNQVhfSE9TVF9QT1JUUzsgaSsrKSB7CiAJCWh3aWYgPSBob3N0LT5wb3J0c1tpXTsKIAogCQlpZiAoaHdpZiA9PSBOVUxMKQpAQCAtMTc1OCw3ICsxNzY2LDcgQEAKIHsKIAlpbnQgaTsKIAotCWZvciAoaSA9IDA7IGkgPCBNQVhfSFdJRlM7IGkrKykgeworCWZvciAoaSA9IDA7IGkgPCBNQVhfSE9TVF9QT1JUUzsgaSsrKSB7CiAJCWlmIChob3N0LT5wb3J0c1tpXSkKIAkJCWlkZV91bnJlZ2lzdGVyKGhvc3QtPnBvcnRzW2ldKTsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9pZGUtcHJvYy5jIGIvZHJpdmVycy9pZGUvaWRlLXByb2MuYwppbmRleCBlNzAzMGE0Li5jMzFkMGRkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9pZGUtcHJvYy5jCisrKyBiL2RyaXZlcnMvaWRlL2lkZS1wcm9jLmMKQEAgLTIyNyw3ICsyMjcsNyBAQAogCiBpZGVfZGV2c2V0X3J3KGN1cnJlbnRfc3BlZWQsIHhmZXJfcmF0ZSk7CiBpZGVfZGV2c2V0X3J3X2ZpZWxkKGluaXRfc3BlZWQsIGluaXRfc3BlZWQpOwotaWRlX2RldnNldF9yd19maWVsZChuaWNlMSwgbmljZTEpOworaWRlX2RldnNldF9yd19mbGFnKG5pY2UxLCBJREVfREZMQUdfTklDRTEpOwogaWRlX2RldnNldF9yd19maWVsZChudW1iZXIsIGRuKTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBpZGVfcHJvY19kZXZzZXQgaWRlX2dlbmVyaWNfc2V0dGluZ3NbXSA9IHsKQEAgLTU2NywxMCArNTY3LDEwIEBACiB2b2lkIGlkZV9wcm9jX3JlZ2lzdGVyX2RyaXZlcihpZGVfZHJpdmVfdCAqZHJpdmUsIGlkZV9kcml2ZXJfdCAqZHJpdmVyKQogewogCW11dGV4X2xvY2soJmlkZV9zZXR0aW5nX210eCk7Ci0JZHJpdmUtPnNldHRpbmdzID0gZHJpdmVyLT5zZXR0aW5nczsKKwlkcml2ZS0+c2V0dGluZ3MgPSBkcml2ZXItPnByb2NfZGV2c2V0cyhkcml2ZSk7CiAJbXV0ZXhfdW5sb2NrKCZpZGVfc2V0dGluZ19tdHgpOwogCi0JaWRlX2FkZF9wcm9jX2VudHJpZXMoZHJpdmUtPnByb2MsIGRyaXZlci0+cHJvYywgZHJpdmUpOworCWlkZV9hZGRfcHJvY19lbnRyaWVzKGRyaXZlLT5wcm9jLCBkcml2ZXItPnByb2NfZW50cmllcyhkcml2ZSksIGRyaXZlKTsKIH0KIAogRVhQT1JUX1NZTUJPTChpZGVfcHJvY19yZWdpc3Rlcl9kcml2ZXIpOwpAQCAtNTkxLDcgKzU5MSw3IEBACiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCWlkZV9yZW1vdmVfcHJvY19lbnRyaWVzKGRyaXZlLT5wcm9jLCBkcml2ZXItPnByb2MpOworCWlkZV9yZW1vdmVfcHJvY19lbnRyaWVzKGRyaXZlLT5wcm9jLCBkcml2ZXItPnByb2NfZW50cmllcyhkcml2ZSkpOwogCiAJbXV0ZXhfbG9jaygmaWRlX3NldHRpbmdfbXR4KTsKIAlzcGluX2xvY2tfaXJxc2F2ZSgmaWRlX2xvY2ssIGZsYWdzKTsKQEAgLTYyMiw5ICs2MjIsNyBAQAogCWZvciAoZCA9IDA7IGQgPCBNQVhfRFJJVkVTOyBkKyspIHsKIAkJaWRlX2RyaXZlX3QgKmRyaXZlID0gJmh3aWYtPmRyaXZlc1tkXTsKIAotCQlpZiAoIWRyaXZlLT5wcmVzZW50KQotCQkJY29udGludWU7Ci0JCWlmIChkcml2ZS0+cHJvYykKKwkJaWYgKChkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX1BSRVNFTlQpID09IDAgfHwgZHJpdmUtPnByb2MpCiAJCQljb250aW51ZTsKIAogCQlkcml2ZS0+cHJvYyA9IHByb2NfbWtkaXIoZHJpdmUtPm5hbWUsIHBhcmVudCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9pZGUtdGFwZS5jIGIvZHJpdmVycy9pZGUvaWRlLXRhcGUuYwppbmRleCBmOGM4NGRmLi5iMmIyZTVlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9pZGUtdGFwZS5jCisrKyBiL2RyaXZlcnMvaWRlL2lkZS10YXBlLmMKQEAgLTE3MiwyMyArMTcyLDE2IEBACiAJc3RydWN0IGtyZWYJa3JlZjsKIAogCS8qCi0JICoJcGMgcG9pbnRzIHRvIHRoZSBjdXJyZW50IHByb2Nlc3NlZCBwYWNrZXQgY29tbWFuZC4KLQkgKgogCSAqCWZhaWxlZF9wYyBwb2ludHMgdG8gdGhlIGxhc3QgZmFpbGVkIHBhY2tldCBjb21tYW5kLCBvciBjb250YWlucwogCSAqCU5VTEwgaWYgd2UgZG8gbm90IG5lZWQgdG8gcmV0cnkgYW55IHBhY2tldCBjb21tYW5kLiBUaGlzIGlzCiAJICoJcmVxdWlyZWQgc2luY2UgYW4gYWRkaXRpb25hbCBwYWNrZXQgY29tbWFuZCBpcyBuZWVkZWQgYmVmb3JlIHRoZQogCSAqCXJldHJ5LCB0byBnZXQgZGV0YWlsZWQgaW5mb3JtYXRpb24gb24gd2hhdCB3ZW50IHdyb25nLgogCSAqLwotCS8qIEN1cnJlbnQgcGFja2V0IGNvbW1hbmQgKi8KLQlzdHJ1Y3QgaWRlX2F0YXBpX3BjICpwYzsKIAkvKiBMYXN0IGZhaWxlZCBwYWNrZXQgY29tbWFuZCAqLwogCXN0cnVjdCBpZGVfYXRhcGlfcGMgKmZhaWxlZF9wYzsKIAkvKiB1c2VkIGJ5IFJFUV9JREVUQVBFX3tSRUFELFdSSVRFfSByZXF1ZXN0cyAqLwogCXN0cnVjdCBpZGVfYXRhcGlfcGMgcXVldWVkX3BjOwogCi0Jc3RydWN0IGlkZV9hdGFwaV9wYyByZXF1ZXN0X3NlbnNlX3BjOwotCXN0cnVjdCByZXF1ZXN0IHJlcXVlc3Rfc2Vuc2VfcnE7Ci0KIAkvKgogCSAqIERTQyBwb2xsaW5nIHZhcmlhYmxlcy4KIAkgKgpAQCAtMjc0LDExICsyNjcsNiBAQAogCiBzdGF0aWMgc3RydWN0IGNsYXNzICppZGV0YXBlX3N5c2ZzX2NsYXNzOwogCi0jZGVmaW5lIHRvX2lkZV90YXBlKG9iaikgY29udGFpbmVyX29mKG9iaiwgc3RydWN0IGlkZV90YXBlX29iaiwga3JlZikKLQotI2RlZmluZSBpZGVfdGFwZV9nKGRpc2spIFwKLQljb250YWluZXJfb2YoKGRpc2spLT5wcml2YXRlX2RhdGEsIHN0cnVjdCBpZGVfdGFwZV9vYmosIGRyaXZlcikKLQogc3RhdGljIHZvaWQgaWRlX3RhcGVfcmVsZWFzZShzdHJ1Y3Qga3JlZiAqKTsKIAogc3RhdGljIHN0cnVjdCBpZGVfdGFwZV9vYmogKmlkZV90YXBlX2dldChzdHJ1Y3QgZ2VuZGlzayAqZGlzaykKQEAgLTI4Niw3ICsyNzQsNyBAQAogCXN0cnVjdCBpZGVfdGFwZV9vYmogKnRhcGUgPSBOVUxMOwogCiAJbXV0ZXhfbG9jaygmaWRldGFwZV9yZWZfbXV0ZXgpOwotCXRhcGUgPSBpZGVfdGFwZV9nKGRpc2spOworCXRhcGUgPSBpZGVfZHJ2X2coZGlzaywgaWRlX3RhcGVfb2JqKTsKIAlpZiAodGFwZSkgewogCQlpZiAoaWRlX2RldmljZV9nZXQodGFwZS0+ZHJpdmUpKQogCQkJdGFwZSA9IE5VTEw7CkBAIC0zMTMsOCArMzAxLDYgQEAKICAqLwogc3RhdGljIHN0cnVjdCBpZGVfdGFwZV9vYmogKmlkZXRhcGVfZGV2c1tNQVhfSFdJRlMgKiBNQVhfRFJJVkVTXTsKIAotI2RlZmluZSBpZGVfdGFwZV9mKGZpbGUpICgoZmlsZSktPnByaXZhdGVfZGF0YSkKLQogc3RhdGljIHN0cnVjdCBpZGVfdGFwZV9vYmogKmlkZV90YXBlX2NocmRldl9nZXQodW5zaWduZWQgaW50IGkpCiB7CiAJc3RydWN0IGlkZV90YXBlX29iaiAqdGFwZSA9IE5VTEw7CkBAIC01MjIsMTQgKzUwOCwxOSBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBpZGVfdGFwZV9jYWxsYmFjayhpZGVfZHJpdmVfdCAqZHJpdmUpCitzdGF0aWMgdm9pZCBpZGVfdGFwZV9oYW5kbGVfZHNjKGlkZV9kcml2ZV90ICopOworCitzdGF0aWMgdm9pZCBpZGVfdGFwZV9jYWxsYmFjayhpZGVfZHJpdmVfdCAqZHJpdmUsIGludCBkc2MpCiB7CiAJaWRldGFwZV90YXBlX3QgKnRhcGUgPSBkcml2ZS0+ZHJpdmVyX2RhdGE7Ci0Jc3RydWN0IGlkZV9hdGFwaV9wYyAqcGMgPSB0YXBlLT5wYzsKKwlzdHJ1Y3QgaWRlX2F0YXBpX3BjICpwYyA9IGRyaXZlLT5wYzsKIAlpbnQgdXB0b2RhdGUgPSBwYy0+ZXJyb3IgPyAwIDogMTsKIAogCWRlYnVnX2xvZyhEQkdfUFJPQ1MsICJFbnRlciAlc1xuIiwgX19mdW5jX18pOwogCisJaWYgKGRzYykKKwkJaWRlX3RhcGVfaGFuZGxlX2RzYyhkcml2ZSk7CisKIAlpZiAodGFwZS0+ZmFpbGVkX3BjID09IHBjKQogCQl0YXBlLT5mYWlsZWRfcGMgPSBOVUxMOwogCkBAIC01NTgsNyArNTQ5LDcgQEAKIAkJaWYgKHBjLT5lcnJvcikKIAkJCXVwdG9kYXRlID0gcGMtPmVycm9yOwogCX0gZWxzZSBpZiAocGMtPmNbMF0gPT0gUkVBRF9QT1NJVElPTiAmJiB1cHRvZGF0ZSkgewotCQl1OCAqcmVhZHBvcyA9IHRhcGUtPnBjLT5idWY7CisJCXU4ICpyZWFkcG9zID0gcGMtPmJ1ZjsKIAogCQlkZWJ1Z19sb2coREJHX1NFTlNFLCAiQk9QIC0gJXNcbiIsCiAJCQkJKHJlYWRwb3NbMF0gJiAweDgwKSA/ICJZZXMiIDogIk5vIik7CkBAIC01ODMsMzEgKzU3NCw2IEBACiAJaWRldGFwZV9lbmRfcmVxdWVzdChkcml2ZSwgdXB0b2RhdGUsIDApOwogfQogCi1zdGF0aWMgdm9pZCBpZGV0YXBlX2NyZWF0ZV9yZXF1ZXN0X3NlbnNlX2NtZChzdHJ1Y3QgaWRlX2F0YXBpX3BjICpwYykKLXsKLQlpZGVfaW5pdF9wYyhwYyk7Ci0JcGMtPmNbMF0gPSBSRVFVRVNUX1NFTlNFOwotCXBjLT5jWzRdID0gMjA7Ci0JcGMtPnJlcV94ZmVyID0gMjA7Ci19Ci0KLS8qCi0gKglpZGV0YXBlX3JldHJ5X3BjIGlzIGNhbGxlZCB3aGVuIGFuIGVycm9yIHdhcyBkZXRlY3RlZCBkdXJpbmcgdGhlCi0gKglsYXN0IHBhY2tldCBjb21tYW5kLiBXZSBxdWV1ZSBhIHJlcXVlc3Qgc2Vuc2UgcGFja2V0IGNvbW1hbmQgaW4KLSAqCXRoZSBoZWFkIG9mIHRoZSByZXF1ZXN0IGxpc3QuCi0gKi8KLXN0YXRpYyB2b2lkIGlkZXRhcGVfcmV0cnlfcGMoaWRlX2RyaXZlX3QgKmRyaXZlKQotewotCXN0cnVjdCBpZGVfdGFwZV9vYmogKnRhcGUgPSBkcml2ZS0+ZHJpdmVyX2RhdGE7Ci0Jc3RydWN0IHJlcXVlc3QgKnJxID0gJnRhcGUtPnJlcXVlc3Rfc2Vuc2VfcnE7Ci0Jc3RydWN0IGlkZV9hdGFwaV9wYyAqcGMgPSAmdGFwZS0+cmVxdWVzdF9zZW5zZV9wYzsKLQotCSh2b2lkKWlkZV9yZWFkX2Vycm9yKGRyaXZlKTsKLQlpZGV0YXBlX2NyZWF0ZV9yZXF1ZXN0X3NlbnNlX2NtZChwYyk7Ci0Jc2V0X2JpdChJREVfQUZMQUdfSUdOT1JFX0RTQywgJmRyaXZlLT5hdGFwaV9mbGFncyk7Ci0JaWRlX3F1ZXVlX3BjX2hlYWQoZHJpdmUsIHRhcGUtPmRpc2ssIHBjLCBycSk7Ci19Ci0KIC8qCiAgKiBQb3N0cG9uZSB0aGUgY3VycmVudCByZXF1ZXN0IHNvIHRoYXQgaWRlLmMgd2lsbCBiZSBhYmxlIHRvIHNlcnZpY2UgcmVxdWVzdHMKICAqIGZyb20gYW5vdGhlciBkZXZpY2Ugb24gdGhlIHNhbWUgaHdncm91cCB3aGlsZSB3ZSBhcmUgcG9sbGluZyBmb3IgRFNDLgpAQCAtNjQ2LDM0ICs2MTIsMTggQEAKIH0KIAogLyoKLSAqIFRoaXMgaXMgdGhlIHVzdWFsIGludGVycnVwdCBoYW5kbGVyIHdoaWNoIHdpbGwgYmUgY2FsbGVkIGR1cmluZyBhIHBhY2tldAotICogY29tbWFuZC4gV2Ugd2lsbCB0cmFuc2ZlciBzb21lIG9mIHRoZSBkYXRhIChhcyByZXF1ZXN0ZWQgYnkgdGhlIGRyaXZlKSBhbmQKLSAqIHdpbGwgcmUtcG9pbnQgaW50ZXJydXB0IGhhbmRsZXIgdG8gdXMuIFdoZW4gZGF0YSB0cmFuc2ZlciBpcyBmaW5pc2hlZCwgd2UKLSAqIHdpbGwgYWN0IGFjY29yZGluZyB0byB0aGUgYWxnb3JpdGhtIGRlc2NyaWJlZCBiZWZvcmUKLSAqIGlkZXRhcGVfaXNzdWVfcGMuCi0gKi8KLXN0YXRpYyBpZGVfc3RhcnRzdG9wX3QgaWRldGFwZV9wY19pbnRyKGlkZV9kcml2ZV90ICpkcml2ZSkKLXsKLQlpZGV0YXBlX3RhcGVfdCAqdGFwZSA9IGRyaXZlLT5kcml2ZXJfZGF0YTsKLQotCXJldHVybiBpZGVfcGNfaW50cihkcml2ZSwgdGFwZS0+cGMsIGlkZXRhcGVfcGNfaW50ciwgV0FJVF9UQVBFX0NNRCwKLQkJCSAgIE5VTEwsIGlkZXRhcGVfdXBkYXRlX2J1ZmZlcnMsIGlkZXRhcGVfcmV0cnlfcGMsCi0JCQkgICBpZGVfdGFwZV9oYW5kbGVfZHNjLCBpZGVfdGFwZV9pb19idWZmZXJzKTsKLX0KLQotLyoKICAqIFBhY2tldCBDb21tYW5kIEludGVyZmFjZQogICoKLSAqIFRoZSBjdXJyZW50IFBhY2tldCBDb21tYW5kIGlzIGF2YWlsYWJsZSBpbiB0YXBlLT5wYywgYW5kIHdpbGwgbm90IGNoYW5nZQorICogVGhlIGN1cnJlbnQgUGFja2V0IENvbW1hbmQgaXMgYXZhaWxhYmxlIGluIGRyaXZlLT5wYywgYW5kIHdpbGwgbm90IGNoYW5nZQogICogdW50aWwgd2UgZmluaXNoIGhhbmRsaW5nIGl0LiBFYWNoIHBhY2tldCBjb21tYW5kIGlzIGFzc29jaWF0ZWQgd2l0aCBhCiAgKiBjYWxsYmFjayBmdW5jdGlvbiB0aGF0IHdpbGwgYmUgY2FsbGVkIHdoZW4gdGhlIGNvbW1hbmQgaXMgZmluaXNoZWQuCiAgKgogICogVGhlIGhhbmRsaW5nIHdpbGwgYmUgZG9uZSBpbiB0aHJlZSBzdGFnZXM6CiAgKgogICogMS4gaWRldGFwZV9pc3N1ZV9wYyB3aWxsIHNlbmQgdGhlIHBhY2tldCBjb21tYW5kIHRvIHRoZSBkcml2ZSwgYW5kIHdpbGwgc2V0Ci0gKiB0aGUgaW50ZXJydXB0IGhhbmRsZXIgdG8gaWRldGFwZV9wY19pbnRyLgorICogdGhlIGludGVycnVwdCBoYW5kbGVyIHRvIGlkZV9wY19pbnRyLgogICoKLSAqIDIuIE9uIGVhY2ggaW50ZXJydXB0LCBpZGV0YXBlX3BjX2ludHIgd2lsbCBiZSBjYWxsZWQuIFRoaXMgc3RlcCB3aWxsIGJlCisgKiAyLiBPbiBlYWNoIGludGVycnVwdCwgaWRlX3BjX2ludHIgd2lsbCBiZSBjYWxsZWQuIFRoaXMgc3RlcCB3aWxsIGJlCiAgKiByZXBlYXRlZCB1bnRpbCB0aGUgZGV2aWNlIHNpZ25hbHMgdXMgdGhhdCBubyBtb3JlIGludGVycnVwdHMgd2lsbCBiZSBpc3N1ZWQuCiAgKgogICogMy4gQVRBUEkgVGFwZSBtZWRpYSBhY2Nlc3MgY29tbWFuZHMgaGF2ZSBpbW1lZGlhdGUgc3RhdHVzIHdpdGggYSBkZWxheWVkCkBAIC02OTcsMjAgKzY0NywxMyBAQAogICogYWdhaW4sIHRoZSBjYWxsYmFjayBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCBhbmQgdGhlbiB3ZSB3aWxsIGhhbmRsZSB0aGUgbmV4dAogICogcmVxdWVzdC4KICAqLwotc3RhdGljIGlkZV9zdGFydHN0b3BfdCBpZGV0YXBlX3RyYW5zZmVyX3BjKGlkZV9kcml2ZV90ICpkcml2ZSkKLXsKLQlpZGV0YXBlX3RhcGVfdCAqdGFwZSA9IGRyaXZlLT5kcml2ZXJfZGF0YTsKLQotCXJldHVybiBpZGVfdHJhbnNmZXJfcGMoZHJpdmUsIHRhcGUtPnBjLCBpZGV0YXBlX3BjX2ludHIsCi0JCQkgICAgICAgV0FJVF9UQVBFX0NNRCwgTlVMTCk7Ci19CiAKIHN0YXRpYyBpZGVfc3RhcnRzdG9wX3QgaWRldGFwZV9pc3N1ZV9wYyhpZGVfZHJpdmVfdCAqZHJpdmUsCiAJCXN0cnVjdCBpZGVfYXRhcGlfcGMgKnBjKQogewogCWlkZXRhcGVfdGFwZV90ICp0YXBlID0gZHJpdmUtPmRyaXZlcl9kYXRhOwogCi0JaWYgKHRhcGUtPnBjLT5jWzBdID09IFJFUVVFU1RfU0VOU0UgJiYKKwlpZiAoZHJpdmUtPnBjLT5jWzBdID09IFJFUVVFU1RfU0VOU0UgJiYKIAkgICAgcGMtPmNbMF0gPT0gUkVRVUVTVF9TRU5TRSkgewogCQlwcmludGsoS0VSTl9FUlIgImlkZS10YXBlOiBwb3NzaWJsZSBpZGUtdGFwZS5jIGJ1ZyAtICIKIAkJCSJUd28gcmVxdWVzdCBzZW5zZSBpbiBzZXJpYWwgd2VyZSBpc3N1ZWRcbiIpOwpAQCAtNzE4LDggKzY2MSw5IEBACiAKIAlpZiAodGFwZS0+ZmFpbGVkX3BjID09IE5VTEwgJiYgcGMtPmNbMF0gIT0gUkVRVUVTVF9TRU5TRSkKIAkJdGFwZS0+ZmFpbGVkX3BjID0gcGM7CisKIAkvKiBTZXQgdGhlIGN1cnJlbnQgcGFja2V0IGNvbW1hbmQgKi8KLQl0YXBlLT5wYyA9IHBjOworCWRyaXZlLT5wYyA9IHBjOwogCiAJaWYgKHBjLT5yZXRyaWVzID4gSURFVEFQRV9NQVhfUENfUkVUUklFUyB8fAogCQkocGMtPmZsYWdzICYgUENfRkxBR19BQk9SVCkpIHsKQEAgLTc0MywxNSArNjg3LDE0IEBACiAJCQlwYy0+ZXJyb3IgPSBJREVUQVBFX0VSUk9SX0dFTkVSQUw7CiAJCX0KIAkJdGFwZS0+ZmFpbGVkX3BjID0gTlVMTDsKLQkJZHJpdmUtPnBjX2NhbGxiYWNrKGRyaXZlKTsKKwkJZHJpdmUtPnBjX2NhbGxiYWNrKGRyaXZlLCAwKTsKIAkJcmV0dXJuIGlkZV9zdG9wcGVkOwogCX0KIAlkZWJ1Z19sb2coREJHX1NFTlNFLCAiUmV0cnkgIyVkLCBjbWQgPSAlMDJYXG4iLCBwYy0+cmV0cmllcywgcGMtPmNbMF0pOwogCiAJcGMtPnJldHJpZXMrKzsKIAotCXJldHVybiBpZGVfaXNzdWVfcGMoZHJpdmUsIHBjLCBpZGV0YXBlX3RyYW5zZmVyX3BjLAotCQkJICAgIFdBSVRfVEFQRV9DTUQsIE5VTEwpOworCXJldHVybiBpZGVfaXNzdWVfcGMoZHJpdmUsIFdBSVRfVEFQRV9DTUQsIE5VTEwpOwogfQogCiAvKiBBIG1vZGUgc2Vuc2UgY29tbWFuZCBpcyB1c2VkIHRvICJzZW5zZSIgdGFwZSBwYXJhbWV0ZXJzLiAqLwpAQCAtNzg1LDcgKzcyOCw3IEBACiB7CiAJaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOwogCWlkZXRhcGVfdGFwZV90ICp0YXBlID0gZHJpdmUtPmRyaXZlcl9kYXRhOwotCXN0cnVjdCBpZGVfYXRhcGlfcGMgKnBjID0gdGFwZS0+cGM7CisJc3RydWN0IGlkZV9hdGFwaV9wYyAqcGMgPSBkcml2ZS0+cGM7CiAJdTggc3RhdDsKIAogCXN0YXQgPSBod2lmLT50cF9vcHMtPnJlYWRfc3RhdHVzKGh3aWYpOwpAQCAtNzk3LDcgKzc0MCw3IEBACiAJCQkJcHJpbnRrKEtFUk5fRVJSICJpZGUtdGFwZTogJXM6IEkvTyBlcnJvciwgIiwKIAkJCQkJCXRhcGUtPm5hbWUpOwogCQkJLyogUmV0cnkgb3BlcmF0aW9uICovCi0JCQlpZGV0YXBlX3JldHJ5X3BjKGRyaXZlKTsKKwkJCWlkZV9yZXRyeV9wYyhkcml2ZSwgdGFwZS0+ZGlzayk7CiAJCQlyZXR1cm4gaWRlX3N0b3BwZWQ7CiAJCX0KIAkJcGMtPmVycm9yID0gMDsKQEAgLTgwNSw3ICs3NDgsNyBAQAogCQlwYy0+ZXJyb3IgPSBJREVUQVBFX0VSUk9SX0dFTkVSQUw7CiAJCXRhcGUtPmZhaWxlZF9wYyA9IE5VTEw7CiAJfQotCWRyaXZlLT5wY19jYWxsYmFjayhkcml2ZSk7CisJZHJpdmUtPnBjX2NhbGxiYWNrKGRyaXZlLCAwKTsKIAlyZXR1cm4gaWRlX3N0b3BwZWQ7CiB9CiAKQEAgLTg2Miw3ICs4MDUsNyBAQAogCX0KIAogCS8qIFJldHJ5IGEgZmFpbGVkIHBhY2tldCBjb21tYW5kICovCi0JaWYgKHRhcGUtPmZhaWxlZF9wYyAmJiB0YXBlLT5wYy0+Y1swXSA9PSBSRVFVRVNUX1NFTlNFKSB7CisJaWYgKHRhcGUtPmZhaWxlZF9wYyAmJiBkcml2ZS0+cGMtPmNbMF0gPT0gUkVRVUVTVF9TRU5TRSkgewogCQlwYyA9IHRhcGUtPmZhaWxlZF9wYzsKIAkJZ290byBvdXQ7CiAJfQpAQCAtODgzLDEyICs4MjYsMTMgQEAKIAkgKi8KIAlzdGF0ID0gaHdpZi0+dHBfb3BzLT5yZWFkX3N0YXR1cyhod2lmKTsKIAotCWlmICghZHJpdmUtPmRzY19vdmVybGFwICYmICEocnEtPmNtZFsxM10gJiBSRVFfSURFVEFQRV9QQzIpKQorCWlmICgoZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19EU0NfT1ZFUkxBUCkgPT0gMCAmJgorCSAgICAocnEtPmNtZFsxM10gJiBSRVFfSURFVEFQRV9QQzIpID09IDApCiAJCXNldF9iaXQoSURFX0FGTEFHX0lHTk9SRV9EU0MsICZkcml2ZS0+YXRhcGlfZmxhZ3MpOwogCi0JaWYgKGRyaXZlLT5wb3N0X3Jlc2V0ID09IDEpIHsKKwlpZiAoZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19QT1NUX1JFU0VUKSB7CiAJCXNldF9iaXQoSURFX0FGTEFHX0lHTk9SRV9EU0MsICZkcml2ZS0+YXRhcGlfZmxhZ3MpOwotCQlkcml2ZS0+cG9zdF9yZXNldCA9IDA7CisJCWRyaXZlLT5kZXZfZmxhZ3MgJj0gfklERV9ERkxBR19QT1NUX1JFU0VUOwogCX0KIAogCWlmICghdGVzdF9hbmRfY2xlYXJfYml0KElERV9BRkxBR19JR05PUkVfRFNDLCAmZHJpdmUtPmF0YXBpX2ZsYWdzKSAmJgpAQCAtMTQxMSw3ICsxMzU1LDcgQEAKIAkJICogTm8gcG9pbnQgaW4gaXNzdWluZyB0aGlzIGlmIERTQyBvdmVybGFwIGlzbid0IHN1cHBvcnRlZCwgc29tZQogCQkgKiBkcml2ZXMgKFNlYWdhdGUgU1RUMzQwMUEpIHdpbGwgcmV0dXJuIGFuIGVycm9yLgogCQkgKi8KLQkJaWYgKGRyaXZlLT5kc2Nfb3ZlcmxhcCkgeworCQlpZiAoZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19EU0NfT1ZFUkxBUCkgewogCQkJYnl0ZXNfcmVhZCA9IGlkZXRhcGVfcXVldWVfcndfdGFpbChkcml2ZSwKIAkJCQkJCQlSRVFfSURFVEFQRV9SRUFELCAwLAogCQkJCQkJCXRhcGUtPm1lcmdlX2JoKTsKQEAgLTE1OTIsNyArMTUzNiw3IEBACiBzdGF0aWMgc3NpemVfdCBpZGV0YXBlX2NocmRldl9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmLAogCQkJCSAgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQogewotCXN0cnVjdCBpZGVfdGFwZV9vYmogKnRhcGUgPSBpZGVfdGFwZV9mKGZpbGUpOworCXN0cnVjdCBpZGVfdGFwZV9vYmogKnRhcGUgPSBmaWxlLT5wcml2YXRlX2RhdGE7CiAJaWRlX2RyaXZlX3QgKmRyaXZlID0gdGFwZS0+ZHJpdmU7CiAJc3NpemVfdCBieXRlc19yZWFkLCB0ZW1wLCBhY3R1YWxseV9yZWFkID0gMCwgcmM7CiAJc3NpemVfdCByZXQgPSAwOwpAQCAtMTY1NCw3ICsxNTk4LDcgQEAKIHN0YXRpYyBzc2l6ZV90IGlkZXRhcGVfY2hyZGV2X3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmLAogCQkJCSAgICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCiB7Ci0Jc3RydWN0IGlkZV90YXBlX29iaiAqdGFwZSA9IGlkZV90YXBlX2YoZmlsZSk7CisJc3RydWN0IGlkZV90YXBlX29iaiAqdGFwZSA9IGZpbGUtPnByaXZhdGVfZGF0YTsKIAlpZGVfZHJpdmVfdCAqZHJpdmUgPSB0YXBlLT5kcml2ZTsKIAlzc2l6ZV90IGFjdHVhbGx5X3dyaXR0ZW4gPSAwOwogCXNzaXplX3QgcmV0ID0gMDsKQEAgLTE2ODcsNyArMTYzMSw3IEBACiAJCSAqIHBvaW50IGluIGlzc3VpbmcgdGhpcyBpZiBEU0Mgb3ZlcmxhcCBpc24ndCBzdXBwb3J0ZWQsIHNvbWUKIAkJICogZHJpdmVzIChTZWFnYXRlIFNUVDM0MDFBKSB3aWxsIHJldHVybiBhbiBlcnJvci4KIAkJICovCi0JCWlmIChkcml2ZS0+ZHNjX292ZXJsYXApIHsKKwkJaWYgKGRyaXZlLT5kZXZfZmxhZ3MgJiBJREVfREZMQUdfRFNDX09WRVJMQVApIHsKIAkJCXNzaXplX3QgcmV0dmFsID0gaWRldGFwZV9xdWV1ZV9yd190YWlsKGRyaXZlLAogCQkJCQkJCVJFUV9JREVUQVBFX1dSSVRFLCAwLAogCQkJCQkJCXRhcGUtPm1lcmdlX2JoKTsKQEAgLTE4ODYsNyArMTgzMCw3IEBACiBzdGF0aWMgaW50IGlkZXRhcGVfY2hyZGV2X2lvY3RsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlLAogCQkJCXVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQogewotCXN0cnVjdCBpZGVfdGFwZV9vYmogKnRhcGUgPSBpZGVfdGFwZV9mKGZpbGUpOworCXN0cnVjdCBpZGVfdGFwZV9vYmogKnRhcGUgPSBmaWxlLT5wcml2YXRlX2RhdGE7CiAJaWRlX2RyaXZlX3QgKmRyaXZlID0gdGFwZS0+ZHJpdmU7CiAJc3RydWN0IG10b3AgbXRvcDsKIAlzdHJ1Y3QgbXRnZXQgbXRnZXQ7CkBAIC0yMDYzLDcgKzIwMDcsNyBAQAogCiBzdGF0aWMgaW50IGlkZXRhcGVfY2hyZGV2X3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHApCiB7Ci0Jc3RydWN0IGlkZV90YXBlX29iaiAqdGFwZSA9IGlkZV90YXBlX2YoZmlscCk7CisJc3RydWN0IGlkZV90YXBlX29iaiAqdGFwZSA9IGZpbHAtPnByaXZhdGVfZGF0YTsKIAlpZGVfZHJpdmVfdCAqZHJpdmUgPSB0YXBlLT5kcml2ZTsKIAl1bnNpZ25lZCBpbnQgbWlub3IgPSBpbWlub3IoaW5vZGUpOwogCkBAIC0yMTY0LDcgKzIxMDgsNyBAQAogCiAJLyogZGV2aWNlIGxhY2tzIGxvY2tpbmcgc3VwcG9ydCBhY2NvcmRpbmcgdG8gY2FwYWJpbGl0aWVzIHBhZ2UgKi8KIAlpZiAoKGNhcHNbNl0gJiAxKSA9PSAwKQotCQlkcml2ZS0+YXRhcGlfZmxhZ3MgfD0gSURFX0FGTEFHX05PX0RPT1JMT0NLOworCQlkcml2ZS0+ZGV2X2ZsYWdzICY9IH5JREVfREZMQUdfRE9PUkxPQ0tJTkc7CiAKIAlpZiAoY2Fwc1s3XSAmIDB4MDIpCiAJCXRhcGUtPmJsa19zaXplID0gNTEyOwpAQCAtMjIwMiw3ICsyMTQ2LDcgQEAKIHN0YXRpYyBpbnQgZGl2Zl9idWZmZXIoaWRlX2RyaXZlX3QgKmRyaXZlKQl7IHJldHVybiAgICAyOyB9CiBzdGF0aWMgaW50IGRpdmZfYnVmZmVyX3NpemUoaWRlX2RyaXZlX3QgKmRyaXZlKQl7IHJldHVybiAxMDI0OyB9CiAKLWlkZV9kZXZzZXRfcndfZmllbGQoZHNjX292ZXJsYXAsIGRzY19vdmVybGFwKTsKK2lkZV9kZXZzZXRfcndfZmxhZyhkc2Nfb3ZlcmxhcCwgSURFX0RGTEFHX0RTQ19PVkVSTEFQKTsKIAogaWRlX3RhcGVfZGV2c2V0X3J3X2ZpZWxkKGRlYnVnX21hc2ssIGRlYnVnX21hc2spOwogaWRlX3RhcGVfZGV2c2V0X3J3X2ZpZWxkKHRkc2MsIGJlc3RfZHNjX3J3X2ZyZXEpOwpAQCAtMjI0MSwzMyArMjE4NSwzMiBAQAogCXVuc2lnbmVkIGxvbmcgdDsKIAlpbnQgc3BlZWQ7CiAJaW50IGJ1ZmZlcl9zaXplOwotCXU4IGdjd1syXTsKIAl1MTYgKmN0bCA9ICh1MTYgKikmdGFwZS0+Y2Fwc1sxMl07CiAKLQlkcml2ZS0+cGNfY2FsbGJhY2sgPSBpZGVfdGFwZV9jYWxsYmFjazsKKwlkcml2ZS0+cGNfY2FsbGJhY2sJID0gaWRlX3RhcGVfY2FsbGJhY2s7CisJZHJpdmUtPnBjX3VwZGF0ZV9idWZmZXJzID0gaWRldGFwZV91cGRhdGVfYnVmZmVyczsKKwlkcml2ZS0+cGNfaW9fYnVmZmVycwkgPSBpZGVfdGFwZV9pb19idWZmZXJzOwogCiAJc3Bpbl9sb2NrX2luaXQoJnRhcGUtPmxvY2spOwotCWRyaXZlLT5kc2Nfb3ZlcmxhcCA9IDE7CisKKwlkcml2ZS0+ZGV2X2ZsYWdzIHw9IElERV9ERkxBR19EU0NfT1ZFUkxBUDsKKwogCWlmIChkcml2ZS0+aHdpZi0+aG9zdF9mbGFncyAmIElERV9IRkxBR19OT19EU0MpIHsKIAkJcHJpbnRrKEtFUk5fSU5GTyAiaWRlLXRhcGU6ICVzOiBkaXNhYmxpbmcgRFNDIG92ZXJsYXBcbiIsCiAJCQkJIHRhcGUtPm5hbWUpOwotCQlkcml2ZS0+ZHNjX292ZXJsYXAgPSAwOworCQlkcml2ZS0+ZGV2X2ZsYWdzICY9IH5JREVfREZMQUdfRFNDX09WRVJMQVA7CiAJfQorCiAJLyogU2VhZ2F0ZSBUcmF2YW4gZHJpdmVzIGRvIG5vdCBzdXBwb3J0IERTQyBvdmVybGFwLiAqLwogCWlmIChzdHJzdHIoKGNoYXIgKikmZHJpdmUtPmlkW0FUQV9JRF9QUk9EXSwgIlNlYWdhdGUgU1RUMzQwMSIpKQotCQlkcml2ZS0+ZHNjX292ZXJsYXAgPSAwOworCQlkcml2ZS0+ZGV2X2ZsYWdzICY9IH5JREVfREZMQUdfRFNDX09WRVJMQVA7CisKIAl0YXBlLT5taW5vciA9IG1pbm9yOwogCXRhcGUtPm5hbWVbMF0gPSAnaCc7CiAJdGFwZS0+bmFtZVsxXSA9ICd0JzsKIAl0YXBlLT5uYW1lWzJdID0gJzAnICsgbWlub3I7CiAJdGFwZS0+Y2hyZGV2X2RpciA9IElERVRBUEVfRElSX05PTkU7CiAKLQkqKCh1MTYgKikmZ2N3KSA9IGRyaXZlLT5pZFtBVEFfSURfQ09ORklHXTsKLQotCS8qIENvbW1hbmQgcGFja2V0IERSUSB0eXBlICovCi0JaWYgKCgoZ2N3WzBdICYgMHg2MCkgPj4gNSkgPT0gMSkKLQkJc2V0X2JpdChJREVfQUZMQUdfRFJRX0lOVEVSUlVQVCwgJmRyaXZlLT5hdGFwaV9mbGFncyk7Ci0KIAlpZGV0YXBlX2dldF9pbnF1aXJ5X3Jlc3VsdHMoZHJpdmUpOwogCWlkZXRhcGVfZ2V0X21vZGVfc2Vuc2VfcmVzdWx0cyhkcml2ZSk7CiAJaWRlX3RhcGVfZ2V0X2JzaXplX2Zyb21fYmRlc2MoZHJpdmUpOwpAQCAtMjMwMiw3ICsyMjQ1LDcgQEAKIAkJKCoodTE2ICopJnRhcGUtPmNhcHNbMTZdICogNTEyKSAvIHRhcGUtPmJ1ZmZlcl9zaXplLAogCQl0YXBlLT5idWZmZXJfc2l6ZSAvIDEwMjQsCiAJCXRhcGUtPmJlc3RfZHNjX3J3X2ZyZXEgKiAxMDAwIC8gSFosCi0JCWRyaXZlLT51c2luZ19kbWEgPyAiLCBETUEiOiIiKTsKKwkJKGRyaXZlLT5kZXZfZmxhZ3MgJiBJREVfREZMQUdfVVNJTkdfRE1BKSA/ICIsIERNQSIgOiAiIik7CiAKIAlpZGVfcHJvY19yZWdpc3Rlcl9kcml2ZXIoZHJpdmUsIHRhcGUtPmRyaXZlcik7CiB9CkBAIC0yMzIwLDEzICsyMjYzLDEzIEBACiAKIHN0YXRpYyB2b2lkIGlkZV90YXBlX3JlbGVhc2Uoc3RydWN0IGtyZWYgKmtyZWYpCiB7Ci0Jc3RydWN0IGlkZV90YXBlX29iaiAqdGFwZSA9IHRvX2lkZV90YXBlKGtyZWYpOworCXN0cnVjdCBpZGVfdGFwZV9vYmogKnRhcGUgPSB0b19pZGVfZHJ2KGtyZWYsIGlkZV90YXBlX29iaik7CiAJaWRlX2RyaXZlX3QgKmRyaXZlID0gdGFwZS0+ZHJpdmU7CiAJc3RydWN0IGdlbmRpc2sgKmcgPSB0YXBlLT5kaXNrOwogCiAJQlVHX09OKHRhcGUtPm1lcmdlX2JoX3NpemUpOwogCi0JZHJpdmUtPmRzY19vdmVybGFwID0gMDsKKwlkcml2ZS0+ZGV2X2ZsYWdzICY9IH5JREVfREZMQUdfRFNDX09WRVJMQVA7CiAJZHJpdmUtPmRyaXZlcl9kYXRhID0gTlVMTDsKIAlkZXZpY2VfZGVzdHJveShpZGV0YXBlX3N5c2ZzX2NsYXNzLCBNS0RFVihJREVUQVBFX01BSk9SLCB0YXBlLT5taW5vcikpOwogCWRldmljZV9kZXN0cm95KGlkZXRhcGVfc3lzZnNfY2xhc3MsCkBAIC0yMzU1LDYgKzIyOTgsMTYgQEAKIAl7ICJuYW1lIiwJU19JRlJFR3xTX0lSVUdPLAlwcm9jX2lkZXRhcGVfcmVhZF9uYW1lLAlOVUxMIH0sCiAJeyBOVUxMLCAwLCBOVUxMLCBOVUxMIH0KIH07CisKK3N0YXRpYyBpZGVfcHJvY19lbnRyeV90ICppZGVfdGFwZV9wcm9jX2VudHJpZXMoaWRlX2RyaXZlX3QgKmRyaXZlKQoreworCXJldHVybiBpZGV0YXBlX3Byb2M7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaWRlX3Byb2NfZGV2c2V0ICppZGVfdGFwZV9wcm9jX2RldnNldHMoaWRlX2RyaXZlX3QgKmRyaXZlKQoreworCXJldHVybiBpZGV0YXBlX3NldHRpbmdzOworfQogI2VuZGlmCiAKIHN0YXRpYyBpbnQgaWRlX3RhcGVfcHJvYmUoaWRlX2RyaXZlX3QgKik7CkBAIC0yMzY4LDEzICsyMzIxLDEyIEBACiAJLnByb2JlCQkJPSBpZGVfdGFwZV9wcm9iZSwKIAkucmVtb3ZlCQkJPSBpZGVfdGFwZV9yZW1vdmUsCiAJLnZlcnNpb24JCT0gSURFVEFQRV9WRVJTSU9OLAotCS5tZWRpYQkJCT0gaWRlX3RhcGUsCiAJLmRvX3JlcXVlc3QJCT0gaWRldGFwZV9kb19yZXF1ZXN0LAogCS5lbmRfcmVxdWVzdAkJPSBpZGV0YXBlX2VuZF9yZXF1ZXN0LAogCS5lcnJvcgkJCT0gX19pZGVfZXJyb3IsCiAjaWZkZWYgQ09ORklHX0lERV9QUk9DX0ZTCi0JLnByb2MJCQk9IGlkZXRhcGVfcHJvYywKLQkuc2V0dGluZ3MJCT0gaWRldGFwZV9zZXR0aW5ncywKKwkucHJvY19lbnRyaWVzCQk9IGlkZV90YXBlX3Byb2NfZW50cmllcywKKwkucHJvY19kZXZzZXRzCQk9IGlkZV90YXBlX3Byb2NfZGV2c2V0cywKICNlbmRpZgogfTsKIApAQCAtMjQwMyw3ICsyMzU1LDcgQEAKIHN0YXRpYyBpbnQgaWRldGFwZV9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwKQogewogCXN0cnVjdCBnZW5kaXNrICpkaXNrID0gaW5vZGUtPmlfYmRldi0+YmRfZGlzazsKLQlzdHJ1Y3QgaWRlX3RhcGVfb2JqICp0YXBlID0gaWRlX3RhcGVfZyhkaXNrKTsKKwlzdHJ1Y3QgaWRlX3RhcGVfb2JqICp0YXBlID0gaWRlX2Rydl9nKGRpc2ssIGlkZV90YXBlX29iaik7CiAKIAlpZGVfdGFwZV9wdXQodGFwZSk7CiAKQEAgLTI0MTQsNyArMjM2Niw3IEBACiAJCQl1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKIHsKIAlzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2ID0gaW5vZGUtPmlfYmRldjsKLQlzdHJ1Y3QgaWRlX3RhcGVfb2JqICp0YXBlID0gaWRlX3RhcGVfZyhiZGV2LT5iZF9kaXNrKTsKKwlzdHJ1Y3QgaWRlX3RhcGVfb2JqICp0YXBlID0gaWRlX2Rydl9nKGJkZXYtPmJkX2Rpc2ssIGlkZV90YXBlX29iaik7CiAJaWRlX2RyaXZlX3QgKmRyaXZlID0gdGFwZS0+ZHJpdmU7CiAJaW50IGVyciA9IGdlbmVyaWNfaWRlX2lvY3RsKGRyaXZlLCBmaWxlLCBiZGV2LCBjbWQsIGFyZyk7CiAJaWYgKGVyciA9PSAtRUlOVkFMKQpAQCAtMjQ0MSw3ICsyMzkzLDggQEAKIAlpZiAoZHJpdmUtPm1lZGlhICE9IGlkZV90YXBlKQogCQlnb3RvIGZhaWxlZDsKIAotCWlmIChkcml2ZS0+aWRfcmVhZCA9PSAxICYmICFpZGVfY2hlY2tfYXRhcGlfZGV2aWNlKGRyaXZlLCBEUlZfTkFNRSkpIHsKKwlpZiAoKGRyaXZlLT5kZXZfZmxhZ3MgJiBJREVfREZMQUdfSURfUkVBRCkgJiYKKwkgICAgaWRlX2NoZWNrX2F0YXBpX2RldmljZShkcml2ZSwgRFJWX05BTUUpID09IDApIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJpZGUtdGFwZTogJXM6IG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyB2ZXJzaW9uIG9mIgogCQkJCSIgdGhlIGRyaXZlclxuIiwgZHJpdmUtPm5hbWUpOwogCQlnb3RvIGZhaWxlZDsKQEAgLTI0NzcsMTIgKzI0MzAsMTEgQEAKIAogCWlkZXRhcGVfc2V0dXAoZHJpdmUsIHRhcGUsIG1pbm9yKTsKIAotCWRldmljZV9jcmVhdGVfZHJ2ZGF0YShpZGV0YXBlX3N5c2ZzX2NsYXNzLCAmZHJpdmUtPmdlbmRldiwKLQkJCSAgICAgIE1LREVWKElERVRBUEVfTUFKT1IsIG1pbm9yKSwgTlVMTCwKLQkJCSAgICAgICIlcyIsIHRhcGUtPm5hbWUpOwotCWRldmljZV9jcmVhdGVfZHJ2ZGF0YShpZGV0YXBlX3N5c2ZzX2NsYXNzLCAmZHJpdmUtPmdlbmRldiwKLQkJCSAgICAgIE1LREVWKElERVRBUEVfTUFKT1IsIG1pbm9yICsgMTI4KSwgTlVMTCwKLQkJCSAgICAgICJuJXMiLCB0YXBlLT5uYW1lKTsKKwlkZXZpY2VfY3JlYXRlKGlkZXRhcGVfc3lzZnNfY2xhc3MsICZkcml2ZS0+Z2VuZGV2LAorCQkgICAgICBNS0RFVihJREVUQVBFX01BSk9SLCBtaW5vciksIE5VTEwsICIlcyIsIHRhcGUtPm5hbWUpOworCWRldmljZV9jcmVhdGUoaWRldGFwZV9zeXNmc19jbGFzcywgJmRyaXZlLT5nZW5kZXYsCisJCSAgICAgIE1LREVWKElERVRBUEVfTUFKT1IsIG1pbm9yICsgMTI4KSwgTlVMTCwKKwkJICAgICAgIm4lcyIsIHRhcGUtPm5hbWUpOwogCiAJZy0+Zm9wcyA9ICZpZGV0YXBlX2Jsb2NrX29wczsKIAlpZGVfcmVnaXN0ZXJfcmVnaW9uKGcpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvaWRlLXRhc2tmaWxlLmMgYi9kcml2ZXJzL2lkZS9pZGUtdGFza2ZpbGUuYwppbmRleCA0ODdiMThiLi5iZjRmYjlkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9pZGUtdGFza2ZpbGUuYworKysgYi9kcml2ZXJzL2lkZS9pZGUtdGFza2ZpbGUuYwpAQCAtNTMsOSArNTMsNiBAQAogfQogCiBzdGF0aWMgaWRlX3N0YXJ0c3RvcF90IHRhc2tfbm9fZGF0YV9pbnRyKGlkZV9kcml2ZV90ICopOwotc3RhdGljIGlkZV9zdGFydHN0b3BfdCBzZXRfZ2VvbWV0cnlfaW50cihpZGVfZHJpdmVfdCAqKTsKLXN0YXRpYyBpZGVfc3RhcnRzdG9wX3QgcmVjYWxfaW50cihpZGVfZHJpdmVfdCAqKTsKLXN0YXRpYyBpZGVfc3RhcnRzdG9wX3Qgc2V0X211bHRtb2RlX2ludHIoaWRlX2RyaXZlX3QgKik7CiBzdGF0aWMgaWRlX3N0YXJ0c3RvcF90IHByZV90YXNrX291dF9pbnRyKGlkZV9kcml2ZV90ICosIHN0cnVjdCByZXF1ZXN0ICopOwogc3RhdGljIGlkZV9zdGFydHN0b3BfdCB0YXNrX2luX2ludHIoaWRlX2RyaXZlX3QgKik7CiAKQEAgLTc5LDYgKzc2LDggQEAKIAlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfRkxBR0dFRCkKIAkJdGFzay0+dGZfZmxhZ3MgfD0gSURFX1RGTEFHX0ZMQUdHRURfU0VUX0lOX0ZMQUdTOwogCisJbWVtY3B5KCZod2lmLT50YXNrLCB0YXNrLCBzaXplb2YoKnRhc2spKTsKKwogCWlmICgodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfRE1BX1BJT19GQUxMQkFDSykgPT0gMCkgewogCQlpZGVfdGZfZHVtcChkcml2ZS0+bmFtZSwgdGYpOwogCQl0cF9vcHMtPnNldF9pcnEoaHdpZiwgMSk7CkBAIC05OSwyNCArOTgsMTIgQEAKIAljYXNlIFRBU0tGSUxFX05PX0RBVEE6CiAJCWlmIChoYW5kbGVyID09IE5VTEwpCiAJCQloYW5kbGVyID0gdGFza19ub19kYXRhX2ludHI7Ci0JCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19DVVNUT01fSEFORExFUikgewotCQkJc3dpdGNoICh0Zi0+Y29tbWFuZCkgewotCQkJY2FzZSBBVEFfQ01EX0lOSVRfREVWX1BBUkFNUzoKLQkJCQloYW5kbGVyID0gc2V0X2dlb21ldHJ5X2ludHI7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIEFUQV9DTURfUkVTVE9SRToKLQkJCQloYW5kbGVyID0gcmVjYWxfaW50cjsKLQkJCQlicmVhazsKLQkJCWNhc2UgQVRBX0NNRF9TRVRfTVVMVEk6Ci0JCQkJaGFuZGxlciA9IHNldF9tdWx0bW9kZV9pbnRyOwotCQkJCWJyZWFrOwotCQkJfQotCQl9CiAJCWlkZV9leGVjdXRlX2NvbW1hbmQoZHJpdmUsIHRmLT5jb21tYW5kLCBoYW5kbGVyLAogCQkJCSAgICBXQUlUX1dPUlNUQ0FTRSwgTlVMTCk7CiAJCXJldHVybiBpZGVfc3RhcnRlZDsKIAlkZWZhdWx0OgotCQlpZiAoZHJpdmUtPnVzaW5nX2RtYSA9PSAwIHx8IGRtYV9vcHMtPmRtYV9zZXR1cChkcml2ZSkpCisJCWlmICgoZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19VU0lOR19ETUEpID09IDAgfHwKKwkJICAgIGRtYV9vcHMtPmRtYV9zZXR1cChkcml2ZSkpCiAJCQlyZXR1cm4gaWRlX3N0b3BwZWQ7CiAJCWRtYV9vcHMtPmRtYV9leGVjX2NtZChkcml2ZSwgdGYtPmNvbW1hbmQpOwogCQlkbWFfb3BzLT5kbWFfc3RhcnQoZHJpdmUpOwpAQCAtMTI2LDMzICsxMTMsMTUgQEAKIEVYUE9SVF9TWU1CT0xfR1BMKGRvX3J3X3Rhc2tmaWxlKTsKIAogLyoKLSAqIHNldF9tdWx0bW9kZV9pbnRyKCkgaXMgaW52b2tlZCBvbiBjb21wbGV0aW9uIG9mIGEgQVRBX0NNRF9TRVRfTVVMVEkgY21kLgorICogSGFuZGxlciBmb3IgY29tbWFuZHMgd2l0aG91dCBhIGRhdGEgcGhhc2UKICAqLwotc3RhdGljIGlkZV9zdGFydHN0b3BfdCBzZXRfbXVsdG1vZGVfaW50cihpZGVfZHJpdmVfdCAqZHJpdmUpCitzdGF0aWMgaWRlX3N0YXJ0c3RvcF90IHRhc2tfbm9fZGF0YV9pbnRyKGlkZV9kcml2ZV90ICpkcml2ZSkKIHsKIAlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7Ci0JdTggc3RhdDsKLQotCWxvY2FsX2lycV9lbmFibGVfaW5faGFyZGlycSgpOwotCXN0YXQgPSBod2lmLT50cF9vcHMtPnJlYWRfc3RhdHVzKGh3aWYpOwotCi0JaWYgKE9LX1NUQVQoc3RhdCwgQVRBX0RSRFksIEJBRF9TVEFUKSkKLQkJZHJpdmUtPm11bHRfY291bnQgPSBkcml2ZS0+bXVsdF9yZXE7Ci0JZWxzZSB7Ci0JCWRyaXZlLT5tdWx0X3JlcSA9IGRyaXZlLT5tdWx0X2NvdW50ID0gMDsKLQkJZHJpdmUtPnNwZWNpYWwuYi5yZWNhbGlicmF0ZSA9IDE7Ci0JCSh2b2lkKSBpZGVfZHVtcF9zdGF0dXMoZHJpdmUsICJzZXRfbXVsdG1vZGUiLCBzdGF0KTsKLQl9Ci0JcmV0dXJuIGlkZV9zdG9wcGVkOwotfQotCi0vKgotICogc2V0X2dlb21ldHJ5X2ludHIoKSBpcyBpbnZva2VkIG9uIGNvbXBsZXRpb24gb2YgYSBBVEFfQ01EX0lOSVRfREVWX1BBUkFNUyBjbWQuCi0gKi8KLXN0YXRpYyBpZGVfc3RhcnRzdG9wX3Qgc2V0X2dlb21ldHJ5X2ludHIoaWRlX2RyaXZlX3QgKmRyaXZlKQotewotCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKLQlpbnQgcmV0cmllcyA9IDU7CisJaWRlX3Rhc2tfdCAqdGFzayA9ICZod2lmLT50YXNrOworCXN0cnVjdCBpZGVfdGFza2ZpbGUgKnRmID0gJnRhc2stPnRmOworCWludCBjdXN0b20gPSAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfQ1VTVE9NX0hBTkRMRVIpID8gMSA6IDA7CisJaW50IHJldHJpZXMgPSAoY3VzdG9tICYmIHRmLT5jb21tYW5kID09IEFUQV9DTURfSU5JVF9ERVZfUEFSQU1TKSA/IDUgOiAxOwogCXU4IHN0YXQ7CiAKIAlsb2NhbF9pcnFfZW5hYmxlX2luX2hhcmRpcnEoKTsKQEAgLTE2NCw1MCArMTMzLDM2IEBACiAJCXVkZWxheSgxMCk7CiAJfTsKIAotCWlmIChPS19TVEFUKHN0YXQsIEFUQV9EUkRZLCBCQURfU1RBVCkpCi0JCXJldHVybiBpZGVfc3RvcHBlZDsKLQotCWlmIChzdGF0ICYgKEFUQV9FUlIgfCBBVEFfRFJRKSkKLQkJcmV0dXJuIGlkZV9lcnJvcihkcml2ZSwgInNldF9nZW9tZXRyeV9pbnRyIiwgc3RhdCk7Ci0KLQlpZGVfc2V0X2hhbmRsZXIoZHJpdmUsICZzZXRfZ2VvbWV0cnlfaW50ciwgV0FJVF9XT1JTVENBU0UsIE5VTEwpOwotCXJldHVybiBpZGVfc3RhcnRlZDsKLX0KLQotLyoKLSAqIHJlY2FsX2ludHIoKSBpcyBpbnZva2VkIG9uIGNvbXBsZXRpb24gb2YgYSBBVEFfQ01EX1JFU1RPUkUgKHJlY2FsaWJyYXRlKSBjbWQuCi0gKi8KLXN0YXRpYyBpZGVfc3RhcnRzdG9wX3QgcmVjYWxfaW50cihpZGVfZHJpdmVfdCAqZHJpdmUpCi17Ci0JaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOwotCXU4IHN0YXQ7Ci0KLQlsb2NhbF9pcnFfZW5hYmxlX2luX2hhcmRpcnEoKTsKLQlzdGF0ID0gaHdpZi0+dHBfb3BzLT5yZWFkX3N0YXR1cyhod2lmKTsKLQotCWlmICghT0tfU1RBVChzdGF0LCBBVEFfRFJEWSwgQkFEX1NUQVQpKQotCQlyZXR1cm4gaWRlX2Vycm9yKGRyaXZlLCAicmVjYWxfaW50ciIsIHN0YXQpOwotCXJldHVybiBpZGVfc3RvcHBlZDsKLX0KLQotLyoKLSAqIEhhbmRsZXIgZm9yIGNvbW1hbmRzIHdpdGhvdXQgYSBkYXRhIHBoYXNlCi0gKi8KLXN0YXRpYyBpZGVfc3RhcnRzdG9wX3QgdGFza19ub19kYXRhX2ludHIoaWRlX2RyaXZlX3QgKmRyaXZlKQotewotCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKLQlpZGVfdGFza190ICphcmdzID0gaHdpZi0+aHdncm91cC0+cnEtPnNwZWNpYWw7Ci0JdTggc3RhdDsKLQotCWxvY2FsX2lycV9lbmFibGVfaW5faGFyZGlycSgpOwotCXN0YXQgPSBod2lmLT50cF9vcHMtPnJlYWRfc3RhdHVzKGh3aWYpOwotCi0JaWYgKCFPS19TVEFUKHN0YXQsIEFUQV9EUkRZLCBCQURfU1RBVCkpCisJaWYgKCFPS19TVEFUKHN0YXQsIEFUQV9EUkRZLCBCQURfU1RBVCkpIHsKKwkJaWYgKGN1c3RvbSAmJiB0Zi0+Y29tbWFuZCA9PSBBVEFfQ01EX1NFVF9NVUxUSSkgeworCQkJZHJpdmUtPm11bHRfcmVxID0gZHJpdmUtPm11bHRfY291bnQgPSAwOworCQkJZHJpdmUtPnNwZWNpYWwuYi5yZWNhbGlicmF0ZSA9IDE7CisJCQkodm9pZClpZGVfZHVtcF9zdGF0dXMoZHJpdmUsIF9fZnVuY19fLCBzdGF0KTsKKwkJCXJldHVybiBpZGVfc3RvcHBlZDsKKwkJfSBlbHNlIGlmIChjdXN0b20gJiYgdGYtPmNvbW1hbmQgPT0gQVRBX0NNRF9JTklUX0RFVl9QQVJBTVMpIHsKKwkJCWlmICgoc3RhdCAmIChBVEFfRVJSIHwgQVRBX0RSUSkpID09IDApIHsKKwkJCQlpZGVfc2V0X2hhbmRsZXIoZHJpdmUsICZ0YXNrX25vX2RhdGFfaW50ciwKKwkJCQkJCVdBSVRfV09SU1RDQVNFLCBOVUxMKTsKKwkJCQlyZXR1cm4gaWRlX3N0YXJ0ZWQ7CisJCQl9CisJCX0KIAkJcmV0dXJuIGlkZV9lcnJvcihkcml2ZSwgInRhc2tfbm9fZGF0YV9pbnRyIiwgc3RhdCk7CiAJCS8qIGNhbGxzIGlkZV9lbmRfZHJpdmVfY21kICovCisJfQogCi0JaWYgKGFyZ3MpCisJaWYgKCFjdXN0b20pCiAJCWlkZV9lbmRfZHJpdmVfY21kKGRyaXZlLCBzdGF0LCBpZGVfcmVhZF9lcnJvcihkcml2ZSkpOworCWVsc2UgaWYgKHRmLT5jb21tYW5kID09IEFUQV9DTURfSURMRUlNTUVESUFURSkgeworCQlod2lmLT50cF9vcHMtPnRmX3JlYWQoZHJpdmUsIHRhc2spOworCQlpZiAodGYtPmxiYWwgIT0gMHhjNCkgeworCQkJcHJpbnRrKEtFUk5fRVJSICIlczogaGVhZCB1bmxvYWQgZmFpbGVkIVxuIiwKKwkJCSAgICAgICBkcml2ZS0+bmFtZSk7CisJCQlpZGVfdGZfZHVtcChkcml2ZS0+bmFtZSwgdGYpOworCQl9IGVsc2UKKwkJCWRyaXZlLT5kZXZfZmxhZ3MgfD0gSURFX0RGTEFHX1BBUktFRDsKKwkJaWRlX2VuZF9kcml2ZV9jbWQoZHJpdmUsIHN0YXQsIGlkZV9yZWFkX2Vycm9yKGRyaXZlKSk7CisJfSBlbHNlIGlmICh0Zi0+Y29tbWFuZCA9PSBBVEFfQ01EX1NFVF9NVUxUSSkKKwkJZHJpdmUtPm11bHRfY291bnQgPSBkcml2ZS0+bXVsdF9yZXE7CiAKIAlyZXR1cm4gaWRlX3N0b3BwZWQ7CiB9CkBAIC00NjksMTMgKzQyNCwxMiBAQAogCWlmIChpZGVfd2FpdF9zdGF0KCZzdGFydHN0b3AsIGRyaXZlLCBBVEFfRFJRLAogCQkJICBkcml2ZS0+YmFkX3dzdGF0LCBXQUlUX0RSUSkpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICIlczogbm8gRFJRIGFmdGVyIGlzc3VpbmcgJXNXUklURSVzXG4iLAotCQkJCWRyaXZlLT5uYW1lLAotCQkJCWRyaXZlLT5od2lmLT5kYXRhX3BoYXNlID8gIk1VTFQiIDogIiIsCi0JCQkJZHJpdmUtPmFkZHJlc3NpbmcgPyAiX0VYVCIgOiAiIik7CisJCQlkcml2ZS0+bmFtZSwgZHJpdmUtPmh3aWYtPmRhdGFfcGhhc2UgPyAiTVVMVCIgOiAiIiwKKwkJCShkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX0xCQTQ4KSA/ICJfRVhUIiA6ICIiKTsKIAkJcmV0dXJuIHN0YXJ0c3RvcDsKIAl9CiAKLQlpZiAoIWRyaXZlLT51bm1hc2spCisJaWYgKChkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX1VOTUFTSykgPT0gMCkKIAkJbG9jYWxfaXJxX2Rpc2FibGUoKTsKIAogCWlkZV9zZXRfaGFuZGxlcihkcml2ZSwgJnRhc2tfb3V0X2ludHIsIFdBSVRfV09SU1RDQVNFLCBOVUxMKTsKQEAgLTU5MSw3ICs1NDUsNyBAQAogCiAJYXJncy50Zl9mbGFncyA9IElERV9URkxBR19JT18xNkJJVCB8IElERV9URkxBR19ERVZJQ0UgfAogCQkJSURFX1RGTEFHX0lOX1RGOwotCWlmIChkcml2ZS0+YWRkcmVzc2luZyA9PSAxKQorCWlmIChkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX0xCQTQ4KQogCQlhcmdzLnRmX2ZsYWdzIHw9IChJREVfVEZMQUdfTEJBNDggfCBJREVfVEZMQUdfSU5fSE9CKTsKIAogCWlmIChyZXFfdGFzay0+b3V0X2ZsYWdzLmFsbCkgewpAQCAtNjk0LDcgKzY0OCw3IEBACiAJaWYgKChhcmdzLnRmX2ZsYWdzICYgSURFX1RGTEFHX0ZMQUdHRURfU0VUX0lOX0ZMQUdTKSAmJgogCSAgICByZXFfdGFzay0+aW5fZmxhZ3MuYWxsID09IDApIHsKIAkJcmVxX3Rhc2stPmluX2ZsYWdzLmFsbCA9IElERV9UQVNLRklMRV9TVERfSU5fRkxBR1M7Ci0JCWlmIChkcml2ZS0+YWRkcmVzc2luZyA9PSAxKQorCQlpZiAoZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19MQkE0OCkKIAkJCXJlcV90YXNrLT5pbl9mbGFncy5hbGwgfD0gKElERV9IT0JfU1REX0lOX0ZMQUdTIDw8IDgpOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvaWRlLmMgYi9kcml2ZXJzL2lkZS9pZGUuYwppbmRleCA5ZGNmNWFlLi4wNGY4ZjEzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9pZGUuYworKysgYi9kcml2ZXJzL2lkZS9pZGUuYwpAQCAtMTE0LDcgKzExNCw3IEBACiAJCW1lbXNldChkcml2ZSwgMCwgc2l6ZW9mKCpkcml2ZSkpOwogCiAJCWRyaXZlLT5tZWRpYQkJCT0gaWRlX2Rpc2s7Ci0JCWRyaXZlLT5zZWxlY3QuYWxsCQk9ICh1bml0PDw0KXwweGEwOworCQlkcml2ZS0+c2VsZWN0CQkJPSAodW5pdCA8PCA0KSB8IEFUQV9ERVZJQ0VfT0JTOwogCQlkcml2ZS0+aHdpZgkJCT0gaHdpZjsKIAkJZHJpdmUtPnJlYWR5X3N0YXQJCT0gQVRBX0RSRFk7CiAJCWRyaXZlLT5iYWRfd3N0YXQJCT0gQkFEX1dfU1RBVDsKQEAgLTEzOCw3ICsxMzgsNyBAQAogCWZvciAoaSA9IDA7IGkgPCBNQVhfRFJJVkVTOyBpKyspIHsKIAkJaWRlX2RyaXZlX3QgKmRyaXZlID0gJmh3aWYtPmRyaXZlc1tpXTsKIAotCQlpZiAoZHJpdmUtPnByZXNlbnQpIHsKKwkJaWYgKGRyaXZlLT5kZXZfZmxhZ3MgJiBJREVfREZMQUdfUFJFU0VOVCkgewogCQkJc3Bpbl91bmxvY2tfaXJxKCZpZGVfbG9jayk7CiAJCQlkZXZpY2VfdW5yZWdpc3RlcigmZHJpdmUtPmdlbmRldik7CiAJCQl3YWl0X2Zvcl9jb21wbGV0aW9uKCZkcml2ZS0+Z2VuZGV2X3JlbF9jb21wKTsKQEAgLTIyNyw4ICsyMjcsNyBAQAogCWtmcmVlKGh3aWYtPnNnX3RhYmxlKTsKIAl1bnJlZ2lzdGVyX2Jsa2Rldihod2lmLT5tYWpvciwgaHdpZi0+bmFtZSk7CiAKLQlpZiAoaHdpZi0+ZG1hX2Jhc2UpCi0JCWlkZV9yZWxlYXNlX2RtYV9lbmdpbmUoaHdpZik7CisJaWRlX3JlbGVhc2VfZG1hX2VuZ2luZShod2lmKTsKIAogCW11dGV4X3VubG9jaygmaWRlX2NmZ19tdHgpOwogfQpAQCAtMjU0LDcgKzI1Myw3IEBACiAKIHN0YXRpYyBpbnQgc2V0X2lvXzMyYml0KGlkZV9kcml2ZV90ICpkcml2ZSwgaW50IGFyZykKIHsKLQlpZiAoZHJpdmUtPm5vX2lvXzMyYml0KQorCWlmIChkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX05PX0lPXzMyQklUKQogCQlyZXR1cm4gLUVQRVJNOwogCiAJaWYgKGFyZyA8IDAgfHwgYXJnID4gMSArIChTVVBQT1JUX1ZMQl9TWU5DIDw8IDEpKQpAQCAtMjY1LDE5ICsyNjQsMjIgQEAKIAlyZXR1cm4gMDsKIH0KIAotaWRlX2RldnNldF9nZXQoa3NldHRpbmdzLCBrZWVwX3NldHRpbmdzKTsKK2lkZV9kZXZzZXRfZ2V0X2ZsYWcoa3NldHRpbmdzLCBJREVfREZMQUdfS0VFUF9TRVRUSU5HUyk7CiAKIHN0YXRpYyBpbnQgc2V0X2tzZXR0aW5ncyhpZGVfZHJpdmVfdCAqZHJpdmUsIGludCBhcmcpCiB7CiAJaWYgKGFyZyA8IDAgfHwgYXJnID4gMSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlkcml2ZS0+a2VlcF9zZXR0aW5ncyA9IGFyZzsKKwlpZiAoYXJnKQorCQlkcml2ZS0+ZGV2X2ZsYWdzIHw9IElERV9ERkxBR19LRUVQX1NFVFRJTkdTOworCWVsc2UKKwkJZHJpdmUtPmRldl9mbGFncyAmPSB+SURFX0RGTEFHX0tFRVBfU0VUVElOR1M7CiAKIAlyZXR1cm4gMDsKIH0KIAotaWRlX2RldnNldF9nZXQodXNpbmdfZG1hLCB1c2luZ19kbWEpOworaWRlX2RldnNldF9nZXRfZmxhZyh1c2luZ19kbWEsIElERV9ERkxBR19VU0lOR19ETUEpOwogCiBzdGF0aWMgaW50IHNldF91c2luZ19kbWEoaWRlX2RyaXZlX3QgKmRyaXZlLCBpbnQgYXJnKQogewpAQCAtMzExLDkgKzMxMywzMiBAQAogI2VuZGlmCiB9CiAKKy8qCisgKiBoYW5kbGUgSERJT19TRVRfUElPX01PREUgaW9jdGwgYWJ1c2VycyBoZXJlLCBldmVudHVhbGx5IGl0IHdpbGwgZ28gYXdheQorICovCitzdGF0aWMgaW50IHNldF9waW9fbW9kZV9hYnVzZShpZGVfaHdpZl90ICpod2lmLCB1OCByZXFfcGlvKQoreworCXN3aXRjaCAocmVxX3BpbykgeworCWNhc2UgMjAyOgorCWNhc2UgMjAxOgorCWNhc2UgMjAwOgorCWNhc2UgMTAyOgorCWNhc2UgMTAxOgorCWNhc2UgMTAwOgorCQlyZXR1cm4gKGh3aWYtPmhvc3RfZmxhZ3MgJiBJREVfSEZMQUdfQUJVU0VfRE1BX01PREVTKSA/IDEgOiAwOworCWNhc2UgOToKKwljYXNlIDg6CisJCXJldHVybiAoaHdpZi0+aG9zdF9mbGFncyAmIElERV9IRkxBR19BQlVTRV9QUkVGRVRDSCkgPyAxIDogMDsKKwljYXNlIDc6CisJY2FzZSA2OgorCQlyZXR1cm4gKGh3aWYtPmhvc3RfZmxhZ3MgJiBJREVfSEZMQUdfQUJVU0VfRkFTVF9ERVZTRUwpID8gMSA6IDA7CisJZGVmYXVsdDoKKwkJcmV0dXJuIDA7CisJfQorfQorCiBzdGF0aWMgaW50IHNldF9waW9fbW9kZShpZGVfZHJpdmVfdCAqZHJpdmUsIGludCBhcmcpCiB7Ci0Jc3RydWN0IHJlcXVlc3QgKnJxOwogCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKIAljb25zdCBzdHJ1Y3QgaWRlX3BvcnRfb3BzICpwb3J0X29wcyA9IGh3aWYtPnBvcnRfb3BzOwogCkBAIC0zMjQsNTYgKzM0OSw2NSBAQAogCSAgICAoaHdpZi0+aG9zdF9mbGFncyAmIElERV9IRkxBR19OT19TRVRfTU9ERSkpCiAJCXJldHVybiAtRU5PU1lTOwogCi0JaWYgKGRyaXZlLT5zcGVjaWFsLmIuc2V0X3R1bmUpCi0JCXJldHVybiAtRUJVU1k7CisJaWYgKHNldF9waW9fbW9kZV9hYnVzZShkcml2ZS0+aHdpZiwgYXJnKSkgeworCQlpZiAoYXJnID09IDggfHwgYXJnID09IDkpIHsKKwkJCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlycSA9IGJsa19nZXRfcmVxdWVzdChkcml2ZS0+cXVldWUsIFJFQUQsIF9fR0ZQX1dBSVQpOwotCXJxLT5jbWRfdHlwZSA9IFJFUV9UWVBFX0FUQV9UQVNLRklMRTsKKwkJCS8qIHRha2UgbG9jayBmb3IgSURFX0RGTEFHX1tOT19dVU5NQVNLL1tOT19dSU9fMzJCSVQgKi8KKwkJCXNwaW5fbG9ja19pcnFzYXZlKCZpZGVfbG9jaywgZmxhZ3MpOworCQkJcG9ydF9vcHMtPnNldF9waW9fbW9kZShkcml2ZSwgYXJnKTsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlkZV9sb2NrLCBmbGFncyk7CisJCX0gZWxzZQorCQkJcG9ydF9vcHMtPnNldF9waW9fbW9kZShkcml2ZSwgYXJnKTsKKwl9IGVsc2UgeworCQlpbnQga2VlcF9kbWEgPSAhIShkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX1VTSU5HX0RNQSk7CiAKLQlkcml2ZS0+dHVuZV9yZXEgPSAodTgpIGFyZzsKLQlkcml2ZS0+c3BlY2lhbC5iLnNldF90dW5lID0gMTsKKwkJaWRlX3NldF9waW8oZHJpdmUsIGFyZyk7CiAKLQlibGtfZXhlY3V0ZV9ycShkcml2ZS0+cXVldWUsIE5VTEwsIHJxLCAwKTsKLQlibGtfcHV0X3JlcXVlc3QocnEpOworCQlpZiAoaHdpZi0+aG9zdF9mbGFncyAmIElERV9IRkxBR19TRVRfUElPX01PREVfS0VFUF9ETUEpIHsKKwkJCWlmIChrZWVwX2RtYSkKKwkJCQlpZGVfZG1hX29uKGRyaXZlKTsKKwkJfQorCX0KIAogCXJldHVybiAwOwogfQogCi1pZGVfZGV2c2V0X2dldCh1bm1hc2tpcnEsIHVubWFzayk7CitpZGVfZGV2c2V0X2dldF9mbGFnKHVubWFza2lycSwgSURFX0RGTEFHX1VOTUFTSyk7CiAKIHN0YXRpYyBpbnQgc2V0X3VubWFza2lycShpZGVfZHJpdmVfdCAqZHJpdmUsIGludCBhcmcpCiB7Ci0JaWYgKGRyaXZlLT5ub191bm1hc2spCisJaWYgKGRyaXZlLT5kZXZfZmxhZ3MgJiBJREVfREZMQUdfTk9fVU5NQVNLKQogCQlyZXR1cm4gLUVQRVJNOwogCiAJaWYgKGFyZyA8IDAgfHwgYXJnID4gMSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlkcml2ZS0+dW5tYXNrID0gYXJnOworCWlmIChhcmcpCisJCWRyaXZlLT5kZXZfZmxhZ3MgfD0gSURFX0RGTEFHX1VOTUFTSzsKKwllbHNlCisJCWRyaXZlLT5kZXZfZmxhZ3MgJj0gfklERV9ERkxBR19VTk1BU0s7CiAKIAlyZXR1cm4gMDsKIH0KIAotI2RlZmluZSBpZGVfZ2VuX2RldnNldF9ydyhfbmFtZSwgX2Z1bmMpIFwKLV9fSURFX0RFVlNFVChfbmFtZSwgRFNfU1lOQywgZ2V0XyMjX2Z1bmMsIHNldF8jI19mdW5jKQotCi1pZGVfZ2VuX2RldnNldF9ydyhpb18zMmJpdCwgaW9fMzJiaXQpOwotaWRlX2dlbl9kZXZzZXRfcncoa2VlcHNldHRpbmdzLCBrc2V0dGluZ3MpOwotaWRlX2dlbl9kZXZzZXRfcncodW5tYXNraXJxLCB1bm1hc2tpcnEpOwotaWRlX2dlbl9kZXZzZXRfcncodXNpbmdfZG1hLCB1c2luZ19kbWEpOwotX19JREVfREVWU0VUKHBpb19tb2RlLCAwLCBOVUxMLCBzZXRfcGlvX21vZGUpOworaWRlX2V4dF9kZXZzZXRfcndfc3luYyhpb18zMmJpdCwgaW9fMzJiaXQpOworaWRlX2V4dF9kZXZzZXRfcndfc3luYyhrZWVwc2V0dGluZ3MsIGtzZXR0aW5ncyk7CitpZGVfZXh0X2RldnNldF9yd19zeW5jKHVubWFza2lycSwgdW5tYXNraXJxKTsKK2lkZV9leHRfZGV2c2V0X3J3X3N5bmModXNpbmdfZG1hLCB1c2luZ19kbWEpOworX19JREVfREVWU0VUKHBpb19tb2RlLCBEU19TWU5DLCBOVUxMLCBzZXRfcGlvX21vZGUpOwogCiBzdGF0aWMgaW50IGdlbmVyaWNfaWRlX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2LCBwbV9tZXNzYWdlX3QgbWVzZykKIHsKLQlpZGVfZHJpdmVfdCAqZHJpdmUgPSBkZXYtPmRyaXZlcl9kYXRhOworCWlkZV9kcml2ZV90ICpkcml2ZSA9IGRldi0+ZHJpdmVyX2RhdGEsICpwYWlyID0gaWRlX2dldF9wYWlyX2Rldihkcml2ZSk7CiAJaWRlX2h3aWZfdCAqaHdpZiA9IEhXSUYoZHJpdmUpOwogCXN0cnVjdCByZXF1ZXN0ICpycTsKIAlzdHJ1Y3QgcmVxdWVzdF9wbV9zdGF0ZSBycXBtOwogCWlkZV90YXNrX3QgYXJnczsKIAlpbnQgcmV0OwogCi0JLyogQ2FsbCBBQ1BJIF9HVE0gb25seSBvbmNlICovCi0JaWYgKCEoZHJpdmUtPmRuICUgMikpCisJLyogY2FsbCBBQ1BJIF9HVE0gb25seSBvbmNlICovCisJaWYgKChkcml2ZS0+ZG4gJiAxKSA9PSAwIHx8IHBhaXIgPT0gTlVMTCkKIAkJaWRlX2FjcGlfZ2V0X3RpbWluZyhod2lmKTsKIAogCW1lbXNldCgmcnFwbSwgMCwgc2l6ZW9mKHJxcG0pKTsKQEAgLTM4MiwzMyArNDE2LDMyIEBACiAJcnEtPmNtZF90eXBlID0gUkVRX1RZUEVfUE1fU1VTUEVORDsKIAlycS0+c3BlY2lhbCA9ICZhcmdzOwogCXJxLT5kYXRhID0gJnJxcG07Ci0JcnFwbS5wbV9zdGVwID0gaWRlX3BtX3N0YXRlX3N0YXJ0X3N1c3BlbmQ7CisJcnFwbS5wbV9zdGVwID0gSURFX1BNX1NUQVJUX1NVU1BFTkQ7CiAJaWYgKG1lc2cuZXZlbnQgPT0gUE1fRVZFTlRfUFJFVEhBVykKIAkJbWVzZy5ldmVudCA9IFBNX0VWRU5UX0ZSRUVaRTsKIAlycXBtLnBtX3N0YXRlID0gbWVzZy5ldmVudDsKIAogCXJldCA9IGJsa19leGVjdXRlX3JxKGRyaXZlLT5xdWV1ZSwgTlVMTCwgcnEsIDApOwogCWJsa19wdXRfcmVxdWVzdChycSk7Ci0JLyogb25seSBjYWxsIEFDUEkgX1BTMyBhZnRlciBib3RoIGRyaXZlcnMgYXJlIHN1c3BlbmRlZCAqLwotCWlmICghcmV0ICYmICgoKGRyaXZlLT5kbiAlIDIpICYmIGh3aWYtPmRyaXZlc1swXS5wcmVzZW50Ci0JCSAmJiBod2lmLT5kcml2ZXNbMV0ucHJlc2VudCkKLQkJIHx8ICFod2lmLT5kcml2ZXNbMF0ucHJlc2VudAotCQkgfHwgIWh3aWYtPmRyaXZlc1sxXS5wcmVzZW50KSkKKworCS8qIGNhbGwgQUNQSSBfUFMzIG9ubHkgYWZ0ZXIgYm90aCBkZXZpY2VzIGFyZSBzdXNwZW5kZWQgKi8KKwlpZiAocmV0ID09IDAgJiYgKChkcml2ZS0+ZG4gJiAxKSB8fCBwYWlyID09IE5VTEwpKQogCQlpZGVfYWNwaV9zZXRfc3RhdGUoaHdpZiwgMCk7CisKIAlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgaW50IGdlbmVyaWNfaWRlX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7Ci0JaWRlX2RyaXZlX3QgKmRyaXZlID0gZGV2LT5kcml2ZXJfZGF0YTsKKwlpZGVfZHJpdmVfdCAqZHJpdmUgPSBkZXYtPmRyaXZlcl9kYXRhLCAqcGFpciA9IGlkZV9nZXRfcGFpcl9kZXYoZHJpdmUpOwogCWlkZV9od2lmX3QgKmh3aWYgPSBIV0lGKGRyaXZlKTsKIAlzdHJ1Y3QgcmVxdWVzdCAqcnE7CiAJc3RydWN0IHJlcXVlc3RfcG1fc3RhdGUgcnFwbTsKIAlpZGVfdGFza190IGFyZ3M7CiAJaW50IGVycjsKIAotCS8qIENhbGwgQUNQSSBfU1RNIG9ubHkgb25jZSAqLwotCWlmICghKGRyaXZlLT5kbiAlIDIpKSB7CisJLyogY2FsbCBBQ1BJIF9QUzAgLyBfU1RNIG9ubHkgb25jZSAqLworCWlmICgoZHJpdmUtPmRuICYgMSkgPT0gMCB8fCBwYWlyID09IE5VTEwpIHsKIAkJaWRlX2FjcGlfc2V0X3N0YXRlKGh3aWYsIDEpOwogCQlpZGVfYWNwaV9wdXNoX3RpbWluZyhod2lmKTsKIAl9CkBAIC00MjIsNyArNDU1LDcgQEAKIAlycS0+Y21kX2ZsYWdzIHw9IFJFUV9QUkVFTVBUOwogCXJxLT5zcGVjaWFsID0gJmFyZ3M7CiAJcnEtPmRhdGEgPSAmcnFwbTsKLQlycXBtLnBtX3N0ZXAgPSBpZGVfcG1fc3RhdGVfc3RhcnRfcmVzdW1lOworCXJxcG0ucG1fc3RlcCA9IElERV9QTV9TVEFSVF9SRVNVTUU7CiAJcnFwbS5wbV9zdGF0ZSA9IFBNX0VWRU5UX09OOwogCiAJZXJyID0gYmxrX2V4ZWN1dGVfcnEoZHJpdmUtPnF1ZXVlLCBOVUxMLCBycSwgMSk7CkBAIC01NTQsNiArNTg3LDcgQEAKIAlfX0FUVFJfUk8obW9kZWwpLAogCV9fQVRUUl9STyhmaXJtd2FyZSksCiAJX19BVFRSKHNlcmlhbCwgMDQwMCwgc2VyaWFsX3Nob3csIE5VTEwpLAorCV9fQVRUUih1bmxvYWRfaGVhZHMsIDA2NDQsIGlkZV9wYXJrX3Nob3csIGlkZV9wYXJrX3N0b3JlKSwKIAlfX0FUVFJfTlVMTAogfTsKIApAQCAtNzA4LDIyICs3NDIsMjIgQEAKIG1vZHVsZV9wYXJhbV9jYWxsKGNocywgaWRlX3NldF9kaXNrX2NocywgTlVMTCwgTlVMTCwgMCk7CiBNT0RVTEVfUEFSTV9ERVNDKGNocywgImZvcmNlIGRldmljZSBhcyBhIGRpc2sgKHVzaW5nIENIUykiKTsKIAotc3RhdGljIHZvaWQgaWRlX2Rldl9hcHBseV9wYXJhbXMoaWRlX2RyaXZlX3QgKmRyaXZlKQorc3RhdGljIHZvaWQgaWRlX2Rldl9hcHBseV9wYXJhbXMoaWRlX2RyaXZlX3QgKmRyaXZlLCB1OCB1bml0KQogewotCWludCBpID0gZHJpdmUtPmh3aWYtPmluZGV4ICogTUFYX0RSSVZFUyArIGRyaXZlLT5zZWxlY3QuYi51bml0OworCWludCBpID0gZHJpdmUtPmh3aWYtPmluZGV4ICogTUFYX0RSSVZFUyArIHVuaXQ7CiAKIAlpZiAoaWRlX25vZG1hICYgKDEgPDwgaSkpIHsKIAkJcHJpbnRrKEtFUk5fSU5GTyAiaWRlOiBkaXNhbGxvd2luZyBETUEgZm9yICVzXG4iLCBkcml2ZS0+bmFtZSk7Ci0JCWRyaXZlLT5ub2RtYSA9IDE7CisJCWRyaXZlLT5kZXZfZmxhZ3MgfD0gSURFX0RGTEFHX05PRE1BOwogCX0KIAlpZiAoaWRlX25vZmx1c2ggJiAoMSA8PCBpKSkgewogCQlwcmludGsoS0VSTl9JTkZPICJpZGU6IGRpc2FibGluZyBmbHVzaCByZXF1ZXN0cyBmb3IgJXNcbiIsCiAJCQkJIGRyaXZlLT5uYW1lKTsKLQkJZHJpdmUtPm5vZmx1c2ggPSAxOworCQlkcml2ZS0+ZGV2X2ZsYWdzIHw9IElERV9ERkxBR19OT0ZMVVNIOwogCX0KIAlpZiAoaWRlX25vcHJvYmUgJiAoMSA8PCBpKSkgewogCQlwcmludGsoS0VSTl9JTkZPICJpZGU6IHNraXBwaW5nIHByb2JlIGZvciAlc1xuIiwgZHJpdmUtPm5hbWUpOwotCQlkcml2ZS0+bm9wcm9iZSA9IDE7CisJCWRyaXZlLT5kZXZfZmxhZ3MgfD0gSURFX0RGTEFHX05PUFJPQkU7CiAJfQogCWlmIChpZGVfbm93ZXJyICYgKDEgPDwgaSkpIHsKIAkJcHJpbnRrKEtFUk5fSU5GTyAiaWRlOiBpZ25vcmluZyB0aGUgQVRBX0RGIGJpdCBmb3IgJXNcbiIsCkBAIC03MzIsNyArNzY2LDcgQEAKIAl9CiAJaWYgKGlkZV9jZHJvbXMgJiAoMSA8PCBpKSkgewogCQlwcmludGsoS0VSTl9JTkZPICJpZGU6IGZvcmNpbmcgJXMgYXMgYSBDRC1ST01cbiIsIGRyaXZlLT5uYW1lKTsKLQkJZHJpdmUtPnByZXNlbnQgPSAxOworCQlkcml2ZS0+ZGV2X2ZsYWdzIHw9IElERV9ERkxBR19QUkVTRU5UOwogCQlkcml2ZS0+bWVkaWEgPSBpZGVfY2Ryb207CiAJCS8qIGFuIEFUQVBJIGRldmljZSBpZ25vcmVzIERSRFkgKi8KIAkJZHJpdmUtPnJlYWR5X3N0YXQgPSAwOwpAQCAtNzQxLDExICs3NzUsMTIgQEAKIAkJZHJpdmUtPmN5bCAgPSBkcml2ZS0+Ymlvc19jeWwgID0gaWRlX2Rpc2tzX2Noc1tpXS5jeWw7CiAJCWRyaXZlLT5oZWFkID0gZHJpdmUtPmJpb3NfaGVhZCA9IGlkZV9kaXNrc19jaHNbaV0uaGVhZDsKIAkJZHJpdmUtPnNlY3QgPSBkcml2ZS0+Ymlvc19zZWN0ID0gaWRlX2Rpc2tzX2Noc1tpXS5zZWN0OwotCQlkcml2ZS0+Zm9yY2VkX2dlb20gPSAxOworCiAJCXByaW50ayhLRVJOX0lORk8gImlkZTogZm9yY2luZyAlcyBhcyBhIGRpc2sgKCVkLyVkLyVkKVxuIiwKIAkJCQkgZHJpdmUtPm5hbWUsCiAJCQkJIGRyaXZlLT5jeWwsIGRyaXZlLT5oZWFkLCBkcml2ZS0+c2VjdCk7Ci0JCWRyaXZlLT5wcmVzZW50ID0gMTsKKworCQlkcml2ZS0+ZGV2X2ZsYWdzIHw9IElERV9ERkxBR19GT1JDRURfR0VPTSB8IElERV9ERkxBR19QUkVTRU5UOwogCQlkcml2ZS0+bWVkaWEgPSBpZGVfZGlzazsKIAkJZHJpdmUtPnJlYWR5X3N0YXQgPSBBVEFfRFJEWTsKIAl9CkBAIC03ODUsNyArODIwLDcgQEAKIAl9CiAKIAlmb3IgKGkgPSAwOyBpIDwgTUFYX0RSSVZFUzsgaSsrKQotCQlpZGVfZGV2X2FwcGx5X3BhcmFtcygmaHdpZi0+ZHJpdmVzW2ldKTsKKwkJaWRlX2Rldl9hcHBseV9wYXJhbXMoJmh3aWYtPmRyaXZlc1tpXSwgaSk7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9sZWdhY3kvYWxpMTR4eC5jIGIvZHJpdmVycy9pZGUvbGVnYWN5L2FsaTE0eHguYwppbmRleCA3Mjc2Yzk2Li45MGRhMWY5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9sZWdhY3kvYWxpMTR4eC5jCisrKyBiL2RyaXZlcnMvaWRlL2xlZ2FjeS9hbGkxNHh4LmMKQEAgLTEzMSw3ICsxMzEsNyBAQAogCQlkcml2ZS0+bmFtZSwgcGlvLCB0aW1lMSwgdGltZTIsIHBhcmFtMSwgcGFyYW0yLCBwYXJhbTMsIHBhcmFtNCk7CiAKIAkvKiBzdHVmZiB0aW1pbmcgcGFyYW1ldGVycyBpbnRvIGNvbnRyb2xsZXIgcmVnaXN0ZXJzICovCi0JZHJpdmVOdW0gPSAoSFdJRihkcml2ZSktPmluZGV4IDw8IDEpICsgZHJpdmUtPnNlbGVjdC5iLnVuaXQ7CisJZHJpdmVOdW0gPSAoZHJpdmUtPmh3aWYtPmluZGV4IDw8IDEpICsgKGRyaXZlLT5kbiAmIDEpOwogCXNwaW5fbG9ja19pcnFzYXZlKCZhbGkxNHh4X2xvY2ssIGZsYWdzKTsKIAlvdXRiX3AocmVnT24sIGJhc2VQb3J0KTsKIAlvdXRSZWcocGFyYW0xLCByZWdUYWJbZHJpdmVOdW1dLnJlZzEpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvbGVnYWN5L2h0NjU2MGIuYyBiL2RyaXZlcnMvaWRlL2xlZ2FjeS9odDY1NjBiLmMKaW5kZXggNTEyM2VhMi4uYzdlNWMyMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvbGVnYWN5L2h0NjU2MGIuYworKysgYi9kcml2ZXJzL2lkZS9sZWdhY3kvaHQ2NTYwYi5jCkBAIC0xMjAsNyArMTIwLDggQEAKIAkgKiBOZWVkIHRvIGVuZm9yY2UgcHJlZmV0Y2ggc29tZXRpbWVzIGJlY2F1c2Ugb3RoZXJ3aXNlCiAJICogaXQnbGwgaGFuZyAoaGFyZCkuCiAJICovCi0JaWYgKGRyaXZlLT5tZWRpYSAhPSBpZGVfZGlzayB8fCAhZHJpdmUtPnByZXNlbnQpCisJaWYgKGRyaXZlLT5tZWRpYSAhPSBpZGVfZGlzayB8fAorCSAgICAoZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19QUkVTRU5UKSA9PSAwKQogCQlzZWxlY3QgfD0gSFRfUFJFRkVUQ0hfTU9ERTsKIAogCWlmIChzZWxlY3QgIT0gY3VycmVudF9zZWxlY3QgfHwgdGltaW5nICE9IGN1cnJlbnRfdGltaW5nKSB7CkBAIC0yNDksMTEgKzI1MCwxMSBAQAogCSAqLwogCWlmIChzdGF0ZSkgewogCQlkcml2ZS0+ZHJpdmVfZGF0YSB8PSB0OyAgIC8qIGVuYWJsZSBwcmVmZXRjaCBtb2RlICovCi0JCWRyaXZlLT5ub191bm1hc2sgPSAxOwotCQlkcml2ZS0+dW5tYXNrID0gMDsKKwkJZHJpdmUtPmRldl9mbGFncyB8PSBJREVfREZMQUdfTk9fVU5NQVNLOworCQlkcml2ZS0+ZGV2X2ZsYWdzICY9IH5JREVfREZMQUdfVU5NQVNLOwogCX0gZWxzZSB7CiAJCWRyaXZlLT5kcml2ZV9kYXRhICY9IH50OyAgLyogZGlzYWJsZSBwcmVmZXRjaCBtb2RlICovCi0JCWRyaXZlLT5ub191bm1hc2sgPSAwOworCQlkcml2ZS0+ZGV2X2ZsYWdzICY9IH5JREVfREZMQUdfTk9fVU5NQVNLOwogCX0KIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmh0NjU2MGJfbG9jaywgZmxhZ3MpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvbGVnYWN5L2lkZS00ZHJpdmVzLmMgYi9kcml2ZXJzL2lkZS9sZWdhY3kvaWRlLTRkcml2ZXMuYwppbmRleCBjNzZkNTVkLi45ZTg1YjFlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9sZWdhY3kvaWRlLTRkcml2ZXMuYworKysgYi9kcml2ZXJzL2lkZS9sZWdhY3kvaWRlLTRkcml2ZXMuYwpAQCAtMTQsNyArMTQsNyBAQAogc3RhdGljIHZvaWQgaWRlXzRkcml2ZXNfaW5pdF9kZXYoaWRlX2RyaXZlX3QgKmRyaXZlKQogewogCWlmIChkcml2ZS0+aHdpZi0+Y2hhbm5lbCkKLQkJZHJpdmUtPnNlbGVjdC5hbGwgXj0gMHgyMDsKKwkJZHJpdmUtPnNlbGVjdCBePSAweDIwOwogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGlkZV9wb3J0X29wcyBpZGVfNGRyaXZlc19wb3J0X29wcyA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2xlZ2FjeS9pZGUtY3MuYyBiL2RyaXZlcnMvaWRlL2xlZ2FjeS9pZGUtY3MuYwppbmRleCBlZTZmYzMwLi5jYjE5OWM4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9sZWdhY3kvaWRlLWNzLmMKKysrIGIvZHJpdmVycy9pZGUvbGVnYWN5L2lkZS1jcy5jCkBAIC0yMTksMTAzICsyMTksOTEgQEAKICNkZWZpbmUgQ1NfQ0hFQ0soZm4sIHJldCkgXAogZG8geyBsYXN0X2ZuID0gKGZuKTsgaWYgKChsYXN0X3JldCA9IChyZXQpKSAhPSAwKSBnb3RvIGNzX2ZhaWxlZDsgfSB3aGlsZSAoMCkKIAorc3RydWN0IHBjbWNpYV9jb25maWdfY2hlY2sgeworCXVuc2lnbmVkIGxvbmcgY3RsX2Jhc2U7CisJaW50IHNraXBfdmNjOworCWludCBpc19rbWU7Cit9OworCitzdGF0aWMgaW50IHBjbWNpYV9jaGVja19vbmVfY29uZmlnKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwZGV2LAorCQkJCSAgIGNpc3RwbF9jZnRhYmxlX2VudHJ5X3QgKmNmZywKKwkJCQkgICBjaXN0cGxfY2Z0YWJsZV9lbnRyeV90ICpkZmx0LAorCQkJCSAgIHVuc2lnbmVkIGludCB2Y2MsCisJCQkJICAgdm9pZCAqcHJpdl9kYXRhKQoreworCXN0cnVjdCBwY21jaWFfY29uZmlnX2NoZWNrICpzdGsgPSBwcml2X2RhdGE7CisKKwkvKiBDaGVjayBmb3IgbWF0Y2hpbmcgVmNjLCB1bmxlc3Mgd2UncmUgZGVzcGVyYXRlICovCisJaWYgKCFzdGstPnNraXBfdmNjKSB7CisJCWlmIChjZmctPnZjYy5wcmVzZW50ICYgKDEgPDwgQ0lTVFBMX1BPV0VSX1ZOT00pKSB7CisJCQlpZiAodmNjICE9IGNmZy0+dmNjLnBhcmFtW0NJU1RQTF9QT1dFUl9WTk9NXSAvIDEwMDAwKQorCQkJCXJldHVybiAtRU5PREVWOworCQl9IGVsc2UgaWYgKGRmbHQtPnZjYy5wcmVzZW50ICYgKDEgPDwgQ0lTVFBMX1BPV0VSX1ZOT00pKSB7CisJCQlpZiAodmNjICE9IGRmbHQtPnZjYy5wYXJhbVtDSVNUUExfUE9XRVJfVk5PTV0gLyAxMDAwMCkKKwkJCQlyZXR1cm4gLUVOT0RFVjsKKwkJfQorCX0KKworCWlmIChjZmctPnZwcDEucHJlc2VudCAmICgxIDw8IENJU1RQTF9QT1dFUl9WTk9NKSkKKwkJcGRldi0+Y29uZi5WcHAgPSBjZmctPnZwcDEucGFyYW1bQ0lTVFBMX1BPV0VSX1ZOT01dIC8gMTAwMDA7CisJZWxzZSBpZiAoZGZsdC0+dnBwMS5wcmVzZW50ICYgKDEgPDwgQ0lTVFBMX1BPV0VSX1ZOT00pKQorCQlwZGV2LT5jb25mLlZwcCA9IGRmbHQtPnZwcDEucGFyYW1bQ0lTVFBMX1BPV0VSX1ZOT01dIC8gMTAwMDA7CisKKwlpZiAoKGNmZy0+aW8ubndpbiA+IDApIHx8IChkZmx0LT5pby5ud2luID4gMCkpIHsKKwkJY2lzdHBsX2lvX3QgKmlvID0gKGNmZy0+aW8ubndpbikgPyAmY2ZnLT5pbyA6ICZkZmx0LT5pbzsKKwkJcGRldi0+Y29uZi5Db25maWdJbmRleCA9IGNmZy0+aW5kZXg7CisJCXBkZXYtPmlvLkJhc2VQb3J0MSA9IGlvLT53aW5bMF0uYmFzZTsKKwkJcGRldi0+aW8uSU9BZGRyTGluZXMgPSBpby0+ZmxhZ3MgJiBDSVNUUExfSU9fTElORVNfTUFTSzsKKwkJaWYgKCEoaW8tPmZsYWdzICYgQ0lTVFBMX0lPXzE2QklUKSkKKwkJCXBkZXYtPmlvLkF0dHJpYnV0ZXMxID0gSU9fREFUQV9QQVRIX1dJRFRIXzg7CisJCWlmIChpby0+bndpbiA9PSAyKSB7CisJCQlwZGV2LT5pby5OdW1Qb3J0czEgPSA4OworCQkJcGRldi0+aW8uQmFzZVBvcnQyID0gaW8tPndpblsxXS5iYXNlOworCQkJcGRldi0+aW8uTnVtUG9ydHMyID0gKHN0ay0+aXNfa21lKSA/IDIgOiAxOworCQkJaWYgKHBjbWNpYV9yZXF1ZXN0X2lvKHBkZXYsICZwZGV2LT5pbykgIT0gMCkKKwkJCQlyZXR1cm4gLUVOT0RFVjsKKwkJCXN0ay0+Y3RsX2Jhc2UgPSBwZGV2LT5pby5CYXNlUG9ydDI7CisJCX0gZWxzZSBpZiAoKGlvLT5ud2luID09IDEpICYmIChpby0+d2luWzBdLmxlbiA+PSAxNikpIHsKKwkJCXBkZXYtPmlvLk51bVBvcnRzMSA9IGlvLT53aW5bMF0ubGVuOworCQkJcGRldi0+aW8uTnVtUG9ydHMyID0gMDsKKwkJCWlmIChwY21jaWFfcmVxdWVzdF9pbyhwZGV2LCAmcGRldi0+aW8pICE9IDApCisJCQkJcmV0dXJuIC1FTk9ERVY7CisJCQlzdGstPmN0bF9iYXNlID0gcGRldi0+aW8uQmFzZVBvcnQxICsgMHgwZTsKKwkJfSBlbHNlCisJCQlyZXR1cm4gLUVOT0RFVjsKKwkJLyogSWYgd2UndmUgZ290IHRoaXMgZmFyLCB3ZSdyZSBkb25lICovCisJCXJldHVybiAwOworCX0KKwlyZXR1cm4gLUVOT0RFVjsKK30KKwogc3RhdGljIGludCBpZGVfY29uZmlnKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQogewogICAgIGlkZV9pbmZvX3QgKmluZm8gPSBsaW5rLT5wcml2OwotICAgIHR1cGxlX3QgdHVwbGU7Ci0gICAgc3RydWN0IHsKLQl1X3Nob3J0CQlidWZbMTI4XTsKLQljaXNwYXJzZV90CXBhcnNlOwotCWNvbmZpZ19pbmZvX3QJY29uZjsKLQljaXN0cGxfY2Z0YWJsZV9lbnRyeV90IGRmbHQ7Ci0gICAgfSAqc3RrID0gTlVMTDsKLSAgICBjaXN0cGxfY2Z0YWJsZV9lbnRyeV90ICpjZmc7Ci0gICAgaW50IHBhc3MsIGxhc3RfcmV0ID0gMCwgbGFzdF9mbiA9IDAsIGlzX2ttZSA9IDA7CisgICAgc3RydWN0IHBjbWNpYV9jb25maWdfY2hlY2sgKnN0ayA9IE5VTEw7CisgICAgaW50IGxhc3RfcmV0ID0gMCwgbGFzdF9mbiA9IDAsIGlzX2ttZSA9IDA7CiAgICAgdW5zaWduZWQgbG9uZyBpb19iYXNlLCBjdGxfYmFzZTsKICAgICBzdHJ1Y3QgaWRlX2hvc3QgKmhvc3Q7CiAKICAgICBERUJVRygwLCAiaWRlX2NvbmZpZygweCVwKVxuIiwgbGluayk7CiAKLSAgICBzdGsgPSBremFsbG9jKHNpemVvZigqc3RrKSwgR0ZQX0tFUk5FTCk7Ci0gICAgaWYgKCFzdGspIGdvdG8gZXJyX21lbTsKLSAgICBjZmcgPSAmc3RrLT5wYXJzZS5jZnRhYmxlX2VudHJ5OwotCi0gICAgdHVwbGUuVHVwbGVEYXRhID0gKGNpc2RhdGFfdCAqKSZzdGstPmJ1ZjsKLSAgICB0dXBsZS5UdXBsZU9mZnNldCA9IDA7Ci0gICAgdHVwbGUuVHVwbGVEYXRhTWF4ID0gMjU1OwotICAgIHR1cGxlLkF0dHJpYnV0ZXMgPSAwOwotCiAgICAgaXNfa21lID0gKChsaW5rLT5tYW5mX2lkID09IE1BTkZJRF9LTUUpICYmCiAJICAgICAgKChsaW5rLT5jYXJkX2lkID09IFBST0RJRF9LTUVfS1hMQzAwNV9BKSB8fAogCSAgICAgICAobGluay0+Y2FyZF9pZCA9PSBQUk9ESURfS01FX0tYTEMwMDVfQikpKTsKIAotICAgIC8qIE5vdCBzdXJlIGlmIHRoaXMgaXMgcmlnaHQuLi4gbG9vayB1cCB0aGUgY3VycmVudCBWY2MgKi8KLSAgICBDU19DSEVDSyhHZXRDb25maWd1cmF0aW9uSW5mbywgcGNtY2lhX2dldF9jb25maWd1cmF0aW9uX2luZm8obGluaywgJnN0ay0+Y29uZikpOworICAgIHN0ayA9IGt6YWxsb2Moc2l6ZW9mKCpzdGspLCBHRlBfS0VSTkVMKTsKKyAgICBpZiAoIXN0aykKKwkgICAgZ290byBlcnJfbWVtOworICAgIHN0ay0+aXNfa21lID0gaXNfa21lOworICAgIHN0ay0+c2tpcF92Y2MgPSBpb19iYXNlID0gY3RsX2Jhc2UgPSAwOwogCi0gICAgcGFzcyA9IGlvX2Jhc2UgPSBjdGxfYmFzZSA9IDA7Ci0gICAgdHVwbGUuRGVzaXJlZFR1cGxlID0gQ0lTVFBMX0NGVEFCTEVfRU5UUlk7Ci0gICAgdHVwbGUuQXR0cmlidXRlcyA9IDA7Ci0gICAgQ1NfQ0hFQ0soR2V0Rmlyc3RUdXBsZSwgcGNtY2lhX2dldF9maXJzdF90dXBsZShsaW5rLCAmdHVwbGUpKTsKLSAgICB3aGlsZSAoMSkgewotICAgIAlpZiAocGNtY2lhX2dldF90dXBsZV9kYXRhKGxpbmssICZ0dXBsZSkgIT0gMCkgZ290byBuZXh0X2VudHJ5OwotCWlmIChwY21jaWFfcGFyc2VfdHVwbGUobGluaywgJnR1cGxlLCAmc3RrLT5wYXJzZSkgIT0gMCkgZ290byBuZXh0X2VudHJ5OwotCi0JLyogQ2hlY2sgZm9yIG1hdGNoaW5nIFZjYywgdW5sZXNzIHdlJ3JlIGRlc3BlcmF0ZSAqLwotCWlmICghcGFzcykgewotCSAgICBpZiAoY2ZnLT52Y2MucHJlc2VudCAmICgxIDw8IENJU1RQTF9QT1dFUl9WTk9NKSkgewotCQlpZiAoc3RrLT5jb25mLlZjYyAhPSBjZmctPnZjYy5wYXJhbVtDSVNUUExfUE9XRVJfVk5PTV0gLyAxMDAwMCkKLQkJICAgIGdvdG8gbmV4dF9lbnRyeTsKLQkgICAgfSBlbHNlIGlmIChzdGstPmRmbHQudmNjLnByZXNlbnQgJiAoMSA8PCBDSVNUUExfUE9XRVJfVk5PTSkpIHsKLQkJaWYgKHN0ay0+Y29uZi5WY2MgIT0gc3RrLT5kZmx0LnZjYy5wYXJhbVtDSVNUUExfUE9XRVJfVk5PTV0gLyAxMDAwMCkKLQkJICAgIGdvdG8gbmV4dF9lbnRyeTsKLQkgICAgfQotCX0KLQotCWlmIChjZmctPnZwcDEucHJlc2VudCAmICgxIDw8IENJU1RQTF9QT1dFUl9WTk9NKSkKLQkgICAgbGluay0+Y29uZi5WcHAgPQotCQljZmctPnZwcDEucGFyYW1bQ0lTVFBMX1BPV0VSX1ZOT01dIC8gMTAwMDA7Ci0JZWxzZSBpZiAoc3RrLT5kZmx0LnZwcDEucHJlc2VudCAmICgxIDw8IENJU1RQTF9QT1dFUl9WTk9NKSkKLQkgICAgbGluay0+Y29uZi5WcHAgPQotCQlzdGstPmRmbHQudnBwMS5wYXJhbVtDSVNUUExfUE9XRVJfVk5PTV0gLyAxMDAwMDsKLQotCWlmICgoY2ZnLT5pby5ud2luID4gMCkgfHwgKHN0ay0+ZGZsdC5pby5ud2luID4gMCkpIHsKLQkgICAgY2lzdHBsX2lvX3QgKmlvID0gKGNmZy0+aW8ubndpbikgPyAmY2ZnLT5pbyA6ICZzdGstPmRmbHQuaW87Ci0JICAgIGxpbmstPmNvbmYuQ29uZmlnSW5kZXggPSBjZmctPmluZGV4OwotCSAgICBsaW5rLT5pby5CYXNlUG9ydDEgPSBpby0+d2luWzBdLmJhc2U7Ci0JICAgIGxpbmstPmlvLklPQWRkckxpbmVzID0gaW8tPmZsYWdzICYgQ0lTVFBMX0lPX0xJTkVTX01BU0s7Ci0JICAgIGlmICghKGlvLT5mbGFncyAmIENJU1RQTF9JT18xNkJJVCkpCi0JCWxpbmstPmlvLkF0dHJpYnV0ZXMxID0gSU9fREFUQV9QQVRIX1dJRFRIXzg7Ci0JICAgIGlmIChpby0+bndpbiA9PSAyKSB7Ci0JCWxpbmstPmlvLk51bVBvcnRzMSA9IDg7Ci0JCWxpbmstPmlvLkJhc2VQb3J0MiA9IGlvLT53aW5bMV0uYmFzZTsKLQkJbGluay0+aW8uTnVtUG9ydHMyID0gKGlzX2ttZSkgPyAyIDogMTsKLQkJaWYgKHBjbWNpYV9yZXF1ZXN0X2lvKGxpbmssICZsaW5rLT5pbykgIT0gMCkKLQkJCWdvdG8gbmV4dF9lbnRyeTsKLQkJaW9fYmFzZSA9IGxpbmstPmlvLkJhc2VQb3J0MTsKLQkJY3RsX2Jhc2UgPSBsaW5rLT5pby5CYXNlUG9ydDI7Ci0JICAgIH0gZWxzZSBpZiAoKGlvLT5ud2luID09IDEpICYmIChpby0+d2luWzBdLmxlbiA+PSAxNikpIHsKLQkJbGluay0+aW8uTnVtUG9ydHMxID0gaW8tPndpblswXS5sZW47Ci0JCWxpbmstPmlvLk51bVBvcnRzMiA9IDA7Ci0JCWlmIChwY21jaWFfcmVxdWVzdF9pbyhsaW5rLCAmbGluay0+aW8pICE9IDApCi0JCQlnb3RvIG5leHRfZW50cnk7Ci0JCWlvX2Jhc2UgPSBsaW5rLT5pby5CYXNlUG9ydDE7Ci0JCWN0bF9iYXNlID0gbGluay0+aW8uQmFzZVBvcnQxICsgMHgwZTsKLQkgICAgfSBlbHNlIGdvdG8gbmV4dF9lbnRyeTsKLQkgICAgLyogSWYgd2UndmUgZ290IHRoaXMgZmFyLCB3ZSdyZSBkb25lICovCi0JICAgIGJyZWFrOwotCX0KLQotICAgIG5leHRfZW50cnk6Ci0JaWYgKGNmZy0+ZmxhZ3MgJiBDSVNUUExfQ0ZUQUJMRV9ERUZBVUxUKQotCSAgICBtZW1jcHkoJnN0ay0+ZGZsdCwgY2ZnLCBzaXplb2Yoc3RrLT5kZmx0KSk7Ci0JaWYgKHBhc3MpIHsKLQkgICAgQ1NfQ0hFQ0soR2V0TmV4dFR1cGxlLCBwY21jaWFfZ2V0X25leHRfdHVwbGUobGluaywgJnR1cGxlKSk7Ci0JfSBlbHNlIGlmIChwY21jaWFfZ2V0X25leHRfdHVwbGUobGluaywgJnR1cGxlKSAhPSAwKSB7Ci0JICAgIENTX0NIRUNLKEdldEZpcnN0VHVwbGUsIHBjbWNpYV9nZXRfZmlyc3RfdHVwbGUobGluaywgJnR1cGxlKSk7Ci0JICAgIG1lbXNldCgmc3RrLT5kZmx0LCAwLCBzaXplb2Yoc3RrLT5kZmx0KSk7Ci0JICAgIHBhc3MrKzsKLQl9CisgICAgaWYgKHBjbWNpYV9sb29wX2NvbmZpZyhsaW5rLCBwY21jaWFfY2hlY2tfb25lX2NvbmZpZywgc3RrKSkgeworCSAgICBzdGstPnNraXBfdmNjID0gMTsKKwkgICAgaWYgKHBjbWNpYV9sb29wX2NvbmZpZyhsaW5rLCBwY21jaWFfY2hlY2tfb25lX2NvbmZpZywgc3RrKSkKKwkJICAgIGdvdG8gZmFpbGVkOyAvKiBObyBzdWl0YWJsZSBjb25maWcgZm91bmQgKi8KICAgICB9CisgICAgaW9fYmFzZSA9IGxpbmstPmlvLkJhc2VQb3J0MTsKKyAgICBjdGxfYmFzZSA9IHN0ay0+Y3RsX2Jhc2U7CiAKICAgICBDU19DSEVDSyhSZXF1ZXN0SVJRLCBwY21jaWFfcmVxdWVzdF9pcnEobGluaywgJmxpbmstPmlycSkpOwogICAgIENTX0NIRUNLKFJlcXVlc3RDb25maWd1cmF0aW9uLCBwY21jaWFfcmVxdWVzdF9jb25maWd1cmF0aW9uKGxpbmssICZsaW5rLT5jb25mKSk7CkBAIC00MDMsOCArMzkxLDEwIEBACiAJUENNQ0lBX0RFVklDRV9NQU5GX0NBUkQoMHgwMDBhLCAweDAwMDApLAkvKiBJLU8gRGF0YSBDRkEgKi8KIAlQQ01DSUFfREVWSUNFX01BTkZfQ0FSRCgweDAwMWMsIDB4MDAwMSksCS8qIE1pdHN1YmlzaGkgQ0ZBICovCiAJUENNQ0lBX0RFVklDRV9NQU5GX0NBUkQoMHgwMDMyLCAweDA3MDQpLAorCVBDTUNJQV9ERVZJQ0VfTUFORl9DQVJEKDB4MDAzMiwgMHgyOTA0KSwKIAlQQ01DSUFfREVWSUNFX01BTkZfQ0FSRCgweDAwNDUsIDB4MDQwMSksCS8qIFNhbkRpc2sgQ0ZBICovCiAJUENNQ0lBX0RFVklDRV9NQU5GX0NBUkQoMHgwMDRmLCAweDAwMDApLAkvKiBLaW5nc3RvbiAqLworCVBDTUNJQV9ERVZJQ0VfTUFORl9DQVJEKDB4MDA5NywgMHgxNjIwKSwgCS8qIFRJIGVtdWxhdGVkICovCiAJUENNQ0lBX0RFVklDRV9NQU5GX0NBUkQoMHgwMDk4LCAweDAwMDApLAkvKiBUb3NoaWJhICovCiAJUENNQ0lBX0RFVklDRV9NQU5GX0NBUkQoMHgwMGE0LCAweDAwMmQpLAogCVBDTUNJQV9ERVZJQ0VfTUFORl9DQVJEKDB4MDBjZSwgMHgwMDAwKSwJLyogU2Ftc3VuZyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvbGVnYWN5L3FkNjV4eC5jIGIvZHJpdmVycy9pZGUvbGVnYWN5L3FkNjV4eC5jCmluZGV4IGVjNDA4YjMuLmJjMjdjN2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2xlZ2FjeS9xZDY1eHguYworKysgYi9kcml2ZXJzL2lkZS9sZWdhY3kvcWQ2NXh4LmMKQEAgLTMwNSw3ICszMDUsNyBAQAogCX0gZWxzZQogCQl0MiA9IHQxID0gaHdpZi0+Y2hhbm5lbCA/IFFENjU4MF9ERUZfREFUQTIgOiBRRDY1ODBfREVGX0RBVEE7CiAKLQlkcml2ZS0+ZHJpdmVfZGF0YSA9IGRyaXZlLT5zZWxlY3QuYi51bml0ID8gdDIgOiB0MTsKKwlkcml2ZS0+ZHJpdmVfZGF0YSA9IChkcml2ZS0+ZG4gJiAxKSA/IHQyIDogdDE7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaWRlX3BvcnRfb3BzIHFkNjUwMF9wb3J0X29wcyA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL21pcHMvYXUxeHh4LWlkZS5jIGIvZHJpdmVycy9pZGUvbWlwcy9hdTF4eHgtaWRlLmMKaW5kZXggMTFiN2Y2MS4uMGVjOGZkMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvbWlwcy9hdTF4eHgtaWRlLmMKKysrIGIvZHJpdmVycy9pZGUvbWlwcy9hdTF4eHgtaWRlLmMKQEAgLTMyMiwxMSArMzIyLDcgQEAKIH0KIAogc3RhdGljIGludCBhdWlkZV9kbWFfdGVzdF9pcnEoaWRlX2RyaXZlX3QgKmRyaXZlKQotewkKLQlpZiAoZHJpdmUtPndhaXRpbmdfZm9yX2RtYSA9PSAwKQotCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogaWRlX2RtYV90ZXN0X2lycSBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGVkIHdoaWxlIG5vdCB3YWl0aW5nXG4iLCBkcml2ZS0+bmFtZSk7Ci0KK3sKIAkvKiBJZiBkYmRtYSBkaWRuJ3QgZXhlY3V0ZSB0aGUgU1RPUCBjb21tYW5kIHlldCwgdGhlCiAJICogYWN0aXZlIGJpdCBpcyBzdGlsbCBzZXQKIAkgKi8KQEAgLTM0NCwxMSArMzQwLDYgQEAKIHsKIH0KIAotc3RhdGljIHZvaWQgYXVpZGVfZG1hX2xvc3RfaXJxKGlkZV9kcml2ZV90ICpkcml2ZSkKLXsKLQlwcmludGsoS0VSTl9FUlIgIiVzOiBJUlEgbG9zdFxuIiwgZHJpdmUtPm5hbWUpOwotfQotCiBzdGF0aWMgdm9pZCBhdWlkZV9kZG1hX3R4X2NhbGxiYWNrKGludCBpcnEsIHZvaWQgKnBhcmFtKQogewogCV9hdWlkZV9od2lmICphaHdpZiA9IChfYXVpZGVfaHdpZiopcGFyYW07CkBAIC0zNzUsMTggKzM2Niw2IEBACiB9CiAKICNpZmRlZiBDT05GSUdfQkxLX0RFVl9JREVfQVUxWFhYX01ETUEyX0RCRE1BCi1zdGF0aWMgdm9pZCBhdWlkZV9kbWFfdGltZW91dChpZGVfZHJpdmVfdCAqZHJpdmUpCi17Ci0JaWRlX2h3aWZfdCAqaHdpZiA9IEhXSUYoZHJpdmUpOwotCi0JcHJpbnRrKEtFUk5fRVJSICIlczogRE1BIHRpbWVvdXQgb2NjdXJyZWQ6ICIsIGRyaXZlLT5uYW1lKTsKLQotCWlmIChhdWlkZV9kbWFfdGVzdF9pcnEoZHJpdmUpKQotCQlyZXR1cm47Ci0KLQlhdWlkZV9kbWFfZW5kKGRyaXZlKTsKLX0KLQogc3RhdGljIGNvbnN0IHN0cnVjdCBpZGVfZG1hX29wcyBhdTF4eHhfZG1hX29wcyA9IHsKIAkuZG1hX2hvc3Rfc2V0CQk9IGF1aWRlX2RtYV9ob3N0X3NldCwKIAkuZG1hX3NldHVwCQk9IGF1aWRlX2RtYV9zZXR1cCwKQEAgLTM5NCw4ICszNzMsOCBAQAogCS5kbWFfc3RhcnQJCT0gYXVpZGVfZG1hX3N0YXJ0LAogCS5kbWFfZW5kCQk9IGF1aWRlX2RtYV9lbmQsCiAJLmRtYV90ZXN0X2lycQkJPSBhdWlkZV9kbWFfdGVzdF9pcnEsCi0JLmRtYV9sb3N0X2lycQkJPSBhdWlkZV9kbWFfbG9zdF9pcnEsCi0JLmRtYV90aW1lb3V0CQk9IGF1aWRlX2RtYV90aW1lb3V0LAorCS5kbWFfbG9zdF9pcnEJCT0gaWRlX2RtYV9sb3N0X2lycSwKKwkuZG1hX3RpbWVvdXQJCT0gaWRlX2RtYV90aW1lb3V0LAogfTsKIAogc3RhdGljIGludCBhdWlkZV9kZG1hX2luaXQoaWRlX2h3aWZfdCAqaHdpZiwgY29uc3Qgc3RydWN0IGlkZV9wb3J0X2luZm8gKmQpCkBAIC00NDgsMTAgKzQyNyw5IEBACiAJCQkJCQkJICAgICBOVU1fREVTQ1JJUFRPUlMpOwogCWF1aWRlLT5yeF9kZXNjX2hlYWQgPSAodm9pZCopYXUxeHh4X2RiZG1hX3JpbmdfYWxsb2MoYXVpZGUtPnJ4X2NoYW4sCiAJCQkJCQkJICAgICBOVU1fREVTQ1JJUFRPUlMpOwotIAotCWh3aWYtPmRtYXRhYmxlX2NwdSA9IGRtYV9hbGxvY19jb2hlcmVudChod2lmLT5kZXYsCi0JCQkJCQlQUkRfRU5UUklFUyAqIFBSRF9CWVRFUywgICAgICAgIC8qIDEgUGFnZSAqLwotCQkJCQkJJmh3aWYtPmRtYXRhYmxlX2RtYSwgR0ZQX0tFUk5FTCk7CisKKwkvKiBGSVhNRTogY2hlY2sgcmV0dXJuIHZhbHVlICovCisJKHZvaWQpaWRlX2FsbG9jYXRlX2RtYV9lbmdpbmUoaHdpZik7CiAJCiAJYXUxeHh4X2RiZG1hX3N0YXJ0KCBhdWlkZS0+dHhfY2hhbiApOwogCWF1MXh4eF9kYmRtYV9zdGFydCggYXVpZGUtPnJ4X2NoYW4gKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL3BjaS9NYWtlZmlsZSBiL2RyaXZlcnMvaWRlL3BjaS9NYWtlZmlsZQppbmRleCAwMmU2ZWU3Li5hYjQ0YTFmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9wY2kvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9pZGUvcGNpL01ha2VmaWxlCkBAIC0xMSw3ICsxMSw2IEBACiBvYmotJChDT05GSUdfQkxLX0RFVl9TQzEyMDApCQkrPSBzYzEyMDAubwogb2JqLSQoQ09ORklHX0JMS19ERVZfQ1k4MkM2OTMpCQkrPSBjeTgyYzY5My5vCiBvYmotJChDT05GSUdfQkxLX0RFVl9ERUxLSU4pCQkrPSBkZWxraW5fY2Iubwotb2JqLSQoQ09ORklHX0JMS19ERVZfSFBUMzRYKQkJKz0gaHB0MzR4Lm8KIG9iai0kKENPTkZJR19CTEtfREVWX0hQVDM2NikJCSs9IGhwdDM2Ni5vCiBvYmotJChDT05GSUdfQkxLX0RFVl9JVDgyMTMpCQkrPSBpdDgyMTMubwogb2JqLSQoQ09ORklHX0JMS19ERVZfSVQ4MjFYKQkJKz0gaXQ4MjF4Lm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL3BjaS9hZWM2Mnh4LmMgYi9kcml2ZXJzL2lkZS9wY2kvYWVjNjJ4eC5jCmluZGV4IGU3NDc1YmEuLjQxNDJjNjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL3BjaS9hZWM2Mnh4LmMKKysrIGIvZHJpdmVycy9pZGUvcGNpL2FlYzYyeHguYwpAQCAtMTE1LDcgKzExNSw3IEBACiAJc3RydWN0IHBjaV9kZXYgKmRldgk9IHRvX3BjaV9kZXYoaHdpZi0+ZGV2KTsKIAlzdHJ1Y3QgaWRlX2hvc3QgKmhvc3QJPSBwY2lfZ2V0X2RydmRhdGEoZGV2KTsKIAlzdHJ1Y3QgY2hpcHNldF9idXNfY2xvY2tfbGlzdF9lbnRyeSAqYnVzX2Nsb2NrID0gaG9zdC0+aG9zdF9wcml2OwotCXU4IHVuaXQJCT0gKGRyaXZlLT5zZWxlY3QuYi51bml0ICYgMHgwMSk7CisJdTggdW5pdAkJCT0gZHJpdmUtPmRuICYgMTsKIAl1OCB0bXAxID0gMCwgdG1wMiA9IDA7CiAJdTggdWx0cmEgPSAwLCBkcml2ZV9jb25mID0gMCwgdWx0cmFfY29uZiA9IDA7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKQEAgLTMwMiw3ICszMDIsNyBAQAogfTsKIE1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBhZWM2Mnh4X3BjaV90YmwpOwogCi1zdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgZHJpdmVyID0geworc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGFlYzYyeHhfcGNpX2RyaXZlciA9IHsKIAkubmFtZQkJPSAiQUVDNjJ4eF9JREUiLAogCS5pZF90YWJsZQk9IGFlYzYyeHhfcGNpX3RibCwKIAkucHJvYmUJCT0gYWVjNjJ4eF9pbml0X29uZSwKQEAgLTMxMywxMiArMzEzLDEyIEBACiAKIHN0YXRpYyBpbnQgX19pbml0IGFlYzYyeHhfaWRlX2luaXQodm9pZCkKIHsKLQlyZXR1cm4gaWRlX3BjaV9yZWdpc3Rlcl9kcml2ZXIoJmRyaXZlcik7CisJcmV0dXJuIGlkZV9wY2lfcmVnaXN0ZXJfZHJpdmVyKCZhZWM2Mnh4X3BjaV9kcml2ZXIpOwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgYWVjNjJ4eF9pZGVfZXhpdCh2b2lkKQogewotCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmZHJpdmVyKTsKKwlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJmFlYzYyeHhfcGNpX2RyaXZlcik7CiB9CiAKIG1vZHVsZV9pbml0KGFlYzYyeHhfaWRlX2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvcGNpL2FsaW0xNXgzLmMgYi9kcml2ZXJzL2lkZS9wY2kvYWxpbTE1eDMuYwppbmRleCAwNTNjNzUyLi5kYWY5ZGNlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9wY2kvYWxpbTE1eDMuYworKysgYi9kcml2ZXJzL2lkZS9wY2kvYWxpbTE1eDMuYwpAQCAtNzcsOCArNzcsNyBAQAogCWludCBidXNfc3BlZWQgPSBpZGVfcGNpX2NsayA/IGlkZV9wY2lfY2xrIDogMzM7CiAJaW50IHBvcnQgPSBod2lmLT5jaGFubmVsID8gMHg1YyA6IDB4NTg7CiAJaW50IHBvcnRGSUZPID0gaHdpZi0+Y2hhbm5lbCA/IDB4NTUgOiAweDU0OwotCXU4IGNkX2RtYV9maWZvID0gMDsKLQlpbnQgdW5pdCA9IGRyaXZlLT5zZWxlY3QuYi51bml0ICYgMTsKKwl1OCBjZF9kbWFfZmlmbyA9IDAsIHVuaXQgPSBkcml2ZS0+ZG4gJiAxOwogCiAJaWYgKChzX2NsYyA9IChzX3RpbWUgKiBidXNfc3BlZWQgKyA5OTkpIC8gMTAwMCkgPj0gOCkKIAkJc19jbGMgPSAwOwpAQCAtMTEyLDcgKzExMSw3IEBACiAJfQogCQogCXBjaV93cml0ZV9jb25maWdfYnl0ZShkZXYsIHBvcnQsIHNfY2xjKTsKLQlwY2lfd3JpdGVfY29uZmlnX2J5dGUoZGV2LCBwb3J0K2RyaXZlLT5zZWxlY3QuYi51bml0KzIsIChhX2NsYyA8PCA0KSB8IHJfY2xjKTsKKwlwY2lfd3JpdGVfY29uZmlnX2J5dGUoZGV2LCBwb3J0ICsgdW5pdCArIDIsIChhX2NsYyA8PCA0KSB8IHJfY2xjKTsKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiB9CiAKQEAgLTE1NCw3ICsxNTMsNyBAQAogCWlkZV9od2lmX3QgKmh3aWYJPSBIV0lGKGRyaXZlKTsKIAlzdHJ1Y3QgcGNpX2RldiAqZGV2CT0gdG9fcGNpX2Rldihod2lmLT5kZXYpOwogCXU4IHNwZWVkMQkJPSBzcGVlZDsKLQl1OCB1bml0CQkJPSAoZHJpdmUtPnNlbGVjdC5iLnVuaXQgJiAweDAxKTsKKwl1OCB1bml0CQkJPSBkcml2ZS0+ZG4gJiAxOwogCXU4IHRtcGJ5dGUJCT0gMHgwMDsKIAlpbnQgbTUyMjlfdWRtYQkJPSAoaHdpZi0+Y2hhbm5lbCkgPyAweDU3IDogMHg1NjsKIApAQCAtNTA4LDcgKzUwNyw3IEBACiAJLmRtYV9zZXR1cAkJPSBhbGkxNXgzX2RtYV9zZXR1cCwKIAkuZG1hX2V4ZWNfY21kCQk9IGlkZV9kbWFfZXhlY19jbWQsCiAJLmRtYV9zdGFydAkJPSBpZGVfZG1hX3N0YXJ0LAotCS5kbWFfZW5kCQk9IF9faWRlX2RtYV9lbmQsCisJLmRtYV9lbmQJCT0gaWRlX2RtYV9lbmQsCiAJLmRtYV90ZXN0X2lycQkJPSBpZGVfZG1hX3Rlc3RfaXJxLAogCS5kbWFfbG9zdF9pcnEJCT0gaWRlX2RtYV9sb3N0X2lycSwKIAkuZG1hX3RpbWVvdXQJCT0gaWRlX2RtYV90aW1lb3V0LApAQCAtNTc2LDcgKzU3NSw3IEBACiB9OwogTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIGFsaW0xNXgzX3BjaV90YmwpOwogCi1zdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgZHJpdmVyID0geworc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGFsaW0xNXgzX3BjaV9kcml2ZXIgPSB7CiAJLm5hbWUJCT0gIkFMSTE1eDNfSURFIiwKIAkuaWRfdGFibGUJPSBhbGltMTV4M19wY2lfdGJsLAogCS5wcm9iZQkJPSBhbGltMTV4M19pbml0X29uZSwKQEAgLTU4NywxMiArNTg2LDEyIEBACiAKIHN0YXRpYyBpbnQgX19pbml0IGFsaTE1eDNfaWRlX2luaXQodm9pZCkKIHsKLQlyZXR1cm4gaWRlX3BjaV9yZWdpc3Rlcl9kcml2ZXIoJmRyaXZlcik7CisJcmV0dXJuIGlkZV9wY2lfcmVnaXN0ZXJfZHJpdmVyKCZhbGltMTV4M19wY2lfZHJpdmVyKTsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IGFsaTE1eDNfaWRlX2V4aXQodm9pZCkKIHsKLQlyZXR1cm4gcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZkcml2ZXIpOworCXJldHVybiBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJmFsaW0xNXgzX3BjaV9kcml2ZXIpOwogfQogCiBtb2R1bGVfaW5pdChhbGkxNXgzX2lkZV9pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL3BjaS9hbWQ3NHh4LmMgYi9kcml2ZXJzL2lkZS9wY2kvYW1kNzR4eC5jCmluZGV4IDgyNDQ3MWYuLjgxZWM3MzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL3BjaS9hbWQ3NHh4LmMKKysrIGIvZHJpdmVycy9pZGUvcGNpL2FtZDc0eHguYwpAQCAtOTIsNyArOTIsNyBAQAogCiAJaWRlX3RpbWluZ19jb21wdXRlKGRyaXZlLCBzcGVlZCwgJnQsIFQsIFVUKTsKIAotCWlmIChwZWVyLT5wcmVzZW50KSB7CisJaWYgKHBlZXItPmRldl9mbGFncyAmIElERV9ERkxBR19QUkVTRU5UKSB7CiAJCWlkZV90aW1pbmdfY29tcHV0ZShwZWVyLCBwZWVyLT5jdXJyZW50X3NwZWVkLCAmcCwgVCwgVVQpOwogCQlpZGVfdGltaW5nX21lcmdlKCZwLCAmdCwgJnQsIElERV9USU1JTkdfOEJJVCk7CiAJfQpAQCAtMzE5LDcgKzMxOSw3IEBACiB9OwogTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIGFtZDc0eHhfcGNpX3RibCk7CiAKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBkcml2ZXIgPSB7CitzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgYW1kNzR4eF9wY2lfZHJpdmVyID0gewogCS5uYW1lCQk9ICJBTURfSURFIiwKIAkuaWRfdGFibGUJPSBhbWQ3NHh4X3BjaV90YmwsCiAJLnByb2JlCQk9IGFtZDc0eHhfcHJvYmUsCkBAIC0zMzAsMTIgKzMzMCwxMiBAQAogCiBzdGF0aWMgaW50IF9faW5pdCBhbWQ3NHh4X2lkZV9pbml0KHZvaWQpCiB7Ci0JcmV0dXJuIGlkZV9wY2lfcmVnaXN0ZXJfZHJpdmVyKCZkcml2ZXIpOworCXJldHVybiBpZGVfcGNpX3JlZ2lzdGVyX2RyaXZlcigmYW1kNzR4eF9wY2lfZHJpdmVyKTsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IGFtZDc0eHhfaWRlX2V4aXQodm9pZCkKIHsKLQlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJmRyaXZlcik7CisJcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZhbWQ3NHh4X3BjaV9kcml2ZXIpOwogfQogCiBtb2R1bGVfaW5pdChhbWQ3NHh4X2lkZV9pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL3BjaS9hdGlpeHAuYyBiL2RyaXZlcnMvaWRlL3BjaS9hdGlpeHAuYwppbmRleCBlNDQzNzAzLi5iMjczNWQyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9wY2kvYXRpaXhwLmMKKysrIGIvZHJpdmVycy9pZGUvcGNpL2F0aWl4cC5jCkBAIC0xODIsNyArMTgyLDcgQEAKIH07CiBNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgYXRpaXhwX3BjaV90YmwpOwogCi1zdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgZHJpdmVyID0geworc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGF0aWl4cF9wY2lfZHJpdmVyID0gewogCS5uYW1lCQk9ICJBVElJWFBfSURFIiwKIAkuaWRfdGFibGUJPSBhdGlpeHBfcGNpX3RibCwKIAkucHJvYmUJCT0gYXRpaXhwX2luaXRfb25lLApAQCAtMTkzLDEyICsxOTMsMTIgQEAKIAogc3RhdGljIGludCBfX2luaXQgYXRpaXhwX2lkZV9pbml0KHZvaWQpCiB7Ci0JcmV0dXJuIGlkZV9wY2lfcmVnaXN0ZXJfZHJpdmVyKCZkcml2ZXIpOworCXJldHVybiBpZGVfcGNpX3JlZ2lzdGVyX2RyaXZlcigmYXRpaXhwX3BjaV9kcml2ZXIpOwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgYXRpaXhwX2lkZV9leGl0KHZvaWQpCiB7Ci0JcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZkcml2ZXIpOworCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmYXRpaXhwX3BjaV9kcml2ZXIpOwogfQogCiBtb2R1bGVfaW5pdChhdGlpeHBfaWRlX2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvcGNpL2NtZDY0MC5jIGIvZHJpdmVycy9pZGUvcGNpL2NtZDY0MC5jCmluZGV4IDdmMzljZGIuLmU0MzA2NjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL3BjaS9jbWQ2NDAuYworKysgYi9kcml2ZXJzL2lkZS9wY2kvY21kNjQwLmMKQEAgLTM3OCwxMyArMzc4LDEzIEBACiB7CiAJaWYgKG1vZGUpIHsJLyogd2FudCBwcmVmZXRjaCBvbj8gKi8KICNpZiBDTUQ2NDBfUFJFRkVUQ0hfTUFTS1MKLQkJZHJpdmUtPm5vX3VubWFzayA9IDE7Ci0JCWRyaXZlLT51bm1hc2sgPSAwOworCQlkcml2ZS0+ZGV2X2ZsYWdzIHw9IElERV9ERkxBR19OT19VTk1BU0s7CisJCWRyaXZlLT5kZXZfZmxhZ3MgJj0gfklERV9ERkxBR19VTk1BU0s7CiAjZW5kaWYKLQkJZHJpdmUtPm5vX2lvXzMyYml0ID0gMDsKKwkJZHJpdmUtPmRldl9mbGFncyAmPSB+SURFX0RGTEFHX05PX0lPXzMyQklUOwogCX0gZWxzZSB7Ci0JCWRyaXZlLT5ub191bm1hc2sgPSAwOwotCQlkcml2ZS0+bm9faW9fMzJiaXQgPSAxOworCQlkcml2ZS0+ZGV2X2ZsYWdzICY9IH5JREVfREZMQUdfTk9fVU5NQVNLOworCQlkcml2ZS0+ZGV2X2ZsYWdzIHw9IElERV9ERkxBR19OT19JT18zMkJJVDsKIAkJZHJpdmUtPmlvXzMyYml0ID0gMDsKIAl9CiB9CkBAIC00NjgsMTAgKzQ2OCwxMCBAQAogCSAqLwogCWlmIChpbmRleCA+IDEpIHsKIAkJaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOwotCQlpZGVfZHJpdmVfdCAqcGVlciA9ICZod2lmLT5kcml2ZXNbIWRyaXZlLT5zZWxlY3QuYi51bml0XTsKKwkJaWRlX2RyaXZlX3QgKnBlZXIgPSAmaHdpZi0+ZHJpdmVzWyEoZHJpdmUtPmRuICYgMSldOwogCQl1bnNpZ25lZCBpbnQgbWF0ZSA9IGluZGV4IF4gMTsKIAotCQlpZiAocGVlci0+cHJlc2VudCkgeworCQlpZiAocGVlci0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX1BSRVNFTlQpIHsKIAkJCWlmIChzZXR1cF9jb3VudCA8IHNldHVwX2NvdW50c1ttYXRlXSkKIAkJCQlzZXR1cF9jb3VudCA9IHNldHVwX2NvdW50c1ttYXRlXTsKIAkJCWlmIChhY3RpdmVfY291bnQgPCBhY3RpdmVfY291bnRzW21hdGVdKQpAQCAtNjA3LDcgKzYwNyw3IEBACiAKIHN0YXRpYyB2b2lkIGNtZDY0MF9pbml0X2RldihpZGVfZHJpdmVfdCAqZHJpdmUpCiB7Ci0JdW5zaWduZWQgaW50IGkgPSBkcml2ZS0+aHdpZi0+Y2hhbm5lbCAqIDIgKyBkcml2ZS0+c2VsZWN0LmIudW5pdDsKKwl1bnNpZ25lZCBpbnQgaSA9IGRyaXZlLT5od2lmLT5jaGFubmVsICogMiArIChkcml2ZS0+ZG4gJiAxKTsKIAogI2lmZGVmIENPTkZJR19CTEtfREVWX0NNRDY0MF9FTkhBTkNFRAogCS8qCkBAIC02MjYsNyArNjI2LDcgQEAKIAkgKi8KIAljaGVja19wcmVmZXRjaChkcml2ZSwgaSk7CiAJcHJpbnRrKEtFUk5fSU5GTyBEUlZfTkFNRSAiOiBkcml2ZSVkIHRpbWluZ3MvcHJlZmV0Y2goJXMpIHByZXNlcnZlZFxuIiwKLQkJCQkgIGksIGRyaXZlLT5ub19pb18zMmJpdCA/ICJvZmYiIDogIm9uIik7CisJCWksIChkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX05PX0lPXzMyQklUKSA/ICJvZmYiIDogIm9uIik7CiAjZW5kaWYgLyogQ09ORklHX0JMS19ERVZfQ01ENjQwX0VOSEFOQ0VEICovCiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL3BjaS9jbWQ2NHguYyBiL2RyaXZlcnMvaWRlL3BjaS9jbWQ2NHguYwppbmRleCA0NTZkZWUxLi45MzUzODVjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9wY2kvY21kNjR4LmMKKysrIGIvZHJpdmVycy9pZGUvcGNpL2NtZDY0eC5jCkBAIC0yMjgsNyArMjI4LDcgQEAKIHsKIAlpZGVfaHdpZl90ICpod2lmCT0gSFdJRihkcml2ZSk7CiAJdW5zaWduZWQgbG9uZyBiYXNlCT0gaHdpZi0+ZG1hX2Jhc2UgLSAoaHdpZi0+Y2hhbm5lbCAqIDgpOwotCWludCBlcnIJCQk9IF9faWRlX2RtYV9lbmQoZHJpdmUpOworCWludCBlcnIJCQk9IGlkZV9kbWFfZW5kKGRyaXZlKTsKIAl1OCAgaXJxX21hc2sJCT0gaHdpZi0+Y2hhbm5lbCA/IE1SRE1PREVfSU5UUl9DSDEgOgogCQkJCQkJICBNUkRNT0RFX0lOVFJfQ0gwOwogCXU4ICBtcmRtb2RlCQk9IGluYihiYXNlICsgMSk7CkBAIC0yNDgsNyArMjQ4LDcgQEAKIAl1OCAgaXJxX21hc2sJCT0gaHdpZi0+Y2hhbm5lbCA/IEFSVFRJTTIzX0lOVFJfQ0gxIDoKIAkJCQkJCSAgQ0ZSX0lOVFJfQ0gwOwogCXU4ICBpcnFfc3RhdAkJPSAwOwotCWludCBlcnIJCQk9IF9faWRlX2RtYV9lbmQoZHJpdmUpOworCWludCBlcnIJCQk9IGlkZV9kbWFfZW5kKGRyaXZlKTsKIAogCSh2b2lkKSBwY2lfcmVhZF9jb25maWdfYnl0ZShkZXYsIGlycV9yZWcsICZpcnFfc3RhdCk7CiAJLyogY2xlYXIgdGhlIGludGVycnVwdCBiaXQgKi8KQEAgLTUwNSw3ICs1MDUsNyBAQAogfTsKIE1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBjbWQ2NHhfcGNpX3RibCk7CiAKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBkcml2ZXIgPSB7CitzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgY21kNjR4X3BjaV9kcml2ZXIgPSB7CiAJLm5hbWUJCT0gIkNNRDY0eF9JREUiLAogCS5pZF90YWJsZQk9IGNtZDY0eF9wY2lfdGJsLAogCS5wcm9iZQkJPSBjbWQ2NHhfaW5pdF9vbmUsCkBAIC01MTYsMTIgKzUxNiwxMiBAQAogCiBzdGF0aWMgaW50IF9faW5pdCBjbWQ2NHhfaWRlX2luaXQodm9pZCkKIHsKLQlyZXR1cm4gaWRlX3BjaV9yZWdpc3Rlcl9kcml2ZXIoJmRyaXZlcik7CisJcmV0dXJuIGlkZV9wY2lfcmVnaXN0ZXJfZHJpdmVyKCZjbWQ2NHhfcGNpX2RyaXZlcik7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBjbWQ2NHhfaWRlX2V4aXQodm9pZCkKIHsKLQlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJmRyaXZlcik7CisJcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZjbWQ2NHhfcGNpX2RyaXZlcik7CiB9CiAKIG1vZHVsZV9pbml0KGNtZDY0eF9pZGVfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9wY2kvY3M1NTIwLmMgYi9kcml2ZXJzL2lkZS9wY2kvY3M1NTIwLmMKaW5kZXggZDYzNDFmNy4uNWVmYjQ2NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvcGNpL2NzNTUyMC5jCisrKyBiL2RyaXZlcnMvaWRlL3BjaS9jczU1MjAuYwpAQCAtMTQ1LDcgKzE0NSw3IEBACiB9OwogTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIGNzNTUyMF9wY2lfdGJsKTsKIAotc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGRyaXZlciA9IHsKK3N0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBjczU1MjBfcGNpX2RyaXZlciA9IHsKIAkubmFtZQkJPSAiQ3lyaXhfSURFIiwKIAkuaWRfdGFibGUJPSBjczU1MjBfcGNpX3RibCwKIAkucHJvYmUJCT0gY3M1NTIwX2luaXRfb25lLApAQCAtMTU1LDcgKzE1NSw3IEBACiAKIHN0YXRpYyBpbnQgX19pbml0IGNzNTUyMF9pZGVfaW5pdCh2b2lkKQogewotCXJldHVybiBpZGVfcGNpX3JlZ2lzdGVyX2RyaXZlcigmZHJpdmVyKTsKKwlyZXR1cm4gaWRlX3BjaV9yZWdpc3Rlcl9kcml2ZXIoJmNzNTUyMF9wY2lfZHJpdmVyKTsKIH0KIAogbW9kdWxlX2luaXQoY3M1NTIwX2lkZV9pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL3BjaS9jczU1MzAuYyBiL2RyaXZlcnMvaWRlL3BjaS9jczU1MzAuYwppbmRleCBkYTQyZmE3Li41M2YwNzljIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9wY2kvY3M1NTMwLmMKKysrIGIvZHJpdmVycy9pZGUvcGNpL2NzNTUzMC5jCkBAIC0yNjcsNyArMjY3LDcgQEAKIH07CiBNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgY3M1NTMwX3BjaV90YmwpOwogCi1zdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgZHJpdmVyID0geworc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGNzNTUzMF9wY2lfZHJpdmVyID0gewogCS5uYW1lCQk9ICJDUzU1MzAgSURFIiwKIAkuaWRfdGFibGUJPSBjczU1MzBfcGNpX3RibCwKIAkucHJvYmUJCT0gY3M1NTMwX2luaXRfb25lLApAQCAtMjc4LDEyICsyNzgsMTIgQEAKIAogc3RhdGljIGludCBfX2luaXQgY3M1NTMwX2lkZV9pbml0KHZvaWQpCiB7Ci0JcmV0dXJuIGlkZV9wY2lfcmVnaXN0ZXJfZHJpdmVyKCZkcml2ZXIpOworCXJldHVybiBpZGVfcGNpX3JlZ2lzdGVyX2RyaXZlcigmY3M1NTMwX3BjaV9kcml2ZXIpOwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgY3M1NTMwX2lkZV9leGl0KHZvaWQpCiB7Ci0JcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZkcml2ZXIpOworCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmY3M1NTMwX3BjaV9kcml2ZXIpOwogfQogCiBtb2R1bGVfaW5pdChjczU1MzBfaWRlX2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvcGNpL2NzNTUzNS5jIGIvZHJpdmVycy9pZGUvcGNpL2NzNTUzNS5jCmluZGV4IDFlNWJjNTkuLjk4M2Q5NTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL3BjaS9jczU1MzUuYworKysgYi9kcml2ZXJzL2lkZS9wY2kvY3M1NTM1LmMKQEAgLTc2LDcgKzc2LDcgQEAKIHN0YXRpYyB2b2lkIGNzNTUzNV9zZXRfc3BlZWQoaWRlX2RyaXZlX3QgKmRyaXZlLCBjb25zdCB1OCBzcGVlZCkKIHsKIAl1MzIgcmVnID0gMCwgZHVtbXk7Ci0JaW50IHVuaXQgPSBkcml2ZS0+c2VsZWN0LmIudW5pdDsKKwl1OCB1bml0ID0gZHJpdmUtPmRuICYgMTsKIAogCS8qIFNldCB0aGUgUElPIHRpbWluZ3MgKi8KIAlpZiAoc3BlZWQgPCBYRkVSX1NXX0RNQV8wKSB7CkBAIC0xOTIsNyArMTkyLDcgQEAKIAogTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIGNzNTUzNV9wY2lfdGJsKTsKIAotc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGRyaXZlciA9IHsKK3N0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBjczU1MzVfcGNpX2RyaXZlciA9IHsKIAkubmFtZQkJPSAiQ1M1NTM1X0lERSIsCiAJLmlkX3RhYmxlCT0gY3M1NTM1X3BjaV90YmwsCiAJLnByb2JlCQk9IGNzNTUzNV9pbml0X29uZSwKQEAgLTIwMywxMiArMjAzLDEyIEBACiAKIHN0YXRpYyBpbnQgX19pbml0IGNzNTUzNV9pZGVfaW5pdCh2b2lkKQogewotCXJldHVybiBpZGVfcGNpX3JlZ2lzdGVyX2RyaXZlcigmZHJpdmVyKTsKKwlyZXR1cm4gaWRlX3BjaV9yZWdpc3Rlcl9kcml2ZXIoJmNzNTUzNV9wY2lfZHJpdmVyKTsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IGNzNTUzNV9pZGVfZXhpdCh2b2lkKQogewotCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmZHJpdmVyKTsKKwlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJmNzNTUzNV9wY2lfZHJpdmVyKTsKIH0KIAogbW9kdWxlX2luaXQoY3M1NTM1X2lkZV9pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL3BjaS9jeTgyYzY5My5jIGIvZHJpdmVycy9pZGUvcGNpL2N5ODJjNjkzLmMKaW5kZXggNjk4MjBlOS4uNTI5N2YwNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvcGNpL2N5ODJjNjkzLmMKKysrIGIvZHJpdmVycy9pZGUvcGNpL2N5ODJjNjkzLmMKQEAgLTUwLDE4ICs1MCwxMSBAQAogCiAjZGVmaW5lIERSVl9OQU1FICJjeTgyYzY5MyIKIAotLyogdGhlIGN1cnJlbnQgdmVyc2lvbiAqLwotI2RlZmluZSBDWTgyX1ZFUlNJT04JIkNZODJDNjkzVSBkcml2ZXIgdjAuMzQgOTktMTMtMTIgQW5kcmVhcyBTLiBLcmVicyAoYWtyZWJzQGFsdGF2aXN0YS5uZXQpIgotCiAvKgogICoJVGhlIGZvbGxvd2luZyBhcmUgdXNlZCB0byBkZWJ1ZyB0aGUgZHJpdmVyLgogICovCi0jZGVmaW5lIENZODJDNjkzX0RFQlVHX0xPR1MJMAogI2RlZmluZSBDWTgyQzY5M19ERUJVR19JTkZPCTAKIAotLyogZGVmaW5lIENZODJDNjkzX1NFVERNQV9DTE9DSyB0byBzZXQgRE1BIENvbnRyb2xsZXIgQ2xvY2sgU3BlZWQgdG8gQVRDTEsgKi8KLSN1bmRlZiBDWTgyQzY5M19TRVRETUFfQ0xPQ0sKLQogLyoKICAqCU5PVEU6IHRoZSB2YWx1ZSBmb3IgYnVzbWFzdGVyIHRpbWVvdXQgaXMgdHJpY2t5IGFuZCBJIGdvdCBpdCBieQogICoJdHJpYWwgYW5kIGVycm9yISAgQnkgdXNpbmcgYSB0byBsb3cgdmFsdWUgd2lsbCBjYXVzZSBETUEgdGltZW91dHMKQEAgLTg5LDcgKzgyLDYgQEAKICNkZWZpbmUgQ1k4Ml9JTkRFWF9QT1JUCQkweDIyCiAjZGVmaW5lIENZODJfREFUQV9QT1JUCQkweDIzCiAKLSNkZWZpbmUgQ1k4Ml9JTkRFWF9DVFJMUkVHMQkweDAxCiAjZGVmaW5lIENZODJfSU5ERVhfQ0hBTk5FTDAJMHgzMAogI2RlZmluZSBDWTgyX0lOREVYX0NIQU5ORUwxCTB4MzEKICNkZWZpbmUgQ1k4Ml9JTkRFWF9USU1FT1VUCTB4MzIKQEAgLTE3OSwxNyArMTcxLDYgQEAKIAogCWluZGV4ID0gaHdpZi0+Y2hhbm5lbCA/IENZODJfSU5ERVhfQ0hBTk5FTDEgOiBDWTgyX0lOREVYX0NIQU5ORUwwOwogCi0jaWYgQ1k4MkM2OTNfREVCVUdfTE9HUwotCS8qIGZvciBkZWJ1ZyBsZXQncyBzaG93IHRoZSBwcmV2aW91cyB2YWx1ZXMgKi8KLQotCW91dGIoaW5kZXgsIENZODJfSU5ERVhfUE9SVCk7Ci0JZGF0YSA9IGluYihDWTgyX0RBVEFfUE9SVCk7Ci0KLQlwcmludGsoS0VSTl9JTkZPICIlcyAoY2g9JWQsIGRldj0lZCk6IERNQSBtb2RlIGlzICVkIChzaW5nbGU9JWQpXG4iLAotCQlkcml2ZS0+bmFtZSwgSFdJRihkcml2ZSktPmNoYW5uZWwsIGRyaXZlLT5zZWxlY3QuYi51bml0LAotCQkoZGF0YSYweDMpLCAoKGRhdGE+PjIpJjEpKTsKLSNlbmRpZiAvKiBDWTgyQzY5M19ERUJVR19MT0dTICovCi0KIAlkYXRhID0gKG1vZGUgJiAzKSB8IChzaW5nbGUgPDwgMik7CiAKIAlvdXRiKGluZGV4LCBDWTgyX0lOREVYX1BPUlQpOwpAQCAtMTk3LDggKzE3OCw3IEBACiAKICNpZiBDWTgyQzY5M19ERUJVR19JTkZPCiAJcHJpbnRrKEtFUk5fSU5GTyAiJXMgKGNoPSVkLCBkZXY9JWQpOiBzZXQgRE1BIG1vZGUgdG8gJWQgKHNpbmdsZT0lZClcbiIsCi0JCWRyaXZlLT5uYW1lLCBIV0lGKGRyaXZlKS0+Y2hhbm5lbCwgZHJpdmUtPnNlbGVjdC5iLnVuaXQsCi0JCW1vZGUgJiAzLCBzaW5nbGUpOworCQlkcml2ZS0+bmFtZSwgaHdpZi0+Y2hhbm5lbCwgZHJpdmUtPmRuICYgMSwgbW9kZSAmIDMsIHNpbmdsZSk7CiAjZW5kaWYgLyogQ1k4MkM2OTNfREVCVUdfSU5GTyAqLwogCiAJLyoKQEAgLTIzOSw1MCArMjE5LDExIEBACiAJCX0KIAl9CiAKLSNpZiBDWTgyQzY5M19ERUJVR19MT0dTCi0JLyogZm9yIGRlYnVnIGxldCdzIHNob3cgdGhlIHJlZ2lzdGVyIHZhbHVlcyAqLwotCi0JaWYgKGRyaXZlLT5zZWxlY3QuYi51bml0ID09IDApIHsKLQkJLyoKLQkJICogZ2V0IG1hc3RlciBkcml2ZSByZWdpc3RlcnMKLQkJICogYWRkcmVzcyBzZXR1cCBjb250cm9sIHJlZ2lzdGVyCi0JCSAqIGlzIDMyIGJpdCAhISEKLQkJICovCi0JCXBjaV9yZWFkX2NvbmZpZ19kd29yZChkZXYsIENZODJfSURFX0FERFJTRVRVUCwgJmFkZHJDdHJsKTsKLQkJYWRkckN0cmwgJj0gMHgwRjsKLQotCQkvKiBub3cgbGV0J3MgZ2V0IHRoZSByZW1haW5pbmcgcmVnaXN0ZXJzICovCi0JCXBjaV9yZWFkX2NvbmZpZ19ieXRlKGRldiwgQ1k4Ml9JREVfTUFTVEVSX0lPUiwgJnBjbGsudGltZV8xNnIpOwotCQlwY2lfcmVhZF9jb25maWdfYnl0ZShkZXYsIENZODJfSURFX01BU1RFUl9JT1csICZwY2xrLnRpbWVfMTZ3KTsKLQkJcGNpX3JlYWRfY29uZmlnX2J5dGUoZGV2LCBDWTgyX0lERV9NQVNURVJfOEJJVCwgJnBjbGsudGltZV84KTsKLQl9IGVsc2UgewotCQkvKgotCQkgKiBzZXQgc2xhdmUgZHJpdmUgcmVnaXN0ZXJzCi0JCSAqIGFkZHJlc3Mgc2V0dXAgY29udHJvbCByZWdpc3RlcgotCQkgKiBpcyAzMiBiaXQgISEhCi0JCSAqLwotCQlwY2lfcmVhZF9jb25maWdfZHdvcmQoZGV2LCBDWTgyX0lERV9BRERSU0VUVVAsICZhZGRyQ3RybCk7Ci0KLQkJYWRkckN0cmwgJj0gMHhGMDsKLQkJYWRkckN0cmwgPj49IDQ7Ci0KLQkJLyogbm93IGxldCdzIGdldCB0aGUgcmVtYWluaW5nIHJlZ2lzdGVycyAqLwotCQlwY2lfcmVhZF9jb25maWdfYnl0ZShkZXYsIENZODJfSURFX1NMQVZFX0lPUiwgJnBjbGsudGltZV8xNnIpOwotCQlwY2lfcmVhZF9jb25maWdfYnl0ZShkZXYsIENZODJfSURFX1NMQVZFX0lPVywgJnBjbGsudGltZV8xNncpOwotCQlwY2lfcmVhZF9jb25maWdfYnl0ZShkZXYsIENZODJfSURFX1NMQVZFXzhCSVQsICZwY2xrLnRpbWVfOCk7Ci0JfQotCi0JcHJpbnRrKEtFUk5fSU5GTyAiJXMgKGNoPSVkLCBkZXY9JWQpOiBQSU8gdGltaW5nIGlzICIKLQkJIihhZGRyPTB4JVgsIGlvcj0weCVYLCBpb3c9MHglWCwgOGJpdD0weCVYKVxuIiwKLQkJZHJpdmUtPm5hbWUsIGh3aWYtPmNoYW5uZWwsIGRyaXZlLT5zZWxlY3QuYi51bml0LAotCQlhZGRyQ3RybCwgcGNsay50aW1lXzE2ciwgcGNsay50aW1lXzE2dywgcGNsay50aW1lXzgpOwotI2VuZGlmIC8qIENZODJDNjkzX0RFQlVHX0xPR1MgKi8KLQogCS8qIGxldCdzIGNhbGMgdGhlIHZhbHVlcyBmb3IgdGhpcyBQSU8gbW9kZSAqLwogCWNvbXB1dGVfY2xvY2tzKHBpbywgJnBjbGspOwogCiAJLyogbm93IGxldCdzIHdyaXRlICB0aGUgY2xvY2tzIHJlZ2lzdGVycyAqLwotCWlmIChkcml2ZS0+c2VsZWN0LmIudW5pdCA9PSAwKSB7CisJaWYgKChkcml2ZS0+ZG4gJiAxKSA9PSAwKSB7CiAJCS8qCiAJCSAqIHNldCBtYXN0ZXIgZHJpdmUKIAkJICogYWRkcmVzcyBzZXR1cCBjb250cm9sIHJlZ2lzdGVyCkBAIC0zMjQsNjMgKzI2NSwxMSBAQAogI2lmIENZODJDNjkzX0RFQlVHX0lORk8KIAlwcmludGsoS0VSTl9JTkZPICIlcyAoY2g9JWQsIGRldj0lZCk6IHNldCBQSU8gdGltaW5nIHRvICIKIAkJIihhZGRyPTB4JVgsIGlvcj0weCVYLCBpb3c9MHglWCwgOGJpdD0weCVYKVxuIiwKLQkJZHJpdmUtPm5hbWUsIGh3aWYtPmNoYW5uZWwsIGRyaXZlLT5zZWxlY3QuYi51bml0LAorCQlkcml2ZS0+bmFtZSwgaHdpZi0+Y2hhbm5lbCwgZHJpdmUtPmRuICYgMSwKIAkJYWRkckN0cmwsIHBjbGsudGltZV8xNnIsIHBjbGsudGltZV8xNncsIHBjbGsudGltZV84KTsKICNlbmRpZiAvKiBDWTgyQzY5M19ERUJVR19JTkZPICovCiB9CiAKLS8qCi0gKiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBkdXJpbmcgaW5pdCBhbmQgaXMgdXNlZCB0byBzZXR1cCB0aGUgY3k4MmM2OTMgY2hpcAotICovCi1zdGF0aWMgdW5zaWduZWQgaW50IGluaXRfY2hpcHNldF9jeTgyYzY5MyhzdHJ1Y3QgcGNpX2RldiAqZGV2KQotewotCWlmIChQQ0lfRlVOQyhkZXYtPmRldmZuKSAhPSAxKQotCQlyZXR1cm4gMDsKLQotI2lmZGVmIENZODJDNjkzX1NFVERNQV9DTE9DSwotCXU4IGRhdGEgPSAwOwotI2VuZGlmIC8qIENZODJDNjkzX1NFVERNQV9DTE9DSyAqLwotCi0JLyogd3JpdGUgaW5mbyBhYm91dCB0aGlzIHZlcmlvbiBvZiB0aGUgZHJpdmVyICovCi0JcHJpbnRrKEtFUk5fSU5GTyBDWTgyX1ZFUlNJT04gIlxuIik7Ci0KLSNpZmRlZiBDWTgyQzY5M19TRVRETUFfQ0xPQ0sKLSAgICAgICAvKiBva2F5IGxldCdzIHNldCB0aGUgRE1BIGNsb2NrIHNwZWVkICovCi0KLQlvdXRiKENZODJfSU5ERVhfQ1RSTFJFRzEsIENZODJfSU5ERVhfUE9SVCk7Ci0JZGF0YSA9IGluYihDWTgyX0RBVEFfUE9SVCk7Ci0KLSNpZiBDWTgyQzY5M19ERUJVR19JTkZPCi0JcHJpbnRrKEtFUk5fSU5GTyBEUlZfTkFNRSAiOiBQZXJpcGhlcmFsIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXI6IDB4JVhcbiIsCi0JCWRhdGEpOwotI2VuZGlmIC8qIENZODJDNjkzX0RFQlVHX0lORk8gKi8KLQotCS8qCi0JICogZm9yIHNvbWUgcmVhc29uIHNvbWV0aW1lcyB0aGUgRE1BIGNvbnRyb2xsZXIKLQkgKiBzcGVlZCBpcyBzZXQgdG8gQVRDTEsvMiA/Pz8/IC0gd2UgZml4IHRoaXMgaGVyZQotCSAqCi0JICogbm90ZTogaSBkb24ndCBrbm93IHdoYXQgY2F1c2VzIHRoaXMgc3RyYW5nZSBiZWhhdmlvdXIsCi0JICogICAgICAgYnV0IGV2ZW4gY2hhbmdpbmcgdGhlIGRtYSBzcGVlZCBkb2Vzbid0IHNvbHZlIGl0IDotKAotCSAqICAgICAgIHRoZSBpZGUgcGVyZm9ybWFuY2UgaXMgc3RpbGwgb25seSBoYWxmIHRoZSBub3JtYWwgc3BlZWQKLQkgKgotCSAqICAgICAgIGlmIGFueWJvZHkga25vd3Mgd2hhdCBnb2VzIHdyb25nIHdpdGggbXkgbWFjaGluZSwgcGxlYXNlCi0JICogICAgICAgbGV0IG1lIGtub3cgLSBBU0sKLQkgKi8KLQotCWRhdGEgfD0gMHgwMzsKLQotCW91dGIoQ1k4Ml9JTkRFWF9DVFJMUkVHMSwgQ1k4Ml9JTkRFWF9QT1JUKTsKLQlvdXRiKGRhdGEsIENZODJfREFUQV9QT1JUKTsKLQotI2lmIENZODJDNjkzX0RFQlVHX0lORk8KLQlwcmludGsoS0VSTl9JTkZPICI6IE5ldyBQZXJpcGhlcmFsIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXI6IDB4JVhcbiIsCi0JCWRhdGEpOwotI2VuZGlmIC8qIENZODJDNjkzX0RFQlVHX0lORk8gKi8KLQotI2VuZGlmIC8qIENZODJDNjkzX1NFVERNQV9DTE9DSyAqLwotCXJldHVybiAwOwotfQotCiBzdGF0aWMgdm9pZCBfX2RldmluaXQgaW5pdF9pb3BzX2N5ODJjNjkzKGlkZV9od2lmX3QgKmh3aWYpCiB7CiAJc3RhdGljIGlkZV9od2lmX3QgKnByaW1hcnk7CkBAIC00MDEsNyArMjkwLDYgQEAKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBpZGVfcG9ydF9pbmZvIGN5ODJjNjkzX2NoaXBzZXQgX19kZXZpbml0ZGF0YSA9IHsKIAkubmFtZQkJPSBEUlZfTkFNRSwKLQkuaW5pdF9jaGlwc2V0CT0gaW5pdF9jaGlwc2V0X2N5ODJjNjkzLAogCS5pbml0X2lvcHMJPSBpbml0X2lvcHNfY3k4MmM2OTMsCiAJLnBvcnRfb3BzCT0gJmN5ODJjNjkzX3BvcnRfb3BzLAogCS5jaGlwc2V0CT0gaWRlX2N5ODJjNjkzLApAQCAtNDQzLDcgKzMzMSw3IEBACiB9OwogTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIGN5ODJjNjkzX3BjaV90YmwpOwogCi1zdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgZHJpdmVyID0geworc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGN5ODJjNjkzX3BjaV9kcml2ZXIgPSB7CiAJLm5hbWUJCT0gIkN5cHJlc3NfSURFIiwKIAkuaWRfdGFibGUJPSBjeTgyYzY5M19wY2lfdGJsLAogCS5wcm9iZQkJPSBjeTgyYzY5M19pbml0X29uZSwKQEAgLTQ1NCwxMiArMzQyLDEyIEBACiAKIHN0YXRpYyBpbnQgX19pbml0IGN5ODJjNjkzX2lkZV9pbml0KHZvaWQpCiB7Ci0JcmV0dXJuIGlkZV9wY2lfcmVnaXN0ZXJfZHJpdmVyKCZkcml2ZXIpOworCXJldHVybiBpZGVfcGNpX3JlZ2lzdGVyX2RyaXZlcigmY3k4MmM2OTNfcGNpX2RyaXZlcik7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBjeTgyYzY5M19pZGVfZXhpdCh2b2lkKQogewotCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmZHJpdmVyKTsKKwlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJmN5ODJjNjkzX3BjaV9kcml2ZXIpOwogfQogCiBtb2R1bGVfaW5pdChjeTgyYzY5M19pZGVfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9wY2kvZGVsa2luX2NiLmMgYi9kcml2ZXJzL2lkZS9wY2kvZGVsa2luX2NiLmMKaW5kZXggODNiNjNiMy4uOGYxYjJkOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvcGNpL2RlbGtpbl9jYi5jCisrKyBiL2RyaXZlcnMvaWRlL3BjaS9kZWxraW5fY2IuYwpAQCAtNDYsMTAgKzQ2LDI3IEBACiAJLnF1aXJrcHJvYwkJPSBpZGVfdW5kZWNvZGVkX3NsYXZlLAogfTsKIAorc3RhdGljIHVuc2lnbmVkIGludCBkZWxraW5fY2JfaW5pdF9jaGlwc2V0KHN0cnVjdCBwY2lfZGV2ICpkZXYpCit7CisJdW5zaWduZWQgbG9uZyBiYXNlID0gcGNpX3Jlc291cmNlX3N0YXJ0KGRldiwgMCk7CisJaW50IGk7CisKKwlvdXRiKDB4MDIsIGJhc2UgKyAweDFlKTsJLyogc2V0IG5JRU4gdG8gYmxvY2sgaW50ZXJydXB0cyAqLworCWluYihiYXNlICsgMHgxNyk7CQkvKiByZWFkIHN0YXR1cyB0byBjbGVhciBpbnRlcnJ1cHRzICovCisKKwlmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKHNldHVwKTsgKytpKSB7CisJCWlmIChzZXR1cFtpXSkKKwkJCW91dGIoc2V0dXBbaV0sIGJhc2UgKyBpKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGNvbnN0IHN0cnVjdCBpZGVfcG9ydF9pbmZvIGRlbGtpbl9jYl9wb3J0X2luZm8gPSB7CiAJLnBvcnRfb3BzCQk9ICZkZWxraW5fY2JfcG9ydF9vcHMsCiAJLmhvc3RfZmxhZ3MJCT0gSURFX0hGTEFHX0lPXzMyQklUIHwgSURFX0hGTEFHX1VOTUFTS19JUlFTIHwKIAkJCQkgIElERV9IRkxBR19OT19ETUEsCisJLmluaXRfY2hpcHNldAkJPSBkZWxraW5fY2JfaW5pdF9jaGlwc2V0LAogfTsKIAogc3RhdGljIGludCBfX2RldmluaXQKQEAgLTU3LDcgKzc0LDcgQEAKIHsKIAlzdHJ1Y3QgaWRlX2hvc3QgKmhvc3Q7CiAJdW5zaWduZWQgbG9uZyBiYXNlOwotCWludCBpLCByYzsKKwlpbnQgcmM7CiAJaHdfcmVnc190IGh3LCAqaHdzW10gPSB7ICZodywgTlVMTCwgTlVMTCwgTlVMTCB9OwogCiAJcmMgPSBwY2lfZW5hYmxlX2RldmljZShkZXYpOwpAQCAtNzIsMTIgKzg5LDggQEAKIAkJcmV0dXJuIHJjOwogCX0KIAliYXNlID0gcGNpX3Jlc291cmNlX3N0YXJ0KGRldiwgMCk7Ci0Jb3V0YigweDAyLCBiYXNlICsgMHgxZSk7CS8qIHNldCBuSUVOIHRvIGJsb2NrIGludGVycnVwdHMgKi8KLQlpbmIoYmFzZSArIDB4MTcpOwkJLyogcmVhZCBzdGF0dXMgdG8gY2xlYXIgaW50ZXJydXB0cyAqLwotCWZvciAoaSA9IDA7IGkgPCBzaXplb2Yoc2V0dXApOyArK2kpIHsKLQkJaWYgKHNldHVwW2ldKQotCQkJb3V0YihzZXR1cFtpXSwgYmFzZSArIGkpOwotCX0KKworCWRlbGtpbl9jYl9pbml0X2NoaXBzZXQoZGV2KTsKIAogCW1lbXNldCgmaHcsIDAsIHNpemVvZihodykpOwogCWlkZV9zdGRfaW5pdF9wb3J0cygmaHcsIGJhc2UgKyAweDEwLCBiYXNlICsgMHgxZSk7CkBAIC0xMTAsNiArMTIzLDQwIEBACiAJcGNpX2Rpc2FibGVfZGV2aWNlKGRldik7CiB9CiAKKyNpZmRlZiBDT05GSUdfUE0KK3N0YXRpYyBpbnQgZGVsa2luX2NiX3N1c3BlbmQoc3RydWN0IHBjaV9kZXYgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQoreworCXBjaV9zYXZlX3N0YXRlKGRldik7CisJcGNpX2Rpc2FibGVfZGV2aWNlKGRldik7CisJcGNpX3NldF9wb3dlcl9zdGF0ZShkZXYsIHBjaV9jaG9vc2Vfc3RhdGUoZGV2LCBzdGF0ZSkpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZGVsa2luX2NiX3Jlc3VtZShzdHJ1Y3QgcGNpX2RldiAqZGV2KQoreworCXN0cnVjdCBpZGVfaG9zdCAqaG9zdCA9IHBjaV9nZXRfZHJ2ZGF0YShkZXYpOworCWludCByYzsKKworCXBjaV9zZXRfcG93ZXJfc3RhdGUoZGV2LCBQQ0lfRDApOworCisJcmMgPSBwY2lfZW5hYmxlX2RldmljZShkZXYpOworCWlmIChyYykKKwkJcmV0dXJuIHJjOworCisJcGNpX3Jlc3RvcmVfc3RhdGUoZGV2KTsKKwlwY2lfc2V0X21hc3RlcihkZXYpOworCisJaWYgKGhvc3QtPmluaXRfY2hpcHNldCkKKwkJaG9zdC0+aW5pdF9jaGlwc2V0KGRldik7CisKKwlyZXR1cm4gMDsKK30KKyNlbHNlCisjZGVmaW5lIGRlbGtpbl9jYl9zdXNwZW5kIE5VTEwKKyNkZWZpbmUgZGVsa2luX2NiX3Jlc3VtZSBOVUxMCisjZW5kaWYKKwogc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIGRlbGtpbl9jYl9wY2lfdGJsW10gX19kZXZpbml0ZGF0YSA9IHsKIAl7IDB4MTE0NSwgMHhmMDIxLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKIAl7IDB4MTE0NSwgMHhmMDI0LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKQEAgLTExNywyMSArMTY0LDIzIEBACiB9OwogTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIGRlbGtpbl9jYl9wY2lfdGJsKTsKIAotc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGRyaXZlciA9IHsKK3N0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBkZWxraW5fY2JfcGNpX2RyaXZlciA9IHsKIAkubmFtZQkJPSAiRGVsa2luLUFTS0EtV29ya2JpdCBDYXJkYnVzIElERSIsCiAJLmlkX3RhYmxlCT0gZGVsa2luX2NiX3BjaV90YmwsCiAJLnByb2JlCQk9IGRlbGtpbl9jYl9wcm9iZSwKIAkucmVtb3ZlCQk9IGRlbGtpbl9jYl9yZW1vdmUsCisJLnN1c3BlbmQJPSBkZWxraW5fY2Jfc3VzcGVuZCwKKwkucmVzdW1lCQk9IGRlbGtpbl9jYl9yZXN1bWUsCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBkZWxraW5fY2JfaW5pdCh2b2lkKQogewotCXJldHVybiBwY2lfcmVnaXN0ZXJfZHJpdmVyKCZkcml2ZXIpOworCXJldHVybiBwY2lfcmVnaXN0ZXJfZHJpdmVyKCZkZWxraW5fY2JfcGNpX2RyaXZlcik7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBkZWxraW5fY2JfZXhpdCh2b2lkKQogewotCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmZHJpdmVyKTsKKwlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJmRlbGtpbl9jYl9wY2lfZHJpdmVyKTsKIH0KIAogbW9kdWxlX2luaXQoZGVsa2luX2NiX2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvcGNpL2dlbmVyaWMuYyBiL2RyaXZlcnMvaWRlL3BjaS9nZW5lcmljLmMKaW5kZXggMDkyYjIzOC4uNDc0Zjk2YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvcGNpL2dlbmVyaWMuYworKysgYi9kcml2ZXJzL2lkZS9wY2kvZ2VuZXJpYy5jCkBAIC0xNjYsNyArMTY2LDcgQEAKIH07CiBNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgZ2VuZXJpY19wY2lfdGJsKTsKIAotc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGRyaXZlciA9IHsKK3N0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBnZW5lcmljX3BjaV9kcml2ZXIgPSB7CiAJLm5hbWUJCT0gIlBDSV9JREUiLAogCS5pZF90YWJsZQk9IGdlbmVyaWNfcGNpX3RibCwKIAkucHJvYmUJCT0gZ2VuZXJpY19pbml0X29uZSwKQEAgLTE3NywxMiArMTc3LDEyIEBACiAKIHN0YXRpYyBpbnQgX19pbml0IGdlbmVyaWNfaWRlX2luaXQodm9pZCkKIHsKLQlyZXR1cm4gaWRlX3BjaV9yZWdpc3Rlcl9kcml2ZXIoJmRyaXZlcik7CisJcmV0dXJuIGlkZV9wY2lfcmVnaXN0ZXJfZHJpdmVyKCZnZW5lcmljX3BjaV9kcml2ZXIpOwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgZ2VuZXJpY19pZGVfZXhpdCh2b2lkKQogewotCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmZHJpdmVyKTsKKwlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJmdlbmVyaWNfcGNpX2RyaXZlcik7CiB9CiAKIG1vZHVsZV9pbml0KGdlbmVyaWNfaWRlX2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvcGNpL2hwdDM0eC5jIGIvZHJpdmVycy9pZGUvcGNpL2hwdDM0eC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NDRkZTI5Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvaWRlL3BjaS9ocHQzNHguYworKysgL2Rldi9udWxsCkBAIC0xLDE5MyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAxOTk4LTIwMDAJQW5kcmUgSGVkcmljayA8YW5kcmVAbGludXgtaWRlLm9yZz4KLSAqCi0gKiBNYXkgYmUgY29waWVkIG9yIG1vZGlmaWVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqCi0gKgotICogMDA6MTIuMCBVbmtub3duIG1hc3Mgc3RvcmFnZSBjb250cm9sbGVyOgotICogVHJpb25lcyBUZWNobm9sb2dpZXMsIEluYy4KLSAqIFVua25vd24gZGV2aWNlIDAwMDMgKHJldiAwMSkKLSAqCi0gKiBoZGU6IFVETUEgMiAoMHgwMDAwIDB4MDAwMikgKDB4MDAwMCAweDAwMTApCi0gKiBoZGY6IFVETUEgMiAoMHgwMDAyIDB4MDAxMikgKDB4MDAxMCAweDAwMzApCi0gKiBoZGU6IERNQSAyICAoMHgwMDAwIDB4MDAwMikgKDB4MDAwMCAweDAwMTApCi0gKiBoZGY6IERNQSAyICAoMHgwMDAyIDB4MDAxMikgKDB4MDAxMCAweDAwMzApCi0gKiBoZGc6IERNQSAxICAoMHgwMDEyIDB4MDA1MikgKDB4MDAzMCAweDAwNzApCi0gKiBoZGg6IERNQSAxICAoMHgwMDUyIDB4MDI1MikgKDB4MDA3MCAweDAwZjApCi0gKgotICogaWRlLXBjaS5jIHJlZmVyZW5jZQotICoKLSAqIFNpbmNlIHRoZXJlIGFyZSB0d28gY2FyZHMgdGhhdCByZXBvcnQgYWxtb3N0IGlkZW50aWNhbGx5LAotICogdGhlIG9ubHkgZGlzY2VybmFibGUgZGlmZmVyZW5jZSBpcyB0aGUgdmFsdWVzIHJlcG9ydGVkIGluIHBjaWNtZC4KLSAqIEJvb3RpbmctQklPUyBjYXJkIG9yIEhQVDM2MyA6OiBwY2ljbWQgPT0gMHgwNwotICogTm9uLWJvb3RhYmxlIGNhcmQgb3IgSFBUMzQzIDo6IHBjaWNtZCA9PSAweDA1Ci0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+Ci0jaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Ci0jaW5jbHVkZSA8bGludXgvcGNpLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L2lkZS5oPgotCi0jZGVmaW5lIERSVl9OQU1FICJocHQzNHgiCi0KLSNkZWZpbmUgSFBUMzQzX0RFQlVHX0RSSVZFX0lORk8JCTAKLQotc3RhdGljIHZvaWQgaHB0MzR4X3NldF9tb2RlKGlkZV9kcml2ZV90ICpkcml2ZSwgY29uc3QgdTggc3BlZWQpCi17Ci0Jc3RydWN0IHBjaV9kZXYgKmRldiA9IHRvX3BjaV9kZXYoZHJpdmUtPmh3aWYtPmRldik7Ci0JdTMyIHJlZzE9IDAsIHRtcDEgPSAwLCByZWcyID0gMCwgdG1wMiA9IDA7Ci0JdTgJCQloaV9zcGVlZCwgbG9fc3BlZWQ7Ci0KLQloaV9zcGVlZCA9IHNwZWVkID4+IDQ7Ci0JbG9fc3BlZWQgPSBzcGVlZCAmIDB4MGY7Ci0KLQlpZiAoaGlfc3BlZWQgJiA3KSB7Ci0JCWhpX3NwZWVkID0gKGhpX3NwZWVkICYgNCkgPyAweDAxIDogMHgxMDsKLQl9IGVsc2UgewotCQlsb19zcGVlZCA8PD0gNTsKLQkJbG9fc3BlZWQgPj49IDU7Ci0JfQotCi0JcGNpX3JlYWRfY29uZmlnX2R3b3JkKGRldiwgMHg0NCwgJnJlZzEpOwotCXBjaV9yZWFkX2NvbmZpZ19kd29yZChkZXYsIDB4NDgsICZyZWcyKTsKLQl0bXAxID0gKChsb19zcGVlZCA8PCAoMypkcml2ZS0+ZG4pKSB8IChyZWcxICYgfig3IDw8ICgzKmRyaXZlLT5kbikpKSk7Ci0JdG1wMiA9ICgoaGlfc3BlZWQgPDwgZHJpdmUtPmRuKSB8IChyZWcyICYgfigweDExIDw8IGRyaXZlLT5kbikpKTsKLQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKGRldiwgMHg0NCwgdG1wMSk7Ci0JcGNpX3dyaXRlX2NvbmZpZ19kd29yZChkZXYsIDB4NDgsIHRtcDIpOwotCi0jaWYgSFBUMzQzX0RFQlVHX0RSSVZFX0lORk8KLQlwcmludGsoIiVzOiAlcyBkcml2ZSVkICgweCUwNHggMHglMDR4KSAoMHglMDR4IDB4JTA0eCkiIFwKLQkJIiAoMHglMDJ4IDB4JTAyeClcbiIsCi0JCWRyaXZlLT5uYW1lLCBpZGVfeGZlcl92ZXJib3NlKHNwZWVkKSwKLQkJZHJpdmUtPmRuLCByZWcxLCB0bXAxLCByZWcyLCB0bXAyLAotCQloaV9zcGVlZCwgbG9fc3BlZWQpOwotI2VuZGlmIC8qIEhQVDM0M19ERUJVR19EUklWRV9JTkZPICovCi19Ci0KLXN0YXRpYyB2b2lkIGhwdDM0eF9zZXRfcGlvX21vZGUoaWRlX2RyaXZlX3QgKmRyaXZlLCBjb25zdCB1OCBwaW8pCi17Ci0JaHB0MzR4X3NldF9tb2RlKGRyaXZlLCBYRkVSX1BJT18wICsgcGlvKTsKLX0KLQotLyoKLSAqIElmIHRoZSBCSU9TIGRvZXMgbm90IHNldCB0aGUgSU8gYmFzZSBhZGRhcmVzcyB0byBYWDAwLCAzNDMgd2lsbCBmYWlsLgotICovCi0jZGVmaW5lCUhQVDM0WF9QQ0lfSU5JVF9SRUcJCTB4ODAKLQotc3RhdGljIHVuc2lnbmVkIGludCBpbml0X2NoaXBzZXRfaHB0MzR4KHN0cnVjdCBwY2lfZGV2ICpkZXYpCi17Ci0JaW50IGkgPSAwOwotCXVuc2lnbmVkIGxvbmcgaHB0MzR4SW9CYXNlID0gcGNpX3Jlc291cmNlX3N0YXJ0KGRldiwgNCk7Ci0JdW5zaWduZWQgbG9uZyBocHRfYWRkcls0XSA9IHsgMHgyMCwgMHgzNCwgMHgyOCwgMHgzYyB9OwotCXVuc2lnbmVkIGxvbmcgaHB0X2FkZHJfbGVuWzRdID0geyA3LCAzLCA3LCAzIH07Ci0JdTE2IGNtZDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCi0JcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGRldiwgSFBUMzRYX1BDSV9JTklUX1JFRywgMHgwMCk7Ci0JcGNpX3JlYWRfY29uZmlnX3dvcmQoZGV2LCBQQ0lfQ09NTUFORCwgJmNtZCk7Ci0KLQlpZiAoY21kICYgUENJX0NPTU1BTkRfTUVNT1JZKQotCQlwY2lfd3JpdGVfY29uZmlnX2J5dGUoZGV2LCBQQ0lfTEFURU5DWV9USU1FUiwgMHhGMCk7Ci0JZWxzZQotCQlwY2lfd3JpdGVfY29uZmlnX2J5dGUoZGV2LCBQQ0lfTEFURU5DWV9USU1FUiwgMHgyMCk7Ci0KLQkvKgotCSAqIFNpbmNlIDIwLTIzIGNhbiBiZSBhc3NpZ25lZCBhbmQgYXJlIFIvVywgd2UgY29ycmVjdCB0aGVtLgotCSAqLwotCXBjaV93cml0ZV9jb25maWdfd29yZChkZXYsIFBDSV9DT01NQU5ELCBjbWQgJiB+UENJX0NPTU1BTkRfSU8pOwotCWZvcihpPTA7IGk8NDsgaSsrKSB7Ci0JCWRldi0+cmVzb3VyY2VbaV0uc3RhcnQgPSAoaHB0MzR4SW9CYXNlICsgaHB0X2FkZHJbaV0pOwotCQlkZXYtPnJlc291cmNlW2ldLmVuZCA9IGRldi0+cmVzb3VyY2VbaV0uc3RhcnQgKyBocHRfYWRkcl9sZW5baV07Ci0JCWRldi0+cmVzb3VyY2VbaV0uZmxhZ3MgPSBJT1JFU09VUkNFX0lPOwotCQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKGRldiwKLQkJCQkoUENJX0JBU0VfQUREUkVTU18wICsgKGkgKiA0KSksCi0JCQkJZGV2LT5yZXNvdXJjZVtpXS5zdGFydCk7Ci0JfQotCXBjaV93cml0ZV9jb25maWdfd29yZChkZXYsIFBDSV9DT01NQU5ELCBjbWQpOwotCi0JbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwotCi0JcmV0dXJuIGRldi0+aXJxOwotfQotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGlkZV9wb3J0X29wcyBocHQzNHhfcG9ydF9vcHMgPSB7Ci0JLnNldF9waW9fbW9kZQkJPSBocHQzNHhfc2V0X3Bpb19tb2RlLAotCS5zZXRfZG1hX21vZGUJCT0gaHB0MzR4X3NldF9tb2RlLAotfTsKLQotI2RlZmluZSBJREVfSEZMQUdTX0hQVDM0WCBcCi0JKElERV9IRkxBR19OT19BVEFQSV9ETUEgfCBcCi0JIElERV9IRkxBR19OT19EU0MgfCBcCi0JIElERV9IRkxBR19OT19BVVRPRE1BKQotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGlkZV9wb3J0X2luZm8gaHB0MzR4X2NoaXBzZXRzW10gX19kZXZpbml0ZGF0YSA9IHsKLQl7IC8qIDA6IEhQVDM0MyAqLwotCQkubmFtZQkJPSBEUlZfTkFNRSwKLQkJLmluaXRfY2hpcHNldAk9IGluaXRfY2hpcHNldF9ocHQzNHgsCi0JCS5wb3J0X29wcwk9ICZocHQzNHhfcG9ydF9vcHMsCi0JCS5ob3N0X2ZsYWdzCT0gSURFX0hGTEFHU19IUFQzNFggfCBJREVfSEZMQUdfTk9OX0JPT1RBQkxFLAotCQkucGlvX21hc2sJPSBBVEFfUElPNSwKLQl9LAotCXsgLyogMTogSFBUMzQ1ICovCi0JCS5uYW1lCQk9IERSVl9OQU1FLAotCQkuaW5pdF9jaGlwc2V0CT0gaW5pdF9jaGlwc2V0X2hwdDM0eCwKLQkJLnBvcnRfb3BzCT0gJmhwdDM0eF9wb3J0X29wcywKLQkJLmhvc3RfZmxhZ3MJPSBJREVfSEZMQUdTX0hQVDM0WCB8IElERV9IRkxBR19PRkZfQk9BUkQsCi0JCS5waW9fbWFzawk9IEFUQV9QSU81LAotI2lmZGVmIENPTkZJR19IUFQzNFhfQVVUT0RNQQotCQkuc3dkbWFfbWFzawk9IEFUQV9TV0RNQTIsCi0JCS5td2RtYV9tYXNrCT0gQVRBX01XRE1BMiwKLQkJLnVkbWFfbWFzawk9IEFUQV9VRE1BMiwKLSNlbmRpZgotCX0KLX07Ci0KLXN0YXRpYyBpbnQgX19kZXZpbml0IGhwdDM0eF9pbml0X29uZShzdHJ1Y3QgcGNpX2RldiAqZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpCi17Ci0JY29uc3Qgc3RydWN0IGlkZV9wb3J0X2luZm8gKmQ7Ci0JdTE2IHBjaWNtZCA9IDA7Ci0KLQlwY2lfcmVhZF9jb25maWdfd29yZChkZXYsIFBDSV9DT01NQU5ELCAmcGNpY21kKTsKLQotCWQgPSAmaHB0MzR4X2NoaXBzZXRzWyhwY2ljbWQgJiBQQ0lfQ09NTUFORF9NRU1PUlkpID8gMSA6IDBdOwotCi0JcmV0dXJuIGlkZV9wY2lfaW5pdF9vbmUoZGV2LCBkLCBOVUxMKTsKLX0KLQotc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIGhwdDM0eF9wY2lfdGJsW10gPSB7Ci0JeyBQQ0lfVkRFVklDRShUVEksIFBDSV9ERVZJQ0VfSURfVFRJX0hQVDM0MyksIDAgfSwKLQl7IDAsIH0sCi19OwotTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIGhwdDM0eF9wY2lfdGJsKTsKLQotc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGRyaXZlciA9IHsKLQkubmFtZQkJPSAiSFBUMzR4X0lERSIsCi0JLmlkX3RhYmxlCT0gaHB0MzR4X3BjaV90YmwsCi0JLnByb2JlCQk9IGhwdDM0eF9pbml0X29uZSwKLQkucmVtb3ZlCQk9IGlkZV9wY2lfcmVtb3ZlLAotCS5zdXNwZW5kCT0gaWRlX3BjaV9zdXNwZW5kLAotCS5yZXN1bWUJCT0gaWRlX3BjaV9yZXN1bWUsCi19OwotCi1zdGF0aWMgaW50IF9faW5pdCBocHQzNHhfaWRlX2luaXQodm9pZCkKLXsKLQlyZXR1cm4gaWRlX3BjaV9yZWdpc3Rlcl9kcml2ZXIoJmRyaXZlcik7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fZXhpdCBocHQzNHhfaWRlX2V4aXQodm9pZCkKLXsKLQlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJmRyaXZlcik7Ci19Ci0KLW1vZHVsZV9pbml0KGhwdDM0eF9pZGVfaW5pdCk7Ci1tb2R1bGVfZXhpdChocHQzNHhfaWRlX2V4aXQpOwotCi1NT0RVTEVfQVVUSE9SKCJBbmRyZSBIZWRyaWNrIik7Ci1NT0RVTEVfREVTQ1JJUFRJT04oIlBDSSBkcml2ZXIgbW9kdWxlIGZvciBIaWdocG9pbnQgMzR4IElERSIpOwotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvcGNpL2hwdDM2Ni5jIGIvZHJpdmVycy9pZGUvcGNpL2hwdDM2Ni5jCmluZGV4IGExOTQwMjIuLmE3OTA5ZTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL3BjaS9ocHQzNjYuYworKysgYi9kcml2ZXJzL2lkZS9wY2kvaHB0MzY2LmMKQEAgLTMsNyArMyw3IEBACiAgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKEMpIDIwMDEJICAgICAgICBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuCiAgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKEMpIDIwMDMJCVJlZCBIYXQgSW5jCiAgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKEMpIDIwMDcJCUJhcnRsb21pZWogWm9sbmllcmtpZXdpY3oKLSAqIFBvcnRpb25zIENvcHlyaWdodCAoQykgMjAwNS0yMDA3CU1vbnRhVmlzdGEgU29mdHdhcmUsIEluYy4KKyAqIFBvcnRpb25zIENvcHlyaWdodCAoQykgMjAwNS0yMDA4CU1vbnRhVmlzdGEgU29mdHdhcmUsIEluYy4KICAqCiAgKiBUaGFua3MgdG8gSGlnaFBvaW50IFRlY2hub2xvZ2llcyBmb3IgdGhlaXIgYXNzaXN0YW5jZSwgYW5kIGhhcmR3YXJlLgogICogU3BlY2lhbCBUaGFua3MgdG8gSm9uIEJ1cmNobW9yZSBpbiBTYW5EaWVnbyBmb3IgdGhlIGRlZXAgcG9ja2V0cywgaGlzCkBAIC03NDgsMjYgKzc0OCwyNCBAQAogCXN0cnVjdCBwY2lfZGV2CSpkZXYJPSB0b19wY2lfZGV2KGh3aWYtPmRldik7CiAJc3RydWN0IGhwdF9pbmZvICppbmZvCT0gaHB0M3h4X2dldF9pbmZvKGh3aWYtPmRldik7CiAKLQlpZiAoZHJpdmUtPnF1aXJrX2xpc3QpIHsKLQkJaWYgKGluZm8tPmNoaXBfdHlwZSA+PSBIUFQzNzApIHsKLQkJCXU4IHNjcjEgPSAwOworCWlmIChkcml2ZS0+cXVpcmtfbGlzdCA9PSAwKQorCQlyZXR1cm47CiAKLQkJCXBjaV9yZWFkX2NvbmZpZ19ieXRlKGRldiwgMHg1YSwgJnNjcjEpOwotCQkJaWYgKCgoc2NyMSAmIDB4MTApID4+IDQpICE9IG1hc2spIHsKLQkJCQlpZiAobWFzaykKLQkJCQkJc2NyMSB8PSAgMHgxMDsKLQkJCQllbHNlCi0JCQkJCXNjcjEgJj0gfjB4MTA7Ci0JCQkJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGRldiwgMHg1YSwgc2NyMSk7Ci0JCQl9Ci0JCX0gZWxzZSB7CisJaWYgKGluZm8tPmNoaXBfdHlwZSA+PSBIUFQzNzApIHsKKwkJdTggc2NyMSA9IDA7CisKKwkJcGNpX3JlYWRfY29uZmlnX2J5dGUoZGV2LCAweDVhLCAmc2NyMSk7CisJCWlmICgoKHNjcjEgJiAweDEwKSA+PiA0KSAhPSBtYXNrKSB7CiAJCQlpZiAobWFzaykKLQkJCQlkaXNhYmxlX2lycShod2lmLT5pcnEpOworCQkJCXNjcjEgfD0gIDB4MTA7CiAJCQllbHNlCi0JCQkJZW5hYmxlX2lycSAoaHdpZi0+aXJxKTsKKwkJCQlzY3IxICY9IH4weDEwOworCQkJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGRldiwgMHg1YSwgc2NyMSk7CiAJCX0KLQl9IGVsc2UKLQkJb3V0YihBVEFfREVWQ1RMX09CUyB8IChtYXNrID8gMiA6IDApLCBod2lmLT5pb19wb3J0cy5jdGxfYWRkcik7CisJfSBlbHNlIGlmIChtYXNrKQorCQlkaXNhYmxlX2lycShod2lmLT5pcnEpOworCWVsc2UKKwkJZW5hYmxlX2lycShod2lmLT5pcnEpOwogfQogCiAvKgpAQCAtODM1LDcgKzgzMyw3IEBACiAJCWlmIChkbWFfc3RhdCAmIDB4MDEpCiAJCQlocHQzNzBfaXJxX3RpbWVvdXQoZHJpdmUpOwogCX0KLQlyZXR1cm4gX19pZGVfZG1hX2VuZChkcml2ZSk7CisJcmV0dXJuIGlkZV9kbWFfZW5kKGRyaXZlKTsKIH0KIAogc3RhdGljIHZvaWQgaHB0MzcwX2RtYV90aW1lb3V0KGlkZV9kcml2ZV90ICpkcml2ZSkKQEAgLTg2Myw5ICs4NjEsNiBAQAogCWlmIChkbWFfc3RhdCAmIDQpCiAJCXJldHVybiAxOwogCi0JaWYgKCFkcml2ZS0+d2FpdGluZ19mb3JfZG1hKQotCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogKCVzKSBjYWxsZWQgd2hpbGUgbm90IHdhaXRpbmdcbiIsCi0JCQkJZHJpdmUtPm5hbWUsIF9fZnVuY19fKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtODgwLDcgKzg3NSw3IEBACiAJcGNpX3JlYWRfY29uZmlnX2J5dGUoZGV2LCBtY3JfYWRkciwgJm1jcik7CiAJaWYgKGJ3c3IgJiBtYXNrKQogCQlwY2lfd3JpdGVfY29uZmlnX2J5dGUoZGV2LCBtY3JfYWRkciwgbWNyIHwgMHgzMCk7Ci0JcmV0dXJuIF9faWRlX2RtYV9lbmQoZHJpdmUpOworCXJldHVybiBpZGVfZG1hX2VuZChkcml2ZSk7CiB9CiAKIC8qKgpAQCAtMTI5Miw3ICsxMjg3LDYgQEAKIAogc3RhdGljIHZvaWQgX19kZXZpbml0IGluaXRfaHdpZl9ocHQzNjYoaWRlX2h3aWZfdCAqaHdpZikKIHsKLQlzdHJ1Y3QgcGNpX2RldiAqZGV2CT0gdG9fcGNpX2Rldihod2lmLT5kZXYpOwogCXN0cnVjdCBocHRfaW5mbyAqaW5mbwk9IGhwdDN4eF9nZXRfaW5mbyhod2lmLT5kZXYpOwogCWludCBzZXJpYWxpemUJCT0gSFBUX1NFUklBTElaRV9JTzsKIAl1OCAgY2hpcF90eXBlCQk9IGluZm8tPmNoaXBfdHlwZTsKQEAgLTE0NTYsNyArMTQ1MCw3IEBACiAJLmRtYV9zZXR1cAkJPSBpZGVfZG1hX3NldHVwLAogCS5kbWFfZXhlY19jbWQJCT0gaWRlX2RtYV9leGVjX2NtZCwKIAkuZG1hX3N0YXJ0CQk9IGlkZV9kbWFfc3RhcnQsCi0JLmRtYV9lbmQJCT0gX19pZGVfZG1hX2VuZCwKKwkuZG1hX2VuZAkJPSBpZGVfZG1hX2VuZCwKIAkuZG1hX3Rlc3RfaXJxCQk9IGlkZV9kbWFfdGVzdF9pcnEsCiAJLmRtYV9sb3N0X2lycQkJPSBocHQzNjZfZG1hX2xvc3RfaXJxLAogCS5kbWFfdGltZW91dAkJPSBpZGVfZG1hX3RpbWVvdXQsCkBAIC0xNjIyLDcgKzE2MTYsNyBAQAogfTsKIE1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBocHQzNjZfcGNpX3RibCk7CiAKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBkcml2ZXIgPSB7CitzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgaHB0MzY2X3BjaV9kcml2ZXIgPSB7CiAJLm5hbWUJCT0gIkhQVDM2Nl9JREUiLAogCS5pZF90YWJsZQk9IGhwdDM2Nl9wY2lfdGJsLAogCS5wcm9iZQkJPSBocHQzNjZfaW5pdF9vbmUsCkBAIC0xNjMzLDEyICsxNjI3LDEyIEBACiAKIHN0YXRpYyBpbnQgX19pbml0IGhwdDM2Nl9pZGVfaW5pdCh2b2lkKQogewotCXJldHVybiBpZGVfcGNpX3JlZ2lzdGVyX2RyaXZlcigmZHJpdmVyKTsKKwlyZXR1cm4gaWRlX3BjaV9yZWdpc3Rlcl9kcml2ZXIoJmhwdDM2Nl9wY2lfZHJpdmVyKTsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IGhwdDM2Nl9pZGVfZXhpdCh2b2lkKQogewotCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmZHJpdmVyKTsKKwlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJmhwdDM2Nl9wY2lfZHJpdmVyKTsKIH0KIAogbW9kdWxlX2luaXQoaHB0MzY2X2lkZV9pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL3BjaS9pdDgyMTMuYyBiL2RyaXZlcnMvaWRlL3BjaS9pdDgyMTMuYwppbmRleCAwOTU0Y2NkLi43YzJmZWViIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9wY2kvaXQ4MjEzLmMKKysrIGIvZHJpdmVycy9pZGUvcGNpL2l0ODIxMy5jCkBAIC0xODksNyArMTg5LDcgQEAKIAogTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIGl0ODIxM19wY2lfdGJsKTsKIAotc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGRyaXZlciA9IHsKK3N0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBpdDgyMTNfcGNpX2RyaXZlciA9IHsKIAkubmFtZQkJPSAiSVRFODIxM19JREUiLAogCS5pZF90YWJsZQk9IGl0ODIxM19wY2lfdGJsLAogCS5wcm9iZQkJPSBpdDgyMTNfaW5pdF9vbmUsCkBAIC0yMDAsMTIgKzIwMCwxMiBAQAogCiBzdGF0aWMgaW50IF9faW5pdCBpdDgyMTNfaWRlX2luaXQodm9pZCkKIHsKLQlyZXR1cm4gaWRlX3BjaV9yZWdpc3Rlcl9kcml2ZXIoJmRyaXZlcik7CisJcmV0dXJuIGlkZV9wY2lfcmVnaXN0ZXJfZHJpdmVyKCZpdDgyMTNfcGNpX2RyaXZlcik7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBpdDgyMTNfaWRlX2V4aXQodm9pZCkKIHsKLQlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJmRyaXZlcik7CisJcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZpdDgyMTNfcGNpX2RyaXZlcik7CiB9CiAKIG1vZHVsZV9pbml0KGl0ODIxM19pZGVfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9wY2kvaXQ4MjF4LmMgYi9kcml2ZXJzL2lkZS9wY2kvaXQ4MjF4LmMKaW5kZXggNDZlZGQwOC4uOTk1ZTE4YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvcGNpL2l0ODIxeC5jCisrKyBiL2RyaXZlcnMvaWRlL3BjaS9pdDgyMXguYwpAQCAtMTM4LDggKzEzOCw3IEBACiAJc3RydWN0IHBjaV9kZXYgKmRldiA9IHRvX3BjaV9kZXYoaHdpZi0+ZGV2KTsKIAlzdHJ1Y3QgaXQ4MjF4X2RldiAqaXRkZXYgPSBpZGVfZ2V0X2h3aWZkYXRhKGh3aWYpOwogCWludCBjaGFubmVsID0gaHdpZi0+Y2hhbm5lbDsKLQlpbnQgdW5pdCA9IGRyaXZlLT5zZWxlY3QuYi51bml0OwotCXU4IGNvbmY7CisJdTggdW5pdCA9IGRyaXZlLT5kbiAmIDEsIGNvbmY7CiAKIAkvKiBQcm9ncmFtIFVETUEgdGltaW5nIGJpdHMgKi8KIAlpZihpdGRldi0+Y2xvY2tfbW9kZSA9PSBBVEFfNjYpCkBAIC0xNjgsMTMgKzE2NywxMSBAQAogCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKIAlzdHJ1Y3QgcGNpX2RldiAqZGV2ID0gdG9fcGNpX2Rldihod2lmLT5kZXYpOwogCXN0cnVjdCBpdDgyMXhfZGV2ICppdGRldiA9IGlkZV9nZXRfaHdpZmRhdGEoaHdpZik7CisJaWRlX2RyaXZlX3QgKnBhaXI7CisJaW50IGNsb2NrLCBhbHRjbG9jaywgc2VsID0gMDsKKwl1OCB1bml0ID0gZHJpdmUtPmRuICYgMSwgdjsKIAotCXU4IHVuaXQgPSBkcml2ZS0+c2VsZWN0LmIudW5pdDsKLQlpZGVfZHJpdmVfdCAqcGFpciA9ICZod2lmLT5kcml2ZXNbMS11bml0XTsKLQotCWludCBjbG9jaywgYWx0Y2xvY2s7Ci0JdTggdjsKLQlpbnQgc2VsID0gMDsKKwlwYWlyID0gJmh3aWYtPmRyaXZlc1sxIC0gdW5pdF07CiAKIAlpZihpdGRldi0+d2FudFswXVswXSA+IGl0ZGV2LT53YW50WzFdWzBdKSB7CiAJCWNsb2NrID0gaXRkZXYtPndhbnRbMF1bMV07CkBAIC0yNDAsMTYgKzIzNywxNyBAQAogCiBzdGF0aWMgdm9pZCBpdDgyMXhfc2V0X3Bpb19tb2RlKGlkZV9kcml2ZV90ICpkcml2ZSwgY29uc3QgdTggcGlvKQogewotCWlkZV9od2lmX3QgKmh3aWYJPSBkcml2ZS0+aHdpZjsKKwlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7CiAJc3RydWN0IGl0ODIxeF9kZXYgKml0ZGV2ID0gaWRlX2dldF9od2lmZGF0YShod2lmKTsKLQlpbnQgdW5pdCA9IGRyaXZlLT5zZWxlY3QuYi51bml0OwotCWlkZV9kcml2ZV90ICpwYWlyID0gJmh3aWYtPmRyaXZlc1sxIC0gdW5pdF07Ci0JdTggc2V0X3BpbyA9IHBpbzsKKwlpZGVfZHJpdmVfdCAqcGFpcjsKKwl1OCB1bml0ID0gZHJpdmUtPmRuICYgMSwgc2V0X3BpbyA9IHBpbzsKIAogCS8qIFNwZWMgc2F5cyA4OSByZWYgZHJpdmVyIHVzZXMgODggKi8KIAlzdGF0aWMgdTE2IHBpb190aW1pbmdzW109IHsgMHhBQTg4LCAweEEzODIsIDB4QTE4MSwgMHgzMzMyLCAweDMxMjEgfTsKIAlzdGF0aWMgdTggcGlvX3dhbnRbXSAgICA9IHsgQVRBXzY2LCBBVEFfNjYsIEFUQV82NiwgQVRBXzY2LCBBVEFfQU5ZIH07CiAKKwlwYWlyID0gJmh3aWYtPmRyaXZlc1sxIC0gdW5pdF07CisKIAkvKgogCSAqIENvbXB1dGUgdGhlIGJlc3QgUElPIG1vZGUgd2UgY2FuIGZvciBhIGdpdmVuIGRldmljZS4gV2UgbXVzdAogCSAqIHBpY2sgYSBzcGVlZCB0aGF0IGRvZXMgbm90IGNhdXNlIHByb2JsZW1zIHdpdGggdGhlIG90aGVyIGRldmljZQpAQCAtMjg2LDkgKzI4NCw3IEBACiAJaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOwogCXN0cnVjdCBwY2lfZGV2ICpkZXYgPSB0b19wY2lfZGV2KGh3aWYtPmRldik7CiAJc3RydWN0IGl0ODIxeF9kZXYgKml0ZGV2ID0gKHZvaWQgKilpZGVfZ2V0X2h3aWZkYXRhKGh3aWYpOwotCWludCB1bml0ID0gZHJpdmUtPnNlbGVjdC5iLnVuaXQ7Ci0JaW50IGNoYW5uZWwgPSBod2lmLT5jaGFubmVsOwotCXU4IGNvbmY7CisJdTggdW5pdCA9IGRyaXZlLT5kbiAmIDEsIGNoYW5uZWwgPSBod2lmLT5jaGFubmVsLCBjb25mOwogCiAJc3RhdGljIHUxNiBkbWFbXQk9IHsgMHg4ODY2LCAweDMyMjIsIDB4MzEyMSB9OwogCXN0YXRpYyB1OCBtd2RtYV93YW50W10JPSB7IEFUQV9BTlksIEFUQV82NiwgQVRBX0FOWSB9OwpAQCAtMzI1LDkgKzMyMSw3IEBACiAJaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOwogCXN0cnVjdCBwY2lfZGV2ICpkZXYgPSB0b19wY2lfZGV2KGh3aWYtPmRldik7CiAJc3RydWN0IGl0ODIxeF9kZXYgKml0ZGV2ID0gaWRlX2dldF9od2lmZGF0YShod2lmKTsKLQlpbnQgdW5pdCA9IGRyaXZlLT5zZWxlY3QuYi51bml0OwotCWludCBjaGFubmVsID0gaHdpZi0+Y2hhbm5lbDsKLQl1OCBjb25mOworCXU4IHVuaXQgPSBkcml2ZS0+ZG4gJiAxLCBjaGFubmVsID0gaHdpZi0+Y2hhbm5lbCwgY29uZjsKIAogCXN0YXRpYyB1MTYgdWRtYVtdCT0geyAweDQ0MzMsIDB4NDIzMSwgMHgzMTIxLCAweDIxMjEsIDB4MTExMSwgMHgyMjExLCAweDExMTEgfTsKIAlzdGF0aWMgdTggdWRtYV93YW50W10JPSB7IEFUQV9BTlksIEFUQV81MCwgQVRBX0FOWSwgQVRBXzY2LCBBVEFfNjYsIEFUQV81MCwgQVRBXzY2IH07CkBAIC0zNjksNyArMzYzLDggQEAKIHsKIAlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7CiAJc3RydWN0IGl0ODIxeF9kZXYgKml0ZGV2ID0gaWRlX2dldF9od2lmZGF0YShod2lmKTsKLQlpbnQgdW5pdCA9IGRyaXZlLT5zZWxlY3QuYi51bml0OworCXU4IHVuaXQgPSBkcml2ZS0+ZG4gJiAxOworCiAJaWYoaXRkZXYtPm13ZG1hW3VuaXRdICE9IE1XRE1BX09GRikKIAkJaXQ4MjF4X3Byb2dyYW0oZHJpdmUsIGl0ZGV2LT5td2RtYVt1bml0XSk7CiAJZWxzZSBpZihpdGRldi0+dWRtYVt1bml0XSAhPSBVRE1BX09GRiAmJiBpdGRldi0+dGltaW5nMTApCkBAIC0zODksOSArMzg0LDEwIEBACiBzdGF0aWMgaW50IGl0ODIxeF9kbWFfZW5kKGlkZV9kcml2ZV90ICpkcml2ZSkKIHsKIAlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7Ci0JaW50IHVuaXQgPSBkcml2ZS0+c2VsZWN0LmIudW5pdDsKIAlzdHJ1Y3QgaXQ4MjF4X2RldiAqaXRkZXYgPSBpZGVfZ2V0X2h3aWZkYXRhKGh3aWYpOwotCWludCByZXQgPSBfX2lkZV9kbWFfZW5kKGRyaXZlKTsKKwlpbnQgcmV0ID0gaWRlX2RtYV9lbmQoZHJpdmUpOworCXU4IHVuaXQgPSBkcml2ZS0+ZG4gJiAxOworCiAJaWYoaXRkZXYtPm13ZG1hW3VuaXRdICE9IE1XRE1BX09GRikKIAkJaXQ4MjF4X3Byb2dyYW0oZHJpdmUsIGl0ZGV2LT5waW9bdW5pdF0pOwogCXJldHVybiByZXQ7CkBAIC00NTQsNyArNDUwLDcgQEAKIAkJICoJSVJRIG1hc2sgYXMgd2UgbWF5IHdlbGwgYmUgaW4gUElPIChlZyByZXYgMHgxMCkKIAkJICoJZm9yIG5vdyBhbmQgd2Uga25vdyB1bm1hc2tpbmcgaXMgc2FmZSBvbiB0aGlzIGNoaXBzZXQuCiAJCSAqLwotCQlkcml2ZS0+dW5tYXNrID0gMTsKKwkJZHJpdmUtPmRldl9mbGFncyB8PSBJREVfREZMQUdfVU5NQVNLOwogCX0gZWxzZSB7CiAJLyoKIAkgKglQZXJmb3JtIGZpeHVwcyBvbiBzbWFydCBtb2RlLiBXZSBuZWVkIHRvICJsb3NlIiBzb21lCkBAIC02ODAsNyArNjc2LDcgQEAKIAogTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIGl0ODIxeF9wY2lfdGJsKTsKIAotc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGRyaXZlciA9IHsKK3N0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBpdDgyMXhfcGNpX2RyaXZlciA9IHsKIAkubmFtZQkJPSAiSVRFODIxeCBJREUiLAogCS5pZF90YWJsZQk9IGl0ODIxeF9wY2lfdGJsLAogCS5wcm9iZQkJPSBpdDgyMXhfaW5pdF9vbmUsCkBAIC02OTEsMTIgKzY4NywxMiBAQAogCiBzdGF0aWMgaW50IF9faW5pdCBpdDgyMXhfaWRlX2luaXQodm9pZCkKIHsKLQlyZXR1cm4gaWRlX3BjaV9yZWdpc3Rlcl9kcml2ZXIoJmRyaXZlcik7CisJcmV0dXJuIGlkZV9wY2lfcmVnaXN0ZXJfZHJpdmVyKCZpdDgyMXhfcGNpX2RyaXZlcik7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBpdDgyMXhfaWRlX2V4aXQodm9pZCkKIHsKLQlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJmRyaXZlcik7CisJcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZpdDgyMXhfcGNpX2RyaXZlcik7CiB9CiAKIG1vZHVsZV9pbml0KGl0ODIxeF9pZGVfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9wY2kvam1pY3Jvbi5jIGIvZHJpdmVycy9pZGUvcGNpL2ptaWNyb24uYwppbmRleCBhY2Q2NDcxLi45YTY4NDMzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9wY2kvam1pY3Jvbi5jCisrKyBiL2RyaXZlcnMvaWRlL3BjaS9qbWljcm9uLmMKQEAgLTE0OSw3ICsxNDksNyBAQAogCiBNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgam1pY3Jvbl9wY2lfdGJsKTsKIAotc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGRyaXZlciA9IHsKK3N0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBqbWljcm9uX3BjaV9kcml2ZXIgPSB7CiAJLm5hbWUJCT0gIkpNaWNyb24gSURFIiwKIAkuaWRfdGFibGUJPSBqbWljcm9uX3BjaV90YmwsCiAJLnByb2JlCQk9IGptaWNyb25faW5pdF9vbmUsCkBAIC0xNjAsMTIgKzE2MCwxMiBAQAogCiBzdGF0aWMgaW50IF9faW5pdCBqbWljcm9uX2lkZV9pbml0KHZvaWQpCiB7Ci0JcmV0dXJuIGlkZV9wY2lfcmVnaXN0ZXJfZHJpdmVyKCZkcml2ZXIpOworCXJldHVybiBpZGVfcGNpX3JlZ2lzdGVyX2RyaXZlcigmam1pY3Jvbl9wY2lfZHJpdmVyKTsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IGptaWNyb25faWRlX2V4aXQodm9pZCkKIHsKLQlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJmRyaXZlcik7CisJcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZqbWljcm9uX3BjaV9kcml2ZXIpOwogfQogCiBtb2R1bGVfaW5pdChqbWljcm9uX2lkZV9pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL3BjaS9uczg3NDE1LmMgYi9kcml2ZXJzL2lkZS9wY2kvbnM4NzQxNS5jCmluZGV4IDUzYmQ2NDUuLjEzNzg5MDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL3BjaS9uczg3NDE1LmMKKysrIGIvZHJpdmVycy9pZGUvcGNpL25zODc0MTUuYwpAQCAtMTM3LDcgKzEzNyw3IEBACiBzdGF0aWMgdW5zaWduZWQgaW50IG5zODc0MTVfY291bnQgPSAwLCBuczg3NDE1X2NvbnRyb2xbTUFYX0hXSUZTXSA9IHsgMCB9OwogCiAvKgotICogVGhpcyByb3V0aW5lIGVpdGhlciBlbmFibGVzL2Rpc2FibGVzIChhY2NvcmRpbmcgdG8gZHJpdmUtPnByZXNlbnQpCisgKiBUaGlzIHJvdXRpbmUgZWl0aGVyIGVuYWJsZXMvZGlzYWJsZXMgKGFjY29yZGluZyB0byBJREVfREZMQUdfUFJFU0VOVCkKICAqIHRoZSBJUlEgYXNzb2NpYXRlZCB3aXRoIHRoZSBwb3J0IChIV0lGKGRyaXZlKSksCiAgKiBhbmQgc2VsZWN0cyBlaXRoZXIgUElPIG9yIERNQSBoYW5kc2hha2luZyBmb3IgdGhlIG5leHQgSS9PIG9wZXJhdGlvbi4KICAqLwpAQCAtMTUzLDExICsxNTMsMTUgQEAKIAogCS8qIEFkanVzdCBJUlEgZW5hYmxlIGJpdCAqLwogCWJpdCA9IDEgPDwgKDggKyBod2lmLT5jaGFubmVsKTsKLQluZXcgPSBkcml2ZS0+cHJlc2VudCA/IChuZXcgJiB+Yml0KSA6IChuZXcgfCBiaXQpOworCisJaWYgKGRyaXZlLT5kZXZfZmxhZ3MgJiBJREVfREZMQUdfUFJFU0VOVCkKKwkJbmV3ICY9IH5iaXQ7CisJZWxzZQorCQluZXcgfD0gYml0OwogCiAJLyogU2VsZWN0IFBJTyBvciBETUEsIERNQSBtYXkgb25seSBiZSBzZWxlY3RlZCBmb3Igb25lIGRyaXZlL2NoYW5uZWwuICovCi0JYml0ICAgPSAxIDw8ICgyMCArIGRyaXZlLT5zZWxlY3QuYi51bml0ICAgICAgICsgKGh3aWYtPmNoYW5uZWwgPDwgMSkpOwotCW90aGVyID0gMSA8PCAoMjAgKyAoMSAtIGRyaXZlLT5zZWxlY3QuYi51bml0KSArIChod2lmLT5jaGFubmVsIDw8IDEpKTsKKwliaXQgICA9IDEgPDwgKDIwICsgKGRyaXZlLT5kbiAmIDEpICsgKGh3aWYtPmNoYW5uZWwgPDwgMSkpOworCW90aGVyID0gMSA8PCAoMjAgKyAoMSAtIChkcml2ZS0+ZG4gJiAxKSkgKyAoaHdpZi0+Y2hhbm5lbCA8PCAxKSk7CiAJbmV3ID0gdXNlX2RtYSA/ICgobmV3ICYgfm90aGVyKSB8IGJpdCkgOiAobmV3ICYgfmJpdCk7CiAKIAlpZiAobmV3ICE9ICpvbGQpIHsKQEAgLTE4Nyw3ICsxOTEsOCBAQAogCiBzdGF0aWMgdm9pZCBuczg3NDE1X3NlbGVjdHByb2MgKGlkZV9kcml2ZV90ICpkcml2ZSkKIHsKLQluczg3NDE1X3ByZXBhcmVfZHJpdmUgKGRyaXZlLCBkcml2ZS0+dXNpbmdfZG1hKTsKKwluczg3NDE1X3ByZXBhcmVfZHJpdmUoZHJpdmUsCisJCQkgICAgICAhIShkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX1VTSU5HX0RNQSkpOwogfQogCiBzdGF0aWMgaW50IG5zODc0MTVfZG1hX2VuZChpZGVfZHJpdmVfdCAqZHJpdmUpCkBAIC0zMzQsNyArMzM5LDcgQEAKIH07CiBNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgbnM4NzQxNV9wY2lfdGJsKTsKIAotc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGRyaXZlciA9IHsKK3N0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBuczg3NDE1X3BjaV9kcml2ZXIgPSB7CiAJLm5hbWUJCT0gIk5TODc0MTVfSURFIiwKIAkuaWRfdGFibGUJPSBuczg3NDE1X3BjaV90YmwsCiAJLnByb2JlCQk9IG5zODc0MTVfaW5pdF9vbmUsCkBAIC0zNDUsMTIgKzM1MCwxMiBAQAogCiBzdGF0aWMgaW50IF9faW5pdCBuczg3NDE1X2lkZV9pbml0KHZvaWQpCiB7Ci0JcmV0dXJuIGlkZV9wY2lfcmVnaXN0ZXJfZHJpdmVyKCZkcml2ZXIpOworCXJldHVybiBpZGVfcGNpX3JlZ2lzdGVyX2RyaXZlcigmbnM4NzQxNV9wY2lfZHJpdmVyKTsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IG5zODc0MTVfaWRlX2V4aXQodm9pZCkKIHsKLQlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJmRyaXZlcik7CisJcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZuczg3NDE1X3BjaV9kcml2ZXIpOwogfQogCiBtb2R1bGVfaW5pdChuczg3NDE1X2lkZV9pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL3BjaS9vcHRpNjIxLmMgYi9kcml2ZXJzL2lkZS9wY2kvb3B0aTYyMS5jCmluZGV4IDNkZTExZGQuLjYwNDhlZGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL3BjaS9vcHRpNjIxLmMKKysrIGIvZHJpdmVycy9pZGUvcGNpL29wdGk2MjEuYwpAQCAtMTc5LDcgKzE3OSw3IEBACiAJbWlzYyA9IGFkZHJfdGltaW5nc1tjbGtdW2FkZHJfcGlvXTsKIAogCS8qIHNlbGVjdCBJbmRleC0wLzEgZm9yIFJlZ2lzdGVyLUEvQiAqLwotCXdyaXRlX3JlZyhkcml2ZS0+c2VsZWN0LmIudW5pdCwgTUlTQ19SRUcpOworCXdyaXRlX3JlZyhkcml2ZS0+ZG4gJiAxLCBNSVNDX1JFRyk7CiAJLyogc2V0IHJlYWQgY3ljbGUgdGltaW5ncyAqLwogCXdyaXRlX3JlZyh0aW0sIFJFQURfUkVHKTsKIAkvKiBzZXQgd3JpdGUgY3ljbGUgdGltaW5ncyAqLwpAQCAtMjIwLDcgKzIyMCw3IEBACiB9OwogTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIG9wdGk2MjFfcGNpX3RibCk7CiAKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBkcml2ZXIgPSB7CitzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgb3B0aTYyMV9wY2lfZHJpdmVyID0gewogCS5uYW1lCQk9ICJPcHRpNjIxX0lERSIsCiAJLmlkX3RhYmxlCT0gb3B0aTYyMV9wY2lfdGJsLAogCS5wcm9iZQkJPSBvcHRpNjIxX2luaXRfb25lLApAQCAtMjMxLDEyICsyMzEsMTIgQEAKIAogc3RhdGljIGludCBfX2luaXQgb3B0aTYyMV9pZGVfaW5pdCh2b2lkKQogewotCXJldHVybiBpZGVfcGNpX3JlZ2lzdGVyX2RyaXZlcigmZHJpdmVyKTsKKwlyZXR1cm4gaWRlX3BjaV9yZWdpc3Rlcl9kcml2ZXIoJm9wdGk2MjFfcGNpX2RyaXZlcik7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBvcHRpNjIxX2lkZV9leGl0KHZvaWQpCiB7Ci0JcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZkcml2ZXIpOworCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmb3B0aTYyMV9wY2lfZHJpdmVyKTsKIH0KIAogbW9kdWxlX2luaXQob3B0aTYyMV9pZGVfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9wY2kvcGRjMjAyeHhfbmV3LmMgYi9kcml2ZXJzL2lkZS9wY2kvcGRjMjAyeHhfbmV3LmMKaW5kZXggOWZjNTk5Ni4uMjExYWU0NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvcGNpL3BkYzIwMnh4X25ldy5jCisrKyBiL2RyaXZlcnMvaWRlL3BjaS9wZGMyMDJ4eF9uZXcuYwpAQCAtNTYxLDcgKzU2MSw3IEBACiB9OwogTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIHBkYzIwMm5ld19wY2lfdGJsKTsKIAotc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGRyaXZlciA9IHsKK3N0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBwZGMyMDJuZXdfcGNpX2RyaXZlciA9IHsKIAkubmFtZQkJPSAiUHJvbWlzZV9JREUiLAogCS5pZF90YWJsZQk9IHBkYzIwMm5ld19wY2lfdGJsLAogCS5wcm9iZQkJPSBwZGMyMDJuZXdfaW5pdF9vbmUsCkBAIC01NzIsMTIgKzU3MiwxMiBAQAogCiBzdGF0aWMgaW50IF9faW5pdCBwZGMyMDJuZXdfaWRlX2luaXQodm9pZCkKIHsKLQlyZXR1cm4gaWRlX3BjaV9yZWdpc3Rlcl9kcml2ZXIoJmRyaXZlcik7CisJcmV0dXJuIGlkZV9wY2lfcmVnaXN0ZXJfZHJpdmVyKCZwZGMyMDJuZXdfcGNpX2RyaXZlcik7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBwZGMyMDJuZXdfaWRlX2V4aXQodm9pZCkKIHsKLQlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJmRyaXZlcik7CisJcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZwZGMyMDJuZXdfcGNpX2RyaXZlcik7CiB9CiAKIG1vZHVsZV9pbml0KHBkYzIwMm5ld19pZGVfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9wY2kvcGRjMjAyeHhfb2xkLmMgYi9kcml2ZXJzL2lkZS9wY2kvcGRjMjAyeHhfb2xkLmMKaW5kZXggY2I2ZDJhMC4uNzk5NTU3YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvcGNpL3BkYzIwMnh4X29sZC5jCisrKyBiL2RyaXZlcnMvaWRlL3BjaS9wZGMyMDJ4eF9vbGQuYwpAQCAtMTY4LDcgKzE2OCw3IEBACiB7CiAJaWYgKGRyaXZlLT5jdXJyZW50X3NwZWVkID4gWEZFUl9VRE1BXzIpCiAJCXBkY19vbGRfZW5hYmxlXzY2TUh6X2Nsb2NrKGRyaXZlLT5od2lmKTsKLQlpZiAoZHJpdmUtPm1lZGlhICE9IGlkZV9kaXNrIHx8IGRyaXZlLT5hZGRyZXNzaW5nID09IDEpIHsKKwlpZiAoZHJpdmUtPm1lZGlhICE9IGlkZV9kaXNrIHx8IChkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX0xCQTQ4KSkgewogCQlzdHJ1Y3QgcmVxdWVzdCAqcnEJPSBIV0dST1VQKGRyaXZlKS0+cnE7CiAJCWlkZV9od2lmX3QgKmh3aWYJPSBIV0lGKGRyaXZlKTsKIAkJdW5zaWduZWQgbG9uZyBoaWdoXzE2CT0gaHdpZi0+ZXh0cmFfYmFzZSAtIDE2OwpAQCAtMTg4LDcgKzE4OCw3IEBACiAKIHN0YXRpYyBpbnQgcGRjMjAyeHhfZG1hX2VuZChpZGVfZHJpdmVfdCAqZHJpdmUpCiB7Ci0JaWYgKGRyaXZlLT5tZWRpYSAhPSBpZGVfZGlzayB8fCBkcml2ZS0+YWRkcmVzc2luZyA9PSAxKSB7CisJaWYgKGRyaXZlLT5tZWRpYSAhPSBpZGVfZGlzayB8fCAoZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19MQkE0OCkpIHsKIAkJaWRlX2h3aWZfdCAqaHdpZgk9IEhXSUYoZHJpdmUpOwogCQl1bnNpZ25lZCBsb25nIGhpZ2hfMTYJPSBod2lmLT5leHRyYV9iYXNlIC0gMTY7CiAJCXVuc2lnbmVkIGxvbmcgYXRhcGlfcmVnCT0gaGlnaF8xNiArIChod2lmLT5jaGFubmVsID8gMHgyNCA6IDB4MjApOwpAQCAtMjAwLDcgKzIwMCw3IEBACiAJfQogCWlmIChkcml2ZS0+Y3VycmVudF9zcGVlZCA+IFhGRVJfVURNQV8yKQogCQlwZGNfb2xkX2Rpc2FibGVfNjZNSHpfY2xvY2soZHJpdmUtPmh3aWYpOwotCXJldHVybiBfX2lkZV9kbWFfZW5kKGRyaXZlKTsKKwlyZXR1cm4gaWRlX2RtYV9lbmQoZHJpdmUpOwogfQogCiBzdGF0aWMgaW50IHBkYzIwMnh4X2RtYV90ZXN0X2lycShpZGVfZHJpdmVfdCAqZHJpdmUpCkBAIC0zMzMsNyArMzMzLDcgQEAKIAkuZG1hX3NldHVwCQk9IGlkZV9kbWFfc2V0dXAsCiAJLmRtYV9leGVjX2NtZAkJPSBpZGVfZG1hX2V4ZWNfY21kLAogCS5kbWFfc3RhcnQJCT0gaWRlX2RtYV9zdGFydCwKLQkuZG1hX2VuZAkJPSBfX2lkZV9kbWFfZW5kLAorCS5kbWFfZW5kCQk9IGlkZV9kbWFfZW5kLAogCS5kbWFfdGVzdF9pcnEJCT0gcGRjMjAyeHhfZG1hX3Rlc3RfaXJxLAogCS5kbWFfbG9zdF9pcnEJCT0gcGRjMjAyeHhfZG1hX2xvc3RfaXJxLAogCS5kbWFfdGltZW91dAkJPSBwZGMyMDJ4eF9kbWFfdGltZW91dCwKQEAgLTQyNiw3ICs0MjYsNyBAQAogfTsKIE1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBwZGMyMDJ4eF9wY2lfdGJsKTsKIAotc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGRyaXZlciA9IHsKK3N0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBwZGMyMDJ4eF9wY2lfZHJpdmVyID0gewogCS5uYW1lCQk9ICJQcm9taXNlX09sZF9JREUiLAogCS5pZF90YWJsZQk9IHBkYzIwMnh4X3BjaV90YmwsCiAJLnByb2JlCQk9IHBkYzIwMnh4X2luaXRfb25lLApAQCAtNDM3LDEyICs0MzcsMTIgQEAKIAogc3RhdGljIGludCBfX2luaXQgcGRjMjAyeHhfaWRlX2luaXQodm9pZCkKIHsKLQlyZXR1cm4gaWRlX3BjaV9yZWdpc3Rlcl9kcml2ZXIoJmRyaXZlcik7CisJcmV0dXJuIGlkZV9wY2lfcmVnaXN0ZXJfZHJpdmVyKCZwZGMyMDJ4eF9wY2lfZHJpdmVyKTsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IHBkYzIwMnh4X2lkZV9leGl0KHZvaWQpCiB7Ci0JcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZkcml2ZXIpOworCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmcGRjMjAyeHhfcGNpX2RyaXZlcik7CiB9CiAKIG1vZHVsZV9pbml0KHBkYzIwMnh4X2lkZV9pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL3BjaS9waWl4LmMgYi9kcml2ZXJzL2lkZS9wY2kvcGlpeC5jCmluZGV4IGEwNmMwM2YuLmQ2M2Y5ZmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL3BjaS9waWl4LmMKKysrIGIvZHJpdmVycy9pZGUvcGNpL3BpaXguYwpAQCAtMjE1LDE3ICsyMTUsMjYgQEAKIH0KIAogLyoqCi0gKglwaWl4X2RtYV9jbGVhcl9pcnEJLQljbGVhciBCTURNQSBzdGF0dXMKLSAqCUBkcml2ZTogSURFIGRyaXZlIHRvIGNsZWFyCisgKglpY2hfY2xlYXJfaXJxCS0JY2xlYXIgQk1ETUEgc3RhdHVzCisgKglAZHJpdmU6IElERSBkcml2ZQogICoKLSAqCUNhbGxlZCBmcm9tIGlkZV9pbnRyKCkgZm9yIFBJTyBpbnRlcnJ1cHRzCi0gKgl0byBjbGVhciBCTURNQSBzdGF0dXMgYXMgbmVlZGVkIGJ5IElDSHgKKyAqCUlDSHggY29udG9sbGVycyBzZXQgRE1BIElOVFIgbm8gbWF0dGVyIERNQSBvciBQSU8uCisgKglCTURNQSBzdGF0dXMgbWlnaHQgbmVlZCB0byBiZSBjbGVhcmVkIGV2ZW4gZm9yCisgKglQSU8gaW50ZXJydXB0cyB0byBwcmV2ZW50IHNwdXJpb3VzL2xvc3QgSVJRLgogICovCi1zdGF0aWMgdm9pZCBwaWl4X2RtYV9jbGVhcl9pcnEoaWRlX2RyaXZlX3QgKmRyaXZlKQorc3RhdGljIHZvaWQgaWNoX2NsZWFyX2lycShpZGVfZHJpdmVfdCAqZHJpdmUpCiB7CiAJaWRlX2h3aWZfdCAqaHdpZiA9IEhXSUYoZHJpdmUpOwogCXU4IGRtYV9zdGF0OwogCisJLyoKKwkgKiBpZGVfZG1hX2VuZCgpIG5lZWRzIEJNRE1BIHN0YXR1cyBmb3IgZXJyb3IgY2hlY2tpbmcuCisJICogU28sIHNraXAgY2xlYXJpbmcgQk1ETUEgc3RhdHVzIGhlcmUgYW5kIGxlYXZlIGl0CisJICogdG8gaWRlX2RtYV9lbmQoKSBpZiB0aGlzIGlzIERNQSBpbnRlcnJ1cHQuCisJICovCisJaWYgKGRyaXZlLT53YWl0aW5nX2Zvcl9kbWEgfHwgaHdpZi0+ZG1hX2Jhc2UgPT0gMCkKKwkJcmV0dXJuOworCiAJLyogY2xlYXIgdGhlIElOVFIgJiBFUlJPUiBiaXRzICovCiAJZG1hX3N0YXQgPSBpbmIoaHdpZi0+ZG1hX2Jhc2UgKyBBVEFfRE1BX1NUQVRVUyk7CiAJLyogU2hvdWxkIHdlIGZvcmNlIHRoZSBiaXQgYXMgd2VsbCA/ICovCkBAIC0yNDksNiArMjU4LDcgQEAKIAl7IDB4MjdERiwgMHgxMDI1LCAweDAxMTAgfSwJLyogSUNINyBvbiBBY2VyIDM2ODJXTE1pICovCiAJeyAweDI3REYsIDB4MTA0MywgMHgxMjY3IH0sCS8qIElDSDcgb24gQXN1cyBXNUYgKi8KIAl7IDB4MjdERiwgMHgxMDNDLCAweDMwQTEgfSwJLyogSUNINyBvbiBIUCBDb21wYXEgbmMyNDAwICovCisJeyAweDI3REYsIDB4MTA3MSwgMHhEMjIxIH0sCS8qIElDSDcgb24gSGVyY3VsZXMgRUMtOTAwICovCiAJeyAweDI0Q0EsIDB4MTAyNSwgMHgwMDYxIH0sCS8qIElDSDQgb24gQWNlciBBc3BpcmUgMjAyM1dMTWkgKi8KIAl7IDB4MjY1MywgMHgxMDQzLCAweDgyRDggfSwJLyogSUNINk0gb24gQXN1cyBFZWUgNzAxICovCiAJLyogZW5kIG1hcmtlciAqLwpAQCAtMjkzLDIxICszMDMsMTkgQEAKIAkJaHdpZi0+dWx0cmFfbWFzayA9IGh3aWYtPm13ZG1hX21hc2sgPSBod2lmLT5zd2RtYV9tYXNrID0gMDsKIH0KIAotc3RhdGljIHZvaWQgX19kZXZpbml0IGluaXRfaHdpZl9pY2goaWRlX2h3aWZfdCAqaHdpZikKLXsKLQlpbml0X2h3aWZfcGlpeChod2lmKTsKLQotCS8qIElDSHggbmVlZCB0byBjbGVhciB0aGUgQk1ETUEgc3RhdHVzIGZvciBhbGwgaW50ZXJydXB0cyAqLwotCWlmIChod2lmLT5kbWFfYmFzZSkKLQkJaHdpZi0+aWRlX2RtYV9jbGVhcl9pcnEgPSAmcGlpeF9kbWFfY2xlYXJfaXJxOwotfQotCiBzdGF0aWMgY29uc3Qgc3RydWN0IGlkZV9wb3J0X29wcyBwaWl4X3BvcnRfb3BzID0gewogCS5zZXRfcGlvX21vZGUJCT0gcGlpeF9zZXRfcGlvX21vZGUsCiAJLnNldF9kbWFfbW9kZQkJPSBwaWl4X3NldF9kbWFfbW9kZSwKIAkuY2FibGVfZGV0ZWN0CQk9IHBpaXhfY2FibGVfZGV0ZWN0LAogfTsKIAorc3RhdGljIGNvbnN0IHN0cnVjdCBpZGVfcG9ydF9vcHMgaWNoX3BvcnRfb3BzID0geworCS5zZXRfcGlvX21vZGUJCT0gcGlpeF9zZXRfcGlvX21vZGUsCisJLnNldF9kbWFfbW9kZQkJPSBwaWl4X3NldF9kbWFfbW9kZSwKKwkuY2xlYXJfaXJxCQk9IGljaF9jbGVhcl9pcnEsCisJLmNhYmxlX2RldGVjdAkJPSBwaWl4X2NhYmxlX2RldGVjdCwKK307CisKICNpZm5kZWYgQ09ORklHX0lBNjQKICAjZGVmaW5lIElERV9IRkxBR1NfUElJWCBJREVfSEZMQUdfTEVHQUNZX0lSUVMKICNlbHNlCkBAIC0zMzEsOSArMzM5LDkgQEAKIAl7IFwKIAkJLm5hbWUJCT0gRFJWX05BTUUsIFwKIAkJLmluaXRfY2hpcHNldAk9IGluaXRfY2hpcHNldF9pY2gsIFwKLQkJLmluaXRfaHdpZgk9IGluaXRfaHdpZl9pY2gsIFwKKwkJLmluaXRfaHdpZgk9IGluaXRfaHdpZl9waWl4LCBcCiAJCS5lbmFibGViaXRzCT0ge3sweDQxLDB4ODAsMHg4MH0sIHsweDQzLDB4ODAsMHg4MH19LCBcCi0JCS5wb3J0X29wcwk9ICZwaWl4X3BvcnRfb3BzLCBcCisJCS5wb3J0X29wcwk9ICZpY2hfcG9ydF9vcHMsIFwKIAkJLmhvc3RfZmxhZ3MJPSBJREVfSEZMQUdTX1BJSVgsIFwKIAkJLnBpb19tYXNrCT0gQVRBX1BJTzQsIFwKIAkJLnN3ZG1hX21hc2sJPSBBVEFfU1dETUEyX09OTFksIFwKQEAgLTQ0NCw3ICs0NTIsNyBAQAogfTsKIE1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBwaWl4X3BjaV90YmwpOwogCi1zdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgZHJpdmVyID0geworc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIHBpaXhfcGNpX2RyaXZlciA9IHsKIAkubmFtZQkJPSAiUElJWF9JREUiLAogCS5pZF90YWJsZQk9IHBpaXhfcGNpX3RibCwKIAkucHJvYmUJCT0gcGlpeF9pbml0X29uZSwKQEAgLTQ1NiwxMiArNDY0LDEyIEBACiBzdGF0aWMgaW50IF9faW5pdCBwaWl4X2lkZV9pbml0KHZvaWQpCiB7CiAJcGlpeF9jaGVja180NTBueCgpOwotCXJldHVybiBpZGVfcGNpX3JlZ2lzdGVyX2RyaXZlcigmZHJpdmVyKTsKKwlyZXR1cm4gaWRlX3BjaV9yZWdpc3Rlcl9kcml2ZXIoJnBpaXhfcGNpX2RyaXZlcik7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBwaWl4X2lkZV9leGl0KHZvaWQpCiB7Ci0JcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZkcml2ZXIpOworCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmcGlpeF9wY2lfZHJpdmVyKTsKIH0KIAogbW9kdWxlX2luaXQocGlpeF9pZGVfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9wY2kvcnoxMDAwLmMgYi9kcml2ZXJzL2lkZS9wY2kvcnoxMDAwLmMKaW5kZXggYzExN2EwNi4uN2RhZjAxMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvcGNpL3J6MTAwMC5jCisrKyBiL2RyaXZlcnMvaWRlL3BjaS9yejEwMDAuYwpAQCAtNTksNyArNTksNyBAQAogfTsKIE1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCByejEwMDBfcGNpX3RibCk7CiAKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBkcml2ZXIgPSB7CitzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgcnoxMDAwX3BjaV9kcml2ZXIgPSB7CiAJLm5hbWUJCT0gIlJaMTAwMF9JREUiLAogCS5pZF90YWJsZQk9IHJ6MTAwMF9wY2lfdGJsLAogCS5wcm9iZQkJPSByejEwMDBfaW5pdF9vbmUsCkBAIC02OCwxMiArNjgsMTIgQEAKIAogc3RhdGljIGludCBfX2luaXQgcnoxMDAwX2lkZV9pbml0KHZvaWQpCiB7Ci0JcmV0dXJuIGlkZV9wY2lfcmVnaXN0ZXJfZHJpdmVyKCZkcml2ZXIpOworCXJldHVybiBpZGVfcGNpX3JlZ2lzdGVyX2RyaXZlcigmcnoxMDAwX3BjaV9kcml2ZXIpOwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgcnoxMDAwX2lkZV9leGl0KHZvaWQpCiB7Ci0JcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZkcml2ZXIpOworCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmcnoxMDAwX3BjaV9kcml2ZXIpOwogfQogCiBtb2R1bGVfaW5pdChyejEwMDBfaWRlX2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvcGNpL3NjMTIwMC5jIGIvZHJpdmVycy9pZGUvcGNpL3NjMTIwMC5jCmluZGV4IGJkYzFmZWQuLmYxYTg3NTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL3BjaS9zYzEyMDAuYworKysgYi9kcml2ZXJzL2lkZS9wY2kvc2MxMjAwLmMKQEAgLTEyNiw3ICsxMjYsNiBAQAogewogCWlkZV9od2lmX3QJCSpod2lmID0gSFdJRihkcml2ZSk7CiAJc3RydWN0IHBjaV9kZXYJCSpkZXYgPSB0b19wY2lfZGV2KGh3aWYtPmRldik7Ci0JaW50CQkJdW5pdCA9IGRyaXZlLT5zZWxlY3QuYi51bml0OwogCXVuc2lnbmVkIGludAkJcmVnLCB0aW1pbmdzOwogCXVuc2lnbmVkIHNob3J0CQlwY2lfY2xvY2s7CiAJdW5zaWduZWQgaW50CQliYXNlcmVnID0gaHdpZi0+Y2hhbm5lbCA/IDB4NTAgOiAweDQwOwpAQCAtMTU1LDcgKzE1NCw3IEBACiAJZWxzZQogCQl0aW1pbmdzID0gbXdkbWFfdGltaW5nW3BjaV9jbG9ja11bbW9kZSAtIFhGRVJfTVdfRE1BXzBdOwogCi0JaWYgKHVuaXQgPT0gMCkgewkJCS8qIGFyZSB3ZSBjb25maWd1cmluZyBkcml2ZTA/ICovCisJaWYgKChkcml2ZS0+ZG4gJiAxKSA9PSAwKSB7CiAJCXBjaV9yZWFkX2NvbmZpZ19kd29yZChkZXYsIGJhc2VyZWcgKyA0LCAmcmVnKTsKIAkJdGltaW5ncyB8PSByZWcgJiAweDgwMDAwMDAwOwkvKiBwcmVzZXJ2ZSBQSU8gZm9ybWF0IGJpdCAqLwogCQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKGRldiwgYmFzZXJlZyArIDQsIHRpbWluZ3MpOwpAQCAtMjE2LDcgKzIxNSw4IEBACiAJaWYgKG1vZGUgIT0gLTEpIHsKIAkJcHJpbnRrKCJTQzEyMDA6ICVzOiBjaGFuZ2luZyAoVSlETUEgbW9kZVxuIiwgZHJpdmUtPm5hbWUpOwogCQlpZGVfZG1hX29mZl9xdWlldGx5KGRyaXZlKTsKLQkJaWYgKGlkZV9zZXRfZG1hX21vZGUoZHJpdmUsIG1vZGUpID09IDAgJiYgZHJpdmUtPnVzaW5nX2RtYSkKKwkJaWYgKGlkZV9zZXRfZG1hX21vZGUoZHJpdmUsIG1vZGUpID09IDAgJiYKKwkJICAgIChkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX1VTSU5HX0RNQSkpCiAJCQlod2lmLT5kbWFfb3BzLT5kbWFfaG9zdF9zZXQoZHJpdmUsIDEpOwogCQlyZXR1cm47CiAJfQpAQCAtMzI4LDcgKzMyOCw3IEBACiB9OwogTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIHNjMTIwMF9wY2lfdGJsKTsKIAotc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGRyaXZlciA9IHsKK3N0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBzYzEyMDBfcGNpX2RyaXZlciA9IHsKIAkubmFtZQkJPSAiU0MxMjAwX0lERSIsCiAJLmlkX3RhYmxlCT0gc2MxMjAwX3BjaV90YmwsCiAJLnByb2JlCQk9IHNjMTIwMF9pbml0X29uZSwKQEAgLTM0MSwxMiArMzQxLDEyIEBACiAKIHN0YXRpYyBpbnQgX19pbml0IHNjMTIwMF9pZGVfaW5pdCh2b2lkKQogewotCXJldHVybiBpZGVfcGNpX3JlZ2lzdGVyX2RyaXZlcigmZHJpdmVyKTsKKwlyZXR1cm4gaWRlX3BjaV9yZWdpc3Rlcl9kcml2ZXIoJnNjMTIwMF9wY2lfZHJpdmVyKTsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IHNjMTIwMF9pZGVfZXhpdCh2b2lkKQogewotCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmZHJpdmVyKTsKKwlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJnNjMTIwMF9wY2lfZHJpdmVyKTsKIH0KIAogbW9kdWxlX2luaXQoc2MxMjAwX2lkZV9pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL3BjaS9zY2NfcGF0YS5jIGIvZHJpdmVycy9pZGUvcGNpL3NjY19wYXRhLmMKaW5kZXggZTkyYTg3NC4uNDlmMTYzYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvcGNpL3NjY19wYXRhLmMKKysrIGIvZHJpdmVycy9pZGUvcGNpL3NjY19wYXRhLmMKQEAgLTI5MSw3ICsyOTEsNyBAQAogc3RhdGljIHZvaWQgc2NjX2RtYV9ob3N0X3NldChpZGVfZHJpdmVfdCAqZHJpdmUsIGludCBvbikKIHsKIAlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7Ci0JdTggdW5pdCA9IChkcml2ZS0+c2VsZWN0LmIudW5pdCAmIDB4MDEpOworCXU4IHVuaXQgPSBkcml2ZS0+ZG4gJiAxOwogCXU4IGRtYV9zdGF0ID0gc2NjX2lkZV9pbmIoaHdpZi0+ZG1hX2Jhc2UgKyA0KTsKIAogCWlmIChvbikKQEAgLTM1Myw3ICszNTMsNiBAQAogCiAJLyogc3RhcnQgRE1BICovCiAJc2NjX2lkZV9vdXRiKGRtYV9jbWQgfCAxLCBod2lmLT5kbWFfYmFzZSk7Ci0JaHdpZi0+ZG1hID0gMTsKIAl3bWIoKTsKIH0KIApAQCAtMzc0LDcgKzM3Myw2IEBACiAJLyogcHVyZ2UgRE1BIG1hcHBpbmdzICovCiAJaWRlX2Rlc3Ryb3lfZG1hdGFibGUoZHJpdmUpOwogCS8qIHZlcmlmeSBnb29kIERNQSBzdGF0dXMgKi8KLQlod2lmLT5kbWEgPSAwOwogCXdtYigpOwogCXJldHVybiAoZG1hX3N0YXQgJiA3KSAhPSA0ID8gKDB4MTAgfCBkbWFfc3RhdCkgOiAwOwogfQpAQCAtNTExLDkgKzUwOSw2IEBACiAJaWYgKGludF9zdGF0ICYgSU5UU1RTX0lPSVJRUykKIAkJcmV0dXJuIDE7CiAKLQlpZiAoIWRyaXZlLT53YWl0aW5nX2Zvcl9kbWEpCi0JCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiAoJXMpIGNhbGxlZCB3aGlsZSBub3Qgd2FpdGluZ1xuIiwKLQkJCWRyaXZlLT5uYW1lLCBfX2Z1bmNfXyk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTYyMiw3ICs2MTcsNiBAQAogCXVuc2lnbmVkIGxvbmcgaW50bWFza19wb3J0OwogCXVuc2lnbmVkIGxvbmcgbW9kZV9wb3J0OwogCXVuc2lnbmVkIGxvbmcgZWNtb2RlX3BvcnQ7Ci0JdW5zaWduZWQgbG9uZyBkbWFfc3RhdHVzX3BvcnQ7CiAJdTMyIHJlZyA9IDA7CiAJc3RydWN0IHNjY19wb3J0cyAqcG9ydHM7CiAJaW50IHJjOwpAQCAtNjQyLDcgKzYzNiw2IEBACiAJaW50bWFza19wb3J0ID0gZG1hX2Jhc2UgKyAweDAxMDsKIAltb2RlX3BvcnQgPSBjdGxfYmFzZSArIDB4MDI0OwogCWVjbW9kZV9wb3J0ID0gY3RsX2Jhc2UgKyAweGYwMDsKLQlkbWFfc3RhdHVzX3BvcnQgPSBkbWFfYmFzZSArIDB4MDA0OwogCiAJLyogY29udHJvbGxlciBpbml0aWFsaXphdGlvbiAqLwogCXJlZyA9IDA7CkBAIC03MTAsNyArNzAzLDcgQEAKIAkJc2NjX2lkZV9vdXRiKHRmLT5sYmFoLCBpb19wb3J0cy0+bGJhaF9hZGRyKTsKIAogCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfREVWSUNFKQotCQlzY2NfaWRlX291dGIoKHRmLT5kZXZpY2UgJiBISUhJKSB8IGRyaXZlLT5zZWxlY3QuYWxsLAorCQlzY2NfaWRlX291dGIoKHRmLT5kZXZpY2UgJiBISUhJKSB8IGRyaXZlLT5zZWxlY3QsCiAJCQkgICAgIGlvX3BvcnRzLT5kZXZpY2VfYWRkcik7CiB9CiAKQEAgLTgyNiw2ICs4MTksMTIgQEAKIAlpbml0X21taW9faW9wc19zY2MoaHdpZik7CiB9CiAKK3N0YXRpYyBpbnQgX19kZXZpbml0IHNjY19pbml0X2RtYShpZGVfaHdpZl90ICpod2lmLAorCQkJCSAgY29uc3Qgc3RydWN0IGlkZV9wb3J0X2luZm8gKmQpCit7CisJcmV0dXJuIGlkZV9hbGxvY2F0ZV9kbWFfZW5naW5lKGh3aWYpOworfQorCiBzdGF0aWMgdTggc2NjX2NhYmxlX2RldGVjdChpZGVfaHdpZl90ICpod2lmKQogewogCXJldHVybiBBVEFfQ0JMX1BBVEE4MDsKQEAgLTg0Miw4ICs4NDEsNiBAQAogCiBzdGF0aWMgdm9pZCBfX2RldmluaXQgaW5pdF9od2lmX3NjYyhpZGVfaHdpZl90ICpod2lmKQogewotCXN0cnVjdCBzY2NfcG9ydHMgKnBvcnRzID0gaWRlX2dldF9od2lmZGF0YShod2lmKTsKLQogCS8qIFBURVJBREQgKi8KIAlvdXRfYmUzMigodm9pZCBfX2lvbWVtICopKGh3aWYtPmRtYV9iYXNlICsgMHgwMTgpLCBod2lmLT5kbWF0YWJsZV9kbWEpOwogCkBAIC04OTAsNiArODg3LDcgQEAKICAgewkJCQkJCQlcCiAgICAgICAubmFtZQkJPSBuYW1lX3N0ciwJCQlcCiAgICAgICAuaW5pdF9pb3BzCT0gaW5pdF9pb3BzX3NjYywJCVwKKyAgICAgIC5pbml0X2RtYQkJPSBzY2NfaW5pdF9kbWEsCQkJXAogICAgICAgLmluaXRfaHdpZgk9IGluaXRfaHdpZl9zY2MsCQlcCiAgICAgICAudHBfb3BzCQk9ICZzY2NfdHBfb3BzLAkJXAogICAgICAgLnBvcnRfb3BzCQk9ICZzY2NfcG9ydF9vcHMsCQlcCkBAIC05MjcsMTMgKzkyNSw2IEBACiB7CiAJc3RydWN0IHNjY19wb3J0cyAqcG9ydHMgPSBwY2lfZ2V0X2RydmRhdGEoZGV2KTsKIAlzdHJ1Y3QgaWRlX2hvc3QgKmhvc3QgPSBwb3J0cy0+aG9zdDsKLQlpZGVfaHdpZl90ICpod2lmID0gaG9zdC0+cG9ydHNbMF07Ci0KLQlpZiAoaHdpZi0+ZG1hdGFibGVfY3B1KSB7Ci0JCXBjaV9mcmVlX2NvbnNpc3RlbnQoZGV2LCBQUkRfRU5UUklFUyAqIFBSRF9CWVRFUywKLQkJCQkgICAgaHdpZi0+ZG1hdGFibGVfY3B1LCBod2lmLT5kbWF0YWJsZV9kbWEpOwotCQlod2lmLT5kbWF0YWJsZV9jcHUgPSBOVUxMOwotCX0KIAogCWlkZV9ob3N0X3JlbW92ZShob3N0KTsKIApAQCAtOTQ5LDcgKzk0MCw3IEBACiB9OwogTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIHNjY19wY2lfdGJsKTsKIAotc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGRyaXZlciA9IHsKK3N0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBzY2NfcGNpX2RyaXZlciA9IHsKIAkubmFtZSA9ICJTQ0MgSURFIiwKIAkuaWRfdGFibGUgPSBzY2NfcGNpX3RibCwKIAkucHJvYmUgPSBzY2NfaW5pdF9vbmUsCkBAIC05NTgsMTQgKzk0OSwxNCBAQAogCiBzdGF0aWMgaW50IHNjY19pZGVfaW5pdCh2b2lkKQogewotCXJldHVybiBpZGVfcGNpX3JlZ2lzdGVyX2RyaXZlcigmZHJpdmVyKTsKKwlyZXR1cm4gaWRlX3BjaV9yZWdpc3Rlcl9kcml2ZXIoJnNjY19wY2lfZHJpdmVyKTsKIH0KIAogbW9kdWxlX2luaXQoc2NjX2lkZV9pbml0KTsKIC8qIC0tIE5vIGV4aXQgY29kZT8KIHN0YXRpYyB2b2lkIHNjY19pZGVfZXhpdCh2b2lkKQogewotCWlkZV9wY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJmRyaXZlcik7CisJaWRlX3BjaV91bnJlZ2lzdGVyX2RyaXZlcigmc2NjX3BjaV9kcml2ZXIpOwogfQogbW9kdWxlX2V4aXQoc2NjX2lkZV9leGl0KTsKICAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvcGNpL3NlcnZlcndvcmtzLmMgYi9kcml2ZXJzL2lkZS9wY2kvc2VydmVyd29ya3MuYwppbmRleCAzZGZmMmFlLi40MzdiYzkxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9wY2kvc2VydmVyd29ya3MuYworKysgYi9kcml2ZXJzL2lkZS9wY2kvc2VydmVyd29ya3MuYwpAQCAtMTUzLDcgKzE1Myw3IEBACiAKIAlpZGVfaHdpZl90ICpod2lmCT0gSFdJRihkcml2ZSk7CiAJc3RydWN0IHBjaV9kZXYgKmRldgk9IHRvX3BjaV9kZXYoaHdpZi0+ZGV2KTsKLQl1OCB1bml0CQkJPSAoZHJpdmUtPnNlbGVjdC5iLnVuaXQgJiAweDAxKTsKKwl1OCB1bml0CQkJPSBkcml2ZS0+ZG4gJiAxOwogCiAJdTggdWx0cmFfZW5hYmxlCSA9IDAsIHVsdHJhX3RpbWluZyA9IDAsIGRtYV90aW1pbmcgPSAwOwogCkBAIC00NDMsNyArNDQzLDcgQEAKIH07CiBNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgc3Z3a3NfcGNpX3RibCk7CiAKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBkcml2ZXIgPSB7CitzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgc3Z3a3NfcGNpX2RyaXZlciA9IHsKIAkubmFtZQkJPSAiU2VydmVyd29ya3NfSURFIiwKIAkuaWRfdGFibGUJPSBzdndrc19wY2lfdGJsLAogCS5wcm9iZQkJPSBzdndrc19pbml0X29uZSwKQEAgLTQ1NCwxMiArNDU0LDEyIEBACiAKIHN0YXRpYyBpbnQgX19pbml0IHN2d2tzX2lkZV9pbml0KHZvaWQpCiB7Ci0JcmV0dXJuIGlkZV9wY2lfcmVnaXN0ZXJfZHJpdmVyKCZkcml2ZXIpOworCXJldHVybiBpZGVfcGNpX3JlZ2lzdGVyX2RyaXZlcigmc3Z3a3NfcGNpX2RyaXZlcik7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBzdndrc19pZGVfZXhpdCh2b2lkKQogewotCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmZHJpdmVyKTsKKwlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJnN2d2tzX3BjaV9kcml2ZXIpOwogfQogCiBtb2R1bGVfaW5pdChzdndrc19pZGVfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9wY2kvc2dpaW9jNC5jIGIvZHJpdmVycy9pZGUvcGNpL3NnaWlvYzQuYwppbmRleCAxMDE3ZmI0Li44YWY5YjIzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9wY2kvc2dpaW9jNC5jCisrKyBiL2RyaXZlcnMvaWRlL3BjaS9zZ2lpb2M0LmMKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChjKSAyMDAzLTIwMDYgU2lsaWNvbiBHcmFwaGljcywgSW5jLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBNb250YVZpc3RhIFNvZnR3YXJlLCBJbmMuCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKICAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB2ZXJzaW9uIDIgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCkBAIC0xMDAsMTggKzEwMSw4IEBACiAJZm9yIChpID0gMDsgaSA8PSA3OyBpKyspCiAJCWh3LT5pb19wb3J0c19hcnJheVtpXSA9IHJlZyArIGkgKiA0OwogCi0JaWYgKGN0cmxfcG9ydCkKLQkJaHctPmlvX3BvcnRzLmN0bF9hZGRyID0gY3RybF9wb3J0OwotCi0JaWYgKGlycV9wb3J0KQotCQlody0+aW9fcG9ydHMuaXJxX2FkZHIgPSBpcnFfcG9ydDsKLX0KLQotc3RhdGljIHZvaWQKLXNnaWlvYzRfbWFza3Byb2MoaWRlX2RyaXZlX3QgKiBkcml2ZSwgaW50IG1hc2spCi17Ci0Jd3JpdGViKEFUQV9ERVZDVExfT0JTIHwgKG1hc2sgPyAyIDogMCksCi0JICAgICAgICh2b2lkIF9faW9tZW0gKilkcml2ZS0+aHdpZi0+aW9fcG9ydHMuY3RsX2FkZHIpOworCWh3LT5pb19wb3J0cy5jdGxfYWRkciA9IGN0cmxfcG9ydDsKKwlody0+aW9fcG9ydHMuaXJxX2FkZHIgPSBpcnFfcG9ydDsKIH0KIAogc3RhdGljIGludApAQCAtMTUwLDcgKzE0MSw3IEBACiAJCWludCBjb3VudCA9IDA7CiAKIAkJc3RhdCA9IHNnaWlvYzRfcmVhZF9zdGF0dXMoaHdpZik7Ci0JCXdoaWxlICgoc3RhdCAmIDB4ODApICYmIChjb3VudCsrIDwgMTAwKSkgeworCQl3aGlsZSAoKHN0YXQgJiBBVEFfQlVTWSkgJiYgKGNvdW50KysgPCAxMDApKSB7CiAJCQl1ZGVsYXkoMSk7CiAJCQlzdGF0ID0gc2dpaW9jNF9yZWFkX3N0YXR1cyhod2lmKTsKIAkJfQpAQCAtMzA5LDE2ICszMDAsMTQgQEAKIAl1bnNpZ25lZCBsb25nIHBvcnQgPSBod2lmLT5pb19wb3J0cy5zdGF0dXNfYWRkcjsKIAl1OCByZWcgPSAodTgpIHJlYWRiKCh2b2lkIF9faW9tZW0gKikgcG9ydCk7CiAKLQlpZiAoKHBvcnQgJiAweEZGRikgPT0gMHgxMUMpIHsJLyogU3RhdHVzIHJlZ2lzdGVyIG9mIElPQzQgKi8KLQkJaWYgKHJlZyAmIDB4NTEpIHsJLyogTm90IGJ1c3kuLi5jaGVjayBmb3IgaW50ZXJydXB0ICovCi0JCQl1bnNpZ25lZCBsb25nIG90aGVyX2lyID0gcG9ydCAtIDB4MTEwOwotCQkJdW5zaWduZWQgaW50IGludHJfcmVnID0gKHUzMikgcmVhZGwoKHZvaWQgX19pb21lbSAqKSBvdGhlcl9pcik7CisJaWYgKCEocmVnICYgQVRBX0JVU1kpKSB7CS8qIE5vdCBidXN5Li4uIGNoZWNrIGZvciBpbnRlcnJ1cHQgKi8KKwkJdW5zaWduZWQgbG9uZyBvdGhlcl9pciA9IHBvcnQgLSAweDExMDsKKwkJdW5zaWduZWQgaW50IGludHJfcmVnID0gKHUzMikgcmVhZGwoKHZvaWQgX19pb21lbSAqKSBvdGhlcl9pcik7CiAKLQkJCS8qIENsZWFyIHRoZSBJbnRlcnJ1cHQsIEVycm9yIGJpdHMgb24gdGhlIElPQzQgKi8KLQkJCWlmIChpbnRyX3JlZyAmIDB4MDMpIHsKLQkJCQl3cml0ZWwoMHgwMywgKHZvaWQgX19pb21lbSAqKSBvdGhlcl9pcik7Ci0JCQkJaW50cl9yZWcgPSAodTMyKSByZWFkbCgodm9pZCBfX2lvbWVtICopIG90aGVyX2lyKTsKLQkJCX0KKwkJLyogQ2xlYXIgdGhlIEludGVycnVwdCwgRXJyb3IgYml0cyBvbiB0aGUgSU9DNCAqLworCQlpZiAoaW50cl9yZWcgJiAweDAzKSB7CisJCQl3cml0ZWwoMHgwMywgKHZvaWQgX19pb21lbSAqKSBvdGhlcl9pcik7CisJCQlpbnRyX3JlZyA9ICh1MzIpIHJlYWRsKCh2b2lkIF9faW9tZW0gKikgb3RoZXJfaXIpOwogCQl9CiAJfQogCkBAIC0zMzEsNDMgKzMyMCwyOSBAQAogewogCXN0cnVjdCBwY2lfZGV2ICpkZXYgPSB0b19wY2lfZGV2KGh3aWYtPmRldik7CiAJdW5zaWduZWQgbG9uZyBkbWFfYmFzZSA9IHBjaV9yZXNvdXJjZV9zdGFydChkZXYsIDApICsgSU9DNF9ETUFfT0ZGU0VUOwotCXZvaWQgX19pb21lbSAqdmlydF9kbWFfYmFzZTsKIAlpbnQgbnVtX3BvcnRzID0gc2l6ZW9mIChpb2M0X2RtYV9yZWdzX3QpOwogCXZvaWQgKnBhZDsKIAotCWlmIChkbWFfYmFzZSA9PSAwKQotCQlyZXR1cm4gLTE7CisJcHJpbnRrKEtFUk5fSU5GTyAiICAgICVzOiBNTUlPLURNQVxuIiwgaHdpZi0+bmFtZSk7CiAKLQlwcmludGsoS0VSTl9JTkZPICIlczogQk0tRE1BIGF0IDB4JTA0bHgtMHglMDRseFxuIiwgaHdpZi0+bmFtZSwKLQkgICAgICAgZG1hX2Jhc2UsIGRtYV9iYXNlICsgbnVtX3BvcnRzIC0gMSk7Ci0KLQlpZiAoIXJlcXVlc3RfbWVtX3JlZ2lvbihkbWFfYmFzZSwgbnVtX3BvcnRzLCBod2lmLT5uYW1lKSkgewotCQlwcmludGsoS0VSTl9FUlIKLQkJICAgICAgICIlcyglcykgLS0gRVJST1IsIEFkZHJlc3NlcyAweCVwIHRvIDB4JXAgIgotCQkgICAgICAgIkFMUkVBRFkgaW4gdXNlXG4iLAotCQkgICAgICAgX19mdW5jX18sIGh3aWYtPm5hbWUsICh2b2lkICopIGRtYV9iYXNlLAotCQkgICAgICAgKHZvaWQgKikgZG1hX2Jhc2UgKyBudW1fcG9ydHMgLSAxKTsKKwlpZiAocmVxdWVzdF9tZW1fcmVnaW9uKGRtYV9iYXNlLCBudW1fcG9ydHMsIGh3aWYtPm5hbWUpID09IE5VTEwpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlcyglcykgLS0gRVJST1I6IGFkZHJlc3NlcyAweCUwOGx4IHRvIDB4JTA4bHggIgorCQkgICAgICAgImFscmVhZHkgaW4gdXNlXG4iLCBfX2Z1bmNfXywgaHdpZi0+bmFtZSwKKwkJICAgICAgIGRtYV9iYXNlLCBkbWFfYmFzZSArIG51bV9wb3J0cyAtIDEpOwogCQlyZXR1cm4gLTE7CiAJfQogCi0JdmlydF9kbWFfYmFzZSA9IGlvcmVtYXAoZG1hX2Jhc2UsIG51bV9wb3J0cyk7Ci0JaWYgKHZpcnRfZG1hX2Jhc2UgPT0gTlVMTCkgewotCQlwcmludGsoS0VSTl9FUlIKLQkJICAgICAgICIlcyglcykgLS0gRVJST1IsIFVuYWJsZSB0byBtYXAgYWRkcmVzc2VzIDB4JWx4IHRvIDB4JWx4XG4iLAotCQkgICAgICAgX19mdW5jX18sIGh3aWYtPm5hbWUsIGRtYV9iYXNlLCBkbWFfYmFzZSArIG51bV9wb3J0cyAtIDEpOwotCQlnb3RvIGRtYV9yZW1hcF9mYWlsdXJlOwotCX0KLQlod2lmLT5kbWFfYmFzZSA9ICh1bnNpZ25lZCBsb25nKSB2aXJ0X2RtYV9iYXNlOwotCi0JaHdpZi0+ZG1hdGFibGVfY3B1ID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQoZGV2LAotCQkJCQkgIElPQzRfUFJEX0VOVFJJRVMgKiBJT0M0X1BSRF9CWVRFUywKLQkJCQkJICAmaHdpZi0+ZG1hdGFibGVfZG1hKTsKLQotCWlmICghaHdpZi0+ZG1hdGFibGVfY3B1KQotCQlnb3RvIGRtYV9wY2lfYWxsb2NfZmFpbHVyZTsKKwlod2lmLT5kbWFfYmFzZSA9ICh1bnNpZ25lZCBsb25nKWh3aWYtPmlvX3BvcnRzLmlycV9hZGRyICsKKwkJCSBJT0M0X0RNQV9PRkZTRVQ7CiAKIAlod2lmLT5zZ19tYXhfbmVudHMgPSBJT0M0X1BSRF9FTlRSSUVTOwogCisJaHdpZi0+cHJkX21heF9uZW50cyA9IElPQzRfUFJEX0VOVFJJRVM7CisJaHdpZi0+cHJkX2VudF9zaXplID0gSU9DNF9QUkRfQllURVM7CisKKwlpZiAoaWRlX2FsbG9jYXRlX2RtYV9lbmdpbmUoaHdpZikpCisJCWdvdG8gZG1hX3BjaV9hbGxvY19mYWlsdXJlOworCiAJcGFkID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQoZGV2LCBJT0M0X0lERV9DQUNIRUxJTkVfU0laRSwKIAkJCQkgICAoZG1hX2FkZHJfdCAqKSZod2lmLT5leHRyYV9iYXNlKTsKIAlpZiAocGFkKSB7CkBAIC0zNzUsMTggKzM1MCwxMyBAQAogCQlyZXR1cm4gMDsKIAl9CiAKLQlwY2lfZnJlZV9jb25zaXN0ZW50KGRldiwgSU9DNF9QUkRfRU5UUklFUyAqIElPQzRfUFJEX0JZVEVTLAotCQkJICAgIGh3aWYtPmRtYXRhYmxlX2NwdSwgaHdpZi0+ZG1hdGFibGVfZG1hKTsKLQlwcmludGsoS0VSTl9JTkZPCi0JICAgICAgICIlcygpIC0tIEVycm9yISBVbmFibGUgdG8gYWxsb2NhdGUgRE1BIE1hcHMgZm9yIGRyaXZlICVzXG4iLAorCWlkZV9yZWxlYXNlX2RtYV9lbmdpbmUoaHdpZik7CisKKwlwcmludGsoS0VSTl9FUlIgIiVzKCVzKSAtLSBFUlJPUjogVW5hYmxlIHRvIGFsbG9jYXRlIERNQSBtYXBzXG4iLAogCSAgICAgICBfX2Z1bmNfXywgaHdpZi0+bmFtZSk7Ci0JcHJpbnRrKEtFUk5fSU5GTwotCSAgICAgICAiQ2hhbmdpbmcgZnJvbSBETUEgdG8gUElPIG1vZGUgZm9yIERyaXZlICVzXG4iLCBod2lmLT5uYW1lKTsKKwlwcmludGsoS0VSTl9JTkZPICIlczogY2hhbmdpbmcgZnJvbSBETUEgdG8gUElPIG1vZGUiLCBod2lmLT5uYW1lKTsKIAogZG1hX3BjaV9hbGxvY19mYWlsdXJlOgotCWlvdW5tYXAodmlydF9kbWFfYmFzZSk7Ci0KLWRtYV9yZW1hcF9mYWlsdXJlOgogCXJlbGVhc2VfbWVtX3JlZ2lvbihkbWFfYmFzZSwgbnVtX3BvcnRzKTsKIAogCXJldHVybiAtMTsKQEAgLTU2OCw4ICs1MzgsNiBAQAogCS5zZXRfZG1hX21vZGUJCT0gc2dpaW9jNF9zZXRfZG1hX21vZGUsCiAJLyogcmVzZXQgRE1BIGVuZ2luZSwgY2xlYXIgSVJRcyAqLwogCS5yZXNldHByb2MJCT0gc2dpaW9jNF9yZXNldHByb2MsCi0JLyogbWFzayBvbi9vZmYgTklFTiByZWdpc3RlciAqLwotCS5tYXNrcHJvYwkJPSBzZ2lpb2M0X21hc2twcm9jLAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBpZGVfZG1hX29wcyBzZ2lpb2M0X2RtYV9vcHMgPSB7CkBAIC02MTcsMTQgKzU4NSwxMiBAQAogCWlycXBvcnQgPSAodW5zaWduZWQgbG9uZykgdmlydF9iYXNlICsgSU9DNF9JTlRSX09GRlNFVDsKIAogCWNtZF9waHlzX2Jhc2UgPSBiYXIwICsgSU9DNF9DTURfT0ZGU0VUOwotCWlmICghcmVxdWVzdF9tZW1fcmVnaW9uKGNtZF9waHlzX2Jhc2UsIElPQzRfQ01EX0NUTF9CTEtfU0laRSwKLQkgICAgRFJWX05BTUUpKSB7Ci0JCXByaW50ayhLRVJOX0VSUgotCQkJIiVzICVzOiAtLSBFUlJPUiwgQWRkcmVzc2VzICIKLQkJCSIweCVwIHRvIDB4JXAgQUxSRUFEWSBpbiB1c2VcbiIsCi0JCSAgICAgICBEUlZfTkFNRSwgcGNpX25hbWUoZGV2KSwgKHZvaWQgKiljbWRfcGh5c19iYXNlLAotCQkgICAgICAgKHZvaWQgKikgY21kX3BoeXNfYmFzZSArIElPQzRfQ01EX0NUTF9CTEtfU0laRSk7Ci0JCXJldHVybiAtRU5PTUVNOworCWlmIChyZXF1ZXN0X21lbV9yZWdpb24oY21kX3BoeXNfYmFzZSwgSU9DNF9DTURfQ1RMX0JMS19TSVpFLAorCQkJICAgICAgIERSVl9OQU1FKSA9PSBOVUxMKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXMgJXMgLS0gRVJST1I6IGFkZHJlc3NlcyAweCUwOGx4IHRvIDB4JTA4bHggIgorCQkgICAgICAgImFscmVhZHkgaW4gdXNlXG4iLCBEUlZfTkFNRSwgcGNpX25hbWUoZGV2KSwKKwkJICAgICAgIGNtZF9waHlzX2Jhc2UsIGNtZF9waHlzX2Jhc2UgKyBJT0M0X0NNRF9DVExfQkxLX1NJWkUpOworCQlyZXR1cm4gLUVCVVNZOwogCX0KIAogCS8qIEluaXRpYWxpemUgdGhlIElPIHJlZ2lzdGVycyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvcGNpL3NpaW1hZ2UuYyBiL2RyaXZlcnMvaWRlL3BjaS9zaWltYWdlLmMKaW5kZXggMTc0YTg3My4uZWI0ZmFmOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvcGNpL3NpaW1hZ2UuYworKysgYi9kcml2ZXJzL2lkZS9wY2kvc2lpbWFnZS5jCkBAIC0xMTYsMTMgKzExNiwxNCBAQAogewogCWlkZV9od2lmX3QgKmh3aWYJPSBIV0lGKGRyaXZlKTsKIAl1bnNpZ25lZCBsb25nIGJhc2UJPSAodW5zaWduZWQgbG9uZylod2lmLT5od2lmX2RhdGE7CisJdTggdW5pdAkJCT0gZHJpdmUtPmRuICYgMTsKIAogCWJhc2UgKz0gMHhBMCArIHI7CiAJaWYgKGh3aWYtPmhvc3RfZmxhZ3MgJiBJREVfSEZMQUdfTU1JTykKIAkJYmFzZSArPSBod2lmLT5jaGFubmVsIDw8IDY7CiAJZWxzZQogCQliYXNlICs9IGh3aWYtPmNoYW5uZWwgPDwgNDsKLQliYXNlIHw9IGRyaXZlLT5zZWxlY3QuYi51bml0IDw8IGRyaXZlLT5zZWxlY3QuYi51bml0OworCWJhc2UgfD0gdW5pdCA8PCB1bml0OwogCXJldHVybiBiYXNlOwogfQogCkBAIC0yNTUsNyArMjU2LDcgQEAKIAl1OCBhZGRyX21hc2sJCT0gaHdpZi0+Y2hhbm5lbCA/IChtbWlvID8gMHhGNCA6IDB4ODQpCiAJCQkJCQk6IChtbWlvID8gMHhCNCA6IDB4ODApOwogCXU4IG1vZGUJCQk9IDA7Ci0JdTggdW5pdAkJCT0gZHJpdmUtPnNlbGVjdC5iLnVuaXQ7CisJdTggdW5pdAkJCT0gZHJpdmUtPmRuICYgMTsKIAogCS8qIHRyaW0gKnRhc2tmaWxlKiBQSU8gdG8gdGhlIHNsb3dlc3Qgb2YgdGhlIG1hc3Rlci9zbGF2ZSAqLwogCWlmIChwYWlyKSB7CkBAIC0zMDEsOSArMzAyLDkgQEAKIAogCWlkZV9od2lmX3QgKmh3aWYJPSBIV0lGKGRyaXZlKTsKIAlzdHJ1Y3QgcGNpX2RldiAqZGV2CT0gdG9fcGNpX2Rldihod2lmLT5kZXYpOwotCXUxNiB1bHRyYSA9IDAsIG11bHRpCT0gMDsKLQl1OCBtb2RlID0gMCwgdW5pdAk9IGRyaXZlLT5zZWxlY3QuYi51bml0OwogCXVuc2lnbmVkIGxvbmcgYmFzZQk9ICh1bnNpZ25lZCBsb25nKWh3aWYtPmh3aWZfZGF0YTsKKwl1MTYgdWx0cmEgPSAwLCBtdWx0aQk9IDA7CisJdTggbW9kZSA9IDAsIHVuaXQJPSBkcml2ZS0+ZG4gJiAxOwogCXU4IG1taW8JCQk9IChod2lmLT5ob3N0X2ZsYWdzICYgSURFX0hGTEFHX01NSU8pID8gMSA6IDA7CiAJdTggc2NzYyA9IDAsIGFkZHJfbWFzawk9IGh3aWYtPmNoYW5uZWwgPyAobW1pbyA/IDB4RjQgOiAweDg0KQogCQkJCQkJOiAobW1pbyA/IDB4QjQgOiAweDgwKTsKQEAgLTcxMiw3ICs3MTMsNyBAQAogCS5kbWFfc2V0dXAJCT0gaWRlX2RtYV9zZXR1cCwKIAkuZG1hX2V4ZWNfY21kCQk9IGlkZV9kbWFfZXhlY19jbWQsCiAJLmRtYV9zdGFydAkJPSBpZGVfZG1hX3N0YXJ0LAotCS5kbWFfZW5kCQk9IF9faWRlX2RtYV9lbmQsCisJLmRtYV9lbmQJCT0gaWRlX2RtYV9lbmQsCiAJLmRtYV90ZXN0X2lycQkJPSBzaWltYWdlX2RtYV90ZXN0X2lycSwKIAkuZG1hX3RpbWVvdXQJCT0gaWRlX2RtYV90aW1lb3V0LAogCS5kbWFfbG9zdF9pcnEJCT0gaWRlX2RtYV9sb3N0X2lycSwKQEAgLTgyOSw3ICs4MzAsNyBAQAogfTsKIE1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBzaWltYWdlX3BjaV90YmwpOwogCi1zdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgZHJpdmVyID0geworc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIHNpaW1hZ2VfcGNpX2RyaXZlciA9IHsKIAkubmFtZQkJPSAiU2lJX0lERSIsCiAJLmlkX3RhYmxlCT0gc2lpbWFnZV9wY2lfdGJsLAogCS5wcm9iZQkJPSBzaWltYWdlX2luaXRfb25lLApAQCAtODQwLDEyICs4NDEsMTIgQEAKIAogc3RhdGljIGludCBfX2luaXQgc2lpbWFnZV9pZGVfaW5pdCh2b2lkKQogewotCXJldHVybiBpZGVfcGNpX3JlZ2lzdGVyX2RyaXZlcigmZHJpdmVyKTsKKwlyZXR1cm4gaWRlX3BjaV9yZWdpc3Rlcl9kcml2ZXIoJnNpaW1hZ2VfcGNpX2RyaXZlcik7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBzaWltYWdlX2lkZV9leGl0KHZvaWQpCiB7Ci0JcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZkcml2ZXIpOworCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmc2lpbWFnZV9wY2lfZHJpdmVyKTsKIH0KIAogbW9kdWxlX2luaXQoc2lpbWFnZV9pZGVfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9wY2kvc2lzNTUxMy5jIGIvZHJpdmVycy9pZGUvcGNpL3NpczU1MTMuYwppbmRleCA3MzRkZDQxLi5hZDMyZTE4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9wY2kvc2lzNTUxMy5jCisrKyBiL2RyaXZlcnMvaWRlL3BjaS9zaXM1NTEzLmMKQEAgLTYwNSw3ICs2MDUsNyBAQAogfTsKIE1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBzaXM1NTEzX3BjaV90YmwpOwogCi1zdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgZHJpdmVyID0geworc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIHNpczU1MTNfcGNpX2RyaXZlciA9IHsKIAkubmFtZQkJPSAiU0lTX0lERSIsCiAJLmlkX3RhYmxlCT0gc2lzNTUxM19wY2lfdGJsLAogCS5wcm9iZQkJPSBzaXM1NTEzX2luaXRfb25lLApAQCAtNjE2LDEyICs2MTYsMTIgQEAKIAogc3RhdGljIGludCBfX2luaXQgc2lzNTUxM19pZGVfaW5pdCh2b2lkKQogewotCXJldHVybiBpZGVfcGNpX3JlZ2lzdGVyX2RyaXZlcigmZHJpdmVyKTsKKwlyZXR1cm4gaWRlX3BjaV9yZWdpc3Rlcl9kcml2ZXIoJnNpczU1MTNfcGNpX2RyaXZlcik7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBzaXM1NTEzX2lkZV9leGl0KHZvaWQpCiB7Ci0JcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZkcml2ZXIpOworCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmc2lzNTUxM19wY2lfZHJpdmVyKTsKIH0KIAogbW9kdWxlX2luaXQoc2lzNTUxM19pZGVfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9wY2kvc2w4MmMxMDUuYyBiL2RyaXZlcnMvaWRlL3BjaS9zbDgyYzEwNS5jCmluZGV4IDM3YTZiN2IuLjg0ZGMzMzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL3BjaS9zbDgyYzEwNS5jCisrKyBiL2RyaXZlcnMvaWRlL3BjaS9zbDgyYzEwNS5jCkBAIC0yMDcsNyArMjA3LDcgQEAKIAogCURCRygoIiVzKGRyaXZlOiVzKVxuIiwgX19mdW5jX18sIGRyaXZlLT5uYW1lKSk7CiAKLQlyZXQgPSBfX2lkZV9kbWFfZW5kKGRyaXZlKTsKKwlyZXQgPSBpZGVfZG1hX2VuZChkcml2ZSk7CiAKIAlwY2lfd3JpdGVfY29uZmlnX3dvcmQoZGV2LCByZWcsIGRyaXZlLT5kcml2ZV9kYXRhKTsKIApAQCAtMzQ1LDcgKzM0NSw3IEBACiB9OwogTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIHNsODJjMTA1X3BjaV90YmwpOwogCi1zdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgZHJpdmVyID0geworc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIHNsODJjMTA1X3BjaV9kcml2ZXIgPSB7CiAJLm5hbWUJCT0gIlc4MkMxMDVfSURFIiwKIAkuaWRfdGFibGUJPSBzbDgyYzEwNV9wY2lfdGJsLAogCS5wcm9iZQkJPSBzbDgyYzEwNV9pbml0X29uZSwKQEAgLTM1NiwxMiArMzU2LDEyIEBACiAKIHN0YXRpYyBpbnQgX19pbml0IHNsODJjMTA1X2lkZV9pbml0KHZvaWQpCiB7Ci0JcmV0dXJuIGlkZV9wY2lfcmVnaXN0ZXJfZHJpdmVyKCZkcml2ZXIpOworCXJldHVybiBpZGVfcGNpX3JlZ2lzdGVyX2RyaXZlcigmc2w4MmMxMDVfcGNpX2RyaXZlcik7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBzbDgyYzEwNV9pZGVfZXhpdCh2b2lkKQogewotCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmZHJpdmVyKTsKKwlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJnNsODJjMTA1X3BjaV9kcml2ZXIpOwogfQogCiBtb2R1bGVfaW5pdChzbDgyYzEwNV9pZGVfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9wY2kvc2xjOTBlNjYuYyBiL2RyaXZlcnMvaWRlL3BjaS9zbGM5MGU2Ni5jCmluZGV4IGE5NTUxYTEuLjBmNzU5ZTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL3BjaS9zbGM5MGU2Ni5jCisrKyBiL2RyaXZlcnMvaWRlL3BjaS9zbGM5MGU2Ni5jCkBAIC0xNTQsNyArMTU0LDcgQEAKIH07CiBNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgc2xjOTBlNjZfcGNpX3RibCk7CiAKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBkcml2ZXIgPSB7CitzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgc2xjOTBlNjZfcGNpX2RyaXZlciA9IHsKIAkubmFtZQkJPSAiU0xDOTBlNjZfSURFIiwKIAkuaWRfdGFibGUJPSBzbGM5MGU2Nl9wY2lfdGJsLAogCS5wcm9iZQkJPSBzbGM5MGU2Nl9pbml0X29uZSwKQEAgLTE2NSwxMiArMTY1LDEyIEBACiAKIHN0YXRpYyBpbnQgX19pbml0IHNsYzkwZTY2X2lkZV9pbml0KHZvaWQpCiB7Ci0JcmV0dXJuIGlkZV9wY2lfcmVnaXN0ZXJfZHJpdmVyKCZkcml2ZXIpOworCXJldHVybiBpZGVfcGNpX3JlZ2lzdGVyX2RyaXZlcigmc2xjOTBlNjZfcGNpX2RyaXZlcik7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBzbGM5MGU2Nl9pZGVfZXhpdCh2b2lkKQogewotCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmZHJpdmVyKTsKKwlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJnNsYzkwZTY2X3BjaV9kcml2ZXIpOwogfQogCiBtb2R1bGVfaW5pdChzbGM5MGU2Nl9pZGVfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9wY2kvdGM4NmMwMDEuYyBiL2RyaXZlcnMvaWRlL3BjaS90Yzg2YzAwMS5jCmluZGV4IDkyNzI3N2MuLjkzZTJjY2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL3BjaS90Yzg2YzAwMS5jCisrKyBiL2RyaXZlcnMvaWRlL3BjaS90Yzg2YzAwMS5jCkBAIC0xODYsNyArMTg2LDcgQEAKIAkuZG1hX3NldHVwCQk9IGlkZV9kbWFfc2V0dXAsCiAJLmRtYV9leGVjX2NtZAkJPSBpZGVfZG1hX2V4ZWNfY21kLAogCS5kbWFfc3RhcnQJCT0gdGM4NmMwMDFfZG1hX3N0YXJ0LAotCS5kbWFfZW5kCQk9IF9faWRlX2RtYV9lbmQsCisJLmRtYV9lbmQJCT0gaWRlX2RtYV9lbmQsCiAJLmRtYV90ZXN0X2lycQkJPSBpZGVfZG1hX3Rlc3RfaXJxLAogCS5kbWFfbG9zdF9pcnEJCT0gaWRlX2RtYV9sb3N0X2lycSwKIAkuZG1hX3RpbWVvdXQJCT0gaWRlX2RtYV90aW1lb3V0LApAQCAtMjQ1LDcgKzI0NSw3IEBACiB9OwogTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIHRjODZjMDAxX3BjaV90YmwpOwogCi1zdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgZHJpdmVyID0geworc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIHRjODZjMDAxX3BjaV9kcml2ZXIgPSB7CiAJLm5hbWUJCT0gIlRDODZDMDAxIiwKIAkuaWRfdGFibGUJPSB0Yzg2YzAwMV9wY2lfdGJsLAogCS5wcm9iZQkJPSB0Yzg2YzAwMV9pbml0X29uZSwKQEAgLTI1NCwxMiArMjU0LDEyIEBACiAKIHN0YXRpYyBpbnQgX19pbml0IHRjODZjMDAxX2lkZV9pbml0KHZvaWQpCiB7Ci0JcmV0dXJuIGlkZV9wY2lfcmVnaXN0ZXJfZHJpdmVyKCZkcml2ZXIpOworCXJldHVybiBpZGVfcGNpX3JlZ2lzdGVyX2RyaXZlcigmdGM4NmMwMDFfcGNpX2RyaXZlcik7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCB0Yzg2YzAwMV9pZGVfZXhpdCh2b2lkKQogewotCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmZHJpdmVyKTsKKwlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJnRjODZjMDAxX3BjaV9kcml2ZXIpOwogfQogCiBtb2R1bGVfaW5pdCh0Yzg2YzAwMV9pZGVfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9wY2kvdHJpZmxleC5jIGIvZHJpdmVycy9pZGUvcGNpL3RyaWZsZXguYwppbmRleCBiZTg3MTVkLi5iNmZmNDAzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9wY2kvdHJpZmxleC5jCisrKyBiL2RyaXZlcnMvaWRlL3BjaS90cmlmbGV4LmMKQEAgLTM4LDEzICszOCwxMiBAQAogewogCWlkZV9od2lmX3QgKmh3aWYgPSBIV0lGKGRyaXZlKTsKIAlzdHJ1Y3QgcGNpX2RldiAqZGV2ID0gdG9fcGNpX2Rldihod2lmLT5kZXYpOwotCXU4IGNoYW5uZWxfb2Zmc2V0ID0gaHdpZi0+Y2hhbm5lbCA/IDB4NzQgOiAweDcwOwotCXUxNiB0aW1pbmcgPSAwOwogCXUzMiB0cmlmbGV4X3RpbWluZ3MgPSAwOwotCXU4IHVuaXQgPSAoZHJpdmUtPnNlbGVjdC5iLnVuaXQgJiAweDAxKTsKLQkKKwl1MTYgdGltaW5nID0gMDsKKwl1OCBjaGFubmVsX29mZnNldCA9IGh3aWYtPmNoYW5uZWwgPyAweDc0IDogMHg3MCwgdW5pdCA9IGRyaXZlLT5kbiAmIDE7CisKIAlwY2lfcmVhZF9jb25maWdfZHdvcmQoZGV2LCBjaGFubmVsX29mZnNldCwgJnRyaWZsZXhfdGltaW5ncyk7Ci0JCisKIAlzd2l0Y2goc3BlZWQpIHsKIAkJY2FzZSBYRkVSX01XX0RNQV8yOgogCQkJdGltaW5nID0gMHgwMTAzOyAKQEAgLTExNCw3ICsxMTMsNyBAQAogfTsKIE1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCB0cmlmbGV4X3BjaV90YmwpOwogCi1zdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgZHJpdmVyID0geworc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIHRyaWZsZXhfcGNpX2RyaXZlciA9IHsKIAkubmFtZQkJPSAiVFJJRkxFWF9JREUiLAogCS5pZF90YWJsZQk9IHRyaWZsZXhfcGNpX3RibCwKIAkucHJvYmUJCT0gdHJpZmxleF9pbml0X29uZSwKQEAgLTEyNSwxMiArMTI0LDEyIEBACiAKIHN0YXRpYyBpbnQgX19pbml0IHRyaWZsZXhfaWRlX2luaXQodm9pZCkKIHsKLQlyZXR1cm4gaWRlX3BjaV9yZWdpc3Rlcl9kcml2ZXIoJmRyaXZlcik7CisJcmV0dXJuIGlkZV9wY2lfcmVnaXN0ZXJfZHJpdmVyKCZ0cmlmbGV4X3BjaV9kcml2ZXIpOwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgdHJpZmxleF9pZGVfZXhpdCh2b2lkKQogewotCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmZHJpdmVyKTsKKwlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJnRyaWZsZXhfcGNpX2RyaXZlcik7CiB9CiAKIG1vZHVsZV9pbml0KHRyaWZsZXhfaWRlX2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvcGNpL3RybTI5MC5jIGIvZHJpdmVycy9pZGUvcGNpL3RybTI5MC5jCmluZGV4IDRkZmJjNmEuLjc1ZWE2MTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL3BjaS90cm0yOTAuYworKysgYi9kcml2ZXJzL2lkZS9wY2kvdHJtMjkwLmMKQEAgLTE2MSw3ICsxNjEsNyBAQAogCX0KIAogCS8qIGVuYWJsZSBJUlEgaWYgbm90IHByb2JpbmcgKi8KLQlpZiAoZHJpdmUtPnByZXNlbnQpIHsKKwlpZiAoZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19QUkVTRU5UKSB7CiAJCXJlZyA9IGludyhod2lmLT5jb25maWdfZGF0YSArIDMpOwogCQlyZWcgJj0gMHgxMzsKIAkJcmVnICY9IH4oMSA8PCBod2lmLT5jaGFubmVsKTsKQEAgLTE3Myw3ICsxNzMsNyBAQAogCiBzdGF0aWMgdm9pZCB0cm0yOTBfc2VsZWN0cHJvYyAoaWRlX2RyaXZlX3QgKmRyaXZlKQogewotCXRybTI5MF9wcmVwYXJlX2RyaXZlKGRyaXZlLCBkcml2ZS0+dXNpbmdfZG1hKTsKKwl0cm0yOTBfcHJlcGFyZV9kcml2ZShkcml2ZSwgISEoZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19VU0lOR19ETUEpKTsKIH0KIAogc3RhdGljIHZvaWQgdHJtMjkwX2RtYV9leGVjX2NtZChpZGVfZHJpdmVfdCAqZHJpdmUsIHU4IGNvbW1hbmQpCkBAIC0zNTAsNyArMzUwLDcgQEAKIH07CiBNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgdHJtMjkwX3BjaV90YmwpOwogCi1zdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgZHJpdmVyID0geworc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIHRybTI5MF9wY2lfZHJpdmVyID0gewogCS5uYW1lCQk9ICJUUk0yOTBfSURFIiwKIAkuaWRfdGFibGUJPSB0cm0yOTBfcGNpX3RibCwKIAkucHJvYmUJCT0gdHJtMjkwX2luaXRfb25lLApAQCAtMzU5LDEyICszNTksMTIgQEAKIAogc3RhdGljIGludCBfX2luaXQgdHJtMjkwX2lkZV9pbml0KHZvaWQpCiB7Ci0JcmV0dXJuIGlkZV9wY2lfcmVnaXN0ZXJfZHJpdmVyKCZkcml2ZXIpOworCXJldHVybiBpZGVfcGNpX3JlZ2lzdGVyX2RyaXZlcigmdHJtMjkwX3BjaV9kcml2ZXIpOwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgdHJtMjkwX2lkZV9leGl0KHZvaWQpCiB7Ci0JcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZkcml2ZXIpOworCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmdHJtMjkwX3BjaV9kcml2ZXIpOwogfQogCiBtb2R1bGVfaW5pdCh0cm0yOTBfaWRlX2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvcGNpL3ZpYTgyY3h4eC5jIGIvZHJpdmVycy9pZGUvcGNpL3ZpYTgyY3h4eC5jCmluZGV4IGFjYWNkYWEuLjJhODEyZDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL3BjaS92aWE4MmN4eHguYworKysgYi9kcml2ZXJzL2lkZS9wY2kvdmlhODJjeHh4LmMKQEAgLTQ4Nyw3ICs0ODcsNyBAQAogfTsKIE1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCB2aWFfcGNpX3RibCk7CiAKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBkcml2ZXIgPSB7CitzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgdmlhX3BjaV9kcml2ZXIgPSB7CiAJLm5hbWUgCQk9ICJWSUFfSURFIiwKIAkuaWRfdGFibGUgCT0gdmlhX3BjaV90YmwsCiAJLnByb2JlIAkJPSB2aWFfaW5pdF9vbmUsCkBAIC00OTgsMTIgKzQ5OCwxMiBAQAogCiBzdGF0aWMgaW50IF9faW5pdCB2aWFfaWRlX2luaXQodm9pZCkKIHsKLQlyZXR1cm4gaWRlX3BjaV9yZWdpc3Rlcl9kcml2ZXIoJmRyaXZlcik7CisJcmV0dXJuIGlkZV9wY2lfcmVnaXN0ZXJfZHJpdmVyKCZ2aWFfcGNpX2RyaXZlcik7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCB2aWFfaWRlX2V4aXQodm9pZCkKIHsKLQlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJmRyaXZlcik7CisJcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZ2aWFfcGNpX2RyaXZlcik7CiB9CiAKIG1vZHVsZV9pbml0KHZpYV9pZGVfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9wcGMvcG1hYy5jIGIvZHJpdmVycy9pZGUvcHBjL3BtYWMuYwppbmRleCBjMzQzMmRhLi4yZTE5ZDYyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9wcGMvcG1hYy5jCisrKyBiL2RyaXZlcnMvaWRlL3BwYy9wbWFjLmMKQEAgLTQzMCwxMCArNDMwLDcgQEAKIAlwbWFjX2lkZV9od2lmX3QgKnBtaWYgPQogCQkocG1hY19pZGVfaHdpZl90ICopZGV2X2dldF9kcnZkYXRhKGh3aWYtPmdlbmRldi5wYXJlbnQpOwogCi0JaWYgKHBtaWYgPT0gTlVMTCkKLQkJcmV0dXJuOwotCi0JaWYgKGRyaXZlLT5zZWxlY3QuYi51bml0ICYgMHgwMSkKKwlpZiAoZHJpdmUtPmRuICYgMSkKIAkJd3JpdGVsKHBtaWYtPnRpbWluZ3NbMV0sIFBNQUNfSURFX1JFRyhJREVfVElNSU5HX0NPTkZJRykpOwogCWVsc2UKIAkJd3JpdGVsKHBtaWYtPnRpbWluZ3NbMF0sIFBNQUNfSURFX1JFRyhJREVfVElNSU5HX0NPTkZJRykpOwpAQCAtNDUyLDEwICs0NDksNyBAQAogCXBtYWNfaWRlX2h3aWZfdCAqcG1pZiA9CiAJCShwbWFjX2lkZV9od2lmX3QgKilkZXZfZ2V0X2RydmRhdGEoaHdpZi0+Z2VuZGV2LnBhcmVudCk7CiAKLQlpZiAocG1pZiA9PSBOVUxMKQotCQlyZXR1cm47Ci0KLQlpZiAoZHJpdmUtPnNlbGVjdC5iLnVuaXQgJiAweDAxKSB7CisJaWYgKGRyaXZlLT5kbiAmIDEpIHsKIAkJd3JpdGVsKHBtaWYtPnRpbWluZ3NbMV0sIFBNQUNfSURFX1JFRyhJREVfS0FVQUlfUElPX0NPTkZJRykpOwogCQl3cml0ZWwocG1pZi0+dGltaW5nc1szXSwgUE1BQ19JREVfUkVHKElERV9LQVVBSV9VTFRSQV9DT05GSUcpKTsKIAl9IGVsc2UgewpAQCAtNDc1LDkgKzQ2OSw2IEBACiAJcG1hY19pZGVfaHdpZl90ICpwbWlmID0KIAkJKHBtYWNfaWRlX2h3aWZfdCAqKWRldl9nZXRfZHJ2ZGF0YShod2lmLT5nZW5kZXYucGFyZW50KTsKIAotCWlmIChwbWlmID09IE5VTEwpCi0JCXJldHVybjsKLQogCWlmIChwbWlmLT5raW5kID09IGNvbnRyb2xsZXJfc2hfYXRhNiB8fAogCSAgICBwbWlmLT5raW5kID09IGNvbnRyb2xsZXJfdW5fYXRhNiB8fAogCSAgICBwbWlmLT5raW5kID09IGNvbnRyb2xsZXJfazJfYXRhNikKQEAgLTUyNCwxMSArNTE1LDggQEAKIAl1bnNpZ25lZCBhY2Nlc3NUaW1lLCByZWNUaW1lOwogCXVuc2lnbmVkIGludCBjeWNsZV90aW1lOwogCi0JaWYgKHBtaWYgPT0gTlVMTCkKLQkJcmV0dXJuOwotCQkKIAkvKiB3aGljaCBkcml2ZSBpcyBpdCA/ICovCi0JdGltaW5ncyA9ICZwbWlmLT50aW1pbmdzW2RyaXZlLT5zZWxlY3QuYi51bml0ICYgMHgwMV07CisJdGltaW5ncyA9ICZwbWlmLT50aW1pbmdzW2RyaXZlLT5kbiAmIDFdOwogCXQgPSAqdGltaW5nczsKIAogCWN5Y2xlX3RpbWUgPSBpZGVfcGlvX2N5Y2xlX3RpbWUoZHJpdmUsIHBpbyk7CkBAIC04MDUsOSArNzkzLDkgQEAKIAlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7CiAJcG1hY19pZGVfaHdpZl90ICpwbWlmID0KIAkJKHBtYWNfaWRlX2h3aWZfdCAqKWRldl9nZXRfZHJ2ZGF0YShod2lmLT5nZW5kZXYucGFyZW50KTsKLQlpbnQgdW5pdCA9IChkcml2ZS0+c2VsZWN0LmIudW5pdCAmIDB4MDEpOwogCWludCByZXQgPSAwOwogCXUzMiAqdGltaW5ncywgKnRpbWluZ3MyLCB0bFsyXTsKKwl1OCB1bml0ID0gZHJpdmUtPmRuICYgMTsKIAogCXRpbWluZ3MgPSAmcG1pZi0+dGltaW5nc1t1bml0XTsKIAl0aW1pbmdzMiA9ICZwbWlmLT50aW1pbmdzW3VuaXQrMl07CkBAIC05NjYsMTEgKzk1NCwxMSBAQAogCWlmIChwbWlmLT5tZWRpYWJheSkgewogI2lmZGVmIENPTkZJR19QTUFDX01FRElBQkFZCiAJCWlmIChjaGVja19tZWRpYV9iYXlfYnlfYmFzZShwbWlmLT5yZWdiYXNlLCBNQl9DRCkgPT0gMCkgewotCQkJZHJpdmUtPm5vcHJvYmUgPSAwOworCQkJZHJpdmUtPmRldl9mbGFncyAmPSB+SURFX0RGTEFHX05PUFJPQkU7CiAJCQlyZXR1cm47CiAJCX0KICNlbmRpZgotCQlkcml2ZS0+bm9wcm9iZSA9IDE7CisJCWRyaXZlLT5kZXZfZmxhZ3MgfD0gSURFX0RGTEFHX05PUFJPQkU7CiAJfQogfQogCkBAIC0xNTM1LDE4ICsxNTIzLDYgQEAKIAlyZXR1cm4gMDsgLyogcmV2ZXJ0IHRvIFBJTyBmb3IgdGhpcyByZXF1ZXN0ICovCiB9CiAKLS8qIFRlYXJkb3duIG1hcHBpbmdzIGFmdGVyIERNQSBoYXMgY29tcGxldGVkLiAgKi8KLXN0YXRpYyB2b2lkCi1wbWFjX2lkZV9kZXN0cm95X2RtYXRhYmxlIChpZGVfZHJpdmVfdCAqZHJpdmUpCi17Ci0JaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOwotCi0JaWYgKGh3aWYtPnNnX25lbnRzKSB7Ci0JCWlkZV9kZXN0cm95X2RtYXRhYmxlKGRyaXZlKTsKLQkJaHdpZi0+c2dfbmVudHMgPSAwOwotCX0KLX0KLQogLyoKICAqIFByZXBhcmUgYSBETUEgdHJhbnNmZXIuIFdlIGJ1aWxkIHRoZSBETUEgdGFibGUsIGFkanVzdCB0aGUgdGltaW5ncyBmb3IKICAqIGEgcmVhZCBvbiBLZXlMYXJnbyBBVEEvNjYgYW5kIG1hcmsgdXMgYXMgd2FpdGluZyBmb3IgRE1BIGNvbXBsZXRpb24KQEAgLTE1NTgsMTIgKzE1MzQsNyBAQAogCXBtYWNfaWRlX2h3aWZfdCAqcG1pZiA9CiAJCShwbWFjX2lkZV9od2lmX3QgKilkZXZfZ2V0X2RydmRhdGEoaHdpZi0+Z2VuZGV2LnBhcmVudCk7CiAJc3RydWN0IHJlcXVlc3QgKnJxID0gSFdHUk9VUChkcml2ZSktPnJxOwotCXU4IHVuaXQgPSAoZHJpdmUtPnNlbGVjdC5iLnVuaXQgJiAweDAxKTsKLQl1OCBhdGE0OwotCi0JaWYgKHBtaWYgPT0gTlVMTCkKLQkJcmV0dXJuIDE7Ci0JYXRhNCA9IChwbWlmLT5raW5kID09IGNvbnRyb2xsZXJfa2xfYXRhNCk7CQorCXU4IHVuaXQgPSBkcml2ZS0+ZG4gJiAxLCBhdGE0ID0gKHBtaWYtPmtpbmQgPT0gY29udHJvbGxlcl9rbF9hdGE0KTsKIAogCWlmICghcG1hY19pZGVfYnVpbGRfZG1hdGFibGUoZHJpdmUsIHJxKSkgewogCQlpZGVfbWFwX3NnKGRyaXZlLCBycSk7CkBAIC0xNjE3LDE3ICsxNTg4LDE1IEBACiAJaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOwogCXBtYWNfaWRlX2h3aWZfdCAqcG1pZiA9CiAJCShwbWFjX2lkZV9od2lmX3QgKilkZXZfZ2V0X2RydmRhdGEoaHdpZi0+Z2VuZGV2LnBhcmVudCk7Ci0Jdm9sYXRpbGUgc3RydWN0IGRiZG1hX3JlZ3MgX19pb21lbSAqZG1hOworCXZvbGF0aWxlIHN0cnVjdCBkYmRtYV9yZWdzIF9faW9tZW0gKmRtYSA9IHBtaWYtPmRtYV9yZWdzOwogCXUzMiBkc3RhdDsKLQkKLQlpZiAocG1pZiA9PSBOVUxMKQotCQlyZXR1cm4gMDsKLQlkbWEgPSBwbWlmLT5kbWFfcmVnczsKIAogCWRyaXZlLT53YWl0aW5nX2Zvcl9kbWEgPSAwOwogCWRzdGF0ID0gcmVhZGwoJmRtYS0+c3RhdHVzKTsKIAl3cml0ZWwoKChSVU58V0FLRXxERUFEKSA8PCAxNiksICZkbWEtPmNvbnRyb2wpOwotCXBtYWNfaWRlX2Rlc3Ryb3lfZG1hdGFibGUoZHJpdmUpOworCisJaWRlX2Rlc3Ryb3lfZG1hdGFibGUoZHJpdmUpOworCiAJLyogdmVyaWZ5IGdvb2QgZG1hIHN0YXR1cy4gd2UgZG9uJ3QgY2hlY2sgZm9yIEFDVElWRSBiZWVpbmcgMC4gV2Ugc2hvdWxkLi4uCiAJICogaW4gdGhlb3J5LCBidXQgd2l0aCBBVEFQSSBkZWNpY2VzIGRvaW5nIGJ1ZmZlciB1bmRlcnJ1bnMsIHRoYXQgd291bGQKIAkgKiBjYXVzZSB1cyB0byBkaXNhYmxlIERNQSwgd2hpY2ggaXNuJ3Qgd2hhdCB3ZSB3YW50CkBAIC0xNjQ3LDEzICsxNjE2LDkgQEAKIAlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7CiAJcG1hY19pZGVfaHdpZl90ICpwbWlmID0KIAkJKHBtYWNfaWRlX2h3aWZfdCAqKWRldl9nZXRfZHJ2ZGF0YShod2lmLT5nZW5kZXYucGFyZW50KTsKLQl2b2xhdGlsZSBzdHJ1Y3QgZGJkbWFfcmVncyBfX2lvbWVtICpkbWE7CisJdm9sYXRpbGUgc3RydWN0IGRiZG1hX3JlZ3MgX19pb21lbSAqZG1hID0gcG1pZi0+ZG1hX3JlZ3M7CiAJdW5zaWduZWQgbG9uZyBzdGF0dXMsIHRpbWVvdXQ7CiAKLQlpZiAocG1pZiA9PSBOVUxMKQotCQlyZXR1cm4gMDsKLQlkbWEgPSBwbWlmLT5kbWFfcmVnczsKLQogCS8qIFdlIGhhdmUgdG8gdGhpbmdzIHRvIGRlYWwgd2l0aCBoZXJlOgogCSAqIAogCSAqIC0gVGhlIGRiZG1hIHdvbid0IHN0b3AgaWYgdGhlIGNvbW1hbmQgd2FzIHN0YXJ0ZWQKQEAgLTE2NzIsOSArMTYzNyw2IEBACiAJc3RhdHVzID0gcmVhZGwoJmRtYS0+c3RhdHVzKTsKIAlpZiAoIShzdGF0dXMgJiBBQ1RJVkUpKQogCQlyZXR1cm4gMTsKLQlpZiAoIWRyaXZlLT53YWl0aW5nX2Zvcl9kbWEpCi0JCXByaW50ayhLRVJOX1dBUk5JTkcgImlkZSVkLCBpZGVfZG1hX3Rlc3RfaXJxIFwKLQkJCWNhbGxlZCB3aGlsZSBub3Qgd2FpdGluZ1xuIiwgSFdJRihkcml2ZSktPmluZGV4KTsKIAogCS8qIElmIGRiZG1hIGRpZG4ndCBleGVjdXRlIHRoZSBTVE9QIGNvbW1hbmQgeWV0LCB0aGUKIAkgKiBhY3RpdmUgYml0IGlzIHN0aWxsIHNldC4gV2UgY29uc2lkZXIgdGhhdCB3ZSBhcmVuJ3QKQEAgLTE3MDksMTQgKzE2NzEsOSBAQAogCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKIAlwbWFjX2lkZV9od2lmX3QgKnBtaWYgPQogCQkocG1hY19pZGVfaHdpZl90ICopZGV2X2dldF9kcnZkYXRhKGh3aWYtPmdlbmRldi5wYXJlbnQpOwotCXZvbGF0aWxlIHN0cnVjdCBkYmRtYV9yZWdzIF9faW9tZW0gKmRtYTsKLQl1bnNpZ25lZCBsb25nIHN0YXR1czsKKwl2b2xhdGlsZSBzdHJ1Y3QgZGJkbWFfcmVncyBfX2lvbWVtICpkbWEgPSBwbWlmLT5kbWFfcmVnczsKKwl1bnNpZ25lZCBsb25nIHN0YXR1cyA9IHJlYWRsKCZkbWEtPnN0YXR1cyk7CiAKLQlpZiAocG1pZiA9PSBOVUxMKQotCQlyZXR1cm47Ci0JZG1hID0gcG1pZi0+ZG1hX3JlZ3M7Ci0KLQlzdGF0dXMgPSByZWFkbCgmZG1hLT5zdGF0dXMpOwogCXByaW50ayhLRVJOX0VSUiAiaWRlLXBtYWMgbG9zdCBpbnRlcnJ1cHQsIGRtYSBzdGF0dXM6ICVseFxuIiwgc3RhdHVzKTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZWVlMTM5NC9jc3IxMjEyLmMgYi9kcml2ZXJzL2llZWUxMzk0L2NzcjEyMTIuYwppbmRleCA5Zjk1MzM3Li41ZTM4YTY4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2llZWUxMzk0L2NzcjEyMTIuYworKysgYi9kcml2ZXJzL2llZWUxMzk0L2NzcjEyMTIuYwpAQCAtODQsNyArODQsNyBAQAogCiAKICNkZWZpbmUgcXVhZHNfdG9fYnl0ZXMoX3EpICgoX3EpICogc2l6ZW9mKHUzMikpCi0jZGVmaW5lIGJ5dGVzX3RvX3F1YWRzKF9iKSAoKChfYikgKyBzaXplb2YodTMyKSAtIDEpIC8gc2l6ZW9mKHUzMikpCisjZGVmaW5lIGJ5dGVzX3RvX3F1YWRzKF9iKSBESVZfUk9VTkRfVVAoX2IsIHNpemVvZih1MzIpKQogCiBzdGF0aWMgdm9pZCBmcmVlX2tleXZhbChzdHJ1Y3QgY3NyMTIxMl9rZXl2YWwgKmt2KQogewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZWVlMTM5NC9kdjEzOTQuYyBiL2RyaXZlcnMvaWVlZTEzOTQvZHYxMzk0LmMKaW5kZXggYjZlYjJjZi4uMmY4MzU0MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZWVlMTM5NC9kdjEzOTQuYworKysgYi9kcml2ZXJzL2llZWUxMzk0L2R2MTM5NC5jCkBAIC05MTgsNyArOTE4LDcgQEAKIAkJLyogZGVmYXVsdCBTWVQgb2Zmc2V0IGlzIDMgY3ljbGVzICovCiAJCWluaXQtPnN5dF9vZmZzZXQgPSAzOwogCi0JaWYgKCAoaW5pdC0+Y2hhbm5lbCA+IDYzKSB8fCAoaW5pdC0+Y2hhbm5lbCA8IDApICkKKwlpZiAoaW5pdC0+Y2hhbm5lbCA+IDYzKQogCQlpbml0LT5jaGFubmVsID0gNjM7CiAKIAljaGFuX21hc2sgPSAodTY0KTEgPDwgaW5pdC0+Y2hhbm5lbDsKQEAgLTIyOTYsMTAgKzIyOTYsMTAgQEAKIAogCW9oY2kgPSAoc3RydWN0IHRpX29oY2kgKilob3N0LT5ob3N0ZGF0YTsKIAotCWRldmljZV9jcmVhdGVfZHJ2ZGF0YShocHNiX3Byb3RvY29sX2NsYXNzLCBOVUxMLAotCQkJICAgICAgTUtERVYoSUVFRTEzOTRfTUFKT1IsCi0JCQkJICAgIElFRUUxMzk0X01JTk9SX0JMT0NLX0RWMTM5NCAqIDE2ICsgKGlkPDwyKSksIE5VTEwsCi0JCQkgICAgICAiZHYxMzk0LSVkIiwgaWQpOworCWRldmljZV9jcmVhdGUoaHBzYl9wcm90b2NvbF9jbGFzcywgTlVMTCwKKwkJICAgICAgTUtERVYoSUVFRTEzOTRfTUFKT1IsCisJCQkgICAgSUVFRTEzOTRfTUlOT1JfQkxPQ0tfRFYxMzk0ICogMTYgKyAoaWQ8PDIpKSwKKwkJICAgICAgTlVMTCwgImR2MTM5NC0lZCIsIGlkKTsKIAogCWR2MTM5NF9pbml0KG9oY2ksIERWMTM5NF9OVFNDLCBNT0RFX1JFQ0VJVkUpOwogCWR2MTM5NF9pbml0KG9oY2ksIERWMTM5NF9OVFNDLCBNT0RFX1RSQU5TTUlUKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWVlZTEzOTQvZXRoMTM5NC5jIGIvZHJpdmVycy9pZWVlMTM5NC9ldGgxMzk0LmMKaW5kZXggYjE2NmIzNS4uMjAxMjg2OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZWVlMTM5NC9ldGgxMzk0LmMKKysrIGIvZHJpdmVycy9pZWVlMTM5NC9ldGgxMzk0LmMKQEAgLTEzNjEsNyArMTM2MSw3IEBACiAJCWhkci0+ZmYuZGdsID0gZGdsOwogCQlhZGpfbWF4X3BheWxvYWQgPSBtYXhfcGF5bG9hZCAtIGhkcl90eXBlX2xlbltFVEgxMzk0X0hEUl9MRl9GRl07CiAJfQotCXJldHVybiAoZGdfc2l6ZSArIGFkal9tYXhfcGF5bG9hZCAtIDEpIC8gYWRqX21heF9wYXlsb2FkOworCXJldHVybiBESVZfUk9VTkRfVVAoZGdfc2l6ZSwgYWRqX21heF9wYXlsb2FkKTsKIH0KIAogc3RhdGljIHVuc2lnbmVkIGludCBldGhlcjEzOTRfZW5jYXBzdWxhdGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWVlZTEzOTQvbm9kZW1nci5jIGIvZHJpdmVycy9pZWVlMTM5NC9ub2RlbWdyLmMKaW5kZXggMTYyNDBhNy4uMjM3NmI3MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZWVlMTM5NC9ub2RlbWdyLmMKKysrIGIvZHJpdmVycy9pZWVlMTM5NC9ub2RlbWdyLmMKQEAgLTE1NCw5ICsxNTQsNiBAQAogCiBzdGF0aWMgaW50IG5vZGVtZ3JfYnVzX21hdGNoKHN0cnVjdCBkZXZpY2UgKiBkZXYsIHN0cnVjdCBkZXZpY2VfZHJpdmVyICogZHJ2KTsKIHN0YXRpYyBpbnQgbm9kZW1ncl91ZXZlbnQoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qga29ial91ZXZlbnRfZW52ICplbnYpOwotc3RhdGljIHZvaWQgbm9kZW1ncl9yZXN1bWVfbmUoc3RydWN0IG5vZGVfZW50cnkgKm5lKTsKLXN0YXRpYyB2b2lkIG5vZGVtZ3JfcmVtb3ZlX25lKHN0cnVjdCBub2RlX2VudHJ5ICpuZSk7Ci1zdGF0aWMgc3RydWN0IG5vZGVfZW50cnkgKmZpbmRfZW50cnlfYnlfZ3VpZCh1NjQgZ3VpZCk7CiAKIHN0cnVjdCBidXNfdHlwZSBpZWVlMTM5NF9idXNfdHlwZSA9IHsKIAkubmFtZQkJPSAiaWVlZTEzOTQiLApAQCAtMzg1LDI3ICszODIsNiBAQAogc3RhdGljIERFVklDRV9BVFRSKGlnbm9yZV9kcml2ZXIsIFNfSVdVU1IgfCBTX0lSVUdPLCBmd19nZXRfaWdub3JlX2RyaXZlciwgZndfc2V0X2lnbm9yZV9kcml2ZXIpOwogCiAKLXN0YXRpYyBzc2l6ZV90IGZ3X3NldF9kZXN0cm95X25vZGUoc3RydWN0IGJ1c190eXBlICpidXMsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQotewotCXN0cnVjdCBub2RlX2VudHJ5ICpuZTsKLQl1NjQgZ3VpZCA9ICh1NjQpc2ltcGxlX3N0cnRvdWxsKGJ1ZiwgTlVMTCwgMTYpOwotCi0JbmUgPSBmaW5kX2VudHJ5X2J5X2d1aWQoZ3VpZCk7Ci0KLQlpZiAobmUgPT0gTlVMTCB8fCAhbmUtPmluX2xpbWJvKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCW5vZGVtZ3JfcmVtb3ZlX25lKG5lKTsKLQotCXJldHVybiBjb3VudDsKLX0KLXN0YXRpYyBzc2l6ZV90IGZ3X2dldF9kZXN0cm95X25vZGUoc3RydWN0IGJ1c190eXBlICpidXMsIGNoYXIgKmJ1ZikKLXsKLQlyZXR1cm4gc3ByaW50ZihidWYsICJZb3UgY2FuIGRlc3Ryb3kgaW5fbGltYm8gbm9kZXMgYnkgd3JpdGluZyB0aGVpciBHVUlEIHRvIHRoaXMgZmlsZVxuIik7Ci19Ci1zdGF0aWMgQlVTX0FUVFIoZGVzdHJveV9ub2RlLCBTX0lXVVNSIHwgU19JUlVHTywgZndfZ2V0X2Rlc3Ryb3lfbm9kZSwgZndfc2V0X2Rlc3Ryb3lfbm9kZSk7Ci0KLQogc3RhdGljIHNzaXplX3QgZndfc2V0X3Jlc2NhbihzdHJ1Y3QgYnVzX3R5cGUgKmJ1cywgY29uc3QgY2hhciAqYnVmLAogCQkJICAgICBzaXplX3QgY291bnQpCiB7CkBAIC00NDIsNyArNDE4LDYgQEAKIAogCiBzdHJ1Y3QgYnVzX2F0dHJpYnV0ZSAqY29uc3QgZndfYnVzX2F0dHJzW10gPSB7Ci0JJmJ1c19hdHRyX2Rlc3Ryb3lfbm9kZSwKIAkmYnVzX2F0dHJfcmVzY2FuLAogCSZidXNfYXR0cl9pZ25vcmVfZHJpdmVycywKIAlOVUxMCkBAIC03MzQsMTAgKzcwOSwxMCBAQAogCiBzdGF0aWMgREVGSU5FX01VVEVYKG5vZGVtZ3Jfc2VyaWFsaXplX3JlbW92ZV91ZHMpOwogCi1zdGF0aWMgaW50IF9fbWF0Y2hfbmUoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkYXRhKQorc3RhdGljIGludCBtYXRjaF9uZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEpCiB7CiAJc3RydWN0IHVuaXRfZGlyZWN0b3J5ICp1ZDsKLQlzdHJ1Y3Qgbm9kZV9lbnRyeSAqbmUgPSAoc3RydWN0IG5vZGVfZW50cnkgKilkYXRhOworCXN0cnVjdCBub2RlX2VudHJ5ICpuZSA9IGRhdGE7CiAKIAl1ZCA9IGNvbnRhaW5lcl9vZihkZXYsIHN0cnVjdCB1bml0X2RpcmVjdG9yeSwgdW5pdF9kZXYpOwogCXJldHVybiB1ZC0+bmUgPT0gbmU7CkBAIC03NTQsOCArNzI5LDcgQEAKIAkgKi8KIAltdXRleF9sb2NrKCZub2RlbWdyX3NlcmlhbGl6ZV9yZW1vdmVfdWRzKTsKIAlmb3IgKDs7KSB7Ci0JCWRldiA9IGNsYXNzX2ZpbmRfZGV2aWNlKCZub2RlbWdyX3VkX2NsYXNzLCBOVUxMLCBuZSwKLQkJCQkJX19tYXRjaF9uZSk7CisJCWRldiA9IGNsYXNzX2ZpbmRfZGV2aWNlKCZub2RlbWdyX3VkX2NsYXNzLCBOVUxMLCBuZSwgbWF0Y2hfbmUpOwogCQlpZiAoIWRldikKIAkJCWJyZWFrOwogCQl1ZCA9IGNvbnRhaW5lcl9vZihkZXYsIHN0cnVjdCB1bml0X2RpcmVjdG9yeSwgdW5pdF9kZXYpOwpAQCAtNzg1LDcgKzc1OSw3IEBACiAJcHV0X2RldmljZShkZXYpOwogfQogCi1zdGF0aWMgaW50IF9fbm9kZW1ncl9yZW1vdmVfaG9zdF9kZXYoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkYXRhKQorc3RhdGljIGludCByZW1vdmVfaG9zdF9kZXYoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkYXRhKQogewogCWlmIChkZXYtPmJ1cyA9PSAmaWVlZTEzOTRfYnVzX3R5cGUpCiAJCW5vZGVtZ3JfcmVtb3ZlX25lKGNvbnRhaW5lcl9vZihkZXYsIHN0cnVjdCBub2RlX2VudHJ5LApAQCAtNzk1LDcgKzc2OSw3IEBACiAKIHN0YXRpYyB2b2lkIG5vZGVtZ3JfcmVtb3ZlX2hvc3RfZGV2KHN0cnVjdCBkZXZpY2UgKmRldikKIHsKLQlXQVJOX09OKGRldmljZV9mb3JfZWFjaF9jaGlsZChkZXYsIE5VTEwsIF9fbm9kZW1ncl9yZW1vdmVfaG9zdF9kZXYpKTsKKwlkZXZpY2VfZm9yX2VhY2hfY2hpbGQoZGV2LCBOVUxMLCByZW1vdmVfaG9zdF9kZXYpOwogCXN5c2ZzX3JlbW92ZV9saW5rKCZkZXYtPmtvYmosICJpcm1faWQiKTsKIAlzeXNmc19yZW1vdmVfbGluaygmZGV2LT5rb2JqLCAiYnVzbWdyX2lkIik7CiAJc3lzZnNfcmVtb3ZlX2xpbmsoJmRldi0+a29iaiwgImhvc3RfaWQiKTsKQEAgLTgzMCwxMSArODA0LDEwIEBACiB9CiAKIAotc3RhdGljIHN0cnVjdCBub2RlX2VudHJ5ICpub2RlbWdyX2NyZWF0ZV9ub2RlKG9jdGxldF90IGd1aWQsIHN0cnVjdCBjc3IxMjEyX2NzciAqY3NyLAotCQkJCQkgICAgICBzdHJ1Y3QgaG9zdF9pbmZvICpoaSwgbm9kZWlkX3Qgbm9kZWlkLAotCQkJCQkgICAgICB1bnNpZ25lZCBpbnQgZ2VuZXJhdGlvbikKK3N0YXRpYyBzdHJ1Y3Qgbm9kZV9lbnRyeSAqbm9kZW1ncl9jcmVhdGVfbm9kZShvY3RsZXRfdCBndWlkLAorCQkJCXN0cnVjdCBjc3IxMjEyX2NzciAqY3NyLCBzdHJ1Y3QgaHBzYl9ob3N0ICpob3N0LAorCQkJCW5vZGVpZF90IG5vZGVpZCwgdW5zaWduZWQgaW50IGdlbmVyYXRpb24pCiB7Ci0Jc3RydWN0IGhwc2JfaG9zdCAqaG9zdCA9IGhpLT5ob3N0OwogCXN0cnVjdCBub2RlX2VudHJ5ICpuZTsKIAogCW5lID0ga3phbGxvYyhzaXplb2YoKm5lKSwgR0ZQX0tFUk5FTCk7CkBAIC04ODgsMTAgKzg2MSwxMCBAQAogCXJldHVybiBOVUxMOwogfQogCi1zdGF0aWMgaW50IF9fbWF0Y2hfbmVfZ3VpZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEpCitzdGF0aWMgaW50IG1hdGNoX25lX2d1aWQoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkYXRhKQogewogCXN0cnVjdCBub2RlX2VudHJ5ICpuZTsKLQl1NjQgKmd1aWQgPSAodTY0ICopZGF0YTsKKwl1NjQgKmd1aWQgPSBkYXRhOwogCiAJbmUgPSBjb250YWluZXJfb2YoZGV2LCBzdHJ1Y3Qgbm9kZV9lbnRyeSwgbm9kZV9kZXYpOwogCXJldHVybiBuZS0+Z3VpZCA9PSAqZ3VpZDsKQEAgLTkwMiw4ICs4NzUsNyBAQAogCXN0cnVjdCBkZXZpY2UgKmRldjsKIAlzdHJ1Y3Qgbm9kZV9lbnRyeSAqbmU7CiAKLQlkZXYgPSBjbGFzc19maW5kX2RldmljZSgmbm9kZW1ncl9uZV9jbGFzcywgTlVMTCwgJmd1aWQsCi0JCQkJX19tYXRjaF9uZV9ndWlkKTsKKwlkZXYgPSBjbGFzc19maW5kX2RldmljZSgmbm9kZW1ncl9uZV9jbGFzcywgTlVMTCwgJmd1aWQsIG1hdGNoX25lX2d1aWQpOwogCWlmICghZGV2KQogCQlyZXR1cm4gTlVMTDsKIAluZSA9IGNvbnRhaW5lcl9vZihkZXYsIHN0cnVjdCBub2RlX2VudHJ5LCBub2RlX2Rldik7CkBAIC05MTIsMjEgKzg4NCwyMSBAQAogCXJldHVybiBuZTsKIH0KIAotc3RydWN0IG1hdGNoX25vZGVpZF9wYXJhbSB7CitzdHJ1Y3QgbWF0Y2hfbm9kZWlkX3BhcmFtZXRlciB7CiAJc3RydWN0IGhwc2JfaG9zdCAqaG9zdDsKIAlub2RlaWRfdCBub2RlaWQ7CiB9OwogCi1zdGF0aWMgaW50IF9fbWF0Y2hfbmVfbm9kZWlkKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZGF0YSkKK3N0YXRpYyBpbnQgbWF0Y2hfbmVfbm9kZWlkKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZGF0YSkKIHsKIAlpbnQgZm91bmQgPSAwOwogCXN0cnVjdCBub2RlX2VudHJ5ICpuZTsKLQlzdHJ1Y3QgbWF0Y2hfbm9kZWlkX3BhcmFtICpwYXJhbSA9IChzdHJ1Y3QgbWF0Y2hfbm9kZWlkX3BhcmFtICopZGF0YTsKKwlzdHJ1Y3QgbWF0Y2hfbm9kZWlkX3BhcmFtZXRlciAqcCA9IGRhdGE7CiAKIAlpZiAoIWRldikKIAkJZ290byByZXQ7CiAJbmUgPSBjb250YWluZXJfb2YoZGV2LCBzdHJ1Y3Qgbm9kZV9lbnRyeSwgbm9kZV9kZXYpOwotCWlmIChuZS0+aG9zdCA9PSBwYXJhbS0+aG9zdCAmJiBuZS0+bm9kZWlkID09IHBhcmFtLT5ub2RlaWQpCisJaWYgKG5lLT5ob3N0ID09IHAtPmhvc3QgJiYgbmUtPm5vZGVpZCA9PSBwLT5ub2RlaWQpCiAJCWZvdW5kID0gMTsKIHJldDoKIAlyZXR1cm4gZm91bmQ7CkBAIC05MzcsMTMgKzkwOSwxMiBAQAogewogCXN0cnVjdCBkZXZpY2UgKmRldjsKIAlzdHJ1Y3Qgbm9kZV9lbnRyeSAqbmU7Ci0Jc3RydWN0IG1hdGNoX25vZGVpZF9wYXJhbSBwYXJhbTsKKwlzdHJ1Y3QgbWF0Y2hfbm9kZWlkX3BhcmFtZXRlciBwOwogCi0JcGFyYW0uaG9zdCA9IGhvc3Q7Ci0JcGFyYW0ubm9kZWlkID0gbm9kZWlkOworCXAuaG9zdCA9IGhvc3Q7CisJcC5ub2RlaWQgPSBub2RlaWQ7CiAKLQlkZXYgPSBjbGFzc19maW5kX2RldmljZSgmbm9kZW1ncl9uZV9jbGFzcywgTlVMTCwgJnBhcmFtLAotCQkJCV9fbWF0Y2hfbmVfbm9kZWlkKTsKKwlkZXYgPSBjbGFzc19maW5kX2RldmljZSgmbm9kZW1ncl9uZV9jbGFzcywgTlVMTCwgJnAsIG1hdGNoX25lX25vZGVpZCk7CiAJaWYgKCFkZXYpCiAJCXJldHVybiBOVUxMOwogCW5lID0gY29udGFpbmVyX29mKGRldiwgc3RydWN0IG5vZGVfZW50cnksIG5vZGVfZGV2KTsKQEAgLTk5MCw3ICs5NjEsNyBAQAogICogaW1tZWRpYXRlIHVuaXQgZGlyZWN0b3JpZXMgbG9va2luZyBmb3Igc29mdHdhcmVfaWQgYW5kCiAgKiBzb2Z0d2FyZV92ZXJzaW9uIGVudHJpZXMsIGluIG9yZGVyIHRvIGdldCBkcml2ZXIgYXV0b2xvYWRpbmcgd29ya2luZy4gKi8KIHN0YXRpYyBzdHJ1Y3QgdW5pdF9kaXJlY3RvcnkgKm5vZGVtZ3JfcHJvY2Vzc191bml0X2RpcmVjdG9yeQotCShzdHJ1Y3QgaG9zdF9pbmZvICpoaSwgc3RydWN0IG5vZGVfZW50cnkgKm5lLCBzdHJ1Y3QgY3NyMTIxMl9rZXl2YWwgKnVkX2t2LAorCShzdHJ1Y3Qgbm9kZV9lbnRyeSAqbmUsIHN0cnVjdCBjc3IxMjEyX2tleXZhbCAqdWRfa3YsCiAJIHVuc2lnbmVkIGludCAqaWQsIHN0cnVjdCB1bml0X2RpcmVjdG9yeSAqcGFyZW50KQogewogCXN0cnVjdCB1bml0X2RpcmVjdG9yeSAqdWQ7CkBAIC0xMDgzLDcgKzEwNTQsNyBAQAogCQkJCQlub2RlbWdyX3JlZ2lzdGVyX2RldmljZShuZSwgdWQsICZuZS0+ZGV2aWNlKTsKIAkJCQkKIAkJCQkvKiBwcm9jZXNzIHRoZSBjaGlsZCB1bml0ICovCi0JCQkJdWRfY2hpbGQgPSBub2RlbWdyX3Byb2Nlc3NfdW5pdF9kaXJlY3RvcnkoaGksIG5lLCBrdiwgaWQsIHVkKTsKKwkJCQl1ZF9jaGlsZCA9IG5vZGVtZ3JfcHJvY2Vzc191bml0X2RpcmVjdG9yeShuZSwga3YsIGlkLCB1ZCk7CiAKIAkJCQlpZiAodWRfY2hpbGQgPT0gTlVMTCkKIAkJCQkJYnJlYWs7CkBAIC0xMTM3LDcgKzExMDgsNyBAQAogfQogCiAKLXN0YXRpYyB2b2lkIG5vZGVtZ3JfcHJvY2Vzc19yb290X2RpcmVjdG9yeShzdHJ1Y3QgaG9zdF9pbmZvICpoaSwgc3RydWN0IG5vZGVfZW50cnkgKm5lKQorc3RhdGljIHZvaWQgbm9kZW1ncl9wcm9jZXNzX3Jvb3RfZGlyZWN0b3J5KHN0cnVjdCBub2RlX2VudHJ5ICpuZSkKIHsKIAl1bnNpZ25lZCBpbnQgdWRfaWQgPSAwOwogCXN0cnVjdCBjc3IxMjEyX2RlbnRyeSAqZGVudHJ5OwpAQCAtMTE1Nyw3ICsxMTI4LDcgQEAKIAkJCWJyZWFrOwogCiAJCWNhc2UgQ1NSMTIxMl9LVl9JRF9VTklUOgotCQkJbm9kZW1ncl9wcm9jZXNzX3VuaXRfZGlyZWN0b3J5KGhpLCBuZSwga3YsICZ1ZF9pZCwgTlVMTCk7CisJCQlub2RlbWdyX3Byb2Nlc3NfdW5pdF9kaXJlY3RvcnkobmUsIGt2LCAmdWRfaWQsIE5VTEwpOwogCQkJYnJlYWs7CiAKIAkJY2FzZSBDU1IxMjEyX0tWX0lEX0RFU0NSSVBUT1I6CkBAIC0xMjczLDggKzEyNDQsNyBAQAogICogdGhlIHRvIHRha2Ugd2hhdGV2ZXIgYWN0aW9ucyByZXF1aXJlZC4KICAqLwogc3RhdGljIHZvaWQgbm9kZW1ncl91cGRhdGVfbm9kZShzdHJ1Y3Qgbm9kZV9lbnRyeSAqbmUsIHN0cnVjdCBjc3IxMjEyX2NzciAqY3NyLAotCQkJCXN0cnVjdCBob3N0X2luZm8gKmhpLCBub2RlaWRfdCBub2RlaWQsCi0JCQkJdW5zaWduZWQgaW50IGdlbmVyYXRpb24pCisJCQkJbm9kZWlkX3Qgbm9kZWlkLCB1bnNpZ25lZCBpbnQgZ2VuZXJhdGlvbikKIHsKIAlpZiAobmUtPm5vZGVpZCAhPSBub2RlaWQpIHsKIAkJSFBTQl9ERUJVRygiTm9kZSBjaGFuZ2VkOiAiIE5PREVfQlVTX0ZNVCAiIC0+ICIgTk9ERV9CVVNfRk1ULApAQCAtMTMwNSwxOSArMTI3NSwyMyBAQAogCQljc3IxMjEyX2Rlc3Ryb3lfY3NyKGNzcik7CiAJfQogCi0JaWYgKG5lLT5pbl9saW1ibykKLQkJbm9kZW1ncl9yZXN1bWVfbmUobmUpOwotCiAJLyogTWFyayB0aGUgbm9kZSBjdXJyZW50ICovCiAJbmUtPmdlbmVyYXRpb24gPSBnZW5lcmF0aW9uOworCisJaWYgKG5lLT5pbl9saW1ibykgeworCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoJm5lLT5kZXZpY2UsICZkZXZfYXR0cl9uZV9pbl9saW1ibyk7CisJCW5lLT5pbl9saW1ibyA9IGZhbHNlOworCisJCUhQU0JfREVCVUcoIk5vZGUgcmVhY3RpdmF0ZWQ6ICIKKwkJCSAgICJJRDpCVVNbIiBOT0RFX0JVU19GTVQgIl0gIEdVSURbJTAxNkx4XSIsCisJCQkgICBOT0RFX0JVU19BUkdTKG5lLT5ob3N0LCBuZS0+bm9kZWlkKSwKKwkJCSAgICh1bnNpZ25lZCBsb25nIGxvbmcpbmUtPmd1aWQpOworCX0KIH0KIAotCi0KLXN0YXRpYyB2b2lkIG5vZGVtZ3Jfbm9kZV9zY2FuX29uZShzdHJ1Y3QgaG9zdF9pbmZvICpoaSwKK3N0YXRpYyB2b2lkIG5vZGVtZ3Jfbm9kZV9zY2FuX29uZShzdHJ1Y3QgaHBzYl9ob3N0ICpob3N0LAogCQkJCSAgbm9kZWlkX3Qgbm9kZWlkLCBpbnQgZ2VuZXJhdGlvbikKIHsKLQlzdHJ1Y3QgaHBzYl9ob3N0ICpob3N0ID0gaGktPmhvc3Q7CiAJc3RydWN0IG5vZGVfZW50cnkgKm5lOwogCW9jdGxldF90IGd1aWQ7CiAJc3RydWN0IGNzcjEyMTJfY3NyICpjc3I7CkBAIC0xMzczLDE2ICsxMzQ3LDE1IEBACiAJfQogCiAJaWYgKCFuZSkKLQkJbm9kZW1ncl9jcmVhdGVfbm9kZShndWlkLCBjc3IsIGhpLCBub2RlaWQsIGdlbmVyYXRpb24pOworCQlub2RlbWdyX2NyZWF0ZV9ub2RlKGd1aWQsIGNzciwgaG9zdCwgbm9kZWlkLCBnZW5lcmF0aW9uKTsKIAllbHNlCi0JCW5vZGVtZ3JfdXBkYXRlX25vZGUobmUsIGNzciwgaGksIG5vZGVpZCwgZ2VuZXJhdGlvbik7CisJCW5vZGVtZ3JfdXBkYXRlX25vZGUobmUsIGNzciwgbm9kZWlkLCBnZW5lcmF0aW9uKTsKIH0KIAogCi1zdGF0aWMgdm9pZCBub2RlbWdyX25vZGVfc2NhbihzdHJ1Y3QgaG9zdF9pbmZvICpoaSwgaW50IGdlbmVyYXRpb24pCitzdGF0aWMgdm9pZCBub2RlbWdyX25vZGVfc2NhbihzdHJ1Y3QgaHBzYl9ob3N0ICpob3N0LCBpbnQgZ2VuZXJhdGlvbikKIHsKIAlpbnQgY291bnQ7Ci0Jc3RydWN0IGhwc2JfaG9zdCAqaG9zdCA9IGhpLT5ob3N0OwogCXN0cnVjdCBzZWxmaWQgKnNpZCA9IChzdHJ1Y3Qgc2VsZmlkICopaG9zdC0+dG9wb2xvZ3lfbWFwOwogCW5vZGVpZF90IG5vZGVpZCA9IExPQ0FMX0JVUzsKIApAQCAtMTM5NSw4OSArMTM2OCwyNiBAQAogCQkJbm9kZWlkKys7CiAJCQljb250aW51ZTsKIAkJfQotCQlub2RlbWdyX25vZGVfc2Nhbl9vbmUoaGksIG5vZGVpZCsrLCBnZW5lcmF0aW9uKTsKKwkJbm9kZW1ncl9ub2RlX3NjYW5fb25lKGhvc3QsIG5vZGVpZCsrLCBnZW5lcmF0aW9uKTsKIAl9CiB9CiAKLXN0YXRpYyBpbnQgX19ub2RlbWdyX2RyaXZlcl9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZGF0YSkKK3N0YXRpYyB2b2lkIG5vZGVtZ3JfcGF1c2VfbmUoc3RydWN0IG5vZGVfZW50cnkgKm5lKQogewotCXN0cnVjdCB1bml0X2RpcmVjdG9yeSAqdWQ7Ci0Jc3RydWN0IGRldmljZV9kcml2ZXIgKmRydjsKLQlzdHJ1Y3Qgbm9kZV9lbnRyeSAqbmUgPSAoc3RydWN0IG5vZGVfZW50cnkgKilkYXRhOwotCWludCBlcnJvcjsKLQotCXVkID0gY29udGFpbmVyX29mKGRldiwgc3RydWN0IHVuaXRfZGlyZWN0b3J5LCB1bml0X2Rldik7Ci0JaWYgKHVkLT5uZSA9PSBuZSkgewotCQlkcnYgPSBnZXRfZHJpdmVyKHVkLT5kZXZpY2UuZHJpdmVyKTsKLQkJaWYgKGRydikgewotCQkJZXJyb3IgPSAxOyAvKiByZWxlYXNlIGlmIHN1c3BlbmQgaXMgbm90IGltcGxlbWVudGVkICovCi0JCQlpZiAoZHJ2LT5zdXNwZW5kKSB7Ci0JCQkJZG93bigmdWQtPmRldmljZS5zZW0pOwotCQkJCWVycm9yID0gZHJ2LT5zdXNwZW5kKCZ1ZC0+ZGV2aWNlLCBQTVNHX1NVU1BFTkQpOwotCQkJCXVwKCZ1ZC0+ZGV2aWNlLnNlbSk7Ci0JCQl9Ci0JCQlpZiAoZXJyb3IpCi0JCQkJZGV2aWNlX3JlbGVhc2VfZHJpdmVyKCZ1ZC0+ZGV2aWNlKTsKLQkJCXB1dF9kcml2ZXIoZHJ2KTsKLQkJfQotCX0KLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IF9fbm9kZW1ncl9kcml2ZXJfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZGF0YSkKLXsKLQlzdHJ1Y3QgdW5pdF9kaXJlY3RvcnkgKnVkOwotCXN0cnVjdCBkZXZpY2VfZHJpdmVyICpkcnY7Ci0Jc3RydWN0IG5vZGVfZW50cnkgKm5lID0gKHN0cnVjdCBub2RlX2VudHJ5ICopZGF0YTsKLQotCXVkID0gY29udGFpbmVyX29mKGRldiwgc3RydWN0IHVuaXRfZGlyZWN0b3J5LCB1bml0X2Rldik7Ci0JaWYgKHVkLT5uZSA9PSBuZSkgewotCQlkcnYgPSBnZXRfZHJpdmVyKHVkLT5kZXZpY2UuZHJpdmVyKTsKLQkJaWYgKGRydikgewotCQkJaWYgKGRydi0+cmVzdW1lKSB7Ci0JCQkJZG93bigmdWQtPmRldmljZS5zZW0pOwotCQkJCWRydi0+cmVzdW1lKCZ1ZC0+ZGV2aWNlKTsKLQkJCQl1cCgmdWQtPmRldmljZS5zZW0pOwotCQkJfQotCQkJcHV0X2RyaXZlcihkcnYpOwotCQl9Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIG5vZGVtZ3Jfc3VzcGVuZF9uZShzdHJ1Y3Qgbm9kZV9lbnRyeSAqbmUpCi17Ci0JSFBTQl9ERUJVRygiTm9kZSBzdXNwZW5kZWQ6IElEOkJVU1siIE5PREVfQlVTX0ZNVCAiXSAgR1VJRFslMDE2THhdIiwKKwlIUFNCX0RFQlVHKCJOb2RlIHBhdXNlZDogSUQ6QlVTWyIgTk9ERV9CVVNfRk1UICJdICBHVUlEWyUwMTZMeF0iLAogCQkgICBOT0RFX0JVU19BUkdTKG5lLT5ob3N0LCBuZS0+bm9kZWlkKSwKIAkJICAgKHVuc2lnbmVkIGxvbmcgbG9uZyluZS0+Z3VpZCk7CiAKLQluZS0+aW5fbGltYm8gPSAxOworCW5lLT5pbl9saW1ibyA9IHRydWU7CiAJV0FSTl9PTihkZXZpY2VfY3JlYXRlX2ZpbGUoJm5lLT5kZXZpY2UsICZkZXZfYXR0cl9uZV9pbl9saW1ibykpOwotCi0JY2xhc3NfZm9yX2VhY2hfZGV2aWNlKCZub2RlbWdyX3VkX2NsYXNzLCBOVUxMLCBuZSwKLQkJCSAgICAgIF9fbm9kZW1ncl9kcml2ZXJfc3VzcGVuZCk7CiB9CiAKLQotc3RhdGljIHZvaWQgbm9kZW1ncl9yZXN1bWVfbmUoc3RydWN0IG5vZGVfZW50cnkgKm5lKQotewotCW5lLT5pbl9saW1ibyA9IDA7Ci0JZGV2aWNlX3JlbW92ZV9maWxlKCZuZS0+ZGV2aWNlLCAmZGV2X2F0dHJfbmVfaW5fbGltYm8pOwotCi0JY2xhc3NfZm9yX2VhY2hfZGV2aWNlKCZub2RlbWdyX3VkX2NsYXNzLCBOVUxMLCBuZSwKLQkJCSAgICAgIF9fbm9kZW1ncl9kcml2ZXJfcmVzdW1lKTsKLQlIUFNCX0RFQlVHKCJOb2RlIHJlc3VtZWQ6IElEOkJVU1siIE5PREVfQlVTX0ZNVCAiXSAgR1VJRFslMDE2THhdIiwKLQkJICAgTk9ERV9CVVNfQVJHUyhuZS0+aG9zdCwgbmUtPm5vZGVpZCksICh1bnNpZ25lZCBsb25nIGxvbmcpbmUtPmd1aWQpOwotfQotCi1zdGF0aWMgaW50IF9fbm9kZW1ncl91cGRhdGVfcGRydihzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEpCitzdGF0aWMgaW50IHVwZGF0ZV9wZHJ2KHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZGF0YSkKIHsKIAlzdHJ1Y3QgdW5pdF9kaXJlY3RvcnkgKnVkOwogCXN0cnVjdCBkZXZpY2VfZHJpdmVyICpkcnY7CiAJc3RydWN0IGhwc2JfcHJvdG9jb2xfZHJpdmVyICpwZHJ2OwotCXN0cnVjdCBub2RlX2VudHJ5ICpuZSA9IChzdHJ1Y3Qgbm9kZV9lbnRyeSAqKWRhdGE7CisJc3RydWN0IG5vZGVfZW50cnkgKm5lID0gZGF0YTsKIAlpbnQgZXJyb3I7CiAKIAl1ZCA9IGNvbnRhaW5lcl9vZihkZXYsIHN0cnVjdCB1bml0X2RpcmVjdG9yeSwgdW5pdF9kZXYpOwpAQCAtMTUwMywxMSArMTQxMyw5IEBACiAKIHN0YXRpYyB2b2lkIG5vZGVtZ3JfdXBkYXRlX3BkcnYoc3RydWN0IG5vZGVfZW50cnkgKm5lKQogewotCWNsYXNzX2Zvcl9lYWNoX2RldmljZSgmbm9kZW1ncl91ZF9jbGFzcywgTlVMTCwgbmUsCi0JCQkgICAgICBfX25vZGVtZ3JfdXBkYXRlX3BkcnYpOworCWNsYXNzX2Zvcl9lYWNoX2RldmljZSgmbm9kZW1ncl91ZF9jbGFzcywgTlVMTCwgbmUsIHVwZGF0ZV9wZHJ2KTsKIH0KIAotCiAvKiBXcml0ZSB0aGUgQlJPQURDQVNUX0NIQU5ORUwgYXMgcGVyIElFRUUxMzk0YSA4LjMuMi4zLjExIGFuZCA4LjQuMi4zLiAgVGhpcwogICogc2VlbXMgbGlrZSBhbiBvcHRpb25hbCBzZXJ2aWNlIGJ1dCBpbiB0aGUgZW5kIGl0IGlzIHByYWN0aWNhbGx5IG1hbmRhdG9yeQogICogYXMgYSBjb25zZXF1ZW5jZSBvZiB0aGVzZSBjbGF1c2VzLgpAQCAtMTUzNSwxMSArMTQ0MywxMiBAQAogfQogCiAKLXN0YXRpYyB2b2lkIG5vZGVtZ3JfcHJvYmVfbmUoc3RydWN0IGhvc3RfaW5mbyAqaGksIHN0cnVjdCBub2RlX2VudHJ5ICpuZSwgaW50IGdlbmVyYXRpb24pCitzdGF0aWMgdm9pZCBub2RlbWdyX3Byb2JlX25lKHN0cnVjdCBocHNiX2hvc3QgKmhvc3QsIHN0cnVjdCBub2RlX2VudHJ5ICpuZSwKKwkJCSAgICAgaW50IGdlbmVyYXRpb24pCiB7CiAJc3RydWN0IGRldmljZSAqZGV2OwogCi0JaWYgKG5lLT5ob3N0ICE9IGhpLT5ob3N0IHx8IG5lLT5pbl9saW1ibykKKwlpZiAobmUtPmhvc3QgIT0gaG9zdCB8fCBuZS0+aW5fbGltYm8pCiAJCXJldHVybjsKIAogCWRldiA9IGdldF9kZXZpY2UoJm5lLT5kZXZpY2UpOwpAQCAtMTU1NCw0MCArMTQ2Myw0MCBAQAogCSAqIGRvd24gdG8gdGhlIGRyaXZlcnMuIE90aGVyd2lzZSwgdGhpcyBpcyBhIGRlYWQgbm9kZSBhbmQgd2UKIAkgKiBzdXNwZW5kIGl0LiAqLwogCWlmIChuZS0+bmVlZHNfcHJvYmUpCi0JCW5vZGVtZ3JfcHJvY2Vzc19yb290X2RpcmVjdG9yeShoaSwgbmUpOworCQlub2RlbWdyX3Byb2Nlc3Nfcm9vdF9kaXJlY3RvcnkobmUpOwogCWVsc2UgaWYgKG5lLT5nZW5lcmF0aW9uID09IGdlbmVyYXRpb24pCiAJCW5vZGVtZ3JfdXBkYXRlX3BkcnYobmUpOwogCWVsc2UKLQkJbm9kZW1ncl9zdXNwZW5kX25lKG5lKTsKKwkJbm9kZW1ncl9wYXVzZV9uZShuZSk7CiAKIAlwdXRfZGV2aWNlKGRldik7CiB9CiAKLXN0cnVjdCBwcm9iZV9wYXJhbSB7Ci0Jc3RydWN0IGhvc3RfaW5mbyAqaGk7CitzdHJ1Y3Qgbm9kZV9wcm9iZV9wYXJhbWV0ZXIgeworCXN0cnVjdCBocHNiX2hvc3QgKmhvc3Q7CiAJaW50IGdlbmVyYXRpb247CiAJYm9vbCBwcm9iZV9ub3c7CiB9OwogCiBzdGF0aWMgaW50IG5vZGVfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkYXRhKQogewotCXN0cnVjdCBwcm9iZV9wYXJhbSAqcCA9IGRhdGE7CisJc3RydWN0IG5vZGVfcHJvYmVfcGFyYW1ldGVyICpwID0gZGF0YTsKIAlzdHJ1Y3Qgbm9kZV9lbnRyeSAqbmU7CiAKLQlpZiAocC0+Z2VuZXJhdGlvbiAhPSBnZXRfaHBzYl9nZW5lcmF0aW9uKHAtPmhpLT5ob3N0KSkKKwlpZiAocC0+Z2VuZXJhdGlvbiAhPSBnZXRfaHBzYl9nZW5lcmF0aW9uKHAtPmhvc3QpKQogCQlyZXR1cm4gLUVBR0FJTjsKIAogCW5lID0gY29udGFpbmVyX29mKGRldiwgc3RydWN0IG5vZGVfZW50cnksIG5vZGVfZGV2KTsKIAlpZiAobmUtPm5lZWRzX3Byb2JlID09IHAtPnByb2JlX25vdykKLQkJbm9kZW1ncl9wcm9iZV9uZShwLT5oaSwgbmUsIHAtPmdlbmVyYXRpb24pOworCQlub2RlbWdyX3Byb2JlX25lKHAtPmhvc3QsIG5lLCBwLT5nZW5lcmF0aW9uKTsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgbm9kZW1ncl9ub2RlX3Byb2JlKHN0cnVjdCBob3N0X2luZm8gKmhpLCBpbnQgZ2VuZXJhdGlvbikKK3N0YXRpYyBpbnQgbm9kZW1ncl9ub2RlX3Byb2JlKHN0cnVjdCBocHNiX2hvc3QgKmhvc3QsIGludCBnZW5lcmF0aW9uKQogewotCXN0cnVjdCBwcm9iZV9wYXJhbSBwOworCXN0cnVjdCBub2RlX3Byb2JlX3BhcmFtZXRlciBwOwogCi0JcC5oaSA9IGhpOworCXAuaG9zdCA9IGhvc3Q7CiAJcC5nZW5lcmF0aW9uID0gZ2VuZXJhdGlvbjsKIAkvKgogCSAqIERvIHNvbWUgcHJvY2Vzc2luZyBvZiB0aGUgbm9kZXMgd2UndmUgcHJvYmVkLiBUaGlzIHB1bGxzIHRoZW0KQEAgLTE2MDQsMTEgKzE1MTMsMTEgQEAKIAkgKi8KIAlwLnByb2JlX25vdyA9IGZhbHNlOwogCWlmIChjbGFzc19mb3JfZWFjaF9kZXZpY2UoJm5vZGVtZ3JfbmVfY2xhc3MsIE5VTEwsICZwLCBub2RlX3Byb2JlKSAhPSAwKQotCQlyZXR1cm47CisJCXJldHVybiAwOwogCiAJcC5wcm9iZV9ub3cgPSB0cnVlOwogCWlmIChjbGFzc19mb3JfZWFjaF9kZXZpY2UoJm5vZGVtZ3JfbmVfY2xhc3MsIE5VTEwsICZwLCBub2RlX3Byb2JlKSAhPSAwKQotCQlyZXR1cm47CisJCXJldHVybiAwOwogCS8qCiAJICogTm93IGxldCdzIHRlbGwgdGhlIGJ1cyB0byByZXNjYW4gb3VyIGRldmljZXMuIFRoaXMgbWF5IHNlZW0KIAkgKiBsaWtlIG92ZXJoZWFkLCBidXQgdGhlIGRyaXZlci1tb2RlbCBjb3JlIHdpbGwgb25seSBzY2FuIGEKQEAgLTE2MjAsNiArMTUyOSwyNyBAQAogCSAqLwogCWlmIChidXNfcmVzY2FuX2RldmljZXMoJmllZWUxMzk0X2J1c190eXBlKSAhPSAwKQogCQlIUFNCX0RFQlVHKCJidXNfcmVzY2FuX2RldmljZXMgaGFkIGFuIGVycm9yIik7CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCByZW1vdmVfbm9kZXNfaW5fbGltYm8oc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBub2RlX2VudHJ5ICpuZTsKKworCWlmIChkZXYtPmJ1cyAhPSAmaWVlZTEzOTRfYnVzX3R5cGUpCisJCXJldHVybiAwOworCisJbmUgPSBjb250YWluZXJfb2YoZGV2LCBzdHJ1Y3Qgbm9kZV9lbnRyeSwgZGV2aWNlKTsKKwlpZiAobmUtPmluX2xpbWJvKQorCQlub2RlbWdyX3JlbW92ZV9uZShuZSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgbm9kZW1ncl9yZW1vdmVfbm9kZXNfaW5fbGltYm8oc3RydWN0IGhwc2JfaG9zdCAqaG9zdCkKK3sKKwlkZXZpY2VfZm9yX2VhY2hfY2hpbGQoJmhvc3QtPmRldmljZSwgTlVMTCwgcmVtb3ZlX25vZGVzX2luX2xpbWJvKTsKIH0KIAogc3RhdGljIGludCBub2RlbWdyX3NlbmRfcmVzdW1lX3BhY2tldChzdHJ1Y3QgaHBzYl9ob3N0ICpob3N0KQpAQCAtMTczMCwxMCArMTY2MCw5IEBACiAJcmV0dXJuIDE7CiB9CiAKLXN0YXRpYyBpbnQgbm9kZW1ncl9ob3N0X3RocmVhZCh2b2lkICpfX2hpKQorc3RhdGljIGludCBub2RlbWdyX2hvc3RfdGhyZWFkKHZvaWQgKmRhdGEpCiB7Ci0Jc3RydWN0IGhvc3RfaW5mbyAqaGkgPSAoc3RydWN0IGhvc3RfaW5mbyAqKV9faGk7Ci0Jc3RydWN0IGhwc2JfaG9zdCAqaG9zdCA9IGhpLT5ob3N0OworCXN0cnVjdCBocHNiX2hvc3QgKmhvc3QgPSBkYXRhOwogCXVuc2lnbmVkIGludCBnLCBnZW5lcmF0aW9uID0gMDsKIAlpbnQgaSwgcmVzZXRfY3ljbGVzID0gMDsKIApAQCAtMTc4NywzNiArMTcxNiw0OCBAQAogCQkgKiBlbnRyaWVzLiBUaGlzIGRvZXMgbm90IGRvIHRoZSBzeXNmcyBzdHVmZiwgc2luY2UgdGhhdAogCQkgKiB3b3VsZCB0cmlnZ2VyIHVldmVudHMgYW5kIHN1Y2gsIHdoaWNoIGlzIGEgYmFkIGlkZWEgYXQKIAkJICogdGhpcyBwb2ludC4gKi8KLQkJbm9kZW1ncl9ub2RlX3NjYW4oaGksIGdlbmVyYXRpb24pOworCQlub2RlbWdyX25vZGVfc2Nhbihob3N0LCBnZW5lcmF0aW9uKTsKIAogCQkvKiBUaGlzIGFjdHVhbGx5IGRvZXMgdGhlIGZ1bGwgcHJvYmUsIHdpdGggc3lzZnMKIAkJICogcmVnaXN0cmF0aW9uLiAqLwotCQlub2RlbWdyX25vZGVfcHJvYmUoaGksIGdlbmVyYXRpb24pOworCQlpZiAoIW5vZGVtZ3Jfbm9kZV9wcm9iZShob3N0LCBnZW5lcmF0aW9uKSkKKwkJCWNvbnRpbnVlOwogCiAJCS8qIFVwZGF0ZSBzb21lIG9mIG91ciBzeXNmcyBzeW1saW5rcyAqLwogCQlub2RlbWdyX3VwZGF0ZV9ob3N0X2Rldl9saW5rcyhob3N0KTsKKworCQkvKiBTbGVlcCAzIHNlY29uZHMgKi8KKwkJZm9yIChpID0gMzAwMC8yMDA7IGk7IGktLSkgeworCQkJbXNsZWVwX2ludGVycnVwdGlibGUoMjAwKTsKKwkJCWlmIChrdGhyZWFkX3Nob3VsZF9zdG9wKCkpCisJCQkJZ290byBleGl0OworCisJCQlpZiAoZ2VuZXJhdGlvbiAhPSBnZXRfaHBzYl9nZW5lcmF0aW9uKGhvc3QpKQorCQkJCWJyZWFrOworCQl9CisJCS8qIFJlbW92ZSBub2RlcyB3aGljaCBhcmUgZ29uZSwgdW5sZXNzIGEgYnVzIHJlc2V0IGhhcHBlbmVkICovCisJCWlmICghaSkKKwkJCW5vZGVtZ3JfcmVtb3ZlX25vZGVzX2luX2xpbWJvKGhvc3QpOwogCX0KIGV4aXQ6CiAJSFBTQl9WRVJCT1NFKCJOb2RlTWdyOiBFeGl0aW5nIHRocmVhZCIpOwogCXJldHVybiAwOwogfQogCi1zdHJ1Y3QgaG9zdF9pdGVyX3BhcmFtIHsKK3N0cnVjdCBwZXJfaG9zdF9wYXJhbWV0ZXIgewogCXZvaWQgKmRhdGE7CiAJaW50ICgqY2IpKHN0cnVjdCBocHNiX2hvc3QgKiwgdm9pZCAqKTsKIH07CiAKLXN0YXRpYyBpbnQgX19ub2RlbWdyX2Zvcl9lYWNoX2hvc3Qoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkYXRhKQorc3RhdGljIGludCBwZXJfaG9zdChzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEpCiB7CiAJc3RydWN0IGhwc2JfaG9zdCAqaG9zdDsKLQlzdHJ1Y3QgaG9zdF9pdGVyX3BhcmFtICpoaXAgPSAoc3RydWN0IGhvc3RfaXRlcl9wYXJhbSAqKWRhdGE7Ci0JaW50IGVycm9yID0gMDsKKwlzdHJ1Y3QgcGVyX2hvc3RfcGFyYW1ldGVyICpwID0gZGF0YTsKIAogCWhvc3QgPSBjb250YWluZXJfb2YoZGV2LCBzdHJ1Y3QgaHBzYl9ob3N0LCBob3N0X2Rldik7Ci0JZXJyb3IgPSBoaXAtPmNiKGhvc3QsIGhpcC0+ZGF0YSk7Ci0KLQlyZXR1cm4gZXJyb3I7CisJcmV0dXJuIHAtPmNiKGhvc3QsIHAtPmRhdGEpOwogfQorCiAvKioKICAqIG5vZGVtZ3JfZm9yX2VhY2hfaG9zdCAtIGNhbGwgYSBmdW5jdGlvbiBmb3IgZWFjaCBJRUVFIDEzOTQgaG9zdAogICogQGRhdGE6IGFuIGFkZHJlc3MgdG8gc3VwcGx5IHRvIHRoZSBjYWxsYmFjawpAQCAtMTgzMSwxNSArMTc3MiwxMSBAQAogICovCiBpbnQgbm9kZW1ncl9mb3JfZWFjaF9ob3N0KHZvaWQgKmRhdGEsIGludCAoKmNiKShzdHJ1Y3QgaHBzYl9ob3N0ICosIHZvaWQgKikpCiB7Ci0Jc3RydWN0IGhvc3RfaXRlcl9wYXJhbSBoaXA7Ci0JaW50IGVycm9yOworCXN0cnVjdCBwZXJfaG9zdF9wYXJhbWV0ZXIgcDsKIAotCWhpcC5jYiA9IGNiOwotCWhpcC5kYXRhID0gZGF0YTsKLQllcnJvciA9IGNsYXNzX2Zvcl9lYWNoX2RldmljZSgmaHBzYl9ob3N0X2NsYXNzLCBOVUxMLCAmaGlwLAotCQkJCSAgICAgIF9fbm9kZW1ncl9mb3JfZWFjaF9ob3N0KTsKLQotCXJldHVybiBlcnJvcjsKKwlwLmNiID0gY2I7CisJcC5kYXRhID0gZGF0YTsKKwlyZXR1cm4gY2xhc3NfZm9yX2VhY2hfZGV2aWNlKCZocHNiX2hvc3RfY2xhc3MsIE5VTEwsICZwLCBwZXJfaG9zdCk7CiB9CiAKIC8qIFRoZSBmb2xsb3dpbmcgdHdvIGNvbnZlbmllbmNlIGZ1bmN0aW9ucyB1c2UgYSBzdHJ1Y3Qgbm9kZV9lbnRyeQpAQCAtMTg5Myw3ICsxODMwLDcgQEAKIAkJcmV0dXJuOwogCX0KIAloaS0+aG9zdCA9IGhvc3Q7Ci0JaGktPnRocmVhZCA9IGt0aHJlYWRfcnVuKG5vZGVtZ3JfaG9zdF90aHJlYWQsIGhpLCAia25vZGVtZ3JkXyVkIiwKKwloaS0+dGhyZWFkID0ga3RocmVhZF9ydW4obm9kZW1ncl9ob3N0X3RocmVhZCwgaG9zdCwgImtub2RlbWdyZF8lZCIsCiAJCQkJIGhvc3QtPmlkKTsKIAlpZiAoSVNfRVJSKGhpLT50aHJlYWQpKSB7CiAJCUhQU0JfRVJSKCJOb2RlTWdyOiBjYW5ub3Qgc3RhcnQgdGhyZWFkIGZvciBob3N0ICVkIiwgaG9zdC0+aWQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZWVlMTM5NC9ub2RlbWdyLmggYi9kcml2ZXJzL2llZWUxMzk0L25vZGVtZ3IuaAppbmRleCA2ZWIyNjQ2Li40ZjI4N2EzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2llZWUxMzk0L25vZGVtZ3IuaAorKysgYi9kcml2ZXJzL2llZWUxMzk0L25vZGVtZ3IuaApAQCAtMTEwLDcgKzExMCw3IEBACiAJc3RydWN0IGRldmljZSBub2RlX2RldjsKIAogCS8qIE1lYW5zIHRoaXMgbm9kZSBpcyBub3QgYXR0YWNoZWQgYW55bW9yZSAqLwotCWludCBpbl9saW1ibzsKKwlib29sIGluX2xpbWJvOwogCiAJc3RydWN0IGNzcjEyMTJfY3NyICpjc3I7CiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZWVlMTM5NC9yYXcxMzk0LXByaXZhdGUuaCBiL2RyaXZlcnMvaWVlZTEzOTQvcmF3MTM5NC1wcml2YXRlLmgKaW5kZXggYTA2YWFhZC4uN2EyMjVhNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZWVlMTM5NC9yYXcxMzk0LXByaXZhdGUuaAorKysgYi9kcml2ZXJzL2llZWUxMzk0L3JhdzEzOTQtcHJpdmF0ZS5oCkBAIC0yMiw2ICsyMiw3IEBACiBzdHJ1Y3QgZmlsZV9pbmZvIHsKICAgICAgICAgc3RydWN0IGxpc3RfaGVhZCBsaXN0OwogCisJc3RydWN0IG11dGV4IHN0YXRlX211dGV4OwogICAgICAgICBlbnVtIHsgb3BlbmVkLCBpbml0aWFsaXplZCwgY29ubmVjdGVkIH0gc3RhdGU7CiAgICAgICAgIHVuc2lnbmVkIGludCBwcm90b2NvbF92ZXJzaW9uOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2llZWUxMzk0L3JhdzEzOTQuYyBiL2RyaXZlcnMvaWVlZTEzOTQvcmF3MTM5NC5jCmluZGV4IDZmYTllNGEuLjlmMTlhYzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWVlZTEzOTQvcmF3MTM5NC5jCisrKyBiL2RyaXZlcnMvaWVlZTEzOTQvcmF3MTM5NC5jCkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSA8bGludXgvZnMuaD4KICNpbmNsdWRlIDxsaW51eC9wb2xsLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgpAQCAtMjI2Nyw2ICsyMjY4LDggQEAKIAkJcmV0dXJuIC1FRkFVTFQ7CiAJfQogCisJbXV0ZXhfbG9jaygmZmktPnN0YXRlX211dGV4KTsKKwogCXN3aXRjaCAoZmktPnN0YXRlKSB7CiAJY2FzZSBvcGVuZWQ6CiAJCXJldHZhbCA9IHN0YXRlX29wZW5lZChmaSwgcmVxKTsKQEAgLTIyODEsNiArMjI4NCw4IEBACiAJCWJyZWFrOwogCX0KIAorCW11dGV4X3VubG9jaygmZmktPnN0YXRlX211dGV4KTsKKwogCWlmIChyZXR2YWwgPCAwKSB7CiAJCWZyZWVfcGVuZGluZ19yZXF1ZXN0KHJlcSk7CiAJfSBlbHNlIHsKQEAgLTI1NDEsMTA5ICsyNTQ2LDEyMCBAQAogc3RhdGljIGludCByYXcxMzk0X21tYXAoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQogewogCXN0cnVjdCBmaWxlX2luZm8gKmZpID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCWludCByZXQ7CisKKwltdXRleF9sb2NrKCZmaS0+c3RhdGVfbXV0ZXgpOwogCiAJaWYgKGZpLT5pc29fc3RhdGUgPT0gUkFXMTM5NF9JU09fSU5BQ1RJVkUpCi0JCXJldHVybiAtRUlOVkFMOworCQlyZXQgPSAtRUlOVkFMOworCWVsc2UKKwkJcmV0ID0gZG1hX3JlZ2lvbl9tbWFwKCZmaS0+aXNvX2hhbmRsZS0+ZGF0YV9idWYsIGZpbGUsIHZtYSk7CiAKLQlyZXR1cm4gZG1hX3JlZ2lvbl9tbWFwKCZmaS0+aXNvX2hhbmRsZS0+ZGF0YV9idWYsIGZpbGUsIHZtYSk7CisJbXV0ZXhfdW5sb2NrKCZmaS0+c3RhdGVfbXV0ZXgpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGxvbmcgcmF3MTM5NF9pb2N0bF9pbmFjdGl2ZShzdHJ1Y3QgZmlsZV9pbmZvICpmaSwgdW5zaWduZWQgaW50IGNtZCwKKwkJCQkgICB2b2lkIF9fdXNlciAqYXJncCkKK3sKKwlzd2l0Y2ggKGNtZCkgeworCWNhc2UgUkFXMTM5NF9JT0NfSVNPX1hNSVRfSU5JVDoKKwkJcmV0dXJuIHJhdzEzOTRfaXNvX3htaXRfaW5pdChmaSwgYXJncCk7CisJY2FzZSBSQVcxMzk0X0lPQ19JU09fUkVDVl9JTklUOgorCQlyZXR1cm4gcmF3MTM5NF9pc29fcmVjdl9pbml0KGZpLCBhcmdwKTsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9Cit9CisKK3N0YXRpYyBsb25nIHJhdzEzOTRfaW9jdGxfcmVjdihzdHJ1Y3QgZmlsZV9pbmZvICpmaSwgdW5zaWduZWQgaW50IGNtZCwKKwkJCSAgICAgICB1bnNpZ25lZCBsb25nIGFyZykKK3sKKwl2b2lkIF9fdXNlciAqYXJncCA9ICh2b2lkIF9fdXNlciAqKWFyZzsKKworCXN3aXRjaCAoY21kKSB7CisJY2FzZSBSQVcxMzk0X0lPQ19JU09fUkVDVl9TVEFSVDp7CisJCQlpbnQgYXJnc1szXTsKKworCQkJaWYgKGNvcHlfZnJvbV91c2VyKCZhcmdzWzBdLCBhcmdwLCBzaXplb2YoYXJncykpKQorCQkJCXJldHVybiAtRUZBVUxUOworCQkJcmV0dXJuIGhwc2JfaXNvX3JlY3Zfc3RhcnQoZmktPmlzb19oYW5kbGUsCisJCQkJCQkgICBhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdKTsKKwkJfQorCWNhc2UgUkFXMTM5NF9JT0NfSVNPX1hNSVRfUkVDVl9TVE9QOgorCQlocHNiX2lzb19zdG9wKGZpLT5pc29faGFuZGxlKTsKKwkJcmV0dXJuIDA7CisJY2FzZSBSQVcxMzk0X0lPQ19JU09fUkVDVl9MSVNURU5fQ0hBTk5FTDoKKwkJcmV0dXJuIGhwc2JfaXNvX3JlY3ZfbGlzdGVuX2NoYW5uZWwoZmktPmlzb19oYW5kbGUsIGFyZyk7CisJY2FzZSBSQVcxMzk0X0lPQ19JU09fUkVDVl9VTkxJU1RFTl9DSEFOTkVMOgorCQlyZXR1cm4gaHBzYl9pc29fcmVjdl91bmxpc3Rlbl9jaGFubmVsKGZpLT5pc29faGFuZGxlLCBhcmcpOworCWNhc2UgUkFXMTM5NF9JT0NfSVNPX1JFQ1ZfU0VUX0NIQU5ORUxfTUFTSzp7CisJCQl1NjQgbWFzazsKKworCQkJaWYgKGNvcHlfZnJvbV91c2VyKCZtYXNrLCBhcmdwLCBzaXplb2YobWFzaykpKQorCQkJCXJldHVybiAtRUZBVUxUOworCQkJcmV0dXJuIGhwc2JfaXNvX3JlY3Zfc2V0X2NoYW5uZWxfbWFzayhmaS0+aXNvX2hhbmRsZSwKKwkJCQkJCQkgICAgICBtYXNrKTsKKwkJfQorCWNhc2UgUkFXMTM5NF9JT0NfSVNPX0dFVF9TVEFUVVM6CisJCXJldHVybiByYXcxMzk0X2lzb19nZXRfc3RhdHVzKGZpLCBhcmdwKTsKKwljYXNlIFJBVzEzOTRfSU9DX0lTT19SRUNWX1BBQ0tFVFM6CisJCXJldHVybiByYXcxMzk0X2lzb19yZWN2X3BhY2tldHMoZmksIGFyZ3ApOworCWNhc2UgUkFXMTM5NF9JT0NfSVNPX1JFQ1ZfUkVMRUFTRV9QQUNLRVRTOgorCQlyZXR1cm4gaHBzYl9pc29fcmVjdl9yZWxlYXNlX3BhY2tldHMoZmktPmlzb19oYW5kbGUsIGFyZyk7CisJY2FzZSBSQVcxMzk0X0lPQ19JU09fUkVDVl9GTFVTSDoKKwkJcmV0dXJuIGhwc2JfaXNvX3JlY3ZfZmx1c2goZmktPmlzb19oYW5kbGUpOworCWNhc2UgUkFXMTM5NF9JT0NfSVNPX1NIVVRET1dOOgorCQlyYXcxMzk0X2lzb19zaHV0ZG93bihmaSk7CisJCXJldHVybiAwOworCWNhc2UgUkFXMTM5NF9JT0NfSVNPX1FVRVVFX0FDVElWSVRZOgorCQlxdWV1ZV9yYXdpc29fZXZlbnQoZmkpOworCQlyZXR1cm4gMDsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9Cit9CisKK3N0YXRpYyBsb25nIHJhdzEzOTRfaW9jdGxfeG1pdChzdHJ1Y3QgZmlsZV9pbmZvICpmaSwgdW5zaWduZWQgaW50IGNtZCwKKwkJCSAgICAgICB2b2lkIF9fdXNlciAqYXJncCkKK3sKKwlzd2l0Y2ggKGNtZCkgeworCWNhc2UgUkFXMTM5NF9JT0NfSVNPX1hNSVRfU1RBUlQ6eworCQkJaW50IGFyZ3NbMl07CisKKwkJCWlmIChjb3B5X2Zyb21fdXNlcigmYXJnc1swXSwgYXJncCwgc2l6ZW9mKGFyZ3MpKSkKKwkJCQlyZXR1cm4gLUVGQVVMVDsKKwkJCXJldHVybiBocHNiX2lzb194bWl0X3N0YXJ0KGZpLT5pc29faGFuZGxlLAorCQkJCQkJICAgYXJnc1swXSwgYXJnc1sxXSk7CisJCX0KKwljYXNlIFJBVzEzOTRfSU9DX0lTT19YTUlUX1NZTkM6CisJCXJldHVybiBocHNiX2lzb194bWl0X3N5bmMoZmktPmlzb19oYW5kbGUpOworCWNhc2UgUkFXMTM5NF9JT0NfSVNPX1hNSVRfUkVDVl9TVE9QOgorCQlocHNiX2lzb19zdG9wKGZpLT5pc29faGFuZGxlKTsKKwkJcmV0dXJuIDA7CisJY2FzZSBSQVcxMzk0X0lPQ19JU09fR0VUX1NUQVRVUzoKKwkJcmV0dXJuIHJhdzEzOTRfaXNvX2dldF9zdGF0dXMoZmksIGFyZ3ApOworCWNhc2UgUkFXMTM5NF9JT0NfSVNPX1hNSVRfUEFDS0VUUzoKKwkJcmV0dXJuIHJhdzEzOTRfaXNvX3NlbmRfcGFja2V0cyhmaSwgYXJncCk7CisJY2FzZSBSQVcxMzk0X0lPQ19JU09fU0hVVERPV046CisJCXJhdzEzOTRfaXNvX3NodXRkb3duKGZpKTsKKwkJcmV0dXJuIDA7CisJY2FzZSBSQVcxMzk0X0lPQ19JU09fUVVFVUVfQUNUSVZJVFk6CisJCXF1ZXVlX3Jhd2lzb19ldmVudChmaSk7CisJCXJldHVybiAwOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KIH0KIAogLyogaW9jdGwgaXMgb25seSB1c2VkIGZvciByYXdpc28gb3BlcmF0aW9ucyAqLwotc3RhdGljIGxvbmcgZG9fcmF3MTM5NF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwKLQkJCQkJCQl1bnNpZ25lZCBsb25nIGFyZykKK3N0YXRpYyBsb25nIHJhdzEzOTRfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsCisJCQkgIHVuc2lnbmVkIGxvbmcgYXJnKQogewogCXN0cnVjdCBmaWxlX2luZm8gKmZpID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwogCXZvaWQgX191c2VyICphcmdwID0gKHZvaWQgX191c2VyICopYXJnOwotCi0Jc3dpdGNoIChmaS0+aXNvX3N0YXRlKSB7Ci0JY2FzZSBSQVcxMzk0X0lTT19JTkFDVElWRToKLQkJc3dpdGNoIChjbWQpIHsKLQkJY2FzZSBSQVcxMzk0X0lPQ19JU09fWE1JVF9JTklUOgotCQkJcmV0dXJuIHJhdzEzOTRfaXNvX3htaXRfaW5pdChmaSwgYXJncCk7Ci0JCWNhc2UgUkFXMTM5NF9JT0NfSVNPX1JFQ1ZfSU5JVDoKLQkJCXJldHVybiByYXcxMzk0X2lzb19yZWN2X2luaXQoZmksIGFyZ3ApOwotCQlkZWZhdWx0OgotCQkJYnJlYWs7Ci0JCX0KLQkJYnJlYWs7Ci0JY2FzZSBSQVcxMzk0X0lTT19SRUNWOgotCQlzd2l0Y2ggKGNtZCkgewotCQljYXNlIFJBVzEzOTRfSU9DX0lTT19SRUNWX1NUQVJUOnsKLQkJCQkvKiBjb3B5IGFyZ3MgZnJvbSB1c2VyLXNwYWNlICovCi0JCQkJaW50IGFyZ3NbM107Ci0JCQkJaWYgKGNvcHlfZnJvbV91c2VyCi0JCQkJICAgICgmYXJnc1swXSwgYXJncCwgc2l6ZW9mKGFyZ3MpKSkKLQkJCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCQkJcmV0dXJuIGhwc2JfaXNvX3JlY3Zfc3RhcnQoZmktPmlzb19oYW5kbGUsCi0JCQkJCQkJICAgYXJnc1swXSwgYXJnc1sxXSwKLQkJCQkJCQkgICBhcmdzWzJdKTsKLQkJCX0KLQkJY2FzZSBSQVcxMzk0X0lPQ19JU09fWE1JVF9SRUNWX1NUT1A6Ci0JCQlocHNiX2lzb19zdG9wKGZpLT5pc29faGFuZGxlKTsKLQkJCXJldHVybiAwOwotCQljYXNlIFJBVzEzOTRfSU9DX0lTT19SRUNWX0xJU1RFTl9DSEFOTkVMOgotCQkJcmV0dXJuIGhwc2JfaXNvX3JlY3ZfbGlzdGVuX2NoYW5uZWwoZmktPmlzb19oYW5kbGUsCi0JCQkJCQkJICAgIGFyZyk7Ci0JCWNhc2UgUkFXMTM5NF9JT0NfSVNPX1JFQ1ZfVU5MSVNURU5fQ0hBTk5FTDoKLQkJCXJldHVybiBocHNiX2lzb19yZWN2X3VubGlzdGVuX2NoYW5uZWwoZmktPmlzb19oYW5kbGUsCi0JCQkJCQkJICAgICAgYXJnKTsKLQkJY2FzZSBSQVcxMzk0X0lPQ19JU09fUkVDVl9TRVRfQ0hBTk5FTF9NQVNLOnsKLQkJCQkvKiBjb3B5IHRoZSB1NjQgZnJvbSB1c2VyLXNwYWNlICovCi0JCQkJdTY0IG1hc2s7Ci0JCQkJaWYgKGNvcHlfZnJvbV91c2VyKCZtYXNrLCBhcmdwLCBzaXplb2YobWFzaykpKQotCQkJCQlyZXR1cm4gLUVGQVVMVDsKLQkJCQlyZXR1cm4gaHBzYl9pc29fcmVjdl9zZXRfY2hhbm5lbF9tYXNrKGZpLT4KLQkJCQkJCQkJICAgICAgaXNvX2hhbmRsZSwKLQkJCQkJCQkJICAgICAgbWFzayk7Ci0JCQl9Ci0JCWNhc2UgUkFXMTM5NF9JT0NfSVNPX0dFVF9TVEFUVVM6Ci0JCQlyZXR1cm4gcmF3MTM5NF9pc29fZ2V0X3N0YXR1cyhmaSwgYXJncCk7Ci0JCWNhc2UgUkFXMTM5NF9JT0NfSVNPX1JFQ1ZfUEFDS0VUUzoKLQkJCXJldHVybiByYXcxMzk0X2lzb19yZWN2X3BhY2tldHMoZmksIGFyZ3ApOwotCQljYXNlIFJBVzEzOTRfSU9DX0lTT19SRUNWX1JFTEVBU0VfUEFDS0VUUzoKLQkJCXJldHVybiBocHNiX2lzb19yZWN2X3JlbGVhc2VfcGFja2V0cyhmaS0+aXNvX2hhbmRsZSwKLQkJCQkJCQkgICAgIGFyZyk7Ci0JCWNhc2UgUkFXMTM5NF9JT0NfSVNPX1JFQ1ZfRkxVU0g6Ci0JCQlyZXR1cm4gaHBzYl9pc29fcmVjdl9mbHVzaChmaS0+aXNvX2hhbmRsZSk7Ci0JCWNhc2UgUkFXMTM5NF9JT0NfSVNPX1NIVVRET1dOOgotCQkJcmF3MTM5NF9pc29fc2h1dGRvd24oZmkpOwotCQkJcmV0dXJuIDA7Ci0JCWNhc2UgUkFXMTM5NF9JT0NfSVNPX1FVRVVFX0FDVElWSVRZOgotCQkJcXVldWVfcmF3aXNvX2V2ZW50KGZpKTsKLQkJCXJldHVybiAwOwotCQl9Ci0JCWJyZWFrOwotCWNhc2UgUkFXMTM5NF9JU09fWE1JVDoKLQkJc3dpdGNoIChjbWQpIHsKLQkJY2FzZSBSQVcxMzk0X0lPQ19JU09fWE1JVF9TVEFSVDp7Ci0JCQkJLyogY29weSB0d28gaW50cyBmcm9tIHVzZXItc3BhY2UgKi8KLQkJCQlpbnQgYXJnc1syXTsKLQkJCQlpZiAoY29weV9mcm9tX3VzZXIKLQkJCQkgICAgKCZhcmdzWzBdLCBhcmdwLCBzaXplb2YoYXJncykpKQotCQkJCQlyZXR1cm4gLUVGQVVMVDsKLQkJCQlyZXR1cm4gaHBzYl9pc29feG1pdF9zdGFydChmaS0+aXNvX2hhbmRsZSwKLQkJCQkJCQkgICBhcmdzWzBdLCBhcmdzWzFdKTsKLQkJCX0KLQkJY2FzZSBSQVcxMzk0X0lPQ19JU09fWE1JVF9TWU5DOgotCQkJcmV0dXJuIGhwc2JfaXNvX3htaXRfc3luYyhmaS0+aXNvX2hhbmRsZSk7Ci0JCWNhc2UgUkFXMTM5NF9JT0NfSVNPX1hNSVRfUkVDVl9TVE9QOgotCQkJaHBzYl9pc29fc3RvcChmaS0+aXNvX2hhbmRsZSk7Ci0JCQlyZXR1cm4gMDsKLQkJY2FzZSBSQVcxMzk0X0lPQ19JU09fR0VUX1NUQVRVUzoKLQkJCXJldHVybiByYXcxMzk0X2lzb19nZXRfc3RhdHVzKGZpLCBhcmdwKTsKLQkJY2FzZSBSQVcxMzk0X0lPQ19JU09fWE1JVF9QQUNLRVRTOgotCQkJcmV0dXJuIHJhdzEzOTRfaXNvX3NlbmRfcGFja2V0cyhmaSwgYXJncCk7Ci0JCWNhc2UgUkFXMTM5NF9JT0NfSVNPX1NIVVRET1dOOgotCQkJcmF3MTM5NF9pc29fc2h1dGRvd24oZmkpOwotCQkJcmV0dXJuIDA7Ci0JCWNhc2UgUkFXMTM5NF9JT0NfSVNPX1FVRVVFX0FDVElWSVRZOgotCQkJcXVldWVfcmF3aXNvX2V2ZW50KGZpKTsKLQkJCXJldHVybiAwOwotCQl9Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCWJyZWFrOwotCX0KKwlsb25nIHJldDsKIAogCS8qIHN0YXRlLWluZGVwZW5kZW50IGNvbW1hbmRzICovCiAJc3dpdGNoKGNtZCkgewpAQCAtMjY1MywxNiArMjY2OSwyNSBAQAogCQlicmVhazsKIAl9CiAKLQlyZXR1cm4gLUVJTlZBTDsKLX0KKwltdXRleF9sb2NrKCZmaS0+c3RhdGVfbXV0ZXgpOwogCi1zdGF0aWMgbG9uZyByYXcxMzk0X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLAotCQkJCQkJCXVuc2lnbmVkIGxvbmcgYXJnKQotewotCWxvbmcgcmV0OwotCWxvY2tfa2VybmVsKCk7Ci0JcmV0ID0gZG9fcmF3MTM5NF9pb2N0bChmaWxlLCBjbWQsIGFyZyk7Ci0JdW5sb2NrX2tlcm5lbCgpOworCXN3aXRjaCAoZmktPmlzb19zdGF0ZSkgeworCWNhc2UgUkFXMTM5NF9JU09fSU5BQ1RJVkU6CisJCXJldCA9IHJhdzEzOTRfaW9jdGxfaW5hY3RpdmUoZmksIGNtZCwgYXJncCk7CisJCWJyZWFrOworCWNhc2UgUkFXMTM5NF9JU09fUkVDVjoKKwkJcmV0ID0gcmF3MTM5NF9pb2N0bF9yZWN2KGZpLCBjbWQsIGFyZyk7CisJCWJyZWFrOworCWNhc2UgUkFXMTM5NF9JU09fWE1JVDoKKwkJcmV0ID0gcmF3MTM5NF9pb2N0bF94bWl0KGZpLCBjbWQsIGFyZ3ApOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXQgPSAtRUlOVkFMOworCQlicmVhazsKKwl9CisKKwltdXRleF91bmxvY2soJmZpLT5zdGF0ZV9tdXRleCk7CisKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0yNzAwLDcgKzI3MjUsNyBAQAogCSAgICAhY29weV9mcm9tX3VzZXIoJmluZm9zMzIsICZhcmctPmluZm9zLCBzaXplb2YgaW5mb3MzMikpIHsKIAkJaW5mb3MgPSBjb21wYXRfcHRyKGluZm9zMzIpOwogCQlpZiAoIWNvcHlfdG9fdXNlcigmZHN0LT5pbmZvcywgJmluZm9zLCBzaXplb2YgaW5mb3MpKQotCQkJZXJyID0gZG9fcmF3MTM5NF9pb2N0bChmaWxlLCBjbWQsICh1bnNpZ25lZCBsb25nKWRzdCk7CisJCQllcnIgPSByYXcxMzk0X2lvY3RsKGZpbGUsIGNtZCwgKHVuc2lnbmVkIGxvbmcpZHN0KTsKIAl9CiAJcmV0dXJuIGVycjsKIH0KQEAgLTI3MjQsNyArMjc0OSw2IEBACiAJdm9pZCBfX3VzZXIgKmFyZ3AgPSAodm9pZCBfX3VzZXIgKilhcmc7CiAJbG9uZyBlcnI7CiAKLQlsb2NrX2tlcm5lbCgpOwogCXN3aXRjaCAoY21kKSB7CiAJLyogVGhlc2UgcmVxdWVzdHMgaGF2ZSBzYW1lIGZvcm1hdCBhcyBsb25nIGFzICdpbnQnIGhhcyBzYW1lIHNpemUuICovCiAJY2FzZSBSQVcxMzk0X0lPQ19JU09fUkVDVl9JTklUOgpAQCAtMjc0MSw3ICsyNzY1LDcgQEAKIAljYXNlIFJBVzEzOTRfSU9DX0lTT19HRVRfU1RBVFVTOgogCWNhc2UgUkFXMTM5NF9JT0NfSVNPX1NIVVRET1dOOgogCWNhc2UgUkFXMTM5NF9JT0NfSVNPX1FVRVVFX0FDVElWSVRZOgotCQllcnIgPSBkb19yYXcxMzk0X2lvY3RsKGZpbGUsIGNtZCwgYXJnKTsKKwkJZXJyID0gcmF3MTM5NF9pb2N0bChmaWxlLCBjbWQsIGFyZyk7CiAJCWJyZWFrOwogCS8qIFRoZXNlIHJlcXVlc3QgaGF2ZSBkaWZmZXJlbnQgZm9ybWF0LiAqLwogCWNhc2UgUkFXMTM5NF9JT0NfSVNPX1JFQ1ZfUEFDS0VUUzMyOgpAQCAtMjc1Nyw3ICsyNzgxLDYgQEAKIAkJZXJyID0gLUVJTlZBTDsKIAkJYnJlYWs7CiAJfQotCXVubG9ja19rZXJuZWwoKTsKIAogCXJldHVybiBlcnI7CiB9CkBAIC0yNzkxLDYgKzI4MTQsNyBAQAogCWZpLT5ub3RpZmljYXRpb24gPSAodTgpIFJBVzEzOTRfTk9USUZZX09OOwkvKiBidXNyZXNldCBub3RpZmljYXRpb24gKi8KIAogCUlOSVRfTElTVF9IRUFEKCZmaS0+bGlzdCk7CisJbXV0ZXhfaW5pdCgmZmktPnN0YXRlX211dGV4KTsKIAlmaS0+c3RhdGUgPSBvcGVuZWQ7CiAJSU5JVF9MSVNUX0hFQUQoJmZpLT5yZXFfcGVuZGluZyk7CiAJSU5JVF9MSVNUX0hFQUQoJmZpLT5yZXFfY29tcGxldGUpOwpAQCAtMzAxMCwxMCArMzAzNCwxMCBAQAogCWhwc2JfcmVnaXN0ZXJfaGlnaGxldmVsKCZyYXcxMzk0X2hpZ2hsZXZlbCk7CiAKIAlpZiAoSVNfRVJSCi0JICAgIChkZXZpY2VfY3JlYXRlX2RydmRhdGEoCi0JICAgICAgaHBzYl9wcm90b2NvbF9jbGFzcywgTlVMTCwKLQkgICAgICBNS0RFVihJRUVFMTM5NF9NQUpPUiwgSUVFRTEzOTRfTUlOT1JfQkxPQ0tfUkFXMTM5NCAqIDE2KSwKLQkgICAgICBOVUxMLCBSQVcxMzk0X0RFVklDRV9OQU1FKSkpIHsKKwkgICAgKGRldmljZV9jcmVhdGUoaHBzYl9wcm90b2NvbF9jbGFzcywgTlVMTCwKKwkJCSAgIE1LREVWKElFRUUxMzk0X01BSk9SLAorCQkJCSBJRUVFMTM5NF9NSU5PUl9CTE9DS19SQVcxMzk0ICogMTYpLAorCQkJICAgTlVMTCwgUkFXMTM5NF9ERVZJQ0VfTkFNRSkpKSB7CiAJCXJldCA9IC1FRkFVTFQ7CiAJCWdvdG8gb3V0X3VucmVnOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWVlZTEzOTQvc2JwMi5jIGIvZHJpdmVycy9pZWVlMTM5NC9zYnAyLmMKaW5kZXggMWQ2YWQzNC4uYzUyZjZlNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZWVlMTM5NC9zYnAyLmMKKysrIGIvZHJpdmVycy9pZWVlMTM5NC9zYnAyLmMKQEAgLTUyNiwyNiArNTI2LDQxIEBACiAKIHN0YXRpYyBpbnQgc2JwMnV0aWxfY3JlYXRlX2NvbW1hbmRfb3JiX3Bvb2woc3RydWN0IHNicDJfbHUgKmx1KQogewotCXN0cnVjdCBzYnAyX2Z3aG9zdF9pbmZvICpoaSA9IGx1LT5oaTsKIAlzdHJ1Y3Qgc2JwMl9jb21tYW5kX2luZm8gKmNtZDsKKwlzdHJ1Y3QgZGV2aWNlICpkbWFkZXYgPSBsdS0+aGktPmhvc3QtPmRldmljZS5wYXJlbnQ7CiAJaW50IGksIG9yYnMgPSBzYnAyX3NlcmlhbGl6ZV9pbyA/IDIgOiBTQlAyX01BWF9DTURTOwogCiAJZm9yIChpID0gMDsgaSA8IG9yYnM7IGkrKykgewogCQljbWQgPSBremFsbG9jKHNpemVvZigqY21kKSwgR0ZQX0tFUk5FTCk7CiAJCWlmICghY21kKQotCQkJcmV0dXJuIC1FTk9NRU07Ci0JCWNtZC0+Y29tbWFuZF9vcmJfZG1hID0gZG1hX21hcF9zaW5nbGUoaGktPmhvc3QtPmRldmljZS5wYXJlbnQsCi0JCQkJCQkmY21kLT5jb21tYW5kX29yYiwKLQkJCQkJCXNpemVvZihzdHJ1Y3Qgc2JwMl9jb21tYW5kX29yYiksCi0JCQkJCQlETUFfVE9fREVWSUNFKTsKLQkJY21kLT5zZ2VfZG1hID0gZG1hX21hcF9zaW5nbGUoaGktPmhvc3QtPmRldmljZS5wYXJlbnQsCi0JCQkJCSZjbWQtPnNjYXR0ZXJfZ2F0aGVyX2VsZW1lbnQsCi0JCQkJCXNpemVvZihjbWQtPnNjYXR0ZXJfZ2F0aGVyX2VsZW1lbnQpLAotCQkJCQlETUFfVE9fREVWSUNFKTsKKwkJCWdvdG8gZmFpbGVkX2FsbG9jOworCisJCWNtZC0+Y29tbWFuZF9vcmJfZG1hID0KKwkJICAgIGRtYV9tYXBfc2luZ2xlKGRtYWRldiwgJmNtZC0+Y29tbWFuZF9vcmIsCisJCQkJICAgc2l6ZW9mKHN0cnVjdCBzYnAyX2NvbW1hbmRfb3JiKSwKKwkJCQkgICBETUFfVE9fREVWSUNFKTsKKwkJaWYgKGRtYV9tYXBwaW5nX2Vycm9yKGRtYWRldiwgY21kLT5jb21tYW5kX29yYl9kbWEpKQorCQkJZ290byBmYWlsZWRfb3JiOworCisJCWNtZC0+c2dlX2RtYSA9CisJCSAgICBkbWFfbWFwX3NpbmdsZShkbWFkZXYsICZjbWQtPnNjYXR0ZXJfZ2F0aGVyX2VsZW1lbnQsCisJCQkJICAgc2l6ZW9mKGNtZC0+c2NhdHRlcl9nYXRoZXJfZWxlbWVudCksCisJCQkJICAgRE1BX1RPX0RFVklDRSk7CisJCWlmIChkbWFfbWFwcGluZ19lcnJvcihkbWFkZXYsIGNtZC0+c2dlX2RtYSkpCisJCQlnb3RvIGZhaWxlZF9zZ2U7CisKIAkJSU5JVF9MSVNUX0hFQUQoJmNtZC0+bGlzdCk7CiAJCWxpc3RfYWRkX3RhaWwoJmNtZC0+bGlzdCwgJmx1LT5jbWRfb3JiX2NvbXBsZXRlZCk7CiAJfQogCXJldHVybiAwOworCitmYWlsZWRfc2dlOgorCWRtYV91bm1hcF9zaW5nbGUoZG1hZGV2LCBjbWQtPmNvbW1hbmRfb3JiX2RtYSwKKwkJCSBzaXplb2Yoc3RydWN0IHNicDJfY29tbWFuZF9vcmIpLCBETUFfVE9fREVWSUNFKTsKK2ZhaWxlZF9vcmI6CisJa2ZyZWUoY21kKTsKK2ZhaWxlZF9hbGxvYzoKKwlyZXR1cm4gLUVOT01FTTsKIH0KIAogc3RhdGljIHZvaWQgc2JwMnV0aWxfcmVtb3ZlX2NvbW1hbmRfb3JiX3Bvb2woc3RydWN0IHNicDJfbHUgKmx1LApAQCAtNjQxLDI0ICs2NTYsMTEgQEAKIHN0YXRpYyB2b2lkIHNicDJ1dGlsX21hcmtfY29tbWFuZF9jb21wbGV0ZWQoc3RydWN0IHNicDJfbHUgKmx1LAogCQkJCQkgICAgc3RydWN0IHNicDJfY29tbWFuZF9pbmZvICpjbWQpCiB7Ci0Jc3RydWN0IGhwc2JfaG9zdCAqaG9zdCA9IGx1LT51ZC0+bmUtPmhvc3Q7Ci0KLQlpZiAoY21kLT5jbWRfZG1hKSB7Ci0JCWlmIChjbWQtPmRtYV90eXBlID09IENNRF9ETUFfU0lOR0xFKQotCQkJZG1hX3VubWFwX3NpbmdsZShob3N0LT5kZXZpY2UucGFyZW50LCBjbWQtPmNtZF9kbWEsCi0JCQkJCSBjbWQtPmRtYV9zaXplLCBjbWQtPmRtYV9kaXIpOwotCQllbHNlIGlmIChjbWQtPmRtYV90eXBlID09IENNRF9ETUFfUEFHRSkKLQkJCWRtYV91bm1hcF9wYWdlKGhvc3QtPmRldmljZS5wYXJlbnQsIGNtZC0+Y21kX2RtYSwKLQkJCQkgICAgICAgY21kLT5kbWFfc2l6ZSwgY21kLT5kbWFfZGlyKTsKLQkJLyogWFhYOiBDaGVjayBmb3IgQ01EX0RNQV9OT05FIGJ1ZyAqLwotCQljbWQtPmRtYV90eXBlID0gQ01EX0RNQV9OT05FOwotCQljbWQtPmNtZF9kbWEgPSAwOwotCX0KLQlpZiAoY21kLT5zZ2VfYnVmZmVyKSB7Ci0JCWRtYV91bm1hcF9zZyhob3N0LT5kZXZpY2UucGFyZW50LCBjbWQtPnNnZV9idWZmZXIsCi0JCQkgICAgIGNtZC0+ZG1hX3NpemUsIGNtZC0+ZG1hX2Rpcik7Ci0JCWNtZC0+c2dlX2J1ZmZlciA9IE5VTEw7Ci0JfQorCWlmIChzY3NpX3NnX2NvdW50KGNtZC0+Q3VycmVudF9TQ3BudCkpCisJCWRtYV91bm1hcF9zZyhsdS0+dWQtPm5lLT5ob3N0LT5kZXZpY2UucGFyZW50LAorCQkJICAgICBzY3NpX3NnbGlzdChjbWQtPkN1cnJlbnRfU0NwbnQpLAorCQkJICAgICBzY3NpX3NnX2NvdW50KGNtZC0+Q3VycmVudF9TQ3BudCksCisJCQkgICAgIGNtZC0+Q3VycmVudF9TQ3BudC0+c2NfZGF0YV9kaXJlY3Rpb24pOwogCWxpc3RfbW92ZV90YWlsKCZjbWQtPmxpc3QsICZsdS0+Y21kX29yYl9jb21wbGV0ZWQpOwogfQogCkBAIC04MjMsNiArODI1LDEwIEBACiAjZW5kaWYKIAl9CiAKKwlpZiAoZG1hX2dldF9tYXhfc2VnX3NpemUoaGktPmhvc3QtPmRldmljZS5wYXJlbnQpID4gU0JQMl9NQVhfU0VHX1NJWkUpCisJCUJVR19PTihkbWFfc2V0X21heF9zZWdfc2l6ZShoaS0+aG9zdC0+ZGV2aWNlLnBhcmVudCwKKwkJCQkJICAgIFNCUDJfTUFYX1NFR19TSVpFKSk7CisKIAkvKiBQcmV2ZW50IHVubG9hZGluZyBvZiB0aGUgMTM5NCBob3N0ICovCiAJaWYgKCF0cnlfbW9kdWxlX2dldChoaS0+aG9zdC0+ZHJpdmVyLT5vd25lcikpIHsKIAkJU0JQMl9FUlIoImZhaWxlZCB0byBnZXQgYSByZWZlcmVuY2Ugb24gMTM5NCBob3N0IGRyaXZlciIpOwpAQCAtMTQ5NCw4NCArMTUwMCw2NSBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBzYnAyX3ByZXBfY29tbWFuZF9vcmJfc2coc3RydWN0IHNicDJfY29tbWFuZF9vcmIgKm9yYiwKLQkJCQkgICAgIHN0cnVjdCBzYnAyX2Z3aG9zdF9pbmZvICpoaSwKLQkJCQkgICAgIHN0cnVjdCBzYnAyX2NvbW1hbmRfaW5mbyAqY21kLAotCQkJCSAgICAgdW5zaWduZWQgaW50IHNjc2lfdXNlX3NnLAotCQkJCSAgICAgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywKLQkJCQkgICAgIHUzMiBvcmJfZGlyZWN0aW9uLAotCQkJCSAgICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZG1hX2RpcikKK3N0YXRpYyBpbnQgc2JwMl9wcmVwX2NvbW1hbmRfb3JiX3NnKHN0cnVjdCBzYnAyX2NvbW1hbmRfb3JiICpvcmIsCisJCQkJICAgIHN0cnVjdCBzYnAyX2Z3aG9zdF9pbmZvICpoaSwKKwkJCQkgICAgc3RydWN0IHNicDJfY29tbWFuZF9pbmZvICpjbWQsCisJCQkJICAgIHVuc2lnbmVkIGludCBzZ19jb3VudCwKKwkJCQkgICAgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywKKwkJCQkgICAgdTMyIG9yYl9kaXJlY3Rpb24sCisJCQkJICAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRtYV9kaXIpCiB7Ci0JY21kLT5kbWFfZGlyID0gZG1hX2RpcjsKKwlzdHJ1Y3QgZGV2aWNlICpkbWFkZXYgPSBoaS0+aG9zdC0+ZGV2aWNlLnBhcmVudDsKKwlzdHJ1Y3Qgc2JwMl91bnJlc3RyaWN0ZWRfcGFnZV90YWJsZSAqcHQ7CisJaW50IGksIG47CisKKwluID0gZG1hX21hcF9zZyhkbWFkZXYsIHNnLCBzZ19jb3VudCwgZG1hX2Rpcik7CisJaWYgKG4gPT0gMCkKKwkJcmV0dXJuIC1FTk9NRU07CisKIAlvcmItPmRhdGFfZGVzY3JpcHRvcl9oaSA9IE9SQl9TRVRfTk9ERV9JRChoaS0+aG9zdC0+bm9kZV9pZCk7CiAJb3JiLT5taXNjIHw9IE9SQl9TRVRfRElSRUNUSU9OKG9yYl9kaXJlY3Rpb24pOwogCiAJLyogc3BlY2lhbCBjYXNlIGlmIG9ubHkgb25lIGVsZW1lbnQgKGFuZCBsZXNzIHRoYW4gNjRLQiBpbiBzaXplKSAqLwotCWlmIChzY3NpX3VzZV9zZyA9PSAxICYmIHNnLT5sZW5ndGggPD0gU0JQMl9NQVhfU0dfRUxFTUVOVF9MRU5HVEgpIHsKLQotCQljbWQtPmRtYV9zaXplID0gc2ctPmxlbmd0aDsKLQkJY21kLT5kbWFfdHlwZSA9IENNRF9ETUFfUEFHRTsKLQkJY21kLT5jbWRfZG1hID0gZG1hX21hcF9wYWdlKGhpLT5ob3N0LT5kZXZpY2UucGFyZW50LAotCQkJCQkgICAgc2dfcGFnZShzZyksIHNnLT5vZmZzZXQsCi0JCQkJCSAgICBjbWQtPmRtYV9zaXplLCBjbWQtPmRtYV9kaXIpOwotCi0JCW9yYi0+ZGF0YV9kZXNjcmlwdG9yX2xvID0gY21kLT5jbWRfZG1hOwotCQlvcmItPm1pc2MgfD0gT1JCX1NFVF9EQVRBX1NJWkUoY21kLT5kbWFfc2l6ZSk7Ci0KKwlpZiAobiA9PSAxKSB7CisJCW9yYi0+bWlzYyB8PSBPUkJfU0VUX0RBVEFfU0laRShzZ19kbWFfbGVuKHNnKSk7CisJCW9yYi0+ZGF0YV9kZXNjcmlwdG9yX2xvID0gc2dfZG1hX2FkZHJlc3Moc2cpOwogCX0gZWxzZSB7Ci0JCXN0cnVjdCBzYnAyX3VucmVzdHJpY3RlZF9wYWdlX3RhYmxlICpzZ19lbGVtZW50ID0KLQkJCQkJCSZjbWQtPnNjYXR0ZXJfZ2F0aGVyX2VsZW1lbnRbMF07Ci0JCXUzMiBzZ19jb3VudCwgc2dfbGVuOwotCQlkbWFfYWRkcl90IHNnX2FkZHI7Ci0JCWludCBpLCBjb3VudCA9IGRtYV9tYXBfc2coaGktPmhvc3QtPmRldmljZS5wYXJlbnQsIHNnLAotCQkJCQkgIHNjc2lfdXNlX3NnLCBkbWFfZGlyKTsKKwkJcHQgPSAmY21kLT5zY2F0dGVyX2dhdGhlcl9lbGVtZW50WzBdOwogCi0JCWNtZC0+ZG1hX3NpemUgPSBzY3NpX3VzZV9zZzsKLQkJY21kLT5zZ2VfYnVmZmVyID0gc2c7CisJCWRtYV9zeW5jX3NpbmdsZV9mb3JfY3B1KGRtYWRldiwgY21kLT5zZ2VfZG1hLAorCQkJCQlzaXplb2YoY21kLT5zY2F0dGVyX2dhdGhlcl9lbGVtZW50KSwKKwkJCQkJRE1BX1RPX0RFVklDRSk7CiAKLQkJLyogdXNlIHBhZ2UgdGFibGVzIChzL2cpICovCi0JCW9yYi0+bWlzYyB8PSBPUkJfU0VUX1BBR0VfVEFCTEVfUFJFU0VOVCgweDEpOwotCQlvcmItPmRhdGFfZGVzY3JpcHRvcl9sbyA9IGNtZC0+c2dlX2RtYTsKLQotCQkvKiBsb29wIHRocm91Z2ggYW5kIGZpbGwgb3V0IG91ciBTQlAtMiBwYWdlIHRhYmxlcwotCQkgKiAoYW5kIHNwbGl0IHVwIGFueXRoaW5nIHRvbyBsYXJnZSkgKi8KLQkJZm9yIChpID0gMCwgc2dfY291bnQgPSAwOyBpIDwgY291bnQ7IGkrKywgc2cgPSBzZ19uZXh0KHNnKSkgewotCQkJc2dfbGVuID0gc2dfZG1hX2xlbihzZyk7Ci0JCQlzZ19hZGRyID0gc2dfZG1hX2FkZHJlc3Moc2cpOwotCQkJd2hpbGUgKHNnX2xlbikgewotCQkJCXNnX2VsZW1lbnRbc2dfY291bnRdLnNlZ21lbnRfYmFzZV9sbyA9IHNnX2FkZHI7Ci0JCQkJaWYgKHNnX2xlbiA+IFNCUDJfTUFYX1NHX0VMRU1FTlRfTEVOR1RIKSB7Ci0JCQkJCXNnX2VsZW1lbnRbc2dfY291bnRdLmxlbmd0aF9zZWdtZW50X2Jhc2VfaGkgPQotCQkJCQkJUEFHRV9UQUJMRV9TRVRfU0VHTUVOVF9MRU5HVEgoU0JQMl9NQVhfU0dfRUxFTUVOVF9MRU5HVEgpOwotCQkJCQlzZ19hZGRyICs9IFNCUDJfTUFYX1NHX0VMRU1FTlRfTEVOR1RIOwotCQkJCQlzZ19sZW4gLT0gU0JQMl9NQVhfU0dfRUxFTUVOVF9MRU5HVEg7Ci0JCQkJfSBlbHNlIHsKLQkJCQkJc2dfZWxlbWVudFtzZ19jb3VudF0ubGVuZ3RoX3NlZ21lbnRfYmFzZV9oaSA9Ci0JCQkJCQlQQUdFX1RBQkxFX1NFVF9TRUdNRU5UX0xFTkdUSChzZ19sZW4pOwotCQkJCQlzZ19sZW4gPSAwOwotCQkJCX0KLQkJCQlzZ19jb3VudCsrOwotCQkJfQorCQlmb3JfZWFjaF9zZyhzZywgc2csIG4sIGkpIHsKKwkJCXB0W2ldLmhpZ2ggPSBjcHVfdG9fYmUzMihzZ19kbWFfbGVuKHNnKSA8PCAxNik7CisJCQlwdFtpXS5sb3cgPSBjcHVfdG9fYmUzMihzZ19kbWFfYWRkcmVzcyhzZykpOwogCQl9CiAKLQkJb3JiLT5taXNjIHw9IE9SQl9TRVRfREFUQV9TSVpFKHNnX2NvdW50KTsKKwkJb3JiLT5taXNjIHw9IE9SQl9TRVRfUEFHRV9UQUJMRV9QUkVTRU5UKDB4MSkgfAorCQkJICAgICBPUkJfU0VUX0RBVEFfU0laRShuKTsKKwkJb3JiLT5kYXRhX2Rlc2NyaXB0b3JfbG8gPSBjbWQtPnNnZV9kbWE7CiAKLQkJc2JwMnV0aWxfY3B1X3RvX2JlMzJfYnVmZmVyKHNnX2VsZW1lbnQsCi0JCQkJKHNpemVvZihzdHJ1Y3Qgc2JwMl91bnJlc3RyaWN0ZWRfcGFnZV90YWJsZSkpICoKLQkJCQlzZ19jb3VudCk7CisJCWRtYV9zeW5jX3NpbmdsZV9mb3JfZGV2aWNlKGRtYWRldiwgY21kLT5zZ2VfZG1hLAorCQkJCQkgICBzaXplb2YoY21kLT5zY2F0dGVyX2dhdGhlcl9lbGVtZW50KSwKKwkJCQkJICAgRE1BX1RPX0RFVklDRSk7CiAJfQorCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBzYnAyX2NyZWF0ZV9jb21tYW5kX29yYihzdHJ1Y3Qgc2JwMl9sdSAqbHUsCi0JCQkJICAgIHN0cnVjdCBzYnAyX2NvbW1hbmRfaW5mbyAqY21kLAotCQkJCSAgICBzdHJ1Y3Qgc2NzaV9jbW5kICpTQ3BudCkKK3N0YXRpYyBpbnQgc2JwMl9jcmVhdGVfY29tbWFuZF9vcmIoc3RydWN0IHNicDJfbHUgKmx1LAorCQkJCSAgIHN0cnVjdCBzYnAyX2NvbW1hbmRfaW5mbyAqY21kLAorCQkJCSAgIHN0cnVjdCBzY3NpX2NtbmQgKlNDcG50KQogewotCXN0cnVjdCBzYnAyX2Z3aG9zdF9pbmZvICpoaSA9IGx1LT5oaTsKKwlzdHJ1Y3QgZGV2aWNlICpkbWFkZXYgPSBsdS0+aGktPmhvc3QtPmRldmljZS5wYXJlbnQ7CiAJc3RydWN0IHNicDJfY29tbWFuZF9vcmIgKm9yYiA9ICZjbWQtPmNvbW1hbmRfb3JiOwotCXUzMiBvcmJfZGlyZWN0aW9uOwogCXVuc2lnbmVkIGludCBzY3NpX3JlcXVlc3RfYnVmZmxlbiA9IHNjc2lfYnVmZmxlbihTQ3BudCk7CiAJZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZG1hX2RpciA9IFNDcG50LT5zY19kYXRhX2RpcmVjdGlvbjsKKwl1MzIgb3JiX2RpcmVjdGlvbjsKKwlpbnQgcmV0OwogCisJZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUoZG1hZGV2LCBjbWQtPmNvbW1hbmRfb3JiX2RtYSwKKwkJCQlzaXplb2Yoc3RydWN0IHNicDJfY29tbWFuZF9vcmIpLCBETUFfVE9fREVWSUNFKTsKIAkvKgogCSAqIFNldC11cCBvdXIgY29tbWFuZCBPUkIuCiAJICoKQEAgLTE2MDIsMTUgKzE1ODksMjEgQEAKIAkJb3JiLT5kYXRhX2Rlc2NyaXB0b3JfaGkgPSAweDA7CiAJCW9yYi0+ZGF0YV9kZXNjcmlwdG9yX2xvID0gMHgwOwogCQlvcmItPm1pc2MgfD0gT1JCX1NFVF9ESVJFQ1RJT04oMSk7Ci0JfSBlbHNlCi0JCXNicDJfcHJlcF9jb21tYW5kX29yYl9zZyhvcmIsIGhpLCBjbWQsIHNjc2lfc2dfY291bnQoU0NwbnQpLAotCQkJCQkgc2NzaV9zZ2xpc3QoU0NwbnQpLAotCQkJCQkgb3JiX2RpcmVjdGlvbiwgZG1hX2Rpcik7Ci0KKwkJcmV0ID0gMDsKKwl9IGVsc2UgeworCQlyZXQgPSBzYnAyX3ByZXBfY29tbWFuZF9vcmJfc2cob3JiLCBsdS0+aGksIGNtZCwKKwkJCQkJICAgICAgIHNjc2lfc2dfY291bnQoU0NwbnQpLAorCQkJCQkgICAgICAgc2NzaV9zZ2xpc3QoU0NwbnQpLAorCQkJCQkgICAgICAgb3JiX2RpcmVjdGlvbiwgZG1hX2Rpcik7CisJfQogCXNicDJ1dGlsX2NwdV90b19iZTMyX2J1ZmZlcihvcmIsIHNpemVvZigqb3JiKSk7CiAKIAltZW1zZXQob3JiLT5jZGIsIDAsIHNpemVvZihvcmItPmNkYikpOwogCW1lbWNweShvcmItPmNkYiwgU0NwbnQtPmNtbmQsIFNDcG50LT5jbWRfbGVuKTsKKworCWRtYV9zeW5jX3NpbmdsZV9mb3JfZGV2aWNlKGRtYWRldiwgY21kLT5jb21tYW5kX29yYl9kbWEsCisJCQlzaXplb2Yoc3RydWN0IHNicDJfY29tbWFuZF9vcmIpLCBETUFfVE9fREVWSUNFKTsKKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgdm9pZCBzYnAyX2xpbmtfb3JiX2NvbW1hbmQoc3RydWN0IHNicDJfbHUgKmx1LApAQCAtMTYyNCwxNCArMTYxNyw2IEBACiAJc2l6ZV90IGxlbmd0aDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JZG1hX3N5bmNfc2luZ2xlX2Zvcl9kZXZpY2UoaGktPmhvc3QtPmRldmljZS5wYXJlbnQsCi0JCQkJICAgY21kLT5jb21tYW5kX29yYl9kbWEsCi0JCQkJICAgc2l6ZW9mKHN0cnVjdCBzYnAyX2NvbW1hbmRfb3JiKSwKLQkJCQkgICBETUFfVE9fREVWSUNFKTsKLQlkbWFfc3luY19zaW5nbGVfZm9yX2RldmljZShoaS0+aG9zdC0+ZGV2aWNlLnBhcmVudCwgY21kLT5zZ2VfZG1hLAotCQkJCSAgIHNpemVvZihjbWQtPnNjYXR0ZXJfZ2F0aGVyX2VsZW1lbnQpLAotCQkJCSAgIERNQV9UT19ERVZJQ0UpOwotCiAJLyogY2hlY2sgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgcHJldmlvdXMgb3JicyB0byB1c2UgKi8KIAlzcGluX2xvY2tfaXJxc2F2ZSgmbHUtPmNtZF9vcmJfbG9jaywgZmxhZ3MpOwogCWxhc3Rfb3JiID0gbHUtPmxhc3Rfb3JiOwpAQCAtMTY5OSw5ICsxNjg0LDEwIEBACiAJaWYgKCFjbWQpCiAJCXJldHVybiAtRUlPOwogCi0Jc2JwMl9jcmVhdGVfY29tbWFuZF9vcmIobHUsIGNtZCwgU0NwbnQpOwotCXNicDJfbGlua19vcmJfY29tbWFuZChsdSwgY21kKTsKKwlpZiAoc2JwMl9jcmVhdGVfY29tbWFuZF9vcmIobHUsIGNtZCwgU0NwbnQpKQorCQlyZXR1cm4gLUVOT01FTTsKIAorCXNicDJfbGlua19vcmJfY29tbWFuZChsdSwgY21kKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTc4OSwxMyArMTc3NSw2IEBACiAJZWxzZQogCQljbWQgPSBzYnAydXRpbF9maW5kX2NvbW1hbmRfZm9yX29yYihsdSwgc2ItPk9SQl9vZmZzZXRfbG8pOwogCWlmIChjbWQpIHsKLQkJZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUoaGktPmhvc3QtPmRldmljZS5wYXJlbnQsCi0JCQkJCWNtZC0+Y29tbWFuZF9vcmJfZG1hLAotCQkJCQlzaXplb2Yoc3RydWN0IHNicDJfY29tbWFuZF9vcmIpLAotCQkJCQlETUFfVE9fREVWSUNFKTsKLQkJZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUoaGktPmhvc3QtPmRldmljZS5wYXJlbnQsIGNtZC0+c2dlX2RtYSwKLQkJCQkJc2l6ZW9mKGNtZC0+c2NhdHRlcl9nYXRoZXJfZWxlbWVudCksCi0JCQkJCURNQV9UT19ERVZJQ0UpOwogCQkvKiBHcmFiIFNDU0kgY29tbWFuZCBwb2ludGVycyBhbmQgY2hlY2sgc3RhdHVzLiAqLwogCQkvKgogCQkgKiBGSVhNRTogSWYgdGhlIHNyYyBmaWVsZCBpbiB0aGUgc3RhdHVzIGlzIDEsIHRoZSBPUkIgRE1BIG11c3QKQEAgLTE5MTIsNyArMTg5MSw2IEBACiAKIHN0YXRpYyB2b2lkIHNicDJzY3NpX2NvbXBsZXRlX2FsbF9jb21tYW5kcyhzdHJ1Y3Qgc2JwMl9sdSAqbHUsIHUzMiBzdGF0dXMpCiB7Ci0Jc3RydWN0IHNicDJfZndob3N0X2luZm8gKmhpID0gbHUtPmhpOwogCXN0cnVjdCBsaXN0X2hlYWQgKmxoOwogCXN0cnVjdCBzYnAyX2NvbW1hbmRfaW5mbyAqY21kOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CkBAIC0xOTIxLDEzICsxODk5LDYgQEAKIAl3aGlsZSAoIWxpc3RfZW1wdHkoJmx1LT5jbWRfb3JiX2ludXNlKSkgewogCQlsaCA9IGx1LT5jbWRfb3JiX2ludXNlLm5leHQ7CiAJCWNtZCA9IGxpc3RfZW50cnkobGgsIHN0cnVjdCBzYnAyX2NvbW1hbmRfaW5mbywgbGlzdCk7Ci0JCWRtYV9zeW5jX3NpbmdsZV9mb3JfY3B1KGhpLT5ob3N0LT5kZXZpY2UucGFyZW50LAotCQkJCSAgICAgICAgY21kLT5jb21tYW5kX29yYl9kbWEsCi0JCQkJCXNpemVvZihzdHJ1Y3Qgc2JwMl9jb21tYW5kX29yYiksCi0JCQkJCURNQV9UT19ERVZJQ0UpOwotCQlkbWFfc3luY19zaW5nbGVfZm9yX2NwdShoaS0+aG9zdC0+ZGV2aWNlLnBhcmVudCwgY21kLT5zZ2VfZG1hLAotCQkJCQlzaXplb2YoY21kLT5zY2F0dGVyX2dhdGhlcl9lbGVtZW50KSwKLQkJCQkJRE1BX1RPX0RFVklDRSk7CiAJCXNicDJ1dGlsX21hcmtfY29tbWFuZF9jb21wbGV0ZWQobHUsIGNtZCk7CiAJCWlmIChjbWQtPkN1cnJlbnRfU0NwbnQpIHsKIAkJCWNtZC0+Q3VycmVudF9TQ3BudC0+cmVzdWx0ID0gc3RhdHVzIDw8IDE2OwpAQCAtMjAzMyw2ICsyMDA0LDggQEAKIAkJc2Rldi0+c3RhcnRfc3RvcF9wd3JfY29uZCA9IDE7CiAJaWYgKGx1LT53b3JrYXJvdW5kcyAmIFNCUDJfV09SS0FST1VORF8xMjhLX01BWF9UUkFOUykKIAkJYmxrX3F1ZXVlX21heF9zZWN0b3JzKHNkZXYtPnJlcXVlc3RfcXVldWUsIDEyOCAqIDEwMjQgLyA1MTIpOworCisJYmxrX3F1ZXVlX21heF9zZWdtZW50X3NpemUoc2Rldi0+cmVxdWVzdF9xdWV1ZSwgU0JQMl9NQVhfU0VHX1NJWkUpOwogCXJldHVybiAwOwogfQogCkBAIC0yMDQ5LDcgKzIwMjIsNiBAQAogc3RhdGljIGludCBzYnAyc2NzaV9hYm9ydChzdHJ1Y3Qgc2NzaV9jbW5kICpTQ3BudCkKIHsKIAlzdHJ1Y3Qgc2JwMl9sdSAqbHUgPSAoc3RydWN0IHNicDJfbHUgKilTQ3BudC0+ZGV2aWNlLT5ob3N0LT5ob3N0ZGF0YVswXTsKLQlzdHJ1Y3Qgc2JwMl9md2hvc3RfaW5mbyAqaGkgPSBsdS0+aGk7CiAJc3RydWN0IHNicDJfY29tbWFuZF9pbmZvICpjbWQ7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIApAQCAtMjA2MywxNCArMjAzNSw2IEBACiAJCXNwaW5fbG9ja19pcnFzYXZlKCZsdS0+Y21kX29yYl9sb2NrLCBmbGFncyk7CiAJCWNtZCA9IHNicDJ1dGlsX2ZpbmRfY29tbWFuZF9mb3JfU0NwbnQobHUsIFNDcG50KTsKIAkJaWYgKGNtZCkgewotCQkJZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUoaGktPmhvc3QtPmRldmljZS5wYXJlbnQsCi0JCQkJCWNtZC0+Y29tbWFuZF9vcmJfZG1hLAotCQkJCQlzaXplb2Yoc3RydWN0IHNicDJfY29tbWFuZF9vcmIpLAotCQkJCQlETUFfVE9fREVWSUNFKTsKLQkJCWRtYV9zeW5jX3NpbmdsZV9mb3JfY3B1KGhpLT5ob3N0LT5kZXZpY2UucGFyZW50LAotCQkJCQljbWQtPnNnZV9kbWEsCi0JCQkJCXNpemVvZihjbWQtPnNjYXR0ZXJfZ2F0aGVyX2VsZW1lbnQpLAotCQkJCQlETUFfVE9fREVWSUNFKTsKIAkJCXNicDJ1dGlsX21hcmtfY29tbWFuZF9jb21wbGV0ZWQobHUsIGNtZCk7CiAJCQlpZiAoY21kLT5DdXJyZW50X1NDcG50KSB7CiAJCQkJY21kLT5DdXJyZW50X1NDcG50LT5yZXN1bHQgPSBESURfQUJPUlQgPDwgMTY7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2llZWUxMzk0L3NicDIuaCBiL2RyaXZlcnMvaWVlZTEzOTQvc2JwMi5oCmluZGV4IDg3NTQyOGIuLmM1MDM2ZjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWVlZTEzOTQvc2JwMi5oCisrKyBiL2RyaXZlcnMvaWVlZTEzOTQvc2JwMi5oCkBAIC0xMzksMTMgKzEzOSwxMCBAQAogCXUzMiBzdGF0dXNfZmlmb19sbzsKIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAKLSNkZWZpbmUgUEFHRV9UQUJMRV9TRVRfU0VHTUVOVF9CQVNFX0hJKHYpCSgodikgJiAweGZmZmYpCi0jZGVmaW5lIFBBR0VfVEFCTEVfU0VUX1NFR01FTlRfTEVOR1RIKHYpCSgoKHYpICYgMHhmZmZmKSA8PCAxNikKLQogc3RydWN0IHNicDJfdW5yZXN0cmljdGVkX3BhZ2VfdGFibGUgewotCXUzMiBsZW5ndGhfc2VnbWVudF9iYXNlX2hpOwotCXUzMiBzZWdtZW50X2Jhc2VfbG87Ci19IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCV9fYmUzMiBoaWdoOworCV9fYmUzMiBsb3c7Cit9OwogCiAjZGVmaW5lIFJFU1BfU1RBVFVTX1JFUVVFU1RfQ09NUExFVEUJCTB4MAogI2RlZmluZSBSRVNQX1NUQVRVU19UUkFOU1BPUlRfRkFJTFVSRQkJMHgxCkBAIC0yMTYsMTUgKzIxMywxOCBAQAogI2RlZmluZSBTQlAyX1VOSVRfU1BFQ19JRF9FTlRSWQkJCTB4MDAwMDYwOWUKICNkZWZpbmUgU0JQMl9TV19WRVJTSU9OX0VOVFJZCQkJMHgwMDAxMDQ4MwogCisvKgorICogVGhlIGRlZmF1bHQgbWF4aW11bSBzL2cgc2VnbWVudCBzaXplIG9mIGEgRmlyZVdpcmUgY29udHJvbGxlciBpcworICogdXN1YWxseSAweDEwMDAwLCBidXQgU0JQLTIgb25seSBhbGxvd3MgMHhmZmZmLiBTaW5jZSBidWZmZXJzIGhhdmUgdG8KKyAqIGJlIHF1YWRsZXQtYWxpZ25lZCwgd2Ugc2V0IHRoZSBsZW5ndGggbGltaXQgdG8gMHhmZmZmICYgfjMuCisgKi8KKyNkZWZpbmUgU0JQMl9NQVhfU0VHX1NJWkUJCQkweGZmZmMKIAogLyoKLSAqIFNDU0kgc3BlY2lmaWMgZGVmaW5pdGlvbnMKLSAqLwotCi0jZGVmaW5lIFNCUDJfTUFYX1NHX0VMRU1FTlRfTEVOR1RICQkweGYwMDAKLS8qIFRoZXJlIGlzIG5vIHJlYWwgbGltaXRhdGlvbiBvZiB0aGUgcXVldWUgZGVwdGggKGkuZS4gbGVuZ3RoIG9mIHRoZSBsaW5rZWQKKyAqIFRoZXJlIGlzIG5vIHJlYWwgbGltaXRhdGlvbiBvZiB0aGUgcXVldWUgZGVwdGggKGkuZS4gbGVuZ3RoIG9mIHRoZSBsaW5rZWQKICAqIGxpc3Qgb2YgY29tbWFuZCBPUkJzKSBhdCB0aGUgdGFyZ2V0LiBUaGUgY2hvc2VuIGRlcHRoIGlzIG1lcmVseSBhbgotICogaW1wbGVtZW50YXRpb24gZGV0YWlsIG9mIHRoZSBzYnAyIGRyaXZlci4gKi8KKyAqIGltcGxlbWVudGF0aW9uIGRldGFpbCBvZiB0aGUgc2JwMiBkcml2ZXIuCisgKi8KICNkZWZpbmUgU0JQMl9NQVhfQ01EUwkJCQk4CiAKICNkZWZpbmUgU0JQMl9TQ1NJX1NUQVRVU19HT09ECQkJMHgwCkBAIC0yNDAsMTIgKzI0MCw2IEBACiAgKiBSZXByZXNlbnRhdGlvbnMgb2YgY29tbWFuZHMgYW5kIGRldmljZXMKICAqLwogCi1lbnVtIHNicDJfZG1hX3R5cGVzIHsKLQlDTURfRE1BX05PTkUsCi0JQ01EX0RNQV9QQUdFLAotCUNNRF9ETUFfU0lOR0xFCi19OwotCiAvKiBQZXIgU0NTSSBjb21tYW5kICovCiBzdHJ1Y3Qgc2JwMl9jb21tYW5kX2luZm8gewogCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKQEAgLTI1OCwxMSArMjUyLDYgQEAKIAlzdHJ1Y3Qgc2JwMl91bnJlc3RyaWN0ZWRfcGFnZV90YWJsZQogCQlzY2F0dGVyX2dhdGhlcl9lbGVtZW50W1NHX0FMTF0gX19hdHRyaWJ1dGVfXygoYWxpZ25lZCg4KSkpOwogCWRtYV9hZGRyX3Qgc2dlX2RtYTsKLQl2b2lkICpzZ2VfYnVmZmVyOwotCWRtYV9hZGRyX3QgY21kX2RtYTsKLQllbnVtIHNicDJfZG1hX3R5cGVzIGRtYV90eXBlOwotCXVuc2lnbmVkIGxvbmcgZG1hX3NpemU7Ci0JZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZG1hX2RpcjsKIH07CiAKIC8qIFBlciBGaXJlV2lyZSBob3N0ICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2llZWUxMzk0L3ZpZGVvMTM5NC5jIGIvZHJpdmVycy9pZWVlMTM5NC92aWRlbzEzOTQuYwppbmRleCAyNWRiNmU2Li42NzlhOTE4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2llZWUxMzk0L3ZpZGVvMTM5NC5jCisrKyBiL2RyaXZlcnMvaWVlZTEzOTQvdmlkZW8xMzk0LmMKQEAgLTg5Myw3ICs4OTMsNyBAQAogCQlpZiAodW5saWtlbHkoZCA9PSBOVUxMKSkKIAkJCXJldHVybiAtRUZBVUxUOwogCi0JCWlmICh1bmxpa2VseSgodi5idWZmZXI8MCkgfHwgKHYuYnVmZmVyPj1kLT5udW1fZGVzYyAtIDEpKSkgeworCQlpZiAodW5saWtlbHkodi5idWZmZXIgPj0gZC0+bnVtX2Rlc2MgLSAxKSkgewogCQkJUFJJTlQoS0VSTl9FUlIsIG9oY2ktPmhvc3QtPmlkLAogCQkJICAgICAgIkJ1ZmZlciAlZCBvdXQgb2YgcmFuZ2UiLHYuYnVmZmVyKTsKIAkJCXJldHVybiAtRUlOVkFMOwpAQCAtOTU5LDcgKzk1OSw3IEBACiAJCWlmICh1bmxpa2VseShkID09IE5VTEwpKQogCQkJcmV0dXJuIC1FRkFVTFQ7CiAKLQkJaWYgKHVubGlrZWx5KCh2LmJ1ZmZlcjwwKSB8fCAodi5idWZmZXI+ZC0+bnVtX2Rlc2MgLSAxKSkpIHsKKwkJaWYgKHVubGlrZWx5KHYuYnVmZmVyID4gZC0+bnVtX2Rlc2MgLSAxKSkgewogCQkJUFJJTlQoS0VSTl9FUlIsIG9oY2ktPmhvc3QtPmlkLAogCQkJICAgICAgIkJ1ZmZlciAlZCBvdXQgb2YgcmFuZ2UiLHYuYnVmZmVyKTsKIAkJCXJldHVybiAtRUlOVkFMOwpAQCAtMTAzMCw3ICsxMDMwLDcgQEAKIAkJZCA9IGZpbmRfY3R4KCZjdHgtPmNvbnRleHRfbGlzdCwgT0hDSV9JU09fVFJBTlNNSVQsIHYuY2hhbm5lbCk7CiAJCWlmIChkID09IE5VTEwpIHJldHVybiAtRUZBVUxUOwogCi0JCWlmICgodi5idWZmZXI8MCkgfHwgKHYuYnVmZmVyPj1kLT5udW1fZGVzYyAtIDEpKSB7CisJCWlmICh2LmJ1ZmZlciA+PSBkLT5udW1fZGVzYyAtIDEpIHsKIAkJCVBSSU5UKEtFUk5fRVJSLCBvaGNpLT5ob3N0LT5pZCwKIAkJCSAgICAgICJCdWZmZXIgJWQgb3V0IG9mIHJhbmdlIix2LmJ1ZmZlcik7CiAJCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTExMzcsNyArMTEzNyw3IEBACiAJCWQgPSBmaW5kX2N0eCgmY3R4LT5jb250ZXh0X2xpc3QsIE9IQ0lfSVNPX1RSQU5TTUlULCB2LmNoYW5uZWwpOwogCQlpZiAoZCA9PSBOVUxMKSByZXR1cm4gLUVGQVVMVDsKIAotCQlpZiAoKHYuYnVmZmVyPDApIHx8ICh2LmJ1ZmZlcj49ZC0+bnVtX2Rlc2MtMSkpIHsKKwkJaWYgKHYuYnVmZmVyID49IGQtPm51bV9kZXNjIC0gMSkgewogCQkJUFJJTlQoS0VSTl9FUlIsIG9oY2ktPmhvc3QtPmlkLAogCQkJICAgICAgIkJ1ZmZlciAlZCBvdXQgb2YgcmFuZ2UiLHYuYnVmZmVyKTsKIAkJCXJldHVybiAtRUlOVkFMOwpAQCAtMTM0MSw5ICsxMzQxLDggQEAKIAlocHNiX3NldF9ob3N0aW5mb19rZXkoJnZpZGVvMTM5NF9oaWdobGV2ZWwsIGhvc3QsIG9oY2ktPmhvc3QtPmlkKTsKIAogCW1pbm9yID0gSUVFRTEzOTRfTUlOT1JfQkxPQ0tfVklERU8xMzk0ICogMTYgKyBvaGNpLT5ob3N0LT5pZDsKLQlkZXZpY2VfY3JlYXRlX2RydmRhdGEoaHBzYl9wcm90b2NvbF9jbGFzcywgTlVMTCwKLQkJCSAgICAgIE1LREVWKElFRUUxMzk0X01BSk9SLCBtaW5vciksIE5VTEwsCi0JCQkgICAgICAiJXMtJWQiLCBWSURFTzEzOTRfRFJJVkVSX05BTUUsIG9oY2ktPmhvc3QtPmlkKTsKKwlkZXZpY2VfY3JlYXRlKGhwc2JfcHJvdG9jb2xfY2xhc3MsIE5VTEwsIE1LREVWKElFRUUxMzk0X01BSk9SLCBtaW5vciksCisJCSAgICAgIE5VTEwsICIlcy0lZCIsIFZJREVPMTM5NF9EUklWRVJfTkFNRSwgb2hjaS0+aG9zdC0+aWQpOwogfQogCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2NtLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9jbS5jCmluZGV4IDNjYWIwY2UuLmYxZTgyYTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2NtLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvY20uYwpAQCAtMTIyLDcgKzEyMiw3IEBACiAKICNkZWZpbmUgQ01fQ09VTlRFUl9BVFRSKF9uYW1lLCBfaW5kZXgpIFwKIHN0cnVjdCBjbV9jb3VudGVyX2F0dHJpYnV0ZSBjbV8jI19uYW1lIyNfY291bnRlcl9hdHRyID0geyBcCi0JLmF0dHIgPSB7IC5uYW1lID0gX19zdHJpbmdpZnkoX25hbWUpLCAubW9kZSA9IDA0NDQsIC5vd25lciA9IFRISVNfTU9EVUxFIH0sIFwKKwkuYXR0ciA9IHsgLm5hbWUgPSBfX3N0cmluZ2lmeShfbmFtZSksIC5tb2RlID0gMDQ0NCB9LCBcCiAJLmluZGV4ID0gX2luZGV4IFwKIH0KIApAQCAtMzY5MSw5ICszNjkxLDkgQEAKIAljbV9kZXYtPmliX2RldmljZSA9IGliX2RldmljZTsKIAljbV9nZXRfYWNrX2RlbGF5KGNtX2Rldik7CiAKLQljbV9kZXYtPmRldmljZSA9IGRldmljZV9jcmVhdGVfZHJ2ZGF0YSgmY21fY2xhc3MsICZpYl9kZXZpY2UtPmRldiwKLQkJCQkJICAgICAgIE1LREVWKDAsIDApLCBOVUxMLAotCQkJCQkgICAgICAgIiVzIiwgaWJfZGV2aWNlLT5uYW1lKTsKKwljbV9kZXYtPmRldmljZSA9IGRldmljZV9jcmVhdGUoJmNtX2NsYXNzLCAmaWJfZGV2aWNlLT5kZXYsCisJCQkJICAgICAgIE1LREVWKDAsIDApLCBOVUxMLAorCQkJCSAgICAgICAiJXMiLCBpYl9kZXZpY2UtPm5hbWUpOwogCWlmICghY21fZGV2LT5kZXZpY2UpIHsKIAkJa2ZyZWUoY21fZGV2KTsKIAkJcmV0dXJuOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdXNlcl9tYWQuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3VzZXJfbWFkLmMKaW5kZXggMjY4YTJkMi4uOGM0NmYyMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdXNlcl9tYWQuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS91c2VyX21hZC5jCkBAIC0xMDE2LDkgKzEwMTYsOSBAQAogCWlmIChjZGV2X2FkZChwb3J0LT5jZGV2LCBiYXNlX2RldiArIHBvcnQtPmRldl9udW0sIDEpKQogCQlnb3RvIGVycl9jZGV2OwogCi0JcG9ydC0+ZGV2ID0gZGV2aWNlX2NyZWF0ZV9kcnZkYXRhKHVtYWRfY2xhc3MsIGRldmljZS0+ZG1hX2RldmljZSwKLQkJCQkJICBwb3J0LT5jZGV2LT5kZXYsIHBvcnQsCi0JCQkJCSAgInVtYWQlZCIsIHBvcnQtPmRldl9udW0pOworCXBvcnQtPmRldiA9IGRldmljZV9jcmVhdGUodW1hZF9jbGFzcywgZGV2aWNlLT5kbWFfZGV2aWNlLAorCQkJCSAgcG9ydC0+Y2Rldi0+ZGV2LCBwb3J0LAorCQkJCSAgInVtYWQlZCIsIHBvcnQtPmRldl9udW0pOwogCWlmIChJU19FUlIocG9ydC0+ZGV2KSkKIAkJZ290byBlcnJfY2RldjsKIApAQCAtMTAzNiw5ICsxMDM2LDkgQEAKIAlpZiAoY2Rldl9hZGQocG9ydC0+c21fY2RldiwgYmFzZV9kZXYgKyBwb3J0LT5kZXZfbnVtICsgSUJfVU1BRF9NQVhfUE9SVFMsIDEpKQogCQlnb3RvIGVycl9zbV9jZGV2OwogCi0JcG9ydC0+c21fZGV2ID0gZGV2aWNlX2NyZWF0ZV9kcnZkYXRhKHVtYWRfY2xhc3MsIGRldmljZS0+ZG1hX2RldmljZSwKLQkJCQkJICAgICBwb3J0LT5zbV9jZGV2LT5kZXYsIHBvcnQsCi0JCQkJCSAgICAgImlzc20lZCIsIHBvcnQtPmRldl9udW0pOworCXBvcnQtPnNtX2RldiA9IGRldmljZV9jcmVhdGUodW1hZF9jbGFzcywgZGV2aWNlLT5kbWFfZGV2aWNlLAorCQkJCSAgICAgcG9ydC0+c21fY2Rldi0+ZGV2LCBwb3J0LAorCQkJCSAgICAgImlzc20lZCIsIHBvcnQtPmRldl9udW0pOwogCWlmIChJU19FUlIocG9ydC0+c21fZGV2KSkKIAkJZ290byBlcnJfc21fY2RldjsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdXZlcmJzX21haW4uYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3V2ZXJic19tYWluLmMKaW5kZXggYWVlZTg1Ni4uZDg1YWYxYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdXZlcmJzX21haW4uYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS91dmVyYnNfbWFpbi5jCkBAIC03NjQsMTIgKzc2NCw5IEBACiAJaWYgKGNkZXZfYWRkKHV2ZXJic19kZXYtPmNkZXYsIElCX1VWRVJCU19CQVNFX0RFViArIHV2ZXJic19kZXYtPmRldm51bSwgMSkpCiAJCWdvdG8gZXJyX2NkZXY7CiAKLQl1dmVyYnNfZGV2LT5kZXYgPSBkZXZpY2VfY3JlYXRlX2RydmRhdGEodXZlcmJzX2NsYXNzLAotCQkJCQkJZGV2aWNlLT5kbWFfZGV2aWNlLAotCQkJCQkJdXZlcmJzX2Rldi0+Y2Rldi0+ZGV2LAotCQkJCQkJdXZlcmJzX2RldiwKLQkJCQkJCSJ1dmVyYnMlZCIsCi0JCQkJCQl1dmVyYnNfZGV2LT5kZXZudW0pOworCXV2ZXJic19kZXYtPmRldiA9IGRldmljZV9jcmVhdGUodXZlcmJzX2NsYXNzLCBkZXZpY2UtPmRtYV9kZXZpY2UsCisJCQkJCXV2ZXJic19kZXYtPmNkZXYtPmRldiwgdXZlcmJzX2RldiwKKwkJCQkJInV2ZXJicyVkIiwgdXZlcmJzX2Rldi0+ZGV2bnVtKTsKIAlpZiAoSVNfRVJSKHV2ZXJic19kZXYtPmRldikpCiAJCWdvdG8gZXJyX2NkZXY7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9maWxlX29wcy5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX2ZpbGVfb3BzLmMKaW5kZXggNTZjMGVkYS4uMWFmMWYzYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX2ZpbGVfb3BzLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX2ZpbGVfb3BzLmMKQEAgLTI0NTUsNyArMjQ1NSw3IEBACiAJCWdvdG8gZXJyX2NkZXY7CiAJfQogCi0JZGV2aWNlID0gZGV2aWNlX2NyZWF0ZV9kcnZkYXRhKGlwYXRoX2NsYXNzLCBOVUxMLCBkZXYsIE5VTEwsIG5hbWUpOworCWRldmljZSA9IGRldmljZV9jcmVhdGUoaXBhdGhfY2xhc3MsIE5VTEwsIGRldiwgTlVMTCwgbmFtZSk7CiAKIAlpZiAoSVNfRVJSKGRldmljZSkpIHsKIAkJcmV0ID0gUFRSX0VSUihkZXZpY2UpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pc2VyL2lzY3NpX2lzZXIuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXNlci9pc2NzaV9pc2VyLmMKaW5kZXggNWExY2YyNS4uMWU1YjY0NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pc2VyL2lzY3NpX2lzZXIuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lzZXIvaXNjc2lfaXNlci5jCkBAIC0zNzgsNiArMzc4LDcgQEAKIHsKIAlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCA9IGlzY3NpX3Nlc3Npb25fdG9fc2hvc3QoY2xzX3Nlc3Npb24pOwogCisJaXNjc2lfc2Vzc2lvbl90ZWFyZG93bihjbHNfc2Vzc2lvbik7CiAJaXNjc2lfaG9zdF9yZW1vdmUoc2hvc3QpOwogCWlzY3NpX2hvc3RfZnJlZShzaG9zdCk7CiB9CkBAIC01OTcsNyArNTk4LDcgQEAKIAkuY21kX3Blcl9sdW4gICAgICAgICAgICA9IElTQ1NJX01BWF9DTURfUEVSX0xVTiwKIAkuZWhfYWJvcnRfaGFuZGxlciAgICAgICA9IGlzY3NpX2VoX2Fib3J0LAogCS5laF9kZXZpY2VfcmVzZXRfaGFuZGxlcj0gaXNjc2lfZWhfZGV2aWNlX3Jlc2V0LAotCS5laF9ob3N0X3Jlc2V0X2hhbmRsZXIJPSBpc2NzaV9laF9ob3N0X3Jlc2V0LAorCS5laF90YXJnZXRfcmVzZXRfaGFuZGxlcj0gaXNjc2lfZWhfdGFyZ2V0X3Jlc2V0LAogCS51c2VfY2x1c3RlcmluZyAgICAgICAgID0gRElTQUJMRV9DTFVTVEVSSU5HLAogCS5wcm9jX25hbWUgICAgICAgICAgICAgID0gImlzY3NpX2lzZXIiLAogCS50aGlzX2lkICAgICAgICAgICAgICAgID0gLTEsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvdWxwL3NycC9pYl9zcnAuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvc3JwL2liX3NycC5jCmluZGV4IGVkN2M1ZjcuLjViOGI1MzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvc3JwL2liX3NycC5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvc3JwL2liX3NycC5jCkBAIC0xNjgzLDcgKzE2ODMsNyBAQAogCQkJCSAgIFNSUF9PUFRfU0VSVklDRV9JRCksCiB9OwogCi1zdGF0aWMgbWF0Y2hfdGFibGVfdCBzcnBfb3B0X3Rva2VucyA9IHsKK3N0YXRpYyBjb25zdCBtYXRjaF90YWJsZV90IHNycF9vcHRfdG9rZW5zID0gewogCXsgU1JQX09QVF9JRF9FWFQsCQkiaWRfZXh0PSVzIiAJCX0sCiAJeyBTUlBfT1BUX0lPQ19HVUlELAkJImlvY19ndWlkPSVzIiAJCX0sCiAJeyBTUlBfT1BUX0RHSUQsCQkJImRnaWQ9JXMiIAkJfSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvZ2FtZXBvcnQvZ2FtZXBvcnQuYyBiL2RyaXZlcnMvaW5wdXQvZ2FtZXBvcnQvZ2FtZXBvcnQuYwppbmRleCAwNzhlNGVlLi4yODgwZWFhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L2dhbWVwb3J0L2dhbWVwb3J0LmMKKysrIGIvZHJpdmVycy9pbnB1dC9nYW1lcG9ydC9nYW1lcG9ydC5jCkBAIC0yMzEsNiArMjMxLDcgQEAKIGVudW0gZ2FtZXBvcnRfZXZlbnRfdHlwZSB7CiAJR0FNRVBPUlRfUkVHSVNURVJfUE9SVCwKIAlHQU1FUE9SVF9SRUdJU1RFUl9EUklWRVIsCisJR0FNRVBPUlRfQVRUQUNIX0RSSVZFUiwKIH07CiAKIHN0cnVjdCBnYW1lcG9ydF9ldmVudCB7CkBAIC0yNDUsMTEgKzI0NiwxMiBAQAogc3RhdGljIERFQ0xBUkVfV0FJVF9RVUVVRV9IRUFEKGdhbWVwb3J0X3dhaXQpOwogc3RhdGljIHN0cnVjdCB0YXNrX3N0cnVjdCAqZ2FtZXBvcnRfdGFzazsKIAotc3RhdGljIHZvaWQgZ2FtZXBvcnRfcXVldWVfZXZlbnQodm9pZCAqb2JqZWN0LCBzdHJ1Y3QgbW9kdWxlICpvd25lciwKLQkJCSAgICAgIGVudW0gZ2FtZXBvcnRfZXZlbnRfdHlwZSBldmVudF90eXBlKQorc3RhdGljIGludCBnYW1lcG9ydF9xdWV1ZV9ldmVudCh2b2lkICpvYmplY3QsIHN0cnVjdCBtb2R1bGUgKm93bmVyLAorCQkJCWVudW0gZ2FtZXBvcnRfZXZlbnRfdHlwZSBldmVudF90eXBlKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJc3RydWN0IGdhbWVwb3J0X2V2ZW50ICpldmVudDsKKwlpbnQgcmV0dmFsID0gMDsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZnYW1lcG9ydF9ldmVudF9sb2NrLCBmbGFncyk7CiAKQEAgLTI2OCwyNCArMjcwLDM0IEBACiAJCX0KIAl9CiAKLQlpZiAoKGV2ZW50ID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGdhbWVwb3J0X2V2ZW50KSwgR0ZQX0FUT01JQykpKSB7Ci0JCWlmICghdHJ5X21vZHVsZV9nZXQob3duZXIpKSB7Ci0JCQlwcmludGsoS0VSTl9XQVJOSU5HICJnYW1lcG9ydDogQ2FuJ3QgZ2V0IG1vZHVsZSByZWZlcmVuY2UsIGRyb3BwaW5nIGV2ZW50ICVkXG4iLCBldmVudF90eXBlKTsKLQkJCWtmcmVlKGV2ZW50KTsKLQkJCWdvdG8gb3V0OwotCQl9Ci0KLQkJZXZlbnQtPnR5cGUgPSBldmVudF90eXBlOwotCQlldmVudC0+b2JqZWN0ID0gb2JqZWN0OwotCQlldmVudC0+b3duZXIgPSBvd25lcjsKLQotCQlsaXN0X2FkZF90YWlsKCZldmVudC0+bm9kZSwgJmdhbWVwb3J0X2V2ZW50X2xpc3QpOwotCQl3YWtlX3VwKCZnYW1lcG9ydF93YWl0KTsKLQl9IGVsc2UgewotCQlwcmludGsoS0VSTl9FUlIgImdhbWVwb3J0OiBOb3QgZW5vdWdoIG1lbW9yeSB0byBxdWV1ZSBldmVudCAlZFxuIiwgZXZlbnRfdHlwZSk7CisJZXZlbnQgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgZ2FtZXBvcnRfZXZlbnQpLCBHRlBfQVRPTUlDKTsKKwlpZiAoIWV2ZW50KSB7CisJCXByaW50ayhLRVJOX0VSUgorCQkJImdhbWVwb3J0OiBOb3QgZW5vdWdoIG1lbW9yeSB0byBxdWV1ZSBldmVudCAlZFxuIiwKKwkJCWV2ZW50X3R5cGUpOworCQlyZXR2YWwgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKIAl9CisKKwlpZiAoIXRyeV9tb2R1bGVfZ2V0KG93bmVyKSkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HCisJCQkiZ2FtZXBvcnQ6IENhbid0IGdldCBtb2R1bGUgcmVmZXJlbmNlLCBkcm9wcGluZyBldmVudCAlZFxuIiwKKwkJCWV2ZW50X3R5cGUpOworCQlrZnJlZShldmVudCk7CisJCXJldHZhbCA9IC1FSU5WQUw7CisJCWdvdG8gb3V0OworCX0KKworCWV2ZW50LT50eXBlID0gZXZlbnRfdHlwZTsKKwlldmVudC0+b2JqZWN0ID0gb2JqZWN0OworCWV2ZW50LT5vd25lciA9IG93bmVyOworCisJbGlzdF9hZGRfdGFpbCgmZXZlbnQtPm5vZGUsICZnYW1lcG9ydF9ldmVudF9saXN0KTsKKwl3YWtlX3VwKCZnYW1lcG9ydF93YWl0KTsKKwogb3V0OgogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmdhbWVwb3J0X2V2ZW50X2xvY2ssIGZsYWdzKTsKKwlyZXR1cm4gcmV0dmFsOwogfQogCiBzdGF0aWMgdm9pZCBnYW1lcG9ydF9mcmVlX2V2ZW50KHN0cnVjdCBnYW1lcG9ydF9ldmVudCAqZXZlbnQpCkBAIC0zNzgsOSArMzkwLDEwIEBACiB9CiAKIC8qCi0gKiBSZW1vdmUgYWxsIGV2ZW50cyB0aGF0IGhhdmUgYmVlbiBzdWJtaXR0ZWQgZm9yIGEgZ2l2ZW4gZ2FtZXBvcnQgcG9ydC4KKyAqIFJlbW92ZSBhbGwgZXZlbnRzIHRoYXQgaGF2ZSBiZWVuIHN1Ym1pdHRlZCBmb3IgYSBnaXZlbiBvYmplY3QsCisgKiBiZSBpdCBhIGdhbWVwb3J0IHBvcnQgb3IgYSBkcml2ZXIuCiAgKi8KLXN0YXRpYyB2b2lkIGdhbWVwb3J0X3JlbW92ZV9wZW5kaW5nX2V2ZW50cyhzdHJ1Y3QgZ2FtZXBvcnQgKmdhbWVwb3J0KQorc3RhdGljIHZvaWQgZ2FtZXBvcnRfcmVtb3ZlX3BlbmRpbmdfZXZlbnRzKHZvaWQgKm9iamVjdCkKIHsKIAlzdHJ1Y3QgbGlzdF9oZWFkICpub2RlLCAqbmV4dDsKIAlzdHJ1Y3QgZ2FtZXBvcnRfZXZlbnQgKmV2ZW50OwpAQCAtMzkwLDcgKzQwMyw3IEBACiAKIAlsaXN0X2Zvcl9lYWNoX3NhZmUobm9kZSwgbmV4dCwgJmdhbWVwb3J0X2V2ZW50X2xpc3QpIHsKIAkJZXZlbnQgPSBsaXN0X2VudHJ5KG5vZGUsIHN0cnVjdCBnYW1lcG9ydF9ldmVudCwgbm9kZSk7Ci0JCWlmIChldmVudC0+b2JqZWN0ID09IGdhbWVwb3J0KSB7CisJCWlmIChldmVudC0+b2JqZWN0ID09IG9iamVjdCkgewogCQkJbGlzdF9kZWxfaW5pdChub2RlKTsKIAkJCWdhbWVwb3J0X2ZyZWVfZXZlbnQoZXZlbnQpOwogCQl9CkBAIC03MDUsMTAgKzcxOCw0MCBAQAogCQkJZHJ2LT5kcml2ZXIubmFtZSwgZXJyb3IpOwogfQogCi12b2lkIF9fZ2FtZXBvcnRfcmVnaXN0ZXJfZHJpdmVyKHN0cnVjdCBnYW1lcG9ydF9kcml2ZXIgKmRydiwgc3RydWN0IG1vZHVsZSAqb3duZXIpCitpbnQgX19nYW1lcG9ydF9yZWdpc3Rlcl9kcml2ZXIoc3RydWN0IGdhbWVwb3J0X2RyaXZlciAqZHJ2LCBzdHJ1Y3QgbW9kdWxlICpvd25lciwKKwkJCQljb25zdCBjaGFyICptb2RfbmFtZSkKIHsKKwlpbnQgZXJyb3I7CisKIAlkcnYtPmRyaXZlci5idXMgPSAmZ2FtZXBvcnRfYnVzOwotCWdhbWVwb3J0X3F1ZXVlX2V2ZW50KGRydiwgb3duZXIsIEdBTUVQT1JUX1JFR0lTVEVSX0RSSVZFUik7CisJZHJ2LT5kcml2ZXIub3duZXIgPSBvd25lcjsKKwlkcnYtPmRyaXZlci5tb2RfbmFtZSA9IG1vZF9uYW1lOworCisJLyoKKwkgKiBUZW1wb3JhcmlseSBkaXNhYmxlIGF1dG9tYXRpYyBiaW5kaW5nIGJlY2F1c2UgcHJvYmluZworCSAqIHRha2VzIGxvbmcgdGltZSBhbmQgd2UgYXJlIGJldHRlciBvZmYgZG9pbmcgaXQgaW4ga2dhbWVwb3J0ZAorCSAqLworCWRydi0+aWdub3JlID0gMTsKKworCWVycm9yID0gZHJpdmVyX3JlZ2lzdGVyKCZkcnYtPmRyaXZlcik7CisJaWYgKGVycm9yKSB7CisJCXByaW50ayhLRVJOX0VSUgorCQkJImdhbWVwb3J0OiBkcml2ZXJfcmVnaXN0ZXIoKSBmYWlsZWQgZm9yICVzLCBlcnJvcjogJWRcbiIsCisJCQlkcnYtPmRyaXZlci5uYW1lLCBlcnJvcik7CisJCXJldHVybiBlcnJvcjsKKwl9CisKKwkvKgorCSAqIFJlc2V0IGlnbm9yZSBmbGFnIGFuZCBsZXQga2dhbWVwb3J0ZCBiaW5kIHRoZSBkcml2ZXIgdG8gZnJlZSBwb3J0cworCSAqLworCWRydi0+aWdub3JlID0gMDsKKwllcnJvciA9IGdhbWVwb3J0X3F1ZXVlX2V2ZW50KGRydiwgTlVMTCwgR0FNRVBPUlRfQVRUQUNIX0RSSVZFUik7CisJaWYgKGVycm9yKSB7CisJCWRyaXZlcl91bnJlZ2lzdGVyKCZkcnYtPmRyaXZlcik7CisJCXJldHVybiBlcnJvcjsKKwl9CisKKwlyZXR1cm4gMDsKIH0KIAogdm9pZCBnYW1lcG9ydF91bnJlZ2lzdGVyX2RyaXZlcihzdHJ1Y3QgZ2FtZXBvcnRfZHJpdmVyICpkcnYpCkBAIC03MTYsNyArNzU5LDkgQEAKIAlzdHJ1Y3QgZ2FtZXBvcnQgKmdhbWVwb3J0OwogCiAJbXV0ZXhfbG9jaygmZ2FtZXBvcnRfbXV0ZXgpOworCiAJZHJ2LT5pZ25vcmUgPSAxOwkvKiBzbyBnYW1lcG9ydF9maW5kX2RyaXZlciBpZ25vcmVzIGl0ICovCisJZ2FtZXBvcnRfcmVtb3ZlX3BlbmRpbmdfZXZlbnRzKGRydik7CiAKIHN0YXJ0X292ZXI6CiAJbGlzdF9mb3JfZWFjaF9lbnRyeShnYW1lcG9ydCwgJmdhbWVwb3J0X2xpc3QsIG5vZGUpIHsKQEAgLTcyOSw2ICs3NzQsNyBAQAogCX0KIAogCWRyaXZlcl91bnJlZ2lzdGVyKCZkcnYtPmRyaXZlcik7CisKIAltdXRleF91bmxvY2soJmdhbWVwb3J0X211dGV4KTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9qb3lzdGljay9hM2QuYyBiL2RyaXZlcnMvaW5wdXQvam95c3RpY2svYTNkLmMKaW5kZXggOTI0OThkNC4uNjQ4OWY0MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9qb3lzdGljay9hM2QuYworKysgYi9kcml2ZXJzL2lucHV0L2pveXN0aWNrL2EzZC5jCkBAIC00MTQsOCArNDE0LDcgQEAKIAogc3RhdGljIGludCBfX2luaXQgYTNkX2luaXQodm9pZCkKIHsKLQlnYW1lcG9ydF9yZWdpc3Rlcl9kcml2ZXIoJmEzZF9kcnYpOwotCXJldHVybiAwOworCXJldHVybiBnYW1lcG9ydF9yZWdpc3Rlcl9kcml2ZXIoJmEzZF9kcnYpOwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgYTNkX2V4aXQodm9pZCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvam95c3RpY2svYWRpLmMgYi9kcml2ZXJzL2lucHV0L2pveXN0aWNrL2FkaS5jCmluZGV4IGQxY2E4YTEuLjg5YzRjMDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvam95c3RpY2svYWRpLmMKKysrIGIvZHJpdmVycy9pbnB1dC9qb3lzdGljay9hZGkuYwpAQCAtNTcyLDggKzU3Miw3IEBACiAKIHN0YXRpYyBpbnQgX19pbml0IGFkaV9pbml0KHZvaWQpCiB7Ci0JZ2FtZXBvcnRfcmVnaXN0ZXJfZHJpdmVyKCZhZGlfZHJ2KTsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gZ2FtZXBvcnRfcmVnaXN0ZXJfZHJpdmVyKCZhZGlfZHJ2KTsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IGFkaV9leGl0KHZvaWQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L2pveXN0aWNrL2FuYWxvZy5jIGIvZHJpdmVycy9pbnB1dC9qb3lzdGljay9hbmFsb2cuYwppbmRleCA3MDhjNWFlLi4zNTZiM2EyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L2pveXN0aWNrL2FuYWxvZy5jCisrKyBiL2RyaXZlcnMvaW5wdXQvam95c3RpY2svYW5hbG9nLmMKQEAgLTc2MSw5ICs3NjEsNyBAQAogc3RhdGljIGludCBfX2luaXQgYW5hbG9nX2luaXQodm9pZCkKIHsKIAlhbmFsb2dfcGFyc2Vfb3B0aW9ucygpOwotCWdhbWVwb3J0X3JlZ2lzdGVyX2RyaXZlcigmYW5hbG9nX2Rydik7Ci0KLQlyZXR1cm4gMDsKKwlyZXR1cm4gZ2FtZXBvcnRfcmVnaXN0ZXJfZHJpdmVyKCZhbmFsb2dfZHJ2KTsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IGFuYWxvZ19leGl0KHZvaWQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L2pveXN0aWNrL2NvYnJhLmMgYi9kcml2ZXJzL2lucHV0L2pveXN0aWNrL2NvYnJhLmMKaW5kZXggNjM5Yjk3NS4uMzQ5N2I4NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9qb3lzdGljay9jb2JyYS5jCisrKyBiL2RyaXZlcnMvaW5wdXQvam95c3RpY2svY29icmEuYwpAQCAtMjYzLDggKzI2Myw3IEBACiAKIHN0YXRpYyBpbnQgX19pbml0IGNvYnJhX2luaXQodm9pZCkKIHsKLQlnYW1lcG9ydF9yZWdpc3Rlcl9kcml2ZXIoJmNvYnJhX2Rydik7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIGdhbWVwb3J0X3JlZ2lzdGVyX2RyaXZlcigmY29icmFfZHJ2KTsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IGNvYnJhX2V4aXQodm9pZCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvam95c3RpY2svZ2Yyay5jIGIvZHJpdmVycy9pbnB1dC9qb3lzdGljay9nZjJrLmMKaW5kZXggY2I2ZWVmMS4uNjdjMjA3ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9qb3lzdGljay9nZjJrLmMKKysrIGIvZHJpdmVycy9pbnB1dC9qb3lzdGljay9nZjJrLmMKQEAgLTM3NSw4ICszNzUsNyBAQAogCiBzdGF0aWMgaW50IF9faW5pdCBnZjJrX2luaXQodm9pZCkKIHsKLQlnYW1lcG9ydF9yZWdpc3Rlcl9kcml2ZXIoJmdmMmtfZHJ2KTsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gZ2FtZXBvcnRfcmVnaXN0ZXJfZHJpdmVyKCZnZjJrX2Rydik7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBnZjJrX2V4aXQodm9pZCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvam95c3RpY2svZ3JpcC5jIGIvZHJpdmVycy9pbnB1dC9qb3lzdGljay9ncmlwLmMKaW5kZXggNjg0ZTA3Yy4uZmM1NTg5OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9qb3lzdGljay9ncmlwLmMKKysrIGIvZHJpdmVycy9pbnB1dC9qb3lzdGljay9ncmlwLmMKQEAgLTQyNiw4ICs0MjYsNyBAQAogCiBzdGF0aWMgaW50IF9faW5pdCBncmlwX2luaXQodm9pZCkKIHsKLQlnYW1lcG9ydF9yZWdpc3Rlcl9kcml2ZXIoJmdyaXBfZHJ2KTsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gZ2FtZXBvcnRfcmVnaXN0ZXJfZHJpdmVyKCZncmlwX2Rydik7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBncmlwX2V4aXQodm9pZCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvam95c3RpY2svZ3JpcF9tcC5jIGIvZHJpdmVycy9pbnB1dC9qb3lzdGljay9ncmlwX21wLmMKaW5kZXggODI3OTQ4MS4uMmQ0N2JhZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9qb3lzdGljay9ncmlwX21wLmMKKysrIGIvZHJpdmVycy9pbnB1dC9qb3lzdGljay9ncmlwX21wLmMKQEAgLTY4OSw4ICs2ODksNyBAQAogCiBzdGF0aWMgaW50IF9faW5pdCBncmlwX2luaXQodm9pZCkKIHsKLQlnYW1lcG9ydF9yZWdpc3Rlcl9kcml2ZXIoJmdyaXBfZHJ2KTsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gZ2FtZXBvcnRfcmVnaXN0ZXJfZHJpdmVyKCZncmlwX2Rydik7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBncmlwX2V4aXQodm9pZCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvam95c3RpY2svZ3VpbGxlbW90LmMgYi9kcml2ZXJzL2lucHV0L2pveXN0aWNrL2d1aWxsZW1vdC5jCmluZGV4IDI1ZWMzZmEuLjQwNThkNGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvam95c3RpY2svZ3VpbGxlbW90LmMKKysrIGIvZHJpdmVycy9pbnB1dC9qb3lzdGljay9ndWlsbGVtb3QuYwpAQCAtMjgzLDggKzI4Myw3IEBACiAKIHN0YXRpYyBpbnQgX19pbml0IGd1aWxsZW1vdF9pbml0KHZvaWQpCiB7Ci0JZ2FtZXBvcnRfcmVnaXN0ZXJfZHJpdmVyKCZndWlsbGVtb3RfZHJ2KTsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gZ2FtZXBvcnRfcmVnaXN0ZXJfZHJpdmVyKCZndWlsbGVtb3RfZHJ2KTsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IGd1aWxsZW1vdF9leGl0KHZvaWQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L2pveXN0aWNrL2lmb3JjZS9pZm9yY2UtZmYuYyBiL2RyaXZlcnMvaW5wdXQvam95c3RpY2svaWZvcmNlL2lmb3JjZS1mZi5jCmluZGV4IDc4MzliN2IuLjBkZTlhMDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvam95c3RpY2svaWZvcmNlL2lmb3JjZS1mZi5jCisrKyBiL2RyaXZlcnMvaW5wdXQvam95c3RpY2svaWZvcmNlL2lmb3JjZS1mZi5jCkBAIC0xOTcsMTMgKzE5NywxNiBAQAogICogQW5hbHlzZSB0aGUgY2hhbmdlcyBpbiBhbiBlZmZlY3QsIGFuZCB0ZWxsIGlmIHdlIG5lZWQgdG8gc2VuZCBhbiBjb25kaXRpb24KICAqIHBhcmFtZXRlciBwYWNrZXQKICAqLwotc3RhdGljIGludCBuZWVkX2NvbmRpdGlvbl9tb2RpZmllcihzdHJ1Y3QgZmZfZWZmZWN0ICpvbGQsIHN0cnVjdCBmZl9lZmZlY3QgKm5ldykKK3N0YXRpYyBpbnQgbmVlZF9jb25kaXRpb25fbW9kaWZpZXIoc3RydWN0IGlmb3JjZSAqaWZvcmNlLAorCQkJCSAgIHN0cnVjdCBmZl9lZmZlY3QgKm9sZCwKKwkJCQkgICBzdHJ1Y3QgZmZfZWZmZWN0ICpuZXcpCiB7CiAJaW50IHJldCA9IDA7CiAJaW50IGk7CiAKIAlpZiAobmV3LT50eXBlICE9IEZGX1NQUklORyAmJiBuZXctPnR5cGUgIT0gRkZfRlJJQ1RJT04pIHsKLQkJd2FybigiYmFkIGVmZmVjdCB0eXBlIGluIG5lZWRfY29uZGl0aW9uX21vZGlmaWVyIik7CisJCWRldl93YXJuKCZpZm9yY2UtPmRldi0+ZGV2LCAiYmFkIGVmZmVjdCB0eXBlIGluICVzXG4iLAorCQkJIF9fZnVuY19fKTsKIAkJcmV0dXJuIDA7CiAJfQogCkBAIC0yMjIsMTAgKzIyNSwxMyBAQAogICogQW5hbHlzZSB0aGUgY2hhbmdlcyBpbiBhbiBlZmZlY3QsIGFuZCB0ZWxsIGlmIHdlIG5lZWQgdG8gc2VuZCBhIG1hZ25pdHVkZQogICogcGFyYW1ldGVyIHBhY2tldAogICovCi1zdGF0aWMgaW50IG5lZWRfbWFnbml0dWRlX21vZGlmaWVyKHN0cnVjdCBmZl9lZmZlY3QgKm9sZCwgc3RydWN0IGZmX2VmZmVjdCAqZWZmZWN0KQorc3RhdGljIGludCBuZWVkX21hZ25pdHVkZV9tb2RpZmllcihzdHJ1Y3QgaWZvcmNlICppZm9yY2UsCisJCQkJICAgc3RydWN0IGZmX2VmZmVjdCAqb2xkLAorCQkJCSAgIHN0cnVjdCBmZl9lZmZlY3QgKmVmZmVjdCkKIHsKIAlpZiAoZWZmZWN0LT50eXBlICE9IEZGX0NPTlNUQU5UKSB7Ci0JCXdhcm4oImJhZCBlZmZlY3QgdHlwZSBpbiBuZWVkX2VudmVsb3BlX21vZGlmaWVyIik7CisJCWRldl93YXJuKCZpZm9yY2UtPmRldi0+ZGV2LCAiYmFkIGVmZmVjdCB0eXBlIGluICVzXG4iLAorCQkJIF9fZnVuY19fKTsKIAkJcmV0dXJuIDA7CiAJfQogCkBAIC0yMzYsNyArMjQyLDggQEAKICAqIEFuYWx5c2UgdGhlIGNoYW5nZXMgaW4gYW4gZWZmZWN0LCBhbmQgdGVsbCBpZiB3ZSBuZWVkIHRvIHNlbmQgYW4gZW52ZWxvcGUKICAqIHBhcmFtZXRlciBwYWNrZXQKICAqLwotc3RhdGljIGludCBuZWVkX2VudmVsb3BlX21vZGlmaWVyKHN0cnVjdCBmZl9lZmZlY3QgKm9sZCwgc3RydWN0IGZmX2VmZmVjdCAqZWZmZWN0KQorc3RhdGljIGludCBuZWVkX2VudmVsb3BlX21vZGlmaWVyKHN0cnVjdCBpZm9yY2UgKmlmb3JjZSwgc3RydWN0IGZmX2VmZmVjdCAqb2xkLAorCQkJCSAgc3RydWN0IGZmX2VmZmVjdCAqZWZmZWN0KQogewogCXN3aXRjaCAoZWZmZWN0LT50eXBlKSB7CiAJY2FzZSBGRl9DT05TVEFOVDoKQEAgLTI1Niw3ICsyNjMsOCBAQAogCQlicmVhazsKIAogCWRlZmF1bHQ6Ci0JCXdhcm4oImJhZCBlZmZlY3QgdHlwZSBpbiBuZWVkX2VudmVsb3BlX21vZGlmaWVyIik7CisJCWRldl93YXJuKCZpZm9yY2UtPmRldi0+ZGV2LCAiYmFkIGVmZmVjdCB0eXBlIGluICVzXG4iLAorCQkJIF9fZnVuY19fKTsKIAl9CiAKIAlyZXR1cm4gMDsKQEAgLTI2NiwxMCArMjc0LDEyIEBACiAgKiBBbmFseXNlIHRoZSBjaGFuZ2VzIGluIGFuIGVmZmVjdCwgYW5kIHRlbGwgaWYgd2UgbmVlZCB0byBzZW5kIGEgcGVyaW9kaWMKICAqIHBhcmFtZXRlciBlZmZlY3QKICAqLwotc3RhdGljIGludCBuZWVkX3BlcmlvZF9tb2RpZmllcihzdHJ1Y3QgZmZfZWZmZWN0ICpvbGQsIHN0cnVjdCBmZl9lZmZlY3QgKm5ldykKK3N0YXRpYyBpbnQgbmVlZF9wZXJpb2RfbW9kaWZpZXIoc3RydWN0IGlmb3JjZSAqaWZvcmNlLCBzdHJ1Y3QgZmZfZWZmZWN0ICpvbGQsCisJCQkJc3RydWN0IGZmX2VmZmVjdCAqbmV3KQogewogCWlmIChuZXctPnR5cGUgIT0gRkZfUEVSSU9ESUMpIHsKLQkJd2FybigiYmFkIGVmZmVjdCB0eXBlIGluIG5lZWRfcGVyaW9kX21vZGlmaWVyIik7CisJCWRldl93YXJuKCZpZm9yY2UtPmRldi0+ZGV2LCAiYmFkIGVmZmVjdCB0eXBlIGluICVzXG4iLAorCQkJIF9fZnVuY19fKTsKIAkJcmV0dXJuIDA7CiAJfQogCXJldHVybiAob2xkLT51LnBlcmlvZGljLnBlcmlvZCAhPSBuZXctPnUucGVyaW9kaWMucGVyaW9kCkBAIC0zNTUsNyArMzY1LDcgQEAKIAlpbnQgcGFyYW0yX2VyciA9IDE7CiAJaW50IGNvcmVfZXJyID0gMDsKIAotCWlmICghb2xkIHx8IG5lZWRfcGVyaW9kX21vZGlmaWVyKG9sZCwgZWZmZWN0KSkgeworCWlmICghb2xkIHx8IG5lZWRfcGVyaW9kX21vZGlmaWVyKGlmb3JjZSwgb2xkLCBlZmZlY3QpKSB7CiAJCXBhcmFtMV9lcnIgPSBtYWtlX3BlcmlvZF9tb2RpZmllcihpZm9yY2UsIG1vZDFfY2h1bmssCiAJCQlvbGQgIT0gTlVMTCwKIAkJCWVmZmVjdC0+dS5wZXJpb2RpYy5tYWduaXR1ZGUsIGVmZmVjdC0+dS5wZXJpb2RpYy5vZmZzZXQsCkBAIC0zNjUsNyArMzc1LDcgQEAKIAkJc2V0X2JpdChGRl9NT0QxX0lTX1VTRUQsIGNvcmVfZWZmZWN0LT5mbGFncyk7CiAJfQogCi0JaWYgKCFvbGQgfHwgbmVlZF9lbnZlbG9wZV9tb2RpZmllcihvbGQsIGVmZmVjdCkpIHsKKwlpZiAoIW9sZCB8fCBuZWVkX2VudmVsb3BlX21vZGlmaWVyKGlmb3JjZSwgb2xkLCBlZmZlY3QpKSB7CiAJCXBhcmFtMl9lcnIgPSBtYWtlX2VudmVsb3BlX21vZGlmaWVyKGlmb3JjZSwgbW9kMl9jaHVuaywKIAkJCW9sZCAhPU5VTEwsCiAJCQllZmZlY3QtPnUucGVyaW9kaWMuZW52ZWxvcGUuYXR0YWNrX2xlbmd0aCwKQEAgLTQyNSw3ICs0MzUsNyBAQAogCWludCBwYXJhbTJfZXJyID0gMTsKIAlpbnQgY29yZV9lcnIgPSAwOwogCi0JaWYgKCFvbGQgfHwgbmVlZF9tYWduaXR1ZGVfbW9kaWZpZXIob2xkLCBlZmZlY3QpKSB7CisJaWYgKCFvbGQgfHwgbmVlZF9tYWduaXR1ZGVfbW9kaWZpZXIoaWZvcmNlLCBvbGQsIGVmZmVjdCkpIHsKIAkJcGFyYW0xX2VyciA9IG1ha2VfbWFnbml0dWRlX21vZGlmaWVyKGlmb3JjZSwgbW9kMV9jaHVuaywKIAkJCW9sZCAhPSBOVUxMLAogCQkJZWZmZWN0LT51LmNvbnN0YW50LmxldmVsKTsKQEAgLTQzNCw3ICs0NDQsNyBAQAogCQlzZXRfYml0KEZGX01PRDFfSVNfVVNFRCwgY29yZV9lZmZlY3QtPmZsYWdzKTsKIAl9CiAKLQlpZiAoIW9sZCB8fCBuZWVkX2VudmVsb3BlX21vZGlmaWVyKG9sZCwgZWZmZWN0KSkgeworCWlmICghb2xkIHx8IG5lZWRfZW52ZWxvcGVfbW9kaWZpZXIoaWZvcmNlLCBvbGQsIGVmZmVjdCkpIHsKIAkJcGFyYW0yX2VyciA9IG1ha2VfZW52ZWxvcGVfbW9kaWZpZXIoaWZvcmNlLCBtb2QyX2NodW5rLAogCQkJb2xkICE9IE5VTEwsCiAJCQllZmZlY3QtPnUuY29uc3RhbnQuZW52ZWxvcGUuYXR0YWNrX2xlbmd0aCwKQEAgLTQ4Nyw3ICs0OTcsNyBAQAogCQlkZWZhdWx0OiByZXR1cm4gLTE7CiAJfQogCi0JaWYgKCFvbGQgfHwgbmVlZF9jb25kaXRpb25fbW9kaWZpZXIob2xkLCBlZmZlY3QpKSB7CisJaWYgKCFvbGQgfHwgbmVlZF9jb25kaXRpb25fbW9kaWZpZXIoaWZvcmNlLCBvbGQsIGVmZmVjdCkpIHsKIAkJcGFyYW1fZXJyID0gbWFrZV9jb25kaXRpb25fbW9kaWZpZXIoaWZvcmNlLCBtb2QxX2NodW5rLAogCQkJb2xkICE9IE5VTEwsCiAJCQllZmZlY3QtPnUuY29uZGl0aW9uWzBdLnJpZ2h0X3NhdHVyYXRpb24sCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L2pveXN0aWNrL2lmb3JjZS9pZm9yY2UtbWFpbi5jIGIvZHJpdmVycy9pbnB1dC9qb3lzdGljay9pZm9yY2UvaWZvcmNlLW1haW4uYwppbmRleCA2MWVlNmUzLi5iYWFiZjgzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L2pveXN0aWNrL2lmb3JjZS9pZm9yY2UtbWFpbi5jCisrKyBiL2RyaXZlcnMvaW5wdXQvam95c3RpY2svaWZvcmNlL2lmb3JjZS1tYWluLmMKQEAgLTIxOCw3ICsyMTgsOSBAQAogCQkvKiBDaGVjazogbm8gZWZmZWN0cyBzaG91bGQgYmUgcHJlc2VudCBpbiBtZW1vcnkgKi8KIAkJZm9yIChpID0gMDsgaSA8IGRldi0+ZmYtPm1heF9lZmZlY3RzOyBpKyspIHsKIAkJCWlmICh0ZXN0X2JpdChGRl9DT1JFX0lTX1VTRUQsIGlmb3JjZS0+Y29yZV9lZmZlY3RzW2ldLmZsYWdzKSkgewotCQkJCXdhcm4oImlmb3JjZV9yZWxlYXNlOiBEZXZpY2Ugc3RpbGwgb3ducyBlZmZlY3RzIik7CisJCQkJZGV2X3dhcm4oJmRldi0+ZGV2LAorCQkJCQkiJXM6IERldmljZSBzdGlsbCBvd25zIGVmZmVjdHNcbiIsCisJCQkJCV9fZnVuY19fKTsKIAkJCQlicmVhazsKIAkJCX0KIAkJfQpAQCAtMzM1LDI2ICszMzcsMjYgQEAKIAlpZiAoIWlmb3JjZV9nZXRfaWRfcGFja2V0KGlmb3JjZSwgIk0iKSkKIAkJaW5wdXRfZGV2LT5pZC52ZW5kb3IgPSAoaWZvcmNlLT5lZGF0YVsyXSA8PCA4KSB8IGlmb3JjZS0+ZWRhdGFbMV07CiAJZWxzZQotCQl3YXJuKCJEZXZpY2UgZG9lcyBub3QgcmVzcG9uZCB0byBpZCBwYWNrZXQgTSIpOworCQlkZXZfd2FybigmaWZvcmNlLT5kZXYtPmRldiwgIkRldmljZSBkb2VzIG5vdCByZXNwb25kIHRvIGlkIHBhY2tldCBNXG4iKTsKIAogCWlmICghaWZvcmNlX2dldF9pZF9wYWNrZXQoaWZvcmNlLCAiUCIpKQogCQlpbnB1dF9kZXYtPmlkLnByb2R1Y3QgPSAoaWZvcmNlLT5lZGF0YVsyXSA8PCA4KSB8IGlmb3JjZS0+ZWRhdGFbMV07CiAJZWxzZQotCQl3YXJuKCJEZXZpY2UgZG9lcyBub3QgcmVzcG9uZCB0byBpZCBwYWNrZXQgUCIpOworCQlkZXZfd2FybigmaWZvcmNlLT5kZXYtPmRldiwgIkRldmljZSBkb2VzIG5vdCByZXNwb25kIHRvIGlkIHBhY2tldCBQXG4iKTsKIAogCWlmICghaWZvcmNlX2dldF9pZF9wYWNrZXQoaWZvcmNlLCAiQiIpKQogCQlpZm9yY2UtPmRldmljZV9tZW1vcnkuZW5kID0gKGlmb3JjZS0+ZWRhdGFbMl0gPDwgOCkgfCBpZm9yY2UtPmVkYXRhWzFdOwogCWVsc2UKLQkJd2FybigiRGV2aWNlIGRvZXMgbm90IHJlc3BvbmQgdG8gaWQgcGFja2V0IEIiKTsKKwkJZGV2X3dhcm4oJmlmb3JjZS0+ZGV2LT5kZXYsICJEZXZpY2UgZG9lcyBub3QgcmVzcG9uZCB0byBpZCBwYWNrZXQgQlxuIik7CiAKIAlpZiAoIWlmb3JjZV9nZXRfaWRfcGFja2V0KGlmb3JjZSwgIk4iKSkKIAkJZmZfZWZmZWN0cyA9IGlmb3JjZS0+ZWRhdGFbMV07CiAJZWxzZQotCQl3YXJuKCJEZXZpY2UgZG9lcyBub3QgcmVzcG9uZCB0byBpZCBwYWNrZXQgTiIpOworCQlkZXZfd2FybigmaWZvcmNlLT5kZXYtPmRldiwgIkRldmljZSBkb2VzIG5vdCByZXNwb25kIHRvIGlkIHBhY2tldCBOXG4iKTsKIAogCS8qIENoZWNrIGlmIHRoZSBkZXZpY2UgY2FuIHN0b3JlIG1vcmUgZWZmZWN0cyB0aGFuIHRoZSBkcml2ZXIgY2FuIHJlYWxseSBoYW5kbGUgKi8KIAlpZiAoZmZfZWZmZWN0cyA+IElGT1JDRV9FRkZFQ1RTX01BWCkgewotCQl3YXJuKCJMaW1pdGluZyBudW1iZXIgb2YgZWZmZWN0cyB0byAlZCAoZGV2aWNlIHJlcG9ydHMgJWQpIiwKKwkJZGV2X3dhcm4oJmlmb3JjZS0+ZGV2LT5kZXYsICJMaW1pdGluZyBudW1iZXIgb2YgZWZmZWN0cyB0byAlZCAoZGV2aWNlIHJlcG9ydHMgJWQpXG4iLAogCQkgICAgICAgSUZPUkNFX0VGRkVDVFNfTUFYLCBmZl9lZmZlY3RzKTsKIAkJZmZfZWZmZWN0cyA9IElGT1JDRV9FRkZFQ1RTX01BWDsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L2pveXN0aWNrL2lmb3JjZS9pZm9yY2UtcGFja2V0cy5jIGIvZHJpdmVycy9pbnB1dC9qb3lzdGljay9pZm9yY2UvaWZvcmNlLXBhY2tldHMuYwppbmRleCAwMTViNTBhLi5hMTdiNTAwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L2pveXN0aWNrL2lmb3JjZS9pZm9yY2UtcGFja2V0cy5jCisrKyBiL2RyaXZlcnMvaW5wdXQvam95c3RpY2svaWZvcmNlL2lmb3JjZS1wYWNrZXRzLmMKQEAgLTY1LDcgKzY1LDggQEAKIAogCiAJaWYgKENJUkNfU1BBQ0UoaGVhZCwgdGFpbCwgWE1JVF9TSVpFKSA8IG4rMikgewotCQl3YXJuKCJub3QgZW5vdWdoIHNwYWNlIGluIHhtaXQgYnVmZmVyIHRvIHNlbmQgbmV3IHBhY2tldCIpOworCQlkZXZfd2FybigmaWZvcmNlLT5kZXYtPmRldiwKKwkJCSAibm90IGVub3VnaCBzcGFjZSBpbiB4bWl0IGJ1ZmZlciB0byBzZW5kIG5ldyBwYWNrZXRcbiIpOwogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpZm9yY2UtPnhtaXRfbG9jaywgZmxhZ3MpOwogCQlyZXR1cm4gLTE7CiAJfQpAQCAtMTQ4LDcgKzE0OSw3IEBACiAJCQlyZXR1cm4gMDsKIAkJfQogCX0KLQl3YXJuKCJ1bnVzZWQgZWZmZWN0ICUwNHggdXBkYXRlZCAhISEiLCBhZGRyKTsKKwlkZXZfd2FybigmaWZvcmNlLT5kZXYtPmRldiwgInVudXNlZCBlZmZlY3QgJTA0eCB1cGRhdGVkICEhIVxuIiwgYWRkcik7CiAJcmV0dXJuIC0xOwogfQogCkBAIC0xNTksNyArMTYwLDggQEAKIAlzdGF0aWMgaW50IGJlaW5nX3VzZWQgPSAwOwogCiAJaWYgKGJlaW5nX3VzZWQpCi0JCXdhcm4oInJlLWVudHJhbnQgY2FsbCB0byBpZm9yY2VfcHJvY2VzcyAlZCIsIGJlaW5nX3VzZWQpOworCQlkZXZfd2FybigmaWZvcmNlLT5kZXYtPmRldiwKKwkJCSAicmUtZW50cmFudCBjYWxsIHRvIGlmb3JjZV9wcm9jZXNzICVkXG4iLCBiZWluZ191c2VkKTsKIAliZWluZ191c2VkKys7CiAKICNpZmRlZiBDT05GSUdfSk9ZU1RJQ0tfSUZPUkNFXzIzMgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9qb3lzdGljay9pZm9yY2UvaWZvcmNlLXVzYi5jIGIvZHJpdmVycy9pbnB1dC9qb3lzdGljay9pZm9yY2UvaWZvcmNlLXVzYi5jCmluZGV4IDg1MWNjNDA4Li5mODMxODVhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L2pveXN0aWNrL2lmb3JjZS9pZm9yY2UtdXNiLmMKKysrIGIvZHJpdmVycy9pbnB1dC9qb3lzdGljay9pZm9yY2UvaWZvcmNlLXVzYi5jCkBAIC02NCw3ICs2NCw3IEBACiAKIAlpZiAoIChuPXVzYl9zdWJtaXRfdXJiKGlmb3JjZS0+b3V0LCBHRlBfQVRPTUlDKSkgKSB7CiAJCWNsZWFyX2JpdChJRk9SQ0VfWE1JVF9SVU5OSU5HLCBpZm9yY2UtPnhtaXRfZmxhZ3MpOwotCQl3YXJuKCJ1c2Jfc3VibWl0X3VyYiBmYWlsZWQgJWRcbiIsIG4pOworCQlkZXZfd2FybigmaWZvcmNlLT5kZXYtPmRldiwgInVzYl9zdWJtaXRfdXJiIGZhaWxlZCAlZFxuIiwgbik7CiAJfQogCiAJLyogVGhlIElGT1JDRV9YTUlUX1JVTk5JTkcgYml0IGlzIG5vdCBjbGVhcmVkIGhlcmUuIFRoYXQncyBpbnRlbmRlZC4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvam95c3RpY2svaW50ZXJhY3QuYyBiL2RyaXZlcnMvaW5wdXQvam95c3RpY2svaW50ZXJhY3QuYwppbmRleCA4YzMyOTBiLi4yNDc4Mjg5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L2pveXN0aWNrL2ludGVyYWN0LmMKKysrIGIvZHJpdmVycy9pbnB1dC9qb3lzdGljay9pbnRlcmFjdC5jCkBAIC0zMTcsOCArMzE3LDcgQEAKIAogc3RhdGljIGludCBfX2luaXQgaW50ZXJhY3RfaW5pdCh2b2lkKQogewotCWdhbWVwb3J0X3JlZ2lzdGVyX2RyaXZlcigmaW50ZXJhY3RfZHJ2KTsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gZ2FtZXBvcnRfcmVnaXN0ZXJfZHJpdmVyKCZpbnRlcmFjdF9kcnYpOwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgaW50ZXJhY3RfZXhpdCh2b2lkKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9qb3lzdGljay9qb3lkdW1wLmMgYi9kcml2ZXJzL2lucHV0L2pveXN0aWNrL2pveWR1bXAuYwppbmRleCAyYTFiODJjLi5jZDg5NGEwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L2pveXN0aWNrL2pveWR1bXAuYworKysgYi9kcml2ZXJzL2lucHV0L2pveXN0aWNrL2pveWR1bXAuYwpAQCAtMTYxLDggKzE2MSw3IEBACiAKIHN0YXRpYyBpbnQgX19pbml0IGpveWR1bXBfaW5pdCh2b2lkKQogewotCWdhbWVwb3J0X3JlZ2lzdGVyX2RyaXZlcigmam95ZHVtcF9kcnYpOwotCXJldHVybiAwOworCXJldHVybiBnYW1lcG9ydF9yZWdpc3Rlcl9kcml2ZXIoJmpveWR1bXBfZHJ2KTsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IGpveWR1bXBfZXhpdCh2b2lkKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9qb3lzdGljay9zaWRld2luZGVyLmMgYi9kcml2ZXJzL2lucHV0L2pveXN0aWNrL3NpZGV3aW5kZXIuYwppbmRleCA3YjQ4NjVmLi5jYTEzYTZiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L2pveXN0aWNrL3NpZGV3aW5kZXIuYworKysgYi9kcml2ZXJzL2lucHV0L2pveXN0aWNrL3NpZGV3aW5kZXIuYwpAQCAtODE4LDggKzgxOCw3IEBACiAKIHN0YXRpYyBpbnQgX19pbml0IHN3X2luaXQodm9pZCkKIHsKLQlnYW1lcG9ydF9yZWdpc3Rlcl9kcml2ZXIoJnN3X2Rydik7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIGdhbWVwb3J0X3JlZ2lzdGVyX2RyaXZlcigmc3dfZHJ2KTsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IHN3X2V4aXQodm9pZCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvam95c3RpY2svdG1kYy5jIGIvZHJpdmVycy9pbnB1dC9qb3lzdGljay90bWRjLmMKaW5kZXggNjBjMzdiYy4uZDZjNjA5OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9qb3lzdGljay90bWRjLmMKKysrIGIvZHJpdmVycy9pbnB1dC9qb3lzdGljay90bWRjLmMKQEAgLTQzOCw4ICs0MzgsNyBAQAogCiBzdGF0aWMgaW50IF9faW5pdCB0bWRjX2luaXQodm9pZCkKIHsKLQlnYW1lcG9ydF9yZWdpc3Rlcl9kcml2ZXIoJnRtZGNfZHJ2KTsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gZ2FtZXBvcnRfcmVnaXN0ZXJfZHJpdmVyKCZ0bWRjX2Rydik7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCB0bWRjX2V4aXQodm9pZCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvam95c3RpY2sveHBhZC5jIGIvZHJpdmVycy9pbnB1dC9qb3lzdGljay94cGFkLmMKaW5kZXggNjc5MWJlOC4uYjg2OGI4ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9qb3lzdGljay94cGFkLmMKKysrIGIvZHJpdmVycy9pbnB1dC9qb3lzdGljay94cGFkLmMKQEAgLTQ1NSwxMCArNDU1LDEwIEBACiAJY2FzZSAtRU5PRU5UOgogCWNhc2UgLUVTSFVURE9XTjoKIAkJLyogdGhpcyB1cmIgaXMgdGVybWluYXRlZCwgY2xlYW4gdXAgKi8KLQkJZGJnKCIlcyAtIHVyYiBzaHV0dGluZyBkb3duIHdpdGggc3RhdHVzOiAlZCIsIF9fRlVOQ1RJT05fXywgdXJiLT5zdGF0dXMpOworCQlkYmcoIiVzIC0gdXJiIHNodXR0aW5nIGRvd24gd2l0aCBzdGF0dXM6ICVkIiwgX19mdW5jX18sIHVyYi0+c3RhdHVzKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJZGJnKCIlcyAtIG5vbnplcm8gdXJiIHN0YXR1cyByZWNlaXZlZDogJWQiLCBfX0ZVTkNUSU9OX18sIHVyYi0+c3RhdHVzKTsKKwkJZGJnKCIlcyAtIG5vbnplcm8gdXJiIHN0YXR1cyByZWNlaXZlZDogJWQiLCBfX2Z1bmNfXywgdXJiLT5zdGF0dXMpOwogCX0KIH0KIApAQCAtOTExLDcgKzkxMSw3IEBACiB7CiAJaW50IHJlc3VsdCA9IHVzYl9yZWdpc3RlcigmeHBhZF9kcml2ZXIpOwogCWlmIChyZXN1bHQgPT0gMCkKLQkJaW5mbyhEUklWRVJfREVTQyk7CisJCXByaW50ayhLRVJOX0lORk8gS0JVSUxEX01PRE5BTUUgIjogIiBEUklWRVJfREVTQyAiXG4iKTsKIAlyZXR1cm4gcmVzdWx0OwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L2tleWJvYXJkL2F0a2JkLmMgYi9kcml2ZXJzL2lucHV0L2tleWJvYXJkL2F0a2JkLmMKaW5kZXggYjFjZTEwZi4uMjIwMTZjYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9hdGtiZC5jCisrKyBiL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvYXRrYmQuYwpAQCAtODM0LDEwICs4MzQsMTAgQEAKIH0KIAogLyoKLSAqIE1vc3Qgc3BlY2lhbCBrZXlzIChGbitGPykgb24gRGVsbCBMYXRpdHVkZXMgZG8gbm90IGdlbmVyYXRlIHJlbGVhc2UKKyAqIE1vc3Qgc3BlY2lhbCBrZXlzIChGbitGPykgb24gRGVsbCBsYXB0b3BzIGRvIG5vdCBnZW5lcmF0ZSByZWxlYXNlCiAgKiBldmVudHMgc28gd2UgaGF2ZSB0byBkbyBpdCBvdXJzZWx2ZXMuCiAgKi8KLXN0YXRpYyB2b2lkIGF0a2JkX2xhdGl0dWRlX2tleW1hcF9maXh1cChzdHJ1Y3QgYXRrYmQgKmF0a2JkKQorc3RhdGljIHZvaWQgYXRrYmRfZGVsbF9sYXB0b3Bfa2V5bWFwX2ZpeHVwKHN0cnVjdCBhdGtiZCAqYXRrYmQpCiB7CiAJY29uc3QgdW5zaWduZWQgaW50IGZvcmNlZF9yZWxlYXNlX2tleXNbXSA9IHsKIAkJMHg4NSwgMHg4NiwgMHg4NywgMHg4OCwgMHg4OSwgMHg4YSwgMHg4YiwgMHg4ZiwgMHg5MywKQEAgLTEyMDcsMTUgKzEyMDcsMTMgQEAKIHsKIAlzdHJ1Y3QgaW5wdXRfZGV2ICpvbGRfZGV2LCAqbmV3X2RldjsKIAl1bnNpZ25lZCBsb25nIHZhbHVlOwotCWNoYXIgKnJlc3Q7CiAJaW50IGVycjsKIAl1bnNpZ25lZCBjaGFyIG9sZF9leHRyYSwgb2xkX3NldDsKIAogCWlmICghYXRrYmQtPndyaXRlKQogCQlyZXR1cm4gLUVJTzsKIAotCXZhbHVlID0gc2ltcGxlX3N0cnRvdWwoYnVmLCAmcmVzdCwgMTApOwotCWlmICgqcmVzdCB8fCB2YWx1ZSA+IDEpCisJaWYgKHN0cmljdF9zdHJ0b3VsKGJ1ZiwgMTAsICZ2YWx1ZSkgfHwgdmFsdWUgPiAxKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWlmIChhdGtiZC0+ZXh0cmEgIT0gdmFsdWUpIHsKQEAgLTEyNjQsMTIgKzEyNjIsMTAgQEAKIHsKIAlzdHJ1Y3QgaW5wdXRfZGV2ICpvbGRfZGV2LCAqbmV3X2RldjsKIAl1bnNpZ25lZCBsb25nIHZhbHVlOwotCWNoYXIgKnJlc3Q7CiAJaW50IGVycjsKIAl1bnNpZ25lZCBjaGFyIG9sZF9zY3JvbGw7CiAKLQl2YWx1ZSA9IHNpbXBsZV9zdHJ0b3VsKGJ1ZiwgJnJlc3QsIDEwKTsKLQlpZiAoKnJlc3QgfHwgdmFsdWUgPiAxKQorCWlmIChzdHJpY3Rfc3RydG91bChidWYsIDEwLCAmdmFsdWUpIHx8IHZhbHVlID4gMSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlpZiAoYXRrYmQtPnNjcm9sbCAhPSB2YWx1ZSkgewpAQCAtMTMxMCwxNSArMTMwNiwxMyBAQAogewogCXN0cnVjdCBpbnB1dF9kZXYgKm9sZF9kZXYsICpuZXdfZGV2OwogCXVuc2lnbmVkIGxvbmcgdmFsdWU7Ci0JY2hhciAqcmVzdDsKIAlpbnQgZXJyOwogCXVuc2lnbmVkIGNoYXIgb2xkX3NldCwgb2xkX2V4dHJhOwogCiAJaWYgKCFhdGtiZC0+d3JpdGUpCiAJCXJldHVybiAtRUlPOwogCi0JdmFsdWUgPSBzaW1wbGVfc3RydG91bChidWYsICZyZXN0LCAxMCk7Ci0JaWYgKCpyZXN0IHx8ICh2YWx1ZSAhPSAyICYmIHZhbHVlICE9IDMpKQorCWlmIChzdHJpY3Rfc3RydG91bChidWYsIDEwLCAmdmFsdWUpIHx8ICh2YWx1ZSAhPSAyICYmIHZhbHVlICE9IDMpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWlmIChhdGtiZC0+c2V0ICE9IHZhbHVlKSB7CkBAIC0xMzYxLDE1ICsxMzU1LDEzIEBACiB7CiAJc3RydWN0IGlucHV0X2RldiAqb2xkX2RldiwgKm5ld19kZXY7CiAJdW5zaWduZWQgbG9uZyB2YWx1ZTsKLQljaGFyICpyZXN0OwogCWludCBlcnI7CiAJdW5zaWduZWQgY2hhciBvbGRfc29mdHJlcGVhdCwgb2xkX3NvZnRyYXc7CiAKIAlpZiAoIWF0a2JkLT53cml0ZSkKIAkJcmV0dXJuIC1FSU87CiAKLQl2YWx1ZSA9IHNpbXBsZV9zdHJ0b3VsKGJ1ZiwgJnJlc3QsIDEwKTsKLQlpZiAoKnJlc3QgfHwgdmFsdWUgPiAxKQorCWlmIChzdHJpY3Rfc3RydG91bChidWYsIDEwLCAmdmFsdWUpIHx8IHZhbHVlID4gMSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlpZiAoYXRrYmQtPnNvZnRyZXBlYXQgIT0gdmFsdWUpIHsKQEAgLTE0MTMsMTIgKzE0MDUsMTAgQEAKIHsKIAlzdHJ1Y3QgaW5wdXRfZGV2ICpvbGRfZGV2LCAqbmV3X2RldjsKIAl1bnNpZ25lZCBsb25nIHZhbHVlOwotCWNoYXIgKnJlc3Q7CiAJaW50IGVycjsKIAl1bnNpZ25lZCBjaGFyIG9sZF9zb2Z0cmF3OwogCi0JdmFsdWUgPSBzaW1wbGVfc3RydG91bChidWYsICZyZXN0LCAxMCk7Ci0JaWYgKCpyZXN0IHx8IHZhbHVlID4gMSkKKwlpZiAoc3RyaWN0X3N0cnRvdWwoYnVmLCAxMCwgJnZhbHVlKSB8fCB2YWx1ZSA+IDEpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJaWYgKGF0a2JkLT5zb2Z0cmF3ICE9IHZhbHVlKSB7CkBAIC0xNDYxLDEzICsxNDUxLDEzIEBACiAKIHN0YXRpYyBzdHJ1Y3QgZG1pX3N5c3RlbV9pZCBhdGtiZF9kbWlfcXVpcmtfdGFibGVbXSBfX2luaXRkYXRhID0gewogCXsKLQkJLmlkZW50ID0gIkRlbGwgTGF0aXR1ZGUgc2VyaWVzIiwKKwkJLmlkZW50ID0gIkRlbGwgTGFwdG9wIiwKIAkJLm1hdGNoZXMgPSB7CiAJCQlETUlfTUFUQ0goRE1JX1NZU19WRU5ET1IsICJEZWxsIEluYy4iKSwKLQkJCURNSV9NQVRDSChETUlfUFJPRFVDVF9OQU1FLCAiTGF0aXR1ZGUiKSwKKwkJCURNSV9NQVRDSChETUlfQ0hBU1NJU19UWVBFLCAiOCIpLCAvKiBQb3J0YWJsZSAqLwogCQl9LAogCQkuY2FsbGJhY2sgPSBhdGtiZF9zZXR1cF9maXh1cCwKLQkJLmRyaXZlcl9kYXRhID0gYXRrYmRfbGF0aXR1ZGVfa2V5bWFwX2ZpeHVwLAorCQkuZHJpdmVyX2RhdGEgPSBhdGtiZF9kZWxsX2xhcHRvcF9rZXltYXBfZml4dXAsCiAJfSwKIAl7CiAJCS5pZGVudCA9ICJIUCAyMTMzIiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvYmY1NHgta2V5cy5jIGIvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9iZjU0eC1rZXlzLmMKaW5kZXggZTM0OGNmYy4uMTkyODQwMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9iZjU0eC1rZXlzLmMKKysrIGIvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9iZjU0eC1rZXlzLmMKQEAgLTgsNyArOCw3IEBACiAgKgogICoKICAqIE1vZGlmaWVkOgotICogICAgICAgICAgICAgICBDb3B5cmlnaHQgMjAwNyBBbmFsb2cgRGV2aWNlcyBJbmMuCisgKiAgICAgICAgICAgICAgIENvcHlyaWdodCAyMDA3LTIwMDggQW5hbG9nIERldmljZXMgSW5jLgogICoKICAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCiAgKgpAQCAtODEsNiArODEsOSBAQAogCXVuc2lnbmVkIHNob3J0ICprZXljb2RlOwogCXN0cnVjdCB0aW1lcl9saXN0IHRpbWVyOwogCXVuc2lnbmVkIGludCBrZXl1cF90ZXN0X2ppZmZpZXM7CisJdW5zaWduZWQgc2hvcnQga3BhZF9tc2VsOworCXVuc2lnbmVkIHNob3J0IGtwYWRfcHJlc2NhbGU7CisJdW5zaWduZWQgc2hvcnQga3BhZF9jdGw7CiB9OwogCiBzdGF0aWMgaW5saW5lIGludCBiZmluX2twYWRfZmluZF9rZXkoc3RydWN0IGJmNTR4X2twYWQgKmJmNTR4X2twYWQsCkBAIC0zNjAsNiArMzYzLDEwIEBACiB7CiAJc3RydWN0IGJmNTR4X2twYWQgKmJmNTR4X2twYWQgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAorCWJmNTR4X2twYWQtPmtwYWRfbXNlbCA9IGJmaW5fcmVhZF9LUEFEX01TRUwoKTsKKwliZjU0eF9rcGFkLT5rcGFkX3ByZXNjYWxlID0gYmZpbl9yZWFkX0tQQURfUFJFU0NBTEUoKTsKKwliZjU0eF9rcGFkLT5rcGFkX2N0bCA9IGJmaW5fcmVhZF9LUEFEX0NUTCgpOworCiAJaWYgKGRldmljZV9tYXlfd2FrZXVwKCZwZGV2LT5kZXYpKQogCQllbmFibGVfaXJxX3dha2UoYmY1NHhfa3BhZC0+aXJxKTsKIApAQCAtMzcwLDYgKzM3NywxMCBAQAogewogCXN0cnVjdCBiZjU0eF9rcGFkICpiZjU0eF9rcGFkID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CiAKKwliZmluX3dyaXRlX0tQQURfTVNFTChiZjU0eF9rcGFkLT5rcGFkX21zZWwpOworCWJmaW5fd3JpdGVfS1BBRF9QUkVTQ0FMRShiZjU0eF9rcGFkLT5rcGFkX3ByZXNjYWxlKTsKKwliZmluX3dyaXRlX0tQQURfQ1RMKGJmNTR4X2twYWQtPmtwYWRfY3RsKTsKKwogCWlmIChkZXZpY2VfbWF5X3dha2V1cCgmcGRldi0+ZGV2KSkKIAkJZGlzYWJsZV9pcnFfd2FrZShiZjU0eF9rcGFkLT5pcnEpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L2tleWJvYXJkL2dwaW9fa2V5cy5jIGIvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9ncGlvX2tleXMuYwppbmRleCBlYzk2YjM2Li4wNWYzZjQzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L2tleWJvYXJkL2dwaW9fa2V5cy5jCisrKyBiL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvZ3Bpb19rZXlzLmMKQEAgLTM2LDkgKzM2LDEwIEBACiAJc3RydWN0IGdwaW9fYnV0dG9uX2RhdGEgZGF0YVswXTsKIH07CiAKLXN0YXRpYyB2b2lkIGdwaW9fa2V5c19yZXBvcnRfZXZlbnQoc3RydWN0IGdwaW9fa2V5c19idXR0b24gKmJ1dHRvbiwKLQkJCQkgICBzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dCkKK3N0YXRpYyB2b2lkIGdwaW9fa2V5c19yZXBvcnRfZXZlbnQoc3RydWN0IGdwaW9fYnV0dG9uX2RhdGEgKmJkYXRhKQogeworCXN0cnVjdCBncGlvX2tleXNfYnV0dG9uICpidXR0b24gPSBiZGF0YS0+YnV0dG9uOworCXN0cnVjdCBpbnB1dF9kZXYgKmlucHV0ID0gYmRhdGEtPmlucHV0OwogCXVuc2lnbmVkIGludCB0eXBlID0gYnV0dG9uLT50eXBlID86IEVWX0tFWTsKIAlpbnQgc3RhdGUgPSAoZ3Bpb19nZXRfdmFsdWUoYnV0dG9uLT5ncGlvKSA/IDEgOiAwKSBeIGJ1dHRvbi0+YWN0aXZlX2xvdzsKIApAQCAtNTAsMzQgKzUxLDIzIEBACiB7CiAJc3RydWN0IGdwaW9fYnV0dG9uX2RhdGEgKmRhdGEgPSAoc3RydWN0IGdwaW9fYnV0dG9uX2RhdGEgKilfZGF0YTsKIAotCWdwaW9fa2V5c19yZXBvcnRfZXZlbnQoZGF0YS0+YnV0dG9uLCBkYXRhLT5pbnB1dCk7CisJZ3Bpb19rZXlzX3JlcG9ydF9ldmVudChkYXRhKTsKIH0KIAogc3RhdGljIGlycXJldHVybl90IGdwaW9fa2V5c19pc3IoaW50IGlycSwgdm9pZCAqZGV2X2lkKQogewotCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSBkZXZfaWQ7Ci0Jc3RydWN0IGdwaW9fa2V5c19wbGF0Zm9ybV9kYXRhICpwZGF0YSA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOwotCXN0cnVjdCBncGlvX2tleXNfZHJ2ZGF0YSAqZGRhdGEgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKLQlpbnQgaTsKKwlzdHJ1Y3QgZ3Bpb19idXR0b25fZGF0YSAqYmRhdGEgPSBkZXZfaWQ7CisJc3RydWN0IGdwaW9fa2V5c19idXR0b24gKmJ1dHRvbiA9IGJkYXRhLT5idXR0b247CiAKLQlmb3IgKGkgPSAwOyBpIDwgcGRhdGEtPm5idXR0b25zOyBpKyspIHsKLQkJc3RydWN0IGdwaW9fa2V5c19idXR0b24gKmJ1dHRvbiA9ICZwZGF0YS0+YnV0dG9uc1tpXTsKKwlCVUdfT04oaXJxICE9IGdwaW9fdG9faXJxKGJ1dHRvbi0+Z3BpbykpOwogCi0JCWlmIChpcnEgPT0gZ3Bpb190b19pcnEoYnV0dG9uLT5ncGlvKSkgewotCQkJc3RydWN0IGdwaW9fYnV0dG9uX2RhdGEgKmJkYXRhID0gJmRkYXRhLT5kYXRhW2ldOworCWlmIChidXR0b24tPmRlYm91bmNlX2ludGVydmFsKQorCQltb2RfdGltZXIoJmJkYXRhLT50aW1lciwKKwkJCWppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKGJ1dHRvbi0+ZGVib3VuY2VfaW50ZXJ2YWwpKTsKKwllbHNlCisJCWdwaW9fa2V5c19yZXBvcnRfZXZlbnQoYmRhdGEpOwogCi0JCQlpZiAoYnV0dG9uLT5kZWJvdW5jZV9pbnRlcnZhbCkKLQkJCQltb2RfdGltZXIoJmJkYXRhLT50aW1lciwKLQkJCQkJICBqaWZmaWVzICsKLQkJCQkJICBtc2Vjc190b19qaWZmaWVzKGJ1dHRvbi0+ZGVib3VuY2VfaW50ZXJ2YWwpKTsKLQkJCWVsc2UKLQkJCQlncGlvX2tleXNfcmVwb3J0X2V2ZW50KGJ1dHRvbiwgYmRhdGEtPmlucHV0KTsKLQotCQkJcmV0dXJuIElSUV9IQU5ETEVEOwotCQl9Ci0JfQotCi0JcmV0dXJuIElSUV9OT05FOworCXJldHVybiBJUlFfSEFORExFRDsKIH0KIAogc3RhdGljIGludCBfX2RldmluaXQgZ3Bpb19rZXlzX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCkBAIC0xNTEsNyArMTQxLDcgQEAKIAkJCQkgICAgSVJRRl9TQU1QTEVfUkFORE9NIHwgSVJRRl9UUklHR0VSX1JJU0lORyB8CiAJCQkJCUlSUUZfVFJJR0dFUl9GQUxMSU5HLAogCQkJCSAgICBidXR0b24tPmRlc2MgPyBidXR0b24tPmRlc2MgOiAiZ3Bpb19rZXlzIiwKLQkJCQkgICAgcGRldik7CisJCQkJICAgIGJkYXRhKTsKIAkJaWYgKGVycm9yKSB7CiAJCQlwcl9lcnIoImdwaW8ta2V5czogVW5hYmxlIHRvIGNsYWltIGlycSAlZDsgZXJyb3IgJWRcbiIsCiAJCQkJaXJxLCBlcnJvcik7CkBAIC0xNzgsNyArMTY4LDcgQEAKIAogIGZhaWwyOgogCXdoaWxlICgtLWkgPj0gMCkgewotCQlmcmVlX2lycShncGlvX3RvX2lycShwZGF0YS0+YnV0dG9uc1tpXS5ncGlvKSwgcGRldik7CisJCWZyZWVfaXJxKGdwaW9fdG9faXJxKHBkYXRhLT5idXR0b25zW2ldLmdwaW8pLCAmZGRhdGEtPmRhdGFbaV0pOwogCQlpZiAocGRhdGEtPmJ1dHRvbnNbaV0uZGVib3VuY2VfaW50ZXJ2YWwpCiAJCQlkZWxfdGltZXJfc3luYygmZGRhdGEtPmRhdGFbaV0udGltZXIpOwogCQlncGlvX2ZyZWUocGRhdGEtPmJ1dHRvbnNbaV0uZ3Bpbyk7CkBAIC0yMDMsNyArMTkzLDcgQEAKIAogCWZvciAoaSA9IDA7IGkgPCBwZGF0YS0+bmJ1dHRvbnM7IGkrKykgewogCQlpbnQgaXJxID0gZ3Bpb190b19pcnEocGRhdGEtPmJ1dHRvbnNbaV0uZ3Bpbyk7Ci0JCWZyZWVfaXJxKGlycSwgcGRldik7CisJCWZyZWVfaXJxKGlycSwgJmRkYXRhLT5kYXRhW2ldKTsKIAkJaWYgKHBkYXRhLT5idXR0b25zW2ldLmRlYm91bmNlX2ludGVydmFsKQogCQkJZGVsX3RpbWVyX3N5bmMoJmRkYXRhLT5kYXRhW2ldLnRpbWVyKTsKIAkJZ3Bpb19mcmVlKHBkYXRhLT5idXR0b25zW2ldLmdwaW8pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9vbWFwLWtleXBhZC5jIGIvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9vbWFwLWtleXBhZC5jCmluZGV4IGRjZWE4N2EuLjY5ZTY3NGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvb21hcC1rZXlwYWQuYworKysgYi9kcml2ZXJzL2lucHV0L2tleWJvYXJkL29tYXAta2V5cGFkLmMKQEAgLTYyLDcgKzYyLDcgQEAKIAl1bnNpZ25lZCBpbnQgZGVib3VuY2U7CiB9OwogCi1ERUNMQVJFX1RBU0tMRVRfRElTQUJMRUQoa3BfdGFza2xldCwgb21hcF9rcF90YXNrbGV0LCAwKTsKK3N0YXRpYyBERUNMQVJFX1RBU0tMRVRfRElTQUJMRUQoa3BfdGFza2xldCwgb21hcF9rcF90YXNrbGV0LCAwKTsKIAogc3RhdGljIGludCAqa2V5bWFwOwogc3RhdGljIHVuc2lnbmVkIGludCAqcm93X2dwaW9zOwpAQCAtNzIsMTIgKzcyLDkgQEAKIHN0YXRpYyB2b2lkIHNldF9jb2xfZ3Bpb192YWwoc3RydWN0IG9tYXBfa3AgKm9tYXBfa3AsIHU4IHZhbHVlKQogewogCWludCBjb2w7Ci0JZm9yIChjb2wgPSAwOyBjb2wgPCBvbWFwX2twLT5jb2xzOyBjb2wrKykgewotCQlpZiAodmFsdWUgJiAoMSA8PCBjb2wpKQotCQkJb21hcF9zZXRfZ3Bpb19kYXRhb3V0KGNvbF9ncGlvc1tjb2xdLCAxKTsKLQkJZWxzZQotCQkJb21hcF9zZXRfZ3Bpb19kYXRhb3V0KGNvbF9ncGlvc1tjb2xdLCAwKTsKLQl9CisKKwlmb3IgKGNvbCA9IDA7IGNvbCA8IG9tYXBfa3AtPmNvbHM7IGNvbCsrKQorCQlncGlvX3NldF92YWx1ZShjb2xfZ3Bpb3NbY29sXSwgdmFsdWUgJiAoMSA8PCBjb2wpKTsKIH0KIAogc3RhdGljIHU4IGdldF9yb3dfZ3Bpb192YWwoc3RydWN0IG9tYXBfa3AgKm9tYXBfa3ApCkBAIC04Niw3ICs4Myw3IEBACiAJdTggdmFsdWUgPSAwOwogCiAJZm9yIChyb3cgPSAwOyByb3cgPCBvbWFwX2twLT5yb3dzOyByb3crKykgewotCQlpZiAob21hcF9nZXRfZ3Bpb19kYXRhaW4ocm93X2dwaW9zW3Jvd10pKQorCQlpZiAoZ3Bpb19nZXRfdmFsdWUocm93X2dwaW9zW3Jvd10pKQogCQkJdmFsdWUgfD0gKDEgPDwgcm93KTsKIAl9CiAJcmV0dXJuIHZhbHVlOwpAQCAtMzMzLDIzICszMzAsMjMgQEAKIAlpZiAoY3B1X2lzX29tYXAyNHh4KCkpIHsKIAkJLyogQ29sczogb3V0cHV0cyAqLwogCQlmb3IgKGNvbF9pZHggPSAwOyBjb2xfaWR4IDwgb21hcF9rcC0+Y29sczsgY29sX2lkeCsrKSB7Ci0JCQlpZiAob21hcF9yZXF1ZXN0X2dwaW8oY29sX2dwaW9zW2NvbF9pZHhdKSA8IDApIHsKKwkJCWlmIChncGlvX3JlcXVlc3QoY29sX2dwaW9zW2NvbF9pZHhdLCAib21hcF9rcF9jb2wiKSA8IDApIHsKIAkJCQlwcmludGsoS0VSTl9FUlIgIkZhaWxlZCB0byByZXF1ZXN0IgogCQkJCSAgICAgICAiR1BJTyVkIGZvciBrZXlwYWRcbiIsCiAJCQkJICAgICAgIGNvbF9ncGlvc1tjb2xfaWR4XSk7CiAJCQkJZ290byBlcnIxOwogCQkJfQotCQkJb21hcF9zZXRfZ3Bpb19kaXJlY3Rpb24oY29sX2dwaW9zW2NvbF9pZHhdLCAwKTsKKwkJCWdwaW9fZGlyZWN0aW9uX291dHB1dChjb2xfZ3Bpb3NbY29sX2lkeF0sIDApOwogCQl9CiAJCS8qIFJvd3M6IGlucHV0cyAqLwogCQlmb3IgKHJvd19pZHggPSAwOyByb3dfaWR4IDwgb21hcF9rcC0+cm93czsgcm93X2lkeCsrKSB7Ci0JCQlpZiAob21hcF9yZXF1ZXN0X2dwaW8ocm93X2dwaW9zW3Jvd19pZHhdKSA8IDApIHsKKwkJCWlmIChncGlvX3JlcXVlc3Qocm93X2dwaW9zW3Jvd19pZHhdLCAib21hcF9rcF9yb3ciKSA8IDApIHsKIAkJCQlwcmludGsoS0VSTl9FUlIgIkZhaWxlZCB0byByZXF1ZXN0IgogCQkJCSAgICAgICAiR1BJTyVkIGZvciBrZXlwYWRcbiIsCiAJCQkJICAgICAgIHJvd19ncGlvc1tyb3dfaWR4XSk7CiAJCQkJZ290byBlcnIyOwogCQkJfQotCQkJb21hcF9zZXRfZ3Bpb19kaXJlY3Rpb24ocm93X2dwaW9zW3Jvd19pZHhdLCAxKTsKKwkJCWdwaW9fZGlyZWN0aW9uX2lucHV0KHJvd19ncGlvc1tyb3dfaWR4XSk7CiAJCX0KIAl9IGVsc2UgewogCQljb2xfaWR4ID0gMDsKQEAgLTQxOCwxMCArNDE1LDEwIEBACiAJZGV2aWNlX3JlbW92ZV9maWxlKCZwZGV2LT5kZXYsICZkZXZfYXR0cl9lbmFibGUpOwogZXJyMjoKIAlmb3IgKGkgPSByb3dfaWR4IC0gMTsgaSA+PTA7IGktLSkKLQkJb21hcF9mcmVlX2dwaW8ocm93X2dwaW9zW2ldKTsKKwkJZ3Bpb19mcmVlKHJvd19ncGlvc1tpXSk7CiBlcnIxOgogCWZvciAoaSA9IGNvbF9pZHggLSAxOyBpID49MDsgaS0tKQotCQlvbWFwX2ZyZWVfZ3Bpbyhjb2xfZ3Bpb3NbaV0pOworCQlncGlvX2ZyZWUoY29sX2dwaW9zW2ldKTsKIAogCWtmcmVlKG9tYXBfa3ApOwogCWlucHV0X2ZyZWVfZGV2aWNlKGlucHV0X2Rldik7CkBAIC00MzgsOSArNDM1LDkgQEAKIAlpZiAoY3B1X2lzX29tYXAyNHh4KCkpIHsKIAkJaW50IGk7CiAJCWZvciAoaSA9IDA7IGkgPCBvbWFwX2twLT5jb2xzOyBpKyspCi0JCQlvbWFwX2ZyZWVfZ3Bpbyhjb2xfZ3Bpb3NbaV0pOworCQkJZ3Bpb19mcmVlKGNvbF9ncGlvc1tpXSk7CiAJCWZvciAoaSA9IDA7IGkgPCBvbWFwX2twLT5yb3dzOyBpKyspIHsKLQkJCW9tYXBfZnJlZV9ncGlvKHJvd19ncGlvc1tpXSk7CisJCQlncGlvX2ZyZWUocm93X2dwaW9zW2ldKTsKIAkJCWZyZWVfaXJxKE9NQVBfR1BJT19JUlEocm93X2dwaW9zW2ldKSwgMCk7CiAJCX0KIAl9IGVsc2UgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9taXNjL0tjb25maWcgYi9kcml2ZXJzL2lucHV0L21pc2MvS2NvbmZpZwppbmRleCBlOTliNzg4Li4xOTkwNTVkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L21pc2MvS2NvbmZpZworKysgYi9kcml2ZXJzL2lucHV0L21pc2MvS2NvbmZpZwpAQCAtMTgwLDYgKzE4MCwxOSBAQAogCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZSB3aWxsIGJlCiAJICBjYWxsZWQgeWVhbGluay4KIAorY29uZmlnIElOUFVUX0NNMTA5CisJdHJpc3RhdGUgIkMtTWVkaWEgQ00xMDkgVVNCIEkvTyBDb250cm9sbGVyIgorCWRlcGVuZHMgb24gRVhQRVJJTUVOVEFMCisJZGVwZW5kcyBvbiBVU0JfQVJDSF9IQVNfSENECisJc2VsZWN0IFVTQgorCWhlbHAKKwkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gZW5hYmxlIGtleWJvYXJkIGFuZCBidXp6ZXIgZnVuY3Rpb25zIG9mIHRoZQorCSAgQy1NZWRpYSBDTTEwOSB1c2IgcGhvbmVzLiBUaGUgYXVkaW8gcGFydCBpcyBlbmFibGVkIGJ5IHRoZSBnZW5lcmljCisJICB1c2Igc291bmQgZHJpdmVyLCBzbyB5b3UgbWlnaHQgd2FudCB0byBlbmFibGUgdGhhdCBhcyB3ZWxsLgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlIHdpbGwgYmUKKwkgIGNhbGxlZCBjbTEwOS4KKwogY29uZmlnIElOUFVUX1VJTlBVVAogCXRyaXN0YXRlICJVc2VyIGxldmVsIGRyaXZlciBzdXBwb3J0IgogCWhlbHAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvbWlzYy9NYWtlZmlsZSBiL2RyaXZlcnMvaW5wdXQvbWlzYy9NYWtlZmlsZQppbmRleCBmNDgwMDliLi5kN2RiMmFlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L21pc2MvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9pbnB1dC9taXNjL01ha2VmaWxlCkBAIC0xNiw2ICsxNiw3IEBACiBvYmotJChDT05GSUdfSU5QVVRfS0VZU1BBTl9SRU1PVEUpCSs9IGtleXNwYW5fcmVtb3RlLm8KIG9iai0kKENPTkZJR19JTlBVVF9QT1dFUk1BVEUpCQkrPSBwb3dlcm1hdGUubwogb2JqLSQoQ09ORklHX0lOUFVUX1lFQUxJTkspCQkrPSB5ZWFsaW5rLm8KK29iai0kKENPTkZJR19JTlBVVF9DTTEwOSkJCSs9IGNtMTA5Lm8KIG9iai0kKENPTkZJR19IUF9TRENfUlRDKQkJKz0gaHBfc2RjX3J0Yy5vCiBvYmotJChDT05GSUdfSU5QVVRfVUlOUFVUKQkJKz0gdWlucHV0Lm8KIG9iai0kKENPTkZJR19JTlBVVF9BUEFORUwpCQkrPSBhcGFuZWwubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9taXNjL2F0aV9yZW1vdGUuYyBiL2RyaXZlcnMvaW5wdXQvbWlzYy9hdGlfcmVtb3RlLmMKaW5kZXggZGViZmMxYS4uZTI5MGZkZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9taXNjL2F0aV9yZW1vdGUuYworKysgYi9kcml2ZXJzL2lucHV0L21pc2MvYXRpX3JlbW90ZS5jCkBAIC0yODUsNyArMjg1LDYgQEAKIH07CiAKIC8qIExvY2FsIGZ1bmN0aW9uIHByb3RvdHlwZXMgKi8KLXN0YXRpYyB2b2lkIGF0aV9yZW1vdGVfZHVtcAkJKHVuc2lnbmVkIGNoYXIgKmRhdGEsIHVuc2lnbmVkIGludCBhY3R1YWxfbGVuZ3RoKTsKIHN0YXRpYyBpbnQgYXRpX3JlbW90ZV9vcGVuCQkoc3RydWN0IGlucHV0X2RldiAqaW5wdXRkZXYpOwogc3RhdGljIHZvaWQgYXRpX3JlbW90ZV9jbG9zZQkJKHN0cnVjdCBpbnB1dF9kZXYgKmlucHV0ZGV2KTsKIHN0YXRpYyBpbnQgYXRpX3JlbW90ZV9zZW5kcGFja2V0CShzdHJ1Y3QgYXRpX3JlbW90ZSAqYXRpX3JlbW90ZSwgdTE2IGNtZCwgdW5zaWduZWQgY2hhciAqZGF0YSk7CkBAIC0zMDcsMTUgKzMwNiwxNiBAQAogLyoKICAqCWF0aV9yZW1vdGVfZHVtcF9pbnB1dAogICovCi1zdGF0aWMgdm9pZCBhdGlfcmVtb3RlX2R1bXAodW5zaWduZWQgY2hhciAqZGF0YSwgdW5zaWduZWQgaW50IGxlbikKK3N0YXRpYyB2b2lkIGF0aV9yZW1vdGVfZHVtcChzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGNoYXIgKmRhdGEsCisJCQkgICAgdW5zaWduZWQgaW50IGxlbikKIHsKIAlpZiAoKGxlbiA9PSAxKSAmJiAoZGF0YVswXSAhPSAodW5zaWduZWQgY2hhcikweGZmKSAmJiAoZGF0YVswXSAhPSAweDAwKSkKLQkJd2FybigiV2VpcmQgYnl0ZSAweCUwMngiLCBkYXRhWzBdKTsKKwkJZGV2X3dhcm4oZGV2LCAiV2VpcmQgYnl0ZSAweCUwMnhcbiIsIGRhdGFbMF0pOwogCWVsc2UgaWYgKGxlbiA9PSA0KQotCQl3YXJuKCJXZWlyZCBrZXkgJTAyeCAlMDJ4ICUwMnggJTAyeCIsCisJCWRldl93YXJuKGRldiwgIldlaXJkIGtleSAlMDJ4ICUwMnggJTAyeCAlMDJ4XG4iLAogCQkgICAgIGRhdGFbMF0sIGRhdGFbMV0sIGRhdGFbMl0sIGRhdGFbM10pOwogCWVsc2UKLQkJd2FybigiV2VpcmQgZGF0YSwgbGVuPSVkICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4IC4uLiIsCisJCWRldl93YXJuKGRldiwgIldlaXJkIGRhdGEsIGxlbj0lZCAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeCAuLi5cbiIsCiAJCSAgICAgbGVuLCBkYXRhWzBdLCBkYXRhWzFdLCBkYXRhWzJdLCBkYXRhWzNdLCBkYXRhWzRdLCBkYXRhWzVdKTsKIH0KIApAQCAtNDcwLDcgKzQ3MCw3IEBACiAJLyogRGVhbCB3aXRoIHN0cmFuZ2UgbG9va2luZyBpbnB1dHMgKi8KIAlpZiAoICh1cmItPmFjdHVhbF9sZW5ndGggIT0gNCkgfHwgKGRhdGFbMF0gIT0gMHgxNCkgfHwKIAkJKChkYXRhWzNdICYgMHgwZikgIT0gMHgwMCkgKSB7Ci0JCWF0aV9yZW1vdGVfZHVtcChkYXRhLCB1cmItPmFjdHVhbF9sZW5ndGgpOworCQlhdGlfcmVtb3RlX2R1bXAoJnVyYi0+ZGV2LT5kZXYsIGRhdGEsIHVyYi0+YWN0dWFsX2xlbmd0aCk7CiAJCXJldHVybjsKIAl9CiAKQEAgLTgxNCw3ICs4MTQsNyBAQAogCWF0aV9yZW1vdGUgPSB1c2JfZ2V0X2ludGZkYXRhKGludGVyZmFjZSk7CiAJdXNiX3NldF9pbnRmZGF0YShpbnRlcmZhY2UsIE5VTEwpOwogCWlmICghYXRpX3JlbW90ZSkgewotCQl3YXJuKCIlcyAtIG51bGwgZGV2aWNlP1xuIiwgX19mdW5jX18pOworCQlkZXZfd2FybigmaW50ZXJmYWNlLT5kZXYsICIlcyAtIG51bGwgZGV2aWNlP1xuIiwgX19mdW5jX18pOwogCQlyZXR1cm47CiAJfQogCkBAIC04MzQsOSArODM0LDExIEBACiAKIAlyZXN1bHQgPSB1c2JfcmVnaXN0ZXIoJmF0aV9yZW1vdGVfZHJpdmVyKTsKIAlpZiAocmVzdWx0KQotCQllcnIoInVzYl9yZWdpc3RlciBlcnJvciAjJWRcbiIsIHJlc3VsdCk7CisJCXByaW50ayhLRVJOX0VSUiBLQlVJTERfTU9ETkFNRQorCQkgICAgICAgIjogdXNiX3JlZ2lzdGVyIGVycm9yICMlZFxuIiwgcmVzdWx0KTsKIAllbHNlCi0JCWluZm8oIlJlZ2lzdGVyZWQgVVNCIGRyaXZlciAiIERSSVZFUl9ERVNDICIgdi4gIiBEUklWRVJfVkVSU0lPTik7CisJCXByaW50ayhLRVJOX0lORk8gS0JVSUxEX01PRE5BTUUgIjogIiBEUklWRVJfVkVSU0lPTiAiOiIKKwkJICAgICAgIERSSVZFUl9ERVNDICJcbiIpOwogCiAJcmV0dXJuIHJlc3VsdDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvbWlzYy9hdGlfcmVtb3RlMi5jIGIvZHJpdmVycy9pbnB1dC9taXNjL2F0aV9yZW1vdGUyLmMKaW5kZXggYTdmYWJhZi4uM2M5OTg4ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9taXNjL2F0aV9yZW1vdGUyLmMKKysrIGIvZHJpdmVycy9pbnB1dC9taXNjL2F0aV9yZW1vdGUyLmMKQEAgLTEsOCArMSw4IEBACiAvKgogICogYXRpX3JlbW90ZTIgLSBBVEkvUGhpbGlwcyBVU0IgUkYgcmVtb3RlIGRyaXZlcgogICoKLSAqIENvcHlyaWdodCAoQykgMjAwNSBWaWxsZSBTeXJqYWxhIDxzeXJqYWxhQHNjaS5maT4KLSAqIENvcHlyaWdodCAoQykgMjAwNyBQZXRlciBTdG9rZXMgPGxpbnV4QGRhZGVvcy5mcmVlc2VydmUuY28udWs+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwOCBWaWxsZSBTeXJqYWxhIDxzeXJqYWxhQHNjaS5maT4KKyAqIENvcHlyaWdodCAoQykgMjAwNy0yMDA4IFBldGVyIFN0b2tlcyA8bGludXhAZGFkZW9zLmNvLnVrPgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMgpAQCAtMTIsNyArMTIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3VzYi9pbnB1dC5oPgogCiAjZGVmaW5lIERSSVZFUl9ERVNDICAgICJBVEkvUGhpbGlwcyBVU0IgUkYgcmVtb3RlIGRyaXZlciIKLSNkZWZpbmUgRFJJVkVSX1ZFUlNJT04gIjAuMiIKKyNkZWZpbmUgRFJJVkVSX1ZFUlNJT04gIjAuMyIKIAogTU9EVUxFX0RFU0NSSVBUSU9OKERSSVZFUl9ERVNDKTsKIE1PRFVMRV9WRVJTSU9OKERSSVZFUl9WRVJTSU9OKTsKQEAgLTI3LDcgKzI3LDcgQEAKICAqIEEgcmVtb3RlJ3MgImNoYW5uZWwiIG1heSBiZSBhbHRlcmVkIGJ5IHByZXNzaW5nIGFuZCBob2xkaW5nIHRoZSAiUEMiIGJ1dHRvbiBmb3IKICAqIGFwcHJveGltYXRlbHkgMyBzZWNvbmRzLCBhZnRlciB3aGljaCB0aGUgYnV0dG9uIHdpbGwgc2xvd2x5IGZsYXNoIHRoZSBjb3VudCBvZiB0aGUKICAqIGN1cnJlbnRseSBjb25maWd1cmVkICJjaGFubmVsIiwgdXNpbmcgdGhlIG51bWVyaWMga2V5cGFkIGVudGVyIGEgbnVtYmVyIGJldHdlZW4gMSBhbmQKLSAqIDE2IGFuZCB0aGVuIHRoZSAiUEMiIGJ1dHRvbiBhZ2FpbiwgdGhlIGJ1dHRvbiB3aWxsIHNsb3dseSBmbGFzaCB0aGUgY291bnQgb2YgdGhlCisgKiAxNiBhbmQgdGhlbiBwcmVzcyB0aGUgIlBDIiBidXR0b24gYWdhaW4sIHRoZSBidXR0b24gd2lsbCBzbG93bHkgZmxhc2ggdGhlIGNvdW50IG9mIHRoZQogICogbmV3bHkgY29uZmlndXJlZCAiY2hhbm5lbCIuCiAgKi8KIApAQCAtNDUsOSArNDUsMjUgQEAKIH07CiBNT0RVTEVfREVWSUNFX1RBQkxFKHVzYiwgYXRpX3JlbW90ZTJfaWRfdGFibGUpOwogCi1zdGF0aWMgc3RydWN0IHsKLQlpbnQgaHdfY29kZTsKLQlpbnQga2V5X2NvZGU7CitzdGF0aWMgREVGSU5FX01VVEVYKGF0aV9yZW1vdGUyX211dGV4KTsKKworZW51bSB7CisJQVRJX1JFTU9URTJfT1BFTkVEID0gMHgxLAorCUFUSV9SRU1PVEUyX1NVU1BFTkRFRCA9IDB4MiwKK307CisKK2VudW0geworCUFUSV9SRU1PVEUyX0FVWDEsCisJQVRJX1JFTU9URTJfQVVYMiwKKwlBVElfUkVNT1RFMl9BVVgzLAorCUFUSV9SRU1PVEUyX0FVWDQsCisJQVRJX1JFTU9URTJfUEMsCisJQVRJX1JFTU9URTJfTU9ERVMsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHsKKwl1OCAgaHdfY29kZTsKKwl1MTYga2V5Y29kZTsKIH0gYXRpX3JlbW90ZTJfa2V5X3RhYmxlW10gPSB7CiAJeyAweDAwLCBLRVlfMCB9LAogCXsgMHgwMSwgS0VZXzEgfSwKQEAgLTczLDYgKzg5LDcgQEAKIAl7IDB4MzcsIEtFWV9SRUNPUkQgfSwKIAl7IDB4MzgsIEtFWV9EVkQgfSwKIAl7IDB4MzksIEtFWV9UViB9LAorCXsgMHgzZiwgS0VZX1BST0cxIH0sIC8qIEFVWDEtQVVYNCBhbmQgUEMgKi8KIAl7IDB4NTQsIEtFWV9NRU5VIH0sCiAJeyAweDU4LCBLRVlfVVAgfSwKIAl7IDB4NTksIEtFWV9ET1dOIH0sCkBAIC05MSwxNSArMTA4LDkgQEAKIAl7IDB4YTksIEJUTl9MRUZUIH0sCiAJeyAweGFhLCBCVE5fUklHSFQgfSwKIAl7IDB4YmUsIEtFWV9RVUVTVElPTiB9LAotCXsgMHhkNSwgS0VZX0ZST05UIH0sCiAJeyAweGQwLCBLRVlfRURJVCB9LAorCXsgMHhkNSwgS0VZX0ZST05UIH0sCiAJeyAweGY5LCBLRVlfSU5GTyB9LAotCXsgKDB4MDAgPDwgOCkgfCAweDNmLCBLRVlfUFJPRzEgfSwKLQl7ICgweDAxIDw8IDgpIHwgMHgzZiwgS0VZX1BST0cyIH0sCi0JeyAoMHgwMiA8PCA4KSB8IDB4M2YsIEtFWV9QUk9HMyB9LAotCXsgKDB4MDMgPDwgOCkgfCAweDNmLCBLRVlfUFJPRzQgfSwKLQl7ICgweDA0IDw8IDgpIHwgMHgzZiwgS0VZX1BDIH0sCi0JeyAwLCBLRVlfUkVTRVJWRUQgfQogfTsKIAogc3RydWN0IGF0aV9yZW1vdGUyIHsKQEAgLTExNyw0NiArMTI4LDEwNiBAQAogCiAJY2hhciBuYW1lWzY0XTsKIAljaGFyIHBoeXNbNjRdOworCisJLyogRWFjaCBtb2RlIChBVVgxLUFVWDQgYW5kIFBDKSBjYW4gaGF2ZSBhbiBpbmRlcGVuZGVudCBrZXltYXAuICovCisJdTE2IGtleWNvZGVbQVRJX1JFTU9URTJfTU9ERVNdW0FSUkFZX1NJWkUoYXRpX3JlbW90ZTJfa2V5X3RhYmxlKV07CisKKwl1bnNpZ25lZCBpbnQgZmxhZ3M7CiB9OwogCiBzdGF0aWMgaW50IGF0aV9yZW1vdGUyX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UsIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCk7CiBzdGF0aWMgdm9pZCBhdGlfcmVtb3RlMl9kaXNjb25uZWN0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UpOworc3RhdGljIGludCBhdGlfcmVtb3RlMl9zdXNwZW5kKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UsIHBtX21lc3NhZ2VfdCBtZXNzYWdlKTsKK3N0YXRpYyBpbnQgYXRpX3JlbW90ZTJfcmVzdW1lKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UpOwogCiBzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgYXRpX3JlbW90ZTJfZHJpdmVyID0gewogCS5uYW1lICAgICAgID0gImF0aV9yZW1vdGUyIiwKIAkucHJvYmUgICAgICA9IGF0aV9yZW1vdGUyX3Byb2JlLAogCS5kaXNjb25uZWN0ID0gYXRpX3JlbW90ZTJfZGlzY29ubmVjdCwKIAkuaWRfdGFibGUgICA9IGF0aV9yZW1vdGUyX2lkX3RhYmxlLAorCS5zdXNwZW5kICAgID0gYXRpX3JlbW90ZTJfc3VzcGVuZCwKKwkucmVzdW1lICAgICA9IGF0aV9yZW1vdGUyX3Jlc3VtZSwKKwkuc3VwcG9ydHNfYXV0b3N1c3BlbmQgPSAxLAogfTsKIAotc3RhdGljIGludCBhdGlfcmVtb3RlMl9vcGVuKHN0cnVjdCBpbnB1dF9kZXYgKmlkZXYpCitzdGF0aWMgaW50IGF0aV9yZW1vdGUyX3N1Ym1pdF91cmJzKHN0cnVjdCBhdGlfcmVtb3RlMiAqYXIyKQogewotCXN0cnVjdCBhdGlfcmVtb3RlMiAqYXIyID0gaW5wdXRfZ2V0X2RydmRhdGEoaWRldik7CiAJaW50IHI7CiAKIAlyID0gdXNiX3N1Ym1pdF91cmIoYXIyLT51cmJbMF0sIEdGUF9LRVJORUwpOwogCWlmIChyKSB7CiAJCWRldl9lcnIoJmFyMi0+aW50ZlswXS0+ZGV2LAotCQkJIiVzOiB1c2Jfc3VibWl0X3VyYigpID0gJWRcbiIsIF9fZnVuY19fLCByKTsKKwkJCSIlcygpOiB1c2Jfc3VibWl0X3VyYigpID0gJWRcbiIsIF9fZnVuY19fLCByKTsKIAkJcmV0dXJuIHI7CiAJfQogCXIgPSB1c2Jfc3VibWl0X3VyYihhcjItPnVyYlsxXSwgR0ZQX0tFUk5FTCk7CiAJaWYgKHIpIHsKIAkJdXNiX2tpbGxfdXJiKGFyMi0+dXJiWzBdKTsKIAkJZGV2X2VycigmYXIyLT5pbnRmWzFdLT5kZXYsCi0JCQkiJXM6IHVzYl9zdWJtaXRfdXJiKCkgPSAlZFxuIiwgX19mdW5jX18sIHIpOworCQkJIiVzKCk6IHVzYl9zdWJtaXRfdXJiKCkgPSAlZFxuIiwgX19mdW5jX18sIHIpOwogCQlyZXR1cm4gcjsKIAl9CiAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIHZvaWQgYXRpX3JlbW90ZTJfa2lsbF91cmJzKHN0cnVjdCBhdGlfcmVtb3RlMiAqYXIyKQoreworCXVzYl9raWxsX3VyYihhcjItPnVyYlsxXSk7CisJdXNiX2tpbGxfdXJiKGFyMi0+dXJiWzBdKTsKK30KKworc3RhdGljIGludCBhdGlfcmVtb3RlMl9vcGVuKHN0cnVjdCBpbnB1dF9kZXYgKmlkZXYpCit7CisJc3RydWN0IGF0aV9yZW1vdGUyICphcjIgPSBpbnB1dF9nZXRfZHJ2ZGF0YShpZGV2KTsKKwlpbnQgcjsKKworCWRldl9kYmcoJmFyMi0+aW50ZlswXS0+ZGV2LCAiJXMoKVxuIiwgX19mdW5jX18pOworCisJciA9IHVzYl9hdXRvcG1fZ2V0X2ludGVyZmFjZShhcjItPmludGZbMF0pOworCWlmIChyKSB7CisJCWRldl9lcnIoJmFyMi0+aW50ZlswXS0+ZGV2LAorCQkJIiVzKCk6IHVzYl9hdXRvcG1fZ2V0X2ludGVyZmFjZSgpID0gJWRcbiIsIF9fZnVuY19fLCByKTsKKwkJZ290byBmYWlsMTsKKwl9CisKKwltdXRleF9sb2NrKCZhdGlfcmVtb3RlMl9tdXRleCk7CisKKwlpZiAoIShhcjItPmZsYWdzICYgQVRJX1JFTU9URTJfU1VTUEVOREVEKSkgeworCQlyID0gYXRpX3JlbW90ZTJfc3VibWl0X3VyYnMoYXIyKTsKKwkJaWYgKHIpCisJCQlnb3RvIGZhaWwyOworCX0KKworCWFyMi0+ZmxhZ3MgfD0gQVRJX1JFTU9URTJfT1BFTkVEOworCisJbXV0ZXhfdW5sb2NrKCZhdGlfcmVtb3RlMl9tdXRleCk7CisKKwl1c2JfYXV0b3BtX3B1dF9pbnRlcmZhY2UoYXIyLT5pbnRmWzBdKTsKKworCXJldHVybiAwOworCisgZmFpbDI6CisJbXV0ZXhfdW5sb2NrKCZhdGlfcmVtb3RlMl9tdXRleCk7CisJdXNiX2F1dG9wbV9wdXRfaW50ZXJmYWNlKGFyMi0+aW50ZlswXSk7CisgZmFpbDE6CisJcmV0dXJuIHI7Cit9CisKIHN0YXRpYyB2b2lkIGF0aV9yZW1vdGUyX2Nsb3NlKHN0cnVjdCBpbnB1dF9kZXYgKmlkZXYpCiB7CiAJc3RydWN0IGF0aV9yZW1vdGUyICphcjIgPSBpbnB1dF9nZXRfZHJ2ZGF0YShpZGV2KTsKIAotCXVzYl9raWxsX3VyYihhcjItPnVyYlswXSk7Ci0JdXNiX2tpbGxfdXJiKGFyMi0+dXJiWzFdKTsKKwlkZXZfZGJnKCZhcjItPmludGZbMF0tPmRldiwgIiVzKClcbiIsIF9fZnVuY19fKTsKKworCW11dGV4X2xvY2soJmF0aV9yZW1vdGUyX211dGV4KTsKKworCWlmICghKGFyMi0+ZmxhZ3MgJiBBVElfUkVNT1RFMl9TVVNQRU5ERUQpKQorCQlhdGlfcmVtb3RlMl9raWxsX3VyYnMoYXIyKTsKKworCWFyMi0+ZmxhZ3MgJj0gfkFUSV9SRU1PVEUyX09QRU5FRDsKKworCW11dGV4X3VubG9jaygmYXRpX3JlbW90ZTJfbXV0ZXgpOwogfQogCiBzdGF0aWMgdm9pZCBhdGlfcmVtb3RlMl9pbnB1dF9tb3VzZShzdHJ1Y3QgYXRpX3JlbW90ZTIgKmFyMikKQEAgLTE3Miw3ICsyNDMsNyBAQAogCiAJbW9kZSA9IGRhdGFbMF0gJiAweDBGOwogCi0JaWYgKG1vZGUgPiA0KSB7CisJaWYgKG1vZGUgPiBBVElfUkVNT1RFMl9QQykgewogCQlkZXZfZXJyKCZhcjItPmludGZbMF0tPmRldiwKIAkJCSJVbmtub3duIG1vZGUgYnl0ZSAoJTAyeCAlMDJ4ICUwMnggJTAyeClcbiIsCiAJCQlkYXRhWzNdLCBkYXRhWzJdLCBkYXRhWzFdLCBkYXRhWzBdKTsKQEAgLTE5MSw3ICsyNjIsNyBAQAogewogCWludCBpOwogCi0JZm9yIChpID0gMDsgYXRpX3JlbW90ZTJfa2V5X3RhYmxlW2ldLmtleV9jb2RlICE9IEtFWV9SRVNFUlZFRDsgaSsrKQorCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGF0aV9yZW1vdGUyX2tleV90YWJsZSk7IGkrKykKIAkJaWYgKGF0aV9yZW1vdGUyX2tleV90YWJsZVtpXS5od19jb2RlID09IGh3X2NvZGUpCiAJCQlyZXR1cm4gaTsKIApAQCAtMjExLDcgKzI4Miw3IEBACiAKIAltb2RlID0gZGF0YVswXSAmIDB4MEY7CiAKLQlpZiAobW9kZSA+IDQpIHsKKwlpZiAobW9kZSA+IEFUSV9SRU1PVEUyX1BDKSB7CiAJCWRldl9lcnIoJmFyMi0+aW50ZlsxXS0+ZGV2LAogCQkJIlVua25vd24gbW9kZSBieXRlICglMDJ4ICUwMnggJTAyeCAlMDJ4KVxuIiwKIAkJCWRhdGFbM10sIGRhdGFbMl0sIGRhdGFbMV0sIGRhdGFbMF0pOwpAQCAtMjE5LDEwICsyOTAsNiBAQAogCX0KIAogCWh3X2NvZGUgPSBkYXRhWzJdOwotCS8qCi0JICogTW9kZSBrZXlzIChBVVgxLUFVWDQsIFBDKSBhbGwgZ2VuZXJhdGUgdGhlIHNhbWUgY29kZSBieXRlLgotCSAqIFVzZSB0aGUgbW9kZSBieXRlIHRvIGZpZ3VyZSBvdXQgd2hpY2ggb25lIHdhcyBwcmVzc2VkLgotCSAqLwogCWlmIChod19jb2RlID09IDB4M2YpIHsKIAkJLyoKIAkJICogRm9yIHNvbWUgaW5jb21wcmVoZW5zaWJsZSByZWFzb24gdGhlIG1vdXNlIHBhZCBnZW5lcmF0ZXMKQEAgLTIzNiw4ICszMDMsNiBAQAogCiAJCWlmIChkYXRhWzFdID09IDApCiAJCQlhcjItPm1vZGUgPSBtb2RlOwotCi0JCWh3X2NvZGUgfD0gbW9kZSA8PCA4OwogCX0KIAogCWlmICghKCgxIDw8IG1vZGUpICYgbW9kZV9tYXNrKSkKQEAgLTI2MCw4ICszMjUsOCBAQAogCWNhc2UgMjoJLyogcmVwZWF0ICovCiAKIAkJLyogTm8gcmVwZWF0IGZvciBtb3VzZSBidXR0b25zLiAqLwotCQlpZiAoYXRpX3JlbW90ZTJfa2V5X3RhYmxlW2luZGV4XS5rZXlfY29kZSA9PSBCVE5fTEVGVCB8fAotCQkgICAgYXRpX3JlbW90ZTJfa2V5X3RhYmxlW2luZGV4XS5rZXlfY29kZSA9PSBCVE5fUklHSFQpCisJCWlmIChhcjItPmtleWNvZGVbbW9kZV1baW5kZXhdID09IEJUTl9MRUZUIHx8CisJCSAgICBhcjItPmtleWNvZGVbbW9kZV1baW5kZXhdID09IEJUTl9SSUdIVCkKIAkJCXJldHVybjsKIAogCQlpZiAoIXRpbWVfYWZ0ZXJfZXEoamlmZmllcywgYXIyLT5qaWZmaWVzKSkKQEAgLTI3Niw3ICszNDEsNyBAQAogCQlyZXR1cm47CiAJfQogCi0JaW5wdXRfZXZlbnQoaWRldiwgRVZfS0VZLCBhdGlfcmVtb3RlMl9rZXlfdGFibGVbaW5kZXhdLmtleV9jb2RlLCBkYXRhWzFdKTsKKwlpbnB1dF9ldmVudChpZGV2LCBFVl9LRVksIGFyMi0+a2V5Y29kZVttb2RlXVtpbmRleF0sIGRhdGFbMV0pOwogCWlucHV0X3N5bmMoaWRldik7CiB9CiAKQEAgLTI4Nyw2ICszNTIsNyBAQAogCiAJc3dpdGNoICh1cmItPnN0YXR1cykgewogCWNhc2UgMDoKKwkJdXNiX21hcmtfbGFzdF9idXN5KGFyMi0+dWRldik7CiAJCWF0aV9yZW1vdGUyX2lucHV0X21vdXNlKGFyMik7CiAJCWJyZWFrOwogCWNhc2UgLUVOT0VOVDoKQEAgLTI5Nyw2ICszNjMsNyBAQAogCQkJIiVzKCk6IHVyYiBzdGF0dXMgPSAlZFxuIiwgX19mdW5jX18sIHVyYi0+c3RhdHVzKTsKIAkJcmV0dXJuOwogCWRlZmF1bHQ6CisJCXVzYl9tYXJrX2xhc3RfYnVzeShhcjItPnVkZXYpOwogCQlkZXZfZXJyKCZhcjItPmludGZbMF0tPmRldiwKIAkJCSIlcygpOiB1cmIgc3RhdHVzID0gJWRcbiIsIF9fZnVuY19fLCB1cmItPnN0YXR1cyk7CiAJfQpAQCAtMzE0LDYgKzM4MSw3IEBACiAKIAlzd2l0Y2ggKHVyYi0+c3RhdHVzKSB7CiAJY2FzZSAwOgorCQl1c2JfbWFya19sYXN0X2J1c3koYXIyLT51ZGV2KTsKIAkJYXRpX3JlbW90ZTJfaW5wdXRfa2V5KGFyMik7CiAJCWJyZWFrOwogCWNhc2UgLUVOT0VOVDoKQEAgLTMyNCw2ICszOTIsNyBAQAogCQkJIiVzKCk6IHVyYiBzdGF0dXMgPSAlZFxuIiwgX19mdW5jX18sIHVyYi0+c3RhdHVzKTsKIAkJcmV0dXJuOwogCWRlZmF1bHQ6CisJCXVzYl9tYXJrX2xhc3RfYnVzeShhcjItPnVkZXYpOwogCQlkZXZfZXJyKCZhcjItPmludGZbMV0tPmRldiwKIAkJCSIlcygpOiB1cmIgc3RhdHVzID0gJWRcbiIsIF9fZnVuY19fLCB1cmItPnN0YXR1cyk7CiAJfQpAQCAtMzM0LDEwICs0MDMsNjAgQEAKIAkJCSIlcygpOiB1c2Jfc3VibWl0X3VyYigpID0gJWRcbiIsIF9fZnVuY19fLCByKTsKIH0KIAorc3RhdGljIGludCBhdGlfcmVtb3RlMl9nZXRrZXljb2RlKHN0cnVjdCBpbnB1dF9kZXYgKmlkZXYsCisJCQkJICBpbnQgc2NhbmNvZGUsIGludCAqa2V5Y29kZSkKK3sKKwlzdHJ1Y3QgYXRpX3JlbW90ZTIgKmFyMiA9IGlucHV0X2dldF9kcnZkYXRhKGlkZXYpOworCWludCBpbmRleCwgbW9kZTsKKworCW1vZGUgPSBzY2FuY29kZSA+PiA4OworCWlmIChtb2RlID4gQVRJX1JFTU9URTJfUEMgfHwgISgoMSA8PCBtb2RlKSAmIG1vZGVfbWFzaykpCisJCXJldHVybiAtRUlOVkFMOworCisJaW5kZXggPSBhdGlfcmVtb3RlMl9sb29rdXAoc2NhbmNvZGUgJiAweEZGKTsKKwlpZiAoaW5kZXggPCAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCSprZXljb2RlID0gYXIyLT5rZXljb2RlW21vZGVdW2luZGV4XTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhdGlfcmVtb3RlMl9zZXRrZXljb2RlKHN0cnVjdCBpbnB1dF9kZXYgKmlkZXYsIGludCBzY2FuY29kZSwgaW50IGtleWNvZGUpCit7CisJc3RydWN0IGF0aV9yZW1vdGUyICphcjIgPSBpbnB1dF9nZXRfZHJ2ZGF0YShpZGV2KTsKKwlpbnQgaW5kZXgsIG1vZGUsIG9sZF9rZXljb2RlOworCisJbW9kZSA9IHNjYW5jb2RlID4+IDg7CisJaWYgKG1vZGUgPiBBVElfUkVNT1RFMl9QQyB8fCAhKCgxIDw8IG1vZGUpICYgbW9kZV9tYXNrKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpbmRleCA9IGF0aV9yZW1vdGUyX2xvb2t1cChzY2FuY29kZSAmIDB4RkYpOworCWlmIChpbmRleCA8IDApCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKGtleWNvZGUgPCBLRVlfUkVTRVJWRUQgfHwga2V5Y29kZSA+IEtFWV9NQVgpCisJCXJldHVybiAtRUlOVkFMOworCisJb2xkX2tleWNvZGUgPSBhcjItPmtleWNvZGVbbW9kZV1baW5kZXhdOworCWFyMi0+a2V5Y29kZVttb2RlXVtpbmRleF0gPSBrZXljb2RlOworCXNldF9iaXQoa2V5Y29kZSwgaWRldi0+a2V5Yml0KTsKKworCWZvciAobW9kZSA9IDA7IG1vZGUgPCBBVElfUkVNT1RFMl9NT0RFUzsgbW9kZSsrKSB7CisJCWZvciAoaW5kZXggPSAwOyBpbmRleCA8IEFSUkFZX1NJWkUoYXRpX3JlbW90ZTJfa2V5X3RhYmxlKTsgaW5kZXgrKykgeworCQkJaWYgKGFyMi0+a2V5Y29kZVttb2RlXVtpbmRleF0gPT0gb2xkX2tleWNvZGUpCisJCQkJcmV0dXJuIDA7CisJCX0KKwl9CisKKwljbGVhcl9iaXQob2xkX2tleWNvZGUsIGlkZXYtPmtleWJpdCk7CisKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGludCBhdGlfcmVtb3RlMl9pbnB1dF9pbml0KHN0cnVjdCBhdGlfcmVtb3RlMiAqYXIyKQogewogCXN0cnVjdCBpbnB1dF9kZXYgKmlkZXY7Ci0JaW50IGksIHJldHZhbDsKKwlpbnQgaW5kZXgsIG1vZGUsIHJldHZhbDsKIAogCWlkZXYgPSBpbnB1dF9hbGxvY2F0ZV9kZXZpY2UoKTsKIAlpZiAoIWlkZXYpCkBAIC0zNTAsOCArNDY5LDI2IEBACiAJaWRldi0+a2V5Yml0W0JJVF9XT1JEKEJUTl9NT1VTRSldID0gQklUX01BU0soQlROX0xFRlQpIHwKIAkJQklUX01BU0soQlROX1JJR0hUKTsKIAlpZGV2LT5yZWxiaXRbMF0gPSBCSVRfTUFTSyhSRUxfWCkgfCBCSVRfTUFTSyhSRUxfWSk7Ci0JZm9yIChpID0gMDsgYXRpX3JlbW90ZTJfa2V5X3RhYmxlW2ldLmtleV9jb2RlICE9IEtFWV9SRVNFUlZFRDsgaSsrKQotCQlzZXRfYml0KGF0aV9yZW1vdGUyX2tleV90YWJsZVtpXS5rZXlfY29kZSwgaWRldi0+a2V5Yml0KTsKKworCWZvciAobW9kZSA9IDA7IG1vZGUgPCBBVElfUkVNT1RFMl9NT0RFUzsgbW9kZSsrKSB7CisJCWZvciAoaW5kZXggPSAwOyBpbmRleCA8IEFSUkFZX1NJWkUoYXRpX3JlbW90ZTJfa2V5X3RhYmxlKTsgaW5kZXgrKykgeworCQkJYXIyLT5rZXljb2RlW21vZGVdW2luZGV4XSA9IGF0aV9yZW1vdGUyX2tleV90YWJsZVtpbmRleF0ua2V5Y29kZTsKKwkJCXNldF9iaXQoYXIyLT5rZXljb2RlW21vZGVdW2luZGV4XSwgaWRldi0+a2V5Yml0KTsKKwkJfQorCX0KKworCS8qIEFVWDEtQVVYNCBhbmQgUEMgZ2VuZXJhdGUgdGhlIHNhbWUgc2NhbmNvZGUuICovCisJaW5kZXggPSBhdGlfcmVtb3RlMl9sb29rdXAoMHgzZik7CisJYXIyLT5rZXljb2RlW0FUSV9SRU1PVEUyX0FVWDFdW2luZGV4XSA9IEtFWV9QUk9HMTsKKwlhcjItPmtleWNvZGVbQVRJX1JFTU9URTJfQVVYMl1baW5kZXhdID0gS0VZX1BST0cyOworCWFyMi0+a2V5Y29kZVtBVElfUkVNT1RFMl9BVVgzXVtpbmRleF0gPSBLRVlfUFJPRzM7CisJYXIyLT5rZXljb2RlW0FUSV9SRU1PVEUyX0FVWDRdW2luZGV4XSA9IEtFWV9QUk9HNDsKKwlhcjItPmtleWNvZGVbQVRJX1JFTU9URTJfUENdW2luZGV4XSA9IEtFWV9QQzsKKwlzZXRfYml0KEtFWV9QUk9HMSwgaWRldi0+a2V5Yml0KTsKKwlzZXRfYml0KEtFWV9QUk9HMiwgaWRldi0+a2V5Yml0KTsKKwlzZXRfYml0KEtFWV9QUk9HMywgaWRldi0+a2V5Yml0KTsKKwlzZXRfYml0KEtFWV9QUk9HNCwgaWRldi0+a2V5Yml0KTsKKwlzZXRfYml0KEtFWV9QQywgaWRldi0+a2V5Yml0KTsKIAogCWlkZXYtPnJlcFtSRVBfREVMQVldICA9IDI1MDsKIAlpZGV2LT5yZXBbUkVQX1BFUklPRF0gPSAzMzsKQEAgLTM1OSw2ICs0OTYsOSBAQAogCWlkZXYtPm9wZW4gPSBhdGlfcmVtb3RlMl9vcGVuOwogCWlkZXYtPmNsb3NlID0gYXRpX3JlbW90ZTJfY2xvc2U7CiAKKwlpZGV2LT5nZXRrZXljb2RlID0gYXRpX3JlbW90ZTJfZ2V0a2V5Y29kZTsKKwlpZGV2LT5zZXRrZXljb2RlID0gYXRpX3JlbW90ZTJfc2V0a2V5Y29kZTsKKwogCWlkZXYtPm5hbWUgPSBhcjItPm5hbWU7CiAJaWRldi0+cGh5cyA9IGFyMi0+cGh5czsKIApAQCAtNDkwLDYgKzYzMCw4IEBACiAKIAl1c2Jfc2V0X2ludGZkYXRhKGludGVyZmFjZSwgYXIyKTsKIAorCWludGVyZmFjZS0+bmVlZHNfcmVtb3RlX3dha2V1cCA9IDE7CisKIAlyZXR1cm4gMDsKIAogIGZhaWwyOgpAQCAtNTIyLDYgKzY2NCw1NyBAQAogCWtmcmVlKGFyMik7CiB9CiAKK3N0YXRpYyBpbnQgYXRpX3JlbW90ZTJfc3VzcGVuZChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlLAorCQkJICAgICAgIHBtX21lc3NhZ2VfdCBtZXNzYWdlKQoreworCXN0cnVjdCBhdGlfcmVtb3RlMiAqYXIyOworCXN0cnVjdCB1c2JfaG9zdF9pbnRlcmZhY2UgKmFsdCA9IGludGVyZmFjZS0+Y3VyX2FsdHNldHRpbmc7CisKKwlpZiAoYWx0LT5kZXNjLmJJbnRlcmZhY2VOdW1iZXIpCisJCXJldHVybiAwOworCisJYXIyID0gdXNiX2dldF9pbnRmZGF0YShpbnRlcmZhY2UpOworCisJZGV2X2RiZygmYXIyLT5pbnRmWzBdLT5kZXYsICIlcygpXG4iLCBfX2Z1bmNfXyk7CisKKwltdXRleF9sb2NrKCZhdGlfcmVtb3RlMl9tdXRleCk7CisKKwlpZiAoYXIyLT5mbGFncyAmIEFUSV9SRU1PVEUyX09QRU5FRCkKKwkJYXRpX3JlbW90ZTJfa2lsbF91cmJzKGFyMik7CisKKwlhcjItPmZsYWdzIHw9IEFUSV9SRU1PVEUyX1NVU1BFTkRFRDsKKworCW11dGV4X3VubG9jaygmYXRpX3JlbW90ZTJfbXV0ZXgpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYXRpX3JlbW90ZTJfcmVzdW1lKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UpCit7CisJc3RydWN0IGF0aV9yZW1vdGUyICphcjI7CisJc3RydWN0IHVzYl9ob3N0X2ludGVyZmFjZSAqYWx0ID0gaW50ZXJmYWNlLT5jdXJfYWx0c2V0dGluZzsKKwlpbnQgciA9IDA7CisKKwlpZiAoYWx0LT5kZXNjLmJJbnRlcmZhY2VOdW1iZXIpCisJCXJldHVybiAwOworCisJYXIyID0gdXNiX2dldF9pbnRmZGF0YShpbnRlcmZhY2UpOworCisJZGV2X2RiZygmYXIyLT5pbnRmWzBdLT5kZXYsICIlcygpXG4iLCBfX2Z1bmNfXyk7CisKKwltdXRleF9sb2NrKCZhdGlfcmVtb3RlMl9tdXRleCk7CisKKwlpZiAoYXIyLT5mbGFncyAmIEFUSV9SRU1PVEUyX09QRU5FRCkKKwkJciA9IGF0aV9yZW1vdGUyX3N1Ym1pdF91cmJzKGFyMik7CisKKwlpZiAoIXIpCisJCWFyMi0+ZmxhZ3MgJj0gfkFUSV9SRU1PVEUyX1NVU1BFTkRFRDsKKworCW11dGV4X3VubG9jaygmYXRpX3JlbW90ZTJfbXV0ZXgpOworCisJcmV0dXJuIHI7Cit9CisKIHN0YXRpYyBpbnQgX19pbml0IGF0aV9yZW1vdGUyX2luaXQodm9pZCkKIHsKIAlpbnQgcjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvbWlzYy9jbTEwOS5jIGIvZHJpdmVycy9pbnB1dC9taXNjL2NtMTA5LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmNlMTYwZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvaW5wdXQvbWlzYy9jbTEwOS5jCkBAIC0wLDAgKzEsODgyIEBACisvKgorICogRHJpdmVyIGZvciB0aGUgVm9JUCBVU0IgcGhvbmVzIHdpdGggQ00xMDkgY2hpcHNldHMuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA3IC0gMjAwOCBBbGZyZWQgRS4gSGVnZ2VzdGFkIDxhZWhAZGIub3JnPgorICoKKyAqCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqCW1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKglwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgdmVyc2lvbiAyLgorICovCisKKy8qCisgKiAgIFRlc3RlZCBkZXZpY2VzOgorICoJLSBLb211bmlrYXRlIEtJUDEwMDAKKyAqCS0gR2VuaXVzIEctdGFsaworICoJLSBBbGxpZWQtVGVsZXNpcyBDb3JlZ2EgVVNCUEgwMQorICoJLSAuLi4KKyAqCisgKiBUaGlzIGRyaXZlciBpcyBiYXNlZCBvbiB0aGUgeWVhbGluay5jIGRyaXZlcgorICoKKyAqIFRoYW5rcyB0bzoKKyAqICAgLSBBdXRob3JzIG9mIHllYWxpbmsuYworICogICAtIFRob21hcyBSZWl0bWF5cgorICogICAtIE9saXZlciBOZXVrdW0gZm9yIGdvb2QgcmV2aWV3IGNvbW1lbnRzIGFuZCBjb2RlCisgKiAgIC0gU2hhdW4gSmFja21hbiA8c2phY2ttYW5AZ21haWwuY29tPiBmb3IgR2VuaXVzIEctdGFsayBrZXltYXAKKyAqICAgLSBEbWl0cnkgVG9yb2tob3YgZm9yIHZhbHVhYmxlIGlucHV0IGFuZCByZXZpZXcKKyAqCisgKiBUb2RvOgorICogICAtIFJlYWQvd3JpdGUgRUVQUk9NCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KKyNpbmNsdWRlIDxsaW51eC9yd3NlbS5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi9pbnB1dC5oPgorCisjZGVmaW5lIERSSVZFUl9WRVJTSU9OICIyMDA4MDgwNSIKKyNkZWZpbmUgRFJJVkVSX0FVVEhPUiAgIkFsZnJlZCBFLiBIZWdnZXN0YWQiCisjZGVmaW5lIERSSVZFUl9ERVNDICAgICJDTTEwOSBwaG9uZSBkcml2ZXIiCisKK3N0YXRpYyBjaGFyICpwaG9uZSA9ICJraXAxMDAwIjsKK21vZHVsZV9wYXJhbShwaG9uZSwgY2hhcnAsIFNfSVJVU1IpOworTU9EVUxFX1BBUk1fREVTQyhwaG9uZSwgIlBob25lIG5hbWUge2tpcDEwMDAsIGd0YWxrLCB1c2JwaDAxfSIpOworCitlbnVtIHsKKwkvKiBISUQgUmVnaXN0ZXJzICovCisJSElEX0lSMCA9IDB4MDAsIC8qIFJlY29yZC9QbGF5YmFjay1tdXRlIGJ1dHRvbiwgVm9sdW1lIHVwL2Rvd24gICovCisJSElEX0lSMSA9IDB4MDEsIC8qIEdQSSwgZ2VuZXJpYyByZWdpc3RlcnMgb3IgRUVQUk9NX0RBVEEwICAgICAgICovCisJSElEX0lSMiA9IDB4MDIsIC8qIEdlbmVyaWMgcmVnaXN0ZXJzIG9yIEVFUFJPTV9EQVRBMSAgICAgICAgICAgICovCisJSElEX0lSMyA9IDB4MDMsIC8qIEdlbmVyaWMgcmVnaXN0ZXJzIG9yIEVFUFJPTV9DVFJMICAgICAgICAgICAgICovCisJSElEX09SMCA9IDB4MDAsIC8qIE1hcHBpbmcgY29udHJvbCwgYnV6emVyLCBTUERJRiAob2Zmc2V0IDB4MDQpICovCisJSElEX09SMSA9IDB4MDEsIC8qIEdQTyAtIEdlbmVyYWwgUHVycG9zZSBPdXRwdXQgICAgICAgICAgICAgICAgICovCisJSElEX09SMiA9IDB4MDIsIC8qIFNldCBHUElPIHRvIGlucHV0L291dHB1dCBtb2RlICAgICAgICAgICAgICAgICovCisJSElEX09SMyA9IDB4MDMsIC8qIFNQRElGIHN0YXR1cyBjaGFubmVsIG9yIEVFUFJPTV9DVFJMICAgICAgICAgICovCisKKwkvKiBISURfSVIwICovCisJUkVDT1JEX01VVEUgICA9IDEgPDwgMywKKwlQTEFZQkFDS19NVVRFID0gMSA8PCAyLAorCVZPTFVNRV9ET1dOICAgPSAxIDw8IDEsCisJVk9MVU1FX1VQICAgICA9IDEgPDwgMCwKKworCS8qIEhJRF9PUjAgKi8KKwkvKiBiaXRzIDctNgorCSAgIDA6IEhJRF9PUjEtMiBhcmUgdXNlZCBmb3IgR1BPOyBISURfT1IwLCAzIGFyZSB1c2VkIGZvciBidXp6ZXIKKwkgICAgICBhbmQgU1BESUYKKwkgICAxOiBISURfT1IwLTMgYXJlIHVzZWQgYXMgZ2VuZXJpYyBISUQgcmVnaXN0ZXJzCisJICAgMjogVmFsdWVzIHdyaXR0ZW4gdG8gSElEX09SMC0zIGFyZSBhbHNvIG1hcHBlZCB0byBNQ1VfQ1RSTCwKKwkgICAgICBFRVBST01fREFUQTAtMSwgRUVQUk9NX0NUUkwgKHNlZSBOb3RlKQorCSAgIDM6IFJlc2VydmVkCisJICovCisJSElEX09SX0dQT19CVVpfU1BESUYgICA9IDAgPDwgNiwKKwlISURfT1JfR0VORVJJQ19ISURfUkVHID0gMSA8PCA2LAorCUhJRF9PUl9NQVBfTUNVX0VFUFJPTSAgPSAyIDw8IDYsCisKKwlCVVpaRVJfT04gPSAxIDw8IDUsCisKKwkvKiB1cCB0byAyNTYgbm9ybWFsIGtleXMsIHVwIHRvIDE2IHNwZWNpYWwga2V5cyAqLworCUtFWU1BUF9TSVpFID0gMjU2ICsgMTYsCit9OworCisvKiBDTTEwOSBwcm90b2NvbCBwYWNrZXQgKi8KK3N0cnVjdCBjbTEwOV9jdGxfcGFja2V0IHsKKwl1OCBieXRlWzRdOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKK2VudW0geyBVU0JfUEtUX0xFTiA9IHNpemVvZihzdHJ1Y3QgY20xMDlfY3RsX3BhY2tldCkgfTsKKworLyogQ00xMDkgZGV2aWNlIHN0cnVjdHVyZSAqLworc3RydWN0IGNtMTA5X2RldiB7CisJc3RydWN0IGlucHV0X2RldiAqaWRldjsJIC8qIGlucHV0IGRldmljZSAqLworCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2OyAvKiB1c2IgZGV2aWNlICovCisJc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGY7CisKKwkvKiBpcnEgaW5wdXQgY2hhbm5lbCAqLworCXN0cnVjdCBjbTEwOV9jdGxfcGFja2V0ICppcnFfZGF0YTsKKwlkbWFfYWRkcl90IGlycV9kbWE7CisJc3RydWN0IHVyYiAqdXJiX2lycTsKKworCS8qIGNvbnRyb2wgb3V0cHV0IGNoYW5uZWwgKi8KKwlzdHJ1Y3QgY20xMDlfY3RsX3BhY2tldCAqY3RsX2RhdGE7CisJZG1hX2FkZHJfdCBjdGxfZG1hOworCXN0cnVjdCB1c2JfY3RybHJlcXVlc3QgKmN0bF9yZXE7CisJZG1hX2FkZHJfdCBjdGxfcmVxX2RtYTsKKwlzdHJ1Y3QgdXJiICp1cmJfY3RsOworCS8qCisJICogVGhlIDMgYml0ZmllbGRzIGJlbG93IGFyZSBwcm90ZWN0ZWQgYnkgY3RsX3N1Ym1pdF9sb2NrLgorCSAqIFRoZXkgaGF2ZSB0byBiZSBzZXBhcmF0ZSBzaW5jZSB0aGV5IGFyZSBhY2Nlc3NlZCBmcm9tIElSUQorCSAqIGNvbnRleHQuCisJICovCisJdW5zaWduZWQgaXJxX3VyYl9wZW5kaW5nOjE7CS8qIGlycV91cmIgaXMgaW4gZmxpZ2h0ICovCisJdW5zaWduZWQgY3RsX3VyYl9wZW5kaW5nOjE7CS8qIGN0bF91cmIgaXMgaW4gZmxpZ2h0ICovCisJdW5zaWduZWQgYnV6emVyX3BlbmRpbmc6MTsJLyogbmVlZCB0byBpc3N1ZSBidXp6IGNvbW1hbmQgKi8KKwlzcGlubG9ja190IGN0bF9zdWJtaXRfbG9jazsKKworCXVuc2lnbmVkIGNoYXIgYnV6emVyX3N0YXRlOwkvKiBvbi9vZmYgKi8KKworCS8qIGZsYWdzICovCisJdW5zaWduZWQgb3BlbjoxOworCXVuc2lnbmVkIHJlc2V0dGluZzoxOworCXVuc2lnbmVkIHNodXRkb3duOjE7CisKKwkvKiBUaGlzIG11dGV4IHByb3RlY3RzIHdyaXRlcyB0byB0aGUgYWJvdmUgZmxhZ3MgKi8KKwlzdHJ1Y3QgbXV0ZXggcG1fbXV0ZXg7CisKKwl1bnNpZ25lZCBzaG9ydCBrZXltYXBbS0VZTUFQX1NJWkVdOworCisJY2hhciBwaHlzWzY0XTsJCS8qIHBoeXNpY2FsIGRldmljZSBwYXRoICovCisJaW50IGtleV9jb2RlOwkJLyogbGFzdCByZXBvcnRlZCBrZXkgKi8KKwlpbnQga2V5Yml0OwkJLyogMD1uZXcgc2NhbiAgMSwyLDQsOD1zY2FuIGNvbHVtbnMgICovCisJdTggZ3BpOwkJCS8qIENhY2hlZCB2YWx1ZSBvZiBHUEkgKGhpZ2ggbmliYmxlKSAqLworfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ00xMDkga2V5IGludGVyZmFjZQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgdW5zaWduZWQgc2hvcnQgc3BlY2lhbF9rZXltYXAoaW50IGNvZGUpCit7CisJaWYgKGNvZGUgPiAweGZmKSB7CisJCXN3aXRjaCAoY29kZSAtIDB4ZmYpIHsKKwkJY2FzZSBSRUNPUkRfTVVURToJcmV0dXJuIEtFWV9NVVRFOworCQljYXNlIFBMQVlCQUNLX01VVEU6CXJldHVybiBLRVlfTVVURTsKKwkJY2FzZSBWT0xVTUVfRE9XTjoJcmV0dXJuIEtFWV9WT0xVTUVET1dOOworCQljYXNlIFZPTFVNRV9VUDoJCXJldHVybiBLRVlfVk9MVU1FVVA7CisJCX0KKwl9CisJcmV0dXJuIEtFWV9SRVNFUlZFRDsKK30KKworLyogTWFwIGRldmljZSBidXR0b25zIHRvIGludGVybmFsIGtleSBldmVudHMuCisgKgorICogVGhlICJ1cCIgYW5kICJkb3duIiBrZXlzLCBhcmUgc3ltYm9saXNlZCBieSBhcnJvd3Mgb24gdGhlIGJ1dHRvbi4KKyAqIFRoZSAicGlja3VwIiBhbmQgImhhbmd1cCIga2V5cyBhcmUgc3ltYm9saXNlZCBieSBhIGdyZWVuIGFuZCByZWQgcGhvbmUKKyAqIG9uIHRoZSBidXR0b24uCisKKyBLb211bmlrYXRlIEtJUDEwMDAgS2V5Ym9hcmQgTWF0cml4CisKKyAgICAgLT4gLS0gMSAtLSAyIC0tIDMgIC0tPiBHUEkgcGluIDQgKDB4MTApCisgICAgICB8ICAgIHwgICAgfCAgICB8CisgICAgIDwtIC0tIDQgLS0gNSAtLSA2ICAtLT4gR1BJIHBpbiA1ICgweDIwKQorICAgICAgfCAgICB8ICAgIHwgICAgfAorICAgICBFTkQgLSA3IC0tIDggLS0gOSAgLS0+IEdQSSBwaW4gNiAoMHg0MCkKKyAgICAgIHwgICAgfCAgICB8ICAgIHwKKyAgICAgT0sgLS0gKiAtLSAwIC0tICMgIC0tPiBHUEkgcGluIDcgKDB4ODApCisgICAgICB8ICAgIHwgICAgfCAgICB8CisKKyAgICAgL3xcICAvfFwgIC98XCAgL3xcCisgICAgICB8ICAgIHwgICAgfCAgICB8CitHUE8KK3BpbjogIDMgICAgMiAgICAxICAgIDAKKyAgICAgMHg4ICAweDQgIDB4MiAgMHgxCisKKyAqLworc3RhdGljIHVuc2lnbmVkIHNob3J0IGtleW1hcF9raXAxMDAwKGludCBzY2FuY29kZSkKK3sKKwlzd2l0Y2ggKHNjYW5jb2RlKSB7CQkJCS8qIHBob25lIGtleTogICAqLworCWNhc2UgMHg4MjogcmV0dXJuIEtFWV9OVU1FUklDXzA7CQkvKiAgIDAgICAgICAgICAgKi8KKwljYXNlIDB4MTQ6IHJldHVybiBLRVlfTlVNRVJJQ18xOwkJLyogICAxICAgICAgICAgICovCisJY2FzZSAweDEyOiByZXR1cm4gS0VZX05VTUVSSUNfMjsJCS8qICAgMiAgICAgICAgICAqLworCWNhc2UgMHgxMTogcmV0dXJuIEtFWV9OVU1FUklDXzM7CQkvKiAgIDMgICAgICAgICAgKi8KKwljYXNlIDB4MjQ6IHJldHVybiBLRVlfTlVNRVJJQ180OwkJLyogICA0ICAgICAgICAgICovCisJY2FzZSAweDIyOiByZXR1cm4gS0VZX05VTUVSSUNfNTsJCS8qICAgNSAgICAgICAgICAqLworCWNhc2UgMHgyMTogcmV0dXJuIEtFWV9OVU1FUklDXzY7CQkvKiAgIDYgICAgICAgICAgKi8KKwljYXNlIDB4NDQ6IHJldHVybiBLRVlfTlVNRVJJQ183OwkJLyogICA3ICAgICAgICAgICovCisJY2FzZSAweDQyOiByZXR1cm4gS0VZX05VTUVSSUNfODsJCS8qICAgOCAgICAgICAgICAqLworCWNhc2UgMHg0MTogcmV0dXJuIEtFWV9OVU1FUklDXzk7CQkvKiAgIDkgICAgICAgICAgKi8KKwljYXNlIDB4ODE6IHJldHVybiBLRVlfTlVNRVJJQ19QT1VORDsJCS8qICAgIyAgICAgICAgICAqLworCWNhc2UgMHg4NDogcmV0dXJuIEtFWV9OVU1FUklDX1NUQVI7CQkvKiAgICogICAgICAgICAgKi8KKwljYXNlIDB4ODg6IHJldHVybiBLRVlfRU5URVI7CQkJLyogICBwaWNrdXAgICAgICovCisJY2FzZSAweDQ4OiByZXR1cm4gS0VZX0VTQzsJCQkvKiAgIGhhbmd1cCAgICAgKi8KKwljYXNlIDB4Mjg6IHJldHVybiBLRVlfTEVGVDsJCQkvKiAgIElOICAgICAgICAgKi8KKwljYXNlIDB4MTg6IHJldHVybiBLRVlfUklHSFQ7CQkJLyogICBPVVQgICAgICAgICovCisJZGVmYXVsdDogICByZXR1cm4gc3BlY2lhbF9rZXltYXAoc2NhbmNvZGUpOworCX0KK30KKworLyoKKyAgQ29udHJpYnV0ZWQgYnkgU2hhdW4gSmFja21hbiA8c2phY2ttYW5AZ21haWwuY29tPgorCisgIEdlbml1cyBHLVRhbGsga2V5Ym9hcmQgbWF0cml4CisgICAgIDAgMSAyIDMKKyAgNDogMCA0IDggVGFsaworICA1OiAxIDUgOSBFbmQKKyAgNjogMiA2ICMgVXAKKyAgNzogMyA3ICogRG93bgorKi8KK3N0YXRpYyB1bnNpZ25lZCBzaG9ydCBrZXltYXBfZ3RhbGsoaW50IHNjYW5jb2RlKQoreworCXN3aXRjaCAoc2NhbmNvZGUpIHsKKwljYXNlIDB4MTE6IHJldHVybiBLRVlfTlVNRVJJQ18wOworCWNhc2UgMHgyMTogcmV0dXJuIEtFWV9OVU1FUklDXzE7CisJY2FzZSAweDQxOiByZXR1cm4gS0VZX05VTUVSSUNfMjsKKwljYXNlIDB4ODE6IHJldHVybiBLRVlfTlVNRVJJQ18zOworCWNhc2UgMHgxMjogcmV0dXJuIEtFWV9OVU1FUklDXzQ7CisJY2FzZSAweDIyOiByZXR1cm4gS0VZX05VTUVSSUNfNTsKKwljYXNlIDB4NDI6IHJldHVybiBLRVlfTlVNRVJJQ182OworCWNhc2UgMHg4MjogcmV0dXJuIEtFWV9OVU1FUklDXzc7CisJY2FzZSAweDE0OiByZXR1cm4gS0VZX05VTUVSSUNfODsKKwljYXNlIDB4MjQ6IHJldHVybiBLRVlfTlVNRVJJQ185OworCWNhc2UgMHg0NDogcmV0dXJuIEtFWV9OVU1FUklDX1BPVU5EOwkvKiAjICovCisJY2FzZSAweDg0OiByZXR1cm4gS0VZX05VTUVSSUNfU1RBUjsJLyogKiAqLworCWNhc2UgMHgxODogcmV0dXJuIEtFWV9FTlRFUjsJCS8qIFRhbGsgKGdyZWVuIGhhbmRzZXQpICovCisJY2FzZSAweDI4OiByZXR1cm4gS0VZX0VTQzsJCS8qIEVuZCAocmVkIGhhbmRzZXQpICovCisJY2FzZSAweDQ4OiByZXR1cm4gS0VZX1VQOwkJLyogTWVudSB1cCAocm9ja2VyIHN3aXRjaCkgKi8KKwljYXNlIDB4ODg6IHJldHVybiBLRVlfRE9XTjsJCS8qIE1lbnUgZG93biAocm9ja2VyIHN3aXRjaCkgKi8KKwlkZWZhdWx0OiAgIHJldHVybiBzcGVjaWFsX2tleW1hcChzY2FuY29kZSk7CisJfQorfQorCisvKgorICogS2V5bWFwIGZvciBBbGxpZWQtVGVsZXNpcyBDb3JlZ2EgVVNCUEgwMQorICogaHR0cDovL3d3dy5hbGxpZWR0ZWxlc2lzLWNvcmVnYS5jb20vMi8xMzQ0LzE0MzcvMTM2MC9jaHByZC5odG1sCisgKgorICogQ29udHJpYnV0ZWQgYnkganVseUBuYXQuYmcKKyAqLworc3RhdGljIHVuc2lnbmVkIHNob3J0IGtleW1hcF91c2JwaDAxKGludCBzY2FuY29kZSkKK3sKKwlzd2l0Y2ggKHNjYW5jb2RlKSB7CisJY2FzZSAweDExOiByZXR1cm4gS0VZX05VTUVSSUNfMDsJCS8qICAgMCAgICAgICAgICAqLworCWNhc2UgMHgyMTogcmV0dXJuIEtFWV9OVU1FUklDXzE7CQkvKiAgIDEgICAgICAgICAgKi8KKwljYXNlIDB4NDE6IHJldHVybiBLRVlfTlVNRVJJQ18yOwkJLyogICAyICAgICAgICAgICovCisJY2FzZSAweDgxOiByZXR1cm4gS0VZX05VTUVSSUNfMzsJCS8qICAgMyAgICAgICAgICAqLworCWNhc2UgMHgxMjogcmV0dXJuIEtFWV9OVU1FUklDXzQ7CQkvKiAgIDQgICAgICAgICAgKi8KKwljYXNlIDB4MjI6IHJldHVybiBLRVlfTlVNRVJJQ181OwkJLyogICA1ICAgICAgICAgICovCisJY2FzZSAweDQyOiByZXR1cm4gS0VZX05VTUVSSUNfNjsJCS8qICAgNiAgICAgICAgICAqLworCWNhc2UgMHg4MjogcmV0dXJuIEtFWV9OVU1FUklDXzc7CQkvKiAgIDcgICAgICAgICAgKi8KKwljYXNlIDB4MTQ6IHJldHVybiBLRVlfTlVNRVJJQ184OwkJLyogICA4ICAgICAgICAgICovCisJY2FzZSAweDI0OiByZXR1cm4gS0VZX05VTUVSSUNfOTsJCS8qICAgOSAgICAgICAgICAqLworCWNhc2UgMHg0NDogcmV0dXJuIEtFWV9OVU1FUklDX1BPVU5EOwkJLyogICAjICAgICAgICAgICovCisJY2FzZSAweDg0OiByZXR1cm4gS0VZX05VTUVSSUNfU1RBUjsJCS8qICAgKiAgICAgICAgICAqLworCWNhc2UgMHgxODogcmV0dXJuIEtFWV9FTlRFUjsJCQkvKiAgIHBpY2t1cCAgICAgKi8KKwljYXNlIDB4Mjg6IHJldHVybiBLRVlfRVNDOwkJCS8qICAgaGFuZ3VwICAgICAqLworCWNhc2UgMHg0ODogcmV0dXJuIEtFWV9MRUZUOwkJCS8qICAgSU4gICAgICAgICAqLworCWNhc2UgMHg4ODogcmV0dXJuIEtFWV9SSUdIVDsJCQkvKiAgIE9VVCAgICAgICAgKi8KKwlkZWZhdWx0OiAgIHJldHVybiBzcGVjaWFsX2tleW1hcChzY2FuY29kZSk7CisJfQorfQorCitzdGF0aWMgdW5zaWduZWQgc2hvcnQgKCprZXltYXApKGludCkgPSBrZXltYXBfa2lwMTAwMDsKKworLyoKKyAqIENvbXBsZXRlcyBhIHJlcXVlc3QgYnkgY29udmVydGluZyB0aGUgZGF0YSBpbnRvIGV2ZW50cyBmb3IgdGhlCisgKiBpbnB1dCBzdWJzeXN0ZW0uCisgKi8KK3N0YXRpYyB2b2lkIHJlcG9ydF9rZXkoc3RydWN0IGNtMTA5X2RldiAqZGV2LCBpbnQga2V5KQoreworCXN0cnVjdCBpbnB1dF9kZXYgKmlkZXYgPSBkZXYtPmlkZXY7CisKKwlpZiAoZGV2LT5rZXlfY29kZSA+PSAwKSB7CisJCS8qIG9sZCBrZXkgdXAgKi8KKwkJaW5wdXRfcmVwb3J0X2tleShpZGV2LCBkZXYtPmtleV9jb2RlLCAwKTsKKwl9CisKKwlkZXYtPmtleV9jb2RlID0ga2V5OworCWlmIChrZXkgPj0gMCkgeworCQkvKiBuZXcgdmFsaWQga2V5ICovCisJCWlucHV0X3JlcG9ydF9rZXkoaWRldiwga2V5LCAxKTsKKwl9CisKKwlpbnB1dF9zeW5jKGlkZXYpOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDTTEwOSB1c2IgY29tbXVuaWNhdGlvbiBpbnRlcmZhY2UKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIHZvaWQgY20xMDlfc3VibWl0X2J1enpfdG9nZ2xlKHN0cnVjdCBjbTEwOV9kZXYgKmRldikKK3sKKwlpbnQgZXJyb3I7CisKKwlpZiAoZGV2LT5idXp6ZXJfc3RhdGUpCisJCWRldi0+Y3RsX2RhdGEtPmJ5dGVbSElEX09SMF0gfD0gQlVaWkVSX09OOworCWVsc2UKKwkJZGV2LT5jdGxfZGF0YS0+Ynl0ZVtISURfT1IwXSAmPSB+QlVaWkVSX09OOworCisJZXJyb3IgPSB1c2Jfc3VibWl0X3VyYihkZXYtPnVyYl9jdGwsIEdGUF9BVE9NSUMpOworCWlmIChlcnJvcikKKwkJZXJyKCIlczogdXNiX3N1Ym1pdF91cmIgKHVyYl9jdGwpIGZhaWxlZCAlZCIsIF9fZnVuY19fLCBlcnJvcik7Cit9CisKKy8qCisgKiBJUlEgaGFuZGxlcgorICovCitzdGF0aWMgdm9pZCBjbTEwOV91cmJfaXJxX2NhbGxiYWNrKHN0cnVjdCB1cmIgKnVyYikKK3sKKwlzdHJ1Y3QgY20xMDlfZGV2ICpkZXYgPSB1cmItPmNvbnRleHQ7CisJY29uc3QgaW50IHN0YXR1cyA9IHVyYi0+c3RhdHVzOworCWludCBlcnJvcjsKKworCWRldl9kYmcoJnVyYi0+ZGV2LT5kZXYsICIjIyMgVVJCIElSUTogWzB4JTAyeCAweCUwMnggMHglMDJ4IDB4JTAyeF0ga2V5Yml0PTB4JTAyeFxuIiwKKwkgICAgIGRldi0+aXJxX2RhdGEtPmJ5dGVbMF0sCisJICAgICBkZXYtPmlycV9kYXRhLT5ieXRlWzFdLAorCSAgICAgZGV2LT5pcnFfZGF0YS0+Ynl0ZVsyXSwKKwkgICAgIGRldi0+aXJxX2RhdGEtPmJ5dGVbM10sCisJICAgICBkZXYtPmtleWJpdCk7CisKKwlpZiAoc3RhdHVzKSB7CisJCWlmIChzdGF0dXMgPT0gLUVTSFVURE9XTikKKwkJCXJldHVybjsKKwkJZXJyKCIlczogdXJiIHN0YXR1cyAlZCIsIF9fZnVuY19fLCBzdGF0dXMpOworCX0KKworCS8qIFNwZWNpYWwga2V5cyAqLworCWlmIChkZXYtPmlycV9kYXRhLT5ieXRlW0hJRF9JUjBdICYgMHgwZikgeworCQljb25zdCBpbnQgY29kZSA9IChkZXYtPmlycV9kYXRhLT5ieXRlW0hJRF9JUjBdICYgMHgwZik7CisJCXJlcG9ydF9rZXkoZGV2LCBkZXYtPmtleW1hcFsweGZmICsgY29kZV0pOworCX0KKworCS8qIFNjYW4ga2V5IGNvbHVtbiAqLworCWlmIChkZXYtPmtleWJpdCA9PSAweGYpIHsKKworCQkvKiBBbnkgY2hhbmdlcyA/ICovCisJCWlmICgoZGV2LT5ncGkgJiAweGYwKSA9PSAoZGV2LT5pcnFfZGF0YS0+Ynl0ZVtISURfSVIxXSAmIDB4ZjApKQorCQkJZ290byBvdXQ7CisKKwkJZGV2LT5ncGkgPSBkZXYtPmlycV9kYXRhLT5ieXRlW0hJRF9JUjFdICYgMHhmMDsKKwkJZGV2LT5rZXliaXQgPSAweDE7CisJfSBlbHNlIHsKKwkJcmVwb3J0X2tleShkZXYsIGRldi0+a2V5bWFwW2Rldi0+aXJxX2RhdGEtPmJ5dGVbSElEX0lSMV1dKTsKKworCQlkZXYtPmtleWJpdCA8PD0gMTsKKwkJaWYgKGRldi0+a2V5Yml0ID4gMHg4KQorCQkJZGV2LT5rZXliaXQgPSAweGY7CisJfQorCisgb3V0OgorCisJc3Bpbl9sb2NrKCZkZXYtPmN0bF9zdWJtaXRfbG9jayk7CisKKwlkZXYtPmlycV91cmJfcGVuZGluZyA9IDA7CisKKwlpZiAobGlrZWx5KCFkZXYtPnNodXRkb3duKSkgeworCisJCWlmIChkZXYtPmJ1enplcl9zdGF0ZSkKKwkJCWRldi0+Y3RsX2RhdGEtPmJ5dGVbSElEX09SMF0gfD0gQlVaWkVSX09OOworCQllbHNlCisJCQlkZXYtPmN0bF9kYXRhLT5ieXRlW0hJRF9PUjBdICY9IH5CVVpaRVJfT047CisKKwkJZGV2LT5jdGxfZGF0YS0+Ynl0ZVtISURfT1IxXSA9IGRldi0+a2V5Yml0OworCQlkZXYtPmN0bF9kYXRhLT5ieXRlW0hJRF9PUjJdID0gZGV2LT5rZXliaXQ7CisKKwkJZGV2LT5idXp6ZXJfcGVuZGluZyA9IDA7CisJCWRldi0+Y3RsX3VyYl9wZW5kaW5nID0gMTsKKworCQllcnJvciA9IHVzYl9zdWJtaXRfdXJiKGRldi0+dXJiX2N0bCwgR0ZQX0FUT01JQyk7CisJCWlmIChlcnJvcikKKwkJCWVycigiJXM6IHVzYl9zdWJtaXRfdXJiICh1cmJfY3RsKSBmYWlsZWQgJWQiLAorCQkJCV9fZnVuY19fLCBlcnJvcik7CisJfQorCisJc3Bpbl91bmxvY2soJmRldi0+Y3RsX3N1Ym1pdF9sb2NrKTsKK30KKworc3RhdGljIHZvaWQgY20xMDlfdXJiX2N0bF9jYWxsYmFjayhzdHJ1Y3QgdXJiICp1cmIpCit7CisJc3RydWN0IGNtMTA5X2RldiAqZGV2ID0gdXJiLT5jb250ZXh0OworCWNvbnN0IGludCBzdGF0dXMgPSB1cmItPnN0YXR1czsKKwlpbnQgZXJyb3I7CisKKwlkZXZfZGJnKCZ1cmItPmRldi0+ZGV2LCAiIyMjIFVSQiBDVEw6IFsweCUwMnggMHglMDJ4IDB4JTAyeCAweCUwMnhdXG4iLAorCSAgICAgZGV2LT5jdGxfZGF0YS0+Ynl0ZVswXSwKKwkgICAgIGRldi0+Y3RsX2RhdGEtPmJ5dGVbMV0sCisJICAgICBkZXYtPmN0bF9kYXRhLT5ieXRlWzJdLAorCSAgICAgZGV2LT5jdGxfZGF0YS0+Ynl0ZVszXSk7CisKKwlpZiAoc3RhdHVzKQorCQllcnIoIiVzOiB1cmIgc3RhdHVzICVkIiwgX19mdW5jX18sIHN0YXR1cyk7CisKKwlzcGluX2xvY2soJmRldi0+Y3RsX3N1Ym1pdF9sb2NrKTsKKworCWRldi0+Y3RsX3VyYl9wZW5kaW5nID0gMDsKKworCWlmIChsaWtlbHkoIWRldi0+c2h1dGRvd24pKSB7CisKKwkJaWYgKGRldi0+YnV6emVyX3BlbmRpbmcpIHsKKwkJCWRldi0+YnV6emVyX3BlbmRpbmcgPSAwOworCQkJZGV2LT5jdGxfdXJiX3BlbmRpbmcgPSAxOworCQkJY20xMDlfc3VibWl0X2J1enpfdG9nZ2xlKGRldik7CisJCX0gZWxzZSBpZiAobGlrZWx5KCFkZXYtPmlycV91cmJfcGVuZGluZykpIHsKKwkJCS8qIGFzayBmb3Iga2V5IGRhdGEgKi8KKwkJCWRldi0+aXJxX3VyYl9wZW5kaW5nID0gMTsKKwkJCWVycm9yID0gdXNiX3N1Ym1pdF91cmIoZGV2LT51cmJfaXJxLCBHRlBfQVRPTUlDKTsKKwkJCWlmIChlcnJvcikKKwkJCQllcnIoIiVzOiB1c2Jfc3VibWl0X3VyYiAodXJiX2lycSkgZmFpbGVkICVkIiwKKwkJCQkJX19mdW5jX18sIGVycm9yKTsKKwkJfQorCX0KKworCXNwaW5fdW5sb2NrKCZkZXYtPmN0bF9zdWJtaXRfbG9jayk7Cit9CisKK3N0YXRpYyB2b2lkIGNtMTA5X3RvZ2dsZV9idXp6ZXJfYXN5bmMoc3RydWN0IGNtMTA5X2RldiAqZGV2KQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT5jdGxfc3VibWl0X2xvY2ssIGZsYWdzKTsKKworCWlmIChkZXYtPmN0bF91cmJfcGVuZGluZykgeworCQkvKiBVUkIgY29tcGxldGlvbiB3aWxsIHJlc3VibWl0ICovCisJCWRldi0+YnV6emVyX3BlbmRpbmcgPSAxOworCX0gZWxzZSB7CisJCWRldi0+Y3RsX3VyYl9wZW5kaW5nID0gMTsKKwkJY20xMDlfc3VibWl0X2J1enpfdG9nZ2xlKGRldik7CisJfQorCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5jdGxfc3VibWl0X2xvY2ssIGZsYWdzKTsKK30KKworc3RhdGljIHZvaWQgY20xMDlfdG9nZ2xlX2J1enplcl9zeW5jKHN0cnVjdCBjbTEwOV9kZXYgKmRldiwgaW50IG9uKQoreworCWludCBlcnJvcjsKKworCWlmIChvbikKKwkJZGV2LT5jdGxfZGF0YS0+Ynl0ZVtISURfT1IwXSB8PSBCVVpaRVJfT047CisJZWxzZQorCQlkZXYtPmN0bF9kYXRhLT5ieXRlW0hJRF9PUjBdICY9IH5CVVpaRVJfT047CisKKwllcnJvciA9IHVzYl9jb250cm9sX21zZyhkZXYtPnVkZXYsCisJCQkJdXNiX3NuZGN0cmxwaXBlKGRldi0+dWRldiwgMCksCisJCQkJZGV2LT5jdGxfcmVxLT5iUmVxdWVzdCwKKwkJCQlkZXYtPmN0bF9yZXEtPmJSZXF1ZXN0VHlwZSwKKwkJCQlsZTE2X3RvX2NwdShkZXYtPmN0bF9yZXEtPndWYWx1ZSksCisJCQkJbGUxNl90b19jcHUoZGV2LT5jdGxfcmVxLT53SW5kZXgpLAorCQkJCWRldi0+Y3RsX2RhdGEsCisJCQkJVVNCX1BLVF9MRU4sIFVTQl9DVFJMX1NFVF9USU1FT1VUKTsKKwlpZiAoZXJyb3IgJiYgZXJyb3IgIT0gRUlOVFIpCisJCWVycigiJXM6IHVzYl9jb250cm9sX21zZygpIGZhaWxlZCAlZCIsIF9fZnVuY19fLCBlcnJvcik7Cit9CisKK3N0YXRpYyB2b2lkIGNtMTA5X3N0b3BfdHJhZmZpYyhzdHJ1Y3QgY20xMDlfZGV2ICpkZXYpCit7CisJZGV2LT5zaHV0ZG93biA9IDE7CisJLyoKKwkgKiBNYWtlIHN1cmUgb3RoZXIgQ1BVcyBzZWUgdGhpcworCSAqLworCXNtcF93bWIoKTsKKworCXVzYl9raWxsX3VyYihkZXYtPnVyYl9jdGwpOworCXVzYl9raWxsX3VyYihkZXYtPnVyYl9pcnEpOworCisJY20xMDlfdG9nZ2xlX2J1enplcl9zeW5jKGRldiwgMCk7CisKKwlkZXYtPnNodXRkb3duID0gMDsKKwlzbXBfd21iKCk7Cit9CisKK3N0YXRpYyB2b2lkIGNtMTA5X3Jlc3RvcmVfc3RhdGUoc3RydWN0IGNtMTA5X2RldiAqZGV2KQoreworCWlmIChkZXYtPm9wZW4pIHsKKwkJLyoKKwkJICogUmVzdG9yZSBidXp6ZXIgc3RhdGUuCisJCSAqIFRoaXMgd2lsbCBhbHNvIGtpY2sgcmVndWxhciBVUkIgc3VibWlzc2lvbgorCQkgKi8KKwkJY20xMDlfdG9nZ2xlX2J1enplcl9hc3luYyhkZXYpOworCX0KK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogaW5wdXQgZXZlbnQgaW50ZXJmYWNlCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyBpbnQgY20xMDlfaW5wdXRfb3BlbihzdHJ1Y3QgaW5wdXRfZGV2ICppZGV2KQoreworCXN0cnVjdCBjbTEwOV9kZXYgKmRldiA9IGlucHV0X2dldF9kcnZkYXRhKGlkZXYpOworCWludCBlcnJvcjsKKworCWVycm9yID0gdXNiX2F1dG9wbV9nZXRfaW50ZXJmYWNlKGRldi0+aW50Zik7CisJaWYgKGVycm9yIDwgMCkgeworCQllcnIoIiVzIC0gY2Fubm90IGF1dG9yZXN1bWUsIHJlc3VsdCAlZCIsCisJCSAgICBfX2Z1bmNfXywgZXJyb3IpOworCQlyZXR1cm4gZXJyb3I7CisJfQorCisJbXV0ZXhfbG9jaygmZGV2LT5wbV9tdXRleCk7CisKKwlkZXYtPmJ1enplcl9zdGF0ZSA9IDA7CisJZGV2LT5rZXlfY29kZSA9IC0xOwkvKiBubyBrZXlzIHByZXNzZWQgKi8KKwlkZXYtPmtleWJpdCA9IDB4ZjsKKworCS8qIGlzc3VlIElOSVQgKi8KKwlkZXYtPmN0bF9kYXRhLT5ieXRlW0hJRF9PUjBdID0gSElEX09SX0dQT19CVVpfU1BESUY7CisJZGV2LT5jdGxfZGF0YS0+Ynl0ZVtISURfT1IxXSA9IGRldi0+a2V5Yml0OworCWRldi0+Y3RsX2RhdGEtPmJ5dGVbSElEX09SMl0gPSBkZXYtPmtleWJpdDsKKwlkZXYtPmN0bF9kYXRhLT5ieXRlW0hJRF9PUjNdID0gMHgwMDsKKworCWVycm9yID0gdXNiX3N1Ym1pdF91cmIoZGV2LT51cmJfY3RsLCBHRlBfS0VSTkVMKTsKKwlpZiAoZXJyb3IpCisJCWVycigiJXM6IHVzYl9zdWJtaXRfdXJiICh1cmJfY3RsKSBmYWlsZWQgJWQiLCBfX2Z1bmNfXywgZXJyb3IpOworCWVsc2UKKwkJZGV2LT5vcGVuID0gMTsKKworCW11dGV4X3VubG9jaygmZGV2LT5wbV9tdXRleCk7CisKKwlpZiAoZXJyb3IpCisJCXVzYl9hdXRvcG1fcHV0X2ludGVyZmFjZShkZXYtPmludGYpOworCisJcmV0dXJuIGVycm9yOworfQorCitzdGF0aWMgdm9pZCBjbTEwOV9pbnB1dF9jbG9zZShzdHJ1Y3QgaW5wdXRfZGV2ICppZGV2KQoreworCXN0cnVjdCBjbTEwOV9kZXYgKmRldiA9IGlucHV0X2dldF9kcnZkYXRhKGlkZXYpOworCisJbXV0ZXhfbG9jaygmZGV2LT5wbV9tdXRleCk7CisKKwkvKgorCSAqIE9uY2Ugd2UgYXJlIGhlcmUgZXZlbnQgZGVsaXZlcnkgaXMgc3RvcHBlZCBzbyB3ZQorCSAqIGRvbid0IG5lZWQgdG8gd29ycnkgYWJvdXQgc29tZW9uZSBzdGFydGluZyBidXp6ZXIKKwkgKiBhZ2FpbgorCSAqLworCWNtMTA5X3N0b3BfdHJhZmZpYyhkZXYpOworCWRldi0+b3BlbiA9IDA7CisKKwltdXRleF91bmxvY2soJmRldi0+cG1fbXV0ZXgpOworCisJdXNiX2F1dG9wbV9wdXRfaW50ZXJmYWNlKGRldi0+aW50Zik7Cit9CisKK3N0YXRpYyBpbnQgY20xMDlfaW5wdXRfZXYoc3RydWN0IGlucHV0X2RldiAqaWRldiwgdW5zaWduZWQgaW50IHR5cGUsCisJCQkgIHVuc2lnbmVkIGludCBjb2RlLCBpbnQgdmFsdWUpCit7CisJc3RydWN0IGNtMTA5X2RldiAqZGV2ID0gaW5wdXRfZ2V0X2RydmRhdGEoaWRldik7CisKKwlkZXZfZGJnKCZkZXYtPnVkZXYtPmRldiwKKwkJImlucHV0X2V2OiB0eXBlPSV1IGNvZGU9JXUgdmFsdWU9JWRcbiIsIHR5cGUsIGNvZGUsIHZhbHVlKTsKKworCWlmICh0eXBlICE9IEVWX1NORCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlzd2l0Y2ggKGNvZGUpIHsKKwljYXNlIFNORF9UT05FOgorCWNhc2UgU05EX0JFTEw6CisJCWRldi0+YnV6emVyX3N0YXRlID0gISF2YWx1ZTsKKwkJaWYgKCFkZXYtPnJlc2V0dGluZykKKwkJCWNtMTA5X3RvZ2dsZV9idXp6ZXJfYXN5bmMoZGV2KTsKKwkJcmV0dXJuIDA7CisKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9Cit9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogTGludXggaW50ZXJmYWNlIGFuZCB1c2IgaW5pdGlhbGlzYXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RydWN0IGRyaXZlcl9pbmZvIHsKKwljaGFyICpuYW1lOworfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBkcml2ZXJfaW5mbyBpbmZvX2NtMTA5ID0geworCS5uYW1lID0gIkNNMTA5IFVTQiBkcml2ZXIiLAorfTsKKworZW51bSB7CisJVkVORE9SX0lEICAgICAgICA9IDB4MGQ4YywgLyogQy1NZWRpYSBFbGVjdHJvbmljcyAqLworCVBST0RVQ1RfSURfQ00xMDkgPSAweDAwMGUsIC8qIENNMTA5IGRlZmluZXMgcmFuZ2UgMHgwMDA4IC0gMHgwMDBmICovCit9OworCisvKiB0YWJsZSBvZiBkZXZpY2VzIHRoYXQgd29yayB3aXRoIHRoaXMgZHJpdmVyICovCitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgY20xMDlfdXNiX3RhYmxlW10gPSB7CisJeworCQkubWF0Y2hfZmxhZ3MgPSBVU0JfREVWSUNFX0lEX01BVENIX0RFVklDRSB8CisJCQkJVVNCX0RFVklDRV9JRF9NQVRDSF9JTlRfSU5GTywKKwkJLmlkVmVuZG9yID0gVkVORE9SX0lELAorCQkuaWRQcm9kdWN0ID0gUFJPRFVDVF9JRF9DTTEwOSwKKwkJLmJJbnRlcmZhY2VDbGFzcyA9IFVTQl9DTEFTU19ISUQsCisJCS5iSW50ZXJmYWNlU3ViQ2xhc3MgPSAwLAorCQkuYkludGVyZmFjZVByb3RvY29sID0gMCwKKwkJLmRyaXZlcl9pbmZvID0gKGtlcm5lbF91bG9uZ190KSAmaW5mb19jbTEwOQorCX0sCisJLyogeW91IGNhbiBhZGQgbW9yZSBkZXZpY2VzIGhlcmUgd2l0aCBwcm9kdWN0IElEIDB4MDAwOCAtIDB4MDAwZiAqLworCXsgfQorfTsKKworc3RhdGljIHZvaWQgY20xMDlfdXNiX2NsZWFudXAoc3RydWN0IGNtMTA5X2RldiAqZGV2KQoreworCWlmIChkZXYtPmN0bF9yZXEpCisJCXVzYl9idWZmZXJfZnJlZShkZXYtPnVkZXYsIHNpemVvZigqKGRldi0+Y3RsX3JlcSkpLAorCQkJCWRldi0+Y3RsX3JlcSwgZGV2LT5jdGxfcmVxX2RtYSk7CisJaWYgKGRldi0+Y3RsX2RhdGEpCisJCXVzYl9idWZmZXJfZnJlZShkZXYtPnVkZXYsIFVTQl9QS1RfTEVOLAorCQkJCWRldi0+Y3RsX2RhdGEsIGRldi0+Y3RsX2RtYSk7CisJaWYgKGRldi0+aXJxX2RhdGEpCisJCXVzYl9idWZmZXJfZnJlZShkZXYtPnVkZXYsIFVTQl9QS1RfTEVOLAorCQkJCWRldi0+aXJxX2RhdGEsIGRldi0+aXJxX2RtYSk7CisKKwl1c2JfZnJlZV91cmIoZGV2LT51cmJfaXJxKTsJLyogcGFyYW1ldGVyIHZhbGlkYXRpb24gaW4gY29yZS91cmIgKi8KKwl1c2JfZnJlZV91cmIoZGV2LT51cmJfY3RsKTsJLyogcGFyYW1ldGVyIHZhbGlkYXRpb24gaW4gY29yZS91cmIgKi8KKwlrZnJlZShkZXYpOworfQorCitzdGF0aWMgdm9pZCBjbTEwOV91c2JfZGlzY29ubmVjdChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlKQoreworCXN0cnVjdCBjbTEwOV9kZXYgKmRldiA9IHVzYl9nZXRfaW50ZmRhdGEoaW50ZXJmYWNlKTsKKworCXVzYl9zZXRfaW50ZmRhdGEoaW50ZXJmYWNlLCBOVUxMKTsKKwlpbnB1dF91bnJlZ2lzdGVyX2RldmljZShkZXYtPmlkZXYpOworCWNtMTA5X3VzYl9jbGVhbnVwKGRldik7Cit9CisKK3N0YXRpYyBpbnQgY20xMDlfdXNiX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLAorCQkJICAgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQoreworCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldihpbnRmKTsKKwlzdHJ1Y3QgZHJpdmVyX2luZm8gKm5mbyA9IChzdHJ1Y3QgZHJpdmVyX2luZm8gKilpZC0+ZHJpdmVyX2luZm87CisJc3RydWN0IHVzYl9ob3N0X2ludGVyZmFjZSAqaW50ZXJmYWNlOworCXN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqZW5kcG9pbnQ7CisJc3RydWN0IGNtMTA5X2RldiAqZGV2OworCXN0cnVjdCBpbnB1dF9kZXYgKmlucHV0X2RldiA9IE5VTEw7CisJaW50IHJldCwgcGlwZSwgaTsKKwlpbnQgZXJyb3IgPSAtRU5PTUVNOworCisJaW50ZXJmYWNlID0gaW50Zi0+Y3VyX2FsdHNldHRpbmc7CisJZW5kcG9pbnQgPSAmaW50ZXJmYWNlLT5lbmRwb2ludFswXS5kZXNjOworCisJaWYgKCF1c2JfZW5kcG9pbnRfaXNfaW50X2luKGVuZHBvaW50KSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlkZXYgPSBremFsbG9jKHNpemVvZigqZGV2KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFkZXYpCisJCXJldHVybiAtRU5PTUVNOworCisJc3Bpbl9sb2NrX2luaXQoJmRldi0+Y3RsX3N1Ym1pdF9sb2NrKTsKKwltdXRleF9pbml0KCZkZXYtPnBtX211dGV4KTsKKworCWRldi0+dWRldiA9IHVkZXY7CisJZGV2LT5pbnRmID0gaW50ZjsKKworCWRldi0+aWRldiA9IGlucHV0X2RldiA9IGlucHV0X2FsbG9jYXRlX2RldmljZSgpOworCWlmICghaW5wdXRfZGV2KQorCQlnb3RvIGVycl9vdXQ7CisKKwkvKiBhbGxvY2F0ZSB1c2IgYnVmZmVycyAqLworCWRldi0+aXJxX2RhdGEgPSB1c2JfYnVmZmVyX2FsbG9jKHVkZXYsIFVTQl9QS1RfTEVOLAorCQkJCQkgR0ZQX0tFUk5FTCwgJmRldi0+aXJxX2RtYSk7CisJaWYgKCFkZXYtPmlycV9kYXRhKQorCQlnb3RvIGVycl9vdXQ7CisKKwlkZXYtPmN0bF9kYXRhID0gdXNiX2J1ZmZlcl9hbGxvYyh1ZGV2LCBVU0JfUEtUX0xFTiwKKwkJCQkJIEdGUF9LRVJORUwsICZkZXYtPmN0bF9kbWEpOworCWlmICghZGV2LT5jdGxfZGF0YSkKKwkJZ290byBlcnJfb3V0OworCisJZGV2LT5jdGxfcmVxID0gdXNiX2J1ZmZlcl9hbGxvYyh1ZGV2LCBzaXplb2YoKihkZXYtPmN0bF9yZXEpKSwKKwkJCQkJR0ZQX0tFUk5FTCwgJmRldi0+Y3RsX3JlcV9kbWEpOworCWlmICghZGV2LT5jdGxfcmVxKQorCQlnb3RvIGVycl9vdXQ7CisKKwkvKiBhbGxvY2F0ZSB1cmIgc3RydWN0dXJlcyAqLworCWRldi0+dXJiX2lycSA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0tFUk5FTCk7CisJaWYgKCFkZXYtPnVyYl9pcnEpCisJCWdvdG8gZXJyX291dDsKKworCWRldi0+dXJiX2N0bCA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0tFUk5FTCk7CisJaWYgKCFkZXYtPnVyYl9jdGwpCisJCWdvdG8gZXJyX291dDsKKworCS8qIGdldCBhIGhhbmRsZSB0byB0aGUgaW50ZXJydXB0IGRhdGEgcGlwZSAqLworCXBpcGUgPSB1c2JfcmN2aW50cGlwZSh1ZGV2LCBlbmRwb2ludC0+YkVuZHBvaW50QWRkcmVzcyk7CisJcmV0ID0gdXNiX21heHBhY2tldCh1ZGV2LCBwaXBlLCB1c2JfcGlwZW91dChwaXBlKSk7CisJaWYgKHJldCAhPSBVU0JfUEtUX0xFTikKKwkJZXJyKCJpbnZhbGlkIHBheWxvYWQgc2l6ZSAlZCwgZXhwZWN0ZWQgJWQiLCByZXQsIFVTQl9QS1RfTEVOKTsKKworCS8qIGluaXRpYWxpc2UgaXJxIHVyYiAqLworCXVzYl9maWxsX2ludF91cmIoZGV2LT51cmJfaXJxLCB1ZGV2LCBwaXBlLCBkZXYtPmlycV9kYXRhLAorCQkJIFVTQl9QS1RfTEVOLAorCQkJIGNtMTA5X3VyYl9pcnFfY2FsbGJhY2ssIGRldiwgZW5kcG9pbnQtPmJJbnRlcnZhbCk7CisJZGV2LT51cmJfaXJxLT50cmFuc2Zlcl9kbWEgPSBkZXYtPmlycV9kbWE7CisJZGV2LT51cmJfaXJxLT50cmFuc2Zlcl9mbGFncyB8PSBVUkJfTk9fVFJBTlNGRVJfRE1BX01BUDsKKwlkZXYtPnVyYl9pcnEtPmRldiA9IHVkZXY7CisKKwkvKiBpbml0aWFsaXNlIGN0bCB1cmIgKi8KKwlkZXYtPmN0bF9yZXEtPmJSZXF1ZXN0VHlwZSA9IFVTQl9UWVBFX0NMQVNTIHwgVVNCX1JFQ0lQX0lOVEVSRkFDRSB8CisJCQkJCVVTQl9ESVJfT1VUOworCWRldi0+Y3RsX3JlcS0+YlJlcXVlc3QgPSBVU0JfUkVRX1NFVF9DT05GSUdVUkFUSU9OOworCWRldi0+Y3RsX3JlcS0+d1ZhbHVlID0gY3B1X3RvX2xlMTYoMHgyMDApOworCWRldi0+Y3RsX3JlcS0+d0luZGV4ID0gY3B1X3RvX2xlMTYoaW50ZXJmYWNlLT5kZXNjLmJJbnRlcmZhY2VOdW1iZXIpOworCWRldi0+Y3RsX3JlcS0+d0xlbmd0aCA9IGNwdV90b19sZTE2KFVTQl9QS1RfTEVOKTsKKworCXVzYl9maWxsX2NvbnRyb2xfdXJiKGRldi0+dXJiX2N0bCwgdWRldiwgdXNiX3NuZGN0cmxwaXBlKHVkZXYsIDApLAorCQkJICAgICAodm9pZCAqKWRldi0+Y3RsX3JlcSwgZGV2LT5jdGxfZGF0YSwgVVNCX1BLVF9MRU4sCisJCQkgICAgIGNtMTA5X3VyYl9jdGxfY2FsbGJhY2ssIGRldik7CisJZGV2LT51cmJfY3RsLT5zZXR1cF9kbWEgPSBkZXYtPmN0bF9yZXFfZG1hOworCWRldi0+dXJiX2N0bC0+dHJhbnNmZXJfZG1hID0gZGV2LT5jdGxfZG1hOworCWRldi0+dXJiX2N0bC0+dHJhbnNmZXJfZmxhZ3MgfD0gVVJCX05PX1NFVFVQX0RNQV9NQVAgfAorCQkJCQlVUkJfTk9fVFJBTlNGRVJfRE1BX01BUDsKKwlkZXYtPnVyYl9jdGwtPmRldiA9IHVkZXY7CisKKwkvKiBmaW5kIG91dCB0aGUgcGh5c2ljYWwgYnVzIGxvY2F0aW9uICovCisJdXNiX21ha2VfcGF0aCh1ZGV2LCBkZXYtPnBoeXMsIHNpemVvZihkZXYtPnBoeXMpKTsKKwlzdHJsY2F0KGRldi0+cGh5cywgIi9pbnB1dDAiLCBzaXplb2YoZGV2LT5waHlzKSk7CisKKwkvKiByZWdpc3RlciBzZXR0aW5ncyBmb3IgdGhlIGlucHV0IGRldmljZSAqLworCWlucHV0X2Rldi0+bmFtZSA9IG5mby0+bmFtZTsKKwlpbnB1dF9kZXYtPnBoeXMgPSBkZXYtPnBoeXM7CisJdXNiX3RvX2lucHV0X2lkKHVkZXYsICZpbnB1dF9kZXYtPmlkKTsKKwlpbnB1dF9kZXYtPmRldi5wYXJlbnQgPSAmaW50Zi0+ZGV2OworCisJaW5wdXRfc2V0X2RydmRhdGEoaW5wdXRfZGV2LCBkZXYpOworCWlucHV0X2Rldi0+b3BlbiA9IGNtMTA5X2lucHV0X29wZW47CisJaW5wdXRfZGV2LT5jbG9zZSA9IGNtMTA5X2lucHV0X2Nsb3NlOworCWlucHV0X2Rldi0+ZXZlbnQgPSBjbTEwOV9pbnB1dF9ldjsKKworCWlucHV0X2Rldi0+a2V5Y29kZSA9IGRldi0+a2V5bWFwOworCWlucHV0X2Rldi0+a2V5Y29kZXNpemUgPSBzaXplb2YodW5zaWduZWQgY2hhcik7CisJaW5wdXRfZGV2LT5rZXljb2RlbWF4ID0gQVJSQVlfU0laRShkZXYtPmtleW1hcCk7CisKKwlpbnB1dF9kZXYtPmV2Yml0WzBdID0gQklUX01BU0soRVZfS0VZKSB8IEJJVF9NQVNLKEVWX1NORCk7CisJaW5wdXRfZGV2LT5zbmRiaXRbMF0gPSBCSVRfTUFTSyhTTkRfQkVMTCkgfCBCSVRfTUFTSyhTTkRfVE9ORSk7CisKKwkvKiByZWdpc3RlciBhdmFpbGFibGUga2V5IGV2ZW50cyAqLworCWZvciAoaSA9IDA7IGkgPCBLRVlNQVBfU0laRTsgaSsrKSB7CisJCXVuc2lnbmVkIHNob3J0IGsgPSBrZXltYXAoaSk7CisJCWRldi0+a2V5bWFwW2ldID0gazsKKwkJX19zZXRfYml0KGssIGlucHV0X2Rldi0+a2V5Yml0KTsKKwl9CisJX19jbGVhcl9iaXQoS0VZX1JFU0VSVkVELCBpbnB1dF9kZXYtPmtleWJpdCk7CisKKwllcnJvciA9IGlucHV0X3JlZ2lzdGVyX2RldmljZShkZXYtPmlkZXYpOworCWlmIChlcnJvcikKKwkJZ290byBlcnJfb3V0OworCisJdXNiX3NldF9pbnRmZGF0YShpbnRmLCBkZXYpOworCisJcmV0dXJuIDA7CisKKyBlcnJfb3V0OgorCWlucHV0X2ZyZWVfZGV2aWNlKGlucHV0X2Rldik7CisJY20xMDlfdXNiX2NsZWFudXAoZGV2KTsKKwlyZXR1cm4gZXJyb3I7Cit9CisKK3N0YXRpYyBpbnQgY20xMDlfdXNiX3N1c3BlbmQoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsIHBtX21lc3NhZ2VfdCBtZXNzYWdlKQoreworCXN0cnVjdCBjbTEwOV9kZXYgKmRldiA9IHVzYl9nZXRfaW50ZmRhdGEoaW50Zik7CisKKwlkZXZfaW5mbygmaW50Zi0+ZGV2LCAiY20xMDk6IHVzYl9zdXNwZW5kIChldmVudD0lZClcbiIsIG1lc3NhZ2UuZXZlbnQpOworCisJbXV0ZXhfbG9jaygmZGV2LT5wbV9tdXRleCk7CisJY20xMDlfc3RvcF90cmFmZmljKGRldik7CisJbXV0ZXhfdW5sb2NrKCZkZXYtPnBtX211dGV4KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGNtMTA5X3VzYl9yZXN1bWUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCit7CisJc3RydWN0IGNtMTA5X2RldiAqZGV2ID0gdXNiX2dldF9pbnRmZGF0YShpbnRmKTsKKworCWRldl9pbmZvKCZpbnRmLT5kZXYsICJjbTEwOTogdXNiX3Jlc3VtZVxuIik7CisKKwltdXRleF9sb2NrKCZkZXYtPnBtX211dGV4KTsKKwljbTEwOV9yZXN0b3JlX3N0YXRlKGRldik7CisJbXV0ZXhfdW5sb2NrKCZkZXYtPnBtX211dGV4KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGNtMTA5X3VzYl9wcmVfcmVzZXQoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCit7CisJc3RydWN0IGNtMTA5X2RldiAqZGV2ID0gdXNiX2dldF9pbnRmZGF0YShpbnRmKTsKKworCW11dGV4X2xvY2soJmRldi0+cG1fbXV0ZXgpOworCisJLyoKKwkgKiBNYWtlIHN1cmUgaW5wdXQgZXZlbnRzIGRvbid0IHRyeSB0byB0b2dnbGUgYnV6emVyCisJICogd2hpbGUgd2UgYXJlIHJlc2V0dGluZworCSAqLworCWRldi0+cmVzZXR0aW5nID0gMTsKKwlzbXBfd21iKCk7CisKKwljbTEwOV9zdG9wX3RyYWZmaWMoZGV2KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGNtMTA5X3VzYl9wb3N0X3Jlc2V0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKQoreworCXN0cnVjdCBjbTEwOV9kZXYgKmRldiA9IHVzYl9nZXRfaW50ZmRhdGEoaW50Zik7CisKKwlkZXYtPnJlc2V0dGluZyA9IDA7CisJc21wX3dtYigpOworCisJY20xMDlfcmVzdG9yZV9zdGF0ZShkZXYpOworCisJbXV0ZXhfdW5sb2NrKCZkZXYtPnBtX211dGV4KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgY20xMDlfZHJpdmVyID0geworCS5uYW1lCQk9ICJjbTEwOSIsCisJLnByb2JlCQk9IGNtMTA5X3VzYl9wcm9iZSwKKwkuZGlzY29ubmVjdAk9IGNtMTA5X3VzYl9kaXNjb25uZWN0LAorCS5zdXNwZW5kCT0gY20xMDlfdXNiX3N1c3BlbmQsCisJLnJlc3VtZQkJPSBjbTEwOV91c2JfcmVzdW1lLAorCS5yZXNldF9yZXN1bWUJPSBjbTEwOV91c2JfcmVzdW1lLAorCS5wcmVfcmVzZXQJPSBjbTEwOV91c2JfcHJlX3Jlc2V0LAorCS5wb3N0X3Jlc2V0CT0gY20xMDlfdXNiX3Bvc3RfcmVzZXQsCisJLmlkX3RhYmxlCT0gY20xMDlfdXNiX3RhYmxlLAorCS5zdXBwb3J0c19hdXRvc3VzcGVuZCA9IDEsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBjbTEwOV9zZWxlY3Rfa2V5bWFwKHZvaWQpCit7CisJLyogTG9hZCB0aGUgcGhvbmUga2V5bWFwICovCisJaWYgKCFzdHJjYXNlY21wKHBob25lLCAia2lwMTAwMCIpKSB7CisJCWtleW1hcCA9IGtleW1hcF9raXAxMDAwOworCQlwcmludGsoS0VSTl9JTkZPIEtCVUlMRF9NT0ROQU1FICI6ICIKKwkJCSJLZXltYXAgZm9yIEtvbXVuaWthdGUgS0lQMTAwMCBwaG9uZSBsb2FkZWRcbiIpOworCX0gZWxzZSBpZiAoIXN0cmNhc2VjbXAocGhvbmUsICJndGFsayIpKSB7CisJCWtleW1hcCA9IGtleW1hcF9ndGFsazsKKwkJcHJpbnRrKEtFUk5fSU5GTyBLQlVJTERfTU9ETkFNRSAiOiAiCisJCQkiS2V5bWFwIGZvciBHZW5pdXMgRy10YWxrIHBob25lIGxvYWRlZFxuIik7CisJfSBlbHNlIGlmICghc3RyY2FzZWNtcChwaG9uZSwgInVzYnBoMDEiKSkgeworCQlrZXltYXAgPSBrZXltYXBfdXNicGgwMTsKKwkJcHJpbnRrKEtFUk5fSU5GTyBLQlVJTERfTU9ETkFNRSAiOiAiCisJCQkiS2V5bWFwIGZvciBBbGxpZWQtVGVsZXNpcyBDb3JlZ2EgVVNCUEgwMSBwaG9uZSBsb2FkZWRcbiIpOworCX0gZWxzZSB7CisJCXByaW50ayhLRVJOX0VSUiBLQlVJTERfTU9ETkFNRSAiOiAiCisJCQkiVW5zdXBwb3J0ZWQgcGhvbmU6ICVzXG4iLCBwaG9uZSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IF9faW5pdCBjbTEwOV9pbml0KHZvaWQpCit7CisJaW50IGVycjsKKworCWVyciA9IGNtMTA5X3NlbGVjdF9rZXltYXAoKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJZXJyID0gdXNiX3JlZ2lzdGVyKCZjbTEwOV9kcml2ZXIpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwlwcmludGsoS0VSTl9JTkZPIEtCVUlMRF9NT0ROQU1FICI6ICIKKwkJRFJJVkVSX0RFU0MgIjogIiBEUklWRVJfVkVSU0lPTiAiIChDKSAiIERSSVZFUl9BVVRIT1IgIlxuIik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGNtMTA5X2V4aXQodm9pZCkKK3sKKwl1c2JfZGVyZWdpc3RlcigmY20xMDlfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQoY20xMDlfaW5pdCk7Cittb2R1bGVfZXhpdChjbTEwOV9leGl0KTsKKworTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIGNtMTA5X3VzYl90YWJsZSk7CisKK01PRFVMRV9BVVRIT1IoRFJJVkVSX0FVVEhPUik7CitNT0RVTEVfREVTQ1JJUFRJT04oRFJJVkVSX0RFU0MpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9taXNjL2hwX3NkY19ydGMuYyBiL2RyaXZlcnMvaW5wdXQvbWlzYy9ocF9zZGNfcnRjLmMKaW5kZXggZGFhOWQ0Mi4uODJlYzZiMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9taXNjL2hwX3NkY19ydGMuYworKysgYi9kcml2ZXJzL2lucHV0L21pc2MvaHBfc2RjX3J0Yy5jCkBAIC00NTgsMzUgKzQ1OCwzNSBAQAogCQlwICs9IHNwcmludGYocCwgImk4MDQyIHJ0Y1x0OiBSRUFEIEZBSUxFRCFcbiIpOwogCX0gZWxzZSB7CiAJCXAgKz0gc3ByaW50ZihwLCAiaTgwNDIgcnRjXHQ6ICVsZC4lMDJkIHNlY29uZHNcbiIsIAotCQkJICAgICB0di50dl9zZWMsIHR2LnR2X3VzZWMvMTAwMCk7CisJCQkgICAgIHR2LnR2X3NlYywgKGludCl0di50dl91c2VjLzEwMDApOwogCX0KIAogCWlmIChocF9zZGNfcnRjX3JlYWRfZmhzKCZ0dikpIHsKIAkJcCArPSBzcHJpbnRmKHAsICJoYW5kc2hha2VcdDogUkVBRCBGQUlMRUQhXG4iKTsKIAl9IGVsc2UgewogICAgICAgICAJcCArPSBzcHJpbnRmKHAsICJoYW5kc2hha2VcdDogJWxkLiUwMmQgc2Vjb25kc1xuIiwgCi0JCQkgICAgIHR2LnR2X3NlYywgdHYudHZfdXNlYy8xMDAwKTsKKwkJCSAgICAgdHYudHZfc2VjLCAoaW50KXR2LnR2X3VzZWMvMTAwMCk7CiAJfQogCiAJaWYgKGhwX3NkY19ydGNfcmVhZF9tdCgmdHYpKSB7CiAJCXAgKz0gc3ByaW50ZihwLCAiYWxhcm1cdFx0OiBSRUFEIEZBSUxFRCFcbiIpOwogCX0gZWxzZSB7CiAJCXAgKz0gc3ByaW50ZihwLCAiYWxhcm1cdFx0OiAlbGQuJTAyZCBzZWNvbmRzXG4iLCAKLQkJCSAgICAgdHYudHZfc2VjLCB0di50dl91c2VjLzEwMDApOworCQkJICAgICB0di50dl9zZWMsIChpbnQpdHYudHZfdXNlYy8xMDAwKTsKIAl9CiAKIAlpZiAoaHBfc2RjX3J0Y19yZWFkX2R0KCZ0dikpIHsKIAkJcCArPSBzcHJpbnRmKHAsICJkZWxheVx0XHQ6IFJFQUQgRkFJTEVEIVxuIik7CiAJfSBlbHNlIHsKIAkJcCArPSBzcHJpbnRmKHAsICJkZWxheVx0XHQ6ICVsZC4lMDJkIHNlY29uZHNcbiIsIAotCQkJICAgICB0di50dl9zZWMsIHR2LnR2X3VzZWMvMTAwMCk7CisJCQkgICAgIHR2LnR2X3NlYywgKGludCl0di50dl91c2VjLzEwMDApOwogCX0KIAogCWlmIChocF9zZGNfcnRjX3JlYWRfY3QoJnR2KSkgewogCQlwICs9IHNwcmludGYocCwgInBlcmlvZGljXHQ6IFJFQUQgRkFJTEVEIVxuIik7CiAJfSBlbHNlIHsKIAkJcCArPSBzcHJpbnRmKHAsICJwZXJpb2RpY1x0OiAlbGQuJTAyZCBzZWNvbmRzXG4iLCAKLQkJCSAgICAgdHYudHZfc2VjLCB0di50dl91c2VjLzEwMDApOworCQkJICAgICB0di50dl9zZWMsIChpbnQpdHYudHZfdXNlYy8xMDAwKTsKIAl9CiAKICAgICAgICAgcCArPSBzcHJpbnRmKHAsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L21pc2MvbWFwX3RvXzdzZWdtZW50LmggYi9kcml2ZXJzL2lucHV0L21pc2MvbWFwX3RvXzdzZWdtZW50LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE0MjQwOTQuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9pbnB1dC9taXNjL21hcF90b183c2VnbWVudC5oCisrKyAvZGV2L251bGwKQEAgLTEsMTg5ICswLDAgQEAKLS8qCi0gKiBkcml2ZXJzL3VzYi9pbnB1dC9tYXBfdG9fN3NlZ21lbnQuaAotICoKLSAqIENvcHlyaWdodCAoYykgMjAwNSBIZW5rIFZlcmdvbmV0IDxIZW5rLlZlcmdvbmV0QGdtYWlsLmNvbT4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKLSAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQotICovCi0KLSNpZm5kZWYgTUFQX1RPXzdTRUdNRU5UX0gKLSNkZWZpbmUgTUFQX1RPXzdTRUdNRU5UX0gKLQotLyogVGhpcyBmaWxlIHByb3ZpZGVzIHRyYW5zbGF0aW9uIHByaW1pdGl2ZXMgYW5kIHRhYmxlcyBmb3IgdGhlIGNvbnZlcnNpb24KLSAqIG9mIChBU0NJSSkgY2hhcmFjdGVycyB0byBhIDctc2VnbWVudHMgbm90YXRpb24uCi0gKgotICogVGhlIDcgc2VnbWVudCdzIHdpa2lwZWRpYSBub3RhdGlvbiBiZWxvdyBpcyB1c2VkIGFzIHN0YW5kYXJkLgotICogU2VlOiBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1NldmVuX3NlZ21lbnRfZGlzcGxheQotICoKLSAqIE5vdGF0aW9uOgkrLWEtKwotICoJCWYgICBiCi0gKgkJKy1nLSsKLSAqCQllICAgYwotICoJCSstZC0rCi0gKgotICogVXNhZ2U6Ci0gKgotICogICBSZWdpc3RlciBhIG1hcCB2YXJpYWJsZSwgYW5kIGZpbGwgaXQgd2l0aCBhIGNoYXJhY3RlciBzZXQ6Ci0gKiAJc3RhdGljIFNFRzdfREVGQVVMVF9NQVAobWFwX3NlZzcpOwotICoKLSAqCi0gKiAgIFRoZW4gdXNlIGZvciBjb252ZXJzaW9uOgotICoJc2VnNyA9IG1hcF90b19zZWc3KCZtYXBfc2VnNywgc29tZV9jaGFyKTsKLSAqCS4uLgotICoKLSAqIEluIGRldmljZSBkcml2ZXJzIGl0IGlzIHJlY29tbWVuZGVkLCBpZiByZXF1aXJlZCwgdG8gbWFrZSB0aGUgY2hhciBtYXAKLSAqIGFjY2Vzc2libGUgdmlhIHRoZSBzeXNmcyBpbnRlcmZhY2UgdXNpbmcgdGhlIGZvbGxvd2luZyBzY2hlbWU6Ci0gKgotICogc3RhdGljIHNzaXplX3Qgc2hvd19tYXAoc3RydWN0IGRldmljZSAqZGV2LCBjaGFyICpidWYpIHsKLSAqCW1lbWNweShidWYsICZtYXBfc2VnNywgc2l6ZW9mKG1hcF9zZWc3KSk7Ci0gKglyZXR1cm4gc2l6ZW9mKG1hcF9zZWc3KTsKLSAqIH0KLSAqIHN0YXRpYyBzc2l6ZV90IHN0b3JlX21hcChzdHJ1Y3QgZGV2aWNlICpkZXYsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNudCkgewotICoJaWYoY250ICE9IHNpemVvZihtYXBfc2VnNykpCi0gKgkJcmV0dXJuIC1FSU5WQUw7Ci0gKgltZW1jcHkoJm1hcF9zZWc3LCBidWYsIGNudCk7Ci0gKglyZXR1cm4gY250OwotICogfQotICogc3RhdGljIERFVklDRV9BVFRSKG1hcF9zZWc3LCBQRVJNU19SVywgc2hvd19tYXAsIHN0b3JlX21hcCk7Ci0gKgotICogSGlzdG9yeToKLSAqIDIwMDUtMDUtMzEJUkZDIGxpbnV4LWtlcm5lbEB2Z2VyLmtlcm5lbC5vcmcKLSAqLwotI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+Ci0KLQotI2RlZmluZSBCSVRfU0VHN19BCQkwCi0jZGVmaW5lIEJJVF9TRUc3X0IJCTEKLSNkZWZpbmUgQklUX1NFRzdfQwkJMgotI2RlZmluZSBCSVRfU0VHN19ECQkzCi0jZGVmaW5lIEJJVF9TRUc3X0UJCTQKLSNkZWZpbmUgQklUX1NFRzdfRgkJNQotI2RlZmluZSBCSVRfU0VHN19HCQk2Ci0jZGVmaW5lIEJJVF9TRUc3X1JFU0VSVkVECTcKLQotc3RydWN0IHNlZzdfY29udmVyc2lvbl9tYXAgewotCXVuc2lnbmVkIGNoYXIJdGFibGVbMTI4XTsKLX07Ci0KLXN0YXRpYyBpbmxpbmUgaW50IG1hcF90b19zZWc3KHN0cnVjdCBzZWc3X2NvbnZlcnNpb25fbWFwICptYXAsIGludCBjKQotewotCXJldHVybiBjID49IDAgJiYgYyA8IHNpemVvZihtYXAtPnRhYmxlKSA/IG1hcC0+dGFibGVbY10gOiAtRUlOVkFMOwotfQotCi0jZGVmaW5lIFNFRzdfQ09OVkVSU0lPTl9NQVAoX25hbWUsIF9tYXApCVwKLQlzdHJ1Y3Qgc2VnN19jb252ZXJzaW9uX21hcCBfbmFtZSA9IHsgLnRhYmxlID0geyBfbWFwIH0gfQotCi0vKgotICogSXQgaXMgcmVjb21tZW5kZWQgdG8gdXNlIGEgZmFjaWxpdHkgdGhhdCBhbGxvd3MgdXNlciBzcGFjZSB0byByZWRlZmluZQotICogY3VzdG9tIGNoYXJhY3RlciBzZXRzIGZvciBMQ0QgZGV2aWNlcy4gUGxlYXNlIHVzZSBhIHN5c2ZzIGludGVyZmFjZQotICogYXMgZGVzY3JpYmVkIGFib3ZlLgotICovCi0jZGVmaW5lIE1BUF9UT19TRUc3X1NZU0ZTX0ZJTEUJIm1hcF9zZWc3IgotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQVNDSUkgY29udmVyc2lvbiB0YWJsZQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotI2RlZmluZSBfU0VHNyhsLGEsYixjLGQsZSxmLGcpCVwKLSAgICAgICgJYTw8QklUX1NFRzdfQSB8CWI8PEJJVF9TRUc3X0IgfAljPDxCSVRfU0VHN19DIHwJZDw8QklUX1NFRzdfRCB8CVwKLQllPDxCSVRfU0VHN19FIHwJZjw8QklUX1NFRzdfRiB8CWc8PEJJVF9TRUc3X0cgKQotCi0jZGVmaW5lIF9NQVBfMF8zMl9BU0NJSV9TRUc3X05PTl9QUklOVEFCTEUJXAotCTAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLAotCi0jZGVmaW5lIF9NQVBfMzNfNDdfQVNDSUlfU0VHN19TWU1CT0wJCVwKLSBfU0VHNygnIScsMCwwLDAsMCwxLDEsMCksIF9TRUc3KCciJywwLDEsMCwwLDAsMSwwKSwgX1NFRzcoJyMnLDAsMSwxLDAsMSwxLDApLFwKLSBfU0VHNygnJCcsMSwwLDEsMSwwLDEsMSksIF9TRUc3KCclJywwLDAsMSwwLDAsMSwwKSwgX1NFRzcoJyYnLDEsMCwxLDEsMSwxLDEpLFwKLSBfU0VHNygnXCcnLDAsMCwwLDAsMCwxLDApLF9TRUc3KCcoJywxLDAsMCwxLDEsMSwwKSwgX1NFRzcoJyknLDEsMSwxLDEsMCwwLDApLFwKLSBfU0VHNygnKicsMCwxLDEsMCwxLDEsMSksIF9TRUc3KCcrJywwLDEsMSwwLDAsMCwxKSwgX1NFRzcoJywnLDAsMCwwLDAsMSwwLDApLFwKLSBfU0VHNygnLScsMCwwLDAsMCwwLDAsMSksIF9TRUc3KCcuJywwLDAsMCwwLDEsMCwwKSwgX1NFRzcoJy8nLDAsMSwwLDAsMSwwLDEpLAotCi0jZGVmaW5lIF9NQVBfNDhfNTdfQVNDSUlfU0VHN19OVU1FUklDCQlcCi0gX1NFRzcoJzAnLDEsMSwxLDEsMSwxLDApLCBfU0VHNygnMScsMCwxLDEsMCwwLDAsMCksIF9TRUc3KCcyJywxLDEsMCwxLDEsMCwxKSxcCi0gX1NFRzcoJzMnLDEsMSwxLDEsMCwwLDEpLCBfU0VHNygnNCcsMCwxLDEsMCwwLDEsMSksIF9TRUc3KCc1JywxLDAsMSwxLDAsMSwxKSxcCi0gX1NFRzcoJzYnLDEsMCwxLDEsMSwxLDEpLCBfU0VHNygnNycsMSwxLDEsMCwwLDAsMCksIF9TRUc3KCc4JywxLDEsMSwxLDEsMSwxKSxcCi0gX1NFRzcoJzknLDEsMSwxLDEsMCwxLDEpLAotCi0jZGVmaW5lIF9NQVBfNThfNjRfQVNDSUlfU0VHN19TWU1CT0wJCVwKLSBfU0VHNygnOicsMCwwLDAsMSwwLDAsMSksIF9TRUc3KCc7JywwLDAsMCwxLDAsMCwxKSwgX1NFRzcoJzwnLDEsMCwwLDAsMCwxLDEpLFwKLSBfU0VHNygnPScsMCwwLDAsMSwwLDAsMSksIF9TRUc3KCc+JywxLDEsMCwwLDAsMCwxKSwgX1NFRzcoJz8nLDEsMSwxLDAsMCwxLDApLFwKLSBfU0VHNygnQCcsMSwxLDAsMSwxLDEsMSksCi0KLSNkZWZpbmUgX01BUF82NV85MF9BU0NJSV9TRUc3X0FMUEhBX1VQUFIJXAotIF9TRUc3KCdBJywxLDEsMSwwLDEsMSwxKSwgX1NFRzcoJ0InLDEsMSwxLDEsMSwxLDEpLCBfU0VHNygnQycsMSwwLDAsMSwxLDEsMCksXAotIF9TRUc3KCdEJywxLDEsMSwxLDEsMSwwKSwgX1NFRzcoJ0UnLDEsMCwwLDEsMSwxLDEpLCBfU0VHNygnRicsMSwwLDAsMCwxLDEsMSksXAotIF9TRUc3KCdHJywxLDEsMSwxLDAsMSwxKSwgX1NFRzcoJ0gnLDAsMSwxLDAsMSwxLDEpLCBfU0VHNygnSScsMCwxLDEsMCwwLDAsMCksXAotIF9TRUc3KCdKJywwLDEsMSwxLDAsMCwwKSwgX1NFRzcoJ0snLDAsMSwxLDAsMSwxLDEpLCBfU0VHNygnTCcsMCwwLDAsMSwxLDEsMCksXAotIF9TRUc3KCdNJywxLDEsMSwwLDEsMSwwKSwgX1NFRzcoJ04nLDEsMSwxLDAsMSwxLDApLCBfU0VHNygnTycsMSwxLDEsMSwxLDEsMCksXAotIF9TRUc3KCdQJywxLDEsMCwwLDEsMSwxKSwgX1NFRzcoJ1EnLDEsMSwxLDEsMSwxLDApLCBfU0VHNygnUicsMSwxLDEsMCwxLDEsMSksXAotIF9TRUc3KCdTJywxLDAsMSwxLDAsMSwxKSwgX1NFRzcoJ1QnLDAsMCwwLDEsMSwxLDEpLCBfU0VHNygnVScsMCwxLDEsMSwxLDEsMCksXAotIF9TRUc3KCdWJywwLDEsMSwxLDEsMSwwKSwgX1NFRzcoJ1cnLDAsMSwxLDEsMSwxLDEpLCBfU0VHNygnWCcsMCwxLDEsMCwxLDEsMSksXAotIF9TRUc3KCdZJywwLDEsMSwwLDAsMSwxKSwgX1NFRzcoJ1onLDEsMSwwLDEsMSwwLDEpLAotCi0jZGVmaW5lIF9NQVBfOTFfOTZfQVNDSUlfU0VHN19TWU1CT0wJCVwKLSBfU0VHNygnWycsMSwwLDAsMSwxLDEsMCksIF9TRUc3KCdcXCcsMCwwLDEsMCwwLDEsMSksX1NFRzcoJ10nLDEsMSwxLDEsMCwwLDApLFwKLSBfU0VHNygnXicsMSwxLDAsMCwwLDEsMCksIF9TRUc3KCdfJywwLDAsMCwxLDAsMCwwKSwgX1NFRzcoJ2AnLDAsMSwwLDAsMCwwLDApLAotCi0jZGVmaW5lIF9NQVBfOTdfMTIyX0FTQ0lJX1NFRzdfQUxQSEFfTE9XRVIJXAotIF9TRUc3KCdBJywxLDEsMSwwLDEsMSwxKSwgX1NFRzcoJ2InLDAsMCwxLDEsMSwxLDEpLCBfU0VHNygnYycsMCwwLDAsMSwxLDAsMSksXAotIF9TRUc3KCdkJywwLDEsMSwxLDEsMCwxKSwgX1NFRzcoJ0UnLDEsMCwwLDEsMSwxLDEpLCBfU0VHNygnRicsMSwwLDAsMCwxLDEsMSksXAotIF9TRUc3KCdHJywxLDEsMSwxLDAsMSwxKSwgX1NFRzcoJ2gnLDAsMCwxLDAsMSwxLDEpLCBfU0VHNygnaScsMCwwLDEsMCwwLDAsMCksXAotIF9TRUc3KCdqJywwLDAsMSwxLDAsMCwwKSwgX1NFRzcoJ2snLDAsMCwxLDAsMSwxLDEpLCBfU0VHNygnTCcsMCwwLDAsMSwxLDEsMCksXAotIF9TRUc3KCdNJywxLDEsMSwwLDEsMSwwKSwgX1NFRzcoJ24nLDAsMCwxLDAsMSwwLDEpLCBfU0VHNygnbycsMCwwLDEsMSwxLDAsMSksXAotIF9TRUc3KCdQJywxLDEsMCwwLDEsMSwxKSwgX1NFRzcoJ3EnLDEsMSwxLDAsMCwxLDEpLCBfU0VHNygncicsMCwwLDAsMCwxLDAsMSksXAotIF9TRUc3KCdTJywxLDAsMSwxLDAsMSwxKSwgX1NFRzcoJ1QnLDAsMCwwLDEsMSwxLDEpLCBfU0VHNygndScsMCwwLDEsMSwxLDAsMCksXAotIF9TRUc3KCd2JywwLDAsMSwxLDEsMCwwKSwgX1NFRzcoJ1cnLDAsMSwxLDEsMSwxLDEpLCBfU0VHNygnWCcsMCwxLDEsMCwxLDEsMSksXAotIF9TRUc3KCd5JywwLDEsMSwxLDAsMSwxKSwgX1NFRzcoJ1onLDEsMSwwLDEsMSwwLDEpLAotCi0jZGVmaW5lIF9NQVBfMTIzXzEyNl9BU0NJSV9TRUc3X1NZTUJPTAkJXAotIF9TRUc3KCd7JywxLDAsMCwxLDEsMSwwKSwgX1NFRzcoJ3wnLDAsMCwwLDAsMSwxLDApLCBfU0VHNygnfScsMSwxLDEsMSwwLDAsMCksXAotIF9TRUc3KCd+JywxLDAsMCwwLDAsMCwwKSwKLQotLyogTWFwcyAqLwotCi0vKiBUaGlzIHNldCB0cmllcyB0byBtYXAgYXMgY2xvc2UgYXMgcG9zc2libGUgdG8gdGhlIHZpc2libGUgY2hhcmFjdGVyaXN0aWNzCi0gKiBvZiB0aGUgQVNDSUkgc3ltYm9sLCBsb3dlcmNhc2UgYW5kIHVwcGVyY2FzZSBsZXR0ZXJzIG1heSBkaWZmZXIgaW4KLSAqIHByZXNlbnRhdGlvbiBvbiB0aGUgZGlzcGxheS4KLSAqLwotI2RlZmluZSBNQVBfQVNDSUk3U0VHX0FMUEhBTlVNCQkJXAotCV9NQVBfMF8zMl9BU0NJSV9TRUc3X05PTl9QUklOVEFCTEUJXAotCV9NQVBfMzNfNDdfQVNDSUlfU0VHN19TWU1CT0wJCVwKLQlfTUFQXzQ4XzU3X0FTQ0lJX1NFRzdfTlVNRVJJQwkJXAotCV9NQVBfNThfNjRfQVNDSUlfU0VHN19TWU1CT0wJCVwKLQlfTUFQXzY1XzkwX0FTQ0lJX1NFRzdfQUxQSEFfVVBQUglcCi0JX01BUF85MV85Nl9BU0NJSV9TRUc3X1NZTUJPTAkJXAotCV9NQVBfOTdfMTIyX0FTQ0lJX1NFRzdfQUxQSEFfTE9XRVIJXAotCV9NQVBfMTIzXzEyNl9BU0NJSV9TRUc3X1NZTUJPTAotCi0vKiBUaGlzIHNldCB0cmllcyB0byBtYXAgYXMgY2xvc2UgYXMgcG9zc2libGUgdG8gdGhlIHN5bWJvbGljIGNoYXJhY3RlcmlzdGljcwotICogb2YgdGhlIEFTQ0lJIGNoYXJhY3RlciBmb3IgbWF4aW11bSBkaXNjcmltaW5hdGlvbi4KLSAqIEZvciBub3cgdGhpcyBtZWFucyBhbGwgYWxwaGEgY2hhcnMgYXJlIGluIGxvd2VyIGNhc2UgcmVwcmVzZW50YXRpb25zLgotICogKFRoaXMgZm9yIGV4YW1wbGUgZmFjaWxpdGF0ZXMgdGhlIHVzZSBvZiBoZXggbnVtYmVycyB3aXRoIHVwcGVyY2FzZSBpbnB1dC4pCi0gKi8KLSNkZWZpbmUgTUFQX0FTQ0lJN1NFR19BTFBIQU5VTV9MQwkJCVwKLQlfTUFQXzBfMzJfQVNDSUlfU0VHN19OT05fUFJJTlRBQkxFCVwKLQlfTUFQXzMzXzQ3X0FTQ0lJX1NFRzdfU1lNQk9MCQlcCi0JX01BUF80OF81N19BU0NJSV9TRUc3X05VTUVSSUMJCVwKLQlfTUFQXzU4XzY0X0FTQ0lJX1NFRzdfU1lNQk9MCQlcCi0JX01BUF85N18xMjJfQVNDSUlfU0VHN19BTFBIQV9MT1dFUglcCi0JX01BUF85MV85Nl9BU0NJSV9TRUc3X1NZTUJPTAkJXAotCV9NQVBfOTdfMTIyX0FTQ0lJX1NFRzdfQUxQSEFfTE9XRVIJXAotCV9NQVBfMTIzXzEyNl9BU0NJSV9TRUc3X1NZTUJPTAotCi0jZGVmaW5lIFNFRzdfREVGQVVMVF9NQVAoX25hbWUpCQlcCi0JU0VHN19DT05WRVJTSU9OX01BUChfbmFtZSxNQVBfQVNDSUk3U0VHX0FMUEhBTlVNKQotCi0jZW5kaWYJLyogTUFQX1RPXzdTRUdNRU5UX0ggKi8KLQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9taXNjL3dpc3Ryb25fYnRucy5jIGIvZHJpdmVycy9pbnB1dC9taXNjL3dpc3Ryb25fYnRucy5jCmluZGV4IGZlMjY4YmUuLjdjODk1N2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvbWlzYy93aXN0cm9uX2J0bnMuYworKysgYi9kcml2ZXJzL2lucHV0L21pc2Mvd2lzdHJvbl9idG5zLmMKQEAgLTI3Nyw2ICsyNzcsMTYgQEAKIAl7IEtFX0VORCwgIDAgfQogfTsKIAorc3RhdGljIHN0cnVjdCBrZXlfZW50cnkga2V5bWFwX2ZzX2FtaWxvX3Byb192MzUwNVtdIF9faW5pdGRhdGEgPSB7CisJeyBLRV9LRVksICAgICAgIDB4MDEsIHtLRVlfSEVMUH0gfSwgICAgICAgICAgLyogRm4rRjEgKi8KKwl7IEtFX0tFWSwgICAgICAgMHgwNiwge0tFWV9ESVNQTEFZVE9HR0xFfSB9LCAvKiBGbitGNCAqLworCXsgS0VfQkxVRVRPT1RILCAweDMwIH0sICAgICAgICAgICAgICAgICAgICAgIC8qIEZuK0YxMCAqLworCXsgS0VfS0VZLCAgICAgICAweDMxLCB7S0VZX01BSUx9IH0sICAgICAgICAgIC8qIG1haWwgYnV0dG9uICovCisJeyBLRV9LRVksICAgICAgIDB4MzYsIHtLRVlfV1dXfSB9LCAgICAgICAgICAgLyogd3d3IGJ1dHRvbiAqLworCXsgS0VfV0lGSSwgICAgICAweDc4IH0sICAgICAgICAgICAgICAgICAgICAgIC8qIHNhdGVsaXRlIGRpc2ggYnV0dG9uICovCisJeyBLRV9FTkQsICAgICAgIDAgfQorfTsKKwogc3RhdGljIHN0cnVjdCBrZXlfZW50cnkga2V5bWFwX2Z1aml0c3VfbjM1MTBbXSBfX2luaXRkYXRhID0gewogCXsgS0VfS0VZLCAweDExLCB7S0VZX1BST0cxfSB9LAogCXsgS0VfS0VZLCAweDEyLCB7S0VZX1BST0cyfSB9LApAQCAtNjE4LDYgKzYyOCwxNSBAQAogCX0sCiAJewogCQkuY2FsbGJhY2sgPSBkbWlfbWF0Y2hlZCwKKwkJLmlkZW50ID0gIkZ1aml0c3UtU2llbWVucyBBbWlsbyBQcm8gRWRpdGlvbiBWMzUwNSIsCisJCS5tYXRjaGVzID0geworCQkJRE1JX01BVENIKERNSV9TWVNfVkVORE9SLCAiRlVKSVRTVSBTSUVNRU5TIiksCisJCQlETUlfTUFUQ0goRE1JX1BST0RVQ1RfTkFNRSwgIkFNSUxPIFBybyBFZGl0aW9uIFYzNTA1IiksCisJCX0sCisJCS5kcml2ZXJfZGF0YSA9IGtleW1hcF9mc19hbWlsb19wcm9fdjM1MDUKKwl9LAorCXsKKwkJLmNhbGxiYWNrID0gZG1pX21hdGNoZWQsCiAJCS5pZGVudCA9ICJGdWppdHN1LVNpZW1lbnMgQW1pbG8gTTc0MDAiLAogCQkubWF0Y2hlcyA9IHsKIAkJCURNSV9NQVRDSChETUlfU1lTX1ZFTkRPUiwgIkZVSklUU1UgU0lFTUVOUyIpLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuYyBiL2RyaXZlcnMvaW5wdXQvbWlzYy95ZWFsaW5rLmMKaW5kZXggZmFjZWZkMy4uOTNhMjJhYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuYworKysgYi9kcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jCkBAIC01Miw4ICs1Miw4IEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvcndzZW0uaD4KICNpbmNsdWRlIDxsaW51eC91c2IvaW5wdXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tYXBfdG9fN3NlZ21lbnQuaD4KIAotI2luY2x1ZGUgIm1hcF90b183c2VnbWVudC5oIgogI2luY2x1ZGUgInllYWxpbmsuaCIKIAogI2RlZmluZSBEUklWRVJfVkVSU0lPTiAieWxkLTIwMDUxMjMwIgpAQCAtOTk5LDcgKzk5OSw4IEBACiB7CiAJaW50IHJldCA9IHVzYl9yZWdpc3RlcigmeWVhbGlua19kcml2ZXIpOwogCWlmIChyZXQgPT0gMCkKLQkJaW5mbyhEUklWRVJfREVTQyAiOiIgRFJJVkVSX1ZFUlNJT04pOworCQlwcmludGsoS0VSTl9JTkZPIEtCVUlMRF9NT0ROQU1FICI6ICIgRFJJVkVSX1ZFUlNJT04gIjoiCisJCSAgICAgICBEUklWRVJfREVTQyAiXG4iKTsKIAlyZXR1cm4gcmV0OwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L21vdXNlL0tjb25maWcgYi9kcml2ZXJzL2lucHV0L21vdXNlL0tjb25maWcKaW5kZXggZjk5NjU0Ni4uZjQ4OGI2OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9tb3VzZS9LY29uZmlnCisrKyBiL2RyaXZlcnMvaW5wdXQvbW91c2UvS2NvbmZpZwpAQCAtOTYsNiArOTYsMTYgQEAKIAogCSAgSWYgdW5zdXJlLCBzYXkgTi4KIAorY29uZmlnIE1PVVNFX1BTMl9PTFBDCisJYm9vbCAiT0xQQyBQUy8yIG1vdXNlIHByb3RvY29sIGV4dGVuc2lvbiIKKwlkZXBlbmRzIG9uIE1PVVNFX1BTMiAmJiBPTFBDCisJaGVscAorCSAgU2F5IFkgaGVyZSBpZiB5b3UgaGF2ZSBhbiBPTFBDIFhPLTEgbGFwdG9wICh3aXRoIGJ1aWx0LWluCisJICBQUy8yIHRvdWNocGFkL3RhYmxldCBkZXZpY2UpLiAgVGhlIG1hbnVmYWN0dXJlciBjYWxscyB0aGUKKwkgIHRvdWNocGFkIGFuIEhHUEsuCisKKwkgIElmIHVuc3VyZSwgc2F5IE4uCisKIGNvbmZpZyBNT1VTRV9TRVJJQUwKIAl0cmlzdGF0ZSAiU2VyaWFsIG1vdXNlIgogCXNlbGVjdCBTRVJJTwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9tb3VzZS9NYWtlZmlsZSBiL2RyaXZlcnMvaW5wdXQvbW91c2UvTWFrZWZpbGUKaW5kZXggZDRkMjAyNS4uOGU2ZTY5MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9tb3VzZS9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2lucHV0L21vdXNlL01ha2VmaWxlCkBAIC0yMSw2ICsyMSw3IEBACiBwc21vdXNlLW9ianMgOj0gcHNtb3VzZS1iYXNlLm8gc3luYXB0aWNzLm8KIAogcHNtb3VzZS0kKENPTkZJR19NT1VTRV9QUzJfQUxQUykJKz0gYWxwcy5vCitwc21vdXNlLSQoQ09ORklHX01PVVNFX1BTMl9PTFBDKQkrPSBoZ3BrLm8KIHBzbW91c2UtJChDT05GSUdfTU9VU0VfUFMyX0xPR0lQUzJQUCkJKz0gbG9naXBzMnBwLm8KIHBzbW91c2UtJChDT05GSUdfTU9VU0VfUFMyX0xJRkVCT09LKQkrPSBsaWZlYm9vay5vCiBwc21vdXNlLSQoQ09ORklHX01PVVNFX1BTMl9UUkFDS1BPSU5UKQkrPSB0cmFja3BvaW50Lm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvbW91c2UvYWxwcy5jIGIvZHJpdmVycy9pbnB1dC9tb3VzZS9hbHBzLmMKaW5kZXggMzg1ZTMyYi4uY2JlZGY5NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9tb3VzZS9hbHBzLmMKKysrIGIvZHJpdmVycy9pbnB1dC9tb3VzZS9hbHBzLmMKQEAgLTU0LDYgKzU0LDcgQEAKIAl7IHsgMHgyMCwgMHgwMiwgMHgwZSB9LAkweGY4LCAweGY4LCBBTFBTX1BBU1MgfCBBTFBTX0RVQUxQT0lOVCB9LCAvKiBYWFggKi8KIAl7IHsgMHgyMiwgMHgwMiwgMHgwYSB9LAkweGY4LCAweGY4LCBBTFBTX1BBU1MgfCBBTFBTX0RVQUxQT0lOVCB9LAogCXsgeyAweDIyLCAweDAyLCAweDE0IH0sIDB4ZmYsIDB4ZmYsIEFMUFNfUEFTUyB8IEFMUFNfRFVBTFBPSU5UIH0sIC8qIERlbGwgTGF0aXR1ZGUgRDYwMCAqLworCXsgeyAweDYyLCAweDAyLCAweDE0IH0sIDB4Y2YsIDB4Y2YsIEFMUFNfUEFTUyB8IEFMUFNfRFVBTFBPSU5UIH0sIC8qIERlbGwgTGF0aXR1ZGUgRTY1MDAgKi8KIAl7IHsgMHg3MywgMHgwMiwgMHg1MCB9LCAweGNmLCAweGNmLCBBTFBTX0ZXX0JLXzEgfSAvKiBEZWxsIFZvc3RybyAxNDAwICovCiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L21vdXNlL2FwcGxldG91Y2guYyBiL2RyaXZlcnMvaW5wdXQvbW91c2UvYXBwbGV0b3VjaC5jCmluZGV4IDFmNDFhZTkuLjA3OTgxNmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvbW91c2UvYXBwbGV0b3VjaC5jCisrKyBiL2RyaXZlcnMvaW5wdXQvbW91c2UvYXBwbGV0b3VjaC5jCkBAIC0xMzYsMTIgKzEzNiwyOCBAQAogI2RlZmluZSBBVFBfR0VZU0VSX01PREVfUkVRVUVTVF9JTkRFWAkJMAogI2RlZmluZSBBVFBfR0VZU0VSX01PREVfVkVORE9SX1ZBTFVFCQkweDA0CiAKKy8qKgorICogZW51bSBhdHBfc3RhdHVzX2JpdHMgLSBzdGF0dXMgYml0IG1lYW5pbmdzCisgKgorICogVGhlc2UgY29uc3RhbnRzIHJlcHJlc2VudCB0aGUgbWVhbmluZyBvZiB0aGUgc3RhdHVzIGJpdHMuCisgKiAob25seSBHZXlzZXIgMy80KQorICoKKyAqIEBBVFBfU1RBVFVTX0JVVFRPTjogVGhlIGJ1dHRvbiB3YXMgcHJlc3NlZAorICogQEFUUF9TVEFUVVNfQkFTRV9VUERBVEU6IFVwZGF0ZSBvZiB0aGUgYmFzZSB2YWx1ZXMgKHVudG91Y2hlZCBwYWQpCisgKiBAQVRQX1NUQVRVU19GUk9NX1JFU0VUOiBSZXNldCBwcmV2aW91c2x5IHBlcmZvcm1lZAorICovCitlbnVtIGF0cF9zdGF0dXNfYml0cyB7CisJQVRQX1NUQVRVU19CVVRUT04JPSBCSVQoMCksCisJQVRQX1NUQVRVU19CQVNFX1VQREFURQk9IEJJVCgyKSwKKwlBVFBfU1RBVFVTX0ZST01fUkVTRVQJPSBCSVQoNCksCit9OworCiAvKiBTdHJ1Y3R1cmUgdG8gaG9sZCBhbGwgb2Ygb3VyIGRldmljZSBzcGVjaWZpYyBzdHVmZiAqLwogc3RydWN0IGF0cCB7CiAJY2hhcgkJCXBoeXNbNjRdOwogCXN0cnVjdCB1c2JfZGV2aWNlCSp1ZGV2OwkJLyogdXNiIGRldmljZSAqLwogCXN0cnVjdCB1cmIJCSp1cmI7CQkvKiB1c2IgcmVxdWVzdCBibG9jayAqLwotCXNpZ25lZCBjaGFyCQkqZGF0YTsJCS8qIHRyYW5zZmVycmVkIGRhdGEgKi8KKwl1OAkJCSpkYXRhOwkJLyogdHJhbnNmZXJyZWQgZGF0YSAqLwogCXN0cnVjdCBpbnB1dF9kZXYJKmlucHV0OwkJLyogaW5wdXQgZGV2ICovCiAJZW51bSBhdHBfdG91Y2hwYWRfdHlwZQl0eXBlOwkJLyogdHlwZSBvZiB0b3VjaHBhZCAqLwogCWJvb2wJCQlvcGVuOwpAQCAtMjUxLDggKzI2Nyw2IEBACiAJaW50IHJldHZhbDsKIAogCWRwcmludGsoImFwcGxldG91Y2g6IHB1dHRpbmcgYXBwbGV0b3VjaCB0byBzbGVlcCAocmVpbml0KVxuIik7Ci0JZGV2LT5pZGxlY291bnQgPSAwOwotCiAJYXRwX2dleXNlcl9pbml0KHVkZXYpOwogCiAJcmV0dmFsID0gdXNiX3N1Ym1pdF91cmIoZGV2LT51cmIsIEdGUF9BVE9NSUMpOwpAQCAtMzI3LDExICszNDEsMTQgQEAKIAlpbnB1dF9yZXBvcnRfa2V5KGlucHV0LCBCVE5fVE9PTF9UUklQTEVUQVAsIGZpbmdlcnMgPiAyKTsKIH0KIAotc3RhdGljIHZvaWQgYXRwX2NvbXBsZXRlKHN0cnVjdCB1cmIgKnVyYikKKy8qIENoZWNrIFVSQiBzdGF0dXMgYW5kIGZvciBjb3JyZWN0IGxlbmd0aCBvZiBkYXRhIHBhY2thZ2UgKi8KKworI2RlZmluZSBBVFBfVVJCX1NUQVRVU19TVUNDRVNTCQkwCisjZGVmaW5lIEFUUF9VUkJfU1RBVFVTX0VSUk9SCQkxCisjZGVmaW5lIEFUUF9VUkJfU1RBVFVTX0VSUk9SX0ZBVEFMCTIKKworc3RhdGljIGludCBhdHBfc3RhdHVzX2NoZWNrKHN0cnVjdCB1cmIgKnVyYikKIHsKLQlpbnQgeCwgeSwgeF96LCB5X3osIHhfZiwgeV9mOwotCWludCByZXR2YWwsIGksIGo7Ci0JaW50IGtleTsKIAlzdHJ1Y3QgYXRwICpkZXYgPSB1cmItPmNvbnRleHQ7CiAKIAlzd2l0Y2ggKHVyYi0+c3RhdHVzKSB7CkBAIC0zNTEsMTEgKzM2OCwxMiBAQAogCQkvKiBUaGlzIHVyYiBpcyB0ZXJtaW5hdGVkLCBjbGVhbiB1cCAqLwogCQlkYmcoImF0cF9jb21wbGV0ZTogdXJiIHNodXR0aW5nIGRvd24gd2l0aCBzdGF0dXM6ICVkIiwKIAkJICAgIHVyYi0+c3RhdHVzKTsKLQkJcmV0dXJuOworCQlyZXR1cm4gQVRQX1VSQl9TVEFUVVNfRVJST1JfRkFUQUw7CisKIAlkZWZhdWx0OgogCQlkYmcoImF0cF9jb21wbGV0ZTogbm9uemVybyB1cmIgc3RhdHVzIHJlY2VpdmVkOiAlZCIsCiAJCSAgICB1cmItPnN0YXR1cyk7Ci0JCWdvdG8gZXhpdDsKKwkJcmV0dXJuIEFUUF9VUkJfU1RBVFVTX0VSUk9SOwogCX0KIAogCS8qIGRyb3AgaW5jb21wbGV0ZSBkYXRhc2V0cyAqLwpAQCAtMzYzLDMwICszODEsMzMgQEAKIAkJZHByaW50aygiYXBwbGV0b3VjaDogaW5jb21wbGV0ZSBkYXRhIHBhY2thZ2UiCiAJCQkiIChmaXJzdCBieXRlOiAlZCwgbGVuZ3RoOiAlZCkuXG4iLAogCQkJZGV2LT5kYXRhWzBdLCBkZXYtPnVyYi0+YWN0dWFsX2xlbmd0aCk7Ci0JCWdvdG8gZXhpdDsKKwkJcmV0dXJuIEFUUF9VUkJfU1RBVFVTX0VSUk9SOwogCX0KIAorCXJldHVybiBBVFBfVVJCX1NUQVRVU19TVUNDRVNTOworfQorCisvKgorICogVVNCIGludGVycnVwdCBjYWxsYmFjayBmdW5jdGlvbnMKKyAqLworCisvKiBJbnRlcnJ1cHQgZnVuY3Rpb24gZm9yIG9sZGVyIHRvdWNocGFkczogRk9VTlRBSU4vR0VZU0VSMS9HRVlTRVIyICovCisKK3N0YXRpYyB2b2lkIGF0cF9jb21wbGV0ZV9nZXlzZXJfMV8yKHN0cnVjdCB1cmIgKnVyYikKK3sKKwlpbnQgeCwgeSwgeF96LCB5X3osIHhfZiwgeV9mOworCWludCByZXR2YWwsIGksIGo7CisJaW50IGtleTsKKwlzdHJ1Y3QgYXRwICpkZXYgPSB1cmItPmNvbnRleHQ7CisJaW50IHN0YXR1cyA9IGF0cF9zdGF0dXNfY2hlY2sodXJiKTsKKworCWlmIChzdGF0dXMgPT0gQVRQX1VSQl9TVEFUVVNfRVJST1JfRkFUQUwpCisJCXJldHVybjsKKwllbHNlIGlmIChzdGF0dXMgPT0gQVRQX1VSQl9TVEFUVVNfRVJST1IpCisJCWdvdG8gZXhpdDsKKwogCS8qIHJlb3JkZXIgdGhlIHNlbnNvcnMgdmFsdWVzICovCi0JaWYgKGRldi0+dHlwZSA9PSBBVFBfR0VZU0VSMyB8fCBkZXYtPnR5cGUgPT0gQVRQX0dFWVNFUjQpIHsKLQkJbWVtc2V0KGRldi0+eHlfY3VyLCAwLCBzaXplb2YoZGV2LT54eV9jdXIpKTsKLQotCQkvKgotCQkgKiBUaGUgdmFsdWVzIGFyZSBsYWlkIG91dCBsaWtlIHRoaXM6Ci0JCSAqIC0sIFkxLCBZMiwgLSwgWTMsIFk0LCAtLCAuLi4sIC0sIFgxLCBYMiwgLSwgWDMsIFg0LCAuLi4KLQkJICogJy0nIGlzIGFuIHVudXNlZCB2YWx1ZS4KLQkJICovCi0KLQkJLyogcmVhZCBYIHZhbHVlcyAqLwotCQlmb3IgKGkgPSAwLCBqID0gMTk7IGkgPCAyMDsgaSArPSAyLCBqICs9IDMpIHsKLQkJCWRldi0+eHlfY3VyW2ldID0gZGV2LT5kYXRhW2ogKyAxXTsKLQkJCWRldi0+eHlfY3VyW2kgKyAxXSA9IGRldi0+ZGF0YVtqICsgMl07Ci0JCX0KLQkJLyogcmVhZCBZIHZhbHVlcyAqLwotCQlmb3IgKGkgPSAwLCBqID0gMTsgaSA8IDk7IGkgKz0gMiwgaiArPSAzKSB7Ci0JCQlkZXYtPnh5X2N1cltBVFBfWFNFTlNPUlMgKyBpXSA9IGRldi0+ZGF0YVtqICsgMV07Ci0JCQlkZXYtPnh5X2N1cltBVFBfWFNFTlNPUlMgKyBpICsgMV0gPSBkZXYtPmRhdGFbaiArIDJdOwotCQl9Ci0JfSBlbHNlIGlmIChkZXYtPnR5cGUgPT0gQVRQX0dFWVNFUjIpIHsKKwlpZiAoZGV2LT50eXBlID09IEFUUF9HRVlTRVIyKSB7CiAJCW1lbXNldChkZXYtPnh5X2N1ciwgMCwgc2l6ZW9mKGRldi0+eHlfY3VyKSk7CiAKIAkJLyoKQEAgLTQyNywzNCArNDQ4LDQwIEBACiAJCS8qIGZpcnN0IHNhbXBsZSAqLwogCQlkZXYtPnZhbGlkID0gdHJ1ZTsKIAkJZGV2LT54X29sZCA9IGRldi0+eV9vbGQgPSAtMTsKKworCQkvKiBTdG9yZSBmaXJzdCBzYW1wbGUgKi8KIAkJbWVtY3B5KGRldi0+eHlfb2xkLCBkZXYtPnh5X2N1ciwgc2l6ZW9mKGRldi0+eHlfb2xkKSk7CiAKLQkJaWYgKGRldi0+c2l6ZV9kZXRlY3RfZG9uZSB8fAotCQkgICAgZGV2LT50eXBlID09IEFUUF9HRVlTRVIzKSAvKiBObyAxNyIgTWFjYm9va3MgKHlldCkgKi8KKwkJLyogUGVyZm9ybSBzaXplIGRldGVjdGlvbiwgaWYgbm90IGRvbmUgYWxyZWFkeSAqLworCQlpZiAoIWRldi0+c2l6ZV9kZXRlY3RfZG9uZSkgeworCisJCQkvKiAxNyIgUG93ZXJib29rcyBoYXZlIGV4dHJhIFggc2Vuc29ycyAqLworCQkJZm9yIChpID0gKGRldi0+dHlwZSA9PSBBVFBfR0VZU0VSMiA/IDE1IDogMTYpOworCQkJICAgICBpIDwgQVRQX1hTRU5TT1JTOyBpKyspIHsKKwkJCQlpZiAoIWRldi0+eHlfY3VyW2ldKQorCQkJCQljb250aW51ZTsKKworCQkJCXByaW50ayhLRVJOX0lORk8KKwkJCQkJImFwcGxldG91Y2g6IDE3XCIgbW9kZWwgZGV0ZWN0ZWQuXG4iKTsKKworCQkJCWlmIChkZXYtPnR5cGUgPT0gQVRQX0dFWVNFUjIpCisJCQkJCWlucHV0X3NldF9hYnNfcGFyYW1zKGRldi0+aW5wdXQsIEFCU19YLAorCQkJCQkJCSAgICAgMCwKKwkJCQkJCQkgICAgICgyMCAtIDEpICoKKwkJCQkJCQkgICAgIEFUUF9YRkFDVCAtIDEsCisJCQkJCQkJICAgICBBVFBfRlVaWiwgMCk7CisJCQkJZWxzZQorCQkJCQlpbnB1dF9zZXRfYWJzX3BhcmFtcyhkZXYtPmlucHV0LCBBQlNfWCwKKwkJCQkJCQkgICAgIDAsCisJCQkJCQkJICAgICAoMjYgLSAxKSAqCisJCQkJCQkJICAgICBBVFBfWEZBQ1QgLSAxLAorCQkJCQkJCSAgICAgQVRQX0ZVWlosIDApOworCQkJCWJyZWFrOworCQkJfQorCisJCQlkZXYtPnNpemVfZGV0ZWN0X2RvbmUgPSAxOwogCQkJZ290byBleGl0OwotCi0JCS8qIDE3IiBQb3dlcmJvb2tzIGhhdmUgZXh0cmEgWCBzZW5zb3JzICovCi0JCWZvciAoaSA9IChkZXYtPnR5cGUgPT0gQVRQX0dFWVNFUjIgPyAxNSA6IDE2KTsKLQkJICAgICBpIDwgQVRQX1hTRU5TT1JTOyBpKyspIHsKLQkJCWlmICghZGV2LT54eV9jdXJbaV0pCi0JCQkJY29udGludWU7Ci0KLQkJCXByaW50ayhLRVJOX0lORk8gImFwcGxldG91Y2g6IDE3XCIgbW9kZWwgZGV0ZWN0ZWQuXG4iKTsKLQkJCWlmIChkZXYtPnR5cGUgPT0gQVRQX0dFWVNFUjIpCi0JCQkJaW5wdXRfc2V0X2Fic19wYXJhbXMoZGV2LT5pbnB1dCwgQUJTX1gsIDAsCi0JCQkJCQkgICAgICgyMCAtIDEpICoKLQkJCQkJCSAgICAgQVRQX1hGQUNUIC0gMSwKLQkJCQkJCSAgICAgQVRQX0ZVWlosIDApOwotCQkJZWxzZQotCQkJCWlucHV0X3NldF9hYnNfcGFyYW1zKGRldi0+aW5wdXQsIEFCU19YLCAwLAotCQkJCQkJICAgICAoQVRQX1hTRU5TT1JTIC0gMSkgKgotCQkJCQkJICAgICBBVFBfWEZBQ1QgLSAxLAotCQkJCQkJICAgICBBVFBfRlVaWiwgMCk7Ci0JCQlicmVhazsKIAkJfQotCi0JCWRldi0+c2l6ZV9kZXRlY3RfZG9uZSA9IDE7Ci0JCWdvdG8gZXhpdDsKIAl9CiAKIAlmb3IgKGkgPSAwOyBpIDwgQVRQX1hTRU5TT1JTICsgQVRQX1lTRU5TT1JTOyBpKyspIHsKQEAgLTQ3NSw3ICs1MDIsMTE4IEBACiAJCQkgICAgICBBVFBfWEZBQ1QsICZ4X3osICZ4X2YpOwogCXkgPSBhdHBfY2FsY3VsYXRlX2FicyhkZXYtPnh5X2FjYyArIEFUUF9YU0VOU09SUywgQVRQX1lTRU5TT1JTLAogCQkJICAgICAgQVRQX1lGQUNULCAmeV96LCAmeV9mKTsKLQlrZXkgPSBkZXYtPmRhdGFbZGV2LT5kYXRhbGVuIC0gMV0gJiAxOworCWtleSA9IGRldi0+ZGF0YVtkZXYtPmRhdGFsZW4gLSAxXSAmIEFUUF9TVEFUVVNfQlVUVE9OOworCisJaWYgKHggJiYgeSkgeworCQlpZiAoZGV2LT54X29sZCAhPSAtMSkgeworCQkJeCA9IChkZXYtPnhfb2xkICogMyArIHgpID4+IDI7CisJCQl5ID0gKGRldi0+eV9vbGQgKiAzICsgeSkgPj4gMjsKKwkJCWRldi0+eF9vbGQgPSB4OworCQkJZGV2LT55X29sZCA9IHk7CisKKwkJCWlmIChkZWJ1ZyA+IDEpCisJCQkJcHJpbnRrKEtFUk5fREVCVUcgImFwcGxldG91Y2g6ICIKKwkJCQkJIlg6ICUzZCBZOiAlM2QgWHo6ICUzZCBZejogJTNkXG4iLAorCQkJCQl4LCB5LCB4X3osIHlfeik7CisKKwkJCWlucHV0X3JlcG9ydF9rZXkoZGV2LT5pbnB1dCwgQlROX1RPVUNILCAxKTsKKwkJCWlucHV0X3JlcG9ydF9hYnMoZGV2LT5pbnB1dCwgQUJTX1gsIHgpOworCQkJaW5wdXRfcmVwb3J0X2FicyhkZXYtPmlucHV0LCBBQlNfWSwgeSk7CisJCQlpbnB1dF9yZXBvcnRfYWJzKGRldi0+aW5wdXQsIEFCU19QUkVTU1VSRSwKKwkJCQkJIG1pbihBVFBfUFJFU1NVUkUsIHhfeiArIHlfeikpOworCQkJYXRwX3JlcG9ydF9maW5nZXJzKGRldi0+aW5wdXQsIG1heCh4X2YsIHlfZikpOworCQl9CisJCWRldi0+eF9vbGQgPSB4OworCQlkZXYtPnlfb2xkID0geTsKKworCX0gZWxzZSBpZiAoIXggJiYgIXkpIHsKKworCQlkZXYtPnhfb2xkID0gZGV2LT55X29sZCA9IC0xOworCQlpbnB1dF9yZXBvcnRfa2V5KGRldi0+aW5wdXQsIEJUTl9UT1VDSCwgMCk7CisJCWlucHV0X3JlcG9ydF9hYnMoZGV2LT5pbnB1dCwgQUJTX1BSRVNTVVJFLCAwKTsKKwkJYXRwX3JlcG9ydF9maW5nZXJzKGRldi0+aW5wdXQsIDApOworCisJCS8qIHJlc2V0IHRoZSBhY2N1bXVsYXRvciBvbiByZWxlYXNlICovCisJCW1lbXNldChkZXYtPnh5X2FjYywgMCwgc2l6ZW9mKGRldi0+eHlfYWNjKSk7CisJfQorCisJaW5wdXRfcmVwb3J0X2tleShkZXYtPmlucHV0LCBCVE5fTEVGVCwga2V5KTsKKwlpbnB1dF9zeW5jKGRldi0+aW5wdXQpOworCisgZXhpdDoKKwlyZXR2YWwgPSB1c2Jfc3VibWl0X3VyYihkZXYtPnVyYiwgR0ZQX0FUT01JQyk7CisJaWYgKHJldHZhbCkKKwkJZXJyKCJhdHBfY29tcGxldGU6IHVzYl9zdWJtaXRfdXJiIGZhaWxlZCB3aXRoIHJlc3VsdCAlZCIsCisJCSAgICByZXR2YWwpOworfQorCisvKiBJbnRlcnJ1cHQgZnVuY3Rpb24gZm9yIG9sZGVyIHRvdWNocGFkczogR0VZU0VSMy9HRVlTRVI0ICovCisKK3N0YXRpYyB2b2lkIGF0cF9jb21wbGV0ZV9nZXlzZXJfM180KHN0cnVjdCB1cmIgKnVyYikKK3sKKwlpbnQgeCwgeSwgeF96LCB5X3osIHhfZiwgeV9mOworCWludCByZXR2YWwsIGksIGo7CisJaW50IGtleTsKKwlzdHJ1Y3QgYXRwICpkZXYgPSB1cmItPmNvbnRleHQ7CisJaW50IHN0YXR1cyA9IGF0cF9zdGF0dXNfY2hlY2sodXJiKTsKKworCWlmIChzdGF0dXMgPT0gQVRQX1VSQl9TVEFUVVNfRVJST1JfRkFUQUwpCisJCXJldHVybjsKKwllbHNlIGlmIChzdGF0dXMgPT0gQVRQX1VSQl9TVEFUVVNfRVJST1IpCisJCWdvdG8gZXhpdDsKKworCS8qIFJlb3JkZXIgdGhlIHNlbnNvcnMgdmFsdWVzOgorCSAqCisJICogVGhlIHZhbHVlcyBhcmUgbGFpZCBvdXQgbGlrZSB0aGlzOgorCSAqIC0sIFkxLCBZMiwgLSwgWTMsIFk0LCAtLCAuLi4sIC0sIFgxLCBYMiwgLSwgWDMsIFg0LCAuLi4KKwkgKiAnLScgaXMgYW4gdW51c2VkIHZhbHVlLgorCSAqLworCisJLyogcmVhZCBYIHZhbHVlcyAqLworCWZvciAoaSA9IDAsIGogPSAxOTsgaSA8IDIwOyBpICs9IDIsIGogKz0gMykgeworCQlkZXYtPnh5X2N1cltpXSA9IGRldi0+ZGF0YVtqICsgMV07CisJCWRldi0+eHlfY3VyW2kgKyAxXSA9IGRldi0+ZGF0YVtqICsgMl07CisJfQorCS8qIHJlYWQgWSB2YWx1ZXMgKi8KKwlmb3IgKGkgPSAwLCBqID0gMTsgaSA8IDk7IGkgKz0gMiwgaiArPSAzKSB7CisJCWRldi0+eHlfY3VyW0FUUF9YU0VOU09SUyArIGldID0gZGV2LT5kYXRhW2ogKyAxXTsKKwkJZGV2LT54eV9jdXJbQVRQX1hTRU5TT1JTICsgaSArIDFdID0gZGV2LT5kYXRhW2ogKyAyXTsKKwl9CisKKwlkYmdfZHVtcCgic2FtcGxlIiwgZGV2LT54eV9jdXIpOworCisJLyogSnVzdCB1cGRhdGUgdGhlIGJhc2UgdmFsdWVzIChpLmUuIHRvdWNocGFkIGluIHVudG91Y2hlZCBzdGF0ZSkgKi8KKwlpZiAoZGV2LT5kYXRhW2Rldi0+ZGF0YWxlbiAtIDFdICYgQVRQX1NUQVRVU19CQVNFX1VQREFURSkgeworCisJCWRwcmludGsoS0VSTl9ERUJVRyAiYXBwbGV0b3VjaDogdXBkYXRlZCBiYXNlIHZhbHVlc1xuIik7CisKKwkJbWVtY3B5KGRldi0+eHlfb2xkLCBkZXYtPnh5X2N1ciwgc2l6ZW9mKGRldi0+eHlfb2xkKSk7CisJCWdvdG8gZXhpdDsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgQVRQX1hTRU5TT1JTICsgQVRQX1lTRU5TT1JTOyBpKyspIHsKKwkJLyogY2FsY3VsYXRlIHRoZSBjaGFuZ2UgKi8KKwkJZGV2LT54eV9hY2NbaV0gPSBkZXYtPnh5X2N1cltpXSAtIGRldi0+eHlfb2xkW2ldOworCisJCS8qIHRoaXMgaXMgYSByb3VuZC1yb2JpbiB2YWx1ZSwgc28gY291cGxlIHdpdGggdGhhdCAqLworCQlpZiAoZGV2LT54eV9hY2NbaV0gPiAxMjcpCisJCQlkZXYtPnh5X2FjY1tpXSAtPSAyNTY7CisKKwkJaWYgKGRldi0+eHlfYWNjW2ldIDwgLTEyNykKKwkJCWRldi0+eHlfYWNjW2ldICs9IDI1NjsKKworCQkvKiBwcmV2ZW50IGRvd24gZHJpZnRpbmcgKi8KKwkJaWYgKGRldi0+eHlfYWNjW2ldIDwgMCkKKwkJCWRldi0+eHlfYWNjW2ldID0gMDsKKwl9CisKKwlkYmdfZHVtcCgiYWNjdW11bGF0b3IiLCBkZXYtPnh5X2FjYyk7CisKKwl4ID0gYXRwX2NhbGN1bGF0ZV9hYnMoZGV2LT54eV9hY2MsIEFUUF9YU0VOU09SUywKKwkJCSAgICAgIEFUUF9YRkFDVCwgJnhfeiwgJnhfZik7CisJeSA9IGF0cF9jYWxjdWxhdGVfYWJzKGRldi0+eHlfYWNjICsgQVRQX1hTRU5TT1JTLCBBVFBfWVNFTlNPUlMsCisJCQkgICAgICBBVFBfWUZBQ1QsICZ5X3osICZ5X2YpOworCWtleSA9IGRldi0+ZGF0YVtkZXYtPmRhdGFsZW4gLSAxXSAmIEFUUF9TVEFUVVNfQlVUVE9OOwogCiAJaWYgKHggJiYgeSkgewogCQlpZiAoZGV2LT54X29sZCAhPSAtMSkgewpAQCAtNTE0LDI4ICs2NTIsMjcgQEAKIAlpbnB1dF9zeW5jKGRldi0+aW5wdXQpOwogCiAJLyoKLQkgKiBNYW55IEdleXNlcnMgd2lsbCBjb250aW51ZSB0byBzZW5kIHBhY2tldHMgY29udGludWFsbHkgYWZ0ZXIKKwkgKiBHZXlzZXJzIDMvNCB3aWxsIGNvbnRpbnVlIHRvIHNlbmQgcGFja2V0cyBjb250aW51YWxseSBhZnRlcgogCSAqIHRoZSBmaXJzdCB0b3VjaCB1bmxlc3MgcmVpbml0aWFsaXNlZC4gRG8gc28gaWYgaXQncyBiZWVuCiAJICogaWRsZSBmb3IgYSB3aGlsZSBpbiBvcmRlciB0byBhdm9pZCB3YWtpbmcgdGhlIGtlcm5lbCB1cAotCSAqIHNldmVyYWwgaHVuZHJlZCB0aW1lcyBhIHNlY29uZC4gUmUtaW5pdGlhbGl6YXRpb24gZG9lcyBub3QKLQkgKiB3b3JrIG9uIEZvdW50YWluIHRvdWNocGFkcy4KKwkgKiBzZXZlcmFsIGh1bmRyZWQgdGltZXMgYSBzZWNvbmQuCiAJICovCi0JaWYgKGRldi0+dHlwZSAhPSBBVFBfRk9VTlRBSU4pIHsKLQkJLyoKLQkJICogQnV0dG9uIG11c3Qgbm90IGJlIHByZXNzZWQgd2hlbiBlbnRlcmluZyBzdXNwZW5kLAotCQkgKiBvdGhlcndpc2Ugd2Ugd2lsbCBuZXZlciByZWxlYXNlIHRoZSBidXR0b24uCi0JCSAqLwotCQlpZiAoIXggJiYgIXkgJiYgIWtleSkgewotCQkJZGV2LT5pZGxlY291bnQrKzsKLQkJCWlmIChkZXYtPmlkbGVjb3VudCA9PSAxMCkgewotCQkJCWRldi0+dmFsaWQgPSBmYWxzZTsKLQkJCQlzY2hlZHVsZV93b3JrKCZkZXYtPndvcmspOwotCQkJCS8qIERvbid0IHJlc3VibWl0IHVyYiBoZXJlLCB3YWl0IGZvciByZWluaXQgKi8KLQkJCQlyZXR1cm47Ci0JCQl9Ci0JCX0gZWxzZQorCisJLyoKKwkgKiBCdXR0b24gbXVzdCBub3QgYmUgcHJlc3NlZCB3aGVuIGVudGVyaW5nIHN1c3BlbmQsCisJICogb3RoZXJ3aXNlIHdlIHdpbGwgbmV2ZXIgcmVsZWFzZSB0aGUgYnV0dG9uLgorCSAqLworCWlmICgheCAmJiAheSAmJiAha2V5KSB7CisJCWRldi0+aWRsZWNvdW50Kys7CisJCWlmIChkZXYtPmlkbGVjb3VudCA9PSAxMCkgeworCQkJZGV2LT54X29sZCA9IGRldi0+eV9vbGQgPSAtMTsKIAkJCWRldi0+aWRsZWNvdW50ID0gMDsKLQl9CisJCQlzY2hlZHVsZV93b3JrKCZkZXYtPndvcmspOworCQkJLyogRG9uJ3QgcmVzdWJtaXQgdXJiIGhlcmUsIHdhaXQgZm9yIHJlaW5pdCAqLworCQkJcmV0dXJuOworCQl9CisJfSBlbHNlCisJCWRldi0+aWRsZWNvdW50ID0gMDsKIAogIGV4aXQ6CiAJcmV0dmFsID0gdXNiX3N1Ym1pdF91cmIoZGV2LT51cmIsIEdGUF9BVE9NSUMpOwpAQCAtNjMyLDkgKzc2OSwxOSBAQAogCWlmICghZGV2LT5kYXRhKQogCQlnb3RvIGVycl9mcmVlX3VyYjsKIAotCXVzYl9maWxsX2ludF91cmIoZGV2LT51cmIsIHVkZXYsCi0JCQkgdXNiX3JjdmludHBpcGUodWRldiwgaW50X2luX2VuZHBvaW50QWRkciksCi0JCQkgZGV2LT5kYXRhLCBkZXYtPmRhdGFsZW4sIGF0cF9jb21wbGV0ZSwgZGV2LCAxKTsKKwkvKiBTZWxlY3QgdGhlIFVTQiBjb21wbGV0ZSAoY2FsbGJhY2spIGZ1bmN0aW9uICovCisJaWYgKGRldi0+dHlwZSA9PSBBVFBfRk9VTlRBSU4gfHwKKwkgICAgZGV2LT50eXBlID09IEFUUF9HRVlTRVIxIHx8CisJICAgIGRldi0+dHlwZSA9PSBBVFBfR0VZU0VSMikKKwkJdXNiX2ZpbGxfaW50X3VyYihkZXYtPnVyYiwgdWRldiwKKwkJCQkgdXNiX3JjdmludHBpcGUodWRldiwgaW50X2luX2VuZHBvaW50QWRkciksCisJCQkJIGRldi0+ZGF0YSwgZGV2LT5kYXRhbGVuLAorCQkJCSBhdHBfY29tcGxldGVfZ2V5c2VyXzFfMiwgZGV2LCAxKTsKKwllbHNlCisJCXVzYl9maWxsX2ludF91cmIoZGV2LT51cmIsIHVkZXYsCisJCQkJIHVzYl9yY3ZpbnRwaXBlKHVkZXYsIGludF9pbl9lbmRwb2ludEFkZHIpLAorCQkJCSBkZXYtPmRhdGEsIGRldi0+ZGF0YWxlbiwKKwkJCQkgYXRwX2NvbXBsZXRlX2dleXNlcl8zXzQsIGRldiwgMSk7CiAKIAllcnJvciA9IGF0cF9oYW5kbGVfZ2V5c2VyKGRldik7CiAJaWYgKGVycm9yKQpAQCAtNzUxLDggKzg5OCw2IEBACiAJc3RydWN0IGF0cCAqZGV2ID0gdXNiX2dldF9pbnRmZGF0YShpZmFjZSk7CiAKIAl1c2Jfa2lsbF91cmIoZGV2LT51cmIpOwotCWRldi0+dmFsaWQgPSBmYWxzZTsKLQogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L21vdXNlL2hncGsuYyBiL2RyaXZlcnMvaW5wdXQvbW91c2UvaGdway5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4MmQzNDIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2lucHV0L21vdXNlL2hncGsuYwpAQCAtMCwwICsxLDQ3NyBAQAorLyoKKyAqIE9MUEMgSEdQSyAoWE8tMSkgdG91Y2hwYWQgUFMvMiBtb3VzZSBkcml2ZXIKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYtMjAwOCBPbmUgTGFwdG9wIFBlciBDaGlsZAorICogQXV0aG9yczoKKyAqICAgWmVwaGFuaWFoIEUuIEh1bGwKKyAqICAgQW5kcmVzIFNhbG9tb24gPGRpbGluZ2VyQGRlYmlhbi5vcmc+CisgKgorICogVGhpcyBkcml2ZXIgaXMgcGFydGx5IGJhc2VkIG9uIHRoZSBBTFBTIGRyaXZlciwgd2hpY2ggaXM6CisgKgorICogQ29weXJpZ2h0IChjKSAyMDAzIE5laWwgQnJvd24gPG5laWxiQGNzZS51bnN3LmVkdS5hdT4KKyAqIENvcHlyaWdodCAoYykgMjAwMy0yMDA1IFBldGVyIE9zdGVybHVuZCA8cGV0ZXJvMkB0ZWxpYS5jb20+CisgKiBDb3B5cmlnaHQgKGMpIDIwMDQgRG1pdHJ5IFRvcm9raG92IDxkdG9yQG1haWwucnU+CisgKiBDb3B5cmlnaHQgKGMpIDIwMDUgVm9qdGVjaCBQYXZsaWsgPHZvanRlY2hAc3VzZS5jej4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKy8qCisgKiBUaGUgc3BlYyBmcm9tIEFMUFMgaXMgYXZhaWxhYmxlIGZyb20KKyAqIDxodHRwOi8vd2lraS5sYXB0b3Aub3JnL2dvL1RvdWNoX1BhZC9UYWJsZXQ+LiAgSXQgcmVmZXJzIHRvIHRoaXMKKyAqIGRldmljZSBhcyBIR1BLIChIeWJyaWQgR1MsIFBULCBhbmQgS2V5bWF0cml4KS4KKyAqCisgKiBUaGUgZWFybGllc3QgdmVyc2lvbnMgb2YgdGhlIGRldmljZSBoYWQgc2ltdWx0YW5lb3VzIHJlcG9ydGluZzsgdGhhdAorICogd2FzIHJlbW92ZWQuICBBZnRlciB0aGF0LCB0aGUgZGV2aWNlIHVzZWQgdGhlIEFkdmFuY2VkIE1vZGUgR1MvUFQgc3RyZWFtaW5nCisgKiBzdHVmZi4gIFRoYXQgdHVybmVkIG91dCB0byBiZSB0b28gYnVnZ3kgdG8gc3VwcG9ydCwgc28gd2UndmUgZmluYWxseQorICogc3dpdGNoZWQgdG8gTW91c2UgTW9kZSAod2hpY2ggdXRpbGl6ZXMgb25seSB0aGUgY2VudGVyIDEvMyBvZiB0aGUgdG91Y2hwYWQpLgorICovCisKKyNkZWZpbmUgREVCVUcKKyNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcmlvLmg+CisjaW5jbHVkZSA8bGludXgvbGlicHMyLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxhc20vb2xwYy5oPgorCisjaW5jbHVkZSAicHNtb3VzZS5oIgorI2luY2x1ZGUgImhncGsuaCIKKworc3RhdGljIGludCB0cGRlYnVnOworbW9kdWxlX3BhcmFtKHRwZGVidWcsIGludCwgMDY0NCk7CitNT0RVTEVfUEFSTV9ERVNDKHRwZGVidWcsICJlbmFibGUgZGVidWdnaW5nLCBkdW1waW5nIHBhY2tldHMgdG8gS0VSTl9ERUJVRy4iKTsKKworc3RhdGljIGludCByZWNhbGliX2RlbHRhID0gMTAwOworbW9kdWxlX3BhcmFtKHJlY2FsaWJfZGVsdGEsIGludCwgMDY0NCk7CitNT0RVTEVfUEFSTV9ERVNDKHJlY2FsaWJfZGVsdGEsCisJInBhY2tldHMgY29udGFpbmluZyBhIGRlbHRhIHRoaXMgbGFyZ2Ugd2lsbCBjYXVzZSBhIHJlY2FsaWJyYXRpb24uIik7CisKKy8qCisgKiBXaGVuIHRoZSB0b3VjaHBhZCBnZXRzIHVsdHJhLXNlbnNpdGl2ZSwgb25lIGNhbiBrZWVwIHRoZWlyIGZpbmdlciAxLzIiCisgKiBhYm92ZSB0aGUgcGFkIGFuZCBzdGlsbCBoYXZlIGl0IHNlbmQgcGFja2V0cy4gIFRoaXMgY2F1c2VzIGEganVtcCBjdXJzb3IKKyAqIHdoZW4gb25lIHBsYWNlcyB0aGVpciBmaW5nZXIgb24gdGhlIHBhZC4gIFdlIGNhbiBwcm9iYWJseSBkZXRlY3QgdGhlCisgKiBqdW1wIGFzIHdlIHNlZSBhIGxhcmdlIGRlbHRhcyAoPj0gMTAwcHgpLiAgSW4gbW91c2UgbW9kZSwgSSd2ZSBiZWVuCisgKiB1bmFibGUgdG8gZXZlbiBjb21lIGNsb3NlIHRvIDEwMHB4IGRlbHRhcyBkdXJpbmcgbm9ybWFsIHVzYWdlLCBzbyBJIHRoaW5rCisgKiB0aGlzIHRocmVzaG9sZCBpcyBzYWZlLiAgSWYgYSBsYXJnZSBkZWx0YSBvY2N1cnMsIHRyaWdnZXIgYSByZWNhbGlicmF0aW9uLgorICovCitzdGF0aWMgdm9pZCBoZ3BrX2p1bXB5X2hhY2soc3RydWN0IHBzbW91c2UgKnBzbW91c2UsIGludCB4LCBpbnQgeSkKK3sKKwlzdHJ1Y3QgaGdwa19kYXRhICpwcml2ID0gcHNtb3VzZS0+cHJpdmF0ZTsKKworCWlmIChhYnMoeCkgPiByZWNhbGliX2RlbHRhIHx8IGFicyh5KSA+IHJlY2FsaWJfZGVsdGEpIHsKKwkJaGdwa19lcnIocHNtb3VzZSwgIj4lZHB4IGp1bXAgZGV0ZWN0ZWQgKCVkLCVkKVxuIiwKKwkJCQlyZWNhbGliX2RlbHRhLCB4LCB5KTsKKwkJLyogTXkgY2FyIGdldHMgZm9ydHkgcm9kcyB0byB0aGUgaG9nc2hlYWQgYW5kIHRoYXQncyB0aGUKKwkJICogd2F5IEkgbGlrZXMgaXQhICovCisJCXBzbW91c2VfcXVldWVfd29yayhwc21vdXNlLCAmcHJpdi0+cmVjYWxpYl93cSwKKwkJCQltc2Vjc190b19qaWZmaWVzKDEwMDApKTsKKwl9Cit9CisKKy8qCisgKiBXZSBoYXZlIG5vIGlkZWEgd2h5IHRoaXMgcGFydGljdWxhciBoYXJkd2FyZSBidWcgb2NjdXJzLiAgVGhlIHRvdWNocGFkCisgKiB3aWxsIHJhbmRvbWx5IHN0YXJ0IHNwZXdpbmcgcGFja2V0cyB3aXRob3V0IGFueXRoaW5nIHRvdWNoaW5nIHRoZQorICogcGFkLiAgVGhpcyB3b3VsZG4ndCBuZWNlc3NhcmlseSBiZSBiYWQsIGJ1dCBpdCdzIGluZGljYXRpdmUgb2YgYQorICogc2V2ZXJlbHkgbWlzY2FsaWJyYXRlZCBwYWQ7IGF0dGVtcHRpbmcgdG8gdXNlIHRoZSB0b3VjaHBhZCB3aGlsZSBpdCdzCisgKiBzcGV3aW5nIG1lYW5zIHRoZSBjdXJzb3Igd2lsbCBqdW1wIGFsbCBvdmVyIHRoZSBwbGFjZSwgYW5kIGFjdCAiZHJ1bmsiLgorICoKKyAqIFRoZSBwYWNrZXRzIHRoYXQgYXJlIHNwZXdlZCB0ZW5kIHRvIGFsbCBoYXZlIGRlbHRhcyBiZXR3ZWVuIC0yIGFuZCAyLCBhbmQKKyAqIHRoZSBjdXJzb3Igd2lsbCBtb3ZlIGFyb3VuZCB3aXRob3V0IHJlYWxseSBnb2luZyB2ZXJ5IGZhci4gIEl0IHdpbGwKKyAqIHRlbmQgdG8gZW5kIHVwIGluIHRoZSBzYW1lIGxvY2F0aW9uOyBpZiB3ZSB0YWxseSB1cCB0aGUgY2hhbmdlcyBvdmVyCisgKiAxMDAgcGFja2V0cywgd2UgZW5kIHVwIHcvIGEgZmluYWwgZGVsdGEgb2YgY2xvc2UgdG8gMC4gIFRoaXMgaGFwcGVucworICogcHJldHR5IHJlZ3VsYXJseSB3aGVuIHRoZSB0b3VjaHBhZCBpcyBzcGV3aW5nLCBhbmQgaXMgcHJldHR5IGhhcmQgdG8KKyAqIG1hbnVhbGx5IHRyaWdnZXIgKGF0IGxlYXN0IGZvciAqbXkqIGZpbmdlcnMpLiAgU28sIGl0IG1ha2VzIGEgcGVyZmVjdAorICogc2NoZW1lIGZvciBkZXRlY3Rpbmcgc3Bld3MuCisgKi8KK3N0YXRpYyB2b2lkIGhncGtfc3Bld2luZ19oYWNrKHN0cnVjdCBwc21vdXNlICpwc21vdXNlLAorCQkJICAgICAgaW50IGwsIGludCByLCBpbnQgeCwgaW50IHkpCit7CisJc3RydWN0IGhncGtfZGF0YSAqcHJpdiA9IHBzbW91c2UtPnByaXZhdGU7CisKKwkvKiBpZ25vcmUgYnV0dG9uIHByZXNzIHBhY2tldHM7IG1hbnkgaW4gYSByb3cgY291bGQgdHJpZ2dlcgorCSAqIGEgZmFsc2UtcG9zaXRpdmUhICovCisJaWYgKGwgfHwgcikKKwkJcmV0dXJuOworCisJcHJpdi0+eF90YWxseSArPSB4OworCXByaXYtPnlfdGFsbHkgKz0geTsKKworCWlmICgrK3ByaXYtPmNvdW50ID4gMTAwKSB7CisJCWlmIChhYnMocHJpdi0+eF90YWxseSkgPCAzICYmIGFicyhwcml2LT55X3RhbGx5KSA8IDMpIHsKKwkJCWhncGtfZGJnKHBzbW91c2UsICJwYWNrZXQgc3BldyBkZXRlY3RlZCAoJWQsJWQpXG4iLAorCQkJCSBwcml2LT54X3RhbGx5LCBwcml2LT55X3RhbGx5KTsKKwkJCXBzbW91c2VfcXVldWVfd29yayhwc21vdXNlLCAmcHJpdi0+cmVjYWxpYl93cSwKKwkJCQkJICAgbXNlY3NfdG9famlmZmllcygxMDAwKSk7CisJCX0KKwkJLyogcmVzZXQgZXZlcnkgMTAwIHBhY2tldHMgKi8KKwkJcHJpdi0+Y291bnQgPSAwOworCQlwcml2LT54X3RhbGx5ID0gMDsKKwkJcHJpdi0+eV90YWxseSA9IDA7CisJfQorfQorCisvKgorICogSEdQSyBNb3VzZSBNb2RlIGZvcm1hdCAoc3RhbmRhcmQgbW91c2UgZm9ybWF0LCBzYW5zIG1pZGRsZSBidXR0b24pCisgKgorICogYnl0ZSAwOgl5LW92ZXIJeC1vdmVyCXktbmVnCXgtbmVnCTEJMAlzd3IJc3dsCisgKiBieXRlIDE6CXg3CXg2CXg1CXg0CXgzCXgyCXgxCXgwCisgKiBieXRlIDI6CXk3CXk2CXk1CXk0CXkzCXkyCXkxCXkwCisgKgorICogc3dyL3N3bCBhcmUgdGhlIGxlZnQvcmlnaHQgYnV0dG9ucy4KKyAqIHgtbmVnL3ktbmVnIGFyZSB0aGUgeCBhbmQgeSBkZWx0YSBuZWdhdGl2ZSBiaXRzCisgKiB4LW92ZXIveS1vdmVyIGFyZSB0aGUgeCBhbmQgeSBvdmVyZmxvdyBiaXRzCisgKi8KK3N0YXRpYyBpbnQgaGdwa192YWxpZGF0ZV9ieXRlKHVuc2lnbmVkIGNoYXIgKnBhY2tldCkKK3sKKwlyZXR1cm4gKHBhY2tldFswXSAmIDB4MEMpID09IDB4MDg7Cit9CisKK3N0YXRpYyB2b2lkIGhncGtfcHJvY2Vzc19wYWNrZXQoc3RydWN0IHBzbW91c2UgKnBzbW91c2UpCit7CisJc3RydWN0IGlucHV0X2RldiAqZGV2ID0gcHNtb3VzZS0+ZGV2OworCXVuc2lnbmVkIGNoYXIgKnBhY2tldCA9IHBzbW91c2UtPnBhY2tldDsKKwlpbnQgeCwgeSwgbGVmdCwgcmlnaHQ7CisKKwlsZWZ0ID0gcGFja2V0WzBdICYgMTsKKwlyaWdodCA9IChwYWNrZXRbMF0gPj4gMSkgJiAxOworCisJeCA9IHBhY2tldFsxXSAtICgocGFja2V0WzBdIDw8IDQpICYgMHgxMDApOworCXkgPSAoKHBhY2tldFswXSA8PCAzKSAmIDB4MTAwKSAtIHBhY2tldFsyXTsKKworCWhncGtfanVtcHlfaGFjayhwc21vdXNlLCB4LCB5KTsKKwloZ3BrX3NwZXdpbmdfaGFjayhwc21vdXNlLCBsZWZ0LCByaWdodCwgeCwgeSk7CisKKwlpZiAodHBkZWJ1ZykKKwkJaGdwa19kYmcocHNtb3VzZSwgImw9JWQgcj0lZCB4PSVkIHk9JWRcbiIsIGxlZnQsIHJpZ2h0LCB4LCB5KTsKKworCWlucHV0X3JlcG9ydF9rZXkoZGV2LCBCVE5fTEVGVCwgbGVmdCk7CisJaW5wdXRfcmVwb3J0X2tleShkZXYsIEJUTl9SSUdIVCwgcmlnaHQpOworCisJaW5wdXRfcmVwb3J0X3JlbChkZXYsIFJFTF9YLCB4KTsKKwlpbnB1dF9yZXBvcnRfcmVsKGRldiwgUkVMX1ksIHkpOworCisJaW5wdXRfc3luYyhkZXYpOworfQorCitzdGF0aWMgcHNtb3VzZV9yZXRfdCBoZ3BrX3Byb2Nlc3NfYnl0ZShzdHJ1Y3QgcHNtb3VzZSAqcHNtb3VzZSkKK3sKKwlzdHJ1Y3QgaGdwa19kYXRhICpwcml2ID0gcHNtb3VzZS0+cHJpdmF0ZTsKKworCWlmIChoZ3BrX3ZhbGlkYXRlX2J5dGUocHNtb3VzZS0+cGFja2V0KSkgeworCQloZ3BrX2RiZyhwc21vdXNlLCAiJXM6ICglZCkgJTAyeCAlMDJ4ICUwMnhcbiIsCisJCQkJX19mdW5jX18sIHBzbW91c2UtPnBrdGNudCwgcHNtb3VzZS0+cGFja2V0WzBdLAorCQkJCXBzbW91c2UtPnBhY2tldFsxXSwgcHNtb3VzZS0+cGFja2V0WzJdKTsKKwkJcmV0dXJuIFBTTU9VU0VfQkFEX0RBVEE7CisJfQorCisJaWYgKHBzbW91c2UtPnBrdGNudCA+PSBwc21vdXNlLT5wa3RzaXplKSB7CisJCWhncGtfcHJvY2Vzc19wYWNrZXQocHNtb3VzZSk7CisJCXJldHVybiBQU01PVVNFX0ZVTExfUEFDS0VUOworCX0KKworCWlmIChwcml2LT5yZWNhbGliX3dpbmRvdykgeworCQlpZiAodGltZV9iZWZvcmUoamlmZmllcywgcHJpdi0+cmVjYWxpYl93aW5kb3cpKSB7CisJCQkvKgorCQkJICogdWdoLCBnb3QgYSBwYWNrZXQgaW5zaWRlIG91ciByZWNhbGlicmF0aW9uCisJCQkgKiB3aW5kb3csIHNjaGVkdWxlIGFub3RoZXIgcmVjYWxpYnJhdGlvbi4KKwkJCSAqLworCQkJaGdwa19kYmcocHNtb3VzZSwKKwkJCQkgInBhY2tldCBpbnNpZGUgY2FsaWJyYXRpb24gd2luZG93LCAiCisJCQkJICJxdWV1ZWluZyBhbm90aGVyIHJlY2FsaWJyYXRpb25cbiIpOworCQkJcHNtb3VzZV9xdWV1ZV93b3JrKHBzbW91c2UsICZwcml2LT5yZWNhbGliX3dxLAorCQkJCQltc2Vjc190b19qaWZmaWVzKDEwMDApKTsKKwkJfQorCQlwcml2LT5yZWNhbGliX3dpbmRvdyA9IDA7CisJfQorCisJcmV0dXJuIFBTTU9VU0VfR09PRF9EQVRBOworfQorCitzdGF0aWMgaW50IGhncGtfZm9yY2VfcmVjYWxpYnJhdGUoc3RydWN0IHBzbW91c2UgKnBzbW91c2UpCit7CisJc3RydWN0IHBzMmRldiAqcHMyZGV2ID0gJnBzbW91c2UtPnBzMmRldjsKKwlzdHJ1Y3QgaGdwa19kYXRhICpwcml2ID0gcHNtb3VzZS0+cHJpdmF0ZTsKKworCS8qIEMtc2VyaWVzIHRvdWNocGFkcyBhZGRlZCB0aGUgcmVjYWxpYnJhdGUgY29tbWFuZCAqLworCWlmIChwc21vdXNlLT5tb2RlbCA8IEhHUEtfTU9ERUxfQykKKwkJcmV0dXJuIDA7CisKKwkvKiB3ZSBkb24ndCB3YW50IHRvIHJhY2Ugd2l0aCB0aGUgaXJxIGhhbmRsZXIsIG5vciB3aXRoIHJlc3luY3MgKi8KKwlwc21vdXNlX3NldF9zdGF0ZShwc21vdXNlLCBQU01PVVNFX0lOSVRJQUxJWklORyk7CisKKwkvKiBzdGFydCBieSByZXNldHRpbmcgdGhlIGRldmljZSAqLworCXBzbW91c2VfcmVzZXQocHNtb3VzZSk7CisKKwkvKiBzZW5kIHRoZSByZWNhbGlicmF0ZSByZXF1ZXN0ICovCisJaWYgKHBzMl9jb21tYW5kKHBzMmRldiwgTlVMTCwgMHhmNSkgfHwKKwkgICAgcHMyX2NvbW1hbmQocHMyZGV2LCBOVUxMLCAweGY1KSB8fAorCSAgICBwczJfY29tbWFuZChwczJkZXYsIE5VTEwsIDB4ZTYpIHx8CisJICAgIHBzMl9jb21tYW5kKHBzMmRldiwgTlVMTCwgMHhmNSkpIHsKKwkJcmV0dXJuIC0xOworCX0KKworCS8qIGFjY29yZGluZyB0byBBTFBTLCAxNTBtUyBpcyByZXF1aXJlZCBmb3IgcmVjYWxpYnJhdGlvbiAqLworCW1zbGVlcCgxNTApOworCisJLyogWFhYOiBJZiBhIGZpbmdlciBpcyBkb3duIGR1cmluZyB0aGlzIGRlbGF5LCByZWNhbGlicmF0aW9uIHdpbGwKKwkgKiBkZXRlY3QgY2FwYWNpdGFuY2UgaW5jb3JyZWN0bHkuICBUaGlzIGlzIGEgaGFyZHdhcmUgYnVnLCBhbmQKKwkgKiB3ZSBkb24ndCBoYXZlIGEgZ29vZCB3YXkgdG8gZGVhbCB3aXRoIGl0LiAgVGhlIDJzIHdpbmRvdyBzdHVmZgorCSAqIChiZWxvdykgaXMgb3VyIGJlc3Qgb3B0aW9uIGZvciBub3cuCisJICovCisKKwlpZiAocHMyX2NvbW1hbmQocHMyZGV2LCBOVUxMLCBQU01PVVNFX0NNRF9FTkFCTEUpKQorCQlyZXR1cm4gLTE7CisKKwlwc21vdXNlX3NldF9zdGF0ZShwc21vdXNlLCBQU01PVVNFX0FDVElWQVRFRCk7CisKKwkvKiBBZnRlciB3ZSByZWNhbGlicmF0ZSwgd2Ugc2hvdWxkbid0IGdldCBhbnkgcGFja2V0cyBmb3IgMnMuICBJZgorCSAqIHdlIGRvLCBpdCdzIGxpa2VseSB0aGF0IHNvbWVvbmUncyBmaW5nZXIgd2FzIG9uIHRoZSB0b3VjaHBhZC4KKwkgKiBJZiBzb21lb25lJ3MgZmluZ2VyICp3YXMqIG9uIHRoZSB0b3VjaHBhZCwgaXQncyBwcm9iYWJseQorCSAqIG1pc2NhbGlicmF0ZWQuICBTbywgd2Ugc2hvdWxkIHNjaGVkdWxlIGFub3RoZXIgcmVjYWxpYnJhdGlvbgorCSAqLworCXByaXYtPnJlY2FsaWJfd2luZG93ID0gamlmZmllcyArICBtc2Vjc190b19qaWZmaWVzKDIwMDApOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBUaGlzIGtpbGxzIHBvd2VyIHRvIHRoZSB0b3VjaHBhZDsgYWNjb3JkaW5nIHRvIEFMUFMsIGN1cnJlbnQgY29uc3VtcHRpb24KKyAqIGdvZXMgZG93biB0byA1MHVBIGFmdGVyIHJ1bm5pbmcgdGhpcy4gIFRvIHR1cm4gcG93ZXIgYmFjayBvbiwgd2UgZHJpdmUKKyAqIE1TLURBVCBsb3cuCisgKi8KK3N0YXRpYyBpbnQgaGdwa190b2dnbGVfcG93ZXIoc3RydWN0IHBzbW91c2UgKnBzbW91c2UsIGludCBlbmFibGUpCit7CisJc3RydWN0IHBzMmRldiAqcHMyZGV2ID0gJnBzbW91c2UtPnBzMmRldjsKKwlpbnQgdGltZW87CisKKwkvKiBBZGRlZCBvbiBELXNlcmllcyB0b3VjaHBhZHMgKi8KKwlpZiAocHNtb3VzZS0+bW9kZWwgPCBIR1BLX01PREVMX0QpCisJCXJldHVybiAwOworCisJaWYgKGVuYWJsZSkgeworCQlwc21vdXNlX3NldF9zdGF0ZShwc21vdXNlLCBQU01PVVNFX0lOSVRJQUxJWklORyk7CisKKwkJLyoKKwkJICogU2VuZGluZyBhIGJ5dGUgd2lsbCBkcml2ZSBNUy1EQVQgbG93OyB0aGlzIHdpbGwgd2FrZSB1cAorCQkgKiB0aGUgY29udHJvbGxlci4gIE9uY2Ugd2UgZ2V0IGFuIEFDSyBiYWNrIGZyb20gaXQsIGl0CisJCSAqIG1lYW5zIHdlIGNhbiBjb250aW51ZSB3aXRoIHRoZSB0b3VjaHBhZCByZS1pbml0LiAgQUxQUworCQkgKiB0ZWxscyB1cyB0aGF0IDFzIHNob3VsZCBiZSBsb25nIGVub3VnaCwgc28gc2V0IHRoYXQgYXMKKwkJICogdGhlIHVwcGVyIGJvdW5kLgorCQkgKi8KKwkJZm9yICh0aW1lbyA9IDIwOyB0aW1lbyA+IDA7IHRpbWVvLS0pIHsKKwkJCWlmICghcHMyX3NlbmRieXRlKCZwc21vdXNlLT5wczJkZXYsCisJCQkJCVBTTU9VU0VfQ01EX0RJU0FCTEUsIDIwKSkKKwkJCQlicmVhazsKKwkJCW1zbGVlcCg1MCk7CisJCX0KKworCQlwc21vdXNlX3Jlc2V0KHBzbW91c2UpOworCisJCS8qIHNob3VsZCBiZSBhbGwgc2V0LCBlbmFibGUgdGhlIHRvdWNocGFkICovCisJCXBzMl9jb21tYW5kKCZwc21vdXNlLT5wczJkZXYsIE5VTEwsIFBTTU9VU0VfQ01EX0VOQUJMRSk7CisJCXBzbW91c2Vfc2V0X3N0YXRlKHBzbW91c2UsIFBTTU9VU0VfQUNUSVZBVEVEKTsKKworCX0gZWxzZSB7CisJCWhncGtfZGJnKHBzbW91c2UsICJQb3dlcmluZyBvZmYgdG91Y2hwYWQuXG4iKTsKKwkJcHNtb3VzZV9zZXRfc3RhdGUocHNtb3VzZSwgUFNNT1VTRV9JR05PUkUpOworCisJCWlmIChwczJfY29tbWFuZChwczJkZXYsIE5VTEwsIDB4ZWMpIHx8CisJCSAgICBwczJfY29tbWFuZChwczJkZXYsIE5VTEwsIDB4ZWMpIHx8CisJCSAgICBwczJfY29tbWFuZChwczJkZXYsIE5VTEwsIDB4ZWEpKSB7CisJCQlyZXR1cm4gLTE7CisJCX0KKworCQkvKiBwcm9iYWJseSB3b24ndCBzZWUgYW4gQUNLLCB0aGUgdG91Y2hwYWQgd2lsbCBiZSBvZmYgKi8KKwkJcHMyX3NlbmRieXRlKCZwc21vdXNlLT5wczJkZXYsIDB4ZWMsIDIwKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBoZ3BrX3BvbGwoc3RydWN0IHBzbW91c2UgKnBzbW91c2UpCit7CisJLyogV2UgY2FuJ3QgcG9sbCwgc28gYWx3YXlzIHJldHVybiBmYWlsdXJlLiAqLworCXJldHVybiAtMTsKK30KKworc3RhdGljIGludCBoZ3BrX3JlY29ubmVjdChzdHJ1Y3QgcHNtb3VzZSAqcHNtb3VzZSkKK3sKKwkvKiBEdXJpbmcgc3VzcGVuZC9yZXN1bWUgdGhlIHBzMiByYWlscyByZW1haW4gcG93ZXJlZC4gIFdlIGRvbid0IHdhbnQKKwkgKiB0byBkbyBhIHJlc2V0IGJlY2F1c2UgaXQncyBmbHVzaCBkYXRhIG91dCBvZiBidWZmZXJzOyBob3dldmVyLAorCSAqIGVhcmxpZXIgcHJvdG90eXBlcyAoQjEpIGhhZCBzb21lIGJyb2tlbm5lc3MgdGhhdCByZXF1aXJlZCBhIHJlc2V0LiAqLworCWlmIChvbHBjX2JvYXJkX2F0X2xlYXN0KG9scGNfYm9hcmQoMHhiMikpKQorCQlpZiAocHNtb3VzZS0+cHMyZGV2LnNlcmlvLT5kZXYucG93ZXIucG93ZXJfc3RhdGUuZXZlbnQgIT0KKwkJCQlQTV9FVkVOVF9PTikKKwkJCXJldHVybiAwOworCisJcHNtb3VzZV9yZXNldChwc21vdXNlKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3NpemVfdCBoZ3BrX3Nob3dfcG93ZXJlZChzdHJ1Y3QgcHNtb3VzZSAqcHNtb3VzZSwgdm9pZCAqZGF0YSwgY2hhciAqYnVmKQoreworCXN0cnVjdCBoZ3BrX2RhdGEgKnByaXYgPSBwc21vdXNlLT5wcml2YXRlOworCisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIHByaXYtPnBvd2VyZWQpOworfQorCitzdGF0aWMgc3NpemVfdCBoZ3BrX3NldF9wb3dlcmVkKHN0cnVjdCBwc21vdXNlICpwc21vdXNlLCB2b2lkICpkYXRhLAorCQkJCWNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCBoZ3BrX2RhdGEgKnByaXYgPSBwc21vdXNlLT5wcml2YXRlOworCXVuc2lnbmVkIGxvbmcgdmFsdWU7CisJaW50IGVycjsKKworCWVyciA9IHN0cmljdF9zdHJ0b3VsKGJ1ZiwgMTAsICZ2YWx1ZSk7CisJaWYgKGVyciB8fCB2YWx1ZSA+IDEpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKHZhbHVlICE9IHByaXYtPnBvd2VyZWQpIHsKKwkJLyoKKwkJICogaGdwa190b2dnbGVfcG93ZXIgd2lsbCBkZWFsIHcvIHN0YXRlIHNvCisJCSAqIHdlJ3JlIG5vdCByYWNpbmcgdy8gaXJxCisJCSAqLworCQllcnIgPSBoZ3BrX3RvZ2dsZV9wb3dlcihwc21vdXNlLCB2YWx1ZSk7CisJCWlmICghZXJyKQorCQkJcHJpdi0+cG93ZXJlZCA9IHZhbHVlOworCX0KKworCXJldHVybiBlcnIgPyBlcnIgOiBjb3VudDsKK30KKworX19QU01PVVNFX0RFRklORV9BVFRSKHBvd2VyZWQsIFNfSVdVU1IgfCBTX0lSVUdPLCBOVUxMLAorCQkgICAgICBoZ3BrX3Nob3dfcG93ZXJlZCwgaGdwa19zZXRfcG93ZXJlZCwgMCk7CisKK3N0YXRpYyB2b2lkIGhncGtfZGlzY29ubmVjdChzdHJ1Y3QgcHNtb3VzZSAqcHNtb3VzZSkKK3sKKwlzdHJ1Y3QgaGdwa19kYXRhICpwcml2ID0gcHNtb3VzZS0+cHJpdmF0ZTsKKworCWRldmljZV9yZW1vdmVfZmlsZSgmcHNtb3VzZS0+cHMyZGV2LnNlcmlvLT5kZXYsCisJCQkgICAmcHNtb3VzZV9hdHRyX3Bvd2VyZWQuZGF0dHIpOworCXBzbW91c2VfcmVzZXQocHNtb3VzZSk7CisJa2ZyZWUocHJpdik7Cit9CisKK3N0YXRpYyB2b2lkIGhncGtfcmVjYWxpYl93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgZGVsYXllZF93b3JrICp3ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBkZWxheWVkX3dvcmssIHdvcmspOworCXN0cnVjdCBoZ3BrX2RhdGEgKnByaXYgPSBjb250YWluZXJfb2Yodywgc3RydWN0IGhncGtfZGF0YSwgcmVjYWxpYl93cSk7CisJc3RydWN0IHBzbW91c2UgKnBzbW91c2UgPSBwcml2LT5wc21vdXNlOworCisJaGdwa19kYmcocHNtb3VzZSwgInJlY2FsaWJyYXRpbmcgdG91Y2hwYWQuLlxuIik7CisKKwlpZiAoaGdwa19mb3JjZV9yZWNhbGlicmF0ZShwc21vdXNlKSkKKwkJaGdwa19lcnIocHNtb3VzZSwgInJlY2FsaWJyYXRpb24gZmFpbGVkIVxuIik7Cit9CisKK3N0YXRpYyBpbnQgaGdwa19yZWdpc3RlcihzdHJ1Y3QgcHNtb3VzZSAqcHNtb3VzZSkKK3sKKwlzdHJ1Y3QgaW5wdXRfZGV2ICpkZXYgPSBwc21vdXNlLT5kZXY7CisJaW50IGVycjsKKworCS8qIHVuc2V0IHRoZSB0aGluZ3MgdGhhdCBwc21vdXNlLWJhc2Ugc2V0cyB3aGljaCB3ZSBkb24ndCBoYXZlICovCisJX19jbGVhcl9iaXQoQlROX01JRERMRSwgZGV2LT5rZXliaXQpOworCisJLyogc2V0IHRoZSB0aGluZ3Mgd2UgZG8gaGF2ZSAqLworCV9fc2V0X2JpdChFVl9LRVksIGRldi0+ZXZiaXQpOworCV9fc2V0X2JpdChFVl9SRUwsIGRldi0+ZXZiaXQpOworCisJX19zZXRfYml0KFJFTF9YLCBkZXYtPnJlbGJpdCk7CisJX19zZXRfYml0KFJFTF9ZLCBkZXYtPnJlbGJpdCk7CisKKwlfX3NldF9iaXQoQlROX0xFRlQsIGRldi0+a2V5Yml0KTsKKwlfX3NldF9iaXQoQlROX1JJR0hULCBkZXYtPmtleWJpdCk7CisKKwkvKiByZWdpc3RlciBoYW5kbGVycyAqLworCXBzbW91c2UtPnByb3RvY29sX2hhbmRsZXIgPSBoZ3BrX3Byb2Nlc3NfYnl0ZTsKKwlwc21vdXNlLT5wb2xsID0gaGdwa19wb2xsOworCXBzbW91c2UtPmRpc2Nvbm5lY3QgPSBoZ3BrX2Rpc2Nvbm5lY3Q7CisJcHNtb3VzZS0+cmVjb25uZWN0ID0gaGdwa19yZWNvbm5lY3Q7CisJcHNtb3VzZS0+cGt0c2l6ZSA9IDM7CisKKwkvKiBEaXNhYmxlIHRoZSBpZGxlIHJlc3luYy4gKi8KKwlwc21vdXNlLT5yZXN5bmNfdGltZSA9IDA7CisJLyogUmVzZXQgYWZ0ZXIgYSBsb3Qgb2YgYmFkIGJ5dGVzLiAqLworCXBzbW91c2UtPnJlc2V0YWZ0ZXIgPSAxMDI0OworCisJZXJyID0gZGV2aWNlX2NyZWF0ZV9maWxlKCZwc21vdXNlLT5wczJkZXYuc2VyaW8tPmRldiwKKwkJCQkgJnBzbW91c2VfYXR0cl9wb3dlcmVkLmRhdHRyKTsKKwlpZiAoZXJyKQorCQloZ3BrX2Vycihwc21vdXNlLCAiRmFpbGVkIHRvIGNyZWF0ZSBzeXNmcyBhdHRyaWJ1dGVcbiIpOworCisJcmV0dXJuIGVycjsKK30KKworaW50IGhncGtfaW5pdChzdHJ1Y3QgcHNtb3VzZSAqcHNtb3VzZSkKK3sKKwlzdHJ1Y3QgaGdwa19kYXRhICpwcml2OworCWludCBlcnIgPSAtRU5PTUVNOworCisJcHJpdiA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBoZ3BrX2RhdGEpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXByaXYpCisJCWdvdG8gYWxsb2NfZmFpbDsKKworCXBzbW91c2UtPnByaXZhdGUgPSBwcml2OworCXByaXYtPnBzbW91c2UgPSBwc21vdXNlOworCXByaXYtPnBvd2VyZWQgPSAxOworCUlOSVRfREVMQVlFRF9XT1JLKCZwcml2LT5yZWNhbGliX3dxLCBoZ3BrX3JlY2FsaWJfd29yayk7CisKKwllcnIgPSBwc21vdXNlX3Jlc2V0KHBzbW91c2UpOworCWlmIChlcnIpCisJCWdvdG8gaW5pdF9mYWlsOworCisJZXJyID0gaGdwa19yZWdpc3Rlcihwc21vdXNlKTsKKwlpZiAoZXJyKQorCQlnb3RvIGluaXRfZmFpbDsKKworCXJldHVybiAwOworCitpbml0X2ZhaWw6CisJa2ZyZWUocHJpdik7CithbGxvY19mYWlsOgorCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBlbnVtIGhncGtfbW9kZWxfdCBoZ3BrX2dldF9tb2RlbChzdHJ1Y3QgcHNtb3VzZSAqcHNtb3VzZSkKK3sKKwlzdHJ1Y3QgcHMyZGV2ICpwczJkZXYgPSAmcHNtb3VzZS0+cHMyZGV2OworCXVuc2lnbmVkIGNoYXIgcGFyYW1bM107CisKKwkvKiBFNywgRTcsIEU3LCBFOSBnZXRzIHVzIGEgMyBieXRlIGlkZW50aWZpZXIgKi8KKwlpZiAocHMyX2NvbW1hbmQocHMyZGV2LCAgTlVMTCwgUFNNT1VTRV9DTURfU0VUU0NBTEUyMSkgfHwKKwkgICAgcHMyX2NvbW1hbmQocHMyZGV2LCAgTlVMTCwgUFNNT1VTRV9DTURfU0VUU0NBTEUyMSkgfHwKKwkgICAgcHMyX2NvbW1hbmQocHMyZGV2LCAgTlVMTCwgUFNNT1VTRV9DTURfU0VUU0NBTEUyMSkgfHwKKwkgICAgcHMyX2NvbW1hbmQocHMyZGV2LCBwYXJhbSwgUFNNT1VTRV9DTURfR0VUSU5GTykpIHsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJaGdwa19kYmcocHNtb3VzZSwgIklEOiAlMDJ4ICUwMnggJTAyeCIsIHBhcmFtWzBdLCBwYXJhbVsxXSwgcGFyYW1bMl0pOworCisJLyogSEdQSyBzaWduYXR1cmU6IDB4NjcsIDB4MDAsIDB4PG1vZGVsPiAqLworCWlmIChwYXJhbVswXSAhPSAweDY3IHx8IHBhcmFtWzFdICE9IDB4MDApCisJCXJldHVybiAtRU5PREVWOworCisJaGdwa19pbmZvKHBzbW91c2UsICJPTFBDIHRvdWNocGFkIHJldmlzaW9uIDB4JXhcbiIsIHBhcmFtWzJdKTsKKworCXJldHVybiBwYXJhbVsyXTsKK30KKworaW50IGhncGtfZGV0ZWN0KHN0cnVjdCBwc21vdXNlICpwc21vdXNlLCBpbnQgc2V0X3Byb3BlcnRpZXMpCit7CisJaW50IHZlcnNpb247CisKKwl2ZXJzaW9uID0gaGdwa19nZXRfbW9kZWwocHNtb3VzZSk7CisJaWYgKHZlcnNpb24gPCAwKQorCQlyZXR1cm4gdmVyc2lvbjsKKworCWlmIChzZXRfcHJvcGVydGllcykgeworCQlwc21vdXNlLT52ZW5kb3IgPSAiQUxQUyI7CisJCXBzbW91c2UtPm5hbWUgPSAiSEdQSyI7CisJCXBzbW91c2UtPm1vZGVsID0gdmVyc2lvbjsKKwl9CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvbW91c2UvaGdway5oIGIvZHJpdmVycy9pbnB1dC9tb3VzZS9oZ3BrLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTRiMmE5NgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvaW5wdXQvbW91c2UvaGdway5oCkBAIC0wLDAgKzEsNDkgQEAKKy8qCisgKiBPTFBDIEhHUEsgKFhPLTEpIHRvdWNocGFkIFBTLzIgbW91c2UgZHJpdmVyCisgKi8KKworI2lmbmRlZiBfSEdQS19ICisjZGVmaW5lIF9IR1BLX0gKKworZW51bSBoZ3BrX21vZGVsX3QgeworCUhHUEtfTU9ERUxfUFJFQSA9IDB4MGEsCS8qIHByZS1CMXMgKi8KKwlIR1BLX01PREVMX0EgPSAweDE0LAkvKiBmb3VuZCBvbiBCMXMsIFBUIGRpc2FibGVkIGluIGhhcmR3YXJlICovCisJSEdQS19NT0RFTF9CID0gMHgyOCwJLyogQjJzLCBoYXMgY2FwYWNpdGFuY2UgaXNzdWVzICovCisJSEdQS19NT0RFTF9DID0gMHgzYywKKwlIR1BLX01PREVMX0QgPSAweDUwLAkvKiBDMSwgbWFzcyBwcm9kdWN0aW9uICovCit9OworCitzdHJ1Y3QgaGdwa19kYXRhIHsKKwlzdHJ1Y3QgcHNtb3VzZSAqcHNtb3VzZTsKKwlpbnQgcG93ZXJlZDsKKwlpbnQgY291bnQsIHhfdGFsbHksIHlfdGFsbHk7CS8qIGhhcmR3YXJlIHdvcmthcm91bmQgc3R1ZmYgKi8KKwl1bnNpZ25lZCBsb25nIHJlY2FsaWJfd2luZG93OworCXN0cnVjdCBkZWxheWVkX3dvcmsgcmVjYWxpYl93cTsKK307CisKKyNkZWZpbmUgaGdwa19kYmcocHNtb3VzZSwgZm9ybWF0LCBhcmcuLi4pCQlcCisJZGV2X2RiZygmKHBzbW91c2UpLT5wczJkZXYuc2VyaW8tPmRldiwgZm9ybWF0LCAjIyBhcmcpCisjZGVmaW5lIGhncGtfZXJyKHBzbW91c2UsIGZvcm1hdCwgYXJnLi4uKQkJXAorCWRldl9lcnIoJihwc21vdXNlKS0+cHMyZGV2LnNlcmlvLT5kZXYsIGZvcm1hdCwgIyMgYXJnKQorI2RlZmluZSBoZ3BrX2luZm8ocHNtb3VzZSwgZm9ybWF0LCBhcmcuLi4pCQlcCisJZGV2X2luZm8oJihwc21vdXNlKS0+cHMyZGV2LnNlcmlvLT5kZXYsIGZvcm1hdCwgIyMgYXJnKQorI2RlZmluZSBoZ3BrX3dhcm4ocHNtb3VzZSwgZm9ybWF0LCBhcmcuLi4pCQlcCisJZGV2X3dhcm4oJihwc21vdXNlKS0+cHMyZGV2LnNlcmlvLT5kZXYsIGZvcm1hdCwgIyMgYXJnKQorI2RlZmluZSBoZ3BrX25vdGljZShwc21vdXNlLCBmb3JtYXQsIGFyZy4uLikJCVwKKwlkZXZfbm90aWNlKCYocHNtb3VzZSktPnBzMmRldi5zZXJpby0+ZGV2LCBmb3JtYXQsICMjIGFyZykKKworI2lmZGVmIENPTkZJR19NT1VTRV9QUzJfT0xQQworaW50IGhncGtfZGV0ZWN0KHN0cnVjdCBwc21vdXNlICpwc21vdXNlLCBpbnQgc2V0X3Byb3BlcnRpZXMpOworaW50IGhncGtfaW5pdChzdHJ1Y3QgcHNtb3VzZSAqcHNtb3VzZSk7CisjZWxzZQorc3RhdGljIGlubGluZSBpbnQgaGdwa19kZXRlY3Qoc3RydWN0IHBzbW91c2UgKnBzbW91c2UsIGludCBzZXRfcHJvcGVydGllcykKK3sKKwlyZXR1cm4gLUVOT0RFVjsKK30KK3N0YXRpYyBpbmxpbmUgaW50IGhncGtfaW5pdChzdHJ1Y3QgcHNtb3VzZSAqcHNtb3VzZSkKK3sKKwlyZXR1cm4gLUVOT0RFVjsKK30KKyNlbmRpZgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvbW91c2UvbG9naXBzMnBwLmMgYi9kcml2ZXJzL2lucHV0L21vdXNlL2xvZ2lwczJwcC5jCmluZGV4IDBjNTY2MGQuLjM5MGYxZGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvbW91c2UvbG9naXBzMnBwLmMKKysrIGIvZHJpdmVycy9pbnB1dC9tb3VzZS9sb2dpcHMycHAuYwpAQCAtMTU3LDEwICsxNTcsOCBAQAogc3RhdGljIHNzaXplX3QgcHMycHBfYXR0cl9zZXRfc21hcnRzY3JvbGwoc3RydWN0IHBzbW91c2UgKnBzbW91c2UsIHZvaWQgKmRhdGEsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQogewogCXVuc2lnbmVkIGxvbmcgdmFsdWU7Ci0JY2hhciAqcmVzdDsKIAotCXZhbHVlID0gc2ltcGxlX3N0cnRvdWwoYnVmLCAmcmVzdCwgMTApOwotCWlmICgqcmVzdCB8fCB2YWx1ZSA+IDEpCisJaWYgKHN0cmljdF9zdHJ0b3VsKGJ1ZiwgMTAsICZ2YWx1ZSkgfHwgdmFsdWUgPiAxKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCXBzMnBwX3NldF9zbWFydHNjcm9sbChwc21vdXNlLCB2YWx1ZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L21vdXNlL3BzbW91c2UtYmFzZS5jIGIvZHJpdmVycy9pbnB1dC9tb3VzZS9wc21vdXNlLWJhc2UuYwppbmRleCBmNWE2YmUxLi4xMjZlOTc3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L21vdXNlL3BzbW91c2UtYmFzZS5jCisrKyBiL2RyaXZlcnMvaW5wdXQvbW91c2UvcHNtb3VzZS1iYXNlLmMKQEAgLTI1LDYgKzI1LDcgQEAKICNpbmNsdWRlICJzeW5hcHRpY3MuaCIKICNpbmNsdWRlICJsb2dpcHMycHAuaCIKICNpbmNsdWRlICJhbHBzLmgiCisjaW5jbHVkZSAiaGdway5oIgogI2luY2x1ZGUgImxpZmVib29rLmgiCiAjaW5jbHVkZSAidHJhY2twb2ludC5oIgogI2luY2x1ZGUgInRvdWNoa2l0X3BzMi5oIgpAQCAtMjAxLDYgKzIwMiwxMiBAQAogCXJldHVybiBQU01PVVNFX0ZVTExfUEFDS0VUOwogfQogCit2b2lkIHBzbW91c2VfcXVldWVfd29yayhzdHJ1Y3QgcHNtb3VzZSAqcHNtb3VzZSwgc3RydWN0IGRlbGF5ZWRfd29yayAqd29yaywKKwkJdW5zaWduZWQgbG9uZyBkZWxheSkKK3sKKwlxdWV1ZV9kZWxheWVkX3dvcmsoa3BzbW91c2VkX3dxLCB3b3JrLCBkZWxheSk7Cit9CisKIC8qCiAgKiBfX3BzbW91c2Vfc2V0X3N0YXRlKCkgc2V0cyBuZXcgcHNtb3VzZSBzdGF0ZSBhbmQgcmVzZXRzIGFsbCBmbGFncy4KICAqLwpAQCAtMjIwLDcgKzIyNyw3IEBACiAgKiBpcyBub3QgYSBjb25jZXJuLgogICovCiAKLXN0YXRpYyB2b2lkIHBzbW91c2Vfc2V0X3N0YXRlKHN0cnVjdCBwc21vdXNlICpwc21vdXNlLCBlbnVtIHBzbW91c2Vfc3RhdGUgbmV3X3N0YXRlKQordm9pZCBwc21vdXNlX3NldF9zdGF0ZShzdHJ1Y3QgcHNtb3VzZSAqcHNtb3VzZSwgZW51bSBwc21vdXNlX3N0YXRlIG5ld19zdGF0ZSkKIHsKIAlzZXJpb19wYXVzZV9yeChwc21vdXNlLT5wczJkZXYuc2VyaW8pOwogCV9fcHNtb3VzZV9zZXRfc3RhdGUocHNtb3VzZSwgbmV3X3N0YXRlKTsKQEAgLTMwNSw3ICszMTIsNyBAQAogCQkgICAgICAgcHNtb3VzZS0+bmFtZSwgcHNtb3VzZS0+cGh5cywgcHNtb3VzZS0+cGt0Y250KTsKIAkJcHNtb3VzZS0+YmFkYnl0ZSA9IHBzbW91c2UtPnBhY2tldFswXTsKIAkJX19wc21vdXNlX3NldF9zdGF0ZShwc21vdXNlLCBQU01PVVNFX1JFU1lOQ0lORyk7Ci0JCXF1ZXVlX3dvcmsoa3BzbW91c2VkX3dxLCAmcHNtb3VzZS0+cmVzeW5jX3dvcmspOworCQlwc21vdXNlX3F1ZXVlX3dvcmsocHNtb3VzZSwgJnBzbW91c2UtPnJlc3luY193b3JrLCAwKTsKIAkJZ290byBvdXQ7CiAJfQogCkBAIC0zNDIsNyArMzQ5LDcgQEAKIAkgICAgdGltZV9hZnRlcihqaWZmaWVzLCBwc21vdXNlLT5sYXN0ICsgcHNtb3VzZS0+cmVzeW5jX3RpbWUgKiBIWikpIHsKIAkJcHNtb3VzZS0+YmFkYnl0ZSA9IHBzbW91c2UtPnBhY2tldFswXTsKIAkJX19wc21vdXNlX3NldF9zdGF0ZShwc21vdXNlLCBQU01PVVNFX1JFU1lOQ0lORyk7Ci0JCXF1ZXVlX3dvcmsoa3BzbW91c2VkX3dxLCAmcHNtb3VzZS0+cmVzeW5jX3dvcmspOworCQlwc21vdXNlX3F1ZXVlX3dvcmsocHNtb3VzZSwgJnBzbW91c2UtPnJlc3luY193b3JrLCAwKTsKIAkJZ290byBvdXQ7CiAJfQogCkBAIC02MzAsOCArNjM3LDIwIEBACiAJCX0KIAl9CiAKLQlpZiAobWF4X3Byb3RvID4gUFNNT1VTRV9JTUVYKSB7CisvKgorICogVHJ5IE9MUEMgSEdQSyB0b3VjaHBhZC4KKyAqLworCWlmIChtYXhfcHJvdG8gPiBQU01PVVNFX0lNRVggJiYKKwkJCWhncGtfZGV0ZWN0KHBzbW91c2UsIHNldF9wcm9wZXJ0aWVzKSA9PSAwKSB7CisJCWlmICghc2V0X3Byb3BlcnRpZXMgfHwgaGdwa19pbml0KHBzbW91c2UpID09IDApCisJCQlyZXR1cm4gUFNNT1VTRV9IR1BLOworLyoKKyAqIEluaXQgZmFpbGVkLCB0cnkgYmFzaWMgcmVsYXRpdmUgcHJvdG9jb2xzCisgKi8KKwkJbWF4X3Byb3RvID0gUFNNT1VTRV9JTUVYOworCX0KIAorCWlmIChtYXhfcHJvdG8gPiBQU01PVVNFX0lNRVgpIHsKIAkJaWYgKGdlbml1c19kZXRlY3QocHNtb3VzZSwgc2V0X3Byb3BlcnRpZXMpID09IDApCiAJCQlyZXR1cm4gUFNNT1VTRV9HRU5QUzsKIApAQCAtNzYyLDYgKzc4MSwxNCBAQAogCQkuZGV0ZWN0CQk9IHRvdWNoa2l0X3BzMl9kZXRlY3QsCiAJfSwKICNlbmRpZgorI2lmZGVmIENPTkZJR19NT1VTRV9QUzJfT0xQQworCXsKKwkJLnR5cGUJCT0gUFNNT1VTRV9IR1BLLAorCQkubmFtZQkJPSAiT0xQQyBIR1BLIiwKKwkJLmFsaWFzCQk9ICJoZ3BrIiwKKwkJLmRldGVjdAkJPSBoZ3BrX2RldGVjdCwKKwl9LAorI2VuZGlmCiAJewogCQkudHlwZQkJPSBQU01PVVNFX0NPUlRST04sCiAJCS5uYW1lCQk9ICJDb3J0cm9uUFMvMiIsCkBAIC05MzUsNyArOTYyLDcgQEAKIHN0YXRpYyB2b2lkIHBzbW91c2VfcmVzeW5jKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIHsKIAlzdHJ1Y3QgcHNtb3VzZSAqcGFyZW50ID0gTlVMTCwgKnBzbW91c2UgPQotCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IHBzbW91c2UsIHJlc3luY193b3JrKTsKKwkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBwc21vdXNlLCByZXN5bmNfd29yay53b3JrKTsKIAlzdHJ1Y3Qgc2VyaW8gKnNlcmlvID0gcHNtb3VzZS0+cHMyZGV2LnNlcmlvOwogCXBzbW91c2VfcmV0X3QgcmMgPSBQU01PVVNFX0dPT0RfREFUQTsKIAlpbnQgZmFpbGVkID0gMCwgZW5hYmxlZCA9IDA7CkBAIC0xMTk0LDcgKzEyMjEsNyBAQAogCQlnb3RvIGVycl9mcmVlOwogCiAJcHMyX2luaXQoJnBzbW91c2UtPnBzMmRldiwgc2VyaW8pOwotCUlOSVRfV09SSygmcHNtb3VzZS0+cmVzeW5jX3dvcmssIHBzbW91c2VfcmVzeW5jKTsKKwlJTklUX0RFTEFZRURfV09SSygmcHNtb3VzZS0+cmVzeW5jX3dvcmssIHBzbW91c2VfcmVzeW5jKTsKIAlwc21vdXNlLT5kZXYgPSBpbnB1dF9kZXY7CiAJc25wcmludGYocHNtb3VzZS0+cGh5cywgc2l6ZW9mKHBzbW91c2UtPnBoeXMpLCAiJXMvaW5wdXQwIiwgc2VyaW8tPnBoeXMpOwogCkBAIC0xMzk1LDI1ICsxNDIyLDI5IEBACiAKIAlwc21vdXNlID0gc2VyaW9fZ2V0X2RydmRhdGEoc2VyaW8pOwogCi0JaWYgKHBzbW91c2UtPnN0YXRlID09IFBTTU9VU0VfSUdOT1JFKSB7Ci0JCXJldHZhbCA9IC1FTk9ERVY7Ci0JCWdvdG8gb3V0X3VubG9jazsKLQl9CisJaWYgKGF0dHItPnByb3RlY3QpIHsKKwkJaWYgKHBzbW91c2UtPnN0YXRlID09IFBTTU9VU0VfSUdOT1JFKSB7CisJCQlyZXR2YWwgPSAtRU5PREVWOworCQkJZ290byBvdXRfdW5sb2NrOworCQl9CiAKLQlpZiAoc2VyaW8tPnBhcmVudCAmJiBzZXJpby0+aWQudHlwZSA9PSBTRVJJT19QU19QU1RIUlUpIHsKLQkJcGFyZW50ID0gc2VyaW9fZ2V0X2RydmRhdGEoc2VyaW8tPnBhcmVudCk7Ci0JCXBzbW91c2VfZGVhY3RpdmF0ZShwYXJlbnQpOwotCX0KKwkJaWYgKHNlcmlvLT5wYXJlbnQgJiYgc2VyaW8tPmlkLnR5cGUgPT0gU0VSSU9fUFNfUFNUSFJVKSB7CisJCQlwYXJlbnQgPSBzZXJpb19nZXRfZHJ2ZGF0YShzZXJpby0+cGFyZW50KTsKKwkJCXBzbW91c2VfZGVhY3RpdmF0ZShwYXJlbnQpOworCQl9CiAKLQlwc21vdXNlX2RlYWN0aXZhdGUocHNtb3VzZSk7CisJCXBzbW91c2VfZGVhY3RpdmF0ZShwc21vdXNlKTsKKwl9CiAKIAlyZXR2YWwgPSBhdHRyLT5zZXQocHNtb3VzZSwgYXR0ci0+ZGF0YSwgYnVmLCBjb3VudCk7CiAKLQlpZiAocmV0dmFsICE9IC1FTk9ERVYpCi0JCXBzbW91c2VfYWN0aXZhdGUocHNtb3VzZSk7CisJaWYgKGF0dHItPnByb3RlY3QpIHsKKwkJaWYgKHJldHZhbCAhPSAtRU5PREVWKQorCQkJcHNtb3VzZV9hY3RpdmF0ZShwc21vdXNlKTsKIAotCWlmIChwYXJlbnQpCi0JCXBzbW91c2VfYWN0aXZhdGUocGFyZW50KTsKKwkJaWYgKHBhcmVudCkKKwkJCXBzbW91c2VfYWN0aXZhdGUocGFyZW50KTsKKwl9CiAKICBvdXRfdW5sb2NrOgogCW11dGV4X3VubG9jaygmcHNtb3VzZV9tdXRleCk7CkBAIC0xNDMzLDEwICsxNDY0LDggQEAKIHsKIAl1bnNpZ25lZCBpbnQgKmZpZWxkID0gKHVuc2lnbmVkIGludCAqKSgoY2hhciAqKXBzbW91c2UgKyAoc2l6ZV90KW9mZnNldCk7CiAJdW5zaWduZWQgbG9uZyB2YWx1ZTsKLQljaGFyICpyZXN0OwogCi0JdmFsdWUgPSBzaW1wbGVfc3RydG91bChidWYsICZyZXN0LCAxMCk7Ci0JaWYgKCpyZXN0KQorCWlmIChzdHJpY3Rfc3RydG91bChidWYsIDEwLCAmdmFsdWUpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWlmICgodW5zaWduZWQgaW50KXZhbHVlICE9IHZhbHVlKQpAQCAtMTU0OSwxMCArMTU3OCw4IEBACiBzdGF0aWMgc3NpemVfdCBwc21vdXNlX2F0dHJfc2V0X3JhdGUoc3RydWN0IHBzbW91c2UgKnBzbW91c2UsIHZvaWQgKmRhdGEsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQogewogCXVuc2lnbmVkIGxvbmcgdmFsdWU7Ci0JY2hhciAqcmVzdDsKIAotCXZhbHVlID0gc2ltcGxlX3N0cnRvdWwoYnVmLCAmcmVzdCwgMTApOwotCWlmICgqcmVzdCkKKwlpZiAoc3RyaWN0X3N0cnRvdWwoYnVmLCAxMCwgJnZhbHVlKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlwc21vdXNlLT5zZXRfcmF0ZShwc21vdXNlLCB2YWx1ZSk7CkBAIC0xNTYyLDEwICsxNTg5LDggQEAKIHN0YXRpYyBzc2l6ZV90IHBzbW91c2VfYXR0cl9zZXRfcmVzb2x1dGlvbihzdHJ1Y3QgcHNtb3VzZSAqcHNtb3VzZSwgdm9pZCAqZGF0YSwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCiB7CiAJdW5zaWduZWQgbG9uZyB2YWx1ZTsKLQljaGFyICpyZXN0OwogCi0JdmFsdWUgPSBzaW1wbGVfc3RydG91bChidWYsICZyZXN0LCAxMCk7Ci0JaWYgKCpyZXN0KQorCWlmIChzdHJpY3Rfc3RydG91bChidWYsIDEwLCAmdmFsdWUpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCXBzbW91c2UtPnNldF9yZXNvbHV0aW9uKHBzbW91c2UsIHZhbHVlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvbW91c2UvcHNtb3VzZS5oIGIvZHJpdmVycy9pbnB1dC9tb3VzZS9wc21vdXNlLmgKaW5kZXggMTMxN2JkZC4uOGI2MDhhMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9tb3VzZS9wc21vdXNlLmgKKysrIGIvZHJpdmVycy9pbnB1dC9tb3VzZS9wc21vdXNlLmgKQEAgLTM5LDcgKzM5LDcgQEAKIAl2b2lkICpwcml2YXRlOwogCXN0cnVjdCBpbnB1dF9kZXYgKmRldjsKIAlzdHJ1Y3QgcHMyZGV2IHBzMmRldjsKLQlzdHJ1Y3Qgd29ya19zdHJ1Y3QgcmVzeW5jX3dvcms7CisJc3RydWN0IGRlbGF5ZWRfd29yayByZXN5bmNfd29yazsKIAljaGFyICp2ZW5kb3I7CiAJY2hhciAqbmFtZTsKIAl1bnNpZ25lZCBjaGFyIHBhY2tldFs4XTsKQEAgLTg5LDIwICs4OSwyNCBAQAogCVBTTU9VU0VfVFJBQ0tQT0lOVCwKIAlQU01PVVNFX1RPVUNIS0lUX1BTMiwKIAlQU01PVVNFX0NPUlRST04sCisJUFNNT1VTRV9IR1BLLAogCVBTTU9VU0VfQVVUTwkJLyogVGhpcyBvbmUgc2hvdWxkIGFsd2F5cyBiZSBsYXN0ICovCiB9OwogCit2b2lkIHBzbW91c2VfcXVldWVfd29yayhzdHJ1Y3QgcHNtb3VzZSAqcHNtb3VzZSwgc3RydWN0IGRlbGF5ZWRfd29yayAqd29yaywKKwkJdW5zaWduZWQgbG9uZyBkZWxheSk7CiBpbnQgcHNtb3VzZV9zbGljZWRfY29tbWFuZChzdHJ1Y3QgcHNtb3VzZSAqcHNtb3VzZSwgdW5zaWduZWQgY2hhciBjb21tYW5kKTsKIGludCBwc21vdXNlX3Jlc2V0KHN0cnVjdCBwc21vdXNlICpwc21vdXNlKTsKK3ZvaWQgcHNtb3VzZV9zZXRfc3RhdGUoc3RydWN0IHBzbW91c2UgKnBzbW91c2UsIGVudW0gcHNtb3VzZV9zdGF0ZSBuZXdfc3RhdGUpOwogdm9pZCBwc21vdXNlX3NldF9yZXNvbHV0aW9uKHN0cnVjdCBwc21vdXNlICpwc21vdXNlLCB1bnNpZ25lZCBpbnQgcmVzb2x1dGlvbik7CiAKLQogc3RydWN0IHBzbW91c2VfYXR0cmlidXRlIHsKIAlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSBkYXR0cjsKIAl2b2lkICpkYXRhOwogCXNzaXplX3QgKCpzaG93KShzdHJ1Y3QgcHNtb3VzZSAqcHNtb3VzZSwgdm9pZCAqZGF0YSwgY2hhciAqYnVmKTsKIAlzc2l6ZV90ICgqc2V0KShzdHJ1Y3QgcHNtb3VzZSAqcHNtb3VzZSwgdm9pZCAqZGF0YSwKIAkJCWNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KTsKKwlpbnQgcHJvdGVjdDsKIH07CiAjZGVmaW5lIHRvX3BzbW91c2VfYXR0cihhKQljb250YWluZXJfb2YoKGEpLCBzdHJ1Y3QgcHNtb3VzZV9hdHRyaWJ1dGUsIGRhdHRyKQogCkBAIC0xMTEsNyArMTE1LDcgQEAKIHNzaXplX3QgcHNtb3VzZV9hdHRyX3NldF9oZWxwZXIoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKIAkJCQljb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCk7CiAKLSNkZWZpbmUgUFNNT1VTRV9ERUZJTkVfQVRUUihfbmFtZSwgX21vZGUsIF9kYXRhLCBfc2hvdywgX3NldCkJCQlcCisjZGVmaW5lIF9fUFNNT1VTRV9ERUZJTkVfQVRUUihfbmFtZSwgX21vZGUsIF9kYXRhLCBfc2hvdywgX3NldCwgX3Byb3RlY3QpCVwKIHN0YXRpYyBzc2l6ZV90IF9zaG93KHN0cnVjdCBwc21vdXNlICosIHZvaWQgKmRhdGEsIGNoYXIgKik7CQkJXAogc3RhdGljIHNzaXplX3QgX3NldChzdHJ1Y3QgcHNtb3VzZSAqLCB2b2lkICpkYXRhLCBjb25zdCBjaGFyICosIHNpemVfdCk7CVwKIHN0YXRpYyBzdHJ1Y3QgcHNtb3VzZV9hdHRyaWJ1dGUgcHNtb3VzZV9hdHRyXyMjX25hbWUgPSB7CQkJXApAQCAtMTI2LDYgKzEzMCwxMCBAQAogCS5kYXRhCT0gX2RhdGEsCQkJCQkJCVwKIAkuc2hvdwk9IF9zaG93LAkJCQkJCQlcCiAJLnNldAk9IF9zZXQsCQkJCQkJCQlcCisJLnByb3RlY3QgPSBfcHJvdGVjdCwJCQkJCQkJXAogfQogCisjZGVmaW5lIFBTTU9VU0VfREVGSU5FX0FUVFIoX25hbWUsIF9tb2RlLCBfZGF0YSwgX3Nob3csIF9zZXQpCVwKKwkJX19QU01PVVNFX0RFRklORV9BVFRSKF9uYW1lLCBfbW9kZSwgX2RhdGEsIF9zaG93LCBfc2V0LCAxKQorCiAjZW5kaWYgLyogX1BTTU9VU0VfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9tb3VzZS90cmFja3BvaW50LmMgYi9kcml2ZXJzL2lucHV0L21vdXNlL3RyYWNrcG9pbnQuYwppbmRleCAyNmI4NDVmYy4uZTY4YzgxNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9tb3VzZS90cmFja3BvaW50LmMKKysrIGIvZHJpdmVycy9pbnB1dC9tb3VzZS90cmFja3BvaW50LmMKQEAgLTg5LDEwICs4OSw4IEBACiAJc3RydWN0IHRyYWNrcG9pbnRfYXR0cl9kYXRhICphdHRyID0gZGF0YTsKIAl1bnNpZ25lZCBjaGFyICpmaWVsZCA9ICh1bnNpZ25lZCBjaGFyICopKChjaGFyICopdHAgKyBhdHRyLT5maWVsZF9vZmZzZXQpOwogCXVuc2lnbmVkIGxvbmcgdmFsdWU7Ci0JY2hhciAqcmVzdDsKIAotCXZhbHVlID0gc2ltcGxlX3N0cnRvdWwoYnVmLCAmcmVzdCwgMTApOwotCWlmICgqcmVzdCB8fCB2YWx1ZSA+IDI1NSkKKwlpZiAoc3RyaWN0X3N0cnRvdWwoYnVmLCAxMCwgJnZhbHVlKSB8fCB2YWx1ZSA+IDI1NSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAkqZmllbGQgPSB2YWx1ZTsKQEAgLTExNywxMCArMTE1LDggQEAKIAlzdHJ1Y3QgdHJhY2twb2ludF9hdHRyX2RhdGEgKmF0dHIgPSBkYXRhOwogCXVuc2lnbmVkIGNoYXIgKmZpZWxkID0gKHVuc2lnbmVkIGNoYXIgKikoKGNoYXIgKil0cCArIGF0dHItPmZpZWxkX29mZnNldCk7CiAJdW5zaWduZWQgbG9uZyB2YWx1ZTsKLQljaGFyICpyZXN0OwogCi0JdmFsdWUgPSBzaW1wbGVfc3RydG91bChidWYsICZyZXN0LCAxMCk7Ci0JaWYgKCpyZXN0IHx8IHZhbHVlID4gMSkKKwlpZiAoc3RyaWN0X3N0cnRvdWwoYnVmLCAxMCwgJnZhbHVlKSB8fCB2YWx1ZSA+IDEpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJaWYgKGF0dHItPmludmVydGVkKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9zZXJpby9ocF9zZGMuYyBiL2RyaXZlcnMvaW5wdXQvc2VyaW8vaHBfc2RjLmMKaW5kZXggMGQzOTU5Ny4uYmZlNDkyNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9zZXJpby9ocF9zZGMuYworKysgYi9kcml2ZXJzL2lucHV0L3NlcmlvL2hwX3NkYy5jCkBAIC0zMjMsNyArMzIzLDcgQEAKIAkJCSAqIGl0IGJhY2sgdG8gdGhlIGFwcGxpY2F0aW9uLiBhbmQgYmUgbGVzcyB2ZXJib3NlLgogCQkJICovCiAJCQlwcmludGsoS0VSTl9XQVJOSU5HIFBSRUZJWCAicmVhZCB0aW1lb3V0ICglaXVzKSFcbiIsCi0JCQkgICAgICAgdHYudHZfdXNlYyAtIGhwX3NkYy5ydHYudHZfdXNlYyk7CisJCQkgICAgICAgKGludCkodHYudHZfdXNlYyAtIGhwX3NkYy5ydHYudHZfdXNlYykpOwogCQkJY3Vyci0+aWR4ICs9IGhwX3NkYy5ycXR5OwogCQkJaHBfc2RjLnJxdHkgPSAwOwogCQkJdG1wID0gY3Vyci0+c2VxW2N1cnItPmFjdGlkeF07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L3NlcmlvL2k4MDQyLWlvLmggYi9kcml2ZXJzL2lucHV0L3NlcmlvL2k4MDQyLWlvLmgKaW5kZXggZjQ1MWM3My4uODQ3ZjRhYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9zZXJpby9pODA0Mi1pby5oCisrKyBiL2RyaXZlcnMvaW5wdXQvc2VyaW8vaTgwNDItaW8uaApAQCAtNjcsNyArNjcsNyBAQAogICogT24gc29tZSBwbGF0Zm9ybXMgdG91Y2hpbmcgdGhlIGk4MDQyIGRhdGEgcmVnaXN0ZXIgcmVnaW9uIGNhbiBkbyByZWFsbHkKICAqIGJhZCB0aGluZ3MuIEJlY2F1c2Ugb2YgdGhpcyB0aGUgcmVnaW9uIGlzIGFsd2F5cyByZXNlcnZlZCBvbiBzdWNoIGJveGVzLgogICovCi0jaWYgZGVmaW5lZChDT05GSUdfUFBDX01FUkdFKQorI2lmIGRlZmluZWQoQ09ORklHX1BQQykKIAlpZiAoY2hlY2tfbGVnYWN5X2lvcG9ydChJODA0Ml9EQVRBX1JFRykpCiAJCXJldHVybiAtRU5PREVWOwogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L3NlcmlvL2k4MDQyLXg4NmlhNjRpby5oIGIvZHJpdmVycy9pbnB1dC9zZXJpby9pODA0Mi14ODZpYTY0aW8uaAppbmRleCA1YWFmZTI0Li5hMzIxYWVhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L3NlcmlvL2k4MDQyLXg4NmlhNjRpby5oCisrKyBiL2RyaXZlcnMvaW5wdXQvc2VyaW8vaTgwNDIteDg2aWE2NGlvLmgKQEAgLTMyMiw2ICszMjIsMTMgQEAKIAkJCURNSV9NQVRDSChETUlfUFJPRFVDVF9OQU1FLCAiTjM0QVM2IiksCiAJCX0sCiAJfSwKKwl7CisJCS5pZGVudCA9ICJJQk0gMjY1NiIsCisJCS5tYXRjaGVzID0geworCQkJRE1JX01BVENIKERNSV9TWVNfVkVORE9SLCAiSUJNIiksCisJCQlETUlfTUFUQ0goRE1JX1BST0RVQ1RfTkFNRSwgIjI2NTYiKSwKKwkJfSwKKwl9LAogCXsgfQogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpb19yYXcuYyBiL2RyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW9fcmF3LmMKaW5kZXggYzkzOTdjOC4uNDcwNzcwYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpb19yYXcuYworKysgYi9kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvX3Jhdy5jCkBAIC0zNzMsNiArMzczLDEyIEBACiAJCS5pZAk9IFNFUklPX0FOWSwKIAkJLmV4dHJhCT0gU0VSSU9fQU5ZLAogCX0sCisJeworCQkudHlwZQk9IFNFUklPXzgwNDJfWEwsCisJCS5wcm90bwk9IFNFUklPX0FOWSwKKwkJLmlkCT0gU0VSSU9fQU5ZLAorCQkuZXh0cmEJPSBTRVJJT19BTlksCisJfSwKIAl7IDAgfQogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC90YWJsZXQvYWNlY2FkLmMgYi9kcml2ZXJzL2lucHV0L3RhYmxldC9hY2VjYWQuYwppbmRleCA1NzBlMGU4Li42NzBjNjFjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L3RhYmxldC9hY2VjYWQuYworKysgYi9kcml2ZXJzL2lucHV0L3RhYmxldC9hY2VjYWQuYwpAQCAtMjgwLDcgKzI4MCw4IEBACiB7CiAJaW50IHJlc3VsdCA9IHVzYl9yZWdpc3RlcigmdXNiX2FjZWNhZF9kcml2ZXIpOwogCWlmIChyZXN1bHQgPT0gMCkKLQkJaW5mbyhEUklWRVJfVkVSU0lPTiAiOiIgRFJJVkVSX0RFU0MpOworCQlwcmludGsoS0VSTl9JTkZPIEtCVUlMRF9NT0ROQU1FICI6ICIgRFJJVkVSX1ZFUlNJT04gIjoiCisJCSAgICAgICBEUklWRVJfREVTQyAiXG4iKTsKIAlyZXR1cm4gcmVzdWx0OwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L3RhYmxldC9haXB0ZWsuYyBiL2RyaXZlcnMvaW5wdXQvdGFibGV0L2FpcHRlay5jCmluZGV4IDhmMDM3YTEuLjdkMDA1YTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvdGFibGV0L2FpcHRlay5jCisrKyBiL2RyaXZlcnMvaW5wdXQvdGFibGV0L2FpcHRlay5jCkBAIC0xMjAyLDE2ICsxMjAyLDIyIEBACiBzdG9yZV90YWJsZXRYdGlsdChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKIHsKIAlzdHJ1Y3QgYWlwdGVrICphaXB0ZWsgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKLQlpbnQgeDsKKwlsb25nIHg7CiAKLQlpZiAoc3RyY21wKGJ1ZiwgImRpc2FibGUiKSA9PSAwKSB7CisJaWYgKHN0cmljdF9zdHJ0b2woYnVmLCAxMCwgJngpKSB7CisJCXNpemVfdCBsZW4gPSBidWZbY291bnQgLSAxXSA9PSAnXG4nID8gY291bnQgLSAxIDogY291bnQ7CisKKwkJaWYgKHN0cm5jbXAoYnVmLCAiZGlzYWJsZSIsIGxlbikpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwogCQlhaXB0ZWstPm5ld1NldHRpbmcueFRpbHQgPSBBSVBURUtfVElMVF9ESVNBQkxFOwogCX0gZWxzZSB7Ci0JCXggPSAoaW50KXNpbXBsZV9zdHJ0b2woYnVmLCBOVUxMLCAxMCk7Ci0JCWlmICh4ID49IEFJUFRFS19USUxUX01JTiAmJiB4IDw9IEFJUFRFS19USUxUX01BWCkgewotCQkJYWlwdGVrLT5uZXdTZXR0aW5nLnhUaWx0ID0geDsKLQkJfQorCQlpZiAoeCA8IEFJUFRFS19USUxUX01JTiB8fCB4ID4gQUlQVEVLX1RJTFRfTUFYKQorCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJYWlwdGVrLT5uZXdTZXR0aW5nLnhUaWx0ID0geDsKIAl9CisKIAlyZXR1cm4gY291bnQ7CiB9CiAKQEAgLTEyMzgsMTYgKzEyNDQsMjIgQEAKIHN0b3JlX3RhYmxldFl0aWx0KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQogewogCXN0cnVjdCBhaXB0ZWsgKmFpcHRlayA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwotCWludCB5OworCWxvbmcgeTsKIAotCWlmIChzdHJjbXAoYnVmLCAiZGlzYWJsZSIpID09IDApIHsKKwlpZiAoc3RyaWN0X3N0cnRvbChidWYsIDEwLCAmeSkpIHsKKwkJc2l6ZV90IGxlbiA9IGJ1Zltjb3VudCAtIDFdID09ICdcbicgPyBjb3VudCAtIDEgOiBjb3VudDsKKworCQlpZiAoc3RybmNtcChidWYsICJkaXNhYmxlIiwgbGVuKSkKKwkJCXJldHVybiAtRUlOVkFMOworCiAJCWFpcHRlay0+bmV3U2V0dGluZy55VGlsdCA9IEFJUFRFS19USUxUX0RJU0FCTEU7CiAJfSBlbHNlIHsKLQkJeSA9IChpbnQpc2ltcGxlX3N0cnRvbChidWYsIE5VTEwsIDEwKTsKLQkJaWYgKHkgPj0gQUlQVEVLX1RJTFRfTUlOICYmIHkgPD0gQUlQVEVLX1RJTFRfTUFYKSB7Ci0JCQlhaXB0ZWstPm5ld1NldHRpbmcueVRpbHQgPSB5OwotCQl9CisJCWlmICh5IDwgQUlQVEVLX1RJTFRfTUlOIHx8IHkgPiBBSVBURUtfVElMVF9NQVgpCisJCQlyZXR1cm4gLUVJTlZBTDsKKworCQlhaXB0ZWstPm5ld1NldHRpbmcueVRpbHQgPSB5OwogCX0KKwogCXJldHVybiBjb3VudDsKIH0KIApAQCAtMTI2OSw4ICsxMjgxLDEyIEBACiBzdG9yZV90YWJsZXRKaXR0ZXJEZWxheShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKIHsKIAlzdHJ1Y3QgYWlwdGVrICphaXB0ZWsgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlsb25nIGo7CiAKLQlhaXB0ZWstPm5ld1NldHRpbmcuaml0dGVyRGVsYXkgPSAoaW50KXNpbXBsZV9zdHJ0b2woYnVmLCBOVUxMLCAxMCk7CisJaWYgKHN0cmljdF9zdHJ0b2woYnVmLCAxMCwgJmopKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWFpcHRlay0+bmV3U2V0dGluZy5qaXR0ZXJEZWxheSA9IChpbnQpajsKIAlyZXR1cm4gY291bnQ7CiB9CiAKQEAgLTEyOTQsOCArMTMxMCwxMiBAQAogc3RvcmVfdGFibGV0UHJvZ3JhbW1hYmxlRGVsYXkoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCiB7CiAJc3RydWN0IGFpcHRlayAqYWlwdGVrID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJbG9uZyBkOwogCi0JYWlwdGVrLT5uZXdTZXR0aW5nLnByb2dyYW1tYWJsZURlbGF5ID0gKGludClzaW1wbGVfc3RydG9sKGJ1ZiwgTlVMTCwgMTApOworCWlmIChzdHJpY3Rfc3RydG9sKGJ1ZiwgMTAsICZkKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlhaXB0ZWstPm5ld1NldHRpbmcucHJvZ3JhbW1hYmxlRGVsYXkgPSAoaW50KWQ7CiAJcmV0dXJuIGNvdW50OwogfQogCkBAIC0xNTQxLDggKzE1NjEsMTEgQEAKIHN0b3JlX3RhYmxldFdoZWVsKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQogewogCXN0cnVjdCBhaXB0ZWsgKmFpcHRlayA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCWxvbmcgdzsKIAotCWFpcHRlay0+bmV3U2V0dGluZy53aGVlbCA9IChpbnQpc2ltcGxlX3N0cnRvbChidWYsIE5VTEwsIDEwKTsKKwlpZiAoc3RyaWN0X3N0cnRvbChidWYsIDEwLCAmdykpIHJldHVybiAtRUlOVkFMOworCisJYWlwdGVrLT5uZXdTZXR0aW5nLndoZWVsID0gKGludCl3OwogCXJldHVybiBjb3VudDsKIH0KIApAQCAtMTY4MywyMCArMTcwNiwyMSBAQAogCWFpcHRlayA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBhaXB0ZWspLCBHRlBfS0VSTkVMKTsKIAlpbnB1dGRldiA9IGlucHV0X2FsbG9jYXRlX2RldmljZSgpOwogCWlmICghYWlwdGVrIHx8ICFpbnB1dGRldikgewotCQl3YXJuKCJhaXB0ZWs6IGNhbm5vdCBhbGxvY2F0ZSBtZW1vcnkgb3IgaW5wdXQgZGV2aWNlIik7CisJCWRldl93YXJuKCZpbnRmLT5kZXYsCisJCQkgImNhbm5vdCBhbGxvY2F0ZSBtZW1vcnkgb3IgaW5wdXQgZGV2aWNlXG4iKTsKIAkJZ290byBmYWlsMTsKICAgICAgICAgfQogCiAJYWlwdGVrLT5kYXRhID0gdXNiX2J1ZmZlcl9hbGxvYyh1c2JkZXYsIEFJUFRFS19QQUNLRVRfTEVOR1RILAogCQkJCQlHRlBfQVRPTUlDLCAmYWlwdGVrLT5kYXRhX2RtYSk7CiAgICAgICAgIGlmICghYWlwdGVrLT5kYXRhKSB7Ci0JCXdhcm4oImFpcHRlazogY2Fubm90IGFsbG9jYXRlIHVzYiBidWZmZXIiKTsKKwkJZGV2X3dhcm4oJmludGYtPmRldiwgImNhbm5vdCBhbGxvY2F0ZSB1c2IgYnVmZmVyXG4iKTsKIAkJZ290byBmYWlsMTsKIAl9CiAKIAlhaXB0ZWstPnVyYiA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFhaXB0ZWstPnVyYikgewotCSAgICAgICAgd2FybigiYWlwdGVrOiBjYW5ub3QgYWxsb2NhdGUgdXJiIik7CisJICAgICAgICBkZXZfd2FybigmaW50Zi0+ZGV2LCAiY2Fubm90IGFsbG9jYXRlIHVyYlxuIik7CiAJCWdvdG8gZmFpbDI7CiAJfQogCkBAIC0xODIwLDggKzE4NDQsOSBAQAogCQlhaXB0ZWstPmN1clNldHRpbmcucHJvZ3JhbW1hYmxlRGVsYXkgPSBzcGVlZHNbaV07CiAJCSh2b2lkKWFpcHRla19wcm9ncmFtX3RhYmxldChhaXB0ZWspOwogCQlpZiAoYWlwdGVrLT5pbnB1dGRldi0+YWJzbWF4W0FCU19YXSA+IDApIHsKLQkJCWluZm8oImlucHV0OiBBaXB0ZWsgdXNpbmcgJWQgbXMgcHJvZ3JhbW1pbmcgc3BlZWRcbiIsCi0JCQkgICAgIGFpcHRlay0+Y3VyU2V0dGluZy5wcm9ncmFtbWFibGVEZWxheSk7CisJCQlkZXZfaW5mbygmaW50Zi0+ZGV2LAorCQkJCSAiQWlwdGVrIHVzaW5nICVkIG1zIHByb2dyYW1taW5nIHNwZWVkXG4iLAorCQkJCSBhaXB0ZWstPmN1clNldHRpbmcucHJvZ3JhbW1hYmxlRGVsYXkpOwogCQkJYnJlYWs7CiAJCX0KIAl9CkBAIC0xODI5LDcgKzE4NTQsOCBAQAogCS8qIE11cnBoeSBzYXlzIHRoYXQgc29tZSBkYXkgc29tZW9uZSB3aWxsIGhhdmUgYSB0YWJsZXQgdGhhdCBmYWlscyB0aGUKIAkgICBhYm92ZSB0ZXN0LiBUaGF0J3MgeW91LCBGcmVkZXJpYyBSb2RyaWdvICovCiAJaWYgKGkgPT0gQVJSQVlfU0laRShzcGVlZHMpKSB7Ci0JCWluZm8oImlucHV0OiBBaXB0ZWsgdHJpZWQgYWxsIHNwZWVkcywgbm8gc2FuZSByZXNwb25zZSIpOworCQlkZXZfaW5mbygmaW50Zi0+ZGV2LAorCQkJICJBaXB0ZWsgdHJpZWQgYWxsIHNwZWVkcywgbm8gc2FuZSByZXNwb25zZVxuIik7CiAJCWdvdG8gZmFpbDI7CiAJfQogCkBAIC0xODQxLDcgKzE4NjcsOCBAQAogCSAqLwogCWVyciA9IHN5c2ZzX2NyZWF0ZV9ncm91cCgmaW50Zi0+ZGV2LmtvYmosICZhaXB0ZWtfYXR0cmlidXRlX2dyb3VwKTsKIAlpZiAoZXJyKSB7Ci0JCXdhcm4oImFpcHRlazogY2Fubm90IGNyZWF0ZSBzeXNmcyBncm91cCBlcnI6ICVkIiwgZXJyKTsKKwkJZGV2X3dhcm4oJmludGYtPmRldiwgImNhbm5vdCBjcmVhdGUgc3lzZnMgZ3JvdXAgZXJyOiAlZFxuIiwKKwkJCSBlcnIpOwogCQlnb3RvIGZhaWwzOwogICAgICAgICB9CiAKQEAgLTE4NDksNyArMTg3Niw4IEBACiAJICovCiAJZXJyID0gaW5wdXRfcmVnaXN0ZXJfZGV2aWNlKGFpcHRlay0+aW5wdXRkZXYpOwogCWlmIChlcnIpIHsKLQkJd2FybigiYWlwdGVrOiBpbnB1dF9yZWdpc3Rlcl9kZXZpY2UgcmV0dXJuZWQgZXJyOiAlZCIsIGVycik7CisJCWRldl93YXJuKCZpbnRmLT5kZXYsCisJCQkgImlucHV0X3JlZ2lzdGVyX2RldmljZSByZXR1cm5lZCBlcnI6ICVkXG4iLCBlcnIpOwogCQlnb3RvIGZhaWw0OwogICAgICAgICB9CiAJcmV0dXJuIDA7CkBAIC0xODk5LDggKzE5MjcsOSBAQAogewogCWludCByZXN1bHQgPSB1c2JfcmVnaXN0ZXIoJmFpcHRla19kcml2ZXIpOwogCWlmIChyZXN1bHQgPT0gMCkgewotCQlpbmZvKERSSVZFUl9WRVJTSU9OICI6ICIgRFJJVkVSX0FVVEhPUik7Ci0JCWluZm8oRFJJVkVSX0RFU0MpOworCQlwcmludGsoS0VSTl9JTkZPIEtCVUlMRF9NT0ROQU1FICI6ICIgRFJJVkVSX1ZFUlNJT04gIjoiCisJCSAgICAgICBEUklWRVJfREVTQyAiXG4iKTsKKwkJcHJpbnRrKEtFUk5fSU5GTyBLQlVJTERfTU9ETkFNRSAiOiAiIERSSVZFUl9BVVRIT1IgIlxuIik7CiAJfQogCXJldHVybiByZXN1bHQ7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L3RhYmxldC9ndGNvLmMgYi9kcml2ZXJzL2lucHV0L3RhYmxldC9ndGNvLmMKaW5kZXggN2RmMDIyOC4uNTUyNGUwMWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvdGFibGV0L2d0Y28uYworKysgYi9kcml2ZXJzL2lucHV0L3RhYmxldC9ndGNvLmMKQEAgLTIsNyArMiw3IEBACiAKIEdUQ08gZGlnaXRpemVyIFVTQiBkcml2ZXIKIAotVXNlIHRoZSBlcnIoKSwgZGJnKCkgYW5kIGluZm8oKSBtYWNyb3MgZnJvbSB1c2IuaCBmb3Igc3lzdGVtIGxvZ2dpbmcKK1VzZSB0aGUgZXJyKCkgYW5kIGRiZygpIG1hY3JvcyBmcm9tIHVzYi5oIGZvciBzeXN0ZW0gbG9nZ2luZwogCiBUTyBDSEVDSzogIElzIHByZXNzdXJlIGRvbmUgcmlnaHQgb24gcmVwb3J0IDU/CiAKQEAgLTEwMTAsNyArMTAxMCw3IEBACiAJCWtmcmVlKGd0Y28pOwogCX0KIAotCWluZm8oImd0Y28gZHJpdmVyIGRpc2Nvbm5lY3RlZCIpOworCWRldl9pbmZvKCZpbnRlcmZhY2UtPmRldiwgImd0Y28gZHJpdmVyIGRpc2Nvbm5lY3RlZFxuIik7CiB9CiAKIC8qICAgU1RBTkRBUkQgTU9EVUxFIExPQUQgUk9VVElORVMgICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L3RhYmxldC9rYnRhYi5jIGIvZHJpdmVycy9pbnB1dC90YWJsZXQva2J0YWIuYwppbmRleCBkODkxMTJmLi42NjgyYjE3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L3RhYmxldC9rYnRhYi5jCisrKyBiL2RyaXZlcnMvaW5wdXQvdGFibGV0L2tidGFiLmMKQEAgLTIxNSw3ICsyMTUsOCBAQAogCXJldHZhbCA9IHVzYl9yZWdpc3Rlcigma2J0YWJfZHJpdmVyKTsKIAlpZiAocmV0dmFsKQogCQlnb3RvIG91dDsKLQlpbmZvKERSSVZFUl9WRVJTSU9OICI6IiBEUklWRVJfREVTQyk7CisJcHJpbnRrKEtFUk5fSU5GTyBLQlVJTERfTU9ETkFNRSAiOiAiIERSSVZFUl9WRVJTSU9OICI6IgorCSAgICAgICBEUklWRVJfREVTQyAiXG4iKTsKIG91dDoKIAlyZXR1cm4gcmV0dmFsOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC90YWJsZXQvd2Fjb21fc3lzLmMgYi9kcml2ZXJzL2lucHV0L3RhYmxldC93YWNvbV9zeXMuYwppbmRleCA1ZmJjNDYzLi4wOWUyMjdhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L3RhYmxldC93YWNvbV9zeXMuYworKysgYi9kcml2ZXJzL2lucHV0L3RhYmxldC93YWNvbV9zeXMuYwpAQCAtMzg1LDcgKzM4NSw4IEBACiAJd2Fjb21fZHJpdmVyLmlkX3RhYmxlID0gZ2V0X2RldmljZV90YWJsZSgpOwogCXJlc3VsdCA9IHVzYl9yZWdpc3Rlcigmd2Fjb21fZHJpdmVyKTsKIAlpZiAocmVzdWx0ID09IDApCi0JCWluZm8oRFJJVkVSX1ZFUlNJT04gIjoiIERSSVZFUl9ERVNDKTsKKwkJcHJpbnRrKEtFUk5fSU5GTyBLQlVJTERfTU9ETkFNRSAiOiAiIERSSVZFUl9WRVJTSU9OICI6IgorCQkgICAgICAgRFJJVkVSX0RFU0MgIlxuIik7CiAJcmV0dXJuIHJlc3VsdDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9LY29uZmlnIGIvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9LY29uZmlnCmluZGV4IDZlMWU4YzYuLjgzMTdmZGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vS2NvbmZpZworKysgYi9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL0tjb25maWcKQEAgLTIxOSw3ICsyMTksNyBAQAogCiBjb25maWcgVE9VQ0hTQ1JFRU5fVUNCMTQwMAogCXRyaXN0YXRlICJQaGlsaXBzIFVDQjE0MDAgdG91Y2hzY3JlZW4iCi0Jc2VsZWN0IEFDOTdfQlVTCisJZGVwZW5kcyBvbiBBQzk3X0JVUwogCWRlcGVuZHMgb24gVUNCMTQwMF9DT1JFCiAJaGVscAogCSAgVGhpcyBlbmFibGVzIHN1cHBvcnQgZm9yIHRoZSBQaGlsaXBzIFVDQjE0MDAgdG91Y2hzY3JlZW4gaW50ZXJmYWNlLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9hZHM3ODQ2LmMgYi9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL2Fkczc4NDYuYwppbmRleCA4NTgzYzc2Li5iOWI3ZmM2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL2Fkczc4NDYuYworKysgYi9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL2Fkczc4NDYuYwpAQCAtNjksNiArNjksMTcgQEAKIAlpbnQJaWdub3JlOwogfTsKIAorLyoKKyAqIFdlIGFsbG9jYXRlIHRoaXMgc2VwYXJhdGVseSB0byBhdm9pZCBjYWNoZSBsaW5lIHNoYXJpbmcgaXNzdWVzIHdoZW4KKyAqIGRyaXZlciBpcyB1c2VkIHdpdGggRE1BLWJhc2VkIFNQSSBjb250cm9sbGVycyAobGlrZSBhdG1lbF9zcGkpIG9uCisgKiBzeXN0ZW1zIHdoZXJlIG1haW4gbWVtb3J5IGlzIG5vdCBETUEtY29oZXJlbnQgKG1vc3Qgbm9uLXg4NiBib2FyZHMpLgorICovCitzdHJ1Y3QgYWRzNzg0Nl9wYWNrZXQgeworCXU4CQkJcmVhZF94LCByZWFkX3ksIHJlYWRfejEsIHJlYWRfejIsIHB3cmRvd247CisJdTE2CQkJZHVtbXk7CQkvKiBmb3IgdGhlIHB3cmRvd24gcmVhZCAqLworCXN0cnVjdCB0c19ldmVudAkJdGM7Cit9OworCiBzdHJ1Y3QgYWRzNzg0NiB7CiAJc3RydWN0IGlucHV0X2RldgkqaW5wdXQ7CiAJY2hhcgkJCXBoeXNbMzJdOwpAQCAtODYsOSArOTcsNyBAQAogCXUxNgkJCXhfcGxhdGVfb2htczsKIAl1MTYJCQlwcmVzc3VyZV9tYXg7CiAKLQl1OAkJCXJlYWRfeCwgcmVhZF95LCByZWFkX3oxLCByZWFkX3oyLCBwd3Jkb3duOwotCXUxNgkJCWR1bW15OwkJLyogZm9yIHRoZSBwd3Jkb3duIHJlYWQgKi8KLQlzdHJ1Y3QgdHNfZXZlbnQJCXRjOworCXN0cnVjdCBhZHM3ODQ2X3BhY2tldAkqcGFja2V0OwogCiAJc3RydWN0IHNwaV90cmFuc2Zlcgl4ZmVyWzE4XTsKIAlzdHJ1Y3Qgc3BpX21lc3NhZ2UJbXNnWzVdOwpAQCAtNDYzLDEwICs0NzIsMTEgQEAKIAkJCQkgICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQogewogCXN0cnVjdCBhZHM3ODQ2ICp0cyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwotCWNoYXIgKmVuZHA7Ci0JaW50IGk7CisJbG9uZyBpOwogCi0JaSA9IHNpbXBsZV9zdHJ0b3VsKGJ1ZiwgJmVuZHAsIDEwKTsKKwlpZiAoc3RyaWN0X3N0cnRvdWwoYnVmLCAxMCwgJmkpKQorCQlyZXR1cm4gLUVJTlZBTDsKKwogCXNwaW5fbG9ja19pcnEoJnRzLT5sb2NrKTsKIAogCWlmIChpKQpAQCAtNTEyLDE2ICs1MjIsMTcgQEAKIHN0YXRpYyB2b2lkIGFkczc4NDZfcngodm9pZCAqYWRzKQogewogCXN0cnVjdCBhZHM3ODQ2CQkqdHMgPSBhZHM7CisJc3RydWN0IGFkczc4NDZfcGFja2V0CSpwYWNrZXQgPSB0cy0+cGFja2V0OwogCXVuc2lnbmVkCQlSdDsKIAl1MTYJCQl4LCB5LCB6MSwgejI7CiAKIAkvKiBhZHM3ODQ2X3J4X3ZhbCgpIGRpZCBpbi1wbGFjZSBjb252ZXJzaW9uIChpbmNsdWRpbmcgYnl0ZXN3YXApIGZyb20KIAkgKiBvbi10aGUtd2lyZSBmb3JtYXQgYXMgcGFydCBvZiBkZWJvdW5jaW5nIHRvIGdldCBzdGFibGUgcmVhZGluZ3MuCiAJICovCi0JeCA9IHRzLT50Yy54OwotCXkgPSB0cy0+dGMueTsKLQl6MSA9IHRzLT50Yy56MTsKLQl6MiA9IHRzLT50Yy56MjsKKwl4ID0gcGFja2V0LT50Yy54OworCXkgPSBwYWNrZXQtPnRjLnk7CisJejEgPSBwYWNrZXQtPnRjLnoxOworCXoyID0gcGFja2V0LT50Yy56MjsKIAogCS8qIHJhbmdlIGZpbHRlcmluZyAqLwogCWlmICh4ID09IE1BWF8xMkJJVCkKQEAgLTU0NSwxMCArNTU2LDEwIEBACiAJICogdGhlIG1heGltdW0uIERvbid0IHJlcG9ydCBpdCB0byB1c2VyIHNwYWNlLCByZXBlYXQgYXQgbGVhc3QKIAkgKiBvbmNlIG1vcmUgdGhlIG1lYXN1cmVtZW50CiAJICovCi0JaWYgKHRzLT50Yy5pZ25vcmUgfHwgUnQgPiB0cy0+cHJlc3N1cmVfbWF4KSB7CisJaWYgKHBhY2tldC0+dGMuaWdub3JlIHx8IFJ0ID4gdHMtPnByZXNzdXJlX21heCkgewogI2lmZGVmIFZFUkJPU0UKIAkJcHJfZGVidWcoIiVzOiBpZ25vcmVkICVkIHByZXNzdXJlICVkXG4iLAotCQkJdHMtPnNwaS0+ZGV2LmJ1c19pZCwgdHMtPnRjLmlnbm9yZSwgUnQpOworCQkJdHMtPnNwaS0+ZGV2LmJ1c19pZCwgcGFja2V0LT50Yy5pZ25vcmUsIFJ0KTsKICNlbmRpZgogCQlocnRpbWVyX3N0YXJ0KCZ0cy0+dGltZXIsIGt0aW1lX3NldCgwLCBUU19QT0xMX1BFUklPRCksCiAJCQkgICAgICBIUlRJTUVSX01PREVfUkVMKTsKQEAgLTY0MSw2ICs2NTIsNyBAQAogc3RhdGljIHZvaWQgYWRzNzg0Nl9yeF92YWwodm9pZCAqYWRzKQogewogCXN0cnVjdCBhZHM3ODQ2ICp0cyA9IGFkczsKKwlzdHJ1Y3QgYWRzNzg0Nl9wYWNrZXQgKnBhY2tldCA9IHRzLT5wYWNrZXQ7CiAJc3RydWN0IHNwaV9tZXNzYWdlICptOwogCXN0cnVjdCBzcGlfdHJhbnNmZXIgKnQ7CiAJaW50IHZhbDsKQEAgLTY2MCw3ICs2NzIsNyBAQAogCWNhc2UgQURTNzg0Nl9GSUxURVJfUkVQRUFUOgogCQlicmVhazsKIAljYXNlIEFEUzc4NDZfRklMVEVSX0lHTk9SRToKLQkJdHMtPnRjLmlnbm9yZSA9IDE7CisJCXBhY2tldC0+dGMuaWdub3JlID0gMTsKIAkJLyogTGFzdCBtZXNzYWdlIHdpbGwgY29udGFpbiBhZHM3ODQ2X3J4KCkgYXMgdGhlCiAJCSAqIGNvbXBsZXRpb24gZnVuY3Rpb24uCiAJCSAqLwpAQCAtNjY4LDcgKzY4MCw3IEBACiAJCWJyZWFrOwogCWNhc2UgQURTNzg0Nl9GSUxURVJfT0s6CiAJCSoodTE2ICopdC0+cnhfYnVmID0gdmFsOwotCQl0cy0+dGMuaWdub3JlID0gMDsKKwkJcGFja2V0LT50Yy5pZ25vcmUgPSAwOwogCQltID0gJnRzLT5tc2dbKyt0cy0+bXNnX2lkeF07CiAJCWJyZWFrOwogCWRlZmF1bHQ6CkBAIC03NzMsNyArNzg1LDYgQEAKIAkvKiB3ZSBrbm93IHRoZSBjaGlwJ3MgaW4gbG93cG93ZXIgbW9kZSBzaW5jZSB3ZSBhbHdheXMKIAkgKiBsZWF2ZSBpdCB0aGF0IHdheSBhZnRlciBldmVyeSByZXF1ZXN0CiAJICovCi0KIH0KIAogLyogTXVzdCBiZSBjYWxsZWQgd2l0aCB0cy0+bG9jayBoZWxkICovCkBAIC04NDksNiArODYwLDcgQEAKIHN0YXRpYyBpbnQgX19kZXZpbml0IGFkczc4NDZfcHJvYmUoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSkKIHsKIAlzdHJ1Y3QgYWRzNzg0NgkJCSp0czsKKwlzdHJ1Y3QgYWRzNzg0Nl9wYWNrZXQJCSpwYWNrZXQ7CiAJc3RydWN0IGlucHV0X2RldgkJKmlucHV0X2RldjsKIAlzdHJ1Y3QgYWRzNzg0Nl9wbGF0Zm9ybV9kYXRhCSpwZGF0YSA9IHNwaS0+ZGV2LnBsYXRmb3JtX2RhdGE7CiAJc3RydWN0IHNwaV9tZXNzYWdlCQkqbTsKQEAgLTg4NCwxNCArODk2LDE2IEBACiAJCXJldHVybiBlcnI7CiAKIAl0cyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBhZHM3ODQ2KSwgR0ZQX0tFUk5FTCk7CisJcGFja2V0ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGFkczc4NDZfcGFja2V0KSwgR0ZQX0tFUk5FTCk7CiAJaW5wdXRfZGV2ID0gaW5wdXRfYWxsb2NhdGVfZGV2aWNlKCk7Ci0JaWYgKCF0cyB8fCAhaW5wdXRfZGV2KSB7CisJaWYgKCF0cyB8fCAhcGFja2V0IHx8ICFpbnB1dF9kZXYpIHsKIAkJZXJyID0gLUVOT01FTTsKIAkJZ290byBlcnJfZnJlZV9tZW07CiAJfQogCiAJZGV2X3NldF9kcnZkYXRhKCZzcGktPmRldiwgdHMpOwogCisJdHMtPnBhY2tldCA9IHBhY2tldDsKIAl0cy0+c3BpID0gc3BpOwogCXRzLT5pbnB1dCA9IGlucHV0X2RldjsKIAl0cy0+dnJlZl9tdiA9IHBkYXRhLT52cmVmX212OwpAQCAtOTYzLDEzICs5NzcsMTMgQEAKIAlzcGlfbWVzc2FnZV9pbml0KG0pOwogCiAJLyogeS0gc3RpbGwgb247IHR1cm4gb24gb25seSB5KyAoYW5kIEFEQykgKi8KLQl0cy0+cmVhZF95ID0gUkVBRF9ZKHZyZWYpOwotCXgtPnR4X2J1ZiA9ICZ0cy0+cmVhZF95OworCXBhY2tldC0+cmVhZF95ID0gUkVBRF9ZKHZyZWYpOworCXgtPnR4X2J1ZiA9ICZwYWNrZXQtPnJlYWRfeTsKIAl4LT5sZW4gPSAxOwogCXNwaV9tZXNzYWdlX2FkZF90YWlsKHgsIG0pOwogCiAJeCsrOwotCXgtPnJ4X2J1ZiA9ICZ0cy0+dGMueTsKKwl4LT5yeF9idWYgPSAmcGFja2V0LT50Yy55OwogCXgtPmxlbiA9IDI7CiAJc3BpX21lc3NhZ2VfYWRkX3RhaWwoeCwgbSk7CiAKQEAgLTk4MSwxMiArOTk1LDEyIEBACiAJCXgtPmRlbGF5X3VzZWNzID0gcGRhdGEtPnNldHRsZV9kZWxheV91c2VjczsKIAogCQl4Kys7Ci0JCXgtPnR4X2J1ZiA9ICZ0cy0+cmVhZF95OworCQl4LT50eF9idWYgPSAmcGFja2V0LT5yZWFkX3k7CiAJCXgtPmxlbiA9IDE7CiAJCXNwaV9tZXNzYWdlX2FkZF90YWlsKHgsIG0pOwogCiAJCXgrKzsKLQkJeC0+cnhfYnVmID0gJnRzLT50Yy55OworCQl4LT5yeF9idWYgPSAmcGFja2V0LT50Yy55OwogCQl4LT5sZW4gPSAyOwogCQlzcGlfbWVzc2FnZV9hZGRfdGFpbCh4LCBtKTsKIAl9CkBAIC05OTksMTMgKzEwMTMsMTMgQEAKIAogCS8qIHR1cm4geS0gb2ZmLCB4KyBvbiwgdGhlbiBsZWF2ZSBpbiBsb3dwb3dlciAqLwogCXgrKzsKLQl0cy0+cmVhZF94ID0gUkVBRF9YKHZyZWYpOwotCXgtPnR4X2J1ZiA9ICZ0cy0+cmVhZF94OworCXBhY2tldC0+cmVhZF94ID0gUkVBRF9YKHZyZWYpOworCXgtPnR4X2J1ZiA9ICZwYWNrZXQtPnJlYWRfeDsKIAl4LT5sZW4gPSAxOwogCXNwaV9tZXNzYWdlX2FkZF90YWlsKHgsIG0pOwogCiAJeCsrOwotCXgtPnJ4X2J1ZiA9ICZ0cy0+dGMueDsKKwl4LT5yeF9idWYgPSAmcGFja2V0LT50Yy54OwogCXgtPmxlbiA9IDI7CiAJc3BpX21lc3NhZ2VfYWRkX3RhaWwoeCwgbSk7CiAKQEAgLTEwMTQsMTIgKzEwMjgsMTIgQEAKIAkJeC0+ZGVsYXlfdXNlY3MgPSBwZGF0YS0+c2V0dGxlX2RlbGF5X3VzZWNzOwogCiAJCXgrKzsKLQkJeC0+dHhfYnVmID0gJnRzLT5yZWFkX3g7CisJCXgtPnR4X2J1ZiA9ICZwYWNrZXQtPnJlYWRfeDsKIAkJeC0+bGVuID0gMTsKIAkJc3BpX21lc3NhZ2VfYWRkX3RhaWwoeCwgbSk7CiAKIAkJeCsrOwotCQl4LT5yeF9idWYgPSAmdHMtPnRjLng7CisJCXgtPnJ4X2J1ZiA9ICZwYWNrZXQtPnRjLng7CiAJCXgtPmxlbiA9IDI7CiAJCXNwaV9tZXNzYWdlX2FkZF90YWlsKHgsIG0pOwogCX0KQEAgLTEwMzMsMTMgKzEwNDcsMTMgQEAKIAkJc3BpX21lc3NhZ2VfaW5pdChtKTsKIAogCQl4Kys7Ci0JCXRzLT5yZWFkX3oxID0gUkVBRF9aMSh2cmVmKTsKLQkJeC0+dHhfYnVmID0gJnRzLT5yZWFkX3oxOworCQlwYWNrZXQtPnJlYWRfejEgPSBSRUFEX1oxKHZyZWYpOworCQl4LT50eF9idWYgPSAmcGFja2V0LT5yZWFkX3oxOwogCQl4LT5sZW4gPSAxOwogCQlzcGlfbWVzc2FnZV9hZGRfdGFpbCh4LCBtKTsKIAogCQl4Kys7Ci0JCXgtPnJ4X2J1ZiA9ICZ0cy0+dGMuejE7CisJCXgtPnJ4X2J1ZiA9ICZwYWNrZXQtPnRjLnoxOwogCQl4LT5sZW4gPSAyOwogCQlzcGlfbWVzc2FnZV9hZGRfdGFpbCh4LCBtKTsKIApAQCAtMTA0OCwxMiArMTA2MiwxMiBAQAogCQkJeC0+ZGVsYXlfdXNlY3MgPSBwZGF0YS0+c2V0dGxlX2RlbGF5X3VzZWNzOwogCiAJCQl4Kys7Ci0JCQl4LT50eF9idWYgPSAmdHMtPnJlYWRfejE7CisJCQl4LT50eF9idWYgPSAmcGFja2V0LT5yZWFkX3oxOwogCQkJeC0+bGVuID0gMTsKIAkJCXNwaV9tZXNzYWdlX2FkZF90YWlsKHgsIG0pOwogCiAJCQl4Kys7Ci0JCQl4LT5yeF9idWYgPSAmdHMtPnRjLnoxOworCQkJeC0+cnhfYnVmID0gJnBhY2tldC0+dGMuejE7CiAJCQl4LT5sZW4gPSAyOwogCQkJc3BpX21lc3NhZ2VfYWRkX3RhaWwoeCwgbSk7CiAJCX0KQEAgLTEwNjUsMTMgKzEwNzksMTMgQEAKIAkJc3BpX21lc3NhZ2VfaW5pdChtKTsKIAogCQl4Kys7Ci0JCXRzLT5yZWFkX3oyID0gUkVBRF9aMih2cmVmKTsKLQkJeC0+dHhfYnVmID0gJnRzLT5yZWFkX3oyOworCQlwYWNrZXQtPnJlYWRfejIgPSBSRUFEX1oyKHZyZWYpOworCQl4LT50eF9idWYgPSAmcGFja2V0LT5yZWFkX3oyOwogCQl4LT5sZW4gPSAxOwogCQlzcGlfbWVzc2FnZV9hZGRfdGFpbCh4LCBtKTsKIAogCQl4Kys7Ci0JCXgtPnJ4X2J1ZiA9ICZ0cy0+dGMuejI7CisJCXgtPnJ4X2J1ZiA9ICZwYWNrZXQtPnRjLnoyOwogCQl4LT5sZW4gPSAyOwogCQlzcGlfbWVzc2FnZV9hZGRfdGFpbCh4LCBtKTsKIApAQCAtMTA4MCwxMiArMTA5NCwxMiBAQAogCQkJeC0+ZGVsYXlfdXNlY3MgPSBwZGF0YS0+c2V0dGxlX2RlbGF5X3VzZWNzOwogCiAJCQl4Kys7Ci0JCQl4LT50eF9idWYgPSAmdHMtPnJlYWRfejI7CisJCQl4LT50eF9idWYgPSAmcGFja2V0LT5yZWFkX3oyOwogCQkJeC0+bGVuID0gMTsKIAkJCXNwaV9tZXNzYWdlX2FkZF90YWlsKHgsIG0pOwogCiAJCQl4Kys7Ci0JCQl4LT5yeF9idWYgPSAmdHMtPnRjLnoyOworCQkJeC0+cnhfYnVmID0gJnBhY2tldC0+dGMuejI7CiAJCQl4LT5sZW4gPSAyOwogCQkJc3BpX21lc3NhZ2VfYWRkX3RhaWwoeCwgbSk7CiAJCX0KQEAgLTEwOTksMTMgKzExMTMsMTMgQEAKIAlzcGlfbWVzc2FnZV9pbml0KG0pOwogCiAJeCsrOwotCXRzLT5wd3Jkb3duID0gUFdSRE9XTjsKLQl4LT50eF9idWYgPSAmdHMtPnB3cmRvd247CisJcGFja2V0LT5wd3Jkb3duID0gUFdSRE9XTjsKKwl4LT50eF9idWYgPSAmcGFja2V0LT5wd3Jkb3duOwogCXgtPmxlbiA9IDE7CiAJc3BpX21lc3NhZ2VfYWRkX3RhaWwoeCwgbSk7CiAKIAl4Kys7Ci0JeC0+cnhfYnVmID0gJnRzLT5kdW1teTsKKwl4LT5yeF9idWYgPSAmcGFja2V0LT5kdW1teTsKIAl4LT5sZW4gPSAyOwogCUNTX0NIQU5HRSgqeCk7CiAJc3BpX21lc3NhZ2VfYWRkX3RhaWwoeCwgbSk7CkBAIC0xMTU4LDYgKzExNzIsNyBAQAogCQl0cy0+ZmlsdGVyX2NsZWFudXAodHMtPmZpbHRlcl9kYXRhKTsKICBlcnJfZnJlZV9tZW06CiAJaW5wdXRfZnJlZV9kZXZpY2UoaW5wdXRfZGV2KTsKKwlrZnJlZShwYWNrZXQpOwogCWtmcmVlKHRzKTsKIAlyZXR1cm4gZXJyOwogfQpAQCAtMTE4Myw2ICsxMTk4LDcgQEAKIAlpZiAodHMtPmZpbHRlcl9jbGVhbnVwKQogCQl0cy0+ZmlsdGVyX2NsZWFudXAodHMtPmZpbHRlcl9kYXRhKTsKIAorCWtmcmVlKHRzLT5wYWNrZXQpOwogCWtmcmVlKHRzKTsKIAogCWRldl9kYmcoJnNwaS0+ZGV2LCAidW5yZWdpc3RlcmVkIHRvdWNoc2NyZWVuXG4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vYXRtZWxfdHNhZGNjLmMgYi9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL2F0bWVsX3RzYWRjYy5jCmluZGV4IGVlZTEyNmIuLmE4OWE2YTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vYXRtZWxfdHNhZGNjLmMKKysrIGIvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9hdG1lbF90c2FkY2MuYwpAQCAtOTEsNiArOTEsOSBAQAogCWNoYXIJCQlwaHlzWzMyXTsKIAlzdHJ1Y3QgY2xrCQkqY2xrOwogCWludAkJCWlycTsKKwl1bnNpZ25lZCBpbnQJCXByZXZfYWJzeDsKKwl1bnNpZ25lZCBpbnQJCXByZXZfYWJzeTsKKwl1bnNpZ25lZCBjaGFyCQlidWZmZXJlZG1lYXN1cmU7CiB9OwogCiBzdGF0aWMgdm9pZCBfX2lvbWVtCQkqdHNjX2Jhc2U7CkBAIC0xMDAsMTAgKzEwMyw5IEBACiAKIHN0YXRpYyBpcnFyZXR1cm5fdCBhdG1lbF90c2FkY2NfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldikKIHsKLQlzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dF9kZXYgPSAoKHN0cnVjdCBhdG1lbF90c2FkY2MgKilkZXYpLT5pbnB1dDsKKwlzdHJ1Y3QgYXRtZWxfdHNhZGNjCSp0c19kZXYgPSAoc3RydWN0IGF0bWVsX3RzYWRjYyAqKWRldjsKKwlzdHJ1Y3QgaW5wdXRfZGV2CSppbnB1dF9kZXYgPSB0c19kZXYtPmlucHV0OwogCi0JdW5zaWduZWQgaW50IGFic3g7Ci0JdW5zaWduZWQgaW50IGFic3k7CiAJdW5zaWduZWQgaW50IHN0YXR1czsKIAl1bnNpZ25lZCBpbnQgcmVnOwogCkBAIC0xMjEsNiArMTIzLDcgQEAKIAkJYXRtZWxfdHNhZGNjX3dyaXRlKEFUTUVMX1RTQURDQ19JRVIsIEFUTUVMX1RTQURDQ19QRU5DTlQpOwogCiAJCWlucHV0X3JlcG9ydF9rZXkoaW5wdXRfZGV2LCBCVE5fVE9VQ0gsIDApOworCQl0c19kZXYtPmJ1ZmZlcmVkbWVhc3VyZSA9IDA7CiAJCWlucHV0X3N5bmMoaW5wdXRfZGV2KTsKIAogCX0gZWxzZSBpZiAoc3RhdHVzICYgQVRNRUxfVFNBRENDX1BFTkNOVCkgewpAQCAtMTM4LDE2ICsxNDEsMjMgQEAKIAl9IGVsc2UgaWYgKHN0YXR1cyAmIEFUTUVMX1RTQURDQ19FT0MoMykpIHsKIAkJLyogQ29udmVyc2lvbiBmaW5pc2hlZCAqLwogCi0JCWFic3ggPSBhdG1lbF90c2FkY2NfcmVhZChBVE1FTF9UU0FEQ0NfQ0RSMykgPDwgMTA7Ci0JCWFic3ggLz0gYXRtZWxfdHNhZGNjX3JlYWQoQVRNRUxfVFNBRENDX0NEUjIpOworCQlpZiAodHNfZGV2LT5idWZmZXJlZG1lYXN1cmUpIHsKKwkJCS8qIExhc3QgbWVhc3VyZW1lbnQgaXMgYWx3YXlzIGRpc2NhcmRlZCwgc2luY2UgaXQgY2FuCisJCQkgKiBiZSBlcnJvbmVvdXMuCisJCQkgKiBBbHdheXMgcmVwb3J0IHByZXZpb3VzIG1lYXN1cmVtZW50ICovCisJCQlpbnB1dF9yZXBvcnRfYWJzKGlucHV0X2RldiwgQUJTX1gsIHRzX2Rldi0+cHJldl9hYnN4KTsKKwkJCWlucHV0X3JlcG9ydF9hYnMoaW5wdXRfZGV2LCBBQlNfWSwgdHNfZGV2LT5wcmV2X2Fic3kpOworCQkJaW5wdXRfcmVwb3J0X2tleShpbnB1dF9kZXYsIEJUTl9UT1VDSCwgMSk7CisJCQlpbnB1dF9zeW5jKGlucHV0X2Rldik7CisJCX0gZWxzZQorCQkJdHNfZGV2LT5idWZmZXJlZG1lYXN1cmUgPSAxOwogCi0JCWFic3kgPSBhdG1lbF90c2FkY2NfcmVhZChBVE1FTF9UU0FEQ0NfQ0RSMSkgPDwgMTA7Ci0JCWFic3kgLz0gYXRtZWxfdHNhZGNjX3JlYWQoQVRNRUxfVFNBRENDX0NEUjApOworCQkvKiBOb3cgbWFrZSBuZXcgbWVhc3VyZW1lbnQgKi8KKwkJdHNfZGV2LT5wcmV2X2Fic3ggPSBhdG1lbF90c2FkY2NfcmVhZChBVE1FTF9UU0FEQ0NfQ0RSMykgPDwgMTA7CisJCXRzX2Rldi0+cHJldl9hYnN4IC89IGF0bWVsX3RzYWRjY19yZWFkKEFUTUVMX1RTQURDQ19DRFIyKTsKIAotCQlpbnB1dF9yZXBvcnRfYWJzKGlucHV0X2RldiwgQUJTX1gsIGFic3gpOwotCQlpbnB1dF9yZXBvcnRfYWJzKGlucHV0X2RldiwgQUJTX1ksIGFic3kpOwotCQlpbnB1dF9yZXBvcnRfa2V5KGlucHV0X2RldiwgQlROX1RPVUNILCAxKTsKLQkJaW5wdXRfc3luYyhpbnB1dF9kZXYpOworCQl0c19kZXYtPnByZXZfYWJzeSA9IGF0bWVsX3RzYWRjY19yZWFkKEFUTUVMX1RTQURDQ19DRFIxKSA8PCAxMDsKKwkJdHNfZGV2LT5wcmV2X2Fic3kgLz0gYXRtZWxfdHNhZGNjX3JlYWQoQVRNRUxfVFNBRENDX0NEUjApOwogCX0KIAogCXJldHVybiBJUlFfSEFORExFRDsKQEAgLTIyMyw2ICsyMzMsNyBAQAogCX0KIAogCXRzX2Rldi0+aW5wdXQgPSBpbnB1dF9kZXY7CisJdHNfZGV2LT5idWZmZXJlZG1lYXN1cmUgPSAwOwogCiAJc25wcmludGYodHNfZGV2LT5waHlzLCBzaXplb2YodHNfZGV2LT5waHlzKSwKIAkJICIlcy9pbnB1dDAiLCBwZGV2LT5kZXYuYnVzX2lkKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vaHA2ODBfdHNfaW5wdXQuYyBiL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vaHA2ODBfdHNfaW5wdXQuYwppbmRleCBjMzhkNGUwLi5hODk3MDBlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL2hwNjgwX3RzX2lucHV0LmMKKysrIGIvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9ocDY4MF90c19pbnB1dC5jCkBAIC01LDcgKzUsNyBAQAogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9kZWxheS5oPgogI2luY2x1ZGUgPGFzbS9hZGMuaD4KLSNpbmNsdWRlIDxhc20vaHA2eHguaD4KKyNpbmNsdWRlIDxtYWNoL2hwNnh4Lmg+CiAKICNkZWZpbmUgTU9ETkFNRSAiaHA2ODBfdHNfaW5wdXQiCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vbWFpbnN0b25lLXdtOTd4eC5jIGIvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9tYWluc3RvbmUtd205N3h4LmMKaW5kZXggMzdhNTU1Zi4uYmE2NDg3NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9tYWluc3RvbmUtd205N3h4LmMKKysrIGIvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9tYWluc3RvbmUtd205N3h4LmMKQEAgLTMsOCArMyw3IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICBXb2xmc29uIFdNOTd4eCBBQzk3IENvZGVjcy4KICAqCiAgKiBDb3B5cmlnaHQgMjAwNCwgMjAwNyBXb2xmc29uIE1pY3JvZWxlY3Ryb25pY3MgUExDLgotICogQXV0aG9yOiBMaWFtIEdpcmR3b29kCi0gKiAgICAgICAgIGxpYW0uZ2lyZHdvb2RAd29sZnNvbm1pY3JvLmNvbSBvciBsaW51eEB3b2xmc29ubWljcm8uY29tCisgKiBBdXRob3I6IExpYW0gR2lyZHdvb2QgPGxyZ0BzbGltbG9naWMuY28udWs+CiAgKiBQYXJ0cyBDb3B5cmlnaHQgOiBJYW4gTW9sdG9uIDxzcHlyb0BmMnMuY29tPgogICogICAgICAgICAgICAgICAgICAgQW5kcmV3IFphYm9sb3RueSA8emFwQGhvbWVsaW5rLnJ1PgogICoKQEAgLTI5Niw2ICsyOTUsNiBAQAogbW9kdWxlX2V4aXQobWFpbnN0b25lX3dtOTd4eF9leGl0KTsKIAogLyogTW9kdWxlIGluZm9ybWF0aW9uICovCi1NT0RVTEVfQVVUSE9SKCJMaWFtIEdpcmR3b29kIDxsaWFtLmdpcmR3b29kQHdvbGZzb25taWNyby5jb20+Iik7CitNT0RVTEVfQVVUSE9SKCJMaWFtIEdpcmR3b29kIDxscmdAc2xpbWxvZ2ljLmNvLnVrPiIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJ3bTk3eHggY29udGludW91cyB0b3VjaCBkcml2ZXIgZm9yIG1haW5zdG9uZSIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi93bTk3MDUuYyBiL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vd205NzA1LmMKaW5kZXggMzcyZWZiYy4uNmI1YmU3NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi93bTk3MDUuYworKysgYi9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL3dtOTcwNS5jCkBAIC0yLDggKzIsNyBAQAogICogd205NzA1LmMgIC0tICBDb2RlYyBkcml2ZXIgZm9yIFdvbGZzb24gV005NzA1IEFDOTcgQ29kZWMuCiAgKgogICogQ29weXJpZ2h0IDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgV29sZnNvbiBNaWNyb2VsZWN0cm9uaWNzIFBMQy4KLSAqIEF1dGhvcjogTGlhbSBHaXJkd29vZAotICogICAgICAgICBsaWFtLmdpcmR3b29kQHdvbGZzb25taWNyby5jb20gb3IgbGludXhAd29sZnNvbm1pY3JvLmNvbQorICogQXV0aG9yOiBMaWFtIEdpcmR3b29kIDxscmdAc2xpbWxvZ2ljLmNvLnVrPgogICogUGFydHMgQ29weXJpZ2h0IDogSWFuIE1vbHRvbiA8c3B5cm9AZjJzLmNvbT4KICAqICAgICAgICAgICAgICAgICAgIEFuZHJldyBaYWJvbG90bnkgPHphcEBob21lbGluay5ydT4KICAqICAgICAgICAgICAgICAgICAgIFJ1c3NlbGwgS2luZyA8cm1rQGFybS5saW51eC5vcmcudWs+CkBAIC0zNDcsNiArMzQ2LDYgQEAKIEVYUE9SVF9TWU1CT0xfR1BMKHdtOTcwNV9jb2RlYyk7CiAKIC8qIE1vZHVsZSBpbmZvcm1hdGlvbiAqLwotTU9EVUxFX0FVVEhPUigiTGlhbSBHaXJkd29vZCA8bGlhbS5naXJkd29vZEB3b2xmc29ubWljcm8uY29tPiIpOworTU9EVUxFX0FVVEhPUigiTGlhbSBHaXJkd29vZCA8bHJnQHNsaW1sb2dpYy5jby51az4iKTsKIE1PRFVMRV9ERVNDUklQVElPTigiV005NzA1IFRvdWNoIFNjcmVlbiBEcml2ZXIiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vd205NzEyLmMgYi9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL3dtOTcxMi5jCmluZGV4IGM4YmIxZTcuLjc0OTBiMDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vd205NzEyLmMKKysrIGIvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi93bTk3MTIuYwpAQCAtMiw4ICsyLDcgQEAKICAqIHdtOTcxMi5jICAtLSAgQ29kZWMgZHJpdmVyIGZvciBXb2xmc29uIFdNOTcxMiBBQzk3IENvZGVjcy4KICAqCiAgKiBDb3B5cmlnaHQgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBXb2xmc29uIE1pY3JvZWxlY3Ryb25pY3MgUExDLgotICogQXV0aG9yOiBMaWFtIEdpcmR3b29kCi0gKiAgICAgICAgIGxpYW0uZ2lyZHdvb2RAd29sZnNvbm1pY3JvLmNvbSBvciBsaW51eEB3b2xmc29ubWljcm8uY29tCisgKiBBdXRob3I6IExpYW0gR2lyZHdvb2QgPGxyZ0BzbGltbG9naWMuY28udWs+CiAgKiBQYXJ0cyBDb3B5cmlnaHQgOiBJYW4gTW9sdG9uIDxzcHlyb0BmMnMuY29tPgogICogICAgICAgICAgICAgICAgICAgQW5kcmV3IFphYm9sb3RueSA8emFwQGhvbWVsaW5rLnJ1PgogICogICAgICAgICAgICAgICAgICAgUnVzc2VsbCBLaW5nIDxybWtAYXJtLmxpbnV4Lm9yZy51az4KQEAgLTQ2Miw2ICs0NjEsNiBAQAogRVhQT1JUX1NZTUJPTF9HUEwod205NzEyX2NvZGVjKTsKIAogLyogTW9kdWxlIGluZm9ybWF0aW9uICovCi1NT0RVTEVfQVVUSE9SKCJMaWFtIEdpcmR3b29kIDxsaWFtLmdpcmR3b29kQHdvbGZzb25taWNyby5jb20+Iik7CitNT0RVTEVfQVVUSE9SKCJMaWFtIEdpcmR3b29kIDxscmdAc2xpbWxvZ2ljLmNvLnVrPiIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJXTTk3MTIgVG91Y2ggU2NyZWVuIERyaXZlciIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi93bTk3MTMuYyBiL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vd205NzEzLmMKaW5kZXggNzgxZWU4My4uMjM4YjUxMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi93bTk3MTMuYworKysgYi9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL3dtOTcxMy5jCkBAIC0yLDggKzIsNyBAQAogICogd205NzEzLmMgIC0tICBDb2RlYyB0b3VjaCBkcml2ZXIgZm9yIFdvbGZzb24gV005NzEzIEFDOTcgQ29kZWMuCiAgKgogICogQ29weXJpZ2h0IDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDggV29sZnNvbiBNaWNyb2VsZWN0cm9uaWNzIFBMQy4KLSAqIEF1dGhvcjogTGlhbSBHaXJkd29vZAotICogICAgICAgICBsaWFtLmdpcmR3b29kQHdvbGZzb25taWNyby5jb20gb3IgbGludXhAd29sZnNvbm1pY3JvLmNvbQorICogQXV0aG9yOiBMaWFtIEdpcmR3b29kIDxscmdAc2xpbWxvZ2ljLmNvLnVrPgogICogUGFydHMgQ29weXJpZ2h0IDogSWFuIE1vbHRvbiA8c3B5cm9AZjJzLmNvbT4KICAqICAgICAgICAgICAgICAgICAgIEFuZHJldyBaYWJvbG90bnkgPHphcEBob21lbGluay5ydT4KICAqICAgICAgICAgICAgICAgICAgIFJ1c3NlbGwgS2luZyA8cm1rQGFybS5saW51eC5vcmcudWs+CkBAIC00NzYsNiArNDc1LDYgQEAKIEVYUE9SVF9TWU1CT0xfR1BMKHdtOTcxM19jb2RlYyk7CiAKIC8qIE1vZHVsZSBpbmZvcm1hdGlvbiAqLwotTU9EVUxFX0FVVEhPUigiTGlhbSBHaXJkd29vZCA8bGlhbS5naXJkd29vZEB3b2xmc29ubWljcm8uY29tPiIpOworTU9EVUxFX0FVVEhPUigiTGlhbSBHaXJkd29vZCA8bHJnQHNsaW1sb2dpYy5jby51az4iKTsKIE1PRFVMRV9ERVNDUklQVElPTigiV005NzEzIFRvdWNoIFNjcmVlbiBEcml2ZXIiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vd205N3h4LWNvcmUuYyBiL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vd205N3h4LWNvcmUuYwppbmRleCBkNTg5YWIwLi5kMTVhYTExIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL3dtOTd4eC1jb3JlLmMKKysrIGIvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi93bTk3eHgtY29yZS5jCkBAIC0zLDggKzMsNyBAQAogICogICAgICAgICAgICAgICAgICAgIGFuZCBXTTk3MTMgQUM5NyBDb2RlY3MuCiAgKgogICogQ29weXJpZ2h0IDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDggV29sZnNvbiBNaWNyb2VsZWN0cm9uaWNzIFBMQy4KLSAqIEF1dGhvcjogTGlhbSBHaXJkd29vZAotICogICAgICAgICBsaWFtLmdpcmR3b29kQHdvbGZzb25taWNyby5jb20gb3IgbGludXhAd29sZnNvbm1pY3JvLmNvbQorICogQXV0aG9yOiBMaWFtIEdpcmR3b29kIDxscmdAc2xpbWxvZ2ljLmNvLnVrPgogICogUGFydHMgQ29weXJpZ2h0IDogSWFuIE1vbHRvbiA8c3B5cm9AZjJzLmNvbT4KICAqICAgICAgICAgICAgICAgICAgIEFuZHJldyBaYWJvbG90bnkgPHphcEBob21lbGluay5ydT4KICAqICAgICAgICAgICAgICAgICAgIFJ1c3NlbGwgS2luZyA8cm1rQGFybS5saW51eC5vcmcudWs+CkBAIC04MjQsNiArODIzLDYgQEAKIG1vZHVsZV9leGl0KHdtOTd4eF9leGl0KTsKIAogLyogTW9kdWxlIGluZm9ybWF0aW9uICovCi1NT0RVTEVfQVVUSE9SKCJMaWFtIEdpcmR3b29kIDxsaWFtLmdpcmR3b29kQHdvbGZzb25taWNyby5jb20+Iik7CitNT0RVTEVfQVVUSE9SKCJMaWFtIEdpcmR3b29kIDxscmdAc2xpbWxvZ2ljLmNvLnVrPiIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJXTTk3eHggQ29yZSAtIFRvdWNoIFNjcmVlbiAvIEFVWCBBREMgLyBHUElPIERyaXZlciIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2NhcGkvY2FwaS5jIGIvZHJpdmVycy9pc2RuL2NhcGkvY2FwaS5jCmluZGV4IDg3MWIwY2JjLi4xYjViZjg3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vY2FwaS9jYXBpLmMKKysrIGIvZHJpdmVycy9pc2RuL2NhcGkvY2FwaS5jCkBAIC0xMjMxLDcgKzEyMzEsNyBAQAogCWludCBlcnJvciA9IDA7CiAJc3dpdGNoIChjbWQpIHsKIAlkZWZhdWx0OgotCQllcnJvciA9IG5fdHR5X2lvY3RsICh0dHksIGZpbGUsIGNtZCwgYXJnKTsKKwkJZXJyb3IgPSBuX3R0eV9pb2N0bF9oZWxwZXIodHR5LCBmaWxlLCBjbWQsIGFyZyk7CiAJCWJyZWFrOwogCX0KIAlyZXR1cm4gZXJyb3I7CkBAIC0xNTUzLDggKzE1NTMsNyBAQAogCQlyZXR1cm4gUFRSX0VSUihjYXBpX2NsYXNzKTsKIAl9CiAKLQlkZXZpY2VfY3JlYXRlX2RydmRhdGEoY2FwaV9jbGFzcywgTlVMTCwgTUtERVYoY2FwaV9tYWpvciwgMCksIE5VTEwsCi0JCQkgICAgICAiY2FwaSIpOworCWRldmljZV9jcmVhdGUoY2FwaV9jbGFzcywgTlVMTCwgTUtERVYoY2FwaV9tYWpvciwgMCksIE5VTEwsICJjYXBpIik7CiAKICNpZmRlZiBDT05GSUdfSVNETl9DQVBJX01JRERMRVdBUkUKIAlpZiAoY2FwaW5jX3R0eV9pbml0KCkgPCAwKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vZ2lnYXNldC9zZXItZ2lnYXNldC5jIGIvZHJpdmVycy9pc2RuL2dpZ2FzZXQvc2VyLWdpZ2FzZXQuYwppbmRleCA1ZTg5ZmExLi4wNzA1MmVkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vZ2lnYXNldC9zZXItZ2lnYXNldC5jCisrKyBiL2RyaXZlcnMvaXNkbi9naWdhc2V0L3Nlci1naWdhc2V0LmMKQEAgLTU3MSw2ICs1NzEsNyBAQAogCX0KIAogCS8qIHByZXZlbnQgb3RoZXIgY2FsbGVycyBmcm9tIGVudGVyaW5nIGxkaXNjIG1ldGhvZHMgKi8KKwkvKiBGSVhNRTogc2hvdWxkIHVzZSB0aGUgdHR5IHN0YXRlIGZsYWdzICovCiAJdHR5LT5kaXNjX2RhdGEgPSBOVUxMOwogCiAJaWYgKCFjcy0+aHcuc2VyKQpAQCAtNjQyLDEwICs2NDMsMTEgQEAKIAkJcmV0dXJuIC1FTlhJTzsKIAogCXN3aXRjaCAoY21kKSB7Ci0JY2FzZSBUQ0dFVFM6Ci0JY2FzZSBUQ0dFVEE6Ci0JCS8qIHBhc3MgdGhyb3VnaCB0byB1bmRlcmx5aW5nIHNlcmlhbCBkZXZpY2UgKi8KLQkJcmMgPSBuX3R0eV9pb2N0bCh0dHksIGZpbGUsIGNtZCwgYXJnKTsKKworCWNhc2UgRklPTlJFQUQ6CisJCS8qIHVudXNlZCwgYWx3YXlzIHJldHVybiB6ZXJvICovCisJCXZhbCA9IDA7CisJCXJjID0gcHV0X3VzZXIodmFsLCBwKTsKIAkJYnJlYWs7CiAKIAljYXNlIFRDRkxTSDoKQEAgLTY1OSwyMCArNjYxLDEzIEBACiAJCQlmbHVzaF9zZW5kX3F1ZXVlKGNzKTsKIAkJCWJyZWFrOwogCQl9Ci0JCS8qIGZsdXNoIHRoZSBzZXJpYWwgcG9ydCdzIGJ1ZmZlciAqLwotCQlyYyA9IG5fdHR5X2lvY3RsKHR0eSwgZmlsZSwgY21kLCBhcmcpOwotCQlicmVhazsKLQotCWNhc2UgRklPTlJFQUQ6Ci0JCS8qIHVudXNlZCwgYWx3YXlzIHJldHVybiB6ZXJvICovCi0JCXZhbCA9IDA7Ci0JCXJjID0gcHV0X3VzZXIodmFsLCBwKTsKLQkJYnJlYWs7CisJCS8qIFBhc3MgdGhyb3VnaCAqLwogCiAJZGVmYXVsdDoKLQkJcmMgPSAtRU5PSU9DVExDTUQ7CisJCS8qIHBhc3MgdGhyb3VnaCB0byB1bmRlcmx5aW5nIHNlcmlhbCBkZXZpY2UgKi8KKwkJcmMgPSBuX3R0eV9pb2N0bF9oZWxwZXIodHR5LCBmaWxlLCBjbWQsIGFyZyk7CisJCWJyZWFrOwogCX0KLQogCWNzX3B1dChjcyk7CiAJcmV0dXJuIHJjOwogfQpAQCAtNjgwLDYgKzY3NSw4IEBACiAvKgogICogUG9sbCBvbiB0aGUgdHR5LgogICogVW51c2VkLCBhbHdheXMgcmV0dXJuIHplcm8uCisgKgorICogRklYTUU6IHNob3VsZCBwcm9iYWJseSByZXR1cm4gYW4gZXhjZXB0aW9uIC0gZXNwZWNpYWxseSBvbiBoYW5ndXAKICAqLwogc3RhdGljIHVuc2lnbmVkIGludAogZ2lnYXNldF90dHlfcG9sbChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAqZmlsZSwgcG9sbF90YWJsZSAqd2FpdCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9hdm0vYXZtX2NzLmMgYi9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvYXZtL2F2bV9jcy5jCmluZGV4IGE1Yjk0MWMuLmM3MjU2NTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9hdm0vYXZtX2NzLmMKKysrIGIvZHJpdmVycy9pc2RuL2hhcmR3YXJlL2F2bS9hdm1fY3MuYwpAQCAtMTU0LDgzICsxNTQsNTAgQEAKICAgICAKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogCi1zdGF0aWMgaW50IGdldF90dXBsZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqaGFuZGxlLCB0dXBsZV90ICp0dXBsZSwKLQkJICAgICBjaXNwYXJzZV90ICpwYXJzZSkKK3N0YXRpYyBpbnQgYXZtY3NfY29uZmlnY2hlY2soc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2LAorCQkJICAgICBjaXN0cGxfY2Z0YWJsZV9lbnRyeV90ICpjZiwKKwkJCSAgICAgY2lzdHBsX2NmdGFibGVfZW50cnlfdCAqZGZsdCwKKwkJCSAgICAgdW5zaWduZWQgaW50IHZjYywKKwkJCSAgICAgdm9pZCAqcHJpdl9kYXRhKQogewotICAgIGludCBpID0gcGNtY2lhX2dldF90dXBsZV9kYXRhKGhhbmRsZSwgdHVwbGUpOwotICAgIGlmIChpICE9IENTX1NVQ0NFU1MpIHJldHVybiBpOwotICAgIHJldHVybiBwY21jaWFfcGFyc2VfdHVwbGUoaGFuZGxlLCB0dXBsZSwgcGFyc2UpOwotfQorCWlmIChjZi0+aW8ubndpbiA8PSAwKQorCQlyZXR1cm4gLUVOT0RFVjsKIAotc3RhdGljIGludCBmaXJzdF90dXBsZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqaGFuZGxlLCB0dXBsZV90ICp0dXBsZSwKLQkJICAgICBjaXNwYXJzZV90ICpwYXJzZSkKLXsKLSAgICBpbnQgaSA9IHBjbWNpYV9nZXRfZmlyc3RfdHVwbGUoaGFuZGxlLCB0dXBsZSk7Ci0gICAgaWYgKGkgIT0gQ1NfU1VDQ0VTUykgcmV0dXJuIGk7Ci0gICAgcmV0dXJuIGdldF90dXBsZShoYW5kbGUsIHR1cGxlLCBwYXJzZSk7Ci19Ci0KLXN0YXRpYyBpbnQgbmV4dF90dXBsZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqaGFuZGxlLCB0dXBsZV90ICp0dXBsZSwKLQkJICAgICBjaXNwYXJzZV90ICpwYXJzZSkKLXsKLSAgICBpbnQgaSA9IHBjbWNpYV9nZXRfbmV4dF90dXBsZShoYW5kbGUsIHR1cGxlKTsKLSAgICBpZiAoaSAhPSBDU19TVUNDRVNTKSByZXR1cm4gaTsKLSAgICByZXR1cm4gZ2V0X3R1cGxlKGhhbmRsZSwgdHVwbGUsIHBhcnNlKTsKKwlwX2Rldi0+aW8uQmFzZVBvcnQxID0gY2YtPmlvLndpblswXS5iYXNlOworCXBfZGV2LT5pby5OdW1Qb3J0czEgPSBjZi0+aW8ud2luWzBdLmxlbjsKKwlwX2Rldi0+aW8uTnVtUG9ydHMyID0gMDsKKwlwcmludGsoS0VSTl9JTkZPICJhdm1fY3M6IHRlc3RpbmcgaS9vICUjeC0lI3hcbiIsCisJICAgICAgIHBfZGV2LT5pby5CYXNlUG9ydDEsCisJICAgICAgIHBfZGV2LT5pby5CYXNlUG9ydDErcF9kZXYtPmlvLk51bVBvcnRzMS0xKTsKKwlyZXR1cm4gcGNtY2lhX3JlcXVlc3RfaW8ocF9kZXYsICZwX2Rldi0+aW8pOwogfQogCiBzdGF0aWMgaW50IGF2bWNzX2NvbmZpZyhzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKLSAgICB0dXBsZV90IHR1cGxlOwotICAgIGNpc3BhcnNlX3QgcGFyc2U7Ci0gICAgY2lzdHBsX2NmdGFibGVfZW50cnlfdCAqY2YgPSAmcGFyc2UuY2Z0YWJsZV9lbnRyeTsKICAgICBsb2NhbF9pbmZvX3QgKmRldjsKICAgICBpbnQgaTsKLSAgICB1X2NoYXIgYnVmWzY0XTsKICAgICBjaGFyIGRldm5hbWVbMTI4XTsKICAgICBpbnQgY2FyZHR5cGU7CiAgICAgaW50ICgqYWRkY2FyZCkodW5zaWduZWQgaW50IHBvcnQsIHVuc2lnbmVkIGlycSk7CiAKICAgICBkZXYgPSBsaW5rLT5wcml2OwogCisgICAgZGV2bmFtZVswXSA9IDA7CisgICAgaWYgKGxpbmstPnByb2RfaWRbMV0pCisJICAgIHN0cmxjcHkoZGV2bmFtZSwgbGluay0+cHJvZF9pZFsxXSwgc2l6ZW9mKGRldm5hbWUpKTsKKworICAgIC8qCisgICAgICogZmluZCBJTyBwb3J0CisgICAgICovCisgICAgaWYgKHBjbWNpYV9sb29wX2NvbmZpZyhsaW5rLCBhdm1jc19jb25maWdjaGVjaywgTlVMTCkpCisJICAgIHJldHVybiAtRU5PREVWOworCiAgICAgZG8gewotCWRldm5hbWVbMF0gPSAwOwotCWlmIChsaW5rLT5wcm9kX2lkWzFdKQotCQlzdHJsY3B5KGRldm5hbWUsIGxpbmstPnByb2RfaWRbMV0sIHNpemVvZihkZXZuYW1lKSk7Ci0KLQkvKgotICAgICAgICAgKiBmaW5kIElPIHBvcnQKLSAgICAgICAgICovCi0JdHVwbGUuVHVwbGVEYXRhID0gKGNpc2RhdGFfdCAqKWJ1ZjsKLQl0dXBsZS5UdXBsZU9mZnNldCA9IDA7IHR1cGxlLlR1cGxlRGF0YU1heCA9IDI1NTsKLQl0dXBsZS5BdHRyaWJ1dGVzID0gMDsKLQl0dXBsZS5EZXNpcmVkVHVwbGUgPSBDSVNUUExfQ0ZUQUJMRV9FTlRSWTsKLQlpID0gZmlyc3RfdHVwbGUobGluaywgJnR1cGxlLCAmcGFyc2UpOwotCXdoaWxlIChpID09IENTX1NVQ0NFU1MpIHsKLQkgICAgaWYgKGNmLT5pby5ud2luID4gMCkgewotCQlsaW5rLT5jb25mLkNvbmZpZ0luZGV4ID0gY2YtPmluZGV4OwotCQlsaW5rLT5pby5CYXNlUG9ydDEgPSBjZi0+aW8ud2luWzBdLmJhc2U7Ci0JCWxpbmstPmlvLk51bVBvcnRzMSA9IGNmLT5pby53aW5bMF0ubGVuOwotCQlsaW5rLT5pby5OdW1Qb3J0czIgPSAwOwotICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX0lORk8gImF2bV9jczogdGVzdGluZyBpL28gJSN4LSUjeFxuIiwKLQkJCWxpbmstPmlvLkJhc2VQb3J0MSwKLQkJICAgICAgICBsaW5rLT5pby5CYXNlUG9ydDErbGluay0+aW8uTnVtUG9ydHMxLTEpOwotCQlpID0gcGNtY2lhX3JlcXVlc3RfaW8obGluaywgJmxpbmstPmlvKTsKLQkJaWYgKGkgPT0gQ1NfU1VDQ0VTUykgZ290byBmb3VuZF9wb3J0OwotCSAgICB9Ci0JICAgIGkgPSBuZXh0X3R1cGxlKGxpbmssICZ0dXBsZSwgJnBhcnNlKTsKLQl9Ci0KLWZvdW5kX3BvcnQ6Ci0JaWYgKGkgIT0gQ1NfU1VDQ0VTUykgewotCSAgICBjc19lcnJvcihsaW5rLCBSZXF1ZXN0SU8sIGkpOwotCSAgICBicmVhazsKLQl9Ci0KIAkvKgogCSAqIGFsbG9jYXRlIGFuIGludGVycnVwdCBsaW5lCiAJICovCiAJaSA9IHBjbWNpYV9yZXF1ZXN0X2lycShsaW5rLCAmbGluay0+aXJxKTsKLQlpZiAoaSAhPSBDU19TVUNDRVNTKSB7CisJaWYgKGkgIT0gMCkgewogCSAgICBjc19lcnJvcihsaW5rLCBSZXF1ZXN0SVJRLCBpKTsKIAkgICAgLyogdW5kbyAqLwogCSAgICBwY21jaWFfZGlzYWJsZV9kZXZpY2UobGluayk7CkBAIC0yNDEsNyArMjA4LDcgQEAKICAgICAgICAgICogY29uZmlndXJlIHRoZSBQQ01DSUEgc29ja2V0CiAJICAqLwogCWkgPSBwY21jaWFfcmVxdWVzdF9jb25maWd1cmF0aW9uKGxpbmssICZsaW5rLT5jb25mKTsKLQlpZiAoaSAhPSBDU19TVUNDRVNTKSB7CisJaWYgKGkgIT0gMCkgewogCSAgICBjc19lcnJvcihsaW5rLCBSZXF1ZXN0Q29uZmlndXJhdGlvbiwgaSk7CiAJICAgIHBjbWNpYV9kaXNhYmxlX2RldmljZShsaW5rKTsKIAkgICAgYnJlYWs7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaGlzYXgvYXZtYTFfY3MuYyBiL2RyaXZlcnMvaXNkbi9oaXNheC9hdm1hMV9jcy5jCmluZGV4IGZjNmNjMmMuLjIzNTYwYzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oaXNheC9hdm1hMV9jcy5jCisrKyBiL2RyaXZlcnMvaXNkbi9oaXNheC9hdm1hMV9jcy5jCkBAIC0xNzQsMzggKzE3NCwyOSBAQAogICAgIAogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAKLXN0YXRpYyBpbnQgZ2V0X3R1cGxlKHN0cnVjdCBwY21jaWFfZGV2aWNlICpoYW5kbGUsIHR1cGxlX3QgKnR1cGxlLAotCQkgICAgIGNpc3BhcnNlX3QgKnBhcnNlKQorc3RhdGljIGludCBhdm1hMWNzX2NvbmZpZ2NoZWNrKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldiwKKwkJCSAgICAgICBjaXN0cGxfY2Z0YWJsZV9lbnRyeV90ICpjZiwKKwkJCSAgICAgICBjaXN0cGxfY2Z0YWJsZV9lbnRyeV90ICpkZmx0LAorCQkJICAgICAgIHVuc2lnbmVkIGludCB2Y2MsCisJCQkgICAgICAgdm9pZCAqcHJpdl9kYXRhKQogewotICAgIGludCBpID0gcGNtY2lhX2dldF90dXBsZV9kYXRhKGhhbmRsZSwgdHVwbGUpOwotICAgIGlmIChpICE9IENTX1NVQ0NFU1MpIHJldHVybiBpOwotICAgIHJldHVybiBwY21jaWFfcGFyc2VfdHVwbGUoaGFuZGxlLCB0dXBsZSwgcGFyc2UpOworCWlmIChjZi0+aW8ubndpbiA8PSAwKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCXBfZGV2LT5pby5CYXNlUG9ydDEgPSBjZi0+aW8ud2luWzBdLmJhc2U7CisJcF9kZXYtPmlvLk51bVBvcnRzMSA9IGNmLT5pby53aW5bMF0ubGVuOworCXBfZGV2LT5pby5OdW1Qb3J0czIgPSAwOworCXByaW50ayhLRVJOX0lORk8gImF2bWExX2NzOiB0ZXN0aW5nIGkvbyAlI3gtJSN4XG4iLAorCSAgICAgICBwX2Rldi0+aW8uQmFzZVBvcnQxLAorCSAgICAgICBwX2Rldi0+aW8uQmFzZVBvcnQxK3BfZGV2LT5pby5OdW1Qb3J0czEtMSk7CisJcmV0dXJuIHBjbWNpYV9yZXF1ZXN0X2lvKHBfZGV2LCAmcF9kZXYtPmlvKTsKIH0KIAotc3RhdGljIGludCBmaXJzdF90dXBsZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqaGFuZGxlLCB0dXBsZV90ICp0dXBsZSwKLQkJICAgICBjaXNwYXJzZV90ICpwYXJzZSkKLXsKLSAgICBpbnQgaSA9IHBjbWNpYV9nZXRfZmlyc3RfdHVwbGUoaGFuZGxlLCB0dXBsZSk7Ci0gICAgaWYgKGkgIT0gQ1NfU1VDQ0VTUykgcmV0dXJuIGk7Ci0gICAgcmV0dXJuIGdldF90dXBsZShoYW5kbGUsIHR1cGxlLCBwYXJzZSk7Ci19Ci0KLXN0YXRpYyBpbnQgbmV4dF90dXBsZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqaGFuZGxlLCB0dXBsZV90ICp0dXBsZSwKLQkJICAgICBjaXNwYXJzZV90ICpwYXJzZSkKLXsKLSAgICBpbnQgaSA9IHBjbWNpYV9nZXRfbmV4dF90dXBsZShoYW5kbGUsIHR1cGxlKTsKLSAgICBpZiAoaSAhPSBDU19TVUNDRVNTKSByZXR1cm4gaTsKLSAgICByZXR1cm4gZ2V0X3R1cGxlKGhhbmRsZSwgdHVwbGUsIHBhcnNlKTsKLX0KIAogc3RhdGljIGludCBhdm1hMWNzX2NvbmZpZyhzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKLSAgICB0dXBsZV90IHR1cGxlOwotICAgIGNpc3BhcnNlX3QgcGFyc2U7Ci0gICAgY2lzdHBsX2NmdGFibGVfZW50cnlfdCAqY2YgPSAmcGFyc2UuY2Z0YWJsZV9lbnRyeTsKICAgICBsb2NhbF9pbmZvX3QgKmRldjsKICAgICBpbnQgaTsKLSAgICB1X2NoYXIgYnVmWzY0XTsKICAgICBjaGFyIGRldm5hbWVbMTI4XTsKICAgICBJc2RuQ2FyZF90CWljYXJkOwogICAgIGludCBidXN5ID0gMDsKQEAgLTIxNCw0NSArMjA1LDE5IEBACiAKICAgICBERUJVRygwLCAiYXZtYTFjc19jb25maWcoMHglcClcbiIsIGxpbmspOwogCisgICAgZGV2bmFtZVswXSA9IDA7CisgICAgaWYgKGxpbmstPnByb2RfaWRbMV0pCisJICAgIHN0cmxjcHkoZGV2bmFtZSwgbGluay0+cHJvZF9pZFsxXSwgc2l6ZW9mKGRldm5hbWUpKTsKKworICAgIGlmIChwY21jaWFfbG9vcF9jb25maWcobGluaywgYXZtYTFjc19jb25maWdjaGVjaywgTlVMTCkpCisJICAgIHJldHVybiAtRU5PREVWOworCiAgICAgZG8gewotCWRldm5hbWVbMF0gPSAwOwotCWlmIChsaW5rLT5wcm9kX2lkWzFdKQotCQlzdHJsY3B5KGRldm5hbWUsIGxpbmstPnByb2RfaWRbMV0sIHNpemVvZihkZXZuYW1lKSk7Ci0KLQkvKgotICAgICAgICAgKiBmaW5kIElPIHBvcnQKLSAgICAgICAgICovCi0JdHVwbGUuVHVwbGVEYXRhID0gKGNpc2RhdGFfdCAqKWJ1ZjsKLQl0dXBsZS5UdXBsZU9mZnNldCA9IDA7IHR1cGxlLlR1cGxlRGF0YU1heCA9IDI1NTsKLQl0dXBsZS5BdHRyaWJ1dGVzID0gMDsKLQl0dXBsZS5EZXNpcmVkVHVwbGUgPSBDSVNUUExfQ0ZUQUJMRV9FTlRSWTsKLQlpID0gZmlyc3RfdHVwbGUobGluaywgJnR1cGxlLCAmcGFyc2UpOwotCXdoaWxlIChpID09IENTX1NVQ0NFU1MpIHsKLQkgICAgaWYgKGNmLT5pby5ud2luID4gMCkgewotCQlsaW5rLT5jb25mLkNvbmZpZ0luZGV4ID0gY2YtPmluZGV4OwotCQlsaW5rLT5pby5CYXNlUG9ydDEgPSBjZi0+aW8ud2luWzBdLmJhc2U7Ci0JCWxpbmstPmlvLk51bVBvcnRzMSA9IGNmLT5pby53aW5bMF0ubGVuOwotCQlsaW5rLT5pby5OdW1Qb3J0czIgPSAwOwotCQlwcmludGsoS0VSTl9JTkZPICJhdm1hMV9jczogdGVzdGluZyBpL28gJSN4LSUjeFxuIiwKLQkJCWxpbmstPmlvLkJhc2VQb3J0MSwKLQkJCWxpbmstPmlvLkJhc2VQb3J0MStsaW5rLT5pby5OdW1Qb3J0czEgLSAxKTsKLQkJaSA9IHBjbWNpYV9yZXF1ZXN0X2lvKGxpbmssICZsaW5rLT5pbyk7Ci0JCWlmIChpID09IENTX1NVQ0NFU1MpIGdvdG8gZm91bmRfcG9ydDsKLQkgICAgfQotCSAgICBpID0gbmV4dF90dXBsZShsaW5rLCAmdHVwbGUsICZwYXJzZSk7Ci0JfQotCi1mb3VuZF9wb3J0OgotCWlmIChpICE9IENTX1NVQ0NFU1MpIHsKLQkgICAgY3NfZXJyb3IobGluaywgUmVxdWVzdElPLCBpKTsKLQkgICAgYnJlYWs7Ci0JfQotCQogCS8qCiAJICogYWxsb2NhdGUgYW4gaW50ZXJydXB0IGxpbmUKIAkgKi8KIAlpID0gcGNtY2lhX3JlcXVlc3RfaXJxKGxpbmssICZsaW5rLT5pcnEpOwotCWlmIChpICE9IENTX1NVQ0NFU1MpIHsKKwlpZiAoaSAhPSAwKSB7CiAJICAgIGNzX2Vycm9yKGxpbmssIFJlcXVlc3RJUlEsIGkpOwogCSAgICAvKiB1bmRvICovCiAJICAgIHBjbWNpYV9kaXNhYmxlX2RldmljZShsaW5rKTsKQEAgLTI2Myw3ICsyMjgsNyBAQAogCSAqIGNvbmZpZ3VyZSB0aGUgUENNQ0lBIHNvY2tldAogCSAqLwogCWkgPSBwY21jaWFfcmVxdWVzdF9jb25maWd1cmF0aW9uKGxpbmssICZsaW5rLT5jb25mKTsKLQlpZiAoaSAhPSBDU19TVUNDRVNTKSB7CisJaWYgKGkgIT0gMCkgewogCSAgICBjc19lcnJvcihsaW5rLCBSZXF1ZXN0Q29uZmlndXJhdGlvbiwgaSk7CiAJICAgIHBjbWNpYV9kaXNhYmxlX2RldmljZShsaW5rKTsKIAkgICAgYnJlYWs7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaGlzYXgvZWxzYV9jcy5jIGIvZHJpdmVycy9pc2RuL2hpc2F4L2Vsc2FfY3MuYwppbmRleCBkYjdlNjQ0Li5mNGQwZmUyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaGlzYXgvZWxzYV9jcy5jCisrKyBiL2RyaXZlcnMvaXNkbi9oaXNheC9lbHNhX2NzLmMKQEAgLTIwMyw4MiArMjAzLDU1IEBACiAgICAgZGV2aWNlIGF2YWlsYWJsZSB0byB0aGUgc3lzdGVtLgogCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLXN0YXRpYyBpbnQgZ2V0X3R1cGxlKHN0cnVjdCBwY21jaWFfZGV2aWNlICpoYW5kbGUsIHR1cGxlX3QgKnR1cGxlLAotICAgICAgICAgICAgICAgICAgICAgY2lzcGFyc2VfdCAqcGFyc2UpCi17Ci0gICAgaW50IGkgPSBwY21jaWFfZ2V0X3R1cGxlX2RhdGEoaGFuZGxlLCB0dXBsZSk7Ci0gICAgaWYgKGkgIT0gQ1NfU1VDQ0VTUykgcmV0dXJuIGk7Ci0gICAgcmV0dXJuIHBjbWNpYV9wYXJzZV90dXBsZShoYW5kbGUsIHR1cGxlLCBwYXJzZSk7Ci19CiAKLXN0YXRpYyBpbnQgZmlyc3RfdHVwbGUoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmhhbmRsZSwgdHVwbGVfdCAqdHVwbGUsCi0gICAgICAgICAgICAgICAgICAgICBjaXNwYXJzZV90ICpwYXJzZSkKK3N0YXRpYyBpbnQgZWxzYV9jc19jb25maWdjaGVjayhzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYsCisJCQkgICAgICAgY2lzdHBsX2NmdGFibGVfZW50cnlfdCAqY2YsCisJCQkgICAgICAgY2lzdHBsX2NmdGFibGVfZW50cnlfdCAqZGZsdCwKKwkJCSAgICAgICB1bnNpZ25lZCBpbnQgdmNjLAorCQkJICAgICAgIHZvaWQgKnByaXZfZGF0YSkKIHsKLSAgICBpbnQgaSA9IHBjbWNpYV9nZXRfZmlyc3RfdHVwbGUoaGFuZGxlLCB0dXBsZSk7Ci0gICAgaWYgKGkgIT0gQ1NfU1VDQ0VTUykgcmV0dXJuIGk7Ci0gICAgcmV0dXJuIGdldF90dXBsZShoYW5kbGUsIHR1cGxlLCBwYXJzZSk7Ci19CisJaW50IGo7CiAKLXN0YXRpYyBpbnQgbmV4dF90dXBsZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqaGFuZGxlLCB0dXBsZV90ICp0dXBsZSwKLSAgICAgICAgICAgICAgICAgICAgIGNpc3BhcnNlX3QgKnBhcnNlKQotewotICAgIGludCBpID0gcGNtY2lhX2dldF9uZXh0X3R1cGxlKGhhbmRsZSwgdHVwbGUpOwotICAgIGlmIChpICE9IENTX1NVQ0NFU1MpIHJldHVybiBpOwotICAgIHJldHVybiBnZXRfdHVwbGUoaGFuZGxlLCB0dXBsZSwgcGFyc2UpOworCWlmICgoY2YtPmlvLm53aW4gPiAwKSAmJiBjZi0+aW8ud2luWzBdLmJhc2UpIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiKGVsc2FfY3M6IGxvb2tzIGxpa2UgdGhlIDk2IG1vZGVsKVxuIik7CisJCXBfZGV2LT5pby5CYXNlUG9ydDEgPSBjZi0+aW8ud2luWzBdLmJhc2U7CisJCWlmICghcGNtY2lhX3JlcXVlc3RfaW8ocF9kZXYsICZwX2Rldi0+aW8pKQorCQkJcmV0dXJuIDA7CisJfSBlbHNlIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiKGVsc2FfY3M6IGxvb2tzIGxpa2UgdGhlIDk3IG1vZGVsKVxuIik7CisJCWZvciAoaiA9IDB4MmYwOyBqID4gMHgxMDA7IGogLT0gMHgxMCkgeworCQkJcF9kZXYtPmlvLkJhc2VQb3J0MSA9IGo7CisJCQlpZiAoIXBjbWNpYV9yZXF1ZXN0X2lvKHBfZGV2LCAmcF9kZXYtPmlvKSkKKwkJCQlyZXR1cm4gMDsKKwkJfQorCX0KKwlyZXR1cm4gLUVOT0RFVjsKIH0KIAogc3RhdGljIGludCBlbHNhX2NzX2NvbmZpZyhzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKLSAgICB0dXBsZV90IHR1cGxlOwotICAgIGNpc3BhcnNlX3QgcGFyc2U7CiAgICAgbG9jYWxfaW5mb190ICpkZXY7Ci0gICAgaW50IGksIGosIGxhc3RfZm47Ci0gICAgdV9zaG9ydCBidWZbMTI4XTsKLSAgICBjaXN0cGxfY2Z0YWJsZV9lbnRyeV90ICpjZiA9ICZwYXJzZS5jZnRhYmxlX2VudHJ5OworICAgIGludCBpLCBsYXN0X2ZuOwogICAgIElzZG5DYXJkX3QgaWNhcmQ7CiAKICAgICBERUJVRygwLCAiZWxzYV9jb25maWcoMHglcClcbiIsIGxpbmspOwogICAgIGRldiA9IGxpbmstPnByaXY7CiAKLSAgICB0dXBsZS5UdXBsZURhdGEgPSAoY2lzZGF0YV90ICopYnVmOwotICAgIHR1cGxlLlR1cGxlT2Zmc2V0ID0gMDsgdHVwbGUuVHVwbGVEYXRhTWF4ID0gMjU1OwotICAgIHR1cGxlLkF0dHJpYnV0ZXMgPSAwOwotICAgIHR1cGxlLkRlc2lyZWRUdXBsZSA9IENJU1RQTF9DRlRBQkxFX0VOVFJZOwotICAgIGkgPSBmaXJzdF90dXBsZShsaW5rLCAmdHVwbGUsICZwYXJzZSk7Ci0gICAgd2hpbGUgKGkgPT0gQ1NfU1VDQ0VTUykgewotICAgICAgICBpZiAoIChjZi0+aW8ubndpbiA+IDApICYmIGNmLT5pby53aW5bMF0uYmFzZSkgewotICAgICAgICAgICAgcHJpbnRrKEtFUk5fSU5GTyAiKGVsc2FfY3M6IGxvb2tzIGxpa2UgdGhlIDk2IG1vZGVsKVxuIik7Ci0gICAgICAgICAgICBsaW5rLT5jb25mLkNvbmZpZ0luZGV4ID0gY2YtPmluZGV4OwotICAgICAgICAgICAgbGluay0+aW8uQmFzZVBvcnQxID0gY2YtPmlvLndpblswXS5iYXNlOwotICAgICAgICAgICAgaSA9IHBjbWNpYV9yZXF1ZXN0X2lvKGxpbmssICZsaW5rLT5pbyk7Ci0gICAgICAgICAgICBpZiAoaSA9PSBDU19TVUNDRVNTKSBicmVhazsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICBwcmludGsoS0VSTl9JTkZPICIoZWxzYV9jczogbG9va3MgbGlrZSB0aGUgOTcgbW9kZWwpXG4iKTsKLSAgICAgICAgICBsaW5rLT5jb25mLkNvbmZpZ0luZGV4ID0gY2YtPmluZGV4OwotICAgICAgICAgIGZvciAoaSA9IDAsIGogPSAweDJmMDsgaiA+IDB4MTAwOyBqIC09IDB4MTApIHsKLSAgICAgICAgICAgIGxpbmstPmlvLkJhc2VQb3J0MSA9IGo7Ci0gICAgICAgICAgICBpID0gcGNtY2lhX3JlcXVlc3RfaW8obGluaywgJmxpbmstPmlvKTsKLSAgICAgICAgICAgIGlmIChpID09IENTX1NVQ0NFU1MpIGJyZWFrOwotICAgICAgICAgIH0KLSAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBpID0gbmV4dF90dXBsZShsaW5rLCAmdHVwbGUsICZwYXJzZSk7Ci0gICAgfQotCi0gICAgaWYgKGkgIT0gQ1NfU1VDQ0VTUykgeworICAgIGkgPSBwY21jaWFfbG9vcF9jb25maWcobGluaywgZWxzYV9jc19jb25maWdjaGVjaywgTlVMTCk7CisgICAgaWYgKGkgIT0gMCkgewogCWxhc3RfZm4gPSBSZXF1ZXN0SU87CiAJZ290byBjc19mYWlsZWQ7CiAgICAgfQogCiAgICAgaSA9IHBjbWNpYV9yZXF1ZXN0X2lycShsaW5rLCAmbGluay0+aXJxKTsKLSAgICBpZiAoaSAhPSBDU19TVUNDRVNTKSB7CisgICAgaWYgKGkgIT0gMCkgewogICAgICAgICBsaW5rLT5pcnEuQXNzaWduZWRJUlEgPSAwOwogCWxhc3RfZm4gPSBSZXF1ZXN0SVJROwogICAgICAgICBnb3RvIGNzX2ZhaWxlZDsKICAgICB9CiAKICAgICBpID0gcGNtY2lhX3JlcXVlc3RfY29uZmlndXJhdGlvbihsaW5rLCAmbGluay0+Y29uZik7Ci0gICAgaWYgKGkgIT0gQ1NfU1VDQ0VTUykgeworICAgIGlmIChpICE9IDApIHsKICAgICAgIGxhc3RfZm4gPSBSZXF1ZXN0Q29uZmlndXJhdGlvbjsKICAgICAgIGdvdG8gY3NfZmFpbGVkOwogICAgIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oaXNheC9zZWRsYmF1ZXJfY3MuYyBiL2RyaXZlcnMvaXNkbi9oaXNheC9zZWRsYmF1ZXJfY3MuYwppbmRleCA0MzljYjUzLi45YTNjOWY1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaGlzYXgvc2VkbGJhdWVyX2NzLmMKKysrIGIvZHJpdmVycy9pc2RuL2hpc2F4L3NlZGxiYXVlcl9jcy5jCkBAIC0yMTcsMTAxICsyMTcsNjEgQEAKICNkZWZpbmUgQ1NfQ0hFQ0soZm4sIHJldCkgXAogZG8geyBsYXN0X2ZuID0gKGZuKTsgaWYgKChsYXN0X3JldCA9IChyZXQpKSAhPSAwKSBnb3RvIGNzX2ZhaWxlZDsgfSB3aGlsZSAoMCkKIAotc3RhdGljIGludCBzZWRsYmF1ZXJfY29uZmlnKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQorc3RhdGljIGludCBzZWRsYmF1ZXJfY29uZmlnX2NoZWNrKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldiwKKwkJCQkgIGNpc3RwbF9jZnRhYmxlX2VudHJ5X3QgKmNmZywKKwkJCQkgIGNpc3RwbF9jZnRhYmxlX2VudHJ5X3QgKmRmbHQsCisJCQkJICB1bnNpZ25lZCBpbnQgdmNjLAorCQkJCSAgdm9pZCAqcHJpdl9kYXRhKQogewotICAgIGxvY2FsX2luZm9fdCAqZGV2ID0gbGluay0+cHJpdjsKLSAgICB0dXBsZV90IHR1cGxlOwotICAgIGNpc3BhcnNlX3QgcGFyc2U7Ci0gICAgaW50IGxhc3RfZm4sIGxhc3RfcmV0OwotICAgIHU4IGJ1Zls2NF07Ci0gICAgY29uZmlnX2luZm9fdCBjb25mOwotICAgIHdpbl9yZXFfdCByZXE7Ci0gICAgbWVtcmVxX3QgbWFwOwotICAgIElzZG5DYXJkX3QgIGljYXJkOworCXdpbl9yZXFfdCAqcmVxID0gcHJpdl9kYXRhOwogCi0gICAgREVCVUcoMCwgInNlZGxiYXVlcl9jb25maWcoMHglcClcbiIsIGxpbmspOworCWlmIChjZmctPmluZGV4ID09IDApCisJCXJldHVybiAtRU5PREVWOwogCi0gICAgdHVwbGUuQXR0cmlidXRlcyA9IDA7Ci0gICAgdHVwbGUuVHVwbGVEYXRhID0gYnVmOwotICAgIHR1cGxlLlR1cGxlRGF0YU1heCA9IHNpemVvZihidWYpOwotICAgIHR1cGxlLlR1cGxlT2Zmc2V0ID0gMDsKLQotICAgIENTX0NIRUNLKEdldENvbmZpZ3VyYXRpb25JbmZvLCBwY21jaWFfZ2V0X2NvbmZpZ3VyYXRpb25faW5mbyhsaW5rLCAmY29uZikpOwotCi0gICAgLyoKLSAgICAgIEluIHRoaXMgbG9vcCwgd2Ugc2NhbiB0aGUgQ0lTIGZvciBjb25maWd1cmF0aW9uIHRhYmxlIGVudHJpZXMsCi0gICAgICBlYWNoIG9mIHdoaWNoIGRlc2NyaWJlcyBhIHZhbGlkIGNhcmQgY29uZmlndXJhdGlvbiwgaW5jbHVkaW5nCi0gICAgICB2b2x0YWdlLCBJTyB3aW5kb3csIG1lbW9yeSB3aW5kb3csIGFuZCBpbnRlcnJ1cHQgc2V0dGluZ3MuCi0KLSAgICAgIFdlIG1ha2Ugbm8gYXNzdW1wdGlvbnMgYWJvdXQgdGhlIGNhcmQgdG8gYmUgY29uZmlndXJlZDogd2UgdXNlCi0gICAgICBqdXN0IHRoZSBpbmZvcm1hdGlvbiBhdmFpbGFibGUgaW4gdGhlIENJUy4gIEluIGFuIGlkZWFsIHdvcmxkLAotICAgICAgdGhpcyB3b3VsZCB3b3JrIGZvciBhbnkgUENNQ0lBIGNhcmQsIGJ1dCBpdCByZXF1aXJlcyBhIGNvbXBsZXRlCi0gICAgICBhbmQgYWNjdXJhdGUgQ0lTLiAgSW4gcHJhY3RpY2UsIGEgZHJpdmVyIHVzdWFsbHkgImtub3dzIiBtb3N0IG9mCi0gICAgICB0aGVzZSB0aGluZ3Mgd2l0aG91dCBjb25zdWx0aW5nIHRoZSBDSVMsIGFuZCBtb3N0IGNsaWVudCBkcml2ZXJzCi0gICAgICB3aWxsIG9ubHkgdXNlIHRoZSBDSVMgdG8gZmlsbCBpbiBpbXBsZW1lbnRhdGlvbi1kZWZpbmVkIGRldGFpbHMuCi0gICAgKi8KLSAgICB0dXBsZS5EZXNpcmVkVHVwbGUgPSBDSVNUUExfQ0ZUQUJMRV9FTlRSWTsKLSAgICBDU19DSEVDSyhHZXRGaXJzdFR1cGxlLCBwY21jaWFfZ2V0X2ZpcnN0X3R1cGxlKGxpbmssICZ0dXBsZSkpOwotICAgIHdoaWxlICgxKSB7Ci0JY2lzdHBsX2NmdGFibGVfZW50cnlfdCBkZmx0ID0geyAwIH07Ci0JY2lzdHBsX2NmdGFibGVfZW50cnlfdCAqY2ZnID0gJihwYXJzZS5jZnRhYmxlX2VudHJ5KTsKLQlpZiAocGNtY2lhX2dldF90dXBsZV9kYXRhKGxpbmssICZ0dXBsZSkgIT0gMCB8fAotCQlwY21jaWFfcGFyc2VfdHVwbGUobGluaywgJnR1cGxlLCAmcGFyc2UpICE9IDApCi0JICAgIGdvdG8gbmV4dF9lbnRyeTsKLQotCWlmIChjZmctPmZsYWdzICYgQ0lTVFBMX0NGVEFCTEVfREVGQVVMVCkgZGZsdCA9ICpjZmc7Ci0JaWYgKGNmZy0+aW5kZXggPT0gMCkgZ290byBuZXh0X2VudHJ5OwotCWxpbmstPmNvbmYuQ29uZmlnSW5kZXggPSBjZmctPmluZGV4OwotCQogCS8qIERvZXMgdGhpcyBjYXJkIG5lZWQgYXVkaW8gb3V0cHV0PyAqLwogCWlmIChjZmctPmZsYWdzICYgQ0lTVFBMX0NGVEFCTEVfQVVESU8pIHsKLQkgICAgbGluay0+Y29uZi5BdHRyaWJ1dGVzIHw9IENPTkZfRU5BQkxFX1NQS1I7Ci0JICAgIGxpbmstPmNvbmYuU3RhdHVzID0gQ0NTUl9BVURJT19FTkE7CisJCXBfZGV2LT5jb25mLkF0dHJpYnV0ZXMgfD0gQ09ORl9FTkFCTEVfU1BLUjsKKwkJcF9kZXYtPmNvbmYuU3RhdHVzID0gQ0NTUl9BVURJT19FTkE7CiAJfQotCQorCiAJLyogVXNlIHBvd2VyIHNldHRpbmdzIGZvciBWY2MgYW5kIFZwcCBpZiBwcmVzZW50ICovCiAJLyogIE5vdGUgdGhhdCB0aGUgQ0lTIHZhbHVlcyBuZWVkIHRvIGJlIHJlc2NhbGVkICovCiAJaWYgKGNmZy0+dmNjLnByZXNlbnQgJiAoMTw8Q0lTVFBMX1BPV0VSX1ZOT00pKSB7Ci0JICAgIGlmIChjb25mLlZjYyAhPSBjZmctPnZjYy5wYXJhbVtDSVNUUExfUE9XRVJfVk5PTV0vMTAwMDApCi0JCWdvdG8gbmV4dF9lbnRyeTsKLQl9IGVsc2UgaWYgKGRmbHQudmNjLnByZXNlbnQgJiAoMTw8Q0lTVFBMX1BPV0VSX1ZOT00pKSB7Ci0JICAgIGlmIChjb25mLlZjYyAhPSBkZmx0LnZjYy5wYXJhbVtDSVNUUExfUE9XRVJfVk5PTV0vMTAwMDApCi0JCWdvdG8gbmV4dF9lbnRyeTsKKwkJaWYgKHZjYyAhPSBjZmctPnZjYy5wYXJhbVtDSVNUUExfUE9XRVJfVk5PTV0vMTAwMDApCisJCQlyZXR1cm4gLUVOT0RFVjsKKwl9IGVsc2UgaWYgKGRmbHQtPnZjYy5wcmVzZW50ICYgKDE8PENJU1RQTF9QT1dFUl9WTk9NKSkgeworCQlpZiAodmNjICE9IGRmbHQtPnZjYy5wYXJhbVtDSVNUUExfUE9XRVJfVk5PTV0vMTAwMDApCisJCQlyZXR1cm4gLUVOT0RFVjsKIAl9Ci0JICAgIAorCiAJaWYgKGNmZy0+dnBwMS5wcmVzZW50ICYgKDE8PENJU1RQTF9QT1dFUl9WTk9NKSkKLQkgICAgbGluay0+Y29uZi5WcHAgPQotCQljZmctPnZwcDEucGFyYW1bQ0lTVFBMX1BPV0VSX1ZOT01dLzEwMDAwOwotCWVsc2UgaWYgKGRmbHQudnBwMS5wcmVzZW50ICYgKDE8PENJU1RQTF9QT1dFUl9WTk9NKSkKLQkgICAgbGluay0+Y29uZi5WcHAgPQotCQlkZmx0LnZwcDEucGFyYW1bQ0lTVFBMX1BPV0VSX1ZOT01dLzEwMDAwOwotCQorCQlwX2Rldi0+Y29uZi5WcHAgPSBjZmctPnZwcDEucGFyYW1bQ0lTVFBMX1BPV0VSX1ZOT01dLzEwMDAwOworCWVsc2UgaWYgKGRmbHQtPnZwcDEucHJlc2VudCAmICgxPDxDSVNUUExfUE9XRVJfVk5PTSkpCisJCXBfZGV2LT5jb25mLlZwcCA9IGRmbHQtPnZwcDEucGFyYW1bQ0lTVFBMX1BPV0VSX1ZOT01dLzEwMDAwOworCiAJLyogRG8gd2UgbmVlZCB0byBhbGxvY2F0ZSBhbiBpbnRlcnJ1cHQ/ICovCi0JaWYgKGNmZy0+aXJxLklSUUluZm8xIHx8IGRmbHQuaXJxLklSUUluZm8xKQotCSAgICBsaW5rLT5jb25mLkF0dHJpYnV0ZXMgfD0gQ09ORl9FTkFCTEVfSVJROwotCQorCWlmIChjZmctPmlycS5JUlFJbmZvMSB8fCBkZmx0LT5pcnEuSVJRSW5mbzEpCisJCXBfZGV2LT5jb25mLkF0dHJpYnV0ZXMgfD0gQ09ORl9FTkFCTEVfSVJROworCiAJLyogSU8gd2luZG93IHNldHRpbmdzICovCi0JbGluay0+aW8uTnVtUG9ydHMxID0gbGluay0+aW8uTnVtUG9ydHMyID0gMDsKLQlpZiAoKGNmZy0+aW8ubndpbiA+IDApIHx8IChkZmx0LmlvLm53aW4gPiAwKSkgewotCSAgICBjaXN0cGxfaW9fdCAqaW8gPSAoY2ZnLT5pby5ud2luKSA/ICZjZmctPmlvIDogJmRmbHQuaW87Ci0JICAgIGxpbmstPmlvLkF0dHJpYnV0ZXMxID0gSU9fREFUQV9QQVRIX1dJRFRIX0FVVE87Ci0JICAgIGlmICghKGlvLT5mbGFncyAmIENJU1RQTF9JT184QklUKSkKLQkJbGluay0+aW8uQXR0cmlidXRlczEgPSBJT19EQVRBX1BBVEhfV0lEVEhfMTY7Ci0JICAgIGlmICghKGlvLT5mbGFncyAmIENJU1RQTF9JT18xNkJJVCkpCi0JCWxpbmstPmlvLkF0dHJpYnV0ZXMxID0gSU9fREFUQV9QQVRIX1dJRFRIXzg7Ci0vKiBuZXcgaW4gZHVtbXkuY3MgMjAwMS8wMS8yOCBNTiAKLSAgICAgICAgICAgIGxpbmstPmlvLklPQWRkckxpbmVzID0gaW8tPmZsYWdzICYgQ0lTVFBMX0lPX0xJTkVTX01BU0s7Ci0qLwotCSAgICBsaW5rLT5pby5CYXNlUG9ydDEgPSBpby0+d2luWzBdLmJhc2U7Ci0JICAgIGxpbmstPmlvLk51bVBvcnRzMSA9IGlvLT53aW5bMF0ubGVuOwotCSAgICBpZiAoaW8tPm53aW4gPiAxKSB7Ci0JCWxpbmstPmlvLkF0dHJpYnV0ZXMyID0gbGluay0+aW8uQXR0cmlidXRlczE7Ci0JCWxpbmstPmlvLkJhc2VQb3J0MiA9IGlvLT53aW5bMV0uYmFzZTsKLQkJbGluay0+aW8uTnVtUG9ydHMyID0gaW8tPndpblsxXS5sZW47Ci0JICAgIH0KLQkgICAgLyogVGhpcyByZXNlcnZlcyBJTyBzcGFjZSBidXQgZG9lc24ndCBhY3R1YWxseSBlbmFibGUgaXQgKi8KLQkgICAgaWYgKHBjbWNpYV9yZXF1ZXN0X2lvKGxpbmssICZsaW5rLT5pbykgIT0gMCkKLQkJZ290byBuZXh0X2VudHJ5OworCXBfZGV2LT5pby5OdW1Qb3J0czEgPSBwX2Rldi0+aW8uTnVtUG9ydHMyID0gMDsKKwlpZiAoKGNmZy0+aW8ubndpbiA+IDApIHx8IChkZmx0LT5pby5ud2luID4gMCkpIHsKKwkJY2lzdHBsX2lvX3QgKmlvID0gKGNmZy0+aW8ubndpbikgPyAmY2ZnLT5pbyA6ICZkZmx0LT5pbzsKKwkJcF9kZXYtPmlvLkF0dHJpYnV0ZXMxID0gSU9fREFUQV9QQVRIX1dJRFRIX0FVVE87CisJCWlmICghKGlvLT5mbGFncyAmIENJU1RQTF9JT184QklUKSkKKwkJCXBfZGV2LT5pby5BdHRyaWJ1dGVzMSA9IElPX0RBVEFfUEFUSF9XSURUSF8xNjsKKwkJaWYgKCEoaW8tPmZsYWdzICYgQ0lTVFBMX0lPXzE2QklUKSkKKwkJCXBfZGV2LT5pby5BdHRyaWJ1dGVzMSA9IElPX0RBVEFfUEFUSF9XSURUSF84OworCQlwX2Rldi0+aW8uQmFzZVBvcnQxID0gaW8tPndpblswXS5iYXNlOworCQlwX2Rldi0+aW8uTnVtUG9ydHMxID0gaW8tPndpblswXS5sZW47CisJCWlmIChpby0+bndpbiA+IDEpIHsKKwkJCXBfZGV2LT5pby5BdHRyaWJ1dGVzMiA9IHBfZGV2LT5pby5BdHRyaWJ1dGVzMTsKKwkJCXBfZGV2LT5pby5CYXNlUG9ydDIgPSBpby0+d2luWzFdLmJhc2U7CisJCQlwX2Rldi0+aW8uTnVtUG9ydHMyID0gaW8tPndpblsxXS5sZW47CisJCX0KKwkJLyogVGhpcyByZXNlcnZlcyBJTyBzcGFjZSBidXQgZG9lc24ndCBhY3R1YWxseSBlbmFibGUgaXQgKi8KKwkJaWYgKHBjbWNpYV9yZXF1ZXN0X2lvKHBfZGV2LCAmcF9kZXYtPmlvKSAhPSAwKQorCQkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCiAJLyoKQEAgLTMyNSwzMCArMjg1LDU0IEBACiAJICBuZWVkcyB0byBiZSBtYXBwZWQgdG8gdmlydHVhbCBzcGFjZSB3aXRoIGlvcmVtYXAoKSBiZWZvcmUgaXQKIAkgIGlzIHVzZWQuCiAJKi8KLQlpZiAoKGNmZy0+bWVtLm53aW4gPiAwKSB8fCAoZGZsdC5tZW0ubndpbiA+IDApKSB7Ci0JICAgIGNpc3RwbF9tZW1fdCAqbWVtID0KLQkJKGNmZy0+bWVtLm53aW4pID8gJmNmZy0+bWVtIDogJmRmbHQubWVtOwotCSAgICByZXEuQXR0cmlidXRlcyA9IFdJTl9EQVRBX1dJRFRIXzE2fFdJTl9NRU1PUllfVFlQRV9DTTsKLQkgICAgcmVxLkF0dHJpYnV0ZXMgfD0gV0lOX0VOQUJMRTsKLQkgICAgcmVxLkJhc2UgPSBtZW0tPndpblswXS5ob3N0X2FkZHI7Ci0JICAgIHJlcS5TaXplID0gbWVtLT53aW5bMF0ubGVuOwotLyogbmV3IGluIGR1bW15LmNzIDIwMDEvMDEvMjggTU4gCi0gICAgICAgICAgICBpZiAocmVxLlNpemUgPCAweDEwMDApCi0gICAgICAgICAgICAgICAgcmVxLlNpemUgPSAweDEwMDA7Ci0qLwotCSAgICByZXEuQWNjZXNzU3BlZWQgPSAwOwotCSAgICBpZiAocGNtY2lhX3JlcXVlc3Rfd2luZG93KCZsaW5rLCAmcmVxLCAmbGluay0+d2luKSAhPSAwKQotCQlnb3RvIG5leHRfZW50cnk7Ci0JICAgIG1hcC5QYWdlID0gMDsgbWFwLkNhcmRPZmZzZXQgPSBtZW0tPndpblswXS5jYXJkX2FkZHI7Ci0JICAgIGlmIChwY21jaWFfbWFwX21lbV9wYWdlKGxpbmstPndpbiwgJm1hcCkgIT0gMCkKLQkJZ290byBuZXh0X2VudHJ5OworCWlmICgoY2ZnLT5tZW0ubndpbiA+IDApIHx8IChkZmx0LT5tZW0ubndpbiA+IDApKSB7CisJCWNpc3RwbF9tZW1fdCAqbWVtID0gKGNmZy0+bWVtLm53aW4pID8gJmNmZy0+bWVtIDogJmRmbHQtPm1lbTsKKwkJbWVtcmVxX3QgbWFwOworCQlyZXEtPkF0dHJpYnV0ZXMgPSBXSU5fREFUQV9XSURUSF8xNnxXSU5fTUVNT1JZX1RZUEVfQ007CisJCXJlcS0+QXR0cmlidXRlcyB8PSBXSU5fRU5BQkxFOworCQlyZXEtPkJhc2UgPSBtZW0tPndpblswXS5ob3N0X2FkZHI7CisJCXJlcS0+U2l6ZSA9IG1lbS0+d2luWzBdLmxlbjsKKwkJcmVxLT5BY2Nlc3NTcGVlZCA9IDA7CisJCWlmIChwY21jaWFfcmVxdWVzdF93aW5kb3coJnBfZGV2LCByZXEsICZwX2Rldi0+d2luKSAhPSAwKQorCQkJcmV0dXJuIC1FTk9ERVY7CisJCW1hcC5QYWdlID0gMDsKKwkJbWFwLkNhcmRPZmZzZXQgPSBtZW0tPndpblswXS5jYXJkX2FkZHI7CisJCWlmIChwY21jaWFfbWFwX21lbV9wYWdlKHBfZGV2LT53aW4sICZtYXApICE9IDApCisJCQlyZXR1cm4gLUVOT0RFVjsKIAl9Ci0JLyogSWYgd2UgZ290IHRoaXMgZmFyLCB3ZSdyZSBjb29sISAqLwotCWJyZWFrOworCXJldHVybiAwOworfQogCi0gICAgbmV4dF9lbnRyeToKLQlDU19DSEVDSyhHZXROZXh0VHVwbGUsIHBjbWNpYV9nZXRfbmV4dF90dXBsZShsaW5rLCAmdHVwbGUpKTsKLSAgICB9CisKKworc3RhdGljIGludCBzZWRsYmF1ZXJfY29uZmlnKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQoreworICAgIGxvY2FsX2luZm9fdCAqZGV2ID0gbGluay0+cHJpdjsKKyAgICB3aW5fcmVxX3QgKnJlcTsKKyAgICBpbnQgbGFzdF9mbiwgbGFzdF9yZXQ7CisgICAgSXNkbkNhcmRfdCAgaWNhcmQ7CisKKyAgICBERUJVRygwLCAic2VkbGJhdWVyX2NvbmZpZygweCVwKVxuIiwgbGluayk7CisKKyAgICByZXEgPSBremFsbG9jKHNpemVvZih3aW5fcmVxX3QpLCBHRlBfS0VSTkVMKTsKKyAgICBpZiAoIXJlcSkKKwkgICAgcmV0dXJuIC1FTk9NRU07CisKKyAgICAvKgorICAgICAgSW4gdGhpcyBsb29wLCB3ZSBzY2FuIHRoZSBDSVMgZm9yIGNvbmZpZ3VyYXRpb24gdGFibGUgZW50cmllcywKKyAgICAgIGVhY2ggb2Ygd2hpY2ggZGVzY3JpYmVzIGEgdmFsaWQgY2FyZCBjb25maWd1cmF0aW9uLCBpbmNsdWRpbmcKKyAgICAgIHZvbHRhZ2UsIElPIHdpbmRvdywgbWVtb3J5IHdpbmRvdywgYW5kIGludGVycnVwdCBzZXR0aW5ncy4KKworICAgICAgV2UgbWFrZSBubyBhc3N1bXB0aW9ucyBhYm91dCB0aGUgY2FyZCB0byBiZSBjb25maWd1cmVkOiB3ZSB1c2UKKyAgICAgIGp1c3QgdGhlIGluZm9ybWF0aW9uIGF2YWlsYWJsZSBpbiB0aGUgQ0lTLiAgSW4gYW4gaWRlYWwgd29ybGQsCisgICAgICB0aGlzIHdvdWxkIHdvcmsgZm9yIGFueSBQQ01DSUEgY2FyZCwgYnV0IGl0IHJlcXVpcmVzIGEgY29tcGxldGUKKyAgICAgIGFuZCBhY2N1cmF0ZSBDSVMuICBJbiBwcmFjdGljZSwgYSBkcml2ZXIgdXN1YWxseSAia25vd3MiIG1vc3Qgb2YKKyAgICAgIHRoZXNlIHRoaW5ncyB3aXRob3V0IGNvbnN1bHRpbmcgdGhlIENJUywgYW5kIG1vc3QgY2xpZW50IGRyaXZlcnMKKyAgICAgIHdpbGwgb25seSB1c2UgdGhlIENJUyB0byBmaWxsIGluIGltcGxlbWVudGF0aW9uLWRlZmluZWQgZGV0YWlscy4KKyAgICAqLworICAgIGxhc3RfcmV0ID0gcGNtY2lhX2xvb3BfY29uZmlnKGxpbmssIHNlZGxiYXVlcl9jb25maWdfY2hlY2ssIHJlcSk7CisgICAgaWYgKGxhc3RfcmV0KQorCSAgICBnb3RvIGZhaWxlZDsKIAogICAgIC8qCiAgICAgICAgQWxsb2NhdGUgYW4gaW50ZXJydXB0IGxpbmUuICBOb3RlIHRoYXQgdGhpcyBkb2VzIG5vdCBhc3NpZ24gYQpAQCAtMzg3LDggKzM3MSw4IEBACiAJcHJpbnRrKCIgJiAweCUwNHgtMHglMDR4IiwgbGluay0+aW8uQmFzZVBvcnQyLAogCSAgICAgICBsaW5rLT5pby5CYXNlUG9ydDIrbGluay0+aW8uTnVtUG9ydHMyLTEpOwogICAgIGlmIChsaW5rLT53aW4pCi0JcHJpbnRrKCIsIG1lbSAweCUwNmx4LTB4JTA2bHgiLCByZXEuQmFzZSwKLQkgICAgICAgcmVxLkJhc2UrcmVxLlNpemUtMSk7CisJcHJpbnRrKCIsIG1lbSAweCUwNmx4LTB4JTA2bHgiLCByZXEtPkJhc2UsCisJICAgICAgIHJlcS0+QmFzZStyZXEtPlNpemUtMSk7CiAgICAgcHJpbnRrKCJcbiIpOwogCiAgICAgaWNhcmQucGFyYVswXSA9IGxpbmstPmlycS5Bc3NpZ25lZElSUTsKQEAgLTQwOSw2ICszOTMsNyBAQAogCiBjc19mYWlsZWQ6CiAgICAgY3NfZXJyb3IobGluaywgbGFzdF9mbiwgbGFzdF9yZXQpOworZmFpbGVkOgogICAgIHNlZGxiYXVlcl9yZWxlYXNlKGxpbmspOwogICAgIHJldHVybiAtRU5PREVWOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaGlzYXgvdGVsZXNfY3MuYyBiL2RyaXZlcnMvaXNkbi9oaXNheC90ZWxlc19jcy5jCmluZGV4IGFiNGJkNDUuLjYyM2QxMTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oaXNheC90ZWxlc19jcy5jCisrKyBiL2RyaXZlcnMvaXNkbi9oaXNheC90ZWxlc19jcy5jCkBAIC0xOTMsODIgKzE5Myw1NSBAQAogICAgIGRldmljZSBhdmFpbGFibGUgdG8gdGhlIHN5c3RlbS4KIAogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi1zdGF0aWMgaW50IGdldF90dXBsZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqaGFuZGxlLCB0dXBsZV90ICp0dXBsZSwKLSAgICAgICAgICAgICAgICAgICAgIGNpc3BhcnNlX3QgKnBhcnNlKQotewotICAgIGludCBpID0gcGNtY2lhX2dldF90dXBsZV9kYXRhKGhhbmRsZSwgdHVwbGUpOwotICAgIGlmIChpICE9IENTX1NVQ0NFU1MpIHJldHVybiBpOwotICAgIHJldHVybiBwY21jaWFfcGFyc2VfdHVwbGUoaGFuZGxlLCB0dXBsZSwgcGFyc2UpOwotfQogCi1zdGF0aWMgaW50IGZpcnN0X3R1cGxlKHN0cnVjdCBwY21jaWFfZGV2aWNlICpoYW5kbGUsIHR1cGxlX3QgKnR1cGxlLAotICAgICAgICAgICAgICAgICAgICAgY2lzcGFyc2VfdCAqcGFyc2UpCitzdGF0aWMgaW50IHRlbGVzX2NzX2NvbmZpZ2NoZWNrKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldiwKKwkJCQljaXN0cGxfY2Z0YWJsZV9lbnRyeV90ICpjZiwKKwkJCQljaXN0cGxfY2Z0YWJsZV9lbnRyeV90ICpkZmx0LAorCQkJCXVuc2lnbmVkIGludCB2Y2MsCisJCQkJdm9pZCAqcHJpdl9kYXRhKQogewotICAgIGludCBpID0gcGNtY2lhX2dldF9maXJzdF90dXBsZShoYW5kbGUsIHR1cGxlKTsKLSAgICBpZiAoaSAhPSBDU19TVUNDRVNTKSByZXR1cm4gaTsKLSAgICByZXR1cm4gZ2V0X3R1cGxlKGhhbmRsZSwgdHVwbGUsIHBhcnNlKTsKLX0KKwlpbnQgajsKIAotc3RhdGljIGludCBuZXh0X3R1cGxlKHN0cnVjdCBwY21jaWFfZGV2aWNlICpoYW5kbGUsIHR1cGxlX3QgKnR1cGxlLAotICAgICAgICAgICAgICAgICAgICAgY2lzcGFyc2VfdCAqcGFyc2UpCi17Ci0gICAgaW50IGkgPSBwY21jaWFfZ2V0X25leHRfdHVwbGUoaGFuZGxlLCB0dXBsZSk7Ci0gICAgaWYgKGkgIT0gQ1NfU1VDQ0VTUykgcmV0dXJuIGk7Ci0gICAgcmV0dXJuIGdldF90dXBsZShoYW5kbGUsIHR1cGxlLCBwYXJzZSk7CisJaWYgKChjZi0+aW8ubndpbiA+IDApICYmIGNmLT5pby53aW5bMF0uYmFzZSkgeworCQlwcmludGsoS0VSTl9JTkZPICIodGVsZXNfY3M6IGxvb2tzIGxpa2UgdGhlIDk2IG1vZGVsKVxuIik7CisJCXBfZGV2LT5pby5CYXNlUG9ydDEgPSBjZi0+aW8ud2luWzBdLmJhc2U7CisJCWlmICghcGNtY2lhX3JlcXVlc3RfaW8ocF9kZXYsICZwX2Rldi0+aW8pKQorCQkJcmV0dXJuIDA7CisJfSBlbHNlIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiKHRlbGVzX2NzOiBsb29rcyBsaWtlIHRoZSA5NyBtb2RlbClcbiIpOworCQlmb3IgKGogPSAweDJmMDsgaiA+IDB4MTAwOyBqIC09IDB4MTApIHsKKwkJCXBfZGV2LT5pby5CYXNlUG9ydDEgPSBqOworCQkJaWYgKCFwY21jaWFfcmVxdWVzdF9pbyhwX2RldiwgJnBfZGV2LT5pbykpCisJCQkJcmV0dXJuIDA7CisJCX0KKwl9CisJcmV0dXJuIC1FTk9ERVY7CiB9CiAKIHN0YXRpYyBpbnQgdGVsZXNfY3NfY29uZmlnKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQogewotICAgIHR1cGxlX3QgdHVwbGU7Ci0gICAgY2lzcGFyc2VfdCBwYXJzZTsKICAgICBsb2NhbF9pbmZvX3QgKmRldjsKLSAgICBpbnQgaSwgaiwgbGFzdF9mbjsKLSAgICB1X3Nob3J0IGJ1ZlsxMjhdOwotICAgIGNpc3RwbF9jZnRhYmxlX2VudHJ5X3QgKmNmID0gJnBhcnNlLmNmdGFibGVfZW50cnk7CisgICAgaW50IGksIGxhc3RfZm47CiAgICAgSXNkbkNhcmRfdCBpY2FyZDsKIAogICAgIERFQlVHKDAsICJ0ZWxlc19jb25maWcoMHglcClcbiIsIGxpbmspOwogICAgIGRldiA9IGxpbmstPnByaXY7CiAKLSAgICB0dXBsZS5UdXBsZURhdGEgPSAoY2lzZGF0YV90ICopYnVmOwotICAgIHR1cGxlLlR1cGxlT2Zmc2V0ID0gMDsgdHVwbGUuVHVwbGVEYXRhTWF4ID0gMjU1OwotICAgIHR1cGxlLkF0dHJpYnV0ZXMgPSAwOwotICAgIHR1cGxlLkRlc2lyZWRUdXBsZSA9IENJU1RQTF9DRlRBQkxFX0VOVFJZOwotICAgIGkgPSBmaXJzdF90dXBsZShsaW5rLCAmdHVwbGUsICZwYXJzZSk7Ci0gICAgd2hpbGUgKGkgPT0gQ1NfU1VDQ0VTUykgewotICAgICAgICBpZiAoIChjZi0+aW8ubndpbiA+IDApICYmIGNmLT5pby53aW5bMF0uYmFzZSkgewotICAgICAgICAgICAgcHJpbnRrKEtFUk5fSU5GTyAiKHRlbGVzX2NzOiBsb29rcyBsaWtlIHRoZSA5NiBtb2RlbClcbiIpOwotICAgICAgICAgICAgbGluay0+Y29uZi5Db25maWdJbmRleCA9IGNmLT5pbmRleDsKLSAgICAgICAgICAgIGxpbmstPmlvLkJhc2VQb3J0MSA9IGNmLT5pby53aW5bMF0uYmFzZTsKLSAgICAgICAgICAgIGkgPSBwY21jaWFfcmVxdWVzdF9pbyhsaW5rLCAmbGluay0+aW8pOwotICAgICAgICAgICAgaWYgKGkgPT0gQ1NfU1VDQ0VTUykgYnJlYWs7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgcHJpbnRrKEtFUk5fSU5GTyAiKHRlbGVzX2NzOiBsb29rcyBsaWtlIHRoZSA5NyBtb2RlbClcbiIpOwotICAgICAgICAgIGxpbmstPmNvbmYuQ29uZmlnSW5kZXggPSBjZi0+aW5kZXg7Ci0gICAgICAgICAgZm9yIChpID0gMCwgaiA9IDB4MmYwOyBqID4gMHgxMDA7IGogLT0gMHgxMCkgewotICAgICAgICAgICAgbGluay0+aW8uQmFzZVBvcnQxID0gajsKLSAgICAgICAgICAgIGkgPSBwY21jaWFfcmVxdWVzdF9pbyhsaW5rLCAmbGluay0+aW8pOwotICAgICAgICAgICAgaWYgKGkgPT0gQ1NfU1VDQ0VTUykgYnJlYWs7Ci0gICAgICAgICAgfQotICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGkgPSBuZXh0X3R1cGxlKGxpbmssICZ0dXBsZSwgJnBhcnNlKTsKLSAgICB9Ci0KLSAgICBpZiAoaSAhPSBDU19TVUNDRVNTKSB7CisgICAgaSA9IHBjbWNpYV9sb29wX2NvbmZpZyhsaW5rLCB0ZWxlc19jc19jb25maWdjaGVjaywgTlVMTCk7CisgICAgaWYgKGkgIT0gMCkgewogCWxhc3RfZm4gPSBSZXF1ZXN0SU87CiAJZ290byBjc19mYWlsZWQ7CiAgICAgfQogCiAgICAgaSA9IHBjbWNpYV9yZXF1ZXN0X2lycShsaW5rLCAmbGluay0+aXJxKTsKLSAgICBpZiAoaSAhPSBDU19TVUNDRVNTKSB7CisgICAgaWYgKGkgIT0gMCkgewogICAgICAgICBsaW5rLT5pcnEuQXNzaWduZWRJUlEgPSAwOwogCWxhc3RfZm4gPSBSZXF1ZXN0SVJROwogICAgICAgICBnb3RvIGNzX2ZhaWxlZDsKICAgICB9CiAKICAgICBpID0gcGNtY2lhX3JlcXVlc3RfY29uZmlndXJhdGlvbihsaW5rLCAmbGluay0+Y29uZik7Ci0gICAgaWYgKGkgIT0gQ1NfU1VDQ0VTUykgeworICAgIGlmIChpICE9IDApIHsKICAgICAgIGxhc3RfZm4gPSBSZXF1ZXN0Q29uZmlndXJhdGlvbjsKICAgICAgIGdvdG8gY3NfZmFpbGVkOwogICAgIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9tSVNETi9kc3BfY214LmMgYi9kcml2ZXJzL2lzZG4vbUlTRE4vZHNwX2NteC5jCmluZGV4IGU5MmIxYmEuLmMyZjUxY2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9tSVNETi9kc3BfY214LmMKKysrIGIvZHJpdmVycy9pc2RuL21JU0ROL2RzcF9jbXguYwpAQCAtNDUyLDEwICs0NTIsMTAgQEAKIAkJCWlmIChmaW5kZHNwLT5mZWF0dXJlcy5wY21faWQgPT0gZHNwLT5mZWF0dXJlcy5wY21faWQpIHsKIAkJCQlpZiAoZmluZGRzcC0+cGNtX3Nsb3RfcnggPj0gMCAmJgogCQkJCSAgICBmaW5kZHNwLT5wY21fc2xvdF9yeCA8IHNpemVvZihmcmVlc2xvdHMpKQotCQkJCQlmcmVlc2xvdHNbZmluZGRzcC0+cGNtX3Nsb3RfdHhdID0gMDsKKwkJCQkJZnJlZXNsb3RzW2ZpbmRkc3AtPnBjbV9zbG90X3J4XSA9IDA7CiAJCQkJaWYgKGZpbmRkc3AtPnBjbV9zbG90X3R4ID49IDAgJiYKIAkJCQkgICAgZmluZGRzcC0+cGNtX3Nsb3RfdHggPCBzaXplb2YoZnJlZXNsb3RzKSkKLQkJCQkJZnJlZXNsb3RzW2ZpbmRkc3AtPnBjbV9zbG90X3J4XSA9IDA7CisJCQkJCWZyZWVzbG90c1tmaW5kZHNwLT5wY21fc2xvdF90eF0gPSAwOwogCQkJfQogCQl9CiAJCWkgPSAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL21JU0ROL3RpbWVyZGV2LmMgYi9kcml2ZXJzL2lzZG4vbUlTRE4vdGltZXJkZXYuYwppbmRleCBlNzQ2MjkyLi44NzVmYWJlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vbUlTRE4vdGltZXJkZXYuYworKysgYi9kcml2ZXJzL2lzZG4vbUlTRE4vdGltZXJkZXYuYwpAQCAtNjEsNyArNjEsNyBAQAogCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmRldi0+d2FpdCk7CiAJZmlsZXAtPnByaXZhdGVfZGF0YSA9IGRldjsKIAlfX21vZHVsZV9nZXQoVEhJU19NT0RVTEUpOwotCXJldHVybiAwOworCXJldHVybiBub25zZWVrYWJsZV9vcGVuKGlubywgZmlsZXApOwogfQogCiBzdGF0aWMgaW50CmRpZmYgLS1naXQgYS9kcml2ZXJzL2xlZHMvS2NvbmZpZyBiL2RyaXZlcnMvbGVkcy9LY29uZmlnCmluZGV4IGUzZTQwNDIuLmM3ZmYxZTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbGVkcy9LY29uZmlnCisrKyBiL2RyaXZlcnMvbGVkcy9LY29uZmlnCkBAIC0xNzksNyArMTc5LDcgQEAKIAogY29uZmlnIExFRFNfVFJJR0dFUl9JREVfRElTSwogCWJvb2wgIkxFRCBJREUgRGlzayBUcmlnZ2VyIgotCWRlcGVuZHMgb24gTEVEU19UUklHR0VSUyAmJiBCTEtfREVWX0lERURJU0sKKwlkZXBlbmRzIG9uIExFRFNfVFJJR0dFUlMgJiYgSURFX0dEX0FUQQogCWhlbHAKIAkgIFRoaXMgYWxsb3dzIExFRHMgdG8gYmUgY29udHJvbGxlZCBieSBJREUgZGlzayBhY3Rpdml0eS4KIAkgIElmIHVuc3VyZSwgc2F5IFkuCmRpZmYgLS1naXQgYS9kcml2ZXJzL2xlZHMvbGVkLWNsYXNzLmMgYi9kcml2ZXJzL2xlZHMvbGVkLWNsYXNzLmMKaW5kZXggNTU5YTQwOC4uZWU3NGVlNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9sZWRzL2xlZC1jbGFzcy5jCisrKyBiL2RyaXZlcnMvbGVkcy9sZWQtY2xhc3MuYwpAQCAtMTAzLDggKzEwMyw4IEBACiB7CiAJaW50IHJjOwogCi0JbGVkX2NkZXYtPmRldiA9IGRldmljZV9jcmVhdGVfZHJ2ZGF0YShsZWRzX2NsYXNzLCBwYXJlbnQsIDAsIGxlZF9jZGV2LAotCQkJCQkgICAgICAiJXMiLCBsZWRfY2Rldi0+bmFtZSk7CisJbGVkX2NkZXYtPmRldiA9IGRldmljZV9jcmVhdGUobGVkc19jbGFzcywgcGFyZW50LCAwLCBsZWRfY2RldiwKKwkJCQkgICAgICAiJXMiLCBsZWRfY2Rldi0+bmFtZSk7CiAJaWYgKElTX0VSUihsZWRfY2Rldi0+ZGV2KSkKIAkJcmV0dXJuIFBUUl9FUlIobGVkX2NkZXYtPmRldik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbGVkcy9sZWRzLWhwNnh4LmMgYi9kcml2ZXJzL2xlZHMvbGVkcy1ocDZ4eC5jCmluZGV4IDg0NGQ1OTcuLmU4ZmIxYmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbGVkcy9sZWRzLWhwNnh4LmMKKysrIGIvZHJpdmVycy9sZWRzL2xlZHMtaHA2eHguYwpAQCAtMTUsNyArMTUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2xlZHMuaD4KICNpbmNsdWRlIDxhc20vaGQ2NDQ2MS5oPgotI2luY2x1ZGUgPGFzbS9ocDZ4eC5oPgorI2luY2x1ZGUgPG1hY2gvaHA2eHguaD4KIAogc3RhdGljIHZvaWQgaHA2eHhsZWRfZ3JlZW5fc2V0KHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2LAogCQkJICAgICAgIGVudW0gbGVkX2JyaWdodG5lc3MgdmFsdWUpCmRpZmYgLS1naXQgYS9kcml2ZXJzL21hY2ludG9zaC9hZGIuYyBiL2RyaXZlcnMvbWFjaW50b3NoL2FkYi5jCmluZGV4IGNhZTUyNDguLjIzNzQxY2VjIDEwMDY0NAotLS0gYS9kcml2ZXJzL21hY2ludG9zaC9hZGIuYworKysgYi9kcml2ZXJzL21hY2ludG9zaC9hZGIuYwpAQCAtODYyLDggKzg2Miw3IEBACiAJYWRiX2Rldl9jbGFzcyA9IGNsYXNzX2NyZWF0ZShUSElTX01PRFVMRSwgImFkYiIpOwogCWlmIChJU19FUlIoYWRiX2Rldl9jbGFzcykpCiAJCXJldHVybjsKLQlkZXZpY2VfY3JlYXRlX2RydmRhdGEoYWRiX2Rldl9jbGFzcywgTlVMTCwgTUtERVYoQURCX01BSk9SLCAwKSwgTlVMTCwKLQkJCSAgICAgICJhZGIiKTsKKwlkZXZpY2VfY3JlYXRlKGFkYl9kZXZfY2xhc3MsIE5VTEwsIE1LREVWKEFEQl9NQUpPUiwgMCksIE5VTEwsICJhZGIiKTsKIAogCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmYWRiX3BmZGV2KTsKIAlwbGF0Zm9ybV9kcml2ZXJfcHJvYmUoJmFkYl9wZmRydiwgYWRiX2R1bW15X3Byb2JlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvS2NvbmZpZyBiL2RyaXZlcnMvbWQvS2NvbmZpZwppbmRleCAwN2Q5MmMxLi4yMjgxYjUwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL0tjb25maWcKKysrIGIvZHJpdmVycy9tZC9LY29uZmlnCkBAIC0zMCw2ICszMCwyMCBAQAogCiAJICBJZiB1bnN1cmUsIHNheSBOLgogCitjb25maWcgTURfQVVUT0RFVEVDVAorCWJvb2wgIkF1dG9kZXRlY3QgUkFJRCBhcnJheXMgZHVyaW5nIGtlcm5lbCBib290IgorCWRlcGVuZHMgb24gQkxLX0RFVl9NRD15CisJZGVmYXVsdCB5CisJLS0taGVscC0tLQorCSAgSWYgeW91IHNheSBZIGhlcmUsIHRoZW4gdGhlIGtlcm5lbCB3aWxsIHRyeSB0byBhdXRvZGV0ZWN0IHJhaWQKKwkgIGFycmF5cyBhcyBwYXJ0IG9mIGl0cyBib290IHByb2Nlc3MuIAorCisJICBJZiB5b3UgZG9uJ3QgdXNlIHJhaWQgYW5kIHNheSBZLCB0aGlzIGF1dG9kZXRlY3Rpb24gY2FuIGNhdXNlIAorCSAgYSBzZXZlcmFsLXNlY29uZCBkZWxheSBpbiB0aGUgYm9vdCB0aW1lIGR1ZSB0byB2YXJpb3VzCisJICBzeW5jaHJvbmlzYXRpb24gc3RlcHMgdGhhdCBhcmUgcGFydCBvZiB0aGlzIHN0ZXAuCisKKwkgIElmIHVuc3VyZSwgc2F5IFkuCisKIGNvbmZpZyBNRF9MSU5FQVIKIAl0cmlzdGF0ZSAiTGluZWFyIChhcHBlbmQpIG1vZGUiCiAJZGVwZW5kcyBvbiBCTEtfREVWX01ECmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL2RtLW1wYXRoLmMgYi9kcml2ZXJzL21kL2RtLW1wYXRoLmMKaW5kZXggMTAzMzA0Yy4uOWJmMzQ2MGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvZG0tbXBhdGguYworKysgYi9kcml2ZXJzL21kL2RtLW1wYXRoLmMKQEAgLTg0OSw3ICs4NDksNyBAQAogCWRtX2Jpb19yZWNvcmQoJm1waW8tPmRldGFpbHMsIGJpbyk7CiAKIAltYXBfY29udGV4dC0+cHRyID0gbXBpbzsKLQliaW8tPmJpX3J3IHw9ICgxIDw8IEJJT19SV19GQUlMRkFTVCk7CisJYmlvLT5iaV9ydyB8PSAoMSA8PCBCSU9fUldfRkFJTEZBU1RfVFJBTlNQT1JUKTsKIAlyID0gbWFwX2lvKG0sIGJpbywgbXBpbywgMCk7CiAJaWYgKHIgPCAwIHx8IHIgPT0gRE1fTUFQSU9fUkVRVUVVRSkKIAkJbWVtcG9vbF9mcmVlKG1waW8sIG0tPm1waW9fcG9vbCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL2ZhdWx0eS5jIGIvZHJpdmVycy9tZC9mYXVsdHkuYwppbmRleCAyNjg1NDdkLi5mMjZjMWY5IDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL2ZhdWx0eS5jCisrKyBiL2RyaXZlcnMvbWQvZmF1bHR5LmMKQEAgLTI4Nyw2ICsyODcsOCBAQAogCWludCBpOwogCiAJY29uZl90ICpjb25mID0ga21hbGxvYyhzaXplb2YoKmNvbmYpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWNvbmYpCisJCXJldHVybiAtRU5PTUVNOwogCiAJZm9yIChpPTA7IGk8TW9kZXM7IGkrKykgewogCQlhdG9taWNfc2V0KCZjb25mLT5jb3VudGVyc1tpXSwgMCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL2xpbmVhci5jIGIvZHJpdmVycy9tZC9saW5lYXIuYwppbmRleCBiOWNiZWU2OC4uMTkwMTQ3YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9saW5lYXIuYworKysgYi9kcml2ZXJzL21kL2xpbmVhci5jCkBAIC0xNiwxNiArMTYsOCBAQAogICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuICAKICovCiAKLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLQotI2luY2x1ZGUgPGxpbnV4L3JhaWQvbWQuaD4KLSNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvcmFpZC9saW5lYXIuaD4KIAotI2RlZmluZSBNQUpPUl9OUiBNRF9NQUpPUgotI2RlZmluZSBNRF9EUklWRVIKLSNkZWZpbmUgTURfUEVSU09OQUxJVFkKLQogLyoKICAqIGZpbmQgd2hpY2ggZGV2aWNlIGhvbGRzIGEgcGFydGljdWxhciBvZmZzZXQgCiAgKi8KQEAgLTMzLDE2ICsyNSwxNSBAQAogewogCWRldl9pbmZvX3QgKmhhc2g7CiAJbGluZWFyX2NvbmZfdCAqY29uZiA9IG1kZGV2X3RvX2NvbmYobWRkZXYpOwotCXNlY3Rvcl90IGJsb2NrID0gc2VjdG9yID4+IDE7CiAKIAkvKgogCSAqIHNlY3Rvcl9kaXYoYSxiKSByZXR1cm5zIHRoZSByZW1haW5lciBhbmQgc2V0cyBhIHRvIGEvYgogCSAqLwotCWJsb2NrID4+PSBjb25mLT5wcmVzaGlmdDsKLQkodm9pZClzZWN0b3JfZGl2KGJsb2NrLCBjb25mLT5oYXNoX3NwYWNpbmcpOwotCWhhc2ggPSBjb25mLT5oYXNoX3RhYmxlW2Jsb2NrXTsKKwlzZWN0b3IgPj49IGNvbmYtPnNlY3Rvcl9zaGlmdDsKKwkodm9pZClzZWN0b3JfZGl2KHNlY3RvciwgY29uZi0+c3BhY2luZyk7CisJaGFzaCA9IGNvbmYtPmhhc2hfdGFibGVbc2VjdG9yXTsKIAotCXdoaWxlICgoc2VjdG9yPj4xKSA+PSAoaGFzaC0+c2l6ZSArIGhhc2gtPm9mZnNldCkpCisJd2hpbGUgKHNlY3RvciA+PSBoYXNoLT5udW1fc2VjdG9ycyArIGhhc2gtPnN0YXJ0X3NlY3RvcikKIAkJaGFzaCsrOwogCXJldHVybiBoYXNoOwogfQpAQCAtNjUsNyArNTYsNyBAQAogCXNlY3Rvcl90IHNlY3RvciA9IGJ2bS0+Ymlfc2VjdG9yICsgZ2V0X3N0YXJ0X3NlY3QoYnZtLT5iaV9iZGV2KTsKIAogCWRldjAgPSB3aGljaF9kZXYobWRkZXYsIHNlY3Rvcik7Ci0JbWF4c2VjdG9ycyA9IChkZXYwLT5zaXplIDw8IDEpIC0gKHNlY3RvciAtIChkZXYwLT5vZmZzZXQ8PDEpKTsKKwltYXhzZWN0b3JzID0gZGV2MC0+bnVtX3NlY3RvcnMgLSAoc2VjdG9yIC0gZGV2MC0+c3RhcnRfc2VjdG9yKTsKIAogCWlmIChtYXhzZWN0b3JzIDwgYmlvX3NlY3RvcnMpCiAJCW1heHNlY3RvcnMgPSAwOwpAQCAtMTEyLDggKzEwMyw4IEBACiAJZGV2X2luZm9fdCAqKnRhYmxlOwogCW1ka19yZGV2X3QgKnJkZXY7CiAJaW50IGksIG5iX3pvbmUsIGNudDsKLQlzZWN0b3JfdCBtaW5fc3BhY2luZzsKLQlzZWN0b3JfdCBjdXJyX29mZnNldDsKKwlzZWN0b3JfdCBtaW5fc2VjdG9yczsKKwlzZWN0b3JfdCBjdXJyX3NlY3RvcjsKIAlzdHJ1Y3QgbGlzdF9oZWFkICp0bXA7CiAKIAljb25mID0ga3phbGxvYyAoc2l6ZW9mICgqY29uZikgKyByYWlkX2Rpc2tzKnNpemVvZihkZXZfaW5mb190KSwKQEAgLTE0NSw3ICsxMzYsNyBAQAogCQkgICAgbWRkZXYtPnF1ZXVlLT5tYXhfc2VjdG9ycyA+IChQQUdFX1NJWkU+PjkpKQogCQkJYmxrX3F1ZXVlX21heF9zZWN0b3JzKG1kZGV2LT5xdWV1ZSwgUEFHRV9TSVpFPj45KTsKIAotCQlkaXNrLT5zaXplID0gcmRldi0+c2l6ZTsKKwkJZGlzay0+bnVtX3NlY3RvcnMgPSByZGV2LT5zaXplICogMjsKIAkJY29uZi0+YXJyYXlfc2VjdG9ycyArPSByZGV2LT5zaXplICogMjsKIAogCQljbnQrKzsKQEAgLTE1NSwzNCArMTQ2LDM0IEBACiAJCWdvdG8gb3V0OwogCX0KIAotCW1pbl9zcGFjaW5nID0gY29uZi0+YXJyYXlfc2VjdG9ycyAvIDI7Ci0Jc2VjdG9yX2RpdihtaW5fc3BhY2luZywgUEFHRV9TSVpFL3NpemVvZihzdHJ1Y3QgZGV2X2luZm8gKikpOworCW1pbl9zZWN0b3JzID0gY29uZi0+YXJyYXlfc2VjdG9yczsKKwlzZWN0b3JfZGl2KG1pbl9zZWN0b3JzLCBQQUdFX1NJWkUvc2l6ZW9mKHN0cnVjdCBkZXZfaW5mbyAqKSk7CiAKLQkvKiBtaW5fc3BhY2luZyBpcyB0aGUgbWluaW11bSBzcGFjaW5nIHRoYXQgd2lsbCBmaXQgdGhlIGhhc2gKKwkvKiBtaW5fc2VjdG9ycyBpcyB0aGUgbWluaW11bSBzcGFjaW5nIHRoYXQgd2lsbCBmaXQgdGhlIGhhc2gKIAkgKiB0YWJsZSBpbiBvbmUgUEFHRS4gIFRoaXMgbWF5IGJlIG11Y2ggc21hbGxlciB0aGFuIG5lZWRlZC4KIAkgKiBXZSBmaW5kIHRoZSBzbWFsbGVzdCBub24tdGVybWluYWwgc2V0IG9mIGNvbnNlY3V0aXZlIGRldmljZXMKLQkgKiB0aGF0IGlzIGxhcmdlciB0aGFuIG1pbl9zcGFjaW5nIGFzIHVzZSB0aGUgc2l6ZSBvZiB0aGF0IGFzCisJICogdGhhdCBpcyBsYXJnZXIgdGhhbiBtaW5fc2VjdG9ycyBhbmQgdXNlIHRoZSBzaXplIG9mIHRoYXQgYXMKIAkgKiB0aGUgYWN0dWFsIHNwYWNpbmcKIAkgKi8KLQljb25mLT5oYXNoX3NwYWNpbmcgPSBjb25mLT5hcnJheV9zZWN0b3JzIC8gMjsKKwljb25mLT5zcGFjaW5nID0gY29uZi0+YXJyYXlfc2VjdG9yczsKIAlmb3IgKGk9MDsgaSA8IGNudC0xIDsgaSsrKSB7Ci0JCXNlY3Rvcl90IHN6ID0gMDsKKwkJc2VjdG9yX3QgdG1wID0gMDsKIAkJaW50IGo7Ci0JCWZvciAoaiA9IGk7IGogPCBjbnQgLSAxICYmIHN6IDwgbWluX3NwYWNpbmc7IGorKykKLQkJCXN6ICs9IGNvbmYtPmRpc2tzW2pdLnNpemU7Ci0JCWlmIChzeiA+PSBtaW5fc3BhY2luZyAmJiBzeiA8IGNvbmYtPmhhc2hfc3BhY2luZykKLQkJCWNvbmYtPmhhc2hfc3BhY2luZyA9IHN6OworCQlmb3IgKGogPSBpOyBqIDwgY250IC0gMSAmJiB0bXAgPCBtaW5fc2VjdG9yczsgaisrKQorCQkJdG1wICs9IGNvbmYtPmRpc2tzW2pdLm51bV9zZWN0b3JzOworCQlpZiAodG1wID49IG1pbl9zZWN0b3JzICYmIHRtcCA8IGNvbmYtPnNwYWNpbmcpCisJCQljb25mLT5zcGFjaW5nID0gdG1wOwogCX0KIAotCS8qIGhhc2hfc3BhY2luZyBtYXkgYmUgdG9vIGxhcmdlIGZvciBzZWN0b3JfZGl2IHRvIHdvcmsgd2l0aCwKKwkvKiBzcGFjaW5nIG1heSBiZSB0b28gbGFyZ2UgZm9yIHNlY3Rvcl9kaXYgdG8gd29yayB3aXRoLAogCSAqIHNvIHdlIG1pZ2h0IG5lZWQgdG8gcHJlLXNoaWZ0CiAJICovCi0JY29uZi0+cHJlc2hpZnQgPSAwOworCWNvbmYtPnNlY3Rvcl9zaGlmdCA9IDA7CiAJaWYgKHNpemVvZihzZWN0b3JfdCkgPiBzaXplb2YodTMyKSkgewotCQlzZWN0b3JfdCBzcGFjZSA9IGNvbmYtPmhhc2hfc3BhY2luZzsKKwkJc2VjdG9yX3Qgc3BhY2UgPSBjb25mLT5zcGFjaW5nOwogCQl3aGlsZSAoc3BhY2UgPiAoc2VjdG9yX3QpKH4odTMyKTApKSB7CiAJCQlzcGFjZSA+Pj0gMTsKLQkJCWNvbmYtPnByZXNoaWZ0Kys7CisJCQljb25mLT5zZWN0b3Jfc2hpZnQrKzsKIAkJfQogCX0KIAkvKgpAQCAtMTk0LDkgKzE4NSw5IEBACiAJCXVuc2lnbmVkIHJvdW5kOwogCQl1bnNpZ25lZCBsb25nIGJhc2U7CiAKLQkJc3ogPSBjb25mLT5hcnJheV9zZWN0b3JzID4+IChjb25mLT5wcmVzaGlmdCArIDEpOworCQlzeiA9IGNvbmYtPmFycmF5X3NlY3RvcnMgPj4gY29uZi0+c2VjdG9yX3NoaWZ0OwogCQlzeiArPSAxOyAvKiBmb3JjZSByb3VuZC11cCAqLwotCQliYXNlID0gY29uZi0+aGFzaF9zcGFjaW5nID4+IGNvbmYtPnByZXNoaWZ0OworCQliYXNlID0gY29uZi0+c3BhY2luZyA+PiBjb25mLT5zZWN0b3Jfc2hpZnQ7CiAJCXJvdW5kID0gc2VjdG9yX2RpdihzeiwgYmFzZSk7CiAJCW5iX3pvbmUgPSBzeiArIChyb3VuZCA/IDEgOiAwKTsKIAl9CkBAIC0yMTEsMzIgKzIwMiwzMSBAQAogCSAqIEhlcmUgd2UgZ2VuZXJhdGUgdGhlIGxpbmVhciBoYXNoIHRhYmxlCiAJICogRmlyc3QgY2FsY3VsYXRlIHRoZSBkZXZpY2Ugb2Zmc2V0cy4KIAkgKi8KLQljb25mLT5kaXNrc1swXS5vZmZzZXQgPSAwOworCWNvbmYtPmRpc2tzWzBdLnN0YXJ0X3NlY3RvciA9IDA7CiAJZm9yIChpID0gMTsgaSA8IHJhaWRfZGlza3M7IGkrKykKLQkJY29uZi0+ZGlza3NbaV0ub2Zmc2V0ID0KLQkJCWNvbmYtPmRpc2tzW2ktMV0ub2Zmc2V0ICsKLQkJCWNvbmYtPmRpc2tzW2ktMV0uc2l6ZTsKKwkJY29uZi0+ZGlza3NbaV0uc3RhcnRfc2VjdG9yID0KKwkJCWNvbmYtPmRpc2tzW2ktMV0uc3RhcnRfc2VjdG9yICsKKwkJCWNvbmYtPmRpc2tzW2ktMV0ubnVtX3NlY3RvcnM7CiAKIAl0YWJsZSA9IGNvbmYtPmhhc2hfdGFibGU7Ci0JY3Vycl9vZmZzZXQgPSAwOwogCWkgPSAwOwotCWZvciAoY3Vycl9vZmZzZXQgPSAwOwotCSAgICAgY3Vycl9vZmZzZXQgPCBjb25mLT5hcnJheV9zZWN0b3JzIC8gMjsKLQkgICAgIGN1cnJfb2Zmc2V0ICs9IGNvbmYtPmhhc2hfc3BhY2luZykgeworCWZvciAoY3Vycl9zZWN0b3IgPSAwOworCSAgICAgY3Vycl9zZWN0b3IgPCBjb25mLT5hcnJheV9zZWN0b3JzOworCSAgICAgY3Vycl9zZWN0b3IgKz0gY29uZi0+c3BhY2luZykgewogCiAJCXdoaWxlIChpIDwgcmFpZF9kaXNrcy0xICYmCi0JCSAgICAgICBjdXJyX29mZnNldCA+PSBjb25mLT5kaXNrc1tpKzFdLm9mZnNldCkKKwkJICAgICAgIGN1cnJfc2VjdG9yID49IGNvbmYtPmRpc2tzW2krMV0uc3RhcnRfc2VjdG9yKQogCQkJaSsrOwogCiAJCSp0YWJsZSArKyA9IGNvbmYtPmRpc2tzICsgaTsKIAl9CiAKLQlpZiAoY29uZi0+cHJlc2hpZnQpIHsKLQkJY29uZi0+aGFzaF9zcGFjaW5nID4+PSBjb25mLT5wcmVzaGlmdDsKLQkJLyogcm91bmQgaGFzaF9zcGFjaW5nIHVwIHNvIHRoYXQgd2hlbiB3ZSBkaXZpZGUgYnkgaXQsCisJaWYgKGNvbmYtPnNlY3Rvcl9zaGlmdCkgeworCQljb25mLT5zcGFjaW5nID4+PSBjb25mLT5zZWN0b3Jfc2hpZnQ7CisJCS8qIHJvdW5kIHNwYWNpbmcgdXAgc28gdGhhdCB3aGVuIHdlIGRpdmlkZSBieSBpdCwKIAkJICogd2UgZXJyIG9uIHRoZSBzaWRlIG9mICJ0b28tbG93Iiwgd2hpY2ggaXMgc2FmZXN0LgogCQkgKi8KLQkJY29uZi0+aGFzaF9zcGFjaW5nKys7CisJCWNvbmYtPnNwYWNpbmcrKzsKIAl9CiAKIAlCVUdfT04odGFibGUgLSBjb25mLT5oYXNoX3RhYmxlID4gbmJfem9uZSk7CkBAIC0zMTcsNyArMzA3LDYgQEAKIAljb25zdCBpbnQgcncgPSBiaW9fZGF0YV9kaXIoYmlvKTsKIAltZGRldl90ICptZGRldiA9IHEtPnF1ZXVlZGF0YTsKIAlkZXZfaW5mb190ICp0bXBfZGV2OwotCXNlY3Rvcl90IGJsb2NrOwogCWludCBjcHU7CiAKIAlpZiAodW5saWtlbHkoYmlvX2JhcnJpZXIoYmlvKSkpIHsKQEAgLTMzMiwyOSArMzIxLDMzIEBACiAJcGFydF9zdGF0X3VubG9jaygpOwogCiAJdG1wX2RldiA9IHdoaWNoX2RldihtZGRldiwgYmlvLT5iaV9zZWN0b3IpOwotCWJsb2NrID0gYmlvLT5iaV9zZWN0b3IgPj4gMTsKICAgICAKLQlpZiAodW5saWtlbHkoYmxvY2sgPj0gKHRtcF9kZXYtPnNpemUgKyB0bXBfZGV2LT5vZmZzZXQpCi0JCSAgICAgfHwgYmxvY2sgPCB0bXBfZGV2LT5vZmZzZXQpKSB7CisJaWYgKHVubGlrZWx5KGJpby0+Ymlfc2VjdG9yID49ICh0bXBfZGV2LT5udW1fc2VjdG9ycyArCisJCQkJCXRtcF9kZXYtPnN0YXJ0X3NlY3RvcikKKwkJICAgICB8fCAoYmlvLT5iaV9zZWN0b3IgPAorCQkJIHRtcF9kZXYtPnN0YXJ0X3NlY3RvcikpKSB7CiAJCWNoYXIgYltCREVWTkFNRV9TSVpFXTsKIAotCQlwcmludGsoImxpbmVhcl9tYWtlX3JlcXVlc3Q6IEJsb2NrICVsbHUgb3V0IG9mIGJvdW5kcyBvbiAiCi0JCQkiZGV2ICVzIHNpemUgJWxsdSBvZmZzZXQgJWxsdVxuIiwKLQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpYmxvY2ssCisJCXByaW50aygibGluZWFyX21ha2VfcmVxdWVzdDogU2VjdG9yICVsbHUgb3V0IG9mIGJvdW5kcyBvbiAiCisJCQkiZGV2ICVzOiAlbGx1IHNlY3RvcnMsIG9mZnNldCAlbGx1XG4iLAorCQkJKHVuc2lnbmVkIGxvbmcgbG9uZyliaW8tPmJpX3NlY3RvciwKIAkJCWJkZXZuYW1lKHRtcF9kZXYtPnJkZXYtPmJkZXYsIGIpLAotCQkJKHVuc2lnbmVkIGxvbmcgbG9uZyl0bXBfZGV2LT5zaXplLAotCQkgICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpdG1wX2Rldi0+b2Zmc2V0KTsKKwkJCSh1bnNpZ25lZCBsb25nIGxvbmcpdG1wX2Rldi0+bnVtX3NlY3RvcnMsCisJCQkodW5zaWduZWQgbG9uZyBsb25nKXRtcF9kZXYtPnN0YXJ0X3NlY3Rvcik7CiAJCWJpb19pb19lcnJvcihiaW8pOwogCQlyZXR1cm4gMDsKIAl9CiAJaWYgKHVubGlrZWx5KGJpby0+Ymlfc2VjdG9yICsgKGJpby0+Ymlfc2l6ZSA+PiA5KSA+Ci0JCSAgICAgKHRtcF9kZXYtPm9mZnNldCArIHRtcF9kZXYtPnNpemUpPDwxKSkgeworCQkgICAgIHRtcF9kZXYtPnN0YXJ0X3NlY3RvciArIHRtcF9kZXYtPm51bV9zZWN0b3JzKSkgewogCQkvKiBUaGlzIGJpbyBjcm9zc2VzIGEgZGV2aWNlIGJvdW5kYXJ5LCBzbyB3ZSBoYXZlIHRvCiAJCSAqIHNwbGl0IGl0LgogCQkgKi8KIAkJc3RydWN0IGJpb19wYWlyICpicDsKKwogCQlicCA9IGJpb19zcGxpdChiaW8sCi0JCQkgICAgICAgKCh0bXBfZGV2LT5vZmZzZXQgKyB0bXBfZGV2LT5zaXplKTw8MSkgLSBiaW8tPmJpX3NlY3Rvcik7CisJCQkgICAgICAgdG1wX2Rldi0+c3RhcnRfc2VjdG9yICsgdG1wX2Rldi0+bnVtX3NlY3RvcnMKKwkJCSAgICAgICAtIGJpby0+Ymlfc2VjdG9yKTsKKwogCQlpZiAobGluZWFyX21ha2VfcmVxdWVzdChxLCAmYnAtPmJpbzEpKQogCQkJZ2VuZXJpY19tYWtlX3JlcXVlc3QoJmJwLT5iaW8xKTsKIAkJaWYgKGxpbmVhcl9tYWtlX3JlcXVlc3QocSwgJmJwLT5iaW8yKSkKQEAgLTM2NCw3ICszNTcsOCBAQAogCX0KIAkJICAgIAogCWJpby0+YmlfYmRldiA9IHRtcF9kZXYtPnJkZXYtPmJkZXY7Ci0JYmlvLT5iaV9zZWN0b3IgPSBiaW8tPmJpX3NlY3RvciAtICh0bXBfZGV2LT5vZmZzZXQgPDwgMSkgKyB0bXBfZGV2LT5yZGV2LT5kYXRhX29mZnNldDsKKwliaW8tPmJpX3NlY3RvciA9IGJpby0+Ymlfc2VjdG9yIC0gdG1wX2Rldi0+c3RhcnRfc2VjdG9yCisJCSsgdG1wX2Rldi0+cmRldi0+ZGF0YV9vZmZzZXQ7CiAKIAlyZXR1cm4gMTsKIH0KQEAgLTM3MiwyOSArMzY2LDYgQEAKIHN0YXRpYyB2b2lkIGxpbmVhcl9zdGF0dXMgKHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBtZGRldl90ICptZGRldikKIHsKIAotI3VuZGVmIE1EX0RFQlVHCi0jaWZkZWYgTURfREVCVUcKLQlpbnQgajsKLQlsaW5lYXJfY29uZl90ICpjb25mID0gbWRkZXZfdG9fY29uZihtZGRldik7Ci0Jc2VjdG9yX3QgcyA9IDA7Ci0gIAotCXNlcV9wcmludGYoc2VxLCAiICAgICAgIik7Ci0JZm9yIChqID0gMDsgaiA8IG1kZGV2LT5yYWlkX2Rpc2tzOyBqKyspCi0JewotCQljaGFyIGJbQkRFVk5BTUVfU0laRV07Ci0JCXMgKz0gY29uZi0+c21hbGxlc3Rfc2l6ZTsKLQkJc2VxX3ByaW50ZihzZXEsICJbJXMiLAotCQkJICAgYmRldm5hbWUoY29uZi0+aGFzaF90YWJsZVtqXVswXS5yZGV2LT5iZGV2LGIpKTsKLQotCQl3aGlsZSAocyA+IGNvbmYtPmhhc2hfdGFibGVbal1bMF0ub2Zmc2V0ICsKLQkJICAgICAgICAgICBjb25mLT5oYXNoX3RhYmxlW2pdWzBdLnNpemUpCi0JCQlzZXFfcHJpbnRmKHNlcSwgIi8lc10gIiwKLQkJCQkgICBiZGV2bmFtZShjb25mLT5oYXNoX3RhYmxlW2pdWzFdLnJkZXYtPmJkZXYsYikpOwotCQllbHNlCi0JCQlzZXFfcHJpbnRmKHNlcSwgIl0gIik7Ci0JfQotCXNlcV9wcmludGYoc2VxLCAiXG4iKTsKLSNlbmRpZgogCXNlcV9wcmludGYoc2VxLCAiICVkayByb3VuZGluZyIsIG1kZGV2LT5jaHVua19zaXplLzEwMjQpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL21kLmMgYi9kcml2ZXJzL21kL21kLmMKaW5kZXggMGEzYTRiZC4uYWFhM2Q0NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9tZC5jCisrKyBiL2RyaXZlcnMvbWQvbWQuYwpAQCAtMzIsMzEgKzMyLDIxIEBACiAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KICovCiAKLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9rdGhyZWFkLmg+Ci0jaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgogI2luY2x1ZGUgPGxpbnV4L3JhaWQvbWQuaD4KICNpbmNsdWRlIDxsaW51eC9yYWlkL2JpdG1hcC5oPgogI2luY2x1ZGUgPGxpbnV4L3N5c2N0bC5oPgogI2luY2x1ZGUgPGxpbnV4L2J1ZmZlcl9oZWFkLmg+IC8qIGZvciBpbnZhbGlkYXRlX2JkZXYgKi8KICNpbmNsdWRlIDxsaW51eC9wb2xsLmg+Ci0jaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KICNpbmNsdWRlIDxsaW51eC9jdHlwZS5oPgotI2luY2x1ZGUgPGxpbnV4L2ZyZWV6ZXIuaD4KLQotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLQorI2luY2x1ZGUgPGxpbnV4L2hkcmVnLmg+CisjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgorI2luY2x1ZGUgPGxpbnV4L3JhbmRvbS5oPgorI2luY2x1ZGUgPGxpbnV4L3JlYm9vdC5oPgogI2luY2x1ZGUgPGxpbnV4L2ZpbGUuaD4KLQotI2lmZGVmIENPTkZJR19LTU9ECi0jaW5jbHVkZSA8bGludXgva21vZC5oPgotI2VuZGlmCi0KLSNpbmNsdWRlIDxhc20vdW5hbGlnbmVkLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KIAogI2RlZmluZSBNQUpPUl9OUiBNRF9NQUpPUgotI2RlZmluZSBNRF9EUklWRVIKIAogLyogNjMgcGFydGl0aW9ucyB3aXRoIHRoZSBhbHRlcm5hdGUgbWFqb3IgbnVtYmVyIChtZHApICovCiAjZGVmaW5lIE1kcE1pbm9yU2hpZnQgNgpAQCAtNjYsNyArNTYsNyBAQAogCiAKICNpZm5kZWYgTU9EVUxFCi1zdGF0aWMgdm9pZCBhdXRvc3RhcnRfYXJyYXlzIChpbnQgcGFydCk7CitzdGF0aWMgdm9pZCBhdXRvc3RhcnRfYXJyYXlzKGludCBwYXJ0KTsKICNlbmRpZgogCiBzdGF0aWMgTElTVF9IRUFEKHBlcnNfbGlzdCk7CkBAIC0yMTIsNyArMjAyLDcgQEAKIAkJKQogCiAKLXN0YXRpYyBpbnQgbWRfZmFpbF9yZXF1ZXN0IChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgc3RydWN0IGJpbyAqYmlvKQorc3RhdGljIGludCBtZF9mYWlsX3JlcXVlc3Qoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIHN0cnVjdCBiaW8gKmJpbykKIHsKIAliaW9faW9fZXJyb3IoYmlvKTsKIAlyZXR1cm4gMDsKQEAgLTIxMDYsOCArMjA5Niw2IEBACiAKIAlpZiAoc3RyaWN0X3N0cnRvdWxsKGJ1ZiwgMTAsICZzaXplKSA8IDApCiAJCXJldHVybiAtRUlOVkFMOwotCWlmIChzaXplIDwgbXlfbWRkZXYtPnNpemUpCi0JCXJldHVybiAtRUlOVkFMOwogCWlmIChteV9tZGRldi0+cGVycyAmJiByZGV2LT5yYWlkX2Rpc2sgPj0gMCkgewogCQlpZiAobXlfbWRkZXYtPnBlcnNpc3RlbnQpIHsKIAkJCXNpemUgPSBzdXBlcl90eXBlc1tteV9tZGRldi0+bWFqb3JfdmVyc2lvbl0uCkBAIC0yMTE4LDkgKzIxMDYsOSBAQAogCQkJc2l6ZSA9IChyZGV2LT5iZGV2LT5iZF9pbm9kZS0+aV9zaXplID4+IDEwKTsKIAkJCXNpemUgLT0gcmRldi0+ZGF0YV9vZmZzZXQvMjsKIAkJfQotCQlpZiAoc2l6ZSA8IG15X21kZGV2LT5zaXplKQotCQkJcmV0dXJuIC1FSU5WQUw7IC8qIGNvbXBvbmVudCBtdXN0IGZpdCBkZXZpY2UgKi8KIAl9CisJaWYgKHNpemUgPCBteV9tZGRldi0+c2l6ZSkKKwkJcmV0dXJuIC1FSU5WQUw7IC8qIGNvbXBvbmVudCBtdXN0IGZpdCBkZXZpY2UgKi8KIAogCXJkZXYtPnNpemUgPSBzaXplOwogCWlmIChzaXplID4gb2xkc2l6ZSAmJiBteV9tZGRldi0+ZXh0ZXJuYWwpIHsKQEAgLTI0MDYsMTIgKzIzOTQsMTEgQEAKIAlpbnQgaTsKIAl1bnNpZ25lZCBsb25nIG1zZWM7CiAJY2hhciBidWZbMzBdOwotCWNoYXIgKmU7CisKIAkvKiByZW1vdmUgYSBwZXJpb2QsIGFuZCBjb3VudCBkaWdpdHMgYWZ0ZXIgaXQgKi8KIAlpZiAobGVuID49IHNpemVvZihidWYpKQogCQlyZXR1cm4gLUVJTlZBTDsKLQlzdHJsY3B5KGJ1ZiwgY2J1ZiwgbGVuKTsKLQlidWZbbGVuXSA9IDA7CisJc3RybGNweShidWYsIGNidWYsIHNpemVvZihidWYpKTsKIAlmb3IgKGk9MDsgaTxsZW47IGkrKykgewogCQlpZiAoZG90KSB7CiAJCQlpZiAoaXNkaWdpdChidWZbaV0pKSB7CkBAIC0yNDI0LDggKzI0MTEsNyBAQAogCQkJYnVmW2ldID0gMDsKIAkJfQogCX0KLQltc2VjID0gc2ltcGxlX3N0cnRvdWwoYnVmLCAmZSwgMTApOwotCWlmIChlID09IGJ1ZiB8fCAoKmUgJiYgKmUgIT0gJ1xuJykpCisJaWYgKHN0cmljdF9zdHJ0b3VsKGJ1ZiwgMTAsICZtc2VjKSA8IDApCiAJCXJldHVybiAtRUlOVkFMOwogCW1zZWMgPSAobXNlYyAqIDEwMDApIC8gc2NhbGU7CiAJaWYgKG1zZWMgPT0gMCkKQEAgLTI3MjcsOSArMjcxMyw5IEBACiAJCWJyZWFrOwogCWNhc2UgcmVhZF9hdXRvOgogCQlpZiAobWRkZXYtPnBlcnMpIHsKLQkJCWlmIChtZGRldi0+cm8gIT0gMSkKKwkJCWlmIChtZGRldi0+cm8gPT0gMCkKIAkJCQllcnIgPSBkb19tZF9zdG9wKG1kZGV2LCAxLCAwKTsKLQkJCWVsc2UKKwkJCWVsc2UgaWYgKG1kZGV2LT5ybyA9PSAxKQogCQkJCWVyciA9IHJlc3RhcnRfYXJyYXkobWRkZXYpOwogCQkJaWYgKGVyciA9PSAwKSB7CiAJCQkJbWRkZXYtPnJvID0gMjsKQEAgLTI5NDUsNyArMjkzMSwxMyBAQAogewogCWludCBtYWpvciwgbWlub3I7CiAJY2hhciAqZTsKLQlpZiAoIWxpc3RfZW1wdHkoJm1kZGV2LT5kaXNrcykpCisJLyogQ2hhbmdpbmcgdGhlIGRldGFpbHMgb2YgJ2V4dGVybmFsJyBtZXRhZGF0YSBpcworCSAqIGFsd2F5cyBwZXJtaXR0ZWQuICBPdGhlcndpc2UgdGhlcmUgbXVzdCBiZQorCSAqIG5vIGRldmljZXMgYXR0YWNoZWQgdG8gdGhlIGFycmF5LgorCSAqLworCWlmIChtZGRldi0+ZXh0ZXJuYWwgJiYgc3RybmNtcChidWYsICJleHRlcm5hbDoiLCA5KSA9PSAwKQorCQk7CisJZWxzZSBpZiAoIWxpc3RfZW1wdHkoJm1kZGV2LT5kaXNrcykpCiAJCXJldHVybiAtRUJVU1k7CiAKIAlpZiAoY21kX21hdGNoKGJ1ZiwgIm5vbmUiKSkgewpAQCAtMzUyNywxNyArMzUxOSwxMiBAQAogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KIAkJLyoKLQkJICogY2h1bmstc2l6ZSBoYXMgdG8gYmUgYSBwb3dlciBvZiAyIGFuZCBtdWx0aXBsZXMgb2YgUEFHRV9TSVpFCisJCSAqIGNodW5rLXNpemUgaGFzIHRvIGJlIGEgcG93ZXIgb2YgMgogCQkgKi8KIAkJaWYgKCAoMSA8PCBmZnoofmNodW5rX3NpemUpKSAhPSBjaHVua19zaXplKSB7CiAJCQlwcmludGsoS0VSTl9FUlIgImNodW5rX3NpemUgb2YgJWQgbm90IHZhbGlkXG4iLCBjaHVua19zaXplKTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9Ci0JCWlmIChjaHVua19zaXplIDwgUEFHRV9TSVpFKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgInRvbyBzbWFsbCBjaHVua19zaXplOiAlZCA8ICVsZFxuIiwKLQkJCQljaHVua19zaXplLCBQQUdFX1NJWkUpOwotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KIAogCQkvKiBkZXZpY2VzIG11c3QgaGF2ZSBtaW5pbXVtIHNpemUgb2Ygb25lIGNodW5rICovCiAJCXJkZXZfZm9yX2VhY2gocmRldiwgdG1wLCBtZGRldikgewpAQCAtMzU1NSwxMiArMzU0MiwxMCBAQAogCQl9CiAJfQogCi0jaWZkZWYgQ09ORklHX0tNT0QKIAlpZiAobWRkZXYtPmxldmVsICE9IExFVkVMX05PTkUpCiAJCXJlcXVlc3RfbW9kdWxlKCJtZC1sZXZlbC0lZCIsIG1kZGV2LT5sZXZlbCk7CiAJZWxzZSBpZiAobWRkZXYtPmNsZXZlbFswXSkKIAkJcmVxdWVzdF9tb2R1bGUoIm1kLSVzIiwgbWRkZXYtPmNsZXZlbCk7Ci0jZW5kaWYKIAogCS8qCiAJICogRHJvcCBhbGwgY29udGFpbmVyIGRldmljZSBidWZmZXJzLCBmcm9tIG5vdyBvbgpAQCAtMzk3MSwxMCArMzk1NiwxMCBAQAogCX0KIAlwcmludGsoIlxuIik7CiAKLQllcnIgPSBkb19tZF9ydW4gKG1kZGV2KTsKKwllcnIgPSBkb19tZF9ydW4obWRkZXYpOwogCWlmIChlcnIpIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAibWQ6IGRvX21kX3J1bigpIHJldHVybmVkICVkXG4iLCBlcnIpOwotCQlkb19tZF9zdG9wIChtZGRldiwgMCwgMCk7CisJCWRvX21kX3N0b3AobWRkZXYsIDAsIDApOwogCX0KIH0KIApAQCAtNDMzMyw3ICs0MzE4LDcgQEAKIAogCWlmICghKGluZm8tPnN0YXRlICYgKDE8PE1EX0RJU0tfRkFVTFRZKSkpIHsKIAkJaW50IGVycjsKLQkJcmRldiA9IG1kX2ltcG9ydF9kZXZpY2UgKGRldiwgLTEsIDApOworCQlyZGV2ID0gbWRfaW1wb3J0X2RldmljZShkZXYsIC0xLCAwKTsKIAkJaWYgKElTX0VSUihyZGV2KSkgewogCQkJcHJpbnRrKEtFUk5fV0FSTklORyAKIAkJCQkibWQ6IGVycm9yLCBtZF9pbXBvcnRfZGV2aWNlKCkgcmV0dXJuZWQgJWxkXG4iLApAQCAtNDQxNSw3ICs0NDAwLDcgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JcmRldiA9IG1kX2ltcG9ydF9kZXZpY2UgKGRldiwgLTEsIDApOworCXJkZXYgPSBtZF9pbXBvcnRfZGV2aWNlKGRldiwgLTEsIDApOwogCWlmIChJU19FUlIocmRldikpIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAKIAkJCSJtZDogZXJyb3IsIG1kX2ltcG9ydF9kZXZpY2UoKSByZXR1cm5lZCAlbGRcbiIsCkBAIC00OTM0LDExICs0OTE5LDExIEBACiAJCQlnb3RvIGRvbmVfdW5sb2NrOwogCiAJCWNhc2UgU1RPUF9BUlJBWToKLQkJCWVyciA9IGRvX21kX3N0b3AgKG1kZGV2LCAwLCAxKTsKKwkJCWVyciA9IGRvX21kX3N0b3AobWRkZXYsIDAsIDEpOwogCQkJZ290byBkb25lX3VubG9jazsKIAogCQljYXNlIFNUT1BfQVJSQVlfUk86Ci0JCQllcnIgPSBkb19tZF9zdG9wIChtZGRldiwgMSwgMSk7CisJCQllcnIgPSBkb19tZF9zdG9wKG1kZGV2LCAxLCAxKTsKIAkJCWdvdG8gZG9uZV91bmxvY2s7CiAKIAl9CkBAIC00OTg3LDcgKzQ5NzIsNyBAQAogCQkJZ290byBkb25lX3VubG9jazsKIAogCQljYXNlIFJVTl9BUlJBWToKLQkJCWVyciA9IGRvX21kX3J1biAobWRkZXYpOworCQkJZXJyID0gZG9fbWRfcnVuKG1kZGV2KTsKIAkJCWdvdG8gZG9uZV91bmxvY2s7CiAKIAkJY2FzZSBTRVRfQklUTUFQX0ZJTEU6CkBAIC01NDI1LDExICs1NDEwLDExIEBACiAJCQlzZXFfcHJpbnRmKHNlcSwgIiBzdXBlciBub24tcGVyc2lzdGVudCIpOwogCiAJCWlmIChtZGRldi0+cGVycykgewotCQkJbWRkZXYtPnBlcnMtPnN0YXR1cyAoc2VxLCBtZGRldik7CisJCQltZGRldi0+cGVycy0+c3RhdHVzKHNlcSwgbWRkZXYpOwogCSAJCXNlcV9wcmludGYoc2VxLCAiXG4gICAgICAiKTsKIAkJCWlmIChtZGRldi0+cGVycy0+c3luY19yZXF1ZXN0KSB7CiAJCQkJaWYgKG1kZGV2LT5jdXJyX3Jlc3luYyA+IDIpIHsKLQkJCQkJc3RhdHVzX3Jlc3luYyAoc2VxLCBtZGRldik7CisJCQkJCXN0YXR1c19yZXN5bmMoc2VxLCBtZGRldik7CiAJCQkJCXNlcV9wcmludGYoc2VxLCAiXG4gICAgICAiKTsKIAkJCQl9IGVsc2UgaWYgKG1kZGV2LT5jdXJyX3Jlc3luYyA9PSAxIHx8IG1kZGV2LT5jdXJyX3Jlc3luYyA9PSAyKQogCQkJCQlzZXFfcHJpbnRmKHNlcSwgIlx0cmVzeW5jPURFTEFZRURcbiAgICAgICIpOwpAQCAtNjI2MCw3ICs2MjQ1LDcgQEAKIAkJCQkgKiBhcHBlYXJzIHRvIHN0aWxsIGJlIGluIHVzZS4gIEhlbmNlCiAJCQkJICogdGhlICcxMDAnLgogCQkJCSAqLwotCQkJCWRvX21kX3N0b3AgKG1kZGV2LCAxLCAxMDApOworCQkJCWRvX21kX3N0b3AobWRkZXYsIDEsIDEwMCk7CiAJCQkJbWRkZXZfdW5sb2NrKG1kZGV2KTsKIAkJCX0KIAkJLyoKQEAgLTYzMDQsNyArNjI4OSw3IEBACiAJcmFpZF90YWJsZV9oZWFkZXIgPSByZWdpc3Rlcl9zeXNjdGxfdGFibGUocmFpZF9yb290X3RhYmxlKTsKIAogCW1kX2dlbmluaXQoKTsKLQlyZXR1cm4gKDApOworCXJldHVybiAwOwogfQogCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvbXVsdGlwYXRoLmMgYi9kcml2ZXJzL21kL211bHRpcGF0aC5jCmluZGV4IDhiYjg3OTQuLmQ0YWM0N2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvbXVsdGlwYXRoLmMKKysrIGIvZHJpdmVycy9tZC9tdWx0aXBhdGguYwpAQCAtMTksMTYgKzE5LDcgQEAKICAqIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0jaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxsaW51eC9yYWlkL211bHRpcGF0aC5oPgotI2luY2x1ZGUgPGxpbnV4L2J1ZmZlcl9oZWFkLmg+Ci0jaW5jbHVkZSA8YXNtL2F0b21pYy5oPgotCi0jZGVmaW5lIE1BSk9SX05SIE1EX01BSk9SCi0jZGVmaW5lIE1EX0RSSVZFUgotI2RlZmluZSBNRF9QRVJTT05BTElUWQogCiAjZGVmaW5lIE1BWF9XT1JLX1BFUl9ESVNLIDEyOAogCkBAIC0xNzYsNyArMTY3LDcgQEAKIAltcF9iaC0+YmlvID0gKmJpbzsKIAltcF9iaC0+YmlvLmJpX3NlY3RvciArPSBtdWx0aXBhdGgtPnJkZXYtPmRhdGFfb2Zmc2V0OwogCW1wX2JoLT5iaW8uYmlfYmRldiA9IG11bHRpcGF0aC0+cmRldi0+YmRldjsKLQltcF9iaC0+YmlvLmJpX3J3IHw9ICgxIDw8IEJJT19SV19GQUlMRkFTVCk7CisJbXBfYmgtPmJpby5iaV9ydyB8PSAoMSA8PCBCSU9fUldfRkFJTEZBU1RfVFJBTlNQT1JUKTsKIAltcF9iaC0+YmlvLmJpX2VuZF9pbyA9IG11bHRpcGF0aF9lbmRfcmVxdWVzdDsKIAltcF9iaC0+YmlvLmJpX3ByaXZhdGUgPSBtcF9iaDsKIAlnZW5lcmljX21ha2VfcmVxdWVzdCgmbXBfYmgtPmJpbyk7CkBAIC00MDIsNyArMzkzLDcgQEAKIAkJCSpiaW8gPSAqKG1wX2JoLT5tYXN0ZXJfYmlvKTsKIAkJCWJpby0+Ymlfc2VjdG9yICs9IGNvbmYtPm11bHRpcGF0aHNbbXBfYmgtPnBhdGhdLnJkZXYtPmRhdGFfb2Zmc2V0OwogCQkJYmlvLT5iaV9iZGV2ID0gY29uZi0+bXVsdGlwYXRoc1ttcF9iaC0+cGF0aF0ucmRldi0+YmRldjsKLQkJCWJpby0+YmlfcncgfD0gKDEgPDwgQklPX1JXX0ZBSUxGQVNUKTsKKwkJCWJpby0+YmlfcncgfD0gKDEgPDwgQklPX1JXX0ZBSUxGQVNUX1RSQU5TUE9SVCk7CiAJCQliaW8tPmJpX2VuZF9pbyA9IG11bHRpcGF0aF9lbmRfcmVxdWVzdDsKIAkJCWJpby0+YmlfcHJpdmF0ZSA9IG1wX2JoOwogCQkJZ2VuZXJpY19tYWtlX3JlcXVlc3QoYmlvKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvcmFpZDAuYyBiL2RyaXZlcnMvbWQvcmFpZDAuYwppbmRleCA1MzUwOGE4Li44YWM2NDg4IDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL3JhaWQwLmMKKysrIGIvZHJpdmVycy9tZC9yYWlkMC5jCkBAIC0xOCwxMyArMTgsOCBAQAogICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuICAKICovCiAKLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9yYWlkL3JhaWQwLmg+CiAKLSNkZWZpbmUgTUFKT1JfTlIgTURfTUFKT1IKLSNkZWZpbmUgTURfRFJJVkVSCi0jZGVmaW5lIE1EX1BFUlNPTkFMSVRZCi0KIHN0YXRpYyB2b2lkIHJhaWQwX3VucGx1ZyhzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSkKIHsKIAltZGRldl90ICptZGRldiA9IHEtPnF1ZXVlZGF0YTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvcmFpZDEuYyBiL2RyaXZlcnMvbWQvcmFpZDEuYwppbmRleCBiOTc2NDQyLi45Yzc4OGUyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL3JhaWQxLmMKKysrIGIvZHJpdmVycy9tZC9yYWlkMS5jCkBAIC0zMiw2ICszMiw3IEBACiAgKi8KIAogI2luY2x1ZGUgImRtLWJpby1saXN0LmgiCisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9yYWlkL3JhaWQxLmg+CiAjaW5jbHVkZSA8bGludXgvcmFpZC9iaXRtYXAuaD4KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9yYWlkMTAuYyBiL2RyaXZlcnMvbWQvcmFpZDEwLmMKaW5kZXggOGJkYzliZi4uZGE1MTI5YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9yYWlkMTAuYworKysgYi9kcml2ZXJzL21kL3JhaWQxMC5jCkBAIC0xOSw2ICsxOSw3IEBACiAgKi8KIAogI2luY2x1ZGUgImRtLWJpby1saXN0LmgiCisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9yYWlkL3JhaWQxMC5oPgogI2luY2x1ZGUgPGxpbnV4L3JhaWQvYml0bWFwLmg+CiAKQEAgLTIwMjgsOCArMjAyOSw5IEBACiAJaW50IG5jLCBmYywgZm87CiAJc2VjdG9yX3Qgc3RyaWRlLCBzaXplOwogCi0JaWYgKG1kZGV2LT5jaHVua19zaXplID09IDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJtZC9yYWlkMTA6IG5vbi16ZXJvIGNodW5rIHNpemUgcmVxdWlyZWQuXG4iKTsKKwlpZiAobWRkZXYtPmNodW5rX3NpemUgPCBQQUdFX1NJWkUpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJtZC9yYWlkMTA6IGNodW5rIHNpemUgbXVzdCBiZSAiCisJCSAgICAgICAiYXQgbGVhc3QgUEFHRV9TSVpFKCVsZCkuXG4iLCBQQUdFX1NJWkUpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvcmFpZDUuYyBiL2RyaXZlcnMvbWQvcmFpZDUuYwppbmRleCBhZTE2Nzk0Li5hMzZhNzQzIDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL3JhaWQ1LmMKKysrIGIvZHJpdmVycy9tZC9yYWlkNS5jCkBAIC00MywxMiArNDMsNyBAQAogICogbWlzcyBhbnkgYml0cy4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvc2xhYi5oPgotI2luY2x1ZGUgPGxpbnV4L2hpZ2htZW0uaD4KLSNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KICNpbmNsdWRlIDxsaW51eC9rdGhyZWFkLmg+Ci0jaW5jbHVkZSA8YXNtL2F0b21pYy5oPgogI2luY2x1ZGUgInJhaWQ2LmgiCiAKICNpbmNsdWRlIDxsaW51eC9yYWlkL2JpdG1hcC5oPgpAQCAtMjc1LDcgKzI3MCw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIHJhaWQ1X2J1aWxkX2Jsb2NrIChzdHJ1Y3Qgc3RyaXBlX2hlYWQgKnNoLCBpbnQgaSk7CitzdGF0aWMgdm9pZCByYWlkNV9idWlsZF9ibG9jayhzdHJ1Y3Qgc3RyaXBlX2hlYWQgKnNoLCBpbnQgaSk7CiAKIHN0YXRpYyB2b2lkIGluaXRfc3RyaXBlKHN0cnVjdCBzdHJpcGVfaGVhZCAqc2gsIHNlY3Rvcl90IHNlY3RvciwgaW50IHBkX2lkeCwgaW50IGRpc2tzKQogewpAQCAtMTE1MSw3ICsxMTQ2LDcgQEAKIAlyZWxlYXNlX3N0cmlwZShzaCk7CiB9CiAKLXN0YXRpYyB2b2lkIHJhaWQ1X2VuZF93cml0ZV9yZXF1ZXN0IChzdHJ1Y3QgYmlvICpiaSwgaW50IGVycm9yKQorc3RhdGljIHZvaWQgcmFpZDVfZW5kX3dyaXRlX3JlcXVlc3Qoc3RydWN0IGJpbyAqYmksIGludCBlcnJvcikKIHsKICAJc3RydWN0IHN0cmlwZV9oZWFkICpzaCA9IGJpLT5iaV9wcml2YXRlOwogCXJhaWQ1X2NvbmZfdCAqY29uZiA9IHNoLT5yYWlkX2NvbmY7CkBAIC0xMTgzLDcgKzExNzgsNyBAQAogCiBzdGF0aWMgc2VjdG9yX3QgY29tcHV0ZV9ibG9ja25yKHN0cnVjdCBzdHJpcGVfaGVhZCAqc2gsIGludCBpKTsKIAkKLXN0YXRpYyB2b2lkIHJhaWQ1X2J1aWxkX2Jsb2NrIChzdHJ1Y3Qgc3RyaXBlX2hlYWQgKnNoLCBpbnQgaSkKK3N0YXRpYyB2b2lkIHJhaWQ1X2J1aWxkX2Jsb2NrKHN0cnVjdCBzdHJpcGVfaGVhZCAqc2gsIGludCBpKQogewogCXN0cnVjdCByNWRldiAqZGV2ID0gJnNoLT5kZXZbaV07CiAKQEAgLTEyMjEsMTAgKzEyMTYsMTAgQEAKIAkJCXNldF9iaXQoTURfUkVDT1ZFUllfSU5UUiwgJm1kZGV2LT5yZWNvdmVyeSk7CiAJCX0KIAkJc2V0X2JpdChGYXVsdHksICZyZGV2LT5mbGFncyk7Ci0JCXByaW50ayAoS0VSTl9BTEVSVAotCQkJInJhaWQ1OiBEaXNrIGZhaWx1cmUgb24gJXMsIGRpc2FibGluZyBkZXZpY2UuXG4iCi0JCQkicmFpZDU6IE9wZXJhdGlvbiBjb250aW51aW5nIG9uICVkIGRldmljZXMuXG4iLAotCQkJYmRldm5hbWUocmRldi0+YmRldixiKSwgY29uZi0+cmFpZF9kaXNrcyAtIG1kZGV2LT5kZWdyYWRlZCk7CisJCXByaW50ayhLRVJOX0FMRVJUCisJCSAgICAgICAicmFpZDU6IERpc2sgZmFpbHVyZSBvbiAlcywgZGlzYWJsaW5nIGRldmljZS5cbiIKKwkJICAgICAgICJyYWlkNTogT3BlcmF0aW9uIGNvbnRpbnVpbmcgb24gJWQgZGV2aWNlcy5cbiIsCisJCSAgICAgICBiZGV2bmFtZShyZGV2LT5iZGV2LGIpLCBjb25mLT5yYWlkX2Rpc2tzIC0gbWRkZXYtPmRlZ3JhZGVkKTsKIAl9CiB9CiAKQEAgLTEzMjAsOCArMTMxNSw4IEBACiAJCQkqZGRfaWR4ID0gKCpwZF9pZHggKyAyICsgKmRkX2lkeCkgJSByYWlkX2Rpc2tzOwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6Ci0JCQlwcmludGsgKEtFUk5fQ1JJVCAicmFpZDY6IHVuc3VwcG9ydGVkIGFsZ29yaXRobSAlZFxuIiwKLQkJCQljb25mLT5hbGdvcml0aG0pOworCQkJcHJpbnRrKEtFUk5fQ1JJVCAicmFpZDY6IHVuc3VwcG9ydGVkIGFsZ29yaXRobSAlZFxuIiwKKwkJCSAgICAgICBjb25mLT5hbGdvcml0aG0pOwogCQl9CiAJCWJyZWFrOwogCX0KQEAgLTEzOTYsOCArMTM5MSw4IEBACiAJCQl9CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKLQkJCXByaW50ayAoS0VSTl9DUklUICJyYWlkNjogdW5zdXBwb3J0ZWQgYWxnb3JpdGhtICVkXG4iLAotCQkJCWNvbmYtPmFsZ29yaXRobSk7CisJCQlwcmludGsoS0VSTl9DUklUICJyYWlkNjogdW5zdXBwb3J0ZWQgYWxnb3JpdGhtICVkXG4iLAorCQkJICAgICAgIGNvbmYtPmFsZ29yaXRobSk7CiAJCX0KIAkJYnJlYWs7CiAJfQpAQCAtMTQwNSw3ICsxNDAwLDcgQEAKIAljaHVua19udW1iZXIgPSBzdHJpcGUgKiBkYXRhX2Rpc2tzICsgaTsKIAlyX3NlY3RvciA9IChzZWN0b3JfdCljaHVua19udW1iZXIgKiBzZWN0b3JzX3Blcl9jaHVuayArIGNodW5rX29mZnNldDsKIAotCWNoZWNrID0gcmFpZDVfY29tcHV0ZV9zZWN0b3IgKHJfc2VjdG9yLCByYWlkX2Rpc2tzLCBkYXRhX2Rpc2tzLCAmZHVtbXkxLCAmZHVtbXkyLCBjb25mKTsKKwljaGVjayA9IHJhaWQ1X2NvbXB1dGVfc2VjdG9yKHJfc2VjdG9yLCByYWlkX2Rpc2tzLCBkYXRhX2Rpc2tzLCAmZHVtbXkxLCAmZHVtbXkyLCBjb25mKTsKIAlpZiAoY2hlY2sgIT0gc2gtPnNlY3RvciB8fCBkdW1teTEgIT0gZGRfaWR4IHx8IGR1bW15MiAhPSBzaC0+cGRfaWR4KSB7CiAJCXByaW50ayhLRVJOX0VSUiAiY29tcHV0ZV9ibG9ja25yOiBtYXAgbm90IGNvcnJlY3RcbiIpOwogCQlyZXR1cm4gMDsKQEAgLTQwMTIsNiArNDAwNywxMyBAQAogCQlyZXR1cm4gLUVJTzsKIAl9CiAKKwlpZiAobWRkZXYtPmNodW5rX3NpemUgPCBQQUdFX1NJWkUpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJtZC9yYWlkNTogY2h1bmtfc2l6ZSBtdXN0IGJlIGF0IGxlYXN0ICIKKwkJICAgICAgICJQQUdFX1NJWkUgYnV0ICVkIDwgJWxkXG4iLAorCQkgICAgICAgbWRkZXYtPmNodW5rX3NpemUsIFBBR0VfU0laRSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwogCWlmIChtZGRldi0+cmVzaGFwZV9wb3NpdGlvbiAhPSBNYXhTZWN0b3IpIHsKIAkJLyogQ2hlY2sgdGhhdCB3ZSBjYW4gY29udGludWUgdGhlIHJlc2hhcGUuCiAJCSAqIEN1cnJlbnRseSBvbmx5IGRpc2tzIGNhbiBjaGFuZ2UsIGl0IG11c3QKQEAgLTQyODksNyArNDI5MSw3IEBACiB9CiAKICNpZmRlZiBERUJVRwotc3RhdGljIHZvaWQgcHJpbnRfc2ggKHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBzdHJ1Y3Qgc3RyaXBlX2hlYWQgKnNoKQorc3RhdGljIHZvaWQgcHJpbnRfc2goc3RydWN0IHNlcV9maWxlICpzZXEsIHN0cnVjdCBzdHJpcGVfaGVhZCAqc2gpCiB7CiAJaW50IGk7CiAKQEAgLTQzMDUsNyArNDMwNyw3IEBACiAJc2VxX3ByaW50ZihzZXEsICJcbiIpOwogfQogCi1zdGF0aWMgdm9pZCBwcmludGFsbCAoc3RydWN0IHNlcV9maWxlICpzZXEsIHJhaWQ1X2NvbmZfdCAqY29uZikKK3N0YXRpYyB2b2lkIHByaW50YWxsKHN0cnVjdCBzZXFfZmlsZSAqc2VxLCByYWlkNV9jb25mX3QgKmNvbmYpCiB7CiAJc3RydWN0IHN0cmlwZV9oZWFkICpzaDsKIAlzdHJ1Y3QgaGxpc3Rfbm9kZSAqaG47CkBAIC00MzIzLDcgKzQzMjUsNyBAQAogfQogI2VuZGlmCiAKLXN0YXRpYyB2b2lkIHN0YXR1cyAoc3RydWN0IHNlcV9maWxlICpzZXEsIG1kZGV2X3QgKm1kZGV2KQorc3RhdGljIHZvaWQgc3RhdHVzKHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBtZGRldl90ICptZGRldikKIHsKIAlyYWlkNV9jb25mX3QgKmNvbmYgPSAocmFpZDVfY29uZl90ICopIG1kZGV2LT5wcml2YXRlOwogCWludCBpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9yYWlkNi5oIGIvZHJpdmVycy9tZC9yYWlkNi5oCmluZGV4IDMxY2JlZTcuLjk4ZGNkZTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvcmFpZDYuaAorKysgYi9kcml2ZXJzL21kL3JhaWQ2LmgKQEAgLTE4LDE1ICsxOCw2IEBACiAvKiBTZXQgdG8gMSB0byB1c2Uga2VybmVsLXdpZGUgZW1wdHlfemVyb19wYWdlICovCiAjZGVmaW5lIFJBSUQ2X1VTRV9FTVBUWV9aRVJPX1BBR0UgMAogCi0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvc3RkZGVmLmg+Ci0jaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+Ci0jaW5jbHVkZSA8bGludXgvbWVtcG9vbC5oPgotI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KLSNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CiAjaW5jbHVkZSA8bGludXgvcmFpZC9tZC5oPgogI2luY2x1ZGUgPGxpbnV4L3JhaWQvcmFpZDUuaD4KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9jb21tb24vaXIta2V5bWFwcy5jIGIvZHJpdmVycy9tZWRpYS9jb21tb24vaXIta2V5bWFwcy5jCmluZGV4IDhmYTkxZjguLjQ5NTJhZWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvY29tbW9uL2lyLWtleW1hcHMuYworKysgYi9kcml2ZXJzL21lZGlhL2NvbW1vbi9pci1rZXltYXBzLmMKQEAgLTEwMyw2ICsxMDMsNTYgQEAKIAogRVhQT1JUX1NZTUJPTF9HUEwoaXJfY29kZXNfYXZlcm1lZGlhX2R2YnQpOwogCisvKiBNYXVybyBDYXJ2YWxobyBDaGVoYWIgPG1jaGVoYWJAaW5mcmFkZWFkLm9yZz4gKi8KK0lSX0tFWVRBQl9UWVBFIGlyX2NvZGVzX2F2ZXJtZWRpYV9tMTM1YVtJUl9LRVlUQUJfU0laRV0gPSB7CisJWzB4MDBdID0gS0VZX1BPV0VSMiwKKwlbMHgyZV0gPSBLRVlfRE9ULAkJLyogJy4nICovCisJWzB4MDFdID0gS0VZX01PREUsCQkvKiBUVi9GTSAqLworCisJWzB4MDVdID0gS0VZXzEsCisJWzB4MDZdID0gS0VZXzIsCisJWzB4MDddID0gS0VZXzMsCisJWzB4MDldID0gS0VZXzQsCisJWzB4MGFdID0gS0VZXzUsCisJWzB4MGJdID0gS0VZXzYsCisJWzB4MGRdID0gS0VZXzcsCisJWzB4MGVdID0gS0VZXzgsCisJWzB4MGZdID0gS0VZXzksCisJWzB4MTFdID0gS0VZXzAsCisKKwlbMHgxM10gPSBLRVlfUklHSFQsCQkvKiAtPiAqLworCVsweDEyXSA9IEtFWV9MRUZULAkJLyogPC0gKi8KKworCVsweDE3XSA9IEtFWV9TTEVFUCwJCS8qIENhcHR1cmFyIEltYWdlbSAqLworCVsweDEwXSA9IEtFWV9TSFVGRkxFLAkJLyogQW1vc3RyYSAqLworCisJLyogRklYTUU6IFRoZSBrZXlzIGJlbGxvdyBhcmVuJ3Qgb2sgKi8KKworCVsweDQzXSA9IEtFWV9DSEFOTkVMVVAsCisJWzB4NDJdID0gS0VZX0NIQU5ORUxET1dOLAorCVsweDFmXSA9IEtFWV9WT0xVTUVVUCwKKwlbMHgxZV0gPSBLRVlfVk9MVU1FRE9XTiwKKwlbMHgwY10gPSBLRVlfRU5URVIsCisKKwlbMHgxNF0gPSBLRVlfTVVURSwKKwlbMHgwOF0gPSBLRVlfQVVESU8sCisKKwlbMHgwM10gPSBLRVlfVEVYVCwKKwlbMHgwNF0gPSBLRVlfRVBHLAorCVsweDJiXSA9IEtFWV9UVjIsCQkvKiBUVjIgKi8KKworCVsweDFkXSA9IEtFWV9SRUQsCisJWzB4MWNdID0gS0VZX1lFTExPVywKKwlbMHg0MV0gPSBLRVlfR1JFRU4sCisJWzB4NDBdID0gS0VZX0JMVUUsCisKKwlbMHgxYV0gPSBLRVlfUExBWVBBVVNFLAorCVsweDE5XSA9IEtFWV9SRUNPUkQsCisJWzB4MThdID0gS0VZX1BMQVksCisJWzB4MWJdID0gS0VZX1NUT1AsCit9OworRVhQT1JUX1NZTUJPTF9HUEwoaXJfY29kZXNfYXZlcm1lZGlhX20xMzVhKTsKKwogLyogQXR0aWxhIEtvbmRvcm9zIDxhdHRpbGEua29uZG9yb3NAY2hlbGxvLmh1PiAqLwogSVJfS0VZVEFCX1RZUEUgaXJfY29kZXNfYXBhY192aWV3Y29tcFtJUl9LRVlUQUJfU0laRV0gPSB7CiAKQEAgLTQ2Nyw3ICs1MTcsOCBAQAogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKLS8qIE1TSSBUVkBueXdoZXJlIHJlbW90ZSAqLworLyogTVNJIFRWQG55d2hlcmUgTUFTVEVSIHJlbW90ZSAqLworCiBJUl9LRVlUQUJfVFlQRSBpcl9jb2Rlc19tc2lfdHZhbnl3aGVyZVtJUl9LRVlUQUJfU0laRV0gPSB7CiAJLyogS2V5cyAwIHRvIDkgKi8KIAlbIDB4MDAgXSA9IEtFWV8wLApAQCAtNTAxLDYgKzU1Miw5NSBAQAogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKKy8qCisgIEtleWNvZGVzIGZvciByZW1vdGUgb24gdGhlIE1TSSBUVkBueXdoZXJlIFBsdXMuIFRoZSBjb250cm9sbGVyIElDIG9uIHRoZSBjYXJkCisgIGlzIG1hcmtlZCAiS1MwMDMiLiBUaGUgY29udHJvbGxlciBpcyBJMkMgYXQgYWRkcmVzcyAweDMwLCBidXQgZG9lcyBub3Qgc2VlbQorICB0byByZXNwb25kIHRvIHByb2JlcyB1bnRpbCBhIHJlYWQgaXMgcGVyZm9ybWVkIGZyb20gYSB2YWxpZCBkZXZpY2UuCisgIEkgZG9uJ3Qga25vdyB3aHkuLi4KKworICBOb3RlOiBUaGlzIHJlbW90ZSBtYXkgYmUgb2Ygc2ltaWxhciBvciBpZGVudGljYWwgZGVzaWduIHRvIHRoZQorICBQaXhlbHZpZXcgcmVtb3RlICg/KS4gIFRoZSByYXcgY29kZXMgYW5kIGR1cGxpY2F0ZSBidXR0b24gY29kZXMKKyAgYXBwZWFyIHRvIGJlIHRoZSBzYW1lLgorCisgIEhlbnJ5IFdvbmcgPGhlbnJ5QHN0dWZmZWRjb3cubmV0PgorICBTb21lIGNoYW5nZXMgdG8gZm9ybWF0dGluZyBhbmQga2V5Y29kZXMgYnkgTWFyayBTY2h1bHR6IDxuOXhtakB5YWhvby5jb20+CisKKyovCisKK0lSX0tFWVRBQl9UWVBFIGlyX2NvZGVzX21zaV90dmFueXdoZXJlX3BsdXNbSVJfS0VZVEFCX1NJWkVdID0geworCisvKiAgLS0tLSBSZW1vdGUgQnV0dG9uIExheW91dCAtLS0tCisKKyAgICBQT1dFUiAgIFNPVVJDRSAgU0NBTiAgICBNVVRFCisgICAgVFYvRk0gICAxICAgICAgIDIgICAgICAgMworICAgIHw+ICAgICAgNCAgICAgICA1ICAgICAgIDYKKyAgICA8fCAgICAgIDcgICAgICAgOCAgICAgICA5CisgICAgXl5VUCAgICAwICAgICAgICsgICAgICAgUkVDQUxMCisgICAgdnZETiAgICBSRUNPUkQgIFNUT1AgICAgUExBWQorCisJTUlOSU1JWkUgICAgICAgICAgWk9PTQorCisJCSAgQ0grCisgICAgICBWT0wtICAgICAgICAgICAgICAgICAgIFZPTCsKKwkJICBDSC0KKworCVNOQVBTSE9UICAgICAgICAgICBNVFMKKworICAgICA8PCAgICAgIEZVTkMgICAgPj4gICAgIFJFU0VUCisqLworCisJWzB4MDFdID0gS0VZX0tQMSwgICAgICAgICAgICAgLyogMSAqLworCVsweDBiXSA9IEtFWV9LUDIsICAgICAgICAgICAgIC8qIDIgKi8KKwlbMHgxYl0gPSBLRVlfS1AzLCAgICAgICAgICAgICAvKiAzICovCisJWzB4MDVdID0gS0VZX0tQNCwgICAgICAgICAgICAgLyogNCAqLworCVsweDA5XSA9IEtFWV9LUDUsICAgICAgICAgICAgIC8qIDUgKi8KKwlbMHgxNV0gPSBLRVlfS1A2LCAgICAgICAgICAgICAvKiA2ICovCisJWzB4MDZdID0gS0VZX0tQNywgICAgICAgICAgICAgLyogNyAqLworCVsweDBhXSA9IEtFWV9LUDgsICAgICAgICAgICAgIC8qIDggKi8KKwlbMHgxMl0gPSBLRVlfS1A5LCAgICAgICAgICAgICAvKiA5ICovCisJWzB4MDJdID0gS0VZX0tQMCwgICAgICAgICAgICAgLyogMCAqLworCVsweDEwXSA9IEtFWV9LUFBMVVMsICAgICAgICAgIC8qICsgKi8KKwlbMHgxM10gPSBLRVlfQUdBSU4sICAgICAgICAgICAvKiBSZWNhbGwgKi8KKworCVsweDFlXSA9IEtFWV9QT1dFUiwgICAgICAgICAgIC8qIFBvd2VyICovCisJWzB4MDddID0gS0VZX1RVTkVSLCAgICAgICAgICAgLyogU291cmNlICovCisJWzB4MWNdID0gS0VZX1NFQVJDSCwgICAgICAgICAgLyogU2NhbiAqLworCVsweDE4XSA9IEtFWV9NVVRFLCAgICAgICAgICAgIC8qIE11dGUgKi8KKworCVsweDAzXSA9IEtFWV9SQURJTywgICAgICAgICAgIC8qIFRWL0ZNICovCisJLyogVGhlIG5leHQgZm91ciBrZXlzIGFyZSBkdXBsaWNhdGVzIHRoYXQgYXBwZWFyIHRvIHNlbmQgdGhlCisJICAgc2FtZSBJUiBjb2RlIGFzIENoKywgQ2gtLCA+PiwgYW5kIDw8IC4gIFRoZSByYXcgY29kZSBhc3NpZ25lZAorCSAgIHRvIHRoZW0gaXMgdGhlIGFjdHVhbCBjb2RlICsgMHgyMCAtIHRoZXkgd2lsbCBuZXZlciBiZQorCSAgIGRldGVjdGVkIGFzIHN1Y2ggdW5sZXNzIHNvbWUgd2F5IGlzIGRpc2NvdmVyZWQgdG8gZGlzdGluZ3Vpc2gKKwkgICB0aGVzZSBidXR0b25zIGZyb20gdGhvc2UgdGhhdCBoYXZlIHRoZSBzYW1lIGNvZGUuICovCisJWzB4M2ZdID0gS0VZX1JJR0hULCAgICAgICAgICAgLyogfD4gYW5kIENoKyAqLworCVsweDM3XSA9IEtFWV9MRUZULCAgICAgICAgICAgIC8qIDx8IGFuZCBDaC0gKi8KKwlbMHgyY10gPSBLRVlfVVAsICAgICAgICAgICAgICAvKiBeXlVwIGFuZCA+PiAqLworCVsweDI0XSA9IEtFWV9ET1dOLCAgICAgICAgICAgIC8qIHZ2RG4gYW5kIDw8ICovCisKKwlbMHgwMF0gPSBLRVlfUkVDT1JELCAgICAgICAgICAvKiBSZWNvcmQgKi8KKwlbMHgwOF0gPSBLRVlfU1RPUCwgICAgICAgICAgICAvKiBTdG9wICovCisJWzB4MTFdID0gS0VZX1BMQVksICAgICAgICAgICAgLyogUGxheSAqLworCisJWzB4MGZdID0gS0VZX0NMT1NFLCAgICAgICAgICAgLyogTWluaW1pemUgKi8KKwlbMHgxOV0gPSBLRVlfWk9PTSwgICAgICAgICAgICAvKiBab29tICovCisJWzB4MWFdID0gS0VZX1NIVUZGTEUsICAgICAgICAgLyogU25hcHNob3QgKi8KKwlbMHgwZF0gPSBLRVlfTEFOR1VBR0UsICAgICAgICAvKiBNVFMgKi8KKworCVsweDE0XSA9IEtFWV9WT0xVTUVET1dOLCAgICAgIC8qIFZvbC0gKi8KKwlbMHgxNl0gPSBLRVlfVk9MVU1FVVAsICAgICAgICAvKiBWb2wrICovCisJWzB4MTddID0gS0VZX0NIQU5ORUxET1dOLCAgICAgLyogQ2gtICovCisJWzB4MWZdID0gS0VZX0NIQU5ORUxVUCwgICAgICAgLyogQ2grICovCisKKwlbMHgwNF0gPSBLRVlfUkVXSU5ELCAgICAgICAgICAvKiA8PCAqLworCVsweDBlXSA9IEtFWV9NRU5VLCAgICAgICAgICAgIC8qIEZ1bmN0aW9uICovCisJWzB4MGNdID0gS0VZX0ZBU1RGT1JXQVJELCAgICAgLyogPj4gKi8KKwlbMHgxZF0gPSBLRVlfUkVTVEFSVCwgICAgICAgICAvKiBSZXNldCAqLworfTsKK0VYUE9SVF9TWU1CT0xfR1BMKGlyX2NvZGVzX21zaV90dmFueXdoZXJlX3BsdXMpOworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKIC8qIENpbmVyZ3kgMTQwMCBEVkItVCAqLwogSVJfS0VZVEFCX1RZUEUgaXJfY29kZXNfY2luZXJneV8xNDAwW0lSX0tFWVRBQl9TSVpFXSA9IHsKIAlbIDB4MDEgXSA9IEtFWV9QT1dFUiwKQEAgLTE3OTIsMTIgKzE5MzIsNjEgQEAKIAlbIDB4NDEgXSA9IEtFWV9HUkVFTiwJCS8qIEFQMiAqLwogCVsgMHg0NyBdID0gS0VZX1lFTExPVywJCS8qIEFQMyAqLwogCVsgMHg1NyBdID0gS0VZX0JMVUUsCQkvKiBBUDQgKi8KLQotCiB9OwotCiBFWFBPUlRfU1lNQk9MX0dQTChpcl9jb2Rlc19lbmNvcmVfZW5sdHYpOwogCisvKiBFbmNvcmUgRU5MVFYyLUZNICAtIHNpbHZlciBwbGFzdGljIC0gIldhbmQgTWVkaWEiIHdyaXR0ZW4gYXQgdGhlIGJvdHRvbgorICAgIE1hdXJvIENhcnZhbGhvIENoZWhhYiA8bWNoZWhhYkBpbmZyYWRlYWQub3JnPiAqLworSVJfS0VZVEFCX1RZUEUgaXJfY29kZXNfZW5jb3JlX2VubHR2MltJUl9LRVlUQUJfU0laRV0gPSB7CisJWzB4NGNdID0gS0VZX1BPV0VSMiwKKwlbMHg0YV0gPSBLRVlfVFVORVIsCisJWzB4NDBdID0gS0VZXzEsCisJWzB4NjBdID0gS0VZXzIsCisJWzB4NTBdID0gS0VZXzMsCisJWzB4NzBdID0gS0VZXzQsCisJWzB4NDhdID0gS0VZXzUsCisJWzB4NjhdID0gS0VZXzYsCisJWzB4NThdID0gS0VZXzcsCisJWzB4NzhdID0gS0VZXzgsCisJWzB4NDRdID0gS0VZXzksCisJWzB4NTRdID0gS0VZXzAsCisKKwlbMHg2NF0gPSBLRVlfTEFTVCwJCS8qICsxMDAgKi8KKwlbMHg0ZV0gPSBLRVlfQUdBSU4sCQkvKiBSZWNhbGwgKi8KKworCVsweDZjXSA9IEtFWV9TV0lUQ0hWSURFT01PREUsCS8qIFZpZGVvIFNvdXJjZSAqLworCVsweDVlXSA9IEtFWV9NRU5VLAorCVsweDU2XSA9IEtFWV9TQ1JFRU4sCisJWzB4N2FdID0gS0VZX1NFVFVQLAorCisJWzB4NDZdID0gS0VZX01VVEUsCisJWzB4NWNdID0gS0VZX01PREUsCQkvKiBTdGVyZW8gKi8KKwlbMHg3NF0gPSBLRVlfSU5GTywKKwlbMHg3Y10gPSBLRVlfQ0xFQVIsCisKKwlbMHg1NV0gPSBLRVlfVVAsCisJWzB4NDldID0gS0VZX0RPV04sCisJWzB4N2VdID0gS0VZX0xFRlQsCisJWzB4NTldID0gS0VZX1JJR0hULAorCVsweDZhXSA9IEtFWV9FTlRFUiwKKworCVsweDQyXSA9IEtFWV9WT0xVTUVVUCwKKwlbMHg2Ml0gPSBLRVlfVk9MVU1FRE9XTiwKKwlbMHg1Ml0gPSBLRVlfQ0hBTk5FTFVQLAorCVsweDcyXSA9IEtFWV9DSEFOTkVMRE9XTiwKKworCVsweDQxXSA9IEtFWV9SRUNPUkQsCisJWzB4NTFdID0gS0VZX1NIVUZGTEUsCS8qIFNuYXBzaG90ICovCisJWzB4NzVdID0gS0VZX1RJTUUsCS8qIFRpbWVzaGlmdCAqLworCVsweDcxXSA9IEtFWV9UVjIsCS8qIFBJUCAqLworCisJWzB4NDVdID0gS0VZX1JFV0lORCwKKwlbMHg2Zl0gPSBLRVlfUEFVU0UsCisJWzB4N2RdID0gS0VZX0ZPUldBUkQsCisJWzB4NzldID0gS0VZX1NUT1AsCit9OworRVhQT1JUX1NZTUJPTF9HUEwoaXJfY29kZXNfZW5jb3JlX2VubHR2Mik7CisKIC8qIGZvciB0aGUgVGVjaG5vdHJlbmQgMTUwMCBidW5kbGVkIHJlbW90ZXMgKGdyZXkgYW5kIGJsYWNrKTogKi8KIElSX0tFWVRBQl9UWVBFIGlyX2NvZGVzX3R0XzE1MDBbSVJfS0VZVEFCX1NJWkVdID0gewogCVsgMHgwMSBdID0gS0VZX1BPV0VSLApAQCAtMjIzOSwzICsyNDI4LDg2IEBACiAJWzB4MmFdID0gS0VZX01FTlUsCiB9OwogRVhQT1JUX1NZTUJPTF9HUEwoaXJfY29kZXNfYXZlcm1lZGlhX2ExNmQpOworCisvKiBFbmNvcmUgRU5MVFYtRk0gdjUuMworICAgTWF1cm8gQ2FydmFsaG8gQ2hlaGFiIDxtY2hlaGFiQGluZnJhZGVhZC5vcmc+CisgKi8KK0lSX0tFWVRBQl9UWVBFIGlyX2NvZGVzX2VuY29yZV9lbmx0dl9mbTUzW0lSX0tFWVRBQl9TSVpFXSA9IHsKKwlbMHgxMF0gPSBLRVlfUE9XRVIyLAorCVsweDA2XSA9IEtFWV9NVVRFLAorCisJWzB4MDldID0gS0VZXzEsCisJWzB4MWRdID0gS0VZXzIsCisJWzB4MWZdID0gS0VZXzMsCisJWzB4MTldID0gS0VZXzQsCisJWzB4MWJdID0gS0VZXzUsCisJWzB4MTFdID0gS0VZXzYsCisJWzB4MTddID0gS0VZXzcsCisJWzB4MTJdID0gS0VZXzgsCisJWzB4MTZdID0gS0VZXzksCisJWzB4NDhdID0gS0VZXzAsCisKKwlbMHgwNF0gPSBLRVlfTElTVCwJCS8qIC0vLS0gKi8KKwlbMHg0MF0gPSBLRVlfTEFTVCwJCS8qIHJlY2FsbCAqLworCisJWzB4MDJdID0gS0VZX01PREUsCQkvKiBUVi9BViAqLworCVsweDA1XSA9IEtFWV9TSFVGRkxFLAkJLyogU05BUFNIT1QgKi8KKworCVsweDRjXSA9IEtFWV9DSEFOTkVMVVAsCQkvKiBVUCAqLworCVsweDAwXSA9IEtFWV9DSEFOTkVMRE9XTiwJLyogRE9XTiAqLworCVsweDBkXSA9IEtFWV9WT0xVTUVVUCwJCS8qIFJJR0hUICovCisJWzB4MTVdID0gS0VZX1ZPTFVNRURPV04sCS8qIExFRlQgKi8KKwlbMHg0OV0gPSBLRVlfRU5URVIsCQkvKiBPSyAqLworCisJWzB4NTRdID0gS0VZX1JFQ09SRCwKKwlbMHg0ZF0gPSBLRVlfUExBWSwJCS8qIHBhdXNlICovCisKKwlbMHgxZV0gPSBLRVlfVVAsCQkvKiB2aWRlbyBzZXR0aW5nICovCisJWzB4MGVdID0gS0VZX1JJR0hULAkJLyogPC0gKi8KKwlbMHgxYV0gPSBLRVlfTEVGVCwJCS8qIC0+ICovCisKKwlbMHgwYV0gPSBLRVlfRE9XTiwJCS8qIHZpZGVvIGRlZmF1bHQgKi8KKwlbMHgwY10gPSBLRVlfWk9PTSwJCS8qIGhpZGUgcGFubmVsICovCisJWzB4NDddID0gS0VZX1NMRUVQLAkJLyogc2h1dGRvd24gKi8KK307CitFWFBPUlRfU1lNQk9MX0dQTChpcl9jb2Rlc19lbmNvcmVfZW5sdHZfZm01Myk7CisKKy8qIFpvZ2lzIFJlYWwgQXVkaW8gMjIwIC0gMzIga2V5cyBJUiAqLworSVJfS0VZVEFCX1RZUEUgaXJfY29kZXNfcmVhbF9hdWRpb18yMjBfMzJfa2V5c1tJUl9LRVlUQUJfU0laRV0gPSB7CisJWzB4MWNdID0gS0VZX1JBRElPLAorCVsweDEyXSA9IEtFWV9QT1dFUjIsCisKKwlbMHgwMV0gPSBLRVlfMSwKKwlbMHgwMl0gPSBLRVlfMiwKKwlbMHgwM10gPSBLRVlfMywKKwlbMHgwNF0gPSBLRVlfNCwKKwlbMHgwNV0gPSBLRVlfNSwKKwlbMHgwNl0gPSBLRVlfNiwKKwlbMHgwN10gPSBLRVlfNywKKwlbMHgwOF0gPSBLRVlfOCwKKwlbMHgwOV0gPSBLRVlfOSwKKwlbMHgwMF0gPSBLRVlfMCwKKworCVsweDBjXSA9IEtFWV9WT0xVTUVVUCwKKwlbMHgxOF0gPSBLRVlfVk9MVU1FRE9XTiwKKwlbMHgwYl0gPSBLRVlfQ0hBTk5FTFVQLAorCVsweDE1XSA9IEtFWV9DSEFOTkVMRE9XTiwKKwlbMHgxNl0gPSBLRVlfRU5URVIsCisKKwlbMHgxMV0gPSBLRVlfTElTVCwJCS8qIFNvdXJjZSAqLworCVsweDBkXSA9IEtFWV9BVURJTywJCS8qIHN0ZXJlbyAqLworCisJWzB4MGZdID0gS0VZX1BSRVZJT1VTLAkJLyogUHJldiAqLworCVsweDFiXSA9IEtFWV9QQVVTRSwJCS8qIFRpbWVzaGlmdCAqLworCVsweDFhXSA9IEtFWV9ORVhULAkJLyogTmV4dCAqLworCisJWzB4MGVdID0gS0VZX1NUT1AsCisJWzB4MWZdID0gS0VZX1BMQVksCisJWzB4MWVdID0gS0VZX1BMQVlQQVVTRSwJCS8qIFBhdXNlICovCisKKwlbMHgxZF0gPSBLRVlfUkVDT1JELAorCVsweDEzXSA9IEtFWV9NVVRFLAorCVsweDE5XSA9IEtFWV9TSFVGRkxFLAkJLyogU25hcHNob3QgKi8KKworfTsKK0VYUE9SVF9TWU1CT0xfR1BMKGlyX2NvZGVzX3JlYWxfYXVkaW9fMjIwXzMyX2tleXMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9jb21tb24vc2FhNzE0Nl9jb3JlLmMgYi9kcml2ZXJzL21lZGlhL2NvbW1vbi9zYWE3MTQ2X2NvcmUuYwppbmRleCBkMDE5NjVlLi5kNTk5ZDM2IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2NvbW1vbi9zYWE3MTQ2X2NvcmUuYworKysgYi9kcml2ZXJzL21lZGlhL2NvbW1vbi9zYWE3MTQ2X2NvcmUuYwpAQCAtMjM0LDcgKzIzNCw3IEBACiBpbnQgc2FhNzE0Nl9wZ3RhYmxlX2FsbG9jKHN0cnVjdCBwY2lfZGV2ICpwY2ksIHN0cnVjdCBzYWE3MTQ2X3BndGFibGUgKnB0KQogewogCV9fbGUzMiAgICAgICAqY3B1OwotCWRtYV9hZGRyX3QgICBkbWFfYWRkcjsKKwlkbWFfYWRkcl90ICAgZG1hX2FkZHIgPSAwOwogCiAJY3B1ID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQocGNpLCBQQUdFX1NJWkUsICZkbWFfYWRkcik7CiAJaWYgKE5VTEwgPT0gY3B1KSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2NvbW1vbi9zYWE3MTQ2X2ZvcHMuYyBiL2RyaXZlcnMvbWVkaWEvY29tbW9uL3NhYTcxNDZfZm9wcy5jCmluZGV4IGNmNmE4MTcuLjViMzRjMTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvY29tbW9uL3NhYTcxNDZfZm9wcy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvY29tbW9uL3NhYTcxNDZfZm9wcy5jCkBAIC01MzMsNyArNTMzLDcgQEAKIAltZW1jcHkodmZkLCAmZGV2aWNlX3RlbXBsYXRlLCBzaXplb2Yoc3RydWN0IHZpZGVvX2RldmljZSkpOwogCXN0cmxjcHkodmZkLT5uYW1lLCBuYW1lLCBzaXplb2YodmZkLT5uYW1lKSk7CiAJdmZkLT5yZWxlYXNlID0gdmlkZW9fZGV2aWNlX3JlbGVhc2U7Ci0JdmZkLT5wcml2ID0gZGV2OworCXZpZGVvX3NldF9kcnZkYXRhKHZmZCwgZGV2KTsKIAogCS8vIGZpeG1lOiAtMSBzaG91bGQgYmUgYW4gaW5zbW9kIHBhcmFtZXRlciAqZm9yIHRoZSBleHRlbnNpb24qIChsaWtlICJ2aWRlb19uciIpOwogCWlmICh2aWRlb19yZWdpc3Rlcl9kZXZpY2UodmZkLCB0eXBlLCAtMSkgPCAwKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMvbXQyMDYwLmMgYi9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMvbXQyMDYwLmMKaW5kZXggMTMwNWIwZTYuLjEyMjA2ZDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycy9tdDIwNjAuYworKysgYi9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMvbXQyMDYwLmMKQEAgLTE3MCw2ICsxNzAsOSBAQAogCWJbMF0gPSBSRUdfTE8xQjE7CiAJYlsxXSA9IDB4RkY7CiAKKwlpZiAoZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKQorCQlmZS0+b3BzLmkyY19nYXRlX2N0cmwoZmUsIDEpOyAvKiBvcGVuIGkyY19nYXRlICovCisKIAltdDIwNjBfd3JpdGVyZWdzKHByaXYsYiwyKTsKIAogCWZyZXEgPSBwYXJhbXMtPmZyZXF1ZW5jeSAvIDEwMDA7IC8vIEh6IC0+IGtIegpAQCAtMjMzLDYgKzIzNiw5IEBACiAJCWkrKzsKIAl9IHdoaWxlIChpPDEwKTsKIAorCWlmIChmZS0+b3BzLmkyY19nYXRlX2N0cmwpCisJCWZlLT5vcHMuaTJjX2dhdGVfY3RybChmZSwgMCk7IC8qIGNsb3NlIGkyY19nYXRlICovCisKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0yOTYsMTMgKzMwMiwzNSBAQAogc3RhdGljIGludCBtdDIwNjBfaW5pdChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSkKIHsKIAlzdHJ1Y3QgbXQyMDYwX3ByaXYgKnByaXYgPSBmZS0+dHVuZXJfcHJpdjsKLQlyZXR1cm4gbXQyMDYwX3dyaXRlcmVnKHByaXYsIFJFR19WR0FHLCAocHJpdi0+Y2ZnLT5jbG9ja19vdXQgPDwgNikgfCAweDMzKTsKKwlpbnQgcmV0OworCisJaWYgKGZlLT5vcHMuaTJjX2dhdGVfY3RybCkKKwkJZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKGZlLCAxKTsgLyogb3BlbiBpMmNfZ2F0ZSAqLworCisJcmV0ID0gbXQyMDYwX3dyaXRlcmVnKHByaXYsIFJFR19WR0FHLAorCQkJICAgICAgKHByaXYtPmNmZy0+Y2xvY2tfb3V0IDw8IDYpIHwgMHgzMyk7CisKKwlpZiAoZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKQorCQlmZS0+b3BzLmkyY19nYXRlX2N0cmwoZmUsIDApOyAvKiBjbG9zZSBpMmNfZ2F0ZSAqLworCisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGludCBtdDIwNjBfc2xlZXAoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUpCiB7CiAJc3RydWN0IG10MjA2MF9wcml2ICpwcml2ID0gZmUtPnR1bmVyX3ByaXY7Ci0JcmV0dXJuIG10MjA2MF93cml0ZXJlZyhwcml2LCBSRUdfVkdBRywgKHByaXYtPmNmZy0+Y2xvY2tfb3V0IDw8IDYpIHwgMHgzMCk7CisJaW50IHJldDsKKworCWlmIChmZS0+b3BzLmkyY19nYXRlX2N0cmwpCisJCWZlLT5vcHMuaTJjX2dhdGVfY3RybChmZSwgMSk7IC8qIG9wZW4gaTJjX2dhdGUgKi8KKworCXJldCA9IG10MjA2MF93cml0ZXJlZyhwcml2LCBSRUdfVkdBRywKKwkJCSAgICAgIChwcml2LT5jZmctPmNsb2NrX291dCA8PCA2KSB8IDB4MzApOworCisJaWYgKGZlLT5vcHMuaTJjX2dhdGVfY3RybCkKKwkJZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKGZlLCAwKTsgLyogY2xvc2UgaTJjX2dhdGUgKi8KKworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBpbnQgbXQyMDYwX3JlbGVhc2Uoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUpCkBAIC0zNDQsNiArMzcyLDkgQEAKIAlwcml2LT5pMmMgICAgICA9IGkyYzsKIAlwcml2LT5pZjFfZnJlcSA9IGlmMTsKIAorCWlmIChmZS0+b3BzLmkyY19nYXRlX2N0cmwpCisJCWZlLT5vcHMuaTJjX2dhdGVfY3RybChmZSwgMSk7IC8qIG9wZW4gaTJjX2dhdGUgKi8KKwogCWlmIChtdDIwNjBfcmVhZHJlZyhwcml2LFJFR19QQVJUX1JFViwmaWQpICE9IDApIHsKIAkJa2ZyZWUocHJpdik7CiAJCXJldHVybiBOVUxMOwpAQCAtMzYwLDYgKzM5MSw5IEBACiAKIAltdDIwNjBfY2FsaWJyYXRlKHByaXYpOwogCisJaWYgKGZlLT5vcHMuaTJjX2dhdGVfY3RybCkKKwkJZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKGZlLCAwKTsgLyogY2xvc2UgaTJjX2dhdGUgKi8KKwogCXJldHVybiBmZTsKIH0KIEVYUE9SVF9TWU1CT0wobXQyMDYwX2F0dGFjaCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMvbXhsNTAwNXMuYyBiL2RyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycy9teGw1MDA1cy5jCmluZGV4IDIyNzY0MmIuLmE4ODc4MjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycy9teGw1MDA1cy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycy9teGw1MDA1cy5jCkBAIC0zNDgxLDcgKzM0ODEsOSBAQAogCQkJCQl9CiAJCQkJCWN0cmxWYWwgPSAwOwogCQkJCQlmb3IgKGsgPSAwOyBrIDwgc3RhdGUtPk1YTF9DdHJsW2ldLnNpemU7IGsrKykKLQkJCQkJCWN0cmxWYWwgKz0gc3RhdGUtPk1YTF9DdHJsW2ldLnZhbFtrXSAqICgxIDw8IGspOworCQkJCQkJY3RybFZhbCArPSBzdGF0ZS0+CisJCQkJCQkJTVhMX0N0cmxbaV0udmFsW2tdICoKKwkJCQkJCQkoMSA8PCBrKTsKIAkJCQl9IGVsc2UKIAkJCQkJcmV0dXJuIC0xOwogCQkJfQpAQCAtMzU4MSw3ICszNTgzLDcgQEAKIAogc3RhdGljIHUzMiBNWExfQ2VpbGluZyh1MzIgdmFsdWUsIHUzMiByZXNvbHV0aW9uKQogewotCXJldHVybiAodmFsdWUvcmVzb2x1dGlvbiArICh2YWx1ZSAlIHJlc29sdXRpb24gPiAwID8gMSA6IDApKTsKKwlyZXR1cm4gdmFsdWUgLyByZXNvbHV0aW9uICsgKHZhbHVlICUgcmVzb2x1dGlvbiA+IDAgPyAxIDogMCk7CiB9CiAKIC8qIFJldHJpZXZlIHRoZSBJbml0aWFsemF0aW9uIFJlZ2lzdGVycyAqLwpAQCAtMzkxMCw3ICszOTEyLDEwIEBACiAKIHN0YXRpYyBpbnQgbXhsNTAwNXNfaW5pdChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSkKIHsKKwlzdHJ1Y3QgbXhsNTAwNXNfc3RhdGUgKnN0YXRlID0gZmUtPnR1bmVyX3ByaXY7CisKIAlkcHJpbnRrKDEsICIlcygpXG4iLCBfX2Z1bmNfXyk7CisJc3RhdGUtPmN1cnJlbnRfbW9kZSA9IE1YTF9RQU07CiAJcmV0dXJuIG14bDUwMDVzX3JlY29uZmlndXJlKGZlLCBNWExfUUFNLCBNWEw1MDA1U19CQU5EV0lEVEhfNk1IWik7CiB9CiAKQEAgLTQwOTIsNyArNDA5Nyw2IEBACiAJc3RhdGUtPmZyb250ZW5kID0gZmU7CiAJc3RhdGUtPmNvbmZpZyA9IGNvbmZpZzsKIAlzdGF0ZS0+aTJjID0gaTJjOwotCXN0YXRlLT5jdXJyZW50X21vZGUgPSBNWExfUUFNOwogCiAJcHJpbnRrKEtFUk5fSU5GTyAiTVhMNTAwNVM6IEF0dGFjaGVkIGF0IGFkZHJlc3MgMHglMDJ4XG4iLAogCQljb25maWctPmkyY19hZGRyZXNzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycy9teGw1MDA3dC5jIGIvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL214bDUwMDd0LmMKaW5kZXggY2IyNWU0My4uNjQzNzlmMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL214bDUwMDd0LmMKKysrIGIvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL214bDUwMDd0LmMKQEAgLTk3OSw3ICs5NzksNiBAQAogCXN3aXRjaCAoaW5zdGFuY2UpIHsKIAljYXNlIDA6CiAJCWdvdG8gZmFpbDsKLQkJYnJlYWs7CiAJY2FzZSAxOgogCQkvKiBuZXcgdHVuZXIgaW5zdGFuY2UgKi8KIAkJc3RhdGUtPmNvbmZpZyA9IGNmZzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycy90ZGExODI3MS1mZS5jIGIvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL3RkYTE4MjcxLWZlLmMKaW5kZXggOTMwNjNjNi4uMWI0OGI1ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL3RkYTE4MjcxLWZlLmMKKysrIGIvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL3RkYTE4MjcxLWZlLmMKQEAgLTExNTUsNyArMTE1NSw2IEBACiAJc3dpdGNoIChpbnN0YW5jZSkgewogCWNhc2UgMDoKIAkJZ290byBmYWlsOwotCQlicmVhazsKIAljYXNlIDE6CiAJCS8qIG5ldyB0dW5lciBpbnN0YW5jZSAqLwogCQlwcml2LT5nYXRlID0gKGNmZykgPyBjZmctPmdhdGUgOiBUREExODI3MV9HQVRFX0FVVE87CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMvdGRhODI3eC5jIGIvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL3RkYTgyN3guYwppbmRleCA4NTU1ZDljLi40YTc0ZjY1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMvdGRhODI3eC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycy90ZGE4Mjd4LmMKQEAgLTQ0NywxNyArNDQ3LDE5IEBACiAJCQllbHNlCiAJCQkJYXJnID0gMDsKIAkJfQotCQlpZiAocHJpdi0+Y2ZnLT50dW5lcl9jYWxsYmFjaykKLQkJCXByaXYtPmNmZy0+dHVuZXJfY2FsbGJhY2socHJpdi0+aTJjX2FkYXAtPmFsZ29fZGF0YSwKLQkJCQkJCQkJZ3BfZnVuYywgYXJnKTsKKwkJaWYgKGZlLT5jYWxsYmFjaykKKwkJCWZlLT5jYWxsYmFjayhwcml2LT5pMmNfYWRhcC0+YWxnb19kYXRhLAorCQkJCSAgICAgRFZCX0ZST05URU5EX0NPTVBPTkVOVF9UVU5FUiwKKwkJCQkgICAgIGdwX2Z1bmMsIGFyZyk7CiAJCWJ1ZlsxXSA9IGhpZ2ggPyAwIDogMTsKIAkJaWYgKHByaXYtPmNmZy0+Y29uZmlnID09IDIpCiAJCQlidWZbMV0gPSBoaWdoID8gMSA6IDA7CiAJCWkyY190cmFuc2Zlcihwcml2LT5pMmNfYWRhcCwgJm1zZywgMSk7CiAJCWJyZWFrOwogCWNhc2UgMzogLyogc3dpdGNoIHdpdGggR1BJTyBvZiBzYWE3MTN4ICovCi0JCWlmIChwcml2LT5jZmctPnR1bmVyX2NhbGxiYWNrKQotCQkJcHJpdi0+Y2ZnLT50dW5lcl9jYWxsYmFjayhwcml2LT5pMmNfYWRhcC0+YWxnb19kYXRhLCAwLCBoaWdoKTsKKwkJaWYgKGZlLT5jYWxsYmFjaykKKwkJCWZlLT5jYWxsYmFjayhwcml2LT5pMmNfYWRhcC0+YWxnb19kYXRhLAorCQkJCSAgICAgRFZCX0ZST05URU5EX0NPTVBPTkVOVF9UVU5FUiwgMCwgaGlnaCk7CiAJCWJyZWFrOwogCX0KIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycy90ZGE4Mjd4LmggYi9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMvdGRhODI3eC5oCmluZGV4IDc4NTBhOWEuLjdkNzJjZTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycy90ZGE4Mjd4LmgKKysrIGIvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL3RkYTgyN3guaApAQCAtMzYsNyArMzYsNiBAQAogCS8qIGludGVyZmFjZSB0byB0ZGE4Mjl4IGRyaXZlciAqLwogCXVuc2lnbmVkIGludCBjb25maWc7CiAJaW50IAkgICAgIHN3aXRjaF9hZGRyOwotCWludCAoKnR1bmVyX2NhbGxiYWNrKSAodm9pZCAqZGV2LCBpbnQgY29tbWFuZCwgaW50IGFyZyk7CiAKIAl2b2lkICgqYWdjZikoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUpOwogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycy90ZGE4MjkwLmMgYi9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMvdGRhODI5MC5jCmluZGV4IDkxMjA0ZDMuLmMxMTJiZGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycy90ZGE4MjkwLmMKKysrIGIvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL3RkYTgyOTAuYwpAQCAtNjcyLDEwICs2NzIsOCBAQAogCXByaXYtPmkyY19wcm9wcy5hZGRyICAgICA9IGkyY19hZGRyOwogCXByaXYtPmkyY19wcm9wcy5hZGFwICAgICA9IGkyY19hZGFwOwogCXByaXYtPmkyY19wcm9wcy5uYW1lICAgICA9ICJ0ZGE4Mjl4IjsKLQlpZiAoY2ZnKSB7CisJaWYgKGNmZykKIAkJcHJpdi0+Y2ZnLmNvbmZpZyAgICAgICAgID0gY2ZnLT5sbmFfY2ZnOwotCQlwcml2LT5jZmcudHVuZXJfY2FsbGJhY2sgPSBjZmctPnR1bmVyX2NhbGxiYWNrOwotCX0KIAogCWlmICh0ZGE4MjkwX3Byb2JlKCZwcml2LT5pMmNfcHJvcHMpID09IDApIHsKIAkJcHJpdi0+dmVyID0gVERBODI5MDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycy90ZGE4MjkwLmggYi9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMvdGRhODI5MC5oCmluZGV4IGFhMDc0ZjMuLjdlMjg4YjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycy90ZGE4MjkwLmgKKysrIGIvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL3RkYTgyOTAuaApAQCAtMjIsNyArMjIsNiBAQAogCiBzdHJ1Y3QgdGRhODI5eF9jb25maWcgewogCXVuc2lnbmVkIGludCBsbmFfY2ZnOwotCWludCAoKnR1bmVyX2NhbGxiYWNrKSAodm9pZCAqZGV2LCBpbnQgY29tbWFuZCwgaW50IGFyZyk7CiAKIAl1bnNpZ25lZCBpbnQgcHJvYmVfdHVuZXI6MTsKICNkZWZpbmUgVERBODI5WF9QUk9CRV9UVU5FUiAwCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMvdGRhOTg4Ny5jIGIvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL3RkYTk4ODcuYwppbmRleCA3MmFiZjBiLi5mZjE3ODhjIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMvdGRhOTg4Ny5jCisrKyBiL2RyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycy90ZGE5ODg3LmMKQEAgLTY4Niw3ICs2ODYsNiBAQAogCWNhc2UgMDoKIAkJbXV0ZXhfdW5sb2NrKCZ0ZGE5ODg3X2xpc3RfbXV0ZXgpOwogCQlyZXR1cm4gTlVMTDsKLQkJYnJlYWs7CiAJY2FzZSAxOgogCQlmZS0+YW5hbG9nX2RlbW9kX3ByaXYgPSBwcml2OwogCQlwcml2LT5tb2RlID0gVF9TVEFOREJZOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL3R1bmVyLXNpbXBsZS5jIGIvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL3R1bmVyLXNpbXBsZS5jCmluZGV4IGFhNzczYTYuLmZiM2YzYjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycy90dW5lci1zaW1wbGUuYworKysgYi9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMvdHVuZXItc2ltcGxlLmMKQEAgLTE0Miw2ICsxNDIsNyBAQAogCWNhc2UgVFVORVJfUEhJTElQU19GTTEyMzZfTUszOgogCWNhc2UgVFVORVJfUEhJTElQU19GTTEyNTZfSUgzOgogCWNhc2UgVFVORVJfTEdfTlRTQ19UQVBFOgorCWNhc2UgVFVORVJfVENMX01GMDJHSVBfNU46CiAJCXJldHVybiAoKHN0YXR1cyAmIFRVTkVSX1NJR05BTCkgPT0gVFVORVJfU1RFUkVPX01LMyk7CiAJZGVmYXVsdDoKIAkJcmV0dXJuIHN0YXR1cyAmIFRVTkVSX1NURVJFTzsKQEAgLTQ5Miw4ICs0OTMsMTAgQEAKIAljYXNlIFRVTkVSX1BISUxJUFNfRk0xMjE2TUVfTUszOgogCWNhc2UgVFVORVJfUEhJTElQU19GTTEyMzZfTUszOgogCWNhc2UgVFVORVJfUEhJTElQU19GTUQxMjE2TUVfTUszOgorCWNhc2UgVFVORVJfUEhJTElQU19GTUQxMjE2TUVYX01LMzoKIAljYXNlIFRVTkVSX0xHX05UU0NfVEFQRToKIAljYXNlIFRVTkVSX1BISUxJUFNfRk0xMjU2X0lIMzoKKwljYXNlIFRVTkVSX1RDTF9NRjAyR0lQXzVOOgogCQlidWZmZXJbM10gPSAweDE5OwogCQlicmVhazsKIAljYXNlIFRVTkVSX1RORl81MzM1TUY6CkBAIC03NjUsNiArNzY4LDcgQEAKIAogCXN3aXRjaCAocHJpdi0+dHlwZSkgewogCWNhc2UgVFVORVJfUEhJTElQU19GTUQxMjE2TUVfTUszOgorCWNhc2UgVFVORVJfUEhJTElQU19GTUQxMjE2TUVYX01LMzoKIAkJaWYgKHBhcmFtcy0+dS5vZmRtLmJhbmR3aWR0aCA9PSBCQU5EV0lEVEhfOF9NSFogJiYKIAkJICAgIHBhcmFtcy0+ZnJlcXVlbmN5ID49IDE1ODg3MDAwMCkKIAkJCWJ1ZlszXSB8PSAweDA4OwpAQCAtMTAzOCw3ICsxMDQyLDYgQEAKIAljYXNlIDA6CiAJCW11dGV4X3VubG9jaygmdHVuZXJfc2ltcGxlX2xpc3RfbXV0ZXgpOwogCQlyZXR1cm4gTlVMTDsKLQkJYnJlYWs7CiAJY2FzZSAxOgogCQlmZS0+dHVuZXJfcHJpdiA9IHByaXY7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycy90dW5lci10eXBlcy5jIGIvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL3R1bmVyLXR5cGVzLmMKaW5kZXggMTBkZGRjYS4uN2MwYmMwNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL3R1bmVyLXR5cGVzLmMKKysrIGIvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL3R1bmVyLXR5cGVzLmMKQEAgLTk0Niw3ICs5NDYsNyBAQAogCX0sCiB9OwogCi0vKiAtLS0tLS0tLS0tLS0gVFVORVJfUEhJTElQU19GTUQxMjE2TUVfTUszIC0gUGhpbGlwcyBQQUwgLS0tLS0tLS0tLS0tICovCisvKiAtLS0tLS0tLS0tLS0gVFVORVJfUEhJTElQU19GTUQxMjE2TUUoWClfTUszIC0gUGhpbGlwcyBQQUwgLS0tLS0tLS0tLS0tICovCiAKIHN0YXRpYyBzdHJ1Y3QgdHVuZXJfcmFuZ2UgdHVuZXJfcGhpbGlwc19mbWQxMjE2bWVfbWszX3BhbF9yYW5nZXNbXSA9IHsKIAl7IDE2ICogMTYwLjAwIC8qTUh6Ki8sIDB4ODYsIDB4NTEsIH0sCkBAIC05ODQsNiArOTg0LDI3IEBACiAJfSwKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgdHVuZXJfcGFyYW1zIHR1bmVyX3BoaWxpcHNfZm1kMTIxNm1leF9tazNfcGFyYW1zW10gPSB7CisJeworCQkudHlwZSAgID0gVFVORVJfUEFSQU1fVFlQRV9QQUwsCisJCS5yYW5nZXMgPSB0dW5lcl9waGlsaXBzX2ZtZDEyMTZtZV9tazNfcGFsX3JhbmdlcywKKwkJLmNvdW50ICA9IEFSUkFZX1NJWkUodHVuZXJfcGhpbGlwc19mbWQxMjE2bWVfbWszX3BhbF9yYW5nZXMpLAorCQkuaGFzX3RkYTk4ODcgPSAxLAorCQkucG9ydDFfYWN0aXZlID0gMSwKKwkJLnBvcnQyX2FjdGl2ZSA9IDEsCisJCS5wb3J0Ml9mbV9oaWdoX3NlbnNpdGl2aXR5ID0gMSwKKwkJLnBvcnQyX2ludmVydF9mb3Jfc2VjYW1fbGMgPSAxLAorCQkucG9ydDFfc2V0X2Zvcl9mbV9tb25vID0gMSwKKwkJLnJhZGlvX2lmID0gMSwKKwkJLmZtX2dhaW5fbm9ybWFsID0gMSwKKwl9LAorCXsKKwkJLnR5cGUgICA9IFRVTkVSX1BBUkFNX1RZUEVfRElHSVRBTCwKKwkJLnJhbmdlcyA9IHR1bmVyX3BoaWxpcHNfZm1kMTIxNm1lX21rM19kdmJfcmFuZ2VzLAorCQkuY291bnQgID0gQVJSQVlfU0laRSh0dW5lcl9waGlsaXBzX2ZtZDEyMTZtZV9tazNfZHZiX3JhbmdlcyksCisJCS5pZmZyZXEgPSAxNiAqIDM2LjEyNSwgLypNSHoqLworCX0sCit9OwogCiAvKiAtLS0tLS0gVFVORVJfTEdfVERWU19IMDZYRiAtIExHIElOTk9URUsgLyBJTkZJTkVPTiBBVFNDIC0tLS0tICovCiAKQEAgLTEyMTYsNiArMTIzNywyMyBAQAogCX0sCiB9OwogCisvKiAtLS0tLS0tLS0tLS0gVFVORVJfVENMX01GMDJHSVAtNU4tRSAtIFRDTCBNRjAyR0lQLTVOIC0tLS0tLS0tLS0tLSAqLworCitzdGF0aWMgc3RydWN0IHR1bmVyX3JhbmdlIHR1bmVyX3RjbF9tZjAyZ2lwXzVuX250c2NfcmFuZ2VzW10gPSB7CisJeyAxNiAqIDE3Mi4wMCAvKk1IeiovLCAweDhlLCAweDAxLCB9LAorCXsgMTYgKiA0NDguMDAgLypNSHoqLywgMHg4ZSwgMHgwMiwgfSwKKwl7IDE2ICogOTk5Ljk5ICAgICAgICAsIDB4OGUsIDB4MDQsIH0sCit9OworCitzdGF0aWMgc3RydWN0IHR1bmVyX3BhcmFtcyB0dW5lcl90Y2xfbWYwMmdpcF81bl9wYXJhbXNbXSA9IHsKKwl7CisJCS50eXBlICAgPSBUVU5FUl9QQVJBTV9UWVBFX05UU0MsCisJCS5yYW5nZXMgPSB0dW5lcl90Y2xfbWYwMmdpcF81bl9udHNjX3JhbmdlcywKKwkJLmNvdW50ICA9IEFSUkFZX1NJWkUodHVuZXJfdGNsX21mMDJnaXBfNW5fbnRzY19yYW5nZXMpLAorCQkuY2JfZmlyc3RfaWZfbG93ZXJfZnJlcSA9IDEsCisJfSwKK307CisKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCiBzdHJ1Y3QgdHVuZXJ0eXBlIHR1bmVyc1tdID0gewpAQCAtMTY0MSw2ICsxNjc5LDIxIEBACiAJCS5uYW1lICAgPSAiWGNlaXZlIDUwMDAgdHVuZXIiLAogCQkvKiBzZWUgeGM1MDAwLmMgZm9yIGRldGFpbHMgKi8KIAl9LAorCVtUVU5FUl9UQ0xfTUYwMkdJUF81Tl0gPSB7IC8qIFRDTCB0dW5lciBNRjAyR0lQLTVOLUUgKi8KKwkJLm5hbWUgICA9ICJUQ0wgdHVuZXIgTUYwMkdJUC01Ti1FIiwKKwkJLnBhcmFtcyA9IHR1bmVyX3RjbF9tZjAyZ2lwXzVuX3BhcmFtcywKKwkJLmNvdW50ICA9IEFSUkFZX1NJWkUodHVuZXJfdGNsX21mMDJnaXBfNW5fcGFyYW1zKSwKKwl9LAorCVtUVU5FUl9QSElMSVBTX0ZNRDEyMTZNRVhfTUszXSA9IHsgLyogUGhpbGlwcyBQQUwgKi8KKwkJLm5hbWUgICA9ICJQaGlsaXBzIEZNRDEyMTZNRVggTUszIEh5YnJpZCBUdW5lciIsCisJCS5wYXJhbXMgPSB0dW5lcl9waGlsaXBzX2ZtZDEyMTZtZXhfbWszX3BhcmFtcywKKwkJLmNvdW50ICA9IEFSUkFZX1NJWkUodHVuZXJfcGhpbGlwc19mbWQxMjE2bWV4X21rM19wYXJhbXMpLAorCQkubWluID0gMTYgKiAgNTAuODcsCisJCS5tYXggPSAxNiAqIDg1OC4wMCwKKwkJLnN0ZXBzaXplID0gMTY2NjY3LAorCQkuaW5pdGRhdGEgPSB0dWE2MDN4X2FnYzExMiwKKwkJLnNsZWVwZGF0YSA9ICh1OFtdKXsgNCwgMHg5YywgMHg2MCwgMHg4NSwgMHg1NCB9LAorCX0sCiB9OwogRVhQT1JUX1NZTUJPTCh0dW5lcnMpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMvdHVuZXIteGMyMDI4LmMgYi9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMvdHVuZXIteGMyMDI4LmMKaW5kZXggNGRkMWQyNC4uYjY1ZTY4MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL3R1bmVyLXhjMjAyOC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycy90dW5lci14YzIwMjguYwpAQCAtNzEsOSArNzEsNiBAQAogc3RydWN0IHhjMjAyOF9kYXRhIHsKIAlzdHJ1Y3QgbGlzdF9oZWFkICAgICAgICBoeWJyaWRfdHVuZXJfaW5zdGFuY2VfbGlzdDsKIAlzdHJ1Y3QgdHVuZXJfaTJjX3Byb3BzICBpMmNfcHJvcHM7Ci0JaW50ICAgICAgICAgICAgICAgICAgICAgKCp0dW5lcl9jYWxsYmFjaykgKHZvaWQgKmRldiwKLQkJCQkJCSAgIGludCBjb21tYW5kLCBpbnQgYXJnKTsKLQl2b2lkCQkJKnZpZGVvX2RldjsKIAlfX3UzMgkJCWZyZXF1ZW5jeTsKIAogCXN0cnVjdCBmaXJtd2FyZV9kZXNjcmlwdGlvbiAqZmlybTsKQEAgLTQ5Miw2ICs0ODksMjMgQEAKIAlyZXR1cm4gaTsKIH0KIAorc3RhdGljIGlubGluZSBpbnQgZG9fdHVuZXJfY2FsbGJhY2soc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIGludCBjbWQsIGludCBhcmcpCit7CisJc3RydWN0IHhjMjAyOF9kYXRhICpwcml2ID0gZmUtPnR1bmVyX3ByaXY7CisKKwkvKiBhbmFsb2cgc2lkZSAodHVuZXItY29yZSkgdXNlcyBpMmNfYWRhcC0+YWxnb19kYXRhLgorCSAqIGRpZ2l0YWwgc2lkZSBpcyBub3QgZ3VhcmFudGVlZCB0byBoYXZlIGFsZ29fZGF0YSBkZWZpbmVkLgorCSAqCisJICogZGlnaXRhbCBzaWRlIHdpbGwgYWx3YXlzIGhhdmUgZmUtPmR2YiBkZWZpbmVkLgorCSAqIGFuYWxvZyBzaWRlICh0dW5lci1jb3JlKSBkb2Vzbid0ICh5ZXQpIGRlZmluZSBmZS0+ZHZiLgorCSAqLworCisJcmV0dXJuICghZmUtPmNhbGxiYWNrKSA/IC1FSU5WQUwgOgorCQlmZS0+Y2FsbGJhY2soKChmZS0+ZHZiKSAmJiAoZmUtPmR2Yi0+cHJpdikpID8KKwkJCQlmZS0+ZHZiLT5wcml2IDogcHJpdi0+aTJjX3Byb3BzLmFkYXAtPmFsZ29fZGF0YSwKKwkJCSAgICAgRFZCX0ZST05URU5EX0NPTVBPTkVOVF9UVU5FUiwgY21kLCBhcmcpOworfQorCiBzdGF0aWMgaW50IGxvYWRfZmlybXdhcmUoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIHVuc2lnbmVkIGludCB0eXBlLAogCQkJIHY0bDJfc3RkX2lkICppZCkKIHsKQEAgLTUzMCw4ICs1NDQsNyBAQAogCiAJCWlmICghc2l6ZSkgewogCQkJLyogU3BlY2lhbCBjYWxsYmFjayBjb21tYW5kIHJlY2VpdmVkICovCi0JCQlyYyA9IHByaXYtPnR1bmVyX2NhbGxiYWNrKHByaXYtPnZpZGVvX2RldiwKLQkJCQkJCSAgWEMyMDI4X1RVTkVSX1JFU0VULCAwKTsKKwkJCXJjID0gZG9fdHVuZXJfY2FsbGJhY2soZmUsIFhDMjAyOF9UVU5FUl9SRVNFVCwgMCk7CiAJCQlpZiAocmMgPCAwKSB7CiAJCQkJdHVuZXJfZXJyKCJFcnJvciBhdCBSRVNFVCBjb2RlICVkXG4iLAogCQkJCQkgICAoKnApICYgMHg3Zik7CkBAIC01NDIsOCArNTU1LDcgQEAKIAkJaWYgKHNpemUgPj0gMHhmZjAwKSB7CiAJCQlzd2l0Y2ggKHNpemUpIHsKIAkJCWNhc2UgMHhmZjAwOgotCQkJCXJjID0gcHJpdi0+dHVuZXJfY2FsbGJhY2socHJpdi0+dmlkZW9fZGV2LAotCQkJCQkJCVhDMjAyOF9SRVNFVF9DTEssIDApOworCQkJCXJjID0gZG9fdHVuZXJfY2FsbGJhY2soZmUsIFhDMjAyOF9SRVNFVF9DTEssIDApOwogCQkJCWlmIChyYyA8IDApIHsKIAkJCQkJdHVuZXJfZXJyKCJFcnJvciBhdCBSRVNFVCBjb2RlICVkXG4iLAogCQkJCQkJICAoKnApICYgMHg3Zik7CkBAIC03MTUsOCArNzI3LDcgQEAKIAltZW1zZXQoJnByaXYtPmN1cl9mdywgMCwgc2l6ZW9mKHByaXYtPmN1cl9mdykpOwogCiAJLyogUmVzZXQgaXMgbmVlZGVkIGJlZm9yZSBsb2FkaW5nIGZpcm13YXJlICovCi0JcmMgPSBwcml2LT50dW5lcl9jYWxsYmFjayhwcml2LT52aWRlb19kZXYsCi0JCQkJICBYQzIwMjhfVFVORVJfUkVTRVQsIDApOworCXJjID0gZG9fdHVuZXJfY2FsbGJhY2soZmUsIFhDMjAyOF9UVU5FUl9SRVNFVCwgMCk7CiAJaWYgKHJjIDwgMCkKIAkJZ290byBmYWlsOwogCkBAIC05MzMsNyArOTQ0LDcgQEAKIAkgICBUaGUgcmVzZXQgQ0xLIGlzIG5lZWRlZCBvbmx5IHdpdGggdG02MDAwLgogCSAgIERyaXZlciBzaG91bGQgd29yayBmaW5lIGV2ZW4gaWYgdGhpcyBmYWlscy4KIAkgKi8KLQlwcml2LT50dW5lcl9jYWxsYmFjayhwcml2LT52aWRlb19kZXYsIFhDMjAyOF9SRVNFVF9DTEssIDEpOworCWRvX3R1bmVyX2NhbGxiYWNrKGZlLCBYQzIwMjhfUkVTRVRfQ0xLLCAxKTsKIAogCW1zbGVlcCgxMCk7CiAKQEAgLTEwMDIsMTEgKzEwMTMsNiBAQAogCiAJdHVuZXJfZGJnKCIlcyBjYWxsZWRcbiIsIF9fZnVuY19fKTsKIAotCWlmIChwcml2LT5jdHJsLmQyNjMzKQotCQl0eXBlIHw9IEQyNjMzOwotCWVsc2UKLQkJdHlwZSB8PSBEMjYyMDsKLQogCXN3aXRjaChmZS0+b3BzLmluZm8udHlwZSkgewogCWNhc2UgRkVfT0ZETToKIAkJYncgPSBwLT51Lm9mZG0uYmFuZHdpZHRoOwpAQCAtMTAyMSwxMCArMTAyNyw4IEBACiAJCWJyZWFrOwogCWNhc2UgRkVfQVRTQzoKIAkJYncgPSBCQU5EV0lEVEhfNl9NSFo7Ci0JCS8qIFRoZSBvbmx5IEFUU0MgZmlybXdhcmUgKGF0IGxlYXN0IG9uIHYyLjcpIGlzIEQyNjMzLAotCQkgICBzbyBvdmVycmlkZXMgY3RybC0+ZDI2MzMgKi8KLQkJdHlwZSB8PSBBVFNDfCBEMjYzMzsKLQkJdHlwZSAmPSB+RDI2MjA7CisJCS8qIFRoZSBvbmx5IEFUU0MgZmlybXdhcmUgKGF0IGxlYXN0IG9uIHYyLjcpIGlzIEQyNjMzICovCisJCXR5cGUgfD0gQVRTQyB8IEQyNjMzOwogCQlicmVhazsKIAkvKiBEVkItUyBpcyBub3Qgc3VwcG9ydGVkICovCiAJZGVmYXVsdDoKQEAgLTEwNTcsNiArMTA2MSwyOCBAQAogCQl0dW5lcl9lcnIoImVycm9yOiBiYW5kd2lkdGggbm90IHN1cHBvcnRlZC5cbiIpOwogCX07CiAKKwkvKgorCSAgU2VsZWN0cyBiZXR3ZWVuIEQyNjMzIG9yIEQyNjIwIGZpcm13YXJlLgorCSAgSXQgZG9lc24ndCBtYWtlIHNlbnNlIGZvciBBVFNDLCBzaW5jZSBpdCBzaG91bGQgYmUgRDI2MzMgb24gYWxsIGNhc2VzCisJICovCisJaWYgKGZlLT5vcHMuaW5mby50eXBlICE9IEZFX0FUU0MpIHsKKwkJc3dpdGNoIChwcml2LT5jdHJsLnR5cGUpIHsKKwkJY2FzZSBYQzIwMjhfRDI2MzM6CisJCQl0eXBlIHw9IEQyNjMzOworCQkJYnJlYWs7CisJCWNhc2UgWEMyMDI4X0QyNjIwOgorCQkJdHlwZSB8PSBEMjYyMDsKKwkJCWJyZWFrOworCQljYXNlIFhDMjAyOF9BVVRPOgorCQlkZWZhdWx0OgorCQkJLyogWmFybGluayBzZWVtcyB0byBuZWVkIEQyNjMzICovCisJCQlpZiAocHJpdi0+Y3RybC5kZW1vZCA9PSBYQzMwMjhfRkVfWkFSTElOSzQ1NikKKwkJCQl0eXBlIHw9IEQyNjMzOworCQkJZWxzZQorCQkJCXR5cGUgfD0gRDI2MjA7CisJCX0KKwl9CisKIAkvKiBBbGwgUy1jb2RlIHRhYmxlcyBuZWVkIGEgMjAwa0h6IHNoaWZ0ICovCiAJaWYgKHByaXYtPmN0cmwuZGVtb2QpCiAJCWRlbW9kID0gcHJpdi0+Y3RybC5kZW1vZCArIDIwMDsKQEAgLTExNzcsMjAgKzEyMDMsMTAgQEAKIAkJYnJlYWs7CiAJY2FzZSAxOgogCQkvKiBuZXcgdHVuZXIgaW5zdGFuY2UgKi8KLQkJcHJpdi0+dHVuZXJfY2FsbGJhY2sgPSBjZmctPmNhbGxiYWNrOwogCQlwcml2LT5jdHJsLm1heF9sZW4gPSAxMzsKIAogCQltdXRleF9pbml0KCZwcml2LT5sb2NrKTsKIAotCQkvKiBhbmFsb2cgc2lkZSAodHVuZXItY29yZSkgdXNlcyBpMmNfYWRhcC0+YWxnb19kYXRhLgotCQkgKiBkaWdpdGFsIHNpZGUgaXMgbm90IGd1YXJhbnRlZWQgdG8gaGF2ZSBhbGdvX2RhdGEgZGVmaW5lZC4KLQkJICoKLQkJICogZGlnaXRhbCBzaWRlIHdpbGwgYWx3YXlzIGhhdmUgZmUtPmR2YiBkZWZpbmVkLgotCQkgKiBhbmFsb2cgc2lkZSAodHVuZXItY29yZSkgZG9lc24ndCAoeWV0KSBkZWZpbmUgZmUtPmR2Yi4KLQkJICovCi0JCXByaXYtPnZpZGVvX2RldiA9ICgoZmUtPmR2YikgJiYgKGZlLT5kdmItPnByaXYpKSA/Ci0JCQkJICAgZmUtPmR2Yi0+cHJpdiA6IGNmZy0+aTJjX2FkYXAtPmFsZ29fZGF0YTsKLQogCQlmZS0+dHVuZXJfcHJpdiA9IHByaXY7CiAJCWJyZWFrOwogCWNhc2UgMjoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycy90dW5lci14YzIwMjguaCBiL2RyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycy90dW5lci14YzIwMjguaAppbmRleCAyYzViNjI4Li4xOWRlNzkyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMvdHVuZXIteGMyMDI4LmgKKysrIGIvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL3R1bmVyLXhjMjAyOC5oCkBAIC0yNCwyNCArMjQsMjggQEAKICNkZWZpbmUJWEMzMDI4X0ZFX1pBUkxJTks0NTYJNDU2MAogI2RlZmluZQlYQzMwMjhfRkVfQ0hJTkEJCTUyMDAKIAorZW51bSBmaXJtd2FyZV90eXBlIHsKKwlYQzIwMjhfQVVUTyA9IDAsICAgICAgICAvKiBCeSBkZWZhdWx0LCBhdXRvLWRldGVjdHMgKi8KKwlYQzIwMjhfRDI2MzMsCisJWEMyMDI4X0QyNjIwLAorfTsKKwogc3RydWN0IHhjMjAyOF9jdHJsIHsKIAljaGFyCQkJKmZuYW1lOwogCWludAkJCW1heF9sZW47CiAJdW5zaWduZWQgaW50CQlzY29kZV90YWJsZTsKIAl1bnNpZ25lZCBpbnQJCW10cyAgIDoxOwotCXVuc2lnbmVkIGludAkJZDI2MzMgOjE7CiAJdW5zaWduZWQgaW50CQlpbnB1dDE6MTsKIAl1bnNpZ25lZCBpbnQJCXZoZmJ3NzoxOwogCXVuc2lnbmVkIGludAkJdWhmYnc4OjE7CiAJdW5zaWduZWQgaW50CQlkZW1vZDsKKwllbnVtIGZpcm13YXJlX3R5cGUJdHlwZToyOwogfTsKIAogc3RydWN0IHhjMjAyOF9jb25maWcgewogCXN0cnVjdCBpMmNfYWRhcHRlciAqaTJjX2FkYXA7CiAJdTggCQkgICBpMmNfYWRkcjsKLQl2b2lkICAgICAgICAgICAgICAgKnZpZGVvX2RldjsKIAlzdHJ1Y3QgeGMyMDI4X2N0cmwgKmN0cmw7Ci0JaW50ICAgICAgICAgICAgICAgICgqY2FsbGJhY2spICh2b2lkICpkZXYsIGludCBjb21tYW5kLCBpbnQgYXJnKTsKIH07CiAKIC8qIHhjMjAyOCBjb21tYW5kcyBmb3IgY2FsbGJhY2sgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycy94YzUwMDAuYyBiL2RyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycy94YzUwMDAuYwppbmRleCBkY2RkZmE4Li5lMTJkMTNlIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMveGM1MDAwLmMKKysrIGIvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL3hjNTAwMC5jCkBAIC0zMCw3ICszMCw3IEBACiAjaW5jbHVkZSAiZHZiX2Zyb250ZW5kLmgiCiAKICNpbmNsdWRlICJ4YzUwMDAuaCIKLSNpbmNsdWRlICJ4YzUwMDBfcHJpdi5oIgorI2luY2x1ZGUgInR1bmVyLWkyYy5oIgogCiBzdGF0aWMgaW50IGRlYnVnOwogbW9kdWxlX3BhcmFtKGRlYnVnLCBpbnQsIDA2NDQpOwpAQCAtNDAsMTIgKzQwLDI2IEBACiBtb2R1bGVfcGFyYW1fbmFtZWQoaW5pdF9mdywgeGM1MDAwX2xvYWRfZndfb25fYXR0YWNoLCBpbnQsIDA2NDQpOwogTU9EVUxFX1BBUk1fREVTQyhpbml0X2Z3LCAiTG9hZCBmaXJtd2FyZSBkdXJpbmcgZHJpdmVyIGluaXRpYWxpemF0aW9uLiIpOwogCi0jZGVmaW5lIGRwcmludGsobGV2ZWwsZm10LCBhcmcuLi4pIGlmIChkZWJ1ZyA+PSBsZXZlbCkgXAorc3RhdGljIERFRklORV9NVVRFWCh4YzUwMDBfbGlzdF9tdXRleCk7CitzdGF0aWMgTElTVF9IRUFEKGh5YnJpZF90dW5lcl9pbnN0YW5jZV9saXN0KTsKKworI2RlZmluZSBkcHJpbnRrKGxldmVsLCBmbXQsIGFyZy4uLikgaWYgKGRlYnVnID49IGxldmVsKSBcCiAJcHJpbnRrKEtFUk5fSU5GTyAiJXM6ICIgZm10LCAieGM1MDAwIiwgIyMgYXJnKQogCiAjZGVmaW5lIFhDNTAwMF9ERUZBVUxUX0ZJUk1XQVJFICJkdmItZmUteGM1MDAwLTEuMS5mdyIKICNkZWZpbmUgWEM1MDAwX0RFRkFVTFRfRklSTVdBUkVfU0laRSAxMjMzMgogCitzdHJ1Y3QgeGM1MDAwX3ByaXYgeworCXN0cnVjdCB0dW5lcl9pMmNfcHJvcHMgaTJjX3Byb3BzOworCXN0cnVjdCBsaXN0X2hlYWQgaHlicmlkX3R1bmVyX2luc3RhbmNlX2xpc3Q7CisKKwl1MzIgaWZfa2h6OworCXUzMiBmcmVxX2h6OworCXUzMiBiYW5kd2lkdGg7CisJdTggIHZpZGVvX3N0YW5kYXJkOworCXU4ICByZl9tb2RlOworfTsKKwogLyogTWlzYyBEZWZpbmVzICovCiAjZGVmaW5lIE1BWF9UVl9TVEFOREFSRAkJCTIzCiAjZGVmaW5lIFhDX01BWF9JMkNfV1JJVEVfTEVOR1RICQk2NApAQCAtMTI0LDExICsxMzgsMTEgQEAKICAgIGltbWVkaWF0ZWx5IHRoZSBsZW5ndGggb2YgdGhlIGZvbGxvd2luZyB0cmFuc2FjdGlvbi4KIAogKi8KLXR5cGVkZWYgc3RydWN0IHsKK3N0cnVjdCBYQ19UVl9TVEFOREFSRCB7CiAJY2hhciAqTmFtZTsKIAl1MTYgQXVkaW9Nb2RlOwogCXUxNiBWaWRlb01vZGU7Ci19IFhDX1RWX1NUQU5EQVJEOworfTsKIAogLyogVHVuZXIgc3RhbmRhcmRzICovCiAjZGVmaW5lIE1OX05UU0NfUEFMX0JUU0MJMApAQCAtMTU1LDcgKzE2OSw3IEBACiAjZGVmaW5lIEZNX1JhZGlvX0lOUFVUMiAJMjEKICNkZWZpbmUgRk1fUmFkaW9fSU5QVVQxIAkyMgogCi1zdGF0aWMgWENfVFZfU1RBTkRBUkQgWEM1MDAwX1N0YW5kYXJkW01BWF9UVl9TVEFOREFSRF0gPSB7CitzdGF0aWMgc3RydWN0IFhDX1RWX1NUQU5EQVJEIFhDNTAwMF9TdGFuZGFyZFtNQVhfVFZfU1RBTkRBUkRdID0gewogCXsiTS9OLU5UU0MvUEFMLUJUU0MiLCAweDA0MDAsIDB4ODAyMH0sCiAJeyJNL04tTlRTQy9QQUwtQTIiLCAgIDB4MDYwMCwgMHg4MDIwfSwKIAl7Ik0vTi1OVFNDL1BBTC1FSUFKIiwgMHgwNDQwLCAweDgwMjB9LApAQCAtMTY5LDcgKzE4Myw3IEBACiAJeyJEL0stUEFMLU5JQ0FNIiwgICAgIDB4MEU4MCwgMHg4MDA5fSwKIAl7IkQvSy1QQUwtTU9OTyIsICAgICAgMHgxNDc4LCAweDgwMDl9LAogCXsiRC9LLVNFQ0FNLUEyIERLMSIsICAweDEyMDAsIDB4ODAwOX0sCi0JeyJEL0stU0VDQU0tQTIgTC9ESzMiLDB4MEUwMCwgMHg4MDA5fSwKKwl7IkQvSy1TRUNBTS1BMiBML0RLMyIsIDB4MEUwMCwgMHg4MDA5fSwKIAl7IkQvSy1TRUNBTS1BMiBNT05PIiwgMHgxNDc4LCAweDgwMDl9LAogCXsiTC1TRUNBTS1OSUNBTSIsICAgICAweDhFODIsIDB4MDAwOX0sCiAJeyJMJy1TRUNBTS1OSUNBTSIsICAgIDB4OEU4MiwgMHg0MDA5fSwKQEAgLTIxNiw5ICsyMzAsMTIgQEAKIAogCWRwcmludGsoMSwgIiVzKClcbiIsIF9fZnVuY19fKTsKIAotCWlmIChwcml2LT5jZmctPnR1bmVyX2NhbGxiYWNrKSB7Ci0JCXJldCA9IHByaXYtPmNmZy0+dHVuZXJfY2FsbGJhY2socHJpdi0+ZGV2cHRyLAotCQkJCQkJWEM1MDAwX1RVTkVSX1JFU0VULCAwKTsKKwlpZiAoZmUtPmNhbGxiYWNrKSB7CisJCXJldCA9IGZlLT5jYWxsYmFjaygoKGZlLT5kdmIpICYmIChmZS0+ZHZiLT5wcml2KSkgPworCQkJCQkgICBmZS0+ZHZiLT5wcml2IDoKKwkJCQkJICAgcHJpdi0+aTJjX3Byb3BzLmFkYXAtPmFsZ29fZGF0YSwKKwkJCQkJICAgRFZCX0ZST05URU5EX0NPTVBPTkVOVF9UVU5FUiwKKwkJCQkJICAgWEM1MDAwX1RVTkVSX1JFU0VULCAwKTsKIAkJaWYgKHJldCkKIAkJCXByaW50ayhLRVJOX0VSUiAieGM1MDAwOiByZXNldCBmYWlsZWRcbiIpOwogCX0gZWxzZQpAQCAtMjkwLDkgKzMwNywxMCBAQAogCXVuc2lnbmVkIGludCBsZW4sIHBvcywgaW5kZXg7CiAJdTggYnVmW1hDX01BWF9JMkNfV1JJVEVfTEVOR1RIXTsKIAotCWluZGV4PTA7Ci0Jd2hpbGUgKChpMmNfc2VxdWVuY2VbaW5kZXhdIT0weEZGKSB8fCAoaTJjX3NlcXVlbmNlW2luZGV4KzFdIT0weEZGKSkgewotCQlsZW4gPSBpMmNfc2VxdWVuY2VbaW5kZXhdKiAyNTYgKyBpMmNfc2VxdWVuY2VbaW5kZXgrMV07CisJaW5kZXggPSAwOworCXdoaWxlICgoaTJjX3NlcXVlbmNlW2luZGV4XSAhPSAweEZGKSB8fAorCQkoaTJjX3NlcXVlbmNlW2luZGV4ICsgMV0gIT0gMHhGRikpIHsKKwkJbGVuID0gaTJjX3NlcXVlbmNlW2luZGV4XSAqIDI1NiArIGkyY19zZXF1ZW5jZVtpbmRleCsxXTsKIAkJaWYgKGxlbiA9PSAweDAwMDApIHsKIAkJCS8qIFJFU0VUIGNvbW1hbmQgKi8KIAkJCXJlc3VsdCA9IHhjX3Jlc2V0KGZlKTsKQEAgLTMxMiwxNSArMzMwLDE3IEBACiAJCQlidWZbMV0gPSBpMmNfc2VxdWVuY2VbaW5kZXggKyAxXTsKIAkJCXBvcyA9IDI7CiAJCQl3aGlsZSAocG9zIDwgbGVuKSB7Ci0JCQkJaWYgKChsZW4gLSBwb3MpID4gWENfTUFYX0kyQ19XUklURV9MRU5HVEggLSAyKSB7Ci0JCQkJCW5ieXRlc190b19zZW5kID0gWENfTUFYX0kyQ19XUklURV9MRU5HVEg7Ci0JCQkJfSBlbHNlIHsKKwkJCQlpZiAoKGxlbiAtIHBvcykgPiBYQ19NQVhfSTJDX1dSSVRFX0xFTkdUSCAtIDIpCisJCQkJCW5ieXRlc190b19zZW5kID0KKwkJCQkJCVhDX01BWF9JMkNfV1JJVEVfTEVOR1RIOworCQkJCWVsc2UKIAkJCQkJbmJ5dGVzX3RvX3NlbmQgPSAobGVuIC0gcG9zICsgMik7CisJCQkJZm9yIChpID0gMjsgaSA8IG5ieXRlc190b19zZW5kOyBpKyspIHsKKwkJCQkJYnVmW2ldID0gaTJjX3NlcXVlbmNlW2luZGV4ICsgcG9zICsKKwkJCQkJCWkgLSAyXTsKIAkJCQl9Ci0JCQkJZm9yIChpPTI7IGk8bmJ5dGVzX3RvX3NlbmQ7IGkrKykgewotCQkJCQlidWZbaV0gPSBpMmNfc2VxdWVuY2VbaW5kZXggKyBwb3MgKyBpIC0gMl07Ci0JCQkJfQotCQkJCXJlc3VsdCA9IHhjX3NlbmRfaTJjX2RhdGEocHJpdiwgYnVmLCBuYnl0ZXNfdG9fc2VuZCk7CisJCQkJcmVzdWx0ID0geGNfc2VuZF9pMmNfZGF0YShwcml2LCBidWYsCisJCQkJCW5ieXRlc190b19zZW5kKTsKIAogCQkJCWlmIChyZXN1bHQgIT0gWENfUkVTVUxUX1NVQ0NFU1MpCiAJCQkJCXJldHVybiByZXN1bHQ7CkBAIC0zNjksOCArMzg5LDcgQEAKIAlkcHJpbnRrKDEsICIlcyglZCkgU291cmNlID0gJXNcbiIsIF9fZnVuY19fLCByZl9tb2RlLAogCQlyZl9tb2RlID09IFhDX1JGX01PREVfQUlSID8gIkFOVEVOTkEiIDogIkNBQkxFIik7CiAKLQlpZiAoKHJmX21vZGUgIT0gWENfUkZfTU9ERV9BSVIpICYmIChyZl9tb2RlICE9IFhDX1JGX01PREVfQ0FCTEUpKQotCXsKKwlpZiAoKHJmX21vZGUgIT0gWENfUkZfTU9ERV9BSVIpICYmIChyZl9tb2RlICE9IFhDX1JGX01PREVfQ0FCTEUpKSB7CiAJCXJmX21vZGUgPSBYQ19SRl9NT0RFX0NBQkxFOwogCQlwcmludGsoS0VSTl9FUlIKIAkJCSIlcygpLCBJbnZhbGlkIG1vZGUsIGRlZmF1bHRpbmcgdG8gQ0FCTEUiLApAQCAtNTA5LDEzICs1MjgsMTMgQEAKIAl1OCBidWZbMl0gPSB7IHJlZyA+PiA4LCByZWcgJiAweGZmIH07CiAJdTggYnZhbFsyXSA9IHsgMCwgMCB9OwogCXN0cnVjdCBpMmNfbXNnIG1zZ1syXSA9IHsKLQkJeyAuYWRkciA9IHByaXYtPmNmZy0+aTJjX2FkZHJlc3MsCisJCXsgLmFkZHIgPSBwcml2LT5pMmNfcHJvcHMuYWRkciwKIAkJCS5mbGFncyA9IDAsIC5idWYgPSAmYnVmWzBdLCAubGVuID0gMiB9LAotCQl7IC5hZGRyID0gcHJpdi0+Y2ZnLT5pMmNfYWRkcmVzcywKKwkJeyAuYWRkciA9IHByaXYtPmkyY19wcm9wcy5hZGRyLAogCQkJLmZsYWdzID0gSTJDX01fUkQsIC5idWYgPSAmYnZhbFswXSwgLmxlbiA9IDIgfSwKIAl9OwogCi0JaWYgKGkyY190cmFuc2Zlcihwcml2LT5pMmMsIG1zZywgMikgIT0gMikgeworCWlmIChpMmNfdHJhbnNmZXIocHJpdi0+aTJjX3Byb3BzLmFkYXAsIG1zZywgMikgIT0gMikgewogCQlwcmludGsoS0VSTl9XQVJOSU5HICJ4YzUwMDA6IEkyQyByZWFkIGZhaWxlZFxuIik7CiAJCXJldHVybiAtRVJFTU9URUlPOwogCX0KQEAgLTUyNiwxMCArNTQ1LDEwIEBACiAKIHN0YXRpYyBpbnQgeGM1MDAwX3dyaXRlcmVncyhzdHJ1Y3QgeGM1MDAwX3ByaXYgKnByaXYsIHU4ICpidWYsIHU4IGxlbikKIHsKLQlzdHJ1Y3QgaTJjX21zZyBtc2cgPSB7IC5hZGRyID0gcHJpdi0+Y2ZnLT5pMmNfYWRkcmVzcywKKwlzdHJ1Y3QgaTJjX21zZyBtc2cgPSB7IC5hZGRyID0gcHJpdi0+aTJjX3Byb3BzLmFkZHIsCiAJCS5mbGFncyA9IDAsIC5idWYgPSBidWYsIC5sZW4gPSBsZW4gfTsKIAotCWlmIChpMmNfdHJhbnNmZXIocHJpdi0+aTJjLCAmbXNnLCAxKSAhPSAxKSB7CisJaWYgKGkyY190cmFuc2Zlcihwcml2LT5pMmNfcHJvcHMuYWRhcCwgJm1zZywgMSkgIT0gMSkgewogCQlwcmludGsoS0VSTl9FUlIgInhjNTAwMDogSTJDIHdyaXRlIGZhaWxlZCAobGVuPSVpKVxuIiwKIAkJCShpbnQpbGVuKTsKIAkJcmV0dXJuIC1FUkVNT1RFSU87CkBAIC01MzksMTcgKzU1OCwxNyBAQAogCiBzdGF0aWMgaW50IHhjNTAwMF9yZWFkcmVncyhzdHJ1Y3QgeGM1MDAwX3ByaXYgKnByaXYsIHU4ICpidWYsIHU4IGxlbikKIHsKLQlzdHJ1Y3QgaTJjX21zZyBtc2cgPSB7IC5hZGRyID0gcHJpdi0+Y2ZnLT5pMmNfYWRkcmVzcywKKwlzdHJ1Y3QgaTJjX21zZyBtc2cgPSB7IC5hZGRyID0gcHJpdi0+aTJjX3Byb3BzLmFkZHIsCiAJCS5mbGFncyA9IEkyQ19NX1JELCAuYnVmID0gYnVmLCAubGVuID0gbGVuIH07CiAKLQlpZiAoaTJjX3RyYW5zZmVyKHByaXYtPmkyYywgJm1zZywgMSkgIT0gMSkgewotCQlwcmludGsoS0VSTl9FUlIgInhjNTAwMCBJMkMgcmVhZCBmYWlsZWQgKGxlbj0laSlcbiIsKGludClsZW4pOworCWlmIChpMmNfdHJhbnNmZXIocHJpdi0+aTJjX3Byb3BzLmFkYXAsICZtc2csIDEpICE9IDEpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJ4YzUwMDAgSTJDIHJlYWQgZmFpbGVkIChsZW49JWkpXG4iLCAoaW50KWxlbik7CiAJCXJldHVybiAtRVJFTU9URUlPOwogCX0KIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCB4YzUwMDBfZnd1cGxvYWQoc3RydWN0IGR2Yl9mcm9udGVuZCogZmUpCitzdGF0aWMgaW50IHhjNTAwMF9md3VwbG9hZChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSkKIHsKIAlzdHJ1Y3QgeGM1MDAwX3ByaXYgKnByaXYgPSBmZS0+dHVuZXJfcHJpdjsKIAljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3OwpAQCAtNTU5LDcgKzU3OCw4IEBACiAJcHJpbnRrKEtFUk5fSU5GTyAieGM1MDAwOiB3YWl0aW5nIGZvciBmaXJtd2FyZSB1cGxvYWQgKCVzKS4uLlxuIiwKIAkJWEM1MDAwX0RFRkFVTFRfRklSTVdBUkUpOwogCi0JcmV0ID0gcmVxdWVzdF9maXJtd2FyZSgmZncsIFhDNTAwMF9ERUZBVUxUX0ZJUk1XQVJFLCAmcHJpdi0+aTJjLT5kZXYpOworCXJldCA9IHJlcXVlc3RfZmlybXdhcmUoJmZ3LCBYQzUwMDBfREVGQVVMVF9GSVJNV0FSRSwKKwkJJnByaXYtPmkyY19wcm9wcy5hZGFwLT5kZXYpOwogCWlmIChyZXQpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJ4YzUwMDA6IFVwbG9hZCBmYWlsZWQuIChmaWxlIG5vdCBmb3VuZD8pXG4iKTsKIAkJcmV0ID0gWENfUkVTVUxUX1JFU0VUX0ZBSUxVUkU7CkBAIC01NzUsNyArNTk1LDcgQEAKIAkJcmV0ID0gWENfUkVTVUxUX1JFU0VUX0ZBSUxVUkU7CiAJfSBlbHNlIHsKIAkJcHJpbnRrKEtFUk5fSU5GTyAieGM1MDAwOiBmaXJtd2FyZSB1cGxvYWRcbiIpOwotCQlyZXQgPSB4Y19sb2FkX2kyY19zZXF1ZW5jZShmZSwgIGZ3LT5kYXRhICk7CisJCXJldCA9IHhjX2xvYWRfaTJjX3NlcXVlbmNlKGZlLCAgZnctPmRhdGEpOwogCX0KIAogb3V0OgpAQCAtNjM0LDcgKzY1NCw3IEBACiAKIAlkcHJpbnRrKDEsICIlcygpIGZyZXF1ZW5jeT0lZCAoSHopXG4iLCBfX2Z1bmNfXywgcGFyYW1zLT5mcmVxdWVuY3kpOwogCi0Jc3dpdGNoKHBhcmFtcy0+dS52c2IubW9kdWxhdGlvbikgeworCXN3aXRjaCAocGFyYW1zLT51LnZzYi5tb2R1bGF0aW9uKSB7CiAJY2FzZSBWU0JfODoKIAljYXNlIFZTQl8xNjoKIAkJZHByaW50aygxLCAiJXMoKSBWU0IgbW9kdWxhdGlvblxuIiwgX19mdW5jX18pOwpAQCAtNjc1LDEwICs2OTUsMTAgQEAKIAkJcmV0dXJuIC1FUkVNT1RFSU87CiAJfQogCi0JcmV0ID0geGNfc2V0X0lGX2ZyZXF1ZW5jeShwcml2LCBwcml2LT5jZmctPmlmX2toeik7CisJcmV0ID0geGNfc2V0X0lGX2ZyZXF1ZW5jeShwcml2LCBwcml2LT5pZl9raHopOwogCWlmIChyZXQgIT0gWENfUkVTVUxUX1NVQ0NFU1MpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJ4YzUwMDA6IHhjX1NldF9JRl9mcmVxdWVuY3koJWQpIGZhaWxlZFxuIiwKLQkJCXByaXYtPmNmZy0+aWZfa2h6KTsKKwkJICAgICAgIHByaXYtPmlmX2toeik7CiAJCXJldHVybiAtRUlPOwogCX0KIApAQCAtNzMxLDQyICs3NTEsNDIgQEAKIAkvKiBGSVggTUU6IFNvbWUgdmlkZW8gc3RhbmRhcmRzIG1heSBoYXZlIHNldmVyYWwgcG9zc2libGUgYXVkaW8KIAkJICAgc3RhbmRhcmRzLiBXZSBzaW1wbHkgZGVmYXVsdCB0byBvbmUgb2YgdGhlbSBoZXJlLgogCSAqLwotCWlmKHBhcmFtcy0+c3RkICYgVjRMMl9TVERfTU4pIHsKKwlpZiAocGFyYW1zLT5zdGQgJiBWNEwyX1NURF9NTikgewogCQkvKiBkZWZhdWx0IHRvIEJUU0MgYXVkaW8gc3RhbmRhcmQgKi8KIAkJcHJpdi0+dmlkZW9fc3RhbmRhcmQgPSBNTl9OVFNDX1BBTF9CVFNDOwogCQlnb3RvIHR1bmVfY2hhbm5lbDsKIAl9CiAKLQlpZihwYXJhbXMtPnN0ZCAmIFY0TDJfU1REX1BBTF9CRykgeworCWlmIChwYXJhbXMtPnN0ZCAmIFY0TDJfU1REX1BBTF9CRykgewogCQkvKiBkZWZhdWx0IHRvIE5JQ0FNIGF1ZGlvIHN0YW5kYXJkICovCiAJCXByaXYtPnZpZGVvX3N0YW5kYXJkID0gQkdfUEFMX05JQ0FNOwogCQlnb3RvIHR1bmVfY2hhbm5lbDsKIAl9CiAKLQlpZihwYXJhbXMtPnN0ZCAmIFY0TDJfU1REX1BBTF9JKSB7CisJaWYgKHBhcmFtcy0+c3RkICYgVjRMMl9TVERfUEFMX0kpIHsKIAkJLyogZGVmYXVsdCB0byBOSUNBTSBhdWRpbyBzdGFuZGFyZCAqLwogCQlwcml2LT52aWRlb19zdGFuZGFyZCA9IElfUEFMX05JQ0FNOwogCQlnb3RvIHR1bmVfY2hhbm5lbDsKIAl9CiAKLQlpZihwYXJhbXMtPnN0ZCAmIFY0TDJfU1REX1BBTF9ESykgeworCWlmIChwYXJhbXMtPnN0ZCAmIFY0TDJfU1REX1BBTF9ESykgewogCQkvKiBkZWZhdWx0IHRvIE5JQ0FNIGF1ZGlvIHN0YW5kYXJkICovCiAJCXByaXYtPnZpZGVvX3N0YW5kYXJkID0gREtfUEFMX05JQ0FNOwogCQlnb3RvIHR1bmVfY2hhbm5lbDsKIAl9CiAKLQlpZihwYXJhbXMtPnN0ZCAmIFY0TDJfU1REX1NFQ0FNX0RLKSB7CisJaWYgKHBhcmFtcy0+c3RkICYgVjRMMl9TVERfU0VDQU1fREspIHsKIAkJLyogZGVmYXVsdCB0byBBMiBESzEgYXVkaW8gc3RhbmRhcmQgKi8KIAkJcHJpdi0+dmlkZW9fc3RhbmRhcmQgPSBES19TRUNBTV9BMkRLMTsKIAkJZ290byB0dW5lX2NoYW5uZWw7CiAJfQogCi0JaWYocGFyYW1zLT5zdGQgJiBWNEwyX1NURF9TRUNBTV9MKSB7CisJaWYgKHBhcmFtcy0+c3RkICYgVjRMMl9TVERfU0VDQU1fTCkgewogCQlwcml2LT52aWRlb19zdGFuZGFyZCA9IExfU0VDQU1fTklDQU07CiAJCWdvdG8gdHVuZV9jaGFubmVsOwogCX0KIAotCWlmKHBhcmFtcy0+c3RkICYgVjRMMl9TVERfU0VDQU1fTEMpIHsKKwlpZiAocGFyYW1zLT5zdGQgJiBWNEwyX1NURF9TRUNBTV9MQykgewogCQlwcml2LT52aWRlb19zdGFuZGFyZCA9IExDX1NFQ0FNX05JQ0FNOwogCQlnb3RvIHR1bmVfY2hhbm5lbDsKIAl9CkBAIC03NzQsNyArNzk0LDcgQEAKIHR1bmVfY2hhbm5lbDoKIAlyZXQgPSB4Y19TZXRTaWduYWxTb3VyY2UocHJpdiwgcHJpdi0+cmZfbW9kZSk7CiAJaWYgKHJldCAhPSBYQ19SRVNVTFRfU1VDQ0VTUykgewotCXByaW50ayhLRVJOX0VSUgorCQlwcmludGsoS0VSTl9FUlIKIAkJCSJ4YzUwMDA6IHhjX1NldFNpZ25hbFNvdXJjZSglZCkgZmFpbGVkXG4iLAogCQkJcHJpdi0+cmZfbW9kZSk7CiAJCXJldHVybiAtRVJFTU9URUlPOwpAQCAtODQ2LDcgKzg2Niw3IEBACiAJICogSTJDIHRyYW5zYWN0aW9ucyB1bnRpbCBjYWxpYnJhdGlvbiBpcyBjb21wbGV0ZS4gIFRoaXMgd2F5IHdlCiAJICogZG9uJ3QgaGF2ZSB0byByZWx5IG9uIGNsb2NrIHN0cmV0Y2hpbmcgd29ya2luZy4KIAkgKi8KLQl4Y193YWl0KCAxMDAgKTsKKwl4Y193YWl0KDEwMCk7CiAKIAkvKiBEZWZhdWx0IHRvICJDQUJMRSIgbW9kZSAqLwogCXJldCB8PSB4Y193cml0ZV9yZWcocHJpdiwgWFJFR19TSUdOQUxTT1VSQ0UsIFhDX1JGX01PREVfQ0FCTEUpOwpAQCAtODY4LDE1ICs4ODgsMTMgQEAKIAkgKi8KIAogCXJldCA9IHhjX3NodXRkb3duKHByaXYpOwotCWlmKHJldCAhPSBYQ19SRVNVTFRfU1VDQ0VTUykgeworCWlmIChyZXQgIT0gWENfUkVTVUxUX1NVQ0NFU1MpIHsKIAkJcHJpbnRrKEtFUk5fRVJSCiAJCQkieGM1MDAwOiAlcygpIHVuYWJsZSB0byBzaHV0ZG93biB0dW5lclxuIiwKIAkJCV9fZnVuY19fKTsKIAkJcmV0dXJuIC1FUkVNT1RFSU87Ci0JfQotCWVsc2UgeworCX0gZWxzZQogCQlyZXR1cm4gWENfUkVTVUxUX1NVQ0NFU1M7Ci0JfQogfQogCiBzdGF0aWMgaW50IHhjNTAwMF9pbml0KHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlKQpAQCAtODk3LDkgKzkxNSwxOSBAQAogCiBzdGF0aWMgaW50IHhjNTAwMF9yZWxlYXNlKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlKQogeworCXN0cnVjdCB4YzUwMDBfcHJpdiAqcHJpdiA9IGZlLT50dW5lcl9wcml2OworCiAJZHByaW50aygxLCAiJXMoKVxuIiwgX19mdW5jX18pOwotCWtmcmVlKGZlLT50dW5lcl9wcml2KTsKKworCW11dGV4X2xvY2soJnhjNTAwMF9saXN0X211dGV4KTsKKworCWlmIChwcml2KQorCQloeWJyaWRfdHVuZXJfcmVsZWFzZV9zdGF0ZShwcml2KTsKKworCW11dGV4X3VubG9jaygmeGM1MDAwX2xpc3RfbXV0ZXgpOworCiAJZmUtPnR1bmVyX3ByaXYgPSBOVUxMOworCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTkyNCwzMSArOTUyLDQ1IEBACiAKIHN0cnVjdCBkdmJfZnJvbnRlbmQgKnhjNTAwMF9hdHRhY2goc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsCiAJCQkJICAgc3RydWN0IGkyY19hZGFwdGVyICppMmMsCi0JCQkJICAgc3RydWN0IHhjNTAwMF9jb25maWcgKmNmZywgdm9pZCAqZGV2cHRyKQorCQkJCSAgIHN0cnVjdCB4YzUwMDBfY29uZmlnICpjZmcpCiB7CiAJc3RydWN0IHhjNTAwMF9wcml2ICpwcml2ID0gTlVMTDsKKwlpbnQgaW5zdGFuY2U7CiAJdTE2IGlkID0gMDsKIAotCWRwcmludGsoMSwgIiVzKClcbiIsIF9fZnVuY19fKTsKKwlkcHJpbnRrKDEsICIlcyglZC0lMDR4KVxuIiwgX19mdW5jX18sCisJCWkyYyA/IGkyY19hZGFwdGVyX2lkKGkyYykgOiAtMSwKKwkJY2ZnID8gY2ZnLT5pMmNfYWRkcmVzcyA6IC0xKTsKIAotCXByaXYgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgeGM1MDAwX3ByaXYpLCBHRlBfS0VSTkVMKTsKLQlpZiAocHJpdiA9PSBOVUxMKQotCQlyZXR1cm4gTlVMTDsKKwltdXRleF9sb2NrKCZ4YzUwMDBfbGlzdF9tdXRleCk7CiAKLQlwcml2LT5jZmcgPSBjZmc7Ci0JcHJpdi0+YmFuZHdpZHRoID0gQkFORFdJRFRIXzZfTUhaOwotCXByaXYtPmkyYyA9IGkyYzsKLQlwcml2LT5kZXZwdHIgPSBkZXZwdHI7CisJaW5zdGFuY2UgPSBoeWJyaWRfdHVuZXJfcmVxdWVzdF9zdGF0ZShzdHJ1Y3QgeGM1MDAwX3ByaXYsIHByaXYsCisJCQkJCSAgICAgIGh5YnJpZF90dW5lcl9pbnN0YW5jZV9saXN0LAorCQkJCQkgICAgICBpMmMsIGNmZy0+aTJjX2FkZHJlc3MsICJ4YzUwMDAiKTsKKwlzd2l0Y2ggKGluc3RhbmNlKSB7CisJY2FzZSAwOgorCQlnb3RvIGZhaWw7CisJCWJyZWFrOworCWNhc2UgMToKKwkJLyogbmV3IHR1bmVyIGluc3RhbmNlICovCisJCXByaXYtPmJhbmR3aWR0aCA9IEJBTkRXSURUSF82X01IWjsKKwkJcHJpdi0+aWZfa2h6ID0gY2ZnLT5pZl9raHo7CisKKwkJZmUtPnR1bmVyX3ByaXYgPSBwcml2OworCQlicmVhazsKKwlkZWZhdWx0OgorCQkvKiBleGlzdGluZyB0dW5lciBpbnN0YW5jZSAqLworCQlmZS0+dHVuZXJfcHJpdiA9IHByaXY7CisJCWJyZWFrOworCX0KIAogCS8qIENoZWNrIGlmIGZpcm13YXJlIGhhcyBiZWVuIGxvYWRlZC4gSXQgaXMgcG9zc2libGUgdGhhdCBhbm90aGVyCiAJICAgaW5zdGFuY2Ugb2YgdGhlIGRyaXZlciBoYXMgbG9hZGVkIHRoZSBmaXJtd2FyZS4KIAkgKi8KLQlpZiAoeGM1MDAwX3JlYWRyZWcocHJpdiwgWFJFR19QUk9EVUNUX0lELCAmaWQpICE9IDApIHsKLQkJa2ZyZWUocHJpdik7Ci0JCXJldHVybiBOVUxMOwotCX0KKwlpZiAoeGM1MDAwX3JlYWRyZWcocHJpdiwgWFJFR19QUk9EVUNUX0lELCAmaWQpICE9IDApCisJCWdvdG8gZmFpbDsKIAotCXN3aXRjaChpZCkgeworCXN3aXRjaCAoaWQpIHsKIAljYXNlIFhDX1BST0RVQ1RfSURfRldfTE9BREVEOgogCQlwcmludGsoS0VSTl9JTkZPCiAJCQkieGM1MDAwOiBTdWNjZXNzZnVsbHkgaWRlbnRpZmllZCBhdCBhZGRyZXNzIDB4JTAyeFxuIiwKQEAgLTk2NywxOSArMTAwOSwyMyBAQAogCQlwcmludGsoS0VSTl9FUlIKIAkJCSJ4YzUwMDA6IERldmljZSBub3QgZm91bmQgYXQgYWRkciAweCUwMnggKDB4JXgpXG4iLAogCQkJY2ZnLT5pMmNfYWRkcmVzcywgaWQpOwotCQlrZnJlZShwcml2KTsKLQkJcmV0dXJuIE5VTEw7CisJCWdvdG8gZmFpbDsKIAl9CiAKKwltdXRleF91bmxvY2soJnhjNTAwMF9saXN0X211dGV4KTsKKwogCW1lbWNweSgmZmUtPm9wcy50dW5lcl9vcHMsICZ4YzUwMDBfdHVuZXJfb3BzLAogCQlzaXplb2Yoc3RydWN0IGR2Yl90dW5lcl9vcHMpKTsKIAotCWZlLT50dW5lcl9wcml2ID0gcHJpdjsKLQogCWlmICh4YzUwMDBfbG9hZF9md19vbl9hdHRhY2gpCiAJCXhjNTAwMF9pbml0KGZlKTsKIAogCXJldHVybiBmZTsKK2ZhaWw6CisJbXV0ZXhfdW5sb2NrKCZ4YzUwMDBfbGlzdF9tdXRleCk7CisKKwl4YzUwMDBfcmVsZWFzZShmZSk7CisJcmV0dXJuIE5VTEw7CiB9CiBFWFBPUlRfU1lNQk9MKHhjNTAwMF9hdHRhY2gpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMveGM1MDAwLmggYi9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMveGM1MDAwLmgKaW5kZXggNTM4OWY3NC4uZjRjMTQ2NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL3hjNTAwMC5oCisrKyBiL2RyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycy94YzUwMDAuaApAQCAtMzAsOCArMzAsNiBAQAogc3RydWN0IHhjNTAwMF9jb25maWcgewogCXU4ICAgaTJjX2FkZHJlc3M7CiAJdTMyICBpZl9raHo7Ci0KLQlpbnQgICgqdHVuZXJfY2FsbGJhY2spICh2b2lkICpwcml2LCBpbnQgY29tbWFuZCwgaW50IGFyZyk7CiB9OwogCiAvKiB4YzUwMDAgY2FsbGJhY2sgY29tbWFuZCAqLwpAQCAtNDcsMTkgKzQ1LDE3IEBACiAKICNpZiBkZWZpbmVkKENPTkZJR19NRURJQV9UVU5FUl9YQzUwMDApIHx8IFwKICAgICAoZGVmaW5lZChDT05GSUdfTUVESUFfVFVORVJfWEM1MDAwX01PRFVMRSkgJiYgZGVmaW5lZChNT0RVTEUpKQotZXh0ZXJuIHN0cnVjdCBkdmJfZnJvbnRlbmQqIHhjNTAwMF9hdHRhY2goc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsCitleHRlcm4gc3RydWN0IGR2Yl9mcm9udGVuZCAqeGM1MDAwX2F0dGFjaChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwKIAkJCQkJICBzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyYywKLQkJCQkJICBzdHJ1Y3QgeGM1MDAwX2NvbmZpZyAqY2ZnLAotCQkJCQkgIHZvaWQgKmRldnB0cik7CisJCQkJCSAgc3RydWN0IHhjNTAwMF9jb25maWcgKmNmZyk7CiAjZWxzZQotc3RhdGljIGlubGluZSBzdHJ1Y3QgZHZiX2Zyb250ZW5kKiB4YzUwMDBfYXR0YWNoKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLAorc3RhdGljIGlubGluZSBzdHJ1Y3QgZHZiX2Zyb250ZW5kICp4YzUwMDBfYXR0YWNoKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLAogCQkJCQkJIHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjLAotCQkJCQkJIHN0cnVjdCB4YzUwMDBfY29uZmlnICpjZmcsCi0JCQkJCQkgdm9pZCAqZGV2cHRyKQorCQkJCQkJIHN0cnVjdCB4YzUwMDBfY29uZmlnICpjZmcpCiB7CiAJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IGRyaXZlciBkaXNhYmxlZCBieSBLY29uZmlnXG4iLCBfX2Z1bmNfXyk7CiAJcmV0dXJuIE5VTEw7CiB9Ci0jZW5kaWYgLy8gQ09ORklHX01FRElBX1RVTkVSX1hDNTAwMAorI2VuZGlmCiAKLSNlbmRpZiAvLyBfX1hDNTAwMF9IX18KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL3hjNTAwMF9wcml2LmggYi9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMveGM1MDAwX3ByaXYuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjJhMDA3NC4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMveGM1MDAwX3ByaXYuaAorKysgL2Rldi9udWxsCkBAIC0xLDM3ICswLDAgQEAKLS8qCi0gKiAgRHJpdmVyIGZvciBYY2VpdmUgWEM1MDAwICJRQU0vOFZTQiBzaW5nbGUgY2hpcCB0dW5lciIKLSAqCi0gKiAgQ29weXJpZ2h0IChjKSAyMDA3IFN0ZXZlbiBUb3RoIDxzdG90aEBsaW51eHR2Lm9yZz4KLSAqCi0gKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKgotICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KLSAqLwotCi0jaWZuZGVmIFhDNTAwMF9QUklWX0gKLSNkZWZpbmUgWEM1MDAwX1BSSVZfSAotCi1zdHJ1Y3QgeGM1MDAwX3ByaXYgewotCXN0cnVjdCB4YzUwMDBfY29uZmlnICpjZmc7Ci0Jc3RydWN0IGkyY19hZGFwdGVyICAgKmkyYzsKLQotCXUzMiBmcmVxX2h6OwotCXUzMiBiYW5kd2lkdGg7Ci0JdTggIHZpZGVvX3N0YW5kYXJkOwotCXU4ICByZl9tb2RlOwotCi0Jdm9pZCAqZGV2cHRyOwotfTsKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9LY29uZmlnIGIvZHJpdmVycy9tZWRpYS9kdmIvS2NvbmZpZwppbmRleCA4YmMxNDQ1Li4wYmNkODUyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9LY29uZmlnCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL0tjb25maWcKQEAgLTIwLDcgKzIwLDYgQEAKIHNvdXJjZSAiZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9LY29uZmlnIgogc291cmNlICJkcml2ZXJzL21lZGlhL2R2Yi90dHVzYi1idWRnZXQvS2NvbmZpZyIKIHNvdXJjZSAiZHJpdmVycy9tZWRpYS9kdmIvdHR1c2ItZGVjL0tjb25maWciCi1zb3VyY2UgImRyaXZlcnMvbWVkaWEvZHZiL2NpbmVyZ3lUMi9LY29uZmlnIgogc291cmNlICJkcml2ZXJzL21lZGlhL2R2Yi9zaWFuby9LY29uZmlnIgogCiBjb21tZW50ICJTdXBwb3J0ZWQgRmxleENvcElJIChCMkMyKSBBZGFwdGVycyIKQEAgLTM1LDYgKzM0LDEwIEBACiAJZGVwZW5kcyBvbiBEVkJfQ09SRSAmJiBQQ0kgJiYgSTJDCiBzb3VyY2UgImRyaXZlcnMvbWVkaWEvZHZiL3BsdXRvMi9LY29uZmlnIgogCitjb21tZW50ICJTdXBwb3J0ZWQgU0RNQyBETTExMDUgQWRhcHRlcnMiCisJZGVwZW5kcyBvbiBEVkJfQ09SRSAmJiBQQ0kgJiYgSTJDCitzb3VyY2UgImRyaXZlcnMvbWVkaWEvZHZiL2RtMTEwNS9LY29uZmlnIgorCiBjb21tZW50ICJTdXBwb3J0ZWQgRFZCIEZyb250ZW5kcyIKIAlkZXBlbmRzIG9uIERWQl9DT1JFCiBzb3VyY2UgImRyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9LY29uZmlnIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvTWFrZWZpbGUgYi9kcml2ZXJzL21lZGlhL2R2Yi9NYWtlZmlsZQppbmRleCBkNmJhNGQxLi5mOTFlOWViIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9NYWtlZmlsZQorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9NYWtlZmlsZQpAQCAtMiw0ICsyLDQgQEAKICMgTWFrZWZpbGUgZm9yIHRoZSBrZXJuZWwgbXVsdGltZWRpYSBkZXZpY2UgZHJpdmVycy4KICMKIAotb2JqLXkgICAgICAgIDo9IGR2Yi1jb3JlLyBmcm9udGVuZHMvIHR0cGNpLyB0dHVzYi1kZWMvIHR0dXNiLWJ1ZGdldC8gYjJjMi8gYnQ4eHgvIGNpbmVyZ3lUMi8gZHZiLXVzYi8gcGx1dG8yLyBzaWFuby8KK29iai15ICAgICAgICA6PSBkdmItY29yZS8gZnJvbnRlbmRzLyB0dHBjaS8gdHR1c2ItZGVjLyB0dHVzYi1idWRnZXQvIGIyYzIvIGJ0OHh4LyBkdmItdXNiLyBwbHV0bzIvIHNpYW5vLyBkbTExMDUvCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9iMmMyL2ZsZXhjb3AtZG1hLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9iMmMyL2ZsZXhjb3AtZG1hLmMKaW5kZXggYTkxZWQyOC4uMjZmMDAxMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvYjJjMi9mbGV4Y29wLWRtYS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2IyYzIvZmxleGNvcC1kbWEuYwpAQCAtMTAsNyArMTAsNyBAQAogaW50IGZsZXhjb3BfZG1hX2FsbG9jYXRlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBzdHJ1Y3QgZmxleGNvcF9kbWEgKmRtYSwgdTMyIHNpemUpCiB7CiAJdTggKnRjcHU7Ci0JZG1hX2FkZHJfdCB0ZG1hOworCWRtYV9hZGRyX3QgdGRtYSA9IDA7CiAKIAlpZiAoc2l6ZSAlIDIpIHsKIAkJZXJyKCJkbWEgYnVmZmVyc2l6ZSBoYXMgdG8gYmUgZXZlbi4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2J0OHh4L2R2Yi1idDh4eC5jIGIvZHJpdmVycy9tZWRpYS9kdmIvYnQ4eHgvZHZiLWJ0OHh4LmMKaW5kZXggNmFmYmZiYi4uNDg3NjJhMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvYnQ4eHgvZHZiLWJ0OHh4LmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvYnQ4eHgvZHZiLWJ0OHh4LmMKQEAgLTcwMiw3ICs3MDIsNyBAQAogCX0KIAogCWlmIChjYXJkLT5mZSA9PSBOVUxMKQotCQlwcmludGsoImR2Yi1idDh4eDogQSBmcm9udGVuZCBkcml2ZXIgd2FzIG5vdCBmb3VuZCBmb3IgZGV2aWNlICUwNHgvJTA0eCBzdWJzeXN0ZW0gJTA0eC8lMDR4XG4iLAorCQlwcmludGsoImR2Yi1idDh4eDogQSBmcm9udGVuZCBkcml2ZXIgd2FzIG5vdCBmb3VuZCBmb3IgZGV2aWNlIFslMDR4OiUwNHhdIHN1YnN5c3RlbSBbJTA0eDolMDR4XVxuIiwKIAkJICAgICAgIGNhcmQtPmJ0LT5kZXYtPnZlbmRvciwKIAkJICAgICAgIGNhcmQtPmJ0LT5kZXYtPmRldmljZSwKIAkJICAgICAgIGNhcmQtPmJ0LT5kZXYtPnN1YnN5c3RlbV92ZW5kb3IsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9jaW5lcmd5VDIvS2NvbmZpZyBiL2RyaXZlcnMvbWVkaWEvZHZiL2NpbmVyZ3lUMi9LY29uZmlnCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMDM1MTNiLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2NpbmVyZ3lUMi9LY29uZmlnCisrKyAvZGV2L251bGwKQEAgLTEsODUgKzAsMCBAQAotY29uZmlnIERWQl9DSU5FUkdZVDIKLQl0cmlzdGF0ZSAiVGVycmF0ZWMgQ2luZXJneVQyL3FhbnUgVVNCMiBEVkItVCByZWNlaXZlciIKLQlkZXBlbmRzIG9uIERWQl9DT1JFICYmIFVTQiAmJiBJTlBVVAotCWhlbHAKLQkgIFN1cHBvcnQgZm9yICJUZXJyYVRlYyBDaW5lcmd5VDIiIFVTQjIuMCBIaWdoc3BlZWQgRFZCIFJlY2VpdmVycwotCi0JICBTYXkgWSBpZiB5b3Ugb3duIHN1Y2ggYSBkZXZpY2UgYW5kIHdhbnQgdG8gdXNlIGl0LgotCi0KLWNvbmZpZyBEVkJfQ0lORVJHWVQyX1RVTklORwotCWJvb2wgInNvcGhpc3RpY2F0ZWQgZmluZS10dW5pbmcgZm9yIENpbmVyZ3lUMiBjYXJkcyIKLQlkZXBlbmRzIG9uIERWQl9DSU5FUkdZVDIKLQloZWxwCi0JICBIZXJlIHlvdSBjYW4gZmluZS10dW5lIHNvbWUgcGFyYW1ldGVycyBvZiB0aGUgQ2luZXJneVQyIGRyaXZlci4KLQotCSAgTm9ybWFsbHkgeW91IGRvbid0IG5lZWQgdG8gdG91Y2ggdGhpcywgYnV0IGluIGV4b3RpYyBzZXR1cHMgeW91Ci0JICBtYXkgZmluZS10dW5lIHlvdXIgc2V0dXAgYW5kIGFkanVzdCBlLmcuIERNQSBidWZmZXIgc2l6ZXMgZm9yCi0JICBhIHBhcnRpY3VsYXIgYXBwbGljYXRpb24uCi0KLQotY29uZmlnIERWQl9DSU5FUkdZVDJfU1RSRUFNX1VSQl9DT1VOVAotCWludCAiTnVtYmVyIG9mIHF1ZXVlZCBVU0IgUmVxdWVzdCBCbG9ja3MgZm9yIEhpZ2hzcGVlZCBTdHJlYW0gVHJhbnNmZXJzIgotCWRlcGVuZHMgb24gRFZCX0NJTkVSR1lUMl9UVU5JTkcKLQlkZWZhdWx0ICIzMiIKLQloZWxwCi0JICBVU0IgUmVxdWVzdCBCbG9ja3MgZm9yIEhpZ2hzcGVlZCBTdHJlYW0gdHJhbnNmZXJzIGFyZSBzY2hlZHVsZWQgaW4KLQkgIGEgcXVldWUgZm9yIHRoZSBIb3N0IENvbnRyb2xsZXIuCi0KLQkgIFVzdWFsbHkgdGhlIGRlZmF1bHQgdmFsdWUgaXMgYSBzYWZlIGNob2ljZS4KLQotCSAgWW91IG1heSBpbmNyZWFzZSB0aGlzIG51bWJlciBpZiB5b3UgYXJlIHVzaW5nIHRoaXMgZGV2aWNlIGluIGEKLQkgIFNlcnZlciBFbnZpcm9ubWVudCB3aXRoIG1hbnkgaGlnaC10cmFmZmljIFVTQiBIaWdoc3BlZWQgZGV2aWNlcwotCSAgc2hhcmluZyB0aGUgc2FtZSBVU0IgYnVzLgotCi0KLWNvbmZpZyBEVkJfQ0lORVJHWVQyX1NUUkVBTV9CVUZfU0laRQotCWludCAiU2l6ZSBvZiBVUkIgU3RyZWFtIEJ1ZmZlcnMgZm9yIEhpZ2hzcGVlZCBUcmFuc2ZlcnMiCi0JZGVwZW5kcyBvbiBEVkJfQ0lORVJHWVQyX1RVTklORwotCWRlZmF1bHQgIjUxMiIKLQloZWxwCi0JICBTaG91bGQgYmUgYSBtdWx0aXBsZSBvZiBuYXRpdmUgYnVmZmVyIHNpemUgb2YgNTEyIGJ5dGVzLgotCSAgRGVmYXVsdCB2YWx1ZSBpcyBhIHNhZmUgY2hvaWNlLgotCi0JICBZb3UgbWF5IGluY3JlYXNlIHRoaXMgbnVtYmVyIGlmIHlvdSBhcmUgdXNpbmcgdGhpcyBkZXZpY2UgaW4gYQotCSAgU2VydmVyIEVudmlyb25tZW50IHdpdGggbWFueSBoaWdoLXRyYWZmaWMgVVNCIEhpZ2hzcGVlZCBkZXZpY2VzCi0JICBzaGFyaW5nIHRoZSBzYW1lIFVTQiBidXMuCi0KLQotY29uZmlnIERWQl9DSU5FUkdZVDJfUVVFUllfSU5URVJWQUwKLQlpbnQgIlN0YXR1cyB1cGRhdGUgaW50ZXJ2YWwgW21pbGxpc2Vjb25kc10iCi0JZGVwZW5kcyBvbiBEVkJfQ0lORVJHWVQyX1RVTklORwotCWRlZmF1bHQgIjI1MCIKLQloZWxwCi0JICBUaGlzIGlzIHRoZSBpbnRlcnZhbCBmb3Igc3RhdHVzIHJlYWRvdXRzIGZyb20gdGhlIGRlbW9kdWxhdG9yLgotCSAgWW91IG1heSB0cnkgbG93ZXIgdmFsdWVzIGlmIHlvdSBuZWVkIG1vcmUgcmVzcG9uc2l2ZSBzaWduYWwgcXVhbGl0eQotCSAgbWVhc3VyZW1lbnRzLgotCi0JICBQbGVhc2Uga2VlcCBpbiBtaW5kIHRoYXQgdGhlc2UgdXBkYXRlcyBjYXVzZSB0cmFmZmljIG9uIHRoZSB0dW5lcgotCSAgY29udHJvbCBidXMgYW5kIHRodXMgbWF5IG9yIG1heSBub3QgYWZmZWN0IHJlY2VwdGlvbiBzZW5zaXRpdml0eS4KLQotCSAgVGhlIGRlZmF1bHQgdmFsdWUgc2hvdWxkIGJlIGEgc2FmZSBjaG9pY2UgZm9yIGNvbW1vbiBhcHBsaWNhdGlvbnMuCi0KLQotY29uZmlnIERWQl9DSU5FUkdZVDJfRU5BQkxFX1JDX0lOUFVUX0RFVklDRQotCWJvb2wgIlJlZ2lzdGVyIHRoZSBvbmJvYXJkIElSIFJlbW90ZSBDb250cm9sIFJlY2VpdmVyIGFzIElucHV0IERldmljZSIKLQlkZXBlbmRzIG9uIERWQl9DSU5FUkdZVDJfVFVOSU5HCi0JZGVmYXVsdCB5Ci0JaGVscAotCSAgRW5hYmxlIHRoaXMgb3B0aW9uIGlmIHlvdSB3YW50IHRvIHVzZSB0aGUgb25ib2FyZCBJbmZyYXJlZCBSZW1vdGUKLQkgIENvbnRyb2wgUmVjZWl2ZXIgYXMgTGludXgtSW5wdXQgZGV2aWNlLgotCi0JICBSaWdodCBub3cgb25seSB0aGUga2V5Y29kZSB0YWJsZSBmb3IgdGhlIGRlZmF1bHQgUmVtb3RlIENvbnRyb2wKLQkgIGRlbGl2ZXJlZCB3aXRoIHRoZSBkZXZpY2UgaXMgc3VwcG9ydGVkLCBwbGVhc2Ugc2VlIHRoZSBkcml2ZXIKLQkgIHNvdXJjZSBjb2RlIHRvIGZpbmQgb3V0IGhvdyB0byBhZGQgc3VwcG9ydCBmb3Igb3RoZXIgY29udHJvbHMuCi0KLQotY29uZmlnIERWQl9DSU5FUkdZVDJfUkNfUVVFUllfSU5URVJWQUwKLQlpbnQgIkluZnJhcmVkIFJlbW90ZSBDb250cm9sbGVyIHVwZGF0ZSBpbnRlcnZhbCBbbWlsbGlzZWNvbmRzXSIKLQlkZXBlbmRzIG9uIERWQl9DSU5FUkdZVDJfVFVOSU5HICYmIERWQl9DSU5FUkdZVDJfRU5BQkxFX1JDX0lOUFVUX0RFVklDRQotCWRlZmF1bHQgIjUwIgotCWhlbHAKLQkgIElmIHlvdSBoYXZlIGEgdmVyeSBmYXN0LXJlcGVhdGluZyByZW1vdGUgY29udHJvbCB5b3UgY2FuIHRyeSBsb3dlcgotCSAgdmFsdWVzLCBmb3Igbm9ybWFsIGNvbnN1bWVyIHJlY2VpdmVycyB0aGUgZGVmYXVsdCB2YWx1ZSBzaG91bGQgYmUKLQkgIGEgc2FmZSBjaG9pY2UuCi0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2NpbmVyZ3lUMi9NYWtlZmlsZSBiL2RyaXZlcnMvbWVkaWEvZHZiL2NpbmVyZ3lUMi9NYWtlZmlsZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDc2MmQ4Yy4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9jaW5lcmd5VDIvTWFrZWZpbGUKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLW9iai0kKENPTkZJR19EVkJfQ0lORVJHWVQyKSArPSBjaW5lcmd5VDIubwotCi1FWFRSQV9DRkxBR1MgKz0gLUlkcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2NpbmVyZ3lUMi9jaW5lcmd5VDIuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2NpbmVyZ3lUMi9jaW5lcmd5VDIuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTgyNGYzNy4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9jaW5lcmd5VDIvY2luZXJneVQyLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxMTA1ICswLDAgQEAKLS8qCi0gKiBUZXJyYVRlYyBDaW5lcmd5IFTCsi9xYW51IFVTQjIgRFZCLVQgYWRhcHRlci4KLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQgRGFuaWVsIE1hY2sgPGRhbmllbEBxYW51LmRlPiBhbmQKLSAqCQkgICAgSG9sZ2VyIFdhZWNodGxlciA8aG9sZ2VyQHFhbnUuZGU+Ci0gKgotICogIFByb3RvY29sIFNwZWMgcHVibGlzaGVkIG9uIGh0dHA6Ly9xYW51LmRlL3NwZWNzL3RlcnJhdGVjX2NpbmVyZ3lUMi5wZGYKLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KLSAqCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0jaW5jbHVkZSA8bGludXgvdXNiLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KLSNpbmNsdWRlIDxsaW51eC9kdmIvZnJvbnRlbmQuaD4KLSNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgotI2luY2x1ZGUgPGxpbnV4L21tLmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+Ci0KLSNpbmNsdWRlICJkbXhkZXYuaCIKLSNpbmNsdWRlICJkdmJfZGVtdXguaCIKLSNpbmNsdWRlICJkdmJfbmV0LmgiCi0KLSNpZmRlZiBDT05GSUdfRFZCX0NJTkVSR1lUMl9UVU5JTkcKLQkjZGVmaW5lIFNUUkVBTV9VUkJfQ09VTlQgKENPTkZJR19EVkJfQ0lORVJHWVQyX1NUUkVBTV9VUkJfQ09VTlQpCi0JI2RlZmluZSBTVFJFQU1fQlVGX1NJWkUgKENPTkZJR19EVkJfQ0lORVJHWVQyX1NUUkVBTV9CVUZfU0laRSkKLQkjZGVmaW5lIFFVRVJZX0lOVEVSVkFMIChDT05GSUdfRFZCX0NJTkVSR1lUMl9RVUVSWV9JTlRFUlZBTCkKLQkjaWZkZWYgQ09ORklHX0RWQl9DSU5FUkdZVDJfRU5BQkxFX1JDX0lOUFVUX0RFVklDRQotCQkjZGVmaW5lIFJDX1FVRVJZX0lOVEVSVkFMIChDT05GSUdfRFZCX0NJTkVSR1lUMl9SQ19RVUVSWV9JTlRFUlZBTCkKLQkJI2RlZmluZSBFTkFCTEVfUkMgKDEpCi0JI2VuZGlmCi0jZWxzZQotCSNkZWZpbmUgU1RSRUFNX1VSQl9DT1VOVCAoMzIpCi0JI2RlZmluZSBTVFJFQU1fQlVGX1NJWkUgKDUxMikJLyogYnl0ZXMgKi8KLQkjZGVmaW5lIEVOQUJMRV9SQyAoMSkKLQkjZGVmaW5lIFJDX1FVRVJZX0lOVEVSVkFMICg1MCkJLyogbWlsbGlzZWNvbmRzICovCi0JI2RlZmluZSBRVUVSWV9JTlRFUlZBTCAoMzMzKQkvKiBtaWxsaXNlY29uZHMgKi8KLSNlbmRpZgotCi0jZGVmaW5lIERSSVZFUl9OQU1FICJUZXJyYVRlYy9xYW51IFVTQjIuMCBIaWdoc3BlZWQgRFZCLVQgUmVjZWl2ZXIiCi0KLXN0YXRpYyBpbnQgZGVidWc7Ci1tb2R1bGVfcGFyYW1fbmFtZWQoZGVidWcsIGRlYnVnLCBpbnQsIDA2NDQpOwotTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgIlR1cm4gb24vb2ZmIGRlYnVnZ2luZyAoZGVmYXVsdDpvZmYpLiIpOwotCi1EVkJfREVGSU5FX01PRF9PUFRfQURBUFRFUl9OUihhZGFwdGVyX25yKTsKLQotI2RlZmluZSBkcHJpbnRrKGxldmVsLCBhcmdzLi4uKQkJCQkJCVwKLWRvIHsJCQkJCQkJCQlcCi0JaWYgKChkZWJ1ZyAmIGxldmVsKSkgewkJCQkJCVwKLQkJcHJpbnRrKCIlczogJXMoKTogIiwgS0JVSUxEX01PRE5BTUUsCQkJXAotCQkgICAgICAgX19mdW5jX18pOwkJCQkJXAotCQlwcmludGsoYXJncyk7IH0JCQkJCQlcCi19IHdoaWxlICgwKQotCi1lbnVtIGNpbmVyZ3l0Ml9lcDFfY21kIHsKLQlDSU5FUkdZVDJfRVAxX1BJRF9UQUJMRV9SRVNFVAkJPSAweDAxLAotCUNJTkVSR1lUMl9FUDFfUElEX1NFVFVQCQkJPSAweDAyLAotCUNJTkVSR1lUMl9FUDFfQ09OVFJPTF9TVFJFQU1fVFJBTlNGRVIJPSAweDAzLAotCUNJTkVSR1lUMl9FUDFfU0VUX1RVTkVSX1BBUkFNRVRFUlMJPSAweDA0LAotCUNJTkVSR1lUMl9FUDFfR0VUX1RVTkVSX1NUQVRVUwkJPSAweDA1LAotCUNJTkVSR1lUMl9FUDFfU1RBUlRfU0NBTgkJPSAweDA2LAotCUNJTkVSR1lUMl9FUDFfQ09OVElOVUVfU0NBTgkJPSAweDA3LAotCUNJTkVSR1lUMl9FUDFfR0VUX1JDX0VWRU5UUwkJPSAweDA4LAotCUNJTkVSR1lUMl9FUDFfU0xFRVBfTU9ERQkJPSAweDA5Ci19OwotCi1zdHJ1Y3QgZHZidF9zZXRfcGFyYW1ldGVyc19tc2cgewotCXVpbnQ4X3QgY21kOwotCV9fbGUzMiBmcmVxOwotCXVpbnQ4X3QgYmFuZHdpZHRoOwotCV9fbGUxNiB0cHM7Ci0JdWludDhfdCBmbGFnczsKLX0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7Ci0KLXN0cnVjdCBkdmJ0X2dldF9zdGF0dXNfbXNnIHsKLQlfX2xlMzIgZnJlcTsKLQl1aW50OF90IGJhbmR3aWR0aDsKLQlfX2xlMTYgdHBzOwotCXVpbnQ4X3QgZmxhZ3M7Ci0JX19sZTE2IGdhaW47Ci0JdWludDhfdCBzbnI7Ci0JX19sZTMyIHZpdGVyYmlfZXJyb3JfcmF0ZTsKLQlfX2xlMzIgcnNfZXJyb3JfcmF0ZTsKLQlfX2xlMzIgdW5jb3JyZWN0ZWRfYmxvY2tfY291bnQ7Ci0JdWludDhfdCBsb2NrX2JpdHM7Ci0JdWludDhfdCBwcmV2X2xvY2tfYml0czsKLX0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7Ci0KLXN0YXRpYyBzdHJ1Y3QgZHZiX2Zyb250ZW5kX2luZm8gY2luZXJneXQyX2ZlX2luZm8gPSB7Ci0JLm5hbWUgPSBEUklWRVJfTkFNRSwKLQkudHlwZSA9IEZFX09GRE0sCi0JLmZyZXF1ZW5jeV9taW4gPSAxNzQwMDAwMDAsCi0JLmZyZXF1ZW5jeV9tYXggPSA4NjIwMDAwMDAsCi0JLmZyZXF1ZW5jeV9zdGVwc2l6ZSA9IDE2NjY2NywKLQkuY2FwcyA9IEZFX0NBTl9JTlZFUlNJT05fQVVUTyB8IEZFX0NBTl9GRUNfMV8yIHwgRkVfQ0FOX0ZFQ18yXzMgfAotCQlGRV9DQU5fRkVDXzNfNCB8IEZFX0NBTl9GRUNfNV82IHwgRkVfQ0FOX0ZFQ183XzggfAotCQlGRV9DQU5fRkVDX0FVVE8gfAotCQlGRV9DQU5fUVBTSyB8IEZFX0NBTl9RQU1fMTYgfCBGRV9DQU5fUUFNXzY0IHwgRkVfQ0FOX1FBTV9BVVRPIHwKLQkJRkVfQ0FOX1RSQU5TTUlTU0lPTl9NT0RFX0FVVE8gfCBGRV9DQU5fR1VBUkRfSU5URVJWQUxfQVVUTyB8Ci0JCUZFX0NBTl9ISUVSQVJDSFlfQVVUTyB8IEZFX0NBTl9SRUNPVkVSIHwgRkVfQ0FOX01VVEVfVFMKLX07Ci0KLXN0cnVjdCBjaW5lcmd5dDIgewotCXN0cnVjdCBkdmJfZGVtdXggZGVtdXg7Ci0Jc3RydWN0IHVzYl9kZXZpY2UgKnVkZXY7Ci0Jc3RydWN0IG11dGV4IHNlbTsKLQlzdHJ1Y3QgbXV0ZXggd3Ffc2VtOwotCXN0cnVjdCBkdmJfYWRhcHRlciBhZGFwdGVyOwotCXN0cnVjdCBkdmJfZGV2aWNlICpmZWRldjsKLQlzdHJ1Y3QgZG14ZGV2IGRteGRldjsKLQlzdHJ1Y3QgZHZiX25ldCBkdmJuZXQ7Ci0KLQlpbnQgc3RyZWFtaW5nOwotCWludCBzbGVlcGluZzsKLQotCXN0cnVjdCBkdmJ0X3NldF9wYXJhbWV0ZXJzX21zZyBwYXJhbTsKLQlzdHJ1Y3QgZHZidF9nZXRfc3RhdHVzX21zZyBzdGF0dXM7Ci0Jc3RydWN0IGRlbGF5ZWRfd29yayBxdWVyeV93b3JrOwotCi0Jd2FpdF9xdWV1ZV9oZWFkX3QgcG9sbF93cTsKLQlpbnQgcGVuZGluZ19mZV9ldmVudHM7Ci0JaW50IGRpc2Nvbm5lY3RfcGVuZGluZzsKLQl1bnNpZ25lZCBpbnQgdW5jb3JyZWN0ZWRfYmxvY2tfY291bnQ7Ci0JYXRvbWljX3QgaW51c2U7Ci0KLQl2b2lkICpzdHJlYW1idWY7Ci0JZG1hX2FkZHJfdCBzdHJlYW1idWZfZG1haGFuZGxlOwotCXN0cnVjdCB1cmIgKnN0cmVhbV91cmIgW1NUUkVBTV9VUkJfQ09VTlRdOwotCi0jaWZkZWYgRU5BQkxFX1JDCi0Jc3RydWN0IGlucHV0X2RldiAqcmNfaW5wdXRfZGV2OwotCWNoYXIgcGh5c1s2NF07Ci0Jc3RydWN0IGRlbGF5ZWRfd29yayByY19xdWVyeV93b3JrOwotCWludCByY19pbnB1dF9ldmVudDsKLQlfX2xlMzIgcmNfbGFzdF9jb2RlOwotCXVuc2lnbmVkIGxvbmcgbGFzdF9ldmVudF9qaWZmaWVzOwotI2VuZGlmCi19OwotCi1lbnVtIHsKLQlDSU5FUkdZVDJfUkNfRVZFTlRfVFlQRV9OT05FID0gMHgwMCwKLQlDSU5FUkdZVDJfUkNfRVZFTlRfVFlQRV9ORUMgID0gMHgwMSwKLQlDSU5FUkdZVDJfUkNfRVZFTlRfVFlQRV9SQzUgID0gMHgwMgotfTsKLQotc3RydWN0IGNpbmVyZ3l0Ml9yY19ldmVudCB7Ci0JY2hhciB0eXBlOwotCV9fbGUzMiB2YWx1ZTsKLX0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7Ci0KLXN0YXRpYyBjb25zdCB1aW50MzJfdCByY19rZXlzW10gPSB7Ci0JQ0lORVJHWVQyX1JDX0VWRU5UX1RZUEVfTkVDLAkweGZlMDFlYjA0LAlLRVlfUE9XRVIsCi0JQ0lORVJHWVQyX1JDX0VWRU5UX1RZUEVfTkVDLAkweGZkMDJlYjA0LAlLRVlfMSwKLQlDSU5FUkdZVDJfUkNfRVZFTlRfVFlQRV9ORUMsCTB4ZmMwM2ViMDQsCUtFWV8yLAotCUNJTkVSR1lUMl9SQ19FVkVOVF9UWVBFX05FQywJMHhmYjA0ZWIwNCwJS0VZXzMsCi0JQ0lORVJHWVQyX1JDX0VWRU5UX1RZUEVfTkVDLAkweGZhMDVlYjA0LAlLRVlfNCwKLQlDSU5FUkdZVDJfUkNfRVZFTlRfVFlQRV9ORUMsCTB4ZjkwNmViMDQsCUtFWV81LAotCUNJTkVSR1lUMl9SQ19FVkVOVF9UWVBFX05FQywJMHhmODA3ZWIwNCwJS0VZXzYsCi0JQ0lORVJHWVQyX1JDX0VWRU5UX1RZUEVfTkVDLAkweGY3MDhlYjA0LAlLRVlfNywKLQlDSU5FUkdZVDJfUkNfRVZFTlRfVFlQRV9ORUMsCTB4ZjYwOWViMDQsCUtFWV84LAotCUNJTkVSR1lUMl9SQ19FVkVOVF9UWVBFX05FQywJMHhmNTBhZWIwNCwJS0VZXzksCi0JQ0lORVJHWVQyX1JDX0VWRU5UX1RZUEVfTkVDLAkweGYzMGNlYjA0LAlLRVlfMCwKLQlDSU5FUkdZVDJfUkNfRVZFTlRfVFlQRV9ORUMsCTB4ZjQwYmViMDQsCUtFWV9WSURFTywKLQlDSU5FUkdZVDJfUkNfRVZFTlRfVFlQRV9ORUMsCTB4ZjIwZGViMDQsCUtFWV9SRUZSRVNILAotCUNJTkVSR1lUMl9SQ19FVkVOVF9UWVBFX05FQywJMHhmMTBlZWIwNCwJS0VZX1NFTEVDVCwKLQlDSU5FUkdZVDJfUkNfRVZFTlRfVFlQRV9ORUMsCTB4ZjAwZmViMDQsCUtFWV9FUEcsCi0JQ0lORVJHWVQyX1JDX0VWRU5UX1RZUEVfTkVDLAkweGVmMTBlYjA0LAlLRVlfVVAsCi0JQ0lORVJHWVQyX1JDX0VWRU5UX1RZUEVfTkVDLAkweGViMTRlYjA0LAlLRVlfRE9XTiwKLQlDSU5FUkdZVDJfUkNfRVZFTlRfVFlQRV9ORUMsCTB4ZWUxMWViMDQsCUtFWV9MRUZULAotCUNJTkVSR1lUMl9SQ19FVkVOVF9UWVBFX05FQywJMHhlYzEzZWIwNCwJS0VZX1JJR0hULAotCUNJTkVSR1lUMl9SQ19FVkVOVF9UWVBFX05FQywJMHhlZDEyZWIwNCwJS0VZX09LLAotCUNJTkVSR1lUMl9SQ19FVkVOVF9UWVBFX05FQywJMHhlYTE1ZWIwNCwJS0VZX1RFWFQsCi0JQ0lORVJHWVQyX1JDX0VWRU5UX1RZUEVfTkVDLAkweGU5MTZlYjA0LAlLRVlfSU5GTywKLQlDSU5FUkdZVDJfUkNfRVZFTlRfVFlQRV9ORUMsCTB4ZTgxN2ViMDQsCUtFWV9SRUQsCi0JQ0lORVJHWVQyX1JDX0VWRU5UX1RZUEVfTkVDLAkweGU3MThlYjA0LAlLRVlfR1JFRU4sCi0JQ0lORVJHWVQyX1JDX0VWRU5UX1RZUEVfTkVDLAkweGU2MTllYjA0LAlLRVlfWUVMTE9XLAotCUNJTkVSR1lUMl9SQ19FVkVOVF9UWVBFX05FQywJMHhlNTFhZWIwNCwJS0VZX0JMVUUsCi0JQ0lORVJHWVQyX1JDX0VWRU5UX1RZUEVfTkVDLAkweGUzMWNlYjA0LAlLRVlfVk9MVU1FVVAsCi0JQ0lORVJHWVQyX1JDX0VWRU5UX1RZUEVfTkVDLAkweGUxMWVlYjA0LAlLRVlfVk9MVU1FRE9XTiwKLQlDSU5FUkdZVDJfUkNfRVZFTlRfVFlQRV9ORUMsCTB4ZTIxZGViMDQsCUtFWV9NVVRFLAotCUNJTkVSR1lUMl9SQ19FVkVOVF9UWVBFX05FQywJMHhlNDFiZWIwNCwJS0VZX0NIQU5ORUxVUCwKLQlDSU5FUkdZVDJfUkNfRVZFTlRfVFlQRV9ORUMsCTB4ZTAxZmViMDQsCUtFWV9DSEFOTkVMRE9XTiwKLQlDSU5FUkdZVDJfUkNfRVZFTlRfVFlQRV9ORUMsCTB4YmY0MGViMDQsCUtFWV9QQVVTRSwKLQlDSU5FUkdZVDJfUkNfRVZFTlRfVFlQRV9ORUMsCTB4YjM0Y2ViMDQsCUtFWV9QTEFZLAotCUNJTkVSR1lUMl9SQ19FVkVOVF9UWVBFX05FQywJMHhhNzU4ZWIwNCwJS0VZX1JFQ09SRCwKLQlDSU5FUkdZVDJfUkNfRVZFTlRfVFlQRV9ORUMsCTB4YWI1NGViMDQsCUtFWV9QUkVWSU9VUywKLQlDSU5FUkdZVDJfUkNfRVZFTlRfVFlQRV9ORUMsCTB4Yjc0OGViMDQsCUtFWV9TVE9QLAotCUNJTkVSR1lUMl9SQ19FVkVOVF9UWVBFX05FQywJMHhhMzVjZWIwNCwJS0VZX05FWFQKLX07Ci0KLXN0YXRpYyBpbnQgY2luZXJneXQyX2NvbW1hbmQgKHN0cnVjdCBjaW5lcmd5dDIgKmNpbmVyZ3l0MiwKLQkJCSAgICAgIGNoYXIgKnNlbmRfYnVmLCBpbnQgc2VuZF9idWZfbGVuLAotCQkJICAgICAgY2hhciAqcmVjdl9idWYsIGludCByZWN2X2J1Zl9sZW4pCi17Ci0JaW50IGFjdHVhbF9sZW47Ci0JY2hhciBkdW1teTsKLQlpbnQgcmV0OwotCi0JcmV0ID0gdXNiX2J1bGtfbXNnKGNpbmVyZ3l0Mi0+dWRldiwgdXNiX3NuZGJ1bGtwaXBlKGNpbmVyZ3l0Mi0+dWRldiwgMSksCi0JCQkgICBzZW5kX2J1Ziwgc2VuZF9idWZfbGVuLCAmYWN0dWFsX2xlbiwgMTAwMCk7Ci0KLQlpZiAocmV0KQotCQlkcHJpbnRrKDEsICJ1c2JfYnVsa19tc2cgKHNlbmQpIGZhaWxlZCwgZXJyICVpXG4iLCByZXQpOwotCi0JaWYgKCFyZWN2X2J1ZikKLQkJcmVjdl9idWYgPSAmZHVtbXk7Ci0KLQlyZXQgPSB1c2JfYnVsa19tc2coY2luZXJneXQyLT51ZGV2LCB1c2JfcmN2YnVsa3BpcGUoY2luZXJneXQyLT51ZGV2LCAxKSwKLQkJCSAgIHJlY3ZfYnVmLCByZWN2X2J1Zl9sZW4sICZhY3R1YWxfbGVuLCAxMDAwKTsKLQotCWlmIChyZXQpCi0JCWRwcmludGsoMSwgInVzYl9idWxrX21zZyAocmVhZCkgZmFpbGVkLCBlcnIgJWlcbiIsIHJldCk7Ci0KLQlyZXR1cm4gcmV0ID8gcmV0IDogYWN0dWFsX2xlbjsKLX0KLQotc3RhdGljIHZvaWQgY2luZXJneXQyX2NvbnRyb2xfc3RyZWFtX3RyYW5zZmVyIChzdHJ1Y3QgY2luZXJneXQyICpjaW5lcmd5dDIsIGludCBlbmFibGUpCi17Ci0JY2hhciBidWYgW10gPSB7IENJTkVSR1lUMl9FUDFfQ09OVFJPTF9TVFJFQU1fVFJBTlNGRVIsIGVuYWJsZSA/IDEgOiAwIH07Ci0JY2luZXJneXQyX2NvbW1hbmQoY2luZXJneXQyLCBidWYsIHNpemVvZihidWYpLCBOVUxMLCAwKTsKLX0KLQotc3RhdGljIHZvaWQgY2luZXJneXQyX3NsZWVwIChzdHJ1Y3QgY2luZXJneXQyICpjaW5lcmd5dDIsIGludCBzbGVlcCkKLXsKLQljaGFyIGJ1ZiBbXSA9IHsgQ0lORVJHWVQyX0VQMV9TTEVFUF9NT0RFLCBzbGVlcCA/IDEgOiAwIH07Ci0JY2luZXJneXQyX2NvbW1hbmQoY2luZXJneXQyLCBidWYsIHNpemVvZihidWYpLCBOVUxMLCAwKTsKLQljaW5lcmd5dDItPnNsZWVwaW5nID0gc2xlZXA7Ci19Ci0KLXN0YXRpYyB2b2lkIGNpbmVyZ3l0Ml9zdHJlYW1faXJxIChzdHJ1Y3QgdXJiICp1cmIpOwotCi1zdGF0aWMgaW50IGNpbmVyZ3l0Ml9zdWJtaXRfc3RyZWFtX3VyYiAoc3RydWN0IGNpbmVyZ3l0MiAqY2luZXJneXQyLCBzdHJ1Y3QgdXJiICp1cmIpCi17Ci0JaW50IGVycjsKLQotCXVzYl9maWxsX2J1bGtfdXJiKHVyYiwKLQkJCSAgY2luZXJneXQyLT51ZGV2LAotCQkJICB1c2JfcmN2YnVsa3BpcGUoY2luZXJneXQyLT51ZGV2LCAweDIpLAotCQkJICB1cmItPnRyYW5zZmVyX2J1ZmZlciwKLQkJCSAgU1RSRUFNX0JVRl9TSVpFLAotCQkJICBjaW5lcmd5dDJfc3RyZWFtX2lycSwKLQkJCSAgY2luZXJneXQyKTsKLQotCWlmICgoZXJyID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfQVRPTUlDKSkpCi0JCWRwcmludGsoMSwgInVyYiBzdWJtaXNzaW9uIGZhaWxlZCAoZXJyID0gJWkpIVxuIiwgZXJyKTsKLQotCXJldHVybiBlcnI7Ci19Ci0KLXN0YXRpYyB2b2lkIGNpbmVyZ3l0Ml9zdHJlYW1faXJxIChzdHJ1Y3QgdXJiICp1cmIpCi17Ci0Jc3RydWN0IGNpbmVyZ3l0MiAqY2luZXJneXQyID0gdXJiLT5jb250ZXh0OwotCi0JaWYgKHVyYi0+YWN0dWFsX2xlbmd0aCA+IDApCi0JCWR2Yl9kbXhfc3dmaWx0ZXIoJmNpbmVyZ3l0Mi0+ZGVtdXgsCi0JCQkJIHVyYi0+dHJhbnNmZXJfYnVmZmVyLCB1cmItPmFjdHVhbF9sZW5ndGgpOwotCi0JaWYgKGNpbmVyZ3l0Mi0+c3RyZWFtaW5nKQotCQljaW5lcmd5dDJfc3VibWl0X3N0cmVhbV91cmIoY2luZXJneXQyLCB1cmIpOwotfQotCi1zdGF0aWMgdm9pZCBjaW5lcmd5dDJfZnJlZV9zdHJlYW1fdXJicyAoc3RydWN0IGNpbmVyZ3l0MiAqY2luZXJneXQyKQotewotCWludCBpOwotCi0JZm9yIChpPTA7IGk8U1RSRUFNX1VSQl9DT1VOVDsgaSsrKQotCQl1c2JfZnJlZV91cmIoY2luZXJneXQyLT5zdHJlYW1fdXJiW2ldKTsKLQotCXVzYl9idWZmZXJfZnJlZShjaW5lcmd5dDItPnVkZXYsIFNUUkVBTV9VUkJfQ09VTlQqU1RSRUFNX0JVRl9TSVpFLAotCQkJICAgIGNpbmVyZ3l0Mi0+c3RyZWFtYnVmLCBjaW5lcmd5dDItPnN0cmVhbWJ1Zl9kbWFoYW5kbGUpOwotfQotCi1zdGF0aWMgaW50IGNpbmVyZ3l0Ml9hbGxvY19zdHJlYW1fdXJicyAoc3RydWN0IGNpbmVyZ3l0MiAqY2luZXJneXQyKQotewotCWludCBpOwotCi0JY2luZXJneXQyLT5zdHJlYW1idWYgPSB1c2JfYnVmZmVyX2FsbG9jKGNpbmVyZ3l0Mi0+dWRldiwgU1RSRUFNX1VSQl9DT1VOVCpTVFJFQU1fQlVGX1NJWkUsCi0JCQkJCSAgICAgIEdGUF9LRVJORUwsICZjaW5lcmd5dDItPnN0cmVhbWJ1Zl9kbWFoYW5kbGUpOwotCWlmICghY2luZXJneXQyLT5zdHJlYW1idWYpIHsKLQkJZHByaW50aygxLCAiZmFpbGVkIHRvIGFsbG9jIGNvbnNpc3RlbnQgc3RyZWFtIG1lbW9yeSBhcmVhLCBiYWlsaW5nIG91dCFcbiIpOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9Ci0KLQltZW1zZXQoY2luZXJneXQyLT5zdHJlYW1idWYsIDAsIFNUUkVBTV9VUkJfQ09VTlQqU1RSRUFNX0JVRl9TSVpFKTsKLQotCWZvciAoaT0wOyBpPFNUUkVBTV9VUkJfQ09VTlQ7IGkrKykgewotCQlzdHJ1Y3QgdXJiICp1cmI7Ci0KLQkJaWYgKCEodXJiID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfQVRPTUlDKSkpIHsKLQkJCWRwcmludGsoMSwgImZhaWxlZCB0byBhbGxvYyBjb25zaXN0ZW50IHN0cmVhbSB1cmJzLCBiYWlsaW5nIG91dCFcbiIpOwotCQkJY2luZXJneXQyX2ZyZWVfc3RyZWFtX3VyYnMoY2luZXJneXQyKTsKLQkJCXJldHVybiAtRU5PTUVNOwotCQl9Ci0KLQkJdXJiLT50cmFuc2Zlcl9idWZmZXIgPSBjaW5lcmd5dDItPnN0cmVhbWJ1ZiArIGkgKiBTVFJFQU1fQlVGX1NJWkU7Ci0JCXVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCA9IFNUUkVBTV9CVUZfU0laRTsKLQotCQljaW5lcmd5dDItPnN0cmVhbV91cmJbaV0gPSB1cmI7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIGNpbmVyZ3l0Ml9zdG9wX3N0cmVhbV94ZmVyIChzdHJ1Y3QgY2luZXJneXQyICpjaW5lcmd5dDIpCi17Ci0JaW50IGk7Ci0KLQljaW5lcmd5dDJfY29udHJvbF9zdHJlYW1fdHJhbnNmZXIoY2luZXJneXQyLCAwKTsKLQotCWZvciAoaT0wOyBpPFNUUkVBTV9VUkJfQ09VTlQ7IGkrKykKLQkJdXNiX2tpbGxfdXJiKGNpbmVyZ3l0Mi0+c3RyZWFtX3VyYltpXSk7Ci19Ci0KLXN0YXRpYyBpbnQgY2luZXJneXQyX3N0YXJ0X3N0cmVhbV94ZmVyIChzdHJ1Y3QgY2luZXJneXQyICpjaW5lcmd5dDIpCi17Ci0JaW50IGksIGVycjsKLQotCWZvciAoaT0wOyBpPFNUUkVBTV9VUkJfQ09VTlQ7IGkrKykgewotCQlpZiAoKGVyciA9IGNpbmVyZ3l0Ml9zdWJtaXRfc3RyZWFtX3VyYihjaW5lcmd5dDIsIGNpbmVyZ3l0Mi0+c3RyZWFtX3VyYltpXSkpKSB7Ci0JCQljaW5lcmd5dDJfc3RvcF9zdHJlYW1feGZlcihjaW5lcmd5dDIpOwotCQkJZHByaW50aygxLCAiZmFpbGVkIHVyYiBzdWJtaXNzaW9uICglaTogZXJyID0gJWkpIVxuIiwgaSwgZXJyKTsKLQkJCXJldHVybiBlcnI7Ci0JCX0KLQl9Ci0KLQljaW5lcmd5dDJfY29udHJvbF9zdHJlYW1fdHJhbnNmZXIoY2luZXJneXQyLCAxKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBjaW5lcmd5dDJfc3RhcnRfZmVlZChzdHJ1Y3QgZHZiX2RlbXV4X2ZlZWQgKmR2YmRteGZlZWQpCi17Ci0Jc3RydWN0IGR2Yl9kZW11eCAqZGVtdXggPSBkdmJkbXhmZWVkLT5kZW11eDsKLQlzdHJ1Y3QgY2luZXJneXQyICpjaW5lcmd5dDIgPSBkZW11eC0+cHJpdjsKLQotCWlmIChjaW5lcmd5dDItPmRpc2Nvbm5lY3RfcGVuZGluZykKLQkJcmV0dXJuIC1FQUdBSU47Ci0JaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmY2luZXJneXQyLT5zZW0pKQotCQlyZXR1cm4gLUVSRVNUQVJUU1lTOwotCi0JaWYgKGNpbmVyZ3l0Mi0+c3RyZWFtaW5nID09IDApCi0JCWNpbmVyZ3l0Ml9zdGFydF9zdHJlYW1feGZlcihjaW5lcmd5dDIpOwotCi0JY2luZXJneXQyLT5zdHJlYW1pbmcrKzsKLQltdXRleF91bmxvY2soJmNpbmVyZ3l0Mi0+c2VtKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBjaW5lcmd5dDJfc3RvcF9mZWVkKHN0cnVjdCBkdmJfZGVtdXhfZmVlZCAqZHZiZG14ZmVlZCkKLXsKLQlzdHJ1Y3QgZHZiX2RlbXV4ICpkZW11eCA9IGR2YmRteGZlZWQtPmRlbXV4OwotCXN0cnVjdCBjaW5lcmd5dDIgKmNpbmVyZ3l0MiA9IGRlbXV4LT5wcml2OwotCi0JaWYgKGNpbmVyZ3l0Mi0+ZGlzY29ubmVjdF9wZW5kaW5nKQotCQlyZXR1cm4gLUVBR0FJTjsKLQlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZjaW5lcmd5dDItPnNlbSkpCi0JCXJldHVybiAtRVJFU1RBUlRTWVM7Ci0KLQlpZiAoLS1jaW5lcmd5dDItPnN0cmVhbWluZyA9PSAwKQotCQljaW5lcmd5dDJfc3RvcF9zdHJlYW1feGZlcihjaW5lcmd5dDIpOwotCi0JbXV0ZXhfdW5sb2NrKCZjaW5lcmd5dDItPnNlbSk7Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qKgotICogIGNvbnZlcnQgbGludXgtZHZiIGZyb250ZW5kIHBhcmFtZXRlciBzZXQgaW50byBUUFMuCi0gKiAgU2VlIEVUU0kgRVRTLTMwMDc0NCwgc2VjdGlvbiA0LjYuMiwgdGFibGUgOSBmb3IgZGV0YWlscy4KLSAqCi0gKiAgVGhpcyBmdW5jdGlvbiBpcyBwcm9iYWJseSByZXVzYWJsZSBhbmQgbWF5IGJldHRlciBnZXQgcGxhY2VkIGluIGEgc3VwcG9ydAotICogIGxpYnJhcnkuCi0gKgotICogIFdlIHJlcGxhY2UgZXJyb3Jub3VzIGZpZWxkcyBieSBkZWZhdWx0IFRQUyBmaWVsZHMgKHRoZSBvbmVzIHdpdGggdmFsdWUgMCkuCi0gKi8KLXN0YXRpYyB1aW50MTZfdCBjb21wdXRlX3RwcyAoc3RydWN0IGR2Yl9mcm9udGVuZF9wYXJhbWV0ZXJzICpwKQotewotCXN0cnVjdCBkdmJfb2ZkbV9wYXJhbWV0ZXJzICpvcCA9ICZwLT51Lm9mZG07Ci0JdWludDE2X3QgdHBzID0gMDsKLQotCXN3aXRjaCAob3AtPmNvZGVfcmF0ZV9IUCkgewotCQljYXNlIEZFQ18yXzM6Ci0JCQl0cHMgfD0gKDEgPDwgNyk7Ci0JCQlicmVhazsKLQkJY2FzZSBGRUNfM180OgotCQkJdHBzIHw9ICgyIDw8IDcpOwotCQkJYnJlYWs7Ci0JCWNhc2UgRkVDXzVfNjoKLQkJCXRwcyB8PSAoMyA8PCA3KTsKLQkJCWJyZWFrOwotCQljYXNlIEZFQ183Xzg6Ci0JCQl0cHMgfD0gKDQgPDwgNyk7Ci0JCQlicmVhazsKLQkJY2FzZSBGRUNfMV8yOgotCQljYXNlIEZFQ19BVVRPOgotCQlkZWZhdWx0OgotCQkJLyogdHBzIHw9ICgwIDw8IDcpICovOwotCX0KLQotCXN3aXRjaCAob3AtPmNvZGVfcmF0ZV9MUCkgewotCQljYXNlIEZFQ18yXzM6Ci0JCQl0cHMgfD0gKDEgPDwgNCk7Ci0JCQlicmVhazsKLQkJY2FzZSBGRUNfM180OgotCQkJdHBzIHw9ICgyIDw8IDQpOwotCQkJYnJlYWs7Ci0JCWNhc2UgRkVDXzVfNjoKLQkJCXRwcyB8PSAoMyA8PCA0KTsKLQkJCWJyZWFrOwotCQljYXNlIEZFQ183Xzg6Ci0JCQl0cHMgfD0gKDQgPDwgNCk7Ci0JCQlicmVhazsKLQkJY2FzZSBGRUNfMV8yOgotCQljYXNlIEZFQ19BVVRPOgotCQlkZWZhdWx0OgotCQkJLyogdHBzIHw9ICgwIDw8IDQpICovOwotCX0KLQotCXN3aXRjaCAob3AtPmNvbnN0ZWxsYXRpb24pIHsKLQkJY2FzZSBRQU1fMTY6Ci0JCQl0cHMgfD0gKDEgPDwgMTMpOwotCQkJYnJlYWs7Ci0JCWNhc2UgUUFNXzY0OgotCQkJdHBzIHw9ICgyIDw8IDEzKTsKLQkJCWJyZWFrOwotCQljYXNlIFFQU0s6Ci0JCWRlZmF1bHQ6Ci0JCQkvKiB0cHMgfD0gKDAgPDwgMTMpICovOwotCX0KLQotCXN3aXRjaCAob3AtPnRyYW5zbWlzc2lvbl9tb2RlKSB7Ci0JCWNhc2UgVFJBTlNNSVNTSU9OX01PREVfOEs6Ci0JCQl0cHMgfD0gKDEgPDwgMCk7Ci0JCQlicmVhazsKLQkJY2FzZSBUUkFOU01JU1NJT05fTU9ERV8ySzoKLQkJZGVmYXVsdDoKLQkJCS8qIHRwcyB8PSAoMCA8PCAwKSAqLzsKLQl9Ci0KLQlzd2l0Y2ggKG9wLT5ndWFyZF9pbnRlcnZhbCkgewotCQljYXNlIEdVQVJEX0lOVEVSVkFMXzFfMTY6Ci0JCQl0cHMgfD0gKDEgPDwgMik7Ci0JCQlicmVhazsKLQkJY2FzZSBHVUFSRF9JTlRFUlZBTF8xXzg6Ci0JCQl0cHMgfD0gKDIgPDwgMik7Ci0JCQlicmVhazsKLQkJY2FzZSBHVUFSRF9JTlRFUlZBTF8xXzQ6Ci0JCQl0cHMgfD0gKDMgPDwgMik7Ci0JCQlicmVhazsKLQkJY2FzZSBHVUFSRF9JTlRFUlZBTF8xXzMyOgotCQlkZWZhdWx0OgotCQkJLyogdHBzIHw9ICgwIDw8IDIpICovOwotCX0KLQotCXN3aXRjaCAob3AtPmhpZXJhcmNoeV9pbmZvcm1hdGlvbikgewotCQljYXNlIEhJRVJBUkNIWV8xOgotCQkJdHBzIHw9ICgxIDw8IDEwKTsKLQkJCWJyZWFrOwotCQljYXNlIEhJRVJBUkNIWV8yOgotCQkJdHBzIHw9ICgyIDw8IDEwKTsKLQkJCWJyZWFrOwotCQljYXNlIEhJRVJBUkNIWV80OgotCQkJdHBzIHw9ICgzIDw8IDEwKTsKLQkJCWJyZWFrOwotCQljYXNlIEhJRVJBUkNIWV9OT05FOgotCQlkZWZhdWx0OgotCQkJLyogdHBzIHw9ICgwIDw8IDEwKSAqLzsKLQl9Ci0KLQlyZXR1cm4gdHBzOwotfQotCi1zdGF0aWMgaW50IGNpbmVyZ3l0Ml9vcGVuIChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKLXsKLQlzdHJ1Y3QgZHZiX2RldmljZSAqZHZiZGV2ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwotCXN0cnVjdCBjaW5lcmd5dDIgKmNpbmVyZ3l0MiA9IGR2YmRldi0+cHJpdjsKLQlpbnQgZXJyID0gLUVBR0FJTjsKLQotCWlmIChjaW5lcmd5dDItPmRpc2Nvbm5lY3RfcGVuZGluZykKLQkJZ290byBvdXQ7Ci0JZXJyID0gbXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZjaW5lcmd5dDItPndxX3NlbSk7Ci0JaWYgKGVycikKLQkJZ290byBvdXQ7Ci0KLQllcnIgPSBtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmNpbmVyZ3l0Mi0+c2VtKTsKLQlpZiAoZXJyKQotCQlnb3RvIG91dF91bmxvY2sxOwotCi0JaWYgKChlcnIgPSBkdmJfZ2VuZXJpY19vcGVuKGlub2RlLCBmaWxlKSkpCi0JCWdvdG8gb3V0X3VubG9jazI7Ci0KLQlpZiAoKGZpbGUtPmZfZmxhZ3MgJiBPX0FDQ01PREUpICE9IE9fUkRPTkxZKSB7Ci0JCWNpbmVyZ3l0Ml9zbGVlcChjaW5lcmd5dDIsIDApOwotCQlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJmNpbmVyZ3l0Mi0+cXVlcnlfd29yaywgSFovMik7Ci0JfQotCi0JYXRvbWljX2luYygmY2luZXJneXQyLT5pbnVzZSk7Ci0KLW91dF91bmxvY2syOgotCW11dGV4X3VubG9jaygmY2luZXJneXQyLT5zZW0pOwotb3V0X3VubG9jazE6Ci0JbXV0ZXhfdW5sb2NrKCZjaW5lcmd5dDItPndxX3NlbSk7Ci1vdXQ6Ci0JcmV0dXJuIGVycjsKLX0KLQotc3RhdGljIHZvaWQgY2luZXJneXQyX3VucmVnaXN0ZXIoc3RydWN0IGNpbmVyZ3l0MiAqY2luZXJneXQyKQotewotCWR2Yl9uZXRfcmVsZWFzZSgmY2luZXJneXQyLT5kdmJuZXQpOwotCWR2Yl9kbXhkZXZfcmVsZWFzZSgmY2luZXJneXQyLT5kbXhkZXYpOwotCWR2Yl9kbXhfcmVsZWFzZSgmY2luZXJneXQyLT5kZW11eCk7Ci0JZHZiX3VucmVnaXN0ZXJfZGV2aWNlKGNpbmVyZ3l0Mi0+ZmVkZXYpOwotCWR2Yl91bnJlZ2lzdGVyX2FkYXB0ZXIoJmNpbmVyZ3l0Mi0+YWRhcHRlcik7Ci0KLQljaW5lcmd5dDJfZnJlZV9zdHJlYW1fdXJicyhjaW5lcmd5dDIpOwotCWtmcmVlKGNpbmVyZ3l0Mik7Ci19Ci0KLXN0YXRpYyBpbnQgY2luZXJneXQyX3JlbGVhc2UgKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQotewotCXN0cnVjdCBkdmJfZGV2aWNlICpkdmJkZXYgPSBmaWxlLT5wcml2YXRlX2RhdGE7Ci0Jc3RydWN0IGNpbmVyZ3l0MiAqY2luZXJneXQyID0gZHZiZGV2LT5wcml2OwotCi0JbXV0ZXhfbG9jaygmY2luZXJneXQyLT53cV9zZW0pOwotCi0JaWYgKCFjaW5lcmd5dDItPmRpc2Nvbm5lY3RfcGVuZGluZyAmJiAoZmlsZS0+Zl9mbGFncyAmIE9fQUNDTU9ERSkgIT0gT19SRE9OTFkpIHsKLQkJY2FuY2VsX3JlYXJtaW5nX2RlbGF5ZWRfd29yaygmY2luZXJneXQyLT5xdWVyeV93b3JrKTsKLQotCQltdXRleF9sb2NrKCZjaW5lcmd5dDItPnNlbSk7Ci0JCWNpbmVyZ3l0Ml9zbGVlcChjaW5lcmd5dDIsIDEpOwotCQltdXRleF91bmxvY2soJmNpbmVyZ3l0Mi0+c2VtKTsKLQl9Ci0KLQltdXRleF91bmxvY2soJmNpbmVyZ3l0Mi0+d3Ffc2VtKTsKLQotCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZjaW5lcmd5dDItPmludXNlKSAmJiBjaW5lcmd5dDItPmRpc2Nvbm5lY3RfcGVuZGluZykgewotCQl3YXJuKCJkZWxheWVkIHVucmVnaXN0ZXIgaW4gcmVsZWFzZSIpOwotCQljaW5lcmd5dDJfdW5yZWdpc3RlcihjaW5lcmd5dDIpOwotCX0KLQotCXJldHVybiBkdmJfZ2VuZXJpY19yZWxlYXNlKGlub2RlLCBmaWxlKTsKLX0KLQotc3RhdGljIHVuc2lnbmVkIGludCBjaW5lcmd5dDJfcG9sbCAoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBwb2xsX3RhYmxlX3N0cnVjdCAqd2FpdCkKLXsKLQlzdHJ1Y3QgZHZiX2RldmljZSAqZHZiZGV2ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwotCXN0cnVjdCBjaW5lcmd5dDIgKmNpbmVyZ3l0MiA9IGR2YmRldi0+cHJpdjsKLQl1bnNpZ25lZCBpbnQgbWFzayA9IDA7Ci0KLQlpZiAoY2luZXJneXQyLT5kaXNjb25uZWN0X3BlbmRpbmcpCi0JCXJldHVybiAtRUFHQUlOOwotCWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmNpbmVyZ3l0Mi0+c2VtKSkKLQkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKLQotCXBvbGxfd2FpdChmaWxlLCAmY2luZXJneXQyLT5wb2xsX3dxLCB3YWl0KTsKLQotCWlmIChjaW5lcmd5dDItPnBlbmRpbmdfZmVfZXZlbnRzICE9IDApCi0JCW1hc2sgfD0gKFBPTExJTiB8IFBPTExSRE5PUk0gfCBQT0xMUFJJKTsKLQotCW11dGV4X3VubG9jaygmY2luZXJneXQyLT5zZW0pOwotCi0JcmV0dXJuIG1hc2s7Ci19Ci0KLQotc3RhdGljIGludCBjaW5lcmd5dDJfaW9jdGwgKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlLAotCQkgICAgIHVuc2lnbmVkIGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCi17Ci0Jc3RydWN0IGR2Yl9kZXZpY2UgKmR2YmRldiA9IGZpbGUtPnByaXZhdGVfZGF0YTsKLQlzdHJ1Y3QgY2luZXJneXQyICpjaW5lcmd5dDIgPSBkdmJkZXYtPnByaXY7Ci0Jc3RydWN0IGR2YnRfZ2V0X3N0YXR1c19tc2cgKnN0YXQgPSAmY2luZXJneXQyLT5zdGF0dXM7Ci0JZmVfc3RhdHVzX3Qgc3RhdHVzID0gMDsKLQotCXN3aXRjaCAoY21kKSB7Ci0JY2FzZSBGRV9HRVRfSU5GTzoKLQkJcmV0dXJuIGNvcHlfdG9fdXNlcigodm9pZCBfX3VzZXIqKSBhcmcsICZjaW5lcmd5dDJfZmVfaW5mbywKLQkJCQkgICAgc2l6ZW9mKHN0cnVjdCBkdmJfZnJvbnRlbmRfaW5mbykpOwotCi0JY2FzZSBGRV9SRUFEX1NUQVRVUzoKLQkJaWYgKDB4ZmZmZiAtIGxlMTZfdG9fY3B1KHN0YXQtPmdhaW4pID4gMzApCi0JCQlzdGF0dXMgfD0gRkVfSEFTX1NJR05BTDsKLQkJaWYgKHN0YXQtPmxvY2tfYml0cyAmICgxIDw8IDYpKQotCQkJc3RhdHVzIHw9IEZFX0hBU19MT0NLOwotCQlpZiAoc3RhdC0+bG9ja19iaXRzICYgKDEgPDwgNSkpCi0JCQlzdGF0dXMgfD0gRkVfSEFTX1NZTkM7Ci0JCWlmIChzdGF0LT5sb2NrX2JpdHMgJiAoMSA8PCA0KSkKLQkJCXN0YXR1cyB8PSBGRV9IQVNfQ0FSUklFUjsKLQkJaWYgKHN0YXQtPmxvY2tfYml0cyAmICgxIDw8IDEpKQotCQkJc3RhdHVzIHw9IEZFX0hBU19WSVRFUkJJOwotCi0JCXJldHVybiBjb3B5X3RvX3VzZXIoKHZvaWQgIF9fdXNlciopIGFyZywgJnN0YXR1cywgc2l6ZW9mKHN0YXR1cykpOwotCi0JY2FzZSBGRV9SRUFEX0JFUjoKLQkJcmV0dXJuIHB1dF91c2VyKGxlMzJfdG9fY3B1KHN0YXQtPnZpdGVyYmlfZXJyb3JfcmF0ZSksCi0JCQkJKF9fdTMyIF9fdXNlciAqKSBhcmcpOwotCi0JY2FzZSBGRV9SRUFEX1NJR05BTF9TVFJFTkdUSDoKLQkJcmV0dXJuIHB1dF91c2VyKDB4ZmZmZiAtIGxlMTZfdG9fY3B1KHN0YXQtPmdhaW4pLAotCQkJCShfX3UxNiBfX3VzZXIgKikgYXJnKTsKLQotCWNhc2UgRkVfUkVBRF9TTlI6Ci0JCXJldHVybiBwdXRfdXNlcigoc3RhdC0+c25yIDw8IDgpIHwgc3RhdC0+c25yLAotCQkJCShfX3UxNiBfX3VzZXIgKikgYXJnKTsKLQotCWNhc2UgRkVfUkVBRF9VTkNPUlJFQ1RFRF9CTE9DS1M6Ci0JewotCQl1aW50MzJfdCB1bmNfY291bnQ7Ci0KLQkJaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmY2luZXJneXQyLT5zZW0pKQotCQkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKLQkJdW5jX2NvdW50ID0gY2luZXJneXQyLT51bmNvcnJlY3RlZF9ibG9ja19jb3VudDsKLQkJY2luZXJneXQyLT51bmNvcnJlY3RlZF9ibG9ja19jb3VudCA9IDA7Ci0JCW11dGV4X3VubG9jaygmY2luZXJneXQyLT5zZW0pOwotCi0JCS8qIFVOQyBhcmUgYWxyZWFkeSBjb252ZXJ0ZWQgdG8gaG9zdCBieXRlIG9yZGVyLi4uICovCi0JCXJldHVybiBwdXRfdXNlcih1bmNfY291bnQsKF9fdTMyIF9fdXNlciAqKSBhcmcpOwotCX0KLQljYXNlIEZFX1NFVF9GUk9OVEVORDoKLQl7Ci0JCXN0cnVjdCBkdmJ0X3NldF9wYXJhbWV0ZXJzX21zZyAqcGFyYW0gPSAmY2luZXJneXQyLT5wYXJhbTsKLQkJc3RydWN0IGR2Yl9mcm9udGVuZF9wYXJhbWV0ZXJzIHA7Ci0JCWludCBlcnI7Ci0KLQkJaWYgKChmaWxlLT5mX2ZsYWdzICYgT19BQ0NNT0RFKSA9PSBPX1JET05MWSkKLQkJCXJldHVybiAtRVBFUk07Ci0KLQkJaWYgKGNvcHlfZnJvbV91c2VyKCZwLCAodm9pZCAgX191c2VyKikgYXJnLCBzaXplb2YocCkpKQotCQkJcmV0dXJuIC1FRkFVTFQ7Ci0KLQkJaWYgKGNpbmVyZ3l0Mi0+ZGlzY29ubmVjdF9wZW5kaW5nKQotCQkJcmV0dXJuIC1FQUdBSU47Ci0JCWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmNpbmVyZ3l0Mi0+c2VtKSkKLQkJCXJldHVybiAtRVJFU1RBUlRTWVM7Ci0KLQkJcGFyYW0tPmNtZCA9IENJTkVSR1lUMl9FUDFfU0VUX1RVTkVSX1BBUkFNRVRFUlM7Ci0JCXBhcmFtLT50cHMgPSBjcHVfdG9fbGUxNihjb21wdXRlX3RwcygmcCkpOwotCQlwYXJhbS0+ZnJlcSA9IGNwdV90b19sZTMyKHAuZnJlcXVlbmN5IC8gMTAwMCk7Ci0JCXBhcmFtLT5iYW5kd2lkdGggPSA4IC0gcC51Lm9mZG0uYmFuZHdpZHRoIC0gQkFORFdJRFRIXzhfTUhaOwotCi0JCXN0YXQtPmxvY2tfYml0cyA9IDA7Ci0JCWNpbmVyZ3l0Mi0+cGVuZGluZ19mZV9ldmVudHMrKzsKLQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZjaW5lcmd5dDItPnBvbGxfd3EpOwotCi0JCWVyciA9IGNpbmVyZ3l0Ml9jb21tYW5kKGNpbmVyZ3l0MiwKLQkJCQkJKGNoYXIgKikgcGFyYW0sIHNpemVvZigqcGFyYW0pLAotCQkJCQlOVUxMLCAwKTsKLQotCQltdXRleF91bmxvY2soJmNpbmVyZ3l0Mi0+c2VtKTsKLQotCQlyZXR1cm4gKGVyciA8IDApID8gZXJyIDogMDsKLQl9Ci0KLQljYXNlIEZFX0dFVF9GUk9OVEVORDoKLQkJLyoqCi0JCSAqICB0cml2aWFsIHRvIGltcGxlbWVudCAoc2VlIHN0cnVjdCBkdmJ0X2dldF9zdGF0dXNfbXNnKS4KLQkJICogIGVxdWl2YWxlbnQgdG8gRkVfUkVBRCBpb2N0bHMsIGJ1dCBuZWVkcwotCQkgKiAgVFBTIC0+IGxpbnV4LWR2YiBwYXJhbWV0ZXIgc2V0IGNvbnZlcnNpb24uIEZlZWwgZnJlZQotCQkgKiAgdG8gaW1wbGVtZW50IHRoaXMgYW5kIHNlbmQgdXMgYSBwYXRjaCBpZiB5b3UgbmVlZCB0aGlzCi0JCSAqICBmdW5jdGlvbmFsaXR5LgotCQkgKi8KLQkJYnJlYWs7Ci0KLQljYXNlIEZFX0dFVF9FVkVOVDoKLQl7Ci0JCS8qKgotCQkgKiAgZm9yIG5vdyB3ZSBvbmx5IGZpbGwgdGhlIHN0YXR1cyBmaWVsZC4gdGhlIHBhcmFtZXRlcnMKLQkJICogIGFyZSB0cml2aWFsIHRvIGZpbGwgYXMgc29vbiBGRV9HRVRfRlJPTlRFTkQgaXMgZG9uZS4KLQkJICovCi0JCXN0cnVjdCBkdmJfZnJvbnRlbmRfZXZlbnQgX191c2VyICplID0gKHZvaWQgX191c2VyICopIGFyZzsKLQkJaWYgKGNpbmVyZ3l0Mi0+cGVuZGluZ19mZV9ldmVudHMgPT0gMCkgewotCQkJaWYgKGZpbGUtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKQotCQkJCXJldHVybiAtRVdPVUxEQkxPQ0s7Ci0JCQl3YWl0X2V2ZW50X2ludGVycnVwdGlibGUoY2luZXJneXQyLT5wb2xsX3dxLAotCQkJCQkJIGNpbmVyZ3l0Mi0+cGVuZGluZ19mZV9ldmVudHMgPiAwKTsKLQkJfQotCQljaW5lcmd5dDItPnBlbmRpbmdfZmVfZXZlbnRzID0gMDsKLQkJcmV0dXJuIGNpbmVyZ3l0Ml9pb2N0bChpbm9kZSwgZmlsZSwgRkVfUkVBRF9TVEFUVVMsCi0JCQkJCSh1bnNpZ25lZCBsb25nKSAmZS0+c3RhdHVzKTsKLQl9Ci0KLQlkZWZhdWx0OgotCQk7Ci0JfQotCi0JcmV0dXJuIC1FSU5WQUw7Ci19Ci0KLXN0YXRpYyBpbnQgY2luZXJneXQyX21tYXAoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQotewotCXN0cnVjdCBkdmJfZGV2aWNlICpkdmJkZXYgPSBmaWxlLT5wcml2YXRlX2RhdGE7Ci0Jc3RydWN0IGNpbmVyZ3l0MiAqY2luZXJneXQyID0gZHZiZGV2LT5wcml2OwotCWludCByZXQgPSAwOwotCi0JbG9ja19rZXJuZWwoKTsKLQotCWlmICh2bWEtPnZtX2ZsYWdzICYgKFZNX1dSSVRFIHwgVk1fRVhFQykpIHsKLQkJcmV0ID0gLUVQRVJNOwotCQlnb3RvIGJhaWxvdXQ7Ci0JfQotCi0JaWYgKHZtYS0+dm1fZW5kID4gdm1hLT52bV9zdGFydCArIFNUUkVBTV9VUkJfQ09VTlQgKiBTVFJFQU1fQlVGX1NJWkUpIHsKLQkJcmV0ID0gLUVJTlZBTDsKLQkJZ290byBiYWlsb3V0OwotCX0KLQotCXZtYS0+dm1fZmxhZ3MgfD0gKFZNX0lPIHwgVk1fRE9OVENPUFkpOwotCXZtYS0+dm1fZmlsZSA9IGZpbGU7Ci0KLQlyZXQgPSByZW1hcF9wZm5fcmFuZ2Uodm1hLCB2bWEtPnZtX3N0YXJ0LAotCQkJICAgICAgdmlydF90b19waHlzKGNpbmVyZ3l0Mi0+c3RyZWFtYnVmKSA+PiBQQUdFX1NISUZULAotCQkJICAgICAgdm1hLT52bV9lbmQgLSB2bWEtPnZtX3N0YXJ0LAotCQkJICAgICAgdm1hLT52bV9wYWdlX3Byb3QpID8gLUVBR0FJTiA6IDA7Ci1iYWlsb3V0OgotCXVubG9ja19rZXJuZWwoKTsKLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBjaW5lcmd5dDJfZm9wcyA9IHsKLQkub3duZXIgICAgICAgICAgPSBUSElTX01PRFVMRSwKLQkuaW9jdGwJCT0gY2luZXJneXQyX2lvY3RsLAotCS5wb2xsICAgICAgICAgICA9IGNpbmVyZ3l0Ml9wb2xsLAotCS5vcGVuICAgICAgICAgICA9IGNpbmVyZ3l0Ml9vcGVuLAotCS5yZWxlYXNlICAgICAgICA9IGNpbmVyZ3l0Ml9yZWxlYXNlLAotCS5tbWFwCQk9IGNpbmVyZ3l0Ml9tbWFwCi19OwotCi1zdGF0aWMgc3RydWN0IGR2Yl9kZXZpY2UgY2luZXJneXQyX2ZlX3RlbXBsYXRlID0gewotCS51c2VycyA9IH4wLAotCS53cml0ZXJzID0gMSwKLQkucmVhZGVycyA9ICh+MCktMSwKLQkuZm9wcyA9ICZjaW5lcmd5dDJfZm9wcwotfTsKLQotI2lmZGVmIEVOQUJMRV9SQwotCi1zdGF0aWMgdm9pZCBjaW5lcmd5dDJfcXVlcnlfcmMgKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKLXsKLQlzdHJ1Y3QgY2luZXJneXQyICpjaW5lcmd5dDIgPQotCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IGNpbmVyZ3l0MiwgcmNfcXVlcnlfd29yay53b3JrKTsKLQljaGFyIGJ1ZlsxXSA9IHsgQ0lORVJHWVQyX0VQMV9HRVRfUkNfRVZFTlRTIH07Ci0Jc3RydWN0IGNpbmVyZ3l0Ml9yY19ldmVudCByY19ldmVudHNbMTJdOwotCWludCBuLCBsZW4sIGk7Ci0KLQlpZiAoY2luZXJneXQyLT5kaXNjb25uZWN0X3BlbmRpbmcgfHwgbXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZjaW5lcmd5dDItPnNlbSkpCi0JCXJldHVybjsKLQotCWxlbiA9IGNpbmVyZ3l0Ml9jb21tYW5kKGNpbmVyZ3l0MiwgYnVmLCBzaXplb2YoYnVmKSwKLQkJCQkoY2hhciAqKSByY19ldmVudHMsIHNpemVvZihyY19ldmVudHMpKTsKLQlpZiAobGVuIDwgMCkKLQkJZ290byBvdXQ7Ci0JaWYgKGxlbiA9PSAwKSB7Ci0JCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIGNpbmVyZ3l0Mi0+bGFzdF9ldmVudF9qaWZmaWVzICsKLQkJCSAgICAgICBtc2Vjc190b19qaWZmaWVzKDE1MCkpKSB7Ci0JCQkvKiBzdG9wIGtleSByZXBlYXQgKi8KLQkJCWlmIChjaW5lcmd5dDItPnJjX2lucHV0X2V2ZW50ICE9IEtFWV9NQVgpIHsKLQkJCQlkcHJpbnRrKDEsICJyY19pbnB1dF9ldmVudD0lZCBVcFxuIiwgY2luZXJneXQyLT5yY19pbnB1dF9ldmVudCk7Ci0JCQkJaW5wdXRfcmVwb3J0X2tleShjaW5lcmd5dDItPnJjX2lucHV0X2RldiwKLQkJCQkJCSBjaW5lcmd5dDItPnJjX2lucHV0X2V2ZW50LCAwKTsKLQkJCQlpbnB1dF9zeW5jKGNpbmVyZ3l0Mi0+cmNfaW5wdXRfZGV2KTsKLQkJCQljaW5lcmd5dDItPnJjX2lucHV0X2V2ZW50ID0gS0VZX01BWDsKLQkJCX0KLQkJCWNpbmVyZ3l0Mi0+cmNfbGFzdF9jb2RlID0gY3B1X3RvX2xlMzIofjApOwotCQl9Ci0JCWdvdG8gb3V0OwotCX0KLQljaW5lcmd5dDItPmxhc3RfZXZlbnRfamlmZmllcyA9IGppZmZpZXM7Ci0KLQlmb3IgKG4gPSAwOyBuIDwgKGxlbiAvIHNpemVvZihyY19ldmVudHNbMF0pKTsgbisrKSB7Ci0JCWRwcmludGsoMSwgInJjX2V2ZW50c1slZF0udmFsdWUgPSAleCwgdHlwZT0leFxuIiwKLQkJCW4sIGxlMzJfdG9fY3B1KHJjX2V2ZW50c1tuXS52YWx1ZSksIHJjX2V2ZW50c1tuXS50eXBlKTsKLQotCQlpZiAocmNfZXZlbnRzW25dLnR5cGUgPT0gQ0lORVJHWVQyX1JDX0VWRU5UX1RZUEVfTkVDICYmCi0JCSAgICByY19ldmVudHNbbl0udmFsdWUgPT0gY3B1X3RvX2xlMzIofjApKSB7Ci0JCQkvKiBrZXlyZXBlYXQgYml0IC0+IGp1c3QgcmVwZWF0IGxhc3QgcmNfaW5wdXRfZXZlbnQgKi8KLQkJfSBlbHNlIHsKLQkJCWNpbmVyZ3l0Mi0+cmNfaW5wdXRfZXZlbnQgPSBLRVlfTUFYOwotCQkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocmNfa2V5cyk7IGkgKz0gMykgewotCQkJCWlmIChyY19rZXlzW2kgKyAwXSA9PSByY19ldmVudHNbbl0udHlwZSAmJgotCQkJCSAgICByY19rZXlzW2kgKyAxXSA9PSBsZTMyX3RvX2NwdShyY19ldmVudHNbbl0udmFsdWUpKSB7Ci0JCQkJCWNpbmVyZ3l0Mi0+cmNfaW5wdXRfZXZlbnQgPSByY19rZXlzW2kgKyAyXTsKLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJfQotCQl9Ci0KLQkJaWYgKGNpbmVyZ3l0Mi0+cmNfaW5wdXRfZXZlbnQgIT0gS0VZX01BWCkgewotCQkJaWYgKHJjX2V2ZW50c1tuXS52YWx1ZSA9PSBjaW5lcmd5dDItPnJjX2xhc3RfY29kZSAmJgotCQkJICAgIGNpbmVyZ3l0Mi0+cmNfbGFzdF9jb2RlICE9IGNwdV90b19sZTMyKH4wKSkgewotCQkJCS8qIGVtaXQgYSBrZXktdXAgc28gdGhlIGRvdWJsZSBldmVudCBpcyByZWNvZ25pemVkICovCi0JCQkJZHByaW50aygxLCAicmNfaW5wdXRfZXZlbnQ9JWQgVVBcbiIsIGNpbmVyZ3l0Mi0+cmNfaW5wdXRfZXZlbnQpOwotCQkJCWlucHV0X3JlcG9ydF9rZXkoY2luZXJneXQyLT5yY19pbnB1dF9kZXYsCi0JCQkJCQkgY2luZXJneXQyLT5yY19pbnB1dF9ldmVudCwgMCk7Ci0JCQl9Ci0JCQlkcHJpbnRrKDEsICJyY19pbnB1dF9ldmVudD0lZFxuIiwgY2luZXJneXQyLT5yY19pbnB1dF9ldmVudCk7Ci0JCQlpbnB1dF9yZXBvcnRfa2V5KGNpbmVyZ3l0Mi0+cmNfaW5wdXRfZGV2LAotCQkJCQkgY2luZXJneXQyLT5yY19pbnB1dF9ldmVudCwgMSk7Ci0JCQlpbnB1dF9zeW5jKGNpbmVyZ3l0Mi0+cmNfaW5wdXRfZGV2KTsKLQkJCWNpbmVyZ3l0Mi0+cmNfbGFzdF9jb2RlID0gcmNfZXZlbnRzW25dLnZhbHVlOwotCQl9Ci0JfQotCi1vdXQ6Ci0Jc2NoZWR1bGVfZGVsYXllZF93b3JrKCZjaW5lcmd5dDItPnJjX3F1ZXJ5X3dvcmssCi0JCQkgICAgICBtc2Vjc190b19qaWZmaWVzKFJDX1FVRVJZX0lOVEVSVkFMKSk7Ci0KLQltdXRleF91bmxvY2soJmNpbmVyZ3l0Mi0+c2VtKTsKLX0KLQotc3RhdGljIGludCBjaW5lcmd5dDJfcmVnaXN0ZXJfcmMoc3RydWN0IGNpbmVyZ3l0MiAqY2luZXJneXQyKQotewotCXN0cnVjdCBpbnB1dF9kZXYgKmlucHV0X2RldjsKLQlpbnQgaTsKLQlpbnQgZXJyOwotCi0JaW5wdXRfZGV2ID0gaW5wdXRfYWxsb2NhdGVfZGV2aWNlKCk7Ci0JaWYgKCFpbnB1dF9kZXYpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JdXNiX21ha2VfcGF0aChjaW5lcmd5dDItPnVkZXYsIGNpbmVyZ3l0Mi0+cGh5cywgc2l6ZW9mKGNpbmVyZ3l0Mi0+cGh5cykpOwotCXN0cmxjYXQoY2luZXJneXQyLT5waHlzLCAiL2lucHV0MCIsIHNpemVvZihjaW5lcmd5dDItPnBoeXMpKTsKLQljaW5lcmd5dDItPnJjX2lucHV0X2V2ZW50ID0gS0VZX01BWDsKLQljaW5lcmd5dDItPnJjX2xhc3RfY29kZSA9IGNwdV90b19sZTMyKH4wKTsKLQlJTklUX0RFTEFZRURfV09SSygmY2luZXJneXQyLT5yY19xdWVyeV93b3JrLCBjaW5lcmd5dDJfcXVlcnlfcmMpOwotCi0JaW5wdXRfZGV2LT5uYW1lID0gRFJJVkVSX05BTUUgIiByZW1vdGUgY29udHJvbCI7Ci0JaW5wdXRfZGV2LT5waHlzID0gY2luZXJneXQyLT5waHlzOwotCWlucHV0X2Rldi0+ZXZiaXRbMF0gPSBCSVRfTUFTSyhFVl9LRVkpIHwgQklUX01BU0soRVZfUkVQKTsKLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShyY19rZXlzKTsgaSArPSAzKQotCQlzZXRfYml0KHJjX2tleXNbaSArIDJdLCBpbnB1dF9kZXYtPmtleWJpdCk7Ci0JaW5wdXRfZGV2LT5rZXljb2Rlc2l6ZSA9IDA7Ci0JaW5wdXRfZGV2LT5rZXljb2RlbWF4ID0gMDsKLQlpbnB1dF9kZXYtPmlkLmJ1c3R5cGUgPSBCVVNfVVNCOwotCWlucHV0X2Rldi0+aWQudmVuZG9yID0gbGUxNl90b19jcHUoY2luZXJneXQyLT51ZGV2LT5kZXNjcmlwdG9yLmlkVmVuZG9yKTsKLQlpbnB1dF9kZXYtPmlkLnByb2R1Y3QgPSBsZTE2X3RvX2NwdShjaW5lcmd5dDItPnVkZXYtPmRlc2NyaXB0b3IuaWRQcm9kdWN0KTsKLQlpbnB1dF9kZXYtPmlkLnZlcnNpb24gPSAxOwotCWlucHV0X2Rldi0+ZGV2LnBhcmVudCA9ICZjaW5lcmd5dDItPnVkZXYtPmRldjsKLQotCWVyciA9IGlucHV0X3JlZ2lzdGVyX2RldmljZShpbnB1dF9kZXYpOwotCWlmIChlcnIpIHsKLQkJaW5wdXRfZnJlZV9kZXZpY2UoaW5wdXRfZGV2KTsKLQkJcmV0dXJuIGVycjsKLQl9Ci0KLQljaW5lcmd5dDItPnJjX2lucHV0X2RldiA9IGlucHV0X2RldjsKLQlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJmNpbmVyZ3l0Mi0+cmNfcXVlcnlfd29yaywgSFovMik7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgY2luZXJneXQyX3VucmVnaXN0ZXJfcmMoc3RydWN0IGNpbmVyZ3l0MiAqY2luZXJneXQyKQotewotCWNhbmNlbF9yZWFybWluZ19kZWxheWVkX3dvcmsoJmNpbmVyZ3l0Mi0+cmNfcXVlcnlfd29yayk7Ci0JaW5wdXRfdW5yZWdpc3Rlcl9kZXZpY2UoY2luZXJneXQyLT5yY19pbnB1dF9kZXYpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgY2luZXJneXQyX3N1c3BlbmRfcmMoc3RydWN0IGNpbmVyZ3l0MiAqY2luZXJneXQyKQotewotCWNhbmNlbF9yZWFybWluZ19kZWxheWVkX3dvcmsoJmNpbmVyZ3l0Mi0+cmNfcXVlcnlfd29yayk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBjaW5lcmd5dDJfcmVzdW1lX3JjKHN0cnVjdCBjaW5lcmd5dDIgKmNpbmVyZ3l0MikKLXsKLQlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJmNpbmVyZ3l0Mi0+cmNfcXVlcnlfd29yaywgSFovMik7Ci19Ci0KLSNlbHNlCi0KLXN0YXRpYyBpbmxpbmUgaW50IGNpbmVyZ3l0Ml9yZWdpc3Rlcl9yYyhzdHJ1Y3QgY2luZXJneXQyICpjaW5lcmd5dDIpIHsgcmV0dXJuIDA7IH0KLXN0YXRpYyBpbmxpbmUgdm9pZCBjaW5lcmd5dDJfdW5yZWdpc3Rlcl9yYyhzdHJ1Y3QgY2luZXJneXQyICpjaW5lcmd5dDIpIHsgfQotc3RhdGljIGlubGluZSB2b2lkIGNpbmVyZ3l0Ml9zdXNwZW5kX3JjKHN0cnVjdCBjaW5lcmd5dDIgKmNpbmVyZ3l0MikgeyB9Ci1zdGF0aWMgaW5saW5lIHZvaWQgY2luZXJneXQyX3Jlc3VtZV9yYyhzdHJ1Y3QgY2luZXJneXQyICpjaW5lcmd5dDIpIHsgfQotCi0jZW5kaWYgLyogRU5BQkxFX1JDICovCi0KLXN0YXRpYyB2b2lkIGNpbmVyZ3l0Ml9xdWVyeSAoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQotewotCXN0cnVjdCBjaW5lcmd5dDIgKmNpbmVyZ3l0MiA9Ci0JCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgY2luZXJneXQyLCBxdWVyeV93b3JrLndvcmspOwotCWNoYXIgY21kIFtdID0geyBDSU5FUkdZVDJfRVAxX0dFVF9UVU5FUl9TVEFUVVMgfTsKLQlzdHJ1Y3QgZHZidF9nZXRfc3RhdHVzX21zZyAqcyA9ICZjaW5lcmd5dDItPnN0YXR1czsKLQl1aW50OF90IGxvY2tfYml0czsKLQotCWlmIChjaW5lcmd5dDItPmRpc2Nvbm5lY3RfcGVuZGluZyB8fCBtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmNpbmVyZ3l0Mi0+c2VtKSkKLQkJcmV0dXJuOwotCi0JbG9ja19iaXRzID0gcy0+bG9ja19iaXRzOwotCi0JY2luZXJneXQyX2NvbW1hbmQoY2luZXJneXQyLCBjbWQsIHNpemVvZihjbWQpLCAoY2hhciAqKSBzLCBzaXplb2YoKnMpKTsKLQotCWNpbmVyZ3l0Mi0+dW5jb3JyZWN0ZWRfYmxvY2tfY291bnQgKz0KLQkJbGUzMl90b19jcHUocy0+dW5jb3JyZWN0ZWRfYmxvY2tfY291bnQpOwotCi0JaWYgKGxvY2tfYml0cyAhPSBzLT5sb2NrX2JpdHMpIHsKLQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZjaW5lcmd5dDItPnBvbGxfd3EpOwotCQljaW5lcmd5dDItPnBlbmRpbmdfZmVfZXZlbnRzKys7Ci0JfQotCi0Jc2NoZWR1bGVfZGVsYXllZF93b3JrKCZjaW5lcmd5dDItPnF1ZXJ5X3dvcmssCi0JCQkgICAgICBtc2Vjc190b19qaWZmaWVzKFFVRVJZX0lOVEVSVkFMKSk7Ci0KLQltdXRleF91bmxvY2soJmNpbmVyZ3l0Mi0+c2VtKTsKLX0KLQotc3RhdGljIGludCBjaW5lcmd5dDJfcHJvYmUgKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLAotCQkgIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKLXsKLQlzdHJ1Y3QgY2luZXJneXQyICpjaW5lcmd5dDI7Ci0JaW50IGVycjsKLQotCWlmICghKGNpbmVyZ3l0MiA9IGt6YWxsb2MgKHNpemVvZihzdHJ1Y3QgY2luZXJneXQyKSwgR0ZQX0tFUk5FTCkpKSB7Ci0JCWRwcmludGsoMSwgIm91dCBvZiBtZW1vcnk/IT9cbiIpOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9Ci0KLQl1c2Jfc2V0X2ludGZkYXRhIChpbnRmLCAodm9pZCAqKSBjaW5lcmd5dDIpOwotCi0JbXV0ZXhfaW5pdCgmY2luZXJneXQyLT5zZW0pOwotCW11dGV4X2luaXQoJmNpbmVyZ3l0Mi0+d3Ffc2VtKTsKLQlpbml0X3dhaXRxdWV1ZV9oZWFkICgmY2luZXJneXQyLT5wb2xsX3dxKTsKLQlJTklUX0RFTEFZRURfV09SSygmY2luZXJneXQyLT5xdWVyeV93b3JrLCBjaW5lcmd5dDJfcXVlcnkpOwotCi0JY2luZXJneXQyLT51ZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldihpbnRmKTsKLQljaW5lcmd5dDItPnBhcmFtLmNtZCA9IENJTkVSR1lUMl9FUDFfU0VUX1RVTkVSX1BBUkFNRVRFUlM7Ci0KLQlpZiAoY2luZXJneXQyX2FsbG9jX3N0cmVhbV91cmJzIChjaW5lcmd5dDIpIDwgMCkgewotCQlkcHJpbnRrKDEsICJ1bmFibGUgdG8gYWxsb2NhdGUgc3RyZWFtIHVyYnNcbiIpOwotCQlrZnJlZShjaW5lcmd5dDIpOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9Ci0KLQllcnIgPSBkdmJfcmVnaXN0ZXJfYWRhcHRlcigmY2luZXJneXQyLT5hZGFwdGVyLCBEUklWRVJfTkFNRSwKLQkJCQkgICBUSElTX01PRFVMRSwgJmNpbmVyZ3l0Mi0+dWRldi0+ZGV2LAotCQkJCSAgIGFkYXB0ZXJfbnIpOwotCWlmIChlcnIgPCAwKSB7Ci0JCWtmcmVlKGNpbmVyZ3l0Mik7Ci0JCXJldHVybiBlcnI7Ci0JfQotCi0JY2luZXJneXQyLT5kZW11eC5wcml2ID0gY2luZXJneXQyOwotCWNpbmVyZ3l0Mi0+ZGVtdXguZmlsdGVybnVtID0gMjU2OwotCWNpbmVyZ3l0Mi0+ZGVtdXguZmVlZG51bSA9IDI1NjsKLQljaW5lcmd5dDItPmRlbXV4LnN0YXJ0X2ZlZWQgPSBjaW5lcmd5dDJfc3RhcnRfZmVlZDsKLQljaW5lcmd5dDItPmRlbXV4LnN0b3BfZmVlZCA9IGNpbmVyZ3l0Ml9zdG9wX2ZlZWQ7Ci0JY2luZXJneXQyLT5kZW11eC5kbXguY2FwYWJpbGl0aWVzID0gRE1YX1RTX0ZJTFRFUklORyB8Ci0JCQkJCSAgICBETVhfU0VDVElPTl9GSUxURVJJTkcgfAotCQkJCQkgICAgRE1YX01FTU9SWV9CQVNFRF9GSUxURVJJTkc7Ci0KLQlpZiAoKGVyciA9IGR2Yl9kbXhfaW5pdCgmY2luZXJneXQyLT5kZW11eCkpIDwgMCkgewotCQlkcHJpbnRrKDEsICJkdmJfZG14X2luaXQoKSBmYWlsZWQgKGVyciA9ICVkKVxuIiwgZXJyKTsKLQkJZ290byBiYWlsb3V0OwotCX0KLQotCWNpbmVyZ3l0Mi0+ZG14ZGV2LmZpbHRlcm51bSA9IGNpbmVyZ3l0Mi0+ZGVtdXguZmlsdGVybnVtOwotCWNpbmVyZ3l0Mi0+ZG14ZGV2LmRlbXV4ID0gJmNpbmVyZ3l0Mi0+ZGVtdXguZG14OwotCWNpbmVyZ3l0Mi0+ZG14ZGV2LmNhcGFiaWxpdGllcyA9IDA7Ci0KLQlpZiAoKGVyciA9IGR2Yl9kbXhkZXZfaW5pdCgmY2luZXJneXQyLT5kbXhkZXYsICZjaW5lcmd5dDItPmFkYXB0ZXIpKSA8IDApIHsKLQkJZHByaW50aygxLCAiZHZiX2RteGRldl9pbml0KCkgZmFpbGVkIChlcnIgPSAlZClcbiIsIGVycik7Ci0JCWdvdG8gYmFpbG91dDsKLQl9Ci0KLQlpZiAoZHZiX25ldF9pbml0KCZjaW5lcmd5dDItPmFkYXB0ZXIsICZjaW5lcmd5dDItPmR2Ym5ldCwgJmNpbmVyZ3l0Mi0+ZGVtdXguZG14KSkKLQkJZHByaW50aygxLCAiZHZiX25ldF9pbml0KCkgZmFpbGVkIVxuIik7Ci0KLQlkdmJfcmVnaXN0ZXJfZGV2aWNlKCZjaW5lcmd5dDItPmFkYXB0ZXIsICZjaW5lcmd5dDItPmZlZGV2LAotCQkJICAgICZjaW5lcmd5dDJfZmVfdGVtcGxhdGUsIGNpbmVyZ3l0MiwKLQkJCSAgICBEVkJfREVWSUNFX0ZST05URU5EKTsKLQotCWVyciA9IGNpbmVyZ3l0Ml9yZWdpc3Rlcl9yYyhjaW5lcmd5dDIpOwotCWlmIChlcnIpCi0JCWdvdG8gYmFpbG91dDsKLQotCXJldHVybiAwOwotCi1iYWlsb3V0OgotCWR2Yl9uZXRfcmVsZWFzZSgmY2luZXJneXQyLT5kdmJuZXQpOwotCWR2Yl9kbXhkZXZfcmVsZWFzZSgmY2luZXJneXQyLT5kbXhkZXYpOwotCWR2Yl9kbXhfcmVsZWFzZSgmY2luZXJneXQyLT5kZW11eCk7Ci0JZHZiX3VucmVnaXN0ZXJfYWRhcHRlcigmY2luZXJneXQyLT5hZGFwdGVyKTsKLQljaW5lcmd5dDJfZnJlZV9zdHJlYW1fdXJicyhjaW5lcmd5dDIpOwotCWtmcmVlKGNpbmVyZ3l0Mik7Ci0JcmV0dXJuIC1FTk9NRU07Ci19Ci0KLXN0YXRpYyB2b2lkIGNpbmVyZ3l0Ml9kaXNjb25uZWN0IChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKLXsKLQlzdHJ1Y3QgY2luZXJneXQyICpjaW5lcmd5dDIgPSB1c2JfZ2V0X2ludGZkYXRhIChpbnRmKTsKLQotCWNpbmVyZ3l0Ml91bnJlZ2lzdGVyX3JjKGNpbmVyZ3l0Mik7Ci0JY2FuY2VsX3JlYXJtaW5nX2RlbGF5ZWRfd29yaygmY2luZXJneXQyLT5xdWVyeV93b3JrKTsKLQl3YWtlX3VwX2ludGVycnVwdGlibGUoJmNpbmVyZ3l0Mi0+cG9sbF93cSk7Ci0KLQljaW5lcmd5dDItPmRlbXV4LmRteC5jbG9zZSgmY2luZXJneXQyLT5kZW11eC5kbXgpOwotCWNpbmVyZ3l0Mi0+ZGlzY29ubmVjdF9wZW5kaW5nID0gMTsKLQotCWlmICghYXRvbWljX3JlYWQoJmNpbmVyZ3l0Mi0+aW51c2UpKQotCQljaW5lcmd5dDJfdW5yZWdpc3RlcihjaW5lcmd5dDIpOwotfQotCi1zdGF0aWMgaW50IGNpbmVyZ3l0Ml9zdXNwZW5kIChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwgcG1fbWVzc2FnZV90IHN0YXRlKQotewotCXN0cnVjdCBjaW5lcmd5dDIgKmNpbmVyZ3l0MiA9IHVzYl9nZXRfaW50ZmRhdGEgKGludGYpOwotCi0JaWYgKGNpbmVyZ3l0Mi0+ZGlzY29ubmVjdF9wZW5kaW5nKQotCQlyZXR1cm4gLUVBR0FJTjsKLQlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZjaW5lcmd5dDItPndxX3NlbSkpCi0JCXJldHVybiAtRVJFU1RBUlRTWVM7Ci0KLQljaW5lcmd5dDJfc3VzcGVuZF9yYyhjaW5lcmd5dDIpOwotCWNhbmNlbF9yZWFybWluZ19kZWxheWVkX3dvcmsoJmNpbmVyZ3l0Mi0+cXVlcnlfd29yayk7Ci0KLQltdXRleF9sb2NrKCZjaW5lcmd5dDItPnNlbSk7Ci0JaWYgKGNpbmVyZ3l0Mi0+c3RyZWFtaW5nKQotCQljaW5lcmd5dDJfc3RvcF9zdHJlYW1feGZlcihjaW5lcmd5dDIpOwotCWNpbmVyZ3l0Ml9zbGVlcChjaW5lcmd5dDIsIDEpOwotCW11dGV4X3VubG9jaygmY2luZXJneXQyLT5zZW0pOwotCi0JbXV0ZXhfdW5sb2NrKCZjaW5lcmd5dDItPndxX3NlbSk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBjaW5lcmd5dDJfcmVzdW1lIChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKLXsKLQlzdHJ1Y3QgY2luZXJneXQyICpjaW5lcmd5dDIgPSB1c2JfZ2V0X2ludGZkYXRhIChpbnRmKTsKLQlzdHJ1Y3QgZHZidF9zZXRfcGFyYW1ldGVyc19tc2cgKnBhcmFtID0gJmNpbmVyZ3l0Mi0+cGFyYW07Ci0JaW50IGVyciA9IC1FQUdBSU47Ci0KLQlpZiAoY2luZXJneXQyLT5kaXNjb25uZWN0X3BlbmRpbmcpCi0JCWdvdG8gb3V0OwotCWVyciA9IG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmY2luZXJneXQyLT53cV9zZW0pOwotCWlmIChlcnIpCi0JCWdvdG8gb3V0OwotCi0JZXJyID0gbXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZjaW5lcmd5dDItPnNlbSk7Ci0JaWYgKGVycikKLQkJZ290byBvdXRfdW5sb2NrMTsKLQotCWlmICghY2luZXJneXQyLT5zbGVlcGluZykgewotCQljaW5lcmd5dDJfc2xlZXAoY2luZXJneXQyLCAwKTsKLQkJY2luZXJneXQyX2NvbW1hbmQoY2luZXJneXQyLCAoY2hhciAqKSBwYXJhbSwgc2l6ZW9mKCpwYXJhbSksIE5VTEwsIDApOwotCQlpZiAoY2luZXJneXQyLT5zdHJlYW1pbmcpCi0JCQljaW5lcmd5dDJfc3RhcnRfc3RyZWFtX3hmZXIoY2luZXJneXQyKTsKLQkJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZjaW5lcmd5dDItPnF1ZXJ5X3dvcmssIEhaLzIpOwotCX0KLQotCWNpbmVyZ3l0Ml9yZXN1bWVfcmMoY2luZXJneXQyKTsKLQotCW11dGV4X3VubG9jaygmY2luZXJneXQyLT5zZW0pOwotb3V0X3VubG9jazE6Ci0JbXV0ZXhfdW5sb2NrKCZjaW5lcmd5dDItPndxX3NlbSk7Ci1vdXQ6Ci0JcmV0dXJuIGVycjsKLX0KLQotc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkIGNpbmVyZ3l0Ml90YWJsZSBbXSBfX2RldmluaXRkYXRhID0gewotCXsgVVNCX0RFVklDRSgweDBjY2QsIDB4MDAzOCkgfSwKLQl7IDAgfQotfTsKLQotTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIGNpbmVyZ3l0Ml90YWJsZSk7Ci0KLXN0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBjaW5lcmd5dDJfZHJpdmVyID0gewotCS5uYW1lCT0gImNpbmVyZ3lUMiIsCi0JLnByb2JlCT0gY2luZXJneXQyX3Byb2JlLAotCS5kaXNjb25uZWN0CT0gY2luZXJneXQyX2Rpc2Nvbm5lY3QsCi0JLnN1c3BlbmQJPSBjaW5lcmd5dDJfc3VzcGVuZCwKLQkucmVzdW1lCQk9IGNpbmVyZ3l0Ml9yZXN1bWUsCi0JLmlkX3RhYmxlCT0gY2luZXJneXQyX3RhYmxlCi19OwotCi1zdGF0aWMgaW50IF9faW5pdCBjaW5lcmd5dDJfaW5pdCAodm9pZCkKLXsKLQlpbnQgZXJyOwotCi0JaWYgKChlcnIgPSB1c2JfcmVnaXN0ZXIoJmNpbmVyZ3l0Ml9kcml2ZXIpKSA8IDApCi0JCWRwcmludGsoMSwgInVzYl9yZWdpc3RlcigpIGZhaWxlZCEgKGVyciAlaSlcbiIsIGVycik7Ci0KLQlyZXR1cm4gZXJyOwotfQotCi1zdGF0aWMgdm9pZCBfX2V4aXQgY2luZXJneXQyX2V4aXQgKHZvaWQpCi17Ci0JdXNiX2RlcmVnaXN0ZXIoJmNpbmVyZ3l0Ml9kcml2ZXIpOwotfQotCi1tb2R1bGVfaW5pdCAoY2luZXJneXQyX2luaXQpOwotbW9kdWxlX2V4aXQgKGNpbmVyZ3l0Ml9leGl0KTsKLQotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotTU9EVUxFX0FVVEhPUigiSG9sZ2VyIFdhZWNodGxlciwgRGFuaWVsIE1hY2siKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2RtMTEwNS9LY29uZmlnIGIvZHJpdmVycy9tZWRpYS9kdmIvZG0xMTA1L0tjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTMzMjMwMQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2RtMTEwNS9LY29uZmlnCkBAIC0wLDAgKzEsMTggQEAKK2NvbmZpZyBEVkJfRE0xMTA1CisJdHJpc3RhdGUgIlNETUMgRE0xMTA1IGJhc2VkIFBDSSBjYXJkcyIKKwlkZXBlbmRzIG9uIERWQl9DT1JFICYmIFBDSSAmJiBJMkMKKwlzZWxlY3QgRFZCX1BMTCBpZiAhRFZCX0ZFX0NVU1RPTUlTRQorCXNlbGVjdCBEVkJfU1RWMDI5OSBpZiAhRFZCX0ZFX0NVU1RPTUlTRQorCXNlbGVjdCBEVkJfU1RWMDI4OCBpZiAhRFZCX0ZFX0NVU1RPTUlTRQorCXNlbGVjdCBEVkJfU1RCNjAwMCBpZiAhRFZCX0ZFX0NVU1RPTUlTRQorCXNlbGVjdCBEVkJfQ1gyNDExNiBpZiAhRFZCX0ZFX0NVU1RPTUlTRQorCXNlbGVjdCBEVkJfU0kyMVhYIGlmICFEVkJfRkVfQ1VTVE9NSVNFCisJaGVscAorCSAgU3VwcG9ydCBmb3IgY2FyZHMgYmFzZWQgb24gdGhlIFNETUMgRE0xMTA1IFBDSSBjaGlwIGxpa2UKKwkgIER2YldvcmxkIDIwMDIKKworCSAgU2luY2UgdGhlc2UgY2FyZHMgaGF2ZSBubyBNUEVHIGRlY29kZXIgb25ib2FyZCwgdGhleSB0cmFuc21pdAorCSAgb25seSBjb21wcmVzc2VkIE1QRUcgZGF0YSBvdmVyIHRoZSBQQ0kgYnVzLCBzbyB5b3UgbmVlZAorCSAgYW4gZXh0ZXJuYWwgc29mdHdhcmUgZGVjb2RlciB0byB3YXRjaCBUViBvbiB5b3VyIGNvbXB1dGVyLgorCisJICBTYXkgWSBvciBNIGlmIHlvdSBvd24gc3VjaCBhIGRldmljZSBhbmQgd2FudCB0byB1c2UgaXQuCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kbTExMDUvTWFrZWZpbGUgYi9kcml2ZXJzL21lZGlhL2R2Yi9kbTExMDUvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGFjMjhiMAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2RtMTEwNS9NYWtlZmlsZQpAQCAtMCwwICsxLDMgQEAKK29iai0kKENPTkZJR19EVkJfRE0xMTA1KSArPSBkbTExMDUubworCitFWFRSQV9DRkxBR1MgKz0gLUlkcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS8gLUlkcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2RtMTEwNS9kbTExMDUuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2RtMTEwNS9kbTExMDUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNGU2MjdlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZG0xMTA1L2RtMTEwNS5jCkBAIC0wLDAgKzEsOTIzIEBACisvKgorICogZG0xMTA1LmMgLSBkcml2ZXIgZm9yIERWQiBjYXJkcyBiYXNlZCBvbiBTRE1DIERNMTEwNSBQQ0kgY2hpcAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBJZ29yIE0uIExpcGxpYW5pbiA8bGlwbGlhbmluQG1lLmJ5PgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgorI2luY2x1ZGUgPG1lZGlhL2lyLWNvbW1vbi5oPgorCisjaW5jbHVkZSAiZGVtdXguaCIKKyNpbmNsdWRlICJkbXhkZXYuaCIKKyNpbmNsdWRlICJkdmJfZGVtdXguaCIKKyNpbmNsdWRlICJkdmJfZnJvbnRlbmQuaCIKKyNpbmNsdWRlICJkdmJfbmV0LmgiCisjaW5jbHVkZSAiZHZiZGV2LmgiCisjaW5jbHVkZSAiZHZiLXBsbC5oIgorCisjaW5jbHVkZSAic3R2MDI5OS5oIgorI2luY2x1ZGUgInN0djAyODguaCIKKyNpbmNsdWRlICJzdGI2MDAwLmgiCisjaW5jbHVkZSAic2kyMXh4LmgiCisjaW5jbHVkZSAiY3gyNDExNi5oIgorI2luY2x1ZGUgInowMTk0YS5oIgorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLyoKKyAqIFBDSSBJRCdzCisgKi8KKyNpZm5kZWYgUENJX1ZFTkRPUl9JRF9UUklHRU0KKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9UUklHRU0JMHgxMDlmCisjZW5kaWYKKyNpZm5kZWYgUENJX0RFVklDRV9JRF9ETTExMDUKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9ETTExMDUJMHgwMzZmCisjZW5kaWYKKyNpZm5kZWYgUENJX0RFVklDRV9JRF9EVzIwMDIKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9EVzIwMDIJMHgyMDAyCisjZW5kaWYKKyNpZm5kZWYgUENJX0RFVklDRV9JRF9EVzIwMDQKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9EVzIwMDQJMHgyMDA0CisjZW5kaWYKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKiBzZG1jIGRtMTEwNSByZWdpc3RlcnMgKi8KKworLyogVFMgQ29udHJvbCAqLworI2RlZmluZSBETTExMDVfVFNDVFIJCQkJMHgwMAorI2RlZmluZSBETTExMDVfRFRBTEVOVEgJCQkJMHgwNAorCisvKiBHUElPIEludGVyZmFjZSAqLworI2RlZmluZSBETTExMDVfR1BJT1ZBTAkJCQkweDA4CisjZGVmaW5lIERNMTEwNV9HUElPQ1RSCQkJCTB4MGMKKworLyogUElEIHNlcmlhbCBudW1iZXIgKi8KKyNkZWZpbmUgRE0xMTA1X1BJRE4JCQkJMHgxMAorCisvKiBPZGQtZXZlbiBzZWNyZXQga2V5IHNlbGVjdCAqLworI2RlZmluZSBETTExMDVfQ1dTRUwJCQkJMHgxNAorCisvKiBIb3N0IENvbW1hbmQgSW50ZXJmYWNlICovCisjZGVmaW5lIERNMTEwNV9IT1NUX0NUUgkJCQkweDE4CisjZGVmaW5lIERNMTEwNV9IT1NUX0FECQkJCTB4MWMKKworLyogUENJIEludGVyZmFjZSAqLworI2RlZmluZSBETTExMDVfQ1IJCQkJMHgzMAorI2RlZmluZSBETTExMDVfUlNUCQkJCTB4MzQKKyNkZWZpbmUgRE0xMTA1X1NUQURSCQkJCTB4MzgKKyNkZWZpbmUgRE0xMTA1X1JMRU4JCQkJMHgzYworI2RlZmluZSBETTExMDVfV1JQCQkJCTB4NDAKKyNkZWZpbmUgRE0xMTA1X0lOVENOVAkJCQkweDQ0CisjZGVmaW5lIERNMTEwNV9JTlRNQUsJCQkJMHg0OAorI2RlZmluZSBETTExMDVfSU5UU1RTCQkJCTB4NGMKKworLyogQ1cgVmFsdWUgKi8KKyNkZWZpbmUgRE0xMTA1X09ERAkJCQkweDUwCisjZGVmaW5lIERNMTEwNV9FVkVOCQkJCTB4NTgKKworLyogUElEIFZhbHVlICovCisjZGVmaW5lIERNMTEwNV9QSUQJCQkJMHg2MAorCisvKiBJUiBDb250cm9sICovCisjZGVmaW5lIERNMTEwNV9JUkNUUgkJCQkweDY0CisjZGVmaW5lIERNMTEwNV9JUk1PREUJCQkJMHg2OAorI2RlZmluZSBETTExMDVfU1lTVEVNQ09ERQkJCTB4NmMKKyNkZWZpbmUgRE0xMTA1X0lSQ09ERQkJCQkweDcwCisKKy8qIFVua25vd24gVmFsdWVzICovCisjZGVmaW5lIERNMTEwNV9FTkNSWVBUCQkJCTB4NzQKKyNkZWZpbmUgRE0xMTA1X1ZFUgkJCQkweDdjCisKKy8qIEkyQyBJbnRlcmZhY2UgKi8KKyNkZWZpbmUgRE0xMTA1X0kyQ0NUUgkJCQkweDgwCisjZGVmaW5lIERNMTEwNV9JMkNTVFMJCQkJMHg4MQorI2RlZmluZSBETTExMDVfSTJDREFUCQkJCTB4ODIKKyNkZWZpbmUgRE0xMTA1X0kyQ19SQQkJCQkweDgzCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLyogSW50ZXJydXB0IE1hc2sgQml0cyAqLworCisjZGVmaW5lIElOVE1BS19UU0lSUU0JCQkJMHgwMQorI2RlZmluZSBJTlRNQUtfSElSUU0JCQkJMHgwNAorI2RlZmluZSBJTlRNQUtfSVJNCQkJCTB4MDgKKyNkZWZpbmUgSU5UTUFLX0FMTE1BU0sJCQkJKElOVE1BS19UU0lSUU0gfCBcCisJCQkJCQlJTlRNQUtfSElSUU0gfCBcCisJCQkJCQlJTlRNQUtfSVJNKQorI2RlZmluZSBJTlRNQUtfTk9ORU1BU0sJCQkJMHgwMAorCisvKiBJbnRlcnJ1cHQgU3RhdHVzIEJpdHMgKi8KKyNkZWZpbmUgSU5UU1RTX1RTSVJRCQkJCTB4MDEKKyNkZWZpbmUgSU5UU1RTX0hJUlEJCQkJMHgwNAorI2RlZmluZSBJTlRTVFNfSVIJCQkJMHgwOAorCisvKiBJUiBDb250cm9sIEJpdHMgKi8KKyNkZWZpbmUgRE0xMTA1X0lSX0VOCQkJCTB4MDEKKyNkZWZpbmUgRE0xMTA1X1NZU19DSEsJCQkJMHgwMgorI2RlZmluZSBETTExMDVfUkVQX0ZMRwkJCQkweDA4CisKKy8qIEVFUFJPTSBhZGRyICovCisjZGVmaW5lIElJQ18yNEMwMV9hZGRyCQkJCTB4YTAKKy8qIE1heCBib2FyZCBjb3VudCAqLworI2RlZmluZSBETTExMDVfTUFYCQkJCTB4MDQKKworI2RlZmluZSBEUklWRVJfTkFNRQkJCQkiZG0xMTA1IgorCisjZGVmaW5lIERNMTEwNV9ETUFfUEFDS0VUUwkJCTQ3CisjZGVmaW5lIERNMTEwNV9ETUFfUEFDS0VUX0xFTkdUSAkJKDEyOCo0KQorI2RlZmluZSBETTExMDVfRE1BX0JZVEVTCQkJKDEyOCAqIDQgKiBETTExMDVfRE1BX1BBQ0tFVFMpCisKKy8qIEdQSU8ncyBmb3IgTE5CIHBvd2VyIGNvbnRyb2wgKi8KKyNkZWZpbmUgRE0xMTA1X0xOQl9NQVNLCQkJCTB4MDAwMDAwMDAKKyNkZWZpbmUgRE0xMTA1X0xOQl8xM1YJCQkJMHgwMDAxMDEwMAorI2RlZmluZSBETTExMDVfTE5CXzE4VgkJCQkweDAwMDAwMTAwCisKK3N0YXRpYyBpbnQgaXJfZGVidWc7Cittb2R1bGVfcGFyYW0oaXJfZGVidWcsIGludCwgMDY0NCk7CitNT0RVTEVfUEFSTV9ERVNDKGlyX2RlYnVnLCAiZW5hYmxlIGRlYnVnZ2luZyBpbmZvcm1hdGlvbiBmb3IgSVIgZGVjb2RpbmciKTsKKworRFZCX0RFRklORV9NT0RfT1BUX0FEQVBURVJfTlIoYWRhcHRlcl9ucik7CisKK3N0YXRpYyB1MTYgaXJfY29kZXNfZG0xMTA1X25lY1sxMjhdID0geworCVsweDBhXSA9IEtFWV9RLAkJLypwb3dlciovCisJWzB4MGNdID0gS0VZX00sCQkvKm11dGUqLworCVsweDExXSA9IEtFWV8xLAorCVsweDEyXSA9IEtFWV8yLAorCVsweDEzXSA9IEtFWV8zLAorCVsweDE0XSA9IEtFWV80LAorCVsweDE1XSA9IEtFWV81LAorCVsweDE2XSA9IEtFWV82LAorCVsweDE3XSA9IEtFWV83LAorCVsweDE4XSA9IEtFWV84LAorCVsweDE5XSA9IEtFWV85LAorCVsweDEwXSA9IEtFWV8wLAorCVsweDFjXSA9IEtFWV9QQUdFVVAsCS8qY2grKi8KKwlbMHgwZl0gPSBLRVlfUEFHRURPV04sCS8qY2gtKi8KKwlbMHgxYV0gPSBLRVlfTywJCS8qdm9sKyovCisJWzB4MGVdID0gS0VZX1osCQkvKnZvbC0qLworCVsweDA0XSA9IEtFWV9SLAkJLypyZWMqLworCVsweDA5XSA9IEtFWV9ELAkJLypmYXYqLworCVsweDA4XSA9IEtFWV9CQUNLU1BBQ0UsCS8qcmV3aW5kKi8KKwlbMHgwN10gPSBLRVlfQSwJCS8qZmFzdCovCisJWzB4MGJdID0gS0VZX1AsCQkvKnBhdXNlKi8KKwlbMHgwMl0gPSBLRVlfRVNDLAkvKmNhbmNlbCovCisJWzB4MDNdID0gS0VZX0csCQkvKnRhYiovCisJWzB4MDBdID0gS0VZX1VQLAkvKnVwKi8KKwlbMHgxZl0gPSBLRVlfRU5URVIsCS8qb2sqLworCVsweDAxXSA9IEtFWV9ET1dOLAkvKmRvd24qLworCVsweDA1XSA9IEtFWV9DLAkJLypjYXAqLworCVsweDA2XSA9IEtFWV9TLAkJLypzdG9wKi8KKwlbMHg0MF0gPSBLRVlfRiwJCS8qZnVsbCovCisJWzB4MWVdID0gS0VZX1csCQkvKnR2bW9kZSovCisJWzB4MWJdID0gS0VZX0IsCQkvKnJlY2FsbCovCit9OworCisvKiBpbmZyYXJlZCByZW1vdGUgY29udHJvbCAqLworc3RydWN0IGluZnJhcmVkIHsKKwl1MTYJa2V5X21hcFsxMjhdOworCXN0cnVjdCBpbnB1dF9kZXYJKmlucHV0X2RldjsKKwljaGFyCQkJaW5wdXRfcGh5c1szMl07CisJc3RydWN0IHRhc2tsZXRfc3RydWN0CWlyX3Rhc2tsZXQ7CisJdTMyCQkJaXJfY29tbWFuZDsKK307CisKK3N0cnVjdCBkbTExMDVkdmIgeworCS8qIHBjaSAqLworCXN0cnVjdCBwY2lfZGV2ICpwZGV2OworCXU4IF9faW9tZW0gKmlvX21lbTsKKworCS8qIGlyICovCisJc3RydWN0IGluZnJhcmVkIGlyOworCisJLyogZHZiICovCisJc3RydWN0IGRteF9mcm9udGVuZCBod19mcm9udGVuZDsKKwlzdHJ1Y3QgZG14X2Zyb250ZW5kIG1lbV9mcm9udGVuZDsKKwlzdHJ1Y3QgZG14ZGV2IGRteGRldjsKKwlzdHJ1Y3QgZHZiX2FkYXB0ZXIgZHZiX2FkYXB0ZXI7CisJc3RydWN0IGR2Yl9kZW11eCBkZW11eDsKKwlzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZTsKKwlzdHJ1Y3QgZHZiX25ldCBkdmJuZXQ7CisJdW5zaWduZWQgaW50IGZ1bGxfdHNfdXNlcnM7CisKKwkvKiBpMmMgKi8KKwlzdHJ1Y3QgaTJjX2FkYXB0ZXIgaTJjX2FkYXA7CisKKwkvKiBkbWEgKi8KKwlkbWFfYWRkcl90IGRtYV9hZGRyOworCXVuc2lnbmVkIGNoYXIgKnRzX2J1ZjsKKwl1MzIgd3JwOworCXUzMiBidWZmZXJfc2l6ZTsKKwl1bnNpZ25lZCBpbnQJUGFja2V0RXJyb3JDb3VudDsKKwl1bnNpZ25lZCBpbnQgZG1hcnN0OworCXNwaW5sb2NrX3QgbG9jazsKKworfTsKKworI2RlZmluZSBkbV9pb19tZW0ocmVnKQkoKHVuc2lnbmVkIGxvbmcpKCZkbTExMDVkdmItPmlvX21lbVtyZWddKSkKKworc3RhdGljIHN0cnVjdCBkbTExMDVkdmIgKmRtMTEwNWR2Yl9sb2NhbDsKKworc3RhdGljIGludCBkbTExMDVfaTJjX3hmZXIoc3RydWN0IGkyY19hZGFwdGVyICppMmNfYWRhcCwKKwkJCSAgICBzdHJ1Y3QgaTJjX21zZyAqbXNncywgaW50IG51bSkKK3sKKwlzdHJ1Y3QgZG0xMTA1ZHZiICpkbTExMDVkdmIgOworCisJaW50IGFkZHIsIHJjLCBpLCBqLCBrLCBsZW4sIGJ5dGUsIGRhdGE7CisJdTggc3RhdHVzOworCisJZG0xMTA1ZHZiID0gaTJjX2FkYXAtPmFsZ29fZGF0YTsKKwlmb3IgKGkgPSAwOyBpIDwgbnVtOyBpKyspIHsKKwkJb3V0YigweDAwLCBkbV9pb19tZW0oRE0xMTA1X0kyQ0NUUikpOworCQlpZiAobXNnc1tpXS5mbGFncyAmIEkyQ19NX1JEKSB7CisJCQkvKiByZWFkIGJ5dGVzICovCisJCQlhZGRyICA9IG1zZ3NbaV0uYWRkciA8PCAxOworCQkJYWRkciB8PSAxOworCQkJb3V0YihhZGRyLCBkbV9pb19tZW0oRE0xMTA1X0kyQ0RBVCkpOworCQkJZm9yIChieXRlID0gMDsgYnl0ZSA8IG1zZ3NbaV0ubGVuOyBieXRlKyspCisJCQkJb3V0YigwLCBkbV9pb19tZW0oRE0xMTA1X0kyQ0RBVCArIGJ5dGUgKyAxKSk7CisKKwkJCW91dGIoMHg4MSArIG1zZ3NbaV0ubGVuLCBkbV9pb19tZW0oRE0xMTA1X0kyQ0NUUikpOworCQkJZm9yIChqID0gMDsgaiA8IDU1OyBqKyspIHsKKwkJCQltZGVsYXkoMTApOworCQkJCXN0YXR1cyA9IGluYihkbV9pb19tZW0oRE0xMTA1X0kyQ1NUUykpOworCQkJCWlmICgoc3RhdHVzICYgMHhjMCkgPT0gMHg0MCkKKwkJCQkJYnJlYWs7CisJCQl9CisJCQlpZiAoaiA+PSA1NSkKKwkJCQlyZXR1cm4gLTE7CisKKwkJCWZvciAoYnl0ZSA9IDA7IGJ5dGUgPCBtc2dzW2ldLmxlbjsgYnl0ZSsrKSB7CisJCQkJcmMgPSBpbmIoZG1faW9fbWVtKERNMTEwNV9JMkNEQVQgKyBieXRlICsgMSkpOworCQkJCWlmIChyYyA8IDApCisJCQkJCWdvdG8gZXJyOworCQkJCW1zZ3NbaV0uYnVmW2J5dGVdID0gcmM7CisJCQl9CisJCX0gZWxzZSB7CisJCQlpZiAoKG1zZ3NbaV0uYnVmWzBdID09IDB4ZjcpICYmIChtc2dzW2ldLmFkZHIgPT0gMHg1NSkpIHsKKwkJCQkvKiBwcmVwYWlyZWQgZm9yIGN4MjQxMTYgZmlybXdhcmUgKi8KKwkJCQkvKiBXcml0ZSBpbiBzbWFsbCBibG9ja3MgKi8KKwkJCQlsZW4gPSBtc2dzW2ldLmxlbiAtIDE7CisJCQkJayA9IDE7CisJCQkJZG8geworCQkJCQlvdXRiKG1zZ3NbaV0uYWRkciA8PCAxLCBkbV9pb19tZW0oRE0xMTA1X0kyQ0RBVCkpOworCQkJCQlvdXRiKDB4ZjcsIGRtX2lvX21lbShETTExMDVfSTJDREFUICsgMSkpOworCQkJCQlmb3IgKGJ5dGUgPSAwOyBieXRlIDwgKGxlbiA+IDQ4ID8gNDggOiBsZW4pOyBieXRlKyspIHsKKwkJCQkJCWRhdGEgPSBtc2dzW2ldLmJ1ZltrK2J5dGVdOworCQkJCQkJb3V0YihkYXRhLCBkbV9pb19tZW0oRE0xMTA1X0kyQ0RBVCArIGJ5dGUgKyAyKSk7CisJCQkJCX0KKwkJCQkJb3V0YigweDgyICsgKGxlbiA+IDQ4ID8gNDggOiBsZW4pLCBkbV9pb19tZW0oRE0xMTA1X0kyQ0NUUikpOworCQkJCQlmb3IgKGogPSAwOyBqIDwgMjU7IGorKykgeworCQkJCQkJbWRlbGF5KDEwKTsKKwkJCQkJCXN0YXR1cyA9IGluYihkbV9pb19tZW0oRE0xMTA1X0kyQ1NUUykpOworCQkJCQkJaWYgKChzdGF0dXMgJiAweGMwKSA9PSAweDQwKQorCQkJCQkJCWJyZWFrOworCQkJCQl9CisKKwkJCQkJaWYgKGogPj0gMjUpCisJCQkJCQlyZXR1cm4gLTE7CisKKwkJCQkJayArPSA0ODsKKwkJCQkJbGVuIC09IDQ4OworCQkJCX0gd2hpbGUgKGxlbiA+IDApOworCQkJfSBlbHNlIHsKKwkJCQkvKiB3cml0ZSBieXRlcyAqLworCQkJCW91dGIobXNnc1tpXS5hZGRyPDwxLCBkbV9pb19tZW0oRE0xMTA1X0kyQ0RBVCkpOworCQkJCWZvciAoYnl0ZSA9IDA7IGJ5dGUgPCBtc2dzW2ldLmxlbjsgYnl0ZSsrKSB7CisJCQkJCWRhdGEgPSBtc2dzW2ldLmJ1ZltieXRlXTsKKwkJCQkJb3V0YihkYXRhLCBkbV9pb19tZW0oRE0xMTA1X0kyQ0RBVCArIGJ5dGUgKyAxKSk7CisJCQkJfQorCQkJCW91dGIoMHg4MSArIG1zZ3NbaV0ubGVuLCBkbV9pb19tZW0oRE0xMTA1X0kyQ0NUUikpOworCQkJCWZvciAoaiA9IDA7IGogPCAyNTsgaisrKSB7CisJCQkJCW1kZWxheSgxMCk7CisJCQkJCXN0YXR1cyA9IGluYihkbV9pb19tZW0oRE0xMTA1X0kyQ1NUUykpOworCQkJCQlpZiAoKHN0YXR1cyAmIDB4YzApID09IDB4NDApCisJCQkJCQlicmVhazsKKwkJCQl9CisKKwkJCQlpZiAoaiA+PSAyNSkKKwkJCQkJcmV0dXJuIC0xOworCQkJfQorCQl9CisJfQorCXJldHVybiBudW07CisgZXJyOgorCXJldHVybiByYzsKK30KKworc3RhdGljIHUzMiBmdW5jdGlvbmFsaXR5KHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcCkKK3sKKwlyZXR1cm4gSTJDX0ZVTkNfSTJDOworfQorCitzdGF0aWMgc3RydWN0IGkyY19hbGdvcml0aG0gZG0xMTA1X2FsZ28gPSB7CisJLm1hc3Rlcl94ZmVyICAgPSBkbTExMDVfaTJjX3hmZXIsCisJLmZ1bmN0aW9uYWxpdHkgPSBmdW5jdGlvbmFsaXR5LAorfTsKKworc3RhdGljIGlubGluZSBzdHJ1Y3QgZG0xMTA1ZHZiICpmZWVkX3RvX2RtMTEwNWR2YihzdHJ1Y3QgZHZiX2RlbXV4X2ZlZWQgKmZlZWQpCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihmZWVkLT5kZW11eCwgc3RydWN0IGRtMTEwNWR2YiwgZGVtdXgpOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBkbTExMDVkdmIgKmZyb250ZW5kX3RvX2RtMTEwNWR2YihzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSkKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKGZlLT5kdmIsIHN0cnVjdCBkbTExMDVkdmIsIGR2Yl9hZGFwdGVyKTsKK30KKworc3RhdGljIGludCBkbTExMDVkdmJfc2V0X3ZvbHRhZ2Uoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIGZlX3NlY192b2x0YWdlX3Qgdm9sdGFnZSkKK3sKKwlzdHJ1Y3QgZG0xMTA1ZHZiICpkbTExMDVkdmIgPSBmcm9udGVuZF90b19kbTExMDVkdmIoZmUpOworCisJCWlmICh2b2x0YWdlID09IFNFQ19WT0xUQUdFXzE4KSB7CisJCQlvdXRsKERNMTEwNV9MTkJfTUFTSywgZG1faW9fbWVtKERNMTEwNV9HUElPQ1RSKSk7CisJCQlvdXRsKERNMTEwNV9MTkJfMThWLCBkbV9pb19tZW0oRE0xMTA1X0dQSU9WQUwpKTsKKwkJfSBlbHNlCXsKKwkJLypMTkIgT04tMTNWIGJ5IGRlZmF1bHQhKi8KKwkJCW91dGwoRE0xMTA1X0xOQl9NQVNLLCBkbV9pb19tZW0oRE0xMTA1X0dQSU9DVFIpKTsKKwkJCW91dGwoRE0xMTA1X0xOQl8xM1YsIGRtX2lvX21lbShETTExMDVfR1BJT1ZBTCkpOworCQl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgZG0xMTA1ZHZiX3NldF9kbWFfYWRkcihzdHJ1Y3QgZG0xMTA1ZHZiICpkbTExMDVkdmIpCit7CisJb3V0bChjcHVfdG9fbGUzMihkbTExMDVkdmItPmRtYV9hZGRyKSwgZG1faW9fbWVtKERNMTEwNV9TVEFEUikpOworfQorCitzdGF0aWMgaW50IF9fZGV2aW5pdCBkbTExMDVkdmJfZG1hX21hcChzdHJ1Y3QgZG0xMTA1ZHZiICpkbTExMDVkdmIpCit7CisJZG0xMTA1ZHZiLT50c19idWYgPSBwY2lfYWxsb2NfY29uc2lzdGVudChkbTExMDVkdmItPnBkZXYsIDYqRE0xMTA1X0RNQV9CWVRFUywgJmRtMTEwNWR2Yi0+ZG1hX2FkZHIpOworCisJcmV0dXJuIHBjaV9kbWFfbWFwcGluZ19lcnJvcihkbTExMDVkdmItPnBkZXYsIGRtMTEwNWR2Yi0+ZG1hX2FkZHIpOworfQorCitzdGF0aWMgdm9pZCBkbTExMDVkdmJfZG1hX3VubWFwKHN0cnVjdCBkbTExMDVkdmIgKmRtMTEwNWR2YikKK3sKKwlwY2lfZnJlZV9jb25zaXN0ZW50KGRtMTEwNWR2Yi0+cGRldiwgNipETTExMDVfRE1BX0JZVEVTLCBkbTExMDVkdmItPnRzX2J1ZiwgZG0xMTA1ZHZiLT5kbWFfYWRkcik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZGV2aW5pdCBkbTExMDVkdmJfZW5hYmxlX2lycXMoc3RydWN0IGRtMTEwNWR2YiAqZG0xMTA1ZHZiKQoreworCW91dGIoSU5UTUFLX0FMTE1BU0ssIGRtX2lvX21lbShETTExMDVfSU5UTUFLKSk7CisJb3V0YigxLCBkbV9pb19tZW0oRE0xMTA1X0NSKSk7Cit9CisKK3N0YXRpYyB2b2lkIGRtMTEwNWR2Yl9kaXNhYmxlX2lycXMoc3RydWN0IGRtMTEwNWR2YiAqZG0xMTA1ZHZiKQoreworCW91dGIoSU5UTUFLX0lSTSwgZG1faW9fbWVtKERNMTEwNV9JTlRNQUspKTsKKwlvdXRiKDAsIGRtX2lvX21lbShETTExMDVfQ1IpKTsKK30KKworc3RhdGljIGludCBkbTExMDVkdmJfc3RhcnRfZmVlZChzdHJ1Y3QgZHZiX2RlbXV4X2ZlZWQgKmYpCit7CisJc3RydWN0IGRtMTEwNWR2YiAqZG0xMTA1ZHZiID0gZmVlZF90b19kbTExMDVkdmIoZik7CisKKwlpZiAoZG0xMTA1ZHZiLT5mdWxsX3RzX3VzZXJzKysgPT0gMCkKKwkJZG0xMTA1ZHZiX2VuYWJsZV9pcnFzKGRtMTEwNWR2Yik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBkbTExMDVkdmJfc3RvcF9mZWVkKHN0cnVjdCBkdmJfZGVtdXhfZmVlZCAqZikKK3sKKwlzdHJ1Y3QgZG0xMTA1ZHZiICpkbTExMDVkdmIgPSBmZWVkX3RvX2RtMTEwNWR2YihmKTsKKworCWlmICgtLWRtMTEwNWR2Yi0+ZnVsbF90c191c2VycyA9PSAwKQorCQlkbTExMDVkdmJfZGlzYWJsZV9pcnFzKGRtMTEwNWR2Yik7CisKKwlyZXR1cm4gMDsKK30KKworLyogaXIgdGFza2xldCAqLworc3RhdGljIHZvaWQgZG0xMTA1X2VtaXRfa2V5KHVuc2lnbmVkIGxvbmcgcGFybSkKK3sKKwlzdHJ1Y3QgaW5mcmFyZWQgKmlyID0gKHN0cnVjdCBpbmZyYXJlZCAqKSBwYXJtOworCXUzMiBpcmNvbSA9IGlyLT5pcl9jb21tYW5kOworCXU4IGRhdGE7CisJdTE2IGtleWNvZGU7CisKKwlkYXRhID0gKGlyY29tID4+IDgpICYgMHg3ZjsKKworCWlucHV0X2V2ZW50KGlyLT5pbnB1dF9kZXYsIEVWX01TQywgTVNDX1JBVywgKDB4MDAwMGY4IDw8IDE2KSB8IGRhdGEpOworCWlucHV0X2V2ZW50KGlyLT5pbnB1dF9kZXYsIEVWX01TQywgTVNDX1NDQU4sIGRhdGEpOworCWtleWNvZGUgPSBpci0+a2V5X21hcFtkYXRhXTsKKworCWlmICgha2V5Y29kZSkKKwkJcmV0dXJuOworCisJaW5wdXRfZXZlbnQoaXItPmlucHV0X2RldiwgRVZfS0VZLCBrZXljb2RlLCAxKTsKKwlpbnB1dF9zeW5jKGlyLT5pbnB1dF9kZXYpOworCWlucHV0X2V2ZW50KGlyLT5pbnB1dF9kZXYsIEVWX0tFWSwga2V5Y29kZSwgMCk7CisJaW5wdXRfc3luYyhpci0+aW5wdXRfZGV2KTsKKworfQorCitzdGF0aWMgaXJxcmV0dXJuX3QgZG0xMTA1ZHZiX2lycShpbnQgaXJxLCB2b2lkICpkZXZfaWQpCit7CisJc3RydWN0IGRtMTEwNWR2YiAqZG0xMTA1ZHZiID0gZGV2X2lkOworCXVuc2lnbmVkIGludCBwaWVjZTsKKwl1bnNpZ25lZCBpbnQgbmJwYWNrZXRzOworCXUzMiBjb21tYW5kOworCXUzMiBuZXh0d3JwOworCXUzMiBvbGR3cnA7CisKKwkvKiBSZWFkLVdyaXRlIElOU1RTIEFjaydzIEludGVycnVwdCBmb3IgRE0xMTA1IGNoaXAgMTYuMDMuMjAwOCAqLworCXVuc2lnbmVkIGludCBpbnRzdHMgPSBpbmIoZG1faW9fbWVtKERNMTEwNV9JTlRTVFMpKTsKKwlvdXRiKGludHN0cywgZG1faW9fbWVtKERNMTEwNV9JTlRTVFMpKTsKKworCXN3aXRjaCAoaW50c3RzKSB7CisJY2FzZSBJTlRTVFNfVFNJUlE6CisJY2FzZSAoSU5UU1RTX1RTSVJRIHwgSU5UU1RTX0lSKToKKwkJbmV4dHdycCA9IGlubChkbV9pb19tZW0oRE0xMTA1X1dSUCkpIC0KKwkJCWlubChkbV9pb19tZW0oRE0xMTA1X1NUQURSKSkgOworCQlvbGR3cnAgPSBkbTExMDVkdmItPndycDsKKwkJc3Bpbl9sb2NrKCZkbTExMDVkdmItPmxvY2spOworCQlpZiAoISgoZG0xMTA1ZHZiLT50c19idWZbb2xkd3JwXSA9PSAweDQ3KSAmJgorCQkJCShkbTExMDVkdmItPnRzX2J1ZltvbGR3cnAgKyAxODhdID09IDB4NDcpICYmCisJCQkJKGRtMTEwNWR2Yi0+dHNfYnVmW29sZHdycCArIDE4OCAqIDJdID09IDB4NDcpKSkgeworCQkJZG0xMTA1ZHZiLT5QYWNrZXRFcnJvckNvdW50Kys7CisJCQkvKiBiYWQgcGFja2V0IGZvdW5kICovCisJCQlpZiAoKGRtMTEwNWR2Yi0+UGFja2V0RXJyb3JDb3VudCA+PSAyKSAmJgorCQkJCQkoZG0xMTA1ZHZiLT5kbWFyc3QgPT0gMCkpIHsKKwkJCQlvdXRiKDEsIGRtX2lvX21lbShETTExMDVfUlNUKSk7CisJCQkJZG0xMTA1ZHZiLT53cnAgPSAwOworCQkJCWRtMTEwNWR2Yi0+UGFja2V0RXJyb3JDb3VudCA9IDA7CisJCQkJZG0xMTA1ZHZiLT5kbWFyc3QgPSAwOworCQkJCXNwaW5fdW5sb2NrKCZkbTExMDVkdmItPmxvY2spOworCQkJCXJldHVybiBJUlFfSEFORExFRDsKKwkJCX0KKwkJfQorCQlpZiAobmV4dHdycCA8IG9sZHdycCkgeworCQkJcGllY2UgPSBkbTExMDVkdmItPmJ1ZmZlcl9zaXplIC0gb2xkd3JwOworCQkJbWVtY3B5KGRtMTEwNWR2Yi0+dHNfYnVmICsgZG0xMTA1ZHZiLT5idWZmZXJfc2l6ZSwgZG0xMTA1ZHZiLT50c19idWYsIG5leHR3cnApOworCQkJbmJwYWNrZXRzID0gKHBpZWNlICsgbmV4dHdycCkvMTg4OworCQl9IGVsc2UJeworCQkJbmJwYWNrZXRzID0gKG5leHR3cnAgLSBvbGR3cnApLzE4ODsKKwkJfQorCQlkdmJfZG14X3N3ZmlsdGVyX3BhY2tldHMoJmRtMTEwNWR2Yi0+ZGVtdXgsICZkbTExMDVkdmItPnRzX2J1ZltvbGR3cnBdLCBuYnBhY2tldHMpOworCQlkbTExMDVkdmItPndycCA9IG5leHR3cnA7CisJCXNwaW5fdW5sb2NrKCZkbTExMDVkdmItPmxvY2spOworCQlicmVhazsKKwljYXNlIElOVFNUU19JUjoKKwkJY29tbWFuZCA9IGlubChkbV9pb19tZW0oRE0xMTA1X0lSQ09ERSkpOworCQlpZiAoaXJfZGVidWcpCisJCQlwcmludGsoImRtMTEwNTogcmVjZWl2ZWQgYnl0ZSAweCUwNHhcbiIsIGNvbW1hbmQpOworCisJCWRtMTEwNWR2Yi0+aXIuaXJfY29tbWFuZCA9IGNvbW1hbmQ7CisJCXRhc2tsZXRfc2NoZWR1bGUoJmRtMTEwNWR2Yi0+aXIuaXJfdGFza2xldCk7CisJCWJyZWFrOworCX0KKwlyZXR1cm4gSVJRX0hBTkRMRUQ7CisKKworfQorCisvKiByZWdpc3RlciB3aXRoIGlucHV0IGxheWVyICovCitzdGF0aWMgdm9pZCBpbnB1dF9yZWdpc3Rlcl9rZXlzKHN0cnVjdCBpbmZyYXJlZCAqaXIpCit7CisJaW50IGk7CisKKwltZW1zZXQoaXItPmlucHV0X2Rldi0+a2V5Yml0LCAwLCBzaXplb2YoaXItPmlucHV0X2Rldi0+a2V5Yml0KSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShpci0+a2V5X21hcCk7IGkrKykKKwkJCXNldF9iaXQoaXItPmtleV9tYXBbaV0sIGlyLT5pbnB1dF9kZXYtPmtleWJpdCk7CisKKwlpci0+aW5wdXRfZGV2LT5rZXljb2RlID0gaXItPmtleV9tYXA7CisJaXItPmlucHV0X2Rldi0+a2V5Y29kZXNpemUgPSBzaXplb2YoaXItPmtleV9tYXBbMF0pOworCWlyLT5pbnB1dF9kZXYtPmtleWNvZGVtYXggPSBBUlJBWV9TSVpFKGlyLT5rZXlfbWFwKTsKK30KKworaW50IF9fZGV2aW5pdCBkbTExMDVfaXJfaW5pdChzdHJ1Y3QgZG0xMTA1ZHZiICpkbTExMDUpCit7CisJc3RydWN0IGlucHV0X2RldiAqaW5wdXRfZGV2OworCWludCBlcnI7CisKKwlkbTExMDVkdmJfbG9jYWwgPSBkbTExMDU7CisKKwlpbnB1dF9kZXYgPSBpbnB1dF9hbGxvY2F0ZV9kZXZpY2UoKTsKKwlpZiAoIWlucHV0X2RldikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlkbTExMDUtPmlyLmlucHV0X2RldiA9IGlucHV0X2RldjsKKwlzbnByaW50ZihkbTExMDUtPmlyLmlucHV0X3BoeXMsIHNpemVvZihkbTExMDUtPmlyLmlucHV0X3BoeXMpLAorCQkicGNpLSVzL2lyMCIsIHBjaV9uYW1lKGRtMTEwNS0+cGRldikpOworCisJaW5wdXRfZGV2LT5ldmJpdFswXSA9IEJJVChFVl9LRVkpOworCWlucHV0X2Rldi0+bmFtZSA9ICJEVkIgb24tY2FyZCBJUiByZWNlaXZlciI7CisKKwlpbnB1dF9kZXYtPnBoeXMgPSBkbTExMDUtPmlyLmlucHV0X3BoeXM7CisJaW5wdXRfZGV2LT5pZC5idXN0eXBlID0gQlVTX1BDSTsKKwlpbnB1dF9kZXYtPmlkLnZlcnNpb24gPSAyOworCWlmIChkbTExMDUtPnBkZXYtPnN1YnN5c3RlbV92ZW5kb3IpIHsKKwkJaW5wdXRfZGV2LT5pZC52ZW5kb3IgPSBkbTExMDUtPnBkZXYtPnN1YnN5c3RlbV92ZW5kb3I7CisJCWlucHV0X2Rldi0+aWQucHJvZHVjdCA9IGRtMTEwNS0+cGRldi0+c3Vic3lzdGVtX2RldmljZTsKKwl9IGVsc2UgeworCQlpbnB1dF9kZXYtPmlkLnZlbmRvciA9IGRtMTEwNS0+cGRldi0+dmVuZG9yOworCQlpbnB1dF9kZXYtPmlkLnByb2R1Y3QgPSBkbTExMDUtPnBkZXYtPmRldmljZTsKKwl9CisJaW5wdXRfZGV2LT5kZXYucGFyZW50ID0gJmRtMTEwNS0+cGRldi0+ZGV2OworCS8qIGluaXRpYWwga2V5bWFwICovCisJbWVtY3B5KGRtMTEwNS0+aXIua2V5X21hcCwgaXJfY29kZXNfZG0xMTA1X25lYywgc2l6ZW9mIGRtMTEwNS0+aXIua2V5X21hcCk7CisJaW5wdXRfcmVnaXN0ZXJfa2V5cygmZG0xMTA1LT5pcik7CisJZXJyID0gaW5wdXRfcmVnaXN0ZXJfZGV2aWNlKGlucHV0X2Rldik7CisJaWYgKGVycikgeworCQlpbnB1dF9mcmVlX2RldmljZShpbnB1dF9kZXYpOworCQlyZXR1cm4gZXJyOworCX0KKworCXRhc2tsZXRfaW5pdCgmZG0xMTA1LT5pci5pcl90YXNrbGV0LCBkbTExMDVfZW1pdF9rZXksICh1bnNpZ25lZCBsb25nKSAmZG0xMTA1LT5pcik7CisKKwlyZXR1cm4gMDsKK30KKworCit2b2lkIF9fZGV2ZXhpdCBkbTExMDVfaXJfZXhpdChzdHJ1Y3QgZG0xMTA1ZHZiICpkbTExMDUpCit7CisJdGFza2xldF9raWxsKCZkbTExMDUtPmlyLmlyX3Rhc2tsZXQpOworCWlucHV0X3VucmVnaXN0ZXJfZGV2aWNlKGRtMTEwNS0+aXIuaW5wdXRfZGV2KTsKKworfQorCitzdGF0aWMgaW50IF9fZGV2aW5pdCBkbTExMDVkdmJfaHdfaW5pdChzdHJ1Y3QgZG0xMTA1ZHZiICpkbTExMDVkdmIpCit7CisJZG0xMTA1ZHZiX2Rpc2FibGVfaXJxcyhkbTExMDVkdmIpOworCisJb3V0YigwLCBkbV9pb19tZW0oRE0xMTA1X0hPU1RfQ1RSKSk7CisKKwkvKkRBVEFMRU4gMTg4LCovCisJb3V0YigxODgsIGRtX2lvX21lbShETTExMDVfRFRBTEVOVEgpKTsKKwkvKlRTX1NUUlQgVFNfVkFMUCBNU0JGSVJTVCBUU19NT0RFIEFMUEFTIFRTUEVTKi8KKwlvdXR3KDB4YzEwYSwgZG1faW9fbWVtKERNMTEwNV9UU0NUUikpOworCisJLyogbWFwIERNQSBhbmQgc2V0IGFkZHJlc3MgKi8KKwlkbTExMDVkdmJfZG1hX21hcChkbTExMDVkdmIpOworCWRtMTEwNWR2Yl9zZXRfZG1hX2FkZHIoZG0xMTA1ZHZiKTsKKwkvKiBiaWcgYnVmZmVyICovCisJb3V0bCg1KkRNMTEwNV9ETUFfQllURVMsIGRtX2lvX21lbShETTExMDVfUkxFTikpOworCW91dGIoNDcsIGRtX2lvX21lbShETTExMDVfSU5UQ05UKSk7CisKKwkvKiBJUiBORUMgbW9kZSBlbmFibGUgKi8KKwlvdXRiKChETTExMDVfSVJfRU4gfCBETTExMDVfU1lTX0NISyksIGRtX2lvX21lbShETTExMDVfSVJDVFIpKTsKKwlvdXRiKDAsIGRtX2lvX21lbShETTExMDVfSVJNT0RFKSk7CisJb3V0dygwLCBkbV9pb19tZW0oRE0xMTA1X1NZU1RFTUNPREUpKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBkbTExMDVkdmJfaHdfZXhpdChzdHJ1Y3QgZG0xMTA1ZHZiICpkbTExMDVkdmIpCit7CisJZG0xMTA1ZHZiX2Rpc2FibGVfaXJxcyhkbTExMDVkdmIpOworCisJLyogSVIgZGlzYWJsZSAqLworCW91dGIoMCwgZG1faW9fbWVtKERNMTEwNV9JUkNUUikpOworCW91dGIoSU5UTUFLX05PTkVNQVNLLCBkbV9pb19tZW0oRE0xMTA1X0lOVE1BSykpOworCisJZG0xMTA1ZHZiX2RtYV91bm1hcChkbTExMDVkdmIpOworfQorCitzdGF0aWMgc3RydWN0IHN0djAyOTlfY29uZmlnIHNoYXJwX3owMTk0YV9jb25maWcgPSB7CisJLmRlbW9kX2FkZHJlc3MgPSAweDY4LAorCS5pbml0dGFiID0gc2hhcnBfejAxOTRhX2luaXR0YWIsCisJLm1jbGsgPSA4ODAwMDAwMFVMLAorCS5pbnZlcnQgPSAxLAorCS5za2lwX3JlaW5pdCA9IDAsCisJLmxvY2tfb3V0cHV0ID0gU1RWMDI5OV9MT0NLT1VUUFVUXzEsCisJLnZvbHQxM19vcDBfb3AxID0gU1RWMDI5OV9WT0xUMTNfT1AxLAorCS5taW5fZGVsYXlfbXMgPSAxMDAsCisJLnNldF9zeW1ib2xfcmF0ZSA9IHNoYXJwX3owMTk0YV9zZXRfc3ltYm9sX3JhdGUsCit9OworCitzdGF0aWMgc3RydWN0IHN0djAyODhfY29uZmlnIGVhcmRhX2NvbmZpZyA9IHsKKwkuZGVtb2RfYWRkcmVzcyA9IDB4NjgsCisJLm1pbl9kZWxheV9tcyA9IDEwMCwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc2kyMXh4X2NvbmZpZyBzZXJpdF9jb25maWcgPSB7CisJLmRlbW9kX2FkZHJlc3MgPSAweDY4LAorCS5taW5fZGVsYXlfbXMgPSAxMDAsCisKK307CisKK3N0YXRpYyBzdHJ1Y3QgY3gyNDExNl9jb25maWcgc2VyaXRfc3AyNjMzX2NvbmZpZyA9IHsKKwkuZGVtb2RfYWRkcmVzcyA9IDB4NTUsCit9OworCitzdGF0aWMgaW50IF9fZGV2aW5pdCBmcm9udGVuZF9pbml0KHN0cnVjdCBkbTExMDVkdmIgKmRtMTEwNWR2YikKK3sKKwlpbnQgcmV0OworCisJc3dpdGNoIChkbTExMDVkdmItPnBkZXYtPnN1YnN5c3RlbV9kZXZpY2UpIHsKKwljYXNlIFBDSV9ERVZJQ0VfSURfRFcyMDAyOgorCQlkbTExMDVkdmItPmZlID0gZHZiX2F0dGFjaCgKKwkJCXN0djAyOTlfYXR0YWNoLCAmc2hhcnBfejAxOTRhX2NvbmZpZywKKwkJCSZkbTExMDVkdmItPmkyY19hZGFwKTsKKworCQlpZiAoZG0xMTA1ZHZiLT5mZSkgeworCQkJZG0xMTA1ZHZiLT5mZS0+b3BzLnNldF92b2x0YWdlID0KKwkJCQkJCQlkbTExMDVkdmJfc2V0X3ZvbHRhZ2U7CisJCQlkdmJfYXR0YWNoKGR2Yl9wbGxfYXR0YWNoLCBkbTExMDVkdmItPmZlLCAweDYwLAorCQkJCQkmZG0xMTA1ZHZiLT5pMmNfYWRhcCwgRFZCX1BMTF9PUEVSQTEpOworCQl9CisKKwkJaWYgKCFkbTExMDVkdmItPmZlKSB7CisJCQlkbTExMDVkdmItPmZlID0gZHZiX2F0dGFjaCgKKwkJCQlzdHYwMjg4X2F0dGFjaCwgJmVhcmRhX2NvbmZpZywKKwkJCQkmZG0xMTA1ZHZiLT5pMmNfYWRhcCk7CisJCQlpZiAoZG0xMTA1ZHZiLT5mZSkgeworCQkJCWRtMTEwNWR2Yi0+ZmUtPm9wcy5zZXRfdm9sdGFnZSA9CisJCQkJCQkJZG0xMTA1ZHZiX3NldF92b2x0YWdlOworCQkJCWR2Yl9hdHRhY2goc3RiNjAwMF9hdHRhY2gsIGRtMTEwNWR2Yi0+ZmUsIDB4NjEsCisJCQkJCQkmZG0xMTA1ZHZiLT5pMmNfYWRhcCk7CisJCQl9CisJCX0KKworCQlpZiAoIWRtMTEwNWR2Yi0+ZmUpIHsKKwkJCWRtMTEwNWR2Yi0+ZmUgPSBkdmJfYXR0YWNoKAorCQkJCXNpMjF4eF9hdHRhY2gsICZzZXJpdF9jb25maWcsCisJCQkJJmRtMTEwNWR2Yi0+aTJjX2FkYXApOworCQkJaWYgKGRtMTEwNWR2Yi0+ZmUpCisJCQkJZG0xMTA1ZHZiLT5mZS0+b3BzLnNldF92b2x0YWdlID0KKwkJCQkJCQlkbTExMDVkdmJfc2V0X3ZvbHRhZ2U7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBQQ0lfREVWSUNFX0lEX0RXMjAwNDoKKwkJZG0xMTA1ZHZiLT5mZSA9IGR2Yl9hdHRhY2goCisJCQljeDI0MTE2X2F0dGFjaCwgJnNlcml0X3NwMjYzM19jb25maWcsCisJCQkmZG0xMTA1ZHZiLT5pMmNfYWRhcCk7CisJCWlmIChkbTExMDVkdmItPmZlKQorCQkJZG0xMTA1ZHZiLT5mZS0+b3BzLnNldF92b2x0YWdlID0gZG0xMTA1ZHZiX3NldF92b2x0YWdlOworCQlicmVhazsKKwl9CisKKwlpZiAoIWRtMTEwNWR2Yi0+ZmUpIHsKKwkJZGV2X2VycigmZG0xMTA1ZHZiLT5wZGV2LT5kZXYsICJjb3VsZCBub3QgYXR0YWNoIGZyb250ZW5kXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJcmV0ID0gZHZiX3JlZ2lzdGVyX2Zyb250ZW5kKCZkbTExMDVkdmItPmR2Yl9hZGFwdGVyLCBkbTExMDVkdmItPmZlKTsKKwlpZiAocmV0IDwgMCkgeworCQlpZiAoZG0xMTA1ZHZiLT5mZS0+b3BzLnJlbGVhc2UpCisJCQlkbTExMDVkdmItPmZlLT5vcHMucmVsZWFzZShkbTExMDVkdmItPmZlKTsKKwkJZG0xMTA1ZHZiLT5mZSA9IE5VTEw7CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIF9fZGV2aW5pdCBkbTExMDVkdmJfcmVhZF9tYWMoc3RydWN0IGRtMTEwNWR2YiAqZG0xMTA1ZHZiLCB1OCAqbWFjKQoreworCXN0YXRpYyB1OCBjb21tYW5kWzFdID0geyAweDI4IH07CisKKwlzdHJ1Y3QgaTJjX21zZyBtc2dbXSA9IHsKKwkJeyAuYWRkciA9IElJQ18yNEMwMV9hZGRyID4+IDEsIC5mbGFncyA9IDAsCisJCQkJLmJ1ZiA9IGNvbW1hbmQsIC5sZW4gPSAxIH0sCisJCXsgLmFkZHIgPSBJSUNfMjRDMDFfYWRkciA+PiAxLCAuZmxhZ3MgPSBJMkNfTV9SRCwKKwkJCQkuYnVmID0gbWFjLCAubGVuID0gNiB9LAorCX07CisKKwlkbTExMDVfaTJjX3hmZXIoJmRtMTEwNWR2Yi0+aTJjX2FkYXAsIG1zZyAsIDIpOworCWRldl9pbmZvKCZkbTExMDVkdmItPnBkZXYtPmRldiwgIk1BQyAlMDJ4OiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeFxuIiwKKwkJCW1hY1swXSwgbWFjWzFdLCBtYWNbMl0sIG1hY1szXSwgbWFjWzRdLCBtYWNbNV0pOworfQorCitzdGF0aWMgaW50IF9fZGV2aW5pdCBkbTExMDVfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsCisJCQkJICBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KQoreworCXN0cnVjdCBkbTExMDVkdmIgKmRtMTEwNWR2YjsKKwlzdHJ1Y3QgZHZiX2FkYXB0ZXIgKmR2Yl9hZGFwdGVyOworCXN0cnVjdCBkdmJfZGVtdXggKmR2YmRlbXV4OworCXN0cnVjdCBkbXhfZGVtdXggKmRteDsKKwlpbnQgcmV0ID0gLUVOT01FTTsKKworCWRtMTEwNWR2YiA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBkbTExMDVkdmIpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWRtMTEwNWR2YikKKwkJZ290byBvdXQ7CisKKwlkbTExMDVkdmItPnBkZXYgPSBwZGV2OworCWRtMTEwNWR2Yi0+YnVmZmVyX3NpemUgPSA1ICogRE0xMTA1X0RNQV9CWVRFUzsKKwlkbTExMDVkdmItPlBhY2tldEVycm9yQ291bnQgPSAwOworCWRtMTEwNWR2Yi0+ZG1hcnN0ID0gMDsKKworCXJldCA9IHBjaV9lbmFibGVfZGV2aWNlKHBkZXYpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIGVycl9rZnJlZTsKKworCXJldCA9IHBjaV9zZXRfZG1hX21hc2socGRldiwgRE1BXzMyQklUX01BU0spOworCWlmIChyZXQgPCAwKQorCQlnb3RvIGVycl9wY2lfZGlzYWJsZV9kZXZpY2U7CisKKwlwY2lfc2V0X21hc3RlcihwZGV2KTsKKworCXJldCA9IHBjaV9yZXF1ZXN0X3JlZ2lvbnMocGRldiwgRFJJVkVSX05BTUUpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIGVycl9wY2lfZGlzYWJsZV9kZXZpY2U7CisKKwlkbTExMDVkdmItPmlvX21lbSA9IHBjaV9pb21hcChwZGV2LCAwLCBwY2lfcmVzb3VyY2VfbGVuKHBkZXYsIDApKTsKKwlpZiAoIWRtMTEwNWR2Yi0+aW9fbWVtKSB7CisJCXJldCA9IC1FSU87CisJCWdvdG8gZXJyX3BjaV9yZWxlYXNlX3JlZ2lvbnM7CisJfQorCisJc3Bpbl9sb2NrX2luaXQoJmRtMTEwNWR2Yi0+bG9jayk7CisJcGNpX3NldF9kcnZkYXRhKHBkZXYsIGRtMTEwNWR2Yik7CisKKwlyZXQgPSByZXF1ZXN0X2lycShwZGV2LT5pcnEsIGRtMTEwNWR2Yl9pcnEsIElSUUZfU0hBUkVELCBEUklWRVJfTkFNRSwgZG0xMTA1ZHZiKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBlcnJfcGNpX2lvdW5tYXA7CisKKwlyZXQgPSBkbTExMDVkdmJfaHdfaW5pdChkbTExMDVkdmIpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIGVycl9mcmVlX2lycTsKKworCS8qIGkyYyAqLworCWkyY19zZXRfYWRhcGRhdGEoJmRtMTEwNWR2Yi0+aTJjX2FkYXAsIGRtMTEwNWR2Yik7CisJc3RyY3B5KGRtMTEwNWR2Yi0+aTJjX2FkYXAubmFtZSwgRFJJVkVSX05BTUUpOworCWRtMTEwNWR2Yi0+aTJjX2FkYXAub3duZXIgPSBUSElTX01PRFVMRTsKKwlkbTExMDVkdmItPmkyY19hZGFwLmNsYXNzID0gSTJDX0NMQVNTX1RWX0RJR0lUQUw7CisJZG0xMTA1ZHZiLT5pMmNfYWRhcC5kZXYucGFyZW50ID0gJnBkZXYtPmRldjsKKwlkbTExMDVkdmItPmkyY19hZGFwLmFsZ28gPSAmZG0xMTA1X2FsZ287CisJZG0xMTA1ZHZiLT5pMmNfYWRhcC5hbGdvX2RhdGEgPSBkbTExMDVkdmI7CisJcmV0ID0gaTJjX2FkZF9hZGFwdGVyKCZkbTExMDVkdmItPmkyY19hZGFwKTsKKworCWlmIChyZXQgPCAwKQorCQlnb3RvIGVycl9kbTExMDVkdmJfaHdfZXhpdDsKKworCS8qIGR2YiAqLworCXJldCA9IGR2Yl9yZWdpc3Rlcl9hZGFwdGVyKCZkbTExMDVkdmItPmR2Yl9hZGFwdGVyLCBEUklWRVJfTkFNRSwKKwkJCQkJVEhJU19NT0RVTEUsICZwZGV2LT5kZXYsIGFkYXB0ZXJfbnIpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIGVycl9pMmNfZGVsX2FkYXB0ZXI7CisKKwlkdmJfYWRhcHRlciA9ICZkbTExMDVkdmItPmR2Yl9hZGFwdGVyOworCisJZG0xMTA1ZHZiX3JlYWRfbWFjKGRtMTEwNWR2YiwgZHZiX2FkYXB0ZXItPnByb3Bvc2VkX21hYyk7CisKKwlkdmJkZW11eCA9ICZkbTExMDVkdmItPmRlbXV4OworCWR2YmRlbXV4LT5maWx0ZXJudW0gPSAyNTY7CisJZHZiZGVtdXgtPmZlZWRudW0gPSAyNTY7CisJZHZiZGVtdXgtPnN0YXJ0X2ZlZWQgPSBkbTExMDVkdmJfc3RhcnRfZmVlZDsKKwlkdmJkZW11eC0+c3RvcF9mZWVkID0gZG0xMTA1ZHZiX3N0b3BfZmVlZDsKKwlkdmJkZW11eC0+ZG14LmNhcGFiaWxpdGllcyA9IChETVhfVFNfRklMVEVSSU5HIHwKKwkJCURNWF9TRUNUSU9OX0ZJTFRFUklORyB8IERNWF9NRU1PUllfQkFTRURfRklMVEVSSU5HKTsKKwlyZXQgPSBkdmJfZG14X2luaXQoZHZiZGVtdXgpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIGVycl9kdmJfdW5yZWdpc3Rlcl9hZGFwdGVyOworCisJZG14ID0gJmR2YmRlbXV4LT5kbXg7CisJZG0xMTA1ZHZiLT5kbXhkZXYuZmlsdGVybnVtID0gMjU2OworCWRtMTEwNWR2Yi0+ZG14ZGV2LmRlbXV4ID0gZG14OworCWRtMTEwNWR2Yi0+ZG14ZGV2LmNhcGFiaWxpdGllcyA9IDA7CisKKwlyZXQgPSBkdmJfZG14ZGV2X2luaXQoJmRtMTEwNWR2Yi0+ZG14ZGV2LCBkdmJfYWRhcHRlcik7CisJaWYgKHJldCA8IDApCisJCWdvdG8gZXJyX2R2Yl9kbXhfcmVsZWFzZTsKKworCWRtMTEwNWR2Yi0+aHdfZnJvbnRlbmQuc291cmNlID0gRE1YX0ZST05URU5EXzA7CisKKwlyZXQgPSBkbXgtPmFkZF9mcm9udGVuZChkbXgsICZkbTExMDVkdmItPmh3X2Zyb250ZW5kKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBlcnJfZHZiX2RteGRldl9yZWxlYXNlOworCisJZG0xMTA1ZHZiLT5tZW1fZnJvbnRlbmQuc291cmNlID0gRE1YX01FTU9SWV9GRTsKKworCXJldCA9IGRteC0+YWRkX2Zyb250ZW5kKGRteCwgJmRtMTEwNWR2Yi0+bWVtX2Zyb250ZW5kKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBlcnJfcmVtb3ZlX2h3X2Zyb250ZW5kOworCisJcmV0ID0gZG14LT5jb25uZWN0X2Zyb250ZW5kKGRteCwgJmRtMTEwNWR2Yi0+aHdfZnJvbnRlbmQpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIGVycl9yZW1vdmVfbWVtX2Zyb250ZW5kOworCisJcmV0ID0gZnJvbnRlbmRfaW5pdChkbTExMDVkdmIpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIGVycl9kaXNjb25uZWN0X2Zyb250ZW5kOworCisJZHZiX25ldF9pbml0KGR2Yl9hZGFwdGVyLCAmZG0xMTA1ZHZiLT5kdmJuZXQsIGRteCk7CisJZG0xMTA1X2lyX2luaXQoZG0xMTA1ZHZiKTsKK291dDoKKwlyZXR1cm4gcmV0OworCitlcnJfZGlzY29ubmVjdF9mcm9udGVuZDoKKwlkbXgtPmRpc2Nvbm5lY3RfZnJvbnRlbmQoZG14KTsKK2Vycl9yZW1vdmVfbWVtX2Zyb250ZW5kOgorCWRteC0+cmVtb3ZlX2Zyb250ZW5kKGRteCwgJmRtMTEwNWR2Yi0+bWVtX2Zyb250ZW5kKTsKK2Vycl9yZW1vdmVfaHdfZnJvbnRlbmQ6CisJZG14LT5yZW1vdmVfZnJvbnRlbmQoZG14LCAmZG0xMTA1ZHZiLT5od19mcm9udGVuZCk7CitlcnJfZHZiX2RteGRldl9yZWxlYXNlOgorCWR2Yl9kbXhkZXZfcmVsZWFzZSgmZG0xMTA1ZHZiLT5kbXhkZXYpOworZXJyX2R2Yl9kbXhfcmVsZWFzZToKKwlkdmJfZG14X3JlbGVhc2UoZHZiZGVtdXgpOworZXJyX2R2Yl91bnJlZ2lzdGVyX2FkYXB0ZXI6CisJZHZiX3VucmVnaXN0ZXJfYWRhcHRlcihkdmJfYWRhcHRlcik7CitlcnJfaTJjX2RlbF9hZGFwdGVyOgorCWkyY19kZWxfYWRhcHRlcigmZG0xMTA1ZHZiLT5pMmNfYWRhcCk7CitlcnJfZG0xMTA1ZHZiX2h3X2V4aXQ6CisJZG0xMTA1ZHZiX2h3X2V4aXQoZG0xMTA1ZHZiKTsKK2Vycl9mcmVlX2lycToKKwlmcmVlX2lycShwZGV2LT5pcnEsIGRtMTEwNWR2Yik7CitlcnJfcGNpX2lvdW5tYXA6CisJcGNpX2lvdW5tYXAocGRldiwgZG0xMTA1ZHZiLT5pb19tZW0pOworZXJyX3BjaV9yZWxlYXNlX3JlZ2lvbnM6CisJcGNpX3JlbGVhc2VfcmVnaW9ucyhwZGV2KTsKK2Vycl9wY2lfZGlzYWJsZV9kZXZpY2U6CisJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOworZXJyX2tmcmVlOgorCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKKwlrZnJlZShkbTExMDVkdmIpOworCWdvdG8gb3V0OworfQorCitzdGF0aWMgdm9pZCBfX2RldmV4aXQgZG0xMTA1X3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKK3sKKwlzdHJ1Y3QgZG0xMTA1ZHZiICpkbTExMDVkdmIgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IGR2Yl9hZGFwdGVyICpkdmJfYWRhcHRlciA9ICZkbTExMDVkdmItPmR2Yl9hZGFwdGVyOworCXN0cnVjdCBkdmJfZGVtdXggKmR2YmRlbXV4ID0gJmRtMTEwNWR2Yi0+ZGVtdXg7CisJc3RydWN0IGRteF9kZW11eCAqZG14ID0gJmR2YmRlbXV4LT5kbXg7CisKKwlkbTExMDVfaXJfZXhpdChkbTExMDVkdmIpOworCWRteC0+Y2xvc2UoZG14KTsKKwlkdmJfbmV0X3JlbGVhc2UoJmRtMTEwNWR2Yi0+ZHZibmV0KTsKKwlpZiAoZG0xMTA1ZHZiLT5mZSkKKwkJZHZiX3VucmVnaXN0ZXJfZnJvbnRlbmQoZG0xMTA1ZHZiLT5mZSk7CisKKwlkbXgtPmRpc2Nvbm5lY3RfZnJvbnRlbmQoZG14KTsKKwlkbXgtPnJlbW92ZV9mcm9udGVuZChkbXgsICZkbTExMDVkdmItPm1lbV9mcm9udGVuZCk7CisJZG14LT5yZW1vdmVfZnJvbnRlbmQoZG14LCAmZG0xMTA1ZHZiLT5od19mcm9udGVuZCk7CisJZHZiX2RteGRldl9yZWxlYXNlKCZkbTExMDVkdmItPmRteGRldik7CisJZHZiX2RteF9yZWxlYXNlKGR2YmRlbXV4KTsKKwlkdmJfdW5yZWdpc3Rlcl9hZGFwdGVyKGR2Yl9hZGFwdGVyKTsKKwlpZiAoJmRtMTEwNWR2Yi0+aTJjX2FkYXApCisJCWkyY19kZWxfYWRhcHRlcigmZG0xMTA1ZHZiLT5pMmNfYWRhcCk7CisKKwlkbTExMDVkdmJfaHdfZXhpdChkbTExMDVkdmIpOworCXN5bmNocm9uaXplX2lycShwZGV2LT5pcnEpOworCWZyZWVfaXJxKHBkZXYtPmlycSwgZG0xMTA1ZHZiKTsKKwlwY2lfaW91bm1hcChwZGV2LCBkbTExMDVkdmItPmlvX21lbSk7CisJcGNpX3JlbGVhc2VfcmVnaW9ucyhwZGV2KTsKKwlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CisJcGNpX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOworCWtmcmVlKGRtMTEwNWR2Yik7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBkbTExMDVfaWRfdGFibGVbXSBfX2RldmluaXRkYXRhID0geworCXsKKwkJLnZlbmRvciA9IFBDSV9WRU5ET1JfSURfVFJJR0VNLAorCQkuZGV2aWNlID0gUENJX0RFVklDRV9JRF9ETTExMDUsCisJCS5zdWJ2ZW5kb3IgPSBQQ0lfQU5ZX0lELAorCQkuc3ViZGV2aWNlID0gUENJX0RFVklDRV9JRF9EVzIwMDIsCisJfSwgeworCQkudmVuZG9yID0gUENJX1ZFTkRPUl9JRF9UUklHRU0sCisJCS5kZXZpY2UgPSBQQ0lfREVWSUNFX0lEX0RNMTEwNSwKKwkJLnN1YnZlbmRvciA9IFBDSV9BTllfSUQsCisJCS5zdWJkZXZpY2UgPSBQQ0lfREVWSUNFX0lEX0RXMjAwNCwKKwl9LCB7CisJCS8qIGVtcHR5ICovCisJfSwKK307CisKK01PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBkbTExMDVfaWRfdGFibGUpOworCitzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgZG0xMTA1X2RyaXZlciA9IHsKKwkubmFtZSA9IERSSVZFUl9OQU1FLAorCS5pZF90YWJsZSA9IGRtMTEwNV9pZF90YWJsZSwKKwkucHJvYmUgPSBkbTExMDVfcHJvYmUsCisJLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKGRtMTEwNV9yZW1vdmUpLAorfTsKKworc3RhdGljIGludCBfX2luaXQgZG0xMTA1X2luaXQodm9pZCkKK3sKKwlyZXR1cm4gcGNpX3JlZ2lzdGVyX2RyaXZlcigmZG0xMTA1X2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBkbTExMDVfZXhpdCh2b2lkKQoreworCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmZG0xMTA1X2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KGRtMTEwNV9pbml0KTsKK21vZHVsZV9leGl0KGRtMTEwNV9leGl0KTsKKworTU9EVUxFX0FVVEhPUigiSWdvciBNLiBMaXBsaWFuaW4gPGxpcGxpYW5pbkBtZS5ieT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiU0RNQyBETTExMDUgRFZCIGRyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvZHZiX2Zyb250ZW5kLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kdmJfZnJvbnRlbmQuYwppbmRleCAzNTI2ZTNlLi41Njg5ZDFmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kdmJfZnJvbnRlbmQuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kdmJfZnJvbnRlbmQuYwpAQCAtNDAsMTIgKzQwLDE0IEBACiAKICNpbmNsdWRlICJkdmJfZnJvbnRlbmQuaCIKICNpbmNsdWRlICJkdmJkZXYuaCIKKyNpbmNsdWRlIDxsaW51eC9kdmIvdmVyc2lvbi5oPgogCiBzdGF0aWMgaW50IGR2Yl9mcm9udGVuZF9kZWJ1ZzsKIHN0YXRpYyBpbnQgZHZiX3NodXRkb3duX3RpbWVvdXQ7CiBzdGF0aWMgaW50IGR2Yl9mb3JjZV9hdXRvX2ludmVyc2lvbjsKIHN0YXRpYyBpbnQgZHZiX292ZXJyaWRlX3R1bmVfZGVsYXk7CiBzdGF0aWMgaW50IGR2Yl9wb3dlcmRvd25fb25fc2xlZXAgPSAxOworc3RhdGljIGludCBkdmJfbWZlX3dhaXRfdGltZSA9IDU7CiAKIG1vZHVsZV9wYXJhbV9uYW1lZChmcm9udGVuZF9kZWJ1ZywgZHZiX2Zyb250ZW5kX2RlYnVnLCBpbnQsIDA2NDQpOwogTU9EVUxFX1BBUk1fREVTQyhmcm9udGVuZF9kZWJ1ZywgIlR1cm4gb24vb2ZmIGZyb250ZW5kIGNvcmUgZGVidWdnaW5nIChkZWZhdWx0Om9mZikuIik7CkBAIC01Nyw2ICs1OSw4IEBACiBNT0RVTEVfUEFSTV9ERVNDKGR2Yl9vdmVycmlkZV90dW5lX2RlbGF5LCAiMDogbm9ybWFsIChkZWZhdWx0KSwgPjAgPT4gZGVsYXkgaW4gbWlsbGlzZWNvbmRzIHRvIHdhaXQgZm9yIGxvY2sgYWZ0ZXIgYSB0dW5lIGF0dGVtcHQiKTsKIG1vZHVsZV9wYXJhbShkdmJfcG93ZXJkb3duX29uX3NsZWVwLCBpbnQsIDA2NDQpOwogTU9EVUxFX1BBUk1fREVTQyhkdmJfcG93ZXJkb3duX29uX3NsZWVwLCAiMDogZG8gbm90IHBvd2VyIGRvd24sIDE6IHR1cm4gTE5CIHZvbHRhZ2Ugb2ZmIG9uIHNsZWVwIChkZWZhdWx0KSIpOworbW9kdWxlX3BhcmFtKGR2Yl9tZmVfd2FpdF90aW1lLCBpbnQsIDA2NDQpOworTU9EVUxFX1BBUk1fREVTQyhkdmJfbWZlX3dhaXRfdGltZSwgIldhaXQgdXAgdG8gPG1mZV93YWl0X3RpbWU+IHNlY29uZHMgb24gb3BlbigpIGZvciBtdWx0aS1mcm9udGVuZCB0byBiZWNvbWUgYXZhaWxhYmxlIChkZWZhdWx0OjUgc2Vjb25kcykiKTsKIAogI2RlZmluZSBkcHJpbnRrIGlmIChkdmJfZnJvbnRlbmRfZGVidWcpIHByaW50awogCkBAIC0yMTEsOCArMjE1LDkgQEAKIAogc3RhdGljIHZvaWQgZHZiX2Zyb250ZW5kX2luaXQoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUpCiB7Ci0JZHByaW50ayAoIkRWQjogaW5pdGlhbGlzaW5nIGZyb250ZW5kICVpICglcykuLi5cbiIsCisJZHByaW50ayAoIkRWQjogaW5pdGlhbGlzaW5nIGFkYXB0ZXIgJWkgZnJvbnRlbmQgJWkgKCVzKS4uLlxuIiwKIAkJIGZlLT5kdmItPm51bSwKKwkJIGZlLT5pZCwKIAkJIGZlLT5vcHMuaW5mby5uYW1lKTsKIAogCWlmIChmZS0+b3BzLmluaXQpCkBAIC02ODUsNyArNjkwLDcgQEAKIAltYigpOwogCiAJZmVfdGhyZWFkID0ga3RocmVhZF9ydW4oZHZiX2Zyb250ZW5kX3RocmVhZCwgZmUsCi0JCSJrZHZiLWZlLSVpIiwgZmUtPmR2Yi0+bnVtKTsKKwkJImtkdmItYWQtJWktZmUtJWkiLCBmZS0+ZHZiLT5udW0sZmUtPmlkKTsKIAlpZiAoSVNfRVJSKGZlX3RocmVhZCkpIHsKIAkJcmV0ID0gUFRSX0VSUihmZV90aHJlYWQpOwogCQlwcmludGsoImR2Yl9mcm9udGVuZF9zdGFydDogZmFpbGVkIHRvIHN0YXJ0IGt0aHJlYWQgKCVkKVxuIiwgcmV0KTsKQEAgLTcwOSw4ICs3MTQsOCBAQAogCQkqZnJlcV9tYXggPSBtaW4oZmUtPm9wcy5pbmZvLmZyZXF1ZW5jeV9tYXgsIGZlLT5vcHMudHVuZXJfb3BzLmluZm8uZnJlcXVlbmN5X21heCk7CiAKIAlpZiAoKmZyZXFfbWluID09IDAgfHwgKmZyZXFfbWF4ID09IDApCi0JCXByaW50ayhLRVJOX1dBUk5JTkcgIkRWQjogZnJvbnRlbmQgJXUgZnJlcXVlbmN5IGxpbWl0cyB1bmRlZmluZWQgLSBmaXggdGhlIGRyaXZlclxuIiwKLQkJICAgICAgIGZlLT5kdmItPm51bSk7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIkRWQjogYWRhcHRlciAlaSBmcm9udGVuZCAldSBmcmVxdWVuY3kgbGltaXRzIHVuZGVmaW5lZCAtIGZpeCB0aGUgZHJpdmVyXG4iLAorCQkgICAgICAgZmUtPmR2Yi0+bnVtLGZlLT5pZCk7CiB9CiAKIHN0YXRpYyBpbnQgZHZiX2Zyb250ZW5kX2NoZWNrX3BhcmFtZXRlcnMoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsCkBAIC03MjMsOCArNzI4LDggQEAKIAlkdmJfZnJvbnRlbmRfZ2V0X2ZyZXF1ZW55X2xpbWl0cyhmZSwgJmZyZXFfbWluLCAmZnJlcV9tYXgpOwogCWlmICgoZnJlcV9taW4gJiYgcGFybXMtPmZyZXF1ZW5jeSA8IGZyZXFfbWluKSB8fAogCSAgICAoZnJlcV9tYXggJiYgcGFybXMtPmZyZXF1ZW5jeSA+IGZyZXFfbWF4KSkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJEVkI6IGZyb250ZW5kICV1IGZyZXF1ZW5jeSAldSBvdXQgb2YgcmFuZ2UgKCV1Li4ldSlcbiIsCi0JCSAgICAgICBmZS0+ZHZiLT5udW0sIHBhcm1zLT5mcmVxdWVuY3ksIGZyZXFfbWluLCBmcmVxX21heCk7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIkRWQjogYWRhcHRlciAlaSBmcm9udGVuZCAlaSBmcmVxdWVuY3kgJXUgb3V0IG9mIHJhbmdlICgldS4uJXUpXG4iLAorCQkgICAgICAgZmUtPmR2Yi0+bnVtLCBmZS0+aWQsIHBhcm1zLT5mcmVxdWVuY3ksIGZyZXFfbWluLCBmcmVxX21heCk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApAQCAtNzM0LDggKzczOSw4IEBACiAJCSAgICAgcGFybXMtPnUucXBzay5zeW1ib2xfcmF0ZSA8IGZlLT5vcHMuaW5mby5zeW1ib2xfcmF0ZV9taW4pIHx8CiAJCSAgICAoZmUtPm9wcy5pbmZvLnN5bWJvbF9yYXRlX21heCAmJgogCQkgICAgIHBhcm1zLT51LnFwc2suc3ltYm9sX3JhdGUgPiBmZS0+b3BzLmluZm8uc3ltYm9sX3JhdGVfbWF4KSkgewotCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiRFZCOiBmcm9udGVuZCAldSBzeW1ib2wgcmF0ZSAldSBvdXQgb2YgcmFuZ2UgKCV1Li4ldSlcbiIsCi0JCQkgICAgICAgZmUtPmR2Yi0+bnVtLCBwYXJtcy0+dS5xcHNrLnN5bWJvbF9yYXRlLAorCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiRFZCOiBhZGFwdGVyICVpIGZyb250ZW5kICVpIHN5bWJvbCByYXRlICV1IG91dCBvZiByYW5nZSAoJXUuLiV1KVxuIiwKKwkJCSAgICAgICBmZS0+ZHZiLT5udW0sIGZlLT5pZCwgcGFybXMtPnUucXBzay5zeW1ib2xfcmF0ZSwKIAkJCSAgICAgICBmZS0+b3BzLmluZm8uc3ltYm9sX3JhdGVfbWluLCBmZS0+b3BzLmluZm8uc3ltYm9sX3JhdGVfbWF4KTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CkBAIC03NDUsOCArNzUwLDggQEAKIAkJICAgICBwYXJtcy0+dS5xYW0uc3ltYm9sX3JhdGUgPCBmZS0+b3BzLmluZm8uc3ltYm9sX3JhdGVfbWluKSB8fAogCQkgICAgKGZlLT5vcHMuaW5mby5zeW1ib2xfcmF0ZV9tYXggJiYKIAkJICAgICBwYXJtcy0+dS5xYW0uc3ltYm9sX3JhdGUgPiBmZS0+b3BzLmluZm8uc3ltYm9sX3JhdGVfbWF4KSkgewotCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiRFZCOiBmcm9udGVuZCAldSBzeW1ib2wgcmF0ZSAldSBvdXQgb2YgcmFuZ2UgKCV1Li4ldSlcbiIsCi0JCQkgICAgICAgZmUtPmR2Yi0+bnVtLCBwYXJtcy0+dS5xYW0uc3ltYm9sX3JhdGUsCisJCQlwcmludGsoS0VSTl9XQVJOSU5HICJEVkI6IGFkYXB0ZXIgJWkgZnJvbnRlbmQgJWkgc3ltYm9sIHJhdGUgJXUgb3V0IG9mIHJhbmdlICgldS4uJXUpXG4iLAorCQkJICAgICAgIGZlLT5kdmItPm51bSwgZmUtPmlkLCBwYXJtcy0+dS5xYW0uc3ltYm9sX3JhdGUsCiAJCQkgICAgICAgZmUtPm9wcy5pbmZvLnN5bWJvbF9yYXRlX21pbiwgZmUtPm9wcy5pbmZvLnN5bWJvbF9yYXRlX21heCk7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQpAQCAtNzU1LDYgKzc2MCw1MjkgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RydWN0IGR0dl9jbWRzX2ggZHR2X2NtZHNbXSA9IHsKKwlbRFRWX1RVTkVdID0geworCQkubmFtZQk9ICJEVFZfVFVORSIsCisJCS5jbWQJPSBEVFZfVFVORSwKKwkJLnNldAk9IDEsCisJfSwKKwlbRFRWX0NMRUFSXSA9IHsKKwkJLm5hbWUJPSAiRFRWX0NMRUFSIiwKKwkJLmNtZAk9IERUVl9DTEVBUiwKKwkJLnNldAk9IDEsCisJfSwKKworCS8qIFNldCAqLworCVtEVFZfRlJFUVVFTkNZXSA9IHsKKwkJLm5hbWUJPSAiRFRWX0ZSRVFVRU5DWSIsCisJCS5jbWQJPSBEVFZfRlJFUVVFTkNZLAorCQkuc2V0CT0gMSwKKwl9LAorCVtEVFZfQkFORFdJRFRIX0haXSA9IHsKKwkJLm5hbWUJPSAiRFRWX0JBTkRXSURUSF9IWiIsCisJCS5jbWQJPSBEVFZfQkFORFdJRFRIX0haLAorCQkuc2V0CT0gMSwKKwl9LAorCVtEVFZfTU9EVUxBVElPTl0gPSB7CisJCS5uYW1lCT0gIkRUVl9NT0RVTEFUSU9OIiwKKwkJLmNtZAk9IERUVl9NT0RVTEFUSU9OLAorCQkuc2V0CT0gMSwKKwl9LAorCVtEVFZfSU5WRVJTSU9OXSA9IHsKKwkJLm5hbWUJPSAiRFRWX0lOVkVSU0lPTiIsCisJCS5jbWQJPSBEVFZfSU5WRVJTSU9OLAorCQkuc2V0CT0gMSwKKwl9LAorCVtEVFZfRElTRVFDX01BU1RFUl0gPSB7CisJCS5uYW1lCT0gIkRUVl9ESVNFUUNfTUFTVEVSIiwKKwkJLmNtZAk9IERUVl9ESVNFUUNfTUFTVEVSLAorCQkuc2V0CT0gMSwKKwkJLmJ1ZmZlcgk9IDEsCisJfSwKKwlbRFRWX1NZTUJPTF9SQVRFXSA9IHsKKwkJLm5hbWUJPSAiRFRWX1NZTUJPTF9SQVRFIiwKKwkJLmNtZAk9IERUVl9TWU1CT0xfUkFURSwKKwkJLnNldAk9IDEsCisJfSwKKwlbRFRWX0lOTkVSX0ZFQ10gPSB7CisJCS5uYW1lCT0gIkRUVl9JTk5FUl9GRUMiLAorCQkuY21kCT0gRFRWX0lOTkVSX0ZFQywKKwkJLnNldAk9IDEsCisJfSwKKwlbRFRWX1ZPTFRBR0VdID0geworCQkubmFtZQk9ICJEVFZfVk9MVEFHRSIsCisJCS5jbWQJPSBEVFZfVk9MVEFHRSwKKwkJLnNldAk9IDEsCisJfSwKKwlbRFRWX1RPTkVdID0geworCQkubmFtZQk9ICJEVFZfVE9ORSIsCisJCS5jbWQJPSBEVFZfVE9ORSwKKwkJLnNldAk9IDEsCisJfSwKKwlbRFRWX1BJTE9UXSA9IHsKKwkJLm5hbWUJPSAiRFRWX1BJTE9UIiwKKwkJLmNtZAk9IERUVl9QSUxPVCwKKwkJLnNldAk9IDEsCisJfSwKKwlbRFRWX1JPTExPRkZdID0geworCQkubmFtZQk9ICJEVFZfUk9MTE9GRiIsCisJCS5jbWQJPSBEVFZfUk9MTE9GRiwKKwkJLnNldAk9IDEsCisJfSwKKwlbRFRWX0RFTElWRVJZX1NZU1RFTV0gPSB7CisJCS5uYW1lCT0gIkRUVl9ERUxJVkVSWV9TWVNURU0iLAorCQkuY21kCT0gRFRWX0RFTElWRVJZX1NZU1RFTSwKKwkJLnNldAk9IDEsCisJfSwKKwlbRFRWX0hJRVJBUkNIWV0gPSB7CisJCS5uYW1lCT0gIkRUVl9ISUVSQVJDSFkiLAorCQkuY21kCT0gRFRWX0hJRVJBUkNIWSwKKwkJLnNldAk9IDEsCisJfSwKKwlbRFRWX0NPREVfUkFURV9IUF0gPSB7CisJCS5uYW1lCT0gIkRUVl9DT0RFX1JBVEVfSFAiLAorCQkuY21kCT0gRFRWX0NPREVfUkFURV9IUCwKKwkJLnNldAk9IDEsCisJfSwKKwlbRFRWX0NPREVfUkFURV9MUF0gPSB7CisJCS5uYW1lCT0gIkRUVl9DT0RFX1JBVEVfTFAiLAorCQkuY21kCT0gRFRWX0NPREVfUkFURV9MUCwKKwkJLnNldAk9IDEsCisJfSwKKwlbRFRWX0dVQVJEX0lOVEVSVkFMXSA9IHsKKwkJLm5hbWUJPSAiRFRWX0dVQVJEX0lOVEVSVkFMIiwKKwkJLmNtZAk9IERUVl9HVUFSRF9JTlRFUlZBTCwKKwkJLnNldAk9IDEsCisJfSwKKwlbRFRWX1RSQU5TTUlTU0lPTl9NT0RFXSA9IHsKKwkJLm5hbWUJPSAiRFRWX1RSQU5TTUlTU0lPTl9NT0RFIiwKKwkJLmNtZAk9IERUVl9UUkFOU01JU1NJT05fTU9ERSwKKwkJLnNldAk9IDEsCisJfSwKKwkvKiBHZXQgKi8KKwlbRFRWX0RJU0VRQ19TTEFWRV9SRVBMWV0gPSB7CisJCS5uYW1lCT0gIkRUVl9ESVNFUUNfU0xBVkVfUkVQTFkiLAorCQkuY21kCT0gRFRWX0RJU0VRQ19TTEFWRV9SRVBMWSwKKwkJLnNldAk9IDAsCisJCS5idWZmZXIJPSAxLAorCX0sCisJW0RUVl9BUElfVkVSU0lPTl0gPSB7CisJCS5uYW1lCT0gIkRUVl9BUElfVkVSU0lPTiIsCisJCS5jbWQJPSBEVFZfQVBJX1ZFUlNJT04sCisJCS5zZXQJPSAwLAorCX0sCisJW0RUVl9DT0RFX1JBVEVfSFBdID0geworCQkubmFtZQk9ICJEVFZfQ09ERV9SQVRFX0hQIiwKKwkJLmNtZAk9IERUVl9DT0RFX1JBVEVfSFAsCisJCS5zZXQJPSAwLAorCX0sCisJW0RUVl9DT0RFX1JBVEVfTFBdID0geworCQkubmFtZQk9ICJEVFZfQ09ERV9SQVRFX0xQIiwKKwkJLmNtZAk9IERUVl9DT0RFX1JBVEVfTFAsCisJCS5zZXQJPSAwLAorCX0sCisJW0RUVl9HVUFSRF9JTlRFUlZBTF0gPSB7CisJCS5uYW1lCT0gIkRUVl9HVUFSRF9JTlRFUlZBTCIsCisJCS5jbWQJPSBEVFZfR1VBUkRfSU5URVJWQUwsCisJCS5zZXQJPSAwLAorCX0sCisJW0RUVl9UUkFOU01JU1NJT05fTU9ERV0gPSB7CisJCS5uYW1lCT0gIkRUVl9UUkFOU01JU1NJT05fTU9ERSIsCisJCS5jbWQJPSBEVFZfVFJBTlNNSVNTSU9OX01PREUsCisJCS5zZXQJPSAwLAorCX0sCisJW0RUVl9ISUVSQVJDSFldID0geworCQkubmFtZQk9ICJEVFZfSElFUkFSQ0hZIiwKKwkJLmNtZAk9IERUVl9ISUVSQVJDSFksCisJCS5zZXQJPSAwLAorCX0sCit9OworCit2b2lkIGR0dl9wcm9wZXJ0eV9kdW1wKHN0cnVjdCBkdHZfcHJvcGVydHkgKnR2cCkKK3sKKwlpbnQgaTsKKworCWlmICh0dnAtPmNtZCA8PSAwIHx8IHR2cC0+Y21kID4gRFRWX01BWF9DT01NQU5EKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiB0dnAuY21kID0gMHglMDh4IHVuZGVmaW5lZFxuIiwKKwkJCV9fZnVuY19fLCB0dnAtPmNtZCk7CisJCXJldHVybjsKKwl9CisKKwlkcHJpbnRrKCIlcygpIHR2cC5jbWQgICAgPSAweCUwOHggKCVzKVxuIgorCQksX19mdW5jX18KKwkJLHR2cC0+Y21kCisJCSxkdHZfY21kc1sgdHZwLT5jbWQgXS5uYW1lKTsKKworCWlmKGR0dl9jbWRzWyB0dnAtPmNtZCBdLmJ1ZmZlcikgeworCisJCWRwcmludGsoIiVzKCkgdHZwLnUuYnVmZmVyLmxlbiA9IDB4JTAyeFxuIgorCQkJLF9fZnVuY19fCisJCQksdHZwLT51LmJ1ZmZlci5sZW4pOworCisJCWZvcihpID0gMDsgaSA8IHR2cC0+dS5idWZmZXIubGVuOyBpKyspCisJCQlkcHJpbnRrKCIlcygpIHR2cC51LmJ1ZmZlci5kYXRhWzB4JTAyeF0gPSAweCUwMnhcbiIKKwkJCQksX19mdW5jX18KKwkJCQksaQorCQkJCSx0dnAtPnUuYnVmZmVyLmRhdGFbaV0pOworCisJfSBlbHNlCisJCWRwcmludGsoIiVzKCkgdHZwLnUuZGF0YSA9IDB4JTA4eFxuIiwgX19mdW5jX18sIHR2cC0+dS5kYXRhKTsKK30KKworaW50IGlzX2xlZ2FjeV9kZWxpdmVyeV9zeXN0ZW0oZmVfZGVsaXZlcnlfc3lzdGVtX3QgcykKK3sKKwlpZigocyA9PSBTWVNfVU5ERUZJTkVEKSB8fCAocyA9PSBTWVNfRFZCQ19BTk5FWF9BQykgfHwKKwkJKHMgPT0gU1lTX0RWQkNfQU5ORVhfQikgfHwgKHMgPT0gU1lTX0RWQlQpIHx8IChzID09IFNZU19EVkJTKSkKKwkJcmV0dXJuIDE7CisKKwlyZXR1cm4gMDsKK30KKworLyogU3luY2hyb25pc2UgdGhlIGxlZ2FjeSB0dW5pbmcgcGFyYW1ldGVycyBpbnRvIHRoZSBjYWNoZSwgc28gdGhhdCBkZW1vZHVsYXRvcgorICogZHJpdmVycyBjYW4gdXNlIGEgc2luZ2xlIHNldF9mcm9udGVuZCB0dW5pbmcgZnVuY3Rpb24sIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlcgorICogaXQncyBiZWluZyB1c2VkIGZvciB0aGUgbGVnYWN5IG9yIG5ldyBBUEksIHJlZHVjaW5nIGNvZGUgYW5kIGNvbXBsZXhpdHkuCisgKi8KK3ZvaWQgZHR2X3Byb3BlcnR5X2NhY2hlX3N5bmMoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIHN0cnVjdCBkdmJfZnJvbnRlbmRfcGFyYW1ldGVycyAqcCkKK3sKKwlzdHJ1Y3QgZHR2X2Zyb250ZW5kX3Byb3BlcnRpZXMgKmMgPSAmZmUtPmR0dl9wcm9wZXJ0eV9jYWNoZTsKKworCWMtPmZyZXF1ZW5jeSA9IHAtPmZyZXF1ZW5jeTsKKwljLT5pbnZlcnNpb24gPSBwLT5pbnZlcnNpb247CisKKwlzd2l0Y2ggKGZlLT5vcHMuaW5mby50eXBlKSB7CisJY2FzZSBGRV9RUFNLOgorCQljLT5tb2R1bGF0aW9uID0gUVBTSzsgICAvKiBpbXBsaWVkIGZvciBEVkItUyBpbiBsZWdhY3kgQVBJICovCisJCWMtPnJvbGxvZmYgPSBST0xMT0ZGXzM1Oy8qIGltcGxpZWQgZm9yIERWQi1TICovCisJCWMtPnN5bWJvbF9yYXRlID0gcC0+dS5xcHNrLnN5bWJvbF9yYXRlOworCQljLT5mZWNfaW5uZXIgPSBwLT51LnFwc2suZmVjX2lubmVyOworCQljLT5kZWxpdmVyeV9zeXN0ZW0gPSBTWVNfRFZCUzsKKwkJYnJlYWs7CisJY2FzZSBGRV9RQU06CisJCWMtPnN5bWJvbF9yYXRlID0gcC0+dS5xYW0uc3ltYm9sX3JhdGU7CisJCWMtPmZlY19pbm5lciA9IHAtPnUucWFtLmZlY19pbm5lcjsKKwkJYy0+bW9kdWxhdGlvbiA9IHAtPnUucWFtLm1vZHVsYXRpb247CisJCWMtPmRlbGl2ZXJ5X3N5c3RlbSA9IFNZU19EVkJDX0FOTkVYX0FDOworCQlicmVhazsKKwljYXNlIEZFX09GRE06CisJCWlmIChwLT51Lm9mZG0uYmFuZHdpZHRoID09IEJBTkRXSURUSF82X01IWikKKwkJCWMtPmJhbmR3aWR0aF9oeiA9IDYwMDAwMDA7CisJCWVsc2UgaWYgKHAtPnUub2ZkbS5iYW5kd2lkdGggPT0gQkFORFdJRFRIXzdfTUhaKQorCQkJYy0+YmFuZHdpZHRoX2h6ID0gNzAwMDAwMDsKKwkJZWxzZSBpZiAocC0+dS5vZmRtLmJhbmR3aWR0aCA9PSBCQU5EV0lEVEhfOF9NSFopCisJCQljLT5iYW5kd2lkdGhfaHogPSA4MDAwMDAwOworCQllbHNlCisJCQkvKiBJbmNsdWRpbmcgQkFORFdJRFRIX0FVVE8gKi8KKwkJCWMtPmJhbmR3aWR0aF9oeiA9IDA7CisJCWMtPmNvZGVfcmF0ZV9IUCA9IHAtPnUub2ZkbS5jb2RlX3JhdGVfSFA7CisJCWMtPmNvZGVfcmF0ZV9MUCA9IHAtPnUub2ZkbS5jb2RlX3JhdGVfTFA7CisJCWMtPm1vZHVsYXRpb24gPSBwLT51Lm9mZG0uY29uc3RlbGxhdGlvbjsKKwkJYy0+dHJhbnNtaXNzaW9uX21vZGUgPSBwLT51Lm9mZG0udHJhbnNtaXNzaW9uX21vZGU7CisJCWMtPmd1YXJkX2ludGVydmFsID0gcC0+dS5vZmRtLmd1YXJkX2ludGVydmFsOworCQljLT5oaWVyYXJjaHkgPSBwLT51Lm9mZG0uaGllcmFyY2h5X2luZm9ybWF0aW9uOworCQljLT5kZWxpdmVyeV9zeXN0ZW0gPSBTWVNfRFZCVDsKKwkJYnJlYWs7CisJY2FzZSBGRV9BVFNDOgorCQljLT5tb2R1bGF0aW9uID0gcC0+dS52c2IubW9kdWxhdGlvbjsKKwkJaWYgKChjLT5tb2R1bGF0aW9uID09IFZTQl84KSB8fCAoYy0+bW9kdWxhdGlvbiA9PSBWU0JfMTYpKQorCQkJYy0+ZGVsaXZlcnlfc3lzdGVtID0gU1lTX0FUU0M7CisJCWVsc2UKKwkJCWMtPmRlbGl2ZXJ5X3N5c3RlbSA9IFNZU19EVkJDX0FOTkVYX0I7CisJCWJyZWFrOworCX0KK30KKworLyogRW5zdXJlIHRoZSBjYWNoZWQgdmFsdWVzIGFyZSBzZXQgY29ycmVjdGx5IGluIHRoZSBmcm9udGVuZAorICogbGVnYWN5IHR1bmluZyBzdHJ1Y3R1cmVzLCBmb3IgdGhlIGFkdmFuY2VkIHR1bmluZyBBUEkuCisgKi8KK3ZvaWQgZHR2X3Byb3BlcnR5X2xlZ2FjeV9wYXJhbXNfc3luYyhzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSkKK3sKKwlzdHJ1Y3QgZHR2X2Zyb250ZW5kX3Byb3BlcnRpZXMgKmMgPSAmZmUtPmR0dl9wcm9wZXJ0eV9jYWNoZTsKKwlzdHJ1Y3QgZHZiX2Zyb250ZW5kX3ByaXZhdGUgKmZlcHJpdiA9IGZlLT5mcm9udGVuZF9wcml2OworCXN0cnVjdCBkdmJfZnJvbnRlbmRfcGFyYW1ldGVycyAqcCA9ICZmZXByaXYtPnBhcmFtZXRlcnM7CisKKwlwLT5mcmVxdWVuY3kgPSBjLT5mcmVxdWVuY3k7CisJcC0+aW52ZXJzaW9uID0gYy0+aW52ZXJzaW9uOworCisJc3dpdGNoIChmZS0+b3BzLmluZm8udHlwZSkgeworCWNhc2UgRkVfUVBTSzoKKwkJZHByaW50aygiJXMoKSBQcmVwYXJpbmcgUVBTSyByZXFcbiIsIF9fZnVuY19fKTsKKwkJcC0+dS5xcHNrLnN5bWJvbF9yYXRlID0gYy0+c3ltYm9sX3JhdGU7CisJCXAtPnUucXBzay5mZWNfaW5uZXIgPSBjLT5mZWNfaW5uZXI7CisJCWMtPmRlbGl2ZXJ5X3N5c3RlbSA9IFNZU19EVkJTOworCQlicmVhazsKKwljYXNlIEZFX1FBTToKKwkJZHByaW50aygiJXMoKSBQcmVwYXJpbmcgUUFNIHJlcVxuIiwgX19mdW5jX18pOworCQlwLT51LnFhbS5zeW1ib2xfcmF0ZSA9IGMtPnN5bWJvbF9yYXRlOworCQlwLT51LnFhbS5mZWNfaW5uZXIgPSBjLT5mZWNfaW5uZXI7CisJCXAtPnUucWFtLm1vZHVsYXRpb24gPSBjLT5tb2R1bGF0aW9uOworCQljLT5kZWxpdmVyeV9zeXN0ZW0gPSBTWVNfRFZCQ19BTk5FWF9BQzsKKwkJYnJlYWs7CisJY2FzZSBGRV9PRkRNOgorCQlkcHJpbnRrKCIlcygpIFByZXBhcmluZyBPRkRNIHJlcVxuIiwgX19mdW5jX18pOworCQlpZiAoYy0+YmFuZHdpZHRoX2h6ID09IDYwMDAwMDApCisJCQlwLT51Lm9mZG0uYmFuZHdpZHRoID0gQkFORFdJRFRIXzZfTUhaOworCQllbHNlIGlmIChjLT5iYW5kd2lkdGhfaHogPT0gNzAwMDAwMCkKKwkJCXAtPnUub2ZkbS5iYW5kd2lkdGggPSBCQU5EV0lEVEhfN19NSFo7CisJCWVsc2UgaWYgKGMtPmJhbmR3aWR0aF9oeiA9PSA4MDAwMDAwKQorCQkJcC0+dS5vZmRtLmJhbmR3aWR0aCA9IEJBTkRXSURUSF84X01IWjsKKwkJZWxzZQorCQkJcC0+dS5vZmRtLmJhbmR3aWR0aCA9IEJBTkRXSURUSF9BVVRPOworCQlwLT51Lm9mZG0uY29kZV9yYXRlX0hQID0gYy0+Y29kZV9yYXRlX0hQOworCQlwLT51Lm9mZG0uY29kZV9yYXRlX0xQID0gYy0+Y29kZV9yYXRlX0xQOworCQlwLT51Lm9mZG0uY29uc3RlbGxhdGlvbiA9IGMtPm1vZHVsYXRpb247CisJCXAtPnUub2ZkbS50cmFuc21pc3Npb25fbW9kZSA9IGMtPnRyYW5zbWlzc2lvbl9tb2RlOworCQlwLT51Lm9mZG0uZ3VhcmRfaW50ZXJ2YWwgPSBjLT5ndWFyZF9pbnRlcnZhbDsKKwkJcC0+dS5vZmRtLmhpZXJhcmNoeV9pbmZvcm1hdGlvbiA9IGMtPmhpZXJhcmNoeTsKKwkJYy0+ZGVsaXZlcnlfc3lzdGVtID0gU1lTX0RWQlQ7CisJCWJyZWFrOworCWNhc2UgRkVfQVRTQzoKKwkJZHByaW50aygiJXMoKSBQcmVwYXJpbmcgVlNCIHJlcVxuIiwgX19mdW5jX18pOworCQlwLT51LnZzYi5tb2R1bGF0aW9uID0gYy0+bW9kdWxhdGlvbjsKKwkJaWYgKChjLT5tb2R1bGF0aW9uID09IFZTQl84KSB8fCAoYy0+bW9kdWxhdGlvbiA9PSBWU0JfMTYpKQorCQkJYy0+ZGVsaXZlcnlfc3lzdGVtID0gU1lTX0FUU0M7CisJCWVsc2UKKwkJCWMtPmRlbGl2ZXJ5X3N5c3RlbSA9IFNZU19EVkJDX0FOTkVYX0I7CisJCWJyZWFrOworCX0KK30KKworLyogRW5zdXJlIHRoZSBjYWNoZWQgdmFsdWVzIGFyZSBzZXQgY29ycmVjdGx5IGluIHRoZSBmcm9udGVuZAorICogbGVnYWN5IHR1bmluZyBzdHJ1Y3R1cmVzLCBmb3IgdGhlIGxlZ2FjeSB0dW5pbmcgQVBJLgorICovCit2b2lkIGR0dl9wcm9wZXJ0eV9hZHZfcGFyYW1zX3N5bmMoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUpCit7CisJc3RydWN0IGR0dl9mcm9udGVuZF9wcm9wZXJ0aWVzICpjID0gJmZlLT5kdHZfcHJvcGVydHlfY2FjaGU7CisJc3RydWN0IGR2Yl9mcm9udGVuZF9wcml2YXRlICpmZXByaXYgPSBmZS0+ZnJvbnRlbmRfcHJpdjsKKwlzdHJ1Y3QgZHZiX2Zyb250ZW5kX3BhcmFtZXRlcnMgKnAgPSAmZmVwcml2LT5wYXJhbWV0ZXJzOworCisJcC0+ZnJlcXVlbmN5ID0gYy0+ZnJlcXVlbmN5OworCXAtPmludmVyc2lvbiA9IGMtPmludmVyc2lvbjsKKworCXN3aXRjaChjLT5tb2R1bGF0aW9uKSB7CisJY2FzZSBQU0tfODoKKwljYXNlIEFQU0tfMTY6CisJY2FzZSBBUFNLXzMyOgorCWNhc2UgUVBTSzoKKwkJcC0+dS5xcHNrLnN5bWJvbF9yYXRlID0gYy0+c3ltYm9sX3JhdGU7CisJCXAtPnUucXBzay5mZWNfaW5uZXIgPSBjLT5mZWNfaW5uZXI7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKworCWlmKGMtPmRlbGl2ZXJ5X3N5c3RlbSA9PSBTWVNfSVNEQlQpIHsKKwkJLyogRmFrZSBvdXQgYSBnZW5lcmljIERWQi1UIHJlcXVlc3Qgc28gd2UgcGFzcyB2YWxpZGF0aW9uIGluIHRoZSBpb2N0bCAqLworCQlwLT5mcmVxdWVuY3kgPSBjLT5mcmVxdWVuY3k7CisJCXAtPmludmVyc2lvbiA9IElOVkVSU0lPTl9BVVRPOworCQlwLT51Lm9mZG0uY29uc3RlbGxhdGlvbiA9IFFBTV9BVVRPOworCQlwLT51Lm9mZG0uY29kZV9yYXRlX0hQID0gRkVDX0FVVE87CisJCXAtPnUub2ZkbS5jb2RlX3JhdGVfTFAgPSBGRUNfQVVUTzsKKwkJcC0+dS5vZmRtLmJhbmR3aWR0aCA9IEJBTkRXSURUSF9BVVRPOworCQlwLT51Lm9mZG0udHJhbnNtaXNzaW9uX21vZGUgPSBUUkFOU01JU1NJT05fTU9ERV9BVVRPOworCQlwLT51Lm9mZG0uZ3VhcmRfaW50ZXJ2YWwgPSBHVUFSRF9JTlRFUlZBTF9BVVRPOworCQlwLT51Lm9mZG0uaGllcmFyY2h5X2luZm9ybWF0aW9uID0gSElFUkFSQ0hZX0FVVE87CisJfQorfQorCit2b2lkIGR0dl9wcm9wZXJ0eV9jYWNoZV9zdWJtaXQoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUpCit7CisJc3RydWN0IGR0dl9mcm9udGVuZF9wcm9wZXJ0aWVzICpjID0gJmZlLT5kdHZfcHJvcGVydHlfY2FjaGU7CisKKwkvKiBGb3IgbGVnYWN5IGRlbGl2ZXJ5IHN5c3RlbXMgd2UgZG9uJ3QgbmVlZCB0aGUgZGVsaXZlcnlfc3lzdGVtIHRvCisJICogYmUgc3BlY2lmaWVkLCBidXQgd2UgcG9wdWxhdGUgdGhlIG9sZGVyIHN0cnVjdHVyZXMgZnJvbSB0aGUgY2FjaGUKKwkgKiBzbyB3ZSBjYW4gY2FsbCBzZXRfZnJvbnRlbmQgb24gb2xkZXIgZHJpdmVycy4KKwkgKi8KKwlpZihpc19sZWdhY3lfZGVsaXZlcnlfc3lzdGVtKGMtPmRlbGl2ZXJ5X3N5c3RlbSkpIHsKKworCQlkcHJpbnRrKCIlcygpIGxlZ2FjeSwgbW9kdWxhdGlvbiA9ICVkXG4iLCBfX2Z1bmNfXywgYy0+bW9kdWxhdGlvbik7CisJCWR0dl9wcm9wZXJ0eV9sZWdhY3lfcGFyYW1zX3N5bmMoZmUpOworCisJfSBlbHNlIHsKKwkJZHByaW50aygiJXMoKSBhZHYsIG1vZHVsYXRpb24gPSAlZFxuIiwgX19mdW5jX18sIGMtPm1vZHVsYXRpb24pOworCisJCS8qIEZvciBhZHZhbmNlZCBkZWxpdmVyeSBzeXN0ZW1zIC8gbW9kdWxhdGlvbiB0eXBlcyAuLi4KKwkJICogd2Ugc2VlZCB0aGUgbGVjYWN5IGR2Yl9mcm9udGVuZF9wYXJhbWV0ZXJzIHN0cnVjdHVyZQorCQkgKiBzbyB0aGF0IHRoZSBzYW5pdHkgY2hlY2tpbmcgY29kZSBsYXRlciBpbiB0aGUgSU9DVEwgcHJvY2Vzc2luZworCQkgKiBjYW4gdmFsaWRhdGUgb3VyIGJhc2ljIGZyZXF1ZW5jeSByYW5nZXMsIHN5bWJvbHJhdGVzLCBtb2R1bGF0aW9uCisJCSAqIGV0Yy4KKwkJICovCisJCWR0dl9wcm9wZXJ0eV9hZHZfcGFyYW1zX3N5bmMoZmUpOworCX0KK30KKworc3RhdGljIGludCBkdmJfZnJvbnRlbmRfaW9jdGxfbGVnYWN5KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlLAorCQkJdW5zaWduZWQgaW50IGNtZCwgdm9pZCAqcGFyZyk7CitzdGF0aWMgaW50IGR2Yl9mcm9udGVuZF9pb2N0bF9wcm9wZXJ0aWVzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlLAorCQkJdW5zaWduZWQgaW50IGNtZCwgdm9pZCAqcGFyZyk7CisKK2ludCBkdHZfcHJvcGVydHlfcHJvY2Vzc19nZXQoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIHN0cnVjdCBkdHZfcHJvcGVydHkgKnR2cCwKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlpbnQgciA9IDA7CisKKwlkdHZfcHJvcGVydHlfZHVtcCh0dnApOworCisJLyogQWxsb3cgdGhlIGZyb250ZW5kIHRvIHZhbGlkYXRlIGluY29taW5nIHByb3BlcnRpZXMgKi8KKwlpZiAoZmUtPm9wcy5nZXRfcHJvcGVydHkpCisJCXIgPSBmZS0+b3BzLmdldF9wcm9wZXJ0eShmZSwgdHZwKTsKKworCWlmIChyIDwgMCkKKwkJcmV0dXJuIHI7CisKKwlzd2l0Y2godHZwLT5jbWQpIHsKKwljYXNlIERUVl9GUkVRVUVOQ1k6CisJCXR2cC0+dS5kYXRhID0gZmUtPmR0dl9wcm9wZXJ0eV9jYWNoZS5mcmVxdWVuY3k7CisJCWJyZWFrOworCWNhc2UgRFRWX01PRFVMQVRJT046CisJCXR2cC0+dS5kYXRhID0gZmUtPmR0dl9wcm9wZXJ0eV9jYWNoZS5tb2R1bGF0aW9uOworCQlicmVhazsKKwljYXNlIERUVl9CQU5EV0lEVEhfSFo6CisJCXR2cC0+dS5kYXRhID0gZmUtPmR0dl9wcm9wZXJ0eV9jYWNoZS5iYW5kd2lkdGhfaHo7CisJCWJyZWFrOworCWNhc2UgRFRWX0lOVkVSU0lPTjoKKwkJdHZwLT51LmRhdGEgPSBmZS0+ZHR2X3Byb3BlcnR5X2NhY2hlLmludmVyc2lvbjsKKwkJYnJlYWs7CisJY2FzZSBEVFZfU1lNQk9MX1JBVEU6CisJCXR2cC0+dS5kYXRhID0gZmUtPmR0dl9wcm9wZXJ0eV9jYWNoZS5zeW1ib2xfcmF0ZTsKKwkJYnJlYWs7CisJY2FzZSBEVFZfSU5ORVJfRkVDOgorCQl0dnAtPnUuZGF0YSA9IGZlLT5kdHZfcHJvcGVydHlfY2FjaGUuZmVjX2lubmVyOworCQlicmVhazsKKwljYXNlIERUVl9QSUxPVDoKKwkJdHZwLT51LmRhdGEgPSBmZS0+ZHR2X3Byb3BlcnR5X2NhY2hlLnBpbG90OworCQlicmVhazsKKwljYXNlIERUVl9ST0xMT0ZGOgorCQl0dnAtPnUuZGF0YSA9IGZlLT5kdHZfcHJvcGVydHlfY2FjaGUucm9sbG9mZjsKKwkJYnJlYWs7CisJY2FzZSBEVFZfREVMSVZFUllfU1lTVEVNOgorCQl0dnAtPnUuZGF0YSA9IGZlLT5kdHZfcHJvcGVydHlfY2FjaGUuZGVsaXZlcnlfc3lzdGVtOworCQlicmVhazsKKwljYXNlIERUVl9WT0xUQUdFOgorCQl0dnAtPnUuZGF0YSA9IGZlLT5kdHZfcHJvcGVydHlfY2FjaGUudm9sdGFnZTsKKwkJYnJlYWs7CisJY2FzZSBEVFZfVE9ORToKKwkJdHZwLT51LmRhdGEgPSBmZS0+ZHR2X3Byb3BlcnR5X2NhY2hlLnNlY3RvbmU7CisJCWJyZWFrOworCWNhc2UgRFRWX0FQSV9WRVJTSU9OOgorCQl0dnAtPnUuZGF0YSA9IChEVkJfQVBJX1ZFUlNJT04gPDwgOCkgfCBEVkJfQVBJX1ZFUlNJT05fTUlOT1I7CisJCWJyZWFrOworCWNhc2UgRFRWX0NPREVfUkFURV9IUDoKKwkJdHZwLT51LmRhdGEgPSBmZS0+ZHR2X3Byb3BlcnR5X2NhY2hlLmNvZGVfcmF0ZV9IUDsKKwkJYnJlYWs7CisJY2FzZSBEVFZfQ09ERV9SQVRFX0xQOgorCQl0dnAtPnUuZGF0YSA9IGZlLT5kdHZfcHJvcGVydHlfY2FjaGUuY29kZV9yYXRlX0xQOworCQlicmVhazsKKwljYXNlIERUVl9HVUFSRF9JTlRFUlZBTDoKKwkJdHZwLT51LmRhdGEgPSBmZS0+ZHR2X3Byb3BlcnR5X2NhY2hlLmd1YXJkX2ludGVydmFsOworCQlicmVhazsKKwljYXNlIERUVl9UUkFOU01JU1NJT05fTU9ERToKKwkJdHZwLT51LmRhdGEgPSBmZS0+ZHR2X3Byb3BlcnR5X2NhY2hlLnRyYW5zbWlzc2lvbl9tb2RlOworCQlicmVhazsKKwljYXNlIERUVl9ISUVSQVJDSFk6CisJCXR2cC0+dS5kYXRhID0gZmUtPmR0dl9wcm9wZXJ0eV9jYWNoZS5oaWVyYXJjaHk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXIgPSAtMTsKKwl9CisKKwlyZXR1cm4gcjsKK30KKworaW50IGR0dl9wcm9wZXJ0eV9wcm9jZXNzX3NldChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgc3RydWN0IGR0dl9wcm9wZXJ0eSAqdHZwLAorCXN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCWludCByID0gMDsKKwlzdHJ1Y3QgZHZiX2Zyb250ZW5kX3ByaXZhdGUgKmZlcHJpdiA9IGZlLT5mcm9udGVuZF9wcml2OworCWR0dl9wcm9wZXJ0eV9kdW1wKHR2cCk7CisKKwkvKiBBbGxvdyB0aGUgZnJvbnRlbmQgdG8gdmFsaWRhdGUgaW5jb21pbmcgcHJvcGVydGllcyAqLworCWlmIChmZS0+b3BzLnNldF9wcm9wZXJ0eSkKKwkJciA9IGZlLT5vcHMuc2V0X3Byb3BlcnR5KGZlLCB0dnApOworCisJaWYgKHIgPCAwKQorCQlyZXR1cm4gcjsKKworCXN3aXRjaCh0dnAtPmNtZCkgeworCWNhc2UgRFRWX0NMRUFSOgorCQkvKiBSZXNldCBhIGNhY2hlIG9mIGRhdGEgc3BlY2lmaWMgdG8gdGhlIGZyb250ZW5kIGhlcmUuIFRoaXMgZG9lcworCQkgKiBub3QgZWZmZWN0IGhhcmR3YXJlLgorCQkgKi8KKwkJZHByaW50aygiJXMoKSBGbHVzaGluZyBwcm9wZXJ0eSBjYWNoZVxuIiwgX19mdW5jX18pOworCQltZW1zZXQoJmZlLT5kdHZfcHJvcGVydHlfY2FjaGUsIDAsIHNpemVvZihzdHJ1Y3QgZHR2X2Zyb250ZW5kX3Byb3BlcnRpZXMpKTsKKwkJZmUtPmR0dl9wcm9wZXJ0eV9jYWNoZS5zdGF0ZSA9IHR2cC0+Y21kOworCQlmZS0+ZHR2X3Byb3BlcnR5X2NhY2hlLmRlbGl2ZXJ5X3N5c3RlbSA9IFNZU19VTkRFRklORUQ7CisJCWJyZWFrOworCWNhc2UgRFRWX1RVTkU6CisJCS8qIGludGVycHJldCB0aGUgY2FjaGUgb2YgZGF0YSwgYnVpbGQgZWl0aGVyIGEgdHJhZGl0aW9uYWwgZnJvbnRlbmQKKwkJICogdHVuZXJlcXVlc3Qgc28gd2UgY2FuIHBhc3MgdmFsaWRhdGlvbiBpbiB0aGUgRkVfU0VUX0ZST05URU5ECisJCSAqIGlvY3RsLgorCQkgKi8KKwkJZmUtPmR0dl9wcm9wZXJ0eV9jYWNoZS5zdGF0ZSA9IHR2cC0+Y21kOworCQlkcHJpbnRrKCIlcygpIEZpbmFsaXNlZCBwcm9wZXJ0eSBjYWNoZVxuIiwgX19mdW5jX18pOworCQlkdHZfcHJvcGVydHlfY2FjaGVfc3VibWl0KGZlKTsKKworCQlyIHw9IGR2Yl9mcm9udGVuZF9pb2N0bF9sZWdhY3koaW5vZGUsIGZpbGUsIEZFX1NFVF9GUk9OVEVORCwKKwkJCSZmZXByaXYtPnBhcmFtZXRlcnMpOworCQlicmVhazsKKwljYXNlIERUVl9GUkVRVUVOQ1k6CisJCWZlLT5kdHZfcHJvcGVydHlfY2FjaGUuZnJlcXVlbmN5ID0gdHZwLT51LmRhdGE7CisJCWJyZWFrOworCWNhc2UgRFRWX01PRFVMQVRJT046CisJCWZlLT5kdHZfcHJvcGVydHlfY2FjaGUubW9kdWxhdGlvbiA9IHR2cC0+dS5kYXRhOworCQlicmVhazsKKwljYXNlIERUVl9CQU5EV0lEVEhfSFo6CisJCWZlLT5kdHZfcHJvcGVydHlfY2FjaGUuYmFuZHdpZHRoX2h6ID0gdHZwLT51LmRhdGE7CisJCWJyZWFrOworCWNhc2UgRFRWX0lOVkVSU0lPTjoKKwkJZmUtPmR0dl9wcm9wZXJ0eV9jYWNoZS5pbnZlcnNpb24gPSB0dnAtPnUuZGF0YTsKKwkJYnJlYWs7CisJY2FzZSBEVFZfU1lNQk9MX1JBVEU6CisJCWZlLT5kdHZfcHJvcGVydHlfY2FjaGUuc3ltYm9sX3JhdGUgPSB0dnAtPnUuZGF0YTsKKwkJYnJlYWs7CisJY2FzZSBEVFZfSU5ORVJfRkVDOgorCQlmZS0+ZHR2X3Byb3BlcnR5X2NhY2hlLmZlY19pbm5lciA9IHR2cC0+dS5kYXRhOworCQlicmVhazsKKwljYXNlIERUVl9QSUxPVDoKKwkJZmUtPmR0dl9wcm9wZXJ0eV9jYWNoZS5waWxvdCA9IHR2cC0+dS5kYXRhOworCQlicmVhazsKKwljYXNlIERUVl9ST0xMT0ZGOgorCQlmZS0+ZHR2X3Byb3BlcnR5X2NhY2hlLnJvbGxvZmYgPSB0dnAtPnUuZGF0YTsKKwkJYnJlYWs7CisJY2FzZSBEVFZfREVMSVZFUllfU1lTVEVNOgorCQlmZS0+ZHR2X3Byb3BlcnR5X2NhY2hlLmRlbGl2ZXJ5X3N5c3RlbSA9IHR2cC0+dS5kYXRhOworCQlicmVhazsKKwljYXNlIERUVl9WT0xUQUdFOgorCQlmZS0+ZHR2X3Byb3BlcnR5X2NhY2hlLnZvbHRhZ2UgPSB0dnAtPnUuZGF0YTsKKwkJciA9IGR2Yl9mcm9udGVuZF9pb2N0bF9sZWdhY3koaW5vZGUsIGZpbGUsIEZFX1NFVF9WT0xUQUdFLAorCQkJKHZvaWQgKilmZS0+ZHR2X3Byb3BlcnR5X2NhY2hlLnZvbHRhZ2UpOworCQlicmVhazsKKwljYXNlIERUVl9UT05FOgorCQlmZS0+ZHR2X3Byb3BlcnR5X2NhY2hlLnNlY3RvbmUgPSB0dnAtPnUuZGF0YTsKKwkJciA9IGR2Yl9mcm9udGVuZF9pb2N0bF9sZWdhY3koaW5vZGUsIGZpbGUsIEZFX1NFVF9UT05FLAorCQkJKHZvaWQgKilmZS0+ZHR2X3Byb3BlcnR5X2NhY2hlLnNlY3RvbmUpOworCQlicmVhazsKKwljYXNlIERUVl9DT0RFX1JBVEVfSFA6CisJCWZlLT5kdHZfcHJvcGVydHlfY2FjaGUuY29kZV9yYXRlX0hQID0gdHZwLT51LmRhdGE7CisJCWJyZWFrOworCWNhc2UgRFRWX0NPREVfUkFURV9MUDoKKwkJZmUtPmR0dl9wcm9wZXJ0eV9jYWNoZS5jb2RlX3JhdGVfTFAgPSB0dnAtPnUuZGF0YTsKKwkJYnJlYWs7CisJY2FzZSBEVFZfR1VBUkRfSU5URVJWQUw6CisJCWZlLT5kdHZfcHJvcGVydHlfY2FjaGUuZ3VhcmRfaW50ZXJ2YWwgPSB0dnAtPnUuZGF0YTsKKwkJYnJlYWs7CisJY2FzZSBEVFZfVFJBTlNNSVNTSU9OX01PREU6CisJCWZlLT5kdHZfcHJvcGVydHlfY2FjaGUudHJhbnNtaXNzaW9uX21vZGUgPSB0dnAtPnUuZGF0YTsKKwkJYnJlYWs7CisJY2FzZSBEVFZfSElFUkFSQ0hZOgorCQlmZS0+ZHR2X3Byb3BlcnR5X2NhY2hlLmhpZXJhcmNoeSA9IHR2cC0+dS5kYXRhOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyID0gLTE7CisJfQorCisJcmV0dXJuIHI7Cit9CisKIHN0YXRpYyBpbnQgZHZiX2Zyb250ZW5kX2lvY3RsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlLAogCQkJdW5zaWduZWQgaW50IGNtZCwgdm9pZCAqcGFyZykKIHsKQEAgLTc3Niw2ICsxMzA0LDExMiBAQAogCWlmIChkb3duX2ludGVycnVwdGlibGUgKCZmZXByaXYtPnNlbSkpCiAJCXJldHVybiAtRVJFU1RBUlRTWVM7CiAKKwlpZiAoKGNtZCA9PSBGRV9TRVRfUFJPUEVSVFkpIHx8IChjbWQgPT0gRkVfR0VUX1BST1BFUlRZKSkKKwkJZXJyID0gZHZiX2Zyb250ZW5kX2lvY3RsX3Byb3BlcnRpZXMoaW5vZGUsIGZpbGUsIGNtZCwgcGFyZyk7CisJZWxzZSB7CisJCWZlLT5kdHZfcHJvcGVydHlfY2FjaGUuc3RhdGUgPSBEVFZfVU5ERUZJTkVEOworCQllcnIgPSBkdmJfZnJvbnRlbmRfaW9jdGxfbGVnYWN5KGlub2RlLCBmaWxlLCBjbWQsIHBhcmcpOworCX0KKworCXVwKCZmZXByaXYtPnNlbSk7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBkdmJfZnJvbnRlbmRfaW9jdGxfcHJvcGVydGllcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJCXVuc2lnbmVkIGludCBjbWQsIHZvaWQgKnBhcmcpCit7CisJc3RydWN0IGR2Yl9kZXZpY2UgKmR2YmRldiA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSA9IGR2YmRldi0+cHJpdjsKKwlpbnQgZXJyID0gMDsKKworCXN0cnVjdCBkdHZfcHJvcGVydGllcyAqdHZwcyA9IE5VTEw7CisJc3RydWN0IGR0dl9wcm9wZXJ0eSAqdHZwID0gTlVMTDsKKwlpbnQgaTsKKworCWRwcmludGsoIiVzXG4iLCBfX2Z1bmNfXyk7CisKKwlpZihjbWQgPT0gRkVfU0VUX1BST1BFUlRZKSB7CisJCXR2cHMgPSAoc3RydWN0IGR0dl9wcm9wZXJ0aWVzIF9fdXNlciAqKXBhcmc7CisKKwkJZHByaW50aygiJXMoKSBwcm9wZXJ0aWVzLm51bSA9ICVkXG4iLCBfX2Z1bmNfXywgdHZwcy0+bnVtKTsKKwkJZHByaW50aygiJXMoKSBwcm9wZXJ0aWVzLnByb3BzID0gJXBcbiIsIF9fZnVuY19fLCB0dnBzLT5wcm9wcyk7CisKKwkJLyogUHV0IGFuIGFyYml0cmFyeSBsaW1pdCBvbiB0aGUgbnVtYmVyIG9mIG1lc3NhZ2VzIHRoYXQgY2FuCisJCSAqIGJlIHNlbnQgYXQgb25jZSAqLworCQlpZiAoKHR2cHMtPm51bSA9PSAwKSB8fCAodHZwcy0+bnVtID4gRFRWX0lPQ1RMX01BWF9NU0dTKSkKKwkJCXJldHVybiAtRUlOVkFMOworCisJCXR2cCA9IChzdHJ1Y3QgZHR2X3Byb3BlcnR5ICopIGttYWxsb2ModHZwcy0+bnVtICoKKwkJCXNpemVvZihzdHJ1Y3QgZHR2X3Byb3BlcnR5KSwgR0ZQX0tFUk5FTCk7CisJCWlmICghdHZwKSB7CisJCQllcnIgPSAtRU5PTUVNOworCQkJZ290byBvdXQ7CisJCX0KKworCQlpZiAoY29weV9mcm9tX3VzZXIodHZwLCB0dnBzLT5wcm9wcywgdHZwcy0+bnVtICogc2l6ZW9mKHN0cnVjdCBkdHZfcHJvcGVydHkpKSkgeworCQkJZXJyID0gLUVGQVVMVDsKKwkJCWdvdG8gb3V0OworCQl9CisKKwkJZm9yIChpID0gMDsgaSA8IHR2cHMtPm51bTsgaSsrKSB7CisJCQkodHZwICsgaSktPnJlc3VsdCA9IGR0dl9wcm9wZXJ0eV9wcm9jZXNzX3NldChmZSwgdHZwICsgaSwgaW5vZGUsIGZpbGUpOworCQkJZXJyIHw9ICh0dnAgKyBpKS0+cmVzdWx0OworCQl9CisKKwkJaWYoZmUtPmR0dl9wcm9wZXJ0eV9jYWNoZS5zdGF0ZSA9PSBEVFZfVFVORSkKKwkJCWRwcmludGsoIiVzKCkgUHJvcGVydHkgY2FjaGUgaXMgZnVsbCwgdHVuaW5nXG4iLCBfX2Z1bmNfXyk7CisKKwl9IGVsc2UKKwlpZihjbWQgPT0gRkVfR0VUX1BST1BFUlRZKSB7CisKKwkJdHZwcyA9IChzdHJ1Y3QgZHR2X3Byb3BlcnRpZXMgX191c2VyICopcGFyZzsKKworCQlkcHJpbnRrKCIlcygpIHByb3BlcnRpZXMubnVtID0gJWRcbiIsIF9fZnVuY19fLCB0dnBzLT5udW0pOworCQlkcHJpbnRrKCIlcygpIHByb3BlcnRpZXMucHJvcHMgPSAlcFxuIiwgX19mdW5jX18sIHR2cHMtPnByb3BzKTsKKworCQkvKiBQdXQgYW4gYXJiaXRyYXJ5IGxpbWl0IG9uIHRoZSBudW1iZXIgb2YgbWVzc2FnZXMgdGhhdCBjYW4KKwkJICogYmUgc2VudCBhdCBvbmNlICovCisJCWlmICgodHZwcy0+bnVtID09IDApIHx8ICh0dnBzLT5udW0gPiBEVFZfSU9DVExfTUFYX01TR1MpKQorCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJdHZwID0gKHN0cnVjdCBkdHZfcHJvcGVydHkgKikga21hbGxvYyh0dnBzLT5udW0gKgorCQkJc2l6ZW9mKHN0cnVjdCBkdHZfcHJvcGVydHkpLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCF0dnApIHsKKwkJCWVyciA9IC1FTk9NRU07CisJCQlnb3RvIG91dDsKKwkJfQorCisJCWlmIChjb3B5X2Zyb21fdXNlcih0dnAsIHR2cHMtPnByb3BzLCB0dnBzLT5udW0gKiBzaXplb2Yoc3RydWN0IGR0dl9wcm9wZXJ0eSkpKSB7CisJCQllcnIgPSAtRUZBVUxUOworCQkJZ290byBvdXQ7CisJCX0KKworCQlmb3IgKGkgPSAwOyBpIDwgdHZwcy0+bnVtOyBpKyspIHsKKwkJCSh0dnAgKyBpKS0+cmVzdWx0ID0gZHR2X3Byb3BlcnR5X3Byb2Nlc3NfZ2V0KGZlLCB0dnAgKyBpLCBpbm9kZSwgZmlsZSk7CisJCQllcnIgfD0gKHR2cCArIGkpLT5yZXN1bHQ7CisJCX0KKworCQlpZiAoY29weV90b191c2VyKHR2cHMtPnByb3BzLCB0dnAsIHR2cHMtPm51bSAqIHNpemVvZihzdHJ1Y3QgZHR2X3Byb3BlcnR5KSkpIHsKKwkJCWVyciA9IC1FRkFVTFQ7CisJCQlnb3RvIG91dDsKKwkJfQorCisJfSBlbHNlCisJCWVyciA9IC1FT1BOT1RTVVBQOworCitvdXQ6CisJa2ZyZWUodHZwKTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IGR2Yl9mcm9udGVuZF9pb2N0bF9sZWdhY3koc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUsCisJCQl1bnNpZ25lZCBpbnQgY21kLCB2b2lkICpwYXJnKQoreworCXN0cnVjdCBkdmJfZGV2aWNlICpkdmJkZXYgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUgPSBkdmJkZXYtPnByaXY7CisJc3RydWN0IGR2Yl9mcm9udGVuZF9wcml2YXRlICpmZXByaXYgPSBmZS0+ZnJvbnRlbmRfcHJpdjsKKwlpbnQgZXJyID0gLUVPUE5PVFNVUFA7CisKIAlzd2l0Y2ggKGNtZCkgewogCWNhc2UgRkVfR0VUX0lORk86IHsKIAkJc3RydWN0IGR2Yl9mcm9udGVuZF9pbmZvKiBpbmZvID0gcGFyZzsKQEAgLTk0MiwxMyArMTU3NiwyMSBAQAogCWNhc2UgRkVfU0VUX0ZST05URU5EOiB7CiAJCXN0cnVjdCBkdmJfZnJvbnRlbmRfdHVuZV9zZXR0aW5ncyBmZXR1bmVzZXR0aW5nczsKIAotCQlpZiAoZHZiX2Zyb250ZW5kX2NoZWNrX3BhcmFtZXRlcnMoZmUsIHBhcmcpIDwgMCkgewotCQkJZXJyID0gLUVJTlZBTDsKLQkJCWJyZWFrOwotCQl9CisJCWlmKGZlLT5kdHZfcHJvcGVydHlfY2FjaGUuc3RhdGUgPT0gRFRWX1RVTkUpIHsKKwkJCWlmIChkdmJfZnJvbnRlbmRfY2hlY2tfcGFyYW1ldGVycyhmZSwgJmZlcHJpdi0+cGFyYW1ldGVycykgPCAwKSB7CisJCQkJZXJyID0gLUVJTlZBTDsKKwkJCQlicmVhazsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCWlmIChkdmJfZnJvbnRlbmRfY2hlY2tfcGFyYW1ldGVycyhmZSwgcGFyZykgPCAwKSB7CisJCQkJZXJyID0gLUVJTlZBTDsKKwkJCQlicmVhazsKKwkJCX0KIAotCQltZW1jcHkgKCZmZXByaXYtPnBhcmFtZXRlcnMsIHBhcmcsCi0JCQlzaXplb2YgKHN0cnVjdCBkdmJfZnJvbnRlbmRfcGFyYW1ldGVycykpOworCQkJbWVtY3B5ICgmZmVwcml2LT5wYXJhbWV0ZXJzLCBwYXJnLAorCQkJCXNpemVvZiAoc3RydWN0IGR2Yl9mcm9udGVuZF9wYXJhbWV0ZXJzKSk7CisJCQlkdHZfcHJvcGVydHlfY2FjaGVfc3luYyhmZSwgJmZlcHJpdi0+cGFyYW1ldGVycyk7CisJCX0KIAogCQltZW1zZXQoJmZldHVuZXNldHRpbmdzLCAwLCBzaXplb2Yoc3RydWN0IGR2Yl9mcm9udGVuZF90dW5lX3NldHRpbmdzKSk7CiAJCW1lbWNweSgmZmV0dW5lc2V0dGluZ3MucGFyYW1ldGVycywgcGFyZywKQEAgLTEwMjcsMTAgKzE2NjksMTAgQEAKIAkJYnJlYWs7CiAJfTsKIAotCXVwICgmZmVwcml2LT5zZW0pOwogCXJldHVybiBlcnI7CiB9CiAKKwogc3RhdGljIHVuc2lnbmVkIGludCBkdmJfZnJvbnRlbmRfcG9sbChzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHBvbGxfdGFibGVfc3RydWN0ICp3YWl0KQogewogCXN0cnVjdCBkdmJfZGV2aWNlICpkdmJkZXYgPSBmaWxlLT5wcml2YXRlX2RhdGE7CkBAIC0xMDUyLDEzICsxNjk0LDUzIEBACiAJc3RydWN0IGR2Yl9kZXZpY2UgKmR2YmRldiA9IGZpbGUtPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSA9IGR2YmRldi0+cHJpdjsKIAlzdHJ1Y3QgZHZiX2Zyb250ZW5kX3ByaXZhdGUgKmZlcHJpdiA9IGZlLT5mcm9udGVuZF9wcml2OworCXN0cnVjdCBkdmJfYWRhcHRlciAqYWRhcHRlciA9IGZlLT5kdmI7CiAJaW50IHJldDsKIAogCWRwcmludGsgKCIlc1xuIiwgX19mdW5jX18pOwogCisJaWYgKGFkYXB0ZXItPm1mZV9zaGFyZWQpIHsKKwkJbXV0ZXhfbG9jayAoJmFkYXB0ZXItPm1mZV9sb2NrKTsKKworCQlpZiAoYWRhcHRlci0+bWZlX2R2YmRldiA9PSBOVUxMKQorCQkJYWRhcHRlci0+bWZlX2R2YmRldiA9IGR2YmRldjsKKworCQllbHNlIGlmIChhZGFwdGVyLT5tZmVfZHZiZGV2ICE9IGR2YmRldikgeworCQkJc3RydWN0IGR2Yl9kZXZpY2UKKwkJCQkqbWZlZGV2ID0gYWRhcHRlci0+bWZlX2R2YmRldjsKKwkJCXN0cnVjdCBkdmJfZnJvbnRlbmQKKwkJCQkqbWZlID0gbWZlZGV2LT5wcml2OworCQkJc3RydWN0IGR2Yl9mcm9udGVuZF9wcml2YXRlCisJCQkJKm1mZXByaXYgPSBtZmUtPmZyb250ZW5kX3ByaXY7CisJCQlpbnQgbWZlcmV0cnkgPSAoZHZiX21mZV93YWl0X3RpbWUgPDwgMSk7CisKKwkJCW11dGV4X3VubG9jayAoJmFkYXB0ZXItPm1mZV9sb2NrKTsKKwkJCXdoaWxlIChtZmVyZXRyeS0tICYmIChtZmVkZXYtPnVzZXJzICE9IC0xIHx8CisJCQkJCW1mZXByaXYtPnRocmVhZCAhPSBOVUxMKSkgeworCQkJCWlmKG1zbGVlcF9pbnRlcnJ1cHRpYmxlKDUwMCkpIHsKKwkJCQkJaWYoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpCisJCQkJCQlyZXR1cm4gLUVJTlRSOworCQkJCX0KKwkJCX0KKworCQkJbXV0ZXhfbG9jayAoJmFkYXB0ZXItPm1mZV9sb2NrKTsKKwkJCWlmKGFkYXB0ZXItPm1mZV9kdmJkZXYgIT0gZHZiZGV2KSB7CisJCQkJbWZlZGV2ID0gYWRhcHRlci0+bWZlX2R2YmRldjsKKwkJCQltZmUgPSBtZmVkZXYtPnByaXY7CisJCQkJbWZlcHJpdiA9IG1mZS0+ZnJvbnRlbmRfcHJpdjsKKwkJCQlpZiAobWZlZGV2LT51c2VycyAhPSAtMSB8fAorCQkJCQkJbWZlcHJpdi0+dGhyZWFkICE9IE5VTEwpIHsKKwkJCQkJbXV0ZXhfdW5sb2NrICgmYWRhcHRlci0+bWZlX2xvY2spOworCQkJCQlyZXR1cm4gLUVCVVNZOworCQkJCX0KKwkJCQlhZGFwdGVyLT5tZmVfZHZiZGV2ID0gZHZiZGV2OworCQkJfQorCQl9CisJfQorCiAJaWYgKGR2YmRldi0+dXNlcnMgPT0gLTEgJiYgZmUtPm9wcy50c19idXNfY3RybCkgewogCQlpZiAoKHJldCA9IGZlLT5vcHMudHNfYnVzX2N0cmwoZmUsIDEpKSA8IDApCi0JCQlyZXR1cm4gcmV0OworCQkJZ290byBlcnIwOwogCX0KIAogCWlmICgocmV0ID0gZHZiX2dlbmVyaWNfb3BlbiAoaW5vZGUsIGZpbGUpKSA8IDApCkBAIC0xMDc4LDYgKzE3NjAsOCBAQAogCQlmZXByaXYtPmV2ZW50cy5ldmVudHIgPSBmZXByaXYtPmV2ZW50cy5ldmVudHcgPSAwOwogCX0KIAorCWlmIChhZGFwdGVyLT5tZmVfc2hhcmVkKQorCQltdXRleF91bmxvY2sgKCZhZGFwdGVyLT5tZmVfbG9jayk7CiAJcmV0dXJuIHJldDsKIAogZXJyMjoKQEAgLTEwODUsNiArMTc2OSw5IEBACiBlcnIxOgogCWlmIChkdmJkZXYtPnVzZXJzID09IC0xICYmIGZlLT5vcHMudHNfYnVzX2N0cmwpCiAJCWZlLT5vcHMudHNfYnVzX2N0cmwoZmUsIDApOworZXJyMDoKKwlpZiAoYWRhcHRlci0+bWZlX3NoYXJlZCkKKwkJbXV0ZXhfdW5sb2NrICgmYWRhcHRlci0+bWZlX2xvY2spOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTExNTQsOCArMTg0MSw5IEBACiAJZmUtPmR2YiA9IGR2YjsKIAlmZXByaXYtPmludmVyc2lvbiA9IElOVkVSU0lPTl9PRkY7CiAKLQlwcmludGsgKCJEVkI6IHJlZ2lzdGVyaW5nIGZyb250ZW5kICVpICglcykuLi5cbiIsCisJcHJpbnRrICgiRFZCOiByZWdpc3RlcmluZyBhZGFwdGVyICVpIGZyb250ZW5kICVpICglcykuLi5cbiIsCiAJCWZlLT5kdmItPm51bSwKKwkJZmUtPmlkLAogCQlmZS0+b3BzLmluZm8ubmFtZSk7CiAKIAlkdmJfcmVnaXN0ZXJfZGV2aWNlIChmZS0+ZHZiLCAmZmVwcml2LT5kdmJkZXYsICZkdmJkZXZfdGVtcGxhdGUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kdmJfZnJvbnRlbmQuaCBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlL2R2Yl9mcm9udGVuZC5oCmluZGV4IGFhNDEzM2YuLmRiNGE2M2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlL2R2Yl9mcm9udGVuZC5oCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlL2R2Yl9mcm9udGVuZC5oCkBAIC0xNjksNiArMTY5LDkgQEAKIAogCXN0cnVjdCBkdmJfdHVuZXJfb3BzIHR1bmVyX29wczsKIAlzdHJ1Y3QgYW5hbG9nX2RlbW9kX29wcyBhbmFsb2dfb3BzOworCisJaW50ICgqc2V0X3Byb3BlcnR5KShzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBmZSwgc3RydWN0IGR0dl9wcm9wZXJ0eSogdHZwKTsKKwlpbnQgKCpnZXRfcHJvcGVydHkpKHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlLCBzdHJ1Y3QgZHR2X3Byb3BlcnR5KiB0dnApOwogfTsKIAogI2RlZmluZSBNQVhfRVZFTlQgOApAQCAtMTgyLDYgKzE4NSwzMiBAQAogCXN0cnVjdCBtdXRleAkJICBtdHg7CiB9OwogCitzdHJ1Y3QgZHR2X2Zyb250ZW5kX3Byb3BlcnRpZXMgeworCisJLyogQ2FjaGUgU3RhdGUgKi8KKwl1MzIJCQlzdGF0ZTsKKworCXUzMgkJCWZyZXF1ZW5jeTsKKwlmZV9tb2R1bGF0aW9uX3QJCW1vZHVsYXRpb247CisKKwlmZV9zZWNfdm9sdGFnZV90CXZvbHRhZ2U7CisJZmVfc2VjX3RvbmVfbW9kZV90CXNlY3RvbmU7CisJZmVfc3BlY3RyYWxfaW52ZXJzaW9uX3QJaW52ZXJzaW9uOworCWZlX2NvZGVfcmF0ZV90CQlmZWNfaW5uZXI7CisJZmVfdHJhbnNtaXRfbW9kZV90CXRyYW5zbWlzc2lvbl9tb2RlOworCXUzMgkJCWJhbmR3aWR0aF9oejsJLyogMCA9IEFVVE8gKi8KKwlmZV9ndWFyZF9pbnRlcnZhbF90CWd1YXJkX2ludGVydmFsOworCWZlX2hpZXJhcmNoeV90CQloaWVyYXJjaHk7CisJdTMyCQkJc3ltYm9sX3JhdGU7CisJZmVfY29kZV9yYXRlX3QJCWNvZGVfcmF0ZV9IUDsKKwlmZV9jb2RlX3JhdGVfdAkJY29kZV9yYXRlX0xQOworCisJZmVfcGlsb3RfdAkJcGlsb3Q7CisJZmVfcm9sbG9mZl90CQlyb2xsb2ZmOworCisJZmVfZGVsaXZlcnlfc3lzdGVtX3QJZGVsaXZlcnlfc3lzdGVtOworfTsKKwogc3RydWN0IGR2Yl9mcm9udGVuZCB7CiAJc3RydWN0IGR2Yl9mcm9udGVuZF9vcHMgb3BzOwogCXN0cnVjdCBkdmJfYWRhcHRlciAqZHZiOwpAQCAtMTkwLDYgKzIxOSwxMCBAQAogCXZvaWQgKmZyb250ZW5kX3ByaXY7CiAJdm9pZCAqc2VjX3ByaXY7CiAJdm9pZCAqYW5hbG9nX2RlbW9kX3ByaXY7CisJc3RydWN0IGR0dl9mcm9udGVuZF9wcm9wZXJ0aWVzIGR0dl9wcm9wZXJ0eV9jYWNoZTsKKyNkZWZpbmUgRFZCX0ZST05URU5EX0NPTVBPTkVOVF9UVU5FUiAwCisJaW50ICgqY2FsbGJhY2spKHZvaWQgKmFkYXB0ZXJfcHJpdiwgaW50IGNvbXBvbmVudCwgaW50IGNtZCwgaW50IGFyZyk7CisJaW50IGlkOwogfTsKIAogZXh0ZXJuIGludCBkdmJfcmVnaXN0ZXJfZnJvbnRlbmQoc3RydWN0IGR2Yl9hZGFwdGVyICpkdmIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kdmJkZXYuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlL2R2YmRldi5jCmluZGV4IGU3MTMyNzcuLmExMTM3NDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlL2R2YmRldi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlL2R2YmRldi5jCkBAIC0yMzMsNyArMjMzLDcgQEAKIAogCW11dGV4X3VubG9jaygmZHZiZGV2X3JlZ2lzdGVyX2xvY2spOwogCi0JY2xzZGV2ID0gZGV2aWNlX2NyZWF0ZV9kcnZkYXRhKGR2Yl9jbGFzcywgYWRhcC0+ZGV2aWNlLAorCWNsc2RldiA9IGRldmljZV9jcmVhdGUoZHZiX2NsYXNzLCBhZGFwLT5kZXZpY2UsCiAJCQkgICAgICAgTUtERVYoRFZCX01BSk9SLCBudW1zMm1pbm9yKGFkYXAtPm51bSwgdHlwZSwgaWQpKSwKIAkJCSAgICAgICBOVUxMLCAiZHZiJWQuJXMlZCIsIGFkYXAtPm51bSwgZG5hbWVzW3R5cGVdLCBpZCk7CiAJaWYgKElTX0VSUihjbHNkZXYpKSB7CkBAIC0zMjYsNiArMzI2LDkgQEAKIAlhZGFwLT5uYW1lID0gbmFtZTsKIAlhZGFwLT5tb2R1bGUgPSBtb2R1bGU7CiAJYWRhcC0+ZGV2aWNlID0gZGV2aWNlOworCWFkYXAtPm1mZV9zaGFyZWQgPSAwOworCWFkYXAtPm1mZV9kdmJkZXYgPSBOVUxMOworCW11dGV4X2luaXQgKCZhZGFwLT5tZmVfbG9jayk7CiAKIAlsaXN0X2FkZF90YWlsICgmYWRhcC0+bGlzdF9oZWFkLCAmZHZiX2FkYXB0ZXJfbGlzdCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlL2R2YmRldi5oIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvZHZiZGV2LmgKaW5kZXggODlkMTJkYy4uNTc0ZTMzNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvZHZiZGV2LmgKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvZHZiZGV2LmgKQEAgLTYyLDYgKzYyLDEwIEBACiAJc3RydWN0IGRldmljZSAqZGV2aWNlOwogCiAJc3RydWN0IG1vZHVsZSAqbW9kdWxlOworCisJaW50IG1mZV9zaGFyZWQ7CQkJLyogaW5kaWNhdGVzIG11dHVhbGx5IGV4Y2x1c2l2ZSBmcm9udGVuZHMgKi8KKwlzdHJ1Y3QgZHZiX2RldmljZSAqbWZlX2R2YmRldjsJLyogZnJvbnRlbmQgZGV2aWNlIGluIHVzZSAqLworCXN0cnVjdCBtdXRleCBtZmVfbG9jazsJCS8qIGFjY2VzcyBsb2NrIGZvciB0aHJlYWQgY3JlYXRpb24gKi8KIH07CiAKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9LY29uZmlnIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9LY29uZmlnCmluZGV4IGU4NDE1MmIuLjNjMTNiY2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvS2NvbmZpZworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL0tjb25maWcKQEAgLTcyLDkgKzcyLDExIEBACiAJc2VsZWN0IERWQl9ESUI3MDAwUAogCXNlbGVjdCBEVkJfRElCNzAwME0KIAlzZWxlY3QgRFZCX0RJQjMwMDBNQworCXNlbGVjdCBEVkJfUzVIMTQxMSBpZiAhRFZCX0ZFX0NVU1RPTUlTRQogCXNlbGVjdCBNRURJQV9UVU5FUl9NVDIwNjAgaWYgIURWQl9GRV9DVVNUT01JU0UKIAlzZWxlY3QgTUVESUFfVFVORVJfTVQyMjY2IGlmICFEVkJfRkVfQ1VTVE9NSVNFCiAJc2VsZWN0IE1FRElBX1RVTkVSX1hDMjAyOCBpZiAhRFZCX0ZFX0NVU1RPTUlTRQorCXNlbGVjdCBNRURJQV9UVU5FUl9YQzUwMDAgaWYgIURWQl9GRV9DVVNUT01JWkUKIAlzZWxlY3QgRFZCX1RVTkVSX0RJQjAwNzAKIAloZWxwCiAJICBTdXBwb3J0IGZvciBVU0IyLjAvMS4xIERWQiByZWNlaXZlcnMgYmFzZWQgb24gdGhlIERpQjA3MDAgVVNCIGJyaWRnZS4gVGhlCkBAIC0xMDgsNiArMTEwLDggQEAKIAlzZWxlY3QgTUVESUFfVFVORVJfU0lNUExFIGlmICFEVkJfRkVfQ1VTVE9NSVNFCiAJc2VsZWN0IE1FRElBX1RVTkVSX1hDMjAyOCBpZiAhRFZCX0ZFX0NVU1RPTUlTRQogCXNlbGVjdCBNRURJQV9UVU5FUl9NWEw1MDA1UyBpZiAhRFZCX0ZFX0NVU1RPTUlTRQorCXNlbGVjdCBEVkJfRElCNzAwMFAgaWYgIURWQl9GRV9DVVNUT01JU0UKKwlzZWxlY3QgRFZCX1RVTkVSX0RJQjAwNzAgaWYgIURWQl9GRV9DVVNUT01JU0UKIAloZWxwCiAJICBTYXkgWSBoZXJlIHRvIHN1cHBvcnQgdGhlIENvbmV4YW50IFVTQjIuMCBoeWJyaWQgcmVmZXJlbmNlIGRlc2lnbi4KIAkgIEN1cnJlbnRseSwgb25seSBEVkIgYW5kIEFUU0MgbW9kZXMgYXJlIHN1cHBvcnRlZCwgYW5hbG9nIG1vZGUKQEAgLTI0NSwxMiArMjQ5LDI1IEBACiAJICBBZmF0ZWNoIEFGOTAwNSBiYXNlZCByZWNlaXZlci4KIAogY29uZmlnIERWQl9VU0JfRFcyMTAyCi0JdHJpc3RhdGUgIkR2YldvcmxkIDIxMDIgRFZCLVMgVVNCMi4wIHJlY2VpdmVyIgorCXRyaXN0YXRlICJEdmJXb3JsZCBEVkItUy9TMiBVU0IyLjAgc3VwcG9ydCIKIAlkZXBlbmRzIG9uIERWQl9VU0IKLQlzZWxlY3QgRFZCX1NUVjAyOTkgaWYgIURWQl9GRV9DVVNUT01JU0UKIAlzZWxlY3QgRFZCX1BMTCBpZiAhRFZCX0ZFX0NVU1RPTUlTRQorCXNlbGVjdCBEVkJfU1RWMDI5OSBpZiAhRFZCX0ZFX0NVU1RPTUlTRQorCXNlbGVjdCBEVkJfU1RWMDI4OCBpZiAhRFZCX0ZFX0NVU1RPTUlTRQorCXNlbGVjdCBEVkJfU1RCNjAwMCBpZiAhRFZCX0ZFX0NVU1RPTUlTRQorCXNlbGVjdCBEVkJfQ1gyNDExNiBpZiAhRFZCX0ZFX0NVU1RPTUlTRQorCXNlbGVjdCBEVkJfU0kyMVhYIGlmICFEVkJfRkVfQ1VTVE9NSVNFCiAJaGVscAotCSAgIFNheSBZIGhlcmUgdG8gc3VwcG9ydCB0aGUgRHZiV29ybGQgMjEwMiBEVkItUyBVU0IyLjAgcmVjZWl2ZXIuCisJICBTYXkgWSBoZXJlIHRvIHN1cHBvcnQgdGhlIER2YldvcmxkIERWQi1TL1MyIFVTQjIuMCByZWNlaXZlcnMKKwkgIGFuZCB0aGUgVGVWaWkgUzY1MC4KKworY29uZmlnIAlEVkJfVVNCX0NJTkVSR1lfVDIKKwl0cmlzdGF0ZSAiVGVycmF0ZWMgQ2luZXJneVQyL3FhbnUgVVNCIDIuMCBEVkItVCByZWNlaXZlciIKKwlkZXBlbmRzIG9uIERWQl9VU0IKKwloZWxwCisJICBTdXBwb3J0IGZvciAiVGVycmFUZWMgQ2luZXJneVQyIiBVU0IyLjAgSGlnaHNwZWVkIERWQiBSZWNlaXZlcnMKKworCSAgU2F5IFkgaWYgeW91IG93biBzdWNoIGEgZGV2aWNlIGFuZCB3YW50IHRvIHVzZSBpdC4KIAogY29uZmlnIERWQl9VU0JfQU5ZU0VFCiAJdHJpc3RhdGUgIkFueXNlZSBEVkItVC9DIFVTQjIuMCBzdXBwb3J0IgpAQCAtMjYyLDMgKzI3OSwyMiBAQAogCWhlbHAKIAkgIFNheSBZIGhlcmUgdG8gc3VwcG9ydCB0aGUgQW55c2VlIEUzMCwgQW55c2VlIEUzMCBQbHVzIG9yCiAJICBBbnlzZWUgRTMwIEMgUGx1cyBEVkIgVVNCMi4wIHJlY2VpdmVyLgorCitjb25maWcgRFZCX1VTQl9EVFY1MTAwCisJdHJpc3RhdGUgIkFNRSBEVFYtNTEwMCBVU0IyLjAgRFZCLVQgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIERWQl9VU0IKKwlzZWxlY3QgTUVESUFfVFVORVJfUVQxMDEwIGlmICFEVkJfRkVfQ1VTVE9NSVNFCisJaGVscAorCSAgU2F5IFkgaGVyZSB0byBzdXBwb3J0IHRoZSBBTUUgRFRWLTUxMDAgVVNCMi4wIERWQi1UIHJlY2VpdmVyLgorCitjb25maWcgRFZCX1VTQl9BRjkwMTUKKwl0cmlzdGF0ZSAiQWZhdGVjaCBBRjkwMTUgRFZCLVQgVVNCMi4wIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBEVkJfVVNCICYmIEVYUEVSSU1FTlRBTAorCXNlbGVjdCBEVkJfQUY5MDEzCisJc2VsZWN0IERWQl9QTEwgICAgICAgICAgICAgIGlmICFEVkJfRkVfQ1VTVE9NSVNFCisJc2VsZWN0IE1FRElBX1RVTkVSX01UMjA2MCAgIGlmICFEVkJfRkVfQ1VTVE9NSVNFCisJc2VsZWN0IE1FRElBX1RVTkVSX1FUMTAxMCAgIGlmICFEVkJfRkVfQ1VTVE9NSVNFCisJc2VsZWN0IE1FRElBX1RVTkVSX1REQTE4MjcxIGlmICFEVkJfRkVfQ1VTVE9NSVNFCisJc2VsZWN0IE1FRElBX1RVTkVSX01YTDUwMDVTIGlmICFEVkJfRkVfQ1VTVE9NSVNFCisJaGVscAorCSAgU2F5IFkgaGVyZSB0byBzdXBwb3J0IHRoZSBBZmF0ZWNoIEFGOTAxNSBiYXNlZCBEVkItVCBVU0IyLjAgcmVjZWl2ZXIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvTWFrZWZpbGUgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL01ha2VmaWxlCmluZGV4IGUyMDZmMWUuLjMxMjJiN2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9NYWtlZmlsZQpAQCAtNjcsNiArNjcsMTYgQEAKIGR2Yi11c2ItZHcyMTAyLW9ianMgPSBkdzIxMDIubwogb2JqLSQoQ09ORklHX0RWQl9VU0JfRFcyMTAyKSArPSBkdmItdXNiLWR3MjEwMi5vCiAKK2R2Yi11c2ItZHR2NTEwMC1vYmpzID0gZHR2NTEwMC5vCitvYmotJChDT05GSUdfRFZCX1VTQl9EVFY1MTAwKSArPSBkdmItdXNiLWR0djUxMDAubworCitkdmItdXNiLWFmOTAxNS1vYmpzID0gYWY5MDE1Lm8KK29iai0kKENPTkZJR19EVkJfVVNCX0FGOTAxNSkgKz0gZHZiLXVzYi1hZjkwMTUubworCitkdmItdXNiLWNpbmVyZ3lUMi1vYmpzID0gY2luZXJneVQyLWNvcmUubyBjaW5lcmd5VDItZmUubworb2JqLSQoQ09ORklHX0RWQl9VU0JfQ0lORVJHWV9UMikgKz0gZHZiLXVzYi1jaW5lcmd5VDIubworCisKIEVYVFJBX0NGTEFHUyArPSAtSWRyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlLyAtSWRyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy8KICMgZHVlIHRvIHR1bmVyLXhjMzAyOAogRVhUUkFfQ0ZMQUdTICs9IC1JZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2FmOTAwNS1yZW1vdGUuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvYWY5MDA1LXJlbW90ZS5jCmluZGV4IGZmMDBjMGUuLjdjNTk2ZjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvYWY5MDA1LXJlbW90ZS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvYWY5MDA1LXJlbW90ZS5jCkBAIC0yNSw3ICsyNSw3IEBACiAgKi8KICNpbmNsdWRlICJhZjkwMDUuaCIKIC8qIGRlYnVnICovCi1pbnQgZHZiX3VzYl9hZjkwMDVfcmVtb3RlX2RlYnVnOworc3RhdGljIGludCBkdmJfdXNiX2FmOTAwNV9yZW1vdGVfZGVidWc7CiBtb2R1bGVfcGFyYW1fbmFtZWQoZGVidWcsIGR2Yl91c2JfYWY5MDA1X3JlbW90ZV9kZWJ1ZywgaW50LCAwNjQ0KTsKIE1PRFVMRV9QQVJNX0RFU0MoZGVidWcsCiAJCSAiZW5hYmxlICgxKSBvciBkaXNhYmxlICgwKSBkZWJ1ZyBtZXNzYWdlcy4iCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2FmOTAwNS1zY3JpcHQuaCBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvYWY5MDA1LXNjcmlwdC5oCmluZGV4IDZlZWFhZTUuLjRkNjkwNDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvYWY5MDA1LXNjcmlwdC5oCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvYWY5MDA1LXNjcmlwdC5oCkBAIC0xNCw3ICsxNCw3IEBACiAJdTggdmFsOwogfSBSZWdEZXNjOwogCi1SZWdEZXNjIHNjcmlwdFtdID0geworc3RhdGljIFJlZ0Rlc2Mgc2NyaXB0W10gPSB7CiAJezB4YTE4MCwgMHgwLCAweDgsIDB4YX0sCiAJezB4YTE4MSwgMHgwLCAweDgsIDB4ZDd9LAogCXsweGExODIsIDB4MCwgMHg4LCAweGEzfSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvYWY5MDA1LmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2FmOTAwNS5jCmluZGV4IGNmZTcxZmUuLmNhNWEwYTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvYWY5MDA1LmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9hZjkwMDUuYwpAQCAtMzUsMTcgKzM1LDE3IEBACiBNT0RVTEVfUEFSTV9ERVNDKGxlZCwgImVuYWJsZSBsZWQgKGRlZmF1bHQ6IDEpLiIpOwogCiAvKiBlZXByb20gZHVtcCAqLwotaW50IGR2Yl91c2JfYWY5MDA1X2R1bXBfZWVwcm9tID0gMDsKK3N0YXRpYyBpbnQgZHZiX3VzYl9hZjkwMDVfZHVtcF9lZXByb207CiBtb2R1bGVfcGFyYW1fbmFtZWQoZHVtcF9lZXByb20sIGR2Yl91c2JfYWY5MDA1X2R1bXBfZWVwcm9tLCBpbnQsIDApOwogTU9EVUxFX1BBUk1fREVTQyhkdW1wX2VlcHJvbSwgImR1bXAgY29udGVudHMgb2YgdGhlIGVlcHJvbS4iKTsKIAogRFZCX0RFRklORV9NT0RfT1BUX0FEQVBURVJfTlIoYWRhcHRlcl9ucik7CiAKIC8qIHJlbW90ZSBjb250cm9sIGRlY29kZXIgKi8KLWludCAoKnJjX2RlY29kZSkgKHN0cnVjdCBkdmJfdXNiX2RldmljZSAqIGQsIHU4ICogZGF0YSwgaW50IGxlbiwgdTMyICogZXZlbnQsCi0JCSAgaW50ICpzdGF0ZSk7Ci12b2lkICpyY19rZXlzOwotaW50ICpyY19rZXlzX3NpemU7CitzdGF0aWMgaW50ICgqcmNfZGVjb2RlKSAoc3RydWN0IGR2Yl91c2JfZGV2aWNlICpkLCB1OCAqZGF0YSwgaW50IGxlbiwKKwkJdTMyICpldmVudCwgaW50ICpzdGF0ZSk7CitzdGF0aWMgdm9pZCAqcmNfa2V5czsKK3N0YXRpYyBpbnQgKnJjX2tleXNfc2l6ZTsKIAogdTggcmVnbWFza1s4XSA9IHsgMHgwMSwgMHgwMywgMHgwNywgMHgwZiwgMHgxZiwgMHgzZiwgMHg3ZiwgMHhmZiB9OwogCkBAIC01NCw4ICs1NCw4IEBACiAJaW50IGxlZF9zdGF0ZTsKIH07CiAKLWludCBhZjkwMDVfdXNiX2dlbmVyaWNfcncoc3RydWN0IGR2Yl91c2JfZGV2aWNlICpkLCB1OCAqIHdidWYsIHUxNiB3bGVuLAotCQkJICB1OCAqIHJidWYsIHUxNiBybGVuLCBpbnQgZGVsYXlfbXMpCitzdGF0aWMgaW50IGFmOTAwNV91c2JfZ2VuZXJpY19ydyhzdHJ1Y3QgZHZiX3VzYl9kZXZpY2UgKmQsIHU4ICp3YnVmLCB1MTYgd2xlbiwKKwkJCSAgdTggKnJidWYsIHUxNiBybGVuLCBpbnQgZGVsYXlfbXMpCiB7CiAJaW50IGFjdGxlbiwgcmV0ID0gLUVOT01FTTsKIApAQCAtOTgsMTIgKzk4LDcgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1pbnQgYWY5MDA1X3VzYl9nZW5lcmljX3dyaXRlKHN0cnVjdCBkdmJfdXNiX2RldmljZSAqZCwgdTggKiBidWYsIHUxNiBsZW4pCi17Ci0JcmV0dXJuIGFmOTAwNV91c2JfZ2VuZXJpY19ydyhkLCBidWYsIGxlbiwgTlVMTCwgMCwgMCk7Ci19Ci0KLWludCBhZjkwMDVfZ2VuZXJpY19yZWFkX3dyaXRlKHN0cnVjdCBkdmJfdXNiX2RldmljZSAqZCwgdTE2IHJlZywKK3N0YXRpYyBpbnQgYWY5MDA1X2dlbmVyaWNfcmVhZF93cml0ZShzdHJ1Y3QgZHZiX3VzYl9kZXZpY2UgKmQsIHUxNiByZWcsCiAJCQkgICAgICBpbnQgcmVhZHdyaXRlLCBpbnQgdHlwZSwgdTggKiB2YWx1ZXMsIGludCBsZW4pCiB7CiAJc3RydWN0IGFmOTAwNV9kZXZpY2Vfc3RhdGUgKnN0ID0gZC0+cHJpdjsKQEAgLTc2NSw3ICs3NjAsNyBAQAogCXJldHVybiAwOwogfQogCi1pbnQgYWY5MDA1X2Rvd25sb2FkX2Zpcm13YXJlKHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2LCBjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3KQorc3RhdGljIGludCBhZjkwMDVfZG93bmxvYWRfZmlybXdhcmUoc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYsIGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZncpCiB7CiAJaW50IGksIHBhY2tldHMsIHJldCwgYWN0X2xlbjsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9hZjkwMTUuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvYWY5MDE1LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2IwODI5YwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvYWY5MDE1LmMKQEAgLTAsMCArMSwxNDc0IEBACisvKgorICogRFZCIFVTQiBMaW51eCBkcml2ZXIgZm9yIEFmYXRlY2ggQUY5MDE1IERWQi1UIFVTQjIuMCByZWNlaXZlcgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBBbnR0aSBQYWxvc2FhcmkgPGNyb3BlQGlraS5maT4KKyAqCisgKiBUaGFua3MgdG8gQWZhdGVjaCB3aG8ga2luZGx5IHByb3ZpZGVkIGluZm9ybWF0aW9uLgorICoKKyAqICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICAgIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICoKKyAqLworCisjaW5jbHVkZSAiYWY5MDE1LmgiCisjaW5jbHVkZSAiYWY5MDEzLmgiCisjaW5jbHVkZSAibXQyMDYwLmgiCisjaW5jbHVkZSAicXQxMDEwLmgiCisjaW5jbHVkZSAidGRhMTgyNzEuaCIKKyNpbmNsdWRlICJteGw1MDA1cy5oIgorI2lmIDAKKyNpbmNsdWRlICJtYzQ0czgweC5oIgorI2VuZGlmCisKK2ludCBkdmJfdXNiX2FmOTAxNV9kZWJ1ZzsKK21vZHVsZV9wYXJhbV9uYW1lZChkZWJ1ZywgZHZiX3VzYl9hZjkwMTVfZGVidWcsIGludCwgMDY0NCk7CitNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAic2V0IGRlYnVnZ2luZyBsZXZlbCIgRFZCX1VTQl9ERUJVR19TVEFUVVMpOworaW50IGR2Yl91c2JfYWY5MDE1X3JlbW90ZTsKK21vZHVsZV9wYXJhbV9uYW1lZChyZW1vdGUsIGR2Yl91c2JfYWY5MDE1X3JlbW90ZSwgaW50LCAwNjQ0KTsKK01PRFVMRV9QQVJNX0RFU0MocmVtb3RlLCAic2VsZWN0IHJlbW90ZSIpOworaW50IGR2Yl91c2JfYWY5MDE1X2R1YWxfbW9kZTsKK21vZHVsZV9wYXJhbV9uYW1lZChkdWFsX21vZGUsIGR2Yl91c2JfYWY5MDE1X2R1YWxfbW9kZSwgaW50LCAwNjQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoZHVhbF9tb2RlLCAiZW5hYmxlIGR1YWwgbW9kZSIpOworRFZCX0RFRklORV9NT0RfT1BUX0FEQVBURVJfTlIoYWRhcHRlcl9ucik7CisKK3N0YXRpYyBERUZJTkVfTVVURVgoYWY5MDE1X3VzYl9tdXRleCk7CisKK3N0YXRpYyBzdHJ1Y3QgYWY5MDE1X2NvbmZpZyBhZjkwMTVfY29uZmlnOworc3RhdGljIHN0cnVjdCBkdmJfdXNiX2RldmljZV9wcm9wZXJ0aWVzIGFmOTAxNV9wcm9wZXJ0aWVzWzJdOworaW50IGFmOTAxNV9wcm9wZXJ0aWVzX2NvdW50ID0gQVJSQVlfU0laRShhZjkwMTVfcHJvcGVydGllcyk7CisKK3N0YXRpYyBzdHJ1Y3QgYWY5MDEzX2NvbmZpZyBhZjkwMTVfYWY5MDEzX2NvbmZpZ1tdID0geworCXsKKwkJLmRlbW9kX2FkZHJlc3MgPSBBRjkwMTVfSTJDX0RFTU9ELAorCQkub3V0cHV0X21vZGUgPSBBRjkwMTNfT1VUUFVUX01PREVfVVNCLAorCQkuYXBpX3ZlcnNpb24gPSB7IDAsIDEsIDksIDAgfSwKKwkJLmdwaW9bMF0gPSBBRjkwMTNfR1BJT19ISSwKKwkJLmdwaW9bM10gPSBBRjkwMTNfR1BJT19UVU5FUl9PTiwKKworCX0sIHsKKwkJLm91dHB1dF9tb2RlID0gQUY5MDEzX09VVFBVVF9NT0RFX1NFUklBTCwKKwkJLmFwaV92ZXJzaW9uID0geyAwLCAxLCA5LCAwIH0sCisJCS5ncGlvWzBdID0gQUY5MDEzX0dQSU9fVFVORVJfT04sCisJCS5ncGlvWzFdID0gQUY5MDEzX0dQSU9fTE8sCisJfQorfTsKKworc3RhdGljIGludCBhZjkwMTVfcndfdWRldihzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiwgc3RydWN0IHJlcV90ICpyZXEpCit7CisJaW50IGFjdF9sZW4sIHJldDsKKwl1OCBidWZbNjRdOworCXU4IHdyaXRlID0gMTsKKwl1OCBtc2dfbGVuID0gODsKKwlzdGF0aWMgdTggc2VxOyAvKiBwYWNrZXQgc2VxdWVuY2UgbnVtYmVyICovCisKKwlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZhZjkwMTVfdXNiX211dGV4KSA8IDApCisJCXJldHVybiAtRUFHQUlOOworCisJYnVmWzBdID0gcmVxLT5jbWQ7CisJYnVmWzFdID0gc2VxKys7CisJYnVmWzJdID0gcmVxLT5pMmNfYWRkcjsKKwlidWZbM10gPSByZXEtPmFkZHIgPj4gODsKKwlidWZbNF0gPSByZXEtPmFkZHIgJiAweGZmOworCWJ1Zls1XSA9IHJlcS0+bWJveDsKKwlidWZbNl0gPSByZXEtPmFkZHJfbGVuOworCWJ1Zls3XSA9IHJlcS0+ZGF0YV9sZW47CisKKwlzd2l0Y2ggKHJlcS0+Y21kKSB7CisJY2FzZSBHRVRfQ09ORklHOgorCWNhc2UgQk9PVDoKKwljYXNlIFJFQURfTUVNT1JZOgorCWNhc2UgUkVDT05ORUNUX1VTQjoKKwljYXNlIEdFVF9JUl9DT0RFOgorCQl3cml0ZSA9IDA7CisJCWJyZWFrOworCWNhc2UgUkVBRF9JMkM6CisJCXdyaXRlID0gMDsKKwkJYnVmWzJdIHw9IDB4MDE7IC8qIHNldCBJMkMgZGlyZWN0aW9uICovCisJY2FzZSBXUklURV9JMkM6CisJCWJ1ZlswXSA9IFJFQURfV1JJVEVfSTJDOworCQlicmVhazsKKwljYXNlIFdSSVRFX01FTU9SWToKKwkJaWYgKCgocmVxLT5hZGRyICYgMHhmZjAwKSA9PSAweGZmMDApIHx8CisJCSAgICAoKHJlcS0+YWRkciAmIDB4YWUwMCkgPT0gMHhhZTAwKSkKKwkJCWJ1ZlswXSA9IFdSSVRFX1ZJUlRVQUxfTUVNT1JZOworCWNhc2UgV1JJVEVfVklSVFVBTF9NRU1PUlk6CisJY2FzZSBDT1BZX0ZJUk1XQVJFOgorCWNhc2UgRE9XTkxPQURfRklSTVdBUkU6CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWVycigidW5rbm93biBjb21tYW5kOiVkIiwgcmVxLT5jbWQpOworCQlyZXQgPSAtMTsKKwkJZ290byBlcnJvcl91bmxvY2s7CisJfQorCisJLyogd3JpdGUgcmVxdWVzdGVkICovCisJaWYgKHdyaXRlKSB7CisJCW1lbWNweSgmYnVmWzhdLCByZXEtPmRhdGEsIHJlcS0+ZGF0YV9sZW4pOworCQltc2dfbGVuICs9IHJlcS0+ZGF0YV9sZW47CisJfQorCWRlYl94ZmVyKCI+Pj4gIik7CisJZGVidWdfZHVtcChidWYsIG1zZ19sZW4sIGRlYl94ZmVyKTsKKworCS8qIHNlbmQgcmVxICovCisJcmV0ID0gdXNiX2J1bGtfbXNnKHVkZXYsIHVzYl9zbmRidWxrcGlwZSh1ZGV2LCAweDAyKSwgYnVmLCBtc2dfbGVuLAorCSZhY3RfbGVuLCBBRjkwMTVfVVNCX1RJTUVPVVQpOworCWlmIChyZXQpCisJCWVycigiYnVsayBtZXNzYWdlIGZhaWxlZDolZCAoJWQvJWQpIiwgcmV0LCBtc2dfbGVuLCBhY3RfbGVuKTsKKwllbHNlCisJCWlmIChhY3RfbGVuICE9IG1zZ19sZW4pCisJCQlyZXQgPSAtMTsgLyogYWxsIGRhdGEgaXMgbm90IHNlbmQgKi8KKwlpZiAocmV0KQorCQlnb3RvIGVycm9yX3VubG9jazsKKworCS8qIG5vIGFjayBmb3IgdGhvc2UgcGFja2V0cyAqLworCWlmIChyZXEtPmNtZCA9PSBET1dOTE9BRF9GSVJNV0FSRSB8fCByZXEtPmNtZCA9PSBSRUNPTk5FQ1RfVVNCKQorCQlnb3RvIGV4aXRfdW5sb2NrOworCisJLyogcmVjZWl2ZSBhY2sgYW5kIGRhdGEgaWYgcmVhZCByZXEgKi8KKwltc2dfbGVuID0gMSArIDEgKyByZXEtPmRhdGFfbGVuOyAgLyogc2VxICsgc3RhdHVzICsgZGF0YSBsZW4gKi8KKwlyZXQgPSB1c2JfYnVsa19tc2codWRldiwgdXNiX3JjdmJ1bGtwaXBlKHVkZXYsIDB4ODEpLCBidWYsIG1zZ19sZW4sCisJCQkgICAmYWN0X2xlbiwgQUY5MDE1X1VTQl9USU1FT1VUKTsKKwlpZiAocmV0KSB7CisJCWVycigicmVjdiBidWxrIG1lc3NhZ2UgZmFpbGVkOiVkIiwgcmV0KTsKKwkJcmV0ID0gLTE7CisJCWdvdG8gZXJyb3JfdW5sb2NrOworCX0KKworCWRlYl94ZmVyKCI8PDwgIik7CisJZGVidWdfZHVtcChidWYsIGFjdF9sZW4sIGRlYl94ZmVyKTsKKworCS8qIHJlbW90ZSBjb250cm9sbGVyIHF1ZXJ5IHN0YXR1cyBpcyAxIGlmIHJlbW90ZSBjb2RlIGlzIG5vdCByZWNlaXZlZCAqLworCWlmIChyZXEtPmNtZCA9PSBHRVRfSVJfQ09ERSAmJiBidWZbMV0gPT0gMSkgeworCQlidWZbMV0gPSAwOyAvKiBjbGVhciBjb21tYW5kICJlcnJvciIgc3RhdHVzICovCisJCW1lbXNldCgmYnVmWzJdLCAwLCByZXEtPmRhdGFfbGVuKTsKKwkJYnVmWzNdID0gMTsgLyogbm8gcmVtb3RlIGNvZGUgcmVjZWl2ZWQgbWFyayAqLworCX0KKworCS8qIGNoZWNrIHN0YXR1cyAqLworCWlmIChidWZbMV0pIHsKKwkJZXJyKCJjb21tYW5kIGZhaWxlZDolZCIsIGJ1ZlsxXSk7CisJCXJldCA9IC0xOworCQlnb3RvIGVycm9yX3VubG9jazsKKwl9CisKKwkvKiByZWFkIHJlcXVlc3QsIGNvcHkgcmV0dXJuZWQgZGF0YSB0byByZXR1cm4gYnVmICovCisJaWYgKCF3cml0ZSkKKwkJbWVtY3B5KHJlcS0+ZGF0YSwgJmJ1ZlsyXSwgcmVxLT5kYXRhX2xlbik7CisKK2Vycm9yX3VubG9jazoKK2V4aXRfdW5sb2NrOgorCW11dGV4X3VubG9jaygmYWY5MDE1X3VzYl9tdXRleCk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGFmOTAxNV9jdHJsX21zZyhzdHJ1Y3QgZHZiX3VzYl9kZXZpY2UgKmQsIHN0cnVjdCByZXFfdCAqcmVxKQoreworCXJldHVybiBhZjkwMTVfcndfdWRldihkLT51ZGV2LCByZXEpOworfQorCitzdGF0aWMgaW50IGFmOTAxNV93cml0ZV9yZWdzKHN0cnVjdCBkdmJfdXNiX2RldmljZSAqZCwgdTE2IGFkZHIsIHU4ICp2YWwsCisJdTggbGVuKQoreworCXN0cnVjdCByZXFfdCByZXEgPSB7V1JJVEVfTUVNT1JZLCBBRjkwMTVfSTJDX0RFTU9ELCBhZGRyLCAwLCAwLCBsZW4sCisJCXZhbH07CisJcmV0dXJuIGFmOTAxNV9jdHJsX21zZyhkLCAmcmVxKTsKK30KKworc3RhdGljIGludCBhZjkwMTVfd3JpdGVfcmVnKHN0cnVjdCBkdmJfdXNiX2RldmljZSAqZCwgdTE2IGFkZHIsIHU4IHZhbCkKK3sKKwlyZXR1cm4gYWY5MDE1X3dyaXRlX3JlZ3MoZCwgYWRkciwgJnZhbCwgMSk7Cit9CisKK3N0YXRpYyBpbnQgYWY5MDE1X3JlYWRfcmVnKHN0cnVjdCBkdmJfdXNiX2RldmljZSAqZCwgdTE2IGFkZHIsIHU4ICp2YWwpCit7CisJc3RydWN0IHJlcV90IHJlcSA9IHtSRUFEX01FTU9SWSwgQUY5MDE1X0kyQ19ERU1PRCwgYWRkciwgMCwgMCwgMSwgdmFsfTsKKwlyZXR1cm4gYWY5MDE1X2N0cmxfbXNnKGQsICZyZXEpOworfQorCitzdGF0aWMgaW50IGFmOTAxNV93cml0ZV9yZWdfaTJjKHN0cnVjdCBkdmJfdXNiX2RldmljZSAqZCwgdTggYWRkciwgdTE2IHJlZywKKwl1OCB2YWwpCit7CisJc3RydWN0IHJlcV90IHJlcSA9IHtXUklURV9JMkMsIGFkZHIsIHJlZywgMSwgMSwgMSwgJnZhbH07CisKKwlpZiAoYWRkciA9PSBhZjkwMTVfYWY5MDEzX2NvbmZpZ1swXS5kZW1vZF9hZGRyZXNzIHx8CisJICAgIGFkZHIgPT0gYWY5MDE1X2FmOTAxM19jb25maWdbMV0uZGVtb2RfYWRkcmVzcykKKwkJcmVxLmFkZHJfbGVuID0gMzsKKworCXJldHVybiBhZjkwMTVfY3RybF9tc2coZCwgJnJlcSk7Cit9CisKK3N0YXRpYyBpbnQgYWY5MDE1X3JlYWRfcmVnX2kyYyhzdHJ1Y3QgZHZiX3VzYl9kZXZpY2UgKmQsIHU4IGFkZHIsIHUxNiByZWcsCisJdTggKnZhbCkKK3sKKwlzdHJ1Y3QgcmVxX3QgcmVxID0ge1JFQURfSTJDLCBhZGRyLCByZWcsIDAsIDEsIDEsIHZhbH07CisKKwlpZiAoYWRkciA9PSBhZjkwMTVfYWY5MDEzX2NvbmZpZ1swXS5kZW1vZF9hZGRyZXNzIHx8CisJICAgIGFkZHIgPT0gYWY5MDE1X2FmOTAxM19jb25maWdbMV0uZGVtb2RfYWRkcmVzcykKKwkJcmVxLmFkZHJfbGVuID0gMzsKKworCXJldHVybiBhZjkwMTVfY3RybF9tc2coZCwgJnJlcSk7Cit9CisKK3N0YXRpYyBpbnQgYWY5MDE1X2kyY194ZmVyKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcCwgc3RydWN0IGkyY19tc2cgbXNnW10sCisJaW50IG51bSkKK3sKKwlzdHJ1Y3QgZHZiX3VzYl9kZXZpY2UgKmQgPSBpMmNfZ2V0X2FkYXBkYXRhKGFkYXApOworCWludCByZXQgPSAwLCBpID0gMDsKKwl1MTYgYWRkcjsKKwl1OCBtYm94LCBhZGRyX2xlbjsKKwlzdHJ1Y3QgcmVxX3QgcmVxOworCisvKiBUT0RPOiBpbXBsZW1lbnQgYnVzIGxvY2sKKworVGhlIGJ1cyBsb2NrIGlzIG5lZWRlZCBiZWNhdXNlIHRoZXJlIGlzIHR3byB0dW5lcnMgYm90aCB1c2luZyBzYW1lIEkyQy1hZGRyZXNzLgorRHVlIHRvIHRoYXQgdGhlIG9ubHkgd2F5IHRvIHNlbGVjdCBjb3JyZWN0IHR1bmVyIGlzIHVzZSBkZW1vZHVsYXRvciBJMkMtZ2F0ZS4KKworLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCisuIEFGOTAxNSBpbmNsdWRlcyBpbnRlZ3JhdGVkIEFGOTAxMyBkZW1vZHVsYXRvci4KKy4gX19fX19fX19fX19fICAgICAgICAgICAgICAgICAgIF9fX19fX19fX19fXyAgLiAgICAgICAgICAgICAgICBfX19fX19fX19fX18KKy58ICAgICB1QyAgICAgfCAgICAgICAgICAgICAgICAgfCAgIGRlbW9kICAgIHwgLiAgICAgICAgICAgICAgIHwgICAgdHVuZXIgICB8CisufC0tLS0tLS0tLS0tLXwgICAgICAgICAgICAgICAgIHwtLS0tLS0tLS0tLS18IC4gICAgICAgICAgICAgICB8LS0tLS0tLS0tLS0tfAorLnwgICBBRjkwMTUgICB8ICAgICAgICAgICAgICAgICB8ICBBRjkwMTMvNSAgfCAuICAgICAgICAgICAgICAgfCAgIE1YTDUwMDMgIHwKKy58ICAgICAgICAgICAgfC0tKy0tLS1JMkMtLS0tLS0tfC0tLS0tLyAtLS0tLXwtLi0tLS0tSTJDLS0tLS0tLXwgICAgICAgICAgICB8CisufCAgICAgICAgICAgIHwgIHwgICAgICAgICAgICAgIHwgYWRkciAweDM4ICB8IC4gICAgICAgICAgICAgICB8ICBhZGRyIDB4YzYgfAorLnxfX19fX19fX19fX198ICB8ICAgICAgICAgICAgICB8X19fX19fX19fX19ffCAuICAgICAgICAgICAgICAgfF9fX19fX19fX19fX3wKKy4uLi4uLi4uLi4uLi4uLi4ufC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgorCQkgfCAgICAgICAgICAgICAgIF9fX19fX19fX19fXyAgICAgICAgICAgICAgICAgICBfX19fX19fX19fX18KKwkJIHwgICAgICAgICAgICAgIHwgICBkZW1vZCAgICB8ICAgICAgICAgICAgICAgICB8ICAgIHR1bmVyICAgfAorCQkgfCAgICAgICAgICAgICAgfC0tLS0tLS0tLS0tLXwgICAgICAgICAgICAgICAgIHwtLS0tLS0tLS0tLS18CisJCSB8ICAgICAgICAgICAgICB8ICAgQUY5MDEzICAgfCAgICAgICAgICAgICAgICAgfCAgIE1YTDUwMDMgIHwKKwkJICstLS0tSTJDLS0tLS0tLXwtLS0tLS8gLS0tLS18LS0tLS0tLUkyQy0tLS0tLS18ICAgICAgICAgICAgfAorCQkJCXwgYWRkciAweDNhICB8ICAgICAgICAgICAgICAgICB8ICBhZGRyIDB4YzYgfAorCQkJCXxfX19fX19fX19fX198ICAgICAgICAgICAgICAgICB8X19fX19fX19fX19ffAorKi8KKwlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZkLT5pMmNfbXV0ZXgpIDwgMCkKKwkJcmV0dXJuIC1FQUdBSU47CisKKwl3aGlsZSAoaSA8IG51bSkgeworCQlpZiAobXNnW2ldLmFkZHIgPT0gYWY5MDE1X2FmOTAxM19jb25maWdbMF0uZGVtb2RfYWRkcmVzcyB8fAorCQkgICAgbXNnW2ldLmFkZHIgPT0gYWY5MDE1X2FmOTAxM19jb25maWdbMV0uZGVtb2RfYWRkcmVzcykgeworCQkJYWRkciA9IG1zZ1tpXS5idWZbMF0gPDwgODsKKwkJCWFkZHIgKz0gbXNnW2ldLmJ1ZlsxXTsKKwkJCW1ib3ggPSBtc2dbaV0uYnVmWzJdOworCQkJYWRkcl9sZW4gPSAzOworCQl9IGVsc2UgeworCQkJYWRkciA9IG1zZ1tpXS5idWZbMF07CisJCQlhZGRyX2xlbiA9IDE7CisJCQltYm94ID0gMDsKKwkJfQorCisJCWlmIChudW0gPiBpICsgMSAmJiAobXNnW2krMV0uZmxhZ3MgJiBJMkNfTV9SRCkpIHsKKwkJCWlmIChtc2dbaV0uYWRkciA9PQorCQkJCWFmOTAxNV9hZjkwMTNfY29uZmlnWzBdLmRlbW9kX2FkZHJlc3MpCisJCQkJcmVxLmNtZCA9IFJFQURfTUVNT1JZOworCQkJZWxzZQorCQkJCXJlcS5jbWQgPSBSRUFEX0kyQzsKKwkJCXJlcS5pMmNfYWRkciA9IG1zZ1tpXS5hZGRyOworCQkJcmVxLmFkZHIgPSBhZGRyOworCQkJcmVxLm1ib3ggPSBtYm94OworCQkJcmVxLmFkZHJfbGVuID0gYWRkcl9sZW47CisJCQlyZXEuZGF0YV9sZW4gPSBtc2dbaSsxXS5sZW47CisJCQlyZXEuZGF0YSA9ICZtc2dbaSsxXS5idWZbMF07CisJCQlyZXQgPSBhZjkwMTVfY3RybF9tc2coZCwgJnJlcSk7CisJCQlpICs9IDI7CisJCX0gZWxzZSB7CisJCQlpZiAobXNnW2ldLmFkZHIgPT0KKwkJCQlhZjkwMTVfYWY5MDEzX2NvbmZpZ1swXS5kZW1vZF9hZGRyZXNzKQorCQkJCXJlcS5jbWQgPSBXUklURV9NRU1PUlk7CisJCQllbHNlCisJCQkJcmVxLmNtZCA9IFdSSVRFX0kyQzsKKwkJCXJlcS5pMmNfYWRkciA9IG1zZ1tpXS5hZGRyOworCQkJcmVxLmFkZHIgPSBhZGRyOworCQkJcmVxLm1ib3ggPSBtYm94OworCQkJcmVxLmFkZHJfbGVuID0gYWRkcl9sZW47CisJCQlyZXEuZGF0YV9sZW4gPSBtc2dbaV0ubGVuLWFkZHJfbGVuOworCQkJcmVxLmRhdGEgPSAmbXNnW2ldLmJ1ZlthZGRyX2xlbl07CisJCQlyZXQgPSBhZjkwMTVfY3RybF9tc2coZCwgJnJlcSk7CisJCQlpICs9IDE7CisJCX0KKwkJaWYgKHJldCkKKwkJCWdvdG8gZXJyb3I7CisKKwl9CisJcmV0ID0gaTsKKworZXJyb3I6CisJbXV0ZXhfdW5sb2NrKCZkLT5pMmNfbXV0ZXgpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHUzMiBhZjkwMTVfaTJjX2Z1bmMoc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyKQoreworCXJldHVybiBJMkNfRlVOQ19JMkM7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaTJjX2FsZ29yaXRobSBhZjkwMTVfaTJjX2FsZ28gPSB7CisJLm1hc3Rlcl94ZmVyID0gYWY5MDE1X2kyY194ZmVyLAorCS5mdW5jdGlvbmFsaXR5ID0gYWY5MDE1X2kyY19mdW5jLAorfTsKKworc3RhdGljIGludCBhZjkwMTVfZG9fcmVnX2JpdChzdHJ1Y3QgZHZiX3VzYl9kZXZpY2UgKmQsIHUxNiBhZGRyLCB1OCBiaXQsIHU4IG9wKQoreworCWludCByZXQ7CisJdTggdmFsLCBtYXNrID0gMHgwMTsKKworCXJldCA9IGFmOTAxNV9yZWFkX3JlZyhkLCBhZGRyLCAmdmFsKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJbWFzayA8PD0gYml0OworCWlmIChvcCkgeworCQkvKiBzZXQgYml0ICovCisJCXZhbCB8PSBtYXNrOworCX0gZWxzZSB7CisJCS8qIGNsZWFyIGJpdCAqLworCQltYXNrIF49IDB4ZmY7CisJCXZhbCAmPSBtYXNrOworCX0KKworCXJldHVybiBhZjkwMTVfd3JpdGVfcmVnKGQsIGFkZHIsIHZhbCk7Cit9CisKK3N0YXRpYyBpbnQgYWY5MDE1X3NldF9yZWdfYml0KHN0cnVjdCBkdmJfdXNiX2RldmljZSAqZCwgdTE2IGFkZHIsIHU4IGJpdCkKK3sKKwlyZXR1cm4gYWY5MDE1X2RvX3JlZ19iaXQoZCwgYWRkciwgYml0LCAxKTsKK30KKworc3RhdGljIGludCBhZjkwMTVfY2xlYXJfcmVnX2JpdChzdHJ1Y3QgZHZiX3VzYl9kZXZpY2UgKmQsIHUxNiBhZGRyLCB1OCBiaXQpCit7CisJcmV0dXJuIGFmOTAxNV9kb19yZWdfYml0KGQsIGFkZHIsIGJpdCwgMCk7Cit9CisKK3N0YXRpYyBpbnQgYWY5MDE1X2luaXRfZW5kcG9pbnQoc3RydWN0IGR2Yl91c2JfZGV2aWNlICpkKQoreworCWludCByZXQ7CisJdTE2IGZyYW1lX3NpemU7CisJdTggIHBhY2tldF9zaXplOworCWRlYl9pbmZvKCIlczogVVNCIHNwZWVkOiVkXG4iLCBfX2Z1bmNfXywgZC0+dWRldi0+c3BlZWQpOworCisjZGVmaW5lIFRTX1BBQ0tFVF9TSVpFICAgICAgICAgICAgMTg4CisKKyNkZWZpbmUgVFNfVVNCMjBfUEFDS0VUX0NPVU5UICAgICAzNDgKKyNkZWZpbmUgVFNfVVNCMjBfRlJBTUVfU0laRSAgICAgICAoVFNfUEFDS0VUX1NJWkUqVFNfVVNCMjBfUEFDS0VUX0NPVU5UKQorCisjZGVmaW5lIFRTX1VTQjExX1BBQ0tFVF9DT1VOVCAgICAgIDIxCisjZGVmaW5lIFRTX1VTQjExX0ZSQU1FX1NJWkUgICAgICAgKFRTX1BBQ0tFVF9TSVpFKlRTX1VTQjExX1BBQ0tFVF9DT1VOVCkKKworI2RlZmluZSBUU19VU0IyMF9NQVhfUEFDS0VUX1NJWkUgIDUxMgorI2RlZmluZSBUU19VU0IxMV9NQVhfUEFDS0VUX1NJWkUgICA2NAorCisJaWYgKGQtPnVkZXYtPnNwZWVkID09IFVTQl9TUEVFRF9GVUxMKSB7CisJCWZyYW1lX3NpemUgPSBUU19VU0IxMV9GUkFNRV9TSVpFLzQ7CisJCXBhY2tldF9zaXplID0gVFNfVVNCMTFfTUFYX1BBQ0tFVF9TSVpFLzQ7CisJfSBlbHNlIHsKKwkJZnJhbWVfc2l6ZSA9IFRTX1VTQjIwX0ZSQU1FX1NJWkUvNDsKKwkJcGFja2V0X3NpemUgPSBUU19VU0IyMF9NQVhfUEFDS0VUX1NJWkUvNDsKKwl9CisKKwlyZXQgPSBhZjkwMTVfc2V0X3JlZ19iaXQoZCwgMHhkNTA3LCAyKTsgLyogYXNzZXJ0IEVQNCByZXNldCAqLworCWlmIChyZXQpCisJCWdvdG8gZXJyb3I7CisJcmV0ID0gYWY5MDE1X3NldF9yZWdfYml0KGQsIDB4ZDUwYiwgMSk7IC8qIGFzc2VydCBFUDUgcmVzZXQgKi8KKwlpZiAocmV0KQorCQlnb3RvIGVycm9yOworCXJldCA9IGFmOTAxNV9jbGVhcl9yZWdfYml0KGQsIDB4ZGQxMSwgNSk7IC8qIGRpc2FibGUgRVA0ICovCisJaWYgKHJldCkKKwkJZ290byBlcnJvcjsKKwlyZXQgPSBhZjkwMTVfY2xlYXJfcmVnX2JpdChkLCAweGRkMTEsIDYpOyAvKiBkaXNhYmxlIEVQNSAqLworCWlmIChyZXQpCisJCWdvdG8gZXJyb3I7CisJcmV0ID0gYWY5MDE1X3NldF9yZWdfYml0KGQsIDB4ZGQxMSwgNSk7IC8qIGVuYWJsZSBFUDQgKi8KKwlpZiAocmV0KQorCQlnb3RvIGVycm9yOworCWlmIChhZjkwMTVfY29uZmlnLmR1YWxfbW9kZSkgeworCQlyZXQgPSBhZjkwMTVfc2V0X3JlZ19iaXQoZCwgMHhkZDExLCA2KTsgLyogZW5hYmxlIEVQNSAqLworCQlpZiAocmV0KQorCQkJZ290byBlcnJvcjsKKwl9CisJcmV0ID0gYWY5MDE1X2NsZWFyX3JlZ19iaXQoZCwgMHhkZDEzLCA1KTsgLyogZGlzYWJsZSBFUDQgTkFLICovCisJaWYgKHJldCkKKwkJZ290byBlcnJvcjsKKwlpZiAoYWY5MDE1X2NvbmZpZy5kdWFsX21vZGUpIHsKKwkJcmV0ID0gYWY5MDE1X2NsZWFyX3JlZ19iaXQoZCwgMHhkZDEzLCA2KTsgLyogZGlzYWJsZSBFUDUgTkFLICovCisJCWlmIChyZXQpCisJCQlnb3RvIGVycm9yOworCX0KKwkvKiBFUDQgeGZlciBsZW5ndGggKi8KKwlyZXQgPSBhZjkwMTVfd3JpdGVfcmVnKGQsIDB4ZGQ4OCwgZnJhbWVfc2l6ZSAmIDB4ZmYpOworCWlmIChyZXQpCisJCWdvdG8gZXJyb3I7CisJcmV0ID0gYWY5MDE1X3dyaXRlX3JlZyhkLCAweGRkODksIGZyYW1lX3NpemUgPj4gOCk7CisJaWYgKHJldCkKKwkJZ290byBlcnJvcjsKKwkvKiBFUDUgeGZlciBsZW5ndGggKi8KKwlyZXQgPSBhZjkwMTVfd3JpdGVfcmVnKGQsIDB4ZGQ4YSwgZnJhbWVfc2l6ZSAmIDB4ZmYpOworCWlmIChyZXQpCisJCWdvdG8gZXJyb3I7CisJcmV0ID0gYWY5MDE1X3dyaXRlX3JlZyhkLCAweGRkOGIsIGZyYW1lX3NpemUgPj4gOCk7CisJaWYgKHJldCkKKwkJZ290byBlcnJvcjsKKwlyZXQgPSBhZjkwMTVfd3JpdGVfcmVnKGQsIDB4ZGQwYywgcGFja2V0X3NpemUpOyAvKiBFUDQgcGFja2V0IHNpemUgKi8KKwlpZiAocmV0KQorCQlnb3RvIGVycm9yOworCXJldCA9IGFmOTAxNV93cml0ZV9yZWcoZCwgMHhkZDBkLCBwYWNrZXRfc2l6ZSk7IC8qIEVQNSBwYWNrZXQgc2l6ZSAqLworCWlmIChyZXQpCisJCWdvdG8gZXJyb3I7CisJcmV0ID0gYWY5MDE1X2NsZWFyX3JlZ19iaXQoZCwgMHhkNTA3LCAyKTsgLyogbmVnYXRlIEVQNCByZXNldCAqLworCWlmIChyZXQpCisJCWdvdG8gZXJyb3I7CisJaWYgKGFmOTAxNV9jb25maWcuZHVhbF9tb2RlKSB7CisJCXJldCA9IGFmOTAxNV9jbGVhcl9yZWdfYml0KGQsIDB4ZDUwYiwgMSk7IC8qIG5lZ2F0ZSBFUDUgcmVzZXQgKi8KKwkJaWYgKHJldCkKKwkJCWdvdG8gZXJyb3I7CisJfQorCisJLyogZW5hYmxlIC8gZGlzYWJsZSBtcDJpZjIgKi8KKwlpZiAoYWY5MDE1X2NvbmZpZy5kdWFsX21vZGUpCisJCXJldCA9IGFmOTAxNV9zZXRfcmVnX2JpdChkLCAweGQ1MGIsIDApOworCWVsc2UKKwkJcmV0ID0gYWY5MDE1X2NsZWFyX3JlZ19iaXQoZCwgMHhkNTBiLCAwKTsKK2Vycm9yOgorCWlmIChyZXQpCisJCWVycigiZW5kcG9pbnQgaW5pdCBmYWlsZWQ6JWQiLCByZXQpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgYWY5MDE1X2NvcHlfZmlybXdhcmUoc3RydWN0IGR2Yl91c2JfZGV2aWNlICpkKQoreworCWludCByZXQ7CisJdTggZndfcGFyYW1zWzRdOworCXU4IHZhbCwgaTsKKwlzdHJ1Y3QgcmVxX3QgcmVxID0ge0NPUFlfRklSTVdBUkUsIDAsIDB4NTEwMCwgMCwgMCwgc2l6ZW9mKGZ3X3BhcmFtcyksCisJCWZ3X3BhcmFtcyB9OworCWRlYl9pbmZvKCIlczpcbiIsIF9fZnVuY19fKTsKKworCWZ3X3BhcmFtc1swXSA9IGFmOTAxNV9jb25maWcuZmlybXdhcmVfc2l6ZSA+PiA4OworCWZ3X3BhcmFtc1sxXSA9IGFmOTAxNV9jb25maWcuZmlybXdhcmVfc2l6ZSAmIDB4ZmY7CisJZndfcGFyYW1zWzJdID0gYWY5MDE1X2NvbmZpZy5maXJtd2FyZV9jaGVja3N1bSA+PiA4OworCWZ3X3BhcmFtc1szXSA9IGFmOTAxNV9jb25maWcuZmlybXdhcmVfY2hlY2tzdW0gJiAweGZmOworCisJLyogd2FpdCAybmQgZGVtb2R1bGF0b3IgcmVhZHkgKi8KKwltc2xlZXAoMTAwKTsKKworCXJldCA9IGFmOTAxNV9yZWFkX3JlZ19pMmMoZCwgMHgzYSwgMHg5OGJlLCAmdmFsKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycm9yOworCWVsc2UKKwkJZGViX2luZm8oIiVzOiBmaXJtd2FyZSBzdGF0dXM6JTAyeFxuIiwgX19mdW5jX18sIHZhbCk7CisKKwlpZiAodmFsID09IDB4MGMpIC8qIGZ3IGlzIHJ1bm5pbmcsIG5vIG5lZWQgZm9yIGRvd25sb2FkICovCisJCWdvdG8gZXhpdDsKKworCS8qIHNldCBJMkMgbWFzdGVyIGNsb2NrIHRvIGZhc3QgKHRvIHNwZWVkIHVwIGZpcm13YXJlIGNvcHkpICovCisJcmV0ID0gYWY5MDE1X3dyaXRlX3JlZyhkLCAweGQ0MTYsIDB4MDQpOyAvKiAweDA0ICogNDAwbnMgKi8KKwlpZiAocmV0KQorCQlnb3RvIGVycm9yOworCisJbXNsZWVwKDUwKTsKKworCS8qIGNvcHkgZmlybXdhcmUgKi8KKwlyZXQgPSBhZjkwMTVfY3RybF9tc2coZCwgJnJlcSk7CisJaWYgKHJldCkKKwkJZXJyKCJmaXJtd2FyZSBjb3B5IGNtZCBmYWlsZWQ6JWQiLCByZXQpOworCWRlYl9pbmZvKCIlczogZmlybXdhcmUgY29weSBkb25lXG4iLCBfX2Z1bmNfXyk7CisKKwkvKiBzZXQgSTJDIG1hc3RlciBjbG9jayBiYWNrIHRvIG5vcm1hbCAqLworCXJldCA9IGFmOTAxNV93cml0ZV9yZWcoZCwgMHhkNDE2LCAweDE0KTsgLyogMHgxNCAqIDQwMG5zICovCisJaWYgKHJldCkKKwkJZ290byBlcnJvcjsKKworCS8qIHJlcXVlc3QgYm9vdCBmaXJtd2FyZSAqLworCXJldCA9IGFmOTAxNV93cml0ZV9yZWdfaTJjKGQsIGFmOTAxNV9hZjkwMTNfY29uZmlnWzFdLmRlbW9kX2FkZHJlc3MsCisJCTB4ZTIwNSwgMSk7CisJZGViX2luZm8oIiVzOiBmaXJtd2FyZSBib290IGNtZCBzdGF0dXM6JWRcbiIsIF9fZnVuY19fLCByZXQpOworCWlmIChyZXQpCisJCWdvdG8gZXJyb3I7CisKKwlmb3IgKGkgPSAwOyBpIDwgMTU7IGkrKykgeworCQltc2xlZXAoMTAwKTsKKworCQkvKiBjaGVjayBmaXJtd2FyZSBzdGF0dXMgKi8KKwkJcmV0ID0gYWY5MDE1X3JlYWRfcmVnX2kyYyhkLAorCQkJYWY5MDE1X2FmOTAxM19jb25maWdbMV0uZGVtb2RfYWRkcmVzcywgMHg5OGJlLCAmdmFsKTsKKwkJZGViX2luZm8oIiVzOiBmaXJtd2FyZSBzdGF0dXMgY21kIHN0YXR1czolZCBmdyBzdGF0dXM6JTAyeFxuIiwKKwkJCV9fZnVuY19fLCByZXQsIHZhbCk7CisJCWlmIChyZXQpCisJCQlnb3RvIGVycm9yOworCisJCWlmICh2YWwgPT0gMHgwYyB8fCB2YWwgPT0gMHgwNCkgLyogc3VjY2VzcyBvciBmYWlsICovCisJCQlicmVhazsKKwl9CisKKwlpZiAodmFsID09IDB4MDQpIHsKKwkJZXJyKCJmaXJtd2FyZSBkaWQgbm90IHJ1biIpOworCQlyZXQgPSAtMTsKKwl9IGVsc2UgaWYgKHZhbCAhPSAweDBjKSB7CisJCWVycigiZmlybXdhcmUgYm9vdCB0aW1lb3V0Iik7CisJCXJldCA9IC0xOworCX0KKworZXJyb3I6CitleGl0OgorCXJldHVybiByZXQ7Cit9CisKKy8qIGR1bXAgZWVwcm9tICovCitzdGF0aWMgaW50IGFmOTAxNV9lZXByb21fZHVtcChzdHJ1Y3QgZHZiX3VzYl9kZXZpY2UgKmQpCit7CisJY2hhciBidWZbNTJdLCBidWYyWzRdOworCXU4IHJlZywgdmFsOworCisJZm9yIChyZWcgPSAwOyA7IHJlZysrKSB7CisJCWlmIChyZWcgJSAxNiA9PSAwKSB7CisJCQlpZiAocmVnKQorCQkJCWRlYl9pbmZvKCIlc1xuIiwgYnVmKTsKKwkJCXNwcmludGYoYnVmLCAiJTAyeDogIiwgcmVnKTsKKwkJfQorCQlpZiAoYWY5MDE1X3JlYWRfcmVnX2kyYyhkLCBBRjkwMTVfSTJDX0VFUFJPTSwgcmVnLCAmdmFsKSA9PSAwKQorCQkJc3ByaW50ZihidWYyLCAiJTAyeCAiLCB2YWwpOworCQllbHNlCisJCQlzdHJjcHkoYnVmMiwgIi0tICIpOworCQlzdHJjYXQoYnVmLCBidWYyKTsKKwkJaWYgKHJlZyA9PSAweGZmKQorCQkJYnJlYWs7CisJfQorCWRlYl9pbmZvKCIlc1xuIiwgYnVmKTsKKwlyZXR1cm4gMDsKK30KKworaW50IGFmOTAxNV9kb3dubG9hZF9pcl90YWJsZShzdHJ1Y3QgZHZiX3VzYl9kZXZpY2UgKmQpCit7CisJaW50IGksIHBhY2tldHMgPSAwLCByZXQ7CisJdTE2IGFkZHIgPSAweDlhNTY7IC8qIGlyLXRhYmxlIHN0YXJ0IGFkZHJlc3MgKi8KKwlzdHJ1Y3QgcmVxX3QgcmVxID0ge1dSSVRFX01FTU9SWSwgMCwgMCwgMCwgMCwgMSwgTlVMTH07CisJdTggKmRhdGEgPSBOVUxMOworCWRlYl9pbmZvKCIlczpcbiIsIF9fZnVuY19fKTsKKworCWRhdGEgPSBhZjkwMTVfY29uZmlnLmlyX3RhYmxlOworCXBhY2tldHMgPSBhZjkwMTVfY29uZmlnLmlyX3RhYmxlX3NpemU7CisKKwkvKiBubyByZW1vdGUgKi8KKwlpZiAoIXBhY2tldHMpCisJCWdvdG8gZXhpdDsKKworCS8qIGxvYWQgcmVtb3RlIGlyLXRhYmxlICovCisJZm9yIChpID0gMDsgaSA8IHBhY2tldHM7IGkrKykgeworCQlyZXEuYWRkciA9IGFkZHIgKyBpOworCQlyZXEuZGF0YSA9ICZkYXRhW2ldOworCQlyZXQgPSBhZjkwMTVfY3RybF9tc2coZCwgJnJlcSk7CisJCWlmIChyZXQpIHsKKwkJCWVycigiaXItdGFibGUgZG93bmxvYWQgZmFpbGVkIGF0IHBhY2tldCAlZCB3aXRoICIgXAorCQkJCSJjb2RlICVkIiwgaSwgcmV0KTsKKwkJCXJldHVybiByZXQ7CisJCX0KKwl9CisKK2V4aXQ6CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYWY5MDE1X2luaXQoc3RydWN0IGR2Yl91c2JfZGV2aWNlICpkKQoreworCWludCByZXQ7CisJZGViX2luZm8oIiVzOlxuIiwgX19mdW5jX18pOworCisJcmV0ID0gYWY5MDE1X2luaXRfZW5kcG9pbnQoZCk7CisJaWYgKHJldCkKKwkJZ290byBlcnJvcjsKKworCXJldCA9IGFmOTAxNV9kb3dubG9hZF9pcl90YWJsZShkKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycm9yOworCitlcnJvcjoKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGFmOTAxNV9waWRfZmlsdGVyX2N0cmwoc3RydWN0IGR2Yl91c2JfYWRhcHRlciAqYWRhcCwgaW50IG9ub2ZmKQoreworCWludCByZXQ7CisJZGViX2luZm8oIiVzOiBvbm9mZjolZFxuIiwgX19mdW5jX18sIG9ub2ZmKTsKKworCWlmIChvbm9mZikKKwkJcmV0ID0gYWY5MDE1X3NldF9yZWdfYml0KGFkYXAtPmRldiwgMHhkNTAzLCAwKTsKKwllbHNlCisJCXJldCA9IGFmOTAxNV9jbGVhcl9yZWdfYml0KGFkYXAtPmRldiwgMHhkNTAzLCAwKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgYWY5MDE1X3BpZF9maWx0ZXIoc3RydWN0IGR2Yl91c2JfYWRhcHRlciAqYWRhcCwgaW50IGluZGV4LCB1MTYgcGlkLAorCWludCBvbm9mZikKK3sKKwlpbnQgcmV0OworCXU4IGlkeDsKKworCWRlYl9pbmZvKCIlczogc2V0IHBpZCBmaWx0ZXIsIGluZGV4ICVkLCBwaWQgJXgsIG9ub2ZmICVkXG4iLAorCQlfX2Z1bmNfXywgaW5kZXgsIHBpZCwgb25vZmYpOworCisJcmV0ID0gYWY5MDE1X3dyaXRlX3JlZyhhZGFwLT5kZXYsIDB4ZDUwNSwgKHBpZCAmIDB4ZmYpKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycm9yOworCisJcmV0ID0gYWY5MDE1X3dyaXRlX3JlZyhhZGFwLT5kZXYsIDB4ZDUwNiwgKHBpZCA+PiA4KSk7CisJaWYgKHJldCkKKwkJZ290byBlcnJvcjsKKworCWlkeCA9ICgoaW5kZXggJiAweDFmKSB8ICgxIDw8IDUpKTsKKwlyZXQgPSBhZjkwMTVfd3JpdGVfcmVnKGFkYXAtPmRldiwgMHhkNTA0LCBpZHgpOworCitlcnJvcjoKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGFmOTAxNV9kb3dubG9hZF9maXJtd2FyZShzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiwKKwljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3KQoreworCWludCBpLCBsZW4sIHBhY2tldHMsIHJlbWFpbmRlciwgcmV0OworCXN0cnVjdCByZXFfdCByZXEgPSB7RE9XTkxPQURfRklSTVdBUkUsIDAsIDAsIDAsIDAsIDAsIE5VTEx9OworCXUxNiBhZGRyID0gMHg1MTAwOyAvKiBmaXJtd2FyZSBzdGFydCBhZGRyZXNzICovCisJdTE2IGNoZWNrc3VtID0gMDsKKworCWRlYl9pbmZvKCIlczpcbiIsIF9fZnVuY19fKTsKKworCS8qIGNhbGMgY2hlY2tzdW0gKi8KKwlmb3IgKGkgPSAwOyBpIDwgZnctPnNpemU7IGkrKykKKwkJY2hlY2tzdW0gKz0gZnctPmRhdGFbaV07CisKKwlhZjkwMTVfY29uZmlnLmZpcm13YXJlX3NpemUgPSBmdy0+c2l6ZTsKKwlhZjkwMTVfY29uZmlnLmZpcm13YXJlX2NoZWNrc3VtID0gY2hlY2tzdW07CisKKwkjZGVmaW5lIEZXX1BBQ0tFVF9NQVhfREFUQSAgNTUKKworCXBhY2tldHMgPSBmdy0+c2l6ZSAvIEZXX1BBQ0tFVF9NQVhfREFUQTsKKwlyZW1haW5kZXIgPSBmdy0+c2l6ZSAlIEZXX1BBQ0tFVF9NQVhfREFUQTsKKwlsZW4gPSBGV19QQUNLRVRfTUFYX0RBVEE7CisJZm9yIChpID0gMDsgaSA8PSBwYWNrZXRzOyBpKyspIHsKKwkJaWYgKGkgPT0gcGFja2V0cykgIC8qIHNldCBzaXplIG9mIHRoZSBsYXN0IHBhY2tldCAqLworCQkJbGVuID0gcmVtYWluZGVyOworCisJCXJlcS5kYXRhX2xlbiA9IGxlbjsKKwkJcmVxLmRhdGEgPSAodTggKikoZnctPmRhdGEgKyBpICogRldfUEFDS0VUX01BWF9EQVRBKTsKKwkJcmVxLmFkZHIgPSBhZGRyOworCQlhZGRyICs9IEZXX1BBQ0tFVF9NQVhfREFUQTsKKworCQlyZXQgPSBhZjkwMTVfcndfdWRldih1ZGV2LCAmcmVxKTsKKwkJaWYgKHJldCkgeworCQkJZXJyKCJmaXJtd2FyZSBkb3dubG9hZCBmYWlsZWQgYXQgcGFja2V0ICVkIHdpdGggIiBcCisJCQkJImNvZGUgJWQiLCBpLCByZXQpOworCQkJZ290byBlcnJvcjsKKwkJfQorCX0KKworCS8qIGZpcm13YXJlIGxvYWRlZCwgcmVxdWVzdCBib290ICovCisJcmVxLmNtZCA9IEJPT1Q7CisJcmV0ID0gYWY5MDE1X3J3X3VkZXYodWRldiwgJnJlcSk7CisJaWYgKHJldCkgeworCQllcnIoImZpcm13YXJlIGJvb3QgZmFpbGVkOiVkIiwgcmV0KTsKKwkJZ290byBlcnJvcjsKKwl9CisKKwkvKiBmaXJtd2FyZSBpcyBydW5uaW5nLCByZWNvbm5lY3QgZGV2aWNlIGluIHRoZSB1c2IgYnVzICovCisJcmVxLmNtZCA9IFJFQ09OTkVDVF9VU0I7CisJcmV0ID0gYWY5MDE1X3J3X3VkZXYodWRldiwgJnJlcSk7CisJaWYgKHJldCkKKwkJZXJyKCJyZWNvbm5lY3QgZmFpbGVkOiAlZCIsIHJldCk7CisKK2Vycm9yOgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgYWY5MDE1X3JlYWRfY29uZmlnKHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2KQoreworCWludCByZXQ7CisJdTggdmFsLCBpLCBvZmZzZXQgPSAwOworCXN0cnVjdCByZXFfdCByZXEgPSB7UkVBRF9JMkMsIEFGOTAxNV9JMkNfRUVQUk9NLCAwLCAwLCAxLCAxLCAmdmFsfTsKKwljaGFyIG1hbnVmYWN0dXJlclsxMF07CisKKwkvKiBJUiByZW1vdGUgY29udHJvbGxlciAqLworCXJlcS5hZGRyID0gQUY5MDE1X0VFUFJPTV9JUl9NT0RFOworCXJldCA9IGFmOTAxNV9yd191ZGV2KHVkZXYsICZyZXEpOworCWlmIChyZXQpCisJCWdvdG8gZXJyb3I7CisJZGViX2luZm8oIiVzOiBJUiBtb2RlOiVkXG4iLCBfX2Z1bmNfXywgdmFsKTsKKwlmb3IgKGkgPSAwOyBpIDwgYWY5MDE1X3Byb3BlcnRpZXNfY291bnQ7IGkrKykgeworCQlpZiAodmFsID09IEFGOTAxNV9JUl9NT0RFX0RJU0FCTEVEIHx8IHZhbCA9PSAweDA0KSB7CisJCQlhZjkwMTVfcHJvcGVydGllc1tpXS5yY19rZXlfbWFwID0gTlVMTDsKKwkJCWFmOTAxNV9wcm9wZXJ0aWVzW2ldLnJjX2tleV9tYXBfc2l6ZSAgPSAwOworCQl9IGVsc2UgaWYgKGR2Yl91c2JfYWY5MDE1X3JlbW90ZSkgeworCQkJLyogbG9hZCByZW1vdGUgZGVmaW5lZCBhcyBtb2R1bGUgcGFyYW0gKi8KKwkJCXN3aXRjaCAoZHZiX3VzYl9hZjkwMTVfcmVtb3RlKSB7CisJCQljYXNlIEFGOTAxNV9SRU1PVEVfQV9MSU5LX0RUVV9NOgorCQkJCWFmOTAxNV9wcm9wZXJ0aWVzW2ldLnJjX2tleV9tYXAgPQorCQkJCSAgYWY5MDE1X3JjX2tleXNfYV9saW5rOworCQkJCWFmOTAxNV9wcm9wZXJ0aWVzW2ldLnJjX2tleV9tYXBfc2l6ZSA9CisJCQkJICBBUlJBWV9TSVpFKGFmOTAxNV9yY19rZXlzX2FfbGluayk7CisJCQkJYWY5MDE1X2NvbmZpZy5pcl90YWJsZSA9IGFmOTAxNV9pcl90YWJsZV9hX2xpbms7CisJCQkJYWY5MDE1X2NvbmZpZy5pcl90YWJsZV9zaXplID0KKwkJCQkgIEFSUkFZX1NJWkUoYWY5MDE1X2lyX3RhYmxlX2FfbGluayk7CisJCQkJYnJlYWs7CisJCQljYXNlIEFGOTAxNV9SRU1PVEVfTVNJX0RJR0lWT1hfTUlOSV9JSV9WMzoKKwkJCQlhZjkwMTVfcHJvcGVydGllc1tpXS5yY19rZXlfbWFwID0KKwkJCQkgIGFmOTAxNV9yY19rZXlzX21zaTsKKwkJCQlhZjkwMTVfcHJvcGVydGllc1tpXS5yY19rZXlfbWFwX3NpemUgPQorCQkJCSAgQVJSQVlfU0laRShhZjkwMTVfcmNfa2V5c19tc2kpOworCQkJCWFmOTAxNV9jb25maWcuaXJfdGFibGUgPSBhZjkwMTVfaXJfdGFibGVfbXNpOworCQkJCWFmOTAxNV9jb25maWcuaXJfdGFibGVfc2l6ZSA9CisJCQkJICBBUlJBWV9TSVpFKGFmOTAxNV9pcl90YWJsZV9tc2kpOworCQkJCWJyZWFrOworCQkJY2FzZSBBRjkwMTVfUkVNT1RFX01ZR0lDVFZfVTcxODoKKwkJCQlhZjkwMTVfcHJvcGVydGllc1tpXS5yY19rZXlfbWFwID0KKwkJCQkgIGFmOTAxNV9yY19rZXlzX215Z2ljdHY7CisJCQkJYWY5MDE1X3Byb3BlcnRpZXNbaV0ucmNfa2V5X21hcF9zaXplID0KKwkJCQkgIEFSUkFZX1NJWkUoYWY5MDE1X3JjX2tleXNfbXlnaWN0dik7CisJCQkJYWY5MDE1X2NvbmZpZy5pcl90YWJsZSA9CisJCQkJICBhZjkwMTVfaXJfdGFibGVfbXlnaWN0djsKKwkJCQlhZjkwMTVfY29uZmlnLmlyX3RhYmxlX3NpemUgPQorCQkJCSAgQVJSQVlfU0laRShhZjkwMTVfaXJfdGFibGVfbXlnaWN0dik7CisJCQkJYnJlYWs7CisJCQl9CisJCX0gZWxzZSB7CisJCQlzd2l0Y2ggKHVkZXYtPmRlc2NyaXB0b3IuaWRWZW5kb3IpIHsKKwkJCWNhc2UgVVNCX1ZJRF9MRUFEVEVLOgorCQkJCWFmOTAxNV9wcm9wZXJ0aWVzW2ldLnJjX2tleV9tYXAgPQorCQkJCSAgYWY5MDE1X3JjX2tleXNfbGVhZHRlazsKKwkJCQlhZjkwMTVfcHJvcGVydGllc1tpXS5yY19rZXlfbWFwX3NpemUgPQorCQkJCSAgQVJSQVlfU0laRShhZjkwMTVfcmNfa2V5c19sZWFkdGVrKTsKKwkJCQlhZjkwMTVfY29uZmlnLmlyX3RhYmxlID0KKwkJCQkgIGFmOTAxNV9pcl90YWJsZV9sZWFkdGVrOworCQkJCWFmOTAxNV9jb25maWcuaXJfdGFibGVfc2l6ZSA9CisJCQkJICBBUlJBWV9TSVpFKGFmOTAxNV9pcl90YWJsZV9sZWFkdGVrKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgVVNCX1ZJRF9WSVNJT05QTFVTOgorCQkJCWlmICh1ZGV2LT5kZXNjcmlwdG9yLmlkUHJvZHVjdCA9PQorCQkJCVVTQl9QSURfQVpVUkVXQVZFX0FEX1RVNzAwKSB7CisJCQkJCWFmOTAxNV9wcm9wZXJ0aWVzW2ldLnJjX2tleV9tYXAgPQorCQkJCQkgIGFmOTAxNV9yY19rZXlzX3R3aW5oYW47CisJCQkJCWFmOTAxNV9wcm9wZXJ0aWVzW2ldLnJjX2tleV9tYXBfc2l6ZSA9CisJCQkJCSAgQVJSQVlfU0laRShhZjkwMTVfcmNfa2V5c190d2luaGFuKTsKKwkJCQkJYWY5MDE1X2NvbmZpZy5pcl90YWJsZSA9CisJCQkJCSAgYWY5MDE1X2lyX3RhYmxlX3R3aW5oYW47CisJCQkJCWFmOTAxNV9jb25maWcuaXJfdGFibGVfc2l6ZSA9CisJCQkJCSAgQVJSQVlfU0laRShhZjkwMTVfaXJfdGFibGVfdHdpbmhhbik7CisJCQkJfQorCQkJCWJyZWFrOworCQkJY2FzZSBVU0JfVklEX0tXT1JMRF8yOgorCQkJCS8qIFRPRE86IHVzZSBjb3JyZWN0IHJjIGtleXMgKi8KKwkJCQlhZjkwMTVfcHJvcGVydGllc1tpXS5yY19rZXlfbWFwID0KKwkJCQkgIGFmOTAxNV9yY19rZXlzX3R3aW5oYW47CisJCQkJYWY5MDE1X3Byb3BlcnRpZXNbaV0ucmNfa2V5X21hcF9zaXplID0KKwkJCQkgIEFSUkFZX1NJWkUoYWY5MDE1X3JjX2tleXNfdHdpbmhhbik7CisJCQkJYWY5MDE1X2NvbmZpZy5pcl90YWJsZSA9IGFmOTAxNV9pcl90YWJsZV9rd29ybGQ7CisJCQkJYWY5MDE1X2NvbmZpZy5pcl90YWJsZV9zaXplID0KKwkJCQkgIEFSUkFZX1NJWkUoYWY5MDE1X2lyX3RhYmxlX2t3b3JsZCk7CisJCQkJYnJlYWs7CisJCQkvKiBDaGVjayBVU0IgbWFudWZhY3R1cmVyIGFuZCBwcm9kdWN0IHN0cmluZ3MgYW5kIHRyeQorCQkJICAgdG8gZGV0ZXJtaW5lIGNvcnJlY3QgcmVtb3RlIGluIGNhc2Ugb2YgY2hpcCB2ZW5kb3IKKwkJCSAgIHJlZmVyZW5jZSBJRHMgYXJlIHVzZWQuICovCisJCQljYXNlIFVTQl9WSURfQUZBVEVDSDoKKwkJCQltZW1zZXQobWFudWZhY3R1cmVyLCAwLCBzaXplb2YobWFudWZhY3R1cmVyKSk7CisJCQkJdXNiX3N0cmluZyh1ZGV2LCB1ZGV2LT5kZXNjcmlwdG9yLmlNYW51ZmFjdHVyZXIsCisJCQkJCW1hbnVmYWN0dXJlciwgc2l6ZW9mKG1hbnVmYWN0dXJlcikpOworCQkJCWlmICghc3RyY21wKCJHZW5pYXRlY2giLCBtYW51ZmFjdHVyZXIpKSB7CisJCQkJCS8qIGlNYW51ZmFjdHVyZXIgMSBHZW5pYXRlY2gKKwkJCQkJICAgaVByb2R1Y3QgICAgICAyIEFGOTAxNSAqLworCQkJCQlhZjkwMTVfcHJvcGVydGllc1tpXS5yY19rZXlfbWFwID0KKwkJCQkJICBhZjkwMTVfcmNfa2V5c19teWdpY3R2OworCQkJCQlhZjkwMTVfcHJvcGVydGllc1tpXS5yY19rZXlfbWFwX3NpemUgPQorCQkJCQkgIEFSUkFZX1NJWkUoYWY5MDE1X3JjX2tleXNfbXlnaWN0dik7CisJCQkJCWFmOTAxNV9jb25maWcuaXJfdGFibGUgPQorCQkJCQkgIGFmOTAxNV9pcl90YWJsZV9teWdpY3R2OworCQkJCQlhZjkwMTVfY29uZmlnLmlyX3RhYmxlX3NpemUgPQorCQkJCQkgIEFSUkFZX1NJWkUoYWY5MDE1X2lyX3RhYmxlX215Z2ljdHYpOworCQkJCX0gZWxzZSBpZiAoIXN0cmNtcCgiTVNJIiwgbWFudWZhY3R1cmVyKSkgeworCQkJCQkvKiBpTWFudWZhY3R1cmVyIDEgTVNJCisJCQkJCSAgIGlQcm9kdWN0ICAgICAgMiBNU0kgSy1WT1ggKi8KKwkJCQkJYWY5MDE1X3Byb3BlcnRpZXNbaV0ucmNfa2V5X21hcCA9CisJCQkJCSAgYWY5MDE1X3JjX2tleXNfbXNpOworCQkJCQlhZjkwMTVfcHJvcGVydGllc1tpXS5yY19rZXlfbWFwX3NpemUgPQorCQkJCQkgIEFSUkFZX1NJWkUoYWY5MDE1X3JjX2tleXNfbXNpKTsKKwkJCQkJYWY5MDE1X2NvbmZpZy5pcl90YWJsZSA9CisJCQkJCSAgYWY5MDE1X2lyX3RhYmxlX21zaTsKKwkJCQkJYWY5MDE1X2NvbmZpZy5pcl90YWJsZV9zaXplID0KKwkJCQkJICBBUlJBWV9TSVpFKGFmOTAxNV9pcl90YWJsZV9tc2kpOworCQkJCX0KKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCX0KKworCS8qIFRTIG1vZGUgLSBvbmUgb3IgdHdvIHJlY2VpdmVycyAqLworCXJlcS5hZGRyID0gQUY5MDE1X0VFUFJPTV9UU19NT0RFOworCXJldCA9IGFmOTAxNV9yd191ZGV2KHVkZXYsICZyZXEpOworCWlmIChyZXQpCisJCWdvdG8gZXJyb3I7CisJYWY5MDE1X2NvbmZpZy5kdWFsX21vZGUgPSB2YWw7CisJZGViX2luZm8oIiVzOiBUUyBtb2RlOiVkXG4iLCBfX2Z1bmNfXywgYWY5MDE1X2NvbmZpZy5kdWFsX21vZGUpOworCS8qIGRpc2FibGUgZHVhbCBtb2RlIGJ5IGRlZmF1bHQgYmVjYXVzZSBpdCBpcyBidWdneSAqLworCWlmICghZHZiX3VzYl9hZjkwMTVfZHVhbF9tb2RlKQorCQlhZjkwMTVfY29uZmlnLmR1YWxfbW9kZSA9IDA7CisKKwkvKiBzZXQgYnVmZmVyIHNpemUgYWNjb3JkaW5nIHRvIFVTQiBwb3J0IHNwZWVkICovCisJZm9yIChpID0gMDsgaSA8IGFmOTAxNV9wcm9wZXJ0aWVzX2NvdW50OyBpKyspIHsKKwkJLyogVVNCMS4xIHNldCBzbWFsbGVyIGJ1ZmZlcnNpemUgYW5kIGRpc2FibGUgMm5kIGFkYXB0ZXIgKi8KKwkJaWYgKHVkZXYtPnNwZWVkID09IFVTQl9TUEVFRF9GVUxMKSB7CisJCQlhZjkwMTVfcHJvcGVydGllc1tpXS5hZGFwdGVyLT5zdHJlYW0udS5idWxrLmJ1ZmZlcnNpemUgPQorCQkJCVRTX1VTQjExX01BWF9QQUNLRVRfU0laRTsKKwkJCS8qIGRpc2FibGUgMm5kIGFkYXB0ZXIgYmVjYXVzZSB3ZSBkb24ndCBoYXZlCisJCQkgICBQSUQtZmlsdGVycyAqLworCQkJYWY5MDE1X2NvbmZpZy5kdWFsX21vZGUgPSAwOworCQl9IGVsc2UgeworCQkJYWY5MDE1X3Byb3BlcnRpZXNbaV0uYWRhcHRlci0+c3RyZWFtLnUuYnVsay5idWZmZXJzaXplID0KKwkJCQlUU19VU0IyMF9NQVhfUEFDS0VUX1NJWkU7CisJCX0KKwl9CisKKwlpZiAoYWY5MDE1X2NvbmZpZy5kdWFsX21vZGUpIHsKKwkJLyogcmVhZCAybmQgZGVtb2R1bGF0b3IgSTJDIGFkZHJlc3MgKi8KKwkJcmVxLmFkZHIgPSBBRjkwMTVfRUVQUk9NX0RFTU9EMl9JMkM7CisJCXJldCA9IGFmOTAxNV9yd191ZGV2KHVkZXYsICZyZXEpOworCQlpZiAocmV0KQorCQkJZ290byBlcnJvcjsKKwkJYWY5MDE1X2FmOTAxM19jb25maWdbMV0uZGVtb2RfYWRkcmVzcyA9IHZhbDsKKworCQkvKiBlbmFibGUgMm5kIGFkYXB0ZXIgKi8KKwkJZm9yIChpID0gMDsgaSA8IGFmOTAxNV9wcm9wZXJ0aWVzX2NvdW50OyBpKyspCisJCQlhZjkwMTVfcHJvcGVydGllc1tpXS5udW1fYWRhcHRlcnMgPSAyOworCisJfSBlbHNlIHsKKwkJIC8qIGRpc2FibGUgMm5kIGFkYXB0ZXIgKi8KKwkJZm9yIChpID0gMDsgaSA8IGFmOTAxNV9wcm9wZXJ0aWVzX2NvdW50OyBpKyspCisJCQlhZjkwMTVfcHJvcGVydGllc1tpXS5udW1fYWRhcHRlcnMgPSAxOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBhZjkwMTVfcHJvcGVydGllc1swXS5udW1fYWRhcHRlcnM7IGkrKykgeworCQlpZiAoaSA9PSAxKQorCQkJb2Zmc2V0ID0gQUY5MDE1X0VFUFJPTV9PRkZTRVQ7CisJCS8qIHh0YWwgKi8KKwkJcmVxLmFkZHIgPSBBRjkwMTVfRUVQUk9NX1hUQUxfVFlQRTEgKyBvZmZzZXQ7CisJCXJldCA9IGFmOTAxNV9yd191ZGV2KHVkZXYsICZyZXEpOworCQlpZiAocmV0KQorCQkJZ290byBlcnJvcjsKKwkJc3dpdGNoICh2YWwpIHsKKwkJY2FzZSAwOgorCQkJYWY5MDE1X2FmOTAxM19jb25maWdbaV0uYWRjX2Nsb2NrID0gMjg4MDA7CisJCQlicmVhazsKKwkJY2FzZSAxOgorCQkJYWY5MDE1X2FmOTAxM19jb25maWdbaV0uYWRjX2Nsb2NrID0gMjA0ODA7CisJCQlicmVhazsKKwkJY2FzZSAyOgorCQkJYWY5MDE1X2FmOTAxM19jb25maWdbaV0uYWRjX2Nsb2NrID0gMjgwMDA7CisJCQlicmVhazsKKwkJY2FzZSAzOgorCQkJYWY5MDE1X2FmOTAxM19jb25maWdbaV0uYWRjX2Nsb2NrID0gMjUwMDA7CisJCQlicmVhazsKKwkJfTsKKwkJZGViX2luZm8oIiVzOiBbJWRdIHh0YWw6JWQgc2V0IGFkY19jbG9jazolZFxuIiwgX19mdW5jX18sIGksCisJCQl2YWwsIGFmOTAxNV9hZjkwMTNfY29uZmlnW2ldLmFkY19jbG9jayk7CisKKwkJLyogdHVuZXIgSUYgKi8KKwkJcmVxLmFkZHIgPSBBRjkwMTVfRUVQUk9NX0lGMUggKyBvZmZzZXQ7CisJCXJldCA9IGFmOTAxNV9yd191ZGV2KHVkZXYsICZyZXEpOworCQlpZiAocmV0KQorCQkJZ290byBlcnJvcjsKKwkJYWY5MDE1X2FmOTAxM19jb25maWdbaV0udHVuZXJfaWYgPSB2YWwgPDwgODsKKwkJcmVxLmFkZHIgPSBBRjkwMTVfRUVQUk9NX0lGMUwgKyBvZmZzZXQ7CisJCXJldCA9IGFmOTAxNV9yd191ZGV2KHVkZXYsICZyZXEpOworCQlpZiAocmV0KQorCQkJZ290byBlcnJvcjsKKwkJYWY5MDE1X2FmOTAxM19jb25maWdbaV0udHVuZXJfaWYgKz0gdmFsOworCQlkZWJfaW5mbygiJXM6IFslZF0gSUYxOiVkXG4iLCBfX2Z1bmNfXywgaSwKKwkJCWFmOTAxNV9hZjkwMTNfY29uZmlnWzBdLnR1bmVyX2lmKTsKKworCQkvKiBNVDIwNjAgSUYxICovCisJCXJlcS5hZGRyID0gQUY5MDE1X0VFUFJPTV9NVDIwNjBfSUYxSCAgKyBvZmZzZXQ7CisJCXJldCA9IGFmOTAxNV9yd191ZGV2KHVkZXYsICZyZXEpOworCQlpZiAocmV0KQorCQkJZ290byBlcnJvcjsKKwkJYWY5MDE1X2NvbmZpZy5tdDIwNjBfaWYxW2ldID0gdmFsIDw8IDg7CisJCXJlcS5hZGRyID0gQUY5MDE1X0VFUFJPTV9NVDIwNjBfSUYxTCArIG9mZnNldDsKKwkJcmV0ID0gYWY5MDE1X3J3X3VkZXYodWRldiwgJnJlcSk7CisJCWlmIChyZXQpCisJCQlnb3RvIGVycm9yOworCQlhZjkwMTVfY29uZmlnLm10MjA2MF9pZjFbaV0gKz0gdmFsOworCQlkZWJfaW5mbygiJXM6IFslZF0gTVQyMDYwIElGMTolZFxuIiwgX19mdW5jX18sIGksCisJCQlhZjkwMTVfY29uZmlnLm10MjA2MF9pZjFbaV0pOworCisJCS8qIHR1bmVyICovCisJCXJlcS5hZGRyID0gIEFGOTAxNV9FRVBST01fVFVORVJfSUQxICsgb2Zmc2V0OworCQlyZXQgPSBhZjkwMTVfcndfdWRldih1ZGV2LCAmcmVxKTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gZXJyb3I7CisJCXN3aXRjaCAodmFsKSB7CisJCWNhc2UgQUY5MDEzX1RVTkVSX0VOVjc3SDExRDU6CisJCWNhc2UgQUY5MDEzX1RVTkVSX01UMjA2MDoKKwkJY2FzZSBBRjkwMTNfVFVORVJfTUM0NFM4MDM6CisJCWNhc2UgQUY5MDEzX1RVTkVSX1FUMTAxMDoKKwkJY2FzZSBBRjkwMTNfVFVORVJfVU5LTk9XTjoKKwkJY2FzZSBBRjkwMTNfVFVORVJfTVQyMDYwXzI6CisJCWNhc2UgQUY5MDEzX1RVTkVSX1REQTE4MjcxOgorCQljYXNlIEFGOTAxM19UVU5FUl9RVDEwMTBBOgorCQkJYWY5MDE1X2FmOTAxM19jb25maWdbaV0ucmZfc3BlY19pbnYgPSAxOworCQkJYnJlYWs7CisJCWNhc2UgQUY5MDEzX1RVTkVSX01YTDUwMDNEOgorCQljYXNlIEFGOTAxM19UVU5FUl9NWEw1MDA1RDoKKwkJY2FzZSBBRjkwMTNfVFVORVJfTVhMNTAwNVI6CisJCQlhZjkwMTVfYWY5MDEzX2NvbmZpZ1tpXS5yZl9zcGVjX2ludiA9IDA7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXdhcm4oInR1bmVyIGlkOiVkIG5vdCBzdXBwb3J0ZWQsIHBsZWFzZSByZXBvcnQhIiwgdmFsKTsKKwkJCXJldHVybiAtRU5PREVWOworCQl9OworCisJCWFmOTAxNV9hZjkwMTNfY29uZmlnW2ldLnR1bmVyID0gdmFsOworCQlkZWJfaW5mbygiJXM6IFslZF0gdHVuZXIgaWQ6JWRcbiIsIF9fZnVuY19fLCBpLCB2YWwpOworCX0KKworZXJyb3I6CisJaWYgKHJldCkKKwkJZXJyKCJlZXByb20gcmVhZCBmYWlsZWQ6JWQiLCByZXQpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBhZjkwMTVfaWRlbnRpZnlfc3RhdGUoc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYsCisJCQkJIHN0cnVjdCBkdmJfdXNiX2RldmljZV9wcm9wZXJ0aWVzICpwcm9wcywKKwkJCQkgc3RydWN0IGR2Yl91c2JfZGV2aWNlX2Rlc2NyaXB0aW9uICoqZGVzYywKKwkJCQkgaW50ICpjb2xkKQoreworCWludCByZXQ7CisJdTggcmVwbHk7CisJc3RydWN0IHJlcV90IHJlcSA9IHtHRVRfQ09ORklHLCAwLCAwLCAwLCAwLCAxLCAmcmVwbHl9OworCisJcmV0ID0gYWY5MDE1X3J3X3VkZXYodWRldiwgJnJlcSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCWRlYl9pbmZvKCIlczogcmVwbHk6JTAyeFxuIiwgX19mdW5jX18sIHJlcGx5KTsKKwlpZiAocmVwbHkgPT0gMHgwMikKKwkJKmNvbGQgPSAwOworCWVsc2UKKwkJKmNvbGQgPSAxOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBhZjkwMTVfcmNfcXVlcnkoc3RydWN0IGR2Yl91c2JfZGV2aWNlICpkLCB1MzIgKmV2ZW50LCBpbnQgKnN0YXRlKQoreworCXU4IGJ1Zls4XTsKKwlzdHJ1Y3QgcmVxX3QgcmVxID0ge0dFVF9JUl9DT0RFLCAwLCAwLCAwLCAwLCBzaXplb2YoYnVmKSwgYnVmfTsKKwlzdHJ1Y3QgZHZiX3VzYl9yY19rZXkgKmtleW1hcCA9IGQtPnByb3BzLnJjX2tleV9tYXA7CisJaW50IGksIHJldDsKKworCW1lbXNldChidWYsIDAsIHNpemVvZihidWYpKTsKKworCXJldCA9IGFmOTAxNV9jdHJsX21zZyhkLCAmcmVxKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJKmV2ZW50ID0gMDsKKwkqc3RhdGUgPSBSRU1PVEVfTk9fS0VZX1BSRVNTRUQ7CisKKwlmb3IgKGkgPSAwOyBpIDwgZC0+cHJvcHMucmNfa2V5X21hcF9zaXplOyBpKyspIHsKKwkJaWYgKCFidWZbMV0gJiYga2V5bWFwW2ldLmN1c3RvbSA9PSBidWZbMF0gJiYKKwkJICAgIGtleW1hcFtpXS5kYXRhID09IGJ1ZlsyXSkgeworCQkJKmV2ZW50ID0ga2V5bWFwW2ldLmV2ZW50OworCQkJKnN0YXRlID0gUkVNT1RFX0tFWV9QUkVTU0VEOworCQkJYnJlYWs7CisJCX0KKwl9CisJaWYgKCFidWZbMV0pCisJCWRlYl9yYygiJXM6ICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeFxuIiwKKwkJCV9fZnVuY19fLCBidWZbMF0sIGJ1ZlsxXSwgYnVmWzJdLCBidWZbM10sIGJ1Zls0XSwKKwkJCWJ1Zls1XSwgYnVmWzZdLCBidWZbN10pOworCisJcmV0dXJuIDA7Cit9CisKKy8qIGluaXQgMm5kIEkyQyBhZGFwdGVyICovCitpbnQgYWY5MDE1X2kyY19pbml0KHN0cnVjdCBkdmJfdXNiX2RldmljZSAqZCkKK3sKKwlpbnQgcmV0OworCXN0cnVjdCBhZjkwMTVfc3RhdGUgKnN0YXRlID0gZC0+cHJpdjsKKwlkZWJfaW5mbygiJXM6XG4iLCBfX2Z1bmNfXyk7CisKKwlzdHJuY3B5KHN0YXRlLT5pMmNfYWRhcC5uYW1lLCBkLT5kZXNjLT5uYW1lLAorCQlzaXplb2Yoc3RhdGUtPmkyY19hZGFwLm5hbWUpKTsKKyNpZmRlZiBJMkNfQURBUF9DTEFTU19UVl9ESUdJVEFMCisJc3RhdGUtPmkyY19hZGFwLmNsYXNzID0gSTJDX0FEQVBfQ0xBU1NfVFZfRElHSVRBTCwKKyNlbHNlCisJc3RhdGUtPmkyY19hZGFwLmNsYXNzID0gSTJDX0NMQVNTX1RWX0RJR0lUQUwsCisjZW5kaWYKKwlzdGF0ZS0+aTJjX2FkYXAuYWxnbyAgICAgID0gZC0+cHJvcHMuaTJjX2FsZ287CisJc3RhdGUtPmkyY19hZGFwLmFsZ29fZGF0YSA9IE5VTEw7CisJc3RhdGUtPmkyY19hZGFwLmRldi5wYXJlbnQgPSAmZC0+dWRldi0+ZGV2OworCisJaTJjX3NldF9hZGFwZGF0YSgmc3RhdGUtPmkyY19hZGFwLCBkKTsKKworCXJldCA9IGkyY19hZGRfYWRhcHRlcigmc3RhdGUtPmkyY19hZGFwKTsKKwlpZiAocmV0IDwgMCkKKwkJZXJyKCJjb3VsZCBub3QgYWRkIGkyYyBhZGFwdGVyIik7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGFmOTAxNV9hZjkwMTNfZnJvbnRlbmRfYXR0YWNoKHN0cnVjdCBkdmJfdXNiX2FkYXB0ZXIgKmFkYXApCit7CisJaW50IHJldDsKKwlzdHJ1Y3QgYWY5MDE1X3N0YXRlICpzdGF0ZSA9IGFkYXAtPmRldi0+cHJpdjsKKwlzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyY19hZGFwOworCisJaWYgKGFkYXAtPmlkID09IDApIHsKKwkJLyogc2VsZWN0IEkyQyBhZGFwdGVyICovCisJCWkyY19hZGFwID0gJmFkYXAtPmRldi0+aTJjX2FkYXA7CisKKwkJZGViX2luZm8oIiVzOiBpbml0IEkyQ1xuIiwgX19mdW5jX18pOworCQlyZXQgPSBhZjkwMTVfaTJjX2luaXQoYWRhcC0+ZGV2KTsKKworCQkvKiBkdW1wIGVlcHJvbSAoZGVidWcpICovCisJCXJldCA9IGFmOTAxNV9lZXByb21fZHVtcChhZGFwLT5kZXYpOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKwl9IGVsc2UgeworCQkvKiBzZWxlY3QgSTJDIGFkYXB0ZXIgKi8KKwkJaTJjX2FkYXAgPSAmc3RhdGUtPmkyY19hZGFwOworCisJCS8qIGNvcHkgZmlybXdhcmUgdG8gMm5kIGRlbW9kdWxhdG9yICovCisJCWlmIChhZjkwMTVfY29uZmlnLmR1YWxfbW9kZSkgeworCQkJcmV0ID0gYWY5MDE1X2NvcHlfZmlybXdhcmUoYWRhcC0+ZGV2KTsKKwkJCWlmIChyZXQpIHsKKwkJCQllcnIoImZpcm13YXJlIGNvcHkgdG8gMm5kIGZyb250ZW5kICIgXAorCQkJCQkiZmFpbGVkLCB3aWxsIGRpc2FibGUgaXQiKTsKKwkJCQlhZjkwMTVfY29uZmlnLmR1YWxfbW9kZSA9IDA7CisJCQkJcmV0dXJuIC1FTk9ERVY7CisJCQl9CisJCX0gZWxzZSB7CisJCQlyZXR1cm4gLUVOT0RFVjsKKwkJfQorCX0KKworCS8qIGF0dGFjaCBkZW1vZHVsYXRvciAqLworCWFkYXAtPmZlID0gZHZiX2F0dGFjaChhZjkwMTNfYXR0YWNoLCAmYWY5MDE1X2FmOTAxM19jb25maWdbYWRhcC0+aWRdLAorCQlpMmNfYWRhcCk7CisKKwlyZXR1cm4gYWRhcC0+ZmUgPT0gTlVMTCA/IC1FTk9ERVYgOiAwOworfQorCitzdGF0aWMgc3RydWN0IG10MjA2MF9jb25maWcgYWY5MDE1X210MjA2MF9jb25maWcgPSB7CisJLmkyY19hZGRyZXNzID0gMHhjMCwKKwkuY2xvY2tfb3V0ID0gMCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcXQxMDEwX2NvbmZpZyBhZjkwMTVfcXQxMDEwX2NvbmZpZyA9IHsKKwkuaTJjX2FkZHJlc3MgPSAweGM0LAorfTsKKworc3RhdGljIHN0cnVjdCB0ZGExODI3MV9jb25maWcgYWY5MDE1X3RkYTE4MjcxX2NvbmZpZyA9IHsKKwkuZ2F0ZSA9IFREQTE4MjcxX0dBVEVfRElHSVRBTCwKKwkuc21hbGxfaTJjID0gMSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgbXhsNTAwNXNfY29uZmlnIGFmOTAxNV9teGw1MDAzX2NvbmZpZyA9IHsKKwkuaTJjX2FkZHJlc3MgICAgID0gMHhjNiwKKwkuaWZfZnJlcSAgICAgICAgID0gSUZfRlJFUV80NTcwMDAwSFosCisJLnh0YWxfZnJlcSAgICAgICA9IENSWVNUQUxfRlJFUV8xNjAwMDAwMEhaLAorCS5hZ2NfbW9kZSAgICAgICAgPSBNWExfU0lOR0xFX0FHQywKKwkudHJhY2tpbmdfZmlsdGVyID0gTVhMX1RGX0RFRkFVTFQsCisJLnJzc2lfZW5hYmxlICAgICA9IE1YTF9SU1NJX0VOQUJMRSwKKwkuY2FwX3NlbGVjdCAgICAgID0gTVhMX0NBUF9TRUxfRU5BQkxFLAorCS5kaXZfb3V0ICAgICAgICAgPSBNWExfRElWX09VVF80LAorCS5jbG9ja19vdXQgICAgICAgPSBNWExfQ0xPQ0tfT1VUX0RJU0FCTEUsCisJLm91dHB1dF9sb2FkICAgICA9IE1YTDUwMDVTX0lGX09VVFBVVF9MT0FEXzIwMF9PSE0sCisJLnRvcAkJID0gTVhMNTAwNVNfVE9QXzI1UDIsCisJLm1vZF9tb2RlICAgICAgICA9IE1YTF9ESUdJVEFMX01PREUsCisJLmlmX21vZGUgICAgICAgICA9IE1YTF9aRVJPX0lGLAorCS5BZ2NNYXN0ZXJCeXRlICAgPSAweDAwLAorfTsKKworc3RhdGljIHN0cnVjdCBteGw1MDA1c19jb25maWcgYWY5MDE1X214bDUwMDVfY29uZmlnID0geworCS5pMmNfYWRkcmVzcyAgICAgPSAweGM2LAorCS5pZl9mcmVxICAgICAgICAgPSBJRl9GUkVRXzQ1NzAwMDBIWiwKKwkueHRhbF9mcmVxICAgICAgID0gQ1JZU1RBTF9GUkVRXzE2MDAwMDAwSFosCisJLmFnY19tb2RlICAgICAgICA9IE1YTF9TSU5HTEVfQUdDLAorCS50cmFja2luZ19maWx0ZXIgPSBNWExfVEZfT0ZGLAorCS5yc3NpX2VuYWJsZSAgICAgPSBNWExfUlNTSV9FTkFCTEUsCisJLmNhcF9zZWxlY3QgICAgICA9IE1YTF9DQVBfU0VMX0VOQUJMRSwKKwkuZGl2X291dCAgICAgICAgID0gTVhMX0RJVl9PVVRfNCwKKwkuY2xvY2tfb3V0ICAgICAgID0gTVhMX0NMT0NLX09VVF9ESVNBQkxFLAorCS5vdXRwdXRfbG9hZCAgICAgPSBNWEw1MDA1U19JRl9PVVRQVVRfTE9BRF8yMDBfT0hNLAorCS50b3AJCSA9IE1YTDUwMDVTX1RPUF8yNVAyLAorCS5tb2RfbW9kZSAgICAgICAgPSBNWExfRElHSVRBTF9NT0RFLAorCS5pZl9tb2RlICAgICAgICAgPSBNWExfWkVST19JRiwKKwkuQWdjTWFzdGVyQnl0ZSAgID0gMHgwMCwKK307CisKK3N0YXRpYyBpbnQgYWY5MDE1X3R1bmVyX2F0dGFjaChzdHJ1Y3QgZHZiX3VzYl9hZGFwdGVyICphZGFwKQoreworCXN0cnVjdCBhZjkwMTVfc3RhdGUgKnN0YXRlID0gYWRhcC0+ZGV2LT5wcml2OworCXN0cnVjdCBpMmNfYWRhcHRlciAqaTJjX2FkYXA7CisJaW50IHJldDsKKwlkZWJfaW5mbygiJXM6IFxuIiwgX19mdW5jX18pOworCisJLyogc2VsZWN0IEkyQyBhZGFwdGVyICovCisJaWYgKGFkYXAtPmlkID09IDApCisJCWkyY19hZGFwID0gJmFkYXAtPmRldi0+aTJjX2FkYXA7CisJZWxzZQorCQlpMmNfYWRhcCA9ICZzdGF0ZS0+aTJjX2FkYXA7CisKKwlzd2l0Y2ggKGFmOTAxNV9hZjkwMTNfY29uZmlnW2FkYXAtPmlkXS50dW5lcikgeworCWNhc2UgQUY5MDEzX1RVTkVSX01UMjA2MDoKKwljYXNlIEFGOTAxM19UVU5FUl9NVDIwNjBfMjoKKwkJcmV0ID0gZHZiX2F0dGFjaChtdDIwNjBfYXR0YWNoLCBhZGFwLT5mZSwgaTJjX2FkYXAsCisJCQkmYWY5MDE1X210MjA2MF9jb25maWcsCisJCQlhZjkwMTVfY29uZmlnLm10MjA2MF9pZjFbYWRhcC0+aWRdKQorCQkJPT0gTlVMTCA/IC1FTk9ERVYgOiAwOworCQlicmVhazsKKwljYXNlIEFGOTAxM19UVU5FUl9RVDEwMTA6CisJY2FzZSBBRjkwMTNfVFVORVJfUVQxMDEwQToKKwkJcmV0ID0gZHZiX2F0dGFjaChxdDEwMTBfYXR0YWNoLCBhZGFwLT5mZSwgaTJjX2FkYXAsCisJCQkmYWY5MDE1X3F0MTAxMF9jb25maWcpID09IE5VTEwgPyAtRU5PREVWIDogMDsKKwkJYnJlYWs7CisJY2FzZSBBRjkwMTNfVFVORVJfVERBMTgyNzE6CisJCXJldCA9IGR2Yl9hdHRhY2godGRhMTgyNzFfYXR0YWNoLCBhZGFwLT5mZSwgMHhjMCwgaTJjX2FkYXAsCisJCQkmYWY5MDE1X3RkYTE4MjcxX2NvbmZpZykgPT0gTlVMTCA/IC1FTk9ERVYgOiAwOworCQlicmVhazsKKwljYXNlIEFGOTAxM19UVU5FUl9NWEw1MDAzRDoKKwkJcmV0ID0gZHZiX2F0dGFjaChteGw1MDA1c19hdHRhY2gsIGFkYXAtPmZlLCBpMmNfYWRhcCwKKwkJCSZhZjkwMTVfbXhsNTAwM19jb25maWcpID09IE5VTEwgPyAtRU5PREVWIDogMDsKKwkJYnJlYWs7CisJY2FzZSBBRjkwMTNfVFVORVJfTVhMNTAwNUQ6CisJY2FzZSBBRjkwMTNfVFVORVJfTVhMNTAwNVI6CisJCXJldCA9IGR2Yl9hdHRhY2gobXhsNTAwNXNfYXR0YWNoLCBhZGFwLT5mZSwgaTJjX2FkYXAsCisJCQkmYWY5MDE1X214bDUwMDVfY29uZmlnKSA9PSBOVUxMID8gLUVOT0RFViA6IDA7CisJCWJyZWFrOworCWNhc2UgQUY5MDEzX1RVTkVSX0VOVjc3SDExRDU6CisJCXJldCA9IGR2Yl9hdHRhY2goZHZiX3BsbF9hdHRhY2gsIGFkYXAtPmZlLCAweGMwLCBpMmNfYWRhcCwKKwkJCURWQl9QTExfVERBNjY1WCkgPT0gTlVMTCA/IC1FTk9ERVYgOiAwOworCQlicmVhazsKKwljYXNlIEFGOTAxM19UVU5FUl9NQzQ0UzgwMzoKKyNpZiAwCisJCXJldCA9IGR2Yl9hdHRhY2gobWM0NHM4MHhfYXR0YWNoLCBhZGFwLT5mZSwgaTJjX2FkYXApCisJCQk9PSBOVUxMID8gLUVOT0RFViA6IDA7CisjZWxzZQorCQlyZXQgPSAtRU5PREVWOworCQlpbmZvKCJGcmVlc2NhbGUgTUM0NFM4MDMgdHVuZXIgZm91bmQgYnV0IG5vIGRyaXZlciBmb3IgdGhhdCIgXAorCQkJInR1bmVyLiBMb29rIGF0IHRoZSBMaW51eHR2Lm9yZyBmb3IgdHVuZXIgZHJpdmVyIiBcCisJCQkic3RhdHVzLiIpOworI2VuZGlmCisJCWJyZWFrOworCWNhc2UgQUY5MDEzX1RVTkVSX1VOS05PV046CisJZGVmYXVsdDoKKwkJcmV0ID0gLUVOT0RFVjsKKwkJZXJyKCJVbmtub3duIHR1bmVyIGlkOiVkIiwKKwkJCWFmOTAxNV9hZjkwMTNfY29uZmlnW2FkYXAtPmlkXS50dW5lcik7CisJfQorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBhZjkwMTVfdXNiX3RhYmxlW10gPSB7CisvKiAgMCAqL3tVU0JfREVWSUNFKFVTQl9WSURfQUZBVEVDSCwgICBVU0JfUElEX0FGQVRFQ0hfQUY5MDE1XzkwMTUpfSwKKwl7VVNCX0RFVklDRShVU0JfVklEX0FGQVRFQ0gsICAgVVNCX1BJRF9BRkFURUNIX0FGOTAxNV85MDE2KX0sCisJe1VTQl9ERVZJQ0UoVVNCX1ZJRF9MRUFEVEVLLCAgIFVTQl9QSURfV0lORkFTVF9EVFZfRE9OR0xFX0dPTEQpfSwKKwl7VVNCX0RFVklDRShVU0JfVklEX1BJTk5BQ0xFLCAgVVNCX1BJRF9QSU5OQUNMRV9QQ1RWNzFFKX0sCisJe1VTQl9ERVZJQ0UoVVNCX1ZJRF9LV09STERfMiwgIFVTQl9QSURfS1dPUkxEXzM5OVUpfSwKKy8qICA1ICove1VTQl9ERVZJQ0UoVVNCX1ZJRF9WSVNJT05QTFVTLAorCQlVU0JfUElEX1RJTllUV0lOKX0sCisJe1VTQl9ERVZJQ0UoVVNCX1ZJRF9WSVNJT05QTFVTLAorCQlVU0JfUElEX0FaVVJFV0FWRV9BRF9UVTcwMCl9LAorCXtVU0JfREVWSUNFKFVTQl9WSURfVEVSUkFURUMsICBVU0JfUElEX1RFUlJBVEVDX0NJTkVSR1lfVF9VU0JfWEVfUkVWMil9LAorCXtVU0JfREVWSUNFKFVTQl9WSURfS1dPUkxEXzIsICBVU0JfUElEX0tXT1JMRF9QQzE2MF8yVCl9LAorCXtVU0JfREVWSUNFKFVTQl9WSURfQVZFUk1FRElBLCBVU0JfUElEX0FWRVJNRURJQV9WT0xBUl9YKX0sCisvKiAxMCAqL3tVU0JfREVWSUNFKFVTQl9WSURfWFRFTlNJT05TLCBVU0JfUElEX1hURU5TSU9OU19YRF8zODApfSwKKwl7VVNCX0RFVklDRShVU0JfVklEX01TSV8yLCAgICAgVVNCX1BJRF9NU0lfRElHSVZPWF9EVU8pfSwKKwl7VVNCX0RFVklDRShVU0JfVklEX0FWRVJNRURJQSwgVVNCX1BJRF9BVkVSTUVESUFfVk9MQVJfWF8yKX0sCisJe1VTQl9ERVZJQ0UoVVNCX1ZJRF9URUxFU1RBUiwgIFVTQl9QSURfVEVMRVNUQVJfU1RBUlNUSUNLXzIpfSwKKwl7VVNCX0RFVklDRShVU0JfVklEX0FWRVJNRURJQSwgVVNCX1BJRF9BVkVSTUVESUFfQTMwOSl9LAorLyogMTUgKi97VVNCX0RFVklDRShVU0JfVklEX01TSV8yLCAgICAgVVNCX1BJRF9NU0lfRElHSV9WT1hfTUlOSV9JSUkpfSwKKwl7MH0sCit9OworTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIGFmOTAxNV91c2JfdGFibGUpOworCitzdGF0aWMgc3RydWN0IGR2Yl91c2JfZGV2aWNlX3Byb3BlcnRpZXMgYWY5MDE1X3Byb3BlcnRpZXNbXSA9IHsKKwl7CisJCS5jYXBzID0gRFZCX1VTQl9JU19BTl9JMkNfQURBUFRFUiwKKworCQkudXNiX2N0cmwgPSBERVZJQ0VfU1BFQ0lGSUMsCisJCS5kb3dubG9hZF9maXJtd2FyZSA9IGFmOTAxNV9kb3dubG9hZF9maXJtd2FyZSwKKwkJLmZpcm13YXJlID0gImR2Yi11c2ItYWY5MDE1LmZ3IiwKKworCQkuc2l6ZV9vZl9wcml2ID0gc2l6ZW9mKHN0cnVjdCBhZjkwMTVfc3RhdGUpLCBcCisKKwkJLm51bV9hZGFwdGVycyA9IDIsCisJCS5hZGFwdGVyID0geworCQkJeworCQkJCS5jYXBzID0gRFZCX1VTQl9BREFQX0hBU19QSURfRklMVEVSIHwKKwkJCQlEVkJfVVNCX0FEQVBfUElEX0ZJTFRFUl9DQU5fQkVfVFVSTkVEX09GRiwKKworCQkJCS5waWRfZmlsdGVyX2NvdW50ID0gMzIsCisJCQkJLnBpZF9maWx0ZXIgICAgICAgPSBhZjkwMTVfcGlkX2ZpbHRlciwKKwkJCQkucGlkX2ZpbHRlcl9jdHJsICA9IGFmOTAxNV9waWRfZmlsdGVyX2N0cmwsCisKKwkJCQkuZnJvbnRlbmRfYXR0YWNoID0KKwkJCQkJYWY5MDE1X2FmOTAxM19mcm9udGVuZF9hdHRhY2gsCisJCQkJLnR1bmVyX2F0dGFjaCAgICA9IGFmOTAxNV90dW5lcl9hdHRhY2gsCisJCQkJLnN0cmVhbSA9IHsKKwkJCQkJLnR5cGUgPSBVU0JfQlVMSywKKwkJCQkJLmNvdW50ID0gNiwKKwkJCQkJLmVuZHBvaW50ID0gMHg4NCwKKwkJCQl9LAorCQkJfSwKKwkJCXsKKwkJCQkuZnJvbnRlbmRfYXR0YWNoID0KKwkJCQkJYWY5MDE1X2FmOTAxM19mcm9udGVuZF9hdHRhY2gsCisJCQkJLnR1bmVyX2F0dGFjaCAgICA9IGFmOTAxNV90dW5lcl9hdHRhY2gsCisJCQkJLnN0cmVhbSA9IHsKKwkJCQkJLnR5cGUgPSBVU0JfQlVMSywKKwkJCQkJLmNvdW50ID0gNiwKKwkJCQkJLmVuZHBvaW50ID0gMHg4NSwKKwkJCQl9LAorCQkJfQorCQl9LAorCisJCS5pZGVudGlmeV9zdGF0ZSA9IGFmOTAxNV9pZGVudGlmeV9zdGF0ZSwKKworCQkucmNfcXVlcnkgICAgICAgICA9IGFmOTAxNV9yY19xdWVyeSwKKwkJLnJjX2ludGVydmFsICAgICAgPSAxNTAsCisKKwkJLmkyY19hbGdvID0gJmFmOTAxNV9pMmNfYWxnbywKKworCQkubnVtX2RldmljZV9kZXNjcyA9IDksCisJCS5kZXZpY2VzID0geworCQkJeworCQkJCS5uYW1lID0gIkFmYXRlY2ggQUY5MDE1IERWQi1UIFVTQjIuMCBzdGljayIsCisJCQkJLmNvbGRfaWRzID0geyZhZjkwMTVfdXNiX3RhYmxlWzBdLAorCQkJCQkgICAgICZhZjkwMTVfdXNiX3RhYmxlWzFdLCBOVUxMfSwKKwkJCQkud2FybV9pZHMgPSB7TlVMTH0sCisJCQl9LAorCQkJeworCQkJCS5uYW1lID0gIkxlYWR0ZWsgV2luRmFzdCBEVFYgRG9uZ2xlIEdvbGQiLAorCQkJCS5jb2xkX2lkcyA9IHsmYWY5MDE1X3VzYl90YWJsZVsyXSwgTlVMTH0sCisJCQkJLndhcm1faWRzID0ge05VTEx9LAorCQkJfSwKKwkJCXsKKwkJCQkubmFtZSA9ICJQaW5uYWNsZSBQQ1RWIDcxZSIsCisJCQkJLmNvbGRfaWRzID0geyZhZjkwMTVfdXNiX3RhYmxlWzNdLCBOVUxMfSwKKwkJCQkud2FybV9pZHMgPSB7TlVMTH0sCisJCQl9LAorCQkJeworCQkJCS5uYW1lID0gIktXb3JsZCBQbHVzVFYgRHVhbCBEVkItVCBTdGljayAiIFwKKwkJCQkJIihEVkItVCAzOTlVKSIsCisJCQkJLmNvbGRfaWRzID0geyZhZjkwMTVfdXNiX3RhYmxlWzRdLCBOVUxMfSwKKwkJCQkud2FybV9pZHMgPSB7TlVMTH0sCisJCQl9LAorCQkJeworCQkJCS5uYW1lID0gIkRpZ2l0YWxOb3cgVGlueVR3aW4gRFZCLVQgUmVjZWl2ZXIiLAorCQkJCS5jb2xkX2lkcyA9IHsmYWY5MDE1X3VzYl90YWJsZVs1XSwgTlVMTH0sCisJCQkJLndhcm1faWRzID0ge05VTEx9LAorCQkJfSwKKwkJCXsKKwkJCQkubmFtZSA9ICJUd2luSGFuIEF6dXJlV2F2ZSBBRC1UVTcwMCg3MDRKKSIsCisJCQkJLmNvbGRfaWRzID0geyZhZjkwMTVfdXNiX3RhYmxlWzZdLCBOVUxMfSwKKwkJCQkud2FybV9pZHMgPSB7TlVMTH0sCisJCQl9LAorCQkJeworCQkJCS5uYW1lID0gIlRlcnJhVGVjIENpbmVyZ3kgVCBVU0IgWEUiLAorCQkJCS5jb2xkX2lkcyA9IHsmYWY5MDE1X3VzYl90YWJsZVs3XSwgTlVMTH0sCisJCQkJLndhcm1faWRzID0ge05VTEx9LAorCQkJfSwKKwkJCXsKKwkJCQkubmFtZSA9ICJLV29ybGQgUGx1c1RWIER1YWwgRFZCLVQgUENJICIgXAorCQkJCQkiKERWQi1UIFBDMTYwLTJUKSIsCisJCQkJLmNvbGRfaWRzID0geyZhZjkwMTVfdXNiX3RhYmxlWzhdLCBOVUxMfSwKKwkJCQkud2FybV9pZHMgPSB7TlVMTH0sCisJCQl9LAorCQkJeworCQkJCS5uYW1lID0gIkFWZXJNZWRpYSBBVmVyVFYgRFZCLVQgVm9sYXIgWCIsCisJCQkJLmNvbGRfaWRzID0geyZhZjkwMTVfdXNiX3RhYmxlWzldLCBOVUxMfSwKKwkJCQkud2FybV9pZHMgPSB7TlVMTH0sCisJCQl9LAorCQl9CisJfSwgeworCQkuY2FwcyA9IERWQl9VU0JfSVNfQU5fSTJDX0FEQVBURVIsCisKKwkJLnVzYl9jdHJsID0gREVWSUNFX1NQRUNJRklDLAorCQkuZG93bmxvYWRfZmlybXdhcmUgPSBhZjkwMTVfZG93bmxvYWRfZmlybXdhcmUsCisJCS5maXJtd2FyZSA9ICJkdmItdXNiLWFmOTAxNS5mdyIsCisKKwkJLnNpemVfb2ZfcHJpdiA9IHNpemVvZihzdHJ1Y3QgYWY5MDE1X3N0YXRlKSwgXAorCisJCS5udW1fYWRhcHRlcnMgPSAyLAorCQkuYWRhcHRlciA9IHsKKwkJCXsKKwkJCQkuY2FwcyA9IERWQl9VU0JfQURBUF9IQVNfUElEX0ZJTFRFUiB8CisJCQkJRFZCX1VTQl9BREFQX1BJRF9GSUxURVJfQ0FOX0JFX1RVUk5FRF9PRkYsCisKKwkJCQkucGlkX2ZpbHRlcl9jb3VudCA9IDMyLAorCQkJCS5waWRfZmlsdGVyICAgICAgID0gYWY5MDE1X3BpZF9maWx0ZXIsCisJCQkJLnBpZF9maWx0ZXJfY3RybCAgPSBhZjkwMTVfcGlkX2ZpbHRlcl9jdHJsLAorCisJCQkJLmZyb250ZW5kX2F0dGFjaCA9CisJCQkJCWFmOTAxNV9hZjkwMTNfZnJvbnRlbmRfYXR0YWNoLAorCQkJCS50dW5lcl9hdHRhY2ggICAgPSBhZjkwMTVfdHVuZXJfYXR0YWNoLAorCQkJCS5zdHJlYW0gPSB7CisJCQkJCS50eXBlID0gVVNCX0JVTEssCisJCQkJCS5jb3VudCA9IDYsCisJCQkJCS5lbmRwb2ludCA9IDB4ODQsCisJCQkJfSwKKwkJCX0sCisJCQl7CisJCQkJLmZyb250ZW5kX2F0dGFjaCA9CisJCQkJCWFmOTAxNV9hZjkwMTNfZnJvbnRlbmRfYXR0YWNoLAorCQkJCS50dW5lcl9hdHRhY2ggICAgPSBhZjkwMTVfdHVuZXJfYXR0YWNoLAorCQkJCS5zdHJlYW0gPSB7CisJCQkJCS50eXBlID0gVVNCX0JVTEssCisJCQkJCS5jb3VudCA9IDYsCisJCQkJCS5lbmRwb2ludCA9IDB4ODUsCisJCQkJfSwKKwkJCX0KKwkJfSwKKworCQkuaWRlbnRpZnlfc3RhdGUgPSBhZjkwMTVfaWRlbnRpZnlfc3RhdGUsCisKKwkJLnJjX3F1ZXJ5ICAgICAgICAgPSBhZjkwMTVfcmNfcXVlcnksCisJCS5yY19pbnRlcnZhbCAgICAgID0gMTUwLAorCisJCS5pMmNfYWxnbyA9ICZhZjkwMTVfaTJjX2FsZ28sCisKKwkJLm51bV9kZXZpY2VfZGVzY3MgPSA2LAorCQkuZGV2aWNlcyA9IHsKKwkJCXsKKwkJCQkubmFtZSA9ICJYdGVuc2lvbnMgWEQtMzgwIiwKKwkJCQkuY29sZF9pZHMgPSB7JmFmOTAxNV91c2JfdGFibGVbMTBdLCBOVUxMfSwKKwkJCQkud2FybV9pZHMgPSB7TlVMTH0sCisJCQl9LAorCQkJeworCQkJCS5uYW1lID0gIk1TSSBESUdJVk9YIER1byIsCisJCQkJLmNvbGRfaWRzID0geyZhZjkwMTVfdXNiX3RhYmxlWzExXSwgTlVMTH0sCisJCQkJLndhcm1faWRzID0ge05VTEx9LAorCQkJfSwKKwkJCXsKKwkJCQkubmFtZSA9ICJGdWppdHN1LVNpZW1lbnMgU2xpbSBNb2JpbGUgVVNCIERWQi1UIiwKKwkJCQkuY29sZF9pZHMgPSB7JmFmOTAxNV91c2JfdGFibGVbMTJdLCBOVUxMfSwKKwkJCQkud2FybV9pZHMgPSB7TlVMTH0sCisJCQl9LAorCQkJeworCQkJCS5uYW1lID0gIlRlbGVzdGFyIFN0YXJzdGljayAyIiwKKwkJCQkuY29sZF9pZHMgPSB7JmFmOTAxNV91c2JfdGFibGVbMTNdLCBOVUxMfSwKKwkJCQkud2FybV9pZHMgPSB7TlVMTH0sCisJCQl9LAorCQkJeworCQkJCS5uYW1lID0gIkFWZXJNZWRpYSBBMzA5IiwKKwkJCQkuY29sZF9pZHMgPSB7JmFmOTAxNV91c2JfdGFibGVbMTRdLCBOVUxMfSwKKwkJCQkud2FybV9pZHMgPSB7TlVMTH0sCisJCQl9LAorCQkJeworCQkJCS5uYW1lID0gIk1TSSBEaWdpIFZPWCBtaW5pIElJSSIsCisJCQkJLmNvbGRfaWRzID0geyZhZjkwMTVfdXNiX3RhYmxlWzE1XSwgTlVMTH0sCisJCQkJLndhcm1faWRzID0ge05VTEx9LAorCQkJfSwKKwkJfQorCX0KK307CisKK3N0YXRpYyBpbnQgYWY5MDE1X3VzYl9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwKKwkJCSAgICBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCit7CisJaW50IHJldCA9IDA7CisJc3RydWN0IGR2Yl91c2JfZGV2aWNlICpkID0gTlVMTDsKKwlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiA9IGludGVyZmFjZV90b191c2JkZXYoaW50Zik7CisJdTggaTsKKworCWRlYl9pbmZvKCIlczogaW50ZXJmYWNlOiVkXG4iLCBfX2Z1bmNfXywKKwkJaW50Zi0+Y3VyX2FsdHNldHRpbmctPmRlc2MuYkludGVyZmFjZU51bWJlcik7CisKKwkvKiBpbnRlcmZhY2UgMCBpcyB1c2VkIGJ5IERWQi1UIHJlY2VpdmVyIGFuZAorCSAgIGludGVyZmFjZSAxIGlzIGZvciByZW1vdGUgY29udHJvbGxlciAoSElEKSAqLworCWlmIChpbnRmLT5jdXJfYWx0c2V0dGluZy0+ZGVzYy5iSW50ZXJmYWNlTnVtYmVyID09IDApIHsKKwkJcmV0ID0gYWY5MDE1X3JlYWRfY29uZmlnKHVkZXYpOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKworCQlmb3IgKGkgPSAwOyBpIDwgYWY5MDE1X3Byb3BlcnRpZXNfY291bnQ7IGkrKykgeworCQkJcmV0ID0gZHZiX3VzYl9kZXZpY2VfaW5pdChpbnRmLCAmYWY5MDE1X3Byb3BlcnRpZXNbaV0sCisJCQkJVEhJU19NT0RVTEUsICZkLCBhZGFwdGVyX25yKTsKKwkJCWlmICghcmV0KQorCQkJCWJyZWFrOworCQkJaWYgKHJldCAhPSAtRU5PREVWKQorCQkJCXJldHVybiByZXQ7CisJCX0KKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisKKwkJaWYgKGQpCisJCQlyZXQgPSBhZjkwMTVfaW5pdChkKTsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCit2b2lkIGFmOTAxNV9pMmNfZXhpdChzdHJ1Y3QgZHZiX3VzYl9kZXZpY2UgKmQpCit7CisJc3RydWN0IGFmOTAxNV9zdGF0ZSAqc3RhdGUgPSBkLT5wcml2OworCWRlYl9pbmZvKCIlczogXG4iLCBfX2Z1bmNfXyk7CisKKwkvKiByZW1vdmUgMm5kIEkyQyBhZGFwdGVyICovCisJaWYgKGQtPnN0YXRlICYgRFZCX1VTQl9TVEFURV9JMkMpCisJCWkyY19kZWxfYWRhcHRlcigmc3RhdGUtPmkyY19hZGFwKTsKK30KKworc3RhdGljIHZvaWQgYWY5MDE1X3VzYl9kZXZpY2VfZXhpdChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKK3sKKwlzdHJ1Y3QgZHZiX3VzYl9kZXZpY2UgKmQgPSB1c2JfZ2V0X2ludGZkYXRhKGludGYpOworCWRlYl9pbmZvKCIlczogXG4iLCBfX2Z1bmNfXyk7CisKKwkvKiByZW1vdmUgMm5kIEkyQyBhZGFwdGVyICovCisJaWYgKGQgIT0gTlVMTCAmJiBkLT5kZXNjICE9IE5VTEwpCisJCWFmOTAxNV9pMmNfZXhpdChkKTsKKworCWR2Yl91c2JfZGV2aWNlX2V4aXQoaW50Zik7Cit9CisKKy8qIHVzYiBzcGVjaWZpYyBvYmplY3QgbmVlZGVkIHRvIHJlZ2lzdGVyIHRoaXMgZHJpdmVyIHdpdGggdGhlIHVzYiBzdWJzeXN0ZW0gKi8KK3N0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBhZjkwMTVfdXNiX2RyaXZlciA9IHsKKwkubmFtZSA9ICJkdmJfdXNiX2FmOTAxNSIsCisJLnByb2JlID0gYWY5MDE1X3VzYl9wcm9iZSwKKwkuZGlzY29ubmVjdCA9IGFmOTAxNV91c2JfZGV2aWNlX2V4aXQsCisJLmlkX3RhYmxlID0gYWY5MDE1X3VzYl90YWJsZSwKK307CisKKy8qIG1vZHVsZSBzdHVmZiAqLworc3RhdGljIGludCBfX2luaXQgYWY5MDE1X3VzYl9tb2R1bGVfaW5pdCh2b2lkKQoreworCWludCByZXQ7CisJcmV0ID0gdXNiX3JlZ2lzdGVyKCZhZjkwMTVfdXNiX2RyaXZlcik7CisJaWYgKHJldCkKKwkJZXJyKCJtb2R1bGUgaW5pdCBmYWlsZWQ6JWQiLCByZXQpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGFmOTAxNV91c2JfbW9kdWxlX2V4aXQodm9pZCkKK3sKKwkvKiBkZXJlZ2lzdGVyIHRoaXMgZHJpdmVyIGZyb20gdGhlIFVTQiBzdWJzeXN0ZW0gKi8KKwl1c2JfZGVyZWdpc3RlcigmYWY5MDE1X3VzYl9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChhZjkwMTVfdXNiX21vZHVsZV9pbml0KTsKK21vZHVsZV9leGl0KGFmOTAxNV91c2JfbW9kdWxlX2V4aXQpOworCitNT0RVTEVfQVVUSE9SKCJBbnR0aSBQYWxvc2FhcmkgPGNyb3BlQGlraS5maT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiRHJpdmVyIGZvciBBZmF0ZWNoIEFGOTAxNSBEVkItVCIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9hZjkwMTUuaCBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvYWY5MDE1LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODgyZThhNAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvYWY5MDE1LmgKQEAgLTAsMCArMSw1MjQgQEAKKy8qCisgKiBEVkIgVVNCIExpbnV4IGRyaXZlciBmb3IgQWZhdGVjaCBBRjkwMTUgRFZCLVQgVVNCMi4wIHJlY2VpdmVyCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA3IEFudHRpIFBhbG9zYWFyaSA8Y3JvcGVAaWtpLmZpPgorICoKKyAqIFRoYW5rcyB0byBBZmF0ZWNoIHdobyBraW5kbHkgcHJvdmlkZWQgaW5mb3JtYXRpb24uCisgKgorICogICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogICAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKgorICovCisKKyNpZm5kZWYgX0RWQl9VU0JfQUY5MDE1X0hfCisjZGVmaW5lIF9EVkJfVVNCX0FGOTAxNV9IXworCisjZGVmaW5lIERWQl9VU0JfTE9HX1BSRUZJWCAiYWY5MDE1IgorI2luY2x1ZGUgImR2Yi11c2IuaCIKKworZXh0ZXJuIGludCBkdmJfdXNiX2FmOTAxNV9kZWJ1ZzsKKyNkZWZpbmUgZGViX2luZm8oYXJncy4uLikgZHByaW50ayhkdmJfdXNiX2FmOTAxNV9kZWJ1ZywgMHgwMSwgYXJncykKKyNkZWZpbmUgZGViX3JjKGFyZ3MuLi4pICAgZHByaW50ayhkdmJfdXNiX2FmOTAxNV9kZWJ1ZywgMHgwMiwgYXJncykKKyNkZWZpbmUgZGViX3hmZXIoYXJncy4uLikgZHByaW50ayhkdmJfdXNiX2FmOTAxNV9kZWJ1ZywgMHgwNCwgYXJncykKKyNkZWZpbmUgZGViX3JlZyhhcmdzLi4uKSAgZHByaW50ayhkdmJfdXNiX2FmOTAxNV9kZWJ1ZywgMHgwOCwgYXJncykKKyNkZWZpbmUgZGViX2kyYyhhcmdzLi4uKSAgZHByaW50ayhkdmJfdXNiX2FmOTAxNV9kZWJ1ZywgMHgxMCwgYXJncykKKyNkZWZpbmUgZGViX2Z3KGFyZ3MuLi4pICAgZHByaW50ayhkdmJfdXNiX2FmOTAxNV9kZWJ1ZywgMHgyMCwgYXJncykKKworI2RlZmluZSBBRjkwMTVfSTJDX0VFUFJPTSAgMHhhMAorI2RlZmluZSBBRjkwMTVfSTJDX0RFTU9EICAgMHgzOAorI2RlZmluZSBBRjkwMTVfVVNCX1RJTUVPVVQgMjAwMAorCisvKiBFRVBST00gbG9jYXRpb25zICovCisjZGVmaW5lIEFGOTAxNV9FRVBST01fSVJfTU9ERSAgICAgICAgMHgxOAorI2RlZmluZSBBRjkwMTVfRUVQUk9NX0lSX1JFTU9URV9UWVBFIDB4MzQKKyNkZWZpbmUgQUY5MDE1X0VFUFJPTV9UU19NT0RFICAgICAgICAweDMxCisjZGVmaW5lIEFGOTAxNV9FRVBST01fREVNT0QyX0kyQyAgICAgMHgzMgorCisjZGVmaW5lIEFGOTAxNV9FRVBST01fU0FXX0JXMSAgICAgICAgMHgzNQorI2RlZmluZSBBRjkwMTVfRUVQUk9NX1hUQUxfVFlQRTEgICAgIDB4MzYKKyNkZWZpbmUgQUY5MDE1X0VFUFJPTV9TUEVDX0lOVjEgICAgICAweDM3CisjZGVmaW5lIEFGOTAxNV9FRVBST01fSUYxTCAgICAgICAgICAgMHgzOAorI2RlZmluZSBBRjkwMTVfRUVQUk9NX0lGMUggICAgICAgICAgIDB4MzkKKyNkZWZpbmUgQUY5MDE1X0VFUFJPTV9NVDIwNjBfSUYxTCAgICAweDNhCisjZGVmaW5lIEFGOTAxNV9FRVBST01fTVQyMDYwX0lGMUggICAgMHgzYgorI2RlZmluZSBBRjkwMTVfRUVQUk9NX1RVTkVSX0lEMSAgICAgIDB4M2MKKworI2RlZmluZSBBRjkwMTVfRUVQUk9NX1NBV19CVzIgICAgICAgIDB4NDUKKyNkZWZpbmUgQUY5MDE1X0VFUFJPTV9YVEFMX1RZUEUyICAgICAweDQ2CisjZGVmaW5lIEFGOTAxNV9FRVBST01fU1BFQ19JTlYyICAgICAgMHg0NworI2RlZmluZSBBRjkwMTVfRUVQUk9NX0lGMkwgICAgICAgICAgIDB4NDgKKyNkZWZpbmUgQUY5MDE1X0VFUFJPTV9JRjJIICAgICAgICAgICAweDQ5CisjZGVmaW5lIEFGOTAxNV9FRVBST01fTVQyMDYwX0lGMkwgICAgMHg0YQorI2RlZmluZSBBRjkwMTVfRUVQUk9NX01UMjA2MF9JRjJIICAgIDB4NGIKKyNkZWZpbmUgQUY5MDE1X0VFUFJPTV9UVU5FUl9JRDIgICAgICAweDRjCisKKyNkZWZpbmUgQUY5MDE1X0VFUFJPTV9PRkZTRVQgKEFGOTAxNV9FRVBST01fU0FXX0JXMiAtIEFGOTAxNV9FRVBST01fU0FXX0JXMSkKKworI2RlZmluZSBBRjkwMTVfR1BJT19PTiAoMSA8PCAwKQorI2RlZmluZSBBRjkwMTVfR1BJT19FTiAoMSA8PCAxKQorI2RlZmluZSBBRjkwMTVfR1BJT19PICAoMSA8PCAyKQorI2RlZmluZSBBRjkwMTVfR1BJT19JICAoMSA8PCAzKQorCisjZGVmaW5lIEFGOTAxNV9HUElPX1RVTkVSX09OICAoQUY5MDE1X0dQSU9fT058QUY5MDE1X0dQSU9fRU4pCisjZGVmaW5lIEFGOTAxNV9HUElPX1RVTkVSX09GRiAoQUY5MDE1X0dQSU9fT058QUY5MDE1X0dQSU9fRU58QUY5MDE1X0dQSU9fTykKKworc3RydWN0IHJlcV90IHsKKwl1OCAgY21kOyAgICAgICAvKiBbMF0gKi8KKwkvKiAgc2VxICovICAgICAvKiBbMV0gKi8KKwl1OCAgaTJjX2FkZHI7ICAvKiBbMl0gKi8KKwl1MTYgYWRkcjsgICAgICAvKiBbM3w0XSAqLworCXU4ICBtYm94OyAgICAgIC8qIFs1XSAqLworCXU4ICBhZGRyX2xlbjsgIC8qIFs2XSAqLworCXU4ICBkYXRhX2xlbjsgIC8qIFs3XSAqLworCXU4ICAqZGF0YTsKK307CisKK2VudW0gYWY5MDE1X2NtZCB7CisJR0VUX0NPTkZJRyAgICAgICAgICAgPSAweDEwLAorCURPV05MT0FEX0ZJUk1XQVJFICAgID0gMHgxMSwKKwlCT09UICAgICAgICAgICAgICAgICA9IDB4MTMsCisJUkVBRF9NRU1PUlkgICAgICAgICAgPSAweDIwLAorCVdSSVRFX01FTU9SWSAgICAgICAgID0gMHgyMSwKKwlSRUFEX1dSSVRFX0kyQyAgICAgICA9IDB4MjIsCisJQ09QWV9GSVJNV0FSRSAgICAgICAgPSAweDIzLAorCVJFQ09OTkVDVF9VU0IgICAgICAgID0gMHg1YSwKKwlXUklURV9WSVJUVUFMX01FTU9SWSA9IDB4MjYsCisJR0VUX0lSX0NPREUgICAgICAgICAgPSAweDI3LAorCVJFQURfSTJDLAorCVdSSVRFX0kyQywKK307CisKK2VudW0gYWY5MDE1X2lyX21vZGUgeworCUFGOTAxNV9JUl9NT0RFX0RJU0FCTEVEID0gMCwKKwlBRjkwMTVfSVJfTU9ERV9ISUQsCisJQUY5MDE1X0lSX01PREVfUkxDLAorCUFGOTAxNV9JUl9NT0RFX1JDNiwKK307CisKK3N0cnVjdCBhZjkwMTVfc3RhdGUgeworCXN0cnVjdCBpMmNfYWRhcHRlciBpMmNfYWRhcDsgLyogSTJDIGFkYXB0ZXIgZm9yIDJuZCBGRSAqLworfTsKKworc3RydWN0IGFmOTAxNV9jb25maWcgeworCXU4ICBkdWFsX21vZGU6MTsKKwl1MTYgbXQyMDYwX2lmMVsyXTsKKwl1MTYgZmlybXdhcmVfc2l6ZTsKKwl1MTYgZmlybXdhcmVfY2hlY2tzdW07CisJdTggICppcl90YWJsZTsKKwl1MTYgaXJfdGFibGVfc2l6ZTsKK307CisKK2VudW0gYWY5MDE1X3JlbW90ZSB7CisJQUY5MDE1X1JFTU9URV9OT05FICAgICAgICAgICAgICAgICAgICA9IDAsCisJQUY5MDE1X1JFTU9URV9BX0xJTktfRFRVX00sCisJQUY5MDE1X1JFTU9URV9NU0lfRElHSVZPWF9NSU5JX0lJX1YzLAorCUFGOTAxNV9SRU1PVEVfTVlHSUNUVl9VNzE4LAorfTsKKworLyogTGVhZHRlayBXaW5GYXN0IERUViBEb25nbGUgR29sZCAqLworc3RhdGljIHN0cnVjdCBkdmJfdXNiX3JjX2tleSBhZjkwMTVfcmNfa2V5c19sZWFkdGVrW10gPSB7CisJeyAweDAwLCAweDFlLCBLRVlfMSB9LAorCXsgMHgwMCwgMHgxZiwgS0VZXzIgfSwKKwl7IDB4MDAsIDB4MjAsIEtFWV8zIH0sCisJeyAweDAwLCAweDIxLCBLRVlfNCB9LAorCXsgMHgwMCwgMHgyMiwgS0VZXzUgfSwKKwl7IDB4MDAsIDB4MjMsIEtFWV82IH0sCisJeyAweDAwLCAweDI0LCBLRVlfNyB9LAorCXsgMHgwMCwgMHgyNSwgS0VZXzggfSwKKwl7IDB4MDAsIDB4MjYsIEtFWV85IH0sCisJeyAweDAwLCAweDI3LCBLRVlfMCB9LAorCXsgMHgwMCwgMHgyOCwgS0VZX0VOVEVSIH0sCisJeyAweDAwLCAweDRmLCBLRVlfVk9MVU1FVVAgfSwKKwl7IDB4MDAsIDB4NTAsIEtFWV9WT0xVTUVET1dOIH0sCisJeyAweDAwLCAweDUxLCBLRVlfQ0hBTk5FTERPV04gfSwKKwl7IDB4MDAsIDB4NTIsIEtFWV9DSEFOTkVMVVAgfSwKK307CisKK3N0YXRpYyB1OCBhZjkwMTVfaXJfdGFibGVfbGVhZHRla1tdID0geworCTB4MDMsIDB4ZmMsIDB4MDAsIDB4ZmYsIDB4MWEsIDB4MDEsIDB4MDAsCisJMHgwMywgMHhmYywgMHg1NiwgMHhhOSwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAzLCAweGZjLCAweDRiLCAweGI0LCAweDAwLCAweDAwLCAweDAwLAorCTB4MDMsIDB4ZmMsIDB4NGMsIDB4YjMsIDB4YjIsIDB4MDQsIDB4MDAsCisJMHgwMywgMHhmYywgMHg0ZCwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAzLCAweGZjLCAweDRlLCAweGIxLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDMsIDB4ZmMsIDB4MWYsIDB4ZTAsIDB4M2QsIDB4MDAsIDB4MDAsCisJMHgwMywgMHhmYywgMHg0MCwgMHhiZiwgMHgxMywgMHgwMSwgMHgwMCwKKwkweDAzLCAweGZjLCAweDE0LCAweGViLCAweDEwLCAweDAwLCAweDAwLAorCTB4MDMsIDB4ZmMsIDB4NDksIDB4YjYsIDB4MDUsIDB4MDEsIDB4MDAsCisJMHgwMywgMHhmYywgMHg1MCwgMHhhZiwgMHgyOSwgMHgwMCwgMHgwMCwKKwkweDAzLCAweGZjLCAweDBjLCAweGYzLCAweDUyLCAweDAwLCAweDAwLAorCTB4MDMsIDB4ZmMsIDB4MDMsIDB4ZmMsIDB4MDksIDB4MDAsIDB4MDAsCisJMHgwMywgMHhmYywgMHgwOCwgMHhmNywgMHg1MCwgMHgwMCwgMHgwMCwKKwkweDAzLCAweGZjLCAweDEzLCAweGVjLCAweDI4LCAweDAwLCAweDAwLAorCTB4MDMsIDB4ZmMsIDB4MDQsIDB4ZmIsIDB4NGYsIDB4MDAsIDB4MDAsCisJMHgwMywgMHhmYywgMHg0ZiwgMHhiMCwgMHgwZiwgMHgwMSwgMHgwMCwKKwkweDAzLCAweGZjLCAweDEwLCAweGVmLCAweDUxLCAweDAwLCAweDAwLAorCTB4MDMsIDB4ZmMsIDB4NTEsIDB4YWUsIDB4M2YsIDB4MDAsIDB4MDAsCisJMHgwMywgMHhmYywgMHg0MiwgMHhiZCwgMHgxMywgMHgwMCwgMHgwMCwKKwkweDAzLCAweGZjLCAweDQzLCAweGJjLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDMsIDB4ZmMsIDB4NDQsIDB4YmIsIDB4MTEsIDB4MDAsIDB4MDAsCisJMHgwMywgMHhmYywgMHg1MiwgMHhhZCwgMHgxOSwgMHgwMCwgMHgwMCwKKwkweDAzLCAweGZjLCAweDU0LCAweGFiLCAweDA1LCAweDAwLCAweDAwLAorCTB4MDMsIDB4ZmMsIDB4NDYsIDB4YjksIDB4MjksIDB4MDAsIDB4MDAsCisJMHgwMywgMHhmYywgMHg1NSwgMHhhYSwgMHgyYiwgMHgwMCwgMHgwMCwKKwkweDAzLCAweGZjLCAweDUzLCAweGFjLCAweDQxLCAweDAwLCAweDAwLAorCTB4MDMsIDB4ZmMsIDB4MDUsIDB4ZmEsIDB4MWUsIDB4MDAsIDB4MDAsCisJMHgwMywgMHhmYywgMHgwNiwgMHhmOSwgMHgxZiwgMHgwMCwgMHgwMCwKKwkweDAzLCAweGZjLCAweDA3LCAweGY4LCAweDIwLCAweDAwLCAweDAwLAorCTB4MDMsIDB4ZmMsIDB4MWUsIDB4ZTEsIDB4MTksIDB4MDAsIDB4MDAsCisJMHgwMywgMHhmYywgMHgwOSwgMHhmNiwgMHgyMSwgMHgwMCwgMHgwMCwKKwkweDAzLCAweGZjLCAweDBhLCAweGY1LCAweDIyLCAweDAwLCAweDAwLAorCTB4MDMsIDB4ZmMsIDB4MGIsIDB4ZjQsIDB4MjMsIDB4MDAsIDB4MDAsCisJMHgwMywgMHhmYywgMHgxYiwgMHhlNCwgMHgxNiwgMHgwMCwgMHgwMCwKKwkweDAzLCAweGZjLCAweDBkLCAweGYyLCAweDI0LCAweDAwLCAweDAwLAorCTB4MDMsIDB4ZmMsIDB4MGUsIDB4ZjEsIDB4MjUsIDB4MDAsIDB4MDAsCisJMHgwMywgMHhmYywgMHgwZiwgMHhmMCwgMHgyNiwgMHgwMCwgMHgwMCwKKwkweDAzLCAweGZjLCAweDE2LCAweGU5LCAweDI4LCAweDAwLCAweDAwLAorCTB4MDMsIDB4ZmMsIDB4NDEsIDB4YmUsIDB4MzcsIDB4MDAsIDB4MDAsCisJMHgwMywgMHhmYywgMHgxMiwgMHhlZCwgMHgyNywgMHgwMCwgMHgwMCwKKwkweDAzLCAweGZjLCAweDExLCAweGVlLCAweDJhLCAweDAwLCAweDAwLAorCTB4MDMsIDB4ZmMsIDB4NDgsIDB4YjcsIDB4MmMsIDB4MDAsIDB4MDAsCisJMHgwMywgMHhmYywgMHg0YSwgMHhiNSwgMHgzYywgMHgwMCwgMHgwMCwKKwkweDAzLCAweGZjLCAweDQ3LCAweGI4LCAweDE1LCAweDAxLCAweDAwLAorCTB4MDMsIDB4ZmMsIDB4NDUsIDB4YmEsIDB4MGIsIDB4MDEsIDB4MDAsCisJMHgwMywgMHhmYywgMHg1ZSwgMHhhMSwgMHg0MywgMHgwMCwgMHgwMCwKKwkweDAzLCAweGZjLCAweDVhLCAweGE1LCAweDQyLCAweDAwLCAweDAwLAorCTB4MDMsIDB4ZmMsIDB4NWIsIDB4YTQsIDB4NGIsIDB4MDAsIDB4MDAsCisJMHgwMywgMHhmYywgMHg1ZiwgMHhhMCwgMHg0ZSwgMHgwMCwgMHgwMCwKK307CisKKy8qIFR3aW5IYW4gQXp1cmVXYXZlIEFELVRVNzAwKDcwNEopICovCitzdGF0aWMgc3RydWN0IGR2Yl91c2JfcmNfa2V5IGFmOTAxNV9yY19rZXlzX3R3aW5oYW5bXSA9IHsKKwl7IDB4MDUsIDB4M2YsIEtFWV9QT1dFUiB9LAorCXsgMHgwMCwgMHgxOSwgS0VZX0ZBVk9SSVRFUyB9LCAgICAvKiBGYXZvcml0ZSBMaXN0ICovCisJeyAweDAwLCAweDA0LCBLRVlfVEVYVCB9LCAgICAgICAgIC8qIFRlbGV0ZXh0ICovCisJeyAweDAwLCAweDBlLCBLRVlfUE9XRVIgfSwKKwl7IDB4MDAsIDB4MGUsIEtFWV9JTkZPIH0sICAgICAgICAgLyogUHJldmlldyAqLworCXsgMHgwMCwgMHgwOCwgS0VZX0VQRyB9LCAgICAgICAgICAvKiBJbmZvL0VQRyAqLworCXsgMHgwMCwgMHgwZiwgS0VZX0xJU1QgfSwgICAgICAgICAvKiBSZWNvcmQgTGlzdCAqLworCXsgMHgwMCwgMHgxZSwgS0VZXzEgfSwKKwl7IDB4MDAsIDB4MWYsIEtFWV8yIH0sCisJeyAweDAwLCAweDIwLCBLRVlfMyB9LAorCXsgMHgwMCwgMHgyMSwgS0VZXzQgfSwKKwl7IDB4MDAsIDB4MjIsIEtFWV81IH0sCisJeyAweDAwLCAweDIzLCBLRVlfNiB9LAorCXsgMHgwMCwgMHgyNCwgS0VZXzcgfSwKKwl7IDB4MDAsIDB4MjUsIEtFWV84IH0sCisJeyAweDAwLCAweDI2LCBLRVlfOSB9LAorCXsgMHgwMCwgMHgyNywgS0VZXzAgfSwKKwl7IDB4MDAsIDB4MjksIEtFWV9DQU5DRUwgfSwgICAgICAgLyogQ2FuY2VsICovCisJeyAweDAwLCAweDRjLCBLRVlfQ0xFQVIgfSwgICAgICAgIC8qIENsZWFyICovCisJeyAweDAwLCAweDJhLCBLRVlfQkFDSyB9LCAgICAgICAgIC8qIEJhY2sgKi8KKwl7IDB4MDAsIDB4MmIsIEtFWV9UQUIgfSwgICAgICAgICAgLyogVGFiICovCisJeyAweDAwLCAweDUyLCBLRVlfVVAgfSwgICAgICAgICAgIC8qIHVwIGFycm93ICovCisJeyAweDAwLCAweDUxLCBLRVlfRE9XTiB9LCAgICAgICAgIC8qIGRvd24gYXJyb3cgKi8KKwl7IDB4MDAsIDB4NGYsIEtFWV9SSUdIVCB9LCAgICAgICAgLyogcmlnaHQgYXJyb3cgKi8KKwl7IDB4MDAsIDB4NTAsIEtFWV9MRUZUIH0sICAgICAgICAgLyogbGVmdCBhcnJvdyAqLworCXsgMHgwMCwgMHgyOCwgS0VZX0VOVEVSIH0sICAgICAgICAvKiBFbnRlciAvIG9rICovCisJeyAweDAyLCAweDUyLCBLRVlfVk9MVU1FVVAgfSwKKwl7IDB4MDIsIDB4NTEsIEtFWV9WT0xVTUVET1dOIH0sCisJeyAweDAwLCAweDRlLCBLRVlfQ0hBTk5FTERPV04gfSwKKwl7IDB4MDAsIDB4NGIsIEtFWV9DSEFOTkVMVVAgfSwKKwl7IDB4MDAsIDB4NGEsIEtFWV9SRUNPUkQgfSwKKwl7IDB4MDEsIDB4MTEsIEtFWV9QTEFZIH0sCisJeyAweDAwLCAweDE3LCBLRVlfUEFVU0UgfSwKKwl7IDB4MDAsIDB4MGMsIEtFWV9SRVdJTkQgfSwgICAgICAgLyogRlIgPDwgKi8KKwl7IDB4MDAsIDB4MTEsIEtFWV9GQVNURk9SV0FSRCB9LCAgLyogRkYgPj4gKi8KKwl7IDB4MDEsIDB4MTUsIEtFWV9QUkVWSU9VUyB9LCAgICAgLyogUmVwbGF5ICovCisJeyAweDAxLCAweDBlLCBLRVlfTkVYVCB9LCAgICAgICAgIC8qIFNraXAgKi8KKwl7IDB4MDAsIDB4MTMsIEtFWV9DQU1FUkEgfSwgICAgICAgLyogQ2FwdHVyZSAqLworCXsgMHgwMSwgMHgwZiwgS0VZX0xBTkdVQUdFIH0sICAgICAvKiBTQVAgKi8KKwl7IDB4MDEsIDB4MTMsIEtFWV9UVjIgfSwgICAgICAgICAgLyogUElQICovCisJeyAweDAwLCAweDFkLCBLRVlfWk9PTSB9LCAgICAgICAgIC8qIEZ1bGwgU2NyZWVuICovCisJeyAweDAxLCAweDE3LCBLRVlfU1VCVElUTEUgfSwgICAgIC8qIFN1YnRpdGxlIC8gQ0MgKi8KKwl7IDB4MDAsIDB4MTAsIEtFWV9NVVRFIH0sCisJeyAweDAxLCAweDE5LCBLRVlfQVVESU8gfSwgICAgICAgIC8qIEwvUiAqLyAvKiBUT0RPIGJldHRlciBldmVudCAqLworCXsgMHgwMSwgMHgxNiwgS0VZX1NMRUVQIH0sICAgICAgICAvKiBIaWJlcm5hdGUgKi8KKwl7IDB4MDEsIDB4MTYsIEtFWV9TV0lUQ0hWSURFT01PREUgfSwKKwkJCQkJICAvKiBBL1YgKi8gLyogVE9ETyBkb2VzIG5vdCB3b3JrICovCisJeyAweDAwLCAweDA2LCBLRVlfQUdBSU4gfSwgICAgICAgIC8qIFJlY2FsbCAqLworCXsgMHgwMSwgMHgxNiwgS0VZX0tQUExVUyB9LCAgICAgICAvKiBab29tKyAqLyAvKiBUT0RPIGRvZXMgbm90IHdvcmsgKi8KKwl7IDB4MDEsIDB4MTYsIEtFWV9LUE1JTlVTIH0sICAgICAgLyogWm9vbS0gKi8gLyogVE9ETyBkb2VzIG5vdCB3b3JrICovCisJeyAweDAyLCAweDE1LCBLRVlfUkVEIH0sCisJeyAweDAyLCAweDBhLCBLRVlfR1JFRU4gfSwKKwl7IDB4MDIsIDB4MWMsIEtFWV9ZRUxMT1cgfSwKKwl7IDB4MDIsIDB4MDUsIEtFWV9CTFVFIH0sCit9OworCitzdGF0aWMgdTggYWY5MDE1X2lyX3RhYmxlX3R3aW5oYW5bXSA9IHsKKwkweDAwLCAweGZmLCAweDE2LCAweGU5LCAweDNmLCAweDA1LCAweDAwLAorCTB4MDAsIDB4ZmYsIDB4MDcsIDB4ZjgsIDB4MTYsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHhmZiwgMHgxNCwgMHhlYiwgMHgxMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweGZmLCAweDFhLCAweGU1LCAweDRkLCAweDAwLCAweDAwLAorCTB4MDAsIDB4ZmYsIDB4NGMsIDB4YjMsIDB4MTcsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHhmZiwgMHgxMiwgMHhlZCwgMHgxMSwgMHgwMCwgMHgwMCwKKwkweDAwLCAweGZmLCAweDQwLCAweGJmLCAweDBjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4ZmYsIDB4MTEsIDB4ZWUsIDB4NGEsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHhmZiwgMHg1NCwgMHhhYiwgMHgxMywgMHgwMCwgMHgwMCwKKwkweDAwLCAweGZmLCAweDQxLCAweGJlLCAweDE1LCAweDAxLCAweDAwLAorCTB4MDAsIDB4ZmYsIDB4NDIsIDB4YmQsIDB4MGUsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHhmZiwgMHg0MywgMHhiYywgMHgxNywgMHgwMSwgMHgwMCwKKwkweDAwLCAweGZmLCAweDUwLCAweGFmLCAweDBmLCAweDAxLCAweDAwLAorCTB4MDAsIDB4ZmYsIDB4NGQsIDB4YjIsIDB4MWQsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHhmZiwgMHg0NywgMHhiOCwgMHgxMywgMHgwMSwgMHgwMCwKKwkweDAwLCAweGZmLCAweDA1LCAweGZhLCAweDRiLCAweDAwLCAweDAwLAorCTB4MDAsIDB4ZmYsIDB4MDIsIDB4ZmQsIDB4NGUsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHhmZiwgMHgwZSwgMHhmMSwgMHgwNiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweGZmLCAweDFlLCAweGUxLCAweDUyLCAweDAyLCAweDAwLAorCTB4MDAsIDB4ZmYsIDB4MGEsIDB4ZjUsIDB4NTEsIDB4MDIsIDB4MDAsCisJMHgwMCwgMHhmZiwgMHgxMCwgMHhlZiwgMHgxMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweGZmLCAweDQ5LCAweGI2LCAweDE5LCAweDAxLCAweDAwLAorCTB4MDAsIDB4ZmYsIDB4MTUsIDB4ZWEsIDB4MjcsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHhmZiwgMHgwMywgMHhmYywgMHgxZSwgMHgwMCwgMHgwMCwKKwkweDAwLCAweGZmLCAweDAxLCAweGZlLCAweDFmLCAweDAwLCAweDAwLAorCTB4MDAsIDB4ZmYsIDB4MDYsIDB4ZjksIDB4MjAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHhmZiwgMHgwOSwgMHhmNiwgMHgyMSwgMHgwMCwgMHgwMCwKKwkweDAwLCAweGZmLCAweDFkLCAweGUyLCAweDIyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4ZmYsIDB4MWYsIDB4ZTAsIDB4MjMsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHhmZiwgMHgwZCwgMHhmMiwgMHgyNCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweGZmLCAweDE5LCAweGU2LCAweDI1LCAweDAwLCAweDAwLAorCTB4MDAsIDB4ZmYsIDB4MWIsIDB4ZTQsIDB4MjYsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHhmZiwgMHgwMCwgMHhmZiwgMHgyYiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweGZmLCAweDRhLCAweGI1LCAweDRjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4ZmYsIDB4NGIsIDB4YjQsIDB4NTIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHhmZiwgMHg1MSwgMHhhZSwgMHg1MSwgMHgwMCwgMHgwMCwKKwkweDAwLCAweGZmLCAweDUyLCAweGFkLCAweDRmLCAweDAwLCAweDAwLAorCTB4MDAsIDB4ZmYsIDB4NGUsIDB4YjEsIDB4NTAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHhmZiwgMHgwYywgMHhmMywgMHgyOSwgMHgwMCwgMHgwMCwKKwkweDAwLCAweGZmLCAweDRmLCAweGIwLCAweDI4LCAweDAwLCAweDAwLAorCTB4MDAsIDB4ZmYsIDB4MTMsIDB4ZWMsIDB4MmEsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHhmZiwgMHgxNywgMHhlOCwgMHgxOSwgMHgwMCwgMHgwMCwKKwkweDAwLCAweGZmLCAweDA0LCAweGZiLCAweDBmLCAweDAwLCAweDAwLAorCTB4MDAsIDB4ZmYsIDB4NDgsIDB4YjcsIDB4MGUsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHhmZiwgMHgwZiwgMHhmMCwgMHgwNCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweGZmLCAweDFjLCAweGUzLCAweDA4LCAweDAwLCAweDAwLAorCTB4MDAsIDB4ZmYsIDB4MTgsIDB4ZTcsIDB4MTUsIDB4MDIsIDB4MDAsCisJMHgwMCwgMHhmZiwgMHg1MywgMHhhYywgMHgwYSwgMHgwMiwgMHgwMCwKKwkweDAwLCAweGZmLCAweDVlLCAweGExLCAweDFjLCAweDAyLCAweDAwLAorCTB4MDAsIDB4ZmYsIDB4NWYsIDB4YTAsIDB4MDUsIDB4MDIsIDB4MDAsCit9OworCisvKiBBLUxpbmsgRFRVKG0pICovCitzdGF0aWMgc3RydWN0IGR2Yl91c2JfcmNfa2V5IGFmOTAxNV9yY19rZXlzX2FfbGlua1tdID0geworCXsgMHgwMCwgMHgxZSwgS0VZXzEgfSwKKwl7IDB4MDAsIDB4MWYsIEtFWV8yIH0sCisJeyAweDAwLCAweDIwLCBLRVlfMyB9LAorCXsgMHgwMCwgMHgyMSwgS0VZXzQgfSwKKwl7IDB4MDAsIDB4MjIsIEtFWV81IH0sCisJeyAweDAwLCAweDIzLCBLRVlfNiB9LAorCXsgMHgwMCwgMHgyNCwgS0VZXzcgfSwKKwl7IDB4MDAsIDB4MjUsIEtFWV84IH0sCisJeyAweDAwLCAweDI2LCBLRVlfOSB9LAorCXsgMHgwMCwgMHgyNywgS0VZXzAgfSwKKwl7IDB4MDAsIDB4MmUsIEtFWV9DSEFOTkVMVVAgfSwKKwl7IDB4MDAsIDB4MmQsIEtFWV9DSEFOTkVMRE9XTiB9LAorCXsgMHgwNCwgMHgyOCwgS0VZX1pPT00gfSwKKwl7IDB4MDAsIDB4NDEsIEtFWV9NVVRFIH0sCisJeyAweDAwLCAweDQyLCBLRVlfVk9MVU1FRE9XTiB9LAorCXsgMHgwMCwgMHg0MywgS0VZX1ZPTFVNRVVQIH0sCisJeyAweDAwLCAweDQ0LCBLRVlfR09UTyB9LCAgICAgICAgIC8qIGp1bXAgKi8KKwl7IDB4MDUsIDB4NDUsIEtFWV9QT1dFUiB9LAorfTsKKworc3RhdGljIHU4IGFmOTAxNV9pcl90YWJsZV9hX2xpbmtbXSA9IHsKKwkweDA4LCAweGY3LCAweDEyLCAweGVkLCAweDQ1LCAweDA1LCAweDAwLCAvKiBwb3dlciAqLworCTB4MDgsIDB4ZjcsIDB4MWEsIDB4ZTUsIDB4NDEsIDB4MDAsIDB4MDAsIC8qIG11dGUgKi8KKwkweDA4LCAweGY3LCAweDAxLCAweGZlLCAweDFlLCAweDAwLCAweDAwLCAvKiAxICovCisJMHgwOCwgMHhmNywgMHgxYywgMHhlMywgMHgyMSwgMHgwMCwgMHgwMCwgLyogNCAqLworCTB4MDgsIDB4ZjcsIDB4MDMsIDB4ZmMsIDB4MjQsIDB4MDAsIDB4MDAsIC8qIDcgKi8KKwkweDA4LCAweGY3LCAweDA1LCAweGZhLCAweDI4LCAweDA0LCAweDAwLCAvKiB6b29tICovCisJMHgwOCwgMHhmNywgMHgwMCwgMHhmZiwgMHg0MywgMHgwMCwgMHgwMCwgLyogdm9sdW1lIHVwICovCisJMHgwOCwgMHhmNywgMHgxNiwgMHhlOSwgMHg0MiwgMHgwMCwgMHgwMCwgLyogdm9sdW1lIGRvd24gKi8KKwkweDA4LCAweGY3LCAweDBmLCAweGYwLCAweDFmLCAweDAwLCAweDAwLCAvKiAyICovCisJMHgwOCwgMHhmNywgMHgwZCwgMHhmMiwgMHgyMiwgMHgwMCwgMHgwMCwgLyogNSAqLworCTB4MDgsIDB4ZjcsIDB4MWIsIDB4ZTQsIDB4MjUsIDB4MDAsIDB4MDAsIC8qIDggKi8KKwkweDA4LCAweGY3LCAweDA2LCAweGY5LCAweDI3LCAweDAwLCAweDAwLCAvKiAwICovCisJMHgwOCwgMHhmNywgMHgxNCwgMHhlYiwgMHgyZSwgMHgwMCwgMHgwMCwgLyogY2hhbm5lbCB1cCAqLworCTB4MDgsIDB4ZjcsIDB4MWQsIDB4ZTIsIDB4MmQsIDB4MDAsIDB4MDAsIC8qIGNoYW5uZWwgZG93biAqLworCTB4MDgsIDB4ZjcsIDB4MDIsIDB4ZmQsIDB4MjAsIDB4MDAsIDB4MDAsIC8qIDMgKi8KKwkweDA4LCAweGY3LCAweDE4LCAweGU3LCAweDIzLCAweDAwLCAweDAwLCAvKiA2ICovCisJMHgwOCwgMHhmNywgMHgwNCwgMHhmYiwgMHgyNiwgMHgwMCwgMHgwMCwgLyogOSAqLworCTB4MDgsIDB4ZjcsIDB4MDcsIDB4ZjgsIDB4NDQsIDB4MDAsIDB4MDAsIC8qIGp1bXAgKi8KK307CisKKy8qIE1TSSBESUdJVk9YIG1pbmkgSUkgVjMuMCAqLworc3RhdGljIHN0cnVjdCBkdmJfdXNiX3JjX2tleSBhZjkwMTVfcmNfa2V5c19tc2lbXSA9IHsKKwl7IDB4MDAsIDB4MWUsIEtFWV8xIH0sCisJeyAweDAwLCAweDFmLCBLRVlfMiB9LAorCXsgMHgwMCwgMHgyMCwgS0VZXzMgfSwKKwl7IDB4MDAsIDB4MjEsIEtFWV80IH0sCisJeyAweDAwLCAweDIyLCBLRVlfNSB9LAorCXsgMHgwMCwgMHgyMywgS0VZXzYgfSwKKwl7IDB4MDAsIDB4MjQsIEtFWV83IH0sCisJeyAweDAwLCAweDI1LCBLRVlfOCB9LAorCXsgMHgwMCwgMHgyNiwgS0VZXzkgfSwKKwl7IDB4MDAsIDB4MjcsIEtFWV8wIH0sCisJeyAweDAzLCAweDBmLCBLRVlfQ0hBTk5FTFVQIH0sCisJeyAweDAzLCAweDBlLCBLRVlfQ0hBTk5FTERPV04gfSwKKwl7IDB4MDAsIDB4NDIsIEtFWV9WT0xVTUVET1dOIH0sCisJeyAweDAwLCAweDQzLCBLRVlfVk9MVU1FVVAgfSwKKwl7IDB4MDUsIDB4NDUsIEtFWV9QT1dFUiB9LAorCXsgMHgwMCwgMHg1MiwgS0VZX1VQIH0sICAgICAgICAgICAvKiB1cCAqLworCXsgMHgwMCwgMHg1MSwgS0VZX0RPV04gfSwgICAgICAgICAvKiBkb3duICovCisJeyAweDAwLCAweDI4LCBLRVlfRU5URVIgfSwKK307CisKK3N0YXRpYyB1OCBhZjkwMTVfaXJfdGFibGVfbXNpW10gPSB7CisJMHgwMywgMHhmYywgMHgxNywgMHhlOCwgMHg0NSwgMHgwNSwgMHgwMCwgLyogcG93ZXIgKi8KKwkweDAzLCAweGZjLCAweDBkLCAweGYyLCAweDUxLCAweDAwLCAweDAwLCAvKiBkb3duICovCisJMHgwMywgMHhmYywgMHgwMywgMHhmYywgMHg1MiwgMHgwMCwgMHgwMCwgLyogdXAgKi8KKwkweDAzLCAweGZjLCAweDFhLCAweGU1LCAweDFlLCAweDAwLCAweDAwLCAvKiAxICovCisJMHgwMywgMHhmYywgMHgwMiwgMHhmZCwgMHgxZiwgMHgwMCwgMHgwMCwgLyogMiAqLworCTB4MDMsIDB4ZmMsIDB4MDQsIDB4ZmIsIDB4MjAsIDB4MDAsIDB4MDAsIC8qIDMgKi8KKwkweDAzLCAweGZjLCAweDFjLCAweGUzLCAweDIxLCAweDAwLCAweDAwLCAvKiA0ICovCisJMHgwMywgMHhmYywgMHgwOCwgMHhmNywgMHgyMiwgMHgwMCwgMHgwMCwgLyogNSAqLworCTB4MDMsIDB4ZmMsIDB4MWQsIDB4ZTIsIDB4MjMsIDB4MDAsIDB4MDAsIC8qIDYgKi8KKwkweDAzLCAweGZjLCAweDExLCAweGVlLCAweDI0LCAweDAwLCAweDAwLCAvKiA3ICovCisJMHgwMywgMHhmYywgMHgwYiwgMHhmNCwgMHgyNSwgMHgwMCwgMHgwMCwgLyogOCAqLworCTB4MDMsIDB4ZmMsIDB4MTAsIDB4ZWYsIDB4MjYsIDB4MDAsIDB4MDAsIC8qIDkgKi8KKwkweDAzLCAweGZjLCAweDA5LCAweGY2LCAweDI3LCAweDAwLCAweDAwLCAvKiAwICovCisJMHgwMywgMHhmYywgMHgxNCwgMHhlYiwgMHg0MywgMHgwMCwgMHgwMCwgLyogdm9sdW1lIHVwICovCisJMHgwMywgMHhmYywgMHgxZiwgMHhlMCwgMHg0MiwgMHgwMCwgMHgwMCwgLyogdm9sdW1lIGRvd24gKi8KKwkweDAzLCAweGZjLCAweDE1LCAweGVhLCAweDBmLCAweDAzLCAweDAwLCAvKiBjaGFubmVsIHVwICovCisJMHgwMywgMHhmYywgMHgwNSwgMHhmYSwgMHgwZSwgMHgwMywgMHgwMCwgLyogY2hhbm5lbCBkb3duICovCisJMHgwMywgMHhmYywgMHgxNiwgMHhlOSwgMHgyOCwgMHgwMCwgMHgwMCwgLyogZW50ZXIgKi8KK307CisKKy8qIE1ZR0lDVFYgVTcxOCAqLworc3RhdGljIHN0cnVjdCBkdmJfdXNiX3JjX2tleSBhZjkwMTVfcmNfa2V5c19teWdpY3R2W10gPSB7CisJeyAweDAwLCAweDNkLCBLRVlfU1dJVENIVklERU9NT0RFIH0sCisJCQkJCSAgLyogVFYgLyBBViAqLworCXsgMHgwNSwgMHg0NSwgS0VZX1BPV0VSIH0sCisJeyAweDAwLCAweDFlLCBLRVlfMSB9LAorCXsgMHgwMCwgMHgxZiwgS0VZXzIgfSwKKwl7IDB4MDAsIDB4MjAsIEtFWV8zIH0sCisJeyAweDAwLCAweDIxLCBLRVlfNCB9LAorCXsgMHgwMCwgMHgyMiwgS0VZXzUgfSwKKwl7IDB4MDAsIDB4MjMsIEtFWV82IH0sCisJeyAweDAwLCAweDI0LCBLRVlfNyB9LAorCXsgMHgwMCwgMHgyNSwgS0VZXzggfSwKKwl7IDB4MDAsIDB4MjYsIEtFWV85IH0sCisJeyAweDAwLCAweDI3LCBLRVlfMCB9LAorCXsgMHgwMCwgMHg0MSwgS0VZX01VVEUgfSwKKwl7IDB4MDAsIDB4MmEsIEtFWV9FU0MgfSwgICAgICAgICAgLyogRXNjICovCisJeyAweDAwLCAweDJlLCBLRVlfQ0hBTk5FTFVQIH0sCisJeyAweDAwLCAweDJkLCBLRVlfQ0hBTk5FTERPV04gfSwKKwl7IDB4MDAsIDB4NDIsIEtFWV9WT0xVTUVET1dOIH0sCisJeyAweDAwLCAweDQzLCBLRVlfVk9MVU1FVVAgfSwKKwl7IDB4MDAsIDB4NTIsIEtFWV9VUCB9LCAgICAgICAgICAgLyogdXAgYXJyb3cgKi8KKwl7IDB4MDAsIDB4NTEsIEtFWV9ET1dOIH0sICAgICAgICAgLyogZG93biBhcnJvdyAqLworCXsgMHgwMCwgMHg0ZiwgS0VZX1JJR0hUIH0sICAgICAgICAvKiByaWdodCBhcnJvdyAqLworCXsgMHgwMCwgMHg1MCwgS0VZX0xFRlQgfSwgICAgICAgICAvKiBsZWZ0IGFycm93ICovCisJeyAweDAwLCAweDI4LCBLRVlfRU5URVIgfSwgICAgICAgIC8qIG9rICovCisJeyAweDAxLCAweDE1LCBLRVlfUkVDT1JEIH0sCisJeyAweDAzLCAweDEzLCBLRVlfUExBWSB9LAorCXsgMHgwMSwgMHgxMywgS0VZX1BBVVNFIH0sCisJeyAweDAxLCAweDE2LCBLRVlfU1RPUCB9LAorCXsgMHgwMywgMHgwNywgS0VZX1JFV0lORCB9LCAgICAgICAvKiBGUiA8PCAqLworCXsgMHgwMywgMHgwOSwgS0VZX0ZBU1RGT1JXQVJEIH0sICAvKiBGRiA+PiAqLworCXsgMHgwMCwgMHgzYiwgS0VZX1RJTUUgfSwgICAgICAgICAvKiBUaW1lU2hpZnQgKi8KKwl7IDB4MDAsIDB4M2UsIEtFWV9DQU1FUkEgfSwgICAgICAgLyogU25hcHNob3QgKi8KKwl7IDB4MDMsIDB4MTYsIEtFWV9DWUNMRVdJTkRPV1MgfSwgLyogeWVsbG93LCBtaW4gLyBtYXggKi8KKwl7IDB4MDAsIDB4MDAsIEtFWV9aT09NIH0sICAgICAgICAgLyogJ3NlbGVjdCcgKD8pICovCisJeyAweDAzLCAweDE2LCBLRVlfU0hVRkZMRSB9LCAgICAgIC8qIFNodWZmbGUgKi8KKwl7IDB4MDMsIDB4NDUsIEtFWV9QT1dFUiB9LAorfTsKKworc3RhdGljIHU4IGFmOTAxNV9pcl90YWJsZV9teWdpY3R2W10gPSB7CisJMHgwMiwgMHhiZCwgMHgwYywgMHhmMywgMHgzZCwgMHgwMCwgMHgwMCwgLyogVFYgLyBBViAqLworCTB4MDIsIDB4YmQsIDB4MTQsIDB4ZWIsIDB4NDUsIDB4MDUsIDB4MDAsIC8qIHBvd2VyICovCisJMHgwMiwgMHhiZCwgMHgwMCwgMHhmZiwgMHgxZSwgMHgwMCwgMHgwMCwgLyogMSAqLworCTB4MDIsIDB4YmQsIDB4MDEsIDB4ZmUsIDB4MWYsIDB4MDAsIDB4MDAsIC8qIDIgKi8KKwkweDAyLCAweGJkLCAweDAyLCAweGZkLCAweDIwLCAweDAwLCAweDAwLCAvKiAzICovCisJMHgwMiwgMHhiZCwgMHgwMywgMHhmYywgMHgyMSwgMHgwMCwgMHgwMCwgLyogNCAqLworCTB4MDIsIDB4YmQsIDB4MDQsIDB4ZmIsIDB4MjIsIDB4MDAsIDB4MDAsIC8qIDUgKi8KKwkweDAyLCAweGJkLCAweDA1LCAweGZhLCAweDIzLCAweDAwLCAweDAwLCAvKiA2ICovCisJMHgwMiwgMHhiZCwgMHgwNiwgMHhmOSwgMHgyNCwgMHgwMCwgMHgwMCwgLyogNyAqLworCTB4MDIsIDB4YmQsIDB4MDcsIDB4ZjgsIDB4MjUsIDB4MDAsIDB4MDAsIC8qIDggKi8KKwkweDAyLCAweGJkLCAweDA4LCAweGY3LCAweDI2LCAweDAwLCAweDAwLCAvKiA5ICovCisJMHgwMiwgMHhiZCwgMHgwOSwgMHhmNiwgMHgyNywgMHgwMCwgMHgwMCwgLyogMCAqLworCTB4MDIsIDB4YmQsIDB4MGEsIDB4ZjUsIDB4NDEsIDB4MDAsIDB4MDAsIC8qIG11dGUgKi8KKwkweDAyLCAweGJkLCAweDFjLCAweGUzLCAweDJhLCAweDAwLCAweDAwLCAvKiBlc2MgKi8KKwkweDAyLCAweGJkLCAweDFmLCAweGUwLCAweDQzLCAweDAwLCAweDAwLCAvKiB2b2x1bWUgdXAgKi8KKwkweDAyLCAweGJkLCAweDEyLCAweGVkLCAweDUyLCAweDAwLCAweDAwLCAvKiB1cCBhcnJvdyAqLworCTB4MDIsIDB4YmQsIDB4MTEsIDB4ZWUsIDB4NTAsIDB4MDAsIDB4MDAsIC8qIGxlZnQgYXJyb3cgKi8KKwkweDAyLCAweGJkLCAweDE1LCAweGVhLCAweDI4LCAweDAwLCAweDAwLCAvKiBvayAqLworCTB4MDIsIDB4YmQsIDB4MTAsIDB4ZWYsIDB4NGYsIDB4MDAsIDB4MDAsIC8qIHJpZ2h0IGFycm93ICovCisJMHgwMiwgMHhiZCwgMHgxMywgMHhlYywgMHg1MSwgMHgwMCwgMHgwMCwgLyogZG93biBhcnJvdyAqLworCTB4MDIsIDB4YmQsIDB4MGUsIDB4ZjEsIDB4NDIsIDB4MDAsIDB4MDAsIC8qIHZvbHVtZSBkb3duICovCisJMHgwMiwgMHhiZCwgMHgxOSwgMHhlNiwgMHgxNSwgMHgwMSwgMHgwMCwgLyogcmVjb3JkICovCisJMHgwMiwgMHhiZCwgMHgxZSwgMHhlMSwgMHgxMywgMHgwMywgMHgwMCwgLyogcGxheSAqLworCTB4MDIsIDB4YmQsIDB4MTYsIDB4ZTksIDB4MTYsIDB4MDEsIDB4MDAsIC8qIHN0b3AgKi8KKwkweDAyLCAweGJkLCAweDBiLCAweGY0LCAweDI4LCAweDA0LCAweDAwLCAvKiB5ZWxsb3csIG1pbiAvIG1heCAqLworCTB4MDIsIDB4YmQsIDB4MGYsIDB4ZjAsIDB4M2IsIDB4MDAsIDB4MDAsIC8qIHRpbWUgc2hpZnQgKi8KKwkweDAyLCAweGJkLCAweDE4LCAweGU3LCAweDJlLCAweDAwLCAweDAwLCAvKiBjaGFubmVsIHVwICovCisJMHgwMiwgMHhiZCwgMHgxYSwgMHhlNSwgMHgyZCwgMHgwMCwgMHgwMCwgLyogY2hhbm5lbCBkb3duICovCisJMHgwMiwgMHhiZCwgMHgxNywgMHhlOCwgMHgzZSwgMHgwMCwgMHgwMCwgLyogc25hcHNob3QgKi8KKwkweDAyLCAweGJkLCAweDQwLCAweGJmLCAweDEzLCAweDAxLCAweDAwLCAvKiBwYXVzZSAqLworCTB4MDIsIDB4YmQsIDB4NDEsIDB4YmUsIDB4MDksIDB4MDMsIDB4MDAsIC8qIEZGID4+ICovCisJMHgwMiwgMHhiZCwgMHg0MiwgMHhiZCwgMHgwNywgMHgwMywgMHgwMCwgLyogRlIgPDwgKi8KKwkweDAyLCAweGJkLCAweDQzLCAweGJjLCAweDAwLCAweDAwLCAweDAwLCAvKiAnc2VsZWN0JyAoPykgKi8KKwkweDAyLCAweGJkLCAweDQ0LCAweGJiLCAweDE2LCAweDAzLCAweDAwLCAvKiBzaHVmZmxlICovCisJMHgwMiwgMHhiZCwgMHg0NSwgMHhiYSwgMHg0NSwgMHgwMywgMHgwMCwgLyogcG93ZXIgKi8KK307CisKKy8qIEtXb3JsZCBQbHVzVFYgRHVhbCBEVkItVCBTdGljayAoRFZCLVQgMzk5VSkgKi8KK3N0YXRpYyB1OCBhZjkwMTVfaXJfdGFibGVfa3dvcmxkW10gPSB7CisJMHg4NiwgMHg2YiwgMHgwYywgMHhmMywgMHgyZSwgMHgwNywgMHgwMCwKKwkweDg2LCAweDZiLCAweDE2LCAweGU5LCAweDJkLCAweDA3LCAweDAwLAorCTB4ODYsIDB4NmIsIDB4MWQsIDB4ZTIsIDB4MzcsIDB4MDcsIDB4MDAsCisJMHg4NiwgMHg2YiwgMHgwMCwgMHhmZiwgMHgxZSwgMHgwNywgMHgwMCwKKwkweDg2LCAweDZiLCAweDAxLCAweGZlLCAweDFmLCAweDA3LCAweDAwLAorCTB4ODYsIDB4NmIsIDB4MDIsIDB4ZmQsIDB4MjAsIDB4MDcsIDB4MDAsCisJMHg4NiwgMHg2YiwgMHgwMywgMHhmYywgMHgyMSwgMHgwNywgMHgwMCwKKwkweDg2LCAweDZiLCAweDA0LCAweGZiLCAweDIyLCAweDA3LCAweDAwLAorCTB4ODYsIDB4NmIsIDB4MDUsIDB4ZmEsIDB4MjMsIDB4MDcsIDB4MDAsCisJMHg4NiwgMHg2YiwgMHgwNiwgMHhmOSwgMHgyNCwgMHgwNywgMHgwMCwKKwkweDg2LCAweDZiLCAweDA3LCAweGY4LCAweDI1LCAweDA3LCAweDAwLAorCTB4ODYsIDB4NmIsIDB4MDgsIDB4ZjcsIDB4MjYsIDB4MDcsIDB4MDAsCisJMHg4NiwgMHg2YiwgMHgwOSwgMHhmNiwgMHg0ZCwgMHgwNywgMHgwMCwKKwkweDg2LCAweDZiLCAweDBhLCAweGY1LCAweDRlLCAweDA3LCAweDAwLAorCTB4ODYsIDB4NmIsIDB4MTQsIDB4ZWIsIDB4NGYsIDB4MDcsIDB4MDAsCisJMHg4NiwgMHg2YiwgMHgxZSwgMHhlMSwgMHg1MCwgMHgwNywgMHgwMCwKKwkweDg2LCAweDZiLCAweDE3LCAweGU4LCAweDUyLCAweDA3LCAweDAwLAorCTB4ODYsIDB4NmIsIDB4MWYsIDB4ZTAsIDB4NTEsIDB4MDcsIDB4MDAsCisJMHg4NiwgMHg2YiwgMHgwZSwgMHhmMSwgMHgwYiwgMHgwNywgMHgwMCwKKwkweDg2LCAweDZiLCAweDIwLCAweGRmLCAweDBjLCAweDA3LCAweDAwLAorCTB4ODYsIDB4NmIsIDB4NDIsIDB4YmQsIDB4MGQsIDB4MDcsIDB4MDAsCisJMHg4NiwgMHg2YiwgMHgwYiwgMHhmNCwgMHgwZSwgMHgwNywgMHgwMCwKKwkweDg2LCAweDZiLCAweDQzLCAweGJjLCAweDBmLCAweDA3LCAweDAwLAorCTB4ODYsIDB4NmIsIDB4MTAsIDB4ZWYsIDB4MTAsIDB4MDcsIDB4MDAsCisJMHg4NiwgMHg2YiwgMHgyMSwgMHhkZSwgMHgxMSwgMHgwNywgMHgwMCwKKwkweDg2LCAweDZiLCAweDEzLCAweGVjLCAweDEyLCAweDA3LCAweDAwLAorCTB4ODYsIDB4NmIsIDB4MTEsIDB4ZWUsIDB4MTMsIDB4MDcsIDB4MDAsCisJMHg4NiwgMHg2YiwgMHgxMiwgMHhlZCwgMHgxNCwgMHgwNywgMHgwMCwKKwkweDg2LCAweDZiLCAweDE5LCAweGU2LCAweDE1LCAweDA3LCAweDAwLAorCTB4ODYsIDB4NmIsIDB4MWEsIDB4ZTUsIDB4MTYsIDB4MDcsIDB4MDAsCisJMHg4NiwgMHg2YiwgMHgxYiwgMHhlNCwgMHgxNywgMHgwNywgMHgwMCwKKwkweDg2LCAweDZiLCAweDRiLCAweGI0LCAweDE4LCAweDA3LCAweDAwLAorCTB4ODYsIDB4NmIsIDB4NDAsIDB4YmYsIDB4MTksIDB4MDcsIDB4MDAsCisJMHg4NiwgMHg2YiwgMHg0NCwgMHhiYiwgMHgxYSwgMHgwNywgMHgwMCwKKwkweDg2LCAweDZiLCAweDQxLCAweGJlLCAweDFiLCAweDA3LCAweDAwLAorCTB4ODYsIDB4NmIsIDB4MjIsIDB4ZGQsIDB4MWMsIDB4MDcsIDB4MDAsCisJMHg4NiwgMHg2YiwgMHgxNSwgMHhlYSwgMHgxZCwgMHgwNywgMHgwMCwKKwkweDg2LCAweDZiLCAweDBmLCAweGYwLCAweDNmLCAweDA3LCAweDAwLAorCTB4ODYsIDB4NmIsIDB4MWMsIDB4ZTMsIDB4NDAsIDB4MDcsIDB4MDAsCisJMHg4NiwgMHg2YiwgMHg0YSwgMHhiNSwgMHg0MSwgMHgwNywgMHgwMCwKKwkweDg2LCAweDZiLCAweDQ4LCAweGI3LCAweDQyLCAweDA3LCAweDAwLAorCTB4ODYsIDB4NmIsIDB4NDksIDB4YjYsIDB4NDMsIDB4MDcsIDB4MDAsCisJMHg4NiwgMHg2YiwgMHgxOCwgMHhlNywgMHg0NCwgMHgwNywgMHgwMCwKKwkweDg2LCAweDZiLCAweDIzLCAweGRjLCAweDQ1LCAweDA3LCAweDAwLAorfTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2FueXNlZS5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9hbnlzZWUuYwppbmRleCAyZjQwOGQyLi5jNzg2MzU5IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2FueXNlZS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvYW55c2VlLmMKQEAgLTQxLDYgKzQxLDkgQEAKIHN0YXRpYyBpbnQgZHZiX3VzYl9hbnlzZWVfZGVidWc7CiBtb2R1bGVfcGFyYW1fbmFtZWQoZGVidWcsIGR2Yl91c2JfYW55c2VlX2RlYnVnLCBpbnQsIDA2NDQpOwogTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgInNldCBkZWJ1Z2dpbmcgbGV2ZWwiIERWQl9VU0JfREVCVUdfU1RBVFVTKTsKK2ludCBkdmJfdXNiX2FueXNlZV9kZWxzeXM7Cittb2R1bGVfcGFyYW1fbmFtZWQoZGVsc3lzLCBkdmJfdXNiX2FueXNlZV9kZWxzeXMsIGludCwgMDY0NCk7CitNT0RVTEVfUEFSTV9ERVNDKGRlbHN5cywgInNlbGVjdCBkZWxpdmVyeSBtb2RlICgwPURWQi1DLCAxPURWQi1UKSIpOwogRFZCX0RFRklORV9NT0RfT1BUX0FEQVBURVJfTlIoYWRhcHRlcl9ucik7CiAKIHN0YXRpYyBzdHJ1Y3QgbXV0ZXggYW55c2VlX3VzYl9tdXRleDsKQEAgLTE3OCwxNCArMTgxLDE0IEBACiAJCQlpbmMgPSAxOwogCQl9CiAJCWlmIChyZXQpCi0JCQlyZXR1cm4gcmV0OworCQkJYnJlYWs7CiAKIAkJaSArPSBpbmM7CiAJfQogCiAJbXV0ZXhfdW5sb2NrKCZkLT5pMmNfbXV0ZXgpOwogCi0JcmV0dXJuIGk7CisJcmV0dXJuIHJldCA/IHJldCA6IGk7CiB9CiAKIHN0YXRpYyB1MzIgYW55c2VlX2kyY19mdW5jKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlcikKQEAgLTI3Miw5ICsyNzUsMTEgQEAKIAkgICAgICBtb2RlbCAgICAgIGRlbW9kICAgICBodyAgZmlybXdhcmUKIAkgICAxLiBFMzAgICAgICAgIE1UMzUyICAgICAwMiAgMC4yLjEKIAkgICAyLiBFMzAgICAgICAgIFpMMTAzNTMgICAwMiAgMC4yLjEKLQkgICAzLiBFMzAgUGx1cyAgIFpMMTAzNTMgICAwNiAgMC4xLjAKLQkgICA0LiBFMzBDIFBsdXMgIFREQTEwMDIzICAwYSAgMC4xLjAgICAgcmV2IDAuMgotCSAgIDQuIEUzMEMgUGx1cyAgVERBMTAwMjMgIDBmICAwLjEuMiAgICByZXYgMC40CisJICAgMy4gRTMwIENvbWJvICBaTDEwMzUzICAgMGYgIDAuMS4yICAgIERWQi1UL0MgY29tYm8KKwkgICA0LiBFMzAgUGx1cyAgIFpMMTAzNTMgICAwNiAgMC4xLjAKKwkgICA1LiBFMzBDIFBsdXMgIFREQTEwMDIzICAwYSAgMC4xLjAgICAgcmV2IDAuMgorCSAgICAgIEUzMEMgUGx1cyAgVERBMTAwMjMgIDBmICAwLjEuMiAgICByZXYgMC40CisJICAgICAgRTMwIENvbWJvICBUREExMDAyMyAgMGYgIDAuMS4yICAgIERWQi1UL0MgY29tYm8KIAkqLwogCiAJLyogWmFybGluayBNVDM1MiBEVkItVCBkZW1vZCBpbnNpZGUgb2YgU2Ftc3VuZyBETk9TNDA0WkgxMDJBIE5JTSAqLwpAQCAtMjkzLDYgKzI5OCwyMSBAQAogCQlyZXR1cm4gMDsKIAl9CiAKKwkvKiBmb3IgRTMwIENvbWJvIFBsdXMgRFZCLVQgZGVtb2R1bGF0b3IgKi8KKwlpZiAoZHZiX3VzYl9hbnlzZWVfZGVsc3lzKSB7CisJCXJldCA9IGFueXNlZV93cml0ZV9yZWcoYWRhcC0+ZGV2LCAweGIwLCAweDAxKTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisKKwkJLyogWmFybGluayBaTDEwMzUzIERWQi1UIGRlbW9kICovCisJCWFkYXAtPmZlID0gZHZiX2F0dGFjaCh6bDEwMzUzX2F0dGFjaCwgJmFueXNlZV96bDEwMzUzX2NvbmZpZywKKwkJCQkgICAgICAmYWRhcC0+ZGV2LT5pMmNfYWRhcCk7CisJCWlmIChhZGFwLT5mZSAhPSBOVUxMKSB7CisJCQlzdGF0ZS0+dHVuZXIgPSBEVkJfUExMX1NBTVNVTkdfRFRPUzQwM0lIMTAyQTsKKwkJCXJldHVybiAwOworCQl9CisJfQorCiAJLyogY29ubmVjdCBkZW1vZCBvbiBJTyBwb3J0IEQgZm9yIFREQTEwMDIzICYgWkwxMDM1MyAqLwogCXJldCA9IGFueXNlZV93cml0ZV9yZWcoYWRhcC0+ZGV2LCAweGIwLCAweDI1KTsKIAlpZiAocmV0KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9jaW5lcmd5VDItY29yZS5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9jaW5lcmd5VDItY29yZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNhYzlmNzQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2NpbmVyZ3lUMi1jb3JlLmMKQEAgLTAsMCArMSwyNjggQEAKKy8qCisgKiBUZXJyYVRlYyBDaW5lcmd5IFQyL3FhbnUgVVNCMiBEVkItVCBhZGFwdGVyLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBUb21pIE9yYXZhICh0b21pbW9AbmNpcmNsZS5udWxsbmV0LmZpKQorICoKKyAqIEJhc2VkIG9uIHRoZSBkdmItdXNiLWZyYW1ld29yayBjb2RlIGFuZCB0aGUKKyAqIG9yaWdpbmFsIFRlcnJhdGVjIENpbmVyZ3kgVDIgZHJpdmVyIGJ5OgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNCBEYW5pZWwgTWFjayA8ZGFuaWVsQHFhbnUuZGU+IGFuZAorICoJCSAgICBIb2xnZXIgV2FlY2h0bGVyIDxob2xnZXJAcWFudS5kZT4KKyAqCisgKiAgUHJvdG9jb2wgU3BlYyBwdWJsaXNoZWQgb24gaHR0cDovL3FhbnUuZGUvc3BlY3MvdGVycmF0ZWNfY2luZXJneVQyLnBkZgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICoKKyAqLworCisjaW5jbHVkZSAiY2luZXJneVQyLmgiCisKKworLyogZGVidWcgKi8KK2ludCBkdmJfdXNiX2NpbmVyZ3l0Ml9kZWJ1ZzsKK2ludCBkaXNhYmxlX3JlbW90ZTsKKworbW9kdWxlX3BhcmFtX25hbWVkKGRlYnVnLCBkdmJfdXNiX2NpbmVyZ3l0Ml9kZWJ1ZywgaW50LCAwNjQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJzZXQgZGVidWdnaW5nIGxldmVsICgxPWluZm8sIHhmZXI9MiwgcmM9NCAiCisJCSIob3ItYWJsZSkpLiIpOworCitEVkJfREVGSU5FX01PRF9PUFRfQURBUFRFUl9OUihhZGFwdGVyX25yKTsKKworc3RydWN0IGNpbmVyZ3l0Ml9zdGF0ZSB7CisJdTggcmNfY291bnRlcjsKK307CisKKy8qIFdlIGFyZSBtaXNzaW5nIGEgcmVsZWFzZSBob29rIHdpdGggdXNiX2RldmljZSBkYXRhICovCitzdHJ1Y3QgZHZiX3VzYl9kZXZpY2UgKmNpbmVyZ3l0Ml91c2JfZGV2aWNlOworCitzdGF0aWMgc3RydWN0IGR2Yl91c2JfZGV2aWNlX3Byb3BlcnRpZXMgY2luZXJneXQyX3Byb3BlcnRpZXM7CisKK3N0YXRpYyBpbnQgY2luZXJneXQyX3N0cmVhbWluZ19jdHJsKHN0cnVjdCBkdmJfdXNiX2FkYXB0ZXIgKmFkYXAsIGludCBlbmFibGUpCit7CisJY2hhciBidWZbXSA9IHsgQ0lORVJHWVQyX0VQMV9DT05UUk9MX1NUUkVBTV9UUkFOU0ZFUiwgZW5hYmxlID8gMSA6IDAgfTsKKwljaGFyIHJlc3VsdFs2NF07CisJcmV0dXJuIGR2Yl91c2JfZ2VuZXJpY19ydyhhZGFwLT5kZXYsIGJ1Ziwgc2l6ZW9mKGJ1ZiksIHJlc3VsdCwKKwkJCQlzaXplb2YocmVzdWx0KSwgMCk7Cit9CisKK3N0YXRpYyBpbnQgY2luZXJneXQyX3Bvd2VyX2N0cmwoc3RydWN0IGR2Yl91c2JfZGV2aWNlICpkLCBpbnQgZW5hYmxlKQoreworCWNoYXIgYnVmW10gPSB7IENJTkVSR1lUMl9FUDFfU0xFRVBfTU9ERSwgZW5hYmxlID8gMCA6IDEgfTsKKwljaGFyIHN0YXRlWzNdOworCXJldHVybiBkdmJfdXNiX2dlbmVyaWNfcncoZCwgYnVmLCBzaXplb2YoYnVmKSwgc3RhdGUsIHNpemVvZihzdGF0ZSksIDApOworfQorCitzdGF0aWMgaW50IGNpbmVyZ3l0Ml9mcm9udGVuZF9hdHRhY2goc3RydWN0IGR2Yl91c2JfYWRhcHRlciAqYWRhcCkKK3sKKwljaGFyIHF1ZXJ5W10gPSB7IENJTkVSR1lUMl9FUDFfR0VUX0ZJUk1XQVJFX1ZFUlNJT04gfTsKKwljaGFyIHN0YXRlWzNdOworCWludCByZXQ7CisKKwlhZGFwLT5mZSA9IGNpbmVyZ3l0Ml9mZV9hdHRhY2goYWRhcC0+ZGV2KTsKKworCXJldCA9IGR2Yl91c2JfZ2VuZXJpY19ydyhhZGFwLT5kZXYsIHF1ZXJ5LCBzaXplb2YocXVlcnkpLCBzdGF0ZSwKKwkJCQlzaXplb2Yoc3RhdGUpLCAwKTsKKwlpZiAocmV0IDwgMCkgeworCQlkZWJfcmMoImNpbmVyZ3l0Ml9wb3dlcl9jdHJsKCkgRmFpbGVkIHRvIHJldHJpZXZlIHNsZWVwICIKKwkJCSJzdGF0ZSBpbmZvXG4iKTsKKwl9CisKKwkvKiBDb3B5IHRoaXMgcG9pbnRlciBhcyB3ZSBhcmUgZ29ubmEgbmVlZCBpdCBpbiB0aGUgcmVsZWFzZSBwaGFzZSAqLworCWNpbmVyZ3l0Ml91c2JfZGV2aWNlID0gYWRhcC0+ZGV2OworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZHZiX3VzYl9yY19rZXkgY2luZXJneXQyX3JjX2tleXNbXSA9IHsKKwl7IDB4MDQsCTB4MDEsCUtFWV9QT1dFUiB9LAorCXsgMHgwNCwJMHgwMiwJS0VZXzEgfSwKKwl7IDB4MDQsCTB4MDMsCUtFWV8yIH0sCisJeyAweDA0LAkweDA0LAlLRVlfMyB9LAorCXsgMHgwNCwJMHgwNSwJS0VZXzQgfSwKKwl7IDB4MDQsCTB4MDYsCUtFWV81IH0sCisJeyAweDA0LAkweDA3LAlLRVlfNiB9LAorCXsgMHgwNCwJMHgwOCwJS0VZXzcgfSwKKwl7IDB4MDQsCTB4MDksCUtFWV84IH0sCisJeyAweDA0LAkweDBhLAlLRVlfOSB9LAorCXsgMHgwNCwJMHgwYywJS0VZXzAgfSwKKwl7IDB4MDQsCTB4MGIsCUtFWV9WSURFTyB9LAorCXsgMHgwNCwJMHgwZCwJS0VZX1JFRlJFU0ggfSwKKwl7IDB4MDQsCTB4MGUsCUtFWV9TRUxFQ1QgfSwKKwl7IDB4MDQsCTB4MGYsCUtFWV9FUEcgfSwKKwl7IDB4MDQsCTB4MTAsCUtFWV9VUCB9LAorCXsgMHgwNCwJMHgxNCwJS0VZX0RPV04gfSwKKwl7IDB4MDQsCTB4MTEsCUtFWV9MRUZUIH0sCisJeyAweDA0LAkweDEzLAlLRVlfUklHSFQgfSwKKwl7IDB4MDQsCTB4MTIsCUtFWV9PSyB9LAorCXsgMHgwNCwJMHgxNSwJS0VZX1RFWFQgfSwKKwl7IDB4MDQsCTB4MTYsCUtFWV9JTkZPIH0sCisJeyAweDA0LAkweDE3LAlLRVlfUkVEIH0sCisJeyAweDA0LAkweDE4LAlLRVlfR1JFRU4gfSwKKwl7IDB4MDQsCTB4MTksCUtFWV9ZRUxMT1cgfSwKKwl7IDB4MDQsCTB4MWEsCUtFWV9CTFVFIH0sCisJeyAweDA0LAkweDFjLAlLRVlfVk9MVU1FVVAgfSwKKwl7IDB4MDQsCTB4MWUsCUtFWV9WT0xVTUVET1dOIH0sCisJeyAweDA0LAkweDFkLAlLRVlfTVVURSB9LAorCXsgMHgwNCwJMHgxYiwJS0VZX0NIQU5ORUxVUCB9LAorCXsgMHgwNCwJMHgxZiwJS0VZX0NIQU5ORUxET1dOIH0sCisJeyAweDA0LAkweDQwLAlLRVlfUEFVU0UgfSwKKwl7IDB4MDQsCTB4NGMsCUtFWV9QTEFZIH0sCisJeyAweDA0LAkweDU4LAlLRVlfUkVDT1JEIH0sCisJeyAweDA0LAkweDU0LAlLRVlfUFJFVklPVVMgfSwKKwl7IDB4MDQsCTB4NDgsCUtFWV9TVE9QIH0sCisJeyAweDA0LAkweDVjLAlLRVlfTkVYVCB9Cit9OworCisvKiBOdW1iZXIgb2Yga2V5cHJlc3NlcyB0byBpZ25vcmUgYmVmb3JlIGRldGVjdCByZXBlYXRpbmcgKi8KKyNkZWZpbmUgUkNfUkVQRUFUX0RFTEFZIDMKKworc3RhdGljIGludCByZXBlYXRhYmxlX2tleXNbXSA9IHsKKwlLRVlfVVAsCisJS0VZX0RPV04sCisJS0VZX0xFRlQsCisJS0VZX1JJR0hULAorCUtFWV9WT0xVTUVVUCwKKwlLRVlfVk9MVU1FRE9XTiwKKwlLRVlfQ0hBTk5FTFVQLAorCUtFWV9DSEFOTkVMRE9XTgorfTsKKworc3RhdGljIGludCBjaW5lcmd5dDJfcmNfcXVlcnkoc3RydWN0IGR2Yl91c2JfZGV2aWNlICpkLCB1MzIgKmV2ZW50LCBpbnQgKnN0YXRlKQoreworCXN0cnVjdCBjaW5lcmd5dDJfc3RhdGUgKnN0ID0gZC0+cHJpdjsKKwl1OCBrZXlbNV0gPSB7MCwgMCwgMCwgMCwgMH0sIGNtZCA9IENJTkVSR1lUMl9FUDFfR0VUX1JDX0VWRU5UUzsKKwlpbnQgaTsKKworCSpzdGF0ZSA9IFJFTU9URV9OT19LRVlfUFJFU1NFRDsKKworCWR2Yl91c2JfZ2VuZXJpY19ydyhkLCAmY21kLCAxLCBrZXksIHNpemVvZihrZXkpLCAwKTsKKwlpZiAoa2V5WzRdID09IDB4ZmYpIHsKKwkJLyoga2V5IHJlcGVhdCAqLworCQlzdC0+cmNfY291bnRlcisrOworCQlpZiAoc3QtPnJjX2NvdW50ZXIgPiBSQ19SRVBFQVRfREVMQVkpIHsKKwkJCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHJlcGVhdGFibGVfa2V5cyk7IGkrKykgeworCQkJCWlmIChkLT5sYXN0X2V2ZW50ID09IHJlcGVhdGFibGVfa2V5c1tpXSkgeworCQkJCQkqc3RhdGUgPSBSRU1PVEVfS0VZX1JFUEVBVDsKKwkJCQkJKmV2ZW50ID0gZC0+bGFzdF9ldmVudDsKKwkJCQkJZGViX3JjKCJyZXBlYXQga2V5LCBldmVudCAleFxuIiwKKwkJCQkJCSAgICpldmVudCk7CisJCQkJCXJldHVybiAwOworCQkJCX0KKwkJCX0KKwkJCWRlYl9yYygicmVwZWF0ZWQga2V5IChub24gcmVwZWF0YWJsZSlcbiIpOworCQl9CisJCXJldHVybiAwOworCX0KKworCS8qIGhhY2sgdG8gcGFzcyBjaGVja3N1bSBvbiB0aGUgY3VzdG9tIGZpZWxkICovCisJa2V5WzJdID0gfmtleVsxXTsKKwlkdmJfdXNiX25lY19yY19rZXlfdG9fZXZlbnQoZCwga2V5LCBldmVudCwgc3RhdGUpOworCWlmIChrZXlbMF0gIT0gMCkgeworCQlpZiAoKmV2ZW50ICE9IGQtPmxhc3RfZXZlbnQpCisJCQlzdC0+cmNfY291bnRlciA9IDA7CisKKwkJZGViX3JjKCJrZXk6ICV4ICV4ICV4ICV4ICV4XG4iLAorCQkgICAgICAga2V5WzBdLCBrZXlbMV0sIGtleVsyXSwga2V5WzNdLCBrZXlbNF0pOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjaW5lcmd5dDJfdXNiX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLAorCQkJCWNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKK3sKKwlyZXR1cm4gZHZiX3VzYl9kZXZpY2VfaW5pdChpbnRmLCAmY2luZXJneXQyX3Byb3BlcnRpZXMsCisJCQkJCVRISVNfTU9EVUxFLCBOVUxMLCBhZGFwdGVyX25yKTsKK30KKworCitzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgY2luZXJneXQyX3VzYl90YWJsZVtdID0geworCXsgVVNCX0RFVklDRShVU0JfVklEX1RFUlJBVEVDLCAweDAwMzgpIH0sCisJeyAwIH0KK307CisKK01PRFVMRV9ERVZJQ0VfVEFCTEUodXNiLCBjaW5lcmd5dDJfdXNiX3RhYmxlKTsKKworc3RhdGljIHN0cnVjdCBkdmJfdXNiX2RldmljZV9wcm9wZXJ0aWVzIGNpbmVyZ3l0Ml9wcm9wZXJ0aWVzID0geworCS5zaXplX29mX3ByaXYgPSBzaXplb2Yoc3RydWN0IGNpbmVyZ3l0Ml9zdGF0ZSksCisJLm51bV9hZGFwdGVycyA9IDEsCisJLmFkYXB0ZXIgPSB7CisJCXsKKwkJCS5zdHJlYW1pbmdfY3RybCAgID0gY2luZXJneXQyX3N0cmVhbWluZ19jdHJsLAorCQkJLmZyb250ZW5kX2F0dGFjaCAgPSBjaW5lcmd5dDJfZnJvbnRlbmRfYXR0YWNoLAorCisJCQkvKiBwYXJhbWV0ZXIgZm9yIHRoZSBNUEVHMi1kYXRhIHRyYW5zZmVyICovCisJCQkuc3RyZWFtID0geworCQkJCS50eXBlID0gVVNCX0JVTEssCisJCQkJLmNvdW50ID0gNSwKKwkJCQkuZW5kcG9pbnQgPSAweDAyLAorCQkJCS51ID0geworCQkJCQkuYnVsayA9IHsKKwkJCQkJCS5idWZmZXJzaXplID0gNTEyLAorCQkJCQl9CisJCQkJfQorCQkJfSwKKwkJfQorCX0sCisKKwkucG93ZXJfY3RybCAgICAgICA9IGNpbmVyZ3l0Ml9wb3dlcl9jdHJsLAorCisJLnJjX2ludGVydmFsICAgICAgPSA1MCwKKwkucmNfa2V5X21hcCAgICAgICA9IGNpbmVyZ3l0Ml9yY19rZXlzLAorCS5yY19rZXlfbWFwX3NpemUgID0gQVJSQVlfU0laRShjaW5lcmd5dDJfcmNfa2V5cyksCisJLnJjX3F1ZXJ5ICAgICAgICAgPSBjaW5lcmd5dDJfcmNfcXVlcnksCisKKwkuZ2VuZXJpY19idWxrX2N0cmxfZW5kcG9pbnQgPSAxLAorCisJLm51bV9kZXZpY2VfZGVzY3MgPSAxLAorCS5kZXZpY2VzID0geworCQl7IC5uYW1lID0gIlRlcnJhVGVjL3FhbnUgVVNCMi4wIEhpZ2hzcGVlZCBEVkItVCBSZWNlaXZlciIsCisJCSAgLmNvbGRfaWRzID0ge05VTEx9LAorCQkgIC53YXJtX2lkcyA9IHsgJmNpbmVyZ3l0Ml91c2JfdGFibGVbMF0sIE5VTEwgfSwKKwkJfSwKKwkJeyBOVUxMIH0sCisJfQorfTsKKworCitzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgY2luZXJneXQyX2RyaXZlciA9IHsKKwkubmFtZQkJPSAiY2luZXJneVQyIiwKKwkucHJvYmUJCT0gY2luZXJneXQyX3VzYl9wcm9iZSwKKwkuZGlzY29ubmVjdAk9IGR2Yl91c2JfZGV2aWNlX2V4aXQsCisJLmlkX3RhYmxlCT0gY2luZXJneXQyX3VzYl90YWJsZQorfTsKKworc3RhdGljIGludCBfX2luaXQgY2luZXJneXQyX3VzYl9pbml0KHZvaWQpCit7CisJaW50IGVycjsKKworCWVyciA9IHVzYl9yZWdpc3RlcigmY2luZXJneXQyX2RyaXZlcik7CisJaWYgKGVycikgeworCQllcnIoInVzYl9yZWdpc3RlcigpIGZhaWxlZCEgKGVyciAlaSlcbiIsIGVycik7CisJCXJldHVybiBlcnI7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgY2luZXJneXQyX3VzYl9leGl0KHZvaWQpCit7CisJdXNiX2RlcmVnaXN0ZXIoJmNpbmVyZ3l0Ml9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChjaW5lcmd5dDJfdXNiX2luaXQpOworbW9kdWxlX2V4aXQoY2luZXJneXQyX3VzYl9leGl0KTsKKworTU9EVUxFX0RFU0NSSVBUSU9OKCJUZXJyYXRlYyBDaW5lcmd5IFQyIERWQi1UIGRyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0FVVEhPUigiVG9taSBPcmF2YSIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9jaW5lcmd5VDItZmUuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvY2luZXJneVQyLWZlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjQ5ZjI1YwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvY2luZXJneVQyLWZlLmMKQEAgLTAsMCArMSwzNTEgQEAKKy8qCisgKiBUZXJyYVRlYyBDaW5lcmd5IFQyL3FhbnUgVVNCMiBEVkItVCBhZGFwdGVyLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBUb21pIE9yYXZhICh0b21pbW9AbmNpcmNsZS5udWxsbmV0LmZpKQorICoKKyAqIEJhc2VkIG9uIHRoZSBkdmItdXNiLWZyYW1ld29yayBjb2RlIGFuZCB0aGUKKyAqIG9yaWdpbmFsIFRlcnJhdGVjIENpbmVyZ3kgVDIgZHJpdmVyIGJ5OgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNCBEYW5pZWwgTWFjayA8ZGFuaWVsQHFhbnUuZGU+IGFuZAorICogICAgICAgICAgICAgICAgICBIb2xnZXIgV2FlY2h0bGVyIDxob2xnZXJAcWFudS5kZT4KKyAqCisgKiAgUHJvdG9jb2wgU3BlYyBwdWJsaXNoZWQgb24gaHR0cDovL3FhbnUuZGUvc3BlY3MvdGVycmF0ZWNfY2luZXJneVQyLnBkZgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICoKKyAqLworCisjaW5jbHVkZSAiY2luZXJneVQyLmgiCisKKworLyoqCisgKiAgY29udmVydCBsaW51eC1kdmIgZnJvbnRlbmQgcGFyYW1ldGVyIHNldCBpbnRvIFRQUy4KKyAqICBTZWUgRVRTSSBFVFMtMzAwNzQ0LCBzZWN0aW9uIDQuNi4yLCB0YWJsZSA5IGZvciBkZXRhaWxzLgorICoKKyAqICBUaGlzIGZ1bmN0aW9uIGlzIHByb2JhYmx5IHJldXNhYmxlIGFuZCBtYXkgYmV0dGVyIGdldCBwbGFjZWQgaW4gYSBzdXBwb3J0CisgKiAgbGlicmFyeS4KKyAqCisgKiAgV2UgcmVwbGFjZSBlcnJvcm5vdXMgZmllbGRzIGJ5IGRlZmF1bHQgVFBTIGZpZWxkcyAodGhlIG9uZXMgd2l0aCB2YWx1ZSAwKS4KKyAqLworCitzdGF0aWMgdWludDE2X3QgY29tcHV0ZV90cHMoc3RydWN0IGR2Yl9mcm9udGVuZF9wYXJhbWV0ZXJzICpwKQoreworCXN0cnVjdCBkdmJfb2ZkbV9wYXJhbWV0ZXJzICpvcCA9ICZwLT51Lm9mZG07CisJdWludDE2X3QgdHBzID0gMDsKKworCXN3aXRjaCAob3AtPmNvZGVfcmF0ZV9IUCkgeworCWNhc2UgRkVDXzJfMzoKKwkJdHBzIHw9ICgxIDw8IDcpOworCQlicmVhazsKKwljYXNlIEZFQ18zXzQ6CisJCXRwcyB8PSAoMiA8PCA3KTsKKwkJYnJlYWs7CisJY2FzZSBGRUNfNV82OgorCQl0cHMgfD0gKDMgPDwgNyk7CisJCWJyZWFrOworCWNhc2UgRkVDXzdfODoKKwkJdHBzIHw9ICg0IDw8IDcpOworCQlicmVhazsKKwljYXNlIEZFQ18xXzI6CisJY2FzZSBGRUNfQVVUTzoKKwlkZWZhdWx0OgorCQkvKiB0cHMgfD0gKDAgPDwgNykgKi87CisJfQorCisJc3dpdGNoIChvcC0+Y29kZV9yYXRlX0xQKSB7CisJY2FzZSBGRUNfMl8zOgorCQl0cHMgfD0gKDEgPDwgNCk7CisJCWJyZWFrOworCWNhc2UgRkVDXzNfNDoKKwkJdHBzIHw9ICgyIDw8IDQpOworCQlicmVhazsKKwljYXNlIEZFQ181XzY6CisJCXRwcyB8PSAoMyA8PCA0KTsKKwkJYnJlYWs7CisJY2FzZSBGRUNfN184OgorCQl0cHMgfD0gKDQgPDwgNCk7CisJCWJyZWFrOworCWNhc2UgRkVDXzFfMjoKKwljYXNlIEZFQ19BVVRPOgorCWRlZmF1bHQ6CisJCS8qIHRwcyB8PSAoMCA8PCA0KSAqLzsKKwl9CisKKwlzd2l0Y2ggKG9wLT5jb25zdGVsbGF0aW9uKSB7CisJY2FzZSBRQU1fMTY6CisJCXRwcyB8PSAoMSA8PCAxMyk7CisJCWJyZWFrOworCWNhc2UgUUFNXzY0OgorCQl0cHMgfD0gKDIgPDwgMTMpOworCQlicmVhazsKKwljYXNlIFFQU0s6CisJZGVmYXVsdDoKKwkJLyogdHBzIHw9ICgwIDw8IDEzKSAqLzsKKwl9CisKKwlzd2l0Y2ggKG9wLT50cmFuc21pc3Npb25fbW9kZSkgeworCWNhc2UgVFJBTlNNSVNTSU9OX01PREVfOEs6CisJCXRwcyB8PSAoMSA8PCAwKTsKKwkJYnJlYWs7CisJY2FzZSBUUkFOU01JU1NJT05fTU9ERV8ySzoKKwlkZWZhdWx0OgorCQkvKiB0cHMgfD0gKDAgPDwgMCkgKi87CisJfQorCisJc3dpdGNoIChvcC0+Z3VhcmRfaW50ZXJ2YWwpIHsKKwljYXNlIEdVQVJEX0lOVEVSVkFMXzFfMTY6CisJCXRwcyB8PSAoMSA8PCAyKTsKKwkJYnJlYWs7CisJY2FzZSBHVUFSRF9JTlRFUlZBTF8xXzg6CisJCXRwcyB8PSAoMiA8PCAyKTsKKwkJYnJlYWs7CisJY2FzZSBHVUFSRF9JTlRFUlZBTF8xXzQ6CisJCXRwcyB8PSAoMyA8PCAyKTsKKwkJYnJlYWs7CisJY2FzZSBHVUFSRF9JTlRFUlZBTF8xXzMyOgorCWRlZmF1bHQ6CisJCS8qIHRwcyB8PSAoMCA8PCAyKSAqLzsKKwl9CisKKwlzd2l0Y2ggKG9wLT5oaWVyYXJjaHlfaW5mb3JtYXRpb24pIHsKKwljYXNlIEhJRVJBUkNIWV8xOgorCQl0cHMgfD0gKDEgPDwgMTApOworCQlicmVhazsKKwljYXNlIEhJRVJBUkNIWV8yOgorCQl0cHMgfD0gKDIgPDwgMTApOworCQlicmVhazsKKwljYXNlIEhJRVJBUkNIWV80OgorCQl0cHMgfD0gKDMgPDwgMTApOworCQlicmVhazsKKwljYXNlIEhJRVJBUkNIWV9OT05FOgorCWRlZmF1bHQ6CisJCS8qIHRwcyB8PSAoMCA8PCAxMCkgKi87CisJfQorCisJcmV0dXJuIHRwczsKK30KKworc3RydWN0IGNpbmVyZ3l0Ml9mZV9zdGF0ZSB7CisJc3RydWN0IGR2Yl9mcm9udGVuZCBmZTsKKwlzdHJ1Y3QgZHZiX3VzYl9kZXZpY2UgKmQ7Cit9OworCitzdGF0aWMgaW50IGNpbmVyZ3l0Ml9mZV9yZWFkX3N0YXR1cyhzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwKKwkJCQkJZmVfc3RhdHVzX3QgKnN0YXR1cykKK3sKKwlzdHJ1Y3QgY2luZXJneXQyX2ZlX3N0YXRlICpzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCXN0cnVjdCBkdmJ0X2dldF9zdGF0dXNfbXNnIHJlc3VsdDsKKwl1OCBjbWRbXSA9IHsgQ0lORVJHWVQyX0VQMV9HRVRfVFVORVJfU1RBVFVTIH07CisJaW50IHJldDsKKworCXJldCA9IGR2Yl91c2JfZ2VuZXJpY19ydyhzdGF0ZS0+ZCwgY21kLCBzaXplb2YoY21kKSwgKHU4ICopJnJlc3VsdCwKKwkJCXNpemVvZihyZXN1bHQpLCAwKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCSpzdGF0dXMgPSAwOworCisJaWYgKDB4ZmZmZiAtIGxlMTZfdG9fY3B1KHJlc3VsdC5nYWluKSA+IDMwKQorCQkqc3RhdHVzIHw9IEZFX0hBU19TSUdOQUw7CisJaWYgKHJlc3VsdC5sb2NrX2JpdHMgJiAoMSA8PCA2KSkKKwkJKnN0YXR1cyB8PSBGRV9IQVNfTE9DSzsKKwlpZiAocmVzdWx0LmxvY2tfYml0cyAmICgxIDw8IDUpKQorCQkqc3RhdHVzIHw9IEZFX0hBU19TWU5DOworCWlmIChyZXN1bHQubG9ja19iaXRzICYgKDEgPDwgNCkpCisJCSpzdGF0dXMgfD0gRkVfSEFTX0NBUlJJRVI7CisJaWYgKHJlc3VsdC5sb2NrX2JpdHMgJiAoMSA8PCAxKSkKKwkJKnN0YXR1cyB8PSBGRV9IQVNfVklURVJCSTsKKworCWlmICgoKnN0YXR1cyAmIChGRV9IQVNfQ0FSUklFUiB8IEZFX0hBU19WSVRFUkJJIHwgRkVfSEFTX1NZTkMpKSAhPQorCQkJKEZFX0hBU19DQVJSSUVSIHwgRkVfSEFTX1ZJVEVSQkkgfCBGRV9IQVNfU1lOQykpCisJCSpzdGF0dXMgJj0gfkZFX0hBU19MT0NLOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY2luZXJneXQyX2ZlX3JlYWRfYmVyKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCB1MzIgKmJlcikKK3sKKwlzdHJ1Y3QgY2luZXJneXQyX2ZlX3N0YXRlICpzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCXN0cnVjdCBkdmJ0X2dldF9zdGF0dXNfbXNnIHN0YXR1czsKKwljaGFyIGNtZFtdID0geyBDSU5FUkdZVDJfRVAxX0dFVF9UVU5FUl9TVEFUVVMgfTsKKwlpbnQgcmV0OworCisJcmV0ID0gZHZiX3VzYl9nZW5lcmljX3J3KHN0YXRlLT5kLCBjbWQsIHNpemVvZihjbWQpLCAoY2hhciAqKSZzdGF0dXMsCisJCQkJc2l6ZW9mKHN0YXR1cyksIDApOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJKmJlciA9IGxlMzJfdG9fY3B1KHN0YXR1cy52aXRlcmJpX2Vycm9yX3JhdGUpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGNpbmVyZ3l0Ml9mZV9yZWFkX3VuY19ibG9ja3Moc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIHUzMiAqdW5jKQoreworCXN0cnVjdCBjaW5lcmd5dDJfZmVfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisJc3RydWN0IGR2YnRfZ2V0X3N0YXR1c19tc2cgc3RhdHVzOworCXU4IGNtZFtdID0geyBDSU5FUkdZVDJfRVAxX0dFVF9UVU5FUl9TVEFUVVMgfTsKKwlpbnQgcmV0OworCisJcmV0ID0gZHZiX3VzYl9nZW5lcmljX3J3KHN0YXRlLT5kLCBjbWQsIHNpemVvZihjbWQpLCAodTggKikmc3RhdHVzLAorCQkJCXNpemVvZihzdGF0dXMpLCAwKTsKKwlpZiAocmV0IDwgMCkgeworCQllcnIoImNpbmVyZ3l0Ml9mZV9yZWFkX3VuY19ibG9ja3MoKSBGYWlsZWQhIChFcnJvcj0lZClcbiIsCisJCQlyZXQpOworCQlyZXR1cm4gcmV0OworCX0KKwkqdW5jID0gbGUzMl90b19jcHUoc3RhdHVzLnVuY29ycmVjdGVkX2Jsb2NrX2NvdW50KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjaW5lcmd5dDJfZmVfcmVhZF9zaWduYWxfc3RyZW5ndGgoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsCisJCQkJCQl1MTYgKnN0cmVuZ3RoKQoreworCXN0cnVjdCBjaW5lcmd5dDJfZmVfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisJc3RydWN0IGR2YnRfZ2V0X3N0YXR1c19tc2cgc3RhdHVzOworCWNoYXIgY21kW10gPSB7IENJTkVSR1lUMl9FUDFfR0VUX1RVTkVSX1NUQVRVUyB9OworCWludCByZXQ7CisKKwlyZXQgPSBkdmJfdXNiX2dlbmVyaWNfcncoc3RhdGUtPmQsIGNtZCwgc2l6ZW9mKGNtZCksIChjaGFyICopJnN0YXR1cywKKwkJCQlzaXplb2Yoc3RhdHVzKSwgMCk7CisJaWYgKHJldCA8IDApIHsKKwkJZXJyKCJjaW5lcmd5dDJfZmVfcmVhZF9zaWduYWxfc3RyZW5ndGgoKSBGYWlsZWQhIgorCQkJIiAoRXJyb3I9JWQpXG4iLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKwkqc3RyZW5ndGggPSAoMHhmZmZmIC0gbGUxNl90b19jcHUoc3RhdHVzLmdhaW4pKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjaW5lcmd5dDJfZmVfcmVhZF9zbnIoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIHUxNiAqc25yKQoreworCXN0cnVjdCBjaW5lcmd5dDJfZmVfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisJc3RydWN0IGR2YnRfZ2V0X3N0YXR1c19tc2cgc3RhdHVzOworCWNoYXIgY21kW10gPSB7IENJTkVSR1lUMl9FUDFfR0VUX1RVTkVSX1NUQVRVUyB9OworCWludCByZXQ7CisKKwlyZXQgPSBkdmJfdXNiX2dlbmVyaWNfcncoc3RhdGUtPmQsIGNtZCwgc2l6ZW9mKGNtZCksIChjaGFyICopJnN0YXR1cywKKwkJCQlzaXplb2Yoc3RhdHVzKSwgMCk7CisJaWYgKHJldCA8IDApIHsKKwkJZXJyKCJjaW5lcmd5dDJfZmVfcmVhZF9zbnIoKSBGYWlsZWQhIChFcnJvcj0lZClcbiIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCSpzbnIgPSAoc3RhdHVzLnNuciA8PCA4KSB8IHN0YXR1cy5zbnI7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY2luZXJneXQyX2ZlX2luaXQoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY2luZXJneXQyX2ZlX3NsZWVwKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlKQoreworCWRlYl9pbmZvKCJjaW5lcmd5dDJfZmVfc2xlZXAoKSBDYWxsZWRcbiIpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGNpbmVyZ3l0Ml9mZV9nZXRfdHVuZV9zZXR0aW5ncyhzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwKKwkJCQlzdHJ1Y3QgZHZiX2Zyb250ZW5kX3R1bmVfc2V0dGluZ3MgKnR1bmUpCit7CisJdHVuZS0+bWluX2RlbGF5X21zID0gODAwOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGNpbmVyZ3l0Ml9mZV9zZXRfZnJvbnRlbmQoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsCisJCQkJICBzdHJ1Y3QgZHZiX2Zyb250ZW5kX3BhcmFtZXRlcnMgKmZlcCkKK3sKKwlzdHJ1Y3QgY2luZXJneXQyX2ZlX3N0YXRlICpzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCXN0cnVjdCBkdmJ0X3NldF9wYXJhbWV0ZXJzX21zZyBwYXJhbTsKKwljaGFyIHJlc3VsdFsyXTsKKwlpbnQgZXJyOworCisJcGFyYW0uY21kID0gQ0lORVJHWVQyX0VQMV9TRVRfVFVORVJfUEFSQU1FVEVSUzsKKwlwYXJhbS50cHMgPSBjcHVfdG9fbGUxNihjb21wdXRlX3RwcyhmZXApKTsKKwlwYXJhbS5mcmVxID0gY3B1X3RvX2xlMzIoZmVwLT5mcmVxdWVuY3kgLyAxMDAwKTsKKwlwYXJhbS5iYW5kd2lkdGggPSA4IC0gZmVwLT51Lm9mZG0uYmFuZHdpZHRoIC0gQkFORFdJRFRIXzhfTUhaOworCisJZXJyID0gZHZiX3VzYl9nZW5lcmljX3J3KHN0YXRlLT5kLAorCQkJKGNoYXIgKikmcGFyYW0sIHNpemVvZihwYXJhbSksCisJCQlyZXN1bHQsIHNpemVvZihyZXN1bHQpLCAwKTsKKwlpZiAoZXJyIDwgMCkKKwkJZXJyKCJjaW5lcmd5dDJfZmVfc2V0X2Zyb250ZW5kKCkgRmFpbGVkISBlcnI9JWRcbiIsIGVycik7CisKKwlyZXR1cm4gKGVyciA8IDApID8gZXJyIDogMDsKK30KKworc3RhdGljIGludCBjaW5lcmd5dDJfZmVfZ2V0X2Zyb250ZW5kKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLAorCQkJCSAgc3RydWN0IGR2Yl9mcm9udGVuZF9wYXJhbWV0ZXJzICpmZXApCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGNpbmVyZ3l0Ml9mZV9yZWxlYXNlKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlKQoreworCXN0cnVjdCBjaW5lcmd5dDJfZmVfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisJaWYgKHN0YXRlICE9IE5VTEwpCisJCWtmcmVlKHN0YXRlKTsKK30KKworc3RhdGljIHN0cnVjdCBkdmJfZnJvbnRlbmRfb3BzIGNpbmVyZ3l0Ml9mZV9vcHM7CisKK3N0cnVjdCBkdmJfZnJvbnRlbmQgKmNpbmVyZ3l0Ml9mZV9hdHRhY2goc3RydWN0IGR2Yl91c2JfZGV2aWNlICpkKQoreworCXN0cnVjdCBjaW5lcmd5dDJfZmVfc3RhdGUgKnMgPSBremFsbG9jKHNpemVvZigKKwkJCQkJc3RydWN0IGNpbmVyZ3l0Ml9mZV9zdGF0ZSksIEdGUF9LRVJORUwpOworCWlmIChzID09IE5VTEwpCisJCXJldHVybiBOVUxMOworCisJcy0+ZCA9IGQ7CisJbWVtY3B5KCZzLT5mZS5vcHMsICZjaW5lcmd5dDJfZmVfb3BzLCBzaXplb2Yoc3RydWN0IGR2Yl9mcm9udGVuZF9vcHMpKTsKKwlzLT5mZS5kZW1vZHVsYXRvcl9wcml2ID0gczsKKwlyZXR1cm4gJnMtPmZlOworfQorCisKK3N0YXRpYyBzdHJ1Y3QgZHZiX2Zyb250ZW5kX29wcyBjaW5lcmd5dDJfZmVfb3BzID0geworCS5pbmZvID0geworCQkubmFtZQkJCT0gRFJJVkVSX05BTUUsCisJCS50eXBlCQkJPSBGRV9PRkRNLAorCQkuZnJlcXVlbmN5X21pbgkJPSAxNzQwMDAwMDAsCisJCS5mcmVxdWVuY3lfbWF4CQk9IDg2MjAwMDAwMCwKKwkJLmZyZXF1ZW5jeV9zdGVwc2l6ZQk9IDE2NjY2NywKKwkJLmNhcHMgPSBGRV9DQU5fSU5WRVJTSU9OX0FVVE8gfCBGRV9DQU5fRkVDXzFfMgorCQkJfCBGRV9DQU5fRkVDXzJfMyB8IEZFX0NBTl9GRUNfM180CisJCQl8IEZFX0NBTl9GRUNfNV82IHwgRkVfQ0FOX0ZFQ183XzgKKwkJCXwgRkVfQ0FOX0ZFQ19BVVRPIHwgRkVfQ0FOX1FQU0sKKwkJCXwgRkVfQ0FOX1FBTV8xNiB8IEZFX0NBTl9RQU1fNjQKKwkJCXwgRkVfQ0FOX1FBTV9BVVRPCisJCQl8IEZFX0NBTl9UUkFOU01JU1NJT05fTU9ERV9BVVRPCisJCQl8IEZFX0NBTl9HVUFSRF9JTlRFUlZBTF9BVVRPCisJCQl8IEZFX0NBTl9ISUVSQVJDSFlfQVVUTworCQkJfCBGRV9DQU5fUkVDT1ZFUgorCQkJfCBGRV9DQU5fTVVURV9UUworCX0sCisKKwkucmVsZWFzZQkJPSBjaW5lcmd5dDJfZmVfcmVsZWFzZSwKKworCS5pbml0CQkJPSBjaW5lcmd5dDJfZmVfaW5pdCwKKwkuc2xlZXAJCQk9IGNpbmVyZ3l0Ml9mZV9zbGVlcCwKKworCS5zZXRfZnJvbnRlbmQJCT0gY2luZXJneXQyX2ZlX3NldF9mcm9udGVuZCwKKwkuZ2V0X2Zyb250ZW5kCQk9IGNpbmVyZ3l0Ml9mZV9nZXRfZnJvbnRlbmQsCisJLmdldF90dW5lX3NldHRpbmdzCT0gY2luZXJneXQyX2ZlX2dldF90dW5lX3NldHRpbmdzLAorCisJLnJlYWRfc3RhdHVzCQk9IGNpbmVyZ3l0Ml9mZV9yZWFkX3N0YXR1cywKKwkucmVhZF9iZXIJCT0gY2luZXJneXQyX2ZlX3JlYWRfYmVyLAorCS5yZWFkX3NpZ25hbF9zdHJlbmd0aAk9IGNpbmVyZ3l0Ml9mZV9yZWFkX3NpZ25hbF9zdHJlbmd0aCwKKwkucmVhZF9zbnIJCT0gY2luZXJneXQyX2ZlX3JlYWRfc25yLAorCS5yZWFkX3VjYmxvY2tzCQk9IGNpbmVyZ3l0Ml9mZV9yZWFkX3VuY19ibG9ja3MsCit9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9jaW5lcmd5VDIuaCBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvY2luZXJneVQyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTFkNzllYgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvY2luZXJneVQyLmgKQEAgLTAsMCArMSw5NSBAQAorLyoKKyAqIFRlcnJhVGVjIENpbmVyZ3kgVDIvcWFudSBVU0IyIERWQi1UIGFkYXB0ZXIuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA3IFRvbWkgT3JhdmEgKHRvbWltb0BuY2lyY2xlLm51bGxuZXQuZmkpCisgKgorICogQmFzZWQgb24gdGhlIGR2Yi11c2ItZnJhbWV3b3JrIGNvZGUgYW5kIHRoZQorICogb3JpZ2luYWwgVGVycmF0ZWMgQ2luZXJneSBUMiBkcml2ZXIgYnk6CisgKgorICogQ29weXJpZ2h0IChDKSAyMDA0IERhbmllbCBNYWNrIDxkYW5pZWxAcWFudS5kZT4gYW5kCisgKiAgICAgICAgICAgICAgICAgIEhvbGdlciBXYWVjaHRsZXIgPGhvbGdlckBxYW51LmRlPgorICoKKyAqICBQcm90b2NvbCBTcGVjIHB1Ymxpc2hlZCBvbiBodHRwOi8vcWFudS5kZS9zcGVjcy90ZXJyYXRlY19jaW5lcmd5VDIucGRmCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCAgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCAgSW5jLiwgIDY3NSBNYXNzIEF2ZSwgIENhbWJyaWRnZSwgIE1BIDAyMTM5LCAgVVNBLgorICoKKyAqLworCisjaWZuZGVmIF9EVkJfVVNCX0NJTkVSR1lUMl9IXworI2RlZmluZSBfRFZCX1VTQl9DSU5FUkdZVDJfSF8KKworI2luY2x1ZGUgPGxpbnV4L3VzYi9pbnB1dC5oPgorCisjZGVmaW5lIERWQl9VU0JfTE9HX1BSRUZJWCAiY2luZXJneVQyIgorI2luY2x1ZGUgImR2Yi11c2IuaCIKKworI2RlZmluZSBEUklWRVJfTkFNRSAiVGVycmFUZWMvcWFudSBVU0IyLjAgSGlnaHNwZWVkIERWQi1UIFJlY2VpdmVyIgorCitleHRlcm4gaW50IGR2Yl91c2JfY2luZXJneXQyX2RlYnVnOworCisjZGVmaW5lIGRlYl9pbmZvKGFyZ3MuLi4pICBkcHJpbnRrKGR2Yl91c2JfY2luZXJneXQyX2RlYnVnLCAgMHgwMDEsIGFyZ3MpCisjZGVmaW5lIGRlYl94ZmVyKGFyZ3MuLi4pICBkcHJpbnRrKGR2Yl91c2JfY2luZXJneXQyX2RlYnVnLCAgMHgwMDIsIGFyZ3MpCisjZGVmaW5lIGRlYl9wbGwoYXJncy4uLikgICBkcHJpbnRrKGR2Yl91c2JfY2luZXJneXQyX2RlYnVnLCAgMHgwMDQsIGFyZ3MpCisjZGVmaW5lIGRlYl90cyhhcmdzLi4uKSAgICBkcHJpbnRrKGR2Yl91c2JfY2luZXJneXQyX2RlYnVnLCAgMHgwMDgsIGFyZ3MpCisjZGVmaW5lIGRlYl9lcnIoYXJncy4uLikgICBkcHJpbnRrKGR2Yl91c2JfY2luZXJneXQyX2RlYnVnLCAgMHgwMTAsIGFyZ3MpCisjZGVmaW5lIGRlYl9yYyhhcmdzLi4uKSAgICBkcHJpbnRrKGR2Yl91c2JfY2luZXJneXQyX2RlYnVnLCAgMHgwMjAsIGFyZ3MpCisjZGVmaW5lIGRlYl9mdyhhcmdzLi4uKSAgICBkcHJpbnRrKGR2Yl91c2JfY2luZXJneXQyX2RlYnVnLCAgMHgwNDAsIGFyZ3MpCisjZGVmaW5lIGRlYl9tZW0oYXJncy4uLikgICBkcHJpbnRrKGR2Yl91c2JfY2luZXJneXQyX2RlYnVnLCAgMHgwODAsIGFyZ3MpCisjZGVmaW5lIGRlYl91eGZlcihhcmdzLi4uKSBkcHJpbnRrKGR2Yl91c2JfY2luZXJneXQyX2RlYnVnLCAgMHgxMDAsIGFyZ3MpCisKKworCitlbnVtIGNpbmVyZ3l0Ml9lcDFfY21kIHsKKwlDSU5FUkdZVDJfRVAxX1BJRF9UQUJMRV9SRVNFVAkJPSAweDAxLAorCUNJTkVSR1lUMl9FUDFfUElEX1NFVFVQCQkJPSAweDAyLAorCUNJTkVSR1lUMl9FUDFfQ09OVFJPTF9TVFJFQU1fVFJBTlNGRVIJPSAweDAzLAorCUNJTkVSR1lUMl9FUDFfU0VUX1RVTkVSX1BBUkFNRVRFUlMJPSAweDA0LAorCUNJTkVSR1lUMl9FUDFfR0VUX1RVTkVSX1NUQVRVUwkJPSAweDA1LAorCUNJTkVSR1lUMl9FUDFfU1RBUlRfU0NBTgkJPSAweDA2LAorCUNJTkVSR1lUMl9FUDFfQ09OVElOVUVfU0NBTgkJPSAweDA3LAorCUNJTkVSR1lUMl9FUDFfR0VUX1JDX0VWRU5UUwkJPSAweDA4LAorCUNJTkVSR1lUMl9FUDFfU0xFRVBfTU9ERQkJPSAweDA5LAorCUNJTkVSR1lUMl9FUDFfR0VUX0ZJUk1XQVJFX1ZFUlNJT04JPSAweDBBCit9OworCisKK3N0cnVjdCBkdmJ0X2dldF9zdGF0dXNfbXNnIHsKKwl1aW50MzJfdCBmcmVxOworCXVpbnQ4X3QgYmFuZHdpZHRoOworCXVpbnQxNl90IHRwczsKKwl1aW50OF90IGZsYWdzOworCXVpbnQxNl90IGdhaW47CisJdWludDhfdCBzbnI7CisJdWludDMyX3Qgdml0ZXJiaV9lcnJvcl9yYXRlOworCXVpbnQzMl90IHJzX2Vycm9yX3JhdGU7CisJdWludDMyX3QgdW5jb3JyZWN0ZWRfYmxvY2tfY291bnQ7CisJdWludDhfdCBsb2NrX2JpdHM7CisJdWludDhfdCBwcmV2X2xvY2tfYml0czsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKKworc3RydWN0IGR2YnRfc2V0X3BhcmFtZXRlcnNfbXNnIHsKKwl1aW50OF90IGNtZDsKKwl1aW50MzJfdCBmcmVxOworCXVpbnQ4X3QgYmFuZHdpZHRoOworCXVpbnQxNl90IHRwczsKKwl1aW50OF90IGZsYWdzOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworCitleHRlcm4gc3RydWN0IGR2Yl9mcm9udGVuZCAqY2luZXJneXQyX2ZlX2F0dGFjaChzdHJ1Y3QgZHZiX3VzYl9kZXZpY2UgKmQpOworCisjZW5kaWYgLyogX0RWQl9VU0JfQ0lORVJHWVQyX0hfICovCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvY3h1c2IuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvY3h1c2IuYwppbmRleCA1NjM0MDAyLi40MDZkN2ZiIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2N4dXNiLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9jeHVzYi5jCkBAIC0zNiw2ICszNiw5IEBACiAjaW5jbHVkZSAidHVuZXIteGMyMDI4LmgiCiAjaW5jbHVkZSAidHVuZXItc2ltcGxlLmgiCiAjaW5jbHVkZSAibXhsNTAwNXMuaCIKKyNpbmNsdWRlICJkaWI3MDAwcC5oIgorI2luY2x1ZGUgImRpYjAwNzAuaCIKKyNpbmNsdWRlICJsZ3M4Z2w1LmgiCiAKIC8qIGRlYnVnICovCiBzdGF0aWMgaW50IGR2Yl91c2JfY3h1c2JfZGVidWc7CkBAIC0xMDksNiArMTEyLDI1IEBACiAJY3h1c2JfYmx1ZWJpcmRfZ3Bpb19ydyhkLCAweDQwLCBvbm9mZiA/IDAgOiAweDQwKTsKIH0KIAorc3RhdGljIGludCBjeHVzYl9kNjgwX2RtYl9ncGlvX3R1bmVyKHN0cnVjdCBkdmJfdXNiX2RldmljZSAqZCwKKwkJdTggYWRkciwgaW50IG9ub2ZmKQoreworCXU4ICBvWzJdID0ge2FkZHIsIG9ub2ZmfTsKKwl1OCAgaTsKKwlpbnQgcmM7CisKKwlyYyA9IGN4dXNiX2N0cmxfbXNnKGQsIENNRF9HUElPX1dSSVRFLCBvLCAyLCAmaSwgMSk7CisKKwlpZiAocmMgPCAwKQorCQlyZXR1cm4gcmM7CisJaWYgKGkgPT0gMHgwMSkKKwkJcmV0dXJuIDA7CisJZWxzZSB7CisJCWRlYl9pbmZvKCJncGlvX3dyaXRlIGZhaWxlZC5cbiIpOworCQlyZXR1cm4gLUVJTzsKKwl9Cit9CisKIC8qIEkyQyAqLwogc3RhdGljIGludCBjeHVzYl9pMmNfeGZlcihzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXAsIHN0cnVjdCBpMmNfbXNnIG1zZ1tdLAogCQkJICBpbnQgbnVtKQpAQCAtMjYyLDYgKzI4NCwyMCBAQAogCXJldHVybiByYzsKIH0KIAorc3RhdGljIGludCBjeHVzYl9kNjgwX2RtYl9wb3dlcl9jdHJsKHN0cnVjdCBkdmJfdXNiX2RldmljZSAqZCwgaW50IG9ub2ZmKQoreworCWludCByZXQ7CisJdTggIGI7CisJcmV0ID0gY3h1c2JfcG93ZXJfY3RybChkLCBvbm9mZik7CisJaWYgKCFvbm9mZikKKwkJcmV0dXJuIHJldDsKKworCW1zbGVlcCgxMjgpOworCWN4dXNiX2N0cmxfbXNnKGQsIENNRF9ESUdJVEFMLCBOVUxMLCAwLCAmYiwgMSk7CisJbXNsZWVwKDEwMCk7CisJcmV0dXJuIHJldDsKK30KKwogc3RhdGljIGludCBjeHVzYl9zdHJlYW1pbmdfY3RybChzdHJ1Y3QgZHZiX3VzYl9hZGFwdGVyICphZGFwLCBpbnQgb25vZmYpCiB7CiAJdTggYnVmWzJdID0geyAweDAzLCAweDAwIH07CkBAIC0yODMsNiArMzE5LDY3IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyB2b2lkIGN4dXNiX2Q2ODBfZG1iX2RyYWluX21lc3NhZ2Uoc3RydWN0IGR2Yl91c2JfZGV2aWNlICpkKQoreworCWludCAgICAgICBlcCA9IGQtPnByb3BzLmdlbmVyaWNfYnVsa19jdHJsX2VuZHBvaW50OworCWNvbnN0IGludCB0aW1lb3V0ID0gMTAwOworCWNvbnN0IGludCBqdW5rX2xlbiA9IDMyOworCXU4ICAgICAgICAqanVuazsKKwlpbnQgICAgICAgcmRfY291bnQ7CisKKwkvKiBEaXNjYXJkIHJlbWFpbmluZyBkYXRhIGluIHZpZGVvIHBpcGUgKi8KKwlqdW5rID0ga21hbGxvYyhqdW5rX2xlbiwgR0ZQX0tFUk5FTCk7CisJaWYgKCFqdW5rKQorCQlyZXR1cm47CisJd2hpbGUgKDEpIHsKKwkJaWYgKHVzYl9idWxrX21zZyhkLT51ZGV2LAorCQkJdXNiX3JjdmJ1bGtwaXBlKGQtPnVkZXYsIGVwKSwKKwkJCWp1bmssIGp1bmtfbGVuLCAmcmRfY291bnQsIHRpbWVvdXQpIDwgMCkKKwkJCWJyZWFrOworCQlpZiAoIXJkX2NvdW50KQorCQkJYnJlYWs7CisJfQorCWtmcmVlKGp1bmspOworfQorCitzdGF0aWMgdm9pZCBjeHVzYl9kNjgwX2RtYl9kcmFpbl92aWRlbyhzdHJ1Y3QgZHZiX3VzYl9kZXZpY2UgKmQpCit7CisJc3RydWN0IHVzYl9kYXRhX3N0cmVhbV9wcm9wZXJ0aWVzICpwID0gJmQtPnByb3BzLmFkYXB0ZXJbMF0uc3RyZWFtOworCWNvbnN0IGludCB0aW1lb3V0ID0gMTAwOworCWNvbnN0IGludCBqdW5rX2xlbiA9IHAtPnUuYnVsay5idWZmZXJzaXplOworCXU4ICAgICAgICAqanVuazsKKwlpbnQgICAgICAgcmRfY291bnQ7CisKKwkvKiBEaXNjYXJkIHJlbWFpbmluZyBkYXRhIGluIHZpZGVvIHBpcGUgKi8KKwlqdW5rID0ga21hbGxvYyhqdW5rX2xlbiwgR0ZQX0tFUk5FTCk7CisJaWYgKCFqdW5rKQorCQlyZXR1cm47CisJd2hpbGUgKDEpIHsKKwkJaWYgKHVzYl9idWxrX21zZyhkLT51ZGV2LAorCQkJdXNiX3JjdmJ1bGtwaXBlKGQtPnVkZXYsIHAtPmVuZHBvaW50KSwKKwkJCWp1bmssIGp1bmtfbGVuLCAmcmRfY291bnQsIHRpbWVvdXQpIDwgMCkKKwkJCWJyZWFrOworCQlpZiAoIXJkX2NvdW50KQorCQkJYnJlYWs7CisJfQorCWtmcmVlKGp1bmspOworfQorCitzdGF0aWMgaW50IGN4dXNiX2Q2ODBfZG1iX3N0cmVhbWluZ19jdHJsKAorCQlzdHJ1Y3QgZHZiX3VzYl9hZGFwdGVyICphZGFwLCBpbnQgb25vZmYpCit7CisJaWYgKG9ub2ZmKSB7CisJCXU4IGJ1ZlsyXSA9IHsgMHgwMywgMHgwMCB9OworCQljeHVzYl9kNjgwX2RtYl9kcmFpbl92aWRlbyhhZGFwLT5kZXYpOworCQlyZXR1cm4gY3h1c2JfY3RybF9tc2coYWRhcC0+ZGV2LCBDTURfU1RSRUFNSU5HX09OLAorCQkJYnVmLCBzaXplb2YoYnVmKSwgTlVMTCwgMCk7CisJfSBlbHNlIHsKKwkJaW50IHJldCA9IGN4dXNiX2N0cmxfbXNnKGFkYXAtPmRldiwKKwkJCUNNRF9TVFJFQU1JTkdfT0ZGLCBOVUxMLCAwLCBOVUxMLCAwKTsKKwkJcmV0dXJuIHJldDsKKwl9Cit9CisKIHN0YXRpYyBpbnQgY3h1c2JfcmNfcXVlcnkoc3RydWN0IGR2Yl91c2JfZGV2aWNlICpkLCB1MzIgKmV2ZW50LCBpbnQgKnN0YXRlKQogewogCXN0cnVjdCBkdmJfdXNiX3JjX2tleSAqa2V5bWFwID0gZC0+cHJvcHMucmNfa2V5X21hcDsKQEAgLTMzNSw2ICs0MzIsMzIgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBjeHVzYl9kNjgwX2RtYl9yY19xdWVyeShzdHJ1Y3QgZHZiX3VzYl9kZXZpY2UgKmQsIHUzMiAqZXZlbnQsCisJCWludCAqc3RhdGUpCit7CisJc3RydWN0IGR2Yl91c2JfcmNfa2V5ICprZXltYXAgPSBkLT5wcm9wcy5yY19rZXlfbWFwOworCXU4IGlyY29kZVsyXTsKKwlpbnQgaTsKKworCSpldmVudCA9IDA7CisJKnN0YXRlID0gUkVNT1RFX05PX0tFWV9QUkVTU0VEOworCisJaWYgKGN4dXNiX2N0cmxfbXNnKGQsIDB4MTAsIE5VTEwsIDAsIGlyY29kZSwgMikgPCAwKQorCQlyZXR1cm4gMDsKKworCWZvciAoaSA9IDA7IGkgPCBkLT5wcm9wcy5yY19rZXlfbWFwX3NpemU7IGkrKykgeworCQlpZiAoa2V5bWFwW2ldLmN1c3RvbSA9PSBpcmNvZGVbMF0gJiYKKwkJICAgIGtleW1hcFtpXS5kYXRhID09IGlyY29kZVsxXSkgeworCQkJKmV2ZW50ID0ga2V5bWFwW2ldLmV2ZW50OworCQkJKnN0YXRlID0gUkVNT1RFX0tFWV9QUkVTU0VEOworCisJCQlyZXR1cm4gMDsKKwkJfQorCX0KKworCXJldHVybiAwOworfQorCiBzdGF0aWMgc3RydWN0IGR2Yl91c2JfcmNfa2V5IGR2aWNvX21jZV9yY19rZXlzW10gPSB7CiAJeyAweGZlLCAweDAyLCBLRVlfVFYgfSwKIAl7IDB4ZmUsIDB4MGUsIEtFWV9NUDMgfSwKQEAgLTQyMiw2ICs1NDUsNDQgQEAKIAl7IDB4ZmMsIDB4MDAsIEtFWV9VTktOT1dOIH0sICAgIC8qIEhEICovCiB9OwogCitzdGF0aWMgc3RydWN0IGR2Yl91c2JfcmNfa2V5IGQ2ODBfZG1iX3JjX2tleXNbXSA9IHsKKwl7IDB4MDAsIDB4MzgsIEtFWV9VTktOT1dOIH0sCS8qIFRWL0FWICovCisJeyAweDA4LCAweDBjLCBLRVlfWk9PTSB9LAorCXsgMHgwOCwgMHgwMCwgS0VZXzAgfSwKKwl7IDB4MDAsIDB4MDEsIEtFWV8xIH0sCisJeyAweDA4LCAweDAyLCBLRVlfMiB9LAorCXsgMHgwMCwgMHgwMywgS0VZXzMgfSwKKwl7IDB4MDgsIDB4MDQsIEtFWV80IH0sCisJeyAweDAwLCAweDA1LCBLRVlfNSB9LAorCXsgMHgwOCwgMHgwNiwgS0VZXzYgfSwKKwl7IDB4MDAsIDB4MDcsIEtFWV83IH0sCisJeyAweDA4LCAweDA4LCBLRVlfOCB9LAorCXsgMHgwMCwgMHgwOSwgS0VZXzkgfSwKKwl7IDB4MDAsIDB4MGEsIEtFWV9NVVRFIH0sCisJeyAweDA4LCAweDI5LCBLRVlfQkFDSyB9LAorCXsgMHgwMCwgMHgxMiwgS0VZX0NIQU5ORUxVUCB9LAorCXsgMHgwOCwgMHgxMywgS0VZX0NIQU5ORUxET1dOIH0sCisJeyAweDAwLCAweDJiLCBLRVlfVk9MVU1FVVAgfSwKKwl7IDB4MDgsIDB4MmMsIEtFWV9WT0xVTUVET1dOIH0sCisJeyAweDAwLCAweDIwLCBLRVlfVVAgfSwKKwl7IDB4MDgsIDB4MjEsIEtFWV9ET1dOIH0sCisJeyAweDAwLCAweDExLCBLRVlfTEVGVCB9LAorCXsgMHgwOCwgMHgxMCwgS0VZX1JJR0hUIH0sCisJeyAweDAwLCAweDBkLCBLRVlfT0sgfSwKKwl7IDB4MDgsIDB4MWYsIEtFWV9SRUNPUkQgfSwKKwl7IDB4MDAsIDB4MTcsIEtFWV9QTEFZUEFVU0UgfSwKKwl7IDB4MDgsIDB4MTYsIEtFWV9QTEFZUEFVU0UgfSwKKwl7IDB4MDAsIDB4MGIsIEtFWV9TVE9QIH0sCisJeyAweDA4LCAweDI3LCBLRVlfRkFTVEZPUldBUkQgfSwKKwl7IDB4MDAsIDB4MjYsIEtFWV9SRVdJTkQgfSwKKwl7IDB4MDgsIDB4MWUsIEtFWV9VTktOT1dOIH0sICAgIC8qIFRpbWUgU2hpZnQgKi8KKwl7IDB4MDAsIDB4MGUsIEtFWV9VTktOT1dOIH0sICAgIC8qIFNuYXBzaG90ICovCisJeyAweDA4LCAweDJkLCBLRVlfVU5LTk9XTiB9LCAgICAvKiBNb3VzZSBDdXJzb3IgKi8KKwl7IDB4MDAsIDB4MGYsIEtFWV9VTktOT1dOIH0sICAgIC8qIE1pbmltaXplL01heGltaXplICovCisJeyAweDA4LCAweDE0LCBLRVlfVU5LTk9XTiB9LCAgICAvKiBTaHVmZmxlICovCisJeyAweDAwLCAweDI1LCBLRVlfUE9XRVIgfSwKK307CisKIHN0YXRpYyBpbnQgY3h1c2JfZGVlMTYwMV9kZW1vZF9pbml0KHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlKQogewogCXN0YXRpYyB1OCBjbG9ja19jb25maWcgW10gID0geyBDTE9DS19DVEwsICAweDM4LCAweDI4IH07CkBAIC01MjcsNiArNjg4LDI0IEBACiAJLkFnY01hc3RlckJ5dGUgICA9IDB4MDAsCiB9OwogCisvKiBGSVhNRTogbmVlZHMgdHdlYWtpbmcgKi8KK3N0YXRpYyBzdHJ1Y3QgbXhsNTAwNXNfY29uZmlnIGQ2ODBfZG1iX3R1bmVyID0geworCS5pMmNfYWRkcmVzcyAgICAgPSAweDYzLAorCS5pZl9mcmVxICAgICAgICAgPSAzNjEyNTAwMFVMLAorCS54dGFsX2ZyZXEgICAgICAgPSBDUllTVEFMX0ZSRVFfMTYwMDAwMDBIWiwKKwkuYWdjX21vZGUgICAgICAgID0gTVhMX1NJTkdMRV9BR0MsCisJLnRyYWNraW5nX2ZpbHRlciA9IE1YTF9URl9DLAorCS5yc3NpX2VuYWJsZSAgICAgPSBNWExfUlNTSV9FTkFCTEUsCisJLmNhcF9zZWxlY3QgICAgICA9IE1YTF9DQVBfU0VMX0VOQUJMRSwKKwkuZGl2X291dCAgICAgICAgID0gTVhMX0RJVl9PVVRfNCwKKwkuY2xvY2tfb3V0ICAgICAgID0gTVhMX0NMT0NLX09VVF9ESVNBQkxFLAorCS5vdXRwdXRfbG9hZCAgICAgPSBNWEw1MDA1U19JRl9PVVRQVVRfTE9BRF8yMDBfT0hNLAorCS50b3AJCSA9IE1YTDUwMDVTX1RPUF8yNVAyLAorCS5tb2RfbW9kZSAgICAgICAgPSBNWExfRElHSVRBTF9NT0RFLAorCS5pZl9tb2RlICAgICAgICAgPSBNWExfWkVST19JRiwKKwkuQWdjTWFzdGVyQnl0ZSAgID0gMHgwMCwKK307CisKIC8qIENhbGxiYWNrcyBmb3IgRFZCIFVTQiAqLwogc3RhdGljIGludCBjeHVzYl9mbWQxMjE2bWVfdHVuZXJfYXR0YWNoKHN0cnVjdCBkdmJfdXNiX2FkYXB0ZXIgKmFkYXApCiB7CkBAIC01NjMsNyArNzQyLDggQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBkdmljb19ibHVlYmlyZF94YzIwMjhfY2FsbGJhY2sodm9pZCAqcHRyLCBpbnQgY29tbWFuZCwgaW50IGFyZykKK3N0YXRpYyBpbnQgZHZpY29fYmx1ZWJpcmRfeGMyMDI4X2NhbGxiYWNrKHZvaWQgKnB0ciwgaW50IGNvbXBvbmVudCwKKwkJCQkJICBpbnQgY29tbWFuZCwgaW50IGFyZykKIHsKIAlzdHJ1Y3QgZHZiX3VzYl9hZGFwdGVyICphZGFwID0gcHRyOwogCXN0cnVjdCBkdmJfdXNiX2RldmljZSAqZCA9IGFkYXAtPmRldjsKQEAgLTU5MSwxNCArNzcxLDE2IEBACiAJc3RydWN0IHhjMjAyOF9jb25maWcJICBjZmcgPSB7CiAJCS5pMmNfYWRhcCAgPSAmYWRhcC0+ZGV2LT5pMmNfYWRhcCwKIAkJLmkyY19hZGRyICA9IDB4NjEsCi0JCS5jYWxsYmFjayAgPSBkdmljb19ibHVlYmlyZF94YzIwMjhfY2FsbGJhY2ssCiAJfTsKIAlzdGF0aWMgc3RydWN0IHhjMjAyOF9jdHJsIGN0bCA9IHsKLQkJLmZuYW1lICAgICAgID0gInhjMzAyOC12MjcuZnciLAorCQkuZm5hbWUgICAgICAgPSBYQzIwMjhfREVGQVVMVF9GSVJNV0FSRSwKIAkJLm1heF9sZW4gICAgID0gNjQsCiAJCS5kZW1vZCAgICAgICA9IFhDMzAyOF9GRV9aQVJMSU5LNDU2LAogCX07CiAKKwkvKiBGSVhNRTogZ2VuZXJhbGl6ZSAmIG1vdmUgdG8gY29tbW9uIGFyZWEgKi8KKwlhZGFwLT5mZS0+Y2FsbGJhY2sgPSBkdmljb19ibHVlYmlyZF94YzIwMjhfY2FsbGJhY2s7CisKIAlmZSA9IGR2Yl9hdHRhY2goeGMyMDI4X2F0dGFjaCwgYWRhcC0+ZmUsICZjZmcpOwogCWlmIChmZSA9PSBOVUxMIHx8IGZlLT5vcHMudHVuZXJfb3BzLnNldF9jb25maWcgPT0gTlVMTCkKIAkJcmV0dXJuIC1FSU87CkBAIC02MTUsNiArNzk3LDE0IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgY3h1c2JfZDY4MF9kbWJfdHVuZXJfYXR0YWNoKHN0cnVjdCBkdmJfdXNiX2FkYXB0ZXIgKmFkYXApCit7CisJc3RydWN0IGR2Yl9mcm9udGVuZCAqZmU7CisJZmUgPSBkdmJfYXR0YWNoKG14bDUwMDVzX2F0dGFjaCwgYWRhcC0+ZmUsCisJCQkmYWRhcC0+ZGV2LT5pMmNfYWRhcCwgJmQ2ODBfZG1iX3R1bmVyKTsKKwlyZXR1cm4gKGZlID09IE5VTEwpID8gLUVJTyA6IDA7Cit9CisKIHN0YXRpYyBpbnQgY3h1c2JfY3gyMjcwMl9mcm9udGVuZF9hdHRhY2goc3RydWN0IGR2Yl91c2JfYWRhcHRlciAqYWRhcCkKIHsKIAl1OCBiOwpAQCAtNzI2LDYgKzkxNiwxNTkgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIHN0cnVjdCBkaWJ4MDAwX2FnY19jb25maWcgZGliNzA3MF9hZ2NfY29uZmlnID0geworCS5iYW5kX2NhcHMgPSBCQU5EX1VIRiB8IEJBTkRfVkhGIHwgQkFORF9MQkFORCB8IEJBTkRfU0JBTkQsCisKKwkvKgorCSAqIFBfYWdjX3VzZV9zZF9tb2QxPTAsIFBfYWdjX3VzZV9zZF9tb2QyPTAsIFBfYWdjX2ZyZXFfcHdtX2Rpdj01LAorCSAqIFBfYWdjX2ludl9wd20xPTAsIFBfYWdjX2ludl9wd20yPTAsIFBfYWdjX2luaF9kY19ydl9lc3Q9MCwKKwkgKiBQX2FnY190aW1lX2VzdD0zLCBQX2FnY19mcmVlemU9MCwgUF9hZ2NfbmJfZXN0PTUsIFBfYWdjX3dyaXRlPTAKKwkgKi8KKwkuc2V0dXAgPSAoMCA8PCAxNSkgfCAoMCA8PCAxNCkgfCAoNSA8PCAxMSkgfCAoMCA8PCAxMCkgfCAoMCA8PCA5KSB8CisJCSAoMCA8PCA4KSB8ICgzIDw8IDUpIHwgKDAgPDwgNCkgfCAoNSA8PCAxKSB8ICgwIDw8IDApLAorCS5pbnZfZ2FpbiA9IDYwMCwKKwkudGltZV9zdGFiaWxpeiA9IDEwLAorCS5hbHBoYV9sZXZlbCA9IDAsCisJLnRobG9jayA9IDExOCwKKwkud2JkX2ludiA9IDAsCisJLndiZF9yZWYgPSAzNTMwLAorCS53YmRfc2VsID0gMSwKKwkud2JkX2FscGhhID0gNSwKKwkuYWdjMV9tYXggPSA2NTUzNSwKKwkuYWdjMV9taW4gPSAwLAorCS5hZ2MyX21heCA9IDY1NTM1LAorCS5hZ2MyX21pbiA9IDAsCisJLmFnYzFfcHQxID0gMCwKKwkuYWdjMV9wdDIgPSA0MCwKKwkuYWdjMV9wdDMgPSAxODMsCisJLmFnYzFfc2xvcGUxID0gMjA2LAorCS5hZ2MxX3Nsb3BlMiA9IDI1NSwKKwkuYWdjMl9wdDEgPSA3MiwKKwkuYWdjMl9wdDIgPSAxNTIsCisJLmFnYzJfc2xvcGUxID0gODgsCisJLmFnYzJfc2xvcGUyID0gOTAsCisJLmFscGhhX21hbnQgPSAxNywKKwkuYWxwaGFfZXhwID0gMjcsCisJLmJldGFfbWFudCA9IDIzLAorCS5iZXRhX2V4cCA9IDUxLAorCS5wZXJmb3JtX2FnY19zb2Z0c3BsaXQgPSAwLAorfTsKKworc3RhdGljIHN0cnVjdCBkaWJ4MDAwX2JhbmR3aWR0aF9jb25maWcgZGliNzA3MF9id19jb25maWdfMTJfbWh6ID0geworCS5pbnRlcm5hbCA9IDYwMDAwLAorCS5zYW1wbGluZyA9IDE1MDAwLAorCS5wbGxfcHJlZGl2ID0gMSwKKwkucGxsX3JhdGlvID0gMjAsCisJLnBsbF9yYW5nZSA9IDMsCisJLnBsbF9yZXNldCA9IDEsCisJLnBsbF9ieXBhc3MgPSAwLAorCS5lbmFibGVfcmVmZGl2ID0gMCwKKwkuYnlwY2xrX2RpdiA9IDAsCisJLklPX0NMS19lbl9jb3JlID0gMSwKKwkuQURDbGtTcmMgPSAxLAorCS5tb2R1bG8gPSAyLAorCS8qIHJlZnNlbCwgc2VsLCBmcmVxXzE1ayAqLworCS5zYWRfY2ZnID0gKDMgPDwgMTQpIHwgKDEgPDwgMTIpIHwgKDUyNCA8PCAwKSwKKwkuaWZyZXEgPSAoMCA8PCAyNSkgfCAwLAorCS50aW1mID0gMjA0NTIyMjUsCisJLnh0YWxfaHogPSAxMjAwMDAwMCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgZGliNzAwMHBfY29uZmlnIGN4dXNiX2R1YWxkaWc0X3JldjJfY29uZmlnID0geworCS5vdXRwdXRfbW9kZSA9IE9VVE1PREVfTVBFRzJfUEFSX0dBVEVEX0NMSywKKwkub3V0cHV0X21wZWcyX2luXzE4OF9ieXRlcyA9IDEsCisKKwkuYWdjX2NvbmZpZ19jb3VudCA9IDEsCisJLmFnYyA9ICZkaWI3MDcwX2FnY19jb25maWcsCisJLmJ3ICA9ICZkaWI3MDcwX2J3X2NvbmZpZ18xMl9taHosCisJLnR1bmVyX2lzX2Jhc2ViYW5kID0gMSwKKwkuc3B1cl9wcm90ZWN0ID0gMSwKKworCS5ncGlvX2RpciA9IDB4ZmNlZiwKKwkuZ3Bpb192YWwgPSAweDAxMTAsCisKKwkuZ3Bpb19wd21fcG9zID0gRElCNzAwMFBfR1BJT19ERUZBVUxUX1BXTV9QT1MsCisKKwkuaG9zdGJ1c19kaXZlcnNpdHkgPSAxLAorfTsKKworc3RhdGljIGludCBjeHVzYl9kdWFsZGlnNF9yZXYyX2Zyb250ZW5kX2F0dGFjaChzdHJ1Y3QgZHZiX3VzYl9hZGFwdGVyICphZGFwKQoreworCWlmICh1c2Jfc2V0X2ludGVyZmFjZShhZGFwLT5kZXYtPnVkZXYsIDAsIDEpIDwgMCkKKwkJZXJyKCJzZXQgaW50ZXJmYWNlIGZhaWxlZCIpOworCisJY3h1c2JfY3RybF9tc2coYWRhcC0+ZGV2LCBDTURfRElHSVRBTCwgTlVMTCwgMCwgTlVMTCwgMCk7CisKKwljeHVzYl9ibHVlYmlyZF9ncGlvX3B1bHNlKGFkYXAtPmRldiwgMHgwMiwgMSk7CisKKwlkaWI3MDAwcF9pMmNfZW51bWVyYXRpb24oJmFkYXAtPmRldi0+aTJjX2FkYXAsIDEsIDE4LAorCQkJCSAmY3h1c2JfZHVhbGRpZzRfcmV2Ml9jb25maWcpOworCisJYWRhcC0+ZmUgPSBkdmJfYXR0YWNoKGRpYjcwMDBwX2F0dGFjaCwgJmFkYXAtPmRldi0+aTJjX2FkYXAsIDB4ODAsCisJCQkgICAgICAmY3h1c2JfZHVhbGRpZzRfcmV2Ml9jb25maWcpOworCWlmIChhZGFwLT5mZSA9PSBOVUxMKQorCQlyZXR1cm4gLUVJTzsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGRpYjcwNzBfdHVuZXJfcmVzZXQoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIGludCBvbm9mZikKK3sKKwlyZXR1cm4gZGliNzAwMHBfc2V0X2dwaW8oZmUsIDgsIDAsICFvbm9mZik7Cit9CisKK3N0YXRpYyBpbnQgZGliNzA3MF90dW5lcl9zbGVlcChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgaW50IG9ub2ZmKQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGRpYjAwNzBfY29uZmlnIGRpYjcwNzBwX2RpYjAwNzBfY29uZmlnID0geworCS5pMmNfYWRkcmVzcyA9IERFRkFVTFRfRElCMDA3MF9JMkNfQUREUkVTUywKKwkucmVzZXQgPSBkaWI3MDcwX3R1bmVyX3Jlc2V0LAorCS5zbGVlcCA9IGRpYjcwNzBfdHVuZXJfc2xlZXAsCisJLmNsb2NrX2toeiA9IDEyMDAwLAorfTsKKworc3RydWN0IGRpYjA3MDBfYWRhcHRlcl9zdGF0ZSB7CisJaW50ICgqc2V0X3BhcmFtX3NhdmUpIChzdHJ1Y3QgZHZiX2Zyb250ZW5kICosCisJCQkgICAgICAgc3RydWN0IGR2Yl9mcm9udGVuZF9wYXJhbWV0ZXJzICopOworfTsKKworc3RhdGljIGludCBkaWI3MDcwX3NldF9wYXJhbV9vdmVycmlkZShzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwKKwkJCQkgICAgICBzdHJ1Y3QgZHZiX2Zyb250ZW5kX3BhcmFtZXRlcnMgKmZlcCkKK3sKKwlzdHJ1Y3QgZHZiX3VzYl9hZGFwdGVyICphZGFwID0gZmUtPmR2Yi0+cHJpdjsKKwlzdHJ1Y3QgZGliMDcwMF9hZGFwdGVyX3N0YXRlICpzdGF0ZSA9IGFkYXAtPnByaXY7CisKKwl1MTYgb2Zmc2V0OworCXU4IGJhbmQgPSBCQU5EX09GX0ZSRVFVRU5DWShmZXAtPmZyZXF1ZW5jeS8xMDAwKTsKKwlzd2l0Y2ggKGJhbmQpIHsKKwljYXNlIEJBTkRfVkhGOiBvZmZzZXQgPSA5NTA7IGJyZWFrOworCWRlZmF1bHQ6CisJY2FzZSBCQU5EX1VIRjogb2Zmc2V0ID0gNTUwOyBicmVhazsKKwl9CisKKwlkaWI3MDAwcF9zZXRfd2JkX3JlZihmZSwgb2Zmc2V0ICsgZGliMDA3MF93YmRfb2Zmc2V0KGZlKSk7CisKKwlyZXR1cm4gc3RhdGUtPnNldF9wYXJhbV9zYXZlKGZlLCBmZXApOworfQorCitzdGF0aWMgaW50IGN4dXNiX2R1YWxkaWc0X3JldjJfdHVuZXJfYXR0YWNoKHN0cnVjdCBkdmJfdXNiX2FkYXB0ZXIgKmFkYXApCit7CisJc3RydWN0IGRpYjA3MDBfYWRhcHRlcl9zdGF0ZSAqc3QgPSBhZGFwLT5wcml2OworCXN0cnVjdCBpMmNfYWRhcHRlciAqdHVuX2kyYyA9CisJCWRpYjcwMDBwX2dldF9pMmNfbWFzdGVyKGFkYXAtPmZlLAorCQkJCQlESUJYMDAwX0kyQ19JTlRFUkZBQ0VfVFVORVIsIDEpOworCisJaWYgKGR2Yl9hdHRhY2goZGliMDA3MF9hdHRhY2gsIGFkYXAtPmZlLCB0dW5faTJjLAorCSAgICAmZGliNzA3MHBfZGliMDA3MF9jb25maWcpID09IE5VTEwpCisJCXJldHVybiAtRU5PREVWOworCisJc3QtPnNldF9wYXJhbV9zYXZlID0gYWRhcC0+ZmUtPm9wcy50dW5lcl9vcHMuc2V0X3BhcmFtczsKKwlhZGFwLT5mZS0+b3BzLnR1bmVyX29wcy5zZXRfcGFyYW1zID0gZGliNzA3MF9zZXRfcGFyYW1fb3ZlcnJpZGU7CisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbnQgY3h1c2JfbmFubzJfZnJvbnRlbmRfYXR0YWNoKHN0cnVjdCBkdmJfdXNiX2FkYXB0ZXIgKmFkYXApCiB7CiAJaWYgKHVzYl9zZXRfaW50ZXJmYWNlKGFkYXAtPmRldi0+dWRldiwgMCwgMSkgPCAwKQpAQCAtNzUxLDYgKzEwOTQsNTQgQEAKIAlyZXR1cm4gLUVJTzsKIH0KIAorc3RhdGljIHN0cnVjdCBsZ3M4Z2w1X2NvbmZpZyBsZ3M4Z2w1X2NmZyA9IHsKKwkuZGVtb2RfYWRkcmVzcyA9IDB4MTksCit9OworCitzdGF0aWMgaW50IGN4dXNiX2Q2ODBfZG1iX2Zyb250ZW5kX2F0dGFjaChzdHJ1Y3QgZHZiX3VzYl9hZGFwdGVyICphZGFwKQoreworCXN0cnVjdCBkdmJfdXNiX2RldmljZSAqZCA9IGFkYXAtPmRldjsKKwlpbnQgbjsKKworCS8qIFNlbGVjdCByZXF1aXJlZCBVU0IgY29uZmlndXJhdGlvbiAqLworCWlmICh1c2Jfc2V0X2ludGVyZmFjZShkLT51ZGV2LCAwLCAwKSA8IDApCisJCWVycigic2V0IGludGVyZmFjZSBmYWlsZWQiKTsKKworCS8qIFVuYmxvY2sgYWxsIFVTQiBwaXBlcyAqLworCXVzYl9jbGVhcl9oYWx0KGQtPnVkZXYsCisJCXVzYl9zbmRidWxrcGlwZShkLT51ZGV2LCBkLT5wcm9wcy5nZW5lcmljX2J1bGtfY3RybF9lbmRwb2ludCkpOworCXVzYl9jbGVhcl9oYWx0KGQtPnVkZXYsCisJCXVzYl9yY3ZidWxrcGlwZShkLT51ZGV2LCBkLT5wcm9wcy5nZW5lcmljX2J1bGtfY3RybF9lbmRwb2ludCkpOworCXVzYl9jbGVhcl9oYWx0KGQtPnVkZXYsCisJCXVzYl9yY3ZidWxrcGlwZShkLT51ZGV2LCBkLT5wcm9wcy5hZGFwdGVyWzBdLnN0cmVhbS5lbmRwb2ludCkpOworCisJLyogRHJhaW4gVVNCIHBpcGVzIHRvIGF2b2lkIGhhbmcgYWZ0ZXIgcmVib290ICovCisJZm9yIChuID0gMDsgIG4gPCA1OyAgbisrKSB7CisJCWN4dXNiX2Q2ODBfZG1iX2RyYWluX21lc3NhZ2UoZCk7CisJCWN4dXNiX2Q2ODBfZG1iX2RyYWluX3ZpZGVvKGQpOworCQltc2xlZXAoMjAwKTsKKwl9CisKKwkvKiBSZXNldCB0aGUgdHVuZXIgKi8KKwlpZiAoY3h1c2JfZDY4MF9kbWJfZ3Bpb190dW5lcihkLCAweDA3LCAwKSA8IDApIHsKKwkJZXJyKCJjbGVhciB0dW5lciBncGlvIGZhaWxlZCIpOworCQlyZXR1cm4gLUVJTzsKKwl9CisJbXNsZWVwKDEwMCk7CisJaWYgKGN4dXNiX2Q2ODBfZG1iX2dwaW9fdHVuZXIoZCwgMHgwNywgMSkgPCAwKSB7CisJCWVycigic2V0IHR1bmVyIGdwaW8gZmFpbGVkIik7CisJCXJldHVybiAtRUlPOworCX0KKwltc2xlZXAoMTAwKTsKKworCS8qIEF0dGFjaCBmcm9udGVuZCAqLworCWFkYXAtPmZlID0gZHZiX2F0dGFjaChsZ3M4Z2w1X2F0dGFjaCwgJmxnczhnbDVfY2ZnLCAmZC0+aTJjX2FkYXApOworCWlmIChhZGFwLT5mZSA9PSBOVUxMKQorCQlyZXR1cm4gLUVJTzsKKworCXJldHVybiAwOworfQorCiAvKgogICogRFZpQ08gaGFzIHNoaXBwZWQgdHdvIGRldmljZXMgd2l0aCB0aGUgc2FtZSBVU0IgSUQsIGJ1dCBvbmx5IG9uZSBvZiB0aGVtCiAgKiBuZWVkcyBhIGZpcm13YXJlIGRvd25sb2FkLiAgQ2hlY2sgdGhlIGRldmljZSBjbGFzcyBkZXRhaWxzIHRvIHNlZSBpZiB0aGV5CkBAIC04MjYsOSArMTIxNywxMSBAQAogc3RhdGljIHN0cnVjdCBkdmJfdXNiX2RldmljZV9wcm9wZXJ0aWVzIGN4dXNiX2JsdWViaXJkX2xnejIwMV9wcm9wZXJ0aWVzOwogc3RhdGljIHN0cnVjdCBkdmJfdXNiX2RldmljZV9wcm9wZXJ0aWVzIGN4dXNiX2JsdWViaXJkX2R0dDc1NzlfcHJvcGVydGllczsKIHN0YXRpYyBzdHJ1Y3QgZHZiX3VzYl9kZXZpY2VfcHJvcGVydGllcyBjeHVzYl9ibHVlYmlyZF9kdWFsZGlnNF9wcm9wZXJ0aWVzOworc3RhdGljIHN0cnVjdCBkdmJfdXNiX2RldmljZV9wcm9wZXJ0aWVzIGN4dXNiX2JsdWViaXJkX2R1YWxkaWc0X3JldjJfcHJvcGVydGllczsKIHN0YXRpYyBzdHJ1Y3QgZHZiX3VzYl9kZXZpY2VfcHJvcGVydGllcyBjeHVzYl9ibHVlYmlyZF9uYW5vMl9wcm9wZXJ0aWVzOwogc3RhdGljIHN0cnVjdCBkdmJfdXNiX2RldmljZV9wcm9wZXJ0aWVzIGN4dXNiX2JsdWViaXJkX25hbm8yX25lZWRzZmlybXdhcmVfcHJvcGVydGllczsKIHN0YXRpYyBzdHJ1Y3QgZHZiX3VzYl9kZXZpY2VfcHJvcGVydGllcyBjeHVzYl9hdmVyX2E4NjhyX3Byb3BlcnRpZXM7CitzdGF0aWMgc3RydWN0IGR2Yl91c2JfZGV2aWNlX3Byb3BlcnRpZXMgY3h1c2JfZDY4MF9kbWJfcHJvcGVydGllczsKIAogc3RhdGljIGludCBjeHVzYl9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwKIAkJICAgICAgIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKQEAgLTg1Miw2ICsxMjQ1LDExIEBACiAJCQkJICAgICBUSElTX01PRFVMRSwgTlVMTCwgYWRhcHRlcl9ucikgfHwKIAkgICAgMCA9PSBkdmJfdXNiX2RldmljZV9pbml0KGludGYsICZjeHVzYl9hdmVyX2E4NjhyX3Byb3BlcnRpZXMsCiAJCQkJICAgICBUSElTX01PRFVMRSwgTlVMTCwgYWRhcHRlcl9ucikgfHwKKwkgICAgMCA9PSBkdmJfdXNiX2RldmljZV9pbml0KGludGYsCisJCQkJICAgICAmY3h1c2JfYmx1ZWJpcmRfZHVhbGRpZzRfcmV2Ml9wcm9wZXJ0aWVzLAorCQkJCSAgICAgVEhJU19NT0RVTEUsIE5VTEwsIGFkYXB0ZXJfbnIpIHx8CisJICAgIDAgPT0gZHZiX3VzYl9kZXZpY2VfaW5pdChpbnRmLCAmY3h1c2JfZDY4MF9kbWJfcHJvcGVydGllcywKKwkJCQkgICAgIFRISVNfTU9EVUxFLCBOVUxMLCBhZGFwdGVyX25yKSB8fAogCSAgICAwKQogCQlyZXR1cm4gMDsKIApAQCAtODc2LDYgKzEyNzQsOCBAQAogCXsgVVNCX0RFVklDRShVU0JfVklEX0RWSUNPLCBVU0JfUElEX0RWSUNPX0JMVUVCSVJEX0RWQl9UX05BTk9fMikgfSwKIAl7IFVTQl9ERVZJQ0UoVVNCX1ZJRF9EVklDTywgVVNCX1BJRF9EVklDT19CTFVFQklSRF9EVkJfVF9OQU5PXzJfTkZXX1dBUk0pIH0sCiAJeyBVU0JfREVWSUNFKFVTQl9WSURfQVZFUk1FRElBLCBVU0JfUElEX0FWRVJNRURJQV9WT0xBUl9BODY4UikgfSwKKwl7IFVTQl9ERVZJQ0UoVVNCX1ZJRF9EVklDTywgVVNCX1BJRF9EVklDT19CTFVFQklSRF9EVUFMXzRfUkVWXzIpIH0sCisJeyBVU0JfREVWSUNFKFVTQl9WSURfQ09ORVhBTlQsIFVTQl9QSURfQ09ORVhBTlRfRDY4MF9ETUIpIH0sCiAJe30JCS8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCiB9OwogTU9EVUxFX0RFVklDRV9UQUJMRSAodXNiLCBjeHVzYl90YWJsZSk7CkBAIC0xMzIxLDYgKzE3MjEsMTA0IEBACiAJfQogfTsKIAorc3RhdGljCitzdHJ1Y3QgZHZiX3VzYl9kZXZpY2VfcHJvcGVydGllcyBjeHVzYl9ibHVlYmlyZF9kdWFsZGlnNF9yZXYyX3Byb3BlcnRpZXMgPSB7CisJLmNhcHMgPSBEVkJfVVNCX0lTX0FOX0kyQ19BREFQVEVSLAorCisJLnVzYl9jdHJsICAgICAgICAgPSBDWVBSRVNTX0ZYMiwKKworCS5zaXplX29mX3ByaXYgICAgID0gc2l6ZW9mKHN0cnVjdCBjeHVzYl9zdGF0ZSksCisKKwkubnVtX2FkYXB0ZXJzID0gMSwKKwkuYWRhcHRlciA9IHsKKwkJeworCQkJLnN0cmVhbWluZ19jdHJsICA9IGN4dXNiX3N0cmVhbWluZ19jdHJsLAorCQkJLmZyb250ZW5kX2F0dGFjaCA9IGN4dXNiX2R1YWxkaWc0X3JldjJfZnJvbnRlbmRfYXR0YWNoLAorCQkJLnR1bmVyX2F0dGFjaCAgICA9IGN4dXNiX2R1YWxkaWc0X3JldjJfdHVuZXJfYXR0YWNoLAorCQkJLnNpemVfb2ZfcHJpdiAgICA9IHNpemVvZihzdHJ1Y3QgZGliMDcwMF9hZGFwdGVyX3N0YXRlKSwKKwkJCS8qIHBhcmFtZXRlciBmb3IgdGhlIE1QRUcyLWRhdGEgdHJhbnNmZXIgKi8KKwkJCS5zdHJlYW0gPSB7CisJCQkJLnR5cGUgPSBVU0JfQlVMSywKKwkJCQkuY291bnQgPSA3LAorCQkJCS5lbmRwb2ludCA9IDB4MDIsCisJCQkJLnUgPSB7CisJCQkJCS5idWxrID0geworCQkJCQkJLmJ1ZmZlcnNpemUgPSA0MDk2LAorCQkJCQl9CisJCQkJfQorCQkJfSwKKwkJfSwKKwl9LAorCisJLnBvd2VyX2N0cmwgICAgICAgPSBjeHVzYl9ibHVlYmlyZF9wb3dlcl9jdHJsLAorCisJLmkyY19hbGdvICAgICAgICAgPSAmY3h1c2JfaTJjX2FsZ28sCisKKwkuZ2VuZXJpY19idWxrX2N0cmxfZW5kcG9pbnQgPSAweDAxLAorCisJLnJjX2ludGVydmFsICAgICAgPSAxMDAsCisJLnJjX2tleV9tYXAgICAgICAgPSBkdmljb19tY2VfcmNfa2V5cywKKwkucmNfa2V5X21hcF9zaXplICA9IEFSUkFZX1NJWkUoZHZpY29fbWNlX3JjX2tleXMpLAorCS5yY19xdWVyeSAgICAgICAgID0gY3h1c2JfcmNfcXVlcnksCisKKwkubnVtX2RldmljZV9kZXNjcyA9IDEsCisJLmRldmljZXMgPSB7CisJCXsgICAiRFZpQ08gRnVzaW9uSERUViBEVkItVCBEdWFsIERpZ2l0YWwgNCAocmV2IDIpIiwKKwkJCXsgTlVMTCB9LAorCQkJeyAmY3h1c2JfdGFibGVbMTddLCBOVUxMIH0sCisJCX0sCisJfQorfTsKKworc3RhdGljIHN0cnVjdCBkdmJfdXNiX2RldmljZV9wcm9wZXJ0aWVzIGN4dXNiX2Q2ODBfZG1iX3Byb3BlcnRpZXMgPSB7CisJLmNhcHMgPSBEVkJfVVNCX0lTX0FOX0kyQ19BREFQVEVSLAorCisJLnVzYl9jdHJsICAgICAgICAgPSBDWVBSRVNTX0ZYMiwKKworCS5zaXplX29mX3ByaXYgICAgID0gc2l6ZW9mKHN0cnVjdCBjeHVzYl9zdGF0ZSksCisKKwkubnVtX2FkYXB0ZXJzID0gMSwKKwkuYWRhcHRlciA9IHsKKwkJeworCQkJLnN0cmVhbWluZ19jdHJsICAgPSBjeHVzYl9kNjgwX2RtYl9zdHJlYW1pbmdfY3RybCwKKwkJCS5mcm9udGVuZF9hdHRhY2ggID0gY3h1c2JfZDY4MF9kbWJfZnJvbnRlbmRfYXR0YWNoLAorCQkJLnR1bmVyX2F0dGFjaCAgICAgPSBjeHVzYl9kNjgwX2RtYl90dW5lcl9hdHRhY2gsCisKKwkJCS8qIHBhcmFtZXRlciBmb3IgdGhlIE1QRUcyLWRhdGEgdHJhbnNmZXIgKi8KKwkJCS5zdHJlYW0gPSB7CisJCQkJLnR5cGUgPSBVU0JfQlVMSywKKwkJCQkuY291bnQgPSA1LAorCQkJCS5lbmRwb2ludCA9IDB4MDIsCisJCQkJLnUgPSB7CisJCQkJCS5idWxrID0geworCQkJCQkJLmJ1ZmZlcnNpemUgPSA4MTkyLAorCQkJCQl9CisJCQkJfQorCQkJfSwKKwkJfSwKKwl9LAorCisJLnBvd2VyX2N0cmwgICAgICAgPSBjeHVzYl9kNjgwX2RtYl9wb3dlcl9jdHJsLAorCisJLmkyY19hbGdvICAgICAgICAgPSAmY3h1c2JfaTJjX2FsZ28sCisKKwkuZ2VuZXJpY19idWxrX2N0cmxfZW5kcG9pbnQgPSAweDAxLAorCisJLnJjX2ludGVydmFsICAgICAgPSAxMDAsCisJLnJjX2tleV9tYXAgICAgICAgPSBkNjgwX2RtYl9yY19rZXlzLAorCS5yY19rZXlfbWFwX3NpemUgID0gQVJSQVlfU0laRShkNjgwX2RtYl9yY19rZXlzKSwKKwkucmNfcXVlcnkgICAgICAgICA9IGN4dXNiX2Q2ODBfZG1iX3JjX3F1ZXJ5LAorCisJLm51bV9kZXZpY2VfZGVzY3MgPSAxLAorCS5kZXZpY2VzID0geworCQl7CisJCQkiQ29uZXhhbnQgRE1CLVRIIFN0aWNrIiwKKwkJCXsgTlVMTCB9LAorCQkJeyAmY3h1c2JfdGFibGVbMThdLCBOVUxMIH0sCisJCX0sCisJfQorfTsKKwogc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIGN4dXNiX2RyaXZlciA9IHsKIAkubmFtZQkJPSAiZHZiX3VzYl9jeHVzYiIsCiAJLnByb2JlCQk9IGN4dXNiX3Byb2JlLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kaWIwNzAwLmggYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2RpYjA3MDAuaAppbmRleCA2NmQ0ZGM2Li43MzkxOTM5IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2RpYjA3MDAuaAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2RpYjA3MDAuaApAQCAtMzEsNiArMzEsOCBAQAogCS8vIDIgQnl0ZTogTVBFRzIgbW9kZTogIDRNU0IoMSA9IE1hc3RlciBNb2RlLCAwID0gU2xhdmUgTW9kZSkgNExTQihDaGFubmVsIDEgPSBiaXQwLCBDaGFubmVsIDIgPSBiaXQxKQogCS8vIDIgQnl0ZTogQW5hbG9nIG1vZGU6IDRNU0IoMCA9IDYyNSBsaW5lcywgMSA9IDUyNSBsaW5lcykgICAgNExTQiggICAgICIgICAgICAgICAgICAgICAgIiAgICAgICAgICAgKQogI2RlZmluZSBSRVFVRVNUX1NFVF9SQyAgICAgICAweDExCisjZGVmaW5lIFJFUVVFU1RfTkVXX0kyQ19SRUFEIDB4MTIKKyNkZWZpbmUgUkVRVUVTVF9ORVdfSTJDX1dSSVRFIDB4MTMKICNkZWZpbmUgUkVRVUVTVF9HRVRfVkVSU0lPTiAgMHgxNQogCiBzdHJ1Y3QgZGliMDcwMF9zdGF0ZSB7CkBAIC0zOSw2ICs0MSw4IEBACiAJdTggcmNfdG9nZ2xlOwogCXU4IHJjX2NvdW50ZXI7CiAJdTggaXNfZGliNzAwMHBjOworCXU4IGZ3X3VzZV9uZXdfaTJjX2FwaTsKKwl1OCBkaXNhYmxlX3N0cmVhbWluZ19tYXN0ZXJfbW9kZTsKIH07CiAKIGV4dGVybiBpbnQgZGliMDcwMF9zZXRfZ3BpbyhzdHJ1Y3QgZHZiX3VzYl9kZXZpY2UgKiwgZW51bSBkaWIwN3gwX2dwaW9zIGdwaW8sIHU4IGdwaW9fZGlyLCB1OCBncGlvX3ZhbCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2RpYjA3MDBfY29yZS5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kaWIwNzAwX2NvcmUuYwppbmRleCA1OTVhMDQ2Li5kZDUzY2VlIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2RpYjA3MDBfY29yZS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZGliMDcwMF9jb3JlLmMKQEAgLTgyLDkgKzgyLDk4IEBACiB9CiAKIC8qCi0gKiBJMkMgbWFzdGVyIHhmZXIgZnVuY3Rpb24KKyAqIEkyQyBtYXN0ZXIgeGZlciBmdW5jdGlvbiAoc3VwcG9ydGVkIGluIDEuMjAgZmlybXdhcmUpCiAgKi8KLXN0YXRpYyBpbnQgZGliMDcwMF9pMmNfeGZlcihzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXAsc3RydWN0IGkyY19tc2cgKm1zZyxpbnQgbnVtKQorc3RhdGljIGludCBkaWIwNzAwX2kyY194ZmVyX25ldyhzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXAsIHN0cnVjdCBpMmNfbXNnICptc2csCisJCQkJaW50IG51bSkKK3sKKwkvKiBUaGUgbmV3IGkyYyBmaXJtd2FyZSBtZXNzYWdlcyBhcmUgbW9yZSByZWxpYWJsZSBhbmQgaW4gcGFydGljdWxhcgorCSAgIHByb3Blcmx5IHN1cHBvcnQgaTJjIHJlYWQgY2FsbHMgbm90IHByZWNlZGVkIGJ5IGEgd3JpdGUgKi8KKworCXN0cnVjdCBkdmJfdXNiX2RldmljZSAqZCA9IGkyY19nZXRfYWRhcGRhdGEoYWRhcCk7CisJdWludDhfdCBidXNfbW9kZSA9IDE7ICAvKiAwPWVlcHJvbSBidXMsIDE9ZnJvbnRlbmQgYnVzICovCisJdWludDhfdCBnZW5fbW9kZSA9IDA7IC8qIDA9bWFzdGVyIGkyYywgMT1ncGlvIGkyYyAqLworCXVpbnQ4X3QgZW5fc3RhcnQgPSAwOworCXVpbnQ4X3QgZW5fc3RvcCA9IDA7CisJdWludDhfdCBidWZbMjU1XTsgLyogVEJWOiBtYWxsb2MgPyAqLworCWludCByZXN1bHQsIGk7CisKKwkvKiBFbnN1cmUgbm9ib2R5IGVsc2UgaGl0cyB0aGUgaTJjIGJ1cyB3aGlsZSB3ZSdyZSBzZW5kaW5nIG91cgorCSAgIHNlcXVlbmNlIG9mIG1lc3NhZ2VzLCAoc3VjaCBhcyB0aGUgcmVtb3RlIGNvbnRyb2wgdGhyZWFkKSAqLworCWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmQtPmkyY19tdXRleCkgPCAwKQorCQlyZXR1cm4gLUVBR0FJTjsKKworCWZvciAoaSA9IDA7IGkgPCBudW07IGkrKykgeworCQlpZiAoaSA9PSAwKSB7CisJCQkvKiBGaXJzdCBtZXNzYWdlIGluIHRoZSB0cmFuc2FjdGlvbiAqLworCQkJZW5fc3RhcnQgPSAxOworCQl9IGVsc2UgaWYgKCEobXNnW2ldLmZsYWdzICYgSTJDX01fTk9TVEFSVCkpIHsKKwkJCS8qIERldmljZSBzdXBwb3J0cyByZXBlYXRlZC1zdGFydCAqLworCQkJZW5fc3RhcnQgPSAxOworCQl9IGVsc2UgeworCQkJLyogTm90IHRoZSBmaXJzdCBwYWNrZXQgYW5kIGRldmljZSBkb2Vzbid0IHN1cHBvcnQKKwkJCSAgIHJlcGVhdGVkIHN0YXJ0ICovCisJCQllbl9zdGFydCA9IDA7CisJCX0KKwkJaWYgKGkgPT0gKG51bSAtIDEpKSB7CisJCQkvKiBMYXN0IG1lc3NhZ2UgaW4gdGhlIHRyYW5zYWN0aW9uICovCisJCQllbl9zdG9wID0gMTsKKwkJfQorCisJCWlmIChtc2dbaV0uZmxhZ3MgJiBJMkNfTV9SRCkgeworCQkJLyogUmVhZCByZXF1ZXN0ICovCisJCQl1MTYgaW5kZXgsIHZhbHVlOworCQkJdWludDhfdCBpMmNfZGVzdDsKKworCQkJaTJjX2Rlc3QgPSAobXNnW2ldLmFkZHIgPDwgMSk7CisJCQl2YWx1ZSA9ICgoZW5fc3RhcnQgPDwgNykgfCAoZW5fc3RvcCA8PCA2KSB8CisJCQkJIChtc2dbaV0ubGVuICYgMHgzRikpIDw8IDggfCBpMmNfZGVzdDsKKwkJCS8qIEkyQyBjdHJsICsgRkUgYnVzOyAqLworCQkJaW5kZXggPSAoKGdlbl9tb2RlPDw2KSYweEMwKSB8ICgoYnVzX21vZGU8PDQpJjB4MzApOworCisJCQlyZXN1bHQgPSB1c2JfY29udHJvbF9tc2coZC0+dWRldiwKKwkJCQkJCSB1c2JfcmN2Y3RybHBpcGUoZC0+dWRldiwgMCksCisJCQkJCQkgUkVRVUVTVF9ORVdfSTJDX1JFQUQsCisJCQkJCQkgVVNCX1RZUEVfVkVORE9SIHwgVVNCX0RJUl9JTiwKKwkJCQkJCSB2YWx1ZSwgaW5kZXgsIG1zZ1tpXS5idWYsCisJCQkJCQkgbXNnW2ldLmxlbiwKKwkJCQkJCSBVU0JfQ1RSTF9HRVRfVElNRU9VVCk7CisJCQlpZiAocmVzdWx0IDwgMCkgeworCQkJCWVycigiaTJjIHJlYWQgZXJyb3IgKHN0YXR1cyA9ICVkKVxuIiwgcmVzdWx0KTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCS8qIFdyaXRlIHJlcXVlc3QgKi8KKwkJCWJ1ZlswXSA9IFJFUVVFU1RfTkVXX0kyQ19XUklURTsKKwkJCWJ1ZlsxXSA9IChtc2dbaV0uYWRkciA8PCAxKTsKKwkJCWJ1ZlsyXSA9IChlbl9zdGFydCA8PCA3KSB8IChlbl9zdG9wIDw8IDYpIHwKKwkJCQkobXNnW2ldLmxlbiAmIDB4M0YpOworCQkJLyogSTJDIGN0cmwgKyBGRSBidXM7ICovCisJCQlidWZbM10gPSAoKGdlbl9tb2RlPDw2KSYweEMwKSB8ICgoYnVzX21vZGU8PDQpJjB4MzApOworCQkJLyogVGhlIEFjdHVhbCBpMmMgcGF5bG9hZCAqLworCQkJbWVtY3B5KCZidWZbNF0sIG1zZ1tpXS5idWYsIG1zZ1tpXS5sZW4pOworCisJCQlyZXN1bHQgPSB1c2JfY29udHJvbF9tc2coZC0+dWRldiwKKwkJCQkJCSB1c2Jfc25kY3RybHBpcGUoZC0+dWRldiwgMCksCisJCQkJCQkgUkVRVUVTVF9ORVdfSTJDX1dSSVRFLAorCQkJCQkJIFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9ESVJfT1VULAorCQkJCQkJIDAsIDAsIGJ1ZiwgbXNnW2ldLmxlbiArIDQsCisJCQkJCQkgVVNCX0NUUkxfR0VUX1RJTUVPVVQpOworCQkJaWYgKHJlc3VsdCA8IDApIHsKKwkJCQllcnIoImkyYyB3cml0ZSBlcnJvciAoc3RhdHVzID0gJWQpXG4iLCByZXN1bHQpOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJfQorCW11dGV4X3VubG9jaygmZC0+aTJjX211dGV4KTsKKwlyZXR1cm4gaTsKK30KKworLyoKKyAqIEkyQyBtYXN0ZXIgeGZlciBmdW5jdGlvbiAocHJlLTEuMjAgZmlybXdhcmUpCisgKi8KK3N0YXRpYyBpbnQgZGliMDcwMF9pMmNfeGZlcl9sZWdhY3koc3RydWN0IGkyY19hZGFwdGVyICphZGFwLAorCQkJCSAgIHN0cnVjdCBpMmNfbXNnICptc2csIGludCBudW0pCiB7CiAJc3RydWN0IGR2Yl91c2JfZGV2aWNlICpkID0gaTJjX2dldF9hZGFwZGF0YShhZGFwKTsKIAlpbnQgaSxsZW47CkBAIC0xMjQsNiArMjEzLDIxIEBACiAJcmV0dXJuIGk7CiB9CiAKK3N0YXRpYyBpbnQgZGliMDcwMF9pMmNfeGZlcihzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXAsIHN0cnVjdCBpMmNfbXNnICptc2csCisJCQkgICAgaW50IG51bSkKK3sKKwlzdHJ1Y3QgZHZiX3VzYl9kZXZpY2UgKmQgPSBpMmNfZ2V0X2FkYXBkYXRhKGFkYXApOworCXN0cnVjdCBkaWIwNzAwX3N0YXRlICpzdCA9IGQtPnByaXY7CisKKwlpZiAoc3QtPmZ3X3VzZV9uZXdfaTJjX2FwaSA9PSAxKSB7CisJCS8qIFVzZXIgcnVubmluZyBhdCBsZWFzdCBmdyAxLjIwICovCisJCXJldHVybiBkaWIwNzAwX2kyY194ZmVyX25ldyhhZGFwLCBtc2csIG51bSk7CisJfSBlbHNlIHsKKwkJLyogVXNlIGxlZ2FjeSBjYWxscyAqLworCQlyZXR1cm4gZGliMDcwMF9pMmNfeGZlcl9sZWdhY3koYWRhcCwgbXNnLCBudW0pOworCX0KK30KKwogc3RhdGljIHUzMiBkaWIwNzAwX2kyY19mdW5jKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlcikKIHsKIAlyZXR1cm4gSTJDX0ZVTkNfSTJDOwpAQCAtMjQ2LDcgKzM1MCwxMiBAQAogCiAJYlswXSA9IFJFUVVFU1RfRU5BQkxFX1ZJREVPOwogCWJbMV0gPSAob25vZmYgPDwgNCkgfCAweDAwOyAvKiB0aGlzIGJpdCBnaXZlcyBhIGtpbmQgb2YgY29tbWFuZCwgcmF0aGVyIHRoYW4gZW5hYmxpbmcgc29tZXRoaW5nIG9yIG5vdCAqLwotCWJbMl0gPSAoMHgwMSA8PCA0KTsgLyogTWFzdGVyIG1vZGUgKi8KKworCWlmIChzdC0+ZGlzYWJsZV9zdHJlYW1pbmdfbWFzdGVyX21vZGUgPT0gMSkKKwkJYlsyXSA9IDB4MDA7CisJZWxzZQorCQliWzJdID0gKDB4MDEgPDwgNCk7IC8qIE1hc3RlciBtb2RlICovCisKIAliWzNdID0gMHgwMDsKIAogCWRlYl9pbmZvKCJtb2RpZnlpbmcgKCVkKSBzdHJlYW1pbmcgc3RhdGUgZm9yICVkXG4iLCBvbm9mZiwgYWRhcC0+aWQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kaWIwNzAwX2RldmljZXMuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZGliMDcwMF9kZXZpY2VzLmMKaW5kZXggNmMwZTVjNS4uMGNmY2NjMjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZGliMDcwMF9kZXZpY2VzLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kaWIwNzAwX2RldmljZXMuYwpAQCAtMTQsNiArMTQsOCBAQAogI2luY2x1ZGUgIm10MjA2MC5oIgogI2luY2x1ZGUgIm10MjI2Ni5oIgogI2luY2x1ZGUgInR1bmVyLXhjMjAyOC5oIgorI2luY2x1ZGUgInhjNTAwMC5oIgorI2luY2x1ZGUgInM1aDE0MTEuaCIKICNpbmNsdWRlICJkaWIwMDcwLmgiCiAKIHN0YXRpYyBpbnQgZm9yY2VfbG5hX2FjdGl2YXRpb247CkBAIC0zNjYsNyArMzY4LDggQEAKIAkuZ3Bpb19wd21fcG9zID0gRElCNzAwMFBfR1BJT19ERUZBVUxUX1BXTV9QT1MsCiB9OwogCi1zdGF0aWMgaW50IHN0azc3MDBwaF94YzMwMjhfY2FsbGJhY2sodm9pZCAqcHRyLCBpbnQgY29tbWFuZCwgaW50IGFyZykKK3N0YXRpYyBpbnQgc3RrNzcwMHBoX3hjMzAyOF9jYWxsYmFjayh2b2lkICpwdHIsIGludCBjb21wb25lbnQsCisJCQkJICAgICBpbnQgY29tbWFuZCwgaW50IGFyZykKIHsKIAlzdHJ1Y3QgZHZiX3VzYl9hZGFwdGVyICphZGFwID0gcHRyOwogCkBAIC0zOTQsNyArMzk3LDYgQEAKIAogc3RhdGljIHN0cnVjdCB4YzIwMjhfY29uZmlnIHN0azc3MDBwaF94YzMwMjhfY29uZmlnID0gewogCS5pMmNfYWRkciA9IDB4NjEsCi0JLmNhbGxiYWNrID0gc3RrNzcwMHBoX3hjMzAyOF9jYWxsYmFjaywKIAkuY3RybCA9ICZzdGs3NzAwcGhfeGMzMDI4X2N0cmwsCiB9OwogCkBAIC00MzUsNyArNDM3LDkgQEAKIAkJRElCWDAwMF9JMkNfSU5URVJGQUNFX1RVTkVSLCAxKTsKIAogCXN0azc3MDBwaF94YzMwMjhfY29uZmlnLmkyY19hZGFwID0gdHVuX2kyYzsKLQlzdGs3NzAwcGhfeGMzMDI4X2NvbmZpZy52aWRlb19kZXYgPSBhZGFwOworCisJLyogRklYTUU6IGdlbmVyYWxpemUgJiBtb3ZlIHRvIGNvbW1vbiBhcmVhICovCisJYWRhcC0+ZmUtPmNhbGxiYWNrID0gc3RrNzcwMHBoX3hjMzAyOF9jYWxsYmFjazsKIAogCXJldHVybiBkdmJfYXR0YWNoKHhjMjAyOF9hdHRhY2gsIGFkYXAtPmZlLCAmc3RrNzcwMHBoX3hjMzAyOF9jb25maWcpCiAJCT09IE5VTEwgPyAtRU5PREVWIDogMDsKQEAgLTY3Nyw2ICs2ODEsNDMgQEAKIAl7IDB4MDEsIDB4N2QsIEtFWV9WT0xVTUVET1dOIH0sCiAJeyAweDAyLCAweDQyLCBLRVlfQ0hBTk5FTFVQIH0sCiAJeyAweDAwLCAweDdkLCBLRVlfQ0hBTk5FTERPV04gfSwKKworCS8qIEtleSBjb2RlcyBmb3IgTm92YS1URCAiY3JlZGl0IGNhcmQiIHJlbW90ZSBjb250cm9sLiAqLworCXsgMHgxZCwgMHgwMCwgS0VZXzAgfSwKKwl7IDB4MWQsIDB4MDEsIEtFWV8xIH0sCisJeyAweDFkLCAweDAyLCBLRVlfMiB9LAorCXsgMHgxZCwgMHgwMywgS0VZXzMgfSwKKwl7IDB4MWQsIDB4MDQsIEtFWV80IH0sCisJeyAweDFkLCAweDA1LCBLRVlfNSB9LAorCXsgMHgxZCwgMHgwNiwgS0VZXzYgfSwKKwl7IDB4MWQsIDB4MDcsIEtFWV83IH0sCisJeyAweDFkLCAweDA4LCBLRVlfOCB9LAorCXsgMHgxZCwgMHgwOSwgS0VZXzkgfSwKKwl7IDB4MWQsIDB4MGEsIEtFWV9URVhUIH0sCisJeyAweDFkLCAweDBkLCBLRVlfTUVOVSB9LAorCXsgMHgxZCwgMHgwZiwgS0VZX01VVEUgfSwKKwl7IDB4MWQsIDB4MTAsIEtFWV9WT0xVTUVVUCB9LAorCXsgMHgxZCwgMHgxMSwgS0VZX1ZPTFVNRURPV04gfSwKKwl7IDB4MWQsIDB4MTIsIEtFWV9DSEFOTkVMIH0sCisJeyAweDFkLCAweDE0LCBLRVlfVVAgfSwKKwl7IDB4MWQsIDB4MTUsIEtFWV9ET1dOIH0sCisJeyAweDFkLCAweDE2LCBLRVlfTEVGVCB9LAorCXsgMHgxZCwgMHgxNywgS0VZX1JJR0hUIH0sCisJeyAweDFkLCAweDFjLCBLRVlfVFYgfSwKKwl7IDB4MWQsIDB4MWUsIEtFWV9ORVhUIH0sCisJeyAweDFkLCAweDFmLCBLRVlfQkFDSyB9LAorCXsgMHgxZCwgMHgyMCwgS0VZX0NIQU5ORUxVUCB9LAorCXsgMHgxZCwgMHgyMSwgS0VZX0NIQU5ORUxET1dOIH0sCisJeyAweDFkLCAweDI0LCBLRVlfTEFTVCB9LAorCXsgMHgxZCwgMHgyNSwgS0VZX09LIH0sCisJeyAweDFkLCAweDMwLCBLRVlfUEFVU0UgfSwKKwl7IDB4MWQsIDB4MzIsIEtFWV9SRVdJTkQgfSwKKwl7IDB4MWQsIDB4MzQsIEtFWV9GQVNURk9SV0FSRCB9LAorCXsgMHgxZCwgMHgzNSwgS0VZX1BMQVkgfSwKKwl7IDB4MWQsIDB4MzYsIEtFWV9TVE9QIH0sCisJeyAweDFkLCAweDM3LCBLRVlfUkVDT1JEIH0sCisJeyAweDFkLCAweDNiLCBLRVlfR09UTyB9LAorCXsgMHgxZCwgMHgzZCwgS0VZX1BPV0VSIH0sCiB9OwogCiAvKiBTVEs3NzAwUDogSGF1cHBhdWdlIE5vdmEtVCBTdGljaywgQVZlck1lZGlhIFZvbGFyICovCkBAIC0xMDc4LDYgKzExMTksOTcgQEAKIAlyZXR1cm4gYWRhcC0+ZmUgPT0gTlVMTCA/IC1FTk9ERVYgOiAwOwogfQogCisvKiBTNUgxNDExICovCitzdGF0aWMgc3RydWN0IHM1aDE0MTFfY29uZmlnIHBpbm5hY2xlXzgwMWVfY29uZmlnID0geworCS5vdXRwdXRfbW9kZSAgID0gUzVIMTQxMV9QQVJBTExFTF9PVVRQVVQsCisJLmdwaW8gICAgICAgICAgPSBTNUgxNDExX0dQSU9fT0ZGLAorCS5tcGVnX3RpbWluZyAgID0gUzVIMTQxMV9NUEVHVElNSU5HX05PTkNPTlRJTk9VU19OT05JTlZFUlRJTkdfQ0xPQ0ssCisJLnFhbV9pZiAgICAgICAgPSBTNUgxNDExX0lGXzQ0MDAwLAorCS52c2JfaWYgICAgICAgID0gUzVIMTQxMV9JRl80NDAwMCwKKwkuaW52ZXJzaW9uICAgICA9IFM1SDE0MTFfSU5WRVJTSU9OX09GRiwKKwkuc3RhdHVzX21vZGUgICA9IFM1SDE0MTFfREVNT0RMT0NLSU5HCit9OworCisvKiBQaW5uYWNsZSBQQ1RWIEhEIFBybyA4MDFlIEdQSU9zIG1hcDoKKyAgIEdQSU8wICAtIGN1cnJlbnRseSB1bmtub3duCisgICBHUElPMSAgLSB4YzUwMDAgdHVuZXIgcmVzZXQKKyAgIEdQSU8yICAtIENYMjU4NDMgc2xlZXAKKyAgIEdQSU8zICAtIGN1cnJlbnRseSB1bmtub3duCisgICBHUElPNCAgLSBjdXJyZW50bHkgdW5rbm93bgorICAgR1BJTzYgIC0gY3VycmVudGx5IHVua25vd24KKyAgIEdQSU83ICAtIGN1cnJlbnRseSB1bmtub3duCisgICBHUElPOSAgLSBjdXJyZW50bHkgdW5rbm93bgorICAgR1BJTzEwIC0gQ1gyNTg0MyByZXNldAorICovCitzdGF0aWMgaW50IHM1aDE0MTFfZnJvbnRlbmRfYXR0YWNoKHN0cnVjdCBkdmJfdXNiX2FkYXB0ZXIgKmFkYXApCit7CisJc3RydWN0IGRpYjA3MDBfc3RhdGUgKnN0ID0gYWRhcC0+ZGV2LT5wcml2OworCisJLyogTWFrZSB1c2Ugb2YgdGhlIG5ldyBpMmMgZnVuY3Rpb25zIGZyb20gRlcgMS4yMCAqLworCXN0LT5md191c2VfbmV3X2kyY19hcGkgPSAxOworCisJLyogVGhlIHM1aDE0MTEgcmVxdWlyZXMgdGhlIGRpYjA3MDAgdG8gbm90IGJlIGluIG1hc3RlciBtb2RlICovCisJc3QtPmRpc2FibGVfc3RyZWFtaW5nX21hc3Rlcl9tb2RlID0gMTsKKworCS8qIEFsbCBtc2xlZXAgdmFsdWVzIHRha2VuIGZyb20gV2luZG93cyBVU0IgdHJhY2UgKi8KKwlkaWIwNzAwX3NldF9ncGlvKGFkYXAtPmRldiwgR1BJTzAsIEdQSU9fT1VULCAwKTsKKwlkaWIwNzAwX3NldF9ncGlvKGFkYXAtPmRldiwgR1BJTzMsIEdQSU9fT1VULCAwKTsKKwlkaWIwNzAwX3NldF9ncGlvKGFkYXAtPmRldiwgR1BJTzYsIEdQSU9fT1VULCAxKTsKKwltc2xlZXAoNDAwKTsKKwlkaWIwNzAwX3NldF9ncGlvKGFkYXAtPmRldiwgR1BJTzEwLCBHUElPX09VVCwgMCk7CisJbXNsZWVwKDYwKTsKKwlkaWIwNzAwX3NldF9ncGlvKGFkYXAtPmRldiwgR1BJTzEwLCBHUElPX09VVCwgMSk7CisJbXNsZWVwKDMwKTsKKwlkaWIwNzAwX3NldF9ncGlvKGFkYXAtPmRldiwgR1BJTzAsIEdQSU9fT1VULCAxKTsKKwlkaWIwNzAwX3NldF9ncGlvKGFkYXAtPmRldiwgR1BJTzksIEdQSU9fT1VULCAxKTsKKwlkaWIwNzAwX3NldF9ncGlvKGFkYXAtPmRldiwgR1BJTzQsIEdQSU9fT1VULCAxKTsKKwlkaWIwNzAwX3NldF9ncGlvKGFkYXAtPmRldiwgR1BJTzcsIEdQSU9fT1VULCAxKTsKKwlkaWIwNzAwX3NldF9ncGlvKGFkYXAtPmRldiwgR1BJTzIsIEdQSU9fT1VULCAwKTsKKwltc2xlZXAoMzApOworCisJLyogUHV0IHRoZSBDWDI1ODQzIHRvIHNsZWVwIGZvciBub3cgc2luY2Ugd2UncmUgaW4gZGlnaXRhbCBtb2RlICovCisJZGliMDcwMF9zZXRfZ3BpbyhhZGFwLT5kZXYsIEdQSU8yLCBHUElPX09VVCwgMSk7CisKKwkvKiBHUElPcyBhcmUgaW5pdGlhbGl6ZWQsIGRvIHRoZSBhdHRhY2ggKi8KKwlhZGFwLT5mZSA9IGR2Yl9hdHRhY2goczVoMTQxMV9hdHRhY2gsICZwaW5uYWNsZV84MDFlX2NvbmZpZywKKwkJCSAgICAgICZhZGFwLT5kZXYtPmkyY19hZGFwKTsKKwlyZXR1cm4gYWRhcC0+ZmUgPT0gTlVMTCA/IC1FTk9ERVYgOiAwOworfQorCitzdGF0aWMgaW50IGRpYjA3MDBfeGM1MDAwX3R1bmVyX2NhbGxiYWNrKHZvaWQgKnByaXYsIGludCBjb21wb25lbnQsCisJCQkJCSBpbnQgY29tbWFuZCwgaW50IGFyZykKK3sKKwlzdHJ1Y3QgZHZiX3VzYl9hZGFwdGVyICphZGFwID0gcHJpdjsKKworCWlmIChjb21tYW5kID09IFhDNTAwMF9UVU5FUl9SRVNFVCkgeworCQkvKiBSZXNldCB0aGUgdHVuZXIgKi8KKwkJZGliMDcwMF9zZXRfZ3BpbyhhZGFwLT5kZXYsIEdQSU8xLCBHUElPX09VVCwgMCk7CisJCW1zbGVlcCgzMzApOyAvKiBmcm9tIFdpbmRvd3MgVVNCIHRyYWNlICovCisJCWRpYjA3MDBfc2V0X2dwaW8oYWRhcC0+ZGV2LCBHUElPMSwgR1BJT19PVVQsIDEpOworCQltc2xlZXAoMzMwKTsgLyogZnJvbSBXaW5kb3dzIFVTQiB0cmFjZSAqLworCX0gZWxzZSB7CisJCWVycigieGM1MDAwOiB1bmtub3duIHR1bmVyIGNhbGxiYWNrIGNvbW1hbmQ6ICVkXG4iLCBjb21tYW5kKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgeGM1MDAwX2NvbmZpZyBzNWgxNDExX3hjNTAwMF90dW5lcmNvbmZpZyA9IHsKKwkuaTJjX2FkZHJlc3MgICAgICA9IDB4NjQsCisJLmlmX2toeiAgICAgICAgICAgPSA1MzgwLAorfTsKKworc3RhdGljIGludCB4YzUwMDBfdHVuZXJfYXR0YWNoKHN0cnVjdCBkdmJfdXNiX2FkYXB0ZXIgKmFkYXApCit7CisJLyogRklYTUU6IGdlbmVyYWxpemUgJiBtb3ZlIHRvIGNvbW1vbiBhcmVhICovCisJYWRhcC0+ZmUtPmNhbGxiYWNrID0gZGliMDcwMF94YzUwMDBfdHVuZXJfY2FsbGJhY2s7CisKKwlyZXR1cm4gZHZiX2F0dGFjaCh4YzUwMDBfYXR0YWNoLCBhZGFwLT5mZSwgJmFkYXAtPmRldi0+aTJjX2FkYXAsCisJCQkgICZzNWgxNDExX3hjNTAwMF90dW5lcmNvbmZpZykKKwkJPT0gTlVMTCA/IC1FTk9ERVYgOiAwOworfQorCiAvKiBEVkItVVNCIGFuZCBVU0Igc3R1ZmYgZm9sbG93cyAqLwogc3RydWN0IHVzYl9kZXZpY2VfaWQgZGliMDcwMF91c2JfaWRfdGFibGVbXSA9IHsKIC8qIDAgKi8JeyBVU0JfREVWSUNFKFVTQl9WSURfRElCQ09NLCAgICBVU0JfUElEX0RJQkNPTV9TVEs3NzAwUCkgfSwKQEAgLTExMTksNiArMTI1MSwxMSBAQAogCXsgVVNCX0RFVklDRShVU0JfVklEX0xFQURURUssICAgVVNCX1BJRF9XSU5GQVNUX0RUVl9ET05HTEVfU1RLNzcwMFBfMikgfSwKIC8qIDM1ICoveyBVU0JfREVWSUNFKFVTQl9WSURfSEFVUFBBVUdFLCBVU0JfUElEX0hBVVBQQVVHRV9OT1ZBX1REX1NUSUNLXzUyMDA5KSB9LAogCXsgVVNCX0RFVklDRShVU0JfVklEX0hBVVBQQVVHRSwgVVNCX1BJRF9IQVVQUEFVR0VfTk9WQV9UXzUwMF8zKSB9LAorCXsgVVNCX0RFVklDRShVU0JfVklEX0dJR0FCWVRFLCAgVVNCX1BJRF9HSUdBQllURV9VODAwMCkgfSwKKwl7IFVTQl9ERVZJQ0UoVVNCX1ZJRF9ZVUFOLCAgICAgIFVTQl9QSURfWVVBTl9TVEs3NzAwUEgpIH0sCisJeyBVU0JfREVWSUNFKFVTQl9WSURfQVNVUywJVVNCX1BJRF9BU1VTX1UzMDAwSCkgfSwKKy8qIDQwICoveyBVU0JfREVWSUNFKFVTQl9WSURfUElOTkFDTEUsICBVU0JfUElEX1BJTk5BQ0xFX1BDVFY4MDFFKSB9LAorCXsgVVNCX0RFVklDRShVU0JfVklEX1BJTk5BQ0xFLCAgVVNCX1BJRF9QSU5OQUNMRV9QQ1RWODAxRV9TRSkgfSwKIAl7IDAgfQkJLyogVGVybWluYXRpbmcgZW50cnkgKi8KIH07CiBNT0RVTEVfREVWSUNFX1RBQkxFKHVzYiwgZGliMDcwMF91c2JfaWRfdGFibGUpOwpAQCAtMTEyNiw3ICsxMjYzLDcgQEAKICNkZWZpbmUgRElCMDcwMF9ERUZBVUxUX0RFVklDRV9QUk9QRVJUSUVTIFwKIAkuY2FwcyAgICAgICAgICAgICAgPSBEVkJfVVNCX0lTX0FOX0kyQ19BREFQVEVSLCBcCiAJLnVzYl9jdHJsICAgICAgICAgID0gREVWSUNFX1NQRUNJRklDLCBcCi0JLmZpcm13YXJlICAgICAgICAgID0gImR2Yi11c2ItZGliMDcwMC0xLjEwLmZ3IiwgXAorCS5maXJtd2FyZSAgICAgICAgICA9ICJkdmItdXNiLWRpYjA3MDAtMS4yMC5mdyIsIFwKIAkuZG93bmxvYWRfZmlybXdhcmUgPSBkaWIwNzAwX2Rvd25sb2FkX2Zpcm13YXJlLCBcCiAJLm5vX3JlY29ubmVjdCAgICAgID0gMSwgXAogCS5zaXplX29mX3ByaXYgICAgICA9IHNpemVvZihzdHJ1Y3QgZGliMDcwMF9zdGF0ZSksIFwKQEAgLTEyOTMsNyArMTQzMCwxMiBAQAogCQkJCXsgJmRpYjA3MDBfdXNiX2lkX3RhYmxlWzMxXSwgTlVMTCB9LAogCQkJCXsgTlVMTCB9LAogCQkJfQotCQl9CisJCX0sCisKKwkJLnJjX2ludGVydmFsICAgICAgPSBERUZBVUxUX1JDX0lOVEVSVkFMLAorCQkucmNfa2V5X21hcCAgICAgICA9IGRpYjA3MDBfcmNfa2V5cywKKwkJLnJjX2tleV9tYXBfc2l6ZSAgPSBBUlJBWV9TSVpFKGRpYjA3MDBfcmNfa2V5cyksCisJCS5yY19xdWVyeSAgICAgICAgID0gZGliMDcwMF9yY19xdWVyeQogCX0sIHsgRElCMDcwMF9ERUZBVUxUX0RFVklDRV9QUk9QRVJUSUVTLAogCiAJCS5udW1fYWRhcHRlcnMgPSAxLApAQCAtMTQwOCw3ICsxNTUwLDcgQEAKIAkJCX0sCiAJCX0sCiAKLQkJLm51bV9kZXZpY2VfZGVzY3MgPSAzLAorCQkubnVtX2RldmljZV9kZXNjcyA9IDUsCiAJCS5kZXZpY2VzID0gewogCQkJeyAgICJUZXJyYXRlYyBDaW5lcmd5IEhUIFVTQiBYRSIsCiAJCQkJeyAmZGliMDcwMF91c2JfaWRfdGFibGVbMjddLCBOVUxMIH0sCkBAIC0xNDIyLDYgKzE1NjQsNDcgQEAKIAkJCQl7ICZkaWIwNzAwX3VzYl9pZF90YWJsZVszMl0sIE5VTEwgfSwKIAkJCQl7IE5VTEwgfSwKIAkJCX0sCisJCQl7ICAgIkdpZ2FieXRlIFU4MDAwLVJIIiwKKwkJCQl7ICZkaWIwNzAwX3VzYl9pZF90YWJsZVszN10sIE5VTEwgfSwKKwkJCQl7IE5VTEwgfSwKKwkJCX0sCisJCQl7ICAgIllVQU4gSGlnaC1UZWNoIFNUSzc3MDBQSCIsCisJCQkJeyAmZGliMDcwMF91c2JfaWRfdGFibGVbMzhdLCBOVUxMIH0sCisJCQkJeyBOVUxMIH0sCisJCQl9LAorCQkJeyAgICJBc3VzIE15IENpbmVtYS1VMzAwMEh5YnJpZCIsCisJCQkJeyAmZGliMDcwMF91c2JfaWRfdGFibGVbMzldLCBOVUxMIH0sCisJCQkJeyBOVUxMIH0sCisJCQl9LAorCQl9LAorCQkucmNfaW50ZXJ2YWwgICAgICA9IERFRkFVTFRfUkNfSU5URVJWQUwsCisJCS5yY19rZXlfbWFwICAgICAgID0gZGliMDcwMF9yY19rZXlzLAorCQkucmNfa2V5X21hcF9zaXplICA9IEFSUkFZX1NJWkUoZGliMDcwMF9yY19rZXlzKSwKKwkJLnJjX3F1ZXJ5ICAgICAgICAgPSBkaWIwNzAwX3JjX3F1ZXJ5CisJfSwgeyBESUIwNzAwX0RFRkFVTFRfREVWSUNFX1BST1BFUlRJRVMsCisJCS5udW1fYWRhcHRlcnMgPSAxLAorCQkuYWRhcHRlciA9IHsKKwkJCXsKKwkJCQkuZnJvbnRlbmRfYXR0YWNoICA9IHM1aDE0MTFfZnJvbnRlbmRfYXR0YWNoLAorCQkJCS50dW5lcl9hdHRhY2ggICAgID0geGM1MDAwX3R1bmVyX2F0dGFjaCwKKworCQkJCURJQjA3MDBfREVGQVVMVF9TVFJFQU1JTkdfQ09ORklHKDB4MDIpLAorCisJCQkJLnNpemVfb2ZfcHJpdiA9IHNpemVvZihzdHJ1Y3QKKwkJCQkJCWRpYjA3MDBfYWRhcHRlcl9zdGF0ZSksCisJCQl9LAorCQl9LAorCisJCS5udW1fZGV2aWNlX2Rlc2NzID0gMiwKKwkJLmRldmljZXMgPSB7CisJCQl7ICAgIlBpbm5hY2xlIFBDVFYgSEQgUHJvIFVTQiBTdGljayIsCisJCQkJeyAmZGliMDcwMF91c2JfaWRfdGFibGVbNDBdLCBOVUxMIH0sCisJCQkJeyBOVUxMIH0sCisJCQl9LAorCQkJeyAgICJQaW5uYWNsZSBQQ1RWIEhEIFVTQiBTdGljayIsCisJCQkJeyAmZGliMDcwMF91c2JfaWRfdGFibGVbNDFdLCBOVUxMIH0sCisJCQkJeyBOVUxMIH0sCisJCQl9LAogCQl9LAogCQkucmNfaW50ZXJ2YWwgICAgICA9IERFRkFVTFRfUkNfSU5URVJWQUwsCiAJCS5yY19rZXlfbWFwICAgICAgID0gZGliMDcwMF9yY19rZXlzLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kdHY1MTAwLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2R0djUxMDAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNzhjZTkyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kdHY1MTAwLmMKQEAgLTAsMCArMSwyNDAgQEAKKy8qCisgKiBEVkIgVVNCIExpbnV4IGRyaXZlciBmb3IgQU1FIERUVi01MTAwIFVTQjIuMCBEVkItVAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOCAgQW50b2luZSBKYWNxdWV0IDxyb3lhbGVAemVyZXpvLmNvbT4KKyAqIGh0dHA6Ly9yb3lhbGUuemVyZXpvLmNvbS9kdHY1MTAwLworICoKKyAqIEluc3BpcmVkIGJ5IGdsODYxLmMgYW5kIGF1NjYxMC5jIGRyaXZlcnMKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKi8KKworI2luY2x1ZGUgImR0djUxMDAuaCIKKyNpbmNsdWRlICJ6bDEwMzUzLmgiCisjaW5jbHVkZSAicXQxMDEwLmgiCisKKy8qIGRlYnVnICovCitzdGF0aWMgaW50IGR2Yl91c2JfZHR2NTEwMF9kZWJ1ZzsKK21vZHVsZV9wYXJhbV9uYW1lZChkZWJ1ZywgZHZiX3VzYl9kdHY1MTAwX2RlYnVnLCBpbnQsIDA2NDQpOworTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgInNldCBkZWJ1Z2dpbmcgbGV2ZWwiIERWQl9VU0JfREVCVUdfU1RBVFVTKTsKK0RWQl9ERUZJTkVfTU9EX09QVF9BREFQVEVSX05SKGFkYXB0ZXJfbnIpOworCitzdGF0aWMgaW50IGR0djUxMDBfaTJjX21zZyhzdHJ1Y3QgZHZiX3VzYl9kZXZpY2UgKmQsIHU4IGFkZHIsCisJCQkgICB1OCAqd2J1ZiwgdTE2IHdsZW4sIHU4ICpyYnVmLCB1MTYgcmxlbikKK3sKKwl1OCByZXF1ZXN0OworCXU4IHR5cGU7CisJdTE2IHZhbHVlOworCXUxNiBpbmRleDsKKworCXN3aXRjaCAod2xlbikgeworCWNhc2UgMToKKwkJLyogd3JpdGUgeyByZWcgfSwgcmVhZCB7IHZhbHVlIH0gKi8KKwkJcmVxdWVzdCA9IChhZGRyID09IERUVjUxMDBfREVNT0RfQUREUiA/IERUVjUxMDBfREVNT0RfUkVBRCA6CisJCQkJCQkJRFRWNTEwMF9UVU5FUl9SRUFEKTsKKwkJdHlwZSA9IFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9ESVJfSU47CisJCXZhbHVlID0gMDsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQkvKiB3cml0ZSB7IHJlZywgdmFsdWUgfSAqLworCQlyZXF1ZXN0ID0gKGFkZHIgPT0gRFRWNTEwMF9ERU1PRF9BRERSID8gRFRWNTEwMF9ERU1PRF9XUklURSA6CisJCQkJCQkJRFRWNTEwMF9UVU5FUl9XUklURSk7CisJCXR5cGUgPSBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfRElSX09VVDsKKwkJdmFsdWUgPSB3YnVmWzFdOworCQlicmVhazsKKwlkZWZhdWx0OgorCQl3YXJuKCJ3bGVuID0gJXgsIGFib3J0aW5nLiIsIHdsZW4pOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJaW5kZXggPSAoYWRkciA8PCA4KSArIHdidWZbMF07CisKKwltc2xlZXAoMSk7IC8qIGF2b2lkIEkyQyBlcnJvcnMgKi8KKwlyZXR1cm4gdXNiX2NvbnRyb2xfbXNnKGQtPnVkZXYsIHVzYl9yY3ZjdHJscGlwZShkLT51ZGV2LCAwKSwgcmVxdWVzdCwKKwkJCSAgICAgICB0eXBlLCB2YWx1ZSwgaW5kZXgsIHJidWYsIHJsZW4sCisJCQkgICAgICAgRFRWNTEwMF9VU0JfVElNRU9VVCk7Cit9CisKKy8qIEkyQyAqLworc3RhdGljIGludCBkdHY1MTAwX2kyY194ZmVyKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcCwgc3RydWN0IGkyY19tc2cgbXNnW10sCisJCQkgICAgaW50IG51bSkKK3sKKwlzdHJ1Y3QgZHZiX3VzYl9kZXZpY2UgKmQgPSBpMmNfZ2V0X2FkYXBkYXRhKGFkYXApOworCWludCBpOworCisJaWYgKG51bSA+IDIpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmZC0+aTJjX211dGV4KSA8IDApCisJCXJldHVybiAtRUFHQUlOOworCisJZm9yIChpID0gMDsgaSA8IG51bTsgaSsrKSB7CisJCS8qIHdyaXRlL3JlYWQgcmVxdWVzdCAqLworCQlpZiAoaSsxIDwgbnVtICYmIChtc2dbaSsxXS5mbGFncyAmIEkyQ19NX1JEKSkgeworCQkJaWYgKGR0djUxMDBfaTJjX21zZyhkLCBtc2dbaV0uYWRkciwgbXNnW2ldLmJ1ZiwKKwkJCQkJICAgIG1zZ1tpXS5sZW4sIG1zZ1tpKzFdLmJ1ZiwKKwkJCQkJICAgIG1zZ1tpKzFdLmxlbikgPCAwKQorCQkJCWJyZWFrOworCQkJaSsrOworCQl9IGVsc2UgaWYgKGR0djUxMDBfaTJjX21zZyhkLCBtc2dbaV0uYWRkciwgbXNnW2ldLmJ1ZiwKKwkJCQkJICAgbXNnW2ldLmxlbiwgTlVMTCwgMCkgPCAwKQorCQkJCWJyZWFrOworCX0KKworCW11dGV4X3VubG9jaygmZC0+aTJjX211dGV4KTsKKwlyZXR1cm4gaTsKK30KKworc3RhdGljIHUzMiBkdHY1MTAwX2kyY19mdW5jKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlyZXR1cm4gSTJDX0ZVTkNfSTJDOworfQorCitzdGF0aWMgc3RydWN0IGkyY19hbGdvcml0aG0gZHR2NTEwMF9pMmNfYWxnbyA9IHsKKwkubWFzdGVyX3hmZXIgICA9IGR0djUxMDBfaTJjX3hmZXIsCisJLmZ1bmN0aW9uYWxpdHkgPSBkdHY1MTAwX2kyY19mdW5jLAorfTsKKworLyogQ2FsbGJhY2tzIGZvciBEVkIgVVNCICovCitzdGF0aWMgc3RydWN0IHpsMTAzNTNfY29uZmlnIGR0djUxMDBfemwxMDM1M19jb25maWcgPSB7CisJLmRlbW9kX2FkZHJlc3MgPSBEVFY1MTAwX0RFTU9EX0FERFIsCisJLm5vX3R1bmVyID0gMSwKKwkucGFyYWxsZWxfdHMgPSAxLAorfTsKKworc3RhdGljIGludCBkdHY1MTAwX2Zyb250ZW5kX2F0dGFjaChzdHJ1Y3QgZHZiX3VzYl9hZGFwdGVyICphZGFwKQoreworCWFkYXAtPmZlID0gZHZiX2F0dGFjaCh6bDEwMzUzX2F0dGFjaCwgJmR0djUxMDBfemwxMDM1M19jb25maWcsCisJCQkgICAgICAmYWRhcC0+ZGV2LT5pMmNfYWRhcCk7CisJaWYgKGFkYXAtPmZlID09IE5VTEwpCisJCXJldHVybiAtRUlPOworCisJLyogZGlzYWJsZSBpMmMgZ2F0ZSwgb3IgaXQgd29uJ3Qgd29yay4uLiBpcyB0aGlzIHNhZmU/ICovCisJYWRhcC0+ZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsID0gTlVMTDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHF0MTAxMF9jb25maWcgZHR2NTEwMF9xdDEwMTBfY29uZmlnID0geworCS5pMmNfYWRkcmVzcyA9IERUVjUxMDBfVFVORVJfQUREUgorfTsKKworc3RhdGljIGludCBkdHY1MTAwX3R1bmVyX2F0dGFjaChzdHJ1Y3QgZHZiX3VzYl9hZGFwdGVyICphZGFwKQoreworCXJldHVybiBkdmJfYXR0YWNoKHF0MTAxMF9hdHRhY2gsCisJCQkgIGFkYXAtPmZlLCAmYWRhcC0+ZGV2LT5pMmNfYWRhcCwKKwkJCSAgJmR0djUxMDBfcXQxMDEwX2NvbmZpZykgPT0gTlVMTCA/IC1FTk9ERVYgOiAwOworfQorCisvKiBEVkIgVVNCIERyaXZlciBzdHVmZiAqLworc3RhdGljIHN0cnVjdCBkdmJfdXNiX2RldmljZV9wcm9wZXJ0aWVzIGR0djUxMDBfcHJvcGVydGllczsKKworc3RhdGljIGludCBkdHY1MTAwX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLAorCQkJIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKK3sKKwlpbnQgaSwgcmV0OworCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldihpbnRmKTsKKworCS8qIGluaXRpYWxpemUgbm9uIHF0MTAxMC96bDEwMzUzIHBhcnQ/ICovCisJZm9yIChpID0gMDsgZHR2NTEwMF9pbml0W2ldLnJlcXVlc3Q7IGkrKykgeworCQlyZXQgPSB1c2JfY29udHJvbF9tc2codWRldiwgdXNiX3JjdmN0cmxwaXBlKHVkZXYsIDApLAorCQkJCSAgICAgIGR0djUxMDBfaW5pdFtpXS5yZXF1ZXN0LAorCQkJCSAgICAgIFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9ESVJfT1VULAorCQkJCSAgICAgIGR0djUxMDBfaW5pdFtpXS52YWx1ZSwKKwkJCQkgICAgICBkdHY1MTAwX2luaXRbaV0uaW5kZXgsIE5VTEwsIDAsCisJCQkJICAgICAgRFRWNTEwMF9VU0JfVElNRU9VVCk7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCX0KKworCXJldCA9IGR2Yl91c2JfZGV2aWNlX2luaXQoaW50ZiwgJmR0djUxMDBfcHJvcGVydGllcywKKwkJCQkgIFRISVNfTU9EVUxFLCBOVUxMLCBhZGFwdGVyX25yKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBkdHY1MTAwX3RhYmxlW10gPSB7CisJeyBVU0JfREVWSUNFKDB4MDZiZSwgMHhhMjMyKSB9LAorCXsgfQkJLyogVGVybWluYXRpbmcgZW50cnkgKi8KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKHVzYiwgZHR2NTEwMF90YWJsZSk7CisKK3N0YXRpYyBzdHJ1Y3QgZHZiX3VzYl9kZXZpY2VfcHJvcGVydGllcyBkdHY1MTAwX3Byb3BlcnRpZXMgPSB7CisJLmNhcHMgPSBEVkJfVVNCX0lTX0FOX0kyQ19BREFQVEVSLAorCS51c2JfY3RybCA9IERFVklDRV9TUEVDSUZJQywKKworCS5zaXplX29mX3ByaXYgPSAwLAorCisJLm51bV9hZGFwdGVycyA9IDEsCisJLmFkYXB0ZXIgPSB7eworCQkuZnJvbnRlbmRfYXR0YWNoID0gZHR2NTEwMF9mcm9udGVuZF9hdHRhY2gsCisJCS50dW5lcl9hdHRhY2ggICAgPSBkdHY1MTAwX3R1bmVyX2F0dGFjaCwKKworCQkuc3RyZWFtID0geworCQkJLnR5cGUgPSBVU0JfQlVMSywKKwkJCS5jb3VudCA9IDgsCisJCQkuZW5kcG9pbnQgPSAweDgyLAorCQkJLnUgPSB7CisJCQkJLmJ1bGsgPSB7CisJCQkJCS5idWZmZXJzaXplID0gNDA5NiwKKwkJCQl9CisJCQl9CisJCX0sCisJfSB9LAorCisJLmkyY19hbGdvID0gJmR0djUxMDBfaTJjX2FsZ28sCisKKwkubnVtX2RldmljZV9kZXNjcyA9IDEsCisJLmRldmljZXMgPSB7CisJCXsKKwkJCS5uYW1lID0gIkFNRSBEVFYtNTEwMCBVU0IyLjAgRFZCLVQiLAorCQkJLmNvbGRfaWRzID0geyBOVUxMIH0sCisJCQkud2FybV9pZHMgPSB7ICZkdHY1MTAwX3RhYmxlWzBdLCBOVUxMIH0sCisJCX0sCisJfQorfTsKKworc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIGR0djUxMDBfZHJpdmVyID0geworCS5uYW1lCQk9ICJkdmJfdXNiX2R0djUxMDAiLAorCS5wcm9iZQkJPSBkdHY1MTAwX3Byb2JlLAorCS5kaXNjb25uZWN0CT0gZHZiX3VzYl9kZXZpY2VfZXhpdCwKKwkuaWRfdGFibGUJPSBkdHY1MTAwX3RhYmxlLAorfTsKKworLyogbW9kdWxlIHN0dWZmICovCitzdGF0aWMgaW50IF9faW5pdCBkdHY1MTAwX21vZHVsZV9pbml0KHZvaWQpCit7CisJaW50IHJldDsKKworCXJldCA9IHVzYl9yZWdpc3RlcigmZHR2NTEwMF9kcml2ZXIpOworCWlmIChyZXQpCisJCWVycigidXNiX3JlZ2lzdGVyIGZhaWxlZC4gRXJyb3IgbnVtYmVyICVkIiwgcmV0KTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBkdHY1MTAwX21vZHVsZV9leGl0KHZvaWQpCit7CisJLyogZGVyZWdpc3RlciB0aGlzIGRyaXZlciBmcm9tIHRoZSBVU0Igc3Vic3lzdGVtICovCisJdXNiX2RlcmVnaXN0ZXIoJmR0djUxMDBfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQoZHR2NTEwMF9tb2R1bGVfaW5pdCk7Cittb2R1bGVfZXhpdChkdHY1MTAwX21vZHVsZV9leGl0KTsKKworTU9EVUxFX0FVVEhPUihEUklWRVJfQVVUSE9SKTsKK01PRFVMRV9ERVNDUklQVElPTihEUklWRVJfREVTQyk7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2R0djUxMDAuaCBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZHR2NTEwMC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkzZTk2ZTAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2R0djUxMDAuaApAQCAtMCwwICsxLDUxIEBACisvKgorICogRFZCIFVTQiBMaW51eCBkcml2ZXIgZm9yIEFNRSBEVFYtNTEwMCBVU0IyLjAgRFZCLVQKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggIEFudG9pbmUgSmFjcXVldCA8cm95YWxlQHplcmV6by5jb20+CisgKiBodHRwOi8vcm95YWxlLnplcmV6by5jb20vZHR2NTEwMC8KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKi8KKworI2lmbmRlZiBfRFZCX1VTQl9EVFY1MTAwX0hfCisjZGVmaW5lIF9EVkJfVVNCX0RUVjUxMDBfSF8KKworI2RlZmluZSBEVkJfVVNCX0xPR19QUkVGSVggImR0djUxMDAiCisjaW5jbHVkZSAiZHZiLXVzYi5oIgorCisjZGVmaW5lIERUVjUxMDBfVVNCX1RJTUVPVVQgNTAwCisKKyNkZWZpbmUgRFRWNTEwMF9ERU1PRF9BRERSCTB4MDAKKyNkZWZpbmUgRFRWNTEwMF9ERU1PRF9XUklURQkweGMwCisjZGVmaW5lIERUVjUxMDBfREVNT0RfUkVBRAkweGMxCisKKyNkZWZpbmUgRFRWNTEwMF9UVU5FUl9BRERSCTB4YzQKKyNkZWZpbmUgRFRWNTEwMF9UVU5FUl9XUklURQkweGM3CisjZGVmaW5lIERUVjUxMDBfVFVORVJfUkVBRAkweGM4CisKKyNkZWZpbmUgRFJJVkVSX0FVVEhPUiAiQW50b2luZSBKYWNxdWV0LCBodHRwOi8vcm95YWxlLnplcmV6by5jb20vIgorI2RlZmluZSBEUklWRVJfREVTQyAiQU1FIERUVi01MTAwIFVTQjIuMCBEVkItVCIKKworc3RhdGljIHN0cnVjdCB7CisJdTggcmVxdWVzdDsKKwl1OCB2YWx1ZTsKKwl1MTYgaW5kZXg7Cit9IGR0djUxMDBfaW5pdFtdID0geworCXsgMHgwMDAwMDBjNSwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMSB9LAorCXsgMHgwMDAwMDBjNSwgMHgwMDAwMDAwMSwgMHgwMDAwMDAwMSB9LAorCXsgfQkJLyogVGVybWluYXRpbmcgZW50cnkgKi8KK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kdmItdXNiLWlkcy5oIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kdmItdXNiLWlkcy5oCmluZGV4IDAzZGZiOWYuLjczODBiOTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZHZiLXVzYi1pZHMuaAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2R2Yi11c2ItaWRzLmgKQEAgLTIyLDYgKzIyLDcgQEAKICNkZWZpbmUgVVNCX1ZJRF9BVkVSTUVESUEJCQkweDA3Y2EKICNkZWZpbmUgVVNCX1ZJRF9DT01QUk8JCQkJMHgxODViCiAjZGVmaW5lIFVTQl9WSURfQ09NUFJPX1VOSwkJCTB4MTQ1ZgorI2RlZmluZSBVU0JfVklEX0NPTkVYQU5UCQkJMHgwNTcyCiAjZGVmaW5lIFVTQl9WSURfQ1lQUkVTUwkJCQkweDA0YjQKICNkZWZpbmUgVVNCX1ZJRF9ESUJDT00JCQkJMHgxMGI4CiAjZGVmaW5lIFVTQl9WSURfRFBPU0gJCQkJMHgxNDk4CkBAIC0zMywxNiArMzQsMTkgQEAKICNkZWZpbmUgVVNCX1ZJRF9IQVVQUEFVR0UJCQkweDIwNDAKICNkZWZpbmUgVVNCX1ZJRF9IWVBFUl9QQUxURUsJCQkweDEwMjUKICNkZWZpbmUgVVNCX1ZJRF9LV09STEQJCQkJMHhlYjJhCisjZGVmaW5lIFVTQl9WSURfS1dPUkxEXzIJCQkweDFiODAKICNkZWZpbmUgVVNCX1ZJRF9LWUUJCQkJMHgwNDU4CiAjZGVmaW5lIFVTQl9WSURfTEVBRFRFSwkJCQkweDA0MTMKICNkZWZpbmUgVVNCX1ZJRF9MSVRFT04JCQkJMHgwNGNhCiAjZGVmaW5lIFVTQl9WSURfTUVESU9OCQkJCTB4MTY2MAogI2RlZmluZSBVU0JfVklEX01JR0xJQQkJCQkweDE4ZjMKICNkZWZpbmUgVVNCX1ZJRF9NU0kJCQkJMHgwZGIwCisjZGVmaW5lIFVTQl9WSURfTVNJXzIJCQkJMHgxNDYyCiAjZGVmaW5lIFVTQl9WSURfT1BFUkExCQkJCTB4Njk1YwogI2RlZmluZSBVU0JfVklEX1BJTk5BQ0xFCQkJMHgyMzA0CiAjZGVmaW5lIFVTQl9WSURfVEVDSE5PVFJFTkQJCQkweDBiNDgKICNkZWZpbmUgVVNCX1ZJRF9URVJSQVRFQwkJCTB4MGNjZAorI2RlZmluZSBVU0JfVklEX1RFTEVTVEFSCQkJMHgxMGI5CiAjZGVmaW5lIFVTQl9WSURfVklTSU9OUExVUwkJCTB4MTNkMwogI2RlZmluZSBVU0JfVklEX1RXSU5IQU4JCQkJMHgxODIyCiAjZGVmaW5lIFVTQl9WSURfVUxUSU1BX0VMRUNUUk9OSUMJCTB4MDVkOApAQCAtNTAsMTUgKzU0LDE4IEBACiAjZGVmaW5lIFVTQl9WSURfV0lERVZJRVcJCQkweDE0YWEKICNkZWZpbmUgVVNCX1ZJRF9HSUdBQllURQkJCTB4MTA0NAogI2RlZmluZSBVU0JfVklEX1lVQU4JCQkJMHgxMTY0Ci0KKyNkZWZpbmUgVVNCX1ZJRF9YVEVOU0lPTlMJCQkweDFhZTcKIAogLyogUHJvZHVjdCBJRHMgKi8KICNkZWZpbmUgVVNCX1BJRF9BRFNURUNIX1VTQjJfQ09MRAkJCTB4YTMzMwogI2RlZmluZSBVU0JfUElEX0FEU1RFQ0hfVVNCMl9XQVJNCQkJMHhhMzM0CiAjZGVmaW5lIFVTQl9QSURfQUZBVEVDSF9BRjkwMDUJCQkJMHg5MDIwCisjZGVmaW5lIFVTQl9QSURfQUZBVEVDSF9BRjkwMTVfOTAxNQkJCTB4OTAxNQorI2RlZmluZSBVU0JfUElEX0FGQVRFQ0hfQUY5MDE1XzkwMTYJCQkweDkwMTYKICNkZWZpbmUgVVNCX1ZJRF9BTElOS19EVFUJCQkJMHhmMTcwCiAjZGVmaW5lIFVTQl9QSURfQU5TT05JQ19EVkJUX1VTQgkJCTB4NjAwMAogI2RlZmluZSBVU0JfUElEX0FOWVNFRQkJCQkJMHg4NjFmCisjZGVmaW5lIFVTQl9QSURfQVpVUkVXQVZFX0FEX1RVNzAwCQkJMHgzMjM3CiAjZGVmaW5lIFVTQl9QSURfQVZFUk1FRElBX0RWQlRfVVNCX0NPTEQJCQkweDAwMDEKICNkZWZpbmUgVVNCX1BJRF9BVkVSTUVESUFfRFZCVF9VU0JfV0FSTQkJCTB4MDAwMgogI2RlZmluZSBVU0JfUElEX0FWRVJNRURJQV9EVkJUX1VTQjJfQ09MRAkJMHhhODAwCkBAIC02OSw2ICs3Niw3IEBACiAjZGVmaW5lIFVTQl9QSURfQ09NUFJPX0RWQlUyMDAwX1VOS19XQVJNCQkweDAxMGQKICNkZWZpbmUgVVNCX1BJRF9DT01QUk9fVklERU9NQVRFX1U1MDAJCQkweDFlNzgKICNkZWZpbmUgVVNCX1BJRF9DT01QUk9fVklERU9NQVRFX1U1MDBfUEMJCTB4MWU4MAorI2RlZmluZSBVU0JfUElEX0NPTkVYQU5UX0Q2ODBfRE1CCQkJMHg4NmQ2CiAjZGVmaW5lIFVTQl9QSURfRElCQ09NX0hPT0tfREVGQVVMVAkJCTB4MDA2NAogI2RlZmluZSBVU0JfUElEX0RJQkNPTV9IT09LX0RFRkFVTFRfUkVFTlVNCQkweDAwNjUKICNkZWZpbmUgVVNCX1BJRF9ESUJDT01fTU9EMzAwMF9DT0xECQkJMHgwYmI4CkBAIC04Nyw5ICs5NSwxMiBAQAogI2RlZmluZSBVU0JfUElEX1VOSVdJTExfU1RLNzcwMFAJCQkweDYwMDMKICNkZWZpbmUgVVNCX1BJRF9HUkFORFRFQ19EVkJUX1VTQl9DT0xECQkJMHgwZmEwCiAjZGVmaW5lIFVTQl9QSURfR1JBTkRURUNfRFZCVF9VU0JfV0FSTQkJCTB4MGZhMQorI2RlZmluZSBVU0JfUElEX0tXT1JMRF8zOTlVCQkJCTB4ZTM5OQorI2RlZmluZSBVU0JfUElEX0tXT1JMRF9QQzE2MF8yVAkJCQkweGMxNjAKICNkZWZpbmUgVVNCX1BJRF9LV09STERfVlNUUkVBTV9DT0xECQkJMHgxN2RlCiAjZGVmaW5lIFVTQl9QSURfS1dPUkxEX1ZTVFJFQU1fV0FSTQkJCTB4MTdkZgogI2RlZmluZSBVU0JfUElEX1RFUlJBVEVDX0NJTkVSR1lfVF9VU0JfWEUJCTB4MDA1NQorI2RlZmluZSBVU0JfUElEX1RFUlJBVEVDX0NJTkVSR1lfVF9VU0JfWEVfUkVWMgkJMHgwMDY5CiAjZGVmaW5lIFVTQl9QSURfVFdJTkhBTl9WUDcwNDFfQ09MRAkJCTB4MzIwMQogI2RlZmluZSBVU0JfUElEX1RXSU5IQU5fVlA3MDQxX1dBUk0JCQkweDMyMDIKICNkZWZpbmUgVVNCX1BJRF9UV0lOSEFOX1ZQNzAyMF9DT0xECQkJMHgzMjAzCkBAIC05OCw2ICsxMDksNyBAQAogI2RlZmluZSBVU0JfUElEX1RXSU5IQU5fVlA3MDQ1X1dBUk0JCQkweDMyMDYKICNkZWZpbmUgVVNCX1BJRF9UV0lOSEFOX1ZQNzAyMV9DT0xECQkJMHgzMjA3CiAjZGVmaW5lIFVTQl9QSURfVFdJTkhBTl9WUDcwMjFfV0FSTQkJCTB4MzIwOAorI2RlZmluZSBVU0JfUElEX1RJTllUV0lOCQkJCTB4MzIyNgogI2RlZmluZSBVU0JfUElEX0ROVFZfVElOWVVTQjJfQ09MRAkJCTB4MzIyMwogI2RlZmluZSBVU0JfUElEX0ROVFZfVElOWVVTQjJfV0FSTQkJCTB4MzIyNAogI2RlZmluZSBVU0JfUElEX1VMVElNQV9UVkJPWF9DT0xECQkJMHg4MTA1CkBAIC0xNDQsNiArMTU2LDkgQEAKICNkZWZpbmUgVVNCX1BJRF9BVkVSTUVESUFfSFlCUklEX1VMVFJBX1VTQl9NMDM5UgkweDAwMzkKICNkZWZpbmUgVVNCX1BJRF9BVkVSTUVESUFfSFlCUklEX1VMVFJBX1VTQl9NMDM5Ul9BVFNDCTB4MTAzOQogI2RlZmluZSBVU0JfUElEX0FWRVJNRURJQV9IWUJSSURfVUxUUkFfVVNCX00wMzlSX0RWQlQJMHgyMDM5CisjZGVmaW5lIFVTQl9QSURfQVZFUk1FRElBX1ZPTEFSX1gJCQkweGE4MTUKKyNkZWZpbmUgVVNCX1BJRF9BVkVSTUVESUFfVk9MQVJfWF8yCQkJMHg4MTUwCisjZGVmaW5lIFVTQl9QSURfQVZFUk1FRElBX0EzMDkJCQkJMHhhMzA5CiAjZGVmaW5lIFVTQl9QSURfVEVDSE5PVFJFTkRfQ09OTkVDVF9TMjQwMCAgICAgICAgICAgICAgIDB4MzAwNgogI2RlZmluZSBVU0JfUElEX1RFUlJBVEVDX0NJTkVSR1lfRFRfWFNfRElWRVJTSVRZCTB4MDA1YQogI2RlZmluZSBVU0JfUElEX1RFUlJBVEVDX0NJTkVSR1lfSFRfVVNCX1hFCQkweDAwNTgKQEAgLTE1Myw4ICsxNjgsMTEgQEAKICNkZWZpbmUgVVNCX1BJRF9QSU5OQUNMRV9QQ1RWMjAwMEUJCQkweDAyMmMKICNkZWZpbmUgVVNCX1BJRF9QSU5OQUNMRV9QQ1RWX0RWQl9UX0ZMQVNICQkweDAyMjgKICNkZWZpbmUgVVNCX1BJRF9QSU5OQUNMRV9QQ1RWX0RVQUxfRElWRVJTSVRZX0RWQl9UCTB4MDIyOQorI2RlZmluZSBVU0JfUElEX1BJTk5BQ0xFX1BDVFY3MUUJCQkweDAyMmIKICNkZWZpbmUgVVNCX1BJRF9QSU5OQUNMRV9QQ1RWNzJFCQkJMHgwMjM2CiAjZGVmaW5lIFVTQl9QSURfUElOTkFDTEVfUENUVjczRQkJCTB4MDIzNworI2RlZmluZSBVU0JfUElEX1BJTk5BQ0xFX1BDVFY4MDFFCQkJMHgwMjNhCisjZGVmaW5lIFVTQl9QSURfUElOTkFDTEVfUENUVjgwMUVfU0UJCQkweDAyM2IKICNkZWZpbmUgVVNCX1BJRF9QQ1RWXzIwMEUJCQkJMHgwMjBlCiAjZGVmaW5lIFVTQl9QSURfUENUVl80MDBFCQkJCTB4MDIwZgogI2RlZmluZSBVU0JfUElEX1BDVFZfNDUwRQkJCQkweDAyMjIKQEAgLTE3MSw2ICsxODksNyBAQAogI2RlZmluZSBVU0JfUElEX0RWSUNPX0JMVUVCSVJEX0RVQUxfMl9DT0xECQkweGRiNTgKICNkZWZpbmUgVVNCX1BJRF9EVklDT19CTFVFQklSRF9EVUFMXzJfV0FSTQkJMHhkYjU5CiAjZGVmaW5lIFVTQl9QSURfRFZJQ09fQkxVRUJJUkRfRFVBTF80CQkJMHhkYjc4CisjZGVmaW5lIFVTQl9QSURfRFZJQ09fQkxVRUJJUkRfRFVBTF80X1JFVl8yCQkweGRiOTgKICNkZWZpbmUgVVNCX1BJRF9EVklDT19CTFVFQklSRF9EVkJfVF9OQU5PXzIJCTB4ZGI3MAogI2RlZmluZSBVU0JfUElEX0RWSUNPX0JMVUVCSVJEX0RWQl9UX05BTk9fMl9ORldfV0FSTQkweGRiNzEKICNkZWZpbmUgVVNCX1BJRF9ESUdJVEFMTk9XX0JMVUVCSVJEX0RVQUxfMV9DT0xECQkweGRiNTQKQEAgLTE5MCw2ICsyMDksNyBAQAogI2RlZmluZSBVU0JfUElEX1dJTkZBU1RfRFRWX0RPTkdMRV9XQVJNCQkJMHg2MDI2CiAjZGVmaW5lIFVTQl9QSURfV0lORkFTVF9EVFZfRE9OR0xFX1NUSzc3MDBQCQkweDZmMDAKICNkZWZpbmUgVVNCX1BJRF9XSU5GQVNUX0RUVl9ET05HTEVfU1RLNzcwMFBfMgkJMHg2ZjAxCisjZGVmaW5lIFVTQl9QSURfV0lORkFTVF9EVFZfRE9OR0xFX0dPTEQJCQkweDYwMjkKICNkZWZpbmUgVVNCX1BJRF9HRU5QSVhfOFBTS19SRVZfMV9DT0xECQkJMHgwMjAwCiAjZGVmaW5lIFVTQl9QSURfR0VOUElYXzhQU0tfUkVWXzFfV0FSTQkJCTB4MDIwMQogI2RlZmluZSBVU0JfUElEX0dFTlBJWF84UFNLX1JFVl8yCQkJMHgwMjAyCkBAIC0xOTcsMTQgKzIxNywyMSBAQAogI2RlZmluZSBVU0JfUElEX0dFTlBJWF9TS1lXQUxLRVJfQ1czSwkJCTB4MDIwNAogI2RlZmluZSBVU0JfUElEX1NJR01BVEVLX0RWQl8xMTAJCQkweDY2MTAKICNkZWZpbmUgVVNCX1BJRF9NU0lfRElHSV9WT1hfTUlOSV9JSQkJCTB4MTUxMworI2RlZmluZSBVU0JfUElEX01TSV9ESUdJVk9YX0RVTwkJCQkweDg4MDEKICNkZWZpbmUgVVNCX1BJRF9PUEVSQTFfQ09MRAkJCQkweDI4MzAKICNkZWZpbmUgVVNCX1BJRF9PUEVSQTFfV0FSTQkJCQkweDM4MjkKICNkZWZpbmUgVVNCX1BJRF9MSUZFVklFV19UVl9XQUxLRVJfVFdJTl9DT0xECQkweDA1MTQKICNkZWZpbmUgVVNCX1BJRF9MSUZFVklFV19UVl9XQUxLRVJfVFdJTl9XQVJNCQkweDA1MTMKICNkZWZpbmUgVVNCX1BJRF9HSUdBQllURV9VNzAwMAkJCQkweDcwMDEKKyNkZWZpbmUgVVNCX1BJRF9HSUdBQllURV9VODAwMAkJCQkweDcwMDIKICNkZWZpbmUgVVNCX1BJRF9BU1VTX1UzMDAwCQkJCTB4MTcxZgorI2RlZmluZSBVU0JfUElEX0FTVVNfVTMwMDBICQkJCTB4MTczNgogI2RlZmluZSBVU0JfUElEX0FTVVNfVTMxMDAJCQkJMHgxNzNmCiAjZGVmaW5lIFVTQl9QSURfWVVBTl9FQzM3MlMJCQkJMHgxZWRjCisjZGVmaW5lIFVTQl9QSURfWVVBTl9TVEs3NzAwUEgJCQkJMHgxZjA4CiAjZGVmaW5lIFVTQl9QSURfRFcyMTAyCQkJCQkweDIxMDIKKyNkZWZpbmUgVVNCX1BJRF9YVEVOU0lPTlNfWERfMzgwCQkJMHgwMzgxCisjZGVmaW5lIFVTQl9QSURfVEVMRVNUQVJfU1RBUlNUSUNLXzIJCQkweDgwMDAKKyNkZWZpbmUgVVNCX1BJRF9NU0lfRElHSV9WT1hfTUlOSV9JSUkgICAgICAgICAgICAgICAgICAgMHg4ODA3CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kdzIxMDIuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZHcyMTAyLmMKaW5kZXggYTRkODk4Yi4uNjI4NmZiYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kdzIxMDIuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2R3MjEwMi5jCkBAIC0xLDQgKzEsNSBAQAotLyogRFZCIFVTQiBmcmFtZXdvcmsgY29tcGxpYW50IExpbnV4IGRyaXZlciBmb3IgdGhlIERWQldvcmxkIERWQi1TIDIxMDIgQ2FyZAorLyogRFZCIFVTQiBmcmFtZXdvcmsgY29tcGxpYW50IExpbnV4IGRyaXZlciBmb3IgdGhlCisqCURWQldvcmxkIERWQi1TIDIxMDEsIDIxMDIsIERWQi1TMiAyMTA0IENhcmQKICoKICogQ29weXJpZ2h0IChDKSAyMDA4IElnb3IgTS4gTGlwbGlhbmluIChsaXBsaWFuaW5AbWUuYnkpCiAqCkBAIC0xMCw2MiArMTEsNzQgQEAKICovCiAjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgogI2luY2x1ZGUgImR3MjEwMi5oIgorI2luY2x1ZGUgInNpMjF4eC5oIgogI2luY2x1ZGUgInN0djAyOTkuaCIKICNpbmNsdWRlICJ6MDE5NGEuaCIKKyNpbmNsdWRlICJzdHYwMjg4LmgiCisjaW5jbHVkZSAic3RiNjAwMC5oIgorI2luY2x1ZGUgImVkczE1NDcuaCIKKyNpbmNsdWRlICJjeDI0MTE2LmgiCiAKICNpZm5kZWYgVVNCX1BJRF9EVzIxMDIKICNkZWZpbmUgVVNCX1BJRF9EVzIxMDIgMHgyMTAyCiAjZW5kaWYKIAotI2RlZmluZSBEVzIxMDJfUkVBRF9NU0cgMAotI2RlZmluZSBEVzIxMDJfV1JJVEVfTVNHIDEKKyNpZm5kZWYgVVNCX1BJRF9EVzIxMDQKKyNkZWZpbmUgVVNCX1BJRF9EVzIxMDQgMHgyMTA0CisjZW5kaWYKKworI2RlZmluZSBEVzIxMFhfUkVBRF9NU0cgMAorI2RlZmluZSBEVzIxMFhfV1JJVEVfTVNHIDEKIAogI2RlZmluZSBSRUdfMUZfU1lNQk9MUkFURV9CWVRFMCAweDFmCiAjZGVmaW5lIFJFR18yMF9TWU1CT0xSQVRFX0JZVEUxIDB4MjAKICNkZWZpbmUgUkVHXzIxX1NZTUJPTFJBVEVfQllURTIgMHgyMQotCisvKiBvbiBteSBvd24qLwogI2RlZmluZSBEVzIxMDJfVk9MVEFHRV9DVFJMICgweDE4MDApCiAjZGVmaW5lIERXMjEwMl9SQ19RVUVSWSAoMHgxYTAwKQogCi1zdHJ1Y3QgZHcyMTAyX3N0YXRlIHsKK3N0cnVjdCBkdzIxMHhfc3RhdGUgewogCXUzMiBsYXN0X2tleV9wcmVzc2VkOwogfTsKLXN0cnVjdCBkdzIxMDJfcmNfa2V5cyB7CitzdHJ1Y3QgZHcyMTB4X3JjX2tleXMgewogCXUzMiBrZXljb2RlOwogCXUzMiBldmVudDsKIH07CiAKKy8qIGRlYnVnICovCitzdGF0aWMgaW50IGR2Yl91c2JfZHcyMTAyX2RlYnVnOworbW9kdWxlX3BhcmFtX25hbWVkKGRlYnVnLCBkdmJfdXNiX2R3MjEwMl9kZWJ1ZywgaW50LCAwNjQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJzZXQgZGVidWdnaW5nIGxldmVsICgxPWluZm8gMj14ZmVyIChvci1hYmxlKSkuIiBEVkJfVVNCX0RFQlVHX1NUQVRVUyk7CisKIERWQl9ERUZJTkVfTU9EX09QVF9BREFQVEVSX05SKGFkYXB0ZXJfbnIpOwogCi1zdGF0aWMgaW50IGR3MjEwMl9vcF9ydyhzdHJ1Y3QgdXNiX2RldmljZSAqZGV2LCB1OCByZXF1ZXN0LCB1MTYgdmFsdWUsCi0JCXU4ICpkYXRhLCB1MTYgbGVuLCBpbnQgZmxhZ3MpCitzdGF0aWMgaW50IGR3MjEweF9vcF9ydyhzdHJ1Y3QgdXNiX2RldmljZSAqZGV2LCB1OCByZXF1ZXN0LCB1MTYgdmFsdWUsCisJCQl1MTYgaW5kZXgsIHU4ICogZGF0YSwgdTE2IGxlbiwgaW50IGZsYWdzKQogewogCWludCByZXQ7CiAJdTggdThidWZbbGVuXTsKIAotCXVuc2lnbmVkIGludCBwaXBlID0gKGZsYWdzID09IERXMjEwMl9SRUFEX01TRykgPwotCQl1c2JfcmN2Y3RybHBpcGUoZGV2LCAwKSA6IHVzYl9zbmRjdHJscGlwZShkZXYsIDApOwotCXU4IHJlcXVlc3RfdHlwZSA9IChmbGFncyA9PSBEVzIxMDJfUkVBRF9NU0cpID8gVVNCX0RJUl9JTiA6IFVTQl9ESVJfT1VUOworCXVuc2lnbmVkIGludCBwaXBlID0gKGZsYWdzID09IERXMjEwWF9SRUFEX01TRykgPworCQkJCXVzYl9yY3ZjdHJscGlwZShkZXYsIDApIDogdXNiX3NuZGN0cmxwaXBlKGRldiwgMCk7CisJdTggcmVxdWVzdF90eXBlID0gKGZsYWdzID09IERXMjEwWF9SRUFEX01TRykgPyBVU0JfRElSX0lOIDogVVNCX0RJUl9PVVQ7CiAKLQlpZiAoZmxhZ3MgPT0gRFcyMTAyX1dSSVRFX01TRykKKwlpZiAoZmxhZ3MgPT0gRFcyMTBYX1dSSVRFX01TRykKIAkJbWVtY3B5KHU4YnVmLCBkYXRhLCBsZW4pOwotCXJldCA9IHVzYl9jb250cm9sX21zZyhkZXYsIHBpcGUsIHJlcXVlc3QsCi0JCXJlcXVlc3RfdHlwZSB8IFVTQl9UWVBFX1ZFTkRPUiwgdmFsdWUsIDAgLCB1OGJ1ZiwgbGVuLCAyMDAwKTsKKwlyZXQgPSB1c2JfY29udHJvbF9tc2coZGV2LCBwaXBlLCByZXF1ZXN0LCByZXF1ZXN0X3R5cGUgfCBVU0JfVFlQRV9WRU5ET1IsCisJCQkJdmFsdWUsIGluZGV4ICwgdThidWYsIGxlbiwgMjAwMCk7CiAKLQlpZiAoZmxhZ3MgPT0gRFcyMTAyX1JFQURfTVNHKQorCWlmIChmbGFncyA9PSBEVzIxMFhfUkVBRF9NU0cpCiAJCW1lbWNweShkYXRhLCB1OGJ1ZiwgbGVuKTsKIAlyZXR1cm4gcmV0OwogfQogCiAvKiBJMkMgKi8KLQogc3RhdGljIGludCBkdzIxMDJfaTJjX3RyYW5zZmVyKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcCwgc3RydWN0IGkyY19tc2cgbXNnW10sCiAJCWludCBudW0pCiB7CiBzdHJ1Y3QgZHZiX3VzYl9kZXZpY2UgKmQgPSBpMmNfZ2V0X2FkYXBkYXRhKGFkYXApOwogCWludCBpID0gMCwgcmV0ID0gMDsKIAl1OCBidWY2W10gPSB7MHgyYywgMHgwNSwgMHhjMCwgMCwgMCwgMCwgMH07Ci0JdTggcmVxdWVzdDsKIAl1MTYgdmFsdWU7CiAKIAlpZiAoIWQpCkBAIC03NiwxNCArODksMTIgQEAKIAlzd2l0Y2ggKG51bSkgewogCWNhc2UgMjoKIAkJLyogcmVhZCBzdHYwMjk5IHJlZ2lzdGVyICovCi0JCXJlcXVlc3QgPSAweGI1OwogCQl2YWx1ZSA9IG1zZ1swXS5idWZbMF07LyogcmVnaXN0ZXIgKi8KIAkJZm9yIChpID0gMDsgaSA8IG1zZ1sxXS5sZW47IGkrKykgewogCQkJdmFsdWUgPSB2YWx1ZSArIGk7Ci0JCQlyZXQgPSBkdzIxMDJfb3BfcncoZC0+dWRldiwgMHhiNSwKLQkJCQl2YWx1ZSwgYnVmNiwgMiwgRFcyMTAyX1JFQURfTVNHKTsKKwkJCXJldCA9IGR3MjEweF9vcF9ydyhkLT51ZGV2LCAweGI1LCB2YWx1ZSwgMCwKKwkJCQkJYnVmNiwgMiwgRFcyMTBYX1JFQURfTVNHKTsKIAkJCW1zZ1sxXS5idWZbaV0gPSBidWY2WzBdOwotCiAJCX0KIAkJYnJlYWs7CiAJY2FzZSAxOgpAQCAtOTMsOCArMTA0LDggQEAKIAkJCWJ1ZjZbMF0gPSAweDJhOwogCQkJYnVmNlsxXSA9IG1zZ1swXS5idWZbMF07CiAJCQlidWY2WzJdID0gbXNnWzBdLmJ1ZlsxXTsKLQkJCXJldCA9IGR3MjEwMl9vcF9ydyhkLT51ZGV2LCAweGIyLAotCQkJCTAsIGJ1ZjYsIDMsIERXMjEwMl9XUklURV9NU0cpOworCQkJcmV0ID0gZHcyMTB4X29wX3J3KGQtPnVkZXYsIDB4YjIsIDAsIDAsCisJCQkJCWJ1ZjYsIDMsIERXMjEwWF9XUklURV9NU0cpOwogCQkJYnJlYWs7CiAJCWNhc2UgMHg2MDoKIAkJCWlmIChtc2dbMF0uZmxhZ3MgPT0gMCkgewpAQCAtMTA2LDI2ICsxMTcsMjYgQEAKIAkJCQlidWY2WzRdID0gbXNnWzBdLmJ1ZlsxXTsKIAkJCQlidWY2WzVdID0gbXNnWzBdLmJ1ZlsyXTsKIAkJCQlidWY2WzZdID0gbXNnWzBdLmJ1ZlszXTsKLQkJCQlyZXQgPSBkdzIxMDJfb3BfcncoZC0+dWRldiwgMHhiMiwKLQkJCQkwLCBidWY2LCA3LCBEVzIxMDJfV1JJVEVfTVNHKTsKKwkJCQlyZXQgPSBkdzIxMHhfb3BfcncoZC0+dWRldiwgMHhiMiwgMCwgMCwKKwkJCQkJCWJ1ZjYsIDcsIERXMjEwWF9XUklURV9NU0cpOwogCQkJfSBlbHNlIHsKLQkJCS8qIHdyaXRlIHRvIHR1bmVyIHBsbCAqLwotCQkJCXJldCA9IGR3MjEwMl9vcF9ydyhkLT51ZGV2LCAweGI1LAotCQkJCTAsIGJ1ZjYsIDEsIERXMjEwMl9SRUFEX01TRyk7CisJCQkvKiByZWFkIGZyb20gdHVuZXIgKi8KKwkJCQlyZXQgPSBkdzIxMHhfb3BfcncoZC0+dWRldiwgMHhiNSwgMCwgMCwKKwkJCQkJCWJ1ZjYsIDEsIERXMjEwWF9SRUFEX01TRyk7CiAJCQkJbXNnWzBdLmJ1ZlswXSA9IGJ1ZjZbMF07CiAJCQl9CiAJCQlicmVhazsKIAkJY2FzZSAoRFcyMTAyX1JDX1FVRVJZKToKLQkJCXJldCAgPSBkdzIxMDJfb3BfcncoZC0+dWRldiwgMHhiOCwKLQkJCQkwLCBidWY2LCAyLCBEVzIxMDJfUkVBRF9NU0cpOworCQkJcmV0ICA9IGR3MjEweF9vcF9ydyhkLT51ZGV2LCAweGI4LCAwLCAwLAorCQkJCQlidWY2LCAyLCBEVzIxMFhfUkVBRF9NU0cpOwogCQkJbXNnWzBdLmJ1ZlswXSA9IGJ1ZjZbMF07CiAJCQltc2dbMF0uYnVmWzFdID0gYnVmNlsxXTsKIAkJCWJyZWFrOwogCQljYXNlIChEVzIxMDJfVk9MVEFHRV9DVFJMKToKIAkJCWJ1ZjZbMF0gPSAweDMwOwogCQkJYnVmNlsxXSA9IG1zZ1swXS5idWZbMF07Ci0JCQlyZXQgPSBkdzIxMDJfb3BfcncoZC0+dWRldiwgMHhiMiwKLQkJCQkwLCBidWY2LCAyLCBEVzIxMDJfV1JJVEVfTVNHKTsKKwkJCXJldCA9IGR3MjEweF9vcF9ydyhkLT51ZGV2LCAweGIyLCAwLCAwLAorCQkJCQlidWY2LCAyLCBEVzIxMFhfV1JJVEVfTVNHKTsKIAkJCWJyZWFrOwogCQl9CiAKQEAgLTEzNiwxNyArMTQ3LDI2NSBAQAogCXJldHVybiBudW07CiB9CiAKLXN0YXRpYyB1MzIgZHcyMTAyX2kyY19mdW5jKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlcikKK3N0YXRpYyBpbnQgZHcyMTAyX3Nlcml0X2kyY190cmFuc2ZlcihzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXAsCisJCQkJCQlzdHJ1Y3QgaTJjX21zZyBtc2dbXSwgaW50IG51bSkKK3sKKwlzdHJ1Y3QgZHZiX3VzYl9kZXZpY2UgKmQgPSBpMmNfZ2V0X2FkYXBkYXRhKGFkYXApOworCWludCByZXQgPSAwOworCXU4IGJ1ZjZbXSA9IHswLCAwLCAwLCAwLCAwLCAwLCAwfTsKKworCWlmICghZCkKKwkJcmV0dXJuIC1FTk9ERVY7CisJaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmZC0+aTJjX211dGV4KSA8IDApCisJCXJldHVybiAtRUFHQUlOOworCisJc3dpdGNoIChudW0pIHsKKwljYXNlIDI6CisJCS8qIHJlYWQgc2kyMTA5IHJlZ2lzdGVyIGJ5IG51bWJlciAqLworCQlidWY2WzBdID0gMHhkMDsKKwkJYnVmNlsxXSA9IG1zZ1swXS5sZW47CisJCWJ1ZjZbMl0gPSBtc2dbMF0uYnVmWzBdOworCQlyZXQgPSBkdzIxMHhfb3BfcncoZC0+dWRldiwgMHhjMiwgMCwgMCwKKwkJCQlidWY2LCBtc2dbMF0ubGVuICsgMiwgRFcyMTBYX1dSSVRFX01TRyk7CisJCS8qIHJlYWQgc2kyMTA5IHJlZ2lzdGVyICovCisJCXJldCA9IGR3MjEweF9vcF9ydyhkLT51ZGV2LCAweGMzLCAweGQwLCAwLAorCQkJCWJ1ZjYsIG1zZ1sxXS5sZW4gKyAyLCBEVzIxMFhfUkVBRF9NU0cpOworCQltZW1jcHkobXNnWzFdLmJ1ZiwgYnVmNiArIDIsIG1zZ1sxXS5sZW4pOworCisJCWJyZWFrOworCWNhc2UgMToKKwkJc3dpdGNoIChtc2dbMF0uYWRkcikgeworCQljYXNlIDB4Njg6CisJCQkvKiB3cml0ZSB0byBzaTIxMDkgcmVnaXN0ZXIgKi8KKwkJCWJ1ZjZbMF0gPSAweGQwOworCQkJYnVmNlsxXSA9IG1zZ1swXS5sZW47CisJCQltZW1jcHkoYnVmNiArIDIsIG1zZ1swXS5idWYsIG1zZ1swXS5sZW4pOworCQkJcmV0ID0gZHcyMTB4X29wX3J3KGQtPnVkZXYsIDB4YzIsIDAsIDAsIGJ1ZjYsCisJCQkJCW1zZ1swXS5sZW4gKyAyLCBEVzIxMFhfV1JJVEVfTVNHKTsKKwkJCWJyZWFrOworCQljYXNlKERXMjEwMl9SQ19RVUVSWSk6CisJCQlyZXQgID0gZHcyMTB4X29wX3J3KGQtPnVkZXYsIDB4YjgsIDAsIDAsCisJCQkJCWJ1ZjYsIDIsIERXMjEwWF9SRUFEX01TRyk7CisJCQltc2dbMF0uYnVmWzBdID0gYnVmNlswXTsKKwkJCW1zZ1swXS5idWZbMV0gPSBidWY2WzFdOworCQkJYnJlYWs7CisJCWNhc2UoRFcyMTAyX1ZPTFRBR0VfQ1RSTCk6CisJCQlidWY2WzBdID0gMHgzMDsKKwkJCWJ1ZjZbMV0gPSBtc2dbMF0uYnVmWzBdOworCQkJcmV0ID0gZHcyMTB4X29wX3J3KGQtPnVkZXYsIDB4YjIsIDAsIDAsCisJCQkJCWJ1ZjYsIDIsIERXMjEwWF9XUklURV9NU0cpOworCQkJYnJlYWs7CisJCX0KKwkJYnJlYWs7CisJfQorCisJbXV0ZXhfdW5sb2NrKCZkLT5pMmNfbXV0ZXgpOworCXJldHVybiBudW07Cit9CitzdGF0aWMgaW50IGR3MjEwMl9lYXJkYV9pMmNfdHJhbnNmZXIoc3RydWN0IGkyY19hZGFwdGVyICphZGFwLCBzdHJ1Y3QgaTJjX21zZyBtc2dbXSwgaW50IG51bSkKK3sKKwlzdHJ1Y3QgZHZiX3VzYl9kZXZpY2UgKmQgPSBpMmNfZ2V0X2FkYXBkYXRhKGFkYXApOworCWludCByZXQgPSAwOworCisJaWYgKCFkKQorCQlyZXR1cm4gLUVOT0RFVjsKKwlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZkLT5pMmNfbXV0ZXgpIDwgMCkKKwkJcmV0dXJuIC1FQUdBSU47CisKKwlzd2l0Y2ggKG51bSkgeworCWNhc2UgMjogeworCQkvKiByZWFkICovCisJCS8qIGZpcnN0IHdyaXRlIGZpcnN0IHJlZ2lzdGVyIG51bWJlciAqLworCQl1OCBpYnVmIFttc2dbMV0ubGVuICsgMl0sIG9idWZbM107CisJCW9idWZbMF0gPSAweGQwOworCQlvYnVmWzFdID0gbXNnWzBdLmxlbjsKKwkJb2J1ZlsyXSA9IG1zZ1swXS5idWZbMF07CisJCXJldCA9IGR3MjEweF9vcF9ydyhkLT51ZGV2LCAweGMyLCAwLCAwLAorCQkJCW9idWYsIG1zZ1swXS5sZW4gKyAyLCBEVzIxMFhfV1JJVEVfTVNHKTsKKwkJLyogc2Vjb25kIHJlYWQgcmVnaXN0ZXJzICovCisJCXJldCA9IGR3MjEweF9vcF9ydyhkLT51ZGV2LCAweGMzLCAweGQxICwgMCwKKwkJCQlpYnVmLCBtc2dbMV0ubGVuICsgMiwgRFcyMTBYX1JFQURfTVNHKTsKKwkJbWVtY3B5KG1zZ1sxXS5idWYsIGlidWYgKyAyLCBtc2dbMV0ubGVuKTsKKworCQlicmVhazsKKwl9CisJY2FzZSAxOgorCQlzd2l0Y2ggKG1zZ1swXS5hZGRyKSB7CisJCWNhc2UgMHg2ODogeworCQkJLyogd3JpdGUgdG8gcmVnaXN0ZXIgKi8KKwkJCXU4IG9idWZbbXNnWzBdLmxlbiArIDJdOworCQkJb2J1ZlswXSA9IDB4ZDA7CisJCQlvYnVmWzFdID0gbXNnWzBdLmxlbjsKKwkJCW1lbWNweShvYnVmICsgMiwgbXNnWzBdLmJ1ZiwgbXNnWzBdLmxlbik7CisJCQlyZXQgPSBkdzIxMHhfb3BfcncoZC0+dWRldiwgMHhjMiwgMCwgMCwKKwkJCQkJb2J1ZiwgbXNnWzBdLmxlbiArIDIsIERXMjEwWF9XUklURV9NU0cpOworCQkJYnJlYWs7CisJCX0KKwkJY2FzZSAweDYxOiB7CisJCQkvKiB3cml0ZSB0byB0dW5lciAqLworCQkJdTggb2J1Zlttc2dbMF0ubGVuICsgMl07CisJCQlvYnVmWzBdID0gMHhjMjsKKwkJCW9idWZbMV0gPSBtc2dbMF0ubGVuOworCQkJbWVtY3B5KG9idWYgKyAyLCBtc2dbMF0uYnVmLCBtc2dbMF0ubGVuKTsKKwkJCXJldCA9IGR3MjEweF9vcF9ydyhkLT51ZGV2LCAweGMyLCAwLCAwLAorCQkJCQlvYnVmLCBtc2dbMF0ubGVuICsgMiwgRFcyMTBYX1dSSVRFX01TRyk7CisJCQlicmVhazsKKwkJfQorCQljYXNlKERXMjEwMl9SQ19RVUVSWSk6IHsKKwkJCXU4IGlidWZbMl07CisJCQlyZXQgID0gZHcyMTB4X29wX3J3KGQtPnVkZXYsIDB4YjgsIDAsIDAsCisJCQkJCWlidWYsIDIsIERXMjEwWF9SRUFEX01TRyk7CisJCQltZW1jcHkobXNnWzBdLmJ1ZiwgaWJ1ZiAsIDIpOworCQkJYnJlYWs7CisJCX0KKwkJY2FzZShEVzIxMDJfVk9MVEFHRV9DVFJMKTogeworCQkJdTggb2J1ZlsyXTsKKwkJCW9idWZbMF0gPSAweDMwOworCQkJb2J1ZlsxXSA9IG1zZ1swXS5idWZbMF07CisJCQlyZXQgPSBkdzIxMHhfb3BfcncoZC0+dWRldiwgMHhiMiwgMCwgMCwKKwkJCQkJb2J1ZiwgMiwgRFcyMTBYX1dSSVRFX01TRyk7CisJCQlicmVhazsKKwkJfQorCQl9CisKKwkJYnJlYWs7CisJfQorCisJbXV0ZXhfdW5sb2NrKCZkLT5pMmNfbXV0ZXgpOworCXJldHVybiBudW07Cit9CisKK3N0YXRpYyBpbnQgZHcyMTA0X2kyY190cmFuc2ZlcihzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXAsIHN0cnVjdCBpMmNfbXNnIG1zZ1tdLCBpbnQgbnVtKQoreworCXN0cnVjdCBkdmJfdXNiX2RldmljZSAqZCA9IGkyY19nZXRfYWRhcGRhdGEoYWRhcCk7CisJaW50IHJldCA9IDA7CisJaW50IGxlbiwgaTsKKworCWlmICghZCkKKwkJcmV0dXJuIC1FTk9ERVY7CisJaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmZC0+aTJjX211dGV4KSA8IDApCisJCXJldHVybiAtRUFHQUlOOworCisJc3dpdGNoIChudW0pIHsKKwljYXNlIDI6IHsKKwkJLyogcmVhZCAqLworCQkvKiBmaXJzdCB3cml0ZSBmaXJzdCByZWdpc3RlciBudW1iZXIgKi8KKwkJdTggaWJ1ZiBbbXNnWzFdLmxlbiArIDJdLCBvYnVmWzNdOworCQlvYnVmWzBdID0gMHhhYTsKKwkJb2J1ZlsxXSA9IG1zZ1swXS5sZW47CisJCW9idWZbMl0gPSBtc2dbMF0uYnVmWzBdOworCQlyZXQgPSBkdzIxMHhfb3BfcncoZC0+dWRldiwgMHhjMiwgMCwgMCwKKwkJCQlvYnVmLCBtc2dbMF0ubGVuICsgMiwgRFcyMTBYX1dSSVRFX01TRyk7CisJCS8qIHNlY29uZCByZWFkIHJlZ2lzdGVycyAqLworCQlyZXQgPSBkdzIxMHhfb3BfcncoZC0+dWRldiwgMHhjMywgMHhhYiAsIDAsCisJCQkJaWJ1ZiwgbXNnWzFdLmxlbiArIDIsIERXMjEwWF9SRUFEX01TRyk7CisJCW1lbWNweShtc2dbMV0uYnVmLCBpYnVmICsgMiwgbXNnWzFdLmxlbik7CisKKwkJYnJlYWs7CisJfQorCWNhc2UgMToKKwkJc3dpdGNoIChtc2dbMF0uYWRkcikgeworCQljYXNlIDB4NTU6IHsKKwkJCWlmIChtc2dbMF0uYnVmWzBdID09IDB4ZjcpIHsKKwkJCQkvKiBmaXJtd2FyZSAqLworCQkJCS8qIFdyaXRlIGluIHNtYWxsIGJsb2NrcyAqLworCQkJCXU4IG9idWZbMTldOworCQkJCW9idWZbMF0gPSAweGFhOworCQkJCW9idWZbMV0gPSAweDExOworCQkJCW9idWZbMl0gPSAweGY3OworCQkJCWxlbiA9IG1zZ1swXS5sZW4gLSAxOworCQkJCWkgPSAxOworCQkJCWRvIHsKKwkJCQkJbWVtY3B5KG9idWYgKyAzLCBtc2dbMF0uYnVmICsgaSwgKGxlbiA+IDE2ID8gMTYgOiBsZW4pKTsKKwkJCQkJcmV0ID0gZHcyMTB4X29wX3J3KGQtPnVkZXYsIDB4YzIsIDAsIDAsCisJCQkJCQlvYnVmLCAobGVuID4gMTYgPyAxNiA6IGxlbikgKyAzLCBEVzIxMFhfV1JJVEVfTVNHKTsKKwkJCQkJaSArPSAxNjsKKwkJCQkJbGVuIC09IDE2OworCQkJCX0gd2hpbGUgKGxlbiA+IDApOworCQkJfSBlbHNlIHsKKwkJCQkvKiB3cml0ZSB0byByZWdpc3RlciAqLworCQkJCXU4IG9idWZbbXNnWzBdLmxlbiArIDJdOworCQkJCW9idWZbMF0gPSAweGFhOworCQkJCW9idWZbMV0gPSBtc2dbMF0ubGVuOworCQkJCW1lbWNweShvYnVmICsgMiwgbXNnWzBdLmJ1ZiwgbXNnWzBdLmxlbik7CisJCQkJcmV0ID0gZHcyMTB4X29wX3J3KGQtPnVkZXYsIDB4YzIsIDAsIDAsCisJCQkJCQlvYnVmLCBtc2dbMF0ubGVuICsgMiwgRFcyMTBYX1dSSVRFX01TRyk7CisJCQl9CisJCQlicmVhazsKKwkJfQorCQljYXNlKERXMjEwMl9SQ19RVUVSWSk6IHsKKwkJCXU4IGlidWZbMl07CisJCQlyZXQgID0gZHcyMTB4X29wX3J3KGQtPnVkZXYsIDB4YjgsIDAsIDAsCisJCQkJCWlidWYsIDIsIERXMjEwWF9SRUFEX01TRyk7CisJCQltZW1jcHkobXNnWzBdLmJ1ZiwgaWJ1ZiAsIDIpOworCQkJYnJlYWs7CisJCX0KKwkJY2FzZShEVzIxMDJfVk9MVEFHRV9DVFJMKTogeworCQkJdTggb2J1ZlsyXTsKKwkJCW9idWZbMF0gPSAweDMwOworCQkJb2J1ZlsxXSA9IG1zZ1swXS5idWZbMF07CisJCQlyZXQgPSBkdzIxMHhfb3BfcncoZC0+dWRldiwgMHhiMiwgMCwgMCwKKwkJCQkJb2J1ZiwgMiwgRFcyMTBYX1dSSVRFX01TRyk7CisJCQlicmVhazsKKwkJfQorCQl9CisKKwkJYnJlYWs7CisJfQorCisJbXV0ZXhfdW5sb2NrKCZkLT5pMmNfbXV0ZXgpOworCXJldHVybiBudW07Cit9CisKK3N0YXRpYyB1MzIgZHcyMTB4X2kyY19mdW5jKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlcikKIHsKIAlyZXR1cm4gSTJDX0ZVTkNfSTJDOwogfQogCiBzdGF0aWMgc3RydWN0IGkyY19hbGdvcml0aG0gZHcyMTAyX2kyY19hbGdvID0gewogCS5tYXN0ZXJfeGZlciA9IGR3MjEwMl9pMmNfdHJhbnNmZXIsCi0JLmZ1bmN0aW9uYWxpdHkgPSBkdzIxMDJfaTJjX2Z1bmMsCisJLmZ1bmN0aW9uYWxpdHkgPSBkdzIxMHhfaTJjX2Z1bmMsCiB9OwogCi1zdGF0aWMgaW50IGR3MjEwMl9zZXRfdm9sdGFnZShzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgZmVfc2VjX3ZvbHRhZ2VfdCB2b2x0YWdlKQorc3RhdGljIHN0cnVjdCBpMmNfYWxnb3JpdGhtIGR3MjEwMl9zZXJpdF9pMmNfYWxnbyA9IHsKKwkubWFzdGVyX3hmZXIgPSBkdzIxMDJfc2VyaXRfaTJjX3RyYW5zZmVyLAorCS5mdW5jdGlvbmFsaXR5ID0gZHcyMTB4X2kyY19mdW5jLAorfTsKKworc3RhdGljIHN0cnVjdCBpMmNfYWxnb3JpdGhtIGR3MjEwMl9lYXJkYV9pMmNfYWxnbyA9IHsKKwkubWFzdGVyX3hmZXIgPSBkdzIxMDJfZWFyZGFfaTJjX3RyYW5zZmVyLAorCS5mdW5jdGlvbmFsaXR5ID0gZHcyMTB4X2kyY19mdW5jLAorfTsKKworc3RhdGljIHN0cnVjdCBpMmNfYWxnb3JpdGhtIGR3MjEwNF9pMmNfYWxnbyA9IHsKKwkubWFzdGVyX3hmZXIgPSBkdzIxMDRfaTJjX3RyYW5zZmVyLAorCS5mdW5jdGlvbmFsaXR5ID0gZHcyMTB4X2kyY19mdW5jLAorfTsKKworc3RhdGljIGludCBkdzIxMHhfcmVhZF9tYWNfYWRkcmVzcyhzdHJ1Y3QgZHZiX3VzYl9kZXZpY2UgKmQsIHU4IG1hY1s2XSkKK3sKKwlpbnQgaTsKKwl1OCBpYnVmW10gPSB7MCwgMH07CisJdTggZWVwcm9tWzI1Nl0sIGVlcHJvbWxpbmVbMTZdOworCisJZm9yIChpID0gMDsgaSA8IDI1NjsgaSsrKSB7CisJCWlmIChkdzIxMHhfb3BfcncoZC0+dWRldiwgMHhiNiwgMHhhMCAsIGksIGlidWYsIDIsIERXMjEwWF9SRUFEX01TRykgPCAwKSB7CisJCQllcnIoInJlYWQgZWVwcm9tIGZhaWxlZC4iKTsKKwkJCXJldHVybiAtMTsKKwkJfSBlbHNlIHsKKwkJCWVlcHJvbWxpbmVbaSUxNl0gPSBpYnVmWzBdOworCQkJZWVwcm9tW2ldID0gaWJ1ZlswXTsKKwkJfQorCQlpZiAoKGkgJSAxNikgPT0gMTUpIHsKKwkJCWRlYl94ZmVyKCIlMDJ4OiAiLCBpIC0gMTUpOworCQkJZGVidWdfZHVtcChlZXByb21saW5lLCAxNiwgZGViX3hmZXIpOworCQl9CisJfQorCW1lbWNweShtYWMsIGVlcHJvbSArIDgsIDYpOworCXJldHVybiAwOworfTsKKworc3RhdGljIGludCBkdzIxMHhfc2V0X3ZvbHRhZ2Uoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIGZlX3NlY192b2x0YWdlX3Qgdm9sdGFnZSkKIHsKIAlzdGF0aWMgdTggY29tbWFuZF8xM3ZbMV0gPSB7MHgwMH07CiAJc3RhdGljIHU4IGNvbW1hbmRfMTh2WzFdID0gezB4MDF9OwpAQCAtMTYzLDE0ICs0MjIsNzQgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIHN0cnVjdCBzdHYwMjk5X2NvbmZpZyBzaGFycF96MDE5NGFfY29uZmlnID0geworCS5kZW1vZF9hZGRyZXNzID0gMHg2OCwKKwkuaW5pdHRhYiA9IHNoYXJwX3owMTk0YV9pbml0dGFiLAorCS5tY2xrID0gODgwMDAwMDBVTCwKKwkuaW52ZXJ0ID0gMSwKKwkuc2tpcF9yZWluaXQgPSAwLAorCS5sb2NrX291dHB1dCA9IFNUVjAyOTlfTE9DS09VVFBVVF8xLAorCS52b2x0MTNfb3AwX29wMSA9IFNUVjAyOTlfVk9MVDEzX09QMSwKKwkubWluX2RlbGF5X21zID0gMTAwLAorCS5zZXRfc3ltYm9sX3JhdGUgPSBzaGFycF96MDE5NGFfc2V0X3N5bWJvbF9yYXRlLAorfTsKKworc3RhdGljIHN0cnVjdCBjeDI0MTE2X2NvbmZpZyBkdzIxMDRfY29uZmlnID0geworCS5kZW1vZF9hZGRyZXNzID0gMHg1NSwKKwkubXBnX2Nsa19wb3NfcG9sID0gMHgwMSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc2kyMXh4X2NvbmZpZyBzZXJpdF9zcDE1MTFsaGJfY29uZmlnID0geworCS5kZW1vZF9hZGRyZXNzID0gMHg2OCwKKwkubWluX2RlbGF5X21zID0gMTAwLAorCit9OworCitzdGF0aWMgaW50IGR3MjEwNF9mcm9udGVuZF9hdHRhY2goc3RydWN0IGR2Yl91c2JfYWRhcHRlciAqZCkKK3sKKwlpZiAoKGQtPmZlID0gZHZiX2F0dGFjaChjeDI0MTE2X2F0dGFjaCwgJmR3MjEwNF9jb25maWcsCisJCQkmZC0+ZGV2LT5pMmNfYWRhcCkpICE9IE5VTEwpIHsKKwkJZC0+ZmUtPm9wcy5zZXRfdm9sdGFnZSA9IGR3MjEweF9zZXRfdm9sdGFnZTsKKwkJaW5mbygiQXR0YWNoZWQgY3gyNDExNiFcbiIpOworCQlyZXR1cm4gMDsKKwl9CisJcmV0dXJuIC1FSU87Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZHZiX3VzYl9kZXZpY2VfcHJvcGVydGllcyBkdzIxMDJfcHJvcGVydGllczsKKwogc3RhdGljIGludCBkdzIxMDJfZnJvbnRlbmRfYXR0YWNoKHN0cnVjdCBkdmJfdXNiX2FkYXB0ZXIgKmQpCiB7Ci0JZC0+ZmUgPSBkdmJfYXR0YWNoKHN0djAyOTlfYXR0YWNoLCAmc2hhcnBfejAxOTRhX2NvbmZpZywKLQkJJmQtPmRldi0+aTJjX2FkYXApOwotCWlmIChkLT5mZSAhPSBOVUxMKSB7Ci0JCWQtPmZlLT5vcHMuc2V0X3ZvbHRhZ2UgPSBkdzIxMDJfc2V0X3ZvbHRhZ2U7Ci0JCWluZm8oIkF0dGFjaGVkIHN0djAyOTkhXG4iKTsKLQkJcmV0dXJuIDA7CisJaWYgKGR3MjEwMl9wcm9wZXJ0aWVzLmkyY19hbGdvID09ICZkdzIxMDJfc2VyaXRfaTJjX2FsZ28pIHsKKwkJLypkdzIxMDJfcHJvcGVydGllcy5hZGFwdGVyLT50dW5lcl9hdHRhY2ggPSBOVUxMOyovCisJCWQtPmZlID0gZHZiX2F0dGFjaChzaTIxeHhfYXR0YWNoLCAmc2VyaXRfc3AxNTExbGhiX2NvbmZpZywKKwkJCQkJJmQtPmRldi0+aTJjX2FkYXApOworCQlpZiAoZC0+ZmUgIT0gTlVMTCkgeworCQkJZC0+ZmUtPm9wcy5zZXRfdm9sdGFnZSA9IGR3MjEweF9zZXRfdm9sdGFnZTsKKwkJCWluZm8oIkF0dGFjaGVkIHNpMjF4eCFcbiIpOworCQkJcmV0dXJuIDA7CisJCX0KKwl9CisJaWYgKGR3MjEwMl9wcm9wZXJ0aWVzLmkyY19hbGdvID09ICZkdzIxMDJfZWFyZGFfaTJjX2FsZ28pIHsKKwkJLypkdzIxMDJfcHJvcGVydGllcy5hZGFwdGVyLT50dW5lcl9hdHRhY2ggPSBkdzIxMDJfdHVuZXJfYXR0YWNoOyovCisJCWQtPmZlID0gZHZiX2F0dGFjaChzdHYwMjg4X2F0dGFjaCwgJmVhcmRhX2NvbmZpZywKKwkJCQkJJmQtPmRldi0+aTJjX2FkYXApOworCQlpZiAoZC0+ZmUgIT0gTlVMTCkgeworCQkJZC0+ZmUtPm9wcy5zZXRfdm9sdGFnZSA9IGR3MjEweF9zZXRfdm9sdGFnZTsKKwkJCWluZm8oIkF0dGFjaGVkIHN0djAyODghXG4iKTsKKwkJCXJldHVybiAwOworCQl9CisJfQorCisJaWYgKGR3MjEwMl9wcm9wZXJ0aWVzLmkyY19hbGdvID09ICZkdzIxMDJfaTJjX2FsZ28pIHsKKwkJLypkdzIxMDJfcHJvcGVydGllcy5hZGFwdGVyLT50dW5lcl9hdHRhY2ggPSBkdzIxMDJfdHVuZXJfYXR0YWNoOyovCisJCWQtPmZlID0gZHZiX2F0dGFjaChzdHYwMjk5X2F0dGFjaCwgJnNoYXJwX3owMTk0YV9jb25maWcsCisJCQkJCSZkLT5kZXYtPmkyY19hZGFwKTsKKwkJaWYgKGQtPmZlICE9IE5VTEwpIHsKKwkJCWQtPmZlLT5vcHMuc2V0X3ZvbHRhZ2UgPSBkdzIxMHhfc2V0X3ZvbHRhZ2U7CisJCQlpbmZvKCJBdHRhY2hlZCBzdHYwMjk5IVxuIik7CisJCQlyZXR1cm4gMDsKKwkJfQogCX0KIAlyZXR1cm4gLUVJTzsKIH0KQEAgLTE4Miw3ICs1MDEsMTUgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBkdmJfdXNiX3JjX2tleSBkdzIxMDJfcmNfa2V5c1tdID0geworc3RhdGljIGludCBkdzIxMDJfZWFyZGFfdHVuZXJfYXR0YWNoKHN0cnVjdCBkdmJfdXNiX2FkYXB0ZXIgKmFkYXApCit7CisJZHZiX2F0dGFjaChzdGI2MDAwX2F0dGFjaCwgYWRhcC0+ZmUsIDB4NjEsCisJCSZhZGFwLT5kZXYtPmkyY19hZGFwKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGR2Yl91c2JfcmNfa2V5IGR3MjEweF9yY19rZXlzW10gPSB7CiAJeyAweGY4LAkweDBhLCBLRVlfUSB9LAkJLypwb3dlciovCiAJeyAweGY4LAkweDBjLCBLRVlfTSB9LAkJLyptdXRlKi8KIAl7IDB4ZjgsCTB4MTEsIEtFWV8xIH0sCkBAIC0yMjEsNyArNTQ4LDcgQEAKIAogc3RhdGljIGludCBkdzIxMDJfcmNfcXVlcnkoc3RydWN0IGR2Yl91c2JfZGV2aWNlICpkLCB1MzIgKmV2ZW50LCBpbnQgKnN0YXRlKQogewotCXN0cnVjdCBkdzIxMDJfc3RhdGUgKnN0ID0gZC0+cHJpdjsKKwlzdHJ1Y3QgZHcyMTB4X3N0YXRlICpzdCA9IGQtPnByaXY7CiAJdTgga2V5WzJdOwogCXN0cnVjdCBpMmNfbXNnIG1zZ1tdID0gewogCQl7LmFkZHIgPSBEVzIxMDJfUkNfUVVFUlksIC5mbGFncyA9IEkyQ19NX1JELCAuYnVmID0ga2V5LApAQCAtMjMxLDEyICs1NTgsMTIgQEAKIAogCSpzdGF0ZSA9IFJFTU9URV9OT19LRVlfUFJFU1NFRDsKIAlpZiAoZHcyMTAyX2kyY190cmFuc2ZlcigmZC0+aTJjX2FkYXAsIG1zZywgMSkgPT0gMSkgewotCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShkdzIxMDJfcmNfa2V5cyk7IGkrKykgewotCQkJaWYgKGR3MjEwMl9yY19rZXlzW2ldLmRhdGEgPT0gbXNnWzBdLmJ1ZlswXSkgeworCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShkdzIxMHhfcmNfa2V5cyk7IGkrKykgeworCQkJaWYgKGR3MjEweF9yY19rZXlzW2ldLmRhdGEgPT0gbXNnWzBdLmJ1ZlswXSkgewogCQkJCSpzdGF0ZSA9IFJFTU9URV9LRVlfUFJFU1NFRDsKLQkJCQkqZXZlbnQgPSBkdzIxMDJfcmNfa2V5c1tpXS5ldmVudDsKKwkJCQkqZXZlbnQgPSBkdzIxMHhfcmNfa2V5c1tpXS5ldmVudDsKIAkJCQlzdC0+bGFzdF9rZXlfcHJlc3NlZCA9Ci0JCQkJCWR3MjEwMl9yY19rZXlzW2ldLmV2ZW50OworCQkJCQlkdzIxMHhfcmNfa2V5c1tpXS5ldmVudDsKIAkJCQlicmVhazsKIAkJCX0KIAkJc3QtPmxhc3Rfa2V5X3ByZXNzZWQgPSAwOwpAQCAtMjQ5LDYgKzU3Niw4IEBACiBzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgZHcyMTAyX3RhYmxlW10gPSB7CiAJe1VTQl9ERVZJQ0UoVVNCX1ZJRF9DWVBSRVNTLCBVU0JfUElEX0RXMjEwMil9LAogCXtVU0JfREVWSUNFKFVTQl9WSURfQ1lQUkVTUywgMHgyMTAxKX0sCisJe1VTQl9ERVZJQ0UoVVNCX1ZJRF9DWVBSRVNTLCAweDIxMDQpfSwKKwl7VVNCX0RFVklDRSgweDkwMjIsIDB4ZDY1MCl9LAogCXsgfQogfTsKIApAQCAtMjYwLDcgKzU4OSw3IEBACiAJdTggKmIsICpwOwogCWludCByZXQgPSAwLCBpOwogCXU4IHJlc2V0OwotCXU4IHJlc2V0MTYgW10gPSB7MCwgMCwgMCwgMCwgMCwgMCwgMH07CisJdTggcmVzZXQxNltdID0gezAsIDAsIDAsIDAsIDAsIDAsIDB9OwogCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZnc7CiAJY29uc3QgY2hhciAqZmlsZW5hbWUgPSAiZHZiLXVzYi1kdzIxMDEuZnciOwogCXN3aXRjaCAoZGV2LT5kZXNjcmlwdG9yLmlkUHJvZHVjdCkgewpAQCAtMjczLDI1ICs2MDIsMjMgQEAKIAkJCXJldHVybiByZXQ7CiAJCX0KIAkJYnJlYWs7Ci0JY2FzZSBVU0JfUElEX0RXMjEwMjoKKwlkZWZhdWx0OgogCQlmdyA9IGZybXdyOwogCQlicmVhazsKIAl9Ci0JaW5mbygic3RhcnQgZG93bmxvYWRpbmcgRFcyMTAyIGZpcm13YXJlIik7CisJaW5mbygic3RhcnQgZG93bmxvYWRpbmcgRFcyMTBYIGZpcm13YXJlIik7CiAJcCA9IGttYWxsb2MoZnctPnNpemUsIEdGUF9LRVJORUwpOwogCXJlc2V0ID0gMTsKIAkvKnN0b3AgdGhlIENQVSovCi0JZHcyMTAyX29wX3J3KGRldiwgMHhhMCwgMHg3ZjkyLCAmcmVzZXQsIDEsIERXMjEwMl9XUklURV9NU0cpOwotCWR3MjEwMl9vcF9ydyhkZXYsIDB4YTAsIDB4ZTYwMCwgJnJlc2V0LCAxLCBEVzIxMDJfV1JJVEVfTVNHKTsKKwlkdzIxMHhfb3BfcncoZGV2LCAweGEwLCAweDdmOTIsIDAsICZyZXNldCwgMSwgRFcyMTBYX1dSSVRFX01TRyk7CisJZHcyMTB4X29wX3J3KGRldiwgMHhhMCwgMHhlNjAwLCAwLCAmcmVzZXQsIDEsIERXMjEwWF9XUklURV9NU0cpOwogCiAJaWYgKHAgIT0gTlVMTCkgewogCQltZW1jcHkocCwgZnctPmRhdGEsIGZ3LT5zaXplKTsKIAkJZm9yIChpID0gMDsgaSA8IGZ3LT5zaXplOyBpICs9IDB4NDApIHsKIAkJCWIgPSAodTggKikgcCArIGk7Ci0JCQlpZiAoZHcyMTAyX29wX3J3Ci0JCQkJKGRldiwgMHhhMCwgaSwgYiAsIDB4NDAsCi0JCQkJCURXMjEwMl9XUklURV9NU0cpICE9IDB4NDAKLQkJCQkpIHsKKwkJCWlmIChkdzIxMHhfb3BfcncoZGV2LCAweGEwLCBpLCAwLCBiICwgMHg0MCwKKwkJCQkJRFcyMTBYX1dSSVRFX01TRykgIT0gMHg0MCkgewogCQkJCWVycigiZXJyb3Igd2hpbGUgdHJhbnNmZXJyaW5nIGZpcm13YXJlIik7CiAJCQkJcmV0ID0gLUVJTlZBTDsKIAkJCQlicmVhazsKQEAgLTI5OSw0MyArNjI2LDY2IEBACiAJCX0KIAkJLyogcmVzdGFydCB0aGUgQ1BVICovCiAJCXJlc2V0ID0gMDsKLQkJaWYgKHJldCB8fCBkdzIxMDJfb3BfcncKLQkJCShkZXYsIDB4YTAsIDB4N2Y5MiwgJnJlc2V0LCAxLAotCQkJRFcyMTAyX1dSSVRFX01TRykgIT0gMSkgeworCQlpZiAocmV0IHx8IGR3MjEweF9vcF9ydyhkZXYsIDB4YTAsIDB4N2Y5MiwgMCwgJnJlc2V0LCAxLAorCQkJCQlEVzIxMFhfV1JJVEVfTVNHKSAhPSAxKSB7CiAJCQllcnIoImNvdWxkIG5vdCByZXN0YXJ0IHRoZSBVU0IgY29udHJvbGxlciBDUFUuIik7CiAJCQlyZXQgPSAtRUlOVkFMOwogCQl9Ci0JCWlmIChyZXQgfHwgZHcyMTAyX29wX3J3Ci0JCQkoZGV2LCAweGEwLCAweGU2MDAsICZyZXNldCwgMSwKLQkJCURXMjEwMl9XUklURV9NU0cpICE9IDEpIHsKKwkJaWYgKHJldCB8fCBkdzIxMHhfb3BfcncoZGV2LCAweGEwLCAweGU2MDAsIDAsICZyZXNldCwgMSwKKwkJCQkJRFcyMTBYX1dSSVRFX01TRykgIT0gMSkgewogCQkJZXJyKCJjb3VsZCBub3QgcmVzdGFydCB0aGUgVVNCIGNvbnRyb2xsZXIgQ1BVLiIpOwogCQkJcmV0ID0gLUVJTlZBTDsKIAkJfQogCQkvKiBpbml0IHJlZ2lzdGVycyAqLwogCQlzd2l0Y2ggKGRldi0+ZGVzY3JpcHRvci5pZFByb2R1Y3QpIHsKLQkJY2FzZSBVU0JfUElEX0RXMjEwMjoKLQkJCWR3MjEwMl9vcF9ydwotCQkJCShkZXYsIDB4YmYsIDB4MDA0MCwgJnJlc2V0LCAwLAotCQkJCURXMjEwMl9XUklURV9NU0cpOwotCQkJZHcyMTAyX29wX3J3Ci0JCQkJKGRldiwgMHhiOSwgMHgwMDAwLCAmcmVzZXQxNlswXSwgMiwKLQkJCQlEVzIxMDJfUkVBRF9NU0cpOworCQljYXNlIFVTQl9QSURfRFcyMTA0OgorCQljYXNlIDB4ZDY1MDoKKwkJCXJlc2V0ID0gMTsKKwkJCWR3MjEweF9vcF9ydyhkZXYsIDB4YzQsIDB4MDAwMCwgMCwgJnJlc2V0LCAxLAorCQkJCQlEVzIxMFhfV1JJVEVfTVNHKTsKKwkJCXJlc2V0ID0gMDsKKwkJCWR3MjEweF9vcF9ydyhkZXYsIDB4YmYsIDB4MDA0MCwgMCwgJnJlc2V0LCAwLAorCQkJCQlEVzIxMFhfV1JJVEVfTVNHKTsKIAkJCWJyZWFrOworCQljYXNlIFVTQl9QSURfRFcyMTAyOgorCQkJZHcyMTB4X29wX3J3KGRldiwgMHhiZiwgMHgwMDQwLCAwLCAmcmVzZXQsIDAsCisJCQkJCURXMjEwWF9XUklURV9NU0cpOworCQkJZHcyMTB4X29wX3J3KGRldiwgMHhiOSwgMHgwMDAwLCAwLCAmcmVzZXQxNlswXSwgMiwKKwkJCQkJRFcyMTBYX1JFQURfTVNHKTsKKwkJCS8qIGNoZWNrIFNUVjAyOTkgZnJvbnRlbmQgICovCisJCQlkdzIxMHhfb3BfcncoZGV2LCAweGI1LCAwLCAwLCAmcmVzZXQxNlswXSwgMiwKKwkJCQkJRFcyMTBYX1JFQURfTVNHKTsKKwkJCWlmIChyZXNldDE2WzBdID09IDB4YTEpIHsKKwkJCQlkdzIxMDJfcHJvcGVydGllcy5pMmNfYWxnbyA9ICZkdzIxMDJfaTJjX2FsZ287CisJCQkJZHcyMTAyX3Byb3BlcnRpZXMuYWRhcHRlci0+dHVuZXJfYXR0YWNoID0gJmR3MjEwMl90dW5lcl9hdHRhY2g7CisJCQkJYnJlYWs7CisJCQl9IGVsc2UgeworCQkJCS8qIGNoZWNrIFNUVjAyODggZnJvbnRlbmQgICovCisJCQkJcmVzZXQxNlswXSA9IDB4ZDA7CisJCQkJcmVzZXQxNlsxXSA9IDE7CisJCQkJcmVzZXQxNlsyXSA9IDA7CisJCQkJZHcyMTB4X29wX3J3KGRldiwgMHhjMiwgMCwgMCwgJnJlc2V0MTZbMF0sIDMsCisJCQkJCQlEVzIxMFhfV1JJVEVfTVNHKTsKKwkJCQlkdzIxMHhfb3BfcncoZGV2LCAweGMzLCAweGQxLCAwLCAmcmVzZXQxNlswXSwgMywKKwkJCQkJCURXMjEwWF9SRUFEX01TRyk7CisJCQkJaWYgKHJlc2V0MTZbMl0gPT0gMHgxMSkgeworCQkJCQlkdzIxMDJfcHJvcGVydGllcy5pMmNfYWxnbyA9ICZkdzIxMDJfZWFyZGFfaTJjX2FsZ287CisJCQkJCWR3MjEwMl9wcm9wZXJ0aWVzLmFkYXB0ZXItPnR1bmVyX2F0dGFjaCA9ICZkdzIxMDJfZWFyZGFfdHVuZXJfYXR0YWNoOworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CiAJCWNhc2UgMHgyMTAxOgotCQkJZHcyMTAyX29wX3J3Ci0JCQkJKGRldiwgMHhiYywgMHgwMDMwLCAmcmVzZXQxNlswXSwgMiwKLQkJCQlEVzIxMDJfUkVBRF9NU0cpOwotCQkJZHcyMTAyX29wX3J3Ci0JCQkJKGRldiwgMHhiYSwgMHgwMDAwLCAmcmVzZXQxNlswXSwgNywKLQkJCQlEVzIxMDJfUkVBRF9NU0cpOwotCQkJZHcyMTAyX29wX3J3Ci0JCQkJKGRldiwgMHhiYSwgMHgwMDAwLCAmcmVzZXQxNlswXSwgNywKLQkJCQlEVzIxMDJfUkVBRF9NU0cpOwotCQkJZHcyMTAyX29wX3J3Ci0JCQkJKGRldiwgMHhiOSwgMHgwMDAwLCAmcmVzZXQxNlswXSwgMiwKLQkJCQlEVzIxMDJfUkVBRF9NU0cpOworCQkJZHcyMTB4X29wX3J3KGRldiwgMHhiYywgMHgwMDMwLCAwLCAmcmVzZXQxNlswXSwgMiwKKwkJCQkJRFcyMTBYX1JFQURfTVNHKTsKKwkJCWR3MjEweF9vcF9ydyhkZXYsIDB4YmEsIDB4MDAwMCwgMCwgJnJlc2V0MTZbMF0sIDcsCisJCQkJCURXMjEwWF9SRUFEX01TRyk7CisJCQlkdzIxMHhfb3BfcncoZGV2LCAweGJhLCAweDAwMDAsIDAsICZyZXNldDE2WzBdLCA3LAorCQkJCQlEVzIxMFhfUkVBRF9NU0cpOworCQkJZHcyMTB4X29wX3J3KGRldiwgMHhiOSwgMHgwMDAwLCAwLCAmcmVzZXQxNlswXSwgMiwKKwkJCQkJRFcyMTBYX1JFQURfTVNHKTsKIAkJCWJyZWFrOwogCQl9CisJCW1zbGVlcCgxMDApOwogCQlrZnJlZShwKTsKIAl9CiAJcmV0dXJuIHJldDsKQEAgLTM0NSwxMiArNjk1LDEyIEBACiAJLmNhcHMgPSBEVkJfVVNCX0lTX0FOX0kyQ19BREFQVEVSLAogCS51c2JfY3RybCA9IERFVklDRV9TUEVDSUZJQywKIAkuZmlybXdhcmUgPSAiZHZiLXVzYi1kdzIxMDIuZnciLAotCS5zaXplX29mX3ByaXYgPSBzaXplb2Yoc3RydWN0IGR3MjEwMl9zdGF0ZSksCisJLnNpemVfb2ZfcHJpdiA9IHNpemVvZihzdHJ1Y3QgZHcyMTB4X3N0YXRlKSwKIAkubm9fcmVjb25uZWN0ID0gMSwKIAotCS5pMmNfYWxnbyA9ICZkdzIxMDJfaTJjX2FsZ28sCi0JLnJjX2tleV9tYXAgPSBkdzIxMDJfcmNfa2V5cywKLQkucmNfa2V5X21hcF9zaXplID0gQVJSQVlfU0laRShkdzIxMDJfcmNfa2V5cyksCisJLmkyY19hbGdvID0gJmR3MjEwMl9zZXJpdF9pMmNfYWxnbywKKwkucmNfa2V5X21hcCA9IGR3MjEweF9yY19rZXlzLAorCS5yY19rZXlfbWFwX3NpemUgPSBBUlJBWV9TSVpFKGR3MjEweF9yY19rZXlzKSwKIAkucmNfaW50ZXJ2YWwgPSAxNTAsCiAJLnJjX3F1ZXJ5ID0gZHcyMTAyX3JjX3F1ZXJ5LAogCkBAIC0zNTgsMTEgKzcwOCwxMiBAQAogCS8qIHBhcmFtZXRlciBmb3IgdGhlIE1QRUcyLWRhdGEgdHJhbnNmZXIgKi8KIAkubnVtX2FkYXB0ZXJzID0gMSwKIAkuZG93bmxvYWRfZmlybXdhcmUgPSBkdzIxMDJfbG9hZF9maXJtd2FyZSwKLQkuYWRhcHRlciA9IHsKKwkucmVhZF9tYWNfYWRkcmVzcyA9IGR3MjEweF9yZWFkX21hY19hZGRyZXNzLAorCQkuYWRhcHRlciA9IHsKIAkJewogCQkJLmZyb250ZW5kX2F0dGFjaCA9IGR3MjEwMl9mcm9udGVuZF9hdHRhY2gsCiAJCQkuc3RyZWFtaW5nX2N0cmwgPSBOVUxMLAotCQkJLnR1bmVyX2F0dGFjaCA9IGR3MjEwMl90dW5lcl9hdHRhY2gsCisJCQkudHVuZXJfYXR0YWNoID0gTlVMTCwKIAkJCS5zdHJlYW0gPSB7CiAJCQkJLnR5cGUgPSBVU0JfQlVMSywKIAkJCQkuY291bnQgPSA4LApAQCAtMzg4LDExICs3MzksNjQgQEAKIAl9CiB9OwogCitzdGF0aWMgc3RydWN0IGR2Yl91c2JfZGV2aWNlX3Byb3BlcnRpZXMgZHcyMTA0X3Byb3BlcnRpZXMgPSB7CisJLmNhcHMgPSBEVkJfVVNCX0lTX0FOX0kyQ19BREFQVEVSLAorCS51c2JfY3RybCA9IERFVklDRV9TUEVDSUZJQywKKwkuZmlybXdhcmUgPSAiZHZiLXVzYi1kdzIxMDQuZnciLAorCS5zaXplX29mX3ByaXYgPSBzaXplb2Yoc3RydWN0IGR3MjEweF9zdGF0ZSksCisJLm5vX3JlY29ubmVjdCA9IDEsCisKKwkuaTJjX2FsZ28gPSAmZHcyMTA0X2kyY19hbGdvLAorCS5yY19rZXlfbWFwID0gZHcyMTB4X3JjX2tleXMsCisJLnJjX2tleV9tYXBfc2l6ZSA9IEFSUkFZX1NJWkUoZHcyMTB4X3JjX2tleXMpLAorCS5yY19pbnRlcnZhbCA9IDE1MCwKKwkucmNfcXVlcnkgPSBkdzIxMDJfcmNfcXVlcnksCisKKwkuZ2VuZXJpY19idWxrX2N0cmxfZW5kcG9pbnQgPSAweDgxLAorCS8qIHBhcmFtZXRlciBmb3IgdGhlIE1QRUcyLWRhdGEgdHJhbnNmZXIgKi8KKwkubnVtX2FkYXB0ZXJzID0gMSwKKwkuZG93bmxvYWRfZmlybXdhcmUgPSBkdzIxMDJfbG9hZF9maXJtd2FyZSwKKwkucmVhZF9tYWNfYWRkcmVzcyA9IGR3MjEweF9yZWFkX21hY19hZGRyZXNzLAorCS5hZGFwdGVyID0geworCQl7CisJCQkuZnJvbnRlbmRfYXR0YWNoID0gZHcyMTA0X2Zyb250ZW5kX2F0dGFjaCwKKwkJCS5zdHJlYW1pbmdfY3RybCA9IE5VTEwsCisJCQkvKi50dW5lcl9hdHRhY2ggPSBkdzIxMDRfdHVuZXJfYXR0YWNoLCovCisJCQkuc3RyZWFtID0geworCQkJCS50eXBlID0gVVNCX0JVTEssCisJCQkJLmNvdW50ID0gOCwKKwkJCQkuZW5kcG9pbnQgPSAweDgyLAorCQkJCS51ID0geworCQkJCQkuYnVsayA9IHsKKwkJCQkJCS5idWZmZXJzaXplID0gNDA5NiwKKwkJCQkJfQorCQkJCX0KKwkJCX0sCisJCX0KKwl9LAorCS5udW1fZGV2aWNlX2Rlc2NzID0gMiwKKwkuZGV2aWNlcyA9IHsKKwkJeyAiRFZCV29ybGQgRFcyMTA0IFVTQjIuMCIsCisJCQl7JmR3MjEwMl90YWJsZVsyXSwgTlVMTH0sCisJCQl7TlVMTH0sCisJCX0sCisJCXsgIlRlVmlpIFM2NTAgVVNCMi4wIiwKKwkJCXsmZHcyMTAyX3RhYmxlWzNdLCBOVUxMfSwKKwkJCXtOVUxMfSwKKwkJfSwKKwl9Cit9OworCiBzdGF0aWMgaW50IGR3MjEwMl9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwKIAkJY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQogewotCXJldHVybiBkdmJfdXNiX2RldmljZV9pbml0KGludGYsICZkdzIxMDJfcHJvcGVydGllcywKLQkJVEhJU19NT0RVTEUsIE5VTEwsIGFkYXB0ZXJfbnIpOworCWlmICgwID09IGR2Yl91c2JfZGV2aWNlX2luaXQoaW50ZiwgJmR3MjEwMl9wcm9wZXJ0aWVzLAorCQkJVEhJU19NT0RVTEUsIE5VTEwsIGFkYXB0ZXJfbnIpIHx8CisJICAgIDAgPT0gZHZiX3VzYl9kZXZpY2VfaW5pdChpbnRmLCAmZHcyMTA0X3Byb3BlcnRpZXMsCisJCQlUSElTX01PRFVMRSwgTlVMTCwgYWRhcHRlcl9ucikpIHsKKwkJcmV0dXJuIDA7CisJfQorCXJldHVybiAtRU5PREVWOwogfQogCiBzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgZHcyMTAyX2RyaXZlciA9IHsKQEAgLTQyMCw2ICs4MjQsNiBAQAogbW9kdWxlX2V4aXQoZHcyMTAyX21vZHVsZV9leGl0KTsKIAogTU9EVUxFX0FVVEhPUigiSWdvciBNLiBMaXBsaWFuaW4gKGMpIGxpcGxpYW5pbkBtZS5ieSIpOwotTU9EVUxFX0RFU0NSSVBUSU9OKCJEcml2ZXIgZm9yIERWQldvcmxkIERWQi1TIDIxMDEgMjEwMiBVU0IyLjAgZGV2aWNlIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkRyaXZlciBmb3IgRFZCV29ybGQgRFZCLVMgMjEwMSwgMjEwMiwgRFZCLVMyIDIxMDQgVVNCMi4wIGRldmljZSIpOwogTU9EVUxFX1ZFUlNJT04oIjAuMSIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kdzIxMDIuaCBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZHcyMTAyLmgKaW5kZXggN2EzMTBmOS4uZTMzNzA3MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kdzIxMDIuaAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2R3MjEwMi5oCkBAIC00LDYgKzQsNSBAQAogI2RlZmluZSBEVkJfVVNCX0xPR19QUkVGSVggImR3MjEwMiIKICNpbmNsdWRlICJkdmItdXNiLmgiCiAKLWV4dGVybiBpbnQgZHZiX3VzYl9kdzIxMDJfZGVidWc7CiAjZGVmaW5lIGRlYl94ZmVyKGFyZ3MuLi4pIGRwcmludGsoZHZiX3VzYl9kdzIxMDJfZGVidWcsIDB4MDIsIGFyZ3MpCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9LY29uZmlnIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL0tjb25maWcKaW5kZXggN2RiYjRhMi4uOTZiOTNlMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL0tjb25maWcKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL0tjb25maWcKQEAgLTQzLDYgKzQzLDIwIEBACiAJaGVscAogCSAgQSBEVkItUyB0dW5lciBtb2R1bGUuIFNheSBZIHdoZW4geW91IHdhbnQgdG8gc3VwcG9ydCB0aGlzIGZyb250ZW5kLgogCitjb25maWcgRFZCX1NUVjAyODgKKwl0cmlzdGF0ZSAiU1QgU1RWMDI4OCBiYXNlZCIKKwlkZXBlbmRzIG9uIERWQl9DT1JFICYmIEkyQworCWRlZmF1bHQgbSBpZiBEVkJfRkVfQ1VTVE9NSVNFCisJaGVscAorCSAgQSBEVkItUyB0dW5lciBtb2R1bGUuIFNheSBZIHdoZW4geW91IHdhbnQgdG8gc3VwcG9ydCB0aGlzIGZyb250ZW5kLgorCitjb25maWcgRFZCX1NUQjYwMDAKKwl0cmlzdGF0ZSAiU1QgU1RCNjAwMCBzaWxpY29uIHR1bmVyIgorCWRlcGVuZHMgb24gRFZCX0NPUkUgJiYgSTJDCisJZGVmYXVsdCBtIGlmIERWQl9GRV9DVVNUT01JU0UKKwkgIGhlbHAKKwkgIEEgRFZCLVMgc2lsaWNvbiB0dW5lciBtb2R1bGUuIFNheSBZIHdoZW4geW91IHdhbnQgdG8gc3VwcG9ydCB0aGlzIHR1bmVyLgorCiBjb25maWcgRFZCX1NUVjAyOTkKIAl0cmlzdGF0ZSAiU1QgU1RWMDI5OSBiYXNlZCIKIAlkZXBlbmRzIG9uIERWQl9DT1JFICYmIEkyQwpAQCAtOTIsNiArMTA2LDIwIEBACiAJaGVscAogCSAgQSBEVkItUyBQTEwgY2hpcC4KIAorY29uZmlnIERWQl9DWDI0MTE2CisJdHJpc3RhdGUgIkNvbmV4YW50IENYMjQxMTYgYmFzZWQiCisJZGVwZW5kcyBvbiBEVkJfQ09SRSAmJiBJMkMKKwlkZWZhdWx0IG0gaWYgRFZCX0ZFX0NVU1RPTUlTRQorCWhlbHAKKwkgIEEgRFZCLVMvUzIgdHVuZXIgbW9kdWxlLiBTYXkgWSB3aGVuIHlvdSB3YW50IHRvIHN1cHBvcnQgdGhpcyBmcm9udGVuZC4KKworY29uZmlnIERWQl9TSTIxWFgKKwl0cmlzdGF0ZSAiU2lsaWNvbiBMYWJzIFNJMjFYWCBiYXNlZCIKKwlkZXBlbmRzIG9uIERWQl9DT1JFICYmIEkyQworCWRlZmF1bHQgbSBpZiBEVkJfRkVfQ1VTVE9NSVNFCisJaGVscAorCSAgQSBEVkItUyB0dW5lciBtb2R1bGUuIFNheSBZIHdoZW4geW91IHdhbnQgdG8gc3VwcG9ydCB0aGlzIGZyb250ZW5kLgorCiBjb21tZW50ICJEVkItVCAodGVycmVzdHJpYWwpIGZyb250ZW5kcyIKIAlkZXBlbmRzIG9uIERWQl9DT1JFCiAKQEAgLTM4NSw0ICs0MTMsMjMgQEAKIAloZWxwCiAJICBBbiBTRUMgY29udHJvbCBjaGlwLgogCitjb25maWcgRFZCX0xHUzhHTDUKKwl0cmlzdGF0ZSAiU2lsaWNvbiBMZWdlbmQgTEdTLThHTDUgZGVtb2R1bGF0b3IgKE9GRE0pIgorCWRlcGVuZHMgb24gRFZCX0NPUkUgJiYgSTJDCisJZGVmYXVsdCBtIGlmIERWQl9GRV9DVVNUT01JU0UKKwloZWxwCisJICBBIERNQi1USCB0dW5lciBtb2R1bGUuIFNheSBZIHdoZW4geW91IHdhbnQgdG8gc3VwcG9ydCB0aGlzIGZyb250ZW5kLgorCitjb21tZW50ICJUb29scyB0byBkZXZlbG9wIG5ldyBmcm9udGVuZHMiCisKK2NvbmZpZyBEVkJfRFVNTVlfRkUKKwl0cmlzdGF0ZSAiRHVtbXkgZnJvbnRlbmQgZHJpdmVyIgorCWRlZmF1bHQgbgorCitjb25maWcgRFZCX0FGOTAxMworCXRyaXN0YXRlICJBZmF0ZWNoIEFGOTAxMyBkZW1vZHVsYXRvciIKKwlkZXBlbmRzIG9uIERWQl9DT1JFICYmIEkyQworCWRlZmF1bHQgbSBpZiBEVkJfRkVfQ1VTVE9NSVNFCisJaGVscAorCSAgU2F5IFkgd2hlbiB5b3Ugd2FudCB0byBzdXBwb3J0IHRoaXMgZnJvbnRlbmQuCiBlbmRtZW51CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvTWFrZWZpbGUgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvTWFrZWZpbGUKaW5kZXggMDI4ZGE1NS4uYWJhNzlmNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9NYWtlZmlsZQpAQCAtNDgsMyArNDgsMTAgQEAKIG9iai0kKENPTkZJR19EVkJfQVU4NTIyKSArPSBhdTg1MjIubwogb2JqLSQoQ09ORklHX0RWQl9UREExMDA0OCkgKz0gdGRhMTAwNDgubwogb2JqLSQoQ09ORklHX0RWQl9TNUgxNDExKSArPSBzNWgxNDExLm8KK29iai0kKENPTkZJR19EVkJfTEdTOEdMNSkgKz0gbGdzOGdsNS5vCitvYmotJChDT05GSUdfRFZCX0RVTU1ZX0ZFKSArPSBkdmJfZHVtbXlfZmUubworb2JqLSQoQ09ORklHX0RWQl9BRjkwMTMpICs9IGFmOTAxMy5vCitvYmotJChDT05GSUdfRFZCX0NYMjQxMTYpICs9IGN4MjQxMTYubworb2JqLSQoQ09ORklHX0RWQl9TSTIxWFgpICs9IHNpMjF4eC5vCitvYmotJChDT05GSUdfRFZCX1NUVjAyODgpICs9IHN0djAyODgubworb2JqLSQoQ09ORklHX0RWQl9TVEI2MDAwKSArPSBzdGI2MDAwLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9hZjkwMTMuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9hZjkwMTMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMWMxMDYwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2FmOTAxMy5jCkBAIC0wLDAgKzEsMTY4NSBAQAorLyoKKyAqIERWQiBVU0IgTGludXggZHJpdmVyIGZvciBBZmF0ZWNoIEFGOTAxNSBEVkItVCBVU0IyLjAgcmVjZWl2ZXIKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgQW50dGkgUGFsb3NhYXJpIDxjcm9wZUBpa2kuZmk+CisgKgorICogVGhhbmtzIHRvIEFmYXRlY2ggd2hvIGtpbmRseSBwcm92aWRlZCBpbmZvcm1hdGlvbi4KKyAqCisgKiAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2Zpcm13YXJlLmg+CisKKyNpbmNsdWRlICJkdmJfZnJvbnRlbmQuaCIKKyNpbmNsdWRlICJhZjkwMTNfcHJpdi5oIgorI2luY2x1ZGUgImFmOTAxMy5oIgorCitpbnQgYWY5MDEzX2RlYnVnOworCitzdHJ1Y3QgYWY5MDEzX3N0YXRlIHsKKwlzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyYzsKKwlzdHJ1Y3QgZHZiX2Zyb250ZW5kIGZyb250ZW5kOworCisJc3RydWN0IGFmOTAxM19jb25maWcgY29uZmlnOworCisJdTE2IHNpZ25hbF9zdHJlbmd0aDsKKwl1MzIgYmVyOworCXUzMiB1Y2Jsb2NrczsKKwl1MTYgc25yOworCXUzMiBmcmVxdWVuY3k7CisJdW5zaWduZWQgbG9uZyBuZXh0X3N0YXRpc3RpY3NfY2hlY2s7Cit9OworCitzdGF0aWMgdTggcmVnbWFza1s4XSA9IHsgMHgwMSwgMHgwMywgMHgwNywgMHgwZiwgMHgxZiwgMHgzZiwgMHg3ZiwgMHhmZiB9OworCitzdGF0aWMgaW50IGFmOTAxM193cml0ZV9yZWdzKHN0cnVjdCBhZjkwMTNfc3RhdGUgKnN0YXRlLCB1OCBtYm94LCB1MTYgcmVnLAorCXU4ICp2YWwsIHU4IGxlbikKK3sKKwl1OCBidWZbMytsZW5dOworCXN0cnVjdCBpMmNfbXNnIG1zZyA9IHsKKwkJLmFkZHIgPSBzdGF0ZS0+Y29uZmlnLmRlbW9kX2FkZHJlc3MsCisJCS5mbGFncyA9IDAsCisJCS5sZW4gPSBzaXplb2YoYnVmKSwKKwkJLmJ1ZiA9IGJ1ZiB9OworCisJYnVmWzBdID0gcmVnID4+IDg7CisJYnVmWzFdID0gcmVnICYgMHhmZjsKKwlidWZbMl0gPSBtYm94OworCW1lbWNweSgmYnVmWzNdLCB2YWwsIGxlbik7CisKKwlpZiAoaTJjX3RyYW5zZmVyKHN0YXRlLT5pMmMsICZtc2csIDEpICE9IDEpIHsKKwkJd2FybigiSTJDIHdyaXRlIGZhaWxlZCByZWc6JTA0eCBsZW46JWQiLCByZWcsIGxlbik7CisJCXJldHVybiAtRVJFTU9URUlPOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhZjkwMTNfd3JpdGVfb2ZkbV9yZWdzKHN0cnVjdCBhZjkwMTNfc3RhdGUgKnN0YXRlLCB1MTYgcmVnLCB1OCAqdmFsLAorCXU4IGxlbikKK3sKKwl1OCBtYm94ID0gKDEgPDwgMCl8KDEgPDwgMSl8KChsZW4gLSAxKSA8PCAyKXwoMCA8PCA2KXwoMCA8PCA3KTsKKwlyZXR1cm4gYWY5MDEzX3dyaXRlX3JlZ3Moc3RhdGUsIG1ib3gsIHJlZywgdmFsLCBsZW4pOworfQorCitzdGF0aWMgaW50IGFmOTAxM193cml0ZV9vZnNtX3JlZ3Moc3RydWN0IGFmOTAxM19zdGF0ZSAqc3RhdGUsIHUxNiByZWcsIHU4ICp2YWwsCisJdTggbGVuKQoreworCXU4IG1ib3ggPSAoMSA8PCAwKXwoMSA8PCAxKXwoKGxlbiAtIDEpIDw8IDIpfCgxIDw8IDYpfCgxIDw8IDcpOworCXJldHVybiBhZjkwMTNfd3JpdGVfcmVncyhzdGF0ZSwgbWJveCwgcmVnLCB2YWwsIGxlbik7Cit9CisKKy8qIHdyaXRlIHNpbmdsZSByZWdpc3RlciAqLworc3RhdGljIGludCBhZjkwMTNfd3JpdGVfcmVnKHN0cnVjdCBhZjkwMTNfc3RhdGUgKnN0YXRlLCB1MTYgcmVnLCB1OCB2YWwpCit7CisJcmV0dXJuIGFmOTAxM193cml0ZV9vZmRtX3JlZ3Moc3RhdGUsIHJlZywgJnZhbCwgMSk7Cit9CisKKy8qIHJlYWQgc2luZ2xlIHJlZ2lzdGVyICovCitzdGF0aWMgaW50IGFmOTAxM19yZWFkX3JlZyhzdHJ1Y3QgYWY5MDEzX3N0YXRlICpzdGF0ZSwgdTE2IHJlZywgdTggKnZhbCkKK3sKKwl1OCBvYnVmWzNdID0geyByZWcgPj4gOCwgcmVnICYgMHhmZiwgMCB9OworCXU4IGlidWZbMV07CisJc3RydWN0IGkyY19tc2cgbXNnWzJdID0geworCQl7CisJCQkuYWRkciA9IHN0YXRlLT5jb25maWcuZGVtb2RfYWRkcmVzcywKKwkJCS5mbGFncyA9IDAsCisJCQkubGVuID0gc2l6ZW9mKG9idWYpLAorCQkJLmJ1ZiA9IG9idWYKKwkJfSwgeworCQkJLmFkZHIgPSBzdGF0ZS0+Y29uZmlnLmRlbW9kX2FkZHJlc3MsCisJCQkuZmxhZ3MgPSBJMkNfTV9SRCwKKwkJCS5sZW4gPSBzaXplb2YoaWJ1ZiksCisJCQkuYnVmID0gaWJ1ZgorCQl9CisJfTsKKworCWlmIChpMmNfdHJhbnNmZXIoc3RhdGUtPmkyYywgbXNnLCAyKSAhPSAyKSB7CisJCXdhcm4oIkkyQyByZWFkIGZhaWxlZCByZWc6JTA0eCIsIHJlZyk7CisJCXJldHVybiAtRVJFTU9URUlPOworCX0KKwkqdmFsID0gaWJ1ZlswXTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhZjkwMTNfd3JpdGVfcmVnX2JpdHMoc3RydWN0IGFmOTAxM19zdGF0ZSAqc3RhdGUsIHUxNiByZWcsIHU4IHBvcywKKwl1OCBsZW4sIHU4IHZhbCkKK3sKKwlpbnQgcmV0OworCXU4IHRtcCwgbWFzazsKKworCXJldCA9IGFmOTAxM19yZWFkX3JlZyhzdGF0ZSwgcmVnLCAmdG1wKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJbWFzayA9IHJlZ21hc2tbbGVuIC0gMV0gPDwgcG9zOworCXRtcCA9ICh0bXAgJiB+bWFzaykgfCAoKHZhbCA8PCBwb3MpICYgbWFzayk7CisKKwlyZXR1cm4gYWY5MDEzX3dyaXRlX3JlZyhzdGF0ZSwgcmVnLCB0bXApOworfQorCitzdGF0aWMgaW50IGFmOTAxM19yZWFkX3JlZ19iaXRzKHN0cnVjdCBhZjkwMTNfc3RhdGUgKnN0YXRlLCB1MTYgcmVnLCB1OCBwb3MsCisJdTggbGVuLCB1OCAqdmFsKQoreworCWludCByZXQ7CisJdTggdG1wOworCisJcmV0ID0gYWY5MDEzX3JlYWRfcmVnKHN0YXRlLCByZWcsICZ0bXApOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisJKnZhbCA9ICh0bXAgPj4gcG9zKSAmIHJlZ21hc2tbbGVuIC0gMV07CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYWY5MDEzX3NldF9ncGlvKHN0cnVjdCBhZjkwMTNfc3RhdGUgKnN0YXRlLCB1OCBncGlvLCB1OCBncGlvdmFsKQoreworCWludCByZXQ7CisJdTggcG9zOworCXUxNiBhZGRyOworCWRlYl9pbmZvKCIlczogZ3BpbzolZCBncGlvdmFsOiUwMnhcbiIsIF9fZnVuY19fLCBncGlvLCBncGlvdmFsKTsKKworLyogR1BJTzAgJiBHUElPMSAweGQ3MzUKKyAgIEdQSU8yICYgR1BJTzMgMHhkNzM2ICovCisKKwlzd2l0Y2ggKGdwaW8pIHsKKwljYXNlIDA6CisJY2FzZSAxOgorCQlhZGRyID0gMHhkNzM1OworCQlicmVhazsKKwljYXNlIDI6CisJY2FzZSAzOgorCQlhZGRyID0gMHhkNzM2OworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWVycigiaW52YWxpZCBncGlvOiVkXG4iLCBncGlvKTsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBlcnJvcjsKKwl9OworCisJc3dpdGNoIChncGlvKSB7CisJY2FzZSAwOgorCWNhc2UgMjoKKwkJcG9zID0gMDsKKwkJYnJlYWs7CisJY2FzZSAxOgorCWNhc2UgMzoKKwlkZWZhdWx0OgorCQlwb3MgPSA0OworCQlicmVhazsKKwl9OworCisJcmV0ID0gYWY5MDEzX3dyaXRlX3JlZ19iaXRzKHN0YXRlLCBhZGRyLCBwb3MsIDQsIGdwaW92YWwpOworCitlcnJvcjoKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdTMyIGFmOTEzX2Rpdih1MzIgYSwgdTMyIGIsIHUzMiB4KQoreworCXUzMiByID0gMCwgYyA9IDAsIGk7CisJZGViX2luZm8oIiVzOiBhOiVkIGI6JWQgeDolZFxuIiwgX19mdW5jX18sIGEsIGIsIHgpOworCisJaWYgKGEgPiBiKSB7CisJCWMgPSBhIC8gYjsKKwkJYSA9IGEgLSBjICogYjsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgeDsgaSsrKSB7CisJCWlmIChhID49IGIpIHsKKwkJCXIgKz0gMTsKKwkJCWEgLT0gYjsKKwkJfQorCQlhIDw8PSAxOworCQlyIDw8PSAxOworCX0KKwlyID0gKGMgPDwgKHUzMil4KSArIHI7CisKKwlkZWJfaW5mbygiJXM6IGE6JWQgYjolZCB4OiVkIHI6JWQgcjoleFxuIiwgX19mdW5jX18sIGEsIGIsIHgsIHIsIHIpOworCXJldHVybiByOworfQorCitzdGF0aWMgaW50IGFmOTAxM19zZXRfY29lZmYoc3RydWN0IGFmOTAxM19zdGF0ZSAqc3RhdGUsIGZlX2JhbmR3aWR0aF90IGJ3KQoreworCWludCByZXQgPSAwOworCXU4IGkgPSAwOworCXU4IGJ1ZlsyNF07CisJdTMyIG5zX2NvZWZmMV8yMDQ4bnU7CisJdTMyIG5zX2NvZWZmMV84MTkxbnU7CisJdTMyIG5zX2NvZWZmMV84MTkybnU7CisJdTMyIG5zX2NvZWZmMV84MTkzbnU7CisJdTMyIG5zX2NvZWZmMl8yazsKKwl1MzIgbnNfY29lZmYyXzhrOworCisJZGViX2luZm8oIiVzOiBhZGNfY2xvY2s6JWQgYnc6JWRcbiIsIF9fZnVuY19fLAorCQlzdGF0ZS0+Y29uZmlnLmFkY19jbG9jaywgYncpOworCisJc3dpdGNoIChzdGF0ZS0+Y29uZmlnLmFkY19jbG9jaykgeworCWNhc2UgMjg4MDA6IC8qIDI4LjgwMCBNSHogKi8KKwkJc3dpdGNoIChidykgeworCQljYXNlIEJBTkRXSURUSF82X01IWjoKKwkJCW5zX2NvZWZmMV8yMDQ4bnUgPSAweDAxZTc5ZTdhOworCQkJbnNfY29lZmYxXzgxOTFudSA9IDB4MDA3OWViNmU7CisJCQluc19jb2VmZjFfODE5Mm51ID0gMHgwMDc5ZTc5ZTsKKwkJCW5zX2NvZWZmMV84MTkzbnUgPSAweDAwNzllM2NmOworCQkJbnNfY29lZmYyXzJrICAgICA9IDB4MDBmM2NmM2Q7CisJCQluc19jb2VmZjJfOGsgICAgID0gMHgwMDNjZjNjZjsKKwkJCWJyZWFrOworCQljYXNlIEJBTkRXSURUSF83X01IWjoKKwkJCW5zX2NvZWZmMV8yMDQ4bnUgPSAweDAyMzhlMzhlOworCQkJbnNfY29lZmYxXzgxOTFudSA9IDB4MDA4ZTNkNTU7CisJCQluc19jb2VmZjFfODE5Mm51ID0gMHgwMDhlMzhlNDsKKwkJCW5zX2NvZWZmMV84MTkzbnUgPSAweDAwOGUzNDcyOworCQkJbnNfY29lZmYyXzJrICAgICA9IDB4MDExYzcxYzc7CisJCQluc19jb2VmZjJfOGsgICAgID0gMHgwMDQ3MWM3MjsKKwkJCWJyZWFrOworCQljYXNlIEJBTkRXSURUSF84X01IWjoKKwkJCW5zX2NvZWZmMV8yMDQ4bnUgPSAweDAyOGEyOGEzOworCQkJbnNfY29lZmYxXzgxOTFudSA9IDB4MDBhMjhmM2Q7CisJCQluc19jb2VmZjFfODE5Mm51ID0gMHgwMGEyOGEyOTsKKwkJCW5zX2NvZWZmMV84MTkzbnUgPSAweDAwYTI4NTE0OworCQkJbnNfY29lZmYyXzJrICAgICA9IDB4MDE0NTE0NTE7CisJCQluc19jb2VmZjJfOGsgICAgID0gMHgwMDUxNDUxNDsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcmV0ID0gLUVJTlZBTDsKKwkJfQorCQlicmVhazsKKwljYXNlIDIwNDgwOiAvKiAyMC40ODAgTUh6ICovCisJCXN3aXRjaCAoYncpIHsKKwkJY2FzZSBCQU5EV0lEVEhfNl9NSFo6CisJCQluc19jb2VmZjFfMjA0OG51ID0gMHgwMmFkYjZkYzsKKwkJCW5zX2NvZWZmMV84MTkxbnUgPSAweDAwYWI3MzEzOworCQkJbnNfY29lZmYxXzgxOTJudSA9IDB4MDBhYjZkYjc7CisJCQluc19jb2VmZjFfODE5M251ID0gMHgwMGFiNjg1YzsKKwkJCW5zX2NvZWZmMl8yayAgICAgPSAweDAxNTZkYjZlOworCQkJbnNfY29lZmYyXzhrICAgICA9IDB4MDA1NWI2ZGM7CisJCQlicmVhazsKKwkJY2FzZSBCQU5EV0lEVEhfN19NSFo6CisJCQluc19jb2VmZjFfMjA0OG51ID0gMHgwMzIwMDAwMTsKKwkJCW5zX2NvZWZmMV84MTkxbnUgPSAweDAwYzgwNjQwOworCQkJbnNfY29lZmYxXzgxOTJudSA9IDB4MDBjODAwMDA7CisJCQluc19jb2VmZjFfODE5M251ID0gMHgwMGM3ZjljMDsKKwkJCW5zX2NvZWZmMl8yayAgICAgPSAweDAxOTAwMDAwOworCQkJbnNfY29lZmYyXzhrICAgICA9IDB4MDA2NDAwMDA7CisJCQlicmVhazsKKwkJY2FzZSBCQU5EV0lEVEhfOF9NSFo6CisJCQluc19jb2VmZjFfMjA0OG51ID0gMHgwMzkyNDkyNjsKKwkJCW5zX2NvZWZmMV84MTkxbnUgPSAweDAwZTQ5OTZlOworCQkJbnNfY29lZmYxXzgxOTJudSA9IDB4MDBlNDkyNDk7CisJCQluc19jb2VmZjFfODE5M251ID0gMHgwMGU0OGIyNTsKKwkJCW5zX2NvZWZmMl8yayAgICAgPSAweDAxYzkyNDkzOworCQkJbnNfY29lZmYyXzhrICAgICA9IDB4MDA3MjQ5MjU7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXJldCA9IC1FSU5WQUw7CisJCX0KKwkJYnJlYWs7CisJY2FzZSAyODAwMDogLyogMjguMDAwIE1IeiAqLworCQlzd2l0Y2ggKGJ3KSB7CisJCWNhc2UgQkFORFdJRFRIXzZfTUhaOgorCQkJbnNfY29lZmYxXzIwNDhudSA9IDB4MDFmNThkMTA7CisJCQluc19jb2VmZjFfODE5MW51ID0gMHgwMDdkNjcyZjsKKwkJCW5zX2NvZWZmMV84MTkybnUgPSAweDAwN2Q2MzQ0OworCQkJbnNfY29lZmYxXzgxOTNudSA9IDB4MDA3ZDVmNTk7CisJCQluc19jb2VmZjJfMmsgICAgID0gMHgwMGZhYzY4ODsKKwkJCW5zX2NvZWZmMl84ayAgICAgPSAweDAwM2ViMWEyOworCQkJYnJlYWs7CisJCWNhc2UgQkFORFdJRFRIXzdfTUhaOgorCQkJbnNfY29lZmYxXzIwNDhudSA9IDB4MDI0OTI0OTI7CisJCQluc19jb2VmZjFfODE5MW51ID0gMHgwMDkyNGRiNzsKKwkJCW5zX2NvZWZmMV84MTkybnUgPSAweDAwOTI0OTI1OworCQkJbnNfY29lZmYxXzgxOTNudSA9IDB4MDA5MjQ0OTI7CisJCQluc19jb2VmZjJfMmsgICAgID0gMHgwMTI0OTI0OTsKKwkJCW5zX2NvZWZmMl84ayAgICAgPSAweDAwNDkyNDkyOworCQkJYnJlYWs7CisJCWNhc2UgQkFORFdJRFRIXzhfTUhaOgorCQkJbnNfY29lZmYxXzIwNDhudSA9IDB4MDI5Y2JjMTU7CisJCQluc19jb2VmZjFfODE5MW51ID0gMHgwMGE3MzQzZjsKKwkJCW5zX2NvZWZmMV84MTkybnUgPSAweDAwYTcyZjA1OworCQkJbnNfY29lZmYxXzgxOTNudSA9IDB4MDBhNzI5Y2M7CisJCQluc19jb2VmZjJfMmsgICAgID0gMHgwMTRlNWUwYTsKKwkJCW5zX2NvZWZmMl84ayAgICAgPSAweDAwNTM5NzgzOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlyZXQgPSAtRUlOVkFMOworCQl9CisJCWJyZWFrOworCWNhc2UgMjUwMDA6IC8qIDI1LjAwMCBNSHogKi8KKwkJc3dpdGNoIChidykgeworCQljYXNlIEJBTkRXSURUSF82X01IWjoKKwkJCW5zX2NvZWZmMV8yMDQ4bnUgPSAweDAyMzFiY2I1OworCQkJbnNfY29lZmYxXzgxOTFudSA9IDB4MDA4YzczOTE7CisJCQluc19jb2VmZjFfODE5Mm51ID0gMHgwMDhjNmYyZDsKKwkJCW5zX2NvZWZmMV84MTkzbnUgPSAweDAwOGM2YWNhOworCQkJbnNfY29lZmYyXzJrICAgICA9IDB4MDExOGRlNWI7CisJCQluc19jb2VmZjJfOGsgICAgID0gMHgwMDQ2Mzc5NzsKKwkJCWJyZWFrOworCQljYXNlIEJBTkRXSURUSF83X01IWjoKKwkJCW5zX2NvZWZmMV8yMDQ4bnUgPSAweDAyOGY1YzI5OworCQkJbnNfY29lZmYxXzgxOTFudSA9IDB4MDBhM2RjMjk7CisJCQluc19jb2VmZjFfODE5Mm51ID0gMHgwMGEzZDcwYTsKKwkJCW5zX2NvZWZmMV84MTkzbnUgPSAweDAwYTNkMWVjOworCQkJbnNfY29lZmYyXzJrICAgICA9IDB4MDE0N2FlMTQ7CisJCQluc19jb2VmZjJfOGsgICAgID0gMHgwMDUxZWI4NTsKKwkJCWJyZWFrOworCQljYXNlIEJBTkRXSURUSF84X01IWjoKKwkJCW5zX2NvZWZmMV8yMDQ4bnUgPSAweDAyZWNmYjlkOworCQkJbnNfY29lZmYxXzgxOTFudSA9IDB4MDBiYjQ0YzE7CisJCQluc19jb2VmZjFfODE5Mm51ID0gMHgwMGJiM2VlNzsKKwkJCW5zX2NvZWZmMV84MTkzbnUgPSAweDAwYmIzOTBkOworCQkJbnNfY29lZmYyXzJrICAgICA9IDB4MDE3NjdkY2U7CisJCQluc19jb2VmZjJfOGsgICAgID0gMHgwMDVkOWY3NDsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcmV0ID0gLUVJTlZBTDsKKwkJfQorCQlicmVhazsKKwlkZWZhdWx0OgorCQllcnIoImludmFsaWQgeHRhbCIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJaWYgKHJldCkgeworCQllcnIoImludmFsaWQgYmFuZHdpZHRoIik7CisJCXJldHVybiByZXQ7CisJfQorCisJYnVmW2krK10gPSAodTgpICgobnNfY29lZmYxXzIwNDhudSAmIDB4MDMwMDAwMDApID4+IDI0KTsKKwlidWZbaSsrXSA9ICh1OCkgKChuc19jb2VmZjFfMjA0OG51ICYgMHgwMGZmMDAwMCkgPj4gMTYpOworCWJ1ZltpKytdID0gKHU4KSAoKG5zX2NvZWZmMV8yMDQ4bnUgJiAweDAwMDBmZjAwKSA+PiA4KTsKKwlidWZbaSsrXSA9ICh1OCkgKChuc19jb2VmZjFfMjA0OG51ICYgMHgwMDAwMDBmZikpOworCWJ1ZltpKytdID0gKHU4KSAoKG5zX2NvZWZmMl8yayAgICAgJiAweDAxYzAwMDAwKSA+PiAyMik7CisJYnVmW2krK10gPSAodTgpICgobnNfY29lZmYyXzJrICAgICAmIDB4MDAzZmMwMDApID4+IDE0KTsKKwlidWZbaSsrXSA9ICh1OCkgKChuc19jb2VmZjJfMmsgICAgICYgMHgwMDAwM2ZjMCkgPj4gNik7CisJYnVmW2krK10gPSAodTgpICgobnNfY29lZmYyXzJrICAgICAmIDB4MDAwMDAwM2YpKTsKKwlidWZbaSsrXSA9ICh1OCkgKChuc19jb2VmZjFfODE5MW51ICYgMHgwMzAwMDAwMCkgPj4gMjQpOworCWJ1ZltpKytdID0gKHU4KSAoKG5zX2NvZWZmMV84MTkxbnUgJiAweDAwZmZjMDAwKSA+PiAxNik7CisJYnVmW2krK10gPSAodTgpICgobnNfY29lZmYxXzgxOTFudSAmIDB4MDAwMGZmMDApID4+IDgpOworCWJ1ZltpKytdID0gKHU4KSAoKG5zX2NvZWZmMV84MTkxbnUgJiAweDAwMDAwMGZmKSk7CisJYnVmW2krK10gPSAodTgpICgobnNfY29lZmYxXzgxOTJudSAmIDB4MDMwMDAwMDApID4+IDI0KTsKKwlidWZbaSsrXSA9ICh1OCkgKChuc19jb2VmZjFfODE5Mm51ICYgMHgwMGZmYzAwMCkgPj4gMTYpOworCWJ1ZltpKytdID0gKHU4KSAoKG5zX2NvZWZmMV84MTkybnUgJiAweDAwMDBmZjAwKSA+PiA4KTsKKwlidWZbaSsrXSA9ICh1OCkgKChuc19jb2VmZjFfODE5Mm51ICYgMHgwMDAwMDBmZikpOworCWJ1ZltpKytdID0gKHU4KSAoKG5zX2NvZWZmMV84MTkzbnUgJiAweDAzMDAwMDAwKSA+PiAyNCk7CisJYnVmW2krK10gPSAodTgpICgobnNfY29lZmYxXzgxOTNudSAmIDB4MDBmZmMwMDApID4+IDE2KTsKKwlidWZbaSsrXSA9ICh1OCkgKChuc19jb2VmZjFfODE5M251ICYgMHgwMDAwZmYwMCkgPj4gOCk7CisJYnVmW2krK10gPSAodTgpICgobnNfY29lZmYxXzgxOTNudSAmIDB4MDAwMDAwZmYpKTsKKwlidWZbaSsrXSA9ICh1OCkgKChuc19jb2VmZjJfOGsgICAgICYgMHgwMWMwMDAwMCkgPj4gMjIpOworCWJ1ZltpKytdID0gKHU4KSAoKG5zX2NvZWZmMl84ayAgICAgJiAweDAwM2ZjMDAwKSA+PiAxNCk7CisJYnVmW2krK10gPSAodTgpICgobnNfY29lZmYyXzhrICAgICAmIDB4MDAwMDNmYzApID4+IDYpOworCWJ1ZltpKytdID0gKHU4KSAoKG5zX2NvZWZmMl84ayAgICAgJiAweDAwMDAwMDNmKSk7CisKKwlkZWJfaW5mbygiJXM6IGNvZWZmOiIsIF9fZnVuY19fKTsKKwlkZWJ1Z19kdW1wKGJ1Ziwgc2l6ZW9mKGJ1ZiksIGRlYl9pbmZvKTsKKworCS8qIHByb2dyYW0gKi8KKwlmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKGJ1Zik7IGkrKykgeworCQlyZXQgPSBhZjkwMTNfd3JpdGVfcmVnKHN0YXRlLCAweGFlMDAgKyBpLCBidWZbaV0pOworCQlpZiAocmV0KQorCQkJYnJlYWs7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBhZjkwMTNfc2V0X2FkY19jdHJsKHN0cnVjdCBhZjkwMTNfc3RhdGUgKnN0YXRlKQoreworCWludCByZXQ7CisJdTggYnVmWzNdLCB0bXAsIGk7CisJdTMyIGFkY19jdzsKKworCWRlYl9pbmZvKCIlczogYWRjX2Nsb2NrOiVkXG4iLCBfX2Z1bmNfXywgc3RhdGUtPmNvbmZpZy5hZGNfY2xvY2spOworCisJLyogYWRjIGZyZXF1ZW5jeSB0eXBlICovCisJc3dpdGNoIChzdGF0ZS0+Y29uZmlnLmFkY19jbG9jaykgeworCWNhc2UgMjg4MDA6IC8qIDI4LjgwMCBNSHogKi8KKwkJdG1wID0gMDsKKwkJYnJlYWs7CisJY2FzZSAyMDQ4MDogLyogMjAuNDgwIE1IeiAqLworCQl0bXAgPSAxOworCQlicmVhazsKKwljYXNlIDI4MDAwOiAvKiAyOC4wMDAgTUh6ICovCisJCXRtcCA9IDI7CisJCWJyZWFrOworCWNhc2UgMjUwMDA6IC8qIDI1LjAwMCBNSHogKi8KKwkJdG1wID0gMzsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZXJyKCJpbnZhbGlkIHh0YWwiKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJYWRjX2N3ID0gYWY5MTNfZGl2KHN0YXRlLT5jb25maWcuYWRjX2Nsb2NrKjEwMDAsIDEwMDAwMDB1bCwgMTl1bCk7CisKKwlidWZbMF0gPSAodTgpICgoYWRjX2N3ICYgMHgwMDAwMDBmZikpOworCWJ1ZlsxXSA9ICh1OCkgKChhZGNfY3cgJiAweDAwMDBmZjAwKSA+PiA4KTsKKwlidWZbMl0gPSAodTgpICgoYWRjX2N3ICYgMHgwMGZmMDAwMCkgPj4gMTYpOworCisJZGViX2luZm8oIiVzOiBhZGNfY3c6IiwgX19mdW5jX18pOworCWRlYnVnX2R1bXAoYnVmLCBzaXplb2YoYnVmKSwgZGViX2luZm8pOworCisJLyogcHJvZ3JhbSAqLworCWZvciAoaSA9IDA7IGkgPCBzaXplb2YoYnVmKTsgaSsrKSB7CisJCXJldCA9IGFmOTAxM193cml0ZV9yZWcoc3RhdGUsIDB4ZDE4MCArIGksIGJ1ZltpXSk7CisJCWlmIChyZXQpCisJCQlnb3RvIGVycm9yOworCX0KKwlyZXQgPSBhZjkwMTNfd3JpdGVfcmVnX2JpdHMoc3RhdGUsIDB4OWJkMiwgMCwgNCwgdG1wKTsKK2Vycm9yOgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgYWY5MDEzX3NldF9mcmVxX2N0cmwoc3RydWN0IGFmOTAxM19zdGF0ZSAqc3RhdGUsIGZlX2JhbmR3aWR0aF90IGJ3KQoreworCWludCByZXQ7CisJdTE2IGFkZHI7CisJdTggYnVmWzNdLCBpLCBqOworCXUzMiBhZGNfZnJlcSwgZnJlcV9jdzsKKwlzOCBiZnNfc3BlY19pbnY7CisJaW50IGlmX3NhbXBsZV9mcmVxOworCisJZm9yIChqID0gMDsgaiA8IDM7IGorKykgeworCQlpZiAoaiA9PSAwKSB7CisJCQlhZGRyID0gMHhkMTQwOyAvKiBmY3cgbm9ybWFsICovCisJCQliZnNfc3BlY19pbnYgPSBzdGF0ZS0+Y29uZmlnLnJmX3NwZWNfaW52ID8gLTEgOiAxOworCQl9IGVsc2UgaWYgKGogPT0gMSkgeworCQkJYWRkciA9IDB4OWJlNzsgLyogZmN3IGR1bW15IHJhbSAqLworCQkJYmZzX3NwZWNfaW52ID0gc3RhdGUtPmNvbmZpZy5yZl9zcGVjX2ludiA/IC0xIDogMTsKKwkJfSBlbHNlIHsKKwkJCWFkZHIgPSAweDliZWE7IC8qIGZjdyBpbnZlcnRlZCAqLworCQkJYmZzX3NwZWNfaW52ID0gc3RhdGUtPmNvbmZpZy5yZl9zcGVjX2ludiA/IDEgOiAtMTsKKwkJfQorCisJCWFkY19mcmVxICAgICAgID0gc3RhdGUtPmNvbmZpZy5hZGNfY2xvY2sgKiAxMDAwOworCQlpZl9zYW1wbGVfZnJlcSA9IHN0YXRlLT5jb25maWcudHVuZXJfaWYgKiAxMDAwOworCisJCS8qIFREQTE4MjcxIHVzZXMgZGlmZmVyZW50IHNhbXBsaW5nIGZyZXEgZm9yIGV2ZXJ5IGJ3ICovCisJCWlmIChzdGF0ZS0+Y29uZmlnLnR1bmVyID09IEFGOTAxM19UVU5FUl9UREExODI3MSkgeworCQkJc3dpdGNoIChidykgeworCQkJY2FzZSBCQU5EV0lEVEhfNl9NSFo6CisJCQkJaWZfc2FtcGxlX2ZyZXEgPSAzMzAwMDAwOyAvKiAzLjMgTUh6ICovCisJCQkJYnJlYWs7CisJCQljYXNlIEJBTkRXSURUSF83X01IWjoKKwkJCQlpZl9zYW1wbGVfZnJlcSA9IDM4MDAwMDA7IC8qIDMuOCBNSHogKi8KKwkJCQlicmVhazsKKwkJCWNhc2UgQkFORFdJRFRIXzhfTUhaOgorCQkJZGVmYXVsdDoKKwkJCQlpZl9zYW1wbGVfZnJlcSA9IDQzMDAwMDA7IC8qIDQuMyBNSHogKi8KKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCisJCXdoaWxlIChpZl9zYW1wbGVfZnJlcSA+IChhZGNfZnJlcSAvIDIpKQorCQkJaWZfc2FtcGxlX2ZyZXEgPSBpZl9zYW1wbGVfZnJlcSAtIGFkY19mcmVxOworCisJCWlmIChpZl9zYW1wbGVfZnJlcSA+PSAwKQorCQkJYmZzX3NwZWNfaW52ID0gYmZzX3NwZWNfaW52ICogKC0xKTsKKwkJZWxzZQorCQkJaWZfc2FtcGxlX2ZyZXEgPSBpZl9zYW1wbGVfZnJlcSAqICgtMSk7CisKKwkJZnJlcV9jdyA9IGFmOTEzX2RpdihpZl9zYW1wbGVfZnJlcSwgYWRjX2ZyZXEsIDIzdWwpOworCisJCWlmIChiZnNfc3BlY19pbnYgPT0gLTEpCisJCQlmcmVxX2N3ID0gMHgwMDgwMDAwMCAtIGZyZXFfY3c7CisKKwkJYnVmWzBdID0gKHU4KSAoKGZyZXFfY3cgJiAweDAwMDAwMGZmKSk7CisJCWJ1ZlsxXSA9ICh1OCkgKChmcmVxX2N3ICYgMHgwMDAwZmYwMCkgPj4gOCk7CisJCWJ1ZlsyXSA9ICh1OCkgKChmcmVxX2N3ICYgMHgwMDdmMDAwMCkgPj4gMTYpOworCisKKwkJZGViX2luZm8oIiVzOiBmcmVxX2N3OiIsIF9fZnVuY19fKTsKKwkJZGVidWdfZHVtcChidWYsIHNpemVvZihidWYpLCBkZWJfaW5mbyk7CisKKwkJLyogcHJvZ3JhbSAqLworCQlmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKGJ1Zik7IGkrKykgeworCQkJcmV0ID0gYWY5MDEzX3dyaXRlX3JlZyhzdGF0ZSwgYWRkcisrLCBidWZbaV0pOworCQkJaWYgKHJldCkKKwkJCQlnb3RvIGVycm9yOworCQl9CisJfQorZXJyb3I6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBhZjkwMTNfc2V0X29mZG1fcGFyYW1zKHN0cnVjdCBhZjkwMTNfc3RhdGUgKnN0YXRlLAorCXN0cnVjdCBkdmJfb2ZkbV9wYXJhbWV0ZXJzICpwYXJhbXMsIHU4ICphdXRvX21vZGUpCit7CisJaW50IHJldDsKKwl1OCBpLCBidWZbM10gPSB7MCwgMCwgMH07CisJKmF1dG9fbW9kZSA9IDA7IC8qIHNldCBpZiBwYXJhbWV0ZXJzIGFyZSByZXF1ZXN0ZWQgdG8gYXV0byBzZXQgKi8KKworCXN3aXRjaCAocGFyYW1zLT50cmFuc21pc3Npb25fbW9kZSkgeworCWNhc2UgVFJBTlNNSVNTSU9OX01PREVfQVVUTzoKKwkJKmF1dG9fbW9kZSA9IDE7CisJY2FzZSBUUkFOU01JU1NJT05fTU9ERV8ySzoKKwkJYnJlYWs7CisJY2FzZSBUUkFOU01JU1NJT05fTU9ERV84SzoKKwkJYnVmWzBdIHw9ICgxIDw8IDApOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlzd2l0Y2ggKHBhcmFtcy0+Z3VhcmRfaW50ZXJ2YWwpIHsKKwljYXNlIEdVQVJEX0lOVEVSVkFMX0FVVE86CisJCSphdXRvX21vZGUgPSAxOworCWNhc2UgR1VBUkRfSU5URVJWQUxfMV8zMjoKKwkJYnJlYWs7CisJY2FzZSBHVUFSRF9JTlRFUlZBTF8xXzE2OgorCQlidWZbMF0gfD0gKDEgPDwgMik7CisJCWJyZWFrOworCWNhc2UgR1VBUkRfSU5URVJWQUxfMV84OgorCQlidWZbMF0gfD0gKDIgPDwgMik7CisJCWJyZWFrOworCWNhc2UgR1VBUkRfSU5URVJWQUxfMV80OgorCQlidWZbMF0gfD0gKDMgPDwgMik7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXN3aXRjaCAocGFyYW1zLT5oaWVyYXJjaHlfaW5mb3JtYXRpb24pIHsKKwljYXNlIEhJRVJBUkNIWV9BVVRPOgorCQkqYXV0b19tb2RlID0gMTsKKwljYXNlIEhJRVJBUkNIWV9OT05FOgorCQlicmVhazsKKwljYXNlIEhJRVJBUkNIWV8xOgorCQlidWZbMF0gfD0gKDEgPDwgNCk7CisJCWJyZWFrOworCWNhc2UgSElFUkFSQ0hZXzI6CisJCWJ1ZlswXSB8PSAoMiA8PCA0KTsKKwkJYnJlYWs7CisJY2FzZSBISUVSQVJDSFlfNDoKKwkJYnVmWzBdIHw9ICgzIDw8IDQpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9OworCisJc3dpdGNoIChwYXJhbXMtPmNvbnN0ZWxsYXRpb24pIHsKKwljYXNlIFFBTV9BVVRPOgorCQkqYXV0b19tb2RlID0gMTsKKwljYXNlIFFQU0s6CisJCWJyZWFrOworCWNhc2UgUUFNXzE2OgorCQlidWZbMV0gfD0gKDEgPDwgNik7CisJCWJyZWFrOworCWNhc2UgUUFNXzY0OgorCQlidWZbMV0gfD0gKDIgPDwgNik7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qIFVzZSBIUC4gSG93IGFuZCB3aGljaCBjYXNlIHdlIGNhbiBzd2l0Y2ggdG8gTFA/ICovCisJYnVmWzFdIHw9ICgxIDw8IDQpOworCisJc3dpdGNoIChwYXJhbXMtPmNvZGVfcmF0ZV9IUCkgeworCWNhc2UgRkVDX0FVVE86CisJCSphdXRvX21vZGUgPSAxOworCWNhc2UgRkVDXzFfMjoKKwkJYnJlYWs7CisJY2FzZSBGRUNfMl8zOgorCQlidWZbMl0gfD0gKDEgPDwgMCk7CisJCWJyZWFrOworCWNhc2UgRkVDXzNfNDoKKwkJYnVmWzJdIHw9ICgyIDw8IDApOworCQlicmVhazsKKwljYXNlIEZFQ181XzY6CisJCWJ1ZlsyXSB8PSAoMyA8PCAwKTsKKwkJYnJlYWs7CisJY2FzZSBGRUNfN184OgorCQlidWZbMl0gfD0gKDQgPDwgMCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXN3aXRjaCAocGFyYW1zLT5jb2RlX3JhdGVfTFApIHsKKwljYXNlIEZFQ19BVVRPOgorCS8qIGlmIEhJRVJBUkNIWV9OT05FIGFuZCBGRUNfTk9ORSB0aGVuIExQIEZFQyBpcyBzZXQgdG8gRkVDX0FVVE8KKwkgICBieSBkdmJfZnJvbnRlbmQuYyBmb3IgY29tcGF0aWJpbGl0eSAqLworCQlpZiAocGFyYW1zLT5oaWVyYXJjaHlfaW5mb3JtYXRpb24gIT0gSElFUkFSQ0hZX05PTkUpCisJCQkqYXV0b19tb2RlID0gMTsKKwljYXNlIEZFQ18xXzI6CisJCWJyZWFrOworCWNhc2UgRkVDXzJfMzoKKwkJYnVmWzJdIHw9ICgxIDw8IDMpOworCQlicmVhazsKKwljYXNlIEZFQ18zXzQ6CisJCWJ1ZlsyXSB8PSAoMiA8PCAzKTsKKwkJYnJlYWs7CisJY2FzZSBGRUNfNV82OgorCQlidWZbMl0gfD0gKDMgPDwgMyk7CisJCWJyZWFrOworCWNhc2UgRkVDXzdfODoKKwkJYnVmWzJdIHw9ICg0IDw8IDMpOworCQlicmVhazsKKwljYXNlIEZFQ19OT05FOgorCQlpZiAocGFyYW1zLT5oaWVyYXJjaHlfaW5mb3JtYXRpb24gPT0gSElFUkFSQ0hZX0FVVE8pCisJCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlzd2l0Y2ggKHBhcmFtcy0+YmFuZHdpZHRoKSB7CisJY2FzZSBCQU5EV0lEVEhfNl9NSFo6CisJCWJyZWFrOworCWNhc2UgQkFORFdJRFRIXzdfTUhaOgorCQlidWZbMV0gfD0gKDEgPDwgMik7CisJCWJyZWFrOworCWNhc2UgQkFORFdJRFRIXzhfTUhaOgorCQlidWZbMV0gfD0gKDIgPDwgMik7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qIHByb2dyYW0gKi8KKwlmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKGJ1Zik7IGkrKykgeworCQlyZXQgPSBhZjkwMTNfd3JpdGVfcmVnKHN0YXRlLCAweGQzYzAgKyBpLCBidWZbaV0pOworCQlpZiAocmV0KQorCQkJYnJlYWs7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBhZjkwMTNfcmVzZXQoc3RydWN0IGFmOTAxM19zdGF0ZSAqc3RhdGUsIHU4IHNsZWVwKQoreworCWludCByZXQ7CisJdTggdG1wLCBpOworCWRlYl9pbmZvKCIlc1xuIiwgX19mdW5jX18pOworCisJLyogZW5hYmxlIE9GRE0gcmVzZXQgKi8KKwlyZXQgPSBhZjkwMTNfd3JpdGVfcmVnX2JpdHMoc3RhdGUsIDB4ZDQxNywgNCwgMSwgMSk7CisJaWYgKHJldCkKKwkJZ290byBlcnJvcjsKKworCS8qIHN0YXJ0IHJlc2V0IG1lY2hhbmlzbSAqLworCXJldCA9IGFmOTAxM193cml0ZV9yZWcoc3RhdGUsIDB4YWVmZiwgMSk7CisJaWYgKHJldCkKKwkJZ290byBlcnJvcjsKKworCS8qIHJlc2V0IGlzIGRvbmUgd2hlbiBiaXQgMSBpcyBzZXQgKi8KKwlmb3IgKGkgPSAwOyBpIDwgMTUwOyBpKyspIHsKKwkJcmV0ID0gYWY5MDEzX3JlYWRfcmVnX2JpdHMoc3RhdGUsIDB4ZDQxNywgMSwgMSwgJnRtcCk7CisJCWlmIChyZXQpCisJCQlnb3RvIGVycm9yOworCQlpZiAodG1wKQorCQkJYnJlYWs7IC8qIHJlc2V0IGRvbmUgKi8KKwkJbXNsZWVwKDEwKTsKKwl9CisJaWYgKCF0bXApCisJCXJldHVybiAtRVRJTUVET1VUOworCisJLyogZG9uJ3QgY2xlYXIgcmVzZXQgd2hlbiBnb2luZyB0byBzbGVlcCAqLworCWlmICghc2xlZXApIHsKKwkJLyogY2xlYXIgT0ZETSByZXNldCAqLworCQlyZXQgPSBhZjkwMTNfd3JpdGVfcmVnX2JpdHMoc3RhdGUsIDB4ZDQxNywgMSwgMSwgMCk7CisJCWlmIChyZXQpCisJCQlnb3RvIGVycm9yOworCisJCS8qIGRpc2FibGUgT0ZETSByZXNldCAqLworCQlyZXQgPSBhZjkwMTNfd3JpdGVfcmVnX2JpdHMoc3RhdGUsIDB4ZDQxNywgNCwgMSwgMCk7CisJfQorZXJyb3I6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBhZjkwMTNfcG93ZXJfY3RybChzdHJ1Y3QgYWY5MDEzX3N0YXRlICpzdGF0ZSwgdTggb25vZmYpCit7CisJaW50IHJldDsKKwlkZWJfaW5mbygiJXM6IG9ub2ZmOiVkXG4iLCBfX2Z1bmNfXywgb25vZmYpOworCisJaWYgKG9ub2ZmKSB7CisJCS8qIHBvd2VyIG9uICovCisJCXJldCA9IGFmOTAxM193cml0ZV9yZWdfYml0cyhzdGF0ZSwgMHhkNzNhLCAzLCAxLCAwKTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gZXJyb3I7CisJCXJldCA9IGFmOTAxM193cml0ZV9yZWdfYml0cyhzdGF0ZSwgMHhkNDE3LCAxLCAxLCAwKTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gZXJyb3I7CisJCXJldCA9IGFmOTAxM193cml0ZV9yZWdfYml0cyhzdGF0ZSwgMHhkNDE3LCA0LCAxLCAwKTsKKwl9IGVsc2UgeworCQkvKiBwb3dlciBvZmYgKi8KKwkJcmV0ID0gYWY5MDEzX3Jlc2V0KHN0YXRlLCAxKTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gZXJyb3I7CisJCXJldCA9IGFmOTAxM193cml0ZV9yZWdfYml0cyhzdGF0ZSwgMHhkNzNhLCAzLCAxLCAxKTsKKwl9CitlcnJvcjoKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGFmOTAxM19sb2NrX2xlZChzdHJ1Y3QgYWY5MDEzX3N0YXRlICpzdGF0ZSwgdTggb25vZmYpCit7CisJZGViX2luZm8oIiVzOiBvbm9mZjolZFxuIiwgX19mdW5jX18sIG9ub2ZmKTsKKworCXJldHVybiBhZjkwMTNfd3JpdGVfcmVnX2JpdHMoc3RhdGUsIDB4ZDczMCwgMCwgMSwgb25vZmYpOworfQorCitzdGF0aWMgaW50IGFmOTAxM19zZXRfZnJvbnRlbmQoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsCisJc3RydWN0IGR2Yl9mcm9udGVuZF9wYXJhbWV0ZXJzICpwYXJhbXMpCit7CisJc3RydWN0IGFmOTAxM19zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKwlpbnQgcmV0OworCXU4IGF1dG9fbW9kZTsgLyogYXV0byBzZXQgVFBTICovCisKKwlkZWJfaW5mbygiJXM6IGZyZXE6JWQgYnc6JWRcbiIsIF9fZnVuY19fLCBwYXJhbXMtPmZyZXF1ZW5jeSwKKwkJcGFyYW1zLT51Lm9mZG0uYmFuZHdpZHRoKTsKKworCXN0YXRlLT5mcmVxdWVuY3kgPSBwYXJhbXMtPmZyZXF1ZW5jeTsKKworCS8qIHByb2dyYW0gQ0ZPRSBjb2VmZmljaWVudHMgKi8KKwlyZXQgPSBhZjkwMTNfc2V0X2NvZWZmKHN0YXRlLCBwYXJhbXMtPnUub2ZkbS5iYW5kd2lkdGgpOworCWlmIChyZXQpCisJCWdvdG8gZXJyb3I7CisKKwkvKiBwcm9ncmFtIGZyZXF1ZW5jeSBjb250cm9sICovCisJcmV0ID0gYWY5MDEzX3NldF9mcmVxX2N0cmwoc3RhdGUsIHBhcmFtcy0+dS5vZmRtLmJhbmR3aWR0aCk7CisJaWYgKHJldCkKKwkJZ290byBlcnJvcjsKKworCS8qIGNsZWFyIFRQUyBsb2NrIGZsYWcgKGludmVydGVkIGZsYWcpICovCisJcmV0ID0gYWY5MDEzX3dyaXRlX3JlZ19iaXRzKHN0YXRlLCAweGQzMzAsIDMsIDEsIDEpOworCWlmIChyZXQpCisJCWdvdG8gZXJyb3I7CisKKwkvKiBjbGVhciBNUEVHMiBsb2NrIGZsYWcgKi8KKwlyZXQgPSBhZjkwMTNfd3JpdGVfcmVnX2JpdHMoc3RhdGUsIDB4ZDUwNywgNiwgMSwgMCk7CisJaWYgKHJldCkKKwkJZ290byBlcnJvcjsKKworCS8qIGVtcHR5IGNoYW5uZWwgZnVuY3Rpb24gKi8KKwlyZXQgPSBhZjkwMTNfd3JpdGVfcmVnX2JpdHMoc3RhdGUsIDB4OWJmZSwgMCwgMSwgMCk7CisJaWYgKHJldCkKKwkJZ290byBlcnJvcjsKKworCS8qIGVtcHR5IERWQi1UIGNoYW5uZWwgZnVuY3Rpb24gKi8KKwlyZXQgPSBhZjkwMTNfd3JpdGVfcmVnX2JpdHMoc3RhdGUsIDB4OWJjMiwgMCwgMSwgMCk7CisJaWYgKHJldCkKKwkJZ290byBlcnJvcjsKKworCS8qIHByb2dyYW0gdHVuZXIgKi8KKwlpZiAoZmUtPm9wcy50dW5lcl9vcHMuc2V0X3BhcmFtcykKKwkJZmUtPm9wcy50dW5lcl9vcHMuc2V0X3BhcmFtcyhmZSwgcGFyYW1zKTsKKworCS8qIHByb2dyYW0gVFBTIGFuZCBiYW5kd2lkdGgsIGNoZWNrIGlmIGF1dG8gbW9kZSBuZWVkZWQgKi8KKwlyZXQgPSBhZjkwMTNfc2V0X29mZG1fcGFyYW1zKHN0YXRlLCAmcGFyYW1zLT51Lm9mZG0sICZhdXRvX21vZGUpOworCWlmIChyZXQpCisJCWdvdG8gZXJyb3I7CisKKwlpZiAoYXV0b19tb2RlKSB7CisJCS8qIGNsZWFyIGVhc3kgbW9kZSBmbGFnICovCisJCXJldCA9IGFmOTAxM193cml0ZV9yZWcoc3RhdGUsIDB4YWVmZCwgMCk7CisJCWRlYl9pbmZvKCIlczogYXV0byBUUFNcbiIsIF9fZnVuY19fKTsKKwl9IGVsc2UgeworCQkvKiBzZXQgZWFzeSBtb2RlIGZsYWcgKi8KKwkJcmV0ID0gYWY5MDEzX3dyaXRlX3JlZyhzdGF0ZSwgMHhhZWZkLCAxKTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gZXJyb3I7CisJCXJldCA9IGFmOTAxM193cml0ZV9yZWcoc3RhdGUsIDB4YWVmZSwgMCk7CisJCWRlYl9pbmZvKCIlczogbWFudWFsIFRQU1xuIiwgX19mdW5jX18pOworCX0KKwlpZiAocmV0KQorCQlnb3RvIGVycm9yOworCisJLyogZXZlcnl0aGluZyBpcyBzZXQsIGxldHMgdHJ5IHRvIHJlY2VpdmUgY2hhbm5lbCAtIE9GU00gR08hICovCisJcmV0ID0gYWY5MDEzX3dyaXRlX3JlZyhzdGF0ZSwgMHhmZmZmLCAwKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycm9yOworCitlcnJvcjoKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGFmOTAxM19nZXRfZnJvbnRlbmQoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsCisJc3RydWN0IGR2Yl9mcm9udGVuZF9wYXJhbWV0ZXJzICpwKQoreworCXN0cnVjdCBhZjkwMTNfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisJaW50IHJldDsKKwl1OCBpLCBidWZbM107CisJZGViX2luZm8oIiVzXG4iLCBfX2Z1bmNfXyk7CisKKwkvKiByZWFkIFRQUyByZWdpc3RlcnMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKSB7CisJCXJldCA9IGFmOTAxM19yZWFkX3JlZyhzdGF0ZSwgMHhkM2MwICsgaSwgJmJ1ZltpXSk7CisJCWlmIChyZXQpCisJCQlnb3RvIGVycm9yOworCX0KKworCXN3aXRjaCAoKGJ1ZlsxXSA+PiA2KSAmIDMpIHsKKwljYXNlIDA6CisJCXAtPnUub2ZkbS5jb25zdGVsbGF0aW9uID0gUVBTSzsKKwkJYnJlYWs7CisJY2FzZSAxOgorCQlwLT51Lm9mZG0uY29uc3RlbGxhdGlvbiA9IFFBTV8xNjsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQlwLT51Lm9mZG0uY29uc3RlbGxhdGlvbiA9IFFBTV82NDsKKwkJYnJlYWs7CisJfQorCisJc3dpdGNoICgoYnVmWzBdID4+IDApICYgMykgeworCWNhc2UgMDoKKwkJcC0+dS5vZmRtLnRyYW5zbWlzc2lvbl9tb2RlID0gVFJBTlNNSVNTSU9OX01PREVfMks7CisJCWJyZWFrOworCWNhc2UgMToKKwkJcC0+dS5vZmRtLnRyYW5zbWlzc2lvbl9tb2RlID0gVFJBTlNNSVNTSU9OX01PREVfOEs7CisJfQorCisJc3dpdGNoICgoYnVmWzBdID4+IDIpICYgMykgeworCWNhc2UgMDoKKwkJcC0+dS5vZmRtLmd1YXJkX2ludGVydmFsID0gR1VBUkRfSU5URVJWQUxfMV8zMjsKKwkJYnJlYWs7CisJY2FzZSAxOgorCQlwLT51Lm9mZG0uZ3VhcmRfaW50ZXJ2YWwgPSBHVUFSRF9JTlRFUlZBTF8xXzE2OworCQlicmVhazsKKwljYXNlIDI6CisJCXAtPnUub2ZkbS5ndWFyZF9pbnRlcnZhbCA9IEdVQVJEX0lOVEVSVkFMXzFfODsKKwkJYnJlYWs7CisJY2FzZSAzOgorCQlwLT51Lm9mZG0uZ3VhcmRfaW50ZXJ2YWwgPSBHVUFSRF9JTlRFUlZBTF8xXzQ7CisJCWJyZWFrOworCX0KKworCXN3aXRjaCAoKGJ1ZlswXSA+PiA0KSAmIDcpIHsKKwljYXNlIDA6CisJCXAtPnUub2ZkbS5oaWVyYXJjaHlfaW5mb3JtYXRpb24gPSBISUVSQVJDSFlfTk9ORTsKKwkJYnJlYWs7CisJY2FzZSAxOgorCQlwLT51Lm9mZG0uaGllcmFyY2h5X2luZm9ybWF0aW9uID0gSElFUkFSQ0hZXzE7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJcC0+dS5vZmRtLmhpZXJhcmNoeV9pbmZvcm1hdGlvbiA9IEhJRVJBUkNIWV8yOworCQlicmVhazsKKwljYXNlIDM6CisJCXAtPnUub2ZkbS5oaWVyYXJjaHlfaW5mb3JtYXRpb24gPSBISUVSQVJDSFlfNDsKKwkJYnJlYWs7CisJfQorCisJc3dpdGNoICgoYnVmWzJdID4+IDApICYgNykgeworCWNhc2UgMDoKKwkJcC0+dS5vZmRtLmNvZGVfcmF0ZV9IUCA9IEZFQ18xXzI7CisJCWJyZWFrOworCWNhc2UgMToKKwkJcC0+dS5vZmRtLmNvZGVfcmF0ZV9IUCA9IEZFQ18yXzM7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJcC0+dS5vZmRtLmNvZGVfcmF0ZV9IUCA9IEZFQ18zXzQ7CisJCWJyZWFrOworCWNhc2UgMzoKKwkJcC0+dS5vZmRtLmNvZGVfcmF0ZV9IUCA9IEZFQ181XzY7CisJCWJyZWFrOworCWNhc2UgNDoKKwkJcC0+dS5vZmRtLmNvZGVfcmF0ZV9IUCA9IEZFQ183Xzg7CisJCWJyZWFrOworCX0KKworCXN3aXRjaCAoKGJ1ZlsyXSA+PiAzKSAmIDcpIHsKKwljYXNlIDA6CisJCXAtPnUub2ZkbS5jb2RlX3JhdGVfTFAgPSBGRUNfMV8yOworCQlicmVhazsKKwljYXNlIDE6CisJCXAtPnUub2ZkbS5jb2RlX3JhdGVfTFAgPSBGRUNfMl8zOworCQlicmVhazsKKwljYXNlIDI6CisJCXAtPnUub2ZkbS5jb2RlX3JhdGVfTFAgPSBGRUNfM180OworCQlicmVhazsKKwljYXNlIDM6CisJCXAtPnUub2ZkbS5jb2RlX3JhdGVfTFAgPSBGRUNfNV82OworCQlicmVhazsKKwljYXNlIDQ6CisJCXAtPnUub2ZkbS5jb2RlX3JhdGVfTFAgPSBGRUNfN184OworCQlicmVhazsKKwl9CisKKwlzd2l0Y2ggKChidWZbMV0gPj4gMikgJiAzKSB7CisJY2FzZSAwOgorCQlwLT51Lm9mZG0uYmFuZHdpZHRoID0gQkFORFdJRFRIXzZfTUhaOworCQlicmVhazsKKwljYXNlIDE6CisJCXAtPnUub2ZkbS5iYW5kd2lkdGggPSBCQU5EV0lEVEhfN19NSFo7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJcC0+dS5vZmRtLmJhbmR3aWR0aCA9IEJBTkRXSURUSF84X01IWjsKKwkJYnJlYWs7CisJfQorCisJcC0+aW52ZXJzaW9uID0gSU5WRVJTSU9OX0FVVE87CisJcC0+ZnJlcXVlbmN5ID0gc3RhdGUtPmZyZXF1ZW5jeTsKKworZXJyb3I6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBhZjkwMTNfdXBkYXRlX2Jlcl91bmMoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUpCit7CisJc3RydWN0IGFmOTAxM19zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKwlpbnQgcmV0OworCXU4IGJ1ZlszXSwgaTsKKwl1MzIgZXJyb3JfYml0X2NvdW50ID0gMDsKKwl1MzIgdG90YWxfYml0X2NvdW50ID0gMDsKKwl1MzIgYWJvcnRfcGFja2V0X2NvdW50ID0gMDsKKworCXN0YXRlLT5iZXIgPSAwOworCisJLyogY2hlY2sgaWYgZXJyb3IgYml0IGNvdW50IGlzIHJlYWR5ICovCisJcmV0ID0gYWY5MDEzX3JlYWRfcmVnX2JpdHMoc3RhdGUsIDB4ZDM5MSwgNCwgMSwgJmJ1ZlswXSk7CisJaWYgKHJldCkKKwkJZ290byBlcnJvcjsKKwlpZiAoIWJ1ZlswXSkKKwkJZ290byBleGl0OworCisJLyogZ2V0IFJTRCBwYWNrZXQgYWJvcnQgY291bnQgKi8KKwlmb3IgKGkgPSAwOyBpIDwgMjsgaSsrKSB7CisJCXJldCA9IGFmOTAxM19yZWFkX3JlZyhzdGF0ZSwgMHhkMzhhICsgaSwgJmJ1ZltpXSk7CisJCWlmIChyZXQpCisJCQlnb3RvIGVycm9yOworCX0KKwlhYm9ydF9wYWNrZXRfY291bnQgPSAoYnVmWzFdIDw8IDgpICsgYnVmWzBdOworCisJLyogZ2V0IGVycm9yIGJpdCBjb3VudCAqLworCWZvciAoaSA9IDA7IGkgPCAzOyBpKyspIHsKKwkJcmV0ID0gYWY5MDEzX3JlYWRfcmVnKHN0YXRlLCAweGQzODcgKyBpLCAmYnVmW2ldKTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gZXJyb3I7CisJfQorCWVycm9yX2JpdF9jb3VudCA9IChidWZbMl0gPDwgMTYpICsgKGJ1ZlsxXSA8PCA4KSArIGJ1ZlswXTsKKwllcnJvcl9iaXRfY291bnQgPSBlcnJvcl9iaXRfY291bnQgLSBhYm9ydF9wYWNrZXRfY291bnQgKiA4ICogODsKKworCS8qIGdldCB1c2VkIFJTRCBjb3VudGluZyBwZXJpb2QgKDEwMDAwIFJTRCBwYWNrZXRzIHVzZWQpICovCisJZm9yIChpID0gMDsgaSA8IDI7IGkrKykgeworCQlyZXQgPSBhZjkwMTNfcmVhZF9yZWcoc3RhdGUsIDB4ZDM4NSArIGksICZidWZbaV0pOworCQlpZiAocmV0KQorCQkJZ290byBlcnJvcjsKKwl9CisJdG90YWxfYml0X2NvdW50ID0gKGJ1ZlsxXSA8PCA4KSArIGJ1ZlswXTsKKwl0b3RhbF9iaXRfY291bnQgPSB0b3RhbF9iaXRfY291bnQgLSBhYm9ydF9wYWNrZXRfY291bnQ7CisJdG90YWxfYml0X2NvdW50ID0gdG90YWxfYml0X2NvdW50ICogMjA0ICogODsKKworCWlmICh0b3RhbF9iaXRfY291bnQpCisJCXN0YXRlLT5iZXIgPSBlcnJvcl9iaXRfY291bnQgKiAxMDAwMDAwMDAwIC8gdG90YWxfYml0X2NvdW50OworCisJc3RhdGUtPnVjYmxvY2tzICs9IGFib3J0X3BhY2tldF9jb3VudDsKKworCWRlYl9pbmZvKCIlczogZXJyIGJpdHM6JWQgdG90YWwgYml0czolZCBhYm9ydCBjb3VudDolZFxuIiwgX19mdW5jX18sCisJCWVycm9yX2JpdF9jb3VudCwgdG90YWxfYml0X2NvdW50LCBhYm9ydF9wYWNrZXRfY291bnQpOworCisJLyogc2V0IEJFUiBjb3VudGluZyByYW5nZSAqLworCXJldCA9IGFmOTAxM193cml0ZV9yZWcoc3RhdGUsIDB4ZDM4NSwgMTAwMDAgJiAweGZmKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycm9yOworCXJldCA9IGFmOTAxM193cml0ZV9yZWcoc3RhdGUsIDB4ZDM4NiwgMTAwMDAgPj4gOCk7CisJaWYgKHJldCkKKwkJZ290byBlcnJvcjsKKwkvKiByZXNldCBhbmQgc3RhcnQgQkVSIGNvdW50ZXIgKi8KKwlyZXQgPSBhZjkwMTNfd3JpdGVfcmVnX2JpdHMoc3RhdGUsIDB4ZDM5MSwgNCwgMSwgMSk7CisJaWYgKHJldCkKKwkJZ290byBlcnJvcjsKKworZXhpdDoKK2Vycm9yOgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgYWY5MDEzX3VwZGF0ZV9zbnIoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUpCit7CisJc3RydWN0IGFmOTAxM19zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKwlpbnQgcmV0OworCXU4IGJ1ZlszXSwgaSwgbGVuOworCXUzMiBxdWFudCA9IDA7CisJc3RydWN0IHNucl90YWJsZSAqc25yX3RhYmxlOworCisJLyogY2hlY2sgaWYgcXVhbnRpemVyIHJlYWR5IChmb3Igc25yKSAqLworCXJldCA9IGFmOTAxM19yZWFkX3JlZ19iaXRzKHN0YXRlLCAweGQyZTEsIDMsIDEsICZidWZbMF0pOworCWlmIChyZXQpCisJCWdvdG8gZXJyb3I7CisJaWYgKGJ1ZlswXSkgeworCQkvKiBxdWFudGl6ZXIgcmVhZHkgLSByZWFkIGl0ICovCisJCWZvciAoaSA9IDA7IGkgPCAzOyBpKyspIHsKKwkJCXJldCA9IGFmOTAxM19yZWFkX3JlZyhzdGF0ZSwgMHhkMmUzICsgaSwgJmJ1ZltpXSk7CisJCQlpZiAocmV0KQorCQkJCWdvdG8gZXJyb3I7CisJCX0KKwkJcXVhbnQgPSAoYnVmWzJdIDw8IDE2KSArIChidWZbMV0gPDwgOCkgKyBidWZbMF07CisKKwkJLyogcmVhZCBjdXJyZW50IGNvbnN0ZWxsYXRpb24gKi8KKwkJcmV0ID0gYWY5MDEzX3JlYWRfcmVnKHN0YXRlLCAweGQzYzEsICZidWZbMF0pOworCQlpZiAocmV0KQorCQkJZ290byBlcnJvcjsKKworCQlzd2l0Y2ggKChidWZbMF0gPj4gNikgJiAzKSB7CisJCWNhc2UgMDoKKwkJCWxlbiA9IEFSUkFZX1NJWkUocXBza19zbnJfdGFibGUpOworCQkJc25yX3RhYmxlID0gcXBza19zbnJfdGFibGU7CisJCQlicmVhazsKKwkJY2FzZSAxOgorCQkJbGVuID0gQVJSQVlfU0laRShxYW0xNl9zbnJfdGFibGUpOworCQkJc25yX3RhYmxlID0gcWFtMTZfc25yX3RhYmxlOworCQkJYnJlYWs7CisJCWNhc2UgMjoKKwkJCWxlbiA9IEFSUkFZX1NJWkUocWFtNjRfc25yX3RhYmxlKTsKKwkJCXNucl90YWJsZSA9IHFhbTY0X3Nucl90YWJsZTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJbGVuID0gMDsKKwkJCWJyZWFrOworCQl9CisKKwkJaWYgKGxlbikgeworCQkJZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CisJCQkJaWYgKHF1YW50IDwgc25yX3RhYmxlW2ldLnZhbCkgeworCQkJCQlzdGF0ZS0+c25yID0gc25yX3RhYmxlW2ldLnNuciAqIDEwOworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisJCX0KKworCQkvKiBzZXQgcXVhbnRpemVyIHN1cGVyIGZyYW1lIGNvdW50ICovCisJCXJldCA9IGFmOTAxM193cml0ZV9yZWcoc3RhdGUsIDB4ZDJlMiwgMSk7CisJCWlmIChyZXQpCisJCQlnb3RvIGVycm9yOworCisJCS8qIGNoZWNrIHF1YW50aXplciBhdmFpbGFiaWxpdHkgKi8KKwkJZm9yIChpID0gMDsgaSA8IDEwOyBpKyspIHsKKwkJCW1zbGVlcCgxMCk7CisJCQlyZXQgPSBhZjkwMTNfcmVhZF9yZWdfYml0cyhzdGF0ZSwgMHhkMmU2LCAwLCAxLAorCQkJCSZidWZbMF0pOworCQkJaWYgKHJldCkKKwkJCQlnb3RvIGVycm9yOworCQkJaWYgKCFidWZbMF0pCisJCQkJYnJlYWs7CisJCX0KKworCQkvKiByZXNldCBxdWFudGl6ZXIgKi8KKwkJcmV0ID0gYWY5MDEzX3dyaXRlX3JlZ19iaXRzKHN0YXRlLCAweGQyZTEsIDMsIDEsIDEpOworCQlpZiAocmV0KQorCQkJZ290byBlcnJvcjsKKwl9CisKK2Vycm9yOgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgYWY5MDEzX3VwZGF0ZV9zaWduYWxfc3RyZW5ndGgoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUpCit7CisJc3RydWN0IGFmOTAxM19zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKwlpbnQgcmV0OworCXU4IHRtcDA7CisJdTggcmZfZ2FpbiwgcmZfNTAsIHJmXzgwLCBpZl9nYWluLCBpZl81MCwgaWZfODA7CisJaW50IHNpZ25hbF9zdHJlbmd0aDsKKworCWRlYl9pbmZvKCIlc1xuIiwgX19mdW5jX18pOworCisJc3RhdGUtPnNpZ25hbF9zdHJlbmd0aCA9IDA7CisKKwlyZXQgPSBhZjkwMTNfcmVhZF9yZWdfYml0cyhzdGF0ZSwgMHg5YmVlLCAwLCAxLCAmdG1wMCk7CisJaWYgKHJldCkKKwkJZ290byBlcnJvcjsKKwlpZiAodG1wMCkgeworCQlyZXQgPSBhZjkwMTNfcmVhZF9yZWcoc3RhdGUsIDB4OWJiZCwgJnJmXzUwKTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gZXJyb3I7CisJCXJldCA9IGFmOTAxM19yZWFkX3JlZyhzdGF0ZSwgMHg5YmQwLCAmcmZfODApOworCQlpZiAocmV0KQorCQkJZ290byBlcnJvcjsKKwkJcmV0ID0gYWY5MDEzX3JlYWRfcmVnKHN0YXRlLCAweDliZTIsICZpZl81MCk7CisJCWlmIChyZXQpCisJCQlnb3RvIGVycm9yOworCQlyZXQgPSBhZjkwMTNfcmVhZF9yZWcoc3RhdGUsIDB4OWJlNCwgJmlmXzgwKTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gZXJyb3I7CisJCXJldCA9IGFmOTAxM19yZWFkX3JlZyhzdGF0ZSwgMHhkMDdjLCAmcmZfZ2Fpbik7CisJCWlmIChyZXQpCisJCQlnb3RvIGVycm9yOworCQlyZXQgPSBhZjkwMTNfcmVhZF9yZWcoc3RhdGUsIDB4ZDA3ZCwgJmlmX2dhaW4pOworCQlpZiAocmV0KQorCQkJZ290byBlcnJvcjsKKwkJc2lnbmFsX3N0cmVuZ3RoID0gKDB4ZmZmZiAvICg5ICogKHJmXzUwICsgaWZfNTApIC0gXAorCQkJMTEgKiAocmZfODAgKyBpZl84MCkpKSAqICgxMCAqIChyZl9nYWluICsgaWZfZ2FpbikgLSBcCisJCQkxMSAqIChyZl84MCArIGlmXzgwKSk7CisJCWlmIChzaWduYWxfc3RyZW5ndGggPCAwKQorCQkJc2lnbmFsX3N0cmVuZ3RoID0gMDsKKwkJZWxzZSBpZiAoc2lnbmFsX3N0cmVuZ3RoID4gMHhmZmZmKQorCQkJc2lnbmFsX3N0cmVuZ3RoID0gMHhmZmZmOworCisJCXN0YXRlLT5zaWduYWxfc3RyZW5ndGggPSBzaWduYWxfc3RyZW5ndGg7CisJfQorCitlcnJvcjoKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGFmOTAxM191cGRhdGVfc3RhdGlzdGljcyhzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSkKK3sKKwlzdHJ1Y3QgYWY5MDEzX3N0YXRlICpzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCWludCByZXQ7CisKKwlpZiAodGltZV9iZWZvcmUoamlmZmllcywgc3RhdGUtPm5leHRfc3RhdGlzdGljc19jaGVjaykpCisJCXJldHVybiAwOworCisJLyogc2V0IG1pbmltdW0gc3RhdGlzdGljIHVwZGF0ZSBpbnRlcnZhbCAqLworCXN0YXRlLT5uZXh0X3N0YXRpc3RpY3NfY2hlY2sgPSBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcygxMjAwKTsKKworCXJldCA9IGFmOTAxM191cGRhdGVfc2lnbmFsX3N0cmVuZ3RoKGZlKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycm9yOworCXJldCA9IGFmOTAxM191cGRhdGVfc25yKGZlKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycm9yOworCXJldCA9IGFmOTAxM191cGRhdGVfYmVyX3VuYyhmZSk7CisJaWYgKHJldCkKKwkJZ290byBlcnJvcjsKKworZXJyb3I6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBhZjkwMTNfZ2V0X3R1bmVfc2V0dGluZ3Moc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsCisJc3RydWN0IGR2Yl9mcm9udGVuZF90dW5lX3NldHRpbmdzICpmZXNldHRpbmdzKQoreworCWZlc2V0dGluZ3MtPm1pbl9kZWxheV9tcyA9IDgwMDsKKwlmZXNldHRpbmdzLT5zdGVwX3NpemUgPSAwOworCWZlc2V0dGluZ3MtPm1heF9kcmlmdCA9IDA7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhZjkwMTNfcmVhZF9zdGF0dXMoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIGZlX3N0YXR1c190ICpzdGF0dXMpCit7CisJc3RydWN0IGFmOTAxM19zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKwlpbnQgcmV0ID0gMDsKKwl1OCB0bXA7CisJKnN0YXR1cyA9IDA7CisKKwkvKiBUUFMgbG9jayAqLworCXJldCA9IGFmOTAxM19yZWFkX3JlZ19iaXRzKHN0YXRlLCAweGQzMzAsIDMsIDEsICZ0bXApOworCWlmIChyZXQpCisJCWdvdG8gZXJyb3I7CisJaWYgKHRtcCkKKwkJKnN0YXR1cyB8PSBGRV9IQVNfVklURVJCSSB8IEZFX0hBU19DQVJSSUVSIHwgRkVfSEFTX1NJR05BTDsKKworCS8qIE1QRUcyIGxvY2sgKi8KKwlyZXQgPSBhZjkwMTNfcmVhZF9yZWdfYml0cyhzdGF0ZSwgMHhkNTA3LCA2LCAxLCAmdG1wKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycm9yOworCWlmICh0bXApCisJCSpzdGF0dXMgfD0gRkVfSEFTX1NZTkMgfCBGRV9IQVNfTE9DSzsKKworCWlmICghKnN0YXR1cyAmIEZFX0hBU19TSUdOQUwpIHsKKwkJLyogQUdDIGxvY2sgKi8KKwkJcmV0ID0gYWY5MDEzX3JlYWRfcmVnX2JpdHMoc3RhdGUsIDB4ZDFhMCwgNiwgMSwgJnRtcCk7CisJCWlmIChyZXQpCisJCQlnb3RvIGVycm9yOworCQlpZiAodG1wKQorCQkJKnN0YXR1cyB8PSBGRV9IQVNfU0lHTkFMOworCX0KKworCWlmICghKnN0YXR1cyAmIEZFX0hBU19DQVJSSUVSKSB7CisJCS8qIENGTyBsb2NrICovCisJCXJldCA9IGFmOTAxM19yZWFkX3JlZ19iaXRzKHN0YXRlLCAweGQzMzMsIDcsIDEsICZ0bXApOworCQlpZiAocmV0KQorCQkJZ290byBlcnJvcjsKKwkJaWYgKHRtcCkKKwkJCSpzdGF0dXMgfD0gRkVfSEFTX0NBUlJJRVI7CisJfQorCisJaWYgKCEqc3RhdHVzICYgRkVfSEFTX0NBUlJJRVIpIHsKKwkJLyogU0ZPRSBsb2NrICovCisJCXJldCA9IGFmOTAxM19yZWFkX3JlZ19iaXRzKHN0YXRlLCAweGQzMzQsIDYsIDEsICZ0bXApOworCQlpZiAocmV0KQorCQkJZ290byBlcnJvcjsKKwkJaWYgKHRtcCkKKwkJCSpzdGF0dXMgfD0gRkVfSEFTX0NBUlJJRVI7CisJfQorCisJcmV0ID0gYWY5MDEzX3VwZGF0ZV9zdGF0aXN0aWNzKGZlKTsKKworZXJyb3I6CisJcmV0dXJuIHJldDsKK30KKworCitzdGF0aWMgaW50IGFmOTAxM19yZWFkX2JlcihzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgdTMyICpiZXIpCit7CisJc3RydWN0IGFmOTAxM19zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKwlpbnQgcmV0OworCXJldCA9IGFmOTAxM191cGRhdGVfc3RhdGlzdGljcyhmZSk7CisJKmJlciA9IHN0YXRlLT5iZXI7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBhZjkwMTNfcmVhZF9zaWduYWxfc3RyZW5ndGgoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIHUxNiAqc3RyZW5ndGgpCit7CisJc3RydWN0IGFmOTAxM19zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKwlpbnQgcmV0OworCXJldCA9IGFmOTAxM191cGRhdGVfc3RhdGlzdGljcyhmZSk7CisJKnN0cmVuZ3RoID0gc3RhdGUtPnNpZ25hbF9zdHJlbmd0aDsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGFmOTAxM19yZWFkX3NucihzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgdTE2ICpzbnIpCit7CisJc3RydWN0IGFmOTAxM19zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKwlpbnQgcmV0OworCXJldCA9IGFmOTAxM191cGRhdGVfc3RhdGlzdGljcyhmZSk7CisJKnNuciA9IHN0YXRlLT5zbnI7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBhZjkwMTNfcmVhZF91Y2Jsb2NrcyhzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgdTMyICp1Y2Jsb2NrcykKK3sKKwlzdHJ1Y3QgYWY5MDEzX3N0YXRlICpzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCWludCByZXQ7CisJcmV0ID0gYWY5MDEzX3VwZGF0ZV9zdGF0aXN0aWNzKGZlKTsKKwkqdWNibG9ja3MgPSBzdGF0ZS0+dWNibG9ja3M7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBhZjkwMTNfc2xlZXAoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUpCit7CisJc3RydWN0IGFmOTAxM19zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKwlpbnQgcmV0OworCWRlYl9pbmZvKCIlc1xuIiwgX19mdW5jX18pOworCisJcmV0ID0gYWY5MDEzX2xvY2tfbGVkKHN0YXRlLCAwKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycm9yOworCisJcmV0ID0gYWY5MDEzX3Bvd2VyX2N0cmwoc3RhdGUsIDApOworZXJyb3I6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBhZjkwMTNfaW5pdChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSkKK3sKKwlzdHJ1Y3QgYWY5MDEzX3N0YXRlICpzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCWludCByZXQsIGksIGxlbjsKKwl1OCB0bXAwLCB0bXAxOworCXN0cnVjdCByZWdkZXNjICppbml0OworCWRlYl9pbmZvKCIlc1xuIiwgX19mdW5jX18pOworCisJLyogcmVzZXQgT0ZETSAqLworCXJldCA9IGFmOTAxM19yZXNldChzdGF0ZSwgMCk7CisJaWYgKHJldCkKKwkJZ290byBlcnJvcjsKKworCS8qIHBvd2VyIG9uICovCisJcmV0ID0gYWY5MDEzX3Bvd2VyX2N0cmwoc3RhdGUsIDEpOworCWlmIChyZXQpCisJCWdvdG8gZXJyb3I7CisKKwkvKiBlbmFibGUgQURDICovCisJcmV0ID0gYWY5MDEzX3dyaXRlX3JlZyhzdGF0ZSwgMHhkNzNhLCAweGE0KTsKKwlpZiAocmV0KQorCQlnb3RvIGVycm9yOworCisJLyogd3JpdGUgQVBJIHZlcnNpb24gdG8gZmlybXdhcmUgKi8KKwlmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKHN0YXRlLT5jb25maWcuYXBpX3ZlcnNpb24pOyBpKyspIHsKKwkJcmV0ID0gYWY5MDEzX3dyaXRlX3JlZyhzdGF0ZSwgMHg5YmYyICsgaSwKKwkJCXN0YXRlLT5jb25maWcuYXBpX3ZlcnNpb25baV0pOworCQlpZiAocmV0KQorCQkJZ290byBlcnJvcjsKKwl9CisKKwkvKiBwcm9ncmFtIEFEQyBjb250cm9sICovCisJcmV0ID0gYWY5MDEzX3NldF9hZGNfY3RybChzdGF0ZSk7CisJaWYgKHJldCkKKwkJZ290byBlcnJvcjsKKworCS8qIHNldCBJMkMgbWFzdGVyIGNsb2NrICovCisJcmV0ID0gYWY5MDEzX3dyaXRlX3JlZyhzdGF0ZSwgMHhkNDE2LCAweDE0KTsKKwlpZiAocmV0KQorCQlnb3RvIGVycm9yOworCisJLyogc2V0IDE2IGVtYnggKi8KKwlyZXQgPSBhZjkwMTNfd3JpdGVfcmVnX2JpdHMoc3RhdGUsIDB4ZDcwMCwgMSwgMSwgMSk7CisJaWYgKHJldCkKKwkJZ290byBlcnJvcjsKKworCS8qIHNldCBubyB0cmlnZ2VyICovCisJcmV0ID0gYWY5MDEzX3dyaXRlX3JlZ19iaXRzKHN0YXRlLCAweGQ3MDAsIDIsIDEsIDApOworCWlmIChyZXQpCisJCWdvdG8gZXJyb3I7CisKKwkvKiBzZXQgcmVhZC11cGRhdGUgYml0IGZvciBjb25zdGVsbGF0aW9uICovCisJcmV0ID0gYWY5MDEzX3dyaXRlX3JlZ19iaXRzKHN0YXRlLCAweGQzNzEsIDEsIDEsIDEpOworCWlmIChyZXQpCisJCWdvdG8gZXJyb3I7CisKKwkvKiBlbmFibGUgRkVDIG1vbml0b3IgKi8KKwlyZXQgPSBhZjkwMTNfd3JpdGVfcmVnX2JpdHMoc3RhdGUsIDB4ZDM5MiwgMSwgMSwgMSk7CisJaWYgKHJldCkKKwkJZ290byBlcnJvcjsKKworCS8qIGxvYWQgT0ZTTSBzZXR0aW5ncyAqLworCWRlYl9pbmZvKCIlczogbG9hZCBvZnNtIHNldHRpbmdzXG4iLCBfX2Z1bmNfXyk7CisJbGVuID0gQVJSQVlfU0laRShvZnNtX2luaXQpOworCWluaXQgPSBvZnNtX2luaXQ7CisJZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CisJCXJldCA9IGFmOTAxM193cml0ZV9yZWdfYml0cyhzdGF0ZSwgaW5pdFtpXS5hZGRyLCBpbml0W2ldLnBvcywKKwkJCWluaXRbaV0ubGVuLCBpbml0W2ldLnZhbCk7CisJCWlmIChyZXQpCisJCQlnb3RvIGVycm9yOworCX0KKworCS8qIGxvYWQgdHVuZXIgc3BlY2lmaWMgc2V0dGluZ3MgKi8KKwlkZWJfaW5mbygiJXM6IGxvYWQgdHVuZXIgc3BlY2lmaWMgc2V0dGluZ3NcbiIsIF9fZnVuY19fKTsKKwlzd2l0Y2ggKHN0YXRlLT5jb25maWcudHVuZXIpIHsKKwljYXNlIEFGOTAxM19UVU5FUl9NWEw1MDAzRDoKKwkJbGVuID0gQVJSQVlfU0laRSh0dW5lcl9pbml0X214bDUwMDNkKTsKKwkJaW5pdCA9IHR1bmVyX2luaXRfbXhsNTAwM2Q7CisJCWJyZWFrOworCWNhc2UgQUY5MDEzX1RVTkVSX01YTDUwMDVEOgorCWNhc2UgQUY5MDEzX1RVTkVSX01YTDUwMDVSOgorCQlsZW4gPSBBUlJBWV9TSVpFKHR1bmVyX2luaXRfbXhsNTAwNSk7CisJCWluaXQgPSB0dW5lcl9pbml0X214bDUwMDU7CisJCWJyZWFrOworCWNhc2UgQUY5MDEzX1RVTkVSX0VOVjc3SDExRDU6CisJCWxlbiA9IEFSUkFZX1NJWkUodHVuZXJfaW5pdF9lbnY3N2gxMWQ1KTsKKwkJaW5pdCA9IHR1bmVyX2luaXRfZW52NzdoMTFkNTsKKwkJYnJlYWs7CisJY2FzZSBBRjkwMTNfVFVORVJfTVQyMDYwOgorCQlsZW4gPSBBUlJBWV9TSVpFKHR1bmVyX2luaXRfbXQyMDYwKTsKKwkJaW5pdCA9IHR1bmVyX2luaXRfbXQyMDYwOworCQlicmVhazsKKwljYXNlIEFGOTAxM19UVU5FUl9NQzQ0UzgwMzoKKwkJbGVuID0gQVJSQVlfU0laRSh0dW5lcl9pbml0X21jNDRzODAzKTsKKwkJaW5pdCA9IHR1bmVyX2luaXRfbWM0NHM4MDM7CisJCWJyZWFrOworCWNhc2UgQUY5MDEzX1RVTkVSX1FUMTAxMDoKKwljYXNlIEFGOTAxM19UVU5FUl9RVDEwMTBBOgorCQlsZW4gPSBBUlJBWV9TSVpFKHR1bmVyX2luaXRfcXQxMDEwKTsKKwkJaW5pdCA9IHR1bmVyX2luaXRfcXQxMDEwOworCQlicmVhazsKKwljYXNlIEFGOTAxM19UVU5FUl9NVDIwNjBfMjoKKwkJbGVuID0gQVJSQVlfU0laRSh0dW5lcl9pbml0X210MjA2MF8yKTsKKwkJaW5pdCA9IHR1bmVyX2luaXRfbXQyMDYwXzI7CisJCWJyZWFrOworCWNhc2UgQUY5MDEzX1RVTkVSX1REQTE4MjcxOgorCQlsZW4gPSBBUlJBWV9TSVpFKHR1bmVyX2luaXRfdGRhMTgyNzEpOworCQlpbml0ID0gdHVuZXJfaW5pdF90ZGExODI3MTsKKwkJYnJlYWs7CisJY2FzZSBBRjkwMTNfVFVORVJfVU5LTk9XTjoKKwlkZWZhdWx0OgorCQlsZW4gPSBBUlJBWV9TSVpFKHR1bmVyX2luaXRfdW5rbm93bik7CisJCWluaXQgPSB0dW5lcl9pbml0X3Vua25vd247CisJCWJyZWFrOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgeworCQlyZXQgPSBhZjkwMTNfd3JpdGVfcmVnX2JpdHMoc3RhdGUsIGluaXRbaV0uYWRkciwgaW5pdFtpXS5wb3MsCisJCQlpbml0W2ldLmxlbiwgaW5pdFtpXS52YWwpOworCQlpZiAocmV0KQorCQkJZ290byBlcnJvcjsKKwl9CisKKwkvKiBzZXQgVFMgbW9kZSAqLworCWRlYl9pbmZvKCIlczogc2V0dGluZyB0cyBtb2RlXG4iLCBfX2Z1bmNfXyk7CisJdG1wMCA9IDA7IC8qIHBhcmFsbGVsIG1vZGUgKi8KKwl0bXAxID0gMDsgLyogc2VyaWFsIG1vZGUgKi8KKwlzd2l0Y2ggKHN0YXRlLT5jb25maWcub3V0cHV0X21vZGUpIHsKKwljYXNlIEFGOTAxM19PVVRQVVRfTU9ERV9QQVJBTExFTDoKKwkJdG1wMCA9IDE7CisJCWJyZWFrOworCWNhc2UgQUY5MDEzX09VVFBVVF9NT0RFX1NFUklBTDoKKwkJdG1wMSA9IDE7CisJCWJyZWFrOworCWNhc2UgQUY5MDEzX09VVFBVVF9NT0RFX1VTQjoKKwkJLyogdXNiIG1vZGUgZm9yIEFGOTAxNSAqLworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKwlyZXQgPSBhZjkwMTNfd3JpdGVfcmVnX2JpdHMoc3RhdGUsIDB4ZDUwMCwgMSwgMSwgdG1wMCk7IC8qIHBhcmFsbGVsICovCisJaWYgKHJldCkKKwkJZ290byBlcnJvcjsKKwlyZXQgPSBhZjkwMTNfd3JpdGVfcmVnX2JpdHMoc3RhdGUsIDB4ZDUwMCwgMiwgMSwgdG1wMSk7IC8qIHNlcmlhbCAqLworCWlmIChyZXQpCisJCWdvdG8gZXJyb3I7CisKKwkvKiBlbmFibGUgbG9jayBsZWQgKi8KKwlyZXQgPSBhZjkwMTNfbG9ja19sZWQoc3RhdGUsIDEpOworCWlmIChyZXQpCisJCWdvdG8gZXJyb3I7CisKK2Vycm9yOgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZHZiX2Zyb250ZW5kX29wcyBhZjkwMTNfb3BzOworCitzdGF0aWMgaW50IGFmOTAxM19kb3dubG9hZF9maXJtd2FyZShzdHJ1Y3QgYWY5MDEzX3N0YXRlICpzdGF0ZSkKK3sKKwlpbnQgaSwgbGVuLCBwYWNrZXRzLCByZW1haW5kZXIsIHJldDsKKwljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3OworCXUxNiBhZGRyID0gMHg1MTAwOyAvKiBmaXJtd2FyZSBzdGFydCBhZGRyZXNzICovCisJdTE2IGNoZWNrc3VtID0gMDsKKwl1OCB2YWw7CisJdTggZndfcGFyYW1zWzRdOworCXU4ICpkYXRhOworCXU4ICpmd19maWxlID0gQUY5MDEzX0RFRkFVTFRfRklSTVdBUkU7CisKKwltc2xlZXAoMTAwKTsKKwkvKiBjaGVjayB3aGV0aGVyIGZpcm13YXJlIGlzIGFscmVhZHkgcnVubmluZyAqLworCXJldCA9IGFmOTAxM19yZWFkX3JlZyhzdGF0ZSwgMHg5OGJlLCAmdmFsKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycm9yOworCWVsc2UKKwkJZGViX2luZm8oIiVzOiBmaXJtd2FyZSBzdGF0dXM6JTAyeFxuIiwgX19mdW5jX18sIHZhbCk7CisKKwlpZiAodmFsID09IDB4MGMpIC8qIGZ3IGlzIHJ1bm5pbmcsIG5vIG5lZWQgZm9yIGRvd25sb2FkICovCisJCWdvdG8gZXhpdDsKKworCWluZm8oImZvdW5kIGEgJyVzJyBpbiBjb2xkIHN0YXRlLCB3aWxsIHRyeSB0byBsb2FkIGEgZmlybXdhcmUiLAorCQlhZjkwMTNfb3BzLmluZm8ubmFtZSk7CisKKwkvKiByZXF1ZXN0IHRoZSBmaXJtd2FyZSwgdGhpcyB3aWxsIGJsb2NrIGFuZCB0aW1lb3V0ICovCisJcmV0ID0gcmVxdWVzdF9maXJtd2FyZSgmZncsIGZ3X2ZpbGUsICAmc3RhdGUtPmkyYy0+ZGV2KTsKKwlpZiAocmV0KSB7CisJCWVycigiZGlkIG5vdCBmaW5kIHRoZSBmaXJtd2FyZSBmaWxlLiAoJXMpICIKKwkJCSJQbGVhc2Ugc2VlIGxpbnV4L0RvY3VtZW50YXRpb24vZHZiLyBmb3IgbW9yZSBkZXRhaWxzIiBcCisJCQkiIG9uIGZpcm13YXJlLXByb2JsZW1zLiAoJWQpIiwKKwkJCWZ3X2ZpbGUsIHJldCk7CisJCWdvdG8gZXJyb3I7CisJfQorCisJaW5mbygiZG93bmxvYWRpbmcgZmlybXdhcmUgZnJvbSBmaWxlICclcyciLCBmd19maWxlKTsKKworCS8qIGNhbGMgY2hlY2tzdW0gKi8KKwlmb3IgKGkgPSAwOyBpIDwgZnctPnNpemU7IGkrKykKKwkJY2hlY2tzdW0gKz0gZnctPmRhdGFbaV07CisKKwlmd19wYXJhbXNbMF0gPSBjaGVja3N1bSA+PiA4OworCWZ3X3BhcmFtc1sxXSA9IGNoZWNrc3VtICYgMHhmZjsKKwlmd19wYXJhbXNbMl0gPSBmdy0+c2l6ZSA+PiA4OworCWZ3X3BhcmFtc1szXSA9IGZ3LT5zaXplICYgMHhmZjsKKworCS8qIHdyaXRlIGZ3IGNoZWNrc3VtICYgc2l6ZSAqLworCXJldCA9IGFmOTAxM193cml0ZV9vZnNtX3JlZ3Moc3RhdGUsIDB4NTBmYywKKwkJZndfcGFyYW1zLCBzaXplb2YoZndfcGFyYW1zKSk7CisJaWYgKHJldCkKKwkJZ290byBlcnJvcl9yZWxlYXNlOworCisJI2RlZmluZSBGV19QQUNLRVRfTUFYX0RBVEEgIDE2CisKKwlwYWNrZXRzID0gZnctPnNpemUgLyBGV19QQUNLRVRfTUFYX0RBVEE7CisJcmVtYWluZGVyID0gZnctPnNpemUgJSBGV19QQUNLRVRfTUFYX0RBVEE7CisJbGVuID0gRldfUEFDS0VUX01BWF9EQVRBOworCWZvciAoaSA9IDA7IGkgPD0gcGFja2V0czsgaSsrKSB7CisJCWlmIChpID09IHBhY2tldHMpICAvKiBzZXQgc2l6ZSBvZiB0aGUgbGFzdCBwYWNrZXQgKi8KKwkJCWxlbiA9IHJlbWFpbmRlcjsKKworCQlkYXRhID0gKHU4ICopKGZ3LT5kYXRhICsgaSAqIEZXX1BBQ0tFVF9NQVhfREFUQSk7CisJCXJldCA9IGFmOTAxM193cml0ZV9vZnNtX3JlZ3Moc3RhdGUsIGFkZHIsIGRhdGEsIGxlbik7CisJCWFkZHIgKz0gRldfUEFDS0VUX01BWF9EQVRBOworCisJCWlmIChyZXQpIHsKKwkJCWVycigiZmlybXdhcmUgZG93bmxvYWQgZmFpbGVkIGF0ICVkIHdpdGggJWQiLCBpLCByZXQpOworCQkJZ290byBlcnJvcl9yZWxlYXNlOworCQl9CisJfQorCisJLyogcmVxdWVzdCBib290IGZpcm13YXJlICovCisJcmV0ID0gYWY5MDEzX3dyaXRlX3JlZyhzdGF0ZSwgMHhlMjA1LCAxKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycm9yX3JlbGVhc2U7CisKKwlmb3IgKGkgPSAwOyBpIDwgMTU7IGkrKykgeworCQltc2xlZXAoMTAwKTsKKworCQkvKiBjaGVjayBmaXJtd2FyZSBzdGF0dXMgKi8KKwkJcmV0ID0gYWY5MDEzX3JlYWRfcmVnKHN0YXRlLCAweDk4YmUsICZ2YWwpOworCQlpZiAocmV0KQorCQkJZ290byBlcnJvcl9yZWxlYXNlOworCisJCWRlYl9pbmZvKCIlczogZmlybXdhcmUgc3RhdHVzOiUwMnhcbiIsIF9fZnVuY19fLCB2YWwpOworCisJCWlmICh2YWwgPT0gMHgwYyB8fCB2YWwgPT0gMHgwNCkgLyogc3VjY2VzcyBvciBmYWlsICovCisJCQlicmVhazsKKwl9CisKKwlpZiAodmFsID09IDB4MDQpIHsKKwkJZXJyKCJmaXJtd2FyZSBkaWQgbm90IHJ1biIpOworCQlyZXQgPSAtMTsKKwl9IGVsc2UgaWYgKHZhbCAhPSAweDBjKSB7CisJCWVycigiZmlybXdhcmUgYm9vdCB0aW1lb3V0Iik7CisJCXJldCA9IC0xOworCX0KKworZXJyb3JfcmVsZWFzZToKKwlyZWxlYXNlX2Zpcm13YXJlKGZ3KTsKK2Vycm9yOgorZXhpdDoKKwlpZiAoIXJldCkKKwkJaW5mbygiZm91bmQgYSAnJXMnIGluIHdhcm0gc3RhdGUuIiwgYWY5MDEzX29wcy5pbmZvLm5hbWUpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgYWY5MDEzX2kyY19nYXRlX2N0cmwoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIGludCBlbmFibGUpCit7CisJaW50IHJldDsKKwlzdHJ1Y3QgYWY5MDEzX3N0YXRlICpzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCWRlYl9pbmZvKCIlczogZW5hYmxlOiVkXG4iLCBfX2Z1bmNfXywgZW5hYmxlKTsKKworCWlmIChzdGF0ZS0+Y29uZmlnLm91dHB1dF9tb2RlID09IEFGOTAxM19PVVRQVVRfTU9ERV9VU0IpCisJCXJldCA9IGFmOTAxM193cml0ZV9yZWdfYml0cyhzdGF0ZSwgMHhkNDE3LCAzLCAxLCBlbmFibGUpOworCWVsc2UKKwkJcmV0ID0gYWY5MDEzX3dyaXRlX3JlZ19iaXRzKHN0YXRlLCAweGQ2MDcsIDIsIDEsIGVuYWJsZSk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBhZjkwMTNfcmVsZWFzZShzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSkKK3sKKwlzdHJ1Y3QgYWY5MDEzX3N0YXRlICpzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCWtmcmVlKHN0YXRlKTsKK30KKworc3RhdGljIHN0cnVjdCBkdmJfZnJvbnRlbmRfb3BzIGFmOTAxM19vcHM7CisKK3N0cnVjdCBkdmJfZnJvbnRlbmQgKmFmOTAxM19hdHRhY2goY29uc3Qgc3RydWN0IGFmOTAxM19jb25maWcgKmNvbmZpZywKKwlzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyYykKK3sKKwlpbnQgcmV0OworCXN0cnVjdCBhZjkwMTNfc3RhdGUgKnN0YXRlID0gTlVMTDsKKwl1OCBidWZbM10sIGk7CisKKwkvKiBhbGxvY2F0ZSBtZW1vcnkgZm9yIHRoZSBpbnRlcm5hbCBzdGF0ZSAqLworCXN0YXRlID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGFmOTAxM19zdGF0ZSksIEdGUF9LRVJORUwpOworCWlmIChzdGF0ZSA9PSBOVUxMKQorCQlnb3RvIGVycm9yOworCisJLyogc2V0dXAgdGhlIHN0YXRlICovCisJc3RhdGUtPmkyYyA9IGkyYzsKKwltZW1jcHkoJnN0YXRlLT5jb25maWcsIGNvbmZpZywgc2l6ZW9mKHN0cnVjdCBhZjkwMTNfY29uZmlnKSk7CisKKwkvKiBjaGlwIHZlcnNpb24gKi8KKwlyZXQgPSBhZjkwMTNfcmVhZF9yZWdfYml0cyhzdGF0ZSwgMHhkNzMzLCA0LCA0LCAmYnVmWzJdKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycm9yOworCisJLyogUk9NIHZlcnNpb24gKi8KKwlmb3IgKGkgPSAwOyBpIDwgMjsgaSsrKSB7CisJCXJldCA9IGFmOTAxM19yZWFkX3JlZyhzdGF0ZSwgMHgxMTZiICsgaSwgJmJ1ZltpXSk7CisJCWlmIChyZXQpCisJCQlnb3RvIGVycm9yOworCX0KKwlkZWJfaW5mbygiJXM6IGNoaXAgdmVyc2lvbjolZCBST00gdmVyc2lvbjolZC4lZFxuIiwgX19mdW5jX18sCisJCWJ1ZlsyXSwgYnVmWzBdLCBidWZbMV0pOworCisJLyogZG93bmxvYWQgZmlybXdhcmUgKi8KKwlpZiAoc3RhdGUtPmNvbmZpZy5vdXRwdXRfbW9kZSAhPSBBRjkwMTNfT1VUUFVUX01PREVfVVNCKSB7CisJCXJldCA9IGFmOTAxM19kb3dubG9hZF9maXJtd2FyZShzdGF0ZSk7CisJCWlmIChyZXQpCisJCQlnb3RvIGVycm9yOworCX0KKworCS8qIGZpcm13YXJlIHZlcnNpb24gKi8KKwlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKSB7CisJCXJldCA9IGFmOTAxM19yZWFkX3JlZyhzdGF0ZSwgMHg1MTAzICsgaSwgJmJ1ZltpXSk7CisJCWlmIChyZXQpCisJCQlnb3RvIGVycm9yOworCX0KKwlpbmZvKCJmaXJtd2FyZSB2ZXJzaW9uOiVkLiVkLiVkIiwgYnVmWzBdLCBidWZbMV0sIGJ1ZlsyXSk7CisKKwkvKiBzZXR0aW5ncyBmb3IgbXAyaWYgKi8KKwlpZiAoc3RhdGUtPmNvbmZpZy5vdXRwdXRfbW9kZSA9PSBBRjkwMTNfT1VUUFVUX01PREVfVVNCKSB7CisJCS8qIEFGOTAxNSBzcGxpdCBQU0IgdG8gMS41ayArIDAuNWsgKi8KKwkJcmV0ID0gYWY5MDEzX3dyaXRlX3JlZ19iaXRzKHN0YXRlLCAweGQ1MGIsIDIsIDEsIDEpOworCX0gZWxzZSB7CisJCS8qIEFGOTAxMyBjaGFuZ2UgdGhlIG91dHB1dCBiaXQgdG8gZGF0YTcgKi8KKwkJcmV0ID0gYWY5MDEzX3dyaXRlX3JlZ19iaXRzKHN0YXRlLCAweGQ1MDAsIDMsIDEsIDEpOworCQlpZiAocmV0KQorCQkJZ290byBlcnJvcjsKKwkJLyogQUY5MDEzIHNldCBtcGVnIHRvIGZ1bGwgc3BlZWQgKi8KKwkJcmV0ID0gYWY5MDEzX3dyaXRlX3JlZ19iaXRzKHN0YXRlLCAweGQ1MDIsIDQsIDEsIDEpOworCX0KKwlpZiAocmV0KQorCQlnb3RvIGVycm9yOworCXJldCA9IGFmOTAxM193cml0ZV9yZWdfYml0cyhzdGF0ZSwgMHhkNTIwLCA0LCAxLCAxKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycm9yOworCisJLyogc2V0IEdQSU9zICovCisJZm9yIChpID0gMDsgaSA8IHNpemVvZihzdGF0ZS0+Y29uZmlnLmdwaW8pOyBpKyspIHsKKwkJcmV0ID0gYWY5MDEzX3NldF9ncGlvKHN0YXRlLCBpLCBzdGF0ZS0+Y29uZmlnLmdwaW9baV0pOworCQlpZiAocmV0KQorCQkJZ290byBlcnJvcjsKKwl9CisKKwkvKiBjcmVhdGUgZHZiX2Zyb250ZW5kICovCisJbWVtY3B5KCZzdGF0ZS0+ZnJvbnRlbmQub3BzLCAmYWY5MDEzX29wcywKKwkJc2l6ZW9mKHN0cnVjdCBkdmJfZnJvbnRlbmRfb3BzKSk7CisJc3RhdGUtPmZyb250ZW5kLmRlbW9kdWxhdG9yX3ByaXYgPSBzdGF0ZTsKKworCXJldHVybiAmc3RhdGUtPmZyb250ZW5kOworZXJyb3I6CisJa2ZyZWUoc3RhdGUpOworCXJldHVybiBOVUxMOworfQorRVhQT1JUX1NZTUJPTChhZjkwMTNfYXR0YWNoKTsKKworc3RhdGljIHN0cnVjdCBkdmJfZnJvbnRlbmRfb3BzIGFmOTAxM19vcHMgPSB7CisJLmluZm8gPSB7CisJCS5uYW1lID0gIkFmYXRlY2ggQUY5MDEzIERWQi1UIiwKKwkJLnR5cGUgPSBGRV9PRkRNLAorCQkuZnJlcXVlbmN5X21pbiA9IDE3NDAwMDAwMCwKKwkJLmZyZXF1ZW5jeV9tYXggPSA4NjIwMDAwMDAsCisJCS5mcmVxdWVuY3lfc3RlcHNpemUgPSAyNTAwMDAsCisJCS5mcmVxdWVuY3lfdG9sZXJhbmNlID0gMCwKKwkJLmNhcHMgPQorCQkJRkVfQ0FOX0ZFQ18xXzIgfCBGRV9DQU5fRkVDXzJfMyB8IEZFX0NBTl9GRUNfM180IHwKKwkJCUZFX0NBTl9GRUNfNV82IHwgRkVfQ0FOX0ZFQ183XzggfCBGRV9DQU5fRkVDX0FVVE8gfAorCQkJRkVfQ0FOX1FQU0sgfCBGRV9DQU5fUUFNXzE2IHwKKwkJCUZFX0NBTl9RQU1fNjQgfCBGRV9DQU5fUUFNX0FVVE8gfAorCQkJRkVfQ0FOX1RSQU5TTUlTU0lPTl9NT0RFX0FVVE8gfAorCQkJRkVfQ0FOX0dVQVJEX0lOVEVSVkFMX0FVVE8gfAorCQkJRkVfQ0FOX0hJRVJBUkNIWV9BVVRPIHwKKwkJCUZFX0NBTl9SRUNPVkVSIHwKKwkJCUZFX0NBTl9NVVRFX1RTCisJfSwKKworCS5yZWxlYXNlID0gYWY5MDEzX3JlbGVhc2UsCisJLmluaXQgPSBhZjkwMTNfaW5pdCwKKwkuc2xlZXAgPSBhZjkwMTNfc2xlZXAsCisJLmkyY19nYXRlX2N0cmwgPSBhZjkwMTNfaTJjX2dhdGVfY3RybCwKKworCS5zZXRfZnJvbnRlbmQgPSBhZjkwMTNfc2V0X2Zyb250ZW5kLAorCS5nZXRfZnJvbnRlbmQgPSBhZjkwMTNfZ2V0X2Zyb250ZW5kLAorCisJLmdldF90dW5lX3NldHRpbmdzID0gYWY5MDEzX2dldF90dW5lX3NldHRpbmdzLAorCisJLnJlYWRfc3RhdHVzID0gYWY5MDEzX3JlYWRfc3RhdHVzLAorCS5yZWFkX2JlciA9IGFmOTAxM19yZWFkX2JlciwKKwkucmVhZF9zaWduYWxfc3RyZW5ndGggPSBhZjkwMTNfcmVhZF9zaWduYWxfc3RyZW5ndGgsCisJLnJlYWRfc25yID0gYWY5MDEzX3JlYWRfc25yLAorCS5yZWFkX3VjYmxvY2tzID0gYWY5MDEzX3JlYWRfdWNibG9ja3MsCit9OworCittb2R1bGVfcGFyYW1fbmFtZWQoZGVidWcsIGFmOTAxM19kZWJ1ZywgaW50LCAwNjQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJUdXJuIG9uL29mZiBmcm9udGVuZCBkZWJ1Z2dpbmcgKGRlZmF1bHQ6b2ZmKS4iKTsKKworTU9EVUxFX0FVVEhPUigiQW50dGkgUGFsb3NhYXJpIDxjcm9wZUBpa2kuZmk+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkFmYXRlY2ggQUY5MDEzIERWQi1UIGRlbW9kdWxhdG9yIGRyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2FmOTAxMy5oIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2FmOTAxMy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI4YjkwYzkKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvYWY5MDEzLmgKQEAgLTAsMCArMSwxMDcgQEAKKy8qCisgKiBEVkIgVVNCIExpbnV4IGRyaXZlciBmb3IgQWZhdGVjaCBBRjkwMTUgRFZCLVQgVVNCMi4wIHJlY2VpdmVyCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA3IEFudHRpIFBhbG9zYWFyaSA8Y3JvcGVAaWtpLmZpPgorICoKKyAqIFRoYW5rcyB0byBBZmF0ZWNoIHdobyBraW5kbHkgcHJvdmlkZWQgaW5mb3JtYXRpb24uCisgKgorICogICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogICAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKgorICovCisKKyNpZm5kZWYgX0FGOTAxM19IXworI2RlZmluZSBfQUY5MDEzX0hfCisKKyNpbmNsdWRlIDxsaW51eC9kdmIvZnJvbnRlbmQuaD4KKworZW51bSBhZjkwMTNfdHNfbW9kZSB7CisJQUY5MDEzX09VVFBVVF9NT0RFX1BBUkFMTEVMLAorCUFGOTAxM19PVVRQVVRfTU9ERV9TRVJJQUwsCisJQUY5MDEzX09VVFBVVF9NT0RFX1VTQiwgLyogb25seSBmb3IgQUY5MDE1ICovCit9OworCitlbnVtIGFmOTAxM190dW5lciB7CisJQUY5MDEzX1RVTkVSX01YTDUwMDNEICAgPSAgIDMsIC8qIE1heExpbmVhciAqLworCUFGOTAxM19UVU5FUl9NWEw1MDA1RCAgID0gIDEzLCAvKiBNYXhMaW5lYXIgKi8KKwlBRjkwMTNfVFVORVJfTVhMNTAwNVIgICA9ICAzMCwgLyogTWF4TGluZWFyICovCisJQUY5MDEzX1RVTkVSX0VOVjc3SDExRDUgPSAxMjksIC8qIFBhbmFzb25pYyAqLworCUFGOTAxM19UVU5FUl9NVDIwNjAgICAgID0gMTMwLCAvKiBNaWNyb3R1bmUgKi8KKwlBRjkwMTNfVFVORVJfTUM0NFM4MDMgICA9IDEzMywgLyogRnJlZXNjYWxlICovCisJQUY5MDEzX1RVTkVSX1FUMTAxMCAgICAgPSAxMzQsIC8qIFF1YW50ZWsgKi8KKwlBRjkwMTNfVFVORVJfVU5LTk9XTiAgICA9IDE0MCwgLyogZm9yIGNhbiB0dW5lcnMgPyAqLworCUFGOTAxM19UVU5FUl9NVDIwNjBfMiAgID0gMTQ3LCAvKiBNaWNyb3R1bmUgKi8KKwlBRjkwMTNfVFVORVJfVERBMTgyNzEgICA9IDE1NiwgLyogTlhQICovCisJQUY5MDEzX1RVTkVSX1FUMTAxMEEgICAgPSAxNjIsIC8qIFF1YW50ZWsgKi8KK307CisKKy8qIEFGOTAxMy81IEdQSU9zIChtb3N0bHkgZ3Vlc3NlZCkKKyAgIGRlbW9kIzEtZ3BpbyMwIC0gc2V0IGRlbW9kIzIgaTJjLWFkZHIgZm9yIGR1YWwgZGV2aWNlcworICAgZGVtb2QjMS1ncGlvIzEgLSB4dGFsIHNldHRpbmcgKD8pCisgICBkZW1vZCMxLWdwaW8jMyAtIHR1bmVyIzEKKyAgIGRlbW9kIzItZ3BpbyMwIC0gdHVuZXIjMgorICAgZGVtb2QjMi1ncGlvIzEgLSB4dGFsIHNldHRpbmcgKD8pCisqLworI2RlZmluZSBBRjkwMTNfR1BJT19PTiAoMSA8PCAwKQorI2RlZmluZSBBRjkwMTNfR1BJT19FTiAoMSA8PCAxKQorI2RlZmluZSBBRjkwMTNfR1BJT19PICAoMSA8PCAyKQorI2RlZmluZSBBRjkwMTNfR1BJT19JICAoMSA8PCAzKQorCisjZGVmaW5lIEFGOTAxM19HUElPX0xPIChBRjkwMTNfR1BJT19PTnxBRjkwMTNfR1BJT19FTikKKyNkZWZpbmUgQUY5MDEzX0dQSU9fSEkgKEFGOTAxM19HUElPX09OfEFGOTAxM19HUElPX0VOfEFGOTAxM19HUElPX08pCisKKyNkZWZpbmUgQUY5MDEzX0dQSU9fVFVORVJfT04gIChBRjkwMTNfR1BJT19PTnxBRjkwMTNfR1BJT19FTikKKyNkZWZpbmUgQUY5MDEzX0dQSU9fVFVORVJfT0ZGIChBRjkwMTNfR1BJT19PTnxBRjkwMTNfR1BJT19FTnxBRjkwMTNfR1BJT19PKQorCitzdHJ1Y3QgYWY5MDEzX2NvbmZpZyB7CisJLyogZGVtb2R1bGF0b3IncyBJMkMgYWRkcmVzcyAqLworCXU4IGRlbW9kX2FkZHJlc3M7CisKKwkvKiBmcmVxdWVuY2llcyBpbiBrSHogKi8KKwl1MzIgYWRjX2Nsb2NrOworCisJLyogdHVuZXIgSUQgKi8KKwl1OCB0dW5lcjsKKworCS8qIHR1bmVyIElGICovCisJdTE2IHR1bmVyX2lmOworCisJLyogVFMgZGF0YSBvdXRwdXQgbW9kZSAqLworCXU4IG91dHB1dF9tb2RlOjI7CisKKwkvKiBSRiBzcGVjdHJ1bSBpbnZlcnNpb24gKi8KKwl1OCByZl9zcGVjX2ludjoxOworCisJLyogQVBJIHZlcnNpb24gKi8KKwl1OCBhcGlfdmVyc2lvbls0XTsKKworCS8qIEdQSU9zICovCisJdTggZ3Bpb1s0XTsKK307CisKKworI2lmIGRlZmluZWQoQ09ORklHX0RWQl9BRjkwMTMpIHx8IFwKKwkoZGVmaW5lZChDT05GSUdfRFZCX0FGOTAxM19NT0RVTEUpICYmIGRlZmluZWQoTU9EVUxFKSkKK2V4dGVybiBzdHJ1Y3QgZHZiX2Zyb250ZW5kICphZjkwMTNfYXR0YWNoKGNvbnN0IHN0cnVjdCBhZjkwMTNfY29uZmlnICpjb25maWcsCisJc3RydWN0IGkyY19hZGFwdGVyICppMmMpOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGR2Yl9mcm9udGVuZCAqYWY5MDEzX2F0dGFjaCgKK2NvbnN0IHN0cnVjdCBhZjkwMTNfY29uZmlnICpjb25maWcsIHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjKQoreworCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBkcml2ZXIgZGlzYWJsZWQgYnkgS2NvbmZpZ1xuIiwgX19mdW5jX18pOworCXJldHVybiBOVUxMOworfQorI2VuZGlmIC8qIENPTkZJR19EVkJfQUY5MDEzICovCisKKyNlbmRpZiAvKiBfQUY5MDEzX0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvYWY5MDEzX3ByaXYuaCBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9hZjkwMTNfcHJpdi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2M2UyNTEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvYWY5MDEzX3ByaXYuaApAQCAtMCwwICsxLDg2OSBAQAorLyoKKyAqIERWQiBVU0IgTGludXggZHJpdmVyIGZvciBBZmF0ZWNoIEFGOTAxNSBEVkItVCBVU0IyLjAgcmVjZWl2ZXIKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgQW50dGkgUGFsb3NhYXJpIDxjcm9wZUBpa2kuZmk+CisgKgorICogVGhhbmtzIHRvIEFmYXRlY2ggd2hvIGtpbmRseSBwcm92aWRlZCBpbmZvcm1hdGlvbi4KKyAqCisgKiAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqCisgKi8KKworI2lmbmRlZiBfQUY5MDEzX1BSSVZfCisjZGVmaW5lIF9BRjkwMTNfUFJJVl8KKworI2RlZmluZSBMT0dfUFJFRklYICJhZjkwMTMiCitleHRlcm4gaW50IGFmOTAxM19kZWJ1ZzsKKworI2RlZmluZSBkcHJpbnRrKHZhciwgbGV2ZWwsIGFyZ3MuLi4pIFwKKwkgICAgZG8geyBpZiAoKHZhciAmIGxldmVsKSkgcHJpbnRrKGFyZ3MpOyB9IHdoaWxlICgwKQorCisjZGVmaW5lIGRlYnVnX2R1bXAoYiwgbCwgZnVuYykge1wKKwlpbnQgbG9vcF87IFwKKwlmb3IgKGxvb3BfID0gMDsgbG9vcF8gPCBsOyBsb29wXysrKSBcCisJCWZ1bmMoIiUwMnggIiwgYltsb29wX10pOyBcCisJZnVuYygiXG4iKTtcCit9CisKKyNkZWZpbmUgZGViX2luZm8oYXJncy4uLikgZHByaW50ayhhZjkwMTNfZGVidWcsIDB4MDEsIGFyZ3MpCisKKyN1bmRlZiBlcnIKKyNkZWZpbmUgZXJyKGYsIGFyZy4uLikgIHByaW50ayhLRVJOX0VSUiAgICAgTE9HX1BSRUZJWCI6ICIgZiAiXG4iICwgIyMgYXJnKQorI3VuZGVmIGluZm8KKyNkZWZpbmUgaW5mbyhmLCBhcmcuLi4pIHByaW50ayhLRVJOX0lORk8gICAgTE9HX1BSRUZJWCI6ICIgZiAiXG4iICwgIyMgYXJnKQorI3VuZGVmIHdhcm4KKyNkZWZpbmUgd2FybihmLCBhcmcuLi4pIHByaW50ayhLRVJOX1dBUk5JTkcgTE9HX1BSRUZJWCI6ICIgZiAiXG4iICwgIyMgYXJnKQorCisjZGVmaW5lIEFGOTAxM19ERUZBVUxUX0ZJUk1XQVJFICAgICAiZHZiLWZlLWFmOTAxMy5mdyIKKworc3RydWN0IHJlZ2Rlc2MgeworCXUxNiBhZGRyOworCXU4ICBwb3M6NDsKKwl1OCAgbGVuOjQ7CisJdTggIHZhbDsKK307CisKK3N0cnVjdCBzbnJfdGFibGUgeworCXUzMiB2YWw7CisJdTggc25yOworfTsKKworLyogUVBTSyBTTlIgbG9va3VwIHRhYmxlICovCitzdGF0aWMgc3RydWN0IHNucl90YWJsZSBxcHNrX3Nucl90YWJsZVtdID0geworCXsgMHgwYjQ3NzEsICAwIH0sCisJeyAweDBjMWFlZCwgIDEgfSwKKwl7IDB4MGQwZDI3LCAgMiB9LAorCXsgMHgwZTRkMTksICAzIH0sCisJeyAweDBlNWRhOCwgIDQgfSwKKwl7IDB4MTA3MDk3LCAgNSB9LAorCXsgMHgxMTY5NzUsICA2IH0sCisJeyAweDEyNTJkOSwgIDcgfSwKKwl7IDB4MTMxZmE0LCAgOCB9LAorCXsgMHgxM2Q1ZTEsICA5IH0sCisJeyAweDE0OGU1MywgMTAgfSwKKwl7IDB4MTUzNThiLCAxMSB9LAorCXsgMHgxNWRkMjksIDEyIH0sCisJeyAweDE2ODExMiwgMTMgfSwKKwl7IDB4MTcwYjYxLCAxNCB9LAorCXsgMHhmZmZmZmYsIDE1IH0sCit9OworCisvKiBRQU0xNiBTTlIgbG9va3VwIHRhYmxlICovCitzdGF0aWMgc3RydWN0IHNucl90YWJsZSBxYW0xNl9zbnJfdGFibGVbXSA9IHsKKwl7IDB4MDVlYjYyLCAgNSB9LAorCXsgMHgwNWZlY2YsICA2IH0sCisJeyAweDA2MGI4MCwgIDcgfSwKKwl7IDB4MDYyNTAxLCAgOCB9LAorCXsgMHgwNjQ4NjUsICA5IH0sCisJeyAweDA2OTYwNCwgMTAgfSwKKwl7IDB4MDZmMzU2LCAxMSB9LAorCXsgMHgwNzcwNmEsIDEyIH0sCisJeyAweDA4MDRkMywgMTMgfSwKKwl7IDB4MDg5ZDFhLCAxNCB9LAorCXsgMHgwOTNlM2QsIDE1IH0sCisJeyAweDA5ZTM1ZCwgMTYgfSwKKwl7IDB4MGE3YzNjLCAxNyB9LAorCXsgMHgwYWZhZjgsIDE4IH0sCisJeyAweDBiNzE5ZCwgMTkgfSwKKwl7IDB4ZmZmZmZmLCAyMCB9LAorfTsKKworLyogUUFNNjQgU05SIGxvb2t1cCB0YWJsZSAqLworc3RhdGljIHN0cnVjdCBzbnJfdGFibGUgcWFtNjRfc25yX3RhYmxlW10gPSB7CisJeyAweDAzMTA5YiwgMTIgfSwKKwl7IDB4MDMxMGQ0LCAxMyB9LAorCXsgMHgwMzE5MjAsIDE0IH0sCisJeyAweDAzMjJkMCwgMTUgfSwKKwl7IDB4MDMzOWZjLCAxNiB9LAorCXsgMHgwMzY0YTEsIDE3IH0sCisJeyAweDAzOGJjYywgMTggfSwKKwl7IDB4MDNjN2QzLCAxOSB9LAorCXsgMHgwNDA4Y2MsIDIwIH0sCisJeyAweDA0M2JlZCwgMjEgfSwKKwl7IDB4MDQ4MDYxLCAyMiB9LAorCXsgMHgwNGJlOTUsIDIzIH0sCisJeyAweDA0ZmE3ZCwgMjQgfSwKKwl7IDB4MDUyNDA1LCAyNSB9LAorCXsgMHgwNTU3MGQsIDI2IH0sCisJeyAweGZmZmZmZiwgMjcgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVnZGVzYyBvZnNtX2luaXRbXSA9IHsKKwl7IDB4ZDczYSwgMCwgOCwgMHhhMSB9LAorCXsgMHhkNzNiLCAwLCA4LCAweDFmIH0sCisJeyAweGQ3M2MsIDQsIDQsIDB4MGEgfSwKKwl7IDB4ZDczMiwgMywgMSwgMHgwMCB9LAorCXsgMHhkNzMxLCA0LCAyLCAweDAzIH0sCisJeyAweGQ3M2QsIDcsIDEsIDB4MDEgfSwKKwl7IDB4ZDc0MCwgMCwgMSwgMHgwMCB9LAorCXsgMHhkNzQwLCAxLCAxLCAweDAwIH0sCisJeyAweGQ3NDAsIDIsIDEsIDB4MDAgfSwKKwl7IDB4ZDc0MCwgMywgMSwgMHgwMSB9LAorCXsgMHhkM2MxLCA0LCAxLCAweDAxIH0sCisJeyAweGQzYTIsIDAsIDgsIDB4MDAgfSwKKwl7IDB4ZDNhMywgMCwgOCwgMHgwNCB9LAorCXsgMHhkMzA1LCAwLCA4LCAweDMyIH0sCisJeyAweGQzMDYsIDAsIDgsIDB4MTAgfSwKKwl7IDB4ZDMwNCwgMCwgOCwgMHgwNCB9LAorCXsgMHg5MTEyLCAwLCAxLCAweDAxIH0sCisJeyAweDkxMWQsIDAsIDEsIDB4MDEgfSwKKwl7IDB4OTExYSwgMCwgMSwgMHgwMSB9LAorCXsgMHg5MTFiLCAwLCAxLCAweDAxIH0sCisJeyAweDliY2UsIDAsIDQsIDB4MDIgfSwKKwl7IDB4OTExNiwgMCwgMSwgMHgwMSB9LAorCXsgMHg5YmQxLCAwLCAxLCAweDAxIH0sCisJeyAweGQyZTAsIDAsIDgsIDB4ZDAgfSwKKwl7IDB4ZDJlOSwgMCwgNCwgMHgwZCB9LAorCXsgMHhkMzhjLCAwLCA4LCAweGZjIH0sCisJeyAweGQzOGQsIDAsIDgsIDB4MDAgfSwKKwl7IDB4ZDM4ZSwgMCwgOCwgMHg3ZSB9LAorCXsgMHhkMzhmLCAwLCA4LCAweDAwIH0sCisJeyAweGQzOTAsIDAsIDgsIDB4MmYgfSwKKwl7IDB4ZDE0NSwgNCwgMSwgMHgwMSB9LAorCXsgMHhkMWE5LCA0LCAxLCAweDAxIH0sCisJeyAweGQxNTgsIDUsIDMsIDB4MDEgfSwKKwl7IDB4ZDE1OSwgMCwgNiwgMHgwNiB9LAorCXsgMHhkMTY3LCAwLCA4LCAweDAwIH0sCisJeyAweGQxNjgsIDAsIDQsIDB4MDcgfSwKKwl7IDB4ZDFjMywgNSwgMywgMHgwMCB9LAorCXsgMHhkMWM0LCAwLCA2LCAweDAwIH0sCisJeyAweGQxYzUsIDAsIDcsIDB4MTAgfSwKKwl7IDB4ZDFjNiwgMCwgMywgMHgwMiB9LAorCXsgMHhkMDgwLCAyLCA1LCAweDAzIH0sCisJeyAweGQwODEsIDQsIDQsIDB4MDkgfSwKKwl7IDB4ZDA5OCwgNCwgNCwgMHgwZiB9LAorCXsgMHhkMDk4LCAwLCA0LCAweDAzIH0sCisJeyAweGRiYzAsIDMsIDEsIDB4MDEgfSwKKwl7IDB4ZGJjMCwgNCwgMSwgMHgwMSB9LAorCXsgMHhkYmM3LCAwLCA4LCAweDA4IH0sCisJeyAweGRiYzgsIDQsIDQsIDB4MDAgfSwKKwl7IDB4ZGJjOSwgMCwgNSwgMHgwMSB9LAorCXsgMHhkMjgwLCAwLCA4LCAweGUwIH0sCisJeyAweGQyODEsIDAsIDgsIDB4ZmYgfSwKKwl7IDB4ZDI4MiwgMCwgOCwgMHhmZiB9LAorCXsgMHhkMjgzLCAwLCA4LCAweGMzIH0sCisJeyAweGQyODQsIDAsIDgsIDB4ZmYgfSwKKwl7IDB4ZDI4NSwgMCwgNCwgMHgwMSB9LAorCXsgMHhkMGYwLCAwLCA3LCAweDFhIH0sCisJeyAweGQwZjEsIDQsIDEsIDB4MDEgfSwKKwl7IDB4ZDBmMiwgMCwgOCwgMHgwYyB9LAorCXsgMHhkMTAzLCAwLCA0LCAweDA4IH0sCisJeyAweGQwZjgsIDAsIDcsIDB4MjAgfSwKKwl7IDB4ZDExMSwgNSwgMSwgMHgwMCB9LAorCXsgMHhkMTExLCA2LCAxLCAweDAwIH0sCisJeyAweDkxMGIsIDAsIDgsIDB4MGEgfSwKKwl7IDB4OTExNSwgMCwgOCwgMHgwMiB9LAorCXsgMHg5MTBjLCAwLCA4LCAweDAyIH0sCisJeyAweDkxMGQsIDAsIDgsIDB4MDggfSwKKwl7IDB4OTEwZSwgMCwgOCwgMHgwYSB9LAorCXsgMHg5YmY2LCAwLCA4LCAweDA2IH0sCisJeyAweDliZjgsIDAsIDgsIDB4MDIgfSwKKwl7IDB4OWJmNywgMCwgOCwgMHgwNSB9LAorCXsgMHg5YmY5LCAwLCA4LCAweDBmIH0sCisJeyAweDliZmMsIDAsIDgsIDB4MTMgfSwKKwl7IDB4OWJkMywgMCwgOCwgMHhmZiB9LAorCXsgMHg5YmJlLCAwLCAxLCAweDAxIH0sCisJeyAweDliY2MsIDAsIDEsIDB4MDEgfSwKK307CisKKy8qIFBhbmFzb25pYyBFTlY3N0gxMUQ1IHR1bmVyIGluaXQKKyAgIEFGOTAxM19UVU5FUl9FTlY3N0gxMUQ1ID0gMTI5ICovCitzdGF0aWMgc3RydWN0IHJlZ2Rlc2MgdHVuZXJfaW5pdF9lbnY3N2gxMWQ1W10gPSB7CisJeyAweDliZDUsIDAsIDgsIDB4MDEgfSwKKwl7IDB4OWJkNiwgMCwgOCwgMHgwMyB9LAorCXsgMHg5YmJlLCAwLCA4LCAweDAxIH0sCisJeyAweGQxYTAsIDEsIDEsIDB4MDEgfSwKKwl7IDB4ZDAwMCwgMCwgMSwgMHgwMSB9LAorCXsgMHhkMDAwLCAxLCAxLCAweDAwIH0sCisJeyAweGQwMDEsIDEsIDEsIDB4MDEgfSwKKwl7IDB4ZDAwMSwgMCwgMSwgMHgwMCB9LAorCXsgMHhkMDAxLCA1LCAxLCAweDAwIH0sCisJeyAweGQwMDIsIDAsIDUsIDB4MTkgfSwKKwl7IDB4ZDAwMywgMCwgNSwgMHgxYSB9LAorCXsgMHhkMDA0LCAwLCA1LCAweDE5IH0sCisJeyAweGQwMDUsIDAsIDUsIDB4MWEgfSwKKwl7IDB4ZDAwZSwgMCwgNSwgMHgxMCB9LAorCXsgMHhkMDBmLCAwLCAzLCAweDA0IH0sCisJeyAweGQwMGYsIDMsIDMsIDB4MDUgfSwKKwl7IDB4ZDAxMCwgMCwgMywgMHgwNCB9LAorCXsgMHhkMDEwLCAzLCAzLCAweDA1IH0sCisJeyAweGQwMTYsIDQsIDQsIDB4MDMgfSwKKwl7IDB4ZDAxZiwgMCwgNiwgMHgwYSB9LAorCXsgMHhkMDIwLCAwLCA2LCAweDBhIH0sCisJeyAweDliZGEsIDAsIDgsIDB4MDAgfSwKKwl7IDB4OWJlMywgMCwgOCwgMHgwMCB9LAorCXsgMHhkMDE1LCAwLCA4LCAweDUwIH0sCisJeyAweGQwMTYsIDAsIDEsIDB4MDAgfSwKKwl7IDB4ZDA0NCwgMCwgOCwgMHg0NiB9LAorCXsgMHhkMDQ1LCAwLCAxLCAweDAwIH0sCisJeyAweGQwMDgsIDAsIDgsIDB4ZGYgfSwKKwl7IDB4ZDAwOSwgMCwgMiwgMHgwMiB9LAorCXsgMHhkMDA2LCAwLCA4LCAweDQ0IH0sCisJeyAweGQwMDcsIDAsIDIsIDB4MDEgfSwKKwl7IDB4ZDAwYywgMCwgOCwgMHhlYiB9LAorCXsgMHhkMDBkLCAwLCAyLCAweDAyIH0sCisJeyAweGQwMGEsIDAsIDgsIDB4ZjQgfSwKKwl7IDB4ZDAwYiwgMCwgMiwgMHgwMSB9LAorCXsgMHg5YmJhLCAwLCA4LCAweGY5IH0sCisJeyAweDliYzMsIDAsIDgsIDB4ZGYgfSwKKwl7IDB4OWJjNCwgMCwgOCwgMHgwMiB9LAorCXsgMHg5YmM1LCAwLCA4LCAweGViIH0sCisJeyAweDliYzYsIDAsIDgsIDB4MDIgfSwKKwl7IDB4OWJjOSwgMCwgOCwgMHg1MiB9LAorCXsgMHhkMDExLCAwLCA4LCAweDNjIH0sCisJeyAweGQwMTIsIDAsIDIsIDB4MDEgfSwKKwl7IDB4ZDAxMywgMCwgOCwgMHhmNyB9LAorCXsgMHhkMDE0LCAwLCAyLCAweDAyIH0sCisJeyAweGQwNDAsIDAsIDgsIDB4MGIgfSwKKwl7IDB4ZDA0MSwgMCwgMiwgMHgwMiB9LAorCXsgMHhkMDQyLCAwLCA4LCAweDRkIH0sCisJeyAweGQwNDMsIDAsIDIsIDB4MDAgfSwKKwl7IDB4ZDA0NSwgMSwgMSwgMHgwMCB9LAorCXsgMHg5YmNmLCAwLCAxLCAweDAxIH0sCisJeyAweGQwNDUsIDIsIDEsIDB4MDEgfSwKKwl7IDB4ZDA0ZiwgMCwgOCwgMHg5YSB9LAorCXsgMHhkMDUwLCAwLCAxLCAweDAxIH0sCisJeyAweGQwNTEsIDAsIDgsIDB4NWEgfSwKKwl7IDB4ZDA1MiwgMCwgMSwgMHgwMSB9LAorCXsgMHhkMDUzLCAwLCA4LCAweDUwIH0sCisJeyAweGQwNTQsIDAsIDgsIDB4NDYgfSwKKwl7IDB4OWJkNywgMCwgOCwgMHgwYSB9LAorCXsgMHg5YmQ4LCAwLCA4LCAweDE0IH0sCisJeyAweDliZDksIDAsIDgsIDB4MDggfSwKK307CisKKy8qIE1pY3JvdHVuZSBNVDIwNjAgdHVuZXIgaW5pdAorICAgQUY5MDEzX1RVTkVSX01UMjA2MCAgICAgPSAxMzAgKi8KK3N0YXRpYyBzdHJ1Y3QgcmVnZGVzYyB0dW5lcl9pbml0X210MjA2MFtdID0geworCXsgMHg5YmQ1LCAwLCA4LCAweDAxIH0sCisJeyAweDliZDYsIDAsIDgsIDB4MDcgfSwKKwl7IDB4ZDFhMCwgMSwgMSwgMHgwMSB9LAorCXsgMHhkMDAwLCAwLCAxLCAweDAxIH0sCisJeyAweGQwMDAsIDEsIDEsIDB4MDAgfSwKKwl7IDB4ZDAwMSwgMSwgMSwgMHgwMSB9LAorCXsgMHhkMDAxLCAwLCAxLCAweDAwIH0sCisJeyAweGQwMDEsIDUsIDEsIDB4MDAgfSwKKwl7IDB4ZDAwMiwgMCwgNSwgMHgxOSB9LAorCXsgMHhkMDAzLCAwLCA1LCAweDFhIH0sCisJeyAweGQwMDQsIDAsIDUsIDB4MTkgfSwKKwl7IDB4ZDAwNSwgMCwgNSwgMHgxYSB9LAorCXsgMHhkMDBlLCAwLCA1LCAweDEwIH0sCisJeyAweGQwMGYsIDAsIDMsIDB4MDQgfSwKKwl7IDB4ZDAwZiwgMywgMywgMHgwNSB9LAorCXsgMHhkMDEwLCAwLCAzLCAweDA0IH0sCisJeyAweGQwMTAsIDMsIDMsIDB4MDUgfSwKKwl7IDB4ZDAxNiwgNCwgNCwgMHgwMyB9LAorCXsgMHhkMDFmLCAwLCA2LCAweDBhIH0sCisJeyAweGQwMjAsIDAsIDYsIDB4MGEgfSwKKwl7IDB4OWJkYSwgMCwgOCwgMHgwMCB9LAorCXsgMHg5YmUzLCAwLCA4LCAweDAwIH0sCisJeyAweDliYmUsIDAsIDEsIDB4MDAgfSwKKwl7IDB4OWJjYywgMCwgMSwgMHgwMCB9LAorCXsgMHg5YmI5LCAwLCA4LCAweDc1IH0sCisJeyAweDliY2QsIDAsIDgsIDB4MjQgfSwKKwl7IDB4OWJmZiwgMCwgOCwgMHgzMCB9LAorCXsgMHhkMDE1LCAwLCA4LCAweDQ2IH0sCisJeyAweGQwMTYsIDAsIDEsIDB4MDAgfSwKKwl7IDB4ZDA0NCwgMCwgOCwgMHg0NiB9LAorCXsgMHhkMDQ1LCAwLCAxLCAweDAwIH0sCisJeyAweGQwMDgsIDAsIDgsIDB4MGYgfSwKKwl7IDB4ZDAwOSwgMCwgMiwgMHgwMiB9LAorCXsgMHhkMDA2LCAwLCA4LCAweDMyIH0sCisJeyAweGQwMDcsIDAsIDIsIDB4MDEgfSwKKwl7IDB4ZDAwYywgMCwgOCwgMHgzNiB9LAorCXsgMHhkMDBkLCAwLCAyLCAweDAzIH0sCisJeyAweGQwMGEsIDAsIDgsIDB4MzUgfSwKKwl7IDB4ZDAwYiwgMCwgMiwgMHgwMSB9LAorCXsgMHg5YmM3LCAwLCA4LCAweDA3IH0sCisJeyAweDliYzgsIDAsIDgsIDB4OTAgfSwKKwl7IDB4OWJjMywgMCwgOCwgMHgwZiB9LAorCXsgMHg5YmM0LCAwLCA4LCAweDAyIH0sCisJeyAweDliYzUsIDAsIDgsIDB4MzYgfSwKKwl7IDB4OWJjNiwgMCwgOCwgMHgwMyB9LAorCXsgMHg5YmJhLCAwLCA4LCAweGM5IH0sCisJeyAweDliYzksIDAsIDgsIDB4NzkgfSwKKwl7IDB4ZDAxMSwgMCwgOCwgMHgxMCB9LAorCXsgMHhkMDEyLCAwLCAyLCAweDAxIH0sCisJeyAweGQwMTMsIDAsIDgsIDB4NDUgfSwKKwl7IDB4ZDAxNCwgMCwgMiwgMHgwMyB9LAorCXsgMHhkMDQwLCAwLCA4LCAweDk4IH0sCisJeyAweGQwNDEsIDAsIDIsIDB4MDAgfSwKKwl7IDB4ZDA0MiwgMCwgOCwgMHhjZiB9LAorCXsgMHhkMDQzLCAwLCAyLCAweDAzIH0sCisJeyAweGQwNDUsIDEsIDEsIDB4MDAgfSwKKwl7IDB4OWJjZiwgMCwgMSwgMHgwMSB9LAorCXsgMHhkMDQ1LCAyLCAxLCAweDAxIH0sCisJeyAweGQwNGYsIDAsIDgsIDB4OWEgfSwKKwl7IDB4ZDA1MCwgMCwgMSwgMHgwMSB9LAorCXsgMHhkMDUxLCAwLCA4LCAweDVhIH0sCisJeyAweGQwNTIsIDAsIDEsIDB4MDEgfSwKKwl7IDB4ZDA1MywgMCwgOCwgMHg1MCB9LAorCXsgMHhkMDU0LCAwLCA4LCAweDQ2IH0sCisJeyAweDliZDcsIDAsIDgsIDB4MGEgfSwKKwl7IDB4OWJkOCwgMCwgOCwgMHgxNCB9LAorCXsgMHg5YmQ5LCAwLCA4LCAweDA4IH0sCisJeyAweDliZDAsIDAsIDgsIDB4Y2MgfSwKKwl7IDB4OWJlNCwgMCwgOCwgMHhhMCB9LAorCXsgMHg5YmJkLCAwLCA4LCAweDhlIH0sCisJeyAweDliZTIsIDAsIDgsIDB4NGQgfSwKKwl7IDB4OWJlZSwgMCwgMSwgMHgwMSB9LAorfTsKKworLyogTWljcm90dW5lIE1UMjA2MCB0dW5lciBpbml0CisgICBBRjkwMTNfVFVORVJfTVQyMDYwXzIgICA9IDE0NyAqLworc3RhdGljIHN0cnVjdCByZWdkZXNjIHR1bmVyX2luaXRfbXQyMDYwXzJbXSA9IHsKKwl7IDB4OWJkNSwgMCwgOCwgMHgwMSB9LAorCXsgMHg5YmQ2LCAwLCA4LCAweDA2IH0sCisJeyAweDliYmUsIDAsIDgsIDB4MDEgfSwKKwl7IDB4ZDFhMCwgMSwgMSwgMHgwMSB9LAorCXsgMHhkMDAwLCAwLCAxLCAweDAxIH0sCisJeyAweGQwMDAsIDEsIDEsIDB4MDAgfSwKKwl7IDB4ZDAwMSwgMSwgMSwgMHgwMSB9LAorCXsgMHhkMDAxLCAwLCAxLCAweDAwIH0sCisJeyAweGQwMDEsIDUsIDEsIDB4MDAgfSwKKwl7IDB4ZDAwMiwgMCwgNSwgMHgxOSB9LAorCXsgMHhkMDAzLCAwLCA1LCAweDFhIH0sCisJeyAweGQwMDQsIDAsIDUsIDB4MTkgfSwKKwl7IDB4ZDAwNSwgMCwgNSwgMHgxYSB9LAorCXsgMHhkMDBlLCAwLCA1LCAweDEwIH0sCisJeyAweGQwMGYsIDAsIDMsIDB4MDQgfSwKKwl7IDB4ZDAwZiwgMywgMywgMHgwNSB9LAorCXsgMHhkMDEwLCAwLCAzLCAweDA0IH0sCisJeyAweGQwMTAsIDMsIDMsIDB4MDUgfSwKKwl7IDB4ZDAxNiwgNCwgNCwgMHgwMyB9LAorCXsgMHhkMDFmLCAwLCA2LCAweDBhIH0sCisJeyAweGQwMjAsIDAsIDYsIDB4MGEgfSwKKwl7IDB4ZDAxNSwgMCwgOCwgMHg0NiB9LAorCXsgMHhkMDE2LCAwLCAxLCAweDAwIH0sCisJeyAweGQwNDQsIDAsIDgsIDB4NDYgfSwKKwl7IDB4ZDA0NSwgMCwgMSwgMHgwMCB9LAorCXsgMHhkMDA4LCAwLCA4LCAweDBmIH0sCisJeyAweGQwMDksIDAsIDIsIDB4MDIgfSwKKwl7IDB4ZDAwNiwgMCwgOCwgMHgzMiB9LAorCXsgMHhkMDA3LCAwLCAyLCAweDAxIH0sCisJeyAweGQwMGMsIDAsIDgsIDB4MzYgfSwKKwl7IDB4ZDAwZCwgMCwgMiwgMHgwMyB9LAorCXsgMHhkMDBhLCAwLCA4LCAweDM1IH0sCisJeyAweGQwMGIsIDAsIDIsIDB4MDEgfSwKKwl7IDB4OWJjNywgMCwgOCwgMHgwNyB9LAorCXsgMHg5YmM4LCAwLCA4LCAweDkwIH0sCisJeyAweDliYzMsIDAsIDgsIDB4MGYgfSwKKwl7IDB4OWJjNCwgMCwgOCwgMHgwMiB9LAorCXsgMHg5YmM1LCAwLCA4LCAweDM2IH0sCisJeyAweDliYzYsIDAsIDgsIDB4MDMgfSwKKwl7IDB4OWJiYSwgMCwgOCwgMHhjOSB9LAorCXsgMHg5YmM5LCAwLCA4LCAweDc5IH0sCisJeyAweGQwMTEsIDAsIDgsIDB4MTAgfSwKKwl7IDB4ZDAxMiwgMCwgMiwgMHgwMSB9LAorCXsgMHhkMDEzLCAwLCA4LCAweDQ1IH0sCisJeyAweGQwMTQsIDAsIDIsIDB4MDMgfSwKKwl7IDB4ZDA0MCwgMCwgOCwgMHg5OCB9LAorCXsgMHhkMDQxLCAwLCAyLCAweDAwIH0sCisJeyAweGQwNDIsIDAsIDgsIDB4Y2YgfSwKKwl7IDB4ZDA0MywgMCwgMiwgMHgwMyB9LAorCXsgMHhkMDQ1LCAxLCAxLCAweDAwIH0sCisJeyAweDliY2YsIDAsIDgsIDB4MDEgfSwKKwl7IDB4ZDA0NSwgMiwgMSwgMHgwMSB9LAorCXsgMHhkMDRmLCAwLCA4LCAweDlhIH0sCisJeyAweGQwNTAsIDAsIDEsIDB4MDEgfSwKKwl7IDB4ZDA1MSwgMCwgOCwgMHg1YSB9LAorCXsgMHhkMDUyLCAwLCAxLCAweDAxIH0sCisJeyAweGQwNTMsIDAsIDgsIDB4OTYgfSwKKwl7IDB4ZDA1NCwgMCwgOCwgMHg0NiB9LAorCXsgMHhkMDQ1LCA3LCAxLCAweDAwIH0sCisJeyAweDliZDcsIDAsIDgsIDB4MGEgfSwKKwl7IDB4OWJkOCwgMCwgOCwgMHgxNCB9LAorCXsgMHg5YmQ5LCAwLCA4LCAweDA4IH0sCit9OworCisvKiBNYXhMaW5lYXIgTVhMNTAwMyB0dW5lciBpbml0CisgICBBRjkwMTNfVFVORVJfTVhMNTAwM0QgICA9ICAgMyAqLworc3RhdGljIHN0cnVjdCByZWdkZXNjIHR1bmVyX2luaXRfbXhsNTAwM2RbXSA9IHsKKwl7IDB4OWJkNSwgMCwgOCwgMHgwMSB9LAorCXsgMHg5YmQ2LCAwLCA4LCAweDA5IH0sCisJeyAweGQxYTAsIDEsIDEsIDB4MDEgfSwKKwl7IDB4ZDAwMCwgMCwgMSwgMHgwMSB9LAorCXsgMHhkMDAwLCAxLCAxLCAweDAwIH0sCisJeyAweGQwMDEsIDEsIDEsIDB4MDEgfSwKKwl7IDB4ZDAwMSwgMCwgMSwgMHgwMCB9LAorCXsgMHhkMDAxLCA1LCAxLCAweDAwIH0sCisJeyAweGQwMDIsIDAsIDUsIDB4MTkgfSwKKwl7IDB4ZDAwMywgMCwgNSwgMHgxYSB9LAorCXsgMHhkMDA0LCAwLCA1LCAweDE5IH0sCisJeyAweGQwMDUsIDAsIDUsIDB4MWEgfSwKKwl7IDB4ZDAwZSwgMCwgNSwgMHgxMCB9LAorCXsgMHhkMDBmLCAwLCAzLCAweDA0IH0sCisJeyAweGQwMGYsIDMsIDMsIDB4MDUgfSwKKwl7IDB4ZDAxMCwgMCwgMywgMHgwNCB9LAorCXsgMHhkMDEwLCAzLCAzLCAweDA1IH0sCisJeyAweGQwMTYsIDQsIDQsIDB4MDMgfSwKKwl7IDB4ZDAxZiwgMCwgNiwgMHgwYSB9LAorCXsgMHhkMDIwLCAwLCA2LCAweDBhIH0sCisJeyAweDliZGEsIDAsIDgsIDB4MDAgfSwKKwl7IDB4OWJlMywgMCwgOCwgMHgwMCB9LAorCXsgMHg5YmZjLCAwLCA4LCAweDBmIH0sCisJeyAweDliZjYsIDAsIDgsIDB4MDEgfSwKKwl7IDB4OWJiZSwgMCwgMSwgMHgwMSB9LAorCXsgMHhkMDE1LCAwLCA4LCAweDMzIH0sCisJeyAweGQwMTYsIDAsIDEsIDB4MDAgfSwKKwl7IDB4ZDA0NCwgMCwgOCwgMHg0MCB9LAorCXsgMHhkMDQ1LCAwLCAxLCAweDAwIH0sCisJeyAweGQwMDgsIDAsIDgsIDB4MGYgfSwKKwl7IDB4ZDAwOSwgMCwgMiwgMHgwMiB9LAorCXsgMHhkMDA2LCAwLCA4LCAweDZjIH0sCisJeyAweGQwMDcsIDAsIDIsIDB4MDAgfSwKKwl7IDB4ZDAwYywgMCwgOCwgMHgzZCB9LAorCXsgMHhkMDBkLCAwLCAyLCAweDAwIH0sCisJeyAweGQwMGEsIDAsIDgsIDB4NDUgfSwKKwl7IDB4ZDAwYiwgMCwgMiwgMHgwMSB9LAorCXsgMHg5YmM3LCAwLCA4LCAweDA3IH0sCisJeyAweDliYzgsIDAsIDgsIDB4NTIgfSwKKwl7IDB4OWJjMywgMCwgOCwgMHgwZiB9LAorCXsgMHg5YmM0LCAwLCA4LCAweDAyIH0sCisJeyAweDliYzUsIDAsIDgsIDB4M2QgfSwKKwl7IDB4OWJjNiwgMCwgOCwgMHgwMCB9LAorCXsgMHg5YmJhLCAwLCA4LCAweGEyIH0sCisJeyAweDliYzksIDAsIDgsIDB4YTAgfSwKKwl7IDB4ZDAxMSwgMCwgOCwgMHg1NiB9LAorCXsgMHhkMDEyLCAwLCAyLCAweDAwIH0sCisJeyAweGQwMTMsIDAsIDgsIDB4NTAgfSwKKwl7IDB4ZDAxNCwgMCwgMiwgMHgwMCB9LAorCXsgMHhkMDQwLCAwLCA4LCAweDU2IH0sCisJeyAweGQwNDEsIDAsIDIsIDB4MDAgfSwKKwl7IDB4ZDA0MiwgMCwgOCwgMHg1MCB9LAorCXsgMHhkMDQzLCAwLCAyLCAweDAwIH0sCisJeyAweGQwNDUsIDEsIDEsIDB4MDAgfSwKKwl7IDB4OWJjZiwgMCwgOCwgMHgwMSB9LAorCXsgMHhkMDQ1LCAyLCAxLCAweDAxIH0sCisJeyAweGQwNGYsIDAsIDgsIDB4OWEgfSwKKwl7IDB4ZDA1MCwgMCwgMSwgMHgwMSB9LAorCXsgMHhkMDUxLCAwLCA4LCAweDVhIH0sCisJeyAweGQwNTIsIDAsIDEsIDB4MDEgfSwKKwl7IDB4ZDA1MywgMCwgOCwgMHg1MCB9LAorCXsgMHhkMDU0LCAwLCA4LCAweDQ2IH0sCisJeyAweDliZDcsIDAsIDgsIDB4MGEgfSwKKwl7IDB4OWJkOCwgMCwgOCwgMHgxNCB9LAorCXsgMHg5YmQ5LCAwLCA4LCAweDA4IH0sCit9OworCisvKiBNYXhMaW5lYXIgTVhMNTAwNSB0dW5lciBpbml0CisgICBBRjkwMTNfVFVORVJfTVhMNTAwNUQgICA9ICAxMworICAgQUY5MDEzX1RVTkVSX01YTDUwMDVSICAgPSAgMzAgKi8KK3N0YXRpYyBzdHJ1Y3QgcmVnZGVzYyB0dW5lcl9pbml0X214bDUwMDVbXSA9IHsKKwl7IDB4OWJkNSwgMCwgOCwgMHgwMSB9LAorCXsgMHg5YmQ2LCAwLCA4LCAweDA3IH0sCisJeyAweGQxYTAsIDEsIDEsIDB4MDEgfSwKKwl7IDB4ZDAwMCwgMCwgMSwgMHgwMSB9LAorCXsgMHhkMDAwLCAxLCAxLCAweDAwIH0sCisJeyAweGQwMDEsIDEsIDEsIDB4MDEgfSwKKwl7IDB4ZDAwMSwgMCwgMSwgMHgwMCB9LAorCXsgMHhkMDAxLCA1LCAxLCAweDAwIH0sCisJeyAweGQwMDIsIDAsIDUsIDB4MTkgfSwKKwl7IDB4ZDAwMywgMCwgNSwgMHgxYSB9LAorCXsgMHhkMDA0LCAwLCA1LCAweDE5IH0sCisJeyAweGQwMDUsIDAsIDUsIDB4MWEgfSwKKwl7IDB4ZDAwZSwgMCwgNSwgMHgxMCB9LAorCXsgMHhkMDBmLCAwLCAzLCAweDA0IH0sCisJeyAweGQwMGYsIDMsIDMsIDB4MDUgfSwKKwl7IDB4ZDAxMCwgMCwgMywgMHgwNCB9LAorCXsgMHhkMDEwLCAzLCAzLCAweDA1IH0sCisJeyAweGQwMTYsIDQsIDQsIDB4MDMgfSwKKwl7IDB4ZDAxZiwgMCwgNiwgMHgwYSB9LAorCXsgMHhkMDIwLCAwLCA2LCAweDBhIH0sCisJeyAweDliZGEsIDAsIDgsIDB4MDEgfSwKKwl7IDB4OWJlMywgMCwgOCwgMHgwMSB9LAorCXsgMHg5YmJlLCAwLCAxLCAweDAxIH0sCisJeyAweDliY2MsIDAsIDEsIDB4MDEgfSwKKwl7IDB4OWJiOSwgMCwgOCwgMHgwMCB9LAorCXsgMHg5YmNkLCAwLCA4LCAweDI4IH0sCisJeyAweDliZmYsIDAsIDgsIDB4MjQgfSwKKwl7IDB4ZDAxNSwgMCwgOCwgMHg0MCB9LAorCXsgMHhkMDE2LCAwLCAxLCAweDAwIH0sCisJeyAweGQwNDQsIDAsIDgsIDB4NDAgfSwKKwl7IDB4ZDA0NSwgMCwgMSwgMHgwMCB9LAorCXsgMHhkMDA4LCAwLCA4LCAweDBmIH0sCisJeyAweGQwMDksIDAsIDIsIDB4MDIgfSwKKwl7IDB4ZDAwNiwgMCwgOCwgMHg3MyB9LAorCXsgMHhkMDA3LCAwLCAyLCAweDAxIH0sCisJeyAweGQwMGMsIDAsIDgsIDB4ZmEgfSwKKwl7IDB4ZDAwZCwgMCwgMiwgMHgwMSB9LAorCXsgMHhkMDBhLCAwLCA4LCAweGZmIH0sCisJeyAweGQwMGIsIDAsIDIsIDB4MDEgfSwKKwl7IDB4OWJjNywgMCwgOCwgMHgyMyB9LAorCXsgMHg5YmM4LCAwLCA4LCAweDU1IH0sCisJeyAweDliYzMsIDAsIDgsIDB4MDEgfSwKKwl7IDB4OWJjNCwgMCwgOCwgMHgwMiB9LAorCXsgMHg5YmM1LCAwLCA4LCAweGZhIH0sCisJeyAweDliYzYsIDAsIDgsIDB4MDEgfSwKKwl7IDB4OWJiYSwgMCwgOCwgMHhmZiB9LAorCXsgMHg5YmM5LCAwLCA4LCAweGZmIH0sCisJeyAweDliZDMsIDAsIDgsIDB4OTUgfSwKKwl7IDB4ZDAxMSwgMCwgOCwgMHg3MCB9LAorCXsgMHhkMDEyLCAwLCAyLCAweDAxIH0sCisJeyAweGQwMTMsIDAsIDgsIDB4ZmIgfSwKKwl7IDB4ZDAxNCwgMCwgMiwgMHgwMSB9LAorCXsgMHhkMDQwLCAwLCA4LCAweDcwIH0sCisJeyAweGQwNDEsIDAsIDIsIDB4MDEgfSwKKwl7IDB4ZDA0MiwgMCwgOCwgMHhmYiB9LAorCXsgMHhkMDQzLCAwLCAyLCAweDAxIH0sCisJeyAweGQwNDUsIDEsIDEsIDB4MDAgfSwKKwl7IDB4OWJjZiwgMCwgMSwgMHgwMSB9LAorCXsgMHhkMDQ1LCAyLCAxLCAweDAxIH0sCisJeyAweGQwNGYsIDAsIDgsIDB4OWEgfSwKKwl7IDB4ZDA1MCwgMCwgMSwgMHgwMSB9LAorCXsgMHhkMDUxLCAwLCA4LCAweDVhIH0sCisJeyAweGQwNTIsIDAsIDEsIDB4MDEgfSwKKwl7IDB4ZDA1MywgMCwgOCwgMHg1MCB9LAorCXsgMHhkMDU0LCAwLCA4LCAweDQ2IH0sCisJeyAweDliZDcsIDAsIDgsIDB4MGEgfSwKKwl7IDB4OWJkOCwgMCwgOCwgMHgxNCB9LAorCXsgMHg5YmQ5LCAwLCA4LCAweDA4IH0sCisJeyAweDliZDAsIDAsIDgsIDB4OTMgfSwKKwl7IDB4OWJlNCwgMCwgOCwgMHhmZSB9LAorCXsgMHg5YmJkLCAwLCA4LCAweDYzIH0sCisJeyAweDliZTIsIDAsIDgsIDB4ZmUgfSwKKwl7IDB4OWJlZSwgMCwgMSwgMHgwMSB9LAorfTsKKworLyogUXVhbnRlayBRVDEwMTAgdHVuZXIgaW5pdAorICAgQUY5MDEzX1RVTkVSX1FUMTAxMCAgICAgPSAxMzQKKyAgIEFGOTAxM19UVU5FUl9RVDEwMTBBICAgID0gMTYyICovCitzdGF0aWMgc3RydWN0IHJlZ2Rlc2MgdHVuZXJfaW5pdF9xdDEwMTBbXSA9IHsKKwl7IDB4OWJkNSwgMCwgOCwgMHgwMSB9LAorCXsgMHg5YmQ2LCAwLCA4LCAweDA5IH0sCisJeyAweGQxYTAsIDEsIDEsIDB4MDEgfSwKKwl7IDB4ZDAwMCwgMCwgMSwgMHgwMSB9LAorCXsgMHhkMDAwLCAxLCAxLCAweDAwIH0sCisJeyAweGQwMDEsIDEsIDEsIDB4MDEgfSwKKwl7IDB4ZDAwMSwgMCwgMSwgMHgwMCB9LAorCXsgMHhkMDAxLCA1LCAxLCAweDAwIH0sCisJeyAweGQwMDIsIDAsIDUsIDB4MTkgfSwKKwl7IDB4ZDAwMywgMCwgNSwgMHgxYSB9LAorCXsgMHhkMDA0LCAwLCA1LCAweDE5IH0sCisJeyAweGQwMDUsIDAsIDUsIDB4MWEgfSwKKwl7IDB4ZDAwZSwgMCwgNSwgMHgxMCB9LAorCXsgMHhkMDBmLCAwLCAzLCAweDA0IH0sCisJeyAweGQwMGYsIDMsIDMsIDB4MDUgfSwKKwl7IDB4ZDAxMCwgMCwgMywgMHgwNCB9LAorCXsgMHhkMDEwLCAzLCAzLCAweDA1IH0sCisJeyAweGQwMTYsIDQsIDQsIDB4MDMgfSwKKwl7IDB4ZDAxZiwgMCwgNiwgMHgwYSB9LAorCXsgMHhkMDIwLCAwLCA2LCAweDBhIH0sCisJeyAweDliZGEsIDAsIDgsIDB4MDEgfSwKKwl7IDB4OWJlMywgMCwgOCwgMHgwMSB9LAorCXsgMHhkMDE1LCAwLCA4LCAweDQ2IH0sCisJeyAweGQwMTYsIDAsIDEsIDB4MDAgfSwKKwl7IDB4ZDA0NCwgMCwgOCwgMHg0NiB9LAorCXsgMHhkMDQ1LCAwLCAxLCAweDAwIH0sCisJeyAweDliYmUsIDAsIDEsIDB4MDEgfSwKKwl7IDB4OWJjYywgMCwgMSwgMHgwMSB9LAorCXsgMHg5YmI5LCAwLCA4LCAweDAwIH0sCisJeyAweDliY2QsIDAsIDgsIDB4MjggfSwKKwl7IDB4OWJmZiwgMCwgOCwgMHgyMCB9LAorCXsgMHhkMDA4LCAwLCA4LCAweDBmIH0sCisJeyAweGQwMDksIDAsIDIsIDB4MDIgfSwKKwl7IDB4ZDAwNiwgMCwgOCwgMHg5OSB9LAorCXsgMHhkMDA3LCAwLCAyLCAweDAxIH0sCisJeyAweGQwMGMsIDAsIDgsIDB4MGYgfSwKKwl7IDB4ZDAwZCwgMCwgMiwgMHgwMiB9LAorCXsgMHhkMDBhLCAwLCA4LCAweDUwIH0sCisJeyAweGQwMGIsIDAsIDIsIDB4MDEgfSwKKwl7IDB4OWJjNywgMCwgOCwgMHgwMCB9LAorCXsgMHg5YmM4LCAwLCA4LCAweDAwIH0sCisJeyAweDliYzMsIDAsIDgsIDB4MGYgfSwKKwl7IDB4OWJjNCwgMCwgOCwgMHgwMiB9LAorCXsgMHg5YmM1LCAwLCA4LCAweDBmIH0sCisJeyAweDliYzYsIDAsIDgsIDB4MDIgfSwKKwl7IDB4OWJiYSwgMCwgOCwgMHhjNSB9LAorCXsgMHg5YmM5LCAwLCA4LCAweGZmIH0sCisJeyAweGQwMTEsIDAsIDgsIDB4NTggfSwKKwl7IDB4ZDAxMiwgMCwgMiwgMHgwMiB9LAorCXsgMHhkMDEzLCAwLCA4LCAweDg5IH0sCisJeyAweGQwMTQsIDAsIDIsIDB4MDEgfSwKKwl7IDB4ZDA0MCwgMCwgOCwgMHg1OCB9LAorCXsgMHhkMDQxLCAwLCAyLCAweDAyIH0sCisJeyAweGQwNDIsIDAsIDgsIDB4ODkgfSwKKwl7IDB4ZDA0MywgMCwgMiwgMHgwMSB9LAorCXsgMHhkMDQ1LCAxLCAxLCAweDAwIH0sCisJeyAweDliY2YsIDAsIDEsIDB4MDEgfSwKKwl7IDB4ZDA0NSwgMiwgMSwgMHgwMSB9LAorCXsgMHhkMDRmLCAwLCA4LCAweDlhIH0sCisJeyAweGQwNTAsIDAsIDEsIDB4MDEgfSwKKwl7IDB4ZDA1MSwgMCwgOCwgMHg1YSB9LAorCXsgMHhkMDUyLCAwLCAxLCAweDAxIH0sCisJeyAweGQwNTMsIDAsIDgsIDB4NTAgfSwKKwl7IDB4ZDA1NCwgMCwgOCwgMHg0NiB9LAorCXsgMHg5YmQ3LCAwLCA4LCAweDBhIH0sCisJeyAweDliZDgsIDAsIDgsIDB4MTQgfSwKKwl7IDB4OWJkOSwgMCwgOCwgMHgwOCB9LAorCXsgMHg5YmQwLCAwLCA4LCAweGNkIH0sCisJeyAweDliZTQsIDAsIDgsIDB4YmIgfSwKKwl7IDB4OWJiZCwgMCwgOCwgMHg5MyB9LAorCXsgMHg5YmUyLCAwLCA4LCAweDgwIH0sCisJeyAweDliZWUsIDAsIDEsIDB4MDEgfSwKK307CisKKy8qIEZyZWVzY2FsZSBNQzQ0UzgwMyB0dW5lciBpbml0CisgICBBRjkwMTNfVFVORVJfTUM0NFM4MDMgICA9IDEzMyAqLworc3RhdGljIHN0cnVjdCByZWdkZXNjIHR1bmVyX2luaXRfbWM0NHM4MDNbXSA9IHsKKwl7IDB4OWJkNSwgMCwgOCwgMHgwMSB9LAorCXsgMHg5YmQ2LCAwLCA4LCAweDA2IH0sCisJeyAweGQxYTAsIDEsIDEsIDB4MDEgfSwKKwl7IDB4ZDAwMCwgMCwgMSwgMHgwMSB9LAorCXsgMHhkMDAwLCAxLCAxLCAweDAwIH0sCisJeyAweGQwMDEsIDEsIDEsIDB4MDEgfSwKKwl7IDB4ZDAwMSwgMCwgMSwgMHgwMCB9LAorCXsgMHhkMDAxLCA1LCAxLCAweDAwIH0sCisJeyAweGQwMDIsIDAsIDUsIDB4MTkgfSwKKwl7IDB4ZDAwMywgMCwgNSwgMHgxYSB9LAorCXsgMHhkMDA0LCAwLCA1LCAweDE5IH0sCisJeyAweGQwMDUsIDAsIDUsIDB4MWEgfSwKKwl7IDB4ZDAwZSwgMCwgNSwgMHgxMCB9LAorCXsgMHhkMDBmLCAwLCAzLCAweDA0IH0sCisJeyAweGQwMGYsIDMsIDMsIDB4MDUgfSwKKwl7IDB4ZDAxMCwgMCwgMywgMHgwNCB9LAorCXsgMHhkMDEwLCAzLCAzLCAweDA1IH0sCisJeyAweGQwMTYsIDQsIDQsIDB4MDMgfSwKKwl7IDB4ZDAxZiwgMCwgNiwgMHgwYSB9LAorCXsgMHhkMDIwLCAwLCA2LCAweDBhIH0sCisJeyAweDliZGEsIDAsIDgsIDB4MDAgfSwKKwl7IDB4OWJlMywgMCwgOCwgMHgwMCB9LAorCXsgMHg5YmY2LCAwLCA4LCAweDAxIH0sCisJeyAweDliZjgsIDAsIDgsIDB4MDIgfSwKKwl7IDB4OWJmOSwgMCwgOCwgMHgwMiB9LAorCXsgMHg5YmZjLCAwLCA4LCAweDFmIH0sCisJeyAweDliYmUsIDAsIDEsIDB4MDEgfSwKKwl7IDB4OWJjYywgMCwgMSwgMHgwMSB9LAorCXsgMHg5YmI5LCAwLCA4LCAweDAwIH0sCisJeyAweDliY2QsIDAsIDgsIDB4MjQgfSwKKwl7IDB4OWJmZiwgMCwgOCwgMHgyNCB9LAorCXsgMHhkMDE1LCAwLCA4LCAweDQ2IH0sCisJeyAweGQwMTYsIDAsIDEsIDB4MDAgfSwKKwl7IDB4ZDA0NCwgMCwgOCwgMHg0NiB9LAorCXsgMHhkMDQ1LCAwLCAxLCAweDAwIH0sCisJeyAweGQwMDgsIDAsIDgsIDB4MDEgfSwKKwl7IDB4ZDAwOSwgMCwgMiwgMHgwMiB9LAorCXsgMHhkMDA2LCAwLCA4LCAweDdiIH0sCisJeyAweGQwMDcsIDAsIDIsIDB4MDAgfSwKKwl7IDB4ZDAwYywgMCwgOCwgMHg3YyB9LAorCXsgMHhkMDBkLCAwLCAyLCAweDAyIH0sCisJeyAweGQwMGEsIDAsIDgsIDB4ZmUgfSwKKwl7IDB4ZDAwYiwgMCwgMiwgMHgwMSB9LAorCXsgMHg5YmM3LCAwLCA4LCAweDA4IH0sCisJeyAweDliYzgsIDAsIDgsIDB4OWEgfSwKKwl7IDB4OWJjMywgMCwgOCwgMHgwMSB9LAorCXsgMHg5YmM0LCAwLCA4LCAweDAyIH0sCisJeyAweDliYzUsIDAsIDgsIDB4N2MgfSwKKwl7IDB4OWJjNiwgMCwgOCwgMHgwMiB9LAorCXsgMHg5YmJhLCAwLCA4LCAweGZjIH0sCisJeyAweDliYzksIDAsIDgsIDB4YWEgfSwKKwl7IDB4ZDAxMSwgMCwgOCwgMHg2YiB9LAorCXsgMHhkMDEyLCAwLCAyLCAweDAwIH0sCisJeyAweGQwMTMsIDAsIDgsIDB4ODggfSwKKwl7IDB4ZDAxNCwgMCwgMiwgMHgwMiB9LAorCXsgMHhkMDQwLCAwLCA4LCAweDZiIH0sCisJeyAweGQwNDEsIDAsIDIsIDB4MDAgfSwKKwl7IDB4ZDA0MiwgMCwgOCwgMHg3YyB9LAorCXsgMHhkMDQzLCAwLCAyLCAweDAyIH0sCisJeyAweGQwNDUsIDEsIDEsIDB4MDAgfSwKKwl7IDB4OWJjZiwgMCwgMSwgMHgwMSB9LAorCXsgMHhkMDQ1LCAyLCAxLCAweDAxIH0sCisJeyAweGQwNGYsIDAsIDgsIDB4OWEgfSwKKwl7IDB4ZDA1MCwgMCwgMSwgMHgwMSB9LAorCXsgMHhkMDUxLCAwLCA4LCAweDVhIH0sCisJeyAweGQwNTIsIDAsIDEsIDB4MDEgfSwKKwl7IDB4ZDA1MywgMCwgOCwgMHg1MCB9LAorCXsgMHhkMDU0LCAwLCA4LCAweDQ2IH0sCisJeyAweDliZDcsIDAsIDgsIDB4MGEgfSwKKwl7IDB4OWJkOCwgMCwgOCwgMHgxNCB9LAorCXsgMHg5YmQ5LCAwLCA4LCAweDA4IH0sCisJeyAweDliZDAsIDAsIDgsIDB4OWUgfSwKKwl7IDB4OWJlNCwgMCwgOCwgMHhmZiB9LAorCXsgMHg5YmJkLCAwLCA4LCAweDllIH0sCisJeyAweDliZTIsIDAsIDgsIDB4MjUgfSwKKwl7IDB4OWJlZSwgMCwgMSwgMHgwMSB9LAorCXsgMHhkNzNiLCAzLCAxLCAweDAwIH0sCit9OworCisvKiB1bmtub3duLCBwcm9iYWJseSBmb3IgdGluIGNhbiB0dW5lciwgdHVuZXIgaW5pdAorICAgQUY5MDEzX1RVTkVSX1VOS05PV04gICA9IDE0MCAqLworc3RhdGljIHN0cnVjdCByZWdkZXNjIHR1bmVyX2luaXRfdW5rbm93bltdID0geworCXsgMHg5YmQ1LCAwLCA4LCAweDAxIH0sCisJeyAweDliZDYsIDAsIDgsIDB4MDIgfSwKKwl7IDB4ZDFhMCwgMSwgMSwgMHgwMSB9LAorCXsgMHhkMDAwLCAwLCAxLCAweDAxIH0sCisJeyAweGQwMDAsIDEsIDEsIDB4MDAgfSwKKwl7IDB4ZDAwMSwgMSwgMSwgMHgwMSB9LAorCXsgMHhkMDAxLCAwLCAxLCAweDAwIH0sCisJeyAweGQwMDEsIDUsIDEsIDB4MDAgfSwKKwl7IDB4ZDAwMiwgMCwgNSwgMHgxOSB9LAorCXsgMHhkMDAzLCAwLCA1LCAweDFhIH0sCisJeyAweGQwMDQsIDAsIDUsIDB4MTkgfSwKKwl7IDB4ZDAwNSwgMCwgNSwgMHgxYSB9LAorCXsgMHhkMDBlLCAwLCA1LCAweDEwIH0sCisJeyAweGQwMGYsIDAsIDMsIDB4MDQgfSwKKwl7IDB4ZDAwZiwgMywgMywgMHgwNSB9LAorCXsgMHhkMDEwLCAwLCAzLCAweDA0IH0sCisJeyAweGQwMTAsIDMsIDMsIDB4MDUgfSwKKwl7IDB4ZDAxNiwgNCwgNCwgMHgwMyB9LAorCXsgMHhkMDFmLCAwLCA2LCAweDBhIH0sCisJeyAweGQwMjAsIDAsIDYsIDB4MGEgfSwKKwl7IDB4OWJkYSwgMCwgOCwgMHgwMSB9LAorCXsgMHg5YmUzLCAwLCA4LCAweDAxIH0sCisJeyAweGQxYTAsIDEsIDEsIDB4MDAgfSwKKwl7IDB4OWJiZSwgMCwgMSwgMHgwMSB9LAorCXsgMHg5YmNjLCAwLCAxLCAweDAxIH0sCisJeyAweDliYjksIDAsIDgsIDB4MDAgfSwKKwl7IDB4OWJjZCwgMCwgOCwgMHgxOCB9LAorCXsgMHg5YmZmLCAwLCA4LCAweDJjIH0sCisJeyAweGQwMTUsIDAsIDgsIDB4NDYgfSwKKwl7IDB4ZDAxNiwgMCwgMSwgMHgwMCB9LAorCXsgMHhkMDQ0LCAwLCA4LCAweDQ2IH0sCisJeyAweGQwNDUsIDAsIDEsIDB4MDAgfSwKKwl7IDB4ZDAwOCwgMCwgOCwgMHhkZiB9LAorCXsgMHhkMDA5LCAwLCAyLCAweDAyIH0sCisJeyAweGQwMDYsIDAsIDgsIDB4NDQgfSwKKwl7IDB4ZDAwNywgMCwgMiwgMHgwMSB9LAorCXsgMHhkMDBjLCAwLCA4LCAweDAwIH0sCisJeyAweGQwMGQsIDAsIDIsIDB4MDIgfSwKKwl7IDB4ZDAwYSwgMCwgOCwgMHhmNiB9LAorCXsgMHhkMDBiLCAwLCAyLCAweDAxIH0sCisJeyAweDliYmEsIDAsIDgsIDB4ZjkgfSwKKwl7IDB4OWJjOCwgMCwgOCwgMHhhYSB9LAorCXsgMHg5YmMzLCAwLCA4LCAweGRmIH0sCisJeyAweDliYzQsIDAsIDgsIDB4MDIgfSwKKwl7IDB4OWJjNSwgMCwgOCwgMHgwMCB9LAorCXsgMHg5YmM2LCAwLCA4LCAweDAyIH0sCisJeyAweDliYzksIDAsIDgsIDB4ZjAgfSwKKwl7IDB4ZDAxMSwgMCwgOCwgMHgzYyB9LAorCXsgMHhkMDEyLCAwLCAyLCAweDAxIH0sCisJeyAweGQwMTMsIDAsIDgsIDB4ZjcgfSwKKwl7IDB4ZDAxNCwgMCwgMiwgMHgwMiB9LAorCXsgMHhkMDQwLCAwLCA4LCAweDBiIH0sCisJeyAweGQwNDEsIDAsIDIsIDB4MDIgfSwKKwl7IDB4ZDA0MiwgMCwgOCwgMHg0ZCB9LAorCXsgMHhkMDQzLCAwLCAyLCAweDAwIH0sCisJeyAweGQwNDUsIDEsIDEsIDB4MDAgfSwKKwl7IDB4OWJjZiwgMCwgMSwgMHgwMSB9LAorCXsgMHhkMDQ1LCAyLCAxLCAweDAxIH0sCisJeyAweGQwNGYsIDAsIDgsIDB4OWEgfSwKKwl7IDB4ZDA1MCwgMCwgMSwgMHgwMSB9LAorCXsgMHhkMDUxLCAwLCA4LCAweDVhIH0sCisJeyAweGQwNTIsIDAsIDEsIDB4MDEgfSwKKwl7IDB4ZDA1MywgMCwgOCwgMHg1MCB9LAorCXsgMHhkMDU0LCAwLCA4LCAweDQ2IH0sCisJeyAweDliZDcsIDAsIDgsIDB4MGEgfSwKKwl7IDB4OWJkOCwgMCwgOCwgMHgxNCB9LAorCXsgMHg5YmQ5LCAwLCA4LCAweDA4IH0sCit9OworCisvKiBOWFAgVERBMTgyNzEgdHVuZXIgaW5pdAorICAgQUY5MDEzX1RVTkVSX1REQTE4MjcxICAgPSAxNTYgKi8KK3N0YXRpYyBzdHJ1Y3QgcmVnZGVzYyB0dW5lcl9pbml0X3RkYTE4MjcxW10gPSB7CisJeyAweDliZDUsIDAsIDgsIDB4MDEgfSwKKwl7IDB4OWJkNiwgMCwgOCwgMHgwNCB9LAorCXsgMHhkMWEwLCAxLCAxLCAweDAxIH0sCisJeyAweGQwMDAsIDAsIDEsIDB4MDEgfSwKKwl7IDB4ZDAwMCwgMSwgMSwgMHgwMCB9LAorCXsgMHhkMDAxLCAxLCAxLCAweDAxIH0sCisJeyAweGQwMDEsIDAsIDEsIDB4MDAgfSwKKwl7IDB4ZDAwMSwgNSwgMSwgMHgwMCB9LAorCXsgMHhkMDAyLCAwLCA1LCAweDE5IH0sCisJeyAweGQwMDMsIDAsIDUsIDB4MWEgfSwKKwl7IDB4ZDAwNCwgMCwgNSwgMHgxOSB9LAorCXsgMHhkMDA1LCAwLCA1LCAweDFhIH0sCisJeyAweGQwMGUsIDAsIDUsIDB4MTAgfSwKKwl7IDB4ZDAwZiwgMCwgMywgMHgwNCB9LAorCXsgMHhkMDBmLCAzLCAzLCAweDA1IH0sCisJeyAweGQwMTAsIDAsIDMsIDB4MDQgfSwKKwl7IDB4ZDAxMCwgMywgMywgMHgwNSB9LAorCXsgMHhkMDE2LCA0LCA0LCAweDAzIH0sCisJeyAweGQwMWYsIDAsIDYsIDB4MGEgfSwKKwl7IDB4ZDAyMCwgMCwgNiwgMHgwYSB9LAorCXsgMHg5YmRhLCAwLCA4LCAweDAxIH0sCisJeyAweDliZTMsIDAsIDgsIDB4MDEgfSwKKwl7IDB4ZDFhMCwgMSwgMSwgMHgwMCB9LAorCXsgMHg5YmJlLCAwLCAxLCAweDAxIH0sCisJeyAweDliY2MsIDAsIDEsIDB4MDEgfSwKKwl7IDB4OWJiOSwgMCwgOCwgMHgwMCB9LAorCXsgMHg5YmNkLCAwLCA4LCAweDE4IH0sCisJeyAweDliZmYsIDAsIDgsIDB4MmMgfSwKKwl7IDB4ZDAxNSwgMCwgOCwgMHg0NiB9LAorCXsgMHhkMDE2LCAwLCAxLCAweDAwIH0sCisJeyAweGQwNDQsIDAsIDgsIDB4NDYgfSwKKwl7IDB4ZDA0NSwgMCwgMSwgMHgwMCB9LAorCXsgMHhkMDA4LCAwLCA4LCAweGRmIH0sCisJeyAweGQwMDksIDAsIDIsIDB4MDIgfSwKKwl7IDB4ZDAwNiwgMCwgOCwgMHg0NCB9LAorCXsgMHhkMDA3LCAwLCAyLCAweDAxIH0sCisJeyAweGQwMGMsIDAsIDgsIDB4MDAgfSwKKwl7IDB4ZDAwZCwgMCwgMiwgMHgwMiB9LAorCXsgMHhkMDBhLCAwLCA4LCAweGY2IH0sCisJeyAweGQwMGIsIDAsIDIsIDB4MDEgfSwKKwl7IDB4OWJiYSwgMCwgOCwgMHhmOSB9LAorCXsgMHg5YmM4LCAwLCA4LCAweGFhIH0sCisJeyAweDliYzMsIDAsIDgsIDB4ZGYgfSwKKwl7IDB4OWJjNCwgMCwgOCwgMHgwMiB9LAorCXsgMHg5YmM1LCAwLCA4LCAweDAwIH0sCisJeyAweDliYzYsIDAsIDgsIDB4MDIgfSwKKwl7IDB4OWJjOSwgMCwgOCwgMHhmMCB9LAorCXsgMHhkMDExLCAwLCA4LCAweDNjIH0sCisJeyAweGQwMTIsIDAsIDIsIDB4MDEgfSwKKwl7IDB4ZDAxMywgMCwgOCwgMHhmNyB9LAorCXsgMHhkMDE0LCAwLCAyLCAweDAyIH0sCisJeyAweGQwNDAsIDAsIDgsIDB4MGIgfSwKKwl7IDB4ZDA0MSwgMCwgMiwgMHgwMiB9LAorCXsgMHhkMDQyLCAwLCA4LCAweDRkIH0sCisJeyAweGQwNDMsIDAsIDIsIDB4MDAgfSwKKwl7IDB4ZDA0NSwgMSwgMSwgMHgwMCB9LAorCXsgMHg5YmNmLCAwLCAxLCAweDAxIH0sCisJeyAweGQwNDUsIDIsIDEsIDB4MDEgfSwKKwl7IDB4ZDA0ZiwgMCwgOCwgMHg5YSB9LAorCXsgMHhkMDUwLCAwLCAxLCAweDAxIH0sCisJeyAweGQwNTEsIDAsIDgsIDB4NWEgfSwKKwl7IDB4ZDA1MiwgMCwgMSwgMHgwMSB9LAorCXsgMHhkMDUzLCAwLCA4LCAweDUwIH0sCisJeyAweGQwNTQsIDAsIDgsIDB4NDYgfSwKKwl7IDB4OWJkNywgMCwgOCwgMHgwYSB9LAorCXsgMHg5YmQ4LCAwLCA4LCAweDE0IH0sCisJeyAweDliZDksIDAsIDgsIDB4MDggfSwKKwl7IDB4OWJkMCwgMCwgOCwgMHhhOCB9LAorCXsgMHg5YmU0LCAwLCA4LCAweDdmIH0sCisJeyAweDliYmQsIDAsIDgsIDB4YTggfSwKKwl7IDB4OWJlMiwgMCwgOCwgMHgyMCB9LAorCXsgMHg5YmVlLCAwLCAxLCAweDAxIH0sCit9OworCisjZW5kaWYgLyogX0FGOTAxM19QUklWXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2F1ODUyMi5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2F1ODUyMi5jCmluZGV4IDBiODJjYzIuLmVhYmY5YTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9hdTg1MjIuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvYXU4NTIyLmMKQEAgLTQwLDYgKzQwLDggQEAKIAl1MzIgY3VycmVudF9mcmVxdWVuY3k7CiAJZmVfbW9kdWxhdGlvbl90IGN1cnJlbnRfbW9kdWxhdGlvbjsKIAorCXUzMiBmZV9zdGF0dXM7CisJdW5zaWduZWQgaW50IGxlZF9zdGF0ZTsKIH07CiAKIHN0YXRpYyBpbnQgZGVidWc7CkBAIC01MzgsMTEgKzU0MCw5OCBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IGF1ODUyMl9sZWRfZ3Bpb19lbmFibGUoc3RydWN0IGF1ODUyMl9zdGF0ZSAqc3RhdGUsIGludCBvbm9mZikKK3sKKwlzdHJ1Y3QgYXU4NTIyX2xlZF9jb25maWcgKmxlZF9jb25maWcgPSBzdGF0ZS0+Y29uZmlnLT5sZWRfY2ZnOworCXU4IHZhbDsKKworCS8qIGJhaWwgb3V0IGlmIHdlIGNhbnQgY29udHJvbCBhbiBMRUQgKi8KKwlpZiAoIWxlZF9jb25maWcgfHwgIWxlZF9jb25maWctPmdwaW9fb3V0cHV0IHx8CisJICAgICFsZWRfY29uZmlnLT5ncGlvX291dHB1dF9lbmFibGUgfHwgIWxlZF9jb25maWctPmdwaW9fb3V0cHV0X2Rpc2FibGUpCisJCXJldHVybiAwOworCisJdmFsID0gYXU4NTIyX3JlYWRyZWcoc3RhdGUsIDB4NDAwMCB8CisJCQkgICAgIChsZWRfY29uZmlnLT5ncGlvX291dHB1dCAmIH4weGMwMDApKTsKKwlpZiAob25vZmYpIHsKKwkJLyogZW5hYmxlIEdQSU8gb3V0cHV0ICovCisJCXZhbCAmPSB+KChsZWRfY29uZmlnLT5ncGlvX291dHB1dF9lbmFibGUgPj4gOCkgJiAweGZmKTsKKwkJdmFsIHw9ICAobGVkX2NvbmZpZy0+Z3Bpb19vdXRwdXRfZW5hYmxlICYgMHhmZik7CisJfSBlbHNlIHsKKwkJLyogZGlzYWJsZSBHUElPIG91dHB1dCAqLworCQl2YWwgJj0gfigobGVkX2NvbmZpZy0+Z3Bpb19vdXRwdXRfZGlzYWJsZSA+PiA4KSAmIDB4ZmYpOworCQl2YWwgfD0gIChsZWRfY29uZmlnLT5ncGlvX291dHB1dF9kaXNhYmxlICYgMHhmZik7CisJfQorCXJldHVybiBhdTg1MjJfd3JpdGVyZWcoc3RhdGUsIDB4ODAwMCB8CisJCQkgICAgICAgKGxlZF9jb25maWctPmdwaW9fb3V0cHV0ICYgfjB4YzAwMCksIHZhbCk7Cit9CisKKy8qIGxlZCA9IDAgfCBvZmYKKyAqIGxlZCA9IDEgfCBzaWduYWwgb2sKKyAqIGxlZCA9IDIgfCBzaWduYWwgc3Ryb25nCisgKiBsZWQgPCAwIHwgb25seSBsaWdodCBsZWQgaWYgbGVkcyBhcmUgY3VycmVudGx5IG9mZgorICovCitzdGF0aWMgaW50IGF1ODUyMl9sZWRfY3RybChzdHJ1Y3QgYXU4NTIyX3N0YXRlICpzdGF0ZSwgaW50IGxlZCkKK3sKKwlzdHJ1Y3QgYXU4NTIyX2xlZF9jb25maWcgKmxlZF9jb25maWcgPSBzdGF0ZS0+Y29uZmlnLT5sZWRfY2ZnOworCWludCBpLCByZXQgPSAwOworCisJLyogYmFpbCBvdXQgaWYgd2UgY2FudCBjb250cm9sIGFuIExFRCAqLworCWlmICghbGVkX2NvbmZpZyB8fCAhbGVkX2NvbmZpZy0+Z3Bpb19sZWRzIHx8CisJICAgICFsZWRfY29uZmlnLT5udW1fbGVkX3N0YXRlcyB8fCAhbGVkX2NvbmZpZy0+bGVkX3N0YXRlcykKKwkJcmV0dXJuIDA7CisKKwlpZiAobGVkIDwgMCkgeworCQkvKiBpZiBMRUQgaXMgYWxyZWFkeSBsaXQsIHRoZW4gbGVhdmUgaXQgYXMtaXMgKi8KKwkJaWYgKHN0YXRlLT5sZWRfc3RhdGUpCisJCQlyZXR1cm4gMDsKKwkJZWxzZQorCQkJbGVkICo9IC0xOworCX0KKworCS8qIHRvZ2dsZSBMRUQgaWYgY2hhbmdpbmcgc3RhdGUgKi8KKwlpZiAoc3RhdGUtPmxlZF9zdGF0ZSAhPSBsZWQpIHsKKwkJdTggdmFsOworCisJCWRwcmludGsoIiVzOiAlZFxuIiwgX19mdW5jX18sIGxlZCk7CisKKwkJYXU4NTIyX2xlZF9ncGlvX2VuYWJsZShzdGF0ZSwgMSk7CisKKwkJdmFsID0gYXU4NTIyX3JlYWRyZWcoc3RhdGUsIDB4NDAwMCB8CisJCQkJICAgICAobGVkX2NvbmZpZy0+Z3Bpb19sZWRzICYgfjB4YzAwMCkpOworCisJCS8qIHN0YXJ0IHdpdGggYWxsIGxlZHMgb2ZmICovCisJCWZvciAoaSA9IDA7IGkgPCBsZWRfY29uZmlnLT5udW1fbGVkX3N0YXRlczsgaSsrKQorCQkJdmFsICY9IH5sZWRfY29uZmlnLT5sZWRfc3RhdGVzW2ldOworCisJCS8qIHNldCBzZWxlY3RlZCBMRUQgc3RhdGUgKi8KKwkJaWYgKGxlZCA8IGxlZF9jb25maWctPm51bV9sZWRfc3RhdGVzKQorCQkJdmFsIHw9IGxlZF9jb25maWctPmxlZF9zdGF0ZXNbbGVkXTsKKwkJZWxzZSBpZiAobGVkX2NvbmZpZy0+bnVtX2xlZF9zdGF0ZXMpCisJCQl2YWwgfD0KKwkJCWxlZF9jb25maWctPmxlZF9zdGF0ZXNbbGVkX2NvbmZpZy0+bnVtX2xlZF9zdGF0ZXMgLSAxXTsKKworCQlyZXQgPSBhdTg1MjJfd3JpdGVyZWcoc3RhdGUsIDB4ODAwMCB8CisJCQkJICAgICAgKGxlZF9jb25maWctPmdwaW9fbGVkcyAmIH4weGMwMDApLCB2YWwpOworCQlpZiAocmV0IDwgMCkKKwkJCXJldHVybiByZXQ7CisKKwkJc3RhdGUtPmxlZF9zdGF0ZSA9IGxlZDsKKworCQlpZiAobGVkID09IDApCisJCQlhdTg1MjJfbGVkX2dwaW9fZW5hYmxlKHN0YXRlLCAwKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGludCBhdTg1MjJfc2xlZXAoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUpCiB7CiAJc3RydWN0IGF1ODUyMl9zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKIAlkcHJpbnRrKCIlcygpXG4iLCBfX2Z1bmNfXyk7CiAKKwkvKiB0dXJuIG9mZiBsZWQgKi8KKwlhdTg1MjJfbGVkX2N0cmwoc3RhdGUsIDApOworCiAJc3RhdGUtPmN1cnJlbnRfZnJlcXVlbmN5ID0gMDsKIAogCXJldHVybiAwOwpAQCAtNTkyLDEyICs2ODEsNTMgQEAKIAkJCSpzdGF0dXMgfD0gRkVfSEFTX0NBUlJJRVIgfCBGRV9IQVNfU0lHTkFMOwogCQlicmVhazsKIAl9CisJc3RhdGUtPmZlX3N0YXR1cyA9ICpzdGF0dXM7CisKKwlpZiAoKnN0YXR1cyAmIEZFX0hBU19MT0NLKQorCQkvKiB0dXJuIG9uIExFRCwgaWYgaXQgaXNuJ3Qgb24gYWxyZWFkeSAqLworCQlhdTg1MjJfbGVkX2N0cmwoc3RhdGUsIC0xKTsKKwllbHNlCisJCS8qIHR1cm4gb2ZmIExFRCAqLworCQlhdTg1MjJfbGVkX2N0cmwoc3RhdGUsIDApOwogCiAJZHByaW50aygiJXMoKSBzdGF0dXMgMHglMDh4XG4iLCBfX2Z1bmNfXywgKnN0YXR1cyk7CiAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBhdTg1MjJfbGVkX3N0YXR1cyhzdHJ1Y3QgYXU4NTIyX3N0YXRlICpzdGF0ZSwgY29uc3QgdTE2ICpzbnIpCit7CisJc3RydWN0IGF1ODUyMl9sZWRfY29uZmlnICpsZWRfY29uZmlnID0gc3RhdGUtPmNvbmZpZy0+bGVkX2NmZzsKKwlpbnQgbGVkOworCXUxNiBzdHJvbmc7CisKKwkvKiBiYWlsIG91dCBpZiB3ZSBjYW50IGNvbnRyb2wgYW4gTEVEICovCisJaWYgKCFsZWRfY29uZmlnKQorCQlyZXR1cm4gMDsKKworCWlmICgwID09IChzdGF0ZS0+ZmVfc3RhdHVzICYgRkVfSEFTX0xPQ0spKQorCQlyZXR1cm4gYXU4NTIyX2xlZF9jdHJsKHN0YXRlLCAwKTsKKwllbHNlIGlmIChzdGF0ZS0+Y3VycmVudF9tb2R1bGF0aW9uID09IFFBTV8yNTYpCisJCXN0cm9uZyA9IGxlZF9jb25maWctPnFhbTI1Nl9zdHJvbmc7CisJZWxzZSBpZiAoc3RhdGUtPmN1cnJlbnRfbW9kdWxhdGlvbiA9PSBRQU1fNjQpCisJCXN0cm9uZyA9IGxlZF9jb25maWctPnFhbTY0X3N0cm9uZzsKKwllbHNlIC8qIChzdGF0ZS0+Y3VycmVudF9tb2R1bGF0aW9uID09IFZTQl84KSAqLworCQlzdHJvbmcgPSBsZWRfY29uZmlnLT52c2I4X3N0cm9uZzsKKworCWlmICgqc25yID49IHN0cm9uZykKKwkJbGVkID0gMjsKKwllbHNlCisJCWxlZCA9IDE7CisKKwlpZiAoKHN0YXRlLT5sZWRfc3RhdGUpICYmCisJICAgICgoKHN0cm9uZyA8ICpzbnIpID8gKCpzbnIgLSBzdHJvbmcpIDogKHN0cm9uZyAtICpzbnIpKSA8PSAxMCkpCisJCS8qIHNuciBkaWRuJ3QgY2hhbmdlIGVub3VnaCB0byBib3RoZXIKKwkJICogY2hhbmdpbmcgdGhlIGNvbG9yIG9mIHRoZSBsZWQgKi8KKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gYXU4NTIyX2xlZF9jdHJsKHN0YXRlLCBsZWQpOworfQorCiBzdGF0aWMgaW50IGF1ODUyMl9yZWFkX3NucihzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgdTE2ICpzbnIpCiB7CiAJc3RydWN0IGF1ODUyMl9zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKQEAgLTYyMSw2ICs3NTEsOSBAQAogCQkJCQkgICAgYXU4NTIyX3JlYWRyZWcoc3RhdGUsIDB4NDMxMSksCiAJCQkJCSAgICBzbnIpOwogCisJaWYgKHN0YXRlLT5jb25maWctPmxlZF9jZmcpCisJCWF1ODUyMl9sZWRfc3RhdHVzKHN0YXRlLCBzbnIpOworCiAJcmV0dXJuIHJldDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2F1ODUyMi5oIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2F1ODUyMi5oCmluZGV4IDU5NTkxNWEuLjdiOTRmNTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9hdTg1MjIuaAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvYXU4NTIyLmgKQEAgLTMwLDYgKzMwLDIxIEBACiAJQVU4NTIyX0lGXzNfMjVNSFosCiB9OwogCitzdHJ1Y3QgYXU4NTIyX2xlZF9jb25maWcgeworCXUxNiB2c2I4X3N0cm9uZzsKKwl1MTYgcWFtNjRfc3Ryb25nOworCXUxNiBxYW0yNTZfc3Ryb25nOworCisJdTE2IGdwaW9fb3V0cHV0OworCS8qIHVuc2V0IGhpIGJpdHMsIHNldCBsb3cgYml0cyAqLworCXUxNiBncGlvX291dHB1dF9lbmFibGU7CisJdTE2IGdwaW9fb3V0cHV0X2Rpc2FibGU7CisKKwl1MTYgZ3Bpb19sZWRzOworCXU4ICpsZWRfc3RhdGVzOworCXVuc2lnbmVkIGludCBudW1fbGVkX3N0YXRlczsKK307CisKIHN0cnVjdCBhdTg1MjJfY29uZmlnIHsKIAkvKiB0aGUgZGVtb2R1bGF0b3IncyBpMmMgYWRkcmVzcyAqLwogCXU4IGRlbW9kX2FkZHJlc3M7CkBAIC0zOSw2ICs1NCw4IEBACiAjZGVmaW5lIEFVODUyMl9ERU1PRExPQ0tJTkcgMQogCXU4IHN0YXR1c19tb2RlOwogCisJc3RydWN0IGF1ODUyMl9sZWRfY29uZmlnICpsZWRfY2ZnOworCiAJZW51bSBhdTg1MjJfaWZfZnJlcSB2c2JfaWY7CiAJZW51bSBhdTg1MjJfaWZfZnJlcSBxYW1faWY7CiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2N4MjI3MDIuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9jeDIyNzAyLmMKaW5kZXggOTQzMGUwMy4uNWQxYWJlMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2N4MjI3MDIuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvY3gyMjcwMi5jCkBAIC0zNCwxMyArMzQsMTIgQEAKICNpbmNsdWRlICJkdmJfZnJvbnRlbmQuaCIKICNpbmNsdWRlICJjeDIyNzAyLmgiCiAKLQogc3RydWN0IGN4MjI3MDJfc3RhdGUgewogCi0Jc3RydWN0IGkyY19hZGFwdGVyKiBpMmM7CisJc3RydWN0IGkyY19hZGFwdGVyICppMmM7CiAKIAkvKiBjb25maWd1cmF0aW9uIHNldHRpbmdzICovCi0JY29uc3Qgc3RydWN0IGN4MjI3MDJfY29uZmlnKiBjb25maWc7CisJY29uc3Qgc3RydWN0IGN4MjI3MDJfY29uZmlnICpjb25maWc7CiAKIAlzdHJ1Y3QgZHZiX2Zyb250ZW5kIGZyb250ZW5kOwogCkBAIC00OSwxMCArNDgsMTMgQEAKIH07CiAKIHN0YXRpYyBpbnQgZGVidWc7Cittb2R1bGVfcGFyYW0oZGVidWcsIGludCwgMDY0NCk7CitNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiRW5hYmxlIHZlcmJvc2UgZGVidWcgbWVzc2FnZXMiKTsKKwogI2RlZmluZSBkcHJpbnRrCWlmIChkZWJ1ZykgcHJpbnRrCiAKIC8qIFJlZ2lzdGVyIHZhbHVlcyB0byBpbml0aWFsaXNlIHRoZSBkZW1vZCAqLwotc3RhdGljIHU4IGluaXRfdGFiIFtdID0geworc3RhdGljIHU4IGluaXRfdGFiW10gPSB7CiAJMHgwMCwgMHgwMCwgLyogU3RvcCBhcXVpc2l0aW9uICovCiAJMHgwQiwgMHgwNiwKIAkweDA5LCAweDAxLApAQCAtODAsNjUgKzgyLDY3IEBACiAJMHhmZCwgMHgwMCwKIH07CiAKLXN0YXRpYyBpbnQgY3gyMjcwMl93cml0ZXJlZyAoc3RydWN0IGN4MjI3MDJfc3RhdGUqIHN0YXRlLCB1OCByZWcsIHU4IGRhdGEpCitzdGF0aWMgaW50IGN4MjI3MDJfd3JpdGVyZWcoc3RydWN0IGN4MjI3MDJfc3RhdGUgKnN0YXRlLCB1OCByZWcsIHU4IGRhdGEpCiB7CiAJaW50IHJldDsKLQl1OCBidWYgW10gPSB7IHJlZywgZGF0YSB9OwotCXN0cnVjdCBpMmNfbXNnIG1zZyA9IHsgLmFkZHIgPSBzdGF0ZS0+Y29uZmlnLT5kZW1vZF9hZGRyZXNzLCAuZmxhZ3MgPSAwLCAuYnVmID0gYnVmLCAubGVuID0gMiB9OworCXU4IGJ1ZltdID0geyByZWcsIGRhdGEgfTsKKwlzdHJ1Y3QgaTJjX21zZyBtc2cgPSB7CisJCS5hZGRyID0gc3RhdGUtPmNvbmZpZy0+ZGVtb2RfYWRkcmVzcywgLmZsYWdzID0gMCwKKwkJCS5idWYgPSBidWYsIC5sZW4gPSAyIH07CiAKIAlyZXQgPSBpMmNfdHJhbnNmZXIoc3RhdGUtPmkyYywgJm1zZywgMSk7CiAKIAlpZiAocmV0ICE9IDEpCi0JCXByaW50aygiJXM6IHdyaXRlcmVnIGVycm9yIChyZWcgPT0gMHglMDJ4LCB2YWwgPT0gMHglMDJ4LCByZXQgPT0gJWkpXG4iLAorCQlwcmludGsoS0VSTl9FUlIKKwkJCSIlczogZXJyb3IgKHJlZyA9PSAweCUwMngsIHZhbCA9PSAweCUwMngsIHJldCA9PSAlaSlcbiIsCiAJCQlfX2Z1bmNfXywgcmVnLCBkYXRhLCByZXQpOwogCiAJcmV0dXJuIChyZXQgIT0gMSkgPyAtMSA6IDA7CiB9CiAKLXN0YXRpYyB1OCBjeDIyNzAyX3JlYWRyZWcgKHN0cnVjdCBjeDIyNzAyX3N0YXRlKiBzdGF0ZSwgdTggcmVnKQorc3RhdGljIHU4IGN4MjI3MDJfcmVhZHJlZyhzdHJ1Y3QgY3gyMjcwMl9zdGF0ZSAqc3RhdGUsIHU4IHJlZykKIHsKIAlpbnQgcmV0OwotCXU4IGIwIFtdID0geyByZWcgfTsKLQl1OCBiMSBbXSA9IHsgMCB9OworCXU4IGIwW10gPSB7IHJlZyB9OworCXU4IGIxW10gPSB7IDAgfTsKIAotCXN0cnVjdCBpMmNfbXNnIG1zZyBbXSA9IHsKLQkJeyAuYWRkciA9IHN0YXRlLT5jb25maWctPmRlbW9kX2FkZHJlc3MsIC5mbGFncyA9IDAsIC5idWYgPSBiMCwgLmxlbiA9IDEgfSwKLQkJeyAuYWRkciA9IHN0YXRlLT5jb25maWctPmRlbW9kX2FkZHJlc3MsIC5mbGFncyA9IEkyQ19NX1JELCAuYnVmID0gYjEsIC5sZW4gPSAxIH0gfTsKKwlzdHJ1Y3QgaTJjX21zZyBtc2dbXSA9IHsKKwkJeyAuYWRkciA9IHN0YXRlLT5jb25maWctPmRlbW9kX2FkZHJlc3MsIC5mbGFncyA9IDAsCisJCQkuYnVmID0gYjAsIC5sZW4gPSAxIH0sCisJCXsgLmFkZHIgPSBzdGF0ZS0+Y29uZmlnLT5kZW1vZF9hZGRyZXNzLCAuZmxhZ3MgPSBJMkNfTV9SRCwKKwkJCS5idWYgPSBiMSwgLmxlbiA9IDEgfSB9OwogCiAJcmV0ID0gaTJjX3RyYW5zZmVyKHN0YXRlLT5pMmMsIG1zZywgMik7CiAKIAlpZiAocmV0ICE9IDIpCi0JCXByaW50aygiJXM6IHJlYWRyZWcgZXJyb3IgKHJldCA9PSAlaSlcbiIsIF9fZnVuY19fLCByZXQpOworCQlwcmludGsoS0VSTl9FUlIgIiVzOiByZWFkcmVnIGVycm9yIChyZXQgPT0gJWkpXG4iLAorCQkJX19mdW5jX18sIHJldCk7CiAKIAlyZXR1cm4gYjFbMF07CiB9CiAKLXN0YXRpYyBpbnQgY3gyMjcwMl9zZXRfaW52ZXJzaW9uIChzdHJ1Y3QgY3gyMjcwMl9zdGF0ZSAqc3RhdGUsIGludCBpbnZlcnNpb24pCitzdGF0aWMgaW50IGN4MjI3MDJfc2V0X2ludmVyc2lvbihzdHJ1Y3QgY3gyMjcwMl9zdGF0ZSAqc3RhdGUsIGludCBpbnZlcnNpb24pCiB7CiAJdTggdmFsOwogCiAJc3dpdGNoIChpbnZlcnNpb24pIHsKLQotCQljYXNlIElOVkVSU0lPTl9BVVRPOgotCQkJcmV0dXJuIC1FT1BOT1RTVVBQOwotCi0JCWNhc2UgSU5WRVJTSU9OX09OOgotCQkJdmFsID0gY3gyMjcwMl9yZWFkcmVnIChzdGF0ZSwgMHgwQyk7Ci0JCQlyZXR1cm4gY3gyMjcwMl93cml0ZXJlZyAoc3RhdGUsIDB4MEMsIHZhbCB8IDB4MDEpOwotCi0JCWNhc2UgSU5WRVJTSU9OX09GRjoKLQkJCXZhbCA9IGN4MjI3MDJfcmVhZHJlZyAoc3RhdGUsIDB4MEMpOwotCQkJcmV0dXJuIGN4MjI3MDJfd3JpdGVyZWcgKHN0YXRlLCAweDBDLCB2YWwgJiAweGZlKTsKLQotCQlkZWZhdWx0OgotCQkJcmV0dXJuIC1FSU5WQUw7Ci0KKwljYXNlIElOVkVSU0lPTl9BVVRPOgorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisJY2FzZSBJTlZFUlNJT05fT046CisJCXZhbCA9IGN4MjI3MDJfcmVhZHJlZyhzdGF0ZSwgMHgwQyk7CisJCXJldHVybiBjeDIyNzAyX3dyaXRlcmVnKHN0YXRlLCAweDBDLCB2YWwgfCAweDAxKTsKKwljYXNlIElOVkVSU0lPTl9PRkY6CisJCXZhbCA9IGN4MjI3MDJfcmVhZHJlZyhzdGF0ZSwgMHgwQyk7CisJCXJldHVybiBjeDIyNzAyX3dyaXRlcmVnKHN0YXRlLCAweDBDLCB2YWwgJiAweGZlKTsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKIH0KIAogLyogUmV0cmlldmUgdGhlIGRlbW9kIHNldHRpbmdzICovCi1zdGF0aWMgaW50IGN4MjI3MDJfZ2V0X3RwcyAoc3RydWN0IGN4MjI3MDJfc3RhdGUgKnN0YXRlLCBzdHJ1Y3QgZHZiX29mZG1fcGFyYW1ldGVycyAqcCkKK3N0YXRpYyBpbnQgY3gyMjcwMl9nZXRfdHBzKHN0cnVjdCBjeDIyNzAyX3N0YXRlICpzdGF0ZSwKKwlzdHJ1Y3QgZHZiX29mZG1fcGFyYW1ldGVycyAqcCkKIHsKIAl1OCB2YWw7CiAKQEAgLTE0NiwxODAgKzE1MCwyODEgQEAKIAlpZiAoIShjeDIyNzAyX3JlYWRyZWcoc3RhdGUsIDB4MEEpICYgMHgyMCkpCiAJCXJldHVybiAtRUFHQUlOOwogCi0JdmFsID0gY3gyMjcwMl9yZWFkcmVnIChzdGF0ZSwgMHgwMSk7Ci0Jc3dpdGNoKCAodmFsJjB4MTgpPj4zKSB7Ci0JCWNhc2UgMDogcC0+Y29uc3RlbGxhdGlvbiA9ICAgUVBTSzsgYnJlYWs7Ci0JCWNhc2UgMTogcC0+Y29uc3RlbGxhdGlvbiA9IFFBTV8xNjsgYnJlYWs7Ci0JCWNhc2UgMjogcC0+Y29uc3RlbGxhdGlvbiA9IFFBTV82NDsgYnJlYWs7CisJdmFsID0gY3gyMjcwMl9yZWFkcmVnKHN0YXRlLCAweDAxKTsKKwlzd2l0Y2ggKCh2YWwgJiAweDE4KSA+PiAzKSB7CisJY2FzZSAwOgorCQlwLT5jb25zdGVsbGF0aW9uID0gUVBTSzsKKwkJYnJlYWs7CisJY2FzZSAxOgorCQlwLT5jb25zdGVsbGF0aW9uID0gUUFNXzE2OworCQlicmVhazsKKwljYXNlIDI6CisJCXAtPmNvbnN0ZWxsYXRpb24gPSBRQU1fNjQ7CisJCWJyZWFrOwogCX0KLQlzd2l0Y2goIHZhbCYweDA3ICkgewotCQljYXNlIDA6IHAtPmhpZXJhcmNoeV9pbmZvcm1hdGlvbiA9IEhJRVJBUkNIWV9OT05FOyBicmVhazsKLQkJY2FzZSAxOiBwLT5oaWVyYXJjaHlfaW5mb3JtYXRpb24gPSAgICBISUVSQVJDSFlfMTsgYnJlYWs7Ci0JCWNhc2UgMjogcC0+aGllcmFyY2h5X2luZm9ybWF0aW9uID0gICAgSElFUkFSQ0hZXzI7IGJyZWFrOwotCQljYXNlIDM6IHAtPmhpZXJhcmNoeV9pbmZvcm1hdGlvbiA9ICAgIEhJRVJBUkNIWV80OyBicmVhazsKKwlzd2l0Y2ggKHZhbCAmIDB4MDcpIHsKKwljYXNlIDA6CisJCXAtPmhpZXJhcmNoeV9pbmZvcm1hdGlvbiA9IEhJRVJBUkNIWV9OT05FOworCQlicmVhazsKKwljYXNlIDE6CisJCXAtPmhpZXJhcmNoeV9pbmZvcm1hdGlvbiA9IEhJRVJBUkNIWV8xOworCQlicmVhazsKKwljYXNlIDI6CisJCXAtPmhpZXJhcmNoeV9pbmZvcm1hdGlvbiA9IEhJRVJBUkNIWV8yOworCQlicmVhazsKKwljYXNlIDM6CisJCXAtPmhpZXJhcmNoeV9pbmZvcm1hdGlvbiA9IEhJRVJBUkNIWV80OworCQlicmVhazsKIAl9CiAKIAotCXZhbCA9IGN4MjI3MDJfcmVhZHJlZyAoc3RhdGUsIDB4MDIpOwotCXN3aXRjaCggKHZhbCYweDM4KT4+MyApIHsKLQkJY2FzZSAwOiBwLT5jb2RlX3JhdGVfSFAgPSBGRUNfMV8yOyBicmVhazsKLQkJY2FzZSAxOiBwLT5jb2RlX3JhdGVfSFAgPSBGRUNfMl8zOyBicmVhazsKLQkJY2FzZSAyOiBwLT5jb2RlX3JhdGVfSFAgPSBGRUNfM180OyBicmVhazsKLQkJY2FzZSAzOiBwLT5jb2RlX3JhdGVfSFAgPSBGRUNfNV82OyBicmVhazsKLQkJY2FzZSA0OiBwLT5jb2RlX3JhdGVfSFAgPSBGRUNfN184OyBicmVhazsKKwl2YWwgPSBjeDIyNzAyX3JlYWRyZWcoc3RhdGUsIDB4MDIpOworCXN3aXRjaCAoKHZhbCAmIDB4MzgpID4+IDMpIHsKKwljYXNlIDA6CisJCXAtPmNvZGVfcmF0ZV9IUCA9IEZFQ18xXzI7CisJCWJyZWFrOworCWNhc2UgMToKKwkJcC0+Y29kZV9yYXRlX0hQID0gRkVDXzJfMzsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQlwLT5jb2RlX3JhdGVfSFAgPSBGRUNfM180OworCQlicmVhazsKKwljYXNlIDM6CisJCXAtPmNvZGVfcmF0ZV9IUCA9IEZFQ181XzY7CisJCWJyZWFrOworCWNhc2UgNDoKKwkJcC0+Y29kZV9yYXRlX0hQID0gRkVDXzdfODsKKwkJYnJlYWs7CiAJfQotCXN3aXRjaCggdmFsJjB4MDcgKSB7Ci0JCWNhc2UgMDogcC0+Y29kZV9yYXRlX0xQID0gRkVDXzFfMjsgYnJlYWs7Ci0JCWNhc2UgMTogcC0+Y29kZV9yYXRlX0xQID0gRkVDXzJfMzsgYnJlYWs7Ci0JCWNhc2UgMjogcC0+Y29kZV9yYXRlX0xQID0gRkVDXzNfNDsgYnJlYWs7Ci0JCWNhc2UgMzogcC0+Y29kZV9yYXRlX0xQID0gRkVDXzVfNjsgYnJlYWs7Ci0JCWNhc2UgNDogcC0+Y29kZV9yYXRlX0xQID0gRkVDXzdfODsgYnJlYWs7CisJc3dpdGNoICh2YWwgJiAweDA3KSB7CisJY2FzZSAwOgorCQlwLT5jb2RlX3JhdGVfTFAgPSBGRUNfMV8yOworCQlicmVhazsKKwljYXNlIDE6CisJCXAtPmNvZGVfcmF0ZV9MUCA9IEZFQ18yXzM7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJcC0+Y29kZV9yYXRlX0xQID0gRkVDXzNfNDsKKwkJYnJlYWs7CisJY2FzZSAzOgorCQlwLT5jb2RlX3JhdGVfTFAgPSBGRUNfNV82OworCQlicmVhazsKKwljYXNlIDQ6CisJCXAtPmNvZGVfcmF0ZV9MUCA9IEZFQ183Xzg7CisJCWJyZWFrOwogCX0KIAotCi0JdmFsID0gY3gyMjcwMl9yZWFkcmVnIChzdGF0ZSwgMHgwMyk7Ci0Jc3dpdGNoKCAodmFsJjB4MGMpPj4yICkgewotCQljYXNlIDA6IHAtPmd1YXJkX2ludGVydmFsID0gR1VBUkRfSU5URVJWQUxfMV8zMjsgYnJlYWs7Ci0JCWNhc2UgMTogcC0+Z3VhcmRfaW50ZXJ2YWwgPSBHVUFSRF9JTlRFUlZBTF8xXzE2OyBicmVhazsKLQkJY2FzZSAyOiBwLT5ndWFyZF9pbnRlcnZhbCA9ICBHVUFSRF9JTlRFUlZBTF8xXzg7IGJyZWFrOwotCQljYXNlIDM6IHAtPmd1YXJkX2ludGVydmFsID0gIEdVQVJEX0lOVEVSVkFMXzFfNDsgYnJlYWs7CisJdmFsID0gY3gyMjcwMl9yZWFkcmVnKHN0YXRlLCAweDAzKTsKKwlzd2l0Y2ggKCh2YWwgJiAweDBjKSA+PiAyKSB7CisJY2FzZSAwOgorCQlwLT5ndWFyZF9pbnRlcnZhbCA9IEdVQVJEX0lOVEVSVkFMXzFfMzI7CisJCWJyZWFrOworCWNhc2UgMToKKwkJcC0+Z3VhcmRfaW50ZXJ2YWwgPSBHVUFSRF9JTlRFUlZBTF8xXzE2OworCQlicmVhazsKKwljYXNlIDI6CisJCXAtPmd1YXJkX2ludGVydmFsID0gR1VBUkRfSU5URVJWQUxfMV84OworCQlicmVhazsKKwljYXNlIDM6CisJCXAtPmd1YXJkX2ludGVydmFsID0gR1VBUkRfSU5URVJWQUxfMV80OworCQlicmVhazsKIAl9Ci0Jc3dpdGNoKCB2YWwmMHgwMyApIHsKLQkJY2FzZSAwOiBwLT50cmFuc21pc3Npb25fbW9kZSA9IFRSQU5TTUlTU0lPTl9NT0RFXzJLOyBicmVhazsKLQkJY2FzZSAxOiBwLT50cmFuc21pc3Npb25fbW9kZSA9IFRSQU5TTUlTU0lPTl9NT0RFXzhLOyBicmVhazsKKwlzd2l0Y2ggKHZhbCAmIDB4MDMpIHsKKwljYXNlIDA6CisJCXAtPnRyYW5zbWlzc2lvbl9tb2RlID0gVFJBTlNNSVNTSU9OX01PREVfMks7CisJCWJyZWFrOworCWNhc2UgMToKKwkJcC0+dHJhbnNtaXNzaW9uX21vZGUgPSBUUkFOU01JU1NJT05fTU9ERV84SzsKKwkJYnJlYWs7CiAJfQogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgY3gyMjcwMl9pMmNfZ2F0ZV9jdHJsKHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlLCBpbnQgZW5hYmxlKQorc3RhdGljIGludCBjeDIyNzAyX2kyY19nYXRlX2N0cmwoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIGludCBlbmFibGUpCiB7Ci0Jc3RydWN0IGN4MjI3MDJfc3RhdGUqIHN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7Ci0JZHByaW50ayAoIiVzKCVkKVxuIiwgX19mdW5jX18sIGVuYWJsZSk7CisJc3RydWN0IGN4MjI3MDJfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisJZHByaW50aygiJXMoJWQpXG4iLCBfX2Z1bmNfXywgZW5hYmxlKTsKIAlpZiAoZW5hYmxlKQotCQlyZXR1cm4gY3gyMjcwMl93cml0ZXJlZyAoc3RhdGUsIDB4MEQsIGN4MjI3MDJfcmVhZHJlZyhzdGF0ZSwgMHgwRCkgJiAweGZlKTsKKwkJcmV0dXJuIGN4MjI3MDJfd3JpdGVyZWcoc3RhdGUsIDB4MEQsCisJCQljeDIyNzAyX3JlYWRyZWcoc3RhdGUsIDB4MEQpICYgMHhmZSk7CiAJZWxzZQotCQlyZXR1cm4gY3gyMjcwMl93cml0ZXJlZyAoc3RhdGUsIDB4MEQsIGN4MjI3MDJfcmVhZHJlZyhzdGF0ZSwgMHgwRCkgfCAxKTsKKwkJcmV0dXJuIGN4MjI3MDJfd3JpdGVyZWcoc3RhdGUsIDB4MEQsCisJCQljeDIyNzAyX3JlYWRyZWcoc3RhdGUsIDB4MEQpIHwgMSk7CiB9CiAKIC8qIFRhbGsgdG8gdGhlIGRlbW9kLCBzZXQgdGhlIEZFQywgR1VBUkQsIFFBTSBzZXR0aW5ncyBldGMgKi8KLXN0YXRpYyBpbnQgY3gyMjcwMl9zZXRfdHBzIChzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBmZSwgc3RydWN0IGR2Yl9mcm9udGVuZF9wYXJhbWV0ZXJzICpwKQorc3RhdGljIGludCBjeDIyNzAyX3NldF90cHMoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsCisJc3RydWN0IGR2Yl9mcm9udGVuZF9wYXJhbWV0ZXJzICpwKQogewogCXU4IHZhbDsKLQlzdHJ1Y3QgY3gyMjcwMl9zdGF0ZSogc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKwlzdHJ1Y3QgY3gyMjcwMl9zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKIAogCWlmIChmZS0+b3BzLnR1bmVyX29wcy5zZXRfcGFyYW1zKSB7CiAJCWZlLT5vcHMudHVuZXJfb3BzLnNldF9wYXJhbXMoZmUsIHApOwotCQlpZiAoZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKSBmZS0+b3BzLmkyY19nYXRlX2N0cmwoZmUsIDApOworCQlpZiAoZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKQorCQkJZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKGZlLCAwKTsKIAl9CiAKIAkvKiBzZXQgaW52ZXJzaW9uICovCi0JY3gyMjcwMl9zZXRfaW52ZXJzaW9uIChzdGF0ZSwgcC0+aW52ZXJzaW9uKTsKKwljeDIyNzAyX3NldF9pbnZlcnNpb24oc3RhdGUsIHAtPmludmVyc2lvbik7CiAKIAkvKiBzZXQgYmFuZHdpZHRoICovCi0Jc3dpdGNoKHAtPnUub2ZkbS5iYW5kd2lkdGgpIHsKKwlzd2l0Y2ggKHAtPnUub2ZkbS5iYW5kd2lkdGgpIHsKIAljYXNlIEJBTkRXSURUSF82X01IWjoKLQkJY3gyMjcwMl93cml0ZXJlZyhzdGF0ZSwgMHgwQywgKGN4MjI3MDJfcmVhZHJlZyhzdGF0ZSwgMHgwQykgJiAweGNmKSB8IDB4MjAgKTsKKwkJY3gyMjcwMl93cml0ZXJlZyhzdGF0ZSwgMHgwQywKKwkJCShjeDIyNzAyX3JlYWRyZWcoc3RhdGUsIDB4MEMpICYgMHhjZikgfCAweDIwKTsKIAkJYnJlYWs7CiAJY2FzZSBCQU5EV0lEVEhfN19NSFo6Ci0JCWN4MjI3MDJfd3JpdGVyZWcoc3RhdGUsIDB4MEMsIChjeDIyNzAyX3JlYWRyZWcoc3RhdGUsIDB4MEMpICYgMHhjZikgfCAweDEwICk7CisJCWN4MjI3MDJfd3JpdGVyZWcoc3RhdGUsIDB4MEMsCisJCQkoY3gyMjcwMl9yZWFkcmVnKHN0YXRlLCAweDBDKSAmIDB4Y2YpIHwgMHgxMCk7CiAJCWJyZWFrOwogCWNhc2UgQkFORFdJRFRIXzhfTUhaOgotCQljeDIyNzAyX3dyaXRlcmVnKHN0YXRlLCAweDBDLCBjeDIyNzAyX3JlYWRyZWcoc3RhdGUsIDB4MEMpICYweGNmICk7CisJCWN4MjI3MDJfd3JpdGVyZWcoc3RhdGUsIDB4MEMsCisJCQljeDIyNzAyX3JlYWRyZWcoc3RhdGUsIDB4MEMpICYgMHhjZik7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCWRwcmludGsgKCIlczogaW52YWxpZCBiYW5kd2lkdGhcbiIsX19mdW5jX18pOworCQlkcHJpbnRrKCIlczogaW52YWxpZCBiYW5kd2lkdGhcbiIsIF9fZnVuY19fKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0KLQlwLT51Lm9mZG0uY29kZV9yYXRlX0xQID0gRkVDX0FVVE87IC8vdGVtcCBoYWNrIGFzIG1hbnVhbCBub3Qgd29ya2luZworCXAtPnUub2ZkbS5jb2RlX3JhdGVfTFAgPSBGRUNfQVVUTzsgLyogdGVtcCBoYWNrIGFzIG1hbnVhbCBub3Qgd29ya2luZyAqLwogCiAJLyogdXNlIGF1dG8gY29uZmlndXJhdGlvbj8gKi8KLQlpZigocC0+dS5vZmRtLmhpZXJhcmNoeV9pbmZvcm1hdGlvbj09SElFUkFSQ0hZX0FVVE8pIHx8Ci0JICAgKHAtPnUub2ZkbS5jb25zdGVsbGF0aW9uPT1RQU1fQVVUTykgfHwKLQkgICAocC0+dS5vZmRtLmNvZGVfcmF0ZV9IUD09RkVDX0FVVE8pIHx8Ci0JICAgKHAtPnUub2ZkbS5jb2RlX3JhdGVfTFA9PUZFQ19BVVRPKSB8fAotCSAgIChwLT51Lm9mZG0uZ3VhcmRfaW50ZXJ2YWw9PUdVQVJEX0lOVEVSVkFMX0FVVE8pIHx8Ci0JICAgKHAtPnUub2ZkbS50cmFuc21pc3Npb25fbW9kZT09VFJBTlNNSVNTSU9OX01PREVfQVVUTykgKSB7CisJaWYgKChwLT51Lm9mZG0uaGllcmFyY2h5X2luZm9ybWF0aW9uID09IEhJRVJBUkNIWV9BVVRPKSB8fAorCSAgIChwLT51Lm9mZG0uY29uc3RlbGxhdGlvbiA9PSBRQU1fQVVUTykgfHwKKwkgICAocC0+dS5vZmRtLmNvZGVfcmF0ZV9IUCA9PSBGRUNfQVVUTykgfHwKKwkgICAocC0+dS5vZmRtLmNvZGVfcmF0ZV9MUCA9PSBGRUNfQVVUTykgfHwKKwkgICAocC0+dS5vZmRtLmd1YXJkX2ludGVydmFsID09IEdVQVJEX0lOVEVSVkFMX0FVVE8pIHx8CisJICAgKHAtPnUub2ZkbS50cmFuc21pc3Npb25fbW9kZSA9PSBUUkFOU01JU1NJT05fTU9ERV9BVVRPKSkgewogCiAJCS8qIFRQUyBTb3VyY2UgLSB1c2UgaGFyZHdhcmUgZHJpdmVuIHZhbHVlcyAqLwogCQljeDIyNzAyX3dyaXRlcmVnKHN0YXRlLCAweDA2LCAweDEwKTsKIAkJY3gyMjcwMl93cml0ZXJlZyhzdGF0ZSwgMHgwNywgMHg5KTsKIAkJY3gyMjcwMl93cml0ZXJlZyhzdGF0ZSwgMHgwOCwgMHhDMSk7Ci0JCWN4MjI3MDJfd3JpdGVyZWcoc3RhdGUsIDB4MEIsIGN4MjI3MDJfcmVhZHJlZyhzdGF0ZSwgMHgwQikgJiAweGZjICk7Ci0JCWN4MjI3MDJfd3JpdGVyZWcoc3RhdGUsIDB4MEMsIChjeDIyNzAyX3JlYWRyZWcoc3RhdGUsIDB4MEMpICYgMHhCRikgfCAweDQwICk7CisJCWN4MjI3MDJfd3JpdGVyZWcoc3RhdGUsIDB4MEIsIGN4MjI3MDJfcmVhZHJlZyhzdGF0ZSwgMHgwQikKKwkJCSYgMHhmYyk7CisJCWN4MjI3MDJfd3JpdGVyZWcoc3RhdGUsIDB4MEMsCisJCQkoY3gyMjcwMl9yZWFkcmVnKHN0YXRlLCAweDBDKSAmIDB4QkYpIHwgMHg0MCk7CiAJCWN4MjI3MDJfd3JpdGVyZWcoc3RhdGUsIDB4MDAsIDB4MDEpOyAvKiBCZWdpbiBhcXVpc2l0aW9uICovCi0JCWRwcmludGsoIiVzOiBBdXRvZGV0ZWN0aW5nXG4iLF9fZnVuY19fKTsKKwkJZHByaW50aygiJXM6IEF1dG9kZXRlY3RpbmdcbiIsIF9fZnVuY19fKTsKIAkJcmV0dXJuIDA7CiAJfQogCiAJLyogbWFudWFsbHkgcHJvZ3JhbW1lZCB2YWx1ZXMgKi8KLQl2YWw9MDsKLQlzd2l0Y2gocC0+dS5vZmRtLmNvbnN0ZWxsYXRpb24pIHsKLQkJY2FzZSAgIFFQU0s6IHZhbCA9ICh2YWwmMHhlNyk7IGJyZWFrOwotCQljYXNlIFFBTV8xNjogdmFsID0gKHZhbCYweGU3KXwweDA4OyBicmVhazsKLQkJY2FzZSBRQU1fNjQ6IHZhbCA9ICh2YWwmMHhlNyl8MHgxMDsgYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlkcHJpbnRrICgiJXM6IGludmFsaWQgY29uc3RlbGxhdGlvblxuIixfX2Z1bmNfXyk7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKKwl2YWwgPSAwOworCXN3aXRjaCAocC0+dS5vZmRtLmNvbnN0ZWxsYXRpb24pIHsKKwljYXNlIFFQU0s6CisJCXZhbCA9ICh2YWwgJiAweGU3KTsKKwkJYnJlYWs7CisJY2FzZSBRQU1fMTY6CisJCXZhbCA9ICh2YWwgJiAweGU3KSB8IDB4MDg7CisJCWJyZWFrOworCWNhc2UgUUFNXzY0OgorCQl2YWwgPSAodmFsICYgMHhlNykgfCAweDEwOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlkcHJpbnRrKCIlczogaW52YWxpZCBjb25zdGVsbGF0aW9uXG4iLCBfX2Z1bmNfXyk7CisJCXJldHVybiAtRUlOVkFMOwogCX0KLQlzd2l0Y2gocC0+dS5vZmRtLmhpZXJhcmNoeV9pbmZvcm1hdGlvbikgewotCQljYXNlIEhJRVJBUkNIWV9OT05FOiB2YWwgPSAodmFsJjB4ZjgpOyBicmVhazsKLQkJY2FzZSAgICBISUVSQVJDSFlfMTogdmFsID0gKHZhbCYweGY4KXwxOyBicmVhazsKLQkJY2FzZSAgICBISUVSQVJDSFlfMjogdmFsID0gKHZhbCYweGY4KXwyOyBicmVhazsKLQkJY2FzZSAgICBISUVSQVJDSFlfNDogdmFsID0gKHZhbCYweGY4KXwzOyBicmVhazsKLQkJZGVmYXVsdDoKLQkJCWRwcmludGsgKCIlczogaW52YWxpZCBoaWVyYXJjaHlcbiIsX19mdW5jX18pOwotCQkJcmV0dXJuIC1FSU5WQUw7CisJc3dpdGNoIChwLT51Lm9mZG0uaGllcmFyY2h5X2luZm9ybWF0aW9uKSB7CisJY2FzZSBISUVSQVJDSFlfTk9ORToKKwkJdmFsID0gKHZhbCAmIDB4ZjgpOworCQlicmVhazsKKwljYXNlIEhJRVJBUkNIWV8xOgorCQl2YWwgPSAodmFsICYgMHhmOCkgfCAxOworCQlicmVhazsKKwljYXNlIEhJRVJBUkNIWV8yOgorCQl2YWwgPSAodmFsICYgMHhmOCkgfCAyOworCQlicmVhazsKKwljYXNlIEhJRVJBUkNIWV80OgorCQl2YWwgPSAodmFsICYgMHhmOCkgfCAzOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlkcHJpbnRrKCIlczogaW52YWxpZCBoaWVyYXJjaHlcbiIsIF9fZnVuY19fKTsKKwkJcmV0dXJuIC1FSU5WQUw7CiAJfQotCWN4MjI3MDJfd3JpdGVyZWcgKHN0YXRlLCAweDA2LCB2YWwpOworCWN4MjI3MDJfd3JpdGVyZWcoc3RhdGUsIDB4MDYsIHZhbCk7CiAKLQl2YWw9MDsKLQlzd2l0Y2gocC0+dS5vZmRtLmNvZGVfcmF0ZV9IUCkgewotCQljYXNlIEZFQ19OT05FOgotCQljYXNlIEZFQ18xXzI6IHZhbCA9ICh2YWwmMHhjNyk7IGJyZWFrOwotCQljYXNlIEZFQ18yXzM6IHZhbCA9ICh2YWwmMHhjNyl8MHgwODsgYnJlYWs7Ci0JCWNhc2UgRkVDXzNfNDogdmFsID0gKHZhbCYweGM3KXwweDEwOyBicmVhazsKLQkJY2FzZSBGRUNfNV82OiB2YWwgPSAodmFsJjB4YzcpfDB4MTg7IGJyZWFrOwotCQljYXNlIEZFQ183Xzg6IHZhbCA9ICh2YWwmMHhjNyl8MHgyMDsgYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlkcHJpbnRrICgiJXM6IGludmFsaWQgY29kZV9yYXRlX0hQXG4iLF9fZnVuY19fKTsKLQkJCXJldHVybiAtRUlOVkFMOworCXZhbCA9IDA7CisJc3dpdGNoIChwLT51Lm9mZG0uY29kZV9yYXRlX0hQKSB7CisJY2FzZSBGRUNfTk9ORToKKwljYXNlIEZFQ18xXzI6CisJCXZhbCA9ICh2YWwgJiAweGM3KTsKKwkJYnJlYWs7CisJY2FzZSBGRUNfMl8zOgorCQl2YWwgPSAodmFsICYgMHhjNykgfCAweDA4OworCQlicmVhazsKKwljYXNlIEZFQ18zXzQ6CisJCXZhbCA9ICh2YWwgJiAweGM3KSB8IDB4MTA7CisJCWJyZWFrOworCWNhc2UgRkVDXzVfNjoKKwkJdmFsID0gKHZhbCAmIDB4YzcpIHwgMHgxODsKKwkJYnJlYWs7CisJY2FzZSBGRUNfN184OgorCQl2YWwgPSAodmFsICYgMHhjNykgfCAweDIwOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlkcHJpbnRrKCIlczogaW52YWxpZCBjb2RlX3JhdGVfSFBcbiIsIF9fZnVuY19fKTsKKwkJcmV0dXJuIC1FSU5WQUw7CiAJfQotCXN3aXRjaChwLT51Lm9mZG0uY29kZV9yYXRlX0xQKSB7Ci0JCWNhc2UgRkVDX05PTkU6Ci0JCWNhc2UgRkVDXzFfMjogdmFsID0gKHZhbCYweGY4KTsgYnJlYWs7Ci0JCWNhc2UgRkVDXzJfMzogdmFsID0gKHZhbCYweGY4KXwxOyBicmVhazsKLQkJY2FzZSBGRUNfM180OiB2YWwgPSAodmFsJjB4ZjgpfDI7IGJyZWFrOwotCQljYXNlIEZFQ181XzY6IHZhbCA9ICh2YWwmMHhmOCl8MzsgYnJlYWs7Ci0JCWNhc2UgRkVDXzdfODogdmFsID0gKHZhbCYweGY4KXw0OyBicmVhazsKLQkJZGVmYXVsdDoKLQkJCWRwcmludGsgKCIlczogaW52YWxpZCBjb2RlX3JhdGVfTFBcbiIsX19mdW5jX18pOwotCQkJcmV0dXJuIC1FSU5WQUw7CisJc3dpdGNoIChwLT51Lm9mZG0uY29kZV9yYXRlX0xQKSB7CisJY2FzZSBGRUNfTk9ORToKKwljYXNlIEZFQ18xXzI6CisJCXZhbCA9ICh2YWwgJiAweGY4KTsKKwkJYnJlYWs7CisJY2FzZSBGRUNfMl8zOgorCQl2YWwgPSAodmFsICYgMHhmOCkgfCAxOworCQlicmVhazsKKwljYXNlIEZFQ18zXzQ6CisJCXZhbCA9ICh2YWwgJiAweGY4KSB8IDI7CisJCWJyZWFrOworCWNhc2UgRkVDXzVfNjoKKwkJdmFsID0gKHZhbCAmIDB4ZjgpIHwgMzsKKwkJYnJlYWs7CisJY2FzZSBGRUNfN184OgorCQl2YWwgPSAodmFsICYgMHhmOCkgfCA0OworCQlicmVhazsKKwlkZWZhdWx0OgorCQlkcHJpbnRrKCIlczogaW52YWxpZCBjb2RlX3JhdGVfTFBcbiIsIF9fZnVuY19fKTsKKwkJcmV0dXJuIC1FSU5WQUw7CiAJfQotCWN4MjI3MDJfd3JpdGVyZWcgKHN0YXRlLCAweDA3LCB2YWwpOworCWN4MjI3MDJfd3JpdGVyZWcoc3RhdGUsIDB4MDcsIHZhbCk7CiAKLQl2YWw9MDsKLQlzd2l0Y2gocC0+dS5vZmRtLmd1YXJkX2ludGVydmFsKSB7Ci0JCWNhc2UgR1VBUkRfSU5URVJWQUxfMV8zMjogdmFsID0gKHZhbCYweGYzKTsgYnJlYWs7Ci0JCWNhc2UgR1VBUkRfSU5URVJWQUxfMV8xNjogdmFsID0gKHZhbCYweGYzKXwweDA0OyBicmVhazsKLQkJY2FzZSAgR1VBUkRfSU5URVJWQUxfMV84OiB2YWwgPSAodmFsJjB4ZjMpfDB4MDg7IGJyZWFrOwotCQljYXNlICBHVUFSRF9JTlRFUlZBTF8xXzQ6IHZhbCA9ICh2YWwmMHhmMyl8MHgwYzsgYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlkcHJpbnRrICgiJXM6IGludmFsaWQgZ3VhcmRfaW50ZXJ2YWxcbiIsX19mdW5jX18pOwotCQkJcmV0dXJuIC1FSU5WQUw7CisJdmFsID0gMDsKKwlzd2l0Y2ggKHAtPnUub2ZkbS5ndWFyZF9pbnRlcnZhbCkgeworCWNhc2UgR1VBUkRfSU5URVJWQUxfMV8zMjoKKwkJdmFsID0gKHZhbCAmIDB4ZjMpOworCQlicmVhazsKKwljYXNlIEdVQVJEX0lOVEVSVkFMXzFfMTY6CisJCXZhbCA9ICh2YWwgJiAweGYzKSB8IDB4MDQ7CisJCWJyZWFrOworCWNhc2UgR1VBUkRfSU5URVJWQUxfMV84OgorCQl2YWwgPSAodmFsICYgMHhmMykgfCAweDA4OworCQlicmVhazsKKwljYXNlIEdVQVJEX0lOVEVSVkFMXzFfNDoKKwkJdmFsID0gKHZhbCAmIDB4ZjMpIHwgMHgwYzsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZHByaW50aygiJXM6IGludmFsaWQgZ3VhcmRfaW50ZXJ2YWxcbiIsIF9fZnVuY19fKTsKKwkJcmV0dXJuIC1FSU5WQUw7CiAJfQotCXN3aXRjaChwLT51Lm9mZG0udHJhbnNtaXNzaW9uX21vZGUpIHsKLQkJY2FzZSBUUkFOU01JU1NJT05fTU9ERV8ySzogdmFsID0gKHZhbCYweGZjKTsgYnJlYWs7Ci0JCWNhc2UgVFJBTlNNSVNTSU9OX01PREVfOEs6IHZhbCA9ICh2YWwmMHhmYyl8MTsgYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlkcHJpbnRrICgiJXM6IGludmFsaWQgdHJhbnNtaXNzaW9uX21vZGVcbiIsX19mdW5jX18pOwotCQkJcmV0dXJuIC1FSU5WQUw7CisJc3dpdGNoIChwLT51Lm9mZG0udHJhbnNtaXNzaW9uX21vZGUpIHsKKwljYXNlIFRSQU5TTUlTU0lPTl9NT0RFXzJLOgorCQl2YWwgPSAodmFsICYgMHhmYyk7CisJCWJyZWFrOworCWNhc2UgVFJBTlNNSVNTSU9OX01PREVfOEs6CisJCXZhbCA9ICh2YWwgJiAweGZjKSB8IDE7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWRwcmludGsoIiVzOiBpbnZhbGlkIHRyYW5zbWlzc2lvbl9tb2RlXG4iLCBfX2Z1bmNfXyk7CisJCXJldHVybiAtRUlOVkFMOwogCX0KIAljeDIyNzAyX3dyaXRlcmVnKHN0YXRlLCAweDA4LCB2YWwpOwotCWN4MjI3MDJfd3JpdGVyZWcoc3RhdGUsIDB4MEIsIChjeDIyNzAyX3JlYWRyZWcoc3RhdGUsIDB4MEIpICYgMHhmYykgfCAweDAyICk7Ci0JY3gyMjcwMl93cml0ZXJlZyhzdGF0ZSwgMHgwQywgKGN4MjI3MDJfcmVhZHJlZyhzdGF0ZSwgMHgwQykgJiAweEJGKSB8IDB4NDAgKTsKKwljeDIyNzAyX3dyaXRlcmVnKHN0YXRlLCAweDBCLAorCQkoY3gyMjcwMl9yZWFkcmVnKHN0YXRlLCAweDBCKSAmIDB4ZmMpIHwgMHgwMik7CisJY3gyMjcwMl93cml0ZXJlZyhzdGF0ZSwgMHgwQywKKwkJKGN4MjI3MDJfcmVhZHJlZyhzdGF0ZSwgMHgwQykgJiAweEJGKSB8IDB4NDApOwogCiAJLyogQmVnaW4gY2hhbm5lbCBhcXVpc2l0aW9uICovCiAJY3gyMjcwMl93cml0ZXJlZyhzdGF0ZSwgMHgwMCwgMHgwMSk7CkBAIC0zMjksMTA5ICs0MzQsMTExIEBACiAKIC8qIFJlc2V0IHRoZSBkZW1vZCBoYXJkd2FyZSBhbmQgcmVzZXQgYWxsIG9mIHRoZSBjb25maWd1cmF0aW9uIHJlZ2lzdGVycwogICAgdG8gYSBkZWZhdWx0IHN0YXRlLiAqLwotc3RhdGljIGludCBjeDIyNzAyX2luaXQgKHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlKQorc3RhdGljIGludCBjeDIyNzAyX2luaXQoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUpCiB7CiAJaW50IGk7Ci0Jc3RydWN0IGN4MjI3MDJfc3RhdGUqIHN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisJc3RydWN0IGN4MjI3MDJfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CiAKLQljeDIyNzAyX3dyaXRlcmVnIChzdGF0ZSwgMHgwMCwgMHgwMik7CisJY3gyMjcwMl93cml0ZXJlZyhzdGF0ZSwgMHgwMCwgMHgwMik7CiAKIAltc2xlZXAoMTApOwogCi0JZm9yIChpPTA7IGk8c2l6ZW9mKGluaXRfdGFiKTsgaSs9MikKLQkJY3gyMjcwMl93cml0ZXJlZyAoc3RhdGUsIGluaXRfdGFiW2ldLCBpbml0X3RhYltpKzFdKTsKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShpbml0X3RhYik7IGkgKz0gMikKKwkJY3gyMjcwMl93cml0ZXJlZyhzdGF0ZSwgaW5pdF90YWJbaV0sIGluaXRfdGFiW2kgKyAxXSk7CiAKLQljeDIyNzAyX3dyaXRlcmVnIChzdGF0ZSwgMHhmOCwgKHN0YXRlLT5jb25maWctPm91dHB1dF9tb2RlIDw8IDEpICYgMHgwMik7CisJY3gyMjcwMl93cml0ZXJlZyhzdGF0ZSwgMHhmOCwgKHN0YXRlLT5jb25maWctPm91dHB1dF9tb2RlIDw8IDEpCisJCSYgMHgwMik7CiAKIAljeDIyNzAyX2kyY19nYXRlX2N0cmwoZmUsIDApOwogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgY3gyMjcwMl9yZWFkX3N0YXR1cyhzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBmZSwgZmVfc3RhdHVzX3QqIHN0YXR1cykKK3N0YXRpYyBpbnQgY3gyMjcwMl9yZWFkX3N0YXR1cyhzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgZmVfc3RhdHVzX3QgKnN0YXR1cykKIHsKLQlzdHJ1Y3QgY3gyMjcwMl9zdGF0ZSogc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKwlzdHJ1Y3QgY3gyMjcwMl9zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKIAl1OCByZWcwQTsKIAl1OCByZWcyMzsKIAogCSpzdGF0dXMgPSAwOwogCi0JcmVnMEEgPSBjeDIyNzAyX3JlYWRyZWcgKHN0YXRlLCAweDBBKTsKLQlyZWcyMyA9IGN4MjI3MDJfcmVhZHJlZyAoc3RhdGUsIDB4MjMpOworCXJlZzBBID0gY3gyMjcwMl9yZWFkcmVnKHN0YXRlLCAweDBBKTsKKwlyZWcyMyA9IGN4MjI3MDJfcmVhZHJlZyhzdGF0ZSwgMHgyMyk7CiAKLQlkcHJpbnRrICgiJXM6IHN0YXR1cyBkZW1vZD0weCUwMnggYWdjPTB4JTAyeFxuIgotCQksX19mdW5jX18scmVnMEEscmVnMjMpOworCWRwcmludGsoIiVzOiBzdGF0dXMgZGVtb2Q9MHglMDJ4IGFnYz0weCUwMnhcbiIKKwkJLCBfX2Z1bmNfXywgcmVnMEEsIHJlZzIzKTsKIAotCWlmKHJlZzBBICYgMHgxMCkgeworCWlmIChyZWcwQSAmIDB4MTApIHsKIAkJKnN0YXR1cyB8PSBGRV9IQVNfTE9DSzsKIAkJKnN0YXR1cyB8PSBGRV9IQVNfVklURVJCSTsKIAkJKnN0YXR1cyB8PSBGRV9IQVNfU1lOQzsKIAl9CiAKLQlpZihyZWcwQSAmIDB4MjApCisJaWYgKHJlZzBBICYgMHgyMCkKIAkJKnN0YXR1cyB8PSBGRV9IQVNfQ0FSUklFUjsKIAotCWlmKHJlZzIzIDwgMHhmMCkKKwlpZiAocmVnMjMgPCAweGYwKQogCQkqc3RhdHVzIHw9IEZFX0hBU19TSUdOQUw7CiAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBjeDIyNzAyX3JlYWRfYmVyKHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlLCB1MzIqIGJlcikKK3N0YXRpYyBpbnQgY3gyMjcwMl9yZWFkX2JlcihzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgdTMyICpiZXIpCiB7Ci0Jc3RydWN0IGN4MjI3MDJfc3RhdGUqIHN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisJc3RydWN0IGN4MjI3MDJfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CiAKLQlpZihjeDIyNzAyX3JlYWRyZWcgKHN0YXRlLCAweEU0KSAmIDB4MDIpIHsKKwlpZiAoY3gyMjcwMl9yZWFkcmVnKHN0YXRlLCAweEU0KSAmIDB4MDIpIHsKIAkJLyogUmVhbHRpbWUgc3RhdGlzdGljcyAqLwotCQkqYmVyID0gKGN4MjI3MDJfcmVhZHJlZyAoc3RhdGUsIDB4REUpICYgMHg3RikgPDwgNwotCQkJfCAoY3gyMjcwMl9yZWFkcmVnIChzdGF0ZSwgMHhERikmMHg3Rik7CisJCSpiZXIgPSAoY3gyMjcwMl9yZWFkcmVnKHN0YXRlLCAweERFKSAmIDB4N0YpIDw8IDcKKwkJCXwgKGN4MjI3MDJfcmVhZHJlZyhzdGF0ZSwgMHhERikgJiAweDdGKTsKIAl9IGVsc2UgewogCQkvKiBBdmVyYWd0aW5lIHN0YXRpc3RpY3MgKi8KLQkJKmJlciA9IChjeDIyNzAyX3JlYWRyZWcgKHN0YXRlLCAweERFKSAmIDB4N0YpIDw8IDcKLQkJCXwgY3gyMjcwMl9yZWFkcmVnIChzdGF0ZSwgMHhERik7CisJCSpiZXIgPSAoY3gyMjcwMl9yZWFkcmVnKHN0YXRlLCAweERFKSAmIDB4N0YpIDw8IDcKKwkJCXwgY3gyMjcwMl9yZWFkcmVnKHN0YXRlLCAweERGKTsKIAl9CiAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBjeDIyNzAyX3JlYWRfc2lnbmFsX3N0cmVuZ3RoKHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlLCB1MTYqIHNpZ25hbF9zdHJlbmd0aCkKK3N0YXRpYyBpbnQgY3gyMjcwMl9yZWFkX3NpZ25hbF9zdHJlbmd0aChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwKKwl1MTYgKnNpZ25hbF9zdHJlbmd0aCkKIHsKLQlzdHJ1Y3QgY3gyMjcwMl9zdGF0ZSogc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKwlzdHJ1Y3QgY3gyMjcwMl9zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKIAogCXUxNiByc19iZXIgPSAwOwotCXJzX2JlciA9IGN4MjI3MDJfcmVhZHJlZyAoc3RhdGUsIDB4MjMpOworCXJzX2JlciA9IGN4MjI3MDJfcmVhZHJlZyhzdGF0ZSwgMHgyMyk7CiAJKnNpZ25hbF9zdHJlbmd0aCA9IChyc19iZXIgPDwgOCkgfCByc19iZXI7CiAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBjeDIyNzAyX3JlYWRfc25yKHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlLCB1MTYqIHNucikKK3N0YXRpYyBpbnQgY3gyMjcwMl9yZWFkX3NucihzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgdTE2ICpzbnIpCiB7Ci0Jc3RydWN0IGN4MjI3MDJfc3RhdGUqIHN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisJc3RydWN0IGN4MjI3MDJfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CiAKLQl1MTYgcnNfYmVyPTA7Ci0JaWYoY3gyMjcwMl9yZWFkcmVnIChzdGF0ZSwgMHhFNCkgJiAweDAyKSB7CisJdTE2IHJzX2JlciA9IDA7CisJaWYgKGN4MjI3MDJfcmVhZHJlZyhzdGF0ZSwgMHhFNCkgJiAweDAyKSB7CiAJCS8qIFJlYWx0aW1lIHN0YXRpc3RpY3MgKi8KLQkJcnNfYmVyID0gKGN4MjI3MDJfcmVhZHJlZyAoc3RhdGUsIDB4REUpICYgMHg3RikgPDwgNwotCQkJfCAoY3gyMjcwMl9yZWFkcmVnIChzdGF0ZSwgMHhERikmIDB4N0YpOworCQlyc19iZXIgPSAoY3gyMjcwMl9yZWFkcmVnKHN0YXRlLCAweERFKSAmIDB4N0YpIDw8IDcKKwkJCXwgKGN4MjI3MDJfcmVhZHJlZyhzdGF0ZSwgMHhERikgJiAweDdGKTsKIAl9IGVsc2UgewogCQkvKiBBdmVyYWdpbmUgc3RhdGlzdGljcyAqLwotCQlyc19iZXIgPSAoY3gyMjcwMl9yZWFkcmVnIChzdGF0ZSwgMHhERSkgJiAweDdGKSA8PCA4Ci0JCQl8IGN4MjI3MDJfcmVhZHJlZyAoc3RhdGUsIDB4REYpOworCQlyc19iZXIgPSAoY3gyMjcwMl9yZWFkcmVnKHN0YXRlLCAweERFKSAmIDB4N0YpIDw8IDgKKwkJCXwgY3gyMjcwMl9yZWFkcmVnKHN0YXRlLCAweERGKTsKIAl9CiAJKnNuciA9IH5yc19iZXI7CiAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBjeDIyNzAyX3JlYWRfdWNibG9ja3Moc3RydWN0IGR2Yl9mcm9udGVuZCogZmUsIHUzMiogdWNibG9ja3MpCitzdGF0aWMgaW50IGN4MjI3MDJfcmVhZF91Y2Jsb2NrcyhzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgdTMyICp1Y2Jsb2NrcykKIHsKLQlzdHJ1Y3QgY3gyMjcwMl9zdGF0ZSogc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKwlzdHJ1Y3QgY3gyMjcwMl9zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKIAogCXU4IF91Y2Jsb2NrczsKIAogCS8qIFJTIFVuY29ycmVjdGFibGUgUGFja2V0IENvdW50IHRoZW4gcmVzZXQgKi8KLQlfdWNibG9ja3MgPSBjeDIyNzAyX3JlYWRyZWcgKHN0YXRlLCAweEUzKTsKKwlfdWNibG9ja3MgPSBjeDIyNzAyX3JlYWRyZWcoc3RhdGUsIDB4RTMpOwogCWlmIChzdGF0ZS0+cHJldlVDQmxvY2tzIDwgX3VjYmxvY2tzKQogCQkqdWNibG9ja3MgPSAoX3VjYmxvY2tzIC0gc3RhdGUtPnByZXZVQ0Jsb2Nrcyk7CiAJZWxzZQpAQCAtNDQxLDM0ICs1NDgsMzYgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBjeDIyNzAyX2dldF9mcm9udGVuZChzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBmZSwgc3RydWN0IGR2Yl9mcm9udGVuZF9wYXJhbWV0ZXJzICpwKQorc3RhdGljIGludCBjeDIyNzAyX2dldF9mcm9udGVuZChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwKKwlzdHJ1Y3QgZHZiX2Zyb250ZW5kX3BhcmFtZXRlcnMgKnApCiB7Ci0Jc3RydWN0IGN4MjI3MDJfc3RhdGUqIHN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisJc3RydWN0IGN4MjI3MDJfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CiAKLQl1OCByZWcwQyA9IGN4MjI3MDJfcmVhZHJlZyAoc3RhdGUsIDB4MEMpOworCXU4IHJlZzBDID0gY3gyMjcwMl9yZWFkcmVnKHN0YXRlLCAweDBDKTsKIAogCXAtPmludmVyc2lvbiA9IHJlZzBDICYgMHgxID8gSU5WRVJTSU9OX09OIDogSU5WRVJTSU9OX09GRjsKLQlyZXR1cm4gY3gyMjcwMl9nZXRfdHBzIChzdGF0ZSwgJnAtPnUub2ZkbSk7CisJcmV0dXJuIGN4MjI3MDJfZ2V0X3RwcyhzdGF0ZSwgJnAtPnUub2ZkbSk7CiB9CiAKLXN0YXRpYyBpbnQgY3gyMjcwMl9nZXRfdHVuZV9zZXR0aW5ncyhzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBmZSwgc3RydWN0IGR2Yl9mcm9udGVuZF90dW5lX3NldHRpbmdzICp0dW5lKQorc3RhdGljIGludCBjeDIyNzAyX2dldF90dW5lX3NldHRpbmdzKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLAorCXN0cnVjdCBkdmJfZnJvbnRlbmRfdHVuZV9zZXR0aW5ncyAqdHVuZSkKIHsKIAl0dW5lLT5taW5fZGVsYXlfbXMgPSAxMDAwOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBjeDIyNzAyX3JlbGVhc2Uoc3RydWN0IGR2Yl9mcm9udGVuZCogZmUpCitzdGF0aWMgdm9pZCBjeDIyNzAyX3JlbGVhc2Uoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUpCiB7Ci0Jc3RydWN0IGN4MjI3MDJfc3RhdGUqIHN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisJc3RydWN0IGN4MjI3MDJfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CiAJa2ZyZWUoc3RhdGUpOwogfQogCiBzdGF0aWMgc3RydWN0IGR2Yl9mcm9udGVuZF9vcHMgY3gyMjcwMl9vcHM7CiAKLXN0cnVjdCBkdmJfZnJvbnRlbmQqIGN4MjI3MDJfYXR0YWNoKGNvbnN0IHN0cnVjdCBjeDIyNzAyX2NvbmZpZyogY29uZmlnLAotCQkJCSAgICBzdHJ1Y3QgaTJjX2FkYXB0ZXIqIGkyYykKK3N0cnVjdCBkdmJfZnJvbnRlbmQgKmN4MjI3MDJfYXR0YWNoKGNvbnN0IHN0cnVjdCBjeDIyNzAyX2NvbmZpZyAqY29uZmlnLAorCXN0cnVjdCBpMmNfYWRhcHRlciAqaTJjKQogewotCXN0cnVjdCBjeDIyNzAyX3N0YXRlKiBzdGF0ZSA9IE5VTEw7CisJc3RydWN0IGN4MjI3MDJfc3RhdGUgKnN0YXRlID0gTlVMTDsKIAogCS8qIGFsbG9jYXRlIG1lbW9yeSBmb3IgdGhlIGludGVybmFsIHN0YXRlICovCiAJc3RhdGUgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgY3gyMjcwMl9zdGF0ZSksIEdGUF9LRVJORUwpOwpAQCAtNDg1LDcgKzU5NCw4IEBACiAJCWdvdG8gZXJyb3I7CiAKIAkvKiBjcmVhdGUgZHZiX2Zyb250ZW5kICovCi0JbWVtY3B5KCZzdGF0ZS0+ZnJvbnRlbmQub3BzLCAmY3gyMjcwMl9vcHMsIHNpemVvZihzdHJ1Y3QgZHZiX2Zyb250ZW5kX29wcykpOworCW1lbWNweSgmc3RhdGUtPmZyb250ZW5kLm9wcywgJmN4MjI3MDJfb3BzLAorCQlzaXplb2Yoc3RydWN0IGR2Yl9mcm9udGVuZF9vcHMpKTsKIAlzdGF0ZS0+ZnJvbnRlbmQuZGVtb2R1bGF0b3JfcHJpdiA9IHN0YXRlOwogCXJldHVybiAmc3RhdGUtPmZyb250ZW5kOwogCkBAIC00OTMsNiArNjAzLDcgQEAKIAlrZnJlZShzdGF0ZSk7CiAJcmV0dXJuIE5VTEw7CiB9CitFWFBPUlRfU1lNQk9MKGN4MjI3MDJfYXR0YWNoKTsKIAogc3RhdGljIHN0cnVjdCBkdmJfZnJvbnRlbmRfb3BzIGN4MjI3MDJfb3BzID0gewogCkBAIC01MjUsMTEgKzYzNiw2IEBACiAJLnJlYWRfdWNibG9ja3MgPSBjeDIyNzAyX3JlYWRfdWNibG9ja3MsCiB9OwogCi1tb2R1bGVfcGFyYW0oZGVidWcsIGludCwgMDY0NCk7Ci1NT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiRW5hYmxlIHZlcmJvc2UgZGVidWcgbWVzc2FnZXMiKTsKLQogTU9EVUxFX0RFU0NSSVBUSU9OKCJDb25leGFudCBDWDIyNzAyIERWQi1UIERlbW9kdWxhdG9yIGRyaXZlciIpOwogTU9EVUxFX0FVVEhPUigiU3RldmVuIFRvdGgiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLQotRVhQT1JUX1NZTUJPTChjeDIyNzAyX2F0dGFjaCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvY3gyMjcwMi5oIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2N4MjI3MDIuaAppbmRleCBiMWU0NjVjLi5mMTU0ZTFmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvY3gyMjcwMi5oCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9jeDIyNzAyLmgKQEAgLTMwLDggKzMwLDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L2R2Yi9mcm9udGVuZC5oPgogCi1zdHJ1Y3QgY3gyMjcwMl9jb25maWcKLXsKK3N0cnVjdCBjeDIyNzAyX2NvbmZpZyB7CiAJLyogdGhlIGRlbW9kdWxhdG9yJ3MgaTJjIGFkZHJlc3MgKi8KIAl1OCBkZW1vZF9hZGRyZXNzOwogCkBAIC00MSwxNiArNDAsMTkgQEAKIAl1OCBvdXRwdXRfbW9kZTsKIH07CiAKLSNpZiBkZWZpbmVkKENPTkZJR19EVkJfQ1gyMjcwMikgfHwgKGRlZmluZWQoQ09ORklHX0RWQl9DWDIyNzAyX01PRFVMRSkgJiYgZGVmaW5lZChNT0RVTEUpKQotZXh0ZXJuIHN0cnVjdCBkdmJfZnJvbnRlbmQqIGN4MjI3MDJfYXR0YWNoKGNvbnN0IHN0cnVjdCBjeDIyNzAyX2NvbmZpZyogY29uZmlnLAotCQkJCQkgICBzdHJ1Y3QgaTJjX2FkYXB0ZXIqIGkyYyk7CisjaWYgZGVmaW5lZChDT05GSUdfRFZCX0NYMjI3MDIpIHx8IChkZWZpbmVkKENPTkZJR19EVkJfQ1gyMjcwMl9NT0RVTEUpIFwKKwkmJiBkZWZpbmVkKE1PRFVMRSkpCitleHRlcm4gc3RydWN0IGR2Yl9mcm9udGVuZCAqY3gyMjcwMl9hdHRhY2goCisJY29uc3Qgc3RydWN0IGN4MjI3MDJfY29uZmlnICpjb25maWcsCisJc3RydWN0IGkyY19hZGFwdGVyICppMmMpOwogI2Vsc2UKLXN0YXRpYyBpbmxpbmUgc3RydWN0IGR2Yl9mcm9udGVuZCogY3gyMjcwMl9hdHRhY2goY29uc3Qgc3RydWN0IGN4MjI3MDJfY29uZmlnKiBjb25maWcsCi0JCQkJCSAgIHN0cnVjdCBpMmNfYWRhcHRlciogaTJjKQorc3RhdGljIGlubGluZSBzdHJ1Y3QgZHZiX2Zyb250ZW5kICpjeDIyNzAyX2F0dGFjaCgKKwljb25zdCBzdHJ1Y3QgY3gyMjcwMl9jb25maWcgKmNvbmZpZywKKwlzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyYykKIHsKIAlwcmludGsoS0VSTl9XQVJOSU5HICIlczogZHJpdmVyIGRpc2FibGVkIGJ5IEtjb25maWdcbiIsIF9fZnVuY19fKTsKIAlyZXR1cm4gTlVMTDsKIH0KLSNlbmRpZiAvLyBDT05GSUdfRFZCX0NYMjI3MDIKKyNlbmRpZgogCi0jZW5kaWYgLy8gQ1gyMjcwMl9ICisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9jeDI0MTEwLmggYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvY3gyNDExMC5oCmluZGV4IDE3OTJhZGIuLmZkY2NlZWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9jeDI0MTEwLmgKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2N4MjQxMTAuaApAQCAtMzMsMTIgKzMzLDE3IEBACiAJdTggZGVtb2RfYWRkcmVzczsKIH07CiAKLXN0YXRpYyBpbmxpbmUgaW50IGN4MjQxMTBfcGxsX3dyaXRlKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCB1MzIgdmFsKSB7Ci0JaW50IHIgPSAwOwotCXU4IGJ1ZltdID0geyh1OCkgKHZhbD4+MjQpLCAodTgpICh2YWw+PjE2KSwgKHU4KSAodmFsPj44KX07CitzdGF0aWMgaW5saW5lIGludCBjeDI0MTEwX3BsbF93cml0ZShzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgdTMyIHZhbCkKK3sKKwl1OCBidWZbXSA9IHsKKwkJKHU4KSgodmFsID4+IDI0KSAmIDB4ZmYpLAorCQkodTgpKCh2YWwgPj4gMTYpICYgMHhmZiksCisJCSh1OCkoKHZhbCA+PiA4KSAmIDB4ZmYpCisJfTsKKwogCWlmIChmZS0+b3BzLndyaXRlKQotCQlyID0gZmUtPm9wcy53cml0ZShmZSwgYnVmLCAzKTsKLQlyZXR1cm4gcjsKKwkJcmV0dXJuIGZlLT5vcHMud3JpdGUoZmUsIGJ1ZiwgMyk7CisJcmV0dXJuIDA7CiB9CiAKICNpZiBkZWZpbmVkKENPTkZJR19EVkJfQ1gyNDExMCkgfHwgKGRlZmluZWQoQ09ORklHX0RWQl9DWDI0MTEwX01PRFVMRSkgJiYgZGVmaW5lZChNT0RVTEUpKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2N4MjQxMTYuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9jeDI0MTE2LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjE0NGIzMAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9jeDI0MTE2LmMKQEAgLTAsMCArMSwxNDcwIEBACisvKgorICAgIENvbmV4YW50IGN4MjQxMTYvY3gyNDExOCAtIERWQlMvUzIgU2F0ZWxsaXRlIGRlbW9kL3R1bmVyIGRyaXZlcgorCisgICAgQ29weXJpZ2h0IChDKSAyMDA2LTIwMDggU3RldmVuIFRvdGggPHN0b3RoQGhhdXBwYXVnZS5jb20+CisgICAgQ29weXJpZ2h0IChDKSAyMDA2LTIwMDcgR2VvcmcgQWNoZXIKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOCBEYXJyb24gQnJvYWQKKwlNYXJjaCAyMDA3CisJICAgIEZpeGVkIHNvbWUgYnVncy4KKwkgICAgQWRkZWQgZGlzZXFjIHN1cHBvcnQuCisJICAgIEFkZGVkIGNvcnJlY3RlZCBzaWduYWwgc3RyZW5ndGggc3VwcG9ydC4KKwlBdWd1c3QgMjAwNworCSAgICBTeW5jIHdpdGggbGVnYWN5IHZlcnNpb24uCisJICAgIFNvbWUgY2xlYW4gdXBzLgorICAgIENvcHlyaWdodCAoQykgMjAwOCBJZ29yIExpcGxpYW5pbgorCVNlcHRlbWJlciwgOXRoIDIwMDgKKwkgICAgRml4ZWQgbG9ja2luZyBvbiBoaWdoIHN5bWJvbCByYXRlcyAoPjMwMDAwKS4KKwkgICAgSW1wbGVtZW50IE1QRUcgaW5pdGlhbGl6YXRpb24gcGFyYW1ldGVyLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisqLworCisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2Zpcm13YXJlLmg+CisKKyNpbmNsdWRlICJkdmJfZnJvbnRlbmQuaCIKKyNpbmNsdWRlICJjeDI0MTE2LmgiCisKK3N0YXRpYyBpbnQgZGVidWc7Cittb2R1bGVfcGFyYW0oZGVidWcsIGludCwgMDY0NCk7CitNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiQWN0aXZhdGVzIGZyb250ZW5kIGRlYnVnZ2luZyAoZGVmYXVsdDowKSIpOworCisjZGVmaW5lIGRwcmludGsoYXJncy4uLikgXAorCWRvIHsgXAorCQlpZiAoZGVidWcpIFwKKwkJCXByaW50ayhLRVJOX0lORk8gImN4MjQxMTY6ICIgYXJncyk7IFwKKwl9IHdoaWxlICgwKQorCisjZGVmaW5lIENYMjQxMTZfREVGQVVMVF9GSVJNV0FSRSAiZHZiLWZlLWN4MjQxMTYuZnciCisjZGVmaW5lIENYMjQxMTZfU0VBUkNIX1JBTkdFX0tIWiA1MDAwCisKKy8qIGtub3duIHJlZ2lzdGVycyAqLworI2RlZmluZSBDWDI0MTE2X1JFR19DT01NQU5EICgweDAwKSAgICAgIC8qIGNvbW1hbmQgYXJncyAweDAwLi4weDFlICovCisjZGVmaW5lIENYMjQxMTZfUkVHX0VYRUNVVEUgKDB4MWYpICAgICAgLyogZXhlY3V0ZSBjb21tYW5kICovCisjZGVmaW5lIENYMjQxMTZfUkVHX01BSUxCT1ggKDB4OTYpICAgICAgLyogRlcgb3IgbXVsdGlwdXJwb3NlIG1haWxib3g/ICovCisjZGVmaW5lIENYMjQxMTZfUkVHX1JFU0VUICAgKDB4MjApICAgICAgLyogcmVzZXQgc3RhdHVzID4gMCAgICAgKi8KKyNkZWZpbmUgQ1gyNDExNl9SRUdfU0lHTkFMICAoMHg5ZSkgICAgICAvKiBzaWduYWwgbG93ICAgICAgICAgICAqLworI2RlZmluZSBDWDI0MTE2X1JFR19TU1RBVFVTICgweDlkKSAgICAgIC8qIHNpZ25hbCBoaWdoIC8gc3RhdHVzICovCisjZGVmaW5lIENYMjQxMTZfUkVHX1FVQUxJVFk4ICgweGEzKQorI2RlZmluZSBDWDI0MTE2X1JFR19RU1RBVFVTICgweGJjKQorI2RlZmluZSBDWDI0MTE2X1JFR19RVUFMSVRZMCAoMHhkNSkKKyNkZWZpbmUgQ1gyNDExNl9SRUdfQkVSMCAgICAoMHhjOSkKKyNkZWZpbmUgQ1gyNDExNl9SRUdfQkVSOCAgICAoMHhjOCkKKyNkZWZpbmUgQ1gyNDExNl9SRUdfQkVSMTYgICAoMHhjNykKKyNkZWZpbmUgQ1gyNDExNl9SRUdfQkVSMjQgICAoMHhjNikKKyNkZWZpbmUgQ1gyNDExNl9SRUdfVUNCMCAgICAoMHhjYikKKyNkZWZpbmUgQ1gyNDExNl9SRUdfVUNCOCAgICAoMHhjYSkKKyNkZWZpbmUgQ1gyNDExNl9SRUdfQ0xLRElWICAoMHhmMykKKyNkZWZpbmUgQ1gyNDExNl9SRUdfUkFURURJViAoMHhmOSkKKworLyogY29uZmlndXJlZCBmZWMgKG5vdCB0dW5lZCkgb3IgYWN0dWFsIEZFQyAodHVuZWQpIDE9MS8yIDI9Mi8zIGV0YyAqLworI2RlZmluZSBDWDI0MTE2X1JFR19GRUNTVEFUVVMgKDB4OWMpCisKKy8qIEZFQ1NUQVRVUyBiaXRzICovCisvKiBtYXNrIHRvIGRldGVybWluZSBjb25maWd1cmVkIGZlYyAobm90IHR1bmVkKSBvciBhY3R1YWwgZmVjICh0dW5lZCkgKi8KKyNkZWZpbmUgQ1gyNDExNl9GRUNfRkVDTUFTSyAgICgweDFmKQorCisvKiBTZWxlY3QgRFZCLVMgZGVtb2R1bGF0b3IsIGVsc2UgRFZCLVMyICovCisjZGVmaW5lIENYMjQxMTZfRkVDX0RWQlMgICAgICAoMHgyMCkKKyNkZWZpbmUgQ1gyNDExNl9GRUNfVU5LTk9XTiAgICgweDQwKSAgICAvKiBVbmtub3duL3VudXNlZCAqLworCisvKiBQaWxvdCBtb2RlIHJlcXVlc3RlZCB3aGVuIHR1bmluZyBlbHNlIGFsd2F5cyByZXNldCB3aGVuIHR1bmVkICovCisjZGVmaW5lIENYMjQxMTZfRkVDX1BJTE9UICAgICAoMHg4MCkKKworLyogYXJnIGJ1ZmZlciBzaXplICovCisjZGVmaW5lIENYMjQxMTZfQVJHTEVOICgweDFlKQorCisvKiByb2xsb2ZmICovCisjZGVmaW5lIENYMjQxMTZfUk9MTE9GRl8wMjAgKDB4MDApCisjZGVmaW5lIENYMjQxMTZfUk9MTE9GRl8wMjUgKDB4MDEpCisjZGVmaW5lIENYMjQxMTZfUk9MTE9GRl8wMzUgKDB4MDIpCisKKy8qIHBpbG90IGJpdCAqLworI2RlZmluZSBDWDI0MTE2X1BJTE9UX09GRiAoMHgwMCkKKyNkZWZpbmUgQ1gyNDExNl9QSUxPVF9PTiAoMHg0MCkKKworLyogc2lnbmFsIHN0YXR1cyAqLworI2RlZmluZSBDWDI0MTE2X0hBU19TSUdOQUwgICAoMHgwMSkKKyNkZWZpbmUgQ1gyNDExNl9IQVNfQ0FSUklFUiAgKDB4MDIpCisjZGVmaW5lIENYMjQxMTZfSEFTX1ZJVEVSQkkgICgweDA0KQorI2RlZmluZSBDWDI0MTE2X0hBU19TWU5DTE9DSyAoMHgwOCkKKyNkZWZpbmUgQ1gyNDExNl9IQVNfVU5LTk9XTjEgKDB4MTApCisjZGVmaW5lIENYMjQxMTZfSEFTX1VOS05PV04yICgweDIwKQorI2RlZmluZSBDWDI0MTE2X1NUQVRVU19NQVNLICAoMHgzZikKKyNkZWZpbmUgQ1gyNDExNl9TSUdOQUxfTUFTSyAgKDB4YzApCisKKyNkZWZpbmUgQ1gyNDExNl9ESVNFUUNfVE9ORU9GRiAgICgwKSAgICAvKiB0b25lYnVyc3QgbmV2ZXIgc2VudCAqLworI2RlZmluZSBDWDI0MTE2X0RJU0VRQ19UT05FQ0FDSEUgKDEpICAgIC8qIHRvbmVidXJzdCBjYWNoZWQgICAgICovCisjZGVmaW5lIENYMjQxMTZfRElTRVFDX01FU0dDQUNIRSAoMikgICAgLyogbWVzc2FnZSBjYWNoZWQgICAgICAgKi8KKworLyogYXJnIG9mZnNldCBmb3IgRGlTRXFDICovCisjZGVmaW5lIENYMjQxMTZfRElTRVFDX0JVUlNUICAoMSkKKyNkZWZpbmUgQ1gyNDExNl9ESVNFUUNfQVJHMl8yICgyKSAgIC8qIHVua25vd24gdmFsdWU9MiAqLworI2RlZmluZSBDWDI0MTE2X0RJU0VRQ19BUkczXzAgKDMpICAgLyogdW5rbm93biB2YWx1ZT0wICovCisjZGVmaW5lIENYMjQxMTZfRElTRVFDX0FSRzRfMCAoNCkgICAvKiB1bmtub3duIHZhbHVlPTAgKi8KKyNkZWZpbmUgQ1gyNDExNl9ESVNFUUNfTVNHTEVOICg1KQorI2RlZmluZSBDWDI0MTE2X0RJU0VRQ19NU0dPRlMgKDYpCisKKy8qIERpU0VxQyBidXJzdCAqLworI2RlZmluZSBDWDI0MTE2X0RJU0VRQ19NSU5JX0EgKDApCisjZGVmaW5lIENYMjQxMTZfRElTRVFDX01JTklfQiAoMSkKKworLyogRGlTRXFDIHRvbmUgYnVyc3QgKi8KK3N0YXRpYyBpbnQgdG9uZWJ1cnN0ID0gMTsKK21vZHVsZV9wYXJhbSh0b25lYnVyc3QsIGludCwgMDY0NCk7CitNT0RVTEVfUEFSTV9ERVNDKHRvbmVidXJzdCwgIkRpU0VxQyB0b25lYnVyc3QgMD1PRkYsIDE9VE9ORSBDQUNIRSwgIlwKKwkiMj1NRVNTQUdFIENBQ0hFIChkZWZhdWx0OjEpIik7CisKKy8qIFNOUiBtZWFzdXJlbWVudHMgKi8KK3N0YXRpYyBpbnQgZXNub19zbnI7Cittb2R1bGVfcGFyYW0oZXNub19zbnIsIGludCwgMDY0NCk7CitNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiU05SIHJldHVybiB1bml0cywgMD1QRVJDRU5UQUdFIDAtMTAwLCAiXAorCSIxPUVTTk8oZGIgKiAxMCkgKGRlZmF1bHQ6MCkiKTsKKworZW51bSBjbWRzIHsKKwlDTURfU0VUX1ZDTyAgICAgPSAweDEwLAorCUNNRF9UVU5FUkVRVUVTVCA9IDB4MTEsCisJQ01EX01QRUdDT05GSUcgID0gMHgxMywKKwlDTURfVFVORVJJTklUICAgPSAweDE0LAorCUNNRF9CQU5EV0lEVEggICA9IDB4MTUsCisJQ01EX0dFVEFHQyAgICAgID0gMHgxOSwKKwlDTURfTE5CQ09ORklHICAgPSAweDIwLAorCUNNRF9MTkJTRU5EICAgICA9IDB4MjEsIC8qIEZvcm1lcmx5IENNRF9TRU5EX0RJU0VRQyAqLworCUNNRF9TRVRfVE9ORVBSRSA9IDB4MjIsCisJQ01EX1NFVF9UT05FICAgID0gMHgyMywKKwlDTURfVVBERldWRVJTICAgPSAweDM1LAorCUNNRF9UVU5FUlNMRUVQICA9IDB4MzYsCisJQ01EX0FHQ0NPTlRST0wgID0gMHgzYiwgLyogVW5rbm93biAqLworfTsKKworLyogVGhlIERlbW9kL1R1bmVyIGNhbid0IGVhc2lseSBwcm92aWRlIHRoZXNlLCB3ZSBjYWNoZSB0aGVtICovCitzdHJ1Y3QgY3gyNDExNl90dW5pbmcgeworCXUzMiBmcmVxdWVuY3k7CisJdTMyIHN5bWJvbF9yYXRlOworCWZlX3NwZWN0cmFsX2ludmVyc2lvbl90IGludmVyc2lvbjsKKwlmZV9jb2RlX3JhdGVfdCBmZWM7CisKKwlmZV9tb2R1bGF0aW9uX3QgbW9kdWxhdGlvbjsKKwlmZV9waWxvdF90IHBpbG90OworCWZlX3JvbGxvZmZfdCByb2xsb2ZmOworCisJLyogRGVtb2QgdmFsdWVzICovCisJdTggZmVjX3ZhbDsKKwl1OCBmZWNfbWFzazsKKwl1OCBpbnZlcnNpb25fdmFsOworCXU4IHBpbG90X3ZhbDsKKwl1OCByb2xsb2ZmX3ZhbDsKK307CisKKy8qIEJhc2ljIGNvbW1hbmRzIHRoYXQgYXJlIHNlbnQgdG8gdGhlIGZpcm13YXJlICovCitzdHJ1Y3QgY3gyNDExNl9jbWQgeworCXU4IGxlbjsKKwl1OCBhcmdzW0NYMjQxMTZfQVJHTEVOXTsKK307CisKK3N0cnVjdCBjeDI0MTE2X3N0YXRlIHsKKwlzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyYzsKKwljb25zdCBzdHJ1Y3QgY3gyNDExNl9jb25maWcgKmNvbmZpZzsKKworCXN0cnVjdCBkdmJfZnJvbnRlbmQgZnJvbnRlbmQ7CisKKwlzdHJ1Y3QgY3gyNDExNl90dW5pbmcgZGN1cjsKKwlzdHJ1Y3QgY3gyNDExNl90dW5pbmcgZG54dDsKKworCXU4IHNraXBfZndfbG9hZDsKKwl1OCBidXJzdDsKKwlzdHJ1Y3QgY3gyNDExNl9jbWQgZHNlY19jbWQ7Cit9OworCitzdGF0aWMgaW50IGN4MjQxMTZfd3JpdGVyZWcoc3RydWN0IGN4MjQxMTZfc3RhdGUgKnN0YXRlLCBpbnQgcmVnLCBpbnQgZGF0YSkKK3sKKwl1OCBidWZbXSA9IHsgcmVnLCBkYXRhIH07CisJc3RydWN0IGkyY19tc2cgbXNnID0geyAuYWRkciA9IHN0YXRlLT5jb25maWctPmRlbW9kX2FkZHJlc3MsCisJCS5mbGFncyA9IDAsIC5idWYgPSBidWYsIC5sZW4gPSAyIH07CisJaW50IGVycjsKKworCWlmIChkZWJ1ZyA+IDEpCisJCXByaW50aygiY3gyNDExNjogJXM6IHdyaXRlIHJlZyAweCUwMngsIHZhbHVlIDB4JTAyeFxuIiwKKwkJCV9fZnVuY19fLCByZWcsIGRhdGEpOworCisJZXJyID0gaTJjX3RyYW5zZmVyKHN0YXRlLT5pMmMsICZtc2csIDEpOworCWlmIChlcnIgIT0gMSkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiB3cml0ZXJlZyBlcnJvcihlcnIgPT0gJWksIHJlZyA9PSAweCUwMngsIgorCQkJICIgdmFsdWUgPT0gMHglMDJ4KVxuIiwgX19mdW5jX18sIGVyciwgcmVnLCBkYXRhKTsKKwkJcmV0dXJuIC1FUkVNT1RFSU87CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qIEJ1bGsgYnl0ZSB3cml0ZXMgdG8gYSBzaW5nbGUgSTJDIGFkZHJlc3MsIGZvciAzMmsgZmlybXdhcmUgbG9hZCAqLworc3RhdGljIGludCBjeDI0MTE2X3dyaXRlcmVnTihzdHJ1Y3QgY3gyNDExNl9zdGF0ZSAqc3RhdGUsIGludCByZWcsCisJCQkgICAgIGNvbnN0IHU4ICpkYXRhLCB1MTYgbGVuKQoreworCWludCByZXQgPSAtRVJFTU9URUlPOworCXN0cnVjdCBpMmNfbXNnIG1zZzsKKwl1OCAqYnVmOworCisJYnVmID0ga21hbGxvYyhsZW4gKyAxLCBHRlBfS0VSTkVMKTsKKwlpZiAoYnVmID09IE5VTEwpIHsKKwkJcHJpbnRrKCJVbmFibGUgdG8ga21hbGxvY1xuIik7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gZXJyb3I7CisJfQorCisJKihidWYpID0gcmVnOworCW1lbWNweShidWYgKyAxLCBkYXRhLCBsZW4pOworCisJbXNnLmFkZHIgPSBzdGF0ZS0+Y29uZmlnLT5kZW1vZF9hZGRyZXNzOworCW1zZy5mbGFncyA9IDA7CisJbXNnLmJ1ZiA9IGJ1ZjsKKwltc2cubGVuID0gbGVuICsgMTsKKworCWlmIChkZWJ1ZyA+IDEpCisJCXByaW50ayhLRVJOX0lORk8gImN4MjQxMTY6ICVzOiAgd3JpdGUgcmVnTiAweCUwMngsIGxlbiA9ICVkXG4iLAorCQkJX19mdW5jX18sIHJlZywgbGVuKTsKKworCXJldCA9IGkyY190cmFuc2ZlcihzdGF0ZS0+aTJjLCAmbXNnLCAxKTsKKwlpZiAocmV0ICE9IDEpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogd3JpdGVyZWcgZXJyb3IoZXJyID09ICVpLCByZWcgPT0gMHglMDJ4XG4iLAorCQkJIF9fZnVuY19fLCByZXQsIHJlZyk7CisJCXJldCA9IC1FUkVNT1RFSU87CisJfQorCitlcnJvcjoKKwlrZnJlZShidWYpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBjeDI0MTE2X3JlYWRyZWcoc3RydWN0IGN4MjQxMTZfc3RhdGUgKnN0YXRlLCB1OCByZWcpCit7CisJaW50IHJldDsKKwl1OCBiMFtdID0geyByZWcgfTsKKwl1OCBiMVtdID0geyAwIH07CisJc3RydWN0IGkyY19tc2cgbXNnW10gPSB7CisJCXsgLmFkZHIgPSBzdGF0ZS0+Y29uZmlnLT5kZW1vZF9hZGRyZXNzLCAuZmxhZ3MgPSAwLAorCQkJLmJ1ZiA9IGIwLCAubGVuID0gMSB9LAorCQl7IC5hZGRyID0gc3RhdGUtPmNvbmZpZy0+ZGVtb2RfYWRkcmVzcywgLmZsYWdzID0gSTJDX01fUkQsCisJCQkuYnVmID0gYjEsIC5sZW4gPSAxIH0KKwl9OworCisJcmV0ID0gaTJjX3RyYW5zZmVyKHN0YXRlLT5pMmMsIG1zZywgMik7CisKKwlpZiAocmV0ICE9IDIpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogcmVnPTB4JXggKGVycm9yPSVkKVxuIiwKKwkJCV9fZnVuY19fLCByZWcsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJaWYgKGRlYnVnID4gMSkKKwkJcHJpbnRrKEtFUk5fSU5GTyAiY3gyNDExNjogcmVhZCByZWcgMHglMDJ4LCB2YWx1ZSAweCUwMnhcbiIsCisJCQlyZWcsIGIxWzBdKTsKKworCXJldHVybiBiMVswXTsKK30KKworc3RhdGljIGludCBjeDI0MTE2X3NldF9pbnZlcnNpb24oc3RydWN0IGN4MjQxMTZfc3RhdGUgKnN0YXRlLAorCWZlX3NwZWN0cmFsX2ludmVyc2lvbl90IGludmVyc2lvbikKK3sKKwlkcHJpbnRrKCIlcyglZClcbiIsIF9fZnVuY19fLCBpbnZlcnNpb24pOworCisJc3dpdGNoIChpbnZlcnNpb24pIHsKKwljYXNlIElOVkVSU0lPTl9PRkY6CisJCXN0YXRlLT5kbnh0LmludmVyc2lvbl92YWwgPSAweDAwOworCQlicmVhazsKKwljYXNlIElOVkVSU0lPTl9PTjoKKwkJc3RhdGUtPmRueHQuaW52ZXJzaW9uX3ZhbCA9IDB4MDQ7CisJCWJyZWFrOworCWNhc2UgSU5WRVJTSU9OX0FVVE86CisJCXN0YXRlLT5kbnh0LmludmVyc2lvbl92YWwgPSAweDBDOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlzdGF0ZS0+ZG54dC5pbnZlcnNpb24gPSBpbnZlcnNpb247CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIG1vZGZlYyAobW9kdWxhdGlvbiBhbmQgRkVDKQorICogPT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKgorICogTU9EICAgICAgICAgIEZFQyAgICAgICAgICAgICBtYXNrL3ZhbCAgICBzdGFuZGFyZAorICogLS0tLSAgICAgICAgIC0tLS0tLS0tICAgICAgICAtLS0tLS0tLS0tLSAtLS0tLS0tLQorICogUVBTSyAgICAgICAgIEZFQ18xXzIgICAgICAgICAweDAyIDB4MDIrWCBEVkItUworICogUVBTSyAgICAgICAgIEZFQ18yXzMgICAgICAgICAweDA0IDB4MDIrWCBEVkItUworICogUVBTSyAgICAgICAgIEZFQ18zXzQgICAgICAgICAweDA4IDB4MDIrWCBEVkItUworICogUVBTSyAgICAgICAgIEZFQ180XzUgICAgICAgICAweDEwIDB4MDIrWCBEVkItUyAoPykKKyAqIFFQU0sgICAgICAgICBGRUNfNV82ICAgICAgICAgMHgyMCAweDAyK1ggRFZCLVMKKyAqIFFQU0sgICAgICAgICBGRUNfNl83ICAgICAgICAgMHg0MCAweDAyK1ggRFZCLVMKKyAqIFFQU0sgICAgICAgICBGRUNfN184ICAgICAgICAgMHg4MCAweDAyK1ggRFZCLVMKKyAqIFFQU0sgICAgICAgICBGRUNfOF85ICAgICAgICAgMHgwMSAweDAyK1ggRFZCLVMgKD8pIChOT1QgU1VQUE9SVEVEPykKKyAqIFFQU0sgICAgICAgICBBVVRPICAgICAgICAgICAgMHhmZiAweDAyK1ggRFZCLVMKKyAqCisgKiBGb3IgRFZCLVMgaGlnaCBieXRlIHByb2JhYmx5IHJlcHJlc2VudHMgRkVDCisgKiBhbmQgbG93IGJ5dGUgc2VsZWN0cyB0aGUgbW9kdWxhdG9yLiBUaGUgaGlnaAorICogYnl0ZSBpcyBzZWFyY2ggcmFuZ2UgbWFzay4gQml0IDUgbWF5IHR1cm4KKyAqIG9uIERWQi1TIGFuZCByZW1haW5pbmcgYml0cyByZXByZXNlbnQgc29tZQorICoga2luZCBvZiBjYWxpYnJhdGlvbiAoaG93L3doYXQgaSBkbyBub3Qga25vdykuCisgKgorICogRWcuKDIvMykgc3phcCAiWm9uZSBIb3Jyb3IiCisgKgorICogbWFzay92YWwgPSAweDA0LCAweDIwCisgKiBzdGF0dXMgMWYgfCBzaWduYWwgYzNjMCB8IHNuciBhMzMzIHwgYmVyIDAwMDAwMDk4IHwgdW5jIDAgfCBGRV9IQVNfTE9DSworICoKKyAqIG1hc2svdmFsID0gMHgwNCwgMHgzMAorICogc3RhdHVzIDFmIHwgc2lnbmFsIGMzYzAgfCBzbnIgYTMzMyB8IGJlciAwMDAwMDAwMCB8IHVuYyAwIHwgRkVfSEFTX0xPQ0sKKyAqCisgKiBBZnRlciB0dW5pbmcgRkVDU1RBVFVTIGNvbnRhaW5zIGFjdHVhbCBGRUMKKyAqIGluIHVzZSBudW1iZXJlZCAxIHRocm91Z2ggdG8gOCBmb3IgMS8yIC4uIDIvMyBldGMKKyAqCisgKiBOQkM9Tk9UL05PTiBCQUNLV0FSRCBDT01QQVRJQkxFIFdJVEggRFZCLVMgKERWQi1TMiBvbmx5KQorICoKKyAqIE5CQy1RUFNLICAgICBGRUNfMV8yICAgICAgICAgMHgwMCwgMHgwNCAgICAgIERWQi1TMgorICogTkJDLVFQU0sgICAgIEZFQ18zXzUgICAgICAgICAweDAwLCAweDA1ICAgICAgRFZCLVMyCisgKiBOQkMtUVBTSyAgICAgRkVDXzJfMyAgICAgICAgIDB4MDAsIDB4MDYgICAgICBEVkItUzIKKyAqIE5CQy1RUFNLICAgICBGRUNfM180ICAgICAgICAgMHgwMCwgMHgwNyAgICAgIERWQi1TMgorICogTkJDLVFQU0sgICAgIEZFQ180XzUgICAgICAgICAweDAwLCAweDA4ICAgICAgRFZCLVMyCisgKiBOQkMtUVBTSyAgICAgRkVDXzVfNiAgICAgICAgIDB4MDAsIDB4MDkgICAgICBEVkItUzIKKyAqIE5CQy1RUFNLICAgICBGRUNfOF85ICAgICAgICAgMHgwMCwgMHgwYSAgICAgIERWQi1TMgorICogTkJDLVFQU0sgICAgIEZFQ185XzEwICAgICAgICAweDAwLCAweDBiICAgICAgRFZCLVMyCisgKgorICogTkJDLThQU0sgICAgIEZFQ18zXzUgICAgICAgICAweDAwLCAweDBjICAgICAgRFZCLVMyCisgKiBOQkMtOFBTSyAgICAgRkVDXzJfMyAgICAgICAgIDB4MDAsIDB4MGQgICAgICBEVkItUzIKKyAqIE5CQy04UFNLICAgICBGRUNfM180ICAgICAgICAgMHgwMCwgMHgwZSAgICAgIERWQi1TMgorICogTkJDLThQU0sgICAgIEZFQ181XzYgICAgICAgICAweDAwLCAweDBmICAgICAgRFZCLVMyCisgKiBOQkMtOFBTSyAgICAgRkVDXzhfOSAgICAgICAgIDB4MDAsIDB4MTAgICAgICBEVkItUzIKKyAqIE5CQy04UFNLICAgICBGRUNfOV8xMCAgICAgICAgMHgwMCwgMHgxMSAgICAgIERWQi1TMgorICoKKyAqIEZvciBEVkItUzIgbG93IGJ5dGVzIHNlbGVjdHMgYm90aCBtb2R1bGF0b3IKKyAqIGFuZCBGRUMuIEhpZ2ggYnl0ZSBpcyBtZWFuaW5nbGVzcyBoZXJlLiBUbworICogc2V0IHBpbG90LCBiaXQgNiAoMHg0MCkgaXMgc2V0LiBXaGVuIGluc3BlY3RpbmcKKyAqIEZFQ1NUQVRVUyBiaXQgNyAoMHg4MCkgcmVwcmVzZW50cyB0aGUgcGlsb3QKKyAqIHNlbGVjdGlvbiB3aGlsc3Qgbm90IHR1bmVkLiBXaGVuIHR1bmVkLCBhY3R1YWwgRkVDCisgKiBpbiB1c2UgaXMgZm91bmQgaW4gRkVDU1RBVFVTIGFzIHBlciBhYm92ZS4gUGlsb3QKKyAqIHZhbHVlIGlzIHJlc2V0LgorICovCisKKy8qIEEgdGFibGUgb2YgbW9kdWxhdGlvbiwgZmVjIGFuZCBjb25maWd1cmF0aW9uIGJ5dGVzIGZvciB0aGUgZGVtb2QuCisgKiBOb3QgYWxsIFMyIG1tb2R1bGF0aW9uIHNjaGVtZXMgYXJlIHN1cHBvcnQgYW5kIG5vdCBhbGwgcmF0ZXMgd2l0aAorICogYSBzY2hlbWUgYXJlIHN1cHBvcnQuIEVzcGVjaWFsbHksIG5vIGF1dG8gZGV0ZWN0IHdoZW4gaW4gUzIgbW9kZS4KKyAqLworc3RydWN0IGN4MjQxMTZfbW9kZmVjIHsKKwlmZV9kZWxpdmVyeV9zeXN0ZW1fdCBkZWxpdmVyeV9zeXN0ZW07CisJZmVfbW9kdWxhdGlvbl90IG1vZHVsYXRpb247CisJZmVfY29kZV9yYXRlX3QgZmVjOworCXU4IG1hc2s7CS8qIEluIERWQlMgbW9kZSB0aGlzIGlzIHVzZWQgdG8gYXV0b2RldGVjdCAqLworCXU4IHZhbDsJCS8qIFBhc3NlZCB0byB0aGUgZmlybXdhcmUgdG8gaW5kaWNhdGUgbW9kZSBzZWxlY3Rpb24gKi8KK30gQ1gyNDExNl9NT0RGRUNfTU9ERVNbXSA9IHsKKyAvKiBRUFNLLiBGb3IgdW5rbm93biByYXRlcyB3ZSBzZXQgaGFyZHdhcmUgdG8gYXV0byBkZXRlY3QgMHhmZSAweDMwICovCisKKyAvKm1vZCAgIGZlYyAgICAgICBtYXNrICB2YWwgKi8KKyB7IFNZU19EVkJTLCBRUFNLLCBGRUNfTk9ORSwgMHhmZSwgMHgzMCB9LAorIHsgU1lTX0RWQlMsIFFQU0ssIEZFQ18xXzIsICAweDAyLCAweDJlIH0sIC8qIDAwMDAwMDEwIDAwMTAxMTEwICovCisgeyBTWVNfRFZCUywgUVBTSywgRkVDXzJfMywgIDB4MDQsIDB4MmYgfSwgLyogMDAwMDAxMDAgMDAxMDExMTEgKi8KKyB7IFNZU19EVkJTLCBRUFNLLCBGRUNfM180LCAgMHgwOCwgMHgzMCB9LCAvKiAwMDAwMTAwMCAwMDExMDAwMCAqLworIHsgU1lTX0RWQlMsIFFQU0ssIEZFQ180XzUsICAweGZlLCAweDMwIH0sIC8qIDAwMD8wMDAwID8gICAgICAgICovCisgeyBTWVNfRFZCUywgUVBTSywgRkVDXzVfNiwgIDB4MjAsIDB4MzEgfSwgLyogMDAxMDAwMDAgMDAxMTAwMDEgKi8KKyB7IFNZU19EVkJTLCBRUFNLLCBGRUNfNl83LCAgMHhmZSwgMHgzMCB9LCAvKiAwPzAwMDAwMCA/ICAgICAgICAqLworIHsgU1lTX0RWQlMsIFFQU0ssIEZFQ183XzgsICAweDgwLCAweDMyIH0sIC8qIDEwMDAwMDAwIDAwMTEwMDEwICovCisgeyBTWVNfRFZCUywgUVBTSywgRkVDXzhfOSwgIDB4ZmUsIDB4MzAgfSwgLyogMDAwMDAwMD8gPyAgICAgICAgKi8KKyB7IFNZU19EVkJTLCBRUFNLLCBGRUNfQVVUTywgMHhmZSwgMHgzMCB9LAorIC8qIE5CQy1RUFNLICovCisgeyBTWVNfRFZCUzIsIFFQU0ssIEZFQ18xXzIsICAweDAwLCAweDA0IH0sCisgeyBTWVNfRFZCUzIsIFFQU0ssIEZFQ18zXzUsICAweDAwLCAweDA1IH0sCisgeyBTWVNfRFZCUzIsIFFQU0ssIEZFQ18yXzMsICAweDAwLCAweDA2IH0sCisgeyBTWVNfRFZCUzIsIFFQU0ssIEZFQ18zXzQsICAweDAwLCAweDA3IH0sCisgeyBTWVNfRFZCUzIsIFFQU0ssIEZFQ180XzUsICAweDAwLCAweDA4IH0sCisgeyBTWVNfRFZCUzIsIFFQU0ssIEZFQ181XzYsICAweDAwLCAweDA5IH0sCisgeyBTWVNfRFZCUzIsIFFQU0ssIEZFQ184XzksICAweDAwLCAweDBhIH0sCisgeyBTWVNfRFZCUzIsIFFQU0ssIEZFQ185XzEwLCAweDAwLCAweDBiIH0sCisgLyogOFBTSyAqLworIHsgU1lTX0RWQlMyLCBQU0tfOCwgRkVDXzNfNSwgIDB4MDAsIDB4MGMgfSwKKyB7IFNZU19EVkJTMiwgUFNLXzgsIEZFQ18yXzMsICAweDAwLCAweDBkIH0sCisgeyBTWVNfRFZCUzIsIFBTS184LCBGRUNfM180LCAgMHgwMCwgMHgwZSB9LAorIHsgU1lTX0RWQlMyLCBQU0tfOCwgRkVDXzVfNiwgIDB4MDAsIDB4MGYgfSwKKyB7IFNZU19EVkJTMiwgUFNLXzgsIEZFQ184XzksICAweDAwLCAweDEwIH0sCisgeyBTWVNfRFZCUzIsIFBTS184LCBGRUNfOV8xMCwgMHgwMCwgMHgxMSB9LAorIC8qCisgICogYHZhbCcgY2FuIGJlIGZvdW5kIGluIHRoZSBGRUNTVEFUVVMgcmVnaXN0ZXIgd2hlbiB0dW5pbmcuCisgICogRkVDU1RBVFVTIHdpbGwgZ2l2ZSB0aGUgYWN0dWFsIEZFQyBpbiB1c2UgaWYgdHVuaW5nIHdhcyBzdWNjZXNzZnVsLgorICAqLworfTsKKworc3RhdGljIGludCBjeDI0MTE2X2xvb2t1cF9mZWNtb2Qoc3RydWN0IGN4MjQxMTZfc3RhdGUgKnN0YXRlLAorCWZlX21vZHVsYXRpb25fdCBtLCBmZV9jb2RlX3JhdGVfdCBmKQoreworCWludCBpLCByZXQgPSAtRU9QTk9UU1VQUDsKKworCWRwcmludGsoIiVzKDB4JTAyeCwweCUwMngpXG4iLCBfX2Z1bmNfXywgbSwgZik7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShDWDI0MTE2X01PREZFQ19NT0RFUyk7IGkrKykgeworCQlpZiAoKG0gPT0gQ1gyNDExNl9NT0RGRUNfTU9ERVNbaV0ubW9kdWxhdGlvbikgJiYKKwkJCShmID09IENYMjQxMTZfTU9ERkVDX01PREVTW2ldLmZlYykpIHsKKwkJCQlyZXQgPSBpOworCQkJCWJyZWFrOworCQkJfQorCX0KKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgY3gyNDExNl9zZXRfZmVjKHN0cnVjdCBjeDI0MTE2X3N0YXRlICpzdGF0ZSwKKwlmZV9tb2R1bGF0aW9uX3QgbW9kLCBmZV9jb2RlX3JhdGVfdCBmZWMpCit7CisJaW50IHJldCA9IDA7CisKKwlkcHJpbnRrKCIlcygweCUwMngsMHglMDJ4KVxuIiwgX19mdW5jX18sIG1vZCwgZmVjKTsKKworCXJldCA9IGN4MjQxMTZfbG9va3VwX2ZlY21vZChzdGF0ZSwgbW9kLCBmZWMpOworCisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlzdGF0ZS0+ZG54dC5mZWMgPSBmZWM7CisJc3RhdGUtPmRueHQuZmVjX3ZhbCA9IENYMjQxMTZfTU9ERkVDX01PREVTW3JldF0udmFsOworCXN0YXRlLT5kbnh0LmZlY19tYXNrID0gQ1gyNDExNl9NT0RGRUNfTU9ERVNbcmV0XS5tYXNrOworCWRwcmludGsoIiVzKCkgbWFzay92YWwgPSAweCUwMngvMHglMDJ4XG4iLCBfX2Z1bmNfXywKKwkJc3RhdGUtPmRueHQuZmVjX21hc2ssIHN0YXRlLT5kbnh0LmZlY192YWwpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY3gyNDExNl9zZXRfc3ltYm9scmF0ZShzdHJ1Y3QgY3gyNDExNl9zdGF0ZSAqc3RhdGUsIHUzMiByYXRlKQoreworCWRwcmludGsoIiVzKCVkKVxuIiwgX19mdW5jX18sIHJhdGUpOworCisJLyogIGNoZWNrIGlmIHN5bWJvbCByYXRlIGlzIHdpdGhpbiBsaW1pdHMgKi8KKwlpZiAoKHJhdGUgPiBzdGF0ZS0+ZnJvbnRlbmQub3BzLmluZm8uc3ltYm9sX3JhdGVfbWF4KSB8fAorCSAgICAocmF0ZSA8IHN0YXRlLT5mcm9udGVuZC5vcHMuaW5mby5zeW1ib2xfcmF0ZV9taW4pKSB7CisJCWRwcmludGsoIiVzKCkgdW5zdXBwb3J0ZWQgc3ltYm9sX3JhdGUgPSAlZFxuIiwgX19mdW5jX18sIHJhdGUpOworCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisJfQorCisJc3RhdGUtPmRueHQuc3ltYm9sX3JhdGUgPSByYXRlOworCWRwcmludGsoIiVzKCkgc3ltYm9sX3JhdGUgPSAlZFxuIiwgX19mdW5jX18sIHJhdGUpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY3gyNDExNl9sb2FkX2Zpcm13YXJlKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLAorCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZncpOworCitzdGF0aWMgaW50IGN4MjQxMTZfZmlybXdhcmVfb25kZW1hbmQoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUpCit7CisJc3RydWN0IGN4MjQxMTZfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisJY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdzsKKwlpbnQgcmV0ID0gMDsKKworCWRwcmludGsoIiVzKClcbiIsIF9fZnVuY19fKTsKKworCWlmIChjeDI0MTE2X3JlYWRyZWcoc3RhdGUsIDB4MjApID4gMCkgeworCisJCWlmIChzdGF0ZS0+c2tpcF9md19sb2FkKQorCQkJcmV0dXJuIDA7CisKKwkJLyogTG9hZCBmaXJtd2FyZSAqLworCQkvKiByZXF1ZXN0IHRoZSBmaXJtd2FyZSwgdGhpcyB3aWxsIGJsb2NrIHVudGlsIGxvYWRlZCAqLworCQlwcmludGsoS0VSTl9JTkZPICIlczogV2FpdGluZyBmb3IgZmlybXdhcmUgdXBsb2FkICglcykuLi5cbiIsCisJCQlfX2Z1bmNfXywgQ1gyNDExNl9ERUZBVUxUX0ZJUk1XQVJFKTsKKwkJcmV0ID0gcmVxdWVzdF9maXJtd2FyZSgmZncsIENYMjQxMTZfREVGQVVMVF9GSVJNV0FSRSwKKwkJCSZzdGF0ZS0+aTJjLT5kZXYpOworCQlwcmludGsoS0VSTl9JTkZPICIlczogV2FpdGluZyBmb3IgZmlybXdhcmUgdXBsb2FkKDIpLi4uXG4iLAorCQkJX19mdW5jX18pOworCQlpZiAocmV0KSB7CisJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBObyBmaXJtd2FyZSB1cGxvYWRlZCAiCisJCQkJIih0aW1lb3V0IG9yIGZpbGUgbm90IGZvdW5kPylcbiIsIF9fZnVuY19fKTsKKwkJCXJldHVybiByZXQ7CisJCX0KKworCQkvKiBNYWtlIHN1cmUgd2UgZG9uJ3QgcmVjdXJzZSBiYWNrIHRocm91Z2ggaGVyZQorCQkgKiBkdXJpbmcgbG9hZGluZyAqLworCQlzdGF0ZS0+c2tpcF9md19sb2FkID0gMTsKKworCQlyZXQgPSBjeDI0MTE2X2xvYWRfZmlybXdhcmUoZmUsIGZ3KTsKKwkJaWYgKHJldCkKKwkJCXByaW50ayhLRVJOX0VSUiAiJXM6IFdyaXRpbmcgZmlybXdhcmUgdG8gZGV2aWNlIGZhaWxlZFxuIiwKKwkJCQlfX2Z1bmNfXyk7CisKKwkJcmVsZWFzZV9maXJtd2FyZShmdyk7CisKKwkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IEZpcm13YXJlIHVwbG9hZCAlc1xuIiwgX19mdW5jX18sCisJCQlyZXQgPT0gMCA/ICJjb21wbGV0ZSIgOiAiZmFpbGVkIik7CisKKwkJLyogRW5zdXJlIGZpcm13YXJlIGlzIGFsd2F5cyBsb2FkZWQgaWYgcmVxdWlyZWQgKi8KKwkJc3RhdGUtPnNraXBfZndfbG9hZCA9IDA7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworLyogVGFrZSBhIGJhc2ljIGZpcm13YXJlIGNvbW1hbmQgc3RydWN0dXJlLCBmb3JtYXQgaXQKKyAqIGFuZCBmb3J3YXJkIGl0IGZvciBwcm9jZXNzaW5nCisgKi8KK3N0YXRpYyBpbnQgY3gyNDExNl9jbWRfZXhlY3V0ZShzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgc3RydWN0IGN4MjQxMTZfY21kICpjbWQpCit7CisJc3RydWN0IGN4MjQxMTZfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisJaW50IGksIHJldDsKKworCWRwcmludGsoIiVzKClcbiIsIF9fZnVuY19fKTsKKworCS8qIExvYWQgdGhlIGZpcm13YXJlIGlmIHJlcXVpcmVkICovCisJcmV0ID0gY3gyNDExNl9maXJtd2FyZV9vbmRlbWFuZChmZSk7CisJaWYgKHJldCAhPSAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXMoKTogVW5hYmxlIGluaXRpYWxpc2UgdGhlIGZpcm13YXJlXG4iLAorCQkJX19mdW5jX18pOworCQlyZXR1cm4gcmV0OworCX0KKworCS8qIFdyaXRlIHRoZSBjb21tYW5kICovCisJZm9yIChpID0gMDsgaSA8IGNtZC0+bGVuIDsgaSsrKSB7CisJCWRwcmludGsoIiVzOiAweCUwMnggPT0gMHglMDJ4XG4iLCBfX2Z1bmNfXywgaSwgY21kLT5hcmdzW2ldKTsKKwkJY3gyNDExNl93cml0ZXJlZyhzdGF0ZSwgaSwgY21kLT5hcmdzW2ldKTsKKwl9CisKKwkvKiBTdGFydCBleGVjdXRpb24gYW5kIHdhaXQgZm9yIGNtZCB0byB0ZXJtaW5hdGUgKi8KKwljeDI0MTE2X3dyaXRlcmVnKHN0YXRlLCBDWDI0MTE2X1JFR19FWEVDVVRFLCAweDAxKTsKKwl3aGlsZSAoY3gyNDExNl9yZWFkcmVnKHN0YXRlLCBDWDI0MTE2X1JFR19FWEVDVVRFKSkgeworCQltc2xlZXAoMTApOworCQlpZiAoaSsrID4gNjQpIHsKKwkJCS8qIEF2b2lkIGxvb3BpbmcgZm9yZXZlciBpZiB0aGUgZmlybXdhcmUgZG9lcworCQkJCW5vdCByZXNwb25kICovCisJCQlwcmludGsoS0VSTl9XQVJOSU5HICIlcygpIEZpcm13YXJlIG5vdCByZXNwb25kaW5nXG4iLAorCQkJCV9fZnVuY19fKTsKKwkJCXJldHVybiAtRVJFTU9URUlPOworCQl9CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGN4MjQxMTZfbG9hZF9maXJtd2FyZShzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwKKwljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3KQoreworCXN0cnVjdCBjeDI0MTE2X3N0YXRlICpzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCXN0cnVjdCBjeDI0MTE2X2NtZCBjbWQ7CisJaW50IGksIHJldDsKKwl1bnNpZ25lZCBjaGFyIHZlcnNbNF07CisKKwlkcHJpbnRrKCIlc1xuIiwgX19mdW5jX18pOworCWRwcmludGsoIkZpcm13YXJlIGlzICV6dSBieXRlcyAoJTAyeCAlMDJ4IC4uICUwMnggJTAyeClcbiIsCisJCQlmdy0+c2l6ZSwKKwkJCWZ3LT5kYXRhWzBdLAorCQkJZnctPmRhdGFbMV0sCisJCQlmdy0+ZGF0YVtmdy0+c2l6ZS0yXSwKKwkJCWZ3LT5kYXRhW2Z3LT5zaXplLTFdKTsKKworCS8qIFRvZ2dsZSA4OHggU1JTVCBwaW4gdG8gcmVzZXQgZGVtb2QgKi8KKwlpZiAoc3RhdGUtPmNvbmZpZy0+cmVzZXRfZGV2aWNlKQorCQlzdGF0ZS0+Y29uZmlnLT5yZXNldF9kZXZpY2UoZmUpOworCisJLyogQmVnaW4gdGhlIGZpcm13YXJlIGxvYWQgcHJvY2VzcyAqLworCS8qIFByZXBhcmUgdGhlIGRlbW9kLCBsb2FkIHRoZSBmaXJtd2FyZSwgY2xlYW51cCBhZnRlciBsb2FkICovCisKKwkvKiBJbml0IFBMTCAqLworCWN4MjQxMTZfd3JpdGVyZWcoc3RhdGUsIDB4RTUsIDB4MDApOworCWN4MjQxMTZfd3JpdGVyZWcoc3RhdGUsIDB4RjEsIDB4MDgpOworCWN4MjQxMTZfd3JpdGVyZWcoc3RhdGUsIDB4RjIsIDB4MTMpOworCisJLyogU3RhcnQgUExMICovCisJY3gyNDExNl93cml0ZXJlZyhzdGF0ZSwgMHhlMCwgMHgwMyk7CisJY3gyNDExNl93cml0ZXJlZyhzdGF0ZSwgMHhlMCwgMHgwMCk7CisKKwkvKiBVbmtub3duICovCisJY3gyNDExNl93cml0ZXJlZyhzdGF0ZSwgQ1gyNDExNl9SRUdfQ0xLRElWLCAweDQ2KTsKKwljeDI0MTE2X3dyaXRlcmVnKHN0YXRlLCBDWDI0MTE2X1JFR19SQVRFRElWLCAweDAwKTsKKworCS8qIFVua25vd24gKi8KKwljeDI0MTE2X3dyaXRlcmVnKHN0YXRlLCAweEYwLCAweDAzKTsKKwljeDI0MTE2X3dyaXRlcmVnKHN0YXRlLCAweEY0LCAweDgxKTsKKwljeDI0MTE2X3dyaXRlcmVnKHN0YXRlLCAweEY1LCAweDAwKTsKKwljeDI0MTE2X3dyaXRlcmVnKHN0YXRlLCAweEY2LCAweDAwKTsKKworCS8qIHdyaXRlIHRoZSBlbnRpcmUgZmlybXdhcmUgYXMgb25lIHRyYW5zYWN0aW9uICovCisJY3gyNDExNl93cml0ZXJlZ04oc3RhdGUsIDB4RjcsIGZ3LT5kYXRhLCBmdy0+c2l6ZSk7CisKKwljeDI0MTE2X3dyaXRlcmVnKHN0YXRlLCAweEY0LCAweDEwKTsKKwljeDI0MTE2X3dyaXRlcmVnKHN0YXRlLCAweEYwLCAweDAwKTsKKwljeDI0MTE2X3dyaXRlcmVnKHN0YXRlLCAweEY4LCAweDA2KTsKKworCS8qIEZpcm13YXJlIENNRCAxMDogVkNPIGNvbmZpZyAqLworCWNtZC5hcmdzWzB4MDBdID0gQ01EX1NFVF9WQ087CisJY21kLmFyZ3NbMHgwMV0gPSAweDA1OworCWNtZC5hcmdzWzB4MDJdID0gMHhkYzsKKwljbWQuYXJnc1sweDAzXSA9IDB4ZGE7CisJY21kLmFyZ3NbMHgwNF0gPSAweGFlOworCWNtZC5hcmdzWzB4MDVdID0gMHhhYTsKKwljbWQuYXJnc1sweDA2XSA9IDB4MDQ7CisJY21kLmFyZ3NbMHgwN10gPSAweDlkOworCWNtZC5hcmdzWzB4MDhdID0gMHhmYzsKKwljbWQuYXJnc1sweDA5XSA9IDB4MDY7CisJY21kLmxlbiA9IDB4MGE7CisJcmV0ID0gY3gyNDExNl9jbWRfZXhlY3V0ZShmZSwgJmNtZCk7CisJaWYgKHJldCAhPSAwKQorCQlyZXR1cm4gcmV0OworCisJY3gyNDExNl93cml0ZXJlZyhzdGF0ZSwgQ1gyNDExNl9SRUdfU1NUQVRVUywgMHgwMCk7CisKKwkvKiBGaXJtd2FyZSBDTUQgMTQ6IFR1bmVyIGNvbmZpZyAqLworCWNtZC5hcmdzWzB4MDBdID0gQ01EX1RVTkVSSU5JVDsKKwljbWQuYXJnc1sweDAxXSA9IDB4MDA7CisJY21kLmFyZ3NbMHgwMl0gPSAweDAwOworCWNtZC5sZW4gPSAweDAzOworCXJldCA9IGN4MjQxMTZfY21kX2V4ZWN1dGUoZmUsICZjbWQpOworCWlmIChyZXQgIT0gMCkKKwkJcmV0dXJuIHJldDsKKworCWN4MjQxMTZfd3JpdGVyZWcoc3RhdGUsIDB4ZTUsIDB4MDApOworCisJLyogRmlybXdhcmUgQ01EIDEzOiBNUEVHIGNvbmZpZyAqLworCWNtZC5hcmdzWzB4MDBdID0gQ01EX01QRUdDT05GSUc7CisJY21kLmFyZ3NbMHgwMV0gPSAweDAxOworCWNtZC5hcmdzWzB4MDJdID0gMHg3NTsKKwljbWQuYXJnc1sweDAzXSA9IDB4MDA7CisJaWYgKHN0YXRlLT5jb25maWctPm1wZ19jbGtfcG9zX3BvbCkKKwkJY21kLmFyZ3NbMHgwNF0gPSBzdGF0ZS0+Y29uZmlnLT5tcGdfY2xrX3Bvc19wb2w7CisJZWxzZQorCQljbWQuYXJnc1sweDA0XSA9IDB4MDI7CisJY21kLmFyZ3NbMHgwNV0gPSAweDAwOworCWNtZC5sZW4gPSAweDA2OworCXJldCA9IGN4MjQxMTZfY21kX2V4ZWN1dGUoZmUsICZjbWQpOworCWlmIChyZXQgIT0gMCkKKwkJcmV0dXJuIHJldDsKKworCS8qIEZpcm13YXJlIENNRCAzNTogR2V0IGZpcm13YXJlIHZlcnNpb24gKi8KKwljbWQuYXJnc1sweDAwXSA9IENNRF9VUERGV1ZFUlM7CisJY21kLmxlbiA9IDB4MDI7CisJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgeworCQljbWQuYXJnc1sweDAxXSA9IGk7CisJCXJldCA9IGN4MjQxMTZfY21kX2V4ZWN1dGUoZmUsICZjbWQpOworCQlpZiAocmV0ICE9IDApCisJCQlyZXR1cm4gcmV0OworCQl2ZXJzW2ldID0gY3gyNDExNl9yZWFkcmVnKHN0YXRlLCBDWDI0MTE2X1JFR19NQUlMQk9YKTsKKwl9CisJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IEZXIHZlcnNpb24gJWkuJWkuJWkuJWlcbiIsIF9fZnVuY19fLAorCQl2ZXJzWzBdLCB2ZXJzWzFdLCB2ZXJzWzJdLCB2ZXJzWzNdKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGN4MjQxMTZfc2V0X3ZvbHRhZ2Uoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsCisJZmVfc2VjX3ZvbHRhZ2VfdCB2b2x0YWdlKQoreworCS8qIFRoZSBpc2w2NDIxIG1vZHVsZSB3aWxsIG92ZXJyaWRlIHRoaXMgZnVuY3Rpb24gaW4gdGhlIGZvcHMuICovCisJZHByaW50aygiJXMoKSBUaGlzIHNob3VsZCBuZXZlciBhcHBlYXIgaWYgdGhlIGlzbDY0MjEgbW9kdWxlICIKKwkJImlzIGxvYWRlZCBjb3JyZWN0bHlcbiIsIF9fZnVuY19fKTsKKworCXJldHVybiAtRU9QTk9UU1VQUDsKK30KKworc3RhdGljIGludCBjeDI0MTE2X3JlYWRfc3RhdHVzKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCBmZV9zdGF0dXNfdCAqc3RhdHVzKQoreworCXN0cnVjdCBjeDI0MTE2X3N0YXRlICpzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCisJaW50IGxvY2sgPSBjeDI0MTE2X3JlYWRyZWcoc3RhdGUsIENYMjQxMTZfUkVHX1NTVEFUVVMpOworCisJZHByaW50aygiJXM6IHN0YXR1cyA9IDB4JTAyeFxuIiwgX19mdW5jX18sIGxvY2spOworCisJKnN0YXR1cyA9IDA7CisKKwlpZiAobG9jayAmIENYMjQxMTZfSEFTX1NJR05BTCkKKwkJKnN0YXR1cyB8PSBGRV9IQVNfU0lHTkFMOworCWlmIChsb2NrICYgQ1gyNDExNl9IQVNfQ0FSUklFUikKKwkJKnN0YXR1cyB8PSBGRV9IQVNfQ0FSUklFUjsKKwlpZiAobG9jayAmIENYMjQxMTZfSEFTX1ZJVEVSQkkpCisJCSpzdGF0dXMgfD0gRkVfSEFTX1ZJVEVSQkk7CisJaWYgKGxvY2sgJiBDWDI0MTE2X0hBU19TWU5DTE9DSykKKwkJKnN0YXR1cyB8PSBGRV9IQVNfU1lOQyB8IEZFX0hBU19MT0NLOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY3gyNDExNl9yZWFkX2JlcihzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgdTMyICpiZXIpCit7CisJc3RydWN0IGN4MjQxMTZfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisKKwlkcHJpbnRrKCIlcygpXG4iLCBfX2Z1bmNfXyk7CisKKwkqYmVyID0gIChjeDI0MTE2X3JlYWRyZWcoc3RhdGUsIENYMjQxMTZfUkVHX0JFUjI0KSA8PCAyNCkgfAorCQkoY3gyNDExNl9yZWFkcmVnKHN0YXRlLCBDWDI0MTE2X1JFR19CRVIxNikgPDwgMTYpIHwKKwkJKGN4MjQxMTZfcmVhZHJlZyhzdGF0ZSwgQ1gyNDExNl9SRUdfQkVSOCkgIDw8IDgpICB8CisJCSBjeDI0MTE2X3JlYWRyZWcoc3RhdGUsIENYMjQxMTZfUkVHX0JFUjApOworCisJcmV0dXJuIDA7Cit9CisKKy8qIFRPRE8gRGV0ZXJtaW5lIGZ1bmN0aW9uIGFuZCBzY2FsZSBhcHByb3ByaWF0ZWx5ICovCitzdGF0aWMgaW50IGN4MjQxMTZfcmVhZF9zaWduYWxfc3RyZW5ndGgoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsCisJdTE2ICpzaWduYWxfc3RyZW5ndGgpCit7CisJc3RydWN0IGN4MjQxMTZfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisJc3RydWN0IGN4MjQxMTZfY21kIGNtZDsKKwlpbnQgcmV0OworCXUxNiBzaWdfcmVhZGluZzsKKworCWRwcmludGsoIiVzKClcbiIsIF9fZnVuY19fKTsKKworCS8qIEZpcm13YXJlIENNRCAxOTogR2V0IEFHQyAqLworCWNtZC5hcmdzWzB4MDBdID0gQ01EX0dFVEFHQzsKKwljbWQubGVuID0gMHgwMTsKKwlyZXQgPSBjeDI0MTE2X2NtZF9leGVjdXRlKGZlLCAmY21kKTsKKwlpZiAocmV0ICE9IDApCisJCXJldHVybiByZXQ7CisKKwlzaWdfcmVhZGluZyA9CisJCShjeDI0MTE2X3JlYWRyZWcoc3RhdGUsCisJCQlDWDI0MTE2X1JFR19TU1RBVFVTKSAmIENYMjQxMTZfU0lHTkFMX01BU0spIHwKKwkJKGN4MjQxMTZfcmVhZHJlZyhzdGF0ZSwgQ1gyNDExNl9SRUdfU0lHTkFMKSA8PCA2KTsKKwkqc2lnbmFsX3N0cmVuZ3RoID0gMCAtIHNpZ19yZWFkaW5nOworCisJZHByaW50aygiJXM6IHJhdyAvIGNvb2tlZCA9IDB4JTA0eCAvIDB4JTA0eFxuIiwKKwkJX19mdW5jX18sIHNpZ19yZWFkaW5nLCAqc2lnbmFsX3N0cmVuZ3RoKTsKKworCXJldHVybiAwOworfQorCisvKiBTTlIgKDAuLjEwMCklID0gKHNpZyAmIDB4ZjApICogMTAgKyAoc2lnICYgMHgwZikgKiAxMCAvIDE2ICovCitzdGF0aWMgaW50IGN4MjQxMTZfcmVhZF9zbnJfcGN0KHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCB1MTYgKnNucikKK3sKKwlzdHJ1Y3QgY3gyNDExNl9zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKwl1OCBzbnJfcmVhZGluZzsKKwlzdGF0aWMgY29uc3QgdTMyIHNucl90YWJbXSA9IHsgLyogMTAgeCBUYWJsZSAocm91bmRlZCB1cCkgKi8KKwkJMHgwMDAwMCwgMHgwMTk5QSwgMHgwMzMzMywgMHgwNGNjRCwgMHgwNjY2NywKKwkJMHgwODAwMCwgMHgwOTk5QSwgMHgwYjMzMywgMHgwY2NjRCwgMHgwZTY2NywKKwkJMHgxMDAwMCwgMHgxMTk5QSwgMHgxMzMzMywgMHgxNGNjRCwgMHgxNjY2NywKKwkJMHgxODAwMCB9OworCisJZHByaW50aygiJXMoKVxuIiwgX19mdW5jX18pOworCisJc25yX3JlYWRpbmcgPSBjeDI0MTE2X3JlYWRyZWcoc3RhdGUsIENYMjQxMTZfUkVHX1FVQUxJVFkwKTsKKworCWlmIChzbnJfcmVhZGluZyA+PSAweGEwIC8qIDEwMCUgKi8pCisJCSpzbnIgPSAweGZmZmY7CisJZWxzZQorCQkqc25yID0gc25yX3RhYlsoc25yX3JlYWRpbmcgJiAweGYwKSA+PiA0XSArCisJCQkoc25yX3RhYlsoc25yX3JlYWRpbmcgJiAweDBmKV0gPj4gNCk7CisKKwlkcHJpbnRrKCIlczogcmF3IC8gY29va2VkID0gMHglMDJ4IC8gMHglMDR4XG4iLCBfX2Z1bmNfXywKKwkJc25yX3JlYWRpbmcsICpzbnIpOworCisJcmV0dXJuIDA7Cit9CisKKy8qIFRoZSByZWVsYm94IHBhdGNoZXMgc2hvdyB0aGUgdmFsdWUgaW4gdGhlIHJlZ2lzdGVycyByZXByZXNlbnRzCisgKiBFU05PLCBmcm9tIDAtPjMwZGIgKHZhbHVlcyAwLT4zMDApLiBXZSBwcm92aWRlIHRoaXMgdmFsdWUgYnkKKyAqIGRlZmF1bHQuCisgKi8KK3N0YXRpYyBpbnQgY3gyNDExNl9yZWFkX3Nucl9lc25vKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCB1MTYgKnNucikKK3sKKwlzdHJ1Y3QgY3gyNDExNl9zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKworCWRwcmludGsoIiVzKClcbiIsIF9fZnVuY19fKTsKKworCSpzbnIgPSBjeDI0MTE2X3JlYWRyZWcoc3RhdGUsIENYMjQxMTZfUkVHX1FVQUxJVFk4KSA8PCA4IHwKKwkJY3gyNDExNl9yZWFkcmVnKHN0YXRlLCBDWDI0MTE2X1JFR19RVUFMSVRZMCk7CisKKwlkcHJpbnRrKCIlczogcmF3IDB4JTA0eFxuIiwgX19mdW5jX18sICpzbnIpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY3gyNDExNl9yZWFkX3NucihzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgdTE2ICpzbnIpCit7CisJaWYgKGVzbm9fc25yID09IDEpCisJCXJldHVybiBjeDI0MTE2X3JlYWRfc25yX2Vzbm8oZmUsIHNucik7CisJZWxzZQorCQlyZXR1cm4gY3gyNDExNl9yZWFkX3Nucl9wY3QoZmUsIHNucik7Cit9CisKK3N0YXRpYyBpbnQgY3gyNDExNl9yZWFkX3VjYmxvY2tzKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCB1MzIgKnVjYmxvY2tzKQoreworCXN0cnVjdCBjeDI0MTE2X3N0YXRlICpzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCisJZHByaW50aygiJXMoKVxuIiwgX19mdW5jX18pOworCisJKnVjYmxvY2tzID0gKGN4MjQxMTZfcmVhZHJlZyhzdGF0ZSwgQ1gyNDExNl9SRUdfVUNCOCkgPDwgOCkgfAorCQljeDI0MTE2X3JlYWRyZWcoc3RhdGUsIENYMjQxMTZfUkVHX1VDQjApOworCisJcmV0dXJuIDA7Cit9CisKKy8qIE92ZXJ3cml0ZSB0aGUgY3VycmVudCB0dW5pbmcgcGFyYW1zLCB3ZSBhcmUgYWJvdXQgdG8gdHVuZSAqLworc3RhdGljIHZvaWQgY3gyNDExNl9jbG9uZV9wYXJhbXMoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUpCit7CisJc3RydWN0IGN4MjQxMTZfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisJbWVtY3B5KCZzdGF0ZS0+ZGN1ciwgJnN0YXRlLT5kbnh0LCBzaXplb2Yoc3RhdGUtPmRjdXIpKTsKK30KKworLyogV2FpdCBmb3IgTE5CICovCitzdGF0aWMgaW50IGN4MjQxMTZfd2FpdF9mb3JfbG5iKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlKQoreworCXN0cnVjdCBjeDI0MTE2X3N0YXRlICpzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCWludCBpOworCisJZHByaW50aygiJXMoKSBxc3RhdHVzID0gMHglMDJ4XG4iLCBfX2Z1bmNfXywKKwkJY3gyNDExNl9yZWFkcmVnKHN0YXRlLCBDWDI0MTE2X1JFR19RU1RBVFVTKSk7CisKKwkvKiBXYWl0IGZvciB1cCB0byAzMDAgbXMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgMzAgOyBpKyspIHsKKwkJaWYgKGN4MjQxMTZfcmVhZHJlZyhzdGF0ZSwgQ1gyNDExNl9SRUdfUVNUQVRVUykgJiAweDIwKQorCQkJcmV0dXJuIDA7CisJCW1zbGVlcCgxMCk7CisJfQorCisJZHByaW50aygiJXMoKTogTE5CIG5vdCByZWFkeVxuIiwgX19mdW5jX18pOworCisJcmV0dXJuIC1FVElNRURPVVQ7IC8qIC1FQlVTWSA/ICovCit9CisKK3N0YXRpYyBpbnQgY3gyNDExNl9zZXRfdG9uZShzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwKKwlmZV9zZWNfdG9uZV9tb2RlX3QgdG9uZSkKK3sKKwlzdHJ1Y3QgY3gyNDExNl9jbWQgY21kOworCWludCByZXQ7CisKKwlkcHJpbnRrKCIlcyglZClcbiIsIF9fZnVuY19fLCB0b25lKTsKKwlpZiAoKHRvbmUgIT0gU0VDX1RPTkVfT04pICYmICh0b25lICE9IFNFQ19UT05FX09GRikpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogSW52YWxpZCwgdG9uZT0lZFxuIiwgX19mdW5jX18sIHRvbmUpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKiBXYWl0IGZvciBMTkIgcmVhZHkgKi8KKwlyZXQgPSBjeDI0MTE2X3dhaXRfZm9yX2xuYihmZSk7CisJaWYgKHJldCAhPSAwKQorCQlyZXR1cm4gcmV0OworCisJLyogTWluIGRlbGF5IHRpbWUgYWZ0ZXIgRGlTRXFDIHNlbmQgKi8KKwltc2xlZXAoMTUpOyAvKiBYWFggZGV0ZXJtaW5lIGlzIEZXIGRvZXMgdGhpcywgc2VlIHNlbmRfZGlzZXFjL2J1cnN0ICovCisKKwkvKiBUaGlzIGlzIGFsd2F5cyBkb25lIGJlZm9yZSB0aGUgdG9uZSBpcyBzZXQgKi8KKwljbWQuYXJnc1sweDAwXSA9IENNRF9TRVRfVE9ORVBSRTsKKwljbWQuYXJnc1sweDAxXSA9IDB4MDA7CisJY21kLmxlbiA9IDB4MDI7CisJcmV0ID0gY3gyNDExNl9jbWRfZXhlY3V0ZShmZSwgJmNtZCk7CisJaWYgKHJldCAhPSAwKQorCQlyZXR1cm4gcmV0OworCisJLyogTm93IHdlIHNldCB0aGUgdG9uZSAqLworCWNtZC5hcmdzWzB4MDBdID0gQ01EX1NFVF9UT05FOworCWNtZC5hcmdzWzB4MDFdID0gMHgwMDsKKwljbWQuYXJnc1sweDAyXSA9IDB4MDA7CisKKwlzd2l0Y2ggKHRvbmUpIHsKKwljYXNlIFNFQ19UT05FX09OOgorCQlkcHJpbnRrKCIlczogc2V0dGluZyB0b25lIG9uXG4iLCBfX2Z1bmNfXyk7CisJCWNtZC5hcmdzWzB4MDNdID0gMHgwMTsKKwkJYnJlYWs7CisJY2FzZSBTRUNfVE9ORV9PRkY6CisJCWRwcmludGsoIiVzOiBzZXR0aW5nIHRvbmUgb2ZmXG4iLCBfX2Z1bmNfXyk7CisJCWNtZC5hcmdzWzB4MDNdID0gMHgwMDsKKwkJYnJlYWs7CisJfQorCWNtZC5sZW4gPSAweDA0OworCisJLyogTWluIGRlbGF5IHRpbWUgYmVmb3JlIERpU0VxQyBzZW5kICovCisJbXNsZWVwKDE1KTsgLyogWFhYIGRldGVybWluZSBpcyBGVyBkb2VzIHRoaXMsIHNlZSBzZW5kX2Rpc2VxYy9idXJzdCAqLworCisJcmV0dXJuIGN4MjQxMTZfY21kX2V4ZWN1dGUoZmUsICZjbWQpOworfQorCisvKiBJbml0aWFsaXNlIERpU0VxQyAqLworc3RhdGljIGludCBjeDI0MTE2X2Rpc2VxY19pbml0KHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlKQoreworCXN0cnVjdCBjeDI0MTE2X3N0YXRlICpzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCXN0cnVjdCBjeDI0MTE2X2NtZCBjbWQ7CisJaW50IHJldDsKKworCS8qIEZpcm13YXJlIENNRCAyMDogTE5CL0RpU0VxQyBjb25maWcgKi8KKwljbWQuYXJnc1sweDAwXSA9IENNRF9MTkJDT05GSUc7CisJY21kLmFyZ3NbMHgwMV0gPSAweDAwOworCWNtZC5hcmdzWzB4MDJdID0gMHgxMDsKKwljbWQuYXJnc1sweDAzXSA9IDB4MDA7CisJY21kLmFyZ3NbMHgwNF0gPSAweDhmOworCWNtZC5hcmdzWzB4MDVdID0gMHgyODsKKwljbWQuYXJnc1sweDA2XSA9ICh0b25lYnVyc3QgPT0gQ1gyNDExNl9ESVNFUUNfVE9ORU9GRikgPyAweDAwIDogMHgwMTsKKwljbWQuYXJnc1sweDA3XSA9IDB4MDE7CisJY21kLmxlbiA9IDB4MDg7CisJcmV0ID0gY3gyNDExNl9jbWRfZXhlY3V0ZShmZSwgJmNtZCk7CisJaWYgKHJldCAhPSAwKQorCQlyZXR1cm4gcmV0OworCisJLyogUHJlcGFyZSBhIERpU0VxQyBjb21tYW5kICovCisJc3RhdGUtPmRzZWNfY21kLmFyZ3NbMHgwMF0gPSBDTURfTE5CU0VORDsKKworCS8qIERpU0VxQyBidXJzdCAqLworCXN0YXRlLT5kc2VjX2NtZC5hcmdzW0NYMjQxMTZfRElTRVFDX0JVUlNUXSAgPSBDWDI0MTE2X0RJU0VRQ19NSU5JX0E7CisKKwkvKiBVbmtub3duICovCisJc3RhdGUtPmRzZWNfY21kLmFyZ3NbQ1gyNDExNl9ESVNFUUNfQVJHMl8yXSA9IDB4MDI7CisJc3RhdGUtPmRzZWNfY21kLmFyZ3NbQ1gyNDExNl9ESVNFUUNfQVJHM18wXSA9IDB4MDA7CisJLyogQ29udGludWF0aW9uIGZsYWc/ICovCisJc3RhdGUtPmRzZWNfY21kLmFyZ3NbQ1gyNDExNl9ESVNFUUNfQVJHNF8wXSA9IDB4MDA7CisKKwkvKiBEaVNFcUMgbWVzc2FnZSBsZW5ndGggKi8KKwlzdGF0ZS0+ZHNlY19jbWQuYXJnc1tDWDI0MTE2X0RJU0VRQ19NU0dMRU5dID0gMHgwMDsKKworCS8qIENvbW1hbmQgbGVuZ3RoICovCisJc3RhdGUtPmRzZWNfY21kLmxlbiA9IENYMjQxMTZfRElTRVFDX01TR09GUzsKKworCXJldHVybiAwOworfQorCisvKiBTZW5kIERpU0VxQyBtZXNzYWdlIHdpdGggZGVyaXZlZCBidXJzdCAoaGFjaykgfHwgcHJldmlvdXMgYnVyc3QgKi8KK3N0YXRpYyBpbnQgY3gyNDExNl9zZW5kX2Rpc2VxY19tc2coc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsCisJc3RydWN0IGR2Yl9kaXNlcWNfbWFzdGVyX2NtZCAqZCkKK3sKKwlzdHJ1Y3QgY3gyNDExNl9zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKwlpbnQgaSwgcmV0OworCisJLyogRHVtcCBEaVNFcUMgbWVzc2FnZSAqLworCWlmIChkZWJ1ZykgeworCQlwcmludGsoS0VSTl9JTkZPICJjeDI0MTE2OiAlcygiLCBfX2Z1bmNfXyk7CisJCWZvciAoaSA9IDAgOyBpIDwgZC0+bXNnX2xlbiA7KSB7CisJCQlwcmludGsoS0VSTl9JTkZPICIweCUwMngiLCBkLT5tc2dbaV0pOworCQkJaWYgKCsraSA8IGQtPm1zZ19sZW4pCisJCQkJcHJpbnRrKEtFUk5fSU5GTyAiLCAiKTsKKwkJfQorCQlwcmludGsoIikgdG9uZWJ1cnN0PSVkXG4iLCB0b25lYnVyc3QpOworCX0KKworCS8qIFZhbGlkYXRlIGxlbmd0aCAqLworCWlmIChkLT5tc2dfbGVuID4gKENYMjQxMTZfQVJHTEVOIC0gQ1gyNDExNl9ESVNFUUNfTVNHT0ZTKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKiBEaVNFcUMgbWVzc2FnZSAqLworCWZvciAoaSA9IDA7IGkgPCBkLT5tc2dfbGVuOyBpKyspCisJCXN0YXRlLT5kc2VjX2NtZC5hcmdzW0NYMjQxMTZfRElTRVFDX01TR09GUyArIGldID0gZC0+bXNnW2ldOworCisJLyogRGlTRXFDIG1lc3NhZ2UgbGVuZ3RoICovCisJc3RhdGUtPmRzZWNfY21kLmFyZ3NbQ1gyNDExNl9ESVNFUUNfTVNHTEVOXSA9IGQtPm1zZ19sZW47CisKKwkvKiBDb21tYW5kIGxlbmd0aCAqLworCXN0YXRlLT5kc2VjX2NtZC5sZW4gPSBDWDI0MTE2X0RJU0VRQ19NU0dPRlMgKworCQlzdGF0ZS0+ZHNlY19jbWQuYXJnc1tDWDI0MTE2X0RJU0VRQ19NU0dMRU5dOworCisJLyogRGlTRXFDIHRvbmVidXJzdCAqLworCWlmICh0b25lYnVyc3QgPT0gQ1gyNDExNl9ESVNFUUNfTUVTR0NBQ0hFKQorCQkvKiBNZXNzYWdlIGlzIGNhY2hlZCAqLworCQlyZXR1cm4gMDsKKworCWVsc2UgaWYgKHRvbmVidXJzdCA9PSBDWDI0MTE2X0RJU0VRQ19UT05FT0ZGKQorCQkvKiBNZXNzYWdlIGlzIHNlbnQgd2l0aG91dCBidXJzdCAqLworCQlzdGF0ZS0+ZHNlY19jbWQuYXJnc1tDWDI0MTE2X0RJU0VRQ19CVVJTVF0gPSAwOworCisJZWxzZSBpZiAodG9uZWJ1cnN0ID09IENYMjQxMTZfRElTRVFDX1RPTkVDQUNIRSkgeworCQkvKgorCQkgKiBNZXNzYWdlIGlzIHNlbnQgd2l0aCBkZXJpdmVkIGVsc2UgY2FjaGVkIGJ1cnN0CisJCSAqCisJCSAqIFdSSVRFIFBPUlQgR1JPVVAgQ09NTUFORCAzOAorCQkgKgorCQkgKiAwL0EvQTogRTAgMTAgMzggRjAuLkYzCisJCSAqIDEvQi9COiBFMCAxMCAzOCBGNC4uRjcKKwkJICogMi9DL0E6IEUwIDEwIDM4IEY4Li5GQgorCQkgKiAzL0QvQjogRTAgMTAgMzggRkMuLkZGCisJCSAqCisJCSAqIGRhdGFieXRlWzNdPSA4NDIxOjg0MjEKKwkJICogICAgICAgICAgICAgIEFCQ0Q6V1hZWgorCQkgKiAgICAgICAgICAgICAgQ0xSIDpTRVQKKwkJICoKKwkJICogICAgICAgICAgICAgIFdYPSBQT1JUIFNFTEVDVCAwLi4zICAgIChYPVRPTkVCVVJTVCkKKwkJICogICAgICAgICAgICAgIFkgPSBWT0xUQUdFICAgICAgICAgICAgICgwPTEzViwgMT0xOFYpCisJCSAqICAgICAgICAgICAgICBaID0gQkFORCAgICAgICAgICAgICAgICAoMD1MT1csIDE9SElHSCgyMkspKQorCQkgKi8KKwkJaWYgKGQtPm1zZ19sZW4gPj0gNCAmJiBkLT5tc2dbMl0gPT0gMHgzOCkKKwkJCXN0YXRlLT5kc2VjX2NtZC5hcmdzW0NYMjQxMTZfRElTRVFDX0JVUlNUXSA9CisJCQkJKChkLT5tc2dbM10gJiA0KSA+PiAyKTsKKwkJaWYgKGRlYnVnKQorCQkJZHByaW50aygiJXMgYnVyc3Q9JWRcbiIsIF9fZnVuY19fLAorCQkJCXN0YXRlLT5kc2VjX2NtZC5hcmdzW0NYMjQxMTZfRElTRVFDX0JVUlNUXSk7CisJfQorCisJLyogV2FpdCBmb3IgTE5CIHJlYWR5ICovCisJcmV0ID0gY3gyNDExNl93YWl0X2Zvcl9sbmIoZmUpOworCWlmIChyZXQgIT0gMCkKKwkJcmV0dXJuIHJldDsKKworCS8qIFdhaXQgZm9yIHZvbHRhZ2UvbWluIHJlcGVhdCBkZWxheSAqLworCW1zbGVlcCgxMDApOworCisJLyogQ29tbWFuZCAqLworCXJldCA9IGN4MjQxMTZfY21kX2V4ZWN1dGUoZmUsICZzdGF0ZS0+ZHNlY19jbWQpOworCWlmIChyZXQgIT0gMCkKKwkJcmV0dXJuIHJldDsKKwkvKgorCSAqIFdhaXQgZm9yIHNlbmQKKwkgKgorCSAqIEV1dGVsc2F0IHNwZWM6CisJICogPjE1bXMgZGVsYXkgICAgICAgICAgKyAoWFhYIGRldGVybWluZSBpZiBGVyBkb2VzIHRoaXMsIHNlZSBzZXRfdG9uZSkKKwkgKiAgMTMuNW1zIHBlciBieXRlICAgICArCisJICogPjE1bXMgZGVsYXkgICAgICAgICAgKworCSAqICAxMi41bXMgYnVyc3QgICAgICAgICsKKwkgKiA+MTVtcyBkZWxheSAgICAgICAgICAgIChYWFggZGV0ZXJtaW5lIGlmIEZXIGRvZXMgdGhpcywgc2VlIHNldF90b25lKQorCSAqLworCW1zbGVlcCgoc3RhdGUtPmRzZWNfY21kLmFyZ3NbQ1gyNDExNl9ESVNFUUNfTVNHTEVOXSA8PCA0KSArCisJCSgodG9uZWJ1cnN0ID09IENYMjQxMTZfRElTRVFDX1RPTkVPRkYpID8gMzAgOiA2MCkpOworCisJcmV0dXJuIDA7Cit9CisKKy8qIFNlbmQgRGlTRXFDIGJ1cnN0ICovCitzdGF0aWMgaW50IGN4MjQxMTZfZGlzZXFjX3NlbmRfYnVyc3Qoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsCisJZmVfc2VjX21pbmlfY21kX3QgYnVyc3QpCit7CisJc3RydWN0IGN4MjQxMTZfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisJaW50IHJldDsKKworCWRwcmludGsoIiVzKCVkKSB0b25lYnVyc3Q9JWRcbiIsIF9fZnVuY19fLCBidXJzdCwgdG9uZWJ1cnN0KTsKKworCS8qIERpU0VxQyBidXJzdCAqLworCWlmIChidXJzdCA9PSBTRUNfTUlOSV9BKQorCQlzdGF0ZS0+ZHNlY19jbWQuYXJnc1tDWDI0MTE2X0RJU0VRQ19CVVJTVF0gPQorCQkJQ1gyNDExNl9ESVNFUUNfTUlOSV9BOworCWVsc2UgaWYgKGJ1cnN0ID09IFNFQ19NSU5JX0IpCisJCXN0YXRlLT5kc2VjX2NtZC5hcmdzW0NYMjQxMTZfRElTRVFDX0JVUlNUXSA9CisJCQlDWDI0MTE2X0RJU0VRQ19NSU5JX0I7CisJZWxzZQorCQlyZXR1cm4gLUVJTlZBTDsKKworCS8qIERpU0VxQyB0b25lYnVyc3QgKi8KKwlpZiAodG9uZWJ1cnN0ICE9IENYMjQxMTZfRElTRVFDX01FU0dDQUNIRSkKKwkJLyogQnVyc3QgaXMgY2FjaGVkICovCisJCXJldHVybiAwOworCisJLyogQnVyc3QgaXMgdG8gYmUgc2VudCB3aXRoIGNhY2hlZCBtZXNzYWdlICovCisKKwkvKiBXYWl0IGZvciBMTkIgcmVhZHkgKi8KKwlyZXQgPSBjeDI0MTE2X3dhaXRfZm9yX2xuYihmZSk7CisJaWYgKHJldCAhPSAwKQorCQlyZXR1cm4gcmV0OworCisJLyogV2FpdCBmb3Igdm9sdGFnZS9taW4gcmVwZWF0IGRlbGF5ICovCisJbXNsZWVwKDEwMCk7CisKKwkvKiBDb21tYW5kICovCisJcmV0ID0gY3gyNDExNl9jbWRfZXhlY3V0ZShmZSwgJnN0YXRlLT5kc2VjX2NtZCk7CisJaWYgKHJldCAhPSAwKQorCQlyZXR1cm4gcmV0OworCisJLyoKKwkgKiBXYWl0IGZvciBzZW5kCisJICoKKwkgKiBFdXRlbHNhdCBzcGVjOgorCSAqID4xNW1zIGRlbGF5ICAgICAgICAgICsgKFhYWCBkZXRlcm1pbmUgaWYgRlcgZG9lcyB0aGlzLCBzZWUgc2V0X3RvbmUpCisJICogIDEzLjVtcyBwZXIgYnl0ZSAgICAgKworCSAqID4xNW1zIGRlbGF5ICAgICAgICAgICsKKwkgKiAgMTIuNW1zIGJ1cnN0ICAgICAgICArCisJICogPjE1bXMgZGVsYXkgICAgICAgICAgICAoWFhYIGRldGVybWluZSBpZiBGVyBkb2VzIHRoaXMsIHNlZSBzZXRfdG9uZSkKKwkgKi8KKwltc2xlZXAoKHN0YXRlLT5kc2VjX2NtZC5hcmdzW0NYMjQxMTZfRElTRVFDX01TR0xFTl0gPDwgNCkgKyA2MCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgY3gyNDExNl9yZWxlYXNlKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlKQoreworCXN0cnVjdCBjeDI0MTE2X3N0YXRlICpzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCWRwcmludGsoIiVzXG4iLCBfX2Z1bmNfXyk7CisJa2ZyZWUoc3RhdGUpOworfQorCitzdGF0aWMgc3RydWN0IGR2Yl9mcm9udGVuZF9vcHMgY3gyNDExNl9vcHM7CisKK3N0cnVjdCBkdmJfZnJvbnRlbmQgKmN4MjQxMTZfYXR0YWNoKGNvbnN0IHN0cnVjdCBjeDI0MTE2X2NvbmZpZyAqY29uZmlnLAorCXN0cnVjdCBpMmNfYWRhcHRlciAqaTJjKQoreworCXN0cnVjdCBjeDI0MTE2X3N0YXRlICpzdGF0ZSA9IE5VTEw7CisJaW50IHJldDsKKworCWRwcmludGsoIiVzXG4iLCBfX2Z1bmNfXyk7CisKKwkvKiBhbGxvY2F0ZSBtZW1vcnkgZm9yIHRoZSBpbnRlcm5hbCBzdGF0ZSAqLworCXN0YXRlID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGN4MjQxMTZfc3RhdGUpLCBHRlBfS0VSTkVMKTsKKwlpZiAoc3RhdGUgPT0gTlVMTCkKKwkJZ290byBlcnJvcjE7CisKKwkvKiBzZXR1cCB0aGUgc3RhdGUgKi8KKwltZW1zZXQoc3RhdGUsIDAsIHNpemVvZihzdHJ1Y3QgY3gyNDExNl9zdGF0ZSkpOworCisJc3RhdGUtPmNvbmZpZyA9IGNvbmZpZzsKKwlzdGF0ZS0+aTJjID0gaTJjOworCisJLyogY2hlY2sgaWYgdGhlIGRlbW9kIGlzIHByZXNlbnQgKi8KKwlyZXQgPSAoY3gyNDExNl9yZWFkcmVnKHN0YXRlLCAweEZGKSA8PCA4KSB8CisJCWN4MjQxMTZfcmVhZHJlZyhzdGF0ZSwgMHhGRSk7CisJaWYgKHJldCAhPSAweDA1MDEpIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiSW52YWxpZCBwcm9iZSwgcHJvYmFibHkgbm90IGEgQ1gyNDExNiBkZXZpY2VcbiIpOworCQlnb3RvIGVycm9yMjsKKwl9CisKKwkvKiBjcmVhdGUgZHZiX2Zyb250ZW5kICovCisJbWVtY3B5KCZzdGF0ZS0+ZnJvbnRlbmQub3BzLCAmY3gyNDExNl9vcHMsCisJCXNpemVvZihzdHJ1Y3QgZHZiX2Zyb250ZW5kX29wcykpOworCXN0YXRlLT5mcm9udGVuZC5kZW1vZHVsYXRvcl9wcml2ID0gc3RhdGU7CisJcmV0dXJuICZzdGF0ZS0+ZnJvbnRlbmQ7CisKK2Vycm9yMjoga2ZyZWUoc3RhdGUpOworZXJyb3IxOiByZXR1cm4gTlVMTDsKK30KK0VYUE9SVF9TWU1CT0woY3gyNDExNl9hdHRhY2gpOworCisvKgorICogSW5pdGlhbGlzZSBvciB3YWtlIHVwIGRldmljZQorICoKKyAqIFBvd2VyIGNvbmZpZyB3aWxsIHJlc2V0IGFuZCBsb2FkIGluaXRpYWwgZmlybXdhcmUgaWYgcmVxdWlyZWQKKyAqLworc3RhdGljIGludCBjeDI0MTE2X2luaXRmZShzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSkKK3sKKwlzdHJ1Y3QgY3gyNDExNl9zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKwlzdHJ1Y3QgY3gyNDExNl9jbWQgY21kOworCWludCByZXQ7CisKKwlkcHJpbnRrKCIlcygpXG4iLCBfX2Z1bmNfXyk7CisKKwkvKiBQb3dlciBvbiAqLworCWN4MjQxMTZfd3JpdGVyZWcoc3RhdGUsIDB4ZTAsIDApOworCWN4MjQxMTZfd3JpdGVyZWcoc3RhdGUsIDB4ZTEsIDApOworCWN4MjQxMTZfd3JpdGVyZWcoc3RhdGUsIDB4ZWEsIDApOworCisJLyogRmlybXdhcmUgQ01EIDM2OiBQb3dlciBjb25maWcgKi8KKwljbWQuYXJnc1sweDAwXSA9IENNRF9UVU5FUlNMRUVQOworCWNtZC5hcmdzWzB4MDFdID0gMDsKKwljbWQubGVuID0gMHgwMjsKKwlyZXQgPSBjeDI0MTE2X2NtZF9leGVjdXRlKGZlLCAmY21kKTsKKwlpZiAocmV0ICE9IDApCisJCXJldHVybiByZXQ7CisKKwlyZXR1cm4gY3gyNDExNl9kaXNlcWNfaW5pdChmZSk7Cit9CisKKy8qCisgKiBQdXQgZGV2aWNlIHRvIHNsZWVwCisgKi8KK3N0YXRpYyBpbnQgY3gyNDExNl9zbGVlcChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSkKK3sKKwlzdHJ1Y3QgY3gyNDExNl9zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKwlzdHJ1Y3QgY3gyNDExNl9jbWQgY21kOworCWludCByZXQ7CisKKwlkcHJpbnRrKCIlcygpXG4iLCBfX2Z1bmNfXyk7CisKKwkvKiBGaXJtd2FyZSBDTUQgMzY6IFBvd2VyIGNvbmZpZyAqLworCWNtZC5hcmdzWzB4MDBdID0gQ01EX1RVTkVSU0xFRVA7CisJY21kLmFyZ3NbMHgwMV0gPSAxOworCWNtZC5sZW4gPSAweDAyOworCXJldCA9IGN4MjQxMTZfY21kX2V4ZWN1dGUoZmUsICZjbWQpOworCWlmIChyZXQgIT0gMCkKKwkJcmV0dXJuIHJldDsKKworCS8qIFBvd2VyIG9mZiAoU2h1dGRvd24gY2xvY2tzKSAqLworCWN4MjQxMTZfd3JpdGVyZWcoc3RhdGUsIDB4ZWEsIDB4ZmYpOworCWN4MjQxMTZfd3JpdGVyZWcoc3RhdGUsIDB4ZTEsIDEpOworCWN4MjQxMTZfd3JpdGVyZWcoc3RhdGUsIDB4ZTAsIDEpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY3gyNDExNl9zZXRfcHJvcGVydHkoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsCisJc3RydWN0IGR0dl9wcm9wZXJ0eSAqdHZwKQoreworCWRwcmludGsoIiVzKC4uKVxuIiwgX19mdW5jX18pOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGN4MjQxMTZfZ2V0X3Byb3BlcnR5KHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLAorCXN0cnVjdCBkdHZfcHJvcGVydHkgKnR2cCkKK3sKKwlkcHJpbnRrKCIlcyguLilcbiIsIF9fZnVuY19fKTsKKwlyZXR1cm4gMDsKK30KKworLyogZHZiLWNvcmUgdG9sZCB1cyB0byB0dW5lLCB0aGUgdHYgcHJvcGVydHkgY2FjaGUgd2lsbCBiZSBjb21wbGV0ZSwKKyAqIGl0J3Mgc2FmZSBmb3IgaXMgdG8gcHVsbCB2YWx1ZXMgYW5kIHVzZSB0aGVtIGZvciB0dW5pbmcgcHVycG9zZXMuCisgKi8KK3N0YXRpYyBpbnQgY3gyNDExNl9zZXRfZnJvbnRlbmQoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsCisJc3RydWN0IGR2Yl9mcm9udGVuZF9wYXJhbWV0ZXJzICpwKQoreworCXN0cnVjdCBjeDI0MTE2X3N0YXRlICpzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCXN0cnVjdCBkdHZfZnJvbnRlbmRfcHJvcGVydGllcyAqYyA9ICZmZS0+ZHR2X3Byb3BlcnR5X2NhY2hlOworCXN0cnVjdCBjeDI0MTE2X2NtZCBjbWQ7CisJZmVfc3RhdHVzX3QgdHVuZXJzdGF0OworCWludCBpLCBzdGF0dXMsIHJldCwgcmV0dW5lOworCisJZHByaW50aygiJXMoKVxuIiwgX19mdW5jX18pOworCisJc3dpdGNoIChjLT5kZWxpdmVyeV9zeXN0ZW0pIHsKKwljYXNlIFNZU19EVkJTOgorCQlkcHJpbnRrKCIlczogRFZCLVMgZGVsaXZlcnkgc3lzdGVtIHNlbGVjdGVkXG4iLCBfX2Z1bmNfXyk7CisKKwkJLyogT25seSBRUFNLIGlzIHN1cHBvcnRlZCBmb3IgRFZCLVMgKi8KKwkJaWYgKGMtPm1vZHVsYXRpb24gIT0gUVBTSykgeworCQkJZHByaW50aygiJXM6IHVuc3VwcG9ydGVkIG1vZHVsYXRpb24gc2VsZWN0ZWQgKCVkKVxuIiwKKwkJCQlfX2Z1bmNfXywgYy0+bW9kdWxhdGlvbik7CisJCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisJCX0KKworCQkvKiBQaWxvdCBkb2Vzbid0IGV4aXN0IGluIERWQi1TLCB0dXJuIGJpdCBvZmYgKi8KKwkJc3RhdGUtPmRueHQucGlsb3RfdmFsID0gQ1gyNDExNl9QSUxPVF9PRkY7CisJCXJldHVuZSA9IDE7CisKKwkJLyogRFZCLVMgb25seSBzdXBwb3J0cyAwLjM1ICovCisJCWlmIChjLT5yb2xsb2ZmICE9IFJPTExPRkZfMzUpIHsKKwkJCWRwcmludGsoIiVzOiB1bnN1cHBvcnRlZCByb2xsb2ZmIHNlbGVjdGVkICglZClcbiIsCisJCQkJX19mdW5jX18sIGMtPnJvbGxvZmYpOworCQkJcmV0dXJuIC1FT1BOT1RTVVBQOworCQl9CisJCXN0YXRlLT5kbnh0LnJvbGxvZmZfdmFsID0gQ1gyNDExNl9ST0xMT0ZGXzAzNTsKKwkJYnJlYWs7CisKKwljYXNlIFNZU19EVkJTMjoKKwkJZHByaW50aygiJXM6IERWQi1TMiBkZWxpdmVyeSBzeXN0ZW0gc2VsZWN0ZWRcbiIsIF9fZnVuY19fKTsKKworCQkvKgorCQkgKiBOQkMgOFBTSy9RUFNLIHdpdGggRFZCLVMgaXMgc3VwcG9ydGVkIGZvciBEVkItUzIsCisJCSAqIGJ1dCBub3QgaGFyZHdhcmUgYXV0byBkZXRlY3Rpb24KKwkJICovCisJCWlmIChjLT5tb2R1bGF0aW9uICE9IFBTS184ICYmIGMtPm1vZHVsYXRpb24gIT0gUVBTSykgeworCQkJZHByaW50aygiJXM6IHVuc3VwcG9ydGVkIG1vZHVsYXRpb24gc2VsZWN0ZWQgKCVkKVxuIiwKKwkJCQlfX2Z1bmNfXywgYy0+bW9kdWxhdGlvbik7CisJCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisJCX0KKworCQlzd2l0Y2ggKGMtPnBpbG90KSB7CisJCWNhc2UgUElMT1RfQVVUTzoJLyogTm90IHN1cHBvcnRlZCBidXQgZW11bGF0ZWQgKi8KKwkJCXN0YXRlLT5kbnh0LnBpbG90X3ZhbCA9IChjLT5tb2R1bGF0aW9uID09IFFQU0spCisJCQkJPyBDWDI0MTE2X1BJTE9UX09GRiA6IENYMjQxMTZfUElMT1RfT047CisJCQlyZXR1bmUgPSAyOworCQkJYnJlYWs7CisJCWNhc2UgUElMT1RfT0ZGOgorCQkJc3RhdGUtPmRueHQucGlsb3RfdmFsID0gQ1gyNDExNl9QSUxPVF9PRkY7CisJCQlicmVhazsKKwkJY2FzZSBQSUxPVF9PTjoKKwkJCXN0YXRlLT5kbnh0LnBpbG90X3ZhbCA9IENYMjQxMTZfUElMT1RfT047CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWRwcmludGsoIiVzOiB1bnN1cHBvcnRlZCBwaWxvdCBtb2RlIHNlbGVjdGVkICglZClcbiIsCisJCQkJX19mdW5jX18sIGMtPnBpbG90KTsKKwkJCXJldHVybiAtRU9QTk9UU1VQUDsKKwkJfQorCisJCXN3aXRjaCAoYy0+cm9sbG9mZikgeworCQljYXNlIFJPTExPRkZfMjA6CisJCQlzdGF0ZS0+ZG54dC5yb2xsb2ZmX3ZhbCA9IENYMjQxMTZfUk9MTE9GRl8wMjA7CisJCQlicmVhazsKKwkJY2FzZSBST0xMT0ZGXzI1OgorCQkJc3RhdGUtPmRueHQucm9sbG9mZl92YWwgPSBDWDI0MTE2X1JPTExPRkZfMDI1OworCQkJYnJlYWs7CisJCWNhc2UgUk9MTE9GRl8zNToKKwkJCXN0YXRlLT5kbnh0LnJvbGxvZmZfdmFsID0gQ1gyNDExNl9ST0xMT0ZGXzAzNTsKKwkJCWJyZWFrOworCQljYXNlIFJPTExPRkZfQVVUTzoJLyogUm9sbG9mZiBtdXN0IGJlIGV4cGxpY2l0ICovCisJCWRlZmF1bHQ6CisJCQlkcHJpbnRrKCIlczogdW5zdXBwb3J0ZWQgcm9sbG9mZiBzZWxlY3RlZCAoJWQpXG4iLAorCQkJCV9fZnVuY19fLCBjLT5yb2xsb2ZmKTsKKwkJCXJldHVybiAtRU9QTk9UU1VQUDsKKwkJfQorCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWRwcmludGsoIiVzOiB1bnN1cHBvcnRlZCBkZWxpdmVyeSBzeXN0ZW0gc2VsZWN0ZWQgKCVkKVxuIiwKKwkJCV9fZnVuY19fLCBjLT5kZWxpdmVyeV9zeXN0ZW0pOworCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisJfQorCXN0YXRlLT5kbnh0Lm1vZHVsYXRpb24gPSBjLT5tb2R1bGF0aW9uOworCXN0YXRlLT5kbnh0LmZyZXF1ZW5jeSA9IGMtPmZyZXF1ZW5jeTsKKwlzdGF0ZS0+ZG54dC5waWxvdCA9IGMtPnBpbG90OworCXN0YXRlLT5kbnh0LnJvbGxvZmYgPSBjLT5yb2xsb2ZmOworCisJcmV0ID0gY3gyNDExNl9zZXRfaW52ZXJzaW9uKHN0YXRlLCBjLT5pbnZlcnNpb24pOworCWlmIChyZXQgIT0gIDApCisJCXJldHVybiByZXQ7CisKKwkvKiBGRUNfTk9ORS9BVVRPIGZvciBEVkItUzIgaXMgbm90IHN1cHBvcnRlZCBhbmQgZGV0ZWN0ZWQgaGVyZSAqLworCXJldCA9IGN4MjQxMTZfc2V0X2ZlYyhzdGF0ZSwgYy0+bW9kdWxhdGlvbiwgYy0+ZmVjX2lubmVyKTsKKwlpZiAocmV0ICE9ICAwKQorCQlyZXR1cm4gcmV0OworCisJcmV0ID0gY3gyNDExNl9zZXRfc3ltYm9scmF0ZShzdGF0ZSwgYy0+c3ltYm9sX3JhdGUpOworCWlmIChyZXQgIT0gIDApCisJCXJldHVybiByZXQ7CisKKwkvKiBkaXNjYXJkIHRoZSAnY3VycmVudCcgdHVuaW5nIHBhcmFtZXRlcnMgYW5kIHByZXBhcmUgdG8gdHVuZSAqLworCWN4MjQxMTZfY2xvbmVfcGFyYW1zKGZlKTsKKworCWRwcmludGsoIiVzOiAgIG1vZHVsYXRpb24gID0gJWRcbiIsIF9fZnVuY19fLCBzdGF0ZS0+ZGN1ci5tb2R1bGF0aW9uKTsKKwlkcHJpbnRrKCIlczogICBmcmVxdWVuY3kgICA9ICVkXG4iLCBfX2Z1bmNfXywgc3RhdGUtPmRjdXIuZnJlcXVlbmN5KTsKKwlkcHJpbnRrKCIlczogICBwaWxvdCAgICAgICA9ICVkICh2YWwgPSAweCUwMngpXG4iLCBfX2Z1bmNfXywKKwkJc3RhdGUtPmRjdXIucGlsb3QsIHN0YXRlLT5kY3VyLnBpbG90X3ZhbCk7CisJZHByaW50aygiJXM6ICAgcmV0dW5lICAgICAgPSAlZFxuIiwgX19mdW5jX18sIHJldHVuZSk7CisJZHByaW50aygiJXM6ICAgcm9sbG9mZiAgICAgPSAlZCAodmFsID0gMHglMDJ4KVxuIiwgX19mdW5jX18sCisJCXN0YXRlLT5kY3VyLnJvbGxvZmYsIHN0YXRlLT5kY3VyLnJvbGxvZmZfdmFsKTsKKwlkcHJpbnRrKCIlczogICBzeW1ib2xfcmF0ZSA9ICVkXG4iLCBfX2Z1bmNfXywgc3RhdGUtPmRjdXIuc3ltYm9sX3JhdGUpOworCWRwcmludGsoIiVzOiAgIEZFQyAgICAgICAgID0gJWQgKG1hc2svdmFsID0gMHglMDJ4LzB4JTAyeClcbiIsIF9fZnVuY19fLAorCQlzdGF0ZS0+ZGN1ci5mZWMsIHN0YXRlLT5kY3VyLmZlY19tYXNrLCBzdGF0ZS0+ZGN1ci5mZWNfdmFsKTsKKwlkcHJpbnRrKCIlczogICBJbnZlcnNpb24gICA9ICVkICh2YWwgPSAweCUwMngpXG4iLCBfX2Z1bmNfXywKKwkJc3RhdGUtPmRjdXIuaW52ZXJzaW9uLCBzdGF0ZS0+ZGN1ci5pbnZlcnNpb25fdmFsKTsKKworCS8qIFRoaXMgaXMgYWxzbyBkb25lIGluIGFkdmlzZS9hY3F1aXJlIG9uIEhWUjQwMDAgYnV0IG5vdCBvbiBMSVRFICovCisJaWYgKHN0YXRlLT5jb25maWctPnNldF90c19wYXJhbXMpCisJCXN0YXRlLT5jb25maWctPnNldF90c19wYXJhbXMoZmUsIDApOworCisJLyogU2V0L1Jlc2V0IEIvVyAqLworCWNtZC5hcmdzWzB4MDBdID0gQ01EX0JBTkRXSURUSDsKKwljbWQuYXJnc1sweDAxXSA9IDB4MDE7CisJY21kLmxlbiA9IDB4MDI7CisJcmV0ID0gY3gyNDExNl9jbWRfZXhlY3V0ZShmZSwgJmNtZCk7CisJaWYgKHJldCAhPSAwKQorCQlyZXR1cm4gcmV0OworCisJLyogUHJlcGFyZSBhIHR1bmUgcmVxdWVzdCAqLworCWNtZC5hcmdzWzB4MDBdID0gQ01EX1RVTkVSRVFVRVNUOworCisJLyogRnJlcXVlbmN5ICovCisJY21kLmFyZ3NbMHgwMV0gPSAoc3RhdGUtPmRjdXIuZnJlcXVlbmN5ICYgMHhmZjAwMDApID4+IDE2OworCWNtZC5hcmdzWzB4MDJdID0gKHN0YXRlLT5kY3VyLmZyZXF1ZW5jeSAmIDB4MDBmZjAwKSA+PiA4OworCWNtZC5hcmdzWzB4MDNdID0gKHN0YXRlLT5kY3VyLmZyZXF1ZW5jeSAmIDB4MDAwMGZmKTsKKworCS8qIFN5bWJvbCBSYXRlICovCisJY21kLmFyZ3NbMHgwNF0gPSAoKHN0YXRlLT5kY3VyLnN5bWJvbF9yYXRlIC8gMTAwMCkgJiAweGZmMDApID4+IDg7CisJY21kLmFyZ3NbMHgwNV0gPSAoKHN0YXRlLT5kY3VyLnN5bWJvbF9yYXRlIC8gMTAwMCkgJiAweDAwZmYpOworCisJLyogQXV0b21hdGljIEludmVyc2lvbiAqLworCWNtZC5hcmdzWzB4MDZdID0gc3RhdGUtPmRjdXIuaW52ZXJzaW9uX3ZhbDsKKworCS8qIE1vZHVsYXRpb24gLyBGRUMgLyBQaWxvdCAqLworCWNtZC5hcmdzWzB4MDddID0gc3RhdGUtPmRjdXIuZmVjX3ZhbCB8IHN0YXRlLT5kY3VyLnBpbG90X3ZhbDsKKworCWNtZC5hcmdzWzB4MDhdID0gQ1gyNDExNl9TRUFSQ0hfUkFOR0VfS0haID4+IDg7CisJY21kLmFyZ3NbMHgwOV0gPSBDWDI0MTE2X1NFQVJDSF9SQU5HRV9LSFogJiAweGZmOworCWNtZC5hcmdzWzB4MGFdID0gMHgwMDsKKwljbWQuYXJnc1sweDBiXSA9IDB4MDA7CisJY21kLmFyZ3NbMHgwY10gPSBzdGF0ZS0+ZGN1ci5yb2xsb2ZmX3ZhbDsKKwljbWQuYXJnc1sweDBkXSA9IHN0YXRlLT5kY3VyLmZlY19tYXNrOworCisJaWYgKHN0YXRlLT5kY3VyLnN5bWJvbF9yYXRlID4gMzAwMDAwMDApIHsKKwkJY21kLmFyZ3NbMHgwZV0gPSAweDA0OworCQljbWQuYXJnc1sweDBmXSA9IDB4MDA7CisJCWNtZC5hcmdzWzB4MTBdID0gMHgwMTsKKwkJY21kLmFyZ3NbMHgxMV0gPSAweDc3OworCQljbWQuYXJnc1sweDEyXSA9IDB4MzY7CisJCWN4MjQxMTZfd3JpdGVyZWcoc3RhdGUsIENYMjQxMTZfUkVHX0NMS0RJViwgMHg0NCk7CisJCWN4MjQxMTZfd3JpdGVyZWcoc3RhdGUsIENYMjQxMTZfUkVHX1JBVEVESVYsIDB4MDEpOworCX0gZWxzZSB7CisJCWNtZC5hcmdzWzB4MGVdID0gMHgwNjsKKwkJY21kLmFyZ3NbMHgwZl0gPSAweDAwOworCQljbWQuYXJnc1sweDEwXSA9IDB4MDA7CisJCWNtZC5hcmdzWzB4MTFdID0gMHhGQTsKKwkJY21kLmFyZ3NbMHgxMl0gPSAweDI0OworCQljeDI0MTE2X3dyaXRlcmVnKHN0YXRlLCBDWDI0MTE2X1JFR19DTEtESVYsIDB4NDYpOworCQljeDI0MTE2X3dyaXRlcmVnKHN0YXRlLCBDWDI0MTE2X1JFR19SQVRFRElWLCAweDAwKTsKKwl9CisKKwljbWQubGVuID0gMHgxMzsKKworCS8qIFdlIG5lZWQgdG8gc3VwcG9ydCBwaWxvdCBhbmQgbm9uLXBpbG90IHR1bmluZyBpbiB0aGUKKwkgKiBkcml2ZXIgYXV0b21hdGljYWxseS4gVGhpcyBpcyBhIHdvcmthcm91bmQgZm9yIGJlY2F1c2UKKwkgKiB0aGUgZGVtb2QgZG9lcyBub3Qgc3VwcG9ydCBhdXRvZGV0ZWN0LgorCSAqLworCWRvIHsKKwkJLyogUmVzZXQgc3RhdHVzIHJlZ2lzdGVyICovCisJCXN0YXR1cyA9IGN4MjQxMTZfcmVhZHJlZyhzdGF0ZSwgQ1gyNDExNl9SRUdfU1NUQVRVUykKKwkJCSYgQ1gyNDExNl9TSUdOQUxfTUFTSzsKKwkJY3gyNDExNl93cml0ZXJlZyhzdGF0ZSwgQ1gyNDExNl9SRUdfU1NUQVRVUywgc3RhdHVzKTsKKworCQkvKiBUdW5lICovCisJCXJldCA9IGN4MjQxMTZfY21kX2V4ZWN1dGUoZmUsICZjbWQpOworCQlpZiAocmV0ICE9IDApCisJCQlicmVhazsKKworCQkvKgorCQkgKiBXYWl0IGZvciB1cCB0byA1MDAgbXMgYmVmb3JlIHJldHJ5aW5nCisJCSAqCisJCSAqIElmIHdlIGFyZSBhYmxlIHRvIHR1bmUgdGhlbiBnZW5lcmFsbHkgaXQgb2NjdXJzIHdpdGhpbiAxMDBtcy4KKwkJICogSWYgaXQgdGFrZXMgbG9uZ2VyLCB0cnkgYSBkaWZmZXJlbnQgdG9uZWJ1cnN0IHNldHRpbmcuCisJCSAqLworCQlmb3IgKGkgPSAwOyBpIDwgNTAgOyBpKyspIHsKKwkJCWN4MjQxMTZfcmVhZF9zdGF0dXMoZmUsICZ0dW5lcnN0YXQpOworCQkJc3RhdHVzID0gdHVuZXJzdGF0ICYgKEZFX0hBU19TSUdOQUwgfCBGRV9IQVNfU1lOQyk7CisJCQlpZiAoc3RhdHVzID09IChGRV9IQVNfU0lHTkFMIHwgRkVfSEFTX1NZTkMpKSB7CisJCQkJZHByaW50aygiJXM6IFR1bmVkXG4iLCBfX2Z1bmNfXyk7CisJCQkJZ290byB0dW5lZDsKKwkJCX0KKwkJCW1zbGVlcCgxMCk7CisJCX0KKworCQlkcHJpbnRrKCIlczogTm90IHR1bmVkXG4iLCBfX2Z1bmNfXyk7CisKKwkJLyogVG9nZ2xlIHBpbG90IGJpdCB3aGVuIGluIGF1dG8tcGlsb3QgKi8KKwkJaWYgKHN0YXRlLT5kY3VyLnBpbG90ID09IFBJTE9UX0FVVE8pCisJCQljbWQuYXJnc1sweDA3XSBePSBDWDI0MTE2X1BJTE9UX09OOworCX0gd2hpbGUgKC0tcmV0dW5lKTsKKwordHVuZWQ6ICAvKiBTZXQvUmVzZXQgQi9XICovCisJY21kLmFyZ3NbMHgwMF0gPSBDTURfQkFORFdJRFRIOworCWNtZC5hcmdzWzB4MDFdID0gMHgwMDsKKwljbWQubGVuID0gMHgwMjsKKwlyZXQgPSBjeDI0MTE2X2NtZF9leGVjdXRlKGZlLCAmY21kKTsKKwlpZiAocmV0ICE9IDApCisJCXJldHVybiByZXQ7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgc3RydWN0IGR2Yl9mcm9udGVuZF9vcHMgY3gyNDExNl9vcHMgPSB7CisKKwkuaW5mbyA9IHsKKwkJLm5hbWUgPSAiQ29uZXhhbnQgQ1gyNDExNi9DWDI0MTE4IiwKKwkJLnR5cGUgPSBGRV9RUFNLLAorCQkuZnJlcXVlbmN5X21pbiA9IDk1MDAwMCwKKwkJLmZyZXF1ZW5jeV9tYXggPSAyMTUwMDAwLAorCQkuZnJlcXVlbmN5X3N0ZXBzaXplID0gMTAxMSwgLyoga0h6IGZvciBRUFNLIGZyb250ZW5kcyAqLworCQkuZnJlcXVlbmN5X3RvbGVyYW5jZSA9IDUwMDAsCisJCS5zeW1ib2xfcmF0ZV9taW4gPSAxMDAwMDAwLAorCQkuc3ltYm9sX3JhdGVfbWF4ID0gNDUwMDAwMDAsCisJCS5jYXBzID0gRkVfQ0FOX0lOVkVSU0lPTl9BVVRPIHwKKwkJCUZFX0NBTl9GRUNfMV8yIHwgRkVfQ0FOX0ZFQ18yXzMgfCBGRV9DQU5fRkVDXzNfNCB8CisJCQlGRV9DQU5fRkVDXzRfNSB8IEZFX0NBTl9GRUNfNV82IHwgRkVfQ0FOX0ZFQ182XzcgfAorCQkJRkVfQ0FOX0ZFQ183XzggfCBGRV9DQU5fRkVDX0FVVE8gfAorCQkJRkVfQ0FOX1FQU0sgfCBGRV9DQU5fUkVDT1ZFUgorCX0sCisKKwkucmVsZWFzZSA9IGN4MjQxMTZfcmVsZWFzZSwKKworCS5pbml0ID0gY3gyNDExNl9pbml0ZmUsCisJLnNsZWVwID0gY3gyNDExNl9zbGVlcCwKKwkucmVhZF9zdGF0dXMgPSBjeDI0MTE2X3JlYWRfc3RhdHVzLAorCS5yZWFkX2JlciA9IGN4MjQxMTZfcmVhZF9iZXIsCisJLnJlYWRfc2lnbmFsX3N0cmVuZ3RoID0gY3gyNDExNl9yZWFkX3NpZ25hbF9zdHJlbmd0aCwKKwkucmVhZF9zbnIgPSBjeDI0MTE2X3JlYWRfc25yLAorCS5yZWFkX3VjYmxvY2tzID0gY3gyNDExNl9yZWFkX3VjYmxvY2tzLAorCS5zZXRfdG9uZSA9IGN4MjQxMTZfc2V0X3RvbmUsCisJLnNldF92b2x0YWdlID0gY3gyNDExNl9zZXRfdm9sdGFnZSwKKwkuZGlzZXFjX3NlbmRfbWFzdGVyX2NtZCA9IGN4MjQxMTZfc2VuZF9kaXNlcWNfbXNnLAorCS5kaXNlcWNfc2VuZF9idXJzdCA9IGN4MjQxMTZfZGlzZXFjX3NlbmRfYnVyc3QsCisKKwkuc2V0X3Byb3BlcnR5ID0gY3gyNDExNl9zZXRfcHJvcGVydHksCisJLmdldF9wcm9wZXJ0eSA9IGN4MjQxMTZfZ2V0X3Byb3BlcnR5LAorCS5zZXRfZnJvbnRlbmQgPSBjeDI0MTE2X3NldF9mcm9udGVuZCwKK307CisKK01PRFVMRV9ERVNDUklQVElPTigiRFZCIEZyb250ZW5kIG1vZHVsZSBmb3IgQ29uZXhhbnQgY3gyNDExNi9jeDI0MTE4IGhhcmR3YXJlIik7CitNT0RVTEVfQVVUSE9SKCJTdGV2ZW4gVG90aCIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvY3gyNDExNi5oIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2N4MjQxMTYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40Y2IzZGRkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2N4MjQxMTYuaApAQCAtMCwwICsxLDU0IEBACisvKgorICAgIENvbmV4YW50IGN4MjQxMTYvY3gyNDExOCAtIERWQlMvUzIgU2F0ZWxsaXRlIGRlbW9kL3R1bmVyIGRyaXZlcgorCisgICAgQ29weXJpZ2h0IChDKSAyMDA2IFN0ZXZlbiBUb3RoIDxzdG90aEBsaW51eHR2LmNvbT4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorKi8KKworI2lmbmRlZiBDWDI0MTE2X0gKKyNkZWZpbmUgQ1gyNDExNl9ICisKKyNpbmNsdWRlIDxsaW51eC9kdmIvZnJvbnRlbmQuaD4KKworc3RydWN0IGN4MjQxMTZfY29uZmlnIHsKKwkvKiB0aGUgZGVtb2R1bGF0b3IncyBpMmMgYWRkcmVzcyAqLworCXU4IGRlbW9kX2FkZHJlc3M7CisKKwkvKiBOZWVkIHRvIHNldCBkZXZpY2UgcGFyYW0gZm9yIHN0YXJ0X2RtYSAqLworCWludCAoKnNldF90c19wYXJhbXMpKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCBpbnQgaXNfcHVuY3R1cmVkKTsKKworCS8qIE5lZWQgdG8gcmVzZXQgZGV2aWNlIGR1cmluZyBmaXJtd2FyZSBsb2FkaW5nICovCisJaW50ICgqcmVzZXRfZGV2aWNlKShzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSk7CisKKwkvKiBOZWVkIHRvIHNldCBNUEVHIHBhcmFtZXRlcnMgKi8KKwl1OCBtcGdfY2xrX3Bvc19wb2w6MHgwMjsKK307CisKKyNpZiBkZWZpbmVkKENPTkZJR19EVkJfQ1gyNDExNikgfHwgZGVmaW5lZChDT05GSUdfRFZCX0NYMjQxMTZfTU9EVUxFKQorZXh0ZXJuIHN0cnVjdCBkdmJfZnJvbnRlbmQgKmN4MjQxMTZfYXR0YWNoKAorCWNvbnN0IHN0cnVjdCBjeDI0MTE2X2NvbmZpZyAqY29uZmlnLAorCXN0cnVjdCBpMmNfYWRhcHRlciAqaTJjKTsKKyNlbHNlCitzdGF0aWMgaW5saW5lIHN0cnVjdCBkdmJfZnJvbnRlbmQgKmN4MjQxMTZfYXR0YWNoKAorCWNvbnN0IHN0cnVjdCBjeDI0MTE2X2NvbmZpZyAqY29uZmlnLAorCXN0cnVjdCBpMmNfYWRhcHRlciAqaTJjKQoreworCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBkcml2ZXIgZGlzYWJsZWQgYnkgS2NvbmZpZ1xuIiwgX19mdW5jX18pOworCXJldHVybiBOVUxMOworfQorI2VuZGlmCisKKyNlbmRpZiAvKiBDWDI0MTE2X0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9jeDI0MTIzLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvY3gyNDEyMy5jCmluZGV4IDcxNTYxNTcuLjFhOGMzNmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9jeDI0MTIzLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2N4MjQxMjMuYwpAQCAtMzMsNyArMzMsMTMgQEAKICNkZWZpbmUgWFRBTCAxMDExMTAwMAogCiBzdGF0aWMgaW50IGZvcmNlX2JhbmQ7Cittb2R1bGVfcGFyYW0oZm9yY2VfYmFuZCwgaW50LCAwNjQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoZm9yY2VfYmFuZCwgIkZvcmNlIGEgc3BlY2lmaWMgYmFuZCBzZWxlY3QgIlwKKwkiKDEtOSwgZGVmYXVsdDpvZmYpLiIpOworCiBzdGF0aWMgaW50IGRlYnVnOworbW9kdWxlX3BhcmFtKGRlYnVnLCBpbnQsIDA2NDQpOworTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgIkFjdGl2YXRlcyBmcm9udGVuZCBkZWJ1Z2dpbmcgKGRlZmF1bHQ6MCkiKTsKIAogI2RlZmluZSBpbmZvKGFyZ3MuLi4pIGRvIHsgcHJpbnRrKEtFUk5fSU5GTyAiQ1gyNDEyMzogIiBhcmdzKTsgfSB3aGlsZSAoMCkKICNkZWZpbmUgZXJyKGFyZ3MuLi4pICBkbyB7IHByaW50ayhLRVJOX0VSUiAgIkNYMjQxMjM6ICIgYXJncyk7IH0gd2hpbGUgKDApCkBAIC00NiwxMCArNTIsOSBAQAogCQl9IFwKIAl9IHdoaWxlICgwKQogCi1zdHJ1Y3QgY3gyNDEyM19zdGF0ZQotewotCXN0cnVjdCBpMmNfYWRhcHRlciogaTJjOwotCWNvbnN0IHN0cnVjdCBjeDI0MTIzX2NvbmZpZyogY29uZmlnOworc3RydWN0IGN4MjQxMjNfc3RhdGUgeworCXN0cnVjdCBpMmNfYWRhcHRlciAqaTJjOworCWNvbnN0IHN0cnVjdCBjeDI0MTIzX2NvbmZpZyAqY29uZmlnOwogCiAJc3RydWN0IGR2Yl9mcm9udGVuZCBmcm9udGVuZDsKIApAQCAtNzAsOCArNzUsNyBAQAogfTsKIAogLyogVmFyaW91cyB0dW5lciBkZWZhdWx0cyBuZWVkIHRvIGJlIGVzdGFibGlzaGVkIGZvciBhIGdpdmVuIHN5bWJvbCByYXRlIFNwcyAqLwotc3RhdGljIHN0cnVjdAoteworc3RhdGljIHN0cnVjdCBjeDI0MTIzX0FHQ192YWwgewogCXUzMiBzeW1ib2xyYXRlX2xvdzsKIAl1MzIgc3ltYm9scmF0ZV9oaWdoOwogCXUzMiBWQ0Fwcm9nZGF0YTsKQEAgLTEwOSw4ICsxMTMsNyBAQAogICogZml4bWU6IFRoZSBib3VuZHMgb24gdGhlIGJhbmRzIGRvIG5vdCBtYXRjaCB0aGUgZG9jIGluIHJlYWwgbGlmZS4KICAqIGZpeG1lOiBTb21lIG9mIHRoZW0gaGF2ZSBiZWVuIG1vdmVkLCBvdGhlciBtaWdodCBuZWVkIGFkanVzdG1lbnQuCiAgKi8KLXN0YXRpYyBzdHJ1Y3QKLXsKK3N0YXRpYyBzdHJ1Y3QgY3gyNDEyM19iYW5kc2VsZWN0X3ZhbCB7CiAJdTMyIGZyZXFfbG93OwogCXUzMiBmcmVxX2hpZ2g7CiAJdTMyIFZDT2RpdmlkZXI7CkBAIC0yNDksNyArMjUyLDggQEAKIAogCS8qIHByaW50ayhLRVJOX0RFQlVHICJ3ciglMDJ4KTogJTAyeCAlMDJ4XG4iLCBpMmNfYWRkciwgcmVnLCBkYXRhKTsgKi8KIAotCWlmICgoZXJyID0gaTJjX3RyYW5zZmVyKHN0YXRlLT5pMmMsICZtc2csIDEpKSAhPSAxKSB7CisJZXJyID0gaTJjX3RyYW5zZmVyKHN0YXRlLT5pMmMsICZtc2csIDEpOworCWlmIChlcnIgIT0gMSkgewogCQlwcmludGsoIiVzOiB3cml0ZXJlZyBlcnJvcihlcnIgPT0gJWksIHJlZyA9PSAweCUwMngsIgogCQkJICIgZGF0YSA9PSAweCUwMngpXG4iLCBfX2Z1bmNfXywgZXJyLCByZWcsIGRhdGEpOwogCQlyZXR1cm4gZXJyOwpAQCAtMjg0LDcgKzI4OCw4IEBACiAjZGVmaW5lIGN4MjQxMjNfd3JpdGVyZWcoc3RhdGUsIHJlZywgdmFsKSBcCiAJY3gyNDEyM19pMmNfd3JpdGVyZWcoc3RhdGUsIHN0YXRlLT5jb25maWctPmRlbW9kX2FkZHJlc3MsIHJlZywgdmFsKQogCi1zdGF0aWMgaW50IGN4MjQxMjNfc2V0X2ludmVyc2lvbihzdHJ1Y3QgY3gyNDEyM19zdGF0ZSogc3RhdGUsIGZlX3NwZWN0cmFsX2ludmVyc2lvbl90IGludmVyc2lvbikKK3N0YXRpYyBpbnQgY3gyNDEyM19zZXRfaW52ZXJzaW9uKHN0cnVjdCBjeDI0MTIzX3N0YXRlICpzdGF0ZSwKKwlmZV9zcGVjdHJhbF9pbnZlcnNpb25fdCBpbnZlcnNpb24pCiB7CiAJdTggbm9tX3JlZyA9IGN4MjQxMjNfcmVhZHJlZyhzdGF0ZSwgMHgwZSk7CiAJdTggYXV0b19yZWcgPSBjeDI0MTIzX3JlYWRyZWcoc3RhdGUsIDB4MTApOwpAQCAtMzExLDcgKzMxNiw4IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgY3gyNDEyM19nZXRfaW52ZXJzaW9uKHN0cnVjdCBjeDI0MTIzX3N0YXRlKiBzdGF0ZSwgZmVfc3BlY3RyYWxfaW52ZXJzaW9uX3QgKmludmVyc2lvbikKK3N0YXRpYyBpbnQgY3gyNDEyM19nZXRfaW52ZXJzaW9uKHN0cnVjdCBjeDI0MTIzX3N0YXRlICpzdGF0ZSwKKwlmZV9zcGVjdHJhbF9pbnZlcnNpb25fdCAqaW52ZXJzaW9uKQogewogCXU4IHZhbDsKIApAQCAtMzI4LDE4ICszMzQsMjAgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBjeDI0MTIzX3NldF9mZWMoc3RydWN0IGN4MjQxMjNfc3RhdGUqIHN0YXRlLCBmZV9jb2RlX3JhdGVfdCBmZWMpCitzdGF0aWMgaW50IGN4MjQxMjNfc2V0X2ZlYyhzdHJ1Y3QgY3gyNDEyM19zdGF0ZSAqc3RhdGUsIGZlX2NvZGVfcmF0ZV90IGZlYykKIHsKIAl1OCBub21fcmVnID0gY3gyNDEyM19yZWFkcmVnKHN0YXRlLCAweDBlKSAmIH4weDA3OwogCi0JaWYgKCAoZmVjIDwgRkVDX05PTkUpIHx8IChmZWMgPiBGRUNfQVVUTykgKQorCWlmICgoZmVjIDwgRkVDX05PTkUpIHx8IChmZWMgPiBGRUNfQVVUTykpCiAJCWZlYyA9IEZFQ19BVVRPOwogCiAJLyogU2V0IHRoZSBzb2Z0IGRlY2lzaW9uIHRocmVzaG9sZCAqLwotCWlmKGZlYyA9PSBGRUNfMV8yKQotCQljeDI0MTIzX3dyaXRlcmVnKHN0YXRlLCAweDQzLCBjeDI0MTIzX3JlYWRyZWcoc3RhdGUsIDB4NDMpIHwgMHgwMSk7CisJaWYgKGZlYyA9PSBGRUNfMV8yKQorCQljeDI0MTIzX3dyaXRlcmVnKHN0YXRlLCAweDQzLAorCQkJY3gyNDEyM19yZWFkcmVnKHN0YXRlLCAweDQzKSB8IDB4MDEpOwogCWVsc2UKLQkJY3gyNDEyM193cml0ZXJlZyhzdGF0ZSwgMHg0MywgY3gyNDEyM19yZWFkcmVnKHN0YXRlLCAweDQzKSAmIH4weDAxKTsKKwkJY3gyNDEyM193cml0ZXJlZyhzdGF0ZSwgMHg0MywKKwkJCWN4MjQxMjNfcmVhZHJlZyhzdGF0ZSwgMHg0MykgJiB+MHgwMSk7CiAKIAlzd2l0Y2ggKGZlYykgewogCWNhc2UgRkVDXzFfMjoKQEAgLTM4OCwxMSArMzk2LDExIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgY3gyNDEyM19nZXRfZmVjKHN0cnVjdCBjeDI0MTIzX3N0YXRlKiBzdGF0ZSwgZmVfY29kZV9yYXRlX3QgKmZlYykKK3N0YXRpYyBpbnQgY3gyNDEyM19nZXRfZmVjKHN0cnVjdCBjeDI0MTIzX3N0YXRlICpzdGF0ZSwgZmVfY29kZV9yYXRlX3QgKmZlYykKIHsKIAlpbnQgcmV0OwogCi0JcmV0ID0gY3gyNDEyM19yZWFkcmVnIChzdGF0ZSwgMHgxYik7CisJcmV0ID0gY3gyNDEyM19yZWFkcmVnKHN0YXRlLCAweDFiKTsKIAlpZiAocmV0IDwgMCkKIAkJcmV0dXJuIHJldDsKIAlyZXQgPSByZXQgJiAweDA3OwpAQCAtNDMzLDE2ICs0NDEsMTYgQEAKIHsKIAl1MzIgZXhwLCBuZWFyZXN0ID0gMDsKIAl1MzIgZGl2ID0gYSAvIGI7Ci0JaWYoYSAlIGIgPj0gYiAvIDIpICsrZGl2OwotCWlmKGRpdiA8ICgxIDw8IDMxKSkKLQl7Ci0JCWZvcihleHAgPSAxOyBkaXYgPiBleHA7IG5lYXJlc3QrKykKKwlpZiAoYSAlIGIgPj0gYiAvIDIpCisJCSsrZGl2OworCWlmIChkaXYgPCAoMSA8PCAzMSkpIHsKKwkJZm9yIChleHAgPSAxOyBkaXYgPiBleHA7IG5lYXJlc3QrKykKIAkJCWV4cCArPSBleHA7CiAJfQogCXJldHVybiBuZWFyZXN0OwogfQogCi1zdGF0aWMgaW50IGN4MjQxMjNfc2V0X3N5bWJvbHJhdGUoc3RydWN0IGN4MjQxMjNfc3RhdGUqIHN0YXRlLCB1MzIgc3JhdGUpCitzdGF0aWMgaW50IGN4MjQxMjNfc2V0X3N5bWJvbHJhdGUoc3RydWN0IGN4MjQxMjNfc3RhdGUgKnN0YXRlLCB1MzIgc3JhdGUpCiB7CiAJdTMyIHRtcCwgc2FtcGxlX3JhdGUsIHJhdGlvLCBzYW1wbGVfZ2FpbjsKIAl1OCBwbGxfbXVsdDsKQEAgLTQ5OCw5ICs1MDYsOSBAQAogCiAJY3gyNDEyM193cml0ZXJlZyhzdGF0ZSwgMHgwMSwgcGxsX211bHQgKiA2KTsKIAotCWN4MjQxMjNfd3JpdGVyZWcoc3RhdGUsIDB4MDgsIChyYXRpbyA+PiAxNikgJiAweDNmICk7Ci0JY3gyNDEyM193cml0ZXJlZyhzdGF0ZSwgMHgwOSwgKHJhdGlvID4+ICA4KSAmIDB4ZmYgKTsKLQljeDI0MTIzX3dyaXRlcmVnKHN0YXRlLCAweDBhLCAocmF0aW8gICAgICApICYgMHhmZiApOworCWN4MjQxMjNfd3JpdGVyZWcoc3RhdGUsIDB4MDgsIChyYXRpbyA+PiAxNikgJiAweDNmKTsKKwljeDI0MTIzX3dyaXRlcmVnKHN0YXRlLCAweDA5LCAocmF0aW8gPj4gOCkgJiAweGZmKTsKKwljeDI0MTIzX3dyaXRlcmVnKHN0YXRlLCAweDBhLCByYXRpbyAmIDB4ZmYpOwogCiAJLyogYWxzbyBzZXQgdGhlIGRlbW9kdWxhdG9yIHNhbXBsZSBnYWluICovCiAJc2FtcGxlX2dhaW4gPSBjeDI0MTIzX2ludF9sb2cyKHNhbXBsZV9yYXRlLCBzcmF0ZSk7CkBAIC01MTQsMTAgKzUyMiwxMiBAQAogfQogCiAvKgotICogQmFzZWQgb24gdGhlIHJlcXVpcmVkIGZyZXF1ZW5jeSBhbmQgc3ltYm9scmF0ZSwgdGhlIHR1bmVyIEFHQyBoYXMgdG8gYmUgY29uZmlndXJlZAotICogYW5kIHRoZSBjb3JyZWN0IGJhbmQgc2VsZWN0ZWQuIENhbGN1bGF0ZSB0aG9zZSB2YWx1ZXMKKyAqIEJhc2VkIG9uIHRoZSByZXF1aXJlZCBmcmVxdWVuY3kgYW5kIHN5bWJvbHJhdGUsIHRoZSB0dW5lciBBR0MgaGFzCisgKiB0byBiZSBjb25maWd1cmVkIGFuZCB0aGUgY29ycmVjdCBiYW5kIHNlbGVjdGVkLgorICogQ2FsY3VsYXRlIHRob3NlIHZhbHVlcy4KICAqLwotc3RhdGljIGludCBjeDI0MTIzX3BsbF9jYWxjdWxhdGUoc3RydWN0IGR2Yl9mcm9udGVuZCogZmUsIHN0cnVjdCBkdmJfZnJvbnRlbmRfcGFyYW1ldGVycyAqcCkKK3N0YXRpYyBpbnQgY3gyNDEyM19wbGxfY2FsY3VsYXRlKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLAorCXN0cnVjdCBkdmJfZnJvbnRlbmRfcGFyYW1ldGVycyAqcCkKIHsKIAlzdHJ1Y3QgY3gyNDEyM19zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKIAl1MzIgbmRpdiA9IDAsIGFkaXYgPSAwLCB2Y29fZGl2ID0gMDsKQEAgLTUyNSw2ICs1MzUsOCBAQAogCWludCBwdW1wID0gMjsKIAlpbnQgYmFuZCA9IDA7CiAJaW50IG51bV9iYW5kcyA9IEFSUkFZX1NJWkUoY3gyNDEyM19iYW5kc2VsZWN0X3ZhbHMpOworCXN0cnVjdCBjeDI0MTIzX2JhbmRzZWxlY3RfdmFsICpic3YgPSBOVUxMOworCXN0cnVjdCBjeDI0MTIzX0FHQ192YWwgKmFnY3YgPSBOVUxMOwogCiAJLyogRGVmYXVsdHMgZm9yIGxvdyBmcmVxLCBsb3cgcmF0ZSAqLwogCXN0YXRlLT5WQ0FhcmcgPSBjeDI0MTIzX0FHQ192YWxzWzBdLlZDQXByb2dkYXRhOwpAQCAtNTMyLDU4ICs1NDQsNjUgQEAKIAlzdGF0ZS0+YmFuZHNlbGVjdGFyZyA9IGN4MjQxMjNfYmFuZHNlbGVjdF92YWxzWzBdLnByb2dkYXRhOwogCXZjb19kaXYgPSBjeDI0MTIzX2JhbmRzZWxlY3RfdmFsc1swXS5WQ09kaXZpZGVyOwogCi0JLyogRm9yIHRoZSBnaXZlbiBzeW1ib2wgcmF0ZSwgZGV0ZXJtaW5lIHRoZSBWQ0EsIFZHQSBhbmQgRklMVFVORSBwcm9ncmFtbWluZyBiaXRzICovCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoY3gyNDEyM19BR0NfdmFscyk7IGkrKykKLQl7Ci0JCWlmICgoY3gyNDEyM19BR0NfdmFsc1tpXS5zeW1ib2xyYXRlX2xvdyA8PSBwLT51LnFwc2suc3ltYm9sX3JhdGUpICYmCi0JCSAgICAoY3gyNDEyM19BR0NfdmFsc1tpXS5zeW1ib2xyYXRlX2hpZ2ggPj0gcC0+dS5xcHNrLnN5bWJvbF9yYXRlKSApIHsKLQkJCXN0YXRlLT5WQ0FhcmcgPSBjeDI0MTIzX0FHQ192YWxzW2ldLlZDQXByb2dkYXRhOwotCQkJc3RhdGUtPlZHQWFyZyA9IGN4MjQxMjNfQUdDX3ZhbHNbaV0uVkdBcHJvZ2RhdGE7Ci0JCQlzdGF0ZS0+RklMVHVuZSA9IGN4MjQxMjNfQUdDX3ZhbHNbaV0uRklMVHVuZTsKKwkvKiBGb3IgdGhlIGdpdmVuIHN5bWJvbCByYXRlLCBkZXRlcm1pbmUgdGhlIFZDQSwgVkdBIGFuZAorCSAqIEZJTFRVTkUgcHJvZ3JhbW1pbmcgYml0cyAqLworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGN4MjQxMjNfQUdDX3ZhbHMpOyBpKyspIHsKKwkJYWdjdiA9ICZjeDI0MTIzX0FHQ192YWxzW2ldOworCQlpZiAoKGFnY3YtPnN5bWJvbHJhdGVfbG93IDw9IHAtPnUucXBzay5zeW1ib2xfcmF0ZSkgJiYKKwkJICAgIChhZ2N2LT5zeW1ib2xyYXRlX2hpZ2ggPj0gcC0+dS5xcHNrLnN5bWJvbF9yYXRlKSkgeworCQkJc3RhdGUtPlZDQWFyZyA9IGFnY3YtPlZDQXByb2dkYXRhOworCQkJc3RhdGUtPlZHQWFyZyA9IGFnY3YtPlZHQXByb2dkYXRhOworCQkJc3RhdGUtPkZJTFR1bmUgPSBhZ2N2LT5GSUxUdW5lOwogCQl9CiAJfQogCiAJLyogZGV0ZXJtaW5lIHRoZSBiYW5kIHRvIHVzZSAqLwotCWlmKGZvcmNlX2JhbmQgPCAxIHx8IGZvcmNlX2JhbmQgPiBudW1fYmFuZHMpCi0JewotCQlmb3IgKGkgPSAwOyBpIDwgbnVtX2JhbmRzOyBpKyspCi0JCXsKLQkJCWlmICgoY3gyNDEyM19iYW5kc2VsZWN0X3ZhbHNbaV0uZnJlcV9sb3cgPD0gcC0+ZnJlcXVlbmN5KSAmJgotCQkJICAgIChjeDI0MTIzX2JhbmRzZWxlY3RfdmFsc1tpXS5mcmVxX2hpZ2ggPj0gcC0+ZnJlcXVlbmN5KSApCisJaWYgKGZvcmNlX2JhbmQgPCAxIHx8IGZvcmNlX2JhbmQgPiBudW1fYmFuZHMpIHsKKwkJZm9yIChpID0gMDsgaSA8IG51bV9iYW5kczsgaSsrKSB7CisJCQlic3YgPSAmY3gyNDEyM19iYW5kc2VsZWN0X3ZhbHNbaV07CisJCQlpZiAoKGJzdi0+ZnJlcV9sb3cgPD0gcC0+ZnJlcXVlbmN5KSAmJgorCQkJCShic3YtPmZyZXFfaGlnaCA+PSBwLT5mcmVxdWVuY3kpKQogCQkJCWJhbmQgPSBpOwogCQl9Ci0JfQotCWVsc2UKKwl9IGVsc2UKIAkJYmFuZCA9IGZvcmNlX2JhbmQgLSAxOwogCiAJc3RhdGUtPmJhbmRzZWxlY3RhcmcgPSBjeDI0MTIzX2JhbmRzZWxlY3RfdmFsc1tiYW5kXS5wcm9nZGF0YTsKIAl2Y29fZGl2ID0gY3gyNDEyM19iYW5kc2VsZWN0X3ZhbHNbYmFuZF0uVkNPZGl2aWRlcjsKIAogCS8qIGRldGVybWluZSB0aGUgY2hhcmdlIHB1bXAgY3VycmVudCAqLwotCWlmICggcC0+ZnJlcXVlbmN5IDwgKGN4MjQxMjNfYmFuZHNlbGVjdF92YWxzW2JhbmRdLmZyZXFfbG93ICsgY3gyNDEyM19iYW5kc2VsZWN0X3ZhbHNbYmFuZF0uZnJlcV9oaWdoKS8yICkKKwlpZiAocC0+ZnJlcXVlbmN5IDwgKGN4MjQxMjNfYmFuZHNlbGVjdF92YWxzW2JhbmRdLmZyZXFfbG93ICsKKwkJY3gyNDEyM19iYW5kc2VsZWN0X3ZhbHNbYmFuZF0uZnJlcV9oaWdoKSAvIDIpCiAJCXB1bXAgPSAweDAxOwogCWVsc2UKIAkJcHVtcCA9IDB4MDI7CiAKIAkvKiBEZXRlcm1pbmUgdGhlIE4vQSBkaXZpZGVycyBmb3IgdGhlIHJlcXVlc3RlZCBsYmFuZCBmcmVxIChpbiBrSHopLiAqLwotCS8qIE5vdGU6IHRoZSByZWZlcmVuY2UgZGl2aWRlciBSPTEwLCBmcmVxdWVuY3kgaXMgaW4gS0h6LCBYVEFMIGlzIGluIEh6ICovCi0JbmRpdiA9ICggKChwLT5mcmVxdWVuY3kgKiB2Y29fZGl2ICogMTApIC8gKDIgKiBYVEFMIC8gMTAwMCkpIC8gMzIpICYgMHgxZmY7Ci0JYWRpdiA9ICggKChwLT5mcmVxdWVuY3kgKiB2Y29fZGl2ICogMTApIC8gKDIgKiBYVEFMIC8gMTAwMCkpICUgMzIpICYgMHgxZjsKKwkvKiBOb3RlOiB0aGUgcmVmZXJlbmNlIGRpdmlkZXIgUj0xMCwgZnJlcXVlbmN5IGlzIGluIEtIeiwKKwkgKiBYVEFMIGlzIGluIEh6ICovCisJbmRpdiA9ICgoKHAtPmZyZXF1ZW5jeSAqIHZjb19kaXYgKiAxMCkgLworCQkoMiAqIFhUQUwgLyAxMDAwKSkgLyAzMikgJiAweDFmZjsKKwlhZGl2ID0gKCgocC0+ZnJlcXVlbmN5ICogdmNvX2RpdiAqIDEwKSAvCisJCSgyICogWFRBTCAvIDEwMDApKSAlIDMyKSAmIDB4MWY7CiAKIAlpZiAoYWRpdiA9PSAwICYmIG5kaXYgPiAwKQogCQluZGl2LS07CiAKLQkvKiBjb250cm9sIGJpdHMgMTEsIHJlZmRpdiAxMSwgY2hhcmdlIHB1bXAgcG9sYXJpdHkgMSwgY2hhcmdlIHB1bXAgY3VycmVudCwgbmRpdiwgYWRpdiAqLwotCXN0YXRlLT5wbGxhcmcgPSAoMyA8PCAxOSkgfCAoMyA8PCAxNykgfCAoMSA8PCAxNikgfCAocHVtcCA8PCAxNCkgfCAobmRpdiA8PCA1KSB8IGFkaXY7CisJLyogY29udHJvbCBiaXRzIDExLCByZWZkaXYgMTEsIGNoYXJnZSBwdW1wIHBvbGFyaXR5IDEsCisJICogY2hhcmdlIHB1bXAgY3VycmVudCwgbmRpdiwgYWRpdiAqLworCXN0YXRlLT5wbGxhcmcgPSAoMyA8PCAxOSkgfCAoMyA8PCAxNykgfCAoMSA8PCAxNikgfAorCQkocHVtcCA8PCAxNCkgfCAobmRpdiA8PCA1KSB8IGFkaXY7CiAKIAlyZXR1cm4gMDsKIH0KIAogLyoKICAqIFR1bmVyIGRhdGEgaXMgMjEgYml0cyBsb25nLCBtdXN0IGJlIGxlZnQtYWxpZ25lZCBpbiBkYXRhLgotICogVHVuZXIgY3gyNDEwOSBpcyB3cml0dGVuIHRocm91Z2ggYSBkZWRpY2F0ZWQgM3dpcmUgaW50ZXJmYWNlIG9uIHRoZSBkZW1vZCBjaGlwLgorICogVHVuZXIgY3gyNDEwOSBpcyB3cml0dGVuIHRocm91Z2ggYSBkZWRpY2F0ZWQgM3dpcmUgaW50ZXJmYWNlCisgKiBvbiB0aGUgZGVtb2QgY2hpcC4KICAqLwotc3RhdGljIGludCBjeDI0MTIzX3BsbF93cml0ZXJlZyhzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBmZSwgc3RydWN0IGR2Yl9mcm9udGVuZF9wYXJhbWV0ZXJzICpwLCB1MzIgZGF0YSkKK3N0YXRpYyBpbnQgY3gyNDEyM19wbGxfd3JpdGVyZWcoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsCisJc3RydWN0IGR2Yl9mcm9udGVuZF9wYXJhbWV0ZXJzICpwLCB1MzIgZGF0YSkKIHsKIAlzdHJ1Y3QgY3gyNDEyM19zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKIAl1bnNpZ25lZCBsb25nIHRpbWVvdXQ7CkBAIC02MTAsNyArNjI5LDcgQEAKIAogCS8qIHNlbmQgYW5vdGhlciA4IGJ5dGVzLCB3YWl0IGZvciB0aGUgc2VuZCB0byBiZSBjb21wbGV0ZWQgKi8KIAl0aW1lb3V0ID0gamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoNDApOwotCWN4MjQxMjNfd3JpdGVyZWcoc3RhdGUsIDB4MjIsIChkYXRhPj44KSAmIDB4ZmYgKTsKKwljeDI0MTIzX3dyaXRlcmVnKHN0YXRlLCAweDIyLCAoZGF0YSA+PiA4KSAmIDB4ZmYpOwogCXdoaWxlICgoY3gyNDEyM19yZWFkcmVnKHN0YXRlLCAweDIwKSAmIDB4NDApID09IDApIHsKIAkJaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgdGltZW91dCkpIHsKIAkJCWVycigiJXM6ICBkZW1vZHVsYXRvciBpcyBub3QgcmVzcG9uZGluZywgIlwKQEAgLTYyMCw5ICs2MzksMTAgQEAKIAkJbXNsZWVwKDEwKTsKIAl9CiAKLQkvKiBzZW5kIHRoZSBsb3dlciA1IGJpdHMgb2YgdGhpcyBieXRlLCBwYWRkZWQgd2l0aCAzIExCQiwgd2FpdCBmb3IgdGhlIHNlbmQgdG8gYmUgY29tcGxldGVkICovCisJLyogc2VuZCB0aGUgbG93ZXIgNSBiaXRzIG9mIHRoaXMgYnl0ZSwgcGFkZGVkIHdpdGggMyBMQkIsCisJICogd2FpdCBmb3IgdGhlIHNlbmQgdG8gYmUgY29tcGxldGVkICovCiAJdGltZW91dCA9IGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKDQwKTsKLQljeDI0MTIzX3dyaXRlcmVnKHN0YXRlLCAweDIyLCAoZGF0YSkgJiAweGZmICk7CisJY3gyNDEyM193cml0ZXJlZyhzdGF0ZSwgMHgyMiwgKGRhdGEpICYgMHhmZik7CiAJd2hpbGUgKChjeDI0MTIzX3JlYWRyZWcoc3RhdGUsIDB4MjApICYgMHg4MCkpIHsKIAkJaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgdGltZW91dCkpIHsKIAkJCWVycigiJXM6ICBkZW1vZHVsYXRvciBpcyBub3QgcmVzcG9uZGluZywiIFwKQEAgLTYzOSw3ICs2NTksOCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGN4MjQxMjNfcGxsX3R1bmUoc3RydWN0IGR2Yl9mcm9udGVuZCogZmUsIHN0cnVjdCBkdmJfZnJvbnRlbmRfcGFyYW1ldGVycyAqcCkKK3N0YXRpYyBpbnQgY3gyNDEyM19wbGxfdHVuZShzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwKKwlzdHJ1Y3QgZHZiX2Zyb250ZW5kX3BhcmFtZXRlcnMgKnApCiB7CiAJc3RydWN0IGN4MjQxMjNfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CiAJdTggdmFsOwpAQCAtNjkwLDcgKzcxMSw3IEBACiAJcmV0dXJuIGN4MjQxMjNfd3JpdGVyZWcoc3RhdGUsIDB4MjMsIHIpOwogfQogCi1zdGF0aWMgaW50IGN4MjQxMjNfaW5pdGZlKHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlKQorc3RhdGljIGludCBjeDI0MTIzX2luaXRmZShzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSkKIHsKIAlzdHJ1Y3QgY3gyNDEyM19zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKIAlpbnQgaTsKQEAgLTY5OSwxOSArNzIwLDIyIEBACiAKIAkvKiBDb25maWd1cmUgdGhlIGRlbW9kIHRvIGEgZ29vZCBzZXQgb2YgZGVmYXVsdHMgKi8KIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShjeDI0MTIzX3JlZ2RhdGEpOyBpKyspCi0JCWN4MjQxMjNfd3JpdGVyZWcoc3RhdGUsIGN4MjQxMjNfcmVnZGF0YVtpXS5yZWcsIGN4MjQxMjNfcmVnZGF0YVtpXS5kYXRhKTsKKwkJY3gyNDEyM193cml0ZXJlZyhzdGF0ZSwgY3gyNDEyM19yZWdkYXRhW2ldLnJlZywKKwkJCWN4MjQxMjNfcmVnZGF0YVtpXS5kYXRhKTsKIAogCS8qIFNldCB0aGUgTE5CIHBvbGFyaXR5ICovCi0JaWYoc3RhdGUtPmNvbmZpZy0+bG5iX3BvbGFyaXR5KQotCQljeDI0MTIzX3dyaXRlcmVnKHN0YXRlLCAweDMyLCBjeDI0MTIzX3JlYWRyZWcoc3RhdGUsIDB4MzIpIHwgMHgwMik7CisJaWYgKHN0YXRlLT5jb25maWctPmxuYl9wb2xhcml0eSkKKwkJY3gyNDEyM193cml0ZXJlZyhzdGF0ZSwgMHgzMiwKKwkJCWN4MjQxMjNfcmVhZHJlZyhzdGF0ZSwgMHgzMikgfCAweDAyKTsKIAogCWlmIChzdGF0ZS0+Y29uZmlnLT5kb250X3VzZV9wbGwpCi0JY3gyNDEyM19yZXBlYXRlcl9tb2RlKHN0YXRlLCAxLCAwKTsKKwkJY3gyNDEyM19yZXBlYXRlcl9tb2RlKHN0YXRlLCAxLCAwKTsKIAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGN4MjQxMjNfc2V0X3ZvbHRhZ2Uoc3RydWN0IGR2Yl9mcm9udGVuZCogZmUsIGZlX3NlY192b2x0YWdlX3Qgdm9sdGFnZSkKK3N0YXRpYyBpbnQgY3gyNDEyM19zZXRfdm9sdGFnZShzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwKKwlmZV9zZWNfdm9sdGFnZV90IHZvbHRhZ2UpCiB7CiAJc3RydWN0IGN4MjQxMjNfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CiAJdTggdmFsOwpAQCAtNzQwLDcgKzc2NCw3IEBACiB7CiAJdW5zaWduZWQgbG9uZyB0aW1lb3V0ID0gamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoMjAwKTsKIAl3aGlsZSAoIShjeDI0MTIzX3JlYWRyZWcoc3RhdGUsIDB4MjkpICYgMHg0MCkpIHsKLQkJaWYodGltZV9hZnRlcihqaWZmaWVzLCB0aW1lb3V0KSkgeworCQlpZiAodGltZV9hZnRlcihqaWZmaWVzLCB0aW1lb3V0KSkgewogCQkJZXJyKCIlczogZGlzZXFjIHF1ZXVlIG5vdCByZWFkeSwgIiBcCiAJCQkJImNvbW1hbmQgbWF5IGJlIGxvc3QuXG4iLCBfX2Z1bmNfXyk7CiAJCQlicmVhazsKQEAgLTc0OSw3ICs3NzMsOCBAQAogCX0KIH0KIAotc3RhdGljIGludCBjeDI0MTIzX3NlbmRfZGlzZXFjX21zZyhzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBmZSwgc3RydWN0IGR2Yl9kaXNlcWNfbWFzdGVyX2NtZCAqY21kKQorc3RhdGljIGludCBjeDI0MTIzX3NlbmRfZGlzZXFjX21zZyhzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwKKwlzdHJ1Y3QgZHZiX2Rpc2VxY19tYXN0ZXJfY21kICpjbWQpCiB7CiAJc3RydWN0IGN4MjQxMjNfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CiAJaW50IGksIHZhbCwgdG9uZTsKQEAgLTc3MSwyMCArNzk2LDIxIEBACiAJCWN4MjQxMjNfd3JpdGVyZWcoc3RhdGUsIDB4MkMgKyBpLCBjbWQtPm1zZ1tpXSk7CiAKIAl2YWwgPSBjeDI0MTIzX3JlYWRyZWcoc3RhdGUsIDB4MjkpOwotCWN4MjQxMjNfd3JpdGVyZWcoc3RhdGUsIDB4MjksICgodmFsICYgMHg5MCkgfCAweDQwKSB8ICgoY21kLT5tc2dfbGVuLTMpICYgMykpOworCWN4MjQxMjNfd3JpdGVyZWcoc3RhdGUsIDB4MjksICgodmFsICYgMHg5MCkgfCAweDQwKSB8CisJCSgoY21kLT5tc2dfbGVuLTMpICYgMykpOwogCiAJLyogd2FpdCBmb3IgZGlzZXFjIG1lc3NhZ2UgdG8gZmluaXNoIHNlbmRpbmcgKi8KIAljeDI0MTIzX3dhaXRfZm9yX2Rpc2VxYyhzdGF0ZSk7CiAKIAkvKiByZXN0YXJ0IGNvbnRpbnVvdXMgdG9uZSBpZiBlbmFibGVkICovCi0JaWYgKHRvbmUgJiAweDEwKSB7CisJaWYgKHRvbmUgJiAweDEwKQogCQljeDI0MTIzX3dyaXRlcmVnKHN0YXRlLCAweDI5LCB0b25lICYgfjB4NDApOwotCX0KIAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGN4MjQxMjNfZGlzZXFjX3NlbmRfYnVyc3Qoc3RydWN0IGR2Yl9mcm9udGVuZCogZmUsIGZlX3NlY19taW5pX2NtZF90IGJ1cnN0KQorc3RhdGljIGludCBjeDI0MTIzX2Rpc2VxY19zZW5kX2J1cnN0KHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLAorCWZlX3NlY19taW5pX2NtZF90IGJ1cnN0KQogewogCXN0cnVjdCBjeDI0MTIzX3N0YXRlICpzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OwogCWludCB2YWwsIHRvbmU7CkBAIC04MTQsMTMgKzg0MCwxMyBAQAogCWN4MjQxMjNfd3JpdGVyZWcoc3RhdGUsIDB4MmEsIGN4MjQxMjNfcmVhZHJlZyhzdGF0ZSwgMHgyYSkgJiAweGZiKTsKIAogCS8qIHJlc3RhcnQgY29udGludW91cyB0b25lIGlmIGVuYWJsZWQgKi8KLQlpZiAodG9uZSAmIDB4MTApIHsKKwlpZiAodG9uZSAmIDB4MTApCiAJCWN4MjQxMjNfd3JpdGVyZWcoc3RhdGUsIDB4MjksIHRvbmUgJiB+MHg0MCk7Ci0JfQorCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgY3gyNDEyM19yZWFkX3N0YXR1cyhzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBmZSwgZmVfc3RhdHVzX3QqIHN0YXR1cykKK3N0YXRpYyBpbnQgY3gyNDEyM19yZWFkX3N0YXR1cyhzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgZmVfc3RhdHVzX3QgKnN0YXR1cykKIHsKIAlzdHJ1Y3QgY3gyNDEyM19zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKIAlpbnQgc3luYyA9IGN4MjQxMjNfcmVhZHJlZyhzdGF0ZSwgMHgxNCk7CkBAIC04NTMsOCArODc5LDkgQEAKIH0KIAogLyoKLSAqIENvbmZpZ3VyZWQgdG8gcmV0dXJuIHRoZSBtZWFzdXJlbWVudCBvZiBlcnJvcnMgaW4gYmxvY2tzLCBiZWNhdXNlIG5vIFVDQkxPQ0tTIHZhbHVlCi0gKiBpcyBhdmFpbGFibGUsIHNvIHRoaXMgdmFsdWUgZG91YmxlcyB1cCB0byBzYXRpc2Z5IGJvdGggbWVhc3VyZW1lbnRzCisgKiBDb25maWd1cmVkIHRvIHJldHVybiB0aGUgbWVhc3VyZW1lbnQgb2YgZXJyb3JzIGluIGJsb2NrcywKKyAqIGJlY2F1c2Ugbm8gVUNCTE9DS1MgdmFsdWUgaXMgYXZhaWxhYmxlLCBzbyB0aGlzIHZhbHVlIGRvdWJsZXMgdXAKKyAqIHRvIHNhdGlzZnkgYm90aCBtZWFzdXJlbWVudHMuCiAgKi8KIHN0YXRpYyBpbnQgY3gyNDEyM19yZWFkX2JlcihzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgdTMyICpiZXIpCiB7CkBAIC04NzYsNyArOTAzLDggQEAKIHsKIAlzdHJ1Y3QgY3gyNDEyM19zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKIAotCSpzaWduYWxfc3RyZW5ndGggPSBjeDI0MTIzX3JlYWRyZWcoc3RhdGUsIDB4M2IpIDw8IDg7IC8qIGxhcmdlciA9IGJldHRlciAqLworCS8qIGxhcmdlciA9IGJldHRlciAqLworCSpzaWduYWxfc3RyZW5ndGggPSBjeDI0MTIzX3JlYWRyZWcoc3RhdGUsIDB4M2IpIDw8IDg7CiAKIAlkcHJpbnRrKCJTaWduYWwgc3RyZW5ndGggPSAlZFxuIiwgKnNpZ25hbF9zdHJlbmd0aCk7CiAKQEAgLTkwNyw3ICs5MzUsNyBAQAogCWlmIChzdGF0ZS0+Y29uZmlnLT5zZXRfdHNfcGFyYW1zKQogCQlzdGF0ZS0+Y29uZmlnLT5zZXRfdHNfcGFyYW1zKGZlLCAwKTsKIAotCXN0YXRlLT5jdXJyZW50ZnJlcT1wLT5mcmVxdWVuY3k7CisJc3RhdGUtPmN1cnJlbnRmcmVxID0gcC0+ZnJlcXVlbmN5OwogCXN0YXRlLT5jdXJyZW50c3ltYm9scmF0ZSA9IHAtPnUucXBzay5zeW1ib2xfcmF0ZTsKIAogCWN4MjQxMjNfc2V0X2ludmVyc2lvbihzdGF0ZSwgcC0+aW52ZXJzaW9uKTsKQEAgLTkzMiw3ICs5NjAsOCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGN4MjQxMjNfZ2V0X2Zyb250ZW5kKHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlLCBzdHJ1Y3QgZHZiX2Zyb250ZW5kX3BhcmFtZXRlcnMgKnApCitzdGF0aWMgaW50IGN4MjQxMjNfZ2V0X2Zyb250ZW5kKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLAorCXN0cnVjdCBkdmJfZnJvbnRlbmRfcGFyYW1ldGVycyAqcCkKIHsKIAlzdHJ1Y3QgY3gyNDEyM19zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKIApAQCAtOTUyLDcgKzk4MSw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgY3gyNDEyM19zZXRfdG9uZShzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBmZSwgZmVfc2VjX3RvbmVfbW9kZV90IHRvbmUpCitzdGF0aWMgaW50IGN4MjQxMjNfc2V0X3RvbmUoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIGZlX3NlY190b25lX21vZGVfdCB0b25lKQogewogCXN0cnVjdCBjeDI0MTIzX3N0YXRlICpzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OwogCXU4IHZhbDsKQEAgLTk3Nyw4ICsxMDA2LDggQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBjeDI0MTIzX3R1bmUoc3RydWN0IGR2Yl9mcm9udGVuZCogZmUsCi0JCQlzdHJ1Y3QgZHZiX2Zyb250ZW5kX3BhcmFtZXRlcnMqIHBhcmFtcywKK3N0YXRpYyBpbnQgY3gyNDEyM190dW5lKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLAorCQkJc3RydWN0IGR2Yl9mcm9udGVuZF9wYXJhbWV0ZXJzICpwYXJhbXMsCiAJCQl1bnNpZ25lZCBpbnQgbW9kZV9mbGFncywKIAkJCXVuc2lnbmVkIGludCAqZGVsYXksCiAJCQlmZV9zdGF0dXNfdCAqc3RhdHVzKQpAQCAtOTk3LDEyICsxMDI2LDEyIEBACiAKIHN0YXRpYyBpbnQgY3gyNDEyM19nZXRfYWxnbyhzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSkKIHsKLQlyZXR1cm4gMTsgLy9GRV9BTEdPX0hXCisJcmV0dXJuIDE7IC8qIEZFX0FMR09fSFcgKi8KIH0KIAotc3RhdGljIHZvaWQgY3gyNDEyM19yZWxlYXNlKHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlKQorc3RhdGljIHZvaWQgY3gyNDEyM19yZWxlYXNlKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlKQogewotCXN0cnVjdCBjeDI0MTIzX3N0YXRlKiBzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCXN0cnVjdCBjeDI0MTIzX3N0YXRlICpzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OwogCWRwcmludGsoIlxuIik7CiAJaTJjX2RlbF9hZGFwdGVyKCZzdGF0ZS0+dHVuZXJfaTJjX2FkYXB0ZXIpOwogCWtmcmVlKHN0YXRlKTsKQEAgLTEwMTMsNyArMTA0Miw3IEBACiB7CiAJc3RydWN0IGN4MjQxMjNfc3RhdGUgKnN0YXRlID0gaTJjX2dldF9hZGFwZGF0YShpMmNfYWRhcCk7CiAJLyogdGhpcyByZXBlYXRlciBjbG9zZXMgYWZ0ZXIgdGhlIGZpcnN0IHN0b3AgKi8KLSAgICBjeDI0MTIzX3JlcGVhdGVyX21vZGUoc3RhdGUsIDEsIDEpOworCWN4MjQxMjNfcmVwZWF0ZXJfbW9kZShzdGF0ZSwgMSwgMSk7CiAJcmV0dXJuIGkyY190cmFuc2ZlcihzdGF0ZS0+aTJjLCBtc2csIG51bSk7CiB9CiAKQEAgLTEwMzcsOCArMTA2Niw4IEBACiAKIHN0YXRpYyBzdHJ1Y3QgZHZiX2Zyb250ZW5kX29wcyBjeDI0MTIzX29wczsKIAotc3RydWN0IGR2Yl9mcm9udGVuZCogY3gyNDEyM19hdHRhY2goY29uc3Qgc3RydWN0IGN4MjQxMjNfY29uZmlnKiBjb25maWcsCi0JCQkJICAgIHN0cnVjdCBpMmNfYWRhcHRlciogaTJjKQorc3RydWN0IGR2Yl9mcm9udGVuZCAqY3gyNDEyM19hdHRhY2goY29uc3Qgc3RydWN0IGN4MjQxMjNfY29uZmlnICpjb25maWcsCisJCQkJICAgIHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjKQogewogCXN0cnVjdCBjeDI0MTIzX3N0YXRlICpzdGF0ZSA9CiAJCWt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBjeDI0MTIzX3N0YXRlKSwgR0ZQX0tFUk5FTCk7CkBAIC0xMDU3LDIwICsxMDg2LDI1IEBACiAJLyogY2hlY2sgaWYgdGhlIGRlbW9kIGlzIHRoZXJlICovCiAJc3RhdGUtPmRlbW9kX3JldiA9IGN4MjQxMjNfcmVhZHJlZyhzdGF0ZSwgMHgwMCk7CiAJc3dpdGNoIChzdGF0ZS0+ZGVtb2RfcmV2KSB7Ci0JY2FzZSAweGUxOiBpbmZvKCJkZXRlY3RlZCBDWDI0MTIzQ1xuIik7IGJyZWFrOwotCWNhc2UgMHhkMTogaW5mbygiZGV0ZWN0ZWQgQ1gyNDEyM1xuIik7IGJyZWFrOworCWNhc2UgMHhlMToKKwkJaW5mbygiZGV0ZWN0ZWQgQ1gyNDEyM0NcbiIpOworCQlicmVhazsKKwljYXNlIDB4ZDE6CisJCWluZm8oImRldGVjdGVkIENYMjQxMjNcbiIpOworCQlicmVhazsKIAlkZWZhdWx0OgogCQllcnIoIndyb25nIGRlbW9kIHJldmlzaW9uOiAleFxuIiwgc3RhdGUtPmRlbW9kX3Jldik7CiAJCWdvdG8gZXJyb3I7CiAJfQogCiAJLyogY3JlYXRlIGR2Yl9mcm9udGVuZCAqLwotCW1lbWNweSgmc3RhdGUtPmZyb250ZW5kLm9wcywgJmN4MjQxMjNfb3BzLCBzaXplb2Yoc3RydWN0IGR2Yl9mcm9udGVuZF9vcHMpKTsKKwltZW1jcHkoJnN0YXRlLT5mcm9udGVuZC5vcHMsICZjeDI0MTIzX29wcywKKwkJc2l6ZW9mKHN0cnVjdCBkdmJfZnJvbnRlbmRfb3BzKSk7CiAJc3RhdGUtPmZyb250ZW5kLmRlbW9kdWxhdG9yX3ByaXYgPSBzdGF0ZTsKIAotICAgIC8qIGNyZWF0ZSB0dW5lciBpMmMgYWRhcHRlciAqLwotICAgIGlmIChjb25maWctPmRvbnRfdXNlX3BsbCkKLQljeDI0MTIzX3JlcGVhdGVyX21vZGUoc3RhdGUsIDEsIDApOworCS8qIGNyZWF0ZSB0dW5lciBpMmMgYWRhcHRlciAqLworCWlmIChjb25maWctPmRvbnRfdXNlX3BsbCkKKwkJY3gyNDEyM19yZXBlYXRlcl9tb2RlKHN0YXRlLCAxLCAwKTsKIAogCXN0cmxjcHkoc3RhdGUtPnR1bmVyX2kyY19hZGFwdGVyLm5hbWUsICJDWDI0MTIzIHR1bmVyIEkyQyBidXMiLAogCQlzaXplb2Yoc3RhdGUtPnR1bmVyX2kyY19hZGFwdGVyLm5hbWUpKTsKQEAgLTEwNzksNyArMTExMyw3IEBACiAJc3RhdGUtPnR1bmVyX2kyY19hZGFwdGVyLmFsZ29fZGF0YSA9IE5VTEw7CiAJaTJjX3NldF9hZGFwZGF0YSgmc3RhdGUtPnR1bmVyX2kyY19hZGFwdGVyLCBzdGF0ZSk7CiAJaWYgKGkyY19hZGRfYWRhcHRlcigmc3RhdGUtPnR1bmVyX2kyY19hZGFwdGVyKSA8IDApIHsKLQllcnIoInR1bmVyIGkyYyBidXMgY291bGQgbm90IGJlIGluaXRpYWxpemVkXG4iKTsKKwkJZXJyKCJ0dW5lciBpMmMgYnVzIGNvdWxkIG5vdCBiZSBpbml0aWFsaXplZFxuIik7CiAJCWdvdG8gZXJyb3I7CiAJfQogCkBAIC0xMDkwLDYgKzExMjQsNyBAQAogCiAJcmV0dXJuIE5VTEw7CiB9CitFWFBPUlRfU1lNQk9MKGN4MjQxMjNfYXR0YWNoKTsKIAogc3RhdGljIHN0cnVjdCBkdmJfZnJvbnRlbmRfb3BzIGN4MjQxMjNfb3BzID0gewogCkBAIC0xMTI2LDE1ICsxMTYxLDggQEAKIAkuZ2V0X2Zyb250ZW5kX2FsZ28gPSBjeDI0MTIzX2dldF9hbGdvLAogfTsKIAotbW9kdWxlX3BhcmFtKGRlYnVnLCBpbnQsIDA2NDQpOwotTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgIkFjdGl2YXRlcyBmcm9udGVuZCBkZWJ1Z2dpbmcgKGRlZmF1bHQ6MCkiKTsKLQotbW9kdWxlX3BhcmFtKGZvcmNlX2JhbmQsIGludCwgMDY0NCk7Ci1NT0RVTEVfUEFSTV9ERVNDKGZvcmNlX2JhbmQsICJGb3JjZSBhIHNwZWNpZmljIGJhbmQgc2VsZWN0ICgxLTksIGRlZmF1bHQ6b2ZmKS4iKTsKLQogTU9EVUxFX0RFU0NSSVBUSU9OKCJEVkIgRnJvbnRlbmQgbW9kdWxlIGZvciBDb25leGFudCAiIFwKIAkiQ1gyNDEyMy9DWDI0MTA5L0NYMjQxMTMgaGFyZHdhcmUiKTsKIE1PRFVMRV9BVVRIT1IoIlN0ZXZlbiBUb3RoIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKLUVYUE9SVF9TWU1CT0woY3gyNDEyM19hdHRhY2gpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2N4MjQxMjMuaCBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9jeDI0MTIzLmgKaW5kZXggY2M2YjQxMS4uNTFhZTg2NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2N4MjQxMjMuaAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvY3gyNDEyMy5oCkBAIC0yMywxMyArMjMsMTIgQEAKIAogI2luY2x1ZGUgPGxpbnV4L2R2Yi9mcm9udGVuZC5oPgogCi1zdHJ1Y3QgY3gyNDEyM19jb25maWcKLXsKK3N0cnVjdCBjeDI0MTIzX2NvbmZpZyB7CiAJLyogdGhlIGRlbW9kdWxhdG9yJ3MgaTJjIGFkZHJlc3MgKi8KIAl1OCBkZW1vZF9hZGRyZXNzOwogCiAJLyogTmVlZCB0byBzZXQgZGV2aWNlIHBhcmFtIGZvciBzdGFydF9kbWEgKi8KLQlpbnQgKCpzZXRfdHNfcGFyYW1zKShzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBmZSwgaW50IGlzX3B1bmN0dXJlZCk7CisJaW50ICgqc2V0X3RzX3BhcmFtcykoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIGludCBpc19wdW5jdHVyZWQpOwogCiAJLyogMCA9IExOQiB2b2x0YWdlIG5vcm1hbCwgMSA9IExOQiB2b2x0YWdlIGludmVydGVkICovCiAJaW50IGxuYl9wb2xhcml0eTsKQEAgLTM5LDcgKzM4LDggQEAKIAl2b2lkICgqYWdjX2NhbGxiYWNrKSAoc3RydWN0IGR2Yl9mcm9udGVuZCAqKTsKIH07CiAKLSNpZiBkZWZpbmVkKENPTkZJR19EVkJfQ1gyNDEyMykgfHwgKGRlZmluZWQoQ09ORklHX0RWQl9DWDI0MTIzX01PRFVMRSkgJiYgZGVmaW5lZChNT0RVTEUpKQorI2lmIGRlZmluZWQoQ09ORklHX0RWQl9DWDI0MTIzKSB8fCAoZGVmaW5lZChDT05GSUdfRFZCX0NYMjQxMjNfTU9EVUxFKSBcCisJJiYgZGVmaW5lZChNT0RVTEUpKQogZXh0ZXJuIHN0cnVjdCBkdmJfZnJvbnRlbmQgKmN4MjQxMjNfYXR0YWNoKGNvbnN0IHN0cnVjdCBjeDI0MTIzX2NvbmZpZyAqY29uZmlnLAogCQkJCQkgICBzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyYyk7CiBleHRlcm4gc3RydWN0IGkyY19hZGFwdGVyICpjeDI0MTIzX2dldF90dW5lcl9pMmNfYWRhcHRlcihzdHJ1Y3QgZHZiX2Zyb250ZW5kICopOwpAQCAtNTYsNiArNTYsNiBAQAogCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBkcml2ZXIgZGlzYWJsZWQgYnkgS2NvbmZpZ1xuIiwgX19mdW5jX18pOwogCXJldHVybiBOVUxMOwogfQotI2VuZGlmIC8vIENPTkZJR19EVkJfQ1gyNDEyMworI2VuZGlmCiAKICNlbmRpZiAvKiBDWDI0MTIzX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9kaWIwMDcwLmggYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvZGliMDA3MC5oCmluZGV4IDNlZWRmZGYuLjIxZjJjNTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9kaWIwMDcwLmgKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2RpYjAwNzAuaApAQCAtNDEsNiArNDEsNyBAQAogZXh0ZXJuIHN0cnVjdCBkdmJfZnJvbnRlbmQgKmRpYjAwNzBfYXR0YWNoKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLAogCQkJCQkgICBzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyYywKIAkJCQkJICAgc3RydWN0IGRpYjAwNzBfY29uZmlnICpjZmcpOworZXh0ZXJuIHUxNiBkaWIwMDcwX3diZF9vZmZzZXQoc3RydWN0IGR2Yl9mcm9udGVuZCAqKTsKICNlbHNlCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBkdmJfZnJvbnRlbmQgKmRpYjAwNzBfYXR0YWNoKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLAogCQkJCQkJICBzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyYywKQEAgLTQ5LDkgKzUwLDE0IEBACiAJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IGRyaXZlciBkaXNhYmxlZCBieSBLY29uZmlnXG4iLCBfX2Z1bmNfXyk7CiAJcmV0dXJuIE5VTEw7CiB9CisKK3N0YXRpYyBpbmxpbmUgdTE2IGRpYjAwNzBfd2JkX29mZnNldChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSkKK3sKKwlwcmludGsoS0VSTl9XQVJOSU5HICIlczogZHJpdmVyIGRpc2FibGVkIGJ5IEtjb25maWdcbiIsIF9fZnVuY19fKTsKKwlyZXR1cm4gLUVOT0RFVjsKK30KICNlbmRpZgogCiBleHRlcm4gdm9pZCBkaWIwMDcwX2N0cmxfYWdjX2ZpbHRlcihzdHJ1Y3QgZHZiX2Zyb250ZW5kICosIHVpbnQ4X3Qgb3Blbik7Ci1leHRlcm4gdTE2IGRpYjAwNzBfd2JkX29mZnNldChzdHJ1Y3QgZHZiX2Zyb250ZW5kICopOwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9kaWI3MDAwbS5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2RpYjcwMDBtLmMKaW5kZXggNWYxMzc1ZS4uMDEwOTcyMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2RpYjcwMDBtLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2RpYjcwMDBtLmMKQEAgLTEyODQsNyArMTI4NCwxMCBAQAogfQogRVhQT1JUX1NZTUJPTChkaWI3MDAwbV9nZXRfaTJjX21hc3Rlcik7CiAKLWludCBkaWI3MDAwbV9pMmNfZW51bWVyYXRpb24oc3RydWN0IGkyY19hZGFwdGVyICppMmMsIGludCBub19vZl9kZW1vZHMsIHU4IGRlZmF1bHRfYWRkciwgc3RydWN0IGRpYjcwMDBtX2NvbmZpZyBjZmdbXSkKKyNpZiAwCisvKiB1c2VkIHdpdGggc29tZSBwcm90b3R5cGUgYm9hcmRzICovCitpbnQgZGliNzAwMG1faTJjX2VudW1lcmF0aW9uKHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjLCBpbnQgbm9fb2ZfZGVtb2RzLAorCQl1OCBkZWZhdWx0X2FkZHIsIHN0cnVjdCBkaWI3MDAwbV9jb25maWcgY2ZnW10pCiB7CiAJc3RydWN0IGRpYjcwMDBtX3N0YXRlIHN0ID0geyAuaTJjX2FkYXAgPSBpMmMgfTsKIAlpbnQgayA9IDA7CkBAIC0xMzI5LDYgKzEzMzIsNyBAQAogCXJldHVybiAwOwogfQogRVhQT1JUX1NZTUJPTChkaWI3MDAwbV9pMmNfZW51bWVyYXRpb24pOworI2VuZGlmCiAKIHN0YXRpYyBzdHJ1Y3QgZHZiX2Zyb250ZW5kX29wcyBkaWI3MDAwbV9vcHM7CiBzdHJ1Y3QgZHZiX2Zyb250ZW5kICogZGliNzAwMG1fYXR0YWNoKHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjX2FkYXAsIHU4IGkyY19hZGRyLCBzdHJ1Y3QgZGliNzAwMG1fY29uZmlnICpjZmcpCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvZGliNzAwMHAuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9kaWI3MDAwcC5jCmluZGV4IDFhMDE0MmUuLjgyMTdlNWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9kaWI3MDAwcC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9kaWI3MDAwcC5jCkBAIC0xMzMzLDcgKzEzMzMsOCBAQAogCS8qIEVuc3VyZSB0aGUgb3V0cHV0IG1vZGUgcmVtYWlucyBhdCB0aGUgcHJldmlvdXMgZGVmYXVsdCBpZiBpdCdzCiAJICogbm90IHNwZWNpZmljYWxseSBzZXQgYnkgdGhlIGNhbGxlci4KIAkgKi8KLQlpZiAoc3QtPmNmZy5vdXRwdXRfbW9kZSAhPSBPVVRNT0RFX01QRUcyX1NFUklBTCkKKwlpZiAoKHN0LT5jZmcub3V0cHV0X21vZGUgIT0gT1VUTU9ERV9NUEVHMl9TRVJJQUwpICYmCisJICAgIChzdC0+Y2ZnLm91dHB1dF9tb2RlICE9IE9VVE1PREVfTVBFRzJfUEFSX0dBVEVEX0NMSykpCiAJCXN0LT5jZmcub3V0cHV0X21vZGUgPSBPVVRNT0RFX01QRUcyX0ZJRk87CiAKIAlkZW1vZCAgICAgICAgICAgICAgICAgICA9ICZzdC0+ZGVtb2Q7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvZGliNzAwMHAuaCBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9kaWI3MDAwcC5oCmluZGV4IDA3YzRkMTIuLjNlODEyNjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9kaWI3MDAwcC5oCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9kaWI3MDAwcC5oCkBAIC00MSw2ICs0MSwxNCBAQAogZXh0ZXJuIHN0cnVjdCBkdmJfZnJvbnRlbmQgKmRpYjcwMDBwX2F0dGFjaChzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyY19hZGFwLAogCQkJCQkgICAgdTggaTJjX2FkZHIsCiAJCQkJCSAgICBzdHJ1Y3QgZGliNzAwMHBfY29uZmlnICpjZmcpOworZXh0ZXJuIHN0cnVjdCBpMmNfYWRhcHRlciAqZGliNzAwMHBfZ2V0X2kyY19tYXN0ZXIoc3RydWN0IGR2Yl9mcm9udGVuZCAqLAorCQkJCQkJICAgZW51bSBkaWJ4MDAwX2kyY19pbnRlcmZhY2UsCisJCQkJCQkgICBpbnQpOworZXh0ZXJuIGludCBkaWI3MDAwcF9pMmNfZW51bWVyYXRpb24oc3RydWN0IGkyY19hZGFwdGVyICppMmMsCisJCQkJICAgIGludCBub19vZl9kZW1vZHMsIHU4IGRlZmF1bHRfYWRkciwKKwkJCQkgICAgc3RydWN0IGRpYjcwMDBwX2NvbmZpZyBjZmdbXSk7CitleHRlcm4gaW50IGRpYjcwMDBwX3NldF9ncGlvKHN0cnVjdCBkdmJfZnJvbnRlbmQgKiwgdTggbnVtLCB1OCBkaXIsIHU4IHZhbCk7CitleHRlcm4gaW50IGRpYjcwMDBwX3NldF93YmRfcmVmKHN0cnVjdCBkdmJfZnJvbnRlbmQgKiwgdTE2IHZhbHVlKTsKICNlbHNlCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBkdmJfZnJvbnRlbmQgKmRpYjcwMDBwX2F0dGFjaChzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyY19hZGFwLAogCQkJCQkJICAgdTggaTJjX2FkZHIsCkBAIC00OSwxMyArNTcsMzYgQEAKIAlwcmludGsoS0VSTl9XQVJOSU5HICIlczogZHJpdmVyIGRpc2FibGVkIGJ5IEtjb25maWdcbiIsIF9fZnVuY19fKTsKIAlyZXR1cm4gTlVMTDsKIH0KKworc3RhdGljIGlubGluZQorc3RydWN0IGkyY19hZGFwdGVyICpkaWI3MDAwcF9nZXRfaTJjX21hc3RlcihzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwKKwkJCQkJICAgIGVudW0gZGlieDAwMF9pMmNfaW50ZXJmYWNlIGksIGludCB4KQoreworCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBkcml2ZXIgZGlzYWJsZWQgYnkgS2NvbmZpZ1xuIiwgX19mdW5jX18pOworCXJldHVybiBOVUxMOworfQorCitleHRlcm4gaW50IGRpYjcwMDBwX2kyY19lbnVtZXJhdGlvbihzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyYywKKwkJCQkgICAgaW50IG5vX29mX2RlbW9kcywgdTggZGVmYXVsdF9hZGRyLAorCQkJCSAgICBzdHJ1Y3QgZGliNzAwMHBfY29uZmlnIGNmZ1tdKQoreworCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBkcml2ZXIgZGlzYWJsZWQgYnkgS2NvbmZpZ1xuIiwgX19mdW5jX18pOworCXJldHVybiAtRU5PREVWOworfQorCitleHRlcm4gaW50IGRpYjcwMDBwX3NldF9ncGlvKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCB1OCBudW0sIHU4IGRpciwgdTggdmFsKQoreworCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBkcml2ZXIgZGlzYWJsZWQgYnkgS2NvbmZpZ1xuIiwgX19mdW5jX18pOworCXJldHVybiAtRU5PREVWOworfQorCitleHRlcm4gaW50IGRpYjcwMDBwX3NldF93YmRfcmVmKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCB1MTYgdmFsdWUpCit7CisJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IGRyaXZlciBkaXNhYmxlZCBieSBLY29uZmlnXG4iLCBfX2Z1bmNfXyk7CisJcmV0dXJuIC1FTk9ERVY7Cit9CiAjZW5kaWYKIAotZXh0ZXJuIGludCBkaWI3MDAwcF9pMmNfZW51bWVyYXRpb24oc3RydWN0IGkyY19hZGFwdGVyICppMmMsIGludCBub19vZl9kZW1vZHMsIHU4IGRlZmF1bHRfYWRkciwgc3RydWN0IGRpYjcwMDBwX2NvbmZpZyBjZmdbXSk7Ci0KLWV4dGVybiBzdHJ1Y3QgaTJjX2FkYXB0ZXIgKiBkaWI3MDAwcF9nZXRfaTJjX21hc3RlcihzdHJ1Y3QgZHZiX2Zyb250ZW5kICosIGVudW0gZGlieDAwMF9pMmNfaW50ZXJmYWNlLCBpbnQpOwogZXh0ZXJuIGludCBkaWI3MDAwcGNfZGV0ZWN0aW9uKHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjX2FkYXApOwotZXh0ZXJuIGludCBkaWI3MDAwcF9zZXRfZ3BpbyhzdHJ1Y3QgZHZiX2Zyb250ZW5kICosIHU4IG51bSwgdTggZGlyLCB1OCB2YWwpOwotZXh0ZXJuIGludCBkaWI3MDAwcF9zZXRfd2JkX3JlZihzdHJ1Y3QgZHZiX2Zyb250ZW5kICosIHUxNiB2YWx1ZSk7CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2RyeDM5N3hELmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvZHJ4Mzk3eEQuYwppbmRleCAzY2JlZDg3Li5iOWNhNWM4IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvZHJ4Mzk3eEQuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvZHJ4Mzk3eEQuYwpAQCAtMzgsMzUgKzM4LDMyIEBACiAjZGVmaW5lIEZfU0VUXzBEMGgJMQogI2RlZmluZSBGX1NFVF8wRDRoCTIKIAotdHlwZWRlZiBlbnVtIGZ3X2l4IHsKK2VudW0gZndfaXggewogI2RlZmluZSBfRldfRU5UUlkoYSwgYikJCWIKICNpbmNsdWRlICJkcngzOTd4RF9mdy5oIgotfSBmd19peF90OworfTsKIAogLyogY2hpcCBzcGVjaWZpY3MgKi8KIHN0cnVjdCBkcngzOTd4RF9zdGF0ZSB7CiAJc3RydWN0IGkyY19hZGFwdGVyICppMmM7CiAJc3RydWN0IGR2Yl9mcm9udGVuZCBmcm9udGVuZDsKIAlzdHJ1Y3QgZHJ4Mzk3eERfY29uZmlnIGNvbmZpZzsKLQlmd19peF90IGNoaXBfcmV2OworCWVudW0gZndfaXggY2hpcF9yZXY7CiAJaW50IGZsYWdzOwogCXUzMiBiYW5kd2lkdGhfcGFybTsJLyogaW50ZXJuYWwgYmFuZHdpZHRoIGNvbnZlcnNpb25zICovCiAJdTMyIGZfb3NjOwkJLyogdzkwOiBhY3R1YWwgb3NjIGZyZXF1ZW5jeSBbSHpdICovCiB9OwogCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogRmlybXdhcmUKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KKy8qIEZpcm13YXJlICovCiBzdGF0aWMgY29uc3QgY2hhciAqYmxvYl9uYW1lW10gPSB7CiAjZGVmaW5lIF9CTE9CX0VOVFJZKGEsIGIpCQlhCiAjaW5jbHVkZSAiZHJ4Mzk3eERfZncuaCIKIH07CiAKLXR5cGVkZWYgZW51bSBibG9iX2l4IHsKK2VudW0gYmxvYl9peCB7CiAjZGVmaW5lIF9CTE9CX0VOVFJZKGEsIGIpCQliCiAjaW5jbHVkZSAiZHJ4Mzk3eERfZncuaCIKLX0gYmxvYl9peF90OworfTsKIAogc3RhdGljIHN0cnVjdCB7CiAJY29uc3QgY2hhciAqbmFtZTsKQEAgLTg1LDcgKzgyLDcgQEAKIH07CiAKIC8qIHVzZSBvbmx5IHdpdGggd3JpdGVyIGxvY2sgYXF1aXJlZCAqLwotc3RhdGljIHZvaWQgX2RyeF9yZWxlYXNlX2Z3KHN0cnVjdCBkcngzOTd4RF9zdGF0ZSAqcywgZndfaXhfdCBpeCkKK3N0YXRpYyB2b2lkIF9kcnhfcmVsZWFzZV9mdyhzdHJ1Y3QgZHJ4Mzk3eERfc3RhdGUgKnMsIGVudW0gZndfaXggaXgpCiB7CiAJbWVtc2V0KCZmd1tpeF0uZGF0YVswXSwgMCwgc2l6ZW9mKGZ3WzBdLmRhdGEpKTsKIAlpZiAoZndbaXhdLmZpbGUpCkBAIC05NCw5ICs5MSw5IEBACiAKIHN0YXRpYyB2b2lkIGRyeF9yZWxlYXNlX2Z3KHN0cnVjdCBkcngzOTd4RF9zdGF0ZSAqcykKIHsKLQlmd19peF90IGl4ID0gcy0+Y2hpcF9yZXY7CisJZW51bSBmd19peCBpeCA9IHMtPmNoaXBfcmV2OwogCi0JcHJfZGVidWcoIiVzXG4iLCBfX0ZVTkNUSU9OX18pOworCXByX2RlYnVnKCIlc1xuIiwgX19mdW5jX18pOwogCiAJd3JpdGVfbG9jaygmZndbaXhdLmxvY2spOwogCWlmIChmd1tpeF0ucmVmY250KSB7CkBAIC0xMDcsMTMgKzEwNCwxMyBAQAogCXdyaXRlX3VubG9jaygmZndbaXhdLmxvY2spOwogfQogCi1zdGF0aWMgaW50IGRyeF9sb2FkX2Z3KHN0cnVjdCBkcngzOTd4RF9zdGF0ZSAqcywgZndfaXhfdCBpeCkKK3N0YXRpYyBpbnQgZHJ4X2xvYWRfZncoc3RydWN0IGRyeDM5N3hEX3N0YXRlICpzLCBlbnVtIGZ3X2l4IGl4KQogewogCWNvbnN0IHU4ICpkYXRhOwogCXNpemVfdCBzaXplLCBsZW47CiAJaW50IGkgPSAwLCBqLCByYyA9IC1FSU5WQUw7CiAKLQlwcl9kZWJ1ZygiJXNcbiIsIF9fRlVOQ1RJT05fXyk7CisJcHJfZGVidWcoIiVzXG4iLCBfX2Z1bmNfXyk7CiAKIAlpZiAoaXggPCAwIHx8IGl4ID49IEFSUkFZX1NJWkUoZncpKQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTE3NSwzMiArMTcyLDM0IEBACiAJCQlnb3RvIGV4aXRfY29ycnVwdDsKIAkJfQogCX0gd2hpbGUgKGkgPCBzaXplKTsKLSAgICAgIGV4aXRfY29ycnVwdDoKKworZXhpdF9jb3JydXB0OgogCXByaW50ayhLRVJOX0VSUiAiJXM6IEZpcm13YXJlIGlzIGNvcnJ1cHRcbiIsIG1vZF9uYW1lKTsKLSAgICAgIGV4aXRfZXJyOgorZXhpdF9lcnI6CiAJX2RyeF9yZWxlYXNlX2Z3KHMsIGl4KTsKIAlmd1tpeF0ucmVmY250LS07Ci0gICAgICBleGl0X29rOgorZXhpdF9vazoKIAlmd1tpeF0ucmVmY250Kys7CiAJd3JpdGVfdW5sb2NrKCZmd1tpeF0ubG9jayk7CisKIAlyZXR1cm4gcmM7CiB9CiAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBpMmMgYnVzIElPCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1zdGF0aWMgaW50IHdyaXRlX2Z3KHN0cnVjdCBkcngzOTd4RF9zdGF0ZSAqcywgYmxvYl9peF90IGl4KQorLyogaTJjIGJ1cyBJTyAqLworc3RhdGljIGludCB3cml0ZV9mdyhzdHJ1Y3QgZHJ4Mzk3eERfc3RhdGUgKnMsIGVudW0gYmxvYl9peCBpeCkKIHsKLQlzdHJ1Y3QgaTJjX21zZyBtc2cgPSB7LmFkZHIgPSBzLT5jb25maWcuZGVtb2RfYWRkcmVzcywuZmxhZ3MgPSAwIH07CiAJY29uc3QgdTggKmRhdGE7CiAJaW50IGxlbiwgcmMgPSAwLCBpID0gMDsKKwlzdHJ1Y3QgaTJjX21zZyBtc2cgPSB7CisJCS5hZGRyID0gcy0+Y29uZmlnLmRlbW9kX2FkZHJlc3MsCisJCS5mbGFncyA9IDAKKwl9OwogCiAJaWYgKGl4IDwgMCB8fCBpeCA+PSBBUlJBWV9TSVpFKGJsb2JfbmFtZSkpIHsKLQkJcHJfZGVidWcoIiVzIGRyeF9md19peF90IG91dCBvZiByYW5nZVxuIiwgX19GVU5DVElPTl9fKTsKKwkJcHJfZGVidWcoIiVzIGRyeF9md19peF90IG91dCBvZiByYW5nZVxuIiwgX19mdW5jX18pOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9Ci0JcHJfZGVidWcoIiVzICVzXG4iLCBfX0ZVTkNUSU9OX18sIGJsb2JfbmFtZVtpeF0pOworCXByX2RlYnVnKCIlcyAlc1xuIiwgX19mdW5jX18sIGJsb2JfbmFtZVtpeF0pOwogCiAJcmVhZF9sb2NrKCZmd1tzLT5jaGlwX3Jldl0ubG9jayk7CiAJZGF0YSA9IGZ3W3MtPmNoaXBfcmV2XS5kYXRhW2l4XTsKQEAgLTIyOSwzMyArMjI4LDMzIEBACiAJCQlnb3RvIGV4aXRfcmM7CiAJCX0KIAl9Ci0gICAgICBleGl0X3JjOgorZXhpdF9yYzoKIAlyZWFkX3VubG9jaygmZndbcy0+Y2hpcF9yZXZdLmxvY2spOworCiAJcmV0dXJuIDA7CiB9CiAKIC8qIEZ1bmN0aW9uIGlzIG5vdCBlbmRpYW4gc2FmZSwgdXNlIHRoZSBSRDE2IHdyYXBwZXIgYmVsb3cgKi8KLXN0YXRpYyBpbnQgX3JlYWQxNihzdHJ1Y3QgZHJ4Mzk3eERfc3RhdGUgKnMsIHUzMiBpMmNfYWRyKQorc3RhdGljIGludCBfcmVhZDE2KHN0cnVjdCBkcngzOTd4RF9zdGF0ZSAqcywgX19sZTMyIGkyY19hZHIpCiB7CiAJaW50IHJjOwogCXU4IGFbNF07Ci0JdTE2IHY7CisJX19sZTE2IHY7CiAJc3RydWN0IGkyY19tc2cgbXNnWzJdID0gewogCQl7Ci0JCSAuYWRkciA9IHMtPmNvbmZpZy5kZW1vZF9hZGRyZXNzLAotCQkgLmZsYWdzID0gMCwKLQkJIC5idWYgPSBhLAotCQkgLmxlbiA9IHNpemVvZihhKQotCQkgfQotCQksIHsKLQkJICAgLmFkZHIgPSBzLT5jb25maWcuZGVtb2RfYWRkcmVzcywKLQkJICAgLmZsYWdzID0gSTJDX01fUkQsCi0JCSAgIC5idWYgPSAodTggKikgJiB2LAotCQkgICAubGVuID0gc2l6ZW9mKHYpCi0JCSAgIH0KKwkJCS5hZGRyID0gcy0+Y29uZmlnLmRlbW9kX2FkZHJlc3MsCisJCQkuZmxhZ3MgPSAwLAorCQkJLmJ1ZiA9IGEsCisJCQkubGVuID0gc2l6ZW9mKGEpCisJCX0sIHsKKwkJCS5hZGRyID0gcy0+Y29uZmlnLmRlbW9kX2FkZHJlc3MsCisJCQkuZmxhZ3MgPSBJMkNfTV9SRCwKKwkJCS5idWYgPSAodTggKikmdiwKKwkJCS5sZW4gPSBzaXplb2YodikKKwkJfQogCX07CiAKLQkqKHUzMiAqKSBhID0gaTJjX2FkcjsKKwkqKF9fbGUzMiAqKSBhID0gaTJjX2FkcjsKIAogCXJjID0gaTJjX3RyYW5zZmVyKHMtPmkyYywgbXNnLCAyKTsKIAlpZiAocmMgIT0gMikKQEAgLTI2NSw3ICsyNjQsNyBAQAogfQogCiAvKiBGdW5jdGlvbiBpcyBub3QgZW5kaWFuIHNhZmUsIHVzZSB0aGUgV1IxNi4uIHdyYXBwZXJzIGJlbG93ICovCi1zdGF0aWMgaW50IF93cml0ZTE2KHN0cnVjdCBkcngzOTd4RF9zdGF0ZSAqcywgdTMyIGkyY19hZHIsIHUxNiB2YWwpCitzdGF0aWMgaW50IF93cml0ZTE2KHN0cnVjdCBkcngzOTd4RF9zdGF0ZSAqcywgX19sZTMyIGkyY19hZHIsIF9fbGUxNiB2YWwpCiB7CiAJdTggYVs2XTsKIAlpbnQgcmM7CkBAIC0yNzYsMjggKzI3NSwyOCBAQAogCQkubGVuID0gc2l6ZW9mKGEpCiAJfTsKIAotCSoodTMyICopIGEgPSBpMmNfYWRyOwotCSoodTE2ICopICYgYVs0XSA9IHZhbDsKKwkqKF9fbGUzMiAqKWEgPSBpMmNfYWRyOworCSooX19sZTE2ICopJmFbNF0gPSB2YWw7CiAKIAlyYyA9IGkyY190cmFuc2ZlcihzLT5pMmMsICZtc2csIDEpOwogCWlmIChyYyAhPSAxKQogCQlyZXR1cm4gLUVJTzsKKwogCXJldHVybiAwOwogfQogCi0jZGVmaW5lIFdSMTYoc3MsYWRyLCB2YWwpIFwKKyNkZWZpbmUgV1IxNihzcywgYWRyLCB2YWwpIFwKIAkJX3dyaXRlMTYoc3MsIEkyQ19BRFJfQzAoYWRyKSwgY3B1X3RvX2xlMTYodmFsKSkKLSNkZWZpbmUgV1IxNl9FMChzcyxhZHIsIHZhbCkgXAorI2RlZmluZSBXUjE2X0UwKHNzLCBhZHIsIHZhbCkgXAogCQlfd3JpdGUxNihzcywgSTJDX0FEUl9FMChhZHIpLCBjcHVfdG9fbGUxNih2YWwpKQotI2RlZmluZSBSRDE2KHNzLGFkcikgXAorI2RlZmluZSBSRDE2KHNzLCBhZHIpIFwKIAkJX3JlYWQxNihzcywgSTJDX0FEUl9DMChhZHIpKQogCi0jZGVmaW5lIEVYSVRfUkMoIGNtZCApCWlmICggKHJjID0gKGNtZCkpIDwgMCkgZ290byBleGl0X3JjCisjZGVmaW5lIEVYSVRfUkMoY21kKQlcCisJaWYgKChyYyA9IChjbWQpKSA8IDApCVwKKwkJZ290byBleGl0X3JjCiAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBUdW5lciBjYWxsYmFjawotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQorLyogVHVuZXIgY2FsbGJhY2sgKi8KIHN0YXRpYyBpbnQgUExMX1NldChzdHJ1Y3QgZHJ4Mzk3eERfc3RhdGUgKnMsCiAJCSAgIHN0cnVjdCBkdmJfZnJvbnRlbmRfcGFyYW1ldGVycyAqZmVwLCBpbnQgKmRmX3R1bmVyKQogewpAQCAtMzA1LDcgKzMwNCw3IEBACiAJdTMyIGZfdHVuZXIsIGYgPSBmZXAtPmZyZXF1ZW5jeTsKIAlpbnQgcmM7CiAKLQlwcl9kZWJ1ZygiJXNcbiIsIF9fRlVOQ1RJT05fXyk7CisJcHJfZGVidWcoIiVzXG4iLCBfX2Z1bmNfXyk7CiAKIAlpZiAoKGYgPiBzLT5mcm9udGVuZC5vcHMudHVuZXJfb3BzLmluZm8uZnJlcXVlbmN5X21heCkgfHwKIAkgICAgKGYgPCBzLT5mcm9udGVuZC5vcHMudHVuZXJfb3BzLmluZm8uZnJlcXVlbmN5X21pbikpCkBAIC0zMjUsMjggKzMyNCwyNiBAQAogCQlyZXR1cm4gcmM7CiAKIAkqZGZfdHVuZXIgPSBmX3R1bmVyIC0gZjsKLQlwcl9kZWJ1ZygiJXMgcmVxdWVzdGVkICVkIFtIel0gdHVuZXIgJWQgW0h6XVxuIiwgX19GVU5DVElPTl9fLCBmLAorCXByX2RlYnVnKCIlcyByZXF1ZXN0ZWQgJWQgW0h6XSB0dW5lciAlZCBbSHpdXG4iLCBfX2Z1bmNfXywgZiwKIAkJIGZfdHVuZXIpOwogCiAJcmV0dXJuIDA7CiB9CiAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBEZW1vZHVsYXRvciBoZWxwZXIgZnVuY3Rpb25zCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCisvKiBEZW1vZHVsYXRvciBoZWxwZXIgZnVuY3Rpb25zICovCiBzdGF0aWMgaW50IFNDX1dhaXRGb3JSZWFkeShzdHJ1Y3QgZHJ4Mzk3eERfc3RhdGUgKnMpCiB7CiAJaW50IGNudCA9IDEwMDA7CiAJaW50IHJjOwogCi0JcHJfZGVidWcoIiVzXG4iLCBfX0ZVTkNUSU9OX18pOworCXByX2RlYnVnKCIlc1xuIiwgX19mdW5jX18pOwogCiAJd2hpbGUgKGNudC0tKSB7CiAJCXJjID0gUkQxNihzLCAweDgyMDA0Myk7CiAJCWlmIChyYyA9PSAwKQogCQkJcmV0dXJuIDA7CiAJfQorCiAJcmV0dXJuIC0xOwogfQogCkBAIC0zNTQsMTMgKzM1MSwxNCBAQAogewogCWludCByYzsKIAotCXByX2RlYnVnKCIlc1xuIiwgX19GVU5DVElPTl9fKTsKKwlwcl9kZWJ1ZygiJXNcbiIsIF9fZnVuY19fKTsKIAogCVdSMTYocywgMHg4MjAwNDMsIGNtZCk7CiAJU0NfV2FpdEZvclJlYWR5KHMpOwogCXJjID0gUkQxNihzLCAweDgyMDA0Mik7CiAJaWYgKChyYyAmIDB4ZmZmZikgPT0gMHhmZmZmKQogCQlyZXR1cm4gLTE7CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtMzY4LDcgKzM2Niw3IEBACiB7CiAJaW50IHJjLCBjbnQgPSAxMDAwOwogCi0JcHJfZGVidWcoIiVzXG4iLCBfX0ZVTkNUSU9OX18pOworCXByX2RlYnVnKCIlc1xuIiwgX19mdW5jX18pOwogCiAJcmMgPSBXUjE2KHMsIDB4NDIwMDMyLCBjbWQpOwogCWlmIChyYyA8IDApCkBAIC0zODMsMjIgKzM4MSwyNCBAQAogCQlpZiAocmMgPCAwKQogCQkJcmV0dXJuIHJjOwogCX0gd2hpbGUgKC0tY250KTsKKwogCXJldHVybiByYzsKIH0KIAogc3RhdGljIGludCBISV9DZmdDb21tYW5kKHN0cnVjdCBkcngzOTd4RF9zdGF0ZSAqcykKIHsKIAotCXByX2RlYnVnKCIlc1xuIiwgX19GVU5DVElPTl9fKTsKKwlwcl9kZWJ1ZygiJXNcbiIsIF9fZnVuY19fKTsKIAogCVdSMTYocywgMHg0MjAwMzMsIDB4Mzk3Myk7Ci0JV1IxNihzLCAweDQyMDAzNCwgcy0+Y29uZmlnLnc1MCk7CS8vIGNvZGUgNCwgbG9nIDQKLQlXUjE2KHMsIDB4NDIwMDM1LCBzLT5jb25maWcudzUyKTsJLy8gY29kZSAxNSwgIGxvZyA5CisJV1IxNihzLCAweDQyMDAzNCwgcy0+Y29uZmlnLnc1MCk7CS8qIGNvZGUgNCwgbG9nIDQgKi8KKwlXUjE2KHMsIDB4NDIwMDM1LCBzLT5jb25maWcudzUyKTsJLyogY29kZSAxNSwgIGxvZyA5ICovCiAJV1IxNihzLCAweDQyMDAzNiwgcy0+Y29uZmlnLmRlbW9kX2FkZHJlc3MgPDwgMSk7Ci0JV1IxNihzLCAweDQyMDAzNywgcy0+Y29uZmlnLnc1Nik7CS8vIGNvZGUgKHNldF9pMmMgPz8gIGluaXRYIDEgKSwgbG9nIDEKLS8vICAgICAgV1IxNihzLCAweDQyMDAzMywgMHgzOTczKTsKKwlXUjE2KHMsIDB4NDIwMDM3LCBzLT5jb25maWcudzU2KTsJLyogY29kZSAoc2V0X2kyYyA/PyAgaW5pdFggMSApLCBsb2cgMSAqLworCS8qIFdSMTYocywgMHg0MjAwMzMsIDB4Mzk3Myk7ICovCiAJaWYgKChzLT5jb25maWcudzU2ICYgOCkgPT0gMCkKIAkJcmV0dXJuIEhJX0NvbW1hbmQocywgMyk7CisKIAlyZXR1cm4gV1IxNihzLCAweDQyMDAzMiwgMHgzKTsKIH0KIApAQCAtNDE5LDcgKzQxOSw3IEBACiAJdTE2IHcwQyA9IGFnYy0+dzBDOwogCWludCBxdW90LCByZW0sIGksIHJjID0gLUVJTlZBTDsKIAotCXByX2RlYnVnKCIlc1xuIiwgX19GVU5DVElPTl9fKTsKKwlwcl9kZWJ1ZygiJXNcbiIsIF9fZnVuY19fKTsKIAogCWlmIChhZ2MtPncwNCA+IDB4M2ZmKQogCQlnb3RvIGV4aXRfcmM7CkBAIC00NjgsNyArNDY4LDcgQEAKIAlpID0gc2xvd0luY3JEZWNMVVRfMTUyNzJbcmVtIC8gMjhdOwogCUVYSVRfUkMoV1IxNihzLCAweDBjMjAwMmIsIGkpKTsKIAlyYyA9IFdSMTYocywgMHgwYzIwMDJjLCBpKTsKLSAgICAgIGV4aXRfcmM6CitleGl0X3JjOgogCXJldHVybiByYzsKIH0KIApAQCAtNDc4LDcgKzQ3OCw3IEBACiAJdTE2IHcwNiA9IGFnYy0+dzA2OwogCWludCByYyA9IC0xOwogCi0JcHJfZGVidWcoIiVzICVkIDB4JXggMHgleFxuIiwgX19GVU5DVElPTl9fLCBhZ2MtPmQwMCwgdzA0LCB3MDYpOworCXByX2RlYnVnKCIlcyAlZCAweCV4IDB4JXhcbiIsIF9fZnVuY19fLCBhZ2MtPmQwMCwgdzA0LCB3MDYpOwogCiAJaWYgKHcwNCA+IDB4M2ZmKQogCQlnb3RvIGV4aXRfcmM7CkBAIC00OTgsNyArNDk4LDcgQEAKIAkJcmMgJj0gfjI7CiAJCWJyZWFrOwogCWNhc2UgMDoKLQkJLy8gbG9jXzgwMDA2NTkKKwkJLyogbG9jXzgwMDA2NTkgKi8KIAkJcy0+Y29uZmlnLnc5QyAmPSB+MjsKIAkJRVhJVF9SQyhXUjE2KHMsIDB4MGMyMDAxNSwgcy0+Y29uZmlnLnc5QykpOwogCQlFWElUX1JDKFJEMTYocywgMHgwYzIwMDEwKSk7CkBAIC01MjIsNyArNTIyLDggQEAKIAkJcmMgfD0gMjsKIAl9CiAJcmMgPSBXUjE2KHMsIDB4MGMyMDAxMywgcmMpOwotICAgICAgZXhpdF9yYzoKKworZXhpdF9yYzoKIAlyZXR1cm4gcmM7CiB9CiAKQEAgLTU1NCw3ICs1NTUsNyBAQAogCWludCBsb2Nrc3RhdDsKIAl1MzIgY2xrLCBjbGtfbGltaXQ7CiAKLQlwcl9kZWJ1ZygiJXNcbiIsIF9fRlVOQ1RJT05fXyk7CisJcHJfZGVidWcoIiVzXG4iLCBfX2Z1bmNfXyk7CiAKIAlpZiAocy0+Y29uZmlnLmQ1QyA9PSAwKSB7CiAJCUVYSVRfUkMoV1IxNihzLCAweDA4MjAwZTgsIDB4MDEwKSk7CkBAIC01OTgsMTEgKzU5OSwxMiBAQAogCiAJaWYgKGNsayAtIHMtPmNvbmZpZy5mX29zYyAqIDEwMDAgKyBjbGtfbGltaXQgPD0gMiAqIGNsa19saW1pdCkgewogCQlzLT5mX29zYyA9IGNsazsKLQkJcHJfZGVidWcoIiVzOiBvc2MgJWQgJWQgW0h6XVxuIiwgX19GVU5DVElPTl9fLAorCQlwcl9kZWJ1ZygiJXM6IG9zYyAlZCAlZCBbSHpdXG4iLCBfX2Z1bmNfXywKIAkJCSBzLT5jb25maWcuZl9vc2MgKiAxMDAwLCBjbGsgLSBzLT5jb25maWcuZl9vc2MgKiAxMDAwKTsKIAl9CiAJcmMgPSBXUjE2KHMsIDB4MDgyMDBlOCwgMCk7Ci0gICAgICBleGl0X3JjOgorCitleGl0X3JjOgogCXJldHVybiByYzsKIH0KIApAQCAtNjEwLDcgKzYxMiw3IEBACiB7CiAJaW50IHJjLCBzaSwgYnA7CiAKLQlwcl9kZWJ1ZygiJXNcbiIsIF9fRlVOQ1RJT05fXyk7CisJcHJfZGVidWcoIiVzXG4iLCBfX2Z1bmNfXyk7CiAKIAlzaSA9IHMtPmNvbmZpZy53QTA7CiAJaWYgKHMtPmNvbmZpZy53OTggPT0gMCkgewpAQCAtNjIwLDE3ICs2MjIsMTcgQEAKIAkJc2kgJj0gfjE7CiAJCWJwID0gMHgyMDA7CiAJfQotCWlmIChzLT5jb25maWcudzlBID09IDApIHsKKwlpZiAocy0+Y29uZmlnLnc5QSA9PSAwKQogCQlzaSB8PSAweDgwOwotCX0gZWxzZSB7CisJZWxzZQogCQlzaSAmPSB+MHg4MDsKLQl9CiAKIAlFWElUX1JDKFdSMTYocywgMHgyMTUwMDQ1LCAwKSk7CiAJRVhJVF9SQyhXUjE2KHMsIDB4MjE1MDAxMCwgc2kpKTsKIAlFWElUX1JDKFdSMTYocywgMHgyMTUwMDExLCBicCkpOwogCXJjID0gV1IxNihzLCAweDIxNTAwMTIsICh0eXBlID09IDAgPyAweGZmZiA6IDApKTsKLSAgICAgIGV4aXRfcmM6CisKK2V4aXRfcmM6CiAJcmV0dXJuIHJjOwogfQogCkBAIC02NDYsNyArNjQ4LDcgQEAKIAogCWludCByYywgZGZfdHVuZXI7CiAJaW50IGEsIGIsIGMsIGQ7Ci0JcHJfZGVidWcoIiVzICVkXG4iLCBfX0ZVTkNUSU9OX18sIHMtPmNvbmZpZy5kNjApOworCXByX2RlYnVnKCIlcyAlZFxuIiwgX19mdW5jX18sIHMtPmNvbmZpZy5kNjApOwogCiAJaWYgKHMtPmNvbmZpZy5kNjAgIT0gMikKIAkJZ290byBzZXRfdHVuZXI7CkBAIC02NTgsNyArNjYwLDcgQEAKIAlyYyA9IENvbmZpZ3VyZU1QRUdPdXRwdXQocywgMCk7CiAJaWYgKHJjIDwgMCkKIAkJZ290byBzZXRfdHVuZXI7Ci0gICAgICBzZXRfdHVuZXI6CitzZXRfdHVuZXI6CiAKIAlyYyA9IFBMTF9TZXQocywgZmVwLCAmZGZfdHVuZXIpOwogCWlmIChyYyA8IDApIHsKQEAgLTgzNSwxNiArODM3LDE2IEBACiAJCXJjID0gV1IxNihzLCAweDIwMTAwMTIsIDApOwogCQlpZiAocmMgPCAwKQogCQkJZ290byBleGl0X3JjOwotCQkvLyAgICAgICAgICAgICAgUVBTSyAgICBRQU0xNiAgIFFBTTY0Ci0JCWVieCA9IDB4MTlmOwkvLyAgICAgICAgICAgICAgICAgNjIKLQkJZWJwID0gMHgxZmI7CS8vICAgICAgICAgICAgICAgICAxNQotCQl2MjAgPSAweDE2YTsJLy8gIDYyCi0JCXYxRSA9IDB4MTk1OwkvLyAgICAgICAgIDYyCi0JCXYxNiA9IDB4MWJiOwkvLyAgMTUKLQkJdjE0ID0gMHgxZWY7CS8vICAgICAgICAgMTUKLQkJdjEyID0gNTsJLy8gIDE2Ci0JCXYxMCA9IDU7CS8vICAgICAgICAgMTYKLQkJdjBFID0gNTsJLy8gICAgICAgICAgICAgICAgIDE2CisJCQkJLyogUVBTSyAgICBRQU0xNiAgUUFNNjQJKi8KKwkJZWJ4ID0gMHgxOWY7CS8qICAgICAgICAgICAgICAgICA2MgkqLworCQllYnAgPSAweDFmYjsJLyogICAgICAgICAgICAgICAgIDE1CSovCisJCXYyMCA9IDB4MTZhOwkvKiAgNjIJCQkqLworCQl2MUUgPSAweDE5NTsJLyogICAgICAgICA2MgkJKi8KKwkJdjE2ID0gMHgxYmI7CS8qICAxNQkJCSovCisJCXYxNCA9IDB4MWVmOwkvKiAgICAgICAgIDE1CQkqLworCQl2MTIgPSA1OwkvKiAgMTYJCQkqLworCQl2MTAgPSA1OwkvKiAgICAgICAgIDE2CQkqLworCQl2MEUgPSA1OwkvKiAgICAgICAgICAgICAgICAgMTYJKi8KIAl9CiAKIAlzd2l0Y2ggKGZlcC0+dS5vZmRtLmNvbnN0ZWxsYXRpb24pIHsKQEAgLTk5NywxNyArOTk5LDE3IEBACiAJY2FzZSBCQU5EV0lEVEhfOF9NSFo6CS8qIDAgKi8KIAljYXNlIEJBTkRXSURUSF9BVVRPOgogCQlyYyA9IFdSMTYocywgMHgwYzIwMDNmLCAweDMyKTsKLQkJcy0+YmFuZHdpZHRoX3Bhcm0gPSBlYnggPSAweDhiODI0OTsJLy8gOTE0Mjg1NworCQlzLT5iYW5kd2lkdGhfcGFybSA9IGVieCA9IDB4OGI4MjQ5OwogCQllZHggPSAwOwogCQlicmVhazsKIAljYXNlIEJBTkRXSURUSF83X01IWjoKIAkJcmMgPSBXUjE2KHMsIDB4MGMyMDAzZiwgMHgzYik7Ci0JCXMtPmJhbmR3aWR0aF9wYXJtID0gZWJ4ID0gMHg3YTEyMDA7CS8vIDgwMDAwMDAKKwkJcy0+YmFuZHdpZHRoX3Bhcm0gPSBlYnggPSAweDdhMTIwMDsKIAkJZWR4ID0gMHg0ODA3OwogCQlicmVhazsKIAljYXNlIEJBTkRXSURUSF82X01IWjoKIAkJcmMgPSBXUjE2KHMsIDB4MGMyMDAzZiwgMHg0Nyk7Ci0JCXMtPmJhbmR3aWR0aF9wYXJtID0gZWJ4ID0gMHg2OGExYjY7CS8vIDY4NTcxNDIKKwkJcy0+YmFuZHdpZHRoX3Bhcm0gPSBlYnggPSAweDY4YTFiNjsKIAkJZWR4ID0gMHgwZjA3OwogCQlicmVhazsKIAl9OwpAQCAtMTA2MCw4ICsxMDYyLDYgQEAKIAlXUjE2KHMsIDB4MDgyMDA0MCwgMSk7CiAJU0NfU2VuZENvbW1hbmQocywgMSk7CiAKLS8vICAgICAgcmMgPSBXUjE2KHMsIDB4MjE1MDAwMCwgMSk7Ci0vLyAgICAgIGlmIChyYyA8IDApIGdvdG8gZXhpdF9yYzsKIAogCXJjID0gV1IxNihzLCAweDIxNTAwMDAsIDIpOwogCXJjID0gV1IxNihzLCAweDIxNTAwMTYsIGEpOwpAQCAtMTA2OSw3ICsxMDY5LDggQEAKIAlyYyA9IFdSMTYocywgMHgyMTUwMDM2LCAwKTsKIAlyYyA9IFdSMTYocywgMHgyMTUwMDAwLCAxKTsKIAlzLT5jb25maWcuZDYwID0gMjsKLSAgICAgIGV4aXRfcmM6CisKK2V4aXRfcmM6CiAJcmV0dXJuIHJjOwogfQogCkBAIC0xMDgyLDcgKzEwODMsNyBAQAogCXN0cnVjdCBkcngzOTd4RF9zdGF0ZSAqcyA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OwogCWludCByYzsKIAotCXByX2RlYnVnKCIlc1xuIiwgX19GVU5DVElPTl9fKTsKKwlwcl9kZWJ1ZygiJXNcbiIsIF9fZnVuY19fKTsKIAogCXMtPmNvbmZpZy5yZmFnYy5kMDAgPSAyOwkvKiAweDdjICovCiAJcy0+Y29uZmlnLnJmYWdjLncwNCA9IDA7CkBAIC0xMTAyLDE4ICsxMTAzLDE4IEBACiAKIAkvKiBISV9DZmdDb21tYW5kICovCiAJcy0+Y29uZmlnLnc1MCA9IDQ7Ci0Jcy0+Y29uZmlnLnc1MiA9IDk7CS8vIDB4ZjsKKwlzLT5jb25maWcudzUyID0gOTsKIAotCXMtPmNvbmZpZy5mX2lmID0gNDI4MDAwMDA7CS8qIGQxNDogaW50ZXJtZWRpYXRlIGZyZXF1ZW5jeSBbSHpdICAgICAqLwotCXMtPmNvbmZpZy5mX29zYyA9IDQ4MDAwOwkvKiBzNjYgOiBvc2NpbGxhdG9yIGZyZXF1ZW5jeSBba0h6XSAgICAgKi8KLQlzLT5jb25maWcudzkyID0gMTIwMDA7CS8vIDIwMDAwOworCXMtPmNvbmZpZy5mX2lmID0gNDI4MDAwMDA7CS8qIGQxNDogaW50ZXJtZWRpYXRlIGZyZXF1ZW5jeSBbSHpdICovCisJcy0+Y29uZmlnLmZfb3NjID0gNDgwMDA7CS8qIHM2NiA6IG9zY2lsbGF0b3IgZnJlcXVlbmN5IFtrSHpdICovCisJcy0+Y29uZmlnLnc5MiA9IDEyMDAwOwogCiAJcy0+Y29uZmlnLnc5QyA9IDB4MDAwZTsKIAlzLT5jb25maWcudzlFID0gMHgwMDAwOwogCiAJLyogQ29uZmlndXJlTVBFR091dHB1dCBwYXJhbXMgKi8KIAlzLT5jb25maWcud0EwID0gNDsKLQlzLT5jb25maWcudzk4ID0gMTsJLy8gMDsKKwlzLT5jb25maWcudzk4ID0gMTsKIAlzLT5jb25maWcudzlBID0gMTsKIAogCS8qIGdldCBjaGlwIHJldmlzaW9uICovCkBAIC0xMjQ4LDcgKzEyNDksNyBAQAogCQlyYyA9IFdSMTYocywgMHgwYzIwMDEyLCAxKTsKIAl9CiAKLSAgICAgIHdyaXRlX0RSWERfSW5pdEZFXzE6Cit3cml0ZV9EUlhEX0luaXRGRV8xOgogCiAJcmMgPSB3cml0ZV9mdyhzLCBEUlhEX0luaXRGRV8xKTsKIAlpZiAocmMgPCAwKQpAQCAtMTMxMSw3ICsxMzEyLDggQEAKIAlzLT5jb25maWcuZDVDID0gMDsKIAlzLT5jb25maWcuZDYwID0gMTsKIAlzLT5jb25maWcuZDQ4ID0gMTsKLSAgICAgIGVycm9yOgorCitlcnJvcjoKIAlyZXR1cm4gcmM7CiB9CiAKQEAgLTEzMjYsNyArMTMyOCw4IEBACiB7CiAJc3RydWN0IGRyeDM5N3hEX3N0YXRlICpzID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CiAKLQlzLT5jb25maWcuczIwZDI0ID0gMTsJLy8gMDsKKwlzLT5jb25maWcuczIwZDI0ID0gMTsKKwogCXJldHVybiBkcnhfdHVuZShzLCBwYXJhbXMpOwogfQogCkBAIC0xMzM3LDE4ICsxMzQwLDE2IEBACiAJZmVfdHVuZV9zZXR0aW5ncy0+bWluX2RlbGF5X21zID0gMTAwMDA7CiAJZmVfdHVuZV9zZXR0aW5ncy0+c3RlcF9zaXplID0gMDsKIAlmZV90dW5lX3NldHRpbmdzLT5tYXhfZHJpZnQgPSAwOworCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgZHJ4Mzk3eF9yZWFkX3N0YXR1cyhzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgZmVfc3RhdHVzX3QgKiBzdGF0dXMpCitzdGF0aWMgaW50IGRyeDM5N3hfcmVhZF9zdGF0dXMoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIGZlX3N0YXR1c190ICpzdGF0dXMpCiB7CiAJc3RydWN0IGRyeDM5N3hEX3N0YXRlICpzID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CiAJaW50IGxvY2tzdGF0OwogCiAJR2V0TG9ja1N0YXR1cyhzLCAmbG9ja3N0YXQpOwotCS8qIFRPRE8gKi8KLS8vICAgICAgaWYgKGxvY2tzdGF0ICYgMSkKLS8vICAgICAgQ29ycmVjdFN5c0Nsb2NrRGV2aWF0aW9uKHMpOwogCiAJKnN0YXR1cyA9IDA7CiAJaWYgKGxvY2tzdGF0ICYgMikgewpAQCAtMTM1Niw5ICsxMzU3LDggQEAKIAkJQ29uZmlndXJlTVBFR091dHB1dChzLCAxKTsKIAkJKnN0YXR1cyA9IEZFX0hBU19MT0NLIHwgRkVfSEFTX1NZTkMgfCBGRV9IQVNfVklURVJCSTsKIAl9Ci0JaWYgKGxvY2tzdGF0ICYgNCkgeworCWlmIChsb2Nrc3RhdCAmIDQpCiAJCSpzdGF0dXMgfD0gRkVfSEFTX0NBUlJJRVIgfCBGRV9IQVNfU0lHTkFMOwotCX0KIAogCXJldHVybiAwOwogfQpAQCAtMTM2NiwxNiArMTM2NiwxOCBAQAogc3RhdGljIGludCBkcngzOTd4X3JlYWRfYmVyKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCB1bnNpZ25lZCBpbnQgKmJlcikKIHsKIAkqYmVyID0gMDsKKwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGRyeDM5N3hfcmVhZF9zbnIoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIHUxNiAqIHNucikKK3N0YXRpYyBpbnQgZHJ4Mzk3eF9yZWFkX3NucihzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgdTE2ICpzbnIpCiB7CiAJKnNuciA9IDA7CisKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBkcngzOTd4X3JlYWRfc2lnbmFsX3N0cmVuZ3RoKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCB1MTYgKiBzdHJlbmd0aCkKK3N0YXRpYyBpbnQgZHJ4Mzk3eF9yZWFkX3NpZ25hbF9zdHJlbmd0aChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgdTE2ICpzdHJlbmd0aCkKIHsKIAlzdHJ1Y3QgZHJ4Mzk3eERfc3RhdGUgKnMgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKIAlpbnQgcmM7CkBAIC0xNDAxLDYgKzE0MDMsNyBAQAogCSAqIFRoZSBmb2xsb3dpbmcgZG9lcyB0aGUgc2FtZSBidXQgd2l0aCBsZXNzIHJvdW5kaW5nIGVycm9yczoKIAkgKi8KIAkqc3RyZW5ndGggPSB+KDc3MjAgKyAocmMgKiAzMDc0NCA+PiAxMCkpOworCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTE0MDgsNiArMTQxMSw3IEBACiAJCQkJIHVuc2lnbmVkIGludCAqdWNibG9ja3MpCiB7CiAJKnVjYmxvY2tzID0gMDsKKwogCXJldHVybiAwOwogfQogCkBAIC0xNDM2LDIyICsxNDQwLDIyIEBACiAJCSAuZnJlcXVlbmN5X21heAkJPSA4NTUyNTAwMDAsCiAJCSAuZnJlcXVlbmN5X3N0ZXBzaXplCT0gMTY2NjY3LAogCQkgLmZyZXF1ZW5jeV90b2xlcmFuY2UJPSAwLAotCQkgLmNhcHMgPQkJCQkJLyogMHgwQzAxQjJFQUUgKi8KLQkJCSBGRV9DQU5fRkVDXzFfMgkJCXwJLy8gPSAweDIsCi0JCQkgRkVfQ0FOX0ZFQ18yXzMJCQl8CS8vID0gMHg0LAotCQkJIEZFX0NBTl9GRUNfM180CQkJfAkvLyA9IDB4OCwKLQkJCSBGRV9DQU5fRkVDXzVfNgkJCXwJLy8gPSAweDIwLAotCQkJIEZFX0NBTl9GRUNfN184CQkJfAkvLyA9IDB4ODAsCi0JCQkgRkVfQ0FOX0ZFQ19BVVRPCQl8CS8vID0gMHgyMDAsCi0JCQkgRkVfQ0FOX1FQU0sJCQl8CS8vID0gMHg0MDAsCi0JCQkgRkVfQ0FOX1FBTV8xNgkJCXwJLy8gPSAweDgwMCwKLQkJCSBGRV9DQU5fUUFNXzY0CQkJfAkvLyA9IDB4MjAwMCwKLQkJCSBGRV9DQU5fUUFNX0FVVE8JCXwJLy8gPSAweDEwMDAwLAotCQkJIEZFX0NBTl9UUkFOU01JU1NJT05fTU9ERV9BVVRPCXwJLy8gPSAweDIwMDAwLAotCQkJIEZFX0NBTl9HVUFSRF9JTlRFUlZBTF9BVVRPCXwJLy8gPSAweDgwMDAwLAotCQkJIEZFX0NBTl9ISUVSQVJDSFlfQVVUTwkJfAkvLyA9IDB4MTAwMDAwLAotCQkJIEZFX0NBTl9SRUNPVkVSCQkJfAkvLyA9IDB4NDAwMDAwMDAsCi0JCQkgRkVfQ0FOX01VVEVfVFMJCQkJLy8gPSAweDgwMDAwMDAwCisJCSAuY2FwcyA9CQkJCSAgLyogMHgwQzAxQjJFQUUgKi8KKwkJCSBGRV9DQU5fRkVDXzFfMgkJCXwgLyogPSAweDIsICovCisJCQkgRkVfQ0FOX0ZFQ18yXzMJCQl8IC8qID0gMHg0LCAqLworCQkJIEZFX0NBTl9GRUNfM180CQkJfCAvKiA9IDB4OCwgKi8KKwkJCSBGRV9DQU5fRkVDXzVfNgkJCXwgLyogPSAweDIwLCAqLworCQkJIEZFX0NBTl9GRUNfN184CQkJfCAvKiA9IDB4ODAsICovCisJCQkgRkVfQ0FOX0ZFQ19BVVRPCQl8IC8qID0gMHgyMDAsICovCisJCQkgRkVfQ0FOX1FQU0sJCQl8IC8qID0gMHg0MDAsICovCisJCQkgRkVfQ0FOX1FBTV8xNgkJCXwgLyogPSAweDgwMCwgKi8KKwkJCSBGRV9DQU5fUUFNXzY0CQkJfCAvKiA9IDB4MjAwMCwgKi8KKwkJCSBGRV9DQU5fUUFNX0FVVE8JCXwgLyogPSAweDEwMDAwLCAqLworCQkJIEZFX0NBTl9UUkFOU01JU1NJT05fTU9ERV9BVVRPCXwgLyogPSAweDIwMDAwLCAqLworCQkJIEZFX0NBTl9HVUFSRF9JTlRFUlZBTF9BVVRPCXwgLyogPSAweDgwMDAwLCAqLworCQkJIEZFX0NBTl9ISUVSQVJDSFlfQVVUTwkJfCAvKiA9IDB4MTAwMDAwLCAqLworCQkJIEZFX0NBTl9SRUNPVkVSCQkJfCAvKiA9IDB4NDAwMDAwMDAsICovCisJCQkgRkVfQ0FOX01VVEVfVFMJCQkgIC8qID0gMHg4MDAwMDAwMCAqLwogCSB9LAogCiAJLnJlbGVhc2UgPSBkcngzOTd4X3JlbGVhc2UsCkBAIC0xNDcyLDMzICsxNDc2LDM1IEBACiBzdHJ1Y3QgZHZiX2Zyb250ZW5kICpkcngzOTd4RF9hdHRhY2goY29uc3Qgc3RydWN0IGRyeDM5N3hEX2NvbmZpZyAqY29uZmlnLAogCQkJCSAgICAgc3RydWN0IGkyY19hZGFwdGVyICppMmMpCiB7Ci0Jc3RydWN0IGRyeDM5N3hEX3N0YXRlICpzID0gTlVMTDsKKwlzdHJ1Y3QgZHJ4Mzk3eERfc3RhdGUgKnN0YXRlOwogCiAJLyogYWxsb2NhdGUgbWVtb3J5IGZvciB0aGUgaW50ZXJuYWwgc3RhdGUgKi8KLQlzID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGRyeDM5N3hEX3N0YXRlKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKHMgPT0gTlVMTCkKKwlzdGF0ZSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBkcngzOTd4RF9zdGF0ZSksIEdGUF9LRVJORUwpOworCWlmICghc3RhdGUpCiAJCWdvdG8gZXJyb3I7CiAKIAkvKiBzZXR1cCB0aGUgc3RhdGUgKi8KLQlzLT5pMmMgPSBpMmM7Ci0JbWVtY3B5KCZzLT5jb25maWcsIGNvbmZpZywgc2l6ZW9mKHN0cnVjdCBkcngzOTd4RF9jb25maWcpKTsKKwlzdGF0ZS0+aTJjID0gaTJjOworCW1lbWNweSgmc3RhdGUtPmNvbmZpZywgY29uZmlnLCBzaXplb2Yoc3RydWN0IGRyeDM5N3hEX2NvbmZpZykpOwogCiAJLyogY2hlY2sgaWYgdGhlIGRlbW9kIGlzIHRoZXJlICovCi0JaWYgKFJEMTYocywgMHgyNDEwMDE5KSA8IDApCisJaWYgKFJEMTYoc3RhdGUsIDB4MjQxMDAxOSkgPCAwKQogCQlnb3RvIGVycm9yOwogCiAJLyogY3JlYXRlIGR2Yl9mcm9udGVuZCAqLwotCW1lbWNweSgmcy0+ZnJvbnRlbmQub3BzLCAmZHJ4Mzk3eF9vcHMsIHNpemVvZihzdHJ1Y3QgZHZiX2Zyb250ZW5kX29wcykpOwotCXMtPmZyb250ZW5kLmRlbW9kdWxhdG9yX3ByaXYgPSBzOworCW1lbWNweSgmc3RhdGUtPmZyb250ZW5kLm9wcywgJmRyeDM5N3hfb3BzLAorCQkJc2l6ZW9mKHN0cnVjdCBkdmJfZnJvbnRlbmRfb3BzKSk7CisJc3RhdGUtPmZyb250ZW5kLmRlbW9kdWxhdG9yX3ByaXYgPSBzdGF0ZTsKIAotCXJldHVybiAmcy0+ZnJvbnRlbmQ7Ci0gICAgICBlcnJvcjoKLQlrZnJlZShzKTsKKwlyZXR1cm4gJnN0YXRlLT5mcm9udGVuZDsKK2Vycm9yOgorCWtmcmVlKHN0YXRlKTsKKwogCXJldHVybiBOVUxMOwogfQorRVhQT1JUX1NZTUJPTChkcngzOTd4RF9hdHRhY2gpOwogCiBNT0RVTEVfREVTQ1JJUFRJT04oIk1pY3JvbmFzIERSWDM5N3hEIERWQi1UIEZyb250ZW5kIik7CiBNT0RVTEVfQVVUSE9SKCJIZW5rIFZlcmdvbmV0Iik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKLUVYUE9SVF9TWU1CT0woZHJ4Mzk3eERfYXR0YWNoKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9kcngzOTd4RC5oIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2RyeDM5N3hELmgKaW5kZXggZGRjN2EwNy4uYmEwNWQxNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2RyeDM5N3hELmgKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2RyeDM5N3hELmgKQEAgLTI4LDcgKzI4LDcgQEAKICNkZWZpbmUgRFJYX0ZfT0ZGU0VUCTM2MDAwMDAwCiAKICNkZWZpbmUgSTJDX0FEUl9DMCh4KSBcCi0oCSh1MzIpY3B1X3RvX2xlMzIoIFwKKygJY3B1X3RvX2xlMzIoIFwKIAkJKHUzMikoIFwKIAkJCSgoKHUzMikoeCkgJiAodTMyKTB4MDAwMDAwZmZVTCkgICAgICApIHwgXAogCQkJKCgodTMyKSh4KSAmICh1MzIpMHgwMDAwZmYwMFVMKSA8PCAxNikgfCBcCkBAIC0zOCw3ICszOCw3IEBACiApCiAKICNkZWZpbmUgSTJDX0FEUl9FMCh4KSBcCi0oCSh1MzIpY3B1X3RvX2xlMzIoIFwKKygJY3B1X3RvX2xlMzIoIFwKIAkJKHUzMikoIFwKIAkJCSgoKHUzMikoeCkgJiAodTMyKTB4MDAwMDAwZmZVTCkgICAgICApIHwgXAogCQkJKCgodTMyKSh4KSAmICh1MzIpMHgwMDAwZmYwMFVMKSA8PCAxNikgfCBcCkBAIC0xMjIsNyArMTIyLDcgQEAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IGR2Yl9mcm9udGVuZCogZHJ4Mzk3eERfYXR0YWNoKGNvbnN0IHN0cnVjdCBkcngzOTd4RF9jb25maWcgKmNvbmZpZywKIAkJCQkJICAgc3RydWN0IGkyY19hZGFwdGVyICppMmMpCiB7Ci0JcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IGRyaXZlciBkaXNhYmxlZCBieSBLY29uZmlnXG4iLCBfX0ZVTkNUSU9OX18pOworCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBkcml2ZXIgZGlzYWJsZWQgYnkgS2NvbmZpZ1xuIiwgX19mdW5jX18pOwogCXJldHVybiBOVUxMOwogfQogI2VuZGlmIC8qIENPTkZJR19EVkJfRFJYMzk3WEQgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9kdmJfZHVtbXlfZmUuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9kdmJfZHVtbXlfZmUuYwppbmRleCBmZWQwOWRmLi5kYjhhOTM3IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvZHZiX2R1bW15X2ZlLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2R2Yl9kdW1teV9mZS5jCkBAIC03NSw5ICs3NSwxMCBAQAogCiBzdGF0aWMgaW50IGR2Yl9kdW1teV9mZV9zZXRfZnJvbnRlbmQoc3RydWN0IGR2Yl9mcm9udGVuZCogZmUsIHN0cnVjdCBkdmJfZnJvbnRlbmRfcGFyYW1ldGVycyAqcCkKIHsKLQlpZiAoZmUtPm9wcy0+dHVuZXJfb3BzLT5zZXRfcGFyYW1zKSB7Ci0JCWZlLT5vcHMtPnR1bmVyX29wcy0+c2V0X3BhcmFtcyhmZSwgcCk7Ci0JCWlmIChmZS0+b3BzLT5pMmNfZ2F0ZV9jdHJsKSBmZS0+b3BzLT5pMmNfZ2F0ZV9jdHJsKGZlLCAwKTsKKwlpZiAoZmUtPm9wcy50dW5lcl9vcHMuc2V0X3BhcmFtcykgeworCQlmZS0+b3BzLnR1bmVyX29wcy5zZXRfcGFyYW1zKGZlLCBwKTsKKwkJaWYgKGZlLT5vcHMuaTJjX2dhdGVfY3RybCkKKwkJCWZlLT5vcHMuaTJjX2dhdGVfY3RybChmZSwgMCk7CiAJfQogCiAJcmV0dXJuIDA7CkBAIC0xMzEsNyArMTMyLDcgQEAKIAogc3RhdGljIHN0cnVjdCBkdmJfZnJvbnRlbmRfb3BzIGR2Yl9kdW1teV9mZV9xcHNrX29wczsKIAotc3RydWN0IGR2Yl9mcm9udGVuZCogZHZiX2R1bW15X2ZlX3Fwc2tfYXR0YWNoKCkKK3N0cnVjdCBkdmJfZnJvbnRlbmQgKmR2Yl9kdW1teV9mZV9xcHNrX2F0dGFjaCh2b2lkKQogewogCXN0cnVjdCBkdmJfZHVtbXlfZmVfc3RhdGUqIHN0YXRlID0gTlVMTDsKIApAQCAtMTUxLDcgKzE1Miw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgZHZiX2Zyb250ZW5kX29wcyBkdmJfZHVtbXlfZmVfcWFtX29wczsKIAotc3RydWN0IGR2Yl9mcm9udGVuZCogZHZiX2R1bW15X2ZlX3FhbV9hdHRhY2goKQorc3RydWN0IGR2Yl9mcm9udGVuZCAqZHZiX2R1bW15X2ZlX3FhbV9hdHRhY2godm9pZCkKIHsKIAlzdHJ1Y3QgZHZiX2R1bW15X2ZlX3N0YXRlKiBzdGF0ZSA9IE5VTEw7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9lZHMxNTQ3LmggYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvZWRzMTU0Ny5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhNzliN2MKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvZWRzMTU0Ny5oCkBAIC0wLDAgKzEsMTMzIEBACisvKiBlZHMxNTQ3LmggRWFyZGEgRURTLTE1NDcgdHVuZXIgc3VwcG9ydAorKgorKiBDb3B5cmlnaHQgKEMpIDIwMDggSWdvciBNLiBMaXBsaWFuaW4gKGxpcGxpYW5pbkBtZS5ieSkKKyoKKyoJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyoJdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisqCUZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgdmVyc2lvbiAyLgorKgorKiBzZWUgRG9jdW1lbnRhdGlvbi9kdmIvUkVBRE1FLmR2Yi11c2IgZm9yIG1vcmUgaW5mb3JtYXRpb24KKyovCisKKyNpZm5kZWYgRURTMTU0NworI2RlZmluZSBFRFMxNTQ3CisKK3N0YXRpYyB1OCBzdHYwMjg4X2VhcmRhX2luaXR0YWJbXSA9IHsKKwkweDAxLCAweDU3LAorCTB4MDIsIDB4MjAsCisJMHgwMywgMHg4ZSwKKwkweDA0LCAweDhlLAorCTB4MDUsIDB4MTIsCisJMHgwNiwgMHgwMCwKKwkweDA3LCAweDAwLAorCTB4MDksIDB4MDAsCisJMHgwYSwgMHgwNCwKKwkweDBiLCAweDAwLAorCTB4MGMsIDB4MDAsCisJMHgwZCwgMHgwMCwKKwkweDBlLCAweGQ0LAorCTB4MGYsIDB4MzAsCisJMHgxMSwgMHg0NCwKKwkweDEyLCAweDAzLAorCTB4MTMsIDB4NDgsCisJMHgxNCwgMHg4NCwKKwkweDE1LCAweDQ1LAorCTB4MTYsIDB4YjcsCisJMHgxNywgMHg5YywKKwkweDE4LCAweDAwLAorCTB4MTksIDB4YTYsCisJMHgxYSwgMHg4OCwKKwkweDFiLCAweDhmLAorCTB4MWMsIDB4ZjAsCisJMHgyMCwgMHgwYiwKKwkweDIxLCAweDU0LAorCTB4MjIsIDB4MDAsCisJMHgyMywgMHgwMCwKKwkweDJiLCAweGZmLAorCTB4MmMsIDB4ZjcsCisJMHgzMCwgMHgwMCwKKwkweDMxLCAweDFlLAorCTB4MzIsIDB4MTQsCisJMHgzMywgMHgwZiwKKwkweDM0LCAweDA5LAorCTB4MzUsIDB4MGMsCisJMHgzNiwgMHgwNSwKKwkweDM3LCAweDJmLAorCTB4MzgsIDB4MTYsCisJMHgzOSwgMHhiZCwKKwkweDNhLCAweDAwLAorCTB4M2IsIDB4MTMsCisJMHgzYywgMHgxMSwKKwkweDNkLCAweDMwLAorCTB4NDAsIDB4NjMsCisJMHg0MSwgMHgwNCwKKwkweDQyLCAweDYwLAorCTB4NDMsIDB4MDAsCisJMHg0NCwgMHgwMCwKKwkweDQ1LCAweDAwLAorCTB4NDYsIDB4MDAsCisJMHg0NywgMHgwMCwKKwkweDRhLCAweDAwLAorCTB4NTAsIDB4MTAsCisJMHg1MSwgMHgzNiwKKwkweDUyLCAweDA5LAorCTB4NTMsIDB4OTQsCisJMHg1NCwgMHg2MiwKKwkweDU1LCAweDI5LAorCTB4NTYsIDB4NjQsCisJMHg1NywgMHgyYiwKKwkweDU4LCAweDU0LAorCTB4NTksIDB4ODYsCisJMHg1YSwgMHgwMCwKKwkweDViLCAweDliLAorCTB4NWMsIDB4MDgsCisJMHg1ZCwgMHg3ZiwKKwkweDVlLCAweDAwLAorCTB4NWYsIDB4ZmYsCisJMHg3MCwgMHgwMCwKKwkweDcxLCAweDAwLAorCTB4NzIsIDB4MDAsCisJMHg3NCwgMHgwMCwKKwkweDc1LCAweDAwLAorCTB4NzYsIDB4MDAsCisJMHg4MSwgMHgwMCwKKwkweDgyLCAweDNmLAorCTB4ODMsIDB4M2YsCisJMHg4NCwgMHgwMCwKKwkweDg1LCAweDAwLAorCTB4ODgsIDB4MDAsCisJMHg4OSwgMHgwMCwKKwkweDhhLCAweDAwLAorCTB4OGIsIDB4MDAsCisJMHg4YywgMHgwMCwKKwkweDkwLCAweDAwLAorCTB4OTEsIDB4MDAsCisJMHg5MiwgMHgwMCwKKwkweDkzLCAweDAwLAorCTB4OTQsIDB4MWMsCisJMHg5NywgMHgwMCwKKwkweGEwLCAweDQ4LAorCTB4YTEsIDB4MDAsCisJMHhiMCwgMHhiOCwKKwkweGIxLCAweDNhLAorCTB4YjIsIDB4MTAsCisJMHhiMywgMHg4MiwKKwkweGI0LCAweDgwLAorCTB4YjUsIDB4ODIsCisJMHhiNiwgMHg4MiwKKwkweGI3LCAweDgyLAorCTB4YjgsIDB4MjAsCisJMHhiOSwgMHgwMCwKKwkweGYwLCAweDAwLAorCTB4ZjEsIDB4MDAsCisJMHhmMiwgMHhjMCwKKwkweGZmLDB4ZmYsCit9OworCitzdGF0aWMgc3RydWN0IHN0djAyODhfY29uZmlnIGVhcmRhX2NvbmZpZyA9IHsKKwkuZGVtb2RfYWRkcmVzcyA9IDB4NjgsCisJLm1pbl9kZWxheV9tcyA9IDEwMCwKKwkuaW5pdHRhYiA9IHN0djAyODhfZWFyZGFfaW5pdHRhYiwKK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2xnczhnbDUuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9sZ3M4Z2w1LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODU1ODUyZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9sZ3M4Z2w1LmMKQEAgLTAsMCArMSw0NTQgQEAKKy8qCisgICAgTGVnZW5kIFNpbGljb24gTEdTLThHTDUgRE1CLVRIIE9GRE0gZGVtb2R1bGF0b3IgZHJpdmVyCisKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDggU2lyaXVzIEludGVybmF0aW9uYWwgKEhvbmcgS29uZykgTGltaXRlZAorCVRpbW90aHkgTGVlIDx0aW1vdGh5LmxlZUBzaXJpdXNoay5jb20+CisKKyAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKworKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSAiZHZiX2Zyb250ZW5kLmgiCisjaW5jbHVkZSAibGdzOGdsNS5oIgorCisKKyNkZWZpbmUgUkVHX1JFU0VUCQkweDAyCisjZGVmaW5lIFJFR19SRVNFVF9PRkYJCQkweDAxCisjZGVmaW5lIFJFR18wMwkJCTB4MDMKKyNkZWZpbmUgUkVHXzA0CQkJMHgwNAorI2RlZmluZSBSRUdfMDcJCQkweDA3CisjZGVmaW5lIFJFR18wOQkJCTB4MDkKKyNkZWZpbmUgUkVHXzBBCQkJMHgwYQorI2RlZmluZSBSRUdfMEIJCQkweDBiCisjZGVmaW5lIFJFR18wQwkJCTB4MGMKKyNkZWZpbmUgUkVHXzM3CQkJMHgzNworI2RlZmluZSBSRUdfU1RSRU5HVEgJCTB4NGIKKyNkZWZpbmUgUkVHX1NUUkVOR1RIX01BU0sJCTB4N2YKKyNkZWZpbmUgUkVHX1NUUkVOR1RIX0NBUlJJRVIJCTB4ODAKKyNkZWZpbmUgUkVHX0lOVkVSU0lPTgkJMHg3YworI2RlZmluZSBSRUdfSU5WRVJTSU9OX09OCQkweDgwCisjZGVmaW5lIFJFR183RAkJCTB4N2QKKyNkZWZpbmUgUkVHXzdFCQkJMHg3ZQorI2RlZmluZSBSRUdfQTIJCQkweGEyCisjZGVmaW5lIFJFR19TVEFUVVMJCTB4YTQKKyNkZWZpbmUgUkVHX1NUQVRVU19TWU5DCQkweDA0CisjZGVmaW5lIFJFR19TVEFUVVNfTE9DSwkJMHgwMQorCisKK3N0cnVjdCBsZ3M4Z2w1X3N0YXRlIHsKKwlzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyYzsKKwljb25zdCBzdHJ1Y3QgbGdzOGdsNV9jb25maWcgKmNvbmZpZzsKKwlzdHJ1Y3QgZHZiX2Zyb250ZW5kIGZyb250ZW5kOworfTsKKworCitzdGF0aWMgaW50IGRlYnVnOworI2RlZmluZSBkcHJpbnRrKGFyZ3MuLi4pIFwKKwlkbyB7IFwKKwkJaWYgKGRlYnVnKSBcCisJCQlwcmludGsoS0VSTl9ERUJVRyAibGdzOGdsNTogIiBhcmdzKTsgXAorCX0gd2hpbGUgKDApCisKKworLyogV3JpdGVzIGludG8gZGVtb2QncyByZWdpc3RlciAqLworc3RhdGljIGludAorbGdzOGdsNV93cml0ZV9yZWcoc3RydWN0IGxnczhnbDVfc3RhdGUgKnN0YXRlLCB1OCByZWcsIHU4IGRhdGEpCit7CisJaW50IHJldDsKKwl1OCBidWZbXSA9IHtyZWcsIGRhdGF9OworCXN0cnVjdCBpMmNfbXNnIG1zZyA9IHsKKwkJLmFkZHIgID0gc3RhdGUtPmNvbmZpZy0+ZGVtb2RfYWRkcmVzcywKKwkJLmZsYWdzID0gMCwKKwkJLmJ1ZiAgID0gYnVmLAorCQkubGVuICAgPSAyCisJfTsKKworCXJldCA9IGkyY190cmFuc2ZlcihzdGF0ZS0+aTJjLCAmbXNnLCAxKTsKKwlpZiAocmV0ICE9IDEpCisJCWRwcmludGsoIiVzOiBlcnJvciAocmVnPTB4JTAyeCwgdmFsPTB4JTAyeCwgcmV0PSVpKVxuIiwKKwkJCV9fZnVuY19fLCByZWcsIGRhdGEsIHJldCk7CisJcmV0dXJuIChyZXQgIT0gMSkgPyAtMSA6IDA7Cit9CisKKworLyogUmVhZHMgZnJvbSBkZW1vZCdzIHJlZ2lzdGVyICovCitzdGF0aWMgaW50CitsZ3M4Z2w1X3JlYWRfcmVnKHN0cnVjdCBsZ3M4Z2w1X3N0YXRlICpzdGF0ZSwgdTggcmVnKQoreworCWludCByZXQ7CisJdTggYjBbXSA9IHtyZWd9OworCXU4IGIxW10gPSB7MH07CisJc3RydWN0IGkyY19tc2cgbXNnWzJdID0geworCQl7CisJCQkuYWRkciAgPSBzdGF0ZS0+Y29uZmlnLT5kZW1vZF9hZGRyZXNzLAorCQkJLmZsYWdzID0gMCwKKwkJCS5idWYgICA9IGIwLAorCQkJLmxlbiAgID0gMQorCQl9LAorCQl7CisJCQkuYWRkciAgPSBzdGF0ZS0+Y29uZmlnLT5kZW1vZF9hZGRyZXNzLAorCQkJLmZsYWdzID0gSTJDX01fUkQsCisJCQkuYnVmICAgPSBiMSwKKwkJCS5sZW4gICA9IDEKKwkJfQorCX07CisKKwlyZXQgPSBpMmNfdHJhbnNmZXIoc3RhdGUtPmkyYywgbXNnLCAyKTsKKwlpZiAocmV0ICE9IDIpCisJCXJldHVybiAtRUlPOworCisJcmV0dXJuIGIxWzBdOworfQorCisKK3N0YXRpYyBpbnQKK2xnczhnbDVfdXBkYXRlX3JlZyhzdHJ1Y3QgbGdzOGdsNV9zdGF0ZSAqc3RhdGUsIHU4IHJlZywgdTggZGF0YSkKK3sKKwlsZ3M4Z2w1X3JlYWRfcmVnKHN0YXRlLCByZWcpOworCWxnczhnbDVfd3JpdGVfcmVnKHN0YXRlLCByZWcsIGRhdGEpOworCXJldHVybiAwOworfQorCisKKy8qIFdyaXRlcyBpbnRvIGFsdGVybmF0ZSBkZXZpY2UncyByZWdpc3RlciAqLworLyogVE9ETzogIEZpbmQgb3V0IHdoYXQgdGhhdCBkZXZpY2UgaXMgZm9yISAqLworc3RhdGljIGludAorbGdzOGdsNV91cGRhdGVfYWx0X3JlZyhzdHJ1Y3QgbGdzOGdsNV9zdGF0ZSAqc3RhdGUsIHU4IHJlZywgdTggZGF0YSkKK3sKKwlpbnQgcmV0OworCXU4IGIwW10gPSB7cmVnfTsKKwl1OCBiMVtdID0gezB9OworCXU4IGIyW10gPSB7cmVnLCBkYXRhfTsKKwlzdHJ1Y3QgaTJjX21zZyBtc2dbM10gPSB7CisJCXsKKwkJCS5hZGRyICA9IHN0YXRlLT5jb25maWctPmRlbW9kX2FkZHJlc3MgKyAyLAorCQkJLmZsYWdzID0gMCwKKwkJCS5idWYgICA9IGIwLAorCQkJLmxlbiAgID0gMQorCQl9LAorCQl7CisJCQkuYWRkciAgPSBzdGF0ZS0+Y29uZmlnLT5kZW1vZF9hZGRyZXNzICsgMiwKKwkJCS5mbGFncyA9IEkyQ19NX1JELAorCQkJLmJ1ZiAgID0gYjEsCisJCQkubGVuICAgPSAxCisJCX0sCisJCXsKKwkJCS5hZGRyICA9IHN0YXRlLT5jb25maWctPmRlbW9kX2FkZHJlc3MgKyAyLAorCQkJLmZsYWdzID0gMCwKKwkJCS5idWYgICA9IGIyLAorCQkJLmxlbiAgID0gMgorCQl9LAorCX07CisKKwlyZXQgPSBpMmNfdHJhbnNmZXIoc3RhdGUtPmkyYywgbXNnLCAzKTsKKwlyZXR1cm4gKHJldCAhPSAzKSA/IC0xIDogMDsKK30KKworCitzdGF0aWMgdm9pZAorbGdzOGdsNV9zb2Z0X3Jlc2V0KHN0cnVjdCBsZ3M4Z2w1X3N0YXRlICpzdGF0ZSkKK3sKKwl1OCB2YWw7CisKKwlkcHJpbnRrKCIlc1xuIiwgX19mdW5jX18pOworCisJdmFsID0gbGdzOGdsNV9yZWFkX3JlZyhzdGF0ZSwgUkVHX1JFU0VUKTsKKwlsZ3M4Z2w1X3dyaXRlX3JlZyhzdGF0ZSwgUkVHX1JFU0VULCB2YWwgJiB+UkVHX1JFU0VUX09GRik7CisJbGdzOGdsNV93cml0ZV9yZWcoc3RhdGUsIFJFR19SRVNFVCwgdmFsIHwgUkVHX1JFU0VUX09GRik7CisJbXNsZWVwKDUpOworfQorCisKKy8qIFN0YXJ0cyBkZW1vZHVsYXRpb24gKi8KK3N0YXRpYyB2b2lkCitsZ3M4Z2w1X3N0YXJ0X2RlbW9kKHN0cnVjdCBsZ3M4Z2w1X3N0YXRlICpzdGF0ZSkKK3sKKwl1OCAgdmFsOworCWludCBuOworCisJZHByaW50aygiJXNcbiIsIF9fZnVuY19fKTsKKworCWxnczhnbDVfdXBkYXRlX2FsdF9yZWcoc3RhdGUsIDB4YzIsIDB4MjgpOworCWxnczhnbDVfc29mdF9yZXNldChzdGF0ZSk7CisJbGdzOGdsNV91cGRhdGVfcmVnKHN0YXRlLCBSRUdfMDcsIDB4MTApOworCWxnczhnbDVfdXBkYXRlX3JlZyhzdGF0ZSwgUkVHXzA3LCAweDEwKTsKKwlsZ3M4Z2w1X3dyaXRlX3JlZyhzdGF0ZSwgUkVHXzA5LCAweDBlKTsKKwlsZ3M4Z2w1X3dyaXRlX3JlZyhzdGF0ZSwgUkVHXzBBLCAweGU1KTsKKwlsZ3M4Z2w1X3dyaXRlX3JlZyhzdGF0ZSwgUkVHXzBCLCAweDM1KTsKKwlsZ3M4Z2w1X3dyaXRlX3JlZyhzdGF0ZSwgUkVHXzBDLCAweDMwKTsKKworCWxnczhnbDVfdXBkYXRlX3JlZyhzdGF0ZSwgUkVHXzAzLCAweDAwKTsKKwlsZ3M4Z2w1X3VwZGF0ZV9yZWcoc3RhdGUsIFJFR183RSwgMHgwMSk7CisJbGdzOGdsNV91cGRhdGVfYWx0X3JlZyhzdGF0ZSwgMHhjNSwgMHgwMCk7CisJbGdzOGdsNV91cGRhdGVfcmVnKHN0YXRlLCBSRUdfMDQsIDB4MDIpOworCWxnczhnbDVfdXBkYXRlX3JlZyhzdGF0ZSwgUkVHXzM3LCAweDAxKTsKKwlsZ3M4Z2w1X3NvZnRfcmVzZXQoc3RhdGUpOworCisJLyogV2FpdCBmb3IgY2FycmllciAqLworCWZvciAobiA9IDA7ICBuIDwgMTA7ICBuKyspIHsKKwkJdmFsID0gbGdzOGdsNV9yZWFkX3JlZyhzdGF0ZSwgUkVHX1NUUkVOR1RIKTsKKwkJZHByaW50aygiV2FpdCBmb3IgY2FycmllclslZF0gMHglMDJYXG4iLCBuLCB2YWwpOworCQlpZiAodmFsICYgUkVHX1NUUkVOR1RIX0NBUlJJRVIpCisJCQlicmVhazsKKwkJbXNsZWVwKDQpOworCX0KKwlpZiAoISh2YWwgJiBSRUdfU1RSRU5HVEhfQ0FSUklFUikpCisJCXJldHVybjsKKworCS8qIFdhaXQgZm9yIGxvY2sgKi8KKwlmb3IgKG4gPSAwOyAgbiA8IDIwOyAgbisrKSB7CisJCXZhbCA9IGxnczhnbDVfcmVhZF9yZWcoc3RhdGUsIFJFR19TVEFUVVMpOworCQlkcHJpbnRrKCJXYWl0IGZvciBsb2NrWyVkXSAweCUwMlhcbiIsIG4sIHZhbCk7CisJCWlmICh2YWwgJiBSRUdfU1RBVFVTX0xPQ0spCisJCQlicmVhazsKKwkJbXNsZWVwKDEyKTsKKwl9CisJaWYgKCEodmFsICYgUkVHX1NUQVRVU19MT0NLKSkKKwkJcmV0dXJuOworCisJbGdzOGdsNV93cml0ZV9yZWcoc3RhdGUsIFJFR183RCwgbGdzOGdsNV9yZWFkX3JlZyhzdGF0ZSwgUkVHX0EyKSk7CisJbGdzOGdsNV9zb2Z0X3Jlc2V0KHN0YXRlKTsKK30KKworCitzdGF0aWMgaW50CitsZ3M4Z2w1X2luaXQoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUpCit7CisJc3RydWN0IGxnczhnbDVfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisKKwlkcHJpbnRrKCIlc1xuIiwgX19mdW5jX18pOworCisJbGdzOGdsNV91cGRhdGVfYWx0X3JlZyhzdGF0ZSwgMHhjMiwgMHgyOCk7CisJbGdzOGdsNV9zb2Z0X3Jlc2V0KHN0YXRlKTsKKwlsZ3M4Z2w1X3VwZGF0ZV9yZWcoc3RhdGUsIFJFR18wNywgMHgxMCk7CisJbGdzOGdsNV91cGRhdGVfcmVnKHN0YXRlLCBSRUdfMDcsIDB4MTApOworCWxnczhnbDVfd3JpdGVfcmVnKHN0YXRlLCBSRUdfMDksIDB4MGUpOworCWxnczhnbDVfd3JpdGVfcmVnKHN0YXRlLCBSRUdfMEEsIDB4ZTUpOworCWxnczhnbDVfd3JpdGVfcmVnKHN0YXRlLCBSRUdfMEIsIDB4MzUpOworCWxnczhnbDVfd3JpdGVfcmVnKHN0YXRlLCBSRUdfMEMsIDB4MzApOworCisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIGludAorbGdzOGdsNV9yZWFkX3N0YXR1cyhzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgZmVfc3RhdHVzX3QgKnN0YXR1cykKK3sKKwlzdHJ1Y3QgbGdzOGdsNV9zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKwl1OCBsZXZlbCA9IGxnczhnbDVfcmVhZF9yZWcoc3RhdGUsIFJFR19TVFJFTkdUSCk7CisJdTggZmxhZ3MgPSBsZ3M4Z2w1X3JlYWRfcmVnKHN0YXRlLCBSRUdfU1RBVFVTKTsKKworCSpzdGF0dXMgPSAwOworCisJaWYgKChsZXZlbCAmIFJFR19TVFJFTkdUSF9NQVNLKSA+IDApCisJCSpzdGF0dXMgfD0gRkVfSEFTX1NJR05BTDsKKwlpZiAobGV2ZWwgJiBSRUdfU1RSRU5HVEhfQ0FSUklFUikKKwkJKnN0YXR1cyB8PSBGRV9IQVNfQ0FSUklFUjsKKwlpZiAoZmxhZ3MgJiBSRUdfU1RBVFVTX1NZTkMpCisJCSpzdGF0dXMgfD0gRkVfSEFTX1NZTkM7CisJaWYgKGZsYWdzICYgUkVHX1NUQVRVU19MT0NLKQorCQkqc3RhdHVzIHw9IEZFX0hBU19MT0NLOworCisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIGludAorbGdzOGdsNV9yZWFkX2JlcihzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgdTMyICpiZXIpCit7CisJKmJlciA9IDA7CisKKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMgaW50CitsZ3M4Z2w1X3JlYWRfc2lnbmFsX3N0cmVuZ3RoKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCB1MTYgKnNpZ25hbF9zdHJlbmd0aCkKK3sKKwlzdHJ1Y3QgbGdzOGdsNV9zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKwl1OCBsZXZlbCA9IGxnczhnbDVfcmVhZF9yZWcoc3RhdGUsIFJFR19TVFJFTkdUSCk7CisJKnNpZ25hbF9zdHJlbmd0aCA9IChsZXZlbCAmIFJFR19TVFJFTkdUSF9NQVNLKSA8PCA4OworCisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIGludAorbGdzOGdsNV9yZWFkX3NucihzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgdTE2ICpzbnIpCit7CisJc3RydWN0IGxnczhnbDVfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisJdTggbGV2ZWwgPSBsZ3M4Z2w1X3JlYWRfcmVnKHN0YXRlLCBSRUdfU1RSRU5HVEgpOworCSpzbnIgPSAobGV2ZWwgJiBSRUdfU1RSRU5HVEhfTUFTSykgPDwgODsKKworCXJldHVybiAwOworfQorCisKK3N0YXRpYyBpbnQKK2xnczhnbDVfcmVhZF91Y2Jsb2NrcyhzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgdTMyICp1Y2Jsb2NrcykKK3sKKwkqdWNibG9ja3MgPSAwOworCisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIGludAorbGdzOGdsNV9zZXRfZnJvbnRlbmQoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsCisJCXN0cnVjdCBkdmJfZnJvbnRlbmRfcGFyYW1ldGVycyAqcCkKK3sKKwlzdHJ1Y3QgbGdzOGdsNV9zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKworCWRwcmludGsoIiVzXG4iLCBfX2Z1bmNfXyk7CisKKwlpZiAocC0+dS5vZmRtLmJhbmR3aWR0aCAhPSBCQU5EV0lEVEhfOF9NSFopCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKGZlLT5vcHMudHVuZXJfb3BzLnNldF9wYXJhbXMpIHsKKwkJZmUtPm9wcy50dW5lcl9vcHMuc2V0X3BhcmFtcyhmZSwgcCk7CisJCWlmIChmZS0+b3BzLmkyY19nYXRlX2N0cmwpCisJCQlmZS0+b3BzLmkyY19nYXRlX2N0cmwoZmUsIDApOworCX0KKworCS8qIGxnczhnbDVfc2V0X2ludmVyc2lvbihzdGF0ZSwgcC0+aW52ZXJzaW9uKTsgKi8KKworCWxnczhnbDVfc3RhcnRfZGVtb2Qoc3RhdGUpOworCisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIGludAorbGdzOGdsNV9nZXRfZnJvbnRlbmQoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsCisJCXN0cnVjdCBkdmJfZnJvbnRlbmRfcGFyYW1ldGVycyAqcCkKK3sKKwlzdHJ1Y3QgbGdzOGdsNV9zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKwl1OCBpbnYgPSBsZ3M4Z2w1X3JlYWRfcmVnKHN0YXRlLCBSRUdfSU5WRVJTSU9OKTsKKwlzdHJ1Y3QgZHZiX29mZG1fcGFyYW1ldGVycyAqbyA9ICZwLT51Lm9mZG07CisKKwlwLT5pbnZlcnNpb24gPSAoaW52ICYgUkVHX0lOVkVSU0lPTl9PTikgPyBJTlZFUlNJT05fT04gOiBJTlZFUlNJT05fT0ZGOworCisJby0+Y29kZV9yYXRlX0hQID0gRkVDXzFfMjsKKwlvLT5jb2RlX3JhdGVfTFAgPSBGRUNfN184OworCW8tPmd1YXJkX2ludGVydmFsID0gR1VBUkRfSU5URVJWQUxfMV8zMjsKKwlvLT50cmFuc21pc3Npb25fbW9kZSA9IFRSQU5TTUlTU0lPTl9NT0RFXzJLOworCW8tPmNvbnN0ZWxsYXRpb24gPSBRQU1fNjQ7CisJby0+aGllcmFyY2h5X2luZm9ybWF0aW9uID0gSElFUkFSQ0hZX05PTkU7CisJby0+YmFuZHdpZHRoID0gQkFORFdJRFRIXzhfTUhaOworCisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIGludAorbGdzOGdsNV9nZXRfdHVuZV9zZXR0aW5ncyhzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwKKwkJc3RydWN0IGR2Yl9mcm9udGVuZF90dW5lX3NldHRpbmdzICpmZXNldHRpbmdzKQoreworCWZlc2V0dGluZ3MtPm1pbl9kZWxheV9tcyA9IDI0MDsKKwlmZXNldHRpbmdzLT5zdGVwX3NpemUgICAgPSAwOworCWZlc2V0dGluZ3MtPm1heF9kcmlmdCAgICA9IDA7CisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIHZvaWQKK2xnczhnbDVfcmVsZWFzZShzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSkKK3sKKwlzdHJ1Y3QgbGdzOGdsNV9zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKwlrZnJlZShzdGF0ZSk7Cit9CisKKworc3RhdGljIHN0cnVjdCBkdmJfZnJvbnRlbmRfb3BzIGxnczhnbDVfb3BzOworCisKK3N0cnVjdCBkdmJfZnJvbnRlbmQqCitsZ3M4Z2w1X2F0dGFjaChjb25zdCBzdHJ1Y3QgbGdzOGdsNV9jb25maWcgKmNvbmZpZywgc3RydWN0IGkyY19hZGFwdGVyICppMmMpCit7CisJc3RydWN0IGxnczhnbDVfc3RhdGUgKnN0YXRlID0gTlVMTDsKKworCWRwcmludGsoIiVzXG4iLCBfX2Z1bmNfXyk7CisKKwkvKiBBbGxvY2F0ZSBtZW1vcnkgZm9yIHRoZSBpbnRlcm5hbCBzdGF0ZSAqLworCXN0YXRlID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGxnczhnbDVfc3RhdGUpLCBHRlBfS0VSTkVMKTsKKwlpZiAoc3RhdGUgPT0gTlVMTCkKKwkJZ290byBlcnJvcjsKKworCS8qIFNldHVwIHRoZSBzdGF0ZSAqLworCXN0YXRlLT5jb25maWcgPSBjb25maWc7CisJc3RhdGUtPmkyYyAgICA9IGkyYzsKKworCS8qIENoZWNrIGlmIHRoZSBkZW1vZCBpcyB0aGVyZSAqLworCWlmIChsZ3M4Z2w1X3JlYWRfcmVnKHN0YXRlLCBSRUdfUkVTRVQpIDwgMCkKKwkJZ290byBlcnJvcjsKKworCS8qIENyZWF0ZSBkdmJfZnJvbnRlbmQgKi8KKwltZW1jcHkoJnN0YXRlLT5mcm9udGVuZC5vcHMsICZsZ3M4Z2w1X29wcywKKwkJc2l6ZW9mKHN0cnVjdCBkdmJfZnJvbnRlbmRfb3BzKSk7CisJc3RhdGUtPmZyb250ZW5kLmRlbW9kdWxhdG9yX3ByaXYgPSBzdGF0ZTsKKwlyZXR1cm4gJnN0YXRlLT5mcm9udGVuZDsKKworZXJyb3I6CisJa2ZyZWUoc3RhdGUpOworCXJldHVybiBOVUxMOworfQorRVhQT1JUX1NZTUJPTChsZ3M4Z2w1X2F0dGFjaCk7CisKKworc3RhdGljIHN0cnVjdCBkdmJfZnJvbnRlbmRfb3BzIGxnczhnbDVfb3BzID0geworCS5pbmZvID0geworCQkubmFtZQkJCT0gIkxlZ2VuZCBTaWxpY29uIExHUy04R0w1IERNQi1USCIsCisJCS50eXBlCQkJPSBGRV9PRkRNLAorCQkuZnJlcXVlbmN5X21pbgkJPSA0NzQwMDAwMDAsCisJCS5mcmVxdWVuY3lfbWF4CQk9IDg1ODAwMDAwMCwKKwkJLmZyZXF1ZW5jeV9zdGVwc2l6ZQk9IDEwMDAwLAorCQkuZnJlcXVlbmN5X3RvbGVyYW5jZQk9IDAsCisJCS5jYXBzID0gRkVfQ0FOX0ZFQ19BVVRPIHwKKwkJCUZFX0NBTl9RUFNLIHwgRkVfQ0FOX1FBTV8xNiB8IEZFX0NBTl9RQU1fMzIgfAorCQkJRkVfQ0FOX1FBTV82NCB8IEZFX0NBTl9RQU1fQVVUTyB8CisJCQlGRV9DQU5fVFJBTlNNSVNTSU9OX01PREVfQVVUTyB8CisJCQlGRV9DQU5fQkFORFdJRFRIX0FVVE8gfAorCQkJRkVfQ0FOX0dVQVJEX0lOVEVSVkFMX0FVVE8gfAorCQkJRkVfQ0FOX0hJRVJBUkNIWV9BVVRPIHwKKwkJCUZFX0NBTl9SRUNPVkVSCisJfSwKKworCS5yZWxlYXNlID0gbGdzOGdsNV9yZWxlYXNlLAorCisJLmluaXQgPSBsZ3M4Z2w1X2luaXQsCisKKwkuc2V0X2Zyb250ZW5kID0gbGdzOGdsNV9zZXRfZnJvbnRlbmQsCisJLmdldF9mcm9udGVuZCA9IGxnczhnbDVfZ2V0X2Zyb250ZW5kLAorCS5nZXRfdHVuZV9zZXR0aW5ncyA9IGxnczhnbDVfZ2V0X3R1bmVfc2V0dGluZ3MsCisKKwkucmVhZF9zdGF0dXMgPSBsZ3M4Z2w1X3JlYWRfc3RhdHVzLAorCS5yZWFkX2JlciA9IGxnczhnbDVfcmVhZF9iZXIsCisJLnJlYWRfc2lnbmFsX3N0cmVuZ3RoID0gbGdzOGdsNV9yZWFkX3NpZ25hbF9zdHJlbmd0aCwKKwkucmVhZF9zbnIgPSBsZ3M4Z2w1X3JlYWRfc25yLAorCS5yZWFkX3VjYmxvY2tzID0gbGdzOGdsNV9yZWFkX3VjYmxvY2tzLAorfTsKKworCittb2R1bGVfcGFyYW0oZGVidWcsIGludCwgMDY0NCk7CitNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiVHVybiBvbi9vZmYgZnJvbnRlbmQgZGVidWdnaW5nIChkZWZhdWx0Om9mZikuIik7CisKK01PRFVMRV9ERVNDUklQVElPTigiTGVnZW5kIFNpbGljb24gTEdTLThHTDUgRE1CLVRIIERlbW9kdWxhdG9yIGRyaXZlciIpOworTU9EVUxFX0FVVEhPUigiVGltb3RoeSBMZWUiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9sZ3M4Z2w1LmggYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvbGdzOGdsNS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQxNDE3Njc4Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2xnczhnbDUuaApAQCAtMCwwICsxLDQ1IEBACisvKgorICAgIExlZ2VuZCBTaWxpY29uIExHUy04R0w1IERNQi1USCBPRkRNIGRlbW9kdWxhdG9yIGRyaXZlcgorCisgICAgQ29weXJpZ2h0IChDKSAyMDA4IFNpcml1cyBJbnRlcm5hdGlvbmFsIChIb25nIEtvbmcpIExpbWl0ZWQKKwlUaW1vdGh5IExlZSA8dGltb3RoeS5sZWVAc2lyaXVzaGsuY29tPgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisKKyovCisKKyNpZm5kZWYgTEdTOEdMNV9ICisjZGVmaW5lIExHUzhHTDVfSAorCisjaW5jbHVkZSA8bGludXgvZHZiL2Zyb250ZW5kLmg+CisKK3N0cnVjdCBsZ3M4Z2w1X2NvbmZpZyB7CisJLyogdGhlIGRlbW9kdWxhdG9yJ3MgaTJjIGFkZHJlc3MgKi8KKwl1OCBkZW1vZF9hZGRyZXNzOworfTsKKworI2lmIGRlZmluZWQoQ09ORklHX0RWQl9MR1M4R0w1KSB8fCBcCisJKGRlZmluZWQoQ09ORklHX0RWQl9MR1M4R0w1X01PRFVMRSkgJiYgZGVmaW5lZChNT0RVTEUpKQorZXh0ZXJuIHN0cnVjdCBkdmJfZnJvbnRlbmQgKmxnczhnbDVfYXR0YWNoKAorCWNvbnN0IHN0cnVjdCBsZ3M4Z2w1X2NvbmZpZyAqY29uZmlnLCBzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyYyk7CisjZWxzZQorc3RhdGljIGlubGluZSBzdHJ1Y3QgZHZiX2Zyb250ZW5kICpsZ3M4Z2w1X2F0dGFjaCgKKwljb25zdCBzdHJ1Y3QgbGdzOGdsNV9jb25maWcgKmNvbmZpZywgc3RydWN0IGkyY19hZGFwdGVyICppMmMpIHsKKwlwcmludGsoS0VSTl9XQVJOSU5HICIlczogZHJpdmVyIGRpc2FibGVkIGJ5IEtjb25maWdcbiIsIF9fZnVuY19fKTsKKwlyZXR1cm4gTlVMTDsKK30KKyNlbmRpZiAvKiBDT05GSUdfRFZCX0xHUzhHTDUgKi8KKworI2VuZGlmIC8qIExHUzhHTDVfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL254dDIwMHguYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9ueHQyMDB4LmMKaW5kZXggYWYyOTgzNS4uYTg0MjllYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL254dDIwMHguYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvbnh0MjAweC5jCkBAIC04MCw3ICs4MCw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB1OCBpMmNfcmVhZGJ5dGVzIChzdHJ1Y3Qgbnh0MjAweF9zdGF0ZSogc3RhdGUsIHU4IGFkZHIsIHU4KiBidWYsIHU4IGxlbikKK3N0YXRpYyBpbnQgaTJjX3JlYWRieXRlcyhzdHJ1Y3Qgbnh0MjAweF9zdGF0ZSAqc3RhdGUsIHU4IGFkZHIsIHU4ICpidWYsIHU4IGxlbikKIHsKIAlpbnQgZXJyOwogCXN0cnVjdCBpMmNfbXNnIG1zZyA9IHsgLmFkZHIgPSBhZGRyLCAuZmxhZ3MgPSBJMkNfTV9SRCwgLmJ1ZiA9IGJ1ZiwgLmxlbiA9IGxlbiB9OwpAQCAtMTExLDcgKzExMSw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB1OCBueHQyMDB4X3JlYWRieXRlcyAoc3RydWN0IG54dDIwMHhfc3RhdGUqIHN0YXRlLCB1OCByZWcsIHU4KiBidWYsIHU4IGxlbikKK3N0YXRpYyBpbnQgbnh0MjAweF9yZWFkYnl0ZXMoc3RydWN0IG54dDIwMHhfc3RhdGUgKnN0YXRlLCB1OCByZWcsIHU4ICpidWYsIHU4IGxlbikKIHsKIAl1OCByZWcyIFtdID0geyByZWcgfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL29yNTEyMTEuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9vcjUxMjExLmMKaW5kZXggNmFmZTEyYS4uMTZjZjJmZGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9vcjUxMjExLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL29yNTEyMTEuYwpAQCAtODgsNyArODgsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdTggaTJjX3JlYWRieXRlcyAoc3RydWN0IG9yNTEyMTFfc3RhdGUqIHN0YXRlLCB1OCByZWcsIHU4KiBidWYsIGludCBsZW4pCitzdGF0aWMgaW50IGkyY19yZWFkYnl0ZXMoc3RydWN0IG9yNTEyMTFfc3RhdGUgKnN0YXRlLCB1OCByZWcsIHU4ICpidWYsIGludCBsZW4pCiB7CiAJaW50IGVycjsKIAlzdHJ1Y3QgaTJjX21zZyBtc2c7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvczVoMTQwOS5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3M1aDE0MDkuYwppbmRleCA3NTAwYTFjLi5jZjRkODkzIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvczVoMTQwOS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zNWgxNDA5LmMKQEAgLTMwLDEwICszMCwxMCBAQAogCiBzdHJ1Y3QgczVoMTQwOV9zdGF0ZSB7CiAKLQlzdHJ1Y3QgaTJjX2FkYXB0ZXIqIGkyYzsKKwlzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyYzsKIAogCS8qIGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MgKi8KLQljb25zdCBzdHJ1Y3QgczVoMTQwOV9jb25maWcqIGNvbmZpZzsKKwljb25zdCBzdHJ1Y3QgczVoMTQwOV9jb25maWcgKmNvbmZpZzsKIAogCXN0cnVjdCBkdmJfZnJvbnRlbmQgZnJvbnRlbmQ7CiAKQEAgLTQ4LDYgKzQ4LDkgQEAKIH07CiAKIHN0YXRpYyBpbnQgZGVidWc7Cittb2R1bGVfcGFyYW0oZGVidWcsIGludCwgMDY0NCk7CitNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiRW5hYmxlIHZlcmJvc2UgZGVidWcgbWVzc2FnZXMiKTsKKwogI2RlZmluZSBkcHJpbnRrCWlmIChkZWJ1ZykgcHJpbnRrCiAKIC8qIFJlZ2lzdGVyIHZhbHVlcyB0byBpbml0aWFsaXNlIHRoZSBkZW1vZCwgdGhpcyB3aWxsIHNldCBWU0IgYnkgZGVmYXVsdCAqLwpAQCAtMjk5LDEwICszMDIsMTAgQEAKIH07CiAKIC8qIDggYml0IHJlZ2lzdGVycywgMTYgYml0IHZhbHVlcyAqLwotc3RhdGljIGludCBzNWgxNDA5X3dyaXRlcmVnKHN0cnVjdCBzNWgxNDA5X3N0YXRlKiBzdGF0ZSwgdTggcmVnLCB1MTYgZGF0YSkKK3N0YXRpYyBpbnQgczVoMTQwOV93cml0ZXJlZyhzdHJ1Y3QgczVoMTQwOV9zdGF0ZSAqc3RhdGUsIHU4IHJlZywgdTE2IGRhdGEpCiB7CiAJaW50IHJldDsKLQl1OCBidWYgW10gPSB7IHJlZywgZGF0YSA+PiA4LCAgZGF0YSAmIDB4ZmYgfTsKKwl1OCBidWZbXSA9IHsgcmVnLCBkYXRhID4+IDgsICBkYXRhICYgMHhmZiB9OwogCiAJc3RydWN0IGkyY19tc2cgbXNnID0geyAuYWRkciA9IHN0YXRlLT5jb25maWctPmRlbW9kX2FkZHJlc3MsCiAJCQkgICAgICAgLmZsYWdzID0gMCwgLmJ1ZiA9IGJ1ZiwgLmxlbiA9IDMgfTsKQEAgLTMxMCwxOSArMzEzLDE5IEBACiAJcmV0ID0gaTJjX3RyYW5zZmVyKHN0YXRlLT5pMmMsICZtc2csIDEpOwogCiAJaWYgKHJldCAhPSAxKQotCQlwcmludGsoIiVzOiB3cml0ZXJlZyBlcnJvciAocmVnID09IDB4JTAyeCwgdmFsID09IDB4JTA0eCwgIgorCQlwcmludGsoS0VSTl9FUlIgIiVzOiBlcnJvciAocmVnID09IDB4JTAyeCwgdmFsID09IDB4JTA0eCwgIgogCQkgICAgICAgInJldCA9PSAlaSlcbiIsIF9fZnVuY19fLCByZWcsIGRhdGEsIHJldCk7CiAKIAlyZXR1cm4gKHJldCAhPSAxKSA/IC0xIDogMDsKIH0KIAotc3RhdGljIHUxNiBzNWgxNDA5X3JlYWRyZWcoc3RydWN0IHM1aDE0MDlfc3RhdGUqIHN0YXRlLCB1OCByZWcpCitzdGF0aWMgdTE2IHM1aDE0MDlfcmVhZHJlZyhzdHJ1Y3QgczVoMTQwOV9zdGF0ZSAqc3RhdGUsIHU4IHJlZykKIHsKIAlpbnQgcmV0OwotCXU4IGIwIFtdID0geyByZWcgfTsKLQl1OCBiMSBbXSA9IHsgMCwgMCB9OworCXU4IGIwW10gPSB7IHJlZyB9OworCXU4IGIxW10gPSB7IDAsIDAgfTsKIAotCXN0cnVjdCBpMmNfbXNnIG1zZyBbXSA9IHsKKwlzdHJ1Y3QgaTJjX21zZyBtc2dbXSA9IHsKIAkJeyAuYWRkciA9IHN0YXRlLT5jb25maWctPmRlbW9kX2FkZHJlc3MsIC5mbGFncyA9IDAsCiAJCSAgLmJ1ZiA9IGIwLCAubGVuID0gMSB9LAogCQl7IC5hZGRyID0gc3RhdGUtPmNvbmZpZy0+ZGVtb2RfYWRkcmVzcywgLmZsYWdzID0gSTJDX01fUkQsCkBAIC0zMzUsOSArMzM4LDkgQEAKIAlyZXR1cm4gKGIxWzBdIDw8IDgpIHwgYjFbMV07CiB9CiAKLXN0YXRpYyBpbnQgczVoMTQwOV9zb2Z0cmVzZXQoc3RydWN0IGR2Yl9mcm9udGVuZCogZmUpCitzdGF0aWMgaW50IHM1aDE0MDlfc29mdHJlc2V0KHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlKQogewotCXN0cnVjdCBzNWgxNDA5X3N0YXRlKiBzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCXN0cnVjdCBzNWgxNDA5X3N0YXRlICpzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OwogCiAJZHByaW50aygiJXMoKVxuIiwgX19mdW5jX18pOwogCkBAIC0zNDksMTEgKzM1MiwxMSBAQAogfQogCiAjZGVmaW5lIFM1SDE0MDlfVlNCX0lGX0ZSRVEgNTM4MAotI2RlZmluZSBTNUgxNDA5X1FBTV9JRl9GUkVRIHN0YXRlLT5jb25maWctPnFhbV9pZgorI2RlZmluZSBTNUgxNDA5X1FBTV9JRl9GUkVRIChzdGF0ZS0+Y29uZmlnLT5xYW1faWYpCiAKLXN0YXRpYyBpbnQgczVoMTQwOV9zZXRfaWZfZnJlcShzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBmZSwgaW50IEtIeikKK3N0YXRpYyBpbnQgczVoMTQwOV9zZXRfaWZfZnJlcShzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgaW50IEtIeikKIHsKLQlzdHJ1Y3QgczVoMTQwOV9zdGF0ZSogc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKwlzdHJ1Y3QgczVoMTQwOV9zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKIAogCWRwcmludGsoIiVzKCVkIEtIeilcbiIsIF9fZnVuY19fLCBLSHopOwogCkBAIC0zNzYsMjYgKzM3OSwyNiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHM1aDE0MDlfc2V0X3NwZWN0cmFsaW52ZXJzaW9uKHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlLCBpbnQgaW52ZXJ0ZWQpCitzdGF0aWMgaW50IHM1aDE0MDlfc2V0X3NwZWN0cmFsaW52ZXJzaW9uKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCBpbnQgaW52ZXJ0ZWQpCiB7Ci0Jc3RydWN0IHM1aDE0MDlfc3RhdGUqIHN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisJc3RydWN0IHM1aDE0MDlfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CiAKIAlkcHJpbnRrKCIlcyglZClcbiIsIF9fZnVuY19fLCBpbnZlcnRlZCk7CiAKLQlpZihpbnZlcnRlZCA9PSAxKQorCWlmIChpbnZlcnRlZCA9PSAxKQogCQlyZXR1cm4gczVoMTQwOV93cml0ZXJlZyhzdGF0ZSwgMHgxYiwgMHgxMTAxKTsgLyogSW52ZXJ0ZWQgKi8KIAllbHNlCiAJCXJldHVybiBzNWgxNDA5X3dyaXRlcmVnKHN0YXRlLCAweDFiLCAweDAxMTApOyAvKiBOb3JtYWwgKi8KIH0KIAotc3RhdGljIGludCBzNWgxNDA5X2VuYWJsZV9tb2R1bGF0aW9uKHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlLAorc3RhdGljIGludCBzNWgxNDA5X2VuYWJsZV9tb2R1bGF0aW9uKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLAogCQkJCSAgICAgZmVfbW9kdWxhdGlvbl90IG0pCiB7Ci0Jc3RydWN0IHM1aDE0MDlfc3RhdGUqIHN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisJc3RydWN0IHM1aDE0MDlfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CiAKIAlkcHJpbnRrKCIlcygweCUwOHgpXG4iLCBfX2Z1bmNfXywgbSk7CiAKLQlzd2l0Y2gobSkgeworCXN3aXRjaCAobSkgewogCWNhc2UgVlNCXzg6CiAJCWRwcmludGsoIiVzKCkgVlNCXzhcbiIsIF9fZnVuY19fKTsKIAkJaWYgKHN0YXRlLT5pZl9mcmVxICE9IFM1SDE0MDlfVlNCX0lGX0ZSRVEpCkBAIC00MjIsOSArNDI1LDkgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBzNWgxNDA5X2kyY19nYXRlX2N0cmwoc3RydWN0IGR2Yl9mcm9udGVuZCogZmUsIGludCBlbmFibGUpCitzdGF0aWMgaW50IHM1aDE0MDlfaTJjX2dhdGVfY3RybChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgaW50IGVuYWJsZSkKIHsKLQlzdHJ1Y3QgczVoMTQwOV9zdGF0ZSogc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKwlzdHJ1Y3QgczVoMTQwOV9zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKIAogCWRwcmludGsoIiVzKCVkKVxuIiwgX19mdW5jX18sIGVuYWJsZSk7CiAKQEAgLTQzNCw5ICs0MzcsOSBAQAogCQlyZXR1cm4gczVoMTQwOV93cml0ZXJlZyhzdGF0ZSwgMHhmMywgMCk7CiB9CiAKLXN0YXRpYyBpbnQgczVoMTQwOV9zZXRfZ3BpbyhzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBmZSwgaW50IGVuYWJsZSkKK3N0YXRpYyBpbnQgczVoMTQwOV9zZXRfZ3BpbyhzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgaW50IGVuYWJsZSkKIHsKLQlzdHJ1Y3QgczVoMTQwOV9zdGF0ZSogc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKwlzdHJ1Y3QgczVoMTQwOV9zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKIAogCWRwcmludGsoIiVzKCVkKVxuIiwgX19mdW5jX18sIGVuYWJsZSk7CiAKQEAgLTQ0OCwxOCArNDUxLDE4IEBACiAJCQlzNWgxNDA5X3JlYWRyZWcoc3RhdGUsIDB4ZTMpICYgMHhmZWZmKTsKIH0KIAotc3RhdGljIGludCBzNWgxNDA5X3NsZWVwKHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlLCBpbnQgZW5hYmxlKQorc3RhdGljIGludCBzNWgxNDA5X3NsZWVwKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCBpbnQgZW5hYmxlKQogewotCXN0cnVjdCBzNWgxNDA5X3N0YXRlKiBzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCXN0cnVjdCBzNWgxNDA5X3N0YXRlICpzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OwogCiAJZHByaW50aygiJXMoJWQpXG4iLCBfX2Z1bmNfXywgZW5hYmxlKTsKIAogCXJldHVybiBzNWgxNDA5X3dyaXRlcmVnKHN0YXRlLCAweGYyLCBlbmFibGUpOwogfQogCi1zdGF0aWMgaW50IHM1aDE0MDlfcmVnaXN0ZXJfcmVzZXQoc3RydWN0IGR2Yl9mcm9udGVuZCogZmUpCitzdGF0aWMgaW50IHM1aDE0MDlfcmVnaXN0ZXJfcmVzZXQoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUpCiB7Ci0Jc3RydWN0IHM1aDE0MDlfc3RhdGUqIHN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisJc3RydWN0IHM1aDE0MDlfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CiAKIAlkcHJpbnRrKCIlcygpXG4iLCBfX2Z1bmNfXyk7CiAKQEAgLTQ4Myw3ICs0ODYsNyBAQAogCQlyZWcgJj0gMHhmZjsKIAogCQlzNWgxNDA5X3dyaXRlcmVnKHN0YXRlLCAweDk2LCAweDAwYyk7Ci0JCWlmICgocmVnIDwgMHgzOCkgfHwgKHJlZyA+IDB4NjgpICkgeworCQlpZiAoKHJlZyA8IDB4MzgpIHx8IChyZWcgPiAweDY4KSkgewogCQkJczVoMTQwOV93cml0ZXJlZyhzdGF0ZSwgMHg5MywgMHgzMzMyKTsKIAkJCXM1aDE0MDlfd3JpdGVyZWcoc3RhdGUsIDB4OWUsIDB4MmMzNyk7CiAJCX0gZWxzZSB7CkBAIC01MTQsNyArNTE3LDcgQEAKIAogCQkJczVoMTQwOV93cml0ZXJlZyhzdGF0ZSwgMHg5NiwgMHgyMCk7CiAJCQlzNWgxNDA5X3dyaXRlcmVnKHN0YXRlLCAweGFkLAotCQkJCSggKChyZWcxICYgMHhmMDAwKSA+PiA0KSB8IChyZWcyICYgMHhmMGZmKSkgKTsKKwkJCQkoKChyZWcxICYgMHhmMDAwKSA+PiA0KSB8IChyZWcyICYgMHhmMGZmKSkpOwogCQkJczVoMTQwOV93cml0ZXJlZyhzdGF0ZSwgMHhhYiwKIAkJCQlzNWgxNDA5X3JlYWRyZWcoc3RhdGUsIDB4YWIpICYgMHhlZmZlKTsKIAkJfQpAQCAtNTI5LDEwICs1MzIsMTAgQEAKIH0KIAogLyogVGFsayB0byB0aGUgZGVtb2QsIHNldCB0aGUgRkVDLCBHVUFSRCwgUUFNIHNldHRpbmdzIGV0YyAqLwotc3RhdGljIGludCBzNWgxNDA5X3NldF9mcm9udGVuZCAoc3RydWN0IGR2Yl9mcm9udGVuZCogZmUsCitzdGF0aWMgaW50IHM1aDE0MDlfc2V0X2Zyb250ZW5kKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLAogCQkJCSBzdHJ1Y3QgZHZiX2Zyb250ZW5kX3BhcmFtZXRlcnMgKnApCiB7Ci0Jc3RydWN0IHM1aDE0MDlfc3RhdGUqIHN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisJc3RydWN0IHM1aDE0MDlfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CiAKIAlkcHJpbnRrKCIlcyhmcmVxdWVuY3k9JWQpXG4iLCBfX2Z1bmNfXywgcC0+ZnJlcXVlbmN5KTsKIApAQCAtNTQ2LDkgKzU0OSwxMSBAQAogCW1zbGVlcCgxMDApOwogCiAJaWYgKGZlLT5vcHMudHVuZXJfb3BzLnNldF9wYXJhbXMpIHsKLQkJaWYgKGZlLT5vcHMuaTJjX2dhdGVfY3RybCkgZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKGZlLCAxKTsKKwkJaWYgKGZlLT5vcHMuaTJjX2dhdGVfY3RybCkKKwkJCWZlLT5vcHMuaTJjX2dhdGVfY3RybChmZSwgMSk7CiAJCWZlLT5vcHMudHVuZXJfb3BzLnNldF9wYXJhbXMoZmUsIHApOwotCQlpZiAoZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKSBmZS0+b3BzLmkyY19nYXRlX2N0cmwoZmUsIDApOworCQlpZiAoZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKQorCQkJZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKGZlLCAwKTsKIAl9CiAKIAkvKiBPcHRpbWl6ZSB0aGUgZGVtb2QgZm9yIFFBTSAqLwpAQCAtNTkyLDE3ICs1OTcsMTcgQEAKIAogLyogUmVzZXQgdGhlIGRlbW9kIGhhcmR3YXJlIGFuZCByZXNldCBhbGwgb2YgdGhlIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXJzCiAgICB0byBhIGRlZmF1bHQgc3RhdGUuICovCi1zdGF0aWMgaW50IHM1aDE0MDlfaW5pdCAoc3RydWN0IGR2Yl9mcm9udGVuZCogZmUpCitzdGF0aWMgaW50IHM1aDE0MDlfaW5pdChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSkKIHsKIAlpbnQgaTsKIAotCXN0cnVjdCBzNWgxNDA5X3N0YXRlKiBzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCXN0cnVjdCBzNWgxNDA5X3N0YXRlICpzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OwogCWRwcmludGsoIiVzKClcbiIsIF9fZnVuY19fKTsKIAogCXM1aDE0MDlfc2xlZXAoZmUsIDApOwogCXM1aDE0MDlfcmVnaXN0ZXJfcmVzZXQoZmUpOwogCi0JZm9yIChpPTA7IGkgPCBBUlJBWV9TSVpFKGluaXRfdGFiKTsgaSsrKQorCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGluaXRfdGFiKTsgaSsrKQogCQlzNWgxNDA5X3dyaXRlcmVnKHN0YXRlLCBpbml0X3RhYltpXS5yZWcsIGluaXRfdGFiW2ldLmRhdGEpOwogCiAJLyogVGhlIGRhdGFzaGVldCBzYXlzIHRoYXQgYWZ0ZXIgaW5pdGlhbGlzYXRpb24sIFZTQiBpcyBkZWZhdWx0ICovCkBAIC02MjcsOSArNjMyLDkgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBzNWgxNDA5X3JlYWRfc3RhdHVzKHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlLCBmZV9zdGF0dXNfdCogc3RhdHVzKQorc3RhdGljIGludCBzNWgxNDA5X3JlYWRfc3RhdHVzKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCBmZV9zdGF0dXNfdCAqc3RhdHVzKQogewotCXN0cnVjdCBzNWgxNDA5X3N0YXRlKiBzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCXN0cnVjdCBzNWgxNDA5X3N0YXRlICpzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OwogCXUxNiByZWc7CiAJdTMyIHR1bmVyX3N0YXR1cyA9IDA7CiAKQEAgLTYzNywxMiArNjQyLDEyIEBACiAKIAkvKiBHZXQgdGhlIGRlbW9kdWxhdG9yIHN0YXR1cyAqLwogCXJlZyA9IHM1aDE0MDlfcmVhZHJlZyhzdGF0ZSwgMHhmMSk7Ci0JaWYocmVnICYgMHgxMDAwKQorCWlmIChyZWcgJiAweDEwMDApCiAJCSpzdGF0dXMgfD0gRkVfSEFTX1ZJVEVSQkk7Ci0JaWYocmVnICYgMHg4MDAwKQorCWlmIChyZWcgJiAweDgwMDApCiAJCSpzdGF0dXMgfD0gRkVfSEFTX0xPQ0sgfCBGRV9IQVNfU1lOQzsKIAotCXN3aXRjaChzdGF0ZS0+Y29uZmlnLT5zdGF0dXNfbW9kZSkgeworCXN3aXRjaCAoc3RhdGUtPmNvbmZpZy0+c3RhdHVzX21vZGUpIHsKIAljYXNlIFM1SDE0MDlfREVNT0RMT0NLSU5HOgogCQlpZiAoKnN0YXR1cyAmIEZFX0hBU19WSVRFUkJJKQogCQkJKnN0YXR1cyB8PSBGRV9IQVNfQ0FSUklFUiB8IEZFX0hBU19TSUdOQUw7CkBAIC02NjgsMTIgKzY3MywxMiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHM1aDE0MDlfcWFtMjU2X2xvb2t1cF9zbnIoc3RydWN0IGR2Yl9mcm9udGVuZCogZmUsIHUxNiogc25yLCB1MTYgdikKK3N0YXRpYyBpbnQgczVoMTQwOV9xYW0yNTZfbG9va3VwX3NucihzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgdTE2ICpzbnIsIHUxNiB2KQogewogCWludCBpLCByZXQgPSAtRUlOVkFMOwogCWRwcmludGsoIiVzKClcbiIsIF9fZnVuY19fKTsKIAotCWZvciAoaT0wOyBpIDwgQVJSQVlfU0laRShxYW0yNTZfc25yX3RhYik7IGkrKykgeworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHFhbTI1Nl9zbnJfdGFiKTsgaSsrKSB7CiAJCWlmICh2IDwgcWFtMjU2X3Nucl90YWJbaV0udmFsKSB7CiAJCQkqc25yID0gcWFtMjU2X3Nucl90YWJbaV0uZGF0YTsKIAkJCXJldCA9IDA7CkBAIC02ODMsMTIgKzY4OCwxMiBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgczVoMTQwOV9xYW02NF9sb29rdXBfc25yKHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlLCB1MTYqIHNuciwgdTE2IHYpCitzdGF0aWMgaW50IHM1aDE0MDlfcWFtNjRfbG9va3VwX3NucihzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgdTE2ICpzbnIsIHUxNiB2KQogewogCWludCBpLCByZXQgPSAtRUlOVkFMOwogCWRwcmludGsoIiVzKClcbiIsIF9fZnVuY19fKTsKIAotCWZvciAoaT0wOyBpIDwgQVJSQVlfU0laRShxYW02NF9zbnJfdGFiKTsgaSsrKSB7CisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocWFtNjRfc25yX3RhYik7IGkrKykgewogCQlpZiAodiA8IHFhbTY0X3Nucl90YWJbaV0udmFsKSB7CiAJCQkqc25yID0gcWFtNjRfc25yX3RhYltpXS5kYXRhOwogCQkJcmV0ID0gMDsKQEAgLTY5OCwxMiArNzAzLDEyIEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBzNWgxNDA5X3ZzYl9sb29rdXBfc25yKHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlLCB1MTYqIHNuciwgdTE2IHYpCitzdGF0aWMgaW50IHM1aDE0MDlfdnNiX2xvb2t1cF9zbnIoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIHUxNiAqc25yLCB1MTYgdikKIHsKIAlpbnQgaSwgcmV0ID0gLUVJTlZBTDsKIAlkcHJpbnRrKCIlcygpXG4iLCBfX2Z1bmNfXyk7CiAKLQlmb3IgKGk9MDsgaSA8IEFSUkFZX1NJWkUodnNiX3Nucl90YWIpOyBpKyspIHsKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh2c2Jfc25yX3RhYik7IGkrKykgewogCQlpZiAodiA+IHZzYl9zbnJfdGFiW2ldLnZhbCkgewogCQkJKnNuciA9IHZzYl9zbnJfdGFiW2ldLmRhdGE7CiAJCQlyZXQgPSAwOwpAQCAtNzE0LDEzICs3MTksMTMgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IHM1aDE0MDlfcmVhZF9zbnIoc3RydWN0IGR2Yl9mcm9udGVuZCogZmUsIHUxNiogc25yKQorc3RhdGljIGludCBzNWgxNDA5X3JlYWRfc25yKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCB1MTYgKnNucikKIHsKLQlzdHJ1Y3QgczVoMTQwOV9zdGF0ZSogc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKwlzdHJ1Y3QgczVoMTQwOV9zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKIAl1MTYgcmVnOwogCWRwcmludGsoIiVzKClcbiIsIF9fZnVuY19fKTsKIAotCXN3aXRjaChzdGF0ZS0+Y3VycmVudF9tb2R1bGF0aW9uKSB7CisJc3dpdGNoIChzdGF0ZS0+Y3VycmVudF9tb2R1bGF0aW9uKSB7CiAJY2FzZSBRQU1fNjQ6CiAJCXJlZyA9IHM1aDE0MDlfcmVhZHJlZyhzdGF0ZSwgMHhmMCkgJiAweGZmOwogCQlyZXR1cm4gczVoMTQwOV9xYW02NF9sb29rdXBfc25yKGZlLCBzbnIsIHJlZyk7CkBAIC03MzcsMzAgKzc0MiwzMCBAQAogCXJldHVybiAtRUlOVkFMOwogfQogCi1zdGF0aWMgaW50IHM1aDE0MDlfcmVhZF9zaWduYWxfc3RyZW5ndGgoc3RydWN0IGR2Yl9mcm9udGVuZCogZmUsCi0JCQkJCXUxNiogc2lnbmFsX3N0cmVuZ3RoKQorc3RhdGljIGludCBzNWgxNDA5X3JlYWRfc2lnbmFsX3N0cmVuZ3RoKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLAorCQkJCQl1MTYgKnNpZ25hbF9zdHJlbmd0aCkKIHsKIAlyZXR1cm4gczVoMTQwOV9yZWFkX3NucihmZSwgc2lnbmFsX3N0cmVuZ3RoKTsKIH0KIAotc3RhdGljIGludCBzNWgxNDA5X3JlYWRfdWNibG9ja3Moc3RydWN0IGR2Yl9mcm9udGVuZCogZmUsIHUzMiogdWNibG9ja3MpCitzdGF0aWMgaW50IHM1aDE0MDlfcmVhZF91Y2Jsb2NrcyhzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgdTMyICp1Y2Jsb2NrcykKIHsKLQlzdHJ1Y3QgczVoMTQwOV9zdGF0ZSogc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKwlzdHJ1Y3QgczVoMTQwOV9zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKIAogCSp1Y2Jsb2NrcyA9IHM1aDE0MDlfcmVhZHJlZyhzdGF0ZSwgMHhiNSk7CiAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBzNWgxNDA5X3JlYWRfYmVyKHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlLCB1MzIqIGJlcikKK3N0YXRpYyBpbnQgczVoMTQwOV9yZWFkX2JlcihzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgdTMyICpiZXIpCiB7CiAJcmV0dXJuIHM1aDE0MDlfcmVhZF91Y2Jsb2NrcyhmZSwgYmVyKTsKIH0KIAotc3RhdGljIGludCBzNWgxNDA5X2dldF9mcm9udGVuZChzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBmZSwKK3N0YXRpYyBpbnQgczVoMTQwOV9nZXRfZnJvbnRlbmQoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsCiAJCQkJc3RydWN0IGR2Yl9mcm9udGVuZF9wYXJhbWV0ZXJzICpwKQogewotCXN0cnVjdCBzNWgxNDA5X3N0YXRlKiBzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCXN0cnVjdCBzNWgxNDA5X3N0YXRlICpzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OwogCiAJcC0+ZnJlcXVlbmN5ID0gc3RhdGUtPmN1cnJlbnRfZnJlcXVlbmN5OwogCXAtPnUudnNiLm1vZHVsYXRpb24gPSBzdGF0ZS0+Y3VycmVudF9tb2R1bGF0aW9uOwpAQCAtNzY4LDI1ICs3NzMsMjUgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBzNWgxNDA5X2dldF90dW5lX3NldHRpbmdzKHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlLAorc3RhdGljIGludCBzNWgxNDA5X2dldF90dW5lX3NldHRpbmdzKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLAogCQkJCSAgICAgc3RydWN0IGR2Yl9mcm9udGVuZF90dW5lX3NldHRpbmdzICp0dW5lKQogewogCXR1bmUtPm1pbl9kZWxheV9tcyA9IDEwMDA7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIHM1aDE0MDlfcmVsZWFzZShzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBmZSkKK3N0YXRpYyB2b2lkIHM1aDE0MDlfcmVsZWFzZShzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSkKIHsKLQlzdHJ1Y3QgczVoMTQwOV9zdGF0ZSogc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKwlzdHJ1Y3QgczVoMTQwOV9zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKIAlrZnJlZShzdGF0ZSk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgZHZiX2Zyb250ZW5kX29wcyBzNWgxNDA5X29wczsKIAotc3RydWN0IGR2Yl9mcm9udGVuZCogczVoMTQwOV9hdHRhY2goY29uc3Qgc3RydWN0IHM1aDE0MDlfY29uZmlnKiBjb25maWcsCi0JCQkJICAgIHN0cnVjdCBpMmNfYWRhcHRlciogaTJjKQorc3RydWN0IGR2Yl9mcm9udGVuZCAqczVoMTQwOV9hdHRhY2goY29uc3Qgc3RydWN0IHM1aDE0MDlfY29uZmlnICpjb25maWcsCisJCQkJICAgIHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjKQogewotCXN0cnVjdCBzNWgxNDA5X3N0YXRlKiBzdGF0ZSA9IE5VTEw7CisJc3RydWN0IHM1aDE0MDlfc3RhdGUgKnN0YXRlID0gTlVMTDsKIAl1MTYgcmVnOwogCiAJLyogYWxsb2NhdGUgbWVtb3J5IGZvciB0aGUgaW50ZXJuYWwgc3RhdGUgKi8KQEAgLTgyNSw2ICs4MzAsNyBAQAogCWtmcmVlKHN0YXRlKTsKIAlyZXR1cm4gTlVMTDsKIH0KK0VYUE9SVF9TWU1CT0woczVoMTQwOV9hdHRhY2gpOwogCiBzdGF0aWMgc3RydWN0IGR2Yl9mcm9udGVuZF9vcHMgczVoMTQwOV9vcHMgPSB7CiAKQEAgLTg1MCwxNCArODU2LDEwIEBACiAJLnJlbGVhc2UgICAgICAgICAgICAgID0gczVoMTQwOV9yZWxlYXNlLAogfTsKIAotbW9kdWxlX3BhcmFtKGRlYnVnLCBpbnQsIDA2NDQpOwotTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgIkVuYWJsZSB2ZXJib3NlIGRlYnVnIG1lc3NhZ2VzIik7Ci0KIE1PRFVMRV9ERVNDUklQVElPTigiU2Ftc3VuZyBTNUgxNDA5IFFBTS1CL0FUU0MgRGVtb2R1bGF0b3IgZHJpdmVyIik7CiBNT0RVTEVfQVVUSE9SKCJTdGV2ZW4gVG90aCIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogCi1FWFBPUlRfU1lNQk9MKHM1aDE0MDlfYXR0YWNoKTsKIAogLyoKICAqIExvY2FsIHZhcmlhYmxlczoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zNWgxNDA5LmggYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvczVoMTQwOS5oCmluZGV4IGQxYTFkMmUuLjA3MGQ5NzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zNWgxNDA5LmgKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3M1aDE0MDkuaApAQCAtMjQsOCArMjQsNyBAQAogCiAjaW5jbHVkZSA8bGludXgvZHZiL2Zyb250ZW5kLmg+CiAKLXN0cnVjdCBzNWgxNDA5X2NvbmZpZwoteworc3RydWN0IHM1aDE0MDlfY29uZmlnIHsKIAkvKiB0aGUgZGVtb2R1bGF0b3IncyBpMmMgYWRkcmVzcyAqLwogCXU4IGRlbW9kX2FkZHJlc3M7CiAKQEAgLTYwLDEyICs1OSwxNCBAQAogCXUxNiBtcGVnX3RpbWluZzsKIH07CiAKLSNpZiBkZWZpbmVkKENPTkZJR19EVkJfUzVIMTQwOSkgfHwgKGRlZmluZWQoQ09ORklHX0RWQl9TNUgxNDA5X01PRFVMRSkgJiYgZGVmaW5lZChNT0RVTEUpKQotZXh0ZXJuIHN0cnVjdCBkdmJfZnJvbnRlbmQqIHM1aDE0MDlfYXR0YWNoKGNvbnN0IHN0cnVjdCBzNWgxNDA5X2NvbmZpZyogY29uZmlnLAotCQkJCQkgICBzdHJ1Y3QgaTJjX2FkYXB0ZXIqIGkyYyk7CisjaWYgZGVmaW5lZChDT05GSUdfRFZCX1M1SDE0MDkpIHx8IChkZWZpbmVkKENPTkZJR19EVkJfUzVIMTQwOV9NT0RVTEUpIFwKKwkmJiBkZWZpbmVkKE1PRFVMRSkpCitleHRlcm4gc3RydWN0IGR2Yl9mcm9udGVuZCAqczVoMTQwOV9hdHRhY2goY29uc3Qgc3RydWN0IHM1aDE0MDlfY29uZmlnICpjb25maWcsCisJCQkJCSAgIHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjKTsKICNlbHNlCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBkdmJfZnJvbnRlbmQqIHM1aDE0MDlfYXR0YWNoKGNvbnN0IHN0cnVjdCBzNWgxNDA5X2NvbmZpZyogY29uZmlnLAotCQkJCQkJICBzdHJ1Y3QgaTJjX2FkYXB0ZXIqIGkyYykKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGR2Yl9mcm9udGVuZCAqczVoMTQwOV9hdHRhY2goCisJY29uc3Qgc3RydWN0IHM1aDE0MDlfY29uZmlnICpjb25maWcsCisJc3RydWN0IGkyY19hZGFwdGVyICppMmMpCiB7CiAJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IGRyaXZlciBkaXNhYmxlZCBieSBLY29uZmlnXG4iLCBfX2Z1bmNfXyk7CiAJcmV0dXJuIE5VTEw7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvczVoMTQxMS5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3M1aDE0MTEuYwppbmRleCAyZGExYTM3Li4yZmViZmI1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvczVoMTQxMS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zNWgxNDExLmMKQEAgLTM0Myw3ICszNDMsNyBAQAogCXU4IGFkZHIsIHU4IHJlZywgdTE2IGRhdGEpCiB7CiAJaW50IHJldDsKLQl1OCBidWYgW10gPSB7IHJlZywgZGF0YSA+PiA4LCAgZGF0YSAmIDB4ZmYgfTsKKwl1OCBidWZbXSA9IHsgcmVnLCBkYXRhID4+IDgsICBkYXRhICYgMHhmZiB9OwogCiAJc3RydWN0IGkyY19tc2cgbXNnID0geyAuYWRkciA9IGFkZHIsIC5mbGFncyA9IDAsIC5idWYgPSBidWYsIC5sZW4gPSAzIH07CiAKQEAgLTM1OSwxMCArMzU5LDEwIEBACiBzdGF0aWMgdTE2IHM1aDE0MTFfcmVhZHJlZyhzdHJ1Y3QgczVoMTQxMV9zdGF0ZSAqc3RhdGUsIHU4IGFkZHIsIHU4IHJlZykKIHsKIAlpbnQgcmV0OwotCXU4IGIwIFtdID0geyByZWcgfTsKLQl1OCBiMSBbXSA9IHsgMCwgMCB9OworCXU4IGIwW10gPSB7IHJlZyB9OworCXU4IGIxW10gPSB7IDAsIDAgfTsKIAotCXN0cnVjdCBpMmNfbXNnIG1zZyBbXSA9IHsKKwlzdHJ1Y3QgaTJjX21zZyBtc2dbXSA9IHsKIAkJeyAuYWRkciA9IGFkZHIsIC5mbGFncyA9IDAsIC5idWYgPSBiMCwgLmxlbiA9IDEgfSwKIAkJeyAuYWRkciA9IGFkZHIsIC5mbGFncyA9IEkyQ19NX1JELCAuYnVmID0gYjEsIC5sZW4gPSAyIH0gfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3NpMjF4eC5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3NpMjF4eC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNkZGJlNjkKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvc2kyMXh4LmMKQEAgLTAsMCArMSw5NzQgQEAKKy8qIERWQiBjb21wbGlhbnQgTGludXggZHJpdmVyIGZvciB0aGUgRFZCLVMgc2kyMTA5LzIxMTAgZGVtb2R1bGF0b3IKKyoKKyogQ29weXJpZ2h0IChDKSAyMDA4IElnb3IgTS4gTGlwbGlhbmluIChsaXBsaWFuaW5AbWUuYnkpCisqCisqCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisqCWl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisqCXRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisqCShhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisqCisqLworI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2ppZmZpZXMuaD4KKyNpbmNsdWRlIDxhc20vZGl2NjQuaD4KKworI2luY2x1ZGUgImR2Yl9mcm9udGVuZC5oIgorI2luY2x1ZGUgInNpMjF4eC5oIgorCisjZGVmaW5lCVJFVklTSU9OX1JFRwkJCTB4MDAKKyNkZWZpbmUJU1lTVEVNX01PREVfUkVHCQkJMHgwMQorI2RlZmluZQlUU19DVFJMX1JFR18xCQkJMHgwMgorI2RlZmluZQlUU19DVFJMX1JFR18yCQkJMHgwMworI2RlZmluZQlQSU5fQ1RSTF9SRUdfMQkJCTB4MDQKKyNkZWZpbmUJUElOX0NUUkxfUkVHXzIJCQkweDA1CisjZGVmaW5lCUxPQ0tfU1RBVFVTX1JFR18xCQkweDBmCisjZGVmaW5lCUxPQ0tfU1RBVFVTX1JFR18yCQkweDEwCisjZGVmaW5lCUFDUV9TVEFUVVNfUkVHCQkJMHgxMQorI2RlZmluZQlBQ1FfQ1RSTF9SRUdfMQkJCTB4MTMKKyNkZWZpbmUJQUNRX0NUUkxfUkVHXzIJCQkweDE0CisjZGVmaW5lCVBMTF9ESVZJU09SX1JFRwkJCTB4MTUKKyNkZWZpbmUJQ09BUlNFX1RVTkVfUkVHCQkJMHgxNgorI2RlZmluZQlGSU5FX1RVTkVfUkVHX0wJCQkweDE3CisjZGVmaW5lCUZJTkVfVFVORV9SRUdfSAkJCTB4MTgKKworI2RlZmluZQlBTkFMT0dfQUdDX1BPV0VSX0xFVkVMX1JFRwkweDI4CisjZGVmaW5lCUNGT19FU1RJTUFUT1JfQ1RSTF9SRUdfMQkweDI5CisjZGVmaW5lCUNGT19FU1RJTUFUT1JfQ1RSTF9SRUdfMgkweDJhCisjZGVmaW5lCUNGT19FU1RJTUFUT1JfQ1RSTF9SRUdfMwkweDJiCisKKyNkZWZpbmUJU1lNX1JBVEVfRVNUSU1BVEVfUkVHX0wJCTB4MzEKKyNkZWZpbmUJU1lNX1JBVEVfRVNUSU1BVEVfUkVHX00JCTB4MzIKKyNkZWZpbmUJU1lNX1JBVEVfRVNUSU1BVEVfUkVHX0gJCTB4MzMKKworI2RlZmluZQlDRk9fRVNUSU1BVE9SX09GRlNFVF9SRUdfTAkweDM2CisjZGVmaW5lCUNGT19FU1RJTUFUT1JfT0ZGU0VUX1JFR19ICTB4MzcKKyNkZWZpbmUJQ0ZPX0VSUk9SX1JFR19MCQkJMHgzOAorI2RlZmluZQlDRk9fRVJST1JfUkVHX0gJCQkweDM5CisjZGVmaW5lCVNZTV9SQVRFX0VTVElNQVRPUl9DVFJMX1JFRwkweDNhCisKKyNkZWZpbmUJU1lNX1JBVEVfUkVHX0wJCQkweDNmCisjZGVmaW5lCVNZTV9SQVRFX1JFR19NCQkJMHg0MAorI2RlZmluZQlTWU1fUkFURV9SRUdfSAkJCTB4NDEKKyNkZWZpbmUJU1lNX1JBVEVfRVNUSU1BVE9SX01BWElNVU1fUkVHCTB4NDIKKyNkZWZpbmUJU1lNX1JBVEVfRVNUSU1BVE9SX01JTklNVU1fUkVHCTB4NDMKKworI2RlZmluZQlDX05fRVNUSU1BVE9SX0NUUkxfUkVHCQkweDdjCisjZGVmaW5lCUNfTl9FU1RJTUFUT1JfVEhSU0hMRF9SRUcJMHg3ZAorI2RlZmluZQlDX05fRVNUSU1BVE9SX0xFVkVMX1JFR19MCTB4N2UKKyNkZWZpbmUJQ19OX0VTVElNQVRPUl9MRVZFTF9SRUdfSAkweDdmCisKKyNkZWZpbmUJQkxJTkRfU0NBTl9DVFJMX1JFRwkJMHg4MAorCisjZGVmaW5lCUxTQV9DVFJMX1JFR18xCQkJMHg4RAorI2RlZmluZQlTUENUUk1fVElMVF9DT1JSX1RIUlNITERfUkVHCTB4OGYKKyNkZWZpbmUJT05FX0RCX0JORFdEVEhfVEhSU0hMRF9SRUcJMHg5MAorI2RlZmluZQlUV09fREJfQk5EV0RUSF9USFJTSExEX1JFRwkweDkxCisjZGVmaW5lCVRIUkVFX0RCX0JORFdEVEhfVEhSU0hMRF9SRUcJMHg5MgorI2RlZmluZQlJTkJBTkRfUE9XRVJfVEhSU0hMRF9SRUcJMHg5MworI2RlZmluZQlSRUZfTk9JU0VfTFZMX01SR05fVEhSU0hMRF9SRUcJMHg5NAorCisjZGVmaW5lCVZJVF9TUkNIX0NUUkxfUkVHXzEJCTB4YTAKKyNkZWZpbmUJVklUX1NSQ0hfQ1RSTF9SRUdfMgkJMHhhMQorI2RlZmluZQlWSVRfU1JDSF9DVFJMX1JFR18zCQkweGEyCisjZGVmaW5lCVZJVF9TUkNIX1NUQVRVU19SRUcJCTB4YTMKKyNkZWZpbmUJVklURVJCSV9CRVJfQ09VTlRfUkVHX0wJCTB4YWIKKyNkZWZpbmUJUkVFRF9TT0xPTU9OX0NUUkxfUkVHCQkweGIwCisjZGVmaW5lCVJFRURfU09MT01PTl9FUlJPUl9DT1VOVF9SRUdfTAkweGIxCisjZGVmaW5lCVBSQlNfQ1RSTF9SRUcJCQkweGI1CisKKyNkZWZpbmUJTE5CX0NUUkxfUkVHXzEJCQkweGMwCisjZGVmaW5lCUxOQl9DVFJMX1JFR18yCQkJMHhjMQorI2RlZmluZQlMTkJfQ1RSTF9SRUdfMwkJCTB4YzIKKyNkZWZpbmUJTE5CX0NUUkxfUkVHXzQJCQkweGMzCisjZGVmaW5lCUxOQl9DVFJMX1NUQVRVU19SRUcJCTB4YzQKKyNkZWZpbmUJTE5CX0ZJRk9fUkVHU18wCQkJMHhjNQorI2RlZmluZQlMTkJfRklGT19SRUdTXzEJCQkweGM2CisjZGVmaW5lCUxOQl9GSUZPX1JFR1NfMgkJCTB4YzcKKyNkZWZpbmUJTE5CX0ZJRk9fUkVHU18zCQkJMHhjOAorI2RlZmluZQlMTkJfRklGT19SRUdTXzQJCQkweGM5CisjZGVmaW5lCUxOQl9GSUZPX1JFR1NfNQkJCTB4Y2EKKyNkZWZpbmUJTE5CX1NVUFBMWV9DVFJMX1JFR18xCQkweGNiCisjZGVmaW5lCUxOQl9TVVBQTFlfQ1RSTF9SRUdfMgkJMHhjYworI2RlZmluZQlMTkJfU1VQUExZX0NUUkxfUkVHXzMJCTB4Y2QKKyNkZWZpbmUJTE5CX1NVUFBMWV9DVFJMX1JFR180CQkweGNlCisjZGVmaW5lCUxOQl9TVVBQTFlfU1RBVFVTX1JFRwkJMHhjZgorCisjZGVmaW5lIEZBTFNFCTAKKyNkZWZpbmUgVFJVRQkxCisjZGVmaW5lIEZBSUwJLTEKKyNkZWZpbmUgUEFTUwkwCisKKyNkZWZpbmUgQUxMT1dBQkxFX0ZTX0NPVU5UCTEwCisjZGVmaW5lIFNUQVRVU19CRVIJCTAKKyNkZWZpbmUgU1RBVFVTX1VDQkxPQ0tTCQkxCisKK3N0YXRpYyBpbnQgZGVidWc7CisjZGVmaW5lIGRwcmludGsoYXJncy4uLikgXAorCWRvIHsgXAorCQlpZiAoZGVidWcpIFwKKwkJCXByaW50ayhLRVJOX0RFQlVHICJzaTIxeHg6ICIgYXJncyk7IFwKKwl9IHdoaWxlICgwKQorCitlbnVtIHsKKwlBQ1RJVkVfSElHSCwKKwlBQ1RJVkVfTE9XCit9OworZW51bSB7CisJQllURV9XSURFLAorCUJJVF9XSURFCit9OworZW51bSB7CisJQ0xLX0dBUFBFRF9NT0RFLAorCUNMS19DT05USU5VT1VTX01PREUKK307CitlbnVtIHsKKwlSSVNJTkdfRURHRSwKKwlGQUxMSU5HX0VER0UKK307CitlbnVtIHsKKwlNU0JfRklSU1QsCisJTFNCX0ZJUlNUCit9OworZW51bSB7CisJU0VSSUFMLAorCVBBUkFMTEVMCit9OworCitzdHJ1Y3Qgc2kyMXh4X3N0YXRlIHsKKwlzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyYzsKKwljb25zdCBzdHJ1Y3Qgc2kyMXh4X2NvbmZpZyAqY29uZmlnOworCXN0cnVjdCBkdmJfZnJvbnRlbmQgZnJvbnRlbmQ7CisJdTggaW5pdGlhbGlzZWQ6MTsKKwlpbnQgZXJybW9kZTsKKwlpbnQgZnM7CQkJLypTYW1wbGluZyByYXRlIG9mIHRoZSBBREMgaW4gTUh6Ki8KK307CisKKy8qCXJlZ2lzdGVyIGRlZmF1bHQgaW5pdGlhbGl6YXRpb24gKi8KK3N0YXRpYyB1OCBzZXJpdF9zcDE1MTFsaGJfaW5pdHRhYltdID0geworCTB4MDEsIDB4MjgsCS8qIHNldCBpMmNfaW5jX2Rpc2FibGUgKi8KKwkweDIwLCAweDAzLAorCTB4MjcsIDB4MjAsCisJMHhlMCwgMHg0NSwKKwkweGUxLCAweDA4LAorCTB4ZmUsIDB4MDEsCisJMHgwMSwgMHgyOCwKKwkweDg5LCAweDA5LAorCTB4MDQsIDB4ODAsCisJMHgwNSwgMHgwMSwKKwkweDA2LCAweDAwLAorCTB4MjAsIDB4MDMsCisJMHgyNCwgMHg4OCwKKwkweDI5LCAweDA5LAorCTB4MmEsIDB4MGYsCisJMHgyYywgMHgxMCwKKwkweDJkLCAweDE5LAorCTB4MmUsIDB4MDgsCisJMHgyZiwgMHgxMCwKKwkweDMwLCAweDE5LAorCTB4MzQsIDB4MjAsCisJMHgzNSwgMHgwMywKKwkweDQ1LCAweDAyLAorCTB4NDYsIDB4NDUsCisJMHg0NywgMHhkMCwKKwkweDQ4LCAweDAwLAorCTB4NDksIDB4NDAsCisJMHg0YSwgMHgwMywKKwkweDRjLCAweGZkLAorCTB4NGYsIDB4MmUsCisJMHg1MCwgMHgyZSwKKwkweDUxLCAweDEwLAorCTB4NTIsIDB4MTAsCisJMHg1NiwgMHg5MiwKKwkweDU5LCAweDAwLAorCTB4NWEsIDB4MmQsCisJMHg1YiwgMHgzMywKKwkweDVjLCAweDFmLAorCTB4NWYsIDB4NzYsCisJMHg2MiwgMHhjMCwKKwkweDYzLCAweGMwLAorCTB4NjQsIDB4ZjMsCisJMHg2NSwgMHhmMywKKwkweDc5LCAweDQwLAorCTB4NmEsIDB4NDAsCisJMHg2YiwgMHgwYSwKKwkweDZjLCAweDgwLAorCTB4NmQsIDB4MjcsCisJMHg3MSwgMHgwNiwKKwkweDc1LCAweDYwLAorCTB4NzgsIDB4MDAsCisJMHg3OSwgMHhiNSwKKwkweDdjLCAweDA1LAorCTB4N2QsIDB4MWEsCisJMHg4NywgMHg1NSwKKwkweDg4LCAweDcyLAorCTB4OGYsIDB4MDgsCisJMHg5MCwgMHhlMCwKKwkweDk0LCAweDQwLAorCTB4YTAsIDB4M2YsCisJMHhhMSwgMHhjMCwKKwkweGE0LCAweGNjLAorCTB4YTUsIDB4NjYsCisJMHhhNiwgMHg2NiwKKwkweGE3LCAweDdiLAorCTB4YTgsIDB4N2IsCisJMHhhOSwgMHg3YiwKKwkweGFhLCAweDlhLAorCTB4ZWQsIDB4MDQsCisJMHhhZCwgMHgwMCwKKwkweGFlLCAweDAzLAorCTB4Y2MsIDB4YWIsCisJMHgwMSwgMHgwOCwKKwkweGZmLCAweGZmCit9OworCisvKglsb3cgbGV2ZWwgcmVhZC93cml0ZXMgKi8KK3N0YXRpYyBpbnQgc2kyMV93cml0ZXJlZ3Moc3RydWN0IHNpMjF4eF9zdGF0ZSAqc3RhdGUsIHU4IHJlZzEsCisJCQkJCQkJdTggKmRhdGEsIGludCBsZW4pCit7CisJaW50IHJldDsKKwl1OCBidWZbNjBdOy8qID0geyByZWcxLCBkYXRhIH07Ki8KKwlzdHJ1Y3QgaTJjX21zZyBtc2cgPSB7CisJCQkJLmFkZHIgPSBzdGF0ZS0+Y29uZmlnLT5kZW1vZF9hZGRyZXNzLAorCQkJCS5mbGFncyA9IDAsCisJCQkJLmJ1ZiA9IGJ1ZiwKKwkJCQkubGVuID0gbGVuICsgMQorCX07CisKKwltc2cuYnVmWzBdID0gIHJlZzE7CisJbWVtY3B5KG1zZy5idWYgKyAxLCBkYXRhLCBsZW4pOworCisJcmV0ID0gaTJjX3RyYW5zZmVyKHN0YXRlLT5pMmMsICZtc2csIDEpOworCisJaWYgKHJldCAhPSAxKQorCQlkcHJpbnRrKCIlczogd3JpdGVyZWcgZXJyb3IgKHJlZzEgPT0gMHglMDJ4LCBkYXRhID09IDB4JTAyeCwgIgorCQkJInJldCA9PSAlaSlcbiIsIF9fZnVuY19fLCByZWcxLCBkYXRhWzBdLCByZXQpOworCisJcmV0dXJuIChyZXQgIT0gMSkgPyAtRVJFTU9URUlPIDogMDsKK30KKworc3RhdGljIGludCBzaTIxX3dyaXRlcmVnKHN0cnVjdCBzaTIxeHhfc3RhdGUgKnN0YXRlLCB1OCByZWcsIHU4IGRhdGEpCit7CisJaW50IHJldDsKKwl1OCBidWZbXSA9IHsgcmVnLCBkYXRhIH07CisJc3RydWN0IGkyY19tc2cgbXNnID0geworCQkJCS5hZGRyID0gc3RhdGUtPmNvbmZpZy0+ZGVtb2RfYWRkcmVzcywKKwkJCQkuZmxhZ3MgPSAwLAorCQkJCS5idWYgPSBidWYsCisJCQkJLmxlbiA9IDIKKwl9OworCisJcmV0ID0gaTJjX3RyYW5zZmVyKHN0YXRlLT5pMmMsICZtc2csIDEpOworCisJaWYgKHJldCAhPSAxKQorCQlkcHJpbnRrKCIlczogd3JpdGVyZWcgZXJyb3IgKHJlZyA9PSAweCUwMngsIGRhdGEgPT0gMHglMDJ4LCAiCisJCQkicmV0ID09ICVpKVxuIiwgX19mdW5jX18sIHJlZywgZGF0YSwgcmV0KTsKKworCXJldHVybiAocmV0ICE9IDEpID8gLUVSRU1PVEVJTyA6IDA7Cit9CisKK3N0YXRpYyBpbnQgc2kyMV93cml0ZShzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgdTggKmJ1ZiwgaW50IGxlbikKK3sKKwlzdHJ1Y3Qgc2kyMXh4X3N0YXRlICpzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCisJaWYgKGxlbiAhPSAyKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJldHVybiBzaTIxX3dyaXRlcmVnKHN0YXRlLCBidWZbMF0sIGJ1ZlsxXSk7Cit9CisKK3N0YXRpYyB1OCBzaTIxX3JlYWRyZWcoc3RydWN0IHNpMjF4eF9zdGF0ZSAqc3RhdGUsIHU4IHJlZykKK3sKKwlpbnQgcmV0OworCXU4IGIwW10gPSB7IHJlZyB9OworCXU4IGIxW10gPSB7IDAgfTsKKwlzdHJ1Y3QgaTJjX21zZyBtc2dbXSA9IHsKKwkJeworCQkJLmFkZHIgPSBzdGF0ZS0+Y29uZmlnLT5kZW1vZF9hZGRyZXNzLAorCQkJLmZsYWdzID0gMCwKKwkJCS5idWYgPSBiMCwKKwkJCS5sZW4gPSAxCisJCX0sIHsKKwkJCS5hZGRyID0gc3RhdGUtPmNvbmZpZy0+ZGVtb2RfYWRkcmVzcywKKwkJCS5mbGFncyA9IEkyQ19NX1JELAorCQkJLmJ1ZiA9IGIxLAorCQkJLmxlbiA9IDEKKwkJfQorCX07CisKKwlyZXQgPSBpMmNfdHJhbnNmZXIoc3RhdGUtPmkyYywgbXNnLCAyKTsKKworCWlmIChyZXQgIT0gMikKKwkJZHByaW50aygiJXM6IHJlYWRyZWcgZXJyb3IgKHJlZyA9PSAweCUwMngsIHJldCA9PSAlaSlcbiIsCisJCQlfX2Z1bmNfXywgcmVnLCByZXQpOworCisJcmV0dXJuIGIxWzBdOworfQorCitzdGF0aWMgaW50IHNpMjFfcmVhZHJlZ3Moc3RydWN0IHNpMjF4eF9zdGF0ZSAqc3RhdGUsIHU4IHJlZzEsIHU4ICpiLCB1OCBsZW4pCit7CisJaW50IHJldDsKKwlzdHJ1Y3QgaTJjX21zZyBtc2dbXSA9IHsKKwkJeworCQkJLmFkZHIgPSBzdGF0ZS0+Y29uZmlnLT5kZW1vZF9hZGRyZXNzLAorCQkJLmZsYWdzID0gMCwKKwkJCS5idWYgPSAmcmVnMSwKKwkJCS5sZW4gPSAxCisJCX0sIHsKKwkJCS5hZGRyID0gc3RhdGUtPmNvbmZpZy0+ZGVtb2RfYWRkcmVzcywKKwkJCS5mbGFncyA9IEkyQ19NX1JELAorCQkJLmJ1ZiA9IGIsCisJCQkubGVuID0gbGVuCisJCX0KKwl9OworCisJcmV0ID0gaTJjX3RyYW5zZmVyKHN0YXRlLT5pMmMsIG1zZywgMik7CisKKwlpZiAocmV0ICE9IDIpCisJCWRwcmludGsoIiVzOiByZWFkcmVnIGVycm9yIChyZXQgPT0gJWkpXG4iLCBfX2Z1bmNfXywgcmV0KTsKKworCXJldHVybiByZXQgPT0gMiA/IDAgOiAtMTsKK30KKworc3RhdGljIGludCBzaTIxeHhfd2FpdF9kaXNlcWNfaWRsZShzdHJ1Y3Qgc2kyMXh4X3N0YXRlICpzdGF0ZSwgaW50IHRpbWVvdXQpCit7CisJdW5zaWduZWQgbG9uZyBzdGFydCA9IGppZmZpZXM7CisKKwlkcHJpbnRrKCIlc1xuIiwgX19mdW5jX18pOworCisJd2hpbGUgKChzaTIxX3JlYWRyZWcoc3RhdGUsIExOQl9DVFJMX1JFR18xKSAmIDB4OCkgPT0gOCkgeworCQlpZiAoamlmZmllcyAtIHN0YXJ0ID4gdGltZW91dCkgeworCQkJZHByaW50aygiJXM6IHRpbWVvdXQhIVxuIiwgX19mdW5jX18pOworCQkJcmV0dXJuIC1FVElNRURPVVQ7CisJCX0KKwkJbXNsZWVwKDEwKTsKKwl9OworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2kyMXh4X3NldF9zeW1ib2xyYXRlKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCB1MzIgc3JhdGUpCit7CisJc3RydWN0IHNpMjF4eF9zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKwl1MzIgc3ltX3JhdGUsIGRhdGFfcmF0ZTsKKwlpbnQgaTsKKwl1OCBzeW1fcmF0ZV9ieXRlc1szXTsKKworCWRwcmludGsoIiVzIDogc3JhdGUgPSAlaVxuIiwgX19mdW5jX18gLCBzcmF0ZSk7CisKKwlpZiAoKHNyYXRlIDwgMTAwMDAwMCkgfHwgKHNyYXRlID4gNDUwMDAwMDApKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWRhdGFfcmF0ZSA9IHNyYXRlOworCXN5bV9yYXRlID0gMDsKKworCWZvciAoaSA9IDA7IGkgPCA0OyArK2kpIHsKKwkJc3ltX3JhdGUgLz0gMTAwOworCQlzeW1fcmF0ZSA9IHN5bV9yYXRlICsgKChkYXRhX3JhdGUgJSAxMDApICogMHg4MDAwMDApIC8KKwkJCQkJCQkJc3RhdGUtPmZzOworCQlkYXRhX3JhdGUgLz0gMTAwOworCX0KKwlmb3IgKGkgPSAwOyBpIDwgMzsgKytpKQorCQlzeW1fcmF0ZV9ieXRlc1tpXSA9ICh1OCkoKHN5bV9yYXRlID4+IChpICogOCkpICYgMHhmZik7CisKKwlzaTIxX3dyaXRlcmVncyhzdGF0ZSwgU1lNX1JBVEVfUkVHX0wsIHN5bV9yYXRlX2J5dGVzLCAweDAzKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNpMjF4eF9zZW5kX2Rpc2VxY19tc2coc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsCisJCQkJCXN0cnVjdCBkdmJfZGlzZXFjX21hc3Rlcl9jbWQgKm0pCit7CisJc3RydWN0IHNpMjF4eF9zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKwl1OCBsbmJfc3RhdHVzOworCXU4IExOQl9DVFJMXzE7CisJaW50IHN0YXR1czsKKworCWRwcmludGsoIiVzXG4iLCBfX2Z1bmNfXyk7CisKKwlzdGF0dXMgPSBQQVNTOworCUxOQl9DVFJMXzEgPSAwOworCisJc3RhdHVzIHw9IHNpMjFfcmVhZHJlZ3Moc3RhdGUsIExOQl9DVFJMX1NUQVRVU19SRUcsICZsbmJfc3RhdHVzLCAweDAxKTsKKwlzdGF0dXMgfD0gc2kyMV9yZWFkcmVncyhzdGF0ZSwgTE5CX0NUUkxfUkVHXzEsICZsbmJfc3RhdHVzLCAweDAxKTsKKworCS8qZmlsbCB0aGUgRklGTyovCisJc3RhdHVzIHw9IHNpMjFfd3JpdGVyZWdzKHN0YXRlLCBMTkJfRklGT19SRUdTXzAsIG0tPm1zZywgbS0+bXNnX2xlbik7CisKKwlMTkJfQ1RSTF8xID0gKGxuYl9zdGF0dXMgJiAweDcwKTsKKwlMTkJfQ1RSTF8xIHw9IG0tPm1zZ19sZW47CisKKwlMTkJfQ1RSTF8xIHw9IDB4ODA7CS8qIGJlZ2luIExOQiBzaWduYWxpbmcgKi8KKworCXN0YXR1cyB8PSBzaTIxX3dyaXRlcmVncyhzdGF0ZSwgTE5CX0NUUkxfUkVHXzEsICZMTkJfQ1RSTF8xLCAweDAxKTsKKworCXJldHVybiBzdGF0dXM7Cit9CisKK3N0YXRpYyBpbnQgc2kyMXh4X3NlbmRfZGlzZXFjX2J1cnN0KHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLAorCQkJCQkJZmVfc2VjX21pbmlfY21kX3QgYnVyc3QpCit7CisJc3RydWN0IHNpMjF4eF9zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKwl1OCB2YWw7CisKKwlkcHJpbnRrKCIlc1xuIiwgX19mdW5jX18pOworCisJaWYgKHNpMjF4eF93YWl0X2Rpc2VxY19pZGxlKHN0YXRlLCAxMDApIDwgMCkKKwkJcmV0dXJuIC1FVElNRURPVVQ7CisKKwl2YWwgPSAoMHg4MCB8IHNpMjFfcmVhZHJlZyhzdGF0ZSwgMHhjMSkpOworCWlmIChzaTIxX3dyaXRlcmVnKHN0YXRlLCBMTkJfQ1RSTF9SRUdfMSwKKwkJCWJ1cnN0ID09IFNFQ19NSU5JX0EgPyAodmFsICYgfjB4MTApIDogKHZhbCB8IDB4MTApKSkKKwkJcmV0dXJuIC1FUkVNT1RFSU87CisKKwlpZiAoc2kyMXh4X3dhaXRfZGlzZXFjX2lkbGUoc3RhdGUsIDEwMCkgPCAwKQorCQlyZXR1cm4gLUVUSU1FRE9VVDsKKworCWlmIChzaTIxX3dyaXRlcmVnKHN0YXRlLCBMTkJfQ1RSTF9SRUdfMSwgdmFsKSkKKwkJcmV0dXJuIC1FUkVNT1RFSU87CisKKwlyZXR1cm4gMDsKK30KKy8qCTMwLjA2LjIwMDggKi8KK3N0YXRpYyBpbnQgc2kyMXh4X3NldF90b25lKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCBmZV9zZWNfdG9uZV9tb2RlX3QgdG9uZSkKK3sKKwlzdHJ1Y3Qgc2kyMXh4X3N0YXRlICpzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCXU4IHZhbDsKKworCWRwcmludGsoIiVzXG4iLCBfX2Z1bmNfXyk7CisJdmFsID0gKDB4ODAgfCBzaTIxX3JlYWRyZWcoc3RhdGUsIExOQl9DVFJMX1JFR18xKSk7CisKKwlzd2l0Y2ggKHRvbmUpIHsKKwljYXNlIFNFQ19UT05FX09OOgorCQlyZXR1cm4gc2kyMV93cml0ZXJlZyhzdGF0ZSwgTE5CX0NUUkxfUkVHXzEsIHZhbCB8IDB4MjApOworCisJY2FzZSBTRUNfVE9ORV9PRkY6CisJCXJldHVybiBzaTIxX3dyaXRlcmVnKHN0YXRlLCBMTkJfQ1RSTF9SRUdfMSwgKHZhbCAmIH4weDIwKSk7CisKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9Cit9CisKK3N0YXRpYyBpbnQgc2kyMXh4X3NldF92b2x0YWdlKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCBmZV9zZWNfdm9sdGFnZV90IHZvbHQpCit7CisJc3RydWN0IHNpMjF4eF9zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKworCXU4IHZhbDsKKwlkcHJpbnRrKCIlczogJXNcbiIsIF9fZnVuY19fLAorCQl2b2x0ID09IFNFQ19WT0xUQUdFXzEzID8gIlNFQ19WT0xUQUdFXzEzIiA6CisJCXZvbHQgPT0gU0VDX1ZPTFRBR0VfMTggPyAiU0VDX1ZPTFRBR0VfMTgiIDogIj8/Iik7CisKKworCXZhbCA9ICgweDgwIHwgc2kyMV9yZWFkcmVnKHN0YXRlLCBMTkJfQ1RSTF9SRUdfMSkpOworCisJc3dpdGNoICh2b2x0KSB7CisJY2FzZSBTRUNfVk9MVEFHRV8xODoKKwkJcmV0dXJuIHNpMjFfd3JpdGVyZWcoc3RhdGUsIExOQl9DVFJMX1JFR18xLCB2YWwgfCAweDQwKTsKKwkJYnJlYWs7CisJY2FzZSBTRUNfVk9MVEFHRV8xMzoKKwkJcmV0dXJuIHNpMjFfd3JpdGVyZWcoc3RhdGUsIExOQl9DVFJMX1JFR18xLCAodmFsICYgfjB4NDApKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfTsKK30KKworc3RhdGljIGludCBzaTIxeHhfaW5pdChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSkKK3sKKwlzdHJ1Y3Qgc2kyMXh4X3N0YXRlICpzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCWludCBpOworCWludCBzdGF0dXMgPSAwOworCXU4IHJlZzE7CisJdTggdmFsOworCXU4IHJlZzJbMl07CisKKwlkcHJpbnRrKCIlc1xuIiwgX19mdW5jX18pOworCisJZm9yIChpID0gMDsgOyBpICs9IDIpIHsKKwkJcmVnMSA9IHNlcml0X3NwMTUxMWxoYl9pbml0dGFiW2ldOworCQl2YWwgPSBzZXJpdF9zcDE1MTFsaGJfaW5pdHRhYltpKzFdOworCQlpZiAocmVnMSA9PSAweGZmICYmIHZhbCA9PSAweGZmKQorCQkJYnJlYWs7CisJCXNpMjFfd3JpdGVyZWdzKHN0YXRlLCByZWcxLCAmdmFsLCAxKTsKKwl9CisKKwkvKkRWQiBRUFNLIFNZU1RFTSBNT0RFIFJFRyovCisJcmVnMSA9IDB4MDg7CisJc2kyMV93cml0ZXJlZ3Moc3RhdGUsIFNZU1RFTV9NT0RFX1JFRywgJnJlZzEsIDB4MDEpOworCisJLyp0cmFuc3BvcnQgc3RyZWFtIGNvbmZpZyovCisJLyoKKwltb2RlID0gUEFSQUxMRUw7CisJc2RhdGFfZm9ybSA9IExTQl9GSVJTVDsKKwljbGtfZWRnZSA9IEZBTExJTkdfRURHRTsKKwljbGtfbW9kZSA9IENMS19HQVBQRURfTU9ERTsKKwlzdHJ0X2xlbiA9IEJZVEVfV0lERTsKKwlzeW5jX3BvbCA9IEFDVElWRV9ISUdIOworCXZhbF9wb2wgPSBBQ1RJVkVfSElHSDsKKwllcnJfcG9sID0gQUNUSVZFX0hJR0g7CisJc2Nsa19yYXRlID0gMHgwMDsKKwlwYXJpdHkgPSAweDAwIDsKKwlkYXRhX2RlbGF5ID0gMHgwMDsKKwljbGtfZGVsYXkgPSAweDAwOworCXBjbGtfc21vb3RoID0gMHgwMDsKKwkqLworCXJlZzJbMF0gPQorCQlQQVJBTExFTCArIChMU0JfRklSU1QgPDwgMSkKKwkJKyAoRkFMTElOR19FREdFIDw8IDIpICsgKENMS19HQVBQRURfTU9ERSA8PCAzKQorCQkrIChCWVRFX1dJREUgPDwgNCkgKyAoQUNUSVZFX0hJR0ggPDwgNSkKKwkJKyAoQUNUSVZFX0hJR0ggPDwgNikgKyAoQUNUSVZFX0hJR0ggPDwgNyk7CisKKwlyZWcyWzFdID0gMDsKKwkvKglzY2xrX3JhdGUgKyAocGFyaXR5IDw8IDIpCisJCSsgKGRhdGFfZGVsYXkgPDwgMykgKyAoY2xrX2RlbGF5IDw8IDQpCisJCSsgKHBjbGtfc21vb3RoIDw8IDUpOworCSovCisJc3RhdHVzIHw9IHNpMjFfd3JpdGVyZWdzKHN0YXRlLCBUU19DVFJMX1JFR18xLCByZWcyLCAweDAyKTsKKwlpZiAoc3RhdHVzICE9IDApCisJCWRwcmludGsoIiAlcyA6IFRTIFNldCBFcnJvclxuIiwgX19mdW5jX18pOworCisJcmV0dXJuIDA7CisKK30KKworc3RhdGljIGludCBzaTIxX3JlYWRfc3RhdHVzKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCBmZV9zdGF0dXNfdCAqc3RhdHVzKQoreworCXN0cnVjdCBzaTIxeHhfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisJdTggcmVnc19yZWFkWzJdOworCXU4IHJlZ19yZWFkOworCXU4IGk7CisJdTggbG9jazsKKwl1OCBzaWduYWwgPSBzaTIxX3JlYWRyZWcoc3RhdGUsIEFOQUxPR19BR0NfUE9XRVJfTEVWRUxfUkVHKTsKKworCXNpMjFfcmVhZHJlZ3Moc3RhdGUsIExPQ0tfU1RBVFVTX1JFR18xLCByZWdzX3JlYWQsIDB4MDIpOworCXJlZ19yZWFkID0gMDsKKworCWZvciAoaSA9IDA7IGkgPCA3OyArK2kpCisJCXJlZ19yZWFkIHw9ICgocmVnc19yZWFkWzBdID4+IGkpICYgMHgwMSkgPDwgKDYgLSBpKTsKKworCWxvY2sgPSAoKHJlZ19yZWFkICYgMHg3ZikgfCAocmVnc19yZWFkWzFdICYgMHg4MCkpOworCisJZHByaW50aygiJXMgOiBGRV9SRUFEX1NUQVRVUyA6IFZTVEFUVVM6IDB4JTAyeFxuIiwgX19mdW5jX18sIGxvY2spOworCSpzdGF0dXMgPSAwOworCisJaWYgKHNpZ25hbCA+IDEwKQorCQkqc3RhdHVzIHw9IEZFX0hBU19TSUdOQUw7CisKKwlpZiAobG9jayAmIDB4MikKKwkJKnN0YXR1cyB8PSBGRV9IQVNfQ0FSUklFUjsKKworCWlmIChsb2NrICYgMHgyMCkKKwkJKnN0YXR1cyB8PSBGRV9IQVNfVklURVJCSTsKKworCWlmIChsb2NrICYgMHg0MCkKKwkJKnN0YXR1cyB8PSBGRV9IQVNfU1lOQzsKKworCWlmICgobG9jayAmIDB4N2IpID09IDB4N2IpCisJCSpzdGF0dXMgfD0gRkVfSEFTX0xPQ0s7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzaTIxX3JlYWRfc2lnbmFsX3N0cmVuZ3RoKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCB1MTYgKnN0cmVuZ3RoKQoreworCXN0cnVjdCBzaTIxeHhfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisKKwkvKnN0YXR1cyA9IHNpMjFfcmVhZHJlZyhzdGF0ZSwgQU5BTE9HX0FHQ19QT1dFUl9MRVZFTF9SRUcsCisJCQkJCQkodTgqKWFnY2xldmVsLCAweDAxKTsqLworCisJdTE2IHNpZ25hbCA9ICgzICogc2kyMV9yZWFkcmVnKHN0YXRlLCAweDI3KSAqCisJCQkJCXNpMjFfcmVhZHJlZyhzdGF0ZSwgMHgyOCkpOworCisJZHByaW50aygiJXMgOiBBR0NQV1I6IDB4JTAyeCUwMngsIHNpZ25hbD0weCUwNHhcbiIsIF9fZnVuY19fLAorCQlzaTIxX3JlYWRyZWcoc3RhdGUsIDB4MjcpLAorCQlzaTIxX3JlYWRyZWcoc3RhdGUsIDB4MjgpLCAoaW50KSBzaWduYWwpOworCisJc2lnbmFsICA8PD0gNDsKKwkqc3RyZW5ndGggPSBzaWduYWw7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzaTIxX3JlYWRfYmVyKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCB1MzIgKmJlcikKK3sKKwlzdHJ1Y3Qgc2kyMXh4X3N0YXRlICpzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCisJZHByaW50aygiJXNcbiIsIF9fZnVuY19fKTsKKworCWlmIChzdGF0ZS0+ZXJybW9kZSAhPSBTVEFUVVNfQkVSKQorCQlyZXR1cm4gMDsKKworCSpiZXIgPSAoc2kyMV9yZWFkcmVnKHN0YXRlLCAweDFkKSA8PCA4KSB8CisJCQkJc2kyMV9yZWFkcmVnKHN0YXRlLCAweDFlKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNpMjFfcmVhZF9zbnIoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIHUxNiAqc25yKQoreworCXN0cnVjdCBzaTIxeHhfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisKKwlzMzIgeHNuciA9IDB4ZmZmZiAtICgoc2kyMV9yZWFkcmVnKHN0YXRlLCAweDI0KSA8PCA4KSB8CisJCQkJCXNpMjFfcmVhZHJlZyhzdGF0ZSwgMHgyNSkpOworCXhzbnIgPSAzICogKHhzbnIgLSAweGExMDApOworCSpzbnIgPSAoeHNuciA+IDB4ZmZmZikgPyAweGZmZmYgOiAoeHNuciA8IDApID8gMCA6IHhzbnI7CisKKwlkcHJpbnRrKCIlc1xuIiwgX19mdW5jX18pOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2kyMV9yZWFkX3VjYmxvY2tzKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCB1MzIgKnVjYmxvY2tzKQoreworCXN0cnVjdCBzaTIxeHhfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisKKwlkcHJpbnRrKCIlc1xuIiwgX19mdW5jX18pOworCisJaWYgKHN0YXRlLT5lcnJtb2RlICE9IFNUQVRVU19VQ0JMT0NLUykKKwkJKnVjYmxvY2tzID0gMDsKKwllbHNlCisJCSp1Y2Jsb2NrcyA9IChzaTIxX3JlYWRyZWcoc3RhdGUsIDB4MWQpIDw8IDgpIHwKKwkJCQkJc2kyMV9yZWFkcmVnKHN0YXRlLCAweDFlKTsKKworCXJldHVybiAwOworfQorCisvKglpbml0aWF0ZXMgYSBjaGFubmVsIGFjcXVpc2l0aW9uIHNlcXVlbmNlCisJdXNpbmcgdGhlIHNwZWNpZmllZCBzeW1ib2wgcmF0ZSBhbmQgY29kZSByYXRlICovCitzdGF0aWMgaW50IHNpMjF4eF9zZXRhY3F1aXJlKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCBpbnQgc3ltYnJhdGUsCisJCQkJCQlmZV9jb2RlX3JhdGVfdCBjcmF0ZSkKK3sKKworCXN0cnVjdCBzaTIxeHhfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisJdTggY29kZXJhdGVzW10gPSB7CisJCQkJMHgwLCAweDAxLCAweDAyLCAweDA0LCAweDAwLAorCQkJCTB4OCwgMHgxMCwgMHgyMCwgMHgwMCwgMHgzZgorCX07CisKKwl1OCBjb2RlcmF0ZV9wdHI7CisJaW50IHN0YXR1czsKKwl1OCBzdGFydF9hY3EgPSAweDgwOworCXU4IHJlZywgcmVnc1szXTsKKworCWRwcmludGsoIiVzXG4iLCBfX2Z1bmNfXyk7CisKKwlzdGF0dXMgPSBQQVNTOworCWNvZGVyYXRlX3B0ciA9IGNvZGVyYXRlc1tjcmF0ZV07CisKKwlzaTIxeHhfc2V0X3N5bWJvbHJhdGUoZmUsIHN5bWJyYXRlKTsKKworCS8qIHdyaXRlIGNvZGUgcmF0ZXMgdG8gdXNlIGluIHRoZSBWaXRlcmJpIHNlYXJjaCAqLworCXN0YXR1cyB8PSBzaTIxX3dyaXRlcmVncyhzdGF0ZSwKKwkJCQlWSVRfU1JDSF9DVFJMX1JFR18xLAorCQkJCSZjb2RlcmF0ZV9wdHIsIDB4MDEpOworCisJLyogY2xlYXIgYWNxX3N0YXJ0IGJpdCAqLworCXN0YXR1cyB8PSBzaTIxX3JlYWRyZWdzKHN0YXRlLCBBQ1FfQ1RSTF9SRUdfMiwgJnJlZywgMHgwMSk7CisJcmVnICY9IH5zdGFydF9hY3E7CisJc3RhdHVzIHw9IHNpMjFfd3JpdGVyZWdzKHN0YXRlLCBBQ1FfQ1RSTF9SRUdfMiwgJnJlZywgMHgwMSk7CisKKwkvKiB1c2UgbmV3IENhcnJpZXIgRnJlcXVlbmN5IE9mZnNldCBFc3RpbWF0b3IgKFF1aWNrTG9jaykgKi8KKwlyZWdzWzBdID0gMHhDQjsKKwlyZWdzWzFdID0gMHg0MDsKKwlyZWdzWzJdID0gMHhDQjsKKworCXN0YXR1cyB8PSBzaTIxX3dyaXRlcmVncyhzdGF0ZSwKKwkJCQlUV09fREJfQk5EV0RUSF9USFJTSExEX1JFRywKKwkJCQkmcmVnc1swXSwgMHgwMyk7CisJcmVnID0gMHg1NjsKKwlzdGF0dXMgfD0gc2kyMV93cml0ZXJlZ3Moc3RhdGUsCisJCQkJTFNBX0NUUkxfUkVHXzEsICZyZWcsIDEpOworCXJlZyA9IDB4MDU7CisJc3RhdHVzIHw9IHNpMjFfd3JpdGVyZWdzKHN0YXRlLAorCQkJCUJMSU5EX1NDQU5fQ1RSTF9SRUcsICZyZWcsIDEpOworCS8qIHN0YXJ0IGF1dG9tYXRpYyBhY3EgKi8KKwlzdGF0dXMgfD0gc2kyMV93cml0ZXJlZ3Moc3RhdGUsCisJCQkJQUNRX0NUUkxfUkVHXzIsICZzdGFydF9hY3EsIDB4MDEpOworCisJcmV0dXJuIHN0YXR1czsKK30KKworc3RhdGljIGludCBzaTIxeHhfc2V0X3Byb3BlcnR5KHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCBzdHJ1Y3QgZHR2X3Byb3BlcnR5ICpwKQoreworCWRwcmludGsoIiVzKC4uKVxuIiwgX19mdW5jX18pOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNpMjF4eF9nZXRfcHJvcGVydHkoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIHN0cnVjdCBkdHZfcHJvcGVydHkgKnApCit7CisJZHByaW50aygiJXMoLi4pXG4iLCBfX2Z1bmNfXyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2kyMXh4X3NldF9mcm9udGVuZChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwKKwkJCQkJc3RydWN0IGR2Yl9mcm9udGVuZF9wYXJhbWV0ZXJzICpkZnApCit7CisJc3RydWN0IHNpMjF4eF9zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKwlzdHJ1Y3QgZHR2X2Zyb250ZW5kX3Byb3BlcnRpZXMgKmMgPSAmZmUtPmR0dl9wcm9wZXJ0eV9jYWNoZTsKKworCS8qIGZyZXEJCUNoYW5uZWwgY2FycmllciBmcmVxdWVuY3kgaW4gS0h6IChpLmUuIDE1NTAwMDAgS0h6KQorCSBkYXRhcmF0ZQlDaGFubmVsIHN5bWJvbCByYXRlIGluIFNwcyAoaS5lLiAyMjUwMDAwMCBTcHMpKi8KKworCS8qIGluIE1IeiAqLworCXVuc2lnbmVkIGNoYXIgY29hcnNlX3R1bmVfZnJlcTsKKwlpbnQgZmluZV90dW5lX2ZyZXE7CisJdW5zaWduZWQgY2hhciBzYW1wbGVfcmF0ZSA9IDA7CisJLyogYm9vbGVhbiAqLworCXVuc2lnbmVkIGludCBpbmJhbmRfaW50ZXJmZXJlcl9pbmQ7CisKKwkvKiBJTlRFUk1FRElBVEUgVkFMVUVTICovCisJaW50IGljb2Fyc2VfdHVuZV9mcmVxOyAvKiBNSHogKi8KKwlpbnQgaWZpbmVfdHVuZV9mcmVxOyAvKiBNSHogKi8KKwl1bnNpZ25lZCBpbnQgYmFuZF9oaWdoOworCXVuc2lnbmVkIGludCBiYW5kX2xvdzsKKwl1bnNpZ25lZCBpbnQgeDE7CisJdW5zaWduZWQgaW50IHgyOworCWludCBpOworCXVuc2lnbmVkIGludCBpbmJhbmRfaW50ZXJmZXJlcl9kaXYyW0FMTE9XQUJMRV9GU19DT1VOVF0gPSB7CisJCQlGQUxTRSwgRkFMU0UsIEZBTFNFLCBGQUxTRSwgRkFMU0UsCisJCQlGQUxTRSwgRkFMU0UsIEZBTFNFLCBGQUxTRSwgRkFMU0UKKwl9OworCXVuc2lnbmVkIGludCBpbmJhbmRfaW50ZXJmZXJlcl9kaXY0W0FMTE9XQUJMRV9GU19DT1VOVF0gPSB7CisJCQlGQUxTRSwgRkFMU0UsIEZBTFNFLCBGQUxTRSwgRkFMU0UsCisJCQlGQUxTRSwgRkFMU0UsIEZBTFNFLCBGQUxTRSwgRkFMU0UKKwl9OworCisJaW50IHN0YXR1czsKKworCS8qIGFsbG93YWJsZSBzYW1wbGUgcmF0ZXMgZm9yIEFEQyBpbiBNSHogKi8KKwlpbnQgYWZzW0FMTE9XQUJMRV9GU19DT1VOVF0gPSB7IDIwMCwgMTkyLCAxOTMsIDE5NCwgMTk1LAorCQkJCQkxOTYsIDIwNCwgMjA1LCAyMDYsIDIwNworCX07CisJLyogaW4gTUh6ICovCisJaW50IGlmX2xpbWl0X2hpZ2g7CisJaW50IGlmX2xpbWl0X2xvdzsKKwlpbnQgbG5iX2xvOworCWludCBsbmJfdW5jZXJ0YW5pdHk7CisKKwlpbnQgcmZfZnJlcTsKKwlpbnQgZGF0YV9yYXRlOworCXVuc2lnbmVkIGNoYXIgcmVnc1s0XTsKKworCWRwcmludGsoIiVzIDogRkVfU0VUX0ZST05URU5EXG4iLCBfX2Z1bmNfXyk7CisKKwlpZiAoYy0+ZGVsaXZlcnlfc3lzdGVtICE9IFNZU19EVkJTKSB7CisJCQlkcHJpbnRrKCIlczogdW5zdXBwb3J0ZWQgZGVsaXZlcnkgc3lzdGVtIHNlbGVjdGVkICglZClcbiIsCisJCQkJX19mdW5jX18sIGMtPmRlbGl2ZXJ5X3N5c3RlbSk7CisJCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisJfQorCisJZm9yIChpID0gMDsgaSA8IEFMTE9XQUJMRV9GU19DT1VOVDsgKytpKQorCQlpbmJhbmRfaW50ZXJmZXJlcl9kaXYyW2ldID0gaW5iYW5kX2ludGVyZmVyZXJfZGl2NFtpXSA9IEZBTFNFOworCisJaWZfbGltaXRfaGlnaCA9IC03MDAwMDA7CisJaWZfbGltaXRfbG93ID0gLTEwMDAwMDsKKwkvKiBpbiBNSHogKi8KKwlsbmJfbG8gPSAwOworCWxuYl91bmNlcnRhbml0eSA9IDA7CisKKwlyZl9mcmVxID0gMTAgKiBjLT5mcmVxdWVuY3kgOworCWRhdGFfcmF0ZSA9IGMtPnN5bWJvbF9yYXRlIC8gMTAwOworCisJc3RhdHVzID0gUEFTUzsKKworCWJhbmRfbG93ID0gKHJmX2ZyZXEgLSBsbmJfbG8pIC0gKChsbmJfdW5jZXJ0YW5pdHkgKiAyMDApCisJCQkJCSsgKGRhdGFfcmF0ZSAqIDEzNSkpIC8gMjAwOworCisJYmFuZF9oaWdoID0gKHJmX2ZyZXEgLSBsbmJfbG8pICsgKChsbmJfdW5jZXJ0YW5pdHkgKiAyMDApCisJCQkJCSsgKGRhdGFfcmF0ZSAqIDEzNSkpIC8gMjAwOworCisKKwlpY29hcnNlX3R1bmVfZnJlcSA9IDEwMDAwMCAqCisJCQkJKCgocmZfZnJlcSAtIGxuYl9sbykgLQorCQkJCQkoaWZfbGltaXRfbG93ICsgaWZfbGltaXRfaGlnaCkgLyAyKQorCQkJCQkJCQkvIDEwMDAwMCk7CisKKwlpZmluZV90dW5lX2ZyZXEgPSAocmZfZnJlcSAtIGxuYl9sbykgLSBpY29hcnNlX3R1bmVfZnJlcSA7CisKKwlmb3IgKGkgPSAwOyBpIDwgQUxMT1dBQkxFX0ZTX0NPVU5UOyArK2kpIHsKKwkJeDEgPSAoKHJmX2ZyZXEgLSBsbmJfbG8pIC8gKGFmc1tpXSAqIDI1MDApKSAqCisJCQkJCShhZnNbaV0gKiAyNTAwKSArIGFmc1tpXSAqIDI1MDA7CisKKwkJeDIgPSAoKHJmX2ZyZXEgLSBsbmJfbG8pIC8gKGFmc1tpXSAqIDI1MDApKSAqCisJCQkJCQkJKGFmc1tpXSAqIDI1MDApOworCisJCWlmICgoKGJhbmRfbG93IDwgeDEpICYmICh4MSA8IGJhbmRfaGlnaCkpIHx8CisJCQkJCSgoYmFuZF9sb3cgPCB4MikgJiYgKHgyIDwgYmFuZF9oaWdoKSkpCisJCQkJCWluYmFuZF9pbnRlcmZlcmVyX2RpdjRbaV0gPSBUUlVFOworCisJfQorCisJZm9yIChpID0gMDsgaSA8IEFMTE9XQUJMRV9GU19DT1VOVDsgKytpKSB7CisJCXgxID0gKChyZl9mcmVxIC0gbG5iX2xvKSAvIChhZnNbaV0gKiA1MDAwKSkgKgorCQkJCQkoYWZzW2ldICogNTAwMCkgKyBhZnNbaV0gKiA1MDAwOworCisJCXgyID0gKChyZl9mcmVxIC0gbG5iX2xvKSAvIChhZnNbaV0gKiA1MDAwKSkgKgorCQkJCQkoYWZzW2ldICogNTAwMCk7CisKKwkJaWYgKCgoYmFuZF9sb3cgPCB4MSkgJiYgKHgxIDwgYmFuZF9oaWdoKSkgfHwKKwkJCQkJKChiYW5kX2xvdyA8IHgyKSAmJiAoeDIgPCBiYW5kX2hpZ2gpKSkKKwkJCQkJaW5iYW5kX2ludGVyZmVyZXJfZGl2MltpXSA9IFRSVUU7CisJfQorCisJaW5iYW5kX2ludGVyZmVyZXJfaW5kID0gVFJVRTsKKwlmb3IgKGkgPSAwOyBpIDwgQUxMT1dBQkxFX0ZTX0NPVU5UOyArK2kpCisJCWluYmFuZF9pbnRlcmZlcmVyX2luZCAmPSBpbmJhbmRfaW50ZXJmZXJlcl9kaXYyW2ldIHwKKwkJCQkJCWluYmFuZF9pbnRlcmZlcmVyX2RpdjRbaV07CisKKwlpZiAoaW5iYW5kX2ludGVyZmVyZXJfaW5kKSB7CisJCWZvciAoaSA9IDA7IGkgPCBBTExPV0FCTEVfRlNfQ09VTlQ7ICsraSkgeworCQkJaWYgKGluYmFuZF9pbnRlcmZlcmVyX2RpdjJbaV0gPT0gRkFMU0UpIHsKKwkJCQlzYW1wbGVfcmF0ZSA9ICh1OCkgYWZzW2ldOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJfSBlbHNlIHsKKwkJZm9yIChpID0gMDsgaSA8IEFMTE9XQUJMRV9GU19DT1VOVDsgKytpKSB7CisJCQlpZiAoKGluYmFuZF9pbnRlcmZlcmVyX2RpdjJbaV0gfAorCQkJCQlpbmJhbmRfaW50ZXJmZXJlcl9kaXY0W2ldKSA9PSBGQUxTRSkgeworCQkJCXNhbXBsZV9yYXRlID0gKHU4KSBhZnNbaV07CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKworCX0KKworCWlmIChzYW1wbGVfcmF0ZSA+IDIwNyB8fCBzYW1wbGVfcmF0ZSA8IDE5MikKKwkJc2FtcGxlX3JhdGUgPSAyMDA7CisKKwlmaW5lX3R1bmVfZnJlcSA9ICgoMHg0MDAwICogKGlmaW5lX3R1bmVfZnJlcSAvIDEwKSkgLworCQkJCQkoKHNhbXBsZV9yYXRlKSAqIDEwMDApKTsKKworCWNvYXJzZV90dW5lX2ZyZXEgPSAodTgpKGljb2Fyc2VfdHVuZV9mcmVxIC8gMTAwMDAwKTsKKworCXJlZ3NbMF0gPSBzYW1wbGVfcmF0ZTsKKwlyZWdzWzFdID0gY29hcnNlX3R1bmVfZnJlcTsKKwlyZWdzWzJdID0gZmluZV90dW5lX2ZyZXEgJiAweEZGOworCXJlZ3NbM10gPSBmaW5lX3R1bmVfZnJlcSA+PiA4ICYgMHhGRjsKKworCXN0YXR1cyB8PSBzaTIxX3dyaXRlcmVncyhzdGF0ZSwgUExMX0RJVklTT1JfUkVHLCAmcmVnc1swXSwgMHgwNCk7CisKKwlzdGF0ZS0+ZnMgPSBzYW1wbGVfcmF0ZTsvKkFEQyBNSHoqLworCXNpMjF4eF9zZXRhY3F1aXJlKGZlLCBjLT5zeW1ib2xfcmF0ZSwgYy0+ZmVjX2lubmVyKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNpMjF4eF9zbGVlcChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSkKK3sKKwlzdHJ1Y3Qgc2kyMXh4X3N0YXRlICpzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCXU4IHJlZ2RhdGE7CisKKwlkcHJpbnRrKCIlc1xuIiwgX19mdW5jX18pOworCisJc2kyMV9yZWFkcmVncyhzdGF0ZSwgU1lTVEVNX01PREVfUkVHLCAmcmVnZGF0YSwgMHgwMSk7CisJcmVnZGF0YSB8PSAxIDw8IDY7CisJc2kyMV93cml0ZXJlZ3Moc3RhdGUsIFNZU1RFTV9NT0RFX1JFRywgJnJlZ2RhdGEsIDB4MDEpOworCXN0YXRlLT5pbml0aWFsaXNlZCA9IDA7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgc2kyMXh4X3JlbGVhc2Uoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUpCit7CisJc3RydWN0IHNpMjF4eF9zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKworCWRwcmludGsoIiVzXG4iLCBfX2Z1bmNfXyk7CisKKwlrZnJlZShzdGF0ZSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZHZiX2Zyb250ZW5kX29wcyBzaTIxeHhfb3BzID0geworCisJLmluZm8gPSB7CisJCS5uYW1lCQkJPSAiU0wgU0kyMVhYIERWQi1TIiwKKwkJLnR5cGUJCQk9IEZFX1FQU0ssCisJCS5mcmVxdWVuY3lfbWluCQk9IDk1MDAwMCwKKwkJLmZyZXF1ZW5jeV9tYXgJCT0gMjE1MDAwMCwKKwkJLmZyZXF1ZW5jeV9zdGVwc2l6ZQk9IDEyNSwJIC8qIGtIeiBmb3IgUVBTSyBmcm9udGVuZHMgKi8KKwkJLmZyZXF1ZW5jeV90b2xlcmFuY2UJPSAwLAorCQkuc3ltYm9sX3JhdGVfbWluCT0gMTAwMDAwMCwKKwkJLnN5bWJvbF9yYXRlX21heAk9IDQ1MDAwMDAwLAorCQkuc3ltYm9sX3JhdGVfdG9sZXJhbmNlCT0gNTAwLAkvKiBwcG0gKi8KKwkJLmNhcHMgPSBGRV9DQU5fRkVDXzFfMiB8IEZFX0NBTl9GRUNfMl8zIHwgRkVfQ0FOX0ZFQ18zXzQgfAorCQlGRV9DQU5fRkVDXzVfNiB8IEZFX0NBTl9GRUNfN184IHwKKwkJRkVfQ0FOX1FQU0sgfAorCQlGRV9DQU5fRkVDX0FVVE8KKwl9LAorCisJLnJlbGVhc2UgPSBzaTIxeHhfcmVsZWFzZSwKKwkuaW5pdCA9IHNpMjF4eF9pbml0LAorCS5zbGVlcCA9IHNpMjF4eF9zbGVlcCwKKwkud3JpdGUgPSBzaTIxX3dyaXRlLAorCS5yZWFkX3N0YXR1cyA9IHNpMjFfcmVhZF9zdGF0dXMsCisJLnJlYWRfYmVyID0gc2kyMV9yZWFkX2JlciwKKwkucmVhZF9zaWduYWxfc3RyZW5ndGggPSBzaTIxX3JlYWRfc2lnbmFsX3N0cmVuZ3RoLAorCS5yZWFkX3NuciA9IHNpMjFfcmVhZF9zbnIsCisJLnJlYWRfdWNibG9ja3MgPSBzaTIxX3JlYWRfdWNibG9ja3MsCisJLmRpc2VxY19zZW5kX21hc3Rlcl9jbWQgPSBzaTIxeHhfc2VuZF9kaXNlcWNfbXNnLAorCS5kaXNlcWNfc2VuZF9idXJzdCA9IHNpMjF4eF9zZW5kX2Rpc2VxY19idXJzdCwKKwkuc2V0X3RvbmUgPSBzaTIxeHhfc2V0X3RvbmUsCisJLnNldF92b2x0YWdlID0gc2kyMXh4X3NldF92b2x0YWdlLAorCisJLnNldF9wcm9wZXJ0eSA9IHNpMjF4eF9zZXRfcHJvcGVydHksCisJLmdldF9wcm9wZXJ0eSA9IHNpMjF4eF9nZXRfcHJvcGVydHksCisJLnNldF9mcm9udGVuZCA9IHNpMjF4eF9zZXRfZnJvbnRlbmQsCit9OworCitzdHJ1Y3QgZHZiX2Zyb250ZW5kICpzaTIxeHhfYXR0YWNoKGNvbnN0IHN0cnVjdCBzaTIxeHhfY29uZmlnICpjb25maWcsCisJCQkJCQlzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyYykKK3sKKwlzdHJ1Y3Qgc2kyMXh4X3N0YXRlICpzdGF0ZSA9IE5VTEw7CisJaW50IGlkOworCisJZHByaW50aygiJXNcbiIsIF9fZnVuY19fKTsKKworCS8qIGFsbG9jYXRlIG1lbW9yeSBmb3IgdGhlIGludGVybmFsIHN0YXRlICovCisJc3RhdGUgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3Qgc2kyMXh4X3N0YXRlKSwgR0ZQX0tFUk5FTCk7CisJaWYgKHN0YXRlID09IE5VTEwpCisJCWdvdG8gZXJyb3I7CisKKwkvKiBzZXR1cCB0aGUgc3RhdGUgKi8KKwlzdGF0ZS0+Y29uZmlnID0gY29uZmlnOworCXN0YXRlLT5pMmMgPSBpMmM7CisJc3RhdGUtPmluaXRpYWxpc2VkID0gMDsKKwlzdGF0ZS0+ZXJybW9kZSA9IFNUQVRVU19CRVI7CisKKwkvKiBjaGVjayBpZiB0aGUgZGVtb2QgaXMgdGhlcmUgKi8KKwlpZCA9IHNpMjFfcmVhZHJlZyhzdGF0ZSwgU1lTVEVNX01PREVfUkVHKTsKKwlzaTIxX3dyaXRlcmVnKHN0YXRlLCBTWVNURU1fTU9ERV9SRUcsIGlkIHwgMHg0MCk7IC8qIHN0YW5kYnkgb2ZmICovCisJbXNsZWVwKDIwMCk7CisJaWQgPSBzaTIxX3JlYWRyZWcoc3RhdGUsIDB4MDApOworCisJLyogcmVnaXN0ZXIgMHgwMCBjb250YWluczoKKwkJMHgzNCBmb3IgU0kyMTA3CisJCTB4MjQgZm9yIFNJMjEwOAorCQkweDE0IGZvciBTSTIxMDkKKwkJMHgwNCBmb3IgU0kyMTEwCisJKi8KKwlpZiAoaWQgIT0gMHgwNCAmJiBpZCAhPSAweDE0KQorCQlnb3RvIGVycm9yOworCisJLyogY3JlYXRlIGR2Yl9mcm9udGVuZCAqLworCW1lbWNweSgmc3RhdGUtPmZyb250ZW5kLm9wcywgJnNpMjF4eF9vcHMsCisJCQkJCXNpemVvZihzdHJ1Y3QgZHZiX2Zyb250ZW5kX29wcykpOworCXN0YXRlLT5mcm9udGVuZC5kZW1vZHVsYXRvcl9wcml2ID0gc3RhdGU7CisJcmV0dXJuICZzdGF0ZS0+ZnJvbnRlbmQ7CisKK2Vycm9yOgorCWtmcmVlKHN0YXRlKTsKKwlyZXR1cm4gTlVMTDsKK30KK0VYUE9SVF9TWU1CT0woc2kyMXh4X2F0dGFjaCk7CisKK21vZHVsZV9wYXJhbShkZWJ1ZywgaW50LCAwNjQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJUdXJuIG9uL29mZiBmcm9udGVuZCBkZWJ1Z2dpbmcgKGRlZmF1bHQ6b2ZmKS4iKTsKKworTU9EVUxFX0RFU0NSSVBUSU9OKCJTTCBTSTIxWFggRFZCIERlbW9kdWxhdG9yIGRyaXZlciIpOworTU9EVUxFX0FVVEhPUigiSWdvciBNLiBMaXBsaWFuaW4iKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zaTIxeHguaCBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zaTIxeHguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNDFiNWI4Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3NpMjF4eC5oCkBAIC0wLDAgKzEsMzcgQEAKKyNpZm5kZWYgU0kyMVhYX0gKKyNkZWZpbmUgU0kyMVhYX0gKKworI2luY2x1ZGUgPGxpbnV4L2R2Yi9mcm9udGVuZC5oPgorI2luY2x1ZGUgImR2Yl9mcm9udGVuZC5oIgorCitzdHJ1Y3Qgc2kyMXh4X2NvbmZpZyB7CisJLyogdGhlIGRlbW9kdWxhdG9yJ3MgaTJjIGFkZHJlc3MgKi8KKwl1OCBkZW1vZF9hZGRyZXNzOworCisJLyogbWluaW11bSBkZWxheSBiZWZvcmUgcmV0dW5pbmcgKi8KKwlpbnQgbWluX2RlbGF5X21zOworfTsKKworI2lmIGRlZmluZWQoQ09ORklHX0RWQl9TSTIxWFgpIHx8IFwKKwkJKGRlZmluZWQoQ09ORklHX0RWQl9TSTIxWFhfTU9EVUxFKSAmJiBkZWZpbmVkKE1PRFVMRSkpCitleHRlcm4gc3RydWN0IGR2Yl9mcm9udGVuZCAqc2kyMXh4X2F0dGFjaChjb25zdCBzdHJ1Y3Qgc2kyMXh4X2NvbmZpZyAqY29uZmlnLAorCQkJCQkJc3RydWN0IGkyY19hZGFwdGVyICppMmMpOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGR2Yl9mcm9udGVuZCAqc2kyMXh4X2F0dGFjaCgKKwkJY29uc3Qgc3RydWN0IHNpMjF4eF9jb25maWcgKmNvbmZpZywgc3RydWN0IGkyY19hZGFwdGVyICppMmMpCit7CisJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IGRyaXZlciBkaXNhYmxlZCBieSBLY29uZmlnXG4iLCBfX2Z1bmNfXyk7CisJcmV0dXJuIE5VTEw7Cit9CisjZW5kaWYKKworc3RhdGljIGlubGluZSBpbnQgc2kyMXh4X3dyaXRlcmVnaXN0ZXIoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIHU4IHJlZywgdTggdmFsKQoreworCWludCByID0gMDsKKwl1OCBidWZbXSA9IHtyZWcsIHZhbH07CisJaWYgKGZlLT5vcHMud3JpdGUpCisJCXIgPSBmZS0+b3BzLndyaXRlKGZlLCBidWYsIDIpOworCXJldHVybiByOworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zcDg4N3guYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zcDg4N3guYwppbmRleCA0NTQzNjA5Li41NTk1MDlhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvc3A4ODd4LmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3NwODg3eC5jCkBAIC0zMzcsNyArMzM3LDggQEAKIAkJCQkJICAgICBzdHJ1Y3QgZHZiX2Zyb250ZW5kX3BhcmFtZXRlcnMgKnApCiB7CiAJc3RydWN0IHNwODg3eF9zdGF0ZSogc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKLQlpbnQgYWN0dWFsX2ZyZXEsIGVycjsKKwl1bnNpZ25lZCBhY3R1YWxfZnJlcTsKKwlpbnQgZXJyOwogCXUxNiB2YWwsIHJlZzB4YzA1OwogCiAJaWYgKHAtPnUub2ZkbS5iYW5kd2lkdGggIT0gQkFORFdJRFRIXzhfTUhaICYmCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvc3RiNjAwMC5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3N0YjYwMDAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZTJjYjBkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3N0YjYwMDAuYwpAQCAtMCwwICsxLDI1NSBAQAorICAvKgorICAgICBEcml2ZXIgZm9yIFNUIFNUQjYwMDAgRFZCUyBTaWxpY29uIHR1bmVyCisKKyAgICAgQ29weXJpZ2h0IChDKSAyMDA4IElnb3IgTS4gTGlwbGlhbmluIChsaXBsaWFuaW5AbWUuYnkpCisKKyAgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorCisgICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgICAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisKKyAgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2R2Yi9mcm9udGVuZC5oPgorI2luY2x1ZGUgPGFzbS90eXBlcy5oPgorCisjaW5jbHVkZSAic3RiNjAwMC5oIgorCitzdGF0aWMgaW50IGRlYnVnOworI2RlZmluZSBkcHJpbnRrKGFyZ3MuLi4pIFwKKwlkbyB7IFwKKwkJaWYgKGRlYnVnKSBcCisJCQlwcmludGsoS0VSTl9ERUJVRyAic3RiNjAwMDogIiBhcmdzKTsgXAorCX0gd2hpbGUgKDApCisKK3N0cnVjdCBzdGI2MDAwX3ByaXYgeworCS8qIGkyYyBkZXRhaWxzICovCisJaW50IGkyY19hZGRyZXNzOworCXN0cnVjdCBpMmNfYWRhcHRlciAqaTJjOworCXUzMiBmcmVxdWVuY3k7Cit9OworCitzdGF0aWMgaW50IHN0YjYwMDBfcmVsZWFzZShzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSkKK3sKKwlrZnJlZShmZS0+dHVuZXJfcHJpdik7CisJZmUtPnR1bmVyX3ByaXYgPSBOVUxMOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHN0YjYwMDBfc2xlZXAoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUpCit7CisJc3RydWN0IHN0YjYwMDBfcHJpdiAqcHJpdiA9IGZlLT50dW5lcl9wcml2OworCWludCByZXQ7CisJdTggYnVmW10gPSB7IDEwLCAwIH07CisJc3RydWN0IGkyY19tc2cgbXNnID0geworCQkuYWRkciA9IHByaXYtPmkyY19hZGRyZXNzLAorCQkuZmxhZ3MgPSAwLAorCQkuYnVmID0gYnVmLAorCQkubGVuID0gMgorCX07CisKKwlkcHJpbnRrKCIlczpcbiIsIF9fZnVuY19fKTsKKworCWlmIChmZS0+b3BzLmkyY19nYXRlX2N0cmwpCisJCWZlLT5vcHMuaTJjX2dhdGVfY3RybChmZSwgMSk7CisKKwlyZXQgPSBpMmNfdHJhbnNmZXIocHJpdi0+aTJjLCAmbXNnLCAxKTsKKwlpZiAocmV0ICE9IDEpCisJCWRwcmludGsoIiVzOiBpMmMgZXJyb3JcbiIsIF9fZnVuY19fKTsKKworCWlmIChmZS0+b3BzLmkyY19nYXRlX2N0cmwpCisJCWZlLT5vcHMuaTJjX2dhdGVfY3RybChmZSwgMCk7CisKKwlyZXR1cm4gKHJldCA9PSAxKSA/IDAgOiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgc3RiNjAwMF9zZXRfcGFyYW1zKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLAorCQkJCXN0cnVjdCBkdmJfZnJvbnRlbmRfcGFyYW1ldGVycyAqcGFyYW1zKQoreworCXN0cnVjdCBzdGI2MDAwX3ByaXYgKnByaXYgPSBmZS0+dHVuZXJfcHJpdjsKKwl1bnNpZ25lZCBpbnQgbiwgbTsKKwlpbnQgcmV0OworCXUzMiBmcmVxX21oejsKKwlpbnQgYmFuZHdpZHRoOworCXU4IGJ1ZlsxMl07CisJc3RydWN0IGkyY19tc2cgbXNnID0geworCQkuYWRkciA9IHByaXYtPmkyY19hZGRyZXNzLAorCQkuZmxhZ3MgPSAwLAorCQkuYnVmID0gYnVmLAorCQkubGVuID0gMTIKKwl9OworCisJZHByaW50aygiJXM6XG4iLCBfX2Z1bmNfXyk7CisKKwlmcmVxX21oeiA9IHBhcmFtcy0+ZnJlcXVlbmN5IC8gMTAwMDsKKwliYW5kd2lkdGggPSBwYXJhbXMtPnUucXBzay5zeW1ib2xfcmF0ZSAvIDEwMDAwMDA7CisKKwlpZiAoYmFuZHdpZHRoID4gMzEpCisJCWJhbmR3aWR0aCA9IDMxOworCisJaWYgKChmcmVxX21oeiA+IDk0OSkgJiYgKGZyZXFfbWh6IDwgMjE1MSkpIHsKKwkJYnVmWzBdID0gMHgwMTsKKwkJYnVmWzFdID0gMHhhYzsKKwkJaWYgKGZyZXFfbWh6IDwgMTk1MCkKKwkJCWJ1ZlsxXSA9IDB4YWE7CisJCWlmIChmcmVxX21oeiA8IDE4MDApCisJCQlidWZbMV0gPSAweGE4OworCQlpZiAoZnJlcV9taHogPCAxNjUwKQorCQkJYnVmWzFdID0gMHhhNjsKKwkJaWYgKGZyZXFfbWh6IDwgMTUzMCkKKwkJCWJ1ZlsxXSA9IDB4YTU7CisJCWlmIChmcmVxX21oeiA8IDE0NzApCisJCQlidWZbMV0gPSAweGE0OworCQlpZiAoZnJlcV9taHogPCAxMzcwKQorCQkJYnVmWzFdID0gMHhhMjsKKwkJaWYgKGZyZXFfbWh6IDwgMTMwMCkKKwkJCWJ1ZlsxXSA9IDB4YTE7CisJCWlmIChmcmVxX21oeiA8IDEyMDApCisJCQlidWZbMV0gPSAweGEwOworCQlpZiAoZnJlcV9taHogPCAxMDc1KQorCQkJYnVmWzFdID0gMHhiYzsKKwkJaWYgKGZyZXFfbWh6IDwgMTAwMCkKKwkJCWJ1ZlsxXSA9IDB4YmE7CisJCWlmIChmcmVxX21oeiA8IDEwNzUpIHsKKwkJCW4gPSBmcmVxX21oeiAvIDg7IC8qIHZjbz1sbyo0ICovCisJCQltID0gMjsKKwkJfSBlbHNlIHsKKwkJCW4gPSBmcmVxX21oeiAvIDE2OyAvKiB2Y289bG8qMiAqLworCQkJbSA9IDE7CisJCX0KKwkJYnVmWzJdID0gbiA+PiAxOworCQlidWZbM10gPSAodW5zaWduZWQgY2hhcikoKChuICYgMSkgPDwgNykgfAorCQkJCQkobSAqIGZyZXFfbWh6IC0gbiAqIDE2KSB8IDB4NjApOworCQlidWZbNF0gPSAweDA0OworCQlidWZbNV0gPSAweDBlOworCisJCWJ1Zls2XSA9ICh1bnNpZ25lZCBjaGFyKShiYW5kd2lkdGgpOworCisJCWJ1Zls3XSA9IDB4ZDg7CisJCWJ1Zls4XSA9IDB4ZDA7CisJCWJ1Zls5XSA9IDB4NTA7CisJCWJ1ZlsxMF0gPSAweGViOworCQlidWZbMTFdID0gMHg0ZjsKKworCQlpZiAoZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKQorCQkJZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKGZlLCAxKTsKKworCQlyZXQgPSBpMmNfdHJhbnNmZXIocHJpdi0+aTJjLCAmbXNnLCAxKTsKKwkJaWYgKHJldCAhPSAxKQorCQkJZHByaW50aygiJXM6IGkyYyBlcnJvclxuIiwgX19mdW5jX18pOworCisJCXVkZWxheSgxMCk7CisJCWlmIChmZS0+b3BzLmkyY19nYXRlX2N0cmwpCisJCQlmZS0+b3BzLmkyY19nYXRlX2N0cmwoZmUsIDApOworCisJCWJ1ZlswXSA9IDB4MDc7CisJCWJ1ZlsxXSA9IDB4ZGY7CisJCWJ1ZlsyXSA9IDB4ZDA7CisJCWJ1ZlszXSA9IDB4NTA7CisJCWJ1Zls0XSA9IDB4ZmI7CisJCW1zZy5sZW4gPSA1OworCisJCWlmIChmZS0+b3BzLmkyY19nYXRlX2N0cmwpCisJCQlmZS0+b3BzLmkyY19nYXRlX2N0cmwoZmUsIDEpOworCisJCXJldCA9IGkyY190cmFuc2Zlcihwcml2LT5pMmMsICZtc2csIDEpOworCQlpZiAocmV0ICE9IDEpCisJCQlkcHJpbnRrKCIlczogaTJjIGVycm9yXG4iLCBfX2Z1bmNfXyk7CisKKwkJdWRlbGF5KDEwKTsKKwkJaWYgKGZlLT5vcHMuaTJjX2dhdGVfY3RybCkKKwkJCWZlLT5vcHMuaTJjX2dhdGVfY3RybChmZSwgMCk7CisKKwkJcHJpdi0+ZnJlcXVlbmN5ID0gZnJlcV9taHogKiAxMDAwOworCisJCXJldHVybiAocmV0ID09IDEpID8gMCA6IHJldDsKKwl9CisJcmV0dXJuIC0xOworfQorCitzdGF0aWMgaW50IHN0YjYwMDBfZ2V0X2ZyZXF1ZW5jeShzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgdTMyICpmcmVxdWVuY3kpCit7CisJc3RydWN0IHN0YjYwMDBfcHJpdiAqcHJpdiA9IGZlLT50dW5lcl9wcml2OworCSpmcmVxdWVuY3kgPSBwcml2LT5mcmVxdWVuY3k7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZHZiX3R1bmVyX29wcyBzdGI2MDAwX3R1bmVyX29wcyA9IHsKKwkuaW5mbyA9IHsKKwkJLm5hbWUgPSAiU1QgU1RCNjAwMCIsCisJCS5mcmVxdWVuY3lfbWluID0gOTUwMDAwLAorCQkuZnJlcXVlbmN5X21heCA9IDIxNTAwMDAKKwl9LAorCS5yZWxlYXNlID0gc3RiNjAwMF9yZWxlYXNlLAorCS5zbGVlcCA9IHN0YjYwMDBfc2xlZXAsCisJLnNldF9wYXJhbXMgPSBzdGI2MDAwX3NldF9wYXJhbXMsCisJLmdldF9mcmVxdWVuY3kgPSBzdGI2MDAwX2dldF9mcmVxdWVuY3ksCit9OworCitzdHJ1Y3QgZHZiX2Zyb250ZW5kICpzdGI2MDAwX2F0dGFjaChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgaW50IGFkZHIsCisJCQkJCQlzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyYykKK3sKKwlzdHJ1Y3Qgc3RiNjAwMF9wcml2ICpwcml2ID0gTlVMTDsKKwl1OCBiMFtdID0geyAwIH07CisJdTggYjFbXSA9IHsgMCwgMCB9OworCXN0cnVjdCBpMmNfbXNnIG1zZ1syXSA9IHsKKwkJeworCQkJLmFkZHIgPSBhZGRyLAorCQkJLmZsYWdzID0gMCwKKwkJCS5idWYgPSBiMCwKKwkJCS5sZW4gPSAwCisJCX0sIHsKKwkJCS5hZGRyID0gYWRkciwKKwkJCS5mbGFncyA9IEkyQ19NX1JELAorCQkJLmJ1ZiA9IGIxLAorCQkJLmxlbiA9IDIKKwkJfQorCX07CisJaW50IHJldDsKKworCWRwcmludGsoIiVzOlxuIiwgX19mdW5jX18pOworCisJaWYgKGZlLT5vcHMuaTJjX2dhdGVfY3RybCkKKwkJZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKGZlLCAxKTsKKworCS8qIGlzIHNvbWUgaTJjIGRldmljZSBoZXJlID8gKi8KKwlyZXQgPSBpMmNfdHJhbnNmZXIoaTJjLCBtc2csIDIpOworCWlmIChmZS0+b3BzLmkyY19nYXRlX2N0cmwpCisJCWZlLT5vcHMuaTJjX2dhdGVfY3RybChmZSwgMCk7CisKKwlpZiAocmV0ICE9IDIpCisJCXJldHVybiBOVUxMOworCisJcHJpdiA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBzdGI2MDAwX3ByaXYpLCBHRlBfS0VSTkVMKTsKKwlpZiAocHJpdiA9PSBOVUxMKQorCQlyZXR1cm4gTlVMTDsKKworCXByaXYtPmkyY19hZGRyZXNzID0gYWRkcjsKKwlwcml2LT5pMmMgPSBpMmM7CisKKwltZW1jcHkoJmZlLT5vcHMudHVuZXJfb3BzLCAmc3RiNjAwMF90dW5lcl9vcHMsCisJCQkJc2l6ZW9mKHN0cnVjdCBkdmJfdHVuZXJfb3BzKSk7CisKKwlmZS0+dHVuZXJfcHJpdiA9IHByaXY7CisKKwlyZXR1cm4gZmU7Cit9CitFWFBPUlRfU1lNQk9MKHN0YjYwMDBfYXR0YWNoKTsKKworbW9kdWxlX3BhcmFtKGRlYnVnLCBpbnQsIDA2NDQpOworTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgIlR1cm4gb24vb2ZmIGZyb250ZW5kIGRlYnVnZ2luZyAoZGVmYXVsdDpvZmYpLiIpOworCitNT0RVTEVfREVTQ1JJUFRJT04oIkRWQiBTVEI2MDAwIGRyaXZlciIpOworTU9EVUxFX0FVVEhPUigiSWdvciBNLiBMaXBsaWFuaW4gPGxpcGxpYW5pbkBtZS5ieT4iKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zdGI2MDAwLmggYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvc3RiNjAwMC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdiZTQ3OWMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvc3RiNjAwMC5oCkBAIC0wLDAgKzEsNTEgQEAKKyAgLyoKKyAgICAgRHJpdmVyIGZvciBTVCBzdGI2MDAwIERWQlMgU2lsaWNvbiB0dW5lcgorCisgICAgIENvcHlyaWdodCAoQykgMjAwOCBJZ29yIE0uIExpcGxpYW5pbiAobGlwbGlhbmluQG1lLmJ5KQorCisgICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKworICAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICAgIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorCisgICovCisKKyNpZm5kZWYgX19EVkJfU1RCNjAwMF9IX18KKyNkZWZpbmUgX19EVkJfU1RCNjAwMF9IX18KKworI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgImR2Yl9mcm9udGVuZC5oIgorCisvKioKKyAqIEF0dGFjaCBhIHN0YjYwMDAgdHVuZXIgdG8gdGhlIHN1cHBsaWVkIGZyb250ZW5kIHN0cnVjdHVyZS4KKyAqCisgKiBAcGFyYW0gZmUgRnJvbnRlbmQgdG8gYXR0YWNoIHRvLgorICogQHBhcmFtIGFkZHIgaTJjIGFkZHJlc3Mgb2YgdGhlIHR1bmVyLgorICogQHBhcmFtIGkyYyBpMmMgYWRhcHRlciB0byB1c2UuCisgKiBAcmV0dXJuIEZFIHBvaW50ZXIgb24gc3VjY2VzcywgTlVMTCBvbiBmYWlsdXJlLgorICovCisjaWYgZGVmaW5lZChDT05GSUdfRFZCX1NUQjYwMDApIHx8IChkZWZpbmVkKENPTkZJR19EVkJfU1RCNjAwMF9NT0RVTEUpIFwKKwkJCQkJCQkmJiBkZWZpbmVkKE1PRFVMRSkpCitleHRlcm4gc3RydWN0IGR2Yl9mcm9udGVuZCAqc3RiNjAwMF9hdHRhY2goc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIGludCBhZGRyLAorCQkJCQkgICBzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyYyk7CisjZWxzZQorc3RhdGljIGlubGluZSBzdHJ1Y3QgZHZiX2Zyb250ZW5kICpzdGI2MDAwX2F0dGFjaChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwKKwkJCQkJCSAgaW50IGFkZHIsCisJCQkJCQkgIHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjKQoreworCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBkcml2ZXIgZGlzYWJsZWQgYnkgS2NvbmZpZ1xuIiwgX19mdW5jX18pOworCXJldHVybiBOVUxMOworfQorI2VuZGlmIC8qIENPTkZJR19EVkJfU1RCNjAwMCAqLworCisjZW5kaWYgLyogX19EVkJfU1RCNjAwMF9IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zdHYwMjg4LmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvc3R2MDI4OC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZmMTE5NGQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvc3R2MDI4OC5jCkBAIC0wLDAgKzEsNjE4IEBACisvKgorCURyaXZlciBmb3IgU1QgU1RWMDI4OCBkZW1vZHVsYXRvcgorCUNvcHlyaWdodCAoQykgMjAwNiBHZW9yZyBBY2hlciwgQmF5Q29tIEdtYkgsIGFjaGVyIChhdCkgYmF5Y29tIChkb3QpIGRlCisJCWZvciBSZWVsIE11bHRpbWVkaWEKKwlDb3B5cmlnaHQgKEMpIDIwMDggVHVyYm9TaWdodC5jb20sIEJvYiBMaXUgPGJvYkB0dXJib3NpZ2h0LmNvbT4KKwlDb3B5cmlnaHQgKEMpIDIwMDggSWdvciBNLiBMaXBsaWFuaW4gPGxpcGxpYW5pbkBtZS5ieT4KKwkJUmVtb3ZlZCBzdGI2MDAwIHNwZWNpZmljIHR1bmVyIGNvZGUgYW5kIHJldmlzZWQgc29tZQorCQlwcm9jZWR1cmVzLgorCisJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKwlpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorCXRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisJKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworCVRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorCWJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisJTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorCUdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKwlZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorCWFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisJRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisKKyovCisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2ppZmZpZXMuaD4KKyNpbmNsdWRlIDxhc20vZGl2NjQuaD4KKworI2luY2x1ZGUgImR2Yl9mcm9udGVuZC5oIgorI2luY2x1ZGUgInN0djAyODguaCIKKworc3RydWN0IHN0djAyODhfc3RhdGUgeworCXN0cnVjdCBpMmNfYWRhcHRlciAqaTJjOworCWNvbnN0IHN0cnVjdCBzdHYwMjg4X2NvbmZpZyAqY29uZmlnOworCXN0cnVjdCBkdmJfZnJvbnRlbmQgZnJvbnRlbmQ7CisKKwl1OCBpbml0aWFsaXNlZDoxOworCXUzMiB0dW5lcl9mcmVxdWVuY3k7CisJdTMyIHN5bWJvbF9yYXRlOworCWZlX2NvZGVfcmF0ZV90IGZlY19pbm5lcjsKKwlpbnQgZXJybW9kZTsKK307CisKKyNkZWZpbmUgU1RBVFVTX0JFUiAwCisjZGVmaW5lIFNUQVRVU19VQ0JMT0NLUyAxCisKK3N0YXRpYyBpbnQgZGVidWc7CitzdGF0aWMgaW50IGRlYnVnX2xlZ2FjeV9kaXNoX3N3aXRjaDsKKyNkZWZpbmUgZHByaW50ayhhcmdzLi4uKSBcCisJZG8geyBcCisJCWlmIChkZWJ1ZykgXAorCQkJcHJpbnRrKEtFUk5fREVCVUcgInN0djAyODg6ICIgYXJncyk7IFwKKwl9IHdoaWxlICgwKQorCisKK3N0YXRpYyBpbnQgc3R2MDI4OF93cml0ZXJlZ0koc3RydWN0IHN0djAyODhfc3RhdGUgKnN0YXRlLCB1OCByZWcsIHU4IGRhdGEpCit7CisJaW50IHJldDsKKwl1OCBidWZbXSA9IHsgcmVnLCBkYXRhIH07CisJc3RydWN0IGkyY19tc2cgbXNnID0geworCQkuYWRkciA9IHN0YXRlLT5jb25maWctPmRlbW9kX2FkZHJlc3MsCisJCS5mbGFncyA9IDAsCisJCS5idWYgPSBidWYsCisJCS5sZW4gPSAyCisJfTsKKworCXJldCA9IGkyY190cmFuc2ZlcihzdGF0ZS0+aTJjLCAmbXNnLCAxKTsKKworCWlmIChyZXQgIT0gMSkKKwkJZHByaW50aygiJXM6IHdyaXRlcmVnIGVycm9yIChyZWcgPT0gMHglMDJ4LCB2YWwgPT0gMHglMDJ4LCAiCisJCQkicmV0ID09ICVpKVxuIiwgX19mdW5jX18sIHJlZywgZGF0YSwgcmV0KTsKKworCXJldHVybiAocmV0ICE9IDEpID8gLUVSRU1PVEVJTyA6IDA7Cit9CisKK3N0YXRpYyBpbnQgc3R2MDI4OF93cml0ZShzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgdTggKmJ1ZiwgaW50IGxlbikKK3sKKwlzdHJ1Y3Qgc3R2MDI4OF9zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKworCWlmIChsZW4gIT0gMikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXR1cm4gc3R2MDI4OF93cml0ZXJlZ0koc3RhdGUsIGJ1ZlswXSwgYnVmWzFdKTsKK30KKworc3RhdGljIHU4IHN0djAyODhfcmVhZHJlZyhzdHJ1Y3Qgc3R2MDI4OF9zdGF0ZSAqc3RhdGUsIHU4IHJlZykKK3sKKwlpbnQgcmV0OworCXU4IGIwW10gPSB7IHJlZyB9OworCXU4IGIxW10gPSB7IDAgfTsKKwlzdHJ1Y3QgaTJjX21zZyBtc2dbXSA9IHsKKwkJeworCQkJLmFkZHIgPSBzdGF0ZS0+Y29uZmlnLT5kZW1vZF9hZGRyZXNzLAorCQkJLmZsYWdzID0gMCwKKwkJCS5idWYgPSBiMCwKKwkJCS5sZW4gPSAxCisJCX0sIHsKKwkJCS5hZGRyID0gc3RhdGUtPmNvbmZpZy0+ZGVtb2RfYWRkcmVzcywKKwkJCS5mbGFncyA9IEkyQ19NX1JELAorCQkJLmJ1ZiA9IGIxLAorCQkJLmxlbiA9IDEKKwkJfQorCX07CisKKwlyZXQgPSBpMmNfdHJhbnNmZXIoc3RhdGUtPmkyYywgbXNnLCAyKTsKKworCWlmIChyZXQgIT0gMikKKwkJZHByaW50aygiJXM6IHJlYWRyZWcgZXJyb3IgKHJlZyA9PSAweCUwMngsIHJldCA9PSAlaSlcbiIsCisJCQkJX19mdW5jX18sIHJlZywgcmV0KTsKKworCXJldHVybiBiMVswXTsKK30KKworc3RhdGljIGludCBzdHYwMjg4X3NldF9zeW1ib2xyYXRlKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCB1MzIgc3JhdGUpCit7CisJc3RydWN0IHN0djAyODhfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisJdW5zaWduZWQgaW50IHRlbXA7CisJdW5zaWduZWQgY2hhciBiWzNdOworCisJaWYgKChzcmF0ZSA8IDEwMDAwMDApIHx8IChzcmF0ZSA+IDQ1MDAwMDAwKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwl0ZW1wID0gKHVuc2lnbmVkIGludClzcmF0ZSAvIDEwMDA7CisKKwkJdGVtcCA9IHRlbXAgKiAzMjc2ODsKKwkJdGVtcCA9IHRlbXAgLyAyNTsKKwkJdGVtcCA9IHRlbXAgLyAxMjU7CisJCWJbMF0gPSAodW5zaWduZWQgY2hhcikoKHRlbXAgPj4gMTIpICYgMHhmZik7CisJCWJbMV0gPSAodW5zaWduZWQgY2hhcikoKHRlbXAgPj4gNCkgJiAweGZmKTsKKwkJYlsyXSA9ICh1bnNpZ25lZCBjaGFyKSgodGVtcCA8PCA0KSAmIDB4ZjApOworCQlzdHYwMjg4X3dyaXRlcmVnSShzdGF0ZSwgMHgyOCwgMHg4MCk7IC8qIFNGUkggKi8KKwkJc3R2MDI4OF93cml0ZXJlZ0koc3RhdGUsIDB4MjksIDApOyAvKiBTRlJNICovCisJCXN0djAyODhfd3JpdGVyZWdJKHN0YXRlLCAweDJhLCAwKTsgLyogU0ZSTCAqLworCisJCXN0djAyODhfd3JpdGVyZWdJKHN0YXRlLCAweDI4LCBiWzBdKTsKKwkJc3R2MDI4OF93cml0ZXJlZ0koc3RhdGUsIDB4MjksIGJbMV0pOworCQlzdHYwMjg4X3dyaXRlcmVnSShzdGF0ZSwgMHgyYSwgYlsyXSk7CisJCWRwcmludGsoInN0djAyODg6IHN0djAyODhfc2V0X3N5bWJvbHJhdGVcbiIpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc3R2MDI4OF9zZW5kX2Rpc2VxY19tc2coc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsCisJCQkJICAgIHN0cnVjdCBkdmJfZGlzZXFjX21hc3Rlcl9jbWQgKm0pCit7CisJc3RydWN0IHN0djAyODhfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisKKwlpbnQgaTsKKworCWRwcmludGsoIiVzXG4iLCBfX2Z1bmNfXyk7CisKKwlzdHYwMjg4X3dyaXRlcmVnSShzdGF0ZSwgMHgwOSwgMCk7CisJbXNsZWVwKDMwKTsKKwlzdHYwMjg4X3dyaXRlcmVnSShzdGF0ZSwgMHgwNSwgMHgxNik7CisKKwlmb3IgKGkgPSAwOyBpIDwgbS0+bXNnX2xlbjsgaSsrKSB7CisJCWlmIChzdHYwMjg4X3dyaXRlcmVnSShzdGF0ZSwgMHgwNiwgbS0+bXNnW2ldKSkKKwkJCXJldHVybiAtRVJFTU9URUlPOworCQltc2xlZXAoMTIpOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHN0djAyODhfc2VuZF9kaXNlcWNfYnVyc3Qoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsCisJCQkJCQlmZV9zZWNfbWluaV9jbWRfdCBidXJzdCkKK3sKKwlzdHJ1Y3Qgc3R2MDI4OF9zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKworCWRwcmludGsoIiVzXG4iLCBfX2Z1bmNfXyk7CisKKwlpZiAoc3R2MDI4OF93cml0ZXJlZ0koc3RhdGUsIDB4MDUsIDB4MTYpKS8qIGJ1cnN0IG1vZGUgKi8KKwkJcmV0dXJuIC1FUkVNT1RFSU87CisKKwlpZiAoc3R2MDI4OF93cml0ZXJlZ0koc3RhdGUsIDB4MDYsIGJ1cnN0ID09IFNFQ19NSU5JX0EgPyAweDAwIDogMHhmZikpCisJCXJldHVybiAtRVJFTU9URUlPOworCisJaWYgKHN0djAyODhfd3JpdGVyZWdJKHN0YXRlLCAweDA2LCAweDEyKSkKKwkJcmV0dXJuIC1FUkVNT1RFSU87CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzdHYwMjg4X3NldF90b25lKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCBmZV9zZWNfdG9uZV9tb2RlX3QgdG9uZSkKK3sKKwlzdHJ1Y3Qgc3R2MDI4OF9zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKworCXN3aXRjaCAodG9uZSkgeworCWNhc2UgU0VDX1RPTkVfT046CisJCWlmIChzdHYwMjg4X3dyaXRlcmVnSShzdGF0ZSwgMHgwNSwgMHgxMCkpLyogYnVyc3QgbW9kZSAqLworCQkJcmV0dXJuIC1FUkVNT1RFSU87CisJCXJldHVybiBzdHYwMjg4X3dyaXRlcmVnSShzdGF0ZSwgMHgwNiwgMHhmZik7CisKKwljYXNlIFNFQ19UT05FX09GRjoKKwkJaWYgKHN0djAyODhfd3JpdGVyZWdJKHN0YXRlLCAweDA1LCAweDEzKSkvKiBidXJzdCBtb2RlICovCisJCQlyZXR1cm4gLUVSRU1PVEVJTzsKKwkJcmV0dXJuIHN0djAyODhfd3JpdGVyZWdJKHN0YXRlLCAweDA2LCAweDAwKTsKKworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KK30KKworc3RhdGljIHU4IHN0djAyODhfaW5pdHRhYltdID0geworCTB4MDEsIDB4MTUsCisJMHgwMiwgMHgyMCwKKwkweDA5LCAweDAsCisJMHgwYSwgMHg0LAorCTB4MGIsIDB4MCwKKwkweDBjLCAweDAsCisJMHgwZCwgMHgwLAorCTB4MGUsIDB4ZDQsCisJMHgwZiwgMHgzMCwKKwkweDExLCAweDgwLAorCTB4MTIsIDB4MDMsCisJMHgxMywgMHg0OCwKKwkweDE0LCAweDg0LAorCTB4MTUsIDB4NDUsCisJMHgxNiwgMHhiNywKKwkweDE3LCAweDljLAorCTB4MTgsIDB4MCwKKwkweDE5LCAweGE2LAorCTB4MWEsIDB4ODgsCisJMHgxYiwgMHg4ZiwKKwkweDFjLCAweGYwLAorCTB4MjAsIDB4MGIsCisJMHgyMSwgMHg1NCwKKwkweDIyLCAweDAsCisJMHgyMywgMHgwLAorCTB4MmIsIDB4ZmYsCisJMHgyYywgMHhmNywKKwkweDMwLCAweDAsCisJMHgzMSwgMHgxZSwKKwkweDMyLCAweDE0LAorCTB4MzMsIDB4MGYsCisJMHgzNCwgMHgwOSwKKwkweDM1LCAweDBjLAorCTB4MzYsIDB4MDUsCisJMHgzNywgMHgyZiwKKwkweDM4LCAweDE2LAorCTB4MzksIDB4YmUsCisJMHgzYSwgMHgwLAorCTB4M2IsIDB4MTMsCisJMHgzYywgMHgxMSwKKwkweDNkLCAweDMwLAorCTB4NDAsIDB4NjMsCisJMHg0MSwgMHgwNCwKKwkweDQyLCAweDYwLAorCTB4NDMsIDB4MDAsCisJMHg0NCwgMHgwMCwKKwkweDQ1LCAweDAwLAorCTB4NDYsIDB4MDAsCisJMHg0NywgMHgwMCwKKwkweDRhLCAweDAwLAorCTB4NTAsIDB4MTAsCisJMHg1MSwgMHgzOCwKKwkweDUyLCAweDIxLAorCTB4NTgsIDB4NTQsCisJMHg1OSwgMHg4NiwKKwkweDVhLCAweDAsCisJMHg1YiwgMHg5YiwKKwkweDVjLCAweDA4LAorCTB4NWQsIDB4N2YsCisJMHg1ZSwgMHgwLAorCTB4NWYsIDB4ZmYsCisJMHg3MCwgMHgwLAorCTB4NzEsIDB4MCwKKwkweDcyLCAweDAsCisJMHg3NCwgMHgwLAorCTB4NzUsIDB4MCwKKwkweDc2LCAweDAsCisJMHg4MSwgMHgwLAorCTB4ODIsIDB4M2YsCisJMHg4MywgMHgzZiwKKwkweDg0LCAweDAsCisJMHg4NSwgMHgwLAorCTB4ODgsIDB4MCwKKwkweDg5LCAweDAsCisJMHg4YSwgMHgwLAorCTB4OGIsIDB4MCwKKwkweDhjLCAweDAsCisJMHg5MCwgMHgwLAorCTB4OTEsIDB4MCwKKwkweDkyLCAweDAsCisJMHg5MywgMHgwLAorCTB4OTQsIDB4MWMsCisJMHg5NywgMHgwLAorCTB4YTAsIDB4NDgsCisJMHhhMSwgMHgwLAorCTB4YjAsIDB4YjgsCisJMHhiMSwgMHgzYSwKKwkweGIyLCAweDEwLAorCTB4YjMsIDB4ODIsCisJMHhiNCwgMHg4MCwKKwkweGI1LCAweDgyLAorCTB4YjYsIDB4ODIsCisJMHhiNywgMHg4MiwKKwkweGI4LCAweDIwLAorCTB4YjksIDB4MCwKKwkweGYwLCAweDAsCisJMHhmMSwgMHgwLAorCTB4ZjIsIDB4YzAsCisJMHg1MSwgMHgzNiwKKwkweDUyLCAweDA5LAorCTB4NTMsIDB4OTQsCisJMHg1NCwgMHg2MiwKKwkweDU1LCAweDI5LAorCTB4NTYsIDB4NjQsCisJMHg1NywgMHgyYiwKKwkweGZmLCAweGZmLAorfTsKKworc3RhdGljIGludCBzdHYwMjg4X3NldF92b2x0YWdlKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCBmZV9zZWNfdm9sdGFnZV90IHZvbHQpCit7CisJZHByaW50aygiJXM6ICVzXG4iLCBfX2Z1bmNfXywKKwkJdm9sdCA9PSBTRUNfVk9MVEFHRV8xMyA/ICJTRUNfVk9MVEFHRV8xMyIgOgorCQl2b2x0ID09IFNFQ19WT0xUQUdFXzE4ID8gIlNFQ19WT0xUQUdFXzE4IiA6ICI/PyIpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc3R2MDI4OF9pbml0KHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlKQoreworCXN0cnVjdCBzdHYwMjg4X3N0YXRlICpzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCWludCBpOworCXU4IHJlZzsKKwl1OCB2YWw7CisKKwlkcHJpbnRrKCJzdHYwMjg4OiBpbml0IGNoaXBcbiIpOworCXN0djAyODhfd3JpdGVyZWdJKHN0YXRlLCAweDQxLCAweDA0KTsKKwltc2xlZXAoNTApOworCisJLyogd2UgaGF2ZSBkZWZhdWx0IGluaXR0YWIgKi8KKwlpZiAoc3RhdGUtPmNvbmZpZy0+aW5pdHRhYiA9PSBOVUxMKSB7CisJCWZvciAoaSA9IDA7ICEoc3R2MDI4OF9pbml0dGFiW2ldID09IDB4ZmYgJiYKKwkJCQlzdHYwMjg4X2luaXR0YWJbaSArIDFdID09IDB4ZmYpOyBpICs9IDIpCisJCQlzdHYwMjg4X3dyaXRlcmVnSShzdGF0ZSwgc3R2MDI4OF9pbml0dGFiW2ldLAorCQkJCQlzdHYwMjg4X2luaXR0YWJbaSArIDFdKTsKKwl9IGVsc2UgeworCQlmb3IgKGkgPSAwOyA7IGkgKz0gMikgIHsKKwkJCXJlZyA9IHN0YXRlLT5jb25maWctPmluaXR0YWJbaV07CisJCQl2YWwgPSBzdGF0ZS0+Y29uZmlnLT5pbml0dGFiW2krMV07CisJCQlpZiAocmVnID09IDB4ZmYgJiYgdmFsID09IDB4ZmYpCisJCQkJYnJlYWs7CisJCQlzdHYwMjg4X3dyaXRlcmVnSShzdGF0ZSwgcmVnLCB2YWwpOworCQl9CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHN0djAyODhfcmVhZF9zdGF0dXMoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIGZlX3N0YXR1c190ICpzdGF0dXMpCit7CisJc3RydWN0IHN0djAyODhfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisKKwl1OCBzeW5jID0gc3R2MDI4OF9yZWFkcmVnKHN0YXRlLCAweDI0KTsKKwlpZiAoc3luYyA9PSAyNTUpCisJCXN5bmMgPSAwOworCisJZHByaW50aygiJXMgOiBGRV9SRUFEX1NUQVRVUyA6IFZTVEFUVVM6IDB4JTAyeFxuIiwgX19mdW5jX18sIHN5bmMpOworCisJKnN0YXR1cyA9IDA7CisKKwlpZiAoKHN5bmMgJiAweDA4KSA9PSAweDA4KSB7CisJCSpzdGF0dXMgfD0gRkVfSEFTX0xPQ0s7CisJCWRwcmludGsoInN0djAyODggaGFzIGxvY2tlZFxuIik7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc3R2MDI4OF9yZWFkX2JlcihzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgdTMyICpiZXIpCit7CisJc3RydWN0IHN0djAyODhfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisKKwlpZiAoc3RhdGUtPmVycm1vZGUgIT0gU1RBVFVTX0JFUikKKwkJcmV0dXJuIDA7CisJKmJlciA9IChzdHYwMjg4X3JlYWRyZWcoc3RhdGUsIDB4MjYpIDw8IDgpIHwKKwkJCQkJc3R2MDI4OF9yZWFkcmVnKHN0YXRlLCAweDI3KTsKKwlkcHJpbnRrKCJzdHYwMjg4X3JlYWRfYmVyICVkXG4iLCAqYmVyKTsKKworCXJldHVybiAwOworfQorCisKK3N0YXRpYyBpbnQgc3R2MDI4OF9yZWFkX3NpZ25hbF9zdHJlbmd0aChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgdTE2ICpzdHJlbmd0aCkKK3sKKwlzdHJ1Y3Qgc3R2MDI4OF9zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKworCXMzMiBzaWduYWwgPSAgMHhmZmZmIC0gKChzdHYwMjg4X3JlYWRyZWcoc3RhdGUsIDB4MTApIDw8IDgpKTsKKworCisJc2lnbmFsID0gc2lnbmFsICogNSAvIDQ7CisJKnN0cmVuZ3RoID0gKHNpZ25hbCA+IDB4ZmZmZikgPyAweGZmZmYgOiAoc2lnbmFsIDwgMCkgPyAwIDogc2lnbmFsOworCWRwcmludGsoInN0djAyODhfcmVhZF9zaWduYWxfc3RyZW5ndGggJWRcbiIsICpzdHJlbmd0aCk7CisKKwlyZXR1cm4gMDsKK30KK3N0YXRpYyBpbnQgc3R2MDI4OF9zbGVlcChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSkKK3sKKwlzdHJ1Y3Qgc3R2MDI4OF9zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKworCXN0djAyODhfd3JpdGVyZWdJKHN0YXRlLCAweDQxLCAweDg0KTsKKwlzdGF0ZS0+aW5pdGlhbGlzZWQgPSAwOworCisJcmV0dXJuIDA7Cit9CitzdGF0aWMgaW50IHN0djAyODhfcmVhZF9zbnIoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIHUxNiAqc25yKQoreworCXN0cnVjdCBzdHYwMjg4X3N0YXRlICpzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCisJczMyIHhzbnIgPSAweGZmZmYgLSAoKHN0djAyODhfcmVhZHJlZyhzdGF0ZSwgMHgyZCkgPDwgOCkKKwkJCSAgIHwgc3R2MDI4OF9yZWFkcmVnKHN0YXRlLCAweDJlKSk7CisJeHNuciA9IDMgKiAoeHNuciAtIDB4YTEwMCk7CisJKnNuciA9ICh4c25yID4gMHhmZmZmKSA/IDB4ZmZmZiA6ICh4c25yIDwgMCkgPyAwIDogeHNucjsKKwlkcHJpbnRrKCJzdHYwMjg4X3JlYWRfc25yICVkXG4iLCAqc25yKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHN0djAyODhfcmVhZF91Y2Jsb2NrcyhzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgdTMyICp1Y2Jsb2NrcykKK3sKKwlzdHJ1Y3Qgc3R2MDI4OF9zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKworCWlmIChzdGF0ZS0+ZXJybW9kZSAhPSBTVEFUVVNfQkVSKQorCQlyZXR1cm4gMDsKKwkqdWNibG9ja3MgPSAoc3R2MDI4OF9yZWFkcmVnKHN0YXRlLCAweDI2KSA8PCA4KSB8CisJCQkJCXN0djAyODhfcmVhZHJlZyhzdGF0ZSwgMHgyNyk7CisJZHByaW50aygic3R2MDI4OF9yZWFkX2JlciAlZFxuIiwgKnVjYmxvY2tzKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHN0djAyODhfc2V0X3Byb3BlcnR5KHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCBzdHJ1Y3QgZHR2X3Byb3BlcnR5ICpwKQoreworCWRwcmludGsoIiVzKC4uKVxuIiwgX19mdW5jX18pOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHN0djAyODhfZ2V0X3Byb3BlcnR5KHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCBzdHJ1Y3QgZHR2X3Byb3BlcnR5ICpwKQoreworCWRwcmludGsoIiVzKC4uKVxuIiwgX19mdW5jX18pOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHN0djAyODhfc2V0X2Zyb250ZW5kKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLAorCQkJCQlzdHJ1Y3QgZHZiX2Zyb250ZW5kX3BhcmFtZXRlcnMgKmRmcCkKK3sKKwlzdHJ1Y3Qgc3R2MDI4OF9zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKwlzdHJ1Y3QgZHR2X2Zyb250ZW5kX3Byb3BlcnRpZXMgKmMgPSAmZmUtPmR0dl9wcm9wZXJ0eV9jYWNoZTsKKworCWNoYXIgdG07CisJdW5zaWduZWQgY2hhciB0ZGFbM107CisKKwlkcHJpbnRrKCIlcyA6IEZFX1NFVF9GUk9OVEVORFxuIiwgX19mdW5jX18pOworCisJaWYgKGMtPmRlbGl2ZXJ5X3N5c3RlbSAhPSBTWVNfRFZCUykgeworCQkJZHByaW50aygiJXM6IHVuc3VwcG9ydGVkIGRlbGl2ZXJ5ICIKKwkJCQkic3lzdGVtIHNlbGVjdGVkICglZClcbiIsCisJCQkJX19mdW5jX18sIGMtPmRlbGl2ZXJ5X3N5c3RlbSk7CisJCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisJfQorCisJaWYgKHN0YXRlLT5jb25maWctPnNldF90c19wYXJhbXMpCisJCXN0YXRlLT5jb25maWctPnNldF90c19wYXJhbXMoZmUsIDApOworCisJLyogb25seSBmcmVxdWVuY3kgJiBzeW1ib2xfcmF0ZSBhcmUgdXNlZCBmb3IgdHVuZXIqLworCWRmcC0+ZnJlcXVlbmN5ID0gYy0+ZnJlcXVlbmN5OworCWRmcC0+dS5xcHNrLnN5bWJvbF9yYXRlID0gYy0+c3ltYm9sX3JhdGU7CisJaWYgKGZlLT5vcHMudHVuZXJfb3BzLnNldF9wYXJhbXMpIHsKKwkJZmUtPm9wcy50dW5lcl9vcHMuc2V0X3BhcmFtcyhmZSwgZGZwKTsKKwkJaWYgKGZlLT5vcHMuaTJjX2dhdGVfY3RybCkKKwkJCWZlLT5vcHMuaTJjX2dhdGVfY3RybChmZSwgMCk7CisJfQorCisJdWRlbGF5KDEwKTsKKwlzdHYwMjg4X3NldF9zeW1ib2xyYXRlKGZlLCBjLT5zeW1ib2xfcmF0ZSk7CisJLyogQ2FycmllciBsb2NrIGNvbnRyb2wgcmVnaXN0ZXIgKi8KKwlzdHYwMjg4X3dyaXRlcmVnSShzdGF0ZSwgMHgxNSwgMHhjNSk7CisKKwl0ZGFbMF0gPSAweDJiOyAvKiBDRlJNICovCisJdGRhWzJdID0gMHgwOyAvKiBDRlJMICovCisJZm9yICh0bSA9IC02OyB0bSA8IDc7KSB7CisJCS8qIFZpdGVyYmkgc3RhdHVzICovCisJCWlmIChzdHYwMjg4X3JlYWRyZWcoc3RhdGUsIDB4MjQpICYgMHg4MCkKKwkJCWJyZWFrOworCisJCXRkYVsyXSArPSA0MDsKKwkJaWYgKHRkYVsyXSA8IDQwKQorCQkJdG0rKzsKKwkJdGRhWzFdID0gKHVuc2lnbmVkIGNoYXIpdG07CisJCXN0djAyODhfd3JpdGVyZWdJKHN0YXRlLCAweDJiLCB0ZGFbMV0pOworCQlzdHYwMjg4X3dyaXRlcmVnSShzdGF0ZSwgMHgyYywgdGRhWzJdKTsKKwkJdWRlbGF5KDMwKTsKKwl9CisKKwlzdGF0ZS0+dHVuZXJfZnJlcXVlbmN5ID0gYy0+ZnJlcXVlbmN5OworCXN0YXRlLT5mZWNfaW5uZXIgPSBGRUNfQVVUTzsKKwlzdGF0ZS0+c3ltYm9sX3JhdGUgPSBjLT5zeW1ib2xfcmF0ZTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHN0djAyODhfaTJjX2dhdGVfY3RybChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgaW50IGVuYWJsZSkKK3sKKwlzdHJ1Y3Qgc3R2MDI4OF9zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKworCWlmIChlbmFibGUpCisJCXN0djAyODhfd3JpdGVyZWdJKHN0YXRlLCAweDAxLCAweGI1KTsKKwllbHNlCisJCXN0djAyODhfd3JpdGVyZWdJKHN0YXRlLCAweDAxLCAweDM1KTsKKworCXVkZWxheSgxKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBzdHYwMjg4X3JlbGVhc2Uoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUpCit7CisJc3RydWN0IHN0djAyODhfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisJa2ZyZWUoc3RhdGUpOworfQorCitzdGF0aWMgc3RydWN0IGR2Yl9mcm9udGVuZF9vcHMgc3R2MDI4OF9vcHMgPSB7CisKKwkuaW5mbyA9IHsKKwkJLm5hbWUJCQk9ICJTVCBTVFYwMjg4IERWQi1TIiwKKwkJLnR5cGUJCQk9IEZFX1FQU0ssCisJCS5mcmVxdWVuY3lfbWluCQk9IDk1MDAwMCwKKwkJLmZyZXF1ZW5jeV9tYXgJCT0gMjE1MDAwMCwKKwkJLmZyZXF1ZW5jeV9zdGVwc2l6ZQk9IDEwMDAsCSAvKiBrSHogZm9yIFFQU0sgZnJvbnRlbmRzICovCisJCS5mcmVxdWVuY3lfdG9sZXJhbmNlCT0gMCwKKwkJLnN5bWJvbF9yYXRlX21pbgk9IDEwMDAwMDAsCisJCS5zeW1ib2xfcmF0ZV9tYXgJPSA0NTAwMDAwMCwKKwkJLnN5bWJvbF9yYXRlX3RvbGVyYW5jZQk9IDUwMCwJLyogcHBtICovCisJCS5jYXBzID0gRkVfQ0FOX0ZFQ18xXzIgfCBGRV9DQU5fRkVDXzJfMyB8IEZFX0NBTl9GRUNfM180IHwKKwkJICAgICAgRkVfQ0FOX0ZFQ181XzYgfCBGRV9DQU5fRkVDXzdfOCB8CisJCSAgICAgIEZFX0NBTl9RUFNLIHwKKwkJICAgICAgRkVfQ0FOX0ZFQ19BVVRPCisJfSwKKworCS5yZWxlYXNlID0gc3R2MDI4OF9yZWxlYXNlLAorCS5pbml0ID0gc3R2MDI4OF9pbml0LAorCS5zbGVlcCA9IHN0djAyODhfc2xlZXAsCisJLndyaXRlID0gc3R2MDI4OF93cml0ZSwKKwkuaTJjX2dhdGVfY3RybCA9IHN0djAyODhfaTJjX2dhdGVfY3RybCwKKwkucmVhZF9zdGF0dXMgPSBzdHYwMjg4X3JlYWRfc3RhdHVzLAorCS5yZWFkX2JlciA9IHN0djAyODhfcmVhZF9iZXIsCisJLnJlYWRfc2lnbmFsX3N0cmVuZ3RoID0gc3R2MDI4OF9yZWFkX3NpZ25hbF9zdHJlbmd0aCwKKwkucmVhZF9zbnIgPSBzdHYwMjg4X3JlYWRfc25yLAorCS5yZWFkX3VjYmxvY2tzID0gc3R2MDI4OF9yZWFkX3VjYmxvY2tzLAorCS5kaXNlcWNfc2VuZF9tYXN0ZXJfY21kID0gc3R2MDI4OF9zZW5kX2Rpc2VxY19tc2csCisJLmRpc2VxY19zZW5kX2J1cnN0ID0gc3R2MDI4OF9zZW5kX2Rpc2VxY19idXJzdCwKKwkuc2V0X3RvbmUgPSBzdHYwMjg4X3NldF90b25lLAorCS5zZXRfdm9sdGFnZSA9IHN0djAyODhfc2V0X3ZvbHRhZ2UsCisKKwkuc2V0X3Byb3BlcnR5ID0gc3R2MDI4OF9zZXRfcHJvcGVydHksCisJLmdldF9wcm9wZXJ0eSA9IHN0djAyODhfZ2V0X3Byb3BlcnR5LAorCS5zZXRfZnJvbnRlbmQgPSBzdHYwMjg4X3NldF9mcm9udGVuZCwKK307CisKK3N0cnVjdCBkdmJfZnJvbnRlbmQgKnN0djAyODhfYXR0YWNoKGNvbnN0IHN0cnVjdCBzdHYwMjg4X2NvbmZpZyAqY29uZmlnLAorCQkJCSAgICBzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyYykKK3sKKwlzdHJ1Y3Qgc3R2MDI4OF9zdGF0ZSAqc3RhdGUgPSBOVUxMOworCWludCBpZDsKKworCS8qIGFsbG9jYXRlIG1lbW9yeSBmb3IgdGhlIGludGVybmFsIHN0YXRlICovCisJc3RhdGUgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3Qgc3R2MDI4OF9zdGF0ZSksIEdGUF9LRVJORUwpOworCWlmIChzdGF0ZSA9PSBOVUxMKQorCQlnb3RvIGVycm9yOworCisJLyogc2V0dXAgdGhlIHN0YXRlICovCisJc3RhdGUtPmNvbmZpZyA9IGNvbmZpZzsKKwlzdGF0ZS0+aTJjID0gaTJjOworCXN0YXRlLT5pbml0aWFsaXNlZCA9IDA7CisJc3RhdGUtPnR1bmVyX2ZyZXF1ZW5jeSA9IDA7CisJc3RhdGUtPnN5bWJvbF9yYXRlID0gMDsKKwlzdGF0ZS0+ZmVjX2lubmVyID0gMDsKKwlzdGF0ZS0+ZXJybW9kZSA9IFNUQVRVU19CRVI7CisKKwlzdHYwMjg4X3dyaXRlcmVnSShzdGF0ZSwgMHg0MSwgMHgwNCk7CisJbXNsZWVwKDIwMCk7CisJaWQgPSBzdHYwMjg4X3JlYWRyZWcoc3RhdGUsIDB4MDApOworCWRwcmludGsoInN0djAyODggaWQgJXhcbiIsIGlkKTsKKworCS8qIHJlZ2lzdGVyIDB4MDAgY29udGFpbnMgMHgxMSBmb3IgU1RWMDI4OCAgKi8KKwlpZiAoaWQgIT0gMHgxMSkKKwkJZ290byBlcnJvcjsKKworCS8qIGNyZWF0ZSBkdmJfZnJvbnRlbmQgKi8KKwltZW1jcHkoJnN0YXRlLT5mcm9udGVuZC5vcHMsICZzdHYwMjg4X29wcywKKwkJCXNpemVvZihzdHJ1Y3QgZHZiX2Zyb250ZW5kX29wcykpOworCXN0YXRlLT5mcm9udGVuZC5kZW1vZHVsYXRvcl9wcml2ID0gc3RhdGU7CisJcmV0dXJuICZzdGF0ZS0+ZnJvbnRlbmQ7CisKK2Vycm9yOgorCWtmcmVlKHN0YXRlKTsKKworCXJldHVybiBOVUxMOworfQorRVhQT1JUX1NZTUJPTChzdHYwMjg4X2F0dGFjaCk7CisKK21vZHVsZV9wYXJhbShkZWJ1Z19sZWdhY3lfZGlzaF9zd2l0Y2gsIGludCwgMDQ0NCk7CitNT0RVTEVfUEFSTV9ERVNDKGRlYnVnX2xlZ2FjeV9kaXNoX3N3aXRjaCwKKwkJIkVuYWJsZSB0aW1pbmcgYW5hbHlzaXMgZm9yIERpc2ggTmV0d29yayBsZWdhY3kgc3dpdGNoZXMiKTsKKworbW9kdWxlX3BhcmFtKGRlYnVnLCBpbnQsIDA2NDQpOworTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgIlR1cm4gb24vb2ZmIGZyb250ZW5kIGRlYnVnZ2luZyAoZGVmYXVsdDpvZmYpLiIpOworCitNT0RVTEVfREVTQ1JJUFRJT04oIlNUIFNUVjAyODggRFZCIERlbW9kdWxhdG9yIGRyaXZlciIpOworTU9EVUxFX0FVVEhPUigiR2VvcmcgQWNoZXIsIEJvYiBMaXUsIElnb3IgbGlwbGlhbmluIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zdHYwMjg4LmggYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvc3R2MDI4OC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYyYjUzZGIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvc3R2MDI4OC5oCkBAIC0wLDAgKzEsNjcgQEAKKy8qCisJRHJpdmVyIGZvciBTVCBTVFYwMjg4IGRlbW9kdWxhdG9yCisKKwlDb3B5cmlnaHQgKEMpIDIwMDYgR2VvcmcgQWNoZXIsIEJheUNvbSBHbWJILCBhY2hlciAoYXQpIGJheWNvbSAoZG90KSBkZQorCQlmb3IgUmVlbCBNdWx0aW1lZGlhCisJQ29weXJpZ2h0IChDKSAyMDA4IFR1cmJvU2lnaHQuY29tLCA8Ym9iQHR1cmJvc2lnaHQuY29tPgorCUNvcHlyaWdodCAoQykgMjAwOCBJZ29yIE0uIExpcGxpYW5pbiA8bGlwbGlhbmluQG1lLmJ5PgorCQlSZW1vdmVkIHN0YjYwMDAgc3BlY2lmaWMgdHVuZXIgY29kZSBhbmQgcmV2aXNlZCBzb21lCisJCXByb2NlZHVyZXMuCisKKwlUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorCWl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisJdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKwkoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisJVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisJYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKwlNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisJR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworCVlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisJYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKwlGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKworKi8KKworI2lmbmRlZiBTVFYwMjg4X0gKKyNkZWZpbmUgU1RWMDI4OF9ICisKKyNpbmNsdWRlIDxsaW51eC9kdmIvZnJvbnRlbmQuaD4KKyNpbmNsdWRlICJkdmJfZnJvbnRlbmQuaCIKKworc3RydWN0IHN0djAyODhfY29uZmlnIHsKKwkvKiB0aGUgZGVtb2R1bGF0b3IncyBpMmMgYWRkcmVzcyAqLworCXU4IGRlbW9kX2FkZHJlc3M7CisKKwl1OCogaW5pdHRhYjsKKworCS8qIG1pbmltdW0gZGVsYXkgYmVmb3JlIHJldHVuaW5nICovCisJaW50IG1pbl9kZWxheV9tczsKKworCWludCAoKnNldF90c19wYXJhbXMpKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCBpbnQgaXNfcHVuY3R1cmVkKTsKK307CisKKyNpZiBkZWZpbmVkKENPTkZJR19EVkJfU1RWMDI4OCkgfHwgKGRlZmluZWQoQ09ORklHX0RWQl9TVFYwMjg4X01PRFVMRSkgJiYgXAorCQkJCQkJCWRlZmluZWQoTU9EVUxFKSkKK2V4dGVybiBzdHJ1Y3QgZHZiX2Zyb250ZW5kICpzdHYwMjg4X2F0dGFjaChjb25zdCBzdHJ1Y3Qgc3R2MDI4OF9jb25maWcgKmNvbmZpZywKKwkJCQkJICAgc3RydWN0IGkyY19hZGFwdGVyICppMmMpOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGR2Yl9mcm9udGVuZCAqc3R2MDI4OF9hdHRhY2goY29uc3Qgc3RydWN0IHN0djAyODhfY29uZmlnICpjb25maWcsCisJCQkJCSAgIHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjKQoreworCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBkcml2ZXIgZGlzYWJsZWQgYnkgS2NvbmZpZ1xuIiwgX19mdW5jX18pOworCXJldHVybiBOVUxMOworfQorI2VuZGlmIC8qIENPTkZJR19EVkJfU1RWMDI4OCAqLworCitzdGF0aWMgaW5saW5lIGludCBzdHYwMjg4X3dyaXRlcmVnKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCB1OCByZWcsIHU4IHZhbCkKK3sKKwlpbnQgciA9IDA7CisJdTggYnVmW10gPSB7IHJlZywgdmFsIH07CisJaWYgKGZlLT5vcHMud3JpdGUpCisJCXIgPSBmZS0+b3BzLndyaXRlKGZlLCBidWYsIDIpOworCXJldHVybiByOworfQorCisjZW5kaWYgLyogU1RWMDI4OF9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvc3R2MDI5OS5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3N0djAyOTkuYwppbmRleCAzNTQzNWJlLi42YzFjYjE5IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvc3R2MDI5OS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zdHYwMjk5LmMKQEAgLTU1OSw2ICs1NTksOCBAQAogCWludCBpbnZ2YWwgPSAwOwogCiAJZHByaW50ayAoIiVzIDogRkVfU0VUX0ZST05URU5EXG4iLCBfX2Z1bmNfXyk7CisJaWYgKHN0YXRlLT5jb25maWctPnNldF90c19wYXJhbXMpCisJCXN0YXRlLT5jb25maWctPnNldF90c19wYXJhbXMoZmUsIDApOwogCiAJLy8gc2V0IHRoZSBpbnZlcnNpb24KIAlpZiAocC0+aW52ZXJzaW9uID09IElOVkVSU0lPTl9PRkYpIGludnZhbCA9IDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvc3R2MDI5OS5oIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3N0djAyOTkuaAppbmRleCAzMjgyZjQzLi4wZmQ5NmUyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvc3R2MDI5OS5oCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zdHYwMjk5LmgKQEAgLTg5LDE1ICs4OSwxOCBAQAogCWludCBtaW5fZGVsYXlfbXM7CiAKIAkvKiBTZXQgdGhlIHN5bWJvbCByYXRlICovCi0JaW50ICgqc2V0X3N5bWJvbF9yYXRlKShzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBmZSwgdTMyIHNyYXRlLCB1MzIgcmF0aW8pOworCWludCAoKnNldF9zeW1ib2xfcmF0ZSkoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIHUzMiBzcmF0ZSwgdTMyIHJhdGlvKTsKKworCS8qIFNldCBkZXZpY2UgcGFyYW0gdG8gc3RhcnQgZG1hICovCisJaW50ICgqc2V0X3RzX3BhcmFtcykoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIGludCBpc19wdW5jdHVyZWQpOwogfTsKIAogI2lmIGRlZmluZWQoQ09ORklHX0RWQl9TVFYwMjk5KSB8fCAoZGVmaW5lZChDT05GSUdfRFZCX1NUVjAyOTlfTU9EVUxFKSAmJiBkZWZpbmVkKE1PRFVMRSkpCi1leHRlcm4gc3RydWN0IGR2Yl9mcm9udGVuZCogc3R2MDI5OV9hdHRhY2goY29uc3Qgc3RydWN0IHN0djAyOTlfY29uZmlnKiBjb25maWcsCi0JCQkJCSAgIHN0cnVjdCBpMmNfYWRhcHRlciogaTJjKTsKK2V4dGVybiBzdHJ1Y3QgZHZiX2Zyb250ZW5kICpzdHYwMjk5X2F0dGFjaChjb25zdCBzdHJ1Y3Qgc3R2MDI5OV9jb25maWcgKmNvbmZpZywKKwkJCQkJICAgc3RydWN0IGkyY19hZGFwdGVyICppMmMpOwogI2Vsc2UKLXN0YXRpYyBpbmxpbmUgc3RydWN0IGR2Yl9mcm9udGVuZCogc3R2MDI5OV9hdHRhY2goY29uc3Qgc3RydWN0IHN0djAyOTlfY29uZmlnKiBjb25maWcsCi0JCQkJCSAgIHN0cnVjdCBpMmNfYWRhcHRlciogaTJjKQorc3RhdGljIGlubGluZSBzdHJ1Y3QgZHZiX2Zyb250ZW5kICpzdHYwMjk5X2F0dGFjaChjb25zdCBzdHJ1Y3Qgc3R2MDI5OV9jb25maWcgKmNvbmZpZywKKwkJCQkJICAgc3RydWN0IGkyY19hZGFwdGVyICppMmMpCiB7CiAJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IGRyaXZlciBkaXNhYmxlZCBieSBLY29uZmlnXG4iLCBfX2Z1bmNfXyk7CiAJcmV0dXJuIE5VTEw7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvdGRhMTAwNDguYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy90ZGExMDA0OC5jCmluZGV4IDA0ZTdmMWMuLjJhOGJiY2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy90ZGExMDA0OC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy90ZGExMDA0OC5jCkBAIC0xOTUsNyArMTk1LDcgQEAKIHN0YXRpYyBpbnQgdGRhMTAwNDhfd3JpdGVyZWcoc3RydWN0IHRkYTEwMDQ4X3N0YXRlICpzdGF0ZSwgdTggcmVnLCB1OCBkYXRhKQogewogCWludCByZXQ7Ci0JdTggYnVmIFtdID0geyByZWcsIGRhdGEgfTsKKwl1OCBidWZbXSA9IHsgcmVnLCBkYXRhIH07CiAJc3RydWN0IGkyY19tc2cgbXNnID0gewogCQkuYWRkciA9IHN0YXRlLT5jb25maWctPmRlbW9kX2FkZHJlc3MsCiAJCS5mbGFncyA9IDAsIC5idWYgPSBidWYsIC5sZW4gPSAyIH07CkBAIC0yMTMsOSArMjEzLDkgQEAKIHN0YXRpYyB1OCB0ZGExMDA0OF9yZWFkcmVnKHN0cnVjdCB0ZGExMDA0OF9zdGF0ZSAqc3RhdGUsIHU4IHJlZykKIHsKIAlpbnQgcmV0OwotCXU4IGIwIFtdID0geyByZWcgfTsKLQl1OCBiMSBbXSA9IHsgMCB9OwotCXN0cnVjdCBpMmNfbXNnIG1zZyBbXSA9IHsKKwl1OCBiMFtdID0geyByZWcgfTsKKwl1OCBiMVtdID0geyAwIH07CisJc3RydWN0IGkyY19tc2cgbXNnW10gPSB7CiAJCXsgLmFkZHIgPSBzdGF0ZS0+Y29uZmlnLT5kZW1vZF9hZGRyZXNzLAogCQkJLmZsYWdzID0gMCwgLmJ1ZiA9IGIwLCAubGVuID0gMSB9LAogCQl7IC5hZGRyID0gc3RhdGUtPmNvbmZpZy0+ZGVtb2RfYWRkcmVzcywKQEAgLTM5Myw0MyArMzkzLDg5IEBACiAKIAl2YWwgPSB0ZGExMDA0OF9yZWFkcmVnKHN0YXRlLCBUREExMDA0OF9PVVRfQ09ORjIpOwogCXN3aXRjaCAoKHZhbCAmIDB4NjApID4+IDUpIHsKLQljYXNlIDA6IHAtPmNvbnN0ZWxsYXRpb24gPSAgIFFQU0s7IGJyZWFrOwotCWNhc2UgMTogcC0+Y29uc3RlbGxhdGlvbiA9IFFBTV8xNjsgYnJlYWs7Ci0JY2FzZSAyOiBwLT5jb25zdGVsbGF0aW9uID0gUUFNXzY0OyBicmVhazsKKwljYXNlIDA6CisJCXAtPmNvbnN0ZWxsYXRpb24gPSBRUFNLOworCQlicmVhazsKKwljYXNlIDE6CisJCXAtPmNvbnN0ZWxsYXRpb24gPSBRQU1fMTY7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJcC0+Y29uc3RlbGxhdGlvbiA9IFFBTV82NDsKKwkJYnJlYWs7CiAJfQogCXN3aXRjaCAoKHZhbCAmIDB4MTgpID4+IDMpIHsKLQljYXNlIDA6IHAtPmhpZXJhcmNoeV9pbmZvcm1hdGlvbiA9IEhJRVJBUkNIWV9OT05FOyBicmVhazsKLQljYXNlIDE6IHAtPmhpZXJhcmNoeV9pbmZvcm1hdGlvbiA9ICAgIEhJRVJBUkNIWV8xOyBicmVhazsKLQljYXNlIDI6IHAtPmhpZXJhcmNoeV9pbmZvcm1hdGlvbiA9ICAgIEhJRVJBUkNIWV8yOyBicmVhazsKLQljYXNlIDM6IHAtPmhpZXJhcmNoeV9pbmZvcm1hdGlvbiA9ICAgIEhJRVJBUkNIWV80OyBicmVhazsKKwljYXNlIDA6CisJCXAtPmhpZXJhcmNoeV9pbmZvcm1hdGlvbiA9IEhJRVJBUkNIWV9OT05FOworCQlicmVhazsKKwljYXNlIDE6CisJCXAtPmhpZXJhcmNoeV9pbmZvcm1hdGlvbiA9IEhJRVJBUkNIWV8xOworCQlicmVhazsKKwljYXNlIDI6CisJCXAtPmhpZXJhcmNoeV9pbmZvcm1hdGlvbiA9IEhJRVJBUkNIWV8yOworCQlicmVhazsKKwljYXNlIDM6CisJCXAtPmhpZXJhcmNoeV9pbmZvcm1hdGlvbiA9IEhJRVJBUkNIWV80OworCQlicmVhazsKIAl9CiAJc3dpdGNoICh2YWwgJiAweDA3KSB7Ci0JY2FzZSAwOiBwLT5jb2RlX3JhdGVfSFAgPSBGRUNfMV8yOyBicmVhazsKLQljYXNlIDE6IHAtPmNvZGVfcmF0ZV9IUCA9IEZFQ18yXzM7IGJyZWFrOwotCWNhc2UgMjogcC0+Y29kZV9yYXRlX0hQID0gRkVDXzNfNDsgYnJlYWs7Ci0JY2FzZSAzOiBwLT5jb2RlX3JhdGVfSFAgPSBGRUNfNV82OyBicmVhazsKLQljYXNlIDQ6IHAtPmNvZGVfcmF0ZV9IUCA9IEZFQ183Xzg7IGJyZWFrOworCWNhc2UgMDoKKwkJcC0+Y29kZV9yYXRlX0hQID0gRkVDXzFfMjsKKwkJYnJlYWs7CisJY2FzZSAxOgorCQlwLT5jb2RlX3JhdGVfSFAgPSBGRUNfMl8zOworCQlicmVhazsKKwljYXNlIDI6CisJCXAtPmNvZGVfcmF0ZV9IUCA9IEZFQ18zXzQ7CisJCWJyZWFrOworCWNhc2UgMzoKKwkJcC0+Y29kZV9yYXRlX0hQID0gRkVDXzVfNjsKKwkJYnJlYWs7CisJY2FzZSA0OgorCQlwLT5jb2RlX3JhdGVfSFAgPSBGRUNfN184OworCQlicmVhazsKIAl9CiAKIAl2YWwgPSB0ZGExMDA0OF9yZWFkcmVnKHN0YXRlLCBUREExMDA0OF9PVVRfQ09ORjMpOwogCXN3aXRjaCAodmFsICYgMHgwNykgewotCWNhc2UgMDogcC0+Y29kZV9yYXRlX0xQID0gRkVDXzFfMjsgYnJlYWs7Ci0JY2FzZSAxOiBwLT5jb2RlX3JhdGVfTFAgPSBGRUNfMl8zOyBicmVhazsKLQljYXNlIDI6IHAtPmNvZGVfcmF0ZV9MUCA9IEZFQ18zXzQ7IGJyZWFrOwotCWNhc2UgMzogcC0+Y29kZV9yYXRlX0xQID0gRkVDXzVfNjsgYnJlYWs7Ci0JY2FzZSA0OiBwLT5jb2RlX3JhdGVfTFAgPSBGRUNfN184OyBicmVhazsKKwljYXNlIDA6CisJCXAtPmNvZGVfcmF0ZV9MUCA9IEZFQ18xXzI7CisJCWJyZWFrOworCWNhc2UgMToKKwkJcC0+Y29kZV9yYXRlX0xQID0gRkVDXzJfMzsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQlwLT5jb2RlX3JhdGVfTFAgPSBGRUNfM180OworCQlicmVhazsKKwljYXNlIDM6CisJCXAtPmNvZGVfcmF0ZV9MUCA9IEZFQ181XzY7CisJCWJyZWFrOworCWNhc2UgNDoKKwkJcC0+Y29kZV9yYXRlX0xQID0gRkVDXzdfODsKKwkJYnJlYWs7CiAJfQogCiAJdmFsID0gdGRhMTAwNDhfcmVhZHJlZyhzdGF0ZSwgVERBMTAwNDhfT1VUX0NPTkYxKTsKIAlzd2l0Y2ggKCh2YWwgJiAweDBjKSA+PiAyKSB7Ci0JY2FzZSAwOiBwLT5ndWFyZF9pbnRlcnZhbCA9IEdVQVJEX0lOVEVSVkFMXzFfMzI7IGJyZWFrOwotCWNhc2UgMTogcC0+Z3VhcmRfaW50ZXJ2YWwgPSBHVUFSRF9JTlRFUlZBTF8xXzE2OyBicmVhazsKLQljYXNlIDI6IHAtPmd1YXJkX2ludGVydmFsID0gIEdVQVJEX0lOVEVSVkFMXzFfODsgYnJlYWs7Ci0JY2FzZSAzOiBwLT5ndWFyZF9pbnRlcnZhbCA9ICBHVUFSRF9JTlRFUlZBTF8xXzQ7IGJyZWFrOworCWNhc2UgMDoKKwkJcC0+Z3VhcmRfaW50ZXJ2YWwgPSBHVUFSRF9JTlRFUlZBTF8xXzMyOworCQlicmVhazsKKwljYXNlIDE6CisJCXAtPmd1YXJkX2ludGVydmFsID0gR1VBUkRfSU5URVJWQUxfMV8xNjsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQlwLT5ndWFyZF9pbnRlcnZhbCA9ICBHVUFSRF9JTlRFUlZBTF8xXzg7CisJCWJyZWFrOworCWNhc2UgMzoKKwkJcC0+Z3VhcmRfaW50ZXJ2YWwgPSAgR1VBUkRfSU5URVJWQUxfMV80OworCQlicmVhazsKIAl9CiAJc3dpdGNoICh2YWwgJiAweDAyKSB7Ci0JY2FzZSAwOiBwLT50cmFuc21pc3Npb25fbW9kZSA9IFRSQU5TTUlTU0lPTl9NT0RFXzJLOyBicmVhazsKLQljYXNlIDE6IHAtPnRyYW5zbWlzc2lvbl9tb2RlID0gVFJBTlNNSVNTSU9OX01PREVfOEs7IGJyZWFrOworCWNhc2UgMDoKKwkJcC0+dHJhbnNtaXNzaW9uX21vZGUgPSBUUkFOU01JU1NJT05fTU9ERV8ySzsKKwkJYnJlYWs7CisJY2FzZSAxOgorCQlwLT50cmFuc21pc3Npb25fbW9kZSA9IFRSQU5TTUlTU0lPTl9NT0RFXzhLOworCQlicmVhazsKIAl9CiAKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy90ZGhkMS5oIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3RkaGQxLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTFmMTcwNgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy90ZGhkMS5oCkBAIC0wLDAgKzEsNzMgQEAKKy8qCisgKiB0ZGhkMS5oIC0gQUxQUyBUREhEMS0yMDRBIHR1bmVyIHN1cHBvcnQKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggT2xpdmVyIEVuZHJpc3MgPG8uZW5kcmlzc0BnbXguZGU+CisgKgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMgorICogb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKiBPciwgcG9pbnQgeW91ciBicm93c2VyIHRvIGh0dHA6Ly93d3cuZ251Lm9yZy9jb3B5bGVmdC9ncGwuaHRtbAorICoKKyAqCisgKiBUaGUgcHJvamVjdCdzIHBhZ2UgaXMgYXQgaHR0cDovL3d3dy5saW51eHR2Lm9yZworICovCisKKyNpZm5kZWYgVERIRDFfSAorI2RlZmluZSBUREhEMV9ICisKKyNpbmNsdWRlICJ0ZGExMDA0eC5oIgorCitzdGF0aWMgaW50IGFscHNfdGRoZDFfMjA0X3JlcXVlc3RfZmlybXdhcmUoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqKmZ3LCBjaGFyICpuYW1lKTsKKworc3RhdGljIHN0cnVjdCB0ZGExMDA0eF9jb25maWcgYWxwc190ZGhkMV8yMDRhX2NvbmZpZyA9IHsKKwkuZGVtb2RfYWRkcmVzcyA9IDB4OCwKKwkuaW52ZXJ0ID0gMSwKKwkuaW52ZXJ0X29jbGsgPSAwLAorCS54dGFsX2ZyZXEgPSBUREExMDA0Nl9YVEFMXzRNLAorCS5hZ2NfY29uZmlnID0gVERBMTAwNDZfQUdDX0RFRkFVTFQsCisJLmlmX2ZyZXEgPSBUREExMDA0Nl9GUkVRXzM2MTcsCisJLnJlcXVlc3RfZmlybXdhcmUgPSBhbHBzX3RkaGQxXzIwNF9yZXF1ZXN0X2Zpcm13YXJlCit9OworCitzdGF0aWMgaW50IGFscHNfdGRoZDFfMjA0YV90dW5lcl9zZXRfcGFyYW1zKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCBzdHJ1Y3QgZHZiX2Zyb250ZW5kX3BhcmFtZXRlcnMgKnBhcmFtcykKK3sKKwlzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyYyA9IGZlLT50dW5lcl9wcml2OworCXU4IGRhdGFbNF07CisJc3RydWN0IGkyY19tc2cgbXNnID0geyAuYWRkciA9IDB4NjEsIC5mbGFncyA9IDAsIC5idWYgPSBkYXRhLCAubGVuID0gc2l6ZW9mKGRhdGEpIH07CisJdTMyIGRpdjsKKworCWRpdiA9IChwYXJhbXMtPmZyZXF1ZW5jeSArIDM2MTY2NjY2KSAvIDE2NjY2NjsKKworCWRhdGFbMF0gPSAoZGl2ID4+IDgpICYgMHg3ZjsKKwlkYXRhWzFdID0gZGl2ICYgMHhmZjsKKwlkYXRhWzJdID0gMHg4NTsKKworCWlmIChwYXJhbXMtPmZyZXF1ZW5jeSA+PSAxNzQwMDAwMDAgJiYgcGFyYW1zLT5mcmVxdWVuY3kgPD0gMjMwMDAwMDAwKQorCQlkYXRhWzNdID0gMHgwMjsKKwllbHNlIGlmIChwYXJhbXMtPmZyZXF1ZW5jeSA+PSA0NzAwMDAwMDAgJiYgcGFyYW1zLT5mcmVxdWVuY3kgPD0gODIzMDAwMDAwKQorCQlkYXRhWzNdID0gMHgwQzsKKwllbHNlIGlmIChwYXJhbXMtPmZyZXF1ZW5jeSA+IDgyMzAwMDAwMCAmJiBwYXJhbXMtPmZyZXF1ZW5jeSA8PSA4NjIwMDAwMDApCisJCWRhdGFbM10gPSAweDhDOworCWVsc2UKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKQorCQlmZS0+b3BzLmkyY19nYXRlX2N0cmwoZmUsIDEpOworCWlmIChpMmNfdHJhbnNmZXIoaTJjLCAmbXNnLCAxKSAhPSAxKQorCQlyZXR1cm4gLUVJTzsKKworCXJldHVybiAwOworfQorCisjZW5kaWYgLyogVERIRDFfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3owMTk0YS5oIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3owMTk0YS5oCmluZGV4IGQyODc2ZDIuLjA3ZjNmYzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy96MDE5NGEuaAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvejAxOTRhLmgKQEAgLTEyLDcgKzEyLDcgQEAKICNpZm5kZWYgWjAxOTRBCiAjZGVmaW5lIFowMTk0QQogCi1zdGF0aWMgaW50IHNoYXJwX3owMTk0YV9fc2V0X3N5bWJvbF9yYXRlKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLAorc3RhdGljIGludCBzaGFycF96MDE5NGFfc2V0X3N5bWJvbF9yYXRlKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLAogCQkJCQkgdTMyIHNyYXRlLCB1MzIgcmF0aW8pCiB7CiAJdTggYWNsayA9IDA7CkBAIC00MCw3ICs0MCw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB1OCBzaGFycF96MDE5NGFfX2luaXR0YWJbXSA9IHsKK3N0YXRpYyB1OCBzaGFycF96MDE5NGFfaW5pdHRhYltdID0gewogCTB4MDEsIDB4MTUsCiAJMHgwMiwgMHgwMCwKIAkweDAzLCAweDAwLApAQCAtODIsMTYgKzgyLDQgQEAKIAkweGZmLCAweGZmCiB9OwogCi1zdGF0aWMgc3RydWN0IHN0djAyOTlfY29uZmlnIHNoYXJwX3owMTk0YV9jb25maWcgPSB7Ci0JLmRlbW9kX2FkZHJlc3MgPSAweDY4LAotCS5pbml0dGFiID0gc2hhcnBfejAxOTRhX19pbml0dGFiLAotCS5tY2xrID0gODgwMDAwMDBVTCwKLQkuaW52ZXJ0ID0gMSwKLQkuc2tpcF9yZWluaXQgPSAwLAotCS5sb2NrX291dHB1dCA9IFNUVjAyOTlfTE9DS09VVFBVVF8xLAotCS52b2x0MTNfb3AwX29wMSA9IFNUVjAyOTlfVk9MVDEzX09QMSwKLQkubWluX2RlbGF5X21zID0gMTAwLAotCS5zZXRfc3ltYm9sX3JhdGUgPSBzaGFycF96MDE5NGFfX3NldF9zeW1ib2xfcmF0ZSwKLX07Ci0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvc2lhbm8vc21zLWNhcmRzLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9zaWFuby9zbXMtY2FyZHMuYwppbmRleCA5ZGEyNjBmLi42ZjliNzczIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9zaWFuby9zbXMtY2FyZHMuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9zaWFuby9zbXMtY2FyZHMuYwpAQCAtNDIsNiArNDIsMTAgQEAKIAkJLmRyaXZlcl9pbmZvID0gU01TMVhYWF9CT0FSRF9IQVVQUEFVR0VfV0lOREhBTSB9LAogCXsgVVNCX0RFVklDRSgweDIwNDAsIDB4NTUxMCksCiAJCS5kcml2ZXJfaW5mbyA9IFNNUzFYWFhfQk9BUkRfSEFVUFBBVUdFX1dJTkRIQU0gfSwKKwl7IFVTQl9ERVZJQ0UoMHgyMDQwLCAweDU1MjApLAorCQkuZHJpdmVyX2luZm8gPSBTTVMxWFhYX0JPQVJEX0hBVVBQQVVHRV9XSU5ESEFNIH0sCisJeyBVU0JfREVWSUNFKDB4MjA0MCwgMHg1NTMwKSwKKwkJLmRyaXZlcl9pbmZvID0gU01TMVhYWF9CT0FSRF9IQVVQUEFVR0VfV0lOREhBTSB9LAogCXsgVVNCX0RFVklDRSgweDIwNDAsIDB4NTU4MCksCiAJCS5kcml2ZXJfaW5mbyA9IFNNUzFYWFhfQk9BUkRfSEFVUFBBVUdFX1dJTkRIQU0gfSwKIAl7IFVTQl9ERVZJQ0UoMHgyMDQwLCAweDU1OTApLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvS2NvbmZpZyBiL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL0tjb25maWcKaW5kZXggNDFiNWE5OC4uODY3MDI3YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvS2NvbmZpZworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9LY29uZmlnCkBAIC04Niw2ICs4Niw3IEBACiAJc2VsZWN0IERWQl9UREExMDA4NiBpZiAhRFZCX0ZFX0NVU1RPTUlTRQogCXNlbGVjdCBEVkJfVERBODI2WCBpZiAhRFZCX0ZFX0NVU1RPTUlTRQogCXNlbGVjdCBEVkJfTE5CUDIxIGlmICFEVkJfRkVfQ1VTVE9NSVNFCisJc2VsZWN0IERWQl9UREExMDA0WCBpZiAhRFZCX0ZFX0NVU1RPTUlTRQogCWhlbHAKIAkgIFN1cHBvcnQgZm9yIHNpbXBsZSBTQUE3MTQ2IGJhc2VkIERWQiBjYXJkcyAoc28gY2FsbGVkIEJ1ZGdldC0KIAkgIG9yIE5vdmEtUENJIGNhcmRzKSB3aXRob3V0IG9uYm9hcmQgTVBFRzIgZGVjb2RlciwgYW5kIHdpdGhvdXQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL2F2NzExMC5jIGIvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYXY3MTEwLmMKaW5kZXggMDc3N2U4Zi4uYWExZmY1MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYXY3MTEwLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYXY3MTEwLmMKQEAgLTM2LDcgKzM2LDYgQEAKICNpbmNsdWRlIDxsaW51eC9mcy5oPgogI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CiAjaW5jbHVkZSA8bGludXgvcG9sbC5oPgotI2luY2x1ZGUgPGxpbnV4L2J5dGVvcmRlci9zd2FiYi5oPgogI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KQEAgLTUyLDYgKzUxLDcgQEAKICNpbmNsdWRlIDxsaW51eC9pMmMuaD4KICNpbmNsdWRlIDxsaW51eC9rdGhyZWFkLmg+CiAjaW5jbHVkZSA8YXNtL3VuYWxpZ25lZC5oPgorI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KIAogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KIApAQCAtODgsNiArODgsNyBAQAogc3RhdGljIGludCB3c3NfY2ZnXzRfMyA9IDB4NDAwODsKIHN0YXRpYyBpbnQgd3NzX2NmZ18xNl85ID0gMHgwMDA3Owogc3RhdGljIGludCB0dl9zdGFuZGFyZDsKK3N0YXRpYyBpbnQgZnVsbF90czsKIAogbW9kdWxlX3BhcmFtX25hbWVkKGRlYnVnLCBhdjcxMTBfZGVidWcsIGludCwgMDY0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiZGVidWcgbGV2ZWwgKGJpdG1hc2ssIGRlZmF1bHQgMCkiKTsKQEAgLTEwNiw2ICsxMDcsOCBAQAogTU9EVUxFX1BBUk1fREVTQyh2b2x1bWUsICJpbml0aWFsIHZvbHVtZTogZGVmYXVsdCAyNTUgKHJhbmdlIDAtMjU1KSIpOwogbW9kdWxlX3BhcmFtKGJ1ZGdldHBhdGNoLCBpbnQsIDA0NDQpOwogTU9EVUxFX1BBUk1fREVTQyhidWRnZXRwYXRjaCwgInVzZSBidWRnZXQtcGF0Y2ggaGFyZHdhcmUgbW9kaWZpY2F0aW9uOiBkZWZhdWx0IDAgKDAgbm8sIDEgYXV0b2RldGVjdCwgMiBhbHdheXMpIik7Cittb2R1bGVfcGFyYW0oZnVsbF90cywgaW50LCAwNDQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoZnVsbF90cywgImVuYWJsZSBjb2RlIGZvciBmdWxsLXRzIGhhcmR3YXJlIG1vZGlmaWNhdGlvbjogMCBkaXNhYmxlIChkZWZhdWx0KSwgMSBlbmFibGUiKTsKIG1vZHVsZV9wYXJhbSh3c3NfY2ZnXzRfMywgaW50LCAwNDQ0KTsKIE1PRFVMRV9QQVJNX0RFU0Mod3NzX2NmZ180XzMsICJXU1MgNDozIC0gZGVmYXVsdCAweDQwMDggLSBiaXQgMTU6IGRpc2FibGUsIDE0OiBidXJzdCBtb2RlLCAxMy4uMDogd3NzIGRhdGEiKTsKIG1vZHVsZV9wYXJhbSh3c3NfY2ZnXzE2XzksIGludCwgMDQ0NCk7CkBAIC0xMTYsNiArMTE5LDggQEAKIERWQl9ERUZJTkVfTU9EX09QVF9BREFQVEVSX05SKGFkYXB0ZXJfbnIpOwogCiBzdGF0aWMgdm9pZCByZXN0YXJ0X2ZlZWRzKHN0cnVjdCBhdjcxMTAgKmF2NzExMCk7CitzdGF0aWMgaW50IGJ1ZGdldF9zdGFydF9mZWVkKHN0cnVjdCBkdmJfZGVtdXhfZmVlZCAqZmVlZCk7CitzdGF0aWMgaW50IGJ1ZGdldF9zdG9wX2ZlZWQoc3RydWN0IGR2Yl9kZW11eF9mZWVkICpmZWVkKTsKIAogc3RhdGljIGludCBhdjcxMTBfbnVtOwogCkBAIC0zNzYsOSArMzgxLDkgQEAKIAkJaXJkZWJpKGF2NzExMCwgREVCSVNXQUIsIGFkZHIsIDAsIGxlbik7CiB9CiAKLXN0YXRpYyB2b2lkIGRlYmlpcnEodW5zaWduZWQgbG9uZyBkYXRhKQorc3RhdGljIHZvaWQgZGViaWlycSh1bnNpZ25lZCBsb25nIGNvb2tpZSkKIHsKLQlzdHJ1Y3QgYXY3MTEwICphdjcxMTAgPSAoc3RydWN0IGF2NzExMCAqKSBkYXRhOworCXN0cnVjdCBhdjcxMTAgKmF2NzExMCA9IChzdHJ1Y3QgYXY3MTEwICopY29va2llOwogCWludCB0eXBlID0gYXY3MTEwLT5kZWJpdHlwZTsKIAlpbnQgaGFuZGxlID0gKHR5cGUgPj4gOCkgJiAweDFmOwogCXVuc2lnbmVkIGludCB4ZmVyID0gMDsKQEAgLTQ4Nyw5ICs0OTIsOSBAQAogfQogCiAvKiBpcnEgZnJvbSBhdjcxMTAgZmlybXdhcmUgd3JpdGluZyB0aGUgbWFpbGJveCByZWdpc3RlciBpbiB0aGUgRFBSQU0gKi8KLXN0YXRpYyB2b2lkIGdwaW9pcnEodW5zaWduZWQgbG9uZyBkYXRhKQorc3RhdGljIHZvaWQgZ3Bpb2lycSh1bnNpZ25lZCBsb25nIGNvb2tpZSkKIHsKLQlzdHJ1Y3QgYXY3MTEwICphdjcxMTAgPSAoc3RydWN0IGF2NzExMCAqKSBkYXRhOworCXN0cnVjdCBhdjcxMTAgKmF2NzExMCA9IChzdHJ1Y3QgYXY3MTEwICopY29va2llOwogCXUzMiByeGJ1ZiwgdHhidWY7CiAJaW50IGxlbjsKIApAQCAtODA2LDYgKzgxMSw5IEBACiAKIAlkcHJpbnRrKDQsICIlcFxuIiwgYXY3MTEwKTsKIAorCWlmIChhdjcxMTAtPmZ1bGxfdHMpCisJCXJldHVybiAwOworCiAJaWYgKGR2YmRteGZpbHRlci0+dHlwZSA9PSBETVhfVFlQRV9TRUMpIHsKIAkJaWYgKGh3X3NlY3Rpb25zKSB7CiAJCQlidWZbNF0gPSAoZHZiZG14ZmlsdGVyLT5maWx0ZXIuZmlsdGVyX3ZhbHVlWzBdIDw8IDgpIHwKQEAgLTg1NCw2ICs4NjIsOSBAQAogCiAJZHByaW50ayg0LCAiJXBcbiIsIGF2NzExMCk7CiAKKwlpZiAoYXY3MTEwLT5mdWxsX3RzKQorCQlyZXR1cm4gMDsKKwogCWhhbmRsZSA9IGR2YmRteGZpbHRlci0+aHdfaGFuZGxlOwogCWlmIChoYW5kbGUgPj0gMzIpIHsKIAkJcHJpbnRrKCIlcyB0cmllZCB0byBzdG9wIGludmFsaWQgZmlsdGVyICUwNHgsIGZpbHRlciB0eXBlID0gJXhcbiIsCkBAIC05MTMsNyArOTI0LDcgQEAKIAkJCQlyZXR1cm4gcmV0OwogCQl9CiAKLQlpZiAoKGR2YmRteGZlZWQtPnRzX3R5cGUgJiBUU19QQUNLRVQpKSB7CisJaWYgKChkdmJkbXhmZWVkLT50c190eXBlICYgVFNfUEFDS0VUKSAmJiAhYXY3MTEwLT5mdWxsX3RzKSB7CiAJCWlmIChkdmJkbXhmZWVkLT5wZXNfdHlwZSA9PSAwICYmICEoZHZiZG14LT5waWRzWzBdICYgMHg4MDAwKSkKIAkJCXJldCA9IGF2NzExMF9hdl9zdGFydF9yZWNvcmQoYXY3MTEwLCBSUF9BVURJTywgZHZiZG14ZmVlZCk7CiAJCWlmIChkdmJkbXhmZWVkLT5wZXNfdHlwZSA9PSAxICYmICEoZHZiZG14LT5waWRzWzFdICYgMHg4MDAwKSkKQEAgLTk3NCw3ICs5ODUsNyBAQAogCWlmICghZGVtdXgtPmRteC5mcm9udGVuZCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlpZiAoZmVlZC0+cGlkID4gMHgxZmZmKQorCWlmICghYXY3MTEwLT5mdWxsX3RzICYmIGZlZWQtPnBpZCA+IDB4MWZmZikKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlpZiAoZmVlZC0+dHlwZSA9PSBETVhfVFlQRV9UUykgewpAQCAtMTAwMyw3ICsxMDE0LDEyIEBACiAJCX0KIAl9CiAKLQllbHNlIGlmIChmZWVkLT50eXBlID09IERNWF9UWVBFX1NFQykgeworCWlmIChhdjcxMTAtPmZ1bGxfdHMpIHsKKwkJYnVkZ2V0X3N0YXJ0X2ZlZWQoZmVlZCk7CisJCXJldHVybiByZXQ7CisJfQorCisJaWYgKGZlZWQtPnR5cGUgPT0gRE1YX1RZUEVfU0VDKSB7CiAJCWludCBpOwogCiAJCWZvciAoaSA9IDA7IGkgPCBkZW11eC0+ZmlsdGVybnVtOyBpKyspIHsKQEAgLTEwNTAsNyArMTA2NiwxMiBAQAogCQkJCXJldCA9IFN0b3BIV0ZpbHRlcihmZWVkLT5maWx0ZXIpOwogCX0KIAotCWlmICghcmV0ICYmIGZlZWQtPnR5cGUgPT0gRE1YX1RZUEVfU0VDKSB7CisJaWYgKGF2NzExMC0+ZnVsbF90cykgeworCQlidWRnZXRfc3RvcF9mZWVkKGZlZWQpOworCQlyZXR1cm4gcmV0OworCX0KKworCWlmIChmZWVkLT50eXBlID09IERNWF9UWVBFX1NFQykgewogCQlmb3IgKGkgPSAwOyBpPGRlbXV4LT5maWx0ZXJudW07IGkrKykgewogCQkJaWYgKGRlbXV4LT5maWx0ZXJbaV0uc3RhdGUgPT0gRE1YX1NUQVRFX0dPICYmCiAJCQkgICAgZGVtdXgtPmZpbHRlcltpXS5maWx0ZXIucGFyZW50ID09ICZmZWVkLT5mZWVkLnNlYykgewpAQCAtMTA3NCw2ICsxMDk1LDcgQEAKIAlzdHJ1Y3QgZHZiX2RlbXV4ICpkdmJkbXggPSAmYXY3MTEwLT5kZW11eDsKIAlzdHJ1Y3QgZHZiX2RlbXV4X2ZlZWQgKmZlZWQ7CiAJaW50IG1vZGU7CisJaW50IGZlZWRpbmc7CiAJaW50IGksIGo7CiAKIAlkcHJpbnRrKDQsICIlcFxuIiwgYXY3MTEwKTsKQEAgLTEwODIsNiArMTEwNCw4IEBACiAJYXY3MTEwLT5wbGF5aW5nID0gMDsKIAlhdjcxMTAtPnJlY19tb2RlID0gMDsKIAorCWZlZWRpbmcgPSBhdjcxMTAtPmZlZWRpbmcxOyAvKiBmdWxsX3RzIG1vZCAqLworCiAJZm9yIChpID0gMDsgaSA8IGR2YmRteC0+ZmVlZG51bTsgaSsrKSB7CiAJCWZlZWQgPSAmZHZiZG14LT5mZWVkW2ldOwogCQlpZiAoZmVlZC0+c3RhdGUgPT0gRE1YX1NUQVRFX0dPKSB7CkBAIC0xMDk5LDYgKzExMjMsOCBAQAogCQl9CiAJfQogCisJYXY3MTEwLT5mZWVkaW5nMSA9IGZlZWRpbmc7IC8qIGZ1bGxfdHMgbW9kICovCisKIAlpZiAobW9kZSkKIAkJYXY3MTEwX2F2X3N0YXJ0X3BsYXkoYXY3MTEwLCBtb2RlKTsKIH0KQEAgLTExOTcsOCArMTIyMyw5IEBACiAKIAlpZiAoYnVkZ2V0LT5mZWVkaW5nMSkKIAkJcmV0dXJuICsrYnVkZ2V0LT5mZWVkaW5nMTsKLQltZW1zZXQoYnVkZ2V0LT5ncmFiYmluZywgMHgwMCwgVFNfSEVJR0hUICogVFNfV0lEVEgpOworCW1lbXNldChidWRnZXQtPmdyYWJiaW5nLCAweDAwLCBUU19CVUZMRU4pOwogCWJ1ZGdldC0+dHRicCA9IDA7CisJU0FBNzE0Nl9JU1JfQ0xFQVIoYnVkZ2V0LT5kZXYsIE1BU0tfMTApOyAgLyogVlBFICovCiAJU0FBNzE0Nl9JRVJfRU5BQkxFKGJ1ZGdldC0+ZGV2LCBNQVNLXzEwKTsgLyogVlBFICovCiAJc2FhNzE0Nl93cml0ZShidWRnZXQtPmRldiwgTUMxLCAoTUFTS18wNCB8IE1BU0tfMjApKTsgLyogRE1BMyBvbiAqLwogCXJldHVybiArK2J1ZGdldC0+ZmVlZGluZzE7CkBAIC0xMjMzLDE4ICsxMjYwLDE0IEBACiAJcmV0dXJuIHN0YXR1czsKIH0KIAotc3RhdGljIHZvaWQgdnBlaXJxKHVuc2lnbmVkIGxvbmcgZGF0YSkKK3N0YXRpYyB2b2lkIHZwZWlycSh1bnNpZ25lZCBsb25nIGNvb2tpZSkKIHsKLQlzdHJ1Y3QgYXY3MTEwICpidWRnZXQgPSAoc3RydWN0IGF2NzExMCAqKSBkYXRhOworCXN0cnVjdCBhdjcxMTAgKmJ1ZGdldCA9IChzdHJ1Y3QgYXY3MTEwICopY29va2llOwogCXU4ICptZW0gPSAodTggKikgKGJ1ZGdldC0+Z3JhYmJpbmcpOwogCXUzMiBvbGRkbWEgPSBidWRnZXQtPnR0YnA7CiAJdTMyIG5ld2RtYSA9IHNhYTcxNDZfcmVhZChidWRnZXQtPmRldiwgUENJX1ZEUDMpOworCXN0cnVjdCBkdmJfZGVtdXggKmRlbXV4ID0gYnVkZ2V0LT5mdWxsX3RzID8gJmJ1ZGdldC0+ZGVtdXggOiAmYnVkZ2V0LT5kZW11eDE7CiAKLQlpZiAoIWJ1ZGdldHBhdGNoKSB7Ci0JCXByaW50aygiYXY3MTEwLmM6IHZwZWlycSgpIGNhbGxlZCB3aGlsZSBidWRnZXRwYXRjaCBkaXNhYmxlZCEiCi0JCSAgICAgICAiIGNoZWNrIHNhYTcxNDYgSUVSIHJlZ2lzdGVyXG4iKTsKLQkJQlVHKCk7Ci0JfQogCS8qIG5lYXJlc3QgbG93ZXIgcG9zaXRpb24gZGl2aXNpYmxlIGJ5IDE4OCAqLwogCW5ld2RtYSAtPSBuZXdkbWEgJSAxODg7CiAKQEAgLTEyNjgsMTEgKzEyOTEsMTEgQEAKIAogCWlmIChuZXdkbWEgPiBvbGRkbWEpCiAJCS8qIG5vIHdyYXBhcm91bmQsIGR1bXAgb2xkZG1hLi5uZXdkbWEgKi8KLQkJZHZiX2RteF9zd2ZpbHRlcl9wYWNrZXRzKCZidWRnZXQtPmRlbXV4MSwgbWVtICsgb2xkZG1hLCAobmV3ZG1hIC0gb2xkZG1hKSAvIDE4OCk7CisJCWR2Yl9kbXhfc3dmaWx0ZXJfcGFja2V0cyhkZW11eCwgbWVtICsgb2xkZG1hLCAobmV3ZG1hIC0gb2xkZG1hKSAvIDE4OCk7CiAJZWxzZSB7CiAJCS8qIHdyYXBhcm91bmQsIGR1bXAgb2xkZG1hLi5idWZsZW4gYW5kIDAuLm5ld2RtYSAqLwotCQlkdmJfZG14X3N3ZmlsdGVyX3BhY2tldHMoJmJ1ZGdldC0+ZGVtdXgxLCBtZW0gKyBvbGRkbWEsIChUU19CVUZMRU4gLSBvbGRkbWEpIC8gMTg4KTsKLQkJZHZiX2RteF9zd2ZpbHRlcl9wYWNrZXRzKCZidWRnZXQtPmRlbXV4MSwgbWVtLCBuZXdkbWEgLyAxODgpOworCQlkdmJfZG14X3N3ZmlsdGVyX3BhY2tldHMoZGVtdXgsIG1lbSArIG9sZGRtYSwgKFRTX0JVRkxFTiAtIG9sZGRtYSkgLyAxODgpOworCQlkdmJfZG14X3N3ZmlsdGVyX3BhY2tldHMoZGVtdXgsIG1lbSwgbmV3ZG1hIC8gMTg4KTsKIAl9CiB9CiAKQEAgLTEyOTQsOCArMTMxNyw4IEBACiAJZm9yIChpID0gMDsgaSA8IDMyOyBpKyspCiAJCWF2NzExMC0+aGFuZGxlMmZpbHRlcltpXSA9IE5VTEw7CiAKLQlkdmJkZW11eC0+ZmlsdGVybnVtID0gMzI7Ci0JZHZiZGVtdXgtPmZlZWRudW0gPSAzMjsKKwlkdmJkZW11eC0+ZmlsdGVybnVtID0gKGF2NzExMC0+ZnVsbF90cykgPyAyNTYgOiAzMjsKKwlkdmJkZW11eC0+ZmVlZG51bSA9IChhdjcxMTAtPmZ1bGxfdHMpID8gMjU2IDogMzI7CiAJZHZiZGVtdXgtPnN0YXJ0X2ZlZWQgPSBhdjcxMTBfc3RhcnRfZmVlZDsKIAlkdmJkZW11eC0+c3RvcF9mZWVkID0gYXY3MTEwX3N0b3BfZmVlZDsKIAlkdmJkZW11eC0+d3JpdGVfdG9fZGVjb2RlciA9IGF2NzExMF93cml0ZV90b19kZWNvZGVyOwpAQCAtMTMwNSw3ICsxMzI4LDcgQEAKIAlkdmJfZG14X2luaXQoJmF2NzExMC0+ZGVtdXgpOwogCWF2NzExMC0+ZGVtdXguZG14LmdldF9zdGMgPSBkdmJfZ2V0X3N0YzsKIAotCWF2NzExMC0+ZG14ZGV2LmZpbHRlcm51bSA9IDMyOworCWF2NzExMC0+ZG14ZGV2LmZpbHRlcm51bSA9IChhdjcxMTAtPmZ1bGxfdHMpID8gMjU2IDogMzI7CiAJYXY3MTEwLT5kbXhkZXYuZGVtdXggPSAmZHZiZGVtdXgtPmRteDsKIAlhdjcxMTAtPmRteGRldi5jYXBhYmlsaXRpZXMgPSAwOwogCkBAIC0xNDIyLDcgKzE0NDUsNiBAQAogCXJldHVybiBpMmNfdHJhbnNmZXIoJmF2NzExMC0+aTJjX2FkYXAsICZtc2dzLCAxKTsKIH0KIAotI2lmIDAKIHU4IGkyY19yZWFkcmVnKHN0cnVjdCBhdjcxMTAgKmF2NzExMCwgdTggaWQsIHU4IHJlZykKIHsKIAl1OCBtbTFbXSA9IHsweDAwfTsKQEAgLTE0MzksNyArMTQ2MSw2IEBACiAKIAlyZXR1cm4gbW0yWzBdOwogfQotI2VuZGlmCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBJTklUSUFMSVpBVElPTgpAQCAtMjI1Niw3ICsyMjc3LDcgQEAKIAlpZiAoIWF2NzExMC0+ZmUpIHsKIAkJLyogRklYTUU6IHByb3BhZ2F0ZSB0aGUgZmFpbHVyZSBjb2RlIGZyb20gdGhlIGxvd2VyIGxheWVycyAqLwogCQlyZXQgPSAtRU5PTUVNOwotCQlwcmludGsoImR2Yi10dHBjaTogQSBmcm9udGVuZCBkcml2ZXIgd2FzIG5vdCBmb3VuZCBmb3IgZGV2aWNlICUwNHgvJTA0eCBzdWJzeXN0ZW0gJTA0eC8lMDR4XG4iLAorCQlwcmludGsoImR2Yi10dHBjaTogQSBmcm9udGVuZCBkcml2ZXIgd2FzIG5vdCBmb3VuZCBmb3IgZGV2aWNlIFslMDR4OiUwNHhdIHN1YnN5c3RlbSBbJTA0eDolMDR4XVxuIiwKIAkJICAgICAgIGF2NzExMC0+ZGV2LT5wY2ktPnZlbmRvciwKIAkJICAgICAgIGF2NzExMC0+ZGV2LT5wY2ktPmRldmljZSwKIAkJICAgICAgIGF2NzExMC0+ZGV2LT5wY2ktPnN1YnN5c3RlbV92ZW5kb3IsCkBAIC0yNDg0LDcgKzI1MDUsNDcgQEAKIAkJCSAgICAgICBhdjcxMTAtPmR2Yl9hZGFwdGVyLnByb3Bvc2VkX21hYyk7CiAJcmV0ID0gLUVOT01FTTsKIAotCWlmIChidWRnZXRwYXRjaCkgeworCS8qIGZ1bGwtdHMgbW9kPyAqLworCWlmIChmdWxsX3RzKQorCQlhdjcxMTAtPmZ1bGxfdHMgPSB0cnVlOworCisJLyogY2hlY2sgZm9yIGZ1bGwtdHMgZmxhZyBpbiBlZXByb20gKi8KKwlpZiAoaTJjX3JlYWRyZWcoYXY3MTEwLCAweGFhLCAwKSA9PSAweDRmICYmIGkyY19yZWFkcmVnKGF2NzExMCwgMHhhYSwgMSkgPT0gMHg0NSkgeworCQl1OCBmbGFncyA9IGkyY19yZWFkcmVnKGF2NzExMCwgMHhhYSwgMik7CisJCWlmIChmbGFncyAhPSAweGZmICYmIChmbGFncyAmIDB4MDEpKQorCQkJYXY3MTEwLT5mdWxsX3RzID0gdHJ1ZTsKKwl9CisKKwlpZiAoYXY3MTEwLT5mdWxsX3RzKSB7CisJCXByaW50ayhLRVJOX0lORk8gImR2Yi10dHBjaTogZnVsbC10cyBtb2RlIGVuYWJsZWQgZm9yIHNhYTcxNDYgcG9ydCBCXG4iKTsKKwkJc3Bpbl9sb2NrX2luaXQoJmF2NzExMC0+ZmVlZGxvY2sxKTsKKwkJYXY3MTEwLT5ncmFiYmluZyA9IHNhYTcxNDZfdm1hbGxvY19idWlsZF9wZ3RhYmxlKHBkZXYsIGxlbmd0aCwKKwkJCQkJCQkJICZhdjcxMTAtPnB0KTsKKwkJaWYgKCFhdjcxMTAtPmdyYWJiaW5nKQorCQkJZ290byBlcnJfaTJjX2RlbF8zOworCisJCXNhYTcxNDZfd3JpdGUoZGV2LCBERDFfU1RSRUFNX0IsIDB4MDAwMDAwMDApOworCQlzYWE3MTQ2X3dyaXRlKGRldiwgTUMyLCAoTUFTS18xMCB8IE1BU0tfMjYpKTsKKworCQlzYWE3MTQ2X3dyaXRlKGRldiwgREQxX0lOSVQsIDB4MDAwMDA2MDApOworCQlzYWE3MTQ2X3dyaXRlKGRldiwgTUMyLCAoTUFTS18wOSB8IE1BU0tfMjUgfCBNQVNLXzEwIHwgTUFTS18yNikpOworCisJCXNhYTcxNDZfd3JpdGUoZGV2LCBCUlNfQ1RSTCwgMHg2MDAwMDAwMCk7CisJCXNhYTcxNDZfd3JpdGUoZGV2LCBNQzIsIE1BU0tfMDggfCBNQVNLXzI0KTsKKworCQkvKiBkbWEzICovCisJCXNhYTcxNDZfd3JpdGUoZGV2LCBQQ0lfQlRfVjEsIDB4MDAxYzAwMDAgfCAoc2FhNzE0Nl9yZWFkKGRldiwgUENJX0JUX1YxKSAmIH4weDAwMWYwMDAwKSk7CisJCXNhYTcxNDZfd3JpdGUoZGV2LCBCQVNFX09ERDMsIDApOworCQlzYWE3MTQ2X3dyaXRlKGRldiwgQkFTRV9FVkVOMywgMCk7CisJCXNhYTcxNDZfd3JpdGUoZGV2LCBQUk9UX0FERFIzLCBUU19XSURUSCAqIFRTX0hFSUdIVCk7CisJCXNhYTcxNDZfd3JpdGUoZGV2LCBQSVRDSDMsIFRTX1dJRFRIKTsKKwkJc2FhNzE0Nl93cml0ZShkZXYsIEJBU0VfUEFHRTMsIGF2NzExMC0+cHQuZG1hIHwgTUUxIHwgMHg5MCk7CisJCXNhYTcxNDZfd3JpdGUoZGV2LCBOVU1fTElORV9CWVRFMywgKFRTX0hFSUdIVCA8PCAxNikgfCBUU19XSURUSCk7CisJCXNhYTcxNDZfd3JpdGUoZGV2LCBNQzIsIE1BU0tfMDQgfCBNQVNLXzIwKTsKKworCQl0YXNrbGV0X2luaXQoJmF2NzExMC0+dnBlX3Rhc2tsZXQsIHZwZWlycSwgKHVuc2lnbmVkIGxvbmcpIGF2NzExMCk7CisKKwl9IGVsc2UgaWYgKGJ1ZGdldHBhdGNoKSB7CiAJCXNwaW5fbG9ja19pbml0KCZhdjcxMTAtPmZlZWRsb2NrMSk7CiAJCWF2NzExMC0+Z3JhYmJpbmcgPSBzYWE3MTQ2X3ZtYWxsb2NfYnVpbGRfcGd0YWJsZShwZGV2LCBsZW5ndGgsCiAJCQkJCQkJCSAmYXY3MTEwLT5wdCk7CkBAIC0yNzEwLDExICsyNzcxLDEzIEBACiAjaWYgZGVmaW5lZChDT05GSUdfSU5QVVRfRVZERVYpIHx8IGRlZmluZWQoQ09ORklHX0lOUFVUX0VWREVWX01PRFVMRSkKIAlhdjcxMTBfaXJfZXhpdChhdjcxMTApOwogI2VuZGlmCi0JaWYgKGJ1ZGdldHBhdGNoKSB7Ci0JCS8qIERpc2FibGUgUlBTMSAqLwotCQlzYWE3MTQ2X3dyaXRlKHNhYSwgTUMxLCBNQVNLXzI5KTsKLQkJLyogVlNZTkMgTE9XIChpbmFjdGl2ZSkgKi8KLQkJc2FhNzE0Nl9zZXRncGlvKHNhYSwgMywgU0FBNzE0Nl9HUElPX09VVExPKTsKKwlpZiAoYnVkZ2V0cGF0Y2ggfHwgYXY3MTEwLT5mdWxsX3RzKSB7CisJCWlmIChidWRnZXRwYXRjaCkgeworCQkJLyogRGlzYWJsZSBSUFMxICovCisJCQlzYWE3MTQ2X3dyaXRlKHNhYSwgTUMxLCBNQVNLXzI5KTsKKwkJCS8qIFZTWU5DIExPVyAoaW5hY3RpdmUpICovCisJCQlzYWE3MTQ2X3NldGdwaW8oc2FhLCAzLCBTQUE3MTQ2X0dQSU9fT1VUTE8pOworCQl9CiAJCXNhYTcxNDZfd3JpdGUoc2FhLCBNQzEsIE1BU0tfMjApOwkvKiBETUEzIG9mZiAqLwogCQlTQUE3MTQ2X0lFUl9ESVNBQkxFKHNhYSwgTUFTS18xMCk7CiAJCVNBQTcxNDZfSVNSX0NMRUFSKHNhYSwgTUFTS18xMCk7CkBAIC0yNzk0LDcgKzI4NTcsNyBAQAogCQl0YXNrbGV0X3NjaGVkdWxlKCZhdjcxMTAtPmdwaW9fdGFza2xldCk7CiAJfQogCi0JaWYgKCgqaXNyICYgTUFTS18xMCkgJiYgYnVkZ2V0cGF0Y2gpCisJaWYgKCppc3IgJiBNQVNLXzEwKQogCQl0YXNrbGV0X3NjaGVkdWxlKCZhdjcxMTAtPnZwZV90YXNrbGV0KTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYXY3MTEwLmggYi9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9hdjcxMTAuaAppbmRleCA1NWYyM2RkLi5kODViODUxIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9hdjcxMTAuaAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9hdjcxMTAuaApAQCAtMTkyLDYgKzE5Miw3IEBACiAJdW5zaWduZWQgY2hhciAgICAgICAgICAgKmdyYWJiaW5nOwogCXN0cnVjdCBzYWE3MTQ2X3BndGFibGUgIHB0OwogCXN0cnVjdCB0YXNrbGV0X3N0cnVjdCAgIHZwZV90YXNrbGV0OworCWJvb2wJCQlmdWxsX3RzOwogCiAJaW50CQkJZmVfc3luY2VkOwogCXN0cnVjdCBtdXRleAkJcGlkX211dGV4OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYXY3MTEwX2F2LmMgYi9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9hdjcxMTBfYXYuYwppbmRleCAxODQ2NDdhZC4uYmRjNjJhYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYXY3MTEwX2F2LmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYXY3MTEwX2F2LmMKQEAgLTc4OCw2ICs3ODgsOSBAQAogCiAJZHByaW50aygyLCAiYXY3MTEwOiVwLCBcbiIsIGF2NzExMCk7CiAKKwlpZiAoYXY3MTEwLT5mdWxsX3RzICYmIGRlbXV4LT5kbXguZnJvbnRlbmQtPnNvdXJjZSAhPSBETVhfTUVNT1JZX0ZFKQorCQlyZXR1cm4gMDsKKwogCXN3aXRjaCAoZmVlZC0+cGVzX3R5cGUpIHsKIAljYXNlIDA6CiAJCWlmIChhdjcxMTAtPmF1ZGlvc3RhdGUuc3RyZWFtX3NvdXJjZSA9PSBBVURJT19TT1VSQ0VfTUVNT1JZKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYnVkZ2V0LWF2LmMgYi9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9idWRnZXQtYXYuYwppbmRleCBiN2QxZjJmLi4xMDMyZWE3IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9idWRnZXQtYXYuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9idWRnZXQtYXYuYwpAQCAtNTcsNiArNTcsOCBAQAogI2RlZmluZSBTTE9UU1RBVFVTX1JFQURZICAgICAgICA4CiAjZGVmaW5lIFNMT1RTVEFUVVNfT0NDVVBJRUQgICAgIChTTE9UU1RBVFVTX1BSRVNFTlR8U0xPVFNUQVRVU19SRVNFVHxTTE9UU1RBVFVTX1JFQURZKQogCitEVkJfREVGSU5FX01PRF9PUFRfQURBUFRFUl9OUihhZGFwdGVyX25yKTsKKwogc3RydWN0IGJ1ZGdldF9hdiB7CiAJc3RydWN0IGJ1ZGdldCBidWRnZXQ7CiAJc3RydWN0IHZpZGVvX2RldmljZSAqdmQ7CkBAIC0xMDQ5LDcgKzEwNTEsNyBAQAogCiAJaWYgKGZlID09IE5VTEwpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJidWRnZXQtYXY6IEEgZnJvbnRlbmQgZHJpdmVyIHdhcyBub3QgZm91bmQgIgotCQkJCSJmb3IgZGV2aWNlICUwNHgvJTA0eCBzdWJzeXN0ZW0gJTA0eC8lMDR4XG4iLAorCQkJCSJmb3IgZGV2aWNlIFslMDR4OiUwNHhdIHN1YnN5c3RlbSBbJTA0eDolMDR4XVxuIiwKIAkJICAgICAgIHNhYS0+cGNpLT52ZW5kb3IsCiAJCSAgICAgICBzYWEtPnBjaS0+ZGV2aWNlLAogCQkgICAgICAgc2FhLT5wY2ktPnN1YnN5c3RlbV92ZW5kb3IsCkBAIC0xMTI3LDcgKzExMjksOSBAQAogCiAJZGV2LT5leHRfcHJpdiA9IGJ1ZGdldF9hdjsKIAotCWlmICgoZXJyID0gdHRwY2lfYnVkZ2V0X2luaXQoJmJ1ZGdldF9hdi0+YnVkZ2V0LCBkZXYsIGluZm8sIFRISVNfTU9EVUxFKSkpIHsKKwllcnIgPSB0dHBjaV9idWRnZXRfaW5pdCgmYnVkZ2V0X2F2LT5idWRnZXQsIGRldiwgaW5mbywgVEhJU19NT0RVTEUsCisJCQkJYWRhcHRlcl9ucik7CisJaWYgKGVycikgewogCQlrZnJlZShidWRnZXRfYXYpOwogCQlyZXR1cm4gZXJyOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL2J1ZGdldC1jaS5jIGIvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYnVkZ2V0LWNpLmMKaW5kZXggMDYwZTdjNy4uMGE1YWFkNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYnVkZ2V0LWNpLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYnVkZ2V0LWNpLmMKQEAgLTkyLDYgKzkyLDggQEAKIG1vZHVsZV9wYXJhbShpcl9kZWJ1ZywgaW50LCAwNjQ0KTsKIE1PRFVMRV9QQVJNX0RFU0MoaXJfZGVidWcsICJlbmFibGUgZGVidWdnaW5nIGluZm9ybWF0aW9uIGZvciBJUiBkZWNvZGluZyIpOwogCitEVkJfREVGSU5FX01PRF9PUFRfQURBUFRFUl9OUihhZGFwdGVyX25yKTsKKwogc3RydWN0IGJ1ZGdldF9jaV9pciB7CiAJc3RydWN0IGlucHV0X2RldiAqZGV2OwogCXN0cnVjdCB0YXNrbGV0X3N0cnVjdCBtc3A0MzBfaXJxX3Rhc2tsZXQ7CkBAIC0xMTUzLDcgKzExNTUsNyBAQAogCX0KIAogCWlmIChidWRnZXRfY2ktPmJ1ZGdldC5kdmJfZnJvbnRlbmQgPT0gTlVMTCkgewotCQlwcmludGsoImJ1ZGdldC1jaTogQSBmcm9udGVuZCBkcml2ZXIgd2FzIG5vdCBmb3VuZCBmb3IgZGV2aWNlICUwNHgvJTA0eCBzdWJzeXN0ZW0gJTA0eC8lMDR4XG4iLAorCQlwcmludGsoImJ1ZGdldC1jaTogQSBmcm9udGVuZCBkcml2ZXIgd2FzIG5vdCBmb3VuZCBmb3IgZGV2aWNlIFslMDR4OiUwNHhdIHN1YnN5c3RlbSBbJTA0eDolMDR4XVxuIiwKIAkJICAgICAgIGJ1ZGdldF9jaS0+YnVkZ2V0LmRldi0+cGNpLT52ZW5kb3IsCiAJCSAgICAgICBidWRnZXRfY2ktPmJ1ZGdldC5kZXYtPnBjaS0+ZGV2aWNlLAogCQkgICAgICAgYnVkZ2V0X2NpLT5idWRnZXQuZGV2LT5wY2ktPnN1YnN5c3RlbV92ZW5kb3IsCkBAIC0xMTgzLDcgKzExODUsOCBAQAogCiAJZGV2LT5leHRfcHJpdiA9IGJ1ZGdldF9jaTsKIAotCWVyciA9IHR0cGNpX2J1ZGdldF9pbml0KCZidWRnZXRfY2ktPmJ1ZGdldCwgZGV2LCBpbmZvLCBUSElTX01PRFVMRSk7CisJZXJyID0gdHRwY2lfYnVkZ2V0X2luaXQoJmJ1ZGdldF9jaS0+YnVkZ2V0LCBkZXYsIGluZm8sIFRISVNfTU9EVUxFLAorCQkJCWFkYXB0ZXJfbnIpOwogCWlmIChlcnIpCiAJCWdvdG8gb3V0MjsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYnVkZ2V0LWNvcmUuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL2J1ZGdldC1jb3JlLmMKaW5kZXggNmY0ZGRiNi4uYmExOGU1NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYnVkZ2V0LWNvcmUuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9idWRnZXQtY29yZS5jCkBAIC01Nyw4ICs1Nyw2IEBACiBNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiVHVybiBvbi9vZmYgYnVkZ2V0IGRlYnVnZ2luZyAoZGVmYXVsdDpvZmYpLiIpOwogTU9EVUxFX1BBUk1fREVTQyhidWZzaXplLCAiRE1BIGJ1ZmZlciBzaXplIGluIEtCLCBkZWZhdWx0OiAxODgsIG1pbjogMTg4LCBtYXg6IDE0MTAgKEFjdGl2eTogNTY0KSIpOwogCi1EVkJfREVGSU5FX01PRF9PUFRfQURBUFRFUl9OUihhZGFwdGVyX25yKTsKLQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIFRUIGJ1ZGdldCAvIFdpblRWIE5vdmEKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpAQCAtNDExLDcgKzQwOSw3IEBACiAKIGludCB0dHBjaV9idWRnZXRfaW5pdChzdHJ1Y3QgYnVkZ2V0ICpidWRnZXQsIHN0cnVjdCBzYWE3MTQ2X2RldiAqZGV2LAogCQkgICAgICBzdHJ1Y3Qgc2FhNzE0Nl9wY2lfZXh0ZW5zaW9uX2RhdGEgKmluZm8sCi0JCSAgICAgIHN0cnVjdCBtb2R1bGUgKm93bmVyKQorCQkgICAgICBzdHJ1Y3QgbW9kdWxlICpvd25lciwgc2hvcnQgKmFkYXB0ZXJfbnVtcykKIHsKIAlpbnQgcmV0ID0gMDsKIAlzdHJ1Y3QgYnVkZ2V0X2luZm8gKmJpID0gaW5mby0+ZXh0X3ByaXY7CkBAIC00NzQsNyArNDcyLDcgQEAKIAlwcmludGsoIiVzOiBkbWEgYnVmZmVyIHNpemUgJXVcbiIsIGJ1ZGdldC0+ZGV2LT5uYW1lLCBidWRnZXQtPmJ1ZmZlcl9zaXplKTsKIAogCXJldCA9IGR2Yl9yZWdpc3Rlcl9hZGFwdGVyKCZidWRnZXQtPmR2Yl9hZGFwdGVyLCBidWRnZXQtPmNhcmQtPm5hbWUsCi0JCQkJICAgb3duZXIsICZidWRnZXQtPmRldi0+cGNpLT5kZXYsIGFkYXB0ZXJfbnIpOworCQkJCSAgIG93bmVyLCAmYnVkZ2V0LT5kZXYtPnBjaS0+ZGV2LCBhZGFwdGVyX251bXMpOwogCWlmIChyZXQgPCAwKQogCQlyZXR1cm4gcmV0OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9idWRnZXQtcGF0Y2guYyBiL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL2J1ZGdldC1wYXRjaC5jCmluZGV4IGFhNWVkNGUuLjYwMTM2Njg4IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9idWRnZXQtcGF0Y2guYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9idWRnZXQtcGF0Y2guYwpAQCAtMzksNiArMzksOCBAQAogCiAjaW5jbHVkZSAiYnNydTYuaCIKIAorRFZCX0RFRklORV9NT0RfT1BUX0FEQVBURVJfTlIoYWRhcHRlcl9ucik7CisKICNkZWZpbmUgYnVkZ2V0X3BhdGNoIGJ1ZGdldAogCiBzdGF0aWMgc3RydWN0IHNhYTcxNDZfZXh0ZW5zaW9uIGJ1ZGdldF9leHRlbnNpb247CkBAIC0zNjAsNyArMzYyLDcgQEAKIAl9CiAKIAlpZiAoYnVkZ2V0LT5kdmJfZnJvbnRlbmQgPT0gTlVMTCkgewotCQlwcmludGsoImR2Yi10dHBjaTogQSBmcm9udGVuZCBkcml2ZXIgd2FzIG5vdCBmb3VuZCBmb3IgZGV2aWNlICUwNHgvJTA0eCBzdWJzeXN0ZW0gJTA0eC8lMDR4XG4iLAorCQlwcmludGsoImR2Yi10dHBjaTogQSBmcm9udGVuZCBkcml2ZXIgd2FzIG5vdCBmb3VuZCBmb3IgZGV2aWNlIFslMDR4OiUwNHhdIHN1YnN5c3RlbSBbJTA0eDolMDR4XVxuIiwKIAkJICAgICAgIGJ1ZGdldC0+ZGV2LT5wY2ktPnZlbmRvciwKIAkJICAgICAgIGJ1ZGdldC0+ZGV2LT5wY2ktPmRldmljZSwKIAkJICAgICAgIGJ1ZGdldC0+ZGV2LT5wY2ktPnN1YnN5c3RlbV92ZW5kb3IsCkBAIC01OTIsOCArNTk0LDkgQEAKIAogCWRwcmludGsoMiwgImJ1ZGdldDogJXBcbiIsIGJ1ZGdldCk7CiAKLQlpZiAoKGVyciA9IHR0cGNpX2J1ZGdldF9pbml0IChidWRnZXQsIGRldiwgaW5mbywgVEhJU19NT0RVTEUpKSkgewotCQlrZnJlZSAoYnVkZ2V0KTsKKwllcnIgPSB0dHBjaV9idWRnZXRfaW5pdChidWRnZXQsIGRldiwgaW5mbywgVEhJU19NT0RVTEUsIGFkYXB0ZXJfbnIpOworCWlmIChlcnIpIHsKKwkJa2ZyZWUoYnVkZ2V0KTsKIAkJcmV0dXJuIGVycjsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL2J1ZGdldC5jIGIvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYnVkZ2V0LmMKaW5kZXggZjAwNjg5OS4uMTYzOGUxZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYnVkZ2V0LmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYnVkZ2V0LmMKQEAgLTQ2LDExICs0NiwxNCBAQAogI2luY2x1ZGUgImxuYnAyMS5oIgogI2luY2x1ZGUgImJzcnU2LmgiCiAjaW5jbHVkZSAiYnNiZTEuaCIKKyNpbmNsdWRlICJ0ZGhkMS5oIgogCiBzdGF0aWMgaW50IGRpc2VxY19tZXRob2Q7CiBtb2R1bGVfcGFyYW0oZGlzZXFjX21ldGhvZCwgaW50LCAwNDQ0KTsKIE1PRFVMRV9QQVJNX0RFU0MoZGlzZXFjX21ldGhvZCwgIlNlbGVjdCBEaVNFcUMgbWV0aG9kIGZvciBzdWJzeXN0ZW0gaWQgMTNjMjoxMDAzLCAwOiBkZWZhdWx0LCAxOiBtb3JlIHJlbGlhYmxlIChmb3IgbmV3ZXIgcmV2aXNpb25zIG9ubHkpIik7CiAKK0RWQl9ERUZJTkVfTU9EX09QVF9BREFQVEVSX05SKGFkYXB0ZXJfbnIpOworCiBzdGF0aWMgdm9pZCBTZXQyMksgKHN0cnVjdCBidWRnZXQgKmJ1ZGdldCwgaW50IHN0YXRlKQogewogCXN0cnVjdCBzYWE3MTQ2X2RldiAqZGV2PWJ1ZGdldC0+ZGV2OwpAQCAtMzkwLDYgKzM5MywxMyBAQAogCS5zZXRfc3ltYm9sX3JhdGUgPSBhbHBzX2JzYmUxX3NldF9zeW1ib2xfcmF0ZSwKIH07CiAKK3N0YXRpYyBpbnQgYWxwc190ZGhkMV8yMDRfcmVxdWVzdF9maXJtd2FyZShzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgY29uc3Qgc3RydWN0IGZpcm13YXJlICoqZncsIGNoYXIgKm5hbWUpCit7CisJc3RydWN0IGJ1ZGdldCAqYnVkZ2V0ID0gKHN0cnVjdCBidWRnZXQgKilmZS0+ZHZiLT5wcml2OworCisJcmV0dXJuIHJlcXVlc3RfZmlybXdhcmUoZncsIG5hbWUsICZidWRnZXQtPmRldi0+cGNpLT5kZXYpOworfQorCiAKIHN0YXRpYyBpbnQgaTJjX3JlYWRyZWcoc3RydWN0IGkyY19hZGFwdGVyICppMmMsIHU4IGFkciwgdTggcmVnKQogewpAQCAtNTExLDYgKzUyMSwxNCBAQAogCQl9CiAJCWJyZWFrOwogCisJY2FzZSAweDVmNjA6IC8qIEZ1aml0c3UgU2llbWVucyBBY3RpdnkgQnVkZ2V0LVQgUENJIHJldiBBTCAodGRhMTAwNDYvQUxQUyBUREhEMS0yMDRBKSAqLworCQlidWRnZXQtPmR2Yl9mcm9udGVuZCA9IGR2Yl9hdHRhY2godGRhMTAwNDZfYXR0YWNoLCAmYWxwc190ZGhkMV8yMDRhX2NvbmZpZywgJmJ1ZGdldC0+aTJjX2FkYXApOworCQlpZiAoYnVkZ2V0LT5kdmJfZnJvbnRlbmQpIHsKKwkJCWJ1ZGdldC0+ZHZiX2Zyb250ZW5kLT5vcHMudHVuZXJfb3BzLnNldF9wYXJhbXMgPSBhbHBzX3RkaGQxXzIwNGFfdHVuZXJfc2V0X3BhcmFtczsKKwkJCWJ1ZGdldC0+ZHZiX2Zyb250ZW5kLT50dW5lcl9wcml2ID0gJmJ1ZGdldC0+aTJjX2FkYXA7CisJCX0KKwkJYnJlYWs7CisKIAljYXNlIDB4NWY2MTogLyogRnVqaXRzdSBTaWVtZW5zIEFjdGl2eSBCdWRnZXQtVCBQQ0kgcmV2IEdSIChMNjQ3ODEvR3J1bmRpZyAyOTUwNC00MDEodHNhNTA2MCkpICovCiAJCWJ1ZGdldC0+ZHZiX2Zyb250ZW5kID0gZHZiX2F0dGFjaChsNjQ3ODFfYXR0YWNoLCAmZ3J1bmRpZ18yOTUwNF80MDFfY29uZmlnX2FjdGl2eSwgJmJ1ZGdldC0+aTJjX2FkYXApOwogCQlpZiAoYnVkZ2V0LT5kdmJfZnJvbnRlbmQpIHsKQEAgLTU1MCw3ICs1NjgsNyBAQAogCX0KIAogCWlmIChidWRnZXQtPmR2Yl9mcm9udGVuZCA9PSBOVUxMKSB7Ci0JCXByaW50aygiYnVkZ2V0OiBBIGZyb250ZW5kIGRyaXZlciB3YXMgbm90IGZvdW5kIGZvciBkZXZpY2UgJTA0eC8lMDR4IHN1YnN5c3RlbSAlMDR4LyUwNHhcbiIsCisJCXByaW50aygiYnVkZ2V0OiBBIGZyb250ZW5kIGRyaXZlciB3YXMgbm90IGZvdW5kIGZvciBkZXZpY2UgWyUwNHg6JTA0eF0gc3Vic3lzdGVtIFslMDR4OiUwNHhdXG4iLAogCQkgICAgICAgYnVkZ2V0LT5kZXYtPnBjaS0+dmVuZG9yLAogCQkgICAgICAgYnVkZ2V0LT5kZXYtPnBjaS0+ZGV2aWNlLAogCQkgICAgICAgYnVkZ2V0LT5kZXYtPnBjaS0+c3Vic3lzdGVtX3ZlbmRvciwKQEAgLTU4Miw3ICs2MDAsOCBAQAogCiAJZGV2LT5leHRfcHJpdiA9IGJ1ZGdldDsKIAotCWlmICgoZXJyID0gdHRwY2lfYnVkZ2V0X2luaXQgKGJ1ZGdldCwgZGV2LCBpbmZvLCBUSElTX01PRFVMRSkpKSB7CisJZXJyID0gdHRwY2lfYnVkZ2V0X2luaXQoYnVkZ2V0LCBkZXYsIGluZm8sIFRISVNfTU9EVUxFLCBhZGFwdGVyX25yKTsKKwlpZiAoZXJyKSB7CiAJCXByaW50aygiPT0+IGZhaWxlZFxuIik7CiAJCWtmcmVlIChidWRnZXQpOwogCQlyZXR1cm4gZXJyOwpAQCAtNjI0LDYgKzY0Myw3IEBACiBNQUtFX0JVREdFVF9JTkZPKGZzYWNzMCwgIkZ1aml0c3UgU2llbWVucyBBY3RpdnkgQnVkZ2V0LVMgUENJIChyZXYgR1IvZ3J1bmRpZyBmcm9udGVuZCkiLCBCVURHRVRfRlNfQUNUSVZZKTsKIE1BS0VfQlVER0VUX0lORk8oZnNhY3MxLCAiRnVqaXRzdSBTaWVtZW5zIEFjdGl2eSBCdWRnZXQtUyBQQ0kgKHJldiBBTC9hbHBzIGZyb250ZW5kKSIsIEJVREdFVF9GU19BQ1RJVlkpOwogTUFLRV9CVURHRVRfSU5GTyhmc2FjdCwJICJGdWppdHN1IFNpZW1lbnMgQWN0aXZ5IEJ1ZGdldC1UIFBDSSAocmV2IEdSL0dydW5kaWcgZnJvbnRlbmQpIiwgQlVER0VUX0ZTX0FDVElWWSk7CitNQUtFX0JVREdFVF9JTkZPKGZzYWN0MSwgIkZ1aml0c3UgU2llbWVucyBBY3RpdnkgQnVkZ2V0LVQgUENJIChyZXYgQUwvQUxQUyBUREhEMS0yMDRBKSIsIEJVREdFVF9GU19BQ1RJVlkpOwogCiBzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgcGNpX3RibFtdID0gewogCU1BS0VfRVhURU5TSU9OX1BDSSh0dGJzLCAgMHgxM2MyLCAweDEwMDMpLApAQCAtNjM0LDYgKzY1NCw3IEBACiAJTUFLRV9FWFRFTlNJT05fUENJKHR0YnMxNDAxLCAweDEzYzIsIDB4MTAxOCksCiAJTUFLRV9FWFRFTlNJT05fUENJKGZzYWNzMSwweDExMzEsIDB4NGY2MCksCiAJTUFLRV9FWFRFTlNJT05fUENJKGZzYWNzMCwweDExMzEsIDB4NGY2MSksCisJTUFLRV9FWFRFTlNJT05fUENJKGZzYWN0MSwgMHgxMTMxLCAweDVmNjApLAogCU1BS0VfRVhURU5TSU9OX1BDSShmc2FjdCwgMHgxMTMxLCAweDVmNjEpLAogCXsKIAkJLnZlbmRvciAgICA9IDAsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9idWRnZXQuaCBiL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL2J1ZGdldC5oCmluZGV4IGRkNDUwYjcuLjg2NDM1YmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL2J1ZGdldC5oCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL2J1ZGdldC5oCkBAIC0xMDksNyArMTA5LDcgQEAKIAogZXh0ZXJuIGludCB0dHBjaV9idWRnZXRfaW5pdChzdHJ1Y3QgYnVkZ2V0ICpidWRnZXQsIHN0cnVjdCBzYWE3MTQ2X2RldiAqZGV2LAogCQkJICAgICBzdHJ1Y3Qgc2FhNzE0Nl9wY2lfZXh0ZW5zaW9uX2RhdGEgKmluZm8sCi0JCQkgICAgIHN0cnVjdCBtb2R1bGUgKm93bmVyKTsKKwkJCSAgICAgc3RydWN0IG1vZHVsZSAqb3duZXIsIHNob3J0ICphZGFwdGVyX251bXMpOwogZXh0ZXJuIHZvaWQgdHRwY2lfYnVkZ2V0X2luaXRfaG9va3Moc3RydWN0IGJ1ZGdldCAqYnVkZ2V0KTsKIGV4dGVybiBpbnQgdHRwY2lfYnVkZ2V0X2RlaW5pdChzdHJ1Y3QgYnVkZ2V0ICpidWRnZXQpOwogZXh0ZXJuIHZvaWQgdHRwY2lfYnVkZ2V0X2lycTEwX2hhbmRsZXIoc3RydWN0IHNhYTcxNDZfZGV2ICpkZXYsIHUzMiAqIGlzcik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi90dHVzYi1idWRnZXQvZHZiLXR0dXNiLWJ1ZGdldC5jIGIvZHJpdmVycy9tZWRpYS9kdmIvdHR1c2ItYnVkZ2V0L2R2Yi10dHVzYi1idWRnZXQuYwppbmRleCBlNmM5Y2QyLi42NmFiMGM2IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi90dHVzYi1idWRnZXQvZHZiLXR0dXNiLWJ1ZGdldC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL3R0dXNiLWJ1ZGdldC9kdmItdHR1c2ItYnVkZ2V0LmMKQEAgLTE2MTQsNyArMTYxNCw3IEBACiAJfQogCiAJaWYgKHR0dXNiLT5mZSA9PSBOVUxMKSB7Ci0JCXByaW50aygiZHZiLXR0dXNiLWJ1ZGdldDogQSBmcm9udGVuZCBkcml2ZXIgd2FzIG5vdCBmb3VuZCBmb3IgZGV2aWNlICUwNHgvJTA0eFxuIiwKKwkJcHJpbnRrKCJkdmItdHR1c2ItYnVkZ2V0OiBBIGZyb250ZW5kIGRyaXZlciB3YXMgbm90IGZvdW5kIGZvciBkZXZpY2UgWyUwNHg6JTA0eF1cbiIsCiAJCSAgICAgICBsZTE2X3RvX2NwdSh0dHVzYi0+ZGV2LT5kZXNjcmlwdG9yLmlkVmVuZG9yKSwKIAkJICAgICAgIGxlMTZfdG9fY3B1KHR0dXNiLT5kZXYtPmRlc2NyaXB0b3IuaWRQcm9kdWN0KSk7CiAJfSBlbHNlIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL3R0dXNiLWRlYy90dHVzYl9kZWMuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL3R0dXNiLWRlYy90dHVzYl9kZWMuYwppbmRleCBkZTU4MjliLi5hYjMzZmVjIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi90dHVzYi1kZWMvdHR1c2JfZGVjLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvdHR1c2ItZGVjL3R0dXNiX2RlYy5jCkBAIC0xNjY1LDcgKzE2NjUsNyBAQAogCX0KIAogCWlmIChkZWMtPmZlID09IE5VTEwpIHsKLQkJcHJpbnRrKCJkdmItdHR1c2ItZGVjOiBBIGZyb250ZW5kIGRyaXZlciB3YXMgbm90IGZvdW5kIGZvciBkZXZpY2UgJTA0eC8lMDR4XG4iLAorCQlwcmludGsoImR2Yi10dHVzYi1kZWM6IEEgZnJvbnRlbmQgZHJpdmVyIHdhcyBub3QgZm91bmQgZm9yIGRldmljZSBbJTA0eDolMDR4XVxuIiwKIAkJICAgICAgIGxlMTZfdG9fY3B1KGRlYy0+dWRldi0+ZGVzY3JpcHRvci5pZFZlbmRvciksCiAJCSAgICAgICBsZTE2X3RvX2NwdShkZWMtPnVkZXYtPmRlc2NyaXB0b3IuaWRQcm9kdWN0KSk7CiAJfSBlbHNlIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL3R0dXNiLWRlYy90dHVzYmRlY2ZlLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi90dHVzYi1kZWMvdHR1c2JkZWNmZS5jCmluZGV4IDQ0M2FmMjQuLjIxMjYwYWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL3R0dXNiLWRlYy90dHVzYmRlY2ZlLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvdHR1c2ItZGVjL3R0dXNiZGVjZmUuYwpAQCAtMzgsNyArMzgsMTcgQEAKIH07CiAKIAotc3RhdGljIGludCB0dHVzYmRlY2ZlX3JlYWRfc3RhdHVzKHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlLCBmZV9zdGF0dXNfdCogc3RhdHVzKQorc3RhdGljIGludCB0dHVzYmRlY2ZlX2R2YnNfcmVhZF9zdGF0dXMoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsCisJZmVfc3RhdHVzX3QgKnN0YXR1cykKK3sKKwkqc3RhdHVzID0gRkVfSEFTX1NJR05BTCB8IEZFX0hBU19WSVRFUkJJIHwKKwkJRkVfSEFTX1NZTkMgfCBGRV9IQVNfQ0FSUklFUiB8IEZFX0hBU19MT0NLOworCXJldHVybiAwOworfQorCisKK3N0YXRpYyBpbnQgdHR1c2JkZWNmZV9kdmJ0X3JlYWRfc3RhdHVzKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLAorCWZlX3N0YXR1c190ICpzdGF0dXMpCiB7CiAJc3RydWN0IHR0dXNiZGVjZmVfc3RhdGUqIHN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CiAJdTggYltdID0geyAweDAwLCAweDAwLCAweDAwLCAweDAwLApAQCAtMjUxLDcgKzI2MSw3IEBACiAKIAkuZ2V0X3R1bmVfc2V0dGluZ3MgPSB0dHVzYmRlY2ZlX2R2YnRfZ2V0X3R1bmVfc2V0dGluZ3MsCiAKLQkucmVhZF9zdGF0dXMgPSB0dHVzYmRlY2ZlX3JlYWRfc3RhdHVzLAorCS5yZWFkX3N0YXR1cyA9IHR0dXNiZGVjZmVfZHZidF9yZWFkX3N0YXR1cywKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgZHZiX2Zyb250ZW5kX29wcyB0dHVzYmRlY2ZlX2R2YnNfb3BzID0gewpAQCAtMjczLDcgKzI4Myw3IEBACiAKIAkuc2V0X2Zyb250ZW5kID0gdHR1c2JkZWNmZV9kdmJzX3NldF9mcm9udGVuZCwKIAotCS5yZWFkX3N0YXR1cyA9IHR0dXNiZGVjZmVfcmVhZF9zdGF0dXMsCisJLnJlYWRfc3RhdHVzID0gdHR1c2JkZWNmZV9kdmJzX3JlYWRfc3RhdHVzLAogCiAJLmRpc2VxY19zZW5kX21hc3Rlcl9jbWQgPSB0dHVzYmRlY2ZlX2R2YnNfZGlzZXFjX3NlbmRfbWFzdGVyX2NtZCwKIAkuc2V0X3ZvbHRhZ2UgPSB0dHVzYmRlY2ZlX2R2YnNfc2V0X3ZvbHRhZ2UsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3JhZGlvL0tjb25maWcgYi9kcml2ZXJzL21lZGlhL3JhZGlvL0tjb25maWcKaW5kZXggMWI0MWIzZi4uMDRjZDdjMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9yYWRpby9LY29uZmlnCisrKyBiL2RyaXZlcnMvbWVkaWEvcmFkaW8vS2NvbmZpZwpAQCAtMzU5LDYgKzM1OSwxOCBAQAogCSAgY29tcHV0ZXIncyBVU0IgcG9ydC4KIAogCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCi0JICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgcmFkaW8tc2lsYWJzLgorCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHJhZGlvLXNpNDcweC4KKworY29uZmlnIFVTQl9NUjgwMAorCXRyaXN0YXRlICJBdmVyTWVkaWEgTVIgODAwIFVTQiBGTSByYWRpbyBzdXBwb3J0IgorCWRlcGVuZHMgb24gVVNCICYmIFZJREVPX1Y0TDIKKwktLS1oZWxwLS0tCisJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIGNvbm5lY3QgdGhpcyB0eXBlIG9mIHJhZGlvIHRvIHlvdXIKKwkgIGNvbXB1dGVyJ3MgVVNCIHBvcnQuIE5vdGUgdGhhdCB0aGUgYXVkaW8gaXMgbm90IGRpZ2l0YWwsIGFuZAorCSAgeW91IG11c3QgY29ubmVjdCB0aGUgbGluZSBvdXQgY29ubmVjdG9yIHRvIGEgc291bmQgY2FyZCBvciBhCisJICBzZXQgb2Ygc3BlYWtlcnMuCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQorCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHJhZGlvLW1yODAwLgogCiBlbmRpZiAjIFJBRElPX0FEQVBURVJTCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3JhZGlvL01ha2VmaWxlIGIvZHJpdmVycy9tZWRpYS9yYWRpby9NYWtlZmlsZQppbmRleCA3Y2E3MWFiLi4yNDBlYzYzYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9yYWRpby9NYWtlZmlsZQorKysgYi9kcml2ZXJzL21lZGlhL3JhZGlvL01ha2VmaWxlCkBAIC0xOCw1ICsxOCw2IEBACiBvYmotJChDT05GSUdfUkFESU9fTUFFU1RSTykgKz0gcmFkaW8tbWFlc3Ryby5vCiBvYmotJChDT05GSUdfVVNCX0RTQlIpICs9IGRzYnIxMDAubwogb2JqLSQoQ09ORklHX1VTQl9TSTQ3MFgpICs9IHJhZGlvLXNpNDcweC5vCitvYmotJChDT05GSUdfVVNCX01SODAwKSArPSByYWRpby1tcjgwMC5vCiAKIEVYVFJBX0NGTEFHUyArPSAtSXNvdW5kCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3JhZGlvL2RzYnIxMDAuYyBiL2RyaXZlcnMvbWVkaWEvcmFkaW8vZHNicjEwMC5jCmluZGV4IDcwYzY1YTcuLjc4ZjU2OTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvcmFkaW8vZHNicjEwMC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvcmFkaW8vZHNicjEwMC5jCkBAIC0yNzQsNyArMjc0LDcgQEAKIHN0YXRpYyBpbnQgdmlkaW9jX2dfdHVuZXIoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCQkJc3RydWN0IHY0bDJfdHVuZXIgKnYpCiB7Ci0Jc3RydWN0IGRzYnIxMDBfZGV2aWNlICpyYWRpbyA9IHZpZGVvX2dldF9kcnZkYXRhKHZpZGVvX2RldmRhdGEoZmlsZSkpOworCXN0cnVjdCBkc2JyMTAwX2RldmljZSAqcmFkaW8gPSB2aWRlb19kcnZkYXRhKGZpbGUpOwogCiAJaWYgKHYtPmluZGV4ID4gMCkKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC0zMDYsMTggKzMwNiwxOCBAQAogc3RhdGljIGludCB2aWRpb2Nfc19mcmVxdWVuY3koc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCQkJc3RydWN0IHY0bDJfZnJlcXVlbmN5ICpmKQogewotCXN0cnVjdCBkc2JyMTAwX2RldmljZSAqcmFkaW8gPSB2aWRlb19nZXRfZHJ2ZGF0YSh2aWRlb19kZXZkYXRhKGZpbGUpKTsKKwlzdHJ1Y3QgZHNicjEwMF9kZXZpY2UgKnJhZGlvID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKIAogCXJhZGlvLT5jdXJmcmVxID0gZi0+ZnJlcXVlbmN5OwogCWlmIChkc2JyMTAwX3NldGZyZXEocmFkaW8sIHJhZGlvLT5jdXJmcmVxKT09LTEpCi0JCXdhcm4oIlNldCBmcmVxdWVuY3kgZmFpbGVkIik7CisJCWRldl93YXJuKCZyYWRpby0+dXNiZGV2LT5kZXYsICJTZXQgZnJlcXVlbmN5IGZhaWxlZFxuIik7CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgdmlkaW9jX2dfZnJlcXVlbmN5KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQkJCXN0cnVjdCB2NGwyX2ZyZXF1ZW5jeSAqZikKIHsKLQlzdHJ1Y3QgZHNicjEwMF9kZXZpY2UgKnJhZGlvID0gdmlkZW9fZ2V0X2RydmRhdGEodmlkZW9fZGV2ZGF0YShmaWxlKSk7CisJc3RydWN0IGRzYnIxMDBfZGV2aWNlICpyYWRpbyA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CiAKIAlmLT50eXBlID0gVjRMMl9UVU5FUl9SQURJTzsKIAlmLT5mcmVxdWVuY3kgPSByYWRpby0+Y3VyZnJlcTsKQEAgLTM0Miw3ICszNDIsNyBAQAogc3RhdGljIGludCB2aWRpb2NfZ19jdHJsKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQkJCXN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwpCiB7Ci0Jc3RydWN0IGRzYnIxMDBfZGV2aWNlICpyYWRpbyA9IHZpZGVvX2dldF9kcnZkYXRhKHZpZGVvX2RldmRhdGEoZmlsZSkpOworCXN0cnVjdCBkc2JyMTAwX2RldmljZSAqcmFkaW8gPSB2aWRlb19kcnZkYXRhKGZpbGUpOwogCiAJc3dpdGNoIChjdHJsLT5pZCkgewogCWNhc2UgVjRMMl9DSURfQVVESU9fTVVURToKQEAgLTM1NSwxNiArMzU1LDIyIEBACiBzdGF0aWMgaW50IHZpZGlvY19zX2N0cmwoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCQkJc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCkKIHsKLQlzdHJ1Y3QgZHNicjEwMF9kZXZpY2UgKnJhZGlvID0gdmlkZW9fZ2V0X2RydmRhdGEodmlkZW9fZGV2ZGF0YShmaWxlKSk7CisJc3RydWN0IGRzYnIxMDBfZGV2aWNlICpyYWRpbyA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CiAKIAlzd2l0Y2ggKGN0cmwtPmlkKSB7CiAJY2FzZSBWNEwyX0NJRF9BVURJT19NVVRFOgogCQlpZiAoY3RybC0+dmFsdWUpIHsKLQkJCWlmIChkc2JyMTAwX3N0b3AocmFkaW8pPT0tMSkKLQkJCQl3YXJuKCJSYWRpbyBkaWQgbm90IHJlc3BvbmQgcHJvcGVybHkiKTsKKwkJCWlmIChkc2JyMTAwX3N0b3AocmFkaW8pID09IC0xKSB7CisJCQkJZGV2X3dhcm4oJnJhZGlvLT51c2JkZXYtPmRldiwKKwkJCQkJICJSYWRpbyBkaWQgbm90IHJlc3BvbmQgcHJvcGVybHlcbiIpOworCQkJCXJldHVybiAtRUJVU1k7CisJCQl9CiAJCX0gZWxzZSB7Ci0JCQlpZiAoZHNicjEwMF9zdGFydChyYWRpbyk9PS0xKQotCQkJCXdhcm4oIlJhZGlvIGRpZCBub3QgcmVzcG9uZCBwcm9wZXJseSIpOworCQkJaWYgKGRzYnIxMDBfc3RhcnQocmFkaW8pID09IC0xKSB7CisJCQkJZGV2X3dhcm4oJnJhZGlvLT51c2JkZXYtPmRldiwKKwkJCQkJICJSYWRpbyBkaWQgbm90IHJlc3BvbmQgcHJvcGVybHlcbiIpOworCQkJCXJldHVybiAtRUJVU1k7CisJCQl9CiAJCX0KIAkJcmV0dXJuIDA7CiAJfQpAQCAtNDA1LDIzICs0MTEsMjcgQEAKIAogc3RhdGljIGludCB1c2JfZHNicjEwMF9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQogewotCXN0cnVjdCBkc2JyMTAwX2RldmljZSAqcmFkaW89dmlkZW9fZ2V0X2RydmRhdGEodmlkZW9fZGV2ZGF0YShmaWxlKSk7CisJc3RydWN0IGRzYnIxMDBfZGV2aWNlICpyYWRpbyA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CiAKKwlsb2NrX2tlcm5lbCgpOwogCXJhZGlvLT51c2VycyA9IDE7CiAJcmFkaW8tPm11dGVkID0gMTsKIAogCWlmIChkc2JyMTAwX3N0YXJ0KHJhZGlvKTwwKSB7Ci0JCXdhcm4oIlJhZGlvIGRpZCBub3Qgc3RhcnQgdXAgcHJvcGVybHkiKTsKKwkJZGV2X3dhcm4oJnJhZGlvLT51c2JkZXYtPmRldiwKKwkJCSAiUmFkaW8gZGlkIG5vdCBzdGFydCB1cCBwcm9wZXJseVxuIik7CiAJCXJhZGlvLT51c2VycyA9IDA7CisJCXVubG9ja19rZXJuZWwoKTsKIAkJcmV0dXJuIC1FSU87CiAJfQogCWRzYnIxMDBfc2V0ZnJlcShyYWRpbywgcmFkaW8tPmN1cmZyZXEpOworCXVubG9ja19rZXJuZWwoKTsKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCB1c2JfZHNicjEwMF9jbG9zZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKLQlzdHJ1Y3QgZHNicjEwMF9kZXZpY2UgKnJhZGlvPXZpZGVvX2dldF9kcnZkYXRhKHZpZGVvX2RldmRhdGEoZmlsZSkpOworCXN0cnVjdCBkc2JyMTAwX2RldmljZSAqcmFkaW8gPSB2aWRlb19kcnZkYXRhKGZpbGUpOwogCiAJaWYgKCFyYWRpbykKIAkJcmV0dXJuIC1FTk9ERVY7CkBAIC00OTQsNyArNTA0LDcgQEAKIAlyYWRpby0+Y3VyZnJlcSA9IEZSRVFfTUlOKkZSRVFfTVVMOwogCXZpZGVvX3NldF9kcnZkYXRhKHJhZGlvLT52aWRlb2RldiwgcmFkaW8pOwogCWlmICh2aWRlb19yZWdpc3Rlcl9kZXZpY2UocmFkaW8tPnZpZGVvZGV2LCBWRkxfVFlQRV9SQURJTywgcmFkaW9fbnIpIDwgMCkgewotCQl3YXJuKCJDb3VsZCBub3QgcmVnaXN0ZXIgdmlkZW8gZGV2aWNlIik7CisJCWRldl93YXJuKCZpbnRmLT5kZXYsICJDb3VsZCBub3QgcmVnaXN0ZXIgdmlkZW8gZGV2aWNlXG4iKTsKIAkJdmlkZW9fZGV2aWNlX3JlbGVhc2UocmFkaW8tPnZpZGVvZGV2KTsKIAkJa2ZyZWUocmFkaW8tPnRyYW5zZmVyX2J1ZmZlcik7CiAJCWtmcmVlKHJhZGlvKTsKQEAgLTUwNyw3ICs1MTcsOCBAQAogc3RhdGljIGludCBfX2luaXQgZHNicjEwMF9pbml0KHZvaWQpCiB7CiAJaW50IHJldHZhbCA9IHVzYl9yZWdpc3RlcigmdXNiX2RzYnIxMDBfZHJpdmVyKTsKLQlpbmZvKERSSVZFUl9WRVJTSU9OICI6IiBEUklWRVJfREVTQyk7CisJcHJpbnRrKEtFUk5fSU5GTyBLQlVJTERfTU9ETkFNRSAiOiAiIERSSVZFUl9WRVJTSU9OICI6IgorCSAgICAgICBEUklWRVJfREVTQyAiXG4iKTsKIAlyZXR1cm4gcmV0dmFsOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLWFpbXNsYWIuYyBiL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tYWltc2xhYi5jCmluZGV4IDFmMDY0ZjQuLjkzMDVlOTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tYWltc2xhYi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tYWltc2xhYi5jCkBAIC01MSw2ICs1MSw3IEBACiAKIHN0cnVjdCBydF9kZXZpY2UKIHsKKwl1bnNpZ25lZCBsb25nIGluX3VzZTsKIAlpbnQgcG9ydDsKIAlpbnQgY3Vydm9sOwogCXVuc2lnbmVkIGxvbmcgY3VyZnJlcTsKQEAgLTI0NSw4ICsyNDYsNyBAQAogc3RhdGljIGludCB2aWRpb2NfZ190dW5lcihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCQkJc3RydWN0IHY0bDJfdHVuZXIgKnYpCiB7Ci0Jc3RydWN0IHZpZGVvX2RldmljZSAqZGV2ID0gdmlkZW9fZGV2ZGF0YShmaWxlKTsKLQlzdHJ1Y3QgcnRfZGV2aWNlICpydCA9IGRldi0+cHJpdjsKKwlzdHJ1Y3QgcnRfZGV2aWNlICpydCA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CiAKIAlpZiAodi0+aW5kZXggPiAwKQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTI3Myw4ICsyNzMsNyBAQAogc3RhdGljIGludCB2aWRpb2Nfc19mcmVxdWVuY3koc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCQkJCXN0cnVjdCB2NGwyX2ZyZXF1ZW5jeSAqZikKIHsKLQlzdHJ1Y3QgdmlkZW9fZGV2aWNlICpkZXYgPSB2aWRlb19kZXZkYXRhKGZpbGUpOwotCXN0cnVjdCBydF9kZXZpY2UgKnJ0ID0gZGV2LT5wcml2OworCXN0cnVjdCBydF9kZXZpY2UgKnJ0ID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKIAogCXJ0LT5jdXJmcmVxID0gZi0+ZnJlcXVlbmN5OwogCXJ0X3NldGZyZXEocnQsIHJ0LT5jdXJmcmVxKTsKQEAgLTI4NCw4ICsyODMsNyBAQAogc3RhdGljIGludCB2aWRpb2NfZ19mcmVxdWVuY3koc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCQkJCXN0cnVjdCB2NGwyX2ZyZXF1ZW5jeSAqZikKIHsKLQlzdHJ1Y3QgdmlkZW9fZGV2aWNlICpkZXYgPSB2aWRlb19kZXZkYXRhKGZpbGUpOwotCXN0cnVjdCBydF9kZXZpY2UgKnJ0ID0gZGV2LT5wcml2OworCXN0cnVjdCBydF9kZXZpY2UgKnJ0ID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKIAogCWYtPnR5cGUgPSBWNEwyX1RVTkVSX1JBRElPOwogCWYtPmZyZXF1ZW5jeSA9IHJ0LT5jdXJmcmVxOwpAQCAtMzEwLDggKzMwOCw3IEBACiBzdGF0aWMgaW50IHZpZGlvY19nX2N0cmwoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCQkJCXN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwpCiB7Ci0Jc3RydWN0IHZpZGVvX2RldmljZSAqZGV2ID0gdmlkZW9fZGV2ZGF0YShmaWxlKTsKLQlzdHJ1Y3QgcnRfZGV2aWNlICpydCA9IGRldi0+cHJpdjsKKwlzdHJ1Y3QgcnRfZGV2aWNlICpydCA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CiAKIAlzd2l0Y2ggKGN0cmwtPmlkKSB7CiAJY2FzZSBWNEwyX0NJRF9BVURJT19NVVRFOgpAQCAtMzI3LDggKzMyNCw3IEBACiBzdGF0aWMgaW50IHZpZGlvY19zX2N0cmwoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCQkJCXN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwpCiB7Ci0Jc3RydWN0IHZpZGVvX2RldmljZSAqZGV2ID0gdmlkZW9fZGV2ZGF0YShmaWxlKTsKLQlzdHJ1Y3QgcnRfZGV2aWNlICpydCA9IGRldi0+cHJpdjsKKwlzdHJ1Y3QgcnRfZGV2aWNlICpydCA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CiAKIAlzd2l0Y2ggKGN0cmwtPmlkKSB7CiAJY2FzZSBWNEwyX0NJRF9BVURJT19NVVRFOgpAQCAtMzc4LDEwICszNzQsMjEgQEAKIAogc3RhdGljIHN0cnVjdCBydF9kZXZpY2UgcnRyYWNrX3VuaXQ7CiAKK3N0YXRpYyBpbnQgcnRyYWNrX2V4Y2x1c2l2ZV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXJldHVybiB0ZXN0X2FuZF9zZXRfYml0KDAsICZydHJhY2tfdW5pdC5pbl91c2UpID8gLUVCVVNZIDogMDsKK30KKworc3RhdGljIGludCBydHJhY2tfZXhjbHVzaXZlX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJY2xlYXJfYml0KDAsICZydHJhY2tfdW5pdC5pbl91c2UpOworCXJldHVybiAwOworfQorCiBzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBydHJhY2tfZm9wcyA9IHsKIAkub3duZXIJCT0gVEhJU19NT0RVTEUsCi0JLm9wZW4gICAgICAgICAgID0gdmlkZW9fZXhjbHVzaXZlX29wZW4sCi0JLnJlbGVhc2UgICAgICAgID0gdmlkZW9fZXhjbHVzaXZlX3JlbGVhc2UsCisJLm9wZW4gICAgICAgICAgID0gcnRyYWNrX2V4Y2x1c2l2ZV9vcGVuLAorCS5yZWxlYXNlICAgICAgICA9IHJ0cmFja19leGNsdXNpdmVfcmVsZWFzZSwKIAkuaW9jdGwJCT0gdmlkZW9faW9jdGwyLAogI2lmZGVmIENPTkZJR19DT01QQVQKIAkuY29tcGF0X2lvY3RsCT0gdjRsX2NvbXBhdF9pb2N0bDMyLApAQCAtNDA4LDYgKzQxNSw3IEBACiAJLm5hbWUJCT0gIlJhZGlvVHJhY2sgcmFkaW8iLAogCS5mb3BzICAgICAgICAgICA9ICZydHJhY2tfZm9wcywKIAkuaW9jdGxfb3BzIAk9ICZydHJhY2tfaW9jdGxfb3BzLAorCS5yZWxlYXNlCT0gdmlkZW9fZGV2aWNlX3JlbGVhc2VfZW1wdHksCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBydHJhY2tfaW5pdCh2b2lkKQpAQCAtNDI0LDcgKzQzMiw3IEBACiAJCXJldHVybiAtRUJVU1k7CiAJfQogCi0JcnRyYWNrX3JhZGlvLnByaXY9JnJ0cmFja191bml0OworCXZpZGVvX3NldF9kcnZkYXRhKCZydHJhY2tfcmFkaW8sICZydHJhY2tfdW5pdCk7CiAKIAlpZiAodmlkZW9fcmVnaXN0ZXJfZGV2aWNlKCZydHJhY2tfcmFkaW8sIFZGTF9UWVBFX1JBRElPLCByYWRpb19ucikgPCAwKSB7CiAJCXJlbGVhc2VfcmVnaW9uKGlvLCAyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tYXp0ZWNoLmMgYi9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLWF6dGVjaC5jCmluZGV4IDYyOGM2ODkuLmQ3ODQ4OTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tYXp0ZWNoLmMKKysrIGIvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby1henRlY2guYwpAQCAtNzAsNiArNzAsNyBAQAogCiBzdHJ1Y3QgYXpfZGV2aWNlCiB7CisJdW5zaWduZWQgbG9uZyBpbl91c2U7CiAJaW50IGN1cnZvbDsKIAl1bnNpZ25lZCBsb25nIGN1cmZyZXE7CiAJaW50IHN0ZXJlbzsKQEAgLTE5NSw4ICsxOTYsNyBAQAogc3RhdGljIGludCB2aWRpb2NfZ190dW5lciAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCQkJc3RydWN0IHY0bDJfdHVuZXIgKnYpCiB7Ci0Jc3RydWN0IHZpZGVvX2RldmljZSAqZGV2ID0gdmlkZW9fZGV2ZGF0YShmaWxlKTsKLQlzdHJ1Y3QgYXpfZGV2aWNlICpheiA9IGRldi0+cHJpdjsKKwlzdHJ1Y3QgYXpfZGV2aWNlICpheiA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CiAKIAlpZiAodi0+aW5kZXggPiAwKQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTI2NCw4ICsyNjQsNyBAQAogc3RhdGljIGludCB2aWRpb2Nfc19mcmVxdWVuY3kgKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQkJCXN0cnVjdCB2NGwyX2ZyZXF1ZW5jeSAqZikKIHsKLQlzdHJ1Y3QgdmlkZW9fZGV2aWNlICpkZXYgPSB2aWRlb19kZXZkYXRhKGZpbGUpOwotCXN0cnVjdCBhel9kZXZpY2UgKmF6ID0gZGV2LT5wcml2OworCXN0cnVjdCBhel9kZXZpY2UgKmF6ID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKIAogCWF6LT5jdXJmcmVxID0gZi0+ZnJlcXVlbmN5OwogCWF6X3NldGZyZXEoYXosIGF6LT5jdXJmcmVxKTsKQEAgLTI3NSw4ICsyNzQsNyBAQAogc3RhdGljIGludCB2aWRpb2NfZ19mcmVxdWVuY3kgKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQkJCXN0cnVjdCB2NGwyX2ZyZXF1ZW5jeSAqZikKIHsKLQlzdHJ1Y3QgdmlkZW9fZGV2aWNlICpkZXYgPSB2aWRlb19kZXZkYXRhKGZpbGUpOwotCXN0cnVjdCBhel9kZXZpY2UgKmF6ID0gZGV2LT5wcml2OworCXN0cnVjdCBhel9kZXZpY2UgKmF6ID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKIAogCWYtPnR5cGUgPSBWNEwyX1RVTkVSX1JBRElPOwogCWYtPmZyZXF1ZW5jeSA9IGF6LT5jdXJmcmVxOwpAQCAtMzAyLDggKzMwMCw3IEBACiBzdGF0aWMgaW50IHZpZGlvY19nX2N0cmwgKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQkJICAgIHN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwpCiB7Ci0Jc3RydWN0IHZpZGVvX2RldmljZSAqZGV2ID0gdmlkZW9fZGV2ZGF0YShmaWxlKTsKLQlzdHJ1Y3QgYXpfZGV2aWNlICpheiA9IGRldi0+cHJpdjsKKwlzdHJ1Y3QgYXpfZGV2aWNlICpheiA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CiAKIAlzd2l0Y2ggKGN0cmwtPmlkKSB7CiAJCWNhc2UgVjRMMl9DSURfQVVESU9fTVVURToKQEAgLTMyMiw4ICszMTksNyBAQAogc3RhdGljIGludCB2aWRpb2Nfc19jdHJsIChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCSAgICBzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsKQogewotCXN0cnVjdCB2aWRlb19kZXZpY2UgKmRldiA9IHZpZGVvX2RldmRhdGEoZmlsZSk7Ci0Jc3RydWN0IGF6X2RldmljZSAqYXogPSBkZXYtPnByaXY7CisJc3RydWN0IGF6X2RldmljZSAqYXogPSB2aWRlb19kcnZkYXRhKGZpbGUpOwogCiAJc3dpdGNoIChjdHJsLT5pZCkgewogCQljYXNlIFY0TDJfQ0lEX0FVRElPX01VVEU6CkBAIC0zNDIsMTAgKzMzOCwyMSBAQAogCiBzdGF0aWMgc3RydWN0IGF6X2RldmljZSBhenRlY2hfdW5pdDsKIAorc3RhdGljIGludCBhenRlY2hfZXhjbHVzaXZlX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJcmV0dXJuIHRlc3RfYW5kX3NldF9iaXQoMCwgJmF6dGVjaF91bml0LmluX3VzZSkgPyAtRUJVU1kgOiAwOworfQorCitzdGF0aWMgaW50IGF6dGVjaF9leGNsdXNpdmVfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwljbGVhcl9iaXQoMCwgJmF6dGVjaF91bml0LmluX3VzZSk7CisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGF6dGVjaF9mb3BzID0gewogCS5vd25lcgkJPSBUSElTX01PRFVMRSwKLQkub3BlbiAgICAgICAgICAgPSB2aWRlb19leGNsdXNpdmVfb3BlbiwKLQkucmVsZWFzZSAgICAgICAgPSB2aWRlb19leGNsdXNpdmVfcmVsZWFzZSwKKwkub3BlbiAgICAgICAgICAgPSBhenRlY2hfZXhjbHVzaXZlX29wZW4sCisJLnJlbGVhc2UgICAgICAgID0gYXp0ZWNoX2V4Y2x1c2l2ZV9yZWxlYXNlLAogCS5pb2N0bAkJPSB2aWRlb19pb2N0bDIsCiAjaWZkZWYgQ09ORklHX0NPTVBBVAogCS5jb21wYXRfaW9jdGwJPSB2NGxfY29tcGF0X2lvY3RsMzIsCkBAIC0zNjksOSArMzc2LDEwIEBACiB9OwogCiBzdGF0aWMgc3RydWN0IHZpZGVvX2RldmljZSBhenRlY2hfcmFkaW8gPSB7Ci0JLm5hbWUJCSAgICA9ICJBenRlY2ggcmFkaW8iLAotCS5mb3BzICAgICAgICAgICAgICAgPSAmYXp0ZWNoX2ZvcHMsCi0JLmlvY3RsX29wcyAJICAgID0gJmF6dGVjaF9pb2N0bF9vcHMsCisJLm5hbWUJCT0gIkF6dGVjaCByYWRpbyIsCisJLmZvcHMgICAgICAgICAgID0gJmF6dGVjaF9mb3BzLAorCS5pb2N0bF9vcHMgCT0gJmF6dGVjaF9pb2N0bF9vcHMsCisJLnJlbGVhc2UJPSB2aWRlb19kZXZpY2VfcmVsZWFzZV9lbXB0eSwKIH07CiAKIG1vZHVsZV9wYXJhbV9uYW1lZChkZWJ1ZyxhenRlY2hfcmFkaW8uZGVidWcsIGludCwgMDY0NCk7CkBAIC0zOTIsNyArNDAwLDcgQEAKIAl9CiAKIAltdXRleF9pbml0KCZsb2NrKTsKLQlhenRlY2hfcmFkaW8ucHJpdj0mYXp0ZWNoX3VuaXQ7CisJdmlkZW9fc2V0X2RydmRhdGEoJmF6dGVjaF9yYWRpbywgJmF6dGVjaF91bml0KTsKIAogCWlmICh2aWRlb19yZWdpc3Rlcl9kZXZpY2UoJmF6dGVjaF9yYWRpbywgVkZMX1RZUEVfUkFESU8sIHJhZGlvX25yKSA8IDApIHsKIAkJcmVsZWFzZV9yZWdpb24oaW8sMik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLWNhZGV0LmMgYi9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLWNhZGV0LmMKaW5kZXggMDRjMzY5OC4uMDQ5MGExZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby1jYWRldC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tY2FkZXQuYwpAQCAtNTg5LDYgKzU4OSw3IEBACiAJLm5hbWUJCT0gIkNhZGV0IHJhZGlvIiwKIAkuZm9wcyAgICAgICAgICAgPSAmY2FkZXRfZm9wcywKIAkuaW9jdGxfb3BzIAk9ICZjYWRldF9pb2N0bF9vcHMsCisJLnJlbGVhc2UJPSB2aWRlb19kZXZpY2VfcmVsZWFzZV9lbXB0eSwKIH07CiAKICNpZmRlZiBDT05GSUdfUE5QCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLWdlbXRlay1wY2kuYyBiL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tZ2VtdGVrLXBjaS5jCmluZGV4IDVjZDdmMDMuLmUxNWJlZTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tZ2VtdGVrLXBjaS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tZ2VtdGVrLXBjaS5jCkBAIC0xMDAsOSArMTAwLDggQEAKIAl1OCAgbXV0ZTsKIH07CiAKLXN0YXRpYyBjb25zdCBjaGFyIHJjc2lkW10gPSAiJElkOiByYWRpby1nZW10ZWstcGNpLmMsdiAxLjEgMjAwMS8wNy8yMyAwODowODoxNiB0ZWQgRXhwIHRlZCAkIjsKLQogc3RhdGljIGludCBucl9yYWRpbyA9IC0xOworc3RhdGljIHVuc2lnbmVkIGxvbmcgaW5fdXNlOwogCiBzdGF0aWMgaW5saW5lIHU4IGdlbXRla19wY2lfb3V0KCB1MTYgdmFsdWUsIHUzMiBwb3J0ICkKIHsKQEAgLTIwNSw4ICsyMDQsNyBAQAogc3RhdGljIGludCB2aWRpb2NfZ190dW5lcihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCQkJc3RydWN0IHY0bDJfdHVuZXIgKnYpCiB7Ci0Jc3RydWN0IHZpZGVvX2RldmljZSAqZGV2ID0gdmlkZW9fZGV2ZGF0YShmaWxlKTsKLQlzdHJ1Y3QgZ2VtdGVrX3BjaV9jYXJkICpjYXJkID0gZGV2LT5wcml2OworCXN0cnVjdCBnZW10ZWtfcGNpX2NhcmQgKmNhcmQgPSB2aWRlb19kcnZkYXRhKGZpbGUpOwogCiAJaWYgKHYtPmluZGV4ID4gMCkKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC0yMzMsOCArMjMxLDcgQEAKIHN0YXRpYyBpbnQgdmlkaW9jX3NfZnJlcXVlbmN5KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQkJCQlzdHJ1Y3QgdjRsMl9mcmVxdWVuY3kgKmYpCiB7Ci0Jc3RydWN0IHZpZGVvX2RldmljZSAqZGV2ID0gdmlkZW9fZGV2ZGF0YShmaWxlKTsKLQlzdHJ1Y3QgZ2VtdGVrX3BjaV9jYXJkICpjYXJkID0gZGV2LT5wcml2OworCXN0cnVjdCBnZW10ZWtfcGNpX2NhcmQgKmNhcmQgPSB2aWRlb19kcnZkYXRhKGZpbGUpOwogCiAJaWYgKCAoZi0+ZnJlcXVlbmN5IDwgR0VNVEVLX1BDSV9SQU5HRV9MT1cpIHx8CiAJCQkoZi0+ZnJlcXVlbmN5ID4gR0VNVEVLX1BDSV9SQU5HRV9ISUdIKSApCkBAIC0yNDgsOCArMjQ1LDcgQEAKIHN0YXRpYyBpbnQgdmlkaW9jX2dfZnJlcXVlbmN5KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQkJCQlzdHJ1Y3QgdjRsMl9mcmVxdWVuY3kgKmYpCiB7Ci0Jc3RydWN0IHZpZGVvX2RldmljZSAqZGV2ID0gdmlkZW9fZGV2ZGF0YShmaWxlKTsKLQlzdHJ1Y3QgZ2VtdGVrX3BjaV9jYXJkICpjYXJkID0gZGV2LT5wcml2OworCXN0cnVjdCBnZW10ZWtfcGNpX2NhcmQgKmNhcmQgPSB2aWRlb19kcnZkYXRhKGZpbGUpOwogCiAJZi0+dHlwZSA9IFY0TDJfVFVORVJfUkFESU87CiAJZi0+ZnJlcXVlbmN5ID0gY2FyZC0+Y3VycmVudF9mcmVxdWVuY3k7CkBAIC0yNzMsOCArMjY5LDcgQEAKIHN0YXRpYyBpbnQgdmlkaW9jX2dfY3RybChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCQkJc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCkKIHsKLQlzdHJ1Y3QgdmlkZW9fZGV2aWNlICpkZXYgPSB2aWRlb19kZXZkYXRhKGZpbGUpOwotCXN0cnVjdCBnZW10ZWtfcGNpX2NhcmQgKmNhcmQgPSBkZXYtPnByaXY7CisJc3RydWN0IGdlbXRla19wY2lfY2FyZCAqY2FyZCA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CiAKIAlzd2l0Y2ggKGN0cmwtPmlkKSB7CiAJY2FzZSBWNEwyX0NJRF9BVURJT19NVVRFOgpAQCAtMjkzLDggKzI4OCw3IEBACiBzdGF0aWMgaW50IHZpZGlvY19zX2N0cmwoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCQkJCXN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwpCiB7Ci0Jc3RydWN0IHZpZGVvX2RldmljZSAqZGV2ID0gdmlkZW9fZGV2ZGF0YShmaWxlKTsKLQlzdHJ1Y3QgZ2VtdGVrX3BjaV9jYXJkICpjYXJkID0gZGV2LT5wcml2OworCXN0cnVjdCBnZW10ZWtfcGNpX2NhcmQgKmNhcmQgPSB2aWRlb19kcnZkYXRhKGZpbGUpOwogCiAJc3dpdGNoIChjdHJsLT5pZCkgewogCWNhc2UgVjRMMl9DSURfQVVESU9fTVVURToKQEAgLTM2NCwxMCArMzU4LDIxIEBACiAKIHN0YXRpYyBpbnQgbXggPSAxOwogCitzdGF0aWMgaW50IGdlbXRla19wY2lfZXhjbHVzaXZlX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJcmV0dXJuIHRlc3RfYW5kX3NldF9iaXQoMCwgJmluX3VzZSkgPyAtRUJVU1kgOiAwOworfQorCitzdGF0aWMgaW50IGdlbXRla19wY2lfZXhjbHVzaXZlX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJY2xlYXJfYml0KDAsICZpbl91c2UpOworCXJldHVybiAwOworfQorCiBzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBnZW10ZWtfcGNpX2ZvcHMgPSB7CiAJLm93bmVyCQk9IFRISVNfTU9EVUxFLAotCS5vcGVuICAgICAgICAgICA9IHZpZGVvX2V4Y2x1c2l2ZV9vcGVuLAotCS5yZWxlYXNlICAgICAgICA9IHZpZGVvX2V4Y2x1c2l2ZV9yZWxlYXNlLAorCS5vcGVuICAgICAgICAgICA9IGdlbXRla19wY2lfZXhjbHVzaXZlX29wZW4sCisJLnJlbGVhc2UgICAgICAgID0gZ2VtdGVrX3BjaV9leGNsdXNpdmVfcmVsZWFzZSwKIAkuaW9jdGwJCT0gdmlkZW9faW9jdGwyLAogI2lmZGVmIENPTkZJR19DT01QQVQKIAkuY29tcGF0X2lvY3RsCT0gdjRsX2NvbXBhdF9pb2N0bDMyLApAQCAtMzkxLDkgKzM5NiwxMCBAQAogfTsKIAogc3RhdGljIHN0cnVjdCB2aWRlb19kZXZpY2UgdmRldl90ZW1wbGF0ZSA9IHsKLQkubmFtZSAgICAgICAgICA9ICJHZW10ZWsgUENJIFJhZGlvIiwKLQkuZm9wcyAgICAgICAgICA9ICZnZW10ZWtfcGNpX2ZvcHMsCi0JLmlvY3RsX29wcyAgICAgPSAmZ2VtdGVrX3BjaV9pb2N0bF9vcHMsCisJLm5hbWUgICAgICAgICAgCT0gIkdlbXRlayBQQ0kgUmFkaW8iLAorCS5mb3BzICAgICAgICAgIAk9ICZnZW10ZWtfcGNpX2ZvcHMsCisJLmlvY3RsX29wcyAJPSAmZ2VtdGVrX3BjaV9pb2N0bF9vcHMsCisJLnJlbGVhc2UJPSB2aWRlb19kZXZpY2VfcmVsZWFzZV9lbXB0eSwKIH07CiAKIHN0YXRpYyBpbnQgX19kZXZpbml0IGdlbXRla19wY2lfcHJvYmUoIHN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqcGNpX2lkICkKQEAgLTQzMSw3ICs0MzcsNyBAQAogCX0KIAogCWNhcmQtPnZpZGVvZGV2ID0gZGV2cmFkaW87Ci0JZGV2cmFkaW8tPnByaXYgPSBjYXJkOworCXZpZGVvX3NldF9kcnZkYXRhKGRldnJhZGlvLCBjYXJkKTsKIAlnZW10ZWtfcGNpX211dGUoIGNhcmQgKTsKIAogCXByaW50ayggS0VSTl9JTkZPICJHZW10ZWsgUENJIFJhZGlvIChyZXYuICVkKSBmb3VuZCBhdCAweCUwNHgtMHglMDR4LlxuIiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tZ2VtdGVrLmMgYi9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLWdlbXRlay5jCmluZGV4IDBhMGY5NTYuLmQxMzFhNWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tZ2VtdGVrLmMKKysrIGIvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby1nZW10ZWsuYwpAQCAtNTcsNiArNTcsNyBAQAogc3RhdGljIGludCBrZWVwbXV0ZWQJPSAxOwogc3RhdGljIGludCBpbml0bXV0ZQk9IDE7CiBzdGF0aWMgaW50IHJhZGlvX25yCT0gLTE7CitzdGF0aWMgdW5zaWduZWQgbG9uZyBpbl91c2U7CiAKIG1vZHVsZV9wYXJhbShpbywgaW50LCAwNDQ0KTsKIE1PRFVMRV9QQVJNX0RFU0MoaW8sICJGb3JjZSBJL08gcG9ydCBmb3IgdGhlIEdlbVRlayBSYWRpbyBjYXJkIGlmIGF1dG9tYXRpYyAiCkBAIC0zOTMsMTAgKzM5NCwyMSBAQAogCX0KIH07CiAKK3N0YXRpYyBpbnQgZ2VtdGVrX2V4Y2x1c2l2ZV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXJldHVybiB0ZXN0X2FuZF9zZXRfYml0KDAsICZpbl91c2UpID8gLUVCVVNZIDogMDsKK30KKworc3RhdGljIGludCBnZW10ZWtfZXhjbHVzaXZlX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJY2xlYXJfYml0KDAsICZpbl91c2UpOworCXJldHVybiAwOworfQorCiBzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBnZW10ZWtfZm9wcyA9IHsKIAkub3duZXIJCT0gVEhJU19NT0RVTEUsCi0JLm9wZW4JCT0gdmlkZW9fZXhjbHVzaXZlX29wZW4sCi0JLnJlbGVhc2UJPSB2aWRlb19leGNsdXNpdmVfcmVsZWFzZSwKKwkub3BlbgkJPSBnZW10ZWtfZXhjbHVzaXZlX29wZW4sCisJLnJlbGVhc2UJPSBnZW10ZWtfZXhjbHVzaXZlX3JlbGVhc2UsCiAJLmlvY3RsCQk9IHZpZGVvX2lvY3RsMiwKICNpZmRlZiBDT05GSUdfQ09NUEFUCiAJLmNvbXBhdF9pb2N0bAk9IHY0bF9jb21wYXRfaW9jdGwzMiwKQEAgLTQ0Nyw4ICs0NTksNyBAQAogc3RhdGljIGludCB2aWRpb2Nfc19mcmVxdWVuY3koc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCQkgICAgICBzdHJ1Y3QgdjRsMl9mcmVxdWVuY3kgKmYpCiB7Ci0Jc3RydWN0IHZpZGVvX2RldmljZSAqZGV2ID0gdmlkZW9fZGV2ZGF0YShmaWxlKTsKLQlzdHJ1Y3QgZ2VtdGVrX2RldmljZSAqcnQgPSBkZXYtPnByaXY7CisJc3RydWN0IGdlbXRla19kZXZpY2UgKnJ0ID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKIAogCWdlbXRla19zZXRmcmVxKHJ0LCBmLT5mcmVxdWVuY3kpOwogCkBAIC00NTgsOCArNDY5LDcgQEAKIHN0YXRpYyBpbnQgdmlkaW9jX2dfZnJlcXVlbmN5KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQkJICAgICAgc3RydWN0IHY0bDJfZnJlcXVlbmN5ICpmKQogewotCXN0cnVjdCB2aWRlb19kZXZpY2UgKmRldiA9IHZpZGVvX2RldmRhdGEoZmlsZSk7Ci0Jc3RydWN0IGdlbXRla19kZXZpY2UgKnJ0ID0gZGV2LT5wcml2OworCXN0cnVjdCBnZW10ZWtfZGV2aWNlICpydCA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CiAKIAlmLT50eXBlID0gVjRMMl9UVU5FUl9SQURJTzsKIAlmLT5mcmVxdWVuY3kgPSBydC0+bGFzdGZyZXE7CkBAIC00ODMsOCArNDkzLDcgQEAKIHN0YXRpYyBpbnQgdmlkaW9jX2dfY3RybChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCSBzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsKQogewotCXN0cnVjdCB2aWRlb19kZXZpY2UgKmRldiA9IHZpZGVvX2RldmRhdGEoZmlsZSk7Ci0Jc3RydWN0IGdlbXRla19kZXZpY2UgKnJ0ID0gZGV2LT5wcml2OworCXN0cnVjdCBnZW10ZWtfZGV2aWNlICpydCA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CiAKIAlzd2l0Y2ggKGN0cmwtPmlkKSB7CiAJY2FzZSBWNEwyX0NJRF9BVURJT19NVVRFOgpAQCAtNTAzLDggKzUxMiw3IEBACiBzdGF0aWMgaW50IHZpZGlvY19zX2N0cmwoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCQkgc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCkKIHsKLQlzdHJ1Y3QgdmlkZW9fZGV2aWNlICpkZXYgPSB2aWRlb19kZXZkYXRhKGZpbGUpOwotCXN0cnVjdCBnZW10ZWtfZGV2aWNlICpydCA9IGRldi0+cHJpdjsKKwlzdHJ1Y3QgZ2VtdGVrX2RldmljZSAqcnQgPSB2aWRlb19kcnZkYXRhKGZpbGUpOwogCiAJc3dpdGNoIChjdHJsLT5pZCkgewogCWNhc2UgVjRMMl9DSURfQVVESU9fTVVURToKQEAgLTU2OSw5ICs1NzcsMTAgQEAKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgdmlkZW9fZGV2aWNlIGdlbXRla19yYWRpbyA9IHsKLQkubmFtZQkJCT0gIkdlbVRlayBSYWRpbyBjYXJkIiwKLQkuZm9wcwkJCT0gJmdlbXRla19mb3BzLAotCS5pb2N0bF9vcHMgCQk9ICZnZW10ZWtfaW9jdGxfb3BzLAorCS5uYW1lCQk9ICJHZW1UZWsgUmFkaW8gY2FyZCIsCisJLmZvcHMJCT0gJmdlbXRla19mb3BzLAorCS5pb2N0bF9vcHMgCT0gJmdlbXRla19pb2N0bF9vcHMsCisJLnJlbGVhc2UJPSB2aWRlb19kZXZpY2VfcmVsZWFzZV9lbXB0eSwKIH07CiAKIC8qCkBAIC02MTAsNyArNjE5LDcgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JZ2VtdGVrX3JhZGlvLnByaXYgPSAmZ2VtdGVrX3VuaXQ7CisJdmlkZW9fc2V0X2RydmRhdGEoJmdlbXRla19yYWRpbywgJmdlbXRla191bml0KTsKIAogCWlmICh2aWRlb19yZWdpc3Rlcl9kZXZpY2UoJmdlbXRla19yYWRpbywgVkZMX1RZUEVfUkFESU8sIHJhZGlvX25yKSA8IDApIHsKIAkJcmVsZWFzZV9yZWdpb24oaW8sIDEpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby1tYWVzdHJvLmMgYi9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLW1hZXN0cm8uYwppbmRleCA5ZWYwYTc2Li40YmY0ZDAwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLW1hZXN0cm8uYworKysgYi9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLW1hZXN0cm8uYwpAQCAtNzUsNyArNzUsMjEgQEAKIHN0YXRpYyBpbnQgcmFkaW9fbnIgPSAtMTsKIG1vZHVsZV9wYXJhbShyYWRpb19uciwgaW50LCAwKTsKIAorc3RhdGljIHVuc2lnbmVkIGxvbmcgaW5fdXNlOworCiBzdGF0aWMgaW50IG1hZXN0cm9fcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpOworCitzdGF0aWMgaW50IG1hZXN0cm9fZXhjbHVzaXZlX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJcmV0dXJuIHRlc3RfYW5kX3NldF9iaXQoMCwgJmluX3VzZSkgPyAtRUJVU1kgOiAwOworfQorCitzdGF0aWMgaW50IG1hZXN0cm9fZXhjbHVzaXZlX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJY2xlYXJfYml0KDAsICZpbl91c2UpOworCXJldHVybiAwOworfQorCiBzdGF0aWMgdm9pZCBtYWVzdHJvX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldik7CiAKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBtYWVzdHJvX3JfcGNpX3RibFtdID0gewpAQCAtOTgsOCArMTEyLDggQEAKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbWFlc3Ryb19mb3BzID0gewogCS5vd25lcgkJPSBUSElTX01PRFVMRSwKLQkub3BlbiAgICAgICAgICAgPSB2aWRlb19leGNsdXNpdmVfb3BlbiwKLQkucmVsZWFzZSAgICAgICAgPSB2aWRlb19leGNsdXNpdmVfcmVsZWFzZSwKKwkub3BlbiAgICAgICAgICAgPSBtYWVzdHJvX2V4Y2x1c2l2ZV9vcGVuLAorCS5yZWxlYXNlICAgICAgICA9IG1hZXN0cm9fZXhjbHVzaXZlX3JlbGVhc2UsCiAJLmlvY3RsCQk9IHZpZGVvX2lvY3RsMiwKICNpZmRlZiBDT05GSUdfQ09NUEFUCiAJLmNvbXBhdF9pb2N0bAk9IHY0bF9jb21wYXRfaW9jdGwzMiwKQEAgLTE5Niw4ICsyMTAsNyBAQAogc3RhdGljIGludCB2aWRpb2NfZ190dW5lcihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCQkJc3RydWN0IHY0bDJfdHVuZXIgKnYpCiB7Ci0Jc3RydWN0IHZpZGVvX2RldmljZSAqZGV2ID0gdmlkZW9fZGV2ZGF0YShmaWxlKTsKLQlzdHJ1Y3QgcmFkaW9fZGV2aWNlICpjYXJkID0gdmlkZW9fZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgcmFkaW9fZGV2aWNlICpjYXJkID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKIAogCWlmICh2LT5pbmRleCA+IDApCiAJCXJldHVybiAtRUlOVkFMOwpAQCAtMjI5LDggKzI0Miw3IEBACiBzdGF0aWMgaW50IHZpZGlvY19zX2ZyZXF1ZW5jeShzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCQkJc3RydWN0IHY0bDJfZnJlcXVlbmN5ICpmKQogewotCXN0cnVjdCB2aWRlb19kZXZpY2UgKmRldiA9IHZpZGVvX2RldmRhdGEoZmlsZSk7Ci0Jc3RydWN0IHJhZGlvX2RldmljZSAqY2FyZCA9IHZpZGVvX2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IHJhZGlvX2RldmljZSAqY2FyZCA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CiAKIAlpZiAoZi0+ZnJlcXVlbmN5IDwgRlJFUV9MTyB8fCBmLT5mcmVxdWVuY3kgPiBGUkVRX0hJKQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTI0MSw4ICsyNTMsNyBAQAogc3RhdGljIGludCB2aWRpb2NfZ19mcmVxdWVuY3koc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCQkJCXN0cnVjdCB2NGwyX2ZyZXF1ZW5jeSAqZikKIHsKLQlzdHJ1Y3QgdmlkZW9fZGV2aWNlICpkZXYgPSB2aWRlb19kZXZkYXRhKGZpbGUpOwotCXN0cnVjdCByYWRpb19kZXZpY2UgKmNhcmQgPSB2aWRlb19nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCByYWRpb19kZXZpY2UgKmNhcmQgPSB2aWRlb19kcnZkYXRhKGZpbGUpOwogCiAJZi0+dHlwZSA9IFY0TDJfVFVORVJfUkFESU87CiAJZi0+ZnJlcXVlbmN5ID0gQklUUzJGUkVRKHJhZGlvX2JpdHNfZ2V0KGNhcmQpKTsKQEAgLTI2Nyw4ICsyNzgsNyBAQAogc3RhdGljIGludCB2aWRpb2NfZ19jdHJsKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQkJCQlzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsKQogewotCXN0cnVjdCB2aWRlb19kZXZpY2UgKmRldiA9IHZpZGVvX2RldmRhdGEoZmlsZSk7Ci0Jc3RydWN0IHJhZGlvX2RldmljZSAqY2FyZCA9IHZpZGVvX2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IHJhZGlvX2RldmljZSAqY2FyZCA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CiAKIAlzd2l0Y2ggKGN0cmwtPmlkKSB7CiAJY2FzZSBWNEwyX0NJRF9BVURJT19NVVRFOgpAQCAtMjgxLDggKzI5MSw3IEBACiBzdGF0aWMgaW50IHZpZGlvY19zX2N0cmwoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCQkJCXN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwpCiB7Ci0Jc3RydWN0IHZpZGVvX2RldmljZSAqZGV2ID0gdmlkZW9fZGV2ZGF0YShmaWxlKTsKLQlzdHJ1Y3QgcmFkaW9fZGV2aWNlICpjYXJkID0gdmlkZW9fZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgcmFkaW9fZGV2aWNlICpjYXJkID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKIAlyZWdpc3RlciB1MTYgaW8gPSBjYXJkLT5pbzsKIAlyZWdpc3RlciB1MTYgb21hc2sgPSBpbncoaW8gKyBJT19NQVNLKTsKIApAQCAtMzc0LDYgKzM4Myw3IEBACiAJLm5hbWUgICAgICAgICAgID0gIk1hZXN0cm8gcmFkaW8iLAogCS5mb3BzICAgICAgICAgICA9ICZtYWVzdHJvX2ZvcHMsCiAJLmlvY3RsX29wcyAJPSAmbWFlc3Ryb19pb2N0bF9vcHMsCisJLnJlbGVhc2UJPSB2aWRlb19kZXZpY2VfcmVsZWFzZSwKIH07CiAKIHN0YXRpYyBpbnQgX19kZXZpbml0IG1hZXN0cm9fcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLW1heGlyYWRpby5jIGIvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby1tYXhpcmFkaW8uYwppbmRleCAwY2M2ZmNiLi5jNzc3YTE3IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLW1heGlyYWRpby5jCisrKyBiL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tbWF4aXJhZGlvLmMKQEAgLTg1LDYgKzg1LDcgQEAKIHN0YXRpYyBpbnQgcmFkaW9fbnIgPSAtMTsKIG1vZHVsZV9wYXJhbShyYWRpb19uciwgaW50LCAwKTsKIAorc3RhdGljIHVuc2lnbmVkIGxvbmcgaW5fdXNlOwogCiAjZGVmaW5lIEZSRVFfTE8JCSA1MCoxNjAwMAogI2RlZmluZSBGUkVRX0hJCQkxNTAqMTYwMDAKQEAgLTk5LDEwICsxMDAsMjEgQEAKICNkZWZpbmUgQklUUzJGUkVRKHgpCSgoeCkgKiBGUkVRX1NURVAgLSBGUkVRX0lGKQogCiAKK3N0YXRpYyBpbnQgbWF4aXJhZGlvX2V4Y2x1c2l2ZV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXJldHVybiB0ZXN0X2FuZF9zZXRfYml0KDAsICZpbl91c2UpID8gLUVCVVNZIDogMDsKK30KKworc3RhdGljIGludCBtYXhpcmFkaW9fZXhjbHVzaXZlX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJY2xlYXJfYml0KDAsICZpbl91c2UpOworCXJldHVybiAwOworfQorCiBzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBtYXhpcmFkaW9fZm9wcyA9IHsKIAkub3duZXIJCT0gVEhJU19NT0RVTEUsCi0JLm9wZW4gICAgICAgICAgID0gdmlkZW9fZXhjbHVzaXZlX29wZW4sCi0JLnJlbGVhc2UgICAgICAgID0gdmlkZW9fZXhjbHVzaXZlX3JlbGVhc2UsCisJLm9wZW4gICAgICAgICAgID0gbWF4aXJhZGlvX2V4Y2x1c2l2ZV9vcGVuLAorCS5yZWxlYXNlICAgICAgICA9IG1heGlyYWRpb19leGNsdXNpdmVfcmVsZWFzZSwKIAkuaW9jdGwgICAgICAgICAgPSB2aWRlb19pb2N0bDIsCiAjaWZkZWYgQ09ORklHX0NPTVBBVAogCS5jb21wYXRfaW9jdGwJPSB2NGxfY29tcGF0X2lvY3RsMzIsCkBAIC0yMTksOCArMjMxLDcgQEAKIHN0YXRpYyBpbnQgdmlkaW9jX2dfdHVuZXIgKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQkJICAgc3RydWN0IHY0bDJfdHVuZXIgKnYpCiB7Ci0Jc3RydWN0IHZpZGVvX2RldmljZSAqZGV2ID0gdmlkZW9fZGV2ZGF0YShmaWxlKTsKLQlzdHJ1Y3QgcmFkaW9fZGV2aWNlICpjYXJkPWRldi0+cHJpdjsKKwlzdHJ1Y3QgcmFkaW9fZGV2aWNlICpjYXJkID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKIAogCWlmICh2LT5pbmRleCA+IDApCiAJCXJldHVybiAtRUlOVkFMOwpAQCAtMjkwLDggKzMwMSw3IEBACiBzdGF0aWMgaW50IHZpZGlvY19zX2ZyZXF1ZW5jeSAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCQkgICAgICAgc3RydWN0IHY0bDJfZnJlcXVlbmN5ICpmKQogewotCXN0cnVjdCB2aWRlb19kZXZpY2UgKmRldiA9IHZpZGVvX2RldmRhdGEoZmlsZSk7Ci0Jc3RydWN0IHJhZGlvX2RldmljZSAqY2FyZD1kZXYtPnByaXY7CisJc3RydWN0IHJhZGlvX2RldmljZSAqY2FyZCA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CiAKIAlpZiAoZi0+ZnJlcXVlbmN5IDwgRlJFUV9MTyB8fCBmLT5mcmVxdWVuY3kgPiBGUkVRX0hJKSB7CiAJCWRwcmludGsoMSwgInJhZGlvIGZyZXEgKCVkLiUwMmQgTUh6KSBvdXQgb2YgcmFuZ2UgKCVkLSVkKVxuIiwKQEAgLTMxMiw4ICszMjIsNyBAQAogc3RhdGljIGludCB2aWRpb2NfZ19mcmVxdWVuY3kgKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQkJICAgICAgIHN0cnVjdCB2NGwyX2ZyZXF1ZW5jeSAqZikKIHsKLQlzdHJ1Y3QgdmlkZW9fZGV2aWNlICpkZXYgPSB2aWRlb19kZXZkYXRhKGZpbGUpOwotCXN0cnVjdCByYWRpb19kZXZpY2UgKmNhcmQ9ZGV2LT5wcml2OworCXN0cnVjdCByYWRpb19kZXZpY2UgKmNhcmQgPSB2aWRlb19kcnZkYXRhKGZpbGUpOwogCiAJZi0+dHlwZSA9IFY0TDJfVFVORVJfUkFESU87CiAJZi0+ZnJlcXVlbmN5ID0gY2FyZC0+ZnJlcTsKQEAgLTM0Myw4ICszNTIsNyBAQAogc3RhdGljIGludCB2aWRpb2NfZ19jdHJsIChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCSAgICBzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsKQogewotCXN0cnVjdCB2aWRlb19kZXZpY2UgKmRldiA9IHZpZGVvX2RldmRhdGEoZmlsZSk7Ci0Jc3RydWN0IHJhZGlvX2RldmljZSAqY2FyZD1kZXYtPnByaXY7CisJc3RydWN0IHJhZGlvX2RldmljZSAqY2FyZCA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CiAKIAlzd2l0Y2ggKGN0cmwtPmlkKSB7CiAJCWNhc2UgVjRMMl9DSURfQVVESU9fTVVURToKQEAgLTM1OCw4ICszNjYsNyBAQAogc3RhdGljIGludCB2aWRpb2Nfc19jdHJsIChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCSAgc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCkKIHsKLQlzdHJ1Y3QgdmlkZW9fZGV2aWNlICpkZXYgPSB2aWRlb19kZXZkYXRhKGZpbGUpOwotCXN0cnVjdCByYWRpb19kZXZpY2UgKmNhcmQ9ZGV2LT5wcml2OworCXN0cnVjdCByYWRpb19kZXZpY2UgKmNhcmQgPSB2aWRlb19kcnZkYXRhKGZpbGUpOwogCiAJc3dpdGNoIChjdHJsLT5pZCkgewogCQljYXNlIFY0TDJfQ0lEX0FVRElPX01VVEU6CkBAIC0zOTAsOSArMzk3LDEwIEBACiB9OwogCiBzdGF0aWMgc3RydWN0IHZpZGVvX2RldmljZSBtYXhpcmFkaW9fcmFkaW8gPSB7Ci0JLm5hbWUJCSAgICA9ICJNYXhpIFJhZGlvIEZNMjAwMCByYWRpbyIsCi0JLmZvcHMgICAgICAgICAgICAgICA9ICZtYXhpcmFkaW9fZm9wcywKLQkuaW9jdGxfb3BzIAkgICAgPSAmbWF4aXJhZGlvX2lvY3RsX29wcywKKwkubmFtZQkJPSAiTWF4aSBSYWRpbyBGTTIwMDAgcmFkaW8iLAorCS5mb3BzICAgICAgICAgICA9ICZtYXhpcmFkaW9fZm9wcywKKwkuaW9jdGxfb3BzIAk9ICZtYXhpcmFkaW9faW9jdGxfb3BzLAorCS5yZWxlYXNlCT0gdmlkZW9fZGV2aWNlX3JlbGVhc2VfZW1wdHksCiB9OwogCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBtYXhpcmFkaW9faW5pdF9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpCkBAIC00MDgsNyArNDE2LDcgQEAKIAogCXJhZGlvX3VuaXQuaW8gPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgMCk7CiAJbXV0ZXhfaW5pdCgmcmFkaW9fdW5pdC5sb2NrKTsKLQltYXhpcmFkaW9fcmFkaW8ucHJpdiA9ICZyYWRpb191bml0OworCXZpZGVvX3NldF9kcnZkYXRhKCZtYXhpcmFkaW9fcmFkaW8sICZyYWRpb191bml0KTsKIAogCWlmICh2aWRlb19yZWdpc3Rlcl9kZXZpY2UoJm1heGlyYWRpb19yYWRpbywgVkZMX1RZUEVfUkFESU8sIHJhZGlvX25yKSA8IDApIHsKIAkJcHJpbnRrKCJyYWRpby1tYXhpcmFkaW86IGNhbid0IHJlZ2lzdGVyIGRldmljZSEiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tbXI4MDAuYyBiL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tbXI4MDAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMzM3MTdjCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby1tcjgwMC5jCkBAIC0wLDAgKzEsNjI4IEBACisvKgorICogQSBkcml2ZXIgZm9yIHRoZSBBdmVyTWVkaWEgTVIgODAwIFVTQiBGTSByYWRpby4gVGhpcyBkZXZpY2UgcGx1Z3MKKyAqIGludG8gYm90aCB0aGUgVVNCIGFuZCBhbiBhbmFsb2cgYXVkaW8gaW5wdXQsIHNvIHRoaXMgdGhpbmcKKyAqIG9ubHkgZGVhbHMgd2l0aCBpbml0aWFsaXphdGlvbiBhbmQgZnJlcXVlbmN5IHNldHRpbmcsIHRoZQorICogYXVkaW8gZGF0YSBoYXMgdG8gYmUgaGFuZGxlZCBieSBhIHNvdW5kIGRyaXZlci4KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggQWxleGV5IEtsaW1vdiA8a2xpbW92LmxpbnV4QGdtYWlsLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQorICovCisKKy8qCisgKiBCaWcgdGhhbmtzIHRvIGF1dGhvcnMgb2YgZHNicjEwMC5jIGFuZCByYWRpby1zaTQ3MHguYworICoKKyAqIFdoZW4gd29yayB3YXMgbG9va2VkIHByZXR0eSBnb29kLCBpIGRpc2NvdmVyIHRoaXM6CisgKiBodHRwOi8vYXYtdXNicmFkaW8uc291cmNlZm9yZ2UubmV0L2luZGV4LnBocAorICogaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0cy9hdi11c2JyYWRpby8KKyAqIExhdGVzdCByZWxlYXNlIG9mIHRoZWlycyBwcm9qZWN0IHdhcyBpbiAyMDA1LgorICogUHJvYmFibHksIHRoaXMgZHJpdmVyIGNvdWxkIGJlIGltcHJvdmVkIHRyb3VnaCB1c2luZyB0aGVpcgorICogYWNoaWV2ZW1lbnRzIChzcGVjaWZpY2F0aW9ucyBnaXZlbikuCisgKiBTbywgd2UgaGF2ZSBzbXRoIHRvIGJlZ2luIHdpdGguCisgKgorICogSGlzdG9yeToKKyAqIFZlcnNpb24gMC4wMToJRmlyc3Qgd29ya2luZyB2ZXJzaW9uLgorICogCQkJSXQncyByZXF1aXJlZCB0byBibGFja2xpc3QgQXZlck1lZGlhIFVTQiBSYWRpbworICogCQkJaW4gdXNiaGlkL2hpZC1xdWlya3MuYworICoKKyAqIE1hbnkgdGhpbmdzIHRvIGRvOgorICogCS0gQ29ycmVjdCBwb3dlciBtYW5hZ21lbnQgb2YgZGV2aWNlIChzdXNwZW5kICYgcmVzdW1lKQorICogCS0gTWFrZSB4ODYgaW5kZXBlbmRhbmNlIChsaXR0bGUtZW5kaWFuIGFuZCBiaWctZW5kaWFuIHN0dWZmKQorICogCS0gQWRkIGNvZGUgZm9yIHNjYW5uaW5nIGFuZCBzbW9vdGggdHVuaW5nCisgKiAJLSBDaGVja2VkIGFuZCBhZGQgc3RlcmVvJm1vbm8gc3R1ZmYKKyAqIAktIEFkZCBjb2RlIGZvciBzZW5zaXRpdml0eSB2YWx1ZQorICogCS0gQ29ycmVjdCBtaXN0YWtlcworICogCS0gSW4gSmFwYW4gYW5vdGhlciBGUkVRX01JTiBhbmQgRlJFUV9NQVgKKyAqLworCisvKiBrZXJuZWwgaW5jbHVkZXMgKi8KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CisjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYyLmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1jb21tb24uaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWlvY3RsLmg+CisjaW5jbHVkZSA8bGludXgvdXNiLmg+CisjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgkvKiBmb3IgS0VSTkVMX1ZFUlNJT04gTUFDUk8gKi8KKworLyogZHJpdmVyIGFuZCBtb2R1bGUgZGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgRFJJVkVSX0FVVEhPUiAiQWxleGV5IEtsaW1vdiA8a2xpbW92LmxpbnV4QGdtYWlsLmNvbT4iCisjZGVmaW5lIERSSVZFUl9ERVNDICJBdmVyTWVkaWEgTVIgODAwIFVTQiBGTSByYWRpbyBkcml2ZXIiCisjZGVmaW5lIERSSVZFUl9WRVJTSU9OICIwLjAxIgorI2RlZmluZSBSQURJT19WRVJTSU9OIEtFUk5FTF9WRVJTSU9OKDAsIDAsIDEpCisKK01PRFVMRV9BVVRIT1IoRFJJVkVSX0FVVEhPUik7CitNT0RVTEVfREVTQ1JJUFRJT04oRFJJVkVSX0RFU0MpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCisjZGVmaW5lIFVTQl9BTVJBRElPX1ZFTkRPUiAweDA3Y2EKKyNkZWZpbmUgVVNCX0FNUkFESU9fUFJPRFVDVCAweGI4MDAKKworLyogUHJvYmFibHkgVVNCX1RJTUVPVVQgc2hvdWxkIGJlIG1vZGlmaWVkIGluIG1vZHVsZSBwYXJhbWV0ZXIgKi8KKyNkZWZpbmUgQlVGRkVSX0xFTkdUSCA4CisjZGVmaW5lIFVTQl9USU1FT1VUIDUwMAorCisvKiBGcmVxdWVuY3kgbGltaXRzIGluIE1IeiAtLSB0aGVzZSBhcmUgRXVyb3BlYW4gdmFsdWVzLiAgRm9yIEphcGFuZXNlCitkZXZpY2VzLCB0aGF0IHdvdWxkIGJlIDc2IGFuZCA5MS4gICovCisjZGVmaW5lIEZSRVFfTUlOICA4Ny41CisjZGVmaW5lIEZSRVFfTUFYIDEwOC4wCisjZGVmaW5lIEZSRVFfTVVMIDE2MDAwCisKKy8qIG1vZHVsZSBwYXJhbWV0ZXIgKi8KK3N0YXRpYyBpbnQgcmFkaW9fbnIgPSAtMTsKK21vZHVsZV9wYXJhbShyYWRpb19uciwgaW50LCAwKTsKK01PRFVMRV9QQVJNX0RFU0MocmFkaW9fbnIsICJSYWRpbyBOciIpOworCitzdGF0aWMgc3RydWN0IHY0bDJfcXVlcnljdHJsIHJhZGlvX3FjdHJsW10gPSB7CisJeworCQkuaWQgICAgICAgICAgICA9IFY0TDJfQ0lEX0FVRElPX01VVEUsCisJCS5uYW1lICAgICAgICAgID0gIk11dGUiLAorCQkubWluaW11bSAgICAgICA9IDAsCisJCS5tYXhpbXVtICAgICAgID0gMSwKKwkJLnN0ZXAJICAgICAgID0gMSwKKwkJLmRlZmF1bHRfdmFsdWUgPSAxLAorCQkudHlwZSAgICAgICAgICA9IFY0TDJfQ1RSTF9UWVBFX0JPT0xFQU4sCisJfSwKKy8qIEhJTlQ6IHRoZSBkaXNhYmxlZCBjb250cm9scyBhcmUgb25seSBoZXJlIHRvIHNhdGlmeSBrcmFkaW8gYW5kIHN1Y2ggYXBwcyAqLworCXsJLmlkCQk9IFY0TDJfQ0lEX0FVRElPX1ZPTFVNRSwKKwkJLmZsYWdzCQk9IFY0TDJfQ1RSTF9GTEFHX0RJU0FCTEVELAorCX0sCisJeworCQkuaWQJCT0gVjRMMl9DSURfQVVESU9fQkFMQU5DRSwKKwkJLmZsYWdzCQk9IFY0TDJfQ1RSTF9GTEFHX0RJU0FCTEVELAorCX0sCisJeworCQkuaWQJCT0gVjRMMl9DSURfQVVESU9fQkFTUywKKwkJLmZsYWdzCQk9IFY0TDJfQ1RSTF9GTEFHX0RJU0FCTEVELAorCX0sCisJeworCQkuaWQJCT0gVjRMMl9DSURfQVVESU9fVFJFQkxFLAorCQkuZmxhZ3MJCT0gVjRMMl9DVFJMX0ZMQUdfRElTQUJMRUQsCisJfSwKKwl7CisJCS5pZAkJPSBWNEwyX0NJRF9BVURJT19MT1VETkVTUywKKwkJLmZsYWdzCQk9IFY0TDJfQ1RSTF9GTEFHX0RJU0FCTEVELAorCX0sCit9OworCitzdGF0aWMgaW50IHVzYl9hbXJhZGlvX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLAorCQkJICAgICBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpOworc3RhdGljIHZvaWQgdXNiX2FtcmFkaW9fZGlzY29ubmVjdChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50Zik7CitzdGF0aWMgaW50IHVzYl9hbXJhZGlvX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpOworc3RhdGljIGludCB1c2JfYW1yYWRpb19jbG9zZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSk7CitzdGF0aWMgaW50IHVzYl9hbXJhZGlvX3N1c3BlbmQoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsCisJCQkJcG1fbWVzc2FnZV90IG1lc3NhZ2UpOworc3RhdGljIGludCB1c2JfYW1yYWRpb19yZXN1bWUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpOworCisvKiBEYXRhIGZvciBvbmUgKHBoeXNpY2FsKSBkZXZpY2UgKi8KK3N0cnVjdCBhbXJhZGlvX2RldmljZSB7CisJLyogcmVmZXJlbmNlIHRvIFVTQiBhbmQgdmlkZW8gZGV2aWNlICovCisJc3RydWN0IHVzYl9kZXZpY2UgKnVzYmRldjsKKwlzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2aWRlb2RldjsKKworCXVuc2lnbmVkIGNoYXIgKmJ1ZmZlcjsKKwlzdHJ1Y3QgbXV0ZXggbG9jazsJLyogYnVmZmVyIGxvY2tpbmcgKi8KKwlpbnQgY3VyZnJlcTsKKwlpbnQgc3RlcmVvOworCWludCB1c2VyczsKKwlpbnQgcmVtb3ZlZDsKKwlpbnQgbXV0ZWQ7Cit9OworCisvKiBVU0IgRGV2aWNlIElEIExpc3QgKi8KK3N0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCB1c2JfYW1yYWRpb19kZXZpY2VfdGFibGVbXSA9IHsKKwl7VVNCX0RFVklDRV9BTkRfSU5URVJGQUNFX0lORk8oVVNCX0FNUkFESU9fVkVORE9SLCBVU0JfQU1SQURJT19QUk9EVUNULAorCQkJCQkJCVVTQl9DTEFTU19ISUQsIDAsIDApIH0sCisJeyB9CQkJCQkJLyogVGVybWluYXRpbmcgZW50cnkgKi8KK307CisKK01PRFVMRV9ERVZJQ0VfVEFCTEUodXNiLCB1c2JfYW1yYWRpb19kZXZpY2VfdGFibGUpOworCisvKiBVU0Igc3Vic3lzdGVtIGludGVyZmFjZSAqLworc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIHVzYl9hbXJhZGlvX2RyaXZlciA9IHsKKwkubmFtZQkJCT0gInJhZGlvLW1yODAwIiwKKwkucHJvYmUJCQk9IHVzYl9hbXJhZGlvX3Byb2JlLAorCS5kaXNjb25uZWN0CQk9IHVzYl9hbXJhZGlvX2Rpc2Nvbm5lY3QsCisJLnN1c3BlbmQJCT0gdXNiX2FtcmFkaW9fc3VzcGVuZCwKKwkucmVzdW1lCQkJPSB1c2JfYW1yYWRpb19yZXN1bWUsCisJLnJlc2V0X3Jlc3VtZQkJPSB1c2JfYW1yYWRpb19yZXN1bWUsCisJLmlkX3RhYmxlCQk9IHVzYl9hbXJhZGlvX2RldmljZV90YWJsZSwKKwkuc3VwcG9ydHNfYXV0b3N1c3BlbmQJPSAxLAorfTsKKworLyogc3dpdGNoIG9uIHJhZGlvLiBTZW5kIDggYnl0ZXMgdG8gZGV2aWNlLiAqLworc3RhdGljIGludCBhbXJhZGlvX3N0YXJ0KHN0cnVjdCBhbXJhZGlvX2RldmljZSAqcmFkaW8pCit7CisJaW50IHJldHZhbDsKKwlpbnQgc2l6ZTsKKworCW11dGV4X2xvY2soJnJhZGlvLT5sb2NrKTsKKworCXJhZGlvLT5idWZmZXJbMF0gPSAweDAwOworCXJhZGlvLT5idWZmZXJbMV0gPSAweDU1OworCXJhZGlvLT5idWZmZXJbMl0gPSAweGFhOworCXJhZGlvLT5idWZmZXJbM10gPSAweDAwOworCXJhZGlvLT5idWZmZXJbNF0gPSAweGFiOworCXJhZGlvLT5idWZmZXJbNV0gPSAweDAwOworCXJhZGlvLT5idWZmZXJbNl0gPSAweDAwOworCXJhZGlvLT5idWZmZXJbN10gPSAweDAwOworCisJcmV0dmFsID0gdXNiX2J1bGtfbXNnKHJhZGlvLT51c2JkZXYsIHVzYl9zbmRpbnRwaXBlKHJhZGlvLT51c2JkZXYsIDIpLAorCQkodm9pZCAqKSAocmFkaW8tPmJ1ZmZlciksIEJVRkZFUl9MRU5HVEgsICZzaXplLCBVU0JfVElNRU9VVCk7CisKKwlpZiAocmV0dmFsKSB7CisJCW11dGV4X3VubG9jaygmcmFkaW8tPmxvY2spOworCQlyZXR1cm4gcmV0dmFsOworCX0KKworCW11dGV4X3VubG9jaygmcmFkaW8tPmxvY2spOworCisJcmFkaW8tPm11dGVkID0gMDsKKworCXJldHVybiByZXR2YWw7Cit9CisKKy8qIHN3aXRjaCBvZmYgcmFkaW8gKi8KK3N0YXRpYyBpbnQgYW1yYWRpb19zdG9wKHN0cnVjdCBhbXJhZGlvX2RldmljZSAqcmFkaW8pCit7CisJaW50IHJldHZhbDsKKwlpbnQgc2l6ZTsKKworCW11dGV4X2xvY2soJnJhZGlvLT5sb2NrKTsKKworCXJhZGlvLT5idWZmZXJbMF0gPSAweDAwOworCXJhZGlvLT5idWZmZXJbMV0gPSAweDU1OworCXJhZGlvLT5idWZmZXJbMl0gPSAweGFhOworCXJhZGlvLT5idWZmZXJbM10gPSAweDAwOworCXJhZGlvLT5idWZmZXJbNF0gPSAweGFiOworCXJhZGlvLT5idWZmZXJbNV0gPSAweDAxOworCXJhZGlvLT5idWZmZXJbNl0gPSAweDAwOworCXJhZGlvLT5idWZmZXJbN10gPSAweDAwOworCisJcmV0dmFsID0gdXNiX2J1bGtfbXNnKHJhZGlvLT51c2JkZXYsIHVzYl9zbmRpbnRwaXBlKHJhZGlvLT51c2JkZXYsIDIpLAorCQkodm9pZCAqKSAocmFkaW8tPmJ1ZmZlciksIEJVRkZFUl9MRU5HVEgsICZzaXplLCBVU0JfVElNRU9VVCk7CisKKwlpZiAocmV0dmFsKSB7CisJCW11dGV4X3VubG9jaygmcmFkaW8tPmxvY2spOworCQlyZXR1cm4gcmV0dmFsOworCX0KKworCW11dGV4X3VubG9jaygmcmFkaW8tPmxvY2spOworCisJcmFkaW8tPm11dGVkID0gMTsKKworCXJldHVybiByZXR2YWw7Cit9CisKKy8qIHNldCBhIGZyZXF1ZW5jeSwgZnJlcSBpcyBkZWZpbmVkIGJ5IHY0bCdzIFRVTkVSX0xPVywgaS5lLiAxLzE2dGgga0h6ICovCitzdGF0aWMgaW50IGFtcmFkaW9fc2V0ZnJlcShzdHJ1Y3QgYW1yYWRpb19kZXZpY2UgKnJhZGlvLCBpbnQgZnJlcSkKK3sKKwlpbnQgcmV0dmFsOworCWludCBzaXplOworCXVuc2lnbmVkIHNob3J0IGZyZXFfc2VuZCA9IDB4MTMgKyAoZnJlcSA+PiAzKSAvIDI1OworCisJbXV0ZXhfbG9jaygmcmFkaW8tPmxvY2spOworCisJcmFkaW8tPmJ1ZmZlclswXSA9IDB4MDA7CisJcmFkaW8tPmJ1ZmZlclsxXSA9IDB4NTU7CisJcmFkaW8tPmJ1ZmZlclsyXSA9IDB4YWE7CisJcmFkaW8tPmJ1ZmZlclszXSA9IDB4MDM7CisJcmFkaW8tPmJ1ZmZlcls0XSA9IDB4YTQ7CisJcmFkaW8tPmJ1ZmZlcls1XSA9IDB4MDA7CisJcmFkaW8tPmJ1ZmZlcls2XSA9IDB4MDA7CisJcmFkaW8tPmJ1ZmZlcls3XSA9IDB4MDg7CisKKwlyZXR2YWwgPSB1c2JfYnVsa19tc2cocmFkaW8tPnVzYmRldiwgdXNiX3NuZGludHBpcGUocmFkaW8tPnVzYmRldiwgMiksCisJCSh2b2lkICopIChyYWRpby0+YnVmZmVyKSwgQlVGRkVSX0xFTkdUSCwgJnNpemUsIFVTQl9USU1FT1VUKTsKKworCWlmIChyZXR2YWwpIHsKKwkJbXV0ZXhfdW5sb2NrKCZyYWRpby0+bG9jayk7CisJCXJldHVybiByZXR2YWw7CisJfQorCisJLyogZnJlcXVlbmN5IGlzIGNhbGN1bGF0ZWQgZnJvbSBmcmVxX3NlbmQgYW5kIHBsYWNlZCBpbiBmaXJzdCAyIGJ5dGVzICovCisJcmFkaW8tPmJ1ZmZlclswXSA9IChmcmVxX3NlbmQgPj4gOCkgJiAweGZmOworCXJhZGlvLT5idWZmZXJbMV0gPSBmcmVxX3NlbmQgJiAweGZmOworCXJhZGlvLT5idWZmZXJbMl0gPSAweDAxOworCXJhZGlvLT5idWZmZXJbM10gPSAweDAwOworCXJhZGlvLT5idWZmZXJbNF0gPSAweDAwOworCS8qIDUgYW5kIDYgYnl0ZXMgb2YgYnVmZmVyIGFscmVhZHkgPSAweDAwICovCisJcmFkaW8tPmJ1ZmZlcls3XSA9IDB4MDA7CisKKwlyZXR2YWwgPSB1c2JfYnVsa19tc2cocmFkaW8tPnVzYmRldiwgdXNiX3NuZGludHBpcGUocmFkaW8tPnVzYmRldiwgMiksCisJCSh2b2lkICopIChyYWRpby0+YnVmZmVyKSwgQlVGRkVSX0xFTkdUSCwgJnNpemUsIFVTQl9USU1FT1VUKTsKKworCWlmIChyZXR2YWwpIHsKKwkJbXV0ZXhfdW5sb2NrKCZyYWRpby0+bG9jayk7CisJCXJldHVybiByZXR2YWw7CisJfQorCisJbXV0ZXhfdW5sb2NrKCZyYWRpby0+bG9jayk7CisKKwlyYWRpby0+c3RlcmVvID0gMDsKKworCXJldHVybiByZXR2YWw7Cit9CisKKy8qIFVTQiBzdWJzeXN0ZW0gaW50ZXJmYWNlIGJlZ2lucyBoZXJlICovCisKKy8qIGhhbmRsZSB1bnBsdWdnaW5nIG9mIHRoZSBkZXZpY2UsIHJlbGVhc2UgZGF0YSBzdHJ1Y3R1cmVzCitpZiBub3RoaW5nIGtlZXBzIHVzIGZyb20gZG9pbmcgaXQuICBJZiBzb21ldGhpbmcgaXMgc3RpbGwKK2tlZXBpbmcgdXMgYnVzeSwgdGhlIHJlbGVhc2UgY2FsbGJhY2sgb2YgdjRsIHdpbGwgdGFrZSBjYXJlCitvZiByZWxlYXNpbmcgaXQuICovCitzdGF0aWMgdm9pZCB1c2JfYW1yYWRpb19kaXNjb25uZWN0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKQoreworCXN0cnVjdCBhbXJhZGlvX2RldmljZSAqcmFkaW8gPSB1c2JfZ2V0X2ludGZkYXRhKGludGYpOworCisJdXNiX3NldF9pbnRmZGF0YShpbnRmLCBOVUxMKTsKKworCWlmIChyYWRpbykgeworCQl2aWRlb191bnJlZ2lzdGVyX2RldmljZShyYWRpby0+dmlkZW9kZXYpOworCQlyYWRpby0+dmlkZW9kZXYgPSBOVUxMOworCQlpZiAocmFkaW8tPnVzZXJzKSB7CisJCQlrZnJlZShyYWRpby0+YnVmZmVyKTsKKwkJCWtmcmVlKHJhZGlvKTsKKwkJfSBlbHNlIHsKKwkJCXJhZGlvLT5yZW1vdmVkID0gMTsKKwkJfQorCX0KK30KKworLyogdmlkaW9jX3F1ZXJ5Y2FwIC0gcXVlcnkgZGV2aWNlIGNhcGFiaWxpdGllcyAqLworc3RhdGljIGludCB2aWRpb2NfcXVlcnljYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJCQkJCXN0cnVjdCB2NGwyX2NhcGFiaWxpdHkgKnYpCit7CisJc3RybGNweSh2LT5kcml2ZXIsICJyYWRpby1tcjgwMCIsIHNpemVvZih2LT5kcml2ZXIpKTsKKwlzdHJsY3B5KHYtPmNhcmQsICJBdmVyTWVkaWEgTVIgODAwIFVTQiBGTSBSYWRpbyIsIHNpemVvZih2LT5jYXJkKSk7CisJc3ByaW50Zih2LT5idXNfaW5mbywgIlVTQiIpOworCXYtPnZlcnNpb24gPSBSQURJT19WRVJTSU9OOworCXYtPmNhcGFiaWxpdGllcyA9IFY0TDJfQ0FQX1RVTkVSOworCXJldHVybiAwOworfQorCisvKiB2aWRpb2NfZ190dW5lciAtIGdldCB0dW5lciBhdHRyaWJ1dGVzICovCitzdGF0aWMgaW50IHZpZGlvY19nX3R1bmVyKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorCQkJCXN0cnVjdCB2NGwyX3R1bmVyICp2KQoreworCXN0cnVjdCBhbXJhZGlvX2RldmljZSAqcmFkaW8gPSB2aWRlb19nZXRfZHJ2ZGF0YSh2aWRlb19kZXZkYXRhKGZpbGUpKTsKKworCWlmICh2LT5pbmRleCA+IDApCisJCXJldHVybiAtRUlOVkFMOworCisvKiBUT0RPOiBBZGQgZnVuY3Rpb24gd2hpY2ggbG9vayBpcyBzaWduYWwgc3RlcmVvIG9yIG5vdAorICogCWFtcmFkaW9fZ2V0c3RhdChyYWRpbyk7CisgKi8KKwlyYWRpby0+c3RlcmVvID0gLTE7CisJc3RyY3B5KHYtPm5hbWUsICJGTSIpOworCXYtPnR5cGUgPSBWNEwyX1RVTkVSX1JBRElPOworCXYtPnJhbmdlbG93ID0gRlJFUV9NSU4gKiBGUkVRX01VTDsKKwl2LT5yYW5nZWhpZ2ggPSBGUkVRX01BWCAqIEZSRVFfTVVMOworCXYtPnJ4c3ViY2hhbnMgPSBWNEwyX1RVTkVSX1NVQl9NT05PIHwgVjRMMl9UVU5FUl9TVUJfU1RFUkVPOworCXYtPmNhcGFiaWxpdHkgPSBWNEwyX1RVTkVSX0NBUF9MT1c7CisJaWYgKHJhZGlvLT5zdGVyZW8pCisJCXYtPmF1ZG1vZGUgPSBWNEwyX1RVTkVSX01PREVfU1RFUkVPOworCWVsc2UKKwkJdi0+YXVkbW9kZSA9IFY0TDJfVFVORVJfTU9ERV9NT05POworCXYtPnNpZ25hbCA9IDB4ZmZmZjsgICAgIC8qIENhbid0IGdldCB0aGUgc2lnbmFsIHN0cmVuZ3RoLCBzYWQuLiAqLworCXYtPmFmYyA9IDA7IC8qIERvbid0IGtub3cgd2hhdCBpcyB0aGlzICovCisJcmV0dXJuIDA7Cit9CisKKy8qIHZpZGlvY19zX3R1bmVyIC0gc2V0IHR1bmVyIGF0dHJpYnV0ZXMgKi8KK3N0YXRpYyBpbnQgdmlkaW9jX3NfdHVuZXIoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJCQkJc3RydWN0IHY0bDJfdHVuZXIgKnYpCit7CisJaWYgKHYtPmluZGV4ID4gMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisJcmV0dXJuIDA7Cit9CisKKy8qIHZpZGlvY19zX2ZyZXF1ZW5jeSAtIHNldCB0dW5lciByYWRpbyBmcmVxdWVuY3kgKi8KK3N0YXRpYyBpbnQgdmlkaW9jX3NfZnJlcXVlbmN5KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorCQkJCXN0cnVjdCB2NGwyX2ZyZXF1ZW5jeSAqZikKK3sKKwlzdHJ1Y3QgYW1yYWRpb19kZXZpY2UgKnJhZGlvID0gdmlkZW9fZ2V0X2RydmRhdGEodmlkZW9fZGV2ZGF0YShmaWxlKSk7CisKKwlyYWRpby0+Y3VyZnJlcSA9IGYtPmZyZXF1ZW5jeTsKKwlpZiAoYW1yYWRpb19zZXRmcmVxKHJhZGlvLCByYWRpby0+Y3VyZnJlcSkgPCAwKQorCQl3YXJuKCJTZXQgZnJlcXVlbmN5IGZhaWxlZCIpOworCXJldHVybiAwOworfQorCisvKiB2aWRpb2NfZ19mcmVxdWVuY3kgLSBnZXQgdHVuZXIgcmFkaW8gZnJlcXVlbmN5ICovCitzdGF0aWMgaW50IHZpZGlvY19nX2ZyZXF1ZW5jeShzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJCQlzdHJ1Y3QgdjRsMl9mcmVxdWVuY3kgKmYpCit7CisJc3RydWN0IGFtcmFkaW9fZGV2aWNlICpyYWRpbyA9IHZpZGVvX2dldF9kcnZkYXRhKHZpZGVvX2RldmRhdGEoZmlsZSkpOworCisJZi0+dHlwZSA9IFY0TDJfVFVORVJfUkFESU87CisJZi0+ZnJlcXVlbmN5ID0gcmFkaW8tPmN1cmZyZXE7CisJcmV0dXJuIDA7Cit9CisKKy8qIHZpZGlvY19xdWVyeWN0cmwgLSBlbnVtZXJhdGUgY29udHJvbCBpdGVtcyAqLworc3RhdGljIGludCB2aWRpb2NfcXVlcnljdHJsKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorCQkJCXN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCAqcWMpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShyYWRpb19xY3RybCk7IGkrKykgeworCQlpZiAocWMtPmlkICYmIHFjLT5pZCA9PSByYWRpb19xY3RybFtpXS5pZCkgeworCQkJbWVtY3B5KHFjLCAmKHJhZGlvX3FjdHJsW2ldKSwKKwkJCQkJCXNpemVvZigqcWMpKTsKKwkJCXJldHVybiAwOworCQl9CisJfQorCXJldHVybiAtRUlOVkFMOworfQorCisvKiB2aWRpb2NfZ19jdHJsIC0gZ2V0IHRoZSB2YWx1ZSBvZiBhIGNvbnRyb2wgKi8KK3N0YXRpYyBpbnQgdmlkaW9jX2dfY3RybChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJCQlzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsKQoreworCXN0cnVjdCBhbXJhZGlvX2RldmljZSAqcmFkaW8gPSB2aWRlb19nZXRfZHJ2ZGF0YSh2aWRlb19kZXZkYXRhKGZpbGUpKTsKKworCXN3aXRjaCAoY3RybC0+aWQpIHsKKwljYXNlIFY0TDJfQ0lEX0FVRElPX01VVEU6CisJCWN0cmwtPnZhbHVlID0gcmFkaW8tPm11dGVkOworCQlyZXR1cm4gMDsKKwl9CisJcmV0dXJuIC1FSU5WQUw7Cit9CisKKy8qIHZpZGlvY19zX2N0cmwgLSBzZXQgdGhlIHZhbHVlIG9mIGEgY29udHJvbCAqLworc3RhdGljIGludCB2aWRpb2Nfc19jdHJsKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorCQkJCXN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwpCit7CisJc3RydWN0IGFtcmFkaW9fZGV2aWNlICpyYWRpbyA9IHZpZGVvX2dldF9kcnZkYXRhKHZpZGVvX2RldmRhdGEoZmlsZSkpOworCisJc3dpdGNoIChjdHJsLT5pZCkgeworCWNhc2UgVjRMMl9DSURfQVVESU9fTVVURToKKwkJaWYgKGN0cmwtPnZhbHVlKSB7CisJCQlpZiAoYW1yYWRpb19zdG9wKHJhZGlvKSA8IDApIHsKKwkJCQl3YXJuKCJhbXJhZGlvX3N0b3AoKSBmYWlsZWQiKTsKKwkJCQlyZXR1cm4gLTE7CisJCQl9CisJCX0gZWxzZSB7CisJCQlpZiAoYW1yYWRpb19zdGFydChyYWRpbykgPCAwKSB7CisJCQkJd2FybigiYW1yYWRpb19zdGFydCgpIGZhaWxlZCIpOworCQkJCXJldHVybiAtMTsKKwkJCX0KKwkJfQorCQlyZXR1cm4gMDsKKwl9CisJcmV0dXJuIC1FSU5WQUw7Cit9CisKKy8qIHZpZGlvY19nX2F1ZGlvIC0gZ2V0IGF1ZGlvIGF0dHJpYnV0ZXMgKi8KK3N0YXRpYyBpbnQgdmlkaW9jX2dfYXVkaW8oc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJCQkJc3RydWN0IHY0bDJfYXVkaW8gKmEpCit7CisJaWYgKGEtPmluZGV4ID4gMSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlzdHJjcHkoYS0+bmFtZSwgIlJhZGlvIik7CisJYS0+Y2FwYWJpbGl0eSA9IFY0TDJfQVVEQ0FQX1NURVJFTzsKKwlyZXR1cm4gMDsKK30KKworLyogdmlkaW9jX3NfYXVkaW8gLSBzZXQgYXVkaW8gYXR0cmlidXRlcyAgKi8KK3N0YXRpYyBpbnQgdmlkaW9jX3NfYXVkaW8oc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJCQkJCXN0cnVjdCB2NGwyX2F1ZGlvICphKQoreworCWlmIChhLT5pbmRleCAhPSAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlyZXR1cm4gMDsKK30KKworLyogdmlkaW9jX2dfaW5wdXQgLSBnZXQgaW5wdXQgKi8KK3N0YXRpYyBpbnQgdmlkaW9jX2dfaW5wdXQoc3RydWN0IGZpbGUgKmZpbHAsIHZvaWQgKnByaXYsIHVuc2lnbmVkIGludCAqaSkKK3sKKwkqaSA9IDA7CisJcmV0dXJuIDA7Cit9CisKKy8qIHZpZGlvY19zX2lucHV0IC0gc2V0IGlucHV0ICovCitzdGF0aWMgaW50IHZpZGlvY19zX2lucHV0KHN0cnVjdCBmaWxlICpmaWxwLCB2b2lkICpwcml2LCB1bnNpZ25lZCBpbnQgaSkKK3sKKwlpZiAoaSAhPSAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlyZXR1cm4gMDsKK30KKworLyogb3BlbiBkZXZpY2UgLSBhbXJhZGlvX3N0YXJ0KCkgYW5kIGFtcmFkaW9fc2V0ZnJlcSgpICovCitzdGF0aWMgaW50IHVzYl9hbXJhZGlvX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJc3RydWN0IGFtcmFkaW9fZGV2aWNlICpyYWRpbyA9IHZpZGVvX2dldF9kcnZkYXRhKHZpZGVvX2RldmRhdGEoZmlsZSkpOworCisJcmFkaW8tPnVzZXJzID0gMTsKKwlyYWRpby0+bXV0ZWQgPSAxOworCisJaWYgKGFtcmFkaW9fc3RhcnQocmFkaW8pIDwgMCkgeworCQl3YXJuKCJSYWRpbyBkaWQgbm90IHN0YXJ0IHVwIHByb3Blcmx5Iik7CisJCXJhZGlvLT51c2VycyA9IDA7CisJCXJldHVybiAtRUlPOworCX0KKwlpZiAoYW1yYWRpb19zZXRmcmVxKHJhZGlvLCByYWRpby0+Y3VyZnJlcSkgPCAwKQorCQl3YXJuKCJTZXQgZnJlcXVlbmN5IGZhaWxlZCIpOworCXJldHVybiAwOworfQorCisvKmNsb3NlIGRldmljZSAtIGZyZWUgZHJpdmVyIHN0cnVjdHVyZXMgKi8KK3N0YXRpYyBpbnQgdXNiX2FtcmFkaW9fY2xvc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJc3RydWN0IGFtcmFkaW9fZGV2aWNlICpyYWRpbyA9IHZpZGVvX2dldF9kcnZkYXRhKHZpZGVvX2RldmRhdGEoZmlsZSkpOworCisJaWYgKCFyYWRpbykKKwkJcmV0dXJuIC1FTk9ERVY7CisJcmFkaW8tPnVzZXJzID0gMDsKKwlpZiAocmFkaW8tPnJlbW92ZWQpIHsKKwkJa2ZyZWUocmFkaW8tPmJ1ZmZlcik7CisJCWtmcmVlKHJhZGlvKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qIFN1c3BlbmQgZGV2aWNlIC0gc3RvcCBkZXZpY2UuIE5lZWQgdG8gYmUgY2hlY2tlZCBhbmQgZml4ZWQgKi8KK3N0YXRpYyBpbnQgdXNiX2FtcmFkaW9fc3VzcGVuZChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwgcG1fbWVzc2FnZV90IG1lc3NhZ2UpCit7CisJc3RydWN0IGFtcmFkaW9fZGV2aWNlICpyYWRpbyA9IHVzYl9nZXRfaW50ZmRhdGEoaW50Zik7CisKKwlpZiAoYW1yYWRpb19zdG9wKHJhZGlvKSA8IDApCisJCXdhcm4oImFtcmFkaW9fc3RvcCgpIGZhaWxlZCIpOworCisJaW5mbygicmFkaW8tbXI4MDA6IEdvaW5nIGludG8gc3VzcGVuZC4uIik7CisKKwlyZXR1cm4gMDsKK30KKworLyogUmVzdW1lIGRldmljZSAtIHN0YXJ0IGRldmljZS4gTmVlZCB0byBiZSBjaGVja2VkIGFuZCBmaXhlZCAqLworc3RhdGljIGludCB1c2JfYW1yYWRpb19yZXN1bWUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCit7CisJc3RydWN0IGFtcmFkaW9fZGV2aWNlICpyYWRpbyA9IHVzYl9nZXRfaW50ZmRhdGEoaW50Zik7CisKKwlpZiAoYW1yYWRpb19zdGFydChyYWRpbykgPCAwKQorCQl3YXJuKCJhbXJhZGlvX3N0YXJ0KCkgZmFpbGVkIik7CisKKwlpbmZvKCJyYWRpby1tcjgwMDogQ29taW5nIG91dCBvZiBzdXNwZW5kLi4iKTsKKworCXJldHVybiAwOworfQorCisvKiBGaWxlIHN5c3RlbSBpbnRlcmZhY2UgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHVzYl9hbXJhZGlvX2ZvcHMgPSB7CisJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCS5vcGVuCQk9IHVzYl9hbXJhZGlvX29wZW4sCisJLnJlbGVhc2UJPSB1c2JfYW1yYWRpb19jbG9zZSwKKwkuaW9jdGwJCT0gdmlkZW9faW9jdGwyLAorI2lmZGVmIENPTkZJR19DT01QQVQKKwkuY29tcGF0X2lvY3RsCT0gdjRsX2NvbXBhdF9pb2N0bDMyLAorI2VuZGlmCisJLmxsc2VlawkJPSBub19sbHNlZWssCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfaW9jdGxfb3BzIHVzYl9hbXJhZGlvX2lvY3RsX29wcyA9IHsKKwkudmlkaW9jX3F1ZXJ5Y2FwICAgID0gdmlkaW9jX3F1ZXJ5Y2FwLAorCS52aWRpb2NfZ190dW5lciAgICAgPSB2aWRpb2NfZ190dW5lciwKKwkudmlkaW9jX3NfdHVuZXIgICAgID0gdmlkaW9jX3NfdHVuZXIsCisJLnZpZGlvY19nX2ZyZXF1ZW5jeSA9IHZpZGlvY19nX2ZyZXF1ZW5jeSwKKwkudmlkaW9jX3NfZnJlcXVlbmN5ID0gdmlkaW9jX3NfZnJlcXVlbmN5LAorCS52aWRpb2NfcXVlcnljdHJsICAgPSB2aWRpb2NfcXVlcnljdHJsLAorCS52aWRpb2NfZ19jdHJsICAgICAgPSB2aWRpb2NfZ19jdHJsLAorCS52aWRpb2Nfc19jdHJsICAgICAgPSB2aWRpb2Nfc19jdHJsLAorCS52aWRpb2NfZ19hdWRpbyAgICAgPSB2aWRpb2NfZ19hdWRpbywKKwkudmlkaW9jX3NfYXVkaW8gICAgID0gdmlkaW9jX3NfYXVkaW8sCisJLnZpZGlvY19nX2lucHV0ICAgICA9IHZpZGlvY19nX2lucHV0LAorCS52aWRpb2Nfc19pbnB1dCAgICAgPSB2aWRpb2Nfc19pbnB1dCwKK307CisKKy8qIFY0TDIgaW50ZXJmYWNlICovCitzdGF0aWMgc3RydWN0IHZpZGVvX2RldmljZSBhbXJhZGlvX3ZpZGVvZGV2X3RlbXBsYXRlID0geworCS5uYW1lCQk9ICJBdmVyTWVkaWEgTVIgODAwIFVTQiBGTSBSYWRpbyIsCisJLmZvcHMJCT0gJnVzYl9hbXJhZGlvX2ZvcHMsCisJLmlvY3RsX29wcyAJPSAmdXNiX2FtcmFkaW9faW9jdGxfb3BzLAorCS5yZWxlYXNlCT0gdmlkZW9fZGV2aWNlX3JlbGVhc2UsCit9OworCisvKiBjaGVjayBpZiB0aGUgZGV2aWNlIGlzIHByZXNlbnQgYW5kIHJlZ2lzdGVyIHdpdGggdjRsIGFuZAordXNiIGlmIGl0IGlzICovCitzdGF0aWMgaW50IHVzYl9hbXJhZGlvX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLAorCQkJCWNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKK3sKKwlzdHJ1Y3QgYW1yYWRpb19kZXZpY2UgKnJhZGlvOworCisJcmFkaW8gPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgYW1yYWRpb19kZXZpY2UpLCBHRlBfS0VSTkVMKTsKKworCWlmICghKHJhZGlvKSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlyYWRpby0+YnVmZmVyID0ga21hbGxvYyhCVUZGRVJfTEVOR1RILCBHRlBfS0VSTkVMKTsKKworCWlmICghKHJhZGlvLT5idWZmZXIpKSB7CisJCWtmcmVlKHJhZGlvKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJcmFkaW8tPnZpZGVvZGV2ID0gdmlkZW9fZGV2aWNlX2FsbG9jKCk7CisKKwlpZiAoIShyYWRpby0+dmlkZW9kZXYpKSB7CisJCWtmcmVlKHJhZGlvLT5idWZmZXIpOworCQlrZnJlZShyYWRpbyk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCW1lbWNweShyYWRpby0+dmlkZW9kZXYsICZhbXJhZGlvX3ZpZGVvZGV2X3RlbXBsYXRlLAorCQlzaXplb2YoYW1yYWRpb192aWRlb2Rldl90ZW1wbGF0ZSkpOworCisJcmFkaW8tPnJlbW92ZWQgPSAwOworCXJhZGlvLT51c2VycyA9IDA7CisJcmFkaW8tPnVzYmRldiA9IGludGVyZmFjZV90b191c2JkZXYoaW50Zik7CisJcmFkaW8tPmN1cmZyZXEgPSA5NS4xNiAqIEZSRVFfTVVMOworCisJbXV0ZXhfaW5pdCgmcmFkaW8tPmxvY2spOworCisJdmlkZW9fc2V0X2RydmRhdGEocmFkaW8tPnZpZGVvZGV2LCByYWRpbyk7CisJaWYgKHZpZGVvX3JlZ2lzdGVyX2RldmljZShyYWRpby0+dmlkZW9kZXYsIFZGTF9UWVBFX1JBRElPLCByYWRpb19ucikpIHsKKwkJd2FybigiQ291bGQgbm90IHJlZ2lzdGVyIHZpZGVvIGRldmljZSIpOworCQl2aWRlb19kZXZpY2VfcmVsZWFzZShyYWRpby0+dmlkZW9kZXYpOworCQlrZnJlZShyYWRpby0+YnVmZmVyKTsKKwkJa2ZyZWUocmFkaW8pOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwl1c2Jfc2V0X2ludGZkYXRhKGludGYsIHJhZGlvKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBfX2luaXQgYW1yYWRpb19pbml0KHZvaWQpCit7CisJaW50IHJldHZhbCA9IHVzYl9yZWdpc3RlcigmdXNiX2FtcmFkaW9fZHJpdmVyKTsKKworCWluZm8oRFJJVkVSX1ZFUlNJT04gIiAiIERSSVZFUl9ERVNDKTsKKwlpZiAocmV0dmFsKQorCQllcnIoInVzYl9yZWdpc3RlciBmYWlsZWQuIEVycm9yIG51bWJlciAlZCIsIHJldHZhbCk7CisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGFtcmFkaW9fZXhpdCh2b2lkKQoreworCXVzYl9kZXJlZ2lzdGVyKCZ1c2JfYW1yYWRpb19kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChhbXJhZGlvX2luaXQpOworbW9kdWxlX2V4aXQoYW1yYWRpb19leGl0KTsKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby1ydHJhY2syLmMgYi9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLXJ0cmFjazIuYwppbmRleCA2ZDgyMGUyLi5hNjcwNzk3IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLXJ0cmFjazIuYworKysgYi9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLXJ0cmFjazIuYwpAQCAtNTIsNiArNTIsNyBAQAogCiBzdHJ1Y3QgcnRfZGV2aWNlCiB7CisJdW5zaWduZWQgbG9uZyBpbl91c2U7CiAJaW50IHBvcnQ7CiAJdW5zaWduZWQgbG9uZyBjdXJmcmVxOwogCWludCBtdXRlZDsKQEAgLTE1Myw4ICsxNTQsNyBAQAogc3RhdGljIGludCB2aWRpb2NfZ190dW5lcihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCQlzdHJ1Y3QgdjRsMl90dW5lciAqdikKIHsKLQlzdHJ1Y3QgdmlkZW9fZGV2aWNlICpkZXYgPSB2aWRlb19kZXZkYXRhKGZpbGUpOwotCXN0cnVjdCBydF9kZXZpY2UgKnJ0ID0gZGV2LT5wcml2OworCXN0cnVjdCBydF9kZXZpY2UgKnJ0ID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKIAogCWlmICh2LT5pbmRleCA+IDApCiAJCXJldHVybiAtRUlOVkFMOwpAQCAtMTczLDggKzE3Myw3IEBACiBzdGF0aWMgaW50IHZpZGlvY19zX2ZyZXF1ZW5jeShzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCQlzdHJ1Y3QgdjRsMl9mcmVxdWVuY3kgKmYpCiB7Ci0Jc3RydWN0IHZpZGVvX2RldmljZSAqZGV2ID0gdmlkZW9fZGV2ZGF0YShmaWxlKTsKLQlzdHJ1Y3QgcnRfZGV2aWNlICpydCA9IGRldi0+cHJpdjsKKwlzdHJ1Y3QgcnRfZGV2aWNlICpydCA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CiAKIAlydC0+Y3VyZnJlcSA9IGYtPmZyZXF1ZW5jeTsKIAlydF9zZXRmcmVxKHJ0LCBydC0+Y3VyZnJlcSk7CkBAIC0xODQsOCArMTgzLDcgQEAKIHN0YXRpYyBpbnQgdmlkaW9jX2dfZnJlcXVlbmN5KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQkJCXN0cnVjdCB2NGwyX2ZyZXF1ZW5jeSAqZikKIHsKLQlzdHJ1Y3QgdmlkZW9fZGV2aWNlICpkZXYgPSB2aWRlb19kZXZkYXRhKGZpbGUpOwotCXN0cnVjdCBydF9kZXZpY2UgKnJ0ID0gZGV2LT5wcml2OworCXN0cnVjdCBydF9kZXZpY2UgKnJ0ID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKIAogCWYtPnR5cGUgPSBWNEwyX1RVTkVSX1JBRElPOwogCWYtPmZyZXF1ZW5jeSA9IHJ0LT5jdXJmcmVxOwpAQCAtMjEwLDggKzIwOCw3IEBACiBzdGF0aWMgaW50IHZpZGlvY19nX2N0cmwoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCQkJc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCkKIHsKLQlzdHJ1Y3QgdmlkZW9fZGV2aWNlICpkZXYgPSB2aWRlb19kZXZkYXRhKGZpbGUpOwotCXN0cnVjdCBydF9kZXZpY2UgKnJ0ID0gZGV2LT5wcml2OworCXN0cnVjdCBydF9kZXZpY2UgKnJ0ID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKIAogCXN3aXRjaCAoY3RybC0+aWQpIHsKIAljYXNlIFY0TDJfQ0lEX0FVRElPX01VVEU6CkBAIC0yMzAsOCArMjI3LDcgQEAKIHN0YXRpYyBpbnQgdmlkaW9jX3NfY3RybChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCQlzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsKQogewotCXN0cnVjdCB2aWRlb19kZXZpY2UgKmRldiA9IHZpZGVvX2RldmRhdGEoZmlsZSk7Ci0Jc3RydWN0IHJ0X2RldmljZSAqcnQgPSBkZXYtPnByaXY7CisJc3RydWN0IHJ0X2RldmljZSAqcnQgPSB2aWRlb19kcnZkYXRhKGZpbGUpOwogCiAJc3dpdGNoIChjdHJsLT5pZCkgewogCWNhc2UgVjRMMl9DSURfQVVESU9fTVVURToKQEAgLTI4NCwxMCArMjgwLDIxIEBACiAKIHN0YXRpYyBzdHJ1Y3QgcnRfZGV2aWNlIHJ0cmFjazJfdW5pdDsKIAorc3RhdGljIGludCBydHJhY2syX2V4Y2x1c2l2ZV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXJldHVybiB0ZXN0X2FuZF9zZXRfYml0KDAsICZydHJhY2syX3VuaXQuaW5fdXNlKSA/IC1FQlVTWSA6IDA7Cit9CisKK3N0YXRpYyBpbnQgcnRyYWNrMl9leGNsdXNpdmVfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwljbGVhcl9iaXQoMCwgJnJ0cmFjazJfdW5pdC5pbl91c2UpOworCXJldHVybiAwOworfQorCiBzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBydHJhY2syX2ZvcHMgPSB7CiAJLm93bmVyCQk9IFRISVNfTU9EVUxFLAotCS5vcGVuICAgICAgICAgICA9IHZpZGVvX2V4Y2x1c2l2ZV9vcGVuLAotCS5yZWxlYXNlICAgICAgICA9IHZpZGVvX2V4Y2x1c2l2ZV9yZWxlYXNlLAorCS5vcGVuICAgICAgICAgICA9IHJ0cmFjazJfZXhjbHVzaXZlX29wZW4sCisJLnJlbGVhc2UgICAgICAgID0gcnRyYWNrMl9leGNsdXNpdmVfcmVsZWFzZSwKIAkuaW9jdGwJCT0gdmlkZW9faW9jdGwyLAogI2lmZGVmIENPTkZJR19DT01QQVQKIAkuY29tcGF0X2lvY3RsCT0gdjRsX2NvbXBhdF9pb2N0bDMyLApAQCAtMzE0LDYgKzMyMSw3IEBACiAJLm5hbWUJCT0gIlJhZGlvVHJhY2sgSUkgcmFkaW8iLAogCS5mb3BzICAgICAgICAgICA9ICZydHJhY2syX2ZvcHMsCiAJLmlvY3RsX29wcyAJPSAmcnRyYWNrMl9pb2N0bF9vcHMsCisJLnJlbGVhc2UJPSB2aWRlb19kZXZpY2VfcmVsZWFzZV9lbXB0eSwKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IHJ0cmFjazJfaW5pdCh2b2lkKQpAQCAtMzI5LDcgKzMzNyw3IEBACiAJCXJldHVybiAtRUJVU1k7CiAJfQogCi0JcnRyYWNrMl9yYWRpby5wcml2PSZydHJhY2syX3VuaXQ7CisJdmlkZW9fc2V0X2RydmRhdGEoJnJ0cmFjazJfcmFkaW8sICZydHJhY2syX3VuaXQpOwogCiAJc3Bpbl9sb2NrX2luaXQoJmxvY2spOwogCWlmICh2aWRlb19yZWdpc3Rlcl9kZXZpY2UoJnJ0cmFjazJfcmFkaW8sIFZGTF9UWVBFX1JBRElPLCByYWRpb19ucikgPCAwKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLXNmMTZmbWkuYyBiL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tc2YxNmZtaS5jCmluZGV4IDBkNDc4ZjUuLjMyOWM5MGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tc2YxNmZtaS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tc2YxNmZtaS5jCkBAIC00NSw2ICs0NSw3IEBACiAKIHN0cnVjdCBmbWlfZGV2aWNlCiB7CisJdW5zaWduZWQgbG9uZyBpbl91c2U7CiAJaW50IHBvcnQ7CiAJaW50IGN1cnZvbDsgLyogMSBvciAwICovCiAJdW5zaWduZWQgbG9uZyBjdXJmcmVxOyAvKiBmcmVxIGluIGtIeiAqLwpAQCAtMTQ2LDggKzE0Nyw3IEBACiAJCQkJCXN0cnVjdCB2NGwyX3R1bmVyICp2KQogewogCWludCBtdWx0OwotCXN0cnVjdCB2aWRlb19kZXZpY2UgKmRldiA9IHZpZGVvX2RldmRhdGEoZmlsZSk7Ci0Jc3RydWN0IGZtaV9kZXZpY2UgKmZtaSA9IGRldi0+cHJpdjsKKwlzdHJ1Y3QgZm1pX2RldmljZSAqZm1pID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKIAogCWlmICh2LT5pbmRleCA+IDApCiAJCXJldHVybiAtRUlOVkFMOwpAQCAtMTc1LDggKzE3NSw3IEBACiBzdGF0aWMgaW50IHZpZGlvY19zX2ZyZXF1ZW5jeShzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCQkJc3RydWN0IHY0bDJfZnJlcXVlbmN5ICpmKQogewotCXN0cnVjdCB2aWRlb19kZXZpY2UgKmRldiA9IHZpZGVvX2RldmRhdGEoZmlsZSk7Ci0Jc3RydWN0IGZtaV9kZXZpY2UgKmZtaSA9IGRldi0+cHJpdjsKKwlzdHJ1Y3QgZm1pX2RldmljZSAqZm1pID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKIAogCWlmICghKGZtaS0+ZmxhZ3MgJiBWNEwyX1RVTkVSX0NBUF9MT1cpKQogCQlmLT5mcmVxdWVuY3kgKj0gMTAwMDsKQEAgLTE5Myw4ICsxOTIsNyBAQAogc3RhdGljIGludCB2aWRpb2NfZ19mcmVxdWVuY3koc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCQkJCXN0cnVjdCB2NGwyX2ZyZXF1ZW5jeSAqZikKIHsKLQlzdHJ1Y3QgdmlkZW9fZGV2aWNlICpkZXYgPSB2aWRlb19kZXZkYXRhKGZpbGUpOwotCXN0cnVjdCBmbWlfZGV2aWNlICpmbWkgPSBkZXYtPnByaXY7CisJc3RydWN0IGZtaV9kZXZpY2UgKmZtaSA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CiAKIAlmLT50eXBlID0gVjRMMl9UVU5FUl9SQURJTzsKIAlmLT5mcmVxdWVuY3kgPSBmbWktPmN1cmZyZXE7CkBAIC0yMjEsOCArMjE5LDcgQEAKIHN0YXRpYyBpbnQgdmlkaW9jX2dfY3RybChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCQkJc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCkKIHsKLQlzdHJ1Y3QgdmlkZW9fZGV2aWNlICpkZXYgPSB2aWRlb19kZXZkYXRhKGZpbGUpOwotCXN0cnVjdCBmbWlfZGV2aWNlICpmbWkgPSBkZXYtPnByaXY7CisJc3RydWN0IGZtaV9kZXZpY2UgKmZtaSA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CiAKIAlzd2l0Y2ggKGN0cmwtPmlkKSB7CiAJY2FzZSBWNEwyX0NJRF9BVURJT19NVVRFOgpAQCAtMjM1LDggKzIzMiw3IEBACiBzdGF0aWMgaW50IHZpZGlvY19zX2N0cmwoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCQkJCXN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwpCiB7Ci0Jc3RydWN0IHZpZGVvX2RldmljZSAqZGV2ID0gdmlkZW9fZGV2ZGF0YShmaWxlKTsKLQlzdHJ1Y3QgZm1pX2RldmljZSAqZm1pID0gZGV2LT5wcml2OworCXN0cnVjdCBmbWlfZGV2aWNlICpmbWkgPSB2aWRlb19kcnZkYXRhKGZpbGUpOwogCiAJc3dpdGNoIChjdHJsLT5pZCkgewogCWNhc2UgVjRMMl9DSURfQVVESU9fTVVURToKQEAgLTI4NCwxMCArMjgwLDIxIEBACiAKIHN0YXRpYyBzdHJ1Y3QgZm1pX2RldmljZSBmbWlfdW5pdDsKIAorc3RhdGljIGludCBmbWlfZXhjbHVzaXZlX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJcmV0dXJuIHRlc3RfYW5kX3NldF9iaXQoMCwgJmZtaV91bml0LmluX3VzZSkgPyAtRUJVU1kgOiAwOworfQorCitzdGF0aWMgaW50IGZtaV9leGNsdXNpdmVfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwljbGVhcl9iaXQoMCwgJmZtaV91bml0LmluX3VzZSk7CisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGZtaV9mb3BzID0gewogCS5vd25lcgkJPSBUSElTX01PRFVMRSwKLQkub3BlbiAgICAgICAgICAgPSB2aWRlb19leGNsdXNpdmVfb3BlbiwKLQkucmVsZWFzZSAgICAgICAgPSB2aWRlb19leGNsdXNpdmVfcmVsZWFzZSwKKwkub3BlbiAgICAgICAgICAgPSBmbWlfZXhjbHVzaXZlX29wZW4sCisJLnJlbGVhc2UgICAgICAgID0gZm1pX2V4Y2x1c2l2ZV9yZWxlYXNlLAogCS5pb2N0bAkJPSB2aWRlb19pb2N0bDIsCiAjaWZkZWYgQ09ORklHX0NPTVBBVAogCS5jb21wYXRfaW9jdGwJPSB2NGxfY29tcGF0X2lvY3RsMzIsCkBAIC0zMTQsNiArMzIxLDcgQEAKIAkubmFtZQkJPSAiU0YxNkZNeCByYWRpbyIsCiAJLmZvcHMgICAgICAgICAgID0gJmZtaV9mb3BzLAogCS5pb2N0bF9vcHMgCT0gJmZtaV9pb2N0bF9vcHMsCisJLnJlbGVhc2UJPSB2aWRlb19kZXZpY2VfcmVsZWFzZV9lbXB0eSwKIH07CiAKIC8qIGxhZGlzOiB0aGlzIGlzIG15IGNhcmQuIGRvZXMgYW55IG90aGVyIHR5cGVzIGV4aXN0PyAqLwpAQCAtMzczLDcgKzM4MSw3IEBACiAJZm1pX3VuaXQuY3Vydm9sID0gMDsKIAlmbWlfdW5pdC5jdXJmcmVxID0gMDsKIAlmbWlfdW5pdC5mbGFncyA9IFY0TDJfVFVORVJfQ0FQX0xPVzsKLQlmbWlfcmFkaW8ucHJpdiA9ICZmbWlfdW5pdDsKKwl2aWRlb19zZXRfZHJ2ZGF0YSgmZm1pX3JhZGlvLCAmZm1pX3VuaXQpOwogCiAJbXV0ZXhfaW5pdCgmbG9jayk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tc2YxNmZtcjIuYyBiL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tc2YxNmZtcjIuYwppbmRleCA2MjkwNTUzLi5iMWY0N2MzIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLXNmMTZmbXIyLmMKKysrIGIvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby1zZjE2Zm1yMi5jCkBAIC02NCw2ICs2NCw3IEBACiAvKiB0aGlzIHNob3VsZCBiZSBzdGF0aWMgdmFycyBmb3IgbW9kdWxlIHNpemUgKi8KIHN0cnVjdCBmbXIyX2RldmljZQogeworCXVuc2lnbmVkIGxvbmcgaW5fdXNlOwogCWludCBwb3J0OwogCWludCBjdXJ2b2w7IC8qIDAtMTUgKi8KIAlpbnQgbXV0ZTsKQEAgLTIyOSw4ICsyMzAsNyBAQAogCQkJCQlzdHJ1Y3QgdjRsMl90dW5lciAqdikKIHsKIAlpbnQgbXVsdDsKLQlzdHJ1Y3QgdmlkZW9fZGV2aWNlICpkZXYgPSB2aWRlb19kZXZkYXRhKGZpbGUpOwotCXN0cnVjdCBmbXIyX2RldmljZSAqZm1yMiA9IGRldi0+cHJpdjsKKwlzdHJ1Y3QgZm1yMl9kZXZpY2UgKmZtcjIgPSB2aWRlb19kcnZkYXRhKGZpbGUpOwogCiAJaWYgKHYtPmluZGV4ID4gMCkKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC0yNjIsOCArMjYyLDcgQEAKIHN0YXRpYyBpbnQgdmlkaW9jX3NfZnJlcXVlbmN5KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQkJCQlzdHJ1Y3QgdjRsMl9mcmVxdWVuY3kgKmYpCiB7Ci0Jc3RydWN0IHZpZGVvX2RldmljZSAqZGV2ID0gdmlkZW9fZGV2ZGF0YShmaWxlKTsKLQlzdHJ1Y3QgZm1yMl9kZXZpY2UgKmZtcjIgPSBkZXYtPnByaXY7CisJc3RydWN0IGZtcjJfZGV2aWNlICpmbXIyID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKIAogCWlmICghKGZtcjItPmZsYWdzICYgVjRMMl9UVU5FUl9DQVBfTE9XKSkKIAkJZi0+ZnJlcXVlbmN5ICo9IDEwMDA7CkBAIC0yODYsOCArMjg1LDcgQEAKIHN0YXRpYyBpbnQgdmlkaW9jX2dfZnJlcXVlbmN5KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQkJCQlzdHJ1Y3QgdjRsMl9mcmVxdWVuY3kgKmYpCiB7Ci0Jc3RydWN0IHZpZGVvX2RldmljZSAqZGV2ID0gdmlkZW9fZGV2ZGF0YShmaWxlKTsKLQlzdHJ1Y3QgZm1yMl9kZXZpY2UgKmZtcjIgPSBkZXYtPnByaXY7CisJc3RydWN0IGZtcjJfZGV2aWNlICpmbXIyID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKIAogCWYtPnR5cGUgPSBWNEwyX1RVTkVSX1JBRElPOwogCWYtPmZyZXF1ZW5jeSA9IGZtcjItPmN1cmZyZXE7CkBAIC0zMTMsOCArMzExLDcgQEAKIHN0YXRpYyBpbnQgdmlkaW9jX2dfY3RybChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCQkJc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCkKIHsKLQlzdHJ1Y3QgdmlkZW9fZGV2aWNlICpkZXYgPSB2aWRlb19kZXZkYXRhKGZpbGUpOwotCXN0cnVjdCBmbXIyX2RldmljZSAqZm1yMiA9IGRldi0+cHJpdjsKKwlzdHJ1Y3QgZm1yMl9kZXZpY2UgKmZtcjIgPSB2aWRlb19kcnZkYXRhKGZpbGUpOwogCiAJc3dpdGNoIChjdHJsLT5pZCkgewogCWNhc2UgVjRMMl9DSURfQVVESU9fTVVURToKQEAgLTMzMCw4ICszMjcsNyBAQAogc3RhdGljIGludCB2aWRpb2Nfc19jdHJsKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQkJCQlzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsKQogewotCXN0cnVjdCB2aWRlb19kZXZpY2UgKmRldiA9IHZpZGVvX2RldmRhdGEoZmlsZSk7Ci0Jc3RydWN0IGZtcjJfZGV2aWNlICpmbXIyID0gZGV2LT5wcml2OworCXN0cnVjdCBmbXIyX2RldmljZSAqZm1yMiA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CiAKIAlzd2l0Y2ggKGN0cmwtPmlkKSB7CiAJY2FzZSBWNEwyX0NJRF9BVURJT19NVVRFOgpAQCAtNDAwLDEwICszOTYsMjEgQEAKIAogc3RhdGljIHN0cnVjdCBmbXIyX2RldmljZSBmbXIyX3VuaXQ7CiAKK3N0YXRpYyBpbnQgZm1yMl9leGNsdXNpdmVfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlyZXR1cm4gdGVzdF9hbmRfc2V0X2JpdCgwLCAmZm1yMl91bml0LmluX3VzZSkgPyAtRUJVU1kgOiAwOworfQorCitzdGF0aWMgaW50IGZtcjJfZXhjbHVzaXZlX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJY2xlYXJfYml0KDAsICZmbXIyX3VuaXQuaW5fdXNlKTsKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZm1yMl9mb3BzID0gewogCS5vd25lciAgICAgICAgICA9IFRISVNfTU9EVUxFLAotCS5vcGVuICAgICAgICAgICA9IHZpZGVvX2V4Y2x1c2l2ZV9vcGVuLAotCS5yZWxlYXNlICAgICAgICA9IHZpZGVvX2V4Y2x1c2l2ZV9yZWxlYXNlLAorCS5vcGVuICAgICAgICAgICA9IGZtcjJfZXhjbHVzaXZlX29wZW4sCisJLnJlbGVhc2UgICAgICAgID0gZm1yMl9leGNsdXNpdmVfcmVsZWFzZSwKIAkuaW9jdGwgICAgICAgICAgPSB2aWRlb19pb2N0bDIsCiAjaWZkZWYgQ09ORklHX0NPTVBBVAogCS5jb21wYXRfaW9jdGwJPSB2NGxfY29tcGF0X2lvY3RsMzIsCkBAIC00MzAsNiArNDM3LDcgQEAKIAkubmFtZQkJPSAiU0YxNkZNUjIgcmFkaW8iLAogCS5mb3BzCQk9ICZmbXIyX2ZvcHMsCiAJLmlvY3RsX29wcyAJPSAmZm1yMl9pb2N0bF9vcHMsCisJLnJlbGVhc2UJPSB2aWRlb19kZXZpY2VfcmVsZWFzZV9lbXB0eSwKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IGZtcjJfaW5pdCh2b2lkKQpAQCAtNDQxLDcgKzQ0OSw3IEBACiAJZm1yMl91bml0LnN0ZXJlbyA9IDE7CiAJZm1yMl91bml0LmZsYWdzID0gVjRMMl9UVU5FUl9DQVBfTE9XOwogCWZtcjJfdW5pdC5jYXJkX3R5cGUgPSAwOwotCWZtcjJfcmFkaW8ucHJpdiA9ICZmbXIyX3VuaXQ7CisJdmlkZW9fc2V0X2RydmRhdGEoJmZtcjJfcmFkaW8sICZmbXIyX3VuaXQpOwogCiAJbXV0ZXhfaW5pdCgmbG9jayk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tc2k0NzB4LmMgYi9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLXNpNDcweC5jCmluZGV4IDE2YzdlZjIuLjU5MjBjZDMwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLXNpNDcweC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tc2k0NzB4LmMKQEAgLTEwNCw2ICsxMDQsNyBAQAogICoJCS0gaGFyZHdhcmUgZnJlcXVlbmN5IHNlZWsgc3VwcG9ydAogICoJCS0gYWZjIGluZGljYXRpb24KICAqCQktIG1vcmUgc2FmZXR5IGNoZWNrcywgbGV0IHNpNDcweF9nZXRfZnJlcSByZXR1cm4gZXJybm8KKyAqCQktIHZpZGlvYyBiZWhhdmlvciBjb3JyZWN0ZWQgYWNjb3JkaW5nIHRvIHY0bDIgc3BlYwogICoKICAqIFRvRG86CiAgKiAtIGFkZCBmaXJtd2FyZSBkb3dubG9hZC91cGRhdGUgc3VwcG9ydApAQCAtMTQxLDkgKzE0Miw5IEBACiAvKiBVU0IgRGV2aWNlIElEIExpc3QgKi8KIHN0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBzaTQ3MHhfdXNiX2RyaXZlcl9pZF90YWJsZVtdID0gewogCS8qIFNpbGljb24gTGFicyBVU0IgRk0gUmFkaW8gUmVmZXJlbmNlIERlc2lnbiAqLwotCXsgVVNCX0RFVklDRV9BTkRfSU5URVJGQUNFX0lORk8oMHgxMGM0LCAweDgxOGEsCVVTQl9DTEFTU19ISUQsIDAsIDApIH0sCisJeyBVU0JfREVWSUNFX0FORF9JTlRFUkZBQ0VfSU5GTygweDEwYzQsIDB4ODE4YSwgVVNCX0NMQVNTX0hJRCwgMCwgMCkgfSwKIAkvKiBBRFMvVGVjaCBGTSBSYWRpbyBSZWNlaXZlciAoZm9ybWVybHkgSW5zdGFudCBGTSBNdXNpYykgKi8KLQl7IFVTQl9ERVZJQ0VfQU5EX0lOVEVSRkFDRV9JTkZPKDB4MDZlMSwgMHhhMTU1LAlVU0JfQ0xBU1NfSElELCAwLCAwKSB9LAorCXsgVVNCX0RFVklDRV9BTkRfSU5URVJGQUNFX0lORk8oMHgwNmUxLCAweGExNTUsIFVTQl9DTEFTU19ISUQsIDAsIDApIH0sCiAJLyogVGVybWluYXRpbmcgZW50cnkgKi8KIAl7IH0KIH07CkBAIC0xNTcsNyArMTU4LDcgQEAKIAogLyogUmFkaW8gTnIgKi8KIHN0YXRpYyBpbnQgcmFkaW9fbnIgPSAtMTsKLW1vZHVsZV9wYXJhbShyYWRpb19uciwgaW50LCAwKTsKK21vZHVsZV9wYXJhbShyYWRpb19uciwgaW50LCAwNDQ0KTsKIE1PRFVMRV9QQVJNX0RFU0MocmFkaW9fbnIsICJSYWRpbyBOciIpOwogCiAvKiBTcGFjaW5nIChrSHopICovCkBAIC0xNjUsNDIgKzE2Niw0MiBAQAogLyogMTogMTAwIGtIeiAoRXVyb3BlLCBKYXBhbikgKi8KIC8qIDI6ICA1MCBrSHogKi8KIHN0YXRpYyB1bnNpZ25lZCBzaG9ydCBzcGFjZSA9IDI7Ci1tb2R1bGVfcGFyYW0oc3BhY2UsIHVzaG9ydCwgMCk7Ci1NT0RVTEVfUEFSTV9ERVNDKHJhZGlvX25yLCAiU3BhY2luZzogMD0yMDBrSHogMT0xMDBrSHogKjI9NTBrSHoqIik7Cittb2R1bGVfcGFyYW0oc3BhY2UsIHVzaG9ydCwgMDQ0NCk7CitNT0RVTEVfUEFSTV9ERVNDKHNwYWNlLCAiU3BhY2luZzogMD0yMDBrSHogMT0xMDBrSHogKjI9NTBrSHoqIik7CiAKIC8qIEJvdHRvbSBvZiBCYW5kIChNSHopICovCiAvKiAwOiA4Ny41IC0gMTA4IE1IeiAoVVNBLCBFdXJvcGUpKi8KIC8qIDE6IDc2ICAgLSAxMDggTUh6IChKYXBhbiB3aWRlIGJhbmQpICovCiAvKiAyOiA3NiAgIC0gIDkwIE1IeiAoSmFwYW4pICovCiBzdGF0aWMgdW5zaWduZWQgc2hvcnQgYmFuZCA9IDE7Ci1tb2R1bGVfcGFyYW0oYmFuZCwgdXNob3J0LCAwKTsKLU1PRFVMRV9QQVJNX0RFU0MocmFkaW9fbnIsICJCYW5kOiAwPTg3LjUuLjEwOE1IeiAqMT03Ni4uMTA4TUh6KiAyPTc2Li45ME1IeiIpOworbW9kdWxlX3BhcmFtKGJhbmQsIHVzaG9ydCwgMDQ0NCk7CitNT0RVTEVfUEFSTV9ERVNDKGJhbmQsICJCYW5kOiAwPTg3LjUuLjEwOE1IeiAqMT03Ni4uMTA4TUh6KiAyPTc2Li45ME1IeiIpOwogCiAvKiBEZS1lbXBoYXNpcyAqLwogLyogMDogNzUgdXMgKFVTQSkgKi8KIC8qIDE6IDUwIHVzIChFdXJvcGUsIEF1c3RyYWxpYSwgSmFwYW4pICovCiBzdGF0aWMgdW5zaWduZWQgc2hvcnQgZGUgPSAxOwotbW9kdWxlX3BhcmFtKGRlLCB1c2hvcnQsIDApOwotTU9EVUxFX1BBUk1fREVTQyhyYWRpb19uciwgIkRlLWVtcGhhc2lzOiAwPTc1dXMgKjE9NTB1cyoiKTsKK21vZHVsZV9wYXJhbShkZSwgdXNob3J0LCAwNDQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoZGUsICJEZS1lbXBoYXNpczogMD03NXVzICoxPTUwdXMqIik7CiAKIC8qIFVTQiB0aW1lb3V0ICovCiBzdGF0aWMgdW5zaWduZWQgaW50IHVzYl90aW1lb3V0ID0gNTAwOwotbW9kdWxlX3BhcmFtKHVzYl90aW1lb3V0LCB1aW50LCAwKTsKK21vZHVsZV9wYXJhbSh1c2JfdGltZW91dCwgdWludCwgMDY0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKHVzYl90aW1lb3V0LCAiVVNCIHRpbWVvdXQgKG1zKTogKjUwMCoiKTsKIAogLyogVHVuZSB0aW1lb3V0ICovCiBzdGF0aWMgdW5zaWduZWQgaW50IHR1bmVfdGltZW91dCA9IDMwMDA7Ci1tb2R1bGVfcGFyYW0odHVuZV90aW1lb3V0LCB1aW50LCAwKTsKK21vZHVsZV9wYXJhbSh0dW5lX3RpbWVvdXQsIHVpbnQsIDA2NDQpOwogTU9EVUxFX1BBUk1fREVTQyh0dW5lX3RpbWVvdXQsICJUdW5lIHRpbWVvdXQ6ICozMDAwKiIpOwogCiAvKiBTZWVrIHRpbWVvdXQgKi8KIHN0YXRpYyB1bnNpZ25lZCBpbnQgc2Vla190aW1lb3V0ID0gNTAwMDsKLW1vZHVsZV9wYXJhbShzZWVrX3RpbWVvdXQsIHVpbnQsIDApOworbW9kdWxlX3BhcmFtKHNlZWtfdGltZW91dCwgdWludCwgMDY0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKHNlZWtfdGltZW91dCwgIlNlZWsgdGltZW91dDogKjUwMDAqIik7CiAKIC8qIFJEUyBidWZmZXIgYmxvY2tzICovCiBzdGF0aWMgdW5zaWduZWQgaW50IHJkc19idWYgPSAxMDA7Ci1tb2R1bGVfcGFyYW0ocmRzX2J1ZiwgdWludCwgMCk7Cittb2R1bGVfcGFyYW0ocmRzX2J1ZiwgdWludCwgMDQ0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKHJkc19idWYsICJSRFMgYnVmZmVyIGVudHJpZXM6ICoxMDAqIik7CiAKIC8qIFJEUyBtYXhpbXVtIGJsb2NrIGVycm9ycyAqLwpAQCAtMjA5LDcgKzIxMCw3IEBACiAvKiAxIG1lYW5zIDEtMiAgZXJyb3JzIHJlcXVpcmluZyBjb3JyZWN0aW9uICh1c2VkIGJ5IG9yaWdpbmFsIFVTQlJhZGlvLmV4ZSkgKi8KIC8qIDIgbWVhbnMgMy01ICBlcnJvcnMgcmVxdWlyaW5nIGNvcnJlY3Rpb24gKi8KIC8qIDMgbWVhbnMgICA2KyBlcnJvcnMgb3IgZXJyb3JzIGluIGNoZWNrd29yZCwgY29ycmVjdGlvbiBub3QgcG9zc2libGUgKi8KLW1vZHVsZV9wYXJhbShtYXhfcmRzX2Vycm9ycywgdXNob3J0LCAwKTsKK21vZHVsZV9wYXJhbShtYXhfcmRzX2Vycm9ycywgdXNob3J0LCAwNjQ0KTsKIE1PRFVMRV9QQVJNX0RFU0MobWF4X3Jkc19lcnJvcnMsICJSRFMgbWF4aW11bSBibG9jayBlcnJvcnM6ICoxKiIpOwogCiAvKiBSRFMgcG9sbCBmcmVxdWVuY3kgKi8KQEAgLTIxOCw3ICsyMTksNyBAQAogLyogNTAgaXMgdXNlZCBieSByYWRpby1jYWRldCAqLwogLyogNzUgc2hvdWxkIGJlIG9rYXkgKi8KIC8qIDgwIGlzIHRoZSB1c3VhbCBSRFMgcmVjZWl2ZSBpbnRlcnZhbCAqLwotbW9kdWxlX3BhcmFtKHJkc19wb2xsX3RpbWUsIHVpbnQsIDApOworbW9kdWxlX3BhcmFtKHJkc19wb2xsX3RpbWUsIHVpbnQsIDA2NDQpOwogTU9EVUxFX1BBUk1fREVTQyhyZHNfcG9sbF90aW1lLCAiUkRTIHBvbGwgdGltZSAobXMpOiAqNDAqIik7CiAKIApAQCAtNjY3LDIzICs2NjgsMjkgQEAKIAlpbnQgcmV0dmFsOwogCiAJLyogU3BhY2luZyAoa0h6KSAqLwotCXN3aXRjaCAoc3BhY2UpIHsKKwlzd2l0Y2ggKChyYWRpby0+cmVnaXN0ZXJzW1NZU0NPTkZJRzJdICYgU1lTQ09ORklHMl9TUEFDRSkgPj4gNCkgewogCS8qIDA6IDIwMCBrSHogKFVTQSwgQXVzdHJhbGlhKSAqLwotCWNhc2UgMCA6IHNwYWNpbmcgPSAwLjIwMCAqIEZSRVFfTVVMOyBicmVhazsKKwljYXNlIDA6CisJCXNwYWNpbmcgPSAwLjIwMCAqIEZSRVFfTVVMOyBicmVhazsKIAkvKiAxOiAxMDAga0h6IChFdXJvcGUsIEphcGFuKSAqLwotCWNhc2UgMSA6IHNwYWNpbmcgPSAwLjEwMCAqIEZSRVFfTVVMOyBicmVhazsKKwljYXNlIDE6CisJCXNwYWNpbmcgPSAwLjEwMCAqIEZSRVFfTVVMOyBicmVhazsKIAkvKiAyOiAgNTAga0h6ICovCi0JZGVmYXVsdDogc3BhY2luZyA9IDAuMDUwICogRlJFUV9NVUw7IGJyZWFrOworCWRlZmF1bHQ6CisJCXNwYWNpbmcgPSAwLjA1MCAqIEZSRVFfTVVMOyBicmVhazsKIAl9OwogCiAJLyogQm90dG9tIG9mIEJhbmQgKE1IeikgKi8KLQlzd2l0Y2ggKGJhbmQpIHsKKwlzd2l0Y2ggKChyYWRpby0+cmVnaXN0ZXJzW1NZU0NPTkZJRzJdICYgU1lTQ09ORklHMl9CQU5EKSA+PiA2KSB7CiAJLyogMDogODcuNSAtIDEwOCBNSHogKFVTQSwgRXVyb3BlKSAqLwotCWNhc2UgMCA6IGJhbmRfYm90dG9tID0gODcuNSAqIEZSRVFfTVVMOyBicmVhazsKKwljYXNlIDA6CisJCWJhbmRfYm90dG9tID0gODcuNSAqIEZSRVFfTVVMOyBicmVhazsKIAkvKiAxOiA3NiAgIC0gMTA4IE1IeiAoSmFwYW4gd2lkZSBiYW5kKSAqLwotCWRlZmF1bHQ6IGJhbmRfYm90dG9tID0gNzYgICAqIEZSRVFfTVVMOyBicmVhazsKKwlkZWZhdWx0OgorCQliYW5kX2JvdHRvbSA9IDc2ICAgKiBGUkVRX01VTDsgYnJlYWs7CiAJLyogMjogNzYgICAtICA5MCBNSHogKEphcGFuKSAqLwotCWNhc2UgMiA6IGJhbmRfYm90dG9tID0gNzYgICAqIEZSRVFfTVVMOyBicmVhazsKKwljYXNlIDI6CisJCWJhbmRfYm90dG9tID0gNzYgICAqIEZSRVFfTVVMOyBicmVhazsKIAl9OwogCiAJLyogcmVhZCBjaGFubmVsICovCkBAIC03MDYsMjMgKzcxMywyOSBAQAogCXVuc2lnbmVkIHNob3J0IGNoYW47CiAKIAkvKiBTcGFjaW5nIChrSHopICovCi0Jc3dpdGNoIChzcGFjZSkgeworCXN3aXRjaCAoKHJhZGlvLT5yZWdpc3RlcnNbU1lTQ09ORklHMl0gJiBTWVNDT05GSUcyX1NQQUNFKSA+PiA0KSB7CiAJLyogMDogMjAwIGtIeiAoVVNBLCBBdXN0cmFsaWEpICovCi0JY2FzZSAwIDogc3BhY2luZyA9IDAuMjAwICogRlJFUV9NVUw7IGJyZWFrOworCWNhc2UgMDoKKwkJc3BhY2luZyA9IDAuMjAwICogRlJFUV9NVUw7IGJyZWFrOwogCS8qIDE6IDEwMCBrSHogKEV1cm9wZSwgSmFwYW4pICovCi0JY2FzZSAxIDogc3BhY2luZyA9IDAuMTAwICogRlJFUV9NVUw7IGJyZWFrOworCWNhc2UgMToKKwkJc3BhY2luZyA9IDAuMTAwICogRlJFUV9NVUw7IGJyZWFrOwogCS8qIDI6ICA1MCBrSHogKi8KLQlkZWZhdWx0OiBzcGFjaW5nID0gMC4wNTAgKiBGUkVRX01VTDsgYnJlYWs7CisJZGVmYXVsdDoKKwkJc3BhY2luZyA9IDAuMDUwICogRlJFUV9NVUw7IGJyZWFrOwogCX07CiAKIAkvKiBCb3R0b20gb2YgQmFuZCAoTUh6KSAqLwotCXN3aXRjaCAoYmFuZCkgeworCXN3aXRjaCAoKHJhZGlvLT5yZWdpc3RlcnNbU1lTQ09ORklHMl0gJiBTWVNDT05GSUcyX0JBTkQpID4+IDYpIHsKIAkvKiAwOiA4Ny41IC0gMTA4IE1IeiAoVVNBLCBFdXJvcGUpICovCi0JY2FzZSAwIDogYmFuZF9ib3R0b20gPSA4Ny41ICogRlJFUV9NVUw7IGJyZWFrOworCWNhc2UgMDoKKwkJYmFuZF9ib3R0b20gPSA4Ny41ICogRlJFUV9NVUw7IGJyZWFrOwogCS8qIDE6IDc2ICAgLSAxMDggTUh6IChKYXBhbiB3aWRlIGJhbmQpICovCi0JZGVmYXVsdDogYmFuZF9ib3R0b20gPSA3NiAgICogRlJFUV9NVUw7IGJyZWFrOworCWRlZmF1bHQ6CisJCWJhbmRfYm90dG9tID0gNzYgICAqIEZSRVFfTVVMOyBicmVhazsKIAkvKiAyOiA3NiAgIC0gIDkwIE1IeiAoSmFwYW4pICovCi0JY2FzZSAyIDogYmFuZF9ib3R0b20gPSA3NiAgICogRlJFUV9NVUw7IGJyZWFrOworCWNhc2UgMjoKKwkJYmFuZF9ib3R0b20gPSA3NiAgICogRlJFUV9NVUw7IGJyZWFrOwogCX07CiAKIAkvKiBDaGFuID0gWyBGcmVxIChNaHopIC0gQm90dG9tIG9mIEJhbmQgKE1IeikgXSAvIFNwYWNpbmcgKGtIeikgKi8KQEAgLTk4Niw3ICs5OTksNyBAQAogc3RhdGljIHNzaXplX3Qgc2k0NzB4X2ZvcHNfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1ZiwKIAkJc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCiB7Ci0Jc3RydWN0IHNpNDcweF9kZXZpY2UgKnJhZGlvID0gdmlkZW9fZ2V0X2RydmRhdGEodmlkZW9fZGV2ZGF0YShmaWxlKSk7CisJc3RydWN0IHNpNDcweF9kZXZpY2UgKnJhZGlvID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKIAlpbnQgcmV0dmFsID0gMDsKIAl1bnNpZ25lZCBpbnQgYmxvY2tfY291bnQgPSAwOwogCkBAIC0xMDQ3LDcgKzEwNjAsNyBAQAogc3RhdGljIHVuc2lnbmVkIGludCBzaTQ3MHhfZm9wc19wb2xsKHN0cnVjdCBmaWxlICpmaWxlLAogCQlzdHJ1Y3QgcG9sbF90YWJsZV9zdHJ1Y3QgKnB0cykKIHsKLQlzdHJ1Y3Qgc2k0NzB4X2RldmljZSAqcmFkaW8gPSB2aWRlb19nZXRfZHJ2ZGF0YSh2aWRlb19kZXZkYXRhKGZpbGUpKTsKKwlzdHJ1Y3Qgc2k0NzB4X2RldmljZSAqcmFkaW8gPSB2aWRlb19kcnZkYXRhKGZpbGUpOwogCWludCByZXR2YWwgPSAwOwogCiAJLyogc3dpdGNoIG9uIHJkcyByZWNlcHRpb24gKi8KQEAgLTEwNzEsOSArMTA4NCwxMCBAQAogICovCiBzdGF0aWMgaW50IHNpNDcweF9mb3BzX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCiB7Ci0Jc3RydWN0IHNpNDcweF9kZXZpY2UgKnJhZGlvID0gdmlkZW9fZ2V0X2RydmRhdGEodmlkZW9fZGV2ZGF0YShmaWxlKSk7CisJc3RydWN0IHNpNDcweF9kZXZpY2UgKnJhZGlvID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKIAlpbnQgcmV0dmFsOwogCisJbG9ja19rZXJuZWwoKTsKIAlyYWRpby0+dXNlcnMrKzsKIAogCXJldHZhbCA9IHVzYl9hdXRvcG1fZ2V0X2ludGVyZmFjZShyYWRpby0+aW50Zik7CkBAIC0xMDkwLDYgKzExMDQsNyBAQAogCX0KIAogZG9uZToKKwl1bmxvY2tfa2VybmVsKCk7CiAJcmV0dXJuIHJldHZhbDsKIH0KIApAQCAtMTA5OSw3ICsxMTE0LDcgQEAKICAqLwogc3RhdGljIGludCBzaTQ3MHhfZm9wc19yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQogewotCXN0cnVjdCBzaTQ3MHhfZGV2aWNlICpyYWRpbyA9IHZpZGVvX2dldF9kcnZkYXRhKHZpZGVvX2RldmRhdGEoZmlsZSkpOworCXN0cnVjdCBzaTQ3MHhfZGV2aWNlICpyYWRpbyA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CiAJaW50IHJldHZhbCA9IDA7CiAKIAkvKiBzYWZldHkgY2hlY2sgKi8KQEAgLTExNjIsNyArMTE3Nyw2IEBACiAgKiBzaTQ3MHhfdjRsMl9xdWVyeWN0cmwgLSBxdWVyeSBjb250cm9sCiAgKi8KIHN0YXRpYyBzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgc2k0NzB4X3Y0bDJfcXVlcnljdHJsW10gPSB7Ci0vKiBISU5UOiB0aGUgZGlzYWJsZWQgY29udHJvbHMgYXJlIG9ubHkgaGVyZSB0byBzYXRpZnkga3JhZGlvIGFuZCBzdWNoIGFwcHMgKi8KIAl7CiAJCS5pZAkJPSBWNEwyX0NJRF9BVURJT19WT0xVTUUsCiAJCS50eXBlCQk9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCkBAIC0xMTczLDE4ICsxMTg3LDYgQEAKIAkJLmRlZmF1bHRfdmFsdWUJPSAxNSwKIAl9LAogCXsKLQkJLmlkCQk9IFY0TDJfQ0lEX0FVRElPX0JBTEFOQ0UsCi0JCS5mbGFncwkJPSBWNEwyX0NUUkxfRkxBR19ESVNBQkxFRCwKLQl9LAotCXsKLQkJLmlkCQk9IFY0TDJfQ0lEX0FVRElPX0JBU1MsCi0JCS5mbGFncwkJPSBWNEwyX0NUUkxfRkxBR19ESVNBQkxFRCwKLQl9LAotCXsKLQkJLmlkCQk9IFY0TDJfQ0lEX0FVRElPX1RSRUJMRSwKLQkJLmZsYWdzCQk9IFY0TDJfQ1RSTF9GTEFHX0RJU0FCTEVELAotCX0sCi0JewogCQkuaWQJCT0gVjRMMl9DSURfQVVESU9fTVVURSwKIAkJLnR5cGUJCT0gVjRMMl9DVFJMX1RZUEVfQk9PTEVBTiwKIAkJLm5hbWUJCT0gIk11dGUiLApAQCAtMTE5MywxMCArMTE5NSw2IEBACiAJCS5zdGVwCQk9IDEsCiAJCS5kZWZhdWx0X3ZhbHVlCT0gMSwKIAl9LAotCXsKLQkJLmlkCQk9IFY0TDJfQ0lEX0FVRElPX0xPVURORVNTLAotCQkuZmxhZ3MJCT0gVjRMMl9DVFJMX0ZMQUdfRElTQUJMRUQsCi0JfSwKIH07CiAKIApAQCAtMTIxOCw1NiArMTIxNiwzNCBAQAogCiAKIC8qCi0gKiBzaTQ3MHhfdmlkaW9jX2dfaW5wdXQgLSBnZXQgaW5wdXQKLSAqLwotc3RhdGljIGludCBzaTQ3MHhfdmlkaW9jX2dfaW5wdXQoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCi0JCXVuc2lnbmVkIGludCAqaSkKLXsKLQkqaSA9IDA7Ci0KLQlyZXR1cm4gMDsKLX0KLQotCi0vKgotICogc2k0NzB4X3ZpZGlvY19zX2lucHV0IC0gc2V0IGlucHV0Ci0gKi8KLXN0YXRpYyBpbnQgc2k0NzB4X3ZpZGlvY19zX2lucHV0KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LCB1bnNpZ25lZCBpbnQgaSkKLXsKLQlpbnQgcmV0dmFsID0gMDsKLQotCS8qIHNhZmV0eSBjaGVja3MgKi8KLQlpZiAoaSAhPSAwKQotCQlyZXR2YWwgPSAtRUlOVkFMOwotCi0JaWYgKHJldHZhbCA8IDApCi0JCXByaW50ayhLRVJOX1dBUk5JTkcgRFJJVkVSX05BTUUKLQkJCSI6IHNldCBpbnB1dCBmYWlsZWQgd2l0aCAlZFxuIiwgcmV0dmFsKTsKLQlyZXR1cm4gcmV0dmFsOwotfQotCi0KLS8qCiAgKiBzaTQ3MHhfdmlkaW9jX3F1ZXJ5Y3RybCAtIGVudW1lcmF0ZSBjb250cm9sIGl0ZW1zCiAgKi8KIHN0YXRpYyBpbnQgc2k0NzB4X3ZpZGlvY19xdWVyeWN0cmwoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCXN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCAqcWMpCiB7Ci0JdW5zaWduZWQgY2hhciBpOworCXVuc2lnbmVkIGNoYXIgaSA9IDA7CiAJaW50IHJldHZhbCA9IC1FSU5WQUw7CiAKLQkvKiBzYWZldHkgY2hlY2tzICovCi0JaWYgKCFxYy0+aWQpCisJLyogYWJvcnQgaWYgcWMtPmlkIGlzIGJlbG93IFY0TDJfQ0lEX0JBU0UgKi8KKwlpZiAocWMtPmlkIDwgVjRMMl9DSURfQkFTRSkKIAkJZ290byBkb25lOwogCisJLyogc2VhcmNoIHZpZGVvIGNvbnRyb2wgKi8KIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShzaTQ3MHhfdjRsMl9xdWVyeWN0cmwpOyBpKyspIHsKIAkJaWYgKHFjLT5pZCA9PSBzaTQ3MHhfdjRsMl9xdWVyeWN0cmxbaV0uaWQpIHsKIAkJCW1lbWNweShxYywgJihzaTQ3MHhfdjRsMl9xdWVyeWN0cmxbaV0pLCBzaXplb2YoKnFjKSk7Ci0JCQlyZXR2YWwgPSAwOworCQkJcmV0dmFsID0gMDsgLyogZm91bmQgKi8KIAkJCWJyZWFrOwogCQl9CiAJfQogCisJLyogZGlzYWJsZSB1bnN1cHBvcnRlZCBiYXNlIGNvbnRyb2xzICovCisJLyogdG8gc2F0aXNmeSBrcmFkaW8gYW5kIHN1Y2ggYXBwcyAqLworCWlmICgocmV0dmFsID09IC1FSU5WQUwpICYmIChxYy0+aWQgPCBWNEwyX0NJRF9MQVNUUDEpKSB7CisJCXFjLT5mbGFncyA9IFY0TDJfQ1RSTF9GTEFHX0RJU0FCTEVEOworCQlyZXR2YWwgPSAwOworCX0KKwogZG9uZToKIAlpZiAocmV0dmFsIDwgMCkKIAkJcHJpbnRrKEtFUk5fV0FSTklORyBEUklWRVJfTkFNRQpAQCAtMTI4Miw3ICsxMjU4LDcgQEAKIHN0YXRpYyBpbnQgc2k0NzB4X3ZpZGlvY19nX2N0cmwoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCXN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwpCiB7Ci0Jc3RydWN0IHNpNDcweF9kZXZpY2UgKnJhZGlvID0gdmlkZW9fZ2V0X2RydmRhdGEodmlkZW9fZGV2ZGF0YShmaWxlKSk7CisJc3RydWN0IHNpNDcweF9kZXZpY2UgKnJhZGlvID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKIAlpbnQgcmV0dmFsID0gMDsKIAogCS8qIHNhZmV0eSBjaGVja3MgKi8KQEAgLTEzMTgsNyArMTI5NCw3IEBACiBzdGF0aWMgaW50IHNpNDcweF92aWRpb2Nfc19jdHJsKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQlzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsKQogewotCXN0cnVjdCBzaTQ3MHhfZGV2aWNlICpyYWRpbyA9IHZpZGVvX2dldF9kcnZkYXRhKHZpZGVvX2RldmRhdGEoZmlsZSkpOworCXN0cnVjdCBzaTQ3MHhfZGV2aWNlICpyYWRpbyA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CiAJaW50IHJldHZhbCA9IDA7CiAKIAkvKiBzYWZldHkgY2hlY2tzICovCkBAIC0xMzU4LDQ0ICsxMzM0LDEzIEBACiBzdGF0aWMgaW50IHNpNDcweF92aWRpb2NfZ19hdWRpbyhzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJc3RydWN0IHY0bDJfYXVkaW8gKmF1ZGlvKQogewotCWludCByZXR2YWwgPSAwOwotCi0JLyogc2FmZXR5IGNoZWNrcyAqLwotCWlmIChhdWRpby0+aW5kZXggIT0gMCkgewotCQlyZXR2YWwgPSAtRUlOVkFMOwotCQlnb3RvIGRvbmU7Ci0JfQotCisJLyogZHJpdmVyIGNvbnN0YW50cyAqLworCWF1ZGlvLT5pbmRleCA9IDA7CiAJc3RyY3B5KGF1ZGlvLT5uYW1lLCAiUmFkaW8iKTsKIAlhdWRpby0+Y2FwYWJpbGl0eSA9IFY0TDJfQVVEQ0FQX1NURVJFTzsKKwlhdWRpby0+bW9kZSA9IDA7CiAKLWRvbmU6Ci0JaWYgKHJldHZhbCA8IDApCi0JCXByaW50ayhLRVJOX1dBUk5JTkcgRFJJVkVSX05BTUUKLQkJCSI6IGdldCBhdWRpbyBmYWlsZWQgd2l0aCAlZFxuIiwgcmV0dmFsKTsKLQlyZXR1cm4gcmV0dmFsOwotfQotCi0KLS8qCi0gKiBzaTQ3MHhfdmlkaW9jX3NfYXVkaW8gLSBzZXQgYXVkaW8gYXR0cmlidXRlcwotICovCi1zdGF0aWMgaW50IHNpNDcweF92aWRpb2Nfc19hdWRpbyhzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKLQkJc3RydWN0IHY0bDJfYXVkaW8gKmF1ZGlvKQotewotCWludCByZXR2YWwgPSAwOwotCi0JLyogc2FmZXR5IGNoZWNrcyAqLwotCWlmIChhdWRpby0+aW5kZXggIT0gMCkgewotCQlyZXR2YWwgPSAtRUlOVkFMOwotCQlnb3RvIGRvbmU7Ci0JfQotCi1kb25lOgotCWlmIChyZXR2YWwgPCAwKQotCQlwcmludGsoS0VSTl9XQVJOSU5HIERSSVZFUl9OQU1FCi0JCQkiOiBzZXQgYXVkaW8gZmFpbGVkIHdpdGggJWRcbiIsIHJldHZhbCk7Ci0JcmV0dXJuIHJldHZhbDsKKwlyZXR1cm4gMDsKIH0KIAogCkBAIC0xNDA1LDcgKzEzNTAsNyBAQAogc3RhdGljIGludCBzaTQ3MHhfdmlkaW9jX2dfdHVuZXIoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCXN0cnVjdCB2NGwyX3R1bmVyICp0dW5lcikKIHsKLQlzdHJ1Y3Qgc2k0NzB4X2RldmljZSAqcmFkaW8gPSB2aWRlb19nZXRfZHJ2ZGF0YSh2aWRlb19kZXZkYXRhKGZpbGUpKTsKKwlzdHJ1Y3Qgc2k0NzB4X2RldmljZSAqcmFkaW8gPSB2aWRlb19kcnZkYXRhKGZpbGUpOwogCWludCByZXR2YWwgPSAwOwogCiAJLyogc2FmZXR5IGNoZWNrcyAqLwpAQCAtMTQxMyw3ICsxMzU4LDcgQEAKIAkJcmV0dmFsID0gLUVJTzsKIAkJZ290byBkb25lOwogCX0KLQlpZiAoKHR1bmVyLT5pbmRleCAhPSAwKSAmJiAodHVuZXItPnR5cGUgIT0gVjRMMl9UVU5FUl9SQURJTykpIHsKKwlpZiAodHVuZXItPmluZGV4ICE9IDApIHsKIAkJcmV0dmFsID0gLUVJTlZBTDsKIAkJZ290byBkb25lOwogCX0KQEAgLTE0MjIsOCArMTM2NywxMyBAQAogCWlmIChyZXR2YWwgPCAwKQogCQlnb3RvIGRvbmU7CiAKKwkvKiBkcml2ZXIgY29uc3RhbnRzICovCiAJc3RyY3B5KHR1bmVyLT5uYW1lLCAiRk0iKTsKLQlzd2l0Y2ggKGJhbmQpIHsKKwl0dW5lci0+dHlwZSA9IFY0TDJfVFVORVJfUkFESU87CisJdHVuZXItPmNhcGFiaWxpdHkgPSBWNEwyX1RVTkVSX0NBUF9MT1cgfCBWNEwyX1RVTkVSX0NBUF9TVEVSRU87CisKKwkvKiByYW5nZSBsaW1pdHMgKi8KKwlzd2l0Y2ggKChyYWRpby0+cmVnaXN0ZXJzW1NZU0NPTkZJRzJdICYgU1lTQ09ORklHMl9CQU5EKSA+PiA2KSB7CiAJLyogMDogODcuNSAtIDEwOCBNSHogKFVTQSwgRXVyb3BlLCBkZWZhdWx0KSAqLwogCWRlZmF1bHQ6CiAJCXR1bmVyLT5yYW5nZWxvdyAgPSAgODcuNSAqIEZSRVFfTVVMOwpAQCAtMTQ0MCwxNCArMTM5MCwxOCBAQAogCQl0dW5lci0+cmFuZ2VoaWdoID0gIDkwICAgKiBGUkVRX01VTDsKIAkJYnJlYWs7CiAJfTsKLQl0dW5lci0+cnhzdWJjaGFucyA9IFY0TDJfVFVORVJfU1VCX01PTk8gfCBWNEwyX1RVTkVSX1NVQl9TVEVSRU87Ci0JdHVuZXItPmNhcGFiaWxpdHkgPSBWNEwyX1RVTkVSX0NBUF9MT1c7CiAKLQkvKiBTdGVyZW8gaW5kaWNhdG9yID09IFN0ZXJlbyAoaW5zdGVhZCBvZiBNb25vKSAqLworCS8qIHN0ZXJlbyBpbmRpY2F0b3IgPT0gc3RlcmVvIChpbnN0ZWFkIG9mIG1vbm8pICovCiAJaWYgKChyYWRpby0+cmVnaXN0ZXJzW1NUQVRVU1JTU0ldICYgU1RBVFVTUlNTSV9TVCkgPT0gMSkKLQkJdHVuZXItPmF1ZG1vZGUgPSBWNEwyX1RVTkVSX01PREVfU1RFUkVPOworCQl0dW5lci0+cnhzdWJjaGFucyA9IFY0TDJfVFVORVJfU1VCX01PTk8gfCBWNEwyX1RVTkVSX1NVQl9TVEVSRU87CiAJZWxzZQorCQl0dW5lci0+cnhzdWJjaGFucyA9IFY0TDJfVFVORVJfU1VCX01PTk87CisKKwkvKiBtb25vL3N0ZXJlbyBzZWxlY3RvciAqLworCWlmICgocmFkaW8tPnJlZ2lzdGVyc1tQT1dFUkNGR10gJiBQT1dFUkNGR19NT05PKSA9PSAxKQogCQl0dW5lci0+YXVkbW9kZSA9IFY0TDJfVFVORVJfTU9ERV9NT05POworCWVsc2UKKwkJdHVuZXItPmF1ZG1vZGUgPSBWNEwyX1RVTkVSX01PREVfU1RFUkVPOwogCiAJLyogbWluIGlzIHdvcnN0LCBtYXggaXMgYmVzdDsgc2lnbmFsOjAuLjB4ZmZmZjsgcnNzaTogMC4uMHhmZiAqLwogCXR1bmVyLT5zaWduYWwgPSAocmFkaW8tPnJlZ2lzdGVyc1tTVEFUVVNSU1NJXSAmIFNUQVRVU1JTU0lfUlNTSSkKQEAgLTE0NzEsMjQgKzE0MjUsMjkgQEAKIHN0YXRpYyBpbnQgc2k0NzB4X3ZpZGlvY19zX3R1bmVyKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQlzdHJ1Y3QgdjRsMl90dW5lciAqdHVuZXIpCiB7Ci0Jc3RydWN0IHNpNDcweF9kZXZpY2UgKnJhZGlvID0gdmlkZW9fZ2V0X2RydmRhdGEodmlkZW9fZGV2ZGF0YShmaWxlKSk7Ci0JaW50IHJldHZhbCA9IDA7CisJc3RydWN0IHNpNDcweF9kZXZpY2UgKnJhZGlvID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKKwlpbnQgcmV0dmFsID0gLUVJTlZBTDsKIAogCS8qIHNhZmV0eSBjaGVja3MgKi8KIAlpZiAocmFkaW8tPmRpc2Nvbm5lY3RlZCkgewogCQlyZXR2YWwgPSAtRUlPOwogCQlnb3RvIGRvbmU7CiAJfQotCWlmICgodHVuZXItPmluZGV4ICE9IDApICYmICh0dW5lci0+dHlwZSAhPSBWNEwyX1RVTkVSX1JBRElPKSkgewotCQlyZXR2YWwgPSAtRUlOVkFMOworCWlmICh0dW5lci0+aW5kZXggIT0gMCkKKwkJZ290byBkb25lOworCisJLyogbW9uby9zdGVyZW8gc2VsZWN0b3IgKi8KKwlzd2l0Y2ggKHR1bmVyLT5hdWRtb2RlKSB7CisJY2FzZSBWNEwyX1RVTkVSX01PREVfTU9OTzoKKwkJcmFkaW8tPnJlZ2lzdGVyc1tQT1dFUkNGR10gfD0gUE9XRVJDRkdfTU9OTzsgIC8qIGZvcmNlIG1vbm8gKi8KKwkJYnJlYWs7CisJY2FzZSBWNEwyX1RVTkVSX01PREVfU1RFUkVPOgorCQlyYWRpby0+cmVnaXN0ZXJzW1BPV0VSQ0ZHXSAmPSB+UE9XRVJDRkdfTU9OTzsgLyogdHJ5IHN0ZXJlbyAqLworCQlicmVhazsKKwlkZWZhdWx0OgogCQlnb3RvIGRvbmU7CiAJfQogCi0JaWYgKHR1bmVyLT5hdWRtb2RlID09IFY0TDJfVFVORVJfTU9ERV9NT05PKQotCQlyYWRpby0+cmVnaXN0ZXJzW1BPV0VSQ0ZHXSB8PSBQT1dFUkNGR19NT05POyAgLyogZm9yY2UgbW9ubyAqLwotCWVsc2UKLQkJcmFkaW8tPnJlZ2lzdGVyc1tQT1dFUkNGR10gJj0gflBPV0VSQ0ZHX01PTk87IC8qIHRyeSBzdGVyZW8gKi8KLQogCXJldHZhbCA9IHNpNDcweF9zZXRfcmVnaXN0ZXIocmFkaW8sIFBPV0VSQ0ZHKTsKIAogZG9uZToKQEAgLTE1MDUsNyArMTQ2NCw3IEBACiBzdGF0aWMgaW50IHNpNDcweF92aWRpb2NfZ19mcmVxdWVuY3koc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCXN0cnVjdCB2NGwyX2ZyZXF1ZW5jeSAqZnJlcSkKIHsKLQlzdHJ1Y3Qgc2k0NzB4X2RldmljZSAqcmFkaW8gPSB2aWRlb19nZXRfZHJ2ZGF0YSh2aWRlb19kZXZkYXRhKGZpbGUpKTsKKwlzdHJ1Y3Qgc2k0NzB4X2RldmljZSAqcmFkaW8gPSB2aWRlb19kcnZkYXRhKGZpbGUpOwogCWludCByZXR2YWwgPSAwOwogCiAJLyogc2FmZXR5IGNoZWNrcyAqLwpAQCAtMTUxMywxMSArMTQ3MiwxMiBAQAogCQlyZXR2YWwgPSAtRUlPOwogCQlnb3RvIGRvbmU7CiAJfQotCWlmICgoZnJlcS0+dHVuZXIgIT0gMCkgJiYgKGZyZXEtPnR5cGUgIT0gVjRMMl9UVU5FUl9SQURJTykpIHsKKwlpZiAoZnJlcS0+dHVuZXIgIT0gMCkgewogCQlyZXR2YWwgPSAtRUlOVkFMOwogCQlnb3RvIGRvbmU7CiAJfQogCisJZnJlcS0+dHlwZSA9IFY0TDJfVFVORVJfUkFESU87CiAJcmV0dmFsID0gc2k0NzB4X2dldF9mcmVxKHJhZGlvLCAmZnJlcS0+ZnJlcXVlbmN5KTsKIAogZG9uZToKQEAgLTE1MzQsNyArMTQ5NCw3IEBACiBzdGF0aWMgaW50IHNpNDcweF92aWRpb2Nfc19mcmVxdWVuY3koc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCXN0cnVjdCB2NGwyX2ZyZXF1ZW5jeSAqZnJlcSkKIHsKLQlzdHJ1Y3Qgc2k0NzB4X2RldmljZSAqcmFkaW8gPSB2aWRlb19nZXRfZHJ2ZGF0YSh2aWRlb19kZXZkYXRhKGZpbGUpKTsKKwlzdHJ1Y3Qgc2k0NzB4X2RldmljZSAqcmFkaW8gPSB2aWRlb19kcnZkYXRhKGZpbGUpOwogCWludCByZXR2YWwgPSAwOwogCiAJLyogc2FmZXR5IGNoZWNrcyAqLwpAQCAtMTU0Miw3ICsxNTAyLDcgQEAKIAkJcmV0dmFsID0gLUVJTzsKIAkJZ290byBkb25lOwogCX0KLQlpZiAoKGZyZXEtPnR1bmVyICE9IDApICYmIChmcmVxLT50eXBlICE9IFY0TDJfVFVORVJfUkFESU8pKSB7CisJaWYgKGZyZXEtPnR1bmVyICE9IDApIHsKIAkJcmV0dmFsID0gLUVJTlZBTDsKIAkJZ290byBkb25lOwogCX0KQEAgLTE1NjMsNyArMTUyMyw3IEBACiBzdGF0aWMgaW50IHNpNDcweF92aWRpb2Nfc19od19mcmVxX3NlZWsoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCXN0cnVjdCB2NGwyX2h3X2ZyZXFfc2VlayAqc2VlaykKIHsKLQlzdHJ1Y3Qgc2k0NzB4X2RldmljZSAqcmFkaW8gPSB2aWRlb19nZXRfZHJ2ZGF0YSh2aWRlb19kZXZkYXRhKGZpbGUpKTsKKwlzdHJ1Y3Qgc2k0NzB4X2RldmljZSAqcmFkaW8gPSB2aWRlb19kcnZkYXRhKGZpbGUpOwogCWludCByZXR2YWwgPSAwOwogCiAJLyogc2FmZXR5IGNoZWNrcyAqLwpAQCAtMTU3MSw3ICsxNTMxLDcgQEAKIAkJcmV0dmFsID0gLUVJTzsKIAkJZ290byBkb25lOwogCX0KLQlpZiAoKHNlZWstPnR1bmVyICE9IDApICYmIChzZWVrLT50eXBlICE9IFY0TDJfVFVORVJfUkFESU8pKSB7CisJaWYgKHNlZWstPnR1bmVyICE9IDApIHsKIAkJcmV0dmFsID0gLUVJTlZBTDsKIAkJZ290byBkb25lOwogCX0KQEAgLTE1ODYsMTUgKzE1NDYsMTYgQEAKIAlyZXR1cm4gcmV0dmFsOwogfQogCisKKy8qCisgKiBzaTQ3MHhfaW9jdGxfb3BzIC0gdmlkZW8gZGV2aWNlIGlvY3RsIG9wZXJhdGlvbnMKKyAqLwogc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX2lvY3RsX29wcyBzaTQ3MHhfaW9jdGxfb3BzID0gewogCS52aWRpb2NfcXVlcnljYXAJPSBzaTQ3MHhfdmlkaW9jX3F1ZXJ5Y2FwLAotCS52aWRpb2NfZ19pbnB1dAkJPSBzaTQ3MHhfdmlkaW9jX2dfaW5wdXQsCi0JLnZpZGlvY19zX2lucHV0CQk9IHNpNDcweF92aWRpb2Nfc19pbnB1dCwKIAkudmlkaW9jX3F1ZXJ5Y3RybAk9IHNpNDcweF92aWRpb2NfcXVlcnljdHJsLAogCS52aWRpb2NfZ19jdHJsCQk9IHNpNDcweF92aWRpb2NfZ19jdHJsLAogCS52aWRpb2Nfc19jdHJsCQk9IHNpNDcweF92aWRpb2Nfc19jdHJsLAogCS52aWRpb2NfZ19hdWRpbwkJPSBzaTQ3MHhfdmlkaW9jX2dfYXVkaW8sCi0JLnZpZGlvY19zX2F1ZGlvCQk9IHNpNDcweF92aWRpb2Nfc19hdWRpbywKIAkudmlkaW9jX2dfdHVuZXIJCT0gc2k0NzB4X3ZpZGlvY19nX3R1bmVyLAogCS52aWRpb2Nfc190dW5lcgkJPSBzaTQ3MHhfdmlkaW9jX3NfdHVuZXIsCiAJLnZpZGlvY19nX2ZyZXF1ZW5jeQk9IHNpNDcweF92aWRpb2NfZ19mcmVxdWVuY3ksCkBAIC0xNjAyLDE0ICsxNTYzLDE1IEBACiAJLnZpZGlvY19zX2h3X2ZyZXFfc2Vlawk9IHNpNDcweF92aWRpb2Nfc19od19mcmVxX3NlZWssCiB9OwogCisKIC8qCi0gKiBzaTQ3MHhfdmlkZGV2X3RhbXBsZXMgLSB2aWRlbyBkZXZpY2UgaW50ZXJmYWNlCisgKiBzaTQ3MHhfdmlkZGV2X3RlbXBsYXRlIC0gdmlkZW8gZGV2aWNlIGludGVyZmFjZQogICovCiBzdGF0aWMgc3RydWN0IHZpZGVvX2RldmljZSBzaTQ3MHhfdmlkZGV2X3RlbXBsYXRlID0gewogCS5mb3BzCQkJPSAmc2k0NzB4X2ZvcHMsCi0JLmlvY3RsX29wcyAJCT0gJnNpNDcweF9pb2N0bF9vcHMsCiAJLm5hbWUJCQk9IERSSVZFUl9OQU1FLAogCS5yZWxlYXNlCQk9IHZpZGVvX2RldmljZV9yZWxlYXNlLAorCS5pb2N0bF9vcHMJCT0gJnNpNDcweF9pb2N0bF9vcHMsCiB9OwogCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tdGVycmF0ZWMuYyBiL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tdGVycmF0ZWMuYwppbmRleCAwODc2ZmVjLi4wYWJiMTg2IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLXRlcnJhdGVjLmMKKysrIGIvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby10ZXJyYXRlYy5jCkBAIC03OSw2ICs3OSw3IEBACiAKIHN0cnVjdCB0dF9kZXZpY2UKIHsKKwl1bnNpZ25lZCBsb25nIGluX3VzZTsKIAlpbnQgcG9ydDsKIAlpbnQgY3Vydm9sOwogCXVuc2lnbmVkIGxvbmcgY3VyZnJlcTsKQEAgLTIyMCw4ICsyMjEsNyBAQAogc3RhdGljIGludCB2aWRpb2NfZ190dW5lcihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCQkJc3RydWN0IHY0bDJfdHVuZXIgKnYpCiB7Ci0Jc3RydWN0IHZpZGVvX2RldmljZSAqZGV2ID0gdmlkZW9fZGV2ZGF0YShmaWxlKTsKLQlzdHJ1Y3QgdHRfZGV2aWNlICp0dCA9IGRldi0+cHJpdjsKKwlzdHJ1Y3QgdHRfZGV2aWNlICp0dCA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CiAKIAlpZiAodi0+aW5kZXggPiAwKQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTI0OCw4ICsyNDgsNyBAQAogc3RhdGljIGludCB2aWRpb2Nfc19mcmVxdWVuY3koc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCQkJCXN0cnVjdCB2NGwyX2ZyZXF1ZW5jeSAqZikKIHsKLQlzdHJ1Y3QgdmlkZW9fZGV2aWNlICpkZXYgPSB2aWRlb19kZXZkYXRhKGZpbGUpOwotCXN0cnVjdCB0dF9kZXZpY2UgKnR0ID0gZGV2LT5wcml2OworCXN0cnVjdCB0dF9kZXZpY2UgKnR0ID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKIAogCXR0LT5jdXJmcmVxID0gZi0+ZnJlcXVlbmN5OwogCXR0X3NldGZyZXEodHQsIHR0LT5jdXJmcmVxKTsKQEAgLTI1OSw4ICsyNTgsNyBAQAogc3RhdGljIGludCB2aWRpb2NfZ19mcmVxdWVuY3koc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCQkJCXN0cnVjdCB2NGwyX2ZyZXF1ZW5jeSAqZikKIHsKLQlzdHJ1Y3QgdmlkZW9fZGV2aWNlICpkZXYgPSB2aWRlb19kZXZkYXRhKGZpbGUpOwotCXN0cnVjdCB0dF9kZXZpY2UgKnR0ID0gZGV2LT5wcml2OworCXN0cnVjdCB0dF9kZXZpY2UgKnR0ID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKIAogCWYtPnR5cGUgPSBWNEwyX1RVTkVSX1JBRElPOwogCWYtPmZyZXF1ZW5jeSA9IHR0LT5jdXJmcmVxOwpAQCAtMjg1LDggKzI4Myw3IEBACiBzdGF0aWMgaW50IHZpZGlvY19nX2N0cmwoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCQkJCXN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwpCiB7Ci0Jc3RydWN0IHZpZGVvX2RldmljZSAqZGV2ID0gdmlkZW9fZGV2ZGF0YShmaWxlKTsKLQlzdHJ1Y3QgdHRfZGV2aWNlICp0dCA9IGRldi0+cHJpdjsKKwlzdHJ1Y3QgdHRfZGV2aWNlICp0dCA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CiAKIAlzd2l0Y2ggKGN0cmwtPmlkKSB7CiAJY2FzZSBWNEwyX0NJRF9BVURJT19NVVRFOgpAQCAtMzA1LDggKzMwMiw3IEBACiBzdGF0aWMgaW50IHZpZGlvY19zX2N0cmwoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCQkJCXN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwpCiB7Ci0Jc3RydWN0IHZpZGVvX2RldmljZSAqZGV2ID0gdmlkZW9fZGV2ZGF0YShmaWxlKTsKLQlzdHJ1Y3QgdHRfZGV2aWNlICp0dCA9IGRldi0+cHJpdjsKKwlzdHJ1Y3QgdHRfZGV2aWNlICp0dCA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CiAKIAlzd2l0Y2ggKGN0cmwtPmlkKSB7CiAJY2FzZSBWNEwyX0NJRF9BVURJT19NVVRFOgpAQCAtMzU2LDEwICszNTIsMjEgQEAKIAogc3RhdGljIHN0cnVjdCB0dF9kZXZpY2UgdGVycmF0ZWNfdW5pdDsKIAorc3RhdGljIGludCB0ZXJyYXRlY19leGNsdXNpdmVfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlyZXR1cm4gdGVzdF9hbmRfc2V0X2JpdCgwLCAmdGVycmF0ZWNfdW5pdC5pbl91c2UpID8gLUVCVVNZIDogMDsKK30KKworc3RhdGljIGludCB0ZXJyYXRlY19leGNsdXNpdmVfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwljbGVhcl9iaXQoMCwgJnRlcnJhdGVjX3VuaXQuaW5fdXNlKTsKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdGVycmF0ZWNfZm9wcyA9IHsKIAkub3duZXIJCT0gVEhJU19NT0RVTEUsCi0JLm9wZW4gICAgICAgICAgID0gdmlkZW9fZXhjbHVzaXZlX29wZW4sCi0JLnJlbGVhc2UgICAgICAgID0gdmlkZW9fZXhjbHVzaXZlX3JlbGVhc2UsCisJLm9wZW4gICAgICAgICAgID0gdGVycmF0ZWNfZXhjbHVzaXZlX29wZW4sCisJLnJlbGVhc2UgICAgICAgID0gdGVycmF0ZWNfZXhjbHVzaXZlX3JlbGVhc2UsCiAJLmlvY3RsCQk9IHZpZGVvX2lvY3RsMiwKICNpZmRlZiBDT05GSUdfQ09NUEFUCiAJLmNvbXBhdF9pb2N0bAk9IHY0bF9jb21wYXRfaW9jdGwzMiwKQEAgLTM4Niw2ICszOTMsNyBAQAogCS5uYW1lCQk9ICJUZXJyYVRlYyBBY3RpdmVSYWRpbyIsCiAJLmZvcHMgICAgICAgICAgID0gJnRlcnJhdGVjX2ZvcHMsCiAJLmlvY3RsX29wcyAJPSAmdGVycmF0ZWNfaW9jdGxfb3BzLAorCS5yZWxlYXNlCT0gdmlkZW9fZGV2aWNlX3JlbGVhc2VfZW1wdHksCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCB0ZXJyYXRlY19pbml0KHZvaWQpCkBAIC00MDEsNyArNDA5LDcgQEAKIAkJcmV0dXJuIC1FQlVTWTsKIAl9CiAKLQl0ZXJyYXRlY19yYWRpby5wcml2PSZ0ZXJyYXRlY191bml0OworCXZpZGVvX3NldF9kcnZkYXRhKCZ0ZXJyYXRlY19yYWRpbywgJnRlcnJhdGVjX3VuaXQpOwogCiAJc3Bpbl9sb2NrX2luaXQoJmxvY2spOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLXRydXN0LmMgYi9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLXRydXN0LmMKaW5kZXggMTkzMTYxOS4uZTdiMTExZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby10cnVzdC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tdHJ1c3QuYwpAQCAtNzgsNiArNzgsNyBAQAogc3RhdGljIHVuc2lnbmVkIGxvbmcgY3VyZnJlcTsKIHN0YXRpYyBpbnQgY3Vyc3RlcmVvOwogc3RhdGljIGludCBjdXJtdXRlOworc3RhdGljIHVuc2lnbmVkIGxvbmcgaW5fdXNlOwogCiAvKiBpMmMgYWRkcmVzc2VzICovCiAjZGVmaW5lIFREQTczMThfQUREUiAweDg4CkBAIC0zMzYsMTAgKzMzNywyMSBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IHRydXN0X2V4Y2x1c2l2ZV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXJldHVybiB0ZXN0X2FuZF9zZXRfYml0KDAsICZpbl91c2UpID8gLUVCVVNZIDogMDsKK30KKworc3RhdGljIGludCB0cnVzdF9leGNsdXNpdmVfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwljbGVhcl9iaXQoMCwgJmluX3VzZSk7CisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHRydXN0X2ZvcHMgPSB7CiAJLm93bmVyCQk9IFRISVNfTU9EVUxFLAotCS5vcGVuICAgICAgICAgICA9IHZpZGVvX2V4Y2x1c2l2ZV9vcGVuLAotCS5yZWxlYXNlICAgICAgICA9IHZpZGVvX2V4Y2x1c2l2ZV9yZWxlYXNlLAorCS5vcGVuICAgICAgICAgICA9IHRydXN0X2V4Y2x1c2l2ZV9vcGVuLAorCS5yZWxlYXNlICAgICAgICA9IHRydXN0X2V4Y2x1c2l2ZV9yZWxlYXNlLAogCS5pb2N0bAkJPSB2aWRlb19pb2N0bDIsCiAjaWZkZWYgQ09ORklHX0NPTVBBVAogCS5jb21wYXRfaW9jdGwJPSB2NGxfY29tcGF0X2lvY3RsMzIsCkBAIC0zNjYsNiArMzc4LDcgQEAKIAkubmFtZQkJPSAiVHJ1c3QgRk0gUmFkaW8iLAogCS5mb3BzICAgICAgICAgICA9ICZ0cnVzdF9mb3BzLAogCS5pb2N0bF9vcHMgCT0gJnRydXN0X2lvY3RsX29wcywKKwkucmVsZWFzZQk9IHZpZGVvX2RldmljZV9yZWxlYXNlX2VtcHR5LAogfTsKIAogc3RhdGljIGludCBfX2luaXQgdHJ1c3RfaW5pdCh2b2lkKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby10eXBob29uLmMgYi9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLXR5cGhvb24uYwppbmRleCBmOGQ2MmNmLi45NTJlYzM1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLXR5cGhvb24uYworKysgYi9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLXR5cGhvb24uYwpAQCAtNzksNyArNzksNyBAQAogI2VuZGlmCiAKIHN0cnVjdCB0eXBob29uX2RldmljZSB7Ci0JaW50IHVzZXJzOworCXVuc2lnbmVkIGxvbmcgaW5fdXNlOwogCWludCBpb2Jhc2U7CiAJaW50IGN1cnZvbDsKIAlpbnQgbXV0ZWQ7CkBAIC0yMjMsOCArMjIzLDcgQEAKIHN0YXRpYyBpbnQgdmlkaW9jX3NfZnJlcXVlbmN5KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQkJCQlzdHJ1Y3QgdjRsMl9mcmVxdWVuY3kgKmYpCiB7Ci0Jc3RydWN0IHZpZGVvX2RldmljZSAqZGV2ID0gdmlkZW9fZGV2ZGF0YShmaWxlKTsKLQlzdHJ1Y3QgdHlwaG9vbl9kZXZpY2UgKnR5cGhvb24gPSBkZXYtPnByaXY7CisJc3RydWN0IHR5cGhvb25fZGV2aWNlICp0eXBob29uID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKIAogCXR5cGhvb24tPmN1cmZyZXEgPSBmLT5mcmVxdWVuY3k7CiAJdHlwaG9vbl9zZXRmcmVxKHR5cGhvb24sIHR5cGhvb24tPmN1cmZyZXEpOwpAQCAtMjM0LDggKzIzMyw3IEBACiBzdGF0aWMgaW50IHZpZGlvY19nX2ZyZXF1ZW5jeShzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCQkJc3RydWN0IHY0bDJfZnJlcXVlbmN5ICpmKQogewotCXN0cnVjdCB2aWRlb19kZXZpY2UgKmRldiA9IHZpZGVvX2RldmRhdGEoZmlsZSk7Ci0Jc3RydWN0IHR5cGhvb25fZGV2aWNlICp0eXBob29uID0gZGV2LT5wcml2OworCXN0cnVjdCB0eXBob29uX2RldmljZSAqdHlwaG9vbiA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CiAKIAlmLT50eXBlID0gVjRMMl9UVU5FUl9SQURJTzsKIAlmLT5mcmVxdWVuY3kgPSB0eXBob29uLT5jdXJmcmVxOwpAQCAtMjYxLDggKzI1OSw3IEBACiBzdGF0aWMgaW50IHZpZGlvY19nX2N0cmwoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCQkJCXN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwpCiB7Ci0Jc3RydWN0IHZpZGVvX2RldmljZSAqZGV2ID0gdmlkZW9fZGV2ZGF0YShmaWxlKTsKLQlzdHJ1Y3QgdHlwaG9vbl9kZXZpY2UgKnR5cGhvb24gPSBkZXYtPnByaXY7CisJc3RydWN0IHR5cGhvb25fZGV2aWNlICp0eXBob29uID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKIAogCXN3aXRjaCAoY3RybC0+aWQpIHsKIAljYXNlIFY0TDJfQ0lEX0FVRElPX01VVEU6CkBAIC0yNzgsOCArMjc1LDcgQEAKIHN0YXRpYyBpbnQgdmlkaW9jX3NfY3RybCAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCQkJCXN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwpCiB7Ci0Jc3RydWN0IHZpZGVvX2RldmljZSAqZGV2ID0gdmlkZW9fZGV2ZGF0YShmaWxlKTsKLQlzdHJ1Y3QgdHlwaG9vbl9kZXZpY2UgKnR5cGhvb24gPSBkZXYtPnByaXY7CisJc3RydWN0IHR5cGhvb25fZGV2aWNlICp0eXBob29uID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKIAogCXN3aXRjaCAoY3RybC0+aWQpIHsKIAljYXNlIFY0TDJfQ0lEX0FVRElPX01VVEU6CkBAIC0zMzQsMTAgKzMzMCwyMSBAQAogCS5tdXRlZnJlcQk9IENPTkZJR19SQURJT19UWVBIT09OX01VVEVGUkVRLAogfTsKIAorc3RhdGljIGludCB0eXBob29uX2V4Y2x1c2l2ZV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXJldHVybiB0ZXN0X2FuZF9zZXRfYml0KDAsICZ0eXBob29uX3VuaXQuaW5fdXNlKSA/IC1FQlVTWSA6IDA7Cit9CisKK3N0YXRpYyBpbnQgdHlwaG9vbl9leGNsdXNpdmVfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwljbGVhcl9iaXQoMCwgJnR5cGhvb25fdW5pdC5pbl91c2UpOworCXJldHVybiAwOworfQorCiBzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB0eXBob29uX2ZvcHMgPSB7CiAJLm93bmVyCQk9IFRISVNfTU9EVUxFLAotCS5vcGVuICAgICAgICAgICA9IHZpZGVvX2V4Y2x1c2l2ZV9vcGVuLAotCS5yZWxlYXNlICAgICAgICA9IHZpZGVvX2V4Y2x1c2l2ZV9yZWxlYXNlLAorCS5vcGVuICAgICAgICAgICA9IHR5cGhvb25fZXhjbHVzaXZlX29wZW4sCisJLnJlbGVhc2UgICAgICAgID0gdHlwaG9vbl9leGNsdXNpdmVfcmVsZWFzZSwKIAkuaW9jdGwJCT0gdmlkZW9faW9jdGwyLAogI2lmZGVmIENPTkZJR19DT01QQVQKIAkuY29tcGF0X2lvY3RsCT0gdjRsX2NvbXBhdF9pb2N0bDMyLApAQCAtMzY0LDYgKzM3MSw3IEBACiAJLm5hbWUJCT0gIlR5cGhvb24gUmFkaW8iLAogCS5mb3BzICAgICAgICAgICA9ICZ0eXBob29uX2ZvcHMsCiAJLmlvY3RsX29wcyAJPSAmdHlwaG9vbl9pb2N0bF9vcHMsCisJLnJlbGVhc2UJPSB2aWRlb19kZXZpY2VfcmVsZWFzZV9lbXB0eSwKIH07CiAKICNpZmRlZiBDT05GSUdfUkFESU9fVFlQSE9PTl9QUk9DX0ZTCkBAIC00NDYsOSArNDU0LDggQEAKIAkJcmV0dXJuIC1FQlVTWTsKIAl9CiAKLQl0eXBob29uX3JhZGlvLnByaXYgPSAmdHlwaG9vbl91bml0OwotCWlmICh2aWRlb19yZWdpc3Rlcl9kZXZpY2UoJnR5cGhvb25fcmFkaW8sIFZGTF9UWVBFX1JBRElPLCByYWRpb19ucikgPT0gLTEpCi0JeworCXZpZGVvX3NldF9kcnZkYXRhKCZ0eXBob29uX3JhZGlvLCAmdHlwaG9vbl91bml0KTsKKwlpZiAodmlkZW9fcmVnaXN0ZXJfZGV2aWNlKCZ0eXBob29uX3JhZGlvLCBWRkxfVFlQRV9SQURJTywgcmFkaW9fbnIpIDwgMCkgewogCQlyZWxlYXNlX3JlZ2lvbihpbywgOCk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tem9sdHJpeC5jIGIvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby16b2x0cml4LmMKaW5kZXggNTFkNTdlZC4uMTViMTBiYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby16b2x0cml4LmMKKysrIGIvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby16b2x0cml4LmMKQEAgLTY5LDYgKzY5LDcgQEAKIHN0YXRpYyBpbnQgcmFkaW9fbnIgPSAtMTsKIAogc3RydWN0IHpvbF9kZXZpY2UgeworCXVuc2lnbmVkIGxvbmcgaW5fdXNlOwogCWludCBwb3J0OwogCWludCBjdXJ2b2w7CiAJdW5zaWduZWQgbG9uZyBjdXJmcmVxOwpAQCAtMTIyLDggKzEyMywxMSBAQAogCXVuc2lnbmVkIGludCBzdGVyZW8gPSBkZXYtPnN0ZXJlbzsKIAlpbnQgaTsKIAotCWlmIChmcmVxID09IDApCi0JCXJldHVybiAxOworCWlmIChmcmVxID09IDApIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiem9sdHJpeDogcmVjZWl2ZWQgemVybyBmcmVxLiBGYWlsZWQgdG8gc2V0LlxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwogCW0gPSAoZnJlcSAvIDE2MCAtIDg4MDApICogMjsKIAlmID0gKHVuc2lnbmVkIGxvbmcgbG9uZykgbSArIDB4NGQxYzsKIApAQCAtMjQ1LDggKzI0OSw3IEBACiBzdGF0aWMgaW50IHZpZGlvY19nX3R1bmVyKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQkJCQlzdHJ1Y3QgdjRsMl90dW5lciAqdikKIHsKLQlzdHJ1Y3QgdmlkZW9fZGV2aWNlICpkZXYgPSB2aWRlb19kZXZkYXRhKGZpbGUpOwotCXN0cnVjdCB6b2xfZGV2aWNlICp6b2wgPSBkZXYtPnByaXY7CisJc3RydWN0IHpvbF9kZXZpY2UgKnpvbCA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CiAKIAlpZiAodi0+aW5kZXggPiAwKQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTI3NiwxOSArMjc5LDIwIEBACiBzdGF0aWMgaW50IHZpZGlvY19zX2ZyZXF1ZW5jeShzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCQkJc3RydWN0IHY0bDJfZnJlcXVlbmN5ICpmKQogewotCXN0cnVjdCB2aWRlb19kZXZpY2UgKmRldiA9IHZpZGVvX2RldmRhdGEoZmlsZSk7Ci0Jc3RydWN0IHpvbF9kZXZpY2UgKnpvbCA9IGRldi0+cHJpdjsKKwlzdHJ1Y3Qgem9sX2RldmljZSAqem9sID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKIAogCXpvbC0+Y3VyZnJlcSA9IGYtPmZyZXF1ZW5jeTsKLQl6b2xfc2V0ZnJlcSh6b2wsIHpvbC0+Y3VyZnJlcSk7CisJaWYgKHpvbF9zZXRmcmVxKHpvbCwgem9sLT5jdXJmcmVxKSAhPSAwKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgInpvbHRyaXg6IFNldCBmcmVxdWVuY3kgZmFpbGVkLlxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCB2aWRpb2NfZ19mcmVxdWVuY3koc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCQkJCXN0cnVjdCB2NGwyX2ZyZXF1ZW5jeSAqZikKIHsKLQlzdHJ1Y3QgdmlkZW9fZGV2aWNlICpkZXYgPSB2aWRlb19kZXZkYXRhKGZpbGUpOwotCXN0cnVjdCB6b2xfZGV2aWNlICp6b2wgPSBkZXYtPnByaXY7CisJc3RydWN0IHpvbF9kZXZpY2UgKnpvbCA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CiAKIAlmLT50eXBlID0gVjRMMl9UVU5FUl9SQURJTzsKIAlmLT5mcmVxdWVuY3kgPSB6b2wtPmN1cmZyZXE7CkBAIC0zMTMsOCArMzE3LDcgQEAKIHN0YXRpYyBpbnQgdmlkaW9jX2dfY3RybChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCQlzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsKQogewotCXN0cnVjdCB2aWRlb19kZXZpY2UgKmRldiA9IHZpZGVvX2RldmRhdGEoZmlsZSk7Ci0Jc3RydWN0IHpvbF9kZXZpY2UgKnpvbCA9IGRldi0+cHJpdjsKKwlzdHJ1Y3Qgem9sX2RldmljZSAqem9sID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKIAogCXN3aXRjaCAoY3RybC0+aWQpIHsKIAljYXNlIFY0TDJfQ0lEX0FVRElPX01VVEU6CkBAIC0zMzAsOCArMzMzLDcgQEAKIHN0YXRpYyBpbnQgdmlkaW9jX3NfY3RybChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCQlzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsKQogewotCXN0cnVjdCB2aWRlb19kZXZpY2UgKmRldiA9IHZpZGVvX2RldmRhdGEoZmlsZSk7Ci0Jc3RydWN0IHpvbF9kZXZpY2UgKnpvbCA9IGRldi0+cHJpdjsKKwlzdHJ1Y3Qgem9sX2RldmljZSAqem9sID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKIAogCXN3aXRjaCAoY3RybC0+aWQpIHsKIAljYXNlIFY0TDJfQ0lEX0FVRElPX01VVEU6CkBAIC0zNDcsNyArMzQ5LDEwIEBACiAJCXJldHVybiAwOwogCX0KIAl6b2wtPnN0ZXJlbyA9IDE7Ci0Jem9sX3NldGZyZXEoem9sLCB6b2wtPmN1cmZyZXEpOworCWlmICh6b2xfc2V0ZnJlcSh6b2wsIHpvbC0+Y3VyZnJlcSkgIT0gMCkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICJ6b2x0cml4OiBTZXQgZnJlcXVlbmN5IGZhaWxlZC5cbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CiAjaWYgMAogLyogRklYTUU6IEltcGxlbWVudCBzdGVyZW8vbW9ubyBzd2l0Y2ggb24gVjRMMiAqLwogCQkJaWYgKHYtPm1vZGUgJiBWSURFT19TT1VORF9TVEVSRU8pIHsKQEAgLTM5NiwxMSArNDAxLDIyIEBACiAKIHN0YXRpYyBzdHJ1Y3Qgem9sX2RldmljZSB6b2x0cml4X3VuaXQ7CiAKK3N0YXRpYyBpbnQgem9sdHJpeF9leGNsdXNpdmVfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlyZXR1cm4gdGVzdF9hbmRfc2V0X2JpdCgwLCAmem9sdHJpeF91bml0LmluX3VzZSkgPyAtRUJVU1kgOiAwOworfQorCitzdGF0aWMgaW50IHpvbHRyaXhfZXhjbHVzaXZlX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJY2xlYXJfYml0KDAsICZ6b2x0cml4X3VuaXQuaW5fdXNlKTsKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgem9sdHJpeF9mb3BzID0KIHsKIAkub3duZXIJCT0gVEhJU19NT0RVTEUsCi0JLm9wZW4gICAgICAgICAgID0gdmlkZW9fZXhjbHVzaXZlX29wZW4sCi0JLnJlbGVhc2UgICAgICAgID0gdmlkZW9fZXhjbHVzaXZlX3JlbGVhc2UsCisJLm9wZW4gICAgICAgICAgID0gem9sdHJpeF9leGNsdXNpdmVfb3BlbiwKKwkucmVsZWFzZSAgICAgICAgPSB6b2x0cml4X2V4Y2x1c2l2ZV9yZWxlYXNlLAogCS5pb2N0bAkJPSB2aWRlb19pb2N0bDIsCiAjaWZkZWYgQ09ORklHX0NPTVBBVAogCS5jb21wYXRfaW9jdGwJPSB2NGxfY29tcGF0X2lvY3RsMzIsCkBAIC00MjcsNiArNDQzLDcgQEAKIAkubmFtZQkJPSAiWm9sdHJpeCBSYWRpbyBQbHVzIiwKIAkuZm9wcyAgICAgICAgICAgPSAmem9sdHJpeF9mb3BzLAogCS5pb2N0bF9vcHMgCT0gJnpvbHRyaXhfaW9jdGxfb3BzLAorCS5yZWxlYXNlCT0gdmlkZW9fZGV2aWNlX3JlbGVhc2VfZW1wdHksCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCB6b2x0cml4X2luaXQodm9pZCkKQEAgLTQ0MCw3ICs0NTcsNyBAQAogCQlyZXR1cm4gLUVOWElPOwogCX0KIAotCXpvbHRyaXhfcmFkaW8ucHJpdiA9ICZ6b2x0cml4X3VuaXQ7CisJdmlkZW9fc2V0X2RydmRhdGEoJnpvbHRyaXhfcmFkaW8sICZ6b2x0cml4X3VuaXQpOwogCWlmICghcmVxdWVzdF9yZWdpb24oaW8sIDIsICJ6b2x0cml4IikpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJ6b2x0cml4OiBwb3J0IDB4JXggYWxyZWFkeSBpbiB1c2VcbiIsIGlvKTsKIAkJcmV0dXJuIC1FQlVTWTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vS2NvbmZpZyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vS2NvbmZpZwppbmRleCAzZTllMGRjLi40NzEwMmMyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL0tjb25maWcKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9LY29uZmlnCkBAIC0zNCw2ICszNCw3IEBACiAJc2VsZWN0IFZJREVPQlVGX0dFTgogCiBjb25maWcgVklERU9fQlRDWAorCWRlcGVuZHMgb24gUENJCiAJdHJpc3RhdGUKIAogY29uZmlnIFZJREVPX0lSCkBAIC03MSw2ICs3MiwxNSBAQAogCSAgVjRMIGRldmljZXMuCiAJICBJbiBkb3VidCwgc2F5IE4uCiAKK2NvbmZpZyBWSURFT19GSVhFRF9NSU5PUl9SQU5HRVMKKwlib29sICJFbmFibGUgb2xkLXN0eWxlIGZpeGVkIG1pbm9yIHJhbmdlcyBmb3IgdmlkZW8gZGV2aWNlcyIKKwlkZWZhdWx0IG4KKwktLS1oZWxwLS0tCisJICBTYXkgWSBoZXJlIHRvIGVuYWJsZSB0aGUgb2xkLXN0eWxlIGZpeGVkLXJhbmdlIG1pbm9yIGFzc2lnbm1lbnRzLgorCSAgT25seSB1c2VmdWwgaWYgeW91IHJlbHkgb24gdGhlIG9sZCBiZWhhdmlvciBhbmQgdXNlIG1rbm9kIGluc3RlYWQgb2YgdWRldi4KKworCSAgV2hlbiBpbiBkb3VidCwgc2F5IE4uCisKIGNvbmZpZyBWSURFT19IRUxQRVJfQ0hJUFNfQVVUTwogCWJvb2wgIkF1dG9zZWxlY3QgcGVydGluZW50IGVuY29kZXJzL2RlY29kZXJzIGFuZCBvdGhlciBoZWxwZXIgY2hpcHMiCiAJZGVmYXVsdCB5CkBAIC01NzgsMTMgKzU4OCw2IEBACiAJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKIAkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBzYWE1MjQ5LgogCi1jb25maWcgVFVORVJfMzAzNgotCXRyaXN0YXRlICJTQUIzMDM2IHR1bmVyIgotCWRlcGVuZHMgb24gSTJDICYmIFZJREVPX1Y0TDEKLQloZWxwCi0JICBTYXkgWSBoZXJlIHRvIGluY2x1ZGUgc3VwcG9ydCBmb3IgUGhpbGlwcyBTQUIzMDM2IGNvbXBhdGlibGUgdHVuZXJzLgotCSAgSWYgaW4gZG91YnQsIHNheSBOLgotCiBjb25maWcgVklERU9fVklOTwogCXRyaXN0YXRlICJTR0kgVmlubyBWaWRlbyBGb3IgTGludXggKEVYUEVSSU1FTlRBTCkiCiAJZGVwZW5kcyBvbiBJMkMgJiYgU0dJX0lQMjIgJiYgRVhQRVJJTUVOVEFMICYmIFZJREVPX1Y0TDIKQEAgLTYwMiw3OSArNjA1LDcgQEAKIAkgIGRyaXZlciBmb3IgUENJLiAgVGhlcmUgaXMgYSBwcm9kdWN0IHBhZ2UgYXQKIAkgIDxodHRwOi8vd3d3LnN0cmFkaXMuY29tLz4uCiAKLWNvbmZpZyBWSURFT19aT1JBTgotCXRyaXN0YXRlICJab3JhbiBaUjM2MDU3LzM2MDY3IFZpZGVvIEZvciBMaW51eCIKLQlkZXBlbmRzIG9uIFBDSSAmJiBJMkNfQUxHT0JJVCAmJiBWSURFT19WNEwxICYmIFZJUlRfVE9fQlVTCi0JaGVscAotCSAgU2F5IFkgZm9yIHN1cHBvcnQgZm9yIE1KUEVHIGNhcHR1cmUgY2FyZHMgYmFzZWQgb24gdGhlIFpvcmFuCi0JICAzNjA1Ny8zNjA2NyBQQ0kgY29udHJvbGxlciBjaGlwc2V0LiBUaGlzIGluY2x1ZGVzIHRoZSBJb21lZ2EKLQkgIEJ1eiwgUGlubmFjbGUgREMxMCsgYW5kIHRoZSBMaW51eCBNZWRpYSBMYWJzIExNTDMzLiBUaGVyZSBpcwotCSAgYSBkcml2ZXIgaG9tZXBhZ2UgYXQgPGh0dHA6Ly9tanBlZy5zZi5uZXQvZHJpdmVyLXpvcmFuLz4uIEZvcgotCSAgbW9yZSBpbmZvcm1hdGlvbiwgY2hlY2sgPGZpbGU6RG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9ab3Jhbj4uCi0KLQkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQotCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHpyMzYwNjcuCi0KLWNvbmZpZyBWSURFT19aT1JBTl9EQzMwCi0JdHJpc3RhdGUgIlBpbm5hY2xlL01pcm8gREMzMCgrKSBzdXBwb3J0IgotCWRlcGVuZHMgb24gVklERU9fWk9SQU4KLQlzZWxlY3QgVklERU9fQURWNzE3NSBpZiBWSURFT19IRUxQRVJfQ0hJUFNfQVVUTwotCXNlbGVjdCBWSURFT19WUFgzMjIwIGlmIFZJREVPX0hFTFBFUl9DSElQU19BVVRPCi0JaGVscAotCSAgU3VwcG9ydCBmb3IgdGhlIFBpbm5hY2xlL01pcm8gREMzMCgrKSBNSlBFRyBjYXB0dXJlL3BsYXliYWNrCi0JICBjYXJkLiBUaGlzIGFsc28gc3VwcG9ydHMgcmVhbGx5IG9sZCBEQzEwIGNhcmRzIGJhc2VkIG9uIHRoZQotCSAgenIzNjA1MCBNSlBFRyBjb2RlYyBhbmQgenIzNjAxNiBWRkUuCi0KLWNvbmZpZyBWSURFT19aT1JBTl9aUjM2MDYwCi0JdHJpc3RhdGUgIlpvcmFuIFpSMzYwNjAiCi0JZGVwZW5kcyBvbiBWSURFT19aT1JBTgotCWhlbHAKLQkgIFNheSBZIHRvIHN1cHBvcnQgWm9yYW4gYm9hcmRzIGJhc2VkIG9uIDM2MDYwIGNoaXBzLgotCSAgVGhpcyBpbmNsdWRlcyBJb21lZ2EgQnV6LCBQaW5uYWNsZSBEQzEwLCBMaW51eCBtZWRpYSBMYWJzIDMzCi0JICBhbmQgMzMgUjEwIGFuZCBBdmVyTWVkaWEgNiBib2FyZHMuCi0KLWNvbmZpZyBWSURFT19aT1JBTl9CVVoKLQl0cmlzdGF0ZSAiSW9tZWdhIEJ1eiBzdXBwb3J0IgotCWRlcGVuZHMgb24gVklERU9fWk9SQU5fWlIzNjA2MAotCXNlbGVjdCBWSURFT19TQUE3MTExIGlmIFZJREVPX0hFTFBFUl9DSElQU19BVVRPCi0Jc2VsZWN0IFZJREVPX1NBQTcxODUgaWYgVklERU9fSEVMUEVSX0NISVBTX0FVVE8KLQloZWxwCi0JICBTdXBwb3J0IGZvciB0aGUgSW9tZWdhIEJ1eiBNSlBFRyBjYXB0dXJlL3BsYXliYWNrIGNhcmQuCi0KLWNvbmZpZyBWSURFT19aT1JBTl9EQzEwCi0JdHJpc3RhdGUgIlBpbm5hY2xlL01pcm8gREMxMCgrKSBzdXBwb3J0IgotCWRlcGVuZHMgb24gVklERU9fWk9SQU5fWlIzNjA2MAotCXNlbGVjdCBWSURFT19TQUE3MTEwIGlmIFZJREVPX0hFTFBFUl9DSElQU19BVVRPCi0Jc2VsZWN0IFZJREVPX0FEVjcxNzUgaWYgVklERU9fSEVMUEVSX0NISVBTX0FVVE8KLQloZWxwCi0JICBTdXBwb3J0IGZvciB0aGUgUGlubmFjbGUvTWlybyBEQzEwKCspIE1KUEVHIGNhcHR1cmUvcGxheWJhY2sKLQkgIGNhcmQuCi0KLWNvbmZpZyBWSURFT19aT1JBTl9MTUwzMwotCXRyaXN0YXRlICJMaW51eCBNZWRpYSBMYWJzIExNTDMzIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBWSURFT19aT1JBTl9aUjM2MDYwCi0Jc2VsZWN0IFZJREVPX0JUODE5IGlmIFZJREVPX0hFTFBFUl9DSElQU19BVVRPCi0Jc2VsZWN0IFZJREVPX0JUODU2IGlmIFZJREVPX0hFTFBFUl9DSElQU19BVVRPCi0JaGVscAotCSAgU3VwcG9ydCBmb3IgdGhlIExpbnV4IE1lZGlhIExhYnMgTE1MMzMgTUpQRUcgY2FwdHVyZS9wbGF5YmFjawotCSAgY2FyZC4KLQotY29uZmlnIFZJREVPX1pPUkFOX0xNTDMzUjEwCi0JdHJpc3RhdGUgIkxpbnV4IE1lZGlhIExhYnMgTE1MMzNSMTAgc3VwcG9ydCIKLQlkZXBlbmRzIG9uIFZJREVPX1pPUkFOX1pSMzYwNjAKLQlzZWxlY3QgVklERU9fU0FBNzExNCBpZiBWSURFT19IRUxQRVJfQ0hJUFNfQVVUTwotCXNlbGVjdCBWSURFT19BRFY3MTcwIGlmIFZJREVPX0hFTFBFUl9DSElQU19BVVRPCi0JaGVscAotCSAgc3VwcG9ydCBmb3IgdGhlIExpbnV4IE1lZGlhIExhYnMgTE1MMzNSMTAgTUpQRUcgY2FwdHVyZS9wbGF5YmFjawotCSAgY2FyZC4KLQotY29uZmlnIFZJREVPX1pPUkFOX0FWUzZFWUVTCi0JdHJpc3RhdGUgIkF2ZXJNZWRpYSA2IEV5ZXMgc3VwcG9ydCAoRVhQRVJJTUVOVEFMKSIKLQlkZXBlbmRzIG9uIFZJREVPX1pPUkFOX1pSMzYwNjAgJiYgRVhQRVJJTUVOVEFMICYmIFZJREVPX1Y0TDEKLQlzZWxlY3QgVklERU9fQlQ4NTYgaWYgVklERU9fSEVMUEVSX0NISVBTX0FVVE8KLQlzZWxlY3QgVklERU9fS1MwMTI3IGlmIFZJREVPX0hFTFBFUl9DSElQU19BVVRPCi0JaGVscAotCSAgU3VwcG9ydCBmb3IgdGhlIEF2ZXJNZWRpYSA2IEV5ZXMgdmlkZW8gc3VydmVpbGxhbmNlIGNhcmQuCitzb3VyY2UgImRyaXZlcnMvbWVkaWEvdmlkZW8vem9yYW4vS2NvbmZpZyIKIAogY29uZmlnIFZJREVPX01FWUUKIAl0cmlzdGF0ZSAiU29ueSBWYWlvIFBpY3R1cmVib29rIE1vdGlvbiBFeWUgVmlkZW8gRm9yIExpbnV4IgpAQCAtNjk3LDcgKzYyOCw3IEBACiAJZGVwZW5kcyBvbiBQQ0kgJiYgVklERU9fVjRMMSAmJiBJMkMKIAlzZWxlY3QgVklERU9fU0FBNzE0Nl9WVgogCXNlbGVjdCBWSURFT19UVU5FUgotCXNlbGVjdCBWSURFT19TQUE3MTExIGlmIFZJREVPX0hFTFBFUl9DSElQU19BVVRPCisJc2VsZWN0IFZJREVPX1NBQTcxMTUgaWYgVklERU9fSEVMUEVSX0NISVBTX0FVVE8KIAlzZWxlY3QgVklERU9fVERBOTg0MCBpZiBWSURFT19IRUxQRVJfQ0hJUFNfQVVUTwogCXNlbGVjdCBWSURFT19URUE2NDE1QyBpZiBWSURFT19IRUxQRVJfQ0hJUFNfQVVUTwogCXNlbGVjdCBWSURFT19URUE2NDIwIGlmIFZJREVPX0hFTFBFUl9DSElQU19BVVRPCkBAIC03MDgsMjEgKzYzOSw2IEBACiAJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKIAkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBteGIuCiAKLWNvbmZpZyBWSURFT19EUEMKLQl0cmlzdGF0ZSAiUGhpbGlwcy1TZW1pY29uZHVjdG9ycyAnZHBjNzE0NiBkZW1vbnN0cmF0aW9uIGJvYXJkJyIKLQlkZXBlbmRzIG9uIFBDSSAmJiBWSURFT19WNEwxICYmIEkyQwotCXNlbGVjdCBWSURFT19TQUE3MTQ2X1ZWCi0Jc2VsZWN0IFZJREVPX1NBQTcxMTEgaWYgVklERU9fSEVMUEVSX0NISVBTX0FVVE8KLQktLS1oZWxwLS0tCi0JICBUaGlzIGlzIGEgdmlkZW80bGludXggZHJpdmVyIGZvciB0aGUgJ2RwYzcxNDYgZGVtb25zdHJhdGlvbgotCSAgYm9hcmQnIGJ5IFBoaWxpcHMtU2VtaWNvbmR1Y3RvcnMuIEl0J3MgdGhlIHJlZmVyZW5jZSBkZXNpZ24KLQkgIGZvciBTQUE3MTQ2IGJhc2VzIGJvYXJkcywgc28gaWYgeW91IGhhdmUgc29tZSB1bnN1cHBvcnRlZAotCSAgc2FhNzE0NiBiYXNlZCwgYW5hbG9nIHZpZGVvIGNhcmQsIGNoYW5jZXMgYXJlIGdvb2QgdGhhdCBpdAotCSAgd2lsbCB3b3JrIHdpdGggdGhpcyBza2VsZXRvbiBkcml2ZXIuCi0KLQkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQotCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGRwYzcxNDYuCi0KIGNvbmZpZyBWSURFT19IRVhJVU1fT1JJT04KIAl0cmlzdGF0ZSAiSGV4aXVtIEhWLVBDSTYgYW5kIE9yaW9uIGZyYW1lIGdyYWJiZXIiCiAJZGVwZW5kcyBvbiBQQ0kgJiYgVklERU9fVjRMMiAmJiBJMkMKQEAgLTc4NCw2ICs3MDAsNzAgQEAKIAkgIENNT1MgY2FtZXJhIGNvbnRyb2xsZXIuICBUaGlzIGlzIHRoZSBjb250cm9sbGVyIGZvdW5kIG9uIGZpcnN0LQogCSAgZ2VuZXJhdGlvbiBPTFBDIHN5c3RlbXMuCiAKK2NvbmZpZyBTT0NfQ0FNRVJBCisJdHJpc3RhdGUgIlNvQyBjYW1lcmEgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIFZJREVPX1Y0TDIgJiYgSEFTX0RNQQorCXNlbGVjdCBWSURFT0JVRl9HRU4KKwloZWxwCisJICBTb0MgQ2FtZXJhIGlzIGEgY29tbW9uIEFQSSB0byBzZXZlcmFsIGNhbWVyYXMsIG5vdCBjb25uZWN0aW5nCisJICBvdmVyIGEgYnVzIGxpa2UgUENJIG9yIFVTQi4gRm9yIGV4YW1wbGUgc29tZSBpMmMgY2FtZXJhIGNvbm5lY3RlZAorCSAgZGlyZWN0bHkgdG8gdGhlIGRhdGEgYnVzIG9mIGFuIFNvQy4KKworY29uZmlnIFNPQ19DQU1FUkFfTVQ5TTAwMQorCXRyaXN0YXRlICJtdDltMDAxIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBTT0NfQ0FNRVJBICYmIEkyQworCXNlbGVjdCBHUElPX1BDQTk1M1ggaWYgTVQ5TTAwMV9QQ0E5NTM2X1NXSVRDSAorCWhlbHAKKwkgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIE1UOU0wMDEgY2FtZXJhcyBmcm9tIE1pY3JvbiwgbW9ub2Nocm9tZQorCSAgYW5kIGNvbG91ciBtb2RlbHMuCisKK2NvbmZpZyBNVDlNMDAxX1BDQTk1MzZfU1dJVENICisJYm9vbCAicGNhOTUzNiBkYXRhd2lkdGggc3dpdGNoIGZvciBtdDltMDAxIgorCWRlcGVuZHMgb24gU09DX0NBTUVSQV9NVDlNMDAxICYmIEdFTkVSSUNfR1BJTworCWhlbHAKKwkgIFNlbGVjdCB0aGlzIGlmIHlvdXIgTVQ5TTAwMSBjYW1lcmEgdXNlcyBhIFBDQTk1MzYgSTJDIEdQSU8KKwkgIGV4dGVuZGVyIHRvIHN3aXRjaCBiZXR3ZWVuIDggYW5kIDEwIGJpdCBkYXRhd2lkdGggbW9kZXMKKworY29uZmlnIFNPQ19DQU1FUkFfTVQ5TTExMQorCXRyaXN0YXRlICJtdDltMTExIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBTT0NfQ0FNRVJBICYmIEkyQworCWhlbHAKKwkgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIE1UOU0xMTEgY2FtZXJhcyBmcm9tIE1pY3JvbgorCitjb25maWcgU09DX0NBTUVSQV9NVDlWMDIyCisJdHJpc3RhdGUgIm10OXYwMjIgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIFNPQ19DQU1FUkEgJiYgSTJDCisJc2VsZWN0IEdQSU9fUENBOTUzWCBpZiBNVDlWMDIyX1BDQTk1MzZfU1dJVENICisJaGVscAorCSAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgTVQ5VjAyMiBjYW1lcmFzIGZyb20gTWljcm9uCisKK2NvbmZpZyBNVDlWMDIyX1BDQTk1MzZfU1dJVENICisJYm9vbCAicGNhOTUzNiBkYXRhd2lkdGggc3dpdGNoIGZvciBtdDl2MDIyIgorCWRlcGVuZHMgb24gU09DX0NBTUVSQV9NVDlWMDIyICYmIEdFTkVSSUNfR1BJTworCWhlbHAKKwkgIFNlbGVjdCB0aGlzIGlmIHlvdXIgTVQ5VjAyMiBjYW1lcmEgdXNlcyBhIFBDQTk1MzYgSTJDIEdQSU8KKwkgIGV4dGVuZGVyIHRvIHN3aXRjaCBiZXR3ZWVuIDggYW5kIDEwIGJpdCBkYXRhd2lkdGggbW9kZXMKKworY29uZmlnIFNPQ19DQU1FUkFfUExBVEZPUk0KKwl0cmlzdGF0ZSAicGxhdGZvcm0gY2FtZXJhIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBTT0NfQ0FNRVJBCisJaGVscAorCSAgVGhpcyBpcyBhIGdlbmVyaWMgU29DIGNhbWVyYSBwbGF0Zm9ybSBkcml2ZXIsIHVzZWZ1bCBmb3IgdGVzdGluZworCitjb25maWcgVklERU9fUFhBMjd4CisJdHJpc3RhdGUgIlBYQTI3eCBRdWljayBDYXB0dXJlIEludGVyZmFjZSBkcml2ZXIiCisJZGVwZW5kcyBvbiBWSURFT19ERVYgJiYgUFhBMjd4ICYmIFNPQ19DQU1FUkEKKwlzZWxlY3QgVklERU9CVUZfRE1BX1NHCisJLS0taGVscC0tLQorCSAgVGhpcyBpcyBhIHY0bDIgZHJpdmVyIGZvciB0aGUgUFhBMjd4IFF1aWNrIENhcHR1cmUgSW50ZXJmYWNlCisKK2NvbmZpZyBWSURFT19TSF9NT0JJTEVfQ0VVCisJdHJpc3RhdGUgIlN1cGVySCBNb2JpbGUgQ0VVIEludGVyZmFjZSBkcml2ZXIiCisJZGVwZW5kcyBvbiBWSURFT19ERVYgJiYgU09DX0NBTUVSQSAmJiBIQVNfRE1BCisJc2VsZWN0IFZJREVPQlVGX0RNQV9DT05USUcKKwktLS1oZWxwLS0tCisJICBUaGlzIGlzIGEgdjRsMiBkcml2ZXIgZm9yIHRoZSBTdXBlckggTW9iaWxlIENFVSBJbnRlcmZhY2UKKwogIwogIyBVU0IgTXVsdGltZWRpYSBkZXZpY2UgY29uZmlndXJhdGlvbgogIwpAQCAtODIyLDggKzgwMiw3IEBACiAKIGNvbmZpZyBVU0JfVzk5NjhDRgogCXRyaXN0YXRlICJVU0IgVzk5Nls4N11DRiBKUEVHIER1YWwgTW9kZSBDYW1lcmEgc3VwcG9ydCIKLQlkZXBlbmRzIG9uIFZJREVPX1Y0TDEgJiYgSTJDCi0Jc2VsZWN0IFZJREVPX09WQ0FNQ0hJUAorCWRlcGVuZHMgb24gVklERU9fVjRMMSAmJiBJMkMgJiYgVklERU9fT1ZDQU1DSElQCiAJLS0taGVscC0tLQogCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCBzdXBwb3J0IGZvciBjYW1lcmFzIGJhc2VkIG9uIE9WNjgxIG9yCiAJICBXaW5ib25kIFc5OTY3Q0YvVzk5NjhDRiBKUEVHIFVTQiBEdWFsIE1vZGUgQ2FtZXJhIENoaXBzLgpAQCAtOTE0LDY0ICs4OTMsNCBAQAogCiBlbmRpZiAjIFY0TF9VU0JfRFJJVkVSUwogCi1jb25maWcgU09DX0NBTUVSQQotCXRyaXN0YXRlICJTb0MgY2FtZXJhIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBWSURFT19WNEwyICYmIEhBU19ETUEKLQlzZWxlY3QgVklERU9CVUZfR0VOCi0JaGVscAotCSAgU29DIENhbWVyYSBpcyBhIGNvbW1vbiBBUEkgdG8gc2V2ZXJhbCBjYW1lcmFzLCBub3QgY29ubmVjdGluZwotCSAgb3ZlciBhIGJ1cyBsaWtlIFBDSSBvciBVU0IuIEZvciBleGFtcGxlIHNvbWUgaTJjIGNhbWVyYSBjb25uZWN0ZWQKLQkgIGRpcmVjdGx5IHRvIHRoZSBkYXRhIGJ1cyBvZiBhbiBTb0MuCi0KLWNvbmZpZyBTT0NfQ0FNRVJBX01UOU0wMDEKLQl0cmlzdGF0ZSAibXQ5bTAwMSBzdXBwb3J0IgotCWRlcGVuZHMgb24gU09DX0NBTUVSQSAmJiBJMkMKLQlzZWxlY3QgR1BJT19QQ0E5NTNYIGlmIE1UOU0wMDFfUENBOTUzNl9TV0lUQ0gKLQloZWxwCi0JICBUaGlzIGRyaXZlciBzdXBwb3J0cyBNVDlNMDAxIGNhbWVyYXMgZnJvbSBNaWNyb24sIG1vbm9jaHJvbWUKLQkgIGFuZCBjb2xvdXIgbW9kZWxzLgotCi1jb25maWcgTVQ5TTAwMV9QQ0E5NTM2X1NXSVRDSAotCWJvb2wgInBjYTk1MzYgZGF0YXdpZHRoIHN3aXRjaCBmb3IgbXQ5bTAwMSIKLQlkZXBlbmRzIG9uIFNPQ19DQU1FUkFfTVQ5TTAwMSAmJiBHRU5FUklDX0dQSU8KLQloZWxwCi0JICBTZWxlY3QgdGhpcyBpZiB5b3VyIE1UOU0wMDEgY2FtZXJhIHVzZXMgYSBQQ0E5NTM2IEkyQyBHUElPCi0JICBleHRlbmRlciB0byBzd2l0Y2ggYmV0d2VlbiA4IGFuZCAxMCBiaXQgZGF0YXdpZHRoIG1vZGVzCi0KLWNvbmZpZyBTT0NfQ0FNRVJBX01UOVYwMjIKLQl0cmlzdGF0ZSAibXQ5djAyMiBzdXBwb3J0IgotCWRlcGVuZHMgb24gU09DX0NBTUVSQSAmJiBJMkMKLQlzZWxlY3QgR1BJT19QQ0E5NTNYIGlmIE1UOVYwMjJfUENBOTUzNl9TV0lUQ0gKLQloZWxwCi0JICBUaGlzIGRyaXZlciBzdXBwb3J0cyBNVDlWMDIyIGNhbWVyYXMgZnJvbSBNaWNyb24KLQotY29uZmlnIE1UOVYwMjJfUENBOTUzNl9TV0lUQ0gKLQlib29sICJwY2E5NTM2IGRhdGF3aWR0aCBzd2l0Y2ggZm9yIG10OXYwMjIiCi0JZGVwZW5kcyBvbiBTT0NfQ0FNRVJBX01UOVYwMjIgJiYgR0VORVJJQ19HUElPCi0JaGVscAotCSAgU2VsZWN0IHRoaXMgaWYgeW91ciBNVDlWMDIyIGNhbWVyYSB1c2VzIGEgUENBOTUzNiBJMkMgR1BJTwotCSAgZXh0ZW5kZXIgdG8gc3dpdGNoIGJldHdlZW4gOCBhbmQgMTAgYml0IGRhdGF3aWR0aCBtb2RlcwotCi1jb25maWcgU09DX0NBTUVSQV9QTEFURk9STQotCXRyaXN0YXRlICJwbGF0Zm9ybSBjYW1lcmEgc3VwcG9ydCIKLQlkZXBlbmRzIG9uIFNPQ19DQU1FUkEKLQloZWxwCi0JICBUaGlzIGlzIGEgZ2VuZXJpYyBTb0MgY2FtZXJhIHBsYXRmb3JtIGRyaXZlciwgdXNlZnVsIGZvciB0ZXN0aW5nCi0KLWNvbmZpZyBWSURFT19QWEEyN3gKLQl0cmlzdGF0ZSAiUFhBMjd4IFF1aWNrIENhcHR1cmUgSW50ZXJmYWNlIGRyaXZlciIKLQlkZXBlbmRzIG9uIFZJREVPX0RFViAmJiBQWEEyN3gKLQlzZWxlY3QgU09DX0NBTUVSQQotCXNlbGVjdCBWSURFT0JVRl9ETUFfU0cKLQktLS1oZWxwLS0tCi0JICBUaGlzIGlzIGEgdjRsMiBkcml2ZXIgZm9yIHRoZSBQWEEyN3ggUXVpY2sgQ2FwdHVyZSBJbnRlcmZhY2UKLQotY29uZmlnIFZJREVPX1NIX01PQklMRV9DRVUKLQl0cmlzdGF0ZSAiU3VwZXJIIE1vYmlsZSBDRVUgSW50ZXJmYWNlIGRyaXZlciIKLQlkZXBlbmRzIG9uIFZJREVPX0RFViAmJiBIQVNfRE1BCi0Jc2VsZWN0IFNPQ19DQU1FUkEKLQlzZWxlY3QgVklERU9CVUZfRE1BX0NPTlRJRwotCS0tLWhlbHAtLS0KLQkgIFRoaXMgaXMgYSB2NGwyIGRyaXZlciBmb3IgdGhlIFN1cGVySCBNb2JpbGUgQ0VVIEludGVyZmFjZQotCiBlbmRpZiAjIFZJREVPX0NBUFRVUkVfRFJJVkVSUwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9NYWtlZmlsZSBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vTWFrZWZpbGUKaW5kZXggZWY3YzhkMy4uMTY5NjJmMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9NYWtlZmlsZQorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL01ha2VmaWxlCkBAIC0yLDggKzIsNiBAQAogIyBNYWtlZmlsZSBmb3IgdGhlIHZpZGVvIGNhcHR1cmUvcGxheWJhY2sgZGV2aWNlIGRyaXZlcnMuCiAjCiAKLXpyMzYwNjctb2Jqcwk6PQl6b3Jhbl9wcm9jZnMubyB6b3Jhbl9kZXZpY2UubyBcCi0JCQl6b3Jhbl9kcml2ZXIubyB6b3Jhbl9jYXJkLm8KIHR1bmVyLW9ianMJOj0JdHVuZXItY29yZS5vCiAKIG1zcDM0MDAtb2Jqcwk6PQltc3AzNDAwLWRyaXZlci5vIG1zcDM0MDAta3RocmVhZHMubwpAQCAtNTQsOSArNTIsNyBAQAogb2JqLSQoQ09ORklHX1ZJREVPX0JUODY2KSArPSBidDg2Ni5vCiBvYmotJChDT05GSUdfVklERU9fS1MwMTI3KSArPSBrczAxMjcubwogCi1vYmotJChDT05GSUdfVklERU9fWk9SQU4pICs9IHpyMzYwNjcubyB2aWRlb2NvZGVjLm8KLW9iai0kKENPTkZJR19WSURFT19aT1JBTl9EQzMwKSArPSB6cjM2MDUwLm8genIzNjAxNi5vCi1vYmotJChDT05GSUdfVklERU9fWk9SQU5fWlIzNjA2MCkgKz0genIzNjA2MC5vCitvYmotJChDT05GSUdfVklERU9fWk9SQU4pICs9IHpvcmFuLwogCiBvYmotJChDT05GSUdfVklERU9fUE1TKSArPSBwbXMubwogb2JqLSQoQ09ORklHX1ZJREVPX1ZJTk8pICs9IHZpbm8ubyBpbmR5Y2FtLm8KQEAgLTg0LDggKzgwLDYgQEAKIG9iai0kKENPTkZJR19WSURFT19NWEIpICs9IG14Yi5vCiBvYmotJChDT05GSUdfVklERU9fSEVYSVVNX09SSU9OKSArPSBoZXhpdW1fb3Jpb24ubwogb2JqLSQoQ09ORklHX1ZJREVPX0hFWElVTV9HRU1JTkkpICs9IGhleGl1bV9nZW1pbmkubwotb2JqLSQoQ09ORklHX1ZJREVPX0RQQykgKz0gZHBjNzE0Ni5vCi1vYmotJChDT05GSUdfVFVORVJfMzAzNikgKz0gdHVuZXItMzAzNi5vCiAKIG9iai0kKENPTkZJR19WSURFT0JVRl9HRU4pICs9IHZpZGVvYnVmLWNvcmUubwogb2JqLSQoQ09ORklHX1ZJREVPQlVGX0RNQV9TRykgKz0gdmlkZW9idWYtZG1hLXNnLm8KQEAgLTEzNyw2ICsxMzEsNyBAQAogb2JqLSQoQ09ORklHX1ZJREVPX1NIX01PQklMRV9DRVUpCSs9IHNoX21vYmlsZV9jZXVfY2FtZXJhLm8KIG9iai0kKENPTkZJR19TT0NfQ0FNRVJBKQkrPSBzb2NfY2FtZXJhLm8KIG9iai0kKENPTkZJR19TT0NfQ0FNRVJBX01UOU0wMDEpCSs9IG10OW0wMDEubworb2JqLSQoQ09ORklHX1NPQ19DQU1FUkFfTVQ5TTExMSkJKz0gbXQ5bTExMS5vCiBvYmotJChDT05GSUdfU09DX0NBTUVSQV9NVDlWMDIyKQkrPSBtdDl2MDIyLm8KIG9iai0kKENPTkZJR19TT0NfQ0FNRVJBX1BMQVRGT1JNKQkrPSBzb2NfY2FtZXJhX3BsYXRmb3JtLm8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9hZHY3MTcwLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2FkdjcxNzAuYwppbmRleCBmNzk0ZjJkLi5lMGViNGYzIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2FkdjcxNzAuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2FkdjcxNzAuYwpAQCAtMjksNDMgKzI5LDI0IEBACiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+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+bm9ybSA9IFZJREVPX01PREVfUEFMOwogCWVuY29kZXItPmlucHV0ID0gMDsKIAllbmNvZGVyLT5lbmFibGUgPSAxOwogCWkyY19zZXRfY2xpZW50ZGF0YShjbGllbnQsIGVuY29kZXIpOwogCi0JaSA9IGkyY19hdHRhY2hfY2xpZW50KGNsaWVudCk7Ci0JaWYgKGkpIHsKLQkJa2ZyZWUoY2xpZW50KTsKLQkJa2ZyZWUoZW5jb2Rlcik7Ci0JCXJldHVybiBpOwotCX0KLQogCWkgPSBhZHY3MTc1X3dyaXRlX2Jsb2NrKGNsaWVudCwgaW5pdF9jb21tb24sIHNpemVvZihpbml0X2NvbW1vbikpOwogCWlmIChpID49IDApIHsKIAkJaSA9IGFkdjcxNzVfd3JpdGUoY2xpZW50LCAweDA3LCBUUjBNT0RFIHwgVFIwUlNUKTsKIAkJaSA9IGFkdjcxNzVfd3JpdGUoY2xpZW50LCAweDA3LCBUUjBNT0RFKTsKIAkJaSA9IGFkdjcxNzVfcmVhZChjbGllbnQsIDB4MTIpOwotCQlkcHJpbnRrKDEsIEtFUk5fSU5GTyAiJXNfYXR0YWNoOiByZXYuICVkIGF0IDB4JXhcbiIsCi0JCQlJMkNfTkFNRShjbGllbnQpLCBpICYgMSwgY2xpZW50LT5hZGRyIDw8IDEpOworCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJyZXZpc2lvbiAlZFxuIiwgaSAmIDEpOwogCX0KLQlpZiAoaSA8IDApIHsKLQkJZHByaW50aygxLCBLRVJOX0VSUiAiJXNfYXR0YWNoOiBpbml0IGVycm9yIDB4JXhcbiIsCi0JCQlJMkNfTkFNRShjbGllbnQpLCBpKTsKLQl9Ci0KKwlpZiAoaSA8IDApCisJCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgImluaXQgZXJyb3IgMHgleFxuIiwgaSk7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQKLWFkdjcxNzVfYXR0YWNoX2FkYXB0ZXIgKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlcikKK3N0YXRpYyBpbnQgYWR2NzE3NV9yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKIHsKLQlkcHJpbnRrKDEsCi0JCUtFUk5fSU5GTwotCQkiYWR2NzE3NS5jOiBzdGFydGluZyBwcm9iZSBmb3IgYWRhcHRlciAlcyAoMHgleClcbiIsCi0JCUkyQ19OQU1FKGFkYXB0ZXIpLCBhZGFwdGVyLT5pZCk7Ci0JcmV0dXJuIGkyY19wcm9iZShhZGFwdGVyLCAmYWRkcl9kYXRhLCAmYWR2NzE3NV9kZXRlY3RfY2xpZW50KTsKLX0KLQotc3RhdGljIGludAotYWR2NzE3NV9kZXRhY2hfY2xpZW50IChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQotewotCXN0cnVjdCBhZHY3MTc1ICplbmNvZGVyID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7Ci0JaW50IGVycjsKLQotCWVyciA9IGkyY19kZXRhY2hfY2xpZW50KGNsaWVudCk7Ci0JaWYgKGVycikgewotCQlyZXR1cm4gZXJyOwotCX0KLQotCWtmcmVlKGVuY29kZXIpOwotCWtmcmVlKGNsaWVudCk7Ci0KKwlrZnJlZShpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KSk7CiAJcmV0dXJuIDA7CiB9CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKLXN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBpMmNfZHJpdmVyX2FkdjcxNzUgPSB7Ci0JLmRyaXZlciA9IHsKLQkJLm5hbWUgPSAiYWR2NzE3NSIsCS8qIG5hbWUgKi8KLQl9LAotCi0JLmlkID0gSTJDX0RSSVZFUklEX0FEVjcxNzUsCi0KLQkuYXR0YWNoX2FkYXB0ZXIgPSBhZHY3MTc1X2F0dGFjaF9hZGFwdGVyLAotCS5kZXRhY2hfY2xpZW50ID0gYWR2NzE3NV9kZXRhY2hfY2xpZW50LAotCS5jb21tYW5kID0gYWR2NzE3NV9jb21tYW5kLAorc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkIGFkdjcxNzVfaWRbXSA9IHsKKwl7ICJhZHY3MTc1IiwgMCB9LAorCXsgImFkdjcxNzYiLCAwIH0sCisJeyB9CiB9OworTU9EVUxFX0RFVklDRV9UQUJMRShpMmMsIGFkdjcxNzVfaWQpOwogCi1zdGF0aWMgaW50IF9faW5pdAotYWR2NzE3NV9pbml0ICh2b2lkKQotewotCXJldHVybiBpMmNfYWRkX2RyaXZlcigmaTJjX2RyaXZlcl9hZHY3MTc1KTsKLX0KLQotc3RhdGljIHZvaWQgX19leGl0Ci1hZHY3MTc1X2V4aXQgKHZvaWQpCi17Ci0JaTJjX2RlbF9kcml2ZXIoJmkyY19kcml2ZXJfYWR2NzE3NSk7Ci19Ci0KLW1vZHVsZV9pbml0KGFkdjcxNzVfaW5pdCk7Ci1tb2R1bGVfZXhpdChhZHY3MTc1X2V4aXQpOworc3RhdGljIHN0cnVjdCB2NGwyX2kyY19kcml2ZXJfZGF0YSB2NGwyX2kyY19kYXRhID0geworCS5uYW1lID0gImFkdjcxNzUiLAorCS5kcml2ZXJpZCA9IEkyQ19EUklWRVJJRF9BRFY3MTc1LAorCS5jb21tYW5kID0gYWR2NzE3NV9jb21tYW5kLAorCS5wcm9iZSA9IGFkdjcxNzVfcHJvYmUsCisJLnJlbW92ZSA9IGFkdjcxNzVfcmVtb3ZlLAorCS5pZF90YWJsZSA9IGFkdjcxNzVfaWQsCit9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9hcnYuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYXJ2LmMKaW5kZXggOWU0MzZhZC4uMjE4NzU0YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9hcnYuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2Fydi5jCkBAIC0xMTYsNiArMTE2LDcgQEAKIAlpbnQgd2lkdGgsIGhlaWdodDsKIAlpbnQgZnJhbWVfYnl0ZXMsIGxpbmVfYnl0ZXM7CiAJd2FpdF9xdWV1ZV9oZWFkX3Qgd2FpdDsKKwl1bnNpZ25lZCBsb25nIGluX3VzZTsKIAlzdHJ1Y3QgbXV0ZXggbG9jazsKIH07CiAKQEAgLTI2OSw3ICsyNzAsNyBAQAogc3RhdGljIHNzaXplX3QgYXJfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciAqYnVmLCBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKIHsKIAlzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2ID0gdmlkZW9fZGV2ZGF0YShmaWxlKTsKLQlzdHJ1Y3QgYXJfZGV2aWNlICphciA9IHYtPnByaXY7CisJc3RydWN0IGFyX2RldmljZSAqYXIgPSB2aWRlb19nZXRfZHJ2ZGF0YSh2KTsKIAlsb25nIHJldCA9IGFyLT5mcmFtZV9ieXRlczsJCS8qIHJldHVybiByZWFkIGJ5dGVzICovCiAJdW5zaWduZWQgbG9uZyBhcnZjcjEgPSAwOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CkBAIC0zOTksNyArNDAwLDcgQEAKIAkJICAgICAgIHVuc2lnbmVkIGludCBjbWQsIHZvaWQgKmFyZykKIHsKIAlzdHJ1Y3QgdmlkZW9fZGV2aWNlICpkZXYgPSB2aWRlb19kZXZkYXRhKGZpbGUpOwotCXN0cnVjdCBhcl9kZXZpY2UgKmFyID0gZGV2LT5wcml2OworCXN0cnVjdCBhcl9kZXZpY2UgKmFyID0gdmlkZW9fZ2V0X2RydmRhdGEoZGV2KTsKIAogCURFQlVHKDEsICJhcl9pb2N0bCgpXG4iKTsKIAlzd2l0Y2goY21kKSB7CkBAIC02MjUsNyArNjI2LDcgQEAKICAqLwogc3RhdGljIGludCBhcl9pbml0aWFsaXplKHN0cnVjdCB2aWRlb19kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgYXJfZGV2aWNlICphciA9IGRldi0+cHJpdjsKKwlzdHJ1Y3QgYXJfZGV2aWNlICphciA9IHZpZGVvX2dldF9kcnZkYXRhKGRldik7CiAJdW5zaWduZWQgbG9uZyBjciA9IDA7CiAJaW50IGksZm91bmQ9MDsKIApAQCAtNzMyLDcgKzczMyw3IEBACiAKIHZvaWQgYXJfcmVsZWFzZShzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2ZmQpCiB7Ci0Jc3RydWN0IGFyX2RldmljZSAqYXIgPSB2ZmQtPnByaXY7CisJc3RydWN0IGFyX2RldmljZSAqYXIgPSB2aWRlb19nZXRfZHJ2ZGF0YSh2ZmQpOwogCW11dGV4X2xvY2soJmFyLT5sb2NrKTsKIAl2aWRlb19kZXZpY2VfcmVsZWFzZSh2ZmQpOwogfQpAQCAtNzQyLDEwICs3NDMsMjMgQEAKICAqIFZpZGVvNExpbnV4IE1vZHVsZSBmdW5jdGlvbnMKICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBzdHJ1Y3QgYXJfZGV2aWNlIGFyZGV2OworCitzdGF0aWMgaW50IGFyX2V4Y2x1c2l2ZV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXJldHVybiB0ZXN0X2FuZF9zZXRfYml0KDAsICZhcmRldi5pbl91c2UpID8gLUVCVVNZIDogMDsKK30KKworc3RhdGljIGludCBhcl9leGNsdXNpdmVfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwljbGVhcl9iaXQoMCwgJmFyZGV2LmluX3VzZSk7CisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGFyX2ZvcHMgPSB7CiAJLm93bmVyCQk9IFRISVNfTU9EVUxFLAotCS5vcGVuCQk9IHZpZGVvX2V4Y2x1c2l2ZV9vcGVuLAotCS5yZWxlYXNlCT0gdmlkZW9fZXhjbHVzaXZlX3JlbGVhc2UsCisJLm9wZW4JCT0gYXJfZXhjbHVzaXZlX29wZW4sCisJLnJlbGVhc2UJPSBhcl9leGNsdXNpdmVfcmVsZWFzZSwKIAkucmVhZAkJPSBhcl9yZWFkLAogCS5pb2N0bAkJPSBhcl9pb2N0bCwKICNpZmRlZiBDT05GSUdfQ09NUEFUCkBAIC03NjIsNyArNzc2LDYgQEAKIH07CiAKICNkZWZpbmUgQUxJR040KHgpCSgoKChpbnQpKHgpKSAmIDB4MykgPT0gMCkKLXN0YXRpYyBzdHJ1Y3QgYXJfZGV2aWNlIGFyZGV2OwogCiBzdGF0aWMgaW50IF9faW5pdCBhcl9pbml0KHZvaWQpCiB7CkBAIC04MDIsNyArODE1LDcgQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCW1lbWNweShhci0+dmRldiwgJmFyX3RlbXBsYXRlLCBzaXplb2YoYXJfdGVtcGxhdGUpKTsKLQlhci0+dmRldi0+cHJpdiA9IGFyOworCXZpZGVvX3NldF9kcnZkYXRhKGFyLT52ZGV2LCBhcik7CiAKIAlpZiAodmdhKSB7CiAJCWFyLT53aWR0aCAJPSBBUl9XSURUSF9WR0E7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2F1MDgyOC9hdTA4MjgtY2FyZHMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYXUwODI4L2F1MDgyOC1jYXJkcy5jCmluZGV4IGVkNDg5MDguLmQ2MDEyM2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vYXUwODI4L2F1MDgyOC1jYXJkcy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYXUwODI4L2F1MDgyOC1jYXJkcy5jCkBAIC00Niw3ICs0Niw3IEBACiAvKiBUdW5lciBjYWxsYmFjayBmdW5jdGlvbiBmb3IgYXUwODI4IGJvYXJkcy4gQ3VycmVudGx5IG9ubHkgbmVlZGVkCiAgKiBmb3IgSFZSMTUwMFEsIHdoaWNoIGhhcyBhbiB4YzUwMDAgdHVuZXIuCiAgKi8KLWludCBhdTA4MjhfdHVuZXJfY2FsbGJhY2sodm9pZCAqcHJpdiwgaW50IGNvbW1hbmQsIGludCBhcmcpCitpbnQgYXUwODI4X3R1bmVyX2NhbGxiYWNrKHZvaWQgKnByaXYsIGludCBjb21wb25lbnQsIGludCBjb21tYW5kLCBpbnQgYXJnKQogewogCXN0cnVjdCBhdTA4MjhfZGV2ICpkZXYgPSBwcml2OwogCkBAIC05MCw2ICs5MCw3IEBACiAJY2FzZSA3MjIyMTogLyogV2luVFYtSFZSOTUwcSAoT0VNLCBJUiwgQVRTQy9RQU0gYW5kIGJhc2ljIGFuYWxvZyB2aWRlbyAqLwogCWNhc2UgNzIyMzE6IC8qIFdpblRWLUhWUjk1MHEgKE9FTSwgSVIsIEFUU0MvUUFNIGFuZCBiYXNpYyBhbmFsb2cgdmlkZW8gKi8KIAljYXNlIDcyMjQxOiAvKiBXaW5UVi1IVlI5NTBxIChPRU0sIE5vIElSLCBBVFNDL1FBTSBhbmQgYmFzaWMgYW5hbG9nIHZpZGVvICovCisJY2FzZSA3MjI1MTogLyogV2luVFYtSFZSOTUwcSAoUmV0YWlsLCBJUiwgQVRTQy9RQU0gYW5kIGJhc2ljIGFuYWxvZyB2aWRlbyAqLwogCWNhc2UgNzIzMDE6IC8qIFdpblRWLUhWUjg1MCAoUmV0YWlsLCBJUiwgQVRTQyBhbmQgYmFzaWMgYW5hbG9nIHZpZGVvICovCiAJY2FzZSA3MjUwMDogLyogV2luVFYtSFZSOTUwcSAoT0VNLCBObyBJUiwgQVRTQy9RQU0gKi8KIAkJYnJlYWs7CkBAIC0xODUsNyArMTg2LDcgQEAKIH0KIAogLyogdGFibGUgb2YgZGV2aWNlcyB0aGF0IHdvcmsgd2l0aCB0aGlzIGRyaXZlciAqLwotc3RydWN0IHVzYl9kZXZpY2VfaWQgYXUwODI4X3VzYl9pZF90YWJsZSBbXSA9IHsKK3N0cnVjdCB1c2JfZGV2aWNlX2lkIGF1MDgyOF91c2JfaWRfdGFibGVbXSA9IHsKIAl7IFVTQl9ERVZJQ0UoMHgyMDQwLCAweDcyMDApLAogCQkuZHJpdmVyX2luZm8gPSBBVTA4MjhfQk9BUkRfSEFVUFBBVUdFX0hWUjk1MFEgfSwKIAl7IFVTQl9ERVZJQ0UoMHgyMDQwLCAweDcyNDApLApAQCAtMTk4LDYgKzE5OSw4IEBACiAJCS5kcml2ZXJfaW5mbyA9IEFVMDgyOF9CT0FSRF9IQVVQUEFVR0VfSFZSOTUwUSB9LAogCXsgVVNCX0RFVklDRSgweDIwNDAsIDB4NzIxYiksCiAJCS5kcml2ZXJfaW5mbyA9IEFVMDgyOF9CT0FSRF9IQVVQUEFVR0VfSFZSOTUwUSB9LAorCXsgVVNCX0RFVklDRSgweDIwNDAsIDB4NzIxZSksCisJCS5kcml2ZXJfaW5mbyA9IEFVMDgyOF9CT0FSRF9IQVVQUEFVR0VfSFZSOTUwUSB9LAogCXsgVVNCX0RFVklDRSgweDIwNDAsIDB4NzIxZiksCiAJCS5kcml2ZXJfaW5mbyA9IEFVMDgyOF9CT0FSRF9IQVVQUEFVR0VfSFZSOTUwUSB9LAogCXsgVVNCX0RFVklDRSgweDIwNDAsIDB4NzI4MCksCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2F1MDgyOC9hdTA4MjgtY29yZS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9hdTA4MjgvYXUwODI4LWNvcmUuYwppbmRleCBkODU2ZGU5Li41NzY1ZTg2IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2F1MDgyOC9hdTA4MjgtY29yZS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYXUwODI4L2F1MDgyOC1jb3JlLmMKQEAgLTkxLDcgKzkxLDggQEAKIAkJc3RhdHVzID0gdXNiX2NvbnRyb2xfbXNnKGRldi0+dXNiZGV2LAogCQkJCXVzYl9zbmRjdHJscGlwZShkZXYtPnVzYmRldiwgMCksCiAJCQkJcmVxdWVzdCwKLQkJCQlVU0JfRElSX09VVCB8IFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9ERVZJQ0UsCisJCQkJVVNCX0RJUl9PVVQgfCBVU0JfVFlQRV9WRU5ET1IgfAorCQkJCQlVU0JfUkVDSVBfREVWSUNFLAogCQkJCXZhbHVlLCBpbmRleCwKIAkJCQljcCwgc2l6ZSwgMTAwMCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vYXUwODI4L2F1MDgyOC1kdmIuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYXUwODI4L2F1MDgyOC1kdmIuYwppbmRleCBiYTk0YmU3Li5hODgyY2Y1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2F1MDgyOC9hdTA4MjgtZHZiLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9hdTA4MjgvYXUwODI4LWR2Yi5jCkBAIC0zNiwxMSArMzYsMzkgQEAKICNkZWZpbmUgX0FVMDgyOF9CVUxLUElQRSAweDgzCiAjZGVmaW5lIF9CVUxLUElQRVNJWkUgMHhlNTIyCiAKK3N0YXRpYyB1OCBoYXVwcGF1Z2VfaHZyOTUwcV9sZWRfc3RhdGVzW10gPSB7CisJMHgwMCwgLyogb2ZmICovCisJMHgwMiwgLyogeWVsbG93ICovCisJMHgwNCwgLyogZ3JlZW4gKi8KK307CisKK3N0YXRpYyBzdHJ1Y3QgYXU4NTIyX2xlZF9jb25maWcgaGF1cHBhdWdlX2h2cjk1MHFfbGVkX2NmZyA9IHsKKwkuZ3Bpb19vdXRwdXQgPSAweDAwZTAsCisJLmdwaW9fb3V0cHV0X2VuYWJsZSAgPSAweDYwMDYsCisJLmdwaW9fb3V0cHV0X2Rpc2FibGUgPSAweDA2NjAsCisKKwkuZ3Bpb19sZWRzID0gMHgwMGUyLAorCS5sZWRfc3RhdGVzICA9IGhhdXBwYXVnZV9odnI5NTBxX2xlZF9zdGF0ZXMsCisJLm51bV9sZWRfc3RhdGVzID0gc2l6ZW9mKGhhdXBwYXVnZV9odnI5NTBxX2xlZF9zdGF0ZXMpLAorCisJLnZzYjhfc3Ryb25nICAgPSAyMCAvKiBkQiAqLyAqIDEwLAorCS5xYW02NF9zdHJvbmcgID0gMjUgLyogZEIgKi8gKiAxMCwKKwkucWFtMjU2X3N0cm9uZyA9IDMyIC8qIGRCICovICogMTAsCit9OworCiBzdGF0aWMgc3RydWN0IGF1ODUyMl9jb25maWcgaGF1cHBhdWdlX2h2cjk1MHFfY29uZmlnID0gewogCS5kZW1vZF9hZGRyZXNzID0gMHg4ZSA+PiAxLAogCS5zdGF0dXNfbW9kZSAgID0gQVU4NTIyX0RFTU9ETE9DS0lORywKIAkucWFtX2lmICAgICAgICA9IEFVODUyMl9JRl82TUhaLAogCS52c2JfaWYgICAgICAgID0gQVU4NTIyX0lGXzZNSFosCisJLmxlZF9jZmcgICAgICAgPSAmaGF1cHBhdWdlX2h2cjk1MHFfbGVkX2NmZywKK307CisKK3N0YXRpYyBzdHJ1Y3QgYXU4NTIyX2NvbmZpZyBmdXNpb25oZHR2N3VzYl9jb25maWcgPSB7CisJLmRlbW9kX2FkZHJlc3MgPSAweDhlID4+IDEsCisJLnN0YXR1c19tb2RlICAgPSBBVTg1MjJfREVNT0RMT0NLSU5HLAorCS5xYW1faWYgICAgICAgID0gQVU4NTIyX0lGXzZNSFosCisJLnZzYl9pZiAgICAgICAgPSBBVTg1MjJfSUZfNk1IWiwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgYXU4NTIyX2NvbmZpZyBoYXVwcGF1Z2Vfd29vZGJ1cnlfY29uZmlnID0gewpAQCAtNTMsNyArODEsNiBAQAogc3RhdGljIHN0cnVjdCB4YzUwMDBfY29uZmlnIGhhdXBwYXVnZV9odnI5NTBxX3R1bmVyY29uZmlnID0gewogCS5pMmNfYWRkcmVzcyAgICAgID0gMHg2MSwKIAkuaWZfa2h6ICAgICAgICAgICA9IDYwMDAsCi0JLnR1bmVyX2NhbGxiYWNrICAgPSBhdTA4MjhfdHVuZXJfY2FsbGJhY2sKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgbXhsNTAwN3RfY29uZmlnIG14bDUwMDd0X2h2cjk1MHFfY29uZmlnID0gewpAQCAtMTQ2LDcgKzE3Myw4IEBACiAJCXB1cmItPnN0YXR1cyA9IC1FSU5QUk9HUkVTUzsKIAkJdXNiX2ZpbGxfYnVsa191cmIocHVyYiwKIAkJCQkgIGRldi0+dXNiZGV2LAotCQkJCSAgdXNiX3JjdmJ1bGtwaXBlKGRldi0+dXNiZGV2LCBfQVUwODI4X0JVTEtQSVBFKSwKKwkJCQkgIHVzYl9yY3ZidWxrcGlwZShkZXYtPnVzYmRldiwKKwkJCQkJX0FVMDgyOF9CVUxLUElQRSksCiAJCQkJICBwdXJiLT50cmFuc2Zlcl9idWZmZXIsCiAJCQkJICBVUkJfQlVGU0laRSwKIAkJCQkgIHVyYl9jb21wbGV0aW9uLApAQCAtMzUzLDE0ICszODEsMTIgQEAKIAlzd2l0Y2ggKGRldi0+Ym9hcmQpIHsKIAljYXNlIEFVMDgyOF9CT0FSRF9IQVVQUEFVR0VfSFZSODUwOgogCWNhc2UgQVUwODI4X0JPQVJEX0hBVVBQQVVHRV9IVlI5NTBROgotCWNhc2UgQVUwODI4X0JPQVJEX0RWSUNPX0ZVU0lPTkhEVFY3OgogCQlkdmItPmZyb250ZW5kID0gZHZiX2F0dGFjaChhdTg1MjJfYXR0YWNoLAogCQkJCSZoYXVwcGF1Z2VfaHZyOTUwcV9jb25maWcsCiAJCQkJJmRldi0+aTJjX2FkYXApOwogCQlpZiAoZHZiLT5mcm9udGVuZCAhPSBOVUxMKQotCQkJZHZiX2F0dGFjaCh4YzUwMDBfYXR0YWNoLCBkdmItPmZyb250ZW5kLAotCQkJCSZkZXYtPmkyY19hZGFwLAotCQkJCSZoYXVwcGF1Z2VfaHZyOTUwcV90dW5lcmNvbmZpZywgZGV2KTsKKwkJCWR2Yl9hdHRhY2goeGM1MDAwX2F0dGFjaCwgZHZiLT5mcm9udGVuZCwgJmRldi0+aTJjX2FkYXAsCisJCQkJICAgJmhhdXBwYXVnZV9odnI5NTBxX3R1bmVyY29uZmlnKTsKIAkJYnJlYWs7CiAJY2FzZSBBVTA4MjhfQk9BUkRfSEFVUFBBVUdFX0hWUjk1MFFfTVhMOgogCQlkdmItPmZyb250ZW5kID0gZHZiX2F0dGFjaChhdTg1MjJfYXR0YWNoLApAQCAtMzgwLDYgKzQwNiwxNiBAQAogCQkJCSAgIDB4NjAsICZkZXYtPmkyY19hZGFwLAogCQkJCSAgICZoYXVwcGF1Z2Vfd29vZGJ1cnlfdHVuZXJjb25maWcpOwogCQlicmVhazsKKwljYXNlIEFVMDgyOF9CT0FSRF9EVklDT19GVVNJT05IRFRWNzoKKwkJZHZiLT5mcm9udGVuZCA9IGR2Yl9hdHRhY2goYXU4NTIyX2F0dGFjaCwKKwkJCQkmZnVzaW9uaGR0djd1c2JfY29uZmlnLAorCQkJCSZkZXYtPmkyY19hZGFwKTsKKwkJaWYgKGR2Yi0+ZnJvbnRlbmQgIT0gTlVMTCkgeworCQkJZHZiX2F0dGFjaCh4YzUwMDBfYXR0YWNoLCBkdmItPmZyb250ZW5kLAorCQkJCSZkZXYtPmkyY19hZGFwLAorCQkJCSZoYXVwcGF1Z2VfaHZyOTUwcV90dW5lcmNvbmZpZyk7CisJCX0KKwkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiVGhlIGZyb250ZW5kIG9mIHlvdXIgRFZCL0FUU0MgY2FyZCAiCiAJCSAgICAgICAiaXNuJ3Qgc3VwcG9ydGVkIHlldFxuIik7CkBAIC0zOTAsNiArNDI2LDggQEAKIAkJICAgICAgIF9fZnVuY19fKTsKIAkJcmV0dXJuIC0xOwogCX0KKwkvKiBkZWZpbmUgZ2VuZXJhbC1wdXJwb3NlIGNhbGxiYWNrIHBvaW50ZXIgKi8KKwlkdmItPmZyb250ZW5kLT5jYWxsYmFjayA9IGF1MDgyOF90dW5lcl9jYWxsYmFjazsKIAogCS8qIHJlZ2lzdGVyIGV2ZXJ5dGhpbmcgKi8KIAlyZXQgPSBkdmJfcmVnaXN0ZXIoZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vYXUwODI4L2F1MDgyOC5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9hdTA4MjgvYXUwODI4LmgKaW5kZXggNGYxMGZmMy4uOWQ2YTExNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9hdTA4MjgvYXUwODI4LmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9hdTA4MjgvYXUwODI4LmgKQEAgLTEwMyw3ICsxMDMsOCBAQAogZXh0ZXJuIHN0cnVjdCBhdTA4MjhfYm9hcmQgYXUwODI4X2JvYXJkc1tdOwogZXh0ZXJuIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGF1MDgyOF91c2JfaWRfdGFibGVbXTsKIGV4dGVybiB2b2lkIGF1MDgyOF9ncGlvX3NldHVwKHN0cnVjdCBhdTA4MjhfZGV2ICpkZXYpOwotZXh0ZXJuIGludCBhdTA4MjhfdHVuZXJfY2FsbGJhY2sodm9pZCAqcHJpdiwgaW50IGNvbW1hbmQsIGludCBhcmcpOworZXh0ZXJuIGludCBhdTA4MjhfdHVuZXJfY2FsbGJhY2sodm9pZCAqcHJpdiwgaW50IGNvbXBvbmVudCwKKwkJCQkgaW50IGNvbW1hbmQsIGludCBhcmcpOwogZXh0ZXJuIHZvaWQgYXUwODI4X2NhcmRfc2V0dXAoc3RydWN0IGF1MDgyOF9kZXYgKmRldik7CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0ODE5LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0ODE5LmMKaW5kZXggZGRkMmE3OS4uYTA3YjdiOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9idDgxOS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4MTkuYwpAQCAtMjksNDQgKzI5LDI1IEBACiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+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+YWRkciA8PCAxKTsKLQl9Ci0KKwlpZiAoaSA8IDApCisJCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgImluaXQgc3RhdHVzICVkXG4iLCBpKTsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludAotYnQ4MTlfYXR0YWNoX2FkYXB0ZXIgKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlcikKK3N0YXRpYyBpbnQgYnQ4MTlfcmVtb3ZlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCiB7Ci0JcmV0dXJuIGkyY19wcm9iZShhZGFwdGVyLCAmYWRkcl9kYXRhLCAmYnQ4MTlfZGV0ZWN0X2NsaWVudCk7Ci19Ci0KLXN0YXRpYyBpbnQKLWJ0ODE5X2RldGFjaF9jbGllbnQgKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCi17Ci0Jc3RydWN0IGJ0ODE5ICpkZWNvZGVyID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7Ci0JaW50IGVycjsKLQotCWVyciA9IGkyY19kZXRhY2hfY2xpZW50KGNsaWVudCk7Ci0JaWYgKGVycikgewotCQlyZXR1cm4gZXJyOwotCX0KLQotCWtmcmVlKGRlY29kZXIpOwotCWtmcmVlKGNsaWVudCk7Ci0KKwlrZnJlZShpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KSk7CiAJcmV0dXJuIDA7CiB9CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKLXN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBpMmNfZHJpdmVyX2J0ODE5ID0gewotCS5kcml2ZXIgPSB7Ci0JCS5uYW1lID0gImJ0ODE5IiwKLQl9LAotCi0JLmlkID0gSTJDX0RSSVZFUklEX0JUODE5LAotCi0JLmF0dGFjaF9hZGFwdGVyID0gYnQ4MTlfYXR0YWNoX2FkYXB0ZXIsCi0JLmRldGFjaF9jbGllbnQgPSBidDgxOV9kZXRhY2hfY2xpZW50LAotCS5jb21tYW5kID0gYnQ4MTlfY29tbWFuZCwKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCBidDgxOV9pZFtdID0geworCXsgImJ0ODE5YSIsIDAgfSwKKwl7ICJidDgxN2EiLCAwIH0sCisJeyAiYnQ4MTVhIiwgMCB9LAorCXsgfQogfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUoaTJjLCBidDgxOV9pZCk7CiAKLXN0YXRpYyBpbnQgX19pbml0Ci1idDgxOV9pbml0X21vZHVsZSAodm9pZCkKLXsKLQlyZXR1cm4gaTJjX2FkZF9kcml2ZXIoJmkyY19kcml2ZXJfYnQ4MTkpOwotfQotCi1zdGF0aWMgdm9pZCBfX2V4aXQKLWJ0ODE5X2V4aXQgKHZvaWQpCi17Ci0JaTJjX2RlbF9kcml2ZXIoJmkyY19kcml2ZXJfYnQ4MTkpOwotfQotCi1tb2R1bGVfaW5pdChidDgxOV9pbml0X21vZHVsZSk7Ci1tb2R1bGVfZXhpdChidDgxOV9leGl0KTsKK3N0YXRpYyBzdHJ1Y3QgdjRsMl9pMmNfZHJpdmVyX2RhdGEgdjRsMl9pMmNfZGF0YSA9IHsKKwkubmFtZSA9ICJidDgxOSIsCisJLmRyaXZlcmlkID0gSTJDX0RSSVZFUklEX0JUODE5LAorCS5jb21tYW5kID0gYnQ4MTlfY29tbWFuZCwKKwkucHJvYmUgPSBidDgxOV9wcm9iZSwKKwkucmVtb3ZlID0gYnQ4MTlfcmVtb3ZlLAorCS5pZF90YWJsZSA9IGJ0ODE5X2lkLAorfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4NTYuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4NTYuYwppbmRleCA5OGVlMmQ4Li40MjEzODY3IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0ODU2LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9idDg1Ni5jCkBAIC0yOSw0NyArMjksMjggQEAKICAqLwogCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Ci0jaW5jbHVkZSA8bGludXgvZXJybm8uaD4KLSNpbmNsdWRlIDxsaW51eC9mcy5oPgotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L21ham9yLmg+Ci0jaW5jbHVkZSA8bGludXgvc2xhYi5oPgotI2luY2x1ZGUgPGxpbnV4L21tLmg+Ci0jaW5jbHVkZSA8bGludXgvc2lnbmFsLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9pMmMuaD4KLSNpbmNsdWRlIDxsaW51eC92aWRlb19lbmNvZGVyLmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+Ci0jaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KLSNpbmNsdWRlIDxhc20vcGFnZS5oPgorI2luY2x1ZGUgPGxpbnV4L2lvY3RsLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KLQorI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy1pZC5oPgogI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvdmlkZW9fZW5jb2Rlci5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItY29tbW9uLmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1pMmMtZHJ2LWxlZ2FjeS5oPgogCiBNT0RVTEVfREVTQ1JJUFRJT04oIkJyb29rdHJlZS04NTZBIHZpZGVvIGVuY29kZXIgZHJpdmVyIik7CiBNT0RVTEVfQVVUSE9SKCJNaWtlIEJlcm5zb24gJiBEYXZlIFBlcmtzIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKLQotI2RlZmluZSBJMkNfTkFNRShzKSAocyktPm5hbWUKLQotCiBzdGF0aWMgaW50IGRlYnVnOwogbW9kdWxlX3BhcmFtKGRlYnVnLCBpbnQsIDApOwogTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgIkRlYnVnIGxldmVsICgwLTEpIik7CiAKLSNkZWZpbmUgZHByaW50ayhudW0sIGZvcm1hdCwgYXJncy4uLikgXAotCWRvIHsgXAotCQlpZiAoZGVidWcgPj0gbnVtKSBcCi0JCQlwcmludGsoZm9ybWF0LCAjI2FyZ3MpOyBcCi0JfSB3aGlsZSAoMCkKLQogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAotI2RlZmluZSBSRUdfT0ZGU0VUCTB4REEKLSNkZWZpbmUgQlQ4NTZfTlJfUkVHCTYKKyNkZWZpbmUgQlQ4NTZfUkVHX09GRlNFVAkweERBCisjZGVmaW5lIEJUODU2X05SX1JFRwkJNgogCiBzdHJ1Y3QgYnQ4NTYgewogCXVuc2lnbmVkIGNoYXIgcmVnW0JUODU2X05SX1JFR107CkBAIC03OCw2MSArNTksNDYgQEAKIAlpbnQgZW5hYmxlOwogfTsKIAotI2RlZmluZSAgIEkyQ19CVDg1NiAgICAgICAgMHg4OAotCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCi1zdGF0aWMgaW5saW5lIGludAotYnQ4NTZfd3JpdGUgKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCi0JICAgICB1OCAgICAgICAgICAgICAgICAgcmVnLAotCSAgICAgdTggICAgICAgICAgICAgICAgIHZhbHVlKQorc3RhdGljIGlubGluZSBpbnQgYnQ4NTZfd3JpdGUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdTggcmVnLCB1OCB2YWx1ZSkKIHsKIAlzdHJ1Y3QgYnQ4NTYgKmVuY29kZXIgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKIAotCWVuY29kZXItPnJlZ1tyZWcgLSBSRUdfT0ZGU0VUXSA9IHZhbHVlOworCWVuY29kZXItPnJlZ1tyZWcgLSBCVDg1Nl9SRUdfT0ZGU0VUXSA9IHZhbHVlOwogCXJldHVybiBpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgcmVnLCB2YWx1ZSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50Ci1idDg1Nl9zZXRiaXQgKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCi0JICAgICAgdTggICAgICAgICAgICAgICAgIHJlZywKLQkgICAgICB1OCAgICAgICAgICAgICAgICAgYml0LAotCSAgICAgIHU4ICAgICAgICAgICAgICAgICB2YWx1ZSkKK3N0YXRpYyBpbmxpbmUgaW50IGJ0ODU2X3NldGJpdChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1OCByZWcsIHU4IGJpdCwgdTggdmFsdWUpCiB7CiAJc3RydWN0IGJ0ODU2ICplbmNvZGVyID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CiAKIAlyZXR1cm4gYnQ4NTZfd3JpdGUoY2xpZW50LCByZWcsCi0JCQkgICAoZW5jb2Rlci0+Ci0JCQkgICAgcmVnW3JlZyAtIFJFR19PRkZTRVRdICYgfigxIDw8IGJpdCkpIHwKLQkJCSAgICAodmFsdWUgPyAoMSA8PCBiaXQpIDogMCkpOworCQkoZW5jb2Rlci0+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+aWQgPT0gSTJDX0hXX0JfWlIzNjA2NzsKIH0KIAotc3RhdGljIGludCBidDg2Nl9jb21tYW5kKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCi0JCQkgdW5zaWduZWQgaW50IGNtZCwgdm9pZCAqYXJnKQotewotCXN0cnVjdCBidDg2NiAqZW5jb2RlciA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwotCXJldHVybiBidDg2Nl9kb19jb21tYW5kKGVuY29kZXIsIGNtZCwgYXJnKTsKLX0KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCBidDg2Nl9pZFtdID0geworCXsgImJ0ODY2IiwgMCB9LAorCXsgfQorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUoaTJjLCBidDg2Nl9pZCk7CiAKLXN0YXRpYyBpbnQgX19kZXZpbml0IGJ0ODY2X2luaXQodm9pZCkKLXsKLQlpMmNfYWRkX2RyaXZlcigmaTJjX2RyaXZlcl9idDg2Nik7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fZGV2ZXhpdCBidDg2Nl9leGl0KHZvaWQpCi17Ci0JaTJjX2RlbF9kcml2ZXIoJmkyY19kcml2ZXJfYnQ4NjYpOwotfQotCi1tb2R1bGVfaW5pdChidDg2Nl9pbml0KTsKLW1vZHVsZV9leGl0KGJ0ODY2X2V4aXQpOworc3RhdGljIHN0cnVjdCB2NGwyX2kyY19kcml2ZXJfZGF0YSB2NGwyX2kyY19kYXRhID0geworCS5uYW1lID0gImJ0ODY2IiwKKwkuZHJpdmVyaWQgPSBJMkNfRFJJVkVSSURfQlQ4NjYsCisJLmNvbW1hbmQgPSBidDg2Nl9jb21tYW5kLAorCS5wcm9iZSA9IGJ0ODY2X3Byb2JlLAorCS5yZW1vdmUgPSBidDg2Nl9yZW1vdmUsCisJLmxlZ2FjeV9wcm9iZSA9IGJ0ODY2X2xlZ2FjeV9wcm9iZSwKKwkuaWRfdGFibGUgPSBidDg2Nl9pZCwKK307CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0OHh4L2J0dHYtY2FyZHMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4eHgvYnR0di1jYXJkcy5jCmluZGV4IDYwODFlZGMuLjEzNzQyYjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4eHgvYnR0di1jYXJkcy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4eHgvYnR0di1jYXJkcy5jCkBAIC0zMDUsNyArMzA1LDcgQEAKIAl7IDB4MDAyNjE4MjIsIEJUVFZfQk9BUkRfVFdJTkhBTl9EU1QsCSJETlRWIExpdmUhIE1pbmkgIn0sCiAJeyAweGQyMDBkYmMwLCBCVFRWX0JPQVJEX0RWSUNPX0ZVU0lPTkhEVFZfMiwJIkRWaUNPIEZ1c2lvbkhEVFYgMiIgfSwKIAl7IDB4NzYzYzAwOGEsIEJUVFZfQk9BUkRfR0VPVklTSU9OX0dWNjAwLAkiR2VvVmlzaW9uIEdWLTYwMCIgfSwKLQorCXsgMHgxODAxMTAwMCwgQlRUVl9CT0FSRF9FTkxUVl9GTV8yLAkiRW5jb3JlIEVOTCBUVi1GTS0yIiB9LAogCXsgMCwgLTEsIE5VTEwgfQogfTsKIApAQCAtMzAzNyw2ICszMDM3LDMxIEBACiAJCS5oYXNfcmFkaW8gICAgICA9IDEsCiAJCS5oYXNfcmVtb3RlICAgICA9IDEsCiAJfSwKKwlbQlRUVl9CT0FSRF9FTkxUVl9GTV8yXSA9IHsKKwkJLyogRW5jb3JlIFRWIFR1bmVyIFBybyBFTkwgVFYtRk0tMgorCQkgICBNYXVybyBDYXJ2YWxobyBDaGVoYWIgPG1jaGVoYWJAaW5mcmFkZWFkLm9yZyAqLworCQkubmFtZSAgICAgICAgICAgPSAiRW5jb3JlIEVOTCBUVi1GTS0yIiwKKwkJLnZpZGVvX2lucHV0cyAgID0gMywKKwkJLmF1ZGlvX2lucHV0cyAgID0gMSwKKwkJLnR1bmVyICAgICAgICAgID0gMCwKKwkJLnN2aHMgICAgICAgICAgID0gMiwKKwkJLyogYml0IDYgICAgICAgICAgLT4gSVIgZGlzYWJsZWQKKwkJICAgYml0IDE4LzE3ID0gMDAgLT4gbXV0ZQorCQkJICAgICAgIDAxIC0+IGVuYWJsZSBleHRlcm5hbCBhdWRpbyBpbnB1dAorCQkJICAgICAgIDEwIC0+IGludGVybmFsIGF1ZGlvIGlucHV0IChtb25vPykKKwkJCSAgICAgICAxMSAtPiBpbnRlcm5hbCBhdWRpbyBpbnB1dAorCQkgKi8KKwkJLmdwaW9tYXNrICAgICAgID0gMHgwNjAwNDAsCisJCS5tdXhzZWwgICAgICAgICA9IHsgMiwgMywgMyB9LAorCQkuZ3Bpb211eCAgICAgICAgPSB7IDB4NjAwMDAsIDB4NjAwMDAsIDB4MjAwMDAsIDB4MjAwMDAgfSwKKwkJLmdwaW9tdXRlIAk9IDAsCisJCS50dW5lcl90eXBlCT0gVFVORVJfVENMX01GMDJHSVBfNU4sCisJCS50dW5lcl9hZGRyICAgICA9IEFERFJfVU5TRVQsCisJCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCisJCS5wbGwgICAgICAgICAgICA9IFBMTF8yOCwKKwkJLmhhc19yYWRpbyAgICAgID0gMSwKKwkJLmhhc19yZW1vdGUgICAgID0gMSwKKwl9CiB9OwogCiBzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IGJ0dHZfbnVtX3R2Y2FyZHMgPSBBUlJBWV9TSVpFKGJ0dHZfdHZjYXJkcyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0OHh4L2J0dHYtZHJpdmVyLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0OHh4L2J0dHYtZHJpdmVyLmMKaW5kZXggOTMzZWFlZi4uNTg1OGJmNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9idDh4eC9idHR2LWRyaXZlci5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4eHgvYnR0di1kcml2ZXIuYwpAQCAtNzYsOSArNzYsOSBAQAogc3RhdGljIHVuc2lnbmVkIGludCBnYnVmc2l6ZSA9IDB4MjA4MDAwOwogc3RhdGljIHVuc2lnbmVkIGludCByZXNldF9jcm9wID0gMTsKIAotc3RhdGljIGludCB2aWRlb19uciA9IC0xOwotc3RhdGljIGludCByYWRpb19uciA9IC0xOwotc3RhdGljIGludCB2YmlfbnIgPSAtMTsKK3N0YXRpYyBpbnQgdmlkZW9fbnJbQlRUVl9NQVhdID0geyBbMCAuLi4gKEJUVFZfTUFYLTEpXSA9IC0xIH07CitzdGF0aWMgaW50IHJhZGlvX25yW0JUVFZfTUFYXSA9IHsgWzAgLi4uIChCVFRWX01BWC0xKV0gPSAtMSB9Oworc3RhdGljIGludCB2YmlfbnJbQlRUVl9NQVhdID0geyBbMCAuLi4gKEJUVFZfTUFYLTEpXSA9IC0xIH07CiBzdGF0aWMgaW50IGRlYnVnX2xhdGVuY3k7CiAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgZmRzcjsKQEAgLTEwOCw5ICsxMDgsNiBAQAogbW9kdWxlX3BhcmFtKGRlYnVnX2xhdGVuY3ksICAgICBpbnQsIDA2NDQpOwogCiBtb2R1bGVfcGFyYW0oZmRzciwgICAgICAgICAgICAgIGludCwgMDQ0NCk7Ci1tb2R1bGVfcGFyYW0odmlkZW9fbnIsICAgICAgICAgIGludCwgMDQ0NCk7Ci1tb2R1bGVfcGFyYW0ocmFkaW9fbnIsICAgICAgICAgIGludCwgMDQ0NCk7Ci1tb2R1bGVfcGFyYW0odmJpX25yLCAgICAgICAgICAgIGludCwgMDQ0NCk7CiBtb2R1bGVfcGFyYW0oZ2J1ZmZlcnMsICAgICAgICAgIGludCwgMDQ0NCk7CiBtb2R1bGVfcGFyYW0oZ2J1ZnNpemUsICAgICAgICAgIGludCwgMDQ0NCk7CiBtb2R1bGVfcGFyYW0ocmVzZXRfY3JvcCwgICAgICAgIGludCwgMDQ0NCk7CkBAIC0xMzAsNyArMTI3LDEwIEBACiBtb2R1bGVfcGFyYW0oZnVsbF9sdW1hX3JhbmdlLCAgIGludCwgMDQ0NCk7CiBtb2R1bGVfcGFyYW0oY29yaW5nLCAgICAgICAgICAgIGludCwgMDQ0NCk7CiAKLW1vZHVsZV9wYXJhbV9hcnJheShyYWRpbywgaW50LCBOVUxMLCAwNDQ0KTsKK21vZHVsZV9wYXJhbV9hcnJheShyYWRpbywgICAgICAgaW50LCBOVUxMLCAwNDQ0KTsKK21vZHVsZV9wYXJhbV9hcnJheSh2aWRlb19uciwgICAgaW50LCBOVUxMLCAwNDQ0KTsKK21vZHVsZV9wYXJhbV9hcnJheShyYWRpb19uciwgICAgaW50LCBOVUxMLCAwNDQ0KTsKK21vZHVsZV9wYXJhbV9hcnJheSh2YmlfbnIsICAgICAgaW50LCBOVUxMLCAwNDQ0KTsKIAogTU9EVUxFX1BBUk1fREVTQyhyYWRpbywiVGhlIFRWIGNhcmQgc3VwcG9ydHMgcmFkaW8sIGRlZmF1bHQgaXMgMCAobm8pIik7CiBNT0RVTEVfUEFSTV9ERVNDKGJpZ2VuZGlhbiwiYnl0ZSBvcmRlciBvZiB0aGUgZnJhbWVidWZmZXIsIGRlZmF1bHQgaXMgbmF0aXZlIGVuZGlhbiIpOwpAQCAtMTUyLDYgKzE1Miw5IEBACiBNT0RVTEVfUEFSTV9ERVNDKHV2X3JhdGlvLCJyYXRpbyBiZXR3ZWVuIHUgYW5kIHYgZ2FpbnMsIGRlZmF1bHQgaXMgNTAiKTsKIE1PRFVMRV9QQVJNX0RFU0MoZnVsbF9sdW1hX3JhbmdlLCJ1c2UgdGhlIGZ1bGwgbHVtYSByYW5nZSwgZGVmYXVsdCBpcyAwIChubykiKTsKIE1PRFVMRV9QQVJNX0RFU0MoY29yaW5nLCJzZXQgdGhlIGx1bWEgY29yaW5nIGxldmVsLCBkZWZhdWx0IGlzIDAgKG5vKSIpOworTU9EVUxFX1BBUk1fREVTQyh2aWRlb19uciwgInZpZGVvIGRldmljZSBudW1iZXJzIik7CitNT0RVTEVfUEFSTV9ERVNDKHZiaV9uciwgInZiaSBkZXZpY2UgbnVtYmVycyIpOworTU9EVUxFX1BBUk1fREVTQyhyYWRpb19uciwgInJhZGlvIGRldmljZSBudW1iZXJzIik7CiAKIE1PRFVMRV9ERVNDUklQVElPTigiYnR0diAtIHY0bC92NGwyIGRyaXZlciBtb2R1bGUgZm9yIGJ0ODQ4Lzg3OCBiYXNlZCBjYXJkcyIpOwogTU9EVUxFX0FVVEhPUigiUmFscGggTWV0emxlciAmIE1hcmN1cyBNZXR6bGVyICYgR2VyZCBLbm9yciIpOwpAQCAtMTM2Nyw3ICsxMzcwLDcgQEAKIAkJCShidHYtPmdwaW9pcnEgPyBCVDg0OF9JTlRfR1BJTlQgOiAwKSB8CiAJCQlCVDg0OF9JTlRfU0NFUlIgfAogCQkJKGZkc3IgPyBCVDg0OF9JTlRfRkRTUiA6IDApIHwKLQkJCUJUODQ4X0lOVF9SSVNDSXxCVDg0OF9JTlRfT0NFUlJ8QlQ4NDhfSU5UX1ZQUkVTfAorCQkJQlQ4NDhfSU5UX1JJU0NJIHwgQlQ4NDhfSU5UX09DRVJSIHwKIAkJCUJUODQ4X0lOVF9GTVRDSEd8QlQ4NDhfSU5UX0hMT0NLfAogCQkJQlQ4NDhfSU5UX0kyQ0RPTkUsCiAJCQlCVDg0OF9JTlRfTUFTSyk7CkBAIC0yNjYxLDE4ICsyNjY0LDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBidHR2X2VudW1fZm10X3ZiaV9jYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgICpwcml2LAotCQkJCXN0cnVjdCB2NGwyX2ZtdGRlc2MgKmYpCi17Ci0JaWYgKDAgIT0gZi0+aW5kZXgpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JZi0+cGl4ZWxmb3JtYXQgPSBWNEwyX1BJWF9GTVRfR1JFWTsKLQlzdHJjcHkoZi0+ZGVzY3JpcHRpb24sICJ2YmkgZGF0YSIpOwotCi0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyBpbnQgYnR0dl9lbnVtX2ZtdF9jYXBfb3ZyKHN0cnVjdCB2NGwyX2ZtdGRlc2MgKmYpCiB7CiAJaW50IGluZGV4ID0gLTEsIGk7CkBAIC0zMjI3LDYgKzMyMTgsNyBAQAogCiAJZHByaW50ayhLRVJOX0RFQlVHICJidHR2OiBvcGVuIG1pbm9yPSVkXG4iLG1pbm9yKTsKIAorCWxvY2tfa2VybmVsKCk7CiAJZm9yIChpID0gMDsgaSA8IGJ0dHZfbnVtOyBpKyspIHsKIAkJaWYgKGJ0dHZzW2ldLnZpZGVvX2RldiAmJgogCQkgICAgYnR0dnNbaV0udmlkZW9fZGV2LT5taW5vciA9PSBtaW5vcikgewpAQCAtMzI0MSwxNiArMzIzMywyMCBAQAogCQkJYnJlYWs7CiAJCX0KIAl9Ci0JaWYgKE5VTEwgPT0gYnR2KQorCWlmIChOVUxMID09IGJ0dikgeworCQl1bmxvY2tfa2VybmVsKCk7CiAJCXJldHVybiAtRU5PREVWOworCX0KIAogCWRwcmludGsoS0VSTl9ERUJVRyAiYnR0diVkOiBvcGVuIGNhbGxlZCAodHlwZT0lcylcbiIsCiAJCWJ0di0+Yy5ucix2NGwyX3R5cGVfbmFtZXNbdHlwZV0pOwogCiAJLyogYWxsb2NhdGUgcGVyIGZpbGVoYW5kbGUgZGF0YSAqLwogCWZoID0ga21hbGxvYyhzaXplb2YoKmZoKSxHRlBfS0VSTkVMKTsKLQlpZiAoTlVMTCA9PSBmaCkKKwlpZiAoTlVMTCA9PSBmaCkgeworCQl1bmxvY2tfa2VybmVsKCk7CiAJCXJldHVybiAtRU5PTUVNOworCX0KIAlmaWxlLT5wcml2YXRlX2RhdGEgPSBmaDsKIAkqZmggPSBidHYtPmluaXQ7CiAJZmgtPnR5cGUgPSB0eXBlOwpAQCAtMzI3MCw2ICszMjY2LDcgQEAKIAkJCSAgICBzaXplb2Yoc3RydWN0IGJ0dHZfYnVmZmVyKSwKIAkJCSAgICBmaCk7CiAJc2V0X3R2bm9ybShidHYsYnR2LT50dm5vcm0pOworCXNldF9pbnB1dChidHYsIGJ0di0+aW5wdXQsIGJ0di0+dHZub3JtKTsKIAogCWJ0di0+dXNlcnMrKzsKIApAQCAtMzI5MCw2ICszMjg3LDcgQEAKIAlidHR2X3ZiaV9mbXRfcmVzZXQoJmZoLT52YmlfZm10LCBidHYtPnR2bm9ybSk7CiAKIAlidHR2X2ZpZWxkX2NvdW50KGJ0dik7CisJdW5sb2NrX2tlcm5lbCgpOwogCXJldHVybiAwOwogfQogCkBAIC0zMzMwLDYgKzMzMjgsMTAgQEAKIAogCWJ0di0+dXNlcnMtLTsKIAlidHR2X2ZpZWxkX2NvdW50KGJ0dik7CisKKwlpZiAoIWJ0di0+dXNlcnMpCisJCWF1ZGlvX211dGUoYnR2LCAxKTsKKwogCXJldHVybiAwOwogfQogCkBAIC0zMzY3LDcgKzMzNjksNiBAQAogCS52aWRpb2NfZ19mbXRfdmlkX292ZXJsYXkgICAgICAgPSBidHR2X2dfZm10X3ZpZF9vdmVybGF5LAogCS52aWRpb2NfdHJ5X2ZtdF92aWRfb3ZlcmxheSAgICAgPSBidHR2X3RyeV9mbXRfdmlkX292ZXJsYXksCiAJLnZpZGlvY19zX2ZtdF92aWRfb3ZlcmxheSAgICAgICA9IGJ0dHZfc19mbXRfdmlkX292ZXJsYXksCi0JLnZpZGlvY19lbnVtX2ZtdF92YmlfY2FwICAgICAgICA9IGJ0dHZfZW51bV9mbXRfdmJpX2NhcCwKIAkudmlkaW9jX2dfZm10X3ZiaV9jYXAgICAgICAgICAgID0gYnR0dl9nX2ZtdF92YmlfY2FwLAogCS52aWRpb2NfdHJ5X2ZtdF92YmlfY2FwICAgICAgICAgPSBidHR2X3RyeV9mbXRfdmJpX2NhcCwKIAkudmlkaW9jX3NfZm10X3ZiaV9jYXAgICAgICAgICAgID0gYnR0dl9zX2ZtdF92YmlfY2FwLApAQCAtMzQzMCwyMSArMzQzMSwyNiBAQAogCiAJZHByaW50aygiYnR0djogb3BlbiBtaW5vcj0lZFxuIixtaW5vcik7CiAKKwlsb2NrX2tlcm5lbCgpOwogCWZvciAoaSA9IDA7IGkgPCBidHR2X251bTsgaSsrKSB7CiAJCWlmIChidHR2c1tpXS5yYWRpb19kZXYgJiYgYnR0dnNbaV0ucmFkaW9fZGV2LT5taW5vciA9PSBtaW5vcikgewogCQkJYnR2ID0gJmJ0dHZzW2ldOwogCQkJYnJlYWs7CiAJCX0KIAl9Ci0JaWYgKE5VTEwgPT0gYnR2KQorCWlmIChOVUxMID09IGJ0dikgeworCQl1bmxvY2tfa2VybmVsKCk7CiAJCXJldHVybiAtRU5PREVWOworCX0KIAogCWRwcmludGsoImJ0dHYlZDogb3BlbiBjYWxsZWQgKHJhZGlvKVxuIixidHYtPmMubnIpOwogCiAJLyogYWxsb2NhdGUgcGVyIGZpbGVoYW5kbGUgZGF0YSAqLwogCWZoID0ga21hbGxvYyhzaXplb2YoKmZoKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKE5VTEwgPT0gZmgpCisJaWYgKE5VTEwgPT0gZmgpIHsKKwkJdW5sb2NrX2tlcm5lbCgpOwogCQlyZXR1cm4gLUVOT01FTTsKKwl9CiAJZmlsZS0+cHJpdmF0ZV9kYXRhID0gZmg7CiAJKmZoID0gYnR2LT5pbml0OwogCXY0bDJfcHJpb19vcGVuKCZidHYtPnByaW8sICZmaC0+cHJpbyk7CkBAIC0zNDU3LDYgKzM0NjMsNyBAQAogCWF1ZGlvX2lucHV0KGJ0dixUVkFVRElPX0lOUFVUX1JBRElPKTsKIAogCW11dGV4X3VubG9jaygmYnR2LT5sb2NrKTsKKwl1bmxvY2tfa2VybmVsKCk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTQyMzUsNyArNDI0Miw4IEBACiAKIAlpZiAoTlVMTCA9PSBidHYtPnZpZGVvX2RldikKIAkJZ290byBlcnI7Ci0JaWYgKHZpZGVvX3JlZ2lzdGVyX2RldmljZShidHYtPnZpZGVvX2RldixWRkxfVFlQRV9HUkFCQkVSLHZpZGVvX25yKTwwKQorCWlmICh2aWRlb19yZWdpc3Rlcl9kZXZpY2UoYnR2LT52aWRlb19kZXYsIFZGTF9UWVBFX0dSQUJCRVIsCisJCQkJICB2aWRlb19ucltidHYtPmMubnJdKSA8IDApCiAJCWdvdG8gZXJyOwogCXByaW50ayhLRVJOX0lORk8gImJ0dHYlZDogcmVnaXN0ZXJlZCBkZXZpY2UgdmlkZW8lZFxuIiwKIAkgICAgICAgYnR2LT5jLm5yLGJ0di0+dmlkZW9fZGV2LT5taW5vciAmIDB4MWYpOwpAQCAtNDI1MSw3ICs0MjU5LDggQEAKIAogCWlmIChOVUxMID09IGJ0di0+dmJpX2RldikKIAkJZ290byBlcnI7Ci0JaWYgKHZpZGVvX3JlZ2lzdGVyX2RldmljZShidHYtPnZiaV9kZXYsVkZMX1RZUEVfVkJJLHZiaV9ucik8MCkKKwlpZiAodmlkZW9fcmVnaXN0ZXJfZGV2aWNlKGJ0di0+dmJpX2RldiwgVkZMX1RZUEVfVkJJLAorCQkJCSAgdmJpX25yW2J0di0+Yy5ucl0pIDwgMCkKIAkJZ290byBlcnI7CiAJcHJpbnRrKEtFUk5fSU5GTyAiYnR0diVkOiByZWdpc3RlcmVkIGRldmljZSB2YmklZFxuIiwKIAkgICAgICAgYnR2LT5jLm5yLGJ0di0+dmJpX2Rldi0+bWlub3IgJiAweDFmKTsKQEAgLTQyNjIsNyArNDI3MSw4IEBACiAJYnR2LT5yYWRpb19kZXYgPSB2ZGV2X2luaXQoYnR2LCAmcmFkaW9fdGVtcGxhdGUsICJyYWRpbyIpOwogCWlmIChOVUxMID09IGJ0di0+cmFkaW9fZGV2KQogCQlnb3RvIGVycjsKLQlpZiAodmlkZW9fcmVnaXN0ZXJfZGV2aWNlKGJ0di0+cmFkaW9fZGV2LCBWRkxfVFlQRV9SQURJTyxyYWRpb19ucik8MCkKKwlpZiAodmlkZW9fcmVnaXN0ZXJfZGV2aWNlKGJ0di0+cmFkaW9fZGV2LCBWRkxfVFlQRV9SQURJTywKKwkJCQkgIHJhZGlvX25yW2J0di0+Yy5ucl0pIDwgMCkKIAkJZ290byBlcnI7CiAJcHJpbnRrKEtFUk5fSU5GTyAiYnR0diVkOiByZWdpc3RlcmVkIGRldmljZSByYWRpbyVkXG4iLAogCSAgICAgICBidHYtPmMubnIsYnR2LT5yYWRpb19kZXYtPm1pbm9yICYgMHgxZik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0OHh4L2J0dHYtaW5wdXQuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4eHgvYnR0di1pbnB1dC5jCmluZGV4IGEzOGFmOTguLjJmMjg5ZDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4eHgvYnR0di1pbnB1dC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4eHgvYnR0di1pbnB1dC5jCkBAIC0yOCw4ICsyOCw4IEBACiAjaW5jbHVkZSAiYnR0dnAuaCIKIAogCi1zdGF0aWMgaW50IGRlYnVnOwotbW9kdWxlX3BhcmFtKGRlYnVnLCBpbnQsIDA2NDQpOyAgICAvKiBkZWJ1ZyBsZXZlbCAoMCwxLDIpICovCitzdGF0aWMgaW50IGlyX2RlYnVnOworbW9kdWxlX3BhcmFtKGlyX2RlYnVnLCBpbnQsIDA2NDQpOwogc3RhdGljIGludCByZXBlYXRfZGVsYXkgPSA1MDA7CiBtb2R1bGVfcGFyYW0ocmVwZWF0X2RlbGF5LCBpbnQsIDA2NDQpOwogc3RhdGljIGludCByZXBlYXRfcGVyaW9kID0gMzM7CkBAIC00MCw2ICs0MCwxMiBAQAogc3RhdGljIGludCBpcl9yYzVfa2V5X3RpbWVvdXQgPSAyMDA7CiBtb2R1bGVfcGFyYW0oaXJfcmM1X2tleV90aW1lb3V0LCBpbnQsIDA2NDQpOwogCisjdW5kZWYgZHByaW50aworI2RlZmluZSBkcHJpbnRrKGFyZy4uLikgZG8gewlcCisJaWYgKGlyX2RlYnVnID49IDEpCVwKKwkJcHJpbnRrKGFyZyk7CVwKK30gd2hpbGUgKDApCisKICNkZWZpbmUgREVWTkFNRSAiYnR0di1pbnB1dCIKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwpAQCAtNzksNiArODUsNDUgQEAKIAogfQogCitzdGF0aWMgdm9pZCBpcl9lbmx0dl9oYW5kbGVfa2V5KHN0cnVjdCBidHR2ICpidHYpCit7CisJc3RydWN0IGNhcmRfaXIgKmlyID0gYnR2LT5yZW1vdGU7CisJdTMyIGdwaW8sIGRhdGEsIGtleXVwOworCisJLyogcmVhZCBncGlvIHZhbHVlICovCisJZ3BpbyA9IGJ0dHZfZ3Bpb19yZWFkKCZidHYtPmMpOworCisJLyogZXh0cmFjdCBkYXRhICovCisJZGF0YSA9IGlyX2V4dHJhY3RfYml0cyhncGlvLCBpci0+bWFza19rZXljb2RlKTsKKworCS8qIENoZWNrIGlmIGl0IGlzIGtleXVwICovCisJa2V5dXAgPSAoZ3BpbyAmIGlyLT5tYXNrX2tleXVwKSA/IDEgPDwgMzEgOiAwOworCisJaWYgKChpci0+bGFzdF9ncGlvICYgMHg3ZikgIT0gZGF0YSkgeworCQlkcHJpbnRrKEtFUk5fSU5GTyBERVZOQU1FICI6IGdwaW89MHgleCBjb2RlPSVkIHwgJXNcbiIsCisJCQlncGlvLCBkYXRhLAorCQkJKGdwaW8gJiBpci0+bWFza19rZXl1cCkgPyAiIHVwIiA6ICJ1cC9kb3duIik7CisKKwkJaXJfaW5wdXRfa2V5ZG93bihpci0+ZGV2LCAmaXItPmlyLCBkYXRhLCBkYXRhKTsKKwkJaWYgKGtleXVwKQorCQkJaXJfaW5wdXRfbm9rZXkoaXItPmRldiwgJmlyLT5pcik7CisJfSBlbHNlIHsKKwkJaWYgKChpci0+bGFzdF9ncGlvICYgMSA8PCAzMSkgPT0ga2V5dXApCisJCQlyZXR1cm47CisKKwkJZHByaW50ayhLRVJOX0lORk8gREVWTkFNRSAiOihjbnQpIGdwaW89MHgleCBjb2RlPSVkIHwgJXNcbiIsCisJCQlncGlvLCBkYXRhLAorCQkJKGdwaW8gJiBpci0+bWFza19rZXl1cCkgPyAiIHVwIiA6ICJkb3duIik7CisKKwkJaWYgKGtleXVwKQorCQkJaXJfaW5wdXRfbm9rZXkoaXItPmRldiwgJmlyLT5pcik7CisJCWVsc2UKKwkJCWlyX2lucHV0X2tleWRvd24oaXItPmRldiwgJmlyLT5pciwgZGF0YSwgZGF0YSk7CisJfQorCisJaXItPmxhc3RfZ3BpbyA9IGRhdGEgfCBrZXl1cDsKK30KKwogdm9pZCBidHR2X2lucHV0X2lycShzdHJ1Y3QgYnR0diAqYnR2KQogewogCXN0cnVjdCBjYXJkX2lyICppciA9IGJ0di0+cmVtb3RlOwpAQCAtOTIsNyArMTM3LDEwIEBACiAJc3RydWN0IGJ0dHYgKmJ0diA9IChzdHJ1Y3QgYnR0diopZGF0YTsKIAlzdHJ1Y3QgY2FyZF9pciAqaXIgPSBidHYtPnJlbW90ZTsKIAotCWlyX2hhbmRsZV9rZXkoYnR2KTsKKwlpZiAoYnR2LT5jLnR5cGUgPT0gQlRUVl9CT0FSRF9FTkxUVl9GTV8yKQorCQlpcl9lbmx0dl9oYW5kbGVfa2V5KGJ0dik7CisJZWxzZQorCQlpcl9oYW5kbGVfa2V5KGJ0dik7CiAJbW9kX3RpbWVyKCZpci0+dGltZXIsIGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKGlyLT5wb2xsaW5nKSk7CiB9CiAKQEAgLTI4NCw2ICszMzIsMTQgQEAKIAkJaXItPm1hc2tfa2V5dXAgICA9IDB4MDA2MDAwOwogCQlpci0+cG9sbGluZyAgICAgID0gNTA7IC8qIG1zICovCiAJCWJyZWFrOworCWNhc2UgQlRUVl9CT0FSRF9FTkxUVl9GTV8yOgorCQlpcl9jb2RlcyAgICAgICAgID0gaXJfY29kZXNfZW5jb3JlX2VubHR2MjsKKwkJaXItPm1hc2tfa2V5Y29kZSA9IDB4MDBmZDAwOworCQlpci0+bWFza19rZXl1cCAgID0gMHgwMDAwODA7CisJCWlyLT5wb2xsaW5nICAgICAgPSAxOyAvKiBtcyAqLworCQlpci0+bGFzdF9ncGlvICAgID0gaXJfZXh0cmFjdF9iaXRzKGJ0dHZfZ3Bpb19yZWFkKCZidHYtPmMpLAorCQkJCQkJICAgaXItPm1hc2tfa2V5Y29kZSk7CisJCWJyZWFrOwogCX0KIAlpZiAoTlVMTCA9PSBpcl9jb2RlcykgewogCQlkcHJpbnRrKEtFUk5fSU5GTyAiT29vcHM6IElSIGNvbmZpZyBlcnJvciBbY2FyZD0lZF1cbiIsIGJ0di0+Yy50eXBlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4eHgvYnR0di5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9idDh4eC9idHR2LmgKaW5kZXggNmQ5M2QxNmMuLjQ2Y2I5MGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4eHgvYnR0di5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4eHgvYnR0di5oCkBAIC0xNzYsNyArMTc2LDcgQEAKICNkZWZpbmUgQlRUVl9CT0FSRF9UWVBIT09OX1RWVFVORVJQQ0kJICAgMHg5NQogI2RlZmluZSBCVFRWX0JPQVJEX0dFT1ZJU0lPTl9HVjYwMAkgICAweDk2CiAjZGVmaW5lIEJUVFZfQk9BUkRfS09aVU1JX0tUVl8wMUMgICAgICAgICAgMHg5NwotCisjZGVmaW5lIEJUVFZfQk9BUkRfRU5MVFZfRk1fMgkJICAgMHg5OAogCiAvKiBtb3JlIGNhcmQtc3BlY2lmaWMgZGVmaW5lcyAqLwogI2RlZmluZSBQVDIyNTRfTF9DSEFOTkVMIDB4MTAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnRjeC1yaXNjLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0Y3gtcmlzYy5jCmluZGV4IDMzMjRhYjMuLmFjMWIyNjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnRjeC1yaXNjLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9idGN4LXJpc2MuYwpAQCAtNjQsNyArNjQsNyBAQAogCQkgICAgICAgdW5zaWduZWQgaW50IHNpemUpCiB7CiAJX19sZTMyICpjcHU7Ci0JZG1hX2FkZHJfdCBkbWE7CisJZG1hX2FkZHJfdCBkbWEgPSAwOwogCiAJaWYgKE5VTEwgIT0gcmlzYy0+Y3B1ICYmIHJpc2MtPnNpemUgPCBzaXplKQogCQlidGN4X3Jpc2NtZW1fZnJlZShwY2kscmlzYyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2J3LXFjYW0uYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnctcWNhbS5jCmluZGV4IDZlMzllMjUuLmFjZTRmZjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnctcWNhbS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnctcWNhbS5jCkBAIC00OTUsNyArNDk1LDcgQEAKIAkJdmFsMiA9ICgoKHEtPnBvcnRfbW9kZSAmIFFDX01PREVfTUFTSykgPT0gUUNfQklESVIpID8gMjQgOiA4KSAqCiAJCSAgICBxLT50cmFuc2Zlcl9zY2FsZTsKIAl9Ci0JdmFsID0gKHZhbCArIHZhbDIgLSAxKSAvIHZhbDI7CisJdmFsID0gRElWX1JPVU5EX1VQKHZhbCwgdmFsMik7CiAJcWNfY29tbWFuZChxLCAweDEzKTsKIAlxY19jb21tYW5kKHEsIHZhbCk7CiAKQEAgLTY1MSw3ICs2NTEsNyBAQAogCXRyYW5zcGVybGluZSA9IHEtPndpZHRoICogcS0+YnBwOwogCWRpdmlzb3IgPSAoKChxLT5wb3J0X21vZGUgJiBRQ19NT0RFX01BU0spID09IFFDX0JJRElSKSA/IDI0IDogOCkgKgogCSAgICBxLT50cmFuc2Zlcl9zY2FsZTsKLQl0cmFuc3BlcmxpbmUgPSAodHJhbnNwZXJsaW5lICsgZGl2aXNvciAtIDEpIC8gZGl2aXNvcjsKKwl0cmFuc3BlcmxpbmUgPSBESVZfUk9VTkRfVVAodHJhbnNwZXJsaW5lLCBkaXZpc29yKTsKIAogCWZvciAoaSA9IDAsIHlpZWxkID0geWllbGRsaW5lczsgaSA8IGxpbmVzdG90cmFuczsgaSsrKQogCXsKQEAgLTg5NCwxMCArODk0LDI3IEBACiAJcmV0dXJuIGxlbjsKIH0KIAorc3RhdGljIGludCBxY2FtX2V4Y2x1c2l2ZV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXN0cnVjdCB2aWRlb19kZXZpY2UgKmRldiA9IHZpZGVvX2RldmRhdGEoZmlsZSk7CisJc3RydWN0IHFjYW1fZGV2aWNlICpxY2FtID0gKHN0cnVjdCBxY2FtX2RldmljZSAqKWRldjsKKworCXJldHVybiB0ZXN0X2FuZF9zZXRfYml0KDAsICZxY2FtLT5pbl91c2UpID8gLUVCVVNZIDogMDsKK30KKworc3RhdGljIGludCBxY2FtX2V4Y2x1c2l2ZV9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXN0cnVjdCB2aWRlb19kZXZpY2UgKmRldiA9IHZpZGVvX2RldmRhdGEoZmlsZSk7CisJc3RydWN0IHFjYW1fZGV2aWNlICpxY2FtID0gKHN0cnVjdCBxY2FtX2RldmljZSAqKWRldjsKKworCWNsZWFyX2JpdCgwLCAmcWNhbS0+aW5fdXNlKTsKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcWNhbV9mb3BzID0gewogCS5vd25lcgkJPSBUSElTX01PRFVMRSwKLQkub3BlbiAgICAgICAgICAgPSB2aWRlb19leGNsdXNpdmVfb3BlbiwKLQkucmVsZWFzZSAgICAgICAgPSB2aWRlb19leGNsdXNpdmVfcmVsZWFzZSwKKwkub3BlbiAgICAgICAgICAgPSBxY2FtX2V4Y2x1c2l2ZV9vcGVuLAorCS5yZWxlYXNlICAgICAgICA9IHFjYW1fZXhjbHVzaXZlX3JlbGVhc2UsCiAJLmlvY3RsICAgICAgICAgID0gcWNhbV9pb2N0bCwKICNpZmRlZiBDT05GSUdfQ09NUEFUCiAJLmNvbXBhdF9pb2N0bAk9IHY0bF9jb21wYXRfaW9jdGwzMiwKQEAgLTkwOSw2ICs5MjYsNyBAQAogewogCS5uYW1lCQk9ICJDb25uZWN0aXggUXVpY2tjYW0iLAogCS5mb3BzICAgICAgICAgICA9ICZxY2FtX2ZvcHMsCisJLnJlbGVhc2UgCT0gdmlkZW9fZGV2aWNlX3JlbGVhc2VfZW1wdHksCiB9OwogCiAjZGVmaW5lIE1BWF9DQU1TIDQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnctcWNhbS5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9idy1xY2FtLmgKaW5kZXggNjcwMWRhZi4uOGE2MGM1ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9idy1xY2FtLmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9idy1xY2FtLmgKQEAgLTY1LDQgKzY1LDUgQEAKIAlpbnQgdG9wLCBsZWZ0OwogCWludCBzdGF0dXM7CiAJdW5zaWduZWQgaW50IHNhdmVkX2JpdHM7CisJdW5zaWduZWQgbG9uZyBpbl91c2U7CiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jLXFjYW0uYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYy1xY2FtLmMKaW5kZXggN2Y2YzZiNC4uMTdhYTBhZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jLXFjYW0uYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2MtcWNhbS5jCkBAIC01MSw2ICs1MSw3IEBACiAJaW50IGNvbnRyYXN0LCBicmlnaHRuZXNzLCB3aGl0ZWJhbDsKIAlpbnQgdG9wLCBsZWZ0OwogCXVuc2lnbmVkIGludCBiaWRpcmVjdGlvbmFsOworCXVuc2lnbmVkIGxvbmcgaW5fdXNlOwogCXN0cnVjdCBtdXRleCBsb2NrOwogfTsKIApAQCAtNjg3LDExICs2ODgsMjggQEAKIAlyZXR1cm4gbGVuOwogfQogCitzdGF0aWMgaW50IHFjYW1fZXhjbHVzaXZlX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJc3RydWN0IHZpZGVvX2RldmljZSAqZGV2ID0gdmlkZW9fZGV2ZGF0YShmaWxlKTsKKwlzdHJ1Y3QgcWNhbV9kZXZpY2UgKnFjYW0gPSAoc3RydWN0IHFjYW1fZGV2aWNlICopZGV2OworCisJcmV0dXJuIHRlc3RfYW5kX3NldF9iaXQoMCwgJnFjYW0tPmluX3VzZSkgPyAtRUJVU1kgOiAwOworfQorCitzdGF0aWMgaW50IHFjYW1fZXhjbHVzaXZlX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJc3RydWN0IHZpZGVvX2RldmljZSAqZGV2ID0gdmlkZW9fZGV2ZGF0YShmaWxlKTsKKwlzdHJ1Y3QgcWNhbV9kZXZpY2UgKnFjYW0gPSAoc3RydWN0IHFjYW1fZGV2aWNlICopZGV2OworCisJY2xlYXJfYml0KDAsICZxY2FtLT5pbl91c2UpOworCXJldHVybiAwOworfQorCiAvKiB2aWRlbyBkZXZpY2UgdGVtcGxhdGUgKi8KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHFjYW1fZm9wcyA9IHsKIAkub3duZXIJCT0gVEhJU19NT0RVTEUsCi0JLm9wZW4gICAgICAgICAgID0gdmlkZW9fZXhjbHVzaXZlX29wZW4sCi0JLnJlbGVhc2UgICAgICAgID0gdmlkZW9fZXhjbHVzaXZlX3JlbGVhc2UsCisJLm9wZW4gICAgICAgICAgID0gcWNhbV9leGNsdXNpdmVfb3BlbiwKKwkucmVsZWFzZSAgICAgICAgPSBxY2FtX2V4Y2x1c2l2ZV9yZWxlYXNlLAogCS5pb2N0bCAgICAgICAgICA9IHFjYW1faW9jdGwsCiAjaWZkZWYgQ09ORklHX0NPTVBBVAogCS5jb21wYXRfaW9jdGwJPSB2NGxfY29tcGF0X2lvY3RsMzIsCkBAIC03MDQsNiArNzIyLDcgQEAKIHsKIAkubmFtZQkJPSAiQ29sb3VyIFF1aWNrQ2FtIiwKIAkuZm9wcyAgICAgICAgICAgPSAmcWNhbV9mb3BzLAorCS5yZWxlYXNlIAk9IHZpZGVvX2RldmljZV9yZWxlYXNlX2VtcHR5LAogfTsKIAogLyogSW5pdGlhbGl6ZSB0aGUgUXVpY2tDYW0gZHJpdmVyIGNvbnRyb2wgc3RydWN0dXJlLiAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jYWZlX2NjaWMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY2FmZV9jY2ljLmMKaW5kZXggNTQwNWMzMC4uZmM5NDk3YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jYWZlX2NjaWMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2NhZmVfY2NpYy5jCkBAIC0xNDc2LDkgKzE0NzYsMTIgQEAKIHsKIAlzdHJ1Y3QgY2FmZV9jYW1lcmEgKmNhbTsKIAorCWxvY2tfa2VybmVsKCk7CiAJY2FtID0gY2FmZV9maW5kX2RldihpbWlub3IoaW5vZGUpKTsKLQlpZiAoY2FtID09IE5VTEwpCisJaWYgKGNhbSA9PSBOVUxMKSB7CisJCXVubG9ja19rZXJuZWwoKTsKIAkJcmV0dXJuIC1FTk9ERVY7CisJfQogCWZpbHAtPnByaXZhdGVfZGF0YSA9IGNhbTsKIAogCW11dGV4X2xvY2soJmNhbS0+c19tdXRleCk7CkBAIC0xNDkwLDYgKzE0OTMsNyBAQAogCX0KIAkoY2FtLT51c2VycykrKzsKIAltdXRleF91bmxvY2soJmNhbS0+c19tdXRleCk7CisJdW5sb2NrX2tlcm5lbCgpOwogCXJldHVybiAwOwogfQogCkBAIC0yMDkyLDE1ICsyMDk2LDggQEAKIAkJY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKQogewogCWludCByZXQ7Ci0JdTE2IGNsYXNzd29yZDsKIAlzdHJ1Y3QgY2FmZV9jYW1lcmEgKmNhbTsKLQkvKgotCSAqIE1ha2Ugc3VyZSB3ZSBoYXZlIGEgY2FtZXJhIGhlcmUgLSB3ZSdsbCBnZXQgY2FsbHMgZm9yCi0JICogdGhlIG90aGVyIGNhZmUgZGV2aWNlcyBhcyB3ZWxsLgotCSAqLwotCXBjaV9yZWFkX2NvbmZpZ193b3JkKHBkZXYsIFBDSV9DTEFTU19ERVZJQ0UsICZjbGFzc3dvcmQpOwotCWlmIChjbGFzc3dvcmQgIT0gUENJX0NMQVNTX01VTFRJTUVESUFfVklERU8pCi0JCXJldHVybiAtRU5PREVWOworCiAJLyoKIAkgKiBTdGFydCBwdXR0aW5nIHRvZ2V0aGVyIG9uZSBvZiBvdXIgYmlnIGNhbWVyYSBzdHJ1Y3R1cmVzLgogCSAqLwpAQCAtMjI4OCw4ICsyMjg1LDggQEAKIAogCiBzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgY2FmZV9pZHNbXSA9IHsKLQl7IFBDSV9ERVZJQ0UoMHgxMWFiLCAweDQxMDApIH0sIC8qIEV2ZW50dWFsIHJlYWwgSUQgKi8KLQl7IFBDSV9ERVZJQ0UoMHgxMWFiLCAweDQxMDIpIH0sIC8qIFJlYWxseSBldmVudHVhbCByZWFsIElEICovCisJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfTUFSVkVMTCwKKwkJICAgICBQQ0lfREVWSUNFX0lEX01BUlZFTExfODhBTFAwMV9DQ0lDKSB9LAogCXsgMCwgfQogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jcGlhLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2NwaWEuYwppbmRleCBhNjYxODAwLi4xNzk4Yjc3IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2NwaWEuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2NwaWEuYwpAQCAtMzksMTAgKzM5LDYgQEAKICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogCi0jaWZkZWYgQ09ORklHX0tNT0QKLSNpbmNsdWRlIDxsaW51eC9rbW9kLmg+Ci0jZW5kaWYKLQogI2luY2x1ZGUgImNwaWEuaCIKIAogc3RhdGljIGludCB2aWRlb19uciA9IC0xOwpAQCAtMzE1NSw3ICszMTUxLDcgQEAKIHN0YXRpYyBpbnQgY3BpYV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQogewogCXN0cnVjdCB2aWRlb19kZXZpY2UgKmRldiA9IHZpZGVvX2RldmRhdGEoZmlsZSk7Ci0Jc3RydWN0IGNhbV9kYXRhICpjYW0gPSBkZXYtPnByaXY7CisJc3RydWN0IGNhbV9kYXRhICpjYW0gPSB2aWRlb19nZXRfZHJ2ZGF0YShkZXYpOwogCWludCBlcnI7CiAKIAlpZiAoIWNhbSkgewpAQCAtMzIwMiw3ICszMTk4LDcgQEAKIAogCS8qIFNldCBvd25lcnNoaXAgb2YgL3Byb2MvY3BpYS92aWRlb1ggdG8gY3VycmVudCB1c2VyICovCiAJaWYoY2FtLT5wcm9jX2VudHJ5KQotCQljYW0tPnByb2NfZW50cnktPnVpZCA9IGN1cnJlbnQtPnVpZDsKKwkJY2FtLT5wcm9jX2VudHJ5LT51aWQgPSBjdXJyZW50X3VpZCgpOwogCiAJLyogc2V0IG1hcmsgZm9yIGxvYWRpbmcgZmlyc3QgZnJhbWUgdW5jb21wcmVzc2VkICovCiAJY2FtLT5maXJzdF9mcmFtZSA9IDE7CkBAIC0zMjMyLDcgKzMyMjgsNyBAQAogc3RhdGljIGludCBjcGlhX2Nsb3NlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQogewogCXN0cnVjdCAgdmlkZW9fZGV2aWNlICpkZXYgPSBmaWxlLT5wcml2YXRlX2RhdGE7Ci0Jc3RydWN0IGNhbV9kYXRhICpjYW0gPSBkZXYtPnByaXY7CisJc3RydWN0IGNhbV9kYXRhICpjYW0gPSB2aWRlb19nZXRfZHJ2ZGF0YShkZXYpOwogCiAJaWYgKGNhbS0+b3BzKSB7CiAJCS8qIFJldHVybiBvd25lcnNoaXAgb2YgL3Byb2MvY3BpYS92aWRlb1ggdG8gcm9vdCAqLwpAQCAtMzI4NCw3ICszMjgwLDcgQEAKIAkJCSBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKIHsKIAlzdHJ1Y3QgdmlkZW9fZGV2aWNlICpkZXYgPSBmaWxlLT5wcml2YXRlX2RhdGE7Ci0Jc3RydWN0IGNhbV9kYXRhICpjYW0gPSBkZXYtPnByaXY7CisJc3RydWN0IGNhbV9kYXRhICpjYW0gPSB2aWRlb19nZXRfZHJ2ZGF0YShkZXYpOwogCWludCBlcnI7CiAKIAkvKiBtYWtlIHRoaXMgX3JlYWxseV8gc21wIGFuZCBtdWx0aXRocmVhZC1zYWZlICovCkBAIC0zMzQxLDcgKzMzMzcsNyBAQAogCQkJIHVuc2lnbmVkIGludCBpb2N0bG5yLCB2b2lkICphcmcpCiB7CiAJc3RydWN0IHZpZGVvX2RldmljZSAqZGV2ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwotCXN0cnVjdCBjYW1fZGF0YSAqY2FtID0gZGV2LT5wcml2OworCXN0cnVjdCBjYW1fZGF0YSAqY2FtID0gdmlkZW9fZ2V0X2RydmRhdGEoZGV2KTsKIAlpbnQgcmV0dmFsID0gMDsKIAogCWlmICghY2FtIHx8ICFjYW0tPm9wcykKQEAgLTM3MzksNyArMzczNSw3IEBACiAJdW5zaWduZWQgbG9uZyBzdGFydCA9IHZtYS0+dm1fc3RhcnQ7CiAJdW5zaWduZWQgbG9uZyBzaXplICA9IHZtYS0+dm1fZW5kIC0gdm1hLT52bV9zdGFydDsKIAl1bnNpZ25lZCBsb25nIHBhZ2UsIHBvczsKLQlzdHJ1Y3QgY2FtX2RhdGEgKmNhbSA9IGRldi0+cHJpdjsKKwlzdHJ1Y3QgY2FtX2RhdGEgKmNhbSA9IHZpZGVvX2dldF9kcnZkYXRhKGRldik7CiAJaW50IHJldHZhbDsKIAogCWlmICghY2FtIHx8ICFjYW0tPm9wcykKQEAgLTM4MDEsNiArMzc5Nyw3IEBACiBzdGF0aWMgc3RydWN0IHZpZGVvX2RldmljZSBjcGlhX3RlbXBsYXRlID0gewogCS5uYW1lCQk9ICJDUGlBIENhbWVyYSIsCiAJLmZvcHMgICAgICAgICAgID0gJmNwaWFfZm9wcywKKwkucmVsZWFzZSAJPSB2aWRlb19kZXZpY2VfcmVsZWFzZV9lbXB0eSwKIH07CiAKIC8qIGluaXRpYWxpc2UgY2FtX2RhdGEgc3RydWN0dXJlICAqLwpAQCAtMzkyOCw3ICszOTI1LDcgQEAKIAljYW0tPnByb2NfZW50cnkgPSBOVUxMOwogCiAJbWVtY3B5KCZjYW0tPnZkZXYsICZjcGlhX3RlbXBsYXRlLCBzaXplb2YoY3BpYV90ZW1wbGF0ZSkpOwotCWNhbS0+dmRldi5wcml2ID0gY2FtOworCXZpZGVvX3NldF9kcnZkYXRhKCZjYW0tPnZkZXYsIGNhbSk7CiAKIAljYW0tPmN1cmZyYW1lID0gMDsKIAlmb3IgKGkgPSAwOyBpIDwgRlJBTUVfTlVNOyBpKyspIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3BpYTIvY3BpYTJfY29yZS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jcGlhMi9jcGlhMl9jb3JlLmMKaW5kZXggYWY4YjllYy4uN2U3OTFiNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jcGlhMi9jcGlhMl9jb3JlLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jcGlhMi9jcGlhMl9jb3JlLmMKQEAgLTE1MzcsNyArMTUzNyw3IEBACiAgKgogICogIFRoaXMgc2V0cyBhbGwgdXNlciBjaGFuZ2VhYmxlIHByb3BlcnRpZXMgdG8gdGhlIHZhbHVlcyBpbiBjYW0tPnBhcmFtcy4KICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLWludCBzZXRfYWxsX3Byb3BlcnRpZXMoc3RydWN0IGNhbWVyYV9kYXRhICpjYW0pCitzdGF0aWMgaW50IHNldF9hbGxfcHJvcGVydGllcyhzdHJ1Y3QgY2FtZXJhX2RhdGEgKmNhbSkKIHsKIAkvKioKIAkgKiBEb24ndCBzZXQgdGFyZ2V0X2tiIGhlcmUsIGl0IHdpbGwgYmUgc2V0IGxhdGVyLgpAQCAtMTU4OCw3ICsxNTg4LDcgQEAKICAqICBnZXRfY29sb3JfcGFyYW1zCiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotdm9pZCBnZXRfY29sb3JfcGFyYW1zKHN0cnVjdCBjYW1lcmFfZGF0YSAqY2FtKQorc3RhdGljIHZvaWQgZ2V0X2NvbG9yX3BhcmFtcyhzdHJ1Y3QgY2FtZXJhX2RhdGEgKmNhbSkKIHsKIAljcGlhMl9kb19jb21tYW5kKGNhbSwgQ1BJQTJfQ01EX0dFVF9WUF9CUklHSFRORVNTLCBUUkFOU0ZFUl9SRUFELCAwKTsKIAljcGlhMl9kb19jb21tYW5kKGNhbSwgQ1BJQTJfQ01EX0dFVF9WUF9TQVRVUkFUSU9OLCBUUkFOU0ZFUl9SRUFELCAwKTsKQEAgLTE4ODEsNyArMTg4MSw3IEBACiAgKiAgd2FrZV9zeXN0ZW0KICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi12b2lkIHdha2Vfc3lzdGVtKHN0cnVjdCBjYW1lcmFfZGF0YSAqY2FtKQorc3RhdGljIHZvaWQgd2FrZV9zeXN0ZW0oc3RydWN0IGNhbWVyYV9kYXRhICpjYW0pCiB7CiAJY3BpYTJfZG9fY29tbWFuZChjYW0sIENQSUEyX0NNRF9TRVRfV0FLRVVQLCBUUkFOU0ZFUl9XUklURSwgMCk7CiB9CkBAIC0xODkyLDcgKzE4OTIsNyBAQAogICoKICAqICBWYWxpZCBmb3IgU1RWNTAwIHNlbnNvciBvbmx5CiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi12b2lkIHNldF9sb3dsaWdodF9ib29zdChzdHJ1Y3QgY2FtZXJhX2RhdGEgKmNhbSkKK3N0YXRpYyB2b2lkIHNldF9sb3dsaWdodF9ib29zdChzdHJ1Y3QgY2FtZXJhX2RhdGEgKmNhbSkKIHsKIAlzdHJ1Y3QgY3BpYTJfY29tbWFuZCBjbWQ7CiAKQEAgLTIxNjksNyArMjE2OSw3IEBACiAgKgogICogIFNldHMgYWxsIHZhbHVlcyB0byB0aGUgZGVmYXVsdHMKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXZvaWQgcmVzZXRfY2FtZXJhX3N0cnVjdChzdHJ1Y3QgY2FtZXJhX2RhdGEgKmNhbSkKK3N0YXRpYyB2b2lkIHJlc2V0X2NhbWVyYV9zdHJ1Y3Qoc3RydWN0IGNhbWVyYV9kYXRhICpjYW0pCiB7CiAJLyoqKgogCSAqIFRoZSBmb2xsb3dpbmcgcGFyYW1ldGVyIHZhbHVlcyBhcmUgdGhlIGRlZmF1bHRzIGZyb20gdGhlIHJlZ2lzdGVyIG1hcC4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3BpYTIvY3BpYTJfdXNiLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2NwaWEyL2NwaWEyX3VzYi5jCmluZGV4IGE4YTE5OTAuLjczNTExYTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3BpYTIvY3BpYTJfdXNiLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jcGlhMi9jcGlhMl91c2IuYwpAQCAtNDc4LDcgKzQ3OCw3IEBACiAgKiBzZXRfYWx0ZXJuYXRlCiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotaW50IHNldF9hbHRlcm5hdGUoc3RydWN0IGNhbWVyYV9kYXRhICpjYW0sIHVuc2lnbmVkIGludCBhbHQpCitzdGF0aWMgaW50IHNldF9hbHRlcm5hdGUoc3RydWN0IGNhbWVyYV9kYXRhICpjYW0sIHVuc2lnbmVkIGludCBhbHQpCiB7CiAJaW50IHJldCA9IDA7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3BpYTIvY3BpYTJfdjRsLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2NwaWEyL2NwaWEyX3Y0bC5jCmluZGV4IGViOWYxNWMuLjg5N2U4ZDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3BpYTIvY3BpYTJfdjRsLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jcGlhMi9jcGlhMl92NGwuYwpAQCAtMjQxLDggKzI0MSw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiBzdGF0aWMgaW50IGNwaWEyX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCiB7Ci0Jc3RydWN0IHZpZGVvX2RldmljZSAqZGV2ID0gdmlkZW9fZGV2ZGF0YShmaWxlKTsKLQlzdHJ1Y3QgY2FtZXJhX2RhdGEgKmNhbSA9IHZpZGVvX2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IGNhbWVyYV9kYXRhICpjYW0gPSB2aWRlb19kcnZkYXRhKGZpbGUpOwogCWludCByZXR2YWwgPSAwOwogCiAJaWYgKCFjYW0pIHsKQEAgLTM1Nyw4ICszNTYsNyBAQAogc3RhdGljIHNzaXplX3QgY3BpYTJfdjRsX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsIHNpemVfdCBjb3VudCwKIAkJCSAgICAgIGxvZmZfdCAqb2ZmKQogewotCXN0cnVjdCB2aWRlb19kZXZpY2UgKmRldiA9IHZpZGVvX2RldmRhdGEoZmlsZSk7Ci0Jc3RydWN0IGNhbWVyYV9kYXRhICpjYW0gPSB2aWRlb19nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBjYW1lcmFfZGF0YSAqY2FtID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKIAlpbnQgbm9ibG9jayA9IGZpbGUtPmZfZmxhZ3MmT19OT05CTE9DSzsKIAogCXN0cnVjdCBjcGlhMl9maCAqZmggPSBmaWxlLT5wcml2YXRlX2RhdGE7CkBAIC0zODIsOSArMzgwLDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIHN0YXRpYyB1bnNpZ25lZCBpbnQgY3BpYTJfdjRsX3BvbGwoc3RydWN0IGZpbGUgKmZpbHAsIHN0cnVjdCBwb2xsX3RhYmxlX3N0cnVjdCAqd2FpdCkKIHsKLQlzdHJ1Y3QgdmlkZW9fZGV2aWNlICpkZXYgPSB2aWRlb19kZXZkYXRhKGZpbHApOwotCXN0cnVjdCBjYW1lcmFfZGF0YSAqY2FtID0gdmlkZW9fZ2V0X2RydmRhdGEoZGV2KTsKLQorCXN0cnVjdCBjYW1lcmFfZGF0YSAqY2FtID0gdmlkZW9fZHJ2ZGF0YShmaWxwKTsKIAlzdHJ1Y3QgY3BpYTJfZmggKmZoID0gZmlscC0+cHJpdmF0ZV9kYXRhOwogCiAJaWYoIWNhbSkKQEAgLTE1NzksOCArMTU3NSw3IEBACiBzdGF0aWMgaW50IGNwaWEyX2RvX2lvY3RsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlLAogCQkJICB1bnNpZ25lZCBpbnQgaW9jdGxfbnIsIHZvaWQgKmFyZykKIHsKLQlzdHJ1Y3QgdmlkZW9fZGV2aWNlICpkZXYgPSB2aWRlb19kZXZkYXRhKGZpbGUpOwotCXN0cnVjdCBjYW1lcmFfZGF0YSAqY2FtID0gdmlkZW9fZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgY2FtZXJhX2RhdGEgKmNhbSA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CiAJaW50IHJldHZhbCA9IDA7CiAKIAlpZiAoIWNhbSkKQEAgLTE4NjAsOSArMTg1NSw4IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiBzdGF0aWMgaW50IGNwaWEyX21tYXAoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqYXJlYSkKIHsKKwlzdHJ1Y3QgY2FtZXJhX2RhdGEgKmNhbSA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CiAJaW50IHJldHZhbDsKLQlzdHJ1Y3QgdmlkZW9fZGV2aWNlICpkZXYgPSB2aWRlb19kZXZkYXRhKGZpbGUpOwotCXN0cnVjdCBjYW1lcmFfZGF0YSAqY2FtID0gdmlkZW9fZ2V0X2RydmRhdGEoZGV2KTsKIAogCS8qIFByaW9yaXR5IGNoZWNrICovCiAJc3RydWN0IGNwaWEyX2ZoICpmaCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9NYWtlZmlsZSBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9NYWtlZmlsZQppbmRleCBiMjNkMmUyLi5mN2JmMGVkIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L01ha2VmaWxlCkBAIC0yLDcgKzIsNyBAQAogCWN4MTgtcXVldWUubyBjeDE4LXN0cmVhbXMubyBjeDE4LWZpbGVvcHMubyBjeDE4LWlvY3RsLm8gY3gxOC1jb250cm9scy5vIFwKIAljeDE4LW1haWxib3gubyBjeDE4LXZiaS5vIGN4MTgtYXVkaW8ubyBjeDE4LXZpZGVvLm8gY3gxOC1pcnEubyBcCiAJY3gxOC1hdi1jb3JlLm8gY3gxOC1hdi1hdWRpby5vIGN4MTgtYXYtZmlybXdhcmUubyBjeDE4LWF2LXZiaS5vIGN4MTgtc2NiLm8gXAotCWN4MTgtZHZiLm8KKwljeDE4LWR2Yi5vIGN4MTgtaW8ubwogCiBvYmotJChDT05GSUdfVklERU9fQ1gxOCkgKz0gY3gxOC5vCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWF1ZGlvLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1hdWRpby5jCmluZGV4IDZkNWI5NGYuLjU3YmVkZGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWF1ZGlvLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtYXVkaW8uYwpAQCAtMjIsNiArMjIsNyBAQAogICovCiAKICNpbmNsdWRlICJjeDE4LWRyaXZlci5oIgorI2luY2x1ZGUgImN4MTgtaW8uaCIKICNpbmNsdWRlICJjeDE4LWkyYy5oIgogI2luY2x1ZGUgImN4MTgtY2FyZHMuaCIKICNpbmNsdWRlICJjeDE4LWF1ZGlvLmgiCkBAIC02MCwxMCArNjEsMTAgQEAKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwogCi0JdmFsID0gcmVhZF9yZWcoQ1gxOF9BVURJT19FTkFCTEUpICYgfjB4MzA7CisJdmFsID0gY3gxOF9yZWFkX3JlZyhjeCwgQ1gxOF9BVURJT19FTkFCTEUpICYgfjB4MzA7CiAJdmFsIHw9IChhdWRpb19pbnB1dCA+IENYMThfQVZfQVVESU9fU0VSSUFMMikgPyAweDIwIDoKIAkJCQkJKGF1ZGlvX2lucHV0IDw8IDQpOwotCXdyaXRlX3JlZyh2YWwgfCAweGIwMCwgQ1gxOF9BVURJT19FTkFCTEUpOworCWN4MThfd3JpdGVfcmVnKGN4LCB2YWwgfCAweGIwMCwgQ1gxOF9BVURJT19FTkFCTEUpOwogCWN4MThfdmFwaShjeCwgQ1gxOF9BUFVfUkVTRVRBSSwgMSwgMCk7CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1hdi1jb3JlLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1hdi1jb3JlLmMKaW5kZXggM2IwYTJjNC4uNzNmNTE0MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtYXYtY29yZS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWF2LWNvcmUuYwpAQCAtMjIsMjcgKzIyLDM1IEBACiAgKi8KIAogI2luY2x1ZGUgImN4MTgtZHJpdmVyLmgiCisjaW5jbHVkZSAiY3gxOC1pby5oIgogCiBpbnQgY3gxOF9hdl93cml0ZShzdHJ1Y3QgY3gxOCAqY3gsIHUxNiBhZGRyLCB1OCB2YWx1ZSkKIHsKLQl1MzIgeCA9IHJlYWRsKGN4LT5yZWdfbWVtICsgMHhjNDAwMDAgKyAoYWRkciAmIH4zKSk7CisJdTMyIHJlZyA9IDB4YzQwMDAwICsgKGFkZHIgJiB+Myk7CiAJdTMyIG1hc2sgPSAweGZmOwogCWludCBzaGlmdCA9IChhZGRyICYgMykgKiA4OworCXUzMiB4ID0gY3gxOF9yZWFkX3JlZyhjeCwgcmVnKTsKIAogCXggPSAoeCAmIH4obWFzayA8PCBzaGlmdCkpIHwgKCh1MzIpdmFsdWUgPDwgc2hpZnQpOwotCXdyaXRlbCh4LCBjeC0+cmVnX21lbSArIDB4YzQwMDAwICsgKGFkZHIgJiB+MykpOworCWN4MThfd3JpdGVfcmVnKGN4LCB4LCByZWcpOwogCXJldHVybiAwOwogfQogCiBpbnQgY3gxOF9hdl93cml0ZTQoc3RydWN0IGN4MTggKmN4LCB1MTYgYWRkciwgdTMyIHZhbHVlKQogewotCXdyaXRlbCh2YWx1ZSwgY3gtPnJlZ19tZW0gKyAweGM0MDAwMCArIGFkZHIpOworCWN4MThfd3JpdGVfcmVnKGN4LCB2YWx1ZSwgMHhjNDAwMDAgKyBhZGRyKTsKKwlyZXR1cm4gMDsKK30KKworaW50IGN4MThfYXZfd3JpdGU0X25vcmV0cnkoc3RydWN0IGN4MTggKmN4LCB1MTYgYWRkciwgdTMyIHZhbHVlKQoreworCWN4MThfd3JpdGVfcmVnX25vcmV0cnkoY3gsIHZhbHVlLCAweGM0MDAwMCArIGFkZHIpOwogCXJldHVybiAwOwogfQogCiB1OCBjeDE4X2F2X3JlYWQoc3RydWN0IGN4MTggKmN4LCB1MTYgYWRkcikKIHsKLQl1MzIgeCA9IHJlYWRsKGN4LT5yZWdfbWVtICsgMHhjNDAwMDAgKyAoYWRkciAmIH4zKSk7CisJdTMyIHggPSBjeDE4X3JlYWRfcmVnKGN4LCAweGM0MDAwMCArIChhZGRyICYgfjMpKTsKIAlpbnQgc2hpZnQgPSAoYWRkciAmIDMpICogODsKIAogCXJldHVybiAoeCA+PiBzaGlmdCkgJiAweGZmOwpAQCAtNTAsNyArNTgsMTIgQEAKIAogdTMyIGN4MThfYXZfcmVhZDQoc3RydWN0IGN4MTggKmN4LCB1MTYgYWRkcikKIHsKLQlyZXR1cm4gcmVhZGwoY3gtPnJlZ19tZW0gKyAweGM0MDAwMCArIGFkZHIpOworCXJldHVybiBjeDE4X3JlYWRfcmVnKGN4LCAweGM0MDAwMCArIGFkZHIpOworfQorCit1MzIgY3gxOF9hdl9yZWFkNF9ub3JldHJ5KHN0cnVjdCBjeDE4ICpjeCwgdTE2IGFkZHIpCit7CisJcmV0dXJuIGN4MThfcmVhZF9yZWdfbm9yZXRyeShjeCwgMHhjNDAwMDAgKyBhZGRyKTsKIH0KIAogaW50IGN4MThfYXZfYW5kX29yKHN0cnVjdCBjeDE4ICpjeCwgdTE2IGFkZHIsIHVuc2lnbmVkIGFuZF9tYXNrLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtYXYtY29yZS5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtYXYtY29yZS5oCmluZGV4IGViNjFmYTEuLmI2N2Q4ZGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWF2LWNvcmUuaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1hdi1jb3JlLmgKQEAgLTMwMSw4ICszMDEsMTAgQEAKIC8qIGN4MThfYXYtY29yZS5jIAkJCQkJCQkgICAqLwogaW50IGN4MThfYXZfd3JpdGUoc3RydWN0IGN4MTggKmN4LCB1MTYgYWRkciwgdTggdmFsdWUpOwogaW50IGN4MThfYXZfd3JpdGU0KHN0cnVjdCBjeDE4ICpjeCwgdTE2IGFkZHIsIHUzMiB2YWx1ZSk7CitpbnQgY3gxOF9hdl93cml0ZTRfbm9yZXRyeShzdHJ1Y3QgY3gxOCAqY3gsIHUxNiBhZGRyLCB1MzIgdmFsdWUpOwogdTggY3gxOF9hdl9yZWFkKHN0cnVjdCBjeDE4ICpjeCwgdTE2IGFkZHIpOwogdTMyIGN4MThfYXZfcmVhZDQoc3RydWN0IGN4MTggKmN4LCB1MTYgYWRkcik7Cit1MzIgY3gxOF9hdl9yZWFkNF9ub3JldHJ5KHN0cnVjdCBjeDE4ICpjeCwgdTE2IGFkZHIpOwogaW50IGN4MThfYXZfYW5kX29yKHN0cnVjdCBjeDE4ICpjeCwgdTE2IGFkZHIsIHVuc2lnbmVkIG1hc2ssIHU4IHZhbHVlKTsKIGludCBjeDE4X2F2X2FuZF9vcjQoc3RydWN0IGN4MTggKmN4LCB1MTYgYWRkciwgdTMyIG1hc2ssIHUzMiB2YWx1ZSk7CiBpbnQgY3gxOF9hdl9jbWQoc3RydWN0IGN4MTggKmN4LCB1bnNpZ25lZCBpbnQgY21kLCB2b2lkICphcmcpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtYXYtZmlybXdhcmUuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWF2LWZpcm13YXJlLmMKaW5kZXggZTk5NmE0ZS4uNTIyYTAzNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtYXYtZmlybXdhcmUuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1hdi1maXJtd2FyZS5jCkBAIC0yMCw2ICsyMCw3IEBACiAgKi8KIAogI2luY2x1ZGUgImN4MTgtZHJpdmVyLmgiCisjaW5jbHVkZSAiY3gxOC1pby5oIgogI2luY2x1ZGUgPGxpbnV4L2Zpcm13YXJlLmg+CiAKICNkZWZpbmUgQ1gxOF9BVURJT19FTkFCTEUgMHhjNzIwMTQKQEAgLTQ5LDcgKzUwLDcgQEAKIAkJY3gxOF9hdl93cml0ZTQoY3gsIDB4ODEwMCwgMHgwMDAxMDAwMCk7CiAKIAkJLyogUHV0IHRoZSA4MDUxIGluIHJlc2V0IGFuZCBlbmFibGUgZmlybXdhcmUgdXBsb2FkICovCi0JCWN4MThfYXZfd3JpdGU0KGN4LCBDWEFERUNfRExfQ1RMLCAweDBGMDAwMDAwKTsKKwkJY3gxOF9hdl93cml0ZTRfbm9yZXRyeShjeCwgQ1hBREVDX0RMX0NUTCwgMHgwRjAwMDAwMCk7CiAKIAkJcHRyID0gZnctPmRhdGE7CiAJCXNpemUgPSBmdy0+c2l6ZTsKQEAgLTU4LDIyICs1OSwyOCBAQAogCQkJdTMyIGRsX2NvbnRyb2wgPSAweDBGMDAwMDAwIHwgaSB8ICgodTMyKXB0cltpXSA8PCAxNik7CiAJCQl1MzIgdmFsdWUgPSAwOwogCQkJaW50IHJldHJpZXMyOworCQkJaW50IHVucmVjX2VyciA9IDA7CiAKLQkJCWZvciAocmV0cmllczIgPSAwOyByZXRyaWVzMiA8IDU7IHJldHJpZXMyKyspIHsKLQkJCQljeDE4X2F2X3dyaXRlNChjeCwgQ1hBREVDX0RMX0NUTCwgZGxfY29udHJvbCk7CisJCQlmb3IgKHJldHJpZXMyID0gMDsgcmV0cmllczIgPCBDWDE4X01BWF9NTUlPX1JFVFJJRVM7CisJCQkgICAgIHJldHJpZXMyKyspIHsKKwkJCQljeDE4X2F2X3dyaXRlNF9ub3JldHJ5KGN4LCBDWEFERUNfRExfQ1RMLAorCQkJCQkJICAgICAgIGRsX2NvbnRyb2wpOwogCQkJCXVkZWxheSgxMCk7Ci0JCQkJdmFsdWUgPSBjeDE4X2F2X3JlYWQ0KGN4LCBDWEFERUNfRExfQ1RMKTsKKwkJCQl2YWx1ZSA9IGN4MThfYXZfcmVhZDRfbm9yZXRyeShjeCwKKwkJCQkJCQkgICAgICBDWEFERUNfRExfQ1RMKTsKIAkJCQlpZiAodmFsdWUgPT0gZGxfY29udHJvbCkKIAkJCQkJYnJlYWs7CiAJCQkJLyogQ2hlY2sgaWYgd2UgY2FuIGNvcnJlY3QgdGhlIGJ5dGUgYnkgY2hhbmdpbmcKIAkJCQkgICB0aGUgYWRkcmVzcy4gIFdlIGNhbiBvbmx5IHdyaXRlIHRoZSBsb3dlcgogCQkJCSAgIGFkZHJlc3MgYnl0ZSBvZiB0aGUgYWRkcmVzcy4gKi8KIAkJCQlpZiAoKHZhbHVlICYgMHgzRjAwKSAhPSAoZGxfY29udHJvbCAmIDB4M0YwMCkpIHsKLQkJCQkJcmV0cmllczIgPSA1OworCQkJCQl1bnJlY19lcnIgPSAxOwogCQkJCQlicmVhazsKIAkJCQl9CiAJCQl9Ci0JCQlpZiAocmV0cmllczIgPj0gNSkKKwkJCWN4MThfbG9nX3dyaXRlX3JldHJpZXMoY3gsIHJldHJpZXMyLAorCQkJCQljeC0+cmVnX21lbSArIDB4YzQwMDAwICsgQ1hBREVDX0RMX0NUTCk7CisJCQlpZiAodW5yZWNfZXJyIHx8IHJldHJpZXMyID49IENYMThfTUFYX01NSU9fUkVUUklFUykKIAkJCQlicmVhazsKIAkJfQogCQlpZiAoaSA9PSBzaXplKQpAQCAtMTE5LDEwICsxMjYsMTAgQEAKIAkgICBoYXZlIGEgbmFtZSBpbiB0aGUgc3BlYy4gKi8KIAljeDE4X2F2X3dyaXRlNChjeCwgMHgwOUNDLCAxKTsKIAotCXYgPSByZWFkX3JlZyhDWDE4X0FVRElPX0VOQUJMRSk7Ci0JLyogSWYgYml0IDExIGlzIDEgKi8KKwl2ID0gY3gxOF9yZWFkX3JlZyhjeCwgQ1gxOF9BVURJT19FTkFCTEUpOworCS8qIElmIGJpdCAxMSBpcyAxLCBjbGVhciBiaXQgMTAgKi8KIAlpZiAodiAmIDB4ODAwKQotCQl3cml0ZV9yZWcodiAmIDB4RkZGRkZCRkYsIENYMThfQVVESU9fRU5BQkxFKTsgLyogQ2xlYXIgYml0IDEwICovCisJCWN4MThfd3JpdGVfcmVnKGN4LCB2ICYgMHhGRkZGRkJGRiwgQ1gxOF9BVURJT19FTkFCTEUpOwogCiAJLyogRW5hYmxlIFdXIGF1dG8gYXVkaW8gc3RhbmRhcmQgZGV0ZWN0aW9uICovCiAJdiA9IGN4MThfYXZfcmVhZDQoY3gsIENYQURFQ19TVERfREVUX0NUTCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1jYXJkcy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtY2FyZHMuYwppbmRleCAzY2I5NzM0Li41ZWZlMDFlIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1jYXJkcy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWNhcmRzLmMKQEAgLTI5MiwxMiArMjkyLDExMSBAQAogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKKy8qIFRvc2hpYmEgUW9zbWlvIGxhcHRvcCBpbnRlcm5hbCBEVkItVC9BbmFsb2cgSHlicmlkIFR1bmVyICovCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY3gxOF9jYXJkX3BjaV9pbmZvIGN4MThfcGNpX3Rvc2hpYmFfcW9zbWlvX2R2YnRbXSA9IHsKKwl7IFBDSV9ERVZJQ0VfSURfQ1gyMzQxOCwgQ1gxOF9QQ0lfSURfVE9TSElCQSwgMHgwMTEwIH0sCisJeyAwLCAwLCAwIH0KK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY3gxOF9jYXJkIGN4MThfY2FyZF90b3NoaWJhX3Fvc21pb19kdmJ0ID0geworCS50eXBlID0gQ1gxOF9DQVJEX1RPU0hJQkFfUU9TTUlPX0RWQlQsCisJLm5hbWUgPSAiVG9zaGliYSBRb3NtaW8gRFZCLVQvQW5hbG9nIiwKKwkuY29tbWVudCA9ICJFeHBlcmltZW50ZXJzIGFuZCBwaG90b3MgbmVlZGVkIGZvciBkZXZpY2UgdG8gd29yayB3ZWxsLlxuIgorCQkgICJcdFRvIGhlbHAsIG1haWwgdGhlIGl2dHYtZGV2ZWwgbGlzdCAod3d3Lml2dHZkcml2ZXIub3JnKS5cbiIsCisJLnY0bDJfY2FwYWJpbGl0aWVzID0gQ1gxOF9DQVBfRU5DT0RFUiwKKwkuaHdfYXVkaW9fY3RybCA9IENYMThfSFdfQ1gyMzQxOCwKKwkuaHdfYWxsID0gQ1gxOF9IV19UVU5FUiwKKwkudmlkZW9faW5wdXRzID0geworCQl7IENYMThfQ0FSRF9JTlBVVF9WSURfVFVORVIsICAwLCBDWDE4X0FWX0NPTVBPU0lURTYgfSwKKwkJeyBDWDE4X0NBUkRfSU5QVVRfU1ZJREVPMSwgICAgMSwKKwkJCUNYMThfQVZfU1ZJREVPX0xVTUEzIHwgQ1gxOF9BVl9TVklERU9fQ0hST01BNCB9LAorCQl7IENYMThfQ0FSRF9JTlBVVF9DT01QT1NJVEUxLCAxLCBDWDE4X0FWX0NPTVBPU0lURTEgfSwKKwl9LAorCS5hdWRpb19pbnB1dHMgPSB7CisJCXsgQ1gxOF9DQVJEX0lOUFVUX0FVRF9UVU5FUiwgQ1gxOF9BVl9BVURJTzUsIAkgICAgMCB9LAorCQl7IENYMThfQ0FSRF9JTlBVVF9MSU5FX0lOMSwgIENYMThfQVZfQVVESU9fU0VSSUFMMSwgMSB9LAorCX0sCisJLnR1bmVycyA9IHsKKwkJeyAuc3RkID0gVjRMMl9TVERfQUxMLCAudHVuZXIgPSBUVU5FUl9YQzIwMjggfSwKKwl9LAorCS5kZHIgPSB7CisJCS5jaGlwX2NvbmZpZyA9IDB4MjAyLAorCQkucmVmcmVzaCA9IDB4M2JiLAorCQkudGltaW5nMSA9IDB4MzMzMjBhNjMsCisJCS50aW1pbmcyID0gMHgwYSwKKwkJLnR1bmVfbGFuZSA9IDAsCisJCS5pbml0aWFsX2VtcnMgPSAweDQyLAorCX0sCisJLnhjZWl2ZV9waW4gPSAxNSwKKwkucGNpX2xpc3QgPSBjeDE4X3BjaV90b3NoaWJhX3Fvc21pb19kdmJ0LAorCS5pMmMgPSAmY3gxOF9pMmNfc3RkLAorfTsKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKiBMZWFkdGVrIFdpbkZhc3QgUFZSMjEwMCAqLworCitzdGF0aWMgY29uc3Qgc3RydWN0IGN4MThfY2FyZF9wY2lfaW5mbyBjeDE4X3BjaV9sZWFkdGVrX3B2cjIxMDBbXSA9IHsKKwl7IFBDSV9ERVZJQ0VfSURfQ1gyMzQxOCwgQ1gxOF9QQ0lfSURfTEVBRFRFSywgMHg2ZjI3IH0sCisJeyAwLCAwLCAwIH0KK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY3gxOF9jYXJkIGN4MThfY2FyZF9sZWFkdGVrX3B2cjIxMDAgPSB7CisJLnR5cGUgPSBDWDE4X0NBUkRfTEVBRFRFS19QVlIyMTAwLAorCS5uYW1lID0gIkxlYWR0ZWsgV2luRmFzdCBQVlIyMTAwIiwKKwkuY29tbWVudCA9ICJFeHBlcmltZW50ZXJzIGFuZCBwaG90b3MgbmVlZGVkIGZvciBkZXZpY2UgdG8gd29yayB3ZWxsLlxuIgorCQkgICJcdFRvIGhlbHAsIG1haWwgdGhlIGl2dHYtZGV2ZWwgbGlzdCAod3d3Lml2dHZkcml2ZXIub3JnKS5cbiIsCisJLnY0bDJfY2FwYWJpbGl0aWVzID0gQ1gxOF9DQVBfRU5DT0RFUiwKKwkuaHdfYXVkaW9fY3RybCA9IENYMThfSFdfQ1gyMzQxOCwKKwkuaHdfbXV4ZXIgPSBDWDE4X0hXX0dQSU8sCisJLmh3X2FsbCA9IENYMThfSFdfVFVORVIgfCBDWDE4X0hXX0dQSU8sCisJLnZpZGVvX2lucHV0cyA9IHsKKwkJeyBDWDE4X0NBUkRfSU5QVVRfVklEX1RVTkVSLCAgMCwgQ1gxOF9BVl9DT01QT1NJVEUyIH0sCisJCXsgQ1gxOF9DQVJEX0lOUFVUX1NWSURFTzEsICAgIDEsCisJCQlDWDE4X0FWX1NWSURFT19MVU1BMyB8IENYMThfQVZfU1ZJREVPX0NIUk9NQTQgfSwKKwkJeyBDWDE4X0NBUkRfSU5QVVRfQ09NUE9TSVRFMSwgMSwgQ1gxOF9BVl9DT01QT1NJVEU3IH0sCisJfSwKKwkuYXVkaW9faW5wdXRzID0geworCQl7IENYMThfQ0FSRF9JTlBVVF9BVURfVFVORVIsIENYMThfQVZfQVVESU81LCAJICAgIDAgfSwKKwkJeyBDWDE4X0NBUkRfSU5QVVRfTElORV9JTjEsICBDWDE4X0FWX0FVRElPX1NFUklBTDEsIDEgfSwKKwl9LAorCS50dW5lcnMgPSB7CisJCS8qIFhDMzAyOCB0dW5lciAqLworCQl7IC5zdGQgPSBWNEwyX1NURF9BTEwsIC50dW5lciA9IFRVTkVSX1hDMjAyOCB9LAorCX0sCisJLnJhZGlvX2lucHV0ID0geyBDWDE4X0NBUkRfSU5QVVRfQVVEX1RVTkVSLCBDWDE4X0FWX0FVRElPNSwgMiB9LAorCS5kZHIgPSB7CisJCS8qCisJCSAqIFBvaW50ZXIgdG8gcHJvcGVyIEREUiBjb25maWcgdmFsdWVzIHByb3ZpZGVkIGJ5CisJCSAqIFRlcnJ5IFd1IDx0ZXJyeXd1IGF0IGxlYWR0ZWsuY29tLnR3PgorCQkgKi8KKwkJLmNoaXBfY29uZmlnID0gMHgzMDMsCisJCS5yZWZyZXNoID0gMHgzYmIsCisJCS50aW1pbmcxID0gMHgyNDIyMGU4MywKKwkJLnRpbWluZzIgPSAweDFmLAorCQkudHVuZV9sYW5lID0gMCwKKwkJLmluaXRpYWxfZW1ycyA9IDB4MiwKKwl9LAorCS5ncGlvX2luaXQuaW5pdGlhbF92YWx1ZSA9IDB4NiwKKwkuZ3Bpb19pbml0LmRpcmVjdGlvbiA9IDB4NywKKwkuZ3Bpb19hdWRpb19pbnB1dCA9IHsgLm1hc2sgICA9IDB4NywKKwkJCSAgICAgIC50dW5lciAgPSAweDYsIC5saW5laW4gPSAweDIsIC5yYWRpbyAgPSAweDIgfSwKKwkueGNlaXZlX3BpbiA9IDE1LAorCS5wY2lfbGlzdCA9IGN4MThfcGNpX2xlYWR0ZWtfcHZyMjEwMCwKKwkuaTJjID0gJmN4MThfaTJjX3N0ZCwKK307CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKwogc3RhdGljIGNvbnN0IHN0cnVjdCBjeDE4X2NhcmQgKmN4MThfY2FyZF9saXN0W10gPSB7CiAJJmN4MThfY2FyZF9odnIxNjAwX2VzbXQsCiAJJmN4MThfY2FyZF9odnIxNjAwX3NhbXN1bmcsCiAJJmN4MThfY2FyZF9oOTAwLAogCSZjeDE4X2NhcmRfbXBjNzE4LAogCSZjeDE4X2NhcmRfY254dF9yYXB0b3JfcGFsLAorCSZjeDE4X2NhcmRfdG9zaGliYV9xb3NtaW9fZHZidCwKKwkmY3gxOF9jYXJkX2xlYWR0ZWtfcHZyMjEwMCwKIH07CiAKIGNvbnN0IHN0cnVjdCBjeDE4X2NhcmQgKmN4MThfZ2V0X2NhcmQodTE2IGluZGV4KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtZHJpdmVyLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1kcml2ZXIuYwppbmRleCBiZDE4YWZlLi4wODUxMjFjIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1kcml2ZXIuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1kcml2ZXIuYwpAQCAtNCw2ICs0LDcgQEAKICAqICBEZXJpdmVkIGZyb20gaXZ0di1kcml2ZXIuYwogICoKICAqICBDb3B5cmlnaHQgKEMpIDIwMDcgIEhhbnMgVmVya3VpbCA8aHZlcmt1aWxAeHM0YWxsLm5sPgorICogIENvcHlyaWdodCAoQykgMjAwOCAgQW5keSBXYWxscyA8YXdhbGxzQHJhZGl4Lm5ldD4KICAqCiAgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQpAQCAtMjIsNiArMjMsNyBAQAogICovCiAKICNpbmNsdWRlICJjeDE4LWRyaXZlci5oIgorI2luY2x1ZGUgImN4MTgtaW8uaCIKICNpbmNsdWRlICJjeDE4LXZlcnNpb24uaCIKICNpbmNsdWRlICJjeDE4LWNhcmRzLmgiCiAjaW5jbHVkZSAiY3gxOC1pMmMuaCIKQEAgLTczLDEwICs3NSwxNCBAQAogCQkJCSAgICAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAogCQkJCSAgICAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAogCQkJCSAgICAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xIH07Ci0KK3N0YXRpYyBpbnQgbW1pb19uZGVsYXlbQ1gxOF9NQVhfQ0FSRFNdID0geyAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsCisJCQkJCSAgIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwKKwkJCQkJICAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAorCQkJCQkgICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEgfTsKIHN0YXRpYyB1bnNpZ25lZCBjYXJkdHlwZV9jID0gMTsKIHN0YXRpYyB1bnNpZ25lZCB0dW5lcl9jID0gMTsKIHN0YXRpYyB1bnNpZ25lZCByYWRpb19jID0gMTsKK3N0YXRpYyB1bnNpZ25lZCBtbWlvX25kZWxheV9jID0gMTsKIHN0YXRpYyBjaGFyIHBhbFtdID0gIi0tIjsKIHN0YXRpYyBjaGFyIHNlY2FtW10gPSAiLS0iOwogc3RhdGljIGNoYXIgbnRzY1tdID0gIi0iOwpAQCAtOTAsMTUgKzk2LDE4IEBACiAKIHN0YXRpYyBpbnQgY3gxOF9wY2lfbGF0ZW5jeSA9IDE7CiAKK2ludCBjeDE4X3JldHJ5X21taW8gPSAxOwogaW50IGN4MThfZGVidWc7CiAKIG1vZHVsZV9wYXJhbV9hcnJheSh0dW5lciwgaW50LCAmdHVuZXJfYywgMDY0NCk7CiBtb2R1bGVfcGFyYW1fYXJyYXkocmFkaW8sIGJvb2wsICZyYWRpb19jLCAwNjQ0KTsKIG1vZHVsZV9wYXJhbV9hcnJheShjYXJkdHlwZSwgaW50LCAmY2FyZHR5cGVfYywgMDY0NCk7Cittb2R1bGVfcGFyYW1fYXJyYXkobW1pb19uZGVsYXksIGludCwgJm1taW9fbmRlbGF5X2MsIDA2NDQpOwogbW9kdWxlX3BhcmFtX3N0cmluZyhwYWwsIHBhbCwgc2l6ZW9mKHBhbCksIDA2NDQpOwogbW9kdWxlX3BhcmFtX3N0cmluZyhzZWNhbSwgc2VjYW0sIHNpemVvZihzZWNhbSksIDA2NDQpOwogbW9kdWxlX3BhcmFtX3N0cmluZyhudHNjLCBudHNjLCBzaXplb2YobnRzYyksIDA2NDQpOwogbW9kdWxlX3BhcmFtX25hbWVkKGRlYnVnLCBjeDE4X2RlYnVnLCBpbnQsIDA2NDQpOworbW9kdWxlX3BhcmFtX25hbWVkKHJldHJ5X21taW8sIGN4MThfcmV0cnlfbW1pbywgaW50LCAwNjQ0KTsKIG1vZHVsZV9wYXJhbShjeDE4X3BjaV9sYXRlbmN5LCBpbnQsIDA2NDQpOwogbW9kdWxlX3BhcmFtKGN4MThfZmlyc3RfbWlub3IsIGludCwgMDY0NCk7CiAKQEAgLTEyMSw2ICsxMzAsOCBAQAogCQkgIlx0XHRcdCAzID0gQ29tcHJvIFZpZGVvTWF0ZSBIOTAwXG4iCiAJCSAiXHRcdFx0IDQgPSBZdWFuIE1QQzcxOFxuIgogCQkgIlx0XHRcdCA1ID0gQ29uZXhhbnQgUmFwdG9yIFBBTC9TRUNBTVxuIgorCQkgIlx0XHRcdCA2ID0gVG9zaGliYSBRb3NtaW8gRFZCLVQvQW5hbG9nXG4iCisJCSAiXHRcdFx0IDcgPSBMZWFkdGVrIFdpbkZhc3QgUFZSMjEwMFxuIgogCQkgIlx0XHRcdCAwID0gQXV0b2RldGVjdCAoZGVmYXVsdClcbiIKIAkJICJcdFx0XHQtMSA9IElnbm9yZSB0aGlzIGNhcmRcblx0XHQiKTsKIE1PRFVMRV9QQVJNX0RFU0MocGFsLCAiU2V0IFBBTCBzdGFuZGFyZDogQiwgRywgSCwgRCwgSywgSSwgTSwgTiwgTmMsIDYwIik7CkBAIC0xNDAsNiArMTUxLDE0IEBACiBNT0RVTEVfUEFSTV9ERVNDKGN4MThfcGNpX2xhdGVuY3ksCiAJCSAiQ2hhbmdlIHRoZSBQQ0kgbGF0ZW5jeSB0byA2NCBpZiBsb3dlcjogMCA9IE5vLCAxID0gWWVzLFxuIgogCQkgIlx0XHRcdERlZmF1bHQ6IFllcyIpOworTU9EVUxFX1BBUk1fREVTQyhyZXRyeV9tbWlvLAorCQkgIkNoZWNrIGFuZCByZXRyeSBtZW1vcnkgbWFwcGVkIElPIGFjY2Vzc2VzXG4iCisJCSAiXHRcdFx0RGVmYXVsdDogMSBbWWVzXSIpOworTU9EVUxFX1BBUk1fREVTQyhtbWlvX25kZWxheSwKKwkJICJEZWxheSAobnMpIGZvciBlYWNoIENYMjM0MTggbWVtb3J5IG1hcHBlZCBJTyBhY2Nlc3MuXG4iCisJCSAiXHRcdFx0VHJ5IGxhcmdlciB2YWx1ZXMgdGhhdCBhcmUgY2xvc2UgdG8gYSBtdWx0aXBsZSBvZiB0aGVcbiIKKwkJICJcdFx0XHRQQ0kgY2xvY2sgcGVyaW9kLCAzMC4zIG5zLCBpZiB5b3VyIGNhcmQgZG9lc24ndCB3b3JrLlxuIgorCQkgIlx0XHRcdERlZmF1bHQ6ICIgX19zdHJpbmdpZnkoQ1gxOF9ERUZBVUxUX01NSU9fTkRFTEFZKSk7CiBNT0RVTEVfUEFSTV9ERVNDKGVuY19tcGdfYnVmZmVycywKIAkJICJFbmNvZGVyIE1QRyBCdWZmZXJzIChpbiBNQilcbiIKIAkJICJcdFx0XHREZWZhdWx0OiAiIF9fc3RyaW5naWZ5KENYMThfREVGQVVMVF9FTkNfTVBHX0JVRkZFUlMpKTsKQEAgLTE1Niw3ICsxNzUsNyBAQAogCQkgIkVuY29kZXIgUENNIGJ1ZmZlcnMgKGluIE1CKVxuIgogCQkgIlx0XHRcdERlZmF1bHQ6ICIgX19zdHJpbmdpZnkoQ1gxOF9ERUZBVUxUX0VOQ19QQ01fQlVGRkVSUykpOwogCi1NT0RVTEVfUEFSTV9ERVNDKGN4MThfZmlyc3RfbWlub3IsICJTZXQgbWlub3IgYXNzaWduZWQgdG8gZmlyc3QgY2FyZCIpOworTU9EVUxFX1BBUk1fREVTQyhjeDE4X2ZpcnN0X21pbm9yLCAiU2V0IGtlcm5lbCBudW1iZXIgYXNzaWduZWQgdG8gZmlyc3QgY2FyZCIpOwogCiBNT0RVTEVfQVVUSE9SKCJIYW5zIFZlcmt1aWwiKTsKIE1PRFVMRV9ERVNDUklQVElPTigiQ1gyMzQxOCBkcml2ZXIiKTsKQEAgLTM1Niw2ICszNzUsMTEgQEAKIAljeC0+b3B0aW9ucy50dW5lciA9IHR1bmVyW2N4LT5udW1dOwogCWN4LT5vcHRpb25zLnJhZGlvID0gcmFkaW9bY3gtPm51bV07CiAKKwlpZiAobW1pb19uZGVsYXlbY3gtPm51bV0gPCAwKQorCQljeC0+b3B0aW9ucy5tbWlvX25kZWxheSA9IENYMThfREVGQVVMVF9NTUlPX05ERUxBWTsKKwllbHNlCisJCWN4LT5vcHRpb25zLm1taW9fbmRlbGF5ID0gbW1pb19uZGVsYXlbY3gtPm51bV07CisKIAljeC0+c3RkID0gY3gxOF9wYXJzZV9zdGQoY3gpOwogCWlmIChjeC0+b3B0aW9ucy5jYXJkdHlwZSA9PSAtMSkgewogCQlDWDE4X0lORk8oIklnbm9yZSBjYXJkXG4iKTsKQEAgLTM5NSw5ICs0MTksOSBAQAogCiAJaWYgKGN4LT5jYXJkID09IE5VTEwpIHsKIAkJY3gtPmNhcmQgPSBjeDE4X2dldF9jYXJkKENYMThfQ0FSRF9IVlJfMTYwMF9FU01UKTsKLQkJQ1gxOF9FUlIoIlVua25vd24gY2FyZDogdmVuZG9yL2RldmljZTogJTA0eC8lMDR4XG4iLAorCQlDWDE4X0VSUigiVW5rbm93biBjYXJkOiB2ZW5kb3IvZGV2aWNlOiBbJTA0eDolMDR4XVxuIiwKIAkJICAgICBjeC0+ZGV2LT52ZW5kb3IsIGN4LT5kZXYtPmRldmljZSk7Ci0JCUNYMThfRVJSKCIgICAgICAgICAgICAgIHN1YnN5c3RlbSB2ZW5kb3IvZGV2aWNlOiAlMDR4LyUwNHhcbiIsCisJCUNYMThfRVJSKCIgICAgICAgICAgICAgIHN1YnN5c3RlbSB2ZW5kb3IvZGV2aWNlOiBbJTA0eDolMDR4XVxuIiwKIAkJICAgICBjeC0+ZGV2LT5zdWJzeXN0ZW1fdmVuZG9yLCBjeC0+ZGV2LT5zdWJzeXN0ZW1fZGV2aWNlKTsKIAkJQ1gxOF9FUlIoIkRlZmF1bHRpbmcgdG8gJXMgY2FyZFxuIiwgY3gtPmNhcmQtPm5hbWUpOwogCQlDWDE4X0VSUigiUGxlYXNlIG1haWwgdGhlIHZlbmRvci9kZXZpY2UgYW5kIHN1YnN5c3RlbSB2ZW5kb3IvZGV2aWNlIElEcyBhbmQgd2hhdCBraW5kIG9mXG4iKTsKQEAgLTUxMSw5ICs1MzUsOSBAQAogCQlyZXR1cm4gLUVJTzsKIAl9CiAKLQkvKiBDaGVjayBmb3IgYnVzIG1hc3RlcmluZyAqLworCS8qIEVuYWJsZSBidXMgbWFzdGVyaW5nIGFuZCBtZW1vcnkgbWFwcGVkIElPIGZvciB0aGUgQ1gyMzQxOCAqLwogCXBjaV9yZWFkX2NvbmZpZ193b3JkKGRldiwgUENJX0NPTU1BTkQsICZjbWQpOwotCWNtZCB8PSBQQ0lfQ09NTUFORF9JTyB8IFBDSV9DT01NQU5EX01FTU9SWSB8IFBDSV9DT01NQU5EX01BU1RFUjsKKwljbWQgfD0gUENJX0NPTU1BTkRfTUVNT1JZIHwgUENJX0NPTU1BTkRfTUFTVEVSOwogCXBjaV93cml0ZV9jb25maWdfd29yZChkZXYsIFBDSV9DT01NQU5ELCBjbWQpOwogCiAJcGNpX3JlYWRfY29uZmlnX2J5dGUoZGV2LCBQQ0lfQ0xBU1NfUkVWSVNJT04sICZjeC0+Y2FyZF9yZXYpOwpAQCAtNTI1LDExICs1NDksNiBAQAogCQlwY2lfd3JpdGVfY29uZmlnX2J5dGUoZGV2LCBQQ0lfTEFURU5DWV9USU1FUiwgNjQpOwogCQlwY2lfcmVhZF9jb25maWdfYnl0ZShkZXYsIFBDSV9MQVRFTkNZX1RJTUVSLCAmcGNpX2xhdGVuY3kpOwogCX0KLQkvKiBUaGlzIGNvbmZpZyBzcGFjZSB2YWx1ZSByZWxhdGVzIHRvIERNQSBsYXRlbmNpZXMuIFRoZQotCSAgIGRlZmF1bHQgdmFsdWUgMHg4MDgwIGlzIHRvbyBsb3cgaG93ZXZlciBhbmQgd2lsbCBsZWFkCi0JICAgdG8gRE1BIGVycm9ycy4gMHhmZmZmIGlzIHRoZSBtYXggdmFsdWUgd2hpY2ggc29sdmVzCi0JICAgdGhlc2UgcHJvYmxlbXMuICovCi0JcGNpX3dyaXRlX2NvbmZpZ19kd29yZChkZXYsIDB4NDAsIDB4ZmZmZik7CiAKIAlDWDE4X0RFQlVHX0lORk8oImN4JWQgKHJldiAlZCkgYXQgJTAyeDolMDJ4LiV4LCAiCiAJCSAgICJpcnE6ICVkLCBsYXRlbmN5OiAlZCwgbWVtb3J5OiAweCVseFxuIiwKQEAgLTY1Niw3ICs2NzUsNyBAQAogCQlnb3RvIGZyZWVfbWVtOwogCX0KIAljeC0+cmVnX21lbSA9IGN4LT5lbmNfbWVtICsgQ1gxOF9SRUdfT0ZGU0VUOwotCWRldnR5cGUgPSByZWFkX3JlZygweEM3MjAyOCk7CisJZGV2dHlwZSA9IGN4MThfcmVhZF9yZWcoY3gsIDB4QzcyMDI4KTsKIAlzd2l0Y2ggKGRldnR5cGUgJiAweGZmMDAwMDAwKSB7CiAJY2FzZSAweGZmMDAwMDAwOgogCQlDWDE4X0lORk8oImN4MjM0MTggcmV2aXNpb24gJTA4eCAoQSlcbiIsIGRldnR5cGUpOwpAQCAtODE1LDYgKzgzNCw3IEBACiAJaWYgKHJldHZhbCA9PSAwKQogCQlyZXR2YWwgPSAtRU5PREVWOwogCUNYMThfRVJSKCJFcnJvciAlZCBvbiBpbml0aWFsaXphdGlvblxuIiwgcmV0dmFsKTsKKwljeDE4X2xvZ19zdGF0aXN0aWNzKGN4KTsKIAogCWtmcmVlKGN4MThfY2FyZHNbY3gxOF9jYXJkc19hY3RpdmVdKTsKIAljeDE4X2NhcmRzW2N4MThfY2FyZHNfYWN0aXZlXSA9IE5VTEw7CkBAIC05MDIsOCArOTIyLDggQEAKIAkJY3gxOF9zdG9wX2FsbF9jYXB0dXJlcyhjeCk7CiAKIAkvKiBJbnRlcnJ1cHRzICovCi0Jc3cxX2lycV9kaXNhYmxlKElSUV9DUFVfVE9fRVBVIHwgSVJRX0FQVV9UT19FUFUpOwotCXN3Ml9pcnFfZGlzYWJsZShJUlFfQ1BVX1RPX0VQVV9BQ0sgfCBJUlFfQVBVX1RPX0VQVV9BQ0spOworCWN4MThfc3cxX2lycV9kaXNhYmxlKGN4LCBJUlFfQ1BVX1RPX0VQVSB8IElSUV9BUFVfVE9fRVBVKTsKKwljeDE4X3N3Ml9pcnFfZGlzYWJsZShjeCwgSVJRX0NQVV9UT19FUFVfQUNLIHwgSVJRX0FQVV9UT19FUFVfQUNLKTsKIAogCWN4MThfaGFsdF9maXJtd2FyZShjeCk7CiAKQEAgLTkxOSw2ICs5MzksNyBAQAogCiAJcGNpX2Rpc2FibGVfZGV2aWNlKGN4LT5kZXYpOwogCisJY3gxOF9sb2dfc3RhdGlzdGljcyhjeCk7CiAJQ1gxOF9JTkZPKCJSZW1vdmVkICVzLCBjYXJkICMlZFxuIiwgY3gtPmNhcmRfbmFtZSwgY3gtPm51bSk7CiB9CiAKQEAgLTkzOCw3ICs5NTksNyBAQAogCiAJLyogVmFsaWRhdGUgcGFyYW1ldGVycyAqLwogCWlmIChjeDE4X2ZpcnN0X21pbm9yIDwgMCB8fCBjeDE4X2ZpcnN0X21pbm9yID49IENYMThfTUFYX0NBUkRTKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiY3gxODogIEV4aXRpbmcsIGl2dHZfZmlyc3RfbWlub3IgbXVzdCBiZSBiZXR3ZWVuIDAgYW5kICVkXG4iLAorCQlwcmludGsoS0VSTl9FUlIgImN4MTg6ICBFeGl0aW5nLCBjeDE4X2ZpcnN0X21pbm9yIG11c3QgYmUgYmV0d2VlbiAwIGFuZCAlZFxuIiwKIAkJICAgICBDWDE4X01BWF9DQVJEUyAtIDEpOwogCQlyZXR1cm4gLTE7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtZHJpdmVyLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1kcml2ZXIuaAppbmRleCA0ODAxYmM3Li5hNGIxNzA4IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1kcml2ZXIuaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1kcml2ZXIuaApAQCAtMzgsMTAgKzM4LDEwIEBACiAjaW5jbHVkZSA8bGludXgvaTJjLWFsZ28tYml0Lmg+CiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgogI2luY2x1ZGUgPGxpbnV4L3VuaXN0ZC5oPgotI2luY2x1ZGUgPGxpbnV4L2J5dGVvcmRlci9zd2FiLmg+CiAjaW5jbHVkZSA8bGludXgvcGFnZW1hcC5oPgogI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgogCiAjaW5jbHVkZSA8bGludXgvZHZiL3ZpZGVvLmg+CiAjaW5jbHVkZSA8bGludXgvZHZiL2F1ZGlvLmg+CkBAIC02NCw2ICs2NCw5IEBACiAjICBlcnJvciAiVGhpcyBkcml2ZXIgcmVxdWlyZXMga2VybmVsIFBDSSBzdXBwb3J0LiIKICNlbmRpZgogCisvKiBEZWZhdWx0IGRlbGF5IHRvIHRocm90dGxlIG1taW8gYWNjZXNzIHRvIHRoZSBDWDIzNDE4ICovCisjZGVmaW5lIENYMThfREVGQVVMVF9NTUlPX05ERUxBWSAwIC8qIDAgbnMgPSAwIFBDSSBjbG9jayhzKSAvIDMzIE1IeiAqLworCiAjZGVmaW5lIENYMThfTUVNX09GRlNFVAkweDAwMDAwMDAwCiAjZGVmaW5lIENYMThfTUVNX1NJWkUJMHgwNDAwMDAwMAogI2RlZmluZSBDWDE4X1JFR19PRkZTRVQJMHgwMjAwMDAwMApAQCAtNzcsNyArODAsOSBAQAogI2RlZmluZSBDWDE4X0NBUkRfQ09NUFJPX0g5MDAgCSAgICAgIDIJLyogQ29tcHJvIFZpZGVvTWF0ZSBIOTAwICovCiAjZGVmaW5lIENYMThfQ0FSRF9ZVUFOX01QQzcxOCAJICAgICAgMwkvKiBZdWFuIE1QQzcxOCAqLwogI2RlZmluZSBDWDE4X0NBUkRfQ05YVF9SQVBUT1JfUEFMICAgICA0CS8qIENvbmV4YW50IFJhcHRvciBQQUwgKi8KLSNkZWZpbmUgQ1gxOF9DQVJEX0xBU1QgCQkgICAgICA0CisjZGVmaW5lIENYMThfQ0FSRF9UT1NISUJBX1FPU01JT19EVkJUIDUgLyogVG9zaGliYSBRb3NtaW8gSW50ZXJhbCBEVkItVC9BbmFsb2cqLworI2RlZmluZSBDWDE4X0NBUkRfTEVBRFRFS19QVlIyMTAwICAgICA2IC8qIExlYWR0ZWsgV2luRmFzdCBQVlIyMTAwICovCisjZGVmaW5lIENYMThfQ0FSRF9MQVNUIAkJICAgICAgNgogCiAjZGVmaW5lIENYMThfRU5DX1NUUkVBTV9UWVBFX01QRyAgMAogI2RlZmluZSBDWDE4X0VOQ19TVFJFQU1fVFlQRV9UUyAgIDEKQEAgLTk3LDYgKzEwMiw4IEBACiAjZGVmaW5lIENYMThfUENJX0lEX0NPTVBSTyAJCTB4MTg1YgogI2RlZmluZSBDWDE4X1BDSV9JRF9ZVUFOIAkJMHgxMmFiCiAjZGVmaW5lIENYMThfUENJX0lEX0NPTkVYQU5UCQkweDE0ZjEKKyNkZWZpbmUgQ1gxOF9QQ0lfSURfVE9TSElCQQkJMHgxMTc5CisjZGVmaW5lIENYMThfUENJX0lEX0xFQURURUsJCTB4MTA3RAogCiAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KIC8qID09PT09PT09PT09PT09PT09PT09PT09PT09IFNUQVJUIFVTRVIgU0VUVEFCTEUgRE1BIFZBUklBQkxFUyA9PT09PT09PT09PSAqLwpAQCAtMTY5LDYgKzE3Niw3IEBACiAKICNkZWZpbmUgQ1gxOF9NQVhfUEdNX0lOREVYICg0MDApCiAKK2V4dGVybiBpbnQgY3gxOF9yZXRyeV9tbWlvOwkvKiBlbmFibGUgY2hlY2sgJiByZXRyeSBvZiBtbWlvIGFjY2Vzc2VzICovCiBleHRlcm4gaW50IGN4MThfZGVidWc7CiAKIApAQCAtMTc3LDYgKzE4NSw3IEBACiAJaW50IGNhcmR0eXBlOwkJLyogZm9yY2UgY2FyZCB0eXBlIG9uIGxvYWQgKi8KIAlpbnQgdHVuZXI7CQkvKiBzZXQgdHVuZXIgb24gbG9hZCAqLwogCWludCByYWRpbzsJCS8qIGVuYWJsZS9kaXNhYmxlIHJhZGlvICovCisJdW5zaWduZWQgbG9uZyBtbWlvX25kZWxheTsgLyogZGVsYXkgaW4gbnMgYWZ0ZXIgZXZlcnkgUENJIG1taW8gYWNjZXNzICovCiB9OwogCiAvKiBwZXItYnVmZmVyIGJpdCBmbGFncyAqLwpAQCAtMjE2LDggKzIyNSw3IEBACiAKIHN0cnVjdCBjeDE4X3F1ZXVlIHsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7Ci0JdTMyIGJ1ZmZlcnM7Ci0JdTMyIGxlbmd0aDsKKwlhdG9taWNfdCBidWZmZXJzOwogCXUzMiBieXRlc3VzZWQ7CiB9OwogCkBAIC0yMzcsNiArMjQ1LDggQEAKIHN0cnVjdCBjeDE4OwkgLyogZm9yd2FyZCByZWZlcmVuY2UgKi8KIHN0cnVjdCBjeDE4X3NjYjsgLyogZm9yd2FyZCByZWZlcmVuY2UgKi8KIAorI2RlZmluZSBDWDE4X0lOVkFMSURfVEFTS19IQU5ETEUgMHhmZmZmZmZmZgorCiBzdHJ1Y3QgY3gxOF9zdHJlYW0gewogCS8qIFRoZXNlIGZpcnN0IGZvdXIgZmllbGRzIGFyZSBhbHdheXMgc2V0LCBldmVuIGlmIHRoZSBzdHJlYW0KIAkgICBpcyBub3QgYWN0dWFsbHkgY3JlYXRlZC4gKi8KQEAgLTI1OSw3ICsyNjksNiBAQAogCS8qIEJ1ZmZlciBTdGF0cyAqLwogCXUzMiBidWZmZXJzOwogCXUzMiBidWZfc2l6ZTsKLQl1MzIgYnVmZmVyc19zdG9sZW47CiAKIAkvKiBCdWZmZXIgUXVldWVzICovCiAJc3RydWN0IGN4MThfcXVldWUgcV9mcmVlOwkvKiBmcmVlIGJ1ZmZlcnMgKi8KQEAgLTM0MSw2ICszNTAsMTMgQEAKIAlpbnQgYnVzX2luZGV4OyAgIC8qIDAgb3IgMSBmb3IgdGhlIGN4MjM0MTgncyAxc3Qgb3IgMm5kIEkyQyBidXMgKi8KIH07CiAKKyNkZWZpbmUgQ1gxOF9NQVhfTU1JT19SRVRSSUVTIDEwCisKK3N0cnVjdCBjeDE4X21taW9fc3RhdHMgeworCWF0b21pY190IHJldHJpZWRfd3JpdGVbQ1gxOF9NQVhfTU1JT19SRVRSSUVTKzFdOworCWF0b21pY190IHJldHJpZWRfcmVhZFtDWDE4X01BWF9NTUlPX1JFVFJJRVMrMV07Cit9OworCiAvKiBTdHJ1Y3QgdG8gaG9sZCBpbmZvIGFib3V0IGN4MTggY2FyZHMgKi8KIHN0cnVjdCBjeDE4IHsKIAlpbnQgbnVtOwkJLyogYm9hcmQgbnVtYmVyLCAtMSBkdXJpbmcgaW5pdCEgKi8KQEAgLTQzMCw2ICs0NDYsOSBAQAogCXUzMiBncGlvX3ZhbDsKIAlzdHJ1Y3QgbXV0ZXggZ3Bpb19sb2NrOwogCisJLyogU3RhdGlzdGljcyAqLworCXN0cnVjdCBjeDE4X21taW9fc3RhdHMgbW1pb19zdGF0czsKKwogCS8qIHY0bDIgYW5kIFVzZXIgc2V0dGluZ3MgKi8KIAogCS8qIGNvZGVjIHNldHRpbmdzICovCkBAIC00NTgsNDcgKzQ3Nyw0IEBACiAvKiBGaXJzdC1vcGVuIGluaXRpYWxpemF0aW9uOiBsb2FkIGZpcm13YXJlLCBldGMuICovCiBpbnQgY3gxOF9pbml0X29uX2ZpcnN0X29wZW4oc3RydWN0IGN4MTggKmN4KTsKIAotLyogVGhpcyBpcyBhIFBDSSBwb3N0IHRoaW5nLCB3aGVyZSBpZiB0aGUgcGNpIHJlZ2lzdGVyIGlzIG5vdCByZWFkLCB0aGVuCi0gICB0aGUgd3JpdGUgZG9lc24ndCBhbHdheXMgdGFrZSBlZmZlY3QgcmlnaHQgYXdheS4gQnkgcmVhZGluZyBiYWNrIHRoZQotICAgcmVnaXN0ZXIgYW55IHBlbmRpbmcgUENJIHdyaXRlcyB3aWxsIGJlIHBlcmZvcm1lZCAoaW4gb3JkZXIpLCBhbmQgc28KLSAgIHlvdSBjYW4gYmUgc3VyZSB0aGF0IHRoZSB3cml0ZXMgYXJlIGd1YXJhbnRlZWQgdG8gYmUgZG9uZS4KLQotICAgUmFyZWx5IG5lZWRlZCwgb25seSBpbiBzb21lIHRpbWluZyBzZW5zaXRpdmUgY2FzZXMuCi0gICBBcHBhcmVudGx5IGlmIHRoaXMgaXMgbm90IGRvbmUgc29tZSBtb3RoZXJib2FyZHMgc2VlbQotICAgdG8ga2lsbCB0aGUgZmlybXdhcmUgYW5kIGdldCBpbnRvIHRoZSBicm9rZW4gc3RhdGUgdW50aWwgY29tcHV0ZXIgaXMKLSAgIHJlYm9vdGVkLiAqLwotI2RlZmluZSB3cml0ZV9zeW5jKHZhbCwgcmVnKSBcCi0JZG8geyB3cml0ZWwodmFsLCByZWcpOyByZWFkbChyZWcpOyB9IHdoaWxlICgwKQotCi0jZGVmaW5lIHJlYWRfcmVnKHJlZykgcmVhZGwoY3gtPnJlZ19tZW0gKyAocmVnKSkKLSNkZWZpbmUgd3JpdGVfcmVnKHZhbCwgcmVnKSB3cml0ZWwodmFsLCBjeC0+cmVnX21lbSArIChyZWcpKQotI2RlZmluZSB3cml0ZV9yZWdfc3luYyh2YWwsIHJlZykgXAotCWRvIHsgd3JpdGVfcmVnKHZhbCwgcmVnKTsgcmVhZF9yZWcocmVnKTsgfSB3aGlsZSAoMCkKLQotI2RlZmluZSByZWFkX2VuYyhhZGRyKSByZWFkbChjeC0+ZW5jX21lbSArICh1MzIpKGFkZHIpKQotI2RlZmluZSB3cml0ZV9lbmModmFsLCBhZGRyKSB3cml0ZWwodmFsLCBjeC0+ZW5jX21lbSArICh1MzIpKGFkZHIpKQotI2RlZmluZSB3cml0ZV9lbmNfc3luYyh2YWwsIGFkZHIpIFwKLQlkbyB7IHdyaXRlX2VuYyh2YWwsIGFkZHIpOyByZWFkX2VuYyhhZGRyKTsgfSB3aGlsZSAoMCkKLQotI2RlZmluZSBzdzFfaXJxX2VuYWJsZSh2YWwpIGRvIHsgXAotCXdyaXRlX3JlZyh2YWwsIFNXMV9JTlRfU1RBVFVTKTsgXAotCXdyaXRlX3JlZyhyZWFkX3JlZyhTVzFfSU5UX0VOQUJMRV9QQ0kpIHwgKHZhbCksIFNXMV9JTlRfRU5BQkxFX1BDSSk7IFwKLX0gd2hpbGUgKDApCi0KLSNkZWZpbmUgc3cxX2lycV9kaXNhYmxlKHZhbCkgXAotCXdyaXRlX3JlZyhyZWFkX3JlZyhTVzFfSU5UX0VOQUJMRV9QQ0kpICYgfih2YWwpLCBTVzFfSU5UX0VOQUJMRV9QQ0kpOwotCi0jZGVmaW5lIHN3Ml9pcnFfZW5hYmxlKHZhbCkgZG8geyBcCi0Jd3JpdGVfcmVnKHZhbCwgU1cyX0lOVF9TVEFUVVMpOyBcCi0Jd3JpdGVfcmVnKHJlYWRfcmVnKFNXMl9JTlRfRU5BQkxFX1BDSSkgfCAodmFsKSwgU1cyX0lOVF9FTkFCTEVfUENJKTsgXAotfSB3aGlsZSAoMCkKLQotI2RlZmluZSBzdzJfaXJxX2Rpc2FibGUodmFsKSBcCi0Jd3JpdGVfcmVnKHJlYWRfcmVnKFNXMl9JTlRfRU5BQkxFX1BDSSkgJiB+KHZhbCksIFNXMl9JTlRfRU5BQkxFX1BDSSk7Ci0KLSNkZWZpbmUgc2V0dXBfcGFnZShhZGRyKSBkbyB7IFwKLSAgICB1MzIgdmFsID0gcmVhZF9yZWcoMHhEMDAwRjgpICYgfjB4MWYwMDsgXAotICAgIHdyaXRlX3JlZyh2YWwgfCAoKChhZGRyKSA+PiAxNykgJiAweDFmMDApLCAweEQwMDBGOCk7IFwKLX0gd2hpbGUgKDApCi0KICNlbmRpZiAvKiBDWDE4X0RSSVZFUl9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1kdmIuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWR2Yi5jCmluZGV4IDFlNDIwYTguLmFmYzY5NGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWR2Yi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWR2Yi5jCkBAIC0yMSw2ICsyMSw3IEBACiAKICNpbmNsdWRlICJjeDE4LXZlcnNpb24uaCIKICNpbmNsdWRlICJjeDE4LWR2Yi5oIgorI2luY2x1ZGUgImN4MTgtaW8uaCIKICNpbmNsdWRlICJjeDE4LXN0cmVhbXMuaCIKICNpbmNsdWRlICJjeDE4LWNhcmRzLmgiCiAjaW5jbHVkZSAiczVoMTQwOS5oIgpAQCAtODcsMTMgKzg4LDEzIEBACiAJc3dpdGNoIChjeC0+Y2FyZC0+dHlwZSkgewogCWNhc2UgQ1gxOF9DQVJEX0hWUl8xNjAwX0VTTVQ6CiAJY2FzZSBDWDE4X0NBUkRfSFZSXzE2MDBfU0FNU1VORzoKLQkJdiA9IHJlYWRfcmVnKENYMThfUkVHX0RNVVhfTlVNX1BPUlRfMF9DT05UUk9MKTsKKwkJdiA9IGN4MThfcmVhZF9yZWcoY3gsIENYMThfUkVHX0RNVVhfTlVNX1BPUlRfMF9DT05UUk9MKTsKIAkJdiB8PSAweDAwNDAwMDAwOyAvKiBTZXJpYWwgTW9kZSAqLwogCQl2IHw9IDB4MDAwMDIwMDA7IC8qIERhdGEgTGVuZ3RoIC0gQnl0ZSAqLwogCQl2IHw9IDB4MDAwMTAwMDA7IC8qIEVycm9yIC0gUG9sYXJpdHkgKi8KIAkJdiB8PSAweDAwMDIwMDAwOyAvKiBFcnJvciAtIFBhc3N0aHJ1ICovCiAJCXYgfD0gMHgwMDBjMDAwMDsgLyogRXJyb3IgLSBJZ25vcmUgKi8KLQkJd3JpdGVfcmVnKHYsIENYMThfUkVHX0RNVVhfTlVNX1BPUlRfMF9DT05UUk9MKTsKKwkJY3gxOF93cml0ZV9yZWcoY3gsIHYsIENYMThfUkVHX0RNVVhfTlVNX1BPUlRfMF9DT05UUk9MKTsKIAkJYnJlYWs7CiAKIAlkZWZhdWx0OgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtZmlsZW9wcy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtZmlsZW9wcy5jCmluZGV4IDFlNTM3ZmUuLjVmOTA4OTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWZpbGVvcHMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1maWxlb3BzLmMKQEAgLTEzMiw2ICsxMzIsNyBAQAogCXUxNiBuZXdfc3RlcmVvX21vZGU7CiAJY29uc3QgdTE2IHN0ZXJlb19tYXNrID0gMHgwMzAwOwogCWNvbnN0IHUxNiBkdWFsID0gMHgwMjAwOworCXUzMiBoOwogCiAJbmV3X3N0ZXJlb19tb2RlID0gY3gtPnBhcmFtcy5hdWRpb19wcm9wZXJ0aWVzICYgc3RlcmVvX21hc2s7CiAJbWVtc2V0KCZ2dCwgMCwgc2l6ZW9mKHZ0KSk7CkBAIC0xNDMsMTMgKzE0NCwyMSBAQAogCWlmIChuZXdfc3RlcmVvX21vZGUgPT0gY3gtPmR1YWx3YXRjaF9zdGVyZW9fbW9kZSkKIAkJcmV0dXJuOwogCi0JbmV3X2JpdG1hcCA9IG5ld19zdGVyZW9fbW9kZSB8IChjeC0+cGFyYW1zLmF1ZGlvX3Byb3BlcnRpZXMgJiB+c3RlcmVvX21hc2spOworCW5ld19iaXRtYXAgPSBuZXdfc3RlcmVvX21vZGUKKwkJCXwgKGN4LT5wYXJhbXMuYXVkaW9fcHJvcGVydGllcyAmIH5zdGVyZW9fbWFzayk7CiAKLQlDWDE4X0RFQlVHX0lORk8oImR1YWx3YXRjaDogY2hhbmdlIHN0ZXJlbyBmbGFnIGZyb20gMHgleCB0byAweCV4LiBuZXcgYXVkaW9fYml0bWFzaz0weCV1eFxuIiwKLQkJCSAgIGN4LT5kdWFsd2F0Y2hfc3RlcmVvX21vZGUsIG5ld19zdGVyZW9fbW9kZSwgbmV3X2JpdG1hcCk7CisJQ1gxOF9ERUJVR19JTkZPKCJkdWFsd2F0Y2g6IGNoYW5nZSBzdGVyZW8gZmxhZyBmcm9tIDB4JXggdG8gMHgleC4gIgorCQkJIm5ldyBhdWRpb19iaXRtYXNrPTB4JXV4XG4iLAorCQkJY3gtPmR1YWx3YXRjaF9zdGVyZW9fbW9kZSwgbmV3X3N0ZXJlb19tb2RlLCBuZXdfYml0bWFwKTsKIAotCWlmIChjeDE4X3ZhcGkoY3gsIENYMThfQ1BVX1NFVF9BVURJT19QQVJBTUVURVJTLCAyLAotCQkJCWN4MThfZmluZF9oYW5kbGUoY3gpLCBuZXdfYml0bWFwKSA9PSAwKSB7CisJaCA9IGN4MThfZmluZF9oYW5kbGUoY3gpOworCWlmIChoID09IENYMThfSU5WQUxJRF9UQVNLX0hBTkRMRSkgeworCQlDWDE4X0RFQlVHX0lORk8oImR1YWx3YXRjaDogY2FuJ3QgZmluZCB2YWxpZCB0YXNrIGhhbmRsZVxuIik7CisJCXJldHVybjsKKwl9CisKKwlpZiAoY3gxOF92YXBpKGN4LAorCQkgICAgICBDWDE4X0NQVV9TRVRfQVVESU9fUEFSQU1FVEVSUywgMiwgaCwgbmV3X2JpdG1hcCkgPT0gMCkgewogCQljeC0+ZHVhbHdhdGNoX3N0ZXJlb19tb2RlID0gbmV3X3N0ZXJlb19tb2RlOwogCQlyZXR1cm47CiAJfQpAQCAtMjIzLDcgKzIzMiw3IEBACiAJCXByZXBhcmVfdG9fd2FpdCgmcy0+d2FpdHEsICZ3YWl0LCBUQVNLX0lOVEVSUlVQVElCTEUpOwogCQkvKiBOZXcgYnVmZmVycyBtaWdodCBoYXZlIGJlY29tZSBhdmFpbGFibGUgYmVmb3JlIHdlIHdlcmUgYWRkZWQKIAkJICAgdG8gdGhlIHdhaXRxdWV1ZSAqLwotCQlpZiAoIXMtPnFfZnVsbC5idWZmZXJzKQorCQlpZiAoIWF0b21pY19yZWFkKCZzLT5xX2Z1bGwuYnVmZmVycykpCiAJCQlzY2hlZHVsZSgpOwogCQlmaW5pc2hfd2FpdCgmcy0+d2FpdHEsICZ3YWl0KTsKIAkJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSB7CkBAIC01MDksNyArNTE4LDcgQEAKIAlDWDE4X0RFQlVHX0hJX0ZJTEUoIkVuY29kZXIgcG9sbFxuIik7CiAJcG9sbF93YWl0KGZpbHAsICZzLT53YWl0cSwgd2FpdCk7CiAKLQlpZiAocy0+cV9mdWxsLmxlbmd0aCB8fCBzLT5xX2lvLmxlbmd0aCkKKwlpZiAoYXRvbWljX3JlYWQoJnMtPnFfZnVsbC5idWZmZXJzKSB8fCBhdG9taWNfcmVhZCgmcy0+cV9pby5idWZmZXJzKSkKIAkJcmV0dXJuIFBPTExJTiB8IFBPTExSRE5PUk07CiAJaWYgKGVvZikKIAkJcmV0dXJuIFBPTExIVVA7CkBAIC02OTUsMjAgKzcwNCwyOCBAQAogCiB2b2lkIGN4MThfbXV0ZShzdHJ1Y3QgY3gxOCAqY3gpCiB7Ci0JaWYgKGF0b21pY19yZWFkKCZjeC0+YW5hX2NhcHR1cmluZykpCi0JCWN4MThfdmFwaShjeCwgQ1gxOF9DUFVfU0VUX0FVRElPX01VVEUsIDIsCi0JCQkJY3gxOF9maW5kX2hhbmRsZShjeCksIDEpOworCXUzMiBoOworCWlmIChhdG9taWNfcmVhZCgmY3gtPmFuYV9jYXB0dXJpbmcpKSB7CisJCWggPSBjeDE4X2ZpbmRfaGFuZGxlKGN4KTsKKwkJaWYgKGggIT0gQ1gxOF9JTlZBTElEX1RBU0tfSEFORExFKQorCQkJY3gxOF92YXBpKGN4LCBDWDE4X0NQVV9TRVRfQVVESU9fTVVURSwgMiwgaCwgMSk7CisJCWVsc2UKKwkJCUNYMThfRVJSKCJDYW4ndCBmaW5kIHZhbGlkIHRhc2sgaGFuZGxlIGZvciBtdXRlXG4iKTsKKwl9CiAJQ1gxOF9ERUJVR19JTkZPKCJNdXRlXG4iKTsKIH0KIAogdm9pZCBjeDE4X3VubXV0ZShzdHJ1Y3QgY3gxOCAqY3gpCiB7CisJdTMyIGg7CiAJaWYgKGF0b21pY19yZWFkKCZjeC0+YW5hX2NhcHR1cmluZykpIHsKLQkJY3gxOF9tc2xlZXBfdGltZW91dCgxMDAsIDApOwotCQljeDE4X3ZhcGkoY3gsIENYMThfQ1BVX1NFVF9NSVNDX1BBUkFNRVRFUlMsIDIsCi0JCQkJY3gxOF9maW5kX2hhbmRsZShjeCksIDEyKTsKLQkJY3gxOF92YXBpKGN4LCBDWDE4X0NQVV9TRVRfQVVESU9fTVVURSwgMiwKLQkJCQljeDE4X2ZpbmRfaGFuZGxlKGN4KSwgMCk7CisJCWggPSBjeDE4X2ZpbmRfaGFuZGxlKGN4KTsKKwkJaWYgKGggIT0gQ1gxOF9JTlZBTElEX1RBU0tfSEFORExFKSB7CisJCQljeDE4X21zbGVlcF90aW1lb3V0KDEwMCwgMCk7CisJCQljeDE4X3ZhcGkoY3gsIENYMThfQ1BVX1NFVF9NSVNDX1BBUkFNRVRFUlMsIDIsIGgsIDEyKTsKKwkJCWN4MThfdmFwaShjeCwgQ1gxOF9DUFVfU0VUX0FVRElPX01VVEUsIDIsIGgsIDApOworCQl9IGVsc2UKKwkJCUNYMThfRVJSKCJDYW4ndCBmaW5kIHZhbGlkIHRhc2sgaGFuZGxlIGZvciB1bm11dGVcbiIpOwogCX0KIAlDWDE4X0RFQlVHX0lORk8oIlVubXV0ZVxuIik7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1maXJtd2FyZS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtZmlybXdhcmUuYwppbmRleCA3OGZhZGQyLi41MTUzNDQyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1maXJtd2FyZS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWZpcm13YXJlLmMKQEAgLTIwLDYgKzIwLDcgQEAKICAqLwogCiAjaW5jbHVkZSAiY3gxOC1kcml2ZXIuaCIKKyNpbmNsdWRlICJjeDE4LWlvLmgiCiAjaW5jbHVkZSAiY3gxOC1zY2IuaCIKICNpbmNsdWRlICJjeDE4LWlycS5oIgogI2luY2x1ZGUgImN4MTgtZmlybXdhcmUuaCIKQEAgLTExMywxMSArMTE0LDExIEBACiAJc3JjID0gKGNvbnN0IHUzMiAqKWZ3LT5kYXRhOwogCiAJZm9yIChpID0gMDsgaSA8IGZ3LT5zaXplOyBpICs9IDQwOTYpIHsKLQkJc2V0dXBfcGFnZShpKTsKKwkJY3gxOF9zZXR1cF9wYWdlKGN4LCBpKTsKIAkJZm9yIChqID0gaTsgaiA8IGZ3LT5zaXplICYmIGogPCBpICsgNDA5NjsgaiArPSA0KSB7CiAJCQkvKiBubyBuZWVkIGZvciBlbmRpYW5uZXNzIGNvbnZlcnNpb24gb24gdGhlIHBwYyAqLwotCQkJX19yYXdfd3JpdGVsKCpzcmMsIGRzdCk7Ci0JCQlpZiAoX19yYXdfcmVhZGwoZHN0KSAhPSAqc3JjKSB7CisJCQljeDE4X3Jhd193cml0ZWwoY3gsICpzcmMsIGRzdCk7CisJCQlpZiAoY3gxOF9yYXdfcmVhZGwoY3gsIGRzdCkgIT0gKnNyYykgewogCQkJCUNYMThfRVJSKCJNaXNtYXRjaCBhdCBvZmZzZXQgJXhcbiIsIGkpOwogCQkJCXJlbGVhc2VfZmlybXdhcmUoZncpOwogCQkJCXJldHVybiAtRUlPOwpAQCAtMTcwLDEyICsxNzEsMTUgQEAKIAkJaWYgKG9mZnNldCArIHNlZ2hkci5zaXplID4gc3opCiAJCQlicmVhazsKIAkJZm9yIChpID0gMDsgaSA8IHNlZ2hkci5zaXplOyBpICs9IDQwOTYpIHsKLQkJCXNldHVwX3BhZ2Uob2Zmc2V0ICsgaSk7CisJCQljeDE4X3NldHVwX3BhZ2UoY3gsIG9mZnNldCArIGkpOwogCQkJZm9yIChqID0gaTsgaiA8IHNlZ2hkci5zaXplICYmIGogPCBpICsgNDA5NjsgaiArPSA0KSB7CiAJCQkJLyogbm8gbmVlZCBmb3IgZW5kaWFubmVzcyBjb252ZXJzaW9uIG9uIHRoZSBwcGMgKi8KLQkJCQlfX3Jhd193cml0ZWwoc3JjWyhvZmZzZXQgKyBqKSAvIDRdLCBkc3QgKyBzZWdoZHIuYWRkciArIGopOwotCQkJCWlmIChfX3Jhd19yZWFkbChkc3QgKyBzZWdoZHIuYWRkciArIGopICE9IHNyY1sob2Zmc2V0ICsgaikgLyA0XSkgewotCQkJCQlDWDE4X0VSUigiTWlzbWF0Y2ggYXQgb2Zmc2V0ICV4XG4iLCBvZmZzZXQgKyBqKTsKKwkJCQljeDE4X3Jhd193cml0ZWwoY3gsIHNyY1sob2Zmc2V0ICsgaikgLyA0XSwKKwkJCQkJCWRzdCArIHNlZ2hkci5hZGRyICsgaik7CisJCQkJaWYgKGN4MThfcmF3X3JlYWRsKGN4LCBkc3QgKyBzZWdoZHIuYWRkciArIGopCisJCQkJICAgICE9IHNyY1sob2Zmc2V0ICsgaikgLyA0XSkgeworCQkJCQlDWDE4X0VSUigiTWlzbWF0Y2ggYXQgb2Zmc2V0ICV4XG4iLAorCQkJCQkJIG9mZnNldCArIGopOwogCQkJCQlyZWxlYXNlX2Zpcm13YXJlKGZ3KTsKIAkJCQkJcmV0dXJuIC1FSU87CiAJCQkJfQpAQCAtMTg5LDQzICsxOTMsNDUgQEAKIAlzaXplID0gZnctPnNpemU7CiAJcmVsZWFzZV9maXJtd2FyZShmdyk7CiAJLyogQ2xlYXIgYml0MCBmb3IgQVBVIHRvIHN0YXJ0IGZyb20gMCAqLwotCXdyaXRlX3JlZyhyZWFkX3JlZygweGM3MjAzMCkgJiB+MSwgMHhjNzIwMzApOworCWN4MThfd3JpdGVfcmVnKGN4LCBjeDE4X3JlYWRfcmVnKGN4LCAweGM3MjAzMCkgJiB+MSwgMHhjNzIwMzApOwogCXJldHVybiBzaXplOwogfQogCiB2b2lkIGN4MThfaGFsdF9maXJtd2FyZShzdHJ1Y3QgY3gxOCAqY3gpCiB7CiAJQ1gxOF9ERUJVR19JTkZPKCJQcmVwYXJpbmcgZm9yIGZpcm13YXJlIGhhbHQuXG4iKTsKLQl3cml0ZV9yZWcoMHgwMDBGMDAwRiwgQ1gxOF9QUk9DX1NPRlRfUkVTRVQpOyAvKiBzdG9wIHRoZSBmdyAqLwotCXdyaXRlX3JlZygweDAwMDIwMDAyLCBDWDE4X0FERUNfQ09OVFJPTCk7CisJY3gxOF93cml0ZV9yZWcoY3gsIDB4MDAwRjAwMEYsIENYMThfUFJPQ19TT0ZUX1JFU0VUKTsgLyogc3RvcCB0aGUgZncgKi8KKwljeDE4X3dyaXRlX3JlZyhjeCwgMHgwMDAyMDAwMiwgQ1gxOF9BREVDX0NPTlRST0wpOwogfQogCiB2b2lkIGN4MThfaW5pdF9wb3dlcihzdHJ1Y3QgY3gxOCAqY3gsIGludCBsb3dwd3IpCiB7CiAJLyogcG93ZXItZG93biBTcGFyZSBhbmQgQU9NIFBMTHMgKi8KIAkvKiBwb3dlci11cCBmYXN0LCBzbG93IGFuZCBtcGVnIFBMTHMgKi8KLQl3cml0ZV9yZWcoMHgwMDAwMDAwOCwgQ1gxOF9QTExfUE9XRVJfRE9XTik7CisJY3gxOF93cml0ZV9yZWcoY3gsIDB4MDAwMDAwMDgsIENYMThfUExMX1BPV0VSX0RPV04pOwogCiAJLyogQURFQyBvdXQgb2Ygc2xlZXAgKi8KLQl3cml0ZV9yZWcoMHgwMDAyMDAwMCwgQ1gxOF9BREVDX0NPTlRST0wpOworCWN4MThfd3JpdGVfcmVnKGN4LCAweDAwMDIwMDAwLCBDWDE4X0FERUNfQ09OVFJPTCk7CiAKIAkvKiBUaGUgZmFzdCBjbG9jayBpcyBhdCAyMDAvMjQ1IE1IeiAqLwotCXdyaXRlX3JlZyhsb3dwd3IgPyAweEQgOiAweDExLCBDWDE4X0ZBU1RfQ0xPQ0tfUExMX0lOVCk7Ci0Jd3JpdGVfcmVnKGxvd3B3ciA/IDB4MUVGQkYzNyA6IDB4MDM4RTNENywgQ1gxOF9GQVNUX0NMT0NLX1BMTF9GUkFDKTsKKwljeDE4X3dyaXRlX3JlZyhjeCwgbG93cHdyID8gMHhEIDogMHgxMSwgQ1gxOF9GQVNUX0NMT0NLX1BMTF9JTlQpOworCWN4MThfd3JpdGVfcmVnKGN4LCBsb3dwd3IgPyAweDFFRkJGMzcgOiAweDAzOEUzRDcsCisJCQkJCQlDWDE4X0ZBU1RfQ0xPQ0tfUExMX0ZSQUMpOwogCi0Jd3JpdGVfcmVnKDIsIENYMThfRkFTVF9DTE9DS19QTExfUE9TVCk7Ci0Jd3JpdGVfcmVnKDEsIENYMThfRkFTVF9DTE9DS19QTExfUFJFU0NBTEUpOwotCXdyaXRlX3JlZyg0LCBDWDE4X0ZBU1RfQ0xPQ0tfUExMX0FESlVTVF9CQU5EV0lEVEgpOworCWN4MThfd3JpdGVfcmVnKGN4LCAyLCBDWDE4X0ZBU1RfQ0xPQ0tfUExMX1BPU1QpOworCWN4MThfd3JpdGVfcmVnKGN4LCAxLCBDWDE4X0ZBU1RfQ0xPQ0tfUExMX1BSRVNDQUxFKTsKKwljeDE4X3dyaXRlX3JlZyhjeCwgNCwgQ1gxOF9GQVNUX0NMT0NLX1BMTF9BREpVU1RfQkFORFdJRFRIKTsKIAogCS8qIHNldCBzbG93IGNsb2NrIHRvIDEyNS8xMjAgTUh6ICovCi0Jd3JpdGVfcmVnKGxvd3B3ciA/IDB4MTEgOiAweDEwLCBDWDE4X1NMT1dfQ0xPQ0tfUExMX0lOVCk7Ci0Jd3JpdGVfcmVnKGxvd3B3ciA/IDB4RUJBRjA1IDogMHgxODYxOEE4LCBDWDE4X1NMT1dfQ0xPQ0tfUExMX0ZSQUMpOwotCXdyaXRlX3JlZyg0LCBDWDE4X1NMT1dfQ0xPQ0tfUExMX1BPU1QpOworCWN4MThfd3JpdGVfcmVnKGN4LCBsb3dwd3IgPyAweDExIDogMHgxMCwgQ1gxOF9TTE9XX0NMT0NLX1BMTF9JTlQpOworCWN4MThfd3JpdGVfcmVnKGN4LCBsb3dwd3IgPyAweEVCQUYwNSA6IDB4MTg2MThBOCwKKwkJCQkJCUNYMThfU0xPV19DTE9DS19QTExfRlJBQyk7CisJY3gxOF93cml0ZV9yZWcoY3gsIDQsIENYMThfU0xPV19DTE9DS19QTExfUE9TVCk7CiAKIAkvKiBtcGVnIGNsb2NrIHBsbCA1NE1IeiAqLwotCXdyaXRlX3JlZygweEYsIENYMThfTVBFR19DTE9DS19QTExfSU5UKTsKLQl3cml0ZV9yZWcoMHgyQkNGRUYsIENYMThfTVBFR19DTE9DS19QTExfRlJBQyk7Ci0Jd3JpdGVfcmVnKDgsIENYMThfTVBFR19DTE9DS19QTExfUE9TVCk7CisJY3gxOF93cml0ZV9yZWcoY3gsIDB4RiwgQ1gxOF9NUEVHX0NMT0NLX1BMTF9JTlQpOworCWN4MThfd3JpdGVfcmVnKGN4LCAweDJCQ0ZFRiwgQ1gxOF9NUEVHX0NMT0NLX1BMTF9GUkFDKTsKKwljeDE4X3dyaXRlX3JlZyhjeCwgOCwgQ1gxOF9NUEVHX0NMT0NLX1BMTF9QT1NUKTsKIAogCS8qIERlZmF1bHRzICovCiAJLyogQVBVID0gU0Mgb3IgU0MvMiA9IDEyNS82Mi41ICovCkBAIC0yNDIsODEgKzI0OCw4NCBAQAogCS8qIFZGQyA9IGRpc2FibGVkICovCiAJLyogVVNCID0gZGlzYWJsZWQgKi8KIAotCXdyaXRlX3JlZyhsb3dwd3IgPyAweEZGRkYwMDIwIDogMHgwMDA2MDAwNCwgQ1gxOF9DTE9DS19TRUxFQ1QxKTsKLQl3cml0ZV9yZWcobG93cHdyID8gMHhGRkZGMDAwNCA6IDB4MDAwNjAwMDYsIENYMThfQ0xPQ0tfU0VMRUNUMik7CisJY3gxOF93cml0ZV9yZWcoY3gsIGxvd3B3ciA/IDB4RkZGRjAwMjAgOiAweDAwMDYwMDA0LAorCQkJCQkJCUNYMThfQ0xPQ0tfU0VMRUNUMSk7CisJY3gxOF93cml0ZV9yZWcoY3gsIGxvd3B3ciA/IDB4RkZGRjAwMDQgOiAweDAwMDYwMDA2LAorCQkJCQkJCUNYMThfQ0xPQ0tfU0VMRUNUMik7CiAKLQl3cml0ZV9yZWcoMHhGRkZGMDAwMiwgQ1gxOF9IQUxGX0NMT0NLX1NFTEVDVDEpOwotCXdyaXRlX3JlZygweEZGRkYwMTA0LCBDWDE4X0hBTEZfQ0xPQ0tfU0VMRUNUMik7CisJY3gxOF93cml0ZV9yZWcoY3gsIDB4RkZGRjAwMDIsIENYMThfSEFMRl9DTE9DS19TRUxFQ1QxKTsKKwljeDE4X3dyaXRlX3JlZyhjeCwgMHhGRkZGMDEwNCwgQ1gxOF9IQUxGX0NMT0NLX1NFTEVDVDIpOwogCi0Jd3JpdGVfcmVnKDB4RkZGRjkwMjYsIENYMThfQ0xPQ0tfRU5BQkxFMSk7Ci0Jd3JpdGVfcmVnKDB4RkZGRjMxMDUsIENYMThfQ0xPQ0tfRU5BQkxFMik7CisJY3gxOF93cml0ZV9yZWcoY3gsIDB4RkZGRjkwMjYsIENYMThfQ0xPQ0tfRU5BQkxFMSk7CisJY3gxOF93cml0ZV9yZWcoY3gsIDB4RkZGRjMxMDUsIENYMThfQ0xPQ0tfRU5BQkxFMik7CiB9CiAKIHZvaWQgY3gxOF9pbml0X21lbW9yeShzdHJ1Y3QgY3gxOCAqY3gpCiB7CiAJY3gxOF9tc2xlZXBfdGltZW91dCgxMCwgMCk7Ci0Jd3JpdGVfcmVnKDB4MTAwMDAsIENYMThfRERSX1NPRlRfUkVTRVQpOworCWN4MThfd3JpdGVfcmVnKGN4LCAweDEwMDAwLCBDWDE4X0REUl9TT0ZUX1JFU0VUKTsKIAljeDE4X21zbGVlcF90aW1lb3V0KDEwLCAwKTsKIAotCXdyaXRlX3JlZyhjeC0+Y2FyZC0+ZGRyLmNoaXBfY29uZmlnLCBDWDE4X0REUl9DSElQX0NPTkZJRyk7CisJY3gxOF93cml0ZV9yZWcoY3gsIGN4LT5jYXJkLT5kZHIuY2hpcF9jb25maWcsIENYMThfRERSX0NISVBfQ09ORklHKTsKIAogCWN4MThfbXNsZWVwX3RpbWVvdXQoMTAsIDApOwogCi0Jd3JpdGVfcmVnKGN4LT5jYXJkLT5kZHIucmVmcmVzaCwgQ1gxOF9ERFJfUkVGUkVTSCk7Ci0Jd3JpdGVfcmVnKGN4LT5jYXJkLT5kZHIudGltaW5nMSwgQ1gxOF9ERFJfVElNSU5HMSk7Ci0Jd3JpdGVfcmVnKGN4LT5jYXJkLT5kZHIudGltaW5nMiwgQ1gxOF9ERFJfVElNSU5HMik7CisJY3gxOF93cml0ZV9yZWcoY3gsIGN4LT5jYXJkLT5kZHIucmVmcmVzaCwgQ1gxOF9ERFJfUkVGUkVTSCk7CisJY3gxOF93cml0ZV9yZWcoY3gsIGN4LT5jYXJkLT5kZHIudGltaW5nMSwgQ1gxOF9ERFJfVElNSU5HMSk7CisJY3gxOF93cml0ZV9yZWcoY3gsIGN4LT5jYXJkLT5kZHIudGltaW5nMiwgQ1gxOF9ERFJfVElNSU5HMik7CiAKIAljeDE4X21zbGVlcF90aW1lb3V0KDEwLCAwKTsKIAogCS8qIEluaXRpYWxpemUgRFFTIHBhZCB0aW1lICovCi0Jd3JpdGVfcmVnKGN4LT5jYXJkLT5kZHIudHVuZV9sYW5lLCBDWDE4X0REUl9UVU5FX0xBTkUpOwotCXdyaXRlX3JlZyhjeC0+Y2FyZC0+ZGRyLmluaXRpYWxfZW1ycywgQ1gxOF9ERFJfSU5JVElBTF9FTVJTKTsKKwljeDE4X3dyaXRlX3JlZyhjeCwgY3gtPmNhcmQtPmRkci50dW5lX2xhbmUsIENYMThfRERSX1RVTkVfTEFORSk7CisJY3gxOF93cml0ZV9yZWcoY3gsIGN4LT5jYXJkLT5kZHIuaW5pdGlhbF9lbXJzLCBDWDE4X0REUl9JTklUSUFMX0VNUlMpOwogCiAJY3gxOF9tc2xlZXBfdGltZW91dCgxMCwgMCk7CiAKLQl3cml0ZV9yZWcoMHgyMDAwMCwgQ1gxOF9ERFJfU09GVF9SRVNFVCk7CisJY3gxOF93cml0ZV9yZWcoY3gsIDB4MjAwMDAsIENYMThfRERSX1NPRlRfUkVTRVQpOwogCWN4MThfbXNsZWVwX3RpbWVvdXQoMTAsIDApOwogCiAJLyogdXNlIHBvd2VyLWRvd24gbW9kZSB3aGVuIGlkbGUgKi8KLQl3cml0ZV9yZWcoMHgwMDAwMDAxMCwgQ1gxOF9ERFJfUE9XRVJfUkVHKTsKKwljeDE4X3dyaXRlX3JlZyhjeCwgMHgwMDAwMDAxMCwgQ1gxOF9ERFJfUE9XRVJfUkVHKTsKIAotCXdyaXRlX3JlZygweDEwMDAxLCBDWDE4X1JFR19CVVNfVElNRU9VVF9FTik7CisJY3gxOF93cml0ZV9yZWcoY3gsIDB4MTAwMDEsIENYMThfUkVHX0JVU19USU1FT1VUX0VOKTsKIAotCXdyaXRlX3JlZygweDQ4LCBDWDE4X0REUl9NQl9QRVJfUk9XXzcpOwotCXdyaXRlX3JlZygweEUwMDAwLCBDWDE4X0REUl9CQVNFXzYzX0FERFIpOworCWN4MThfd3JpdGVfcmVnKGN4LCAweDQ4LCBDWDE4X0REUl9NQl9QRVJfUk9XXzcpOworCWN4MThfd3JpdGVfcmVnKGN4LCAweEUwMDAwLCBDWDE4X0REUl9CQVNFXzYzX0FERFIpOwogCi0Jd3JpdGVfcmVnKDB4MDAwMDAxMDEsIENYMThfV01CX0NMSUVOVDAyKTsgIC8qIEFPICovCi0Jd3JpdGVfcmVnKDB4MDAwMDAxMDEsIENYMThfV01CX0NMSUVOVDA5KTsgIC8qIEFJMiAqLwotCXdyaXRlX3JlZygweDAwMDAwMTAxLCBDWDE4X1dNQl9DTElFTlQwNSk7ICAvKiBWSU0xICovCi0Jd3JpdGVfcmVnKDB4MDAwMDAxMDEsIENYMThfV01CX0NMSUVOVDA2KTsgIC8qIEFJMSAqLwotCXdyaXRlX3JlZygweDAwMDAwMTAxLCBDWDE4X1dNQl9DTElFTlQwNyk7ICAvKiAzRCBjb21iICovCi0Jd3JpdGVfcmVnKDB4MDAwMDAxMDEsIENYMThfV01CX0NMSUVOVDEwKTsgIC8qIE1FICovCi0Jd3JpdGVfcmVnKDB4MDAwMDAxMDEsIENYMThfV01CX0NMSUVOVDEyKTsgIC8qIEVOQyAqLwotCXdyaXRlX3JlZygweDAwMDAwMTAxLCBDWDE4X1dNQl9DTElFTlQxMyk7ICAvKiBQSyAqLwotCXdyaXRlX3JlZygweDAwMDAwMTAxLCBDWDE4X1dNQl9DTElFTlQxMSk7ICAvKiBSQyAqLwotCXdyaXRlX3JlZygweDAwMDAwMTAxLCBDWDE4X1dNQl9DTElFTlQxNCk7ICAvKiBBVk8gKi8KKwljeDE4X3dyaXRlX3JlZyhjeCwgMHgwMDAwMDEwMSwgQ1gxOF9XTUJfQ0xJRU5UMDIpOyAgLyogQU8gKi8KKwljeDE4X3dyaXRlX3JlZyhjeCwgMHgwMDAwMDEwMSwgQ1gxOF9XTUJfQ0xJRU5UMDkpOyAgLyogQUkyICovCisJY3gxOF93cml0ZV9yZWcoY3gsIDB4MDAwMDAxMDEsIENYMThfV01CX0NMSUVOVDA1KTsgIC8qIFZJTTEgKi8KKwljeDE4X3dyaXRlX3JlZyhjeCwgMHgwMDAwMDEwMSwgQ1gxOF9XTUJfQ0xJRU5UMDYpOyAgLyogQUkxICovCisJY3gxOF93cml0ZV9yZWcoY3gsIDB4MDAwMDAxMDEsIENYMThfV01CX0NMSUVOVDA3KTsgIC8qIDNEIGNvbWIgKi8KKwljeDE4X3dyaXRlX3JlZyhjeCwgMHgwMDAwMDEwMSwgQ1gxOF9XTUJfQ0xJRU5UMTApOyAgLyogTUUgKi8KKwljeDE4X3dyaXRlX3JlZyhjeCwgMHgwMDAwMDEwMSwgQ1gxOF9XTUJfQ0xJRU5UMTIpOyAgLyogRU5DICovCisJY3gxOF93cml0ZV9yZWcoY3gsIDB4MDAwMDAxMDEsIENYMThfV01CX0NMSUVOVDEzKTsgIC8qIFBLICovCisJY3gxOF93cml0ZV9yZWcoY3gsIDB4MDAwMDAxMDEsIENYMThfV01CX0NMSUVOVDExKTsgIC8qIFJDICovCisJY3gxOF93cml0ZV9yZWcoY3gsIDB4MDAwMDAxMDEsIENYMThfV01CX0NMSUVOVDE0KTsgIC8qIEFWTyAqLwogfQogCiBpbnQgY3gxOF9maXJtd2FyZV9pbml0KHN0cnVjdCBjeDE4ICpjeCkKIHsKIAkvKiBBbGxvdyBjaGlwIHRvIGNvbnRyb2wgQ0xLUlVOICovCi0Jd3JpdGVfcmVnKDB4NSwgQ1gxOF9EU1AwX0lOVEVSUlVQVF9NQVNLKTsKKwljeDE4X3dyaXRlX3JlZyhjeCwgMHg1LCBDWDE4X0RTUDBfSU5URVJSVVBUX01BU0spOwogCi0Jd3JpdGVfcmVnKDB4MDAwRjAwMEYsIENYMThfUFJPQ19TT0ZUX1JFU0VUKTsgLyogc3RvcCB0aGUgZncgKi8KKwljeDE4X3dyaXRlX3JlZyhjeCwgMHgwMDBGMDAwRiwgQ1gxOF9QUk9DX1NPRlRfUkVTRVQpOyAvKiBzdG9wIHRoZSBmdyAqLwogCiAJY3gxOF9tc2xlZXBfdGltZW91dCgxLCAwKTsKIAotCXN3MV9pcnFfZW5hYmxlKElSUV9DUFVfVE9fRVBVIHwgSVJRX0FQVV9UT19FUFUpOwotCXN3Ml9pcnFfZW5hYmxlKElSUV9DUFVfVE9fRVBVX0FDSyB8IElSUV9BUFVfVE9fRVBVX0FDSyk7CisJY3gxOF9zdzFfaXJxX2VuYWJsZShjeCwgSVJRX0NQVV9UT19FUFUgfCBJUlFfQVBVX1RPX0VQVSk7CisJY3gxOF9zdzJfaXJxX2VuYWJsZShjeCwgSVJRX0NQVV9UT19FUFVfQUNLIHwgSVJRX0FQVV9UT19FUFVfQUNLKTsKIAogCS8qIE9ubHkgaWYgdGhlIHByb2Nlc3NvciBpcyBub3QgcnVubmluZyAqLwotCWlmIChyZWFkX3JlZyhDWDE4X1BST0NfU09GVF9SRVNFVCkgJiA4KSB7CisJaWYgKGN4MThfcmVhZF9yZWcoY3gsIENYMThfUFJPQ19TT0ZUX1JFU0VUKSAmIDgpIHsKIAkJaW50IHN6ID0gbG9hZF9hcHVfZndfZGlyZWN0KCJ2NGwtY3gyMzQxOC1hcHUuZnciLAogCQkJICAgICAgIGN4LT5lbmNfbWVtLCBjeCk7CiAKLQkJd3JpdGVfZW5jKDB4RTUxRkYwMDQsIDApOwotCQl3cml0ZV9lbmMoMHhhMDAwMDAsIDQpOyAgLyogdG9kbzogbm90IGhhcmRjb2RlZCAqLwotCQl3cml0ZV9yZWcoMHgwMDAxMDAwMCwgQ1gxOF9QUk9DX1NPRlRfUkVTRVQpOyAvKiBTdGFydCBBUFUgKi8KKwkJY3gxOF93cml0ZV9lbmMoY3gsIDB4RTUxRkYwMDQsIDApOworCQljeDE4X3dyaXRlX2VuYyhjeCwgMHhhMDAwMDAsIDQpOyAgLyogdG9kbzogbm90IGhhcmRjb2RlZCAqLworCQkvKiBTdGFydCBBUFUgKi8KKwkJY3gxOF93cml0ZV9yZWcoY3gsIDB4MDAwMTAwMDAsIENYMThfUFJPQ19TT0ZUX1JFU0VUKTsKIAkJY3gxOF9tc2xlZXBfdGltZW91dCg1MDAsIDApOwogCiAJCXN6ID0gc3ogPD0gMCA/IHN6IDogbG9hZF9jcHVfZndfZGlyZWN0KCJ2NGwtY3gyMzQxOC1jcHUuZnciLApAQCAtMzI2LDkgKzMzNSwxMCBAQAogCQkJaW50IHJldHJpZXMgPSAwOwogCiAJCQkvKiBzdGFydCB0aGUgQ1BVICovCi0JCQl3cml0ZV9yZWcoMHgwMDA4MDAwMCwgQ1gxOF9QUk9DX1NPRlRfUkVTRVQpOworCQkJY3gxOF93cml0ZV9yZWcoY3gsIDB4MDAwODAwMDAsIENYMThfUFJPQ19TT0ZUX1JFU0VUKTsKIAkJCXdoaWxlIChyZXRyaWVzKysgPCA1MCkgeyAvKiBMb29wIGZvciBtYXggNTAwbVMgKi8KLQkJCQlpZiAoKHJlYWRfcmVnKENYMThfUFJPQ19TT0ZUX1JFU0VUKSAmIDEpID09IDApCisJCQkJaWYgKChjeDE4X3JlYWRfcmVnKGN4LCBDWDE4X1BST0NfU09GVF9SRVNFVCkKKwkJCQkgICAgICYgMSkgPT0gMCkKIAkJCQkJYnJlYWs7CiAJCQkJY3gxOF9tc2xlZXBfdGltZW91dCgxMCwgMCk7CiAJCQl9CkBAIC0zNDIsNiArMzUyLDYgQEAKIAkJCXJldHVybiAtRUlPOwogCX0KIAkvKiBpbml0aWFsaXplIEdQSU8gKi8KLQl3cml0ZV9yZWcoMHgxNDAwMTQwMCwgMHhDNzgxMTApOworCWN4MThfd3JpdGVfcmVnKGN4LCAweDE0MDAxNDAwLCAweEM3ODExMCk7CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1ncGlvLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1ncGlvLmMKaW5kZXggM2Q0OTVkYi4uMGU1NjA0MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtZ3Bpby5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWdwaW8uYwpAQCAtMjIsNiArMjIsNyBAQAogICovCiAKICNpbmNsdWRlICJjeDE4LWRyaXZlci5oIgorI2luY2x1ZGUgImN4MTgtaW8uaCIKICNpbmNsdWRlICJjeDE4LWNhcmRzLmgiCiAjaW5jbHVkZSAiY3gxOC1ncGlvLmgiCiAjaW5jbHVkZSAidHVuZXIteGMyMDI4LmgiCkBAIC00OSwxMSArNTAsMTEgQEAKIAl1MzIgZGlyID0gY3gtPmdwaW9fZGlyOwogCXUzMiB2YWwgPSBjeC0+Z3Bpb192YWw7CiAKLQl3cml0ZV9yZWcoKGRpciAmIDB4ZmZmZikgPDwgMTYsIENYMThfUkVHX0dQSU9fRElSMSk7Ci0Jd3JpdGVfcmVnKCgoZGlyICYgMHhmZmZmKSA8PCAxNikgfCAodmFsICYgMHhmZmZmKSwKKwljeDE4X3dyaXRlX3JlZyhjeCwgKGRpciAmIDB4ZmZmZikgPDwgMTYsIENYMThfUkVHX0dQSU9fRElSMSk7CisJY3gxOF93cml0ZV9yZWcoY3gsICgoZGlyICYgMHhmZmZmKSA8PCAxNikgfCAodmFsICYgMHhmZmZmKSwKIAkJCUNYMThfUkVHX0dQSU9fT1VUMSk7Ci0Jd3JpdGVfcmVnKGRpciAmIDB4ZmZmZjAwMDAsIENYMThfUkVHX0dQSU9fRElSMik7Ci0Jd3JpdGVfcmVnX3N5bmMoKGRpciAmIDB4ZmZmZjAwMDApIHwgKCh2YWwgJiAweGZmZmYwMDAwKSA+PiAxNiksCisJY3gxOF93cml0ZV9yZWcoY3gsIGRpciAmIDB4ZmZmZjAwMDAsIENYMThfUkVHX0dQSU9fRElSMik7CisJY3gxOF93cml0ZV9yZWdfc3luYyhjeCwgKGRpciAmIDB4ZmZmZjAwMDApIHwgKCh2YWwgJiAweGZmZmYwMDAwKSA+PiAxNiksCiAJCQlDWDE4X1JFR19HUElPX09VVDIpOwogfQogCkBAIC0xNDEsMTUgKzE0MiwxNyBAQAogCX0KIAogCUNYMThfREVCVUdfSU5GTygiR1BJTyBpbml0aWFsIGRpcjogJTA4eC8lMDh4IG91dDogJTA4eC8lMDh4XG4iLAotCQkgICByZWFkX3JlZyhDWDE4X1JFR19HUElPX0RJUjEpLCByZWFkX3JlZyhDWDE4X1JFR19HUElPX0RJUjIpLAotCQkgICByZWFkX3JlZyhDWDE4X1JFR19HUElPX09VVDEpLCByZWFkX3JlZyhDWDE4X1JFR19HUElPX09VVDIpKTsKKwkJCWN4MThfcmVhZF9yZWcoY3gsIENYMThfUkVHX0dQSU9fRElSMSksCisJCQljeDE4X3JlYWRfcmVnKGN4LCBDWDE4X1JFR19HUElPX0RJUjIpLAorCQkJY3gxOF9yZWFkX3JlZyhjeCwgQ1gxOF9SRUdfR1BJT19PVVQxKSwKKwkJCWN4MThfcmVhZF9yZWcoY3gsIENYMThfUkVHX0dQSU9fT1VUMikpOwogCiAJZ3Bpb193cml0ZShjeCk7CiAJbXV0ZXhfdW5sb2NrKCZjeC0+Z3Bpb19sb2NrKTsKIH0KIAogLyogWGNlaXZlIHR1bmVyIHJlc2V0IGZ1bmN0aW9uICovCi1pbnQgY3gxOF9yZXNldF90dW5lcl9ncGlvKHZvaWQgKmRldiwgaW50IGNtZCwgaW50IHZhbHVlKQoraW50IGN4MThfcmVzZXRfdHVuZXJfZ3Bpbyh2b2lkICpkZXYsIGludCBjb21wb25lbnQsIGludCBjbWQsIGludCB2YWx1ZSkKIHsKIAlzdHJ1Y3QgaTJjX2FsZ29fYml0X2RhdGEgKmFsZ28gPSBkZXY7CiAJc3RydWN0IGN4MThfaTJjX2FsZ29fY2FsbGJhY2tfZGF0YSAqY2JfZGF0YSA9IGFsZ28tPmRhdGE7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1ncGlvLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1ncGlvLmgKaW5kZXggMjJjZDdkZC4uYmViNzQyNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtZ3Bpby5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWdwaW8uaApAQCAtMjMsNSArMjMsNSBAQAogdm9pZCBjeDE4X2dwaW9faW5pdChzdHJ1Y3QgY3gxOCAqY3gpOwogdm9pZCBjeDE4X3Jlc2V0X2kyY19zbGF2ZXNfZ3BpbyhzdHJ1Y3QgY3gxOCAqY3gpOwogdm9pZCBjeDE4X3Jlc2V0X2lyX2dwaW8odm9pZCAqZGF0YSk7Ci1pbnQgY3gxOF9yZXNldF90dW5lcl9ncGlvKHZvaWQgKmRldiwgaW50IGNtZCwgaW50IHZhbHVlKTsKK2ludCBjeDE4X3Jlc2V0X3R1bmVyX2dwaW8odm9pZCAqZGV2LCBpbnQgY29tcG9uZW50LCBpbnQgY21kLCBpbnQgdmFsdWUpOwogaW50IGN4MThfZ3BpbyhzdHJ1Y3QgY3gxOCAqY3gsIHVuc2lnbmVkIGludCBjb21tYW5kLCB2b2lkICphcmcpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtaTJjLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1pMmMuYwppbmRleCA2MDIzYmEzLi5hYTA5ZTU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1pMmMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1pMmMuYwpAQCAtMjIsMTMgKzIyLDEyIEBACiAgKi8KIAogI2luY2x1ZGUgImN4MTgtZHJpdmVyLmgiCisjaW5jbHVkZSAiY3gxOC1pby5oIgogI2luY2x1ZGUgImN4MTgtY2FyZHMuaCIKICNpbmNsdWRlICJjeDE4LWdwaW8uaCIKICNpbmNsdWRlICJjeDE4LWF2LWNvcmUuaCIKICNpbmNsdWRlICJjeDE4LWkyYy5oIgogCi0jaW5jbHVkZSA8bWVkaWEvaXIta2JkLWkyYy5oPgotCiAjZGVmaW5lIENYMThfUkVHX0kyQ18xX1dSICAgMHhmMTUwMDAKICNkZWZpbmUgQ1gxOF9SRUdfSTJDXzFfUkQgICAweGYxNTAwOAogI2RlZmluZSBDWDE4X1JFR19JMkNfMl9XUiAgIDB4ZjI1MTAwCkBAIC0xNTgsMTIgKzE1NywxMiBAQAogCXN0cnVjdCBjeDE4ICpjeCA9ICgoc3RydWN0IGN4MThfaTJjX2FsZ29fY2FsbGJhY2tfZGF0YSAqKWRhdGEpLT5jeDsKIAlpbnQgYnVzX2luZGV4ID0gKChzdHJ1Y3QgY3gxOF9pMmNfYWxnb19jYWxsYmFja19kYXRhICopZGF0YSktPmJ1c19pbmRleDsKIAl1MzIgYWRkciA9IGJ1c19pbmRleCA/IENYMThfUkVHX0kyQ18yX1dSIDogQ1gxOF9SRUdfSTJDXzFfV1I7Ci0JdTMyIHIgPSByZWFkX3JlZyhhZGRyKTsKKwl1MzIgciA9IGN4MThfcmVhZF9yZWcoY3gsIGFkZHIpOwogCiAJaWYgKHN0YXRlKQotCQl3cml0ZV9yZWdfc3luYyhyIHwgU0VUU0NMX0JJVCwgYWRkcik7CisJCWN4MThfd3JpdGVfcmVnX3N5bmMoY3gsIHIgfCBTRVRTQ0xfQklULCBhZGRyKTsKIAllbHNlCi0JCXdyaXRlX3JlZ19zeW5jKHIgJiB+U0VUU0NMX0JJVCwgYWRkcik7CisJCWN4MThfd3JpdGVfcmVnX3N5bmMoY3gsIHIgJiB+U0VUU0NMX0JJVCwgYWRkcik7CiB9CiAKIHN0YXRpYyB2b2lkIGN4MThfc2V0c2RhKHZvaWQgKmRhdGEsIGludCBzdGF0ZSkKQEAgLTE3MSwxMiArMTcwLDEyIEBACiAJc3RydWN0IGN4MTggKmN4ID0gKChzdHJ1Y3QgY3gxOF9pMmNfYWxnb19jYWxsYmFja19kYXRhICopZGF0YSktPmN4OwogCWludCBidXNfaW5kZXggPSAoKHN0cnVjdCBjeDE4X2kyY19hbGdvX2NhbGxiYWNrX2RhdGEgKilkYXRhKS0+YnVzX2luZGV4OwogCXUzMiBhZGRyID0gYnVzX2luZGV4ID8gQ1gxOF9SRUdfSTJDXzJfV1IgOiBDWDE4X1JFR19JMkNfMV9XUjsKLQl1MzIgciA9IHJlYWRfcmVnKGFkZHIpOworCXUzMiByID0gY3gxOF9yZWFkX3JlZyhjeCwgYWRkcik7CiAKIAlpZiAoc3RhdGUpCi0JCXdyaXRlX3JlZ19zeW5jKHIgfCBTRVRTRExfQklULCBhZGRyKTsKKwkJY3gxOF93cml0ZV9yZWdfc3luYyhjeCwgciB8IFNFVFNETF9CSVQsIGFkZHIpOwogCWVsc2UKLQkJd3JpdGVfcmVnX3N5bmMociAmIH5TRVRTRExfQklULCBhZGRyKTsKKwkJY3gxOF93cml0ZV9yZWdfc3luYyhjeCwgciAmIH5TRVRTRExfQklULCBhZGRyKTsKIH0KIAogc3RhdGljIGludCBjeDE4X2dldHNjbCh2b2lkICpkYXRhKQpAQCAtMTg1LDcgKzE4NCw3IEBACiAJaW50IGJ1c19pbmRleCA9ICgoc3RydWN0IGN4MThfaTJjX2FsZ29fY2FsbGJhY2tfZGF0YSAqKWRhdGEpLT5idXNfaW5kZXg7CiAJdTMyIGFkZHIgPSBidXNfaW5kZXggPyBDWDE4X1JFR19JMkNfMl9SRCA6IENYMThfUkVHX0kyQ18xX1JEOwogCi0JcmV0dXJuIHJlYWRfcmVnKGFkZHIpICYgR0VUU0NMX0JJVDsKKwlyZXR1cm4gY3gxOF9yZWFkX3JlZyhjeCwgYWRkcikgJiBHRVRTQ0xfQklUOwogfQogCiBzdGF0aWMgaW50IGN4MThfZ2V0c2RhKHZvaWQgKmRhdGEpCkBAIC0xOTQsNyArMTkzLDcgQEAKIAlpbnQgYnVzX2luZGV4ID0gKChzdHJ1Y3QgY3gxOF9pMmNfYWxnb19jYWxsYmFja19kYXRhICopZGF0YSktPmJ1c19pbmRleDsKIAl1MzIgYWRkciA9IGJ1c19pbmRleCA/IENYMThfUkVHX0kyQ18yX1JEIDogQ1gxOF9SRUdfSTJDXzFfUkQ7CiAKLQlyZXR1cm4gcmVhZF9yZWcoYWRkcikgJiBHRVRTRExfQklUOworCXJldHVybiBjeDE4X3JlYWRfcmVnKGN4LCBhZGRyKSAmIEdFVFNETF9CSVQ7CiB9CiAKIC8qIHRlbXBsYXRlIGZvciBpMmMtYml0LWFsZ28gKi8KQEAgLTM5NCwyOSArMzkzLDMzIEBACiAJCWN4LT5pMmNfYWRhcFtpXS5kZXYucGFyZW50ID0gJmN4LT5kZXYtPmRldjsKIAl9CiAKLQlpZiAocmVhZF9yZWcoQ1gxOF9SRUdfSTJDXzJfV1IpICE9IDB4MDAwM2MwMmYpIHsKKwlpZiAoY3gxOF9yZWFkX3JlZyhjeCwgQ1gxOF9SRUdfSTJDXzJfV1IpICE9IDB4MDAwM2MwMmYpIHsKIAkJLyogUmVzZXQvVW5yZXNldCBJMkMgaGFyZHdhcmUgYmxvY2sgKi8KLQkJd3JpdGVfcmVnKDB4MTAwMDAwMDAsIDB4YzcxMDA0KTsgLyogQ2xvY2sgc2VsZWN0IDIyME1IeiAqLwotCQl3cml0ZV9yZWdfc3luYygweDEwMDAxMDAwLCAweGM3MTAyNCk7IC8qIENsb2NrIEVuYWJsZSAqLworCQkvKiBDbG9jayBzZWxlY3QgMjIwTUh6ICovCisJCWN4MThfd3JpdGVfcmVnKGN4LCAweDEwMDAwMDAwLCAweGM3MTAwNCk7CisJCS8qIENsb2NrIEVuYWJsZSAqLworCQljeDE4X3dyaXRlX3JlZ19zeW5jKGN4LCAweDEwMDAxMDAwLCAweGM3MTAyNCk7CiAJfQogCS8qIGNvdXJ0ZXN5IG9mIFN0ZXZlbiBUb3RoIDxzdG90aEBoYXVwcGF1Z2UuY29tPiAqLwotCXdyaXRlX3JlZ19zeW5jKDB4MDBjMDAwMDAsIDB4YzcwMDFjKTsKKwljeDE4X3dyaXRlX3JlZ19zeW5jKGN4LCAweDAwYzAwMDAwLCAweGM3MDAxYyk7CiAJbWRlbGF5KDEwKTsKLQl3cml0ZV9yZWdfc3luYygweDAwYzAwMGMwLCAweGM3MDAxYyk7CisJY3gxOF93cml0ZV9yZWdfc3luYyhjeCwgMHgwMGMwMDBjMCwgMHhjNzAwMWMpOwogCW1kZWxheSgxMCk7Ci0Jd3JpdGVfcmVnX3N5bmMoMHgwMGMwMDAwMCwgMHhjNzAwMWMpOworCWN4MThfd3JpdGVfcmVnX3N5bmMoY3gsIDB4MDBjMDAwMDAsIDB4YzcwMDFjKTsKIAltZGVsYXkoMTApOwogCi0Jd3JpdGVfcmVnX3N5bmMoMHgwMGMwMDAwMCwgMHhjNzMwYzgpOyAvKiBTZXQgdG8gZWRnZS10cmlnZ2VyZWQgaW50cnMuICovCi0Jd3JpdGVfcmVnX3N5bmMoMHgwMGMwMDAwMCwgMHhjNzMwYzQpOyAvKiBDbGVhciBhbnkgc3RhbGUgaW50cnMgKi8KKwkvKiBTZXQgdG8gZWRnZS10cmlnZ2VyZWQgaW50cnMuICovCisJY3gxOF93cml0ZV9yZWdfc3luYyhjeCwgMHgwMGMwMDAwMCwgMHhjNzMwYzgpOworCS8qIENsZWFyIGFueSBzdGFsZSBpbnRycyAqLworCWN4MThfd3JpdGVfcmVnX3N5bmMoY3gsIDB4MDBjMDAwMDAsIDB4YzczMGM0KTsKIAogCS8qIEh3IEkyQzEgQ2xvY2sgRnJlcSB+MTAwa0h6ICovCi0Jd3JpdGVfcmVnX3N5bmMoMHgwMDAyMWMwZiAmIH40LCBDWDE4X1JFR19JMkNfMV9XUik7CisJY3gxOF93cml0ZV9yZWdfc3luYyhjeCwgMHgwMDAyMWMwZiAmIH40LCBDWDE4X1JFR19JMkNfMV9XUik7CiAJY3gxOF9zZXRzY2woJmN4LT5pMmNfYWxnb19jYl9kYXRhWzBdLCAxKTsKIAljeDE4X3NldHNkYSgmY3gtPmkyY19hbGdvX2NiX2RhdGFbMF0sIDEpOwogCiAJLyogSHcgSTJDMiBDbG9jayBGcmVxIH4xMDBrSHogKi8KLQl3cml0ZV9yZWdfc3luYygweDAwMDIxYzBmICYgfjQsIENYMThfUkVHX0kyQ18yX1dSKTsKKwljeDE4X3dyaXRlX3JlZ19zeW5jKGN4LCAweDAwMDIxYzBmICYgfjQsIENYMThfUkVHX0kyQ18yX1dSKTsKIAljeDE4X3NldHNjbCgmY3gtPmkyY19hbGdvX2NiX2RhdGFbMV0sIDEpOwogCWN4MThfc2V0c2RhKCZjeC0+aTJjX2FsZ29fY2JfZGF0YVsxXSwgMSk7CiAKQEAgLTQzMCw4ICs0MzMsMTAgQEAKIHsKIAlpbnQgaTsKIAlDWDE4X0RFQlVHX0kyQygiaTJjIGV4aXRcbiIpOwotCXdyaXRlX3JlZyhyZWFkX3JlZyhDWDE4X1JFR19JMkNfMV9XUikgfCA0LCBDWDE4X1JFR19JMkNfMV9XUik7Ci0Jd3JpdGVfcmVnKHJlYWRfcmVnKENYMThfUkVHX0kyQ18yX1dSKSB8IDQsIENYMThfUkVHX0kyQ18yX1dSKTsKKwljeDE4X3dyaXRlX3JlZyhjeCwgY3gxOF9yZWFkX3JlZyhjeCwgQ1gxOF9SRUdfSTJDXzFfV1IpIHwgNCwKKwkJCQkJCQlDWDE4X1JFR19JMkNfMV9XUik7CisJY3gxOF93cml0ZV9yZWcoY3gsIGN4MThfcmVhZF9yZWcoY3gsIENYMThfUkVHX0kyQ18yX1dSKSB8IDQsCisJCQkJCQkJQ1gxOF9SRUdfSTJDXzJfV1IpOwogCiAJZm9yIChpID0gMDsgaSA8IDI7IGkrKykgewogCQlpMmNfZGVsX2FkYXB0ZXIoJmN4LT5pMmNfYWRhcFtpXSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1pby5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtaW8uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MDBhYjk0Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtaW8uYwpAQCAtMCwwICsxLDI1NCBAQAorLyoKKyAqICBjeDE4IGRyaXZlciBQQ0kgbWVtb3J5IG1hcHBlZCBJTyBhY2Nlc3Mgcm91dGluZXMKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA3ICBIYW5zIFZlcmt1aWwgPGh2ZXJrdWlsQHhzNGFsbC5ubD4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDggIEFuZHkgV2FsbHMgPGF3YWxsc0ByYWRpeC5uZXQ+CisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQQorICogIDAyMTExLTEzMDcgIFVTQQorICovCisKKyNpbmNsdWRlICJjeDE4LWRyaXZlci5oIgorI2luY2x1ZGUgImN4MTgtaW8uaCIKKyNpbmNsdWRlICJjeDE4LWlycS5oIgorCit2b2lkIGN4MThfbG9nX3N0YXRpc3RpY3Moc3RydWN0IGN4MTggKmN4KQoreworCWludCBpOworCisJaWYgKCEoY3gxOF9kZWJ1ZyAmIENYMThfREJHRkxHX0lORk8pKQorCQlyZXR1cm47CisKKwlmb3IgKGkgPSAwOyBpIDw9IENYMThfTUFYX01NSU9fUkVUUklFUzsgaSsrKQorCQlDWDE4X0RFQlVHX0lORk8oInJldHJpZWRfd3JpdGVbJWRdID0gJWRcbiIsIGksCisJCQkJYXRvbWljX3JlYWQoJmN4LT5tbWlvX3N0YXRzLnJldHJpZWRfd3JpdGVbaV0pKTsKKwlmb3IgKGkgPSAwOyBpIDw9IENYMThfTUFYX01NSU9fUkVUUklFUzsgaSsrKQorCQlDWDE4X0RFQlVHX0lORk8oInJldHJpZWRfcmVhZFslZF0gPSAlZFxuIiwgaSwKKwkJCQlhdG9taWNfcmVhZCgmY3gtPm1taW9fc3RhdHMucmV0cmllZF9yZWFkW2ldKSk7CisJcmV0dXJuOworfQorCit2b2lkIGN4MThfcmF3X3dyaXRlbF9yZXRyeShzdHJ1Y3QgY3gxOCAqY3gsIHUzMiB2YWwsIHZvaWQgX19pb21lbSAqYWRkcikKK3sKKwlpbnQgaTsKKwlmb3IgKGkgPSAwOyBpIDwgQ1gxOF9NQVhfTU1JT19SRVRSSUVTOyBpKyspIHsKKwkJY3gxOF9yYXdfd3JpdGVsX25vcmV0cnkoY3gsIHZhbCwgYWRkcik7CisJCWlmICh2YWwgPT0gY3gxOF9yYXdfcmVhZGxfbm9yZXRyeShjeCwgYWRkcikpCisJCQlicmVhazsKKwl9CisJY3gxOF9sb2dfd3JpdGVfcmV0cmllcyhjeCwgaSwgYWRkcik7Cit9CisKK3UzMiBjeDE4X3Jhd19yZWFkbF9yZXRyeShzdHJ1Y3QgY3gxOCAqY3gsIGNvbnN0IHZvaWQgX19pb21lbSAqYWRkcikKK3sKKwlpbnQgaTsKKwl1MzIgdmFsOworCWZvciAoaSA9IDA7IGkgPCBDWDE4X01BWF9NTUlPX1JFVFJJRVM7IGkrKykgeworCQl2YWwgPSBjeDE4X3Jhd19yZWFkbF9ub3JldHJ5KGN4LCBhZGRyKTsKKwkJaWYgKHZhbCAhPSAweGZmZmZmZmZmKSAvKiBQQ0kgYnVzIHJlYWQgZXJyb3IgKi8KKwkJCWJyZWFrOworCX0KKwljeDE4X2xvZ19yZWFkX3JldHJpZXMoY3gsIGksIGFkZHIpOworCXJldHVybiB2YWw7Cit9CisKK3UxNiBjeDE4X3Jhd19yZWFkd19yZXRyeShzdHJ1Y3QgY3gxOCAqY3gsIGNvbnN0IHZvaWQgX19pb21lbSAqYWRkcikKK3sKKwlpbnQgaTsKKwl1MTYgdmFsOworCWZvciAoaSA9IDA7IGkgPCBDWDE4X01BWF9NTUlPX1JFVFJJRVM7IGkrKykgeworCQl2YWwgPSBjeDE4X3Jhd19yZWFkd19ub3JldHJ5KGN4LCBhZGRyKTsKKwkJaWYgKHZhbCAhPSAweGZmZmYpIC8qIFBDSSBidXMgcmVhZCBlcnJvciAqLworCQkJYnJlYWs7CisJfQorCWN4MThfbG9nX3JlYWRfcmV0cmllcyhjeCwgaSwgYWRkcik7CisJcmV0dXJuIHZhbDsKK30KKwordm9pZCBjeDE4X3dyaXRlbF9yZXRyeShzdHJ1Y3QgY3gxOCAqY3gsIHUzMiB2YWwsIHZvaWQgX19pb21lbSAqYWRkcikKK3sKKwlpbnQgaTsKKwlmb3IgKGkgPSAwOyBpIDwgQ1gxOF9NQVhfTU1JT19SRVRSSUVTOyBpKyspIHsKKwkJY3gxOF93cml0ZWxfbm9yZXRyeShjeCwgdmFsLCBhZGRyKTsKKwkJaWYgKHZhbCA9PSBjeDE4X3JlYWRsX25vcmV0cnkoY3gsIGFkZHIpKQorCQkJYnJlYWs7CisJfQorCWN4MThfbG9nX3dyaXRlX3JldHJpZXMoY3gsIGksIGFkZHIpOworfQorCit2b2lkIGN4MThfd3JpdGV3X3JldHJ5KHN0cnVjdCBjeDE4ICpjeCwgdTE2IHZhbCwgdm9pZCBfX2lvbWVtICphZGRyKQoreworCWludCBpOworCWZvciAoaSA9IDA7IGkgPCBDWDE4X01BWF9NTUlPX1JFVFJJRVM7IGkrKykgeworCQljeDE4X3dyaXRld19ub3JldHJ5KGN4LCB2YWwsIGFkZHIpOworCQlpZiAodmFsID09IGN4MThfcmVhZHdfbm9yZXRyeShjeCwgYWRkcikpCisJCQlicmVhazsKKwl9CisJY3gxOF9sb2dfd3JpdGVfcmV0cmllcyhjeCwgaSwgYWRkcik7Cit9CisKK3ZvaWQgY3gxOF93cml0ZWJfcmV0cnkoc3RydWN0IGN4MTggKmN4LCB1OCB2YWwsIHZvaWQgX19pb21lbSAqYWRkcikKK3sKKwlpbnQgaTsKKwlmb3IgKGkgPSAwOyBpIDwgQ1gxOF9NQVhfTU1JT19SRVRSSUVTOyBpKyspIHsKKwkJY3gxOF93cml0ZWJfbm9yZXRyeShjeCwgdmFsLCBhZGRyKTsKKwkJaWYgKHZhbCA9PSBjeDE4X3JlYWRiX25vcmV0cnkoY3gsIGFkZHIpKQorCQkJYnJlYWs7CisJfQorCWN4MThfbG9nX3dyaXRlX3JldHJpZXMoY3gsIGksIGFkZHIpOworfQorCit1MzIgY3gxOF9yZWFkbF9yZXRyeShzdHJ1Y3QgY3gxOCAqY3gsIGNvbnN0IHZvaWQgX19pb21lbSAqYWRkcikKK3sKKwlpbnQgaTsKKwl1MzIgdmFsOworCWZvciAoaSA9IDA7IGkgPCBDWDE4X01BWF9NTUlPX1JFVFJJRVM7IGkrKykgeworCQl2YWwgPSBjeDE4X3JlYWRsX25vcmV0cnkoY3gsIGFkZHIpOworCQlpZiAodmFsICE9IDB4ZmZmZmZmZmYpIC8qIFBDSSBidXMgcmVhZCBlcnJvciAqLworCQkJYnJlYWs7CisJfQorCWN4MThfbG9nX3JlYWRfcmV0cmllcyhjeCwgaSwgYWRkcik7CisJcmV0dXJuIHZhbDsKK30KKwordTE2IGN4MThfcmVhZHdfcmV0cnkoc3RydWN0IGN4MTggKmN4LCBjb25zdCB2b2lkIF9faW9tZW0gKmFkZHIpCit7CisJaW50IGk7CisJdTE2IHZhbDsKKwlmb3IgKGkgPSAwOyBpIDwgQ1gxOF9NQVhfTU1JT19SRVRSSUVTOyBpKyspIHsKKwkJdmFsID0gY3gxOF9yZWFkd19ub3JldHJ5KGN4LCBhZGRyKTsKKwkJaWYgKHZhbCAhPSAweGZmZmYpIC8qIFBDSSBidXMgcmVhZCBlcnJvciAqLworCQkJYnJlYWs7CisJfQorCWN4MThfbG9nX3JlYWRfcmV0cmllcyhjeCwgaSwgYWRkcik7CisJcmV0dXJuIHZhbDsKK30KKwordTggY3gxOF9yZWFkYl9yZXRyeShzdHJ1Y3QgY3gxOCAqY3gsIGNvbnN0IHZvaWQgX19pb21lbSAqYWRkcikKK3sKKwlpbnQgaTsKKwl1OCB2YWw7CisJZm9yIChpID0gMDsgaSA8IENYMThfTUFYX01NSU9fUkVUUklFUzsgaSsrKSB7CisJCXZhbCA9IGN4MThfcmVhZGJfbm9yZXRyeShjeCwgYWRkcik7CisJCWlmICh2YWwgIT0gMHhmZikgLyogUENJIGJ1cyByZWFkIGVycm9yICovCisJCQlicmVhazsKKwl9CisJY3gxOF9sb2dfcmVhZF9yZXRyaWVzKGN4LCBpLCBhZGRyKTsKKwlyZXR1cm4gdmFsOworfQorCit2b2lkIGN4MThfbWVtY3B5X2Zyb21pbyhzdHJ1Y3QgY3gxOCAqY3gsIHZvaWQgKnRvLAorCQkJY29uc3Qgdm9pZCBfX2lvbWVtICpmcm9tLCB1bnNpZ25lZCBpbnQgbGVuKQoreworCWNvbnN0IHU4IF9faW9tZW0gKnNyYyA9IGZyb207CisJdTggKmRzdCA9IHRvOworCisJLyogQWxpZ24gcmVhZHMgb24gdGhlIENYMjM0MTgncyBhZGRyZXNzZXMgKi8KKwlpZiAoKGxlbiA+IDApICYmICgodW5zaWduZWQgbG9uZykgc3JjICYgMSkpIHsKKwkJKmRzdCA9IGN4MThfcmVhZGIoY3gsIHNyYyk7CisJCWxlbi0tOworCQlkc3QrKzsKKwkJc3JjKys7CisJfQorCWlmICgobGVuID4gMSkgJiYgKCh1bnNpZ25lZCBsb25nKSBzcmMgJiAyKSkgeworCQkqKCh1MTYgKilkc3QpID0gY3gxOF9yYXdfcmVhZHcoY3gsIHNyYyk7CisJCWxlbiAtPSAyOworCQlkc3QgKz0gMjsKKwkJc3JjICs9IDI7CisJfQorCXdoaWxlIChsZW4gPiAzKSB7CisJCSooKHUzMiAqKWRzdCkgPSBjeDE4X3Jhd19yZWFkbChjeCwgc3JjKTsKKwkJbGVuIC09IDQ7CisJCWRzdCArPSA0OworCQlzcmMgKz0gNDsKKwl9CisJaWYgKGxlbiA+IDEpIHsKKwkJKigodTE2ICopZHN0KSA9IGN4MThfcmF3X3JlYWR3KGN4LCBzcmMpOworCQlsZW4gLT0gMjsKKwkJZHN0ICs9IDI7CisJCXNyYyArPSAyOworCX0KKwlpZiAobGVuID4gMCkKKwkJKmRzdCA9IGN4MThfcmVhZGIoY3gsIHNyYyk7Cit9CisKK3ZvaWQgY3gxOF9tZW1zZXRfaW8oc3RydWN0IGN4MTggKmN4LCB2b2lkIF9faW9tZW0gKmFkZHIsIGludCB2YWwsIHNpemVfdCBjb3VudCkKK3sKKwl1OCBfX2lvbWVtICpkc3QgPSBhZGRyOworCXUxNiB2YWwyID0gdmFsIHwgKHZhbCA8PCA4KTsKKwl1MzIgdmFsNCA9IHZhbDIgfCAodmFsMiA8PCAxNik7CisKKwkvKiBBbGlnbiB3cml0ZXMgb24gdGhlIENYMjM0MTgncyBhZGRyZXNzZXMgKi8KKwlpZiAoKGNvdW50ID4gMCkgJiYgKCh1bnNpZ25lZCBsb25nKWRzdCAmIDEpKSB7CisJCWN4MThfd3JpdGViKGN4LCAodTgpIHZhbCwgZHN0KTsKKwkJY291bnQtLTsKKwkJZHN0Kys7CisJfQorCWlmICgoY291bnQgPiAxKSAmJiAoKHVuc2lnbmVkIGxvbmcpZHN0ICYgMikpIHsKKwkJY3gxOF93cml0ZXcoY3gsIHZhbDIsIGRzdCk7CisJCWNvdW50IC09IDI7CisJCWRzdCArPSAyOworCX0KKwl3aGlsZSAoY291bnQgPiAzKSB7CisJCWN4MThfd3JpdGVsKGN4LCB2YWw0LCBkc3QpOworCQljb3VudCAtPSA0OworCQlkc3QgKz0gNDsKKwl9CisJaWYgKGNvdW50ID4gMSkgeworCQljeDE4X3dyaXRldyhjeCwgdmFsMiwgZHN0KTsKKwkJY291bnQgLT0gMjsKKwkJZHN0ICs9IDI7CisJfQorCWlmIChjb3VudCA+IDApCisJCWN4MThfd3JpdGViKGN4LCAodTgpIHZhbCwgZHN0KTsKK30KKwordm9pZCBjeDE4X3N3MV9pcnFfZW5hYmxlKHN0cnVjdCBjeDE4ICpjeCwgdTMyIHZhbCkKK3sKKwl1MzIgcjsKKwljeDE4X3dyaXRlX3JlZyhjeCwgdmFsLCBTVzFfSU5UX1NUQVRVUyk7CisJciA9IGN4MThfcmVhZF9yZWcoY3gsIFNXMV9JTlRfRU5BQkxFX1BDSSk7CisJY3gxOF93cml0ZV9yZWcoY3gsIHIgfCB2YWwsIFNXMV9JTlRfRU5BQkxFX1BDSSk7Cit9CisKK3ZvaWQgY3gxOF9zdzFfaXJxX2Rpc2FibGUoc3RydWN0IGN4MTggKmN4LCB1MzIgdmFsKQoreworCXUzMiByOworCXIgPSBjeDE4X3JlYWRfcmVnKGN4LCBTVzFfSU5UX0VOQUJMRV9QQ0kpOworCWN4MThfd3JpdGVfcmVnKGN4LCByICYgfnZhbCwgU1cxX0lOVF9FTkFCTEVfUENJKTsKK30KKwordm9pZCBjeDE4X3N3Ml9pcnFfZW5hYmxlKHN0cnVjdCBjeDE4ICpjeCwgdTMyIHZhbCkKK3sKKwl1MzIgcjsKKwljeDE4X3dyaXRlX3JlZyhjeCwgdmFsLCBTVzJfSU5UX1NUQVRVUyk7CisJciA9IGN4MThfcmVhZF9yZWcoY3gsIFNXMl9JTlRfRU5BQkxFX1BDSSk7CisJY3gxOF93cml0ZV9yZWcoY3gsIHIgfCB2YWwsIFNXMl9JTlRfRU5BQkxFX1BDSSk7Cit9CisKK3ZvaWQgY3gxOF9zdzJfaXJxX2Rpc2FibGUoc3RydWN0IGN4MTggKmN4LCB1MzIgdmFsKQoreworCXUzMiByOworCXIgPSBjeDE4X3JlYWRfcmVnKGN4LCBTVzJfSU5UX0VOQUJMRV9QQ0kpOworCWN4MThfd3JpdGVfcmVnKGN4LCByICYgfnZhbCwgU1cyX0lOVF9FTkFCTEVfUENJKTsKK30KKwordm9pZCBjeDE4X3NldHVwX3BhZ2Uoc3RydWN0IGN4MTggKmN4LCB1MzIgYWRkcikKK3sKKwl1MzIgdmFsOworCXZhbCA9IGN4MThfcmVhZF9yZWcoY3gsIDB4RDAwMEY4KTsKKwl2YWwgPSAodmFsICYgfjB4MWYwMCkgfCAoKGFkZHIgPj4gMTcpICYgMHgxZjAwKTsKKwljeDE4X3dyaXRlX3JlZyhjeCwgdmFsLCAweEQwMDBGOCk7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1pby5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtaW8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOTdkNGZiCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtaW8uaApAQCAtMCwwICsxLDM3OCBAQAorLyoKKyAqICBjeDE4IGRyaXZlciBQQ0kgbWVtb3J5IG1hcHBlZCBJTyBhY2Nlc3Mgcm91dGluZXMKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA3ICBIYW5zIFZlcmt1aWwgPGh2ZXJrdWlsQHhzNGFsbC5ubD4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDggIEFuZHkgV2FsbHMgPGF3YWxsc0ByYWRpeC5uZXQ+CisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQQorICogIDAyMTExLTEzMDcgIFVTQQorICovCisKKyNpZm5kZWYgQ1gxOF9JT19ICisjZGVmaW5lIENYMThfSU9fSAorCisjaW5jbHVkZSAiY3gxOC1kcml2ZXIuaCIKKworc3RhdGljIGlubGluZSB2b2lkIGN4MThfaW9fZGVsYXkoc3RydWN0IGN4MTggKmN4KQoreworCWlmIChjeC0+b3B0aW9ucy5tbWlvX25kZWxheSkKKwkJbmRlbGF5KGN4LT5vcHRpb25zLm1taW9fbmRlbGF5KTsKK30KKworLyoKKyAqIFJlYWRiYWNrIGFuZCByZXRyeSBvZiBNTUlPIGFjY2VzcyBmb3IgcmVsaWFiaWxpdHk6CisgKiBUaGUgY29uY2VwdCB3YXMgc3VnZ2VzdGVkIGJ5IFN0ZXZlIFRvdGggPHN0b3RoQGxpbnV4dHYub3JnPi4KKyAqIFRoZSBpbXBsbWVudGF0aW9uIGlzIHRoZSBmYXVsdCBvZiBBbmR5IFdhbGxzIDxhd2FsbHNAcmFkaXgubmV0Pi4KKyAqLworCisvKiBTdGF0aXN0aWNzIGdhdGhlcmluZyAqLworc3RhdGljIGlubGluZQordm9pZCBjeDE4X2xvZ193cml0ZV9yZXRyaWVzKHN0cnVjdCBjeDE4ICpjeCwgaW50IGksIGNvbnN0IHZvaWQgKmFkZHIpCit7CisJaWYgKGkgPiBDWDE4X01BWF9NTUlPX1JFVFJJRVMpCisJCWkgPSBDWDE4X01BWF9NTUlPX1JFVFJJRVM7CisJYXRvbWljX2luYygmY3gtPm1taW9fc3RhdHMucmV0cmllZF93cml0ZVtpXSk7CisJcmV0dXJuOworfQorCitzdGF0aWMgaW5saW5lCit2b2lkIGN4MThfbG9nX3JlYWRfcmV0cmllcyhzdHJ1Y3QgY3gxOCAqY3gsIGludCBpLCBjb25zdCB2b2lkICphZGRyKQoreworCWlmIChpID4gQ1gxOF9NQVhfTU1JT19SRVRSSUVTKQorCQlpID0gQ1gxOF9NQVhfTU1JT19SRVRSSUVTOworCWF0b21pY19pbmMoJmN4LT5tbWlvX3N0YXRzLnJldHJpZWRfcmVhZFtpXSk7CisJcmV0dXJuOworfQorCit2b2lkIGN4MThfbG9nX3N0YXRpc3RpY3Moc3RydWN0IGN4MTggKmN4KTsKKworLyogTm9uIGJ5dGVzd2FwcGluZyBtZW1vcnkgbWFwcGVkIElPICovCitzdGF0aWMgaW5saW5lCit2b2lkIGN4MThfcmF3X3dyaXRlbF9ub3JldHJ5KHN0cnVjdCBjeDE4ICpjeCwgdTMyIHZhbCwgdm9pZCBfX2lvbWVtICphZGRyKQoreworCV9fcmF3X3dyaXRlbCh2YWwsIGFkZHIpOworCWN4MThfaW9fZGVsYXkoY3gpOworfQorCit2b2lkIGN4MThfcmF3X3dyaXRlbF9yZXRyeShzdHJ1Y3QgY3gxOCAqY3gsIHUzMiB2YWwsIHZvaWQgX19pb21lbSAqYWRkcik7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjeDE4X3Jhd193cml0ZWwoc3RydWN0IGN4MTggKmN4LCB1MzIgdmFsLCB2b2lkIF9faW9tZW0gKmFkZHIpCit7CisJaWYgKGN4MThfcmV0cnlfbW1pbykKKwkJY3gxOF9yYXdfd3JpdGVsX3JldHJ5KGN4LCB2YWwsIGFkZHIpOworCWVsc2UKKwkJY3gxOF9yYXdfd3JpdGVsX25vcmV0cnkoY3gsIHZhbCwgYWRkcik7Cit9CisKKworc3RhdGljIGlubGluZQordTMyIGN4MThfcmF3X3JlYWRsX25vcmV0cnkoc3RydWN0IGN4MTggKmN4LCBjb25zdCB2b2lkIF9faW9tZW0gKmFkZHIpCit7CisJdTMyIHJldCA9IF9fcmF3X3JlYWRsKGFkZHIpOworCWN4MThfaW9fZGVsYXkoY3gpOworCXJldHVybiByZXQ7Cit9CisKK3UzMiBjeDE4X3Jhd19yZWFkbF9yZXRyeShzdHJ1Y3QgY3gxOCAqY3gsIGNvbnN0IHZvaWQgX19pb21lbSAqYWRkcik7CisKK3N0YXRpYyBpbmxpbmUgdTMyIGN4MThfcmF3X3JlYWRsKHN0cnVjdCBjeDE4ICpjeCwgY29uc3Qgdm9pZCBfX2lvbWVtICphZGRyKQoreworCWlmIChjeDE4X3JldHJ5X21taW8pCisJCXJldHVybiBjeDE4X3Jhd19yZWFkbF9yZXRyeShjeCwgYWRkcik7CisKKwlyZXR1cm4gY3gxOF9yYXdfcmVhZGxfbm9yZXRyeShjeCwgYWRkcik7Cit9CisKKworc3RhdGljIGlubGluZQordTE2IGN4MThfcmF3X3JlYWR3X25vcmV0cnkoc3RydWN0IGN4MTggKmN4LCBjb25zdCB2b2lkIF9faW9tZW0gKmFkZHIpCit7CisJdTE2IHJldCA9IF9fcmF3X3JlYWR3KGFkZHIpOworCWN4MThfaW9fZGVsYXkoY3gpOworCXJldHVybiByZXQ7Cit9CisKK3UxNiBjeDE4X3Jhd19yZWFkd19yZXRyeShzdHJ1Y3QgY3gxOCAqY3gsIGNvbnN0IHZvaWQgX19pb21lbSAqYWRkcik7CisKK3N0YXRpYyBpbmxpbmUgdTE2IGN4MThfcmF3X3JlYWR3KHN0cnVjdCBjeDE4ICpjeCwgY29uc3Qgdm9pZCBfX2lvbWVtICphZGRyKQoreworCWlmIChjeDE4X3JldHJ5X21taW8pCisJCXJldHVybiBjeDE4X3Jhd19yZWFkd19yZXRyeShjeCwgYWRkcik7CisKKwlyZXR1cm4gY3gxOF9yYXdfcmVhZHdfbm9yZXRyeShjeCwgYWRkcik7Cit9CisKKworLyogTm9ybWFsIG1lbW9yeSBtYXBwZWQgSU8gKi8KK3N0YXRpYyBpbmxpbmUKK3ZvaWQgY3gxOF93cml0ZWxfbm9yZXRyeShzdHJ1Y3QgY3gxOCAqY3gsIHUzMiB2YWwsIHZvaWQgX19pb21lbSAqYWRkcikKK3sKKwl3cml0ZWwodmFsLCBhZGRyKTsKKwljeDE4X2lvX2RlbGF5KGN4KTsKK30KKwordm9pZCBjeDE4X3dyaXRlbF9yZXRyeShzdHJ1Y3QgY3gxOCAqY3gsIHUzMiB2YWwsIHZvaWQgX19pb21lbSAqYWRkcik7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjeDE4X3dyaXRlbChzdHJ1Y3QgY3gxOCAqY3gsIHUzMiB2YWwsIHZvaWQgX19pb21lbSAqYWRkcikKK3sKKwlpZiAoY3gxOF9yZXRyeV9tbWlvKQorCQljeDE4X3dyaXRlbF9yZXRyeShjeCwgdmFsLCBhZGRyKTsKKwllbHNlCisJCWN4MThfd3JpdGVsX25vcmV0cnkoY3gsIHZhbCwgYWRkcik7Cit9CisKKworc3RhdGljIGlubGluZQordm9pZCBjeDE4X3dyaXRld19ub3JldHJ5KHN0cnVjdCBjeDE4ICpjeCwgdTE2IHZhbCwgdm9pZCBfX2lvbWVtICphZGRyKQoreworCXdyaXRldyh2YWwsIGFkZHIpOworCWN4MThfaW9fZGVsYXkoY3gpOworfQorCit2b2lkIGN4MThfd3JpdGV3X3JldHJ5KHN0cnVjdCBjeDE4ICpjeCwgdTE2IHZhbCwgdm9pZCBfX2lvbWVtICphZGRyKTsKKworc3RhdGljIGlubGluZSB2b2lkIGN4MThfd3JpdGV3KHN0cnVjdCBjeDE4ICpjeCwgdTE2IHZhbCwgdm9pZCBfX2lvbWVtICphZGRyKQoreworCWlmIChjeDE4X3JldHJ5X21taW8pCisJCWN4MThfd3JpdGV3X3JldHJ5KGN4LCB2YWwsIGFkZHIpOworCWVsc2UKKwkJY3gxOF93cml0ZXdfbm9yZXRyeShjeCwgdmFsLCBhZGRyKTsKK30KKworCitzdGF0aWMgaW5saW5lCit2b2lkIGN4MThfd3JpdGViX25vcmV0cnkoc3RydWN0IGN4MTggKmN4LCB1OCB2YWwsIHZvaWQgX19pb21lbSAqYWRkcikKK3sKKwl3cml0ZWIodmFsLCBhZGRyKTsKKwljeDE4X2lvX2RlbGF5KGN4KTsKK30KKwordm9pZCBjeDE4X3dyaXRlYl9yZXRyeShzdHJ1Y3QgY3gxOCAqY3gsIHU4IHZhbCwgdm9pZCBfX2lvbWVtICphZGRyKTsKKworc3RhdGljIGlubGluZSB2b2lkIGN4MThfd3JpdGViKHN0cnVjdCBjeDE4ICpjeCwgdTggdmFsLCB2b2lkIF9faW9tZW0gKmFkZHIpCit7CisJaWYgKGN4MThfcmV0cnlfbW1pbykKKwkJY3gxOF93cml0ZWJfcmV0cnkoY3gsIHZhbCwgYWRkcik7CisJZWxzZQorCQljeDE4X3dyaXRlYl9ub3JldHJ5KGN4LCB2YWwsIGFkZHIpOworfQorCisKK3N0YXRpYyBpbmxpbmUgdTMyIGN4MThfcmVhZGxfbm9yZXRyeShzdHJ1Y3QgY3gxOCAqY3gsIGNvbnN0IHZvaWQgX19pb21lbSAqYWRkcikKK3sKKwl1MzIgcmV0ID0gcmVhZGwoYWRkcik7CisJY3gxOF9pb19kZWxheShjeCk7CisJcmV0dXJuIHJldDsKK30KKwordTMyIGN4MThfcmVhZGxfcmV0cnkoc3RydWN0IGN4MTggKmN4LCBjb25zdCB2b2lkIF9faW9tZW0gKmFkZHIpOworCitzdGF0aWMgaW5saW5lIHUzMiBjeDE4X3JlYWRsKHN0cnVjdCBjeDE4ICpjeCwgY29uc3Qgdm9pZCBfX2lvbWVtICphZGRyKQoreworCWlmIChjeDE4X3JldHJ5X21taW8pCisJCXJldHVybiBjeDE4X3JlYWRsX3JldHJ5KGN4LCBhZGRyKTsKKworCXJldHVybiBjeDE4X3JlYWRsX25vcmV0cnkoY3gsIGFkZHIpOworfQorCisKK3N0YXRpYyBpbmxpbmUgdTE2IGN4MThfcmVhZHdfbm9yZXRyeShzdHJ1Y3QgY3gxOCAqY3gsIGNvbnN0IHZvaWQgX19pb21lbSAqYWRkcikKK3sKKwl1MTYgcmV0ID0gcmVhZHcoYWRkcik7CisJY3gxOF9pb19kZWxheShjeCk7CisJcmV0dXJuIHJldDsKK30KKwordTE2IGN4MThfcmVhZHdfcmV0cnkoc3RydWN0IGN4MTggKmN4LCBjb25zdCB2b2lkIF9faW9tZW0gKmFkZHIpOworCitzdGF0aWMgaW5saW5lIHUxNiBjeDE4X3JlYWR3KHN0cnVjdCBjeDE4ICpjeCwgY29uc3Qgdm9pZCBfX2lvbWVtICphZGRyKQoreworCWlmIChjeDE4X3JldHJ5X21taW8pCisJCXJldHVybiBjeDE4X3JlYWR3X3JldHJ5KGN4LCBhZGRyKTsKKworCXJldHVybiBjeDE4X3JlYWR3X25vcmV0cnkoY3gsIGFkZHIpOworfQorCisKK3N0YXRpYyBpbmxpbmUgdTggY3gxOF9yZWFkYl9ub3JldHJ5KHN0cnVjdCBjeDE4ICpjeCwgY29uc3Qgdm9pZCBfX2lvbWVtICphZGRyKQoreworCXU4IHJldCA9IHJlYWRiKGFkZHIpOworCWN4MThfaW9fZGVsYXkoY3gpOworCXJldHVybiByZXQ7Cit9CisKK3U4IGN4MThfcmVhZGJfcmV0cnkoc3RydWN0IGN4MTggKmN4LCBjb25zdCB2b2lkIF9faW9tZW0gKmFkZHIpOworCitzdGF0aWMgaW5saW5lIHU4IGN4MThfcmVhZGIoc3RydWN0IGN4MTggKmN4LCBjb25zdCB2b2lkIF9faW9tZW0gKmFkZHIpCit7CisJaWYgKGN4MThfcmV0cnlfbW1pbykKKwkJcmV0dXJuIGN4MThfcmVhZGJfcmV0cnkoY3gsIGFkZHIpOworCisJcmV0dXJuIGN4MThfcmVhZGJfbm9yZXRyeShjeCwgYWRkcik7Cit9CisKKworc3RhdGljIGlubGluZQordTMyIGN4MThfd3JpdGVfc3luY19ub3JldHJ5KHN0cnVjdCBjeDE4ICpjeCwgdTMyIHZhbCwgdm9pZCBfX2lvbWVtICphZGRyKQoreworCWN4MThfd3JpdGVsX25vcmV0cnkoY3gsIHZhbCwgYWRkcik7CisJcmV0dXJuIGN4MThfcmVhZGxfbm9yZXRyeShjeCwgYWRkcik7Cit9CisKK3N0YXRpYyBpbmxpbmUKK3UzMiBjeDE4X3dyaXRlX3N5bmNfcmV0cnkoc3RydWN0IGN4MTggKmN4LCB1MzIgdmFsLCB2b2lkIF9faW9tZW0gKmFkZHIpCit7CisJY3gxOF93cml0ZWxfcmV0cnkoY3gsIHZhbCwgYWRkcik7CisJcmV0dXJuIGN4MThfcmVhZGxfcmV0cnkoY3gsIGFkZHIpOworfQorCitzdGF0aWMgaW5saW5lIHUzMiBjeDE4X3dyaXRlX3N5bmMoc3RydWN0IGN4MTggKmN4LCB1MzIgdmFsLCB2b2lkIF9faW9tZW0gKmFkZHIpCit7CisJaWYgKGN4MThfcmV0cnlfbW1pbykKKwkJcmV0dXJuIGN4MThfd3JpdGVfc3luY19yZXRyeShjeCwgdmFsLCBhZGRyKTsKKworCXJldHVybiBjeDE4X3dyaXRlX3N5bmNfbm9yZXRyeShjeCwgdmFsLCBhZGRyKTsKK30KKworCit2b2lkIGN4MThfbWVtY3B5X2Zyb21pbyhzdHJ1Y3QgY3gxOCAqY3gsIHZvaWQgKnRvLAorCQkJY29uc3Qgdm9pZCBfX2lvbWVtICpmcm9tLCB1bnNpZ25lZCBpbnQgbGVuKTsKK3ZvaWQgY3gxOF9tZW1zZXRfaW8oc3RydWN0IGN4MTggKmN4LCB2b2lkIF9faW9tZW0gKmFkZHIsIGludCB2YWwsIHNpemVfdCBjb3VudCk7CisKKworLyogQWNjZXNzICJyZWdpc3RlciIgcmVnaW9uIG9mIENYMjM0MTggbWVtb3J5IG1hcHBlZCBJL08gKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBjeDE4X3dyaXRlX3JlZ19ub3JldHJ5KHN0cnVjdCBjeDE4ICpjeCwgdTMyIHZhbCwgdTMyIHJlZykKK3sKKwljeDE4X3dyaXRlbF9ub3JldHJ5KGN4LCB2YWwsIGN4LT5yZWdfbWVtICsgcmVnKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGN4MThfd3JpdGVfcmVnX3JldHJ5KHN0cnVjdCBjeDE4ICpjeCwgdTMyIHZhbCwgdTMyIHJlZykKK3sKKwljeDE4X3dyaXRlbF9yZXRyeShjeCwgdmFsLCBjeC0+cmVnX21lbSArIHJlZyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjeDE4X3dyaXRlX3JlZyhzdHJ1Y3QgY3gxOCAqY3gsIHUzMiB2YWwsIHUzMiByZWcpCit7CisJaWYgKGN4MThfcmV0cnlfbW1pbykKKwkJY3gxOF93cml0ZV9yZWdfcmV0cnkoY3gsIHZhbCwgcmVnKTsKKwllbHNlCisJCWN4MThfd3JpdGVfcmVnX25vcmV0cnkoY3gsIHZhbCwgcmVnKTsKK30KKworCitzdGF0aWMgaW5saW5lIHUzMiBjeDE4X3JlYWRfcmVnX25vcmV0cnkoc3RydWN0IGN4MTggKmN4LCB1MzIgcmVnKQoreworCXJldHVybiBjeDE4X3JlYWRsX25vcmV0cnkoY3gsIGN4LT5yZWdfbWVtICsgcmVnKTsKK30KKworc3RhdGljIGlubGluZSB1MzIgY3gxOF9yZWFkX3JlZ19yZXRyeShzdHJ1Y3QgY3gxOCAqY3gsIHUzMiByZWcpCit7CisJcmV0dXJuIGN4MThfcmVhZGxfcmV0cnkoY3gsIGN4LT5yZWdfbWVtICsgcmVnKTsKK30KKworc3RhdGljIGlubGluZSB1MzIgY3gxOF9yZWFkX3JlZyhzdHJ1Y3QgY3gxOCAqY3gsIHUzMiByZWcpCit7CisJaWYgKGN4MThfcmV0cnlfbW1pbykKKwkJcmV0dXJuIGN4MThfcmVhZF9yZWdfcmV0cnkoY3gsIHJlZyk7CisKKwlyZXR1cm4gY3gxOF9yZWFkX3JlZ19ub3JldHJ5KGN4LCByZWcpOworfQorCisKK3N0YXRpYyBpbmxpbmUgdTMyIGN4MThfd3JpdGVfcmVnX3N5bmNfbm9yZXRyeShzdHJ1Y3QgY3gxOCAqY3gsIHUzMiB2YWwsIHUzMiByZWcpCit7CisJcmV0dXJuIGN4MThfd3JpdGVfc3luY19ub3JldHJ5KGN4LCB2YWwsIGN4LT5yZWdfbWVtICsgcmVnKTsKK30KKworc3RhdGljIGlubGluZSB1MzIgY3gxOF93cml0ZV9yZWdfc3luY19yZXRyeShzdHJ1Y3QgY3gxOCAqY3gsIHUzMiB2YWwsIHUzMiByZWcpCit7CisJcmV0dXJuIGN4MThfd3JpdGVfc3luY19yZXRyeShjeCwgdmFsLCBjeC0+cmVnX21lbSArIHJlZyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTMyIGN4MThfd3JpdGVfcmVnX3N5bmMoc3RydWN0IGN4MTggKmN4LCB1MzIgdmFsLCB1MzIgcmVnKQoreworCWlmIChjeDE4X3JldHJ5X21taW8pCisJCXJldHVybiBjeDE4X3dyaXRlX3JlZ19zeW5jX3JldHJ5KGN4LCB2YWwsIHJlZyk7CisKKwlyZXR1cm4gY3gxOF93cml0ZV9yZWdfc3luY19ub3JldHJ5KGN4LCB2YWwsIHJlZyk7Cit9CisKKworLyogQWNjZXNzICJlbmNvZGVyIG1lbW9yeSIgcmVnaW9uIG9mIENYMjM0MTggbWVtb3J5IG1hcHBlZCBJL08gKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBjeDE4X3dyaXRlX2VuY19ub3JldHJ5KHN0cnVjdCBjeDE4ICpjeCwgdTMyIHZhbCwgdTMyIGFkZHIpCit7CisJY3gxOF93cml0ZWxfbm9yZXRyeShjeCwgdmFsLCBjeC0+ZW5jX21lbSArIGFkZHIpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgY3gxOF93cml0ZV9lbmNfcmV0cnkoc3RydWN0IGN4MTggKmN4LCB1MzIgdmFsLCB1MzIgYWRkcikKK3sKKwljeDE4X3dyaXRlbF9yZXRyeShjeCwgdmFsLCBjeC0+ZW5jX21lbSArIGFkZHIpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgY3gxOF93cml0ZV9lbmMoc3RydWN0IGN4MTggKmN4LCB1MzIgdmFsLCB1MzIgYWRkcikKK3sKKwlpZiAoY3gxOF9yZXRyeV9tbWlvKQorCQljeDE4X3dyaXRlX2VuY19yZXRyeShjeCwgdmFsLCBhZGRyKTsKKwllbHNlCisJCWN4MThfd3JpdGVfZW5jX25vcmV0cnkoY3gsIHZhbCwgYWRkcik7Cit9CisKKworc3RhdGljIGlubGluZSB1MzIgY3gxOF9yZWFkX2VuY19ub3JldHJ5KHN0cnVjdCBjeDE4ICpjeCwgdTMyIGFkZHIpCit7CisJcmV0dXJuIGN4MThfcmVhZGxfbm9yZXRyeShjeCwgY3gtPmVuY19tZW0gKyBhZGRyKTsKK30KKworc3RhdGljIGlubGluZSB1MzIgY3gxOF9yZWFkX2VuY19yZXRyeShzdHJ1Y3QgY3gxOCAqY3gsIHUzMiBhZGRyKQoreworCXJldHVybiBjeDE4X3JlYWRsX3JldHJ5KGN4LCBjeC0+ZW5jX21lbSArIGFkZHIpOworfQorCitzdGF0aWMgaW5saW5lIHUzMiBjeDE4X3JlYWRfZW5jKHN0cnVjdCBjeDE4ICpjeCwgdTMyIGFkZHIpCit7CisJaWYgKGN4MThfcmV0cnlfbW1pbykKKwkJcmV0dXJuIGN4MThfcmVhZF9lbmNfcmV0cnkoY3gsIGFkZHIpOworCisJcmV0dXJuIGN4MThfcmVhZF9lbmNfbm9yZXRyeShjeCwgYWRkcik7Cit9CisKK3N0YXRpYyBpbmxpbmUKK3UzMiBjeDE4X3dyaXRlX2VuY19zeW5jX25vcmV0cnkoc3RydWN0IGN4MTggKmN4LCB1MzIgdmFsLCB1MzIgYWRkcikKK3sKKwlyZXR1cm4gY3gxOF93cml0ZV9zeW5jX25vcmV0cnkoY3gsIHZhbCwgY3gtPmVuY19tZW0gKyBhZGRyKTsKK30KKworc3RhdGljIGlubGluZQordTMyIGN4MThfd3JpdGVfZW5jX3N5bmNfcmV0cnkoc3RydWN0IGN4MTggKmN4LCB1MzIgdmFsLCB1MzIgYWRkcikKK3sKKwlyZXR1cm4gY3gxOF93cml0ZV9zeW5jX3JldHJ5KGN4LCB2YWwsIGN4LT5lbmNfbWVtICsgYWRkcik7Cit9CisKK3N0YXRpYyBpbmxpbmUKK3UzMiBjeDE4X3dyaXRlX2VuY19zeW5jKHN0cnVjdCBjeDE4ICpjeCwgdTMyIHZhbCwgdTMyIGFkZHIpCit7CisJaWYgKGN4MThfcmV0cnlfbW1pbykKKwkJcmV0dXJuIGN4MThfd3JpdGVfZW5jX3N5bmNfcmV0cnkoY3gsIHZhbCwgYWRkcik7CisKKwlyZXR1cm4gY3gxOF93cml0ZV9lbmNfc3luY19ub3JldHJ5KGN4LCB2YWwsIGFkZHIpOworfQorCit2b2lkIGN4MThfc3cxX2lycV9lbmFibGUoc3RydWN0IGN4MTggKmN4LCB1MzIgdmFsKTsKK3ZvaWQgY3gxOF9zdzFfaXJxX2Rpc2FibGUoc3RydWN0IGN4MTggKmN4LCB1MzIgdmFsKTsKK3ZvaWQgY3gxOF9zdzJfaXJxX2VuYWJsZShzdHJ1Y3QgY3gxOCAqY3gsIHUzMiB2YWwpOwordm9pZCBjeDE4X3N3Ml9pcnFfZGlzYWJsZShzdHJ1Y3QgY3gxOCAqY3gsIHUzMiB2YWwpOwordm9pZCBjeDE4X3NldHVwX3BhZ2Uoc3RydWN0IGN4MTggKmN4LCB1MzIgYWRkcik7CisKKyNlbmRpZiAvKiBDWDE4X0lPX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWlvY3RsLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1pb2N0bC5jCmluZGV4IGE3ZjgzOTYuLmYwY2E1MGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWlvY3RsLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtaW9jdGwuYwpAQCAtMjIsNiArMjIsNyBAQAogICovCiAKICNpbmNsdWRlICJjeDE4LWRyaXZlci5oIgorI2luY2x1ZGUgImN4MTgtaW8uaCIKICNpbmNsdWRlICJjeDE4LXZlcnNpb24uaCIKICNpbmNsdWRlICJjeDE4LW1haWxib3guaCIKICNpbmNsdWRlICJjeDE4LWkyYy5oIgpAQCAtMTcwLDcgKzE3MSw2IEBACiB7CiAJc3RydWN0IGN4MThfb3Blbl9pZCAqaWQgPSBmaDsKIAlzdHJ1Y3QgY3gxOCAqY3ggPSBpZC0+Y3g7Ci0KIAlpbnQgdyA9IGZtdC0+Zm10LnBpeC53aWR0aDsKIAlpbnQgaCA9IGZtdC0+Zm10LnBpeC5oZWlnaHQ7CiAKQEAgLTIwMiw4ICsyMDIsNyBAQAogCXN0cnVjdCBjeDE4X29wZW5faWQgKmlkID0gZmg7CiAJc3RydWN0IGN4MTggKmN4ID0gaWQtPmN4OwogCWludCByZXQ7Ci0JaW50IHcgPSBmbXQtPmZtdC5waXgud2lkdGg7Ci0JaW50IGggPSBmbXQtPmZtdC5waXguaGVpZ2h0OworCWludCB3LCBoOwogCiAJcmV0ID0gdjRsMl9wcmlvX2NoZWNrKCZjeC0+cHJpbywgJmlkLT5wcmlvKTsKIAlpZiAocmV0KQpAQCAtMjEyLDYgKzIxMSw4IEBACiAJcmV0ID0gY3gxOF90cnlfZm10X3ZpZF9jYXAoZmlsZSwgZmgsIGZtdCk7CiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKKwl3ID0gZm10LT5mbXQucGl4LndpZHRoOworCWggPSBmbXQtPmZtdC5waXguaGVpZ2h0OwogCiAJaWYgKGN4LT5wYXJhbXMud2lkdGggPT0gdyAmJiBjeC0+cGFyYW1zLmhlaWdodCA9PSBoKQogCQlyZXR1cm4gMDsKQEAgLTI4Niw5ICsyODcsOSBAQAogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmN4MThfY2FyZHNfbG9jaywgZmxhZ3MpOwogCWlmIChjbWQgPT0gVklESU9DX0RCR19HX1JFR0lTVEVSKQotCQlyZWdzLT52YWwgPSByZWFkX2VuYyhyZWdzLT5yZWcpOworCQlyZWdzLT52YWwgPSBjeDE4X3JlYWRfZW5jKGN4LCByZWdzLT5yZWcpOwogCWVsc2UKLQkJd3JpdGVfZW5jKHJlZ3MtPnZhbCwgcmVncy0+cmVnKTsKKwkJY3gxOF93cml0ZV9lbmMoY3gsIHJlZ3MtPnZhbCwgcmVncy0+cmVnKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjeDE4X2NhcmRzX2xvY2ssIGZsYWdzKTsKIAlyZXR1cm4gMDsKIH0KQEAgLTM0NSw3ICszNDYsNyBAQAogCiAJc3RybGNweSh2Y2FwLT5kcml2ZXIsIENYMThfRFJJVkVSX05BTUUsIHNpemVvZih2Y2FwLT5kcml2ZXIpKTsKIAlzdHJsY3B5KHZjYXAtPmNhcmQsIGN4LT5jYXJkX25hbWUsIHNpemVvZih2Y2FwLT5jYXJkKSk7Ci0Jc3RybGNweSh2Y2FwLT5idXNfaW5mbywgcGNpX25hbWUoY3gtPmRldiksIHNpemVvZih2Y2FwLT5idXNfaW5mbykpOworCXNucHJpbnRmKHZjYXAtPmJ1c19pbmZvLCBzaXplb2YodmNhcC0+YnVzX2luZm8pLCAiUENJOiVzIiwgcGNpX25hbWUoY3gtPmRldikpOwogCXZjYXAtPnZlcnNpb24gPSBDWDE4X0RSSVZFUl9WRVJTSU9OOyAJICAgIC8qIHZlcnNpb24gKi8KIAl2Y2FwLT5jYXBhYmlsaXRpZXMgPSBjeC0+djRsMl9jYXA7IAkgICAgLyogY2FwYWJpbGl0aWVzICovCiAJcmV0dXJuIDA7CkBAIC02MjIsNiArNjIzLDcgQEAKIHsKIAlzdHJ1Y3QgY3gxOF9vcGVuX2lkICppZCA9IGZoOwogCXN0cnVjdCBjeDE4ICpjeCA9IGlkLT5jeDsKKwl1MzIgaDsKIAogCXN3aXRjaCAoZW5jLT5jbWQpIHsKIAljYXNlIFY0TDJfRU5DX0NNRF9TVEFSVDoKQEAgLTY0Myw4ICs2NDUsMTQgQEAKIAkJCXJldHVybiAtRVBFUk07CiAJCWlmICh0ZXN0X2FuZF9zZXRfYml0KENYMThfRl9JX0VOQ19QQVVTRUQsICZjeC0+aV9mbGFncykpCiAJCQlyZXR1cm4gMDsKKwkJaCA9IGN4MThfZmluZF9oYW5kbGUoY3gpOworCQlpZiAoaCA9PSBDWDE4X0lOVkFMSURfVEFTS19IQU5ETEUpIHsKKwkJCUNYMThfRVJSKCJDYW4ndCBmaW5kIHZhbGlkIHRhc2sgaGFuZGxlIGZvciAiCisJCQkJICJWNEwyX0VOQ19DTURfUEFVU0VcbiIpOworCQkJcmV0dXJuIC1FQkFERkQ7CisJCX0KIAkJY3gxOF9tdXRlKGN4KTsKLQkJY3gxOF92YXBpKGN4LCBDWDE4X0NQVV9DQVBUVVJFX1BBVVNFLCAxLCBjeDE4X2ZpbmRfaGFuZGxlKGN4KSk7CisJCWN4MThfdmFwaShjeCwgQ1gxOF9DUFVfQ0FQVFVSRV9QQVVTRSwgMSwgaCk7CiAJCWJyZWFrOwogCiAJY2FzZSBWNEwyX0VOQ19DTURfUkVTVU1FOgpAQCAtNjU0LDcgKzY2MiwxMyBAQAogCQkJcmV0dXJuIC1FUEVSTTsKIAkJaWYgKCF0ZXN0X2FuZF9jbGVhcl9iaXQoQ1gxOF9GX0lfRU5DX1BBVVNFRCwgJmN4LT5pX2ZsYWdzKSkKIAkJCXJldHVybiAwOwotCQljeDE4X3ZhcGkoY3gsIENYMThfQ1BVX0NBUFRVUkVfUkVTVU1FLCAxLCBjeDE4X2ZpbmRfaGFuZGxlKGN4KSk7CisJCWggPSBjeDE4X2ZpbmRfaGFuZGxlKGN4KTsKKwkJaWYgKGggPT0gQ1gxOF9JTlZBTElEX1RBU0tfSEFORExFKSB7CisJCQlDWDE4X0VSUigiQ2FuJ3QgZmluZCB2YWxpZCB0YXNrIGhhbmRsZSBmb3IgIgorCQkJCSAiVjRMMl9FTkNfQ01EX1JFU1VNRVxuIik7CisJCQlyZXR1cm4gLUVCQURGRDsKKwkJfQorCQljeDE4X3ZhcGkoY3gsIENYMThfQ1BVX0NBUFRVUkVfUkVTVU1FLCAxLCBoKTsKIAkJY3gxOF91bm11dGUoY3gpOwogCQlicmVhazsKIApAQCAtNzMxLDEyICs3NDUsMTQgQEAKIAkJCWNvbnRpbnVlOwogCQlDWDE4X0lORk8oIlN0cmVhbSAlczogc3RhdHVzIDB4JTA0bHgsICVkJSUgb2YgJWQgS2lCICglZCBidWZmZXJzKSBpbiB1c2VcbiIsCiAJCQkgIHMtPm5hbWUsIHMtPnNfZmxhZ3MsCi0JCQkgIChzLT5idWZmZXJzIC0gcy0+cV9mcmVlLmJ1ZmZlcnMpICogMTAwIC8gcy0+YnVmZmVycywKKwkJCSAgKHMtPmJ1ZmZlcnMgLSBhdG9taWNfcmVhZCgmcy0+cV9mcmVlLmJ1ZmZlcnMpKQorCQkJCSogMTAwIC8gcy0+YnVmZmVycywKIAkJCSAgKHMtPmJ1ZmZlcnMgKiBzLT5idWZfc2l6ZSkgLyAxMDI0LCBzLT5idWZmZXJzKTsKIAl9CiAJQ1gxOF9JTkZPKCJSZWFkIE1QRUcvVkJJOiAlbGxkLyVsbGQgYnl0ZXNcbiIsCiAJCQkobG9uZyBsb25nKWN4LT5tcGdfZGF0YV9yZWNlaXZlZCwKIAkJCShsb25nIGxvbmcpY3gtPnZiaV9kYXRhX2luc2VydGVkKTsKKwljeDE4X2xvZ19zdGF0aXN0aWNzKGN4KTsKIAlDWDE4X0lORk8oIj09PT09PT09PT09PT09PT09PSAgRU5EIFNUQVRVUyBDQVJEICMlZCAgPT09PT09PT09PT09PT09PT09XG4iLCBjeC0+bnVtKTsKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWlycS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtaXJxLmMKaW5kZXggYWIyMTgzMS4uMzYwMzMwZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtaXJxLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtaXJxLmMKQEAgLTIwLDYgKzIwLDcgQEAKICAqLwogCiAjaW5jbHVkZSAiY3gxOC1kcml2ZXIuaCIKKyNpbmNsdWRlICJjeDE4LWlvLmgiCiAjaW5jbHVkZSAiY3gxOC1maXJtd2FyZS5oIgogI2luY2x1ZGUgImN4MTgtZmlsZW9wcy5oIgogI2luY2x1ZGUgImN4MTgtcXVldWUuaCIKQEAgLTQ4LDggKzQ5LDggQEAKIAkJCWJyZWFrOwogCX0KIAlpZiAoaSA9PSBDWDE4X01BWF9TVFJFQU1TKSB7Ci0JCUNYMThfV0FSTigiRE1BIGRvbmUgZm9yIHVua25vd24gaGFuZGxlICVkIGZvciBzdHJlYW0gJXNcbiIsCi0JCQloYW5kbGUsIHMtPm5hbWUpOworCQlDWDE4X1dBUk4oIkdvdCBETUEgZG9uZSBub3RpZmljYXRpb24gZm9yIHVua25vd24vaW5hY3RpdmUiCisJCQkgICIgaGFuZGxlICVkXG4iLCBoYW5kbGUpOwogCQltYi0+ZXJyb3IgPSBDWEVSUl9OT1RfT1BFTjsKIAkJbWItPmNtZCA9IDA7CiAJCWN4MThfbWJfYWNrKGN4LCBtYik7CkBAIC02MCw4ICs2MSw4IEBACiAJaWYgKG1iLT5hcmdzWzJdICE9IDEpCiAJCUNYMThfV0FSTigiQWNrIHN0cnVjdCA9ICVkIGZvciAlc1xuIiwKIAkJCW1iLT5hcmdzWzJdLCBzLT5uYW1lKTsKLQlpZCA9IHJlYWRfZW5jKG9mZik7Ci0JYnVmID0gY3gxOF9xdWV1ZV9nZXRfYnVmX2lycShzLCBpZCwgcmVhZF9lbmMob2ZmICsgNCkpOworCWlkID0gY3gxOF9yZWFkX2VuYyhjeCwgb2ZmKTsKKwlidWYgPSBjeDE4X3F1ZXVlX2dldF9idWZfaXJxKHMsIGlkLCBjeDE4X3JlYWRfZW5jKGN4LCBvZmYgKyA0KSk7CiAJQ1gxOF9ERUJVR19ISV9ETUEoIkRNQSBET05FIGZvciAlcyAoYnVmZmVyICVkKVxuIiwgcy0+bmFtZSwgaWQpOwogCWlmIChidWYpIHsKIAkJY3gxOF9idWZfc3luY19mb3JfY3B1KHMsIGJ1Zik7CkBAIC04MSw3ICs4Miw3IEBACiAJCQlzZXRfYml0KENYMThfRl9CX05FRURfQlVGX1NXQVAsICZidWYtPmJfZmxhZ3MpOwogCX0gZWxzZSB7CiAJCUNYMThfV0FSTigiQ291bGQgbm90IGZpbmQgYnVmICVkIGZvciBzdHJlYW0gJXNcbiIsCi0JCQkJcmVhZF9lbmMob2ZmKSwgcy0+bmFtZSk7CisJCQkJY3gxOF9yZWFkX2VuYyhjeCwgb2ZmKSwgcy0+bmFtZSk7CiAJfQogCW1iLT5lcnJvciA9IDA7CiAJbWItPmNtZCA9IDA7CkBAIC05Nyw4ICs5OCw4IEBACiAJY2hhciAqcDsKIAogCWlmIChtYi0+YXJnc1sxXSkgewotCQlzZXR1cF9wYWdlKG1iLT5hcmdzWzFdKTsKLQkJbWVtY3B5X2Zyb21pbyhzdHIsIGN4LT5lbmNfbWVtICsgbWItPmFyZ3NbMV0sIDI1Mik7CisJCWN4MThfc2V0dXBfcGFnZShjeCwgbWItPmFyZ3NbMV0pOworCQljeDE4X21lbWNweV9mcm9taW8oY3gsIHN0ciwgY3gtPmVuY19tZW0gKyBtYi0+YXJnc1sxXSwgMjUyKTsKIAkJc3RyWzI1Ml0gPSAwOwogCX0KIAljeDE4X21iX2FjayhjeCwgbWIpOwpAQCAtMTEzLDcgKzExNCw3IEBACiAJc3RydWN0IGN4MThfbWFpbGJveCBtYjsKIAogCWlmIChzdzEgJiBJUlFfQ1BVX1RPX0VQVSkgewotCQltZW1jcHlfZnJvbWlvKCZtYiwgJmN4LT5zY2ItPmNwdTJlcHVfbWIsIHNpemVvZihtYikpOworCQljeDE4X21lbWNweV9mcm9taW8oY3gsICZtYiwgJmN4LT5zY2ItPmNwdTJlcHVfbWIsIHNpemVvZihtYikpOwogCQltYi5lcnJvciA9IDA7CiAKIAkJc3dpdGNoIChtYi5jbWQpIHsKQEAgLTE0MSwxNiArMTQyLDE2IEBACiAKIAlzcGluX2xvY2soJmN4LT5kbWFfcmVnX2xvY2spOwogCi0JaHcyX21hc2sgPSByZWFkX3JlZyhIVzJfSU5UX01BU0s1X1BDSSk7Ci0JaHcyID0gcmVhZF9yZWcoSFcyX0lOVF9DTFJfU1RBVFVTKSAmIGh3Ml9tYXNrOwotCXN3Ml9tYXNrID0gcmVhZF9yZWcoU1cyX0lOVF9FTkFCTEVfUENJKSB8IElSUV9FUFVfVE9fSFBVX0FDSzsKLQlzdzIgPSByZWFkX3JlZyhTVzJfSU5UX1NUQVRVUykgJiBzdzJfbWFzazsKLQlzdzFfbWFzayA9IHJlYWRfcmVnKFNXMV9JTlRfRU5BQkxFX1BDSSkgfCBJUlFfRVBVX1RPX0hQVTsKLQlzdzEgPSByZWFkX3JlZyhTVzFfSU5UX1NUQVRVUykgJiBzdzFfbWFzazsKKwlodzJfbWFzayA9IGN4MThfcmVhZF9yZWcoY3gsIEhXMl9JTlRfTUFTSzVfUENJKTsKKwlodzIgPSBjeDE4X3JlYWRfcmVnKGN4LCBIVzJfSU5UX0NMUl9TVEFUVVMpICYgaHcyX21hc2s7CisJc3cyX21hc2sgPSBjeDE4X3JlYWRfcmVnKGN4LCBTVzJfSU5UX0VOQUJMRV9QQ0kpIHwgSVJRX0VQVV9UT19IUFVfQUNLOworCXN3MiA9IGN4MThfcmVhZF9yZWcoY3gsIFNXMl9JTlRfU1RBVFVTKSAmIHN3Ml9tYXNrOworCXN3MV9tYXNrID0gY3gxOF9yZWFkX3JlZyhjeCwgU1cxX0lOVF9FTkFCTEVfUENJKSB8IElSUV9FUFVfVE9fSFBVOworCXN3MSA9IGN4MThfcmVhZF9yZWcoY3gsIFNXMV9JTlRfU1RBVFVTKSAmIHN3MV9tYXNrOwogCi0Jd3JpdGVfcmVnKHN3MiZzdzJfbWFzaywgU1cyX0lOVF9TVEFUVVMpOwotCXdyaXRlX3JlZyhzdzEmc3cxX21hc2ssIFNXMV9JTlRfU1RBVFVTKTsKLQl3cml0ZV9yZWcoaHcyJmh3Ml9tYXNrLCBIVzJfSU5UX0NMUl9TVEFUVVMpOworCWN4MThfd3JpdGVfcmVnKGN4LCBzdzImc3cyX21hc2ssIFNXMl9JTlRfU1RBVFVTKTsKKwljeDE4X3dyaXRlX3JlZyhjeCwgc3cxJnN3MV9tYXNrLCBTVzFfSU5UX1NUQVRVUyk7CisJY3gxOF93cml0ZV9yZWcoY3gsIGh3MiZodzJfbWFzaywgSFcyX0lOVF9DTFJfU1RBVFVTKTsKIAogCWlmIChzdzEgfHwgc3cyIHx8IGh3MikKIAkJQ1gxOF9ERUJVR19ISV9JUlEoIlNXMTogJXggIFNXMjogJXggIEhXMjogJXhcbiIsIHN3MSwgc3cyLCBodzIpOwpAQCAtMTYxLDE1ICsxNjIsMTUgQEAKIAkqLwogCiAJaWYgKHN3MikgewotCQlpZiAoc3cyICYgKHJlYWRsKCZjeC0+c2NiLT5jcHUyaHB1X2lycV9hY2spIHwKLQkJCSAgIHJlYWRsKCZjeC0+c2NiLT5jcHUyZXB1X2lycV9hY2spKSkKKwkJaWYgKHN3MiAmIChjeDE4X3JlYWRsKGN4LCAmY3gtPnNjYi0+Y3B1MmhwdV9pcnFfYWNrKSB8CisJCQkgICBjeDE4X3JlYWRsKGN4LCAmY3gtPnNjYi0+Y3B1MmVwdV9pcnFfYWNrKSkpCiAJCQl3YWtlX3VwKCZjeC0+bWJfY3B1X3dhaXRxKTsKLQkJaWYgKHN3MiAmIChyZWFkbCgmY3gtPnNjYi0+YXB1MmhwdV9pcnFfYWNrKSB8Ci0JCQkgICByZWFkbCgmY3gtPnNjYi0+YXB1MmVwdV9pcnFfYWNrKSkpCisJCWlmIChzdzIgJiAoY3gxOF9yZWFkbChjeCwgJmN4LT5zY2ItPmFwdTJocHVfaXJxX2FjaykgfAorCQkJICAgY3gxOF9yZWFkbChjeCwgJmN4LT5zY2ItPmFwdTJlcHVfaXJxX2FjaykpKQogCQkJd2FrZV91cCgmY3gtPm1iX2FwdV93YWl0cSk7Ci0JCWlmIChzdzIgJiByZWFkbCgmY3gtPnNjYi0+ZXB1MmhwdV9pcnFfYWNrKSkKKwkJaWYgKHN3MiAmIGN4MThfcmVhZGwoY3gsICZjeC0+c2NiLT5lcHUyaHB1X2lycV9hY2spKQogCQkJd2FrZV91cCgmY3gtPm1iX2VwdV93YWl0cSk7Ci0JCWlmIChzdzIgJiByZWFkbCgmY3gtPnNjYi0+aHB1MmVwdV9pcnFfYWNrKSkKKwkJaWYgKHN3MiAmIGN4MThfcmVhZGwoY3gsICZjeC0+c2NiLT5ocHUyZXB1X2lycV9hY2spKQogCQkJd2FrZV91cCgmY3gtPm1iX2hwdV93YWl0cSk7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1tYWlsYm94LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1tYWlsYm94LmMKaW5kZXggOTMxNzc1MS4uOWQxOGRkMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtbWFpbGJveC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LW1haWxib3guYwpAQCAtMjIsNiArMjIsNyBAQAogI2luY2x1ZGUgPHN0ZGFyZy5oPgogCiAjaW5jbHVkZSAiY3gxOC1kcml2ZXIuaCIKKyNpbmNsdWRlICJjeDE4LWlvLmgiCiAjaW5jbHVkZSAiY3gxOC1zY2IuaCIKICNpbmNsdWRlICJjeDE4LWlycS5oIgogI2luY2x1ZGUgImN4MTgtbWFpbGJveC5oIgpAQCAtODIsNiArODMsNyBAQAogCUFQSV9FTlRSWShDUFUsIENYMThfQ1BVX0RFX1NFVF9NRExfQUNLLAkJCTApLAogCUFQSV9FTlRSWShDUFUsIENYMThfQ1BVX0RFX1NFVF9NREwsCQkJQVBJX0ZBU1QpLAogCUFQSV9FTlRSWShDUFUsIENYMThfQVBVX1JFU0VUQUksCQkJQVBJX0ZBU1QpLAorCUFQSV9FTlRSWShDUFUsIENYMThfQ1BVX0RFX1JFTEVBU0VfTURMLAkJCTApLAogCUFQSV9FTlRSWSgwLCAwLAkJCQkJCTApLAogfTsKIApAQCAtMTA1LDIwICsxMDcsMjAgQEAKIAlzd2l0Y2ggKHJwdSkgewogCWNhc2UgQVBVOgogCQltYiA9ICZjeC0+c2NiLT5lcHUyYXB1X21iOwotCQkqc3RhdGUgPSByZWFkbCgmY3gtPnNjYi0+YXB1X3N0YXRlKTsKLQkJKmlycSA9IHJlYWRsKCZjeC0+c2NiLT5lcHUyYXB1X2lycSk7CisJCSpzdGF0ZSA9IGN4MThfcmVhZGwoY3gsICZjeC0+c2NiLT5hcHVfc3RhdGUpOworCQkqaXJxID0gY3gxOF9yZWFkbChjeCwgJmN4LT5zY2ItPmVwdTJhcHVfaXJxKTsKIAkJYnJlYWs7CiAKIAljYXNlIENQVToKIAkJbWIgPSAmY3gtPnNjYi0+ZXB1MmNwdV9tYjsKLQkJKnN0YXRlID0gcmVhZGwoJmN4LT5zY2ItPmNwdV9zdGF0ZSk7Ci0JCSppcnEgPSByZWFkbCgmY3gtPnNjYi0+ZXB1MmNwdV9pcnEpOworCQkqc3RhdGUgPSBjeDE4X3JlYWRsKGN4LCAmY3gtPnNjYi0+Y3B1X3N0YXRlKTsKKwkJKmlycSA9IGN4MThfcmVhZGwoY3gsICZjeC0+c2NiLT5lcHUyY3B1X2lycSk7CiAJCWJyZWFrOwogCiAJY2FzZSBIUFU6CiAJCW1iID0gJmN4LT5zY2ItPmVwdTJocHVfbWI7Ci0JCSpzdGF0ZSA9IHJlYWRsKCZjeC0+c2NiLT5ocHVfc3RhdGUpOwotCQkqaXJxID0gcmVhZGwoJmN4LT5zY2ItPmVwdTJocHVfaXJxKTsKKwkJKnN0YXRlID0gY3gxOF9yZWFkbChjeCwgJmN4LT5zY2ItPmhwdV9zdGF0ZSk7CisJCSppcnEgPSBjeDE4X3JlYWRsKGN4LCAmY3gtPnNjYi0+ZXB1MmhwdV9pcnEpOwogCQlicmVhazsKIAl9CiAKQEAgLTEyNiw4ICsxMjgsOCBAQAogCQlyZXR1cm4gbWI7CiAKIAlkbyB7Ci0JCSpyZXEgPSByZWFkbCgmbWItPnJlcXVlc3QpOwotCQlhY2sgPSByZWFkbCgmbWItPmFjayk7CisJCSpyZXEgPSBjeDE4X3JlYWRsKGN4LCAmbWItPnJlcXVlc3QpOworCQlhY2sgPSBjeDE4X3JlYWRsKGN4LCAmbWItPmFjayk7CiAJCXdhaXRfY291bnQrKzsKIAl9IHdoaWxlICgqcmVxICE9IGFjayAmJiB3YWl0X2NvdW50IDwgNjAwKTsKIApAQCAtMTcyLDkgKzE3NCw5IEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCXNldHVwX3BhZ2UoU0NCX09GRlNFVCk7Ci0Jd3JpdGVfc3luYyhtYi0+cmVxdWVzdCwgJmFja19tYi0+YWNrKTsKLQl3cml0ZV9yZWcoYWNrX2lycSwgU1cyX0lOVF9TRVQpOworCWN4MThfc2V0dXBfcGFnZShjeCwgU0NCX09GRlNFVCk7CisJY3gxOF93cml0ZV9zeW5jKGN4LCBtYi0+cmVxdWVzdCwgJmFja19tYi0+YWNrKTsKKwljeDE4X3dyaXRlX3JlZyhjeCwgYWNrX2lycSwgU1cyX0lOVF9TRVQpOwogCXJldHVybiAwOwogfQogCkBAIC0xOTksNyArMjAxLDcgQEAKIAkJQ1gxOF9ERUJVR19ISV9BUEkoIiVzXG4iLCBpbmZvLT5uYW1lKTsKIAllbHNlCiAJCUNYMThfREVCVUdfQVBJKCIlc1xuIiwgaW5mby0+bmFtZSk7Ci0Jc2V0dXBfcGFnZShTQ0JfT0ZGU0VUKTsKKwljeDE4X3NldHVwX3BhZ2UoY3gsIFNDQl9PRkZTRVQpOwogCW1iID0gY3gxOF9tYl9pc19jb21wbGV0ZShjeCwgaW5mby0+cnB1LCAmc3RhdGUsICZpcnEsICZyZXEpOwogCiAJaWYgKG1iID09IE5VTEwpIHsKQEAgLTIwOCwxMSArMjEwLDExIEBACiAJfQogCiAJb2xkcmVxID0gcmVxIC0gMTsKLQl3cml0ZWwoY21kLCAmbWItPmNtZCk7CisJY3gxOF93cml0ZWwoY3gsIGNtZCwgJm1iLT5jbWQpOwogCWZvciAoaSA9IDA7IGkgPCBhcmdzOyBpKyspCi0JCXdyaXRlbChkYXRhW2ldLCAmbWItPmFyZ3NbaV0pOwotCXdyaXRlbCgwLCAmbWItPmVycm9yKTsKLQl3cml0ZWwocmVxLCAmbWItPnJlcXVlc3QpOworCQljeDE4X3dyaXRlbChjeCwgZGF0YVtpXSwgJm1iLT5hcmdzW2ldKTsKKwljeDE4X3dyaXRlbChjeCwgMCwgJm1iLT5lcnJvcik7CisJY3gxOF93cml0ZWwoY3gsIHJlcSwgJm1iLT5yZXF1ZXN0KTsKIAogCXN3aXRjaCAoaW5mby0+cnB1KSB7CiAJY2FzZSBBUFU6IHdhaXRxID0gJmN4LT5tYl9hcHVfd2FpdHE7IGJyZWFrOwpAQCAtMjIzLDkgKzIyNSwxMCBAQAogCX0KIAlpZiAoaW5mby0+ZmxhZ3MgJiBBUElfRkFTVCkKIAkJdGltZW91dCAvPSAyOwotCXdyaXRlX3JlZyhpcnEsIFNXMV9JTlRfU0VUKTsKKwljeDE4X3dyaXRlX3JlZyhjeCwgaXJxLCBTVzFfSU5UX1NFVCk7CiAKLQl3aGlsZSAoIXNpZyAmJiByZWFkbCgmbWItPmFjaykgIT0gcmVhZGwoJm1iLT5yZXF1ZXN0KSAmJiBjbnQgPCA2NjApIHsKKwl3aGlsZSAoIXNpZyAmJiBjeDE4X3JlYWRsKGN4LCAmbWItPmFjaykgIT0gY3gxOF9yZWFkbChjeCwgJm1iLT5yZXF1ZXN0KQorCSAgICAgICAmJiBjbnQgPCA2NjApIHsKIAkJaWYgKGNudCA+IDIwMCAmJiAhaW5fYXRvbWljKCkpCiAJCQlzaWcgPSBjeDE4X21zbGVlcF90aW1lb3V0KDEwLCAxKTsKIAkJY250Kys7CkBAIC0yMzMsMTMgKzIzNiwxMyBAQAogCWlmIChzaWcpCiAJCXJldHVybiAtRUlOVFI7CiAJaWYgKGNudCA9PSA2NjApIHsKLQkJd3JpdGVsKG9sZHJlcSwgJm1iLT5yZXF1ZXN0KTsKKwkJY3gxOF93cml0ZWwoY3gsIG9sZHJlcSwgJm1iLT5yZXF1ZXN0KTsKIAkJQ1gxOF9FUlIoIm1iICVzIGZhaWxlZFxuIiwgaW5mby0+bmFtZSk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAlmb3IgKGkgPSAwOyBpIDwgTUFYX01CX0FSR1VNRU5UUzsgaSsrKQotCQlkYXRhW2ldID0gcmVhZGwoJm1iLT5hcmdzW2ldKTsKLQllcnIgPSByZWFkbCgmbWItPmVycm9yKTsKKwkJZGF0YVtpXSA9IGN4MThfcmVhZGwoY3gsICZtYi0+YXJnc1tpXSk7CisJZXJyID0gY3gxOF9yZWFkbChjeCwgJm1iLT5lcnJvcik7CiAJaWYgKCFpbl9hdG9taWMoKSAmJiAoaW5mby0+ZmxhZ3MgJiBBUElfU0xPVykpCiAJCWN4MThfbXNsZWVwX3RpbWVvdXQoMzAwLCAwKTsKIAlpZiAoZXJyKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtcXVldWUuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LXF1ZXVlLmMKaW5kZXggZGJlNzkyYS4uYTMzYmEwNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtcXVldWUuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1xdWV1ZS5jCkBAIC0zNyw4ICszNyw3IEBACiB2b2lkIGN4MThfcXVldWVfaW5pdChzdHJ1Y3QgY3gxOF9xdWV1ZSAqcSkKIHsKIAlJTklUX0xJU1RfSEVBRCgmcS0+bGlzdCk7Ci0JcS0+YnVmZmVycyA9IDA7Ci0JcS0+bGVuZ3RoID0gMDsKKwlhdG9taWNfc2V0KCZxLT5idWZmZXJzLCAwKTsKIAlxLT5ieXRlc3VzZWQgPSAwOwogfQogCkBAIC01NSw4ICs1NCw3IEBACiAJfQogCXNwaW5fbG9ja19pcnFzYXZlKCZzLT5xbG9jaywgZmxhZ3MpOwogCWxpc3RfYWRkX3RhaWwoJmJ1Zi0+bGlzdCwgJnEtPmxpc3QpOwotCXEtPmJ1ZmZlcnMrKzsKLQlxLT5sZW5ndGggKz0gcy0+YnVmX3NpemU7CisJYXRvbWljX2luYygmcS0+YnVmZmVycyk7CiAJcS0+Ynl0ZXN1c2VkICs9IGJ1Zi0+Ynl0ZXN1c2VkIC0gYnVmLT5yZWFkcG9zOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnMtPnFsb2NrLCBmbGFncyk7CiB9CkBAIC03MCw4ICs2OCw3IEBACiAJaWYgKCFsaXN0X2VtcHR5KCZxLT5saXN0KSkgewogCQlidWYgPSBsaXN0X2VudHJ5KHEtPmxpc3QubmV4dCwgc3RydWN0IGN4MThfYnVmZmVyLCBsaXN0KTsKIAkJbGlzdF9kZWxfaW5pdChxLT5saXN0Lm5leHQpOwotCQlxLT5idWZmZXJzLS07Ci0JCXEtPmxlbmd0aCAtPSBzLT5idWZfc2l6ZTsKKwkJYXRvbWljX2RlYygmcS0+YnVmZmVycyk7CiAJCXEtPmJ5dGVzdXNlZCAtPSBidWYtPmJ5dGVzdXNlZCAtIGJ1Zi0+cmVhZHBvczsKIAl9CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcy0+cWxvY2ssIGZsYWdzKTsKQEAgLTk1LDEwICs5Miw4IEBACiAJCS8qIHRoZSB0cmFuc3BvcnQgYnVmZmVycyBhcmUgaGFuZGxlZCBkaWZmZXJlbnRseSwKIAkJICAgdGhleSBhcmUgbm90IG1vdmVkIHRvIHRoZSBmdWxsIHF1ZXVlICovCiAJCWlmIChzLT50eXBlICE9IENYMThfRU5DX1NUUkVBTV9UWVBFX1RTKSB7Ci0JCQlzLT5xX2ZyZWUuYnVmZmVycy0tOwotCQkJcy0+cV9mcmVlLmxlbmd0aCAtPSBzLT5idWZfc2l6ZTsKLQkJCXMtPnFfZnVsbC5idWZmZXJzKys7Ci0JCQlzLT5xX2Z1bGwubGVuZ3RoICs9IHMtPmJ1Zl9zaXplOworCQkJYXRvbWljX2RlYygmcy0+cV9mcmVlLmJ1ZmZlcnMpOworCQkJYXRvbWljX2luYygmcy0+cV9mdWxsLmJ1ZmZlcnMpOwogCQkJcy0+cV9mdWxsLmJ5dGVzdXNlZCArPSBidWYtPmJ5dGVzdXNlZDsKIAkJCWxpc3RfbW92ZV90YWlsKCZidWYtPmxpc3QsICZzLT5xX2Z1bGwubGlzdCk7CiAJCX0KQEAgLTEyNCw4ICsxMTksNyBAQAogCQlidWYgPSBsaXN0X2VudHJ5KHEtPmxpc3QubmV4dCwgc3RydWN0IGN4MThfYnVmZmVyLCBsaXN0KTsKIAkJbGlzdF9tb3ZlX3RhaWwocS0+bGlzdC5uZXh0LCAmcy0+cV9mcmVlLmxpc3QpOwogCQlidWYtPmJ5dGVzdXNlZCA9IGJ1Zi0+cmVhZHBvcyA9IGJ1Zi0+Yl9mbGFncyA9IDA7Ci0JCXMtPnFfZnJlZS5idWZmZXJzKys7Ci0JCXMtPnFfZnJlZS5sZW5ndGggKz0gcy0+YnVmX3NpemU7CisJCWF0b21pY19pbmMoJnMtPnFfZnJlZS5idWZmZXJzKTsKIAl9CiAJY3gxOF9xdWV1ZV9pbml0KHEpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnMtPnFsb2NrLCBmbGFncyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1zY2IuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LXNjYi5jCmluZGV4IDMwYmM4MDMuLmY1NmQzNzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LXNjYi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LXNjYi5jCkBAIC0yMCwxMDIgKzIwLDEwMyBAQAogICovCiAKICNpbmNsdWRlICJjeDE4LWRyaXZlci5oIgorI2luY2x1ZGUgImN4MTgtaW8uaCIKICNpbmNsdWRlICJjeDE4LXNjYi5oIgogCiB2b2lkIGN4MThfaW5pdF9zY2Ioc3RydWN0IGN4MTggKmN4KQogewotCXNldHVwX3BhZ2UoU0NCX09GRlNFVCk7Ci0JbWVtc2V0X2lvKGN4LT5zY2IsIDAsIDB4MTAwMDApOworCWN4MThfc2V0dXBfcGFnZShjeCwgU0NCX09GRlNFVCk7CisJY3gxOF9tZW1zZXRfaW8oY3gsIGN4LT5zY2IsIDAsIDB4MTAwMDApOwogCi0Jd3JpdGVsKElSUV9BUFVfVE9fQ1BVLCAgICAgJmN4LT5zY2ItPmFwdTJjcHVfaXJxKTsKLQl3cml0ZWwoSVJRX0NQVV9UT19BUFVfQUNLLCAmY3gtPnNjYi0+Y3B1MmFwdV9pcnFfYWNrKTsKLQl3cml0ZWwoSVJRX0hQVV9UT19DUFUsICAgICAmY3gtPnNjYi0+aHB1MmNwdV9pcnEpOwotCXdyaXRlbChJUlFfQ1BVX1RPX0hQVV9BQ0ssICZjeC0+c2NiLT5jcHUyaHB1X2lycV9hY2spOwotCXdyaXRlbChJUlFfUFBVX1RPX0NQVSwgICAgICZjeC0+c2NiLT5wcHUyY3B1X2lycSk7Ci0Jd3JpdGVsKElSUV9DUFVfVE9fUFBVX0FDSywgJmN4LT5zY2ItPmNwdTJwcHVfaXJxX2Fjayk7Ci0Jd3JpdGVsKElSUV9FUFVfVE9fQ1BVLCAgICAgJmN4LT5zY2ItPmVwdTJjcHVfaXJxKTsKLQl3cml0ZWwoSVJRX0NQVV9UT19FUFVfQUNLLCAmY3gtPnNjYi0+Y3B1MmVwdV9pcnFfYWNrKTsKKwljeDE4X3dyaXRlbChjeCwgSVJRX0FQVV9UT19DUFUsICAgICAmY3gtPnNjYi0+YXB1MmNwdV9pcnEpOworCWN4MThfd3JpdGVsKGN4LCBJUlFfQ1BVX1RPX0FQVV9BQ0ssICZjeC0+c2NiLT5jcHUyYXB1X2lycV9hY2spOworCWN4MThfd3JpdGVsKGN4LCBJUlFfSFBVX1RPX0NQVSwgICAgICZjeC0+c2NiLT5ocHUyY3B1X2lycSk7CisJY3gxOF93cml0ZWwoY3gsIElSUV9DUFVfVE9fSFBVX0FDSywgJmN4LT5zY2ItPmNwdTJocHVfaXJxX2Fjayk7CisJY3gxOF93cml0ZWwoY3gsIElSUV9QUFVfVE9fQ1BVLCAgICAgJmN4LT5zY2ItPnBwdTJjcHVfaXJxKTsKKwljeDE4X3dyaXRlbChjeCwgSVJRX0NQVV9UT19QUFVfQUNLLCAmY3gtPnNjYi0+Y3B1MnBwdV9pcnFfYWNrKTsKKwljeDE4X3dyaXRlbChjeCwgSVJRX0VQVV9UT19DUFUsICAgICAmY3gtPnNjYi0+ZXB1MmNwdV9pcnEpOworCWN4MThfd3JpdGVsKGN4LCBJUlFfQ1BVX1RPX0VQVV9BQ0ssICZjeC0+c2NiLT5jcHUyZXB1X2lycV9hY2spOwogCi0Jd3JpdGVsKElSUV9DUFVfVE9fQVBVLCAgICAgJmN4LT5zY2ItPmNwdTJhcHVfaXJxKTsKLQl3cml0ZWwoSVJRX0FQVV9UT19DUFVfQUNLLCAmY3gtPnNjYi0+YXB1MmNwdV9pcnFfYWNrKTsKLQl3cml0ZWwoSVJRX0hQVV9UT19BUFUsICAgICAmY3gtPnNjYi0+aHB1MmFwdV9pcnEpOwotCXdyaXRlbChJUlFfQVBVX1RPX0hQVV9BQ0ssICZjeC0+c2NiLT5hcHUyaHB1X2lycV9hY2spOwotCXdyaXRlbChJUlFfUFBVX1RPX0FQVSwgICAgICZjeC0+c2NiLT5wcHUyYXB1X2lycSk7Ci0Jd3JpdGVsKElSUV9BUFVfVE9fUFBVX0FDSywgJmN4LT5zY2ItPmFwdTJwcHVfaXJxX2Fjayk7Ci0Jd3JpdGVsKElSUV9FUFVfVE9fQVBVLCAgICAgJmN4LT5zY2ItPmVwdTJhcHVfaXJxKTsKLQl3cml0ZWwoSVJRX0FQVV9UT19FUFVfQUNLLCAmY3gtPnNjYi0+YXB1MmVwdV9pcnFfYWNrKTsKKwljeDE4X3dyaXRlbChjeCwgSVJRX0NQVV9UT19BUFUsICAgICAmY3gtPnNjYi0+Y3B1MmFwdV9pcnEpOworCWN4MThfd3JpdGVsKGN4LCBJUlFfQVBVX1RPX0NQVV9BQ0ssICZjeC0+c2NiLT5hcHUyY3B1X2lycV9hY2spOworCWN4MThfd3JpdGVsKGN4LCBJUlFfSFBVX1RPX0FQVSwgICAgICZjeC0+c2NiLT5ocHUyYXB1X2lycSk7CisJY3gxOF93cml0ZWwoY3gsIElSUV9BUFVfVE9fSFBVX0FDSywgJmN4LT5zY2ItPmFwdTJocHVfaXJxX2Fjayk7CisJY3gxOF93cml0ZWwoY3gsIElSUV9QUFVfVE9fQVBVLCAgICAgJmN4LT5zY2ItPnBwdTJhcHVfaXJxKTsKKwljeDE4X3dyaXRlbChjeCwgSVJRX0FQVV9UT19QUFVfQUNLLCAmY3gtPnNjYi0+YXB1MnBwdV9pcnFfYWNrKTsKKwljeDE4X3dyaXRlbChjeCwgSVJRX0VQVV9UT19BUFUsICAgICAmY3gtPnNjYi0+ZXB1MmFwdV9pcnEpOworCWN4MThfd3JpdGVsKGN4LCBJUlFfQVBVX1RPX0VQVV9BQ0ssICZjeC0+c2NiLT5hcHUyZXB1X2lycV9hY2spOwogCi0Jd3JpdGVsKElSUV9DUFVfVE9fSFBVLCAgICAgJmN4LT5zY2ItPmNwdTJocHVfaXJxKTsKLQl3cml0ZWwoSVJRX0hQVV9UT19DUFVfQUNLLCAmY3gtPnNjYi0+aHB1MmNwdV9pcnFfYWNrKTsKLQl3cml0ZWwoSVJRX0FQVV9UT19IUFUsICAgICAmY3gtPnNjYi0+YXB1MmhwdV9pcnEpOwotCXdyaXRlbChJUlFfSFBVX1RPX0FQVV9BQ0ssICZjeC0+c2NiLT5ocHUyYXB1X2lycV9hY2spOwotCXdyaXRlbChJUlFfUFBVX1RPX0hQVSwgICAgICZjeC0+c2NiLT5wcHUyaHB1X2lycSk7Ci0Jd3JpdGVsKElSUV9IUFVfVE9fUFBVX0FDSywgJmN4LT5zY2ItPmhwdTJwcHVfaXJxX2Fjayk7Ci0Jd3JpdGVsKElSUV9FUFVfVE9fSFBVLCAgICAgJmN4LT5zY2ItPmVwdTJocHVfaXJxKTsKLQl3cml0ZWwoSVJRX0hQVV9UT19FUFVfQUNLLCAmY3gtPnNjYi0+aHB1MmVwdV9pcnFfYWNrKTsKKwljeDE4X3dyaXRlbChjeCwgSVJRX0NQVV9UT19IUFUsICAgICAmY3gtPnNjYi0+Y3B1MmhwdV9pcnEpOworCWN4MThfd3JpdGVsKGN4LCBJUlFfSFBVX1RPX0NQVV9BQ0ssICZjeC0+c2NiLT5ocHUyY3B1X2lycV9hY2spOworCWN4MThfd3JpdGVsKGN4LCBJUlFfQVBVX1RPX0hQVSwgICAgICZjeC0+c2NiLT5hcHUyaHB1X2lycSk7CisJY3gxOF93cml0ZWwoY3gsIElSUV9IUFVfVE9fQVBVX0FDSywgJmN4LT5zY2ItPmhwdTJhcHVfaXJxX2Fjayk7CisJY3gxOF93cml0ZWwoY3gsIElSUV9QUFVfVE9fSFBVLCAgICAgJmN4LT5zY2ItPnBwdTJocHVfaXJxKTsKKwljeDE4X3dyaXRlbChjeCwgSVJRX0hQVV9UT19QUFVfQUNLLCAmY3gtPnNjYi0+aHB1MnBwdV9pcnFfYWNrKTsKKwljeDE4X3dyaXRlbChjeCwgSVJRX0VQVV9UT19IUFUsICAgICAmY3gtPnNjYi0+ZXB1MmhwdV9pcnEpOworCWN4MThfd3JpdGVsKGN4LCBJUlFfSFBVX1RPX0VQVV9BQ0ssICZjeC0+c2NiLT5ocHUyZXB1X2lycV9hY2spOwogCi0Jd3JpdGVsKElSUV9DUFVfVE9fUFBVLCAgICAgJmN4LT5zY2ItPmNwdTJwcHVfaXJxKTsKLQl3cml0ZWwoSVJRX1BQVV9UT19DUFVfQUNLLCAmY3gtPnNjYi0+cHB1MmNwdV9pcnFfYWNrKTsKLQl3cml0ZWwoSVJRX0FQVV9UT19QUFUsICAgICAmY3gtPnNjYi0+YXB1MnBwdV9pcnEpOwotCXdyaXRlbChJUlFfUFBVX1RPX0FQVV9BQ0ssICZjeC0+c2NiLT5wcHUyYXB1X2lycV9hY2spOwotCXdyaXRlbChJUlFfSFBVX1RPX1BQVSwgICAgICZjeC0+c2NiLT5ocHUycHB1X2lycSk7Ci0Jd3JpdGVsKElSUV9QUFVfVE9fSFBVX0FDSywgJmN4LT5zY2ItPnBwdTJocHVfaXJxX2Fjayk7Ci0Jd3JpdGVsKElSUV9FUFVfVE9fUFBVLCAgICAgJmN4LT5zY2ItPmVwdTJwcHVfaXJxKTsKLQl3cml0ZWwoSVJRX1BQVV9UT19FUFVfQUNLLCAmY3gtPnNjYi0+cHB1MmVwdV9pcnFfYWNrKTsKKwljeDE4X3dyaXRlbChjeCwgSVJRX0NQVV9UT19QUFUsICAgICAmY3gtPnNjYi0+Y3B1MnBwdV9pcnEpOworCWN4MThfd3JpdGVsKGN4LCBJUlFfUFBVX1RPX0NQVV9BQ0ssICZjeC0+c2NiLT5wcHUyY3B1X2lycV9hY2spOworCWN4MThfd3JpdGVsKGN4LCBJUlFfQVBVX1RPX1BQVSwgICAgICZjeC0+c2NiLT5hcHUycHB1X2lycSk7CisJY3gxOF93cml0ZWwoY3gsIElSUV9QUFVfVE9fQVBVX0FDSywgJmN4LT5zY2ItPnBwdTJhcHVfaXJxX2Fjayk7CisJY3gxOF93cml0ZWwoY3gsIElSUV9IUFVfVE9fUFBVLCAgICAgJmN4LT5zY2ItPmhwdTJwcHVfaXJxKTsKKwljeDE4X3dyaXRlbChjeCwgSVJRX1BQVV9UT19IUFVfQUNLLCAmY3gtPnNjYi0+cHB1MmhwdV9pcnFfYWNrKTsKKwljeDE4X3dyaXRlbChjeCwgSVJRX0VQVV9UT19QUFUsICAgICAmY3gtPnNjYi0+ZXB1MnBwdV9pcnEpOworCWN4MThfd3JpdGVsKGN4LCBJUlFfUFBVX1RPX0VQVV9BQ0ssICZjeC0+c2NiLT5wcHUyZXB1X2lycV9hY2spOwogCi0Jd3JpdGVsKElSUV9DUFVfVE9fRVBVLCAgICAgJmN4LT5zY2ItPmNwdTJlcHVfaXJxKTsKLQl3cml0ZWwoSVJRX0VQVV9UT19DUFVfQUNLLCAmY3gtPnNjYi0+ZXB1MmNwdV9pcnFfYWNrKTsKLQl3cml0ZWwoSVJRX0FQVV9UT19FUFUsICAgICAmY3gtPnNjYi0+YXB1MmVwdV9pcnEpOwotCXdyaXRlbChJUlFfRVBVX1RPX0FQVV9BQ0ssICZjeC0+c2NiLT5lcHUyYXB1X2lycV9hY2spOwotCXdyaXRlbChJUlFfSFBVX1RPX0VQVSwgICAgICZjeC0+c2NiLT5ocHUyZXB1X2lycSk7Ci0Jd3JpdGVsKElSUV9FUFVfVE9fSFBVX0FDSywgJmN4LT5zY2ItPmVwdTJocHVfaXJxX2Fjayk7Ci0Jd3JpdGVsKElSUV9QUFVfVE9fRVBVLCAgICAgJmN4LT5zY2ItPnBwdTJlcHVfaXJxKTsKLQl3cml0ZWwoSVJRX0VQVV9UT19QUFVfQUNLLCAmY3gtPnNjYi0+ZXB1MnBwdV9pcnFfYWNrKTsKKwljeDE4X3dyaXRlbChjeCwgSVJRX0NQVV9UT19FUFUsICAgICAmY3gtPnNjYi0+Y3B1MmVwdV9pcnEpOworCWN4MThfd3JpdGVsKGN4LCBJUlFfRVBVX1RPX0NQVV9BQ0ssICZjeC0+c2NiLT5lcHUyY3B1X2lycV9hY2spOworCWN4MThfd3JpdGVsKGN4LCBJUlFfQVBVX1RPX0VQVSwgICAgICZjeC0+c2NiLT5hcHUyZXB1X2lycSk7CisJY3gxOF93cml0ZWwoY3gsIElSUV9FUFVfVE9fQVBVX0FDSywgJmN4LT5zY2ItPmVwdTJhcHVfaXJxX2Fjayk7CisJY3gxOF93cml0ZWwoY3gsIElSUV9IUFVfVE9fRVBVLCAgICAgJmN4LT5zY2ItPmhwdTJlcHVfaXJxKTsKKwljeDE4X3dyaXRlbChjeCwgSVJRX0VQVV9UT19IUFVfQUNLLCAmY3gtPnNjYi0+ZXB1MmhwdV9pcnFfYWNrKTsKKwljeDE4X3dyaXRlbChjeCwgSVJRX1BQVV9UT19FUFUsICAgICAmY3gtPnNjYi0+cHB1MmVwdV9pcnEpOworCWN4MThfd3JpdGVsKGN4LCBJUlFfRVBVX1RPX1BQVV9BQ0ssICZjeC0+c2NiLT5lcHUycHB1X2lycV9hY2spOwogCi0Jd3JpdGVsKFNDQl9PRkZTRVQgKyBvZmZzZXRvZihzdHJ1Y3QgY3gxOF9zY2IsIGFwdTJjcHVfbWIpLAorCWN4MThfd3JpdGVsKGN4LCBTQ0JfT0ZGU0VUICsgb2Zmc2V0b2Yoc3RydWN0IGN4MThfc2NiLCBhcHUyY3B1X21iKSwKIAkJCSZjeC0+c2NiLT5hcHUyY3B1X21iX29mZnNldCk7Ci0Jd3JpdGVsKFNDQl9PRkZTRVQgKyBvZmZzZXRvZihzdHJ1Y3QgY3gxOF9zY2IsIGhwdTJjcHVfbWIpLAorCWN4MThfd3JpdGVsKGN4LCBTQ0JfT0ZGU0VUICsgb2Zmc2V0b2Yoc3RydWN0IGN4MThfc2NiLCBocHUyY3B1X21iKSwKIAkJCSZjeC0+c2NiLT5ocHUyY3B1X21iX29mZnNldCk7Ci0Jd3JpdGVsKFNDQl9PRkZTRVQgKyBvZmZzZXRvZihzdHJ1Y3QgY3gxOF9zY2IsIHBwdTJjcHVfbWIpLAorCWN4MThfd3JpdGVsKGN4LCBTQ0JfT0ZGU0VUICsgb2Zmc2V0b2Yoc3RydWN0IGN4MThfc2NiLCBwcHUyY3B1X21iKSwKIAkJCSZjeC0+c2NiLT5wcHUyY3B1X21iX29mZnNldCk7Ci0Jd3JpdGVsKFNDQl9PRkZTRVQgKyBvZmZzZXRvZihzdHJ1Y3QgY3gxOF9zY2IsIGVwdTJjcHVfbWIpLAorCWN4MThfd3JpdGVsKGN4LCBTQ0JfT0ZGU0VUICsgb2Zmc2V0b2Yoc3RydWN0IGN4MThfc2NiLCBlcHUyY3B1X21iKSwKIAkJCSZjeC0+c2NiLT5lcHUyY3B1X21iX29mZnNldCk7Ci0Jd3JpdGVsKFNDQl9PRkZTRVQgKyBvZmZzZXRvZihzdHJ1Y3QgY3gxOF9zY2IsIGNwdTJhcHVfbWIpLAorCWN4MThfd3JpdGVsKGN4LCBTQ0JfT0ZGU0VUICsgb2Zmc2V0b2Yoc3RydWN0IGN4MThfc2NiLCBjcHUyYXB1X21iKSwKIAkJCSZjeC0+c2NiLT5jcHUyYXB1X21iX29mZnNldCk7Ci0Jd3JpdGVsKFNDQl9PRkZTRVQgKyBvZmZzZXRvZihzdHJ1Y3QgY3gxOF9zY2IsIGhwdTJhcHVfbWIpLAorCWN4MThfd3JpdGVsKGN4LCBTQ0JfT0ZGU0VUICsgb2Zmc2V0b2Yoc3RydWN0IGN4MThfc2NiLCBocHUyYXB1X21iKSwKIAkJCSZjeC0+c2NiLT5ocHUyYXB1X21iX29mZnNldCk7Ci0Jd3JpdGVsKFNDQl9PRkZTRVQgKyBvZmZzZXRvZihzdHJ1Y3QgY3gxOF9zY2IsIHBwdTJhcHVfbWIpLAorCWN4MThfd3JpdGVsKGN4LCBTQ0JfT0ZGU0VUICsgb2Zmc2V0b2Yoc3RydWN0IGN4MThfc2NiLCBwcHUyYXB1X21iKSwKIAkJCSZjeC0+c2NiLT5wcHUyYXB1X21iX29mZnNldCk7Ci0Jd3JpdGVsKFNDQl9PRkZTRVQgKyBvZmZzZXRvZihzdHJ1Y3QgY3gxOF9zY2IsIGVwdTJhcHVfbWIpLAorCWN4MThfd3JpdGVsKGN4LCBTQ0JfT0ZGU0VUICsgb2Zmc2V0b2Yoc3RydWN0IGN4MThfc2NiLCBlcHUyYXB1X21iKSwKIAkJCSZjeC0+c2NiLT5lcHUyYXB1X21iX29mZnNldCk7Ci0Jd3JpdGVsKFNDQl9PRkZTRVQgKyBvZmZzZXRvZihzdHJ1Y3QgY3gxOF9zY2IsIGNwdTJocHVfbWIpLAorCWN4MThfd3JpdGVsKGN4LCBTQ0JfT0ZGU0VUICsgb2Zmc2V0b2Yoc3RydWN0IGN4MThfc2NiLCBjcHUyaHB1X21iKSwKIAkJCSZjeC0+c2NiLT5jcHUyaHB1X21iX29mZnNldCk7Ci0Jd3JpdGVsKFNDQl9PRkZTRVQgKyBvZmZzZXRvZihzdHJ1Y3QgY3gxOF9zY2IsIGFwdTJocHVfbWIpLAorCWN4MThfd3JpdGVsKGN4LCBTQ0JfT0ZGU0VUICsgb2Zmc2V0b2Yoc3RydWN0IGN4MThfc2NiLCBhcHUyaHB1X21iKSwKIAkJCSZjeC0+c2NiLT5hcHUyaHB1X21iX29mZnNldCk7Ci0Jd3JpdGVsKFNDQl9PRkZTRVQgKyBvZmZzZXRvZihzdHJ1Y3QgY3gxOF9zY2IsIHBwdTJocHVfbWIpLAorCWN4MThfd3JpdGVsKGN4LCBTQ0JfT0ZGU0VUICsgb2Zmc2V0b2Yoc3RydWN0IGN4MThfc2NiLCBwcHUyaHB1X21iKSwKIAkJCSZjeC0+c2NiLT5wcHUyaHB1X21iX29mZnNldCk7Ci0Jd3JpdGVsKFNDQl9PRkZTRVQgKyBvZmZzZXRvZihzdHJ1Y3QgY3gxOF9zY2IsIGVwdTJocHVfbWIpLAorCWN4MThfd3JpdGVsKGN4LCBTQ0JfT0ZGU0VUICsgb2Zmc2V0b2Yoc3RydWN0IGN4MThfc2NiLCBlcHUyaHB1X21iKSwKIAkJCSZjeC0+c2NiLT5lcHUyaHB1X21iX29mZnNldCk7Ci0Jd3JpdGVsKFNDQl9PRkZTRVQgKyBvZmZzZXRvZihzdHJ1Y3QgY3gxOF9zY2IsIGNwdTJwcHVfbWIpLAorCWN4MThfd3JpdGVsKGN4LCBTQ0JfT0ZGU0VUICsgb2Zmc2V0b2Yoc3RydWN0IGN4MThfc2NiLCBjcHUycHB1X21iKSwKIAkJCSZjeC0+c2NiLT5jcHUycHB1X21iX29mZnNldCk7Ci0Jd3JpdGVsKFNDQl9PRkZTRVQgKyBvZmZzZXRvZihzdHJ1Y3QgY3gxOF9zY2IsIGFwdTJwcHVfbWIpLAorCWN4MThfd3JpdGVsKGN4LCBTQ0JfT0ZGU0VUICsgb2Zmc2V0b2Yoc3RydWN0IGN4MThfc2NiLCBhcHUycHB1X21iKSwKIAkJCSZjeC0+c2NiLT5hcHUycHB1X21iX29mZnNldCk7Ci0Jd3JpdGVsKFNDQl9PRkZTRVQgKyBvZmZzZXRvZihzdHJ1Y3QgY3gxOF9zY2IsIGhwdTJwcHVfbWIpLAorCWN4MThfd3JpdGVsKGN4LCBTQ0JfT0ZGU0VUICsgb2Zmc2V0b2Yoc3RydWN0IGN4MThfc2NiLCBocHUycHB1X21iKSwKIAkJCSZjeC0+c2NiLT5ocHUycHB1X21iX29mZnNldCk7Ci0Jd3JpdGVsKFNDQl9PRkZTRVQgKyBvZmZzZXRvZihzdHJ1Y3QgY3gxOF9zY2IsIGVwdTJwcHVfbWIpLAorCWN4MThfd3JpdGVsKGN4LCBTQ0JfT0ZGU0VUICsgb2Zmc2V0b2Yoc3RydWN0IGN4MThfc2NiLCBlcHUycHB1X21iKSwKIAkJCSZjeC0+c2NiLT5lcHUycHB1X21iX29mZnNldCk7Ci0Jd3JpdGVsKFNDQl9PRkZTRVQgKyBvZmZzZXRvZihzdHJ1Y3QgY3gxOF9zY2IsIGNwdTJlcHVfbWIpLAorCWN4MThfd3JpdGVsKGN4LCBTQ0JfT0ZGU0VUICsgb2Zmc2V0b2Yoc3RydWN0IGN4MThfc2NiLCBjcHUyZXB1X21iKSwKIAkJCSZjeC0+c2NiLT5jcHUyZXB1X21iX29mZnNldCk7Ci0Jd3JpdGVsKFNDQl9PRkZTRVQgKyBvZmZzZXRvZihzdHJ1Y3QgY3gxOF9zY2IsIGFwdTJlcHVfbWIpLAorCWN4MThfd3JpdGVsKGN4LCBTQ0JfT0ZGU0VUICsgb2Zmc2V0b2Yoc3RydWN0IGN4MThfc2NiLCBhcHUyZXB1X21iKSwKIAkJCSZjeC0+c2NiLT5hcHUyZXB1X21iX29mZnNldCk7Ci0Jd3JpdGVsKFNDQl9PRkZTRVQgKyBvZmZzZXRvZihzdHJ1Y3QgY3gxOF9zY2IsIGhwdTJlcHVfbWIpLAorCWN4MThfd3JpdGVsKGN4LCBTQ0JfT0ZGU0VUICsgb2Zmc2V0b2Yoc3RydWN0IGN4MThfc2NiLCBocHUyZXB1X21iKSwKIAkJCSZjeC0+c2NiLT5ocHUyZXB1X21iX29mZnNldCk7Ci0Jd3JpdGVsKFNDQl9PRkZTRVQgKyBvZmZzZXRvZihzdHJ1Y3QgY3gxOF9zY2IsIHBwdTJlcHVfbWIpLAorCWN4MThfd3JpdGVsKGN4LCBTQ0JfT0ZGU0VUICsgb2Zmc2V0b2Yoc3RydWN0IGN4MThfc2NiLCBwcHUyZXB1X21iKSwKIAkJCSZjeC0+c2NiLT5wcHUyZXB1X21iX29mZnNldCk7CiAKLQl3cml0ZWwoU0NCX09GRlNFVCArIG9mZnNldG9mKHN0cnVjdCBjeDE4X3NjYiwgY3B1X3N0YXRlKSwKKwljeDE4X3dyaXRlbChjeCwgU0NCX09GRlNFVCArIG9mZnNldG9mKHN0cnVjdCBjeDE4X3NjYiwgY3B1X3N0YXRlKSwKIAkJCSZjeC0+c2NiLT5pcGNfb2Zmc2V0KTsKIAotCXdyaXRlbCgxLCAmY3gtPnNjYi0+aHB1X3N0YXRlKTsKLQl3cml0ZWwoMSwgJmN4LT5zY2ItPmVwdV9zdGF0ZSk7CisJY3gxOF93cml0ZWwoY3gsIDEsICZjeC0+c2NiLT5ocHVfc3RhdGUpOworCWN4MThfd3JpdGVsKGN4LCAxLCAmY3gtPnNjYi0+ZXB1X3N0YXRlKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LXN0cmVhbXMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LXN0cmVhbXMuYwppbmRleCAwZGE1N2Y1Li4wYzhlNzU0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1zdHJlYW1zLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtc3RyZWFtcy5jCkBAIC0yMiw2ICsyMiw3IEBACiAgKi8KIAogI2luY2x1ZGUgImN4MTgtZHJpdmVyLmgiCisjaW5jbHVkZSAiY3gxOC1pby5oIgogI2luY2x1ZGUgImN4MTgtZmlsZW9wcy5oIgogI2luY2x1ZGUgImN4MTgtbWFpbGJveC5oIgogI2luY2x1ZGUgImN4MTgtaTJjLmgiCkBAIC01Niw3ICs1Nyw3IEBACiBzdGF0aWMgc3RydWN0IHsKIAljb25zdCBjaGFyICpuYW1lOwogCWludCB2ZmxfdHlwZTsKLQlpbnQgbWlub3Jfb2Zmc2V0OworCWludCBudW1fb2Zmc2V0OwogCWludCBkbWE7CiAJZW51bSB2NGwyX2J1Zl90eXBlIGJ1Zl90eXBlOwogCXN0cnVjdCBmaWxlX29wZXJhdGlvbnMgKmZvcHM7CkBAIC0xMTksNyArMTIwLDcgQEAKIAlzLT5jeCA9IGN4OwogCXMtPnR5cGUgPSB0eXBlOwogCXMtPm5hbWUgPSBjeDE4X3N0cmVhbV9pbmZvW3R5cGVdLm5hbWU7Ci0Jcy0+aGFuZGxlID0gMHhmZmZmZmZmZjsKKwlzLT5oYW5kbGUgPSBDWDE4X0lOVkFMSURfVEFTS19IQU5ETEU7CiAKIAlzLT5kbWEgPSBjeDE4X3N0cmVhbV9pbmZvW3R5cGVdLmRtYTsKIAlzLT5idWZfc2l6ZSA9IGN4LT5zdHJlYW1fYnVmX3NpemVbdHlwZV07CkBAIC0xNDMsOCArMTQ0LDggQEAKIHsKIAlzdHJ1Y3QgY3gxOF9zdHJlYW0gKnMgPSAmY3gtPnN0cmVhbXNbdHlwZV07CiAJdTMyIGNhcCA9IGN4LT52NGwyX2NhcDsKLQlpbnQgbWlub3Jfb2Zmc2V0ID0gY3gxOF9zdHJlYW1faW5mb1t0eXBlXS5taW5vcl9vZmZzZXQ7Ci0JaW50IG1pbm9yOworCWludCBudW1fb2Zmc2V0ID0gY3gxOF9zdHJlYW1faW5mb1t0eXBlXS5udW1fb2Zmc2V0OworCWludCBudW0gPSBjeC0+bnVtICsgY3gxOF9maXJzdF9taW5vciArIG51bV9vZmZzZXQ7CiAKIAkvKiBUaGVzZSBmb3VyIGZpZWxkcyBhcmUgYWx3YXlzIGluaXRpYWxpemVkLiBJZiB2NGwyZGV2ID09IE5VTEwsIHRoZW4KIAkgICB0aGlzIHN0cmVhbSBpcyBub3QgaW4gdXNlLiBJbiB0aGF0IGNhc2Ugbm8gb3RoZXIgZmllbGRzIGJ1dCB0aGVzZQpAQCAtMTYzLDkgKzE2NCw2IEBACiAJICAgICEoY2FwICYgKFY0TDJfQ0FQX1ZCSV9DQVBUVVJFIHwgVjRMMl9DQVBfU0xJQ0VEX1ZCSV9DQVBUVVJFKSkpCiAJCXJldHVybiAwOwogCi0JLyogY2FyZCBudW1iZXIgKyB1c2VyIGRlZmluZWQgb2Zmc2V0ICsgZGV2aWNlIG9mZnNldCAqLwotCW1pbm9yID0gY3gtPm51bSArIGN4MThfZmlyc3RfbWlub3IgKyBtaW5vcl9vZmZzZXQ7Ci0KIAkvKiBVc2VyIGV4cGxpY2l0bHkgc2VsZWN0ZWQgMCBidWZmZXJzIGZvciB0aGVzZSBzdHJlYW1zLCBzbyBkb24ndAogCSAgIGNyZWF0ZSB0aGVtLiAqLwogCWlmIChjeDE4X3N0cmVhbV9pbmZvW3R5cGVdLmRtYSAhPSBQQ0lfRE1BX05PTkUgJiYKQEAgLTE3Niw3ICsxNzQsNyBAQAogCiAJY3gxOF9zdHJlYW1faW5pdChjeCwgdHlwZSk7CiAKLQlpZiAobWlub3Jfb2Zmc2V0ID09IC0xKQorCWlmIChudW1fb2Zmc2V0ID09IC0xKQogCQlyZXR1cm4gMDsKIAogCS8qIGFsbG9jYXRlIGFuZCBpbml0aWFsaXplIHRoZSB2NGwyIHZpZGVvIGRldmljZSBzdHJ1Y3R1cmUgKi8KQEAgLTE5MCw3ICsxODgsNyBAQAogCXNucHJpbnRmKHMtPnY0bDJkZXYtPm5hbWUsIHNpemVvZihzLT52NGwyZGV2LT5uYW1lKSwgImN4MTgtJWQiLAogCQkJY3gtPm51bSk7CiAKLQlzLT52NGwyZGV2LT5taW5vciA9IG1pbm9yOworCXMtPnY0bDJkZXYtPm51bSA9IG51bTsKIAlzLT52NGwyZGV2LT5wYXJlbnQgPSAmY3gtPmRldi0+ZGV2OwogCXMtPnY0bDJkZXYtPmZvcHMgPSBjeDE4X3N0cmVhbV9pbmZvW3R5cGVdLmZvcHM7CiAJcy0+djRsMmRldi0+cmVsZWFzZSA9IHZpZGVvX2RldmljZV9yZWxlYXNlOwpAQCAtMjI2LDcgKzIyNCw3IEBACiB7CiAJc3RydWN0IGN4MThfc3RyZWFtICpzID0gJmN4LT5zdHJlYW1zW3R5cGVdOwogCWludCB2ZmxfdHlwZSA9IGN4MThfc3RyZWFtX2luZm9bdHlwZV0udmZsX3R5cGU7Ci0JaW50IG1pbm9yOworCWludCBudW07CiAKIAkvKiBUT0RPOiBTaG91bGRuJ3QgdGhpcyBiZSBhIFZGTF9UWVBFX1RSQU5TUE9SVCBvciBzb21ldGhpbmc/CiAJICogV2UgbmVlZCBhIFZGTF9UWVBFX1RTIGRlZmluZWQuCkBAIC0yNDQsMzggKzI0Miw0NCBAQAogCWlmIChzLT52NGwyZGV2ID09IE5VTEwpCiAJCXJldHVybiAwOwogCi0JbWlub3IgPSBzLT52NGwyZGV2LT5taW5vcjsKKwludW0gPSBzLT52NGwyZGV2LT5udW07CisJLyogY2FyZCBudW1iZXIgKyB1c2VyIGRlZmluZWQgb2Zmc2V0ICsgZGV2aWNlIG9mZnNldCAqLworCWlmICh0eXBlICE9IENYMThfRU5DX1NUUkVBTV9UWVBFX01QRykgeworCQlzdHJ1Y3QgY3gxOF9zdHJlYW0gKnNfbXBnID0gJmN4LT5zdHJlYW1zW0NYMThfRU5DX1NUUkVBTV9UWVBFX01QR107CisKKwkJaWYgKHNfbXBnLT52NGwyZGV2KQorCQkJbnVtID0gc19tcGctPnY0bDJkZXYtPm51bSArIGN4MThfc3RyZWFtX2luZm9bdHlwZV0ubnVtX29mZnNldDsKKwl9CiAKIAkvKiBSZWdpc3RlciBkZXZpY2UuIEZpcnN0IHRyeSB0aGUgZGVzaXJlZCBtaW5vciwgdGhlbiBhbnkgZnJlZSBvbmUuICovCi0JaWYgKHZpZGVvX3JlZ2lzdGVyX2RldmljZShzLT52NGwyZGV2LCB2ZmxfdHlwZSwgbWlub3IpICYmCi0JCQl2aWRlb19yZWdpc3Rlcl9kZXZpY2Uocy0+djRsMmRldiwgdmZsX3R5cGUsIC0xKSkgewotCQlDWDE4X0VSUigiQ291bGRuJ3QgcmVnaXN0ZXIgdjRsMiBkZXZpY2UgZm9yICVzIG1pbm9yICVkXG4iLAotCQkJcy0+bmFtZSwgbWlub3IpOworCWlmICh2aWRlb19yZWdpc3Rlcl9kZXZpY2Uocy0+djRsMmRldiwgdmZsX3R5cGUsIG51bSkpIHsKKwkJQ1gxOF9FUlIoIkNvdWxkbid0IHJlZ2lzdGVyIHY0bDIgZGV2aWNlIGZvciAlcyBrZXJuZWwgbnVtYmVyICVkXG4iLAorCQkJcy0+bmFtZSwgbnVtKTsKIAkJdmlkZW9fZGV2aWNlX3JlbGVhc2Uocy0+djRsMmRldik7CiAJCXMtPnY0bDJkZXYgPSBOVUxMOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9Ci0JbWlub3IgPSBzLT52NGwyZGV2LT5taW5vcjsKKwludW0gPSBzLT52NGwyZGV2LT5udW07CiAKIAlzd2l0Y2ggKHZmbF90eXBlKSB7CiAJY2FzZSBWRkxfVFlQRV9HUkFCQkVSOgogCQlDWDE4X0lORk8oIlJlZ2lzdGVyZWQgZGV2aWNlIHZpZGVvJWQgZm9yICVzICglZCBNQilcbiIsCi0JCQltaW5vciwgcy0+bmFtZSwgY3gtPm9wdGlvbnMubWVnYWJ5dGVzW3R5cGVdKTsKKwkJCW51bSwgcy0+bmFtZSwgY3gtPm9wdGlvbnMubWVnYWJ5dGVzW3R5cGVdKTsKIAkJYnJlYWs7CiAKIAljYXNlIFZGTF9UWVBFX1JBRElPOgogCQlDWDE4X0lORk8oIlJlZ2lzdGVyZWQgZGV2aWNlIHJhZGlvJWQgZm9yICVzXG4iLAotCQkJbWlub3IgLSBNSU5PUl9WRkxfVFlQRV9SQURJT19NSU4sIHMtPm5hbWUpOworCQkJbnVtLCBzLT5uYW1lKTsKIAkJYnJlYWs7CiAKIAljYXNlIFZGTF9UWVBFX1ZCSToKIAkJaWYgKGN4LT5vcHRpb25zLm1lZ2FieXRlc1t0eXBlXSkKIAkJCUNYMThfSU5GTygiUmVnaXN0ZXJlZCBkZXZpY2UgdmJpJWQgZm9yICVzICglZCBNQilcbiIsCi0JCQkJbWlub3IgLSBNSU5PUl9WRkxfVFlQRV9WQklfTUlOLAorCQkJCW51bSwKIAkJCQlzLT5uYW1lLCBjeC0+b3B0aW9ucy5tZWdhYnl0ZXNbdHlwZV0pOwogCQllbHNlCiAJCQlDWDE4X0lORk8oIlJlZ2lzdGVyZWQgZGV2aWNlIHZiaSVkIGZvciAlc1xuIiwKLQkJCQltaW5vciAtIE1JTk9SX1ZGTF9UWVBFX1ZCSV9NSU4sIHMtPm5hbWUpOworCQkJCW51bSwgcy0+bmFtZSk7CiAJCWJyZWFrOwogCX0KIApAQCAtNDMyLDcgKzQzNiw2IEBACiAJZGVmYXVsdDoKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQotCXMtPmJ1ZmZlcnNfc3RvbGVuID0gMDsKIAogCS8qIG11dGUvdW5tdXRlIHZpZGVvICovCiAJY3gxOF92YXBpKGN4LCBDWDE4X0NQVV9TRVRfVklERU9fTVVURSwgMiwKQEAgLTQ3MCw3ICs0NzMsNyBAQAogCiAJaWYgKGF0b21pY19yZWFkKCZjeC0+dG90X2NhcHR1cmluZykgPT0gMCkgewogCQljbGVhcl9iaXQoQ1gxOF9GX0lfRU9TLCAmY3gtPmlfZmxhZ3MpOwotCQl3cml0ZV9yZWcoNywgQ1gxOF9EU1AwX0lOVEVSUlVQVF9NQVNLKTsKKwkJY3gxOF93cml0ZV9yZWcoY3gsIDcsIENYMThfRFNQMF9JTlRFUlJVUFRfTUFTSyk7CiAJfQogCiAJY3gxOF92YXBpKGN4LCBDWDE4X0NQVV9ERV9TRVRfTURMX0FDSywgMywgcy0+aGFuZGxlLApAQCAtNDgwLDggKzQ4Myw5IEBACiAJbGlzdF9mb3JfZWFjaChwLCAmcy0+cV9mcmVlLmxpc3QpIHsKIAkJc3RydWN0IGN4MThfYnVmZmVyICpidWYgPSBsaXN0X2VudHJ5KHAsIHN0cnVjdCBjeDE4X2J1ZmZlciwgbGlzdCk7CiAKLQkJd3JpdGVsKGJ1Zi0+ZG1hX2hhbmRsZSwgJmN4LT5zY2ItPmNwdV9tZGxbYnVmLT5pZF0ucGFkZHIpOwotCQl3cml0ZWwocy0+YnVmX3NpemUsICZjeC0+c2NiLT5jcHVfbWRsW2J1Zi0+aWRdLmxlbmd0aCk7CisJCWN4MThfd3JpdGVsKGN4LCBidWYtPmRtYV9oYW5kbGUsCisJCQkJCSZjeC0+c2NiLT5jcHVfbWRsW2J1Zi0+aWRdLnBhZGRyKTsKKwkJY3gxOF93cml0ZWwoY3gsIHMtPmJ1Zl9zaXplLCAmY3gtPnNjYi0+Y3B1X21kbFtidWYtPmlkXS5sZW5ndGgpOwogCQljeDE4X3ZhcGkoY3gsIENYMThfQ1BVX0RFX1NFVF9NREwsIDUsIHMtPmhhbmRsZSwKIAkJCSh2b2lkIF9faW9tZW0gKikmY3gtPnNjYi0+Y3B1X21kbFtidWYtPmlkXSAtIGN4LT5lbmNfbWVtLAogCQkJMSwgYnVmLT5pZCwgcy0+YnVmX3NpemUpOwpAQCAtNDg5LDcgKzQ5MywxNCBAQAogCS8qIGJlZ2luX2NhcHR1cmUgKi8KIAlpZiAoY3gxOF92YXBpKGN4LCBDWDE4X0NQVV9DQVBUVVJFX1NUQVJULCAxLCBzLT5oYW5kbGUpKSB7CiAJCUNYMThfREVCVUdfV0FSTigiRXJyb3Igc3RhcnRpbmcgY2FwdHVyZSFcbiIpOworCQkvKiBFbnN1cmUgd2UncmUgcmVhbGx5IG5vdCBjYXB0dXJpbmcgYmVmb3JlIHJlbGVhc2luZyBNRExzICovCisJCWlmIChzLT50eXBlID09IENYMThfRU5DX1NUUkVBTV9UWVBFX01QRykKKwkJCWN4MThfdmFwaShjeCwgQ1gxOF9DUFVfQ0FQVFVSRV9TVE9QLCAyLCBzLT5oYW5kbGUsIDEpOworCQllbHNlCisJCQljeDE4X3ZhcGkoY3gsIENYMThfQ1BVX0NBUFRVUkVfU1RPUCwgMSwgcy0+aGFuZGxlKTsKKwkJY3gxOF92YXBpKGN4LCBDWDE4X0NQVV9ERV9SRUxFQVNFX01ETCwgMSwgcy0+aGFuZGxlKTsKIAkJY3gxOF92YXBpKGN4LCBDWDE4X0RFU1RST1lfVEFTSywgMSwgcy0+aGFuZGxlKTsKKwkJLyogRklYTUUgLSBjbGVhbi11cCBEU1AwX0lOVCBtYXNrLCBpX2ZsYWdzLCBzX2ZsYWdzLCBldGMuICovCiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApAQCAtNTQxLDYgKzU1Miw5IEBACiAJCUNYMThfSU5GTygiaWdub3JpbmcgZ29wX2VuZDogbm90ICh5ZXQ/KSBzdXBwb3J0ZWQgYnkgdGhlIGZpcm13YXJlXG4iKTsKIAl9CiAKKwkvKiBUZWxsIHRoZSBDWDIzNDE4IGl0IGNhbid0IHVzZSBvdXIgYnVmZmVycyBhbnltb3JlICovCisJY3gxOF92YXBpKGN4LCBDWDE4X0NQVV9ERV9SRUxFQVNFX01ETCwgMSwgcy0+aGFuZGxlKTsKKwogCWlmIChzLT50eXBlICE9IENYMThfRU5DX1NUUkVBTV9UWVBFX1RTKQogCQlhdG9taWNfZGVjKCZjeC0+YW5hX2NhcHR1cmluZyk7CiAJYXRvbWljX2RlYygmY3gtPnRvdF9jYXB0dXJpbmcpOwpAQCAtNTQ5LDEyICs1NjMsMTIgQEAKIAljbGVhcl9iaXQoQ1gxOF9GX1NfU1RSRUFNSU5HLCAmcy0+c19mbGFncyk7CiAKIAljeDE4X3ZhcGkoY3gsIENYMThfREVTVFJPWV9UQVNLLCAxLCBzLT5oYW5kbGUpOwotCXMtPmhhbmRsZSA9IDB4ZmZmZmZmZmY7CisJcy0+aGFuZGxlID0gQ1gxOF9JTlZBTElEX1RBU0tfSEFORExFOwogCiAJaWYgKGF0b21pY19yZWFkKCZjeC0+dG90X2NhcHR1cmluZykgPiAwKQogCQlyZXR1cm4gMDsKIAotCXdyaXRlX3JlZyg1LCBDWDE4X0RTUDBfSU5URVJSVVBUX01BU0spOworCWN4MThfd3JpdGVfcmVnKGN4LCA1LCBDWDE4X0RTUDBfSU5URVJSVVBUX01BU0spOwogCXdha2VfdXAoJnMtPndhaXRxKTsKIAogCXJldHVybiAwOwpAQCAtNTY4LDggKzU4Miw4IEBACiAJZm9yIChpID0gMDsgaSA8IENYMThfTUFYX1NUUkVBTVM7IGkrKykgewogCQlzdHJ1Y3QgY3gxOF9zdHJlYW0gKnMgPSAmY3gtPnN0cmVhbXNbaV07CiAKLQkJaWYgKHMtPnY0bDJkZXYgJiYgcy0+aGFuZGxlKQorCQlpZiAocy0+djRsMmRldiAmJiAocy0+aGFuZGxlICE9IENYMThfSU5WQUxJRF9UQVNLX0hBTkRMRSkpCiAJCQlyZXR1cm4gcy0+aGFuZGxlOwogCX0KLQlyZXR1cm4gMDsKKwlyZXR1cm4gQ1gxOF9JTlZBTElEX1RBU0tfSEFORExFOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtdmVyc2lvbi5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtdmVyc2lvbi5oCmluZGV4IGQ1YzdhNmYuLjlmNmJlMmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LXZlcnNpb24uaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC12ZXJzaW9uLmgKQEAgLTI1LDcgKzI1LDcgQEAKICNkZWZpbmUgQ1gxOF9EUklWRVJfTkFNRSAiY3gxOCIKICNkZWZpbmUgQ1gxOF9EUklWRVJfVkVSU0lPTl9NQUpPUiAxCiAjZGVmaW5lIENYMThfRFJJVkVSX1ZFUlNJT05fTUlOT1IgMAotI2RlZmluZSBDWDE4X0RSSVZFUl9WRVJTSU9OX1BBVENITEVWRUwgMAorI2RlZmluZSBDWDE4X0RSSVZFUl9WRVJTSU9OX1BBVENITEVWRUwgMQogCiAjZGVmaW5lIENYMThfVkVSU0lPTiBfX3N0cmluZ2lmeShDWDE4X0RSSVZFUl9WRVJTSU9OX01BSk9SKSAiLiIgX19zdHJpbmdpZnkoQ1gxOF9EUklWRVJfVkVSU0lPTl9NSU5PUikgIi4iIF9fc3RyaW5naWZ5KENYMThfRFJJVkVSX1ZFUlNJT05fUEFUQ0hMRVZFTCkKICNkZWZpbmUgQ1gxOF9EUklWRVJfVkVSU0lPTiBLRVJORUxfVkVSU0lPTihDWDE4X0RSSVZFUl9WRVJTSU9OX01BSk9SLCBcCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gyMzQxOC5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MjM0MTguaAppbmRleCBlN2VkMDUzLi42NjhmOTY4IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gyMzQxOC5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDIzNDE4LmgKQEAgLTM1MSw3ICszNTEsNyBAQAogICAgRGVzY3JpcHRvciBMaXN0cyB0byB0aGUgZHJpdmVyCiAgICBJTlswXSAtIFRhc2sgaGFuZGxlLiBIYW5kbGUgb2YgdGhlIHRhc2sgdG8gc3RhcnQKICAgIFJldHVybkNvZGUgLSBPbmUgb2YgdGhlIEVSUl9ERV8uLi4gKi8KLS8qICNkZWZpbmUgQ1gxOF9DUFVfREVfUmVsZWFzZU1ETCAgICAgICAgICAgICAgIChDUFVfQ01EX01BU0tfREUgfCAweDAwMDYpICovCisjZGVmaW5lIENYMThfQ1BVX0RFX1JFTEVBU0VfTURMICAgICAgICAgICAgICAgCShDUFVfQ01EX01BU0tfREUgfCAweDAwMDYpCiAKIC8qIERlc2NyaXB0aW9uOiBUaGlzIGNvbW1hbmQgc2lnbmFscyB0aGUgY3B1IHRoYXQgdGhlIGRhdCBidWZmZXIgaGFzIGJlZW4KICAgIGNvbnN1bWVkIGFuZCByZWFkeSBmb3IgcmUtdXNlLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzNDF4LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM0MXguYwppbmRleCAyMjg0N2EwLi5jYmJlNDdmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM0MXguYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM0MXguYwpAQCAtNTA4LDcgKzUwOCwxMCBAQAogCQkvKiB0aGlzIHNldHRpbmcgaXMgcmVhZC1vbmx5IGZvciB0aGUgY3gyMzQxeCBzaW5jZSB0aGUKIAkJICAgVjRMMl9DSURfTVBFR19TVFJFQU1fVFlQRSByZWFsbHkgZGV0ZXJtaW5lcyB0aGUKIAkJICAgTVBFRy0xLzIgc2V0dGluZyAqLwotCQllcnIgPSB2NGwyX2N0cmxfcXVlcnlfZmlsbF9zdGQocWN0cmwpOworCQllcnIgPSB2NGwyX2N0cmxfcXVlcnlfZmlsbChxY3RybCwKKwkJCQkJICAgVjRMMl9NUEVHX1ZJREVPX0VOQ09ESU5HX01QRUdfMSwKKwkJCQkJICAgVjRMMl9NUEVHX1ZJREVPX0VOQ09ESU5HX01QRUdfMiwgMSwKKwkJCQkJICAgVjRMMl9NUEVHX1ZJREVPX0VOQ09ESU5HX01QRUdfMik7CiAJCWlmIChlcnIgPT0gMCkKIAkJCXFjdHJsLT5mbGFncyB8PSBWNEwyX0NUUkxfRkxBR19SRUFEX09OTFk7CiAJCXJldHVybiBlcnI7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvS2NvbmZpZyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9LY29uZmlnCmluZGV4IGU2MGJkMzEuLjhjMWI3ZmE0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvS2NvbmZpZworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvS2NvbmZpZwpAQCAtMTUsNiArMTUsNyBAQAogCXNlbGVjdCBEVkJfUzVIMTQwOSBpZiAhRFZCX0ZFX0NVU1RPTUlTRQogCXNlbGVjdCBEVkJfUzVIMTQxMSBpZiAhRFZCX0ZFX0NVU1RPTUlTRQogCXNlbGVjdCBEVkJfTEdEVDMzMFggaWYgIURWQl9GRV9DVVNUT01JU0UKKwlzZWxlY3QgRFZCX1pMMTAzNTMgaWYgIURWQl9GRV9DVVNUT01JU0UKIAlzZWxlY3QgTUVESUFfVFVORVJfWEMyMDI4IGlmICFEVkJfRkVfQ1VTVE9NSVpFCiAJc2VsZWN0IE1FRElBX1RVTkVSX1REQTgyOTAgaWYgIURWQl9GRV9DVVNUT01JWkUKIAlzZWxlY3QgTUVESUFfVFVORVJfVERBMTgyNzEgaWYgIURWQl9GRV9DVVNUT01JWkUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9jeDIzODg1LTQxNy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L2N4MjM4ODUtNDE3LmMKaW5kZXggN2IwZThjMC4uMzk1YzExZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L2N4MjM4ODUtNDE3LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L2N4MjM4ODUtNDE3LmMKQEAgLTM2LDcgKzM2LDYgQEAKICNpbmNsdWRlIDxtZWRpYS9jeDIzNDF4Lmg+CiAKICNpbmNsdWRlICJjeDIzODg1LmgiCi0jaW5jbHVkZSAibWVkaWEvY3gyMzQxeC5oIgogCiAjZGVmaW5lIENYMjM4ODVfRklSTV9JTUFHRV9TSVpFIDM3NjgzNgogI2RlZmluZSBDWDIzODg1X0ZJUk1fSU1BR0VfTkFNRSAidjRsLWN4MjM4ODUtZW5jLmZ3IgpAQCAtNjMyLDcgKzYzMSw3IEBACiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAogLyogTVBFRyBlbmNvZGVyIEFQSSAqLwotY2hhciAqY21kX3RvX3N0cihpbnQgY21kKQorc3RhdGljIGNoYXIgKmNtZF90b19zdHIoaW50IGNtZCkKIHsKIAlzd2l0Y2ggKGNtZCkgewogCWNhc2UgQ1gyMzQxWF9FTkNfUElOR19GVzoKQEAgLTE1ODMsNiArMTU4Miw3IEBACiAKIAlkcHJpbnRrKDIsICIlcygpXG4iLCBfX2Z1bmNfXyk7CiAKKwlsb2NrX2tlcm5lbCgpOwogCWxpc3RfZm9yX2VhY2gobGlzdCwgJmN4MjM4ODVfZGV2bGlzdCkgewogCQloID0gbGlzdF9lbnRyeShsaXN0LCBzdHJ1Y3QgY3gyMzg4NV9kZXYsIGRldmxpc3QpOwogCQlpZiAoaC0+djRsX2RldmljZS0+bWlub3IgPT0gbWlub3IpIHsKQEAgLTE1OTEsMTMgKzE1OTEsMTcgQEAKIAkJfQogCX0KIAotCWlmIChkZXYgPT0gTlVMTCkKKwlpZiAoZGV2ID09IE5VTEwpIHsKKwkJdW5sb2NrX2tlcm5lbCgpOwogCQlyZXR1cm4gLUVOT0RFVjsKKwl9CiAKIAkvKiBhbGxvY2F0ZSArIGluaXRpYWxpemUgcGVyIGZpbGVoYW5kbGUgZGF0YSAqLwogCWZoID0ga3phbGxvYyhzaXplb2YoKmZoKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKE5VTEwgPT0gZmgpCisJaWYgKE5VTEwgPT0gZmgpIHsKKwkJdW5sb2NrX2tlcm5lbCgpOwogCQlyZXR1cm4gLUVOT01FTTsKKwl9CiAKIAlmaWxlLT5wcml2YXRlX2RhdGEgPSBmaDsKIAlmaC0+ZGV2ICAgICAgPSBkZXY7CkBAIC0xNjA4LDYgKzE2MTIsNyBAQAogCQkJICAgIFY0TDJfRklFTERfSU5URVJMQUNFRCwKIAkJCSAgICBzaXplb2Yoc3RydWN0IGN4MjM4ODVfYnVmZmVyKSwKIAkJCSAgICBmaCk7CisJdW5sb2NrX2tlcm5lbCgpOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvY3gyMzg4NS1jYXJkcy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L2N4MjM4ODUtY2FyZHMuYwppbmRleCBjMzZkM2Y2Li5kYWM1Y2NjIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvY3gyMzg4NS1jYXJkcy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9jeDIzODg1LWNhcmRzLmMKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlIDxtZWRpYS9jeDI1ODQwLmg+CiAKICNpbmNsdWRlICJjeDIzODg1LmgiCisjaW5jbHVkZSAidHVuZXIteGMyMDI4LmgiCiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogLyogYm9hcmQgY29uZmlnIGluZm8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCkBAIC0zOCwxNiArMzksMTYgQEAKIAkJLmlucHV0ICAgICAgICAgID0ge3sKIAkJCS50eXBlICAgPSBDWDIzODg1X1ZNVVhfQ09NUE9TSVRFMSwKIAkJCS52bXV4ICAgPSAwLAotCQl9LHsKKwkJfSwgewogCQkJLnR5cGUgICA9IENYMjM4ODVfVk1VWF9DT01QT1NJVEUyLAogCQkJLnZtdXggICA9IDEsCi0JCX0seworCQl9LCB7CiAJCQkudHlwZSAgID0gQ1gyMzg4NV9WTVVYX0NPTVBPU0lURTMsCiAJCQkudm11eCAgID0gMiwKLQkJfSx7CisJCX0sIHsKIAkJCS50eXBlICAgPSBDWDIzODg1X1ZNVVhfQ09NUE9TSVRFNCwKIAkJCS52bXV4ICAgPSAzLAotCQl9fSwKKwkJfSB9LAogCX0sCiAJW0NYMjM4ODVfQk9BUkRfSEFVUFBBVUdFX0hWUjE4MDBscF0gPSB7CiAJCS5uYW1lCQk9ICJIYXVwcGF1Z2UgV2luVFYtSFZSMTgwMGxwIiwKQEAgLTU2LDE5ICs1NywxOSBAQAogCQkJLnR5cGUgICA9IENYMjM4ODVfVk1VWF9URUxFVklTSU9OLAogCQkJLnZtdXggICA9IDAsCiAJCQkuZ3BpbzAgID0gMHhmZjAwLAotCQl9LHsKKwkJfSwgewogCQkJLnR5cGUgICA9IENYMjM4ODVfVk1VWF9ERUJVRywKIAkJCS52bXV4ICAgPSAwLAogCQkJLmdwaW8wICA9IDB4ZmYwMSwKLQkJfSx7CisJCX0sIHsKIAkJCS50eXBlICAgPSBDWDIzODg1X1ZNVVhfQ09NUE9TSVRFMSwKIAkJCS52bXV4ICAgPSAxLAogCQkJLmdwaW8wICA9IDB4ZmYwMiwKLQkJfSx7CisJCX0sIHsKIAkJCS50eXBlICAgPSBDWDIzODg1X1ZNVVhfU1ZJREVPLAogCQkJLnZtdXggICA9IDIsCiAJCQkuZ3BpbzAgID0gMHhmZjAyLAotCQl9fSwKKwkJfSB9LAogCX0sCiAJW0NYMjM4ODVfQk9BUkRfSEFVUFBBVUdFX0hWUjE4MDBdID0gewogCQkubmFtZQkJPSAiSGF1cHBhdWdlIFdpblRWLUhWUjE4MDAiLApAQCAtODMsMjAgKzg0LDIwIEBACiAJCQkJCUNYMjU4NDBfVklONV9DSDIgfAogCQkJCQlDWDI1ODQwX1ZJTjJfQ0gxLAogCQkJLmdwaW8wICA9IDAsCi0JCX0seworCQl9LCB7CiAJCQkudHlwZSAgID0gQ1gyMzg4NV9WTVVYX0NPTVBPU0lURTEsCiAJCQkudm11eCAgID0JQ1gyNTg0MF9WSU43X0NIMyB8CiAJCQkJCUNYMjU4NDBfVklONF9DSDIgfAogCQkJCQlDWDI1ODQwX1ZJTjZfQ0gxLAogCQkJLmdwaW8wICA9IDAsCi0JCX0seworCQl9LCB7CiAJCQkudHlwZSAgID0gQ1gyMzg4NV9WTVVYX1NWSURFTywKIAkJCS52bXV4ICAgPQlDWDI1ODQwX1ZJTjdfQ0gzIHwKIAkJCQkJQ1gyNTg0MF9WSU40X0NIMiB8CiAJCQkJCUNYMjU4NDBfVklOOF9DSDEgfAogCQkJCQlDWDI1ODQwX1NWSURFT19PTiwKIAkJCS5ncGlvMCAgPSAwLAotCQl9fSwKKwkJfSB9LAogCX0sCiAJW0NYMjM4ODVfQk9BUkRfSEFVUFBBVUdFX0hWUjEyNTBdID0gewogCQkubmFtZQkJPSAiSGF1cHBhdWdlIFdpblRWLUhWUjEyNTAiLApAQCAtMTA1LDE5ICsxMDYsMTkgQEAKIAkJCS50eXBlICAgPSBDWDIzODg1X1ZNVVhfVEVMRVZJU0lPTiwKIAkJCS52bXV4ICAgPSAwLAogCQkJLmdwaW8wICA9IDB4ZmYwMCwKLQkJfSx7CisJCX0sIHsKIAkJCS50eXBlICAgPSBDWDIzODg1X1ZNVVhfREVCVUcsCiAJCQkudm11eCAgID0gMCwKIAkJCS5ncGlvMCAgPSAweGZmMDEsCi0JCX0seworCQl9LCB7CiAJCQkudHlwZSAgID0gQ1gyMzg4NV9WTVVYX0NPTVBPU0lURTEsCiAJCQkudm11eCAgID0gMSwKIAkJCS5ncGlvMCAgPSAweGZmMDIsCi0JCX0seworCQl9LCB7CiAJCQkudHlwZSAgID0gQ1gyMzg4NV9WTVVYX1NWSURFTywKIAkJCS52bXV4ICAgPSAyLAogCQkJLmdwaW8wICA9IDB4ZmYwMiwKLQkJfX0sCisJCX0gfSwKIAl9LAogCVtDWDIzODg1X0JPQVJEX0RWSUNPX0ZVU0lPTkhEVFZfNV9FWFBdID0gewogCQkubmFtZQkJPSAiRFZpQ08gRnVzaW9uSERUVjUgRXhwcmVzcyIsCkBAIC0xNDgsNiArMTQ5LDE1IEBACiAJCS5wb3J0YgkJPSBDWDIzODg1X01QRUdfRFZCLAogCQkucG9ydGMJCT0gQ1gyMzg4NV9NUEVHX0RWQiwKIAl9LAorCVtDWDIzODg1X0JPQVJEX0RWSUNPX0ZVU0lPTkhEVFZfRFZCX1RfRFVBTF9FWFBdID0geworCQkubmFtZQkJPSAiRFZpQ08gRnVzaW9uSERUViBEVkItVCBEdWFsIEV4cHJlc3MiLAorCQkucG9ydGIJCT0gQ1gyMzg4NV9NUEVHX0RWQiwKKwkJLnBvcnRjCQk9IENYMjM4ODVfTVBFR19EVkIsCisJfSwKKwlbQ1gyMzg4NV9CT0FSRF9MRUFEVEVLX1dJTkZBU1RfUFhEVlIzMjAwX0hdID0geworCQkubmFtZQkJPSAiTGVhZHRlayBXaW5mYXN0IFB4RFZSMzIwMCBIIiwKKwkJLnBvcnRjCQk9IENYMjM4ODVfTVBFR19EVkIsCisJfSwKIH07CiBjb25zdCB1bnNpZ25lZCBpbnQgY3gyMzg4NV9iY291bnQgPSBBUlJBWV9TSVpFKGN4MjM4ODVfYm9hcmRzKTsKIApAQCAtMTU5LDQzICsxNjksNDMgQEAKIAkJLnN1YnZlbmRvciA9IDB4MDA3MCwKIAkJLnN1YmRldmljZSA9IDB4MzQwMCwKIAkJLmNhcmQgICAgICA9IENYMjM4ODVfQk9BUkRfVU5LTk9XTiwKLQl9LHsKKwl9LCB7CiAJCS5zdWJ2ZW5kb3IgPSAweDAwNzAsCiAJCS5zdWJkZXZpY2UgPSAweDc2MDAsCiAJCS5jYXJkICAgICAgPSBDWDIzODg1X0JPQVJEX0hBVVBQQVVHRV9IVlIxODAwbHAsCi0JfSx7CisJfSwgewogCQkuc3VidmVuZG9yID0gMHgwMDcwLAogCQkuc3ViZGV2aWNlID0gMHg3ODAwLAogCQkuY2FyZCAgICAgID0gQ1gyMzg4NV9CT0FSRF9IQVVQUEFVR0VfSFZSMTgwMCwKLQl9LHsKKwl9LCB7CiAJCS5zdWJ2ZW5kb3IgPSAweDAwNzAsCiAJCS5zdWJkZXZpY2UgPSAweDc4MDEsCiAJCS5jYXJkICAgICAgPSBDWDIzODg1X0JPQVJEX0hBVVBQQVVHRV9IVlIxODAwLAotCX0seworCX0sIHsKIAkJLnN1YnZlbmRvciA9IDB4MDA3MCwKIAkJLnN1YmRldmljZSA9IDB4NzgwOSwKIAkJLmNhcmQgICAgICA9IENYMjM4ODVfQk9BUkRfSEFVUFBBVUdFX0hWUjE4MDAsCi0JfSx7CisJfSwgewogCQkuc3VidmVuZG9yID0gMHgwMDcwLAogCQkuc3ViZGV2aWNlID0gMHg3OTExLAogCQkuY2FyZCAgICAgID0gQ1gyMzg4NV9CT0FSRF9IQVVQUEFVR0VfSFZSMTI1MCwKLQl9LHsKKwl9LCB7CiAJCS5zdWJ2ZW5kb3IgPSAweDE4YWMsCiAJCS5zdWJkZXZpY2UgPSAweGQ1MDAsCiAJCS5jYXJkICAgICAgPSBDWDIzODg1X0JPQVJEX0RWSUNPX0ZVU0lPTkhEVFZfNV9FWFAsCi0JfSx7CisJfSwgewogCQkuc3VidmVuZG9yID0gMHgwMDcwLAogCQkuc3ViZGV2aWNlID0gMHg3NzkwLAogCQkuY2FyZCAgICAgID0gQ1gyMzg4NV9CT0FSRF9IQVVQUEFVR0VfSFZSMTUwMFEsCi0JfSx7CisJfSwgewogCQkuc3VidmVuZG9yID0gMHgwMDcwLAogCQkuc3ViZGV2aWNlID0gMHg3Nzk3LAogCQkuY2FyZCAgICAgID0gQ1gyMzg4NV9CT0FSRF9IQVVQUEFVR0VfSFZSMTUwMFEsCi0JfSx7CisJfSwgewogCQkuc3VidmVuZG9yID0gMHgwMDcwLAogCQkuc3ViZGV2aWNlID0gMHg3NzEwLAogCQkuY2FyZCAgICAgID0gQ1gyMzg4NV9CT0FSRF9IQVVQUEFVR0VfSFZSMTUwMCwKLQl9LHsKKwl9LCB7CiAJCS5zdWJ2ZW5kb3IgPSAweDAwNzAsCiAJCS5zdWJkZXZpY2UgPSAweDc3MTcsCiAJCS5jYXJkICAgICAgPSBDWDIzODg1X0JPQVJEX0hBVVBQQVVHRV9IVlIxNTAwLApAQCAtMjE1LDEwICsyMjUsMTggQEAKIAkJLnN1YnZlbmRvciA9IDB4MDA3MCwKIAkJLnN1YmRldmljZSA9IDB4ODAxMCwKIAkJLmNhcmQgICAgICA9IENYMjM4ODVfQk9BUkRfSEFVUFBBVUdFX0hWUjE0MDAsCi0JfSx7CisJfSwgewogCQkuc3VidmVuZG9yID0gMHgxOGFjLAogCQkuc3ViZGV2aWNlID0gMHhkNjE4LAogCQkuY2FyZCAgICAgID0gQ1gyMzg4NV9CT0FSRF9EVklDT19GVVNJT05IRFRWXzdfRFVBTF9FWFAsCisJfSwgeworCQkuc3VidmVuZG9yID0gMHgxOGFjLAorCQkuc3ViZGV2aWNlID0gMHhkYjc4LAorCQkuY2FyZCAgICAgID0gQ1gyMzg4NV9CT0FSRF9EVklDT19GVVNJT05IRFRWX0RWQl9UX0RVQUxfRVhQLAorCX0sIHsKKwkJLnN1YnZlbmRvciA9IDB4MTA3ZCwKKwkJLnN1YmRldmljZSA9IDB4NjY4MSwKKwkJLmNhcmQgICAgICA9IENYMjM4ODVfQk9BUkRfTEVBRFRFS19XSU5GQVNUX1BYRFZSMzIwMF9ILAogCX0sCiB9OwogY29uc3QgdW5zaWduZWQgaW50IGN4MjM4ODVfaWRjb3VudCA9IEFSUkFZX1NJWkUoY3gyMzg4NV9zdWJpZHMpOwpAQCAtMjI5LDIzICsyNDcsMjUgQEAKIAogCWlmICgwID09IGRldi0+cGNpLT5zdWJzeXN0ZW1fdmVuZG9yICYmCiAJICAgIDAgPT0gZGV2LT5wY2ktPnN1YnN5c3RlbV9kZXZpY2UpIHsKLQkJcHJpbnRrKCIlczogWW91ciBib2FyZCBoYXMgbm8gdmFsaWQgUENJZSBTdWJzeXN0ZW0gSUQgYW5kIHRodXMgY2FuJ3RcbiIKLQkJICAgICAgICIlczogYmUgYXV0b2RldGVjdGVkLiAgUGxlYXNlIHBhc3MgY2FyZD08bj4gaW5zbW9kIG9wdGlvbiB0b1xuIgotCQkgICAgICAgIiVzOiB3b3JrYXJvdW5kIHRoYXQuICBSZWRpcmVjdCBjb21wbGFpbnRzIHRvIHRoZSB2ZW5kb3Igb2ZcbiIKLQkJICAgICAgICIlczogdGhlIFRWIGNhcmQuICBCZXN0IHJlZ2FyZHMsXG4iCisJCXByaW50ayhLRVJOX0lORk8KKwkJCSIlczogQm9hcmQgaGFzIG5vIHZhbGlkIFBDSWUgU3Vic3lzdGVtIElEIGFuZCBjYW4ndFxuIgorCQkgICAgICAgIiVzOiBiZSBhdXRvZGV0ZWN0ZWQuIFBhc3MgY2FyZD08bj4gaW5zbW9kIG9wdGlvblxuIgorCQkgICAgICAgIiVzOiB0byB3b3JrYXJvdW5kIHRoYXQuIFJlZGlyZWN0IGNvbXBsYWludHMgdG8gdGhlXG4iCisJCSAgICAgICAiJXM6IHZlbmRvciBvZiB0aGUgVFYgY2FyZC4gIEJlc3QgcmVnYXJkcyxcbiIKIAkJICAgICAgICIlczogICAgICAgICAtLSB0dXhcbiIsCiAJCSAgICAgICBkZXYtPm5hbWUsIGRldi0+bmFtZSwgZGV2LT5uYW1lLCBkZXYtPm5hbWUsIGRldi0+bmFtZSk7CiAJfSBlbHNlIHsKLQkJcHJpbnRrKCIlczogWW91ciBib2FyZCBpc24ndCBrbm93biAoeWV0KSB0byB0aGUgZHJpdmVyLiAgWW91IGNhblxuIgotCQkgICAgICAgIiVzOiB0cnkgdG8gcGljayBvbmUgb2YgdGhlIGV4aXN0aW5nIGNhcmQgY29uZmlncyB2aWFcbiIKKwkJcHJpbnRrKEtFUk5fSU5GTworCQkJIiVzOiBZb3VyIGJvYXJkIGlzbid0IGtub3duICh5ZXQpIHRvIHRoZSBkcml2ZXIuXG4iCisJCSAgICAgICAiJXM6IFRyeSB0byBwaWNrIG9uZSBvZiB0aGUgZXhpc3RpbmcgY2FyZCBjb25maWdzIHZpYVxuIgogCQkgICAgICAgIiVzOiBjYXJkPTxuPiBpbnNtb2Qgb3B0aW9uLiAgVXBkYXRpbmcgdG8gdGhlIGxhdGVzdFxuIgogCQkgICAgICAgIiVzOiB2ZXJzaW9uIG1pZ2h0IGhlbHAgYXMgd2VsbC5cbiIsCiAJCSAgICAgICBkZXYtPm5hbWUsIGRldi0+bmFtZSwgZGV2LT5uYW1lLCBkZXYtPm5hbWUpOwogCX0KLQlwcmludGsoIiVzOiBIZXJlIGlzIGEgbGlzdCBvZiB2YWxpZCBjaG9pY2VzIGZvciB0aGUgY2FyZD08bj4gaW5zbW9kIG9wdGlvbjpcbiIsCisJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IEhlcmUgaXMgYSBsaXN0IG9mIHZhbGlkIGNob2ljZXMgZm9yIHRoZSBjYXJkPTxuPiBpbnNtb2Qgb3B0aW9uOlxuIiwKIAkgICAgICAgZGV2LT5uYW1lKTsKIAlmb3IgKGkgPSAwOyBpIDwgY3gyMzg4NV9iY291bnQ7IGkrKykKLQkJcHJpbnRrKCIlczogICAgY2FyZD0lZCAtPiAlc1xuIiwKKwkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6ICAgIGNhcmQ9JWQgLT4gJXNcbiIsCiAJCSAgICAgICBkZXYtPm5hbWUsIGksIGN4MjM4ODVfYm9hcmRzW2ldLm5hbWUpOwogfQogCkBAIC0yNTMsMTEgKzI3MywxMSBAQAogewogCXN0cnVjdCB0dmVlcHJvbSB0djsKIAotCXR2ZWVwcm9tX2hhdXBwYXVnZV9hbmFsb2coJmRldi0+aTJjX2J1c1swXS5pMmNfY2xpZW50LCAmdHYsIGVlcHJvbV9kYXRhKTsKKwl0dmVlcHJvbV9oYXVwcGF1Z2VfYW5hbG9nKCZkZXYtPmkyY19idXNbMF0uaTJjX2NsaWVudCwgJnR2LAorCQllZXByb21fZGF0YSk7CiAKIAkvKiBNYWtlIHN1cmUgd2Ugc3VwcG9ydCB0aGUgYm9hcmQgbW9kZWwgKi8KLQlzd2l0Y2ggKHR2Lm1vZGVsKQotCXsKKwlzd2l0Y2ggKHR2Lm1vZGVsKSB7CiAJY2FzZSA3MTAwOToKIAkJLyogV2luVFYtSFZSMTIwMCAoUENJZSwgUmV0YWlsLCBmdWxsIGhlaWdodCkKIAkJICogRFZCLVQgYW5kIGJhc2ljIGFuYWxvZyAqLwpAQCAtMjg1LDIxICszMDUsNTEgQEAKIAljYXNlIDcxOTk5OgogCQkvKiBXaW5UVi1IVlIxMjAwIChQQ0llLCBPRU0sIGZ1bGwgaGVpZ2h0KQogCQkgKiBEVkItVCBhbmQgYmFzaWMgYW5hbG9nICovCi0JY2FzZSA3NjYwMTogLyogV2luVFYtSFZSMTgwMGxwIChQQ0llLCBSZXRhaWwsIE5vIElSLCBEdWFsIGNoYW5uZWwgQVRTQyBhbmQgTVBFRzIgSFcgRW5jb2RlciAqLwotCWNhc2UgNzcwMDE6IC8qIFdpblRWLUhWUjE1MDAgKEV4cHJlc3MgQ2FyZCwgT0VNLCBObyBJUiwgQVRTQyBhbmQgQmFzaWMgYW5hbG9nICovCi0JY2FzZSA3NzAxMTogLyogV2luVFYtSFZSMTUwMCAoRXhwcmVzcyBDYXJkLCBSZXRhaWwsIE5vIElSLCBBVFNDIGFuZCBCYXNpYyBhbmFsb2cgKi8KLQljYXNlIDc3MDQxOiAvKiBXaW5UVi1IVlIxNTAwUSAoRXhwcmVzcyBDYXJkLCBPRU0sIE5vIElSLCBBVFNDL1FBTSBhbmQgQmFzaWMgYW5hbG9nICovCi0JY2FzZSA3NzA1MTogLyogV2luVFYtSFZSMTUwMFEgKEV4cHJlc3MgQ2FyZCwgUmV0YWlsLCBObyBJUiwgQVRTQy9RQU0gYW5kIEJhc2ljIGFuYWxvZyAqLwotCWNhc2UgNzgwMTE6IC8qIFdpblRWLUhWUjE4MDAgKFBDSWUsIFJldGFpbCwgMy41bW0gaW4sIElSLCBObyBGTSwgRHVhbCBjaGFubmVsIEFUU0MgYW5kIE1QRUcyIEhXIEVuY29kZXIgKi8KLQljYXNlIDc4NTAxOiAvKiBXaW5UVi1IVlIxODAwIChQQ0llLCBPRU0sIFJDQSBpbiwgTm8gSVIsIEZNLCBEdWFsIGNoYW5uZWwgQVRTQyBhbmQgTVBFRzIgSFcgRW5jb2RlciAqLwotCWNhc2UgNzg1MjE6IC8qIFdpblRWLUhWUjE4MDAgKFBDSWUsIE9FTSwgUkNBIGluLCBObyBJUiwgRk0sIER1YWwgY2hhbm5lbCBBVFNDIGFuZCBNUEVHMiBIVyBFbmNvZGVyICovCi0JY2FzZSA3ODUzMTogLyogV2luVFYtSFZSMTgwMCAoUENJZSwgT0VNLCBSQ0EgaW4sIE5vIElSLCBObyBGTSwgRHVhbCBjaGFubmVsIEFUU0MgYW5kIE1QRUcyIEhXIEVuY29kZXIgKi8KLQljYXNlIDc4NjMxOiAvKiBXaW5UVi1IVlIxODAwIChQQ0llLCBPRU0sIE5vIElSLCBObyBGTSwgRHVhbCBjaGFubmVsIEFUU0MgYW5kIE1QRUcyIEhXIEVuY29kZXIgKi8KLQljYXNlIDc5MDAxOiAvKiBXaW5UVi1IVlIxMjUwIChQQ0llLCBSZXRhaWwsIElSLCBmdWxsIGhlaWdodCwgQVRTQyBhbmQgQmFzaWMgYW5hbG9nICovCi0JY2FzZSA3OTEwMTogLyogV2luVFYtSFZSMTI1MCAoUENJZSwgUmV0YWlsLCBJUiwgaGFsZiBoZWlnaHQsIEFUU0MgYW5kIEJhc2ljIGFuYWxvZyAqLwotCWNhc2UgNzk1NjE6IC8qIFdpblRWLUhWUjEyNTAgKFBDSWUsIE9FTSwgTm8gSVIsIGhhbGYgaGVpZ2h0LCBBVFNDIGFuZCBCYXNpYyBhbmFsb2cgKi8KLQljYXNlIDc5NTcxOiAvKiBXaW5UVi1IVlIxMjUwIChQQ0llLCBPRU0sIE5vIElSLCBmdWxsIGhlaWdodCwgQVRTQyBhbmQgQmFzaWMgYW5hbG9nICovCi0JY2FzZSA3OTY3MTogLyogV2luVFYtSFZSMTI1MCAoUENJZSwgT0VNLCBObyBJUiwgaGFsZiBoZWlnaHQsIEFUU0MgYW5kIEJhc2ljIGFuYWxvZyAqLworCWNhc2UgNzY2MDE6CisJCS8qIFdpblRWLUhWUjE4MDBscCAoUENJZSwgUmV0YWlsLCBObyBJUiwgRHVhbAorCQkJY2hhbm5lbCBBVFNDIGFuZCBNUEVHMiBIVyBFbmNvZGVyICovCisJY2FzZSA3NzAwMToKKwkJLyogV2luVFYtSFZSMTUwMCAoRXhwcmVzcyBDYXJkLCBPRU0sIE5vIElSLCBBVFNDCisJCQlhbmQgQmFzaWMgYW5hbG9nICovCisJY2FzZSA3NzAxMToKKwkJLyogV2luVFYtSFZSMTUwMCAoRXhwcmVzcyBDYXJkLCBSZXRhaWwsIE5vIElSLCBBVFNDCisJCQlhbmQgQmFzaWMgYW5hbG9nICovCisJY2FzZSA3NzA0MToKKwkJLyogV2luVFYtSFZSMTUwMFEgKEV4cHJlc3MgQ2FyZCwgT0VNLCBObyBJUiwgQVRTQy9RQU0KKwkJCWFuZCBCYXNpYyBhbmFsb2cgKi8KKwljYXNlIDc3MDUxOgorCQkvKiBXaW5UVi1IVlIxNTAwUSAoRXhwcmVzcyBDYXJkLCBSZXRhaWwsIE5vIElSLCBBVFNDL1FBTQorCQkJYW5kIEJhc2ljIGFuYWxvZyAqLworCWNhc2UgNzgwMTE6CisJCS8qIFdpblRWLUhWUjE4MDAgKFBDSWUsIFJldGFpbCwgMy41bW0gaW4sIElSLCBObyBGTSwKKwkJCUR1YWwgY2hhbm5lbCBBVFNDIGFuZCBNUEVHMiBIVyBFbmNvZGVyICovCisJY2FzZSA3ODUwMToKKwkJLyogV2luVFYtSFZSMTgwMCAoUENJZSwgT0VNLCBSQ0EgaW4sIE5vIElSLCBGTSwKKwkJCUR1YWwgY2hhbm5lbCBBVFNDIGFuZCBNUEVHMiBIVyBFbmNvZGVyICovCisJY2FzZSA3ODUyMToKKwkJLyogV2luVFYtSFZSMTgwMCAoUENJZSwgT0VNLCBSQ0EgaW4sIE5vIElSLCBGTSwKKwkJCUR1YWwgY2hhbm5lbCBBVFNDIGFuZCBNUEVHMiBIVyBFbmNvZGVyICovCisJY2FzZSA3ODUzMToKKwkJLyogV2luVFYtSFZSMTgwMCAoUENJZSwgT0VNLCBSQ0EgaW4sIE5vIElSLCBObyBGTSwKKwkJCUR1YWwgY2hhbm5lbCBBVFNDIGFuZCBNUEVHMiBIVyBFbmNvZGVyICovCisJY2FzZSA3ODYzMToKKwkJLyogV2luVFYtSFZSMTgwMCAoUENJZSwgT0VNLCBObyBJUiwgTm8gRk0sCisJCQlEdWFsIGNoYW5uZWwgQVRTQyBhbmQgTVBFRzIgSFcgRW5jb2RlciAqLworCWNhc2UgNzkwMDE6CisJCS8qIFdpblRWLUhWUjEyNTAgKFBDSWUsIFJldGFpbCwgSVIsIGZ1bGwgaGVpZ2h0LAorCQkJQVRTQyBhbmQgQmFzaWMgYW5hbG9nICovCisJY2FzZSA3OTEwMToKKwkJLyogV2luVFYtSFZSMTI1MCAoUENJZSwgUmV0YWlsLCBJUiwgaGFsZiBoZWlnaHQsCisJCQlBVFNDIGFuZCBCYXNpYyBhbmFsb2cgKi8KKwljYXNlIDc5NTYxOgorCQkvKiBXaW5UVi1IVlIxMjUwIChQQ0llLCBPRU0sIE5vIElSLCBoYWxmIGhlaWdodCwKKwkJCUFUU0MgYW5kIEJhc2ljIGFuYWxvZyAqLworCWNhc2UgNzk1NzE6CisJCS8qIFdpblRWLUhWUjEyNTAgKFBDSWUsIE9FTSwgTm8gSVIsIGZ1bGwgaGVpZ2h0LAorCQkgQVRTQyBhbmQgQmFzaWMgYW5hbG9nICovCisJY2FzZSA3OTY3MToKKwkJLyogV2luVFYtSFZSMTI1MCAoUENJZSwgT0VNLCBObyBJUiwgaGFsZiBoZWlnaHQsCisJCQlBVFNDIGFuZCBCYXNpYyBhbmFsb2cgKi8KIAljYXNlIDgwMDE5OgogCQkvKiBXaW5UVi1IVlIxNDAwIChFeHByZXNzIENhcmQsIFJldGFpbCwgSVIsCiAJCSAqIERWQi1UIGFuZCBCYXNpYyBhbmFsb2cgKi8KQEAgLTMxMSw3ICszNjEsOCBAQAogCQkgKiBEVkItVCBhbmQgTVBFRzIgSFcgRW5jb2RlciAqLwogCQlicmVhazsKIAlkZWZhdWx0OgotCQlwcmludGsoIiVzOiB3YXJuaW5nOiB1bmtub3duIGhhdXBwYXVnZSBtb2RlbCAjJWRcbiIsIGRldi0+bmFtZSwgdHYubW9kZWwpOworCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogd2FybmluZzogdW5rbm93biBoYXVwcGF1Z2UgbW9kZWwgIyVkXG4iLAorCQkJZGV2LT5uYW1lLCB0di5tb2RlbCk7CiAJCWJyZWFrOwogCX0KIApAQCAtMzE5LDM3ICszNzAsMzcgQEAKIAkJCWRldi0+bmFtZSwgdHYubW9kZWwpOwogfQogCi0vKiBUdW5lciBjYWxsYmFjayBmdW5jdGlvbiBmb3IgY3gyMzg4NSBib2FyZHMuIEN1cnJlbnRseSBvbmx5IG5lZWRlZAotICogZm9yIEhWUjE1MDBRLCB3aGljaCBoYXMgYW4geGM1MDAwIHR1bmVyLgotICovCi1pbnQgY3gyMzg4NV90dW5lcl9jYWxsYmFjayh2b2lkICpwcml2LCBpbnQgY29tbWFuZCwgaW50IGFyZykKK2ludCBjeDIzODg1X3R1bmVyX2NhbGxiYWNrKHZvaWQgKnByaXYsIGludCBjb21wb25lbnQsIGludCBjb21tYW5kLCBpbnQgYXJnKQogewotCXN0cnVjdCBjeDIzODg1X2kyYyAqYnVzID0gcHJpdjsKLQlzdHJ1Y3QgY3gyMzg4NV9kZXYgKmRldiA9IGJ1cy0+ZGV2OworCXN0cnVjdCBjeDIzODg1X3RzcG9ydCAqcG9ydCA9IHByaXY7CisJc3RydWN0IGN4MjM4ODVfZGV2ICpkZXYgPSBwb3J0LT5kZXY7CiAJdTMyIGJpdG1hc2sgPSAwOwogCisJaWYgKGNvbW1hbmQgPT0gWEMyMDI4X1JFU0VUX0NMSykKKwkJcmV0dXJuIDA7CisKIAlpZiAoY29tbWFuZCAhPSAwKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiJXMoKTogVW5rbm93biBjb21tYW5kIDB4JXguXG4iLAogCQkJX19mdW5jX18sIGNvbW1hbmQpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQlzd2l0Y2goZGV2LT5ib2FyZCkgeworCXN3aXRjaCAoZGV2LT5ib2FyZCkgeworCWNhc2UgQ1gyMzg4NV9CT0FSRF9IQVVQUEFVR0VfSFZSMTQwMDoKKwljYXNlIENYMjM4ODVfQk9BUkRfSEFVUFBBVUdFX0hWUjE1MDA6CiAJY2FzZSBDWDIzODg1X0JPQVJEX0hBVVBQQVVHRV9IVlIxNTAwUToKLQkJLyogVHVuZXIgUmVzZXQgQ29tbWFuZCBmcm9tIHhjNTAwMCAqLwotCQlpZiAoY29tbWFuZCA9PSAwKQotCQkJYml0bWFzayA9IDB4MDQ7CisJY2FzZSBDWDIzODg1X0JPQVJEX0xFQURURUtfV0lORkFTVF9QWERWUjMyMDBfSDoKKwkJLyogVHVuZXIgUmVzZXQgQ29tbWFuZCAqLworCQliaXRtYXNrID0gMHgwNDsKIAkJYnJlYWs7CiAJY2FzZSBDWDIzODg1X0JPQVJEX0RWSUNPX0ZVU0lPTkhEVFZfN19EVUFMX0VYUDoKLQkJaWYgKGNvbW1hbmQgPT0gMCkgewotCi0JCQkvKiBUd28gaWRlbnRpY2FsIHR1bmVycyBvbiB0d28gZGlmZmVyZW50IGkyYyBidXNlcywKLQkJCSAqIHdlIG5lZWQgdG8gcmVzZXQgdGhlIGNvcnJlY3QgZ3Bpby4gKi8KLQkJCWlmIChidXMtPm5yID09IDApCi0JCQkJYml0bWFzayA9IDB4MDE7Ci0JCQllbHNlIGlmIChidXMtPm5yID09IDEpCi0JCQkJYml0bWFzayA9IDB4MDQ7Ci0JCX0KKwljYXNlIENYMjM4ODVfQk9BUkRfRFZJQ09fRlVTSU9OSERUVl9EVkJfVF9EVUFMX0VYUDoKKwkJLyogVHdvIGlkZW50aWNhbCB0dW5lcnMgb24gdHdvIGRpZmZlcmVudCBpMmMgYnVzZXMsCisJCSAqIHdlIG5lZWQgdG8gcmVzZXQgdGhlIGNvcnJlY3QgZ3Bpby4gKi8KKwkJaWYgKHBvcnQtPm5yID09IDApCisJCQliaXRtYXNrID0gMHgwMTsKKwkJZWxzZSBpZiAocG9ydC0+bnIgPT0gMSkKKwkJCWJpdG1hc2sgPSAweDA0OwogCQlicmVhazsKIAl9CiAKQEAgLTM2NSw3ICs0MTYsNyBAQAogCiB2b2lkIGN4MjM4ODVfZ3Bpb19zZXR1cChzdHJ1Y3QgY3gyMzg4NV9kZXYgKmRldikKIHsKLQlzd2l0Y2goZGV2LT5ib2FyZCkgeworCXN3aXRjaCAoZGV2LT5ib2FyZCkgewogCWNhc2UgQ1gyMzg4NV9CT0FSRF9IQVVQUEFVR0VfSFZSMTI1MDoKIAkJLyogR1BJTy0wIGN4MjQyMjcgZGVtb2R1bGF0b3IgcmVzZXQgKi8KIAkJY3hfc2V0KEdQMF9JTywgMHgwMDAxMDAwMSk7IC8qIEJyaW5nIHRoZSBwYXJ0IG91dCBvZiByZXNldCAqLwpAQCAtNDY1LDYgKzUxNiwzMiBAQAogCQltZGVsYXkoMjApOwogCQljeF9zZXQoR1AwX0lPLCAweDAwMGYwMDBmKTsKIAkJYnJlYWs7CisJY2FzZSBDWDIzODg1X0JPQVJEX0RWSUNPX0ZVU0lPTkhEVFZfRFZCX1RfRFVBTF9FWFA6CisJCS8qIEdQSU8tMCBwb3J0YiB4YzMwMjggcmVzZXQgKi8KKwkJLyogR1BJTy0xIHBvcnRiIHpsMTAzNTMgcmVzZXQgKi8KKwkJLyogR1BJTy0yIHBvcnRjIHhjMzAyOCByZXNldCAqLworCQkvKiBHUElPLTMgcG9ydGMgemwxMDM1MyByZXNldCAqLworCisJCS8qIFB1dCB0aGUgcGFydHMgaW50byByZXNldCBhbmQgYmFjayAqLworCQljeF9zZXQoR1AwX0lPLCAweDAwMGYwMDAwKTsKKwkJbWRlbGF5KDIwKTsKKwkJY3hfY2xlYXIoR1AwX0lPLCAweDAwMDAwMDBmKTsKKwkJbWRlbGF5KDIwKTsKKwkJY3hfc2V0KEdQMF9JTywgMHgwMDBmMDAwZik7CisJCWJyZWFrOworCWNhc2UgQ1gyMzg4NV9CT0FSRF9MRUFEVEVLX1dJTkZBU1RfUFhEVlIzMjAwX0g6CisJCS8qIEdQSU8tMiAgeGMzMDI4IHR1bmVyIHJlc2V0ICovCisKKwkJLyogVGhlIGZvbGxvd2luZyBHUElPJ3MgYXJlIG9uIHRoZSBpbnRlcm5hbCBBVkNvcmUgKGN4MjU4NDApICovCisJCS8qIEdQSU8tPyAgemwxMDM1MyBkZW1vZCByZXNldCAqLworCisJCS8qIFB1dCB0aGUgcGFydHMgaW50byByZXNldCBhbmQgYmFjayAqLworCQljeF9zZXQoR1AwX0lPLCAweDAwMDQwMDAwKTsKKwkJbWRlbGF5KDIwKTsKKwkJY3hfY2xlYXIoR1AwX0lPLCAweDAwMDAwMDA0KTsKKwkJbWRlbGF5KDIwKTsKKwkJY3hfc2V0KEdQMF9JTywgMHgwMDA0MDAwNCk7CisJCWJyZWFrOwogCX0KIH0KIApAQCAtNDc5LDYgKzU1Niw5IEBACiAJY2FzZSBDWDIzODg1X0JPQVJEX0hBVVBQQVVHRV9IVlIxNDAwOgogCQkvKiBGSVhNRTogSW1wbGVtZW50IG1lICovCiAJCWJyZWFrOworCWNhc2UgQ1gyMzg4NV9CT0FSRF9EVklDT19GVVNJT05IRFRWX0RWQl9UX0RVQUxfRVhQOgorCQlyZXF1ZXN0X21vZHVsZSgiaXIta2JkLWkyYyIpOworCQlicmVhazsKIAl9CiAKIAlyZXR1cm4gMDsKQEAgLTUxNiw2ICs1OTYsNyBAQAogCiAJc3dpdGNoIChkZXYtPmJvYXJkKSB7CiAJY2FzZSBDWDIzODg1X0JPQVJEX0RWSUNPX0ZVU0lPTkhEVFZfN19EVUFMX0VYUDoKKwljYXNlIENYMjM4ODVfQk9BUkRfRFZJQ09fRlVTSU9OSERUVl9EVkJfVF9EVUFMX0VYUDoKIAkJdHMyLT5nZW5fY3RybF92YWwgID0gMHhjOyAvKiBTZXJpYWwgYnVzICsgcHVuY3R1cmVkIGNsb2NrICovCiAJCXRzMi0+dHNfY2xrX2VuX3ZhbCA9IDB4MTsgLyogRW5hYmxlIFRTX0NMSyAqLwogCQl0czItPnNyY19zZWxfdmFsICAgPSBDWDIzODg1X1NSQ19TRUxfUEFSQUxMRUxfTVBFR19WSURFTzsKQEAgLTU0OCw2ICs2MjksNyBAQAogCWNhc2UgQ1gyMzg4NV9CT0FSRF9IQVVQUEFVR0VfSFZSMTIwMDoKIAljYXNlIENYMjM4ODVfQk9BUkRfSEFVUFBBVUdFX0hWUjE3MDA6CiAJY2FzZSBDWDIzODg1X0JPQVJEX0hBVVBQQVVHRV9IVlIxNDAwOgorCWNhc2UgQ1gyMzg4NV9CT0FSRF9MRUFEVEVLX1dJTkZBU1RfUFhEVlIzMjAwX0g6CiAJZGVmYXVsdDoKIAkJdHMyLT5nZW5fY3RybF92YWwgID0gMHhjOyAvKiBTZXJpYWwgYnVzICsgcHVuY3R1cmVkIGNsb2NrICovCiAJCXRzMi0+dHNfY2xrX2VuX3ZhbCA9IDB4MTsgLyogRW5hYmxlIFRTX0NMSyAqLwpAQCAtNTYxLDE2ICs2NDMsMTAgQEAKIAljYXNlIENYMjM4ODVfQk9BUkRfSEFVUFBBVUdFX0hWUjE4MDA6CiAJY2FzZSBDWDIzODg1X0JPQVJEX0hBVVBQQVVHRV9IVlIxODAwbHA6CiAJY2FzZSBDWDIzODg1X0JPQVJEX0hBVVBQQVVHRV9IVlIxNzAwOgorCWNhc2UgQ1gyMzg4NV9CT0FSRF9MRUFEVEVLX1dJTkZBU1RfUFhEVlIzMjAwX0g6CiAJCXJlcXVlc3RfbW9kdWxlKCJjeDI1ODQwIik7CiAJCWJyZWFrOwogCX0KIH0KIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLS8qCi0gKiBMb2NhbCB2YXJpYWJsZXM6Ci0gKiBjLWJhc2ljLW9mZnNldDogOAotICogRW5kOgotICoga2F0ZTogZW9sICJ1bml4IjsgaW5kZW50LXdpZHRoIDM7IHJlbW92ZS10cmFpbGluZy1zcGFjZSBvbjsgcmVwbGFjZS10cmFpbGluZy1zcGFjZS1zYXZlIG9uOyB0YWItd2lkdGggODsgcmVwbGFjZS10YWJzIG9mZjsgc3BhY2UtaW5kZW50IG9mZjsgbWl4ZWQtaW5kZW50IG9mZgotICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvY3gyMzg4NS1jb3JlLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvY3gyMzg4NS1jb3JlLmMKaW5kZXggMjVmYjA5OS4uOGY2ZmIyYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L2N4MjM4ODUtY29yZS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9jeDIzODg1LWNvcmUuYwpAQCAtMzcsMTIgKzM3LDEyIEBACiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgZGVidWc7Ci1tb2R1bGVfcGFyYW0oZGVidWcsaW50LDA2NDQpOwotTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywiZW5hYmxlIGRlYnVnIG1lc3NhZ2VzIik7Cittb2R1bGVfcGFyYW0oZGVidWcsIGludCwgMDY0NCk7CitNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiZW5hYmxlIGRlYnVnIG1lc3NhZ2VzIik7CiAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgY2FyZFtdICA9IHtbMCAuLi4gKENYMjM4ODVfTUFYQk9BUkRTIC0gMSldID0gVU5TRVQgfTsKIG1vZHVsZV9wYXJhbV9hcnJheShjYXJkLCAgaW50LCBOVUxMLCAwNDQ0KTsKLU1PRFVMRV9QQVJNX0RFU0MoY2FyZCwiY2FyZCB0eXBlIik7CitNT0RVTEVfUEFSTV9ERVNDKGNhcmQsICJjYXJkIHR5cGUiKTsKIAogI2RlZmluZSBkcHJpbnRrKGxldmVsLCBmbXQsIGFyZy4uLilcCiAJZG8geyBpZiAoZGVidWcgPj0gbGV2ZWwpXApAQCAtMzY0LDEzICszNjQsMTIgQEAKIAkJbGlzdF9kZWwoJmJ1Zi0+dmIucXVldWUpOwogCQl3YWtlX3VwKCZidWYtPnZiLmRvbmUpOwogCX0KLQlpZiAobGlzdF9lbXB0eSgmcS0+YWN0aXZlKSkgeworCWlmIChsaXN0X2VtcHR5KCZxLT5hY3RpdmUpKQogCQlkZWxfdGltZXIoJnEtPnRpbWVvdXQpOwotCX0gZWxzZSB7CisJZWxzZQogCQltb2RfdGltZXIoJnEtPnRpbWVvdXQsIGppZmZpZXMgKyBCVUZGRVJfVElNRU9VVCk7Ci0JfQogCWlmIChiYyAhPSAxKQotCQlwcmludGsoIiVzOiAlZCBidWZmZXJzIGhhbmRsZWQgKHNob3VsZCBiZSAxKVxuIiwKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6ICVkIGJ1ZmZlcnMgaGFuZGxlZCAoc2hvdWxkIGJlIDEpXG4iLAogCQkgICAgICAgX19mdW5jX18sIGJjKTsKIH0KIApAQCAtMzgxLDggKzM4MCw3IEBACiAJdW5zaWduZWQgaW50IGksIGxpbmVzOwogCXUzMiBjZHQ7CiAKLQlpZiAoY2gtPmNtZHNfc3RhcnQgPT0gMCkKLQl7CisJaWYgKGNoLT5jbWRzX3N0YXJ0ID09IDApIHsKIAkJZHByaW50aygxLCAiJXMoKSBFcmFzaW5nIGNoYW5uZWwgWyVzXVxuIiwgX19mdW5jX18sCiAJCQljaC0+bmFtZSk7CiAJCWN4X3dyaXRlKGNoLT5wdHIxX3JlZywgMCk7CkBAIC00MTgsMTUgKzQxNiwxNSBAQAogCiAJLyogd3JpdGUgQ01EUyAqLwogCWlmIChjaC0+anVtcG9ubHkpCi0JCWN4X3dyaXRlKGNoLT5jbWRzX3N0YXJ0ICsgIDAsIDgpOworCQljeF93cml0ZShjaC0+Y21kc19zdGFydCArIDAsIDgpOwogCWVsc2UKLQkJY3hfd3JpdGUoY2gtPmNtZHNfc3RhcnQgKyAgMCwgcmlzYyk7CisJCWN4X3dyaXRlKGNoLT5jbWRzX3N0YXJ0ICsgMCwgcmlzYyk7CiAJY3hfd3JpdGUoY2gtPmNtZHNfc3RhcnQgKyAgNCwgMCk7IC8qIDY0IGJpdHMgNjMtMzIgKi8KIAljeF93cml0ZShjaC0+Y21kc19zdGFydCArICA4LCBjZHQpOwogCWN4X3dyaXRlKGNoLT5jbWRzX3N0YXJ0ICsgMTIsIChsaW5lcyoxNikgPj4gMyk7CiAJY3hfd3JpdGUoY2gtPmNtZHNfc3RhcnQgKyAxNiwgY2gtPmN0cmxfc3RhcnQpOwogCWlmIChjaC0+anVtcG9ubHkpCi0JCWN4X3dyaXRlKGNoLT5jbWRzX3N0YXJ0ICsgMjAsIDB4ODAwMDAwMDAgfCAoNjQgPj4gMikgKTsKKwkJY3hfd3JpdGUoY2gtPmNtZHNfc3RhcnQgKyAyMCwgMHg4MDAwMDAwMCB8ICg2NCA+PiAyKSk7CiAJZWxzZQogCQljeF93cml0ZShjaC0+Y21kc19zdGFydCArIDIwLCA2NCA+PiAyKTsKIAlmb3IgKGkgPSAyNDsgaSA8IDgwOyBpICs9IDQpCkBAIC00MzYsOSArNDM0LDkgQEAKIAljeF93cml0ZShjaC0+cHRyMV9yZWcsIGNoLT5maWZvX3N0YXJ0KTsKIAljeF93cml0ZShjaC0+cHRyMl9yZWcsIGNkdCk7CiAJY3hfd3JpdGUoY2gtPmNudDJfcmVnLCAobGluZXMqMTYpID4+IDMpOwotCWN4X3dyaXRlKGNoLT5jbnQxX3JlZywgKGJwbCA+PiAzKSAtMSk7CisJY3hfd3JpdGUoY2gtPmNudDFfcmVnLCAoYnBsID4+IDMpIC0gMSk7CiAKLQlkcHJpbnRrKDIsIlticmlkZ2UgJWRdIHNyYW0gc2V0dXAgJXM6IGJwbD0lZCBsaW5lcz0lZFxuIiwKKwlkcHJpbnRrKDIsICJbYnJpZGdlICVkXSBzcmFtIHNldHVwICVzOiBicGw9JWQgbGluZXM9JWRcbiIsCiAJCWRldi0+YnJpZGdlLAogCQljaC0+bmFtZSwKIAkJYnBsLApAQCAtNDY5LDQzICs0NjcsNDMgQEAKIAl1MzIgcmlzYzsKIAl1bnNpZ25lZCBpbnQgaSwgaiwgbjsKIAotCXByaW50aygiJXM6ICVzIC0gZG1hIGNoYW5uZWwgc3RhdHVzIGR1bXBcbiIsCisJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6ICVzIC0gZG1hIGNoYW5uZWwgc3RhdHVzIGR1bXBcbiIsCiAJICAgICAgIGRldi0+bmFtZSwgY2gtPm5hbWUpOwogCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKG5hbWUpOyBpKyspCi0JCXByaW50aygiJXM6ICAgY21kczogJS0xNXM6IDB4JTA4eFxuIiwKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6ICAgY21kczogJS0xNXM6IDB4JTA4eFxuIiwKIAkJICAgICAgIGRldi0+bmFtZSwgbmFtZVtpXSwKIAkJICAgICAgIGN4X3JlYWQoY2gtPmNtZHNfc3RhcnQgKyA0KmkpKTsKIAogCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKIAkJcmlzYyA9IGN4X3JlYWQoY2gtPmNtZHNfc3RhcnQgKyA0ICogKGkgKyAxNCkpOwotCQlwcmludGsoIiVzOiAgIHJpc2MlZDogIiwgZGV2LT5uYW1lLCBpKTsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6ICAgcmlzYyVkOiAiLCBkZXYtPm5hbWUsIGkpOwogCQljeDIzODg1X3Jpc2NfZGVjb2RlKHJpc2MpOwogCX0KIAlmb3IgKGkgPSAwOyBpIDwgKDY0ID4+IDIpOyBpICs9IG4pIHsKIAkJcmlzYyA9IGN4X3JlYWQoY2gtPmN0cmxfc3RhcnQgKyA0ICogaSk7CiAJCS8qIE5vIGNvbnNpZGVyYXRpb24gZm9yIGJpdHMgNjMtMzIgKi8KIAotCQlwcmludGsoIiVzOiAgICgweCUwOHgpIGlxICV4OiAiLCBkZXYtPm5hbWUsCisJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiAgICgweCUwOHgpIGlxICV4OiAiLCBkZXYtPm5hbWUsCiAJCSAgICAgICBjaC0+Y3RybF9zdGFydCArIDQgKiBpLCBpKTsKIAkJbiA9IGN4MjM4ODVfcmlzY19kZWNvZGUocmlzYyk7CiAJCWZvciAoaiA9IDE7IGogPCBuOyBqKyspIHsKIAkJCXJpc2MgPSBjeF9yZWFkKGNoLT5jdHJsX3N0YXJ0ICsgNCAqIChpICsgaikpOwotCQkJcHJpbnRrKCIlczogICBpcSAleDogMHglMDh4IFsgYXJnICMlZCBdXG4iLAorCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6ICAgaXEgJXg6IDB4JTA4eCBbIGFyZyAjJWQgXVxuIiwKIAkJCSAgICAgICBkZXYtPm5hbWUsIGkraiwgcmlzYywgaik7CiAJCX0KIAl9CiAKLQlwcmludGsoIiVzOiBmaWZvOiAweCUwOHggLT4gMHgleFxuIiwKKwlwcmludGsoS0VSTl9XQVJOSU5HICIlczogZmlmbzogMHglMDh4IC0+IDB4JXhcbiIsCiAJICAgICAgIGRldi0+bmFtZSwgY2gtPmZpZm9fc3RhcnQsIGNoLT5maWZvX3N0YXJ0K2NoLT5maWZvX3NpemUpOwotCXByaW50aygiJXM6IGN0cmw6IDB4JTA4eCAtPiAweCV4XG4iLAorCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBjdHJsOiAweCUwOHggLT4gMHgleFxuIiwKIAkgICAgICAgZGV2LT5uYW1lLCBjaC0+Y3RybF9zdGFydCwgY2gtPmN0cmxfc3RhcnQgKyA2KjE2KTsKLQlwcmludGsoIiVzOiAgIHB0cjFfcmVnOiAweCUwOHhcbiIsCisJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6ICAgcHRyMV9yZWc6IDB4JTA4eFxuIiwKIAkgICAgICAgZGV2LT5uYW1lLCBjeF9yZWFkKGNoLT5wdHIxX3JlZykpOwotCXByaW50aygiJXM6ICAgcHRyMl9yZWc6IDB4JTA4eFxuIiwKKwlwcmludGsoS0VSTl9XQVJOSU5HICIlczogICBwdHIyX3JlZzogMHglMDh4XG4iLAogCSAgICAgICBkZXYtPm5hbWUsIGN4X3JlYWQoY2gtPnB0cjJfcmVnKSk7Ci0JcHJpbnRrKCIlczogICBjbnQxX3JlZzogMHglMDh4XG4iLAorCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiAgIGNudDFfcmVnOiAweCUwOHhcbiIsCiAJICAgICAgIGRldi0+bmFtZSwgY3hfcmVhZChjaC0+Y250MV9yZWcpKTsKLQlwcmludGsoIiVzOiAgIGNudDJfcmVnOiAweCUwOHhcbiIsCisJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6ICAgY250Ml9yZWc6IDB4JTA4eFxuIiwKIAkgICAgICAgZGV2LT5uYW1lLCBjeF9yZWFkKGNoLT5jbnQyX3JlZykpOwogfQogCkBAIC01MTUsMTMgKzUxMywxMyBAQAogCXN0cnVjdCBjeDIzODg1X2RldiAqZGV2ID0gcG9ydC0+ZGV2OwogCXVuc2lnbmVkIGludCBpLCBqLCBuOwogCi0JcHJpbnRrKCIlczogcmlzYyBkaXNhc206ICVwIFtkbWE9MHglMDhseF1cbiIsCisJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IHJpc2MgZGlzYXNtOiAlcCBbZG1hPTB4JTA4bHhdXG4iLAogCSAgICAgICBkZXYtPm5hbWUsIHJpc2MtPmNwdSwgKHVuc2lnbmVkIGxvbmcpcmlzYy0+ZG1hKTsKIAlmb3IgKGkgPSAwOyBpIDwgKHJpc2MtPnNpemUgPj4gMik7IGkgKz0gbikgewotCQlwcmludGsoIiVzOiAgICUwNGQ6ICIsIGRldi0+bmFtZSwgaSk7CisJCXByaW50ayhLRVJOX0lORk8gIiVzOiAgICUwNGQ6ICIsIGRldi0+bmFtZSwgaSk7CiAJCW4gPSBjeDIzODg1X3Jpc2NfZGVjb2RlKGxlMzJfdG9fY3B1KHJpc2MtPmNwdVtpXSkpOwogCQlmb3IgKGogPSAxOyBqIDwgbjsgaisrKQotCQkJcHJpbnRrKCIlczogICAlMDRkOiAweCUwOHggWyBhcmcgIyVkIF1cbiIsCisJCQlwcmludGsoS0VSTl9JTkZPICIlczogICAlMDRkOiAweCUwOHggWyBhcmcgIyVkIF1cbiIsCiAJCQkgICAgICAgZGV2LT5uYW1lLCBpICsgaiwgcmlzYy0+Y3B1W2kgKyBqXSwgaik7CiAJCWlmIChyaXNjLT5jcHVbaV0gPT0gY3B1X3RvX2xlMzIoUklTQ19KVU1QKSkKIAkJCWJyZWFrOwpAQCAtNjAwLDcgKzU5OCw3IEBACiAJICogd2hlbiBETUEgYmVnaW5zIGlmIFJEUl9UTENUTDAgYml0NCBpcyBub3QgY2xlYXJlZC4gSXQgZG9lcyBub3QKIAkgKiBvY2N1ciBvbiB0aGUgY3gyMzg4NyBicmlkZ2UuCiAJICovCi0JaWYoZGV2LT5icmlkZ2UgPT0gQ1gyMzg4NV9CUklER0VfODg1KQorCWlmIChkZXYtPmJyaWRnZSA9PSBDWDIzODg1X0JSSURHRV84ODUpCiAJCWN4X2NsZWFyKFJEUl9UTENUTDAsIDEgPDwgNCk7CiAKIAlyZXR1cm4gMDsKQEAgLTYwOCwxMyArNjA2LDEzIEBACiAKIHN0YXRpYyBpbnQgZ2V0X3Jlc291cmNlcyhzdHJ1Y3QgY3gyMzg4NV9kZXYgKmRldikKIHsKLQlpZiAocmVxdWVzdF9tZW1fcmVnaW9uKHBjaV9yZXNvdXJjZV9zdGFydChkZXYtPnBjaSwwKSwKLQkJCSAgICAgICBwY2lfcmVzb3VyY2VfbGVuKGRldi0+cGNpLDApLAorCWlmIChyZXF1ZXN0X21lbV9yZWdpb24ocGNpX3Jlc291cmNlX3N0YXJ0KGRldi0+cGNpLCAwKSwKKwkJCSAgICAgICBwY2lfcmVzb3VyY2VfbGVuKGRldi0+cGNpLCAwKSwKIAkJCSAgICAgICBkZXYtPm5hbWUpKQogCQlyZXR1cm4gMDsKIAogCXByaW50ayhLRVJOX0VSUiAiJXM6IGNhbid0IGdldCBNTUlPIG1lbW9yeSBAIDB4JWxseFxuIiwKLQkJZGV2LT5uYW1lLCAodW5zaWduZWQgbG9uZyBsb25nKXBjaV9yZXNvdXJjZV9zdGFydChkZXYtPnBjaSwwKSk7CisJCWRldi0+bmFtZSwgKHVuc2lnbmVkIGxvbmcgbG9uZylwY2lfcmVzb3VyY2Vfc3RhcnQoZGV2LT5wY2ksIDApKTsKIAogCXJldHVybiAtRUJVU1k7CiB9CkBAIC02MjMsNyArNjIxLDggQEAKIGludCBjeDIzODg1X3Jpc2Nfc3RvcHBlcihzdHJ1Y3QgcGNpX2RldiAqcGNpLCBzdHJ1Y3QgYnRjeF9yaXNjbWVtICpyaXNjLAogCQkJCXUzMiByZWcsIHUzMiBtYXNrLCB1MzIgdmFsdWUpOwogCi1zdGF0aWMgaW50IGN4MjM4ODVfaW5pdF90c3BvcnQoc3RydWN0IGN4MjM4ODVfZGV2ICpkZXYsIHN0cnVjdCBjeDIzODg1X3RzcG9ydCAqcG9ydCwgaW50IHBvcnRubykKK3N0YXRpYyBpbnQgY3gyMzg4NV9pbml0X3RzcG9ydChzdHJ1Y3QgY3gyMzg4NV9kZXYgKmRldiwKKwlzdHJ1Y3QgY3gyMzg4NV90c3BvcnQgKnBvcnQsIGludCBwb3J0bm8pCiB7CiAJZHByaW50aygxLCAiJXMocG9ydG5vPSVkKVxuIiwgX19mdW5jX18sIHBvcnRubyk7CiAKQEAgLTY0Myw3ICs2NDIsMTggQEAKIAlwb3J0LT5tcGVncS50aW1lb3V0LmRhdGEgPSAodW5zaWduZWQgbG9uZylwb3J0OwogCWluaXRfdGltZXIoJnBvcnQtPm1wZWdxLnRpbWVvdXQpOwogCi0Jc3dpdGNoKHBvcnRubykgeworCW11dGV4X2luaXQoJnBvcnQtPmZyb250ZW5kcy5sb2NrKTsKKwlJTklUX0xJU1RfSEVBRCgmcG9ydC0+ZnJvbnRlbmRzLmZlbGlzdCk7CisJcG9ydC0+ZnJvbnRlbmRzLmFjdGl2ZV9mZV9pZCA9IDA7CisKKwkvKiBUaGlzIHNob3VsZCBiZSBoYXJkY29kZWQgYWxsb3cgYSBzaW5nbGUgZnJvbnRlbmQKKwkgKiBhdHRhY2htZW50IHRvIHRoaXMgdHNwb3J0LCBrZWVwaW5nIHRoZSAtZHZiLmMKKwkgKiBjb2RlIGNsZWFuIGFuZCBzYWZlLgorCSAqLworCWlmICghcG9ydC0+bnVtX2Zyb250ZW5kcykKKwkJcG9ydC0+bnVtX2Zyb250ZW5kcyA9IDE7CisKKwlzd2l0Y2ggKHBvcnRubykgewogCWNhc2UgMToKIAkJcG9ydC0+cmVnX2dwY250ICAgICAgICAgID0gVklEX0JfR1BDTlQ7CiAJCXBvcnQtPnJlZ19ncGNudF9jdGwgICAgICA9IFZJRF9CX0dQQ05UX0NUTDsKQEAgLTc0NCwxMyArNzU0LDEzIEBACiAJbXV0ZXhfdW5sb2NrKCZkZXZsaXN0KTsKIAogCS8qIENvbmZpZ3VyZSB0aGUgaW50ZXJuYWwgbWVtb3J5ICovCi0JaWYoZGV2LT5wY2ktPmRldmljZSA9PSAweDg4ODApIHsKKwlpZiAoZGV2LT5wY2ktPmRldmljZSA9PSAweDg4ODApIHsKIAkJZGV2LT5icmlkZ2UgPSBDWDIzODg1X0JSSURHRV84ODc7CiAJCS8qIEFwcGx5IGEgc2Vuc2libGUgY2xvY2sgZnJlcXVlbmN5IGZvciB0aGUgUENJZSBicmlkZ2UgKi8KIAkJZGV2LT5jbGtfZnJlcSA9IDI1MDAwMDAwOwogCQlkZXYtPnNyYW1fY2hhbm5lbHMgPSBjeDIzODg3X3NyYW1fY2hhbm5lbHM7CiAJfSBlbHNlCi0JaWYoZGV2LT5wY2ktPmRldmljZSA9PSAweDg4NTIpIHsKKwlpZiAoZGV2LT5wY2ktPmRldmljZSA9PSAweDg4NTIpIHsKIAkJZGV2LT5icmlkZ2UgPSBDWDIzODg1X0JSSURHRV84ODU7CiAJCS8qIEFwcGx5IGEgc2Vuc2libGUgY2xvY2sgZnJlcXVlbmN5IGZvciB0aGUgUENJZSBicmlkZ2UgKi8KIAkJZGV2LT5jbGtfZnJlcSA9IDI4MDAwMDAwOwpAQCAtODMxLDggKzg0MSw4IEBACiAJfQogCiAJLyogUENJZSBzdHVmZiAqLwotCWRldi0+bG1taW8gPSBpb3JlbWFwKHBjaV9yZXNvdXJjZV9zdGFydChkZXYtPnBjaSwwKSwKLQkJCSAgICAgcGNpX3Jlc291cmNlX2xlbihkZXYtPnBjaSwwKSk7CisJZGV2LT5sbW1pbyA9IGlvcmVtYXAocGNpX3Jlc291cmNlX3N0YXJ0KGRldi0+cGNpLCAwKSwKKwkJCSAgICAgcGNpX3Jlc291cmNlX2xlbihkZXYtPnBjaSwgMCkpOwogCiAJZGV2LT5ibW1pbyA9ICh1OCBfX2lvbWVtICopZGV2LT5sbW1pbzsKIApAQCAtODYyLDcgKzg3Miw3IEBACiAJY3gyMzg4NV9pMmNfcmVnaXN0ZXIoJmRldi0+aTJjX2J1c1sxXSk7CiAJY3gyMzg4NV9pMmNfcmVnaXN0ZXIoJmRldi0+aTJjX2J1c1syXSk7CiAJY3gyMzg4NV9jYXJkX3NldHVwKGRldik7Ci0JY3gyMzg4NV9jYWxsX2kyY19jbGllbnRzICgmZGV2LT5pMmNfYnVzWzBdLCBUVU5FUl9TRVRfU1RBTkRCWSwgTlVMTCk7CisJY3gyMzg4NV9jYWxsX2kyY19jbGllbnRzKCZkZXYtPmkyY19idXNbMF0sIFRVTkVSX1NFVF9TVEFOREJZLCBOVUxMKTsKIAljeDIzODg1X2lyX2luaXQoZGV2KTsKIAogCWlmIChjeDIzODg1X2JvYXJkc1tkZXYtPmJvYXJkXS5wb3J0YSA9PSBDWDIzODg1X0FOQUxPR19WSURFTykgewpAQCAtOTA4LDggKzkxOCw4IEBACiAKIHN0YXRpYyB2b2lkIGN4MjM4ODVfZGV2X3VucmVnaXN0ZXIoc3RydWN0IGN4MjM4ODVfZGV2ICpkZXYpCiB7Ci0JcmVsZWFzZV9tZW1fcmVnaW9uKHBjaV9yZXNvdXJjZV9zdGFydChkZXYtPnBjaSwwKSwKLQkJCSAgIHBjaV9yZXNvdXJjZV9sZW4oZGV2LT5wY2ksMCkpOworCXJlbGVhc2VfbWVtX3JlZ2lvbihwY2lfcmVzb3VyY2Vfc3RhcnQoZGV2LT5wY2ksIDApLAorCQkJICAgcGNpX3Jlc291cmNlX2xlbihkZXYtPnBjaSwgMCkpOwogCiAJaWYgKCFhdG9taWNfZGVjX2FuZF90ZXN0KCZkZXYtPnJlZmNvdW50KSkKIAkJcmV0dXJuOwpAQCAtOTM2LDcgKzk0Niw3IEBACiAJaW91bm1hcChkZXYtPmxtbWlvKTsKIH0KIAotc3RhdGljIF9fbGUzMiogY3gyMzg4NV9yaXNjX2ZpZWxkKF9fbGUzMiAqcnAsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2dsaXN0LAorc3RhdGljIF9fbGUzMiAqY3gyMzg4NV9yaXNjX2ZpZWxkKF9fbGUzMiAqcnAsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2dsaXN0LAogCQkJICAgICAgIHVuc2lnbmVkIGludCBvZmZzZXQsIHUzMiBzeW5jX2xpbmUsCiAJCQkgICAgICAgdW5zaWduZWQgaW50IGJwbCwgdW5zaWduZWQgaW50IHBhZGRpbmcsCiAJCQkgICAgICAgdW5zaWduZWQgaW50IGxpbmVzKQpAQCAtOTU3LDMxICs5NjcsMzEgQEAKIAkJfQogCQlpZiAoYnBsIDw9IHNnX2RtYV9sZW4oc2cpLW9mZnNldCkgewogCQkJLyogZml0cyBpbnRvIGN1cnJlbnQgY2h1bmsgKi8KLQkJCSoocnArKyk9Y3B1X3RvX2xlMzIoUklTQ19XUklURXxSSVNDX1NPTHxSSVNDX0VPTHxicGwpOwotCQkJKihycCsrKT1jcHVfdG9fbGUzMihzZ19kbWFfYWRkcmVzcyhzZykrb2Zmc2V0KTsKLQkJCSoocnArKyk9Y3B1X3RvX2xlMzIoMCk7IC8qIGJpdHMgNjMtMzIgKi8KLQkJCW9mZnNldCs9YnBsOworCQkJKihycCsrKSA9IGNwdV90b19sZTMyKFJJU0NfV1JJVEV8UklTQ19TT0x8UklTQ19FT0x8YnBsKTsKKwkJCSoocnArKykgPSBjcHVfdG9fbGUzMihzZ19kbWFfYWRkcmVzcyhzZykrb2Zmc2V0KTsKKwkJCSoocnArKykgPSBjcHVfdG9fbGUzMigwKTsgLyogYml0cyA2My0zMiAqLworCQkJb2Zmc2V0ICs9IGJwbDsKIAkJfSBlbHNlIHsKIAkJCS8qIHNjYW5saW5lIG5lZWRzIHRvIGJlIHNwbGl0ICovCiAJCQl0b2RvID0gYnBsOwotCQkJKihycCsrKT1jcHVfdG9fbGUzMihSSVNDX1dSSVRFfFJJU0NfU09MfAorCQkJKihycCsrKSA9IGNwdV90b19sZTMyKFJJU0NfV1JJVEV8UklTQ19TT0x8CiAJCQkJCSAgICAoc2dfZG1hX2xlbihzZyktb2Zmc2V0KSk7Ci0JCQkqKHJwKyspPWNwdV90b19sZTMyKHNnX2RtYV9hZGRyZXNzKHNnKStvZmZzZXQpOwotCQkJKihycCsrKT1jcHVfdG9fbGUzMigwKTsgLyogYml0cyA2My0zMiAqLworCQkJKihycCsrKSA9IGNwdV90b19sZTMyKHNnX2RtYV9hZGRyZXNzKHNnKStvZmZzZXQpOworCQkJKihycCsrKSA9IGNwdV90b19sZTMyKDApOyAvKiBiaXRzIDYzLTMyICovCiAJCQl0b2RvIC09IChzZ19kbWFfbGVuKHNnKS1vZmZzZXQpOwogCQkJb2Zmc2V0ID0gMDsKIAkJCXNnKys7CiAJCQl3aGlsZSAodG9kbyA+IHNnX2RtYV9sZW4oc2cpKSB7Ci0JCQkJKihycCsrKT1jcHVfdG9fbGUzMihSSVNDX1dSSVRFfAorCQkJCSoocnArKykgPSBjcHVfdG9fbGUzMihSSVNDX1dSSVRFfAogCQkJCQkJICAgIHNnX2RtYV9sZW4oc2cpKTsKLQkJCQkqKHJwKyspPWNwdV90b19sZTMyKHNnX2RtYV9hZGRyZXNzKHNnKSk7Ci0JCQkJKihycCsrKT1jcHVfdG9fbGUzMigwKTsgLyogYml0cyA2My0zMiAqLworCQkJCSoocnArKykgPSBjcHVfdG9fbGUzMihzZ19kbWFfYWRkcmVzcyhzZykpOworCQkJCSoocnArKykgPSBjcHVfdG9fbGUzMigwKTsgLyogYml0cyA2My0zMiAqLwogCQkJCXRvZG8gLT0gc2dfZG1hX2xlbihzZyk7CiAJCQkJc2crKzsKIAkJCX0KLQkJCSoocnArKyk9Y3B1X3RvX2xlMzIoUklTQ19XUklURXxSSVNDX0VPTHx0b2RvKTsKLQkJCSoocnArKyk9Y3B1X3RvX2xlMzIoc2dfZG1hX2FkZHJlc3Moc2cpKTsKLQkJCSoocnArKyk9Y3B1X3RvX2xlMzIoMCk7IC8qIGJpdHMgNjMtMzIgKi8KKwkJCSoocnArKykgPSBjcHVfdG9fbGUzMihSSVNDX1dSSVRFfFJJU0NfRU9MfHRvZG8pOworCQkJKihycCsrKSA9IGNwdV90b19sZTMyKHNnX2RtYV9hZGRyZXNzKHNnKSk7CisJCQkqKHJwKyspID0gY3B1X3RvX2xlMzIoMCk7IC8qIGJpdHMgNjMtMzIgKi8KIAkJCW9mZnNldCArPSB0b2RvOwogCQl9CiAJCW9mZnNldCArPSBwYWRkaW5nOwpAQCAtMTAxMCw5ICsxMDIwLDExIEBACiAJICAgY2FuIGNhdXNlIG5leHQgYnBsIHRvIHN0YXJ0IGNsb3NlIHRvIGEgcGFnZSBib3JkZXIuICBGaXJzdCBETUEKIAkgICByZWdpb24gbWF5IGJlIHNtYWxsZXIgdGhhbiBQQUdFX1NJWkUgKi8KIAkvKiB3cml0ZSBhbmQganVtcCBuZWVkIGFuZCBleHRyYSBkd29yZCAqLwotCWluc3RydWN0aW9ucyAgPSBmaWVsZHMgKiAoMSArICgoYnBsICsgcGFkZGluZykgKiBsaW5lcykgLyBQQUdFX1NJWkUgKyBsaW5lcyk7CisJaW5zdHJ1Y3Rpb25zICA9IGZpZWxkcyAqICgxICsgKChicGwgKyBwYWRkaW5nKSAqIGxpbmVzKQorCQkvIFBBR0VfU0laRSArIGxpbmVzKTsKIAlpbnN0cnVjdGlvbnMgKz0gMjsKLQlpZiAoKHJjID0gYnRjeF9yaXNjbWVtX2FsbG9jKHBjaSxyaXNjLGluc3RydWN0aW9ucyoxMikpIDwgMCkKKwlyYyA9IGJ0Y3hfcmlzY21lbV9hbGxvYyhwY2ksIHJpc2MsIGluc3RydWN0aW9ucyoxMik7CisJaWYgKHJjIDwgMCkKIAkJcmV0dXJuIHJjOwogCiAJLyogd3JpdGUgcmlzYyBpbnN0cnVjdGlvbnMgKi8KQEAgLTEwMjYsNyArMTAzOCw3IEBACiAKIAkvKiBzYXZlIHBvaW50ZXIgdG8gam1wIGluc3RydWN0aW9uIGFkZHJlc3MgKi8KIAlyaXNjLT5qbXAgPSBycDsKLQlCVUdfT04oKHJpc2MtPmptcCAtIHJpc2MtPmNwdSArIDIpICogc2l6ZW9mICgqcmlzYy0+Y3B1KSA+IHJpc2MtPnNpemUpOworCUJVR19PTigocmlzYy0+am1wIC0gcmlzYy0+Y3B1ICsgMikgKiBzaXplb2YoKnJpc2MtPmNwdSkgPiByaXNjLT5zaXplKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTA0OCw3ICsxMDYwLDggQEAKIAlpbnN0cnVjdGlvbnMgID0gMSArIChicGwgKiBsaW5lcykgLyBQQUdFX1NJWkUgKyBsaW5lczsKIAlpbnN0cnVjdGlvbnMgKz0gMTsKIAotCWlmICgocmMgPSBidGN4X3Jpc2NtZW1fYWxsb2MocGNpLHJpc2MsaW5zdHJ1Y3Rpb25zKjEyKSkgPCAwKQorCXJjID0gYnRjeF9yaXNjbWVtX2FsbG9jKHBjaSwgcmlzYywgaW5zdHJ1Y3Rpb25zKjEyKTsKKwlpZiAocmMgPCAwKQogCQlyZXR1cm4gcmM7CiAKIAkvKiB3cml0ZSByaXNjIGluc3RydWN0aW9ucyAqLwpAQCAtMTA1Nyw3ICsxMDcwLDcgQEAKIAogCS8qIHNhdmUgcG9pbnRlciB0byBqbXAgaW5zdHJ1Y3Rpb24gYWRkcmVzcyAqLwogCXJpc2MtPmptcCA9IHJwOwotCUJVR19PTigocmlzYy0+am1wIC0gcmlzYy0+Y3B1ICsgMikgKiBzaXplb2YgKCpyaXNjLT5jcHUpID4gcmlzYy0+c2l6ZSk7CisJQlVHX09OKChyaXNjLT5qbXAgLSByaXNjLT5jcHUgKyAyKSAqIHNpemVvZigqcmlzYy0+Y3B1KSA+IHJpc2MtPnNpemUpOwogCXJldHVybiAwOwogfQogCkBAIC0xMDY3LDcgKzEwODAsOCBAQAogCV9fbGUzMiAqcnA7CiAJaW50IHJjOwogCi0JaWYgKChyYyA9IGJ0Y3hfcmlzY21lbV9hbGxvYyhwY2ksIHJpc2MsIDQqMTYpKSA8IDApCisJcmMgPSBidGN4X3Jpc2NtZW1fYWxsb2MocGNpLCByaXNjLCA0KjE2KTsKKwlpZiAocmMgPCAwKQogCQlyZXR1cm4gcmM7CiAKIAkvKiB3cml0ZSByaXNjIGluc3RydWN0aW9ucyAqLwpAQCAtMTE2MSwyMiArMTE3NSwyMyBAQAogCiAJLyogc2V0dXAgZmlmbyArIGZvcm1hdCAqLwogCWN4MjM4ODVfc3JhbV9jaGFubmVsX3NldHVwKGRldiwKLQkJCQkgICAmZGV2LT5zcmFtX2NoYW5uZWxzWyBwb3J0LT5zcmFtX2Nobm8gXSwKKwkJCQkgICAmZGV2LT5zcmFtX2NoYW5uZWxzW3BvcnQtPnNyYW1fY2hub10sCiAJCQkJICAgcG9ydC0+dHNfcGFja2V0X3NpemUsIGJ1Zi0+cmlzYy5kbWEpOwotCWlmKGRlYnVnID4gNSkgewotCQljeDIzODg1X3NyYW1fY2hhbm5lbF9kdW1wKGRldiwgJmRldi0+c3JhbV9jaGFubmVsc1sgcG9ydC0+c3JhbV9jaG5vIF0gKTsKKwlpZiAoZGVidWcgPiA1KSB7CisJCWN4MjM4ODVfc3JhbV9jaGFubmVsX2R1bXAoZGV2LAorCQkJJmRldi0+c3JhbV9jaGFubmVsc1twb3J0LT5zcmFtX2Nobm9dKTsKIAkJY3gyMzg4NV9yaXNjX2Rpc2FzbShwb3J0LCAmYnVmLT5yaXNjKTsKIAl9CiAKIAkvKiB3cml0ZSBUUyBsZW5ndGggdG8gY2hpcCAqLwogCWN4X3dyaXRlKHBvcnQtPnJlZ19sbmd0aCwgYnVmLT52Yi53aWR0aCk7CiAKLQlpZiAoICghKGN4MjM4ODVfYm9hcmRzW2Rldi0+Ym9hcmRdLnBvcnRiICYgQ1gyMzg4NV9NUEVHX0RWQikpICYmCi0JCSghKGN4MjM4ODVfYm9hcmRzW2Rldi0+Ym9hcmRdLnBvcnRjICYgQ1gyMzg4NV9NUEVHX0RWQikpICkgewotCQlwcmludGsoICIlcygpIEZhaWxlZC4gVW5zdXBwb3J0ZWQgdmFsdWUgaW4gLnBvcnRiL2MgKDB4JTA4eCkvKDB4JTA4eClcbiIsCisJaWYgKCghKGN4MjM4ODVfYm9hcmRzW2Rldi0+Ym9hcmRdLnBvcnRiICYgQ1gyMzg4NV9NUEVHX0RWQikpICYmCisJCSghKGN4MjM4ODVfYm9hcmRzW2Rldi0+Ym9hcmRdLnBvcnRjICYgQ1gyMzg4NV9NUEVHX0RWQikpKSB7CisJCXByaW50aygiJXMoKSBVbnN1cHBvcnRlZCAucG9ydGIvYyAoMHglMDh4KS8oMHglMDh4KVxuIiwKIAkJCV9fZnVuY19fLAogCQkJY3gyMzg4NV9ib2FyZHNbZGV2LT5ib2FyZF0ucG9ydGIsCi0JCQljeDIzODg1X2JvYXJkc1tkZXYtPmJvYXJkXS5wb3J0YyApOworCQkJY3gyMzg4NV9ib2FyZHNbZGV2LT5ib2FyZF0ucG9ydGMpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKQEAgLTExODYsNyArMTIwMSw3IEBACiAJdWRlbGF5KDEwMCk7CiAKIAkvKiBJZiB0aGUgcG9ydCBzdXBwb3J0cyBTUkMgU0VMRUNULCBjb25maWd1cmUgaXQgKi8KLQlpZihwb3J0LT5yZWdfc3JjX3NlbCkKKwlpZiAocG9ydC0+cmVnX3NyY19zZWwpCiAJCWN4X3dyaXRlKHBvcnQtPnJlZ19zcmNfc2VsLCBwb3J0LT5zcmNfc2VsX3ZhbCk7CiAKIAljeF93cml0ZShwb3J0LT5yZWdfaHdfc29wX2N0cmwsIHBvcnQtPmh3X3NvcF9jdHJsX3ZhbCk7CkBAIC0xMTk1LDcgKzEyMTAsNyBAQAogCWN4X3dyaXRlKHBvcnQtPnJlZ19nZW5fY3RybCwgcG9ydC0+Z2VuX2N0cmxfdmFsKTsKIAl1ZGVsYXkoMTAwKTsKIAotCS8vIE5PVEU6IHRoaXMgaXMgMiAocmVzZXJ2ZWQpIGZvciBwb3J0YiwgZG9lcyBpdCBtYXR0ZXI/CisJLyogTk9URTogdGhpcyBpcyAyIChyZXNlcnZlZCkgZm9yIHBvcnRiLCBkb2VzIGl0IG1hdHRlcj8gKi8KIAkvKiByZXNldCBjb3VudGVyIHRvIHplcm8gKi8KIAljeF93cml0ZShwb3J0LT5yZWdfZ3BjbnRfY3RsLCAzKTsKIAlxLT5jb3VudCA9IDE7CkBAIC0xMjI5LDExICsxMjQ0LDExIEBACiAJCWN4X3dyaXRlKEFMVF9QSU5fT1VUX1NFTCwgMHgxMDEwMDA0NSk7CiAJfQogCi0Jc3dpdGNoKGRldi0+YnJpZGdlKSB7CisJc3dpdGNoIChkZXYtPmJyaWRnZSkgewogCWNhc2UgQ1gyMzg4NV9CUklER0VfODg1OgogCWNhc2UgQ1gyMzg4NV9CUklER0VfODg3OgogCQkvKiBlbmFibGUgaXJxcyAqLwotCQlkcHJpbnRrKDEsICIlcygpIGVuYWJsaW5nIFRTIGludCdzIGFuZCBETUFcbiIsIF9fZnVuY19fICk7CisJCWRwcmludGsoMSwgIiVzKCkgZW5hYmxpbmcgVFMgaW50J3MgYW5kIERNQVxuIiwgX19mdW5jX18pOwogCQljeF9zZXQocG9ydC0+cmVnX3RzX2ludF9tc2ssICBwb3J0LT50c19pbnRfbXNrX3ZhbCk7CiAJCWN4X3NldChwb3J0LT5yZWdfZG1hX2N0bCwgcG9ydC0+ZG1hX2N0bF92YWwpOwogCQljeF9zZXQoUENJX0lOVF9NU0ssIGRldi0+cGNpX2lycW1hc2sgfCBwb3J0LT5wY2lfaXJxbWFzayk7CkBAIC0xMjkyLDggKzEzMDcsNyBAQAogCXN0cnVjdCBjeDIzODg1X2J1ZmZlciAqYnVmOwogCiAJZHByaW50ayg1LCAiJXMoKVxuIiwgX19mdW5jX18pOwotCWlmIChsaXN0X2VtcHR5KCZxLT5hY3RpdmUpKQotCXsKKwlpZiAobGlzdF9lbXB0eSgmcS0+YWN0aXZlKSkgewogCQlzdHJ1Y3QgY3gyMzg4NV9idWZmZXIgKnByZXY7CiAJCXByZXYgPSBOVUxMOwogCkBAIC0xMzExLDcgKzEzMjUsNyBAQAogCQkJCWJ1Zi0+dmIuc3RhdGUgPSBWSURFT0JVRl9BQ1RJVkU7CiAJCQkJYnVmLT5jb3VudCAgICA9IHEtPmNvdW50Kys7CiAJCQkJbW9kX3RpbWVyKCZxLT50aW1lb3V0LCBqaWZmaWVzK0JVRkZFUl9USU1FT1VUKTsKLQkJCQlkcHJpbnRrKDUsICJbJXAvJWRdIHJlc3RhcnRfcXVldWUgLSBmaXJzdCBhY3RpdmVcbiIsCisJCQkJZHByaW50ayg1LCAiWyVwLyVkXSByZXN0YXJ0X3F1ZXVlIC0gZi9hY3RpdmVcbiIsCiAJCQkJCWJ1ZiwgYnVmLT52Yi5pKTsKIAogCQkJfSBlbHNlIGlmIChwcmV2LT52Yi53aWR0aCAgPT0gYnVmLT52Yi53aWR0aCAgJiYKQEAgLTEzMjIsOCArMTMzNiw5IEBACiAJCQkJYnVmLT52Yi5zdGF0ZSA9IFZJREVPQlVGX0FDVElWRTsKIAkJCQlidWYtPmNvdW50ICAgID0gcS0+Y291bnQrKzsKIAkJCQlwcmV2LT5yaXNjLmptcFsxXSA9IGNwdV90b19sZTMyKGJ1Zi0+cmlzYy5kbWEpOwotCQkJCXByZXYtPnJpc2Muam1wWzJdID0gY3B1X3RvX2xlMzIoMCk7IC8qIDY0IGJpdCBiaXRzIDYzLTMyICovCi0JCQkJZHByaW50ayg1LCJbJXAvJWRdIHJlc3RhcnRfcXVldWUgLSBtb3ZlIHRvIGFjdGl2ZVxuIiwKKwkJCQkvKiA2NCBiaXQgYml0cyA2My0zMiAqLworCQkJCXByZXYtPnJpc2Muam1wWzJdID0gY3B1X3RvX2xlMzIoMCk7CisJCQkJZHByaW50ayg1LCAiWyVwLyVkXSByZXN0YXJ0X3F1ZXVlIC0gbS9hY3RpdmVcbiIsCiAJCQkJCWJ1ZiwgYnVmLT52Yi5pKTsKIAkJCX0gZWxzZSB7CiAJCQkJcmV0dXJuIDA7CkBAIC0xMzYyLDcgKzEzNzcsOCBAQAogCQlidWYtPnZiLnNpemUgICA9IHNpemU7CiAJCWJ1Zi0+dmIuZmllbGQgID0gZmllbGQgLypWNEwyX0ZJRUxEX1RPUCovOwogCi0JCWlmICgwICE9IChyYyA9IHZpZGVvYnVmX2lvbG9jayhxLCAmYnVmLT52YiwgTlVMTCkpKQorCQlyYyA9IHZpZGVvYnVmX2lvbG9jayhxLCAmYnVmLT52YiwgTlVMTCk7CisJCWlmICgwICE9IHJjKQogCQkJZ290byBmYWlsOwogCQljeDIzODg1X3Jpc2NfZGF0YWJ1ZmZlcihkZXYtPnBjaSwgJmJ1Zi0+cmlzYywKIAkJCQkJdmlkZW9idWZfdG9fZG1hKCZidWYtPnZiKS0+c2dsaXN0LApAQCAtMTM4OCw3ICsxNDA0LDcgQEAKIAlidWYtPnJpc2Muam1wWzJdID0gY3B1X3RvX2xlMzIoMCk7IC8qIGJpdHMgNjMtMzIgKi8KIAogCWlmIChsaXN0X2VtcHR5KCZjeDg4cS0+YWN0aXZlKSkgewotCQlkcHJpbnRrKCAxLCAicXVldWUgaXMgZW1wdHkgLSBmaXJzdCBhY3RpdmVcbiIgKTsKKwkJZHByaW50aygxLCAicXVldWUgaXMgZW1wdHkgLSBmaXJzdCBhY3RpdmVcbiIpOwogCQlsaXN0X2FkZF90YWlsKCZidWYtPnZiLnF1ZXVlLCAmY3g4OHEtPmFjdGl2ZSk7CiAJCWN4MjM4ODVfc3RhcnRfZG1hKHBvcnQsIGN4ODhxLCBidWYpOwogCQlidWYtPnZiLnN0YXRlID0gVklERU9CVUZfQUNUSVZFOwpAQCAtMTM5Nyw3ICsxNDEzLDcgQEAKIAkJZHByaW50aygxLCAiWyVwLyVkXSAlcyAtIGZpcnN0IGFjdGl2ZVxuIiwKIAkJCWJ1ZiwgYnVmLT52Yi5pLCBfX2Z1bmNfXyk7CiAJfSBlbHNlIHsKLQkJZHByaW50ayggMSwgInF1ZXVlIGlzIG5vdCBlbXB0eSAtIGFwcGVuZCB0byBhY3RpdmVcbiIgKTsKKwkJZHByaW50aygxLCAicXVldWUgaXMgbm90IGVtcHR5IC0gYXBwZW5kIHRvIGFjdGl2ZVxuIik7CiAJCXByZXYgPSBsaXN0X2VudHJ5KGN4ODhxLT5hY3RpdmUucHJldiwgc3RydWN0IGN4MjM4ODVfYnVmZmVyLAogCQkJCSAgdmIucXVldWUpOwogCQlsaXN0X2FkZF90YWlsKCZidWYtPnZiLnF1ZXVlLCAmY3g4OHEtPmFjdGl2ZSk7CkBAIC0xNDA1LDcgKzE0MjEsNyBAQAogCQlidWYtPmNvdW50ICAgID0gY3g4OHEtPmNvdW50Kys7CiAJCXByZXYtPnJpc2Muam1wWzFdID0gY3B1X3RvX2xlMzIoYnVmLT5yaXNjLmRtYSk7CiAJCXByZXYtPnJpc2Muam1wWzJdID0gY3B1X3RvX2xlMzIoMCk7IC8qIDY0IGJpdCBiaXRzIDYzLTMyICovCi0JCWRwcmludGsoIDEsICJbJXAvJWRdICVzIC0gYXBwZW5kIHRvIGFjdGl2ZVxuIiwKKwkJZHByaW50aygxLCAiWyVwLyVkXSAlcyAtIGFwcGVuZCB0byBhY3RpdmVcbiIsCiAJCQkgYnVmLCBidWYtPnZiLmksIF9fZnVuY19fKTsKIAl9CiB9CkBAIC0xNDMxLDcgKzE0NDcsNyBAQAogCQkJYnVmLCBidWYtPnZiLmksIHJlYXNvbiwgKHVuc2lnbmVkIGxvbmcpYnVmLT5yaXNjLmRtYSk7CiAJfQogCWlmIChyZXN0YXJ0KSB7Ci0JCWRwcmludGsoMSwgInJlc3RhcnRpbmcgcXVldWVcbiIgKTsKKwkJZHByaW50aygxLCAicmVzdGFydGluZyBxdWV1ZVxuIik7CiAJCWN4MjM4ODVfcmVzdGFydF9xdWV1ZShwb3J0LCBxKTsKIAl9CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG9ydC0+c2xvY2ssIGZsYWdzKTsKQEAgLTE0NDIsNyArMTQ1OCw3IEBACiAJc3RydWN0IGN4MjM4ODVfZGV2ICpkZXYgPSBwb3J0LT5kZXY7CiAJc3RydWN0IGN4MjM4ODVfZG1hcXVldWUgKnEgPSAmcG9ydC0+bXBlZ3E7CiAKLQlkcHJpbnRrKDEsICIlcygpXG4iLCBfX0ZVTkNUSU9OX18pOworCWRwcmludGsoMSwgIiVzKClcbiIsIF9fZnVuY19fKTsKIAlkZWxfdGltZXJfc3luYygmcS0+dGltZW91dCk7CiAJY3gyMzg4NV9zdG9wX2RtYShwb3J0KTsKIAlkb19jYW5jZWxfYnVmZmVycyhwb3J0LCAiY2FuY2VsIiwgMCk7CkBAIC0xNDUzLDEwICsxNDY5LDExIEBACiAJc3RydWN0IGN4MjM4ODVfdHNwb3J0ICpwb3J0ID0gKHN0cnVjdCBjeDIzODg1X3RzcG9ydCAqKWRhdGE7CiAJc3RydWN0IGN4MjM4ODVfZGV2ICpkZXYgPSBwb3J0LT5kZXY7CiAKLQlkcHJpbnRrKDEsICIlcygpXG4iLF9fZnVuY19fKTsKKwlkcHJpbnRrKDEsICIlcygpXG4iLCBfX2Z1bmNfXyk7CiAKIAlpZiAoZGVidWcgPiA1KQotCQljeDIzODg1X3NyYW1fY2hhbm5lbF9kdW1wKGRldiwgJmRldi0+c3JhbV9jaGFubmVsc1sgcG9ydC0+c3JhbV9jaG5vIF0pOworCQljeDIzODg1X3NyYW1fY2hhbm5lbF9kdW1wKGRldiwKKwkJCSZkZXYtPnNyYW1fY2hhbm5lbHNbcG9ydC0+c3JhbV9jaG5vXSk7CiAKIAljeDIzODg1X3N0b3BfZG1hKHBvcnQpOwogCWRvX2NhbmNlbF9idWZmZXJzKHBvcnQsICJ0aW1lb3V0IiwgMSk7CkBAIC0xNTMyLDE2ICsxNTQ5LDIzIEBACiAJaWYgKChzdGF0dXMgJiBWSURfQkNfTVNLX09QQ19FUlIpIHx8CiAJCShzdGF0dXMgJiBWSURfQkNfTVNLX0JBRF9QS1QpIHx8CiAJCShzdGF0dXMgJiBWSURfQkNfTVNLX1NZTkMpIHx8Ci0JCShzdGF0dXMgJiBWSURfQkNfTVNLX09GKSkKLQl7CisJCShzdGF0dXMgJiBWSURfQkNfTVNLX09GKSkgeworCiAJCWlmIChzdGF0dXMgJiBWSURfQkNfTVNLX09QQ19FUlIpCi0JCQlkcHJpbnRrKDcsICIgKFZJRF9CQ19NU0tfT1BDX0VSUiAweCUwOHgpXG4iLCBWSURfQkNfTVNLX09QQ19FUlIpOworCQkJZHByaW50ayg3LCAiIChWSURfQkNfTVNLX09QQ19FUlIgMHglMDh4KVxuIiwKKwkJCQlWSURfQkNfTVNLX09QQ19FUlIpOworCiAJCWlmIChzdGF0dXMgJiBWSURfQkNfTVNLX0JBRF9QS1QpCi0JCQlkcHJpbnRrKDcsICIgKFZJRF9CQ19NU0tfQkFEX1BLVCAweCUwOHgpXG4iLCBWSURfQkNfTVNLX0JBRF9QS1QpOworCQkJZHByaW50ayg3LCAiIChWSURfQkNfTVNLX0JBRF9QS1QgMHglMDh4KVxuIiwKKwkJCQlWSURfQkNfTVNLX0JBRF9QS1QpOworCiAJCWlmIChzdGF0dXMgJiBWSURfQkNfTVNLX1NZTkMpCi0JCQlkcHJpbnRrKDcsICIgKFZJRF9CQ19NU0tfU1lOQyAgICAweCUwOHgpXG4iLCBWSURfQkNfTVNLX1NZTkMpOworCQkJZHByaW50ayg3LCAiIChWSURfQkNfTVNLX1NZTkMgICAgMHglMDh4KVxuIiwKKwkJCQlWSURfQkNfTVNLX1NZTkMpOworCiAJCWlmIChzdGF0dXMgJiBWSURfQkNfTVNLX09GKQotCQkJZHByaW50ayg3LCAiIChWSURfQkNfTVNLX09GICAgICAgMHglMDh4KVxuIiwgVklEX0JDX01TS19PRik7CisJCQlkcHJpbnRrKDcsICIgKFZJRF9CQ19NU0tfT0YgICAgICAweCUwOHgpXG4iLAorCQkJCVZJRF9CQ19NU0tfT0YpOwogCiAJCXByaW50ayhLRVJOX0VSUiAiJXM6IG1wZWcgcmlzYyBvcCBjb2RlIGVycm9yXG4iLCBkZXYtPm5hbWUpOwogCkBAIC0xNTk1LDcgKzE2MTksNyBAQAogCXRzMl9zdGF0dXMgPSBjeF9yZWFkKFZJRF9DX0lOVF9TVEFUKTsKIAl0czJfbWFzayA9IGN4X3JlYWQoVklEX0NfSU5UX01TSyk7CiAKLQlpZiAoIChwY2lfc3RhdHVzID09IDApICYmICh0czJfc3RhdHVzID09IDApICYmICh0czFfc3RhdHVzID09IDApICkKKwlpZiAoKHBjaV9zdGF0dXMgPT0gMCkgJiYgKHRzMl9zdGF0dXMgPT0gMCkgJiYgKHRzMV9zdGF0dXMgPT0gMCkpCiAJCWdvdG8gb3V0OwogCiAJdmlkYV9jb3VudCA9IGN4X3JlYWQoVklEX0FfR1BDTlQpOwpAQCAtMTYxMCwzOCArMTYzNCw1NiBAQAogCWRwcmludGsoNywgInRzMl9zdGF0dXM6IDB4JTA4eCAgdHMyX21hc2s6IDB4JTA4eCBjb3VudDogMHgleFxuIiwKIAkJdHMyX3N0YXR1cywgdHMyX21hc2ssIHRzMl9jb3VudCk7CiAKLQlpZiAoIChwY2lfc3RhdHVzICYgUENJX01TS19SSVNDX1JEKSB8fAotCSAgICAgKHBjaV9zdGF0dXMgJiBQQ0lfTVNLX1JJU0NfV1IpIHx8Ci0JICAgICAocGNpX3N0YXR1cyAmIFBDSV9NU0tfQUxfUkQpIHx8Ci0JICAgICAocGNpX3N0YXR1cyAmIFBDSV9NU0tfQUxfV1IpIHx8Ci0JICAgICAocGNpX3N0YXR1cyAmIFBDSV9NU0tfQVBCX0RNQSkgfHwKLQkgICAgIChwY2lfc3RhdHVzICYgUENJX01TS19WSURfQykgfHwKLQkgICAgIChwY2lfc3RhdHVzICYgUENJX01TS19WSURfQikgfHwKLQkgICAgIChwY2lfc3RhdHVzICYgUENJX01TS19WSURfQSkgfHwKLQkgICAgIChwY2lfc3RhdHVzICYgUENJX01TS19BVURfSU5UKSB8fAotCSAgICAgKHBjaV9zdGF0dXMgJiBQQ0lfTVNLX0FVRF9FWFQpICkKLQl7CisJaWYgKChwY2lfc3RhdHVzICYgUENJX01TS19SSVNDX1JEKSB8fAorCSAgICAocGNpX3N0YXR1cyAmIFBDSV9NU0tfUklTQ19XUikgfHwKKwkgICAgKHBjaV9zdGF0dXMgJiBQQ0lfTVNLX0FMX1JEKSB8fAorCSAgICAocGNpX3N0YXR1cyAmIFBDSV9NU0tfQUxfV1IpIHx8CisJICAgIChwY2lfc3RhdHVzICYgUENJX01TS19BUEJfRE1BKSB8fAorCSAgICAocGNpX3N0YXR1cyAmIFBDSV9NU0tfVklEX0MpIHx8CisJICAgIChwY2lfc3RhdHVzICYgUENJX01TS19WSURfQikgfHwKKwkgICAgKHBjaV9zdGF0dXMgJiBQQ0lfTVNLX1ZJRF9BKSB8fAorCSAgICAocGNpX3N0YXR1cyAmIFBDSV9NU0tfQVVEX0lOVCkgfHwKKwkgICAgKHBjaV9zdGF0dXMgJiBQQ0lfTVNLX0FVRF9FWFQpKSB7CiAKIAkJaWYgKHBjaV9zdGF0dXMgJiBQQ0lfTVNLX1JJU0NfUkQpCi0JCQlkcHJpbnRrKDcsICIgKFBDSV9NU0tfUklTQ19SRCAgIDB4JTA4eClcbiIsIFBDSV9NU0tfUklTQ19SRCk7CisJCQlkcHJpbnRrKDcsICIgKFBDSV9NU0tfUklTQ19SRCAgIDB4JTA4eClcbiIsCisJCQkJUENJX01TS19SSVNDX1JEKTsKKwogCQlpZiAocGNpX3N0YXR1cyAmIFBDSV9NU0tfUklTQ19XUikKLQkJCWRwcmludGsoNywgIiAoUENJX01TS19SSVNDX1dSICAgMHglMDh4KVxuIiwgUENJX01TS19SSVNDX1dSKTsKKwkJCWRwcmludGsoNywgIiAoUENJX01TS19SSVNDX1dSICAgMHglMDh4KVxuIiwKKwkJCQlQQ0lfTVNLX1JJU0NfV1IpOworCiAJCWlmIChwY2lfc3RhdHVzICYgUENJX01TS19BTF9SRCkKLQkJCWRwcmludGsoNywgIiAoUENJX01TS19BTF9SRCAgICAgMHglMDh4KVxuIiwgUENJX01TS19BTF9SRCk7CisJCQlkcHJpbnRrKDcsICIgKFBDSV9NU0tfQUxfUkQgICAgIDB4JTA4eClcbiIsCisJCQkJUENJX01TS19BTF9SRCk7CisKIAkJaWYgKHBjaV9zdGF0dXMgJiBQQ0lfTVNLX0FMX1dSKQotCQkJZHByaW50ayg3LCAiIChQQ0lfTVNLX0FMX1dSICAgICAweCUwOHgpXG4iLCBQQ0lfTVNLX0FMX1dSKTsKKwkJCWRwcmludGsoNywgIiAoUENJX01TS19BTF9XUiAgICAgMHglMDh4KVxuIiwKKwkJCQlQQ0lfTVNLX0FMX1dSKTsKKwogCQlpZiAocGNpX3N0YXR1cyAmIFBDSV9NU0tfQVBCX0RNQSkKLQkJCWRwcmludGsoNywgIiAoUENJX01TS19BUEJfRE1BICAgMHglMDh4KVxuIiwgUENJX01TS19BUEJfRE1BKTsKKwkJCWRwcmludGsoNywgIiAoUENJX01TS19BUEJfRE1BICAgMHglMDh4KVxuIiwKKwkJCQlQQ0lfTVNLX0FQQl9ETUEpOworCiAJCWlmIChwY2lfc3RhdHVzICYgUENJX01TS19WSURfQykKLQkJCWRwcmludGsoNywgIiAoUENJX01TS19WSURfQyAgICAgMHglMDh4KVxuIiwgUENJX01TS19WSURfQyk7CisJCQlkcHJpbnRrKDcsICIgKFBDSV9NU0tfVklEX0MgICAgIDB4JTA4eClcbiIsCisJCQkJUENJX01TS19WSURfQyk7CisKIAkJaWYgKHBjaV9zdGF0dXMgJiBQQ0lfTVNLX1ZJRF9CKQotCQkJZHByaW50ayg3LCAiIChQQ0lfTVNLX1ZJRF9CICAgICAweCUwOHgpXG4iLCBQQ0lfTVNLX1ZJRF9CKTsKKwkJCWRwcmludGsoNywgIiAoUENJX01TS19WSURfQiAgICAgMHglMDh4KVxuIiwKKwkJCQlQQ0lfTVNLX1ZJRF9CKTsKKwogCQlpZiAocGNpX3N0YXR1cyAmIFBDSV9NU0tfVklEX0EpCi0JCQlkcHJpbnRrKDcsICIgKFBDSV9NU0tfVklEX0EgICAgIDB4JTA4eClcbiIsIFBDSV9NU0tfVklEX0EpOworCQkJZHByaW50ayg3LCAiIChQQ0lfTVNLX1ZJRF9BICAgICAweCUwOHgpXG4iLAorCQkJCVBDSV9NU0tfVklEX0EpOworCiAJCWlmIChwY2lfc3RhdHVzICYgUENJX01TS19BVURfSU5UKQotCQkJZHByaW50ayg3LCAiIChQQ0lfTVNLX0FVRF9JTlQgICAweCUwOHgpXG4iLCBQQ0lfTVNLX0FVRF9JTlQpOworCQkJZHByaW50ayg3LCAiIChQQ0lfTVNLX0FVRF9JTlQgICAweCUwOHgpXG4iLAorCQkJCVBDSV9NU0tfQVVEX0lOVCk7CisKIAkJaWYgKHBjaV9zdGF0dXMgJiBQQ0lfTVNLX0FVRF9FWFQpCi0JCQlkcHJpbnRrKDcsICIgKFBDSV9NU0tfQVVEX0VYVCAgIDB4JTA4eClcbiIsIFBDSV9NU0tfQVVEX0VYVCk7CisJCQlkcHJpbnRrKDcsICIgKFBDSV9NU0tfQVVEX0VYVCAgIDB4JTA4eClcbiIsCisJCQkJUENJX01TS19BVURfRVhUKTsKIAogCX0KIApAQCAtMTc1MywxMyArMTc5NSwxMyBAQAogCQkuZGV2aWNlICAgICAgID0gMHg4ODUyLAogCQkuc3VidmVuZG9yICAgID0gUENJX0FOWV9JRCwKIAkJLnN1YmRldmljZSAgICA9IFBDSV9BTllfSUQsCi0JfSx7CisJfSwgewogCQkvKiBDWDIzODg3IFJldiAyICovCiAJCS52ZW5kb3IgICAgICAgPSAweDE0ZjEsCiAJCS5kZXZpY2UgICAgICAgPSAweDg4ODAsCiAJCS5zdWJ2ZW5kb3IgICAgPSBQQ0lfQU5ZX0lELAogCQkuc3ViZGV2aWNlICAgID0gUENJX0FOWV9JRCwKLQl9LHsKKwl9LCB7CiAJCS8qIC0tLSBlbmQgb2YgbGlzdCAtLS0gKi8KIAl9CiB9OwpAQCAtMTc5Nyw5ICsxODM5LDMgQEAKIG1vZHVsZV9leGl0KGN4MjM4ODVfZmluaSk7CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0vKgotICogTG9jYWwgdmFyaWFibGVzOgotICogYy1iYXNpYy1vZmZzZXQ6IDgKLSAqIEVuZDoKLSAqIGthdGU6IGVvbCAidW5peCI7IGluZGVudC13aWR0aCAzOyByZW1vdmUtdHJhaWxpbmctc3BhY2Ugb247IHJlcGxhY2UtdHJhaWxpbmctc3BhY2Utc2F2ZSBvbjsgdGFiLXdpZHRoIDg7IHJlcGxhY2UtdGFicyBvZmY7IHNwYWNlLWluZGVudCBvZmY7IG1peGVkLWluZGVudCBvZmYKLSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L2N4MjM4ODUtZHZiLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvY3gyMzg4NS1kdmIuYwppbmRleCAyOTFiOWQwLi5lMWFhYzA3IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvY3gyMzg4NS1kdmIuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvY3gyMzg4NS1kdmIuYwpAQCAtNDIsNiArNDIsNyBAQAogI2luY2x1ZGUgInR1bmVyLXNpbXBsZS5oIgogI2luY2x1ZGUgImRpYjcwMDBwLmgiCiAjaW5jbHVkZSAiZGlieDAwMF9jb21tb24uaCIKKyNpbmNsdWRlICJ6bDEwMzUzLmgiCiAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgZGVidWc7CiAKQEAgLTc3LDE5ICs3OCwxOSBAQAogCQkJICAgc3RydWN0IHZpZGVvYnVmX2J1ZmZlciAqdmIsIGVudW0gdjRsMl9maWVsZCBmaWVsZCkKIHsKIAlzdHJ1Y3QgY3gyMzg4NV90c3BvcnQgKnBvcnQgPSBxLT5wcml2X2RhdGE7Ci0JcmV0dXJuIGN4MjM4ODVfYnVmX3ByZXBhcmUocSwgcG9ydCwgKHN0cnVjdCBjeDIzODg1X2J1ZmZlciopdmIsIGZpZWxkKTsKKwlyZXR1cm4gY3gyMzg4NV9idWZfcHJlcGFyZShxLCBwb3J0LCAoc3RydWN0IGN4MjM4ODVfYnVmZmVyICopdmIsIGZpZWxkKTsKIH0KIAogc3RhdGljIHZvaWQgZHZiX2J1Zl9xdWV1ZShzdHJ1Y3QgdmlkZW9idWZfcXVldWUgKnEsIHN0cnVjdCB2aWRlb2J1Zl9idWZmZXIgKnZiKQogewogCXN0cnVjdCBjeDIzODg1X3RzcG9ydCAqcG9ydCA9IHEtPnByaXZfZGF0YTsKLQljeDIzODg1X2J1Zl9xdWV1ZShwb3J0LCAoc3RydWN0IGN4MjM4ODVfYnVmZmVyKil2Yik7CisJY3gyMzg4NV9idWZfcXVldWUocG9ydCwgKHN0cnVjdCBjeDIzODg1X2J1ZmZlciAqKXZiKTsKIH0KIAogc3RhdGljIHZvaWQgZHZiX2J1Zl9yZWxlYXNlKHN0cnVjdCB2aWRlb2J1Zl9xdWV1ZSAqcSwKIAkJCSAgICBzdHJ1Y3QgdmlkZW9idWZfYnVmZmVyICp2YikKIHsKLQljeDIzODg1X2ZyZWVfYnVmZmVyKHEsIChzdHJ1Y3QgY3gyMzg4NV9idWZmZXIqKXZiKTsKKwljeDIzODg1X2ZyZWVfYnVmZmVyKHEsIChzdHJ1Y3QgY3gyMzg4NV9idWZmZXIgKil2Yik7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgdmlkZW9idWZfcXVldWVfb3BzIGR2Yl9xb3BzID0gewpAQCAtMTg4LDEzICsxODksMTEgQEAKIHN0YXRpYyBzdHJ1Y3QgeGM1MDAwX2NvbmZpZyBoYXVwcGF1Z2VfaHZyMTUwMHFfdHVuZXJjb25maWcgPSB7CiAJLmkyY19hZGRyZXNzICAgICAgPSAweDYxLAogCS5pZl9raHogICAgICAgICAgID0gNTM4MCwKLQkudHVuZXJfY2FsbGJhY2sgICA9IGN4MjM4ODVfdHVuZXJfY2FsbGJhY2sKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgeGM1MDAwX2NvbmZpZyBkdmljb194YzUwMDBfdHVuZXJjb25maWcgPSB7CiAJLmkyY19hZGRyZXNzICAgICAgPSAweDY0LAogCS5pZl9raHogICAgICAgICAgID0gNTM4MCwKLQkudHVuZXJfY2FsbGJhY2sgICA9IGN4MjM4ODVfdHVuZXJfY2FsbGJhY2sKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgdGRhODI5eF9jb25maWcgdGRhODI5eF9ub19wcm9iZSA9IHsKQEAgLTMwMyw1MyArMzAyLDM1IEBACiAJLm91dHB1dF9tb2RlID0gT1VUTU9ERV9NUEVHMl9TRVJJQUwsCiB9OwogCi1zdGF0aWMgaW50IGN4MjM4ODVfaHZyMTUwMF94YzMwMjhfY2FsbGJhY2sodm9pZCAqcHRyLCBpbnQgY29tbWFuZCwgaW50IGFyZykKLXsKLQlzdHJ1Y3QgY3gyMzg4NV90c3BvcnQgKnBvcnQgPSBwdHI7Ci0Jc3RydWN0IGN4MjM4ODVfZGV2ICpkZXYgPSBwb3J0LT5kZXY7Ci0KLQlzd2l0Y2ggKGNvbW1hbmQpIHsKLQljYXNlIFhDMjAyOF9UVU5FUl9SRVNFVDoKLQkJLyogU2VuZCB0aGUgdHVuZXIgaW4gdGhlbiBvdXQgb2YgcmVzZXQgKi8KLQkJLyogR1BJTy0yIHhjMzAyOCB0dW5lciAqLwotCQlkcHJpbnRrKDEsICIlczogWEMyMDI4X1RVTkVSX1JFU0VUICVkXG4iLCBfX2Z1bmNfXywgYXJnKTsKLQotCQljeF9zZXQoR1AwX0lPLCAweDAwMDQwMDAwKTsKLQkJY3hfY2xlYXIoR1AwX0lPLCAweDAwMDAwMDA0KTsKLQkJbXNsZWVwKDUpOwotCi0JCWN4X3NldChHUDBfSU8sIDB4MDAwNDAwMDQpOwotCQltc2xlZXAoNSk7Ci0JCWJyZWFrOwotCWNhc2UgWEMyMDI4X1JFU0VUX0NMSzoKLQkJZHByaW50aygxLCAiJXM6IFhDMjAyOF9SRVNFVF9DTEsgJWRcbiIsIF9fZnVuY19fLCBhcmcpOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlkcHJpbnRrKDEsICIlczogdW5rbm93biBjb21tYW5kICVkLCBhcmcgJWRcbiIsIF9fZnVuY19fLAotCQkJY29tbWFuZCwgYXJnKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JcmV0dXJuIDA7Ci19CitzdGF0aWMgc3RydWN0IHpsMTAzNTNfY29uZmlnIGR2aWNvX2Z1c2lvbmhkdHZfeGMzMDI4ID0geworCS5kZW1vZF9hZGRyZXNzID0gMHgwZiwKKwkuaWYyICAgICAgICAgICA9IDQ1NjAwLAorCS5ub190dW5lciAgICAgID0gMSwKK307CiAKIHN0YXRpYyBpbnQgZHZiX3JlZ2lzdGVyKHN0cnVjdCBjeDIzODg1X3RzcG9ydCAqcG9ydCkKIHsKIAlzdHJ1Y3QgY3gyMzg4NV9kZXYgKmRldiA9IHBvcnQtPmRldjsKIAlzdHJ1Y3QgY3gyMzg4NV9pMmMgKmkyY19idXMgPSBOVUxMOworCXN0cnVjdCB2aWRlb2J1Zl9kdmJfZnJvbnRlbmQgKmZlMDsKKworCS8qIEdldCB0aGUgZmlyc3QgZnJvbnRlbmQgKi8KKwlmZTAgPSB2aWRlb2J1Zl9kdmJfZ2V0X2Zyb250ZW5kKCZwb3J0LT5mcm9udGVuZHMsIDEpOworCWlmICghZmUwKQorCQlyZXR1cm4gLUVJTlZBTDsKIAogCS8qIGluaXQgc3RydWN0IHZpZGVvYnVmX2R2YiAqLwotCXBvcnQtPmR2Yi5uYW1lID0gZGV2LT5uYW1lOworCWZlMC0+ZHZiLm5hbWUgPSBkZXYtPm5hbWU7CiAKIAkvKiBpbml0IGZyb250ZW5kICovCiAJc3dpdGNoIChkZXYtPmJvYXJkKSB7CiAJY2FzZSBDWDIzODg1X0JPQVJEX0hBVVBQQVVHRV9IVlIxMjUwOgogCQlpMmNfYnVzID0gJmRldi0+aTJjX2J1c1swXTsKLQkJcG9ydC0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaChzNWgxNDA5X2F0dGFjaCwKKwkJZmUwLT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKHM1aDE0MDlfYXR0YWNoLAogCQkJCQkJJmhhdXBwYXVnZV9nZW5lcmljX2NvbmZpZywKIAkJCQkJCSZpMmNfYnVzLT5pMmNfYWRhcCk7Ci0JCWlmIChwb3J0LT5kdmIuZnJvbnRlbmQgIT0gTlVMTCkgewotCQkJZHZiX2F0dGFjaChtdDIxMzFfYXR0YWNoLCBwb3J0LT5kdmIuZnJvbnRlbmQsCisJCWlmIChmZTAtPmR2Yi5mcm9udGVuZCAhPSBOVUxMKSB7CisJCQlkdmJfYXR0YWNoKG10MjEzMV9hdHRhY2gsIGZlMC0+ZHZiLmZyb250ZW5kLAogCQkJCSAgICZpMmNfYnVzLT5pMmNfYWRhcCwKIAkJCQkgICAmaGF1cHBhdWdlX2dlbmVyaWNfdHVuZXJjb25maWcsIDApOwogCQl9CkBAIC0zNTgsMjcgKzMzOSwyNyBAQAogCQlpMmNfYnVzID0gJmRldi0+aTJjX2J1c1swXTsKIAkJc3dpdGNoIChhbHRfdHVuZXIpIHsKIAkJY2FzZSAxOgotCQkJcG9ydC0+ZHZiLmZyb250ZW5kID0KKwkJCWZlMC0+ZHZiLmZyb250ZW5kID0KIAkJCQlkdmJfYXR0YWNoKHM1aDE0MDlfYXR0YWNoLAogCQkJCQkgICAmaGF1cHBhdWdlX2V6cWFtX2NvbmZpZywKIAkJCQkJICAgJmkyY19idXMtPmkyY19hZGFwKTsKLQkJCWlmIChwb3J0LT5kdmIuZnJvbnRlbmQgIT0gTlVMTCkgewotCQkJCWR2Yl9hdHRhY2godGRhODI5eF9hdHRhY2gsIHBvcnQtPmR2Yi5mcm9udGVuZCwKKwkJCWlmIChmZTAtPmR2Yi5mcm9udGVuZCAhPSBOVUxMKSB7CisJCQkJZHZiX2F0dGFjaCh0ZGE4Mjl4X2F0dGFjaCwgZmUwLT5kdmIuZnJvbnRlbmQsCiAJCQkJCSAgICZkZXYtPmkyY19idXNbMV0uaTJjX2FkYXAsIDB4NDIsCiAJCQkJCSAgICZ0ZGE4Mjl4X25vX3Byb2JlKTsKLQkJCQlkdmJfYXR0YWNoKHRkYTE4MjcxX2F0dGFjaCwgcG9ydC0+ZHZiLmZyb250ZW5kLAorCQkJCWR2Yl9hdHRhY2godGRhMTgyNzFfYXR0YWNoLCBmZTAtPmR2Yi5mcm9udGVuZCwKIAkJCQkJICAgMHg2MCwgJmRldi0+aTJjX2J1c1sxXS5pMmNfYWRhcCwKIAkJCQkJICAgJmhhdXBwYXVnZV90ZGExODI3MV9jb25maWcpOwogCQkJfQogCQkJYnJlYWs7CiAJCWNhc2UgMDoKIAkJZGVmYXVsdDoKLQkJCXBvcnQtPmR2Yi5mcm9udGVuZCA9CisJCQlmZTAtPmR2Yi5mcm9udGVuZCA9CiAJCQkJZHZiX2F0dGFjaChzNWgxNDA5X2F0dGFjaCwKIAkJCQkJICAgJmhhdXBwYXVnZV9nZW5lcmljX2NvbmZpZywKIAkJCQkJICAgJmkyY19idXMtPmkyY19hZGFwKTsKLQkJCWlmIChwb3J0LT5kdmIuZnJvbnRlbmQgIT0gTlVMTCkKLQkJCQlkdmJfYXR0YWNoKG10MjEzMV9hdHRhY2gsIHBvcnQtPmR2Yi5mcm9udGVuZCwKKwkJCWlmIChmZTAtPmR2Yi5mcm9udGVuZCAhPSBOVUxMKQorCQkJCWR2Yl9hdHRhY2gobXQyMTMxX2F0dGFjaCwgZmUwLT5kdmIuZnJvbnRlbmQsCiAJCQkJCSAgICZpMmNfYnVzLT5pMmNfYWRhcCwKIAkJCQkJICAgJmhhdXBwYXVnZV9nZW5lcmljX3R1bmVyY29uZmlnLCAwKTsKIAkJCWJyZWFrOwpAQCAtMzg2LDU2ICszNjcsNTUgQEAKIAkJYnJlYWs7CiAJY2FzZSBDWDIzODg1X0JPQVJEX0hBVVBQQVVHRV9IVlIxODAwbHA6CiAJCWkyY19idXMgPSAmZGV2LT5pMmNfYnVzWzBdOwotCQlwb3J0LT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKHM1aDE0MDlfYXR0YWNoLAorCQlmZTAtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2goczVoMTQwOV9hdHRhY2gsCiAJCQkJCQkmaGF1cHBhdWdlX2h2cjE4MDBscF9jb25maWcsCiAJCQkJCQkmaTJjX2J1cy0+aTJjX2FkYXApOwotCQlpZiAocG9ydC0+ZHZiLmZyb250ZW5kICE9IE5VTEwpIHsKLQkJCWR2Yl9hdHRhY2gobXQyMTMxX2F0dGFjaCwgcG9ydC0+ZHZiLmZyb250ZW5kLAorCQlpZiAoZmUwLT5kdmIuZnJvbnRlbmQgIT0gTlVMTCkgeworCQkJZHZiX2F0dGFjaChtdDIxMzFfYXR0YWNoLCBmZTAtPmR2Yi5mcm9udGVuZCwKIAkJCQkgICAmaTJjX2J1cy0+aTJjX2FkYXAsCiAJCQkJICAgJmhhdXBwYXVnZV9nZW5lcmljX3R1bmVyY29uZmlnLCAwKTsKIAkJfQogCQlicmVhazsKIAljYXNlIENYMjM4ODVfQk9BUkRfRFZJQ09fRlVTSU9OSERUVl81X0VYUDoKIAkJaTJjX2J1cyA9ICZkZXYtPmkyY19idXNbMF07Ci0JCXBvcnQtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2gobGdkdDMzMHhfYXR0YWNoLAorCQlmZTAtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2gobGdkdDMzMHhfYXR0YWNoLAogCQkJCQkJJmZ1c2lvbmhkdHZfNV9leHByZXNzLAogCQkJCQkJJmkyY19idXMtPmkyY19hZGFwKTsKLQkJaWYgKHBvcnQtPmR2Yi5mcm9udGVuZCAhPSBOVUxMKSB7Ci0JCQlkdmJfYXR0YWNoKHNpbXBsZV90dW5lcl9hdHRhY2gsIHBvcnQtPmR2Yi5mcm9udGVuZCwKKwkJaWYgKGZlMC0+ZHZiLmZyb250ZW5kICE9IE5VTEwpIHsKKwkJCWR2Yl9hdHRhY2goc2ltcGxlX3R1bmVyX2F0dGFjaCwgZmUwLT5kdmIuZnJvbnRlbmQsCiAJCQkJICAgJmkyY19idXMtPmkyY19hZGFwLCAweDYxLAogCQkJCSAgIFRVTkVSX0xHX1REVlNfSDA2WEYpOwogCQl9CiAJCWJyZWFrOwogCWNhc2UgQ1gyMzg4NV9CT0FSRF9IQVVQUEFVR0VfSFZSMTUwMFE6CiAJCWkyY19idXMgPSAmZGV2LT5pMmNfYnVzWzFdOwotCQlwb3J0LT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKHM1aDE0MDlfYXR0YWNoLAorCQlmZTAtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2goczVoMTQwOV9hdHRhY2gsCiAJCQkJCQkmaGF1cHBhdWdlX2h2cjE1MDBxX2NvbmZpZywKIAkJCQkJCSZkZXYtPmkyY19idXNbMF0uaTJjX2FkYXApOwotCQlpZiAocG9ydC0+ZHZiLmZyb250ZW5kICE9IE5VTEwpCi0JCQlkdmJfYXR0YWNoKHhjNTAwMF9hdHRhY2gsIHBvcnQtPmR2Yi5mcm9udGVuZCwKLQkJCQkmaTJjX2J1cy0+aTJjX2FkYXAsCi0JCQkJJmhhdXBwYXVnZV9odnIxNTAwcV90dW5lcmNvbmZpZywgaTJjX2J1cyk7CisJCWlmIChmZTAtPmR2Yi5mcm9udGVuZCAhPSBOVUxMKQorCQkJZHZiX2F0dGFjaCh4YzUwMDBfYXR0YWNoLCBmZTAtPmR2Yi5mcm9udGVuZCwKKwkJCQkgICAmaTJjX2J1cy0+aTJjX2FkYXAsCisJCQkJICAgJmhhdXBwYXVnZV9odnIxNTAwcV90dW5lcmNvbmZpZyk7CiAJCWJyZWFrOwogCWNhc2UgQ1gyMzg4NV9CT0FSRF9IQVVQUEFVR0VfSFZSMTUwMDoKIAkJaTJjX2J1cyA9ICZkZXYtPmkyY19idXNbMV07Ci0JCXBvcnQtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2goczVoMTQwOV9hdHRhY2gsCisJCWZlMC0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaChzNWgxNDA5X2F0dGFjaCwKIAkJCQkJCSZoYXVwcGF1Z2VfaHZyMTUwMF9jb25maWcsCiAJCQkJCQkmZGV2LT5pMmNfYnVzWzBdLmkyY19hZGFwKTsKLQkJaWYgKHBvcnQtPmR2Yi5mcm9udGVuZCAhPSBOVUxMKSB7CisJCWlmIChmZTAtPmR2Yi5mcm9udGVuZCAhPSBOVUxMKSB7CiAJCQlzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZTsKIAkJCXN0cnVjdCB4YzIwMjhfY29uZmlnIGNmZyA9IHsKIAkJCQkuaTJjX2FkYXAgID0gJmkyY19idXMtPmkyY19hZGFwLAogCQkJCS5pMmNfYWRkciAgPSAweDYxLAotCQkJCS5jYWxsYmFjayAgPSBjeDIzODg1X2h2cjE1MDBfeGMzMDI4X2NhbGxiYWNrLAogCQkJfTsKIAkJCXN0YXRpYyBzdHJ1Y3QgeGMyMDI4X2N0cmwgY3RsID0gewotCQkJCS5mbmFtZSAgICAgICA9ICJ4YzMwMjgtdjI3LmZ3IiwKKwkJCQkuZm5hbWUgICAgICAgPSBYQzIwMjhfREVGQVVMVF9GSVJNV0FSRSwKIAkJCQkubWF4X2xlbiAgICAgPSA2NCwKIAkJCQkuc2NvZGVfdGFibGUgPSBYQzMwMjhfRkVfT1JFTjUzOCwKIAkJCX07CiAKIAkJCWZlID0gZHZiX2F0dGFjaCh4YzIwMjhfYXR0YWNoLAotCQkJCQlwb3J0LT5kdmIuZnJvbnRlbmQsICZjZmcpOworCQkJCQlmZTAtPmR2Yi5mcm9udGVuZCwgJmNmZyk7CiAJCQlpZiAoZmUgIT0gTlVMTCAmJiBmZS0+b3BzLnR1bmVyX29wcy5zZXRfY29uZmlnICE9IE5VTEwpCiAJCQkJZmUtPm9wcy50dW5lcl9vcHMuc2V0X2NvbmZpZyhmZSwgJmN0bCk7CiAJCX0KQEAgLTQ0MywzOSArNDIzLDQwIEBACiAJY2FzZSBDWDIzODg1X0JPQVJEX0hBVVBQQVVHRV9IVlIxMjAwOgogCWNhc2UgQ1gyMzg4NV9CT0FSRF9IQVVQUEFVR0VfSFZSMTcwMDoKIAkJaTJjX2J1cyA9ICZkZXYtPmkyY19idXNbMF07Ci0JCXBvcnQtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2godGRhMTAwNDhfYXR0YWNoLAorCQlmZTAtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2godGRhMTAwNDhfYXR0YWNoLAogCQkJJmhhdXBwYXVnZV9odnIxMjAwX2NvbmZpZywKIAkJCSZpMmNfYnVzLT5pMmNfYWRhcCk7Ci0JCWlmIChwb3J0LT5kdmIuZnJvbnRlbmQgIT0gTlVMTCkgewotCQkJZHZiX2F0dGFjaCh0ZGE4Mjl4X2F0dGFjaCwgcG9ydC0+ZHZiLmZyb250ZW5kLAorCQlpZiAoZmUwLT5kdmIuZnJvbnRlbmQgIT0gTlVMTCkgeworCQkJZHZiX2F0dGFjaCh0ZGE4Mjl4X2F0dGFjaCwgZmUwLT5kdmIuZnJvbnRlbmQsCiAJCQkJJmRldi0+aTJjX2J1c1sxXS5pMmNfYWRhcCwgMHg0MiwKIAkJCQkmdGRhODI5eF9ub19wcm9iZSk7Ci0JCQlkdmJfYXR0YWNoKHRkYTE4MjcxX2F0dGFjaCwgcG9ydC0+ZHZiLmZyb250ZW5kLAorCQkJZHZiX2F0dGFjaCh0ZGExODI3MV9hdHRhY2gsIGZlMC0+ZHZiLmZyb250ZW5kLAogCQkJCTB4NjAsICZkZXYtPmkyY19idXNbMV0uaTJjX2FkYXAsCiAJCQkJJmhhdXBwYXVnZV9odnIxMjAwX3R1bmVyX2NvbmZpZyk7CiAJCX0KIAkJYnJlYWs7CiAJY2FzZSBDWDIzODg1X0JPQVJEX0hBVVBQQVVHRV9IVlIxNDAwOgogCQlpMmNfYnVzID0gJmRldi0+aTJjX2J1c1swXTsKLQkJcG9ydC0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaChkaWI3MDAwcF9hdHRhY2gsCisJCWZlMC0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaChkaWI3MDAwcF9hdHRhY2gsCiAJCQkmaTJjX2J1cy0+aTJjX2FkYXAsCiAJCQkweDEyLCAmaGF1cHBhdWdlX2h2cjE0MDBfZGliNzAwMF9jb25maWcpOwotCQlpZiAocG9ydC0+ZHZiLmZyb250ZW5kICE9IE5VTEwpIHsKKwkJaWYgKGZlMC0+ZHZiLmZyb250ZW5kICE9IE5VTEwpIHsKIAkJCXN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlOwogCQkJc3RydWN0IHhjMjAyOF9jb25maWcgY2ZnID0gewogCQkJCS5pMmNfYWRhcCAgPSAmZGV2LT5pMmNfYnVzWzFdLmkyY19hZGFwLAogCQkJCS5pMmNfYWRkciAgPSAweDY0LAotCQkJCS5jYWxsYmFjayAgPSBjeDIzODg1X2h2cjE1MDBfeGMzMDI4X2NhbGxiYWNrLAogCQkJfTsKIAkJCXN0YXRpYyBzdHJ1Y3QgeGMyMDI4X2N0cmwgY3RsID0gewotCQkJCS5mbmFtZSAgID0gInhjMzAyOEwtdjM2LmZ3IiwKKwkJCQkuZm5hbWUgICA9IFhDMzAyOExfREVGQVVMVF9GSVJNV0FSRSwKIAkJCQkubWF4X2xlbiA9IDY0LAogCQkJCS5kZW1vZCAgID0gNTAwMCwKLQkJCQkuZDI2MzMgICA9IDEKKwkJCQkvKiBUaGlzIGlzIHRydWUgZm9yIGFsbCBkZW1vZHMgd2l0aAorCQkJCQl2MzYgZmlybXdhcmU/ICovCisJCQkJLnR5cGUgICAgPSBYQzIwMjhfRDI2MzMsCiAJCQl9OwogCiAJCQlmZSA9IGR2Yl9hdHRhY2goeGMyMDI4X2F0dGFjaCwKLQkJCQkJcG9ydC0+ZHZiLmZyb250ZW5kLCAmY2ZnKTsKKwkJCQkJZmUwLT5kdmIuZnJvbnRlbmQsICZjZmcpOwogCQkJaWYgKGZlICE9IE5VTEwgJiYgZmUtPm9wcy50dW5lcl9vcHMuc2V0X2NvbmZpZyAhPSBOVUxMKQogCQkJCWZlLT5vcHMudHVuZXJfb3BzLnNldF9jb25maWcoZmUsICZjdGwpOwogCQl9CkBAIC00ODMsNzcgKzQ2NCwxNjMgQEAKIAljYXNlIENYMjM4ODVfQk9BUkRfRFZJQ09fRlVTSU9OSERUVl83X0RVQUxfRVhQOgogCQlpMmNfYnVzID0gJmRldi0+aTJjX2J1c1twb3J0LT5uciAtIDFdOwogCi0JCXBvcnQtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2goczVoMTQwOV9hdHRhY2gsCisJCWZlMC0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaChzNWgxNDA5X2F0dGFjaCwKIAkJCQkJCSZkdmljb19zNWgxNDA5X2NvbmZpZywKIAkJCQkJCSZpMmNfYnVzLT5pMmNfYWRhcCk7Ci0JCWlmIChwb3J0LT5kdmIuZnJvbnRlbmQgPT0gTlVMTCkKLQkJCXBvcnQtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2goczVoMTQxMV9hdHRhY2gsCisJCWlmIChmZTAtPmR2Yi5mcm9udGVuZCA9PSBOVUxMKQorCQkJZmUwLT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKHM1aDE0MTFfYXR0YWNoLAogCQkJCQkJCSZkdmljb19zNWgxNDExX2NvbmZpZywKIAkJCQkJCQkmaTJjX2J1cy0+aTJjX2FkYXApOwotCQlpZiAocG9ydC0+ZHZiLmZyb250ZW5kICE9IE5VTEwpCi0JCQlkdmJfYXR0YWNoKHhjNTAwMF9hdHRhY2gsIHBvcnQtPmR2Yi5mcm9udGVuZCwKLQkJCQkmaTJjX2J1cy0+aTJjX2FkYXAsCi0JCQkJJmR2aWNvX3hjNTAwMF90dW5lcmNvbmZpZywgaTJjX2J1cyk7CisJCWlmIChmZTAtPmR2Yi5mcm9udGVuZCAhPSBOVUxMKQorCQkJZHZiX2F0dGFjaCh4YzUwMDBfYXR0YWNoLCBmZTAtPmR2Yi5mcm9udGVuZCwKKwkJCQkgICAmaTJjX2J1cy0+aTJjX2FkYXAsCisJCQkJICAgJmR2aWNvX3hjNTAwMF90dW5lcmNvbmZpZyk7CisJCWJyZWFrOworCWNhc2UgQ1gyMzg4NV9CT0FSRF9EVklDT19GVVNJT05IRFRWX0RWQl9UX0RVQUxfRVhQOiB7CisJCWkyY19idXMgPSAmZGV2LT5pMmNfYnVzW3BvcnQtPm5yIC0gMV07CisKKwkJZmUwLT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKHpsMTAzNTNfYXR0YWNoLAorCQkJCQkgICAgICAgJmR2aWNvX2Z1c2lvbmhkdHZfeGMzMDI4LAorCQkJCQkgICAgICAgJmkyY19idXMtPmkyY19hZGFwKTsKKwkJaWYgKGZlMC0+ZHZiLmZyb250ZW5kICE9IE5VTEwpIHsKKwkJCXN0cnVjdCBkdmJfZnJvbnRlbmQgICAgICAqZmU7CisJCQlzdHJ1Y3QgeGMyMDI4X2NvbmZpZwkgIGNmZyA9IHsKKwkJCQkuaTJjX2FkYXAgID0gJmkyY19idXMtPmkyY19hZGFwLAorCQkJCS5pMmNfYWRkciAgPSAweDYxLAorCQkJfTsKKwkJCXN0YXRpYyBzdHJ1Y3QgeGMyMDI4X2N0cmwgY3RsID0geworCQkJCS5mbmFtZSAgICAgICA9IFhDMjAyOF9ERUZBVUxUX0ZJUk1XQVJFLAorCQkJCS5tYXhfbGVuICAgICA9IDY0LAorCQkJCS5kZW1vZCAgICAgICA9IFhDMzAyOF9GRV9aQVJMSU5LNDU2LAorCQkJfTsKKworCQkJZmUgPSBkdmJfYXR0YWNoKHhjMjAyOF9hdHRhY2gsIGZlMC0+ZHZiLmZyb250ZW5kLAorCQkJCQkmY2ZnKTsKKwkJCWlmIChmZSAhPSBOVUxMICYmIGZlLT5vcHMudHVuZXJfb3BzLnNldF9jb25maWcgIT0gTlVMTCkKKwkJCQlmZS0+b3BzLnR1bmVyX29wcy5zZXRfY29uZmlnKGZlLCAmY3RsKTsKKwkJfQorCQlicmVhazsKKwl9CisJY2FzZSBDWDIzODg1X0JPQVJEX0xFQURURUtfV0lORkFTVF9QWERWUjMyMDBfSDoKKwkJaTJjX2J1cyA9ICZkZXYtPmkyY19idXNbMF07CisKKwkJZmUwLT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKHpsMTAzNTNfYXR0YWNoLAorCQkJJmR2aWNvX2Z1c2lvbmhkdHZfeGMzMDI4LAorCQkJJmkyY19idXMtPmkyY19hZGFwKTsKKwkJaWYgKGZlMC0+ZHZiLmZyb250ZW5kICE9IE5VTEwpIHsKKwkJCXN0cnVjdCBkdmJfZnJvbnRlbmQgICAgICAqZmU7CisJCQlzdHJ1Y3QgeGMyMDI4X2NvbmZpZwkgIGNmZyA9IHsKKwkJCQkuaTJjX2FkYXAgID0gJmRldi0+aTJjX2J1c1sxXS5pMmNfYWRhcCwKKwkJCQkuaTJjX2FkZHIgID0gMHg2MSwKKwkJCX07CisJCQlzdGF0aWMgc3RydWN0IHhjMjAyOF9jdHJsIGN0bCA9IHsKKwkJCQkuZm5hbWUgICAgICAgPSBYQzIwMjhfREVGQVVMVF9GSVJNV0FSRSwKKwkJCQkubWF4X2xlbiAgICAgPSA2NCwKKwkJCQkuZGVtb2QgICAgICAgPSBYQzMwMjhfRkVfWkFSTElOSzQ1NiwKKwkJCX07CisKKwkJCWZlID0gZHZiX2F0dGFjaCh4YzIwMjhfYXR0YWNoLCBmZTAtPmR2Yi5mcm9udGVuZCwKKwkJCQkmY2ZnKTsKKwkJCWlmIChmZSAhPSBOVUxMICYmIGZlLT5vcHMudHVuZXJfb3BzLnNldF9jb25maWcgIT0gTlVMTCkKKwkJCQlmZS0+b3BzLnR1bmVyX29wcy5zZXRfY29uZmlnKGZlLCAmY3RsKTsKKwkJfQogCQlicmVhazsKIAlkZWZhdWx0OgotCQlwcmludGsoIiVzOiBUaGUgZnJvbnRlbmQgb2YgeW91ciBEVkIvQVRTQyBjYXJkIGlzbid0IHN1cHBvcnRlZCB5ZXRcbiIsCisJCXByaW50ayhLRVJOX0lORk8gIiVzOiBUaGUgZnJvbnRlbmQgb2YgeW91ciBEVkIvQVRTQyBjYXJkICIKKwkJCSIgaXNuJ3Qgc3VwcG9ydGVkIHlldFxuIiwKIAkJICAgICAgIGRldi0+bmFtZSk7CiAJCWJyZWFrOwogCX0KLQlpZiAoTlVMTCA9PSBwb3J0LT5kdmIuZnJvbnRlbmQpIHsKLQkJcHJpbnRrKCIlczogZnJvbnRlbmQgaW5pdGlhbGl6YXRpb24gZmFpbGVkXG4iLCBkZXYtPm5hbWUpOworCWlmIChOVUxMID09IGZlMC0+ZHZiLmZyb250ZW5kKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGZyb250ZW5kIGluaXRpYWxpemF0aW9uIGZhaWxlZFxuIiwKKwkJCWRldi0+bmFtZSk7CiAJCXJldHVybiAtMTsKIAl9CisJLyogZGVmaW5lIGdlbmVyYWwtcHVycG9zZSBjYWxsYmFjayBwb2ludGVyICovCisJZmUwLT5kdmIuZnJvbnRlbmQtPmNhbGxiYWNrID0gY3gyMzg4NV90dW5lcl9jYWxsYmFjazsKIAogCS8qIFB1dCB0aGUgYW5hbG9nIGRlY29kZXIgaW4gc3RhbmRieSB0byBrZWVwIGl0IHF1aWV0ICovCiAJY3gyMzg4NV9jYWxsX2kyY19jbGllbnRzKGkyY19idXMsIFRVTkVSX1NFVF9TVEFOREJZLCBOVUxMKTsKIAotCWlmIChwb3J0LT5kdmIuZnJvbnRlbmQtPm9wcy5hbmFsb2dfb3BzLnN0YW5kYnkpCi0JCXBvcnQtPmR2Yi5mcm9udGVuZC0+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+bmFtZSwgYnVzLT5ucik7CiAKIAlyZXR1cm4gYnVzLT5pMmNfcmM7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvY3gyMzg4NS12YmkuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9jeDIzODg1LXZiaS5jCmluZGV4IDM1ZTYxY2QuLjViMjk3ZjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9jeDIzODg1LXZiaS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9jeDIzODg1LXZiaS5jCkBAIC04NSwxOCArODUsOCBAQAogCXJldHVybiAwOwogfQogCi1pbnQgY3gyMzg4NV9zdG9wX3ZiaV9kbWEoc3RydWN0IGN4MjM4ODVfZGV2ICpkZXYpCi17Ci0JLyogc3RvcCBkbWEgKi8KLQljeF9jbGVhcihWSURfQV9ETUFfQ1RMLCAweDAwMDAwMDIyKTsKIAotCS8qIGRpc2FibGUgaXJxcyAqLwotCWN4X2NsZWFyKFBDSV9JTlRfTVNLLCAweDAwMDAwMSk7Ci0JY3hfY2xlYXIoVklEX0FfSU5UX01TSywgMHgwMDAwMDAyMik7Ci0JcmV0dXJuIDA7Ci19Ci0KLWludCBjeDIzODg1X3Jlc3RhcnRfdmJpX3F1ZXVlKHN0cnVjdCBjeDIzODg1X2RldiAgICAqZGV2LAorc3RhdGljIGludCBjeDIzODg1X3Jlc3RhcnRfdmJpX3F1ZXVlKHN0cnVjdCBjeDIzODg1X2RldiAgICAqZGV2LAogCQkJICAgICBzdHJ1Y3QgY3gyMzg4NV9kbWFxdWV1ZSAqcSkKIHsKIAlzdHJ1Y3QgY3gyMzg4NV9idWZmZXIgKmJ1ZjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9jeDIzODg1LXZpZGVvLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvY3gyMzg4NS12aWRlby5jCmluZGV4IDYwNDdjNzguLmFiMzExMGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9jeDIzODg1LXZpZGVvLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L2N4MjM4ODUtdmlkZW8uYwpAQCAtMjQ0LDcgKzI0NCw3IEBACiB9Owogc3RhdGljIGNvbnN0IGludCBDWDIzODg1X0NUTFMgPSBBUlJBWV9TSVpFKGN4MjM4ODVfY3Rscyk7CiAKLWNvbnN0IHUzMiBjeDIzODg1X3VzZXJfY3RybHNbXSA9IHsKK3N0YXRpYyBjb25zdCB1MzIgY3gyMzg4NV91c2VyX2N0cmxzW10gPSB7CiAJVjRMMl9DSURfVVNFUl9DTEFTUywKIAlWNEwyX0NJRF9CUklHSFRORVNTLAogCVY0TDJfQ0lEX0NPTlRSQVNULApAQCAtMjU0LDE0ICsyNTQsMTMgQEAKIAlWNEwyX0NJRF9BVURJT19NVVRFLAogCTAKIH07Ci1FWFBPUlRfU1lNQk9MKGN4MjM4ODVfdXNlcl9jdHJscyk7CiAKIHN0YXRpYyBjb25zdCB1MzIgKmN0cmxfY2xhc3Nlc1tdID0gewogCWN4MjM4ODVfdXNlcl9jdHJscywKIAlOVUxMCiB9OwogCi12b2lkIGN4MjM4ODVfdmlkZW9fd2FrZXVwKHN0cnVjdCBjeDIzODg1X2RldiAqZGV2LAorc3RhdGljIHZvaWQgY3gyMzg4NV92aWRlb193YWtldXAoc3RydWN0IGN4MjM4ODVfZGV2ICpkZXYsCiAJCSBzdHJ1Y3QgY3gyMzg4NV9kbWFxdWV1ZSAqcSwgdTMyIGNvdW50KQogewogCXN0cnVjdCBjeDIzODg1X2J1ZmZlciAqYnVmOwpAQCAtMjg2LDE3ICsyODUsMTYgQEAKIAkJbGlzdF9kZWwoJmJ1Zi0+dmIucXVldWUpOwogCQl3YWtlX3VwKCZidWYtPnZiLmRvbmUpOwogCX0KLQlpZiAobGlzdF9lbXB0eSgmcS0+YWN0aXZlKSkgeworCWlmIChsaXN0X2VtcHR5KCZxLT5hY3RpdmUpKQogCQlkZWxfdGltZXIoJnEtPnRpbWVvdXQpOwotCX0gZWxzZSB7CisJZWxzZQogCQltb2RfdGltZXIoJnEtPnRpbWVvdXQsIGppZmZpZXMrQlVGRkVSX1RJTUVPVVQpOwotCX0KIAlpZiAoYmMgIT0gMSkKIAkJcHJpbnRrKEtFUk5fRVJSICIlczogJWQgYnVmZmVycyBoYW5kbGVkIChzaG91bGQgYmUgMSlcbiIsCiAJCQlfX2Z1bmNfXywgYmMpOwogfQogCi1pbnQgY3gyMzg4NV9zZXRfdHZub3JtKHN0cnVjdCBjeDIzODg1X2RldiAqZGV2LCB2NGwyX3N0ZF9pZCBub3JtKQorc3RhdGljIGludCBjeDIzODg1X3NldF90dm5vcm0oc3RydWN0IGN4MjM4ODVfZGV2ICpkZXYsIHY0bDJfc3RkX2lkIG5vcm0pCiB7CiAJZHByaW50aygxLCAiJXMobm9ybSA9IDB4JTA4eCkgbmFtZTogWyVzXVxuIiwKIAkJX19mdW5jX18sCkBAIC0zMTQsNyArMzEyLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RydWN0IHZpZGVvX2RldmljZSAqY3gyMzg4NV92ZGV2X2luaXQoc3RydWN0IGN4MjM4ODVfZGV2ICpkZXYsCitzdGF0aWMgc3RydWN0IHZpZGVvX2RldmljZSAqY3gyMzg4NV92ZGV2X2luaXQoc3RydWN0IGN4MjM4ODVfZGV2ICpkZXYsCiAJCQkJICAgIHN0cnVjdCBwY2lfZGV2ICpwY2ksCiAJCQkJICAgIHN0cnVjdCB2aWRlb19kZXZpY2UgKnRlbXBsYXRlLAogCQkJCSAgICBjaGFyICp0eXBlKQpAQCAtMzM0LDcgKzMzMiw3IEBACiAJcmV0dXJuIHZmZDsKIH0KIAotaW50IGN4MjM4ODVfY3RybF9xdWVyeShzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgKnFjdHJsKQorc3RhdGljIGludCBjeDIzODg1X2N0cmxfcXVlcnkoc3RydWN0IHY0bDJfcXVlcnljdHJsICpxY3RybCkKIHsKIAlpbnQgaTsKIApAQCAtMzUxLDcgKzM0OSw2IEBACiAJKnFjdHJsID0gY3gyMzg4NV9jdGxzW2ldLnY7CiAJcmV0dXJuIDA7CiB9Ci1FWFBPUlRfU1lNQk9MKGN4MjM4ODVfY3RybF9xdWVyeSk7CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIC8qIHJlc291cmNlIG1hbmFnZW1lbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KQEAgLTM4MSwxMiArMzc4LDEyIEBACiAKIHN0YXRpYyBpbnQgcmVzX2NoZWNrKHN0cnVjdCBjeDIzODg1X2ZoICpmaCwgdW5zaWduZWQgaW50IGJpdCkKIHsKLQlyZXR1cm4gKGZoLT5yZXNvdXJjZXMgJiBiaXQpOworCXJldHVybiBmaC0+cmVzb3VyY2VzICYgYml0OwogfQogCiBzdGF0aWMgaW50IHJlc19sb2NrZWQoc3RydWN0IGN4MjM4ODVfZGV2ICpkZXYsIHVuc2lnbmVkIGludCBiaXQpCiB7Ci0JcmV0dXJuIChkZXYtPnJlc291cmNlcyAmIGJpdCk7CisJcmV0dXJuIGRldi0+cmVzb3VyY2VzICYgYml0OwogfQogCiBzdGF0aWMgdm9pZCByZXNfZnJlZShzdHJ1Y3QgY3gyMzg4NV9kZXYgKmRldiwgc3RydWN0IGN4MjM4ODVfZmggKmZoLApAQCAtNDAyLDcgKzM5OSw3IEBACiAJbXV0ZXhfdW5sb2NrKCZkZXYtPmxvY2spOwogfQogCi1pbnQgY3gyMzg4NV92aWRlb19tdXgoc3RydWN0IGN4MjM4ODVfZGV2ICpkZXYsIHVuc2lnbmVkIGludCBpbnB1dCkKK3N0YXRpYyBpbnQgY3gyMzg4NV92aWRlb19tdXgoc3RydWN0IGN4MjM4ODVfZGV2ICpkZXYsIHVuc2lnbmVkIGludCBpbnB1dCkKIHsKIAlzdHJ1Y3QgdjRsMl9yb3V0aW5nIHJvdXRlOwogCW1lbXNldCgmcm91dGUsIDAsIHNpemVvZihyb3V0ZSkpOwpAQCAtNDIyLDEwICs0MTksOSBAQAogCiAJcmV0dXJuIDA7CiB9Ci1FWFBPUlRfU1lNQk9MKGN4MjM4ODVfdmlkZW9fbXV4KTsKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi1pbnQgY3gyMzg4NV9zZXRfc2NhbGUoc3RydWN0IGN4MjM4ODVfZGV2ICpkZXYsIHVuc2lnbmVkIGludCB3aWR0aCwKK3N0YXRpYyBpbnQgY3gyMzg4NV9zZXRfc2NhbGUoc3RydWN0IGN4MjM4ODVfZGV2ICpkZXYsIHVuc2lnbmVkIGludCB3aWR0aCwKIAl1bnNpZ25lZCBpbnQgaGVpZ2h0LCBlbnVtIHY0bDJfZmllbGQgZmllbGQpCiB7CiAJZHByaW50aygxLCAiJXMoKVxuIiwgX19mdW5jX18pOwpAQCAtNzMxLDYgKzcyNyw3IEBACiAJZW51bSB2NGwyX2J1Zl90eXBlIHR5cGUgPSAwOwogCWludCByYWRpbyA9IDA7CiAKKwlsb2NrX2tlcm5lbCgpOwogCWxpc3RfZm9yX2VhY2gobGlzdCwgJmN4MjM4ODVfZGV2bGlzdCkgewogCQloID0gbGlzdF9lbnRyeShsaXN0LCBzdHJ1Y3QgY3gyMzg4NV9kZXYsIGRldmxpc3QpOwogCQlpZiAoaC0+dmlkZW9fZGV2LT5taW5vciA9PSBtaW5vcikgewpAQCAtNzQ4LDE2ICs3NDUsMjAgQEAKIAkJCWRldiAgID0gaDsKIAkJfQogCX0KLQlpZiAoTlVMTCA9PSBkZXYpCisJaWYgKE5VTEwgPT0gZGV2KSB7CisJCXVubG9ja19rZXJuZWwoKTsKIAkJcmV0dXJuIC1FTk9ERVY7CisJfQogCiAJZHByaW50aygxLCAib3BlbiBtaW5vcj0lZCByYWRpbz0lZCB0eXBlPSVzXG4iLAogCQltaW5vciwgcmFkaW8sIHY0bDJfdHlwZV9uYW1lc1t0eXBlXSk7CiAKIAkvKiBhbGxvY2F0ZSArIGluaXRpYWxpemUgcGVyIGZpbGVoYW5kbGUgZGF0YSAqLwogCWZoID0ga3phbGxvYyhzaXplb2YoKmZoKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKE5VTEwgPT0gZmgpCisJaWYgKE5VTEwgPT0gZmgpIHsKKwkJdW5sb2NrX2tlcm5lbCgpOwogCQlyZXR1cm4gLUVOT01FTTsKKwl9CiAJZmlsZS0+cHJpdmF0ZV9kYXRhID0gZmg7CiAJZmgtPmRldiAgICAgID0gZGV2OwogCWZoLT5yYWRpbyAgICA9IHJhZGlvOwpAQCAtNzc1LDYgKzc3Niw3IEBACiAKIAlkcHJpbnRrKDEsICJwb3N0IHZpZGVvYnVmX3F1ZXVlX2luaXQoKVxuIik7CiAKKwl1bmxvY2tfa2VybmVsKCk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTg4NCwyMSArODg2LDIxIEBACiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIC8qIFZJREVPIENUUkwgSU9DVExTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogCi1pbnQgY3gyMzg4NV9nZXRfY29udHJvbChzdHJ1Y3QgY3gyMzg4NV9kZXYgKmRldiwgc3RydWN0IHY0bDJfY29udHJvbCAqY3RsKQorc3RhdGljIGludCBjeDIzODg1X2dldF9jb250cm9sKHN0cnVjdCBjeDIzODg1X2RldiAqZGV2LAorCXN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0bCkKIHsKIAlkcHJpbnRrKDEsICIlcygpIGNhbGxpbmcgY3gyNTg0MChWSURJT0NfR19DVFJMKVxuIiwgX19mdW5jX18pOwogCWN4MjM4ODVfY2FsbF9pMmNfY2xpZW50cygmZGV2LT5pMmNfYnVzWzJdLCBWSURJT0NfR19DVFJMLCBjdGwpOwogCXJldHVybiAwOwogfQotRVhQT1JUX1NZTUJPTChjeDIzODg1X2dldF9jb250cm9sKTsKIAotaW50IGN4MjM4ODVfc2V0X2NvbnRyb2woc3RydWN0IGN4MjM4ODVfZGV2ICpkZXYsIHN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0bCkKK3N0YXRpYyBpbnQgY3gyMzg4NV9zZXRfY29udHJvbChzdHJ1Y3QgY3gyMzg4NV9kZXYgKmRldiwKKwlzdHJ1Y3QgdjRsMl9jb250cm9sICpjdGwpCiB7CiAJZHByaW50aygxLCAiJXMoKSBjYWxsaW5nIGN4MjU4NDAoVklESU9DX1NfQ1RSTCkiCiAJCSIgKGRpc2FibGVkIC0gbm8gYWN0aW9uKVxuIiwgX19mdW5jX18pOwogCXJldHVybiAwOwogfQotRVhQT1JUX1NZTUJPTChjeDIzODg1X3NldF9jb250cm9sKTsKIAogc3RhdGljIHZvaWQgaW5pdF9jb250cm9scyhzdHJ1Y3QgY3gyMzg4NV9kZXYgKmRldikKIHsKQEAgLTEwNzIsMjkgKzEwNzQsMjkgQEAKIAlzdHJ1Y3QgdjRsMl9yZXF1ZXN0YnVmZmVycyAqcCkKIHsKIAlzdHJ1Y3QgY3gyMzg4NV9maCAqZmggPSBwcml2OwotCXJldHVybiAodmlkZW9idWZfcmVxYnVmcyhnZXRfcXVldWUoZmgpLCBwKSk7CisJcmV0dXJuIHZpZGVvYnVmX3JlcWJ1ZnMoZ2V0X3F1ZXVlKGZoKSwgcCk7CiB9CiAKIHN0YXRpYyBpbnQgdmlkaW9jX3F1ZXJ5YnVmKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCXN0cnVjdCB2NGwyX2J1ZmZlciAqcCkKIHsKIAlzdHJ1Y3QgY3gyMzg4NV9maCAqZmggPSBwcml2OwotCXJldHVybiAodmlkZW9idWZfcXVlcnlidWYoZ2V0X3F1ZXVlKGZoKSwgcCkpOworCXJldHVybiB2aWRlb2J1Zl9xdWVyeWJ1ZihnZXRfcXVldWUoZmgpLCBwKTsKIH0KIAogc3RhdGljIGludCB2aWRpb2NfcWJ1ZihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAlzdHJ1Y3QgdjRsMl9idWZmZXIgKnApCiB7CiAJc3RydWN0IGN4MjM4ODVfZmggKmZoID0gcHJpdjsKLQlyZXR1cm4gKHZpZGVvYnVmX3FidWYoZ2V0X3F1ZXVlKGZoKSwgcCkpOworCXJldHVybiB2aWRlb2J1Zl9xYnVmKGdldF9xdWV1ZShmaCksIHApOwogfQogCiBzdGF0aWMgaW50IHZpZGlvY19kcWJ1ZihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAlzdHJ1Y3QgdjRsMl9idWZmZXIgKnApCiB7CiAJc3RydWN0IGN4MjM4ODVfZmggKmZoID0gcHJpdjsKLQlyZXR1cm4gKHZpZGVvYnVmX2RxYnVmKGdldF9xdWV1ZShmaCksIHAsCi0JCQkJZmlsZS0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spKTsKKwlyZXR1cm4gdmlkZW9idWZfZHFidWYoZ2V0X3F1ZXVlKGZoKSwgcCwKKwkJCQlmaWxlLT5mX2ZsYWdzICYgT19OT05CTE9DSyk7CiB9CiAKIHN0YXRpYyBpbnQgdmlkaW9jX3N0cmVhbW9uKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LApAQCAtMTE0Niw3ICsxMTQ4LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotaW50IGN4MjM4ODVfZW51bV9pbnB1dChzdHJ1Y3QgY3gyMzg4NV9kZXYgKmRldiwgc3RydWN0IHY0bDJfaW5wdXQgKmkpCitzdGF0aWMgaW50IGN4MjM4ODVfZW51bV9pbnB1dChzdHJ1Y3QgY3gyMzg4NV9kZXYgKmRldiwgc3RydWN0IHY0bDJfaW5wdXQgKmkpCiB7CiAJc3RhdGljIGNvbnN0IGNoYXIgKmluYW1lW10gPSB7CiAJCVtDWDIzODg1X1ZNVVhfQ09NUE9TSVRFMV0gPSAiQ29tcG9zaXRlMSIsCkBAIC0xMTc5LDcgKzExODEsNiBAQAogCQlpLT5zdGQgPSBDWDIzODg1X05PUk1TOwogCXJldHVybiAwOwogfQotRVhQT1JUX1NZTUJPTChjeDIzODg1X2VudW1faW5wdXQpOwogCiBzdGF0aWMgaW50IHZpZGlvY19lbnVtX2lucHV0KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQkJCXN0cnVjdCB2NGwyX2lucHV0ICppKQpAQCAtMTI4OCw3ICsxMjg5LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotaW50IGN4MjM4ODVfc2V0X2ZyZXEoc3RydWN0IGN4MjM4ODVfZGV2ICpkZXYsIHN0cnVjdCB2NGwyX2ZyZXF1ZW5jeSAqZikKK3N0YXRpYyBpbnQgY3gyMzg4NV9zZXRfZnJlcShzdHJ1Y3QgY3gyMzg4NV9kZXYgKmRldiwgc3RydWN0IHY0bDJfZnJlcXVlbmN5ICpmKQogewogCWlmICh1bmxpa2VseShVTlNFVCA9PSBkZXYtPnR1bmVyX3R5cGUpKQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTEzMDcsNyArMTMwOCw2IEBACiAKIAlyZXR1cm4gMDsKIH0KLUVYUE9SVF9TWU1CT0woY3gyMzg4NV9zZXRfZnJlcSk7CiAKIHN0YXRpYyBpbnQgdmlkaW9jX3NfZnJlcXVlbmN5KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQkJCXN0cnVjdCB2NGwyX2ZyZXF1ZW5jeSAqZikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9jeDIzODg1LmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvY3gyMzg4NS5oCmluZGV4IGUyM2Q5N2MwLi4xZDUzZjU0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvY3gyMzg4NS5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9jeDIzODg1LmgKQEAgLTM3LDcgKzM3LDcgQEAKICNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KIAotI2RlZmluZSBDWDIzODg1X1ZFUlNJT05fQ09ERSBLRVJORUxfVkVSU0lPTigwLDAsMSkKKyNkZWZpbmUgQ1gyMzg4NV9WRVJTSU9OX0NPREUgS0VSTkVMX1ZFUlNJT04oMCwgMCwgMSkKIAogI2RlZmluZSBVTlNFVCAoLTFVKQogCkBAIC02NCw2ICs2NCw4IEBACiAjZGVmaW5lIENYMjM4ODVfQk9BUkRfSEFVUFBBVUdFX0hWUjE3MDAgICAgICAgIDgKICNkZWZpbmUgQ1gyMzg4NV9CT0FSRF9IQVVQUEFVR0VfSFZSMTQwMCAgICAgICAgOQogI2RlZmluZSBDWDIzODg1X0JPQVJEX0RWSUNPX0ZVU0lPTkhEVFZfN19EVUFMX0VYUCAxMAorI2RlZmluZSBDWDIzODg1X0JPQVJEX0RWSUNPX0ZVU0lPTkhEVFZfRFZCX1RfRFVBTF9FWFAgMTEKKyNkZWZpbmUgQ1gyMzg4NV9CT0FSRF9MRUFEVEVLX1dJTkZBU1RfUFhEVlIzMjAwX0ggMTIKIAogLyogQ3VycmVudGx5IHVuc3VwcG9ydGVkIGJ5IHRoZSBkcml2ZXI6IFBBTC9ILCBOVFNDL0tyLCBTRUNBTSBCL0cvSC9MQyAqLwogI2RlZmluZSBDWDIzODg1X05PUk1TIChcCkBAIC0yMjMsNyArMjI1LDcgQEAKIAlpbnQgICAgICAgICAgICAgICAgICAgICAgICBucjsKIAlpbnQgICAgICAgICAgICAgICAgICAgICAgICBzcmFtX2Nobm87CiAKLQlzdHJ1Y3QgdmlkZW9idWZfZHZiICAgICAgICBkdmI7CisJc3RydWN0IHZpZGVvYnVmX2R2Yl9mcm9udGVuZHMgZnJvbnRlbmRzOwogCiAJLyogZG1hIHF1ZXVlcyAqLwogCXN0cnVjdCBjeDIzODg1X2RtYXF1ZXVlICAgIG1wZWdxOwpAQCAtMjYwLDYgKzI2Miw5IEBACiAJdTMyICAgICAgICAgICAgICAgICAgICAgICAgc3JjX3NlbF92YWw7CiAJdTMyICAgICAgICAgICAgICAgICAgICAgICAgdmxkX21pc2NfdmFsOwogCXUzMiAgICAgICAgICAgICAgICAgICAgICAgIGh3X3NvcF9jdHJsX3ZhbDsKKworCS8qIEFsbG93IGEgc2luZ2xlIHRzcG9ydCB0byBoYXZlIG11bHRpcGxlIGZyb250ZW5kcyAqLworCXUzMiAgICAgICAgICAgICAgICAgICAgICAgIG51bV9mcm9udGVuZHM7CiB9OwogCiBzdHJ1Y3QgY3gyMzg4NV9kZXYgewpAQCAtMzY1LDE0ICszNzAsMTQgQEAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKICNkZWZpbmUgY3hfcmVhZChyZWcpICAgICAgICAgICAgIHJlYWRsKGRldi0+bG1taW8gKyAoKHJlZyk+PjIpKQotI2RlZmluZSBjeF93cml0ZShyZWcsdmFsdWUpICAgICAgd3JpdGVsKCh2YWx1ZSksIGRldi0+bG1taW8gKyAoKHJlZyk+PjIpKQorI2RlZmluZSBjeF93cml0ZShyZWcsIHZhbHVlKSAgICAgd3JpdGVsKCh2YWx1ZSksIGRldi0+bG1taW8gKyAoKHJlZyk+PjIpKQogCi0jZGVmaW5lIGN4X2FuZG9yKHJlZyxtYXNrLHZhbHVlKSBcCisjZGVmaW5lIGN4X2FuZG9yKHJlZywgbWFzaywgdmFsdWUpIFwKICAgd3JpdGVsKChyZWFkbChkZXYtPmxtbWlvKygocmVnKT4+MikpICYgfihtYXNrKSkgfFwKICAgKCh2YWx1ZSkgJiAobWFzaykpLCBkZXYtPmxtbWlvKygocmVnKT4+MikpCiAKLSNkZWZpbmUgY3hfc2V0KHJlZyxiaXQpICAgICAgICAgIGN4X2FuZG9yKChyZWcpLChiaXQpLChiaXQpKQotI2RlZmluZSBjeF9jbGVhcihyZWcsYml0KSAgICAgICAgY3hfYW5kb3IoKHJlZyksKGJpdCksMCkKKyNkZWZpbmUgY3hfc2V0KHJlZywgYml0KSAgICAgICAgICBjeF9hbmRvcigocmVnKSwgKGJpdCksIChiaXQpKQorI2RlZmluZSBjeF9jbGVhcihyZWcsIGJpdCkgICAgICAgIGN4X2FuZG9yKChyZWcpLCAoYml0KSwgMCkKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIC8qIGN4MjM4ODUtY29yZS5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCkBAIC00MDksNyArNDE0LDggQEAKIGV4dGVybiBzdHJ1Y3QgY3gyMzg4NV9zdWJpZCBjeDIzODg1X3N1Ymlkc1tdOwogZXh0ZXJuIGNvbnN0IHVuc2lnbmVkIGludCBjeDIzODg1X2lkY291bnQ7CiAKLWV4dGVybiBpbnQgY3gyMzg4NV90dW5lcl9jYWxsYmFjayh2b2lkICpwcml2LCBpbnQgY29tbWFuZCwgaW50IGFyZyk7CitleHRlcm4gaW50IGN4MjM4ODVfdHVuZXJfY2FsbGJhY2sodm9pZCAqcHJpdiwgaW50IGNvbXBvbmVudCwKKwlpbnQgY29tbWFuZCwgaW50IGFyZyk7CiBleHRlcm4gdm9pZCBjeDIzODg1X2NhcmRfbGlzdChzdHJ1Y3QgY3gyMzg4NV9kZXYgKmRldik7CiBleHRlcm4gaW50ICBjeDIzODg1X2lyX2luaXQoc3RydWN0IGN4MjM4ODVfZGV2ICpkZXYpOwogZXh0ZXJuIHZvaWQgY3gyMzg4NV9ncGlvX3NldHVwKHN0cnVjdCBjeDIzODg1X2RldiAqZGV2KTsKQEAgLTQ3NywxMSArNDgzLDMgQEAKIHsKIAlyZXR1cm4gKG5vcm0gJiAoVjRMMl9TVERfTU4gJiB+VjRMMl9TVERfUEFMX05jKSkgPyA3NTQgOiA5MjI7CiB9Ci0KLQotLyoKLSAqIExvY2FsIHZhcmlhYmxlczoKLSAqIGMtYmFzaWMtb2Zmc2V0OiA4Ci0gKiBFbmQ6Ci0gKiBrYXRlOiBlb2wgInVuaXgiOyBpbmRlbnQtd2lkdGggMzsgcmVtb3ZlLXRyYWlsaW5nLXNwYWNlIG9uOyByZXBsYWNlLXRyYWlsaW5nLXNwYWNlLXNhdmUgb247IHRhYi13aWR0aCA4OyByZXBsYWNlLXRhYnMgb2ZmOyBzcGFjZS1pbmRlbnQgb2ZmOyBtaXhlZC1pbmRlbnQgb2ZmCi0gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyNTg0MC9jeDI1ODQwLXZiaS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDI1ODQwL2N4MjU4NDAtdmJpLmMKaW5kZXggNjlmMmJiZC4uNThlNmVmMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDI1ODQwL2N4MjU4NDAtdmJpLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDI1ODQwL2N4MjU4NDAtdmJpLmMKQEAgLTE0MSwxMCArMTQxLDExIEBACiAJCXU4IGxjclsyNF07CiAKIAkJZm10ID0gYXJnOwotCQlpZiAoZm10LT50eXBlICE9IFY0TDJfQlVGX1RZUEVfU0xJQ0VEX1ZCSV9DQVBUVVJFKQorCQlpZiAoZm10LT50eXBlICE9IFY0TDJfQlVGX1RZUEVfU0xJQ0VEX1ZCSV9DQVBUVVJFICYmCisJCSAgICBmbXQtPnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WQklfQ0FQVFVSRSkKIAkJCXJldHVybiAtRUlOVkFMOwogCQlzdmJpID0gJmZtdC0+Zm10LnNsaWNlZDsKLQkJaWYgKHN2YmktPnNlcnZpY2Vfc2V0ID09IDApIHsKKwkJaWYgKGZtdC0+dHlwZSA9PSBWNEwyX0JVRl9UWVBFX1ZCSV9DQVBUVVJFKSB7CiAJCQkvKiByYXcgVkJJICovCiAJCQltZW1zZXQoc3ZiaSwgMCwgc2l6ZW9mKCpzdmJpKSk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9LY29uZmlnIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L0tjb25maWcKaW5kZXggOWRkN2JkZi4uMGI5ZTVmYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L0tjb25maWcKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L0tjb25maWcKQEAgLTU4LDYgKzU4LDEwIEBACiAJc2VsZWN0IERWQl9JU0w2NDIxIGlmICFEVkJfRkVfQ1VTVE9NSVNFCiAJc2VsZWN0IE1FRElBX1RVTkVSX1NJTVBMRSBpZiAhRFZCX0ZFX0NVU1RPTUlTRQogCXNlbGVjdCBEVkJfUzVIMTQxMSBpZiAhRFZCX0ZFX0NVU1RPTUlTRQorCXNlbGVjdCBEVkJfQ1gyNDExNiBpZiAhRFZCX0ZFX0NVU1RPTUlTRQorCXNlbGVjdCBEVkJfU1RWMDI5OSBpZiAhRFZCX0ZFX0NVU1RPTUlTRQorCXNlbGVjdCBEVkJfU1RWMDI4OCBpZiAhRFZCX0ZFX0NVU1RPTUlTRQorCXNlbGVjdCBEVkJfU1RCNjAwMCBpZiAhRFZCX0ZFX0NVU1RPTUlTRQogCS0tLWhlbHAtLS0KIAkgIFRoaXMgYWRkcyBzdXBwb3J0IGZvciBEVkIvQVRTQyBjYXJkcyBiYXNlZCBvbiB0aGUKIAkgIENvbmV4YW50IDIzODh4IGNoaXAuCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1ibGFja2JpcmQuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWJsYWNrYmlyZC5jCmluZGV4IDlhMTM3NGEuLmU3MTM2OTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWJsYWNrYmlyZC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWJsYWNrYmlyZC5jCkBAIC0xMDU3LDEyICsxMDU3LDE1IEBACiAJc3RydWN0IGN4ODgwMl9kcml2ZXIgKmRydiA9IE5VTEw7CiAJaW50IGVycjsKIAorCWxvY2tfa2VybmVsKCk7CiAJZGV2ID0gY3g4ODAyX2dldF9kZXZpY2UoaW5vZGUpOwogCiAJZHByaW50ayggMSwgIiVzXG4iLCBfX2Z1bmNfXyk7CiAKLQlpZiAoZGV2ID09IE5VTEwpCisJaWYgKGRldiA9PSBOVUxMKSB7CisJCXVubG9ja19rZXJuZWwoKTsKIAkJcmV0dXJuIC1FTk9ERVY7CisJfQogCiAJLyogTWFrZSBzdXJlIHdlIGNhbiBhY3F1aXJlIHRoZSBoYXJkd2FyZSAqLwogCWRydiA9IGN4ODgwMl9nZXRfZHJpdmVyKGRldiwgQ1g4OF9NUEVHX0JMQUNLQklSRCk7CkBAIC0xMDcwLDYgKzEwNzMsNyBAQAogCQllcnIgPSBkcnYtPnJlcXVlc3RfYWNxdWlyZShkcnYpOwogCQlpZihlcnIgIT0gMCkgewogCQkJZHByaW50aygxLCIlczogVW5hYmxlIHRvIGFjcXVpcmUgaGFyZHdhcmUsICVkXG4iLCBfX2Z1bmNfXywgZXJyKTsKKwkJCXVubG9ja19rZXJuZWwoKTsKIAkJCXJldHVybiBlcnI7CiAJCX0KIAl9CkBAIC0xMDc3LDYgKzEwODEsNyBAQAogCWlmIChibGFja2JpcmRfaW5pdGlhbGl6ZV9jb2RlYyhkZXYpIDwgMCkgewogCQlpZiAoZHJ2KQogCQkJZHJ2LT5yZXF1ZXN0X3JlbGVhc2UoZHJ2KTsKKwkJdW5sb2NrX2tlcm5lbCgpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAJZHByaW50aygxLCJvcGVuIG1pbm9yPSVkXG4iLG1pbm9yKTsKQEAgLTEwODYsNiArMTA5MSw3IEBACiAJaWYgKE5VTEwgPT0gZmgpIHsKIAkJaWYgKGRydikKIAkJCWRydi0+cmVxdWVzdF9yZWxlYXNlKGRydik7CisJCXVubG9ja19rZXJuZWwoKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCWZpbGUtPnByaXZhdGVfZGF0YSA9IGZoOwpAQCAtMTEwMSw2ICsxMTA3LDcgQEAKIAkvKiBGSVhNRTogbG9ja2luZyBhZ2FpbnN0IG90aGVyIHZpZGVvIGRldmljZSAqLwogCWN4ODhfc2V0X3NjYWxlKGRldi0+Y29yZSwgZGV2LT53aWR0aCwgZGV2LT5oZWlnaHQsCiAJCQlmaC0+bXBlZ3EuZmllbGQpOworCXVubG9ja19rZXJuZWwoKTsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtY2FyZHMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWNhcmRzLmMKaW5kZXggZGUxOTlhMi4uZmJjMjI0ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtY2FyZHMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1jYXJkcy5jCkBAIC0xMjcwLDI3ICsxMjcwLDQwIEBACiAJCS5tcGVnICAgICAgICAgICA9IENYODhfTVBFR19EVkIsCiAJfSwKIAlbQ1g4OF9CT0FSRF9IQVVQUEFVR0VfSFZSMzAwMF0gPSB7Ci0JCS8qIEZJWE1FOiBBZGQgZHZiICYgcmFkaW8gc3VwcG9ydCAqLwogCQkubmFtZSAgICAgICAgICAgPSAiSGF1cHBhdWdlIFdpblRWLUhWUjMwMDAgVHJpTW9kZSBBbmFsb2cvRFZCLVMvRFZCLVQiLAogCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9QSElMSVBTX0ZNRDEyMTZNRV9NSzMsCiAJCS5yYWRpb190eXBlICAgICA9IFVOU0VULAogCQkudHVuZXJfYWRkciAgICAgPSBBRERSX1VOU0VULAogCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAogCQkudGRhOTg4N19jb25mICAgPSBUREE5ODg3X1BSRVNFTlQsCisJCS5hdWRpb19jaGlwICAgICA9IFY0TDJfSURFTlRfV004Nzc1LAogCQkuaW5wdXQgICAgICAgICAgPSB7ewogCQkJLnR5cGUgICA9IENYODhfVk1VWF9URUxFVklTSU9OLAogCQkJLnZtdXggICA9IDAsCiAJCQkuZ3BpbzAgID0gMHg4NGJmLAorCQkJLyogMTogVFYgQXVkaW8gLyBGTSBNb25vICovCisJCQkuYXVkaW9yb3V0ZSA9IDEsCiAJCX0sewogCQkJLnR5cGUgICA9IENYODhfVk1VWF9DT01QT1NJVEUxLAogCQkJLnZtdXggICA9IDEsCiAJCQkuZ3BpbzAgID0gMHg4NGJmLAorCQkJLyogMjogTGluZS1JbiAqLworCQkJLmF1ZGlvcm91dGUgPSAyLAogCQl9LHsKIAkJCS50eXBlICAgPSBDWDg4X1ZNVVhfU1ZJREVPLAogCQkJLnZtdXggICA9IDIsCiAJCQkuZ3BpbzAgID0gMHg4NGJmLAorCQkJLyogMjogTGluZS1JbiAqLworCQkJLmF1ZGlvcm91dGUgPSAyLAogCQl9fSwKKwkJLnJhZGlvID0geworCQkJLnR5cGUgICA9IENYODhfUkFESU8sCisJCQkuZ3BpbzAJPSAweDg0YmYsCisJCQkvKiA0OiBGTSBTdGVyZW8gKHVudGVzdGVkKSAqLworCQkJLmF1ZGlvcm91dGUgPSA4LAorCQl9LAogCQkubXBlZyAgICAgICAgICAgPSBDWDg4X01QRUdfRFZCLAorCQkubnVtX2Zyb250ZW5kcwk9IDIsCiAJfSwKIAlbQ1g4OF9CT0FSRF9OT1JXT09EX01JQ1JPXSA9IHsKIAkJLm5hbWUgICAgICAgICAgID0gIk5vcndvb2QgTWljcm8gVFYgVHVuZXIiLApAQCAtMTM0OSwyNyArMTM2MiwzNCBAQAogCQkucmFkaW9fYWRkcgk9IEFERFJfVU5TRVQsCiAJCS50ZGE5ODg3X2NvbmYgICA9IFREQTk4ODdfUFJFU0VOVCwKIAkJLmF1ZGlvX2NoaXAgICAgID0gVjRMMl9JREVOVF9XTTg3NzUsCisJCS8qCisJCSAqIGdwaW8wIGFzIHJlcG9ydGVkIGJ5IE1pa2UgQ3Jhc2ggPG1pa2UgQVQgbWlrZWNyYXNoLmNvbT4KKwkJICovCiAJCS5pbnB1dAkJPSB7ewogCQkJLnR5cGUgICA9IENYODhfVk1VWF9URUxFVklTSU9OLAogCQkJLnZtdXggICA9IDAsCi0JCQkuZ3BpbzAJPSAweGU3ODAsCisJCQkuZ3BpbzAJPSAweGVmODgsCisJCQkvKiAxOiBUViBBdWRpbyAvIEZNIE1vbm8gKi8KIAkJCS5hdWRpb3JvdXRlID0gMSwKIAkJfSx7CiAJCQkudHlwZQk9IENYODhfVk1VWF9DT01QT1NJVEUxLAogCQkJLnZtdXgJPSAxLAotCQkJLmdwaW8wCT0gMHhlNzgwLAorCQkJLmdwaW8wCT0gMHhlZjg4LAorCQkJLyogMjogTGluZS1JbiAqLwogCQkJLmF1ZGlvcm91dGUgPSAyLAogCQl9LHsKIAkJCS50eXBlCT0gQ1g4OF9WTVVYX1NWSURFTywKIAkJCS52bXV4CT0gMiwKLQkJCS5ncGlvMAk9IDB4ZTc4MCwKKwkJCS5ncGlvMAk9IDB4ZWY4OCwKKwkJCS8qIDI6IExpbmUtSW4gKi8KIAkJCS5hdWRpb3JvdXRlID0gMiwKIAkJfX0sCi0JCS8qIGZpeG1lOiBBZGQgcmFkaW8gc3VwcG9ydCAqLwogCQkubXBlZyAgICAgICAgICAgPSBDWDg4X01QRUdfRFZCIHwgQ1g4OF9NUEVHX0JMQUNLQklSRCwKIAkJLnJhZGlvID0gewogCQkJLnR5cGUgICA9IENYODhfUkFESU8sCi0JCQkuZ3BpbzAJPSAweGU3ODAsCisJCQkuZ3BpbzAJPSAweGVmODgsCisJCQkvKiA0OiBGTSBTdGVyZW8gKHVudGVzdGVkKSAqLworCQkJLmF1ZGlvcm91dGUgPSA4LAogCQl9LAogCX0sCiAJW0NYODhfQk9BUkRfQURTVEVDSF9QVFZfMzkwXSA9IHsKQEAgLTE0NDYsMTUgKzE0NjYsMjYgQEAKIAkJLm5hbWUgICAgICAgICAgID0gIlBpbm5hY2xlIEh5YnJpZCBQQ1RWIiwKIAkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfWEMyMDI4LAogCQkudHVuZXJfYWRkciAgICAgPSAweDYxLAorCQkucmFkaW9fdHlwZSAgICAgPSBUVU5FUl9YQzIwMjgsCisJCS5yYWRpb19hZGRyICAgICA9IDB4NjEsCiAJCS5pbnB1dCAgICAgICAgICA9IHsgewogCQkJLnR5cGUgICA9IENYODhfVk1VWF9URUxFVklTSU9OLAogCQkJLnZtdXggICA9IDAsCisJCQkuZ3BpbzAgID0gMHgwMDRmZiwKKwkJCS5ncGlvMSAgPSAweDAxMGZmLAorCQkJLmdwaW8yICA9IDB4MDAwMDEsCiAJCX0sIHsKIAkJCS50eXBlICAgPSBDWDg4X1ZNVVhfQ09NUE9TSVRFMSwKIAkJCS52bXV4ICAgPSAxLAorCQkJLmdwaW8wICA9IDB4MDA0ZmIsCisJCQkuZ3BpbzEgID0gMHgwMTBlZiwKKwkJCS5hdWRpb3JvdXRlID0gMSwKIAkJfSwgewogCQkJLnR5cGUgICA9IENYODhfVk1VWF9TVklERU8sCiAJCQkudm11eCAgID0gMiwKKwkJCS5ncGlvMCAgPSAweDAwNGZiLAorCQkJLmdwaW8xICA9IDB4MDEwZWYsCisJCQkuYXVkaW9yb3V0ZSA9IDEsCiAJCX0gfSwKIAkJLnJhZGlvID0gewogCQkJLnR5cGUgICA9IENYODhfUkFESU8sCkBAIC0xNDYyLDYgKzE0OTMsNyBAQAogCQkJLmdwaW8xICA9IDB4MDEwZmYsCiAJCQkuZ3BpbzIgID0gMHgwZmYsCiAJCX0sCisJCS5tcGVnICAgICAgICAgICA9IENYODhfTVBFR19EVkIsCiAJfSwKIAlbQ1g4OF9CT0FSRF9XSU5GQVNUX1RWMjAwMF9YUF9HTE9CQUxdID0gewogCQkubmFtZSAgICAgICAgICAgPSAiV2luZmFzdCBUVjIwMDAgWFAgR2xvYmFsIiwKQEAgLTE1NjYsOSArMTU5OCw5IEBACiAJfSwKIAlbQ1g4OF9CT0FSRF9EVklDT19GVVNJT05IRFRWX0RWQl9UX1BST10gPSB7CiAJCS5uYW1lICAgICAgICAgICA9ICJEVmlDTyBGdXNpb25IRFRWIERWQi1UIFBSTyIsCi0JCS50dW5lcl90eXBlICAgICA9IFRVTkVSX0FCU0VOVCwgLyogWFhYOiBIYXMgWEMzMDI4ICovCisJCS50dW5lcl90eXBlICAgICA9IFRVTkVSX1hDMjAyOCwKKwkJLnR1bmVyX2FkZHIgICAgID0gMHg2MSwKIAkJLnJhZGlvX3R5cGUgICAgID0gVU5TRVQsCi0JCS50dW5lcl9hZGRyICAgICA9IEFERFJfVU5TRVQsCiAJCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCiAJCS5pbnB1dCAgICAgICAgICA9IHsgewogCQkJLnR5cGUgICA9IENYODhfVk1VWF9DT01QT1NJVEUxLApAQCAtMTYyNSw2ICsxNjU3LDM2IEBACiAJCQkuZ3BpbzIgPSAweDBjZmIsCiAJCX0sCiAJfSwKKwlbQ1g4OF9CT0FSRF9QUk9MSU5LX1BWX0dMT0JBTF9YVFJFTUVdID0geworCQkubmFtZSAgICAgICAgICAgPSAiUHJvbGluayBQaXhlbHZpZXcgR2xvYmFsIEV4dHJlbWUiLAorCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9YQzIwMjgsCisJCS50dW5lcl9hZGRyICAgICA9IDB4NjEsCisJCS5pbnB1dCAgICAgICAgICA9IHsgeworCQkJLnR5cGUgICA9IENYODhfVk1VWF9URUxFVklTSU9OLAorCQkJLnZtdXggICA9IDAsCisJCQkuZ3BpbzAgPSAweDA0ZmIsCisJCQkuZ3BpbzEgPSAweDA0MDgwLAorCQkJLmdwaW8yID0gMHgwY2Y3LAorCQl9LCB7CisJCQkudHlwZSAgID0gQ1g4OF9WTVVYX0NPTVBPU0lURTEsCisJCQkudm11eCAgID0gMSwKKwkJCS5ncGlvMCA9IDB4MDRmYiwKKwkJCS5ncGlvMSA9IDB4MDQwODAsCisJCQkuZ3BpbzIgPSAweDBjZmIsCisJCX0sIHsKKwkJCS50eXBlICAgPSBDWDg4X1ZNVVhfU1ZJREVPLAorCQkJLnZtdXggICA9IDIsCisJCQkuZ3BpbzAgPSAweDA0ZmIsCisJCQkuZ3BpbzEgPSAweDA0MDgwLAorCQkJLmdwaW8yID0gMHgwY2ZiLAorCQl9IH0sCisJCS5yYWRpbyA9IHsKKwkJCS50eXBlICAgPSBDWDg4X1JBRElPLAorCQkJLmdwaW8wID0gMHgwNGZmLAorCQkJLmdwaW8xID0gMHgwNDA4MCwKKwkJCS5ncGlvMiA9IDB4MGNmNywKKwkJfSwKKwl9LAogCS8qIEJvdGggcmFkaW8sIGFuYWxvZyBhbmQgQVRTQyB3b3JrIHdpdGggdGhpcyBib2FyZC4KIAkgICBIb3dldmVyLCBmb3IgYW5hbG9nIHRvIHdvcmssIHM1aDE0MDkgZ2F0ZSBzaG91bGQgYmUgb3BlbiwKIAkgICBvdGhlcndpc2UsIHR1bmVyLXhjMzAyOCB3b24ndCBiZSBkZXRlY3RlZC4KQEAgLTE2NjQsNiArMTcyNiwxNTEgQEAKIAkJfSwKIAkJLm1wZWcgICAgICAgICAgID0gQ1g4OF9NUEVHX0RWQiwKIAl9LAorCVtDWDg4X0JPQVJEX0hBVVBQQVVHRV9IVlI0MDAwXSA9IHsKKwkJLm5hbWUgICAgICAgICAgID0gIkhhdXBwYXVnZSBXaW5UVi1IVlI0MDAwIERWQi1TL1MyL1QvSHlicmlkIiwKKwkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfUEhJTElQU19GTUQxMjE2TUVfTUszLAorCQkucmFkaW9fdHlwZSAgICAgPSBVTlNFVCwKKwkJLnR1bmVyX2FkZHIgICAgID0gQUREUl9VTlNFVCwKKwkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKKwkJLnRkYTk4ODdfY29uZiAgID0gVERBOTg4N19QUkVTRU5ULAorCQkuYXVkaW9fY2hpcCAgICAgPSBWNEwyX0lERU5UX1dNODc3NSwKKwkJLyoKKwkJICogR1BJTzAgKFdJTlRWMjAwMCkKKwkJICoKKwkJICogQW5hbG9ndWUgICAgIFNBVCAgICAgRFZCLVQKKwkJICogQW50ZW5uYSAgICAgIDB4YzRiZiAgMHhjNGJiCisJCSAqIENvbXBvc2l0ZSAgICAweGM0YmYgIDB4YzRiYgorCQkgKiBTLVZpZGVvICAgICAgMHhjNGJmICAweGM0YmIKKwkJICogQ29tcG9zaXRlMSAgIDB4YzRmZiAgMHhjNGZiCisJCSAqIFMtVmlkZW8xICAgICAweGM0ZmYgIDB4YzRmYgorCQkgKgorCQkgKiBCSVQgIFZBTFVFICAgRlVOQ1RJT04gR1B7eH1fSU8KKwkJICogMCAgICAxICAgICAgIEk6PworCQkgKiAxICAgIDEgICAgICAgSTo/CisJCSAqIDIgICAgMSAgICAgICBPOk1QRUcgUE9SVCAwPURWQi1UIDE9RFZCLVMKKwkJICogMyAgICAxICAgICAgIEk6PworCQkgKiA0ICAgIDEgICAgICAgSTo/CisJCSAqIDUgICAgMSAgICAgICBJOj8KKwkJICogNiAgICAwICAgICAgIE86SU5QVVQgU0VMRUNUT1IgMD1JTlRFUk5BTCAxPUVYUEFOU0lPTgorCQkgKiA3ICAgIDEgICAgICAgTzpEVkItVCBERU1PRCBSRVNFVCBMT1cKKwkJICoKKwkJICogQklUICBWQUxVRSAgIEZVTkNUSU9OIEdQe3h9X09FCisJCSAqIDggICAgMCAgICAgICBJCisJCSAqIDkgICAgMCAgICAgICBJCisJCSAqIGEgICAgMSAgICAgICBPCisJCSAqIGIgICAgMCAgICAgICBJCisJCSAqIGMgICAgMCAgICAgICBJCisJCSAqIGQgICAgMCAgICAgICBJCisJCSAqIGUgICAgMSAgICAgICBPCisJCSAqIGYgICAgMSAgICAgICBPCisJCSAqCisJCSAqIFdNODc3NSBBREMKKwkJICoKKwkJICogMTogVFYgQXVkaW8gLyBGTSBNb25vCisJCSAqIDI6IExpbmUtSW4KKwkJICogMzogTGluZS1JbiBFeHBhbnNpb24KKwkJICogNDogRk0gU3RlcmVvCisJCSAqLworCQkuaW5wdXQgICAgICAgICAgPSB7eworCQkJLnR5cGUgICA9IENYODhfVk1VWF9URUxFVklTSU9OLAorCQkJLnZtdXggICA9IDAsCisJCQkuZ3BpbzAgID0gMHhjNGJmLAorCQkJLyogMTogVFYgQXVkaW8gLyBGTSBNb25vICovCisJCQkuYXVkaW9yb3V0ZSA9IDEsCisJCX0sIHsKKwkJCS50eXBlICAgPSBDWDg4X1ZNVVhfQ09NUE9TSVRFMSwKKwkJCS52bXV4ICAgPSAxLAorCQkJLmdwaW8wICA9IDB4YzRiZiwKKwkJCS8qIDI6IExpbmUtSW4gKi8KKwkJCS5hdWRpb3JvdXRlID0gMiwKKwkJfSwgeworCQkJLnR5cGUgICA9IENYODhfVk1VWF9TVklERU8sCisJCQkudm11eCAgID0gMiwKKwkJCS5ncGlvMCAgPSAweGM0YmYsCisJCQkvKiAyOiBMaW5lLUluICovCisJCQkuYXVkaW9yb3V0ZSA9IDIsCisJCX0gfSwKKwkJLnJhZGlvID0geworCQkJLnR5cGUgICA9IENYODhfUkFESU8sCisJCQkuZ3BpbzAJPSAweGM0YmYsCisJCQkvKiA0OiBGTSBTdGVyZW8gKi8KKwkJCS5hdWRpb3JvdXRlID0gOCwKKwkJfSwKKwkJLm1wZWcgICAgICAgICAgID0gQ1g4OF9NUEVHX0RWQiwKKwkJLm51bV9mcm9udGVuZHMJPSAyLAorCX0sCisJW0NYODhfQk9BUkRfSEFVUFBBVUdFX0hWUjQwMDBMSVRFXSA9IHsKKwkJLm5hbWUgICAgICAgICAgID0gIkhhdXBwYXVnZSBXaW5UVi1IVlI0MDAwKExpdGUpIERWQi1TL1MyIiwKKwkJLnR1bmVyX3R5cGUgICAgID0gVU5TRVQsCisJCS5yYWRpb190eXBlICAgICA9IFVOU0VULAorCQkudHVuZXJfYWRkciAgICAgPSBBRERSX1VOU0VULAorCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAorCQkuaW5wdXQgICAgICAgICAgPSB7eworCQkJLnR5cGUgICA9IENYODhfVk1VWF9EVkIsCisJCQkudm11eCAgID0gMCwKKwkJfSB9LAorCQkubXBlZyAgICAgICAgICAgPSBDWDg4X01QRUdfRFZCLAorCX0sCisJW0NYODhfQk9BUkRfVEVWSUlfUzQyMF0gPSB7CisJCS5uYW1lICAgICAgICAgICA9ICJUZVZpaSBTNDIwIERWQi1TIiwKKwkJLnR1bmVyX3R5cGUgICAgID0gVU5TRVQsCisJCS5yYWRpb190eXBlICAgICA9IFVOU0VULAorCQkudHVuZXJfYWRkciAgICAgPSBBRERSX1VOU0VULAorCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAorCQkuaW5wdXQgICAgICAgICAgPSB7eworCQkJLnR5cGUgICA9IENYODhfVk1VWF9EVkIsCisJCQkudm11eCAgID0gMCwKKwkJfSB9LAorCQkubXBlZyAgICAgICAgICAgPSBDWDg4X01QRUdfRFZCLAorCX0sCisJW0NYODhfQk9BUkRfVEVWSUlfUzQ2MF0gPSB7CisJCS5uYW1lICAgICAgICAgICA9ICJUZVZpaSBTNDYwIERWQi1TL1MyIiwKKwkJLnR1bmVyX3R5cGUgICAgID0gVU5TRVQsCisJCS5yYWRpb190eXBlICAgICA9IFVOU0VULAorCQkudHVuZXJfYWRkciAgICAgPSBBRERSX1VOU0VULAorCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAorCQkuaW5wdXQgICAgICAgICAgPSB7eworCQkJLnR5cGUgICA9IENYODhfVk1VWF9EVkIsCisJCQkudm11eCAgID0gMCwKKwkJfSB9LAorCQkubXBlZyAgICAgICAgICAgPSBDWDg4X01QRUdfRFZCLAorCX0sCisJW0NYODhfQk9BUkRfT01JQ09NX1NTNF9QQ0ldID0geworCQkubmFtZSAgICAgICAgICAgPSAiT21pY29tIFNTNCBEVkItUy9TMiBQQ0kiLAorCQkudHVuZXJfdHlwZSAgICAgPSBVTlNFVCwKKwkJLnJhZGlvX3R5cGUgICAgID0gVU5TRVQsCisJCS50dW5lcl9hZGRyICAgICA9IEFERFJfVU5TRVQsCisJCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCisJCS5pbnB1dCAgICAgICAgICA9IHt7CisJCQkudHlwZSAgID0gQ1g4OF9WTVVYX0RWQiwKKwkJCS52bXV4ICAgPSAwLAorCQl9IH0sCisJCS5tcGVnICAgICAgICAgICA9IENYODhfTVBFR19EVkIsCisJfSwKKwlbQ1g4OF9CT0FSRF9UQlNfODkyMF0gPSB7CisJCS5uYW1lICAgICAgICAgICA9ICJUQlMgODkyMCBEVkItUy9TMiIsCisJCS50dW5lcl90eXBlICAgICA9IFRVTkVSX0FCU0VOVCwKKwkJLnJhZGlvX3R5cGUgICAgID0gVU5TRVQsCisJCS50dW5lcl9hZGRyICAgICA9IEFERFJfVU5TRVQsCisJCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCisJCS5pbnB1dCAgICAgICAgICA9IHt7CisJCQkudHlwZSAgID0gQ1g4OF9WTVVYX0RWQiwKKwkJCS52bXV4ICAgPSAxLAorCQl9IH0sCisJCS5tcGVnICAgICAgICAgICA9IENYODhfTVBFR19EVkIsCisJfSwKKwlbQ1g4OF9CT0FSRF9QUk9GXzczMDBdID0geworCQkubmFtZSAgICAgICAgICAgPSAiUFJPRiA3MzAwIERWQi1TL1MyIiwKKwkJLnR1bmVyX3R5cGUgICAgID0gVU5TRVQsCisJCS5yYWRpb190eXBlICAgICA9IFVOU0VULAorCQkudHVuZXJfYWRkciAgICAgPSBBRERSX1VOU0VULAorCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAorCQkuaW5wdXQgICAgICAgICAgPSB7eworCQkJLnR5cGUgICA9IENYODhfVk1VWF9EVkIsCisJCQkudm11eCAgID0gMCwKKwkJfSB9LAorCQkubXBlZyAgICAgICAgICAgPSBDWDg4X01QRUdfRFZCLAorCX0sCiB9OwogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KQEAgLTIwMTAsOSArMjIxNyw1MyBAQAogCQkuc3ViZGV2aWNlID0gMHg0OTM1LAogCQkuY2FyZCAgICAgID0gQ1g4OF9CT0FSRF9QUk9MSU5LX1BWXzgwMDBHVCwKIAl9LCB7CisJCS5zdWJ2ZW5kb3IgPSAweDE1NTQsCisJCS5zdWJkZXZpY2UgPSAweDQ5NzYsCisJCS5jYXJkICAgICAgPSBDWDg4X0JPQVJEX1BST0xJTktfUFZfR0xPQkFMX1hUUkVNRSwKKwl9LCB7CiAJCS5zdWJ2ZW5kb3IgPSAweDE3ZGUsCiAJCS5zdWJkZXZpY2UgPSAweDA4YzEsCiAJCS5jYXJkICAgICAgPSBDWDg4X0JPQVJEX0tXT1JMRF9BVFNDXzEyMCwKKwl9LCB7CisJCS5zdWJ2ZW5kb3IgPSAweDAwNzAsCisJCS5zdWJkZXZpY2UgPSAweDY5MDAsCisJCS5jYXJkICAgICAgPSBDWDg4X0JPQVJEX0hBVVBQQVVHRV9IVlI0MDAwLAorCX0sIHsKKwkJLnN1YnZlbmRvciA9IDB4MDA3MCwKKwkJLnN1YmRldmljZSA9IDB4NjkwNCwKKwkJLmNhcmQgICAgICA9IENYODhfQk9BUkRfSEFVUFBBVUdFX0hWUjQwMDAsCisJfSwgeworCQkuc3VidmVuZG9yID0gMHgwMDcwLAorCQkuc3ViZGV2aWNlID0gMHg2OTAyLAorCQkuY2FyZCAgICAgID0gQ1g4OF9CT0FSRF9IQVVQUEFVR0VfSFZSNDAwMCwKKwl9LCB7CisJCS5zdWJ2ZW5kb3IgPSAweDAwNzAsCisJCS5zdWJkZXZpY2UgPSAweDY5MDUsCisJCS5jYXJkICAgICAgPSBDWDg4X0JPQVJEX0hBVVBQQVVHRV9IVlI0MDAwTElURSwKKwl9LCB7CisJCS5zdWJ2ZW5kb3IgPSAweDAwNzAsCisJCS5zdWJkZXZpY2UgPSAweDY5MDYsCisJCS5jYXJkICAgICAgPSBDWDg4X0JPQVJEX0hBVVBQQVVHRV9IVlI0MDAwTElURSwKKwl9LCB7CisJCS5zdWJ2ZW5kb3IgPSAweGQ0MjAsCisJCS5zdWJkZXZpY2UgPSAweDkwMjIsCisJCS5jYXJkICAgICAgPSBDWDg4X0JPQVJEX1RFVklJX1M0MjAsCisJfSwgeworCQkuc3VidmVuZG9yID0gMHhkNDYwLAorCQkuc3ViZGV2aWNlID0gMHg5MDIyLAorCQkuY2FyZCAgICAgID0gQ1g4OF9CT0FSRF9URVZJSV9TNDYwLAorCX0sIHsKKwkJLnN1YnZlbmRvciA9IDB4QTA0NCwKKwkJLnN1YmRldmljZSA9IDB4MjAxMSwKKwkJLmNhcmQgICAgICA9IENYODhfQk9BUkRfT01JQ09NX1NTNF9QQ0ksCisJfSwgeworCQkuc3VidmVuZG9yID0gMHg4OTIwLAorCQkuc3ViZGV2aWNlID0gMHg4ODg4LAorCQkuY2FyZCAgICAgID0gQ1g4OF9CT0FSRF9UQlNfODkyMCwKKwl9LCB7CisJCS5zdWJ2ZW5kb3IgPSAweEIwMzMsCisJCS5zdWJkZXZpY2UgPSAweDMwMzMsCisJCS5jYXJkICAgICAgPSBDWDg4X0JPQVJEX1BST0ZfNzMwMCwKIAl9LAogfTsKIApAQCAtMjA2NSw2ICsyMzE2LDEzIEBACiAJY2FzZSAxNDY2OTogLyogV2luVFYtSFZSMzAwMCAoT0VNLCBubyBJUiwgbm8gYi9wYW5lbCB2aWRlbyAtIExvdyBwcm9maWxlKSAqLwogCWNhc2UgMjg1NTI6IC8qIFdpblRWLVBWUiAnUm9zbHluJyAoTm8gSVIpICovCiAJY2FzZSAzNDUxOTogLyogV2luVFYtUENJLUZNICovCisJY2FzZSA2OTAwOToKKwkJLyogV2luVFYtSFZSNDAwMCAoRFZCUy9TMi9ULCBWaWRlbyBhbmQgSVIsIGJhY2sgcGFuZWwgaW5wdXRzKSAqLworCWNhc2UgNjkxMDA6IC8qIFdpblRWLUhWUjQwMDBMSVRFIChEVkJTL1MyLCBJUikgKi8KKwljYXNlIDY5NTAwOiAvKiBXaW5UVi1IVlI0MDAwTElURSAoRFZCUy9TMiwgTm8gSVIpICovCisJY2FzZSA2OTU1OToKKwkJLyogV2luVFYtSFZSNDAwMCAoRFZCUy9TMi9ULCBWaWRlbyBubyBJUiwgYmFjayBwYW5lbCBpbnB1dHMpICovCisJY2FzZSA2OTU2OTogLyogV2luVFYtSFZSNDAwMCAoRFZCUy9TMi9ULCBWaWRlbyBubyBJUikgKi8KIAljYXNlIDkwMDAyOiAvKiBOb3ZhLVQtUENJICg5MDAyKSAqLwogCWNhc2UgOTIwMDE6IC8qIE5vdmEtUy1QbHVzIChWaWRlbyBhbmQgSVIpICovCiAJY2FzZSA5MjAwMjogLyogTm92YS1TLVBsdXMgKFZpZGVvIGFuZCBJUikgKi8KQEAgLTIxNDksOSArMjQwNywyMSBAQAogewogCXN3aXRjaCAoY29tbWFuZCkgewogCWNhc2UgWEMyMDI4X1RVTkVSX1JFU0VUOgotCQljeF93cml0ZShNT19HUDBfSU8sIDB4MTAxMDAwKTsKLQkJbWRlbGF5KDUpOwotCQljeF9zZXQoTU9fR1AwX0lPLCAweDEwMTAxMCk7CisJCXN3aXRjaCAoY29yZS0+Ym9hcmRucikgeworCQljYXNlIENYODhfQk9BUkRfRFZJQ09fRlVTSU9OSERUVl81X1BDSV9OQU5POgorCQkJLyogR1BJTy00IHhjMzAyOCB0dW5lciAqLworCisJCQljeF9zZXQoTU9fR1AwX0lPLCAweDAwMDAxMDAwKTsKKwkJCWN4X2NsZWFyKE1PX0dQMF9JTywgMHgwMDAwMDAxMCk7CisJCQltc2xlZXAoMTAwKTsKKwkJCWN4X3NldChNT19HUDBfSU8sIDB4MDAwMDAwMTApOworCQkJbXNsZWVwKDEwMCk7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWN4X3dyaXRlKE1PX0dQMF9JTywgMHgxMDEwMDApOworCQkJbWRlbGF5KDUpOworCQkJY3hfc2V0KE1PX0dQMF9JTywgMHgxMDEwMTApOworCQl9CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXJldHVybiAtRUlOVkFMOwpAQCAtMjI1OCw4ICsyNTI4LDEwIEBACiAJCXJldHVybiBjeDg4X3hjMzAyOF9nZW5pYXRlY2hfdHVuZXJfY2FsbGJhY2soY29yZSwKIAkJCQkJCQljb21tYW5kLCBhcmcpOwogCWNhc2UgQ1g4OF9CT0FSRF9QUk9MSU5LX1BWXzgwMDBHVDoKKwljYXNlIENYODhfQk9BUkRfUFJPTElOS19QVl9HTE9CQUxfWFRSRU1FOgogCQlyZXR1cm4gY3g4OF9wdl84MDAwZ3RfY2FsbGJhY2soY29yZSwgY29tbWFuZCwgYXJnKTsKIAljYXNlIENYODhfQk9BUkRfRFZJQ09fRlVTSU9OSERUVl9EVkJfVF9QUk86CisJY2FzZSBDWDg4X0JPQVJEX0RWSUNPX0ZVU0lPTkhEVFZfNV9QQ0lfTkFOTzoKIAkJcmV0dXJuIGN4ODhfZHZpY29feGMyMDI4X2NhbGxiYWNrKGNvcmUsIGNvbW1hbmQsIGFyZyk7CiAJfQogCkBAIC0yMzI3LDcgKzI1OTksNyBAQAogCXJldHVybiAwOyAvKiBTaG91bGQgbmV2ZXIgYmUgaGVyZSAqLwogfQogCi1pbnQgY3g4OF90dW5lcl9jYWxsYmFjayh2b2lkICpwcml2LCBpbnQgY29tbWFuZCwgaW50IGFyZykKK2ludCBjeDg4X3R1bmVyX2NhbGxiYWNrKHZvaWQgKnByaXYsIGludCBjb21wb25lbnQsIGludCBjb21tYW5kLCBpbnQgYXJnKQogewogCXN0cnVjdCBpMmNfYWxnb19iaXRfZGF0YSAqaTJjX2FsZ28gPSBwcml2OwogCXN0cnVjdCBjeDg4X2NvcmUgKmNvcmU7CkBAIC0yMzQ0LDYgKzI2MTYsOSBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKKwlpZiAoY29tcG9uZW50ICE9IERWQl9GUk9OVEVORF9DT01QT05FTlRfVFVORVIpCisJCXJldHVybiAtRUlOVkFMOworCiAJc3dpdGNoIChjb3JlLT5ib2FyZC50dW5lcl90eXBlKSB7CiAJCWNhc2UgVFVORVJfWEMyMDI4OgogCQkJaW5mb19wcmludGsoY29yZSwgIkNhbGxpbmcgWEMyMDI4LzMwMjggY2FsbGJhY2tcbiIpOwpAQCAtMjM5MiwxNiArMjY2NywyMiBAQAogewogCXN3aXRjaCAoY29yZS0+Ym9hcmRucikgewogCWNhc2UgQ1g4OF9CT0FSRF9IQVVQUEFVR0VfSFZSMTMwMDoKLQkJLyogQnJpbmcgdGhlIDcwMiBkZW1vZCB1cCBiZWZvcmUgaTJjIHNjYW5uaW5nL2F0dGFjaCBvciBkZXZpY2VzIGFyZSBoaWRkZW4gKi8KLQkJLyogV2UgbGVhdmUgaGVyZSB3aXRoIHRoZSA3MDIgb24gdGhlIGJ1cyAqLwotCQljeF93cml0ZShNT19HUDBfSU8sIDB4MDAwMGU3ODApOworCQkvKgorCQkgKiBCcmluZyB0aGUgNzAyIGRlbW9kIHVwIGJlZm9yZSBpMmMgc2Nhbm5pbmcvYXR0YWNoIG9yIGRldmljZXMgYXJlIGhpZGRlbgorCQkgKiBXZSBsZWF2ZSBoZXJlIHdpdGggdGhlIDcwMiBvbiB0aGUgYnVzCisJCSAqCisJCSAqICJyZXNldCB0aGUgSVIgcmVjZWl2ZXIgb24gR1BJT1szXSIKKwkJICogUmVwb3J0ZWQgYnkgTWlrZSBDcmFzaCA8bWlrZSBBVCBtaWtlY3Jhc2guY29tPgorCQkgKi8KKwkJY3hfd3JpdGUoTU9fR1AwX0lPLCAweDAwMDBlZjg4KTsKIAkJdWRlbGF5KDEwMDApOwotCQljeF9jbGVhcihNT19HUDBfSU8sIDB4MDAwMDAwODApOworCQljeF9jbGVhcihNT19HUDBfSU8sIDB4MDAwMDAwODgpOwogCQl1ZGVsYXkoNTApOwotCQljeF9zZXQoTU9fR1AwX0lPLCAweDAwMDAwMDgwKTsgLyogNzAyIG91dCBvZiByZXNldCAqLworCQljeF9zZXQoTU9fR1AwX0lPLCAweDAwMDAwMDg4KTsgLyogNzAyIG91dCBvZiByZXNldCAqLwogCQl1ZGVsYXkoMTAwMCk7CiAJCWJyZWFrOwogCisJY2FzZSBDWDg4X0JPQVJEX1BST0xJTktfUFZfR0xPQkFMX1hUUkVNRToKIAljYXNlIENYODhfQk9BUkRfUFJPTElOS19QVl84MDAwR1Q6CiAJCWN4X3dyaXRlKE1PX0dQMl9JTywgMHhjZjcpOwogCQltZGVsYXkoNTApOwpAQCAtMjQxMSwxMCArMjY5MiwyMSBAQAogCQltc2xlZXAoMTApOwogCQlicmVhazsKIAotCSBjYXNlIENYODhfQk9BUkRfRFZJQ09fRlVTSU9OSERUVl83X0dPTEQ6CisJY2FzZSBDWDg4X0JPQVJEX0RWSUNPX0ZVU0lPTkhEVFZfN19HT0xEOgogCQkvKiBFbmFibGUgdGhlIHhjNTAwMCB0dW5lciAqLwogCQljeF9zZXQoTU9fR1AwX0lPLCAweDAwMDAxMDEwKTsKIAkJYnJlYWs7CisKKwljYXNlIENYODhfQk9BUkRfSEFVUFBBVUdFX0hWUjMwMDA6CisJY2FzZSBDWDg4X0JPQVJEX0hBVVBQQVVHRV9IVlI0MDAwOgorCQkvKiBJbml0IEdQSU8gKi8KKwkJY3hfd3JpdGUoTU9fR1AwX0lPLCBjb3JlLT5ib2FyZC5pbnB1dFswXS5ncGlvMCk7CisJCXVkZWxheSgxMDAwKTsKKwkJY3hfY2xlYXIoTU9fR1AwX0lPLCAweDAwMDAwMDgwKTsKKwkJdWRlbGF5KDUwKTsKKwkJY3hfc2V0KE1PX0dQMF9JTywgMHgwMDAwMDA4MCk7IC8qIDcwMiBvdXQgb2YgcmVzZXQgKi8KKwkJdWRlbGF5KDEwMDApOworCQlicmVhazsKIAl9CiB9CiAKQEAgLTI0MzUsMTcgKzI3MjcsMjIgQEAKIAkJCWNvcmUtPmkyY19hbGdvLnVkZWxheSA9IDE2OwogCQlicmVhazsKIAljYXNlIENYODhfQk9BUkRfRFZJQ09fRlVTSU9OSERUVl9EVkJfVF9QUk86Ci0JCWN0bC0+c2NvZGVfdGFibGUgPSBYQzMwMjhfRkVfWkFSTElOSzQ1NjsKKwkJY3RsLT5kZW1vZCA9IFhDMzAyOF9GRV9aQVJMSU5LNDU2OwogCQlicmVhazsKIAljYXNlIENYODhfQk9BUkRfS1dPUkxEX0FUU0NfMTIwOgogCWNhc2UgQ1g4OF9CT0FSRF9EVklDT19GVVNJT05IRFRWXzVfUENJX05BTk86CiAJCWN0bC0+ZGVtb2QgPSBYQzMwMjhfRkVfT1JFTjUzODsKIAkJYnJlYWs7CisJY2FzZSBDWDg4X0JPQVJEX1BST0xJTktfUFZfR0xPQkFMX1hUUkVNRToKIAljYXNlIENYODhfQk9BUkRfUFJPTElOS19QVl84MDAwR1Q6CiAJCS8qCi0JCSAqIFRoaXMgYm9hcmQgdXNlcyBub24tTVRTIGZpcm13YXJlCisJCSAqIFRob3NlIGJvYXJkcyB1c2VzIG5vbi1NVFMgZmlybXdhcmUKIAkJICovCiAJCWJyZWFrOworCWNhc2UgQ1g4OF9CT0FSRF9QSU5OQUNMRV9IWUJSSURfUENUVjoKKwkJY3RsLT5kZW1vZCA9IFhDMzAyOF9GRV9aQVJMSU5LNDU2OworCQljdGwtPm10cyA9IDE7CisJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCWN0bC0+ZGVtb2QgPSBYQzMwMjhfRkVfT1JFTjUzODsKIAkJY3RsLT5tdHMgPSAxOwpAQCAtMjQ4OSw2ICsyNzg2LDggQEAKIAljYXNlIENYODhfQk9BUkRfSEFVUFBBVUdFX0hWUjExMDBMUDoKIAljYXNlIENYODhfQk9BUkRfSEFVUFBBVUdFX0hWUjMwMDA6CiAJY2FzZSBDWDg4X0JPQVJEX0hBVVBQQVVHRV9IVlIxMzAwOgorCWNhc2UgQ1g4OF9CT0FSRF9IQVVQUEFVR0VfSFZSNDAwMDoKKwljYXNlIENYODhfQk9BUkRfSEFVUFBBVUdFX0hWUjQwMDBMSVRFOgogCQlpZiAoMCA9PSBjb3JlLT5pMmNfcmMpCiAJCQloYXVwcGF1Z2VfZWVwcm9tKGNvcmUsIGVlcHJvbSk7CiAJCWJyZWFrOwpAQCAtMjU3MCw3ICsyODY5LDE4IEBACiAJCXRlYTU3NjdfY2ZnLnByaXYgID0gJmN0bDsKIAogCQljeDg4X2NhbGxfaTJjX2NsaWVudHMoY29yZSwgVFVORVJfU0VUX0NPTkZJRywgJnRlYTU3NjdfY2ZnKTsKKwkJYnJlYWs7CiAJfQorCWNhc2UgIENYODhfQk9BUkRfVEVWSUlfUzQyMDoKKwljYXNlICBDWDg4X0JPQVJEX1RFVklJX1M0NjA6CisJY2FzZSAgQ1g4OF9CT0FSRF9PTUlDT01fU1M0X1BDSToKKwljYXNlICBDWDg4X0JPQVJEX1RCU184OTIwOgorCWNhc2UgIENYODhfQk9BUkRfUFJPRl83MzAwOgorCQljeF93cml0ZShNT19TUlNUX0lPLCAwKTsKKwkJbXNsZWVwKDEwMCk7CisJCWN4X3dyaXRlKE1PX1NSU1RfSU8sIDEpOworCQltc2xlZXAoMTAwKTsKKwkJYnJlYWs7CiAJfSAvKmVuZCBzd2l0Y2goKSAqLwogCiAKQEAgLTI3MzQsMTAgKzMwNDQsMTQgQEAKIAogCW1lbWNweSgmY29yZS0+Ym9hcmQsICZjeDg4X2JvYXJkc1tjb3JlLT5ib2FyZG5yXSwgc2l6ZW9mKGNvcmUtPmJvYXJkKSk7CiAKLQlpbmZvX3ByaW50ayhjb3JlLCAic3Vic3lzdGVtOiAlMDR4OiUwNHgsIGJvYXJkOiAlcyBbY2FyZD0lZCwlc11cbiIsCisJaWYgKCFjb3JlLT5ib2FyZC5udW1fZnJvbnRlbmRzKQorCQljb3JlLT5ib2FyZC5udW1fZnJvbnRlbmRzPTE7CisKKwlpbmZvX3ByaW50ayhjb3JlLCAic3Vic3lzdGVtOiAlMDR4OiUwNHgsIGJvYXJkOiAlcyBbY2FyZD0lZCwlc10sIGZyb250ZW5kKHMpOiAlZFxuIiwKIAkJcGNpLT5zdWJzeXN0ZW1fdmVuZG9yLCBwY2ktPnN1YnN5c3RlbV9kZXZpY2UsIGNvcmUtPmJvYXJkLm5hbWUsCiAJCWNvcmUtPmJvYXJkbnIsIGNhcmRbY29yZS0+bnJdID09IGNvcmUtPmJvYXJkbnIgPwotCQkiaW5zbW9kIG9wdGlvbiIgOiAiYXV0b2RldGVjdGVkIik7CisJCSJpbnNtb2Qgb3B0aW9uIiA6ICJhdXRvZGV0ZWN0ZWQiLAorCQljb3JlLT5ib2FyZC5udW1fZnJvbnRlbmRzKTsKIAogCWlmICh0dW5lcltjb3JlLT5ucl0gIT0gVU5TRVQpCiAJCWNvcmUtPmJvYXJkLnR1bmVyX3R5cGUgPSB0dW5lcltjb3JlLT5ucl07CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1jb3JlLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1jb3JlLmMKaW5kZXggZDY1NmZlYy4uNjA3MDViMDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWNvcmUuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1jb3JlLmMKQEAgLTU0OSw3ICs1NDksOCBAQAogCQltb2RfdGltZXIoJnEtPnRpbWVvdXQsIGppZmZpZXMrQlVGRkVSX1RJTUVPVVQpOwogCX0KIAlpZiAoYmMgIT0gMSkKLQkJcHJpbnRrKCIlczogJWQgYnVmZmVycyBoYW5kbGVkIChzaG91bGQgYmUgMSlcbiIsX19mdW5jX18sYmMpOworCQlkcHJpbnRrKDIsICIlczogJWQgYnVmZmVycyBoYW5kbGVkIChzaG91bGQgYmUgMSlcbiIsCisJCQlfX2Z1bmNfXywgYmMpOwogfQogCiB2b2lkIGN4ODhfc2h1dGRvd24oc3RydWN0IGN4ODhfY29yZSAqY29yZSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWR2Yi5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtZHZiLmMKaW5kZXggZDk2MTczZi4uNjk2OGFiMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtZHZiLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtZHZiLmMKQEAgLTQ4LDYgKzQ4LDExIEBACiAjaW5jbHVkZSAidHVuZXItc2ltcGxlLmgiCiAjaW5jbHVkZSAidGRhOTg4Ny5oIgogI2luY2x1ZGUgInM1aDE0MTEuaCIKKyNpbmNsdWRlICJzdHYwMjk5LmgiCisjaW5jbHVkZSAiejAxOTRhLmgiCisjaW5jbHVkZSAic3R2MDI4OC5oIgorI2luY2x1ZGUgInN0YjYwMDAuaCIKKyNpbmNsdWRlICJjeDI0MTE2LmgiCiAKIE1PRFVMRV9ERVNDUklQVElPTigiZHJpdmVyIGZvciBjeDIzODh4IGJhc2VkIERWQiBjYXJkcyIpOwogTU9EVUxFX0FVVEhPUigiQ2hyaXMgUGFzY29lIDxjLnBhc2NvZUBpdGVlLnVxLmVkdS5hdT4iKTsKQEAgLTExMSwxMyArMTE2LDIzIEBACiAJc3RydWN0IGN4ODgwMl9kZXYgKmRldj0gZmUtPmR2Yi0+cHJpdjsKIAlzdHJ1Y3QgY3g4ODAyX2RyaXZlciAqZHJ2ID0gTlVMTDsKIAlpbnQgcmV0ID0gMDsKKwlpbnQgZmVfaWQ7CisKKwlmZV9pZCA9IHZpZGVvYnVmX2R2Yl9maW5kX2Zyb250ZW5kKCZkZXYtPmZyb250ZW5kcywgZmUpOworCWlmICghZmVfaWQpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlcygpIE5vIGZyb250ZW5kIGZvdW5kXG4iLCBfX2Z1bmNfXyk7CisJCXJldHVybiAtRUlOVkFMOworCX0KIAogCWRydiA9IGN4ODgwMl9nZXRfZHJpdmVyKGRldiwgQ1g4OF9NUEVHX0RWQik7CiAJaWYgKGRydikgewotCQlpZiAoYWNxdWlyZSkKKwkJaWYgKGFjcXVpcmUpeworCQkJZGV2LT5mcm9udGVuZHMuYWN0aXZlX2ZlX2lkID0gZmVfaWQ7CiAJCQlyZXQgPSBkcnYtPnJlcXVlc3RfYWNxdWlyZShkcnYpOwotCQllbHNlCisJCX0gZWxzZSB7CiAJCQlyZXQgPSBkcnYtPnJlcXVlc3RfcmVsZWFzZShkcnYpOworCQkJZGV2LT5mcm9udGVuZHMuYWN0aXZlX2ZlX2lkID0gMDsKKwkJfQogCX0KIAogCXJldHVybiByZXQ7CkBAIC0zNzUsMzcgKzM5MCwyOCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGN4ODhfcGNpX25hbm9fY2FsbGJhY2sodm9pZCAqcHRyLCBpbnQgY29tbWFuZCwgaW50IGFyZykKK3N0YXRpYyBpbnQgdGV2aWlfZHZic19zZXRfdm9sdGFnZShzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwKKwkJCQkgICAgICBmZV9zZWNfdm9sdGFnZV90IHZvbHRhZ2UpCiB7Ci0Jc3RydWN0IGN4ODhfY29yZSAqY29yZSA9IHB0cjsKKwlzdHJ1Y3QgY3g4ODAyX2RldiAqZGV2PSBmZS0+ZHZiLT5wcml2OworCXN0cnVjdCBjeDg4X2NvcmUgKmNvcmUgPSBkZXYtPmNvcmU7CiAKLQlzd2l0Y2ggKGNvbW1hbmQpIHsKLQljYXNlIFhDMjAyOF9UVU5FUl9SRVNFVDoKLQkJLyogU2VuZCB0aGUgdHVuZXIgaW4gdGhlbiBvdXQgb2YgcmVzZXQgKi8KLQkJZHByaW50aygxLCAiJXM6IFhDMjAyOF9UVU5FUl9SRVNFVCAlZFxuIiwgX19mdW5jX18sIGFyZyk7Ci0KLQkJc3dpdGNoIChjb3JlLT5ib2FyZG5yKSB7Ci0JCWNhc2UgQ1g4OF9CT0FSRF9EVklDT19GVVNJT05IRFRWXzVfUENJX05BTk86Ci0JCQkvKiBHUElPLTQgeGMzMDI4IHR1bmVyICovCi0KLQkJCWN4X3NldChNT19HUDBfSU8sIDB4MDAwMDEwMDApOwotCQkJY3hfY2xlYXIoTU9fR1AwX0lPLCAweDAwMDAwMDEwKTsKLQkJCW1zbGVlcCgxMDApOwotCQkJY3hfc2V0KE1PX0dQMF9JTywgMHgwMDAwMDAxMCk7Ci0JCQltc2xlZXAoMTAwKTsKKwlzd2l0Y2ggKHZvbHRhZ2UpIHsKKwkJY2FzZSBTRUNfVk9MVEFHRV8xMzoKKwkJCXByaW50aygiTE5CIFZvbHRhZ2UgU0VDX1ZPTFRBR0VfMTNcbiIpOworCQkJY3hfd3JpdGUoTU9fR1AwX0lPLCAweDAwMDA2MDQwKTsKIAkJCWJyZWFrOwotCQl9Ci0KLQkJYnJlYWs7Ci0JY2FzZSBYQzIwMjhfUkVTRVRfQ0xLOgotCQlkcHJpbnRrKDEsICIlczogWEMyMDI4X1JFU0VUX0NMSyAlZFxuIiwgX19mdW5jX18sIGFyZyk7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCWRwcmludGsoMSwgIiVzOiB1bmtub3duIGNvbW1hbmQgJWQsIGFyZyAlZFxuIiwgX19mdW5jX18sCi0JCQljb21tYW5kLCBhcmcpOwotCQlyZXR1cm4gLUVJTlZBTDsKKwkJY2FzZSBTRUNfVk9MVEFHRV8xODoKKwkJCXByaW50aygiTE5CIFZvbHRhZ2UgU0VDX1ZPTFRBR0VfMThcbiIpOworCQkJY3hfd3JpdGUoTU9fR1AwX0lPLCAweDAwMDA2MDYwKTsKKwkJCWJyZWFrOworCQljYXNlIFNFQ19WT0xUQUdFX09GRjoKKwkJICAgCXByaW50aygiTE5CIFZvbHRhZ2UgU0VDX1ZPTFRBR0Vfb2ZmXG4iKTsKKwkJCWJyZWFrOwogCX0KIAorCWlmIChjb3JlLT5wcmV2X3NldF92b2x0YWdlKQorCQlyZXR1cm4gY29yZS0+cHJldl9zZXRfdm9sdGFnZShmZSwgdm9sdGFnZSk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTQ1Niw3ICs0NjIsMTIgQEAKIHN0YXRpYyBzdHJ1Y3QgeGM1MDAwX2NvbmZpZyBwaW5uYWNsZV9wY3R2X2hkXzgwMGlfdHVuZXJfY29uZmlnID0gewogCS5pMmNfYWRkcmVzcwk9IDB4NjQsCiAJLmlmX2toegkJPSA1MzgwLAotCS50dW5lcl9jYWxsYmFjawk9IGN4ODhfdHVuZXJfY2FsbGJhY2ssCit9OworCitzdGF0aWMgc3RydWN0IHpsMTAzNTNfY29uZmlnIGN4ODhfcGlubmFjbGVfaHlicmlkX3BjdHYgPSB7CisJLmRlbW9kX2FkZHJlc3MgPSAoMHgxZSA+PiAxKSwKKwkubm9fdHVuZXIgICAgICA9IDEsCisJLmlmMiAgICAgICAgICAgPSA0NTYwMCwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgemwxMDM1M19jb25maWcgY3g4OF9nZW5pYXRlY2hfeDgwMDBfbXQgPSB7CkBAIC00NzcsMjEgKzQ4OCwyNSBAQAogc3RhdGljIHN0cnVjdCB4YzUwMDBfY29uZmlnIGR2aWNvX2Z1c2lvbmhkdHY3X3R1bmVyX2NvbmZpZyA9IHsKIAkuaTJjX2FkZHJlc3MgICAgPSAweGMyID4+IDEsCiAJLmlmX2toeiAgICAgICAgID0gNTM4MCwKLQkudHVuZXJfY2FsbGJhY2sgPSBjeDg4X3R1bmVyX2NhbGxiYWNrLAogfTsKIAogc3RhdGljIGludCBhdHRhY2hfeGMzMDI4KHU4IGFkZHIsIHN0cnVjdCBjeDg4MDJfZGV2ICpkZXYpCiB7CiAJc3RydWN0IGR2Yl9mcm9udGVuZCAqZmU7CisJc3RydWN0IHZpZGVvYnVmX2R2Yl9mcm9udGVuZCAqZmUwID0gTlVMTDsKIAlzdHJ1Y3QgeGMyMDI4X2N0cmwgY3RsOwogCXN0cnVjdCB4YzIwMjhfY29uZmlnIGNmZyA9IHsKIAkJLmkyY19hZGFwICA9ICZkZXYtPmNvcmUtPmkyY19hZGFwLAogCQkuaTJjX2FkZHIgID0gYWRkciwKIAkJLmN0cmwgICAgICA9ICZjdGwsCi0JCS5jYWxsYmFjayAgPSBjeDg4X3R1bmVyX2NhbGxiYWNrLAogCX07CiAKLQlpZiAoIWRldi0+ZHZiLmZyb250ZW5kKSB7CisJLyogR2V0IHRoZSBmaXJzdCBmcm9udGVuZCAqLworCWZlMCA9IHZpZGVvYnVmX2R2Yl9nZXRfZnJvbnRlbmQoJmRldi0+ZnJvbnRlbmRzLCAxKTsKKwlpZiAoIWZlMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoIWZlMC0+ZHZiLmZyb250ZW5kKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiJXMvMjogZHZiIGZyb250ZW5kIG5vdCBhdHRhY2hlZC4gIgogCQkJCSJDYW4ndCBhdHRhY2ggeGMzMDI4XG4iLAogCQkgICAgICAgZGV2LT5jb3JlLT5uYW1lKTsKQEAgLTUwNSwxMCArNTIwLDEzIEBACiAJICovCiAJY3g4OF9zZXR1cF94YzMwMjgoZGV2LT5jb3JlLCAmY3RsKTsKIAotCWZlID0gZHZiX2F0dGFjaCh4YzIwMjhfYXR0YWNoLCBkZXYtPmR2Yi5mcm9udGVuZCwgJmNmZyk7CisJZmUgPSBkdmJfYXR0YWNoKHhjMjAyOF9hdHRhY2gsIGZlMC0+ZHZiLmZyb250ZW5kLCAmY2ZnKTsKIAlpZiAoIWZlKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiJXMvMjogeGMzMDI4IGF0dGFjaCBmYWlsZWRcbiIsCiAJCSAgICAgICBkZXYtPmNvcmUtPm5hbWUpOworCQlkdmJfZnJvbnRlbmRfZGV0YWNoKGZlMC0+ZHZiLmZyb250ZW5kKTsKKwkJZHZiX3VucmVnaXN0ZXJfZnJvbnRlbmQoZmUwLT5kdmIuZnJvbnRlbmQpOworCQlmZTAtPmR2Yi5mcm9udGVuZCA9IE5VTEw7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApAQCAtNTE4LDIyICs1MzYsODQgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBjeDI0MTE2X3NldF90c19wYXJhbShzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwKKwlpbnQgaXNfcHVuY3R1cmVkKQoreworCXN0cnVjdCBjeDg4MDJfZGV2ICpkZXYgPSBmZS0+ZHZiLT5wcml2OworCWRldi0+dHNfZ2VuX2NudHJsID0gMHgyOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY3gyNDExNl9yZXNldF9kZXZpY2Uoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUpCit7CisJc3RydWN0IGN4ODgwMl9kZXYgKmRldiA9IGZlLT5kdmItPnByaXY7CisJc3RydWN0IGN4ODhfY29yZSAqY29yZSA9IGRldi0+Y29yZTsKKworCS8qIFJlc2V0IHRoZSBwYXJ0ICovCisJLyogUHV0IHRoZSBjeDI0MTE2IGludG8gcmVzZXQgKi8KKwljeF93cml0ZShNT19TUlNUX0lPLCAwKTsKKwltc2xlZXAoMTApOworCS8qIFRha2UgdGhlIGN4MjQxMTYgb3V0IG9mIHJlc2V0ICovCisJY3hfd3JpdGUoTU9fU1JTVF9JTywgMSk7CisJbXNsZWVwKDEwKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGN4MjQxMTZfY29uZmlnIGhhdXBwYXVnZV9odnI0MDAwX2NvbmZpZyA9IHsKKwkuZGVtb2RfYWRkcmVzcyAgICAgICAgICA9IDB4MDUsCisJLnNldF90c19wYXJhbXMgICAgICAgICAgPSBjeDI0MTE2X3NldF90c19wYXJhbSwKKwkucmVzZXRfZGV2aWNlICAgICAgICAgICA9IGN4MjQxMTZfcmVzZXRfZGV2aWNlLAorfTsKKworc3RhdGljIHN0cnVjdCBjeDI0MTE2X2NvbmZpZyB0ZXZpaV9zNDYwX2NvbmZpZyA9IHsKKwkuZGVtb2RfYWRkcmVzcyA9IDB4NTUsCisJLnNldF90c19wYXJhbXMgPSBjeDI0MTE2X3NldF90c19wYXJhbSwKKwkucmVzZXRfZGV2aWNlICA9IGN4MjQxMTZfcmVzZXRfZGV2aWNlLAorfTsKKworc3RhdGljIHN0cnVjdCBzdHYwMjk5X2NvbmZpZyB0ZXZpaV90dW5lcl9zaGFycF9jb25maWcgPSB7CisJLmRlbW9kX2FkZHJlc3MgPSAweDY4LAorCS5pbml0dGFiID0gc2hhcnBfejAxOTRhX2luaXR0YWIsCisJLm1jbGsgPSA4ODAwMDAwMFVMLAorCS5pbnZlcnQgPSAxLAorCS5za2lwX3JlaW5pdCA9IDAsCisJLmxvY2tfb3V0cHV0ID0gMSwKKwkudm9sdDEzX29wMF9vcDEgPSBTVFYwMjk5X1ZPTFQxM19PUDEsCisJLm1pbl9kZWxheV9tcyA9IDEwMCwKKwkuc2V0X3N5bWJvbF9yYXRlID0gc2hhcnBfejAxOTRhX3NldF9zeW1ib2xfcmF0ZSwKKwkuc2V0X3RzX3BhcmFtcyA9IGN4MjQxMTZfc2V0X3RzX3BhcmFtLAorfTsKKworc3RhdGljIHN0cnVjdCBzdHYwMjg4X2NvbmZpZyB0ZXZpaV90dW5lcl9lYXJkYV9jb25maWcgPSB7CisJLmRlbW9kX2FkZHJlc3MgPSAweDY4LAorCS5taW5fZGVsYXlfbXMgPSAxMDAsCisJLnNldF90c19wYXJhbXMgPSBjeDI0MTE2X3NldF90c19wYXJhbSwKK307CisKIHN0YXRpYyBpbnQgZHZiX3JlZ2lzdGVyKHN0cnVjdCBjeDg4MDJfZGV2ICpkZXYpCiB7CiAJc3RydWN0IGN4ODhfY29yZSAqY29yZSA9IGRldi0+Y29yZTsKKwlzdHJ1Y3QgdmlkZW9idWZfZHZiX2Zyb250ZW5kICpmZTAsICpmZTEgPSBOVUxMOworCWludCBtZmVfc2hhcmVkID0gMDsgLyogYnVzIG5vdCBzaGFyZWQgYnkgZGVmYXVsdCAqLwogCi0JLyogaW5pdCBzdHJ1Y3QgdmlkZW9idWZfZHZiICovCi0JZGV2LT5kdmIubmFtZSA9IGNvcmUtPm5hbWU7Ci0JZGV2LT50c19nZW5fY250cmwgPSAweDBjOworCS8qIEdldCB0aGUgZmlyc3QgZnJvbnRlbmQgKi8KKwlmZTAgPSB2aWRlb2J1Zl9kdmJfZ2V0X2Zyb250ZW5kKCZkZXYtPmZyb250ZW5kcywgMSk7CisJaWYgKCFmZTApCisJCXJldHVybiAtRUlOVkFMOwogCi0JLyogaW5pdCBmcm9udGVuZCAqLworCS8qIG11bHRpLWZyb250ZW5kIGdhdGUgY29udHJvbCBpcyB1bmRlZmluZWQgb3IgZGVmYXVsdHMgdG8gZmUwICovCisJZGV2LT5mcm9udGVuZHMuZ2F0ZSA9IDA7CisKKwkvKiBpbml0IGZyb250ZW5kKHMpICovCiAJc3dpdGNoIChjb3JlLT5ib2FyZG5yKSB7CiAJY2FzZSBDWDg4X0JPQVJEX0hBVVBQQVVHRV9EVkJfVDE6Ci0JCWRldi0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaChjeDIyNzAyX2F0dGFjaCwKKwkJZmUwLT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKGN4MjI3MDJfYXR0YWNoLAogCQkJCQkgICAgICAgJmNvbm5leGFudF9yZWZib2FyZF9jb25maWcsCiAJCQkJCSAgICAgICAmY29yZS0+aTJjX2FkYXApOwotCQlpZiAoZGV2LT5kdmIuZnJvbnRlbmQgIT0gTlVMTCkgewotCQkJaWYgKCFkdmJfYXR0YWNoKGR2Yl9wbGxfYXR0YWNoLCBkZXYtPmR2Yi5mcm9udGVuZCwKKwkJaWYgKGZlMC0+ZHZiLmZyb250ZW5kICE9IE5VTEwpIHsKKwkJCWlmICghZHZiX2F0dGFjaChkdmJfcGxsX2F0dGFjaCwgZmUwLT5kdmIuZnJvbnRlbmQsCiAJCQkJCTB4NjEsICZjb3JlLT5pMmNfYWRhcCwKIAkJCQkJRFZCX1BMTF9USE9NU09OX0RUVDc1OVgpKQogCQkJCWdvdG8gZnJvbnRlbmRfZGV0YWNoOwpAQCAtNTQzLDExICs2MjMsMTEgQEAKIAljYXNlIENYODhfQk9BUkRfQ09ORVhBTlRfRFZCX1QxOgogCWNhc2UgQ1g4OF9CT0FSRF9LV09STERfRFZCX1RfQ1gyMjcwMjoKIAljYXNlIENYODhfQk9BUkRfV0lORkFTVF9EVFYxMDAwOgotCQlkZXYtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2goY3gyMjcwMl9hdHRhY2gsCisJCWZlMC0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaChjeDIyNzAyX2F0dGFjaCwKIAkJCQkJICAgICAgICZjb25uZXhhbnRfcmVmYm9hcmRfY29uZmlnLAogCQkJCQkgICAgICAgJmNvcmUtPmkyY19hZGFwKTsKLQkJaWYgKGRldi0+ZHZiLmZyb250ZW5kICE9IE5VTEwpIHsKLQkJCWlmICghZHZiX2F0dGFjaChkdmJfcGxsX2F0dGFjaCwgZGV2LT5kdmIuZnJvbnRlbmQsCisJCWlmIChmZTAtPmR2Yi5mcm9udGVuZCAhPSBOVUxMKSB7CisJCQlpZiAoIWR2Yl9hdHRhY2goZHZiX3BsbF9hdHRhY2gsIGZlMC0+ZHZiLmZyb250ZW5kLAogCQkJCQkweDYwLCAmY29yZS0+aTJjX2FkYXAsCiAJCQkJCURWQl9QTExfVEhPTVNPTl9EVFQ3NTc5KSkKIAkJCQlnb3RvIGZyb250ZW5kX2RldGFjaDsKQEAgLTU1NywzMyArNjM3LDY3IEBACiAJY2FzZSBDWDg4X0JPQVJEX0hBVVBQQVVHRV9IVlIxMTAwOgogCWNhc2UgQ1g4OF9CT0FSRF9IQVVQUEFVR0VfSFZSMTEwMExQOgogCWNhc2UgQ1g4OF9CT0FSRF9IQVVQUEFVR0VfSFZSMTMwMDoKLQljYXNlIENYODhfQk9BUkRfSEFVUFBBVUdFX0hWUjMwMDA6Ci0JCWRldi0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaChjeDIyNzAyX2F0dGFjaCwKKwkJZmUwLT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKGN4MjI3MDJfYXR0YWNoLAogCQkJCQkgICAgICAgJmhhdXBwYXVnZV9odnJfY29uZmlnLAogCQkJCQkgICAgICAgJmNvcmUtPmkyY19hZGFwKTsKLQkJaWYgKGRldi0+ZHZiLmZyb250ZW5kICE9IE5VTEwpIHsKLQkJCWlmICghZHZiX2F0dGFjaChzaW1wbGVfdHVuZXJfYXR0YWNoLCBkZXYtPmR2Yi5mcm9udGVuZCwKKwkJaWYgKGZlMC0+ZHZiLmZyb250ZW5kICE9IE5VTEwpIHsKKwkJCWlmICghZHZiX2F0dGFjaChzaW1wbGVfdHVuZXJfYXR0YWNoLCBmZTAtPmR2Yi5mcm9udGVuZCwKIAkJCQkgICAmY29yZS0+aTJjX2FkYXAsIDB4NjEsCiAJCQkJICAgVFVORVJfUEhJTElQU19GTUQxMjE2TUVfTUszKSkKIAkJCQlnb3RvIGZyb250ZW5kX2RldGFjaDsKIAkJfQogCQlicmVhazsKKwljYXNlIENYODhfQk9BUkRfSEFVUFBBVUdFX0hWUjMwMDA6CisJCS8qIERWQi1TIGluaXQgKi8KKwkJZmUwLT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKGN4MjQxMjNfYXR0YWNoLAorCQkJICAgICAgICZoYXVwcGF1Z2Vfbm92YXNfY29uZmlnLAorCQkJICAgICAgICZkZXYtPmNvcmUtPmkyY19hZGFwKTsKKwkJaWYgKGZlMC0+ZHZiLmZyb250ZW5kKSB7CisJCQlpZiAoIWR2Yl9hdHRhY2goaXNsNjQyMV9hdHRhY2gsIGZlMC0+ZHZiLmZyb250ZW5kLAorCQkJJmRldi0+Y29yZS0+aTJjX2FkYXAsIDB4MDgsIElTTDY0MjFfRENMLCAweDAwKSkgeworCQkJCWRwcmludGsoIDEsICIlcygpOiBIVlIzMDAwIC0gRFZCLVMgTE5CIEluaXQ6IGZhaWxlZFxuIiwgX19mdW5jX18pOworCQkJfQorCQl9IGVsc2UgeworCQkJZHByaW50ayggMSwgIiVzKCk6IEhWUjMwMDAgLSBEVkItUyBJbml0OiBmYWlsZWRcbiIsIF9fZnVuY19fKTsKKwkJfQorCQkvKiBEVkItVCBpbml0ICovCisJCWZlMSA9IHZpZGVvYnVmX2R2Yl9nZXRfZnJvbnRlbmQoJmRldi0+ZnJvbnRlbmRzLCAyKTsKKwkJaWYgKGZlMSkgeworCQkJZGV2LT5mcm9udGVuZHMuZ2F0ZSA9IDI7CisJCQltZmVfc2hhcmVkID0gMTsKKwkJCWZlMS0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaChjeDIyNzAyX2F0dGFjaCwKKwkJCQkmaGF1cHBhdWdlX2h2cl9jb25maWcsCisJCQkJJmRldi0+Y29yZS0+aTJjX2FkYXApOworCQkJaWYgKGZlMS0+ZHZiLmZyb250ZW5kKSB7CisJCQkJZmUxLT5kdmIuZnJvbnRlbmQtPmlkID0gMTsKKwkJCQlpZighZHZiX2F0dGFjaChzaW1wbGVfdHVuZXJfYXR0YWNoLCBmZTEtPmR2Yi5mcm9udGVuZCwKKwkJCQkJCSZkZXYtPmNvcmUtPmkyY19hZGFwLCAweDYxLAorCQkJCQkJVFVORVJfUEhJTElQU19GTUQxMjE2TUVfTUszKSkgeworCQkJCQlkcHJpbnRrKCAxLCAiJXMoKTogSFZSMzAwMCAtIERWQi1UIG1pc2MgSW5pdDogZmFpbGVkXG4iLCBfX2Z1bmNfXyk7CisJCQkJfQorCQkJfSBlbHNlIHsKKwkJCQlkcHJpbnRrKCAxLCAiJXMoKTogSFZSMzAwMCAtIERWQi1UIEluaXQ6IGZhaWxlZFxuIiwgX19mdW5jX18pOworCQkJfQorCQl9IGVsc2UgeworCQkJZHByaW50ayggMSwgIiVzKCk6IEhWUjMwMDAgLSBEVkItVCBJbml0OiBjYW4ndCBmaW5kIGZyb250ZW5kIDIuXG4iLCBfX2Z1bmNfXyk7CisJCX0KKwkJYnJlYWs7CiAJY2FzZSBDWDg4X0JPQVJEX0RWSUNPX0ZVU0lPTkhEVFZfRFZCX1RfUExVUzoKLQkJZGV2LT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKG10MzUyX2F0dGFjaCwKKwkJZmUwLT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKG10MzUyX2F0dGFjaCwKIAkJCQkJICAgICAgICZkdmljb19mdXNpb25oZHR2LAogCQkJCQkgICAgICAgJmNvcmUtPmkyY19hZGFwKTsKLQkJaWYgKGRldi0+ZHZiLmZyb250ZW5kICE9IE5VTEwpIHsKLQkJCWlmICghZHZiX2F0dGFjaChkdmJfcGxsX2F0dGFjaCwgZGV2LT5kdmIuZnJvbnRlbmQsCisJCWlmIChmZTAtPmR2Yi5mcm9udGVuZCAhPSBOVUxMKSB7CisJCQlpZiAoIWR2Yl9hdHRhY2goZHZiX3BsbF9hdHRhY2gsIGZlMC0+ZHZiLmZyb250ZW5kLAogCQkJCQkweDYwLCBOVUxMLCBEVkJfUExMX1RIT01TT05fRFRUNzU3OSkpCiAJCQkJZ290byBmcm9udGVuZF9kZXRhY2g7CiAJCQlicmVhazsKIAkJfQogCQkvKiBaTDEwMzUzIHJlcGxhY2VzIE1UMzUyIG9uIGxhdGVyIGNhcmRzICovCi0JCWRldi0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaCh6bDEwMzUzX2F0dGFjaCwKKwkJZmUwLT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKHpsMTAzNTNfYXR0YWNoLAogCQkJCQkgICAgICAgJmR2aWNvX2Z1c2lvbmhkdHZfcGx1c192MV8xLAogCQkJCQkgICAgICAgJmNvcmUtPmkyY19hZGFwKTsKLQkJaWYgKGRldi0+ZHZiLmZyb250ZW5kICE9IE5VTEwpIHsKLQkJCWlmICghZHZiX2F0dGFjaChkdmJfcGxsX2F0dGFjaCwgZGV2LT5kdmIuZnJvbnRlbmQsCisJCWlmIChmZTAtPmR2Yi5mcm9udGVuZCAhPSBOVUxMKSB7CisJCQlpZiAoIWR2Yl9hdHRhY2goZHZiX3BsbF9hdHRhY2gsIGZlMC0+ZHZiLmZyb250ZW5kLAogCQkJCQkweDYwLCBOVUxMLCBEVkJfUExMX1RIT01TT05fRFRUNzU3OSkpCiAJCQkJZ290byBmcm9udGVuZF9kZXRhY2g7CiAJCX0KQEAgLTU5MSwzMSArNzA1LDMxIEBACiAJY2FzZSBDWDg4X0JPQVJEX0RWSUNPX0ZVU0lPTkhEVFZfRFZCX1RfRFVBTDoKIAkJLyogVGhlIHRpbiBib3ggc2F5cyBERUUxNjAxLCBidXQgaXQgc2VlbXMgdG8gYmUgRFRUNzU3OQogCQkgKiBjb21wYXRpYmxlLCB3aXRoIGEgc2xpZ2h0bHkgZGlmZmVyZW50IE1UMzUyIEFHQyBnYWluLiAqLwotCQlkZXYtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2gobXQzNTJfYXR0YWNoLAorCQlmZTAtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2gobXQzNTJfYXR0YWNoLAogCQkJCQkgICAgICAgJmR2aWNvX2Z1c2lvbmhkdHZfZHVhbCwKIAkJCQkJICAgICAgICZjb3JlLT5pMmNfYWRhcCk7Ci0JCWlmIChkZXYtPmR2Yi5mcm9udGVuZCAhPSBOVUxMKSB7Ci0JCQlpZiAoIWR2Yl9hdHRhY2goZHZiX3BsbF9hdHRhY2gsIGRldi0+ZHZiLmZyb250ZW5kLAorCQlpZiAoZmUwLT5kdmIuZnJvbnRlbmQgIT0gTlVMTCkgeworCQkJaWYgKCFkdmJfYXR0YWNoKGR2Yl9wbGxfYXR0YWNoLCBmZTAtPmR2Yi5mcm9udGVuZCwKIAkJCQkJMHg2MSwgTlVMTCwgRFZCX1BMTF9USE9NU09OX0RUVDc1NzkpKQogCQkJCWdvdG8gZnJvbnRlbmRfZGV0YWNoOwogCQkJYnJlYWs7CiAJCX0KIAkJLyogWkwxMDM1MyByZXBsYWNlcyBNVDM1MiBvbiBsYXRlciBjYXJkcyAqLwotCQlkZXYtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2goemwxMDM1M19hdHRhY2gsCisJCWZlMC0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaCh6bDEwMzUzX2F0dGFjaCwKIAkJCQkJICAgICAgICZkdmljb19mdXNpb25oZHR2X3BsdXNfdjFfMSwKIAkJCQkJICAgICAgICZjb3JlLT5pMmNfYWRhcCk7Ci0JCWlmIChkZXYtPmR2Yi5mcm9udGVuZCAhPSBOVUxMKSB7Ci0JCQlpZiAoIWR2Yl9hdHRhY2goZHZiX3BsbF9hdHRhY2gsIGRldi0+ZHZiLmZyb250ZW5kLAorCQlpZiAoZmUwLT5kdmIuZnJvbnRlbmQgIT0gTlVMTCkgeworCQkJaWYgKCFkdmJfYXR0YWNoKGR2Yl9wbGxfYXR0YWNoLCBmZTAtPmR2Yi5mcm9udGVuZCwKIAkJCQkJMHg2MSwgTlVMTCwgRFZCX1BMTF9USE9NU09OX0RUVDc1NzkpKQogCQkJCWdvdG8gZnJvbnRlbmRfZGV0YWNoOwogCQl9CiAJCWJyZWFrOwogCWNhc2UgQ1g4OF9CT0FSRF9EVklDT19GVVNJT05IRFRWX0RWQl9UMToKLQkJZGV2LT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKG10MzUyX2F0dGFjaCwKKwkJZmUwLT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKG10MzUyX2F0dGFjaCwKIAkJCQkJICAgICAgICZkdmljb19mdXNpb25oZHR2LAogCQkJCQkgICAgICAgJmNvcmUtPmkyY19hZGFwKTsKLQkJaWYgKGRldi0+ZHZiLmZyb250ZW5kICE9IE5VTEwpIHsKLQkJCWlmICghZHZiX2F0dGFjaChkdmJfcGxsX2F0dGFjaCwgZGV2LT5kdmIuZnJvbnRlbmQsCisJCWlmIChmZTAtPmR2Yi5mcm9udGVuZCAhPSBOVUxMKSB7CisJCQlpZiAoIWR2Yl9hdHRhY2goZHZiX3BsbF9hdHRhY2gsIGZlMC0+ZHZiLmZyb250ZW5kLAogCQkJCQkweDYxLCBOVUxMLCBEVkJfUExMX0xHX1oyMDEpKQogCQkJCWdvdG8gZnJvbnRlbmRfZGV0YWNoOwogCQl9CkBAIC02MjMsMTEgKzczNywxMSBAQAogCWNhc2UgQ1g4OF9CT0FSRF9LV09STERfRFZCX1Q6CiAJY2FzZSBDWDg4X0JPQVJEX0ROVFZfTElWRV9EVkJfVDoKIAljYXNlIENYODhfQk9BUkRfQURTVEVDSF9EVkJfVF9QQ0k6Ci0JCWRldi0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaChtdDM1Ml9hdHRhY2gsCisJCWZlMC0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaChtdDM1Ml9hdHRhY2gsCiAJCQkJCSAgICAgICAmZG50dl9saXZlX2R2YnRfY29uZmlnLAogCQkJCQkgICAgICAgJmNvcmUtPmkyY19hZGFwKTsKLQkJaWYgKGRldi0+ZHZiLmZyb250ZW5kICE9IE5VTEwpIHsKLQkJCWlmICghZHZiX2F0dGFjaChkdmJfcGxsX2F0dGFjaCwgZGV2LT5kdmIuZnJvbnRlbmQsCisJCWlmIChmZTAtPmR2Yi5mcm9udGVuZCAhPSBOVUxMKSB7CisJCQlpZiAoIWR2Yl9hdHRhY2goZHZiX3BsbF9hdHRhY2gsIGZlMC0+ZHZiLmZyb250ZW5kLAogCQkJCQkweDYxLCBOVUxMLCBEVkJfUExMX1VOS05PV05fMSkpCiAJCQkJZ290byBmcm9udGVuZF9kZXRhY2g7CiAJCX0KQEAgLTYzNSwxMCArNzQ5LDEwIEBACiAJY2FzZSBDWDg4X0JPQVJEX0ROVFZfTElWRV9EVkJfVF9QUk86CiAjaWYgZGVmaW5lZChDT05GSUdfVklERU9fQ1g4OF9WUDMwNTQpIHx8IChkZWZpbmVkKENPTkZJR19WSURFT19DWDg4X1ZQMzA1NF9NT0RVTEUpICYmIGRlZmluZWQoTU9EVUxFKSkKIAkJLyogTVQzNTIgaXMgb24gYSBzZWNvbmRhcnkgSTJDIGJ1cyBtYWRlIGZyb20gc29tZSBHUElPIGxpbmVzICovCi0JCWRldi0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaChtdDM1Ml9hdHRhY2gsICZkbnR2X2xpdmVfZHZidF9wcm9fY29uZmlnLAorCQlmZTAtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2gobXQzNTJfYXR0YWNoLCAmZG50dl9saXZlX2R2YnRfcHJvX2NvbmZpZywKIAkJCQkJICAgICAgICZkZXYtPnZwMzA1NC0+YWRhcCk7Ci0JCWlmIChkZXYtPmR2Yi5mcm9udGVuZCAhPSBOVUxMKSB7Ci0JCQlpZiAoIWR2Yl9hdHRhY2goc2ltcGxlX3R1bmVyX2F0dGFjaCwgZGV2LT5kdmIuZnJvbnRlbmQsCisJCWlmIChmZTAtPmR2Yi5mcm9udGVuZCAhPSBOVUxMKSB7CisJCQlpZiAoIWR2Yl9hdHRhY2goc2ltcGxlX3R1bmVyX2F0dGFjaCwgZmUwLT5kdmIuZnJvbnRlbmQsCiAJCQkJCSZjb3JlLT5pMmNfYWRhcCwgMHg2MSwKIAkJCQkJVFVORVJfUEhJTElQU19GTUQxMjE2TUVfTUszKSkKIAkJCQlnb3RvIGZyb250ZW5kX2RldGFjaDsKQEAgLTY0OSwyMiArNzYzLDIyIEBACiAjZW5kaWYKIAkJYnJlYWs7CiAJY2FzZSBDWDg4X0JPQVJEX0RWSUNPX0ZVU0lPTkhEVFZfRFZCX1RfSFlCUklEOgotCQlkZXYtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2goemwxMDM1M19hdHRhY2gsCisJCWZlMC0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaCh6bDEwMzUzX2F0dGFjaCwKIAkJCQkJICAgICAgICZkdmljb19mdXNpb25oZHR2X2h5YnJpZCwKIAkJCQkJICAgICAgICZjb3JlLT5pMmNfYWRhcCk7Ci0JCWlmIChkZXYtPmR2Yi5mcm9udGVuZCAhPSBOVUxMKSB7Ci0JCQlpZiAoIWR2Yl9hdHRhY2goc2ltcGxlX3R1bmVyX2F0dGFjaCwgZGV2LT5kdmIuZnJvbnRlbmQsCisJCWlmIChmZTAtPmR2Yi5mcm9udGVuZCAhPSBOVUxMKSB7CisJCQlpZiAoIWR2Yl9hdHRhY2goc2ltcGxlX3R1bmVyX2F0dGFjaCwgZmUwLT5kdmIuZnJvbnRlbmQsCiAJCQkJICAgJmNvcmUtPmkyY19hZGFwLCAweDYxLAogCQkJCSAgIFRVTkVSX1RIT01TT05fRkU2NjAwKSkKIAkJCQlnb3RvIGZyb250ZW5kX2RldGFjaDsKIAkJfQogCQlicmVhazsKIAljYXNlIENYODhfQk9BUkRfRFZJQ09fRlVTSU9OSERUVl9EVkJfVF9QUk86Ci0JCWRldi0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaCh6bDEwMzUzX2F0dGFjaCwKKwkJZmUwLT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKHpsMTAzNTNfYXR0YWNoLAogCQkJCQkgICAgICAgJmR2aWNvX2Z1c2lvbmhkdHZfeGMzMDI4LAogCQkJCQkgICAgICAgJmNvcmUtPmkyY19hZGFwKTsKLQkJaWYgKGRldi0+ZHZiLmZyb250ZW5kID09IE5VTEwpCi0JCQlkZXYtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2gobXQzNTJfYXR0YWNoLAorCQlpZiAoZmUwLT5kdmIuZnJvbnRlbmQgPT0gTlVMTCkKKwkJCWZlMC0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaChtdDM1Ml9hdHRhY2gsCiAJCQkJCQkmZHZpY29fZnVzaW9uaGR0dl9tdDM1Ml94YzMwMjgsCiAJCQkJCQkmY29yZS0+aTJjX2FkYXApOwogCQkvKgpAQCAtNjcyLDE2ICs3ODYsMTYgQEAKIAkJICogV2UgbXVzdCBub3QgcGVybWl0IGdhdGVfY3RybCB0byBiZSBwZXJmb3JtZWQsIG9yCiAJCSAqIHRoZSB4YzMwMjggY2Fubm90IGNvbW11bmljYXRlIG9uIHRoZSBidXMuCiAJCSAqLwotCQlpZiAoZGV2LT5kdmIuZnJvbnRlbmQpCi0JCQlkZXYtPmR2Yi5mcm9udGVuZC0+b3BzLmkyY19nYXRlX2N0cmwgPSBOVUxMOworCQlpZiAoZmUwLT5kdmIuZnJvbnRlbmQpCisJCQlmZTAtPmR2Yi5mcm9udGVuZC0+b3BzLmkyY19nYXRlX2N0cmwgPSBOVUxMOwogCQlpZiAoYXR0YWNoX3hjMzAyOCgweDYxLCBkZXYpIDwgMCkKIAkJCXJldHVybiAtRUlOVkFMOwogCQlicmVhazsKIAljYXNlIENYODhfQk9BUkRfUENIRFRWX0hEMzAwMDoKLQkJZGV2LT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKG9yNTExMzJfYXR0YWNoLCAmcGNoZHR2X2hkMzAwMCwKKwkJZmUwLT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKG9yNTExMzJfYXR0YWNoLCAmcGNoZHR2X2hkMzAwMCwKIAkJCQkJICAgICAgICZjb3JlLT5pMmNfYWRhcCk7Ci0JCWlmIChkZXYtPmR2Yi5mcm9udGVuZCAhPSBOVUxMKSB7Ci0JCQlpZiAoIWR2Yl9hdHRhY2goc2ltcGxlX3R1bmVyX2F0dGFjaCwgZGV2LT5kdmIuZnJvbnRlbmQsCisJCWlmIChmZTAtPmR2Yi5mcm9udGVuZCAhPSBOVUxMKSB7CisJCQlpZiAoIWR2Yl9hdHRhY2goc2ltcGxlX3R1bmVyX2F0dGFjaCwgZmUwLT5kdmIuZnJvbnRlbmQsCiAJCQkJCSZjb3JlLT5pMmNfYWRhcCwgMHg2MSwKIAkJCQkJVFVORVJfVEhPTVNPTl9EVFQ3NjFYKSkKIAkJCQlnb3RvIGZyb250ZW5kX2RldGFjaDsKQEAgLTY5OCwxMSArODEyLDExIEBACiAKIAkJLyogU2VsZWN0IFJGIGNvbm5lY3RvciBjYWxsYmFjayAqLwogCQlmdXNpb25oZHR2XzNfZ29sZC5wbGxfcmZfc2V0ID0gbGdkdDMzMHhfcGxsX3JmX3NldDsKLQkJZGV2LT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKGxnZHQzMzB4X2F0dGFjaCwKKwkJZmUwLT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKGxnZHQzMzB4X2F0dGFjaCwKIAkJCQkJICAgICAgICZmdXNpb25oZHR2XzNfZ29sZCwKIAkJCQkJICAgICAgICZjb3JlLT5pMmNfYWRhcCk7Ci0JCWlmIChkZXYtPmR2Yi5mcm9udGVuZCAhPSBOVUxMKSB7Ci0JCQlpZiAoIWR2Yl9hdHRhY2goc2ltcGxlX3R1bmVyX2F0dGFjaCwgZGV2LT5kdmIuZnJvbnRlbmQsCisJCWlmIChmZTAtPmR2Yi5mcm9udGVuZCAhPSBOVUxMKSB7CisJCQlpZiAoIWR2Yl9hdHRhY2goc2ltcGxlX3R1bmVyX2F0dGFjaCwgZmUwLT5kdmIuZnJvbnRlbmQsCiAJCQkJCSZjb3JlLT5pMmNfYWRhcCwgMHg2MSwKIAkJCQkJVFVORVJfTUlDUk9UVU5FXzQwNDJGSTUpKQogCQkJCWdvdG8gZnJvbnRlbmRfZGV0YWNoOwpAQCAtNzE2LDExICs4MzAsMTEgQEAKIAkJbWRlbGF5KDEwMCk7CiAJCWN4X3NldChNT19HUDBfSU8sIDkpOwogCQltZGVsYXkoMjAwKTsKLQkJZGV2LT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKGxnZHQzMzB4X2F0dGFjaCwKKwkJZmUwLT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKGxnZHQzMzB4X2F0dGFjaCwKIAkJCQkJICAgICAgICZmdXNpb25oZHR2XzNfZ29sZCwKIAkJCQkJICAgICAgICZjb3JlLT5pMmNfYWRhcCk7Ci0JCWlmIChkZXYtPmR2Yi5mcm9udGVuZCAhPSBOVUxMKSB7Ci0JCQlpZiAoIWR2Yl9hdHRhY2goc2ltcGxlX3R1bmVyX2F0dGFjaCwgZGV2LT5kdmIuZnJvbnRlbmQsCisJCWlmIChmZTAtPmR2Yi5mcm9udGVuZCAhPSBOVUxMKSB7CisJCQlpZiAoIWR2Yl9hdHRhY2goc2ltcGxlX3R1bmVyX2F0dGFjaCwgZmUwLT5kdmIuZnJvbnRlbmQsCiAJCQkJCSZjb3JlLT5pMmNfYWRhcCwgMHg2MSwKIAkJCQkJVFVORVJfVEhPTVNPTl9EVFQ3NjFYKSkKIAkJCQlnb3RvIGZyb250ZW5kX2RldGFjaDsKQEAgLTczNCwxNSArODQ4LDE1IEBACiAJCW1kZWxheSgxMDApOwogCQljeF9zZXQoTU9fR1AwX0lPLCAxKTsKIAkJbWRlbGF5KDIwMCk7Ci0JCWRldi0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaChsZ2R0MzMweF9hdHRhY2gsCisJCWZlMC0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaChsZ2R0MzMweF9hdHRhY2gsCiAJCQkJCSAgICAgICAmZnVzaW9uaGR0dl81X2dvbGQsCiAJCQkJCSAgICAgICAmY29yZS0+aTJjX2FkYXApOwotCQlpZiAoZGV2LT5kdmIuZnJvbnRlbmQgIT0gTlVMTCkgewotCQkJaWYgKCFkdmJfYXR0YWNoKHNpbXBsZV90dW5lcl9hdHRhY2gsIGRldi0+ZHZiLmZyb250ZW5kLAorCQlpZiAoZmUwLT5kdmIuZnJvbnRlbmQgIT0gTlVMTCkgeworCQkJaWYgKCFkdmJfYXR0YWNoKHNpbXBsZV90dW5lcl9hdHRhY2gsIGZlMC0+ZHZiLmZyb250ZW5kLAogCQkJCQkmY29yZS0+aTJjX2FkYXAsIDB4NjEsCiAJCQkJCVRVTkVSX0xHX1REVlNfSDA2WEYpKQogCQkJCWdvdG8gZnJvbnRlbmRfZGV0YWNoOwotCQkJaWYgKCFkdmJfYXR0YWNoKHRkYTk4ODdfYXR0YWNoLCBkZXYtPmR2Yi5mcm9udGVuZCwKKwkJCWlmICghZHZiX2F0dGFjaCh0ZGE5ODg3X2F0dGFjaCwgZmUwLT5kdmIuZnJvbnRlbmQsCiAJCQkJICAgJmNvcmUtPmkyY19hZGFwLCAweDQzKSkKIAkJCQlnb3RvIGZyb250ZW5kX2RldGFjaDsKIAkJfQpAQCAtNzU1LDI1ICs4NjksMjUgQEAKIAkJbWRlbGF5KDEwMCk7CiAJCWN4X3NldChNT19HUDBfSU8sIDEpOwogCQltZGVsYXkoMjAwKTsKLQkJZGV2LT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKGxnZHQzMzB4X2F0dGFjaCwKKwkJZmUwLT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKGxnZHQzMzB4X2F0dGFjaCwKIAkJCQkJICAgICAgICZwY2hkdHZfaGQ1NTAwLAogCQkJCQkgICAgICAgJmNvcmUtPmkyY19hZGFwKTsKLQkJaWYgKGRldi0+ZHZiLmZyb250ZW5kICE9IE5VTEwpIHsKLQkJCWlmICghZHZiX2F0dGFjaChzaW1wbGVfdHVuZXJfYXR0YWNoLCBkZXYtPmR2Yi5mcm9udGVuZCwKKwkJaWYgKGZlMC0+ZHZiLmZyb250ZW5kICE9IE5VTEwpIHsKKwkJCWlmICghZHZiX2F0dGFjaChzaW1wbGVfdHVuZXJfYXR0YWNoLCBmZTAtPmR2Yi5mcm9udGVuZCwKIAkJCQkJJmNvcmUtPmkyY19hZGFwLCAweDYxLAogCQkJCQlUVU5FUl9MR19URFZTX0gwNlhGKSkKIAkJCQlnb3RvIGZyb250ZW5kX2RldGFjaDsKLQkJCWlmICghZHZiX2F0dGFjaCh0ZGE5ODg3X2F0dGFjaCwgZGV2LT5kdmIuZnJvbnRlbmQsCisJCQlpZiAoIWR2Yl9hdHRhY2godGRhOTg4N19hdHRhY2gsIGZlMC0+ZHZiLmZyb250ZW5kLAogCQkJCSAgICZjb3JlLT5pMmNfYWRhcCwgMHg0MykpCiAJCQkJZ290byBmcm9udGVuZF9kZXRhY2g7CiAJCX0KIAkJYnJlYWs7CiAJY2FzZSBDWDg4X0JPQVJEX0FUSV9IRFRWV09OREVSOgotCQlkZXYtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2gobnh0MjAweF9hdHRhY2gsCisJCWZlMC0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaChueHQyMDB4X2F0dGFjaCwKIAkJCQkJICAgICAgICZhdGlfaGR0dndvbmRlciwKIAkJCQkJICAgICAgICZjb3JlLT5pMmNfYWRhcCk7Ci0JCWlmIChkZXYtPmR2Yi5mcm9udGVuZCAhPSBOVUxMKSB7Ci0JCQlpZiAoIWR2Yl9hdHRhY2goc2ltcGxlX3R1bmVyX2F0dGFjaCwgZGV2LT5kdmIuZnJvbnRlbmQsCisJCWlmIChmZTAtPmR2Yi5mcm9udGVuZCAhPSBOVUxMKSB7CisJCQlpZiAoIWR2Yl9hdHRhY2goc2ltcGxlX3R1bmVyX2F0dGFjaCwgZmUwLT5kdmIuZnJvbnRlbmQsCiAJCQkJCSZjb3JlLT5pMmNfYWRhcCwgMHg2MSwKIAkJCQkJVFVORVJfUEhJTElQU19UVVYxMjM2RCkpCiAJCQkJZ290byBmcm9udGVuZF9kZXRhY2g7CkBAIC03ODEsMTM1ICs4OTUsMjI0IEBACiAJCWJyZWFrOwogCWNhc2UgQ1g4OF9CT0FSRF9IQVVQUEFVR0VfTk9WQVNQTFVTX1MxOgogCWNhc2UgQ1g4OF9CT0FSRF9IQVVQUEFVR0VfTk9WQVNFMl9TMToKLQkJZGV2LT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKGN4MjQxMjNfYXR0YWNoLAorCQlmZTAtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2goY3gyNDEyM19hdHRhY2gsCiAJCQkJCSAgICAgICAmaGF1cHBhdWdlX25vdmFzX2NvbmZpZywKIAkJCQkJICAgICAgICZjb3JlLT5pMmNfYWRhcCk7Ci0JCWlmIChkZXYtPmR2Yi5mcm9udGVuZCkgewotCQkJaWYgKCFkdmJfYXR0YWNoKGlzbDY0MjFfYXR0YWNoLCBkZXYtPmR2Yi5mcm9udGVuZCwKLQkJCQkJJmNvcmUtPmkyY19hZGFwLCAweDA4LCAweDAwLCAweDAwKSkKKwkJaWYgKGZlMC0+ZHZiLmZyb250ZW5kKSB7CisJCQlpZiAoIWR2Yl9hdHRhY2goaXNsNjQyMV9hdHRhY2gsIGZlMC0+ZHZiLmZyb250ZW5kLAorCQkJCQkmY29yZS0+aTJjX2FkYXAsIDB4MDgsIElTTDY0MjFfRENMLCAweDAwKSkKIAkJCQlnb3RvIGZyb250ZW5kX2RldGFjaDsKIAkJfQogCQlicmVhazsKIAljYXNlIENYODhfQk9BUkRfS1dPUkxEX0RWQlNfMTAwOgotCQlkZXYtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2goY3gyNDEyM19hdHRhY2gsCisJCWZlMC0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaChjeDI0MTIzX2F0dGFjaCwKIAkJCQkJICAgICAgICZrd29ybGRfZHZic18xMDBfY29uZmlnLAogCQkJCQkgICAgICAgJmNvcmUtPmkyY19hZGFwKTsKLQkJaWYgKGRldi0+ZHZiLmZyb250ZW5kKSB7Ci0JCQljb3JlLT5wcmV2X3NldF92b2x0YWdlID0gZGV2LT5kdmIuZnJvbnRlbmQtPm9wcy5zZXRfdm9sdGFnZTsKLQkJCWRldi0+ZHZiLmZyb250ZW5kLT5vcHMuc2V0X3ZvbHRhZ2UgPSBrd29ybGRfZHZic18xMDBfc2V0X3ZvbHRhZ2U7CisJCWlmIChmZTAtPmR2Yi5mcm9udGVuZCkgeworCQkJY29yZS0+cHJldl9zZXRfdm9sdGFnZSA9IGZlMC0+ZHZiLmZyb250ZW5kLT5vcHMuc2V0X3ZvbHRhZ2U7CisJCQlmZTAtPmR2Yi5mcm9udGVuZC0+b3BzLnNldF92b2x0YWdlID0ga3dvcmxkX2R2YnNfMTAwX3NldF92b2x0YWdlOwogCQl9CiAJCWJyZWFrOwogCWNhc2UgQ1g4OF9CT0FSRF9HRU5JQVRFQ0hfRFZCUzoKLQkJZGV2LT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKGN4MjQxMjNfYXR0YWNoLAorCQlmZTAtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2goY3gyNDEyM19hdHRhY2gsCiAJCQkJCSAgICAgICAmZ2VuaWF0ZWNoX2R2YnNfY29uZmlnLAogCQkJCQkgICAgICAgJmNvcmUtPmkyY19hZGFwKTsKLQkJaWYgKGRldi0+ZHZiLmZyb250ZW5kKSB7Ci0JCQljb3JlLT5wcmV2X3NldF92b2x0YWdlID0gZGV2LT5kdmIuZnJvbnRlbmQtPm9wcy5zZXRfdm9sdGFnZTsKLQkJCWRldi0+ZHZiLmZyb250ZW5kLT5vcHMuc2V0X3ZvbHRhZ2UgPSBnZW5pYXRlY2hfZHZic19zZXRfdm9sdGFnZTsKKwkJaWYgKGZlMC0+ZHZiLmZyb250ZW5kKSB7CisJCQljb3JlLT5wcmV2X3NldF92b2x0YWdlID0gZmUwLT5kdmIuZnJvbnRlbmQtPm9wcy5zZXRfdm9sdGFnZTsKKwkJCWZlMC0+ZHZiLmZyb250ZW5kLT5vcHMuc2V0X3ZvbHRhZ2UgPSBnZW5pYXRlY2hfZHZic19zZXRfdm9sdGFnZTsKIAkJfQogCQlicmVhazsKIAljYXNlIENYODhfQk9BUkRfUElOTkFDTEVfUENUVl9IRF84MDBpOgotCQlkZXYtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2goczVoMTQwOV9hdHRhY2gsCisJCWZlMC0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaChzNWgxNDA5X2F0dGFjaCwKIAkJCQkJICAgICAgICZwaW5uYWNsZV9wY3R2X2hkXzgwMGlfY29uZmlnLAogCQkJCQkgICAgICAgJmNvcmUtPmkyY19hZGFwKTsKLQkJaWYgKGRldi0+ZHZiLmZyb250ZW5kICE9IE5VTEwpIHsKLQkJCS8qIHR1bmVyX2NvbmZpZy52aWRlb19kZXYgbXVzdCBwb2ludCB0bwotCQkJICogaTJjX2FkYXAuYWxnb19kYXRhCi0JCQkgKi8KLQkJCWlmICghZHZiX2F0dGFjaCh4YzUwMDBfYXR0YWNoLCBkZXYtPmR2Yi5mcm9udGVuZCwKKwkJaWYgKGZlMC0+ZHZiLmZyb250ZW5kICE9IE5VTEwpIHsKKwkJCWlmICghZHZiX2F0dGFjaCh4YzUwMDBfYXR0YWNoLCBmZTAtPmR2Yi5mcm9udGVuZCwKIAkJCQkJJmNvcmUtPmkyY19hZGFwLAotCQkJCQkmcGlubmFjbGVfcGN0dl9oZF84MDBpX3R1bmVyX2NvbmZpZywKLQkJCQkJY29yZS0+aTJjX2FkYXAuYWxnb19kYXRhKSkKKwkJCQkJJnBpbm5hY2xlX3BjdHZfaGRfODAwaV90dW5lcl9jb25maWcpKQogCQkJCWdvdG8gZnJvbnRlbmRfZGV0YWNoOwogCQl9CiAJCWJyZWFrOwogCWNhc2UgQ1g4OF9CT0FSRF9EVklDT19GVVNJT05IRFRWXzVfUENJX05BTk86Ci0JCWRldi0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaChzNWgxNDA5X2F0dGFjaCwKKwkJZmUwLT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKHM1aDE0MDlfYXR0YWNoLAogCQkJCQkJJmR2aWNvX2hkdHY1X3BjaV9uYW5vX2NvbmZpZywKIAkJCQkJCSZjb3JlLT5pMmNfYWRhcCk7Ci0JCWlmIChkZXYtPmR2Yi5mcm9udGVuZCAhPSBOVUxMKSB7CisJCWlmIChmZTAtPmR2Yi5mcm9udGVuZCAhPSBOVUxMKSB7CiAJCQlzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZTsKIAkJCXN0cnVjdCB4YzIwMjhfY29uZmlnIGNmZyA9IHsKIAkJCQkuaTJjX2FkYXAgID0gJmNvcmUtPmkyY19hZGFwLAogCQkJCS5pMmNfYWRkciAgPSAweDYxLAotCQkJCS5jYWxsYmFjayAgPSBjeDg4X3BjaV9uYW5vX2NhbGxiYWNrLAogCQkJfTsKIAkJCXN0YXRpYyBzdHJ1Y3QgeGMyMDI4X2N0cmwgY3RsID0gewotCQkJCS5mbmFtZSAgICAgICA9ICJ4YzMwMjgtdjI3LmZ3IiwKKwkJCQkuZm5hbWUgICAgICAgPSBYQzIwMjhfREVGQVVMVF9GSVJNV0FSRSwKIAkJCQkubWF4X2xlbiAgICAgPSA2NCwKIAkJCQkuc2NvZGVfdGFibGUgPSBYQzMwMjhfRkVfT1JFTjUzOCwKIAkJCX07CiAKIAkJCWZlID0gZHZiX2F0dGFjaCh4YzIwMjhfYXR0YWNoLAotCQkJCQlkZXYtPmR2Yi5mcm9udGVuZCwgJmNmZyk7CisJCQkJCWZlMC0+ZHZiLmZyb250ZW5kLCAmY2ZnKTsKIAkJCWlmIChmZSAhPSBOVUxMICYmIGZlLT5vcHMudHVuZXJfb3BzLnNldF9jb25maWcgIT0gTlVMTCkKIAkJCQlmZS0+b3BzLnR1bmVyX29wcy5zZXRfY29uZmlnKGZlLCAmY3RsKTsKIAkJfQogCQlicmVhazsKIAkgY2FzZSBDWDg4X0JPQVJEX1BJTk5BQ0xFX0hZQlJJRF9QQ1RWOgotCQlkZXYtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2goemwxMDM1M19hdHRhY2gsCi0JCQkJCSAgICAgICAmY3g4OF9nZW5pYXRlY2hfeDgwMDBfbXQsCisJCWZlMC0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaCh6bDEwMzUzX2F0dGFjaCwKKwkJCQkJICAgICAgICZjeDg4X3Bpbm5hY2xlX2h5YnJpZF9wY3R2LAogCQkJCQkgICAgICAgJmNvcmUtPmkyY19hZGFwKTsKLQkJaWYgKGF0dGFjaF94YzMwMjgoMHg2MSwgZGV2KSA8IDApCi0JCQlnb3RvIGZyb250ZW5kX2RldGFjaDsKKwkJaWYgKGZlMC0+ZHZiLmZyb250ZW5kKSB7CisJCQlmZTAtPmR2Yi5mcm9udGVuZC0+b3BzLmkyY19nYXRlX2N0cmwgPSBOVUxMOworCQkJaWYgKGF0dGFjaF94YzMwMjgoMHg2MSwgZGV2KSA8IDApCisJCQkJZ290byBmcm9udGVuZF9kZXRhY2g7CisJCX0KIAkJYnJlYWs7CiAJIGNhc2UgQ1g4OF9CT0FSRF9HRU5JQVRFQ0hfWDgwMDBfTVQ6CiAJCWRldi0+dHNfZ2VuX2NudHJsID0gMHgwMDsKIAotCQlkZXYtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2goemwxMDM1M19hdHRhY2gsCisJCWZlMC0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaCh6bDEwMzUzX2F0dGFjaCwKIAkJCQkJICAgICAgICZjeDg4X2dlbmlhdGVjaF94ODAwMF9tdCwKIAkJCQkJICAgICAgICZjb3JlLT5pMmNfYWRhcCk7CiAJCWlmIChhdHRhY2hfeGMzMDI4KDB4NjEsIGRldikgPCAwKQogCQkJZ290byBmcm9udGVuZF9kZXRhY2g7CiAJCWJyZWFrOwogCSBjYXNlIENYODhfQk9BUkRfS1dPUkxEX0FUU0NfMTIwOgotCQlkZXYtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2goczVoMTQwOV9hdHRhY2gsCisJCWZlMC0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaChzNWgxNDA5X2F0dGFjaCwKIAkJCQkJICAgICAgICZrd29ybGRfYXRzY18xMjBfY29uZmlnLAogCQkJCQkgICAgICAgJmNvcmUtPmkyY19hZGFwKTsKIAkJaWYgKGF0dGFjaF94YzMwMjgoMHg2MSwgZGV2KSA8IDApCiAJCQlnb3RvIGZyb250ZW5kX2RldGFjaDsKIAkJYnJlYWs7CiAJY2FzZSBDWDg4X0JPQVJEX0RWSUNPX0ZVU0lPTkhEVFZfN19HT0xEOgotCQlkZXYtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2goczVoMTQxMV9hdHRhY2gsCisJCWZlMC0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaChzNWgxNDExX2F0dGFjaCwKIAkJCQkJICAgICAgICZkdmljb19mdXNpb25oZHR2N19jb25maWcsCiAJCQkJCSAgICAgICAmY29yZS0+aTJjX2FkYXApOwotCQlpZiAoZGV2LT5kdmIuZnJvbnRlbmQgIT0gTlVMTCkgewotCQkJLyogdHVuZXJfY29uZmlnLnZpZGVvX2RldiBtdXN0IHBvaW50IHRvCi0JCQkgKiBpMmNfYWRhcC5hbGdvX2RhdGEKLQkJCSAqLwotCQkJaWYgKCFkdmJfYXR0YWNoKHhjNTAwMF9hdHRhY2gsIGRldi0+ZHZiLmZyb250ZW5kLAorCQlpZiAoZmUwLT5kdmIuZnJvbnRlbmQgIT0gTlVMTCkgeworCQkJaWYgKCFkdmJfYXR0YWNoKHhjNTAwMF9hdHRhY2gsIGZlMC0+ZHZiLmZyb250ZW5kLAogCQkJCQkmY29yZS0+aTJjX2FkYXAsCi0JCQkJCSZkdmljb19mdXNpb25oZHR2N190dW5lcl9jb25maWcsCi0JCQkJCWNvcmUtPmkyY19hZGFwLmFsZ29fZGF0YSkpCisJCQkJCSZkdmljb19mdXNpb25oZHR2N190dW5lcl9jb25maWcpKQogCQkJCWdvdG8gZnJvbnRlbmRfZGV0YWNoOwogCQl9CiAJCWJyZWFrOworCWNhc2UgQ1g4OF9CT0FSRF9IQVVQUEFVR0VfSFZSNDAwMDoKKwkJLyogRFZCLVMvUzIgSW5pdCAqLworCQlmZTAtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2goY3gyNDExNl9hdHRhY2gsCisJCQkmaGF1cHBhdWdlX2h2cjQwMDBfY29uZmlnLAorCQkJJmRldi0+Y29yZS0+aTJjX2FkYXApOworCQlpZiAoZmUwLT5kdmIuZnJvbnRlbmQpIHsKKwkJCWlmKCFkdmJfYXR0YWNoKGlzbDY0MjFfYXR0YWNoLCBmZTAtPmR2Yi5mcm9udGVuZCwKKwkJCQkmZGV2LT5jb3JlLT5pMmNfYWRhcCwgMHgwOCwgSVNMNjQyMV9EQ0wsIDB4MDApKSB7CisJCQkJZHByaW50ayggMSwgIiVzKCk6IEhWUjQwMDAgLSBEVkItUyBMTkIgSW5pdDogZmFpbGVkXG4iLCBfX2Z1bmNfXyk7CisJCQl9CisJCX0gZWxzZSB7CisJCQlkcHJpbnRrKCAxLCAiJXMoKTogSFZSNDAwMCAtIERWQi1TIEluaXQ6IGZhaWxlZFxuIiwgX19mdW5jX18pOworCQl9CisJCS8qIERWQi1UIEluaXQgKi8KKwkJZmUxID0gdmlkZW9idWZfZHZiX2dldF9mcm9udGVuZCgmZGV2LT5mcm9udGVuZHMsIDIpOworCQlpZiAoZmUxKSB7CisJCQlkZXYtPmZyb250ZW5kcy5nYXRlID0gMjsKKwkJCW1mZV9zaGFyZWQgPSAxOworCQkJZmUxLT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKGN4MjI3MDJfYXR0YWNoLAorCQkJCSZoYXVwcGF1Z2VfaHZyX2NvbmZpZywKKwkJCQkmZGV2LT5jb3JlLT5pMmNfYWRhcCk7CisJCQlpZiAoZmUxLT5kdmIuZnJvbnRlbmQpIHsKKwkJCQlmZTEtPmR2Yi5mcm9udGVuZC0+aWQgPSAxOworCQkJCWlmKCFkdmJfYXR0YWNoKHNpbXBsZV90dW5lcl9hdHRhY2gsIGZlMS0+ZHZiLmZyb250ZW5kLAorCQkJCQkmZGV2LT5jb3JlLT5pMmNfYWRhcCwgMHg2MSwKKwkJCQkJVFVORVJfUEhJTElQU19GTUQxMjE2TUVfTUszKSkgeworCQkJCQlkcHJpbnRrKCAxLCAiJXMoKTogSFZSNDAwMCAtIERWQi1UIG1pc2MgSW5pdDogZmFpbGVkXG4iLCBfX2Z1bmNfXyk7CisJCQkJfQorCQkJfSBlbHNlIHsKKwkJCQlkcHJpbnRrKCAxLCAiJXMoKTogSFZSNDAwMCAtIERWQi1UIEluaXQ6IGZhaWxlZFxuIiwgX19mdW5jX18pOworCQkJfQorCQl9IGVsc2UgeworCQkJZHByaW50ayggMSwgIiVzKCk6IEhWUjQwMDAgLSBEVkItVCBJbml0OiBjYW4ndCBmaW5kIGZyb250ZW5kIDIuXG4iLCBfX2Z1bmNfXyk7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBDWDg4X0JPQVJEX0hBVVBQQVVHRV9IVlI0MDAwTElURToKKwkJZmUwLT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKGN4MjQxMTZfYXR0YWNoLAorCQkJJmhhdXBwYXVnZV9odnI0MDAwX2NvbmZpZywKKwkJCSZkZXYtPmNvcmUtPmkyY19hZGFwKTsKKwkJaWYgKGZlMC0+ZHZiLmZyb250ZW5kKSB7CisJCQlkdmJfYXR0YWNoKGlzbDY0MjFfYXR0YWNoLCBmZTAtPmR2Yi5mcm9udGVuZCwKKwkJCQkmZGV2LT5jb3JlLT5pMmNfYWRhcCwKKwkJCQkweDA4LCBJU0w2NDIxX0RDTCwgMHgwMCk7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBDWDg4X0JPQVJEX1RFVklJX1M0MjA6CisJCWZlMC0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaChzdHYwMjk5X2F0dGFjaCwKKwkJCQkJCSZ0ZXZpaV90dW5lcl9zaGFycF9jb25maWcsCisJCQkJCQkmY29yZS0+aTJjX2FkYXApOworCQlpZiAoZmUwLT5kdmIuZnJvbnRlbmQgIT0gTlVMTCkgeworCQkJaWYgKCFkdmJfYXR0YWNoKGR2Yl9wbGxfYXR0YWNoLCBmZTAtPmR2Yi5mcm9udGVuZCwgMHg2MCwKKwkJCQkJJmNvcmUtPmkyY19hZGFwLCBEVkJfUExMX09QRVJBMSkpCisJCQkJZ290byBmcm9udGVuZF9kZXRhY2g7CisJCQljb3JlLT5wcmV2X3NldF92b2x0YWdlID0gZmUwLT5kdmIuZnJvbnRlbmQtPm9wcy5zZXRfdm9sdGFnZTsKKwkJCWZlMC0+ZHZiLmZyb250ZW5kLT5vcHMuc2V0X3ZvbHRhZ2UgPSB0ZXZpaV9kdmJzX3NldF92b2x0YWdlOworCisJCX0gZWxzZSB7CisJCQlmZTAtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2goc3R2MDI4OF9hdHRhY2gsCisJCQkJCQkJICAgICZ0ZXZpaV90dW5lcl9lYXJkYV9jb25maWcsCisJCQkJCQkJICAgICZjb3JlLT5pMmNfYWRhcCk7CisJCQkJaWYgKGZlMC0+ZHZiLmZyb250ZW5kICE9IE5VTEwpIHsKKwkJCQkJaWYgKCFkdmJfYXR0YWNoKHN0YjYwMDBfYXR0YWNoLCBmZTAtPmR2Yi5mcm9udGVuZCwgMHg2MSwKKwkJCQkJCSZjb3JlLT5pMmNfYWRhcCkpCisJCQkJCWdvdG8gZnJvbnRlbmRfZGV0YWNoOworCQkJCWNvcmUtPnByZXZfc2V0X3ZvbHRhZ2UgPSBmZTAtPmR2Yi5mcm9udGVuZC0+b3BzLnNldF92b2x0YWdlOworCQkJCWZlMC0+ZHZiLmZyb250ZW5kLT5vcHMuc2V0X3ZvbHRhZ2UgPSB0ZXZpaV9kdmJzX3NldF92b2x0YWdlOworCisJCQl9CisJCX0KKwkJYnJlYWs7CisJY2FzZSBDWDg4X0JPQVJEX1RFVklJX1M0NjA6CisJCWZlMC0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaChjeDI0MTE2X2F0dGFjaCwKKwkJCQkJICAgICAgICZ0ZXZpaV9zNDYwX2NvbmZpZywKKwkJCQkJICAgICAgICZjb3JlLT5pMmNfYWRhcCk7CisJCWlmIChmZTAtPmR2Yi5mcm9udGVuZCAhPSBOVUxMKSB7CisJCQljb3JlLT5wcmV2X3NldF92b2x0YWdlID0gZmUwLT5kdmIuZnJvbnRlbmQtPm9wcy5zZXRfdm9sdGFnZTsKKwkJCWZlMC0+ZHZiLmZyb250ZW5kLT5vcHMuc2V0X3ZvbHRhZ2UgPSB0ZXZpaV9kdmJzX3NldF92b2x0YWdlOworCQl9CisJCWJyZWFrOworCWNhc2UgQ1g4OF9CT0FSRF9PTUlDT01fU1M0X1BDSToKKwljYXNlIENYODhfQk9BUkRfVEJTXzg5MjA6CisJY2FzZSBDWDg4X0JPQVJEX1BST0ZfNzMwMDoKKwkJZmUwLT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKGN4MjQxMTZfYXR0YWNoLAorCQkJCQkgICAgICAgJmhhdXBwYXVnZV9odnI0MDAwX2NvbmZpZywKKwkJCQkJICAgICAgICZjb3JlLT5pMmNfYWRhcCk7CisJCWlmIChmZTAtPmR2Yi5mcm9udGVuZCAhPSBOVUxMKSB7CisJCQljb3JlLT5wcmV2X3NldF92b2x0YWdlID0gZmUwLT5kdmIuZnJvbnRlbmQtPm9wcy5zZXRfdm9sdGFnZTsKKwkJCWZlMC0+ZHZiLmZyb250ZW5kLT5vcHMuc2V0X3ZvbHRhZ2UgPSB0ZXZpaV9kdmJzX3NldF92b2x0YWdlOworCQl9CisJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXByaW50ayhLRVJOX0VSUiAiJXMvMjogVGhlIGZyb250ZW5kIG9mIHlvdXIgRFZCL0FUU0MgY2FyZCBpc24ndCBzdXBwb3J0ZWQgeWV0XG4iLAogCQkgICAgICAgY29yZS0+bmFtZSk7CiAJCWJyZWFrOwogCX0KLQlpZiAoTlVMTCA9PSBkZXYtPmR2Yi5mcm9udGVuZCkgeworCisgICAgICAgIGlmICggKE5VTEwgPT0gZmUwLT5kdmIuZnJvbnRlbmQpIHx8IChmZTEgJiYgTlVMTCA9PSBmZTEtPmR2Yi5mcm9udGVuZCkgKSB7CiAJCXByaW50ayhLRVJOX0VSUgogCQkgICAgICAgIiVzLzI6IGZyb250ZW5kIGluaXRpYWxpemF0aW9uIGZhaWxlZFxuIiwKIAkJICAgICAgIGNvcmUtPm5hbWUpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CisJLyogZGVmaW5lIGdlbmVyYWwtcHVycG9zZSBjYWxsYmFjayBwb2ludGVyICovCisJZmUwLT5kdmIuZnJvbnRlbmQtPmNhbGxiYWNrID0gY3g4OF90dW5lcl9jYWxsYmFjazsKIAogCS8qIEVuc3VyZSBhbGwgZnJvbnRlbmRzIG5lZ290aWF0ZSBidXMgYWNjZXNzICovCi0JZGV2LT5kdmIuZnJvbnRlbmQtPm9wcy50c19idXNfY3RybCA9IGN4ODhfZHZiX2J1c19jdHJsOworCWZlMC0+ZHZiLmZyb250ZW5kLT5vcHMudHNfYnVzX2N0cmwgPSBjeDg4X2R2Yl9idXNfY3RybDsKKwlpZiAoZmUxKQorCQlmZTEtPmR2Yi5mcm9udGVuZC0+b3BzLnRzX2J1c19jdHJsID0gY3g4OF9kdmJfYnVzX2N0cmw7CiAKIAkvKiBQdXQgdGhlIGFuYWxvZyBkZWNvZGVyIGluIHN0YW5kYnkgdG8ga2VlcCBpdCBxdWlldCAqLwogCWN4ODhfY2FsbF9pMmNfY2xpZW50cyhjb3JlLCBUVU5FUl9TRVRfU1RBTkRCWSwgTlVMTCk7CiAKIAkvKiByZWdpc3RlciBldmVyeXRoaW5nICovCi0JcmV0dXJuIHZpZGVvYnVmX2R2Yl9yZWdpc3RlcigmZGV2LT5kdmIsIFRISVNfTU9EVUxFLCBkZXYsCi0JCQkJICAgICAmZGV2LT5wY2ktPmRldiwgYWRhcHRlcl9ucik7CisJcmV0dXJuIHZpZGVvYnVmX2R2Yl9yZWdpc3Rlcl9idXMoJmRldi0+ZnJvbnRlbmRzLCBUSElTX01PRFVMRSwgZGV2LAorCQkmZGV2LT5wY2ktPmRldiwgYWRhcHRlcl9uciwgbWZlX3NoYXJlZCk7CiAKIGZyb250ZW5kX2RldGFjaDoKLQlpZiAoZGV2LT5kdmIuZnJvbnRlbmQpIHsKLQkJZHZiX2Zyb250ZW5kX2RldGFjaChkZXYtPmR2Yi5mcm9udGVuZCk7Ci0JCWRldi0+ZHZiLmZyb250ZW5kID0gTlVMTDsKKwlpZiAoZmUwLT5kdmIuZnJvbnRlbmQpIHsKKwkJZHZiX2Zyb250ZW5kX2RldGFjaChmZTAtPmR2Yi5mcm9udGVuZCk7CisJCWZlMC0+ZHZiLmZyb250ZW5kID0gTlVMTDsKIAl9CiAJcmV0dXJuIC1FSU5WQUw7CiB9CkBAIC05MzMsNiArMTEzNiwzOCBAQAogCQljeF9jbGVhcihNT19HUDBfSU8sIDB4MDAwMDAwMDQpOwogCQl1ZGVsYXkoMTAwMCk7CiAJCWJyZWFrOworCisJY2FzZSBDWDg4X0JPQVJEX0hBVVBQQVVHRV9IVlIzMDAwOgorCWNhc2UgQ1g4OF9CT0FSRF9IQVVQUEFVR0VfSFZSNDAwMDoKKwkJaWYoY29yZS0+ZHZiZGV2LT5mcm9udGVuZHMuYWN0aXZlX2ZlX2lkID09IDEpIHsKKwkJCS8qIERWQi1TL1MyIEVuYWJsZWQgKi8KKworCQkJLyogVG9nZ2xlIHJlc2V0IG9uIGN4MjI3MDIgbGVhdmluZyBpMmMgYWN0aXZlICovCisJCQljeF93cml0ZShNT19HUDBfSU8sIChjb3JlLT5ib2FyZC5pbnB1dFswXS5ncGlvMCAmIDB4MDAwMGZmMDApIHwgMHgwMDAwMDA4MCk7CisJCQl1ZGVsYXkoMTAwMCk7CisJCQljeF9jbGVhcihNT19HUDBfSU8sIDB4MDAwMDAwODApOworCQkJdWRlbGF5KDUwKTsKKwkJCWN4X3NldChNT19HUDBfSU8sIDB4MDAwMDAwODApOyAvKiBjeDIyNzAyIG91dCBvZiByZXNldCAqLworCQkJY3hfc2V0KE1PX0dQMF9JTywgMHgwMDAwMDAwNCk7IC8qIHRyaS1zdGF0ZSB0aGUgY3gyMjcwMiBwaW5zICovCisJCQl1ZGVsYXkoMTAwMCk7CisKKwkJCWN4X3dyaXRlKE1PX1NSU1RfSU8sIDEpOyAvKiBUYWtlIHRoZSBjeDI0MTE2L2N4MjQxMjMgb3V0IG9mIHJlc2V0ICovCisJCQljb3JlLT5kdmJkZXYtPnRzX2dlbl9jbnRybCA9IDB4MDI7IC8qIFBhcmFsbGVsIElPICovCisJCX0gZWxzZQorCQlpZiAoY29yZS0+ZHZiZGV2LT5mcm9udGVuZHMuYWN0aXZlX2ZlX2lkID09IDIpIHsKKwkJCS8qIERWQi1UIEVuYWJsZWQgKi8KKworCQkJLyogUHV0IHRoZSBjeDI0MTE2L2N4MjQxMjMgaW50byByZXNldCAqLworCQkJY3hfd3JpdGUoTU9fU1JTVF9JTywgMCk7CisKKwkJCS8qIGN4MjI3MDIgb3V0IG9mIHJlc2V0IGFuZCBlbmFibGUgaXQgKi8KKwkJCWN4X3NldChNT19HUDBfSU8sICAgMHgwMDAwMDA4MCk7CisJCQljeF9jbGVhcihNT19HUDBfSU8sIDB4MDAwMDAwMDQpOworCQkJY29yZS0+ZHZiZGV2LT50c19nZW5fY250cmwgPSAweDBjOyAvKiBTZXJpYWwgSU8gKi8KKwkJCXVkZWxheSgxMDAwKTsKKwkJfQorCQlicmVhazsKKwogCWRlZmF1bHQ6CiAJCWVyciA9IC1FTk9ERVY7CiAJfQpAQCAtOTUwLDYgKzExODUsOSBAQAogCWNhc2UgQ1g4OF9CT0FSRF9IQVVQUEFVR0VfSFZSMTMwMDoKIAkJLyogRG8gTm90aGluZywgbGVhdmUgdGhlIGN4MjI3MDIgb24gdGhlIGJ1cy4gKi8KIAkJYnJlYWs7CisJY2FzZSBDWDg4X0JPQVJEX0hBVVBQQVVHRV9IVlIzMDAwOgorCWNhc2UgQ1g4OF9CT0FSRF9IQVVQUEFVR0VfSFZSNDAwMDoKKwkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJZXJyID0gLUVOT0RFVjsKIAl9CkBAIC05NjAsNyArMTE5OCw4IEBACiB7CiAJc3RydWN0IGN4ODhfY29yZSAqY29yZSA9IGRydi0+Y29yZTsKIAlzdHJ1Y3QgY3g4ODAyX2RldiAqZGV2ID0gZHJ2LT5jb3JlLT5kdmJkZXY7Ci0JaW50IGVycjsKKwlpbnQgZXJyLCBpOworCXN0cnVjdCB2aWRlb2J1Zl9kdmJfZnJvbnRlbmQgKmZlOwogCiAJZHByaW50ayggMSwgIiVzXG4iLCBfX2Z1bmNfXyk7CiAJZHByaW50ayggMSwgIiAtPmJlaW5nIHByb2JlZCBieSBDYXJkPSVkIE5hbWU9JXMsIFBDSSAlMDJ4OiUwMnhcbiIsCkBAIC05ODAsMTggKzEyMTksMjggQEAKIAogCS8qIGR2YiBzdHVmZiAqLwogCXByaW50ayhLRVJOX0lORk8gIiVzLzI6IGN4MjM4OHggYmFzZWQgRFZCL0FUU0MgY2FyZFxuIiwgY29yZS0+bmFtZSk7Ci0JdmlkZW9idWZfcXVldWVfc2dfaW5pdCgmZGV2LT5kdmIuZHZicSwgJmR2Yl9xb3BzLAorCWRldi0+dHNfZ2VuX2NudHJsID0gMHgwYzsKKworCWZvciAoaSA9IDE7IGkgPD0gY29yZS0+Ym9hcmQubnVtX2Zyb250ZW5kczsgaSsrKSB7CisJCWZlID0gdmlkZW9idWZfZHZiX2dldF9mcm9udGVuZCgmY29yZS0+ZHZiZGV2LT5mcm9udGVuZHMsIGkpOworCQlpZiAoIWZlKSB7CisJCQlwcmludGsoS0VSTl9FUlIgIiVzKCkgZmFpbGVkIHRvIGdldCBmcm9udGVuZCglZClcbiIsIF9fZnVuY19fLCBpKTsKKwkJCWNvbnRpbnVlOworCQl9CisJCXZpZGVvYnVmX3F1ZXVlX3NnX2luaXQoJmZlLT5kdmIuZHZicSwgJmR2Yl9xb3BzLAogCQkJICAgICZkZXYtPnBjaS0+ZGV2LCAmZGV2LT5zbG9jaywKIAkJCSAgICBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUsCiAJCQkgICAgVjRMMl9GSUVMRF9UT1AsCiAJCQkgICAgc2l6ZW9mKHN0cnVjdCBjeDg4X2J1ZmZlciksCiAJCQkgICAgZGV2KTsKKwkJLyogaW5pdCBzdHJ1Y3QgdmlkZW9idWZfZHZiICovCisJCWZlLT5kdmIubmFtZSA9IGRldi0+Y29yZS0+bmFtZTsKKwl9CiAJZXJyID0gZHZiX3JlZ2lzdGVyKGRldik7CiAJaWYgKGVyciAhPSAwKQogCQlwcmludGsoS0VSTl9FUlIgIiVzLzI6IGR2Yl9yZWdpc3RlciBmYWlsZWQgKGVyciA9ICVkKVxuIiwKIAkJICAgICAgIGNvcmUtPm5hbWUsIGVycik7Ci0KLSBmYWlsX2NvcmU6CitmYWlsX2NvcmU6CiAJcmV0dXJuIGVycjsKIH0KIApAQCAtOTk5LDkgKzEyNDgsNyBAQAogewogCXN0cnVjdCBjeDg4MDJfZGV2ICpkZXYgPSBkcnYtPmNvcmUtPmR2YmRldjsKIAotCS8qIGR2YiAqLwotCWlmIChkZXYtPmR2Yi5mcm9udGVuZCkKLQkJdmlkZW9idWZfZHZiX3VucmVnaXN0ZXIoJmRldi0+ZHZiKTsKKwl2aWRlb2J1Zl9kdmJfdW5yZWdpc3Rlcl9idXMoJmRldi0+ZnJvbnRlbmRzKTsKIAogCXZwMzA1NF9pMmNfcmVtb3ZlKGRldik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWkyYy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtaTJjLmMKaW5kZXggZDc0MDZhOS4uMDFkZTIzMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtaTJjLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtaTJjLmMKQEAgLTExNiwxOCArMTE2LDI1IEBACiAKIHZvaWQgY3g4OF9jYWxsX2kyY19jbGllbnRzKHN0cnVjdCBjeDg4X2NvcmUgKmNvcmUsIHVuc2lnbmVkIGludCBjbWQsIHZvaWQgKmFyZykKIHsKKwlzdHJ1Y3QgdmlkZW9idWZfZHZiX2Zyb250ZW5kcyAqZiA9ICZjb3JlLT5kdmJkZXYtPmZyb250ZW5kczsKKwlzdHJ1Y3QgdmlkZW9idWZfZHZiX2Zyb250ZW5kICpmZSA9IE5VTEw7CiAJaWYgKDAgIT0gY29yZS0+aTJjX3JjKQogCQlyZXR1cm47CiAKICNpZiBkZWZpbmVkKENPTkZJR19WSURFT19DWDg4X0RWQikgfHwgZGVmaW5lZChDT05GSUdfVklERU9fQ1g4OF9EVkJfTU9EVUxFKQotCWlmICggKGNvcmUtPmR2YmRldikgJiYgKGNvcmUtPmR2YmRldi0+ZHZiLmZyb250ZW5kKSApIHsKLQkJaWYgKGNvcmUtPmR2YmRldi0+ZHZiLmZyb250ZW5kLT5vcHMuaTJjX2dhdGVfY3RybCkKLQkJCWNvcmUtPmR2YmRldi0+ZHZiLmZyb250ZW5kLT5vcHMuaTJjX2dhdGVfY3RybChjb3JlLT5kdmJkZXYtPmR2Yi5mcm9udGVuZCwgMSk7CisJaWYgKGNvcmUtPmR2YmRldiAmJiBmKSB7CisJCWlmKGYtPmdhdGUgPD0gMSkgLyogdW5kZWZpbmVkIG9yIGZlMCAqLworCQkJZmUgPSB2aWRlb2J1Zl9kdmJfZ2V0X2Zyb250ZW5kKGYsIDEpOworCQllbHNlCisJCQlmZSA9IHZpZGVvYnVmX2R2Yl9nZXRfZnJvbnRlbmQoZiwgZi0+Z2F0ZSk7CisKKwkJaWYgKGZlICYmIGZlLT5kdmIuZnJvbnRlbmQgJiYgZmUtPmR2Yi5mcm9udGVuZC0+b3BzLmkyY19nYXRlX2N0cmwpCisJCQlmZS0+ZHZiLmZyb250ZW5kLT5vcHMuaTJjX2dhdGVfY3RybChmZS0+ZHZiLmZyb250ZW5kLCAxKTsKIAogCQlpMmNfY2xpZW50c19jb21tYW5kKCZjb3JlLT5pMmNfYWRhcCwgY21kLCBhcmcpOwogCi0JCWlmIChjb3JlLT5kdmJkZXYtPmR2Yi5mcm9udGVuZC0+b3BzLmkyY19nYXRlX2N0cmwpCi0JCQljb3JlLT5kdmJkZXYtPmR2Yi5mcm9udGVuZC0+b3BzLmkyY19nYXRlX2N0cmwoY29yZS0+ZHZiZGV2LT5kdmIuZnJvbnRlbmQsIDApOworCQlpZiAoZmUgJiYgZmUtPmR2Yi5mcm9udGVuZCAmJiBmZS0+ZHZiLmZyb250ZW5kLT5vcHMuaTJjX2dhdGVfY3RybCkKKwkJCWZlLT5kdmIuZnJvbnRlbmQtPm9wcy5pMmNfZ2F0ZV9jdHJsKGZlLT5kdmIuZnJvbnRlbmQsIDApOwogCX0gZWxzZQogI2VuZGlmCiAJCWkyY19jbGllbnRzX2NvbW1hbmQoJmNvcmUtPmkyY19hZGFwLCBjbWQsIGFyZyk7CkBAIC0yMDEsNyArMjA4LDIzIEBACiAKIAljb3JlLT5pMmNfcmMgPSBpMmNfYml0X2FkZF9idXMoJmNvcmUtPmkyY19hZGFwKTsKIAlpZiAoMCA9PSBjb3JlLT5pMmNfcmMpIHsKKwkJc3RhdGljIHU4IHR1bmVyX2RhdGFbXSA9CisJCQl7IDB4MGIsIDB4ZGMsIDB4ODYsIDB4NTIgfTsKKwkJc3RhdGljIHN0cnVjdCBpMmNfbXNnIHR1bmVyX21zZyA9CisJCQl7IC5mbGFncyA9IDAsIC5hZGRyID0gMHhjMiA+PiAxLCAuYnVmID0gdHVuZXJfZGF0YSwgLmxlbiA9IDQgfTsKKwogCQlkcHJpbnRrKDEsICJpMmMgcmVnaXN0ZXIgb2tcbiIpOworCQlzd2l0Y2goIGNvcmUtPmJvYXJkbnIgKSB7CisJCQljYXNlIENYODhfQk9BUkRfSEFVUFBBVUdFX0hWUjEzMDA6CisJCQljYXNlIENYODhfQk9BUkRfSEFVUFBBVUdFX0hWUjMwMDA6CisJCQljYXNlIENYODhfQk9BUkRfSEFVUFBBVUdFX0hWUjQwMDA6CisJCQkJcHJpbnRrKCIlczogaTJjIGluaXQ6IGVuYWJsaW5nIGFuYWxvZyBkZW1vZCBvbiBIVlIxMzAwLzMwMDAvNDAwMCB0dW5lclxuIiwKKwkJCQkJY29yZS0+bmFtZSk7CisJCQkJaTJjX3RyYW5zZmVyKGNvcmUtPmkyY19jbGllbnQuYWRhcHRlciwgJnR1bmVyX21zZywgMSk7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCWJyZWFrOworCQl9CiAJCWlmIChpMmNfc2NhbikKIAkJCWRvX2kyY19zY2FuKGNvcmUtPm5hbWUsJmNvcmUtPmkyY19jbGllbnQpOwogCX0gZWxzZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtaW5wdXQuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWlucHV0LmMKaW5kZXggNTM1MjZkOS4uODY4M2QxMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtaW5wdXQuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1pbnB1dC5jCkBAIC0yMjQsNiArMjI0LDggQEAKIAljYXNlIENYODhfQk9BUkRfSEFVUFBBVUdFX05PVkFTUExVU19TMToKIAljYXNlIENYODhfQk9BUkRfSEFVUFBBVUdFX0hWUjExMDA6CiAJY2FzZSBDWDg4X0JPQVJEX0hBVVBQQVVHRV9IVlIzMDAwOgorCWNhc2UgQ1g4OF9CT0FSRF9IQVVQUEFVR0VfSFZSNDAwMDoKKwljYXNlIENYODhfQk9BUkRfSEFVUFBBVUdFX0hWUjQwMDBMSVRFOgogCQlpcl9jb2RlcyA9IGlyX2NvZGVzX2hhdXBwYXVnZV9uZXc7CiAJCWlyX3R5cGUgPSBJUl9UWVBFX1JDNTsKIAkJaXItPnNhbXBsaW5nID0gMTsKQEAgLTI1OSw2ICsyNjEsNyBAQAogCQlpci0+cG9sbGluZyA9IDE7IC8qIG1zICovCiAJCWJyZWFrOwogCWNhc2UgQ1g4OF9CT0FSRF9QUk9MSU5LX1BWXzgwMDBHVDoKKwljYXNlIENYODhfQk9BUkRfUFJPTElOS19QVl9HTE9CQUxfWFRSRU1FOgogCQlpcl9jb2RlcyA9IGlyX2NvZGVzX3BpeGVsdmlld19uZXc7CiAJCWlyLT5ncGlvX2FkZHIgPSBNT19HUDFfSU87CiAJCWlyLT5tYXNrX2tleWNvZGUgPSAweDNmOwpAQCAtMzkyLDcgKzM5NSw3IEBACiB7CiAJc3RydWN0IGN4ODhfSVIgKmlyID0gY29yZS0+aXI7CiAJdTMyIHNhbXBsZXMsIGlyY29kZTsKLQlpbnQgaTsKKwlpbnQgaSwgc3RhcnQsIHJhbmdlLCB0b2dnbGUsIGRldiwgY29kZTsKIAogCWlmIChOVUxMID09IGlyKQogCQlyZXR1cm47CkBAIC00NjEsNiArNDY0LDM0IEBACiAJY2FzZSBDWDg4X0JPQVJEX0hBVVBQQVVHRV9OT1ZBU1BMVVNfUzE6CiAJY2FzZSBDWDg4X0JPQVJEX0hBVVBQQVVHRV9IVlIxMTAwOgogCWNhc2UgQ1g4OF9CT0FSRF9IQVVQUEFVR0VfSFZSMzAwMDoKKwljYXNlIENYODhfQk9BUkRfSEFVUFBBVUdFX0hWUjQwMDA6CisJY2FzZSBDWDg4X0JPQVJEX0hBVVBQQVVHRV9IVlI0MDAwTElURToKKwkJaXJjb2RlID0gaXJfZGVjb2RlX2JpcGhhc2UoaXItPnNhbXBsZXMsIGlyLT5zY291bnQsIDUsIDcpOworCQlpcl9kcHJpbnRrKCJiaXBoYXNlIGRlY29kZWQ6ICV4XG4iLCBpcmNvZGUpOworCQkvKgorCQkgKiBSQzUgaGFzIGFuIGV4dGVuc2lvbiBiaXQgd2hpY2ggYWRkcyBhIG5ldyByYW5nZQorCQkgKiBvZiBhdmFpbGFibGUgY29kZXMsIHRoaXMgaXMgZGV0ZWN0ZWQgaGVyZS4gQWxzbworCQkgKiBoYXVwcGF1Z2UgcmVtb3RlcyAoYmxhY2svc2lsdmVyKSBhbHdheXMgdXNlCisJCSAqIHNwZWNpZmljIGRldmljZSBpZHMuIElmIHdlIGRvIG5vdCBmaWx0ZXIgdGhlCisJCSAqIGRldmljZSBpZHMgdGhlbiBtZXNzYWdlcyBkZXN0aW5lZCBmb3IgZGV2aWNlcworCQkgKiBzdWNoIGFzIFRWcyAoaWQ9MCkgd2lsbCBnZXQgdGhyb3VnaCB0byB0aGUKKwkJICogZGV2aWNlIGNhdXNpbmcgbWlzLWZpcmVkIGV2ZW50cy4KKwkJICovCisJCS8qIHNwbGl0IHJjNSBkYXRhIGJsb2NrIC4uLiAqLworCQlzdGFydCA9IChpcmNvZGUgJiAweDIwMDApID4+IDEzOworCQlyYW5nZSA9IChpcmNvZGUgJiAweDEwMDApID4+IDEyOworCQl0b2dnbGU9IChpcmNvZGUgJiAweDA4MDApID4+IDExOworCQlkZXYgICA9IChpcmNvZGUgJiAweDA3YzApID4+IDY7CisJCWNvZGUgID0gKGlyY29kZSAmIDB4MDAzZikgfCAoKHJhbmdlIDw8IDYpIF4gMHgwMDQwKTsKKwkJaWYoIHN0YXJ0ICE9IDEpCisJCQkvKiBubyBrZXkgcHJlc3NlZCAqLworCQkJYnJlYWs7CisJCWlmICggZGV2ICE9IDB4MWUgJiYgZGV2ICE9IDB4MWYgKQorCQkJLyogbm90IGEgaGF1cHBhdWdlIHJlbW90ZSAqLworCQkJYnJlYWs7CisJCWlyX2lucHV0X2tleWRvd24oaXItPmlucHV0LCAmaXItPmlyLCBjb2RlLCBpcmNvZGUpOworCQlpci0+cmVsZWFzZSA9IGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKDEyMCk7CisJCWJyZWFrOwogCWNhc2UgQ1g4OF9CT0FSRF9QSU5OQUNMRV9QQ1RWX0hEXzgwMGk6CiAJCWlyY29kZSA9IGlyX2RlY29kZV9iaXBoYXNlKGlyLT5zYW1wbGVzLCBpci0+c2NvdW50LCA1LCA3KTsKIAkJaXJfZHByaW50aygiYmlwaGFzZSBkZWNvZGVkOiAleFxuIiwgaXJjb2RlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LW1wZWcuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LW1wZWcuYwppbmRleCBhNmIwNjFjLi42ZGY1Y2YzIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1tcGVnLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtbXBlZy5jCkBAIC03NjgsNyArNzY4LDggQEAKIHsKIAlzdHJ1Y3QgY3g4ODAyX2RldiAqZGV2OwogCXN0cnVjdCBjeDg4X2NvcmUgICpjb3JlOwotCWludCBlcnI7CisJc3RydWN0IHZpZGVvYnVmX2R2Yl9mcm9udGVuZCAqZGVtb2Q7CisJaW50IGVycixpOwogCiAJLyogZ2VuZXJhbCBzZXR1cCAqLwogCWNvcmUgPSBjeDg4X2NvcmVfZ2V0KHBjaV9kZXYpOwpAQCAtNzgxLDYgKzc4MiwxMSBAQAogCWlmICghY29yZS0+Ym9hcmQubXBlZykKIAkJZ290byBmYWlsX2NvcmU7CiAKKwlpZiAoIWNvcmUtPmJvYXJkLm51bV9mcm9udGVuZHMpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlcygpIC5udW1fZnJvbnRlbmRzIHNob3VsZCBiZSBub24temVybywgZXJyID0gJWRcbiIsIF9fZnVuY19fLCBlcnIpOworCQlnb3RvIGZhaWxfY29yZTsKKwl9CisKIAllcnIgPSAtRU5PTUVNOwogCWRldiA9IGt6YWxsb2Moc2l6ZW9mKCpkZXYpLEdGUF9LRVJORUwpOwogCWlmIChOVUxMID09IGRldikKQEAgLTc5NSw2ICs4MDEsMjAgQEAKIAlJTklUX0xJU1RfSEVBRCgmZGV2LT5kcnZsaXN0KTsKIAlsaXN0X2FkZF90YWlsKCZkZXYtPmRldmxpc3QsJmN4ODgwMl9kZXZsaXN0KTsKIAorCW11dGV4X2luaXQoJmRldi0+ZnJvbnRlbmRzLmxvY2spOworCUlOSVRfTElTVF9IRUFEKCZkZXYtPmZyb250ZW5kcy5mZWxpc3QpOworCisJcHJpbnRrKEtFUk5fSU5GTyAiJXMoKSBhbGxvY2F0aW5nICVkIGZyb250ZW5kKHMpXG4iLCBfX2Z1bmNfXywgY29yZS0+Ym9hcmQubnVtX2Zyb250ZW5kcyk7CisKKwlmb3IgKGkgPSAxOyBpIDw9IGNvcmUtPmJvYXJkLm51bV9mcm9udGVuZHM7IGkrKykgeworCQlkZW1vZCA9IHZpZGVvYnVmX2R2Yl9hbGxvY19mcm9udGVuZCgmZGV2LT5mcm9udGVuZHMsIGkpOworCQlpZihkZW1vZCA9PSBOVUxMKSB7CisJCQlwcmludGsoS0VSTl9FUlIgIiVzKCkgZmFpbGVkIHRvIGFsbG9jXG4iLCBfX2Z1bmNfXyk7CisJCQllcnIgPSAtRU5PTUVNOworCQkJZ290byBmYWlsX2ZyZWU7CisJCX0KKwl9CisKIAkvKiBNYWludGFpbiBhIHJlZmVyZW5jZSBzbyBjeDg4LXZpZGVvIGNhbiBxdWVyeSB0aGUgODgwMiBkZXZpY2UuICovCiAJY29yZS0+ZHZiZGV2ID0gZGV2OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC10dmF1ZGlvLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC10dmF1ZGlvLmMKaW5kZXggM2ExOTc3Zi4uN2RkNTA2YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtdHZhdWRpby5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LXR2YXVkaW8uYwpAQCAtNzY3LDYgKzc2NywxNCBAQAogCWNhc2UgV1dfRk06CiAJCXNldF9hdWRpb19zdGFuZGFyZF9GTShjb3JlLCByYWRpb19kZWVtcGhhc2lzKTsKIAkJYnJlYWs7CisJY2FzZSBXV19JMlNBREM6CisJCXNldF9hdWRpb19zdGFydChjb3JlLCAweDAxKTsKKwkJLyogU2xhdmUvUGhpbGlwcy9BdXRvYmF1ZCAqLworCQljeF93cml0ZShBVURfSTJTSU5QVVRDTlRMLCAwKTsKKwkJLyogU3dpdGNoIHRvICJJMlMgQURDIG1vZGUiICovCisJCWN4X3dyaXRlKEFVRF9JMlNDTlRMLCAweDEpOworCQlzZXRfYXVkaW9fZmluaXNoKGNvcmUsIEVOX0kyU0lOX0VOQUJMRSk7CisJCWJyZWFrOwogCWNhc2UgV1dfTk9ORToKIAlkZWZhdWx0OgogCQlwcmludGsoIiVzLzA6IHVua25vd24gdHYgYXVkaW8gbW9kZSBbJWRdXG4iLApAQCAtODk1LDYgKzkwMyw5IEBACiAJCQlicmVhazsKIAkJfQogCQlicmVhazsKKwljYXNlIFdXX0kyU0FEQzoKKwkJLyogRE8gTk9USElORyAqLworCQlicmVhazsKIAl9CiAKIAlpZiAoVU5TRVQgIT0gY3RsKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC12aWRlby5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtdmlkZW8uYwppbmRleCBlZjRkNTZlLi4zOTA0YjczIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC12aWRlby5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LXZpZGVvLmMKQEAgLTQyNiwyNCArNDI2LDcgQEAKIAogCS8qIGlmIHRoZXJlIGFyZSBhdWRpb3JvdXRlcyBkZWZpbmVkLCB3ZSBoYXZlIGFuIGV4dGVybmFsCiAJICAgQURDIHRvIGRlYWwgd2l0aCBhdWRpbyAqLwotCiAJaWYgKElOUFVUKGlucHV0KS5hdWRpb3JvdXRlKSB7Ci0KLQkJLyogY3gyMzg4J3MgQy1BREMgaXMgY29ubmVjdGVkIHRvIHRoZSB0dW5lciBvbmx5LgotCQkgICBXaGVuIHVzZWQgd2l0aCBTLVZpZGVvLCB0aGF0IEFEQyBpcyBidXN5IGRlYWxpbmcgd2l0aAotCQkgICBjaHJvbWEsIHNvIGFuIGV4dGVybmFsIG11c3QgYmUgdXNlZCBmb3IgYmFzZWJhbmQgYXVkaW8gKi8KLQotCQlpZiAoSU5QVVQoaW5wdXQpLnR5cGUgIT0gQ1g4OF9WTVVYX1RFTEVWSVNJT04gJiYKLQkJCUlOUFVUKGlucHV0KS50eXBlICE9IENYODhfUkFESU8pIHsKLQkJCS8qICJBREMgbW9kZSIgKi8KLQkJCWN4X3dyaXRlKEFVRF9JMlNDTlRMLCAweDEpOwotCQkJY3hfc2V0KEFVRF9DVEwsIEVOX0kyU0lOX0VOQUJMRSk7Ci0JCX0gZWxzZSB7Ci0JCQkvKiBOb3JtYWwgbW9kZSAqLwotCQkJY3hfd3JpdGUoQVVEX0kyU0NOVEwsIDB4MCk7Ci0JCQljeF9jbGVhcihBVURfQ1RMLCBFTl9JMlNJTl9FTkFCTEUpOwotCQl9Ci0KIAkJLyogVGhlIHdtODc3NSBtb2R1bGUgaGFzIHRoZSAiMiIgcm91dGUgaGFyZHdpcmVkIGludG8KIAkJICAgdGhlIGluaXRpYWxpemF0aW9uLiBTb21lIGJvYXJkcyBtYXkgdXNlIGRpZmZlcmVudAogCQkgICByb3V0ZXMgZm9yIGRpZmZlcmVudCBpbnB1dHMuIEhWUi0xMzAwIHN1cmVseSBkb2VzICovCkBAIC00NTQsOSArNDM3LDE5IEBACiAJCQlyb3V0ZS5pbnB1dCA9IElOUFVUKGlucHV0KS5hdWRpb3JvdXRlOwogCQkJY3g4OF9jYWxsX2kyY19jbGllbnRzKGNvcmUsCiAJCQkJVklESU9DX0lOVF9TX0FVRElPX1JPVVRJTkcsICZyb3V0ZSk7Ci0KIAkJfQotCisJCS8qIGN4MjM4OCdzIEMtQURDIGlzIGNvbm5lY3RlZCB0byB0aGUgdHVuZXIgb25seS4KKwkJICAgV2hlbiB1c2VkIHdpdGggUy1WaWRlbywgdGhhdCBBREMgaXMgYnVzeSBkZWFsaW5nIHdpdGgKKwkJICAgY2hyb21hLCBzbyBhbiBleHRlcm5hbCBtdXN0IGJlIHVzZWQgZm9yIGJhc2ViYW5kIGF1ZGlvICovCisJCWlmIChJTlBVVChpbnB1dCkudHlwZSAhPSBDWDg4X1ZNVVhfVEVMRVZJU0lPTiApIHsKKwkJCS8qICJJMlMgQURDIG1vZGUiICovCisJCQljb3JlLT50dmF1ZGlvID0gV1dfSTJTQURDOworCQkJY3g4OF9zZXRfdHZhdWRpbyhjb3JlKTsKKwkJfSBlbHNlIHsKKwkJCS8qIE5vcm1hbCBtb2RlICovCisJCQljeF93cml0ZShBVURfSTJTQ05UTCwgMHgwKTsKKwkJCWN4X2NsZWFyKEFVRF9DVEwsIEVOX0kyU0lOX0VOQUJMRSk7CisJCX0KIAl9CiAKIAlyZXR1cm4gMDsKQEAgLTc3Myw2ICs3NjYsNyBAQAogCWVudW0gdjRsMl9idWZfdHlwZSB0eXBlID0gMDsKIAlpbnQgcmFkaW8gPSAwOwogCisJbG9ja19rZXJuZWwoKTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGgsICZjeDg4MDBfZGV2bGlzdCwgZGV2bGlzdCkgewogCQlpZiAoaC0+dmlkZW9fZGV2LT5taW5vciA9PSBtaW5vcikgewogCQkJZGV2ICA9IGg7CkBAIC03ODgsOCArNzgyLDEwIEBACiAJCQlkZXYgICA9IGg7CiAJCX0KIAl9Ci0JaWYgKE5VTEwgPT0gZGV2KQorCWlmIChOVUxMID09IGRldikgeworCQl1bmxvY2tfa2VybmVsKCk7CiAJCXJldHVybiAtRU5PREVWOworCX0KIAogCWNvcmUgPSBkZXYtPmNvcmU7CiAKQEAgLTc5OCw4ICs3OTQsMTAgQEAKIAogCS8qIGFsbG9jYXRlICsgaW5pdGlhbGl6ZSBwZXIgZmlsZWhhbmRsZSBkYXRhICovCiAJZmggPSBremFsbG9jKHNpemVvZigqZmgpLEdGUF9LRVJORUwpOwotCWlmIChOVUxMID09IGZoKQorCWlmIChOVUxMID09IGZoKSB7CisJCXVubG9ja19rZXJuZWwoKTsKIAkJcmV0dXJuIC1FTk9NRU07CisJfQogCWZpbGUtPnByaXZhdGVfZGF0YSA9IGZoOwogCWZoLT5kZXYgICAgICA9IGRldjsKIAlmaC0+cmFkaW8gICAgPSByYWRpbzsKQEAgLTgyNywxMSArODI1LDI5IEBACiAJCWN4X3dyaXRlKE1PX0dQMF9JTywgY29yZS0+Ym9hcmQucmFkaW8uZ3BpbzApOwogCQljeF93cml0ZShNT19HUDFfSU8sIGNvcmUtPmJvYXJkLnJhZGlvLmdwaW8xKTsKIAkJY3hfd3JpdGUoTU9fR1AyX0lPLCBjb3JlLT5ib2FyZC5yYWRpby5ncGlvMik7Ci0JCWNvcmUtPnR2YXVkaW8gPSBXV19GTTsKLQkJY3g4OF9zZXRfdHZhdWRpbyhjb3JlKTsKLQkJY3g4OF9zZXRfc3RlcmVvKGNvcmUsVjRMMl9UVU5FUl9NT0RFX1NURVJFTywxKTsKKwkJaWYgKGNvcmUtPmJvYXJkLnJhZGlvLmF1ZGlvcm91dGUpIHsKKwkJCWlmKGNvcmUtPmJvYXJkLmF1ZGlvX2NoaXAgJiYKKwkJCQljb3JlLT5ib2FyZC5hdWRpb19jaGlwID09IFY0TDJfSURFTlRfV004Nzc1KSB7CisJCQkJc3RydWN0IHY0bDJfcm91dGluZyByb3V0ZTsKKworCQkJCXJvdXRlLmlucHV0ID0gY29yZS0+Ym9hcmQucmFkaW8uYXVkaW9yb3V0ZTsKKwkJCQljeDg4X2NhbGxfaTJjX2NsaWVudHMoY29yZSwKKwkJCQkJVklESU9DX0lOVF9TX0FVRElPX1JPVVRJTkcsICZyb3V0ZSk7CisJCQl9CisJCQkvKiAiSTJTIEFEQyBtb2RlIiAqLworCQkJY29yZS0+dHZhdWRpbyA9IFdXX0kyU0FEQzsKKwkJCWN4ODhfc2V0X3R2YXVkaW8oY29yZSk7CisJCX0gZWxzZSB7CisJCQkvKiBGTSBNb2RlICovCisJCQljb3JlLT50dmF1ZGlvID0gV1dfRk07CisJCQljeDg4X3NldF90dmF1ZGlvKGNvcmUpOworCQkJY3g4OF9zZXRfc3RlcmVvKGNvcmUsVjRMMl9UVU5FUl9NT0RFX1NURVJFTywxKTsKKwkJfQogCQljeDg4X2NhbGxfaTJjX2NsaWVudHMoY29yZSxBVURDX1NFVF9SQURJTyxOVUxMKTsKIAl9CisJdW5sb2NrX2tlcm5lbCgpOworCisJYXRvbWljX2luYygmY29yZS0+dXNlcnMpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC05MjAsNyArOTM2LDggQEAKIAlmaWxlLT5wcml2YXRlX2RhdGEgPSBOVUxMOwogCWtmcmVlKGZoKTsKIAotCWN4ODhfY2FsbF9pMmNfY2xpZW50cyAoZGV2LT5jb3JlLCBUVU5FUl9TRVRfU1RBTkRCWSwgTlVMTCk7CisJaWYoYXRvbWljX2RlY19hbmRfdGVzdCgmZGV2LT5jb3JlLT51c2VycykpCisJCWN4ODhfY2FsbF9pMmNfY2xpZW50cyAoZGV2LT5jb3JlLCBUVU5FUl9TRVRfU1RBTkRCWSwgTlVMTCk7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC5oCmluZGV4IDU0ZmU2NTAuLjc2MjA3YzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODguaApAQCAtMjIxLDYgKzIyMSwxNCBAQAogI2RlZmluZSBDWDg4X0JPQVJEX0RWSUNPX0ZVU0lPTkhEVFZfN19HT0xEIDY1CiAjZGVmaW5lIENYODhfQk9BUkRfUFJPTElOS19QVl84MDAwR1QgICAgICAgNjYKICNkZWZpbmUgQ1g4OF9CT0FSRF9LV09STERfQVRTQ18xMjAgICAgICAgICA2NworI2RlZmluZSBDWDg4X0JPQVJEX0hBVVBQQVVHRV9IVlI0MDAwICAgICAgIDY4CisjZGVmaW5lIENYODhfQk9BUkRfSEFVUFBBVUdFX0hWUjQwMDBMSVRFICAgNjkKKyNkZWZpbmUgQ1g4OF9CT0FSRF9URVZJSV9TNDYwICAgICAgICAgICAgICA3MAorI2RlZmluZSBDWDg4X0JPQVJEX09NSUNPTV9TUzRfUENJICAgICAgICAgIDcxCisjZGVmaW5lIENYODhfQk9BUkRfVEJTXzg5MjAgICAgICAgICAgICAgICAgNzIKKyNkZWZpbmUgQ1g4OF9CT0FSRF9URVZJSV9TNDIwICAgICAgICAgICAgICA3MworI2RlZmluZSBDWDg4X0JPQVJEX1BST0xJTktfUFZfR0xPQkFMX1hUUkVNRSA3NAorI2RlZmluZSBDWDg4X0JPQVJEX1BST0ZfNzMwMCAgICAgICAgICAgICAgIDc1CiAKIGVudW0gY3g4OF9pdHlwZSB7CiAJQ1g4OF9WTVVYX0NPTVBPU0lURTEgPSAxLApAQCAtMjM5LDcgKzI0Nyw3IEBACiAJZW51bSBjeDg4X2l0eXBlIHR5cGU7CiAJdTMyICAgICAgICAgICAgIGdwaW8wLCBncGlvMSwgZ3BpbzIsIGdwaW8zOwogCXVuc2lnbmVkIGludCAgICB2bXV4OjI7Ci0JdW5zaWduZWQgaW50ICAgIGF1ZGlvcm91dGU6MjsKKwl1bnNpZ25lZCBpbnQgICAgYXVkaW9yb3V0ZTo0OwogfTsKIAogc3RydWN0IGN4ODhfYm9hcmQgewpAQCAtMjUzLDYgKzI2MSw3IEBACiAJc3RydWN0IGN4ODhfaW5wdXQgICAgICAgcmFkaW87CiAJZW51bSBjeDg4X2JvYXJkX3R5cGUgICAgbXBlZzsKIAl1bnNpZ25lZCBpbnQgICAgICAgICAgICBhdWRpb19jaGlwOworCWludAkJCW51bV9mcm9udGVuZHM7CiB9OwogCiBzdHJ1Y3QgY3g4OF9zdWJpZCB7CkBAIC0zNDIsMTEgKzM1MSwxMyBAQAogCXN0cnVjdCBtdXRleCAgICAgICAgICAgICAgIGxvY2s7CiAJLyogdmFyaW91cyB2NGwgY29udHJvbHMgKi8KIAl1MzIgICAgICAgICAgICAgICAgICAgICAgICBmcmVxOworCWF0b21pY190CQkgICB1c2VyczsKIAogCS8qIGN4ODgtdmlkZW8gbmVlZHMgdG8gYWNjZXNzIGN4ODgwMiBmb3IgaHlicmlkIHR1bmVyIHBsbCBhY2Nlc3MuICovCiAJc3RydWN0IGN4ODgwMl9kZXYgICAgICAgICAgKmR2YmRldjsKIAllbnVtIGN4ODhfYm9hcmRfdHlwZSAgICAgICBhY3RpdmVfdHlwZV9pZDsKIAlpbnQJCQkgICBhY3RpdmVfcmVmOworCWludAkJCSAgIGFjdGl2ZV9mZV9pZDsKIH07CiAKIHN0cnVjdCBjeDg4MDBfZGV2OwpAQCAtNDgxLDcgKzQ5Miw3IEBACiAKICNpZiBkZWZpbmVkKENPTkZJR19WSURFT19DWDg4X0RWQikgfHwgZGVmaW5lZChDT05GSUdfVklERU9fQ1g4OF9EVkJfTU9EVUxFKQogCS8qIGZvciBkdmIgb25seSAqLwotCXN0cnVjdCB2aWRlb2J1Zl9kdmIgICAgICAgIGR2YjsKKwlzdHJ1Y3QgdmlkZW9idWZfZHZiX2Zyb250ZW5kcyBmcm9udGVuZHM7CiAjZW5kaWYKIAogI2lmIGRlZmluZWQoQ09ORklHX1ZJREVPX0NYODhfVlAzMDU0KSB8fCBcCkBAIC02MDEsNyArNjEyLDcgQEAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAvKiBjeDg4LWNhcmRzLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogCi1leHRlcm4gaW50IGN4ODhfdHVuZXJfY2FsbGJhY2sodm9pZCAqZGV2LCBpbnQgY29tbWFuZCwgaW50IGFyZyk7CitleHRlcm4gaW50IGN4ODhfdHVuZXJfY2FsbGJhY2sodm9pZCAqZGV2LCBpbnQgY29tcG9uZW50LCBpbnQgY29tbWFuZCwgaW50IGFyZyk7CiBleHRlcm4gaW50IGN4ODhfZ2V0X3Jlc291cmNlcyhjb25zdCBzdHJ1Y3QgY3g4OF9jb3JlICpjb3JlLAogCQkJICAgICAgc3RydWN0IHBjaV9kZXYgKnBjaSk7CiBleHRlcm4gc3RydWN0IGN4ODhfY29yZSAqY3g4OF9jb3JlX2NyZWF0ZShzdHJ1Y3QgcGNpX2RldiAqcGNpLCBpbnQgbnIpOwpAQCAtNjE5LDYgKzYzMCw3IEBACiAjZGVmaW5lIFdXX0VJQUoJCSA3CiAjZGVmaW5lIFdXX0kyU1BUCSA4CiAjZGVmaW5lIFdXX0ZNCQkgOQorI2RlZmluZSBXV19JMlNBREMJIDEwCiAKIHZvaWQgY3g4OF9zZXRfdHZhdWRpbyhzdHJ1Y3QgY3g4OF9jb3JlICpjb3JlKTsKIHZvaWQgY3g4OF9uZXdzdGF0aW9uKHN0cnVjdCBjeDg4X2NvcmUgKmNvcmUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9kYWJ1c2IuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZGFidXNiLmMKaW5kZXggNzlmYWVkZjUuLjI5ODgxMGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZGFidXNiLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9kYWJ1c2IuYwpAQCAtMTkyLDcgKzE5Miw3IEBACiAJCQkJCWVycigiZGFidXNiX2lzb19jb21wbGV0ZTogaW52YWxpZCBsZW4gJWQiLCBsZW4pOwogCQkJfQogCQkJZWxzZQotCQkJCXdhcm4oImRhYnVzYl9pc29fY29tcGxldGU6IGNvcnJ1cHRlZCBwYWNrZXQgc3RhdHVzOiAlZCIsIHB1cmItPmlzb19mcmFtZV9kZXNjW2ldLnN0YXR1cyk7CisJCQkJZGV2X3dhcm4oJnB1cmItPmRldi0+ZGV2LCAiZGFidXNiX2lzb19jb21wbGV0ZTogY29ycnVwdGVkIHBhY2tldCBzdGF0dXM6ICVkXG4iLCBwdXJiLT5pc29fZnJhbWVfZGVzY1tpXS5zdGF0dXMpOwogCQlpZiAoZHN0ICE9IHB1cmItPmFjdHVhbF9sZW5ndGgpCiAJCQllcnIoImRzdCE9cHVyYi0+YWN0dWFsX2xlbmd0aDolZCE9JWQiLCBkc3QsIHB1cmItPmFjdHVhbF9sZW5ndGgpOwogCX0KQEAgLTI4OSw3ICsyODksNyBAQAogCX0KIAogCWlmKCByZXQgPT0gLUVQSVBFICkgewotCQl3YXJuKCJDTEVBUl9GRUFUVVJFIHJlcXVlc3QgdG8gcmVtb3ZlIFNUQUxMIGNvbmRpdGlvbi4iKTsKKwkJZGV2X3dhcm4oJnMtPnVzYmRldi0+ZGV2LCAiQ0xFQVJfRkVBVFVSRSByZXF1ZXN0IHRvIHJlbW92ZSBTVEFMTCBjb25kaXRpb24uXG4iKTsKIAkJaWYodXNiX2NsZWFyX2hhbHQocy0+dXNiZGV2LCB1c2JfcGlwZWVuZHBvaW50KHBpcGUpKSkKIAkJCWVycigicmVxdWVzdCBmYWlsZWQiKTsKIAl9CkBAIC04NjYsNyArODY2LDggQEAKIAogCWRiZygiZGFidXNiX2luaXQ6IGRyaXZlciByZWdpc3RlcmVkIik7CiAKLQlpbmZvKERSSVZFUl9WRVJTSU9OICI6IiBEUklWRVJfREVTQyk7CisJcHJpbnRrKEtFUk5fSU5GTyBLQlVJTERfTU9ETkFNRSAiOiAiIERSSVZFUl9WRVJTSU9OICI6IgorCSAgICAgICBEUklWRVJfREVTQyAiXG4iKTsKIAogb3V0OgogCXJldHVybiByZXR2YWw7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2RwYzcxNDYuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZHBjNzE0Ni5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4OGQ2ZGY3Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZHBjNzE0Ni5jCisrKyAvZGV2L251bGwKQEAgLTEsNDA4ICswLDAgQEAKLS8qCi0gICAgZHBjNzE0Ni5jIC0gdjRsMiBkcml2ZXIgZm9yIHRoZSBkcGM3MTQ2IGRlbW9uc3RyYXRpb24gYm9hcmQKLQotICAgIENvcHlyaWdodCAoQykgMjAwMC0yMDAzIE1pY2hhZWwgSHVub2xkIDxtaWNoYWVsQG1paHUuZGU+Ci0KLSAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotCi0gICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQotICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAgICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KLSovCi0KLSNkZWZpbmUgREVCVUdfVkFSSUFCTEUgZGVidWcKLQotI2luY2x1ZGUgPG1lZGlhL3NhYTcxNDZfdnYuaD4KLSNpbmNsdWRlIDxsaW51eC92aWRlb19kZWNvZGVyLmg+CS8qIGZvciBzYWE3MTExYSAqLwotCi0jZGVmaW5lIEkyQ19TQUE3MTExQSAgICAgICAgICAgIDB4MjQKLQotLyogQWxsIHVudXNlZCBieXRlcyBhcmUgcmVzZXJ2ZXJkLiAqLwotI2RlZmluZSBTQUE3MTFYX0NISVBfVkVSU0lPTiAgICAgICAgICAgIDB4MDAKLSNkZWZpbmUgU0FBNzExWF9BTkFMT0dfSU5QVVRfQ09OVFJPTF8xICAweDAyCi0jZGVmaW5lIFNBQTcxMVhfQU5BTE9HX0lOUFVUX0NPTlRST0xfMiAgMHgwMwotI2RlZmluZSBTQUE3MTFYX0FOQUxPR19JTlBVVF9DT05UUk9MXzMgIDB4MDQKLSNkZWZpbmUgU0FBNzExWF9BTkFMT0dfSU5QVVRfQ09OVFJPTF80ICAweDA1Ci0jZGVmaW5lIFNBQTcxMVhfSE9SSVpPTlRBTF9TWU5DX1NUQVJUICAgMHgwNgotI2RlZmluZSBTQUE3MTFYX0hPUklaT05UQUxfU1lOQ19TVE9QICAgIDB4MDcKLSNkZWZpbmUgU0FBNzExWF9TWU5DX0NPTlRST0wgICAgICAgICAgICAweDA4Ci0jZGVmaW5lIFNBQTcxMVhfTFVNSU5BTkNFX0NPTlRST0wgICAgICAgMHgwOQotI2RlZmluZSBTQUE3MTFYX0xVTUlOQU5DRV9CUklHSFRORVNTICAgIDB4MEEKLSNkZWZpbmUgU0FBNzExWF9MVU1JTkFOQ0VfQ09OVFJBU1QgICAgICAweDBCCi0jZGVmaW5lIFNBQTcxMVhfQ0hST01BX1NBVFVSQVRJT04gICAgICAgMHgwQwotI2RlZmluZSBTQUE3MTFYX0NIUk9NQV9IVUVfQ09OVFJPTCAgICAgIDB4MEQKLSNkZWZpbmUgU0FBNzExWF9DSFJPTUFfQ09OVFJPTCAgICAgICAgICAweDBFCi0jZGVmaW5lIFNBQTcxMVhfRk9STUFUX0RFTEFZX0NPTlRST0wgICAgMHgxMAotI2RlZmluZSBTQUE3MTFYX09VVFBVVF9DT05UUk9MXzEgICAgICAgIDB4MTEKLSNkZWZpbmUgU0FBNzExWF9PVVRQVVRfQ09OVFJPTF8yICAgICAgICAweDEyCi0jZGVmaW5lIFNBQTcxMVhfT1VUUFVUX0NPTlRST0xfMyAgICAgICAgMHgxMwotI2RlZmluZSBTQUE3MTFYX1ZfR0FURV8xX1NUQVJUICAgICAgICAgIDB4MTUKLSNkZWZpbmUgU0FBNzExWF9WX0dBVEVfMV9TVE9QICAgICAgICAgICAweDE2Ci0jZGVmaW5lIFNBQTcxMVhfVl9HQVRFXzFfTVNCICAgICAgICAgICAgMHgxNwotI2RlZmluZSBTQUE3MTFYX1RFWFRfU0xJQ0VSX1NUQVRVUyAgICAgIDB4MUEKLSNkZWZpbmUgU0FBNzExWF9ERUNPREVEX0JZVEVTX09GX1RTXzEgICAweDFCCi0jZGVmaW5lIFNBQTcxMVhfREVDT0RFRF9CWVRFU19PRl9UU18yICAgMHgxQwotI2RlZmluZSBTQUE3MTFYX1NUQVRVU19CWVRFICAgICAgICAgICAgIDB4MUYKLQotI2RlZmluZSBEUENfQk9BUkRfQ0FOX0RPX1ZCSShkZXYpICAgKGRldi0+cmV2aXNpb24gIT0gMCkKLQotc3RhdGljIGludCBkZWJ1ZzsKLW1vZHVsZV9wYXJhbShkZWJ1ZywgaW50LCAwKTsKLU1PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJkZWJ1ZyB2ZXJib3NpdHkiKTsKLQotc3RhdGljIGludCBkcGNfbnVtOwotCi0jZGVmaW5lIERQQ19JTlBVVFMJMgotc3RhdGljIHN0cnVjdCB2NGwyX2lucHV0IGRwY19pbnB1dHNbRFBDX0lOUFVUU10gPSB7Ci0JeyAwLCAiUG9ydCBBIiwJVjRMMl9JTlBVVF9UWVBFX0NBTUVSQSwJMiwgMCwgVjRMMl9TVERfUEFMX0JHfFY0TDJfU1REX05UU0NfTSwgMCB9LAotCXsgMSwgIlBvcnQgQiIsCVY0TDJfSU5QVVRfVFlQRV9DQU1FUkEsCTIsIDAsIFY0TDJfU1REX1BBTF9CR3xWNEwyX1NURF9OVFNDX00sIDAgfSwKLX07Ci0KLSNkZWZpbmUgRFBDX0FVRElPUwkwCi0KLXN0YXRpYyBzdHJ1Y3Qgc2FhNzE0Nl9leHRlbnNpb25faW9jdGxzIGlvY3Rsc1tdID0gewotCXsgVklESU9DX0dfSU5QVVQsCVNBQTcxNDZfRVhDTFVTSVZFIH0sCi0JeyBWSURJT0NfU19JTlBVVCwJU0FBNzE0Nl9FWENMVVNJVkUgfSwKLQl7IFZJRElPQ19FTlVNSU5QVVQsIAlTQUE3MTQ2X0VYQ0xVU0lWRSB9LAotCXsgVklESU9DX1NfU1RELAkJU0FBNzE0Nl9BRlRFUiB9LAotCXsgMCwJCQkwIH0KLX07Ci0KLXN0cnVjdCBkcGMKLXsKLQlzdHJ1Y3QgdmlkZW9fZGV2aWNlCSp2aWRlb19kZXY7Ci0Jc3RydWN0IHZpZGVvX2RldmljZQkqdmJpX2RldjsKLQotCXN0cnVjdCBpMmNfYWRhcHRlcglpMmNfYWRhcHRlcjsKLQlzdHJ1Y3QgaTJjX2NsaWVudAkqc2FhNzExMWE7Ci0KLQlpbnQgY3VyX2lucHV0OwkvKiBjdXJyZW50IGlucHV0ICovCi19OwotCi1zdGF0aWMgaW50IGRwY19jaGVja19jbGllbnRzKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZGF0YSkKLXsKLQlzdHJ1Y3QgZHBjKiBkcGMgPSBkYXRhOwotCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSBpMmNfdmVyaWZ5X2NsaWVudChkZXYpOwotCi0JaWYoICFjbGllbnQgKQotCQlyZXR1cm4gMDsKLQotCWlmKCBJMkNfU0FBNzExMUEgPT0gY2xpZW50LT5hZGRyICkKLQkJZHBjLT5zYWE3MTExYSA9IGNsaWVudDsKLQotCXJldHVybiAwOwotfQotCi0vKiBmaXhtZTogYWRkIHZiaSBzdHVmZiBoZXJlICovCi1zdGF0aWMgaW50IGRwY19wcm9iZShzdHJ1Y3Qgc2FhNzE0Nl9kZXYqIGRldikKLXsKLQlzdHJ1Y3QgZHBjKiBkcGMgPSBOVUxMOwotCi0JZHBjID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGRwYyksIEdGUF9LRVJORUwpOwotCWlmKCBOVUxMID09IGRwYyApIHsKLQkJcHJpbnRrKCJkcGNfdjRsMi5vOiBkcGNfcHJvYmU6IG5vdCBlbm91Z2gga2VybmVsIG1lbW9yeS5cbiIpOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9Ci0KLQkvKiBGSVhNRTogZW5hYmxlIGkyYy1wb3J0IHBpbnMsIHZpZGVvLXBvcnQtcGlucwotCSAgIHZpZGVvIHBvcnQgcGlucyBzaG91bGQgYmUgZW5hYmxlZCBoZXJlID8hICovCi0Jc2FhNzE0Nl93cml0ZShkZXYsIE1DMSwgKE1BU0tfMDggfCBNQVNLXzI0IHwgTUFTS18xMCB8IE1BU0tfMjYpKTsKLQotCWRwYy0+aTJjX2FkYXB0ZXIgPSAoc3RydWN0IGkyY19hZGFwdGVyKSB7Ci0JCS5jbGFzcyA9IEkyQ19DTEFTU19UVl9BTkFMT0csCi0JCS5uYW1lID0gImRwYzcxNDYiLAotCX07Ci0Jc2FhNzE0Nl9pMmNfYWRhcHRlcl9wcmVwYXJlKGRldiwgJmRwYy0+aTJjX2FkYXB0ZXIsIFNBQTcxNDZfSTJDX0JVU19CSVRfUkFURV80ODApOwotCWlmKGkyY19hZGRfYWRhcHRlcigmZHBjLT5pMmNfYWRhcHRlcikgPCAwKSB7Ci0JCURFQl9TKCgiY2Fubm90IHJlZ2lzdGVyIGkyYy1kZXZpY2UuIHNraXBwaW5nLlxuIikpOwotCQlrZnJlZShkcGMpOwotCQlyZXR1cm4gLUVGQVVMVDsKLQl9Ci0KLQkvKiBsb29wIHRocm91Z2ggYWxsIGkyYy1kZXZpY2VzIG9uIHRoZSBidXMgYW5kIGxvb2sgd2hvIGlzIHRoZXJlICovCi0JZGV2aWNlX2Zvcl9lYWNoX2NoaWxkKCZkcGMtPmkyY19hZGFwdGVyLmRldiwgZHBjLCBkcGNfY2hlY2tfY2xpZW50cyk7Ci0KLQkvKiBjaGVjayBpZiBhbGwgZGV2aWNlcyBhcmUgcHJlc2VudCAqLwotCWlmICghZHBjLT5zYWE3MTExYSkgewotCQlERUJfRCgoImRwY192NGwyLm86IGRwY19hdHRhY2ggZmFpbGVkIGZvciB0aGlzIGRldmljZS5cbiIpKTsKLQkJaTJjX2RlbF9hZGFwdGVyKCZkcGMtPmkyY19hZGFwdGVyKTsKLQkJa2ZyZWUoZHBjKTsKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JfQotCi0JLyogYWxsIGRldmljZXMgYXJlIHByZXNlbnQsIHByb2JlIHdhcyBzdWNjZXNzZnVsICovCi0JREVCX0QoKCJkcGNfdjRsMi5vOiBkcGNfcHJvYmUgc3VjY2VlZGVkIGZvciB0aGlzIGRldmljZS5cbiIpKTsKLQotCS8qIHdlIHN0b3JlIHRoZSBwb2ludGVyIGluIG91ciBwcml2YXRlIGRhdGEgZmllbGQgKi8KLQlkZXYtPmV4dF9wcml2ID0gZHBjOwotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qIGJyaW5nIGhhcmR3YXJlIHRvIGEgc2FuZSBzdGF0ZS4gdGhpcyBoYXMgdG8gYmUgZG9uZSwganVzdCBpbiBjYXNlIHNvbWVvbmUKLSAgIHdhbnRzIHRvIGNhcHR1cmUgZnJvbSB0aGlzIGRldmljZSBiZWZvcmUgaXQgaGFzIGJlZW4gcHJvcGVybHkgaW5pdGlhbGl6ZWQuCi0gICB0aGUgY2FwdHVyZSBlbmdpbmUgd291bGQgYmFkbHkgZmFpbCwgYmVjYXVzZSBubyB2YWxpZCBzaWduYWwgYXJyaXZlcyBvbiB0aGUKLSAgIHNhYTcxNDYsIHRodXMgbGVhZGluZyB0byB0aW1lb3V0cyBhbmQgc3R1ZmYuICovCi1zdGF0aWMgaW50IGRwY19pbml0X2RvbmUoc3RydWN0IHNhYTcxNDZfZGV2KiBkZXYpCi17Ci0Jc3RydWN0IGRwYyogZHBjID0gKHN0cnVjdCBkcGMqKWRldi0+ZXh0X3ByaXY7Ci0KLQlERUJfRCgoImRwY192NGwyLm86IGRwY19pbml0X2RvbmUgY2FsbGVkLlxuIikpOwotCi0JLyogaW5pdGlhbGl6ZSB0aGUgaGVscGVyIGljcyB0byB1c2VmdWwgdmFsdWVzICovCi0JaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShkcGMtPnNhYTcxMTFhLCAweDAwLCAweDExKTsKLQotCWkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoZHBjLT5zYWE3MTExYSwgMHgwMiwgMHhjMCk7Ci0JaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShkcGMtPnNhYTcxMTFhLCAweDAzLCAweDMwKTsKLQlpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGRwYy0+c2FhNzExMWEsIDB4MDQsIDB4MDApOwotCWkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoZHBjLT5zYWE3MTExYSwgMHgwNSwgMHgwMCk7Ci0JaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShkcGMtPnNhYTcxMTFhLCAweDA2LCAweGRlKTsKLQlpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGRwYy0+c2FhNzExMWEsIDB4MDcsIDB4YWQpOwotCWkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoZHBjLT5zYWE3MTExYSwgMHgwOCwgMHhhOCk7Ci0JaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShkcGMtPnNhYTcxMTFhLCAweDA5LCAweDAwKTsKLQlpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGRwYy0+c2FhNzExMWEsIDB4MGEsIDB4ODApOwotCWkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoZHBjLT5zYWE3MTExYSwgMHgwYiwgMHg0Nyk7Ci0JaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShkcGMtPnNhYTcxMTFhLCAweDBjLCAweDQwKTsKLQlpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGRwYy0+c2FhNzExMWEsIDB4MGQsIDB4MDApOwotCWkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoZHBjLT5zYWE3MTExYSwgMHgwZSwgMHgwMyk7Ci0KLQlpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGRwYy0+c2FhNzExMWEsIDB4MTAsIDB4ZDApOwotCWkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoZHBjLT5zYWE3MTExYSwgMHgxMSwgMHgxYyk7Ci0JaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShkcGMtPnNhYTcxMTFhLCAweDEyLCAweGMxKTsKLQlpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGRwYy0+c2FhNzExMWEsIDB4MTMsIDB4MzApOwotCi0JaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShkcGMtPnNhYTcxMTFhLCAweDFmLCAweDgxKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgc3RydWN0IHNhYTcxNDZfZXh0X3Z2IHZ2X2RhdGE7Ci0KLS8qIHRoaXMgZnVuY3Rpb24gb25seSBnZXRzIGNhbGxlZCB3aGVuIHRoZSBwcm9iaW5nIHdhcyBzdWNjZXNzZnVsICovCi1zdGF0aWMgaW50IGRwY19hdHRhY2goc3RydWN0IHNhYTcxNDZfZGV2KiBkZXYsIHN0cnVjdCBzYWE3MTQ2X3BjaV9leHRlbnNpb25fZGF0YSAqaW5mbykKLXsKLQlzdHJ1Y3QgZHBjKiBkcGMgPSAoc3RydWN0IGRwYyopZGV2LT5leHRfcHJpdjsKLQotCURFQl9EKCgiZHBjX3Y0bDIubzogZHBjX2F0dGFjaCBjYWxsZWQuXG4iKSk7Ci0KLQkvKiBjaGVja2luZyBmb3IgaTJjLWRldmljZXMgY2FuIGJlIG9taXR0ZWQgaGVyZSwgYmVjYXVzZSB3ZQotCSAgIGFscmVhZHkgZGlkIHRoaXMgaW4gImRwY192bDQyX3Byb2JlIiAqLwotCi0Jc2FhNzE0Nl92dl9pbml0KGRldiwmdnZfZGF0YSk7Ci0JaWYoIDAgIT0gc2FhNzE0Nl9yZWdpc3Rlcl9kZXZpY2UoJmRwYy0+dmlkZW9fZGV2LCBkZXYsICJkcGMiLCBWRkxfVFlQRV9HUkFCQkVSKSkgewotCQlFUlIoKCJjYW5ub3QgcmVnaXN0ZXIgY2FwdHVyZSB2NGwyIGRldmljZS4gc2tpcHBpbmcuXG4iKSk7Ci0JCXJldHVybiAtMTsKLQl9Ci0KLQkvKiBpbml0aWFsaXphdGlvbiBzdHVmZiAodmJpKSAob25seSBmb3IgcmV2aXNpb24gPiAwIGFuZCBmb3IgZXh0ZW5zaW9ucyB3aGljaCB3YW50IGl0KSovCi0JaWYoIDAgIT0gRFBDX0JPQVJEX0NBTl9ET19WQkkoZGV2KSkgewotCQlpZiggMCAhPSBzYWE3MTQ2X3JlZ2lzdGVyX2RldmljZSgmZHBjLT52YmlfZGV2LCBkZXYsICJkcGMiLCBWRkxfVFlQRV9WQkkpKSB7Ci0JCQlFUlIoKCJjYW5ub3QgcmVnaXN0ZXIgdmJpIHY0bDIgZGV2aWNlLiBza2lwcGluZy5cbiIpKTsKLQkJfQotCX0KLQotCWkyY191c2VfY2xpZW50KGRwYy0+c2FhNzExMWEpOwotCi0JcHJpbnRrKCJkcGM6IGZvdW5kICdkcGM3MTQ2IGRlbW9uc3RyYXRpb24gYm9hcmQnLSVkLlxuIixkcGNfbnVtKTsKLQlkcGNfbnVtKys7Ci0KLQkvKiB0aGUgcmVzdCAqLwotCWRwYy0+Y3VyX2lucHV0ID0gMDsKLQlkcGNfaW5pdF9kb25lKGRldik7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBkcGNfZGV0YWNoKHN0cnVjdCBzYWE3MTQ2X2RldiogZGV2KQotewotCXN0cnVjdCBkcGMqIGRwYyA9IChzdHJ1Y3QgZHBjKilkZXYtPmV4dF9wcml2OwotCi0JREVCX0VFKCgiZGV2OiVwXG4iLGRldikpOwotCi0JaTJjX3JlbGVhc2VfY2xpZW50KGRwYy0+c2FhNzExMWEpOwotCi0Jc2FhNzE0Nl91bnJlZ2lzdGVyX2RldmljZSgmZHBjLT52aWRlb19kZXYsZGV2KTsKLQlpZiggMCAhPSBEUENfQk9BUkRfQ0FOX0RPX1ZCSShkZXYpKSB7Ci0JCXNhYTcxNDZfdW5yZWdpc3Rlcl9kZXZpY2UoJmRwYy0+dmJpX2RldixkZXYpOwotCX0KLQlzYWE3MTQ2X3Z2X3JlbGVhc2UoZGV2KTsKLQotCWRwY19udW0tLTsKLQotCWkyY19kZWxfYWRhcHRlcigmZHBjLT5pMmNfYWRhcHRlcik7Ci0Ja2ZyZWUoZHBjKTsKLQlyZXR1cm4gMDsKLX0KLQotI2lmZGVmIGF4YQotaW50IGRwY192YmlfYnlwYXNzKHN0cnVjdCBzYWE3MTQ2X2RldiogZGV2KQotewotCXN0cnVjdCBkcGMqIGRwYyA9IChzdHJ1Y3QgZHBjKilkZXYtPmV4dF9wcml2OwotCi0JaW50IGkgPSAxOwotCi0JLyogc3dpdGNoIGJ5cGFzcyBpbiBzYWE3MTExYSAqLwotCWlmICggMCAhPSBkcGMtPnNhYTcxMTFhLT5kcml2ZXItPmNvbW1hbmQoZHBjLT5zYWE3MTExYSxTQUE3MTFYX1ZCSV9CWVBBU1MsICZpKSkgewotCQlwcmludGsoImRwY192NGwyLm86IFZCSV9CWVBBU1M6IGNvdWxkIG5vdCBhZGRyZXNzIHNhYTcxMTFhLlxuIik7Ci0JCXJldHVybiAtMTsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLSNlbmRpZgotCi1zdGF0aWMgaW50IGRwY19pb2N0bChzdHJ1Y3Qgc2FhNzE0Nl9maCAqZmgsIHVuc2lnbmVkIGludCBjbWQsIHZvaWQgKmFyZykKLXsKLQlzdHJ1Y3Qgc2FhNzE0Nl9kZXYgKmRldiA9IGZoLT5kZXY7Ci0Jc3RydWN0IGRwYyogZHBjID0gKHN0cnVjdCBkcGMqKWRldi0+ZXh0X3ByaXY7Ci0vKgotCXN0cnVjdCBzYWE3MTQ2X3Z2ICp2diA9IGRldi0+dnZfZGF0YTsKLSovCi0Jc3dpdGNoKGNtZCkKLQl7Ci0JY2FzZSBWSURJT0NfRU5VTUlOUFVUOgotCXsKLQkJc3RydWN0IHY0bDJfaW5wdXQgKmkgPSBhcmc7Ci0JCURFQl9FRSgoIlZJRElPQ19FTlVNSU5QVVQgJWQuXG4iLGktPmluZGV4KSk7Ci0KLQkJaWYoIGktPmluZGV4IDwgMCB8fCBpLT5pbmRleCA+PSBEUENfSU5QVVRTKSB7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCi0JCW1lbWNweShpLCAmZHBjX2lucHV0c1tpLT5pbmRleF0sIHNpemVvZihzdHJ1Y3QgdjRsMl9pbnB1dCkpOwotCi0JCURFQl9EKCgiZHBjX3Y0bDIubzogdjRsMl9pb2N0bDogVklESU9DX0VOVU1JTlBVVCAlZC5cbiIsaS0+aW5kZXgpKTsKLQkJcmV0dXJuIDA7Ci0JfQotCWNhc2UgVklESU9DX0dfSU5QVVQ6Ci0JewotCQlpbnQgKmlucHV0ID0gKGludCAqKWFyZzsKLQkJKmlucHV0ID0gZHBjLT5jdXJfaW5wdXQ7Ci0KLQkJREVCX0QoKCJkcGNfdjRsMi5vOiBWSURJT0NfR19JTlBVVDogJWRcbiIsKmlucHV0KSk7Ci0JCXJldHVybiAwOwotCX0KLQljYXNlIFZJRElPQ19TX0lOUFVUOgotCXsKLQkJaW50CWlucHV0ID0gKihpbnQgKilhcmc7Ci0KLQkJaWYgKGlucHV0IDwgMCB8fCBpbnB1dCA+PSBEUENfSU5QVVRTKSB7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCi0JCWRwYy0+Y3VyX2lucHV0ID0gaW5wdXQ7Ci0KLQkJLyogZml4bWU6IHN3aXRjaCBpbnB1dCBoZXJlLCBzd2l0Y2ggYXVkaW8sIHRvbyEgKi8KLS8vCQlzYWE3MTQ2X3NldF9ocHNfc291cmNlX2FuZF9zeW5jKGRldiwgaW5wdXRfcG9ydF9zZWxlY3Rpb25baW5wdXRdLmhwc19zb3VyY2UsIGlucHV0X3BvcnRfc2VsZWN0aW9uW2lucHV0XS5ocHNfc3luYyk7Ci0JCXByaW50aygiZHBjX3Y0bDIubzogVklESU9DX1NfSU5QVVQ6IGZpeG1lIHN3aXRjaCBpbnB1dC5cbiIpOwotCi0JCXJldHVybiAwOwotCX0KLQlkZWZhdWx0OgotLyoKLQkJREVCX0QoKCJkcGNfdjRsMi5vOiB2NGwyX2lvY3RsIGRvZXMgbm90IGhhbmRsZSB0aGlzIGlvY3RsLlxuIikpOwotKi8KLQkJcmV0dXJuIC1FTk9JT0NUTENNRDsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgc3RkX2NhbGxiYWNrKHN0cnVjdCBzYWE3MTQ2X2RldiogZGV2LCBzdHJ1Y3Qgc2FhNzE0Nl9zdGFuZGFyZCAqc3RkKQotewotCXJldHVybiAwOwotfQotCi1zdGF0aWMgc3RydWN0IHNhYTcxNDZfc3RhbmRhcmQgc3RhbmRhcmRbXSA9IHsKLQl7Ci0JCS5uYW1lCT0gIlBBTCIsIAkuaWQJPSBWNEwyX1NURF9QQUwsCi0JCS52X29mZnNldAk9IDB4MTcsCS52X2ZpZWxkIAk9IDI4OCwKLQkJLmhfb2Zmc2V0CT0gMHgxNCwJLmhfcGl4ZWxzIAk9IDY4MCwKLQkJLnZfbWF4X291dAk9IDU3NiwJLmhfbWF4X291dAk9IDc2OCwKLQl9LCB7Ci0JCS5uYW1lCT0gIk5UU0MiLCAJLmlkCT0gVjRMMl9TVERfTlRTQywKLQkJLnZfb2Zmc2V0CT0gMHgxNiwJLnZfZmllbGQgCT0gMjQwLAotCQkuaF9vZmZzZXQJPSAweDA2LAkuaF9waXhlbHMgCT0gNzA4LAotCQkudl9tYXhfb3V0CT0gNDgwLAkuaF9tYXhfb3V0CT0gNjQwLAotCX0sIHsKLQkJLm5hbWUJPSAiU0VDQU0iLCAJLmlkCT0gVjRMMl9TVERfU0VDQU0sCi0JCS52X29mZnNldAk9IDB4MTQsCS52X2ZpZWxkIAk9IDI4OCwKLQkJLmhfb2Zmc2V0CT0gMHgxNCwJLmhfcGl4ZWxzIAk9IDcyMCwKLQkJLnZfbWF4X291dAk9IDU3NiwJLmhfbWF4X291dAk9IDc2OCwKLQl9Ci19OwotCi1zdGF0aWMgc3RydWN0IHNhYTcxNDZfZXh0ZW5zaW9uIGV4dGVuc2lvbjsKLQotc3RhdGljIHN0cnVjdCBzYWE3MTQ2X3BjaV9leHRlbnNpb25fZGF0YSBkcGMgPSB7Ci0JLmV4dF9wcml2ID0gIk11bHRpbWVkaWEgZVh0ZW5zaW9uIEJvYXJkIiwKLQkuZXh0ID0gJmV4dGVuc2lvbiwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBwY2lfdGJsW10gPSB7Ci0JewotCQkudmVuZG9yICAgID0gUENJX1ZFTkRPUl9JRF9QSElMSVBTLAotCQkuZGV2aWNlCSAgID0gUENJX0RFVklDRV9JRF9QSElMSVBTX1NBQTcxNDYsCi0JCS5zdWJ2ZW5kb3IgPSAweDAwMDAsCi0JCS5zdWJkZXZpY2UgPSAweDAwMDAsCi0JCS5kcml2ZXJfZGF0YSA9ICh1bnNpZ25lZCBsb25nKSZkcGMsCi0JfSwgewotCQkudmVuZG9yID0gMCwKLQl9Ci19OwotCi1NT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgcGNpX3RibCk7Ci0KLXN0YXRpYyBzdHJ1Y3Qgc2FhNzE0Nl9leHRfdnYgdnZfZGF0YSA9IHsKLQkuaW5wdXRzCQk9IERQQ19JTlBVVFMsCi0JLmNhcGFiaWxpdGllcwk9IFY0TDJfQ0FQX1ZCSV9DQVBUVVJFLAotCS5zdGRzCQk9ICZzdGFuZGFyZFswXSwKLQkubnVtX3N0ZHMJPSBzaXplb2Yoc3RhbmRhcmQpL3NpemVvZihzdHJ1Y3Qgc2FhNzE0Nl9zdGFuZGFyZCksCi0JLnN0ZF9jYWxsYmFjawk9ICZzdGRfY2FsbGJhY2ssCi0JLmlvY3RscwkJPSAmaW9jdGxzWzBdLAotCS5pb2N0bAkJPSBkcGNfaW9jdGwsCi19OwotCi1zdGF0aWMgc3RydWN0IHNhYTcxNDZfZXh0ZW5zaW9uIGV4dGVuc2lvbiA9IHsKLQkubmFtZQkJPSAiZHBjNzE0NiBkZW1vbnN0cmF0aW9uIGJvYXJkIiwKLQkuZmxhZ3MJCT0gU0FBNzE0Nl9VU0VfSTJDX0lSUSwKLQotCS5wY2lfdGJsCT0gJnBjaV90YmxbMF0sCi0JLm1vZHVsZQkJPSBUSElTX01PRFVMRSwKLQotCS5wcm9iZQkJPSBkcGNfcHJvYmUsCi0JLmF0dGFjaAkJPSBkcGNfYXR0YWNoLAotCS5kZXRhY2gJCT0gZHBjX2RldGFjaCwKLQotCS5pcnFfbWFzawk9IDAsCi0JLmlycV9mdW5jCT0gTlVMTCwKLX07Ci0KLXN0YXRpYyBpbnQgX19pbml0IGRwY19pbml0X21vZHVsZSh2b2lkKQotewotCWlmKCAwICE9IHNhYTcxNDZfcmVnaXN0ZXJfZXh0ZW5zaW9uKCZleHRlbnNpb24pKSB7Ci0JCURFQl9TKCgiZmFpbGVkIHRvIHJlZ2lzdGVyIGV4dGVuc2lvbi5cbiIpKTsKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fZXhpdCBkcGNfY2xlYW51cF9tb2R1bGUodm9pZCkKLXsKLQlzYWE3MTQ2X3VucmVnaXN0ZXJfZXh0ZW5zaW9uKCZleHRlbnNpb24pOwotfQotCi1tb2R1bGVfaW5pdChkcGNfaW5pdF9tb2R1bGUpOwotbW9kdWxlX2V4aXQoZHBjX2NsZWFudXBfbW9kdWxlKTsKLQotTU9EVUxFX0RFU0NSSVBUSU9OKCJ2aWRlbzRsaW51eC0yIGRyaXZlciBmb3IgdGhlICdkcGM3MTQ2IGRlbW9uc3RyYXRpb24gYm9hcmQnIik7Ci1NT0RVTEVfQVVUSE9SKCJNaWNoYWVsIEh1bm9sZCA8bWljaGFlbEBtaWh1LmRlPiIpOwotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LWNhcmRzLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHgtY2FyZHMuYwppbmRleCBkZTk0M2NmLi5kNjVkMDU3IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHgtY2FyZHMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHgtY2FyZHMuYwpAQCAtMTEwMSw3ICsxMTAxLDcgQEAKIAl7IFVTQl9ERVZJQ0UoMHhlYjFhLCAweDI4MjApLAogCQkJLmRyaXZlcl9pbmZvID0gRU0yODIwX0JPQVJEX1VOS05PV04gfSwKIAl7IFVTQl9ERVZJQ0UoMHhlYjFhLCAweDI4MjEpLAotCQkJLmRyaXZlcl9pbmZvID0gRU0yODIwX0JPQVJEX1VOS05PV04gfSwKKwkJCS5kcml2ZXJfaW5mbyA9IEVNMjgyMF9CT0FSRF9QUk9MSU5LX1BMQVlUVl9VU0IyIH0sCiAJeyBVU0JfREVWSUNFKDB4ZWIxYSwgMHgyODYwKSwKIAkJCS5kcml2ZXJfaW5mbyA9IEVNMjgyMF9CT0FSRF9VTktOT1dOIH0sCiAJeyBVU0JfREVWSUNFKDB4ZWIxYSwgMHgyODYxKSwKQEAgLTEyNzEsNyArMTI3MSw3IEBACiAJezB4MWJhNTAwODAsIEVNMjg2MF9CT0FSRF9QT0lOVE5JWF9JTlRSQU9SQUxfQ0FNRVJBLCBUVU5FUl9BQlNFTlR9LAogfTsKIAotaW50IGVtMjh4eF90dW5lcl9jYWxsYmFjayh2b2lkICpwdHIsIGludCBjb21tYW5kLCBpbnQgYXJnKQoraW50IGVtMjh4eF90dW5lcl9jYWxsYmFjayh2b2lkICpwdHIsIGludCBjb21wb25lbnQsIGludCBjb21tYW5kLCBpbnQgYXJnKQogewogCWludCByYyA9IDA7CiAJc3RydWN0IGVtMjh4eCAqZGV2ID0gcHRyOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LWR2Yi5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LWR2Yi5jCmluZGV4IGQyYjFhMWEuLmM5OWUyMzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC1kdmIuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHgtZHZiLmMKQEAgLTI0OSw3ICsyNDksNiBAQAogCW1lbXNldCgmY2ZnLCAwLCBzaXplb2YoY2ZnKSk7CiAJY2ZnLmkyY19hZGFwICA9ICZkZXYtPmkyY19hZGFwOwogCWNmZy5pMmNfYWRkciAgPSBhZGRyOwotCWNmZy5jYWxsYmFjayAgPSBlbTI4eHhfdHVuZXJfY2FsbGJhY2s7CiAKIAlpZiAoIWRldi0+ZHZiLT5mcm9udGVuZCkgewogCQlwcmludGsoS0VSTl9FUlIgIiVzLzI6IGR2YiBmcm9udGVuZCBub3QgYXR0YWNoZWQuICIKQEAgLTI3NCw3ICsyNzMsNyBAQAogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAotaW50IHJlZ2lzdGVyX2R2YihzdHJ1Y3QgZW0yOHh4X2R2YiAqZHZiLAorc3RhdGljIGludCByZWdpc3Rlcl9kdmIoc3RydWN0IGVtMjh4eF9kdmIgKmR2YiwKIAkJIHN0cnVjdCBtb2R1bGUgKm1vZHVsZSwKIAkJIHN0cnVjdCBlbTI4eHggKmRldiwKIAkJIHN0cnVjdCBkZXZpY2UgKmRldmljZSkKQEAgLTQyMiw2ICs0MjEsOCBAQAogCQl9CiAJCWJyZWFrOwogCWNhc2UgRU0yODgwX0JPQVJEX0hBVVBQQVVHRV9XSU5UVl9IVlJfOTAwOgorCWNhc2UgRU0yODgwX0JPQVJEX1RFUlJBVEVDX0hZQlJJRF9YUzoKKwljYXNlIEVNMjg4MF9CT0FSRF9LV09STERfRFZCXzMxMFU6CiAJCWR2Yi0+ZnJvbnRlbmQgPSBkdmJfYXR0YWNoKHpsMTAzNTNfYXR0YWNoLAogCQkJCQkgICAmZW0yOHh4X3psMTAzNTNfd2l0aF94YzMwMjgsCiAJCQkJCSAgICZkZXYtPmkyY19hZGFwKTsKQEAgLTQ0MywyNCArNDQ0LDYgQEAKIAkJfQogCQlicmVhazsKICNlbmRpZgotCWNhc2UgRU0yODgwX0JPQVJEX1RFUlJBVEVDX0hZQlJJRF9YUzoKLQkJZHZiLT5mcm9udGVuZCA9IGR2Yl9hdHRhY2goemwxMDM1M19hdHRhY2gsCi0JCQkJCQkmZW0yOHh4X3psMTAzNTNfd2l0aF94YzMwMjgsCi0JCQkJCQkmZGV2LT5pMmNfYWRhcCk7Ci0JCWlmIChhdHRhY2hfeGMzMDI4KDB4NjEsIGRldikgPCAwKSB7Ci0JCQkgcmVzdWx0ID0gLUVJTlZBTDsKLQkJCWdvdG8gb3V0X2ZyZWU7Ci0JCX0KLQkJYnJlYWs7Ci0JY2FzZSBFTTI4ODBfQk9BUkRfS1dPUkxEX0RWQl8zMTBVOgotCQlkdmItPmZyb250ZW5kID0gZHZiX2F0dGFjaCh6bDEwMzUzX2F0dGFjaCwKLQkJCQkJCSZlbTI4eHhfemwxMDM1M193aXRoX3hjMzAyOCwKLQkJCQkJCSZkZXYtPmkyY19hZGFwKTsKLQkJaWYgKGF0dGFjaF94YzMwMjgoMHg2MSwgZGV2KSA8IDApIHsKLQkJCXJlc3VsdCA9IC1FSU5WQUw7Ci0JCQlnb3RvIG91dF9mcmVlOwotCQl9Ci0JCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXByaW50ayhLRVJOX0VSUiAiJXMvMjogVGhlIGZyb250ZW5kIG9mIHlvdXIgRFZCL0FUU0MgY2FyZCIKIAkJCQkiIGlzbid0IHN1cHBvcnRlZCB5ZXRcbiIsCkBAIC00NzQsNiArNDU3LDggQEAKIAkJcmVzdWx0ID0gLUVJTlZBTDsKIAkJZ290byBvdXRfZnJlZTsKIAl9CisJLyogZGVmaW5lIGdlbmVyYWwtcHVycG9zZSBjYWxsYmFjayBwb2ludGVyICovCisJZHZiLT5mcm9udGVuZC0+Y2FsbGJhY2sgPSBlbTI4eHhfdHVuZXJfY2FsbGJhY2s7CiAKIAkvKiByZWdpc3RlciBldmVyeXRoaW5nICovCiAJcmVzdWx0ID0gcmVnaXN0ZXJfZHZiKGR2YiwgVEhJU19NT0RVTEUsIGRldiwgJmRldi0+dWRldi0+ZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC1pMmMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC1pMmMuYwppbmRleCA5Nzg1MzM4Li4zYmFiNTZiIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHgtaTJjLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LWkyYy5jCkBAIC0xNDMsMTAgKzE0MywxMSBAQAogCX0KIAlmb3IgKHdyaXRlX3RpbWVvdXQgPSBFTTI4MDBfSTJDX1dSSVRFX1RJTUVPVVQ7IHdyaXRlX3RpbWVvdXQgPiAwOwogCSAgICAgd3JpdGVfdGltZW91dCAtPSA1KSB7Ci0JCXVuc2lnbmVkIG1zZyA9IGRldi0+ZW0yOHh4X3JlYWRfcmVnKGRldiwgMHg1KTsKLQkJaWYgKG1zZyA9PSAweDk0KQorCQl1bnNpZ25lZCByZWcgPSBkZXYtPmVtMjh4eF9yZWFkX3JlZyhkZXYsIDB4NSk7CisKKwkJaWYgKHJlZyA9PSAweDk0KQogCQkJcmV0dXJuIC1FTk9ERVY7Ci0JCWVsc2UgaWYgKG1zZyA9PSAweDg0KQorCQllbHNlIGlmIChyZWcgPT0gMHg4NCkKIAkJCXJldHVybiAwOwogCQltc2xlZXAoNSk7CiAJfQpAQCAtMzM1LDggKzMzNiwxMSBAQAogCiAJLyogQ2hlY2sgaWYgYm9hcmQgaGFzIGVlcHJvbSAqLwogCWVyciA9IGkyY19tYXN0ZXJfcmVjdigmZGV2LT5pMmNfY2xpZW50LCAmYnVmLCAwKTsKLQlpZiAoZXJyIDwgMCkKLQkJcmV0dXJuIC0xOworCWlmIChlcnIgPCAwKSB7CisJCWVtMjh4eF9lcnJkZXYoIiVzOiBpMmNfbWFzdGVyX3JlY3YgZmFpbGVkISBlcnIgWyVkXVxuIiwKKwkJCV9fZnVuY19fLCBlcnIpOworCQlyZXR1cm4gZXJyOworCX0KIAogCWJ1ZiA9IDA7CiAKQEAgLTM0NCw3ICszNDgsNyBAQAogCWlmIChlcnIgIT0gMSkgewogCQlwcmludGsoS0VSTl9JTkZPICIlczogSHVoLCBubyBlZXByb20gcHJlc2VudCAoZXJyPSVkKT9cbiIsCiAJCSAgICAgICBkZXYtPm5hbWUsIGVycik7Ci0JCXJldHVybiAtMTsKKwkJcmV0dXJuIGVycjsKIAl9CiAJd2hpbGUgKHNpemUgPiAwKSB7CiAJCWlmIChzaXplID4gMTYpCkBAIC0zNTcsNyArMzYxLDcgQEAKIAkJCXByaW50ayhLRVJOX1dBUk5JTkcKIAkJCSAgICAgICAiJXM6IGkyYyBlZXByb20gcmVhZCBlcnJvciAoZXJyPSVkKVxuIiwKIAkJCSAgICAgICBkZXYtPm5hbWUsIGVycik7Ci0JCQlyZXR1cm4gLTE7CisJCQlyZXR1cm4gZXJyOwogCQl9CiAJCXNpemUgLT0gYmxvY2s7CiAJCXAgKz0gYmxvY2s7CkBAIC01ODUsMTggKzU4OSwzMSBAQAogICovCiBpbnQgZW0yOHh4X2kyY19yZWdpc3RlcihzdHJ1Y3QgZW0yOHh4ICpkZXYpCiB7CisJaW50IHJldHZhbDsKKwogCUJVR19PTighZGV2LT5lbTI4eHhfd3JpdGVfcmVncyB8fCAhZGV2LT5lbTI4eHhfcmVhZF9yZWcpOwogCUJVR19PTighZGV2LT5lbTI4eHhfd3JpdGVfcmVnc19yZXEgfHwgIWRldi0+ZW0yOHh4X3JlYWRfcmVnX3JlcSk7CiAJZGV2LT5pMmNfYWRhcCA9IGVtMjh4eF9hZGFwX3RlbXBsYXRlOwogCWRldi0+aTJjX2FkYXAuZGV2LnBhcmVudCA9ICZkZXYtPnVkZXYtPmRldjsKIAlzdHJjcHkoZGV2LT5pMmNfYWRhcC5uYW1lLCBkZXYtPm5hbWUpOwogCWRldi0+aTJjX2FkYXAuYWxnb19kYXRhID0gZGV2OwotCWkyY19hZGRfYWRhcHRlcigmZGV2LT5pMmNfYWRhcCk7CisKKwlyZXR2YWwgPSBpMmNfYWRkX2FkYXB0ZXIoJmRldi0+aTJjX2FkYXApOworCWlmIChyZXR2YWwgPCAwKSB7CisJCWVtMjh4eF9lcnJkZXYoIiVzOiBpMmNfYWRkX2FkYXB0ZXIgZmFpbGVkISByZXR2YWwgWyVkXVxuIiwKKwkJCV9fZnVuY19fLCByZXR2YWwpOworCQlyZXR1cm4gcmV0dmFsOworCX0KIAogCWRldi0+aTJjX2NsaWVudCA9IGVtMjh4eF9jbGllbnRfdGVtcGxhdGU7CiAJZGV2LT5pMmNfY2xpZW50LmFkYXB0ZXIgPSAmZGV2LT5pMmNfYWRhcDsKIAotCWVtMjh4eF9pMmNfZWVwcm9tKGRldiwgZGV2LT5lZWRhdGEsIHNpemVvZihkZXYtPmVlZGF0YSkpOworCXJldHZhbCA9IGVtMjh4eF9pMmNfZWVwcm9tKGRldiwgZGV2LT5lZWRhdGEsIHNpemVvZihkZXYtPmVlZGF0YSkpOworCWlmIChyZXR2YWwgPCAwKSB7CisJCWVtMjh4eF9lcnJkZXYoIiVzOiBlbTI4eHhfaTJfZWVwcm9tIGZhaWxlZCEgcmV0dmFsIFslZF1cbiIsCisJCQlfX2Z1bmNfXywgcmV0dmFsKTsKKwkJcmV0dXJuIHJldHZhbDsKKwl9CiAKIAlpZiAoaTJjX3NjYW4pCiAJCWVtMjh4eF9kb19pMmNfc2NhbihkZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LXZpZGVvLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHgtdmlkZW8uYwppbmRleCA0OWFiMDYyLi5jNTM2NDllNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LXZpZGVvLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LXZpZGVvLmMKQEAgLTUxMywxMCArNTEzLDE3IEBACiAgKi8KIHN0YXRpYyBpbnQgZW0yOHh4X2NvbmZpZyhzdHJ1Y3QgZW0yOHh4ICpkZXYpCiB7CisJaW50IHJldHZhbDsKIAogCS8qIFNldHMgSTJDIHNwZWVkIHRvIDEwMCBLSHogKi8KLQlpZiAoIWRldi0+aXNfZW0yODAwKQotCQllbTI4eHhfd3JpdGVfcmVnc19yZXEoZGV2LCAweDAwLCAweDA2LCAiXHg0MCIsIDEpOworCWlmICghZGV2LT5pc19lbTI4MDApIHsKKwkJcmV0dmFsID0gZW0yOHh4X3dyaXRlX3JlZ3NfcmVxKGRldiwgMHgwMCwgMHgwNiwgIlx4NDAiLCAxKTsKKwkJaWYgKHJldHZhbCA8IDApIHsKKwkJCWVtMjh4eF9lcnJkZXYoIiVzOiBlbTI4eHhfd3JpdGVfcmVnc19yZXEgZmFpbGVkISByZXR2YWwgWyVkXVxuIiwKKwkJCQlfX2Z1bmNfXywgcmV0dmFsKTsKKwkJCXJldHVybiByZXR2YWw7CisJCX0KKwl9CiAKIAkvKiBlbmFibGUgdmJpIGNhcHR1cmluZyAqLwogCkBAIC0xNTEyLDYgKzE1MTksNyBAQAogCXN0cnVjdCBlbTI4eHhfZmggKmZoOwogCWVudW0gdjRsMl9idWZfdHlwZSBmaF90eXBlID0gMDsKIAorCWxvY2tfa2VybmVsKCk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeShoLCAmZW0yOHh4X2Rldmxpc3QsIGRldmxpc3QpIHsKIAkJaWYgKGgtPnZkZXYtPm1pbm9yID09IG1pbm9yKSB7CiAJCQlkZXYgID0gaDsKQEAgLTE1MjcsOCArMTUzNSwxMCBAQAogCQkJZGV2ICAgPSBoOwogCQl9CiAJfQotCWlmIChOVUxMID09IGRldikKKwlpZiAoTlVMTCA9PSBkZXYpIHsKKwkJdW5sb2NrX2tlcm5lbCgpOwogCQlyZXR1cm4gLUVOT0RFVjsKKwl9CiAKIAllbTI4eHhfdmlkZW9kYmcoIm9wZW4gbWlub3I9JWQgdHlwZT0lcyB1c2Vycz0lZFxuIiwKIAkJCQltaW5vciwgdjRsMl90eXBlX25hbWVzW2ZoX3R5cGVdLCBkZXYtPnVzZXJzKTsKQEAgLTE1MzcsNiArMTU0Nyw3IEBACiAJZmggPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgZW0yOHh4X2ZoKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFmaCkgewogCQllbTI4eHhfZXJyZGV2KCJlbTI4eHgtdmlkZW8uYzogT3V0IG9mIG1lbW9yeT8hXG4iKTsKKwkJdW5sb2NrX2tlcm5lbCgpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAJbXV0ZXhfbG9jaygmZGV2LT5sb2NrKTsKQEAgLTE1NzMsNiArMTU4NCw3IEBACiAJCQlzaXplb2Yoc3RydWN0IGVtMjh4eF9idWZmZXIpLCBmaCk7CiAKIAltdXRleF91bmxvY2soJmRldi0+bG9jayk7CisJdW5sb2NrX2tlcm5lbCgpOwogCiAJcmV0dXJuIGVyckNvZGU7CiB9CkBAIC0xNTg4LDggKzE2MDAsNyBAQAogCS8qRklYTUU6IEkyQyBJUiBzaG91bGQgYmUgZGlzY29ubmVjdGVkICovCiAKIAllbTI4eHhfaW5mbygiVjRMMiBkZXZpY2VzIC9kZXYvdmlkZW8lZCBhbmQgL2Rldi92YmklZCBkZXJlZ2lzdGVyZWRcbiIsCi0JCQkJZGV2LT52ZGV2LT5taW5vci1NSU5PUl9WRkxfVFlQRV9HUkFCQkVSX01JTiwKLQkJCQlkZXYtPnZiaV9kZXYtPm1pbm9yLU1JTk9SX1ZGTF9UWVBFX1ZCSV9NSU4pOworCQkJCWRldi0+dmRldi0+bnVtLCBkZXYtPnZiaV9kZXYtPm51bSk7CiAJbGlzdF9kZWwoJmRldi0+ZGV2bGlzdCk7CiAJaWYgKGRldi0+c2J1dHRvbl9pbnB1dF9kZXYpCiAJCWVtMjh4eF9kZXJlZ2lzdGVyX3NuYXBzaG90X2J1dHRvbihkZXYpOwpAQCAtMTk0OCwxMyArMTk1OSwyMyBAQAogCX0KIAogCS8qIHJlZ2lzdGVyIGkyYyBidXMgKi8KLQllbTI4eHhfaTJjX3JlZ2lzdGVyKGRldik7CisJZXJyQ29kZSA9IGVtMjh4eF9pMmNfcmVnaXN0ZXIoZGV2KTsKKwlpZiAoZXJyQ29kZSA8IDApIHsKKwkJZW0yOHh4X2VycmRldigiJXM6IGVtMjh4eF9pMmNfcmVnaXN0ZXIgLSBlcnJDb2RlIFslZF0hXG4iLAorCQkJX19mdW5jX18sIGVyckNvZGUpOworCQlyZXR1cm4gZXJyQ29kZTsKKwl9CiAKIAkvKiBEbyBib2FyZCBzcGVjaWZpYyBpbml0IGFuZCBlZXByb20gcmVhZGluZyAqLwogCWVtMjh4eF9jYXJkX3NldHVwKGRldik7CiAKIAkvKiBDb25maWd1cmUgYXVkaW8gKi8KLQllbTI4eHhfYXVkaW9fYW5hbG9nX3NldChkZXYpOworCWVyckNvZGUgPSBlbTI4eHhfYXVkaW9fYW5hbG9nX3NldChkZXYpOworCWlmIChlcnJDb2RlIDwgMCkgeworCQllbTI4eHhfZXJyZGV2KCIlczogZW0yOHh4X2F1ZGlvX2FuYWxvZ19zZXQgLSBlcnJDb2RlIFslZF0hXG4iLAorCQkJX19mdW5jX18sIGVyckNvZGUpOworCQlyZXR1cm4gZXJyQ29kZTsKKwl9CiAKIAkvKiBjb25maWd1cmUgdGhlIGRldmljZSAqLwogCWVtMjh4eF9jb25maWdfaTJjKGRldik7CkBAIC0xOTc0LDYgKzE5OTUsMTEgQEAKIAlkZXYtPmN0bF9pbnB1dCA9IDI7CiAKIAllcnJDb2RlID0gZW0yOHh4X2NvbmZpZyhkZXYpOworCWlmIChlcnJDb2RlIDwgMCkgeworCQllbTI4eHhfZXJyZGV2KCIlczogZW0yOHh4X2NvbmZpZyAtIGVyckNvZGUgWyVkXSFcbiIsCisJCQlfX2Z1bmNfXywgZXJyQ29kZSk7CisJCXJldHVybiBlcnJDb2RlOworCX0KIAogCWxpc3RfYWRkX3RhaWwoJmRldi0+ZGV2bGlzdCwgJmVtMjh4eF9kZXZsaXN0KTsKIApAQCAtMjAyNiwxNyArMjA1MiwyNyBAQAogCiAJaWYgKGRldi0+aGFzX21zcDM0eHgpIHsKIAkJLyogU2VuZCBhIHJlc2V0IHRvIG90aGVyIGNoaXBzIHZpYSBncGlvICovCi0JCWVtMjh4eF93cml0ZV9yZWdzX3JlcShkZXYsIDB4MDAsIDB4MDgsICJceGY3IiwgMSk7CisJCWVyckNvZGUgPSBlbTI4eHhfd3JpdGVfcmVnc19yZXEoZGV2LCAweDAwLCAweDA4LCAiXHhmNyIsIDEpOworCQlpZiAoZXJyQ29kZSA8IDApIHsKKwkJCWVtMjh4eF9lcnJkZXYoIiVzOiBlbTI4eHhfd3JpdGVfcmVnc19yZXEgLSBtc3AzNHh4KDEpIGZhaWxlZCEgZXJyQ29kZSBbJWRdXG4iLAorCQkJCV9fZnVuY19fLCBlcnJDb2RlKTsKKwkJCXJldHVybiBlcnJDb2RlOworCQl9CiAJCW1zbGVlcCgzKTsKLQkJZW0yOHh4X3dyaXRlX3JlZ3NfcmVxKGRldiwgMHgwMCwgMHgwOCwgIlx4ZmYiLCAxKTsKKworCQllcnJDb2RlID0gZW0yOHh4X3dyaXRlX3JlZ3NfcmVxKGRldiwgMHgwMCwgMHgwOCwgIlx4ZmYiLCAxKTsKKwkJaWYgKGVyckNvZGUgPCAwKSB7CisJCQllbTI4eHhfZXJyZGV2KCIlczogZW0yOHh4X3dyaXRlX3JlZ3NfcmVxIC0gbXNwMzR4eCgyKSBmYWlsZWQhIGVyckNvZGUgWyVkXVxuIiwKKwkJCQlfX2Z1bmNfXywgZXJyQ29kZSk7CisJCQlyZXR1cm4gZXJyQ29kZTsKKwkJfQogCQltc2xlZXAoMyk7CiAJfQogCiAJdmlkZW9fbXV4KGRldiwgMCk7CiAKIAllbTI4eHhfaW5mbygiVjRMMiBkZXZpY2UgcmVnaXN0ZXJlZCBhcyAvZGV2L3ZpZGVvJWQgYW5kIC9kZXYvdmJpJWRcbiIsCi0JCQkJZGV2LT52ZGV2LT5taW5vci1NSU5PUl9WRkxfVFlQRV9HUkFCQkVSX01JTiwKLQkJCQlkZXYtPnZiaV9kZXYtPm1pbm9yLU1JTk9SX1ZGTF9UWVBFX1ZCSV9NSU4pOworCQkJCWRldi0+dmRldi0+bnVtLCBkZXYtPnZiaV9kZXYtPm51bSk7CiAKIAltdXRleF9sb2NrKCZlbTI4eHhfZXh0ZW5zaW9uX2Rldmxpc3RfbG9jayk7CiAJaWYgKCFsaXN0X2VtcHR5KCZlbTI4eHhfZXh0ZW5zaW9uX2Rldmxpc3QpKSB7CkBAIC0yMjM2LDcgKzIyNzIsNyBAQAogCQllbTI4eHhfd2FybgogCQkgICAgKCJkZXZpY2UgL2Rldi92aWRlbyVkIGlzIG9wZW4hIERlcmVnaXN0cmF0aW9uIGFuZCBtZW1vcnkgIgogCQkgICAgICJkZWFsbG9jYXRpb24gYXJlIGRlZmVycmVkIG9uIGNsb3NlLlxuIiwKLQkJCQlkZXYtPnZkZXYtPm1pbm9yLU1JTk9SX1ZGTF9UWVBFX0dSQUJCRVJfTUlOKTsKKwkJCQlkZXYtPnZkZXYtPm51bSk7CiAKIAkJZGV2LT5zdGF0ZSB8PSBERVZfTUlTQ09ORklHVVJFRDsKIAkJZW0yOHh4X3VuaW5pdF9pc29jKGRldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHguaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC5oCmluZGV4IDlhMzMxMDcuLjgyNzgxMTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC5oCkBAIC00MTEsOCArNDExLDggQEAKIAkvKiBmcmFtZSBwcm9wZXJ0aWVzICovCiAJaW50IHdpZHRoOwkJLyogY3VycmVudCBmcmFtZSB3aWR0aCAqLwogCWludCBoZWlnaHQ7CQkvKiBjdXJyZW50IGZyYW1lIGhlaWdodCAqLwotCWludCBoc2NhbGU7CQkvKiBob3Jpem9udGFsIHNjYWxlIGZhY3RvciAoc2VlIGRhdGFzaGVldCkgKi8KLQlpbnQgdnNjYWxlOwkJLyogdmVydGljYWwgc2NhbGUgZmFjdG9yIChzZWUgZGF0YXNoZWV0KSAqLworCXVuc2lnbmVkIGhzY2FsZTsJLyogaG9yaXpvbnRhbCBzY2FsZSBmYWN0b3IgKHNlZSBkYXRhc2hlZXQpICovCisJdW5zaWduZWQgdnNjYWxlOwkvKiB2ZXJ0aWNhbCBzY2FsZSBmYWN0b3IgKHNlZSBkYXRhc2hlZXQpICovCiAJaW50IGludGVybGFjZWQ7CQkvKiAxPWludGVybGFjZSBmaWxlZHMsIDA9anVzdCB0b3AgZmlsZWRzICovCiAJdW5zaWduZWQgaW50IHZpZGVvX2J5dGVzcmVhZDsJLyogTnVtYmVyIG9mIGJ5dGVzIHJlYWQgKi8KIApAQCAtNTI4LDcgKzUyOCw3IEBACiBleHRlcm4gc3RydWN0IHVzYl9kZXZpY2VfaWQgZW0yOHh4X2lkX3RhYmxlW107CiBleHRlcm4gY29uc3QgdW5zaWduZWQgaW50IGVtMjh4eF9iY291bnQ7CiB2b2lkIGVtMjh4eF9zZXRfaXIoc3RydWN0IGVtMjh4eCAqZGV2LCBzdHJ1Y3QgSVJfaTJjICppcik7Ci1pbnQgZW0yOHh4X3R1bmVyX2NhbGxiYWNrKHZvaWQgKnB0ciwgaW50IGNvbW1hbmQsIGludCBhcmcpOworaW50IGVtMjh4eF90dW5lcl9jYWxsYmFjayh2b2lkICpwdHIsIGludCBjb21wb25lbnQsIGludCBjb21tYW5kLCBpbnQgYXJnKTsKIAogLyogUHJvdmlkZWQgYnkgZW0yOHh4LWlucHV0LmMgKi8KIC8qIFRPRE86IENoZWNrIGlmIHRoZSBzdGFuZGFyZCBnZXRfa2V5IGhhbmRsZXJzIG9uIGlyLWNvbW1vbiBjYW4gYmUgdXNlZCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9ldDYxeDI1MS9ldDYxeDI1MV9jb3JlLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2V0NjF4MjUxL2V0NjF4MjUxX2NvcmUuYwppbmRleCA4ZGIyYTA1Li43YTg1YzQxIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2V0NjF4MjUxL2V0NjF4MjUxX2NvcmUuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2V0NjF4MjUxL2V0NjF4MjUxX2NvcmUuYwpAQCAtMTIxNCw3ICsxMjE0LDcgQEAKIAlpZiAoIWRvd25fcmVhZF90cnlsb2NrKCZldDYxeDI1MV9kZXZfbG9jaykpCiAJCXJldHVybiAtRVJFU1RBUlRTWVM7CiAKLQljYW0gPSB2aWRlb19nZXRfZHJ2ZGF0YSh2aWRlb19kZXZkYXRhKGZpbHApKTsKKwljYW0gPSB2aWRlb19kcnZkYXRhKGZpbHApOwogCiAJaWYgKHdhaXRfZm9yX2NvbXBsZXRpb25faW50ZXJydXB0aWJsZSgmY2FtLT5wcm9iZSkpIHsKIAkJdXBfcmVhZCgmZXQ2MXgyNTFfZGV2X2xvY2spOwpAQCAtMTI5Nyw3ICsxMjk3LDcgQEAKIAogCWRvd25fd3JpdGUoJmV0NjF4MjUxX2Rldl9sb2NrKTsKIAotCWNhbSA9IHZpZGVvX2dldF9kcnZkYXRhKHZpZGVvX2RldmRhdGEoZmlscCkpOworCWNhbSA9IHZpZGVvX2RydmRhdGEoZmlscCk7CiAKIAlldDYxeDI1MV9zdG9wX3RyYW5zZmVyKGNhbSk7CiAJZXQ2MXgyNTFfcmVsZWFzZV9idWZmZXJzKGNhbSk7CkBAIC0xMzE4LDcgKzEzMTgsNyBAQAogZXQ2MXgyNTFfcmVhZChzdHJ1Y3QgZmlsZSogZmlscCwgY2hhciBfX3VzZXIgKiBidWYsCiAJICAgICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QqIGZfcG9zKQogewotCXN0cnVjdCBldDYxeDI1MV9kZXZpY2UqIGNhbSA9IHZpZGVvX2dldF9kcnZkYXRhKHZpZGVvX2RldmRhdGEoZmlscCkpOworCXN0cnVjdCBldDYxeDI1MV9kZXZpY2UgKmNhbSA9IHZpZGVvX2RydmRhdGEoZmlscCk7CiAJc3RydWN0IGV0NjF4MjUxX2ZyYW1lX3QqIGYsICogaTsKIAl1bnNpZ25lZCBsb25nIGxvY2tfZmxhZ3M7CiAJbG9uZyB0aW1lb3V0OwpAQCAtMTQyNiw3ICsxNDI2LDcgQEAKIAogc3RhdGljIHVuc2lnbmVkIGludCBldDYxeDI1MV9wb2xsKHN0cnVjdCBmaWxlICpmaWxwLCBwb2xsX3RhYmxlICp3YWl0KQogewotCXN0cnVjdCBldDYxeDI1MV9kZXZpY2UqIGNhbSA9IHZpZGVvX2dldF9kcnZkYXRhKHZpZGVvX2RldmRhdGEoZmlscCkpOworCXN0cnVjdCBldDYxeDI1MV9kZXZpY2UgKmNhbSA9IHZpZGVvX2RydmRhdGEoZmlscCk7CiAJc3RydWN0IGV0NjF4MjUxX2ZyYW1lX3QqIGY7CiAJdW5zaWduZWQgbG9uZyBsb2NrX2ZsYWdzOwogCXVuc2lnbmVkIGludCBtYXNrID0gMDsKQEAgLTE1MDIsNyArMTUwMiw3IEBACiAKIHN0YXRpYyBpbnQgZXQ2MXgyNTFfbW1hcChzdHJ1Y3QgZmlsZSogZmlscCwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCiB7Ci0Jc3RydWN0IGV0NjF4MjUxX2RldmljZSogY2FtID0gdmlkZW9fZ2V0X2RydmRhdGEodmlkZW9fZGV2ZGF0YShmaWxwKSk7CisJc3RydWN0IGV0NjF4MjUxX2RldmljZSAqY2FtID0gdmlkZW9fZHJ2ZGF0YShmaWxwKTsKIAl1bnNpZ25lZCBsb25nIHNpemUgPSB2bWEtPnZtX2VuZCAtIHZtYS0+dm1fc3RhcnQsCiAJCSAgICAgIHN0YXJ0ID0gdm1hLT52bV9zdGFydDsKIAl2b2lkICpwb3M7CkBAIC0yMzk1LDcgKzIzOTUsNyBAQAogc3RhdGljIGludCBldDYxeDI1MV9pb2N0bF92NGwyKHN0cnVjdCBpbm9kZSogaW5vZGUsIHN0cnVjdCBmaWxlKiBmaWxwLAogCQkJICAgICAgIHVuc2lnbmVkIGludCBjbWQsIHZvaWQgX191c2VyICogYXJnKQogewotCXN0cnVjdCBldDYxeDI1MV9kZXZpY2UqIGNhbSA9IHZpZGVvX2dldF9kcnZkYXRhKHZpZGVvX2RldmRhdGEoZmlscCkpOworCXN0cnVjdCBldDYxeDI1MV9kZXZpY2UgKmNhbSA9IHZpZGVvX2RydmRhdGEoZmlscCk7CiAKIAlzd2l0Y2ggKGNtZCkgewogCkBAIC0yNDkwLDcgKzI0OTAsNyBAQAogc3RhdGljIGludCBldDYxeDI1MV9pb2N0bChzdHJ1Y3QgaW5vZGUqIGlub2RlLCBzdHJ1Y3QgZmlsZSogZmlscCwKIAkJCSB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKIHsKLQlzdHJ1Y3QgZXQ2MXgyNTFfZGV2aWNlKiBjYW0gPSB2aWRlb19nZXRfZHJ2ZGF0YSh2aWRlb19kZXZkYXRhKGZpbHApKTsKKwlzdHJ1Y3QgZXQ2MXgyNTFfZGV2aWNlICpjYW0gPSB2aWRlb19kcnZkYXRhKGZpbHApOwogCWludCBlcnIgPSAwOwogCiAJaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmY2FtLT5maWxlb3BfbXV0ZXgpKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9LY29uZmlnIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9LY29uZmlnCmluZGV4IDQyYjkwNzQuLjRkMDgxNzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvS2NvbmZpZworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL0tjb25maWcKQEAgLTEsMTMgKzEsMjEyIEBACi1jb25maWcgVVNCX0dTUENBCi0JdHJpc3RhdGUgIlVTQiBHU1BDQSBkcml2ZXIiCittZW51Y29uZmlnIFVTQl9HU1BDQQorCXRyaXN0YXRlICJHU1BDQSBiYXNlZCB3ZWJjYW1zIgogCWRlcGVuZHMgb24gVklERU9fVjRMMgorCWRlZmF1bHQgbQogCS0tLWhlbHAtLS0KLQkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgc3VwcG9ydCBmb3IgdmFyaW91cyBVU0Igd2ViY2Ftcy4KKwlTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIGVuYWJsZSBzZWxlY3Rpbmcgd2ViY2FtcyBiYXNlZAorCW9uIHRoZSBHU1BDQSBmcmFtZXdvcmsuCiAKLQkgIFNlZSA8ZmlsZTpEb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L2dzcGNhLnR4dD4gZm9yIG1vcmUgaW5mby4KKwlTZWUgPGZpbGU6RG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9nc3BjYS50eHQ+IGZvciBtb3JlIGluZm8uCiAKLQkgIFRoaXMgZHJpdmVyIHVzZXMgdGhlIFZpZGVvIEZvciBMaW51eCBBUEkuIFlvdSBtdXN0IHNheSBZIG9yIE0gdG8KLQkgICJWaWRlbyBGb3IgTGludXgiIHRvIHVzZSB0aGlzIGRyaXZlci4KKwlUaGlzIGRyaXZlciB1c2VzIHRoZSBWaWRlbyBGb3IgTGludXggQVBJLiBZb3UgbXVzdCBzYXkgWSBvciBNIHRvCisJIlZpZGVvIEZvciBMaW51eCIgdG8gdXNlIHRoaXMgZHJpdmVyLgogCi0JICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIG1vZHVsZXMsIGNob29zZSBNIGhlcmU6IHRoZQotCSAgbW9kdWxlcyB3aWxsIGJlIGNhbGxlZCBnc3BjYV94eHh4LgorCVRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgbW9kdWxlcywgY2hvb3NlIE0gaGVyZTogdGhlCisJbW9kdWxlcyB3aWxsIGJlIGNhbGxlZCBnc3BjYV9tYWluLgorCisKK2lmIFVTQl9HU1BDQSAmJiBWSURFT19WNEwyCisKK3NvdXJjZSAiZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9tNTYwMi9LY29uZmlnIgorCitjb25maWcgVVNCX0dTUENBX0NPTkVYCisJdHJpc3RhdGUgIkNvbmV4YW50IENhbWVyYSBEcml2ZXIiCisJZGVwZW5kcyBvbiBWSURFT19WNEwyICYmIFVTQl9HU1BDQQorCWhlbHAKKwlTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHN1cHBvcnQgZm9yIGNhbWVyYXMgYmFzZWQgb24gdGhlIENvbmV4YW50IGNoaXAuCisKKwlUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwltb2R1bGUgd2lsbCBiZSBjYWxsZWQgZ3NwY2FfY29uZXguCisKK2NvbmZpZyBVU0JfR1NQQ0FfRVRPTVMKKwl0cmlzdGF0ZSAiRXRvbXMgVVNCIENhbWVyYSBEcml2ZXIiCisJZGVwZW5kcyBvbiBWSURFT19WNEwyICYmIFVTQl9HU1BDQQorCWhlbHAKKwlTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHN1cHBvcnQgZm9yIGNhbWVyYXMgYmFzZWQgb24gdGhlIEV0b21zIGNoaXAuCisKKwlUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwltb2R1bGUgd2lsbCBiZSBjYWxsZWQgZ3NwY2FfZXRvbXMuCisKK2NvbmZpZyBVU0JfR1NQQ0FfRklORVBJWAorCXRyaXN0YXRlICJGdWppZmlsbSBGaW5lUGl4IFVTQiBWNEwyIGRyaXZlciIKKwlkZXBlbmRzIG9uIFZJREVPX1Y0TDIgJiYgVVNCX0dTUENBCisJaGVscAorCVNheSBZIGhlcmUgaWYgeW91IHdhbnQgc3VwcG9ydCBmb3IgY2FtZXJhcyBiYXNlZCBvbiB0aGUgRmluZVBpeCBjaGlwLgorCisJVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCisJbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGdzcGNhX2ZpbmVwaXguCisKK2NvbmZpZyBVU0JfR1NQQ0FfTUFSUworCXRyaXN0YXRlICJNYXJzIFVTQiBDYW1lcmEgRHJpdmVyIgorCWRlcGVuZHMgb24gVklERU9fVjRMMiAmJiBVU0JfR1NQQ0EKKwloZWxwCisJU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCBzdXBwb3J0IGZvciBjYW1lcmFzIGJhc2VkIG9uIHRoZSBNYXJzIGNoaXAuCisKKwlUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwltb2R1bGUgd2lsbCBiZSBjYWxsZWQgZ3NwY2FfbWFycy4KKworY29uZmlnIFVTQl9HU1BDQV9PVjUxOQorCXRyaXN0YXRlICJPVjUxOSBVU0IgQ2FtZXJhIERyaXZlciIKKwlkZXBlbmRzIG9uIFZJREVPX1Y0TDIgJiYgVVNCX0dTUENBCisJaGVscAorCVNheSBZIGhlcmUgaWYgeW91IHdhbnQgc3VwcG9ydCBmb3IgY2FtZXJhcyBiYXNlZCBvbiB0aGUgT1Y1MTkgY2hpcC4KKworCVRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQorCW1vZHVsZSB3aWxsIGJlIGNhbGxlZCBnc3BjYV9vdjUxOS4KKworY29uZmlnIFVTQl9HU1BDQV9QQUMyMDcKKwl0cmlzdGF0ZSAiUGl4YXJ0IFBBQzIwNyBVU0IgQ2FtZXJhIERyaXZlciIKKwlkZXBlbmRzIG9uIFZJREVPX1Y0TDIgJiYgVVNCX0dTUENBCisJaGVscAorCVNheSBZIGhlcmUgaWYgeW91IHdhbnQgc3VwcG9ydCBmb3IgY2FtZXJhcyBiYXNlZCBvbiB0aGUgUEFDMjA3IGNoaXAuCisKKwlUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwltb2R1bGUgd2lsbCBiZSBjYWxsZWQgZ3NwY2FfcGFjMjA3LgorCitjb25maWcgVVNCX0dTUENBX1BBQzczMTEKKwl0cmlzdGF0ZSAiUGl4YXJ0IFBBQzczMTEgVVNCIENhbWVyYSBEcml2ZXIiCisJZGVwZW5kcyBvbiBWSURFT19WNEwyICYmIFVTQl9HU1BDQQorCWhlbHAKKwlTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHN1cHBvcnQgZm9yIGNhbWVyYXMgYmFzZWQgb24gdGhlIFBBQzczMTEgY2hpcC4KKworCVRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQorCW1vZHVsZSB3aWxsIGJlIGNhbGxlZCBnc3BjYV9wYWM3MzExLgorCitjb25maWcgVVNCX0dTUENBX1NPTklYQgorCXRyaXN0YXRlICJTTjlDMTAyIFVTQiBDYW1lcmEgRHJpdmVyIgorCWRlcGVuZHMgb24gVklERU9fVjRMMiAmJiBVU0JfR1NQQ0EKKwloZWxwCisJU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCBzdXBwb3J0IGZvciBjYW1lcmFzIGJhc2VkIG9uIHRoZSBTT05JWEIgY2hpcC4KKworCVRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQorCW1vZHVsZSB3aWxsIGJlIGNhbGxlZCBnc3BjYV9zb25peGIuCisKK2NvbmZpZyBVU0JfR1NQQ0FfU09OSVhKCisJdHJpc3RhdGUgIlNPTklYIEpQRUcgVVNCIENhbWVyYSBEcml2ZXIiCisJZGVwZW5kcyBvbiBWSURFT19WNEwyICYmIFVTQl9HU1BDQQorCWhlbHAKKwlTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHN1cHBvcnQgZm9yIGNhbWVyYXMgYmFzZWQgb24gdGhlIFNPTklYSiBjaGlwLgorCisJVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCisJbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGdzcGNhX3Nvbml4agorCitjb25maWcgVVNCX0dTUENBX1NQQ0E1MDAKKwl0cmlzdGF0ZSAiU1BDQTUwMCBVU0IgQ2FtZXJhIERyaXZlciIKKwlkZXBlbmRzIG9uIFZJREVPX1Y0TDIgJiYgVVNCX0dTUENBCisJaGVscAorCVNheSBZIGhlcmUgaWYgeW91IHdhbnQgc3VwcG9ydCBmb3IgY2FtZXJhcyBiYXNlZCBvbiB0aGUgU1BDQTUwMCBjaGlwLgorCisJVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCisJbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGdzcGNhX3NwY2E1MDAuCisKK2NvbmZpZyBVU0JfR1NQQ0FfU1BDQTUwMQorCXRyaXN0YXRlICJTUENBNTAxIFVTQiBDYW1lcmEgRHJpdmVyIgorCWRlcGVuZHMgb24gVklERU9fVjRMMiAmJiBVU0JfR1NQQ0EKKwloZWxwCisJU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCBzdXBwb3J0IGZvciBjYW1lcmFzIGJhc2VkIG9uIHRoZSBTUENBNTAxIGNoaXAuCisKKwlUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwltb2R1bGUgd2lsbCBiZSBjYWxsZWQgZ3NwY2Ffc3BjYTUwMS4KKworY29uZmlnIFVTQl9HU1BDQV9TUENBNTA1CisJdHJpc3RhdGUgIlNQQ0E1MDUgVVNCIENhbWVyYSBEcml2ZXIiCisJZGVwZW5kcyBvbiBWSURFT19WNEwyICYmIFVTQl9HU1BDQQorCWhlbHAKKwlTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHN1cHBvcnQgZm9yIGNhbWVyYXMgYmFzZWQgb24gdGhlIFNQQ0E1MDUgY2hpcC4KKworCVRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQorCW1vZHVsZSB3aWxsIGJlIGNhbGxlZCBnc3BjYV9zcGNhNTA1LgorCitjb25maWcgVVNCX0dTUENBX1NQQ0E1MDYKKwl0cmlzdGF0ZSAiU1BDQTUwNiBVU0IgQ2FtZXJhIERyaXZlciIKKwlkZXBlbmRzIG9uIFZJREVPX1Y0TDIgJiYgVVNCX0dTUENBCisJaGVscAorCVNheSBZIGhlcmUgaWYgeW91IHdhbnQgc3VwcG9ydCBmb3IgY2FtZXJhcyBiYXNlZCBvbiB0aGUgU1BDQTUwNiBjaGlwLgorCisJVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCisJbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGdzcGNhX3NwY2E1MDYuCisKK2NvbmZpZyBVU0JfR1NQQ0FfU1BDQTUwOAorCXRyaXN0YXRlICJTUENBNTA4IFVTQiBDYW1lcmEgRHJpdmVyIgorCWRlcGVuZHMgb24gVklERU9fVjRMMiAmJiBVU0JfR1NQQ0EKKwloZWxwCisJU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCBzdXBwb3J0IGZvciBjYW1lcmFzIGJhc2VkIG9uIHRoZSBTUENBNTA4IGNoaXAuCisKKwlUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwltb2R1bGUgd2lsbCBiZSBjYWxsZWQgZ3NwY2Ffc3BjYTUwOC4KKworY29uZmlnIFVTQl9HU1BDQV9TUENBNTYxCisJdHJpc3RhdGUgIlNQQ0E1NjEgVVNCIENhbWVyYSBEcml2ZXIiCisJZGVwZW5kcyBvbiBWSURFT19WNEwyICYmIFVTQl9HU1BDQQorCWhlbHAKKwlTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHN1cHBvcnQgZm9yIGNhbWVyYXMgYmFzZWQgb24gdGhlIFNQQ0E1NjEgY2hpcC4KKworCVRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQorCW1vZHVsZSB3aWxsIGJlIGNhbGxlZCBnc3BjYV9zcGNhNTYxLgorCitjb25maWcgVVNCX0dTUENBX1NUSzAxNAorCXRyaXN0YXRlICJTeW50ZWsgRFY0MDAwIChTVEswMTQpIFVTQiBDYW1lcmEgRHJpdmVyIgorCWRlcGVuZHMgb24gVklERU9fVjRMMiAmJiBVU0JfR1NQQ0EKKwloZWxwCisJU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCBzdXBwb3J0IGZvciBjYW1lcmFzIGJhc2VkIG9uIHRoZSBTVEswMTQgY2hpcC4KKworCVRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQorCW1vZHVsZSB3aWxsIGJlIGNhbGxlZCBnc3BjYV9zdGswMTQuCisKK2NvbmZpZyBVU0JfR1NQQ0FfU1VOUExVUworCXRyaXN0YXRlICJTVU5QTFVTIFVTQiBDYW1lcmEgRHJpdmVyIgorCWRlcGVuZHMgb24gVklERU9fVjRMMiAmJiBVU0JfR1NQQ0EKKwloZWxwCisJU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCBzdXBwb3J0IGZvciBjYW1lcmFzIGJhc2VkIG9uIHRoZSBTdW5wbHVzCisJU1BDQTUwNChhYmMpIFNQQ0E1MzMgU1BDQTUzNiBjaGlwcy4KKworCVRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQorCW1vZHVsZSB3aWxsIGJlIGNhbGxlZCBnc3BjYV9zcGNhNXh4LgorCitjb25maWcgVVNCX0dTUENBX1Q2MTMKKwl0cmlzdGF0ZSAiVDYxMyAoSlBFRyBDb21wbGlhbmNlKSBVU0IgQ2FtZXJhIERyaXZlciIKKwlkZXBlbmRzIG9uIFZJREVPX1Y0TDIgJiYgVVNCX0dTUENBCisJaGVscAorCVNheSBZIGhlcmUgaWYgeW91IHdhbnQgc3VwcG9ydCBmb3IgY2FtZXJhcyBiYXNlZCBvbiB0aGUgVDYxMyBjaGlwLgorCisJVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCisJbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGdzcGNhX3Q2MTMuCisKK2NvbmZpZyBVU0JfR1NQQ0FfVFY4NTMyCisJdHJpc3RhdGUgIlRWODUzMiBVU0IgQ2FtZXJhIERyaXZlciIKKwlkZXBlbmRzIG9uIFZJREVPX1Y0TDIgJiYgVVNCX0dTUENBCisJaGVscAorCVNheSBZIGhlcmUgaWYgeW91IHdhbnQgc3VwcG9ydCBmb3IgY2FtZXJhcyBiYXNlZCBvbiB0aGUgVFY4NTMxIGNoaXAuCisKKwlUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwltb2R1bGUgd2lsbCBiZSBjYWxsZWQgZ3NwY2FfdHY4NTMyLgorCitjb25maWcgVVNCX0dTUENBX1ZDMDMyWAorCXRyaXN0YXRlICJWQzAzMlggVVNCIENhbWVyYSBEcml2ZXIiCisJZGVwZW5kcyBvbiBWSURFT19WNEwyICYmIFVTQl9HU1BDQQorCWhlbHAKKwlTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHN1cHBvcnQgZm9yIGNhbWVyYXMgYmFzZWQgb24gdGhlIFZDMDMyWCBjaGlwLgorCisJVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCisJbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGdzcGNhX3ZjMDMyeC4KKworY29uZmlnIFVTQl9HU1BDQV9aQzNYWAorCXRyaXN0YXRlICJWQzN4eCBVU0IgQ2FtZXJhIERyaXZlciIKKwlkZXBlbmRzIG9uIFZJREVPX1Y0TDIgJiYgVVNCX0dTUENBCisJaGVscAorCVNheSBZIGhlcmUgaWYgeW91IHdhbnQgc3VwcG9ydCBmb3IgY2FtZXJhcyBiYXNlZCBvbiB0aGUgWkMzWFggY2hpcC4KKworCVRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQorCW1vZHVsZSB3aWxsIGJlIGNhbGxlZCBnc3BjYV96YzN4eC4KKworZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvTWFrZWZpbGUgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL01ha2VmaWxlCmluZGV4IGU2OGE4OTYuLjIyNzM0ZjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9NYWtlZmlsZQpAQCAtMSwyOSArMSw0OCBAQAotb2JqLSQoQ09ORklHX1VTQl9HU1BDQSkJKz0gZ3NwY2FfbWFpbi5vIFwKLQlnc3BjYV9jb25leC5vIGdzcGNhX2V0b21zLm8gZ3NwY2FfbWFycy5vIFwKLQlnc3BjYV9vdjUxOS5vIGdzcGNhX3BhYzIwNy5vIGdzcGNhX3BhYzczMTEubyBcCi0JZ3NwY2Ffc29uaXhiLm8gZ3NwY2Ffc29uaXhqLm8gZ3NwY2Ffc3BjYTUwMC5vIGdzcGNhX3NwY2E1MDEubyBcCi0JZ3NwY2Ffc3BjYTUwNS5vIGdzcGNhX3NwY2E1MDYubyBnc3BjYV9zcGNhNTA4Lm8gZ3NwY2Ffc3BjYTU2MS5vIFwKLQlnc3BjYV9zdW5wbHVzLm8gZ3NwY2Ffc3RrMDE0Lm8gZ3NwY2FfdDYxMy5vIGdzcGNhX3R2ODUzMi5vIFwKLQlnc3BjYV92YzAzMngubyBnc3BjYV96YzN4eC5vCitvYmotJChDT05GSUdfVVNCX0dTUENBKQkJKz0gZ3NwY2FfbWFpbi5vCitvYmotJChDT05GSUdfVVNCX0dTUENBX0NPTkVYKQkrPSBnc3BjYV9jb25leC5vCitvYmotJChDT05GSUdfVVNCX0dTUENBX0VUT01TKQkrPSBnc3BjYV9ldG9tcy5vCitvYmotJChDT05GSUdfVVNCX0dTUENBX0ZJTkVQSVgpCSs9IGdzcGNhX2ZpbmVwaXgubworb2JqLSQoQ09ORklHX1VTQl9HU1BDQV9NQVJTKQkrPSBnc3BjYV9tYXJzLm8KK29iai0kKENPTkZJR19VU0JfR1NQQ0FfT1Y1MTkpCSs9IGdzcGNhX292NTE5Lm8KK29iai0kKENPTkZJR19VU0JfR1NQQ0FfUEFDMjA3KQkrPSBnc3BjYV9wYWMyMDcubworb2JqLSQoQ09ORklHX1VTQl9HU1BDQV9QQUM3MzExKSArPSBnc3BjYV9wYWM3MzExLm8KK29iai0kKENPTkZJR19VU0JfR1NQQ0FfU09OSVhCKQkrPSBnc3BjYV9zb25peGIubworb2JqLSQoQ09ORklHX1VTQl9HU1BDQV9TT05JWEopCSs9IGdzcGNhX3Nvbml4ai5vCitvYmotJChDT05GSUdfVVNCX0dTUENBX1NQQ0E1MDApICs9IGdzcGNhX3NwY2E1MDAubworb2JqLSQoQ09ORklHX1VTQl9HU1BDQV9TUENBNTAxKSArPSBnc3BjYV9zcGNhNTAxLm8KK29iai0kKENPTkZJR19VU0JfR1NQQ0FfU1BDQTUwNSkgKz0gZ3NwY2Ffc3BjYTUwNS5vCitvYmotJChDT05GSUdfVVNCX0dTUENBX1NQQ0E1MDYpICs9IGdzcGNhX3NwY2E1MDYubworb2JqLSQoQ09ORklHX1VTQl9HU1BDQV9TUENBNTA4KSArPSBnc3BjYV9zcGNhNTA4Lm8KK29iai0kKENPTkZJR19VU0JfR1NQQ0FfU1BDQTU2MSkgKz0gZ3NwY2Ffc3BjYTU2MS5vCitvYmotJChDT05GSUdfVVNCX0dTUENBX1NVTlBMVVMpICs9IGdzcGNhX3N1bnBsdXMubworb2JqLSQoQ09ORklHX1VTQl9HU1BDQV9TVEswMTQpCSs9IGdzcGNhX3N0azAxNC5vCitvYmotJChDT05GSUdfVVNCX0dTUENBX1Q2MTMpCSs9IGdzcGNhX3Q2MTMubworb2JqLSQoQ09ORklHX1VTQl9HU1BDQV9UVjg1MzIpCSs9IGdzcGNhX3R2ODUzMi5vCitvYmotJChDT05GSUdfVVNCX0dTUENBX1ZDMDMyWCkJKz0gZ3NwY2FfdmMwMzJ4Lm8KK29iai0kKENPTkZJR19VU0JfR1NQQ0FfWkMzWFgpCSs9IGdzcGNhX3pjM3h4Lm8KIAotZ3NwY2FfbWFpbi1vYmpzIDo9IGdzcGNhLm8KLWdzcGNhX2NvbmV4LW9ianMgOj0gY29uZXgubwotZ3NwY2FfZXRvbXMtb2JqcyA6PSBldG9tcy5vCi1nc3BjYV9tYXJzLW9ianMgOj0gbWFycy5vCi1nc3BjYV9vdjUxOS1vYmpzIDo9IG92NTE5Lm8KLWdzcGNhX3BhYzIwNy1vYmpzIDo9IHBhYzIwNy5vCi1nc3BjYV9wYWM3MzExLW9ianMgOj0gcGFjNzMxMS5vCi1nc3BjYV9zb25peGItb2JqcyA6PSBzb25peGIubwotZ3NwY2Ffc29uaXhqLW9ianMgOj0gc29uaXhqLm8KLWdzcGNhX3NwY2E1MDAtb2JqcyA6PSBzcGNhNTAwLm8KLWdzcGNhX3NwY2E1MDEtb2JqcyA6PSBzcGNhNTAxLm8KLWdzcGNhX3NwY2E1MDUtb2JqcyA6PSBzcGNhNTA1Lm8KLWdzcGNhX3NwY2E1MDYtb2JqcyA6PSBzcGNhNTA2Lm8KLWdzcGNhX3NwY2E1MDgtb2JqcyA6PSBzcGNhNTA4Lm8KLWdzcGNhX3NwY2E1NjEtb2JqcyA6PSBzcGNhNTYxLm8KLWdzcGNhX3N0azAxNC1vYmpzIDo9IHN0azAxNC5vCi1nc3BjYV9zdW5wbHVzLW9ianMgOj0gc3VucGx1cy5vCi1nc3BjYV90NjEzLW9ianMgOj0gdDYxMy5vCi1nc3BjYV90djg1MzItb2JqcyA6PSB0djg1MzIubwotZ3NwY2FfdmMwMzJ4LW9ianMgOj0gdmMwMzJ4Lm8KLWdzcGNhX3pjM3h4LW9ianMgOj0gemMzeHgubworZ3NwY2FfbWFpbi1vYmpzCQkJOj0gZ3NwY2EubworZ3NwY2FfY29uZXgtb2JqcwkJOj0gY29uZXgubworZ3NwY2FfZXRvbXMtb2JqcwkJOj0gZXRvbXMubworZ3NwY2FfZmluZXBpeC1vYmpzCQk6PSBmaW5lcGl4Lm8KK2dzcGNhX21hcnMtb2JqcwkJCTo9IG1hcnMubworZ3NwY2Ffb3Y1MTktb2JqcwkJOj0gb3Y1MTkubworZ3NwY2FfcGFjMjA3LW9ianMJCTo9IHBhYzIwNy5vCitnc3BjYV9wYWM3MzExLW9ianMJCTo9IHBhYzczMTEubworZ3NwY2Ffc29uaXhiLW9ianMJCTo9IHNvbml4Yi5vCitnc3BjYV9zb25peGotb2JqcwkJOj0gc29uaXhqLm8KK2dzcGNhX3NwY2E1MDAtb2JqcwkJOj0gc3BjYTUwMC5vCitnc3BjYV9zcGNhNTAxLW9ianMJCTo9IHNwY2E1MDEubworZ3NwY2Ffc3BjYTUwNS1vYmpzCQk6PSBzcGNhNTA1Lm8KK2dzcGNhX3NwY2E1MDYtb2JqcwkJOj0gc3BjYTUwNi5vCitnc3BjYV9zcGNhNTA4LW9ianMJCTo9IHNwY2E1MDgubworZ3NwY2Ffc3BjYTU2MS1vYmpzCQk6PSBzcGNhNTYxLm8KK2dzcGNhX3N0azAxNC1vYmpzCQk6PSBzdGswMTQubworZ3NwY2Ffc3VucGx1cy1vYmpzCQk6PSBzdW5wbHVzLm8KK2dzcGNhX3Q2MTMtb2JqcwkJCTo9IHQ2MTMubworZ3NwY2FfdHY4NTMyLW9ianMJCTo9IHR2ODUzMi5vCitnc3BjYV92YzAzMngtb2JqcwkJOj0gdmMwMzJ4Lm8KK2dzcGNhX3pjM3h4LW9ianMJCTo9IHpjM3h4Lm8KKworb2JqLSQoQ09ORklHX1VTQl9NNTYwMikJCSs9IG01NjAyLworCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL2NvbmV4LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL2NvbmV4LmMKaW5kZXggNGQ5ZjRjYy4uYTlkNTFiYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9jb25leC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvY29uZXguYwpAQCAtODM3LDEyICs4MzcsMTMgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgc2Rfc3RhcnQoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQorc3RhdGljIGludCBzZF9zdGFydChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCiB7CiAJY3gxMTY0Nl9pbml0c2l6ZShnc3BjYV9kZXYpOwogCWN4MTE2NDZfZncoZ3NwY2FfZGV2KTsKIAljeF9zZW5zb3IoZ3NwY2FfZGV2KTsKIAljeDExNjQ2X2pwZWcoZ3NwY2FfZGV2KTsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHZvaWQgc2Rfc3RvcDAoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9ldG9tcy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9ldG9tcy5jCmluZGV4IDRmZjBlMzguLjNiZTMwYjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvZXRvbXMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL2V0b21zLmMKQEAgLTY5MSw3ICs2OTEsNyBAQAogfQogCiAvKiAtLSBzdGFydCB0aGUgY2FtZXJhIC0tICovCi1zdGF0aWMgdm9pZCBzZF9zdGFydChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCitzdGF0aWMgaW50IHNkX3N0YXJ0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKIHsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CiAKQEAgLTcwNCw2ICs3MDQsNyBAQAogCiAJcmVnX3dfdmFsKGdzcGNhX2RldiwgRVRfUkVTRVRfQUxMLCAweDA4KTsKIAlldF92aWRlbyhnc3BjYV9kZXYsIDEpOwkJLyogdmlkZW8gb24gKi8KKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHZvaWQgc2Rfc3RvcE4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9maW5lcGl4LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL2ZpbmVwaXguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NWQzY2JmCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9maW5lcGl4LmMKQEAgLTAsMCArMSw0NjYgQEAKKy8qCisgKiBGdWppZmlsbSBGaW5lcGl4IHN1YmRyaXZlcgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBGcmFuayBaYWdvCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKKyAqLworCisjZGVmaW5lIE1PRFVMRV9OQU1FICJmaW5lcGl4IgorCisjaW5jbHVkZSAiZ3NwY2EuaCIKKworTU9EVUxFX0FVVEhPUigiRnJhbmsgWmFnbyA8ZnJhbmtAemFnby5uZXQ+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkZ1amlmaWxtIEZpbmVQaXggVVNCIFY0TDIgZHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKKy8qIERlZmF1bHQgdGltZW91dCwgaW4gbXMgKi8KKyNkZWZpbmUgRlBJWF9USU1FT1VUIChIWiAvIDEwKQorCisvKiBNYXhpbXVtIHRyYW5zZmVyIHNpemUgdG8gdXNlLiBUaGUgd2luZG93cyBkcml2ZXIgcmVhZHMgYnkgY2h1bmtzIG9mCisgKiAweDIwMDAgYnl0ZXMsIHNvIGRvIHRoZSBzYW1lLiBOb3RlOiByZWFkaW5nIG1vcmUgc2VlbXMgdG8gd29yaworICogdG9vLiAqLworI2RlZmluZSBGUElYX01BWF9UUkFOU0ZFUiAweDIwMDAKKworLyogU3RydWN0dXJlIHRvIGhvbGQgYWxsIG9mIG91ciBkZXZpY2Ugc3BlY2lmaWMgc3R1ZmYgKi8KK3N0cnVjdCB1c2JfZnBpeCB7CisJc3RydWN0IGdzcGNhX2RldiBnc3BjYV9kZXY7CS8qICEhIG11c3QgYmUgdGhlIGZpcnN0IGl0ZW0gKi8KKworCS8qCisJICogVVNCIHN0dWZmCisJICovCisJc3RydWN0IHVzYl9jdHJscmVxdWVzdCBjdHJscmVxOworCXN0cnVjdCB1cmIgKmNvbnRyb2xfdXJiOworCXN0cnVjdCB0aW1lcl9saXN0IGJ1bGtfdGltZXI7CisKKwllbnVtIHsKKwkJRlBJWF9OT1AsCS8qIGluYWN0aXZlLCBlbHNlIHN0cmVhbWluZyAqLworCQlGUElYX1JFU0VULAkvKiBtdXN0IHJlc2V0ICovCisJCUZQSVhfUkVRX0ZSQU1FLAkvKiByZXF1ZXN0aW5nIGEgZnJhbWUgKi8KKwkJRlBJWF9SRUFEX0ZSQU1FLAkvKiByZWFkaW5nIGZyYW1lICovCisJfSBzdGF0ZTsKKworCS8qCisJICogRHJpdmVyIHN0dWZmCisJICovCisJc3RydWN0IGRlbGF5ZWRfd29yayB3cWU7CisJc3RydWN0IGNvbXBsZXRpb24gY2FuX2Nsb3NlOworCWludCBzdHJlYW1pbmc7Cit9OworCisvKiBEZWxheSBhZnRlciB3aGljaCBjbGFpbSB0aGUgbmV4dCBmcmFtZS4gSWYgdGhlIGRlbGF5IGlzIHRvbyBzbWFsbCwKKyAqIHRoZSBjYW1lcmEgd2lsbCByZXR1cm4gb2xkIGZyYW1lcy4gT24gdGhlIDQ4MDBaLCAyMG1zIGlzIGJhZCwgMjVtcworICogd2lsbCBmYWlsIGV2ZXJ5IDQgb3IgNSBmcmFtZXMsIGJ1dCAzMG1zIGlzIHBlcmZlY3QuICovCisjZGVmaW5lIE5FWFRfRlJBTUVfREVMQVkgICgoKEhaICogMzApICsgOTk5KSAvIDEwMDApCisKKyNkZWZpbmUgZGV2X25ld19zdGF0ZShuZXdfc3RhdGUpIHsJCQkJXAorCQlQREVCVUcoRF9TVFJFQU0sICJuZXcgc3RhdGUgZnJvbSAlZCB0byAlZCBhdCAlczolZCIsCVwKKwkJCWRldi0+c3RhdGUsIG5ld19zdGF0ZSwgX19mdW5jX18sIF9fTElORV9fKTsJXAorCQlkZXYtPnN0YXRlID0gbmV3X3N0YXRlOwkJCQkJXAorfQorCisvKiBUaGVzZSBjYW1lcmFzIG9ubHkgc3VwcG9ydCAzMjB4MjAwLiAqLworc3RhdGljIHN0cnVjdCB2NGwyX3BpeF9mb3JtYXQgZnBpeF9tb2RlWzFdID0geworCXsgMzIwLCAyNDAsIFY0TDJfUElYX0ZNVF9KUEVHLCBWNEwyX0ZJRUxEX05PTkUsCisJCS5ieXRlc3BlcmxpbmUgPSAzMjAsCisJCS5zaXplaW1hZ2UgPSAzMjAgKiAyNDAgKiAzIC8gOCArIDU5MCwKKwkJLmNvbG9yc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfU1JHQiwKKwkJLnByaXYgPSAwfQorfTsKKworLyogUmVhZHMgcGFydCBvZiBhIGZyYW1lICovCitzdGF0aWMgdm9pZCByZWFkX2ZyYW1lX3BhcnQoc3RydWN0IHVzYl9mcGl4ICpkZXYpCit7CisJaW50IHJldDsKKworCVBERUJVRyhEX1NUUkVBTSwgInJlYWRfZnJhbWVfcGFydCIpOworCisJLyogUmVhZHMgcGFydCBvZiBhIGZyYW1lICovCisJcmV0ID0gdXNiX3N1Ym1pdF91cmIoZGV2LT5nc3BjYV9kZXYudXJiWzBdLCBHRlBfQVRPTUlDKTsKKwlpZiAocmV0KSB7CisJCWRldl9uZXdfc3RhdGUoRlBJWF9SRVNFVCk7CisJCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmZGV2LT53cWUsIDEpOworCQlQREVCVUcoRF9TVFJFQU0sICJ1c2Jfc3VibWl0X3VyYiBmYWlsZWQgd2l0aCAlZCIsCisJCQlyZXQpOworCX0gZWxzZSB7CisJCS8qIFNvbWV0aW1lcyB3ZSBuZXZlciBnZXQgYSBjYWxsYmFjaywgc28gdXNlIGEgdGltZXIuCisJCSAqIElzIHRoaXMgbWFza2luZyBhIGJ1ZyBzb21ld2hlcmUgZWxzZT8gKi8KKwkJZGV2LT5idWxrX3RpbWVyLmV4cGlyZXMgPSBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcygxNTApOworCQlhZGRfdGltZXIoJmRldi0+YnVsa190aW1lcik7CisJfQorfQorCisvKiBDYWxsYmFjayBmb3IgVVJCcy4gKi8KK3N0YXRpYyB2b2lkIHVyYl9jYWxsYmFjayhzdHJ1Y3QgdXJiICp1cmIpCit7CisJc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2ID0gdXJiLT5jb250ZXh0OworCXN0cnVjdCB1c2JfZnBpeCAqZGV2ID0gKHN0cnVjdCB1c2JfZnBpeCAqKSBnc3BjYV9kZXY7CisKKwlQREVCVUcoRF9QQUNLLAorCQkiZW50ZXIgdXJiX2NhbGxiYWNrIC0gc3RhdHVzPSVkLCBsZW5ndGg9JWQiLAorCQl1cmItPnN0YXR1cywgdXJiLT5hY3R1YWxfbGVuZ3RoKTsKKworCWlmIChkZXYtPnN0YXRlID09IEZQSVhfUkVBRF9GUkFNRSkKKwkJZGVsX3RpbWVyKCZkZXYtPmJ1bGtfdGltZXIpOworCisJaWYgKHVyYi0+c3RhdHVzICE9IDApIHsKKwkJLyogV2Uga2lsbCBhIHN0dWNrIHVyYiBldmVyeSA1MCBmcmFtZXMgb24gYXZlcmFnZSwgc28gZG9uJ3QKKwkJICogZGlzcGxheSBhIGxvZyBtZXNzYWdlIGZvciB0aGF0LiAqLworCQlpZiAodXJiLT5zdGF0dXMgIT0gLUVDT05OUkVTRVQpCisJCQlQREVCVUcoRF9TVFJFQU0sICJiYWQgVVJCIHN0YXR1cyAlZCIsIHVyYi0+c3RhdHVzKTsKKwkJZGV2X25ld19zdGF0ZShGUElYX1JFU0VUKTsKKwkJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZkZXYtPndxZSwgMSk7CisJfQorCisJc3dpdGNoIChkZXYtPnN0YXRlKSB7CisJY2FzZSBGUElYX1JFUV9GUkFNRToKKwkJZGV2X25ld19zdGF0ZShGUElYX1JFQURfRlJBTUUpOworCQlyZWFkX2ZyYW1lX3BhcnQoZGV2KTsKKwkJYnJlYWs7CisKKwljYXNlIEZQSVhfUkVBRF9GUkFNRTogeworCQl1bnNpZ25lZCBjaGFyICpkYXRhID0gdXJiLT50cmFuc2Zlcl9idWZmZXI7CisJCXN0cnVjdCBnc3BjYV9mcmFtZSAqZnJhbWU7CisKKwkJZnJhbWUgPSBnc3BjYV9nZXRfaV9mcmFtZSgmZGV2LT5nc3BjYV9kZXYpOworCQlpZiAoZnJhbWUgPT0gTlVMTCkKKwkJCWdzcGNhX2Rldi0+bGFzdF9wYWNrZXRfdHlwZSA9IERJU0NBUkRfUEFDS0VUOworCQlpZiAodXJiLT5hY3R1YWxfbGVuZ3RoIDwgRlBJWF9NQVhfVFJBTlNGRVIgfHwKKwkJCShkYXRhW3VyYi0+YWN0dWFsX2xlbmd0aC0yXSA9PSAweGZmICYmCisJCQkJZGF0YVt1cmItPmFjdHVhbF9sZW5ndGgtMV0gPT0gMHhkOSkpIHsKKworCQkJLyogSWYgdGhlIHJlc3VsdCBpcyBsZXNzIHRoYW4gd2hhdCB3YXMgYXNrZWQKKwkJCSAqIGZvciwgdGhlbiBpdCdzIHRoZSBlbmQgb2YgdGhlCisJCQkgKiBmcmFtZS4gU29tZXRpbWUgdGhlIGpwZWcgaXMgbm90IGNvbXBsZXRlLAorCQkJICogYnV0IHRoZXJlJ3Mgbm90aGluZyB3ZSBjYW4gZG8uIFdlIGFsc28gZW5kCisJCQkgKiBoZXJlIGlmIHRoZSB0aGUganBlZyBlbmRzIHJpZ2h0IGF0IHRoZSBlbmQKKwkJCSAqIG9mIHRoZSBmcmFtZS4gKi8KKwkJCWlmIChmcmFtZSkKKwkJCQlnc3BjYV9mcmFtZV9hZGQoZ3NwY2FfZGV2LCBMQVNUX1BBQ0tFVCwKKwkJCQkJCWZyYW1lLAorCQkJCQkJZGF0YSwgdXJiLT5hY3R1YWxfbGVuZ3RoKTsKKwkJCWRldl9uZXdfc3RhdGUoRlBJWF9SRVFfRlJBTUUpOworCQkJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZkZXYtPndxZSwgTkVYVF9GUkFNRV9ERUxBWSk7CisJCX0gZWxzZSB7CisKKwkJCS8qIGdvdCBhIHBhcnRpYWwgaW1hZ2UgKi8KKwkJCWlmIChmcmFtZSkKKwkJCQlnc3BjYV9mcmFtZV9hZGQoZ3NwY2FfZGV2LAorCQkJCQkJZ3NwY2FfZGV2LT5sYXN0X3BhY2tldF90eXBlCisJCQkJCQkJCT09IExBU1RfUEFDS0VUCisJCQkJCQk/IEZJUlNUX1BBQ0tFVCA6IElOVEVSX1BBQ0tFVCwKKwkJCQkJCWZyYW1lLAorCQkJCQlkYXRhLCB1cmItPmFjdHVhbF9sZW5ndGgpOworCQkJcmVhZF9mcmFtZV9wYXJ0KGRldik7CisJCX0KKwkJYnJlYWs7CisJICAgIH0KKworCWNhc2UgRlBJWF9OT1A6CisJY2FzZSBGUElYX1JFU0VUOgorCQlQREVCVUcoRF9TVFJFQU0sICJpbnZhbGlkIHN0YXRlICVkIiwgZGV2LT5zdGF0ZSk7CisJCWJyZWFrOworCX0KK30KKworLyogUmVxdWVzdCBhIG5ldyBmcmFtZSAqLworc3RhdGljIHZvaWQgcmVxdWVzdF9mcmFtZShzdHJ1Y3QgdXNiX2ZwaXggKmRldikKK3sKKwlpbnQgcmV0OworCXN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiA9ICZkZXYtPmdzcGNhX2RldjsKKworCS8qIFNldHVwIGNvbW1hbmQgcGFja2V0ICovCisJbWVtc2V0KGdzcGNhX2Rldi0+dXNiX2J1ZiwgMCwgMTIpOworCWdzcGNhX2Rldi0+dXNiX2J1ZlswXSA9IDB4ZDM7CisJZ3NwY2FfZGV2LT51c2JfYnVmWzddID0gMHgwMTsKKworCS8qIFJlcXVlc3QgYSBmcmFtZSAqLworCWRldi0+Y3RybHJlcS5iUmVxdWVzdFR5cGUgPQorCQlVU0JfRElSX09VVCB8IFVTQl9UWVBFX0NMQVNTIHwgVVNCX1JFQ0lQX0lOVEVSRkFDRTsKKwlkZXYtPmN0cmxyZXEuYlJlcXVlc3QgPSBVU0JfUkVRX0dFVF9TVEFUVVM7CisJZGV2LT5jdHJscmVxLndWYWx1ZSA9IDA7CisJZGV2LT5jdHJscmVxLndJbmRleCA9IDA7CisJZGV2LT5jdHJscmVxLndMZW5ndGggPSBjcHVfdG9fbGUxNigxMik7CisKKwl1c2JfZmlsbF9jb250cm9sX3VyYihkZXYtPmNvbnRyb2xfdXJiLAorCQkJICAgICBnc3BjYV9kZXYtPmRldiwKKwkJCSAgICAgdXNiX3NuZGN0cmxwaXBlKGdzcGNhX2Rldi0+ZGV2LCAwKSwKKwkJCSAgICAgKHVuc2lnbmVkIGNoYXIgKikgJmRldi0+Y3RybHJlcSwKKwkJCSAgICAgZ3NwY2FfZGV2LT51c2JfYnVmLAorCQkJICAgICAxMiwgdXJiX2NhbGxiYWNrLCBnc3BjYV9kZXYpOworCisJcmV0ID0gdXNiX3N1Ym1pdF91cmIoZGV2LT5jb250cm9sX3VyYiwgR0ZQX0FUT01JQyk7CisJaWYgKHJldCkgeworCQlkZXZfbmV3X3N0YXRlKEZQSVhfUkVTRVQpOworCQlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJmRldi0+d3FlLCAxKTsKKwkJUERFQlVHKERfU1RSRUFNLCAidXNiX3N1Ym1pdF91cmIgZmFpbGVkIHdpdGggJWQiLCByZXQpOworCX0KK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qIFN0YXRlIG1hY2hpbmUuICovCitzdGF0aWMgdm9pZCBmcGl4X3NtKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgdXNiX2ZwaXggKmRldiA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgdXNiX2ZwaXgsIHdxZS53b3JrKTsKKworCVBERUJVRyhEX1NUUkVBTSwgImZwaXhfc20gc3RhdGUgJWQiLCBkZXYtPnN0YXRlKTsKKworCS8qIHZlcmlmeSB0aGF0IHRoZSBkZXZpY2Ugd2Fzbid0IHVucGx1Z2dlZCAqLworCWlmICghZGV2LT5nc3BjYV9kZXYucHJlc2VudCkgeworCQlQREVCVUcoRF9TVFJFQU0sICJkZXZpY2UgaXMgZ29uZSIpOworCQlkZXZfbmV3X3N0YXRlKEZQSVhfTk9QKTsKKwkJY29tcGxldGUoJmRldi0+Y2FuX2Nsb3NlKTsKKwkJcmV0dXJuOworCX0KKworCWlmICghZGV2LT5zdHJlYW1pbmcpIHsKKwkJUERFQlVHKERfU1RSRUFNLCAic3RvcHBpbmcgc3RhdGUgbWFjaGluZSIpOworCQlkZXZfbmV3X3N0YXRlKEZQSVhfTk9QKTsKKwkJY29tcGxldGUoJmRldi0+Y2FuX2Nsb3NlKTsKKwkJcmV0dXJuOworCX0KKworCXN3aXRjaCAoZGV2LT5zdGF0ZSkgeworCWNhc2UgRlBJWF9SRVNFVDoKKwkJZGV2X25ld19zdGF0ZShGUElYX1JFUV9GUkFNRSk7CisJCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmZGV2LT53cWUsIEhaIC8gMTApOworCQlicmVhazsKKworCWNhc2UgRlBJWF9SRVFfRlJBTUU6CisJCS8qIGdldCBhbiBpbWFnZSAqLworCQlyZXF1ZXN0X2ZyYW1lKGRldik7CisJCWJyZWFrOworCisJY2FzZSBGUElYX05PUDoKKwljYXNlIEZQSVhfUkVBRF9GUkFNRToKKwkJUERFQlVHKERfU1RSRUFNLCAiaW52YWxpZCBzdGF0ZSAlZCIsIGRldi0+c3RhdGUpOworCQlicmVhazsKKwl9Cit9CisKKy8qIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGF0IHByb2JlIHRpbWUgKi8KK3N0YXRpYyBpbnQgc2RfY29uZmlnKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKKwkJY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQoreworCXN0cnVjdCBjYW0gKmNhbSA9ICZnc3BjYV9kZXYtPmNhbTsKKworCWNhbS0+Y2FtX21vZGUgPSBmcGl4X21vZGU7CisJY2FtLT5ubW9kZXMgPSAxOworCWNhbS0+ZXBhZGRyID0gMHgwMTsJLyogdG9kbzogY29ycmVjdCBmb3IgYWxsIGNhbXM/ICovCisJY2FtLT5idWxrX3NpemUgPSBGUElYX01BWF9UUkFOU0ZFUjsKKworLyoJZ3NwY2FfZGV2LT5uYmFsdCA9IDE7CSAqIHVzZSBidWxrIHRyYW5zZmVyICovCisJcmV0dXJuIDA7Cit9CisKKy8qIFN0b3Agc3RyZWFtaW5nIGFuZCBmcmVlIHRoZSByZXNzb3VyY2VzIGFsbG9jYXRlZCBieSBzZF9zdGFydC4gKi8KK3N0YXRpYyB2b2lkIHNkX3N0b3BOKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlzdHJ1Y3QgdXNiX2ZwaXggKmRldiA9IChzdHJ1Y3QgdXNiX2ZwaXggKikgZ3NwY2FfZGV2OworCisJZGV2LT5zdHJlYW1pbmcgPSAwOworCisJLyogU3RvcCB0aGUgc3RhdGUgbWFjaGluZSAqLworCWlmIChkZXYtPnN0YXRlICE9IEZQSVhfTk9QKQorCQl3YWl0X2Zvcl9jb21wbGV0aW9uKCZkZXYtPmNhbl9jbG9zZSk7CisKKwl1c2JfZnJlZV91cmIoZGV2LT5jb250cm9sX3VyYik7CisJZGV2LT5jb250cm9sX3VyYiA9IE5VTEw7Cit9CisKKy8qIEtpbGwgYW4gVVJCIHRoYXQgaGFzbid0IGNvbXBsZXRlZC4gKi8KK3N0YXRpYyB2b2lkIHRpbWVvdXRfa2lsbCh1bnNpZ25lZCBsb25nIGRhdGEpCit7CisJc3RydWN0IHVyYiAqdXJiID0gKHN0cnVjdCB1cmIgKikgZGF0YTsKKworCXVzYl91bmxpbmtfdXJiKHVyYik7Cit9CisKKy8qIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGF0IHByb2JlIGFuZCByZXN1bWUgdGltZSAqLworc3RhdGljIGludCBzZF9pbml0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlzdHJ1Y3QgdXNiX2ZwaXggKmRldiA9IChzdHJ1Y3QgdXNiX2ZwaXggKikgZ3NwY2FfZGV2OworCisJSU5JVF9ERUxBWUVEX1dPUksoJmRldi0+d3FlLCBmcGl4X3NtKTsKKworCWluaXRfdGltZXIoJmRldi0+YnVsa190aW1lcik7CisJZGV2LT5idWxrX3RpbWVyLmZ1bmN0aW9uID0gdGltZW91dF9raWxsOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2Rfc3RhcnQoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCXN0cnVjdCB1c2JfZnBpeCAqZGV2ID0gKHN0cnVjdCB1c2JfZnBpeCAqKSBnc3BjYV9kZXY7CisJaW50IHJldDsKKwlpbnQgc2l6ZV9yZXQ7CisKKwkvKiBSZXNldCBidWxrIGluIGVuZHBvaW50ICovCisJdXNiX2NsZWFyX2hhbHQoZ3NwY2FfZGV2LT5kZXYsIGdzcGNhX2Rldi0+Y2FtLmVwYWRkcik7CisKKwkvKiBJbml0IHRoZSBkZXZpY2UgKi8KKwltZW1zZXQoZ3NwY2FfZGV2LT51c2JfYnVmLCAwLCAxMik7CisJZ3NwY2FfZGV2LT51c2JfYnVmWzBdID0gMHhjNjsKKwlnc3BjYV9kZXYtPnVzYl9idWZbOF0gPSAweDIwOworCisJcmV0ID0gdXNiX2NvbnRyb2xfbXNnKGdzcGNhX2Rldi0+ZGV2LAorCQkJdXNiX3NuZGN0cmxwaXBlKGdzcGNhX2Rldi0+ZGV2LCAwKSwKKwkJCVVTQl9SRVFfR0VUX1NUQVRVUywKKwkJCVVTQl9ESVJfT1VUIHwgVVNCX1RZUEVfQ0xBU1MgfAorCQkJVVNCX1JFQ0lQX0lOVEVSRkFDRSwgMCwgMCwgZ3NwY2FfZGV2LT51c2JfYnVmLAorCQkJMTIsIEZQSVhfVElNRU9VVCk7CisKKwlpZiAocmV0ICE9IDEyKSB7CisJCVBERUJVRyhEX1NUUkVBTSwgInVzYl9jb250cm9sX21zZyBmYWlsZWQgKCVkKSIsIHJldCk7CisJCXJldCA9IC1FSU87CisJCWdvdG8gZXJyb3I7CisJfQorCisJLyogUmVhZCB0aGUgcmVzdWx0IG9mIHRoZSBjb21tYW5kLiBJZ25vcmUgdGhlIHJlc3VsdCwgZm9yIGl0CisJICogdmFyaWVzIHdpdGggdGhlIGRldmljZS4gKi8KKwlyZXQgPSB1c2JfYnVsa19tc2coZ3NwY2FfZGV2LT5kZXYsCisJCQl1c2JfcmN2YnVsa3BpcGUoZ3NwY2FfZGV2LT5kZXYsCisJCQkJCWdzcGNhX2Rldi0+Y2FtLmVwYWRkciksCisJCQlnc3BjYV9kZXYtPnVzYl9idWYsIEZQSVhfTUFYX1RSQU5TRkVSLCAmc2l6ZV9yZXQsCisJCQlGUElYX1RJTUVPVVQpOworCWlmIChyZXQgIT0gMCkgeworCQlQREVCVUcoRF9TVFJFQU0sICJ1c2JfYnVsa19tc2cgZmFpbGVkICglZCkiLCByZXQpOworCQlyZXQgPSAtRUlPOworCQlnb3RvIGVycm9yOworCX0KKworCS8qIFJlcXVlc3QgYSBmcmFtZSwgYnV0IGRvbid0IHJlYWQgaXQgKi8KKwltZW1zZXQoZ3NwY2FfZGV2LT51c2JfYnVmLCAwLCAxMik7CisJZ3NwY2FfZGV2LT51c2JfYnVmWzBdID0gMHhkMzsKKwlnc3BjYV9kZXYtPnVzYl9idWZbN10gPSAweDAxOworCisJcmV0ID0gdXNiX2NvbnRyb2xfbXNnKGdzcGNhX2Rldi0+ZGV2LAorCQkJdXNiX3NuZGN0cmxwaXBlKGdzcGNhX2Rldi0+ZGV2LCAwKSwKKwkJCVVTQl9SRVFfR0VUX1NUQVRVUywKKwkJCVVTQl9ESVJfT1VUIHwgVVNCX1RZUEVfQ0xBU1MgfAorCQkJVVNCX1JFQ0lQX0lOVEVSRkFDRSwgMCwgMCwgZ3NwY2FfZGV2LT51c2JfYnVmLAorCQkJMTIsIEZQSVhfVElNRU9VVCk7CisJaWYgKHJldCAhPSAxMikgeworCQlQREVCVUcoRF9TVFJFQU0sICJ1c2JfY29udHJvbF9tc2cgZmFpbGVkICglZCkiLCByZXQpOworCQlyZXQgPSAtRUlPOworCQlnb3RvIGVycm9yOworCX0KKworCS8qIEFnYWluLCByZXNldCBidWxrIGluIGVuZHBvaW50ICovCisJdXNiX2NsZWFyX2hhbHQoZ3NwY2FfZGV2LT5kZXYsIGdzcGNhX2Rldi0+Y2FtLmVwYWRkcik7CisKKwkvKiBBbGxvY2F0ZSBhIGNvbnRyb2wgVVJCICovCisJZGV2LT5jb250cm9sX3VyYiA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0tFUk5FTCk7CisJaWYgKCFkZXYtPmNvbnRyb2xfdXJiKSB7CisJCVBERUJVRyhEX1NUUkVBTSwgIk5vIGZyZWUgdXJicyBhdmFpbGFibGUiKTsKKwkJcmV0ID0gLUVJTzsKKwkJZ290byBlcnJvcjsKKwl9CisKKwkvKiBWYXJpb3VzIGluaXRpYWxpemF0aW9ucy4gKi8KKwlpbml0X2NvbXBsZXRpb24oJmRldi0+Y2FuX2Nsb3NlKTsKKwlkZXYtPmJ1bGtfdGltZXIuZGF0YSA9ICh1bnNpZ25lZCBsb25nKWRldi0+Z3NwY2FfZGV2LnVyYlswXTsKKwlkZXYtPmdzcGNhX2Rldi51cmJbMF0tPmNvbXBsZXRlID0gdXJiX2NhbGxiYWNrOworCWRldi0+c3RyZWFtaW5nID0gMTsKKworCS8qIFNjaGVkdWxlIGEgZnJhbWUgcmVxdWVzdC4gKi8KKwlkZXZfbmV3X3N0YXRlKEZQSVhfUkVRX0ZSQU1FKTsKKwlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJmRldi0+d3FlLCAxKTsKKworCXJldHVybiAwOworCitlcnJvcjoKKwkvKiBGcmVlIHRoZSByZXNzb3VyY2VzICovCisJc2Rfc3RvcE4oZ3NwY2FfZGV2KTsKKwlyZXR1cm4gcmV0OworfQorCisvKiBUYWJsZSBvZiBzdXBwb3J0ZWQgVVNCIGRldmljZXMgKi8KK3N0YXRpYyBjb25zdCBfX2RldmluaXRkYXRhIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGRldmljZV90YWJsZVtdID0geworCXtVU0JfREVWSUNFKDB4MDRjYiwgMHgwMTA0KX0sCisJe1VTQl9ERVZJQ0UoMHgwNGNiLCAweDAxMDkpfSwKKwl7VVNCX0RFVklDRSgweDA0Y2IsIDB4MDEwYil9LAorCXtVU0JfREVWSUNFKDB4MDRjYiwgMHgwMTBmKX0sCisJe1VTQl9ERVZJQ0UoMHgwNGNiLCAweDAxMTEpfSwKKwl7VVNCX0RFVklDRSgweDA0Y2IsIDB4MDExMyl9LAorCXtVU0JfREVWSUNFKDB4MDRjYiwgMHgwMTE1KX0sCisJe1VTQl9ERVZJQ0UoMHgwNGNiLCAweDAxMTcpfSwKKwl7VVNCX0RFVklDRSgweDA0Y2IsIDB4MDExOSl9LAorCXtVU0JfREVWSUNFKDB4MDRjYiwgMHgwMTFiKX0sCisJe1VTQl9ERVZJQ0UoMHgwNGNiLCAweDAxMWQpfSwKKwl7VVNCX0RFVklDRSgweDA0Y2IsIDB4MDEyMSl9LAorCXtVU0JfREVWSUNFKDB4MDRjYiwgMHgwMTIzKX0sCisJe1VTQl9ERVZJQ0UoMHgwNGNiLCAweDAxMjUpfSwKKwl7VVNCX0RFVklDRSgweDA0Y2IsIDB4MDEyNyl9LAorCXtVU0JfREVWSUNFKDB4MDRjYiwgMHgwMTI5KX0sCisJe1VTQl9ERVZJQ0UoMHgwNGNiLCAweDAxMmIpfSwKKwl7VVNCX0RFVklDRSgweDA0Y2IsIDB4MDEyZCl9LAorCXtVU0JfREVWSUNFKDB4MDRjYiwgMHgwMTJmKX0sCisJe1VTQl9ERVZJQ0UoMHgwNGNiLCAweDAxMzEpfSwKKwl7VVNCX0RFVklDRSgweDA0Y2IsIDB4MDEzYil9LAorCXtVU0JfREVWSUNFKDB4MDRjYiwgMHgwMTNkKX0sCisJe1VTQl9ERVZJQ0UoMHgwNGNiLCAweDAxM2YpfSwKKwl7fQorfTsKKworTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIGRldmljZV90YWJsZSk7CisKKy8qIHN1Yi1kcml2ZXIgZGVzY3JpcHRpb24gKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc2RfZGVzYyBzZF9kZXNjID0geworCS5uYW1lID0gTU9EVUxFX05BTUUsCisJLmNvbmZpZyA9IHNkX2NvbmZpZywKKwkuaW5pdCA9IHNkX2luaXQsCisJLnN0YXJ0ID0gc2Rfc3RhcnQsCisJLnN0b3BOID0gc2Rfc3RvcE4sCit9OworCisvKiAtLSBkZXZpY2UgY29ubmVjdCAtLSAqLworc3RhdGljIGludCBzZF9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwKKwkJY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQoreworCXJldHVybiBnc3BjYV9kZXZfcHJvYmUoaW50ZiwgaWQsCisJCQkmc2RfZGVzYywKKwkJCXNpemVvZihzdHJ1Y3QgdXNiX2ZwaXgpLAorCQkJVEhJU19NT0RVTEUpOworfQorCitzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgc2RfZHJpdmVyID0geworCS5uYW1lID0gTU9EVUxFX05BTUUsCisJLmlkX3RhYmxlID0gZGV2aWNlX3RhYmxlLAorCS5wcm9iZSA9IHNkX3Byb2JlLAorCS5kaXNjb25uZWN0ID0gZ3NwY2FfZGlzY29ubmVjdCwKKyNpZmRlZiBDT05GSUdfUE0KKwkuc3VzcGVuZCA9IGdzcGNhX3N1c3BlbmQsCisJLnJlc3VtZSA9IGdzcGNhX3Jlc3VtZSwKKyNlbmRpZgorfTsKKworLyogLS0gbW9kdWxlIGluc2VydCAvIHJlbW92ZSAtLSAqLworc3RhdGljIGludCBfX2luaXQgc2RfbW9kX2luaXQodm9pZCkKK3sKKwlpZiAodXNiX3JlZ2lzdGVyKCZzZF9kcml2ZXIpIDwgMCkKKwkJcmV0dXJuIC0xOworCVBERUJVRyhEX1BST0JFLCAicmVnaXN0ZXJlZCIpOworCXJldHVybiAwOworfQorc3RhdGljIHZvaWQgX19leGl0IHNkX21vZF9leGl0KHZvaWQpCit7CisJdXNiX2RlcmVnaXN0ZXIoJnNkX2RyaXZlcik7CisJUERFQlVHKERfUFJPQkUsICJkZXJlZ2lzdGVyZWQiKTsKK30KKworbW9kdWxlX2luaXQoc2RfbW9kX2luaXQpOworbW9kdWxlX2V4aXQoc2RfbW9kX2V4aXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9nc3BjYS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9nc3BjYS5jCmluZGV4IGFjOTVjNTUuLmU0OGZiZmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvZ3NwY2EuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL2dzcGNhLmMKQEAgLTIxLDYgKzIxLDcgQEAKICNkZWZpbmUgTU9EVUxFX05BTUUgImdzcGNhIgogCiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KICNpbmNsdWRlIDxsaW51eC9mcy5oPgogI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgpAQCAtMjksNiArMzAsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogI2luY2x1ZGUgPGxpbnV4L3BhZ2VtYXAuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2tyZWYuaD4KICNpbmNsdWRlIDxhc20vcGFnZS5oPgogI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxsaW51eC9qaWZmaWVzLmg+CkBAIC00Myw3ICs0NSw3IEBACiBNT0RVTEVfREVTQ1JJUFRJT04oIkdTUENBIFVTQiBDYW1lcmEgRHJpdmVyIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKLSNkZWZpbmUgRFJJVkVSX1ZFUlNJT05fTlVNQkVSCUtFUk5FTF9WRVJTSU9OKDIsIDIsIDApCisjZGVmaW5lIERSSVZFUl9WRVJTSU9OX05VTUJFUglLRVJORUxfVkVSU0lPTigyLCAzLCAwKQogCiBzdGF0aWMgaW50IHZpZGVvX25yID0gLTE7CiAKQEAgLTEwMiw2ICsxMDQsMjIgQEAKIAkuY2xvc2UJCT0gZ3NwY2Ffdm1fY2xvc2UsCiB9OwogCisvKiBnZXQgdGhlIGN1cnJlbnQgaW5wdXQgZnJhbWUgYnVmZmVyICovCitzdHJ1Y3QgZ3NwY2FfZnJhbWUgKmdzcGNhX2dldF9pX2ZyYW1lKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlzdHJ1Y3QgZ3NwY2FfZnJhbWUgKmZyYW1lOworCWludCBpOworCisJaSA9IGdzcGNhX2Rldi0+ZnJfaTsKKwlpID0gZ3NwY2FfZGV2LT5mcl9xdWV1ZVtpXTsKKwlmcmFtZSA9ICZnc3BjYV9kZXYtPmZyYW1lW2ldOworCWlmICgoZnJhbWUtPnY0bDJfYnVmLmZsYWdzICYgQlVGX0FMTF9GTEFHUykKKwkJCQkhPSBWNEwyX0JVRl9GTEFHX1FVRVVFRCkKKwkJcmV0dXJuIE5VTEw7CisJcmV0dXJuIGZyYW1lOworfQorRVhQT1JUX1NZTUJPTChnc3BjYV9nZXRfaV9mcmFtZSk7CisKIC8qCiAgKiBmaWxsIGEgdmlkZW8gZnJhbWUgZnJvbSBhbiBVUkIgYW5kIHJlc3VibWl0CiAgKi8KQEAgLTExMCw3ICsxMjgsNyBAQAogewogCXN0cnVjdCBnc3BjYV9mcmFtZSAqZnJhbWU7CiAJX191OCAqZGF0YTsJCS8qIGFkZHJlc3Mgb2YgZGF0YSBpbiB0aGUgaXNvIG1lc3NhZ2UgKi8KLQlpbnQgaSwgaiwgbGVuLCBzdDsKKwlpbnQgaSwgbGVuLCBzdDsKIAljYW1fcGt0X29wIHBrdF9zY2FuOwogCiAJaWYgKHVyYi0+c3RhdHVzICE9IDApIHsKQEAgLTEyNCwxMSArMTQyLDggQEAKIAlmb3IgKGkgPSAwOyBpIDwgdXJiLT5udW1iZXJfb2ZfcGFja2V0czsgaSsrKSB7CiAKIAkJLyogY2hlY2sgdGhlIGF2YWlsYWJpbGl0eSBvZiB0aGUgZnJhbWUgYnVmZmVyICovCi0JCWogPSBnc3BjYV9kZXYtPmZyX2k7Ci0JCWogPSBnc3BjYV9kZXYtPmZyX3F1ZXVlW2pdOwotCQlmcmFtZSA9ICZnc3BjYV9kZXYtPmZyYW1lW2pdOwotCQlpZiAoKGZyYW1lLT52NGwyX2J1Zi5mbGFncyAmIEJVRl9BTExfRkxBR1MpCi0JCQkJCSE9IFY0TDJfQlVGX0ZMQUdfUVVFVUVEKSB7CisJCWZyYW1lID0gZ3NwY2FfZ2V0X2lfZnJhbWUoZ3NwY2FfZGV2KTsKKwkJaWYgKCFmcmFtZSkgewogCQkJZ3NwY2FfZGV2LT5sYXN0X3BhY2tldF90eXBlID0gRElTQ0FSRF9QQUNLRVQ7CiAJCQlicmVhazsKIAkJfQpAQCAtMTc4LDYgKzE5MywzOSBAQAogfQogCiAvKgorICogYnVsayBtZXNzYWdlIGludGVycnVwdCBmcm9tIHRoZSBVU0IgZGV2aWNlCisgKi8KK3N0YXRpYyB2b2lkIGJ1bGtfaXJxKHN0cnVjdCB1cmIgKnVyYgorKQoreworCXN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiA9IChzdHJ1Y3QgZ3NwY2FfZGV2ICopIHVyYi0+Y29udGV4dDsKKwlzdHJ1Y3QgZ3NwY2FfZnJhbWUgKmZyYW1lOworCisJUERFQlVHKERfUEFDSywgImJ1bGsgaXJxIik7CisJaWYgKCFnc3BjYV9kZXYtPnN0cmVhbWluZykKKwkJcmV0dXJuOworCWlmICh1cmItPnN0YXR1cyAhPSAwICYmIHVyYi0+c3RhdHVzICE9IC1FQ09OTlJFU0VUKSB7CisjaWZkZWYgQ09ORklHX1BNCisJCWlmICghZ3NwY2FfZGV2LT5mcm96ZW4pCisjZW5kaWYKKwkJCVBERUJVRyhEX0VSUnxEX1BBQ0ssICJ1cmIgc3RhdHVzOiAlZCIsIHVyYi0+c3RhdHVzKTsKKwkJcmV0dXJuOwkJLyogZGlzY29ubmVjdGlvbiA/ICovCisJfQorCisJLyogY2hlY2sgdGhlIGF2YWlsYWJpbGl0eSBvZiB0aGUgZnJhbWUgYnVmZmVyICovCisJZnJhbWUgPSBnc3BjYV9nZXRfaV9mcmFtZShnc3BjYV9kZXYpOworCWlmICghZnJhbWUpIHsKKwkJZ3NwY2FfZGV2LT5sYXN0X3BhY2tldF90eXBlID0gRElTQ0FSRF9QQUNLRVQ7CisJfSBlbHNlIHsKKwkJUERFQlVHKERfUEFDSywgInBhY2tldCBsOiVkIiwgdXJiLT5hY3R1YWxfbGVuZ3RoKTsKKwkJZ3NwY2FfZGV2LT5zZF9kZXNjLT5wa3Rfc2Nhbihnc3BjYV9kZXYsCisJCQkJCWZyYW1lLAorCQkJCQl1cmItPnRyYW5zZmVyX2J1ZmZlciwKKwkJCQkJdXJiLT5hY3R1YWxfbGVuZ3RoKTsKKwl9Cit9CisKKy8qCiAgKiBhZGQgZGF0YSB0byB0aGUgY3VycmVudCBmcmFtZQogICoKICAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGJ5IHRoZSBzdWJkcml2ZXJzIGF0IGludGVycnVwdCBsZXZlbC4KQEAgLTE5MCw3ICsyMzgsNyBAQAogICogT24gTEFTVF9QQUNLRVQsIGEgbmV3IGZyYW1lIGlzIHJldHVybmVkLgogICovCiBzdHJ1Y3QgZ3NwY2FfZnJhbWUgKmdzcGNhX2ZyYW1lX2FkZChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCi0JCQkJICAgIGludCBwYWNrZXRfdHlwZSwKKwkJCQkgICAgZW51bSBnc3BjYV9wYWNrZXRfdHlwZSBwYWNrZXRfdHlwZSwKIAkJCQkgICAgc3RydWN0IGdzcGNhX2ZyYW1lICpmcmFtZSwKIAkJCQkgICAgY29uc3QgX191OCAqZGF0YSwKIAkJCQkgICAgaW50IGxlbikKQEAgLTIzMiw3ICsyODAsNyBAQAogCX0KIAlnc3BjYV9kZXYtPmxhc3RfcGFja2V0X3R5cGUgPSBwYWNrZXRfdHlwZTsKIAotCS8qIGlmIGxhc3QgcGFja2V0LCB3YWtlIHRoZSBhcHBsaWNhdGlvbiBhbmQgYWR2YW5jZSBpbiB0aGUgcXVldWUgKi8KKwkvKiBpZiBsYXN0IHBhY2tldCwgd2FrZSB1cCB0aGUgYXBwbGljYXRpb24gYW5kIGFkdmFuY2UgaW4gdGhlIHF1ZXVlICovCiAJaWYgKHBhY2tldF90eXBlID09IExBU1RfUEFDS0VUKSB7CiAJCWZyYW1lLT52NGwyX2J1Zi5ieXRlc3VzZWQgPSBmcmFtZS0+ZGF0YV9lbmQgLSBmcmFtZS0+ZGF0YTsKIAkJZnJhbWUtPnY0bDJfYnVmLmZsYWdzICY9IH5WNEwyX0JVRl9GTEFHX1FVRVVFRDsKQEAgLTI3MCw3ICszMTgsNiBAQAogCXZvaWQgKm1lbTsKIAl1bnNpZ25lZCBsb25nIGFkcjsKIAotLyoJc2l6ZSA9IFBBR0VfQUxJR04oc2l6ZSk7CShhbHJlYWR5IGRvbmUpICovCiAJbWVtID0gdm1hbGxvY18zMihzaXplKTsKIAlpZiAobWVtICE9IE5VTEwpIHsKIAkJYWRyID0gKHVuc2lnbmVkIGxvbmcpIG1lbTsKQEAgLTM1Nyw3ICs0MDQsNyBAQAogCXVuc2lnbmVkIGludCBpOwogCiAJUERFQlVHKERfU1RSRUFNLCAia2lsbCB0cmFuc2ZlciIpOwotCWZvciAoaSA9IDA7IGkgPCBNQVhfTlVSQlM7ICsraSkgeworCWZvciAoaSA9IDA7IGkgPCBNQVhfTlVSQlM7IGkrKykgewogCQl1cmIgPSBnc3BjYV9kZXYtPnVyYltpXTsKIAkJaWYgKHVyYiA9PSBOVUxMKQogCQkJYnJlYWs7CkBAIC0zNzQsMTAgKzQyMSwxMSBAQAogfQogCiAvKgotICogc2VhcmNoIGFuIGlucHV0IGlzb2Nocm9ub3VzIGVuZHBvaW50IGluIGFuIGFsdGVybmF0ZSBzZXR0aW5nCisgKiBsb29rIGZvciBhbiBpbnB1dCB0cmFuc2ZlciBlbmRwb2ludCBpbiBhbiBhbHRlcm5hdGUgc2V0dGluZwogICovCi1zdGF0aWMgc3RydWN0IHVzYl9ob3N0X2VuZHBvaW50ICphbHRfaXNvYyhzdHJ1Y3QgdXNiX2hvc3RfaW50ZXJmYWNlICphbHQsCi0JCQkJCSAgX191OCBlcGFkZHIpCitzdGF0aWMgc3RydWN0IHVzYl9ob3N0X2VuZHBvaW50ICphbHRfeGZlcihzdHJ1Y3QgdXNiX2hvc3RfaW50ZXJmYWNlICphbHQsCisJCQkJCSAgX191OCBlcGFkZHIsCisJCQkJCSAgX191OCB4ZmVyKQogewogCXN0cnVjdCB1c2JfaG9zdF9lbmRwb2ludCAqZXA7CiAJaW50IGksIGF0dHI7CkBAIC0zODgsNyArNDM2LDcgQEAKIAkJaWYgKGVwLT5kZXNjLmJFbmRwb2ludEFkZHJlc3MgPT0gZXBhZGRyKSB7CiAJCQlhdHRyID0gZXAtPmRlc2MuYm1BdHRyaWJ1dGVzCiAJCQkJCQkmIFVTQl9FTkRQT0lOVF9YRkVSVFlQRV9NQVNLOwotCQkJaWYgKGF0dHIgPT0gVVNCX0VORFBPSU5UX1hGRVJfSVNPQykKKwkJCWlmIChhdHRyID09IHhmZXIpCiAJCQkJcmV0dXJuIGVwOwogCQkJYnJlYWs7CiAJCX0KQEAgLTM5NywxNCArNDQ1LDE0IEBACiB9CiAKIC8qCi0gKiBzZWFyY2ggYW4gaW5wdXQgaXNvY2hyb25vdXMgZW5kcG9pbnQKKyAqIGxvb2sgZm9yIGFuIGlucHV0IChpc29jIG9yIGJ1bGspIGVuZHBvaW50CiAgKgogICogVGhlIGVuZHBvaW50IGlzIGRlZmluZWQgYnkgdGhlIHN1YmRyaXZlci4KICAqIFVzZSBvbmx5IHRoZSBmaXJzdCBpc29jIChzb21lIFpvcmFuIC0gMHgwNTcyOjB4MDAwMSAtIGhhdmUgdHdvIHN1Y2ggZXApLgogICogVGhpcyByb3V0aW5lIG1heSBiZSBjYWxsZWQgbWFueSB0aW1lcyB3aGVuIHRoZSBiYW5kd2lkdGggaXMgdG9vIHNtYWxsCiAgKiAodGhlIGJhbmR3aWR0aCBpcyBjaGVja2VkIG9uIHVyYiBzdWJtaXQpLgogICovCi1zdGF0aWMgc3RydWN0IHVzYl9ob3N0X2VuZHBvaW50ICpnZXRfaXNvY19lcChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCitzdGF0aWMgc3RydWN0IHVzYl9ob3N0X2VuZHBvaW50ICpnZXRfZXAoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQogewogCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmOwogCXN0cnVjdCB1c2JfaG9zdF9lbmRwb2ludCAqZXA7CkBAIC00MTMsMjggKzQ2MSw0MSBAQAogCWludGYgPSB1c2JfaWZudW1fdG9faWYoZ3NwY2FfZGV2LT5kZXYsIGdzcGNhX2Rldi0+aWZhY2UpOwogCWVwID0gTlVMTDsKIAlpID0gZ3NwY2FfZGV2LT5hbHQ7CQkJLyogcHJldmlvdXMgYWx0IHNldHRpbmcgKi8KKworCS8qIHRyeSBpc29jICovCiAJd2hpbGUgKC0taSA+IDApIHsJCQkvKiBhbHQgMCBpcyB1bnVzYWJsZSAqLwotCQllcCA9IGFsdF9pc29jKCZpbnRmLT5hbHRzZXR0aW5nW2ldLCBnc3BjYV9kZXYtPmNhbS5lcGFkZHIpOworCQllcCA9IGFsdF94ZmVyKCZpbnRmLT5hbHRzZXR0aW5nW2ldLAorCQkJCWdzcGNhX2Rldi0+Y2FtLmVwYWRkciwKKwkJCQlVU0JfRU5EUE9JTlRfWEZFUl9JU09DKTsKIAkJaWYgKGVwKQogCQkJYnJlYWs7CiAJfQorCisJLyogaWYgbm8gaXNvYywgdHJ5IGJ1bGsgKi8KIAlpZiAoZXAgPT0gTlVMTCkgewotCQllcnIoIm5vIElTT0MgZW5kcG9pbnQgZm91bmQiKTsKLQkJcmV0dXJuIE5VTEw7CisJCWVwID0gYWx0X3hmZXIoJmludGYtPmFsdHNldHRpbmdbMF0sCisJCQkJZ3NwY2FfZGV2LT5jYW0uZXBhZGRyLAorCQkJCVVTQl9FTkRQT0lOVF9YRkVSX0JVTEspOworCQlpZiAoZXAgPT0gTlVMTCkgeworCQkJZXJyKCJubyB0cmFuc2ZlciBlbmRwb2ludCBmb3VuZCIpOworCQkJcmV0dXJuIE5VTEw7CisJCX0KIAl9Ci0JUERFQlVHKERfU1RSRUFNLCAidXNlIElTT0MgYWx0ICVkIGVwIDB4JTAyeCIsCisJUERFQlVHKERfU1RSRUFNLCAidXNlIGFsdCAlZCBlcCAweCUwMngiLAogCQkJaSwgZXAtPmRlc2MuYkVuZHBvaW50QWRkcmVzcyk7Ci0JcmV0ID0gdXNiX3NldF9pbnRlcmZhY2UoZ3NwY2FfZGV2LT5kZXYsIGdzcGNhX2Rldi0+aWZhY2UsIGkpOwotCWlmIChyZXQgPCAwKSB7Ci0JCWVycigic2V0IGludGVyZmFjZSBlcnIgJWQiLCByZXQpOwotCQlyZXR1cm4gTlVMTDsKKwlpZiAoaSA+IDApIHsKKwkJcmV0ID0gdXNiX3NldF9pbnRlcmZhY2UoZ3NwY2FfZGV2LT5kZXYsIGdzcGNhX2Rldi0+aWZhY2UsIGkpOworCQlpZiAocmV0IDwgMCkgeworCQkJZXJyKCJzZXQgaW50ZXJmYWNlIGVyciAlZCIsIHJldCk7CisJCQlyZXR1cm4gTlVMTDsKKwkJfQogCX0KIAlnc3BjYV9kZXYtPmFsdCA9IGk7CQkvKiBtZW1vcml6ZSB0aGUgY3VycmVudCBhbHQgc2V0dGluZyAqLwogCXJldHVybiBlcDsKIH0KIAogLyoKLSAqIGNyZWF0ZSB0aGUgaXNvY2hyb25vdXMgVVJCcworICogY3JlYXRlIHRoZSBVUkJzIGZvciBpbWFnZSB0cmFuc2ZlcgogICovCiBzdGF0aWMgaW50IGNyZWF0ZV91cmJzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKIAkJCXN0cnVjdCB1c2JfaG9zdF9lbmRwb2ludCAqZXApCkBAIC00NDUsMTUgKzUwNiwyNyBAQAogCS8qIGNhbGN1bGF0ZSB0aGUgcGFja2V0IHNpemUgYW5kIHRoZSBudW1iZXIgb2YgcGFja2V0cyAqLwogCXBzaXplID0gbGUxNl90b19jcHUoZXAtPmRlc2Mud01heFBhY2tldFNpemUpOwogCi0JLyogU2VlIHBhcmFncmFwaCA1LjkgLyB0YWJsZSA1LTExIG9mIHRoZSB1c2IgMi4wIHNwZWMuICovCi0JcHNpemUgPSAocHNpemUgJiAweDA3ZmYpICogKDEgKyAoKHBzaXplID4+IDExKSAmIDMpKTsKLQlucGt0ID0gSVNPX01BWF9TSVpFIC8gcHNpemU7Ci0JaWYgKG5wa3QgPiBJU09fTUFYX1BLVCkKLQkJbnBrdCA9IElTT19NQVhfUEtUOwotCWJzaXplID0gcHNpemUgKiBucGt0OwotCVBERUJVRyhEX1NUUkVBTSwKLQkJImlzb2MgJWQgcGt0cyBzaXplICVkIChic2l6ZTolZCkiLCBucGt0LCBwc2l6ZSwgYnNpemUpOwotCW51cmJzID0gREVGX05VUkJTOworCWlmIChnc3BjYV9kZXYtPmFsdCAhPSAwKSB7CQkvKiBpc29jICovCisKKwkJLyogU2VlIHBhcmFncmFwaCA1LjkgLyB0YWJsZSA1LTExIG9mIHRoZSB1c2IgMi4wIHNwZWMuICovCisJCXBzaXplID0gKHBzaXplICYgMHgwN2ZmKSAqICgxICsgKChwc2l6ZSA+PiAxMSkgJiAzKSk7CisJCW5wa3QgPSBJU09fTUFYX1NJWkUgLyBwc2l6ZTsKKwkJaWYgKG5wa3QgPiBJU09fTUFYX1BLVCkKKwkJCW5wa3QgPSBJU09fTUFYX1BLVDsKKwkJYnNpemUgPSBwc2l6ZSAqIG5wa3Q7CisJCVBERUJVRyhEX1NUUkVBTSwKKwkJCSJpc29jICVkIHBrdHMgc2l6ZSAlZCA9IGJzaXplOiVkIiwKKwkJCW5wa3QsIHBzaXplLCBic2l6ZSk7CisJCW51cmJzID0gREVGX05VUkJTOworCX0gZWxzZSB7CQkJCS8qIGJ1bGsgKi8KKwkJbnBrdCA9IDA7CisJCWJzaXplID0gZ3NwY2FfZGV2LT5jYW0uCWJ1bGtfc2l6ZTsKKwkJaWYgKGJzaXplID09IDApCisJCQlic2l6ZSA9IHBzaXplOworCQlQREVCVUcoRF9TVFJFQU0sICJidWxrIGJzaXplOiVkIiwgYnNpemUpOworCQludXJicyA9IDE7CisJfQorCiAJZ3NwY2FfZGV2LT5udXJicyA9IG51cmJzOwogCWZvciAobiA9IDA7IG4gPCBudXJiczsgbisrKSB7CiAJCXVyYiA9IHVzYl9hbGxvY191cmIobnBrdCwgR0ZQX0tFUk5FTCk7CkBAIC00NzYsMTcgKzU0OSwyNCBAQAogCQlnc3BjYV9kZXYtPnVyYltuXSA9IHVyYjsKIAkJdXJiLT5kZXYgPSBnc3BjYV9kZXYtPmRldjsKIAkJdXJiLT5jb250ZXh0ID0gZ3NwY2FfZGV2OwotCQl1cmItPnBpcGUgPSB1c2JfcmN2aXNvY3BpcGUoZ3NwY2FfZGV2LT5kZXYsCi0JCQkJCSAgICBlcC0+ZGVzYy5iRW5kcG9pbnRBZGRyZXNzKTsKLQkJdXJiLT50cmFuc2Zlcl9mbGFncyA9IFVSQl9JU09fQVNBUAotCQkJCQl8IFVSQl9OT19UUkFOU0ZFUl9ETUFfTUFQOwotCQl1cmItPmludGVydmFsID0gZXAtPmRlc2MuYkludGVydmFsOwotCQl1cmItPmNvbXBsZXRlID0gaXNvY19pcnE7Ci0JCXVyYi0+bnVtYmVyX29mX3BhY2tldHMgPSBucGt0OwogCQl1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggPSBic2l6ZTsKLQkJZm9yIChpID0gMDsgaSA8IG5wa3Q7IGkrKykgewotCQkJdXJiLT5pc29fZnJhbWVfZGVzY1tpXS5sZW5ndGggPSBwc2l6ZTsKLQkJCXVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0ub2Zmc2V0ID0gcHNpemUgKiBpOworCQlpZiAobnBrdCAhPSAwKSB7CQkvKiBJU09DICovCisJCQl1cmItPnBpcGUgPSB1c2JfcmN2aXNvY3BpcGUoZ3NwY2FfZGV2LT5kZXYsCisJCQkJCQkgICAgZXAtPmRlc2MuYkVuZHBvaW50QWRkcmVzcyk7CisJCQl1cmItPnRyYW5zZmVyX2ZsYWdzID0gVVJCX0lTT19BU0FQCisJCQkJCXwgVVJCX05PX1RSQU5TRkVSX0RNQV9NQVA7CisJCQl1cmItPmludGVydmFsID0gZXAtPmRlc2MuYkludGVydmFsOworCQkJdXJiLT5jb21wbGV0ZSA9IGlzb2NfaXJxOworCQkJdXJiLT5udW1iZXJfb2ZfcGFja2V0cyA9IG5wa3Q7CisJCQlmb3IgKGkgPSAwOyBpIDwgbnBrdDsgaSsrKSB7CisJCQkJdXJiLT5pc29fZnJhbWVfZGVzY1tpXS5sZW5ndGggPSBwc2l6ZTsKKwkJCQl1cmItPmlzb19mcmFtZV9kZXNjW2ldLm9mZnNldCA9IHBzaXplICogaTsKKwkJCX0KKwkJfSBlbHNlIHsJCS8qIGJ1bGsgKi8KKwkJCXVyYi0+cGlwZSA9IHVzYl9yY3ZidWxrcGlwZShnc3BjYV9kZXYtPmRldiwKKwkJCQkJCWVwLT5kZXNjLmJFbmRwb2ludEFkZHJlc3MpLAorCQkJdXJiLT50cmFuc2Zlcl9mbGFncyA9IFVSQl9OT19UUkFOU0ZFUl9ETUFfTUFQOworCQkJdXJiLT5jb21wbGV0ZSA9IGJ1bGtfaXJxOwogCQl9CiAJfQogCXJldHVybiAwOwpAQCAtNTA4LDcgKzU4OCw3IEBACiAJZ3NwY2FfZGV2LT5hbHQgPSBnc3BjYV9kZXYtPm5iYWx0OwogCWZvciAoOzspIHsKIAkJUERFQlVHKERfU1RSRUFNLCAiaW5pdCB0cmFuc2ZlciBhbHQgJWQiLCBnc3BjYV9kZXYtPmFsdCk7Ci0JCWVwID0gZ2V0X2lzb2NfZXAoZ3NwY2FfZGV2KTsKKwkJZXAgPSBnZXRfZXAoZ3NwY2FfZGV2KTsKIAkJaWYgKGVwID09IE5VTEwpIHsKIAkJCXJldCA9IC1FSU87CiAJCQlnb3RvIG91dDsKQEAgLTUxOCwxMCArNTk4LDE4IEBACiAJCQlnb3RvIG91dDsKIAogCQkvKiBzdGFydCB0aGUgY2FtICovCi0JCWdzcGNhX2Rldi0+c2RfZGVzYy0+c3RhcnQoZ3NwY2FfZGV2KTsKKwkJcmV0ID0gZ3NwY2FfZGV2LT5zZF9kZXNjLT5zdGFydChnc3BjYV9kZXYpOworCQlpZiAocmV0IDwgMCkgeworCQkJZGVzdHJveV91cmJzKGdzcGNhX2Rldik7CisJCQlnb3RvIG91dDsKKwkJfQogCQlnc3BjYV9kZXYtPnN0cmVhbWluZyA9IDE7CiAJCWF0b21pY19zZXQoJmdzcGNhX2Rldi0+bmV2ZW50LCAwKTsKIAorCQkvKiBidWxrIHRyYW5zZmVycyBhcmUgc3RhcnRlZCBieSB0aGUgc3ViZHJpdmVyICovCisJCWlmIChnc3BjYV9kZXYtPmFsdCA9PSAwKQorCQkJYnJlYWs7CisKIAkJLyogc3VibWl0IHRoZSBVUkJzICovCiAJCWZvciAobiA9IDA7IG4gPCBnc3BjYV9kZXYtPm51cmJzOyBuKyspIHsKIAkJCXJldCA9IHVzYl9zdWJtaXRfdXJiKGdzcGNhX2Rldi0+dXJiW25dLCBHRlBfS0VSTkVMKTsKQEAgLTU1Myw3ICs2NDEsNyBAQAogCXJldHVybiByZXQ7CiB9CiAKLS8qIE5vdGUgYm90aCB0aGUgcXVldWUgYW5kIHRoZSB1c2IgbG9jayBzaG91bGQgYmUgaG9sZCB3aGVuIGNhbGxpbmcgdGhpcyAqLworLyogTm90ZTogYm90aCB0aGUgcXVldWUgYW5kIHRoZSB1c2IgbG9ja3Mgc2hvdWxkIGJlIGhlbGQgd2hlbiBjYWxsaW5nIHRoaXMgKi8KIHN0YXRpYyB2b2lkIGdzcGNhX3N0cmVhbV9vZmYoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQogewogCWdzcGNhX2Rldi0+c3RyZWFtaW5nID0gMDsKQEAgLTc1OSw2ICs4NDcsMTYgQEAKIAlyZXR1cm4gcmV0OwogfQogCitzdGF0aWMgdm9pZCBnc3BjYV9kZWxldGUoc3RydWN0IGtyZWYgKmtyZWYpCit7CisJc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2ID0gY29udGFpbmVyX29mKGtyZWYsIHN0cnVjdCBnc3BjYV9kZXYsIGtyZWYpOworCisJUERFQlVHKERfU1RSRUFNLCAiZGV2aWNlIGRlbGV0ZWQiKTsKKworCWtmcmVlKGdzcGNhX2Rldi0+dXNiX2J1Zik7CisJa2ZyZWUoZ3NwY2FfZGV2KTsKK30KKwogc3RhdGljIGludCBkZXZfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKIAlzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXY7CkBAIC03NzgsMTMgKzg3NiwxOSBAQAogCQlnb3RvIG91dDsKIAl9CiAJZ3NwY2FfZGV2LT51c2VycysrOworCisJLyogb25lIG1vcmUgdXNlciAqLworCWtyZWZfZ2V0KCZnc3BjYV9kZXYtPmtyZWYpOworCiAJZmlsZS0+cHJpdmF0ZV9kYXRhID0gZ3NwY2FfZGV2OwogI2lmZGVmIEdTUENBX0RFQlVHCiAJLyogYWN0aXZhdGUgdGhlIHY0bDIgZGVidWcgKi8KIAlpZiAoZ3NwY2FfZGVidWcgJiBEX1Y0TDIpCi0JCWdzcGNhX2Rldi0+dmRldi5kZWJ1ZyB8PSAzOworCQlnc3BjYV9kZXYtPnZkZXYuZGVidWcgfD0gVjRMMl9ERUJVR19JT0NUTAorCQkJCQl8IFY0TDJfREVCVUdfSU9DVExfQVJHOwogCWVsc2UKLQkJZ3NwY2FfZGV2LT52ZGV2LmRlYnVnICY9IH4zOworCQlnc3BjYV9kZXYtPnZkZXYuZGVidWcgJj0gfihWNEwyX0RFQlVHX0lPQ1RMCisJCQkJCXwgVjRMMl9ERUJVR19JT0NUTF9BUkcpOwogI2VuZGlmCiAJcmV0ID0gMDsKIG91dDoKQEAgLTgxOCw3ICs5MjIsMTEgQEAKIAl9CiAJZmlsZS0+cHJpdmF0ZV9kYXRhID0gTlVMTDsKIAltdXRleF91bmxvY2soJmdzcGNhX2Rldi0+cXVldWVfbG9jayk7CisKIAlQREVCVUcoRF9TVFJFQU0sICJjbG9zZSBkb25lIik7CisKKwlrcmVmX3B1dCgmZ3NwY2FfZGV2LT5rcmVmLCBnc3BjYV9kZWxldGUpOworCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTgyOSw3ICs5MzcsNiBAQAogCiAJbWVtc2V0KGNhcCwgMCwgc2l6ZW9mICpjYXApOwogCXN0cm5jcHkoY2FwLT5kcml2ZXIsIGdzcGNhX2Rldi0+c2RfZGVzYy0+bmFtZSwgc2l6ZW9mIGNhcC0+ZHJpdmVyKTsKLS8qCXN0cm5jcHkoY2FwLT5jYXJkLCBnc3BjYV9kZXYtPmNhbS5kZXZfbmFtZSwgc2l6ZW9mIGNhcC0+Y2FyZCk7ICovCiAJaWYgKGdzcGNhX2Rldi0+ZGV2LT5wcm9kdWN0ICE9IE5VTEwpIHsKIAkJc3RybmNweShjYXAtPmNhcmQsIGdzcGNhX2Rldi0+ZGV2LT5wcm9kdWN0LAogCQkJc2l6ZW9mIGNhcC0+Y2FyZCk7CkBAIC0xNDYzLDcgKzE1NzAsNiBAQAogCX0KIAogCWZyYW1lLT52NGwyX2J1Zi5mbGFncyB8PSBWNEwyX0JVRl9GTEFHX1FVRVVFRDsKLS8qCWZyYW1lLT52NGwyX2J1Zi5mbGFncyAmPSB+VjRMMl9CVUZfRkxBR19ET05FOyAqLwogCiAJaWYgKGZyYW1lLT52NGwyX2J1Zi5tZW1vcnkgPT0gVjRMMl9NRU1PUllfVVNFUlBUUikgewogCQlmcmFtZS0+djRsMl9idWYubS51c2VycHRyID0gdjRsMl9idWYtPm0udXNlcnB0cjsKQEAgLTE2MTAsNyArMTcxNiw3IEBACiAJCX0KIAogCQkvKiBpZiB0aGUgcHJvY2VzcyBzbGVwdCBmb3IgbW9yZSB0aGFuIDEgc2Vjb25kLAotCQkgKiBnZXQgYW5ld2VyIGZyYW1lICovCisJCSAqIGdldCBhIG5ld2VyIGZyYW1lICovCiAJCWZyYW1lID0gJmdzcGNhX2Rldi0+ZnJhbWVbdjRsMl9idWYuaW5kZXhdOwogCQlpZiAoLS1uIDwgMCkKIAkJCWJyZWFrOwkJCS8qIGF2b2lkIGluZmluaXRlIGxvb3AgKi8KQEAgLTE3MjgsMjEgKzE4MzQsMjEgQEAKIAlpZiAoZGV2X3NpemUgPCBzaXplb2YgKmdzcGNhX2RldikKIAkJZGV2X3NpemUgPSBzaXplb2YgKmdzcGNhX2RldjsKIAlnc3BjYV9kZXYgPSBremFsbG9jKGRldl9zaXplLCBHRlBfS0VSTkVMKTsKLQlpZiAoZ3NwY2FfZGV2ID09IE5VTEwpIHsKKwlpZiAoIWdzcGNhX2RldikgewogCQllcnIoImNvdWxkbid0IGt6YWxsb2MgZ3NwY2Egc3RydWN0Iik7Ci0JCXJldHVybiAtRUlPOworCQlyZXR1cm4gLUVOT01FTTsKIAl9CisJa3JlZl9pbml0KCZnc3BjYV9kZXYtPmtyZWYpOwogCWdzcGNhX2Rldi0+dXNiX2J1ZiA9IGttYWxsb2MoVVNCX0JVRl9TWiwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFnc3BjYV9kZXYtPnVzYl9idWYpIHsKIAkJZXJyKCJvdXQgb2YgbWVtb3J5Iik7Ci0JCXJldCA9IC1FSU87CisJCXJldCA9IC1FTk9NRU07CiAJCWdvdG8gb3V0OwogCX0KIAlnc3BjYV9kZXYtPmRldiA9IGRldjsKIAlnc3BjYV9kZXYtPmlmYWNlID0gaW50ZXJmYWNlLT5iSW50ZXJmYWNlTnVtYmVyOwogCWdzcGNhX2Rldi0+bmJhbHQgPSBpbnRmLT5udW1fYWx0c2V0dGluZzsKIAlnc3BjYV9kZXYtPnNkX2Rlc2MgPSBzZF9kZXNjOwotLyoJZ3NwY2FfZGV2LT51c2VycyA9IDA7CQkJKGRvbmUgYnkga3phbGxvYykgKi8KIAlnc3BjYV9kZXYtPm5idWZyZWFkID0gMjsKIAogCS8qIGNvbmZpZ3VyZSB0aGUgc3ViZHJpdmVyIGFuZCBpbml0aWFsaXplIHRoZSBVU0IgZGV2aWNlICovCkBAIC0xNzgxLDggKzE4ODcsNyBAQAogCVBERUJVRyhEX1BST0JFLCAicHJvYmUgb2siKTsKIAlyZXR1cm4gMDsKIG91dDoKLQlrZnJlZShnc3BjYV9kZXYtPnVzYl9idWYpOwotCWtmcmVlKGdzcGNhX2Rldik7CisJa3JlZl9wdXQoJmdzcGNhX2Rldi0+a3JlZiwgZ3NwY2FfZGVsZXRlKTsKIAlyZXR1cm4gcmV0OwogfQogRVhQT1JUX1NZTUJPTChnc3BjYV9kZXZfcHJvYmUpOwpAQCAtMTc5NywyNSArMTkwMiwxNiBAQAogewogCXN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiA9IHVzYl9nZXRfaW50ZmRhdGEoaW50Zik7CiAKLQlpZiAoIWdzcGNhX2RldikKLQkJcmV0dXJuOwotCWdzcGNhX2Rldi0+cHJlc2VudCA9IDA7Ci0JbXV0ZXhfbG9jaygmZ3NwY2FfZGV2LT5xdWV1ZV9sb2NrKTsKLQltdXRleF9sb2NrKCZnc3BjYV9kZXYtPnVzYl9sb2NrKTsKLQlnc3BjYV9kZXYtPnN0cmVhbWluZyA9IDA7Ci0JZGVzdHJveV91cmJzKGdzcGNhX2Rldik7Ci0JbXV0ZXhfdW5sb2NrKCZnc3BjYV9kZXYtPnVzYl9sb2NrKTsKLQltdXRleF91bmxvY2soJmdzcGNhX2Rldi0+cXVldWVfbG9jayk7Ci0Jd2hpbGUgKGdzcGNhX2Rldi0+dXNlcnMgIT0gMCkgewkJLyogd2FpdCB1bnRpbCBmdWxseSBjbG9zZWQgKi8KLQkJYXRvbWljX2luYygmZ3NwY2FfZGV2LT5uZXZlbnQpOwotCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJmdzcGNhX2Rldi0+d3EpOwkvKiB3YWtlIHByb2Nlc3NlcyAqLwotCQlzY2hlZHVsZSgpOwotCX0KKwl1c2Jfc2V0X2ludGZkYXRhKGludGYsIE5VTEwpOworCiAvKiBXZSBkb24ndCB3YW50IHBlb3BsZSB0cnlpbmcgdG8gb3BlbiB1cCB0aGUgZGV2aWNlICovCiAJdmlkZW9fdW5yZWdpc3Rlcl9kZXZpY2UoJmdzcGNhX2Rldi0+dmRldik7Ci0vKiBGcmVlIHRoZSBtZW1vcnkgKi8KLQlrZnJlZShnc3BjYV9kZXYtPnVzYl9idWYpOwotCWtmcmVlKGdzcGNhX2Rldik7CisKKwlnc3BjYV9kZXYtPnByZXNlbnQgPSAwOworCWdzcGNhX2Rldi0+c3RyZWFtaW5nID0gMDsKKworCWtyZWZfcHV0KCZnc3BjYV9kZXYtPmtyZWYsIGdzcGNhX2RlbGV0ZSk7CisKIAlQREVCVUcoRF9QUk9CRSwgImRpc2Nvbm5lY3QgY29tcGxldGUiKTsKIH0KIEVYUE9SVF9TWU1CT0woZ3NwY2FfZGlzY29ubmVjdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL2dzcGNhLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL2dzcGNhLmgKaW5kZXggYzE3NjI1Yy4uMWQ5ZGM5MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9nc3BjYS5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvZ3NwY2EuaApAQCAtMiw3ICsyLDYgQEAKICNkZWZpbmUgR1NQQ0FWMl9ICiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvdXNiLmg+CiAjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYyLmg+CkBAIC00OSwxMyArNDgsMTQgQEAKIAl9IHdoaWxlICgwKQogCiAjZGVmaW5lIEdTUENBX01BWF9GUkFNRVMgMTYJLyogbWF4aW11bSBudW1iZXIgb2YgdmlkZW8gZnJhbWUgYnVmZmVycyAqLwotLyogSVNPQyB0cmFuc2ZlcnMgKi8KLSNkZWZpbmUgTUFYX05VUkJTIDE2CQkvKiBtYXggbnVtYmVyIG9mIFVSQnMgKi8KKy8qIGltYWdlIHRyYW5zZmVycyAqLworI2RlZmluZSBNQVhfTlVSQlMgNAkJLyogbWF4IG51bWJlciBvZiBVUkJzICovCiAjZGVmaW5lIElTT19NQVhfUEtUIDMyCQkvKiBtYXggbnVtYmVyIG9mIHBhY2tldHMgaW4gYW4gSVNPQyB0cmFuc2ZlciAqLwogI2RlZmluZSBJU09fTUFYX1NJWkUgMHg4MDAwCS8qIG1heCBzaXplIG9mIG9uZSBVUkIgYnVmZmVyICgzMiBLYikgKi8KIAogLyogZGV2aWNlIGluZm9ybWF0aW9uIC0gc2V0IGF0IHByb2JlIHRpbWUgKi8KIHN0cnVjdCBjYW0geworCWludCBidWxrX3NpemU7CQkvKiBidWZmZXIgc2l6ZSB3aGVuIGltYWdlIHRyYW5zZmVyIGJ5IGJ1bGsgKi8KIAlzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0ICpjYW1fbW9kZTsJLyogc2l6ZSBubW9kZXMgKi8KIAljaGFyIG5tb2RlczsKIAlfX3U4IGVwYWRkcjsKQEAgLTkzLDcgKzkzLDcgQEAKIC8qIG1hbmRhdG9yeSBvcGVyYXRpb25zICovCiAJY2FtX2NmX29wIGNvbmZpZzsJLyogY2FsbGVkIG9uIHByb2JlICovCiAJY2FtX29wIGluaXQ7CQkvKiBjYWxsZWQgb24gcHJvYmUgYW5kIHJlc3VtZSAqLwotCWNhbV92X29wIHN0YXJ0OwkJLyogY2FsbGVkIG9uIHN0cmVhbSBvbiAqLworCWNhbV9vcCBzdGFydDsJCS8qIGNhbGxlZCBvbiBzdHJlYW0gb24gKi8KIAljYW1fcGt0X29wIHBrdF9zY2FuOwogLyogb3B0aW9uYWwgb3BlcmF0aW9ucyAqLwogCWNhbV92X29wIHN0b3BOOwkJLyogY2FsbGVkIG9uIHN0cmVhbSBvZmYgLSBtYWluIGFsdCAqLwpAQCAtMTA1LDEwICsxMDUsMTIgQEAKIH07CiAKIC8qIHBhY2tldCB0eXBlcyB3aGVuIG1vdmluZyBmcm9tIGlzbyBidWYgdG8gZnJhbWUgYnVmICovCi0jZGVmaW5lIERJU0NBUkRfUEFDS0VUCTAKLSNkZWZpbmUgRklSU1RfUEFDS0VUCTEKLSNkZWZpbmUgSU5URVJfUEFDS0VUCTIKLSNkZWZpbmUgTEFTVF9QQUNLRVQJMworZW51bSBnc3BjYV9wYWNrZXRfdHlwZSB7CisJRElTQ0FSRF9QQUNLRVQsCisJRklSU1RfUEFDS0VULAorCUlOVEVSX1BBQ0tFVCwKKwlMQVNUX1BBQ0tFVAorfTsKIAogc3RydWN0IGdzcGNhX2ZyYW1lIHsKIAlfX3U4ICpkYXRhOwkJCS8qIGZyYW1lIGJ1ZmZlciAqLwpAQCAtMTIxLDYgKzEyMyw3IEBACiAJc3RydWN0IHZpZGVvX2RldmljZSB2ZGV2OwkvKiAhISBtdXN0IGJlIHRoZSBmaXJzdCBpdGVtICovCiAJc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBmb3BzOwogCXN0cnVjdCB1c2JfZGV2aWNlICpkZXY7CisJc3RydWN0IGtyZWYga3JlZjsKIAlzdHJ1Y3QgZmlsZSAqY2FwdF9maWxlOwkJLyogZmlsZSBkb2luZyB2aWRlbyBjYXB0dXJlICovCiAKIAlzdHJ1Y3QgY2FtIGNhbTsJCQkJLyogZGV2aWNlIGluZm9ybWF0aW9uICovCkBAIC0xNzMsMTAgKzE3NiwxMSBAQAogCQlzdHJ1Y3QgbW9kdWxlICptb2R1bGUpOwogdm9pZCBnc3BjYV9kaXNjb25uZWN0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKTsKIHN0cnVjdCBnc3BjYV9mcmFtZSAqZ3NwY2FfZnJhbWVfYWRkKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKLQkJCQkgICAgaW50IHBhY2tldF90eXBlLAorCQkJCSAgICBlbnVtIGdzcGNhX3BhY2tldF90eXBlIHBhY2tldF90eXBlLAogCQkJCSAgICBzdHJ1Y3QgZ3NwY2FfZnJhbWUgKmZyYW1lLAogCQkJCSAgICBjb25zdCBfX3U4ICpkYXRhLAogCQkJCSAgICBpbnQgbGVuKTsKK3N0cnVjdCBnc3BjYV9mcmFtZSAqZ3NwY2FfZ2V0X2lfZnJhbWUoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KTsKICNpZmRlZiBDT05GSUdfUE0KIGludCBnc3BjYV9zdXNwZW5kKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLCBwbV9tZXNzYWdlX3QgbWVzc2FnZSk7CiBpbnQgZ3NwY2FfcmVzdW1lKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvbTU2MDIvS2NvbmZpZyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvbTU2MDIvS2NvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YTY5MDE2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9tNTYwMi9LY29uZmlnCkBAIC0wLDAgKzEsMTEgQEAKK2NvbmZpZyBVU0JfTTU2MDIKKwl0cmlzdGF0ZSAiQUxpIFVTQiBtNTYwMiBDYW1lcmEgRHJpdmVyIgorCWRlcGVuZHMgb24gVklERU9fVjRMMiAmJiBVU0JfR1NQQ0EKKwloZWxwCisJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHN1cHBvcnQgZm9yIGNhbWVyYXMgYmFzZWQgb24gdGhlCisJICBBTGkgbTU2MDIgY29ubmVjdGVkIHRvIHZhcmlvdXMgaW1hZ2Ugc2Vuc29ycy4KKworCSAgU2VlIDxmaWxlOkRvY3VtZW50YXRpb24vdmlkZW80bGludXgvbTU2MDIudHh0PiBmb3IgbW9yZSBpbmZvLgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBnc3BjYV9tNTYwMi4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvbTU2MDIvTWFrZWZpbGUgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL201NjAyL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIyNmFiNGYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL201NjAyL01ha2VmaWxlCkBAIC0wLDAgKzEsMTEgQEAKK29iai0kKENPTkZJR19VU0JfTTU2MDIpICs9IGdzcGNhX201NjAyLm8KKworZ3NwY2FfbTU2MDItb2JqcyA6PSBtNTYwMl9jb3JlLm8gXAorCQkgICAgbTU2MDJfb3Y5NjUwLm8gXAorCQkgICAgbTU2MDJfbXQ5bTExMS5vIFwKKwkJICAgIG01NjAyX3BvMTAzMC5vIFwKKwkJICAgIG01NjAyX3M1azgzYS5vIFwKKwkJICAgIG01NjAyX3M1azRhYS5vCisKK0VYVFJBX0NGTEFHUyArPSAtSWRyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9tNTYwMi9tNTYwMl9icmlkZ2UuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvbTU2MDIvbTU2MDJfYnJpZGdlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWEzN2FlNAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvbTU2MDIvbTU2MDJfYnJpZGdlLmgKQEAgLTAsMCArMSwxNDMgQEAKKy8qCisgKiBVU0IgRHJpdmVyIGZvciBBTGkgbTU2MDIgYmFzZWQgd2ViY2FtcworICoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBFcmlrIEFuZHLDqW4KKyAqIENvcHlyaWdodCAoQykgMjAwNyBJbHllcyBHb3V0YS4gQmFzZWQgb24gdGhlIG01NjAzeCBMaW51eCBEcml2ZXIgUHJvamVjdC4KKyAqIENvcHlyaWdodCAoQykgMjAwNSBtNTYwM3ggTGludXggRHJpdmVyIFByb2plY3QgPG01NjAyQHgzbmcuY29tLmJyPgorICoKKyAqIFBvcnRpb25zIG9mIGNvZGUgdG8gVVNCIGludGVyZmFjZSBhbmQgQUxpIGRyaXZlciBzb2Z0d2FyZSwKKyAqIENvcHlyaWdodCAoYykgMjAwNiBXaWxsZW0gRHVpbmtlcgorICogdjRsMiBpbnRlcmZhY2UgbW9kZWxlZCBhZnRlciB0aGUgVjRMMiBkcml2ZXIKKyAqIGZvciBTTjlDMTB4IFBDIENhbWVyYSBDb250cm9sbGVycworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgdmVyc2lvbiAyLgorICoKKyAqLworCisjaWZuZGVmIE01NjAyX0JSSURHRV9IXworI2RlZmluZSBNNTYwMl9CUklER0VfSF8KKworI2luY2x1ZGUgImdzcGNhLmgiCisKKyNkZWZpbmUgTU9EVUxFX05BTUUgIkFMaSBtNTYwMiIKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjZGVmaW5lIE01NjAyX1hCX1NFTlNPUl9UWVBFIDB4MDAKKyNkZWZpbmUgTTU2MDJfWEJfU0VOU09SX0NUUkwgMHgwMQorI2RlZmluZSBNNTYwMl9YQl9MSU5FX09GX0ZSQU1FX0ggMHgwMgorI2RlZmluZSBNNTYwMl9YQl9MSU5FX09GX0ZSQU1FX0wgMHgwMworI2RlZmluZSBNNTYwMl9YQl9QSVhfT0ZfTElORV9IIDB4MDQKKyNkZWZpbmUgTTU2MDJfWEJfUElYX09GX0xJTkVfTCAweDA1CisjZGVmaW5lIE01NjAyX1hCX1ZTWU5DX1BBUkEgMHgwNgorI2RlZmluZSBNNTYwMl9YQl9IU1lOQ19QQVJBIDB4MDcKKyNkZWZpbmUgTTU2MDJfWEJfVEVTVF9NT0RFXzEgMHgwOAorI2RlZmluZSBNNTYwMl9YQl9URVNUX01PREVfMiAweDA5CisjZGVmaW5lIE01NjAyX1hCX1NJR19JTkkgMHgwYQorI2RlZmluZSBNNTYwMl9YQl9EU19QQVJBIDB4MGUKKyNkZWZpbmUgTTU2MDJfWEJfVFJJR19QQVJBIDB4MGYKKyNkZWZpbmUgTTU2MDJfWEJfQ0xLX1BEIDB4MTAKKyNkZWZpbmUgTTU2MDJfWEJfTUNVX0NMS19DVFJMIDB4MTIKKyNkZWZpbmUgTTU2MDJfWEJfTUNVX0NMS19ESVYgMHgxMworI2RlZmluZSBNNTYwMl9YQl9TRU5fQ0xLX0NUUkwgMHgxNAorI2RlZmluZSBNNTYwMl9YQl9TRU5fQ0xLX0RJViAweDE1CisjZGVmaW5lIE01NjAyX1hCX0FVRF9DTEtfQ1RSTCAweDE2CisjZGVmaW5lIE01NjAyX1hCX0FVRF9DTEtfRElWIDB4MTcKKyNkZWZpbmUgTTU2MDJfWEJfREVWQ1RSMSAweDQxCisjZGVmaW5lIE01NjAyX1hCX0VQU0VUUjAgMHg0MgorI2RlZmluZSBNNTYwMl9YQl9FUEFGQ1RSIDB4NDcKKyNkZWZpbmUgTTU2MDJfWEJfRVBCRkNUUiAweDQ5CisjZGVmaW5lIE01NjAyX1hCX0VQRUZDVFIgMHg0ZgorI2RlZmluZSBNNTYwMl9YQl9URVNUX1JFRyAweDUzCisjZGVmaW5lIE01NjAyX1hCX0FMVDJTSVpFIDB4NTQKKyNkZWZpbmUgTTU2MDJfWEJfQUxUM1NJWkUgMHg1NQorI2RlZmluZSBNNTYwMl9YQl9PQlNGUkFNRSAweDU2CisjZGVmaW5lIE01NjAyX1hCX1BXUl9DVEwgMHg1OQorI2RlZmluZSBNNTYwMl9YQl9BRENfQ1RSTCAweDYwCisjZGVmaW5lIE01NjAyX1hCX0FEQ19EQVRBIDB4NjEKKyNkZWZpbmUgTTU2MDJfWEJfTUlTQ19DVFJMIDB4NjIKKyNkZWZpbmUgTTU2MDJfWEJfU05BUFNIT1QgMHg2MworI2RlZmluZSBNNTYwMl9YQl9TQ1JBVENIXzEgMHg2NAorI2RlZmluZSBNNTYwMl9YQl9TQ1JBVENIXzIgMHg2NQorI2RlZmluZSBNNTYwMl9YQl9TQ1JBVENIXzMgMHg2NgorI2RlZmluZSBNNTYwMl9YQl9TQ1JBVENIXzQgMHg2NworI2RlZmluZSBNNTYwMl9YQl9JMkNfQ1RSTCAweDY4CisjZGVmaW5lIE01NjAyX1hCX0kyQ19DTEtfRElWIDB4NjkKKyNkZWZpbmUgTTU2MDJfWEJfSTJDX0RFVl9BRERSIDB4NmEKKyNkZWZpbmUgTTU2MDJfWEJfSTJDX1JFR19BRERSIDB4NmIKKyNkZWZpbmUgTTU2MDJfWEJfSTJDX0RBVEEgMHg2YworI2RlZmluZSBNNTYwMl9YQl9JMkNfU1RBVFVTIDB4NmQKKyNkZWZpbmUgTTU2MDJfWEJfR1BJT19EQVRfSCAweDcwCisjZGVmaW5lIE01NjAyX1hCX0dQSU9fREFUX0wgMHg3MQorI2RlZmluZSBNNTYwMl9YQl9HUElPX0RJUl9IIDB4NzIKKyNkZWZpbmUgTTU2MDJfWEJfR1BJT19ESVJfTCAweDczCisjZGVmaW5lIE01NjAyX1hCX0dQSU9fRU5fSCAweDc0CisjZGVmaW5lIE01NjAyX1hCX0dQSU9fRU5fTCAweDc1CisjZGVmaW5lIE01NjAyX1hCX0dQSU9fREFUIDB4NzYKKyNkZWZpbmUgTTU2MDJfWEJfR1BJT19ESVIgMHg3NworI2RlZmluZSBNNTYwMl9YQl9NSVNDX0NUTCAweDcwCisKKyNkZWZpbmUgSTJDX0JVU1kgMHg4MAorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIERyaXZlciBpbmZvICovCisjZGVmaW5lIERSSVZFUl9BVVRIT1IgIkFMaSBtNTYwMiBMaW51eCBEcml2ZXIgUHJvamVjdCIKKyNkZWZpbmUgRFJJVkVSX0RFU0MgIkFMaSBtNTYwMiB3ZWJjYW0gZHJpdmVyIgorCisjZGVmaW5lIE01NjAyX0lTT0NfRU5EUE9JTlRfQUREUiAweDgxCisjZGVmaW5lIE01NjAyX0lOVFJfRU5EUE9JTlRfQUREUiAweDgyCisKKyNkZWZpbmUgTTU2MDJfTUFYX0ZSQU1FUwkzMgorI2RlZmluZSBNNTYwMl9VUkJTCQkyCisjZGVmaW5lIE01NjAyX0lTT0NfUEFDS0VUUwkxNAorCisjZGVmaW5lIE01NjAyX1VSQl9USU1FT1VUCW1zZWNzX3RvX2ppZmZpZXMoMiAqIE01NjAyX0lTT0NfUEFDS0VUUykKKyNkZWZpbmUgTTU2MDJfVVJCX01TR19USU1FT1VUICAgNTAwMAorI2RlZmluZSBNNTYwMl9GUkFNRV9USU1FT1VUCTIKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBBIHNrZWxldG9uIHVzZWQgZm9yIHNlbmRpbmcgbWVzc2FnZXMgdG8gdGhlIG01NjAyIGJyaWRnZSAqLworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYnJpZGdlX3VyYl9za2VsZXRvbltdID0geworCTB4MTMsIDB4MDAsIDB4ODEsIDB4MDAKK307CisKKy8qIEEgc2tlbGV0b24gdXNlZCBmb3Igc2VuZGluZyBtZXNzYWdlcyB0byB0aGUgc2Vuc29yICovCitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzZW5zb3JfdXJiX3NrZWxldG9uW10gPSB7CisJMHgyMywgTTU2MDJfWEJfR1BJT19FTl9ILCAweDgxLCAweDA2LAorCTB4MjMsIE01NjAyX1hCX01JU0NfQ1RSTCwgMHg4MSwgMHg4MCwKKwkweDEzLCBNNTYwMl9YQl9JMkNfREVWX0FERFIsIDB4ODEsIDB4MDAsCisJMHgxMywgTTU2MDJfWEJfSTJDX1JFR19BRERSLCAweDgxLCAweDAwLAorCTB4MTMsIE01NjAyX1hCX0kyQ19EQVRBLCAweDgxLCAweDAwLAorCTB4MTMsIE01NjAyX1hCX0kyQ19DVFJMLCAweDgxLCAweDExCit9OworCisvKiBtNTYwMiBkZXZpY2UgZGVzY3JpcHRvciwgY3VycmVudGx5IGl0IGp1c3Qgd3JhcHMgdGhlIG01NjAyX2NhbWVyYSBzdHJ1Y3QgKi8KK3N0cnVjdCBzZCB7CisJc3RydWN0IGdzcGNhX2RldiBnc3BjYV9kZXY7CisKKwkvKiBUaGUgbmFtZSBvZiB0aGUgbTU2MDIgY2FtZXJhICovCisJY2hhciAqbmFtZTsKKworCS8qIEEgcG9pbnRlciB0byB0aGUgY3VycmVudGx5IGNvbm5lY3RlZCBzZW5zb3IgKi8KKwlzdHJ1Y3QgbTU2MDJfc2Vuc29yICpzZW5zb3I7CisKKwlzdHJ1Y3Qgc2RfZGVzYyAqZGVzYzsKKworCS8qIFRoZSBjdXJyZW50IGZyYW1lJ3MgaWQsIHVzZWQgdG8gZGV0ZWN0IGZyYW1lIGJvdW5kYXJpZXMgKi8KKwl1OCBmcmFtZV9pZDsKKworCS8qIFRoZSBjdXJyZW50IGZyYW1lIGNvdW50ICovCisJdTMyIGZyYW1lX2NvdW50OworfTsKKworaW50IG01NjAyX3JlYWRfYnJpZGdlKAorCXN0cnVjdCBzZCAqc2QsIHU4IGFkZHJlc3MsIHU4ICppMmNfZGF0YSk7CisKK2ludCBtNTYwMl93cml0ZV9icmlkZ2UoCisJc3RydWN0IHNkICpzZCwgdTggYWRkcmVzcywgdTggaTJjX2RhdGEpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvbTU2MDIvbTU2MDJfY29yZS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9tNTYwMi9tNTYwMl9jb3JlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmQ2Y2UzOAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvbTU2MDIvbTU2MDJfY29yZS5jCkBAIC0wLDAgKzEsMzA5IEBACisgLyoKKyAqIFVTQiBEcml2ZXIgZm9yIEFMaSBtNTYwMiBiYXNlZCB3ZWJjYW1zCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA4IEVyaWsgQW5kcsOpbgorICogQ29weXJpZ2h0IChDKSAyMDA3IElseWVzIEdvdXRhLiBCYXNlZCBvbiB0aGUgbTU2MDN4IExpbnV4IERyaXZlciBQcm9qZWN0LgorICogQ29weXJpZ2h0IChDKSAyMDA1IG01NjAzeCBMaW51eCBEcml2ZXIgUHJvamVjdCA8bTU2MDJAeDNuZy5jb20uYnI+CisgKgorICogUG9ydGlvbnMgb2YgY29kZSB0byBVU0IgaW50ZXJmYWNlIGFuZCBBTGkgZHJpdmVyIHNvZnR3YXJlLAorICogQ29weXJpZ2h0IChjKSAyMDA2IFdpbGxlbSBEdWlua2VyCisgKiB2NGwyIGludGVyZmFjZSBtb2RlbGVkIGFmdGVyIHRoZSBWNEwyIGRyaXZlcgorICogZm9yIFNOOUMxMHggUEMgQ2FtZXJhIENvbnRyb2xsZXJzCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB2ZXJzaW9uIDIuCisgKgorICovCisKKyNpbmNsdWRlICJtNTYwMl9vdjk2NTAuaCIKKyNpbmNsdWRlICJtNTYwMl9tdDltMTExLmgiCisjaW5jbHVkZSAibTU2MDJfcG8xMDMwLmgiCisjaW5jbHVkZSAibTU2MDJfczVrODNhLmgiCisjaW5jbHVkZSAibTU2MDJfczVrNGFhLmgiCisKKy8qIEtlcm5lbCBtb2R1bGUgcGFyYW1ldGVycyAqLworaW50IGZvcmNlX3NlbnNvcjsKK2ludCBkdW1wX2JyaWRnZTsKK2ludCBkdW1wX3NlbnNvcjsKKworc3RhdGljIGNvbnN0IF9fZGV2aW5pdGRhdGEgc3RydWN0IHVzYl9kZXZpY2VfaWQgbTU2MDJfdGFibGVbXSA9IHsKKwl7VVNCX0RFVklDRSgweDA0MDIsIDB4NTYwMil9LAorCXt9Cit9OworCitNT0RVTEVfREVWSUNFX1RBQkxFKHVzYiwgbTU2MDJfdGFibGUpOworCisvKiBSZWFkcyBhIGJ5dGUgZnJvbSB0aGUgbTU2MDIgKi8KK2ludCBtNTYwMl9yZWFkX2JyaWRnZShzdHJ1Y3Qgc2QgKnNkLCB1OCBhZGRyZXNzLCB1OCAqaTJjX2RhdGEpCit7CisJaW50IGVycjsKKwlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiA9IHNkLT5nc3BjYV9kZXYuZGV2OworCV9fdTggKmJ1ZiA9IHNkLT5nc3BjYV9kZXYudXNiX2J1ZjsKKworCWVyciA9IHVzYl9jb250cm9sX21zZyh1ZGV2LCB1c2JfcmN2Y3RybHBpcGUodWRldiwgMCksCisJCQkgICAgICAweDA0LCAweGMwLCAweDE0LAorCQkJICAgICAgMHg4MTAwICsgYWRkcmVzcywgYnVmLAorCQkJICAgICAgMSwgTTU2MDJfVVJCX01TR19USU1FT1VUKTsKKwkqaTJjX2RhdGEgPSBidWZbMF07CisKKwlQREVCVUcoRF9DT05GLCAiUmVhZGluZyBicmlkZ2UgcmVnaXN0ZXIgMHgleCBjb250YWluaW5nIDB4JXgiLAorCSAgICAgICBhZGRyZXNzLCAqaTJjX2RhdGEpOworCisJLyogdXNiX2NvbnRyb2xfbXNnKC4uLikgcmV0dXJucyB0aGUgbnVtYmVyIG9mIGJ5dGVzIHNlbnQgdXBvbiBzdWNjZXNzLAorCW1hc2sgdGhhdCBhbmQgcmV0dXJuIHplcm8gdXBvbiBzdWNjZXNzIGluc3RlYWQqLworCXJldHVybiAoZXJyIDwgMCkgPyBlcnIgOiAwOworfQorCisvKiBXcml0ZXMgYSBieXRlIHRvIHRvIHRoZSBtNTYwMiAqLworaW50IG01NjAyX3dyaXRlX2JyaWRnZShzdHJ1Y3Qgc2QgKnNkLCB1OCBhZGRyZXNzLCB1OCBpMmNfZGF0YSkKK3sKKwlpbnQgZXJyOworCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2ID0gc2QtPmdzcGNhX2Rldi5kZXY7CisJX191OCAqYnVmID0gc2QtPmdzcGNhX2Rldi51c2JfYnVmOworCisJUERFQlVHKERfQ09ORiwgIldyaXRpbmcgYnJpZGdlIHJlZ2lzdGVyIDB4JXggd2l0aCAweCV4IiwKKwkgICAgICAgYWRkcmVzcywgaTJjX2RhdGEpOworCisJbWVtY3B5KGJ1ZiwgYnJpZGdlX3VyYl9za2VsZXRvbiwKKwkgICAgICAgc2l6ZW9mKGJyaWRnZV91cmJfc2tlbGV0b24pKTsKKwlidWZbMV0gPSBhZGRyZXNzOworCWJ1ZlszXSA9IGkyY19kYXRhOworCisJZXJyID0gdXNiX2NvbnRyb2xfbXNnKHVkZXYsIHVzYl9zbmRjdHJscGlwZSh1ZGV2LCAwKSwKKwkJCQkweDA0LCAweDQwLCAweDE5LAorCQkJCTB4MDAwMCwgYnVmLAorCQkJCTQsIE01NjAyX1VSQl9NU0dfVElNRU9VVCk7CisKKwkvKiB1c2JfY29udHJvbF9tc2coLi4uKSByZXR1cm5zIHRoZSBudW1iZXIgb2YgYnl0ZXMgc2VudCB1cG9uIHN1Y2Nlc3MsCisJICAgbWFzayB0aGF0IGFuZCByZXR1cm4gemVybyB1cG9uIHN1Y2Nlc3MgaW5zdGVhZCAqLworCXJldHVybiAoZXJyIDwgMCkgPyBlcnIgOiAwOworfQorCisvKiBEdW1wIGFsbCB0aGUgcmVnaXN0ZXJzIG9mIHRoZSBtNTYwMiBicmlkZ2UsCisgICB1bmZvcnR1bmF0ZWx5IHRoaXMgYnJlYWtzIHRoZSBjYW1lcmEgdW50aWwgaXQncyBwb3dlciBjeWNsZWQgKi8KK3N0YXRpYyB2b2lkIG01NjAyX2R1bXBfYnJpZGdlKHN0cnVjdCBzZCAqc2QpCit7CisJaW50IGk7CisJZm9yIChpID0gMDsgaSA8IDB4ODA7IGkrKykgeworCQl1bnNpZ25lZCBjaGFyIHZhbCA9IDA7CisJCW01NjAyX3JlYWRfYnJpZGdlKHNkLCBpLCAmdmFsKTsKKwkJaW5mbygiQUxpIG01NjAyIGFkZHJlc3MgMHgleCBjb250YWlucyAweCV4IiwgaSwgdmFsKTsKKwl9CisJaW5mbygiV2FybmluZzogVGhlIEFMaSBtNTYwMiB3ZWJjYW0gcHJvYmFibHkgd29uJ3Qgd29yayAiCisJCSJ1bnRpbCBpdCdzIHBvd2VyIGN5Y2xlZCIpOworfQorCitzdGF0aWMgaW50IG01NjAyX3Byb2JlX3NlbnNvcihzdHJ1Y3Qgc2QgKnNkKQoreworCS8qIFRyeSB0aGUgcG8xMDMwICovCisJc2QtPnNlbnNvciA9ICZwbzEwMzA7CisJaWYgKCFzZC0+c2Vuc29yLT5wcm9iZShzZCkpCisJCXJldHVybiAwOworCisJLyogVHJ5IHRoZSBtdDltMTExIHNlbnNvciAqLworCXNkLT5zZW5zb3IgPSAmbXQ5bTExMTsKKwlpZiAoIXNkLT5zZW5zb3ItPnByb2JlKHNkKSkKKwkJcmV0dXJuIDA7CisKKwkvKiBUcnkgdGhlIHM1azRhYSAqLworCXNkLT5zZW5zb3IgPSAmczVrNGFhOworCWlmICghc2QtPnNlbnNvci0+cHJvYmUoc2QpKQorCQlyZXR1cm4gMDsKKworCS8qIFRyeSB0aGUgb3Y5NjUwICovCisJc2QtPnNlbnNvciA9ICZvdjk2NTA7CisJaWYgKCFzZC0+c2Vuc29yLT5wcm9iZShzZCkpCisJCXJldHVybiAwOworCisJLyogVHJ5IHRoZSBzNWs4M2EgKi8KKwlzZC0+c2Vuc29yID0gJnM1azgzYTsKKwlpZiAoIXNkLT5zZW5zb3ItPnByb2JlKHNkKSkKKwkJcmV0dXJuIDA7CisKKwkvKiBNb3JlIHNlbnNvciBwcm9iZSBmdW5jdGlvbiBnb2VzIGhlcmUgKi8KKwlpbmZvKCJGYWlsZWQgdG8gZmluZCBhIHNlbnNvciIpOworCXNkLT5zZW5zb3IgPSBOVUxMOworCXJldHVybiAtRU5PREVWOworfQorCitzdGF0aWMgaW50IG01NjAyX2NvbmZpZ3VyZShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCisJCQkgICBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpOworCitzdGF0aWMgaW50IG01NjAyX2luaXQoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKwlpbnQgZXJyOworCisJUERFQlVHKERfQ09ORiwgIkluaXRpYWxpemluZyBBTGkgbTU2MDIgd2ViY2FtIik7CisJLyogUnVuIHRoZSBpbml0IHNlcXVlbmNlICovCisJZXJyID0gc2QtPnNlbnNvci0+aW5pdChzZCk7CisKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IG01NjAyX3N0YXJ0X3RyYW5zZmVyKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisJX191OCAqYnVmID0gc2QtPmdzcGNhX2Rldi51c2JfYnVmOworCWludCBlcnI7CisKKwkvKiBTZW5kIHN0YXJ0IGNvbW1hbmQgdG8gdGhlIGNhbWVyYSAqLworCWNvbnN0IHU4IGJ1ZmZlcls0XSA9IHsweDEzLCAweGY5LCAweDBmLCAweDAxfTsKKwltZW1jcHkoYnVmLCBidWZmZXIsIHNpemVvZihidWZmZXIpKTsKKwllcnIgPSB1c2JfY29udHJvbF9tc2coZ3NwY2FfZGV2LT5kZXYsCisJCQkgICAgICB1c2Jfc25kY3RybHBpcGUoZ3NwY2FfZGV2LT5kZXYsIDApLAorCQkJICAgICAgMHgwNCwgMHg0MCwgMHgxOSwgMHgwMDAwLCBidWYsCisJCQkgICAgICA0LCBNNTYwMl9VUkJfTVNHX1RJTUVPVVQpOworCisJUERFQlVHKERfU1RSRUFNLCAiVHJhbnNmZXIgc3RhcnRlZCIpOworCXJldHVybiAoZXJyIDwgMCkgPyBlcnIgOiAwOworfQorCitzdGF0aWMgdm9pZCBtNTYwMl91cmJfY29tcGxldGUoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAorCQkJc3RydWN0IGdzcGNhX2ZyYW1lICpmcmFtZSwKKwkJCV9fdTggKmRhdGEsIGludCBsZW4pCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJaWYgKGxlbiA8IDYpIHsKKwkJUERFQlVHKERfUEFDSywgIlBhY2tldCBpcyBsZXNzIHRoYW4gNiBieXRlcyIpOworCQlyZXR1cm47CisJfQorCisJLyogRnJhbWUgZGVsaW1pdGVyOiBmZiB4eCB4eCB4eCBmZiBmZiAqLworCWlmIChkYXRhWzBdID09IDB4ZmYgJiYgZGF0YVs0XSA9PSAweGZmICYmIGRhdGFbNV0gPT0gMHhmZiAmJgorCSAgICBkYXRhWzJdICE9IHNkLT5mcmFtZV9pZCkgeworCQlQREVCVUcoRF9GUkFNLCAiRnJhbWUgZGVsaW1pdGVyIGRldGVjdGVkIik7CisJCXNkLT5mcmFtZV9pZCA9IGRhdGFbMl07CisKKwkJLyogUmVtb3ZlIHRoZSBleHRyYSBmbHVmZiBhcHBlbmRlZCBvbiBlYWNoIGhlYWRlciAqLworCQlkYXRhICs9IDY7CisJCWxlbiAtPSA2OworCisJCS8qIENvbXBsZXRlIHRoZSBsYXN0IGZyYW1lIChpZiBhbnkpICovCisJCWZyYW1lID0gZ3NwY2FfZnJhbWVfYWRkKGdzcGNhX2RldiwgTEFTVF9QQUNLRVQsCisJCQkJCWZyYW1lLCBkYXRhLCAwKTsKKwkJc2QtPmZyYW1lX2NvdW50Kys7CisKKwkJLyogQ3JlYXRlIGEgbmV3IGZyYW1lICovCisJCWdzcGNhX2ZyYW1lX2FkZChnc3BjYV9kZXYsIEZJUlNUX1BBQ0tFVCwgZnJhbWUsIGRhdGEsIGxlbik7CisKKwkJUERFQlVHKERfRlJBTSwgIlN0YXJ0aW5nIG5ldyBmcmFtZSAlZCIsCisJCSAgICAgICBzZC0+ZnJhbWVfY291bnQpOworCisJfSBlbHNlIHsKKwkJaW50IGN1cl9mcmFtZV9sZW4gPSBmcmFtZS0+ZGF0YV9lbmQgLSBmcmFtZS0+ZGF0YTsKKworCQkvKiBSZW1vdmUgdXJiIGhlYWRlciAqLworCQlkYXRhICs9IDQ7CisJCWxlbiAtPSA0OworCisJCWlmIChjdXJfZnJhbWVfbGVuICsgbGVuIDw9IGZyYW1lLT52NGwyX2J1Zi5sZW5ndGgpIHsKKwkJCVBERUJVRyhEX0ZSQU0sICJDb250aW51aW5nIGZyYW1lICVkIGNvcHlpbmcgJWQgYnl0ZXMiLAorCQkJICAgICAgIHNkLT5mcmFtZV9jb3VudCwgbGVuKTsKKworCQkJZ3NwY2FfZnJhbWVfYWRkKGdzcGNhX2RldiwgSU5URVJfUEFDS0VULCBmcmFtZSwKKwkJCQkJZGF0YSwgbGVuKTsKKwkJfSBlbHNlIGlmIChmcmFtZS0+djRsMl9idWYubGVuZ3RoIC0gY3VyX2ZyYW1lX2xlbiA+IDApIHsKKwkJCS8qIEFkZCB0aGUgcmVtYWluaW5nIGRhdGEgdXAgdG8gZnJhbWUgc2l6ZSAqLworCQkJZ3NwY2FfZnJhbWVfYWRkKGdzcGNhX2RldiwgSU5URVJfUEFDS0VULCBmcmFtZSwgZGF0YSwKKwkJCQkJZnJhbWUtPnY0bDJfYnVmLmxlbmd0aCAtIGN1cl9mcmFtZV9sZW4pOworCQl9CisJfQorfQorCitzdGF0aWMgdm9pZCBtNTYwMl9zdG9wX3RyYW5zZmVyKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwkvKiBJcyB0aGVyZSBhcmUgYSBjb21tYW5kIHRvIHN0b3AgYSBkYXRhIHRyYW5zZmVyPyAqLworfQorCisvKiBzdWItZHJpdmVyIGRlc2NyaXB0aW9uLCB0aGUgY3RybCBhbmQgbmN0cmwgaXMgZmlsbGVkIGF0IHByb2JlIHRpbWUgKi8KK3N0YXRpYyBzdHJ1Y3Qgc2RfZGVzYyBzZF9kZXNjID0geworCS5uYW1lCQk9IE1PRFVMRV9OQU1FLAorCS5jb25maWcJCT0gbTU2MDJfY29uZmlndXJlLAorCS5pbml0CQk9IG01NjAyX2luaXQsCisJLnN0YXJ0CQk9IG01NjAyX3N0YXJ0X3RyYW5zZmVyLAorCS5zdG9wTgkJPSBtNTYwMl9zdG9wX3RyYW5zZmVyLAorCS5wa3Rfc2Nhbgk9IG01NjAyX3VyYl9jb21wbGV0ZQorfTsKKworLyogdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYXQgcHJvYmUgdGltZSAqLworc3RhdGljIGludCBtNTYwMl9jb25maWd1cmUoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAorCQkJICAgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKwlzdHJ1Y3QgY2FtICpjYW07CisJaW50IGVycjsKKworCWNhbSA9ICZnc3BjYV9kZXYtPmNhbTsKKwljYW0tPmVwYWRkciA9IE01NjAyX0lTT0NfRU5EUE9JTlRfQUREUjsKKwlzZC0+ZGVzYyA9ICZzZF9kZXNjOworCisJaWYgKGR1bXBfYnJpZGdlKQorCQltNTYwMl9kdW1wX2JyaWRnZShzZCk7CisKKwkvKiBQcm9iZSBzZW5zb3IgKi8KKwllcnIgPSBtNTYwMl9wcm9iZV9zZW5zb3Ioc2QpOworCWlmIChlcnIpCisJCWdvdG8gZmFpbDsKKworCXJldHVybiAwOworCitmYWlsOgorCVBERUJVRyhEX0VSUiwgIkFMaSBtNTYwMiB3ZWJjYW0gZmFpbGVkIik7CisJY2FtLT5jYW1fbW9kZSA9IE5VTEw7CisJY2FtLT5ubW9kZXMgPSAwOworCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBtNTYwMl9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwKKwkJICAgICAgIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKK3sKKwlyZXR1cm4gZ3NwY2FfZGV2X3Byb2JlKGludGYsIGlkLCAmc2RfZGVzYywgc2l6ZW9mKHN0cnVjdCBzZCksCisJCQkgICAgICAgVEhJU19NT0RVTEUpOworfQorCitzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgc2RfZHJpdmVyID0geworCS5uYW1lID0gTU9EVUxFX05BTUUsCisJLmlkX3RhYmxlID0gbTU2MDJfdGFibGUsCisJLnByb2JlID0gbTU2MDJfcHJvYmUsCisjaWZkZWYgQ09ORklHX1BNCisJLnN1c3BlbmQgPSBnc3BjYV9zdXNwZW5kLAorCS5yZXN1bWUgPSBnc3BjYV9yZXN1bWUsCisjZW5kaWYKKwkuZGlzY29ubmVjdCA9IGdzcGNhX2Rpc2Nvbm5lY3QKK307CisKKy8qIC0tIG1vZHVsZSBpbnNlcnQgLyByZW1vdmUgLS0gKi8KK3N0YXRpYyBpbnQgX19pbml0IG1vZF9tNTYwMl9pbml0KHZvaWQpCit7CisJaWYgKHVzYl9yZWdpc3Rlcigmc2RfZHJpdmVyKSA8IDApCisJCXJldHVybiAtMTsKKwlQREVCVUcoRF9QUk9CRSwgInJlZ2lzdGVyZWQiKTsKKwlyZXR1cm4gMDsKK30KK3N0YXRpYyB2b2lkIF9fZXhpdCBtb2RfbTU2MDJfZXhpdCh2b2lkKQoreworCXVzYl9kZXJlZ2lzdGVyKCZzZF9kcml2ZXIpOworCVBERUJVRyhEX1BST0JFLCAiZGVyZWdpc3RlcmVkIik7Cit9CisKK21vZHVsZV9pbml0KG1vZF9tNTYwMl9pbml0KTsKK21vZHVsZV9leGl0KG1vZF9tNTYwMl9leGl0KTsKKworTU9EVUxFX0FVVEhPUihEUklWRVJfQVVUSE9SKTsKK01PRFVMRV9ERVNDUklQVElPTihEUklWRVJfREVTQyk7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7Cittb2R1bGVfcGFyYW0oZm9yY2Vfc2Vuc29yLCBpbnQsIFNfSVJVR08gfCBTX0lXVVNSKTsKK01PRFVMRV9QQVJNX0RFU0MoZm9yY2Vfc2Vuc29yLAorCQkiZm9yY2UgZGV0ZWN0aW9uIG9mIHNlbnNvciwgIgorCQkiMSA9IE9WOTY1MCwgMiA9IFM1SzgzQSwgMyA9IFM1SzRBQSwgNCA9IE1UOU0xMTEsIDUgPSBQTzEwMzAiKTsKKworbW9kdWxlX3BhcmFtKGR1bXBfYnJpZGdlLCBib29sLCBTX0lSVUdPIHwgU19JV1VTUik7CitNT0RVTEVfUEFSTV9ERVNDKGR1bXBfYnJpZGdlLCAiRHVtcHMgYWxsIHVzYiBicmlkZ2UgcmVnaXN0ZXJzIGF0IHN0YXJ0dXAiKTsKKworbW9kdWxlX3BhcmFtKGR1bXBfc2Vuc29yLCBib29sLCBTX0lSVUdPIHwgU19JV1VTUik7CitNT0RVTEVfUEFSTV9ERVNDKGR1bXBfc2Vuc29yLCAiRHVtcHMgYWxsIHVzYiBzZW5zb3IgcmVnaXN0ZXJzICIKKwkJImF0IHN0YXJ0dXAgcHJvdmlkaW5nIGEgc2Vuc29yIGlzIGZvdW5kIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL201NjAyL201NjAyX210OW0xMTEuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvbTU2MDIvbTU2MDJfbXQ5bTExMS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZiNzAwYzIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL201NjAyL201NjAyX210OW0xMTEuYwpAQCAtMCwwICsxLDM0NSBAQAorLyoKKyAqIERyaXZlciBmb3IgdGhlIG10OW0xMTEgc2Vuc29yCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA4IEVyaWsgQW5kcsOpbgorICogQ29weXJpZ2h0IChDKSAyMDA3IElseWVzIEdvdXRhLiBCYXNlZCBvbiB0aGUgbTU2MDN4IExpbnV4IERyaXZlciBQcm9qZWN0LgorICogQ29weXJpZ2h0IChDKSAyMDA1IG01NjAzeCBMaW51eCBEcml2ZXIgUHJvamVjdCA8bTU2MDJAeDNuZy5jb20uYnI+CisgKgorICogUG9ydGlvbnMgb2YgY29kZSB0byBVU0IgaW50ZXJmYWNlIGFuZCBBTGkgZHJpdmVyIHNvZnR3YXJlLAorICogQ29weXJpZ2h0IChjKSAyMDA2IFdpbGxlbSBEdWlua2VyCisgKiB2NGwyIGludGVyZmFjZSBtb2RlbGVkIGFmdGVyIHRoZSBWNEwyIGRyaXZlcgorICogZm9yIFNOOUMxMHggUEMgQ2FtZXJhIENvbnRyb2xsZXJzCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB2ZXJzaW9uIDIuCisgKgorICovCisKKyNpbmNsdWRlICJtNTYwMl9tdDltMTExLmgiCisKK2ludCBtdDltMTExX3Byb2JlKHN0cnVjdCBzZCAqc2QpCit7CisJdTggZGF0YVsyXSA9IHsweDAwLCAweDAwfTsKKwlpbnQgaTsKKworCWlmIChmb3JjZV9zZW5zb3IpIHsKKwkJaWYgKGZvcmNlX3NlbnNvciA9PSBNVDlNMTExX1NFTlNPUikgeworCQkJaW5mbygiRm9yY2luZyBhICVzIHNlbnNvciIsIG10OW0xMTEubmFtZSk7CisJCQlnb3RvIHNlbnNvcl9mb3VuZDsKKwkJfQorCQkvKiBJZiB3ZSB3YW50IHRvIGZvcmNlIGFub3RoZXIgc2Vuc29yLCBkb24ndCB0cnkgdG8gcHJvYmUgdGhpcworCQkgKiBvbmUgKi8KKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJaW5mbygiUHJvYmluZyBmb3IgYSBtdDltMTExIHNlbnNvciIpOworCisJLyogRG8gdGhlIHByZWluaXQgKi8KKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShwcmVpbml0X210OW0xMTEpOyBpKyspIHsKKwkJaWYgKHByZWluaXRfbXQ5bTExMVtpXVswXSA9PSBCUklER0UpIHsKKwkJCW01NjAyX3dyaXRlX2JyaWRnZShzZCwKKwkJCQlwcmVpbml0X210OW0xMTFbaV1bMV0sCisJCQkJcHJlaW5pdF9tdDltMTExW2ldWzJdKTsKKwkJfSBlbHNlIHsKKwkJCWRhdGFbMF0gPSBwcmVpbml0X210OW0xMTFbaV1bMl07CisJCQlkYXRhWzFdID0gcHJlaW5pdF9tdDltMTExW2ldWzNdOworCQkJbXQ5bTExMV93cml0ZV9zZW5zb3Ioc2QsCisJCQkJcHJlaW5pdF9tdDltMTExW2ldWzFdLCBkYXRhLCAyKTsKKwkJfQorCX0KKworCWlmIChtdDltMTExX3JlYWRfc2Vuc29yKHNkLCBNVDlNMTExX1NDX0NISVBWRVIsIGRhdGEsIDIpKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWlmICgoZGF0YVswXSA9PSAweDE0KSAmJiAoZGF0YVsxXSA9PSAweDNhKSkgeworCQlpbmZvKCJEZXRlY3RlZCBhIG10OW0xMTEgc2Vuc29yIik7CisJCWdvdG8gc2Vuc29yX2ZvdW5kOworCX0KKworCXJldHVybiAtRU5PREVWOworCitzZW5zb3JfZm91bmQ6CisJc2QtPmdzcGNhX2Rldi5jYW0uY2FtX21vZGUgPSBtdDltMTExLm1vZGVzOworCXNkLT5nc3BjYV9kZXYuY2FtLm5tb2RlcyA9IG10OW0xMTEubm1vZGVzOworCXNkLT5kZXNjLT5jdHJscyA9IG10OW0xMTEuY3RybHM7CisJc2QtPmRlc2MtPm5jdHJscyA9IG10OW0xMTEubmN0cmxzOworCXJldHVybiAwOworfQorCitpbnQgbXQ5bTExMV9pbml0KHN0cnVjdCBzZCAqc2QpCit7CisJaW50IGksIGVyciA9IDA7CisKKwkvKiBJbml0IHRoZSBzZW5zb3IgKi8KKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShpbml0X210OW0xMTEpOyBpKyspIHsKKwkJdTggZGF0YVsyXTsKKworCQlpZiAoaW5pdF9tdDltMTExW2ldWzBdID09IEJSSURHRSkgeworCQkJZXJyID0gbTU2MDJfd3JpdGVfYnJpZGdlKHNkLAorCQkJCWluaXRfbXQ5bTExMVtpXVsxXSwKKwkJCQlpbml0X210OW0xMTFbaV1bMl0pOworCQl9IGVsc2UgeworCQkJZGF0YVswXSA9IGluaXRfbXQ5bTExMVtpXVsyXTsKKwkJCWRhdGFbMV0gPSBpbml0X210OW0xMTFbaV1bM107CisJCQllcnIgPSBtdDltMTExX3dyaXRlX3NlbnNvcihzZCwKKwkJCQlpbml0X210OW0xMTFbaV1bMV0sIGRhdGEsIDIpOworCQl9CisJfQorCisJaWYgKGR1bXBfc2Vuc29yKQorCQltdDltMTExX2R1bXBfcmVnaXN0ZXJzKHNkKTsKKworCXJldHVybiAoZXJyIDwgMCkgPyBlcnIgOiAwOworfQorCitpbnQgbXQ5bTExMV9wb3dlcl9kb3duKHN0cnVjdCBzZCAqc2QpCit7CisJcmV0dXJuIDA7Cit9CisKK2ludCBtdDltMTExX2dldF92ZmxpcChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpCit7CisJaW50IGVycjsKKwl1OCBkYXRhWzJdID0gezB4MDAsIDB4MDB9OworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCWVyciA9IG10OW0xMTFfcmVhZF9zZW5zb3Ioc2QsIE1UOU0xMTFfU0NfUl9NT0RFX0NPTlRFWFRfQiwKKwkJCQkgIGRhdGEsIDIpOworCSp2YWwgPSBkYXRhWzBdICYgTVQ5TTExMV9STUJfTUlSUk9SX1JPV1M7CisJUERFQlVHKERfVjRMMiwgIlJlYWQgdmVydGljYWwgZmxpcCAlZCIsICp2YWwpOworCisJcmV0dXJuIChlcnIgPCAwKSA/IGVyciA6IDA7Cit9CisKK2ludCBtdDltMTExX3NldF92ZmxpcChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCkKK3sKKwlpbnQgZXJyOworCXU4IGRhdGFbMl0gPSB7MHgwMCwgMHgwMH07CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJUERFQlVHKERfVjRMMiwgIlNldCB2ZXJ0aWNhbCBmbGlwIHRvICVkIiwgdmFsKTsKKworCS8qIFNldCB0aGUgY29ycmVjdCBwYWdlIG1hcCAqLworCWVyciA9IG10OW0xMTFfd3JpdGVfc2Vuc29yKHNkLCBNVDlNMTExX1BBR0VfTUFQLCBkYXRhLCAyKTsKKwlpZiAoZXJyIDwgMCkKKwkJZ290byBvdXQ7CisKKwllcnIgPSBtdDltMTExX3JlYWRfc2Vuc29yKHNkLCBNVDlNMTExX1NDX1JfTU9ERV9DT05URVhUX0IsIGRhdGEsIDIpOworCWlmIChlcnIgPCAwKQorCQlnb3RvIG91dDsKKworCWRhdGFbMF0gPSAoZGF0YVswXSAmIDB4ZmUpIHwgdmFsOworCWVyciA9IG10OW0xMTFfd3JpdGVfc2Vuc29yKHNkLCBNVDlNMTExX1NDX1JfTU9ERV9DT05URVhUX0IsCisJCQkJICAgZGF0YSwgMik7CitvdXQ6CisJcmV0dXJuIChlcnIgPCAwKSA/IGVyciA6IDA7Cit9CisKK2ludCBtdDltMTExX2dldF9oZmxpcChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpCit7CisJaW50IGVycjsKKwl1OCBkYXRhWzJdID0gezB4MDAsIDB4MDB9OworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCWVyciA9IG10OW0xMTFfcmVhZF9zZW5zb3Ioc2QsIE1UOU0xMTFfU0NfUl9NT0RFX0NPTlRFWFRfQiwKKwkJCQkgIGRhdGEsIDIpOworCSp2YWwgPSBkYXRhWzBdICYgTVQ5TTExMV9STUJfTUlSUk9SX0NPTFM7CisJUERFQlVHKERfVjRMMiwgIlJlYWQgaG9yaXpvbnRhbCBmbGlwICVkIiwgKnZhbCk7CisKKwlyZXR1cm4gKGVyciA8IDApID8gZXJyIDogMDsKK30KKworaW50IG10OW0xMTFfc2V0X2hmbGlwKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKQoreworCWludCBlcnI7CisJdTggZGF0YVsyXSA9IHsweDAwLCAweDAwfTsKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisKKwlQREVCVUcoRF9WNEwyLCAiU2V0IGhvcml6b250YWwgZmxpcCB0byAlZCIsIHZhbCk7CisKKwkvKiBTZXQgdGhlIGNvcnJlY3QgcGFnZSBtYXAgKi8KKwllcnIgPSBtdDltMTExX3dyaXRlX3NlbnNvcihzZCwgTVQ5TTExMV9QQUdFX01BUCwgZGF0YSwgMik7CisJaWYgKGVyciA8IDApCisJCWdvdG8gb3V0OworCisJZXJyID0gbXQ5bTExMV9yZWFkX3NlbnNvcihzZCwgTVQ5TTExMV9TQ19SX01PREVfQ09OVEVYVF9CLCBkYXRhLCAyKTsKKwlpZiAoZXJyIDwgMCkKKwkJZ290byBvdXQ7CisKKwlkYXRhWzBdID0gKGRhdGFbMF0gJiAweGZkKSB8ICgodmFsIDw8IDEpICYgMHgwMik7CisJZXJyID0gbXQ5bTExMV93cml0ZV9zZW5zb3Ioc2QsIE1UOU0xMTFfU0NfUl9NT0RFX0NPTlRFWFRfQiwKKwkJCQkJZGF0YSwgMik7CitvdXQ6CisJcmV0dXJuIChlcnIgPCAwKSA/IGVyciA6IDA7Cit9CisKK2ludCBtdDltMTExX2dldF9nYWluKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCkKK3sKKwlpbnQgZXJyLCB0bXA7CisJdTggZGF0YVsyXSA9IHsweDAwLCAweDAwfTsKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisKKwllcnIgPSBtdDltMTExX3JlYWRfc2Vuc29yKHNkLCBNVDlNMTExX1NDX0dMT0JBTF9HQUlOLCBkYXRhLCAyKTsKKwl0bXAgPSAoKGRhdGFbMV0gPDwgOCkgfCBkYXRhWzBdKTsKKworCSp2YWwgPSAoKHRtcCAmICgxIDw8IDEwKSkgKiAyKSB8CisJICAgICAgKCh0bXAgJiAoMSA8PCAgOSkpICogMikgfAorCSAgICAgICgodG1wICYgKDEgPDwgIDgpKSAqIDIpIHwKKwkgICAgICAgKHRtcCAmIDB4N2YpOworCisJUERFQlVHKERfVjRMMiwgIlJlYWQgZ2FpbiAlZCIsICp2YWwpOworCisJcmV0dXJuIChlcnIgPCAwKSA/IGVyciA6IDA7Cit9CisKK2ludCBtdDltMTExX3NldF9nYWluKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKQoreworCWludCBlcnIsIHRtcDsKKwl1OCBkYXRhWzJdID0gezB4MDAsIDB4MDB9OworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCS8qIFNldCB0aGUgY29ycmVjdCBwYWdlIG1hcCAqLworCWVyciA9IG10OW0xMTFfd3JpdGVfc2Vuc29yKHNkLCBNVDlNMTExX1BBR0VfTUFQLCBkYXRhLCAyKTsKKwlpZiAoZXJyIDwgMCkKKwkJZ290byBvdXQ7CisKKwlpZiAodmFsID49IElOSVRJQUxfTUFYX0dBSU4gKiAyICogMiAqIDIpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKCh2YWwgPj0gSU5JVElBTF9NQVhfR0FJTiAqIDIgKiAyKSAmJgorCSAgICAodmFsIDwgKElOSVRJQUxfTUFYX0dBSU4gLSAxKSAqIDIgKiAyICogMikpCisJCXRtcCA9ICgxIDw8IDEwKSB8ICh2YWwgPDwgOSkgfAorCQkJCSh2YWwgPDwgOCkgfCAodmFsIC8gOCk7CisJZWxzZSBpZiAoKHZhbCA+PSBJTklUSUFMX01BWF9HQUlOICogMikgJiYKKwkJICh2YWwgPCAgSU5JVElBTF9NQVhfR0FJTiAqIDIgKiAyKSkKKwkJdG1wID0gKDEgPDwgOSkgfCAoMSA8PCA4KSB8ICh2YWwgLyA0KTsKKwllbHNlIGlmICgodmFsID49IElOSVRJQUxfTUFYX0dBSU4pICYmCisJCSAodmFsIDwgSU5JVElBTF9NQVhfR0FJTiAqIDIpKQorCQl0bXAgPSAoMSA8PCA4KSB8ICh2YWwgLyAyKTsKKwllbHNlCisJCXRtcCA9IHZhbDsKKworCWRhdGFbMV0gPSAodG1wICYgMHhmZjAwKSA+PiA4OworCWRhdGFbMF0gPSAodG1wICYgMHhmZik7CisJUERFQlVHKERfVjRMMiwgInRtcD0lZCwgZGF0YVsxXT0lZCwgZGF0YVswXT0lZCIsIHRtcCwKKwkgICAgICAgZGF0YVsxXSwgZGF0YVswXSk7CisKKwllcnIgPSBtdDltMTExX3dyaXRlX3NlbnNvcihzZCwgTVQ5TTExMV9TQ19HTE9CQUxfR0FJTiwKKwkJCQkgICBkYXRhLCAyKTsKK291dDoKKwlyZXR1cm4gKGVyciA8IDApID8gZXJyIDogMDsKK30KKworaW50IG10OW0xMTFfcmVhZF9zZW5zb3Ioc3RydWN0IHNkICpzZCwgY29uc3QgdTggYWRkcmVzcywKKwkJCXU4ICppMmNfZGF0YSwgY29uc3QgdTggbGVuKSB7CisJaW50IGVyciwgaTsKKworCWRvIHsKKwkJZXJyID0gbTU2MDJfcmVhZF9icmlkZ2Uoc2QsIE01NjAyX1hCX0kyQ19TVEFUVVMsIGkyY19kYXRhKTsKKwl9IHdoaWxlICgoKmkyY19kYXRhICYgSTJDX0JVU1kpICYmICFlcnIpOworCWlmIChlcnIgPCAwKQorCQlnb3RvIG91dDsKKworCWVyciA9IG01NjAyX3dyaXRlX2JyaWRnZShzZCwgTTU2MDJfWEJfSTJDX0RFVl9BRERSLAorCQkJCSBzZC0+c2Vuc29yLT5pMmNfc2xhdmVfaWQpOworCWlmIChlcnIgPCAwKQorCQlnb3RvIG91dDsKKworCWVyciA9IG01NjAyX3dyaXRlX2JyaWRnZShzZCwgTTU2MDJfWEJfSTJDX1JFR19BRERSLCBhZGRyZXNzKTsKKwlpZiAoZXJyIDwgMCkKKwkJZ290byBvdXQ7CisKKwllcnIgPSBtNTYwMl93cml0ZV9icmlkZ2Uoc2QsIE01NjAyX1hCX0kyQ19DVFJMLCAweDFhKTsKKwlpZiAoZXJyIDwgMCkKKwkJZ290byBvdXQ7CisKKwlmb3IgKGkgPSAwOyBpIDwgbGVuICYmICFlcnI7IGkrKykgeworCQllcnIgPSBtNTYwMl9yZWFkX2JyaWRnZShzZCwgTTU2MDJfWEJfSTJDX0RBVEEsICYoaTJjX2RhdGFbaV0pKTsKKworCQlQREVCVUcoRF9DT05GLCAiUmVhZGluZyBzZW5zb3IgcmVnaXN0ZXIgIgorCQkgICAgICAgIjB4JXggY29udGFpbnMgMHgleCAiLCBhZGRyZXNzLCAqaTJjX2RhdGEpOworCX0KK291dDoKKwlyZXR1cm4gKGVyciA8IDApID8gZXJyIDogMDsKK30KKworaW50IG10OW0xMTFfd3JpdGVfc2Vuc29yKHN0cnVjdCBzZCAqc2QsIGNvbnN0IHU4IGFkZHJlc3MsCisJCQkJdTggKmkyY19kYXRhLCBjb25zdCB1OCBsZW4pCit7CisJaW50IGVyciwgaTsKKwl1OCAqcDsKKwlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiA9IHNkLT5nc3BjYV9kZXYuZGV2OworCV9fdTggKmJ1ZiA9IHNkLT5nc3BjYV9kZXYudXNiX2J1ZjsKKworCS8qIE5vIHNlbnNvciB3aXRoIGEgZGF0YSB3aWR0aCBsYXJnZXIKKwkgICB0aGFuIDE2IGJpdHMgaGFzIHlldCBiZWVuIHNlZW4sIG5vciB3aXRoIDAgOnAqLworCWlmIChsZW4gPiAyIHx8ICFsZW4pCisJCXJldHVybiAtRUlOVkFMOworCisJbWVtY3B5KGJ1Ziwgc2Vuc29yX3VyYl9za2VsZXRvbiwKKwkgICAgICAgc2l6ZW9mKHNlbnNvcl91cmJfc2tlbGV0b24pKTsKKworCWJ1ZlsxMV0gPSBzZC0+c2Vuc29yLT5pMmNfc2xhdmVfaWQ7CisJYnVmWzE1XSA9IGFkZHJlc3M7CisKKwlwID0gYnVmICsgMTY7CisKKwkvKiBDb3B5IGEgZm91ciBieXRlIHdyaXRlIHNlcXVlbmNlIGZvciBlYWNoIGJ5dGUgdG8gYmUgd3JpdHRlbiB0byAqLworCWZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgeworCQltZW1jcHkocCwgc2Vuc29yX3VyYl9za2VsZXRvbiArIDE2LCA0KTsKKwkJcFszXSA9IGkyY19kYXRhW2ldOworCQlwICs9IDQ7CisJCVBERUJVRyhEX0NPTkYsICJXcml0aW5nIHNlbnNvciByZWdpc3RlciAweCV4IHdpdGggMHgleCIsCisJCSAgICAgICBhZGRyZXNzLCBpMmNfZGF0YVtpXSk7CisJfQorCisJLyogQ29weSB0aGUgdGFpbGVyICovCisJbWVtY3B5KHAsIHNlbnNvcl91cmJfc2tlbGV0b24gKyAyMCwgNCk7CisKKwkvKiBTZXQgdGhlIHRvdGFsIGxlbmd0aCAqLworCXBbM10gPSAweDEwICsgbGVuOworCisJZXJyID0gdXNiX2NvbnRyb2xfbXNnKHVkZXYsIHVzYl9zbmRjdHJscGlwZSh1ZGV2LCAwKSwKKwkJCSAgICAgIDB4MDQsIDB4NDAsIDB4MTksCisJCQkgICAgICAweDAwMDAsIGJ1ZiwKKwkJCSAgICAgIDIwICsgbGVuICogNCwgTTU2MDJfVVJCX01TR19USU1FT1VUKTsKKworCXJldHVybiAoZXJyIDwgMCkgPyBlcnIgOiAwOworfQorCit2b2lkIG10OW0xMTFfZHVtcF9yZWdpc3RlcnMoc3RydWN0IHNkICpzZCkKK3sKKwl1OCBhZGRyZXNzLCB2YWx1ZVsyXSA9IHsweDAwLCAweDAwfTsKKworCWluZm8oIkR1bXBpbmcgdGhlIG10OW0xMTEgcmVnaXN0ZXIgc3RhdGUiKTsKKworCWluZm8oIkR1bXBpbmcgdGhlIG10OW0xMTEgc2Vuc29yIGNvcmUgcmVnaXN0ZXJzIik7CisJdmFsdWVbMV0gPSBNVDlNMTExX1NFTlNPUl9DT1JFOworCW10OW0xMTFfd3JpdGVfc2Vuc29yKHNkLCBNVDlNMTExX1BBR0VfTUFQLCB2YWx1ZSwgMik7CisJZm9yIChhZGRyZXNzID0gMDsgYWRkcmVzcyA8IDB4ZmY7IGFkZHJlc3MrKykgeworCQltdDltMTExX3JlYWRfc2Vuc29yKHNkLCBhZGRyZXNzLCB2YWx1ZSwgMik7CisJCWluZm8oInJlZ2lzdGVyIDB4JXggY29udGFpbnMgMHgleCV4IiwKKwkJICAgICBhZGRyZXNzLCB2YWx1ZVswXSwgdmFsdWVbMV0pOworCX0KKworCWluZm8oIkR1bXBpbmcgdGhlIG10OW0xMTEgY29sb3IgcGlwZWxpbmUgcmVnaXN0ZXJzIik7CisJdmFsdWVbMV0gPSBNVDlNMTExX0NPTE9SUElQRTsKKwltdDltMTExX3dyaXRlX3NlbnNvcihzZCwgTVQ5TTExMV9QQUdFX01BUCwgdmFsdWUsIDIpOworCWZvciAoYWRkcmVzcyA9IDA7IGFkZHJlc3MgPCAweGZmOyBhZGRyZXNzKyspIHsKKwkJbXQ5bTExMV9yZWFkX3NlbnNvcihzZCwgYWRkcmVzcywgdmFsdWUsIDIpOworCQlpbmZvKCJyZWdpc3RlciAweCV4IGNvbnRhaW5zIDB4JXgleCIsCisJCSAgICAgYWRkcmVzcywgdmFsdWVbMF0sIHZhbHVlWzFdKTsKKwl9CisKKwlpbmZvKCJEdW1waW5nIHRoZSBtdDltMTExIGNhbWVyYSBjb250cm9sIHJlZ2lzdGVycyIpOworCXZhbHVlWzFdID0gTVQ5TTExMV9DQU1FUkFfQ09OVFJPTDsKKwltdDltMTExX3dyaXRlX3NlbnNvcihzZCwgTVQ5TTExMV9QQUdFX01BUCwgdmFsdWUsIDIpOworCWZvciAoYWRkcmVzcyA9IDA7IGFkZHJlc3MgPCAweGZmOyBhZGRyZXNzKyspIHsKKwkJbXQ5bTExMV9yZWFkX3NlbnNvcihzZCwgYWRkcmVzcywgdmFsdWUsIDIpOworCQlpbmZvKCJyZWdpc3RlciAweCV4IGNvbnRhaW5zIDB4JXgleCIsCisJCSAgICAgYWRkcmVzcywgdmFsdWVbMF0sIHZhbHVlWzFdKTsKKwl9CisKKwlpbmZvKCJtdDltMTExIHJlZ2lzdGVyIHN0YXRlIGR1bXAgY29tcGxldGUiKTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvbTU2MDIvbTU2MDJfbXQ5bTExMS5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9tNTYwMi9tNTYwMl9tdDltMTExLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzE1MjA5ZDUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL201NjAyL201NjAyX210OW0xMTEuaApAQCAtMCwwICsxLDEwMTkgQEAKKy8qCisgKiBEcml2ZXIgZm9yIHRoZSBtdDltMTExIHNlbnNvcgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBFcmlrIEFuZHLDqW4KKyAqIENvcHlyaWdodCAoQykgMjAwNyBJbHllcyBHb3V0YS4gQmFzZWQgb24gdGhlIG01NjAzeCBMaW51eCBEcml2ZXIgUHJvamVjdC4KKyAqIENvcHlyaWdodCAoQykgMjAwNSBtNTYwM3ggTGludXggRHJpdmVyIFByb2plY3QgPG01NjAyQHgzbmcuY29tLmJyPgorICoKKyAqIFBvcnRpb25zIG9mIGNvZGUgdG8gVVNCIGludGVyZmFjZSBhbmQgQUxpIGRyaXZlciBzb2Z0d2FyZSwKKyAqIENvcHlyaWdodCAoYykgMjAwNiBXaWxsZW0gRHVpbmtlcgorICogdjRsMiBpbnRlcmZhY2UgbW9kZWxlZCBhZnRlciB0aGUgVjRMMiBkcml2ZXIKKyAqIGZvciBTTjlDMTB4IFBDIENhbWVyYSBDb250cm9sbGVycworICoKKyAqIFNvbWUgZGVmaW5lcyB0YWtlbiBmcm9tIHRoZSBtdDltMTExIHNlbnNvciBkcml2ZXIKKyAqIENvcHlyaWdodCAoQykgMjAwOCwgUm9iZXJ0IEphcnptaWsgPHJvYmVydC5qYXJ6bWlrQGZyZWUuZnI+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB2ZXJzaW9uIDIuCisgKgorICovCisKKyNpZm5kZWYgTTU2MDJfTVQ5TTExMV9IXworI2RlZmluZSBNNTYwMl9NVDlNMTExX0hfCisKKyNpbmNsdWRlICJtNTYwMl9zZW5zb3IuaCIKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjZGVmaW5lIE1UOU0xMTFfU0NfQ0hJUFZFUgkJCTB4MDAKKyNkZWZpbmUgTVQ5TTExMV9TQ19ST1dTVEFSVAkJCTB4MDEKKyNkZWZpbmUgTVQ5TTExMV9TQ19DT0xTVEFSVAkJCTB4MDIKKyNkZWZpbmUgTVQ5TTExMV9TQ19XSU5ET1dfSEVJR0hUCQkweDAzCisjZGVmaW5lIE1UOU0xMTFfU0NfV0lORE9XX1dJRFRICQkJMHgwNAorI2RlZmluZSBNVDlNMTExX1NDX0hCTEFOS19DT05URVhUX0IJCTB4MDUKKyNkZWZpbmUgTVQ5TTExMV9TQ19WQkxBTktfQ09OVEVYVF9CCQkweDA2CisjZGVmaW5lIE1UOU0xMTFfU0NfSEJMQU5LX0NPTlRFWFRfQQkJMHgwNworI2RlZmluZSBNVDlNMTExX1NDX1ZCTEFOS19DT05URVhUX0EJCTB4MDgKKyNkZWZpbmUgTVQ5TTExMV9TQ19TSFVUVEVSX1dJRFRICQkweDA5CisjZGVmaW5lIE1UOU0xMTFfU0NfUk9XX1NQRUVECQkJMHgwYQorCisjZGVmaW5lIE1UOU0xMTFfU0NfRVhUUkFfREVMQVkJCQkweDBiCisjZGVmaW5lIE1UOU0xMTFfU0NfU0hVVFRFUl9ERUxBWQkJMHgwYworI2RlZmluZSBNVDlNMTExX1NDX1JFU0VUCQkJMHgwZAorI2RlZmluZSBNVDlNMTExX1NDX1JfTU9ERV9DT05URVhUX0IJCTB4MjAKKyNkZWZpbmUgTVQ5TTExMV9TQ19SX01PREVfQ09OVEVYVF9BCQkweDIxCisjZGVmaW5lIE1UOU0xMTFfU0NfRkxBU0hfQ09OVFJPTAkJMHgyMworI2RlZmluZSBNVDlNMTExX1NDX0dSRUVOXzFfR0FJTgkJCTB4MmIKKyNkZWZpbmUgTVQ5TTExMV9TQ19CTFVFX0dBSU4JCQkweDJjCisjZGVmaW5lIE1UOU0xMTFfU0NfUkVEX0dBSU4JCQkweDJkCisjZGVmaW5lIE1UOU0xMTFfU0NfR1JFRU5fMl9HQUlOCQkJMHgyZQorI2RlZmluZSBNVDlNMTExX1NDX0dMT0JBTF9HQUlOCQkJMHgyZgorCisjZGVmaW5lIE1UOU0xMTFfUk1CX01JUlJPUl9ST1dTCQkJKDEgPDwgMCkKKyNkZWZpbmUgTVQ5TTExMV9STUJfTUlSUk9SX0NPTFMJCQkoMSA8PCAxKQorCisjZGVmaW5lIE1UOU0xMTFfQ09OVEVYVF9DT05UUk9MCQkJMHhjOAorI2RlZmluZSBNVDlNMTExX1BBR0VfTUFQCQkJMHhmMAorI2RlZmluZSBNVDlNMTExX0JZVEVXSVNFX0FERFJFU1MJCTB4ZjEKKworI2RlZmluZSBNVDlNMTExX0NQX09QRVJBVElOR19NT0RFX0NUTAkJMHgwNgorI2RlZmluZSBNVDlNMTExX0NQX0xVTUFfT0ZGU0VUCQkJMHgzNAorI2RlZmluZSBNVDlNMTExX0NQX0xVTUFfQ0xJUAkJCTB4MzUKKyNkZWZpbmUgTVQ5TTExMV9DUF9PVVRQVVRfRk9STUFUX0NUTDJfQ09OVEVYVF9BIDB4M2EKKyNkZWZpbmUgTVQ5TTExMV9DUF9MRU5TX0NPUlJFQ1RJT05fMQkJMHgzYgorI2RlZmluZSBNVDlNMTExX0NQX0RFRkVDVF9DT1JSX0NPTlRFWFRfQQkweDRjCisjZGVmaW5lIE1UOU0xMTFfQ1BfREVGRUNUX0NPUlJfQ09OVEVYVF9CCTB4NGQKKyNkZWZpbmUgTVQ5TTExMV9DUF9PVVRQVVRfRk9STUFUX0NUTDJfQ09OVEVYVF9CIDB4OWIKKyNkZWZpbmUgTVQ5TTExMV9DUF9HTE9CQUxfQ0xLX0NPTlRST0wJCTB4YjMKKworI2RlZmluZSBNVDlNMTExX0NDX0FVVE9fRVhQT1NVUkVfUEFSQU1FVEVSXzE4ICAgMHg2NQorI2RlZmluZSBNVDlNMTExX0NDX0FXQl9QQVJBTUVURVJfNwkJMHgyOAorCisjZGVmaW5lIE1UOU0xMTFfU0VOU09SX0NPUkUJCQkweDAwCisjZGVmaW5lIE1UOU0xMTFfQ09MT1JQSVBFCQkJMHgwMQorI2RlZmluZSBNVDlNMTExX0NBTUVSQV9DT05UUk9MCQkJMHgwMgorCisjZGVmaW5lIElOSVRJQUxfTUFYX0dBSU4JCQk2NAorI2RlZmluZSBERUZBVUxUX0dBSU4gCQkJCTI4MworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIEtlcm5lbCBtb2R1bGUgcGFyYW1ldGVycyAqLworZXh0ZXJuIGludCBmb3JjZV9zZW5zb3I7CitleHRlcm4gaW50IGR1bXBfc2Vuc29yOworCitpbnQgbXQ5bTExMV9wcm9iZShzdHJ1Y3Qgc2QgKnNkKTsKK2ludCBtdDltMTExX2luaXQoc3RydWN0IHNkICpzZCk7CitpbnQgbXQ5bTExMV9wb3dlcl9kb3duKHN0cnVjdCBzZCAqc2QpOworCitpbnQgbXQ5bTExMV9yZWFkX3NlbnNvcihzdHJ1Y3Qgc2QgKnNkLCBjb25zdCB1OCBhZGRyZXNzLAorCQkJdTggKmkyY19kYXRhLCBjb25zdCB1OCBsZW4pOworCitpbnQgbXQ5bTExMV93cml0ZV9zZW5zb3Ioc3RydWN0IHNkICpzZCwgY29uc3QgdTggYWRkcmVzcywKKwkJCSB1OCAqaTJjX2RhdGEsIGNvbnN0IHU4IGxlbik7CisKK3ZvaWQgbXQ5bTExMV9kdW1wX3JlZ2lzdGVycyhzdHJ1Y3Qgc2QgKnNkKTsKKworaW50IG10OW0xMTFfc2V0X3ZmbGlwKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKTsKK2ludCBtdDltMTExX2dldF92ZmxpcChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpOworaW50IG10OW0xMTFfZ2V0X2hmbGlwKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCk7CitpbnQgbXQ5bTExMV9zZXRfaGZsaXAoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpOworaW50IG10OW0xMTFfZ2V0X2dhaW4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKTsKK2ludCBtdDltMTExX3NldF9nYWluKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKTsKKworc3RhdGljIHN0cnVjdCBtNTYwMl9zZW5zb3IgbXQ5bTExMSA9IHsKKwkubmFtZSA9ICJNVDlNMTExIiwKKworCS5pMmNfc2xhdmVfaWQgPSAweGJhLAorCisJLnByb2JlID0gbXQ5bTExMV9wcm9iZSwKKwkuaW5pdCA9IG10OW0xMTFfaW5pdCwKKwkucG93ZXJfZG93biA9IG10OW0xMTFfcG93ZXJfZG93biwKKworCS5yZWFkX3NlbnNvciA9IG10OW0xMTFfcmVhZF9zZW5zb3IsCisJLndyaXRlX3NlbnNvciA9IG10OW0xMTFfd3JpdGVfc2Vuc29yLAorCisJLm5jdHJscyA9IDMsCisJLmN0cmxzID0geworCXsKKwkJeworCQkJLmlkCQk9IFY0TDJfQ0lEX1ZGTElQLAorCQkJLnR5cGUgICAgICAgICAgID0gVjRMMl9DVFJMX1RZUEVfQk9PTEVBTiwKKwkJCS5uYW1lICAgICAgICAgICA9ICJ2ZXJ0aWNhbCBmbGlwIiwKKwkJCS5taW5pbXVtICAgICAgICA9IDAsCisJCQkubWF4aW11bSAgICAgICAgPSAxLAorCQkJLnN0ZXAgICAgICAgICAgID0gMSwKKwkJCS5kZWZhdWx0X3ZhbHVlICA9IDAKKwkJfSwKKwkJLnNldCA9IG10OW0xMTFfc2V0X3ZmbGlwLAorCQkuZ2V0ID0gbXQ5bTExMV9nZXRfdmZsaXAKKwl9LCB7CisJCXsKKwkJCS5pZCAgICAgICAgICAgICA9IFY0TDJfQ0lEX0hGTElQLAorCQkJLnR5cGUgICAgICAgICAgID0gVjRMMl9DVFJMX1RZUEVfQk9PTEVBTiwKKwkJCS5uYW1lICAgICAgICAgICA9ICJob3Jpem9udGFsIGZsaXAiLAorCQkJLm1pbmltdW0gICAgICAgID0gMCwKKwkJCS5tYXhpbXVtICAgICAgICA9IDEsCisJCQkuc3RlcCAgICAgICAgICAgPSAxLAorCQkJLmRlZmF1bHRfdmFsdWUgID0gMAorCQl9LAorCQkuc2V0ID0gbXQ5bTExMV9zZXRfaGZsaXAsCisJCS5nZXQgPSBtdDltMTExX2dldF9oZmxpcAorCX0sIHsKKwkJeworCQkJLmlkICAgICAgICAgICAgID0gVjRMMl9DSURfR0FJTiwKKwkJCS50eXBlICAgICAgICAgICA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCisJCQkubmFtZSAgICAgICAgICAgPSAiZ2FpbiIsCisJCQkubWluaW11bSAgICAgICAgPSAwLAorCQkJLm1heGltdW0gICAgICAgID0gKElOSVRJQUxfTUFYX0dBSU4gLSAxKSAqIDIgKiAyICogMiwKKwkJCS5zdGVwICAgICAgICAgICA9IDEsCisJCQkuZGVmYXVsdF92YWx1ZSAgPSBERUZBVUxUX0dBSU4sCisJCQkuZmxhZ3MgICAgICAgICAgPSBWNEwyX0NUUkxfRkxBR19TTElERVIKKwkJfSwKKwkJLnNldCA9IG10OW0xMTFfc2V0X2dhaW4sCisJCS5nZXQgPSBtdDltMTExX2dldF9nYWluCisJfQorCX0sCisKKwkubm1vZGVzID0gMSwKKwkubW9kZXMgPSB7CisJeworCQlNNTYwMl9ERUZBVUxUX0ZSQU1FX1dJRFRILAorCQlNNTYwMl9ERUZBVUxUX0ZSQU1FX0hFSUdIVCwKKwkJVjRMMl9QSVhfRk1UX1NCR0dSOCwKKwkJVjRMMl9GSUVMRF9OT05FLAorCQkuc2l6ZWltYWdlID0KKwkJCU01NjAyX0RFRkFVTFRfRlJBTUVfV0lEVEggKiBNNTYwMl9ERUZBVUxUX0ZSQU1FX0hFSUdIVCwKKwkJLmJ5dGVzcGVybGluZSA9IE01NjAyX0RFRkFVTFRfRlJBTUVfV0lEVEgsCisJCS5jb2xvcnNwYWNlID0gVjRMMl9DT0xPUlNQQUNFX1NSR0IsCisJCS5wcml2ID0gMQorCX0KKwl9Cit9OworCitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBwcmVpbml0X210OW0xMTFbXVs0XSA9Cit7CisJe0JSSURHRSwgTTU2MDJfWEJfTUNVX0NMS19ESVYsIDB4MDIsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX01DVV9DTEtfQ1RSTCwgMHhiMCwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfU0VOX0NMS19ESVYsIDB4MDAsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX1NFTl9DTEtfQ1RSTCwgMHhiMCwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfU0VOU09SX1RZUEUsIDB4MGQsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX1NFTlNPUl9DVFJMLCAweDAwLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9BRENfQ1RSTCwgMHhjMCwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfU0VOU09SX1RZUEUsIDB4MDksIDB4MDB9LAorCisJe1NFTlNPUiwgTVQ5TTExMV9QQUdFX01BUCwgMHgwMCwgMHgwMH0sCisJe1NFTlNPUiwgTVQ5TTExMV9TQ19SRVNFVCwgMHhmZiwgMHhmN30sCisKKwl7QlJJREdFLCBNNTYwMl9YQl9HUElPX0RJUiwgMHgwNSwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfR1BJT19EQVQsIDB4MDQsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX0dQSU9fRU5fSCwgMHgzZSwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfR1BJT19ESVJfSCwgMHgzZSwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfR1BJT19EQVRfSCwgMHgwMiwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfR1BJT19FTl9MLCAweGZmLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9HUElPX0RJUl9MLCAweGZmLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9HUElPX0RBVF9MLCAweDAwLCAweDAwfSwKKworCXtCUklER0UsIE01NjAyX1hCX1NFTl9DTEtfRElWLCAweDAwLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9TRU5fQ0xLX0NUUkwsIDB4YjAsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX0dQSU9fRElSLCAweDA3LCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9HUElPX0RBVCwgMHgwYiwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfR1BJT19FTl9ILCAweDA2LCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9HUElPX0VOX0wsIDB4MDAsIDB4MDB9LAorCisJe0JSSURHRSwgTTU2MDJfWEJfSTJDX0NMS19ESVYsIDB4MGEsIDB4MDB9Cit9OworCitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBpbml0X210OW0xMTFbXVs0XSA9Cit7CisJe0JSSURHRSwgTTU2MDJfWEJfTUNVX0NMS19ESVYsIDB4MDIsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX01DVV9DTEtfQ1RSTCwgMHhiMCwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfU0VOX0NMS19ESVYsIDB4MDAsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX1NFTl9DTEtfQ1RSTCwgMHhiMCwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfQURDX0NUUkwsIDB4YzAsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX1NFTlNPUl9UWVBFLCAweDBkLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9TRU5TT1JfQ1RSTCwgMHgwMCwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfQURDX0NUUkwsIDB4YzAsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX1NFTlNPUl9UWVBFLCAweDA5LCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9TRU5fQ0xLX0RJViwgMHgwMCwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfU0VOX0NMS19DVFJMLCAweGIwLCAweDAwfSwKKworCXtTRU5TT1IsIE1UOU0xMTFfUEFHRV9NQVAsIDB4MDAsIDB4MDB9LAorCXtTRU5TT1IsIE1UOU0xMTFfU0NfUkVTRVQsIDB4ZmYsIDB4ZmZ9LAorCXtTRU5TT1IsIE1UOU0xMTFfU0NfUkVTRVQsIDB4ZmYsIDB4ZmZ9LAorCXtTRU5TT1IsIE1UOU0xMTFfU0NfUkVTRVQsIDB4ZmYsIDB4ZGV9LAorCXtTRU5TT1IsIE1UOU0xMTFfU0NfUkVTRVQsIDB4ZmYsIDB4ZmZ9LAorCXtTRU5TT1IsIE1UOU0xMTFfU0NfUkVTRVQsIDB4ZmYsIDB4Zjd9LAorCXtTRU5TT1IsIE1UOU0xMTFfUEFHRV9NQVAsIDB4MDAsIDB4MDF9LAorCisJe0JSSURHRSwgTTU2MDJfWEJfSTJDX1JFR19BRERSLCAweGIzLCAweDAwfSwKKworCXtTRU5TT1IsIE1UOU0xMTFfQ1BfR0xPQkFMX0NMS19DT05UUk9MLCAweGZmLCAweGZmfSwKKworCXtCUklER0UsIE01NjAyX1hCX0dQSU9fRElSLCAweDA1LCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9HUElPX0RBVCwgMHgwNCwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfR1BJT19FTl9ILCAweDNlLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9HUElPX0RJUl9ILCAweDNlLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9HUElPX0RBVF9ILCAweDAyLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9HUElPX0VOX0wsIDB4ZmYsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX0dQSU9fRElSX0wsIDB4ZmYsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX0dQSU9fREFUX0wsIDB4MDAsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX1NFTl9DTEtfRElWLCAweDA0LCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9TRU5fQ0xLX0NUUkwsIDB4YjAsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX1NFTl9DTEtfRElWLCAweDAwLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9TRU5fQ0xLX0NUUkwsIDB4YjAsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX0FEQ19DVFJMLCAweGMwLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9TRU5TT1JfVFlQRSwgMHgwOSwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfU0VOX0NMS19ESVYsIDB4MDAsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX1NFTl9DTEtfQ1RSTCwgMHhiMCwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfR1BJT19ESVIsIDB4MDcsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX0dQSU9fREFULCAweDBiLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9HUElPX0VOX0gsIDB4MDYsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX0dQSU9fRU5fTCwgMHgwMCwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfSTJDX0NMS19ESVYsIDB4MGEsIDB4MDB9LAorCisJe1NFTlNPUiwgTVQ5TTExMV9QQUdFX01BUCwgMHgwMCwgMHgwMH0sCisJe1NFTlNPUiwgTVQ5TTExMV9TQ19SRVNFVCwgMHgwMCwgMHgwNX0sCisJe1NFTlNPUiwgTVQ5TTExMV9QQUdFX01BUCwgMHgwMCwgMHgwMH0sCisJe1NFTlNPUiwgTVQ5TTExMV9TQ19SRVNFVCwgMHgwMCwgMHgyOX0sCisJe1NFTlNPUiwgTVQ5TTExMV9QQUdFX01BUCwgMHgwMCwgMHgwMH0sCisJe1NFTlNPUiwgTVQ5TTExMV9TQ19SRVNFVCwgMHgwMCwgMHgwOH0sCisJe1NFTlNPUiwgTVQ5TTExMV9QQUdFX01BUCwgMHgwMCwgMHgwMX0sCisJe1NFTlNPUiwgTVQ5TTExMV9DUF9PUEVSQVRJTkdfTU9ERV9DVEwsIDB4MDAsIDB4MTB9LAorCXtTRU5TT1IsIE1UOU0xMTFfQ1BfTEVOU19DT1JSRUNUSU9OXzEsIDB4MDQsIDB4MmF9LAorCXtTRU5TT1IsIE1UOU0xMTFfQ1BfREVGRUNUX0NPUlJfQ09OVEVYVF9BLCAweDAwLCAweDAxfSwKKwl7U0VOU09SLCBNVDlNMTExX0NQX0RFRkVDVF9DT1JSX0NPTlRFWFRfQiwgMHgwMCwgMHgwMX0sCisJe1NFTlNPUiwgTVQ5TTExMV9DUF9MVU1BX09GRlNFVCwgMHgwMCwgMHgwMH0sCisJe1NFTlNPUiwgTVQ5TTExMV9DUF9MVU1BX0NMSVAsIDB4ZmYsIDB4MDB9LAorCXtTRU5TT1IsIE1UOU0xMTFfQ1BfT1VUUFVUX0ZPUk1BVF9DVEwyX0NPTlRFWFRfQSwgMHgxNCwgMHgwMH0sCisJe1NFTlNPUiwgTVQ5TTExMV9DUF9PVVRQVVRfRk9STUFUX0NUTDJfQ09OVEVYVF9CLCAweDE0LCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9JMkNfUkVHX0FERFIsIDB4Y2QsIDB4MDB9LAorCisJe1NFTlNPUiwgMHhjZCwgMHgwMCwgMHgwZX0sCisJe0JSSURHRSwgTTU2MDJfWEJfSTJDX1JFR19BRERSLCAweGQwLCAweDAwfSwKKwl7U0VOU09SLCAweGQwLCAweDAwLCAweDQwfSwKKwl7U0VOU09SLCBNVDlNMTExX1BBR0VfTUFQLCAweDAwLCAweDAyfSwKKwl7U0VOU09SLCBNVDlNMTExX0NDX0FVVE9fRVhQT1NVUkVfUEFSQU1FVEVSXzE4LCAweDAwLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9JMkNfUkVHX0FERFIsIDB4MjgsIDB4MDB9LAorCXtTRU5TT1IsIE1UOU0xMTFfQ0NfQVdCX1BBUkFNRVRFUl83LCAweGVmLCAweDA3fSwKKwl7QlJJREdFLCBNNTYwMl9YQl9JMkNfUkVHX0FERFIsIDB4MjgsIDB4MDB9LAorCXtTRU5TT1IsIE1UOU0xMTFfQ0NfQVdCX1BBUkFNRVRFUl83LCAweGVmLCAweDAzfSwKKwl7U0VOU09SLCBNVDlNMTExX1BBR0VfTUFQLCAweDAwLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9JMkNfUkVHX0FERFIsIDB4MzMsIDB4MDB9LAorCXtTRU5TT1IsIDB4MzMsIDB4MDMsIDB4NDl9LAorCXtCUklER0UsIE01NjAyX1hCX0kyQ19SRUdfQUREUiwgMHgzMywgMHgwMH0sCisKKwl7U0VOU09SLCAweDMzLCAweDAzLCAweDQ5fSwKKwl7U0VOU09SLCAweDM0LCAweGMwLCAweDE5fSwKKwl7U0VOU09SLCAweDNmLCAweDIwLCAweDIwfSwKKwl7U0VOU09SLCAweDQwLCAweDIwLCAweDIwfSwKKwl7U0VOU09SLCAweDVhLCAweGMwLCAweDBhfSwKKwl7U0VOU09SLCAweDcwLCAweDdiLCAweDBhfSwKKwl7U0VOU09SLCAweDcxLCAweGZmLCAweDAwfSwKKwl7U0VOU09SLCAweDcyLCAweDE5LCAweDBlfSwKKwl7U0VOU09SLCAweDczLCAweDE4LCAweDBmfSwKKwl7U0VOU09SLCAweDc0LCAweDU3LCAweDMyfSwKKwl7U0VOU09SLCAweDc1LCAweDU2LCAweDM0fSwKKwl7U0VOU09SLCAweDc2LCAweDczLCAweDM1fSwKKwl7U0VOU09SLCAweDc3LCAweDMwLCAweDEyfSwKKwl7U0VOU09SLCAweDc4LCAweDc5LCAweDAyfSwKKwl7U0VOU09SLCAweDc5LCAweDc1LCAweDA2fSwKKwl7U0VOU09SLCAweDdhLCAweDc3LCAweDBhfSwKKwl7U0VOU09SLCAweDdiLCAweDc4LCAweDA5fSwKKwl7U0VOU09SLCAweDdjLCAweDdkLCAweDA2fSwKKwl7U0VOU09SLCAweDdkLCAweDMxLCAweDEwfSwKKwl7U0VOU09SLCAweDdlLCAweDAwLCAweDdlfSwKKwl7U0VOU09SLCAweDgwLCAweDU5LCAweDA0fSwKKwl7U0VOU09SLCAweDgxLCAweDU5LCAweDA0fSwKKwl7U0VOU09SLCAweDgyLCAweDU3LCAweDBhfSwKKwl7U0VOU09SLCAweDgzLCAweDU4LCAweDBifSwKKwl7U0VOU09SLCAweDg0LCAweDQ3LCAweDBjfSwKKwl7U0VOU09SLCAweDg1LCAweDQ4LCAweDBlfSwKKwl7U0VOU09SLCAweDg2LCAweDViLCAweDAyfSwKKwl7U0VOU09SLCAweDg3LCAweDAwLCAweDVjfSwKKwl7U0VOU09SLCBNVDlNMTExX0NPTlRFWFRfQ09OVFJPTCwgMHgwMCwgMHgwOH0sCisJe1NFTlNPUiwgMHg2MCwgMHgwMCwgMHg4MH0sCisJe1NFTlNPUiwgMHg2MSwgMHgwMCwgMHgwMH0sCisJe1NFTlNPUiwgMHg2MiwgMHgwMCwgMHgwMH0sCisJe1NFTlNPUiwgMHg2MywgMHgwMCwgMHgwMH0sCisJe1NFTlNPUiwgMHg2NCwgMHgwMCwgMHgwMH0sCisKKwl7U0VOU09SLCBNVDlNMTExX1NDX1JPV1NUQVJULCAweDAwLCAweDBkfSwKKwl7U0VOU09SLCBNVDlNMTExX1NDX0NPTFNUQVJULCAweDAwLCAweDE4fSwKKwl7U0VOU09SLCBNVDlNMTExX1NDX1dJTkRPV19IRUlHSFQsIDB4MDQsIDB4MDR9LAorCXtTRU5TT1IsIE1UOU0xMTFfU0NfV0lORE9XX1dJRFRILCAweDA1LCAweDA4fSwKKwl7U0VOU09SLCBNVDlNMTExX1NDX0hCTEFOS19DT05URVhUX0IsIDB4MDEsIDB4Mzh9LAorCXtTRU5TT1IsIE1UOU0xMTFfU0NfVkJMQU5LX0NPTlRFWFRfQiwgMHgwMCwgMHgxMX0sCisJe1NFTlNPUiwgTVQ5TTExMV9TQ19IQkxBTktfQ09OVEVYVF9BLCAweDAxLCAweDM4fSwKKwl7U0VOU09SLCBNVDlNMTExX1NDX1ZCTEFOS19DT05URVhUX0EsIDB4MDAsIDB4MTF9LAorCXtTRU5TT1IsIE1UOU0xMTFfU0NfUl9NT0RFX0NPTlRFWFRfQiwgMHgwMSwgMHgwM30sCisJe1NFTlNPUiwgTVQ5TTExMV9TQ19SX01PREVfQ09OVEVYVF9BLCAweDAxLCAweDAzfSwKKwl7U0VOU09SLCAweDMwLCAweDA0LCAweDAwfSwKKworCXtCUklER0UsIE01NjAyX1hCX1NFTl9DTEtfRElWLCAweDA2LCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9TRU5fQ0xLX0NUUkwsIDB4YjAsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX0FEQ19DVFJMLCAweGMwLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9TRU5TT1JfVFlQRSwgMHgwOSwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfTElORV9PRl9GUkFNRV9ILCAweDgxLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9QSVhfT0ZfTElORV9ILCAweDgyLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9TSUdfSU5JLCAweDAxLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9WU1lOQ19QQVJBLCAweDAwLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9WU1lOQ19QQVJBLCAweDAwLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9WU1lOQ19QQVJBLCAweDAwLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9WU1lOQ19QQVJBLCAweDAwLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9WU1lOQ19QQVJBLCAweDA0LCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9WU1lOQ19QQVJBLCAweDA0LCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9WU1lOQ19QQVJBLCAweDAwLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9WU1lOQ19QQVJBLCAweDAwLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9TSUdfSU5JLCAweDAwLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9TSUdfSU5JLCAweDAyLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9IU1lOQ19QQVJBLCAweDAwLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9IU1lOQ19QQVJBLCAweDAwLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9IU1lOQ19QQVJBLCAweDA1LCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9IU1lOQ19QQVJBLCAweDA3LCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9TSUdfSU5JLCAweDAwLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9TRU5fQ0xLX0RJViwgMHgwMCwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfU0VOX0NMS19DVFJMLCAweGEwLCAweDAwfSwKKwl7U0VOU09SLCBNVDlNMTExX1BBR0VfTUFQLCAweDAwLCAweDAwfSwKKwl7U0VOU09SLCBNVDlNMTExX1NDX1NIVVRURVJfV0lEVEgsIDB4MDEsIDB4ZjR9LAorCXtTRU5TT1IsIE1UOU0xMTFfU0NfR0xPQkFMX0dBSU4sIDB4MDAsIDB4ZWF9LAorCisJe0JSSURHRSwgTTU2MDJfWEJfU0VOX0NMS19ESVYsIDB4MDYsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX1NFTl9DTEtfQ1RSTCwgMHhiMCwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfQURDX0NUUkwsIDB4YzAsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX1NFTlNPUl9UWVBFLCAweDA5LCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9MSU5FX09GX0ZSQU1FX0gsIDB4ODEsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX1BJWF9PRl9MSU5FX0gsIDB4ODIsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX1NJR19JTkksIDB4MDEsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX1ZTWU5DX1BBUkEsIDB4MDAsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX1ZTWU5DX1BBUkEsIDB4MDAsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX1ZTWU5DX1BBUkEsIDB4MDAsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX1ZTWU5DX1BBUkEsIDB4MDAsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX1ZTWU5DX1BBUkEsIDB4MDQsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX1ZTWU5DX1BBUkEsIDB4MDQsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX1ZTWU5DX1BBUkEsIDB4MDAsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX1ZTWU5DX1BBUkEsIDB4MDAsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX1NJR19JTkksIDB4MDAsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX1NJR19JTkksIDB4MDIsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX0hTWU5DX1BBUkEsIDB4MDAsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX0hTWU5DX1BBUkEsIDB4MDAsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX0hTWU5DX1BBUkEsIDB4MDUsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX0hTWU5DX1BBUkEsIDB4MDcsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX1NJR19JTkksIDB4MDAsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX1NFTl9DTEtfRElWLCAweDAwLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9TRU5fQ0xLX0NUUkwsIDB4YjAsIDB4MDB9LAorCisJe1NFTlNPUiwgTVQ5TTExMV9QQUdFX01BUCwgMHgwMCwgMHgwMH0sCisJe1NFTlNPUiwgTVQ5TTExMV9TQ19SRVNFVCwgMHgwMCwgMHgwOX0sCisJe1NFTlNPUiwgTVQ5TTExMV9TQ19SRVNFVCwgMHgwMCwgMHgyOX0sCisJe1NFTlNPUiwgTVQ5TTExMV9TQ19SRVNFVCwgMHgwMCwgMHgwOH0sCisJe1NFTlNPUiwgTVQ5TTExMV9TQ19SRVNFVCwgMHgwMCwgMHgwY30sCisJe1NFTlNPUiwgTVQ5TTExMV9TQ19SRVNFVCwgMHgwMCwgMHgwNH0sCisJe1NFTlNPUiwgTVQ5TTExMV9QQUdFX01BUCwgMHgwMCwgMHgwMX0sCisJe0JSSURHRSwgTTU2MDJfWEJfSTJDX1JFR19BRERSLCAweGIzLCAweDAwfSwKKwl7U0VOU09SLCBNVDlNMTExX0NQX0dMT0JBTF9DTEtfQ09OVFJPTCwgMHgwMCwgMHgwM30sCisJe0JSSURHRSwgTTU2MDJfWEJfR1BJT19ESVIsIDB4MDUsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX0dQSU9fREFULCAweDA0LCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9HUElPX0VOX0gsIDB4M2UsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX0dQSU9fRElSX0gsIDB4M2UsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX0dQSU9fREFUX0gsIDB4MDIsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX0dQSU9fRU5fTCwgMHhmZiwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfR1BJT19ESVJfTCwgMHhmZiwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfR1BJT19EQVRfTCwgMHgwMCwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfU0VOX0NMS19ESVYsIDB4MDQsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX1NFTl9DTEtfQ1RSTCwgMHhiMCwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfU0VOX0NMS19ESVYsIDB4MDAsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX1NFTl9DTEtfQ1RSTCwgMHhiMCwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfQURDX0NUUkwsIDB4YzAsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX1NFTlNPUl9UWVBFLCAweDA5LCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9TRU5fQ0xLX0RJViwgMHgwMCwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfU0VOX0NMS19DVFJMLCAweGIwLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9HUElPX0RJUiwgMHgwNywgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfR1BJT19EQVQsIDB4MGIsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX0dQSU9fRU5fSCwgMHgwNiwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfR1BJT19FTl9MLCAweDAwLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9JMkNfQ0xLX0RJViwgMHgwYSwgMHgwMH0sCisKKwl7U0VOU09SLCBNVDlNMTExX1BBR0VfTUFQLCAweDAwLCAweDAwfSwKKwl7U0VOU09SLCBNVDlNMTExX1NDX1JFU0VULCAweDAwLCAweDA1fSwKKwl7U0VOU09SLCBNVDlNMTExX1BBR0VfTUFQLCAweDAwLCAweDAwfSwKKwl7U0VOU09SLCBNVDlNMTExX1NDX1JFU0VULCAweDAwLCAweDI5fSwKKwl7U0VOU09SLCBNVDlNMTExX1BBR0VfTUFQLCAweDAwLCAweDAwfSwKKwl7U0VOU09SLCBNVDlNMTExX1NDX1JFU0VULCAweDAwLCAweDA4fSwKKwl7U0VOU09SLCBNVDlNMTExX1BBR0VfTUFQLCAweDAwLCAweDAxfSwKKwl7U0VOU09SLCBNVDlNMTExX0NQX09QRVJBVElOR19NT0RFX0NUTCwgMHgwMCwgMHgxMH0sCisJe1NFTlNPUiwgTVQ5TTExMV9DUF9MRU5TX0NPUlJFQ1RJT05fMSwgMHgwNCwgMHgyYX0sCisJe1NFTlNPUiwgTVQ5TTExMV9DUF9ERUZFQ1RfQ09SUl9DT05URVhUX0EsIDB4MDAsIDB4MDF9LAorCXtTRU5TT1IsIE1UOU0xMTFfQ1BfREVGRUNUX0NPUlJfQ09OVEVYVF9CLCAweDAwLCAweDAxfSwKKwl7U0VOU09SLCBNVDlNMTExX0NQX0xVTUFfT0ZGU0VULCAweDAwLCAweDAwfSwKKwl7U0VOU09SLCBNVDlNMTExX0NQX0xVTUFfQ0xJUCwgMHhmZiwgMHgwMH0sCisJe1NFTlNPUiwgTVQ5TTExMV9DUF9PVVRQVVRfRk9STUFUX0NUTDJfQ09OVEVYVF9BLCAweDE0LCAweDAwfSwKKwl7U0VOU09SLCBNVDlNMTExX0NQX09VVFBVVF9GT1JNQVRfQ1RMMl9DT05URVhUX0IsIDB4MTQsIDB4MDB9LAorCisJe0JSSURHRSwgTTU2MDJfWEJfSTJDX1JFR19BRERSLCAweGNkLCAweDAwfSwKKwl7U0VOU09SLCAweGNkLCAweDAwLCAweDBlfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9JMkNfUkVHX0FERFIsIDB4ZDAsIDB4MDB9LAorCXtTRU5TT1IsIDB4ZDAsIDB4MDAsIDB4NDB9LAorCXtTRU5TT1IsIE1UOU0xMTFfUEFHRV9NQVAsIDB4MDAsIDB4MDJ9LAorCXtTRU5TT1IsIE1UOU0xMTFfQ0NfQVVUT19FWFBPU1VSRV9QQVJBTUVURVJfMTgsIDB4MDAsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX0kyQ19SRUdfQUREUiwgMHgyOCwgMHgwMH0sCisJe1NFTlNPUiwgTVQ5TTExMV9DQ19BV0JfUEFSQU1FVEVSXzcsIDB4ZWYsIDB4MDd9LAorCXtCUklER0UsIE01NjAyX1hCX0kyQ19SRUdfQUREUiwgMHgyOCwgMHgwMH0sCisJe1NFTlNPUiwgTVQ5TTExMV9DQ19BV0JfUEFSQU1FVEVSXzcsIDB4ZWYsIDB4MDN9LAorCXtTRU5TT1IsIE1UOU0xMTFfUEFHRV9NQVAsIDB4MDAsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX0kyQ19SRUdfQUREUiwgMHgzMywgMHgwMH0sCisJe1NFTlNPUiwgMHgzMywgMHgwMywgMHg0OX0sCisJe0JSSURHRSwgTTU2MDJfWEJfSTJDX1JFR19BRERSLCAweDMzLCAweDAwfSwKKworCXtTRU5TT1IsIDB4MzMsIDB4MDMsIDB4NDl9LAorCXtTRU5TT1IsIDB4MzQsIDB4YzAsIDB4MTl9LAorCXtTRU5TT1IsIDB4M2YsIDB4MjAsIDB4MjB9LAorCXtTRU5TT1IsIDB4NDAsIDB4MjAsIDB4MjB9LAorCXtTRU5TT1IsIDB4NWEsIDB4YzAsIDB4MGF9LAorCXtTRU5TT1IsIDB4NzAsIDB4N2IsIDB4MGF9LAorCXtTRU5TT1IsIDB4NzEsIDB4ZmYsIDB4MDB9LAorCXtTRU5TT1IsIDB4NzIsIDB4MTksIDB4MGV9LAorCXtTRU5TT1IsIDB4NzMsIDB4MTgsIDB4MGZ9LAorCXtTRU5TT1IsIDB4NzQsIDB4NTcsIDB4MzJ9LAorCXtTRU5TT1IsIDB4NzUsIDB4NTYsIDB4MzR9LAorCXtTRU5TT1IsIDB4NzYsIDB4NzMsIDB4MzV9LAorCXtTRU5TT1IsIDB4NzcsIDB4MzAsIDB4MTJ9LAorCXtTRU5TT1IsIDB4NzgsIDB4NzksIDB4MDJ9LAorCXtTRU5TT1IsIDB4NzksIDB4NzUsIDB4MDZ9LAorCXtTRU5TT1IsIDB4N2EsIDB4NzcsIDB4MGF9LAorCXtTRU5TT1IsIDB4N2IsIDB4NzgsIDB4MDl9LAorCXtTRU5TT1IsIDB4N2MsIDB4N2QsIDB4MDZ9LAorCXtTRU5TT1IsIDB4N2QsIDB4MzEsIDB4MTB9LAorCXtTRU5TT1IsIDB4N2UsIDB4MDAsIDB4N2V9LAorCXtTRU5TT1IsIDB4ODAsIDB4NTksIDB4MDR9LAorCXtTRU5TT1IsIDB4ODEsIDB4NTksIDB4MDR9LAorCXtTRU5TT1IsIDB4ODIsIDB4NTcsIDB4MGF9LAorCXtTRU5TT1IsIDB4ODMsIDB4NTgsIDB4MGJ9LAorCXtTRU5TT1IsIDB4ODQsIDB4NDcsIDB4MGN9LAorCXtTRU5TT1IsIDB4ODUsIDB4NDgsIDB4MGV9LAorCXtTRU5TT1IsIDB4ODYsIDB4NWIsIDB4MDJ9LAorCXtTRU5TT1IsIDB4ODcsIDB4MDAsIDB4NWN9LAorCXtTRU5TT1IsIE1UOU0xMTFfQ09OVEVYVF9DT05UUk9MLCAweDAwLCAweDA4fSwKKwl7U0VOU09SLCAweDYwLCAweDAwLCAweDgwfSwKKwl7U0VOU09SLCAweDYxLCAweDAwLCAweDAwfSwKKwl7U0VOU09SLCAweDYyLCAweDAwLCAweDAwfSwKKwl7U0VOU09SLCAweDYzLCAweDAwLCAweDAwfSwKKwl7U0VOU09SLCAweDY0LCAweDAwLCAweDAwfSwKKworCXtTRU5TT1IsIE1UOU0xMTFfU0NfUk9XU1RBUlQsIDB4MDAsIDB4MGR9LAorCXtTRU5TT1IsIE1UOU0xMTFfU0NfQ09MU1RBUlQsIDB4MDAsIDB4MTh9LAorCXtTRU5TT1IsIE1UOU0xMTFfU0NfV0lORE9XX0hFSUdIVCwgMHgwNCwgMHgwNH0sCisJe1NFTlNPUiwgTVQ5TTExMV9TQ19XSU5ET1dfV0lEVEgsIDB4MDUsIDB4MDh9LAorCXtTRU5TT1IsIE1UOU0xMTFfU0NfSEJMQU5LX0NPTlRFWFRfQiwgMHgwMSwgMHgzOH0sCisJe1NFTlNPUiwgTVQ5TTExMV9TQ19WQkxBTktfQ09OVEVYVF9CLCAweDAwLCAweDExfSwKKwl7U0VOU09SLCBNVDlNMTExX1NDX0hCTEFOS19DT05URVhUX0EsIDB4MDEsIDB4Mzh9LAorCXtTRU5TT1IsIE1UOU0xMTFfU0NfVkJMQU5LX0NPTlRFWFRfQSwgMHgwMCwgMHgxMX0sCisJe1NFTlNPUiwgTVQ5TTExMV9TQ19SX01PREVfQ09OVEVYVF9CLCAweDAxLCAweDAzfSwKKwl7U0VOU09SLCBNVDlNMTExX1NDX1JfTU9ERV9DT05URVhUX0EsIDB4MDEsIDB4MDN9LAorCXtTRU5TT1IsIDB4MzAsIDB4MDQsIDB4MDB9LAorCisJe0JSSURHRSwgTTU2MDJfWEJfU0VOX0NMS19ESVYsIDB4MDYsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX1NFTl9DTEtfQ1RSTCwgMHhiMCwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfQURDX0NUUkwsIDB4YzAsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX1NFTlNPUl9UWVBFLCAweDA5LCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9MSU5FX09GX0ZSQU1FX0gsIDB4ODEsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX1BJWF9PRl9MSU5FX0gsIDB4ODIsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX1NJR19JTkksIDB4MDEsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX1ZTWU5DX1BBUkEsIDB4MDAsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX1ZTWU5DX1BBUkEsIDB4MDAsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX1ZTWU5DX1BBUkEsIDB4MDAsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX1ZTWU5DX1BBUkEsIDB4MDAsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX1ZTWU5DX1BBUkEsIDB4MDQsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX1ZTWU5DX1BBUkEsIDB4MDQsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX1ZTWU5DX1BBUkEsIDB4MDAsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX1ZTWU5DX1BBUkEsIDB4MDAsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX1NJR19JTkksIDB4MDAsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX1NJR19JTkksIDB4MDIsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX0hTWU5DX1BBUkEsIDB4MDAsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX0hTWU5DX1BBUkEsIDB4MDAsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX0hTWU5DX1BBUkEsIDB4MDUsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX0hTWU5DX1BBUkEsIDB4MDcsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX1NJR19JTkksIDB4MDAsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX1NFTl9DTEtfRElWLCAweDAwLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9TRU5fQ0xLX0NUUkwsIDB4YTAsIDB4MDB9LAorCXtTRU5TT1IsIE1UOU0xMTFfUEFHRV9NQVAsIDB4MDAsIDB4MDB9LAorCXtTRU5TT1IsIE1UOU0xMTFfU0NfU0hVVFRFUl9XSURUSCwgMHgwMSwgMHhmNH0sCisJe1NFTlNPUiwgTVQ5TTExMV9TQ19HTE9CQUxfR0FJTiwgMHgwMCwgMHhlYX0sCisJe0JSSURHRSwgTTU2MDJfWEJfU0VOX0NMS19ESVYsIDB4MDAsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX1NFTl9DTEtfQ1RSTCwgMHhiMCwgMHgwMH0sCisKKwl7U0VOU09SLCBNVDlNMTExX1BBR0VfTUFQLCAweDAwLCAweDAwfSwKKwl7U0VOU09SLCBNVDlNMTExX1NDX1JFU0VULCAweDAwLCAweDA5fSwKKwl7U0VOU09SLCBNVDlNMTExX1NDX1JFU0VULCAweDAwLCAweDI5fSwKKwl7U0VOU09SLCBNVDlNMTExX1NDX1JFU0VULCAweDAwLCAweDA4fSwKKwl7U0VOU09SLCBNVDlNMTExX1NDX1JFU0VULCAweDAwLCAweDBjfSwKKwl7U0VOU09SLCBNVDlNMTExX1NDX1JFU0VULCAweDAwLCAweDA0fSwKKwl7U0VOU09SLCBNVDlNMTExX1BBR0VfTUFQLCAweDAwLCAweDAxfSwKKworCXtCUklER0UsIE01NjAyX1hCX0kyQ19SRUdfQUREUiwgMHhiMywgMHgwMH0sCisJe1NFTlNPUiwgTVQ5TTExMV9DUF9HTE9CQUxfQ0xLX0NPTlRST0wsIDB4MDAsIDB4MDN9LAorCXtCUklER0UsIE01NjAyX1hCX0dQSU9fRElSLCAweDA1LCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9HUElPX0RBVCwgMHgwNCwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfR1BJT19FTl9ILCAweDNlLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9HUElPX0RJUl9ILCAweDNlLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9HUElPX0RBVF9ILCAweDAyLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9HUElPX0VOX0wsIDB4ZmYsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX0dQSU9fRElSX0wsIDB4ZmYsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX0dQSU9fREFUX0wsIDB4MDAsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX1NFTl9DTEtfRElWLCAweDA0LCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9TRU5fQ0xLX0NUUkwsIDB4YjAsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX1NFTl9DTEtfRElWLCAweDAwLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9TRU5fQ0xLX0NUUkwsIDB4YjAsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX0FEQ19DVFJMLCAweGMwLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9TRU5TT1JfVFlQRSwgMHgwOSwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfU0VOX0NMS19ESVYsIDB4MDAsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX1NFTl9DTEtfQ1RSTCwgMHhiMCwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfR1BJT19ESVIsIDB4MDcsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX0dQSU9fREFULCAweDBiLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9HUElPX0VOX0gsIDB4MDYsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX0dQSU9fRU5fTCwgMHgwMCwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfSTJDX0NMS19ESVYsIDB4MGEsIDB4MDB9LAorCisJe1NFTlNPUiwgTVQ5TTExMV9QQUdFX01BUCwgMHgwMCwgMHgwMH0sCisJe1NFTlNPUiwgTVQ5TTExMV9TQ19SRVNFVCwgMHgwMCwgMHgwNX0sCisJe1NFTlNPUiwgTVQ5TTExMV9QQUdFX01BUCwgMHgwMCwgMHgwMH0sCisJe1NFTlNPUiwgTVQ5TTExMV9TQ19SRVNFVCwgMHgwMCwgMHgyOX0sCisJe1NFTlNPUiwgTVQ5TTExMV9QQUdFX01BUCwgMHgwMCwgMHgwMH0sCisJe1NFTlNPUiwgTVQ5TTExMV9TQ19SRVNFVCwgMHgwMCwgMHgwOH0sCisJe1NFTlNPUiwgTVQ5TTExMV9QQUdFX01BUCwgMHgwMCwgMHgwMX0sCisJe1NFTlNPUiwgTVQ5TTExMV9DUF9PUEVSQVRJTkdfTU9ERV9DVEwsIDB4MDAsIDB4MTB9LAorCXtTRU5TT1IsIE1UOU0xMTFfQ1BfTEVOU19DT1JSRUNUSU9OXzEsIDB4MDQsIDB4MmF9LAorCXtTRU5TT1IsIE1UOU0xMTFfQ1BfREVGRUNUX0NPUlJfQ09OVEVYVF9BLCAweDAwLCAweDAxfSwKKwl7U0VOU09SLCBNVDlNMTExX0NQX0RFRkVDVF9DT1JSX0NPTlRFWFRfQiwgMHgwMCwgMHgwMX0sCisJe1NFTlNPUiwgTVQ5TTExMV9DUF9MVU1BX09GRlNFVCwgMHgwMCwgMHgwMH0sCisJe1NFTlNPUiwgTVQ5TTExMV9DUF9MVU1BX0NMSVAsIDB4ZmYsIDB4MDB9LAorCXtTRU5TT1IsIE1UOU0xMTFfQ1BfT1VUUFVUX0ZPUk1BVF9DVEwyX0NPTlRFWFRfQSwgMHgxNCwgMHgwMH0sCisJe1NFTlNPUiwgTVQ5TTExMV9DUF9PVVRQVVRfRk9STUFUX0NUTDJfQ09OVEVYVF9CLCAweDE0LCAweDAwfSwKKworCXtCUklER0UsIE01NjAyX1hCX0kyQ19SRUdfQUREUiwgMHhjZCwgMHgwMH0sCisJe1NFTlNPUiwgMHhjZCwgMHgwMCwgMHgwZX0sCisJe0JSSURHRSwgTTU2MDJfWEJfSTJDX1JFR19BRERSLCAweGQwLCAweDAwfSwKKwl7U0VOU09SLCAweGQwLCAweDAwLCAweDQwfSwKKwl7U0VOU09SLCBNVDlNMTExX1BBR0VfTUFQLCAweDAwLCAweDAyfSwKKwl7U0VOU09SLCBNVDlNMTExX0NDX0FVVE9fRVhQT1NVUkVfUEFSQU1FVEVSXzE4LCAweDAwLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9JMkNfUkVHX0FERFIsIDB4MjgsIDB4MDB9LAorCXtTRU5TT1IsIE1UOU0xMTFfQ0NfQVdCX1BBUkFNRVRFUl83LCAweGVmLCAweDA3fSwKKwl7QlJJREdFLCBNNTYwMl9YQl9JMkNfUkVHX0FERFIsIDB4MjgsIDB4MDB9LAorCXtTRU5TT1IsIE1UOU0xMTFfQ0NfQVdCX1BBUkFNRVRFUl83LCAweGVmLCAweDAzfSwKKwl7U0VOU09SLCBNVDlNMTExX1BBR0VfTUFQLCAweDAwLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9JMkNfUkVHX0FERFIsIDB4MzMsIDB4MDB9LAorCXtTRU5TT1IsIDB4MzMsIDB4MDMsIDB4NDl9LAorCXtCUklER0UsIE01NjAyX1hCX0kyQ19SRUdfQUREUiwgMHgzMywgMHgwMH0sCisKKwl7U0VOU09SLCAweDMzLCAweDAzLCAweDQ5fSwKKwl7U0VOU09SLCAweDM0LCAweGMwLCAweDE5fSwKKwl7U0VOU09SLCAweDNmLCAweDIwLCAweDIwfSwKKwl7U0VOU09SLCAweDQwLCAweDIwLCAweDIwfSwKKwl7U0VOU09SLCAweDVhLCAweGMwLCAweDBhfSwKKwl7U0VOU09SLCAweDcwLCAweDdiLCAweDBhfSwKKwl7U0VOU09SLCAweDcxLCAweGZmLCAweDAwfSwKKwl7U0VOU09SLCAweDcyLCAweDE5LCAweDBlfSwKKwl7U0VOU09SLCAweDczLCAweDE4LCAweDBmfSwKKwl7U0VOU09SLCAweDc0LCAweDU3LCAweDMyfSwKKwl7U0VOU09SLCAweDc1LCAweDU2LCAweDM0fSwKKwl7U0VOU09SLCAweDc2LCAweDczLCAweDM1fSwKKwl7U0VOU09SLCAweDc3LCAweDMwLCAweDEyfSwKKwl7U0VOU09SLCAweDc4LCAweDc5LCAweDAyfSwKKwl7U0VOU09SLCAweDc5LCAweDc1LCAweDA2fSwKKwl7U0VOU09SLCAweDdhLCAweDc3LCAweDBhfSwKKwl7U0VOU09SLCAweDdiLCAweDc4LCAweDA5fSwKKwl7U0VOU09SLCAweDdjLCAweDdkLCAweDA2fSwKKwl7U0VOU09SLCAweDdkLCAweDMxLCAweDEwfSwKKwl7U0VOU09SLCAweDdlLCAweDAwLCAweDdlfSwKKwl7U0VOU09SLCAweDgwLCAweDU5LCAweDA0fSwKKwl7U0VOU09SLCAweDgxLCAweDU5LCAweDA0fSwKKwl7U0VOU09SLCAweDgyLCAweDU3LCAweDBhfSwKKwl7U0VOU09SLCAweDgzLCAweDU4LCAweDBifSwKKwl7U0VOU09SLCAweDg0LCAweDQ3LCAweDBjfSwKKwl7U0VOU09SLCAweDg1LCAweDQ4LCAweDBlfSwKKwl7U0VOU09SLCAweDg2LCAweDViLCAweDAyfSwKKwl7U0VOU09SLCAweDg3LCAweDAwLCAweDVjfSwKKwl7U0VOU09SLCBNVDlNMTExX0NPTlRFWFRfQ09OVFJPTCwgMHgwMCwgMHgwOH0sCisJe1NFTlNPUiwgMHg2MCwgMHgwMCwgMHg4MH0sCisJe1NFTlNPUiwgMHg2MSwgMHgwMCwgMHgwMH0sCisJe1NFTlNPUiwgMHg2MiwgMHgwMCwgMHgwMH0sCisJe1NFTlNPUiwgMHg2MywgMHgwMCwgMHgwMH0sCisJe1NFTlNPUiwgMHg2NCwgMHgwMCwgMHgwMH0sCisKKwl7U0VOU09SLCBNVDlNMTExX1NDX1JPV1NUQVJULCAweDAwLCAweDBkfSwKKwl7U0VOU09SLCBNVDlNMTExX1NDX0NPTFNUQVJULCAweDAwLCAweDE4fSwKKwl7U0VOU09SLCBNVDlNMTExX1NDX1dJTkRPV19IRUlHSFQsIDB4MDQsIDB4MDR9LAorCXtTRU5TT1IsIE1UOU0xMTFfU0NfV0lORE9XX1dJRFRILCAweDA1LCAweDA4fSwKKwl7U0VOU09SLCBNVDlNMTExX1NDX0hCTEFOS19DT05URVhUX0IsIDB4MDEsIDB4Mzh9LAorCXtTRU5TT1IsIE1UOU0xMTFfU0NfVkJMQU5LX0NPTlRFWFRfQiwgMHgwMCwgMHgxMX0sCisJe1NFTlNPUiwgTVQ5TTExMV9TQ19IQkxBTktfQ09OVEVYVF9BLCAweDAxLCAweDM4fSwKKwl7U0VOU09SLCBNVDlNMTExX1NDX1ZCTEFOS19DT05URVhUX0EsIDB4MDAsIDB4MTF9LAorCXtTRU5TT1IsIE1UOU0xMTFfU0NfUl9NT0RFX0NPTlRFWFRfQiwgMHgwMSwgMHgwM30sCisJe1NFTlNPUiwgTVQ5TTExMV9TQ19SX01PREVfQ09OVEVYVF9BLCAweDAxLCAweDAzfSwKKwl7U0VOU09SLCAweDMwLCAweDA0LCAweDAwfSwKKworCXtCUklER0UsIE01NjAyX1hCX1NFTl9DTEtfRElWLCAweDA2LCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9TRU5fQ0xLX0NUUkwsIDB4YjAsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX0FEQ19DVFJMLCAweGMwLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9TRU5TT1JfVFlQRSwgMHgwOSwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfTElORV9PRl9GUkFNRV9ILCAweDgxLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9QSVhfT0ZfTElORV9ILCAweDgyLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9TSUdfSU5JLCAweDAxLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9WU1lOQ19QQVJBLCAweDAwLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9WU1lOQ19QQVJBLCAweDAwLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9WU1lOQ19QQVJBLCAweDAwLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9WU1lOQ19QQVJBLCAweDAwLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9WU1lOQ19QQVJBLCAweDA0LCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9WU1lOQ19QQVJBLCAweDA0LCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9WU1lOQ19QQVJBLCAweDAwLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9WU1lOQ19QQVJBLCAweDAwLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9IU1lOQ19QQVJBLCAweDAwLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9IU1lOQ19QQVJBLCAweDAwLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9IU1lOQ19QQVJBLCAweDA1LCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9IU1lOQ19QQVJBLCAweDA3LCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9TSUdfSU5JLCAweDAwLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9TRU5fQ0xLX0RJViwgMHgwMCwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfU0VOX0NMS19DVFJMLCAweGEwLCAweDAwfSwKKwl7U0VOU09SLCBNVDlNMTExX1BBR0VfTUFQLCAweDAwLCAweDAwfSwKKwl7U0VOU09SLCBNVDlNMTExX1NDX1NIVVRURVJfV0lEVEgsIDB4MDEsIDB4ZjR9LAorCXtTRU5TT1IsIE1UOU0xMTFfU0NfR0xPQkFMX0dBSU4sIDB4MDAsIDB4ZWF9LAorCXtCUklER0UsIE01NjAyX1hCX1NFTl9DTEtfRElWLCAweDAwLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9TRU5fQ0xLX0NUUkwsIDB4YjAsIDB4MDB9LAorCXtTRU5TT1IsIE1UOU0xMTFfUEFHRV9NQVAsIDB4MDAsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX0kyQ19ERVZfQUREUiwgMHhiYSwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfSTJDX1JFR19BRERSLCAweDBkLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9JMkNfQ1RSTCwgMHgxYSwgMHgwMH0sCisJe1NFTlNPUiwgTVQ5TTExMV9TQ19SRVNFVCwgMHgwMCwgMHgwOX0sCisJe0JSSURHRSwgTTU2MDJfWEJfSTJDX0RFVl9BRERSLCAweGJhLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9JMkNfUkVHX0FERFIsIDB4MGQsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX0kyQ19DVFJMLCAweDFhLCAweDAwfSwKKwl7U0VOU09SLCBNVDlNMTExX1NDX1JFU0VULCAweDAwLCAweDI5fSwKKwl7QlJJREdFLCBNNTYwMl9YQl9JMkNfREVWX0FERFIsIDB4YmEsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX0kyQ19SRUdfQUREUiwgMHgwZCwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfSTJDX0NUUkwsIDB4MWEsIDB4MDB9LAorCXtTRU5TT1IsIE1UOU0xMTFfU0NfUkVTRVQsIDB4MDAsIDB4MDh9LAorCXtCUklER0UsIE01NjAyX1hCX0kyQ19ERVZfQUREUiwgMHhiYSwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfSTJDX1JFR19BRERSLCAweDBkLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9JMkNfQ1RSTCwgMHgxYSwgMHgwMH0sCisJe1NFTlNPUiwgTVQ5TTExMV9TQ19SRVNFVCwgMHgwMCwgMHgwY30sCisJe0JSSURHRSwgTTU2MDJfWEJfSTJDX0RFVl9BRERSLCAweGJhLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9JMkNfUkVHX0FERFIsIDB4MGQsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX0kyQ19DVFJMLCAweDFhLCAweDAwfSwKKwl7U0VOU09SLCBNVDlNMTExX1NDX1JFU0VULCAweDAwLCAweDA0fSwKKwl7U0VOU09SLCBNVDlNMTExX1BBR0VfTUFQLCAweDAwLCAweDAxfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9JMkNfREVWX0FERFIsIDB4YmEsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX0kyQ19SRUdfQUREUiwgMHhiMywgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfSTJDX0NUUkwsIDB4MWEsIDB4MDB9LAorCXtTRU5TT1IsIE1UOU0xMTFfQ1BfR0xPQkFMX0NMS19DT05UUk9MLCAweDAwLCAweDAzfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9HUElPX0RJUiwgMHgwNSwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfR1BJT19EQVQsIDB4MDQsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX0dQSU9fRU5fSCwgMHgzZSwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfR1BJT19ESVJfSCwgMHgzZSwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfR1BJT19EQVRfSCwgMHgwMiwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfR1BJT19FTl9MLCAweGZmLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9HUElPX0RJUl9MLCAweGZmLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9HUElPX0RBVF9MLCAweDAwLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9TRU5fQ0xLX0RJViwgMHgwNCwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfU0VOX0NMS19DVFJMLCAweGIwLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9TRU5fQ0xLX0RJViwgMHgwMCwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfU0VOX0NMS19DVFJMLCAweGIwLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9BRENfQ1RSTCwgMHhjMCwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfU0VOU09SX1RZUEUsIDB4MDksIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX1NFTl9DTEtfRElWLCAweDAwLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9TRU5fQ0xLX0NUUkwsIDB4YjAsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX0dQSU9fRElSLCAweDA3LCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9HUElPX0RBVCwgMHgwYiwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfR1BJT19FTl9ILCAweDA2LCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9HUElPX0VOX0wsIDB4MDAsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX0kyQ19DTEtfRElWLCAweDBhLCAweDAwfSwKKwl7U0VOU09SLCBNVDlNMTExX1BBR0VfTUFQLCAweDAwLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9JMkNfREVWX0FERFIsIDB4YmEsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX0kyQ19SRUdfQUREUiwgMHgwZCwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfSTJDX0NUUkwsIDB4MWEsIDB4MDB9LAorCXtTRU5TT1IsIE1UOU0xMTFfU0NfUkVTRVQsIDB4MDAsIDB4MDV9LAorCXtTRU5TT1IsIE1UOU0xMTFfUEFHRV9NQVAsIDB4MDAsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX0kyQ19ERVZfQUREUiwgMHhiYSwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfSTJDX1JFR19BRERSLCAweDBkLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9JMkNfQ1RSTCwgMHgxYSwgMHgwMH0sCisJe1NFTlNPUiwgTVQ5TTExMV9TQ19SRVNFVCwgMHgwMCwgMHgyOX0sCisJe1NFTlNPUiwgTVQ5TTExMV9QQUdFX01BUCwgMHgwMCwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfSTJDX0RFVl9BRERSLCAweGJhLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9JMkNfUkVHX0FERFIsIDB4MGQsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX0kyQ19DVFJMLCAweDFhLCAweDAwfSwKKworCXtTRU5TT1IsIE1UOU0xMTFfU0NfUkVTRVQsIDB4MDAsIDB4MDh9LAorCXtTRU5TT1IsIE1UOU0xMTFfUEFHRV9NQVAsIDB4MDAsIDB4MDF9LAorCXtTRU5TT1IsIE1UOU0xMTFfQ1BfT1BFUkFUSU5HX01PREVfQ1RMLCAweDAwLCAweDEwfSwKKwl7U0VOU09SLCBNVDlNMTExX0NQX0xFTlNfQ09SUkVDVElPTl8xLCAweDA0LCAweDJhfSwKKwl7U0VOU09SLCBNVDlNMTExX0NQX0RFRkVDVF9DT1JSX0NPTlRFWFRfQSwgMHgwMCwgMHgwMX0sCisJe1NFTlNPUiwgTVQ5TTExMV9DUF9ERUZFQ1RfQ09SUl9DT05URVhUX0IsIDB4MDAsIDB4MDF9LAorCXtTRU5TT1IsIE1UOU0xMTFfQ1BfTFVNQV9PRkZTRVQsIDB4MDAsIDB4MDB9LAorCXtTRU5TT1IsIE1UOU0xMTFfQ1BfTFVNQV9DTElQLCAweGZmLCAweDAwfSwKKwl7U0VOU09SLCBNVDlNMTExX0NQX09VVFBVVF9GT1JNQVRfQ1RMMl9DT05URVhUX0EsIDB4MTQsIDB4MDB9LAorCXtTRU5TT1IsIE1UOU0xMTFfQ1BfT1VUUFVUX0ZPUk1BVF9DVEwyX0NPTlRFWFRfQiwgMHgxNCwgMHgwMH0sCisKKwl7QlJJREdFLCBNNTYwMl9YQl9JMkNfREVWX0FERFIsIDB4YmEsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX0kyQ19SRUdfQUREUiwgMHhjZCwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfSTJDX0NUUkwsIDB4MWEsIDB4MDB9LAorCXtTRU5TT1IsIDB4Y2QsIDB4MDAsIDB4MGV9LAorCXtCUklER0UsIE01NjAyX1hCX0kyQ19ERVZfQUREUiwgMHhiYSwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfSTJDX1JFR19BRERSLCAweGQwLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9JMkNfQ1RSTCwgMHgxYSwgMHgwMH0sCisJe1NFTlNPUiwgMHhkMCwgMHgwMCwgMHg0MH0sCisJe1NFTlNPUiwgTVQ5TTExMV9QQUdFX01BUCwgMHgwMCwgMHgwMn0sCisJe1NFTlNPUiwgTVQ5TTExMV9DQ19BVVRPX0VYUE9TVVJFX1BBUkFNRVRFUl8xOCwgMHgwMCwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfSTJDX0RFVl9BRERSLCAweGJhLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9JMkNfUkVHX0FERFIsIDB4MjgsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX0kyQ19DVFJMLCAweDFhLCAweDAwfSwKKwl7U0VOU09SLCBNVDlNMTExX0NDX0FXQl9QQVJBTUVURVJfNywgMHhlZiwgMHgwN30sCisJe0JSSURHRSwgTTU2MDJfWEJfSTJDX0RFVl9BRERSLCAweGJhLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9JMkNfUkVHX0FERFIsIDB4MjgsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX0kyQ19DVFJMLCAweDFhLCAweDAwfSwKKwl7U0VOU09SLCBNVDlNMTExX0NDX0FXQl9QQVJBTUVURVJfNywgMHhlZiwgMHgwM30sCisJe1NFTlNPUiwgTVQ5TTExMV9QQUdFX01BUCwgMHgwMCwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfSTJDX0RFVl9BRERSLCAweGJhLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9JMkNfUkVHX0FERFIsIDB4MzMsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX0kyQ19DVFJMLCAweDFhLCAweDAwfSwKKwl7U0VOU09SLCAweDMzLCAweDAzLCAweDQ5fSwKKwl7QlJJREdFLCBNNTYwMl9YQl9JMkNfREVWX0FERFIsIDB4YmEsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX0kyQ19SRUdfQUREUiwgMHgzMywgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfSTJDX0NUUkwsIDB4MWEsIDB4MDB9LAorCisJe1NFTlNPUiwgMHgzMywgMHgwMywgMHg0OX0sCisJe1NFTlNPUiwgMHgzNCwgMHhjMCwgMHgxOX0sCisJe1NFTlNPUiwgMHgzZiwgMHgyMCwgMHgyMH0sCisJe1NFTlNPUiwgMHg0MCwgMHgyMCwgMHgyMH0sCisJe1NFTlNPUiwgMHg1YSwgMHhjMCwgMHgwYX0sCisJe1NFTlNPUiwgMHg3MCwgMHg3YiwgMHgwYX0sCisJe1NFTlNPUiwgMHg3MSwgMHhmZiwgMHgwMH0sCisJe1NFTlNPUiwgMHg3MiwgMHgxOSwgMHgwZX0sCisJe1NFTlNPUiwgMHg3MywgMHgxOCwgMHgwZn0sCisJe1NFTlNPUiwgMHg3NCwgMHg1NywgMHgzMn0sCisJe1NFTlNPUiwgMHg3NSwgMHg1NiwgMHgzNH0sCisJe1NFTlNPUiwgMHg3NiwgMHg3MywgMHgzNX0sCisJe1NFTlNPUiwgMHg3NywgMHgzMCwgMHgxMn0sCisJe1NFTlNPUiwgMHg3OCwgMHg3OSwgMHgwMn0sCisJe1NFTlNPUiwgMHg3OSwgMHg3NSwgMHgwNn0sCisJe1NFTlNPUiwgMHg3YSwgMHg3NywgMHgwYX0sCisJe1NFTlNPUiwgMHg3YiwgMHg3OCwgMHgwOX0sCisJe1NFTlNPUiwgMHg3YywgMHg3ZCwgMHgwNn0sCisJe1NFTlNPUiwgMHg3ZCwgMHgzMSwgMHgxMH0sCisJe1NFTlNPUiwgMHg3ZSwgMHgwMCwgMHg3ZX0sCisJe1NFTlNPUiwgMHg4MCwgMHg1OSwgMHgwNH0sCisJe1NFTlNPUiwgMHg4MSwgMHg1OSwgMHgwNH0sCisJe1NFTlNPUiwgMHg4MiwgMHg1NywgMHgwYX0sCisJe1NFTlNPUiwgMHg4MywgMHg1OCwgMHgwYn0sCisJe1NFTlNPUiwgMHg4NCwgMHg0NywgMHgwY30sCisJe1NFTlNPUiwgMHg4NSwgMHg0OCwgMHgwZX0sCisJe1NFTlNPUiwgMHg4NiwgMHg1YiwgMHgwMn0sCisJe1NFTlNPUiwgMHg4NywgMHgwMCwgMHg1Y30sCisJe1NFTlNPUiwgTVQ5TTExMV9DT05URVhUX0NPTlRST0wsIDB4MDAsIDB4MDh9LAorCXtTRU5TT1IsIDB4NjAsIDB4MDAsIDB4ODB9LAorCXtTRU5TT1IsIDB4NjEsIDB4MDAsIDB4MDB9LAorCXtTRU5TT1IsIDB4NjIsIDB4MDAsIDB4MDB9LAorCXtTRU5TT1IsIDB4NjMsIDB4MDAsIDB4MDB9LAorCXtTRU5TT1IsIDB4NjQsIDB4MDAsIDB4MDB9LAorCXtTRU5TT1IsIE1UOU0xMTFfU0NfUk9XU1RBUlQsIDB4MDAsIDB4MGR9LAorCXtTRU5TT1IsIE1UOU0xMTFfU0NfQ09MU1RBUlQsIDB4MDAsIDB4MTJ9LAorCXtTRU5TT1IsIE1UOU0xMTFfU0NfV0lORE9XX0hFSUdIVCwgMHgwNCwgMHgwMH0sCisJe1NFTlNPUiwgTVQ5TTExMV9TQ19XSU5ET1dfV0lEVEgsIDB4MDUsIDB4MTB9LAorCXtTRU5TT1IsIE1UOU0xMTFfU0NfSEJMQU5LX0NPTlRFWFRfQiwgMHgwMSwgMHg2MH0sCisJe1NFTlNPUiwgTVQ5TTExMV9TQ19WQkxBTktfQ09OVEVYVF9CLCAweDAwLCAweDExfSwKKwl7U0VOU09SLCBNVDlNMTExX1NDX0hCTEFOS19DT05URVhUX0EsIDB4MDEsIDB4NjB9LAorCXtTRU5TT1IsIE1UOU0xMTFfU0NfVkJMQU5LX0NPTlRFWFRfQSwgMHgwMCwgMHgxMX0sCisJe1NFTlNPUiwgTVQ5TTExMV9TQ19SX01PREVfQ09OVEVYVF9CLCAweDAxLCAweDBmfSwKKwl7U0VOU09SLCBNVDlNMTExX1NDX1JfTU9ERV9DT05URVhUX0EsIDB4MDEsIDB4MGZ9LAorCXtTRU5TT1IsIDB4MzAsIDB4MDQsIDB4MDB9LAorCisJe0JSSURHRSwgTTU2MDJfWEJfU0VOX0NMS19ESVYsIDB4MDYsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX1NFTl9DTEtfQ1RSTCwgMHhiMCwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfQURDX0NUUkwsIDB4YzAsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX1NFTlNPUl9UWVBFLCAweDA5LCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9MSU5FX09GX0ZSQU1FX0gsIDB4ODEsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX1BJWF9PRl9MSU5FX0gsIDB4ODIsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX1NJR19JTkksIDB4MDEsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX1ZTWU5DX1BBUkEsIDB4MDAsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX1ZTWU5DX1BBUkEsIDB4MDAsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX1ZTWU5DX1BBUkEsIDB4MDAsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX1ZTWU5DX1BBUkEsIDB4MDAsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX1ZTWU5DX1BBUkEsIDB4MDEsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX1ZTWU5DX1BBUkEsIDB4ZTMsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX1ZTWU5DX1BBUkEsIDB4MDAsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX1ZTWU5DX1BBUkEsIDB4MDAsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX1NJR19JTkksIDB4MDAsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX1NJR19JTkksIDB4MDIsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX0hTWU5DX1BBUkEsIDB4MDAsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX0hTWU5DX1BBUkEsIDB4MDAsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX0hTWU5DX1BBUkEsIDB4MDIsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX0hTWU5DX1BBUkEsIDB4ODcsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX1NJR19JTkksIDB4MDAsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX1NFTl9DTEtfRElWLCAweDAwLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9TRU5fQ0xLX0NUUkwsIDB4YjAsIDB4MDB9LAorCisJe1NFTlNPUiwgTVQ5TTExMV9QQUdFX01BUCwgMHgwMCwgMHgwMH0sCisJe1NFTlNPUiwgTVQ5TTExMV9TQ19TSFVUVEVSX1dJRFRILCAweDAxLCAweDkwfSwKKwl7U0VOU09SLCBNVDlNMTExX1NDX0dMT0JBTF9HQUlOLCAweDAwLCAweGU2fSwKKwl7QlJJREdFLCBNNTYwMl9YQl9TRU5fQ0xLX0RJViwgMHgwMCwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfU0VOX0NMS19DVFJMLCAweGIwLCAweDAwfSwKKwl7U0VOU09SLCBNVDlNMTExX1BBR0VfTUFQLCAweDAwLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9JMkNfREVWX0FERFIsIDB4YmEsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX0kyQ19SRUdfQUREUiwgMHgwZCwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfSTJDX0NUUkwsIDB4MWEsIDB4MDB9LAorCXtTRU5TT1IsIE1UOU0xMTFfU0NfUkVTRVQsIDB4MDAsIDB4MDl9LAorCXtCUklER0UsIE01NjAyX1hCX0kyQ19ERVZfQUREUiwgMHhiYSwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfSTJDX1JFR19BRERSLCAweDBkLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9JMkNfQ1RSTCwgMHgxYSwgMHgwMH0sCisJe1NFTlNPUiwgTVQ5TTExMV9TQ19SRVNFVCwgMHgwMCwgMHgyOX0sCisJe0JSSURHRSwgTTU2MDJfWEJfSTJDX0RFVl9BRERSLCAweGJhLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9JMkNfUkVHX0FERFIsIDB4MGQsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX0kyQ19DVFJMLCAweDFhLCAweDAwfSwKKwl7U0VOU09SLCBNVDlNMTExX1NDX1JFU0VULCAweDAwLCAweDA4fSwKKwl7QlJJREdFLCBNNTYwMl9YQl9JMkNfREVWX0FERFIsIDB4YmEsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX0kyQ19SRUdfQUREUiwgMHgwZCwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfSTJDX0NUUkwsIDB4MWEsIDB4MDB9LAorCXtTRU5TT1IsIE1UOU0xMTFfU0NfUkVTRVQsIDB4MDAsIDB4MGN9LAorCXtCUklER0UsIE01NjAyX1hCX0kyQ19ERVZfQUREUiwgMHhiYSwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfSTJDX1JFR19BRERSLCAweDBkLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9JMkNfQ1RSTCwgMHgxYSwgMHgwMH0sCisJe1NFTlNPUiwgTVQ5TTExMV9TQ19SRVNFVCwgMHgwMCwgMHgwNH0sCisJe1NFTlNPUiwgTVQ5TTExMV9QQUdFX01BUCwgMHgwMCwgMHgwMX0sCisJe0JSSURHRSwgTTU2MDJfWEJfSTJDX0RFVl9BRERSLCAweGJhLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9JMkNfUkVHX0FERFIsIDB4YjMsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX0kyQ19DVFJMLCAweDFhLCAweDAwfSwKKwl7U0VOU09SLCBNVDlNMTExX0NQX0dMT0JBTF9DTEtfQ09OVFJPTCwgMHgwMCwgMHgwM30sCisKKwl7QlJJREdFLCBNNTYwMl9YQl9HUElPX0RJUiwgMHgwNSwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfR1BJT19EQVQsIDB4MDQsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX0dQSU9fRU5fSCwgMHgzZSwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfR1BJT19ESVJfSCwgMHgzZSwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfR1BJT19EQVRfSCwgMHgwMiwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfR1BJT19FTl9MLCAweGZmLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9HUElPX0RJUl9MLCAweGZmLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9HUElPX0RBVF9MLCAweDAwLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9TRU5fQ0xLX0RJViwgMHgwNCwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfU0VOX0NMS19DVFJMLCAweGIwLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9TRU5fQ0xLX0RJViwgMHgwMCwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfU0VOX0NMS19DVFJMLCAweGIwLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9BRENfQ1RSTCwgMHhjMCwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfU0VOU09SX1RZUEUsIDB4MDksIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX1NFTl9DTEtfRElWLCAweDAwLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9TRU5fQ0xLX0NUUkwsIDB4YjAsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX0dQSU9fRElSLCAweDA3LCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9HUElPX0RBVCwgMHgwYiwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfR1BJT19FTl9ILCAweDA2LCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9HUElPX0VOX0wsIDB4MDAsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX0kyQ19DTEtfRElWLCAweDBhLCAweDAwfSwKKwl7U0VOU09SLCBNVDlNMTExX1BBR0VfTUFQLCAweDAwLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9JMkNfREVWX0FERFIsIDB4YmEsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX0kyQ19SRUdfQUREUiwgMHgwZCwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfSTJDX0NUUkwsIDB4MWEsIDB4MDB9LAorCXtTRU5TT1IsIE1UOU0xMTFfU0NfUkVTRVQsIDB4MDAsIDB4MDV9LAorCXtTRU5TT1IsIE1UOU0xMTFfUEFHRV9NQVAsIDB4MDAsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX0kyQ19ERVZfQUREUiwgMHhiYSwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfSTJDX1JFR19BRERSLCAweDBkLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9JMkNfQ1RSTCwgMHgxYSwgMHgwMH0sCisJe1NFTlNPUiwgTVQ5TTExMV9TQ19SRVNFVCwgMHgwMCwgMHgyOX0sCisJe1NFTlNPUiwgTVQ5TTExMV9QQUdFX01BUCwgMHgwMCwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfSTJDX0RFVl9BRERSLCAweGJhLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9JMkNfUkVHX0FERFIsIDB4MGQsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX0kyQ19DVFJMLCAweDFhLCAweDAwfSwKKwl7U0VOU09SLCBNVDlNMTExX1NDX1JFU0VULCAweDAwLCAweDA4fSwKKwl7U0VOU09SLCBNVDlNMTExX1BBR0VfTUFQLCAweDAwLCAweDAxfSwKKwl7U0VOU09SLCBNVDlNMTExX0NQX09QRVJBVElOR19NT0RFX0NUTCwgMHgwMCwgMHgxMH0sCisJe1NFTlNPUiwgTVQ5TTExMV9DUF9MRU5TX0NPUlJFQ1RJT05fMSwgMHgwNCwgMHgyYX0sCisJe1NFTlNPUiwgTVQ5TTExMV9DUF9ERUZFQ1RfQ09SUl9DT05URVhUX0EsIDB4MDAsIDB4MDF9LAorCXtTRU5TT1IsIE1UOU0xMTFfQ1BfREVGRUNUX0NPUlJfQ09OVEVYVF9CLCAweDAwLCAweDAxfSwKKwl7U0VOU09SLCBNVDlNMTExX0NQX0xVTUFfT0ZGU0VULCAweDAwLCAweDAwfSwKKwl7U0VOU09SLCBNVDlNMTExX0NQX0xVTUFfQ0xJUCwgMHhmZiwgMHgwMH0sCisJe1NFTlNPUiwgTVQ5TTExMV9DUF9PVVRQVVRfRk9STUFUX0NUTDJfQ09OVEVYVF9BLCAweDE0LCAweDAwfSwKKwl7U0VOU09SLCBNVDlNMTExX0NQX09VVFBVVF9GT1JNQVRfQ1RMMl9DT05URVhUX0IsIDB4MTQsIDB4MDB9LAorCisJe0JSSURHRSwgTTU2MDJfWEJfSTJDX0RFVl9BRERSLCAweGJhLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9JMkNfUkVHX0FERFIsIDB4Y2QsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX0kyQ19DVFJMLCAweDFhLCAweDAwfSwKKwl7U0VOU09SLCAweGNkLCAweDAwLCAweDBlfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9JMkNfREVWX0FERFIsIDB4YmEsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX0kyQ19SRUdfQUREUiwgMHhkMCwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfSTJDX0NUUkwsIDB4MWEsIDB4MDB9LAorCXtTRU5TT1IsIDB4ZDAsIDB4MDAsIDB4NDB9LAorCXtTRU5TT1IsIE1UOU0xMTFfUEFHRV9NQVAsIDB4MDAsIDB4MDJ9LAorCXtTRU5TT1IsIE1UOU0xMTFfQ0NfQVVUT19FWFBPU1VSRV9QQVJBTUVURVJfMTgsIDB4MDAsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX0kyQ19ERVZfQUREUiwgMHhiYSwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfSTJDX1JFR19BRERSLCAweDI4LCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9JMkNfQ1RSTCwgMHgxYSwgMHgwMH0sCisJe1NFTlNPUiwgTVQ5TTExMV9DQ19BV0JfUEFSQU1FVEVSXzcsIDB4ZWYsIDB4MDd9LAorCXtCUklER0UsIE01NjAyX1hCX0kyQ19ERVZfQUREUiwgMHhiYSwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfSTJDX1JFR19BRERSLCAweDI4LCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9JMkNfQ1RSTCwgMHgxYSwgMHgwMH0sCisJe1NFTlNPUiwgTVQ5TTExMV9DQ19BV0JfUEFSQU1FVEVSXzcsIDB4ZWYsIDB4MDN9LAorCXtTRU5TT1IsIE1UOU0xMTFfUEFHRV9NQVAsIDB4MDAsIDB4MDB9LAorCisJe0JSSURHRSwgTTU2MDJfWEJfSTJDX0RFVl9BRERSLCAweGJhLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9JMkNfUkVHX0FERFIsIDB4MzMsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX0kyQ19DVFJMLCAweDFhLCAweDAwfSwKKwl7U0VOU09SLCAweDMzLCAweDAzLCAweDQ5fSwKKwl7QlJJREdFLCBNNTYwMl9YQl9JMkNfREVWX0FERFIsIDB4YmEsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX0kyQ19SRUdfQUREUiwgMHgzMywgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfSTJDX0NUUkwsIDB4MWEsIDB4MDB9LAorCisJe1NFTlNPUiwgMHgzMywgMHgwMywgMHg0OX0sCisJe1NFTlNPUiwgMHgzNCwgMHhjMCwgMHgxOX0sCisJe1NFTlNPUiwgMHgzZiwgMHgyMCwgMHgyMH0sCisJe1NFTlNPUiwgMHg0MCwgMHgyMCwgMHgyMH0sCisJe1NFTlNPUiwgMHg1YSwgMHhjMCwgMHgwYX0sCisJe1NFTlNPUiwgMHg3MCwgMHg3YiwgMHgwYX0sCisJe1NFTlNPUiwgMHg3MSwgMHhmZiwgMHgwMH0sCisJe1NFTlNPUiwgMHg3MiwgMHgxOSwgMHgwZX0sCisJe1NFTlNPUiwgMHg3MywgMHgxOCwgMHgwZn0sCisJe1NFTlNPUiwgMHg3NCwgMHg1NywgMHgzMn0sCisJe1NFTlNPUiwgMHg3NSwgMHg1NiwgMHgzNH0sCisJe1NFTlNPUiwgMHg3NiwgMHg3MywgMHgzNX0sCisJe1NFTlNPUiwgMHg3NywgMHgzMCwgMHgxMn0sCisJe1NFTlNPUiwgMHg3OCwgMHg3OSwgMHgwMn0sCisJe1NFTlNPUiwgMHg3OSwgMHg3NSwgMHgwNn0sCisJe1NFTlNPUiwgMHg3YSwgMHg3NywgMHgwYX0sCisJe1NFTlNPUiwgMHg3YiwgMHg3OCwgMHgwOX0sCisJe1NFTlNPUiwgMHg3YywgMHg3ZCwgMHgwNn0sCisJe1NFTlNPUiwgMHg3ZCwgMHgzMSwgMHgxMH0sCisJe1NFTlNPUiwgMHg3ZSwgMHgwMCwgMHg3ZX0sCisJe1NFTlNPUiwgMHg4MCwgMHg1OSwgMHgwNH0sCisJe1NFTlNPUiwgMHg4MSwgMHg1OSwgMHgwNH0sCisJe1NFTlNPUiwgMHg4MiwgMHg1NywgMHgwYX0sCisJe1NFTlNPUiwgMHg4MywgMHg1OCwgMHgwYn0sCisJe1NFTlNPUiwgMHg4NCwgMHg0NywgMHgwY30sCisJe1NFTlNPUiwgMHg4NSwgMHg0OCwgMHgwZX0sCisJe1NFTlNPUiwgMHg4NiwgMHg1YiwgMHgwMn0sCisJe1NFTlNPUiwgMHg4NywgMHgwMCwgMHg1Y30sCisJe1NFTlNPUiwgTVQ5TTExMV9DT05URVhUX0NPTlRST0wsIDB4MDAsIDB4MDh9LAorCXtTRU5TT1IsIDB4NjAsIDB4MDAsIDB4ODB9LAorCXtTRU5TT1IsIDB4NjEsIDB4MDAsIDB4MDB9LAorCXtTRU5TT1IsIDB4NjIsIDB4MDAsIDB4MDB9LAorCXtTRU5TT1IsIDB4NjMsIDB4MDAsIDB4MDB9LAorCXtTRU5TT1IsIDB4NjQsIDB4MDAsIDB4MDB9LAorCisJe1NFTlNPUiwgTVQ5TTExMV9TQ19ST1dTVEFSVCwgMHgwMCwgMHgwZH0sCisJe1NFTlNPUiwgTVQ5TTExMV9TQ19DT0xTVEFSVCwgMHgwMCwgMHgxMn0sCisJe1NFTlNPUiwgTVQ5TTExMV9TQ19XSU5ET1dfSEVJR0hULCAweDA0LCAweDAwfSwKKwl7U0VOU09SLCBNVDlNMTExX1NDX1dJTkRPV19XSURUSCwgMHgwNSwgMHgxMH0sCisJe1NFTlNPUiwgTVQ5TTExMV9TQ19IQkxBTktfQ09OVEVYVF9CLCAweDAxLCAweDYwfSwKKwl7U0VOU09SLCBNVDlNMTExX1NDX1ZCTEFOS19DT05URVhUX0IsIDB4MDAsIDB4MTF9LAorCXtTRU5TT1IsIE1UOU0xMTFfU0NfSEJMQU5LX0NPTlRFWFRfQSwgMHgwMSwgMHg2MH0sCisJe1NFTlNPUiwgTVQ5TTExMV9TQ19WQkxBTktfQ09OVEVYVF9BLCAweDAwLCAweDExfSwKKwl7U0VOU09SLCBNVDlNMTExX1NDX1JfTU9ERV9DT05URVhUX0IsIDB4MDEsIDB4MGZ9LAorCXtTRU5TT1IsIE1UOU0xMTFfU0NfUl9NT0RFX0NPTlRFWFRfQSwgMHgwMSwgMHgwZn0sCisJe1NFTlNPUiwgMHgzMCwgMHgwNCwgMHgwMH0sCisKKwl7QlJJREdFLCBNNTYwMl9YQl9TRU5fQ0xLX0RJViwgMHgwNiwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfU0VOX0NMS19DVFJMLCAweGIwLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9BRENfQ1RSTCwgMHhjMCwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfU0VOU09SX1RZUEUsIDB4MDksIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX0xJTkVfT0ZfRlJBTUVfSCwgMHg4MSwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfUElYX09GX0xJTkVfSCwgMHg4MiwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfU0lHX0lOSSwgMHgwMSwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfVlNZTkNfUEFSQSwgMHgwMCwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfVlNZTkNfUEFSQSwgMHgwMCwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfVlNZTkNfUEFSQSwgMHgwMCwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfVlNZTkNfUEFSQSwgMHgwMCwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfVlNZTkNfUEFSQSwgMHgwMSwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfVlNZTkNfUEFSQSwgMHhlMCwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfVlNZTkNfUEFSQSwgMHgwMCwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfVlNZTkNfUEFSQSwgMHgwMCwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfU0lHX0lOSSwgMHgwMCwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfU0lHX0lOSSwgMHgwMiwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfSFNZTkNfUEFSQSwgMHgwMCwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfSFNZTkNfUEFSQSwgMHgwMCwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfSFNZTkNfUEFSQSwgMHgwMiwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfSFNZTkNfUEFSQSwgMHg3ZiwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfU0lHX0lOSSwgMHgwMCwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfU0VOX0NMS19ESVYsIDB4MDAsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX1NFTl9DTEtfQ1RSTCwgMHhiMCwgMHgwMH0sCisKKwl7U0VOU09SLCBNVDlNMTExX1BBR0VfTUFQLCAweDAwLCAweDAwfSwKKwkvKiBTZXQgbnVtYmVyIG9mIGJsYW5rIHJvd3MgY2hvc2VuIHRvIDQwMCAqLworCXtTRU5TT1IsIE1UOU0xMTFfU0NfU0hVVFRFUl9XSURUSCwgMHgwMSwgMHg5MH0sCisJLyogU2V0IHRoZSBnbG9iYWwgZ2FpbiB0byAyODMgKG9mIDUxMikgKi8KKwl7U0VOU09SLCBNVDlNMTExX1NDX0dMT0JBTF9HQUlOLCAweDAzLCAweDYzfQorfTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL201NjAyL201NjAyX292OTY1MC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9tNTYwMi9tNTYwMl9vdjk2NTAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MzdjN2U0NwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvbTU2MDIvbTU2MDJfb3Y5NjUwLmMKQEAgLTAsMCArMSw1NDYgQEAKKy8qCisgKiBEcml2ZXIgZm9yIHRoZSBvdjk2NTAgc2Vuc29yCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA4IEVyaWsgQW5kcsOpbgorICogQ29weXJpZ2h0IChDKSAyMDA3IElseWVzIEdvdXRhLiBCYXNlZCBvbiB0aGUgbTU2MDN4IExpbnV4IERyaXZlciBQcm9qZWN0LgorICogQ29weXJpZ2h0IChDKSAyMDA1IG01NjAzeCBMaW51eCBEcml2ZXIgUHJvamVjdCA8bTU2MDJAeDNuZy5jb20uYnI+CisgKgorICogUG9ydGlvbnMgb2YgY29kZSB0byBVU0IgaW50ZXJmYWNlIGFuZCBBTGkgZHJpdmVyIHNvZnR3YXJlLAorICogQ29weXJpZ2h0IChjKSAyMDA2IFdpbGxlbSBEdWlua2VyCisgKiB2NGwyIGludGVyZmFjZSBtb2RlbGVkIGFmdGVyIHRoZSBWNEwyIGRyaXZlcgorICogZm9yIFNOOUMxMHggUEMgQ2FtZXJhIENvbnRyb2xsZXJzCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB2ZXJzaW9uIDIuCisgKgorICovCisKKyNpbmNsdWRlICJtNTYwMl9vdjk2NTAuaCIKKworaW50IG92OTY1MF9yZWFkX3NlbnNvcihzdHJ1Y3Qgc2QgKnNkLCBjb25zdCB1OCBhZGRyZXNzLAorCQkgICAgICB1OCAqaTJjX2RhdGEsIGNvbnN0IHU4IGxlbikKK3sKKwlpbnQgZXJyLCBpOworCisJLyogVGhlIG92OTY1MCByZWdpc3RlcnMgaGF2ZSBhIG1heCBkZXB0aCBvZiBvbmUgYnl0ZSAqLworCWlmIChsZW4gPiAxIHx8ICFsZW4pCisJCXJldHVybiAtRUlOVkFMOworCisJZG8geworCQllcnIgPSBtNTYwMl9yZWFkX2JyaWRnZShzZCwgTTU2MDJfWEJfSTJDX1NUQVRVUywgaTJjX2RhdGEpOworCX0gd2hpbGUgKCgqaTJjX2RhdGEgJiBJMkNfQlVTWSkgJiYgIWVycik7CisKKwltNTYwMl93cml0ZV9icmlkZ2Uoc2QsIE01NjAyX1hCX0kyQ19ERVZfQUREUiwKKwkJCSAgIG92OTY1MC5pMmNfc2xhdmVfaWQpOworCW01NjAyX3dyaXRlX2JyaWRnZShzZCwgTTU2MDJfWEJfSTJDX1JFR19BRERSLCBhZGRyZXNzKTsKKwltNTYwMl93cml0ZV9icmlkZ2Uoc2QsIE01NjAyX1hCX0kyQ19DVFJMLCAweDEwICsgbGVuKTsKKwltNTYwMl93cml0ZV9icmlkZ2Uoc2QsIE01NjAyX1hCX0kyQ19DVFJMLCAweDA4KTsKKworCWZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgeworCQllcnIgPSBtNTYwMl9yZWFkX2JyaWRnZShzZCwgTTU2MDJfWEJfSTJDX0RBVEEsICYoaTJjX2RhdGFbaV0pKTsKKworCQlQREVCVUcoRF9DT05GLCAiUmVhZGluZyBzZW5zb3IgcmVnaXN0ZXIgIgorCQkJCSIweCV4IGNvbnRhaW5pbmcgMHgleCAiLCBhZGRyZXNzLCAqaTJjX2RhdGEpOworCX0KKwlyZXR1cm4gKGVyciA8IDApID8gZXJyIDogMDsKK30KKworaW50IG92OTY1MF93cml0ZV9zZW5zb3Ioc3RydWN0IHNkICpzZCwgY29uc3QgdTggYWRkcmVzcywKKwkJCXU4ICppMmNfZGF0YSwgY29uc3QgdTggbGVuKQoreworCWludCBlcnIsIGk7CisJdTggKnA7CisJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYgPSBzZC0+Z3NwY2FfZGV2LmRldjsKKwlfX3U4ICpidWYgPSBzZC0+Z3NwY2FfZGV2LnVzYl9idWY7CisKKwkvKiBUaGUgb3Y5NjUwIG9ubHkgc3VwcG9ydHMgb25lIGJ5dGUgd3JpdGVzICovCisJaWYgKGxlbiA+IDEgfHwgIWxlbikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwltZW1jcHkoYnVmLCBzZW5zb3JfdXJiX3NrZWxldG9uLAorCSAgICAgICBzaXplb2Yoc2Vuc29yX3VyYl9za2VsZXRvbikpOworCisJYnVmWzExXSA9IHNkLT5zZW5zb3ItPmkyY19zbGF2ZV9pZDsKKwlidWZbMTVdID0gYWRkcmVzczsKKworCS8qIFNwZWNpYWwgY2FzZSBsYXJnZXIgc2Vuc29yIHdyaXRlcyAqLworCXAgPSBidWYgKyAxNjsKKworCS8qIENvcHkgYSBmb3VyIGJ5dGUgd3JpdGUgc2VxdWVuY2UgZm9yIGVhY2ggYnl0ZSB0byBiZSB3cml0dGVuIHRvICovCisJZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CisJCW1lbWNweShwLCBzZW5zb3JfdXJiX3NrZWxldG9uICsgMTYsIDQpOworCQlwWzNdID0gaTJjX2RhdGFbaV07CisJCXAgKz0gNDsKKwkJUERFQlVHKERfQ09ORiwgIldyaXRpbmcgc2Vuc29yIHJlZ2lzdGVyIDB4JXggd2l0aCAweCV4IiwKKwkJICAgICAgIGFkZHJlc3MsIGkyY19kYXRhW2ldKTsKKwl9CisKKwkvKiBDb3B5IHRoZSB0YWlsZXIgKi8KKwltZW1jcHkocCwgc2Vuc29yX3VyYl9za2VsZXRvbiArIDIwLCA0KTsKKworCS8qIFNldCB0aGUgdG90YWwgbGVuZ3RoICovCisJcFszXSA9IDB4MTAgKyBsZW47CisKKwllcnIgPSB1c2JfY29udHJvbF9tc2codWRldiwgdXNiX3NuZGN0cmxwaXBlKHVkZXYsIDApLAorCQkJICAgICAgMHgwNCwgMHg0MCwgMHgxOSwKKwkJCSAgICAgIDB4MDAwMCwgYnVmLAorCQkJICAgICAgMjAgKyBsZW4gKiA0LCBNNTYwMl9VUkJfTVNHX1RJTUVPVVQpOworCisJcmV0dXJuIChlcnIgPCAwKSA/IGVyciA6IDA7Cit9CisKK2ludCBvdjk2NTBfcHJvYmUoc3RydWN0IHNkICpzZCkKK3sKKwl1OCBwcm9kX2lkID0gMCwgdmVyX2lkID0gMCwgaTsKKworCWlmIChmb3JjZV9zZW5zb3IpIHsKKwkJaWYgKGZvcmNlX3NlbnNvciA9PSBPVjk2NTBfU0VOU09SKSB7CisJCQlpbmZvKCJGb3JjaW5nIGFuICVzIHNlbnNvciIsIG92OTY1MC5uYW1lKTsKKwkJCWdvdG8gc2Vuc29yX2ZvdW5kOworCQl9CisJCS8qIElmIHdlIHdhbnQgdG8gZm9yY2UgYW5vdGhlciBzZW5zb3IsCisJCSAgIGRvbid0IHRyeSB0byBwcm9iZSB0aGlzIG9uZSAqLworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlpbmZvKCJQcm9iaW5nIGZvciBhbiBvdjk2NTAgc2Vuc29yIik7CisKKwkvKiBSdW4gdGhlIHByZS1pbml0IHRvIGFjdHVhbGx5IHByb2JlIHRoZSB1bml0ICovCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocHJlaW5pdF9vdjk2NTApOyBpKyspIHsKKwkJdTggZGF0YSA9IHByZWluaXRfb3Y5NjUwW2ldWzJdOworCQlpZiAocHJlaW5pdF9vdjk2NTBbaV1bMF0gPT0gU0VOU09SKQorCQkJb3Y5NjUwX3dyaXRlX3NlbnNvcihzZCwKKwkJCQkJICAgIHByZWluaXRfb3Y5NjUwW2ldWzFdLCAmZGF0YSwgMSk7CisJCWVsc2UKKwkJCW01NjAyX3dyaXRlX2JyaWRnZShzZCwgcHJlaW5pdF9vdjk2NTBbaV1bMV0sIGRhdGEpOworCX0KKworCWlmIChvdjk2NTBfcmVhZF9zZW5zb3Ioc2QsIE9WOTY1MF9QSUQsICZwcm9kX2lkLCAxKSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlpZiAob3Y5NjUwX3JlYWRfc2Vuc29yKHNkLCBPVjk2NTBfVkVSLCAmdmVyX2lkLCAxKSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlpZiAoKHByb2RfaWQgPT0gMHg5NikgJiYgKHZlcl9pZCA9PSAweDUyKSkgeworCQlpbmZvKCJEZXRlY3RlZCBhbiBvdjk2NTAgc2Vuc29yIik7CisJCWdvdG8gc2Vuc29yX2ZvdW5kOworCX0KKworCXJldHVybiAtRU5PREVWOworCitzZW5zb3JfZm91bmQ6CisJc2QtPmdzcGNhX2Rldi5jYW0uY2FtX21vZGUgPSBvdjk2NTAubW9kZXM7CisJc2QtPmdzcGNhX2Rldi5jYW0ubm1vZGVzID0gb3Y5NjUwLm5tb2RlczsKKwlzZC0+ZGVzYy0+Y3RybHMgPSBvdjk2NTAuY3RybHM7CisJc2QtPmRlc2MtPm5jdHJscyA9IG92OTY1MC5uY3RybHM7CisJcmV0dXJuIDA7Cit9CisKK2ludCBvdjk2NTBfaW5pdChzdHJ1Y3Qgc2QgKnNkKQoreworCWludCBpLCBlcnIgPSAwOworCXU4IGRhdGE7CisKKwlpZiAoZHVtcF9zZW5zb3IpCisJCW92OTY1MF9kdW1wX3JlZ2lzdGVycyhzZCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShpbml0X292OTY1MCkgJiYgIWVycjsgaSsrKSB7CisJCWRhdGEgPSBpbml0X292OTY1MFtpXVsyXTsKKwkJaWYgKGluaXRfb3Y5NjUwW2ldWzBdID09IFNFTlNPUikKKwkJCWVyciA9IG92OTY1MF93cml0ZV9zZW5zb3Ioc2QsIGluaXRfb3Y5NjUwW2ldWzFdLAorCQkJCQkJICAmZGF0YSwgMSk7CisJCWVsc2UKKwkJCWVyciA9IG01NjAyX3dyaXRlX2JyaWRnZShzZCwgaW5pdF9vdjk2NTBbaV1bMV0sIGRhdGEpOworCX0KKworCWlmICghZXJyICYmIGRtaV9jaGVja19zeXN0ZW0ob3Y5NjUwX2ZsaXBfZG1pX3RhYmxlKSkgeworCQlpbmZvKCJ2ZmxpcCBxdWlyayBhY3RpdmUiKTsKKwkJZGF0YSA9IDB4MzA7CisJCWVyciA9IG92OTY1MF93cml0ZV9zZW5zb3Ioc2QsIE9WOTY1MF9NVkZQLCAmZGF0YSwgMSk7CisJfQorCisJcmV0dXJuIChlcnIgPCAwKSA/IGVyciA6IDA7Cit9CisKK2ludCBvdjk2NTBfcG93ZXJfZG93bihzdHJ1Y3Qgc2QgKnNkKQoreworCWludCBpOworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHBvd2VyX2Rvd25fb3Y5NjUwKTsgaSsrKSB7CisJCXU4IGRhdGEgPSBwb3dlcl9kb3duX292OTY1MFtpXVsyXTsKKwkJaWYgKHBvd2VyX2Rvd25fb3Y5NjUwW2ldWzBdID09IFNFTlNPUikKKwkJCW92OTY1MF93cml0ZV9zZW5zb3Ioc2QsCisJCQkJCSAgICBwb3dlcl9kb3duX292OTY1MFtpXVsxXSwgJmRhdGEsIDEpOworCQllbHNlCisJCQltNTYwMl93cml0ZV9icmlkZ2Uoc2QsIHBvd2VyX2Rvd25fb3Y5NjUwW2ldWzFdLCBkYXRhKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworaW50IG92OTY1MF9nZXRfZXhwb3N1cmUoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKwl1OCBpMmNfZGF0YTsKKwlpbnQgZXJyOworCisJZXJyID0gb3Y5NjUwX3JlYWRfc2Vuc29yKHNkLCBPVjk2NTBfQ09NMSwgJmkyY19kYXRhLCAxKTsKKwlpZiAoZXJyIDwgMCkKKwkJZ290byBvdXQ7CisJKnZhbCA9IGkyY19kYXRhICYgMHgwMzsKKworCWVyciA9IG92OTY1MF9yZWFkX3NlbnNvcihzZCwgT1Y5NjUwX0FFQ0gsICZpMmNfZGF0YSwgMSk7CisJaWYgKGVyciA8IDApCisJCWdvdG8gb3V0OworCSp2YWwgfD0gKGkyY19kYXRhIDw8IDIpOworCisJZXJyID0gb3Y5NjUwX3JlYWRfc2Vuc29yKHNkLCBPVjk2NTBfQUVDSE0sICZpMmNfZGF0YSwgMSk7CisJaWYgKGVyciA8IDApCisJCWdvdG8gb3V0OworCSp2YWwgfD0gKGkyY19kYXRhICYgMHgzZikgPDwgMTA7CisKKwlQREVCVUcoRF9WNEwyLCAiUmVhZCBleHBvc3VyZSAlZCIsICp2YWwpOworb3V0OgorCXJldHVybiAoZXJyIDwgMCkgPyBlcnIgOiAwOworfQorCitpbnQgb3Y5NjUwX3NldF9leHBvc3VyZShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCkKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisJdTggaTJjX2RhdGE7CisJaW50IGVycjsKKworCVBERUJVRyhEX1Y0TDIsICJTZXQgZXhwb3N1cmUgdG8gJWQiLAorCSAgICAgICB2YWwgJiAweGZmZmYpOworCisJLyogVGhlIDYgTVNCcyAqLworCWkyY19kYXRhID0gKHZhbCA+PiAxMCkgJiAweDNmOworCWVyciA9IG92OTY1MF93cml0ZV9zZW5zb3Ioc2QsIE9WOTY1MF9BRUNITSwKKwkJCQkgICZpMmNfZGF0YSwgMSk7CisJaWYgKGVyciA8IDApCisJCWdvdG8gb3V0OworCisJLyogVGhlIDggbWlkZGxlIGJpdHMgKi8KKwlpMmNfZGF0YSA9ICh2YWwgPj4gMikgJiAweGZmOworCWVyciA9IG92OTY1MF93cml0ZV9zZW5zb3Ioc2QsIE9WOTY1MF9BRUNILAorCQkJCSAgJmkyY19kYXRhLCAxKTsKKwlpZiAoZXJyIDwgMCkKKwkJZ290byBvdXQ7CisKKwkvKiBUaGUgMiBMU0JzICovCisJaTJjX2RhdGEgPSB2YWwgJiAweDAzOworCWVyciA9IG92OTY1MF93cml0ZV9zZW5zb3Ioc2QsIE9WOTY1MF9DT00xLCAmaTJjX2RhdGEsIDEpOworCitvdXQ6CisJcmV0dXJuIChlcnIgPCAwKSA/IGVyciA6IDA7Cit9CisKK2ludCBvdjk2NTBfZ2V0X2dhaW4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKQoreworCWludCBlcnI7CisJdTggaTJjX2RhdGE7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJb3Y5NjUwX3JlYWRfc2Vuc29yKHNkLCBPVjk2NTBfVlJFRiwgJmkyY19kYXRhLCAxKTsKKwkqdmFsID0gKGkyY19kYXRhICYgMHgwMykgPDwgODsKKworCWVyciA9IG92OTY1MF9yZWFkX3NlbnNvcihzZCwgT1Y5NjUwX0dBSU4sICZpMmNfZGF0YSwgMSk7CisJKnZhbCB8PSBpMmNfZGF0YTsKKwlQREVCVUcoRF9WNEwyLCAiUmVhZCBnYWluICVkIiwgKnZhbCk7CisJcmV0dXJuIChlcnIgPCAwKSA/IGVyciA6IDA7Cit9CisKK2ludCBvdjk2NTBfc2V0X2dhaW4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpCit7CisJaW50IGVycjsKKwl1OCBpMmNfZGF0YTsKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisKKwkvKiBUaGUgMiBNU0IgKi8KKwkvKiBSZWFkIHRoZSBPVjk2NTBfVlJFRiByZWdpc3RlciBmaXJzdCB0byBhdm9pZAorCSAgIGNvcnJ1cHRpbmcgdGhlIFZSRUYgaGlnaCBhbmQgbG93IGJpdHMgKi8KKwlvdjk2NTBfcmVhZF9zZW5zb3Ioc2QsIE9WOTY1MF9WUkVGLCAmaTJjX2RhdGEsIDEpOworCS8qIE1hc2sgYXdheSBhbGwgdW5pbnRlcmVzdGluZyBiaXRzICovCisJaTJjX2RhdGEgPSAoKHZhbCAmIDB4MDMwMCkgPj4gMikgfAorCQkJKGkyY19kYXRhICYgMHgzRik7CisJZXJyID0gb3Y5NjUwX3dyaXRlX3NlbnNvcihzZCwgT1Y5NjUwX1ZSRUYsICZpMmNfZGF0YSwgMSk7CisKKwkvKiBUaGUgOCBMU0JzICovCisJaTJjX2RhdGEgPSB2YWwgJiAweGZmOworCWVyciA9IG92OTY1MF93cml0ZV9zZW5zb3Ioc2QsIE9WOTY1MF9HQUlOLCAmaTJjX2RhdGEsIDEpOworCXJldHVybiAoZXJyIDwgMCkgPyBlcnIgOiAwOworfQorCitpbnQgb3Y5NjUwX2dldF9yZWRfYmFsYW5jZShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpCit7CisJaW50IGVycjsKKwl1OCBpMmNfZGF0YTsKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisKKwllcnIgPSBvdjk2NTBfcmVhZF9zZW5zb3Ioc2QsIE9WOTY1MF9SRUQsICZpMmNfZGF0YSwgMSk7CisJKnZhbCA9IGkyY19kYXRhOworCisJUERFQlVHKERfVjRMMiwgIlJlYWQgcmVkIGdhaW4gJWQiLCAqdmFsKTsKKworCXJldHVybiAoZXJyIDwgMCkgPyBlcnIgOiAwOworfQorCitpbnQgb3Y5NjUwX3NldF9yZWRfYmFsYW5jZShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCkKK3sKKwlpbnQgZXJyOworCXU4IGkyY19kYXRhOworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCVBERUJVRyhEX1Y0TDIsICJTZXQgcmVkIGdhaW4gdG8gJWQiLAorCQkJICAgICB2YWwgJiAweGZmKTsKKworCWkyY19kYXRhID0gdmFsICYgMHhmZjsKKwllcnIgPSBvdjk2NTBfd3JpdGVfc2Vuc29yKHNkLCBPVjk2NTBfUkVELCAmaTJjX2RhdGEsIDEpOworCisJcmV0dXJuIChlcnIgPCAwKSA/IGVyciA6IDA7Cit9CisKK2ludCBvdjk2NTBfZ2V0X2JsdWVfYmFsYW5jZShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpCit7CisJaW50IGVycjsKKwl1OCBpMmNfZGF0YTsKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisKKwllcnIgPSBvdjk2NTBfcmVhZF9zZW5zb3Ioc2QsIE9WOTY1MF9CTFVFLCAmaTJjX2RhdGEsIDEpOworCSp2YWwgPSBpMmNfZGF0YTsKKworCVBERUJVRyhEX1Y0TDIsICJSZWFkIGJsdWUgZ2FpbiAlZCIsICp2YWwpOworCisJcmV0dXJuIChlcnIgPCAwKSA/IGVyciA6IDA7Cit9CisKK2ludCBvdjk2NTBfc2V0X2JsdWVfYmFsYW5jZShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCkKK3sKKwlpbnQgZXJyOworCXU4IGkyY19kYXRhOworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCVBERUJVRyhEX1Y0TDIsICJTZXQgYmx1ZSBnYWluIHRvICVkIiwKKwkgICAgICAgdmFsICYgMHhmZik7CisKKwlpMmNfZGF0YSA9IHZhbCAmIDB4ZmY7CisJZXJyID0gb3Y5NjUwX3dyaXRlX3NlbnNvcihzZCwgT1Y5NjUwX0JMVUUsICZpMmNfZGF0YSwgMSk7CisKKwlyZXR1cm4gKGVyciA8IDApID8gZXJyIDogMDsKK30KKworaW50IG92OTY1MF9nZXRfaGZsaXAoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKQoreworCWludCBlcnI7CisJdTggaTJjX2RhdGE7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJZXJyID0gb3Y5NjUwX3JlYWRfc2Vuc29yKHNkLCBPVjk2NTBfTVZGUCwgJmkyY19kYXRhLCAxKTsKKwlpZiAoZG1pX2NoZWNrX3N5c3RlbShvdjk2NTBfZmxpcF9kbWlfdGFibGUpKQorCQkqdmFsID0gKChpMmNfZGF0YSAmIE9WOTY1MF9IRkxJUCkgPj4gNSkgPyAwIDogMTsKKwllbHNlCisJCSp2YWwgPSAoaTJjX2RhdGEgJiBPVjk2NTBfSEZMSVApID4+IDU7CisJUERFQlVHKERfVjRMMiwgIlJlYWQgaG9yaXpvbnRhbCBmbGlwICVkIiwgKnZhbCk7CisKKwlyZXR1cm4gKGVyciA8IDApID8gZXJyIDogMDsKK30KKworaW50IG92OTY1MF9zZXRfaGZsaXAoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpCit7CisJaW50IGVycjsKKwl1OCBpMmNfZGF0YTsKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisKKwlQREVCVUcoRF9WNEwyLCAiU2V0IGhvcml6b250YWwgZmxpcCB0byAlZCIsIHZhbCk7CisJZXJyID0gb3Y5NjUwX3JlYWRfc2Vuc29yKHNkLCBPVjk2NTBfTVZGUCwgJmkyY19kYXRhLCAxKTsKKwlpZiAoZXJyIDwgMCkKKwkJZ290byBvdXQ7CisKKwlpZiAoZG1pX2NoZWNrX3N5c3RlbShvdjk2NTBfZmxpcF9kbWlfdGFibGUpKQorCQlpMmNfZGF0YSA9ICgoaTJjX2RhdGEgJiAweGRmKSB8CisJCQkJKCgodmFsID8gMCA6IDEpICYgMHgwMSkgPDwgNSkpOworCWVsc2UKKwkJaTJjX2RhdGEgPSAoKGkyY19kYXRhICYgMHhkZikgfAorCQkJCSgodmFsICYgMHgwMSkgPDwgNSkpOworCisJZXJyID0gb3Y5NjUwX3dyaXRlX3NlbnNvcihzZCwgT1Y5NjUwX01WRlAsICZpMmNfZGF0YSwgMSk7CitvdXQ6CisJcmV0dXJuIChlcnIgPCAwKSA/IGVyciA6IDA7Cit9CisKK2ludCBvdjk2NTBfZ2V0X3ZmbGlwKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCkKK3sKKwlpbnQgZXJyOworCXU4IGkyY19kYXRhOworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCWVyciA9IG92OTY1MF9yZWFkX3NlbnNvcihzZCwgT1Y5NjUwX01WRlAsICZpMmNfZGF0YSwgMSk7CisJaWYgKGRtaV9jaGVja19zeXN0ZW0ob3Y5NjUwX2ZsaXBfZG1pX3RhYmxlKSkKKwkJKnZhbCA9ICgoaTJjX2RhdGEgJiAweDEwKSA+PiA0KSA/IDAgOiAxOworCWVsc2UKKwkJKnZhbCA9IChpMmNfZGF0YSAmIDB4MTApID4+IDQ7CisJUERFQlVHKERfVjRMMiwgIlJlYWQgdmVydGljYWwgZmxpcCAlZCIsICp2YWwpOworCisJcmV0dXJuIChlcnIgPCAwKSA/IGVyciA6IDA7Cit9CisKK2ludCBvdjk2NTBfc2V0X3ZmbGlwKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKQoreworCWludCBlcnI7CisJdTggaTJjX2RhdGE7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJUERFQlVHKERfVjRMMiwgIlNldCB2ZXJ0aWNhbCBmbGlwIHRvICVkIiwgdmFsKTsKKwllcnIgPSBvdjk2NTBfcmVhZF9zZW5zb3Ioc2QsIE9WOTY1MF9NVkZQLCAmaTJjX2RhdGEsIDEpOworCWlmIChlcnIgPCAwKQorCQlnb3RvIG91dDsKKworCWlmIChkbWlfY2hlY2tfc3lzdGVtKG92OTY1MF9mbGlwX2RtaV90YWJsZSkpCisJCWkyY19kYXRhID0gKChpMmNfZGF0YSAmIDB4ZWYpIHwKKwkJCQkoKCh2YWwgPyAwIDogMSkgJiAweDAxKSA8PCA0KSk7CisJZWxzZQorCQlpMmNfZGF0YSA9ICgoaTJjX2RhdGEgJiAweGVmKSB8CisJCQkJKCh2YWwgJiAweDAxKSA8PCA0KSk7CisKKwllcnIgPSBvdjk2NTBfd3JpdGVfc2Vuc29yKHNkLCBPVjk2NTBfTVZGUCwgJmkyY19kYXRhLCAxKTsKK291dDoKKwlyZXR1cm4gKGVyciA8IDApID8gZXJyIDogMDsKK30KKworaW50IG92OTY1MF9nZXRfYnJpZ2h0bmVzcyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpCit7CisJaW50IGVycjsKKwl1OCBpMmNfZGF0YTsKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisKKwllcnIgPSBvdjk2NTBfcmVhZF9zZW5zb3Ioc2QsIE9WOTY1MF9WUkVGLCAmaTJjX2RhdGEsIDEpOworCWlmIChlcnIgPCAwKQorCQlnb3RvIG91dDsKKwkqdmFsID0gKGkyY19kYXRhICYgMHgwMykgPDwgODsKKworCWVyciA9IG92OTY1MF9yZWFkX3NlbnNvcihzZCwgT1Y5NjUwX0dBSU4sICZpMmNfZGF0YSwgMSk7CisJKnZhbCB8PSBpMmNfZGF0YTsKKwlQREVCVUcoRF9WNEwyLCAiUmVhZCBnYWluICVkIiwgKnZhbCk7CitvdXQ6CisJcmV0dXJuIChlcnIgPCAwKSA/IGVyciA6IDA7Cit9CisKK2ludCBvdjk2NTBfc2V0X2JyaWdodG5lc3Moc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpCit7CisJaW50IGVycjsKKwl1OCBpMmNfZGF0YTsKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisKKwlQREVCVUcoRF9WNEwyLCAiU2V0IGdhaW4gdG8gJWQiLCB2YWwgJiAweDNmZik7CisKKwkvKiBSZWFkIHRoZSBPVjk2NTBfVlJFRiByZWdpc3RlciBmaXJzdCB0byBhdm9pZAorCQljb3JydXB0aW5nIHRoZSBWUkVGIGhpZ2ggYW5kIGxvdyBiaXRzICovCisJZXJyID0gb3Y5NjUwX3JlYWRfc2Vuc29yKHNkLCBPVjk2NTBfVlJFRiwgJmkyY19kYXRhLCAxKTsKKwlpZiAoZXJyIDwgMCkKKwkJZ290byBvdXQ7CisKKwkvKiBNYXNrIGF3YXkgYWxsIHVuaW50ZXJlc3RpbmcgYml0cyAqLworCWkyY19kYXRhID0gKCh2YWwgJiAweDAzMDApID4+IDIpIHwgKGkyY19kYXRhICYgMHgzRik7CisJZXJyID0gb3Y5NjUwX3dyaXRlX3NlbnNvcihzZCwgT1Y5NjUwX1ZSRUYsICZpMmNfZGF0YSwgMSk7CisJaWYgKGVyciA8IDApCisJCWdvdG8gb3V0OworCisJLyogVGhlIDggTFNCcyAqLworCWkyY19kYXRhID0gdmFsICYgMHhmZjsKKwllcnIgPSBvdjk2NTBfd3JpdGVfc2Vuc29yKHNkLCBPVjk2NTBfR0FJTiwgJmkyY19kYXRhLCAxKTsKKworb3V0OgorCXJldHVybiAoZXJyIDwgMCkgPyBlcnIgOiAwOworfQorCitpbnQgb3Y5NjUwX2dldF9hdXRvX3doaXRlX2JhbGFuY2Uoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKQoreworCWludCBlcnI7CisJdTggaTJjX2RhdGE7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJZXJyID0gb3Y5NjUwX3JlYWRfc2Vuc29yKHNkLCBPVjk2NTBfQ09NOCwgJmkyY19kYXRhLCAxKTsKKwkqdmFsID0gKGkyY19kYXRhICYgT1Y5NjUwX0FXQl9FTikgPj4gMTsKKwlQREVCVUcoRF9WNEwyLCAiUmVhZCBhdXRvIHdoaXRlIGJhbGFuY2UgJWQiLCAqdmFsKTsKKworCXJldHVybiAoZXJyIDwgMCkgPyBlcnIgOiAwOworfQorCitpbnQgb3Y5NjUwX3NldF9hdXRvX3doaXRlX2JhbGFuY2Uoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpCit7CisJaW50IGVycjsKKwl1OCBpMmNfZGF0YTsKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisKKwlQREVCVUcoRF9WNEwyLCAiU2V0IGF1dG8gd2hpdGUgYmFsYW5jZSB0byAlZCIsIHZhbCk7CisJZXJyID0gb3Y5NjUwX3JlYWRfc2Vuc29yKHNkLCBPVjk2NTBfQ09NOCwgJmkyY19kYXRhLCAxKTsKKwlpZiAoZXJyIDwgMCkKKwkJZ290byBvdXQ7CisKKwlpMmNfZGF0YSA9ICgoaTJjX2RhdGEgJiAweGZkKSB8ICgodmFsICYgMHgwMSkgPDwgMSkpOworCWVyciA9IG92OTY1MF93cml0ZV9zZW5zb3Ioc2QsIE9WOTY1MF9DT004LCAmaTJjX2RhdGEsIDEpOworb3V0OgorCXJldHVybiAoZXJyIDwgMCkgPyBlcnIgOiAwOworfQorCitpbnQgb3Y5NjUwX2dldF9hdXRvX2dhaW4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKQoreworCWludCBlcnI7CisJdTggaTJjX2RhdGE7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJZXJyID0gb3Y5NjUwX3JlYWRfc2Vuc29yKHNkLCBPVjk2NTBfQ09NOCwgJmkyY19kYXRhLCAxKTsKKwkqdmFsID0gKGkyY19kYXRhICYgT1Y5NjUwX0FHQ19FTikgPj4gMjsKKwlQREVCVUcoRF9WNEwyLCAiUmVhZCBhdXRvIGdhaW4gY29udHJvbCAlZCIsICp2YWwpOworCisJcmV0dXJuIChlcnIgPCAwKSA/IGVyciA6IDA7Cit9CisKK2ludCBvdjk2NTBfc2V0X2F1dG9fZ2FpbihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCkKK3sKKwlpbnQgZXJyOworCXU4IGkyY19kYXRhOworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCVBERUJVRyhEX1Y0TDIsICJTZXQgYXV0byBnYWluIGNvbnRyb2wgdG8gJWQiLCB2YWwpOworCWVyciA9IG92OTY1MF9yZWFkX3NlbnNvcihzZCwgT1Y5NjUwX0NPTTgsICZpMmNfZGF0YSwgMSk7CisJaWYgKGVyciA8IDApCisJCWdvdG8gb3V0OworCisJaTJjX2RhdGEgPSAoKGkyY19kYXRhICYgMHhmYikgfCAoKHZhbCAmIDB4MDEpIDw8IDIpKTsKKwllcnIgPSBvdjk2NTBfd3JpdGVfc2Vuc29yKHNkLCBPVjk2NTBfQ09NOCwgJmkyY19kYXRhLCAxKTsKK291dDoKKwlyZXR1cm4gKGVyciA8IDApID8gZXJyIDogMDsKK30KKwordm9pZCBvdjk2NTBfZHVtcF9yZWdpc3RlcnMoc3RydWN0IHNkICpzZCkKK3sKKwlpbnQgYWRkcmVzczsKKwlpbmZvKCJEdW1waW5nIHRoZSBvdjk2NTAgcmVnaXN0ZXIgc3RhdGUiKTsKKwlmb3IgKGFkZHJlc3MgPSAwOyBhZGRyZXNzIDwgMHhhOTsgYWRkcmVzcysrKSB7CisJCXU4IHZhbHVlOworCQlvdjk2NTBfcmVhZF9zZW5zb3Ioc2QsIGFkZHJlc3MsICZ2YWx1ZSwgMSk7CisJCWluZm8oInJlZ2lzdGVyIDB4JXggY29udGFpbnMgMHgleCIsCisJCSAgICAgYWRkcmVzcywgdmFsdWUpOworCX0KKworCWluZm8oIm92OTY1MCByZWdpc3RlciBzdGF0ZSBkdW1wIGNvbXBsZXRlIik7CisKKwlpbmZvKCJQcm9iaW5nIGZvciB3aGljaCByZWdpc3RlcnMgdGhhdCBhcmUgcmVhZC93cml0ZSIpOworCWZvciAoYWRkcmVzcyA9IDA7IGFkZHJlc3MgPCAweGZmOyBhZGRyZXNzKyspIHsKKwkJdTggb2xkX3ZhbHVlLCBjdHJsX3ZhbHVlOworCQl1OCB0ZXN0X3ZhbHVlWzJdID0gezB4ZmYsIDB4ZmZ9OworCisJCW92OTY1MF9yZWFkX3NlbnNvcihzZCwgYWRkcmVzcywgJm9sZF92YWx1ZSwgMSk7CisJCW92OTY1MF93cml0ZV9zZW5zb3Ioc2QsIGFkZHJlc3MsIHRlc3RfdmFsdWUsIDEpOworCQlvdjk2NTBfcmVhZF9zZW5zb3Ioc2QsIGFkZHJlc3MsICZjdHJsX3ZhbHVlLCAxKTsKKworCQlpZiAoY3RybF92YWx1ZSA9PSB0ZXN0X3ZhbHVlWzBdKQorCQkJaW5mbygicmVnaXN0ZXIgMHgleCBpcyB3cml0ZWFibGUiLCBhZGRyZXNzKTsKKwkJZWxzZQorCQkJaW5mbygicmVnaXN0ZXIgMHgleCBpcyByZWFkIG9ubHkiLCBhZGRyZXNzKTsKKworCQkvKiBSZXN0b3JlIG9yaWdpbmFsIHZhbHVlICovCisJCW92OTY1MF93cml0ZV9zZW5zb3Ioc2QsIGFkZHJlc3MsICZvbGRfdmFsdWUsIDEpOworCX0KK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvbTU2MDIvbTU2MDJfb3Y5NjUwLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL201NjAyL201NjAyX292OTY1MC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2NTYzMmYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL201NjAyL201NjAyX292OTY1MC5oCkBAIC0wLDAgKzEsNTAyIEBACisvKgorICogRHJpdmVyIGZvciB0aGUgb3Y5NjUwIHNlbnNvcgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBFcmlrIEFuZHLDqW4KKyAqIENvcHlyaWdodCAoQykgMjAwNyBJbHllcyBHb3V0YS4gQmFzZWQgb24gdGhlIG01NjAzeCBMaW51eCBEcml2ZXIgUHJvamVjdC4KKyAqIENvcHlyaWdodCAoQykgMjAwNSBtNTYwM3ggTGludXggRHJpdmVyIFByb2plY3QgPG01NjAyQHgzbmcuY29tLmJyPgorICoKKyAqIFBvcnRpb25zIG9mIGNvZGUgdG8gVVNCIGludGVyZmFjZSBhbmQgQUxpIGRyaXZlciBzb2Z0d2FyZSwKKyAqIENvcHlyaWdodCAoYykgMjAwNiBXaWxsZW0gRHVpbmtlcgorICogdjRsMiBpbnRlcmZhY2UgbW9kZWxlZCBhZnRlciB0aGUgVjRMMiBkcml2ZXIKKyAqIGZvciBTTjlDMTB4IFBDIENhbWVyYSBDb250cm9sbGVycworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgdmVyc2lvbiAyLgorICoKKyAqLworCisjaWZuZGVmIE01NjAyX09WOTY1MF9IXworI2RlZmluZSBNNTYwMl9PVjk2NTBfSF8KKworI2luY2x1ZGUgPGxpbnV4L2RtaS5oPgorCisjaW5jbHVkZSAibTU2MDJfc2Vuc29yLmgiCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2RlZmluZSBPVjk2NTBfR0FJTgkJCTB4MDAKKyNkZWZpbmUgT1Y5NjUwX0JMVUUJCQkweDAxCisjZGVmaW5lIE9WOTY1MF9SRUQJCQkweDAyCisjZGVmaW5lIE9WOTY1MF9WUkVGCQkJMHgwMworI2RlZmluZSBPVjk2NTBfQ09NMQkJCTB4MDQKKyNkZWZpbmUgT1Y5NjUwX0JBVkUJCQkweDA1CisjZGVmaW5lIE9WOTY1MF9HRUFWRQkJCTB4MDYKKyNkZWZpbmUgT1Y5NjUwX1JTVkQ3CQkJMHgwNworI2RlZmluZSBPVjk2NTBfUElECQkJMHgwYQorI2RlZmluZSBPVjk2NTBfVkVSCQkJMHgwYgorI2RlZmluZSBPVjk2NTBfQ09NMwkJCTB4MGMKKyNkZWZpbmUgT1Y5NjUwX0NPTTUJCQkweDBlCisjZGVmaW5lIE9WOTY1MF9DT002CQkJMHgwZgorI2RlZmluZSBPVjk2NTBfQUVDSAkJCTB4MTAKKyNkZWZpbmUgT1Y5NjUwX0NMS1JDCQkJMHgxMQorI2RlZmluZSBPVjk2NTBfQ09NNwkJCTB4MTIKKyNkZWZpbmUgT1Y5NjUwX0NPTTgJCQkweDEzCisjZGVmaW5lIE9WOTY1MF9DT005CQkJMHgxNAorI2RlZmluZSBPVjk2NTBfQ09NMTAJCQkweDE1CisjZGVmaW5lIE9WOTY1MF9SU1ZEMTYJCQkweDE2CisjZGVmaW5lIE9WOTY1MF9IU1RBUlQJCQkweDE3CisjZGVmaW5lIE9WOTY1MF9IU1RPUAkJCTB4MTgKKyNkZWZpbmUgT1Y5NjUwX1ZTVFJUCQkJMHgxOQorI2RlZmluZSBPVjk2NTBfVlNUT1AJCQkweDFhCisjZGVmaW5lIE9WOTY1MF9QU0hGVAkJCTB4MWIKKyNkZWZpbmUgT1Y5NjUwX01WRlAJCQkweDFlCisjZGVmaW5lIE9WOTY1MF9BRVcJCQkweDI0CisjZGVmaW5lIE9WOTY1MF9BRUIJCQkweDI1CisjZGVmaW5lIE9WOTY1MF9WUFQJCQkweDI2CisjZGVmaW5lIE9WOTY1MF9CQklBUwkJCTB4MjcKKyNkZWZpbmUgT1Y5NjUwX0diQklBUwkJCTB4MjgKKyNkZWZpbmUgT1Y5NjUwX0dyX0NPTQkJCTB4MjkKKyNkZWZpbmUgT1Y5NjUwX1JCSUFTCQkJMHgyYworI2RlZmluZSBPVjk2NTBfSFJFRgkJCTB4MzIKKyNkZWZpbmUgT1Y5NjUwX0NITEYJCQkweDMzCisjZGVmaW5lIE9WOTY1MF9BUkJMTQkJCTB4MzQKKyNkZWZpbmUgT1Y5NjUwX1JTVkQzNQkJCTB4MzUKKyNkZWZpbmUgT1Y5NjUwX1JTVkQzNgkJCTB4MzYKKyNkZWZpbmUgT1Y5NjUwX0FEQwkJCTB4MzcKKyNkZWZpbmUgT1Y5NjUwX0FDT00zOAkJCTB4MzgKKyNkZWZpbmUgT1Y5NjUwX09GT04JCQkweDM5CisjZGVmaW5lIE9WOTY1MF9UU0xCCQkJMHgzYQorI2RlZmluZSBPVjk2NTBfQ09NMTIJCQkweDNjCisjZGVmaW5lIE9WOTY1MF9DT00xMwkJCTB4M2QKKyNkZWZpbmUgT1Y5NjUwX0NPTTE1CQkJMHg0MAorI2RlZmluZSBPVjk2NTBfQ09NMTYJCQkweDQxCisjZGVmaW5lIE9WOTY1MF9MQ0MxCQkJMHg2MgorI2RlZmluZSBPVjk2NTBfTENDMgkJCTB4NjMKKyNkZWZpbmUgT1Y5NjUwX0xDQzMJCQkweDY0CisjZGVmaW5lIE9WOTY1MF9MQ0M0CQkJMHg2NQorI2RlZmluZSBPVjk2NTBfTENDNQkJCTB4NjYKKyNkZWZpbmUgT1Y5NjUwX0hWCQkJMHg2OQorI2RlZmluZSBPVjk2NTBfREJMVgkJCTB4NmIKKyNkZWZpbmUgT1Y5NjUwX0NPTTIxCQkJMHg4YgorI2RlZmluZSBPVjk2NTBfQ09NMjIJCQkweDhjCisjZGVmaW5lIE9WOTY1MF9DT00yNAkJCTB4OGUKKyNkZWZpbmUgT1Y5NjUwX0RCTEMxCQkJMHg4ZgorI2RlZmluZSBPVjk2NTBfUlNWRDk0CQkJMHg5NAorI2RlZmluZSBPVjk2NTBfUlNWRDk1CQkJMHg5NQorI2RlZmluZSBPVjk2NTBfUlNWRDk2CQkJMHg5NgorI2RlZmluZSBPVjk2NTBfTENDRkIJCQkweDlkCisjZGVmaW5lIE9WOTY1MF9MQ0NGUgkJCTB4OWUKKyNkZWZpbmUgT1Y5NjUwX0FFQ0hNCQkJMHhhMQorI2RlZmluZSBPVjk2NTBfQ09NMjYJCQkweGE1CisjZGVmaW5lIE9WOTY1MF9BQ09NQTgJCQkweGE4CisjZGVmaW5lIE9WOTY1MF9BQ09NQTkJCQkweGE5CisKKyNkZWZpbmUgT1Y5NjUwX1JFR0lTVEVSX1JFU0VUCQkoMSA8PCA3KQorI2RlZmluZSBPVjk2NTBfVkdBX1NFTEVDVAkJKDEgPDwgNikKKyNkZWZpbmUgT1Y5NjUwX1JHQl9TRUxFQ1QJCSgxIDw8IDIpCisjZGVmaW5lIE9WOTY1MF9SQVdfUkdCX1NFTEVDVAkJKDEgPDwgMCkKKworI2RlZmluZSBPVjk2NTBfRkFTVF9BR0NfQUVDCQkoMSA8PCA3KQorI2RlZmluZSBPVjk2NTBfQUVDX1VOTElNX1NURVBfU0laRQkoMSA8PCA2KQorI2RlZmluZSBPVjk2NTBfQkFORElORwkJCSgxIDw8IDUpCisjZGVmaW5lIE9WOTY1MF9BR0NfRU4JCQkoMSA8PCAyKQorI2RlZmluZSBPVjk2NTBfQVdCX0VOCQkJKDEgPDwgMSkKKyNkZWZpbmUgT1Y5NjUwX0FFQ19FTgkJCSgxIDw8IDApCisKKyNkZWZpbmUgT1Y5NjUwX1ZBUklPUElYRUwJCSgxIDw8IDIpCisjZGVmaW5lIE9WOTY1MF9TWVNURU1fQ0xLX1NFTAkJKDEgPDwgNykKKyNkZWZpbmUgT1Y5NjUwX1NMQU1fTU9ERSAJCSgxIDw8IDQpCisKKyNkZWZpbmUgT1Y5NjUwX1ZGTElQCQkJKDEgPDwgNCkKKyNkZWZpbmUgT1Y5NjUwX0hGTElQCQkJKDEgPDwgNSkKKworI2RlZmluZSBHQUlOX0RFRkFVTFQJCQkweDE0CisjZGVmaW5lIFJFRF9HQUlOX0RFRkFVTFQJCTB4NzAKKyNkZWZpbmUgQkxVRV9HQUlOX0RFRkFVTFQJCTB4MjAKKyNkZWZpbmUgRVhQT1NVUkVfREVGQVVMVAkJMHg1MDAzCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogS2VybmVsIG1vZHVsZSBwYXJhbWV0ZXJzICovCitleHRlcm4gaW50IGZvcmNlX3NlbnNvcjsKK2V4dGVybiBpbnQgZHVtcF9zZW5zb3I7CisKK2ludCBvdjk2NTBfcHJvYmUoc3RydWN0IHNkICpzZCk7CitpbnQgb3Y5NjUwX2luaXQoc3RydWN0IHNkICpzZCk7CitpbnQgb3Y5NjUwX3Bvd2VyX2Rvd24oc3RydWN0IHNkICpzZCk7CisKK2ludCBvdjk2NTBfcmVhZF9zZW5zb3Ioc3RydWN0IHNkICpzZCwgY29uc3QgdTggYWRkcmVzcywKKwkJICAgICAgIHU4ICppMmNfZGF0YSwgY29uc3QgdTggbGVuKTsKK2ludCBvdjk2NTBfd3JpdGVfc2Vuc29yKHN0cnVjdCBzZCAqc2QsIGNvbnN0IHU4IGFkZHJlc3MsCisJCSAgICAgICB1OCAqaTJjX2RhdGEsIGNvbnN0IHU4IGxlbik7CisKK3ZvaWQgb3Y5NjUwX2R1bXBfcmVnaXN0ZXJzKHN0cnVjdCBzZCAqc2QpOworCitpbnQgb3Y5NjUwX3NldF9leHBvc3VyZShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCk7CitpbnQgb3Y5NjUwX2dldF9leHBvc3VyZShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpOworaW50IG92OTY1MF9nZXRfZ2FpbihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpOworaW50IG92OTY1MF9zZXRfZ2FpbihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCk7CitpbnQgb3Y5NjUwX2dldF9yZWRfYmFsYW5jZShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpOworaW50IG92OTY1MF9zZXRfcmVkX2JhbGFuY2Uoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpOworaW50IG92OTY1MF9nZXRfYmx1ZV9iYWxhbmNlKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCk7CitpbnQgb3Y5NjUwX3NldF9ibHVlX2JhbGFuY2Uoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpOworaW50IG92OTY1MF9nZXRfaGZsaXAoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKTsKK2ludCBvdjk2NTBfc2V0X2hmbGlwKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKTsKK2ludCBvdjk2NTBfZ2V0X3ZmbGlwKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCk7CitpbnQgb3Y5NjUwX3NldF92ZmxpcChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCk7CitpbnQgb3Y5NjUwX2dldF9icmlnaHRuZXNzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCk7CitpbnQgb3Y5NjUwX3NldF9icmlnaHRuZXNzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKTsKK2ludCBvdjk2NTBfZ2V0X2F1dG9fd2hpdGVfYmFsYW5jZShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpOworaW50IG92OTY1MF9zZXRfYXV0b193aGl0ZV9iYWxhbmNlKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKTsKK2ludCBvdjk2NTBfZ2V0X2F1dG9fZ2FpbihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpOworaW50IG92OTY1MF9zZXRfYXV0b19nYWluKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKTsKKworc3RhdGljIHN0cnVjdCBtNTYwMl9zZW5zb3Igb3Y5NjUwID0geworCS5uYW1lID0gIk9WOTY1MCIsCisJLmkyY19zbGF2ZV9pZCA9IDB4NjAsCisJLnByb2JlID0gb3Y5NjUwX3Byb2JlLAorCS5pbml0ID0gb3Y5NjUwX2luaXQsCisJLnBvd2VyX2Rvd24gPSBvdjk2NTBfcG93ZXJfZG93biwKKwkucmVhZF9zZW5zb3IgPSBvdjk2NTBfcmVhZF9zZW5zb3IsCisJLndyaXRlX3NlbnNvciA9IG92OTY1MF93cml0ZV9zZW5zb3IsCisKKwkubmN0cmxzID0gOCwKKwkuY3RybHMgPSB7CisJeworCQl7CisJCQkuaWQJCT0gVjRMMl9DSURfRVhQT1NVUkUsCisJCQkudHlwZQkJPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAorCQkJLm5hbWUJCT0gImV4cG9zdXJlIiwKKwkJCS5taW5pbXVtCT0gMHgwMCwKKwkJCS5tYXhpbXVtCT0gMHhmZmZmLAorCQkJLnN0ZXAJCT0gMHgxLAorCQkJLmRlZmF1bHRfdmFsdWUgCT0gRVhQT1NVUkVfREVGQVVMVCwKKwkJCS5mbGFncyAgICAgICAgIAk9IFY0TDJfQ1RSTF9GTEFHX1NMSURFUgorCQl9LAorCQkuc2V0ID0gb3Y5NjUwX3NldF9leHBvc3VyZSwKKwkJLmdldCA9IG92OTY1MF9nZXRfZXhwb3N1cmUKKwl9LCB7CisJCXsKKwkJCS5pZAkJPSBWNEwyX0NJRF9HQUlOLAorCQkJLnR5cGUJCT0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKKwkJCS5uYW1lCQk9ICJnYWluIiwKKwkJCS5taW5pbXVtCT0gMHgwMCwKKwkJCS5tYXhpbXVtCT0gMHgzZmYsCisJCQkuc3RlcAkJPSAweDEsCisJCQkuZGVmYXVsdF92YWx1ZQk9IEdBSU5fREVGQVVMVCwKKwkJCS5mbGFncwkJPSBWNEwyX0NUUkxfRkxBR19TTElERVIKKwkJfSwKKwkJLnNldCA9IG92OTY1MF9zZXRfZ2FpbiwKKwkJLmdldCA9IG92OTY1MF9nZXRfZ2FpbgorCX0sIHsKKwkJeworCQkJLnR5cGUgCQk9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCisJCQkubmFtZSAJCT0gInJlZCBiYWxhbmNlIiwKKwkJCS5taW5pbXVtIAk9IDB4MDAsCisJCQkubWF4aW11bSAJPSAweGZmLAorCQkJLnN0ZXAgCQk9IDB4MSwKKwkJCS5kZWZhdWx0X3ZhbHVlIAk9IFJFRF9HQUlOX0RFRkFVTFQsCisJCQkuZmxhZ3MgICAgICAgICAJPSBWNEwyX0NUUkxfRkxBR19TTElERVIKKwkJfSwKKwkJLnNldCA9IG92OTY1MF9zZXRfcmVkX2JhbGFuY2UsCisJCS5nZXQgPSBvdjk2NTBfZ2V0X3JlZF9iYWxhbmNlCisJfSwgeworCQl7CisJCQkudHlwZSAJCT0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKKwkJCS5uYW1lIAkJPSAiYmx1ZSBiYWxhbmNlIiwKKwkJCS5taW5pbXVtIAk9IDB4MDAsCisJCQkubWF4aW11bSAJPSAweGZmLAorCQkJLnN0ZXAgCQk9IDB4MSwKKwkJCS5kZWZhdWx0X3ZhbHVlIAk9IEJMVUVfR0FJTl9ERUZBVUxULAorCQkJLmZsYWdzICAgICAgICAgCT0gVjRMMl9DVFJMX0ZMQUdfU0xJREVSCisJCX0sCisJCS5zZXQgPSBvdjk2NTBfc2V0X2JsdWVfYmFsYW5jZSwKKwkJLmdldCA9IG92OTY1MF9nZXRfYmx1ZV9iYWxhbmNlCisJfSwgeworCQl7CisJCQkuaWQgCQk9IFY0TDJfQ0lEX0hGTElQLAorCQkJLnR5cGUgCQk9IFY0TDJfQ1RSTF9UWVBFX0JPT0xFQU4sCisJCQkubmFtZSAJCT0gImhvcml6b250YWwgZmxpcCIsCisJCQkubWluaW11bSAJPSAwLAorCQkJLm1heGltdW0gCT0gMSwKKwkJCS5zdGVwIAkJPSAxLAorCQkJLmRlZmF1bHRfdmFsdWUgCT0gMAorCQl9LAorCQkuc2V0ID0gb3Y5NjUwX3NldF9oZmxpcCwKKwkJLmdldCA9IG92OTY1MF9nZXRfaGZsaXAKKwl9LCB7CisJCXsKKwkJCS5pZCAJCT0gVjRMMl9DSURfVkZMSVAsCisJCQkudHlwZSAJCT0gVjRMMl9DVFJMX1RZUEVfQk9PTEVBTiwKKwkJCS5uYW1lIAkJPSAidmVydGljYWwgZmxpcCIsCisJCQkubWluaW11bSAJPSAwLAorCQkJLm1heGltdW0gCT0gMSwKKwkJCS5zdGVwIAkJPSAxLAorCQkJLmRlZmF1bHRfdmFsdWUgCT0gMAorCQl9LAorCQkuc2V0ID0gb3Y5NjUwX3NldF92ZmxpcCwKKwkJLmdldCA9IG92OTY1MF9nZXRfdmZsaXAKKwl9LCB7CisJCXsKKwkJCS5pZCAJCT0gVjRMMl9DSURfQVVUT19XSElURV9CQUxBTkNFLAorCQkJLnR5cGUgCQk9IFY0TDJfQ1RSTF9UWVBFX0JPT0xFQU4sCisJCQkubmFtZSAJCT0gImF1dG8gd2hpdGUgYmFsYW5jZSIsCisJCQkubWluaW11bSAJPSAwLAorCQkJLm1heGltdW0gCT0gMSwKKwkJCS5zdGVwIAkJPSAxLAorCQkJLmRlZmF1bHRfdmFsdWUgCT0gMAorCQl9LAorCQkuc2V0ID0gb3Y5NjUwX3NldF9hdXRvX3doaXRlX2JhbGFuY2UsCisJCS5nZXQgPSBvdjk2NTBfZ2V0X2F1dG9fd2hpdGVfYmFsYW5jZQorCX0sIHsKKwkJeworCQkJLmlkIAkJPSBWNEwyX0NJRF9BVVRPR0FJTiwKKwkJCS50eXBlIAkJPSBWNEwyX0NUUkxfVFlQRV9CT09MRUFOLAorCQkJLm5hbWUgCQk9ICJhdXRvIGdhaW4gY29udHJvbCIsCisJCQkubWluaW11bSAJPSAwLAorCQkJLm1heGltdW0gCT0gMSwKKwkJCS5zdGVwIAkJPSAxLAorCQkJLmRlZmF1bHRfdmFsdWUgCT0gMAorCQl9LAorCQkuc2V0ID0gb3Y5NjUwX3NldF9hdXRvX2dhaW4sCisJCS5nZXQgPSBvdjk2NTBfZ2V0X2F1dG9fZ2FpbgorCX0KKwl9LAorCisJLm5tb2RlcyA9IDEsCisJLm1vZGVzID0geworCXsKKwkJTTU2MDJfREVGQVVMVF9GUkFNRV9XSURUSCwKKwkJTTU2MDJfREVGQVVMVF9GUkFNRV9IRUlHSFQsCisJCVY0TDJfUElYX0ZNVF9TQkdHUjgsCisJCVY0TDJfRklFTERfTk9ORSwKKwkJLnNpemVpbWFnZSA9CisJCQlNNTYwMl9ERUZBVUxUX0ZSQU1FX1dJRFRIICogTTU2MDJfREVGQVVMVF9GUkFNRV9IRUlHSFQsCisJCS5ieXRlc3BlcmxpbmUgPSBNNTYwMl9ERUZBVUxUX0ZSQU1FX1dJRFRILAorCQkuY29sb3JzcGFjZSA9IFY0TDJfQ09MT1JTUEFDRV9TUkdCLAorCQkucHJpdiA9IDEKKwl9CisJfQorfTsKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgcHJlaW5pdF9vdjk2NTBbXVszXSA9Cit7CisJLyogW0lOSVRDQU1dICovCisJe0JSSURHRSwgTTU2MDJfWEJfTUNVX0NMS19ESVYsIDB4MDJ9LAorCXtCUklER0UsIE01NjAyX1hCX01DVV9DTEtfQ1RSTCwgMHhiMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfU0VOX0NMS19ESVYsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX1NFTl9DTEtfQ1RSTCwgMHhiMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfQURDX0NUUkwsIDB4YzB9LAorCXtCUklER0UsIE01NjAyX1hCX1NFTlNPUl9DVFJMLCAweDAwfSwKKworCXtCUklER0UsIE01NjAyX1hCX1NFTlNPUl9UWVBFLCAweDA4fSwKKwl7QlJJREdFLCBNNTYwMl9YQl9HUElPX0RJUiwgMHgwNX0sCisJe0JSSURHRSwgTTU2MDJfWEJfR1BJT19EQVQsIDB4MDR9LAorCXtCUklER0UsIE01NjAyX1hCX0dQSU9fRU5fSCwgMHgwNn0sCisJe0JSSURHRSwgTTU2MDJfWEJfR1BJT19ESVJfSCwgMHgwNn0sCisJe0JSSURHRSwgTTU2MDJfWEJfR1BJT19EQVRfSCwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfR1BJT19EQVQsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX0kyQ19DTEtfRElWLCAweDBhfSwKKwkvKiBSZXNldCBjaGlwICovCisJe1NFTlNPUiwgT1Y5NjUwX0NPTTcsIE9WOTY1MF9SRUdJU1RFUl9SRVNFVH0sCisJLyogRW5hYmxlIGRvdWJsZSBjbG9jayAqLworCXtTRU5TT1IsIE9WOTY1MF9DTEtSQywgMHg4MH0sCisJLyogRG8gc29tZXRoaW5nIG91dCBvZiBzcGVjIHdpdGggdGhlIHBvd2VyICovCisJe1NFTlNPUiwgT1Y5NjUwX09GT04sIDB4NDB9Cit9OworCitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBpbml0X292OTY1MFtdWzNdID0KK3sKKwkvKiBbSU5JVENBTV0gKi8KKwl7QlJJREdFLCBNNTYwMl9YQl9NQ1VfQ0xLX0RJViwgMHgwMn0sCisJe0JSSURHRSwgTTU2MDJfWEJfTUNVX0NMS19DVFJMLCAweGIwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9TRU5fQ0xLX0RJViwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfU0VOX0NMS19DVFJMLCAweGIwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9BRENfQ1RSTCwgMHhjMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfU0VOU09SX0NUUkwsIDB4MDB9LAorCisJe0JSSURHRSwgTTU2MDJfWEJfU0VOU09SX1RZUEUsIDB4MDh9LAorCXtCUklER0UsIE01NjAyX1hCX0dQSU9fRElSLCAweDA1fSwKKwl7QlJJREdFLCBNNTYwMl9YQl9HUElPX0RBVCwgMHgwNH0sCisJe0JSSURHRSwgTTU2MDJfWEJfR1BJT19FTl9ILCAweDA2fSwKKwl7QlJJREdFLCBNNTYwMl9YQl9HUElPX0RJUl9ILCAweDA2fSwKKwl7QlJJREdFLCBNNTYwMl9YQl9HUElPX0RBVF9ILCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9HUElPX0RBVCwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfSTJDX0NMS19ESVYsIDB4MGF9LAorCS8qIFJlc2V0IGNoaXAgKi8KKwl7U0VOU09SLCBPVjk2NTBfQ09NNywgT1Y5NjUwX1JFR0lTVEVSX1JFU0VUfSwKKwkvKiBFbmFibGUgZG91YmxlIGNsb2NrICovCisJe1NFTlNPUiwgT1Y5NjUwX0NMS1JDLCAweDgwfSwKKwkvKiBEbyBzb21ldGhpbmcgb3V0IG9mIHNwZWMgd2l0aCB0aGUgcG93ZXIgKi8KKwl7U0VOU09SLCBPVjk2NTBfT0ZPTiwgMHg0MH0sCisKKwkvKiBTZXQgUVFWR0EgKi8KKwl7U0VOU09SLCBPVjk2NTBfQ09NMSwgMHgyMH0sCisJLyogU2V0IGZhc3QgQUdDL0FFQyBhbGdvcml0aG0gd2l0aCB1bmxpbWl0ZWQgc3RlcCBzaXplICovCisJe1NFTlNPUiwgT1Y5NjUwX0NPTTgsIE9WOTY1MF9GQVNUX0FHQ19BRUMgfAorCQkJICAgICAgT1Y5NjUwX0FFQ19VTkxJTV9TVEVQX1NJWkUgfAorCQkJICAgICAgT1Y5NjUwX0FXQl9FTiB8IE9WOTY1MF9BR0NfRU59LAorCisJe1NFTlNPUiwgT1Y5NjUwX0NITEYsIDB4MTB9LAorCXtTRU5TT1IsIE9WOTY1MF9BUkJMTSwgMHhiZn0sCisJe1NFTlNPUiwgT1Y5NjUwX0FDT00zOCwgMHg4MX0sCisJLyogVHVybiBvZmYgY29sb3IgbWF0cml4IGNvZWZmaWNpZW50IGRvdWJsZSBvcHRpb24gKi8KKwl7U0VOU09SLCBPVjk2NTBfQ09NMTYsIDB4MDB9LAorCQkvKiBFbmFibGUgY29sb3IgbWF0cml4IGZvciBSR0IvWVVWLCBEZWxheSBZIGNoYW5uZWwsCisJc2V0IG91dHB1dCBZL1VWIGRlbGF5IHRvIDEgKi8KKwl7U0VOU09SLCBPVjk2NTBfQ09NMTMsIDB4MTl9LAorCS8qIEVuYWJsZSBkaWdpdGFsIEJMQywgU2V0IG91dHB1dCBtb2RlIHRvIFUgWSBWIFkgKi8KKwl7U0VOU09SLCBPVjk2NTBfVFNMQiwgMHgwY30sCisJLyogTGltaXQgdGhlIEFHQy9BRUMgc3RhYmxlIHVwcGVyIHJlZ2lvbiAqLworCXtTRU5TT1IsIE9WOTY1MF9DT00yNCwgMHgwMH0sCisJLyogRW5hYmxlIEhSRUYgYW5kIHNvbWUgb3V0IG9mIHNwZWMgdGhpbmdzICovCisJe1NFTlNPUiwgT1Y5NjUwX0NPTTEyLCAweDczfSwKKwkJLyogU2V0IGFsbCBEQkxDIG9mZnNldCBzaWducyB0byBwb3NpdGl2ZSBhbmQKKwlkbyBzb21lIG91dCBvZiBzcGVjIHN0dWZmICovCisJe1NFTlNPUiwgT1Y5NjUwX0RCTEMxLCAweGRmfSwKKwl7U0VOU09SLCBPVjk2NTBfQ09NMjEsIDB4MDZ9LAorCXtTRU5TT1IsIE9WOTY1MF9SU1ZEMzUsIDB4OTF9LAorCS8qIE5lY2Vzc2FyeSwgbm8gY2FtZXJhIHN0cmVhbSB3aXRob3V0IGl0ICovCisJe1NFTlNPUiwgT1Y5NjUwX1JTVkQxNiwgMHgwNn0sCisJe1NFTlNPUiwgT1Y5NjUwX1JTVkQ5NCwgMHg5OX0sCisJe1NFTlNPUiwgT1Y5NjUwX1JTVkQ5NSwgMHg5OX0sCisJe1NFTlNPUiwgT1Y5NjUwX1JTVkQ5NiwgMHgwNH0sCisJLyogRW5hYmxlIGZ1bGwgcmFuZ2Ugb3V0cHV0ICovCisJe1NFTlNPUiwgT1Y5NjUwX0NPTTE1LCAweDB9LAorCQkvKiBFbmFibGUgSFJFRiBhdCBvcHRpY2FsIGJsYWNrLCBlbmFibGUgQURCTEMgYmlhcywKKwllbmFibGUgQURCTEMsIHJlc2V0IHRpbWluZ3MgYXQgZm9ybWF0IGNoYW5nZSAqLworCXtTRU5TT1IsIE9WOTY1MF9DT002LCAweDRifSwKKwkvKiBTdWJ0cmFjdCAzMiBmcm9tIHRoZSBCIGNoYW5uZWwgYmlhcyAqLworCXtTRU5TT1IsIE9WOTY1MF9CQklBUywgMHhhMH0sCisJLyogU3VidHJhY3QgMzIgZnJvbSB0aGUgR2IgY2hhbm5lbCBiaWFzICovCisJe1NFTlNPUiwgT1Y5NjUwX0diQklBUywgMHhhMH0sCisJLyogRG8gbm90IGJ5cGFzcyB0aGUgYW5hbG9nIEJMQyBhbmQgdG8gc29tZSBvdXQgb2Ygc3BlYyBzdHVmZiAqLworCXtTRU5TT1IsIE9WOTY1MF9Hcl9DT00sIDB4MDB9LAorCS8qIFN1YnRyYWN0IDMyIGZyb20gdGhlIFIgY2hhbm5lbCBiaWFzICovCisJe1NFTlNPUiwgT1Y5NjUwX1JCSUFTLCAweGEwfSwKKwkvKiBTdWJ0cmFjdCAzMiBmcm9tIHRoZSBSIGNoYW5uZWwgYmlhcyAqLworCXtTRU5TT1IsIE9WOTY1MF9SQklBUywgMHgwfSwKKwl7U0VOU09SLCBPVjk2NTBfQ09NMjYsIDB4ODB9LAorCXtTRU5TT1IsIE9WOTY1MF9BQ09NQTksIDB4OTh9LAorCS8qIFNldCB0aGUgQUdDL0FFQyBzdGFibGUgcmVnaW9uIHVwcGVyIGxpbWl0ICovCisJe1NFTlNPUiwgT1Y5NjUwX0FFVywgMHg2OH0sCisJLyogU2V0IHRoZSBBR0MvQUVDIHN0YWJsZSByZWdpb24gbG93ZXIgbGltaXQgKi8KKwl7U0VOU09SLCBPVjk2NTBfQUVCLCAweDVjfSwKKwkvKiBTZXQgdGhlIGhpZ2ggYW5kIGxvdyBsaW1pdCBuaWJibGVzIHRvIDMgKi8KKwl7U0VOU09SLCBPVjk2NTBfVlBULCAweGMzfSwKKwkJLyogU2V0IHRoZSBBdXRvbWF0aWMgR2FpbiBDZWlsaW5nIChBR0MpIHRvIDEyOHgsCisJZHJvcCBWU1lOQyBhdCBmcmFtZSBkcm9wLAorCWxpbWl0IGV4cG9zdXJlIHRpbWluZywKKwlkcm9wIGZyYW1lIHdoZW4gdGhlIEFFQyBzdGVwIGlzIGxhcmdlciB0aGFuIHRoZSBleHBvc3VyZSBnYXAgKi8KKwl7U0VOU09SLCBPVjk2NTBfQ09NOSwgMHg2ZX0sCisJLyogU2V0IFZTWU5DIG5lZ2F0aXZlLCBTZXQgUkVTRVQgdG8gU0xIUyAoc2xhdmUgbW9kZSBob3Jpem9udGFsIHN5bmMpCisJYW5kIHNldCBQV0ROIHRvIFNMVlMgKHNsYXZlIG1vZGUgdmVydGljYWwgc3luYykgKi8KKwl7U0VOU09SLCBPVjk2NTBfQ09NMTAsIDB4NDJ9LAorCS8qIFNldCBob3Jpem9udGFsIGNvbHVtbiBzdGFydCBoaWdoIHRvIGRlZmF1bHQgdmFsdWUgKi8KKwl7U0VOU09SLCBPVjk2NTBfSFNUQVJULCAweDFhfSwKKwkvKiBTZXQgaG9yaXpvbnRhbCBjb2x1bW4gZW5kICovCisJe1NFTlNPUiwgT1Y5NjUwX0hTVE9QLCAweGJmfSwKKwkvKiBDb21wbGVtZW50aW5nIHJlZ2lzdGVyIHRvIHRoZSB0d28gd3JpdGVzIGFib3ZlICovCisJe1NFTlNPUiwgT1Y5NjUwX0hSRUYsIDB4YjJ9LAorCS8qIFNldCB2ZXJ0aWNhbCByb3cgc3RhcnQgaGlnaCBiaXRzICovCisJe1NFTlNPUiwgT1Y5NjUwX1ZTVFJULCAweDAyfSwKKwkvKiBTZXQgdmVydGljYWwgcm93IGVuZCBsb3cgYml0cyAqLworCXtTRU5TT1IsIE9WOTY1MF9WU1RPUCwgMHg3ZX0sCisJLyogU2V0IGNvbXBsZW1lbnRpbmcgdmVydGljYWwgZnJhbWUgY29udHJvbCAqLworCXtTRU5TT1IsIE9WOTY1MF9WUkVGLCAweDEwfSwKKwkvKiBTZXQgcmF3IFJHQiBvdXRwdXQgZm9ybWF0IHdpdGggVkdBIHJlc29sdXRpb24gKi8KKwl7U0VOU09SLCBPVjk2NTBfQ09NNywgT1Y5NjUwX1ZHQV9TRUxFQ1QgfAorCQkJICAgICAgT1Y5NjUwX1JHQl9TRUxFQ1QgfAorCQkJICAgICAgT1Y5NjUwX1JBV19SR0JfU0VMRUNUfSwKKwl7U0VOU09SLCBPVjk2NTBfQURDLCAweDA0fSwKKwl7U0VOU09SLCBPVjk2NTBfSFYsIDB4NDB9LAorCS8qIEVuYWJsZSBkZW5vaXNlLCBhbmQgd2hpdGUtcGl4ZWwgZXJhc2UgKi8KKwl7U0VOU09SLCBPVjk2NTBfQ09NMjIsIDB4MjN9LAorCisJLyogU2V0IHRoZSBoaWdoIGJpdHMgb2YgdGhlIGV4cG9zdXJlIHZhbHVlICovCisJe1NFTlNPUiwgT1Y5NjUwX0FFQ0gsICgoRVhQT1NVUkVfREVGQVVMVCAmIDB4ZmYwMCkgPj4gOCl9LAorCisJLyogU2V0IHRoZSBsb3cgYml0cyBvZiB0aGUgZXhwb3N1cmUgdmFsdWUgKi8KKwl7U0VOU09SLCBPVjk2NTBfQ09NMSwgKEVYUE9TVVJFX0RFRkFVTFQgJiAweGZmKX0sCisJe1NFTlNPUiwgT1Y5NjUwX0dBSU4sIEdBSU5fREVGQVVMVH0sCisJe1NFTlNPUiwgT1Y5NjUwX0JMVUUsIEJMVUVfR0FJTl9ERUZBVUxUfSwKKwl7U0VOU09SLCBPVjk2NTBfUkVELCBSRURfR0FJTl9ERUZBVUxUfSwKKworCXtTRU5TT1IsIE9WOTY1MF9DT00zLCBPVjk2NTBfVkFSSU9QSVhFTH0sCisJe1NFTlNPUiwgT1Y5NjUwX0NPTTUsIE9WOTY1MF9TWVNURU1fQ0xLX1NFTH0sCisKKwl7QlJJREdFLCBNNTYwMl9YQl9MSU5FX09GX0ZSQU1FX0gsIDB4ODJ9LAorCXtCUklER0UsIE01NjAyX1hCX0xJTkVfT0ZfRlJBTUVfTCwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfUElYX09GX0xJTkVfSCwgMHg4Mn0sCisJe0JSSURHRSwgTTU2MDJfWEJfUElYX09GX0xJTkVfTCwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfU0lHX0lOSSwgMHgwMX0sCisJe0JSSURHRSwgTTU2MDJfWEJfVlNZTkNfUEFSQSwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfVlNZTkNfUEFSQSwgMHgwOX0sCisJe0JSSURHRSwgTTU2MDJfWEJfVlNZTkNfUEFSQSwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfVlNZTkNfUEFSQSwgMHgwMX0sCisJe0JSSURHRSwgTTU2MDJfWEJfVlNZTkNfUEFSQSwgMHhlMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfVlNZTkNfUEFSQSwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfSFNZTkNfUEFSQSwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfSFNZTkNfUEFSQSwgMHg1ZX0sCisJe0JSSURHRSwgTTU2MDJfWEJfSFNZTkNfUEFSQSwgMHgwMn0sCisJe0JSSURHRSwgTTU2MDJfWEJfSFNZTkNfUEFSQSwgMHhkZX0KK307CisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHBvd2VyX2Rvd25fb3Y5NjUwW11bM10gPQoreworCXtCUklER0UsIE01NjAyX1hCX1NFTl9DTEtfRElWLCAweDA0fSwKKwl7QlJJREdFLCBNNTYwMl9YQl9TRU5fQ0xLX0NUUkwsIDB4YjB9LAorCXtTRU5TT1IsIE9WOTY1MF9DT003LCAweDgwfSwKKwl7U0VOU09SLCBPVjk2NTBfT0ZPTiwgMHhmNH0sCisJe1NFTlNPUiwgT1Y5NjUwX01WRlAsIDB4ODB9LAorCXtTRU5TT1IsIE9WOTY1MF9EQkxWLCAweDNmfSwKKwl7U0VOU09SLCBPVjk2NTBfUlNWRDM2LCAweDQ5fSwKKwl7U0VOU09SLCBPVjk2NTBfQ09NNywgMHgwNX0sCisKKwl7QlJJREdFLCBNNTYwMl9YQl9HUElPX0RJUiwgMHgwNX0sCisJe0JSSURHRSwgTTU2MDJfWEJfR1BJT19EQVQsIDB4MDR9LAorCXtCUklER0UsIE01NjAyX1hCX0dQSU9fRU5fSCwgMHgwNn0sCisJe0JSSURHRSwgTTU2MDJfWEJfR1BJT19FTl9MLCAweDA2fSwKKwl7QlJJREdFLCBNNTYwMl9YQl9HUElPX0RBVF9ILCAweDAyfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9TRU5fQ0xLX0RJViwgMHgwNH0sCisJe0JSSURHRSwgTTU2MDJfWEJfU0VOX0NMS19DVFJMLCAweGIwfQorfTsKKworLyogVmVydGljYWxseSBhbmQgaG9yaXpvbnRhbGx5IGZsaXBzIHRoZSBpbWFnZSBpZiBtYXRjaGVkLCBuZWVkZWQgZm9yIG1hY2hpbmVzCisgICB3aGVyZSB0aGUgc2Vuc29yIGlzIG1vdW50ZWQgdXBzaWRlIGRvd24gKi8KK3N0YXRpYworICAgIGNvbnN0CisJc3RydWN0IGRtaV9zeXN0ZW1faWQgb3Y5NjUwX2ZsaXBfZG1pX3RhYmxlW10gPSB7CisJeworCQkuaWRlbnQgPSAiQVNVUyBBNlZDIiwKKwkJLm1hdGNoZXMgPSB7CisJCQlETUlfTUFUQ0goRE1JX1NZU19WRU5ET1IsICJBU1VTVGVLIENvbXB1dGVyIEluYy4iKSwKKwkJCURNSV9NQVRDSChETUlfUFJPRFVDVF9OQU1FLCAiQTZWQyIpCisJCX0KKwl9LAorCXsKKwkJLmlkZW50ID0gIkFTVVMgQTZWTSIsCisJCS5tYXRjaGVzID0geworCQkJRE1JX01BVENIKERNSV9TWVNfVkVORE9SLCAiQVNVU1RlSyBDb21wdXRlciBJbmMuIiksCisJCQlETUlfTUFUQ0goRE1JX1BST0RVQ1RfTkFNRSwgIkE2Vk0iKQorCQl9CisJfSwKKwl7CisJCS5pZGVudCA9ICJBU1VTIEE2SkMiLAorCQkubWF0Y2hlcyA9IHsKKwkJCURNSV9NQVRDSChETUlfU1lTX1ZFTkRPUiwgIkFTVVNUZUsgQ29tcHV0ZXIgSW5jLiIpLAorCQkJRE1JX01BVENIKERNSV9QUk9EVUNUX05BTUUsICJBNkpDIikKKwkJfQorCX0sCisJeworCQkuaWRlbnQgPSAiQVNVUyBBNkt0IiwKKwkJLm1hdGNoZXMgPSB7CisJCQlETUlfTUFUQ0goRE1JX1NZU19WRU5ET1IsICJBU1VTVGVLIENvbXB1dGVyIEluYy4iKSwKKwkJCURNSV9NQVRDSChETUlfUFJPRFVDVF9OQU1FLCAiQTZLdCIpCisJCX0KKwl9LAorCXsgfQorfTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL201NjAyL201NjAyX3BvMTAzMC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9tNTYwMi9tNTYwMl9wbzEwMzAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMTdhYzUyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9tNTYwMi9tNTYwMl9wbzEwMzAuYwpAQCAtMCwwICsxLDQwMCBAQAorLyoKKyAqIERyaXZlciBmb3IgdGhlIHBvMTAzMCBzZW5zb3IKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggRXJpayBBbmRyw6luCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcgSWx5ZXMgR291dGEuIEJhc2VkIG9uIHRoZSBtNTYwM3ggTGludXggRHJpdmVyIFByb2plY3QuCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUgbTU2MDN4IExpbnV4IERyaXZlciBQcm9qZWN0IDxtNTYwMkB4M25nLmNvbS5icj4KKyAqCisgKiBQb3J0aW9ucyBvZiBjb2RlIHRvIFVTQiBpbnRlcmZhY2UgYW5kIEFMaSBkcml2ZXIgc29mdHdhcmUsCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgV2lsbGVtIER1aW5rZXIKKyAqIHY0bDIgaW50ZXJmYWNlIG1vZGVsZWQgYWZ0ZXIgdGhlIFY0TDIgZHJpdmVyCisgKiBmb3IgU045QzEweCBQQyBDYW1lcmEgQ29udHJvbGxlcnMKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHZlcnNpb24gMi4KKyAqCisgKi8KKworI2luY2x1ZGUgIm01NjAyX3BvMTAzMC5oIgorCitpbnQgcG8xMDMwX3Byb2JlKHN0cnVjdCBzZCAqc2QpCit7CisJdTggcHJvZF9pZCA9IDAsIHZlcl9pZCA9IDAsIGk7CisKKwlpZiAoZm9yY2Vfc2Vuc29yKSB7CisJCWlmIChmb3JjZV9zZW5zb3IgPT0gUE8xMDMwX1NFTlNPUikgeworCQkJaW5mbygiRm9yY2luZyBhICVzIHNlbnNvciIsIHBvMTAzMC5uYW1lKTsKKwkJCWdvdG8gc2Vuc29yX2ZvdW5kOworCQl9CisJCS8qIElmIHdlIHdhbnQgdG8gZm9yY2UgYW5vdGhlciBzZW5zb3IsIGRvbid0IHRyeSB0byBwcm9iZSB0aGlzCisJCSAqIG9uZSAqLworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlpbmZvKCJQcm9iaW5nIGZvciBhIHBvMTAzMCBzZW5zb3IiKTsKKworCS8qIFJ1biB0aGUgcHJlLWluaXQgdG8gYWN0dWFsbHkgcHJvYmUgdGhlIHVuaXQgKi8KKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShwcmVpbml0X3BvMTAzMCk7IGkrKykgeworCQl1OCBkYXRhID0gcHJlaW5pdF9wbzEwMzBbaV1bMl07CisJCWlmIChwcmVpbml0X3BvMTAzMFtpXVswXSA9PSBTRU5TT1IpCisJCQlwbzEwMzBfd3JpdGVfc2Vuc29yKHNkLAorCQkJCXByZWluaXRfcG8xMDMwW2ldWzFdLCAmZGF0YSwgMSk7CisJCWVsc2UKKwkJCW01NjAyX3dyaXRlX2JyaWRnZShzZCwgcHJlaW5pdF9wbzEwMzBbaV1bMV0sIGRhdGEpOworCX0KKworCWlmIChwbzEwMzBfcmVhZF9zZW5zb3Ioc2QsIDB4MywgJnByb2RfaWQsIDEpKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWlmIChwbzEwMzBfcmVhZF9zZW5zb3Ioc2QsIDB4NCwgJnZlcl9pZCwgMSkpCisJCXJldHVybiAtRU5PREVWOworCisJaWYgKChwcm9kX2lkID09IDB4MDIpICYmICh2ZXJfaWQgPT0gMHhlZikpIHsKKwkJaW5mbygiRGV0ZWN0ZWQgYSBwbzEwMzAgc2Vuc29yIik7CisJCWdvdG8gc2Vuc29yX2ZvdW5kOworCX0KKwlyZXR1cm4gLUVOT0RFVjsKKworc2Vuc29yX2ZvdW5kOgorCXNkLT5nc3BjYV9kZXYuY2FtLmNhbV9tb2RlID0gcG8xMDMwLm1vZGVzOworCXNkLT5nc3BjYV9kZXYuY2FtLm5tb2RlcyA9IHBvMTAzMC5ubW9kZXM7CisJc2QtPmRlc2MtPmN0cmxzID0gcG8xMDMwLmN0cmxzOworCXNkLT5kZXNjLT5uY3RybHMgPSBwbzEwMzAubmN0cmxzOworCXJldHVybiAwOworfQorCitpbnQgcG8xMDMwX3JlYWRfc2Vuc29yKHN0cnVjdCBzZCAqc2QsIGNvbnN0IHU4IGFkZHJlc3MsCisJCQl1OCAqaTJjX2RhdGEsIGNvbnN0IHU4IGxlbikKK3sKKwlpbnQgZXJyLCBpOworCisJZG8geworCQllcnIgPSBtNTYwMl9yZWFkX2JyaWRnZShzZCwgTTU2MDJfWEJfSTJDX1NUQVRVUywgaTJjX2RhdGEpOworCX0gd2hpbGUgKCgqaTJjX2RhdGEgJiBJMkNfQlVTWSkgJiYgIWVycik7CisKKwltNTYwMl93cml0ZV9icmlkZ2Uoc2QsIE01NjAyX1hCX0kyQ19ERVZfQUREUiwKKwkJCSAgIHNkLT5zZW5zb3ItPmkyY19zbGF2ZV9pZCk7CisJbTU2MDJfd3JpdGVfYnJpZGdlKHNkLCBNNTYwMl9YQl9JMkNfUkVHX0FERFIsIGFkZHJlc3MpOworCW01NjAyX3dyaXRlX2JyaWRnZShzZCwgTTU2MDJfWEJfSTJDX0NUUkwsIDB4MTAgKyBsZW4pOworCW01NjAyX3dyaXRlX2JyaWRnZShzZCwgTTU2MDJfWEJfSTJDX0NUUkwsIDB4MDgpOworCisJZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CisJCWVyciA9IG01NjAyX3JlYWRfYnJpZGdlKHNkLCBNNTYwMl9YQl9JMkNfREFUQSwgJihpMmNfZGF0YVtpXSkpOworCisJCVBERUJVRyhEX0NPTkYsICJSZWFkaW5nIHNlbnNvciByZWdpc3RlciAiCisJCQkJIjB4JXggY29udGFpbmluZyAweCV4ICIsIGFkZHJlc3MsICppMmNfZGF0YSk7CisJfQorCXJldHVybiAoZXJyIDwgMCkgPyBlcnIgOiAwOworfQorCitpbnQgcG8xMDMwX3dyaXRlX3NlbnNvcihzdHJ1Y3Qgc2QgKnNkLCBjb25zdCB1OCBhZGRyZXNzLAorCQkJdTggKmkyY19kYXRhLCBjb25zdCB1OCBsZW4pCit7CisJaW50IGVyciwgaTsKKwl1OCAqcDsKKwlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiA9IHNkLT5nc3BjYV9kZXYuZGV2OworCV9fdTggKmJ1ZiA9IHNkLT5nc3BjYV9kZXYudXNiX2J1ZjsKKworCS8qIFRoZSBwbzEwMzAgb25seSBzdXBwb3J0cyBvbmUgYnl0ZSB3cml0ZXMgKi8KKwlpZiAobGVuID4gMSB8fCAhbGVuKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCW1lbWNweShidWYsIHNlbnNvcl91cmJfc2tlbGV0b24sIHNpemVvZihzZW5zb3JfdXJiX3NrZWxldG9uKSk7CisKKwlidWZbMTFdID0gc2QtPnNlbnNvci0+aTJjX3NsYXZlX2lkOworCWJ1ZlsxNV0gPSBhZGRyZXNzOworCisJcCA9IGJ1ZiArIDE2OworCisJLyogQ29weSBhIGZvdXIgYnl0ZSB3cml0ZSBzZXF1ZW5jZSBmb3IgZWFjaCBieXRlIHRvIGJlIHdyaXR0ZW4gdG8gKi8KKwlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKKwkJbWVtY3B5KHAsIHNlbnNvcl91cmJfc2tlbGV0b24gKyAxNiwgNCk7CisJCXBbM10gPSBpMmNfZGF0YVtpXTsKKwkJcCArPSA0OworCQlQREVCVUcoRF9DT05GLCAiV3JpdGluZyBzZW5zb3IgcmVnaXN0ZXIgMHgleCB3aXRoIDB4JXgiLAorCQkgICAgICAgYWRkcmVzcywgaTJjX2RhdGFbaV0pOworCX0KKworCS8qIENvcHkgdGhlIGZvb3RlciAqLworCW1lbWNweShwLCBzZW5zb3JfdXJiX3NrZWxldG9uICsgMjAsIDQpOworCisJLyogU2V0IHRoZSB0b3RhbCBsZW5ndGggKi8KKwlwWzNdID0gMHgxMCArIGxlbjsKKworCWVyciA9IHVzYl9jb250cm9sX21zZyh1ZGV2LCB1c2Jfc25kY3RybHBpcGUodWRldiwgMCksCisJCQkgICAgICAweDA0LCAweDQwLCAweDE5LAorCQkJICAgICAgMHgwMDAwLCBidWYsCisJCQkgICAgICAyMCArIGxlbiAqIDQsIE01NjAyX1VSQl9NU0dfVElNRU9VVCk7CisKKwlyZXR1cm4gKGVyciA8IDApID8gZXJyIDogMDsKK30KKworaW50IHBvMTAzMF9pbml0KHN0cnVjdCBzZCAqc2QpCit7CisJaW50IGksIGVyciA9IDA7CisKKwkvKiBJbml0IHRoZSBzZW5zb3IgKi8KKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShpbml0X3BvMTAzMCk7IGkrKykgeworCQl1OCBkYXRhWzJdID0gezB4MDAsIDB4MDB9OworCisJCXN3aXRjaCAoaW5pdF9wbzEwMzBbaV1bMF0pIHsKKwkJY2FzZSBCUklER0U6CisJCQllcnIgPSBtNTYwMl93cml0ZV9icmlkZ2Uoc2QsCisJCQkJaW5pdF9wbzEwMzBbaV1bMV0sCisJCQkJaW5pdF9wbzEwMzBbaV1bMl0pOworCQkJYnJlYWs7CisKKwkJY2FzZSBTRU5TT1I6CisJCQlkYXRhWzBdID0gaW5pdF9wbzEwMzBbaV1bMl07CisJCQllcnIgPSBwbzEwMzBfd3JpdGVfc2Vuc29yKHNkLAorCQkJCWluaXRfcG8xMDMwW2ldWzFdLCBkYXRhLCAxKTsKKwkJCWJyZWFrOworCisJCWNhc2UgU0VOU09SX0xPTkc6CisJCQlkYXRhWzBdID0gaW5pdF9wbzEwMzBbaV1bMl07CisJCQlkYXRhWzFdID0gaW5pdF9wbzEwMzBbaV1bM107CisJCQllcnIgPSBwbzEwMzBfd3JpdGVfc2Vuc29yKHNkLAorCQkJCWluaXRfcG8xMDMwW2ldWzFdLCBkYXRhLCAyKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJaW5mbygiSW52YWxpZCBzdHJlYW0gY29tbWFuZCwgZXhpdGluZyBpbml0Iik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCX0KKworCWlmIChkdW1wX3NlbnNvcikKKwkJcG8xMDMwX2R1bXBfcmVnaXN0ZXJzKHNkKTsKKworCXJldHVybiAoZXJyIDwgMCkgPyBlcnIgOiAwOworfQorCitpbnQgcG8xMDMwX2dldF9leHBvc3VyZShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCXU4IGkyY19kYXRhOworCWludCBlcnI7CisKKwllcnIgPSBwbzEwMzBfcmVhZF9zZW5zb3Ioc2QsIFBPMTAzMF9SRUdfSU5URUdMSU5FU19ILAorCQkJCSAmaTJjX2RhdGEsIDEpOworCWlmIChlcnIgPCAwKQorCQlnb3RvIG91dDsKKwkqdmFsID0gKGkyY19kYXRhIDw8IDgpOworCisJZXJyID0gcG8xMDMwX3JlYWRfc2Vuc29yKHNkLCBQTzEwMzBfUkVHX0lOVEVHTElORVNfTSwKKwkJCQkgJmkyY19kYXRhLCAxKTsKKwkqdmFsIHw9IGkyY19kYXRhOworCisJUERFQlVHKERfVjRMMiwgIkV4cG9zdXJlIHJlYWQgYXMgJWQiLCAqdmFsKTsKK291dDoKKwlyZXR1cm4gKGVyciA8IDApID8gZXJyIDogMDsKK30KKworaW50IHBvMTAzMF9zZXRfZXhwb3N1cmUoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCXU4IGkyY19kYXRhOworCWludCBlcnI7CisKKwlQREVCVUcoRF9WNEwyLCAiU2V0IGV4cG9zdXJlIHRvICVkIiwgdmFsICYgMHhmZmZmKTsKKworCWkyY19kYXRhID0gKCh2YWwgJiAweGZmMDApID4+IDgpOworCVBERUJVRyhEX1Y0TDIsICJTZXQgZXhwb3N1cmUgdG8gaGlnaCBieXRlIHRvIDB4JXgiLAorCSAgICAgICBpMmNfZGF0YSk7CisKKwllcnIgPSBwbzEwMzBfd3JpdGVfc2Vuc29yKHNkLCBQTzEwMzBfUkVHX0lOVEVHTElORVNfSCwKKwkJCQkgICZpMmNfZGF0YSwgMSk7CisJaWYgKGVyciA8IDApCisJCWdvdG8gb3V0OworCisJaTJjX2RhdGEgPSAodmFsICYgMHhmZik7CisJUERFQlVHKERfVjRMMiwgIlNldCBleHBvc3VyZSB0byBsb3cgYnl0ZSB0byAweCV4IiwKKwkgICAgICAgaTJjX2RhdGEpOworCWVyciA9IHBvMTAzMF93cml0ZV9zZW5zb3Ioc2QsIFBPMTAzMF9SRUdfSU5URUdMSU5FU19NLAorCQkJCSAgJmkyY19kYXRhLCAxKTsKKworb3V0OgorCXJldHVybiAoZXJyIDwgMCkgPyBlcnIgOiAwOworfQorCitpbnQgcG8xMDMwX2dldF9nYWluKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCkKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisJdTggaTJjX2RhdGE7CisJaW50IGVycjsKKworCWVyciA9IHBvMTAzMF9yZWFkX3NlbnNvcihzZCwgUE8xMDMwX1JFR19HTE9CQUxHQUlOLAorCQkJCSAmaTJjX2RhdGEsIDEpOworCSp2YWwgPSBpMmNfZGF0YTsKKwlQREVCVUcoRF9WNEwyLCAiUmVhZCBnbG9iYWwgZ2FpbiAlZCIsICp2YWwpOworCisJcmV0dXJuIChlcnIgPCAwKSA/IGVyciA6IDA7Cit9CisKK2ludCBwbzEwMzBfZ2V0X2hmbGlwKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCkKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisJdTggaTJjX2RhdGE7CisJaW50IGVycjsKKworCWVyciA9IHBvMTAzMF9yZWFkX3NlbnNvcihzZCwgUE8xMDMwX1JFR19DT05UUk9MMiwKKwkJCQkgJmkyY19kYXRhLCAxKTsKKworCSp2YWwgPSAoaTJjX2RhdGEgPj4gNykgJiAweDAxIDsKKworCVBERUJVRyhEX1Y0TDIsICJSZWFkIGhmbGlwICVkIiwgKnZhbCk7CisKKwlyZXR1cm4gKGVyciA8IDApID8gZXJyIDogMDsKK30KKworaW50IHBvMTAzMF9zZXRfaGZsaXAoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCXU4IGkyY19kYXRhOworCWludCBlcnI7CisKKwlQREVCVUcoRF9WNEwyLCAiU2V0IGhmbGlwICVkIiwgdmFsKTsKKworCWkyY19kYXRhID0gKHZhbCAmIDB4MDEpIDw8IDc7CisKKwllcnIgPSBwbzEwMzBfd3JpdGVfc2Vuc29yKHNkLCBQTzEwMzBfUkVHX0NPTlRST0wyLAorCQkJCSAgJmkyY19kYXRhLCAxKTsKKworCXJldHVybiAoZXJyIDwgMCkgPyBlcnIgOiAwOworfQorCitpbnQgcG8xMDMwX2dldF92ZmxpcChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCXU4IGkyY19kYXRhOworCWludCBlcnI7CisKKwllcnIgPSBwbzEwMzBfcmVhZF9zZW5zb3Ioc2QsIFBPMTAzMF9SRUdfR0xPQkFMR0FJTiwKKwkJCQkgJmkyY19kYXRhLCAxKTsKKworCSp2YWwgPSAoaTJjX2RhdGEgPj4gNikgJiAweDAxOworCisJUERFQlVHKERfVjRMMiwgIlJlYWQgdmZsaXAgJWQiLCAqdmFsKTsKKworCXJldHVybiAoZXJyIDwgMCkgPyBlcnIgOiAwOworfQorCitpbnQgcG8xMDMwX3NldF92ZmxpcChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCkKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisJdTggaTJjX2RhdGE7CisJaW50IGVycjsKKworCVBERUJVRyhEX1Y0TDIsICJTZXQgdmZsaXAgJWQiLCB2YWwpOworCisJaTJjX2RhdGEgPSAodmFsICYgMHgwMSkgPDwgNjsKKworCWVyciA9IHBvMTAzMF93cml0ZV9zZW5zb3Ioc2QsIFBPMTAzMF9SRUdfQ09OVFJPTDIsCisJCQkJICAmaTJjX2RhdGEsIDEpOworCisJcmV0dXJuIChlcnIgPCAwKSA/IGVyciA6IDA7Cit9CisKK2ludCBwbzEwMzBfc2V0X2dhaW4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCXU4IGkyY19kYXRhOworCWludCBlcnI7CisKKwlpMmNfZGF0YSA9IHZhbCAmIDB4ZmY7CisJUERFQlVHKERfVjRMMiwgIlNldCBnbG9iYWwgZ2FpbiB0byAlZCIsIGkyY19kYXRhKTsKKwllcnIgPSBwbzEwMzBfd3JpdGVfc2Vuc29yKHNkLCBQTzEwMzBfUkVHX0dMT0JBTEdBSU4sCisJCQkJICAmaTJjX2RhdGEsIDEpOworCXJldHVybiAoZXJyIDwgMCkgPyBlcnIgOiAwOworfQorCitpbnQgcG8xMDMwX2dldF9yZWRfYmFsYW5jZShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCXU4IGkyY19kYXRhOworCWludCBlcnI7CisKKwllcnIgPSBwbzEwMzBfcmVhZF9zZW5zb3Ioc2QsIFBPMTAzMF9SRUdfUkVEX0dBSU4sCisJCQkJICZpMmNfZGF0YSwgMSk7CisJKnZhbCA9IGkyY19kYXRhOworCVBERUJVRyhEX1Y0TDIsICJSZWFkIHJlZCBnYWluICVkIiwgKnZhbCk7CisJcmV0dXJuIChlcnIgPCAwKSA/IGVyciA6IDA7Cit9CisKK2ludCBwbzEwMzBfc2V0X3JlZF9iYWxhbmNlKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKwl1OCBpMmNfZGF0YTsKKwlpbnQgZXJyOworCisJaTJjX2RhdGEgPSB2YWwgJiAweGZmOworCVBERUJVRyhEX1Y0TDIsICJTZXQgcmVkIGdhaW4gdG8gJWQiLCBpMmNfZGF0YSk7CisJZXJyID0gcG8xMDMwX3dyaXRlX3NlbnNvcihzZCwgUE8xMDMwX1JFR19SRURfR0FJTiwKKwkJCQkgICZpMmNfZGF0YSwgMSk7CisJcmV0dXJuIChlcnIgPCAwKSA/IGVyciA6IDA7Cit9CisKK2ludCBwbzEwMzBfZ2V0X2JsdWVfYmFsYW5jZShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCXU4IGkyY19kYXRhOworCWludCBlcnI7CisKKwllcnIgPSBwbzEwMzBfcmVhZF9zZW5zb3Ioc2QsIFBPMTAzMF9SRUdfQkxVRV9HQUlOLAorCQkJCSAmaTJjX2RhdGEsIDEpOworCSp2YWwgPSBpMmNfZGF0YTsKKwlQREVCVUcoRF9WNEwyLCAiUmVhZCBibHVlIGdhaW4gJWQiLCAqdmFsKTsKKworCXJldHVybiAoZXJyIDwgMCkgPyBlcnIgOiAwOworfQorCitpbnQgcG8xMDMwX3NldF9ibHVlX2JhbGFuY2Uoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCXU4IGkyY19kYXRhOworCWludCBlcnI7CisJaTJjX2RhdGEgPSB2YWwgJiAweGZmOworCVBERUJVRyhEX1Y0TDIsICJTZXQgYmx1ZSBnYWluIHRvICVkIiwgaTJjX2RhdGEpOworCWVyciA9IHBvMTAzMF93cml0ZV9zZW5zb3Ioc2QsIFBPMTAzMF9SRUdfQkxVRV9HQUlOLAorCQkJCSAgJmkyY19kYXRhLCAxKTsKKworCXJldHVybiAoZXJyIDwgMCkgPyBlcnIgOiAwOworfQorCitpbnQgcG8xMDMwX3Bvd2VyX2Rvd24oc3RydWN0IHNkICpzZCkKK3sKKwlyZXR1cm4gMDsKK30KKwordm9pZCBwbzEwMzBfZHVtcF9yZWdpc3RlcnMoc3RydWN0IHNkICpzZCkKK3sKKwlpbnQgYWRkcmVzczsKKwl1OCB2YWx1ZSA9IDA7CisKKwlpbmZvKCJEdW1waW5nIHRoZSBwbzEwMzAgc2Vuc29yIGNvcmUgcmVnaXN0ZXJzIik7CisJZm9yIChhZGRyZXNzID0gMDsgYWRkcmVzcyA8IDB4N2Y7IGFkZHJlc3MrKykgeworCQlwbzEwMzBfcmVhZF9zZW5zb3Ioc2QsIGFkZHJlc3MsICZ2YWx1ZSwgMSk7CisJCWluZm8oInJlZ2lzdGVyIDB4JXggY29udGFpbnMgMHgleCIsCisJCSAgICAgYWRkcmVzcywgdmFsdWUpOworCX0KKworCWluZm8oInBvMTAzMCByZWdpc3RlciBzdGF0ZSBkdW1wIGNvbXBsZXRlIik7CisKKwlpbmZvKCJQcm9iaW5nIGZvciB3aGljaCByZWdpc3RlcnMgdGhhdCBhcmUgcmVhZC93cml0ZSIpOworCWZvciAoYWRkcmVzcyA9IDA7IGFkZHJlc3MgPCAweGZmOyBhZGRyZXNzKyspIHsKKwkJdTggb2xkX3ZhbHVlLCBjdHJsX3ZhbHVlOworCQl1OCB0ZXN0X3ZhbHVlWzJdID0gezB4ZmYsIDB4ZmZ9OworCisJCXBvMTAzMF9yZWFkX3NlbnNvcihzZCwgYWRkcmVzcywgJm9sZF92YWx1ZSwgMSk7CisJCXBvMTAzMF93cml0ZV9zZW5zb3Ioc2QsIGFkZHJlc3MsIHRlc3RfdmFsdWUsIDEpOworCQlwbzEwMzBfcmVhZF9zZW5zb3Ioc2QsIGFkZHJlc3MsICZjdHJsX3ZhbHVlLCAxKTsKKworCQlpZiAoY3RybF92YWx1ZSA9PSB0ZXN0X3ZhbHVlWzBdKQorCQkJaW5mbygicmVnaXN0ZXIgMHgleCBpcyB3cml0ZWFibGUiLCBhZGRyZXNzKTsKKwkJZWxzZQorCQkJaW5mbygicmVnaXN0ZXIgMHgleCBpcyByZWFkIG9ubHkiLCBhZGRyZXNzKTsKKworCQkvKiBSZXN0b3JlIG9yaWdpbmFsIHZhbHVlICovCisJCXBvMTAzMF93cml0ZV9zZW5zb3Ioc2QsIGFkZHJlc3MsICZvbGRfdmFsdWUsIDEpOworCX0KK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvbTU2MDIvbTU2MDJfcG8xMDMwLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL201NjAyL201NjAyX3BvMTAzMC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEwYjc1ZmYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL201NjAyL201NjAyX3BvMTAzMC5oCkBAIC0wLDAgKzEsNTA4IEBACisvKgorICogRHJpdmVyIGZvciB0aGUgcG8xMDMwIHNlbnNvci4KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggRXJpayBBbmRyw6luCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcgSWx5ZXMgR291dGEuIEJhc2VkIG9uIHRoZSBtNTYwM3ggTGludXggRHJpdmVyIFByb2plY3QuCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUgbTU2MDN4IExpbnV4IERyaXZlciBQcm9qZWN0IDxtNTYwMkB4M25nLmNvbS5icj4KKyAqCisgKiBQb3J0aW9ucyBvZiBjb2RlIHRvIFVTQiBpbnRlcmZhY2UgYW5kIEFMaSBkcml2ZXIgc29mdHdhcmUsCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgV2lsbGVtIER1aW5rZXIKKyAqIHY0bDIgaW50ZXJmYWNlIG1vZGVsZWQgYWZ0ZXIgdGhlIFY0TDIgZHJpdmVyCisgKiBmb3IgU045QzEweCBQQyBDYW1lcmEgQ29udHJvbGxlcnMKKyAqCisgKiBSZWdpc3RlciBkZWZpbmVzIHRha2VuIGZyb20gUGFzY2FsIFN0YW5ncyBQcm94eWNvbiBBcm1saWIKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHZlcnNpb24gMi4KKyAqCisgKi8KKworI2lmbmRlZiBNNTYwMl9QTzEwMzBfSF8KKyNkZWZpbmUgTTU2MDJfUE8xMDMwX0hfCisKKyNpbmNsdWRlICJtNTYwMl9zZW5zb3IuaCIKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjZGVmaW5lIFBPMTAzMF9SRUdfREVWSURfSAkJMHgwMAorI2RlZmluZSBQTzEwMzBfUkVHX0RFVklEX0wJCTB4MDEKKyNkZWZpbmUgUE8xMDMwX1JFR19GUkFNRVdJRFRIX0gJCTB4MDQKKyNkZWZpbmUgUE8xMDMwX1JFR19GUkFNRVdJRFRIX0wJCTB4MDUKKyNkZWZpbmUgUE8xMDMwX1JFR19GUkFNRUhFSUdIVF9ICTB4MDYKKyNkZWZpbmUgUE8xMDMwX1JFR19GUkFNRUhFSUdIVF9MCTB4MDcKKyNkZWZpbmUgUE8xMDMwX1JFR19XSU5ET1dYX0gJCTB4MDgKKyNkZWZpbmUgUE8xMDMwX1JFR19XSU5ET1dYX0wJCTB4MDkKKyNkZWZpbmUgUE8xMDMwX1JFR19XSU5ET1dZX0gJCTB4MGEKKyNkZWZpbmUgUE8xMDMwX1JFR19XSU5ET1dZX0wJCTB4MGIKKyNkZWZpbmUgUE8xMDMwX1JFR19XSU5ET1dXSURUSF9ICTB4MGMKKyNkZWZpbmUgUE8xMDMwX1JFR19XSU5ET1dXSURUSF9MCTB4MGQKKyNkZWZpbmUgUE8xMDMwX1JFR19XSU5ET1dIRUlHSFRfSAkweDBlCisjZGVmaW5lIFBPMTAzMF9SRUdfV0lORE9XSEVJR0hUX0wJMHgwZgorCisjZGVmaW5lIFBPMTAzMF9SRUdfR0xPQkFMSUJJQVMJCTB4MTIKKyNkZWZpbmUgUE8xMDMwX1JFR19QSVhFTElCSUFTCQkweDEzCisKKyNkZWZpbmUgUE8xMDMwX1JFR19HTE9CQUxHQUlOCQkweDE1CisjZGVmaW5lIFBPMTAzMF9SRUdfUkVEX0dBSU4JCTB4MTYKKyNkZWZpbmUgUE8xMDMwX1JFR19HUkVFTl8xX0dBSU4JCTB4MTcKKyNkZWZpbmUgUE8xMDMwX1JFR19CTFVFX0dBSU4JCTB4MTgKKyNkZWZpbmUgUE8xMDMwX1JFR19HUkVFTl8yX0dBSU4JCTB4MTkKKworI2RlZmluZSBQTzEwMzBfUkVHX0lOVEVHTElORVNfSAkJMHgxYQorI2RlZmluZSBQTzEwMzBfUkVHX0lOVEVHTElORVNfTQkJMHgxYgorI2RlZmluZSBQTzEwMzBfUkVHX0lOVEVHTElORVNfTAkJMHgxYworCisjZGVmaW5lIFBPMTAzMF9SRUdfQ09OVFJPTDEJCTB4MWQKKyNkZWZpbmUgUE8xMDMwX1JFR19DT05UUk9MMgkJMHgxZQorI2RlZmluZSBQTzEwMzBfUkVHX0NPTlRST0wzCQkweDFmCisjZGVmaW5lIFBPMTAzMF9SRUdfQ09OVFJPTDQJCTB4MjAKKworI2RlZmluZSBQTzEwMzBfUkVHX1BFUklPRDUwX0gJCTB4MjMKKyNkZWZpbmUgUE8xMDMwX1JFR19QRVJJT0Q1MF9MCQkweDI0CisjZGVmaW5lIFBPMTAzMF9SRUdfUEVSSU9ENjBfSAkJMHgyNQorI2RlZmluZSBQTzEwMzBfUkVHX1BFUklPRDYwX0wJCTB4MjYKKyNkZWZpbmUgUE8xMDMwX1JFR19SRUdDTEsxNjcJCTB4MjcKKyNkZWZpbmUgUE8xMDMwX1JFR19ERUxUQTUwCQkweDI4CisjZGVmaW5lIFBPMTAzMF9SRUdfREVMVEE2MAkJMHgyOQorCisjZGVmaW5lIFBPMTAzMF9SRUdfQURDT0ZGU0VUCQkweDJjCisKKy8qIEdhbW1hIENvcnJlY3Rpb24gQ29lZmZzICovCisjZGVmaW5lIFBPMTAzMF9SRUdfR0MwCQkJMHgyZAorI2RlZmluZSBQTzEwMzBfUkVHX0dDMQkJCTB4MmUKKyNkZWZpbmUgUE8xMDMwX1JFR19HQzIJCQkweDJmCisjZGVmaW5lIFBPMTAzMF9SRUdfR0MzCQkJMHgzMAorI2RlZmluZSBQTzEwMzBfUkVHX0dDNAkJCTB4MzEKKyNkZWZpbmUgUE8xMDMwX1JFR19HQzUJCQkweDMyCisjZGVmaW5lIFBPMTAzMF9SRUdfR0M2CQkJMHgzMworI2RlZmluZSBQTzEwMzBfUkVHX0dDNwkJCTB4MzQKKworLyogQ29sb3IgVHJhbnNmb3JtIE1hdHJpeCAqLworI2RlZmluZSBQTzEwMzBfUkVHX0NUMAkJCTB4MzUKKyNkZWZpbmUgUE8xMDMwX1JFR19DVDEJCQkweDM2CisjZGVmaW5lIFBPMTAzMF9SRUdfQ1QyCQkJMHgzNworI2RlZmluZSBQTzEwMzBfUkVHX0NUMwkJCTB4MzgKKyNkZWZpbmUgUE8xMDMwX1JFR19DVDQJCQkweDM5CisjZGVmaW5lIFBPMTAzMF9SRUdfQ1Q1CQkJMHgzYQorI2RlZmluZSBQTzEwMzBfUkVHX0NUNgkJCTB4M2IKKyNkZWZpbmUgUE8xMDMwX1JFR19DVDcJCQkweDNjCisjZGVmaW5lIFBPMTAzMF9SRUdfQ1Q4CQkJMHgzZAorCisjZGVmaW5lIFBPMTAzMF9SRUdfQVVUT0NUUkwxCQkweDNlCisjZGVmaW5lIFBPMTAzMF9SRUdfQVVUT0NUUkwyCQkweDNmCisKKyNkZWZpbmUgUE8xMDMwX1JFR19ZVEFSR0VUCQkweDQwCisjZGVmaW5lIFBPMTAzMF9SRUdfR0xPQkFMR0FJTk1JTgkweDQxCisjZGVmaW5lIFBPMTAzMF9SRUdfR0xPQkFMR0FJTk1BWAkweDQyCisKKy8qIE91dHB1dCBmb3JtYXQgY29udHJvbCAqLworI2RlZmluZSBQTzEwMzBfUkVHX09VVEZPUk1DVFJMMQkJMHg1YQorI2RlZmluZSBQTzEwMzBfUkVHX09VVEZPUk1DVFJMMgkJMHg1YgorI2RlZmluZSBQTzEwMzBfUkVHX09VVEZPUk1DVFJMMwkJMHg1YworI2RlZmluZSBQTzEwMzBfUkVHX09VVEZPUk1DVFJMNAkJMHg1ZAorI2RlZmluZSBQTzEwMzBfUkVHX09VVEZPUk1DVFJMNQkJMHg1ZQorCisvKiBJbWFnaW5nIGNvZWZmaWNpZW50cyAqLworI2RlZmluZSBQTzEwMzBfUkVHX1lCUklHSFQJCTB4NzMKKyNkZWZpbmUgUE8xMDMwX1JFR19ZQ09OVFJBU1QJCTB4NzQKKyNkZWZpbmUgUE8xMDMwX1JFR19ZU0FUVVJBVElPTgkJMHg3NQorCisjZGVmaW5lIFBPMTAzMF9IRkxJUAkJCSgxIDw8IDcpCisjZGVmaW5lIFBPMTAzMF9WRkxJUAkJCSgxIDw8IDYpCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2RlZmluZSBQTzEwMzBfR0xPQkFMX0dBSU5fREVGQVVMVAkweDEyCisjZGVmaW5lIFBPMTAzMF9FWFBPU1VSRV9ERUZBVUxUCQkweDAwODUKKyNkZWZpbmUgUE8xMDMwX0JMVUVfR0FJTl9ERUZBVUxUIAkweDQwCisjZGVmaW5lIFBPMTAzMF9SRURfR0FJTl9ERUZBVUxUIAkweDQwCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogS2VybmVsIG1vZHVsZSBwYXJhbWV0ZXJzICovCitleHRlcm4gaW50IGZvcmNlX3NlbnNvcjsKK2V4dGVybiBpbnQgZHVtcF9zZW5zb3I7CisKK2ludCBwbzEwMzBfcHJvYmUoc3RydWN0IHNkICpzZCk7CitpbnQgcG8xMDMwX2luaXQoc3RydWN0IHNkICpzZCk7CitpbnQgcG8xMDMwX3Bvd2VyX2Rvd24oc3RydWN0IHNkICpzZCk7CisKK3ZvaWQgcG8xMDMwX2R1bXBfcmVnaXN0ZXJzKHN0cnVjdCBzZCAqc2QpOworCitpbnQgcG8xMDMwX3JlYWRfc2Vuc29yKHN0cnVjdCBzZCAqc2QsIGNvbnN0IHU4IGFkZHJlc3MsCisJCQkgICAgICB1OCAqaTJjX2RhdGEsIGNvbnN0IHU4IGxlbik7CitpbnQgcG8xMDMwX3dyaXRlX3NlbnNvcihzdHJ1Y3Qgc2QgKnNkLCBjb25zdCB1OCBhZGRyZXNzLAorCQkJICAgICAgIHU4ICppMmNfZGF0YSwgY29uc3QgdTggbGVuKTsKKworaW50IHBvMTAzMF9nZXRfZXhwb3N1cmUoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKTsKK2ludCBwbzEwMzBfc2V0X2V4cG9zdXJlKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKTsKK2ludCBwbzEwMzBfZ2V0X2dhaW4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKTsKK2ludCBwbzEwMzBfc2V0X2dhaW4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpOworaW50IHBvMTAzMF9nZXRfcmVkX2JhbGFuY2Uoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKTsKK2ludCBwbzEwMzBfc2V0X3JlZF9iYWxhbmNlKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKTsKK2ludCBwbzEwMzBfZ2V0X2JsdWVfYmFsYW5jZShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpOworaW50IHBvMTAzMF9zZXRfYmx1ZV9iYWxhbmNlKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKTsKK2ludCBwbzEwMzBfZ2V0X2hmbGlwKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCk7CitpbnQgcG8xMDMwX3NldF9oZmxpcChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCk7CitpbnQgcG8xMDMwX2dldF92ZmxpcChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpOworaW50IHBvMTAzMF9zZXRfdmZsaXAoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpOworCitzdGF0aWMgc3RydWN0IG01NjAyX3NlbnNvciBwbzEwMzAgPSB7CisJLm5hbWUgPSAiUE8xMDMwIiwKKworCS5pMmNfc2xhdmVfaWQgPSAweGRjLAorCisJLnByb2JlID0gcG8xMDMwX3Byb2JlLAorCS5pbml0ID0gcG8xMDMwX2luaXQsCisJLnBvd2VyX2Rvd24gPSBwbzEwMzBfcG93ZXJfZG93biwKKworCS5uY3RybHMgPSA2LAorCS5jdHJscyA9IHsKKwl7CisJCXsKKwkJCS5pZCAJCT0gVjRMMl9DSURfR0FJTiwKKwkJCS50eXBlIAkJPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAorCQkJLm5hbWUgCQk9ICJnYWluIiwKKwkJCS5taW5pbXVtIAk9IDB4MDAsCisJCQkubWF4aW11bSAJPSAweDRmLAorCQkJLnN0ZXAgCQk9IDB4MSwKKwkJCS5kZWZhdWx0X3ZhbHVlIAk9IFBPMTAzMF9HTE9CQUxfR0FJTl9ERUZBVUxULAorCQkJLmZsYWdzICAgICAgICAgCT0gVjRMMl9DVFJMX0ZMQUdfU0xJREVSCisJCX0sCisJCS5zZXQgPSBwbzEwMzBfc2V0X2dhaW4sCisJCS5nZXQgPSBwbzEwMzBfZ2V0X2dhaW4KKwl9LCB7CisJCXsKKwkJCS5pZCAJCT0gVjRMMl9DSURfRVhQT1NVUkUsCisJCQkudHlwZSAJCT0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKKwkJCS5uYW1lIAkJPSAiZXhwb3N1cmUiLAorCQkJLm1pbmltdW0gCT0gMHgwMCwKKwkJCS5tYXhpbXVtIAk9IDB4MDJmZiwKKwkJCS5zdGVwIAkJPSAweDEsCisJCQkuZGVmYXVsdF92YWx1ZSAJPSBQTzEwMzBfRVhQT1NVUkVfREVGQVVMVCwKKwkJCS5mbGFncyAgICAgICAgIAk9IFY0TDJfQ1RSTF9GTEFHX1NMSURFUgorCQl9LAorCQkuc2V0ID0gcG8xMDMwX3NldF9leHBvc3VyZSwKKwkJLmdldCA9IHBvMTAzMF9nZXRfZXhwb3N1cmUKKwl9LCB7CisJCXsKKwkJCS5pZCAJCT0gVjRMMl9DSURfUkVEX0JBTEFOQ0UsCisJCQkudHlwZSAJCT0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKKwkJCS5uYW1lIAkJPSAicmVkIGJhbGFuY2UiLAorCQkJLm1pbmltdW0gCT0gMHgwMCwKKwkJCS5tYXhpbXVtIAk9IDB4ZmYsCisJCQkuc3RlcCAJCT0gMHgxLAorCQkJLmRlZmF1bHRfdmFsdWUgCT0gUE8xMDMwX1JFRF9HQUlOX0RFRkFVTFQsCisJCQkuZmxhZ3MgICAgICAgICAJPSBWNEwyX0NUUkxfRkxBR19TTElERVIKKwkJfSwKKwkJLnNldCA9IHBvMTAzMF9zZXRfcmVkX2JhbGFuY2UsCisJCS5nZXQgPSBwbzEwMzBfZ2V0X3JlZF9iYWxhbmNlCisJfSwgeworCQl7CisJCQkuaWQgCQk9IFY0TDJfQ0lEX0JMVUVfQkFMQU5DRSwKKwkJCS50eXBlIAkJPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAorCQkJLm5hbWUgCQk9ICJibHVlIGJhbGFuY2UiLAorCQkJLm1pbmltdW0gCT0gMHgwMCwKKwkJCS5tYXhpbXVtIAk9IDB4ZmYsCisJCQkuc3RlcCAJCT0gMHgxLAorCQkJLmRlZmF1bHRfdmFsdWUgCT0gUE8xMDMwX0JMVUVfR0FJTl9ERUZBVUxULAorCQkJLmZsYWdzICAgICAgICAgCT0gVjRMMl9DVFJMX0ZMQUdfU0xJREVSCisJCX0sCisJCS5zZXQgPSBwbzEwMzBfc2V0X2JsdWVfYmFsYW5jZSwKKwkJLmdldCA9IHBvMTAzMF9nZXRfYmx1ZV9iYWxhbmNlCisJfSwgeworCQl7CisJCQkuaWQgCQk9IFY0TDJfQ0lEX0hGTElQLAorCQkJLnR5cGUgCQk9IFY0TDJfQ1RSTF9UWVBFX0JPT0xFQU4sCisJCQkubmFtZSAJCT0gImhvcml6b250YWwgZmxpcCIsCisJCQkubWluaW11bSAJPSAwLAorCQkJLm1heGltdW0gCT0gMSwKKwkJCS5zdGVwIAkJPSAxLAorCQkJLmRlZmF1bHRfdmFsdWUgCT0gMCwKKwkJfSwKKwkJLnNldCA9IHBvMTAzMF9zZXRfaGZsaXAsCisJCS5nZXQgPSBwbzEwMzBfZ2V0X2hmbGlwCisJfSwgeworCQl7CisJCQkuaWQgCQk9IFY0TDJfQ0lEX1ZGTElQLAorCQkJLnR5cGUgCQk9IFY0TDJfQ1RSTF9UWVBFX0JPT0xFQU4sCisJCQkubmFtZSAJCT0gInZlcnRpY2FsIGZsaXAiLAorCQkJLm1pbmltdW0gCT0gMCwKKwkJCS5tYXhpbXVtIAk9IDEsCisJCQkuc3RlcCAJCT0gMSwKKwkJCS5kZWZhdWx0X3ZhbHVlIAk9IDAsCisJCX0sCisJCS5zZXQgPSBwbzEwMzBfc2V0X3ZmbGlwLAorCQkuZ2V0ID0gcG8xMDMwX2dldF92ZmxpcAorCX0KKwl9LAorCisJLm5tb2RlcyA9IDEsCisJLm1vZGVzID0geworCXsKKwkJTTU2MDJfREVGQVVMVF9GUkFNRV9XSURUSCwKKwkJTTU2MDJfREVGQVVMVF9GUkFNRV9IRUlHSFQsCisJCVY0TDJfUElYX0ZNVF9TQkdHUjgsCisJCVY0TDJfRklFTERfTk9ORSwKKwkJLnNpemVpbWFnZSA9CisJCQlNNTYwMl9ERUZBVUxUX0ZSQU1FX1dJRFRIICogTTU2MDJfREVGQVVMVF9GUkFNRV9IRUlHSFQsCisJCS5ieXRlc3BlcmxpbmUgPSBNNTYwMl9ERUZBVUxUX0ZSQU1FX1dJRFRILAorCQkuY29sb3JzcGFjZSA9IFY0TDJfQ09MT1JTUEFDRV9TUkdCLAorCQkucHJpdiA9IDEKKwl9CisJfQorfTsKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgcHJlaW5pdF9wbzEwMzBbXVszXSA9Cit7CisJe0JSSURHRSwgTTU2MDJfWEJfTUNVX0NMS19ESVYsIDB4MDJ9LAorCXtCUklER0UsIE01NjAyX1hCX01DVV9DTEtfQ1RSTCwgMHhiMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfU0VOX0NMS19ESVYsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX1NFTl9DTEtfQ1RSTCwgMHhiMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfQURDX0NUUkwsIDB4YzB9LAorCXtCUklER0UsIE01NjAyX1hCX1NFTlNPUl9UWVBFLCAweDBkfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9TRU5TT1JfQ1RSTCwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfQURDX0NUUkwsIDB4YzB9LAorCXtCUklER0UsIE01NjAyX1hCX1NFTlNPUl9UWVBFLCAweDBjfSwKKworCXtTRU5TT1IsIFBPMTAzMF9SRUdfQVVUT0NUUkwyLCAweDI0fSwKKworCXtCUklER0UsIE01NjAyX1hCX0dQSU9fRElSLCAweDA1fSwKKwl7QlJJREdFLCBNNTYwMl9YQl9HUElPX0RBVCwgMHgwNH0sCisJe0JSSURHRSwgTTU2MDJfWEJfR1BJT19FTl9ILCAweDA2fSwKKwl7QlJJREdFLCBNNTYwMl9YQl9HUElPX0RJUl9ILCAweDA2fSwKKwl7QlJJREdFLCBNNTYwMl9YQl9HUElPX0RBVF9ILCAweDAyfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9TRU5fQ0xLX0RJViwgMHgwNH0sCisJe0JSSURHRSwgTTU2MDJfWEJfU0VOX0NMS19DVFJMLCAweGIwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9TRU5fQ0xLX0RJViwgMHgwNn0sCisJe0JSSURHRSwgTTU2MDJfWEJfU0VOX0NMS19DVFJMLCAweGIwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9BRENfQ1RSTCwgMHhjMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfU0VOU09SX1RZUEUsIDB4MGN9LAorCXtCUklER0UsIE01NjAyX1hCX0xJTkVfT0ZfRlJBTUVfSCwgMHg4MX0sCisJe0JSSURHRSwgTTU2MDJfWEJfUElYX09GX0xJTkVfSCwgMHg4Mn0sCisJe0JSSURHRSwgTTU2MDJfWEJfU0lHX0lOSSwgMHgwMX0sCisJe0JSSURHRSwgTTU2MDJfWEJfVlNZTkNfUEFSQSwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfVlNZTkNfUEFSQSwgMHgwMn0sCisJe0JSSURHRSwgTTU2MDJfWEJfVlNZTkNfUEFSQSwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfVlNZTkNfUEFSQSwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfVlNZTkNfUEFSQSwgMHgwMX0sCisJe0JSSURHRSwgTTU2MDJfWEJfVlNZTkNfUEFSQSwgMHhlY30sCisJe0JSSURHRSwgTTU2MDJfWEJfVlNZTkNfUEFSQSwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfVlNZTkNfUEFSQSwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfU0lHX0lOSSwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfU0lHX0lOSSwgMHgwMn0sCisJe0JSSURHRSwgTTU2MDJfWEJfSFNZTkNfUEFSQSwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfSFNZTkNfUEFSQSwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfSFNZTkNfUEFSQSwgMHgwMn0sCisJe0JSSURHRSwgTTU2MDJfWEJfSFNZTkNfUEFSQSwgMHg4N30sCisJe0JSSURHRSwgTTU2MDJfWEJfU0lHX0lOSSwgMHgwMH0sCisKKwl7U0VOU09SLCBQTzEwMzBfUkVHX0FVVE9DVFJMMiwgMHgyNH0sCisKKwl7QlJJREdFLCBNNTYwMl9YQl9HUElPX0RJUiwgMHgwNX0sCisJe0JSSURHRSwgTTU2MDJfWEJfR1BJT19EQVQsIDB4MDR9LAorCXtCUklER0UsIE01NjAyX1hCX0dQSU9fRU5fSCwgMHgwNn0sCisJe0JSSURHRSwgTTU2MDJfWEJfR1BJT19ESVJfSCwgMHgwNn0sCisJe0JSSURHRSwgTTU2MDJfWEJfR1BJT19EQVRfSCwgMHgwMn0sCisJe0JSSURHRSwgTTU2MDJfWEJfU0VOX0NMS19ESVYsIDB4MDR9LAorCXtCUklER0UsIE01NjAyX1hCX1NFTl9DTEtfQ1RSTCwgMHhiMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfU0VOX0NMS19ESVYsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX1NFTl9DTEtfQ1RSTCwgMHhiMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfQURDX0NUUkwsIDB4YzB9LAorCXtCUklER0UsIE01NjAyX1hCX1NFTlNPUl9UWVBFLCAweDBjfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9HUElPX0RJUiwgMHgwNX0sCisJe0JSSURHRSwgTTU2MDJfWEJfR1BJT19EQVQsIDB4MDB9Cit9OworCitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBpbml0X3BvMTAzMFtdWzRdID0KK3sKKwl7QlJJREdFLCBNNTYwMl9YQl9NQ1VfQ0xLX0RJViwgMHgwMn0sCisJe0JSSURHRSwgTTU2MDJfWEJfTUNVX0NMS19DVFJMLCAweGIwfSwKKwkvKnNlcXVlbmNlIDEqLworCXtCUklER0UsIE01NjAyX1hCX1NFTl9DTEtfRElWLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9TRU5fQ0xLX0NUUkwsIDB4YjB9LAorCXtCUklER0UsIE01NjAyX1hCX0FEQ19DVFJMLCAweGMwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9TRU5TT1JfVFlQRSwgMHgwZH0sCisKKwl7QlJJREdFLCBNNTYwMl9YQl9TRU5TT1JfQ1RSTCwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfQURDX0NUUkwsIDB4YzB9LAorCXtCUklER0UsIE01NjAyX1hCX1NFTlNPUl9UWVBFLCAweDBjfSwKKwkvKmVuZCBvZiBzZXF1ZW5jZSAxKi8KKworCS8qc2VxdWVuY2UgMiAoc2FtZSBhcyBzdG9wIHNlcXVlbmNlKSovCisJe1NFTlNPUiwgUE8xMDMwX1JFR19BVVRPQ1RSTDIsIDB4MjR9LAorCXtCUklER0UsIE01NjAyX1hCX0dQSU9fRElSLCAweDA1fSwKKwl7QlJJREdFLCBNNTYwMl9YQl9HUElPX0RBVCwgMHgwNH0sCisJe0JSSURHRSwgTTU2MDJfWEJfR1BJT19FTl9ILCAweDA2fSwKKwl7QlJJREdFLCBNNTYwMl9YQl9HUElPX0RJUl9ILCAweDA2fSwKKwl7QlJJREdFLCBNNTYwMl9YQl9HUElPX0RBVF9ILCAweDAyfSwKKworCXtCUklER0UsIE01NjAyX1hCX1NFTl9DTEtfRElWLCAweDA0fSwKKwl7QlJJREdFLCBNNTYwMl9YQl9TRU5fQ0xLX0NUUkwsIDB4YjB9LAorCS8qZW5kIG9mIHNlcXVlbmNlIDIqLworCisJLypzZXF1ZW5jZSA1Ki8KKwl7QlJJREdFLCBNNTYwMl9YQl9TRU5fQ0xLX0RJViwgMHgwNn0sCisJe0JSSURHRSwgTTU2MDJfWEJfU0VOX0NMS19DVFJMLCAweGIwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9BRENfQ1RSTCwgMHhjMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfU0VOU09SX1RZUEUsIDB4MGN9LAorCXtCUklER0UsIE01NjAyX1hCX0xJTkVfT0ZfRlJBTUVfSCwgMHg4MX0sCisJe0JSSURHRSwgTTU2MDJfWEJfUElYX09GX0xJTkVfSCwgMHg4Mn0sCisJe0JSSURHRSwgTTU2MDJfWEJfU0lHX0lOSSwgMHgwMX0sCisJe0JSSURHRSwgTTU2MDJfWEJfVlNZTkNfUEFSQSwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfVlNZTkNfUEFSQSwgMHgwMn0sCisJe0JSSURHRSwgTTU2MDJfWEJfVlNZTkNfUEFSQSwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfVlNZTkNfUEFSQSwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfVlNZTkNfUEFSQSwgMHgwMX0sCisJe0JSSURHRSwgTTU2MDJfWEJfVlNZTkNfUEFSQSwgMHhlY30sCisJe0JSSURHRSwgTTU2MDJfWEJfVlNZTkNfUEFSQSwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfVlNZTkNfUEFSQSwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfU0lHX0lOSSwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfU0lHX0lOSSwgMHgwMn0sCisJe0JSSURHRSwgTTU2MDJfWEJfSFNZTkNfUEFSQSwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfSFNZTkNfUEFSQSwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfSFNZTkNfUEFSQSwgMHgwMn0sCisJe0JSSURHRSwgTTU2MDJfWEJfSFNZTkNfUEFSQSwgMHg4N30sCisJe0JSSURHRSwgTTU2MDJfWEJfU0lHX0lOSSwgMHgwMH0sCisJLyplbmQgb2Ygc2VxdWVuY2UgNSovCisKKwkvKnNlcXVlbmNlIDIgc3RvcCAqLworCXtTRU5TT1IsIFBPMTAzMF9SRUdfQVVUT0NUUkwyLCAweDI0fSwKKworCXtCUklER0UsIE01NjAyX1hCX0dQSU9fRElSLCAweDA1fSwKKwl7QlJJREdFLCBNNTYwMl9YQl9HUElPX0RBVCwgMHgwNH0sCisJe0JSSURHRSwgTTU2MDJfWEJfR1BJT19FTl9ILCAweDA2fSwKKwl7QlJJREdFLCBNNTYwMl9YQl9HUElPX0RJUl9ILCAweDA2fSwKKwl7QlJJREdFLCBNNTYwMl9YQl9HUElPX0RBVF9ILCAweDAyfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9TRU5fQ0xLX0RJViwgMHgwNH0sCisJe0JSSURHRSwgTTU2MDJfWEJfU0VOX0NMS19DVFJMLCAweGIwfSwKKwkvKmVuZCBvZiBzZXF1ZW5jZSAyIHN0b3AgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBlbmQgb2YgaW5pdCAtIGJlZ2luIG9mIHN0YXJ0CisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworCS8qc2VxdWVuY2UgMyovCisJe0JSSURHRSwgTTU2MDJfWEJfU0VOX0NMS19ESVYsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX1NFTl9DTEtfQ1RSTCwgMHhiMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfQURDX0NUUkwsIDB4YzB9LAorCXtCUklER0UsIE01NjAyX1hCX1NFTlNPUl9UWVBFLCAweDBjfSwKKwkvKmVuZCBvZiBzZXF1ZW5jZSAzKi8KKwkvKnNlcXVlbmNlIDQqLworCXtCUklER0UsIE01NjAyX1hCX0dQSU9fRElSLCAweDA1fSwKKwl7QlJJREdFLCBNNTYwMl9YQl9HUElPX0RBVCwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfR1BJT19FTl9ILCAweDA2fSwKKwl7QlJJREdFLCBNNTYwMl9YQl9HUElPX0VOX0wsIDB4MDB9LAorCisJe1NFTlNPUiwgUE8xMDMwX1JFR19BVVRPQ1RSTDIsIDB4MDR9LAorCisJLyogU2V0IHRoZSB3aWR0aCB0byA3NTEgKi8KKwl7U0VOU09SLCBQTzEwMzBfUkVHX0ZSQU1FV0lEVEhfSCwgMHgwMn0sCisJe1NFTlNPUiwgUE8xMDMwX1JFR19GUkFNRVdJRFRIX0wsIDB4ZWZ9LAorCisJLyogU2V0IHRoZSBoZWlnaHQgdG8gNTQwICovCisJe1NFTlNPUiwgUE8xMDMwX1JFR19GUkFNRUhFSUdIVF9ILCAweDAyfSwKKwl7U0VOU09SLCBQTzEwMzBfUkVHX0ZSQU1FSEVJR0hUX0wsIDB4MWN9LAorCisJLyogU2V0IHRoZSB4IHdpbmRvdyB0byAxICovCisJe1NFTlNPUiwgUE8xMDMwX1JFR19XSU5ET1dYX0gsIDB4MDB9LAorCXtTRU5TT1IsIFBPMTAzMF9SRUdfV0lORE9XWF9MLCAweDAxfSwKKworCS8qIFNldCB0aGUgeSB3aW5kb3cgdG8gMSAqLworCXtTRU5TT1IsIFBPMTAzMF9SRUdfV0lORE9XWV9ILCAweDAwfSwKKwl7U0VOU09SLCBQTzEwMzBfUkVHX1dJTkRPV1lfTCwgMHgwMX0sCisKKwl7U0VOU09SLCBQTzEwMzBfUkVHX1dJTkRPV1dJRFRIX0gsIDB4MDJ9LAorCXtTRU5TT1IsIFBPMTAzMF9SRUdfV0lORE9XV0lEVEhfTCwgMHg4N30sCisJe1NFTlNPUiwgUE8xMDMwX1JFR19XSU5ET1dIRUlHSFRfSCwgMHgwMX0sCisJe1NFTlNPUiwgUE8xMDMwX1JFR19XSU5ET1dIRUlHSFRfTCwgMHhlM30sCisKKwl7U0VOU09SLCBQTzEwMzBfUkVHX09VVEZPUk1DVFJMMiwgMHgwNH0sCisJe1NFTlNPUiwgUE8xMDMwX1JFR19PVVRGT1JNQ1RSTDIsIDB4MDR9LAorCXtTRU5TT1IsIFBPMTAzMF9SRUdfQVVUT0NUUkwxLCAweDA4fSwKKwl7U0VOU09SLCBQTzEwMzBfUkVHX0NPTlRST0wyLCAweDAzfSwKKwl7U0VOU09SLCAweDIxLCAweDkwfSwKKwl7U0VOU09SLCBQTzEwMzBfUkVHX1lUQVJHRVQsIDB4NjB9LAorCXtTRU5TT1IsIDB4NTksIDB4MTN9LAorCXtTRU5TT1IsIFBPMTAzMF9SRUdfT1VURk9STUNUUkwxLCAweDQwfSwKKwl7U0VOU09SLCAweDVmLCAweDAwfSwKKwl7U0VOU09SLCAweDYwLCAweDgwfSwKKwl7U0VOU09SLCAweDc4LCAweDE0fSwKKwl7U0VOU09SLCAweDZmLCAweDAxfSwKKwl7U0VOU09SLCBQTzEwMzBfUkVHX0NPTlRST0wxLCAweDE4fSwKKwl7U0VOU09SLCBQTzEwMzBfUkVHX0dMT0JBTEdBSU5NQVgsIDB4MTR9LAorCXtTRU5TT1IsIDB4NjMsIDB4Mzh9LAorCXtTRU5TT1IsIDB4NjQsIDB4Mzh9LAorCXtTRU5TT1IsIFBPMTAzMF9SRUdfQ09OVFJPTDEsIDB4NTh9LAorCXtTRU5TT1IsIFBPMTAzMF9SRUdfUkVEX0dBSU4sIDB4MzB9LAorCXtTRU5TT1IsIFBPMTAzMF9SRUdfR1JFRU5fMV9HQUlOLCAweDMwfSwKKwl7U0VOU09SLCBQTzEwMzBfUkVHX0JMVUVfR0FJTiwgMHgzMH0sCisJe1NFTlNPUiwgUE8xMDMwX1JFR19HUkVFTl8yX0dBSU4sIDB4MzB9LAorCXtTRU5TT1IsIFBPMTAzMF9SRUdfR0MwLCAweDEwfSwKKwl7U0VOU09SLCBQTzEwMzBfUkVHX0dDMSwgMHgyMH0sCisJe1NFTlNPUiwgUE8xMDMwX1JFR19HQzIsIDB4NDB9LAorCXtTRU5TT1IsIFBPMTAzMF9SRUdfR0MzLCAweDYwfSwKKwl7U0VOU09SLCBQTzEwMzBfUkVHX0dDNCwgMHg4MH0sCisJe1NFTlNPUiwgUE8xMDMwX1JFR19HQzUsIDB4YTB9LAorCXtTRU5TT1IsIFBPMTAzMF9SRUdfR0M2LCAweGMwfSwKKwl7U0VOU09SLCBQTzEwMzBfUkVHX0dDNywgMHhmZn0sCisJLyplbmQgb2Ygc2VxdWVuY2UgNCovCisJLypzZXF1ZW5jZSA1Ki8KKwl7QlJJREdFLCBNNTYwMl9YQl9TRU5fQ0xLX0RJViwgMHgwNn0sCisJe0JSSURHRSwgTTU2MDJfWEJfU0VOX0NMS19DVFJMLCAweGIwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9BRENfQ1RSTCwgMHhjMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfU0VOU09SX1RZUEUsIDB4MGN9LAorCXtCUklER0UsIE01NjAyX1hCX0xJTkVfT0ZfRlJBTUVfSCwgMHg4MX0sCisJe0JSSURHRSwgTTU2MDJfWEJfUElYX09GX0xJTkVfSCwgMHg4Mn0sCisJe0JSSURHRSwgTTU2MDJfWEJfU0lHX0lOSSwgMHgwMX0sCisJe0JSSURHRSwgTTU2MDJfWEJfVlNZTkNfUEFSQSwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfVlNZTkNfUEFSQSwgMHgwMn0sCisJe0JSSURHRSwgTTU2MDJfWEJfVlNZTkNfUEFSQSwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfVlNZTkNfUEFSQSwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfVlNZTkNfUEFSQSwgMHgwMX0sCisJe0JSSURHRSwgTTU2MDJfWEJfVlNZTkNfUEFSQSwgMHhlY30sCisJe0JSSURHRSwgTTU2MDJfWEJfVlNZTkNfUEFSQSwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfVlNZTkNfUEFSQSwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfU0lHX0lOSSwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfU0lHX0lOSSwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfSFNZTkNfUEFSQSwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfSFNZTkNfUEFSQSwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfSFNZTkNfUEFSQSwgMHgwMn0sCisJe0JSSURHRSwgTTU2MDJfWEJfSFNZTkNfUEFSQSwgMHg3ZX0sCisJe0JSSURHRSwgTTU2MDJfWEJfU0lHX0lOSSwgMHgwMH0sCisJLyplbmQgb2Ygc2VxdWVuY2UgNSovCisKKwkvKnNlcXVlbmNlIDYqLworCS8qIENoYW5naW5nIDQwIGluIGYwIHRoZSBpbWFnZSBiZWNvbWVzIGdyZWVuIGluIGJheWVyIG1vZGUgYW5kIHJlZCBpbgorCSAqIHJnYiBtb2RlICovCisJe1NFTlNPUiwgUE8xMDMwX1JFR19SRURfR0FJTiwgUE8xMDMwX1JFRF9HQUlOX0RFRkFVTFR9LAorCS8qIGluIGNoYW5naW5nIDQwIGluIGYwIHRoZSBpbWFnZSBiZWNvbWVzIGdyZWVuIGluIGJheWVyIG1vZGUgYW5kIHJlZCBpbgorCSAqIHJnYiBtb2RlICovCisJe1NFTlNPUiwgUE8xMDMwX1JFR19CTFVFX0dBSU4sIFBPMTAzMF9CTFVFX0dBSU5fREVGQVVMVH0sCisKKwkvKiB3aXRoIGEgdmVyeSBsb3cgbGlnaHRlZCBlbnZpcm9ubWVudCBpbmNyZWFzZSB0aGUgZXhwb3N1cmUgYnV0CisJICogZGVjcmVhc2UgdGhlIEZQUyAoRnJhbWUgUGVyIFNlY29uZCkgKi8KKwl7QlJJREdFLCBNNTYwMl9YQl9TRU5fQ0xLX0RJViwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfU0VOX0NMS19DVFJMLCAweGIwfSwKKworCS8qIENvbnRyb2xzIGhpZ2ggZXhwb3N1cmUgbW9yZSB0aGFuIFNFTlNPUl9MT1dfRVhQT1NVUkUsIHVzZSBvbmx5IGluCisJICogbG93IGxpZ2h0ZWQgZW52aXJvbm1lbnQgKGYwIGlzIG1vcmUgdGhhbiBmZiA/KSovCisJe1NFTlNPUiwgUE8xMDMwX1JFR19JTlRFR0xJTkVTX0gsICgoUE8xMDMwX0VYUE9TVVJFX0RFRkFVTFQgPj4gMikKKwkJJiAweGZmKX0sCisKKwkvKiBDb250cm9scyBtaWRkbGUgZXhwb3N1cmUsIHVzZSBvbmx5IGluIGhpZ2ggbGlnaHRlZCBlbnZpcm9ubWVudCAqLworCXtTRU5TT1IsIFBPMTAzMF9SRUdfSU5URUdMSU5FU19NLCBQTzEwMzBfRVhQT1NVUkVfREVGQVVMVCAmIDB4ZmZ9LAorCisJLyogQ29udHJvbHMgY2xhcml0eSAobm90IHN1cmUpICovCisJe1NFTlNPUiwgUE8xMDMwX1JFR19JTlRFR0xJTkVTX0wsIDB4MDB9LAorCS8qIENvbnRyb2xzIGdhaW4gKHRoZSBpbWFnZSBpcyBtb3JlIGxpZ2h0ZWQpICovCisJe1NFTlNPUiwgUE8xMDMwX1JFR19HTE9CQUxHQUlOLCBQTzEwMzBfR0xPQkFMX0dBSU5fREVGQVVMVH0sCisKKwkvKiBTZXRzIHRoZSB3aWR0aCAqLworCXtTRU5TT1IsIFBPMTAzMF9SRUdfRlJBTUVXSURUSF9ILCAweDAyfSwKKwl7U0VOU09SLCBQTzEwMzBfUkVHX0ZSQU1FV0lEVEhfTCwgMHhlZn0KKwkvKmVuZCBvZiBzZXF1ZW5jZSA2Ki8KK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9tNTYwMi9tNTYwMl9zNWs0YWEuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvbTU2MDIvbTU2MDJfczVrNGFhLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTRiMWVhYwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvbTU2MDIvbTU2MDJfczVrNGFhLmMKQEAgLTAsMCArMSw0NjMgQEAKKy8qCisgKiBEcml2ZXIgZm9yIHRoZSBzNWs0YWEgc2Vuc29yCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA4IEVyaWsgQW5kcsOpbgorICogQ29weXJpZ2h0IChDKSAyMDA3IElseWVzIEdvdXRhLiBCYXNlZCBvbiB0aGUgbTU2MDN4IExpbnV4IERyaXZlciBQcm9qZWN0LgorICogQ29weXJpZ2h0IChDKSAyMDA1IG01NjAzeCBMaW51eCBEcml2ZXIgUHJvamVjdCA8bTU2MDJAeDNuZy5jb20uYnI+CisgKgorICogUG9ydGlvbnMgb2YgY29kZSB0byBVU0IgaW50ZXJmYWNlIGFuZCBBTGkgZHJpdmVyIHNvZnR3YXJlLAorICogQ29weXJpZ2h0IChjKSAyMDA2IFdpbGxlbSBEdWlua2VyCisgKiB2NGwyIGludGVyZmFjZSBtb2RlbGVkIGFmdGVyIHRoZSBWNEwyIGRyaXZlcgorICogZm9yIFNOOUMxMHggUEMgQ2FtZXJhIENvbnRyb2xsZXJzCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB2ZXJzaW9uIDIuCisgKgorICovCisKKyNpbmNsdWRlICJtNTYwMl9zNWs0YWEuaCIKKworaW50IHM1azRhYV9wcm9iZShzdHJ1Y3Qgc2QgKnNkKQoreworCXU4IHByb2RfaWRbNl0gPSB7MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH07CisJY29uc3QgdTggZXhwZWN0ZWRfcHJvZF9pZFs2XSA9IHsweDAwLCAweDEwLCAweDAwLCAweDRiLCAweDMzLCAweDc1fTsKKwlpbnQgaSwgZXJyID0gMDsKKworCWlmIChmb3JjZV9zZW5zb3IpIHsKKwkJaWYgKGZvcmNlX3NlbnNvciA9PSBTNUs0QUFfU0VOU09SKSB7CisJCQlpbmZvKCJGb3JjaW5nIGEgJXMgc2Vuc29yIiwgczVrNGFhLm5hbWUpOworCQkJZ290byBzZW5zb3JfZm91bmQ7CisJCX0KKwkJLyogSWYgd2Ugd2FudCB0byBmb3JjZSBhbm90aGVyIHNlbnNvciwgZG9uJ3QgdHJ5IHRvIHByb2JlIHRoaXMKKwkJICogb25lICovCisJCXJldHVybiAtRU5PREVWOworCX0KKworCWluZm8oIlByb2JpbmcgZm9yIGEgczVrNGFhIHNlbnNvciIpOworCisJLyogUHJlaW5pdCB0aGUgc2Vuc29yICovCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocHJlaW5pdF9zNWs0YWEpICYmICFlcnI7IGkrKykgeworCQl1OCBkYXRhWzJdID0gezB4MDAsIDB4MDB9OworCisJCXN3aXRjaCAocHJlaW5pdF9zNWs0YWFbaV1bMF0pIHsKKwkJY2FzZSBCUklER0U6CisJCQllcnIgPSBtNTYwMl93cml0ZV9icmlkZ2Uoc2QsCisJCQkJCQkgcHJlaW5pdF9zNWs0YWFbaV1bMV0sCisJCQkJCQkgcHJlaW5pdF9zNWs0YWFbaV1bMl0pOworCQkJYnJlYWs7CisKKwkJY2FzZSBTRU5TT1I6CisJCQlkYXRhWzBdID0gcHJlaW5pdF9zNWs0YWFbaV1bMl07CisJCQllcnIgPSBzNWs0YWFfd3JpdGVfc2Vuc29yKHNkLAorCQkJCQkJICBwcmVpbml0X3M1azRhYVtpXVsxXSwKKwkJCQkJCSAgZGF0YSwgMSk7CisJCQlicmVhazsKKworCQljYXNlIFNFTlNPUl9MT05HOgorCQkJZGF0YVswXSA9IHByZWluaXRfczVrNGFhW2ldWzJdOworCQkJZGF0YVsxXSA9IHByZWluaXRfczVrNGFhW2ldWzNdOworCQkJZXJyID0gczVrNGFhX3dyaXRlX3NlbnNvcihzZCwKKwkJCQkJCSAgcHJlaW5pdF9zNWs0YWFbaV1bMV0sCisJCQkJCQkgIGRhdGEsIDIpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlpbmZvKCJJbnZhbGlkIHN0cmVhbSBjb21tYW5kLCBleGl0aW5nIGluaXQiKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJfQorCisJLyogVGVzdCBzb21lIHJlZ2lzdGVycywgYnV0IHdlIGRvbid0IGtub3cgdGhlaXIgZXhhY3QgbWVhbmluZyB5ZXQgKi8KKwlpZiAoczVrNGFhX3JlYWRfc2Vuc29yKHNkLCAweDAwLCBwcm9kX2lkLCBzaXplb2YocHJvZF9pZCkpKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWlmIChtZW1jbXAocHJvZF9pZCwgZXhwZWN0ZWRfcHJvZF9pZCwgc2l6ZW9mKHByb2RfaWQpKSkKKwkJcmV0dXJuIC1FTk9ERVY7CisJZWxzZQorCQlpbmZvKCJEZXRlY3RlZCBhIHM1azRhYSBzZW5zb3IiKTsKK3NlbnNvcl9mb3VuZDoKKwlzZC0+Z3NwY2FfZGV2LmNhbS5jYW1fbW9kZSA9IHM1azRhYS5tb2RlczsKKwlzZC0+Z3NwY2FfZGV2LmNhbS5ubW9kZXMgPSBzNWs0YWEubm1vZGVzOworCXNkLT5kZXNjLT5jdHJscyA9IHM1azRhYS5jdHJsczsKKwlzZC0+ZGVzYy0+bmN0cmxzID0gczVrNGFhLm5jdHJsczsKKworCXJldHVybiAwOworfQorCitpbnQgczVrNGFhX3JlYWRfc2Vuc29yKHN0cnVjdCBzZCAqc2QsIGNvbnN0IHU4IGFkZHJlc3MsCisJCSAgICAgICB1OCAqaTJjX2RhdGEsIGNvbnN0IHU4IGxlbikKK3sKKwlpbnQgZXJyLCBpOworCisJZG8geworCQllcnIgPSBtNTYwMl9yZWFkX2JyaWRnZShzZCwgTTU2MDJfWEJfSTJDX1NUQVRVUywgaTJjX2RhdGEpOworCX0gd2hpbGUgKCgqaTJjX2RhdGEgJiBJMkNfQlVTWSkgJiYgIWVycik7CisJaWYgKGVyciA8IDApCisJCWdvdG8gb3V0OworCisJZXJyID0gbTU2MDJfd3JpdGVfYnJpZGdlKHNkLCBNNTYwMl9YQl9JMkNfREVWX0FERFIsCisJCQkJIHNkLT5zZW5zb3ItPmkyY19zbGF2ZV9pZCk7CisJaWYgKGVyciA8IDApCisJCWdvdG8gb3V0OworCisJZXJyID0gbTU2MDJfd3JpdGVfYnJpZGdlKHNkLCBNNTYwMl9YQl9JMkNfUkVHX0FERFIsIGFkZHJlc3MpOworCWlmIChlcnIgPCAwKQorCQlnb3RvIG91dDsKKworCWVyciA9IG01NjAyX3dyaXRlX2JyaWRnZShzZCwgTTU2MDJfWEJfSTJDX0NUUkwsIDB4MTggKyBsZW4pOworCWlmIChlcnIgPCAwKQorCQlnb3RvIG91dDsKKworCWRvIHsKKwkJZXJyID0gbTU2MDJfcmVhZF9icmlkZ2Uoc2QsIE01NjAyX1hCX0kyQ19TVEFUVVMsIGkyY19kYXRhKTsKKwl9IHdoaWxlICgoKmkyY19kYXRhICYgSTJDX0JVU1kpICYmICFlcnIpOworCWlmIChlcnIgPCAwKQorCQlnb3RvIG91dDsKKworCWZvciAoaSA9IDA7IChpIDwgbGVuKSAmICFlcnI7IGkrKykgeworCQllcnIgPSBtNTYwMl9yZWFkX2JyaWRnZShzZCwgTTU2MDJfWEJfSTJDX0RBVEEsICYoaTJjX2RhdGFbaV0pKTsKKworCQlQREVCVUcoRF9DT05GLCAiUmVhZGluZyBzZW5zb3IgcmVnaXN0ZXIgIgorCQkJCSAgIjB4JXggY29udGFpbmluZyAweCV4ICIsIGFkZHJlc3MsICppMmNfZGF0YSk7CisJfQorb3V0OgorCXJldHVybiAoZXJyIDwgMCkgPyBlcnIgOiAwOworfQorCitpbnQgczVrNGFhX3dyaXRlX3NlbnNvcihzdHJ1Y3Qgc2QgKnNkLCBjb25zdCB1OCBhZGRyZXNzLAorCQkJdTggKmkyY19kYXRhLCBjb25zdCB1OCBsZW4pCit7CisJaW50IGVyciwgaTsKKwl1OCAqcDsKKwlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiA9IHNkLT5nc3BjYV9kZXYuZGV2OworCV9fdTggKmJ1ZiA9IHNkLT5nc3BjYV9kZXYudXNiX2J1ZjsKKworCS8qIE5vIHNlbnNvciB3aXRoIGEgZGF0YSB3aWR0aCBsYXJnZXIgdGhhbiAxNiBiaXRzIGhhcyB5ZXQgYmVlbiBzZWVuICovCisJaWYgKGxlbiA+IDIgfHwgIWxlbikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwltZW1jcHkoYnVmLCBzZW5zb3JfdXJiX3NrZWxldG9uLAorCSAgICAgICBzaXplb2Yoc2Vuc29yX3VyYl9za2VsZXRvbikpOworCisJYnVmWzExXSA9IHNkLT5zZW5zb3ItPmkyY19zbGF2ZV9pZDsKKwlidWZbMTVdID0gYWRkcmVzczsKKworCS8qIFNwZWNpYWwgY2FzZSBsYXJnZXIgc2Vuc29yIHdyaXRlcyAqLworCXAgPSBidWYgKyAxNjsKKworCS8qIENvcHkgYSBmb3VyIGJ5dGUgd3JpdGUgc2VxdWVuY2UgZm9yIGVhY2ggYnl0ZSB0byBiZSB3cml0dGVuIHRvICovCisJZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CisJCW1lbWNweShwLCBzZW5zb3JfdXJiX3NrZWxldG9uICsgMTYsIDQpOworCQlwWzNdID0gaTJjX2RhdGFbaV07CisJCXAgKz0gNDsKKwkJUERFQlVHKERfQ09ORiwgIldyaXRpbmcgc2Vuc29yIHJlZ2lzdGVyIDB4JXggd2l0aCAweCV4IiwKKwkJICAgICAgIGFkZHJlc3MsIGkyY19kYXRhW2ldKTsKKwl9CisKKwkvKiBDb3B5IHRoZSB0YWlsZXIgKi8KKwltZW1jcHkocCwgc2Vuc29yX3VyYl9za2VsZXRvbiArIDIwLCA0KTsKKworCS8qIFNldCB0aGUgdG90YWwgbGVuZ3RoICovCisJcFszXSA9IDB4MTAgKyBsZW47CisKKwllcnIgPSB1c2JfY29udHJvbF9tc2codWRldiwgdXNiX3NuZGN0cmxwaXBlKHVkZXYsIDApLAorCQkJICAgICAgMHgwNCwgMHg0MCwgMHgxOSwKKwkJCSAgICAgIDB4MDAwMCwgYnVmLAorCQkJICAgICAgMjAgKyBsZW4gKiA0LCBNNTYwMl9VUkJfTVNHX1RJTUVPVVQpOworCisJcmV0dXJuIChlcnIgPCAwKSA/IGVyciA6IDA7Cit9CisKK2ludCBzNWs0YWFfaW5pdChzdHJ1Y3Qgc2QgKnNkKQoreworCWludCBpLCBlcnIgPSAwOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoaW5pdF9zNWs0YWEpICYmICFlcnI7IGkrKykgeworCQl1OCBkYXRhWzJdID0gezB4MDAsIDB4MDB9OworCisJCXN3aXRjaCAoaW5pdF9zNWs0YWFbaV1bMF0pIHsKKwkJY2FzZSBCUklER0U6CisJCQllcnIgPSBtNTYwMl93cml0ZV9icmlkZ2Uoc2QsCisJCQkJaW5pdF9zNWs0YWFbaV1bMV0sCisJCQkJaW5pdF9zNWs0YWFbaV1bMl0pOworCQkJYnJlYWs7CisKKwkJY2FzZSBTRU5TT1I6CisJCQlkYXRhWzBdID0gaW5pdF9zNWs0YWFbaV1bMl07CisJCQllcnIgPSBzNWs0YWFfd3JpdGVfc2Vuc29yKHNkLAorCQkJCWluaXRfczVrNGFhW2ldWzFdLCBkYXRhLCAxKTsKKwkJCWJyZWFrOworCisJCWNhc2UgU0VOU09SX0xPTkc6CisJCQlkYXRhWzBdID0gaW5pdF9zNWs0YWFbaV1bMl07CisJCQlkYXRhWzFdID0gaW5pdF9zNWs0YWFbaV1bM107CisJCQllcnIgPSBzNWs0YWFfd3JpdGVfc2Vuc29yKHNkLAorCQkJCWluaXRfczVrNGFhW2ldWzFdLCBkYXRhLCAyKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJaW5mbygiSW52YWxpZCBzdHJlYW0gY29tbWFuZCwgZXhpdGluZyBpbml0Iik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCX0KKworCWlmIChkdW1wX3NlbnNvcikKKwkJczVrNGFhX2R1bXBfcmVnaXN0ZXJzKHNkKTsKKworCWlmICghZXJyICYmIGRtaV9jaGVja19zeXN0ZW0oczVrNGFhX3ZmbGlwX2RtaV90YWJsZSkpIHsKKwkJdTggZGF0YSA9IDB4MDI7CisJCWluZm8oInZlcnRpY2FsIGZsaXAgcXVpcmsgYWN0aXZlIik7CisJCXM1azRhYV93cml0ZV9zZW5zb3Ioc2QsIFM1SzRBQV9QQUdFX01BUCwgJmRhdGEsIDEpOworCQlzNWs0YWFfcmVhZF9zZW5zb3Ioc2QsIFM1SzRBQV9SRUFEX01PREUsICZkYXRhLCAxKTsKKwkJZGF0YSB8PSBTNUs0QUFfUk1fVl9GTElQOworCQlkYXRhICY9IH5TNUs0QUFfUk1fSF9GTElQOworCQlzNWs0YWFfd3JpdGVfc2Vuc29yKHNkLCBTNUs0QUFfUkVBRF9NT0RFLCAmZGF0YSwgMSk7CisKKwkJLyogRGVjcmVtZW50IENPTFNUQVJUIHRvIHByZXNlcnZlIGNvbG9yIG9yZGVyIChCR0dSKSAqLworCQlzNWs0YWFfcmVhZF9zZW5zb3Ioc2QsIFM1SzRBQV9DT0xTVEFSVF9MTywgJmRhdGEsIDEpOworCQlkYXRhLS07CisJCXM1azRhYV93cml0ZV9zZW5zb3Ioc2QsIFM1SzRBQV9DT0xTVEFSVF9MTywgJmRhdGEsIDEpOworCisJCS8qIEluY3JlbWVudCBST1dTVEFSVCB0byBwcmVzZXJ2ZSBjb2xvciBvcmRlciAoQkdHUikgKi8KKwkJczVrNGFhX3JlYWRfc2Vuc29yKHNkLCBTNUs0QUFfUk9XU1RBUlRfTE8sICZkYXRhLCAxKTsKKwkJZGF0YSsrOworCQlzNWs0YWFfd3JpdGVfc2Vuc29yKHNkLCBTNUs0QUFfUk9XU1RBUlRfTE8sICZkYXRhLCAxKTsKKwl9CisKKwlyZXR1cm4gKGVyciA8IDApID8gZXJyIDogMDsKK30KKworaW50IHM1azRhYV9wb3dlcl9kb3duKHN0cnVjdCBzZCAqc2QpCit7CisJcmV0dXJuIDA7Cit9CisKK2ludCBzNWs0YWFfZ2V0X2V4cG9zdXJlKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCkKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisJdTggZGF0YSA9IFM1SzRBQV9QQUdFX01BUF8yOworCWludCBlcnI7CisKKwllcnIgPSBzNWs0YWFfd3JpdGVfc2Vuc29yKHNkLCBTNUs0QUFfUEFHRV9NQVAsICZkYXRhLCAxKTsKKwlpZiAoZXJyIDwgMCkKKwkJZ290byBvdXQ7CisKKwllcnIgPSBzNWs0YWFfcmVhZF9zZW5zb3Ioc2QsIFM1SzRBQV9FWFBPU1VSRV9ISSwgJmRhdGEsIDEpOworCWlmIChlcnIgPCAwKQorCQlnb3RvIG91dDsKKworCSp2YWwgPSBkYXRhIDw8IDg7CisJZXJyID0gczVrNGFhX3JlYWRfc2Vuc29yKHNkLCBTNUs0QUFfRVhQT1NVUkVfTE8sICZkYXRhLCAxKTsKKwkqdmFsIHw9IGRhdGE7CisJUERFQlVHKERfVjRMMiwgIlJlYWQgZXhwb3N1cmUgJWQiLCAqdmFsKTsKK291dDoKKwlyZXR1cm4gKGVyciA8IDApID8gZXJyIDogMDsKK30KKworaW50IHM1azRhYV9zZXRfZXhwb3N1cmUoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCXU4IGRhdGEgPSBTNUs0QUFfUEFHRV9NQVBfMjsKKwlpbnQgZXJyOworCisJUERFQlVHKERfVjRMMiwgIlNldCBleHBvc3VyZSB0byAlZCIsIHZhbCk7CisJZXJyID0gczVrNGFhX3dyaXRlX3NlbnNvcihzZCwgUzVLNEFBX1BBR0VfTUFQLCAmZGF0YSwgMSk7CisJaWYgKGVyciA8IDApCisJCWdvdG8gb3V0OworCWRhdGEgPSAodmFsID4+IDgpICYgMHhmZjsKKwllcnIgPSBzNWs0YWFfd3JpdGVfc2Vuc29yKHNkLCBTNUs0QUFfRVhQT1NVUkVfSEksICZkYXRhLCAxKTsKKwlpZiAoZXJyIDwgMCkKKwkJZ290byBvdXQ7CisJZGF0YSA9IHZhbCAmIDB4ZmY7CisJZXJyID0gczVrNGFhX3dyaXRlX3NlbnNvcihzZCwgUzVLNEFBX0VYUE9TVVJFX0xPLCAmZGF0YSwgMSk7CitvdXQ6CisJcmV0dXJuIChlcnIgPCAwKSA/IGVyciA6IDA7Cit9CisKK2ludCBzNWs0YWFfZ2V0X3ZmbGlwKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCkKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisJdTggZGF0YSA9IFM1SzRBQV9QQUdFX01BUF8yOworCWludCBlcnI7CisKKwllcnIgPSBzNWs0YWFfd3JpdGVfc2Vuc29yKHNkLCBTNUs0QUFfUEFHRV9NQVAsICZkYXRhLCAxKTsKKwlpZiAoZXJyIDwgMCkKKwkJZ290byBvdXQ7CisKKwllcnIgPSBzNWs0YWFfcmVhZF9zZW5zb3Ioc2QsIFM1SzRBQV9QQUdFX01BUCwgJmRhdGEsIDEpOworCSp2YWwgPSAoZGF0YSAmIFM1SzRBQV9STV9WX0ZMSVApID4+IDc7CisJUERFQlVHKERfVjRMMiwgIlJlYWQgdmVydGljYWwgZmxpcCAlZCIsICp2YWwpOworCitvdXQ6CisJcmV0dXJuIChlcnIgPCAwKSA/IGVyciA6IDA7Cit9CisKK2ludCBzNWs0YWFfc2V0X3ZmbGlwKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKwl1OCBkYXRhID0gUzVLNEFBX1BBR0VfTUFQXzI7CisJaW50IGVycjsKKworCVBERUJVRyhEX1Y0TDIsICJTZXQgdmVydGljYWwgZmxpcCB0byAlZCIsIHZhbCk7CisJZXJyID0gczVrNGFhX3dyaXRlX3NlbnNvcihzZCwgUzVLNEFBX1BBR0VfTUFQLCAmZGF0YSwgMSk7CisJaWYgKGVyciA8IDApCisJCWdvdG8gb3V0OworCWVyciA9IHM1azRhYV93cml0ZV9zZW5zb3Ioc2QsIFM1SzRBQV9SRUFEX01PREUsICZkYXRhLCAxKTsKKwlpZiAoZXJyIDwgMCkKKwkJZ290byBvdXQ7CisJZGF0YSA9ICgoZGF0YSAmIH5TNUs0QUFfUk1fVl9GTElQKQorCQkJfCAoKHZhbCAmIDB4MDEpIDw8IDcpKTsKKwllcnIgPSBzNWs0YWFfd3JpdGVfc2Vuc29yKHNkLCBTNUs0QUFfUkVBRF9NT0RFLCAmZGF0YSwgMSk7CisJaWYgKGVyciA8IDApCisJCWdvdG8gb3V0OworCisJaWYgKHZhbCkgeworCQllcnIgPSBzNWs0YWFfcmVhZF9zZW5zb3Ioc2QsIFM1SzRBQV9ST1dTVEFSVF9MTywgJmRhdGEsIDEpOworCQlpZiAoZXJyIDwgMCkKKwkJCWdvdG8gb3V0OworCisJCWRhdGErKzsKKwkJZXJyID0gczVrNGFhX3dyaXRlX3NlbnNvcihzZCwgUzVLNEFBX1JPV1NUQVJUX0xPLCAmZGF0YSwgMSk7CisJfSBlbHNlIHsKKwkJZXJyID0gczVrNGFhX3JlYWRfc2Vuc29yKHNkLCBTNUs0QUFfUk9XU1RBUlRfTE8sICZkYXRhLCAxKTsKKwkJaWYgKGVyciA8IDApCisJCQlnb3RvIG91dDsKKworCQlkYXRhLS07CisJCWVyciA9IHM1azRhYV93cml0ZV9zZW5zb3Ioc2QsIFM1SzRBQV9ST1dTVEFSVF9MTywgJmRhdGEsIDEpOworCX0KK291dDoKKwlyZXR1cm4gKGVyciA8IDApID8gZXJyIDogMDsKK30KKworaW50IHM1azRhYV9nZXRfaGZsaXAoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKwl1OCBkYXRhID0gUzVLNEFBX1BBR0VfTUFQXzI7CisJaW50IGVycjsKKworCWVyciA9IHM1azRhYV93cml0ZV9zZW5zb3Ioc2QsIFM1SzRBQV9QQUdFX01BUCwgJmRhdGEsIDEpOworCWlmIChlcnIgPCAwKQorCQlnb3RvIG91dDsKKworCWVyciA9IHM1azRhYV9yZWFkX3NlbnNvcihzZCwgUzVLNEFBX1BBR0VfTUFQLCAmZGF0YSwgMSk7CisJKnZhbCA9IChkYXRhICYgUzVLNEFBX1JNX0hfRkxJUCkgPj4gNjsKKwlQREVCVUcoRF9WNEwyLCAiUmVhZCBob3Jpem9udGFsIGZsaXAgJWQiLCAqdmFsKTsKK291dDoKKwlyZXR1cm4gKGVyciA8IDApID8gZXJyIDogMDsKK30KKworaW50IHM1azRhYV9zZXRfaGZsaXAoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCXU4IGRhdGEgPSBTNUs0QUFfUEFHRV9NQVBfMjsKKwlpbnQgZXJyOworCisJUERFQlVHKERfVjRMMiwgIlNldCBob3Jpem9udGFsIGZsaXAgdG8gJWQiLAorCSAgICAgICB2YWwpOworCWVyciA9IHM1azRhYV93cml0ZV9zZW5zb3Ioc2QsIFM1SzRBQV9QQUdFX01BUCwgJmRhdGEsIDEpOworCWlmIChlcnIgPCAwKQorCQlnb3RvIG91dDsKKwllcnIgPSBzNWs0YWFfd3JpdGVfc2Vuc29yKHNkLCBTNUs0QUFfUkVBRF9NT0RFLCAmZGF0YSwgMSk7CisJaWYgKGVyciA8IDApCisJCWdvdG8gb3V0OworCisJZGF0YSA9ICgoZGF0YSAmIH5TNUs0QUFfUk1fSF9GTElQKSB8ICgodmFsICYgMHgwMSkgPDwgNikpOworCWVyciA9IHM1azRhYV93cml0ZV9zZW5zb3Ioc2QsIFM1SzRBQV9SRUFEX01PREUsICZkYXRhLCAxKTsKKwlpZiAoZXJyIDwgMCkKKwkJZ290byBvdXQ7CisKKwlpZiAodmFsKSB7CisJCWVyciA9IHM1azRhYV9yZWFkX3NlbnNvcihzZCwgUzVLNEFBX0NPTFNUQVJUX0xPLCAmZGF0YSwgMSk7CisJCWlmIChlcnIgPCAwKQorCQkJZ290byBvdXQ7CisJCWRhdGErKzsKKwkJZXJyID0gczVrNGFhX3dyaXRlX3NlbnNvcihzZCwgUzVLNEFBX0NPTFNUQVJUX0xPLCAmZGF0YSwgMSk7CisJCWlmIChlcnIgPCAwKQorCQkJZ290byBvdXQ7CisJfSBlbHNlIHsKKwkJZXJyID0gczVrNGFhX3JlYWRfc2Vuc29yKHNkLCBTNUs0QUFfQ09MU1RBUlRfTE8sICZkYXRhLCAxKTsKKwkJaWYgKGVyciA8IDApCisJCQlnb3RvIG91dDsKKwkJZGF0YS0tOworCQllcnIgPSBzNWs0YWFfd3JpdGVfc2Vuc29yKHNkLCBTNUs0QUFfQ09MU1RBUlRfTE8sICZkYXRhLCAxKTsKKwl9CitvdXQ6CisJcmV0dXJuIChlcnIgPCAwKSA/IGVyciA6IDA7Cit9CisKK2ludCBzNWs0YWFfZ2V0X2dhaW4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKwl1OCBkYXRhID0gUzVLNEFBX1BBR0VfTUFQXzI7CisJaW50IGVycjsKKworCWVyciA9IHM1azRhYV93cml0ZV9zZW5zb3Ioc2QsIFM1SzRBQV9QQUdFX01BUCwgJmRhdGEsIDEpOworCWlmIChlcnIgPCAwKQorCQlnb3RvIG91dDsKKworCWVyciA9IHM1azRhYV9yZWFkX3NlbnNvcihzZCwgUzVLNEFBX0dBSU5fMiwgJmRhdGEsIDEpOworCSp2YWwgPSBkYXRhOworCVBERUJVRyhEX1Y0TDIsICJSZWFkIGdhaW4gJWQiLCAqdmFsKTsKKworb3V0OgorCXJldHVybiAoZXJyIDwgMCkgPyBlcnIgOiAwOworfQorCitpbnQgczVrNGFhX3NldF9nYWluKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKwl1OCBkYXRhID0gUzVLNEFBX1BBR0VfTUFQXzI7CisJaW50IGVycjsKKworCVBERUJVRyhEX1Y0TDIsICJTZXQgZ2FpbiB0byAlZCIsIHZhbCk7CisJZXJyID0gczVrNGFhX3dyaXRlX3NlbnNvcihzZCwgUzVLNEFBX1BBR0VfTUFQLCAmZGF0YSwgMSk7CisJaWYgKGVyciA8IDApCisJCWdvdG8gb3V0OworCisJZGF0YSA9IHZhbCAmIDB4ZmY7CisJZXJyID0gczVrNGFhX3dyaXRlX3NlbnNvcihzZCwgUzVLNEFBX0dBSU5fMiwgJmRhdGEsIDEpOworCitvdXQ6CisJcmV0dXJuIChlcnIgPCAwKSA/IGVyciA6IDA7Cit9CisKK3ZvaWQgczVrNGFhX2R1bXBfcmVnaXN0ZXJzKHN0cnVjdCBzZCAqc2QpCit7CisJaW50IGFkZHJlc3M7CisJdTggcGFnZSwgb2xkX3BhZ2U7CisJczVrNGFhX3JlYWRfc2Vuc29yKHNkLCBTNUs0QUFfUEFHRV9NQVAsICZvbGRfcGFnZSwgMSk7CisJZm9yIChwYWdlID0gMDsgcGFnZSA8IDE2OyBwYWdlKyspIHsKKwkJczVrNGFhX3dyaXRlX3NlbnNvcihzZCwgUzVLNEFBX1BBR0VfTUFQLCAmcGFnZSwgMSk7CisJCWluZm8oIkR1bXBpbmcgdGhlIHM1azRhYSByZWdpc3RlciBzdGF0ZSBmb3IgcGFnZSAweCV4IiwgcGFnZSk7CisJCWZvciAoYWRkcmVzcyA9IDA7IGFkZHJlc3MgPD0gMHhmZjsgYWRkcmVzcysrKSB7CisJCQl1OCB2YWx1ZSA9IDA7CisJCQlzNWs0YWFfcmVhZF9zZW5zb3Ioc2QsIGFkZHJlc3MsICZ2YWx1ZSwgMSk7CisJCQlpbmZvKCJyZWdpc3RlciAweCV4IGNvbnRhaW5zIDB4JXgiLAorCQkJICAgICBhZGRyZXNzLCB2YWx1ZSk7CisJCX0KKwl9CisJaW5mbygiczVrNGFhIHJlZ2lzdGVyIHN0YXRlIGR1bXAgY29tcGxldGUiKTsKKworCWZvciAocGFnZSA9IDA7IHBhZ2UgPCAxNjsgcGFnZSsrKSB7CisJCXM1azRhYV93cml0ZV9zZW5zb3Ioc2QsIFM1SzRBQV9QQUdFX01BUCwgJnBhZ2UsIDEpOworCQlpbmZvKCJQcm9iaW5nIGZvciB3aGljaCByZWdpc3RlcnMgdGhhdCBhcmUgIgorCQkgICAgICJyZWFkL3dyaXRlIGZvciBwYWdlIDB4JXgiLCBwYWdlKTsKKwkJZm9yIChhZGRyZXNzID0gMDsgYWRkcmVzcyA8PSAweGZmOyBhZGRyZXNzKyspIHsKKwkJCXU4IG9sZF92YWx1ZSwgY3RybF92YWx1ZSwgdGVzdF92YWx1ZSA9IDB4ZmY7CisKKwkJCXM1azRhYV9yZWFkX3NlbnNvcihzZCwgYWRkcmVzcywgJm9sZF92YWx1ZSwgMSk7CisJCQlzNWs0YWFfd3JpdGVfc2Vuc29yKHNkLCBhZGRyZXNzLCAmdGVzdF92YWx1ZSwgMSk7CisJCQlzNWs0YWFfcmVhZF9zZW5zb3Ioc2QsIGFkZHJlc3MsICZjdHJsX3ZhbHVlLCAxKTsKKworCQkJaWYgKGN0cmxfdmFsdWUgPT0gdGVzdF92YWx1ZSkKKwkJCQlpbmZvKCJyZWdpc3RlciAweCV4IGlzIHdyaXRlYWJsZSIsIGFkZHJlc3MpOworCQkJZWxzZQorCQkJCWluZm8oInJlZ2lzdGVyIDB4JXggaXMgcmVhZCBvbmx5IiwgYWRkcmVzcyk7CisKKwkJCS8qIFJlc3RvcmUgb3JpZ2luYWwgdmFsdWUgKi8KKwkJCXM1azRhYV93cml0ZV9zZW5zb3Ioc2QsIGFkZHJlc3MsICZvbGRfdmFsdWUsIDEpOworCQl9CisJfQorCWluZm8oIlJlYWQvd3JpdGUgcmVnaXN0ZXIgcHJvYmluZyBjb21wbGV0ZSIpOworCXM1azRhYV93cml0ZV9zZW5zb3Ioc2QsIFM1SzRBQV9QQUdFX01BUCwgJm9sZF9wYWdlLCAxKTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvbTU2MDIvbTU2MDJfczVrNGFhLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL201NjAyL201NjAyX3M1azRhYS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhZWY2NzYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL201NjAyL201NjAyX3M1azRhYS5oCkBAIC0wLDAgKzEsMzY5IEBACisvKgorICogRHJpdmVyIGZvciB0aGUgczVrNGFhIHNlbnNvcgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBFcmlrIEFuZHLDqW4KKyAqIENvcHlyaWdodCAoQykgMjAwNyBJbHllcyBHb3V0YS4gQmFzZWQgb24gdGhlIG01NjAzeCBMaW51eCBEcml2ZXIgUHJvamVjdC4KKyAqIENvcHlyaWdodCAoQykgMjAwNSBtNTYwM3ggTGludXggRHJpdmVyIFByb2plY3QgPG01NjAyQHgzbmcuY29tLmJyPgorICoKKyAqIFBvcnRpb25zIG9mIGNvZGUgdG8gVVNCIGludGVyZmFjZSBhbmQgQUxpIGRyaXZlciBzb2Z0d2FyZSwKKyAqIENvcHlyaWdodCAoYykgMjAwNiBXaWxsZW0gRHVpbmtlcgorICogdjRsMiBpbnRlcmZhY2UgbW9kZWxlZCBhZnRlciB0aGUgVjRMMiBkcml2ZXIKKyAqIGZvciBTTjlDMTB4IFBDIENhbWVyYSBDb250cm9sbGVycworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgdmVyc2lvbiAyLgorICoKKyAqLworCisjaWZuZGVmIE01NjAyX1M1SzRBQV9IXworI2RlZmluZSBNNTYwMl9TNUs0QUFfSF8KKworI2luY2x1ZGUgPGxpbnV4L2RtaS5oPgorCisjaW5jbHVkZSAibTU2MDJfc2Vuc29yLmgiCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2RlZmluZSBTNUs0QUFfUEFHRV9NQVAJCQkweGVjCisKKyNkZWZpbmUgUzVLNEFBX1BBR0VfTUFQXzAJCTB4MDAKKyNkZWZpbmUgUzVLNEFBX1BBR0VfTUFQXzEJCTB4MDEKKyNkZWZpbmUgUzVLNEFBX1BBR0VfTUFQXzIJCTB4MDIKKworLyogU2Vuc29yIHJlZ2lzdGVyIGRlZmluaXRpb25zIGZvciBwYWdlIDB4MDIgKi8KKyNkZWZpbmUgUzVLNEFBX1JFQURfTU9ERQkJMHgwMworI2RlZmluZSBTNUs0QUFfUk9XU1RBUlRfSEkJCTB4MDQKKyNkZWZpbmUgUzVLNEFBX1JPV1NUQVJUX0xPCQkweDA1CisjZGVmaW5lIFM1SzRBQV9DT0xTVEFSVF9ISQkJMHgwNgorI2RlZmluZSBTNUs0QUFfQ09MU1RBUlRfTE8JCTB4MDcKKyNkZWZpbmUgUzVLNEFBX1dJTkRPV19IRUlHSFRfSEkJCTB4MDgKKyNkZWZpbmUgUzVLNEFBX1dJTkRPV19IRUlHSFRfTE8JCTB4MDkKKyNkZWZpbmUgUzVLNEFBX1dJTkRPV19XSURUSF9ISQkJMHgwYQorI2RlZmluZSBTNUs0QUFfV0lORE9XX1dJRFRIX0xPCQkweDBiCisjZGVmaW5lIFM1SzRBQV9HTE9CQUxfR0FJTl9fCQkweDBmIC8qIE9ubHkgYSBndWVzcyBBVE0gISEhICovCisjZGVmaW5lIFM1SzRBQV9IX0JMQU5LX0hJX18JCTB4MWQgLyogT25seSBhIGd1ZXNzIEFUTSAhISEgc3luYyBsb3N0CisJCQkJCQlpZiB0b28gbG93LCByZWR1Y2VzIGZyYW1lIHJhdGUKKwkJCQkJCWlmIHRvbyBoaWdoICovCisjZGVmaW5lIFM1SzRBQV9IX0JMQU5LX0xPX18JCTB4MWUgLyogT25seSBhIGd1ZXNzIEFUTSAhISEgKi8KKyNkZWZpbmUgUzVLNEFBX0VYUE9TVVJFX0hJCQkweDE3CisjZGVmaW5lIFM1SzRBQV9FWFBPU1VSRV9MTwkJMHgxOAorI2RlZmluZSBTNUs0QUFfR0FJTl8xCQkJMHgxZiAvKiAoZGlnaXRhbD8pIGdhaW4gOiA1IGJpdHMgKi8KKyNkZWZpbmUgUzVLNEFBX0dBSU5fMgkJCTB4MjAgLyogKGFuYWxvZ3VlPykgZ2FpbiA6IDcgYml0cyAqLworCisjZGVmaW5lIFM1SzRBQV9STV9ST1dfU0tJUF80WAkJMHgwOAorI2RlZmluZSBTNUs0QUFfUk1fUk9XX1NLSVBfMlgJCTB4MDQKKyNkZWZpbmUgUzVLNEFBX1JNX0NPTF9TS0lQXzRYCQkweDAyCisjZGVmaW5lIFM1SzRBQV9STV9DT0xfU0tJUF8yWAkJMHgwMQorI2RlZmluZSBTNUs0QUFfUk1fSF9GTElQCQkweDQwCisjZGVmaW5lIFM1SzRBQV9STV9WX0ZMSVAJCTB4ODAKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBLZXJuZWwgbW9kdWxlIHBhcmFtZXRlcnMgKi8KK2V4dGVybiBpbnQgZm9yY2Vfc2Vuc29yOworZXh0ZXJuIGludCBkdW1wX3NlbnNvcjsKKworaW50IHM1azRhYV9wcm9iZShzdHJ1Y3Qgc2QgKnNkKTsKK2ludCBzNWs0YWFfaW5pdChzdHJ1Y3Qgc2QgKnNkKTsKK2ludCBzNWs0YWFfcG93ZXJfZG93bihzdHJ1Y3Qgc2QgKnNkKTsKKwordm9pZCBzNWs0YWFfZHVtcF9yZWdpc3RlcnMoc3RydWN0IHNkICpzZCk7CisKK2ludCBzNWs0YWFfcmVhZF9zZW5zb3Ioc3RydWN0IHNkICpzZCwgY29uc3QgdTggYWRkcmVzcywKKwkJICAgICAgIHU4ICppMmNfZGF0YSwgY29uc3QgdTggbGVuKTsKK2ludCBzNWs0YWFfd3JpdGVfc2Vuc29yKHN0cnVjdCBzZCAqc2QsIGNvbnN0IHU4IGFkZHJlc3MsCisJCQl1OCAqaTJjX2RhdGEsIGNvbnN0IHU4IGxlbik7CisKK2ludCBzNWs0YWFfZ2V0X2V4cG9zdXJlKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCk7CitpbnQgczVrNGFhX3NldF9leHBvc3VyZShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCk7CitpbnQgczVrNGFhX2dldF92ZmxpcChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpOworaW50IHM1azRhYV9zZXRfdmZsaXAoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpOworaW50IHM1azRhYV9nZXRfaGZsaXAoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKTsKK2ludCBzNWs0YWFfc2V0X2hmbGlwKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKTsKK2ludCBzNWs0YWFfZ2V0X2dhaW4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKTsKK2ludCBzNWs0YWFfc2V0X2dhaW4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpOworCitzdGF0aWMgc3RydWN0IG01NjAyX3NlbnNvciBzNWs0YWEgPSB7CisJLm5hbWUgPSAiUzVLNEFBIiwKKwkucHJvYmUgPSBzNWs0YWFfcHJvYmUsCisJLmluaXQgPSBzNWs0YWFfaW5pdCwKKwkucG93ZXJfZG93biA9IHM1azRhYV9wb3dlcl9kb3duLAorCS5yZWFkX3NlbnNvciA9IHM1azRhYV9yZWFkX3NlbnNvciwKKwkud3JpdGVfc2Vuc29yID0gczVrNGFhX3dyaXRlX3NlbnNvciwKKwkuaTJjX3NsYXZlX2lkID0gMHg1YSwKKwkubmN0cmxzID0gNCwKKwkuY3RybHMgPSB7CisJeworCQl7CisJCQkuaWQgCQk9IFY0TDJfQ0lEX1ZGTElQLAorCQkJLnR5cGUgCQk9IFY0TDJfQ1RSTF9UWVBFX0JPT0xFQU4sCisJCQkubmFtZSAJCT0gInZlcnRpY2FsIGZsaXAiLAorCQkJLm1pbmltdW0gCT0gMCwKKwkJCS5tYXhpbXVtIAk9IDEsCisJCQkuc3RlcCAJCT0gMSwKKwkJCS5kZWZhdWx0X3ZhbHVlIAk9IDAKKwkJfSwKKwkJLnNldCA9IHM1azRhYV9zZXRfdmZsaXAsCisJCS5nZXQgPSBzNWs0YWFfZ2V0X3ZmbGlwCisKKwl9LCB7CisJCXsKKwkJCS5pZCAJCT0gVjRMMl9DSURfSEZMSVAsCisJCQkudHlwZSAJCT0gVjRMMl9DVFJMX1RZUEVfQk9PTEVBTiwKKwkJCS5uYW1lIAkJPSAiaG9yaXpvbnRhbCBmbGlwIiwKKwkJCS5taW5pbXVtIAk9IDAsCisJCQkubWF4aW11bSAJPSAxLAorCQkJLnN0ZXAgCQk9IDEsCisJCQkuZGVmYXVsdF92YWx1ZSAJPSAwCisJCX0sCisJCS5zZXQgPSBzNWs0YWFfc2V0X2hmbGlwLAorCQkuZ2V0ID0gczVrNGFhX2dldF9oZmxpcAorCisJfSwgeworCQl7CisJCQkuaWQJCT0gVjRMMl9DSURfR0FJTiwKKwkJCS50eXBlCQk9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCisJCQkubmFtZQkJPSAiR2FpbiIsCisJCQkubWluaW11bQk9IDAsCisJCQkubWF4aW11bQk9IDEyNywKKwkJCS5zdGVwCQk9IDEsCisJCQkuZGVmYXVsdF92YWx1ZQk9IDB4YTAsCisJCQkuZmxhZ3MJCT0gVjRMMl9DVFJMX0ZMQUdfU0xJREVSCisJCX0sCisJCS5zZXQgPSBzNWs0YWFfc2V0X2dhaW4sCisJCS5nZXQgPSBzNWs0YWFfZ2V0X2dhaW4KKwl9LCB7CisJCXsKKwkJCS5pZAkJPSBWNEwyX0NJRF9FWFBPU1VSRSwKKwkJCS50eXBlCQk9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCisJCQkubmFtZQkJPSAiRXhwb3N1cmUiLAorCQkJLm1pbmltdW0JPSAxMywKKwkJCS5tYXhpbXVtCT0gMHhmZmYsCisJCQkuc3RlcAkJPSAxLAorCQkJLmRlZmF1bHRfdmFsdWUJPSAweDEwMCwKKwkJCS5mbGFncwkJPSBWNEwyX0NUUkxfRkxBR19TTElERVIKKwkJfSwKKwkJLnNldCA9IHM1azRhYV9zZXRfZXhwb3N1cmUsCisJCS5nZXQgPSBzNWs0YWFfZ2V0X2V4cG9zdXJlCisJfQorCX0sCisKKwkubm1vZGVzID0gMSwKKwkubW9kZXMgPSB7CisJeworCQlNNTYwMl9ERUZBVUxUX0ZSQU1FX1dJRFRILAorCQlNNTYwMl9ERUZBVUxUX0ZSQU1FX0hFSUdIVCwKKwkJVjRMMl9QSVhfRk1UX1NCR0dSOCwKKwkJVjRMMl9GSUVMRF9OT05FLAorCQkuc2l6ZWltYWdlID0KKwkJCU01NjAyX0RFRkFVTFRfRlJBTUVfV0lEVEggKiBNNTYwMl9ERUZBVUxUX0ZSQU1FX0hFSUdIVCwKKwkJLmJ5dGVzcGVybGluZSA9IE01NjAyX0RFRkFVTFRfRlJBTUVfV0lEVEgsCisJCS5jb2xvcnNwYWNlID0gVjRMMl9DT0xPUlNQQUNFX1NSR0IsCisJCS5wcml2ID0gMQorCX0KKwl9Cit9OworCitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBwcmVpbml0X3M1azRhYVtdWzRdID0KK3sKKwl7QlJJREdFLCBNNTYwMl9YQl9NQ1VfQ0xLX0RJViwgMHgwMiwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfTUNVX0NMS19DVFJMLCAweGIwLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9TRU5fQ0xLX0RJViwgMHgwMCwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfU0VOX0NMS19DVFJMLCAweGIwLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9BRENfQ1RSTCwgMHhjMCwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfU0VOU09SX1RZUEUsIDB4MGQsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX1NFTlNPUl9DVFJMLCAweDAwLCAweDAwfSwKKworCXtCUklER0UsIE01NjAyX1hCX0dQSU9fRElSLCAweDFkLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9HUElPX0RBVCwgMHgwOCwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfU0VOX0NMS19ESVYsIDB4YjAsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX1NFTl9DTEtfQ1RSTCwgMHg4MCwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfR1BJT19FTl9ILCAweDNmLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9HUElPX0RJUl9ILCAweDNmLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9HUElPX0RBVF9ILCAweDAwLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9HUElPX0RJUiwgMHgxZCwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfR1BJT19EQVQsIDB4MDAsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX0dQSU9fRU5fTCwgMHhmZiwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfR1BJT19ESVJfTCwgMHhmZiwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfR1BJT19EQVRfTCwgMHgwMCwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfU0VOX0NMS19ESVYsIDB4MDAsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX1NFTl9DTEtfQ1RSTCwgMHhiMCwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfQURDX0NUUkwsIDB4YzAsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX1NFTlNPUl9UWVBFLCAweDA4LCAweDAwfSwKKworCXtCUklER0UsIE01NjAyX1hCX01DVV9DTEtfRElWLCAweDAyLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9NQ1VfQ0xLX0NUUkwsIDB4YjAsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX0dQSU9fRElSLCAweDFkLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9HUElPX0RBVCwgMHgxNCwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfU0VOX0NMS19ESVYsIDB4MDAsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX1NFTl9DTEtfQ1RSTCwgMHhmMCwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfR1BJT19ESVIsIDB4MWQsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX0dQSU9fREFULCAweDFjLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9HUElPX0VOX0gsIDB4MDYsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX0dQSU9fRElSX0gsIDB4MDYsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX0dQSU9fREFUX0gsIDB4MDAsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX0dQSU9fRU5fTCwgMHgwMCwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfSTJDX0NMS19ESVYsIDB4MjAsIDB4MDB9LAorCisJe1NFTlNPUiwgUzVLNEFBX1BBR0VfTUFQLCAweDAwLCAweDAwfQorfTsKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaW5pdF9zNWs0YWFbXVs0XSA9Cit7CisJe0JSSURHRSwgTTU2MDJfWEJfTUNVX0NMS19ESVYsIDB4MDIsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX01DVV9DTEtfQ1RSTCwgMHhiMCwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfU0VOX0NMS19ESVYsIDB4MDAsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX1NFTl9DTEtfQ1RSTCwgMHhiMCwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfQURDX0NUUkwsIDB4YzAsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX1NFTlNPUl9UWVBFLCAweDBkLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9TRU5TT1JfQ1RSTCwgMHgwMCwgMHgwMH0sCisKKwl7QlJJREdFLCBNNTYwMl9YQl9HUElPX0RJUiwgMHgxZCwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfR1BJT19EQVQsIDB4MDgsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX1NFTl9DTEtfRElWLCAweGIwLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9TRU5fQ0xLX0NUUkwsIDB4ODAsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX0dQSU9fRU5fSCwgMHgzZiwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfR1BJT19ESVJfSCwgMHgzZiwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfR1BJT19EQVRfSCwgMHgwMCwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfR1BJT19ESVIsIDB4MWQsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX0dQSU9fREFULCAweDAwLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9HUElPX0VOX0wsIDB4ZmYsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX0dQSU9fRElSX0wsIDB4ZmYsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX0dQSU9fREFUX0wsIDB4MDAsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX1NFTl9DTEtfRElWLCAweDAwLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9TRU5fQ0xLX0NUUkwsIDB4YjAsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX0FEQ19DVFJMLCAweGMwLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9TRU5TT1JfVFlQRSwgMHgwOCwgMHgwMH0sCisKKwl7QlJJREdFLCBNNTYwMl9YQl9NQ1VfQ0xLX0RJViwgMHgwMiwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfTUNVX0NMS19DVFJMLCAweGIwLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9HUElPX0RJUiwgMHgxZCwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfR1BJT19EQVQsIDB4MTQsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX1NFTl9DTEtfRElWLCAweDAwLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9TRU5fQ0xLX0NUUkwsIDB4ZjAsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX0dQSU9fRElSLCAweDFkLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9HUElPX0RBVCwgMHgxYywgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfR1BJT19FTl9ILCAweDA2LCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9HUElPX0RJUl9ILCAweDA2LCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9HUElPX0RBVF9ILCAweDAwLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9HUElPX0VOX0wsIDB4MDAsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX0kyQ19DTEtfRElWLCAweDIwLCAweDAwfSwKKworCXtTRU5TT1IsIFM1SzRBQV9QQUdFX01BUCwgMHgwNywgMHgwMH0sCisJe1NFTlNPUiwgMHgzNiwgMHgwMSwgMHgwMH0sCisJe1NFTlNPUiwgUzVLNEFBX1BBR0VfTUFQLCAweDAwLCAweDAwfSwKKwl7U0VOU09SLCAweDdiLCAweGZmLCAweDAwfSwKKwl7U0VOU09SLCBTNUs0QUFfUEFHRV9NQVAsIDB4MDIsIDB4MDB9LAorCXtTRU5TT1IsIDB4MGMsIDB4MDUsIDB4MDB9LAorCXtTRU5TT1IsIDB4MDIsIDB4MGUsIDB4MDB9LAorCXtTRU5TT1IsIFM1SzRBQV9HQUlOXzEsIDB4MGYsIDB4MDB9LAorCXtTRU5TT1IsIFM1SzRBQV9HQUlOXzIsIDB4MDAsIDB4MDB9LAorCXtTRU5TT1IsIFM1SzRBQV9HTE9CQUxfR0FJTl9fLCAweDAxLCAweDAwfSwKKwl7U0VOU09SLCAweDExLCAweDAwLCAweDAwfSwKKwl7U0VOU09SLCAweDEyLCAweDAwLCAweDAwfSwKKwl7U0VOU09SLCBTNUs0QUFfUEFHRV9NQVAsIDB4MDIsIDB4MDB9LAorCXtTRU5TT1IsIFM1SzRBQV9SRUFEX01PREUsIDB4YTAsIDB4MDB9LAorCXtTRU5TT1IsIDB4MzcsIDB4MDAsIDB4MDB9LAorCXtTRU5TT1IsIFM1SzRBQV9ST1dTVEFSVF9ISSwgMHgwMCwgMHgwMH0sCisJe1NFTlNPUiwgUzVLNEFBX1JPV1NUQVJUX0xPLCAweDJhLCAweDAwfSwKKwl7U0VOU09SLCBTNUs0QUFfQ09MU1RBUlRfSEksIDB4MDAsIDB4MDB9LAorCXtTRU5TT1IsIFM1SzRBQV9DT0xTVEFSVF9MTywgMHgwYiwgMHgwMH0sCisJe1NFTlNPUiwgUzVLNEFBX1dJTkRPV19IRUlHSFRfSEksIDB4MDMsIDB4MDB9LAorCXtTRU5TT1IsIFM1SzRBQV9XSU5ET1dfSEVJR0hUX0xPLCAweGM0LCAweDAwfSwKKwl7U0VOU09SLCBTNUs0QUFfV0lORE9XX1dJRFRIX0hJLCAweDA1LCAweDAwfSwKKwl7U0VOU09SLCBTNUs0QUFfV0lORE9XX1dJRFRIX0xPLCAweDA4LCAweDAwfSwKKwl7U0VOU09SLCBTNUs0QUFfSF9CTEFOS19ISV9fLCAweDAwLCAweDAwfSwKKwl7U0VOU09SLCBTNUs0QUFfSF9CTEFOS19MT19fLCAweDQ4LCAweDAwfSwKKwl7U0VOU09SLCBTNUs0QUFfRVhQT1NVUkVfSEksIDB4MDAsIDB4MDB9LAorCXtTRU5TT1IsIFM1SzRBQV9FWFBPU1VSRV9MTywgMHg0MywgMHgwMH0sCisJe1NFTlNPUiwgMHgxMSwgMHgwNCwgMHgwMH0sCisJe1NFTlNPUiwgMHgxMiwgMHhjMywgMHgwMH0sCisJe1NFTlNPUiwgUzVLNEFBX1BBR0VfTUFQLCAweDAyLCAweDAwfSwKKworCXtCUklER0UsIE01NjAyX1hCX1NFTl9DTEtfRElWLCAweDA2LCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9TRU5fQ0xLX0NUUkwsIDB4YjAsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX0FEQ19DVFJMLCAweGMwLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9TRU5TT1JfVFlQRSwgMHgwOCwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfTElORV9PRl9GUkFNRV9ILCAweDgxLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9QSVhfT0ZfTElORV9ILCAweDgyLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9TSUdfSU5JLCAweDAxLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9WU1lOQ19QQVJBLCAweDAwLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9WU1lOQ19QQVJBLCAweDAwLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9WU1lOQ19QQVJBLCAweDAwLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9WU1lOQ19QQVJBLCAweDAwLCAweDAwfSwKKwkvKiBWU1lOQ19QQVJBLCBWU1lOQ19QQVJBIDogaW1nIGhlaWdodCA0ODAgPSAweDAxZTAgKi8KKwl7QlJJREdFLCBNNTYwMl9YQl9WU1lOQ19QQVJBLCAweDAxLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9WU1lOQ19QQVJBLCAweGUwLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9WU1lOQ19QQVJBLCAweDAwLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9WU1lOQ19QQVJBLCAweDAwLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9TSUdfSU5JLCAweDAwLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9TSUdfSU5JLCAweDAyLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9IU1lOQ19QQVJBLCAweDAwLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9IU1lOQ19QQVJBLCAweDAwLCAweDAwfSwKKwkvKiBIU1lOQ19QQVJBLCBIU1lOQ19QQVJBIDogaW1nIHdpZHRoIDY0MCA9IDB4MDI4MCAqLworCXtCUklER0UsIE01NjAyX1hCX0hTWU5DX1BBUkEsIDB4MDIsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX0hTWU5DX1BBUkEsIDB4ODAsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX1NJR19JTkksIDB4MDAsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX1NFTl9DTEtfRElWLCAweDAwLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9TRU5fQ0xLX0NUUkwsIDB4YTAsIDB4MDB9LCAvKiA0OCBNSHogKi8KKworCXtTRU5TT1IsIFM1SzRBQV9QQUdFX01BUCwgMHgwMiwgMHgwMH0sCisJe1NFTlNPUiwgUzVLNEFBX1JFQURfTU9ERSwgUzVLNEFBX1JNX0hfRkxJUCB8IFM1SzRBQV9STV9ST1dfU0tJUF8yWAorCQl8IFM1SzRBQV9STV9DT0xfU0tJUF8yWCwgMHgwMH0sCisJLyogMHgzNyA6IEZpeCBpbWFnZSBzdGFiaWxpdHkgd2hlbiBsaWdodCBpcyB0b28gYnJpZ2h0IGFuZCBpbXByb3ZlcworCSAqIGltYWdlIHF1YWxpdHkgaW4gNjQweDQ4MCwgYnV0IHdvcnNlbnMgaXQgaW4gMTI4MHgxMDI0ICovCisJe1NFTlNPUiwgMHgzNywgMHgwMSwgMHgwMH0sCisJLyogUk9XU1RBUlRfSEksIFJPV1NUQVJUX0xPIDogMTAgKyAoMTAyNC05NjApLzIgPSA0MiA9IDB4MDAyYSAqLworCXtTRU5TT1IsIFM1SzRBQV9ST1dTVEFSVF9ISSwgMHgwMCwgMHgwMH0sCisJe1NFTlNPUiwgUzVLNEFBX1JPV1NUQVJUX0xPLCAweDJhLCAweDAwfSwKKwl7U0VOU09SLCBTNUs0QUFfQ09MU1RBUlRfSEksIDB4MDAsIDB4MDB9LAorCXtTRU5TT1IsIFM1SzRBQV9DT0xTVEFSVF9MTywgMHgwYywgMHgwMH0sCisJLyogd2luZG93X2hlaWdodF9oaSwgd2luZG93X2hlaWdodF9sbyA6IDk2MCA9IDB4MDNjMCAqLworCXtTRU5TT1IsIFM1SzRBQV9XSU5ET1dfSEVJR0hUX0hJLCAweDAzLCAweDAwfSwKKwl7U0VOU09SLCBTNUs0QUFfV0lORE9XX0hFSUdIVF9MTywgMHhjMCwgMHgwMH0sCisJLyogd2luZG93X3dpZHRoX2hpLCB3aW5kb3dfd2lkdGhfbG8gOiAxMjgwID0gMHgwNTAwICovCisJe1NFTlNPUiwgUzVLNEFBX1dJTkRPV19XSURUSF9ISSwgMHgwNSwgMHgwMH0sCisJe1NFTlNPUiwgUzVLNEFBX1dJTkRPV19XSURUSF9MTywgMHgwMCwgMHgwMH0sCisJe1NFTlNPUiwgUzVLNEFBX0hfQkxBTktfSElfXywgMHgwMCwgMHgwMH0sCisJe1NFTlNPUiwgUzVLNEFBX0hfQkxBTktfTE9fXywgMHhhOCwgMHgwMH0sIC8qIGhlbHBzIHRvIHN5bmMuLi4gKi8KKwl7U0VOU09SLCBTNUs0QUFfRVhQT1NVUkVfSEksIDB4MDEsIDB4MDB9LAorCXtTRU5TT1IsIFM1SzRBQV9FWFBPU1VSRV9MTywgMHgwMCwgMHgwMH0sCisJe1NFTlNPUiwgMHgxMSwgMHgwNCwgMHgwMH0sCisJe1NFTlNPUiwgMHgxMiwgMHhjMywgMHgwMH0sCisJe1NFTlNPUiwgUzVLNEFBX1BBR0VfTUFQLCAweDAyLCAweDAwfSwKKwl7U0VOU09SLCAweDAyLCAweDBlLCAweDAwfSwKKwl7U0VOU09SX0xPTkcsIFM1SzRBQV9HTE9CQUxfR0FJTl9fLCAweDBmLCAweDAwfSwKKwl7U0VOU09SLCBTNUs0QUFfR0FJTl8xLCAweDBiLCAweDAwfSwKKwl7U0VOU09SLCBTNUs0QUFfR0FJTl8yLCAweGEwLCAweDAwfQorfTsKKworc3RhdGljCisgICAgY29uc3QKKwlzdHJ1Y3QgZG1pX3N5c3RlbV9pZCBzNWs0YWFfdmZsaXBfZG1pX3RhYmxlW10gPSB7CisJeworCQkuaWRlbnQgPSAiRnVqaXRzdS1TaWVtZW5zIEFtaWxvIFhhIDI1MjgiLAorCQkubWF0Y2hlcyA9IHsKKwkJCURNSV9NQVRDSChETUlfU1lTX1ZFTkRPUiwgIkZVSklUU1UgU0lFTUVOUyIpLAorCQkJRE1JX01BVENIKERNSV9QUk9EVUNUX05BTUUsICJBTUlMTyBYYSAyNTI4IikKKwkJfQorCX0sCisJeworCQkuaWRlbnQgPSAiRnVqaXRzdS1TaWVtZW5zIEFtaWxvIFhpIDI1NTAiLAorCQkubWF0Y2hlcyA9IHsKKwkJCURNSV9NQVRDSChETUlfU1lTX1ZFTkRPUiwgIkZVSklUU1UgU0lFTUVOUyIpLAorCQkJRE1JX01BVENIKERNSV9QUk9EVUNUX05BTUUsICJBTUlMTyBYaSAyNTUwIikKKwkJfQorCX0sCisJCXsKKwkJLmlkZW50ID0gIk1TSSBHWDcwMCIsCisJCS5tYXRjaGVzID0geworCQkJRE1JX01BVENIKERNSV9TWVNfVkVORE9SLCAiTWljcm8tU3RhciBJbnRlcm5hdGlvbmFsIiksCisJCQlETUlfTUFUQ0goRE1JX1BST0RVQ1RfTkFNRSwgIkdYNzAwIiksCisJCQlETUlfTUFUQ0goRE1JX0JJT1NfREFURSwgIjA3LzI2LzIwMDciKQorCQl9CisJfSwKKwl7IH0KK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9tNTYwMi9tNTYwMl9zNWs4M2EuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvbTU2MDIvbTU2MDJfczVrODNhLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODk4OGE3MgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvbTU2MDIvbTU2MDJfczVrODNhLmMKQEAgLTAsMCArMSw0MjMgQEAKKy8qCisgKiBEcml2ZXIgZm9yIHRoZSBzNWs4M2Egc2Vuc29yCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA4IEVyaWsgQW5kcsOpbgorICogQ29weXJpZ2h0IChDKSAyMDA3IElseWVzIEdvdXRhLiBCYXNlZCBvbiB0aGUgbTU2MDN4IExpbnV4IERyaXZlciBQcm9qZWN0LgorICogQ29weXJpZ2h0IChDKSAyMDA1IG01NjAzeCBMaW51eCBEcml2ZXIgUHJvamVjdCA8bTU2MDJAeDNuZy5jb20uYnI+CisgKgorICogUG9ydGlvbnMgb2YgY29kZSB0byBVU0IgaW50ZXJmYWNlIGFuZCBBTGkgZHJpdmVyIHNvZnR3YXJlLAorICogQ29weXJpZ2h0IChjKSAyMDA2IFdpbGxlbSBEdWlua2VyCisgKiB2NGwyIGludGVyZmFjZSBtb2RlbGVkIGFmdGVyIHRoZSBWNEwyIGRyaXZlcgorICogZm9yIFNOOUMxMHggUEMgQ2FtZXJhIENvbnRyb2xsZXJzCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB2ZXJzaW9uIDIuCisgKgorICovCisKKyNpbmNsdWRlICJtNTYwMl9zNWs4M2EuaCIKKworaW50IHM1azgzYV9wcm9iZShzdHJ1Y3Qgc2QgKnNkKQoreworCXU4IHByb2RfaWQgPSAwLCB2ZXJfaWQgPSAwOworCWludCBpLCBlcnIgPSAwOworCisJaWYgKGZvcmNlX3NlbnNvcikgeworCQlpZiAoZm9yY2Vfc2Vuc29yID09IFM1SzgzQV9TRU5TT1IpIHsKKwkJCWluZm8oIkZvcmNpbmcgYSAlcyBzZW5zb3IiLCBzNWs4M2EubmFtZSk7CisJCQlnb3RvIHNlbnNvcl9mb3VuZDsKKwkJfQorCQkvKiBJZiB3ZSB3YW50IHRvIGZvcmNlIGFub3RoZXIgc2Vuc29yLCBkb24ndCB0cnkgdG8gcHJvYmUgdGhpcworCQkgKiBvbmUgKi8KKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJaW5mbygiUHJvYmluZyBmb3IgYSBzNWs4M2Egc2Vuc29yIik7CisKKwkvKiBQcmVpbml0IHRoZSBzZW5zb3IgKi8KKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShwcmVpbml0X3M1azgzYSkgJiYgIWVycjsgaSsrKSB7CisJCXU4IGRhdGFbMl0gPSB7cHJlaW5pdF9zNWs4M2FbaV1bMl0sIHByZWluaXRfczVrODNhW2ldWzNdfTsKKwkJaWYgKHByZWluaXRfczVrODNhW2ldWzBdID09IFNFTlNPUikKKwkJCWVyciA9IHM1azgzYV93cml0ZV9zZW5zb3Ioc2QsIHByZWluaXRfczVrODNhW2ldWzFdLAorCQkJCWRhdGEsIDIpOworCQllbHNlCisJCQllcnIgPSBtNTYwMl93cml0ZV9icmlkZ2Uoc2QsIHByZWluaXRfczVrODNhW2ldWzFdLAorCQkJCWRhdGFbMF0pOworCX0KKworCS8qIFdlIGRvbid0IGtub3cgd2hhdCByZWdpc3RlciAoaWYgYW55KSB0aGF0IGNvbnRhaW4gdGhlIHByb2R1Y3QgaWQKKwkgKiBKdXN0IHBpY2sgdGhlIGZpcnN0IGFkZHJlc3NlcyB0aGF0IHNlZW0gdG8gcHJvZHVjZSB0aGUgc2FtZSByZXN1bHRzCisJICogb24gbXVsdGlwbGUgbWFjaGluZXMgKi8KKwlpZiAoczVrODNhX3JlYWRfc2Vuc29yKHNkLCAweDAwLCAmcHJvZF9pZCwgMSkpCisJCXJldHVybiAtRU5PREVWOworCisJaWYgKHM1azgzYV9yZWFkX3NlbnNvcihzZCwgMHgwMSwgJnZlcl9pZCwgMSkpCisJCXJldHVybiAtRU5PREVWOworCisJaWYgKChwcm9kX2lkID09IDB4ZmYpIHx8ICh2ZXJfaWQgPT0gMHhmZikpCisJCXJldHVybiAtRU5PREVWOworCWVsc2UKKwkJaW5mbygiRGV0ZWN0ZWQgYSBzNWs4M2Egc2Vuc29yIik7CisKK3NlbnNvcl9mb3VuZDoKKwlzZC0+Z3NwY2FfZGV2LmNhbS5jYW1fbW9kZSA9IHM1azgzYS5tb2RlczsKKwlzZC0+Z3NwY2FfZGV2LmNhbS5ubW9kZXMgPSBzNWs4M2Eubm1vZGVzOworCXNkLT5kZXNjLT5jdHJscyA9IHM1azgzYS5jdHJsczsKKwlzZC0+ZGVzYy0+bmN0cmxzID0gczVrODNhLm5jdHJsczsKKwlyZXR1cm4gMDsKK30KKworaW50IHM1azgzYV9yZWFkX3NlbnNvcihzdHJ1Y3Qgc2QgKnNkLCBjb25zdCB1OCBhZGRyZXNzLAorCQkJICAgICAgdTggKmkyY19kYXRhLCBjb25zdCB1OCBsZW4pCit7CisJaW50IGVyciwgaTsKKworCWRvIHsKKwkJZXJyID0gbTU2MDJfcmVhZF9icmlkZ2Uoc2QsIE01NjAyX1hCX0kyQ19TVEFUVVMsIGkyY19kYXRhKTsKKwl9IHdoaWxlICgoKmkyY19kYXRhICYgSTJDX0JVU1kpICYmICFlcnIpOworCWlmIChlcnIgPCAwKQorCQlnb3RvIG91dDsKKworCWVyciA9IG01NjAyX3dyaXRlX2JyaWRnZShzZCwgTTU2MDJfWEJfSTJDX0RFVl9BRERSLAorCQkJCSBzZC0+c2Vuc29yLT5pMmNfc2xhdmVfaWQpOworCWlmIChlcnIgPCAwKQorCQlnb3RvIG91dDsKKworCWVyciA9IG01NjAyX3dyaXRlX2JyaWRnZShzZCwgTTU2MDJfWEJfSTJDX1JFR19BRERSLCBhZGRyZXNzKTsKKwlpZiAoZXJyIDwgMCkKKwkJZ290byBvdXQ7CisKKwllcnIgPSBtNTYwMl93cml0ZV9icmlkZ2Uoc2QsIE01NjAyX1hCX0kyQ19DVFJMLCAweDE4ICsgbGVuKTsKKwlpZiAoZXJyIDwgMCkKKwkJZ290byBvdXQ7CisKKwlkbyB7CisJCWVyciA9IG01NjAyX3JlYWRfYnJpZGdlKHNkLCBNNTYwMl9YQl9JMkNfU1RBVFVTLCBpMmNfZGF0YSk7CisJfSB3aGlsZSAoKCppMmNfZGF0YSAmIEkyQ19CVVNZKSAmJiAhZXJyKTsKKworCWlmIChlcnIgPCAwKQorCQlnb3RvIG91dDsKKwlmb3IgKGkgPSAwOyBpIDwgbGVuICYmICFsZW47IGkrKykgeworCQllcnIgPSBtNTYwMl9yZWFkX2JyaWRnZShzZCwgTTU2MDJfWEJfSTJDX0RBVEEsICYoaTJjX2RhdGFbaV0pKTsKKworCQlQREVCVUcoRF9DT05GLCAiUmVhZGluZyBzZW5zb3IgcmVnaXN0ZXIgIgorCQkJCSAgIjB4JXggY29udGFpbmluZyAweCV4ICIsIGFkZHJlc3MsICppMmNfZGF0YSk7CisJfQorCitvdXQ6CisJcmV0dXJuIChlcnIgPCAwKSA/IGVyciA6IDA7Cit9CisKK2ludCBzNWs4M2Ffd3JpdGVfc2Vuc29yKHN0cnVjdCBzZCAqc2QsIGNvbnN0IHU4IGFkZHJlc3MsCisJCQkgICAgICAgdTggKmkyY19kYXRhLCBjb25zdCB1OCBsZW4pCit7CisJaW50IGVyciwgaTsKKwl1OCAqcDsKKwlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiA9IHNkLT5nc3BjYV9kZXYuZGV2OworCV9fdTggKmJ1ZiA9IHNkLT5nc3BjYV9kZXYudXNiX2J1ZjsKKworCS8qIE5vIHNlbnNvciB3aXRoIGEgZGF0YSB3aWR0aCBsYXJnZXIgdGhhbiAxNiBiaXRzIGhhcyB5ZXQgYmVlbiBzZWVuICovCisJaWYgKGxlbiA+IDIgfHwgIWxlbikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwltZW1jcHkoYnVmLCBzZW5zb3JfdXJiX3NrZWxldG9uLAorCSAgICAgICBzaXplb2Yoc2Vuc29yX3VyYl9za2VsZXRvbikpOworCisJYnVmWzExXSA9IHNkLT5zZW5zb3ItPmkyY19zbGF2ZV9pZDsKKwlidWZbMTVdID0gYWRkcmVzczsKKworCS8qIFNwZWNpYWwgY2FzZSBsYXJnZXIgc2Vuc29yIHdyaXRlcyAqLworCXAgPSBidWYgKyAxNjsKKworCS8qIENvcHkgYSBmb3VyIGJ5dGUgd3JpdGUgc2VxdWVuY2UgZm9yIGVhY2ggYnl0ZSB0byBiZSB3cml0dGVuIHRvICovCisJZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CisJCW1lbWNweShwLCBzZW5zb3JfdXJiX3NrZWxldG9uICsgMTYsIDQpOworCQlwWzNdID0gaTJjX2RhdGFbaV07CisJCXAgKz0gNDsKKwkJUERFQlVHKERfQ09ORiwgIldyaXRpbmcgc2Vuc29yIHJlZ2lzdGVyIDB4JXggd2l0aCAweCV4IiwKKwkJICAgICAgIGFkZHJlc3MsIGkyY19kYXRhW2ldKTsKKwl9CisKKwkvKiBDb3B5IHRoZSB0YWlsZXIgKi8KKwltZW1jcHkocCwgc2Vuc29yX3VyYl9za2VsZXRvbiArIDIwLCA0KTsKKworCS8qIFNldCB0aGUgdG90YWwgbGVuZ3RoICovCisJcFszXSA9IDB4MTAgKyBsZW47CisKKwllcnIgPSB1c2JfY29udHJvbF9tc2codWRldiwgdXNiX3NuZGN0cmxwaXBlKHVkZXYsIDApLAorCQkJICAgICAgMHgwNCwgMHg0MCwgMHgxOSwKKwkJCSAgICAgIDB4MDAwMCwgYnVmLAorCQkJICAgICAgMjAgKyBsZW4gKiA0LCBNNTYwMl9VUkJfTVNHX1RJTUVPVVQpOworCisJcmV0dXJuIChlcnIgPCAwKSA/IGVyciA6IDA7Cit9CisKK2ludCBzNWs4M2FfaW5pdChzdHJ1Y3Qgc2QgKnNkKQoreworCWludCBpLCBlcnIgPSAwOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoaW5pdF9zNWs4M2EpICYmICFlcnI7IGkrKykgeworCQl1OCBkYXRhWzJdID0gezB4MDAsIDB4MDB9OworCisJCXN3aXRjaCAoaW5pdF9zNWs4M2FbaV1bMF0pIHsKKwkJY2FzZSBCUklER0U6CisJCQllcnIgPSBtNTYwMl93cml0ZV9icmlkZ2Uoc2QsCisJCQkJCWluaXRfczVrODNhW2ldWzFdLAorCQkJCQlpbml0X3M1azgzYVtpXVsyXSk7CisJCQlicmVhazsKKworCQljYXNlIFNFTlNPUjoKKwkJCWRhdGFbMF0gPSBpbml0X3M1azgzYVtpXVsyXTsKKwkJCWVyciA9IHM1azgzYV93cml0ZV9zZW5zb3Ioc2QsCisJCQkJaW5pdF9zNWs4M2FbaV1bMV0sIGRhdGEsIDEpOworCQkJYnJlYWs7CisKKwkJY2FzZSBTRU5TT1JfTE9ORzoKKwkJCWRhdGFbMF0gPSBpbml0X3M1azgzYVtpXVsyXTsKKwkJCWRhdGFbMV0gPSBpbml0X3M1azgzYVtpXVszXTsKKwkJCWVyciA9IHM1azgzYV93cml0ZV9zZW5zb3Ioc2QsCisJCQkJaW5pdF9zNWs4M2FbaV1bMV0sIGRhdGEsIDIpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlpbmZvKCJJbnZhbGlkIHN0cmVhbSBjb21tYW5kLCBleGl0aW5nIGluaXQiKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJfQorCisJaWYgKGR1bXBfc2Vuc29yKQorCQlzNWs4M2FfZHVtcF9yZWdpc3RlcnMoc2QpOworCisJcmV0dXJuIChlcnIgPCAwKSA/IGVyciA6IDA7Cit9CisKK2ludCBzNWs4M2FfcG93ZXJfZG93bihzdHJ1Y3Qgc2QgKnNkKQoreworCXJldHVybiAwOworfQorCit2b2lkIHM1azgzYV9kdW1wX3JlZ2lzdGVycyhzdHJ1Y3Qgc2QgKnNkKQoreworCWludCBhZGRyZXNzOworCXU4IHBhZ2UsIG9sZF9wYWdlOworCXM1azgzYV9yZWFkX3NlbnNvcihzZCwgUzVLODNBX1BBR0VfTUFQLCAmb2xkX3BhZ2UsIDEpOworCisJZm9yIChwYWdlID0gMDsgcGFnZSA8IDE2OyBwYWdlKyspIHsKKwkJczVrODNhX3dyaXRlX3NlbnNvcihzZCwgUzVLODNBX1BBR0VfTUFQLCAmcGFnZSwgMSk7CisJCWluZm8oIkR1bXBpbmcgdGhlIHM1azgzYSByZWdpc3RlciBzdGF0ZSBmb3IgcGFnZSAweCV4IiwgcGFnZSk7CisJCWZvciAoYWRkcmVzcyA9IDA7IGFkZHJlc3MgPD0gMHhmZjsgYWRkcmVzcysrKSB7CisJCQl1OCB2YWwgPSAwOworCQkJczVrODNhX3JlYWRfc2Vuc29yKHNkLCBhZGRyZXNzLCAmdmFsLCAxKTsKKwkJCWluZm8oInJlZ2lzdGVyIDB4JXggY29udGFpbnMgMHgleCIsCisJCQkgICAgIGFkZHJlc3MsIHZhbCk7CisJCX0KKwl9CisJaW5mbygiczVrODNhIHJlZ2lzdGVyIHN0YXRlIGR1bXAgY29tcGxldGUiKTsKKworCWZvciAocGFnZSA9IDA7IHBhZ2UgPCAxNjsgcGFnZSsrKSB7CisJCXM1azgzYV93cml0ZV9zZW5zb3Ioc2QsIFM1SzgzQV9QQUdFX01BUCwgJnBhZ2UsIDEpOworCQlpbmZvKCJQcm9iaW5nIGZvciB3aGljaCByZWdpc3RlcnMgdGhhdCBhcmUgcmVhZC93cml0ZSAiCisJCSAgICAgICJmb3IgcGFnZSAweCV4IiwgcGFnZSk7CisJCWZvciAoYWRkcmVzcyA9IDA7IGFkZHJlc3MgPD0gMHhmZjsgYWRkcmVzcysrKSB7CisJCQl1OCBvbGRfdmFsLCBjdHJsX3ZhbCwgdGVzdF92YWwgPSAweGZmOworCisJCQlzNWs4M2FfcmVhZF9zZW5zb3Ioc2QsIGFkZHJlc3MsICZvbGRfdmFsLCAxKTsKKwkJCXM1azgzYV93cml0ZV9zZW5zb3Ioc2QsIGFkZHJlc3MsICZ0ZXN0X3ZhbCwgMSk7CisJCQlzNWs4M2FfcmVhZF9zZW5zb3Ioc2QsIGFkZHJlc3MsICZjdHJsX3ZhbCwgMSk7CisKKwkJCWlmIChjdHJsX3ZhbCA9PSB0ZXN0X3ZhbCkKKwkJCQlpbmZvKCJyZWdpc3RlciAweCV4IGlzIHdyaXRlYWJsZSIsIGFkZHJlc3MpOworCQkJZWxzZQorCQkJCWluZm8oInJlZ2lzdGVyIDB4JXggaXMgcmVhZCBvbmx5IiwgYWRkcmVzcyk7CisKKwkJCS8qIFJlc3RvcmUgb3JpZ2luYWwgdmFsICovCisJCQlzNWs4M2Ffd3JpdGVfc2Vuc29yKHNkLCBhZGRyZXNzLCAmb2xkX3ZhbCwgMSk7CisJCX0KKwl9CisJaW5mbygiUmVhZC93cml0ZSByZWdpc3RlciBwcm9iaW5nIGNvbXBsZXRlIik7CisJczVrODNhX3dyaXRlX3NlbnNvcihzZCwgUzVLODNBX1BBR0VfTUFQLCAmb2xkX3BhZ2UsIDEpOworfQorCitpbnQgczVrODNhX2dldF9icmlnaHRuZXNzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCkKK3sKKwlpbnQgZXJyOworCXU4IGRhdGFbMl07CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJZXJyID0gczVrODNhX3JlYWRfc2Vuc29yKHNkLCBTNUs4M0FfQlJJR0hUTkVTUywgZGF0YSwgMik7CisJZGF0YVsxXSA9IGRhdGFbMV0gPDwgMTsKKwkqdmFsID0gZGF0YVsxXTsKKworCXJldHVybiAoZXJyIDwgMCkgPyBlcnIgOiAwOworfQorCitpbnQgczVrODNhX3NldF9icmlnaHRuZXNzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKQoreworCWludCBlcnI7CisJdTggZGF0YVsyXTsKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisKKwlkYXRhWzBdID0gMHgwMDsKKwlkYXRhWzFdID0gMHgyMDsKKwllcnIgPSBzNWs4M2Ffd3JpdGVfc2Vuc29yKHNkLCAweDE0LCBkYXRhLCAyKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKKworCWRhdGFbMF0gPSAweDAxOworCWRhdGFbMV0gPSAweDAwOworCWVyciA9IHM1azgzYV93cml0ZV9zZW5zb3Ioc2QsIDB4MGQsIGRhdGEsIDIpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOworCisJLyogRklYTUU6IFRoaXMgaXMgbm90IHNhbmUsIHdlIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgY29tcG9zaXRpb24KKwkJICBvZiB0aGVzZSByZWdpc3RlcnMgKi8KKwlkYXRhWzBdID0gdmFsID4+IDM7IC8qIGJyaWdodG5lc3MsIGhpZ2ggNSBiaXRzICovCisJZGF0YVsxXSA9IHZhbCA+PiAxOyAvKiBicmlnaHRuZXNzLCBoaWdoIDcgYml0cyAqLworCWVyciA9IHM1azgzYV93cml0ZV9zZW5zb3Ioc2QsIFM1SzgzQV9CUklHSFRORVNTLCBkYXRhLCAyKTsKKworCXJldHVybiAoZXJyIDwgMCkgPyBlcnIgOiAwOworfQorCitpbnQgczVrODNhX2dldF93aGl0ZW5lc3Moc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKQoreworCWludCBlcnI7CisJdTggZGF0YTsKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisKKwllcnIgPSBzNWs4M2FfcmVhZF9zZW5zb3Ioc2QsIFM1SzgzQV9XSElURU5FU1MsICZkYXRhLCAxKTsKKworCSp2YWwgPSBkYXRhOworCXJldHVybiAoZXJyIDwgMCkgPyBlcnIgOiAwOworfQorCitpbnQgczVrODNhX3NldF93aGl0ZW5lc3Moc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpCit7CisJaW50IGVycjsKKwl1OCBkYXRhWzFdOworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCWRhdGFbMF0gPSB2YWw7CisJZXJyID0gczVrODNhX3dyaXRlX3NlbnNvcihzZCwgUzVLODNBX1dISVRFTkVTUywgZGF0YSwgMSk7CisKKwlyZXR1cm4gKGVyciA8IDApID8gZXJyIDogMDsKK30KKworaW50IHM1azgzYV9nZXRfZ2FpbihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpCit7CisJaW50IGVycjsKKwl1OCBkYXRhWzJdOworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCWVyciA9IHM1azgzYV9yZWFkX3NlbnNvcihzZCwgUzVLODNBX0dBSU4sIGRhdGEsIDIpOworCisJZGF0YVsxXSA9IGRhdGFbMV0gJiAweDNmOworCWlmIChkYXRhWzFdID4gUzVLODNBX01BWElNVU1fR0FJTikKKwkJZGF0YVsxXSA9IFM1SzgzQV9NQVhJTVVNX0dBSU47CisKKwkqdmFsID0gZGF0YVsxXTsKKworCXJldHVybiAoZXJyIDwgMCkgPyBlcnIgOiAwOworfQorCitpbnQgczVrODNhX3NldF9nYWluKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKQoreworCWludCBlcnI7CisJdTggZGF0YVsyXTsKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisKKwlkYXRhWzBdID0gMDsKKwlkYXRhWzFdID0gdmFsOworCWVyciA9IHM1azgzYV93cml0ZV9zZW5zb3Ioc2QsIFM1SzgzQV9HQUlOLCBkYXRhLCAyKTsKKworCXJldHVybiAoZXJyIDwgMCkgPyBlcnIgOiAwOworfQorCitpbnQgczVrODNhX2dldF92ZmxpcChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpCit7CisJaW50IGVycjsKKwl1OCBkYXRhWzFdOworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCWRhdGFbMF0gPSAweDA1OworCWVyciA9IHM1azgzYV93cml0ZV9zZW5zb3Ioc2QsIFM1SzgzQV9QQUdFX01BUCwgZGF0YSwgMSk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CisKKwllcnIgPSBzNWs4M2FfcmVhZF9zZW5zb3Ioc2QsIFM1SzgzQV9GTElQLCBkYXRhLCAxKTsKKwkqdmFsID0gKGRhdGFbMF0gfCAweDQwKSA/IDEgOiAwOworCisJcmV0dXJuIChlcnIgPCAwKSA/IGVyciA6IDA7Cit9CisKK2ludCBzNWs4M2Ffc2V0X3ZmbGlwKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKQoreworCWludCBlcnI7CisJdTggZGF0YVsxXTsKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisKKwlkYXRhWzBdID0gMHgwNTsKKwllcnIgPSBzNWs4M2Ffd3JpdGVfc2Vuc29yKHNkLCBTNUs4M0FfUEFHRV9NQVAsIGRhdGEsIDEpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOworCisJZXJyID0gczVrODNhX3JlYWRfc2Vuc29yKHNkLCBTNUs4M0FfRkxJUCwgZGF0YSwgMSk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CisKKwkvKiBzZXQgb3IgemVybyBzaXggYml0LCBzZXZlbiBpcyBoZmxpcCAqLworCWRhdGFbMF0gPSAodmFsKSA/IChkYXRhWzBdICYgMHg4MCkgfCAweDQwIHwgUzVLODNBX0ZMSVBfTUFTSworCQkJOiAoZGF0YVswXSAmIDB4ODApIHwgUzVLODNBX0ZMSVBfTUFTSzsKKwllcnIgPSBzNWs4M2Ffd3JpdGVfc2Vuc29yKHNkLCBTNUs4M0FfRkxJUCwgZGF0YSwgMSk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CisKKwlkYXRhWzBdID0gKHZhbCkgPyAweDBiIDogMHgwYTsKKwllcnIgPSBzNWs4M2Ffd3JpdGVfc2Vuc29yKHNkLCBTNUs4M0FfVkZMSVBfVFVORSwgZGF0YSwgMSk7CisKKwlyZXR1cm4gKGVyciA8IDApID8gZXJyIDogMDsKK30KKworaW50IHM1azgzYV9nZXRfaGZsaXAoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKQoreworCWludCBlcnI7CisJdTggZGF0YVsxXTsKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisKKwlkYXRhWzBdID0gMHgwNTsKKwllcnIgPSBzNWs4M2Ffd3JpdGVfc2Vuc29yKHNkLCBTNUs4M0FfUEFHRV9NQVAsIGRhdGEsIDEpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOworCisJZXJyID0gczVrODNhX3JlYWRfc2Vuc29yKHNkLCBTNUs4M0FfRkxJUCwgZGF0YSwgMSk7CisJKnZhbCA9IChkYXRhWzBdIHwgMHg4MCkgPyAxIDogMDsKKworCXJldHVybiAoZXJyIDwgMCkgPyBlcnIgOiAwOworfQorCitpbnQgczVrODNhX3NldF9oZmxpcChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCkKK3sKKwlpbnQgZXJyOworCXU4IGRhdGFbMV07CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJZGF0YVswXSA9IDB4MDU7CisJZXJyID0gczVrODNhX3dyaXRlX3NlbnNvcihzZCwgUzVLODNBX1BBR0VfTUFQLCBkYXRhLCAxKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKKworCWVyciA9IHM1azgzYV9yZWFkX3NlbnNvcihzZCwgUzVLODNBX0ZMSVAsIGRhdGEsIDEpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOworCisJLyogc2V0IG9yIHplcm8gc2V2ZW4gYml0LCBzaXggaXMgdmZsaXAgKi8KKwlkYXRhWzBdID0gKHZhbCkgPyAoZGF0YVswXSAmIDB4NDApIHwgMHg4MCB8IFM1SzgzQV9GTElQX01BU0sKKwkJCTogKGRhdGFbMF0gJiAweDQwKSB8IFM1SzgzQV9GTElQX01BU0s7CisJZXJyID0gczVrODNhX3dyaXRlX3NlbnNvcihzZCwgUzVLODNBX0ZMSVAsIGRhdGEsIDEpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOworCisJZGF0YVswXSA9ICh2YWwpID8gMHgwYSA6IDB4MGI7CisJZXJyID0gczVrODNhX3dyaXRlX3NlbnNvcihzZCwgUzVLODNBX0hGTElQX1RVTkUsIGRhdGEsIDEpOworCisJcmV0dXJuIChlcnIgPCAwKSA/IGVyciA6IDA7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL201NjAyL201NjAyX3M1azgzYS5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9tNTYwMi9tNTYwMl9zNWs4M2EuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZTNlZTljCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9tNTYwMi9tNTYwMl9zNWs4M2EuaApAQCAtMCwwICsxLDQ4MiBAQAorLyoKKyAqIERyaXZlciBmb3IgdGhlIHM1azgzYSBzZW5zb3IKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggRXJpayBBbmRyw6luCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgSWx5ZXMgR291dGEuIEJhc2VkIG9uIHRoZSBtNTYwM3ggTGludXggRHJpdmVyIFByb2plY3QuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgbTU2MDN4IExpbnV4IERyaXZlciBQcm9qZWN0IDxtNTYwMkB4M25nLmNvbS5icj4KKyAqCisgKiBQb3J0aW9ucyBvZiBjb2RlIHRvIFVTQiBpbnRlcmZhY2UgYW5kIEFMaSBkcml2ZXIgc29mdHdhcmUsCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgV2lsbGVtIER1aW5rZXIKKyAqIHY0bDIgaW50ZXJmYWNlIG1vZGVsZWQgYWZ0ZXIgdGhlIFY0TDIgZHJpdmVyCisgKiBmb3IgU045QzEweCBQQyBDYW1lcmEgQ29udHJvbGxlcnMKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHZlcnNpb24gMi4KKyAqCisgKi8KKworI2lmbmRlZiBNNTYwMl9TNUs4M0FfSF8KKyNkZWZpbmUgTTU2MDJfUzVLODNBX0hfCisKKyNpbmNsdWRlICJtNTYwMl9zZW5zb3IuaCIKKworI2RlZmluZSBTNUs4M0FfRkxJUAkJCQkweDAxCisjZGVmaW5lIFM1SzgzQV9IRkxJUF9UVU5FCQkweDAzCisjZGVmaW5lIFM1SzgzQV9WRkxJUF9UVU5FCQkweDA1CisjZGVmaW5lIFM1SzgzQV9XSElURU5FU1MJCTB4MGEKKyNkZWZpbmUgUzVLODNBX0dBSU4JCQkJMHgxOAorI2RlZmluZSBTNUs4M0FfQlJJR0hUTkVTUwkJMHgxYgorI2RlZmluZSBTNUs4M0FfUEFHRV9NQVAJCQkweGVjCisKKyNkZWZpbmUgUzVLODNBX0RFRkFVTFRfQlJJR0hUTkVTUwkweDcxCisjZGVmaW5lIFM1SzgzQV9ERUZBVUxUX1dISVRFTkVTUwkweDdlCisjZGVmaW5lIFM1SzgzQV9ERUZBVUxUX0dBSU4JCQkweDAwCisjZGVmaW5lIFM1SzgzQV9NQVhJTVVNX0dBSU4JCQkweDNjCisjZGVmaW5lIFM1SzgzQV9GTElQX01BU0sJCQkweDEwCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBLZXJuZWwgbW9kdWxlIHBhcmFtZXRlcnMgKi8KK2V4dGVybiBpbnQgZm9yY2Vfc2Vuc29yOworZXh0ZXJuIGludCBkdW1wX3NlbnNvcjsKKworaW50IHM1azgzYV9wcm9iZShzdHJ1Y3Qgc2QgKnNkKTsKK2ludCBzNWs4M2FfaW5pdChzdHJ1Y3Qgc2QgKnNkKTsKK2ludCBzNWs4M2FfcG93ZXJfZG93bihzdHJ1Y3Qgc2QgKnNkKTsKKwordm9pZCBzNWs4M2FfZHVtcF9yZWdpc3RlcnMoc3RydWN0IHNkICpzZCk7CisKK2ludCBzNWs4M2FfcmVhZF9zZW5zb3Ioc3RydWN0IHNkICpzZCwgY29uc3QgdTggYWRkcmVzcywKKwkJICAgICAgIHU4ICppMmNfZGF0YSwgY29uc3QgdTggbGVuKTsKK2ludCBzNWs4M2Ffd3JpdGVfc2Vuc29yKHN0cnVjdCBzZCAqc2QsIGNvbnN0IHU4IGFkZHJlc3MsCisJCQl1OCAqaTJjX2RhdGEsIGNvbnN0IHU4IGxlbik7CisKK2ludCBzNWs4M2Ffc2V0X2JyaWdodG5lc3Moc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpOworaW50IHM1azgzYV9nZXRfYnJpZ2h0bmVzcyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpOworaW50IHM1azgzYV9zZXRfd2hpdGVuZXNzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKTsKK2ludCBzNWs4M2FfZ2V0X3doaXRlbmVzcyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpOworaW50IHM1azgzYV9zZXRfZ2FpbihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCk7CitpbnQgczVrODNhX2dldF9nYWluKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCk7CitpbnQgczVrODNhX2dldF92ZmxpcChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpOworaW50IHM1azgzYV9zZXRfdmZsaXAoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpOworaW50IHM1azgzYV9nZXRfaGZsaXAoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKTsKK2ludCBzNWs4M2Ffc2V0X2hmbGlwKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKTsKKworCitzdGF0aWMgc3RydWN0IG01NjAyX3NlbnNvciBzNWs4M2EgPSB7CisJLm5hbWUgPSAiUzVLODNBIiwKKwkucHJvYmUgPSBzNWs4M2FfcHJvYmUsCisJLmluaXQgPSBzNWs4M2FfaW5pdCwKKwkucG93ZXJfZG93biA9IHM1azgzYV9wb3dlcl9kb3duLAorCS5yZWFkX3NlbnNvciA9IHM1azgzYV9yZWFkX3NlbnNvciwKKwkud3JpdGVfc2Vuc29yID0gczVrODNhX3dyaXRlX3NlbnNvciwKKwkuaTJjX3NsYXZlX2lkID0gMHg1YSwKKwkubmN0cmxzID0gNSwKKwkuY3RybHMgPSB7CisJeworCQl7CisJCQkuaWQgPSBWNEwyX0NJRF9CUklHSFRORVNTLAorCQkJLnR5cGUgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAorCQkJLm5hbWUgPSAiYnJpZ2h0bmVzcyIsCisJCQkubWluaW11bSA9IDB4MDAsCisJCQkubWF4aW11bSA9IDB4ZmYsCisJCQkuc3RlcCA9IDB4MDEsCisJCQkuZGVmYXVsdF92YWx1ZSA9IFM1SzgzQV9ERUZBVUxUX0JSSUdIVE5FU1MsCisJCQkuZmxhZ3MgPSBWNEwyX0NUUkxfRkxBR19TTElERVIKKwkJfSwKKwkJCS5zZXQgPSBzNWs4M2Ffc2V0X2JyaWdodG5lc3MsCisJCQkuZ2V0ID0gczVrODNhX2dldF9icmlnaHRuZXNzCisKKwl9LCB7CisJCXsKKwkJCS5pZCA9IFY0TDJfQ0lEX1dISVRFTkVTUywKKwkJCS50eXBlID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKKwkJCS5uYW1lID0gIndoaXRlbmVzcyIsCisJCQkubWluaW11bSA9IDB4MDAsCisJCQkubWF4aW11bSA9IDB4ZmYsCisJCQkuc3RlcCA9IDB4MDEsCisJCQkuZGVmYXVsdF92YWx1ZSA9IFM1SzgzQV9ERUZBVUxUX1dISVRFTkVTUywKKwkJCS5mbGFncyA9IFY0TDJfQ1RSTF9GTEFHX1NMSURFUgorCQl9LAorCQkJLnNldCA9IHM1azgzYV9zZXRfd2hpdGVuZXNzLAorCQkJLmdldCA9IHM1azgzYV9nZXRfd2hpdGVuZXNzLAorCX0sIHsKKwkJeworCQkJLmlkID0gVjRMMl9DSURfR0FJTiwKKwkJCS50eXBlID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKKwkJCS5uYW1lID0gImdhaW4iLAorCQkJLm1pbmltdW0gPSAweDAwLAorCQkJLm1heGltdW0gPSBTNUs4M0FfTUFYSU1VTV9HQUlOLAorCQkJLnN0ZXAgPSAweDAxLAorCQkJLmRlZmF1bHRfdmFsdWUgPSBTNUs4M0FfREVGQVVMVF9HQUlOLAorCQkJLmZsYWdzID0gVjRMMl9DVFJMX0ZMQUdfU0xJREVSCisJCX0sCisJCQkuc2V0ID0gczVrODNhX3NldF9nYWluLAorCQkJLmdldCA9IHM1azgzYV9nZXRfZ2FpbgorCX0sIHsKKwkJeworCQkJLmlkICAgICAgICAgPSBWNEwyX0NJRF9IRkxJUCwKKwkJCS50eXBlICAgICAgID0gVjRMMl9DVFJMX1RZUEVfQk9PTEVBTiwKKwkJCS5uYW1lICAgICAgID0gImhvcml6b250YWwgZmxpcCIsCisJCQkubWluaW11bSAgICA9IDAsCisJCQkubWF4aW11bSAgICA9IDEsCisJCQkuc3RlcCAgICAgICA9IDEsCisJCQkuZGVmYXVsdF92YWx1ZSAgPSAwCisJCX0sCisJCQkuc2V0ID0gczVrODNhX3NldF9oZmxpcCwKKwkJCS5nZXQgPSBzNWs4M2FfZ2V0X2hmbGlwCisJfSwgeworCQl7CisJCSAuaWQgICAgICAgICA9IFY0TDJfQ0lEX1ZGTElQLAorCQkudHlwZSAgICAgICA9IFY0TDJfQ1RSTF9UWVBFX0JPT0xFQU4sCisJCS5uYW1lICAgICAgID0gInZlcnRpY2FsIGZsaXAiLAorCQkubWluaW11bSAgICA9IDAsCisJCS5tYXhpbXVtICAgID0gMSwKKwkJLnN0ZXAgICAgICAgPSAxLAorCQkuZGVmYXVsdF92YWx1ZSAgPSAwCisJCX0sCisJCS5zZXQgPSBzNWs4M2Ffc2V0X3ZmbGlwLAorCQkuZ2V0ID0gczVrODNhX2dldF92ZmxpcAorCQl9CisJfSwKKwkubm1vZGVzID0gMSwKKwkubW9kZXMgPSB7CisJeworCQlNNTYwMl9ERUZBVUxUX0ZSQU1FX1dJRFRILAorCQlNNTYwMl9ERUZBVUxUX0ZSQU1FX0hFSUdIVCwKKwkJVjRMMl9QSVhfRk1UX1NCR0dSOCwKKwkJVjRMMl9GSUVMRF9OT05FLAorCQkuc2l6ZWltYWdlID0KKwkJCU01NjAyX0RFRkFVTFRfRlJBTUVfV0lEVEggKiBNNTYwMl9ERUZBVUxUX0ZSQU1FX0hFSUdIVCwKKwkJLmJ5dGVzcGVybGluZSA9IE01NjAyX0RFRkFVTFRfRlJBTUVfV0lEVEgsCisJCS5jb2xvcnNwYWNlID0gVjRMMl9DT0xPUlNQQUNFX1NSR0IsCisJCS5wcml2ID0gMQorCX0KKwl9Cit9OworCitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBwcmVpbml0X3M1azgzYVtdWzRdID0KK3sKKwl7QlJJREdFLCBNNTYwMl9YQl9NQ1VfQ0xLX0RJViwgMHgwMiwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfTUNVX0NMS19DVFJMLCAweGIwLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9TRU5fQ0xLX0RJViwgMHgwMCwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfU0VOX0NMS19DVFJMLCAweGIwLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9BRENfQ1RSTCwgMHhjMCwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfU0VOU09SX1RZUEUsIDB4MGQsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX1NFTlNPUl9DVFJMLCAweDAwLCAweDAwfSwKKworCXtCUklER0UsIE01NjAyX1hCX1NJR19JTkksIDB4MDAsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX0dQSU9fRElSLCAweDFkLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9HUElPX0RBVCwgMHgwOCwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfR1BJT19FTl9ILCAweDNmLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9HUElPX0RJUl9ILCAweDNmLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9HUElPX0RBVF9ILCAweDAwLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9HUElPX0VOX0wsIDB4ZmYsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX0dQSU9fRElSX0wsIDB4ZmYsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX0dQSU9fREFUX0wsIDB4MDAsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX1NFTl9DTEtfRElWLCAweGIwLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9TRU5fQ0xLX0NUUkwsIDB4ODAsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX1NFTl9DTEtfRElWLCAweDAwLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9TRU5fQ0xLX0NUUkwsIDB4YjAsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX0FEQ19DVFJMLCAweGMwLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9TRU5TT1JfVFlQRSwgMHgwOSwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfTUNVX0NMS19ESVYsIDB4MDIsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX01DVV9DTEtfQ1RSTCwgMHhiMCwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfU0VOX0NMS19ESVYsIDB4MDAsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX1NFTl9DTEtfQ1RSTCwgMHhmMCwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfR1BJT19ESVIsIDB4MWQsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX0dQSU9fREFULCAweDFjLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9HUElPX0VOX0gsIDB4MDYsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX0dQSU9fRElSX0gsIDB4MDYsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX0dQSU9fREFUX0gsIDB4MDAsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX0dQSU9fRU5fTCwgMHgwMCwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfSTJDX0NMS19ESVYsIDB4MjAsIDB4MDB9LAorCisJe1NFTlNPUiwgUzVLODNBX1BBR0VfTUFQLCAweDAwLCAweDAwfQorfTsKKworLyogVGhpcyBjb3VsZCBwcm9iYWJseSBiZSBjb25zaWRlcmFibHkgc2hvcnRlbmVkLgorICAgSSBkb24ndCBoYXZlIHRoZSBoYXJkd2FyZSB0byBleHBlcmltZW50IHdpdGggaXQsIHBhdGNoZXMgd2VsY29tZQorKi8KK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGluaXRfczVrODNhW11bNF0gPQoreworCXtTRU5TT1IsIFM1SzgzQV9QQUdFX01BUCwgMHgwNCwgMHgwMH0sCisJe1NFTlNPUiwgMHhhZiwgMHgwMSwgMHgwMH0sCisJe1NFTlNPUiwgUzVLODNBX1BBR0VfTUFQLCAweDAwLCAweDAwfSwKKwl7U0VOU09SLCAweDdiLCAweGZmLCAweDAwfSwKKwl7U0VOU09SLCBTNUs4M0FfUEFHRV9NQVAsIDB4MDUsIDB4MDB9LAorCXtTRU5TT1IsIDB4MDEsIDB4NTAsIDB4MDB9LAorCXtTRU5TT1IsIDB4MTIsIDB4MjAsIDB4MDB9LAorCXtTRU5TT1IsIDB4MTcsIDB4NDAsIDB4MDB9LAorCXtTRU5TT1IsIFM1SzgzQV9CUklHSFRORVNTLCAweDBmLCAweDAwfSwKKwl7U0VOU09SLCAweDFjLCAweDAwLCAweDAwfSwKKwl7U0VOU09SLCAweDAyLCAweDcwLCAweDAwfSwKKwl7U0VOU09SLCAweDAzLCAweDBiLCAweDAwfSwKKwl7U0VOU09SLCAweDA0LCAweGYwLCAweDAwfSwKKwl7U0VOU09SLCAweDA1LCAweDBiLCAweDAwfSwKKwl7U0VOU09SLCBTNUs4M0FfUEFHRV9NQVAsIDB4MDUsIDB4MDB9LAorCisJe0JSSURHRSwgTTU2MDJfWEJfU0VOX0NMS19ESVYsIDB4MDYsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX1NFTl9DTEtfQ1RSTCwgMHhiMCwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfQURDX0NUUkwsIDB4YzAsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX1NFTlNPUl9UWVBFLCAweDA5LCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9MSU5FX09GX0ZSQU1FX0gsIDB4ODEsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX1BJWF9PRl9MSU5FX0gsIDB4ODIsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX1NJR19JTkksIDB4MDEsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX1ZTWU5DX1BBUkEsIDB4MDAsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX1ZTWU5DX1BBUkEsIDB4MDAsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX1ZTWU5DX1BBUkEsIDB4MDAsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX1ZTWU5DX1BBUkEsIDB4MDAsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX1ZTWU5DX1BBUkEsIDB4MDEsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX1ZTWU5DX1BBUkEsIDB4ZTQsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX1ZTWU5DX1BBUkEsIDB4MDAsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX1ZTWU5DX1BBUkEsIDB4MDAsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX1NJR19JTkksIDB4MDAsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX1NJR19JTkksIDB4MDIsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX0hTWU5DX1BBUkEsIDB4MDAsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX0hTWU5DX1BBUkEsIDB4MDAsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX0hTWU5DX1BBUkEsIDB4MDIsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX0hTWU5DX1BBUkEsIDB4ODcsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX1NJR19JTkksIDB4MDAsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX1NFTl9DTEtfRElWLCAweDAwLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9TRU5fQ0xLX0NUUkwsIDB4YjAsIDB4MDB9LAorCisJe1NFTlNPUiwgUzVLODNBX1BBR0VfTUFQLCAweDA1LCAweDAwfSwKKwl7U0VOU09SLCAweDA2LCAweDcxLCAweDAwfSwKKwl7U0VOU09SLCAweDA3LCAweGU4LCAweDAwfSwKKwl7U0VOU09SLCAweDA4LCAweDAyLCAweDAwfSwKKwl7U0VOU09SLCAweDA5LCAweDg4LCAweDAwfSwKKwl7U0VOU09SLCAweDE0LCAweDAwLCAweDAwfSwKKwl7U0VOU09SLCAweDE1LCAweDIwLCAweDAwfSwKKwl7U0VOU09SLCAweDE5LCAweDAwLCAweDAwfSwKKwl7U0VOU09SLCAweDFhLCAweDk4LCAweDAwfSwKKwl7U0VOU09SLCAweDBmLCAweDAyLCAweDAwfSwKKwl7U0VOU09SLCAweDEwLCAweGU1LCAweDAwfSwKKwl7U0VOU09SLCBTNUs4M0FfUEFHRV9NQVAsIDB4MDUsIDB4MDB9LAorCXtTRU5TT1JfTE9ORywgMHgxNCwgMHgwMCwgMHgyMH0sCisJe1NFTlNPUl9MT05HLCAweDBkLCAweDAwLCAweDdkfSwKKwl7U0VOU09SX0xPTkcsIDB4MWIsIDB4MGQsIDB4MDV9LAorCisJe0JSSURHRSwgTTU2MDJfWEJfU0VOX0NMS19ESVYsIDB4MDYsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX1NFTl9DTEtfQ1RSTCwgMHhiMCwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfQURDX0NUUkwsIDB4YzAsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX1NFTlNPUl9UWVBFLCAweDA5LCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9MSU5FX09GX0ZSQU1FX0gsIDB4ODEsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX1BJWF9PRl9MSU5FX0gsIDB4ODIsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX1NJR19JTkksIDB4MDEsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX1ZTWU5DX1BBUkEsIDB4MDAsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX1ZTWU5DX1BBUkEsIDB4MDAsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX1ZTWU5DX1BBUkEsIDB4MDAsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX1ZTWU5DX1BBUkEsIDB4MDAsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX1ZTWU5DX1BBUkEsIDB4MDEsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX1ZTWU5DX1BBUkEsIDB4ZTQsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX1ZTWU5DX1BBUkEsIDB4MDAsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX1ZTWU5DX1BBUkEsIDB4MDAsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX1NJR19JTkksIDB4MDAsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX1NJR19JTkksIDB4MDIsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX0hTWU5DX1BBUkEsIDB4MDAsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX0hTWU5DX1BBUkEsIDB4MDAsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX0hTWU5DX1BBUkEsIDB4MDIsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX0hTWU5DX1BBUkEsIDB4ODcsIDB4MDB9LAorCisJe0JSSURHRSwgTTU2MDJfWEJfU0lHX0lOSSwgMHgwMCwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfR1BJT19ESVIsIDB4MWQsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX0dQSU9fREFULCAweDA4LCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9HUElPX0VOX0gsIDB4M2YsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX0dQSU9fRElSX0gsIDB4M2YsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX0dQSU9fREFUX0gsIDB4MDAsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX0dQSU9fRU5fTCwgMHhmZiwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfR1BJT19ESVJfTCwgMHhmZiwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfR1BJT19EQVRfTCwgMHgwMCwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfU0VOX0NMS19ESVYsIDB4YjAsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX1NFTl9DTEtfQ1RSTCwgMHg4MCwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfU0VOX0NMS19ESVYsIDB4MDAsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX1NFTl9DTEtfQ1RSTCwgMHhiMCwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfQURDX0NUUkwsIDB4YzAsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX1NFTlNPUl9UWVBFLCAweDA5LCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9NQ1VfQ0xLX0RJViwgMHgwMiwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfTUNVX0NMS19DVFJMLCAweGIwLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9TRU5fQ0xLX0RJViwgMHgwMCwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfU0VOX0NMS19DVFJMLCAweGYwLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9HUElPX0RJUiwgMHgxZCwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfR1BJT19EQVQsIDB4MWMsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX0dQSU9fRU5fSCwgMHgwNiwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfR1BJT19ESVJfSCwgMHgwNiwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfR1BJT19EQVRfSCwgMHgwMCwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfR1BJT19FTl9MLCAweDAwLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9JMkNfQ0xLX0RJViwgMHgyMCwgMHgwMH0sCisKKwl7U0VOU09SLCBTNUs4M0FfUEFHRV9NQVAsIDB4MDQsIDB4MDB9LAorCXtTRU5TT1IsIDB4YWYsIDB4MDEsIDB4MDB9LAorCXtTRU5TT1IsIFM1SzgzQV9QQUdFX01BUCwgMHgwNSwgMHgwMH0sCisJLyogZmYgKCBpbml0IHZhbHVlIClpcyB2ZXJ5IGRhcmspIHx8IDcxIGFuZCBmMCBiZXR0ZXIgKi8KKwl7U0VOU09SLCAweDdiLCAweGZmLCAweDAwfSwKKwl7U0VOU09SLCBTNUs4M0FfUEFHRV9NQVAsIDB4MDUsIDB4MDB9LAorCXtTRU5TT1IsIDB4MDEsIDB4NTAsIDB4MDB9LAorCXtTRU5TT1IsIDB4MTIsIDB4MjAsIDB4MDB9LAorCXtTRU5TT1IsIDB4MTcsIDB4NDAsIDB4MDB9LAorCXtTRU5TT1IsIFM1SzgzQV9CUklHSFRORVNTLCAweDBmLCAweDAwfSwKKwl7U0VOU09SLCAweDFjLCAweDAwLCAweDAwfSwKKwl7U0VOU09SLCAweDAyLCAweDcwLCAweDAwfSwKKwkvKiBzb21lIHZhbHVlcyBsaWtlIDB4MTAgZ2l2ZSBhIGJsdWUtcHVycGxlIGltYWdlICovCisJe1NFTlNPUiwgMHgwMywgMHgwYiwgMHgwMH0sCisJe1NFTlNPUiwgMHgwNCwgMHhmMCwgMHgwMH0sCisJe1NFTlNPUiwgMHgwNSwgMHgwYiwgMHgwMH0sCisJe1NFTlNPUiwgUzVLODNBX1BBR0VfTUFQLCAweDA1LCAweDAwfSwKKworCXtCUklER0UsIE01NjAyX1hCX1NFTl9DTEtfRElWLCAweDA2LCAweDAwfSwKKwkvKiB1bmRlciA4MCBkb24ndCB3b3JrLCBoaWdodGVyIGRlcGVuZCBvbiB2YWx1ZSAqLworCXtCUklER0UsIE01NjAyX1hCX1NFTl9DTEtfQ1RSTCwgMHhiMCwgMHgwMH0sCisKKwl7QlJJREdFLCBNNTYwMl9YQl9BRENfQ1RSTCwgMHhjMCwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfU0VOU09SX1RZUEUsIDB4MDksIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX0xJTkVfT0ZfRlJBTUVfSCwgMHg4MSwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfUElYX09GX0xJTkVfSCwgMHg4MiwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfU0lHX0lOSSwgMHgwMSwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfVlNZTkNfUEFSQSwgMHgwMCwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfVlNZTkNfUEFSQSwgMHgwMCwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfVlNZTkNfUEFSQSwgMHgwMCwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfVlNZTkNfUEFSQSwgMHgwMCwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfVlNZTkNfUEFSQSwgMHgwMSwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfVlNZTkNfUEFSQSwgMHhlNCwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfVlNZTkNfUEFSQSwgMHgwMCwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfVlNZTkNfUEFSQSwgMHgwMCwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfU0lHX0lOSSwgMHgwMiwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfSFNZTkNfUEFSQSwgMHgwMCwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfSFNZTkNfUEFSQSwgMHgwMCwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfSFNZTkNfUEFSQSwgMHgwMiwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfSFNZTkNfUEFSQSwgMHg3ZiwgMHgwMH0sCisKKwl7QlJJREdFLCBNNTYwMl9YQl9TSUdfSU5JLCAweDAwLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9TRU5fQ0xLX0RJViwgMHgwMCwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfU0VOX0NMS19DVFJMLCAweGIwLCAweDAwfSwKKworCXtTRU5TT1IsIFM1SzgzQV9QQUdFX01BUCwgMHgwNSwgMHgwMH0sCisJe1NFTlNPUiwgMHgwNiwgMHg3MSwgMHgwMH0sCisJe1NFTlNPUiwgMHgwNywgMHhlOCwgMHgwMH0sCisJe1NFTlNPUiwgMHgwOCwgMHgwMiwgMHgwMH0sCisJe1NFTlNPUiwgMHgwOSwgMHg4OCwgMHgwMH0sCisJe1NFTlNPUiwgMHgxNCwgMHgwMCwgMHgwMH0sCisJe1NFTlNPUiwgMHgxNSwgMHgyMCwgMHgwMH0sCisJe1NFTlNPUiwgMHgxOSwgMHgwMCwgMHgwMH0sCisJe1NFTlNPUiwgMHgxYSwgMHg5OCwgMHgwMH0sCisJe1NFTlNPUiwgMHgwZiwgMHgwMiwgMHgwMH0sCisJe1NFTlNPUiwgMHgxMCwgMHhlNSwgMHgwMH0sCisJe1NFTlNPUiwgUzVLODNBX1BBR0VfTUFQLCAweDA1LCAweDAwfSwKKwl7U0VOU09SX0xPTkcsIDB4MTQsIDB4MDAsIDB4MjB9LAorCXtTRU5TT1JfTE9ORywgMHgwZCwgMHgwMCwgMHg3ZH0sCisJe1NFTlNPUl9MT05HLCAweDFiLCAweDBkLCAweDA1fSwKKworCS8qIFRoZSBmb2xsb3dpbmcgc2VxdWVuY2UgaXMgdXNlbGVzcyBhZnRlciBhIGNsZWFuIGJvb3QKKwkgICBidXQgaXMgbmVjZXNzYXJ5IGFmdGVyIHJlc3VtZSBmcm9tIHN1c3BlbmQgKi8KKwl7QlJJREdFLCBNNTYwMl9YQl9HUElPX0RJUiwgMHgxZCwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfR1BJT19EQVQsIDB4MDgsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX0dQSU9fRU5fSCwgMHgzZiwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfR1BJT19ESVJfSCwgMHgzZiwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfR1BJT19EQVRfSCwgMHgwMCwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfR1BJT19FTl9MLCAweGZmLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9HUElPX0RJUl9MLCAweGZmLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9HUElPX0RBVF9MLCAweDAwLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9TRU5fQ0xLX0RJViwgMHhiMCwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfU0VOX0NMS19DVFJMLCAweDgwLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9TRU5fQ0xLX0RJViwgMHgwMCwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfU0VOX0NMS19DVFJMLCAweGIwLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9BRENfQ1RSTCwgMHhjMCwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfU0VOU09SX1RZUEUsIDB4MDksIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX01DVV9DTEtfRElWLCAweDAyLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9NQ1VfQ0xLX0NUUkwsIDB4YjAsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX1NFTl9DTEtfRElWLCAweDAwLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9TRU5fQ0xLX0NUUkwsIDB4ZjAsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX0dQSU9fRElSLCAweDFkLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9HUElPX0RBVCwgMHgxYywgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfR1BJT19FTl9ILCAweDA2LCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9HUElPX0RJUl9ILCAweDA2LCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9HUElPX0RBVF9ILCAweDAwLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9HUElPX0VOX0wsIDB4MDAsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX0kyQ19DTEtfRElWLCAweDIwLCAweDAwfSwKKworCXtTRU5TT1IsIFM1SzgzQV9QQUdFX01BUCwgMHgwNCwgMHgwMH0sCisJe1NFTlNPUiwgMHhhZiwgMHgwMSwgMHgwMH0sCisJe1NFTlNPUiwgUzVLODNBX1BBR0VfTUFQLCAweDAwLCAweDAwfSwKKwl7U0VOU09SLCAweDdiLCAweGZmLCAweDAwfSwKKwl7U0VOU09SLCBTNUs4M0FfUEFHRV9NQVAsIDB4MDUsIDB4MDB9LAorCXtTRU5TT1IsIDB4MDEsIDB4NTAsIDB4MDB9LAorCXtTRU5TT1IsIDB4MTIsIDB4MjAsIDB4MDB9LAorCXtTRU5TT1IsIDB4MTcsIDB4NDAsIDB4MDB9LAorCXtTRU5TT1IsIFM1SzgzQV9CUklHSFRORVNTLCAweDBmLCAweDAwfSwKKwl7U0VOU09SLCAweDFjLCAweDAwLCAweDAwfSwKKwl7U0VOU09SLCAweDAyLCAweDcwLCAweDAwfSwKKwl7U0VOU09SLCAweDAzLCAweDBiLCAweDAwfSwKKwl7U0VOU09SLCAweDA0LCAweGYwLCAweDAwfSwKKwl7U0VOU09SLCAweDA1LCAweDBiLCAweDAwfSwKKwl7U0VOU09SLCBTNUs4M0FfUEFHRV9NQVAsIDB4MDUsIDB4MDB9LAorCisJe0JSSURHRSwgTTU2MDJfWEJfU0VOX0NMS19ESVYsIDB4MDYsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX1NFTl9DTEtfQ1RSTCwgMHhiMCwgMHgwMH0sCisJe0JSSURHRSwgTTU2MDJfWEJfQURDX0NUUkwsIDB4YzAsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX1NFTlNPUl9UWVBFLCAweDA5LCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9MSU5FX09GX0ZSQU1FX0gsIDB4ODEsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX1BJWF9PRl9MSU5FX0gsIDB4ODIsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX1NJR19JTkksIDB4MDEsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX1ZTWU5DX1BBUkEsIDB4MDAsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX1ZTWU5DX1BBUkEsIDB4MDAsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX1ZTWU5DX1BBUkEsIDB4MDAsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX1ZTWU5DX1BBUkEsIDB4MDAsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX1ZTWU5DX1BBUkEsIDB4MDEsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX1ZTWU5DX1BBUkEsIDB4ZTQsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX1ZTWU5DX1BBUkEsIDB4MDAsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX1ZTWU5DX1BBUkEsIDB4MDAsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX1NJR19JTkksIDB4MDAsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX1NJR19JTkksIDB4MDIsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX0hTWU5DX1BBUkEsIDB4MDAsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX0hTWU5DX1BBUkEsIDB4MDAsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX0hTWU5DX1BBUkEsIDB4MDIsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX0hTWU5DX1BBUkEsIDB4N2YsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX1NJR19JTkksIDB4MDAsIDB4MDB9LAorCXtCUklER0UsIE01NjAyX1hCX1NFTl9DTEtfRElWLCAweDAwLCAweDAwfSwKKwl7QlJJREdFLCBNNTYwMl9YQl9TRU5fQ0xLX0NUUkwsIDB4YjAsIDB4MDB9LAorCisJe1NFTlNPUiwgUzVLODNBX1BBR0VfTUFQLCAweDA1LCAweDAwfSwKKwl7U0VOU09SLCAweDA2LCAweDcxLCAweDAwfSwKKwl7U0VOU09SLCAweDA3LCAweGU4LCAweDAwfSwKKwl7U0VOU09SLCAweDA4LCAweDAyLCAweDAwfSwKKwl7U0VOU09SLCAweDA5LCAweDg4LCAweDAwfSwKKwl7U0VOU09SLCAweDE0LCAweDAwLCAweDAwfSwKKwl7U0VOU09SLCAweDE1LCAweDIwLCAweDAwfSwKKwl7U0VOU09SLCAweDE5LCAweDAwLCAweDAwfSwKKwl7U0VOU09SLCAweDFhLCAweDk4LCAweDAwfSwKKwl7U0VOU09SLCAweDBmLCAweDAyLCAweDAwfSwKKworCXtTRU5TT1IsIDB4MTAsIDB4ZTUsIDB4MDB9LAorCXtTRU5TT1IsIFM1SzgzQV9QQUdFX01BUCwgMHgwNSwgMHgwMH0sCisJe1NFTlNPUl9MT05HLCAweDE0LCAweDAwLCAweDIwfSwKKwl7U0VOU09SX0xPTkcsIDB4MGQsIDB4MDAsIDB4N2R9LAorCXtTRU5TT1JfTE9ORywgMHgxYiwgMHgwZCwgMHgwNX0sCisKKwkvKiBub3JtYWwgY29sb3JzCisJICAgKHRoaXMgaXMgdmFsdWUgYWZ0ZXIgYm9vdCwgYnV0IGFmdGVyIHRyaWVzIGNhbiBiZSBkaWZmZXJlbnQpICovCisJe1NFTlNPUiwgMHgwMCwgMHgwNiwgMHgwMH0sCisKKwkvKiBzZXQgZGVmYXVsdCBicmlnaHRuZXNzICovCisJe1NFTlNPUl9MT05HLCAweDE0LCAweDAwLCAweDIwfSwKKwl7U0VOU09SX0xPTkcsIDB4MGQsIDB4MDEsIDB4MDB9LAorCXtTRU5TT1JfTE9ORywgMHgxYiwgUzVLODNBX0RFRkFVTFRfQlJJR0hUTkVTUyA+PiAzLAorCQkJICAgIFM1SzgzQV9ERUZBVUxUX0JSSUdIVE5FU1MgPj4gMX0sCisKKwkvKiBzZXQgZGVmYXVsdCB3aGl0ZW5lc3MgKi8KKwl7U0VOU09SLCBTNUs4M0FfV0hJVEVORVNTLCBTNUs4M0FfREVGQVVMVF9XSElURU5FU1MsIDB4MDB9LAorCisJLyogc2V0IGRlZmF1bHQgZ2FpbiAqLworCXtTRU5TT1JfTE9ORywgMHgxOCwgMHgwMCwgUzVLODNBX0RFRkFVTFRfR0FJTn0sCisKKwkvKiBzZXQgZGVmYXVsdCBmbGlwICovCisJe1NFTlNPUiwgUzVLODNBX1BBR0VfTUFQLCAweDA1LCAweDAwfSwKKwl7U0VOU09SLCBTNUs4M0FfRkxJUCwgMHgwMCB8IFM1SzgzQV9GTElQX01BU0ssIDB4MDB9LAorCXtTRU5TT1IsIFM1SzgzQV9IRkxJUF9UVU5FLCAweDBiLCAweDAwfSwKKwl7U0VOU09SLCBTNUs4M0FfVkZMSVBfVFVORSwgMHgwYSwgMHgwMH0KKworfTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL201NjAyL201NjAyX3NlbnNvci5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9tNTYwMi9tNTYwMl9zZW5zb3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MGM5YTQ4Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9tNTYwMi9tNTYwMl9zZW5zb3IuaApAQCAtMCwwICsxLDc2IEBACisvKgorICogVVNCIERyaXZlciBmb3IgQUxpIG01NjAyIGJhc2VkIHdlYmNhbXMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggRXJpayBBbmRyw6luCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgSWx5ZXMgR291dGEuIEJhc2VkIG9uIHRoZSBtNTYwM3ggTGludXggRHJpdmVyIFByb2plY3QuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgbTU2MDN4IExpbnV4IERyaXZlciBQcm9qZWN0IDxtNTYwMkB4M25nLmNvbS5icj4KKyAqCisgKiBQb3J0aW9ucyBvZiBjb2RlIHRvIFVTQiBpbnRlcmZhY2UgYW5kIEFMaSBkcml2ZXIgc29mdHdhcmUsCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgV2lsbGVtIER1aW5rZXIKKyAqIHY0bDIgaW50ZXJmYWNlIG1vZGVsZWQgYWZ0ZXIgdGhlIFY0TDIgZHJpdmVyCisgKiBmb3IgU045QzEweCBQQyBDYW1lcmEgQ29udHJvbGxlcnMKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHZlcnNpb24gMi4KKyAqCisgKi8KKworI2lmbmRlZiBNNTYwMl9TRU5TT1JfSF8KKyNkZWZpbmUgTTU2MDJfU0VOU09SX0hfCisKKyNpbmNsdWRlICJtNTYwMl9icmlkZ2UuaCIKKworI2RlZmluZSBNNTYwMl9ERUZBVUxUX0ZSQU1FX1dJRFRIICA2NDAKKyNkZWZpbmUgTTU2MDJfREVGQVVMVF9GUkFNRV9IRUlHSFQgNDgwCisKKyNkZWZpbmUgTTU2MDJfTUFYX0NUUkxTCQkoVjRMMl9DSURfTEFTVFAxIC0gVjRMMl9DSURfQkFTRSArIDEwKQorCisvKiBFbnVtZXJhdGVzIGFsbCBzdXBwb3J0ZWQgc2Vuc29ycyAqLworZW51bSBzZW5zb3JzIHsKKwlPVjk2NTBfU0VOU09SCT0gMSwKKwlTNUs4M0FfU0VOU09SCT0gMiwKKwlTNUs0QUFfU0VOU09SCT0gMywKKwlNVDlNMTExX1NFTlNPUgk9IDQsCisJUE8xMDMwX1NFTlNPUgk9IDUKK307CisKKy8qIEVudW1lcmF0ZXMgYWxsIHBvc3NpYmxlIGluc3RydWN0aW9uIHR5cGVzICovCitlbnVtIGluc3RydWN0aW9uIHsKKwlCUklER0UsCisJU0VOU09SLAorCVNFTlNPUl9MT05HCit9OworCitzdHJ1Y3QgbTU2MDJfc2Vuc29yIHsKKwkvKiBEZWZpbmVzIHRoZSBuYW1lIG9mIGEgc2Vuc29yICovCisJY2hhciBuYW1lWzMyXTsKKworCS8qIFdoYXQgaTJjIGFkZHJlc3MgdGhlIHNlbnNvciBpcyBjb25uZWN0ZWQgdG8gKi8KKwl1OCBpMmNfc2xhdmVfaWQ7CisKKwkvKiBQcm9iZXMgaWYgdGhlIHNlbnNvciBpcyBjb25uZWN0ZWQgKi8KKwlpbnQgKCpwcm9iZSkoc3RydWN0IHNkICpzZCk7CisKKwkvKiBQZXJmb3JtcyBhIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlICovCisJaW50ICgqaW5pdCkoc3RydWN0IHNkICpzZCk7CisKKwkvKiBQZXJmb3JtcyBhIHBvd2VyIGRvd24gc2VxdWVuY2UgKi8KKwlpbnQgKCpwb3dlcl9kb3duKShzdHJ1Y3Qgc2QgKnNkKTsKKworCS8qIFJlYWRzIGEgc2Vuc29yIHJlZ2lzdGVyICovCisJaW50ICgqcmVhZF9zZW5zb3IpKHN0cnVjdCBzZCAqc2QsIGNvbnN0IHU4IGFkZHJlc3MsCisJICAgICAgdTggKmkyY19kYXRhLCBjb25zdCB1OCBsZW4pOworCisJLyogV3JpdGVzIHRvIGEgc2Vuc29yIHJlZ2lzdGVyICovCisJaW50ICgqd3JpdGVfc2Vuc29yKShzdHJ1Y3Qgc2QgKnNkLCBjb25zdCB1OCBhZGRyZXNzLAorCSAgICAgIHU4ICppMmNfZGF0YSwgY29uc3QgdTggbGVuKTsKKworCWludCBuY3RybHM7CisJc3RydWN0IGN0cmwgY3RybHNbTTU2MDJfTUFYX0NUUkxTXTsKKworCWNoYXIgbm1vZGVzOworCXN0cnVjdCB2NGwyX3BpeF9mb3JtYXQgbW9kZXNbXTsKK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9tYXJzLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL21hcnMuYwppbmRleCA0ZDVkYjQ3Li4yNzdjYTM0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL21hcnMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL21hcnMuYwpAQCAtMTM0LDcgKzEzNCw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIHNkX3N0YXJ0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3N0YXRpYyBpbnQgc2Rfc3RhcnQoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQogewogCWludCBlcnJfY29kZTsKIAlfX3U4ICpkYXRhOwpAQCAtMTQzLDkgKzE0MywxMCBAQAogCWludCBpbnRwaXBlOwogCiAJUERFQlVHKERfU1RSRUFNLCAiY2FtZXJhIHN0YXJ0LCBpZmFjZSAlZCwgYWx0IDgiLCBnc3BjYV9kZXYtPmlmYWNlKTsKLQlpZiAodXNiX3NldF9pbnRlcmZhY2UoZ3NwY2FfZGV2LT5kZXYsIGdzcGNhX2Rldi0+aWZhY2UsIDgpIDwgMCkgeworCWVycl9jb2RlID0gdXNiX3NldF9pbnRlcmZhY2UoZ3NwY2FfZGV2LT5kZXYsIGdzcGNhX2Rldi0+aWZhY2UsIDgpOworCWlmIChlcnJfY29kZSA8IDApIHsKIAkJUERFQlVHKERfRVJSfERfU1RSRUFNLCAiU2V0IHBhY2tldCBzaXplOiBzZXQgaW50ZXJmYWNlIGVycm9yIik7Ci0JCXJldHVybjsKKwkJcmV0dXJuIGVycl9jb2RlOwogCX0KIAogCWRhdGEgPSBnc3BjYV9kZXYtPnVzYl9idWY7CkBAIC0xNTQsNyArMTU1LDcgQEAKIAogCWVycl9jb2RlID0gcmVnX3coZ3NwY2FfZGV2LCBkYXRhWzBdLCAyKTsKIAlpZiAoZXJyX2NvZGUgPCAwKQotCQlyZXR1cm47CisJCXJldHVybiBlcnJfY29kZTsKIAogCS8qCiAJICAgSW5pdGlhbGl6ZSB0aGUgTVI5NzExMyBjaGlwIHJlZ2lzdGVyCkBAIC0xODAsMTQgKzE4MSwxNCBAQAogCiAJZXJyX2NvZGUgPSByZWdfdyhnc3BjYV9kZXYsIGRhdGFbMF0sIDExKTsKIAlpZiAoZXJyX2NvZGUgPCAwKQotCQlyZXR1cm47CisJCXJldHVybiBlcnJfY29kZTsKIAogCWRhdGFbMF0gPSAweDIzOwkJLyogYWRkcmVzcyAqLwogCWRhdGFbMV0gPSAweDA5OwkJLyogcmVnIDM1LCBhcHBlbmQgZnJhbWUgaGVhZGVyICovCiAKIAllcnJfY29kZSA9IHJlZ193KGdzcGNhX2RldiwgZGF0YVswXSwgMik7CiAJaWYgKGVycl9jb2RlIDwgMCkKLQkJcmV0dXJuOworCQlyZXR1cm4gZXJyX2NvZGU7CiAKIAlkYXRhWzBdID0gMHgzYzsJCS8qIGFkZHJlc3MgKi8KIC8qCWlmIChnc3BjYV9kZXYtPndpZHRoID09IDEyODApICovCkBAIC0xOTgsNyArMTk5LDcgQEAKIAkJCQkgKgkodW5pdDogNEtCKSAyMDBLQiAqLwogCWVycl9jb2RlID0gcmVnX3coZ3NwY2FfZGV2LCBkYXRhWzBdLCAyKTsKIAlpZiAoZXJyX2NvZGUgPCAwKQotCQlyZXR1cm47CisJCXJldHVybiBlcnJfY29kZTsKIAogCWlmICgwKSB7CQkJLyogZml4ZWQgZGFyay1nYWluICovCiAJCWRhdGFbMV0gPSAwOwkJLyogcmVnIDk0LCBZIEdhaW4gKDEuNzUpICovCkBAIC0yNDAsMTMgKzI0MSwxMyBAQAogCiAJZXJyX2NvZGUgPSByZWdfdyhnc3BjYV9kZXYsIGRhdGFbMF0sIDYpOwogCWlmIChlcnJfY29kZSA8IDApCi0JCXJldHVybjsKKwkJcmV0dXJuIGVycl9jb2RlOwogCiAJZGF0YVswXSA9IDB4Njc7CiAJZGF0YVsxXSA9IDB4MTM7CQkvKiByZWcgMTAzLCBmaXJzdCBwaXhlbCBCLCBkaXNhYmxlIHNoYXJwbmVzcyAqLwogCWVycl9jb2RlID0gcmVnX3coZ3NwY2FfZGV2LCBkYXRhWzBdLCAyKTsKIAlpZiAoZXJyX2NvZGUgPCAwKQotCQlyZXR1cm47CisJCXJldHVybiBlcnJfY29kZTsKIAogCS8qCiAJICogaW5pdGlhbGl6ZSB0aGUgdmFsdWUgb2YgTUkgc2Vuc29yLi4uCkBAIC0zMjYsNiArMzI3LDcgQEAKIAlkYXRhWzBdID0gMHgwMDsKIAlkYXRhWzFdID0gMHg0ZDsJCS8qIElTT0MgdHJhbnNmZXJpbmcgZW5hYmxlLi4uICovCiAJcmVnX3coZ3NwY2FfZGV2LCBkYXRhWzBdLCAyKTsKKwlyZXR1cm4gZXJyX2NvZGU7CiB9CiAKIHN0YXRpYyB2b2lkIHNkX3N0b3BOKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evb3Y1MTkuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evb3Y1MTkuYwppbmRleCA0ZGY0ZWVjLi5jYTY3MTE5IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL292NTE5LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9vdjUxOS5jCkBAIC0xODU0LDcgKzE4NTQsNyBAQAogfQogCiAvKiAtLSBzdGFydCB0aGUgY2FtZXJhIC0tICovCi1zdGF0aWMgdm9pZCBzZF9zdGFydChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCitzdGF0aWMgaW50IHNkX3N0YXJ0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKIHsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CiAJaW50IHJldDsKQEAgLTE4NzEsOSArMTg3MSwxMCBAQAogCQlnb3RvIG91dDsKIAlQREVCVUcoRF9TVFJFQU0sICJjYW1lcmEgc3RhcnRlZCBhbHQ6IDB4JTAyeCIsIGdzcGNhX2Rldi0+YWx0KTsKIAlvdjUxeF9sZWRfY29udHJvbChzZCwgMSk7Ci0JcmV0dXJuOworCXJldHVybiAwOwogb3V0OgogCVBERUJVRyhEX0VSUiwgImNhbWVyYSBzdGFydCBlcnJvcjolZCIsIHJldCk7CisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIHZvaWQgc2Rfc3RvcE4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9wYWMyMDcuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvcGFjMjA3LmMKaW5kZXggODNiNWY3NC4uMGIwYzU3MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9wYWMyMDcuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3BhYzIwNy5jCkBAIC0yODEsNyArMjgxLDcgQEAKIH0KIAogLyogLS0gc3RhcnQgdGhlIGNhbWVyYSAtLSAqLwotc3RhdGljIHZvaWQgc2Rfc3RhcnQoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQorc3RhdGljIGludCBzZF9zdGFydChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCiB7CiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwogCV9fdTggbW9kZTsKQEAgLTMyMyw2ICszMjMsNyBAQAogCXNkLT5zb2ZfcmVhZCA9IDA7CiAJc2QtPmF1dG9nYWluX2lnbm9yZV9mcmFtZXMgPSAwOwogCWF0b21pY19zZXQoJnNkLT5hdmdfbHVtLCAtMSk7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB2b2lkIHNkX3N0b3BOKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKQEAgLTUzNCw2ICs1MzUsNyBAQAogCXtVU0JfREVWSUNFKDB4MDkzYSwgMHgyNDcwKX0sCiAJe1VTQl9ERVZJQ0UoMHgwOTNhLCAweDI0NzEpfSwKIAl7VVNCX0RFVklDRSgweDA5M2EsIDB4MjQ3Mil9LAorCXtVU0JfREVWSUNFKDB4MDkzYSwgMHgyNDc2KX0sCiAJe1VTQl9ERVZJQ0UoMHgyMDAxLCAweGYxMTUpfSwKIAl7fQogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvcGFjNzMxMS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9wYWM3MzExLmMKaW5kZXggYmE4NjViNy4uZTVmZjlhNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9wYWM3MzExLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9wYWM3MzExLmMKQEAgLTY3NSw3ICs2NzUsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBzZF9zdGFydChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCitzdGF0aWMgaW50IHNkX3N0YXJ0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKIHsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CiAKQEAgLTcyNCw2ICs3MjQsNyBAQAogCQlyZWdfdyhnc3BjYV9kZXYsIDB4NzgsIDB4MDEpOwogCWVsc2UKIAkJcmVnX3coZ3NwY2FfZGV2LCAweDc4LCAweDA1KTsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHZvaWQgc2Rfc3RvcE4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zb25peGIuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc29uaXhiLmMKaW5kZXggMTJiODFhZS4uNmM2OWJjNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zb25peGIuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3Nvbml4Yi5jCkBAIC00OTAsNyArNDkwLDcgQEAKIAl7MHgzMCwgMHgxMSwgMHgwMiwgMHgyMCwgMHg3MCwgMHgwMCwgMHgwMCwgMHgxMH0sCiB9OwogCi1zdHJ1Y3Qgc2Vuc29yX2RhdGEgc2Vuc29yX2RhdGFbXSA9IHsKK3N0YXRpYyBzdHJ1Y3Qgc2Vuc29yX2RhdGEgc2Vuc29yX2RhdGFbXSA9IHsKIFNFTlMoaW5pdEh2NzEzMSwgTlVMTCwgaHY3MTMxX3NlbnNvcl9pbml0LCBOVUxMLCBOVUxMLCAwLCBOT19FWFBPfE5PX0ZSRVEsIDApLAogU0VOUyhpbml0T3Y2NjUwLCBOVUxMLCBvdjY2NTBfc2Vuc29yX2luaXQsIE5VTEwsIE5VTEwsIEZfR0FJTnxGX1NJRiwgMCwgMHg2MCksCiBTRU5TKGluaXRPdjc2MzAsIGluaXRPdjc2MzBfMywgb3Y3NjMwX3NlbnNvcl9pbml0LCBOVUxMLCBvdjc2MzBfc2Vuc29yX2luaXRfMywKQEAgLTg5Miw3ICs4OTIsNyBAQAogfQogCiAvKiAtLSBzdGFydCB0aGUgY2FtZXJhIC0tICovCi1zdGF0aWMgdm9pZCBzZF9zdGFydChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCitzdGF0aWMgaW50IHNkX3N0YXJ0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKIHsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CiAJc3RydWN0IGNhbSAqY2FtID0gJmdzcGNhX2Rldi0+Y2FtOwpAQCAtOTc2LDYgKzk3Niw3IEBACiAJc2QtPmZyYW1lc190b19kcm9wID0gMDsKIAlzZC0+YXV0b2dhaW5faWdub3JlX2ZyYW1lcyA9IDA7CiAJYXRvbWljX3NldCgmc2QtPmF2Z19sdW0sIC0xKTsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHZvaWQgc2Rfc3RvcE4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zb25peGouYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc29uaXhqLmMKaW5kZXggNTcyYjBmMy4uNTNjYjgyZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zb25peGouYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3Nvbml4ai5jCkBAIC0zOSw2ICszOSw3IEBACiAJdW5zaWduZWQgY2hhciBjb250cmFzdDsKIAl1bnNpZ25lZCBjaGFyIGNvbG9yczsKIAl1bnNpZ25lZCBjaGFyIGF1dG9nYWluOworCV9fdTggdmZsaXA7CQkJLyogb3Y3NjMwIG9ubHkgKi8KIAogCXNpZ25lZCBjaGFyIGFnX2NudDsKICNkZWZpbmUgQUdfQ05UX1NUQVJUIDEzCkBAIC03MCw2ICs3MSw4IEBACiBzdGF0aWMgaW50IHNkX2dldGNvbG9ycyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpOwogc3RhdGljIGludCBzZF9zZXRhdXRvZ2FpbihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCk7CiBzdGF0aWMgaW50IHNkX2dldGF1dG9nYWluKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCk7CitzdGF0aWMgaW50IHNkX3NldHZmbGlwKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKTsKK3N0YXRpYyBpbnQgc2RfZ2V0dmZsaXAoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKTsKIAogc3RhdGljIHN0cnVjdCBjdHJsIHNkX2N0cmxzW10gPSB7CiAJewpAQCAtMTMxLDYgKzEzNCwyMiBAQAogCSAgICAuc2V0ID0gc2Rfc2V0YXV0b2dhaW4sCiAJICAgIC5nZXQgPSBzZF9nZXRhdXRvZ2FpbiwKIAl9LAorLyogb3Y3NjMwIG9ubHkgKi8KKyNkZWZpbmUgVkZMSVBfSURYIDQKKwl7CisJICAgIHsKKwkJLmlkICAgICAgPSBWNEwyX0NJRF9WRkxJUCwKKwkJLnR5cGUgICAgPSBWNEwyX0NUUkxfVFlQRV9CT09MRUFOLAorCQkubmFtZSAgICA9ICJWZmxpcCIsCisJCS5taW5pbXVtID0gMCwKKwkJLm1heGltdW0gPSAxLAorCQkuc3RlcCAgICA9IDEsCisjZGVmaW5lIFZGTElQX0RFRiAxCisJCS5kZWZhdWx0X3ZhbHVlID0gVkZMSVBfREVGLAorCSAgICB9LAorCSAgICAuc2V0ID0gc2Rfc2V0dmZsaXAsCisJICAgIC5nZXQgPSBzZF9nZXR2ZmxpcCwKKwl9LAogfTsKIAogc3RhdGljIHN0cnVjdCB2NGwyX3BpeF9mb3JtYXQgdmdhX21vZGVbXSA9IHsKQEAgLTI0OCwxMCArMjY3LDEyIEBACiAJMHhhNiwgMHhiMiwgMHhiZiwgMHhjYSwgMHhkNSwgMHhlMCwgMHhlYiwgMHhmNSwgMHhmZgogfTsKIAorLyogY29sb3IgbWF0cml4IGFuZCBvZmZzZXRzICovCiBzdGF0aWMgY29uc3QgX191OCByZWc4NFtdID0gewotCTB4MTQsIDB4MDAsIDB4MjcsIDB4MDAsIDB4MDcsIDB4MDAsIDB4ZTUsIDB4MGYsCi0JMHhlNCwgMHgwZiwgMHgzOCwgMHgwMCwgMHgzZSwgMHgwMCwgMHhjMywgMHgwZiwKLQkweGY3LCAweDBmLCAweDAwLCAweDAwLCAweDAwCisJMHgxNCwgMHgwMCwgMHgyNywgMHgwMCwgMHgwNywgMHgwMCwJLyogWVIgWUcgWUIgZ2FpbnMgKi8KKwkweGU4LCAweDBmLCAweGRhLCAweDBmLCAweDQwLCAweDAwLAkvKiBVUiBVRyBVQiAqLworCTB4M2UsIDB4MDAsIDB4Y2QsIDB4MGYsIDB4ZjcsIDB4MGYsCS8qIFZSIFZHIFZCICovCisJMHgwMCwgMHgwMCwgMHgwMAkJCS8qIFlVViBvZmZzZXRzICovCiB9Owogc3RhdGljIGNvbnN0IF9fdTggaHY3MTMxcl9zZW5zb3JfaW5pdFtdWzhdID0gewogCXsweEMxLCAweDExLCAweDAxLCAweDA4LCAweDAxLCAweDAwLCAweDAwLCAweDEwfSwKQEAgLTQzNCw3ICs0NTUsOCBAQAogCXsweGExLCAweDIxLCAweDEyLCAweDQ4LCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKIAl7MHhhMSwgMHgyMSwgMHgxMiwgMHg0OCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCiAvKmZpeG1lOiArIDB4MTIsIDB4MDQqLwotCXsweGExLCAweDIxLCAweDc1LCAweDgyLCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKKy8qCXsweGExLCAweDIxLCAweDc1LCAweDgyLCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwgICogQ09NTgorCQkJCQkJCSAqIHNldCBieSBzZXR2ZmxpcCAqLwogCXsweGExLCAweDIxLCAweDEwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKIAl7MHhhMSwgMHgyMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCiAJezB4YjEsIDB4MjEsIDB4MDEsIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MTB9LApAQCAtOTQ5LDYgKzk3MSw4IEBACiAJCWdzcGNhX2Rldi0+Y3RybF9kaXMgPSAoMSA8PCBBVVRPR0FJTl9JRFgpOwogCQlicmVhazsKIAl9CisJaWYgKHNkLT5zZW5zb3IgIT0gU0VOU09SX09WNzYzMCkKKwkJZ3NwY2FfZGV2LT5jdHJsX2RpcyB8PSAoMSA8PCBWRkxJUF9JRFgpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xMDgwLDIwICsxMTA0LDE3IEBACiBzdGF0aWMgdm9pZCBzZXRicmlnaHRjb250KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKIHsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7Ci0JdW5zaWduZWQgdmFsOworCWludCB2YWw7CiAJX191OCByZWc4NF9mdWxsWzB4MTVdOwogCi0JbWVtc2V0KHJlZzg0X2Z1bGwsIDAsIHNpemVvZiByZWc4NF9mdWxsKTsKLQl2YWwgPSBzZC0+Y29udHJhc3QgKiAweDIwIC8gQ09OVFJBU1RfTUFYICsgMHgxMDsJLyogMTAuLjMwICovCi0JcmVnODRfZnVsbFsyXSA9IHZhbDsKLQlyZWc4NF9mdWxsWzBdID0gKHZhbCArIDEpIC8gMjsKLQlyZWc4NF9mdWxsWzRdID0gKHZhbCArIDEpIC8gNTsKLQlpZiAodmFsID4gQlJJR0hUTkVTU19ERUYpCi0JCXZhbCA9IChzZC0+YnJpZ2h0bmVzcyAtIEJSSUdIVE5FU1NfREVGKSAqIDB4MjAKKwltZW1jcHkocmVnODRfZnVsbCwgcmVnODQsIHNpemVvZiByZWc4NF9mdWxsKTsKKwl2YWwgPSBzZC0+Y29udHJhc3QgKiAweDMwIC8gQ09OVFJBU1RfTUFYICsgMHgxMDsJLyogMTAuLjQwICovCisJcmVnODRfZnVsbFswXSA9ICh2YWwgKyAxKSAvIDI7CQkvKiByZWQgKi8KKwlyZWc4NF9mdWxsWzJdID0gdmFsOwkJCS8qIGdyZWVuICovCisJcmVnODRfZnVsbFs0XSA9ICh2YWwgKyAxKSAvIDU7CQkvKiBibHVlICovCisJdmFsID0gKHNkLT5icmlnaHRuZXNzIC0gQlJJR0hUTkVTU19ERUYpICogMHgxMAogCQkJLyBCUklHSFRORVNTX01BWDsKLQllbHNlCi0JCXZhbCA9IDA7Ci0JcmVnODRfZnVsbFsweDEyXSA9IHZhbDsJCQkvKiAwMC4uMWYgKi8KKwlyZWc4NF9mdWxsWzB4MTJdID0gdmFsICYgMHgxZjsJCS8qIDU6MCBzaWduZWQgdmFsdWUgKi8KIAlyZWdfdyhnc3BjYV9kZXYsIDB4ODQsIHJlZzg0X2Z1bGwsIHNpemVvZiByZWc4NF9mdWxsKTsKIH0KIApAQCAtMTE3Miw4ICsxMTkzLDE2IEBACiAJCXNkLT5hZ19jbnQgPSAtMTsKIH0KIAorc3RhdGljIHZvaWQgc2V0dmZsaXAoc3RydWN0IHNkICpzZCkKK3sKKwlpZiAoc2QtPnNlbnNvciAhPSBTRU5TT1JfT1Y3NjMwKQorCQlyZXR1cm47CisJaTJjX3cxKCZzZC0+Z3NwY2FfZGV2LCAweDc1LAkJCS8qIENPTU4gKi8KKwkJc2QtPnZmbGlwID8gMHg4MiA6IDB4MDIpOworfQorCiAvKiAtLSBzdGFydCB0aGUgY2FtZXJhIC0tICovCi1zdGF0aWMgdm9pZCBzZF9zdGFydChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCitzdGF0aWMgaW50IHNkX3N0YXJ0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKIHsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CiAJaW50IGk7CkBAIC0xMjYzLDYgKzEyOTIsNyBAQAogCQlicmVhazsKIAljYXNlIFNFTlNPUl9PVjc2MzA6CiAJCW92NzYzMF9Jbml0U2Vuc29yKGdzcGNhX2Rldik7CisJCXNldHZmbGlwKHNkKTsKIAkJcmVnMTcgPSAweGUyOwogCQlyZWcxID0gMHg0NDsKIAkJYnJlYWs7CkBAIC0xMzIwLDEyICsxMzUwLDE2IEBACiAJCXNldGJyaWdodG5lc3MoZ3NwY2FfZGV2KTsKIAkJc2V0Y29udHJhc3QoZ3NwY2FfZGV2KTsKIAkJYnJlYWs7CisJY2FzZSBTRU5TT1JfT1Y3NjMwOgorCQlzZXR2ZmxpcChzZCk7CisJCS8qIGZhbGwgdGhydSAqLwogCWRlZmF1bHQ6CQkJLyogT1Y3Nnh4ICovCiAJCXNldGJyaWdodGNvbnQoZ3NwY2FfZGV2KTsKIAkJYnJlYWs7CiAJfQogCXNldGF1dG9nYWluKGdzcGNhX2Rldik7CiAJcmVnX3cxKGdzcGNhX2RldiwgMHgwMSwgcmVnMSk7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB2b2lkIHNkX3N0b3BOKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKQEAgLTE1NDYsNiArMTU4MCwyNCBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IHNkX3NldHZmbGlwKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCXNkLT52ZmxpcCA9IHZhbDsKKwlpZiAoZ3NwY2FfZGV2LT5zdHJlYW1pbmcpCisJCXNldHZmbGlwKHNkKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzZF9nZXR2ZmxpcChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJKnZhbCA9IHNkLT52ZmxpcDsKKwlyZXR1cm4gMDsKK30KKwogLyogc3ViLWRyaXZlciBkZXNjcmlwdGlvbiAqLwogc3RhdGljIGNvbnN0IHN0cnVjdCBzZF9kZXNjIHNkX2Rlc2MgPSB7CiAJLm5hbWUgPSBNT0RVTEVfTkFNRSwKQEAgLTE1NjcsNiArMTYxOSw3IEBACiBzdGF0aWMgY29uc3QgX19kZXZpbml0ZGF0YSBzdHJ1Y3QgdXNiX2RldmljZV9pZCBkZXZpY2VfdGFibGVbXSA9IHsKICNpZiAhZGVmaW5lZCBDT05GSUdfVVNCX1NOOUMxMDIgJiYgIWRlZmluZWQgQ09ORklHX1VTQl9TTjlDMTAyX01PRFVMRQogCXtVU0JfREVWSUNFKDB4MDQ1OCwgMHg3MDI1KSwgQlNJKFNOOUMxMjAsIE1JMDM2MCwgMHg1ZCl9LAorCXtVU0JfREVWSUNFKDB4MDQ1OCwgMHg3MDJlKSwgQlNJKFNOOUMxMjAsIE9WNzY2MCwgMHgyMSl9LAogCXtVU0JfREVWSUNFKDB4MDQ1ZSwgMHgwMGY1KSwgQlNJKFNOOUMxMDUsIE9WNzY2MCwgMHgyMSl9LAogCXtVU0JfREVWSUNFKDB4MDQ1ZSwgMHgwMGY3KSwgQlNJKFNOOUMxMDUsIE9WNzY2MCwgMHgyMSl9LAogCXtVU0JfREVWSUNFKDB4MDQ3MSwgMHgwMzI3KSwgQlNJKFNOOUMxMDUsIE1JMDM2MCwgMHg1ZCl9LApAQCAtMTU4OCw3ICsxNjQxLDkgQEAKIC8qCXtVU0JfREVWSUNFKDB4MGM0NSwgMHg2MGZhKSwgQlNJKFNOOUMxMDUsIE9WNzY0OCwgMHg/Pyl9LCAqLwogCXtVU0JfREVWSUNFKDB4MGM0NSwgMHg2MGZiKSwgQlNJKFNOOUMxMDUsIE9WNzY2MCwgMHgyMSl9LAogCXtVU0JfREVWSUNFKDB4MGM0NSwgMHg2MGZjKSwgQlNJKFNOOUMxMDUsIEhWNzEzMVIsIDB4MTEpfSwKLS8qCXtVU0JfREVWSUNFKDB4MGM0NSwgMHg2MGZlKSwgQlNJKFNOOUMxMDUsIE9WNzYzMCwgMHg/Pyl9LCAqLworI2lmICFkZWZpbmVkIENPTkZJR19VU0JfU045QzEwMiAmJiAhZGVmaW5lZCBDT05GSUdfVVNCX1NOOUMxMDJfTU9EVUxFCisJe1VTQl9ERVZJQ0UoMHgwYzQ1LCAweDYwZmUpLCBCU0koU045QzEwNSwgT1Y3NjMwLCAweDIxKX0sCisjZW5kaWYKIC8qCXtVU0JfREVWSUNFKDB4MGM0NSwgMHg2MTA4KSwgQlNJKFNOOUMxMjAsIE9NNjgwMSwgMHg/Pyl9LCAqLwogLyoJe1VTQl9ERVZJQ0UoMHgwYzQ1LCAweDYxMjIpLCBCU0koU045QzExMCwgSUNNMTA1QywgMHg/Pyl9LCAqLwogLyoJe1VTQl9ERVZJQ0UoMHgwYzQ1LCAweDYxMjMpLCBCU0koU045QzExMCwgU2FueW9DQ0QsIDB4Pz8pfSwgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3BjYTUwMC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zcGNhNTAwLmMKaW5kZXggNmU3MzM5MC4uYmNhMTA2YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zcGNhNTAwLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zcGNhNTAwLmMKQEAgLTY2MCw3ICs2NjAsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBzZF9zdGFydChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCitzdGF0aWMgaW50IHNkX3N0YXJ0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKIHsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CiAJaW50IGVycjsKQEAgLTg2Nyw2ICs4NjcsNyBAQAogCQl3cml0ZV92ZWN0b3IoZ3NwY2FfZGV2LCBDbGlja3NtYXJ0NTEwX2RlZmF1bHRzKTsKIAkJYnJlYWs7CiAJfQorCXJldHVybiAwOwogfQogCiBzdGF0aWMgdm9pZCBzZF9zdG9wTihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3NwY2E1MDEuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3BjYTUwMS5jCmluZGV4IGU5ZWI1OWIuLmI3NDJmMjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3BjYTUwMS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3BjYTUwMS5jCkBAIC0xOTgwLDcgKzE5ODAsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBzZF9zdGFydChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCitzdGF0aWMgaW50IHNkX3N0YXJ0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKIHsKIAlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2ID0gZ3NwY2FfZGV2LT5kZXY7CiAJaW50IG1vZGU7CkBAIC0yMDEyLDYgKzIwMTIsNyBAQAogCXNldGJyaWdodG5lc3MoZ3NwY2FfZGV2KTsKIAlzZXRjb250cmFzdChnc3BjYV9kZXYpOwogCXNldGNvbG9ycyhnc3BjYV9kZXYpOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgdm9pZCBzZF9zdG9wTihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3NwY2E1MDUuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3BjYTUwNS5jCmluZGV4IGY2MDFkYWYuLmIzNDU3NDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3BjYTUwNS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3BjYTUwNS5jCkBAIC02ODgsNyArNjg4LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgc2Rfc3RhcnQoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQorc3RhdGljIGludCBzZF9zdGFydChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCiB7CiAJc3RydWN0IHVzYl9kZXZpY2UgKmRldiA9IGdzcGNhX2Rldi0+ZGV2OwogCWludCByZXQ7CkBAIC03MzMsNiArNzMzLDcgQEAKIC8qCXJlZ193cml0ZShkZXYsIDB4NSwgMHgwLCAweDApOyAqLwogLyoJcmVnX3dyaXRlKGRldiwgMHg1LCAweDAsIDB4MSk7ICovCiAvKglyZWdfd3JpdGUoZGV2LCAweDUsIDB4MTEsIDB4Mik7ICovCisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIHZvaWQgc2Rfc3RvcE4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zcGNhNTA2LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3NwY2E1MDYuYwppbmRleCAxOTVkY2U5Li42NDVlZTlkIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3NwY2E1MDYuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3NwY2E1MDYuYwpAQCAtNDIyLDcgKzQyMiw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIHNkX3N0YXJ0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3N0YXRpYyBpbnQgc2Rfc3RhcnQoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQogewogCXN0cnVjdCB1c2JfZGV2aWNlICpkZXYgPSBnc3BjYV9kZXYtPmRldjsKIAlfX3UxNiBub3JtZTsKQEAgLTU0OSw2ICs1NDksNyBAQAogCVBERUJVRyhEX1NUUkVBTSwgIndlYmNhbSBzdGFydGVkIik7CiAJc3BjYTUwNl9HZXROb3JtZUlucHV0KGdzcGNhX2RldiwgJm5vcm1lLCAmY2hhbm5lbCk7CiAJc3BjYTUwNl9TZXROb3JtZUlucHV0KGdzcGNhX2Rldiwgbm9ybWUsIGNoYW5uZWwpOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgdm9pZCBzZF9zdG9wTihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3NwY2E1MDguYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3BjYTUwOC5jCmluZGV4IDI4MWNlMDIuLjYzZWM5MDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3BjYTUwOC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3BjYTUwOC5jCkBAIC0xNTI4LDcgKzE1MjgsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBzZF9zdGFydChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCitzdGF0aWMgaW50IHNkX3N0YXJ0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKIHsKIAlpbnQgbW9kZTsKIApAQCAtMTU0Niw2ICsxNTQ2LDcgQEAKIAkJYnJlYWs7CiAJfQogCXJlZ193cml0ZShnc3BjYV9kZXYtPmRldiwgMHg4MTEyLCAweDEwIHwgMHgyMCk7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB2b2lkIHNkX3N0b3BOKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3BjYTU2MS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zcGNhNTYxLmMKaW5kZXggOTVmY2ZjYi4uMDIwYTAzYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zcGNhNTYxLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zcGNhNTYxLmMKQEAgLTE1Miw3ICsxNTIsNyBAQAogCiAJcmV0ID0gdXNiX2NvbnRyb2xfbXNnKGRldiwgdXNiX3NuZGN0cmxwaXBlKGRldiwgMCksCiAJCQkgICAgICAwLAkJLyogcmVxdWVzdCAqLwotCQkJICAgICAgVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0RFVklDRSwKKwkJCSAgICAgIFVTQl9ESVJfT1VUIHwgVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0RFVklDRSwKIAkJCSAgICAgIHZhbHVlLCBpbmRleCwgTlVMTCwgMCwgNTAwKTsKIAlQREVCVUcoRF9VU0JPLCAicmVnIHdyaXRlOiAweCUwMng6MHglMDJ4IiwgaW5kZXgsIHZhbHVlKTsKIAlpZiAocmV0IDwgMCkKQEAgLTY5OSw3ICs2OTksNyBAQAogCQlzZC0+YWdfY250ID0gLTE7CiB9CiAKLXN0YXRpYyB2b2lkIHNkX3N0YXJ0XzEyYShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCitzdGF0aWMgaW50IHNkX3N0YXJ0XzEyYShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCiB7CiAJc3RydWN0IHVzYl9kZXZpY2UgKmRldiA9IGdzcGNhX2Rldi0+ZGV2OwogCWludCBDbGNrID0gMHg4YTsgLyogbG93ZXIgMHg4WCB2YWx1ZXMgbGVhZCB0byBmcHMgPiAzMCAqLwpAQCAtNzI1LDggKzcyNSw5IEBACiAJc2V0d2hpdGUoZ3NwY2FfZGV2KTsKIAlzZXRhdXRvZ2Fpbihnc3BjYV9kZXYpOwogCXNldGV4cG9zdXJlKGdzcGNhX2Rldik7CisJcmV0dXJuIDA7CiB9Ci1zdGF0aWMgdm9pZCBzZF9zdGFydF83MmEoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQorc3RhdGljIGludCBzZF9zdGFydF83MmEoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQogewogCXN0cnVjdCB1c2JfZGV2aWNlICpkZXYgPSBnc3BjYV9kZXYtPmRldjsKIAlpbnQgQ2xjazsKQEAgLTc1MCw2ICs3NTEsNyBAQAogCXJlZ193X3ZhbChkZXYsIDB4ODcwMCwgQ2xjayk7CS8qIDB4MjcgY2xvY2sgKi8KIAlyZWdfd192YWwoZGV2LCAweDgxMTIsIDB4MTAgfCAweDIwKTsKIAlzZXRhdXRvZ2Fpbihnc3BjYV9kZXYpOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgdm9pZCBzZF9zdG9wTihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCkBAIC0xMDY0LDcgKzEwNjYsNyBAQAogCSAgICB7CiAJCS5pZCA9IFY0TDJfQ0lEX0RPX1dISVRFX0JBTEFOQ0UsCiAJCS50eXBlID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKLQkJLm5hbWUgPSAiV2hpbGUgQmFsYW5jZSIsCisJCS5uYW1lID0gIldoaXRlIEJhbGFuY2UiLAogCQkubWluaW11bSA9IFdISVRFX01JTiwKIAkJLm1heGltdW0gPSBXSElURV9NQVgsCiAJCS5zdGVwID0gMSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3RrMDE0LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3N0azAxNC5jCmluZGV4IDJmMmRlNDIuLmQ5ZDY0OTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3RrMDE0LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zdGswMTQuYwpAQCAtMzI0LDcgKzMyNCw3IEBACiB9CiAKIC8qIC0tIHN0YXJ0IHRoZSBjYW1lcmEgLS0gKi8KLXN0YXRpYyB2b2lkIHNkX3N0YXJ0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3N0YXRpYyBpbnQgc2Rfc3RhcnQoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQogewogCWludCByZXQsIHZhbHVlOwogCkBAIC0zNzQsOSArMzc0LDEwIEBACiAJc2V0X3Bhcihnc3BjYV9kZXYsIDB4MDEwMDAwMDApOwogCXNldF9wYXIoZ3NwY2FfZGV2LCAweDAxMDAwMDAwKTsKIAlQREVCVUcoRF9TVFJFQU0sICJjYW1lcmEgc3RhcnRlZCBhbHQ6IDB4JTAyeCIsIGdzcGNhX2Rldi0+YWx0KTsKLQlyZXR1cm47CisJcmV0dXJuIDA7CiBvdXQ6CiAJUERFQlVHKERfRVJSfERfU1RSRUFNLCAiY2FtZXJhIHN0YXJ0IGVyciAlZCIsIHJldCk7CisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIHZvaWQgc2Rfc3RvcE4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zdW5wbHVzLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3N1bnBsdXMuYwppbmRleCAxY2ZjYzZjLi5iZDkyODg2IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3N1bnBsdXMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3N1bnBsdXMuYwpAQCAtOTYxLDcgKzk2MSw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIHNkX3N0YXJ0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3N0YXRpYyBpbnQgc2Rfc3RhcnQoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQogewogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKIAlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2ID0gZ3NwY2FfZGV2LT5kZXY7CkBAIC0xMDQyLDYgKzEwNDIsNyBAQAogCQlicmVhazsKIAl9CiAJc3A1eHhfaW5pdENvbnRCcmlnSHVlUmVnaXN0ZXJzKGdzcGNhX2Rldik7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB2b2lkIHNkX3N0b3BOKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvdDYxMy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS90NjEzLmMKaW5kZXggZjAzNGM3NC4uZWFjMjQ1ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS90NjEzLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS90NjEzLmMKQEAgLTI4LDggKzI4LDYgQEAKIAogI2luY2x1ZGUgImdzcGNhLmgiCiAKLSNkZWZpbmUgTUFYX0dBTU1BIDB4MTAJCS8qIDAgdG8gMTUgKi8KLQogI2RlZmluZSBWNEwyX0NJRF9FRkZFQ1RTIChWNEwyX0NJRF9QUklWQVRFX0JBU0UgKyAwKQogCiBNT0RVTEVfQVVUSE9SKCJMZWFuZHJvIENvc3RhbnRpbm8gPGxlX2Nvc3RhbnRpbm9AcGl4YXJ0YXJnZW50aW5hLmNvbS5hcj4iKTsKQEAgLTQ5LDYgKzQ3LDEwIEBACiAJdW5zaWduZWQgY2hhciB3aGl0ZWJhbGFuY2U7CiAJdW5zaWduZWQgY2hhciBtaXJyb3I7CiAJdW5zaWduZWQgY2hhciBlZmZlY3Q7CisKKwlfX3U4IHNlbnNvcjsKKyNkZWZpbmUgU0VOU09SX1RBUzUxMzBBIDAKKyNkZWZpbmUgU0VOU09SX09NNjgwMiAxCiB9OwogCiAvKiBWNEwyIGNvbnRyb2xzIHN1cHBvcnRlZCBieSB0aGUgZHJpdmVyICovCkBAIC04Myw5ICs4NSw5IEBACiAJICAudHlwZSA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCiAJICAubmFtZSA9ICJCcmlnaHRuZXNzIiwKIAkgIC5taW5pbXVtID0gMCwKLQkgIC5tYXhpbXVtID0gMHgwZiwKKwkgIC5tYXhpbXVtID0gMTQsCiAJICAuc3RlcCA9IDEsCi0JICAuZGVmYXVsdF92YWx1ZSA9IDB4MDksCisJICAuZGVmYXVsdF92YWx1ZSA9IDgsCiAJICB9LAogCSAuc2V0ID0gc2Rfc2V0YnJpZ2h0bmVzcywKIAkgLmdldCA9IHNkX2dldGJyaWdodG5lc3MsCkBAIC0xMTgsMTYgKzEyMCwxNyBAQAogCSAuc2V0ID0gc2Rfc2V0Y29sb3JzLAogCSAuZ2V0ID0gc2RfZ2V0Y29sb3JzLAogCSB9LAotI2RlZmluZSBTRF9HQU1NQSAzCisjZGVmaW5lIEdBTU1BX01BWCAxNgorI2RlZmluZSBHQU1NQV9ERUYgMTAKIAl7CiAJIHsKIAkgIC5pZCA9IFY0TDJfQ0lEX0dBTU1BLAkvKiAoZ2FtbWEgb24gd2luKSAqLwogCSAgLnR5cGUgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAotCSAgLm5hbWUgPSAiR2FtbWEgKFVudGVzdGVkKSIsCisJICAubmFtZSA9ICJHYW1tYSIsCiAJICAubWluaW11bSA9IDAsCi0JICAubWF4aW11bSA9IE1BWF9HQU1NQSwKKwkgIC5tYXhpbXVtID0gR0FNTUFfTUFYIC0gMSwKIAkgIC5zdGVwID0gMSwKLQkgIC5kZWZhdWx0X3ZhbHVlID0gMHgwOSwKKwkgIC5kZWZhdWx0X3ZhbHVlID0gR0FNTUFfREVGLAogCSAgfSwKIAkgLnNldCA9IHNkX3NldGdhbW1hLAogCSAuZ2V0ID0gc2RfZ2V0Z2FtbWEsCkBAIC0xODUsNyArMTg4LDcgQEAKIAkgIC5taW5pbXVtID0gMCwKIAkgIC5tYXhpbXVtID0gMSwKIAkgIC5zdGVwID0gMSwKLQkgIC5kZWZhdWx0X3ZhbHVlID0gMSwKKwkgIC5kZWZhdWx0X3ZhbHVlID0gMCwKIAkgIH0sCiAJIC5zZXQgPSBzZF9zZXR3aGl0ZWJhbGFuY2UsCiAJIC5nZXQgPSBzZF9nZXR3aGl0ZWJhbGFuY2UKQEAgLTE5Nyw3ICsyMDAsNyBAQAogCSAgLnR5cGUgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAogCSAgLm5hbWUgPSAiU2hhcnBuZXNzIiwKIAkgIC5taW5pbXVtID0gMCwKLQkgIC5tYXhpbXVtID0gTUFYX0dBTU1BLAkvKiAwIHRvIDE2ICovCisJICAubWF4aW11bSA9IDE1LAogCSAgLnN0ZXAgPSAxLAogCSAgLmRlZmF1bHRfdmFsdWUgPSAweDA2LAogCSAgfSwKQEAgLTI1OCw3ICsyNjEsNTkgQEAKIAkJLnByaXYgPSAwfSwKIH07CiAKLSNkZWZpbmUgVDE2X09GRlNFVF9EQVRBIDYzMQorLyogc2Vuc29yIHNwZWNpZmljIGRhdGEgKi8KK3N0cnVjdCBhZGRpdGlvbmFsX3NlbnNvcl9kYXRhIHsKKwljb25zdCBfX3U4IGRhdGExWzIwXTsKKwljb25zdCBfX3U4IGRhdGEyWzE4XTsKKwljb25zdCBfX3U4IGRhdGEzWzE4XTsKKwljb25zdCBfX3U4IGRhdGE0WzRdOworCWNvbnN0IF9fdTggZGF0YTVbNl07CisJY29uc3QgX191OCBzdHJlYW1bNF07Cit9OworCitjb25zdCBzdGF0aWMgc3RydWN0IGFkZGl0aW9uYWxfc2Vuc29yX2RhdGEgc2Vuc29yX2RhdGFbXSA9IHsKKyAgICB7CQkJCS8qIFRBUzUxMzBBICovCisJLmRhdGExID0KKwkJezB4ZDAsIDB4YmIsIDB4ZDEsIDB4MjgsIDB4ZDIsIDB4MTAsIDB4ZDMsIDB4MTAsCisJCSAweGQ0LCAweGJiLCAweGQ1LCAweDI4LCAweGQ2LCAweDFlLCAweGQ3LCAweDI3LAorCQkgMHhkOCwgMHhjOCwgMHhkOSwgMHhmY30sCisJLmRhdGEyID0KKwkJezB4ZTAsIDB4NjAsIDB4ZTEsIDB4YTgsIDB4ZTIsIDB4ZTAsIDB4ZTMsIDB4NjAsCisJCSAweGU0LCAweGE4LCAweGU1LCAweGUwLCAweGU2LCAweDYwLCAweGU3LCAweGE4LAorCQkgMHhlOCwgMHhlMH0sCisJLmRhdGEzID0KKwkJezB4YzcsIDB4NjAsIDB4YzgsIDB4YTgsIDB4YzksIDB4ZTAsIDB4Y2EsIDB4NjAsCisJCSAweGNiLCAweGE4LCAweGNjLCAweGUwLCAweGNkLCAweDYwLCAweGNlLCAweGE4LAorCQkgMHhjZiwgMHhlMH0sCisJLmRhdGE0ID0JLyogRnJlcSAoNTAvNjBIeikuIFNwbGl0dGVkIGZvciB0ZXN0IHB1cnBvc2UgKi8KKwkJezB4NjYsIDB4MDAsIDB4YTgsIDB4ZTh9LAorCS5kYXRhNSA9CisJCXsweDBjLCAweDAzLCAweGFiLCAweDEwLCAweDgxLCAweDIwfSwKKwkuc3RyZWFtID0KKwkJezB4MGIsIDB4MDQsIDB4MGEsIDB4NDB9LAorICAgIH0sCisgICAgewkJCQkvKiBPTTY4MDIgKi8KKwkuZGF0YTEgPQorCQl7MHhkMCwgMHhjMiwgMHhkMSwgMHgyOCwgMHhkMiwgMHgwZiwgMHhkMywgMHgyMiwKKwkJIDB4ZDQsIDB4Y2QsIDB4ZDUsIDB4MjcsIDB4ZDYsIDB4MmMsIDB4ZDcsIDB4MDYsCisJCSAweGQ4LCAweGIzLCAweGQ5LCAweGZjfSwKKwkuZGF0YTIgPQorCQl7MHhlMCwgMHg4MCwgMHhlMSwgMHhmZiwgMHhlMiwgMHhmZiwgMHhlMywgMHg4MCwKKwkJIDB4ZTQsIDB4ZmYsIDB4ZTUsIDB4ZmYsIDB4ZTYsIDB4ODAsIDB4ZTcsIDB4ZmYsCisJCSAweGU4LCAweGZmfSwKKwkuZGF0YTMgPQorCQl7MHhjNywgMHg4MCwgMHhjOCwgMHhmZiwgMHhjOSwgMHhmZiwgMHhjYSwgMHg4MCwKKwkJIDB4Y2IsIDB4ZmYsIDB4Y2MsIDB4ZmYsIDB4Y2QsIDB4ODAsIDB4Y2UsIDB4ZmYsCisJCSAweGNmLCAweGZmfSwKKwkuZGF0YTQgPQkvKkZyZXEgKDUwLzYwSHopLiBTcGxpdHRlZCBmb3IgdGVzdCBwdXJwb3NlICovCisJCXsweDY2LCAweGNhLCAweGE4LCAweGYwIH0sCisJLmRhdGE1ID0JLyogdGhpcyBjb3VsZCBiZSByZW1vdmVkIGxhdGVyICovCisJCXsweDBjLCAweDAzLCAweGFiLCAweDEzLCAweDgxLCAweDIzfSwKKwkuc3RyZWFtID0KKwkJezB4MGIsIDB4MDQsIDB4MGEsIDB4Nzh9LAorICAgIH0KK307CisKICNkZWZpbmUgTUFYX0VGRkVDVFMgNwogLyogZWFzaWx5IGRvbmUgYnkgc29mdCwgdGhpcyB0YWJsZSBjb3VsZCBiZSByZW1vdmVkLAogICogaSBrZWVwIGl0IGhlcmUganVzdCBpbiBjYXNlICovCkBAIC0yNzIsODcgKzMyNyw4NyBAQAogCXsweGE4LCAweGM4LCAweGM2LCAweGQyLCAweGMwLCAweDQwfSwJLyogTmVnYXRpdmUgKi8KIH07CiAKLXN0YXRpYyBjb25zdCBfX3U4IGdhbW1hX3RhYmxlW01BWF9HQU1NQV1bMzRdID0gewotCXsweDkwLCAweDAwLCAweDkxLCAweDNlLCAweDkyLCAweDY5LCAweDkzLCAweDg1LAorc3RhdGljIGNvbnN0IF9fdTggZ2FtbWFfdGFibGVbR0FNTUFfTUFYXVszNF0gPSB7CisJezB4OTAsIDB4MDAsIDB4OTEsIDB4M2UsIDB4OTIsIDB4NjksIDB4OTMsIDB4ODUsCS8qIDAgKi8KIAkgMHg5NCwgMHg5NSwgMHg5NSwgMHhhMSwgMHg5NiwgMHhhZSwgMHg5NywgMHhiOSwKIAkgMHg5OCwgMHhjMiwgMHg5OSwgMHhjYiwgMHg5YSwgMHhkNCwgMHg5YiwgMHhkYiwKIAkgMHg5YywgMHhlMywgMHg5ZCwgMHhlYSwgMHg5ZSwgMHhmMSwgMHg5ZiwgMHhmOCwKIAkgMHhhMCwgMHhmZn0sCi0JezB4OTAsIDB4MDAsIDB4OTEsIDB4MzMsIDB4OTIsIDB4NUEsIDB4OTMsIDB4NzUsCi0JIDB4OTQsIDB4ODUsIDB4OTUsIDB4OTMsIDB4OTYsIDB4QTEsIDB4OTcsIDB4QUQsCi0JIDB4OTgsIDB4QjcsIDB4OTksIDB4QzIsIDB4OUEsIDB4Q0IsIDB4OUIsIDB4RDQsCi0JIDB4OUMsIDB4REUsIDB4OUQsIDB4RTcsIDB4OUUsIDB4RjAsIDB4OUYsIDB4RjcsCisJezB4OTAsIDB4MDAsIDB4OTEsIDB4MzMsIDB4OTIsIDB4NWEsIDB4OTMsIDB4NzUsCS8qIDEgKi8KKwkgMHg5NCwgMHg4NSwgMHg5NSwgMHg5MywgMHg5NiwgMHhhMSwgMHg5NywgMHhhZCwKKwkgMHg5OCwgMHhiNywgMHg5OSwgMHhjMiwgMHg5YSwgMHhjYiwgMHg5YiwgMHhkNCwKKwkgMHg5YywgMHhkZSwgMHg5RCwgMHhlNywgMHg5ZSwgMHhmMCwgMHg5ZiwgMHhmNywKIAkgMHhhMCwgMHhmZn0sCi0JezB4OTAsIDB4MDAsIDB4OTEsIDB4MkYsIDB4OTIsIDB4NTEsIDB4OTMsIDB4NkIsCi0JIDB4OTQsIDB4N0MsIDB4OTUsIDB4OEEsIDB4OTYsIDB4OTksIDB4OTcsIDB4QTYsCi0JIDB4OTgsIDB4QjEsIDB4OTksIDB4QkMsIDB4OUEsIDB4QzYsIDB4OUIsIDB4RDAsCi0JIDB4OUMsIDB4REIsIDB4OUQsIDB4RTQsIDB4OUUsIDB4RUQsIDB4OUYsIDB4RjYsCisJezB4OTAsIDB4MDAsIDB4OTEsIDB4MmYsIDB4OTIsIDB4NTEsIDB4OTMsIDB4NmIsCS8qIDIgKi8KKwkgMHg5NCwgMHg3YywgMHg5NSwgMHg4YSwgMHg5NiwgMHg5OSwgMHg5NywgMHhhNiwKKwkgMHg5OCwgMHhiMSwgMHg5OSwgMHhiYywgMHg5YSwgMHhjNiwgMHg5YiwgMHhkMCwKKwkgMHg5YywgMHhkYiwgMHg5ZCwgMHhlNCwgMHg5ZSwgMHhlZCwgMHg5ZiwgMHhmNiwKIAkgMHhhMCwgMHhmZn0sCi0JezB4OTAsIDB4MDAsIDB4OTEsIDB4MjksIDB4OTIsIDB4NDgsIDB4OTMsIDB4NjAsCi0JIDB4OTQsIDB4NzIsIDB4OTUsIDB4ODEsIDB4OTYsIDB4OTAsIDB4OTcsIDB4OUUsCi0JIDB4OTgsIDB4QUEsIDB4OTksIDB4QjUsIDB4OUEsIDB4QkYsIDB4OUIsIDB4Q0IsCi0JIDB4OUMsIDB4RDYsIDB4OUQsIDB4RTEsIDB4OUUsIDB4RUIsIDB4OUYsIDB4RjUsCisJezB4OTAsIDB4MDAsIDB4OTEsIDB4MjksIDB4OTIsIDB4NDgsIDB4OTMsIDB4NjAsCS8qIDMgKi8KKwkgMHg5NCwgMHg3MiwgMHg5NSwgMHg4MSwgMHg5NiwgMHg5MCwgMHg5NywgMHg5ZSwKKwkgMHg5OCwgMHhhYSwgMHg5OSwgMHhiNSwgMHg5YSwgMHhiZiwgMHg5YiwgMHhjYiwKKwkgMHg5YywgMHhkNiwgMHg5ZCwgMHhlMSwgMHg5ZSwgMHhlYiwgMHg5ZiwgMHhmNSwKIAkgMHhhMCwgMHhmZn0sCi0JezB4OTAsIDB4MDAsIDB4OTEsIDB4MjMsIDB4OTIsIDB4M0YsIDB4OTMsIDB4NTUsCisJezB4OTAsIDB4MDAsIDB4OTEsIDB4MjMsIDB4OTIsIDB4M2YsIDB4OTMsIDB4NTUsCS8qIDQgKi8KIAkgMHg5NCwgMHg2OCwgMHg5NSwgMHg3NywgMHg5NiwgMHg4NiwgMHg5NywgMHg5NSwKLQkgMHg5OCwgMHhBMiwgMHg5OSwgMHhBRCwgMHg5QSwgMHhCOSwgMHg5QiwgMHhDNiwKLQkgMHg5QywgMHhEMiwgMHg5RCwgMHhERSwgMHg5RSwgMHhFOSwgMHg5RiwgMHhGNCwKKwkgMHg5OCwgMHhhMiwgMHg5OSwgMHhhZCwgMHg5YSwgMHhiOSwgMHg5YiwgMHhjNiwKKwkgMHg5YywgMHhkMiwgMHg5ZCwgMHhkZSwgMHg5ZSwgMHhlOSwgMHg5ZiwgMHhmNCwKIAkgMHhhMCwgMHhmZn0sCi0JezB4OTAsIDB4MDAsIDB4OTEsIDB4MUIsIDB4OTIsIDB4MzMsIDB4OTMsIDB4NDgsCisJezB4OTAsIDB4MDAsIDB4OTEsIDB4MWIsIDB4OTIsIDB4MzMsIDB4OTMsIDB4NDgsCS8qIDUgKi8KIAkgMHg5NCwgMHg1OSwgMHg5NSwgMHg2OSwgMHg5NiwgMHg3OSwgMHg5NywgMHg4NywKLQkgMHg5OCwgMHg5NiwgMHg5OSwgMHhBMywgMHg5QSwgMHhCMSwgMHg5QiwgMHhCRSwKLQkgMHg5QywgMHhDQywgMHg5RCwgMHhEQSwgMHg5RSwgMHhFNywgMHg5RiwgMHhGMywKKwkgMHg5OCwgMHg5NiwgMHg5OSwgMHhhMywgMHg5YSwgMHhiMSwgMHg5YiwgMHhiZSwKKwkgMHg5YywgMHhjYywgMHg5ZCwgMHhkYSwgMHg5ZSwgMHhlNywgMHg5ZiwgMHhmMywKIAkgMHhhMCwgMHhmZn0sCi0JezB4OTAsIDB4MDAsIDB4OTEsIDB4MDIsIDB4OTIsIDB4MTAsIDB4OTMsIDB4MjAsCisJezB4OTAsIDB4MDAsIDB4OTEsIDB4MDIsIDB4OTIsIDB4MTAsIDB4OTMsIDB4MjAsCS8qIDYgKi8KIAkgMHg5NCwgMHgzMiwgMHg5NSwgMHg0MCwgMHg5NiwgMHg1NywgMHg5NywgMHg2NywKIAkgMHg5OCwgMHg3NywgMHg5OSwgMHg4OCwgMHg5YSwgMHg5OSwgMHg5YiwgMHhhYSwKIAkgMHg5YywgMHhiYiwgMHg5ZCwgMHhjYywgMHg5ZSwgMHhkZCwgMHg5ZiwgMHhlZSwKIAkgMHhhMCwgMHhmZn0sCi0JezB4OTAsIDB4MDAsIDB4OTEsIDB4MDIsIDB4OTIsIDB4MTQsIDB4OTMsIDB4MjYsCi0JIDB4OTQsIDB4MzgsIDB4OTUsIDB4NEEsIDB4OTYsIDB4NjAsIDB4OTcsIDB4NzAsCi0JIDB4OTgsIDB4ODAsIDB4OTksIDB4OTAsIDB4OUEsIDB4QTAsIDB4OUIsIDB4QjAsCi0JIDB4OUMsIDB4QzAsIDB4OUQsIDB4RDAsIDB4OUUsIDB4RTAsIDB4OUYsIDB4RjAsCisJezB4OTAsIDB4MDAsIDB4OTEsIDB4MDIsIDB4OTIsIDB4MTQsIDB4OTMsIDB4MjYsCS8qIDcgKi8KKwkgMHg5NCwgMHgzOCwgMHg5NSwgMHg0YSwgMHg5NiwgMHg2MCwgMHg5NywgMHg3MCwKKwkgMHg5OCwgMHg4MCwgMHg5OSwgMHg5MCwgMHg5YSwgMHhhMCwgMHg5YiwgMHhiMCwKKwkgMHg5YywgMHhjMCwgMHg5RCwgMHhkMCwgMHg5ZSwgMHhlMCwgMHg5ZiwgMHhmMCwKIAkgMHhhMCwgMHhmZn0sCi0JezB4OTAsIDB4MDAsIDB4OTEsIDB4MTAsIDB4OTIsIDB4MjIsIDB4OTMsIDB4MzUsCi0JIDB4OTQsIDB4NDcsIDB4OTUsIDB4NUEsIDB4OTYsIDB4NjksIDB4OTcsIDB4NzksCi0JIDB4OTgsIDB4ODgsIDB4OTksIDB4OTcsIDB4OUEsIDB4QTcsIDB4OUIsIDB4QjYsCi0JIDB4OUMsIDB4QzQsIDB4OUQsIDB4RDMsIDB4OUUsIDB4RTAsIDB4OUYsIDB4RjAsCisJezB4OTAsIDB4MDAsIDB4OTEsIDB4MTAsIDB4OTIsIDB4MjIsIDB4OTMsIDB4MzUsCS8qIDggKi8KKwkgMHg5NCwgMHg0NywgMHg5NSwgMHg1YSwgMHg5NiwgMHg2OSwgMHg5NywgMHg3OSwKKwkgMHg5OCwgMHg4OCwgMHg5OSwgMHg5NywgMHg5YSwgMHhhNywgMHg5YiwgMHhiNiwKKwkgMHg5YywgMHhjNCwgMHg5ZCwgMHhkMywgMHg5ZSwgMHhlMCwgMHg5ZiwgMHhmMCwKIAkgMHhhMCwgMHhmZn0sCi0JezB4OTAsIDB4MDAsIDB4OTEsIDB4MTAsIDB4OTIsIDB4MjYsIDB4OTMsIDB4NDAsCisJezB4OTAsIDB4MDAsIDB4OTEsIDB4MTAsIDB4OTIsIDB4MjYsIDB4OTMsIDB4NDAsCS8qIDkgKi8KIAkgMHg5NCwgMHg1NCwgMHg5NSwgMHg2NSwgMHg5NiwgMHg3NSwgMHg5NywgMHg4NCwKIAkgMHg5OCwgMHg5MywgMHg5OSwgMHhhMSwgMHg5YSwgMHhiMCwgMHg5YiwgMHhiZCwKIAkgMHg5YywgMHhjYSwgMHg5ZCwgMHhkNiwgMHg5ZSwgMHhlMCwgMHg5ZiwgMHhmMCwKIAkgMHhhMCwgMHhmZn0sCi0JezB4OTAsIDB4MDAsIDB4OTEsIDB4MTgsIDB4OTIsIDB4MkIsIDB4OTMsIDB4NDQsCi0JIDB4OTQsIDB4NjAsIDB4OTUsIDB4NzAsIDB4OTYsIDB4ODAsIDB4OTcsIDB4OEUsCi0JIDB4OTgsIDB4OUMsIDB4OTksIDB4QUEsIDB4OUEsIDB4QjcsIDB4OUIsIDB4QzQsCi0JIDB4OUMsIDB4RDAsIDB4OUQsIDB4RDgsIDB4OUUsIDB4RTIsIDB4OUYsIDB4RjAsCisJezB4OTAsIDB4MDAsIDB4OTEsIDB4MTgsIDB4OTIsIDB4MmIsIDB4OTMsIDB4NDQsCS8qIDEwICovCisJIDB4OTQsIDB4NjAsIDB4OTUsIDB4NzAsIDB4OTYsIDB4ODAsIDB4OTcsIDB4OGUsCisJIDB4OTgsIDB4OWMsIDB4OTksIDB4YWEsIDB4OWEsIDB4YjcsIDB4OWIsIDB4YzQsCisJIDB4OWMsIDB4ZDAsIDB4OWQsIDB4ZDgsIDB4OWUsIDB4ZTIsIDB4OWYsIDB4ZjAsCiAJIDB4YTAsIDB4ZmZ9LAotCXsweDkwLCAweDAwLCAweDkxLCAweDFBLCAweDkyLCAweDM0LCAweDkzLCAweDUyLAotCSAweDk0LCAweDY2LCAweDk1LCAweDdFLCAweDk2LCAweDhELCAweDk3LCAweDlCLAotCSAweDk4LCAweEE4LCAweDk5LCAweEI0LCAweDlBLCAweEMwLCAweDlCLCAweENCLAotCSAweDlDLCAweEQ2LCAweDlELCAweEUxLCAweDlFLCAweEVCLCAweDlGLCAweEY1LAorCXsweDkwLCAweDAwLCAweDkxLCAweDFhLCAweDkyLCAweDM0LCAweDkzLCAweDUyLAkvKiAxMSAqLworCSAweDk0LCAweDY2LCAweDk1LCAweDdlLCAweDk2LCAweDhELCAweDk3LCAweDlCLAorCSAweDk4LCAweGE4LCAweDk5LCAweGI0LCAweDlhLCAweGMwLCAweDliLCAweGNiLAorCSAweDljLCAweGQ2LCAweDlkLCAweGUxLCAweDllLCAweGViLCAweDlmLCAweGY1LAogCSAweGEwLCAweGZmfSwKLQl7MHg5MCwgMHgwMCwgMHg5MSwgMHgzRiwgMHg5MiwgMHg1QSwgMHg5MywgMHg2RSwKLQkgMHg5NCwgMHg3RiwgMHg5NSwgMHg4RSwgMHg5NiwgMHg5QywgMHg5NywgMHhBOCwKLQkgMHg5OCwgMHhCNCwgMHg5OSwgMHhCRiwgMHg5QSwgMHhDOSwgMHg5QiwgMHhEMywKLQkgMHg5QywgMHhEQywgMHg5RCwgMHhFNSwgMHg5RSwgMHhFRSwgMHg5RiwgMHhGNiwKLQkgMHhBMCwgMHhGRn0sCi0JezB4OTAsIDB4MDAsIDB4OTEsIDB4NTQsIDB4OTIsIDB4NkYsIDB4OTMsIDB4ODMsCi0JIDB4OTQsIDB4OTMsIDB4OTUsIDB4QTAsIDB4OTYsIDB4QUQsIDB4OTcsIDB4QjcsCi0JIDB4OTgsIDB4QzIsIDB4OTksIDB4Q0IsIDB4OUEsIDB4RDQsIDB4OUIsIDB4REMsCi0JIDB4OUMsIDB4RTQsIDB4OUQsIDB4RUIsIDB4OUUsIDB4RjIsIDB4OUYsIDB4RjksCisJezB4OTAsIDB4MDAsIDB4OTEsIDB4M2YsIDB4OTIsIDB4NWEsIDB4OTMsIDB4NmUsCS8qIDEyICovCisJIDB4OTQsIDB4N2YsIDB4OTUsIDB4OGUsIDB4OTYsIDB4OWMsIDB4OTcsIDB4YTgsCisJIDB4OTgsIDB4YjQsIDB4OTksIDB4YmYsIDB4OWEsIDB4YzksIDB4OWIsIDB4ZDMsCisJIDB4OWMsIDB4ZGMsIDB4OWQsIDB4ZTUsIDB4OWUsIDB4ZWUsIDB4OWYsIDB4ZjYsCiAJIDB4YTAsIDB4ZmZ9LAotCXsweDkwLCAweDAwLCAweDkxLCAweDZFLCAweDkyLCAweDg4LCAweDkzLCAweDlBLAotCSAweDk0LCAweEE4LCAweDk1LCAweEIzLCAweDk2LCAweEJELCAweDk3LCAweEM2LAotCSAweDk4LCAweENGLCAweDk5LCAweEQ2LCAweDlBLCAweERELCAweDlCLCAweEUzLAotCSAweDlDLCAweEU5LCAweDlELCAweEVGLCAweDlFLCAweEY0LCAweDlGLCAweEZBLAorCXsweDkwLCAweDAwLCAweDkxLCAweDU0LCAweDkyLCAweDZmLCAweDkzLCAweDgzLAkvKiAxMyAqLworCSAweDk0LCAweDkzLCAweDk1LCAweGEwLCAweDk2LCAweGFkLCAweDk3LCAweGI3LAorCSAweDk4LCAweGMyLCAweDk5LCAweGNiLCAweDlhLCAweGQ0LCAweDliLCAweGRjLAorCSAweDljLCAweGU0LCAweDlkLCAweGViLCAweDllLCAweGYyLCAweDlmLCAweGY5LAogCSAweGEwLCAweGZmfSwKLQl7MHg5MCwgMHgwMCwgMHg5MSwgMHg5MywgMHg5MiwgMHhBOCwgMHg5MywgMHhCNywKLQkgMHg5NCwgMHhDMSwgMHg5NSwgMHhDQSwgMHg5NiwgMHhEMiwgMHg5NywgMHhEOCwKLQkgMHg5OCwgMHhERSwgMHg5OSwgMHhFMywgMHg5QSwgMHhFOCwgMHg5QiwgMHhFRCwKLQkgMHg5QywgMHhGMSwgMHg5RCwgMHhGNSwgMHg5RSwgMHhGOCwgMHg5RiwgMHhGQywKLQkgMHhBMCwgMHhGRn0KKwl7MHg5MCwgMHgwMCwgMHg5MSwgMHg2ZSwgMHg5MiwgMHg4OCwgMHg5MywgMHg5YSwJLyogMTQgKi8KKwkgMHg5NCwgMHhhOCwgMHg5NSwgMHhiMywgMHg5NiwgMHhiZCwgMHg5NywgMHhjNiwKKwkgMHg5OCwgMHhjZiwgMHg5OSwgMHhkNiwgMHg5YSwgMHhkZCwgMHg5YiwgMHhlMywKKwkgMHg5YywgMHhlOSwgMHg5ZCwgMHhlZiwgMHg5ZSwgMHhmNCwgMHg5ZiwgMHhmYSwKKwkgMHhhMCwgMHhmZn0sCisJezB4OTAsIDB4MDAsIDB4OTEsIDB4OTMsIDB4OTIsIDB4YTgsIDB4OTMsIDB4YjcsCS8qIDE1ICovCisJIDB4OTQsIDB4YzEsIDB4OTUsIDB4Y2EsIDB4OTYsIDB4ZDIsIDB4OTcsIDB4ZDgsCisJIDB4OTgsIDB4ZGUsIDB4OTksIDB4ZTMsIDB4OWEsIDB4ZTgsIDB4OWIsIDB4ZWQsCisJIDB4OWMsIDB4ZjEsIDB4OWQsIDB4ZjUsIDB4OWUsIDB4ZjgsIDB4OWYsIDB4ZmMsCisJIDB4YTAsIDB4ZmZ9CiB9OwogCiBzdGF0aWMgY29uc3QgX191OCB0YXM1MTMwYV9zZW5zb3JfaW5pdFtdWzhdID0gewpAQCAtMzYzLDggKzQxOCwxMCBAQAogCXt9LAogfTsKIAorc3RhdGljIF9fdTggc2Vuc29yX3Jlc2V0W10gPSB7MHg2MSwgMHg2OCwgMHg2MiwgMHhmZiwgMHg2MCwgMHgwN307CisKIC8qIHJlYWQgMSBieXRlICovCi1zdGF0aWMgaW50IHJlZ19yXzEoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAorc3RhdGljIGludCByZWdfcihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCiAJCSAgIF9fdTE2IGluZGV4KQogewogCXVzYl9jb250cm9sX21zZyhnc3BjYV9kZXYtPmRldiwKQEAgLTM3OCwyNiArNDM1LDI2IEBACiB9CiAKIHN0YXRpYyB2b2lkIHJlZ193KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKLQkJCV9fdTE2IHZhbHVlLAotCQkJX191MTYgaW5kZXgsCi0JCQljb25zdCBfX3U4ICpidWZmZXIsIF9fdTE2IGxlbikKKwkJICBfX3UxNiBpbmRleCkKIHsKLQlpZiAoYnVmZmVyID09IE5VTEwpIHsKLQkJdXNiX2NvbnRyb2xfbXNnKGdzcGNhX2Rldi0+ZGV2LAotCQkJCXVzYl9zbmRjdHJscGlwZShnc3BjYV9kZXYtPmRldiwgMCksCi0JCQkJMCwKLQkJCSAgIFVTQl9ESVJfT1VUIHwgVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0lOVEVSRkFDRSwKLQkJCQl2YWx1ZSwgaW5kZXgsCi0JCQkJTlVMTCwgMCwgNTAwKTsKLQkJcmV0dXJuOwotCX0KKwl1c2JfY29udHJvbF9tc2coZ3NwY2FfZGV2LT5kZXYsCisJCQl1c2Jfc25kY3RybHBpcGUoZ3NwY2FfZGV2LT5kZXYsIDApLAorCQkJMCwKKwkJCVVTQl9ESVJfT1VUIHwgVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0RFVklDRSwKKwkJCTAsIGluZGV4LAorCQkJTlVMTCwgMCwgNTAwKTsKK30KKworc3RhdGljIHZvaWQgcmVnX3dfYnVmKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKKwkJICBjb25zdCBfX3U4ICpidWZmZXIsIF9fdTE2IGxlbikKK3sKIAlpZiAobGVuIDw9IFVTQl9CVUZfU1opIHsKIAkJbWVtY3B5KGdzcGNhX2Rldi0+dXNiX2J1ZiwgYnVmZmVyLCBsZW4pOwogCQl1c2JfY29udHJvbF9tc2coZ3NwY2FfZGV2LT5kZXYsCiAJCQkJdXNiX3NuZGN0cmxwaXBlKGdzcGNhX2Rldi0+ZGV2LCAwKSwKIAkJCQkwLAotCQkJICAgVVNCX0RJUl9PVVQgfCBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfSU5URVJGQUNFLAotCQkJCXZhbHVlLCBpbmRleCwKKwkJCSAgIFVTQl9ESVJfT1VUIHwgVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0RFVklDRSwKKwkJCQkweDAxLCAwLAogCQkJCWdzcGNhX2Rldi0+dXNiX2J1ZiwgbGVuLCA1MDApOwogCX0gZWxzZSB7CiAJCV9fdTggKnRtcGJ1ZjsKQEAgLTQwNywxMyArNDY0LDcyIEBACiAJCXVzYl9jb250cm9sX21zZyhnc3BjYV9kZXYtPmRldiwKIAkJCQl1c2Jfc25kY3RybHBpcGUoZ3NwY2FfZGV2LT5kZXYsIDApLAogCQkJCTAsCi0JCQkgICBVU0JfRElSX09VVCB8IFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9JTlRFUkZBQ0UsCi0JCQkJdmFsdWUsIGluZGV4LAorCQkJICAgVVNCX0RJUl9PVVQgfCBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfREVWSUNFLAorCQkJCTB4MDEsIDAsCiAJCQkJdG1wYnVmLCBsZW4sIDUwMCk7CiAJCWtmcmVlKHRtcGJ1Zik7CiAJfQogfQogCisvKiBSZXBvcnRlZCBhcyBPTTY4MDIqLworc3RhdGljIHZvaWQgb202ODAyX3NlbnNvcl9pbml0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlpbnQgaTsKKwljb25zdCBfX3U4ICpwOworCV9fdTggYnl0ZTsKKwlfX3U4IHZhbFs2XSA9IHsweDYyLCAwLCAweDY0LCAwLCAweDYwLCAweDA1fTsKKwlzdGF0aWMgY29uc3QgX191OCBzZW5zb3JfaW5pdFtdID0geworCQkweGRmLCAweDZkLAorCQkweGRkLCAweDE4LAorCQkweDVhLCAweGUwLAorCQkweDVjLCAweDA3LAorCQkweDVkLCAweGIwLAorCQkweDVlLCAweDFlLAorCQkweDYwLCAweDcxLAorCQkweGVmLCAweDAwLAorCQkweGU5LCAweDAwLAorCQkweGVhLCAweDAwLAorCQkweDkwLCAweDI0LAorCQkweDkxLCAweGIyLAorCQkweDgyLCAweDMyLAorCQkweGZkLCAweDQxLAorCQkweDAwCQkJLyogdGFibGUgZW5kICovCisJfTsKKworCXJlZ193X2J1Zihnc3BjYV9kZXYsIHNlbnNvcl9yZXNldCwgc2l6ZW9mIHNlbnNvcl9yZXNldCk7CisJbXNsZWVwKDUpOworCWkgPSA0OworCXdoaWxlICgtLWkgPCAwKSB7CisJCWJ5dGUgPSByZWdfcihnc3BjYV9kZXYsIDB4MDA2MCk7CisJCWlmICghKGJ5dGUgJiAweDAxKSkKKwkJCWJyZWFrOworCQltc2xlZXAoMTAwKTsKKwl9CisJYnl0ZSA9IHJlZ19yKGdzcGNhX2RldiwgMHgwMDYzKTsKKwlpZiAoYnl0ZSAhPSAweDE3KSB7CisJCWVycigiQmFkIHNlbnNvciByZXNldCAlMDJ4IiwgYnl0ZSk7CisJCS8qIGNvbnRpbnVlPyAqLworCX0KKworCXAgPSBzZW5zb3JfaW5pdDsKKwl3aGlsZSAoKnAgIT0gMCkgeworCQl2YWxbMV0gPSAqcCsrOworCQl2YWxbM10gPSAqcCsrOworCQlpZiAoKnAgPT0gMCkKKwkJCXJlZ193KGdzcGNhX2RldiwgMHgzYzgwKTsKKwkJcmVnX3dfYnVmKGdzcGNhX2RldiwgdmFsLCBzaXplb2YgdmFsKTsKKwkJaSA9IDQ7CisJCXdoaWxlICgtLWkgPj0gMCkgeworCQkJbXNsZWVwKDE1KTsKKwkJCWJ5dGUgPSByZWdfcihnc3BjYV9kZXYsIDB4NjApOworCQkJaWYgKCEoYnl0ZSAmIDB4MDEpKQorCQkJCWJyZWFrOworCQl9CisJfQorCW1zbGVlcCgxNSk7CisJcmVnX3coZ3NwY2FfZGV2LCAweDNjODApOworfQorCiAvKiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBhdCBwcm9iZSB0aW1lICovCiBzdGF0aWMgaW50IHNkX2NvbmZpZyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCiAJCSAgICAgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQpAQCAtNDMwLDcgKzU0Niw3IEBACiAJc2QtPmJyaWdodG5lc3MgPSBzZF9jdHJsc1tTRF9CUklHSFRORVNTXS5xY3RybC5kZWZhdWx0X3ZhbHVlOwogCXNkLT5jb250cmFzdCA9IHNkX2N0cmxzW1NEX0NPTlRSQVNUXS5xY3RybC5kZWZhdWx0X3ZhbHVlOwogCXNkLT5jb2xvcnMgPSBzZF9jdHJsc1tTRF9DT0xPUl0ucWN0cmwuZGVmYXVsdF92YWx1ZTsKLQlzZC0+Z2FtbWEgPSBzZF9jdHJsc1tTRF9HQU1NQV0ucWN0cmwuZGVmYXVsdF92YWx1ZTsKKwlzZC0+Z2FtbWEgPSBHQU1NQV9ERUY7CiAJc2QtPm1pcnJvciA9IHNkX2N0cmxzW1NEX01JUlJPUl0ucWN0cmwuZGVmYXVsdF92YWx1ZTsKIAlzZC0+ZnJlcSA9IHNkX2N0cmxzW1NEX0xJR0hURlJFUV0ucWN0cmwuZGVmYXVsdF92YWx1ZTsKIAlzZC0+d2hpdGViYWxhbmNlID0gc2RfY3RybHNbU0RfV0hJVEVfQkFMQU5DRV0ucWN0cmwuZGVmYXVsdF92YWx1ZTsKQEAgLTQzOSwyNyArNTU1LDk4IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgaW5pdF9kZWZhdWx0X3BhcmFtZXRlcnMoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQorc3RhdGljIHZvaWQgc2V0YnJpZ2h0bmVzcyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCXVuc2lnbmVkIGludCBicmlnaHRuZXNzOworCV9fdTggc2V0Nls0XSA9IHsgMHg4ZiwgMHgyNCwgMHhjMywgMHgwMCB9OworCisJYnJpZ2h0bmVzcyA9IHNkLT5icmlnaHRuZXNzOworCWlmIChicmlnaHRuZXNzIDwgNykgeworCQlzZXQ2WzFdID0gMHgyNjsKKwkJc2V0NlszXSA9IDB4NzAgLSBicmlnaHRuZXNzICogMHgxMDsKKwl9IGVsc2UgeworCQlzZXQ2WzNdID0gMHgwMCArICgoYnJpZ2h0bmVzcyAtIDcpICogMHgxMCk7CisJfQorCisJcmVnX3dfYnVmKGdzcGNhX2Rldiwgc2V0Niwgc2l6ZW9mIHNldDYpOworfQorCitzdGF0aWMgdm9pZCBzZXRjb250cmFzdChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCXVuc2lnbmVkIGludCBjb250cmFzdCA9IHNkLT5jb250cmFzdDsKKwlfX3UxNiByZWdfdG9fd3JpdGU7CisKKwlpZiAoY29udHJhc3QgPCA3KQorCQlyZWdfdG9fd3JpdGUgPSAweDhlYTkgLSBjb250cmFzdCAqIDB4MjAwOworCWVsc2UKKwkJcmVnX3RvX3dyaXRlID0gMHgwMGE5ICsgKGNvbnRyYXN0IC0gNykgKiAweDIwMDsKKworCXJlZ193KGdzcGNhX2RldiwgcmVnX3RvX3dyaXRlKTsKK30KKworc3RhdGljIHZvaWQgc2V0Y29sb3JzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisJX191MTYgcmVnX3RvX3dyaXRlOworCisJcmVnX3RvX3dyaXRlID0gMHg4MGJiICsgc2QtPmNvbG9ycyAqIDB4MTAwOwkvKiB3YXMgMHhjMCAqLworCXJlZ193KGdzcGNhX2RldiwgcmVnX3RvX3dyaXRlKTsKK30KKworc3RhdGljIHZvaWQgc2V0Z2FtbWEoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCVBERUJVRyhEX0NPTkYsICJHYW1tYTogJWQiLCBzZC0+Z2FtbWEpOworCXJlZ193X2J1Zihnc3BjYV9kZXYsIGdhbW1hX3RhYmxlW3NkLT5nYW1tYV0sIHNpemVvZiBnYW1tYV90YWJsZVswXSk7Cit9CisKK3N0YXRpYyB2b2lkIHNldHdoaXRlYmFsYW5jZShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJX191OCB3aGl0ZV9iYWxhbmNlWzhdID0KKwkJezB4ODcsIDB4MjAsIDB4ODgsIDB4MjAsIDB4ODksIDB4MjAsIDB4ODAsIDB4Mzh9OworCisJaWYgKHNkLT53aGl0ZWJhbGFuY2UpCisJCXdoaXRlX2JhbGFuY2VbN10gPSAweDNjOworCisJcmVnX3dfYnVmKGdzcGNhX2Rldiwgd2hpdGVfYmFsYW5jZSwgc2l6ZW9mIHdoaXRlX2JhbGFuY2UpOworfQorCitzdGF0aWMgdm9pZCBzZXRzaGFycG5lc3Moc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKwlfX3UxNiByZWdfdG9fd3JpdGU7CisKKwlyZWdfdG9fd3JpdGUgPSAweDBhYTYgKyAweDEwMDAgKiBzZC0+c2hhcnBuZXNzOworCisJcmVnX3coZ3NwY2FfZGV2LCByZWdfdG9fd3JpdGUpOworfQorCisvKiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBhdCBwcm9iZSBhbmQgcmVzdW1lIHRpbWUgKi8KK3N0YXRpYyBpbnQgc2RfaW5pdChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCiB7CiAJLyogc29tZSBvZiB0aGlzIHJlZ2lzdGVycyBhcmUgbm90IHJlYWxseSBuZWRlZCwgYmVjYXVzZQogCSAqIHRoZXkgYXJlIG92ZXJyaWRlbiBieSBzZXRicmlndGhuZXNzLCBzZXRjb250cmFzdCwgZXRjLAogCSAqIGJ1dCB3b250IGh1cnQgYW55d2F5LCBhbmQgY2FuIGhlbHAgc29tZW9uZSB3aXRoIHNpbWlsYXIgd2ViY2FtCiAJICogdG8gc2VlIHRoZSBpbml0aWFsIHBhcmFtZXRlcnMuKi8KLQlpbnQgaSA9IDA7Ci0JX191OCB0ZXN0X2J5dGU7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCWludCBpOworCV9fdTggYnl0ZSwgdGVzdF9ieXRlOwogCiAJc3RhdGljIGNvbnN0IF9fdTggcmVhZF9pbmRleHNbXSA9CiAJCXsgMHgwNiwgMHgwNywgMHgwYSwgMHgwYiwgMHg2NiwgMHg4MCwgMHg4MSwgMHg4ZSwgMHg4ZiwgMHhhNSwKIAkJICAweGE2LCAweGE4LCAweGJiLCAweGJjLCAweGM2LCAweDAwLCAweDAwIH07Ci0Jc3RhdGljIGNvbnN0IF9fdTggbjFbNl0gPQorCXN0YXRpYyBjb25zdCBfX3U4IG4xW10gPQogCQkJezB4MDgsIDB4MDMsIDB4MDksIDB4MDMsIDB4MTIsIDB4MDR9OwotCXN0YXRpYyBjb25zdCBfX3U4IG4yWzJdID0KKwlzdGF0aWMgY29uc3QgX191OCBuMltdID0KIAkJCXsweDA4LCAweDAwfTsKLQlzdGF0aWMgY29uc3QgX191OCBuc2V0WzZdID0KLQkJeyAweDYxLCAweDY4LCAweDYyLCAweGZmLCAweDYwLCAweDA3IH07Ci0Jc3RhdGljIGNvbnN0IF9fdTggbjNbNl0gPQorCXN0YXRpYyBjb25zdCBfX3U4IG4zW10gPQogCQkJezB4NjEsIDB4NjgsIDB4NjUsIDB4MGEsIDB4NjAsIDB4MDR9OwotCXN0YXRpYyBjb25zdCBfX3U4IG40WzB4NDZdID0KKwlzdGF0aWMgY29uc3QgX191OCBuNFtdID0KIAkJezB4MDksIDB4MDEsIDB4MTIsIDB4MDQsIDB4NjYsIDB4OGEsIDB4ODAsIDB4M2MsCiAJCSAweDgxLCAweDIyLCAweDg0LCAweDUwLCAweDhhLCAweDc4LCAweDhiLCAweDY4LAogCQkgMHg4YywgMHg4OCwgMHg4ZSwgMHgzMywgMHg4ZiwgMHgyNCwgMHhhYSwgMHhiMSwKQEAgLTQ2OSwxMzEgKzY1NiwxMTMgQEAKIAkJIDB4NjUsIDB4MGEsIDB4YmIsIDB4ODYsIDB4YWYsIDB4NTgsIDB4YjAsIDB4NjgsCiAJCSAweDg3LCAweDQwLCAweDg5LCAweDJiLCAweDhkLCAweGZmLCAweDgzLCAweDQwLAogCQkgMHhhYywgMHg4NCwgMHhhZCwgMHg4NiwgMHhhZiwgMHg0Nn07Ci0Jc3RhdGljIGNvbnN0IF9fdTggbnNldDRbMThdID0gewotCQkweGUwLCAweDYwLCAweGUxLCAweGE4LCAweGUyLCAweGUwLCAweGUzLCAweDYwLCAweGU0LCAweGE4LAotCQkweGU1LCAweGUwLCAweGU2LCAweDYwLCAweGU3LCAweGE4LAotCQkweGU4LCAweGUwCi0JfTsKLQkvKiBvam8gcHVlZGUgc2VyIDB4ZTYgZW4gdmV6IGRlIDB4ZTkgKi8KLQlzdGF0aWMgY29uc3QgX191OCBuc2V0MlsyMF0gPSB7Ci0JCTB4ZDAsIDB4YmIsIDB4ZDEsIDB4MjgsIDB4ZDIsIDB4MTAsIDB4ZDMsIDB4MTAsIDB4ZDQsIDB4YmIsCi0JCTB4ZDUsIDB4MjgsIDB4ZDYsIDB4MWUsIDB4ZDcsIDB4MjcsCi0JCTB4ZDgsIDB4YzgsIDB4ZDksIDB4ZmMKLQl9OwotCXN0YXRpYyBjb25zdCBfX3U4IG1pc3NpbmdbOF0gPQotCQl7IDB4ODcsIDB4MjAsIDB4ODgsIDB4MjAsIDB4ODksIDB4MjAsIDB4ODAsIDB4MzggfTsKLQlzdGF0aWMgY29uc3QgX191OCBuc2V0M1sxOF0gPSB7Ci0JCTB4YzcsIDB4NjAsIDB4YzgsIDB4YTgsIDB4YzksIDB4ZTAsIDB4Y2EsIDB4NjAsIDB4Y2IsIDB4YTgsCi0JCTB4Y2MsIDB4ZTAsIDB4Y2QsIDB4NjAsIDB4Y2UsIDB4YTgsCi0JCTB4Y2YsIDB4ZTAKLQl9OwotCXN0YXRpYyBjb25zdCBfX3U4IG5zZXQ1WzRdID0KLQkJeyAweDhmLCAweDI0LCAweGMzLCAweDAwIH07CS8qIGJyaWdodCAqLwotCXN0YXRpYyBjb25zdCBfX3U4IG5zZXQ2WzM0XSA9IHsKLQkJMHg5MCwgMHgwMCwgMHg5MSwgMHgxYywgMHg5MiwgMHgzMCwgMHg5MywgMHg0MywgMHg5NCwgMHg1NCwKLQkJMHg5NSwgMHg2NSwgMHg5NiwgMHg3NSwgMHg5NywgMHg4NCwKLQkJMHg5OCwgMHg5MywgMHg5OSwgMHhhMSwgMHg5YSwgMHhiMCwgMHg5YiwgMHhiZCwgMHg5YywgMHhjYSwKLQkJMHg5ZCwgMHhkOCwgMHg5ZSwgMHhlNSwgMHg5ZiwgMHhmMiwKLQkJMHhhMCwgMHhmZgotCX07CQkJLyogR2FtbWEgKi8KLQlzdGF0aWMgY29uc3QgX191OCBuc2V0N1s0XSA9Ci0JCQl7IDB4NjYsIDB4Y2EsIDB4YTgsIDB4ZjggfTsJLyogNTAvNjAgSHogKi8KIAlzdGF0aWMgY29uc3QgX191OCBuc2V0OVs0XSA9CiAJCQl7IDB4MGIsIDB4MDQsIDB4MGEsIDB4NzggfTsKIAlzdGF0aWMgY29uc3QgX191OCBuc2V0OFs2XSA9CiAJCQl7IDB4YTgsIDB4ZjAsIDB4YzYsIDB4ODgsIDB4YzAsIDB4MDAgfTsKLQlzdGF0aWMgY29uc3QgX191OCBuc2V0MTBbNl0gPQotCQkJeyAweDBjLCAweDAzLCAweGFiLCAweDEwLCAweDgxLCAweDIwIH07CiAKLQlyZWdfdyhnc3BjYV9kZXYsIDB4MDEsIDB4MDAwMCwgbjEsIDB4MDYpOwotCXJlZ193KGdzcGNhX2RldiwgMHgwMSwgMHgwMDAwLCBuc2V0LCAweDA2KTsKLQlyZWdfcl8xKGdzcGNhX2RldiwgMHgwMDYzKTsKLQlyZWdfdyhnc3BjYV9kZXYsIDB4MDEsIDB4MDAwMCwgbjIsIDB4MDIpOworCWJ5dGUgPSByZWdfcihnc3BjYV9kZXYsIDB4MDYpOworCXRlc3RfYnl0ZSA9IHJlZ19yKGdzcGNhX2RldiwgMHgwNyk7CisJaWYgKGJ5dGUgPT0gMHgwOCAmJiB0ZXN0X2J5dGUgPT0gMHgwNykgeworCQlQREVCVUcoRF9DT05GLCAic2Vuc29yIG9tNjgwMiIpOworCQlzZC0+c2Vuc29yID0gU0VOU09SX09NNjgwMjsKKwl9IGVsc2UgaWYgKGJ5dGUgPT0gMHgwOCAmJiB0ZXN0X2J5dGUgPT0gMHgwMSkgeworCQlQREVCVUcoRF9DT05GLCAic2Vuc29yIHRhczUxMzBhIik7CisJCXNkLT5zZW5zb3IgPSBTRU5TT1JfVEFTNTEzMEE7CisJfSBlbHNlIHsKKwkJUERFQlVHKERfQ09ORiwgInVua25vd24gc2Vuc29yICUwMnggJTAyeCIsIGJ5dGUsIHRlc3RfYnl0ZSk7CisJCXNkLT5zZW5zb3IgPSBTRU5TT1JfVEFTNTEzMEE7CisJfQogCisJcmVnX3dfYnVmKGdzcGNhX2RldiwgbjEsIHNpemVvZiBuMSk7CisJdGVzdF9ieXRlID0gMDsKKwlpID0gNTsKKwl3aGlsZSAoLS1pID49IDApIHsKKwkJcmVnX3dfYnVmKGdzcGNhX2Rldiwgc2Vuc29yX3Jlc2V0LCBzaXplb2Ygc2Vuc29yX3Jlc2V0KTsKKwkJdGVzdF9ieXRlID0gcmVnX3IoZ3NwY2FfZGV2LCAweDAwNjMpOworCQltc2xlZXAoMTAwKTsKKwkJaWYgKHRlc3RfYnl0ZSA9PSAweDE3KQorCQkJYnJlYWs7CQkvKiBPSyAqLworCX0KKwlpZiAoaSA8IDApIHsKKwkJZXJyKCJCYWQgc2Vuc29yIHJlc2V0ICUwMngiLCB0ZXN0X2J5dGUpOworLyoJCXJldHVybiAtRUlPOyAqLworLypmaXhtZTogdGVzdCAtIGNvbnRpbnVlICovCisJfQorCXJlZ193X2J1Zihnc3BjYV9kZXYsIG4yLCBzaXplb2YgbjIpOworCisJaSA9IDA7CiAJd2hpbGUgKHJlYWRfaW5kZXhzW2ldICE9IDB4MDApIHsKLQkJdGVzdF9ieXRlID0gcmVnX3JfMShnc3BjYV9kZXYsIHJlYWRfaW5kZXhzW2ldKTsKLQkJUERFQlVHKERfQ09ORiwgIlJlZyAweCUwMnggPT4gMHglMDJ4IiwgcmVhZF9pbmRleHNbaV0sCisJCXRlc3RfYnl0ZSA9IHJlZ19yKGdzcGNhX2RldiwgcmVhZF9pbmRleHNbaV0pOworCQlQREVCVUcoRF9TVFJFQU0sICJSZWcgMHglMDJ4ID0gMHglMDJ4IiwgcmVhZF9pbmRleHNbaV0sCiAJCSAgICAgICB0ZXN0X2J5dGUpOwogCQlpKys7CiAJfQogCi0JcmVnX3coZ3NwY2FfZGV2LCAweDAxLCAweDAwMDAsIG4zLCAweDA2KTsKLQlyZWdfdyhnc3BjYV9kZXYsIDB4MDEsIDB4MDAwMCwgbjQsIDB4NDYpOwotCXJlZ19yXzEoZ3NwY2FfZGV2LCAweDAwODApOwotCXJlZ193KGdzcGNhX2RldiwgMHgwMCwgMHgyYzgwLCBOVUxMLCAwKTsKLQlyZWdfdyhnc3BjYV9kZXYsIDB4MDEsIDB4MDAwMCwgbnNldDIsIDB4MTQpOwotCXJlZ193KGdzcGNhX2RldiwgMHgwMSwgMHgwMDAwLCBuc2V0MywgMHgxMik7Ci0JcmVnX3coZ3NwY2FfZGV2LCAweDAxLCAweDAwMDAsIG5zZXQ0LCAweDEyKTsKLQlyZWdfdyhnc3BjYV9kZXYsIDB4MDAsIDB4Mzg4MCwgTlVMTCwgMCk7Ci0JcmVnX3coZ3NwY2FfZGV2LCAweDAwLCAweDM4ODAsIE5VTEwsIDApOwotCXJlZ193KGdzcGNhX2RldiwgMHgwMCwgMHgzMzhlLCBOVUxMLCAwKTsKLQlyZWdfdyhnc3BjYV9kZXYsIDB4MDEsIDB4MDAwMCwgbnNldDUsIDB4MDQpOwotCXJlZ193KGdzcGNhX2RldiwgMHgwMCwgMHgwMGE5LCBOVUxMLCAwKTsKLQlyZWdfdyhnc3BjYV9kZXYsIDB4MDEsIDB4MDAwMCwgbnNldDYsIDB4MjIpOwotCXJlZ193KGdzcGNhX2RldiwgMHgwMCwgMHg4NmJiLCBOVUxMLCAwKTsKLQlyZWdfdyhnc3BjYV9kZXYsIDB4MDAsIDB4NGFhNiwgTlVMTCwgMCk7CisJcmVnX3dfYnVmKGdzcGNhX2RldiwgbjMsIHNpemVvZiBuMyk7CisJcmVnX3dfYnVmKGdzcGNhX2RldiwgbjQsIHNpemVvZiBuNCk7CisJcmVnX3IoZ3NwY2FfZGV2LCAweDAwODApOworCXJlZ193KGdzcGNhX2RldiwgMHgyYzgwKTsKIAotCXJlZ193KGdzcGNhX2RldiwgMHgwMSwgMHgwMDAwLCBtaXNzaW5nLCAweDA4KTsKKwlyZWdfd19idWYoZ3NwY2FfZGV2LCBzZW5zb3JfZGF0YVtzZC0+c2Vuc29yXS5kYXRhMSwKKwkJCXNpemVvZiBzZW5zb3JfZGF0YVtzZC0+c2Vuc29yXS5kYXRhMSk7CisJcmVnX3dfYnVmKGdzcGNhX2Rldiwgc2Vuc29yX2RhdGFbc2QtPnNlbnNvcl0uZGF0YTMsCisJCQlzaXplb2Ygc2Vuc29yX2RhdGFbc2QtPnNlbnNvcl0uZGF0YTMpOworCXJlZ193X2J1Zihnc3BjYV9kZXYsIHNlbnNvcl9kYXRhW3NkLT5zZW5zb3JdLmRhdGEyLAorCQkJc2l6ZW9mIHNlbnNvcl9kYXRhW3NkLT5zZW5zb3JdLmRhdGEyKTsKIAotCXJlZ193KGdzcGNhX2RldiwgMHgwMCwgMHgyMDg3LCBOVUxMLCAwKTsKLQlyZWdfdyhnc3BjYV9kZXYsIDB4MDAsIDB4MjA4OCwgTlVMTCwgMCk7Ci0JcmVnX3coZ3NwY2FfZGV2LCAweDAwLCAweDIwODksIE5VTEwsIDApOworCXJlZ193KGdzcGNhX2RldiwgMHgzODgwKTsKKwlyZWdfdyhnc3BjYV9kZXYsIDB4Mzg4MCk7CisJcmVnX3coZ3NwY2FfZGV2LCAweDMzOGUpOwogCi0JcmVnX3coZ3NwY2FfZGV2LCAweDAxLCAweDAwMDAsIG5zZXQ3LCAweDA0KTsKLQlyZWdfdyhnc3BjYV9kZXYsIDB4MDEsIDB4MDAwMCwgbnNldDEwLCAweDA2KTsKLQlyZWdfdyhnc3BjYV9kZXYsIDB4MDEsIDB4MDAwMCwgbnNldDgsIDB4MDYpOwotCXJlZ193KGdzcGNhX2RldiwgMHgwMSwgMHgwMDAwLCBuc2V0OSwgMHgwNCk7CisJc2V0YnJpZ2h0bmVzcyhnc3BjYV9kZXYpOworCXNldGNvbnRyYXN0KGdzcGNhX2Rldik7CisJc2V0Z2FtbWEoZ3NwY2FfZGV2KTsKKwlzZXRjb2xvcnMoZ3NwY2FfZGV2KTsKKwlzZXRzaGFycG5lc3MoZ3NwY2FfZGV2KTsKKwlzZXR3aGl0ZWJhbGFuY2UoZ3NwY2FfZGV2KTsKIAotCXJlZ193KGdzcGNhX2RldiwgMHgwMCwgMHgyODgwLCBOVUxMLCAwKTsKLQlyZWdfdyhnc3BjYV9kZXYsIDB4MDEsIDB4MDAwMCwgbnNldDIsIDB4MTQpOwotCXJlZ193KGdzcGNhX2RldiwgMHgwMSwgMHgwMDAwLCBuc2V0MywgMHgxMik7Ci0JcmVnX3coZ3NwY2FfZGV2LCAweDAxLCAweDAwMDAsIG5zZXQ0LCAweDEyKTsKKwlyZWdfdyhnc3BjYV9kZXYsIDB4MjA4Nyk7CS8qIHRpZWQgdG8gd2hpdGUgYmFsYW5jZT8gKi8KKwlyZWdfdyhnc3BjYV9kZXYsIDB4MjA4OCk7CisJcmVnX3coZ3NwY2FfZGV2LCAweDIwODkpOworCisJcmVnX3dfYnVmKGdzcGNhX2Rldiwgc2Vuc29yX2RhdGFbc2QtPnNlbnNvcl0uZGF0YTQsCisJCQlzaXplb2Ygc2Vuc29yX2RhdGFbc2QtPnNlbnNvcl0uZGF0YTQpOworCXJlZ193X2J1Zihnc3BjYV9kZXYsIHNlbnNvcl9kYXRhW3NkLT5zZW5zb3JdLmRhdGE1LAorCQkJc2l6ZW9mIHNlbnNvcl9kYXRhW3NkLT5zZW5zb3JdLmRhdGE1KTsKKwlyZWdfd19idWYoZ3NwY2FfZGV2LCBuc2V0OCwgc2l6ZW9mIG5zZXQ4KTsKKwlyZWdfd19idWYoZ3NwY2FfZGV2LCBuc2V0OSwgc2l6ZW9mIG5zZXQ5KTsKKworCXJlZ193KGdzcGNhX2RldiwgMHgyODgwKTsKKworCXJlZ193X2J1Zihnc3BjYV9kZXYsIHNlbnNvcl9kYXRhW3NkLT5zZW5zb3JdLmRhdGExLAorCQkJc2l6ZW9mIHNlbnNvcl9kYXRhW3NkLT5zZW5zb3JdLmRhdGExKTsKKwlyZWdfd19idWYoZ3NwY2FfZGV2LCBzZW5zb3JfZGF0YVtzZC0+c2Vuc29yXS5kYXRhMywKKwkJCXNpemVvZiBzZW5zb3JfZGF0YVtzZC0+c2Vuc29yXS5kYXRhMyk7CisJcmVnX3dfYnVmKGdzcGNhX2Rldiwgc2Vuc29yX2RhdGFbc2QtPnNlbnNvcl0uZGF0YTIsCisJCQlzaXplb2Ygc2Vuc29yX2RhdGFbc2QtPnNlbnNvcl0uZGF0YTIpOwogCiAJcmV0dXJuIDA7CiB9CiAKLS8qIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGF0IHByb2JlIGFuZCByZXN1bWUgdGltZSAqLwotc3RhdGljIGludCBzZF9pbml0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKLXsKLQlpbml0X2RlZmF1bHRfcGFyYW1ldGVycyhnc3BjYV9kZXYpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBzZXRicmlnaHRuZXNzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKLXsKLQlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7Ci0JdW5zaWduZWQgaW50IGJyaWdodG5lc3M7Ci0JX191OCBzZXQ2WzRdID0geyAweDhmLCAweDI2LCAweGMzLCAweDgwIH07Ci0JYnJpZ2h0bmVzcyA9IHNkLT5icmlnaHRuZXNzOwotCi0JaWYgKGJyaWdodG5lc3MgPCA3KSB7Ci0JCXNldDZbM10gPSAweDcwIC0gKGJyaWdodG5lc3MgKiAweGEpOwotCX0gZWxzZSB7Ci0JCXNldDZbMV0gPSAweDI0OwotCQlzZXQ2WzNdID0gMHgwMCArICgoYnJpZ2h0bmVzcyAtIDcpICogMHhhKTsKLQl9Ci0KLQlyZWdfdyhnc3BjYV9kZXYsIDB4MDEsIDB4MDAwMCwgc2V0NiwgNCk7Ci19Ci0KIHN0YXRpYyB2b2lkIHNldGZsaXAoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQogewogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKLQogCV9fdTggZmxpcGNtZFs4XSA9Ci0JICAgIHsgMHg2MiwgMHgwNywgMHg2MywgMHgwMywgMHg2NCwgMHgwMCwgMHg2MCwgMHgwOSB9OworCQl7MHg2MiwgMHgwNywgMHg2MywgMHgwMywgMHg2NCwgMHgwMCwgMHg2MCwgMHgwOX07CiAKLQlpZiAoc2QtPm1pcnJvciA9PSAxKQorCWlmIChzZC0+bWlycm9yKQogCQlmbGlwY21kWzNdID0gMHgwMTsKIAotCXJlZ193KGdzcGNhX2RldiwgMHgwMSwgMHgwMDAwLCBmbGlwY21kLCA4KTsKKwlyZWdfd19idWYoZ3NwY2FfZGV2LCBmbGlwY21kLCBzaXplb2YgZmxpcGNtZCk7CiB9CiAKIHN0YXRpYyB2b2lkIHNldGVmZmVjdChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCiB7CiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwogCi0JcmVnX3coZ3NwY2FfZGV2LCAweDAxLCAweDAwMDAsIGVmZmVjdHNfdGFibGVbc2QtPmVmZmVjdF0sIDB4MDYpOworCXJlZ193X2J1Zihnc3BjYV9kZXYsIGVmZmVjdHNfdGFibGVbc2QtPmVmZmVjdF0sCisJCQkJc2l6ZW9mIGVmZmVjdHNfdGFibGVbMF0pOwogCWlmIChzZC0+ZWZmZWN0ID09IDEgfHwgc2QtPmVmZmVjdCA9PSA1KSB7CiAJCVBERUJVRyhEX0NPTkYsCiAJCSAgICAgICAiVGhpcyBlZmZlY3QgaGF2ZSBiZWVuIGRpc2FibGVkIGZvciB3ZWJjYW0gXCJzYWZldHlcIiIpOwpAQCAtNjAxLDIyICs3NzAsOSBAQAogCX0KIAogCWlmIChzZC0+ZWZmZWN0ID09IDEgfHwgc2QtPmVmZmVjdCA9PSA0KQotCQlyZWdfdyhnc3BjYV9kZXYsIDB4MDAsIDB4NGFhNiwgTlVMTCwgMCk7CisJCXJlZ193KGdzcGNhX2RldiwgMHg0YWE2KTsKIAllbHNlCi0JCXJlZ193KGdzcGNhX2RldiwgMHgwMCwgMHhmYWE2LCBOVUxMLCAwKTsKLX0KLQotc3RhdGljIHZvaWQgc2V0d2hpdGViYWxhbmNlKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKLXsKLQlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7Ci0KLQlfX3U4IHdoaXRlX2JhbGFuY2VbOF0gPQotCSAgICB7IDB4ODcsIDB4MjAsIDB4ODgsIDB4MjAsIDB4ODksIDB4MjAsIDB4ODAsIDB4MzggfTsKLQotCWlmIChzZC0+d2hpdGViYWxhbmNlID09IDEpCi0JCXdoaXRlX2JhbGFuY2VbN10gPSAweDNjOwotCi0JcmVnX3coZ3NwY2FfZGV2LCAweDAxLCAweDAwMDAsIHdoaXRlX2JhbGFuY2UsIDgpOworCQlyZWdfdyhnc3BjYV9kZXYsIDB4ZmFhNik7CiB9CiAKIHN0YXRpYyB2b2lkIHNldGxpZ2h0ZnJlcShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCkBAIC02MjcsNDQgKzc4MywxNDMgQEAKIAlpZiAoc2QtPmZyZXEgPT0gMikJLyogNjBoeiAqLwogCQlmcmVxWzFdID0gMHgwMDsKIAotCXJlZ193KGdzcGNhX2RldiwgMHgxLCAweDAwMDAsIGZyZXEsIDB4NCk7CisJcmVnX3dfYnVmKGdzcGNhX2RldiwgZnJlcSwgc2l6ZW9mIGZyZXEpOwogfQogCi1zdGF0aWMgdm9pZCBzZXRjb250cmFzdChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCisvKiBJcyB0aGlzIHJlYWxseSBuZWVkZWQ/CisgKiBpIGFkZGVkIHNvbWUgbW9kdWxlIHBhcmFtZXRlcnMgZm9yIHRlc3Qgd2l0aCBzb21lIHVzZXJzICovCitzdGF0aWMgdm9pZCBwb2xsX3NlbnNvcihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCiB7CiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwotCXVuc2lnbmVkIGludCBjb250cmFzdCA9IHNkLT5jb250cmFzdDsKLQlfX3UxNiByZWdfdG9fd3JpdGUgPSAweDAwOworCXN0YXRpYyBjb25zdCBfX3U4IHBvbGwxW10gPQorCQl7MHg2NywgMHgwNSwgMHg2OCwgMHg4MSwgMHg2OSwgMHg4MCwgMHg2YSwgMHg4MiwKKwkJIDB4NmIsIDB4NjgsIDB4NmMsIDB4NjksIDB4NzIsIDB4ZDksIDB4NzMsIDB4MzQsCisJCSAweDc0LCAweDMyLCAweDc1LCAweDkyLCAweDc2LCAweDAwLCAweDA5LCAweDAxLAorCQkgMHg2MCwgMHgxNH07CisJc3RhdGljIGNvbnN0IF9fdTggcG9sbDJbXSA9CisJCXsweDY3LCAweDAyLCAweDY4LCAweDcxLCAweDY5LCAweDcyLCAweDcyLCAweGE5LAorCQkgMHg3MywgMHgwMiwgMHg3MywgMHgwMiwgMHg2MCwgMHgxNH07CisJc3RhdGljIGNvbnN0IF9fdTggcG9sbDNbXSA9CisJCXsweDg3LCAweDNmLCAweDg4LCAweDIwLCAweDg5LCAweDJkfTsKKwlzdGF0aWMgY29uc3QgX191OCBwb2xsNFtdID0KKwkJezB4YTYsIDB4MGEsIDB4ZWEsIDB4Y2YsIDB4YmUsIDB4MjYsIDB4YjEsIDB4NWYsCisJCSAweGExLCAweGIxLCAweGRhLCAweDZiLCAweGRiLCAweDk4LCAweGRmLCAweDBjLAorCQkgMHhjMiwgMHg4MCwgMHhjMywgMHgxMH07CiAKLQlpZiAoY29udHJhc3QgPCA3KQotCQlyZWdfdG9fd3JpdGUgPSAweDhlYTkgLSAoMHgyMDAgKiBjb250cmFzdCk7Ci0JZWxzZQotCQlyZWdfdG9fd3JpdGUgPSAoMHgwMGE5ICsgKChjb250cmFzdCAtIDcpICogMHgyMDApKTsKLQotCXJlZ193KGdzcGNhX2RldiwgMHgwMCwgcmVnX3RvX3dyaXRlLCBOVUxMLCAwKTsKKwlpZiAoc2QtPnNlbnNvciAhPSBTRU5TT1JfVEFTNTEzMEEpIHsKKwkJUERFQlVHKERfU1RSRUFNLCAiW1NlbnNvciByZXF1aXJlcyBwb2xsaW5nXSIpOworCQlyZWdfd19idWYoZ3NwY2FfZGV2LCBwb2xsMSwgc2l6ZW9mIHBvbGwxKTsKKwkJcmVnX3dfYnVmKGdzcGNhX2RldiwgcG9sbDIsIHNpemVvZiBwb2xsMik7CisJCXJlZ193X2J1Zihnc3BjYV9kZXYsIHBvbGwzLCBzaXplb2YgcG9sbDMpOworCQlyZWdfd19idWYoZ3NwY2FfZGV2LCBwb2xsNCwgc2l6ZW9mIHBvbGw0KTsKKwl9CiB9CiAKLXN0YXRpYyB2b2lkIHNldGNvbG9ycyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCitzdGF0aWMgaW50IHNkX3N0YXJ0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKIHsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7Ci0JX191MTYgcmVnX3RvX3dyaXRlOworCWludCBpLCBtb2RlOworCV9fdTggdDJbXSA9IHsgMHgwNywgMHgwMCwgMHgwZCwgMHg2MCwgMHgwZSwgMHg4MCB9OworCXN0YXRpYyBjb25zdCBfX3U4IHQzW10gPQorCQl7IDB4YjMsIDB4MDcsIDB4YjQsIDB4MDAsIDB4YjUsIDB4ODgsIDB4YjYsIDB4MDIsIDB4YjcsIDB4MDYsCisJCSAgMHhiOCwgMHgwMCwgMHhiOSwgMHhlNywgMHhiYSwgMHgwMSB9OwogCi0JcmVnX3RvX3dyaXRlID0gMHhjMGJiICsgc2QtPmNvbG9ycyAqIDB4MTAwOwotCXJlZ193KGdzcGNhX2RldiwgMHgwMCwgcmVnX3RvX3dyaXRlLCBOVUxMLCAwKTsKKwltb2RlID0gZ3NwY2FfZGV2LT5jYW0uY2FtX21vZGVbKGludCkgZ3NwY2FfZGV2LT5jdXJyX21vZGVdLiBwcml2OworCXN3aXRjaCAobW9kZSkgeworCWNhc2UgMToJCS8qIDM1MngyODggKi8KKwkJdDJbMV0gPSAweDQwOworCQlicmVhazsKKwljYXNlIDI6CQkvKiAzMjB4MjQwICovCisJCXQyWzFdID0gMHgxMDsKKwkJYnJlYWs7CisJY2FzZSAzOgkJLyogMTc2eDE0NCAqLworCQl0MlsxXSA9IDB4NTA7CisJCWJyZWFrOworCWNhc2UgNDoJCS8qIDE2MHgxMjAgKi8KKwkJdDJbMV0gPSAweDIwOworCQlicmVhazsKKwlkZWZhdWx0OgkvKiA2NDB4NDgwICgweDAwKSAqLworCQlicmVhazsKKwl9CisKKwlpZiAoc2QtPnNlbnNvciA9PSBTRU5TT1JfVEFTNTEzMEEpIHsKKwkJaSA9IDA7CisJCXdoaWxlICh0YXM1MTMwYV9zZW5zb3JfaW5pdFtpXVswXSAhPSAwKSB7CisJCQlyZWdfd19idWYoZ3NwY2FfZGV2LCB0YXM1MTMwYV9zZW5zb3JfaW5pdFtpXSwKKwkJCQkJIHNpemVvZiB0YXM1MTMwYV9zZW5zb3JfaW5pdFswXSk7CisJCQlpKys7CisJCX0KKwkJcmVnX3coZ3NwY2FfZGV2LCAweDNjODApOworCQkvKiBqdXN0IGluIGNhc2UgYW5kIHRvIGtlZXAgc3luYyB3aXRoIGxvZ3MgKGZvciBtaW5lKSAqLworCQlyZWdfd19idWYoZ3NwY2FfZGV2LCB0YXM1MTMwYV9zZW5zb3JfaW5pdFszXSwKKwkJCQkgc2l6ZW9mIHRhczUxMzBhX3NlbnNvcl9pbml0WzBdKTsKKwkJcmVnX3coZ3NwY2FfZGV2LCAweDNjODApOworCX0gZWxzZSB7CisJCW9tNjgwMl9zZW5zb3JfaW5pdChnc3BjYV9kZXYpOworCX0KKwlyZWdfd19idWYoZ3NwY2FfZGV2LCBzZW5zb3JfZGF0YVtzZC0+c2Vuc29yXS5kYXRhNCwKKwkJCXNpemVvZiBzZW5zb3JfZGF0YVtzZC0+c2Vuc29yXS5kYXRhNCk7CisJcmVnX3IoZ3NwY2FfZGV2LCAweDAwMTIpOworCXJlZ193X2J1Zihnc3BjYV9kZXYsIHQyLCBzaXplb2YgdDIpOworCXJlZ193X2J1Zihnc3BjYV9kZXYsIHQzLCBzaXplb2YgdDMpOworCXJlZ193KGdzcGNhX2RldiwgMHgwMDEzKTsKKwltc2xlZXAoMTUpOworCXJlZ193X2J1Zihnc3BjYV9kZXYsIHNlbnNvcl9kYXRhW3NkLT5zZW5zb3JdLnN0cmVhbSwKKwkJCXNpemVvZiBzZW5zb3JfZGF0YVtzZC0+c2Vuc29yXS5zdHJlYW0pOworCXBvbGxfc2Vuc29yKGdzcGNhX2Rldik7CisKKwkvKiByZXN0YXJ0IG9uIGVhY2ggc3RhcnQsIGp1c3QgaW4gY2FzZSwgc29tZXRpbWVzIHJlZ3MgZ29lcyB3cm9uZworCSAqIHdoZW4gdXNpbmcgY29udHJvbHMgZnJvbSBhcHAgKi8KKwlzZXRicmlnaHRuZXNzKGdzcGNhX2Rldik7CisJc2V0Y29udHJhc3QoZ3NwY2FfZGV2KTsKKwlzZXRjb2xvcnMoZ3NwY2FfZGV2KTsKKwlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgc2V0Z2FtbWEoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQotewotfQotCi1zdGF0aWMgdm9pZCBzZXRzaGFycG5lc3Moc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQorc3RhdGljIHZvaWQgc2Rfc3RvcE4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQogewogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKLQlfX3UxNiByZWdfdG9fd3JpdGU7CiAKLQlyZWdfdG9fd3JpdGUgPSAweDBhYTYgKyAweDEwMDAgKiBzZC0+c2hhcnBuZXNzOworCXJlZ193X2J1Zihnc3BjYV9kZXYsIHNlbnNvcl9kYXRhW3NkLT5zZW5zb3JdLnN0cmVhbSwKKwkJCXNpemVvZiBzZW5zb3JfZGF0YVtzZC0+c2Vuc29yXS5zdHJlYW0pOworCW1zbGVlcCgyMCk7CisJcmVnX3dfYnVmKGdzcGNhX2Rldiwgc2Vuc29yX2RhdGFbc2QtPnNlbnNvcl0uc3RyZWFtLAorCQkJc2l6ZW9mIHNlbnNvcl9kYXRhW3NkLT5zZW5zb3JdLnN0cmVhbSk7CisJbXNsZWVwKDIwKTsKKwlyZWdfdyhnc3BjYV9kZXYsIDB4MDMwOSk7Cit9CiAKLQlyZWdfdyhnc3BjYV9kZXYsIDB4MDAsIHJlZ190b193cml0ZSwgTlVMTCwgMCk7CitzdGF0aWMgdm9pZCBzZF9wa3Rfc2NhbihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCisJCQlzdHJ1Y3QgZ3NwY2FfZnJhbWUgKmZyYW1lLAkvKiB0YXJnZXQgKi8KKwkJCV9fdTggKmRhdGEsCQkJLyogaXNvYyBwYWNrZXQgKi8KKwkJCWludCBsZW4pCQkJLyogaXNvIHBhY2tldCBsZW5ndGggKi8KK3sKKwlzdGF0aWMgX191OCBmZmQ5W10gPSB7IDB4ZmYsIDB4ZDkgfTsKKworCWlmIChkYXRhWzBdID09IDB4NWEpIHsKKwkJLyogQ29udHJvbCBQYWNrZXQsIGFmdGVyIHRoaXMgY2FtZSB0aGUgaGVhZGVyIGFnYWluLAorCQkgKiBidXQgZXh0cmEgYnl0ZXMgY2FtZSBpbiB0aGUgcGFja2V0IGJlZm9yZSB0aGlzLAorCQkgKiBzb21ldGltZXMgYW4gRU9GIGFycml2ZXMsIHNvbWV0aW1lcyBub3QuLi4gKi8KKwkJcmV0dXJuOworCX0KKwlkYXRhICs9IDI7CisJbGVuIC09IDI7CisJaWYgKGRhdGFbMF0gPT0gMHhmZiAmJiBkYXRhWzFdID09IDB4ZDgpIHsKKwkJLyogZXh0cmEgYnl0ZXMuLi4uLiwgY291bGQgYmUgcHJvY2Vzc2VkIHRvbyBidXQgd291bGQgYmUKKwkJICogYSB3YXN0ZSBvZiB0aW1lLCByaWdodCBub3cgbGVhdmUgdGhlIGFwcGxpY2F0aW9uIGFuZAorCQkgKiBsaWJqcGVnIGRvIGl0IGZvciBvdXJzZXJsdmVzLi4gKi8KKwkJZnJhbWUgPSBnc3BjYV9mcmFtZV9hZGQoZ3NwY2FfZGV2LCBMQVNUX1BBQ0tFVCwgZnJhbWUsCisJCQkJCWZmZDksIDIpOworCQlnc3BjYV9mcmFtZV9hZGQoZ3NwY2FfZGV2LCBGSVJTVF9QQUNLRVQsIGZyYW1lLCBkYXRhLCBsZW4pOworCQlyZXR1cm47CisJfQorCisJaWYgKGRhdGFbbGVuIC0gMl0gPT0gMHhmZiAmJiBkYXRhW2xlbiAtIDFdID09IDB4ZDkpIHsKKwkJLyogSnVzdCBpbiBjYXNlLCBpIGhhdmUgc2VlbiBwYWNrZXRzIHdpdGggdGhlIG1hcmtlciwKKwkJICogb3RoZXIncyBkbyBub3QgaW5jbHVkZSBpdC4uLiAqLworCQlsZW4gLT0gMjsKKwl9CisJZ3NwY2FfZnJhbWVfYWRkKGdzcGNhX2RldiwgSU5URVJfUEFDS0VULCBmcmFtZSwgZGF0YSwgbGVuKTsKIH0KIAogc3RhdGljIGludCBzZF9zZXRicmlnaHRuZXNzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKQpAQCAtNzg4LDYgKzEwNDMsNyBAQAogc3RhdGljIGludCBzZF9nZXRnYW1tYShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpCiB7CiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCiAJKnZhbCA9IHNkLT5nYW1tYTsKIAlyZXR1cm4gMDsKIH0KQEAgLTgzNSw5ICsxMDkxLDkgQEAKIAogCXNkLT5hdXRvZ2FpbiA9IHZhbDsKIAlpZiAodmFsICE9IDApCi0JCXJlZ193KGdzcGNhX2RldiwgMHgwMCwgMHhmNDhlLCBOVUxMLCAwKTsKKwkJcmVnX3coZ3NwY2FfZGV2LCAweGY0OGUpOwogCWVsc2UKLQkJcmVnX3coZ3NwY2FfZGV2LCAweDAwLCAweGI0OGUsIE5VTEwsIDApOworCQlyZWdfdyhnc3BjYV9kZXYsIDB4YjQ4ZSk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTg0OSw5OSArMTEwNSw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIHNkX3N0YXJ0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKLXsKLQlpbnQgbW9kZTsKLQotCXN0YXRpYyBjb25zdCBfX3U4IHQxW10gPSB7IDB4NjYsIDB4MDAsIDB4YTgsIDB4ZTggfTsKLQlfX3U4IHQyW10gPSB7IDB4MDcsIDB4MDAsIDB4MGQsIDB4NjAsIDB4MGUsIDB4ODAgfTsKLQlzdGF0aWMgY29uc3QgX191OCB0M1tdID0KLQkJeyAweGIzLCAweDA3LCAweGI0LCAweDAwLCAweGI1LCAweDg4LCAweGI2LCAweDAyLCAweGI3LCAweDA2LAotCQkgIDB4YjgsIDB4MDAsIDB4YjksIDB4ZTcsIDB4YmEsIDB4MDEgfTsKLQlzdGF0aWMgY29uc3QgX191OCB0NFtdID0geyAweDBiLCAweDA0LCAweDBhLCAweDQwIH07Ci0KLQltb2RlID0gZ3NwY2FfZGV2LT5jYW0uY2FtX21vZGVbKGludCkgZ3NwY2FfZGV2LT5jdXJyX21vZGVdLiBwcml2OwotCXN3aXRjaCAobW9kZSkgewotCWNhc2UgMToJCS8qIDM1MngyODggKi8KLQkJdDJbMV0gPSAweDQwOwotCQlicmVhazsKLQljYXNlIDI6CQkvKiAzMjB4MjQwICovCi0JCXQyWzFdID0gMHgxMDsKLQkJYnJlYWs7Ci0JY2FzZSAzOgkJLyogMTc2eDE0NCAqLwotCQl0MlsxXSA9IDB4NTA7Ci0JCWJyZWFrOwotCWNhc2UgNDoJCS8qIDE2MHgxMjAgKi8KLQkJdDJbMV0gPSAweDIwOwotCQlicmVhazsKLQlkZWZhdWx0OgkvKiA2NDB4NDgwICgweDAwKSAqLwotCQlicmVhazsKLQl9Ci0KLQlyZWdfdyhnc3BjYV9kZXYsIDB4MDEsIDB4MDAwMCwgdGFzNTEzMGFfc2Vuc29yX2luaXRbMF0sIDB4OCk7Ci0JcmVnX3coZ3NwY2FfZGV2LCAweDAxLCAweDAwMDAsIHRhczUxMzBhX3NlbnNvcl9pbml0WzFdLCAweDgpOwotCXJlZ193KGdzcGNhX2RldiwgMHgwMSwgMHgwMDAwLCB0YXM1MTMwYV9zZW5zb3JfaW5pdFsyXSwgMHg4KTsKLQlyZWdfdyhnc3BjYV9kZXYsIDB4MDEsIDB4MDAwMCwgdGFzNTEzMGFfc2Vuc29yX2luaXRbM10sIDB4OCk7Ci0JcmVnX3coZ3NwY2FfZGV2LCAweDAwLCAweDNjODAsIE5VTEwsIDApOwotCQkvKiBqdXN0IGluIGNhc2UgYW5kIHRvIGtlZXAgc3luYyB3aXRoIGxvZ3MgIChmb3IgbWluZSkgKi8KLQlyZWdfdyhnc3BjYV9kZXYsIDB4MDEsIDB4MDAwMCwgdGFzNTEzMGFfc2Vuc29yX2luaXRbM10sIDB4OCk7Ci0JcmVnX3coZ3NwY2FfZGV2LCAweDAwLCAweDNjODAsIE5VTEwsIDApOwotCQkvKiBqdXN0IGluIGNhc2UgYW5kIHRvIGtlZXAgc3luYyB3aXRoIGxvZ3MgIChmb3IgbWluZSkgKi8KLQlyZWdfdyhnc3BjYV9kZXYsIDB4MDEsIDB4MDAwMCwgdDEsIDQpOwotCXJlZ193KGdzcGNhX2RldiwgMHgwMSwgMHgwMDAwLCB0MiwgNik7Ci0JcmVnX3JfMShnc3BjYV9kZXYsIDB4MDAxMik7Ci0JcmVnX3coZ3NwY2FfZGV2LCAweDAxLCAweDAwMDAsIHQzLCAweDEwKTsKLQlyZWdfdyhnc3BjYV9kZXYsIDB4MDAsIDB4MDAxMywgTlVMTCwgMCk7Ci0JcmVnX3coZ3NwY2FfZGV2LCAweDAxLCAweDAwMDAsIHQ0LCAweDQpOwotCS8qIHJlc3RhcnQgb24gZWFjaCBzdGFydCwganVzdCBpbiBjYXNlLCBzb21ldGltZXMgcmVncyBnb2VzIHdyb25nCi0JICogd2hlbiB1c2luZyBjb250cm9scyBmcm9tIGFwcCAqLwotCXNldGJyaWdodG5lc3MoZ3NwY2FfZGV2KTsKLQlzZXRjb250cmFzdChnc3BjYV9kZXYpOwotCXNldGNvbG9ycyhnc3BjYV9kZXYpOwotfQotCi1zdGF0aWMgdm9pZCBzZF9wa3Rfc2NhbihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCi0JCQlzdHJ1Y3QgZ3NwY2FfZnJhbWUgKmZyYW1lLAkvKiB0YXJnZXQgKi8KLQkJCV9fdTggKmRhdGEsCQkJLyogaXNvYyBwYWNrZXQgKi8KLQkJCWludCBsZW4pCQkJLyogaXNvIHBhY2tldCBsZW5ndGggKi8KLXsKLQlpbnQgc29mID0gMDsKLQlzdGF0aWMgX191OCBmZmQ5W10gPSB7IDB4ZmYsIDB4ZDkgfTsKLQotCWlmIChkYXRhWzBdID09IDB4NWEpIHsKLQkJLyogQ29udHJvbCBQYWNrZXQsIGFmdGVyIHRoaXMgY2FtZSB0aGUgaGVhZGVyIGFnYWluLAotCQkgKiBidXQgZXh0cmEgYnl0ZXMgY2FtZSBpbiB0aGUgcGFja2V0IGJlZm9yZSB0aGlzLAotCQkgKiBzb21ldGltZXMgYW4gRU9GIGFycml2ZXMsIHNvbWV0aW1lcyBub3QuLi4gKi8KLQkJcmV0dXJuOwotCX0KLQotCWlmIChkYXRhW2xlbiAtIDFdID09IDB4ZmYgJiYgZGF0YVtsZW5dID09IDB4ZDkpIHsKLQkJLyogSnVzdCBpbiBjYXNlLCBpIGhhdmUgc2VlbiBwYWNrZXRzIHdpdGggdGhlIG1hcmtlciwKLQkJICogb3RoZXIncyBkbyBub3QgaW5jbHVkZSBpdC4uLiAqLwotCQlkYXRhICs9IDI7Ci0JCWxlbiAtPSA0OwotCX0gZWxzZSBpZiAoZGF0YVsyXSA9PSAweGZmICYmIGRhdGFbM10gPT0gMHhkOCkgewotCQlzb2YgPSAxOwotCQlkYXRhICs9IDI7Ci0JCWxlbiAtPSAyOwotCX0gZWxzZSB7Ci0JCWRhdGEgKz0gMjsKLQkJbGVuIC09IDI7Ci0JfQotCi0JaWYgKHNvZikgewotCQkvKiBleHRyYSBieXRlcy4uLi4uLCBjb3VsZCBiZSBwcm9jZXNzZWQgdG9vIGJ1dCB3b3VsZCBiZQotCQkgKiBhIHdhc3RlIG9mIHRpbWUsIHJpZ2h0IG5vdyBsZWF2ZSB0aGUgYXBwbGljYXRpb24gYW5kCi0JCSAqIGxpYmpwZWcgZG8gaXQgZm9yIG91cnNlcmx2ZXMuLiAqLwotCQlmcmFtZSA9IGdzcGNhX2ZyYW1lX2FkZChnc3BjYV9kZXYsIExBU1RfUEFDS0VULCBmcmFtZSwKLQkJCQkJZmZkOSwgMik7Ci0JCWdzcGNhX2ZyYW1lX2FkZChnc3BjYV9kZXYsIEZJUlNUX1BBQ0tFVCwgZnJhbWUsIGRhdGEsIGxlbik7Ci0JCXJldHVybjsKLQl9Ci0KLQlnc3BjYV9mcmFtZV9hZGQoZ3NwY2FfZGV2LCBJTlRFUl9QQUNLRVQsIGZyYW1lLCBkYXRhLCBsZW4pOwotfQotCiBzdGF0aWMgaW50IHNkX3F1ZXJ5bWVudShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCiAJCQlzdHJ1Y3QgdjRsMl9xdWVyeW1lbnUgKm1lbnUpCiB7CkBAIC05NzUsNiArMTEzOCw3IEBACiAJLmNvbmZpZyA9IHNkX2NvbmZpZywKIAkuaW5pdCA9IHNkX2luaXQsCiAJLnN0YXJ0ID0gc2Rfc3RhcnQsCisJLnN0b3BOID0gc2Rfc3RvcE4sCiAJLnBrdF9zY2FuID0gc2RfcGt0X3NjYW4sCiAJLnF1ZXJ5bWVudSA9IHNkX3F1ZXJ5bWVudSwKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3R2ODUzMi5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS90djg1MzIuYwppbmRleCAwODRhZjA1Li45NjhhNTkxIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3R2ODUzMi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvdHY4NTMyLmMKQEAgLTM5MCw3ICszOTAsNyBAQAogfQogCiAvKiAtLSBzdGFydCB0aGUgY2FtZXJhIC0tICovCi1zdGF0aWMgdm9pZCBzZF9zdGFydChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCitzdGF0aWMgaW50IHNkX3N0YXJ0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKIHsKIAlyZWdfd18xKGdzcGNhX2RldiwgVFY4NTMyX0FEX1NMT1BFLCAweDMyKTsKIAlyZWdfd18xKGdzcGNhX2RldiwgVFY4NTMyX0FEX0JJVENUUkwsIDB4MDApOwpAQCAtNDQzLDYgKzQ0Myw3IEBACiAJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAl0dl84NTMyX1BvbGxSZWcoZ3NwY2FfZGV2KTsKIAlyZWdfd18xKGdzcGNhX2RldiwgVFY4NTMyX1VEUF9VUERBVEUsIDB4MDApOwkvKiAweDMxICovCisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB2b2lkIHNkX3N0b3BOKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvdmMwMzJ4LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3ZjMDMyeC5jCmluZGV4IGJkNGMyMjYuLmJlNDZkOTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvdmMwMzJ4LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS92YzAzMnguYwpAQCAtODAsNyArODAsNiBAQAogCQkuc3RlcCAgICA9IDEsCiAjZGVmaW5lIEZSRVFfREVGIDEKIAkJLmRlZmF1bHRfdmFsdWUgPSBGUkVRX0RFRiwKLQkJLmRlZmF1bHRfdmFsdWUgPSAxLAogCSAgICB9LAogCSAgICAuc2V0ID0gc2Rfc2V0ZnJlcSwKIAkgICAgLmdldCA9IHNkX2dldGZyZXEsCkBAIC0xNTAyLDcgKzE1MDEsNyBAQAogCXVzYl9leGNoYW5nZShnc3BjYV9kZXYsIG92NzY2MF9mcmVxX3RiW3NkLT5saWdodGZyZXFdKTsKIH0KIAotc3RhdGljIHZvaWQgc2Rfc3RhcnQoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQorc3RhdGljIGludCBzZF9zdGFydChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCiB7CiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwogCWNvbnN0IF9fdTggKkdhbW1hVCA9IE5VTEw7CkBAIC0xNTg2LDcgKzE1ODUsNyBAQAogCQlicmVhazsKIAlkZWZhdWx0OgogCQlQREVCVUcoRF9QUk9CRSwgIkRhbW5lZCAhISBubyBzZW5zb3IgZm91bmQgQnllIik7Ci0JCXJldHVybjsKKwkJcmV0dXJuIC1FTUVESVVNVFlQRTsKIAl9CiAJaWYgKEdhbW1hVCAmJiBNYXRyaXhUKSB7CiAJCXB1dF90YWJfdG9fcmVnKGdzcGNhX2RldiwgR2FtbWFULCAxNywgMHhiODRhKTsKQEAgLTE2MjIsNiArMTYyMSw3IEBACiAJCXNldGF1dG9nYWluKGdzcGNhX2Rldik7CiAJCXNldGxpZ2h0ZnJlcShnc3BjYV9kZXYpOwogCX0KKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHZvaWQgc2Rfc3RvcE4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS96YzN4eC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS96YzN4eC5jCmluZGV4IGQ2MWVmNzIuLmQwYTQ0NTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvemMzeHguYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3pjM3h4LmMKQEAgLTcxNzgsNyArNzE3OCw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIHNkX3N0YXJ0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3N0YXRpYyBpbnQgc2Rfc3RhcnQoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQogewogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKIAlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2ID0gZ3NwY2FfZGV2LT5kZXY7CkBAIC03MzMxLDYgKzczMzEsNyBAQAogCQlyZWdfdyhkZXYsIDB4MDIsIDB4MDAwOCk7CiAJCWJyZWFrOwogCX0KKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHZvaWQgc2Rfc3RvcDAoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9pci1rYmQtaTJjLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2lyLWtiZC1pMmMuYwppbmRleCBhMzAyNTRiLi5lZmU4NDk5IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2lyLWtiZC1pMmMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2lyLWtiZC1pMmMuYwpAQCAtMTIsNiArMTIsMTAgQEAKICAqICAgICAgTWFya3VzIFJlY2hiZXJnZXIgPG1yZWNoYmVyZ2VyQGdtYWlsLmNvbT4KICAqIG1vZGlmaWVkIGZvciBEVmlDTyBGdXNpb24gSERUViA1IFJUIEdPTEQgYnkKICAqICAgICAgQ2hhb2d1aSBaaGFuZyA8Y3poYW5nMTk3NEBnbWFpbC5jb20+CisgKiBtb2RpZmllZCBmb3IgTVNJIFRWQG55d2hlcmUgUGx1cyBieQorICogICAgICBIZW5yeSBXb25nIDxoZW5yeUBzdHVmZmVkY293Lm5ldD4KKyAqICAgICAgTWFyayBTY2h1bHR6IDxuOXhtakB5YWhvby5jb20+CisgKiAgICAgIEJyaWFuIFJvZ2VycyA8YnJpYW5fcm9nZXJzQGNvbWNhc3QubmV0PgogICoKICAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CkBAIC02NSw3ICs2OSw3IEBACiAJCQkgICAgICAgaW50IHNpemUsIGludCBvZmZzZXQpCiB7CiAJdW5zaWduZWQgY2hhciBidWZbNl07Ci0JaW50IHN0YXJ0LCByYW5nZSwgdG9nZ2xlLCBkZXYsIGNvZGU7CisJaW50IHN0YXJ0LCByYW5nZSwgdG9nZ2xlLCBkZXYsIGNvZGUsIGlyY29kZTsKIAogCS8qIHBvbGwgSVIgY2hpcCAqLwogCWlmIChzaXplICE9IGkyY19tYXN0ZXJfcmVjdigmaXItPmMsYnVmLHNpemUpKQpAQCAtODUsNiArODksMjQgQEAKIAlpZiAoIXN0YXJ0KQogCQkvKiBubyBrZXkgcHJlc3NlZCAqLwogCQlyZXR1cm4gMDsKKwkvKgorCSAqIEhhdXBwYXVnZSByZW1vdGVzIChibGFjay9zaWx2ZXIpIGFsd2F5cyB1c2UKKwkgKiBzcGVjaWZpYyBkZXZpY2UgaWRzLiBJZiB3ZSBkbyBub3QgZmlsdGVyIHRoZQorCSAqIGRldmljZSBpZHMgdGhlbiBtZXNzYWdlcyBkZXN0aW5lZCBmb3IgZGV2aWNlcworCSAqIHN1Y2ggYXMgVFZzIChpZD0wKSB3aWxsIGdldCB0aHJvdWdoIGNhdXNpbmcKKwkgKiBtaXMtZmlyZWQgZXZlbnRzLgorCSAqCisJICogV2UgYWxzbyBmaWx0ZXIgb3V0IGludmFsaWQga2V5IHByZXNzZXMgd2hpY2gKKwkgKiBwcm9kdWNlIGFubm95aW5nIGRlYnVnIGxvZyBlbnRyaWVzLgorCSAqLworCWlyY29kZT0gKHN0YXJ0IDw8IDEyKSB8ICh0b2dnbGUgPDwgMTEpIHwgKGRldiA8PCA2KSB8IGNvZGU7CisJaWYgKChpcmNvZGUgJiAweDFmZmYpPT0weDFmZmYpCisJCS8qIGludmFsaWQga2V5IHByZXNzICovCisJCXJldHVybiAwOworCisJaWYgKGRldiE9MHgxZSAmJiBkZXYhPTB4MWYpCisJCS8qIG5vdCBhIGhhdXBwYXVnZSByZW1vdGUgKi8KKwkJcmV0dXJuIDA7CiAKIAlpZiAoIXJhbmdlKQogCQljb2RlICs9IDY0OwpAQCAtOTQsNyArMTE2LDcgQEAKIAogCS8qIHJldHVybiBrZXkgKi8KIAkqaXJfa2V5ID0gY29kZTsKLQkqaXJfcmF3ID0gKHN0YXJ0IDw8IDEyKSB8ICh0b2dnbGUgPDwgMTEpIHwgKGRldiA8PCA2KSB8IGNvZGU7CisJKmlyX3JhdyA9IGlyY29kZTsKIAlyZXR1cm4gMTsKIH0KIApAQCAtMjI0LDkgKzI0NiwxNSBAQAogc3RhdGljIHZvaWQgaXJfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiB7CiAJc3RydWN0IElSX2kyYyAqaXIgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IElSX2kyYywgd29yayk7CisJaW50IHBvbGxpbmdfaW50ZXJ2YWwgPSAxMDA7CisKKwkvKiBNU0kgVFZAbnl3aGVyZSBQbHVzIHJlcXVpcmVzIG1vcmUgZnJlcXVlbnQgcG9sbGluZworCSAgIG90aGVyd2lzZSBpdCB3aWxsIG1pc3Mgc29tZSBrZXlwcmVzc2VzICovCisJaWYgKGlyLT5jLmFkYXB0ZXItPmlkID09IEkyQ19IV19TQUE3MTM0ICYmIGlyLT5jLmFkZHIgPT0gMHgzMCkKKwkJcG9sbGluZ19pbnRlcnZhbCA9IDUwOwogCiAJaXJfa2V5X3BvbGwoaXIpOwotCW1vZF90aW1lcigmaXItPnRpbWVyLCBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcygxMDApKTsKKwltb2RfdGltZXIoJmlyLT50aW1lciwgamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMocG9sbGluZ19pbnRlcnZhbCkpOwogfQogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwpAQCAtNDY1LDkgKzQ5MywzNyBAQAogCQkJKDEgPT0gcmMpID8gInllcyIgOiAibm8iKTsKIAkJaWYgKDEgPT0gcmMpIHsKIAkJCWlyX2F0dGFjaChhZGFwLCBwcm9iZVtpXSwgMCwgMCk7Ci0JCQlicmVhazsKKwkJCXJldHVybiAwOwogCQl9CiAJfQorCisJLyogU3BlY2lhbCBjYXNlIGZvciBNU0kgVFZAbnl3aGVyZSBQbHVzIHJlbW90ZSAqLworCWlmIChhZGFwLT5pZCA9PSBJMkNfSFdfU0FBNzEzNCkgeworCQl1OCB0ZW1wOworCisJCS8qIE1TSSBUVkBueXdoZXJlIFBsdXMgY29udHJvbGxlciBkb2Vzbid0IHNlZW0gdG8KKwkJICAgcmVzcG9uZCB0byBwcm9iZXMgdW5sZXNzIHdlIHJlYWQgc29tZXRoaW5nIGZyb20KKwkJICAgYW4gZXhpc3RpbmcgZGV2aWNlLiBXZWlyZC4uLiAqLworCisJCW1zZy5hZGRyID0gMHg1MDsKKwkJcmMgPSBpMmNfdHJhbnNmZXIoYWRhcCwgJm1zZywgMSk7CisJCQlkcHJpbnRrKDEsICJwcm9iZSAweCUwMnggQCAlczogJXNcbiIsCisJCQltc2cuYWRkciwgYWRhcC0+bmFtZSwKKwkJCSgxID09IHJjKSA/ICJ5ZXMiIDogIm5vIik7CisKKwkJLyogTm93IGRvIHRoZSBwcm9iZS4gVGhlIGNvbnRyb2xsZXIgZG9lcyBub3QgcmVzcG9uZAorCQkgICB0byAwLWJ5dGUgcmVhZHMsIHNvIHdlIHVzZSBhIDEtYnl0ZSByZWFkIGluc3RlYWQuICovCisJCW1zZy5hZGRyID0gMHgzMDsKKwkJbXNnLmxlbiA9IDE7CisJCW1zZy5idWYgPSAmdGVtcDsKKwkJcmMgPSBpMmNfdHJhbnNmZXIoYWRhcCwgJm1zZywgMSk7CisJCWRwcmludGsoMSwgInByb2JlIDB4JTAyeCBAICVzOiAlc1xuIiwKKwkJCW1zZy5hZGRyLCBhZGFwLT5uYW1lLAorCQkJKDEgPT0gcmMpID8gInllcyIgOiAibm8iKTsKKwkJaWYgKDEgPT0gcmMpCisJCQlpcl9hdHRhY2goYWRhcCwgbXNnLmFkZHIsIDAsIDApOworCX0KKwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1jYXJkcy5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtY2FyZHMuaAppbmRleCAzODFhZjFiLi4wYjhmZTg1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1jYXJkcy5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LWNhcmRzLmgKQEAgLTE1NCw3ICsxNTQsNyBAQAogI2RlZmluZSBJVlRWX0NBUF9FTkNPREVSIChWNEwyX0NBUF9WSURFT19DQVBUVVJFIHwgVjRMMl9DQVBfVFVORVIgfCBcCiAJCQkgIFY0TDJfQ0FQX0FVRElPIHwgVjRMMl9DQVBfUkVBRFdSSVRFIHwgVjRMMl9DQVBfVkJJX0NBUFRVUkUgfCBcCiAJCQkgIFY0TDJfQ0FQX1NMSUNFRF9WQklfQ0FQVFVSRSkKLSNkZWZpbmUgSVZUVl9DQVBfREVDT0RFUiAoVjRMMl9DQVBfVkJJX09VVFBVVCB8IFY0TDJfQ0FQX1ZJREVPX09VVFBVVCB8IFwKKyNkZWZpbmUgSVZUVl9DQVBfREVDT0RFUiAoVjRMMl9DQVBfVklERU9fT1VUUFVUIHwgXAogCQkJICBWNEwyX0NBUF9TTElDRURfVkJJX09VVFBVVCB8IFY0TDJfQ0FQX1ZJREVPX09VVFBVVF9PVkVSTEFZKQogCiBzdHJ1Y3QgaXZ0dl9jYXJkX3ZpZGVvX2lucHV0IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LWRyaXZlci5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtZHJpdmVyLmMKaW5kZXggNGFmYzdlYS4uYWVhYTEzZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtZHJpdmVyLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtZHJpdmVyLmMKQEAgLTYxLDE0ICs2MSwxNCBAQAogI2luY2x1ZGUgInR1bmVyLXhjMjAyOC5oIgogCiAvKiB2YXIgdG8ga2VlcCB0cmFjayBvZiB0aGUgbnVtYmVyIG9mIGFycmF5IGVsZW1lbnRzIGluIHVzZSAqLwotaW50IGl2dHZfY2FyZHNfYWN0aXZlID0gMDsKK2ludCBpdnR2X2NhcmRzX2FjdGl2ZTsKIAogLyogSWYgeW91IGhhdmUgYWxyZWFkeSBYIHY0bCBjYXJkcywgdGhlbiBzZXQgdGhpcyB0byBYLiBUaGlzIHdheQogICAgdGhlIGRldmljZSBudW1iZXJzIHN0YXkgbWF0Y2hlZC4gRXhhbXBsZTogeW91IGhhdmUgYSBXaW5UViBjYXJkCiAgICB3aXRob3V0IHJhZGlvIGFuZCBhIFBWUi0zNTAgd2l0aC4gTm9ybWFsbHkgdGhpcyB3b3VsZCBnaXZlIGEKICAgIHZpZGVvMSBkZXZpY2UgdG9nZXRoZXIgd2l0aCBhIHJhZGlvMCBkZXZpY2UgZm9yIHRoZSBQVlIuIEJ5CiAgICBzZXR0aW5nIHRoaXMgdG8gMSB5b3UgZW5zdXJlIHRoYXQgcmFkaW8wIGlzIG5vdyBhbHNvIHJhZGlvMS4gKi8KLWludCBpdnR2X2ZpcnN0X21pbm9yID0gMDsKK2ludCBpdnR2X2ZpcnN0X21pbm9yOwogCiAvKiBNYXN0ZXIgdmFyaWFibGUgZm9yIGFsbCBpdnR2IGluZm8gKi8KIHN0cnVjdCBpdnR2ICppdnR2X2NhcmRzW0lWVFZfTUFYX0NBUkRTXTsKQEAgLTI1MSw3ICsyNTEsNyBAQAogCQkgIlx0XHRcdC0xIGlzIGF1dG9kZXRlY3QsIDAgaXMgb2ZmLCAxIGlzIG9uXG4iCiAJCSAiXHRcdFx0RGVmYXVsdCBpcyBhdXRvZGV0ZWN0Iik7CiAKLU1PRFVMRV9QQVJNX0RFU0MoaXZ0dl9maXJzdF9taW5vciwgIlNldCBtaW5vciBhc3NpZ25lZCB0byBmaXJzdCBjYXJkIik7CitNT0RVTEVfUEFSTV9ERVNDKGl2dHZfZmlyc3RfbWlub3IsICJTZXQga2VybmVsIG51bWJlciBhc3NpZ25lZCB0byBmaXJzdCBjYXJkIik7CiAKIE1PRFVMRV9BVVRIT1IoIktldmluIFRoYXllciwgQ2hyaXMgS2VubmVkeSwgSGFucyBWZXJrdWlsIik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIkNYMjM0MTUvQ1gyMzQxNiBkcml2ZXIiKTsKQEAgLTY1NSw5ICs2NTUsOSBAQAogCiAJaWYgKGl0di0+Y2FyZCA9PSBOVUxMKSB7CiAJCWl0di0+Y2FyZCA9IGl2dHZfZ2V0X2NhcmQoSVZUVl9DQVJEX1BWUl8xNTApOwotCQlJVlRWX0VSUigiVW5rbm93biBjYXJkOiB2ZW5kb3IvZGV2aWNlOiAlMDR4LyUwNHhcbiIsCisJCUlWVFZfRVJSKCJVbmtub3duIGNhcmQ6IHZlbmRvci9kZXZpY2U6IFslMDR4OiUwNHhdXG4iLAogCQkgICAgIGl0di0+ZGV2LT52ZW5kb3IsIGl0di0+ZGV2LT5kZXZpY2UpOwotCQlJVlRWX0VSUigiICAgICAgICAgICAgICBzdWJzeXN0ZW0gdmVuZG9yL2RldmljZTogJTA0eC8lMDR4XG4iLAorCQlJVlRWX0VSUigiICAgICAgICAgICAgICBzdWJzeXN0ZW0gdmVuZG9yL2RldmljZTogWyUwNHg6JTA0eF1cbiIsCiAJCSAgICAgaXR2LT5kZXYtPnN1YnN5c3RlbV92ZW5kb3IsIGl0di0+ZGV2LT5zdWJzeXN0ZW1fZGV2aWNlKTsKIAkJSVZUVl9FUlIoIiAgICAgICAgICAgICAgJXMgYmFzZWRcbiIsIGNoaXBuYW1lKTsKIAkJSVZUVl9FUlIoIkRlZmF1bHRpbmcgdG8gJXMgY2FyZFxuIiwgaXR2LT5jYXJkLT5uYW1lKTsKQEAgLTcyMCw3ICs3MjAsNyBAQAogCWl0di0+c3BlZWQgPSAxMDAwOwogCiAJLyogVkJJICovCi0JaXR2LT52YmkuaW4udHlwZSA9IFY0TDJfQlVGX1RZUEVfU0xJQ0VEX1ZCSV9DQVBUVVJFOworCWl0di0+dmJpLmluLnR5cGUgPSBWNEwyX0JVRl9UWVBFX1ZCSV9DQVBUVVJFOwogCWl0di0+dmJpLnNsaWNlZF9pbiA9ICZpdHYtPnZiaS5pbi5mbXQuc2xpY2VkOwogCiAJLyogSW5pdCB0aGUgc2cgdGFibGUgZm9yIG9zZC95dXYgb3V0cHV0ICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1kcml2ZXIuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LWRyaXZlci5oCmluZGV4IDJjZWI1MjIuLjM3MzNiMmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LWRyaXZlci5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LWRyaXZlci5oCkBAIC00OSwxMyArNDksMTMgQEAKICNpbmNsdWRlIDxsaW51eC9pMmMtYWxnby1iaXQuaD4KICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CiAjaW5jbHVkZSA8bGludXgvdW5pc3RkLmg+Ci0jaW5jbHVkZSA8bGludXgvYnl0ZW9yZGVyL3N3YWIuaD4KICNpbmNsdWRlIDxsaW51eC9wYWdlbWFwLmg+CiAjaW5jbHVkZSA8bGludXgvc2NhdHRlcmxpc3QuaD4KICNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgorI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KIAogI2luY2x1ZGUgPGxpbnV4L2R2Yi92aWRlby5oPgogI2luY2x1ZGUgPGxpbnV4L2R2Yi9hdWRpby5oPgpAQCAtNTA3LDYgKzUwNyw4IEBACiAJc3RydWN0IHY0bDJfcmVjdCBtYWluX3JlY3Q7CiAJdTMyIHY0bDJfc3JjX3c7CiAJdTMyIHY0bDJfc3JjX2g7CisKKwl1OCBydW5uaW5nOyAvKiBIYXZlIGFueSBmcmFtZXMgYmVlbiBkaXNwbGF5ZWQgKi8KIH07CiAKICNkZWZpbmUgSVZUVl9WQklfRlJBTUVTIDMyCkBAIC03NTEsNiArNzUzLDEyIEBACiAvKiBGaXJzdC1vcGVuIGluaXRpYWxpemF0aW9uOiBsb2FkIGZpcm13YXJlLCBpbml0IGN4MjU4NDAsIGV0Yy4gKi8KIGludCBpdnR2X2luaXRfb25fZmlyc3Rfb3BlbihzdHJ1Y3QgaXZ0diAqaXR2KTsKIAorLyogVGVzdCBpZiB0aGUgY3VycmVudCBWQkkgbW9kZSBpcyByYXcgKDEpIG9yIHNsaWNlZCAoMCkgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGl2dHZfcmF3X3ZiaShjb25zdCBzdHJ1Y3QgaXZ0diAqaXR2KQoreworCXJldHVybiBpdHYtPnZiaS5pbi50eXBlID09IFY0TDJfQlVGX1RZUEVfVkJJX0NBUFRVUkU7Cit9CisKIC8qIFRoaXMgaXMgYSBQQ0kgcG9zdCB0aGluZywgd2hlcmUgaWYgdGhlIHBjaSByZWdpc3RlciBpcyBub3QgcmVhZCwgdGhlbgogICAgdGhlIHdyaXRlIGRvZXNuJ3QgYWx3YXlzIHRha2UgZWZmZWN0IHJpZ2h0IGF3YXkuIEJ5IHJlYWRpbmcgYmFjayB0aGUKICAgIHJlZ2lzdGVyIGFueSBwZW5kaW5nIFBDSSB3cml0ZXMgd2lsbCBiZSBwZXJmb3JtZWQgKGluIG9yZGVyKSwgYW5kIHNvCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1maWxlb3BzLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1maWxlb3BzLmMKaW5kZXggN2VjNWM5OS4uMWM0MDRlNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtZmlsZW9wcy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LWZpbGVvcHMuYwpAQCAtMzksNyArMzksNyBAQAogICAgYXNzb2NpYXRlZCBWQkkgc3RyZWFtcyBhcmUgYWxzbyBhdXRvbWF0aWNhbGx5IGNsYWltZWQuCiAgICBQb3NzaWJsZSBlcnJvciByZXR1cm5zOiAtRUJVU1kgaWYgc29tZW9uZSBlbHNlIGhhcyBjbGFpbWVkCiAgICB0aGUgc3RyZWFtIG9yIDAgb24gc3VjY2Vzcy4gKi8KLWludCBpdnR2X2NsYWltX3N0cmVhbShzdHJ1Y3QgaXZ0dl9vcGVuX2lkICppZCwgaW50IHR5cGUpCitzdGF0aWMgaW50IGl2dHZfY2xhaW1fc3RyZWFtKHN0cnVjdCBpdnR2X29wZW5faWQgKmlkLCBpbnQgdHlwZSkKIHsKIAlzdHJ1Y3QgaXZ0diAqaXR2ID0gaWQtPml0djsKIAlzdHJ1Y3QgaXZ0dl9zdHJlYW0gKnMgPSAmaXR2LT5zdHJlYW1zW3R5cGVdOwpAQCAtNzgsNyArNzgsNyBAQAogCWlmICh0eXBlID09IElWVFZfREVDX1NUUkVBTV9UWVBFX01QRykgewogCQl2YmlfdHlwZSA9IElWVFZfREVDX1NUUkVBTV9UWVBFX1ZCSTsKIAl9IGVsc2UgaWYgKHR5cGUgPT0gSVZUVl9FTkNfU1RSRUFNX1RZUEVfTVBHICYmCi0JCSAgIGl0di0+dmJpLmluc2VydF9tcGVnICYmIGl0di0+dmJpLnNsaWNlZF9pbi0+c2VydmljZV9zZXQpIHsKKwkJICAgaXR2LT52YmkuaW5zZXJ0X21wZWcgJiYgIWl2dHZfcmF3X3ZiaShpdHYpKSB7CiAJCXZiaV90eXBlID0gSVZUVl9FTkNfU1RSRUFNX1RZUEVfVkJJOwogCX0gZWxzZSB7CiAJCXJldHVybiAwOwpAQCAtMzA1LDcgKzMwNSw3IEBACiAKIAlpZiAobGVuID4gdWNvdW50KSBsZW4gPSB1Y291bnQ7CiAJaWYgKGl0di0+dmJpLmluc2VydF9tcGVnICYmIHMtPnR5cGUgPT0gSVZUVl9FTkNfU1RSRUFNX1RZUEVfTVBHICYmCi0JICAgIGl0di0+dmJpLnNsaWNlZF9pbi0+c2VydmljZV9zZXQgJiYgYnVmICE9ICZpdHYtPnZiaS5zbGljZWRfbXBlZ19idWYpIHsKKwkgICAgIWl2dHZfcmF3X3ZiaShpdHYpICYmIGJ1ZiAhPSAmaXR2LT52Ymkuc2xpY2VkX21wZWdfYnVmKSB7CiAJCWNvbnN0IGNoYXIgKnN0YXJ0ID0gYnVmLT5idWYgKyBidWYtPnJlYWRwb3M7CiAJCWNvbnN0IGNoYXIgKnAgPSBzdGFydCArIDE7CiAJCWNvbnN0IHU4ICpxOwpAQCAtMzcyLDcgKzM3Miw3IEBACiAJLyogRWFjaCBWQkkgYnVmZmVyIGlzIG9uZSBmcmFtZSwgdGhlIHY0bDIgQVBJIHNheXMgdGhhdCBmb3IgVkJJIHRoZSBmcmFtZXMgc2hvdWxkCiAJICAgYXJyaXZlIG9uZS1ieS1vbmUsIHNvIG1ha2Ugc3VyZSB3ZSBuZXZlciBvdXRwdXQgbW9yZSB0aGFuIG9uZSBWQkkgZnJhbWUgYXQgYSB0aW1lICovCiAJaWYgKHMtPnR5cGUgPT0gSVZUVl9ERUNfU1RSRUFNX1RZUEVfVkJJIHx8Ci0JCQkocy0+dHlwZSA9PSBJVlRWX0VOQ19TVFJFQU1fVFlQRV9WQkkgJiYgaXR2LT52Ymkuc2xpY2VkX2luLT5zZXJ2aWNlX3NldCkpCisJICAgIChzLT50eXBlID09IElWVFZfRU5DX1NUUkVBTV9UWVBFX1ZCSSAmJiAhaXZ0dl9yYXdfdmJpKGl0dikpKQogCQlzaW5nbGVfZnJhbWUgPSAxOwogCiAJZm9yICg7OykgewpAQCAtNjAwLDEzICs2MDAsMTQgQEAKIAlzaW5jZSB3ZSBtYXkgZ2V0IGhlcmUgYmVmb3JlIHRoZSBzdHJlYW0gaGFzIGJlZW4gZnVsbHkgc2V0LXVwICovCiAJaWYgKG1vZGUgPT0gT1VUX1lVViAmJiBzLT5xX2Z1bGwubGVuZ3RoID09IDAgJiYgaXR2LT5kbWFfZGF0YV9yZXFfc2l6ZSkgewogCQl3aGlsZSAoY291bnQgPj0gaXR2LT5kbWFfZGF0YV9yZXFfc2l6ZSkgewotCQkJaWYgKCFpdnR2X3l1dl91ZG1hX3N0cmVhbV9mcmFtZSAoaXR2LCAodm9pZCBfX3VzZXIgKil1c2VyX2J1ZikpIHsKLQkJCQlieXRlc193cml0dGVuICs9IGl0di0+ZG1hX2RhdGFfcmVxX3NpemU7Ci0JCQkJdXNlcl9idWYgKz0gaXR2LT5kbWFfZGF0YV9yZXFfc2l6ZTsKLQkJCQljb3VudCAtPSBpdHYtPmRtYV9kYXRhX3JlcV9zaXplOwotCQkJfSBlbHNlIHsKLQkJCQlicmVhazsKLQkJCX0KKwkJCXJjID0gaXZ0dl95dXZfdWRtYV9zdHJlYW1fZnJhbWUoaXR2LCAodm9pZCBfX3VzZXIgKil1c2VyX2J1Zik7CisKKwkJCWlmIChyYyA8IDApCisJCQkJcmV0dXJuIHJjOworCisJCQlieXRlc193cml0dGVuICs9IGl0di0+ZG1hX2RhdGFfcmVxX3NpemU7CisJCQl1c2VyX2J1ZiArPSBpdHYtPmRtYV9kYXRhX3JlcV9zaXplOworCQkJY291bnQgLT0gaXR2LT5kbWFfZGF0YV9yZXFfc2l6ZTsKIAkJfQogCQlpZiAoY291bnQgPT0gMCkgewogCQkJSVZUVl9ERUJVR19ISV9GSUxFKCJXcm90ZSAlZCBieXRlcyB0byAlcyAoJWQpXG4iLCBieXRlc193cml0dGVuLCBzLT5uYW1lLCBzLT5xX2Z1bGwuYnl0ZXN1c2VkKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LWZpbGVvcHMuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LWZpbGVvcHMuaAppbmRleCAyYzhkNTE4Li5kZjgxZTc5IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1maWxlb3BzLmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtZmlsZW9wcy5oCkBAIC0zOCwxMSArMzgsNiBAQAogCiAvKiBVdGlsaXRpZXMgKi8KIAotLyogVHJ5IHRvIGNsYWltIGEgc3RyZWFtIGZvciB0aGUgZmlsZWhhbmRsZS4gUmV0dXJuIDAgb24gc3VjY2VzcywKLSAgIC1FQlVTWSBpZiBzdHJlYW0gYWxyZWFkeSBjbGFpbWVkLiBPbmNlIGEgc3RyZWFtIGlzIGNsYWltZWQsIGl0Ci0gICByZW1haW5zIGNsYWltZWQgdW50aWwgdGhlIGFzc29jaWF0ZWQgZmlsZWhhbmRsZSBpcyBjbG9zZWQuICovCi1pbnQgaXZ0dl9jbGFpbV9zdHJlYW0oc3RydWN0IGl2dHZfb3Blbl9pZCAqaWQsIGludCB0eXBlKTsKLQogLyogUmVsZWFzZSBhIHByZXZpb3VzbHkgY2xhaW1lZCBzdHJlYW0uICovCiB2b2lkIGl2dHZfcmVsZWFzZV9zdHJlYW0oc3RydWN0IGl2dHZfc3RyZWFtICpzKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtZ3Bpby5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtZ3Bpby5jCmluZGV4IGJjMjI5MDUuLjc0YTQ0ODQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LWdwaW8uYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1ncGlvLmMKQEAgLTEyNCw3ICsxMjQsNyBAQAogfQogCiAvKiBYY2VpdmUgdHVuZXIgcmVzZXQgZnVuY3Rpb24gKi8KLWludCBpdnR2X3Jlc2V0X3R1bmVyX2dwaW8odm9pZCAqZGV2LCBpbnQgY21kLCBpbnQgdmFsdWUpCitpbnQgaXZ0dl9yZXNldF90dW5lcl9ncGlvKHZvaWQgKmRldiwgaW50IGNvbXBvbmVudCwgaW50IGNtZCwgaW50IHZhbHVlKQogewogCXN0cnVjdCBpMmNfYWxnb19iaXRfZGF0YSAqYWxnbyA9IGRldjsKIAlzdHJ1Y3QgaXZ0diAqaXR2ID0gYWxnby0+ZGF0YTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LWdwaW8uaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LWdwaW8uaAppbmRleCA5NjRhMjY1Li40OGI2MjkxIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1ncGlvLmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtZ3Bpby5oCkBAIC0yNCw3ICsyNCw3IEBACiAvKiBHUElPIHN0dWZmICovCiB2b2lkIGl2dHZfZ3Bpb19pbml0KHN0cnVjdCBpdnR2ICppdHYpOwogdm9pZCBpdnR2X3Jlc2V0X2lyX2dwaW8oc3RydWN0IGl2dHYgKml0dik7Ci1pbnQgaXZ0dl9yZXNldF90dW5lcl9ncGlvKHZvaWQgKmRldiwgaW50IGNtZCwgaW50IHZhbHVlKTsKK2ludCBpdnR2X3Jlc2V0X3R1bmVyX2dwaW8odm9pZCAqZGV2LCBpbnQgY29tcG9uZW50LCBpbnQgY21kLCBpbnQgdmFsdWUpOwogaW50IGl2dHZfZ3BpbyhzdHJ1Y3QgaXZ0diAqaXR2LCB1bnNpZ25lZCBpbnQgY29tbWFuZCwgdm9pZCAqYXJnKTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1pMmMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LWkyYy5jCmluZGV4IGFmMTU0MjMuLjI0NzAwYzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LWkyYy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LWkyYy5jCkBAIC02NCw4ICs2NCw2IEBACiAjaW5jbHVkZSAiaXZ0di1ncGlvLmgiCiAjaW5jbHVkZSAiaXZ0di1pMmMuaCIKIAotI2luY2x1ZGUgPG1lZGlhL2lyLWtiZC1pMmMuaD4KLQogLyogaTJjIGltcGxlbWVudGF0aW9uIGZvciBjeDIzNDE1LzYgY2hpcCwgaXZ0diBwcm9qZWN0LgogICogQXV0aG9yOiBLZXZpbiBUaGF5ZXIgKG51ZmFuX3dmayBhdCB5YWhvby5jb20pCiAgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LWlvY3RsLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1pb2N0bC5jCmluZGV4IDYxMDMwMzAuLjIwOGZiNTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LWlvY3RsLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtaW9jdGwuYwpAQCAtMTAxLDE4ICsxMDEsMTUgQEAKIAl9CiB9CiAKLXN0YXRpYyBpbnQgY2hlY2tfc2VydmljZV9zZXQoc3RydWN0IHY0bDJfc2xpY2VkX3ZiaV9mb3JtYXQgKmZtdCwgaW50IGlzX3BhbCkKK3N0YXRpYyB2b2lkIGNoZWNrX3NlcnZpY2Vfc2V0KHN0cnVjdCB2NGwyX3NsaWNlZF92YmlfZm9ybWF0ICpmbXQsIGludCBpc19wYWwpCiB7CiAJaW50IGYsIGw7Ci0JdTE2IHNldCA9IDA7CiAKIAlmb3IgKGYgPSAwOyBmIDwgMjsgZisrKSB7CiAJCWZvciAobCA9IDA7IGwgPCAyNDsgbCsrKSB7CiAJCQlmbXQtPnNlcnZpY2VfbGluZXNbZl1bbF0gPSBzZWxlY3Rfc2VydmljZV9mcm9tX3NldChmLCBsLCBmbXQtPnNlcnZpY2VfbGluZXNbZl1bbF0sIGlzX3BhbCk7Ci0JCQlzZXQgfD0gZm10LT5zZXJ2aWNlX2xpbmVzW2ZdW2xdOwogCQl9CiAJfQotCXJldHVybiBzZXQgIT0gMDsKIH0KIAogdTE2IGl2dHZfZ2V0X3NlcnZpY2Vfc2V0KHN0cnVjdCB2NGwyX3NsaWNlZF92YmlfZm9ybWF0ICpmbXQpCkBAIC00NzQsNyArNDcxLDcgQEAKIAlpbnQgaCA9IGZtdC0+Zm10LnBpeC5oZWlnaHQ7CiAKIAl3ID0gbWluKHcsIDcyMCk7Ci0JdyA9IG1heCh3LCAxKTsKKwl3ID0gbWF4KHcsIDIpOwogCWggPSBtaW4oaCwgaXR2LT5pc181MGh6ID8gNTc2IDogNDgwKTsKIAloID0gbWF4KGgsIDIpOwogCWl2dHZfZ19mbXRfdmlkX2NhcChmaWxlLCBmaCwgZm10KTsKQEAgLTUxMiwyNyArNTA5LDM0IEBACiBzdGF0aWMgaW50IGl2dHZfdHJ5X2ZtdF92aWRfb3V0KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwgc3RydWN0IHY0bDJfZm9ybWF0ICpmbXQpCiB7CiAJc3RydWN0IGl2dHZfb3Blbl9pZCAqaWQgPSBmaDsKLQlzMzIgdywgaDsKLQlpbnQgZmllbGQ7Ci0JaW50IHJldDsKKwlzMzIgdyA9IGZtdC0+Zm10LnBpeC53aWR0aDsKKwlzMzIgaCA9IGZtdC0+Zm10LnBpeC5oZWlnaHQ7CisJaW50IGZpZWxkID0gZm10LT5mbXQucGl4LmZpZWxkOworCWludCByZXQgPSBpdnR2X2dfZm10X3ZpZF9vdXQoZmlsZSwgZmgsIGZtdCk7CiAKLQl3ID0gZm10LT5mbXQucGl4LndpZHRoOwotCWggPSBmbXQtPmZtdC5waXguaGVpZ2h0OwotCWZpZWxkID0gZm10LT5mbXQucGl4LmZpZWxkOwotCXJldCA9IGl2dHZfZ19mbXRfdmlkX291dChmaWxlLCBmaCwgZm10KTsKKwl3ID0gbWluKHcsIDcyMCk7CisJdyA9IG1heCh3LCAyKTsKKwkvKiBXaHkgY2FuIHRoZSBoZWlnaHQgYmUgNTc2IGV2ZW4gd2hlbiB0aGUgb3V0cHV0IGlzIE5UU0M/CisKKwkgICBJbnRlcm5hbGx5IHRoZSBidWZmZXJzIG9mIHRoZSBQVlIzNTAgYXJlIGFsd2F5cyBzZXQgdG8gNzIweDU3Ni4gVGhlCisJICAgZGVjb2RlZCB2aWRlbyBmcmFtZSB3aWxsIGFsd2F5cyBiZSBwbGFjZWQgaW4gdGhlIHRvcCBsZWZ0IGNvcm5lciBvZgorCSAgIHRoaXMgYnVmZmVyLiBGb3IgYW55IHZpZGVvIHdoaWNoIGlzIG5vdCA3MjB4NTc2LCB0aGUgYnVmZmVyIHdpbGwKKwkgICB0aGVuIGJlIGNyb3BwZWQgdG8gcmVtb3ZlIHRoZSB1bnVzZWQgcmlnaHQgYW5kIGxvd2VyIGFyZWFzLCB3aXRoCisJICAgdGhlIHJlbWFpbmluZyBpbWFnZSBiZWluZyBzY2FsZWQgYnkgdGhlIGhhcmR3YXJlIHRvIGZpdCB0aGUgZGlzcGxheQorCSAgIGFyZWEuIFRoZSB2aWRlbyBjYW4gYmUgc2NhbGVkIGJvdGggdXAgYW5kIGRvd24sIHNvIGEgNzIweDQ4MCB2aWRlbworCSAgIGNhbiBiZSBkaXNwbGF5ZWQgZnVsbC1zY3JlZW4gb24gUEFMIGFuZCBhIDcyMHg1NzYgdmlkZW8gY2FuIGJlCisJICAgZGlzcGxheWVkIHdpdGhvdXQgY3JvcHBpbmcgb24gTlRTQy4KKworCSAgIE5vdGUgdGhhdCB0aGUgc2NhbGluZyBvbmx5IG9jY3VycyBvbiB0aGUgdmlkZW8gc3RyZWFtLCB0aGUgb3NkCisJICAgcmVzb2x1dGlvbiBpcyBsb2NrZWQgdG8gdGhlIGJyb2FkY2FzdCBzdGFuZGFyZCBhbmQgbm90IHNjYWxlZC4KKworCSAgIFRoYW5rcyB0byBJYW4gQXJtc3Ryb25nIGZvciB0aGlzIGV4cGxhbmF0aW9uLiAqLworCWggPSBtaW4oaCwgNTc2KTsKKwloID0gbWF4KGgsIDIpOworCWlmIChpZC0+dHlwZSA9PSBJVlRWX0RFQ19TVFJFQU1fVFlQRV9ZVVYpCisJCWZtdC0+Zm10LnBpeC5maWVsZCA9IGZpZWxkOwogCWZtdC0+Zm10LnBpeC53aWR0aCA9IHc7CiAJZm10LT5mbXQucGl4LmhlaWdodCA9IGg7Ci0JaWYgKCFyZXQgJiYgaWQtPnR5cGUgPT0gSVZUVl9ERUNfU1RSRUFNX1RZUEVfWVVWKSB7Ci0JCWZtdC0+Zm10LnBpeC5maWVsZCA9IGZpZWxkOwotCQlpZiAoZm10LT5mbXQucGl4LndpZHRoIDwgMikKLQkJCWZtdC0+Zm10LnBpeC53aWR0aCA9IDI7Ci0JCWlmIChmbXQtPmZtdC5waXgud2lkdGggPiA3MjApCi0JCQlmbXQtPmZtdC5waXgud2lkdGggPSA3MjA7Ci0JCWlmIChmbXQtPmZtdC5waXguaGVpZ2h0IDwgMikKLQkJCWZtdC0+Zm10LnBpeC5oZWlnaHQgPSAyOwotCQlpZiAoZm10LT5mbXQucGl4LmhlaWdodCA+IDU3NikKLQkJCWZtdC0+Zm10LnBpeC5oZWlnaHQgPSA1NzY7Ci0JfQogCXJldHVybiByZXQ7CiB9CiAKQEAgLTU2MCw5ICs1NjQsOSBAQAogCXN0cnVjdCBpdnR2X29wZW5faWQgKmlkID0gZmg7CiAJc3RydWN0IGl2dHYgKml0diA9IGlkLT5pdHY7CiAJc3RydWN0IGN4MjM0MXhfbXBlZ19wYXJhbXMgKnAgPSAmaXR2LT5wYXJhbXM7CisJaW50IHJldCA9IGl2dHZfdHJ5X2ZtdF92aWRfY2FwKGZpbGUsIGZoLCBmbXQpOwogCWludCB3ID0gZm10LT5mbXQucGl4LndpZHRoOwogCWludCBoID0gZm10LT5mbXQucGl4LmhlaWdodDsKLQlpbnQgcmV0ID0gaXZ0dl90cnlfZm10X3ZpZF9jYXAoZmlsZSwgZmgsIGZtdCk7CiAKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwpAQCAtNTg1LDggKzU4OSwxMSBAQAogewogCXN0cnVjdCBpdnR2ICppdHYgPSAoKHN0cnVjdCBpdnR2X29wZW5faWQgKilmaCktPml0djsKIAorCWlmICghaXZ0dl9yYXdfdmJpKGl0dikgJiYgYXRvbWljX3JlYWQoJml0di0+Y2FwdHVyaW5nKSA+IDApCisJCXJldHVybiAtRUJVU1k7CiAJaXR2LT52Ymkuc2xpY2VkX2luLT5zZXJ2aWNlX3NldCA9IDA7Ci0JaXR2LT52aWRlb19kZWNfZnVuYyhpdHYsIFZJRElPQ19TX0ZNVCwgJml0di0+dmJpLmluKTsKKwlpdHYtPnZiaS5pbi50eXBlID0gVjRMMl9CVUZfVFlQRV9WQklfQ0FQVFVSRTsKKwlpdHYtPnZpZGVvX2RlY19mdW5jKGl0diwgVklESU9DX1NfRk1ULCBmbXQpOwogCXJldHVybiBpdnR2X2dfZm10X3ZiaV9jYXAoZmlsZSwgZmgsIGZtdCk7CiB9CiAKQEAgLTYwMCwxMCArNjA3LDEwIEBACiAJaWYgKHJldCB8fCBpZC0+dHlwZSA9PSBJVlRWX0RFQ19TVFJFQU1fVFlQRV9WQkkpCiAJCXJldHVybiByZXQ7CiAKLQlpZiAoY2hlY2tfc2VydmljZV9zZXQodmJpZm10LCBpdHYtPmlzXzUwaHopID09IDApCi0JCXJldHVybiAtRUlOVkFMOwotCWlmIChhdG9taWNfcmVhZCgmaXR2LT5jYXB0dXJpbmcpID4gMCkKKwljaGVja19zZXJ2aWNlX3NldCh2YmlmbXQsIGl0di0+aXNfNTBoeik7CisJaWYgKGl2dHZfcmF3X3ZiaShpdHYpICYmIGF0b21pY19yZWFkKCZpdHYtPmNhcHR1cmluZykgPiAwKQogCQlyZXR1cm4gLUVCVVNZOworCWl0di0+dmJpLmluLnR5cGUgPSBWNEwyX0JVRl9UWVBFX1NMSUNFRF9WQklfQ0FQVFVSRTsKIAlpdHYtPnZpZGVvX2RlY19mdW5jKGl0diwgVklESU9DX1NfRk1ULCBmbXQpOwogCW1lbWNweShpdHYtPnZiaS5zbGljZWRfaW4sIHZiaWZtdCwgc2l6ZW9mKCppdHYtPnZiaS5zbGljZWRfaW4pKTsKIAlyZXR1cm4gMDsKQEAgLTY1MSw4ICs2NTgsNiBAQAogCQlpdHYtPmRtYV9kYXRhX3JlcV9zaXplID0KIAkJCTEwODAgKiAoKHlpLT52NGwyX3NyY19oICsgMzEpICYgfjMxKTsKIAotCS8qIEZvcmNlIHVwZGF0ZSBvZiB5dXYgcmVnaXN0ZXJzICovCi0JeWktPnl1dl9mb3JjZWRfdXBkYXRlID0gMTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNzYxLDcgKzc2Niw3IEBACiAKIAlzdHJsY3B5KHZjYXAtPmRyaXZlciwgSVZUVl9EUklWRVJfTkFNRSwgc2l6ZW9mKHZjYXAtPmRyaXZlcikpOwogCXN0cmxjcHkodmNhcC0+Y2FyZCwgaXR2LT5jYXJkX25hbWUsIHNpemVvZih2Y2FwLT5jYXJkKSk7Ci0Jc3RybGNweSh2Y2FwLT5idXNfaW5mbywgcGNpX25hbWUoaXR2LT5kZXYpLCBzaXplb2YodmNhcC0+YnVzX2luZm8pKTsKKwlzbnByaW50Zih2Y2FwLT5idXNfaW5mbywgc2l6ZW9mKHZjYXAtPmJ1c19pbmZvKSwgIlBDSTolcyIsIHBjaV9uYW1lKGl0di0+ZGV2KSk7CiAJdmNhcC0+dmVyc2lvbiA9IElWVFZfRFJJVkVSX1ZFUlNJT047IAkgICAgLyogdmVyc2lvbiAqLwogCXZjYXAtPmNhcGFiaWxpdGllcyA9IGl0di0+djRsMl9jYXA7IAkgICAgLyogY2FwYWJpbGl0aWVzICovCiAJcmV0dXJuIDA7CkBAIC0xMzcwLDYgKzEzNzUsOSBAQAogCWlmIChpdHYtPm9zZF9nbG9iYWxfYWxwaGFfc3RhdGUpCiAJCWZiLT5mbGFncyB8PSBWNEwyX0ZCVUZfRkxBR19HTE9CQUxfQUxQSEE7CiAKKwlpZiAoeWktPnRyYWNrX29zZCkKKwkJZmItPmZsYWdzIHw9IFY0TDJfRkJVRl9GTEFHX09WRVJMQVk7CisKIAlwaXhmbXQgJj0gNzsKIAogCS8qIG5vIGxvY2FsIGFscGhhIGZvciBSR0I1NjUgb3IgdW5rbm93biBmb3JtYXRzICovCkBAIC0xMzg5LDggKzEzOTcsNiBAQAogCQllbHNlCiAJCQlmYi0+ZmxhZ3MgfD0gVjRMMl9GQlVGX0ZMQUdfTE9DQUxfQUxQSEE7CiAJfQotCWlmICh5aS0+dHJhY2tfb3NkKQotCQlmYi0+ZmxhZ3MgfD0gVjRMMl9GQlVGX0ZMQUdfT1ZFUkxBWTsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtaXJxLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1pcnEuYwppbmRleCAzNGYzYWI4Li5mNWQwMGVjIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1pcnEuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1pcnEuYwpAQCAtNzUzLDcgKzc1Myw3IEBACiAJICovCiAJdW5zaWduZWQgaW50IGZyYW1lID0gcmVhZF9yZWcoMHgyOGMwKSAmIDE7CiAJc3RydWN0IHl1dl9wbGF5YmFja19pbmZvICp5aSA9ICZpdHYtPnl1dl9pbmZvOwotCWludCBsYXN0X2RtYV9mcmFtZSA9IGF0b21pY19yZWFkKCZpdHYtPnl1dl9pbmZvLm5leHRfZG1hX2ZyYW1lKTsKKwlpbnQgbGFzdF9kbWFfZnJhbWUgPSBhdG9taWNfcmVhZCgmeWktPm5leHRfZG1hX2ZyYW1lKTsKIAlzdHJ1Y3QgeXV2X2ZyYW1lX2luZm8gKmYgPSAmeWktPm5ld19mcmFtZV9pbmZvW2xhc3RfZG1hX2ZyYW1lXTsKIAogCWlmICgwKSBJVlRWX0RFQlVHX0lSUSgiREVDIFZTWU5DXG4iKTsKQEAgLTc3Miw2ICs3NzIsNyBAQAogCQkJCW5leHRfZG1hX2ZyYW1lID0gKG5leHRfZG1hX2ZyYW1lICsgMSkgJSBJVlRWX1lVVl9CVUZGRVJTOwogCQkJCWF0b21pY19zZXQoJnlpLT5uZXh0X2RtYV9mcmFtZSwgbmV4dF9kbWFfZnJhbWUpOwogCQkJCXlpLT5maWVsZHNfbGFwc2VkID0gLTE7CisJCQkJeWktPnJ1bm5pbmcgPSAxOwogCQkJfQogCQl9CiAJfQpAQCAtODA0LDkgKzgwNSwxMSBAQAogCQl9CiAKIAkJLyogQ2hlY2sgaWYgd2UgbmVlZCB0byB1cGRhdGUgdGhlIHl1diByZWdpc3RlcnMgKi8KLQkJaWYgKCh5aS0+eXV2X2ZvcmNlZF91cGRhdGUgfHwgZi0+dXBkYXRlKSAmJiBsYXN0X2RtYV9mcmFtZSAhPSAtMSkgeworCQlpZiAoeWktPnJ1bm5pbmcgJiYgKHlpLT55dXZfZm9yY2VkX3VwZGF0ZSB8fCBmLT51cGRhdGUpKSB7CiAJCQlpZiAoIWYtPnVwZGF0ZSkgewotCQkJCWxhc3RfZG1hX2ZyYW1lID0gKHU4KShsYXN0X2RtYV9mcmFtZSAtIDEpICUgSVZUVl9ZVVZfQlVGRkVSUzsKKwkJCQlsYXN0X2RtYV9mcmFtZSA9CisJCQkJCSh1OCkoYXRvbWljX3JlYWQoJnlpLT5uZXh0X2RtYV9mcmFtZSkgLQorCQkJCQkJIDEpICUgSVZUVl9ZVVZfQlVGRkVSUzsKIAkJCQlmID0gJnlpLT5uZXdfZnJhbWVfaW5mb1tsYXN0X2RtYV9mcmFtZV07CiAJCQl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LXN0cmVhbXMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LXN0cmVhbXMuYwppbmRleCA3MzBlODVkLi41YmJmMzFlIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1zdHJlYW1zLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtc3RyZWFtcy5jCkBAIC03NSw3ICs3NSw3IEBACiBzdGF0aWMgc3RydWN0IHsKIAljb25zdCBjaGFyICpuYW1lOwogCWludCB2ZmxfdHlwZTsKLQlpbnQgbWlub3Jfb2Zmc2V0OworCWludCBudW1fb2Zmc2V0OwogCWludCBkbWEsIHBpbzsKIAllbnVtIHY0bDJfYnVmX3R5cGUgYnVmX3R5cGU7CiAJY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyAqZm9wczsKQEAgLTE3MSw4ICsxNzEsOCBAQAogc3RhdGljIGludCBpdnR2X3ByZXBfZGV2KHN0cnVjdCBpdnR2ICppdHYsIGludCB0eXBlKQogewogCXN0cnVjdCBpdnR2X3N0cmVhbSAqcyA9ICZpdHYtPnN0cmVhbXNbdHlwZV07Ci0JaW50IG1pbm9yX29mZnNldCA9IGl2dHZfc3RyZWFtX2luZm9bdHlwZV0ubWlub3Jfb2Zmc2V0OwotCWludCBtaW5vcjsKKwlpbnQgbnVtX29mZnNldCA9IGl2dHZfc3RyZWFtX2luZm9bdHlwZV0ubnVtX29mZnNldDsKKwlpbnQgbnVtID0gaXR2LT5udW0gKyBpdnR2X2ZpcnN0X21pbm9yICsgbnVtX29mZnNldDsKIAogCS8qIFRoZXNlIGZvdXIgZmllbGRzIGFyZSBhbHdheXMgaW5pdGlhbGl6ZWQuIElmIHY0bDJkZXYgPT0gTlVMTCwgdGhlbgogCSAgIHRoaXMgc3RyZWFtIGlzIG5vdCBpbiB1c2UuIEluIHRoYXQgY2FzZSBubyBvdGhlciBmaWVsZHMgYnV0IHRoZXNlCkBAIC0xODgsOSArMTg4LDYgQEAKIAlpZiAodHlwZSA+PSBJVlRWX0RFQ19TVFJFQU1fVFlQRV9NUEcgJiYgIShpdHYtPnY0bDJfY2FwICYgVjRMMl9DQVBfVklERU9fT1VUUFVUKSkKIAkJcmV0dXJuIDA7CiAKLQkvKiBjYXJkIG51bWJlciArIHVzZXIgZGVmaW5lZCBvZmZzZXQgKyBkZXZpY2Ugb2Zmc2V0ICovCi0JbWlub3IgPSBpdHYtPm51bSArIGl2dHZfZmlyc3RfbWlub3IgKyBtaW5vcl9vZmZzZXQ7Ci0KIAkvKiBVc2VyIGV4cGxpY2l0bHkgc2VsZWN0ZWQgMCBidWZmZXJzIGZvciB0aGVzZSBzdHJlYW1zLCBzbyBkb24ndAogCSAgIGNyZWF0ZSB0aGVtLiAqLwogCWlmIChpdnR2X3N0cmVhbV9pbmZvW3R5cGVdLmRtYSAhPSBQQ0lfRE1BX05PTkUgJiYKQEAgLTIxMSw3ICsyMDgsNyBAQAogCXNucHJpbnRmKHMtPnY0bDJkZXYtPm5hbWUsIHNpemVvZihzLT52NGwyZGV2LT5uYW1lKSwgIml2dHYlZCAlcyIsCiAJCQlpdHYtPm51bSwgcy0+bmFtZSk7CiAKLQlzLT52NGwyZGV2LT5taW5vciA9IG1pbm9yOworCXMtPnY0bDJkZXYtPm51bSA9IG51bTsKIAlzLT52NGwyZGV2LT5wYXJlbnQgPSAmaXR2LT5kZXYtPmRldjsKIAlzLT52NGwyZGV2LT5mb3BzID0gaXZ0dl9zdHJlYW1faW5mb1t0eXBlXS5mb3BzOwogCXMtPnY0bDJkZXYtPnJlbGVhc2UgPSB2aWRlb19kZXZpY2VfcmVsZWFzZTsKQEAgLTI1MCwzOSArMjQ3LDQ2IEBACiB7CiAJc3RydWN0IGl2dHZfc3RyZWFtICpzID0gJml0di0+c3RyZWFtc1t0eXBlXTsKIAlpbnQgdmZsX3R5cGUgPSBpdnR2X3N0cmVhbV9pbmZvW3R5cGVdLnZmbF90eXBlOwotCWludCBtaW5vcjsKKwlpbnQgbnVtOwogCiAJaWYgKHMtPnY0bDJkZXYgPT0gTlVMTCkKIAkJcmV0dXJuIDA7CiAKLQltaW5vciA9IHMtPnY0bDJkZXYtPm1pbm9yOworCW51bSA9IHMtPnY0bDJkZXYtPm51bTsKKwkvKiBjYXJkIG51bWJlciArIHVzZXIgZGVmaW5lZCBvZmZzZXQgKyBkZXZpY2Ugb2Zmc2V0ICovCisJaWYgKHR5cGUgIT0gSVZUVl9FTkNfU1RSRUFNX1RZUEVfTVBHKSB7CisJCXN0cnVjdCBpdnR2X3N0cmVhbSAqc19tcGcgPSAmaXR2LT5zdHJlYW1zW0lWVFZfRU5DX1NUUkVBTV9UWVBFX01QR107CisKKwkJaWYgKHNfbXBnLT52NGwyZGV2KQorCQkJbnVtID0gc19tcGctPnY0bDJkZXYtPm51bSArIGl2dHZfc3RyZWFtX2luZm9bdHlwZV0ubnVtX29mZnNldDsKKwl9CisKIAkvKiBSZWdpc3RlciBkZXZpY2UuIEZpcnN0IHRyeSB0aGUgZGVzaXJlZCBtaW5vciwgdGhlbiBhbnkgZnJlZSBvbmUuICovCi0JaWYgKHZpZGVvX3JlZ2lzdGVyX2RldmljZShzLT52NGwyZGV2LCB2ZmxfdHlwZSwgbWlub3IpICYmCi0JCQl2aWRlb19yZWdpc3Rlcl9kZXZpY2Uocy0+djRsMmRldiwgdmZsX3R5cGUsIC0xKSkgewotCQlJVlRWX0VSUigiQ291bGRuJ3QgcmVnaXN0ZXIgdjRsMiBkZXZpY2UgZm9yICVzIG1pbm9yICVkXG4iLAotCQkJCXMtPm5hbWUsIG1pbm9yKTsKKwlpZiAodmlkZW9fcmVnaXN0ZXJfZGV2aWNlKHMtPnY0bDJkZXYsIHZmbF90eXBlLCBudW0pKSB7CisJCUlWVFZfRVJSKCJDb3VsZG4ndCByZWdpc3RlciB2NGwyIGRldmljZSBmb3IgJXMga2VybmVsIG51bWJlciAlZFxuIiwKKwkJCQlzLT5uYW1lLCBudW0pOwogCQl2aWRlb19kZXZpY2VfcmVsZWFzZShzLT52NGwyZGV2KTsKIAkJcy0+djRsMmRldiA9IE5VTEw7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KKwludW0gPSBzLT52NGwyZGV2LT5udW07CiAKIAlzd2l0Y2ggKHZmbF90eXBlKSB7CiAJY2FzZSBWRkxfVFlQRV9HUkFCQkVSOgogCQlJVlRWX0lORk8oIlJlZ2lzdGVyZWQgZGV2aWNlIHZpZGVvJWQgZm9yICVzICglZCBrQilcbiIsCi0JCQlzLT52NGwyZGV2LT5taW5vciwgcy0+bmFtZSwgaXR2LT5vcHRpb25zLmtpbG9ieXRlc1t0eXBlXSk7CisJCQludW0sIHMtPm5hbWUsIGl0di0+b3B0aW9ucy5raWxvYnl0ZXNbdHlwZV0pOwogCQlicmVhazsKIAljYXNlIFZGTF9UWVBFX1JBRElPOgogCQlJVlRWX0lORk8oIlJlZ2lzdGVyZWQgZGV2aWNlIHJhZGlvJWQgZm9yICVzXG4iLAotCQkJcy0+djRsMmRldi0+bWlub3IgLSBNSU5PUl9WRkxfVFlQRV9SQURJT19NSU4sIHMtPm5hbWUpOworCQkJbnVtLCBzLT5uYW1lKTsKIAkJYnJlYWs7CiAJY2FzZSBWRkxfVFlQRV9WQkk6CiAJCWlmIChpdHYtPm9wdGlvbnMua2lsb2J5dGVzW3R5cGVdKQogCQkJSVZUVl9JTkZPKCJSZWdpc3RlcmVkIGRldmljZSB2YmklZCBmb3IgJXMgKCVkIGtCKVxuIiwKLQkJCQlzLT52NGwyZGV2LT5taW5vciAtIE1JTk9SX1ZGTF9UWVBFX1ZCSV9NSU4sCi0JCQkJcy0+bmFtZSwgaXR2LT5vcHRpb25zLmtpbG9ieXRlc1t0eXBlXSk7CisJCQkJbnVtLCBzLT5uYW1lLCBpdHYtPm9wdGlvbnMua2lsb2J5dGVzW3R5cGVdKTsKIAkJZWxzZQogCQkJSVZUVl9JTkZPKCJSZWdpc3RlcmVkIGRldmljZSB2YmklZCBmb3IgJXNcbiIsCi0JCQkJcy0+djRsMmRldi0+bWlub3IgLSBNSU5PUl9WRkxfVFlQRV9WQklfTUlOLCBzLT5uYW1lKTsKKwkJCQludW0sIHMtPm5hbWUpOwogCQlicmVhazsKIAl9CiAJcmV0dXJuIDA7CkBAIC0zMzAsNyArMzM0LDcgQEAKIAogc3RhdGljIHZvaWQgaXZ0dl92Ymlfc2V0dXAoc3RydWN0IGl2dHYgKml0dikKIHsKLQlpbnQgcmF3ID0gaXR2LT52Ymkuc2xpY2VkX2luLT5zZXJ2aWNlX3NldCA9PSAwOworCWludCByYXcgPSBpdnR2X3Jhd192YmkoaXR2KTsKIAl1MzIgZGF0YVtDWDIzNDFYX01CT1hfTUFYX0RBVEFdOwogCWludCBsaW5lczsKIAlpbnQgaTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LXZiaS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtdmJpLmMKaW5kZXggMWNlOWRlYi4uNGEzN2E3ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtdmJpLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtdmJpLmMKQEAgLTMzNCw3ICszMzQsNyBAQAogCWludCB5OwogCiAJLyogUmF3IFZCSSBkYXRhICovCi0JaWYgKHN0cmVhbXR5cGUgPT0gSVZUVl9FTkNfU1RSRUFNX1RZUEVfVkJJICYmIGl0di0+dmJpLnNsaWNlZF9pbi0+c2VydmljZV9zZXQgPT0gMCkgeworCWlmIChzdHJlYW10eXBlID09IElWVFZfRU5DX1NUUkVBTV9UWVBFX1ZCSSAmJiBpdnR2X3Jhd192YmkoaXR2KSkgewogCQl1OCB0eXBlOwogCiAJCWl2dHZfYnVmX3N3YXAoYnVmKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LXl1di5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYteXV2LmMKaW5kZXggMzA5MmZmMS4uZWU5MTEwNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYteXV2LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYteXV2LmMKQEAgLTExNDcsNiArMTE0Nyw3IEBACiAJSVZUVl9ERUJVR19ZVVYoIml2dHZfeXV2X2Nsb3NlXG4iKTsKIAlpdnR2X3dhaXRxKCZpdHYtPnZzeW5jX3dhaXRxKTsKIAorCXlpLT5ydW5uaW5nID0gMDsKIAlhdG9taWNfc2V0KCZ5aS0+bmV4dF9kbWFfZnJhbWUsIC0xKTsKIAlhdG9taWNfc2V0KCZ5aS0+bmV4dF9maWxsX2ZyYW1lLCAwKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHZmYi5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHZmYi5jCmluZGV4IGJkZmRhNDguLjhhNGExNTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2ZmIuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0dmZiLmMKQEAgLTI3NSw3ICsyNzUsNiBAQAogCQkJCSAgaW50IHNpemVfaW5fYnl0ZXMpCiB7CiAJREVGSU5FX1dBSVQod2FpdCk7Ci0JaW50IHJldCA9IDA7CiAJaW50IGdvdF9zaWcgPSAwOwogCiAJbXV0ZXhfbG9jaygmaXR2LT51ZG1hLmxvY2spOwpAQCAtMzE2LDcgKzMxNSw3IEBACiAJCXJldHVybiAtRUlOVFI7CiAJfQogCi0JcmV0dXJuIHJldDsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBpdnR2ZmJfcHJlcF9mcmFtZShzdHJ1Y3QgaXZ0diAqaXR2LCBpbnQgY21kLCB2b2lkIF9fdXNlciAqc291cmNlLApAQCAtMzY4LDExICszNjcsMTIgQEAKIH0KIAogc3RhdGljIHNzaXplX3QgaXZ0dmZiX3dyaXRlKHN0cnVjdCBmYl9pbmZvICppbmZvLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmLAotCQkgICAgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQorCQkJCQkJc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCiB7CiAJdW5zaWduZWQgbG9uZyBwID0gKnBwb3M7CiAJdm9pZCAqZHN0OwogCWludCBlcnIgPSAwOworCWludCBkbWFfZXJyOwogCXVuc2lnbmVkIGxvbmcgdG90YWxfc2l6ZTsKIAlzdHJ1Y3QgaXZ0diAqaXR2ID0gKHN0cnVjdCBpdnR2ICopIGluZm8tPnBhcjsKIAl1bnNpZ25lZCBsb25nIGRtYV9vZmZzZXQgPQpAQCAtMzk5LDcgKzM5OSw2IEBACiAJaWYgKGNvdW50ICsgcCA+IHRvdGFsX3NpemUpIHsKIAkJaWYgKCFlcnIpCiAJCQllcnIgPSAtRU5PU1BDOwotCiAJCWNvdW50ID0gdG90YWxfc2l6ZSAtIHA7CiAJfQogCkBAIC00MDgsMzkgKzQwNywzNCBAQAogCWlmIChpbmZvLT5mYm9wcy0+ZmJfc3luYykKIAkJaW5mby0+ZmJvcHMtPmZiX3N5bmMoaW5mbyk7CiAKLQlpZiAoIWFjY2Vzc19vayhWRVJJRllfUkVBRCwgYnVmLCBjb3VudCkpIHsKLQkJSVZUVkZCX1dBUk4oIkludmFsaWQgdXNlcnNwYWNlIHBvaW50ZXIgMHglMDhseFxuIiwKLQkJCSh1bnNpZ25lZCBsb25nKWJ1Zik7Ci0JCWVyciA9IC1FRkFVTFQ7Ci0JfQotCi0JaWYgKCFlcnIpIHsKLQkJLyogSWYgdHJhbnNmZXIgc2l6ZSA+IHRocmVzaG9sZCBhbmQgYm90aCBzcmMvZHN0Ci0JCWFkZHJlc3NlcyBhcmUgYWxpZ25lZCwgdXNlIERNQSAqLwotCQlpZiAoY291bnQgPj0gNDA5NiAmJgotCQkgICAgKCh1bnNpZ25lZCBsb25nKWJ1ZiAmIDMpID09ICgodW5zaWduZWQgbG9uZylkc3QgJiAzKSkgewotCQkJLyogT2RkIGFkZHJlc3MgPSBjYW4ndCBETUEuIEFsaWduICovCi0JCQlpZiAoKHVuc2lnbmVkIGxvbmcpZHN0ICYgMykgewotCQkJCWxlYWQgPSA0IC0gKCh1bnNpZ25lZCBsb25nKWRzdCAmIDMpOwotCQkJCW1lbWNweShkc3QsIGJ1ZiwgbGVhZCk7Ci0JCQkJYnVmICs9IGxlYWQ7Ci0JCQkJZHN0ICs9IGxlYWQ7Ci0JCQl9Ci0JCQkvKiBETUEgcmVzb2x1dGlvbiBpcyAzMiBiaXRzICovCi0JCQlpZiAoKGNvdW50IC0gbGVhZCkgJiAzKQotCQkJCXRhaWwgPSAoY291bnQgLSBsZWFkKSAmIDM7Ci0JCQkvKiBETUEgdGhlIGRhdGEgKi8KLQkJCWRtYV9zaXplID0gY291bnQgLSBsZWFkIC0gdGFpbDsKLQkJCWVyciA9IGl2dHZmYl9wcmVwX2RlY19kbWFfdG9fZGV2aWNlKGl0diwKLQkJCSAgICAgICBwICsgbGVhZCArIGRtYV9vZmZzZXQsICh2b2lkICopYnVmLCBkbWFfc2l6ZSk7Ci0JCQlkc3QgKz0gZG1hX3NpemU7Ci0JCQlidWYgKz0gZG1hX3NpemU7Ci0JCQkvKiBDb3B5IGFueSBsZWZ0b3ZlciBkYXRhICovCi0JCQlpZiAodGFpbCkKLQkJCQltZW1jcHkoZHN0LCBidWYsIHRhaWwpOwotCQl9IGVsc2UgewotCQkJbWVtY3B5KGRzdCwgYnVmLCBjb3VudCk7CisJLyogSWYgdHJhbnNmZXIgc2l6ZSA+IHRocmVzaG9sZCBhbmQgYm90aCBzcmMvZHN0CisJYWRkcmVzc2VzIGFyZSBhbGlnbmVkLCB1c2UgRE1BICovCisJaWYgKGNvdW50ID49IDQwOTYgJiYKKwkgICAgKCh1bnNpZ25lZCBsb25nKWJ1ZiAmIDMpID09ICgodW5zaWduZWQgbG9uZylkc3QgJiAzKSkgeworCQkvKiBPZGQgYWRkcmVzcyA9IGNhbid0IERNQS4gQWxpZ24gKi8KKwkJaWYgKCh1bnNpZ25lZCBsb25nKWRzdCAmIDMpIHsKKwkJCWxlYWQgPSA0IC0gKCh1bnNpZ25lZCBsb25nKWRzdCAmIDMpOworCQkJaWYgKGNvcHlfZnJvbV91c2VyKGRzdCwgYnVmLCBsZWFkKSkKKwkJCQlyZXR1cm4gLUVGQVVMVDsKKwkJCWJ1ZiArPSBsZWFkOworCQkJZHN0ICs9IGxlYWQ7CiAJCX0KKwkJLyogRE1BIHJlc29sdXRpb24gaXMgMzIgYml0cyAqLworCQlpZiAoKGNvdW50IC0gbGVhZCkgJiAzKQorCQkJdGFpbCA9IChjb3VudCAtIGxlYWQpICYgMzsKKwkJLyogRE1BIHRoZSBkYXRhICovCisJCWRtYV9zaXplID0gY291bnQgLSBsZWFkIC0gdGFpbDsKKwkJZG1hX2VyciA9IGl2dHZmYl9wcmVwX2RlY19kbWFfdG9fZGV2aWNlKGl0diwKKwkJICAgICAgIHAgKyBsZWFkICsgZG1hX29mZnNldCwgKHZvaWQgX191c2VyICopYnVmLCBkbWFfc2l6ZSk7CisJCWlmIChkbWFfZXJyKQorCQkJcmV0dXJuIGRtYV9lcnI7CisJCWRzdCArPSBkbWFfc2l6ZTsKKwkJYnVmICs9IGRtYV9zaXplOworCQkvKiBDb3B5IGFueSBsZWZ0b3ZlciBkYXRhICovCisJCWlmICh0YWlsICYmIGNvcHlfZnJvbV91c2VyKGRzdCwgYnVmLCB0YWlsKSkKKwkJCXJldHVybiAtRUZBVUxUOworCX0gZWxzZSBpZiAoY29weV9mcm9tX3VzZXIoZHN0LCBidWYsIGNvdW50KSkgeworCQlyZXR1cm4gLUVGQVVMVDsKIAl9CiAKIAlpZiAgKCFlcnIpCkBAIC00NjMsOSArNDU3LDEyIEBACiAJCQl2YmxhbmsuZmxhZ3MgPSBGQl9WQkxBTktfSEFWRV9DT1VOVCB8RkJfVkJMQU5LX0hBVkVfVkNPVU5UIHwKIAkJCQkJRkJfVkJMQU5LX0hBVkVfVlNZTkM7CiAJCQl0cmFjZSA9IHJlYWRfcmVnKDB4MDI4YzApID4+IDE2OwotCQkJaWYgKGl0di0+aXNfNTBoeiAmJiB0cmFjZSA+IDMxMikgdHJhY2UgLT0gMzEyOwotCQkJZWxzZSBpZiAoaXR2LT5pc182MGh6ICYmIHRyYWNlID4gMjYyKSB0cmFjZSAtPSAyNjI7Ci0JCQlpZiAodHJhY2UgPT0gMSkgdmJsYW5rLmZsYWdzIHw9IEZCX1ZCTEFOS19WU1lOQ0lORzsKKwkJCWlmIChpdHYtPmlzXzUwaHogJiYgdHJhY2UgPiAzMTIpCisJCQkJdHJhY2UgLT0gMzEyOworCQkJZWxzZSBpZiAoaXR2LT5pc182MGh6ICYmIHRyYWNlID4gMjYyKQorCQkJCXRyYWNlIC09IDI2MjsKKwkJCWlmICh0cmFjZSA9PSAxKQorCQkJCXZibGFuay5mbGFncyB8PSBGQl9WQkxBTktfVlNZTkNJTkc7CiAJCQl2YmxhbmsuY291bnQgPSBpdHYtPmxhc3RfdnN5bmNfZmllbGQ7CiAJCQl2YmxhbmsudmNvdW50ID0gdHJhY2U7CiAJCQl2YmxhbmsuaGNvdW50ID0gMDsKQEAgLTQ3Niw3ICs0NzMsOCBAQAogCiAJCWNhc2UgRkJJT19XQUlURk9SVlNZTkM6CiAJCQlwcmVwYXJlX3RvX3dhaXQoJml0di0+dnN5bmNfd2FpdHEsICZ3YWl0LCBUQVNLX0lOVEVSUlVQVElCTEUpOwotCQkJaWYgKCFzY2hlZHVsZV90aW1lb3V0KG1zZWNzX3RvX2ppZmZpZXMoNTApKSkgcmMgPSAtRVRJTUVET1VUOworCQkJaWYgKCFzY2hlZHVsZV90aW1lb3V0KG1zZWNzX3RvX2ppZmZpZXMoNTApKSkKKwkJCQlyYyA9IC1FVElNRURPVVQ7CiAJCQlmaW5pc2hfd2FpdCgmaXR2LT52c3luY193YWl0cSwgJndhaXQpOwogCQkJcmV0dXJuIHJjOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2tzMDEyNy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9rczAxMjcuYwppbmRleCAyZmQ0YjRhLi5iYWUyZDJiIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2tzMDEyNy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8va3MwMTI3LmMKQEAgLTMzLDI3ICszMywyMCBAQAogICogVjEuMSBHZXJhcmQgdi5kLiBIb3JzdCAgQWRkZWQgc29tZSBkZWJ1Z291dHB1dCwgcmVzZXQgdGhlIHZpZGVvLXN0YW5kYXJkCiAgKi8KIAotI2lmbmRlZiBfX0tFUk5FTF9fCi0jZGVmaW5lIF9fS0VSTkVMX18KLSNlbmRpZgotCiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0jaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgotI2luY2x1ZGUgImtzMDEyNy5oIgotCiAjaW5jbHVkZSA8bGludXgvaTJjLmg+CiAjaW5jbHVkZSA8bGludXgvdmlkZW9fZGVjb2Rlci5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItY29tbW9uLmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1pMmMtZHJ2LWxlZ2FjeS5oPgorI2luY2x1ZGUgImtzMDEyNy5oIgogCi0jZGVmaW5lIGRwcmludGsgICAgIGlmIChkZWJ1ZykgcHJpbnRrCi0KLS8qIGkyYyBpZGVudGlmaWNhdGlvbiAqLwotI2RlZmluZSBJMkNfS1MwMTI3X0FERE9OICAgMHhEOAotI2RlZmluZSBJMkNfS1MwMTI3X09OQk9BUkQgMHhEQQorTU9EVUxFX0RFU0NSSVBUSU9OKCJLUzAxMjcgdmlkZW8gZGVjb2RlciBkcml2ZXIiKTsKK01PRFVMRV9BVVRIT1IoIlJ5YW4gRHJha2UiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIAogI2RlZmluZSBLU19UWVBFX1VOS05PV04JMAogI2RlZmluZSBLU19UWVBFXzAxMjJTCTEKQEAgLTIwNCw4ICsxOTcsNiBAQAogfTsKIAogc3RydWN0IGtzMDEyNyB7Ci0Jc3RydWN0IGkyY19jbGllbnQgKmNsaWVudDsKLQl1bnNpZ25lZCBjaGFyCWFkZHI7CiAJaW50CQlmb3JtYXRfd2lkdGg7CiAJaW50CQlmb3JtYXRfaGVpZ2h0OwogCWludAkJY2FwX3dpZHRoOwpAQCAtMjIwLDE2ICsyMTEsMTggQEAKIAogbW9kdWxlX3BhcmFtKGRlYnVnLCBpbnQsIDApOwogTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgIkRlYnVnIG91dHB1dCIpOwotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogCiBzdGF0aWMgdTggcmVnX2RlZmF1bHRzWzY0XTsKIAotCi0KIHN0YXRpYyB2b2lkIGluaXRfcmVnX2RlZmF1bHRzKHZvaWQpCiB7CisJc3RhdGljIGludCBpbml0aWFsaXplZDsKIAl1OCAqdGFibGUgPSByZWdfZGVmYXVsdHM7CiAKKwlpZiAoaW5pdGlhbGl6ZWQpCisJCXJldHVybjsKKwlpbml0aWFsaXplZCA9IDE7CisKIAl0YWJsZVtLU19DTURBXSAgICAgPSAweDJjOyAgLyogVlNFPTAsIENDSVIgNjAxLCBhdXRvZGV0ZWN0IHN0YW5kYXJkICovCiAJdGFibGVbS1NfQ01EQl0gICAgID0gMHgxMjsgIC8qIFZBTElHTj0wLCBBR0MgY29udHJvbCBhbmQgaW5wdXQgKi8KIAl0YWJsZVtLU19DTURDXSAgICAgPSAweDAwOyAgLyogVGVzdCBvcHRpb25zICovCkBAIC0zMDgsNTAgKzMwMSw1MyBAQAogICogQW4gZXhwbGFuYXRpb24gZnJvbSBrYXlvcmtAbWFpbC51dGV4YXMuZWR1OgogICoKICAqIER1cmluZyBJMkMgcmVhZHMsIHRoZSBLUzAxMjcgb25seSBzYW1wbGVzIGZvciBhIHN0b3AgY29uZGl0aW9uCi0gKiBkdXJpbmcgdGhlIHBsYWNlIHdoZXJlIHRoZSBhY2tub2xlZGdlIGJpdCBzaG91bGQgYmUuIEFueSBzdGFuZGFyZAorICogZHVyaW5nIHRoZSBwbGFjZSB3aGVyZSB0aGUgYWNrbm93bGVkZ2UgYml0IHNob3VsZCBiZS4gQW55IHN0YW5kYXJkCiAgKiBJMkMgaW1wbGVtZW50YXRpb24gKGNvcnJlY3RseSkgdGhyb3dzIGluIGFub3RoZXIgY2xvY2sgdHJhbnNpdGlvbgogICogYXQgdGhlIDl0aCBiaXQsIGFuZCB0aGUgS1MwMTI3IHdpbGwgbm90IHJlY29nbml6ZSB0aGUgc3RvcCBjb25kaXRpb24KICAqIGFuZCB3aWxsIGNvbnRpbnVlIHRvIGNsb2NrIG91dCBkYXRhLgogICoKICAqIFNvIHdlIGhhdmUgdG8gZG8gdGhlIHJlYWQgb3Vyc2VsZi4gIEJpZyBkZWFsLgotCSAgIHdvcmthcm91bmQgaW4gaTJjLWFsZ28tYml0CisgKgkgICB3b3JrYXJvdW5kIGluIGkyYy1hbGdvLWJpdAogICovCiAKIAotc3RhdGljIHU4IGtzMDEyN19yZWFkKHN0cnVjdCBrczAxMjcgKmtzLCB1OCByZWcpCitzdGF0aWMgdTgga3MwMTI3X3JlYWQoc3RydWN0IGkyY19jbGllbnQgKmMsIHU4IHJlZykKIHsKLQlzdHJ1Y3QgaTJjX2NsaWVudCAqYyA9IGtzLT5jbGllbnQ7CiAJY2hhciB2YWwgPSAwOwogCXN0cnVjdCBpMmNfbXNnIG1zZ3NbXSA9IHsKLQkJe2MtPmFkZHIsIDAsIHNpemVvZihyZWcpLCAmcmVnfSwKLQkJe2MtPmFkZHIsIEkyQ19NX1JEIHwgSTJDX01fTk9fUkRfQUNLLCBzaXplb2YodmFsKSwgJnZhbH19OworCQl7IGMtPmFkZHIsIDAsIHNpemVvZihyZWcpLCAmcmVnIH0sCisJCXsgYy0+YWRkciwgSTJDX01fUkQgfCBJMkNfTV9OT19SRF9BQ0ssIHNpemVvZih2YWwpLCAmdmFsIH0KKwl9OwogCWludCByZXQ7CiAKIAlyZXQgPSBpMmNfdHJhbnNmZXIoYy0+YWRhcHRlciwgbXNncywgQVJSQVlfU0laRShtc2dzKSk7CiAJaWYgKHJldCAhPSBBUlJBWV9TSVpFKG1zZ3MpKQotCQlkcHJpbnRrKCJrczAxMjdfd3JpdGUgZXJyb3JcbiIpOworCQl2NGxfZGJnKDEsIGRlYnVnLCBjLCAicmVhZCBlcnJvclxuIik7CiAKIAlyZXR1cm4gdmFsOwogfQogCiAKLXN0YXRpYyB2b2lkIGtzMDEyN193cml0ZShzdHJ1Y3Qga3MwMTI3ICprcywgdTggcmVnLCB1OCB2YWwpCitzdGF0aWMgdm9pZCBrczAxMjdfd3JpdGUoc3RydWN0IGkyY19jbGllbnQgKmMsIHU4IHJlZywgdTggdmFsKQogewotCWNoYXIgbXNnW10gPSB7cmVnLCB2YWx9OworCXN0cnVjdCBrczAxMjcgKmtzID0gaTJjX2dldF9jbGllbnRkYXRhKGMpOworCWNoYXIgbXNnW10gPSB7IHJlZywgdmFsIH07CiAKLQlpZiAoaTJjX21hc3Rlcl9zZW5kKGtzLT5jbGllbnQsIG1zZywgc2l6ZW9mKG1zZykpICE9IHNpemVvZihtc2cpKQotCQlkcHJpbnRrKCJrczAxMjdfd3JpdGUgZXJyb3JcbiIpOworCWlmIChpMmNfbWFzdGVyX3NlbmQoYywgbXNnLCBzaXplb2YobXNnKSkgIT0gc2l6ZW9mKG1zZykpCisJCXY0bF9kYmcoMSwgZGVidWcsIGMsICJ3cml0ZSBlcnJvclxuIik7CiAKIAlrcy0+cmVnc1tyZWddID0gdmFsOwogfQogCiAKIC8qIGdlbmVyaWMgYml0LXR3aWRkbGluZyAqLwotc3RhdGljIHZvaWQga3MwMTI3X2FuZF9vcihzdHJ1Y3Qga3MwMTI3ICprcywgdTggcmVnLCB1OCBhbmRfdiwgdTggb3JfdikKK3N0YXRpYyB2b2lkIGtzMDEyN19hbmRfb3Ioc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdTggcmVnLCB1OCBhbmRfdiwgdTggb3JfdikKIHsKKwlzdHJ1Y3Qga3MwMTI3ICprcyA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCiAJdTggdmFsID0ga3MtPnJlZ3NbcmVnXTsKIAl2YWwgPSAodmFsICYgYW5kX3YpIHwgb3JfdjsKLQlrczAxMjdfd3JpdGUoa3MsIHJlZywgdmFsKTsKKwlrczAxMjdfd3JpdGUoY2xpZW50LCByZWcsIHZhbCk7CiB9CiAKIApAQCAtMzU5LDczICszNTUsNjkgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqIGtzMDEyNyBwcml2YXRlIGFwaQogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXN0YXRpYyB2b2lkIGtzMDEyN19yZXNldChzdHJ1Y3Qga3MwMTI3KiBrcykKK3N0YXRpYyB2b2lkIGtzMDEyN19yZXNldChzdHJ1Y3QgaTJjX2NsaWVudCAqYykKIHsKLQlpbnQgaTsKKwlzdHJ1Y3Qga3MwMTI3ICprcyA9IGkyY19nZXRfY2xpZW50ZGF0YShjKTsKIAl1OCAqdGFibGUgPSByZWdfZGVmYXVsdHM7CisJaW50IGk7CiAKIAlrcy0+a3NfdHlwZSA9IEtTX1RZUEVfVU5LTk9XTjsKIAotCWRwcmludGsoImtzMDEyNzogcmVzZXRcbiIpOworCXY0bF9kYmcoMSwgZGVidWcsIGMsICJyZXNldFxuIik7CiAJbXNsZWVwKDEpOwogCiAJLyogaW5pdGlhbGl6ZSBhbGwgcmVnaXN0ZXJzIHRvIGtub3duIHZhbHVlcyAqLwogCS8qIChleGNlcHQgU1RBVCwgMHgyMSwgMHgyMiwgVEVTVCBhbmQgMHgzOCwweDM5KSAqLwogCi0JZm9yKGkgPSAxOyBpIDwgMzM7IGkrKykKLQkJa3MwMTI3X3dyaXRlKGtzLCBpLCB0YWJsZVtpXSk7CisJZm9yIChpID0gMTsgaSA8IDMzOyBpKyspCisJCWtzMDEyN193cml0ZShjLCBpLCB0YWJsZVtpXSk7CiAKLQlmb3IoaSA9IDM1OyBpIDwgNDA7IGkrKykKLQkJa3MwMTI3X3dyaXRlKGtzLCBpLCB0YWJsZVtpXSk7CisJZm9yIChpID0gMzU7IGkgPCA0MDsgaSsrKQorCQlrczAxMjdfd3JpdGUoYywgaSwgdGFibGVbaV0pOwogCi0JZm9yKGkgPSA0MTsgaSA8IDU2OyBpKyspCi0JCWtzMDEyN193cml0ZShrcywgaSwgdGFibGVbaV0pOworCWZvciAoaSA9IDQxOyBpIDwgNTY7IGkrKykKKwkJa3MwMTI3X3dyaXRlKGMsIGksIHRhYmxlW2ldKTsKIAotCWZvcihpID0gNTg7IGkgPCA2NDsgaSsrKQotCQlrczAxMjdfd3JpdGUoa3MsIGksIHRhYmxlW2ldKTsKKwlmb3IgKGkgPSA1ODsgaSA8IDY0OyBpKyspCisJCWtzMDEyN193cml0ZShjLCBpLCB0YWJsZVtpXSk7CiAKIAotCWlmICgoa3MwMTI3X3JlYWQoa3MsIEtTX1NUQVQpICYgMHg4MCkgPT0gMCkgeworCWlmICgoa3MwMTI3X3JlYWQoYywgS1NfU1RBVCkgJiAweDgwKSA9PSAwKSB7CiAJCWtzLT5rc190eXBlID0gS1NfVFlQRV8wMTIyUzsKLQkJZHByaW50aygia3MwMTI3OiBrczAxMjJzIEZvdW5kXG4iKTsKKwkJdjRsX2RiZygxLCBkZWJ1ZywgYywgImtzMDEyMnMgZm91bmRcbiIpOwogCQlyZXR1cm47CiAJfQogCi0Jc3dpdGNoKGtzMDEyN19yZWFkKGtzLCBLU19DTURFKSAmIDB4MGYpIHsKLQorCXN3aXRjaCAoa3MwMTI3X3JlYWQoYywgS1NfQ01ERSkgJiAweDBmKSB7CiAJY2FzZSAwOgogCQlrcy0+a3NfdHlwZSA9IEtTX1RZUEVfMDEyNzsKLQkJZHByaW50aygia3MwMTI3OiBrczAxMjcgZm91bmRcbiIpOworCQl2NGxfZGJnKDEsIGRlYnVnLCBjLCAia3MwMTI3IGZvdW5kXG4iKTsKIAkJYnJlYWs7CiAKIAljYXNlIDk6CiAJCWtzLT5rc190eXBlID0gS1NfVFlQRV8wMTI3QjsKLQkJZHByaW50aygia3MwMTI3OiBrczAxMjdCIFJldmlzaW9uIEEgZm91bmRcbiIpOworCQl2NGxfZGJnKDEsIGRlYnVnLCBjLCAia3MwMTI3QiBSZXZpc2lvbiBBIGZvdW5kXG4iKTsKIAkJYnJlYWs7CiAKIAlkZWZhdWx0OgotCQlkcHJpbnRrKCJrczAxMjc6IHVua25vd24gcmV2aXNpb25cbiIpOworCQl2NGxfZGJnKDEsIGRlYnVnLCBjLCAidW5rbm93biByZXZpc2lvblxuIik7CiAJCWJyZWFrOwogCX0KIH0KIAotc3RhdGljIGludCBrczAxMjdfY29tbWFuZChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAotCQkJICB1bnNpZ25lZCBpbnQgY21kLCB2b2lkICphcmcpCitzdGF0aWMgaW50IGtzMDEyN19jb21tYW5kKHN0cnVjdCBpMmNfY2xpZW50ICpjLCB1bnNpZ25lZCBjbWQsIHZvaWQgKmFyZykKIHsKLQlzdHJ1Y3Qga3MwMTI3ICprcyA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwotCi0JaW50CQkqaWFyZyA9IChpbnQqKWFyZzsKLQorCXN0cnVjdCBrczAxMjcgKmtzID0gaTJjX2dldF9jbGllbnRkYXRhKGMpOworCWludAkJKmlhcmcgPSAoaW50ICopYXJnOwogCWludAkJc3RhdHVzOwogCiAJaWYgKCFrcykKIAkJcmV0dXJuIC1FTk9ERVY7CiAKIAlzd2l0Y2ggKGNtZCkgewotCiAJY2FzZSBERUNPREVSX0lOSVQ6Ci0JCWRwcmludGsoImtzMDEyNzogY29tbWFuZCBERUNPREVSX0lOSVRcbiIpOwotCQlrczAxMjdfcmVzZXQoa3MpOworCQl2NGxfZGJnKDEsIGRlYnVnLCBjLCAiREVDT0RFUl9JTklUXG4iKTsKKwkJa3MwMTI3X3Jlc2V0KGMpOwogCQlicmVhazsKIAogCWNhc2UgREVDT0RFUl9TRVRfSU5QVVQ6CkBAIC00MzYsMTYxICs0MjgsMTYwIEBACiAJCWNhc2UgS1NfSU5QVVRfQ09NUE9TSVRFXzQ6CiAJCWNhc2UgS1NfSU5QVVRfQ09NUE9TSVRFXzU6CiAJCWNhc2UgS1NfSU5QVVRfQ09NUE9TSVRFXzY6Ci0JCQlkcHJpbnRrKCJrczAxMjc6IGNvbW1hbmQgREVDT0RFUl9TRVRfSU5QVVQgJWQ6ICIKLQkJCQkiQ29tcG9zaXRlXG4iLCAqaWFyZyk7CisJCQl2NGxfZGJnKDEsIGRlYnVnLCBjLAorCQkJCSJERUNPREVSX1NFVF9JTlBVVCAlZDogQ29tcG9zaXRlXG4iLCAqaWFyZyk7CiAJCQkvKiBhdXRvZGV0ZWN0IDUwLzYwIEh6ICovCi0JCQlrczAxMjdfYW5kX29yKGtzLCBLU19DTURBLCAgIDB4ZmMsIDB4MDApOworCQkJa3MwMTI3X2FuZF9vcihjLCBLU19DTURBLCAgIDB4ZmMsIDB4MDApOwogCQkJLyogVlNFPTAgKi8KLQkJCWtzMDEyN19hbmRfb3Ioa3MsIEtTX0NNREEsICAgfjB4NDAsIDB4MDApOworCQkJa3MwMTI3X2FuZF9vcihjLCBLU19DTURBLCAgIH4weDQwLCAweDAwKTsKIAkJCS8qIHNldCBpbnB1dCBsaW5lICovCi0JCQlrczAxMjdfYW5kX29yKGtzLCBLU19DTURCLCAgIDB4YjAsICppYXJnKTsKKwkJCWtzMDEyN19hbmRfb3IoYywgS1NfQ01EQiwgICAweGIwLCAqaWFyZyk7CiAJCQkvKiBub24tZnJlZXJ1bm5pbmcgbW9kZSAqLwotCQkJa3MwMTI3X2FuZF9vcihrcywgS1NfQ01EQywgICAweDcwLCAweDBhKTsKKwkJCWtzMDEyN19hbmRfb3IoYywgS1NfQ01EQywgICAweDcwLCAweDBhKTsKIAkJCS8qIGFuYWxvZyBpbnB1dCAqLwotCQkJa3MwMTI3X2FuZF9vcihrcywgS1NfQ01ERCwgICAweDAzLCAweDAwKTsKKwkJCWtzMDEyN19hbmRfb3IoYywgS1NfQ01ERCwgICAweDAzLCAweDAwKTsKIAkJCS8qIGVuYWJsZSBjaHJvbWEgZGVtb2R1bGF0aW9uICovCi0JCQlrczAxMjdfYW5kX29yKGtzLCBLU19DVFJBQ0ssIDB4Y2YsIDB4MDApOworCQkJa3MwMTI3X2FuZF9vcihjLCBLU19DVFJBQ0ssIDB4Y2YsIDB4MDApOwogCQkJLyogY2hyb21hIHRyYXAsIEhZQldSPTEgKi8KLQkJCWtzMDEyN19hbmRfb3Ioa3MsIEtTX0xVTUEsICAgMHgwMCwKKwkJCWtzMDEyN19hbmRfb3IoYywgS1NfTFVNQSwgICAweDAwLAogCQkJCSAgICAgICAocmVnX2RlZmF1bHRzW0tTX0xVTUFdKXwweDBjKTsKIAkJCS8qIHNjYWxlciBmdWxsYncsIGx1bWEgY29tYiBvZmYgKi8KLQkJCWtzMDEyN19hbmRfb3Ioa3MsIEtTX1ZFUlRJQSwgMHgwOCwgMHg4MSk7CisJCQlrczAxMjdfYW5kX29yKGMsIEtTX1ZFUlRJQSwgMHgwOCwgMHg4MSk7CiAJCQkvKiBtYW51YWwgY2hyb21hIGNvbWIgLjI1IC41IC4yNSAqLwotCQkJa3MwMTI3X2FuZF9vcihrcywgS1NfVkVSVElDLCAweDBmLCAweDkwKTsKKwkJCWtzMDEyN19hbmRfb3IoYywgS1NfVkVSVElDLCAweDBmLCAweDkwKTsKIAogCQkJLyogY2hyb21hIHBhdGggZGVsYXkgKi8KLQkJCWtzMDEyN19hbmRfb3Ioa3MsIEtTX0NIUk9NQiwgMHgwZiwgMHg5MCk7CisJCQlrczAxMjdfYW5kX29yKGMsIEtTX0NIUk9NQiwgMHgwZiwgMHg5MCk7CiAKLQkJCWtzMDEyN193cml0ZShrcywgS1NfVUdBSU4sIHJlZ19kZWZhdWx0c1tLU19VR0FJTl0pOwotCQkJa3MwMTI3X3dyaXRlKGtzLCBLU19WR0FJTiwgcmVnX2RlZmF1bHRzW0tTX1ZHQUlOXSk7Ci0JCQlrczAxMjdfd3JpdGUoa3MsIEtTX1VWT0ZGSCwgcmVnX2RlZmF1bHRzW0tTX1VWT0ZGSF0pOwotCQkJa3MwMTI3X3dyaXRlKGtzLCBLU19VVk9GRkwsIHJlZ19kZWZhdWx0c1tLU19VVk9GRkxdKTsKKwkJCWtzMDEyN193cml0ZShjLCBLU19VR0FJTiwgcmVnX2RlZmF1bHRzW0tTX1VHQUlOXSk7CisJCQlrczAxMjdfd3JpdGUoYywgS1NfVkdBSU4sIHJlZ19kZWZhdWx0c1tLU19WR0FJTl0pOworCQkJa3MwMTI3X3dyaXRlKGMsIEtTX1VWT0ZGSCwgcmVnX2RlZmF1bHRzW0tTX1VWT0ZGSF0pOworCQkJa3MwMTI3X3dyaXRlKGMsIEtTX1VWT0ZGTCwgcmVnX2RlZmF1bHRzW0tTX1VWT0ZGTF0pOwogCQkJYnJlYWs7CiAKIAkJY2FzZSBLU19JTlBVVF9TVklERU9fMToKIAkJY2FzZSBLU19JTlBVVF9TVklERU9fMjoKIAkJY2FzZSBLU19JTlBVVF9TVklERU9fMzoKLQkJCWRwcmludGsoImtzMDEyNzogY29tbWFuZCBERUNPREVSX1NFVF9JTlBVVCAlZDogIgotCQkJCSJTLVZpZGVvXG4iLCAqaWFyZyk7CisJCQl2NGxfZGJnKDEsIGRlYnVnLCBjLAorCQkJCSJERUNPREVSX1NFVF9JTlBVVCAlZDogUy1WaWRlb1xuIiwgKmlhcmcpOwogCQkJLyogYXV0b2RldGVjdCA1MC82MCBIeiAqLwotCQkJa3MwMTI3X2FuZF9vcihrcywgS1NfQ01EQSwgICAweGZjLCAweDAwKTsKKwkJCWtzMDEyN19hbmRfb3IoYywgS1NfQ01EQSwgICAweGZjLCAweDAwKTsKIAkJCS8qIFZTRT0wICovCi0JCQlrczAxMjdfYW5kX29yKGtzLCBLU19DTURBLCAgIH4weDQwLCAweDAwKTsKKwkJCWtzMDEyN19hbmRfb3IoYywgS1NfQ01EQSwgICB+MHg0MCwgMHgwMCk7CiAJCQkvKiBzZXQgaW5wdXQgbGluZSAqLwotCQkJa3MwMTI3X2FuZF9vcihrcywgS1NfQ01EQiwgICAweGIwLCAqaWFyZyk7CisJCQlrczAxMjdfYW5kX29yKGMsIEtTX0NNREIsICAgMHhiMCwgKmlhcmcpOwogCQkJLyogbm9uLWZyZWVydW5uaW5nIG1vZGUgKi8KLQkJCWtzMDEyN19hbmRfb3Ioa3MsIEtTX0NNREMsICAgMHg3MCwgMHgwYSk7CisJCQlrczAxMjdfYW5kX29yKGMsIEtTX0NNREMsICAgMHg3MCwgMHgwYSk7CiAJCQkvKiBhbmFsb2cgaW5wdXQgKi8KLQkJCWtzMDEyN19hbmRfb3Ioa3MsIEtTX0NNREQsICAgMHgwMywgMHgwMCk7CisJCQlrczAxMjdfYW5kX29yKGMsIEtTX0NNREQsICAgMHgwMywgMHgwMCk7CiAJCQkvKiBlbmFibGUgY2hyb21hIGRlbW9kdWxhdGlvbiAqLwotCQkJa3MwMTI3X2FuZF9vcihrcywgS1NfQ1RSQUNLLCAweGNmLCAweDAwKTsKLQkJCWtzMDEyN19hbmRfb3Ioa3MsIEtTX0xVTUEsIDB4MDAsCisJCQlrczAxMjdfYW5kX29yKGMsIEtTX0NUUkFDSywgMHhjZiwgMHgwMCk7CisJCQlrczAxMjdfYW5kX29yKGMsIEtTX0xVTUEsIDB4MDAsCiAJCQkJICAgICAgIHJlZ19kZWZhdWx0c1tLU19MVU1BXSk7CiAJCQkvKiBkaXNhYmxlIGx1bWEgY29tYiAqLwotCQkJa3MwMTI3X2FuZF9vcihrcywgS1NfVkVSVElBLCAweDA4LAorCQkJa3MwMTI3X2FuZF9vcihjLCBLU19WRVJUSUEsIDB4MDgsCiAJCQkJICAgICAgIChyZWdfZGVmYXVsdHNbS1NfVkVSVElBXSYweGYwKXwweDAxKTsKLQkJCWtzMDEyN19hbmRfb3Ioa3MsIEtTX1ZFUlRJQywgMHgwZiwKKwkJCWtzMDEyN19hbmRfb3IoYywgS1NfVkVSVElDLCAweDBmLAogCQkJCSAgICAgICByZWdfZGVmYXVsdHNbS1NfVkVSVElDXSYweGYwKTsKIAotCQkJa3MwMTI3X2FuZF9vcihrcywgS1NfQ0hST01CLCAweDBmLAorCQkJa3MwMTI3X2FuZF9vcihjLCBLU19DSFJPTUIsIDB4MGYsCiAJCQkJICAgICAgIHJlZ19kZWZhdWx0c1tLU19DSFJPTUJdJjB4ZjApOwogCi0JCQlrczAxMjdfd3JpdGUoa3MsIEtTX1VHQUlOLCByZWdfZGVmYXVsdHNbS1NfVUdBSU5dKTsKLQkJCWtzMDEyN193cml0ZShrcywgS1NfVkdBSU4sIHJlZ19kZWZhdWx0c1tLU19WR0FJTl0pOwotCQkJa3MwMTI3X3dyaXRlKGtzLCBLU19VVk9GRkgsIHJlZ19kZWZhdWx0c1tLU19VVk9GRkhdKTsKLQkJCWtzMDEyN193cml0ZShrcywgS1NfVVZPRkZMLCByZWdfZGVmYXVsdHNbS1NfVVZPRkZMXSk7CisJCQlrczAxMjdfd3JpdGUoYywgS1NfVUdBSU4sIHJlZ19kZWZhdWx0c1tLU19VR0FJTl0pOworCQkJa3MwMTI3X3dyaXRlKGMsIEtTX1ZHQUlOLCByZWdfZGVmYXVsdHNbS1NfVkdBSU5dKTsKKwkJCWtzMDEyN193cml0ZShjLCBLU19VVk9GRkgsIHJlZ19kZWZhdWx0c1tLU19VVk9GRkhdKTsKKwkJCWtzMDEyN193cml0ZShjLCBLU19VVk9GRkwsIHJlZ19kZWZhdWx0c1tLU19VVk9GRkxdKTsKIAkJCWJyZWFrOwogCiAJCWNhc2UgS1NfSU5QVVRfWVVWNjU2OgotCQkJZHByaW50aygia3MwMTI3OiBjb21tYW5kIERFQ09ERVJfU0VUX0lOUFVUIDE1OiAiCi0JCQkJIllVVjY1NlxuIik7CisJCQl2NGxfZGJnKDEsIGRlYnVnLCBjLAorCQkJCSJERUNPREVSX1NFVF9JTlBVVCAxNTogWVVWNjU2XG4iKTsKIAkJCWlmIChrcy0+bm9ybSA9PSBWSURFT19NT0RFX05UU0MgfHwKIAkJCSAgICBrcy0+bm9ybSA9PSBLU19TVERfUEFMX00pCiAJCQkJLyogZm9yY2UgNjAgSHogKi8KLQkJCQlrczAxMjdfYW5kX29yKGtzLCBLU19DTURBLCAgIDB4ZmMsIDB4MDMpOworCQkJCWtzMDEyN19hbmRfb3IoYywgS1NfQ01EQSwgICAweGZjLCAweDAzKTsKIAkJCWVsc2UKIAkJCQkvKiBmb3JjZSA1MCBIeiAqLwotCQkJCWtzMDEyN19hbmRfb3Ioa3MsIEtTX0NNREEsICAgMHhmYywgMHgwMik7CisJCQkJa3MwMTI3X2FuZF9vcihjLCBLU19DTURBLCAgIDB4ZmMsIDB4MDIpOwogCi0JCQlrczAxMjdfYW5kX29yKGtzLCBLU19DTURBLCAgIDB4ZmYsIDB4NDApOyAvKiBWU0U9MSAqLworCQkJa3MwMTI3X2FuZF9vcihjLCBLU19DTURBLCAgIDB4ZmYsIDB4NDApOyAvKiBWU0U9MSAqLwogCQkJLyogc2V0IGlucHV0IGxpbmUgYW5kIFZBTElHTiAqLwotCQkJa3MwMTI3X2FuZF9vcihrcywgS1NfQ01EQiwgICAweGIwLCAoKmlhcmcgfCAweDQwKSk7CisJCQlrczAxMjdfYW5kX29yKGMsIEtTX0NNREIsICAgMHhiMCwgKCppYXJnIHwgMHg0MCkpOwogCQkJLyogZnJlZXJ1bm5pbmcgbW9kZSwgKi8KIAkJCS8qIFRTVEdFTiA9IDEgVFNUR0ZSPTExIFRTVEdQSD0wIFRTVEdQSz0wICBWTUVNPTEqLwotCQkJa3MwMTI3X2FuZF9vcihrcywgS1NfQ01EQywgICAweDcwLCAweDg3KTsKKwkJCWtzMDEyN19hbmRfb3IoYywgS1NfQ01EQywgICAweDcwLCAweDg3KTsKIAkJCS8qIGRpZ2l0YWwgaW5wdXQsIFNZTkRJUiA9IDAgSU5QU0w9MDEgQ0xLRElSPTAgRUFWPTAgKi8KLQkJCWtzMDEyN19hbmRfb3Ioa3MsIEtTX0NNREQsICAgMHgwMywgMHgwOCk7CisJCQlrczAxMjdfYW5kX29yKGMsIEtTX0NNREQsICAgMHgwMywgMHgwOCk7CiAJCQkvKiBkaXNhYmxlIGNocm9tYSBkZW1vZHVsYXRpb24gKi8KLQkJCWtzMDEyN19hbmRfb3Ioa3MsIEtTX0NUUkFDSywgMHhjZiwgMHgzMCk7CisJCQlrczAxMjdfYW5kX29yKGMsIEtTX0NUUkFDSywgMHhjZiwgMHgzMCk7CiAJCQkvKiBIWVBLID0wMSBDVFJBUCA9IDAgSFlCV1I9MCBQRUQ9MSBSR0JIPTEgVU5JVD0xICovCi0JCQlrczAxMjdfYW5kX29yKGtzLCBLU19MVU1BLCAgIDB4MDAsIDB4NzEpOwotCQkJa3MwMTI3X2FuZF9vcihrcywgS1NfVkVSVElDLCAweDBmLAorCQkJa3MwMTI3X2FuZF9vcihjLCBLU19MVU1BLCAgIDB4MDAsIDB4NzEpOworCQkJa3MwMTI3X2FuZF9vcihjLCBLU19WRVJUSUMsIDB4MGYsCiAJCQkJICAgICAgIHJlZ19kZWZhdWx0c1tLU19WRVJUSUNdJjB4ZjApOwogCiAJCQkvKiBzY2FsZXIgZnVsbGJ3LCBsdW1hIGNvbWIgb2ZmICovCi0JCQlrczAxMjdfYW5kX29yKGtzLCBLU19WRVJUSUEsIDB4MDgsIDB4ODEpOworCQkJa3MwMTI3X2FuZF9vcihjLCBLU19WRVJUSUEsIDB4MDgsIDB4ODEpOwogCi0JCQlrczAxMjdfYW5kX29yKGtzLCBLU19DSFJPTUIsIDB4MGYsCisJCQlrczAxMjdfYW5kX29yKGMsIEtTX0NIUk9NQiwgMHgwZiwKIAkJCQkgICAgICAgcmVnX2RlZmF1bHRzW0tTX0NIUk9NQl0mMHhmMCk7CiAKLQkJCWtzMDEyN19hbmRfb3Ioa3MsIEtTX0NPTiwgMHgwMCwgMHgwMCk7Ci0JCQlrczAxMjdfYW5kX29yKGtzLCBLU19CUlQsIDB4MDAsIDMyKTsJLyogc3BlYzogMzQgKi8KKwkJCWtzMDEyN19hbmRfb3IoYywgS1NfQ09OLCAweDAwLCAweDAwKTsKKwkJCWtzMDEyN19hbmRfb3IoYywgS1NfQlJULCAweDAwLCAzMik7CS8qIHNwZWM6IDM0ICovCiAJCQkJLyogc3BlYzogMjI5IChlNSkgKi8KLQkJCWtzMDEyN19hbmRfb3Ioa3MsIEtTX1NBVCwgMHgwMCwgMHhlOCk7Ci0JCQlrczAxMjdfYW5kX29yKGtzLCBLU19IVUUsIDB4MDAsIDApOworCQkJa3MwMTI3X2FuZF9vcihjLCBLU19TQVQsIDB4MDAsIDB4ZTgpOworCQkJa3MwMTI3X2FuZF9vcihjLCBLU19IVUUsIDB4MDAsIDApOwogCi0JCQlrczAxMjdfYW5kX29yKGtzLCBLU19VR0FJTiwgMHgwMCwgMjM4KTsKLQkJCWtzMDEyN19hbmRfb3Ioa3MsIEtTX1ZHQUlOLCAweDAwLCAweDAwKTsKKwkJCWtzMDEyN19hbmRfb3IoYywgS1NfVUdBSU4sIDB4MDAsIDIzOCk7CisJCQlrczAxMjdfYW5kX29yKGMsIEtTX1ZHQUlOLCAweDAwLCAweDAwKTsKIAogCQkJLypVT0ZGOjB4MzAsIFZPRkY6MHgzMCwgVFNUQ0dOPTEgKi8KLQkJCWtzMDEyN19hbmRfb3Ioa3MsIEtTX1VWT0ZGSCwgMHgwMCwgMHg0Zik7Ci0JCQlrczAxMjdfYW5kX29yKGtzLCBLU19VVk9GRkwsIDB4MDAsIDB4MDApOworCQkJa3MwMTI3X2FuZF9vcihjLCBLU19VVk9GRkgsIDB4MDAsIDB4NGYpOworCQkJa3MwMTI3X2FuZF9vcihjLCBLU19VVk9GRkwsIDB4MDAsIDB4MDApOwogCQkJYnJlYWs7CiAKIAkJZGVmYXVsdDoKLQkJCWRwcmludGsoImtzMDEyNzogY29tbWFuZCBERUNPREVSX1NFVF9JTlBVVDogIgotCQkJCSJVbmtub3duIGlucHV0ICVkXG4iLCAqaWFyZyk7CisJCQl2NGxfZGJnKDEsIGRlYnVnLCBjLAorCQkJCSJERUNPREVSX1NFVF9JTlBVVDogVW5rbm93biBpbnB1dCAlZFxuIiwgKmlhcmcpOwogCQkJYnJlYWs7CiAJCX0KIAogCQkvKiBoYWNrOiBDRE1MUEYgc29tZXRpbWVzIHNwb250YW5lb3VzbHkgc3dpdGNoZXMgb247ICovCiAJCS8qIGZvcmNlIGJhY2sgb2ZmICovCi0JCWtzMDEyN193cml0ZShrcywgS1NfREVNT0QsIHJlZ19kZWZhdWx0c1tLU19ERU1PRF0pOworCQlrczAxMjdfd3JpdGUoYywgS1NfREVNT0QsIHJlZ19kZWZhdWx0c1tLU19ERU1PRF0pOwogCQlicmVhazsKIAogCWNhc2UgREVDT0RFUl9TRVRfT1VUUFVUOgogCQlzd2l0Y2goKmlhcmcpIHsKIAkJY2FzZSBLU19PVVRQVVRfWVVWNjU2RToKLQkJCWRwcmludGsoImtzMDEyNzogY29tbWFuZCBERUNPREVSX1NFVF9PVVRQVVQ6ICIKLQkJCQkiT1VUUFVUX1lVVjY1NkUgKE1pc3NpbmcpXG4iKTsKKwkJCXY0bF9kYmcoMSwgZGVidWcsIGMsCisJCQkJIkRFQ09ERVJfU0VUX09VVFBVVDogT1VUUFVUX1lVVjY1NkUgKE1pc3NpbmcpXG4iKTsKIAkJCXJldHVybiAtRUlOVkFMOwotCQkJYnJlYWs7CiAKIAkJY2FzZSBLU19PVVRQVVRfRVhWOgotCQkJZHByaW50aygia3MwMTI3OiBjb21tYW5kIERFQ09ERVJfU0VUX09VVFBVVDogIgotCQkJCSJPVVRQVVRfRVhWXG4iKTsKLQkJCWtzMDEyN19hbmRfb3Ioa3MsIEtTX09GTVRBLCAweGYwLCAweDA5KTsKKwkJCXY0bF9kYmcoMSwgZGVidWcsIGMsCisJCQkJIkRFQ09ERVJfU0VUX09VVFBVVDogT1VUUFVUX0VYVlxuIik7CisJCQlrczAxMjdfYW5kX29yKGMsIEtTX09GTVRBLCAweGYwLCAweDA5KTsKIAkJCWJyZWFrOwogCQl9CiAJCWJyZWFrOwogCi0JY2FzZSBERUNPREVSX1NFVF9OT1JNOiAvL3NhbSBUaGlzIGJsb2NrIG1peGVzIG9sZCBhbmQgbmV3IG5vcm0gbmFtZXMuLi4KKwljYXNlIERFQ09ERVJfU0VUX05PUk06IC8qIHNhbSBUaGlzIGJsb2NrIG1peGVzIG9sZCBhbmQgbmV3IG5vcm0gbmFtZXMuLi4gKi8KIAkJLyogU2V0IHRvIGF1dG9tYXRpYyBTRUNBTS9Gc2MgbW9kZSAqLwotCQlrczAxMjdfYW5kX29yKGtzLCBLU19ERU1PRCwgMHhmMCwgMHgwMCk7CisJCWtzMDEyN19hbmRfb3IoYywgS1NfREVNT0QsIDB4ZjAsIDB4MDApOwogCiAJCWtzLT5ub3JtID0gKmlhcmc7Ci0JCXN3aXRjaCgqaWFyZykKLQkJeworCQlzd2l0Y2ggKCppYXJnKSB7CiAJCS8qIHRoaXMgaXMgdW50ZXN0ZWQgISEgKi8KIAkJLyogSXQganVzdCBkZXRlY3RzIFBBTF9OL05UU0NfTSAobm8gc3BlY2lhbCBmcmVxdWVuY2llcykgKi8KIAkJLyogQW5kIHlvdSBoYXZlIHRvIHNldCB0aGUgc3RhbmRhcmQgYSBzZWNvbmQgdGltZSBhZnRlcndhcmRzICovCiAJCWNhc2UgVklERU9fTU9ERV9BVVRPOgotCQkJZHByaW50aygia3MwMTI3OiBjb21tYW5kIERFQ09ERVJfU0VUX05PUk06IEFVVE9cbiIpOworCQkJdjRsX2RiZygxLCBkZWJ1ZywgYywKKwkJCQkiREVDT0RFUl9TRVRfTk9STTogQVVUT1xuIik7CiAKIAkJCS8qIFRoZSBjaGlwIGRldGVybWluZXMgdGhlIGZvcm1hdCAqLwogCQkJLyogYmFzZWQgb24gdGhlIGN1cnJlbnQgZmllbGQgcmF0ZSAqLwotCQkJa3MwMTI3X2FuZF9vcihrcywgS1NfQ01EQSwgICAweGZjLCAweDAwKTsKLQkJCWtzMDEyN19hbmRfb3Ioa3MsIEtTX0NIUk9NQSwgMHg5ZiwgMHgyMCk7CisJCQlrczAxMjdfYW5kX29yKGMsIEtTX0NNREEsICAgMHhmYywgMHgwMCk7CisJCQlrczAxMjdfYW5kX29yKGMsIEtTX0NIUk9NQSwgMHg5ZiwgMHgyMCk7CiAJCQkvKiBUaGlzIGlzIHdyb25nIGZvciBQQUwgISBBcyBJIHNhaWQsICovCiAJCQkvKiB5b3UgbmVlZCB0byBzZXQgdGhlIHN0YW5kYXJkIG9uY2UgYWdhaW4gISEgKi8KIAkJCWtzLT5mb3JtYXRfaGVpZ2h0ID0gMjQwOwpAQCAtNTk4LDg0ICs1ODksODYgQEAKIAkJCWJyZWFrOwogCiAJCWNhc2UgVklERU9fTU9ERV9OVFNDOgotCQkJZHByaW50aygia3MwMTI3OiBjb21tYW5kIERFQ09ERVJfU0VUX05PUk06IE5UU0NfTVxuIik7Ci0JCQlrczAxMjdfYW5kX29yKGtzLCBLU19DSFJPTUEsIDB4OWYsIDB4MjApOworCQkJdjRsX2RiZygxLCBkZWJ1ZywgYywKKwkJCQkiREVDT0RFUl9TRVRfTk9STTogTlRTQ19NXG4iKTsKKwkJCWtzMDEyN19hbmRfb3IoYywgS1NfQ0hST01BLCAweDlmLCAweDIwKTsKIAkJCWtzLT5mb3JtYXRfaGVpZ2h0ID0gMjQwOwogCQkJa3MtPmZvcm1hdF93aWR0aCA9IDcwNDsKIAkJCWJyZWFrOwogCiAJCWNhc2UgS1NfU1REX05UU0NfTjoKLQkJCWRwcmludGsoImtzMDEyNzogY29tbWFuZCBLUzAxMjdfU0VUX1NUQU5EQVJEOiAiCi0JCQkJIk5UU0NfTiAoZml4bWUpXG4iKTsKLQkJCWtzMDEyN19hbmRfb3Ioa3MsIEtTX0NIUk9NQSwgMHg5ZiwgMHg0MCk7CisJCQl2NGxfZGJnKDEsIGRlYnVnLCBjLAorCQkJCSJLUzAxMjdfU0VUX05PUk06IE5UU0NfTiAoZml4bWUpXG4iKTsKKwkJCWtzMDEyN19hbmRfb3IoYywgS1NfQ0hST01BLCAweDlmLCAweDQwKTsKIAkJCWtzLT5mb3JtYXRfaGVpZ2h0ID0gMjQwOwogCQkJa3MtPmZvcm1hdF93aWR0aCA9IDcwNDsKIAkJCWJyZWFrOwogCiAJCWNhc2UgVklERU9fTU9ERV9QQUw6Ci0JCQlkcHJpbnRrKCJrczAxMjc6IGNvbW1hbmQgREVDT0RFUl9TRVRfTk9STTogUEFMX05cbiIpOwotCQkJa3MwMTI3X2FuZF9vcihrcywgS1NfQ0hST01BLCAweDlmLCAweDIwKTsKKwkJCXY0bF9kYmcoMSwgZGVidWcsIGMsCisJCQkJIkRFQ09ERVJfU0VUX05PUk06IFBBTF9OXG4iKTsKKwkJCWtzMDEyN19hbmRfb3IoYywgS1NfQ0hST01BLCAweDlmLCAweDIwKTsKIAkJCWtzLT5mb3JtYXRfaGVpZ2h0ID0gMjkwOwogCQkJa3MtPmZvcm1hdF93aWR0aCA9IDcwNDsKIAkJCWJyZWFrOwogCiAJCWNhc2UgS1NfU1REX1BBTF9NOgotCQkJZHByaW50aygia3MwMTI3OiBjb21tYW5kIEtTMDEyN19TRVRfU1RBTkRBUkQ6ICIKLQkJCQkiUEFMX00gKGZpeG1lKVxuIik7Ci0JCQlrczAxMjdfYW5kX29yKGtzLCBLU19DSFJPTUEsIDB4OWYsIDB4NDApOworCQkJdjRsX2RiZygxLCBkZWJ1ZywgYywKKwkJCQkiS1MwMTI3X1NFVF9OT1JNOiBQQUxfTSAoZml4bWUpXG4iKTsKKwkJCWtzMDEyN19hbmRfb3IoYywgS1NfQ0hST01BLCAweDlmLCAweDQwKTsKIAkJCWtzLT5mb3JtYXRfaGVpZ2h0ID0gMjkwOwogCQkJa3MtPmZvcm1hdF93aWR0aCA9IDcwNDsKIAkJCWJyZWFrOwogCiAJCWNhc2UgVklERU9fTU9ERV9TRUNBTToKLQkJCWRwcmludGsoImtzMDEyNzogY29tbWFuZCBLUzAxMjdfU0VUX1NUQU5EQVJEOiAiCi0JCQkJIlNFQ0FNXG4iKTsKKwkJCXY0bF9kYmcoMSwgZGVidWcsIGMsCisJCQkJIktTMDEyN19TRVRfTk9STTogU0VDQU1cbiIpOwogCQkJa3MtPmZvcm1hdF9oZWlnaHQgPSAyOTA7CiAJCQlrcy0+Zm9ybWF0X3dpZHRoID0gNzA0OwogCiAJCQkvKiBzZXQgdG8gc2VjYW0gYXV0b2RldGVjdGlvbiAqLwotCQkJa3MwMTI3X2FuZF9vcihrcywgS1NfQ0hST01BLCAweGRmLCAweDIwKTsKLQkJCWtzMDEyN19hbmRfb3Ioa3MsIEtTX0RFTU9ELCAweGYwLCAweDAwKTsKKwkJCWtzMDEyN19hbmRfb3IoYywgS1NfQ0hST01BLCAweGRmLCAweDIwKTsKKwkJCWtzMDEyN19hbmRfb3IoYywgS1NfREVNT0QsIDB4ZjAsIDB4MDApOwogCQkJc2NoZWR1bGVfdGltZW91dF9pbnRlcnJ1cHRpYmxlKEhaLzEwKzEpOwogCiAJCQkvKiBkaWQgaXQgYXV0b2RldGVjdD8gKi8KLQkJCWlmIChrczAxMjdfcmVhZChrcywgS1NfREVNT0QpICYgMHg0MCkKKwkJCWlmIChrczAxMjdfcmVhZChjLCBLU19ERU1PRCkgJiAweDQwKQogCQkJCWJyZWFrOwogCiAJCQkvKiBmb3JjZSB0byBzZWNhbSBtb2RlICovCi0JCQlrczAxMjdfYW5kX29yKGtzLCBLU19ERU1PRCwgMHhmMCwgMHgwZik7CisJCQlrczAxMjdfYW5kX29yKGMsIEtTX0RFTU9ELCAweGYwLCAweDBmKTsKIAkJCWJyZWFrOwogCiAJCWRlZmF1bHQ6Ci0JCQlkcHJpbnRrKCJrczAxMjc6IGNvbW1hbmQgREVDT0RFUl9TRVRfTk9STTogIgotCQkJCSJVbmtub3duIG5vcm0gJWRcbiIsICppYXJnKTsKKwkJCXY0bF9kYmcoMSwgZGVidWcsIGMsCisJCQkJIkRFQ09ERVJfU0VUX05PUk06IFVua25vd24gbm9ybSAlZFxuIiwgKmlhcmcpOwogCQkJYnJlYWs7CiAJCX0KIAkJYnJlYWs7CiAKIAljYXNlIERFQ09ERVJfU0VUX1BJQ1RVUkU6Ci0JCWRwcmludGsoImtzMDEyNzogY29tbWFuZCBERUNPREVSX1NFVF9QSUNUVVJFICIKLQkJCSJub3QgeWV0IHN1cHBvcnRlZCAoZml4bWUpXG4iKTsKKwkJdjRsX2RiZygxLCBkZWJ1ZywgYywKKwkJCSJERUNPREVSX1NFVF9QSUNUVVJFOiBub3QgeWV0IHN1cHBvcnRlZFxuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCi0JLy9zYW0gdG9kbzogS1MwMTI3X1NFVF9CUklHSFRORVNTOiBNZXJnZSBpbnRvIERFQ09ERVJfU0VUX1BJQ1RVUkUKLQkvL3NhbSB0b2RvOiBLUzAxMjdfU0VUX0NPTlRSQVNUOiBNZXJnZSBpbnRvIERFQ09ERVJfU0VUX1BJQ1RVUkUKLQkvL3NhbSB0b2RvOiBLUzAxMjdfU0VUX0hVRTogTWVyZ2UgaW50byBERUNPREVSX1NFVF9QSUNUVVJFPwotCS8vc2FtIHRvZG86IEtTMDEyN19TRVRfU0FUVVJBVElPTjogTWVyZ2UgaW50byBERUNPREVSX1NFVF9QSUNUVVJFCi0JLy9zYW0gdG9kbzogS1MwMTI3X1NFVF9BR0NfTU9ERToKLQkvL3NhbSB0b2RvOiBLUzAxMjdfU0VUX0FHQzoKLQkvL3NhbSB0b2RvOiBLUzAxMjdfU0VUX0NIUk9NQV9NT0RFOgotCS8vc2FtIHRvZG86IEtTMDEyN19TRVRfUElYQ0xLX01PREU6Ci0JLy9zYW0gdG9kbzogS1MwMTI3X1NFVF9HQU1NQV9NT0RFOgotCS8vc2FtIHRvZG86IEtTMDEyN19TRVRfVUdBSU46Ci0JLy9zYW0gdG9kbzogS1MwMTI3X1NFVF9WR0FJTjoKLQkvL3NhbSB0b2RvOiBLUzAxMjdfU0VUX0lOVkFMWToKLQkvL3NhbSB0b2RvOiBLUzAxMjdfU0VUX0lOVkFMVToKLQkvL3NhbSB0b2RvOiBLUzAxMjdfU0VUX0lOVkFMVjoKLQkvL3NhbSB0b2RvOiBLUzAxMjdfU0VUX1VOVVNFWToKLQkvL3NhbSB0b2RvOiBLUzAxMjdfU0VUX1VOVVNFVToKLQkvL3NhbSB0b2RvOiBLUzAxMjdfU0VUX1VOVVNFVjoKLQkvL3NhbSB0b2RvOiBLUzAxMjdfU0VUX1ZTQUxJR05fTU9ERToKKwkvKiBzYW0gdG9kbzogS1MwMTI3X1NFVF9CUklHSFRORVNTOiBNZXJnZSBpbnRvIERFQ09ERVJfU0VUX1BJQ1RVUkUgKi8KKwkvKiBzYW0gdG9kbzogS1MwMTI3X1NFVF9DT05UUkFTVDogTWVyZ2UgaW50byBERUNPREVSX1NFVF9QSUNUVVJFICovCisJLyogc2FtIHRvZG86IEtTMDEyN19TRVRfSFVFOiBNZXJnZSBpbnRvIERFQ09ERVJfU0VUX1BJQ1RVUkU/ICovCisJLyogc2FtIHRvZG86IEtTMDEyN19TRVRfU0FUVVJBVElPTjogTWVyZ2UgaW50byBERUNPREVSX1NFVF9QSUNUVVJFICovCisJLyogc2FtIHRvZG86IEtTMDEyN19TRVRfQUdDX01PREU6ICovCisJLyogc2FtIHRvZG86IEtTMDEyN19TRVRfQUdDOiAqLworCS8qIHNhbSB0b2RvOiBLUzAxMjdfU0VUX0NIUk9NQV9NT0RFOiAqLworCS8qIHNhbSB0b2RvOiBLUzAxMjdfU0VUX1BJWENMS19NT0RFOiAqLworCS8qIHNhbSB0b2RvOiBLUzAxMjdfU0VUX0dBTU1BX01PREU6ICovCisJLyogc2FtIHRvZG86IEtTMDEyN19TRVRfVUdBSU46ICovCisJLyogc2FtIHRvZG86IEtTMDEyN19TRVRfVkdBSU46ICovCisJLyogc2FtIHRvZG86IEtTMDEyN19TRVRfSU5WQUxZOiAqLworCS8qIHNhbSB0b2RvOiBLUzAxMjdfU0VUX0lOVkFMVTogKi8KKwkvKiBzYW0gdG9kbzogS1MwMTI3X1NFVF9JTlZBTFY6ICovCisJLyogc2FtIHRvZG86IEtTMDEyN19TRVRfVU5VU0VZOiAqLworCS8qIHNhbSB0b2RvOiBLUzAxMjdfU0VUX1VOVVNFVTogKi8KKwkvKiBzYW0gdG9kbzogS1MwMTI3X1NFVF9VTlVTRVY6ICovCisJLyogc2FtIHRvZG86IEtTMDEyN19TRVRfVlNBTElHTl9NT0RFOiAqLwogCiAJY2FzZSBERUNPREVSX0VOQUJMRV9PVVRQVVQ6CiAJewpAQCAtNjg0LDM0ICs2NzcsMzIgQEAKIAkJaWFyZyA9IGFyZzsKIAkJZW5hYmxlID0gKCppYXJnICE9IDApOwogCQlpZiAoZW5hYmxlKSB7Ci0JCQlkcHJpbnRrKCJrczAxMjc6IGNvbW1hbmQgIgotCQkJCQkiREVDT0RFUl9FTkFCTEVfT1VUUFVUIG9uICIKLQkJCQkJIiglZClcbiIsIGVuYWJsZSk7CisJCQl2NGxfZGJnKDEsIGRlYnVnLCBjLAorCQkJCSJERUNPREVSX0VOQUJMRV9PVVRQVVQgb25cbiIpOwogCQkJLyogQWxsIG91dHB1dCBwaW5zIG9uICovCi0JCQlrczAxMjdfYW5kX29yKGtzLCBLU19PRk1UQSwgMHhjZiwgMHgzMCk7CisJCQlrczAxMjdfYW5kX29yKGMsIEtTX09GTVRBLCAweGNmLCAweDMwKTsKIAkJCS8qIE9iZXkgdGhlIE9FTiBwaW4gKi8KLQkJCWtzMDEyN19hbmRfb3Ioa3MsIEtTX0NERU0sIDB4N2YsIDB4MDApOworCQkJa3MwMTI3X2FuZF9vcihjLCBLU19DREVNLCAweDdmLCAweDAwKTsKIAkJfSBlbHNlIHsKLQkJCWRwcmludGsoImtzMDEyNzogY29tbWFuZCAiCi0JCQkJCSJERUNPREVSX0VOQUJMRV9PVVRQVVQgb2ZmICIKLQkJCQkJIiglZClcbiIsIGVuYWJsZSk7CisJCQl2NGxfZGJnKDEsIGRlYnVnLCBjLAorCQkJCSJERUNPREVSX0VOQUJMRV9PVVRQVVQgb2ZmXG4iKTsKIAkJCS8qIFZpZGVvIG91dHB1dCBwaW5zIG9mZiAqLwotCQkJa3MwMTI3X2FuZF9vcihrcywgS1NfT0ZNVEEsIDB4Y2YsIDB4MDApOworCQkJa3MwMTI3X2FuZF9vcihjLCBLU19PRk1UQSwgMHhjZiwgMHgwMCk7CiAJCQkvKiBJZ25vcmUgdGhlIE9FTiBwaW4gKi8KLQkJCWtzMDEyN19hbmRfb3Ioa3MsIEtTX0NERU0sIDB4N2YsIDB4ODApOworCQkJa3MwMTI3X2FuZF9vcihjLCBLU19DREVNLCAweDdmLCAweDgwKTsKIAkJfQotCX0KIAkJYnJlYWs7CisJfQogCi0JLy9zYW0gdG9kbzogS1MwMTI3X1NFVF9PVVRQVVRfTU9ERToKLQkvL3NhbSB0b2RvOiBLUzAxMjdfU0VUX1dJRFRIOgotCS8vc2FtIHRvZG86IEtTMDEyN19TRVRfSEVJR0hUOgotCS8vc2FtIHRvZG86IEtTMDEyN19TRVRfSFNDQUxFOgorCS8qIHNhbSB0b2RvOiBLUzAxMjdfU0VUX09VVFBVVF9NT0RFOiAqLworCS8qIHNhbSB0b2RvOiBLUzAxMjdfU0VUX1dJRFRIOiAqLworCS8qIHNhbSB0b2RvOiBLUzAxMjdfU0VUX0hFSUdIVDogKi8KKwkvKiBzYW0gdG9kbzogS1MwMTI3X1NFVF9IU0NBTEU6ICovCiAKIAljYXNlIERFQ09ERVJfR0VUX1NUQVRVUzoKLQkJZHByaW50aygia3MwMTI3OiBjb21tYW5kIERFQ09ERVJfR0VUX1NUQVRVU1xuIik7CisJCXY0bF9kYmcoMSwgZGVidWcsIGMsICJERUNPREVSX0dFVF9TVEFUVVNcbiIpOwogCQkqaWFyZyA9IDA7Ci0JCXN0YXR1cyA9IGtzMDEyN19yZWFkKGtzLCBLU19TVEFUKTsKKwkJc3RhdHVzID0ga3MwMTI3X3JlYWQoYywgS1NfU1RBVCk7CiAJCWlmICghKHN0YXR1cyAmIDB4MjApKQkJIC8qIE5PVklEIG5vdCBzZXQgKi8KIAkJCSppYXJnID0gKCppYXJnIHwgREVDT0RFUl9TVEFUVVNfR09PRCk7CiAJCWlmICgoc3RhdHVzICYgMHgwMSkpCQkgICAgICAvKiBDTE9DSyBzZXQgKi8KQEAgLTcyMiwxMjQgKzcxMyw4MSBAQAogCQkJKmlhcmcgPSAoKmlhcmcgfCBERUNPREVSX1NUQVRVU19OVFNDKTsKIAkJYnJlYWs7CiAKLQkvL0NhdGNoIGFueSB1bmtub3duIGNvbW1hbmQKKwkvKiBDYXRjaCBhbnkgdW5rbm93biBjb21tYW5kICovCiAJZGVmYXVsdDoKLQkJZHByaW50aygia3MwMTI3OiBjb21tYW5kIHVua25vd246ICUwNFhcbiIsIGNtZCk7CisJCXY0bF9kYmcoMSwgZGVidWcsIGMsICJ1bmtub3duOiAweCUwOHhcbiIsIGNtZCk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAlyZXR1cm4gMDsKIH0KIAogCi0KLQotc3RhdGljIGludCBrczAxMjdfcHJvYmUoc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyKTsKLXN0YXRpYyBpbnQga3MwMTI3X2RldGFjaChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KTsKLXN0YXRpYyBpbnQga3MwMTI3X2NvbW1hbmQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKLQkJCSAgdW5zaWduZWQgaW50IGNtZCwgdm9pZCAqYXJnKTsKLQotCi0KIC8qIEFkZHJlc3NlcyB0byBzY2FuICovCi1zdGF0aWMgdW5zaWduZWQgc2hvcnQgbm9ybWFsX2kyY1tdID0ge0kyQ19LUzAxMjdfQURET04+PjEsCi0JCQkJICAgICAgIEkyQ19LUzAxMjdfT05CT0FSRD4+MSwgSTJDX0NMSUVOVF9FTkR9Owotc3RhdGljIHVuc2lnbmVkIHNob3J0IHByb2JlWzJdID0Je0kyQ19DTElFTlRfRU5ELCBJMkNfQ0xJRU5UX0VORH07Ci1zdGF0aWMgdW5zaWduZWQgc2hvcnQgaWdub3JlWzJdID0gCXtJMkNfQ0xJRU5UX0VORCwgSTJDX0NMSUVOVF9FTkR9Owotc3RhdGljIHN0cnVjdCBpMmNfY2xpZW50X2FkZHJlc3NfZGF0YSBhZGRyX2RhdGEgPSB7Ci0Jbm9ybWFsX2kyYywKLQlwcm9iZSwKLQlpZ25vcmUsCisjZGVmaW5lIEkyQ19LUzAxMjdfQURET04gICAweEQ4CisjZGVmaW5lIEkyQ19LUzAxMjdfT05CT0FSRCAweERBCisKK3N0YXRpYyB1bnNpZ25lZCBzaG9ydCBub3JtYWxfaTJjW10gPSB7CisJSTJDX0tTMDEyN19BRERPTiA+PiAxLAorCUkyQ19LUzAxMjdfT05CT0FSRCA+PiAxLAorCUkyQ19DTElFTlRfRU5ECiB9OwogCi1zdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgaTJjX2RyaXZlcl9rczAxMjcgPSB7Ci0JLmRyaXZlci5uYW1lID0gImtzMDEyNyIsCi0JLmlkICAgICAgICAgICAgID0gSTJDX0RSSVZFUklEX0tTMDEyNywKLQkuYXR0YWNoX2FkYXB0ZXIgPSBrczAxMjdfcHJvYmUsCi0JLmRldGFjaF9jbGllbnQgID0ga3MwMTI3X2RldGFjaCwKLQkuY29tbWFuZCAgICAgICAgPSBrczAxMjdfY29tbWFuZAotfTsKK0kyQ19DTElFTlRfSU5TTU9EOwogCi1zdGF0aWMgc3RydWN0IGkyY19jbGllbnQga3MwMTI3X2NsaWVudF90bXBsID0KLXsKLQkubmFtZSA9ICIoa3MwMTI3IHVuc2V0KSIsCi0JLmFkZHIgPSAwLAotCS5hZGFwdGVyID0gTlVMTCwKLQkuZHJpdmVyID0gJmkyY19kcml2ZXJfa3MwMTI3LAotfTsKLQotc3RhdGljIGludCBrczAxMjdfZm91bmRfcHJvYyhzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIsIGludCBhZGRyLCBpbnQga2luZCkKK3N0YXRpYyBpbnQga3MwMTI3X3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjLCBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpCiB7CiAJc3RydWN0IGtzMDEyNyAqa3M7Ci0Jc3RydWN0IGkyY19jbGllbnQgKmNsaWVudDsKIAotCWNsaWVudCA9IGt6YWxsb2Moc2l6ZW9mKCpjbGllbnQpLCBHRlBfS0VSTkVMKTsKLQlpZiAoY2xpZW50ID09IE5VTEwpCi0JCXJldHVybiAtRU5PTUVNOwotCW1lbWNweShjbGllbnQsICZrczAxMjdfY2xpZW50X3RtcGwsIHNpemVvZigqY2xpZW50KSk7CisJdjRsX2luZm8oYywgIiVzIGNoaXAgZm91bmQgQCAweCV4ICglcylcbiIsCisJCWMtPmFkZHIgPT0gKEkyQ19LUzAxMjdfQURET04gPj4gMSkgPyAiYWRkb24iIDogIm9uLWJvYXJkIiwKKwkJYy0+YWRkciA8PCAxLCBjLT5hZGFwdGVyLT5uYW1lKTsKIAogCWtzID0ga3phbGxvYyhzaXplb2YoKmtzKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKGtzID09IE5VTEwpIHsKLQkJa2ZyZWUoY2xpZW50KTsKKwlpZiAoa3MgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07Ci0JfQogCi0JaTJjX3NldF9jbGllbnRkYXRhKGNsaWVudCwga3MpOwotCWNsaWVudC0+YWRhcHRlciA9IGFkYXB0ZXI7Ci0JY2xpZW50LT5hZGRyID0gYWRkcjsKLQlzcHJpbnRmKGNsaWVudC0+bmFtZSwgImtzMDEyNy0lMDJ4IiwgYWRhcHRlci0+aWQpOworCWkyY19zZXRfY2xpZW50ZGF0YShjLCBrcyk7CiAKLQlrcy0+Y2xpZW50ID0gY2xpZW50OwotCWtzLT5hZGRyID0gYWRkcjsKIAlrcy0+a3NfdHlwZSA9IEtTX1RZUEVfVU5LTk9XTjsKIAogCS8qIHBvd2VyIHVwICovCi0Ja3MwMTI3X3dyaXRlKGtzLCBLU19DTURBLCAweDJjKTsKKwlpbml0X3JlZ19kZWZhdWx0cygpOworCWtzMDEyN193cml0ZShjLCBLU19DTURBLCAweDJjKTsKIAltZGVsYXkoMTApOwogCiAJLyogcmVzZXQgdGhlIGRldmljZSAqLwotCWtzMDEyN19yZXNldChrcyk7Ci0JcHJpbnRrKEtFUk5fSU5GTyAia3MwMTI3OiBhdHRhY2g6ICVzIHZpZGVvIGRlY29kZXJcbiIsCi0JICAgICAgIGtzLT5hZGRyPT0oSTJDX0tTMDEyN19BRERPTj4+MSkgPyAiYWRkb24iIDogIm9uLWJvYXJkIik7Ci0KLQlpMmNfYXR0YWNoX2NsaWVudChjbGllbnQpOworCWtzMDEyN19yZXNldChjKTsKIAlyZXR1cm4gMDsKIH0KIAotCi1zdGF0aWMgaW50IGtzMDEyN19wcm9iZShzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIpCitzdGF0aWMgaW50IGtzMDEyN19yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmMpCiB7Ci0JaWYgKGFkYXB0ZXItPmlkID09IEkyQ19IV19CX1pSMzYwNjcpCi0JCXJldHVybiBpMmNfcHJvYmUoYWRhcHRlciwgJmFkZHJfZGF0YSwga3MwMTI3X2ZvdW5kX3Byb2MpOwotCXJldHVybiAwOwotfQorCXN0cnVjdCBrczAxMjcgKmtzID0gaTJjX2dldF9jbGllbnRkYXRhKGMpOwogCi1zdGF0aWMgaW50IGtzMDEyN19kZXRhY2goc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKLXsKLQlzdHJ1Y3Qga3MwMTI3ICprcyA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCWtzMDEyN193cml0ZShjLCBLU19PRk1UQSwgMHgyMCk7IC8qIHRyaXN0YXRlICovCisJa3MwMTI3X3dyaXRlKGMsIEtTX0NNREEsIDB4MmMgfCAweDgwKTsgLyogcG93ZXIgZG93biAqLwogCi0Ja3MwMTI3X3dyaXRlKGtzLCBLU19PRk1UQSwgMHgyMCk7IC8qdHJpc3RhdGUqLwotCWtzMDEyN193cml0ZShrcywgS1NfQ01EQSwgMHgyYyB8IDB4ODApOyAvKiBwb3dlciBkb3duICovCi0KLQlpMmNfZGV0YWNoX2NsaWVudChjbGllbnQpOwogCWtmcmVlKGtzKTsKLQlrZnJlZShjbGllbnQpOwotCi0JZHByaW50aygia3MwMTI3OiBkZXRhY2hcbiIpOwogCXJldHVybiAwOwogfQogCi0KLXN0YXRpYyBpbnQgX19kZXZpbml0IGtzMDEyN19pbml0X21vZHVsZSh2b2lkKQorc3RhdGljIGludCBrczAxMjdfbGVnYWN5X3Byb2JlKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlcikKIHsKLQlpbml0X3JlZ19kZWZhdWx0cygpOwotCXJldHVybiBpMmNfYWRkX2RyaXZlcigmaTJjX2RyaXZlcl9rczAxMjcpOworCXJldHVybiBhZGFwdGVyLT5pZCA9PSBJMkNfSFdfQl9aUjM2MDY3OwogfQogCi1zdGF0aWMgdm9pZCBfX2RldmV4aXQga3MwMTI3X2NsZWFudXBfbW9kdWxlKHZvaWQpCi17Ci0JaTJjX2RlbF9kcml2ZXIoJmkyY19kcml2ZXJfa3MwMTI3KTsKLX0KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCBrczAxMjdfaWRbXSA9IHsKKwl7ICJrczAxMjciLCAwIH0sCisJeyB9Cit9OworTU9EVUxFX0RFVklDRV9UQUJMRShpMmMsIGtzMDEyN19pZCk7CiAKLQotbW9kdWxlX2luaXQoa3MwMTI3X2luaXRfbW9kdWxlKTsKLW1vZHVsZV9leGl0KGtzMDEyN19jbGVhbnVwX21vZHVsZSk7CitzdGF0aWMgc3RydWN0IHY0bDJfaTJjX2RyaXZlcl9kYXRhIHY0bDJfaTJjX2RhdGEgPSB7CisJLm5hbWUgPSAia3MwMTI3IiwKKwkuZHJpdmVyaWQgPSBJMkNfRFJJVkVSSURfS1MwMTI3LAorCS5jb21tYW5kID0ga3MwMTI3X2NvbW1hbmQsCisJLnByb2JlID0ga3MwMTI3X3Byb2JlLAorCS5yZW1vdmUgPSBrczAxMjdfcmVtb3ZlLAorCS5sZWdhY3lfcHJvYmUgPSBrczAxMjdfbGVnYWN5X3Byb2JlLAorCS5pZF90YWJsZSA9IGtzMDEyN19pZCwKK307CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL21leWUuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vbWV5ZS5jCmluZGV4IGE5ZWY3ODAuLjY0MThmNGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vbWV5ZS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vbWV5ZS5jCkBAIC04NDMsMTcgKzg0MywxNiBAQAogCiBzdGF0aWMgaW50IG1leWVfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKLQlpbnQgaSwgZXJyOworCWludCBpOwogCi0JZXJyID0gdmlkZW9fZXhjbHVzaXZlX29wZW4oaW5vZGUsIGZpbGUpOwotCWlmIChlcnIgPCAwKQotCQlyZXR1cm4gZXJyOworCWlmICh0ZXN0X2FuZF9zZXRfYml0KDAsICZtZXllLmluX3VzZSkpCisJCXJldHVybiAtRUJVU1k7CiAKIAltY2hpcF9oaWNfc3RvcCgpOwogCiAJaWYgKG1jaGlwX2RtYV9hbGxvYygpKSB7CiAJCXByaW50ayhLRVJOX0VSUiAibWV5ZTogbWNoaXAgZnJhbWVidWZmZXIgYWxsb2NhdGlvbiBmYWlsZWRcbiIpOwotCQl2aWRlb19leGNsdXNpdmVfcmVsZWFzZShpbm9kZSwgZmlsZSk7CisJCWNsZWFyX2JpdCgwLCAmbWV5ZS5pbl91c2UpOwogCQlyZXR1cm4gLUVOT0JVRlM7CiAJfQogCkBAIC04NjgsNyArODY3LDcgQEAKIHsKIAltY2hpcF9oaWNfc3RvcCgpOwogCW1jaGlwX2RtYV9mcmVlKCk7Ci0JdmlkZW9fZXhjbHVzaXZlX3JlbGVhc2UoaW5vZGUsIGZpbGUpOworCWNsZWFyX2JpdCgwLCAmbWV5ZS5pbl91c2UpOwogCXJldHVybiAwOwogfQogCkBAIC0xNzc0LDYgKzE3NzMsNyBAQAogCQlnb3RvIG91dG5vdGRldjsKIAl9CiAKKwlyZXQgPSAtRU5PTUVNOwogCW1leWUubWNoaXBfZGV2ID0gcGNpZGV2OwogCW1leWUudmlkZW9fZGV2ID0gdmlkZW9fZGV2aWNlX2FsbG9jKCk7CiAJaWYgKCFtZXllLnZpZGVvX2RldikgewpAQCAtMTc4MSw3ICsxNzgxLDYgQEAKIAkJZ290byBvdXRub3RkZXY7CiAJfQogCi0JcmV0ID0gLUVOT01FTTsKIAltZXllLmdyYWJfdGVtcCA9IHZtYWxsb2MoTUNISVBfTkJfUEFHRVNfTUpQRUcgKiBQQUdFX1NJWkUpOwogCWlmICghbWV5ZS5ncmFiX3RlbXApIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJtZXllOiBncmFiIGJ1ZmZlciBhbGxvY2F0aW9uIGZhaWxlZFxuIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL21leWUuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vbWV5ZS5oCmluZGV4IGQ1MzU3NDguLjVmNzBhMTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vbWV5ZS5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vbWV5ZS5oCkBAIC0zMTEsNiArMzExLDcgQEAKIAlzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2aWRlb19kZXY7CS8qIHZpZGVvIGRldmljZSBwYXJhbWV0ZXJzICovCiAJc3RydWN0IHZpZGVvX3BpY3R1cmUgcGljdHVyZTsJLyogdmlkZW8gcGljdHVyZSBwYXJhbWV0ZXJzICovCiAJc3RydWN0IG1leWVfcGFyYW1zIHBhcmFtczsJLyogYWRkaXRpb25hbCBwYXJhbWV0ZXJzICovCisJdW5zaWduZWQgbG9uZyBpbl91c2U7CQkvKiBzZXQgdG8gMSBpZiB0aGUgZGV2aWNlIGlzIGluIHVzZSAqLwogI2lmZGVmIENPTkZJR19QTQogCXU4IHBtX21jaGlwX21vZGU7CQkvKiBvbGQgbWNoaXAgbW9kZSAqLwogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL210OW0wMDEuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vbXQ5bTAwMS5jCmluZGV4IDU1NGQyMjkuLjBjNTI0MzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vbXQ5bTAwMS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vbXQ5bTAwMS5jCkBAIC0xMTcsMjQgKzExNyw1MSBAQAogCiBzdGF0aWMgaW50IG10OW0wMDFfaW5pdChzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCkKIHsKKwlzdHJ1Y3QgbXQ5bTAwMSAqbXQ5bTAwMSA9IGNvbnRhaW5lcl9vZihpY2QsIHN0cnVjdCBtdDltMDAxLCBpY2QpOworCXN0cnVjdCBzb2NfY2FtZXJhX2xpbmsgKmljbCA9IG10OW0wMDEtPmNsaWVudC0+ZGV2LnBsYXRmb3JtX2RhdGE7CiAJaW50IHJldDsKIAotCS8qIERpc2FibGUgY2hpcCwgc3luY2hyb25vdXMgb3B0aW9uIHVwZGF0ZSAqLwogCWRldl9kYmcoaWNkLT52ZGV2LT5wYXJlbnQsICIlc1xuIiwgX19mdW5jX18pOwogCi0JcmV0ID0gcmVnX3dyaXRlKGljZCwgTVQ5TTAwMV9SRVNFVCwgMSk7Ci0JaWYgKHJldCA+PSAwKQotCQlyZXQgPSByZWdfd3JpdGUoaWNkLCBNVDlNMDAxX1JFU0VULCAwKTsKLQlpZiAocmV0ID49IDApCisJaWYgKGljbC0+cG93ZXIpIHsKKwkJcmV0ID0gaWNsLT5wb3dlcigmbXQ5bTAwMS0+Y2xpZW50LT5kZXYsIDEpOworCQlpZiAocmV0IDwgMCkgeworCQkJZGV2X2VycihpY2QtPnZkZXYtPnBhcmVudCwKKwkJCQkiUGxhdGZvcm0gZmFpbGVkIHRvIHBvd2VyLW9uIHRoZSBjYW1lcmEuXG4iKTsKKwkJCXJldHVybiByZXQ7CisJCX0KKwl9CisKKwkvKiBUaGUgY2FtZXJhIGNvdWxkIGhhdmUgYmVlbiBhbHJlYWR5IG9uLCB3ZSByZXNldCBpdCBhZGRpdGlvbmFsbHkgKi8KKwlpZiAoaWNsLT5yZXNldCkKKwkJcmV0ID0gaWNsLT5yZXNldCgmbXQ5bTAwMS0+Y2xpZW50LT5kZXYpOworCWVsc2UKKwkJcmV0ID0gLUVOT0RFVjsKKworCWlmIChyZXQgPCAwKSB7CisJCS8qIEVpdGhlciBubyBwbGF0Zm9ybSByZXNldCwgb3IgcGxhdGZvcm0gcmVzZXQgZmFpbGVkICovCisJCXJldCA9IHJlZ193cml0ZShpY2QsIE1UOU0wMDFfUkVTRVQsIDEpOworCQlpZiAoIXJldCkKKwkJCXJldCA9IHJlZ193cml0ZShpY2QsIE1UOU0wMDFfUkVTRVQsIDApOworCX0KKwkvKiBEaXNhYmxlIGNoaXAsIHN5bmNocm9ub3VzIG9wdGlvbiB1cGRhdGUgKi8KKwlpZiAoIXJldCkKIAkJcmV0ID0gcmVnX3dyaXRlKGljZCwgTVQ5TTAwMV9PVVRQVVRfQ09OVFJPTCwgMCk7CiAKLQlyZXR1cm4gcmV0ID49IDAgPyAwIDogLUVJTzsKKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgaW50IG10OW0wMDFfcmVsZWFzZShzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCkKIHsKKwlzdHJ1Y3QgbXQ5bTAwMSAqbXQ5bTAwMSA9IGNvbnRhaW5lcl9vZihpY2QsIHN0cnVjdCBtdDltMDAxLCBpY2QpOworCXN0cnVjdCBzb2NfY2FtZXJhX2xpbmsgKmljbCA9IG10OW0wMDEtPmNsaWVudC0+ZGV2LnBsYXRmb3JtX2RhdGE7CisKIAkvKiBEaXNhYmxlIHRoZSBjaGlwICovCiAJcmVnX3dyaXRlKGljZCwgTVQ5TTAwMV9PVVRQVVRfQ09OVFJPTCwgMCk7CisKKwlpZiAoaWNsLT5wb3dlcikKKwkJaWNsLT5wb3dlcigmbXQ5bTAwMS0+Y2xpZW50LT5kZXYsIDApOworCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTI2NywyNCArMjk0LDI0IEBACiAKIAkvKiBCbGFua2luZyBhbmQgc3RhcnQgdmFsdWVzIC0gZGVmYXVsdC4uLiAqLwogCXJldCA9IHJlZ193cml0ZShpY2QsIE1UOU0wMDFfSE9SSVpPTlRBTF9CTEFOS0lORywgaGJsYW5rKTsKLQlpZiAocmV0ID49IDApCisJaWYgKCFyZXQpCiAJCXJldCA9IHJlZ193cml0ZShpY2QsIE1UOU0wMDFfVkVSVElDQUxfQkxBTktJTkcsIHZibGFuayk7CiAKIAkvKiBUaGUgY2FsbGVyIHByb3ZpZGVzIGEgc3VwcG9ydGVkIGZvcm1hdCwgYXMgdmVyaWZpZWQgcGVyCiAJICogY2FsbCB0byBpY2QtPnRyeV9mbXRfY2FwKCkgKi8KLQlpZiAocmV0ID49IDApCisJaWYgKCFyZXQpCiAJCXJldCA9IHJlZ193cml0ZShpY2QsIE1UOU0wMDFfQ09MVU1OX1NUQVJULCByZWN0LT5sZWZ0KTsKLQlpZiAocmV0ID49IDApCisJaWYgKCFyZXQpCiAJCXJldCA9IHJlZ193cml0ZShpY2QsIE1UOU0wMDFfUk9XX1NUQVJULCByZWN0LT50b3ApOwotCWlmIChyZXQgPj0gMCkKKwlpZiAoIXJldCkKIAkJcmV0ID0gcmVnX3dyaXRlKGljZCwgTVQ5TTAwMV9XSU5ET1dfV0lEVEgsIHJlY3QtPndpZHRoIC0gMSk7Ci0JaWYgKHJldCA+PSAwKQorCWlmICghcmV0KQogCQlyZXQgPSByZWdfd3JpdGUoaWNkLCBNVDlNMDAxX1dJTkRPV19IRUlHSFQsCiAJCQkJcmVjdC0+aGVpZ2h0ICsgaWNkLT55X3NraXBfdG9wIC0gMSk7Ci0JaWYgKHJldCA+PSAwICYmIG10OW0wMDEtPmF1dG9leHBvc3VyZSkgeworCWlmICghcmV0ICYmIG10OW0wMDEtPmF1dG9leHBvc3VyZSkgewogCQlyZXQgPSByZWdfd3JpdGUoaWNkLCBNVDlNMDAxX1NIVVRURVJfV0lEVEgsCiAJCQkJcmVjdC0+aGVpZ2h0ICsgaWNkLT55X3NraXBfdG9wICsgdmJsYW5rKTsKLQkJaWYgKHJldCA+PSAwKSB7CisJCWlmICghcmV0KSB7CiAJCQljb25zdCBzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgKnFjdHJsID0KIAkJCQlzb2NfY2FtZXJhX2ZpbmRfcWN0cmwoaWNkLT5vcHMsCiAJCQkJCQkgICAgICBWNEwyX0NJRF9FWFBPU1VSRSk7CkBAIC0yOTUsNyArMzIyLDcgQEAKIAkJfQogCX0KIAotCXJldHVybiByZXQgPCAwID8gcmV0IDogMDsKKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgaW50IG10OW0wMDFfdHJ5X2ZtdF9jYXAoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL210OW0xMTEuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vbXQ5bTExMS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRhMGIyZDUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL210OW0xMTEuYwpAQCAtMCwwICsxLDk3MyBAQAorLyoKKyAqIERyaXZlciBmb3IgTVQ5TTExMSBDTU9TIEltYWdlIFNlbnNvciBmcm9tIE1pY3JvbgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOCwgUm9iZXJ0IEphcnptaWsgPHJvYmVydC5qYXJ6bWlrQGZyZWUuZnI+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Mi5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxsaW51eC9sb2cyLmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisKKyNpbmNsdWRlIDxtZWRpYS92NGwyLWNvbW1vbi5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItY2hpcC1pZGVudC5oPgorI2luY2x1ZGUgPG1lZGlhL3NvY19jYW1lcmEuaD4KKworLyoKKyAqIG10OW0xMTEgaTJjIGFkZHJlc3MgaXMgMHg1ZCBvciAweDQ4IChkZXBlbmRpbmcgb24gU0FkZHIgcGluKQorICogVGhlIHBsYXRmb3JtIGhhcyB0byBkZWZpbmUgaTJjX2JvYXJkX2luZm8gYW5kIGNhbGwgaTJjX3JlZ2lzdGVyX2JvYXJkX2luZm8oKQorICovCisKKy8qIG10OW0xMTE6IFNlbnNvciByZWdpc3RlciBhZGRyZXNzZXMgKi8KKyNkZWZpbmUgTVQ5TTExMV9DSElQX1ZFUlNJT04JCTB4MDAwCisjZGVmaW5lIE1UOU0xMTFfUk9XX1NUQVJUCQkweDAwMQorI2RlZmluZSBNVDlNMTExX0NPTFVNTl9TVEFSVAkJMHgwMDIKKyNkZWZpbmUgTVQ5TTExMV9XSU5ET1dfSEVJR0hUCQkweDAwMworI2RlZmluZSBNVDlNMTExX1dJTkRPV19XSURUSAkJMHgwMDQKKyNkZWZpbmUgTVQ5TTExMV9IT1JJWk9OVEFMX0JMQU5LSU5HX0IJMHgwMDUKKyNkZWZpbmUgTVQ5TTExMV9WRVJUSUNBTF9CTEFOS0lOR19CCTB4MDA2CisjZGVmaW5lIE1UOU0xMTFfSE9SSVpPTlRBTF9CTEFOS0lOR19BCTB4MDA3CisjZGVmaW5lIE1UOU0xMTFfVkVSVElDQUxfQkxBTktJTkdfQQkweDAwOAorI2RlZmluZSBNVDlNMTExX1NIVVRURVJfV0lEVEgJCTB4MDA5CisjZGVmaW5lIE1UOU0xMTFfUk9XX1NQRUVECQkweDAwYQorI2RlZmluZSBNVDlNMTExX0VYVFJBX0RFTEFZCQkweDAwYgorI2RlZmluZSBNVDlNMTExX1NIVVRURVJfREVMQVkJCTB4MDBjCisjZGVmaW5lIE1UOU0xMTFfUkVTRVQJCQkweDAwZAorI2RlZmluZSBNVDlNMTExX1JFQURfTU9ERV9CCQkweDAyMAorI2RlZmluZSBNVDlNMTExX1JFQURfTU9ERV9BCQkweDAyMQorI2RlZmluZSBNVDlNMTExX0ZMQVNIX0NPTlRST0wJCTB4MDIzCisjZGVmaW5lIE1UOU0xMTFfR1JFRU4xX0dBSU4JCTB4MDJiCisjZGVmaW5lIE1UOU0xMTFfQkxVRV9HQUlOCQkweDAyYworI2RlZmluZSBNVDlNMTExX1JFRF9HQUlOCQkweDAyZAorI2RlZmluZSBNVDlNMTExX0dSRUVOMl9HQUlOCQkweDAyZQorI2RlZmluZSBNVDlNMTExX0dMT0JBTF9HQUlOCQkweDAyZgorI2RlZmluZSBNVDlNMTExX0NPTlRFWFRfQ09OVFJPTAkJMHgwYzgKKyNkZWZpbmUgTVQ5TTExMV9QQUdFX01BUAkJMHgwZjAKKyNkZWZpbmUgTVQ5TTExMV9CWVRFX1dJU0VfQUREUgkJMHgwZjEKKworI2RlZmluZSBNVDlNMTExX1JFU0VUX1NZTkNfQ0hBTkdFUwkoMSA8PCAxNSkKKyNkZWZpbmUgTVQ5TTExMV9SRVNFVF9SRVNUQVJUX0JBRF9GUkFNRQkoMSA8PCA5KQorI2RlZmluZSBNVDlNMTExX1JFU0VUX1NIT1dfQkFEX0ZSQU1FUwkoMSA8PCA4KQorI2RlZmluZSBNVDlNMTExX1JFU0VUX1JFU0VUX1NPQwkJKDEgPDwgNSkKKyNkZWZpbmUgTVQ5TTExMV9SRVNFVF9PVVRQVVRfRElTQUJMRQkoMSA8PCA0KQorI2RlZmluZSBNVDlNMTExX1JFU0VUX0NISVBfRU5BQkxFCSgxIDw8IDMpCisjZGVmaW5lIE1UOU0xMTFfUkVTRVRfQU5BTE9HX1NUQU5EQlkJKDEgPDwgMikKKyNkZWZpbmUgTVQ5TTExMV9SRVNFVF9SRVNUQVJUX0ZSQU1FCSgxIDw8IDEpCisjZGVmaW5lIE1UOU0xMTFfUkVTRVRfUkVTRVRfTU9ERQkoMSA8PCAwKQorCisjZGVmaW5lIE1UOU0xMTFfUk1CX01JUlJPUl9DT0xTCQkoMSA8PCAxKQorI2RlZmluZSBNVDlNMTExX1JNQl9NSVJST1JfUk9XUwkJKDEgPDwgMCkKKyNkZWZpbmUgTVQ5TTExMV9DVFhUX0NUUkxfUkVTVEFSVAkoMSA8PCAxNSkKKyNkZWZpbmUgTVQ5TTExMV9DVFhUX0NUUkxfREVGRUNUQ09SX0IJKDEgPDwgMTIpCisjZGVmaW5lIE1UOU0xMTFfQ1RYVF9DVFJMX1JFU0laRV9CCSgxIDw8IDEwKQorI2RlZmluZSBNVDlNMTExX0NUWFRfQ1RSTF9DVFJMMl9CCSgxIDw8IDkpCisjZGVmaW5lIE1UOU0xMTFfQ1RYVF9DVFJMX0dBTU1BX0IJKDEgPDwgOCkKKyNkZWZpbmUgTVQ5TTExMV9DVFhUX0NUUkxfWEVOT05fRU4JKDEgPDwgNykKKyNkZWZpbmUgTVQ5TTExMV9DVFhUX0NUUkxfUkVBRF9NT0RFX0IJKDEgPDwgMykKKyNkZWZpbmUgTVQ5TTExMV9DVFhUX0NUUkxfTEVEX0ZMQVNIX0VOCSgxIDw8IDIpCisjZGVmaW5lIE1UOU0xMTFfQ1RYVF9DVFJMX1ZCTEFOS19TRUxfQgkoMSA8PCAxKQorI2RlZmluZSBNVDlNMTExX0NUWFRfQ1RSTF9IQkxBTktfU0VMX0IJKDEgPDwgMCkKKy8qCisgKiBtdDltMTExOiBDb2xvcnBpcGUgcmVnaXN0ZXIgYWRkcmVzc2VzICgweDEwMC4uMHgxZmYpCisgKi8KKyNkZWZpbmUgTVQ5TTExMV9PUEVSX01PREVfQ1RSTAkJMHgxMDYKKyNkZWZpbmUgTVQ5TTExMV9PVVRQVVRfRk9STUFUX0NUUkwJMHgxMDgKKyNkZWZpbmUgTVQ5TTExMV9SRURVQ0VSX1haT09NX0IJCTB4MWEwCisjZGVmaW5lIE1UOU0xMTFfUkVEVUNFUl9YU0laRV9CCQkweDFhMQorI2RlZmluZSBNVDlNMTExX1JFRFVDRVJfWVpPT01fQgkJMHgxYTMKKyNkZWZpbmUgTVQ5TTExMV9SRURVQ0VSX1lTSVpFX0IJCTB4MWE0CisjZGVmaW5lIE1UOU0xMTFfUkVEVUNFUl9YWk9PTV9BCQkweDFhNgorI2RlZmluZSBNVDlNMTExX1JFRFVDRVJfWFNJWkVfQQkJMHgxYTcKKyNkZWZpbmUgTVQ5TTExMV9SRURVQ0VSX1laT09NX0EJCTB4MWE5CisjZGVmaW5lIE1UOU0xMTFfUkVEVUNFUl9ZU0laRV9BCQkweDFhYQorCisjZGVmaW5lIE1UOU0xMTFfT1VUUFVUX0ZPUk1BVF9DVFJMMl9BCTB4MTNhCisjZGVmaW5lIE1UOU0xMTFfT1VUUFVUX0ZPUk1BVF9DVFJMMl9CCTB4MTliCisKKyNkZWZpbmUgTVQ5TTExMV9PUE1PREVfQVVUT0VYUE9fRU4JKDEgPDwgMTQpCisKKworI2RlZmluZSBNVDlNMTExX09VVEZNVF9QUk9DRVNTRURfQkFZRVIJKDEgPDwgMTQpCisjZGVmaW5lIE1UOU0xMTFfT1VURk1UX0JZUEFTU19JRlAJKDEgPDwgMTApCisjZGVmaW5lIE1UOU0xMTFfT1VURk1UX0lOVl9QSVhfQ0xPQ0sJKDEgPDwgOSkKKyNkZWZpbmUgTVQ5TTExMV9PVVRGTVRfUkdCCQkoMSA8PCA4KQorI2RlZmluZSBNVDlNMTExX09VVEZNVF9SR0I1NjUJCSgweDAgPDwgNikKKyNkZWZpbmUgTVQ5TTExMV9PVVRGTVRfUkdCNTU1CQkoMHgxIDw8IDYpCisjZGVmaW5lIE1UOU0xMTFfT1VURk1UX1JHQjQ0NHgJCSgweDIgPDwgNikKKyNkZWZpbmUgTVQ5TTExMV9PVVRGTVRfUkdCeDQ0NAkJKDB4MyA8PCA2KQorI2RlZmluZSBNVDlNMTExX09VVEZNVF9UU1RfUkFNUF9PRkYJKDB4MCA8PCA0KQorI2RlZmluZSBNVDlNMTExX09VVEZNVF9UU1RfUkFNUF9DT0wJKDB4MSA8PCA0KQorI2RlZmluZSBNVDlNMTExX09VVEZNVF9UU1RfUkFNUF9ST1cJKDB4MiA8PCA0KQorI2RlZmluZSBNVDlNMTExX09VVEZNVF9UU1RfUkFNUF9GUkFNRQkoMHgzIDw8IDQpCisjZGVmaW5lIE1UOU0xMTFfT1VURk1UX1NISUZUXzNfVVAJKDEgPDwgMykKKyNkZWZpbmUgTVQ5TTExMV9PVVRGTVRfQVZHX0NIUk9NQQkoMSA8PCAyKQorI2RlZmluZSBNVDlNMTExX09VVEZNVF9TV0FQX1lDYkNyX0NfWQkoMSA8PCAxKQorI2RlZmluZSBNVDlNMTExX09VVEZNVF9TV0FQX1JHQl9FVkVOCSgxIDw8IDEpCisjZGVmaW5lIE1UOU0xMTFfT1VURk1UX1NXQVBfWUNiQ3JfQ2JfQ3IJKDEgPDwgMCkKKy8qCisgKiBtdDltMTExOiBDYW1lcmEgY29udHJvbCByZWdpc3RlciBhZGRyZXNzZXMgKDB4MjAwLi4weDJmZiBub3QgaW1wbGVtZW50ZWQpCisgKi8KKworI2RlZmluZSByZWdfcmVhZChyZWcpIG10OW0xMTFfcmVnX3JlYWQoaWNkLCBNVDlNMTExXyMjcmVnKQorI2RlZmluZSByZWdfd3JpdGUocmVnLCB2YWwpIG10OW0xMTFfcmVnX3dyaXRlKGljZCwgTVQ5TTExMV8jI3JlZywgKHZhbCkpCisjZGVmaW5lIHJlZ19zZXQocmVnLCB2YWwpIG10OW0xMTFfcmVnX3NldChpY2QsIE1UOU0xMTFfIyNyZWcsICh2YWwpKQorI2RlZmluZSByZWdfY2xlYXIocmVnLCB2YWwpIG10OW0xMTFfcmVnX2NsZWFyKGljZCwgTVQ5TTExMV8jI3JlZywgKHZhbCkpCisKKyNkZWZpbmUgTVQ5TTExMV9NSU5fREFSS19ST1dTCTgKKyNkZWZpbmUgTVQ5TTExMV9NSU5fREFSS19DT0xTCTI0CisjZGVmaW5lIE1UOU0xMTFfTUFYX0hFSUdIVAkxMDI0CisjZGVmaW5lIE1UOU0xMTFfTUFYX1dJRFRICTEyODAKKworI2RlZmluZSBDT0xfRk1UKF9uYW1lLCBfZGVwdGgsIF9mb3VyY2MsIF9jb2xvcnNwYWNlKSBcCisJeyAubmFtZSA9IF9uYW1lLCAuZGVwdGggPSBfZGVwdGgsIC5mb3VyY2MgPSBfZm91cmNjLCBcCisJLmNvbG9yc3BhY2UgPSBfY29sb3JzcGFjZSB9CisjZGVmaW5lIFJHQl9GTVQoX25hbWUsIF9kZXB0aCwgX2ZvdXJjYykgXAorCUNPTF9GTVQoX25hbWUsIF9kZXB0aCwgX2ZvdXJjYywgVjRMMl9DT0xPUlNQQUNFX1NSR0IpCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc29jX2NhbWVyYV9kYXRhX2Zvcm1hdCBtdDltMTExX2NvbG91cl9mb3JtYXRzW10gPSB7CisJQ09MX0ZNVCgiWUNyWUNiIDggYml0IiwgOCwgVjRMMl9QSVhfRk1UX1lVWVYsIFY0TDJfQ09MT1JTUEFDRV9KUEVHKSwKKwlSR0JfRk1UKCJSR0IgNTY1IiwgMTYsIFY0TDJfUElYX0ZNVF9SR0I1NjUpLAorCVJHQl9GTVQoIlJHQiA1NTUiLCAxNiwgVjRMMl9QSVhfRk1UX1JHQjU1NSksCisJUkdCX0ZNVCgiQmF5ZXIgKHNSR0IpIDEwIGJpdCIsIDEwLCBWNEwyX1BJWF9GTVRfU0JHR1IxNiksCisJUkdCX0ZNVCgiQmF5ZXIgKHNSR0IpIDggYml0IiwgOCwgVjRMMl9QSVhfRk1UX1NCR0dSOCksCit9OworCitlbnVtIG10OW0xMTFfY29udGV4dCB7CisJSElHSFBPV0VSID0gMCwKKwlMT1dQT1dFUiwKK307CisKK3N0cnVjdCBtdDltMTExIHsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50OworCXN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSBpY2Q7CisJaW50IG1vZGVsOwkvKiBWNEwyX0lERU5UX01UOU0xMTEqIGNvZGVzIGZyb20gdjRsMi1jaGlwLWlkZW50LmggKi8KKwllbnVtIG10OW0xMTFfY29udGV4dCBjb250ZXh0OworCXVuc2lnbmVkIGludCBsZWZ0LCB0b3AsIHdpZHRoLCBoZWlnaHQ7CisJdTMyIHBpeGZtdDsKKwl1bnNpZ25lZCBjaGFyIGF1dG9leHBvc3VyZTsKKwl1bnNpZ25lZCBjaGFyIGRhdGF3aWR0aDsKKwl1bnNpZ25lZCBpbnQgcG93ZXJlZDoxOworCXVuc2lnbmVkIGludCBoZmxpcDoxOworCXVuc2lnbmVkIGludCB2ZmxpcDoxOworCXVuc2lnbmVkIGludCBzd2FwX3JnYl9ldmVuX29kZDoxOworCXVuc2lnbmVkIGludCBzd2FwX3JnYl9yZWRfYmx1ZToxOworCXVuc2lnbmVkIGludCBzd2FwX3l1dl95X2Nocm9tYXM6MTsKKwl1bnNpZ25lZCBpbnQgc3dhcF95dXZfY2JfY3I6MTsKK307CisKK3N0YXRpYyBpbnQgcmVnX3BhZ2VfbWFwX3NldChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBjb25zdCB1MTYgcmVnKQoreworCWludCByZXQ7CisJdTE2IHBhZ2U7CisJc3RhdGljIGludCBsYXN0cGFnZSA9IC0xOwkvKiBQYWdlTWFwIGNhY2hlIHZhbHVlICovCisKKwlwYWdlID0gKHJlZyA+PiA4KTsKKwlpZiAocGFnZSA9PSBsYXN0cGFnZSkKKwkJcmV0dXJuIDA7CisJaWYgKHBhZ2UgPiAyKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJldCA9IGkyY19zbWJ1c193cml0ZV93b3JkX2RhdGEoY2xpZW50LCBNVDlNMTExX1BBR0VfTUFQLCBzd2FiMTYocGFnZSkpOworCWlmICghcmV0KQorCQlsYXN0cGFnZSA9IHBhZ2U7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBtdDltMTExX3JlZ19yZWFkKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkLCBjb25zdCB1MTYgcmVnKQoreworCXN0cnVjdCBtdDltMTExICptdDltMTExID0gY29udGFpbmVyX29mKGljZCwgc3RydWN0IG10OW0xMTEsIGljZCk7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IG10OW0xMTEtPmNsaWVudDsKKwlpbnQgcmV0OworCisJcmV0ID0gcmVnX3BhZ2VfbWFwX3NldChjbGllbnQsIHJlZyk7CisJaWYgKCFyZXQpCisJCXJldCA9IHN3YWIxNihpMmNfc21idXNfcmVhZF93b3JkX2RhdGEoY2xpZW50LCAocmVnICYgMHhmZikpKTsKKworCWRldl9kYmcoJmljZC0+ZGV2LCAicmVhZCAgcmVnLiUwM3ggLT4gJTA0eFxuIiwgcmVnLCByZXQpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgbXQ5bTExMV9yZWdfd3JpdGUoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QsIGNvbnN0IHUxNiByZWcsCisJCQkgICAgIGNvbnN0IHUxNiBkYXRhKQoreworCXN0cnVjdCBtdDltMTExICptdDltMTExID0gY29udGFpbmVyX29mKGljZCwgc3RydWN0IG10OW0xMTEsIGljZCk7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IG10OW0xMTEtPmNsaWVudDsKKwlpbnQgcmV0OworCisJcmV0ID0gcmVnX3BhZ2VfbWFwX3NldChjbGllbnQsIHJlZyk7CisJaWYgKCFyZXQpCisJCXJldCA9IGkyY19zbWJ1c193cml0ZV93b3JkX2RhdGEobXQ5bTExMS0+Y2xpZW50LCAocmVnICYgMHhmZiksCisJCQkJCQlzd2FiMTYoZGF0YSkpOworCWRldl9kYmcoJmljZC0+ZGV2LCAid3JpdGUgcmVnLiUwM3ggPSAlMDR4IC0+ICVkXG4iLCByZWcsIGRhdGEsIHJldCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBtdDltMTExX3JlZ19zZXQoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QsIGNvbnN0IHUxNiByZWcsCisJCQkgICBjb25zdCB1MTYgZGF0YSkKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gbXQ5bTExMV9yZWdfcmVhZChpY2QsIHJlZyk7CisJaWYgKHJldCA+PSAwKQorCQlyZXQgPSBtdDltMTExX3JlZ193cml0ZShpY2QsIHJlZywgcmV0IHwgZGF0YSk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBtdDltMTExX3JlZ19jbGVhcihzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCwgY29uc3QgdTE2IHJlZywKKwkJCSAgICAgY29uc3QgdTE2IGRhdGEpCit7CisJaW50IHJldDsKKworCXJldCA9IG10OW0xMTFfcmVnX3JlYWQoaWNkLCByZWcpOworCXJldHVybiBtdDltMTExX3JlZ193cml0ZShpY2QsIHJlZywgcmV0ICYgfmRhdGEpOworfQorCitzdGF0aWMgaW50IG10OW0xMTFfc2V0X2NvbnRleHQoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QsCisJCQkgICAgICAgZW51bSBtdDltMTExX2NvbnRleHQgY3R4dCkKK3sKKwlpbnQgdmFsQiA9IE1UOU0xMTFfQ1RYVF9DVFJMX1JFU1RBUlQgfCBNVDlNMTExX0NUWFRfQ1RSTF9ERUZFQ1RDT1JfQgorCQl8IE1UOU0xMTFfQ1RYVF9DVFJMX1JFU0laRV9CIHwgTVQ5TTExMV9DVFhUX0NUUkxfQ1RSTDJfQgorCQl8IE1UOU0xMTFfQ1RYVF9DVFJMX0dBTU1BX0IgfCBNVDlNMTExX0NUWFRfQ1RSTF9SRUFEX01PREVfQgorCQl8IE1UOU0xMTFfQ1RYVF9DVFJMX1ZCTEFOS19TRUxfQgorCQl8IE1UOU0xMTFfQ1RYVF9DVFJMX0hCTEFOS19TRUxfQjsKKwlpbnQgdmFsQSA9IE1UOU0xMTFfQ1RYVF9DVFJMX1JFU1RBUlQ7CisKKwlpZiAoY3R4dCA9PSBISUdIUE9XRVIpCisJCXJldHVybiByZWdfd3JpdGUoQ09OVEVYVF9DT05UUk9MLCB2YWxCKTsKKwllbHNlCisJCXJldHVybiByZWdfd3JpdGUoQ09OVEVYVF9DT05UUk9MLCB2YWxBKTsKK30KKworc3RhdGljIGludCBtdDltMTExX3NldHVwX3JlY3Qoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QpCit7CisJc3RydWN0IG10OW0xMTEgKm10OW0xMTEgPSBjb250YWluZXJfb2YoaWNkLCBzdHJ1Y3QgbXQ5bTExMSwgaWNkKTsKKwlpbnQgcmV0LCBpc19yYXdfZm9ybWF0OworCWludCB3aWR0aCA9IG10OW0xMTEtPndpZHRoOworCWludCBoZWlnaHQgPSBtdDltMTExLT5oZWlnaHQ7CisKKwlpZiAoKG10OW0xMTEtPnBpeGZtdCA9PSBWNEwyX1BJWF9GTVRfU0JHR1I4KQorCSAgICB8fCAobXQ5bTExMS0+cGl4Zm10ID09IFY0TDJfUElYX0ZNVF9TQkdHUjE2KSkKKwkJaXNfcmF3X2Zvcm1hdCA9IDE7CisJZWxzZQorCQlpc19yYXdfZm9ybWF0ID0gMDsKKworCXJldCA9IHJlZ193cml0ZShDT0xVTU5fU1RBUlQsIG10OW0xMTEtPmxlZnQpOworCWlmICghcmV0KQorCQlyZXQgPSByZWdfd3JpdGUoUk9XX1NUQVJULCBtdDltMTExLT50b3ApOworCisJaWYgKGlzX3Jhd19mb3JtYXQpIHsKKwkJaWYgKCFyZXQpCisJCQlyZXQgPSByZWdfd3JpdGUoV0lORE9XX1dJRFRILCB3aWR0aCk7CisJCWlmICghcmV0KQorCQkJcmV0ID0gcmVnX3dyaXRlKFdJTkRPV19IRUlHSFQsIGhlaWdodCk7CisJfSBlbHNlIHsKKwkJaWYgKCFyZXQpCisJCQlyZXQgPSByZWdfd3JpdGUoUkVEVUNFUl9YWk9PTV9CLCBNVDlNMTExX01BWF9XSURUSCk7CisJCWlmICghcmV0KQorCQkJcmV0ID0gcmVnX3dyaXRlKFJFRFVDRVJfWVpPT01fQiwgTVQ5TTExMV9NQVhfSEVJR0hUKTsKKwkJaWYgKCFyZXQpCisJCQlyZXQgPSByZWdfd3JpdGUoUkVEVUNFUl9YU0laRV9CLCB3aWR0aCk7CisJCWlmICghcmV0KQorCQkJcmV0ID0gcmVnX3dyaXRlKFJFRFVDRVJfWVNJWkVfQiwgaGVpZ2h0KTsKKwkJaWYgKCFyZXQpCisJCQlyZXQgPSByZWdfd3JpdGUoUkVEVUNFUl9YWk9PTV9BLCBNVDlNMTExX01BWF9XSURUSCk7CisJCWlmICghcmV0KQorCQkJcmV0ID0gcmVnX3dyaXRlKFJFRFVDRVJfWVpPT01fQSwgTVQ5TTExMV9NQVhfSEVJR0hUKTsKKwkJaWYgKCFyZXQpCisJCQlyZXQgPSByZWdfd3JpdGUoUkVEVUNFUl9YU0laRV9BLCB3aWR0aCk7CisJCWlmICghcmV0KQorCQkJcmV0ID0gcmVnX3dyaXRlKFJFRFVDRVJfWVNJWkVfQSwgaGVpZ2h0KTsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IG10OW0xMTFfc2V0dXBfcGl4Zm10KHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkLCB1MTYgb3V0Zm10KQoreworCWludCByZXQ7CisKKwlyZXQgPSByZWdfd3JpdGUoT1VUUFVUX0ZPUk1BVF9DVFJMMl9BLCBvdXRmbXQpOworCWlmICghcmV0KQorCQlyZXQgPSByZWdfd3JpdGUoT1VUUFVUX0ZPUk1BVF9DVFJMMl9CLCBvdXRmbXQpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgbXQ5bTExMV9zZXRmbXRfYmF5ZXI4KHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkKQoreworCXJldHVybiBtdDltMTExX3NldHVwX3BpeGZtdChpY2QsIE1UOU0xMTFfT1VURk1UX1BST0NFU1NFRF9CQVlFUik7Cit9CisKK3N0YXRpYyBpbnQgbXQ5bTExMV9zZXRmbXRfYmF5ZXIxMChzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCkKK3sKKwlyZXR1cm4gbXQ5bTExMV9zZXR1cF9waXhmbXQoaWNkLCBNVDlNMTExX09VVEZNVF9CWVBBU1NfSUZQKTsKK30KKworc3RhdGljIGludCBtdDltMTExX3NldGZtdF9yZ2I1NjUoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QpCit7CisJc3RydWN0IG10OW0xMTEgKm10OW0xMTEgPSBjb250YWluZXJfb2YoaWNkLCBzdHJ1Y3QgbXQ5bTExMSwgaWNkKTsKKwlpbnQgdmFsID0gMDsKKworCWlmIChtdDltMTExLT5zd2FwX3JnYl9yZWRfYmx1ZSkKKwkJdmFsIHw9IE1UOU0xMTFfT1VURk1UX1NXQVBfWUNiQ3JfQ2JfQ3I7CisJaWYgKG10OW0xMTEtPnN3YXBfcmdiX2V2ZW5fb2RkKQorCQl2YWwgfD0gTVQ5TTExMV9PVVRGTVRfU1dBUF9SR0JfRVZFTjsKKwl2YWwgfD0gTVQ5TTExMV9PVVRGTVRfUkdCIHwgTVQ5TTExMV9PVVRGTVRfUkdCNTY1OworCisJcmV0dXJuIG10OW0xMTFfc2V0dXBfcGl4Zm10KGljZCwgdmFsKTsKK30KKworc3RhdGljIGludCBtdDltMTExX3NldGZtdF9yZ2I1NTUoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QpCit7CisJc3RydWN0IG10OW0xMTEgKm10OW0xMTEgPSBjb250YWluZXJfb2YoaWNkLCBzdHJ1Y3QgbXQ5bTExMSwgaWNkKTsKKwlpbnQgdmFsID0gMDsKKworCWlmIChtdDltMTExLT5zd2FwX3JnYl9yZWRfYmx1ZSkKKwkJdmFsIHw9IE1UOU0xMTFfT1VURk1UX1NXQVBfWUNiQ3JfQ2JfQ3I7CisJaWYgKG10OW0xMTEtPnN3YXBfcmdiX2V2ZW5fb2RkKQorCQl2YWwgfD0gTVQ5TTExMV9PVVRGTVRfU1dBUF9SR0JfRVZFTjsKKwl2YWwgfD0gTVQ5TTExMV9PVVRGTVRfUkdCIHwgTVQ5TTExMV9PVVRGTVRfUkdCNTU1OworCisJcmV0dXJuIG10OW0xMTFfc2V0dXBfcGl4Zm10KGljZCwgdmFsKTsKK30KKworc3RhdGljIGludCBtdDltMTExX3NldGZtdF95dXYoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QpCit7CisJc3RydWN0IG10OW0xMTEgKm10OW0xMTEgPSBjb250YWluZXJfb2YoaWNkLCBzdHJ1Y3QgbXQ5bTExMSwgaWNkKTsKKwlpbnQgdmFsID0gMDsKKworCWlmIChtdDltMTExLT5zd2FwX3l1dl9jYl9jcikKKwkJdmFsIHw9IE1UOU0xMTFfT1VURk1UX1NXQVBfWUNiQ3JfQ2JfQ3I7CisJaWYgKG10OW0xMTEtPnN3YXBfeXV2X3lfY2hyb21hcykKKwkJdmFsIHw9IE1UOU0xMTFfT1VURk1UX1NXQVBfWUNiQ3JfQ19ZOworCisJcmV0dXJuIG10OW0xMTFfc2V0dXBfcGl4Zm10KGljZCwgdmFsKTsKK30KKworc3RhdGljIGludCBtdDltMTExX2VuYWJsZShzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCkKK3sKKwlzdHJ1Y3QgbXQ5bTExMSAqbXQ5bTExMSA9IGNvbnRhaW5lcl9vZihpY2QsIHN0cnVjdCBtdDltMTExLCBpY2QpOworCXN0cnVjdCBzb2NfY2FtZXJhX2xpbmsgKmljbCA9IG10OW0xMTEtPmNsaWVudC0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJaW50IHJldDsKKworCWlmIChpY2wtPnBvd2VyKSB7CisJCXJldCA9IGljbC0+cG93ZXIoJm10OW0xMTEtPmNsaWVudC0+ZGV2LCAxKTsKKwkJaWYgKHJldCA8IDApIHsKKwkJCWRldl9lcnIoaWNkLT52ZGV2LT5wYXJlbnQsCisJCQkJIlBsYXRmb3JtIGZhaWxlZCB0byBwb3dlci1vbiB0aGUgY2FtZXJhLlxuIik7CisJCQlyZXR1cm4gcmV0OworCQl9CisJfQorCisJcmV0ID0gcmVnX3NldChSRVNFVCwgTVQ5TTExMV9SRVNFVF9DSElQX0VOQUJMRSk7CisJaWYgKCFyZXQpCisJCW10OW0xMTEtPnBvd2VyZWQgPSAxOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgbXQ5bTExMV9kaXNhYmxlKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkKQoreworCXN0cnVjdCBtdDltMTExICptdDltMTExID0gY29udGFpbmVyX29mKGljZCwgc3RydWN0IG10OW0xMTEsIGljZCk7CisJc3RydWN0IHNvY19jYW1lcmFfbGluayAqaWNsID0gbXQ5bTExMS0+Y2xpZW50LT5kZXYucGxhdGZvcm1fZGF0YTsKKwlpbnQgcmV0OworCisJcmV0ID0gcmVnX2NsZWFyKFJFU0VULCBNVDlNMTExX1JFU0VUX0NISVBfRU5BQkxFKTsKKwlpZiAoIXJldCkKKwkJbXQ5bTExMS0+cG93ZXJlZCA9IDA7CisKKwlpZiAoaWNsLT5wb3dlcikKKwkJaWNsLT5wb3dlcigmbXQ5bTExMS0+Y2xpZW50LT5kZXYsIDApOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBtdDltMTExX3Jlc2V0KHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkKQoreworCWludCByZXQ7CisKKwlyZXQgPSByZWdfc2V0KFJFU0VULCBNVDlNMTExX1JFU0VUX1JFU0VUX01PREUpOworCWlmICghcmV0KQorCQlyZXQgPSByZWdfc2V0KFJFU0VULCBNVDlNMTExX1JFU0VUX1JFU0VUX1NPQyk7CisJaWYgKCFyZXQpCisJCXJldCA9IHJlZ19jbGVhcihSRVNFVCwgTVQ5TTExMV9SRVNFVF9SRVNFVF9NT0RFCisJCQkJfCBNVDlNMTExX1JFU0VUX1JFU0VUX1NPQyk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBtdDltMTExX3N0YXJ0X2NhcHR1cmUoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbXQ5bTExMV9zdG9wX2NhcHR1cmUoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIG10OW0xMTFfcXVlcnlfYnVzX3BhcmFtKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkKQoreworCXJldHVybiBTT0NBTV9NQVNURVIgfCBTT0NBTV9QQ0xLX1NBTVBMRV9SSVNJTkcgfAorCQlTT0NBTV9IU1lOQ19BQ1RJVkVfSElHSCB8IFNPQ0FNX1ZTWU5DX0FDVElWRV9ISUdIIHwKKwkJU09DQU1fREFUQVdJRFRIXzg7Cit9CisKK3N0YXRpYyBpbnQgbXQ5bTExMV9zZXRfYnVzX3BhcmFtKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkLCB1bnNpZ25lZCBsb25nIGYpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbXQ5bTExMV9zZXRfcGl4Zm10KHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkLCB1MzIgcGl4Zm10KQoreworCXN0cnVjdCBtdDltMTExICptdDltMTExID0gY29udGFpbmVyX29mKGljZCwgc3RydWN0IG10OW0xMTEsIGljZCk7CisJaW50IHJldDsKKworCXN3aXRjaCAocGl4Zm10KSB7CisJY2FzZSBWNEwyX1BJWF9GTVRfU0JHR1I4OgorCQlyZXQgPSBtdDltMTExX3NldGZtdF9iYXllcjgoaWNkKTsKKwkJYnJlYWs7CisJY2FzZSBWNEwyX1BJWF9GTVRfU0JHR1IxNjoKKwkJcmV0ID0gbXQ5bTExMV9zZXRmbXRfYmF5ZXIxMChpY2QpOworCQlicmVhazsKKwljYXNlIFY0TDJfUElYX0ZNVF9SR0I1NTU6CisJCXJldCA9IG10OW0xMTFfc2V0Zm10X3JnYjU1NShpY2QpOworCQlicmVhazsKKwljYXNlIFY0TDJfUElYX0ZNVF9SR0I1NjU6CisJCXJldCA9IG10OW0xMTFfc2V0Zm10X3JnYjU2NShpY2QpOworCQlicmVhazsKKwljYXNlIFY0TDJfUElYX0ZNVF9ZVVlWOgorCQlyZXQgPSBtdDltMTExX3NldGZtdF95dXYoaWNkKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZGV2X2VycigmaWNkLT5kZXYsICJQaXhlbCBmb3JtYXQgbm90IGhhbmRsZWQgOiAleFxuIiwgcGl4Zm10KTsKKwkJcmV0ID0gLUVJTlZBTDsKKwl9CisKKwlpZiAoIXJldCkKKwkJbXQ5bTExMS0+cGl4Zm10ID0gcGl4Zm10OworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBtdDltMTExX3NldF9mbXRfY2FwKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkLAorCQkJICAgICAgIF9fdTMyIHBpeGZtdCwgc3RydWN0IHY0bDJfcmVjdCAqcmVjdCkKK3sKKwlzdHJ1Y3QgbXQ5bTExMSAqbXQ5bTExMSA9IGNvbnRhaW5lcl9vZihpY2QsIHN0cnVjdCBtdDltMTExLCBpY2QpOworCWludCByZXQ7CisKKwltdDltMTExLT5sZWZ0ID0gcmVjdC0+bGVmdDsKKwltdDltMTExLT50b3AgPSByZWN0LT50b3A7CisJbXQ5bTExMS0+d2lkdGggPSByZWN0LT53aWR0aDsKKwltdDltMTExLT5oZWlnaHQgPSByZWN0LT5oZWlnaHQ7CisKKwlkZXZfZGJnKCZpY2QtPmRldiwgIiVzIGZtdD0leCBsZWZ0PSVkLCB0b3A9JWQsIHdpZHRoPSVkLCBoZWlnaHQ9JWRcbiIsCisJCV9fZnVuY19fLCBwaXhmbXQsIG10OW0xMTEtPmxlZnQsIG10OW0xMTEtPnRvcCwgbXQ5bTExMS0+d2lkdGgsCisJCW10OW0xMTEtPmhlaWdodCk7CisKKwlyZXQgPSBtdDltMTExX3NldHVwX3JlY3QoaWNkKTsKKwlpZiAoIXJldCkKKwkJcmV0ID0gbXQ5bTExMV9zZXRfcGl4Zm10KGljZCwgcGl4Zm10KTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IG10OW0xMTFfdHJ5X2ZtdF9jYXAoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QsCisJCQkgICAgICAgc3RydWN0IHY0bDJfZm9ybWF0ICpmKQoreworCWlmIChmLT5mbXQucGl4LmhlaWdodCA+IE1UOU0xMTFfTUFYX0hFSUdIVCkKKwkJZi0+Zm10LnBpeC5oZWlnaHQgPSBNVDlNMTExX01BWF9IRUlHSFQ7CisJaWYgKGYtPmZtdC5waXgud2lkdGggPiBNVDlNMTExX01BWF9XSURUSCkKKwkJZi0+Zm10LnBpeC53aWR0aCA9IE1UOU0xMTFfTUFYX1dJRFRIOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbXQ5bTExMV9nZXRfY2hpcF9pZChzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCwKKwkJCSAgICAgICBzdHJ1Y3QgdjRsMl9jaGlwX2lkZW50ICppZCkKK3sKKwlzdHJ1Y3QgbXQ5bTExMSAqbXQ5bTExMSA9IGNvbnRhaW5lcl9vZihpY2QsIHN0cnVjdCBtdDltMTExLCBpY2QpOworCisJaWYgKGlkLT5tYXRjaF90eXBlICE9IFY0TDJfQ0hJUF9NQVRDSF9JMkNfQUREUikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoaWQtPm1hdGNoX2NoaXAgIT0gbXQ5bTExMS0+Y2xpZW50LT5hZGRyKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWlkLT5pZGVudAk9IG10OW0xMTEtPm1vZGVsOworCWlkLT5yZXZpc2lvbgk9IDA7CisKKwlyZXR1cm4gMDsKK30KKworI2lmZGVmIENPTkZJR19WSURFT19BRFZfREVCVUcKK3N0YXRpYyBpbnQgbXQ5bTExMV9nZXRfcmVnaXN0ZXIoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QsCisJCQkJc3RydWN0IHY0bDJfcmVnaXN0ZXIgKnJlZykKK3sKKwlpbnQgdmFsOworCisJc3RydWN0IG10OW0xMTEgKm10OW0xMTEgPSBjb250YWluZXJfb2YoaWNkLCBzdHJ1Y3QgbXQ5bTExMSwgaWNkKTsKKworCWlmIChyZWctPm1hdGNoX3R5cGUgIT0gVjRMMl9DSElQX01BVENIX0kyQ19BRERSIHx8IHJlZy0+cmVnID4gMHgyZmYpCisJCXJldHVybiAtRUlOVkFMOworCWlmIChyZWctPm1hdGNoX2NoaXAgIT0gbXQ5bTExMS0+Y2xpZW50LT5hZGRyKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCXZhbCA9IG10OW0xMTFfcmVnX3JlYWQoaWNkLCByZWctPnJlZyk7CisJcmVnLT52YWwgPSAodTY0KXZhbDsKKworCWlmIChyZWctPnZhbCA+IDB4ZmZmZikKKwkJcmV0dXJuIC1FSU87CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtdDltMTExX3NldF9yZWdpc3RlcihzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCwKKwkJCQlzdHJ1Y3QgdjRsMl9yZWdpc3RlciAqcmVnKQoreworCXN0cnVjdCBtdDltMTExICptdDltMTExID0gY29udGFpbmVyX29mKGljZCwgc3RydWN0IG10OW0xMTEsIGljZCk7CisKKwlpZiAocmVnLT5tYXRjaF90eXBlICE9IFY0TDJfQ0hJUF9NQVRDSF9JMkNfQUREUiB8fCByZWctPnJlZyA+IDB4MmZmKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChyZWctPm1hdGNoX2NoaXAgIT0gbXQ5bTExMS0+Y2xpZW50LT5hZGRyKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWlmIChtdDltMTExX3JlZ193cml0ZShpY2QsIHJlZy0+cmVnLCByZWctPnZhbCkgPCAwKQorCQlyZXR1cm4gLUVJTzsKKworCXJldHVybiAwOworfQorI2VuZGlmCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgbXQ5bTExMV9jb250cm9sc1tdID0geworCXsKKwkJLmlkCQk9IFY0TDJfQ0lEX1ZGTElQLAorCQkudHlwZQkJPSBWNEwyX0NUUkxfVFlQRV9CT09MRUFOLAorCQkubmFtZQkJPSAiRmxpcCBWZXJ0aWNhbHkiLAorCQkubWluaW11bQk9IDAsCisJCS5tYXhpbXVtCT0gMSwKKwkJLnN0ZXAJCT0gMSwKKwkJLmRlZmF1bHRfdmFsdWUJPSAwLAorCX0sIHsKKwkJLmlkCQk9IFY0TDJfQ0lEX0hGTElQLAorCQkudHlwZQkJPSBWNEwyX0NUUkxfVFlQRV9CT09MRUFOLAorCQkubmFtZQkJPSAiRmxpcCBIb3Jpem9udGFseSIsCisJCS5taW5pbXVtCT0gMCwKKwkJLm1heGltdW0JPSAxLAorCQkuc3RlcAkJPSAxLAorCQkuZGVmYXVsdF92YWx1ZQk9IDAsCisJfSwgewkvKiBnYWluID0gMS8zMip2YWwgKD0+Z2Fpbj0xIGlmIHZhbD09MzIpICovCisJCS5pZAkJPSBWNEwyX0NJRF9HQUlOLAorCQkudHlwZQkJPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAorCQkubmFtZQkJPSAiR2FpbiIsCisJCS5taW5pbXVtCT0gMCwKKwkJLm1heGltdW0JPSA2MyAqIDIgKiAyLAorCQkuc3RlcAkJPSAxLAorCQkuZGVmYXVsdF92YWx1ZQk9IDMyLAorCQkuZmxhZ3MJCT0gVjRMMl9DVFJMX0ZMQUdfU0xJREVSLAorCX0sIHsKKwkJLmlkCQk9IFY0TDJfQ0lEX0VYUE9TVVJFX0FVVE8sCisJCS50eXBlCQk9IFY0TDJfQ1RSTF9UWVBFX0JPT0xFQU4sCisJCS5uYW1lCQk9ICJBdXRvIEV4cG9zdXJlIiwKKwkJLm1pbmltdW0JPSAwLAorCQkubWF4aW11bQk9IDEsCisJCS5zdGVwCQk9IDEsCisJCS5kZWZhdWx0X3ZhbHVlCT0gMSwKKwl9Cit9OworCitzdGF0aWMgaW50IG10OW0xMTFfdmlkZW9fcHJvYmUoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICopOworc3RhdGljIHZvaWQgbXQ5bTExMV92aWRlb19yZW1vdmUoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICopOworc3RhdGljIGludCBtdDltMTExX2dldF9jb250cm9sKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqLAorCQkJICAgICAgIHN0cnVjdCB2NGwyX2NvbnRyb2wgKik7CitzdGF0aWMgaW50IG10OW0xMTFfc2V0X2NvbnRyb2woc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICosCisJCQkgICAgICAgc3RydWN0IHY0bDJfY29udHJvbCAqKTsKK3N0YXRpYyBpbnQgbXQ5bTExMV9yZXN1bWUoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QpOworc3RhdGljIGludCBtdDltMTExX2luaXQoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QpOworc3RhdGljIGludCBtdDltMTExX3JlbGVhc2Uoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QpOworCitzdGF0aWMgc3RydWN0IHNvY19jYW1lcmFfb3BzIG10OW0xMTFfb3BzID0geworCS5vd25lcgkJCT0gVEhJU19NT0RVTEUsCisJLnByb2JlCQkJPSBtdDltMTExX3ZpZGVvX3Byb2JlLAorCS5yZW1vdmUJCQk9IG10OW0xMTFfdmlkZW9fcmVtb3ZlLAorCS5pbml0CQkJPSBtdDltMTExX2luaXQsCisJLnJlc3VtZQkJCT0gbXQ5bTExMV9yZXN1bWUsCisJLnJlbGVhc2UJCT0gbXQ5bTExMV9yZWxlYXNlLAorCS5zdGFydF9jYXB0dXJlCQk9IG10OW0xMTFfc3RhcnRfY2FwdHVyZSwKKwkuc3RvcF9jYXB0dXJlCQk9IG10OW0xMTFfc3RvcF9jYXB0dXJlLAorCS5zZXRfZm10X2NhcAkJPSBtdDltMTExX3NldF9mbXRfY2FwLAorCS50cnlfZm10X2NhcAkJPSBtdDltMTExX3RyeV9mbXRfY2FwLAorCS5xdWVyeV9idXNfcGFyYW0JPSBtdDltMTExX3F1ZXJ5X2J1c19wYXJhbSwKKwkuc2V0X2J1c19wYXJhbQkJPSBtdDltMTExX3NldF9idXNfcGFyYW0sCisJLmNvbnRyb2xzCQk9IG10OW0xMTFfY29udHJvbHMsCisJLm51bV9jb250cm9scwkJPSBBUlJBWV9TSVpFKG10OW0xMTFfY29udHJvbHMpLAorCS5nZXRfY29udHJvbAkJPSBtdDltMTExX2dldF9jb250cm9sLAorCS5zZXRfY29udHJvbAkJPSBtdDltMTExX3NldF9jb250cm9sLAorCS5nZXRfY2hpcF9pZAkJPSBtdDltMTExX2dldF9jaGlwX2lkLAorI2lmZGVmIENPTkZJR19WSURFT19BRFZfREVCVUcKKwkuZ2V0X3JlZ2lzdGVyCQk9IG10OW0xMTFfZ2V0X3JlZ2lzdGVyLAorCS5zZXRfcmVnaXN0ZXIJCT0gbXQ5bTExMV9zZXRfcmVnaXN0ZXIsCisjZW5kaWYKK307CisKK3N0YXRpYyBpbnQgbXQ5bTExMV9zZXRfZmxpcChzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCwgaW50IGZsaXAsIGludCBtYXNrKQoreworCXN0cnVjdCBtdDltMTExICptdDltMTExID0gY29udGFpbmVyX29mKGljZCwgc3RydWN0IG10OW0xMTEsIGljZCk7CisJaW50IHJldDsKKworCWlmIChtdDltMTExLT5jb250ZXh0ID09IEhJR0hQT1dFUikgeworCQlpZiAoZmxpcCkKKwkJCXJldCA9IHJlZ19zZXQoUkVBRF9NT0RFX0IsIG1hc2spOworCQllbHNlCisJCQlyZXQgPSByZWdfY2xlYXIoUkVBRF9NT0RFX0IsIG1hc2spOworCX0gZWxzZSB7CisJCWlmIChmbGlwKQorCQkJcmV0ID0gcmVnX3NldChSRUFEX01PREVfQSwgbWFzayk7CisJCWVsc2UKKwkJCXJldCA9IHJlZ19jbGVhcihSRUFEX01PREVfQSwgbWFzayk7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBtdDltMTExX2dldF9nbG9iYWxfZ2FpbihzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCkKK3sKKwl1bnNpZ25lZCBpbnQgZGF0YSwgZ2FpbjsKKworCWRhdGEgPSByZWdfcmVhZChHTE9CQUxfR0FJTik7CisJaWYgKGRhdGEgPj0gMCkKKwkJZ2FpbiA9ICgoZGF0YSAmICgxIDw8IDEwKSkgKiAyKQorCQkJfCAoKGRhdGEgJiAoMSA8PCA5KSkgKiAyKQorCQkJfCAoZGF0YSAmIDB4MmYpOworCWVsc2UKKwkJZ2FpbiA9IGRhdGE7CisKKwlyZXR1cm4gZ2FpbjsKK30KK3N0YXRpYyBpbnQgbXQ5bTExMV9zZXRfZ2xvYmFsX2dhaW4oc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QsIGludCBnYWluKQoreworCXUxNiB2YWw7CisKKwlpZiAoZ2FpbiA+IDYzICogMiAqIDIpCisJCXJldHVybiAtRUlOVkFMOworCisJaWNkLT5nYWluID0gZ2FpbjsKKwlpZiAoKGdhaW4gPj0gNjQgKiAyKSAmJiAoZ2FpbiA8IDYzICogMiAqIDIpKQorCQl2YWwgPSAoMSA8PCAxMCkgfCAoMSA8PCA5KSB8IChnYWluIC8gNCk7CisJZWxzZSBpZiAoKGdhaW4gPj0gNjQpICYmIChnYWluIDwgNjQgKiAyKSkKKwkJdmFsID0gKDEgPDwgOSkgfCAoZ2FpbiAvIDIpOworCWVsc2UKKwkJdmFsID0gZ2FpbjsKKworCXJldHVybiByZWdfd3JpdGUoR0xPQkFMX0dBSU4sIHZhbCk7Cit9CisKK3N0YXRpYyBpbnQgbXQ5bTExMV9zZXRfYXV0b2V4cG9zdXJlKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkLCBpbnQgb24pCit7CisJc3RydWN0IG10OW0xMTEgKm10OW0xMTEgPSBjb250YWluZXJfb2YoaWNkLCBzdHJ1Y3QgbXQ5bTExMSwgaWNkKTsKKwlpbnQgcmV0OworCisJaWYgKG9uKQorCQlyZXQgPSByZWdfc2V0KE9QRVJfTU9ERV9DVFJMLCBNVDlNMTExX09QTU9ERV9BVVRPRVhQT19FTik7CisJZWxzZQorCQlyZXQgPSByZWdfY2xlYXIoT1BFUl9NT0RFX0NUUkwsIE1UOU0xMTFfT1BNT0RFX0FVVE9FWFBPX0VOKTsKKworCWlmICghcmV0KQorCQltdDltMTExLT5hdXRvZXhwb3N1cmUgPSBvbjsKKworCXJldHVybiByZXQ7Cit9CitzdGF0aWMgaW50IG10OW0xMTFfZ2V0X2NvbnRyb2woc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QsCisJCQkgICAgICAgc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCkKK3sKKwlzdHJ1Y3QgbXQ5bTExMSAqbXQ5bTExMSA9IGNvbnRhaW5lcl9vZihpY2QsIHN0cnVjdCBtdDltMTExLCBpY2QpOworCWludCBkYXRhOworCisJc3dpdGNoIChjdHJsLT5pZCkgeworCWNhc2UgVjRMMl9DSURfVkZMSVA6CisJCWlmIChtdDltMTExLT5jb250ZXh0ID09IEhJR0hQT1dFUikKKwkJCWRhdGEgPSByZWdfcmVhZChSRUFEX01PREVfQik7CisJCWVsc2UKKwkJCWRhdGEgPSByZWdfcmVhZChSRUFEX01PREVfQSk7CisKKwkJaWYgKGRhdGEgPCAwKQorCQkJcmV0dXJuIC1FSU87CisJCWN0cmwtPnZhbHVlID0gISEoZGF0YSAmIE1UOU0xMTFfUk1CX01JUlJPUl9ST1dTKTsKKwkJYnJlYWs7CisJY2FzZSBWNEwyX0NJRF9IRkxJUDoKKwkJaWYgKG10OW0xMTEtPmNvbnRleHQgPT0gSElHSFBPV0VSKQorCQkJZGF0YSA9IHJlZ19yZWFkKFJFQURfTU9ERV9CKTsKKwkJZWxzZQorCQkJZGF0YSA9IHJlZ19yZWFkKFJFQURfTU9ERV9BKTsKKworCQlpZiAoZGF0YSA8IDApCisJCQlyZXR1cm4gLUVJTzsKKwkJY3RybC0+dmFsdWUgPSAhIShkYXRhICYgTVQ5TTExMV9STUJfTUlSUk9SX0NPTFMpOworCQlicmVhazsKKwljYXNlIFY0TDJfQ0lEX0dBSU46CisJCWRhdGEgPSBtdDltMTExX2dldF9nbG9iYWxfZ2FpbihpY2QpOworCQlpZiAoZGF0YSA8IDApCisJCQlyZXR1cm4gZGF0YTsKKwkJY3RybC0+dmFsdWUgPSBkYXRhOworCQlicmVhazsKKwljYXNlIFY0TDJfQ0lEX0VYUE9TVVJFX0FVVE86CisJCWN0cmwtPnZhbHVlID0gbXQ5bTExMS0+YXV0b2V4cG9zdXJlOworCQlicmVhazsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbXQ5bTExMV9zZXRfY29udHJvbChzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCwKKwkJCSAgICAgICBzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsKQoreworCXN0cnVjdCBtdDltMTExICptdDltMTExID0gY29udGFpbmVyX29mKGljZCwgc3RydWN0IG10OW0xMTEsIGljZCk7CisJY29uc3Qgc3RydWN0IHY0bDJfcXVlcnljdHJsICpxY3RybDsKKwlpbnQgcmV0OworCisJcWN0cmwgPSBzb2NfY2FtZXJhX2ZpbmRfcWN0cmwoJm10OW0xMTFfb3BzLCBjdHJsLT5pZCk7CisKKwlpZiAoIXFjdHJsKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXN3aXRjaCAoY3RybC0+aWQpIHsKKwljYXNlIFY0TDJfQ0lEX1ZGTElQOgorCQltdDltMTExLT52ZmxpcCA9IGN0cmwtPnZhbHVlOworCQlyZXQgPSBtdDltMTExX3NldF9mbGlwKGljZCwgY3RybC0+dmFsdWUsCisJCQkJCU1UOU0xMTFfUk1CX01JUlJPUl9ST1dTKTsKKwkJYnJlYWs7CisJY2FzZSBWNEwyX0NJRF9IRkxJUDoKKwkJbXQ5bTExMS0+aGZsaXAgPSBjdHJsLT52YWx1ZTsKKwkJcmV0ID0gbXQ5bTExMV9zZXRfZmxpcChpY2QsIGN0cmwtPnZhbHVlLAorCQkJCQlNVDlNMTExX1JNQl9NSVJST1JfQ09MUyk7CisJCWJyZWFrOworCWNhc2UgVjRMMl9DSURfR0FJTjoKKwkJcmV0ID0gbXQ5bTExMV9zZXRfZ2xvYmFsX2dhaW4oaWNkLCBjdHJsLT52YWx1ZSk7CisJCWJyZWFrOworCWNhc2UgVjRMMl9DSURfRVhQT1NVUkVfQVVUTzoKKwkJcmV0ID0gIG10OW0xMTFfc2V0X2F1dG9leHBvc3VyZShpY2QsIGN0cmwtPnZhbHVlKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0ID0gLUVJTlZBTDsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IG10OW0xMTFfcmVzdG9yZV9zdGF0ZShzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCkKK3sKKwlzdHJ1Y3QgbXQ5bTExMSAqbXQ5bTExMSA9IGNvbnRhaW5lcl9vZihpY2QsIHN0cnVjdCBtdDltMTExLCBpY2QpOworCisJbXQ5bTExMV9zZXRfY29udGV4dChpY2QsIG10OW0xMTEtPmNvbnRleHQpOworCW10OW0xMTFfc2V0X3BpeGZtdChpY2QsIG10OW0xMTEtPnBpeGZtdCk7CisJbXQ5bTExMV9zZXR1cF9yZWN0KGljZCk7CisJbXQ5bTExMV9zZXRfZmxpcChpY2QsIG10OW0xMTEtPmhmbGlwLCBNVDlNMTExX1JNQl9NSVJST1JfQ09MUyk7CisJbXQ5bTExMV9zZXRfZmxpcChpY2QsIG10OW0xMTEtPnZmbGlwLCBNVDlNMTExX1JNQl9NSVJST1JfUk9XUyk7CisJbXQ5bTExMV9zZXRfZ2xvYmFsX2dhaW4oaWNkLCBpY2QtPmdhaW4pOworCW10OW0xMTFfc2V0X2F1dG9leHBvc3VyZShpY2QsIG10OW0xMTEtPmF1dG9leHBvc3VyZSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbXQ5bTExMV9yZXN1bWUoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QpCit7CisJc3RydWN0IG10OW0xMTEgKm10OW0xMTEgPSBjb250YWluZXJfb2YoaWNkLCBzdHJ1Y3QgbXQ5bTExMSwgaWNkKTsKKwlpbnQgcmV0ID0gMDsKKworCWlmIChtdDltMTExLT5wb3dlcmVkKSB7CisJCXJldCA9IG10OW0xMTFfZW5hYmxlKGljZCk7CisJCWlmICghcmV0KQorCQkJcmV0ID0gbXQ5bTExMV9yZXNldChpY2QpOworCQlpZiAoIXJldCkKKwkJCXJldCA9IG10OW0xMTFfcmVzdG9yZV9zdGF0ZShpY2QpOworCX0KKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IG10OW0xMTFfaW5pdChzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCkKK3sKKwlzdHJ1Y3QgbXQ5bTExMSAqbXQ5bTExMSA9IGNvbnRhaW5lcl9vZihpY2QsIHN0cnVjdCBtdDltMTExLCBpY2QpOworCWludCByZXQ7CisKKwltdDltMTExLT5jb250ZXh0ID0gSElHSFBPV0VSOworCXJldCA9IG10OW0xMTFfZW5hYmxlKGljZCk7CisJaWYgKCFyZXQpCisJCXJldCA9IG10OW0xMTFfcmVzZXQoaWNkKTsKKwlpZiAoIXJldCkKKwkJcmV0ID0gbXQ5bTExMV9zZXRfY29udGV4dChpY2QsIG10OW0xMTEtPmNvbnRleHQpOworCWlmICghcmV0KQorCQlyZXQgPSBtdDltMTExX3NldF9hdXRvZXhwb3N1cmUoaWNkLCBtdDltMTExLT5hdXRvZXhwb3N1cmUpOworCWlmIChyZXQpCisJCWRldl9lcnIoJmljZC0+ZGV2LCAibXQ5bTExMSBpbml0IGZhaWxlZDogJWRcbiIsIHJldCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBtdDltMTExX3JlbGVhc2Uoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QpCit7CisJaW50IHJldDsKKworCXJldCA9IG10OW0xMTFfZGlzYWJsZShpY2QpOworCWlmIChyZXQgPCAwKQorCQlkZXZfZXJyKCZpY2QtPmRldiwgIm10OW0xMTEgcmVsZWFzZSBmYWlsZWQ6ICVkXG4iLCByZXQpOworCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIEludGVyZmFjZSBhY3RpdmUsIGNhbiB1c2UgaTJjLiBJZiBpdCBmYWlscywgaXQgY2FuIGluZGVlZCBtZWFuLCB0aGF0CisgKiB0aGlzIHdhc24ndCBvdXIgY2FwdHVyZSBpbnRlcmZhY2UsIHNvLCB3ZSB3YWl0IGZvciB0aGUgcmlnaHQgb25lCisgKi8KK3N0YXRpYyBpbnQgbXQ5bTExMV92aWRlb19wcm9iZShzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCkKK3sKKwlzdHJ1Y3QgbXQ5bTExMSAqbXQ5bTExMSA9IGNvbnRhaW5lcl9vZihpY2QsIHN0cnVjdCBtdDltMTExLCBpY2QpOworCXMzMiBkYXRhOworCWludCByZXQ7CisKKwkvKgorCSAqIFdlIG11c3QgaGF2ZSBhIHBhcmVudCBieSBub3cuIEFuZCBpdCBjYW5ub3QgYmUgYSB3cm9uZyBvbmUuCisJICogU28gdGhpcyBlbnRpcmUgdGVzdCBpcyBjb21wbGV0ZWx5IHJlZHVuZGFudC4KKwkgKi8KKwlpZiAoIWljZC0+ZGV2LnBhcmVudCB8fAorCSAgICB0b19zb2NfY2FtZXJhX2hvc3QoaWNkLT5kZXYucGFyZW50KS0+bnIgIT0gaWNkLT5pZmFjZSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlyZXQgPSBtdDltMTExX2VuYWJsZShpY2QpOworCWlmIChyZXQpCisJCWdvdG8gZWkyYzsKKwlyZXQgPSBtdDltMTExX3Jlc2V0KGljZCk7CisJaWYgKHJldCkKKwkJZ290byBlaTJjOworCisJZGF0YSA9IHJlZ19yZWFkKENISVBfVkVSU0lPTik7CisKKwlzd2l0Y2ggKGRhdGEpIHsKKwljYXNlIDB4MTQzYToKKwkJbXQ5bTExMS0+bW9kZWwgPSBWNEwyX0lERU5UX01UOU0xMTE7CisJCWljZC0+Zm9ybWF0cyA9IG10OW0xMTFfY29sb3VyX2Zvcm1hdHM7CisJCWljZC0+bnVtX2Zvcm1hdHMgPSBBUlJBWV9TSVpFKG10OW0xMTFfY29sb3VyX2Zvcm1hdHMpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXQgPSAtRU5PREVWOworCQlkZXZfZXJyKCZpY2QtPmRldiwKKwkJCSJObyBNVDlNMTExIGNoaXAgZGV0ZWN0ZWQsIHJlZ2lzdGVyIHJlYWQgJXhcbiIsIGRhdGEpOworCQlnb3RvIGVpMmM7CisJfQorCisJZGV2X2luZm8oJmljZC0+ZGV2LCAiRGV0ZWN0ZWQgYSBNVDlNMTExIGNoaXAgSUQgMHgxNDNhXG4iKTsKKworCXJldCA9IHNvY19jYW1lcmFfdmlkZW9fc3RhcnQoaWNkKTsKKwlpZiAocmV0KQorCQlnb3RvIGVpc2lzOworCisJbXQ5bTExMS0+YXV0b2V4cG9zdXJlID0gMTsKKworCW10OW0xMTEtPnN3YXBfcmdiX2V2ZW5fb2RkID0gMTsKKwltdDltMTExLT5zd2FwX3JnYl9yZWRfYmx1ZSA9IDE7CisKKwlyZXR1cm4gMDsKK2Vpc2lzOgorZWkyYzoKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBtdDltMTExX3ZpZGVvX3JlbW92ZShzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCkKK3sKKwlzdHJ1Y3QgbXQ5bTExMSAqbXQ5bTExMSA9IGNvbnRhaW5lcl9vZihpY2QsIHN0cnVjdCBtdDltMTExLCBpY2QpOworCisJZGV2X2RiZygmaWNkLT5kZXYsICJWaWRlbyAleCByZW1vdmVkOiAlcCwgJXBcbiIsIG10OW0xMTEtPmNsaWVudC0+YWRkciwKKwkJbXQ5bTExMS0+aWNkLmRldi5wYXJlbnQsIG10OW0xMTEtPmljZC52ZGV2KTsKKwlzb2NfY2FtZXJhX3ZpZGVvX3N0b3AoJm10OW0xMTEtPmljZCk7Cit9CisKK3N0YXRpYyBpbnQgbXQ5bTExMV9wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAorCQkJIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICpkaWQpCit7CisJc3RydWN0IG10OW0xMTEgKm10OW0xMTE7CisJc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2Q7CisJc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyID0gdG9faTJjX2FkYXB0ZXIoY2xpZW50LT5kZXYucGFyZW50KTsKKwlzdHJ1Y3Qgc29jX2NhbWVyYV9saW5rICppY2wgPSBjbGllbnQtPmRldi5wbGF0Zm9ybV9kYXRhOworCWludCByZXQ7CisKKwlpZiAoIWljbCkgeworCQlkZXZfZXJyKCZjbGllbnQtPmRldiwgIk1UOU0xMTEgZHJpdmVyIG5lZWRzIHBsYXRmb3JtIGRhdGFcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAoIWkyY19jaGVja19mdW5jdGlvbmFsaXR5KGFkYXB0ZXIsIEkyQ19GVU5DX1NNQlVTX1dPUkRfREFUQSkpIHsKKwkJZGV2X3dhcm4oJmFkYXB0ZXItPmRldiwKKwkJCSAiSTJDLUFkYXB0ZXIgZG9lc24ndCBzdXBwb3J0IEkyQ19GVU5DX1NNQlVTX1dPUkRcbiIpOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwltdDltMTExID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IG10OW0xMTEpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIW10OW0xMTEpCisJCXJldHVybiAtRU5PTUVNOworCisJbXQ5bTExMS0+Y2xpZW50ID0gY2xpZW50OworCWkyY19zZXRfY2xpZW50ZGF0YShjbGllbnQsIG10OW0xMTEpOworCisJLyogU2Vjb25kIHN0YWdlIHByb2JlIC0gd2hlbiBhIGNhcHR1cmUgYWRhcHRlciBpcyB0aGVyZSAqLworCWljZCAJCT0gJm10OW0xMTEtPmljZDsKKwlpY2QtPm9wcwk9ICZtdDltMTExX29wczsKKwlpY2QtPmNvbnRyb2wJPSAmY2xpZW50LT5kZXY7CisJaWNkLT54X21pbgk9IE1UOU0xMTFfTUlOX0RBUktfQ09MUzsKKwlpY2QtPnlfbWluCT0gTVQ5TTExMV9NSU5fREFSS19ST1dTOworCWljZC0+eF9jdXJyZW50CT0gaWNkLT54X21pbjsKKwlpY2QtPnlfY3VycmVudAk9IGljZC0+eV9taW47CisJaWNkLT53aWR0aF9taW4JPSBNVDlNMTExX01JTl9EQVJLX1JPV1M7CisJaWNkLT53aWR0aF9tYXgJPSBNVDlNMTExX01BWF9XSURUSDsKKwlpY2QtPmhlaWdodF9taW4JPSBNVDlNMTExX01JTl9EQVJLX0NPTFM7CisJaWNkLT5oZWlnaHRfbWF4CT0gTVQ5TTExMV9NQVhfSEVJR0hUOworCWljZC0+eV9za2lwX3RvcAk9IDA7CisJaWNkLT5pZmFjZQk9IGljbC0+YnVzX2lkOworCisJcmV0ID0gc29jX2NhbWVyYV9kZXZpY2VfcmVnaXN0ZXIoaWNkKTsKKwlpZiAocmV0KQorCQlnb3RvIGVpc2RyOworCXJldHVybiAwOworCitlaXNkcjoKKwlrZnJlZShtdDltMTExKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IG10OW0xMTFfcmVtb3ZlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCit7CisJc3RydWN0IG10OW0xMTEgKm10OW0xMTEgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKwlzb2NfY2FtZXJhX2RldmljZV91bnJlZ2lzdGVyKCZtdDltMTExLT5pY2QpOworCWtmcmVlKG10OW0xMTEpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCBtdDltMTExX2lkW10gPSB7CisJeyAibXQ5bTExMSIsIDAgfSwKKwl7IH0KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKGkyYywgbXQ5bTExMV9pZCk7CisKK3N0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBtdDltMTExX2kyY19kcml2ZXIgPSB7CisJLmRyaXZlciA9IHsKKwkJLm5hbWUgPSAibXQ5bTExMSIsCisJfSwKKwkucHJvYmUJCT0gbXQ5bTExMV9wcm9iZSwKKwkucmVtb3ZlCQk9IG10OW0xMTFfcmVtb3ZlLAorCS5pZF90YWJsZQk9IG10OW0xMTFfaWQsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBtdDltMTExX21vZF9pbml0KHZvaWQpCit7CisJcmV0dXJuIGkyY19hZGRfZHJpdmVyKCZtdDltMTExX2kyY19kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgbXQ5bTExMV9tb2RfZXhpdCh2b2lkKQoreworCWkyY19kZWxfZHJpdmVyKCZtdDltMTExX2kyY19kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChtdDltMTExX21vZF9pbml0KTsKK21vZHVsZV9leGl0KG10OW0xMTFfbW9kX2V4aXQpOworCitNT0RVTEVfREVTQ1JJUFRJT04oIk1pY3JvbiBNVDlNMTExIENhbWVyYSBkcml2ZXIiKTsKK01PRFVMRV9BVVRIT1IoIlJvYmVydCBKYXJ6bWlrIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL210OXYwMjIuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vbXQ5djAyMi5jCmluZGV4IDU2ODA4Y2QuLjI1ODQyMDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vbXQ5djAyMi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vbXQ5djAyMi5jCkBAIC0xMzQsMzQgKzEzNCw1NiBAQAogc3RhdGljIGludCBtdDl2MDIyX2luaXQoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QpCiB7CiAJc3RydWN0IG10OXYwMjIgKm10OXYwMjIgPSBjb250YWluZXJfb2YoaWNkLCBzdHJ1Y3QgbXQ5djAyMiwgaWNkKTsKKwlzdHJ1Y3Qgc29jX2NhbWVyYV9saW5rICppY2wgPSBtdDl2MDIyLT5jbGllbnQtPmRldi5wbGF0Zm9ybV9kYXRhOwogCWludCByZXQ7CiAKKwlpZiAoaWNsLT5wb3dlcikgeworCQlyZXQgPSBpY2wtPnBvd2VyKCZtdDl2MDIyLT5jbGllbnQtPmRldiwgMSk7CisJCWlmIChyZXQgPCAwKSB7CisJCQlkZXZfZXJyKGljZC0+dmRldi0+cGFyZW50LAorCQkJCSJQbGF0Zm9ybSBmYWlsZWQgdG8gcG93ZXItb24gdGhlIGNhbWVyYS5cbiIpOworCQkJcmV0dXJuIHJldDsKKwkJfQorCX0KKworCS8qCisJICogVGhlIGNhbWVyYSBjb3VsZCBoYXZlIGJlZW4gYWxyZWFkeSBvbiwgd2UgaGFyZC1yZXNldCBpdCBhZGRpdGlvbmFsbHksCisJICogaWYgYXZhaWxhYmxlLiBTb2Z0IHJlc2V0IGlzIGRvbmUgaW4gdmlkZW9fcHJvYmUoKS4KKwkgKi8KKwlpZiAoaWNsLT5yZXNldCkKKwkJaWNsLT5yZXNldCgmbXQ5djAyMi0+Y2xpZW50LT5kZXYpOworCiAJLyogQWxtb3N0IHRoZSBkZWZhdWx0IG1vZGU6IG1hc3RlciwgcGFyYWxsZWwsIHNpbXVsdGFuZW91cywgYW5kIGFuCiAJICogdW5kb2N1bWVudGVkIGJpdCAweDIwMCwgd2hpY2ggaXMgcHJlc2VudCBpbiB0YWJsZSA3LCBidXQgbm90IGluIDgsCiAJICogcGx1cyBzbmFwc2hvdCBtb2RlIHRvIGRpc2FibGUgc2NhbiBmb3Igbm93ICovCiAJbXQ5djAyMi0+Y2hpcF9jb250cm9sIHw9IDB4MTA7CiAJcmV0ID0gcmVnX3dyaXRlKGljZCwgTVQ5VjAyMl9DSElQX0NPTlRST0wsIG10OXYwMjItPmNoaXBfY29udHJvbCk7Ci0JaWYgKHJldCA+PSAwKQotCQlyZWdfd3JpdGUoaWNkLCBNVDlWMDIyX1JFQURfTU9ERSwgMHgzMDApOworCWlmICghcmV0KQorCQlyZXQgPSByZWdfd3JpdGUoaWNkLCBNVDlWMDIyX1JFQURfTU9ERSwgMHgzMDApOwogCiAJLyogQWxsIGRlZmF1bHRzICovCi0JaWYgKHJldCA+PSAwKQorCWlmICghcmV0KQogCQkvKiBBRUMsIEFHQyBvbiAqLwogCQlyZXQgPSByZWdfc2V0KGljZCwgTVQ5VjAyMl9BRUNfQUdDX0VOQUJMRSwgMHgzKTsKLQlpZiAocmV0ID49IDApCisJaWYgKCFyZXQpCiAJCXJldCA9IHJlZ193cml0ZShpY2QsIE1UOVYwMjJfTUFYX1RPVEFMX1NIVVRURVJfV0lEVEgsIDQ4MCk7Ci0JaWYgKHJldCA+PSAwKQorCWlmICghcmV0KQogCQkvKiBkZWZhdWx0IC0gYXV0byAqLwogCQlyZXQgPSByZWdfY2xlYXIoaWNkLCBNVDlWMDIyX0JMQUNLX0xFVkVMX0NBTElCX0NUUkwsIDEpOwotCWlmIChyZXQgPj0gMCkKKwlpZiAoIXJldCkKIAkJcmV0ID0gcmVnX3dyaXRlKGljZCwgTVQ5VjAyMl9ESUdJVEFMX1RFU1RfUEFUVEVSTiwgMCk7CiAKLQlyZXR1cm4gcmV0ID49IDAgPyAwIDogLUVJTzsKKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgaW50IG10OXYwMjJfcmVsZWFzZShzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCkKIHsKLQkvKiBOb3RoaW5nPyAqLworCXN0cnVjdCBtdDl2MDIyICptdDl2MDIyID0gY29udGFpbmVyX29mKGljZCwgc3RydWN0IG10OXYwMjIsIGljZCk7CisJc3RydWN0IHNvY19jYW1lcmFfbGluayAqaWNsID0gbXQ5djAyMi0+Y2xpZW50LT5kZXYucGxhdGZvcm1fZGF0YTsKKworCWlmIChpY2wtPnBvd2VyKQorCQlpY2wtPnBvd2VyKCZtdDl2MDIyLT5jbGllbnQtPmRldiwgMCk7CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtMzUyLDIxICszNzQsMjEgQEAKIAkJCQkJcmVjdC0+aGVpZ2h0ICsgaWNkLT55X3NraXBfdG9wICsgNDMpOwogCX0KIAkvKiBTZXR1cCBmcmFtZSBmb3JtYXQ6IGRlZmF1bHRzIGFwYXJ0IGZyb20gd2lkdGggYW5kIGhlaWdodCAqLwotCWlmIChyZXQgPj0gMCkKKwlpZiAoIXJldCkKIAkJcmV0ID0gcmVnX3dyaXRlKGljZCwgTVQ5VjAyMl9DT0xVTU5fU1RBUlQsIHJlY3QtPmxlZnQpOwotCWlmIChyZXQgPj0gMCkKKwlpZiAoIXJldCkKIAkJcmV0ID0gcmVnX3dyaXRlKGljZCwgTVQ5VjAyMl9ST1dfU1RBUlQsIHJlY3QtPnRvcCk7Ci0JaWYgKHJldCA+PSAwKQorCWlmICghcmV0KQogCQkvKiBEZWZhdWx0IDk0LCBQaHl0ZWMgZHJpdmVyIHNheXM6CiAJCSAqICJ3aWR0aCArIGhvcml6b250YWwgYmxhbmsgPj0gNjYwIiAqLwogCQlyZXQgPSByZWdfd3JpdGUoaWNkLCBNVDlWMDIyX0hPUklaT05UQUxfQkxBTktJTkcsCiAJCQkJcmVjdC0+d2lkdGggPiA2NjAgLSA0MyA/IDQzIDoKIAkJCQk2NjAgLSByZWN0LT53aWR0aCk7Ci0JaWYgKHJldCA+PSAwKQorCWlmICghcmV0KQogCQlyZXQgPSByZWdfd3JpdGUoaWNkLCBNVDlWMDIyX1ZFUlRJQ0FMX0JMQU5LSU5HLCA0NSk7Ci0JaWYgKHJldCA+PSAwKQorCWlmICghcmV0KQogCQlyZXQgPSByZWdfd3JpdGUoaWNkLCBNVDlWMDIyX1dJTkRPV19XSURUSCwgcmVjdC0+d2lkdGgpOwotCWlmIChyZXQgPj0gMCkKKwlpZiAoIXJldCkKIAkJcmV0ID0gcmVnX3dyaXRlKGljZCwgTVQ5VjAyMl9XSU5ET1dfSEVJR0hULAogCQkJCXJlY3QtPmhlaWdodCArIGljZC0+eV9za2lwX3RvcCk7CiAKQEAgLTcxNyw3ICs3MzksNyBAQAogCQkJaWNkLT5udW1fZm9ybWF0cyA9IDE7CiAJfQogCi0JaWYgKHJldCA+PSAwKQorCWlmICghcmV0KQogCQlyZXQgPSBzb2NfY2FtZXJhX3ZpZGVvX3N0YXJ0KGljZCk7CiAJaWYgKHJldCA8IDApCiAJCWdvdG8gZWlzaXM7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL214Yi5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9teGIuYwppbmRleCA4ZWY1NzhjLi43ZjEzMDI4IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL214Yi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vbXhiLmMKQEAgLTI3LDYgKzI3LDcgQEAKICNpbmNsdWRlIDxtZWRpYS90dW5lci5oPgogI2luY2x1ZGUgPGxpbnV4L3ZpZGVvX2RlY29kZXIuaD4KICNpbmNsdWRlIDxtZWRpYS92NGwyLWNvbW1vbi5oPgorI2luY2x1ZGUgPG1lZGlhL3NhYTcxMTUuaD4KIAogI2luY2x1ZGUgIm14Yi5oIgogI2luY2x1ZGUgInRlYTY0MTVjLmgiCkBAIC0xMjIsNiArMTIzLDggQEAKIAl7IFZJRElPQ19TX0ZSRVFVRU5DWSwgCVNBQTcxNDZfRVhDTFVTSVZFIH0sCiAJeyBWSURJT0NfR19BVURJTywgCVNBQTcxNDZfRVhDTFVTSVZFIH0sCiAJeyBWSURJT0NfU19BVURJTywgCVNBQTcxNDZfRVhDTFVTSVZFIH0sCisJeyBWSURJT0NfREJHX0dfUkVHSVNURVIsIAlTQUE3MTQ2X0VYQ0xVU0lWRSB9LAorCXsgVklESU9DX0RCR19TX1JFR0lTVEVSLCAJU0FBNzE0Nl9FWENMVVNJVkUgfSwKIAl7IE1YQl9TX0FVRElPX0NELCAJU0FBNzE0Nl9FWENMVVNJVkUgfSwJLyogY3VzdG9tIGNvbnRyb2wgKi8KIAl7IE1YQl9TX0FVRElPX0xJTkUsIAlTQUE3MTQ2X0VYQ0xVU0lWRSB9LAkvKiBjdXN0b20gY29udHJvbCAqLwogCXsgMCwJCQkwIH0KQEAgLTEzNCwxMiArMTM3LDEyIEBACiAKIAlzdHJ1Y3QgaTJjX2FkYXB0ZXIJaTJjX2FkYXB0ZXI7CiAKLQlzdHJ1Y3QgaTJjX2NsaWVudCoJc2FhNzExMWE7Ci0Jc3RydWN0IGkyY19jbGllbnQqCXRkYTk4NDA7Ci0Jc3RydWN0IGkyY19jbGllbnQqCXRlYTY0MTVjOwotCXN0cnVjdCBpMmNfY2xpZW50Kgl0dW5lcjsKLQlzdHJ1Y3QgaTJjX2NsaWVudCoJdGVhNjQyMF8xOwotCXN0cnVjdCBpMmNfY2xpZW50Kgl0ZWE2NDIwXzI7CisJc3RydWN0IGkyY19jbGllbnQJKnNhYTcxMTFhOworCXN0cnVjdCBpMmNfY2xpZW50CSp0ZGE5ODQwOworCXN0cnVjdCBpMmNfY2xpZW50CSp0ZWE2NDE1YzsKKwlzdHJ1Y3QgaTJjX2NsaWVudAkqdHVuZXI7CisJc3RydWN0IGkyY19jbGllbnQJKnRlYTY0MjBfMTsKKwlzdHJ1Y3QgaTJjX2NsaWVudAkqdGVhNjQyMF8yOwogCiAJaW50CWN1cl9tb2RlOwkvKiBjdXJyZW50IGF1ZGlvIG1vZGUgKG1vbm8sIHN0ZXJlbywgLi4uKSAqLwogCWludAljdXJfaW5wdXQ7CS8qIGN1cnJlbnQgaW5wdXQgKi8KQEAgLTE1MSwyMyArMTU0LDIzIEBACiAKIHN0YXRpYyBpbnQgbXhiX2NoZWNrX2NsaWVudHMoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkYXRhKQogewotCXN0cnVjdCBteGIqIG14YiA9IGRhdGE7CisJc3RydWN0IG14YiAqbXhiID0gZGF0YTsKIAlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gaTJjX3ZlcmlmeV9jbGllbnQoZGV2KTsKIAotCWlmKCAhY2xpZW50ICkKKwlpZiAoIWNsaWVudCkKIAkJcmV0dXJuIDA7CiAKLQlpZiggSTJDX0FERFJfVEVBNjQyMF8xID09IGNsaWVudC0+YWRkciApCisJaWYgKEkyQ19BRERSX1RFQTY0MjBfMSA9PSBjbGllbnQtPmFkZHIpCiAJCW14Yi0+dGVhNjQyMF8xID0gY2xpZW50OwotCWlmKCBJMkNfQUREUl9URUE2NDIwXzIgPT0gY2xpZW50LT5hZGRyICkKKwlpZiAoSTJDX0FERFJfVEVBNjQyMF8yID09IGNsaWVudC0+YWRkcikKIAkJbXhiLT50ZWE2NDIwXzIgPSBjbGllbnQ7Ci0JaWYoIEkyQ19URUE2NDE1Q18yID09IGNsaWVudC0+YWRkciApCisJaWYgKEkyQ19URUE2NDE1Q18yID09IGNsaWVudC0+YWRkcikKIAkJbXhiLT50ZWE2NDE1YyA9IGNsaWVudDsKLQlpZiggSTJDX0FERFJfVERBOTg0MCA9PSBjbGllbnQtPmFkZHIgKQorCWlmIChJMkNfQUREUl9UREE5ODQwID09IGNsaWVudC0+YWRkcikKIAkJbXhiLT50ZGE5ODQwID0gY2xpZW50OwotCWlmKCBJMkNfU0FBNzExMSA9PSBjbGllbnQtPmFkZHIgKQorCWlmIChJMkNfU0FBNzExMSA9PSBjbGllbnQtPmFkZHIpCiAJCW14Yi0+c2FhNzExMWEgPSBjbGllbnQ7Ci0JaWYoIDB4NjAgPT0gY2xpZW50LT5hZGRyICkKKwlpZiAoMHg2MCA9PSBjbGllbnQtPmFkZHIpCiAJCW14Yi0+dHVuZXIgPSBjbGllbnQ7CiAKIAlyZXR1cm4gMDsKQEAgLTE3OCwyMyArMTgxLDI4IEBACiAJc3RydWN0IG14YiogbXhiID0gTlVMTDsKIAlpbnQgcmVzdWx0OwogCi0JaWYgKChyZXN1bHQgPSByZXF1ZXN0X21vZHVsZSgic2FhNzExMSIpKSA8IDApIHsKKwlyZXN1bHQgPSByZXF1ZXN0X21vZHVsZSgic2FhNzExNSIpOworCWlmIChyZXN1bHQgPCAwKSB7CiAJCXByaW50aygibXhiOiBzYWE3MTExIGkyYyBtb2R1bGUgbm90IGF2YWlsYWJsZS5cbiIpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9Ci0JaWYgKChyZXN1bHQgPSByZXF1ZXN0X21vZHVsZSgidGVhNjQyMCIpKSA8IDApIHsKKwlyZXN1bHQgPSByZXF1ZXN0X21vZHVsZSgidGVhNjQyMCIpOworCWlmIChyZXN1bHQgPCAwKSB7CiAJCXByaW50aygibXhiOiB0ZWE2NDIwIGkyYyBtb2R1bGUgbm90IGF2YWlsYWJsZS5cbiIpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9Ci0JaWYgKChyZXN1bHQgPSByZXF1ZXN0X21vZHVsZSgidGVhNjQxNWMiKSkgPCAwKSB7CisJcmVzdWx0ID0gcmVxdWVzdF9tb2R1bGUoInRlYTY0MTVjIik7CisJaWYgKHJlc3VsdCA8IDApIHsKIAkJcHJpbnRrKCJteGI6IHRlYTY0MTVjIGkyYyBtb2R1bGUgbm90IGF2YWlsYWJsZS5cbiIpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9Ci0JaWYgKChyZXN1bHQgPSByZXF1ZXN0X21vZHVsZSgidGRhOTg0MCIpKSA8IDApIHsKKwlyZXN1bHQgPSByZXF1ZXN0X21vZHVsZSgidGRhOTg0MCIpOworCWlmIChyZXN1bHQgPCAwKSB7CiAJCXByaW50aygibXhiOiB0ZGE5ODQwIGkyYyBtb2R1bGUgbm90IGF2YWlsYWJsZS5cbiIpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9Ci0JaWYgKChyZXN1bHQgPSByZXF1ZXN0X21vZHVsZSgidHVuZXIiKSkgPCAwKSB7CisJcmVzdWx0ID0gcmVxdWVzdF9tb2R1bGUoInR1bmVyIik7CisJaWYgKHJlc3VsdCA8IDApIHsKIAkJcHJpbnRrKCJteGI6IHR1bmVyIGkyYyBtb2R1bGUgbm90IGF2YWlsYWJsZS5cbiIpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CkBAIC0yMDcsOSArMjE1LDEwIEBACiAKIAlteGItPmkyY19hZGFwdGVyID0gKHN0cnVjdCBpMmNfYWRhcHRlcikgewogCQkuY2xhc3MgPSBJMkNfQ0xBU1NfVFZfQU5BTE9HLAotCQkubmFtZSA9ICJteGIiLAogCX07CiAKKwlzbnByaW50ZihteGItPmkyY19hZGFwdGVyLm5hbWUsIHNpemVvZihteGItPmkyY19hZGFwdGVyLm5hbWUpLCAibXhiJWQiLCBteGJfbnVtKTsKKwogCXNhYTcxNDZfaTJjX2FkYXB0ZXJfcHJlcGFyZShkZXYsICZteGItPmkyY19hZGFwdGVyLCBTQUE3MTQ2X0kyQ19CVVNfQklUX1JBVEVfNDgwKTsKIAlpZihpMmNfYWRkX2FkYXB0ZXIoJm14Yi0+aTJjX2FkYXB0ZXIpIDwgMCkgewogCQlERUJfUygoImNhbm5vdCByZWdpc3RlciBpMmMtZGV2aWNlLiBza2lwcGluZy5cbiIpKTsKQEAgLTI5MCwzOCArMjk5LDcgQEAKIAl7IDksIHsgMHgxZCwgMHhlZCwgMHhkMCwgMHg2OCwgMHgyOSwgMHhiNCwgMHhlMSwgMHgwMCwgMHhiOCB9IH0sCiAJeyA5LCB7IDB4M2QsIDB4ZWQsIDB4ZDAsIDB4NjgsIDB4MjksIDB4YjQsIDB4ZTEsIDB4MDAsIDB4YjggfSB9LAogCXsgMywgeyAweDgwLCAweGIzLCAweDBhIH0gfSwKLQl7LTEsIHsgMH0gfQotfTsKLQotc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgbXhiX3NhYTcxMTFfaW5pdFtdID0gewotCTB4MDAsIDB4MDAsCSAgLyogMDAgLSBJRCBieXRlICovCi0JMHgwMSwgMHgwMCwJICAvKiAwMSAtIHJlc2VydmVkICovCi0KLQkvKmZyb250IGVuZCAqLwotCTB4MDIsIDB4ZDgsCSAgLyogMDIgLSBGVVNFPXgsIEdVREw9eCwgTU9ERT14ICovCi0JMHgwMywgMHgyMywJICAvKiAwMyAtIEhMTlJTPTAsIFZCU0w9MSwgV1BPRkY9MCwgSE9MREc9MCwgR0FGSVg9MCwgR0FJMT0yNTYsIEdBSTI9MjU2ICovCi0JMHgwNCwgMHgwMCwJICAvKiAwNCAtIEdBSTE9MjU2ICovCi0JMHgwNSwgMHgwMCwJICAvKiAwNSAtIEdBSTI9MjU2ICovCi0KLQkvKiBkZWNvZGVyICovCi0JMHgwNiwgMHhmMCwJICAvKiAwNiAtIEhTQiBhdCAgeHgoNTBIeikgLyAgeHgoNjBIeikgcGl4ZWxzIGFmdGVyIGVuZCBvZiBsYXN0IGxpbmUgKi8KLQkweDA3LCAweDMwLAkgIC8qIDA3IC0gSFNTIGF0ICB4eCg1MEh6KSAvICB4eCg2MEh6KSBwaXhlbHMgYWZ0ZXIgZW5kIG9mIGxhc3QgbGluZSAqLwotCTB4MDgsIDB4YTgsCSAgLyogMDggLSBBVUZEPXgsIEZTRUw9eCwgRVhGSUw9eCwgVlRSQz14LCBIUExMPXgsIFZOT0k9eCAqLwotCTB4MDksIDB4MDIsCSAgLyogMDkgLSBCWVBTPXgsIFBSRUY9eCwgQlBTUz14LCBWQkxCPXgsIFVQVENWPXgsIEFQRVI9eCAqLwotCTB4MGEsIDB4ODAsCSAgLyogMGEgLSBCUklHPTEyOCAqLwotCTB4MGIsIDB4NDcsCSAgLyogMGIgLSBDT05UPTEuMTA5ICovCi0JMHgwYywgMHg0MCwJICAvKiAwYyAtIFNBVE49MS4wICovCi0JMHgwZCwgMHgwMCwJICAvKiAwZCAtIEhVRT0wICovCi0JMHgwZSwgMHgwMSwJICAvKiAwZSAtIENEVE89MCwgQ1NURD0wLCBEQ0NGPTAsIEZDVEM9MCwgQ0hCVz0xICovCi0JMHgwZiwgMHgwMCwJICAvKiAwZiAtIHJlc2VydmVkICovCi0JMHgxMCwgMHhkMCwJICAvKiAxMCAtIE9GVFM9eCwgSERFTD14LCBWUkxOPXgsIFlERUw9eCAqLwotCTB4MTEsIDB4OGMsCSAgLyogMTEgLSBHUFNXPXgsIENNOTk9eCwgRkVDTz14LCBDT01QTz14LCBPRVlDPTEsIE9FSFY9MSwgVklQQj0wLCBDT0xPPTAgKi8KLQkweDEyLCAweDgwLAkgIC8qIDEyIC0geHggb3V0cHV0IGNvbnRyb2wgMiAqLwotCTB4MTMsIDB4MzAsCSAgLyogMTMgLSB4eCBvdXRwdXQgY29udHJvbCAzICovCi0JMHgxNCwgMHgwMCwJICAvKiAxNCAtIHJlc2VydmVkICovCi0JMHgxNSwgMHgxNSwJICAvKiAxNSAtIFZCSSAqLwotCTB4MTYsIDB4MDQsCSAgLyogMTYgLSBWQkkgKi8KLQkweDE3LCAweDAwLAkgIC8qIDE3IC0gVkJJICovCisJey0xLCB7IDAgfSB9CiB9OwogCiAvKiBicmluZyBoYXJkd2FyZSB0byBhIHNhbmUgc3RhdGUuIHRoaXMgaGFzIHRvIGJlIGRvbmUsIGp1c3QgaW4gY2FzZSBzb21lb25lCkBAIC0zMzEsMzcgKzMwOSwyOCBAQAogc3RhdGljIGludCBteGJfaW5pdF9kb25lKHN0cnVjdCBzYWE3MTQ2X2RldiogZGV2KQogewogCXN0cnVjdCBteGIqIG14YiA9IChzdHJ1Y3QgbXhiKilkZXYtPmV4dF9wcml2OwotCXN0cnVjdCB2aWRlb19kZWNvZGVyX2luaXQgaW5pdDsKIAlzdHJ1Y3QgaTJjX21zZyBtc2c7CiAJc3RydWN0IHR1bmVyX3NldHVwIHR1bl9zZXR1cDsKIAl2NGwyX3N0ZF9pZCBzdGQgPSBWNEwyX1NURF9QQUxfQkc7CisJc3RydWN0IHY0bDJfcm91dGluZyByb3V0ZTsKIAogCWludCBpID0gMCwgZXJyID0gMDsKLQlzdHJ1Y3QJdGVhNjQxNWNfbXVsdGlwbGV4IHZtOworCXN0cnVjdCB0ZWE2NDE1Y19tdWx0aXBsZXggdm07CiAKIAkvKiBzZWxlY3QgdmlkZW8gbW9kZSBpbiBzYWE3MTExYSAqLwotCWkgPSBWSURFT19NT0RFX1BBTDsKLQkvKiBmaXhtZTogY3VycmVudGx5IHBvaW50bGVzczogZ2V0cyBvdmVyd3JpdHRlbiBieSBjb25maWd1cmF0aW9uIGJlbG93ICovCi0JbXhiLT5zYWE3MTExYS0+ZHJpdmVyLT5jb21tYW5kKG14Yi0+c2FhNzExMWEsREVDT0RFUl9TRVRfTk9STSwgJmkpOwotCi0JLyogd3JpdGUgY29uZmlndXJhdGlvbiB0byBzYWE3MTExYSAqLwotCWluaXQuZGF0YSA9IG14Yl9zYWE3MTExX2luaXQ7Ci0JaW5pdC5sZW4gPSBzaXplb2YobXhiX3NhYTcxMTFfaW5pdCk7Ci0JbXhiLT5zYWE3MTExYS0+ZHJpdmVyLT5jb21tYW5kKG14Yi0+c2FhNzExMWEsREVDT0RFUl9JTklULCAmaW5pdCk7CisJbXhiLT5zYWE3MTExYS0+ZHJpdmVyLT5jb21tYW5kKG14Yi0+c2FhNzExMWEsIFZJRElPQ19TX1NURCwgJnN0ZCk7CiAKIAkvKiBzZWxlY3QgdHVuZXItb3V0cHV0IG9uIHNhYTcxMTFhICovCiAJaSA9IDA7Ci0JbXhiLT5zYWE3MTExYS0+ZHJpdmVyLT5jb21tYW5kKG14Yi0+c2FhNzExMWEsREVDT0RFUl9TRVRfSU5QVVQsICZpKTsKLQotCS8qIGVuYWJsZSB2YmkgYnlwYXNzICovCi0JaSA9IDE7Ci0JbXhiLT5zYWE3MTExYS0+ZHJpdmVyLT5jb21tYW5kKG14Yi0+c2FhNzExMWEsREVDT0RFUl9TRVRfVkJJX0JZUEFTUywgJmkpOworCXJvdXRlLmlucHV0ID0gU0FBNzExNV9DT01QT1NJVEUwOworCXJvdXRlLm91dHB1dCA9IFNBQTcxMTFfRk1UX0NDSVIgfCBTQUE3MTExX1ZCSV9CWVBBU1M7CisJbXhiLT5zYWE3MTExYS0+ZHJpdmVyLT5jb21tYW5kKG14Yi0+c2FhNzExMWEsIFZJRElPQ19JTlRfU19WSURFT19ST1VUSU5HLCAmcm91dGUpOwogCiAJLyogc2VsZWN0IGEgdHVuZXIgdHlwZSAqLwogCXR1bl9zZXR1cC5tb2RlX21hc2sgPSBUX0FOQUxPR19UVjsKIAl0dW5fc2V0dXAuYWRkciA9IEFERFJfVU5TRVQ7CiAJdHVuX3NldHVwLnR5cGUgPSBUVU5FUl9QSElMSVBTX1BBTDsKLQlteGItPnR1bmVyLT5kcml2ZXItPmNvbW1hbmQobXhiLT50dW5lcixUVU5FUl9TRVRfVFlQRV9BRERSLCAmdHVuX3NldHVwKTsKKwlteGItPnR1bmVyLT5kcml2ZXItPmNvbW1hbmQobXhiLT50dW5lciwgVFVORVJfU0VUX1RZUEVfQUREUiwgJnR1bl9zZXR1cCk7CiAJLyogdHVuZSBpbiBzb21lIGZyZXF1ZW5jeSBvbiB0dW5lciAqLwogCW14Yi0+Y3VyX2ZyZXEudHVuZXIgPSAwOwogCW14Yi0+Y3VyX2ZyZXEudHlwZSA9IFY0TDJfVFVORVJfQU5BTE9HX1RWOwpAQCAtMzczLDI3ICszNDIsMjYgQEAKIAlteGItPnR1bmVyLT5kcml2ZXItPmNvbW1hbmQobXhiLT50dW5lciwgVklESU9DX1NfU1RELCAmc3RkKTsKIAogCS8qIG11dGUgYXVkaW8gb24gdGVhNjQyMHMgKi8KLQlteGItPnRlYTY0MjBfMS0+ZHJpdmVyLT5jb21tYW5kKG14Yi0+dGVhNjQyMF8xLFRFQTY0MjBfU1dJVENILCAmVEVBNjQyMF9saW5lWzZdWzBdKTsKLQlteGItPnRlYTY0MjBfMi0+ZHJpdmVyLT5jb21tYW5kKG14Yi0+dGVhNjQyMF8yLFRFQTY0MjBfU1dJVENILCAmVEVBNjQyMF9saW5lWzZdWzFdKTsKLQlteGItPnRlYTY0MjBfMS0+ZHJpdmVyLT5jb21tYW5kKG14Yi0+dGVhNjQyMF8xLFRFQTY0MjBfU1dJVENILCAmVEVBNjQyMF9jZFs2XVswXSk7Ci0JbXhiLT50ZWE2NDIwXzItPmRyaXZlci0+Y29tbWFuZChteGItPnRlYTY0MjBfMixURUE2NDIwX1NXSVRDSCwgJlRFQTY0MjBfY2RbNl1bMV0pOworCW14Yi0+dGVhNjQyMF8xLT5kcml2ZXItPmNvbW1hbmQobXhiLT50ZWE2NDIwXzEsIFRFQTY0MjBfU1dJVENILCAmVEVBNjQyMF9saW5lWzZdWzBdKTsKKwlteGItPnRlYTY0MjBfMi0+ZHJpdmVyLT5jb21tYW5kKG14Yi0+dGVhNjQyMF8yLCBURUE2NDIwX1NXSVRDSCwgJlRFQTY0MjBfbGluZVs2XVsxXSk7CisJbXhiLT50ZWE2NDIwXzEtPmRyaXZlci0+Y29tbWFuZChteGItPnRlYTY0MjBfMSwgVEVBNjQyMF9TV0lUQ0gsICZURUE2NDIwX2NkWzZdWzBdKTsKKwlteGItPnRlYTY0MjBfMi0+ZHJpdmVyLT5jb21tYW5kKG14Yi0+dGVhNjQyMF8yLCBURUE2NDIwX1NXSVRDSCwgJlRFQTY0MjBfY2RbNl1bMV0pOwogCiAJLyogc3dpdGNoIHRvIHR1bmVyLWNoYW5uZWwgb24gdGVhNjQxNWMqLwogCXZtLm91dCA9IDE3OwogCXZtLmluICA9IDM7Ci0JbXhiLT50ZWE2NDE1Yy0+ZHJpdmVyLT5jb21tYW5kKG14Yi0+dGVhNjQxNWMsVEVBNjQxNUNfU1dJVENILCAmdm0pOworCW14Yi0+dGVhNjQxNWMtPmRyaXZlci0+Y29tbWFuZChteGItPnRlYTY0MTVjLCBURUE2NDE1Q19TV0lUQ0gsICZ2bSk7CiAKIAkvKiBzZWxlY3QgdHVuZXItb3V0cHV0IG9uIG11bHRpY2FibGUgb24gdGVhNjQxNWMqLwogCXZtLmluICA9IDM7CiAJdm0ub3V0ID0gMTM7Ci0JbXhiLT50ZWE2NDE1Yy0+ZHJpdmVyLT5jb21tYW5kKG14Yi0+dGVhNjQxNWMsVEVBNjQxNUNfU1dJVENILCAmdm0pOworCW14Yi0+dGVhNjQxNWMtPmRyaXZlci0+Y29tbWFuZChteGItPnRlYTY0MTVjLCBURUE2NDE1Q19TV0lUQ0gsICZ2bSk7CiAKIAkvKiB0aGUgcmVzdCBmb3IgbXhiICovCiAJbXhiLT5jdXJfaW5wdXQgPSAwOwogCW14Yi0+Y3VyX211dGUgPSAxOwogCiAJbXhiLT5jdXJfbW9kZSA9IFY0TDJfVFVORVJfTU9ERV9TVEVSRU87Ci0JbXhiLT50ZGE5ODQwLT5kcml2ZXItPmNvbW1hbmQobXhiLT50ZGE5ODQwLCBUREE5ODQwX1NXSVRDSCwgJm14Yi0+Y3VyX21vZGUpOwogCiAJLyogY2hlY2sgaWYgdGhlIHNhYTc3NDAgKGFrYSAnc291bmQgYXJlbmEgbW9kdWxlJykgaXMgcHJlc2VudAogCSAgIG9uIHRoZSBteGIuIGlmIHNvLCB3ZSBtdXN0IGluaXRpYWxpemUgaXQuIGR1ZSB0byBsYWNrIG9mCkBAIC00MDQsMjEgKzM3MiwyMiBAQAogCW1zZy5sZW4gPSBteGJfc2FhNzc0MF9pbml0WzBdLmxlbmd0aDsKIAltc2cuYnVmID0gJm14Yl9zYWE3NzQwX2luaXRbMF0uZGF0YVswXTsKIAotCWlmKCAxID09IChlcnIgPSBpMmNfdHJhbnNmZXIoJm14Yi0+aTJjX2FkYXB0ZXIsICZtc2csIDEpKSkgeworCWVyciA9IGkyY190cmFuc2ZlcigmbXhiLT5pMmNfYWRhcHRlciwgJm1zZywgMSk7CisJaWYgKGVyciA9PSAxKSB7CiAJCS8qIHRoZSBzb3VuZCBhcmVuYSBtb2R1bGUgaXMgYSBwb3MsIHRoYXQncyBwcm9iYWJseSB0aGUgcmVhc29uCiAJCSAgIHBoaWxpcHMgcmVmdXNlcyB0byBoYW5kIG91dCBhIGRhdGFzaGVldCBmb3IgdGhlIHNhYTc3NDAuLi4KIAkJICAgaXQgc2VlbXMgdG8gc2NyZXcgdXAgdGhlIGkyYyBidXMsIHNvIHdlIGRpc2FibGUgZmFzdCBpcnEKIAkJICAgYmFzZWQgaTJjIHRyYW5zYWN0aW9ucyBoZXJlIGFuZCByZWx5IG9uIHRoZSBzbG93IGFuZCBzYWZlCiAJCSAgIHBvbGxpbmcgbWV0aG9kIC4uLiAqLwogCQlleHRlbnNpb24uZmxhZ3MgJj0gflNBQTcxNDZfVVNFX0kyQ19JUlE7Ci0JCWZvcihpID0gMTs7aSsrKSB7Ci0JCQlpZiggLTEgPT0gbXhiX3NhYTc3NDBfaW5pdFtpXS5sZW5ndGggKSB7CisJCWZvciAoaSA9IDE7IDsgaSsrKSB7CisJCQlpZiAoLTEgPT0gbXhiX3NhYTc3NDBfaW5pdFtpXS5sZW5ndGgpCiAJCQkJYnJlYWs7Ci0JCQl9CiAKIAkJCW1zZy5sZW4gPSBteGJfc2FhNzc0MF9pbml0W2ldLmxlbmd0aDsKIAkJCW1zZy5idWYgPSAmbXhiX3NhYTc3NDBfaW5pdFtpXS5kYXRhWzBdOwotCQkJaWYoIDEgIT0gKGVyciA9IGkyY190cmFuc2ZlcigmbXhiLT5pMmNfYWRhcHRlciwgJm1zZywgMSkpKSB7CisJCQllcnIgPSBpMmNfdHJhbnNmZXIoJm14Yi0+aTJjX2FkYXB0ZXIsICZtc2csIDEpOworCQkJaWYgKGVyciAhPSAxKSB7CiAJCQkJREVCX0QoKCJmYWlsZWQgdG8gaW5pdGlhbGl6ZSAnc291bmQgYXJlbmEgbW9kdWxlJy5cbiIpKTsKIAkJCQlnb3RvIGVycjsKIAkJCX0KQEAgLTQzMiw3ICs0MDEsOCBAQAogCS8qIGV4dC0+c2FhIGhhcyBiZWVuIGZpbGxlZCBieSB0aGUgY29yZSBkcml2ZXIgKi8KIAogCS8qIHNvbWUgc3R1ZmYgaXMgZG9uZSB2aWEgdmFyaWFibGVzICovCi0Jc2FhNzE0Nl9zZXRfaHBzX3NvdXJjZV9hbmRfc3luYyhkZXYsIGlucHV0X3BvcnRfc2VsZWN0aW9uW214Yi0+Y3VyX2lucHV0XS5ocHNfc291cmNlLCBpbnB1dF9wb3J0X3NlbGVjdGlvbltteGItPmN1cl9pbnB1dF0uaHBzX3N5bmMpOworCXNhYTcxNDZfc2V0X2hwc19zb3VyY2VfYW5kX3N5bmMoZGV2LCBpbnB1dF9wb3J0X3NlbGVjdGlvbltteGItPmN1cl9pbnB1dF0uaHBzX3NvdXJjZSwKKwkJCWlucHV0X3BvcnRfc2VsZWN0aW9uW214Yi0+Y3VyX2lucHV0XS5ocHNfc3luYyk7CiAKIAkvKiBzb21lIHN0dWZmIGlzIGRvbmUgdmlhIGRpcmVjdCB3cml0ZSB0byB0aGUgcmVnaXN0ZXJzICovCiAKQEAgLTQ1NywyNCArNDI3LDI0IEBACiBzdGF0aWMgc3RydWN0IHNhYTcxNDZfZXh0X3Z2IHZ2X2RhdGE7CiAKIC8qIHRoaXMgZnVuY3Rpb24gb25seSBnZXRzIGNhbGxlZCB3aGVuIHRoZSBwcm9iaW5nIHdhcyBzdWNjZXNzZnVsICovCi1zdGF0aWMgaW50IG14Yl9hdHRhY2goc3RydWN0IHNhYTcxNDZfZGV2KiBkZXYsIHN0cnVjdCBzYWE3MTQ2X3BjaV9leHRlbnNpb25fZGF0YSAqaW5mbykKK3N0YXRpYyBpbnQgbXhiX2F0dGFjaChzdHJ1Y3Qgc2FhNzE0Nl9kZXYgKmRldiwgc3RydWN0IHNhYTcxNDZfcGNpX2V4dGVuc2lvbl9kYXRhICppbmZvKQogewotCXN0cnVjdCBteGIqIG14YiA9IChzdHJ1Y3QgbXhiKilkZXYtPmV4dF9wcml2OworCXN0cnVjdCBteGIgKm14YiA9IChzdHJ1Y3QgbXhiICopZGV2LT5leHRfcHJpdjsKIAotCURFQl9FRSgoImRldjolcFxuIixkZXYpKTsKKwlERUJfRUUoKCJkZXY6JXBcbiIsIGRldikpOwogCiAJLyogY2hlY2tpbmcgZm9yIGkyYy1kZXZpY2VzIGNhbiBiZSBvbWl0dGVkIGhlcmUsIGJlY2F1c2Ugd2UKIAkgICBhbHJlYWR5IGRpZCB0aGlzIGluICJteGJfdmw0Ml9wcm9iZSIgKi8KIAotCXNhYTcxNDZfdnZfaW5pdChkZXYsJnZ2X2RhdGEpOwotCWlmKCAwICE9IHNhYTcxNDZfcmVnaXN0ZXJfZGV2aWNlKCZteGItPnZpZGVvX2RldiwgZGV2LCAibXhiIiwgVkZMX1RZUEVfR1JBQkJFUikpIHsKKwlzYWE3MTQ2X3Z2X2luaXQoZGV2LCAmdnZfZGF0YSk7CisJaWYgKHNhYTcxNDZfcmVnaXN0ZXJfZGV2aWNlKCZteGItPnZpZGVvX2RldiwgZGV2LCAibXhiIiwgVkZMX1RZUEVfR1JBQkJFUikpIHsKIAkJRVJSKCgiY2Fubm90IHJlZ2lzdGVyIGNhcHR1cmUgdjRsMiBkZXZpY2UuIHNraXBwaW5nLlxuIikpOwogCQlyZXR1cm4gLTE7CiAJfQogCiAJLyogaW5pdGlhbGl6YXRpb24gc3R1ZmYgKHZiaSkgKG9ubHkgZm9yIHJldmlzaW9uID4gMCBhbmQgZm9yIGV4dGVuc2lvbnMgd2hpY2ggd2FudCBpdCkqLwotCWlmKCAwICE9IE1YQl9CT0FSRF9DQU5fRE9fVkJJKGRldikpIHsKLQkJaWYoIDAgIT0gc2FhNzE0Nl9yZWdpc3Rlcl9kZXZpY2UoJm14Yi0+dmJpX2RldiwgZGV2LCAibXhiIiwgVkZMX1RZUEVfVkJJKSkgeworCWlmIChNWEJfQk9BUkRfQ0FOX0RPX1ZCSShkZXYpKSB7CisJCWlmIChzYWE3MTQ2X3JlZ2lzdGVyX2RldmljZSgmbXhiLT52YmlfZGV2LCBkZXYsICJteGIiLCBWRkxfVFlQRV9WQkkpKSB7CiAJCQlFUlIoKCJjYW5ub3QgcmVnaXN0ZXIgdmJpIHY0bDIgZGV2aWNlLiBza2lwcGluZy5cbiIpKTsKIAkJfQogCX0KQEAgLTQ4NiwxOCArNDU2LDE4IEBACiAJaTJjX3VzZV9jbGllbnQobXhiLT5zYWE3MTExYSk7CiAJaTJjX3VzZV9jbGllbnQobXhiLT50dW5lcik7CiAKLQlwcmludGsoIm14YjogZm91bmQgJ011bHRpbWVkaWEgZVh0ZW5zaW9uIEJvYXJkJy0lZC5cbiIsbXhiX251bSk7CisJcHJpbnRrKCJteGI6IGZvdW5kIE11bHRpbWVkaWEgZVh0ZW5zaW9uIEJvYXJkICMlZC5cbiIsIG14Yl9udW0pOwogCiAJbXhiX251bSsrOwogCW14Yl9pbml0X2RvbmUoZGV2KTsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBteGJfZGV0YWNoKHN0cnVjdCBzYWE3MTQ2X2RldiogZGV2KQorc3RhdGljIGludCBteGJfZGV0YWNoKHN0cnVjdCBzYWE3MTQ2X2RldiAqZGV2KQogewotCXN0cnVjdCBteGIqIG14YiA9IChzdHJ1Y3QgbXhiKilkZXYtPmV4dF9wcml2OworCXN0cnVjdCBteGIgKm14YiA9IChzdHJ1Y3QgbXhiICopZGV2LT5leHRfcHJpdjsKIAotCURFQl9FRSgoImRldjolcFxuIixkZXYpKTsKKwlERUJfRUUoKCJkZXY6JXBcbiIsIGRldikpOwogCiAJaTJjX3JlbGVhc2VfY2xpZW50KG14Yi0+dGVhNjQyMF8xKTsKIAlpMmNfcmVsZWFzZV9jbGllbnQobXhiLT50ZWE2NDIwXzIpOwpAQCAtNTA3LDkgKzQ3Nyw4IEBACiAJaTJjX3JlbGVhc2VfY2xpZW50KG14Yi0+dHVuZXIpOwogCiAJc2FhNzE0Nl91bnJlZ2lzdGVyX2RldmljZSgmbXhiLT52aWRlb19kZXYsZGV2KTsKLQlpZiggMCAhPSBNWEJfQk9BUkRfQ0FOX0RPX1ZCSShkZXYpKSB7Ci0JCXNhYTcxNDZfdW5yZWdpc3Rlcl9kZXZpY2UoJm14Yi0+dmJpX2RldixkZXYpOwotCX0KKwlpZiAoTVhCX0JPQVJEX0NBTl9ET19WQkkoZGV2KSkKKwkJc2FhNzE0Nl91bnJlZ2lzdGVyX2RldmljZSgmbXhiLT52YmlfZGV2LCBkZXYpOwogCXNhYTcxNDZfdnZfcmVsZWFzZShkZXYpOwogCiAJbXhiX251bS0tOwpAQCAtNTIzLDcgKzQ5Miw3IEBACiBzdGF0aWMgaW50IG14Yl9pb2N0bChzdHJ1Y3Qgc2FhNzE0Nl9maCAqZmgsIHVuc2lnbmVkIGludCBjbWQsIHZvaWQgKmFyZykKIHsKIAlzdHJ1Y3Qgc2FhNzE0Nl9kZXYgKmRldiA9IGZoLT5kZXY7Ci0Jc3RydWN0IG14YiogbXhiID0gKHN0cnVjdCBteGIqKWRldi0+ZXh0X3ByaXY7CisJc3RydWN0IG14YiAqbXhiID0gKHN0cnVjdCBteGIgKilkZXYtPmV4dF9wcml2OwogCXN0cnVjdCBzYWE3MTQ2X3Z2ICp2diA9IGRldi0+dnZfZGF0YTsKIAogCXN3aXRjaChjbWQpIHsKQEAgLTUzMiwxMSArNTAxLDkgQEAKIAkJc3RydWN0IHY0bDJfaW5wdXQgKmkgPSBhcmc7CiAKIAkJREVCX0VFKCgiVklESU9DX0VOVU1JTlBVVCAlZC5cbiIsaS0+aW5kZXgpKTsKLQkJaWYoIGktPmluZGV4IDwgMCB8fCBpLT5pbmRleCA+PSBNWEJfSU5QVVRTKSB7CisJCWlmIChpLT5pbmRleCA8IDAgfHwgaS0+aW5kZXggPj0gTVhCX0lOUFVUUykKIAkJCXJldHVybiAtRUlOVkFMOwotCQl9CiAJCW1lbWNweShpLCAmbXhiX2lucHV0c1tpLT5pbmRleF0sIHNpemVvZihzdHJ1Y3QgdjRsMl9pbnB1dCkpOwotCiAJCXJldHVybiAwOwogCX0KIAkvKiB0aGUgc2FhNzE0NiBwcm92aWRlcyBzb21lIGNvbnRyb2xzIChicmlnaHRuZXNzLCBjb250cmFzdCwgc2F0dXJhdGlvbikKQEAgLTU1MCw3ICs1MTcsNyBAQAogCQlmb3IgKGkgPSBNQVhDT05UUk9MUyAtIDE7IGkgPj0gMDsgaS0tKSB7CiAJCQlpZiAobXhiX2NvbnRyb2xzW2ldLmlkID09IHFjLT5pZCkgewogCQkJCSpxYyA9IG14Yl9jb250cm9sc1tpXTsKLQkJCQlERUJfRCgoIlZJRElPQ19RVUVSWUNUUkwgJWQuXG4iLHFjLT5pZCkpOworCQkJCURFQl9EKCgiVklESU9DX1FVRVJZQ1RSTCAlZC5cbiIsIHFjLT5pZCkpOwogCQkJCXJldHVybiAwOwogCQkJfQogCQl9CkBAIC01NjIsNTYgKzUyOSw1MSBAQAogCQlpbnQgaTsKIAogCQlmb3IgKGkgPSBNQVhDT05UUk9MUyAtIDE7IGkgPj0gMDsgaS0tKSB7Ci0JCQlpZiAobXhiX2NvbnRyb2xzW2ldLmlkID09IHZjLT5pZCkgeworCQkJaWYgKG14Yl9jb250cm9sc1tpXS5pZCA9PSB2Yy0+aWQpCiAJCQkJYnJlYWs7Ci0JCQl9CiAJCX0KIAotCQlpZiggaSA8IDAgKSB7CisJCWlmIChpIDwgMCkKIAkJCXJldHVybiAtRUFHQUlOOworCisJCWlmICh2Yy0+aWQgPT0gVjRMMl9DSURfQVVESU9fTVVURSkgeworCQkJdmMtPnZhbHVlID0gbXhiLT5jdXJfbXV0ZTsKKwkJCURFQl9EKCgiVklESU9DX0dfQ1RSTCBWNEwyX0NJRF9BVURJT19NVVRFOiVkLlxuIiwgdmMtPnZhbHVlKSk7CisJCQlyZXR1cm4gMDsKIAkJfQogCi0JCXN3aXRjaCAodmMtPmlkICkgewotCQkJY2FzZSBWNEwyX0NJRF9BVURJT19NVVRFOiB7Ci0JCQkJdmMtPnZhbHVlID0gbXhiLT5jdXJfbXV0ZTsKLQkJCQlERUJfRCgoIlZJRElPQ19HX0NUUkwgVjRMMl9DSURfQVVESU9fTVVURTolZC5cbiIsdmMtPnZhbHVlKSk7Ci0JCQkJcmV0dXJuIDA7Ci0JCQl9Ci0JCX0KLQotCQlERUJfRUUoKCJWSURJT0NfR19DVFJMIFY0TDJfQ0lEX0FVRElPX01VVEU6JWQuXG4iLHZjLT52YWx1ZSkpOworCQlERUJfRUUoKCJWSURJT0NfR19DVFJMIFY0TDJfQ0lEX0FVRElPX01VVEU6JWQuXG4iLCB2Yy0+dmFsdWUpKTsKIAkJcmV0dXJuIDA7CiAJfQogCiAJY2FzZSBWSURJT0NfU19DVFJMOgogCXsKLQkJc3RydWN0CXY0bDJfY29udHJvbAkqdmMgPSBhcmc7CisJCXN0cnVjdCB2NGwyX2NvbnRyb2wgKnZjID0gYXJnOwogCQlpbnQgaSA9IDA7CiAKIAkJZm9yIChpID0gTUFYQ09OVFJPTFMgLSAxOyBpID49IDA7IGktLSkgewotCQkJaWYgKG14Yl9jb250cm9sc1tpXS5pZCA9PSB2Yy0+aWQpIHsKKwkJCWlmIChteGJfY29udHJvbHNbaV0uaWQgPT0gdmMtPmlkKQogCQkJCWJyZWFrOwotCQkJfQogCQl9CiAKLQkJaWYoIGkgPCAwICkgeworCQlpZiAoaSA8IDApCiAJCQlyZXR1cm4gLUVBR0FJTjsKLQkJfQogCi0JCXN3aXRjaCAodmMtPmlkICkgewotCQkJY2FzZSBWNEwyX0NJRF9BVURJT19NVVRFOiB7Ci0JCQkJbXhiLT5jdXJfbXV0ZSA9IHZjLT52YWx1ZTsKLQkJCQlpZiggMCA9PSB2Yy0+dmFsdWUgKSB7Ci0JCQkJCS8qIHN3aXRjaCB0aGUgYXVkaW8tc291cmNlICovCi0JCQkJCW14Yi0+dGVhNjQyMF8xLT5kcml2ZXItPmNvbW1hbmQobXhiLT50ZWE2NDIwXzEsVEVBNjQyMF9TV0lUQ0gsICZURUE2NDIwX2xpbmVbdmlkZW9fYXVkaW9fY29ubmVjdFtteGItPmN1cl9pbnB1dF1dWzBdKTsKLQkJCQkJbXhiLT50ZWE2NDIwXzItPmRyaXZlci0+Y29tbWFuZChteGItPnRlYTY0MjBfMixURUE2NDIwX1NXSVRDSCwgJlRFQTY0MjBfbGluZVt2aWRlb19hdWRpb19jb25uZWN0W214Yi0+Y3VyX2lucHV0XV1bMV0pOwotCQkJCX0gZWxzZSB7Ci0JCQkJCW14Yi0+dGVhNjQyMF8xLT5kcml2ZXItPmNvbW1hbmQobXhiLT50ZWE2NDIwXzEsVEVBNjQyMF9TV0lUQ0gsICZURUE2NDIwX2xpbmVbNl1bMF0pOwotCQkJCQlteGItPnRlYTY0MjBfMi0+ZHJpdmVyLT5jb21tYW5kKG14Yi0+dGVhNjQyMF8yLFRFQTY0MjBfU1dJVENILCAmVEVBNjQyMF9saW5lWzZdWzFdKTsKLQkJCQl9Ci0JCQkJREVCX0VFKCgiVklESU9DX1NfQ1RSTCwgVjRMMl9DSURfQVVESU9fTVVURTogJWQuXG4iLHZjLT52YWx1ZSkpOwotCQkJCWJyZWFrOworCQlpZiAodmMtPmlkID09IFY0TDJfQ0lEX0FVRElPX01VVEUpIHsKKwkJCW14Yi0+Y3VyX211dGUgPSB2Yy0+dmFsdWU7CisJCQlpZiAoIXZjLT52YWx1ZSkgeworCQkJCS8qIHN3aXRjaCB0aGUgYXVkaW8tc291cmNlICovCisJCQkJbXhiLT50ZWE2NDIwXzEtPmRyaXZlci0+Y29tbWFuZChteGItPnRlYTY0MjBfMSwgVEVBNjQyMF9TV0lUQ0gsCisJCQkJCQkmVEVBNjQyMF9saW5lW3ZpZGVvX2F1ZGlvX2Nvbm5lY3RbbXhiLT5jdXJfaW5wdXRdXVswXSk7CisJCQkJbXhiLT50ZWE2NDIwXzItPmRyaXZlci0+Y29tbWFuZChteGItPnRlYTY0MjBfMiwgVEVBNjQyMF9TV0lUQ0gsCisJCQkJCQkmVEVBNjQyMF9saW5lW3ZpZGVvX2F1ZGlvX2Nvbm5lY3RbbXhiLT5jdXJfaW5wdXRdXVsxXSk7CisJCQl9IGVsc2UgeworCQkJCW14Yi0+dGVhNjQyMF8xLT5kcml2ZXItPmNvbW1hbmQobXhiLT50ZWE2NDIwXzEsIFRFQTY0MjBfU1dJVENILAorCQkJCQkJJlRFQTY0MjBfbGluZVs2XVswXSk7CisJCQkJbXhiLT50ZWE2NDIwXzItPmRyaXZlci0+Y29tbWFuZChteGItPnRlYTY0MjBfMiwgVEVBNjQyMF9TV0lUQ0gsCisJCQkJCQkmVEVBNjQyMF9saW5lWzZdWzFdKTsKIAkJCX0KKwkJCURFQl9FRSgoIlZJRElPQ19TX0NUUkwsIFY0TDJfQ0lEX0FVRElPX01VVEU6ICVkLlxuIiwgdmMtPnZhbHVlKSk7CiAJCX0KIAkJcmV0dXJuIDA7CiAJfQpAQCAtNjIwLDEwNiArNTgyLDg0IEBACiAJCWludCAqaW5wdXQgPSAoaW50ICopYXJnOwogCQkqaW5wdXQgPSBteGItPmN1cl9pbnB1dDsKIAotCQlERUJfRUUoKCJWSURJT0NfR19JTlBVVCAlZC5cbiIsKmlucHV0KSk7CisJCURFQl9FRSgoIlZJRElPQ19HX0lOUFVUICVkLlxuIiwgKmlucHV0KSk7CiAJCXJldHVybiAwOwogCX0KIAljYXNlIFZJRElPQ19TX0lOUFVUOgogCXsKIAkJaW50IGlucHV0ID0gKihpbnQgKilhcmc7Ci0JCXN0cnVjdAl0ZWE2NDE1Y19tdWx0aXBsZXggdm07CisJCXN0cnVjdCB0ZWE2NDE1Y19tdWx0aXBsZXggdm07CisJCXN0cnVjdCB2NGwyX3JvdXRpbmcgcm91dGU7CiAJCWludCBpID0gMDsKIAotCQlERUJfRUUoKCJWSURJT0NfU19JTlBVVCAlZC5cbiIsaW5wdXQpKTsKKwkJREVCX0VFKCgiVklESU9DX1NfSU5QVVQgJWQuXG4iLCBpbnB1dCkpOwogCi0JCWlmIChpbnB1dCA8IDAgfHwgaW5wdXQgPj0gTVhCX0lOUFVUUykgeworCQlpZiAoaW5wdXQgPCAwIHx8IGlucHV0ID49IE1YQl9JTlBVVFMpCiAJCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCi0JCS8qIGZpeG1lOiBsb2NrZSBkYXMgc2V0emVuIGRlcyBpbnB1dHMgbWl0IGhpbGZlIGRlcyBtdXRleGVzCi0JCW11dGV4X2xvY2soJmRldi0+bG9jayk7Ci0JCXZpZGVvX211eChkZXYsKmkpOwotCQltdXRleF91bmxvY2soJmRldi0+bG9jayk7Ci0JCSovCi0KLQkJLyogZml4bWU6IGNoZWNrIGlmIHN0cmVhbWluZyBjYXB0dXJlCi0JCWlmICggMCAhPSBkZXYtPnN0cmVhbWluZyApIHsKLQkJCURFQl9EKCgiVklESU9DX1NfSU5QVVQgaWxsZWdhbCB3aGlsZSBzdHJlYW1pbmcuXG4iKSk7Ci0JCQlyZXR1cm4gLUVQRVJNOwotCQl9Ci0JCSovCiAKIAkJbXhiLT5jdXJfaW5wdXQgPSBpbnB1dDsKIAotCQlzYWE3MTQ2X3NldF9ocHNfc291cmNlX2FuZF9zeW5jKGRldiwgaW5wdXRfcG9ydF9zZWxlY3Rpb25baW5wdXRdLmhwc19zb3VyY2UsIGlucHV0X3BvcnRfc2VsZWN0aW9uW2lucHV0XS5ocHNfc3luYyk7CisJCXNhYTcxNDZfc2V0X2hwc19zb3VyY2VfYW5kX3N5bmMoZGV2LCBpbnB1dF9wb3J0X3NlbGVjdGlvbltpbnB1dF0uaHBzX3NvdXJjZSwKKwkJCQlpbnB1dF9wb3J0X3NlbGVjdGlvbltpbnB1dF0uaHBzX3N5bmMpOwogCiAJCS8qIHByZXBhcmUgc3dpdGNoaW5nIG9mIHRlYTY0MTVjIGFuZCBzYWE3MTExYTsKIAkJICAgaGF2ZSBhIGxvb2sgYXQgdGhlICdiYWNrZ3JvdW5kJy1maWxlIGZvciBmdXJ0aGVyIGluZm9ybWF0aW9ucyAgKi8KLQkJc3dpdGNoKCBpbnB1dCApIHsKKwkJc3dpdGNoIChpbnB1dCkgeworCQljYXNlIFRVTkVSOgorCQkJaSA9IFNBQTcxMTVfQ09NUE9TSVRFMDsKKwkJCXZtLmluICA9IDM7CisJCQl2bS5vdXQgPSAxNzsKIAotCQkJY2FzZSBUVU5FUjoKLQkJCXsKLQkJCQlpID0gMDsKLQkJCQl2bS5pbiAgPSAzOwotCQkJCXZtLm91dCA9IDE3OwotCi0JCQlpZiAoIDAgIT0gbXhiLT50ZWE2NDE1Yy0+ZHJpdmVyLT5jb21tYW5kKG14Yi0+dGVhNjQxNWMsVEVBNjQxNUNfU1dJVENILCAmdm0pKSB7Ci0JCQkJCXByaW50aygiVklESU9DX1NfSU5QVVQ6IGNvdWxkIG5vdCBhZGRyZXNzIHRlYTY0MTVjICMxXG4iKTsKLQkJCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCQkJfQotCQkJCS8qIGNvbm5lY3QgdHVuZXItb3V0cHV0IGFsd2F5cyB0byBtdWx0aWNhYmxlICovCi0JCQkJdm0uaW4gID0gMzsKLQkJCQl2bS5vdXQgPSAxMzsKLQkJCQlicmVhazsKKwkJCWlmIChteGItPnRlYTY0MTVjLT5kcml2ZXItPmNvbW1hbmQobXhiLT50ZWE2NDE1YywgVEVBNjQxNUNfU1dJVENILCAmdm0pKSB7CisJCQkJcHJpbnRrKEtFUk5fRVJSICJWSURJT0NfU19JTlBVVDogY291bGQgbm90IGFkZHJlc3MgdGVhNjQxNWMgIzFcbiIpOworCQkJCXJldHVybiAtRUZBVUxUOwogCQkJfQotCQkJY2FzZSBBVVgzX1lDOgotCQkJewotCQkJCS8qIG5vdGhpbmcgdG8gYmUgZG9uZSBoZXJlLiBhdXgzX3ljIGlzCi0JCQkJICAgZGlyZWN0bHkgY29ubmVjdGVkIHRvIHRoZSBzYWE3MTFhICovCi0JCQkJaSA9IDU7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCQljYXNlIEFVWDM6Ci0JCQl7Ci0JCQkJLyogbm90aGluZyB0byBiZSBkb25lIGhlcmUuIGF1eDMgaXMKLQkJCQkgICBkaXJlY3RseSBjb25uZWN0ZWQgdG8gdGhlIHNhYTcxMWEgKi8KLQkJCQlpID0gMTsKLQkJCQlicmVhazsKLQkJCX0KLQkJCWNhc2UgQVVYMToKLQkJCXsKLQkJCQlpID0gMDsKLQkJCQl2bS5pbiAgPSAxOwotCQkJCXZtLm91dCA9IDE3OwotCQkJCWJyZWFrOwotCQkJfQorCQkJLyogY29ubmVjdCB0dW5lci1vdXRwdXQgYWx3YXlzIHRvIG11bHRpY2FibGUgKi8KKwkJCXZtLmluICA9IDM7CisJCQl2bS5vdXQgPSAxMzsKKwkJCWJyZWFrOworCQljYXNlIEFVWDNfWUM6CisJCQkvKiBub3RoaW5nIHRvIGJlIGRvbmUgaGVyZS4gYXV4M195YyBpcworCQkJICAgZGlyZWN0bHkgY29ubmVjdGVkIHRvIHRoZSBzYWE3MTFhICovCisJCQlpID0gU0FBNzExNV9TVklERU8xOworCQkJYnJlYWs7CisJCWNhc2UgQVVYMzoKKwkJCS8qIG5vdGhpbmcgdG8gYmUgZG9uZSBoZXJlLiBhdXgzIGlzCisJCQkgICBkaXJlY3RseSBjb25uZWN0ZWQgdG8gdGhlIHNhYTcxMWEgKi8KKwkJCWkgPSBTQUE3MTE1X0NPTVBPU0lURTE7CisJCQlicmVhazsKKwkJY2FzZSBBVVgxOgorCQkJaSA9IFNBQTcxMTVfQ09NUE9TSVRFMDsKKwkJCXZtLmluICA9IDE7CisJCQl2bS5vdXQgPSAxNzsKKwkJCWJyZWFrOwogCQl9CiAKIAkJLyogc3dpdGNoIHZpZGVvIGluIHRlYTY0MTVjIG9ubHkgaWYgbmVjZXNzYXJ5ICovCi0JCXN3aXRjaCggaW5wdXQgKSB7Ci0JCQljYXNlIFRVTkVSOgotCQkJY2FzZSBBVVgxOgotCQkJewotCQkJCWlmICggMCAhPSBteGItPnRlYTY0MTVjLT5kcml2ZXItPmNvbW1hbmQobXhiLT50ZWE2NDE1YyxURUE2NDE1Q19TV0lUQ0gsICZ2bSkpIHsKLQkJCQkJcHJpbnRrKCJWSURJT0NfU19JTlBVVDogY291bGQgbm90IGFkZHJlc3MgdGVhNjQxNWMgIzNcbiIpOwotCQkJCQlyZXR1cm4gLUVGQVVMVDsKLQkJCQl9Ci0JCQkJYnJlYWs7CisJCXN3aXRjaCAoaW5wdXQpIHsKKwkJY2FzZSBUVU5FUjoKKwkJY2FzZSBBVVgxOgorCQkJaWYgKG14Yi0+dGVhNjQxNWMtPmRyaXZlci0+Y29tbWFuZChteGItPnRlYTY0MTVjLCBURUE2NDE1Q19TV0lUQ0gsICZ2bSkpIHsKKwkJCQlwcmludGsoS0VSTl9FUlIgIlZJRElPQ19TX0lOUFVUOiBjb3VsZCBub3QgYWRkcmVzcyB0ZWE2NDE1YyAjM1xuIik7CisJCQkJcmV0dXJuIC1FRkFVTFQ7CiAJCQl9Ci0JCQlkZWZhdWx0OgotCQkJewotCQkJCWJyZWFrOwotCQkJfQorCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlicmVhazsKIAkJfQogCiAJCS8qIHN3aXRjaCB2aWRlbyBpbiBzYWE3MTExYSAqLwotCQlpZiAoIDAgIT0gbXhiLT5zYWE3MTExYS0+ZHJpdmVyLT5jb21tYW5kKG14Yi0+c2FhNzExMWEsREVDT0RFUl9TRVRfSU5QVVQsICZpKSkgeworCQlyb3V0ZS5pbnB1dCA9IGk7CisJCXJvdXRlLm91dHB1dCA9IDA7CisJCWlmIChteGItPnNhYTcxMTFhLT5kcml2ZXItPmNvbW1hbmQobXhiLT5zYWE3MTExYSwgVklESU9DX0lOVF9TX1ZJREVPX1JPVVRJTkcsICZyb3V0ZSkpCiAJCQlwcmludGsoIlZJRElPQ19TX0lOUFVUOiBjb3VsZCBub3QgYWRkcmVzcyBzYWE3MTExYSAjMS5cbiIpOwotCQl9CiAKIAkJLyogc3dpdGNoIHRoZSBhdWRpby1zb3VyY2Ugb25seSBpZiBuZWNlc3NhcnkgKi8KIAkJaWYoIDAgPT0gbXhiLT5jdXJfbXV0ZSApIHsKLQkJCW14Yi0+dGVhNjQyMF8xLT5kcml2ZXItPmNvbW1hbmQobXhiLT50ZWE2NDIwXzEsVEVBNjQyMF9TV0lUQ0gsICZURUE2NDIwX2xpbmVbdmlkZW9fYXVkaW9fY29ubmVjdFtpbnB1dF1dWzBdKTsKLQkJCW14Yi0+dGVhNjQyMF8yLT5kcml2ZXItPmNvbW1hbmQobXhiLT50ZWE2NDIwXzIsVEVBNjQyMF9TV0lUQ0gsICZURUE2NDIwX2xpbmVbdmlkZW9fYXVkaW9fY29ubmVjdFtpbnB1dF1dWzFdKTsKKwkJCW14Yi0+dGVhNjQyMF8xLT5kcml2ZXItPmNvbW1hbmQobXhiLT50ZWE2NDIwXzEsIFRFQTY0MjBfU1dJVENILAorCQkJCQkmVEVBNjQyMF9saW5lW3ZpZGVvX2F1ZGlvX2Nvbm5lY3RbaW5wdXRdXVswXSk7CisJCQlteGItPnRlYTY0MjBfMi0+ZHJpdmVyLT5jb21tYW5kKG14Yi0+dGVhNjQyMF8yLCBURUE2NDIwX1NXSVRDSCwKKwkJCQkgICAgICAgJlRFQTY0MjBfbGluZVt2aWRlb19hdWRpb19jb25uZWN0W2lucHV0XV1bMV0pOwogCQl9CiAKIAkJcmV0dXJuIDA7CkBAIC03MjcsMTE0ICs2NjcsNDQgQEAKIAljYXNlIFZJRElPQ19HX1RVTkVSOgogCXsKIAkJc3RydWN0IHY0bDJfdHVuZXIgKnQgPSBhcmc7Ci0JCWludCBieXRlID0gMDsKIAotCQlpZiggMCAhPSB0LT5pbmRleCApIHsKKwkJaWYgKHQtPmluZGV4KSB7CiAJCQlERUJfRCgoIlZJRElPQ19HX1RVTkVSOiBjaGFubmVsICVkIGRvZXMgbm90IGhhdmUgYSB0dW5lciBhdHRhY2hlZC5cbiIsIHQtPmluZGV4KSk7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCiAJCURFQl9FRSgoIlZJRElPQ19HX1RVTkVSOiAlZFxuIiwgdC0+aW5kZXgpKTsKIAotCQltZW1zZXQodCwwLHNpemVvZigqdCkpOwotCQlzdHJjcHkodC0+bmFtZSwgIlRlbGV2aXNpb24iKTsKKwkJbWVtc2V0KHQsIDAsIHNpemVvZigqdCkpOworCQlpMmNfY2xpZW50c19jb21tYW5kKCZteGItPmkyY19hZGFwdGVyLCBjbWQsIGFyZyk7CiAKKwkJc3RybGNweSh0LT5uYW1lLCAiVFYgVHVuZXIiLCBzaXplb2YodC0+bmFtZSkpOwogCQl0LT50eXBlID0gVjRMMl9UVU5FUl9BTkFMT0dfVFY7Ci0JCXQtPmNhcGFiaWxpdHkgPSBWNEwyX1RVTkVSX0NBUF9OT1JNIHwgVjRMMl9UVU5FUl9DQVBfU1RFUkVPIHwgVjRMMl9UVU5FUl9DQVBfTEFORzEgfCBWNEwyX1RVTkVSX0NBUF9MQU5HMiB8IFY0TDJfVFVORVJfQ0FQX1NBUDsKLQkJdC0+cmFuZ2Vsb3cgPSA3NzI7CS8qIDQ4LjI1IE1IWiAvIDYyLjUga0h6ID0gNzcyLCBzZWUgZmkxMjE2bWsyLXNwZWNzLCBwYWdlIDIgKi8KLQkJdC0+cmFuZ2VoaWdoID0gMTM2ODQ7CS8qIDg1NS4yNSBNSHogLyA2Mi41IGtIeiA9IDEzNjg0ICovCi0JCS8qIEZJWE1FOiBhZGQgdGhlIHJlYWwgc2lnbmFsIHN0cmVuZ3RoIGhlcmUgKi8KLQkJdC0+c2lnbmFsID0gMHhmZmZmOwotCQl0LT5hZmMgPSAwOwotCi0JCW14Yi0+dGRhOTg0MC0+ZHJpdmVyLT5jb21tYW5kKG14Yi0+dGRhOTg0MCxUREE5ODQwX0RFVEVDVCwgJmJ5dGUpOworCQl0LT5jYXBhYmlsaXR5ID0gVjRMMl9UVU5FUl9DQVBfTk9STSB8IFY0TDJfVFVORVJfQ0FQX1NURVJFTyB8IFwKKwkJCVY0TDJfVFVORVJfQ0FQX0xBTkcxIHwgVjRMMl9UVU5FUl9DQVBfTEFORzIgfCBWNEwyX1RVTkVSX0NBUF9TQVA7CiAJCXQtPmF1ZG1vZGUgPSBteGItPmN1cl9tb2RlOwotCi0JCWlmKCBieXRlIDwgMCApIHsKLQkJCXQtPnJ4c3ViY2hhbnMgID0gVjRMMl9UVU5FUl9TVUJfTU9OTzsKLQkJfSBlbHNlIHsKLQkJCXN3aXRjaChieXRlKSB7Ci0JCQkJY2FzZSBUREE5ODQwX01PTk9fREVURUNUOiB7Ci0JCQkJCXQtPnJ4c3ViY2hhbnMgCT0gVjRMMl9UVU5FUl9TVUJfTU9OTzsKLQkJCQkJREVCX0QoKCJWSURJT0NfR19UVU5FUjogVjRMMl9UVU5FUl9NT0RFX01PTk8uXG4iKSk7Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCQljYXNlIFREQTk4NDBfRFVBTF9ERVRFQ1Q6IHsKLQkJCQkJdC0+cnhzdWJjaGFucyAJPSBWNEwyX1RVTkVSX1NVQl9MQU5HMSB8IFY0TDJfVFVORVJfU1VCX0xBTkcyOwotCQkJCQlERUJfRCgoIlZJRElPQ19HX1RVTkVSOiBWNEwyX1RVTkVSX01PREVfTEFORzEuXG4iKSk7Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCQljYXNlIFREQTk4NDBfU1RFUkVPX0RFVEVDVDogewotCQkJCQl0LT5yeHN1YmNoYW5zIAk9IFY0TDJfVFVORVJfU1VCX1NURVJFTyB8IFY0TDJfVFVORVJfU1VCX01PTk87Ci0JCQkJCURFQl9EKCgiVklESU9DX0dfVFVORVI6IFY0TDJfVFVORVJfTU9ERV9TVEVSRU8uXG4iKSk7Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCQlkZWZhdWx0OiB7IC8qIFREQTk4NDBfSU5DT1JSRUNUX0RFVEVDVCAqLwotCQkJCQl0LT5yeHN1YmNoYW5zIAk9IFY0TDJfVFVORVJfTU9ERV9NT05POwotCQkJCQlERUJfRCgoIlZJRElPQ19HX1RVTkVSOiBUREE5ODQwX0lOQ09SUkVDVF9ERVRFQ1QgPT4gVjRMMl9UVU5FUl9NT0RFX01PTk9cbiIpKTsKLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJfQotCQl9Ci0KIAkJcmV0dXJuIDA7CiAJfQogCWNhc2UgVklESU9DX1NfVFVORVI6CiAJewogCQlzdHJ1Y3QgdjRsMl90dW5lciAqdCA9IGFyZzsKLQkJaW50IHJlc3VsdCA9IDA7Ci0JCWludCBieXRlID0gMDsKIAotCQlpZiggMCAhPSB0LT5pbmRleCApIHsKKwkJaWYgKHQtPmluZGV4KSB7CiAJCQlERUJfRCgoIlZJRElPQ19TX1RVTkVSOiBjaGFubmVsICVkIGRvZXMgbm90IGhhdmUgYSB0dW5lciBhdHRhY2hlZC5cbiIsdC0+aW5kZXgpKTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAKLQkJc3dpdGNoKHQtPmF1ZG1vZGUpIHsKLQkJCWNhc2UgVjRMMl9UVU5FUl9NT0RFX1NURVJFTzogewotCQkJCW14Yi0+Y3VyX21vZGUgPSBWNEwyX1RVTkVSX01PREVfU1RFUkVPOwotCQkJCWJ5dGUgPSBUREE5ODQwX1NFVF9TVEVSRU87Ci0JCQkJREVCX0QoKCJWSURJT0NfU19UVU5FUjogVjRMMl9UVU5FUl9NT0RFX1NURVJFT1xuIikpOwotCQkJCWJyZWFrOwotCQkJfQotCQkJY2FzZSBWNEwyX1RVTkVSX01PREVfTEFORzFfTEFORzI6IHsKLQkJCQlteGItPmN1cl9tb2RlID0gVjRMMl9UVU5FUl9NT0RFX0xBTkcxX0xBTkcyOwotCQkJCWJ5dGUgPSBUREE5ODQwX1NFVF9CT1RIOwotCQkJCURFQl9EKCgiVklESU9DX1NfVFVORVI6IFY0TDJfVFVORVJfTU9ERV9MQU5HMV9MQU5HMlxuIikpOwotCQkJCWJyZWFrOwotCQkJfQotCQkJY2FzZSBWNEwyX1RVTkVSX01PREVfTEFORzE6IHsKLQkJCQlteGItPmN1cl9tb2RlID0gVjRMMl9UVU5FUl9NT0RFX0xBTkcxOwotCQkJCWJ5dGUgPSBUREE5ODQwX1NFVF9MQU5HMTsKLQkJCQlERUJfRCgoIlZJRElPQ19TX1RVTkVSOiBWNEwyX1RVTkVSX01PREVfTEFORzFcbiIpKTsKLQkJCQlicmVhazsKLQkJCX0KLQkJCWNhc2UgVjRMMl9UVU5FUl9NT0RFX0xBTkcyOiB7Ci0JCQkJbXhiLT5jdXJfbW9kZSA9IFY0TDJfVFVORVJfTU9ERV9MQU5HMjsKLQkJCQlieXRlID0gVERBOTg0MF9TRVRfTEFORzI7Ci0JCQkJREVCX0QoKCJWSURJT0NfU19UVU5FUjogVjRMMl9UVU5FUl9NT0RFX0xBTkcyXG4iKSk7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCQlkZWZhdWx0OiB7IC8qIGNhc2UgVjRMMl9UVU5FUl9NT0RFX01PTk86IHsqLwotCQkJCW14Yi0+Y3VyX21vZGUgPSBWNEwyX1RVTkVSX01PREVfTU9OTzsKLQkJCQlieXRlID0gVERBOTg0MF9TRVRfTU9OTzsKLQkJCQlERUJfRCgoIlZJRElPQ19TX1RVTkVSOiBUREE5ODQwX1NFVF9NT05PXG4iKSk7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCX0KLQotCQlpZiggMCAhPSAocmVzdWx0ID0gbXhiLT50ZGE5ODQwLT5kcml2ZXItPmNvbW1hbmQobXhiLT50ZGE5ODQwLCBUREE5ODQwX1NXSVRDSCwgJmJ5dGUpKSkgewotCQkJcHJpbnRrKCJWSURJT0NfU19UVU5FUiBlcnJvci4gcmVzdWx0OiVkLCBieXRlOiVkXG4iLHJlc3VsdCxieXRlKTsKLQkJfQotCisJCW14Yi0+Y3VyX21vZGUgPSB0LT5hdWRtb2RlOworCQlpMmNfY2xpZW50c19jb21tYW5kKCZteGItPmkyY19hZGFwdGVyLCBjbWQsIGFyZyk7CiAJCXJldHVybiAwOwogCX0KIAljYXNlIFZJRElPQ19HX0ZSRVFVRU5DWToKIAl7CiAJCXN0cnVjdCB2NGwyX2ZyZXF1ZW5jeSAqZiA9IGFyZzsKIAotCQlpZigwICE9IG14Yi0+Y3VyX2lucHV0KSB7Ci0JCQlERUJfRCgoIlZJRElPQ19HX0ZSRVE6IGNoYW5uZWwgJWQgZG9lcyBub3QgaGF2ZSBhIHR1bmVyIVxuIixteGItPmN1cl9pbnB1dCkpOworCQlpZiAobXhiLT5jdXJfaW5wdXQpIHsKKwkJCURFQl9EKCgiVklESU9DX0dfRlJFUTogY2hhbm5lbCAlZCBkb2VzIG5vdCBoYXZlIGEgdHVuZXIhXG4iLAorCQkJCQkJbXhiLT5jdXJfaW5wdXQpKTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAKQEAgLTg0NywxNCArNzE3LDE0IEBACiAJewogCQlzdHJ1Y3QgdjRsMl9mcmVxdWVuY3kgKmYgPSBhcmc7CiAKLQkJaWYgKDAgIT0gZi0+dHVuZXIpCisJCWlmIChmLT50dW5lcikKIAkJCXJldHVybiAtRUlOVkFMOwogCiAJCWlmIChWNEwyX1RVTkVSX0FOQUxPR19UViAhPSBmLT50eXBlKQogCQkJcmV0dXJuIC1FSU5WQUw7CiAKLQkJaWYoMCAhPSBteGItPmN1cl9pbnB1dCkgewotCQkJREVCX0QoKCJWSURJT0NfU19GUkVROiBjaGFubmVsICVkIGRvZXMgbm90IGhhdmUgYSB0dW5lciFcbiIsbXhiLT5jdXJfaW5wdXQpKTsKKwkJaWYgKG14Yi0+Y3VyX2lucHV0KSB7CisJCQlERUJfRCgoIlZJRElPQ19TX0ZSRVE6IGNoYW5uZWwgJWQgZG9lcyBub3QgaGF2ZSBhIHR1bmVyIVxuIiwgbXhiLT5jdXJfaW5wdXQpKTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAKQEAgLTg3NSw3ICs3NDUsNyBAQAogCXsKIAkJaW50IGkgPSAqKGludCopYXJnOwogCi0JCWlmKCBpIDwgMCB8fCBpID49IE1YQl9BVURJT1MgKSB7CisJCWlmIChpIDwgMCB8fCBpID49IE1YQl9BVURJT1MpIHsKIAkJCURFQl9EKCgiaWxsZWdhbCBhcmd1bWVudCB0byBNWEJfU19BVURJT19DRDogaTolZC5cbiIsaSkpOwogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KQEAgLTg5MSw3ICs3NjEsNyBAQAogCXsKIAkJaW50IGkgPSAqKGludCopYXJnOwogCi0JCWlmKCBpIDwgMCB8fCBpID49IE1YQl9BVURJT1MgKSB7CisJCWlmIChpIDwgMCB8fCBpID49IE1YQl9BVURJT1MpIHsKIAkJCURFQl9EKCgiaWxsZWdhbCBhcmd1bWVudCB0byBNWEJfU19BVURJT19MSU5FOiBpOiVkLlxuIixpKSk7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQpAQCAtOTA2LDEyICs3NzYsMTIgQEAKIAl7CiAJCXN0cnVjdCB2NGwyX2F1ZGlvICphID0gYXJnOwogCi0JCWlmKCBhLT5pbmRleCA8IDAgfHwgYS0+aW5kZXggPiBNWEJfSU5QVVRTICkgewotCQkJREVCX0QoKCJWSURJT0NfR19BVURJTyAlZCBvdXQgb2YgcmFuZ2UuXG4iLGEtPmluZGV4KSk7CisJCWlmIChhLT5pbmRleCA8IDAgfHwgYS0+aW5kZXggPiBNWEJfSU5QVVRTKSB7CisJCQlERUJfRCgoIlZJRElPQ19HX0FVRElPICVkIG91dCBvZiByYW5nZS5cbiIsIGEtPmluZGV4KSk7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCi0JCURFQl9FRSgoIlZJRElPQ19HX0FVRElPICVkLlxuIixhLT5pbmRleCkpOworCQlERUJfRUUoKCJWSURJT0NfR19BVURJTyAlZC5cbiIsIGEtPmluZGV4KSk7CiAJCW1lbWNweShhLCAmbXhiX2F1ZGlvc1t2aWRlb19hdWRpb19jb25uZWN0W214Yi0+Y3VyX2lucHV0XV0sIHNpemVvZihzdHJ1Y3QgdjRsMl9hdWRpbykpOwogCiAJCXJldHVybiAwOwpAQCAtOTE5LDkgKzc4OSwxNiBAQAogCWNhc2UgVklESU9DX1NfQVVESU86CiAJewogCQlzdHJ1Y3QgdjRsMl9hdWRpbyAqYSA9IGFyZzsKLQkJREVCX0QoKCJWSURJT0NfU19BVURJTyAlZC5cbiIsYS0+aW5kZXgpKTsKKworCQlERUJfRCgoIlZJRElPQ19TX0FVRElPICVkLlxuIiwgYS0+aW5kZXgpKTsKIAkJcmV0dXJuIDA7CiAJfQorI2lmZGVmIENPTkZJR19WSURFT19BRFZfREVCVUcKKwljYXNlIFZJRElPQ19EQkdfU19SRUdJU1RFUjoKKwljYXNlIFZJRElPQ19EQkdfR19SRUdJU1RFUjoKKwkJaTJjX2NsaWVudHNfY29tbWFuZCgmbXhiLT5pMmNfYWRhcHRlciwgY21kLCBhcmcpOworCQlyZXR1cm4gMDsKKyNlbmRpZgogCWRlZmF1bHQ6CiAvKgogCQlERUIyKHByaW50aygiZG9lcyBub3QgaGFuZGxlIHRoaXMgaW9jdGwuXG4iKSk7CkBAIC05NDQsNyArODIxLDcgQEAKIAkJLyogc2V0IHRoZSA3MTQ2IGdwaW8gcmVnaXN0ZXIgLS0gSSBkb24ndCBrbm93IHdoYXQgdGhpcyBkb2VzIGV4YWN0bHkgKi8KIAkJc2FhNzE0Nl93cml0ZShkZXYsIEdQSU9fQ1RSTCwgMHgwMDQwNDA1MCk7CiAJCS8qIHVuc2V0IHRoZSA3MTExIGdwaW8gcmVnaXN0ZXIgLS0gSSBkb24ndCBrbm93IHdoYXQgdGhpcyBkb2VzIGV4YWN0bHkgKi8KLQkJbXhiLT5zYWE3MTExYS0+ZHJpdmVyLT5jb21tYW5kKG14Yi0+c2FhNzExMWEsIERFQ09ERVJfU0VUX0dQSU8sICZ6ZXJvKTsKKwkJbXhiLT5zYWE3MTExYS0+ZHJpdmVyLT5jb21tYW5kKG14Yi0+c2FhNzExMWEsIFZJRElPQ19JTlRfU19HUElPLCAmemVybyk7CiAJCW14Yi0+dHVuZXItPmRyaXZlci0+Y29tbWFuZChteGItPnR1bmVyLCBWSURJT0NfU19TVEQsICZzdGQpOwogCX0gZWxzZSB7CiAJCXY0bDJfc3RkX2lkIHN0ZCA9IFY0TDJfU1REX1BBTF9CRzsKQEAgLTk1Myw3ICs4MzAsNyBAQAogCQkvKiBzZXQgdGhlIDcxNDYgZ3BpbyByZWdpc3RlciAtLSBJIGRvbid0IGtub3cgd2hhdCB0aGlzIGRvZXMgZXhhY3RseSAqLwogCQlzYWE3MTQ2X3dyaXRlKGRldiwgR1BJT19DVFJMLCAweDAwNDA0MDUwKTsKIAkJLyogc2V0IHRoZSA3MTExIGdwaW8gcmVnaXN0ZXIgLS0gSSBkb24ndCBrbm93IHdoYXQgdGhpcyBkb2VzIGV4YWN0bHkgKi8KLQkJbXhiLT5zYWE3MTExYS0+ZHJpdmVyLT5jb21tYW5kKG14Yi0+c2FhNzExMWEsIERFQ09ERVJfU0VUX0dQSU8sICZvbmUpOworCQlteGItPnNhYTcxMTFhLT5kcml2ZXItPmNvbW1hbmQobXhiLT5zYWE3MTExYSwgVklESU9DX0lOVF9TX0dQSU8sICZvbmUpOwogCQlteGItPnR1bmVyLT5kcml2ZXItPmNvbW1hbmQobXhiLT50dW5lciwgVklESU9DX1NfU1RELCAmc3RkKTsKIAl9CiAJcmV0dXJuIDA7CkBAIC0xMDI5LDcgKzkwNiw3IEBACiAKIHN0YXRpYyBpbnQgX19pbml0IG14Yl9pbml0X21vZHVsZSh2b2lkKQogewotCWlmKCAwICE9IHNhYTcxNDZfcmVnaXN0ZXJfZXh0ZW5zaW9uKCZleHRlbnNpb24pKSB7CisJaWYgKHNhYTcxNDZfcmVnaXN0ZXJfZXh0ZW5zaW9uKCZleHRlbnNpb24pKSB7CiAJCURFQl9TKCgiZmFpbGVkIHRvIHJlZ2lzdGVyIGV4dGVuc2lvbi5cbiIpKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9vdjUxMS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9vdjUxMS5jCmluZGV4IGM2ODUyNDAuLjIxMGYxMjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vb3Y1MTEuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL292NTExLmMKQEAgLTk3NCwxNCArOTc0LDE0IEBACiAKIAlmb3IgKGkgPSByZWcxOyBpIDw9IHJlZ247IGkrKykgewogCQlyYyA9IGkyY19yKG92LCBpKTsKLQkJaW5mbygiU2Vuc29yWzB4JTAyWF0gPSAweCUwMlgiLCBpLCByYyk7CisJCWRldl9pbmZvKCZvdi0+ZGV2LT5kZXYsICJTZW5zb3JbMHglMDJYXSA9IDB4JTAyWFxuIiwgaSwgcmMpOwogCX0KIH0KIAogc3RhdGljIHZvaWQKIGR1bXBfaTJjX3JlZ3Moc3RydWN0IHVzYl9vdjUxMSAqb3YpCiB7Ci0JaW5mbygiSTJDIFJFR1MiKTsKKwlkZXZfaW5mbygmb3YtPmRldi0+ZGV2LCAiSTJDIFJFR1NcbiIpOwogCWR1bXBfaTJjX3JhbmdlKG92LCAweDAwLCAweDdDKTsKIH0KIApAQCAtOTkyLDI4ICs5OTIsMjggQEAKIAogCWZvciAoaSA9IHJlZzE7IGkgPD0gcmVnbjsgaSsrKSB7CiAJCXJjID0gcmVnX3Iob3YsIGkpOwotCQlpbmZvKCJPVjUxMVsweCUwMlhdID0gMHglMDJYIiwgaSwgcmMpOworCQlkZXZfaW5mbygmb3YtPmRldi0+ZGV2LCAiT1Y1MTFbMHglMDJYXSA9IDB4JTAyWFxuIiwgaSwgcmMpOwogCX0KIH0KIAogc3RhdGljIHZvaWQKIG92NTExX2R1bXBfcmVncyhzdHJ1Y3QgdXNiX292NTExICpvdikKIHsKLQlpbmZvKCJDQU1FUkEgSU5URVJGQUNFIFJFR1MiKTsKKwlkZXZfaW5mbygmb3YtPmRldi0+ZGV2LCAiQ0FNRVJBIElOVEVSRkFDRSBSRUdTXG4iKTsKIAlkdW1wX3JlZ19yYW5nZShvdiwgMHgxMCwgMHgxZik7Ci0JaW5mbygiRFJBTSBJTlRFUkZBQ0UgUkVHUyIpOworCWRldl9pbmZvKCZvdi0+ZGV2LT5kZXYsICJEUkFNIElOVEVSRkFDRSBSRUdTXG4iKTsKIAlkdW1wX3JlZ19yYW5nZShvdiwgMHgyMCwgMHgyMyk7Ci0JaW5mbygiSVNPIEZJRk8gUkVHUyIpOworCWRldl9pbmZvKCZvdi0+ZGV2LT5kZXYsICJJU08gRklGTyBSRUdTXG4iKTsKIAlkdW1wX3JlZ19yYW5nZShvdiwgMHgzMCwgMHgzMSk7Ci0JaW5mbygiUElPIFJFR1MiKTsKKwlkZXZfaW5mbygmb3YtPmRldi0+ZGV2LCAiUElPIFJFR1NcbiIpOwogCWR1bXBfcmVnX3JhbmdlKG92LCAweDM4LCAweDM5KTsKIAlkdW1wX3JlZ19yYW5nZShvdiwgMHgzZSwgMHgzZSk7Ci0JaW5mbygiSTJDIFJFR1MiKTsKKwlkZXZfaW5mbygmb3YtPmRldi0+ZGV2LCAiSTJDIFJFR1NcbiIpOwogCWR1bXBfcmVnX3JhbmdlKG92LCAweDQwLCAweDQ5KTsKLQlpbmZvKCJTWVNURU0gQ09OVFJPTCBSRUdTIik7CisJZGV2X2luZm8oJm92LT5kZXYtPmRldiwgIlNZU1RFTSBDT05UUk9MIFJFR1NcbiIpOwogCWR1bXBfcmVnX3JhbmdlKG92LCAweDUwLCAweDU1KTsKIAlkdW1wX3JlZ19yYW5nZShvdiwgMHg1ZSwgMHg1Zik7Ci0JaW5mbygiT21uaUNFIFJFR1MiKTsKKwlkZXZfaW5mbygmb3YtPmRldi0+ZGV2LCAiT21uaUNFIFJFR1NcbiIpOwogCWR1bXBfcmVnX3JhbmdlKG92LCAweDcwLCAweDc5KTsKIAkvKiBOT1RFOiBRdWFudGl6YXRpb24gdGFibGVzIGFyZSBub3QgcmVhZGFibGUuIFlvdSB3aWxsIGdldCB0aGUgdmFsdWUKIAkgKiBpbiByZWcuIDB4NzkgZm9yIGV2ZXJ5IHRhYmxlIHJlZ2lzdGVyICovCkBAIC0xMDI1LDI1ICsxMDI1LDI1IEBACiBzdGF0aWMgdm9pZAogb3Y1MThfZHVtcF9yZWdzKHN0cnVjdCB1c2Jfb3Y1MTEgKm92KQogewotCWluZm8oIlZJREVPIE1PREUgUkVHUyIpOworCWRldl9pbmZvKCZvdi0+ZGV2LT5kZXYsICJWSURFTyBNT0RFIFJFR1NcbiIpOwogCWR1bXBfcmVnX3JhbmdlKG92LCAweDIwLCAweDJmKTsKLQlpbmZvKCJEQVRBIFBVTVAgQU5EIFNOQVBTSE9UIFJFR1MiKTsKKwlkZXZfaW5mbygmb3YtPmRldi0+ZGV2LCAiREFUQSBQVU1QIEFORCBTTkFQU0hPVCBSRUdTXG4iKTsKIAlkdW1wX3JlZ19yYW5nZShvdiwgMHgzMCwgMHgzZik7Ci0JaW5mbygiSTJDIFJFR1MiKTsKKwlkZXZfaW5mbygmb3YtPmRldi0+ZGV2LCAiSTJDIFJFR1NcbiIpOwogCWR1bXBfcmVnX3JhbmdlKG92LCAweDQwLCAweDRmKTsKLQlpbmZvKCJTWVNURU0gQ09OVFJPTCBBTkQgVkVORE9SIFJFR1MiKTsKKwlkZXZfaW5mbygmb3YtPmRldi0+ZGV2LCAiU1lTVEVNIENPTlRST0wgQU5EIFZFTkRPUiBSRUdTXG4iKTsKIAlkdW1wX3JlZ19yYW5nZShvdiwgMHg1MCwgMHg1Zik7Ci0JaW5mbygiNjAgLSA2RiIpOworCWRldl9pbmZvKCZvdi0+ZGV2LT5kZXYsICI2MCAtIDZGXG4iKTsKIAlkdW1wX3JlZ19yYW5nZShvdiwgMHg2MCwgMHg2Zik7Ci0JaW5mbygiNzAgLSA3RiIpOworCWRldl9pbmZvKCZvdi0+ZGV2LT5kZXYsICI3MCAtIDdGXG4iKTsKIAlkdW1wX3JlZ19yYW5nZShvdiwgMHg3MCwgMHg3Zik7Ci0JaW5mbygiWSBRVUFOVElaQVRJT04gVEFCTEUiKTsKKwlkZXZfaW5mbygmb3YtPmRldi0+ZGV2LCAiWSBRVUFOVElaQVRJT04gVEFCTEVcbiIpOwogCWR1bXBfcmVnX3JhbmdlKG92LCAweDgwLCAweDhmKTsKLQlpbmZvKCJVViBRVUFOVElaQVRJT04gVEFCTEUiKTsKKwlkZXZfaW5mbygmb3YtPmRldi0+ZGV2LCAiVVYgUVVBTlRJWkFUSU9OIFRBQkxFXG4iKTsKIAlkdW1wX3JlZ19yYW5nZShvdiwgMHg5MCwgMHg5Zik7Ci0JaW5mbygiQTAgLSBCRiIpOworCWRldl9pbmZvKCZvdi0+ZGV2LT5kZXYsICJBMCAtIEJGXG4iKTsKIAlkdW1wX3JlZ19yYW5nZShvdiwgMHhhMCwgMHhiZik7Ci0JaW5mbygiQ0JSIik7CisJZGV2X2luZm8oJm92LT5kZXYtPmRldiwgIkNCUlxuIik7CiAJZHVtcF9yZWdfcmFuZ2Uob3YsIDB4YzAsIDB4Y2YpOwogfQogI2VuZGlmCkBAIC0xMDk4LDkgKzEwOTgsMTAgQEAKIAkJcmVnX3cob3YsIFI1MXhfU1lTX1NOQVAsIDB4MDIpOwogCQlyZWdfdyhvdiwgUjUxeF9TWVNfU05BUCwgMHgwMCk7CiAJfSBlbHNlIGlmIChvdi0+YmNsYXNzID09IEJDTF9PVjUxOCkgewotCQl3YXJuKCJzbmFwc2hvdCByZXNldCBub3Qgc3VwcG9ydGVkIHlldCBvbiBPVjUxOCgrKSIpOworCQlkZXZfd2Fybigmb3YtPmRldi0+ZGV2LAorCQkJICJzbmFwc2hvdCByZXNldCBub3Qgc3VwcG9ydGVkIHlldCBvbiBPVjUxOCgrKVxuIik7CiAJfSBlbHNlIHsKLQkJZXJyKCJjbGVhciBzbmFwOiBpbnZhbGlkIGJyaWRnZSB0eXBlIik7CisJCWRldl9lcnIoJm92LT5kZXYtPmRldiwgImNsZWFyIHNuYXA6IGludmFsaWQgYnJpZGdlIHR5cGVcbiIpOwogCX0KIH0KIApAQCAtMTExNSwxNCArMTExNiwxNiBAQAogCWlmIChvdi0+YmNsYXNzID09IEJDTF9PVjUxMSkgewogCQlyZXQgPSByZWdfcihvdiwgUjUxeF9TWVNfU05BUCk7CiAJCWlmIChyZXQgPCAwKSB7Ci0JCQllcnIoIkVycm9yIGNoZWNraW5nIHNuc3BzaG90IHN0YXR1cyAoJWQpIiwgcmV0KTsKKwkJCWRldl9lcnIoJm92LT5kZXYtPmRldiwKKwkJCQkiRXJyb3IgY2hlY2tpbmcgc25zcHNob3Qgc3RhdHVzICglZClcbiIsIHJldCk7CiAJCX0gZWxzZSBpZiAocmV0ICYgMHgwOCkgewogCQkJc3RhdHVzID0gMTsKIAkJfQogCX0gZWxzZSBpZiAob3YtPmJjbGFzcyA9PSBCQ0xfT1Y1MTgpIHsKLQkJd2Fybigic25hcHNob3QgY2hlY2sgbm90IHN1cHBvcnRlZCB5ZXQgb24gT1Y1MTgoKykiKTsKKwkJZGV2X3dhcm4oJm92LT5kZXYtPmRldiwKKwkJCSAic25hcHNob3QgY2hlY2sgbm90IHN1cHBvcnRlZCB5ZXQgb24gT1Y1MTgoKylcbiIpOwogCX0gZWxzZSB7Ci0JCWVycigiY2hlY2sgc25hcDogaW52YWxpZCBicmlkZ2UgdHlwZSIpOworCQlkZXZfZXJyKCZvdi0+ZGV2LT5kZXYsICJjbGVhciBzbmFwOiBpbnZhbGlkIGJyaWRnZSB0eXBlXG4iKTsKIAl9CiAKIAlyZXR1cm4gc3RhdHVzOwpAQCAtMzIwNSw5ICszMjA4LDEwIEBACiAJICovCiAKIAlpZiAocHJpbnRwaCkgewotCQlpbmZvKCJwaCglM2QpOiAlMnggJTJ4ICUyeCAlMnggJTJ4ICUyeCAlMnggJTJ4ICUyeCAlMnggJTJ4ICUyeCIsCi0JCSAgICAgcG51bSwgaW5bMF0sIGluWzFdLCBpblsyXSwgaW5bM10sIGluWzRdLCBpbls1XSwgaW5bNl0sCi0JCSAgICAgaW5bN10sIGluWzhdLCBpbls5XSwgaW5bMTBdLCBpblsxMV0pOworCQlkZXZfaW5mbygmb3YtPmRldi0+ZGV2LAorCQkJICJwaCglM2QpOiAlMnggJTJ4ICUyeCAlMnggJTJ4ICUyeCAlMnggJTJ4ICUyeCAlMnggJTJ4ICUyeFxuIiwKKwkJCSBwbnVtLCBpblswXSwgaW5bMV0sIGluWzJdLCBpblszXSwgaW5bNF0sIGluWzVdLCBpbls2XSwKKwkJCSBpbls3XSwgaW5bOF0sIGluWzldLCBpblsxMF0sIGluWzExXSk7CiAJfQogCiAJLyogQ2hlY2sgZm9yIFNPRi9FT0YgcGFja2V0ICovCkBAIC0zMzY2LDggKzMzNzAsMTAgQEAKIAkgKiB0aGUgZGVmaW5pdGl2ZSBTT0YvRU9GIGZvcm1hdCAqLwogCWlmICgoIShpblswXSB8IGluWzFdIHwgaW5bMl0gfCBpblszXSB8IGluWzVdKSkgJiYgaW5bNl0pIHsKIAkJaWYgKHByaW50cGgpIHsKLQkJCWluZm8oInBoOiAlMnggJTJ4ICUyeCAlMnggJTJ4ICUyeCAlMnggJTJ4IiwgaW5bMF0sCi0JCQkgICAgIGluWzFdLCBpblsyXSwgaW5bM10sIGluWzRdLCBpbls1XSwgaW5bNl0sIGluWzddKTsKKwkJCWRldl9pbmZvKCZvdi0+ZGV2LT5kZXYsCisJCQkJICJwaDogJTJ4ICUyeCAlMnggJTJ4ICUyeCAlMnggJTJ4ICUyeFxuIiwKKwkJCQkgaW5bMF0sIGluWzFdLCBpblsyXSwgaW5bM10sIGluWzRdLCBpbls1XSwKKwkJCQkgaW5bNl0sIGluWzddKTsKIAkJfQogCiAJCWlmIChmcmFtZS0+c2NhbnN0YXRlID09IFNUQVRFX0xJTkVTKSB7CkBAIC0zNjQ2LDE0ICszNjUyLDE2IEBACiAJCWlmIChwYWNrZXRzaXplID09IC0xKSB7CiAJCQlvdjUxOF9zZXRfcGFja2V0X3NpemUob3YsIDY0MCk7CiAJCX0gZWxzZSB7Ci0JCQlpbmZvKCJGb3JjaW5nIHBhY2tldCBzaXplIHRvICVkIiwgcGFja2V0c2l6ZSk7CisJCQlkZXZfaW5mbygmb3YtPmRldi0+ZGV2LCAiRm9yY2luZyBwYWNrZXQgc2l6ZSB0byAlZFxuIiwKKwkJCQkgcGFja2V0c2l6ZSk7CiAJCQlvdjUxOF9zZXRfcGFja2V0X3NpemUob3YsIHBhY2tldHNpemUpOwogCQl9CiAJfSBlbHNlIHsKIAkJaWYgKHBhY2tldHNpemUgPT0gLTEpIHsKIAkJCW92NTExX3NldF9wYWNrZXRfc2l6ZShvdiwgc2l6ZSk7CiAJCX0gZWxzZSB7Ci0JCQlpbmZvKCJGb3JjaW5nIHBhY2tldCBzaXplIHRvICVkIiwgcGFja2V0c2l6ZSk7CisJCQlkZXZfaW5mbygmb3YtPmRldi0+ZGV2LCAiRm9yY2luZyBwYWNrZXQgc2l6ZSB0byAlZFxuIiwKKwkJCQkgcGFja2V0c2l6ZSk7CiAJCQlvdjUxMV9zZXRfcGFja2V0X3NpemUob3YsIHBhY2tldHNpemUpOwogCQl9CiAJfQpAQCAtNDEyMSw3ICs0MTI5LDcgQEAKIAkJCXJldHVybiAtRUlPOwogCiAJCWlmIChmb3JjZV9wYWxldHRlICYmIHAtPnBhbGV0dGUgIT0gZm9yY2VfcGFsZXR0ZSkgewotCQkJaW5mbygiUGFsZXR0ZSByZWplY3RlZCAoJXMpIiwKKwkJCWRldl9pbmZvKCZvdi0+ZGV2LT5kZXYsICJQYWxldHRlIHJlamVjdGVkICglcylcbiIsCiAJCQkgICAgIHN5bWJvbGljKHY0bDFfcGxpc3QsIHAtPnBhbGV0dGUpKTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CkBAIC00ODQ5LDI2ICs0ODU3LDI3IEBACiAJCWVycigiRXJyb3IgZGV0ZWN0aW5nIHNlbnNvciB0eXBlIik7CiAJCXJldHVybiAtMTsKIAl9IGVsc2UgaWYgKChyYyAmIDMpID09IDMpIHsKLQkJaW5mbygiU2Vuc29yIGlzIGFuIE9WNzYxMCIpOworCQlkZXZfaW5mbygmb3YtPmRldi0+ZGV2LCAiU2Vuc29yIGlzIGFuIE9WNzYxMFxuIik7CiAJCW92LT5zZW5zb3IgPSBTRU5fT1Y3NjEwOwogCX0gZWxzZSBpZiAoKHJjICYgMykgPT0gMSkgewogCQkvKiBJIGRvbid0IGtub3cgd2hhdCdzIGRpZmZlcmVudCBhYm91dCB0aGUgNzZCRSB5ZXQuICovCiAJCWlmIChpMmNfcihvdiwgMHgxNSkgJiAxKQotCQkJaW5mbygiU2Vuc29yIGlzIGFuIE9WNzYyMEFFIik7CisJCQlkZXZfaW5mbygmb3YtPmRldi0+ZGV2LCAiU2Vuc29yIGlzIGFuIE9WNzYyMEFFXG4iKTsKIAkJZWxzZQotCQkJaW5mbygiU2Vuc29yIGlzIGFuIE9WNzZCRSIpOworCQkJZGV2X2luZm8oJm92LT5kZXYtPmRldiwgIlNlbnNvciBpcyBhbiBPVjc2QkVcbiIpOwogCiAJCS8qIE9WNTExKyB3aWxsIHJldHVybiBhbGwgemVybyBpc29jIGRhdGEgdW5sZXNzIHdlCiAJCSAqIGNvbmZpZ3VyZSB0aGUgc2Vuc29yIGFzIGEgNzYyMC4gU29tZW9uZSBuZWVkcyB0bwogCQkgKiBmaW5kIHRoZSBleGFjdCByZWcuIHNldHRpbmcgdGhhdCBjYXVzZXMgdGhpcy4gKi8KIAkJaWYgKG92LT5icmlkZ2UgPT0gQlJHX09WNTExUExVUykgewotCQkJaW5mbygiRW5hYmxpbmcgNTExKy83NjIwQUUgd29ya2Fyb3VuZCIpOworCQkJZGV2X2luZm8oJm92LT5kZXYtPmRldiwKKwkJCQkgIkVuYWJsaW5nIDUxMSsvNzYyMEFFIHdvcmthcm91bmRcbiIpOwogCQkJb3YtPnNlbnNvciA9IFNFTl9PVjc2MjA7CiAJCX0gZWxzZSB7CiAJCQlvdi0+c2Vuc29yID0gU0VOX09WNzZCRTsKIAkJfQogCX0gZWxzZSBpZiAoKHJjICYgMykgPT0gMCkgewotCQlpbmZvKCJTZW5zb3IgaXMgYW4gT1Y3NjIwIik7CisJCWRldl9pbmZvKCZvdi0+ZGV2LT5kZXYsICJTZW5zb3IgaXMgYW4gT1Y3NjIwXG4iKTsKIAkJb3YtPnNlbnNvciA9IFNFTl9PVjc2MjA7CiAJfSBlbHNlIHsKIAkJZXJyKCJVbmtub3duIGltYWdlIHNlbnNvciB2ZXJzaW9uOiAlZCIsIHJjICYgMyk7CkBAIC01MDI0LDE2ICs1MDMzLDE2IEBACiAKIAlpZiAoKHJjICYgMykgPT0gMCkgewogCQlvdi0+c2Vuc29yID0gU0VOX09WNjYzMDsKLQkJaW5mbygiU2Vuc29yIGlzIGFuIE9WNjYzMCIpOworCQlkZXZfaW5mbygmb3YtPmRldi0+ZGV2LCAiU2Vuc29yIGlzIGFuIE9WNjYzMFxuIik7CiAJfSBlbHNlIGlmICgocmMgJiAzKSA9PSAxKSB7CiAJCW92LT5zZW5zb3IgPSBTRU5fT1Y2NjIwOwotCQlpbmZvKCJTZW5zb3IgaXMgYW4gT1Y2NjIwIik7CisJCWRldl9pbmZvKCZvdi0+ZGV2LT5kZXYsICJTZW5zb3IgaXMgYW4gT1Y2NjIwXG4iKTsKIAl9IGVsc2UgaWYgKChyYyAmIDMpID09IDIpIHsKIAkJb3YtPnNlbnNvciA9IFNFTl9PVjY2MzA7Ci0JCWluZm8oIlNlbnNvciBpcyBhbiBPVjY2MzBBRSIpOworCQlkZXZfaW5mbygmb3YtPmRldi0+ZGV2LCAiU2Vuc29yIGlzIGFuIE9WNjYzMEFFXG4iKTsKIAl9IGVsc2UgaWYgKChyYyAmIDMpID09IDMpIHsKIAkJb3YtPnNlbnNvciA9IFNFTl9PVjY2MzA7Ci0JCWluZm8oIlNlbnNvciBpcyBhbiBPVjY2MzBBRiIpOworCQlkZXZfaW5mbygmb3YtPmRldi0+ZGV2LCAiU2Vuc29yIGlzIGFuIE9WNjYzMEFGXG4iKTsKIAl9CiAKIAkvKiBTZXQgc2Vuc29yLXNwZWNpZmljIHZhcnMgKi8KQEAgLTUwODgsMTAgKzUwOTcsMTAgQEAKIAkJCWVycigiRXJyb3IgZGV0ZWN0aW5nIHNlbnNvciB0eXBlIik7CiAJCQlyZXR1cm4gLTE7CiAJCX0gZWxzZSBpZiAoKHJjICYgMHgwZikgPT0gMCkgewotCQkJaW5mbygiU2Vuc29yIGlzIGEgS1MwMTI3Iik7CisJCQlkZXZfaW5mbygmb3YtPmRldi0+ZGV2LCAiU2Vuc29yIGlzIGEgS1MwMTI3XG4iKTsKIAkJCW92LT5zZW5zb3IgPSBTRU5fS1MwMTI3OwogCQl9IGVsc2UgaWYgKChyYyAmIDB4MGYpID09IDkpIHsKLQkJCWluZm8oIlNlbnNvciBpcyBhIEtTMDEyN0IgUmV2LiBBIik7CisJCQlkZXZfaW5mbygmb3YtPmRldi0+ZGV2LCAiU2Vuc29yIGlzIGEgS1MwMTI3QiBSZXYuIEFcbiIpOwogCQkJb3YtPnNlbnNvciA9IFNFTl9LUzAxMjdCOwogCQl9CiAJfSBlbHNlIHsKQEAgLTUyMDAsNyArNTIwOSw4IEBACiAJCWVycigiRXJyb3IgZGV0ZWN0aW5nIHNlbnNvciB2ZXJzaW9uIik7CiAJCXJldHVybiAtMTsKIAl9IGVsc2UgewotCQlpbmZvKCJTZW5zb3IgaXMgYW4gU0FBNzExMUEgKHZlcnNpb24gMHgleCkiLCByYyk7CisJCWRldl9pbmZvKCZvdi0+ZGV2LT5kZXYsCisJCQkgIlNlbnNvciBpcyBhbiBTQUE3MTExQSAodmVyc2lvbiAweCV4KVxuIiwgcmMpOwogCQlvdi0+c2Vuc29yID0gU0VOX1NBQTcxMTFBOwogCX0KIApAQCAtNTIxMCw3ICs1MjIwLDggQEAKIAlpZiAob3YtPmJjbGFzcyA9PSBCQ0xfT1Y1MTEpCiAJCXJlZ193KG92LCAweDExLCAweDAwKTsKIAllbHNlCi0JCXdhcm4oIlNBQTcxMTFBIG5vdCB5ZXQgc3VwcG9ydGVkIHdpdGggT1Y1MTgvT1Y1MTgrIik7CisJCWRldl93YXJuKCZvdi0+ZGV2LT5kZXYsCisJCQkgIlNBQTcxMTFBIG5vdCB5ZXQgc3VwcG9ydGVkIHdpdGggT1Y1MTgvT1Y1MTgrXG4iKTsKIAogCXJldHVybiAwOwogfQpAQCAtNTI2Miw3ICs1MjczLDcgQEAKIAogCVBERUJVRyAoMSwgIkN1c3RvbUlEID0gJWQiLCBvdi0+Y3VzdG9taWQpOwogCW92LT5kZXNjID0gc3ltYm9saWMoY2FtbGlzdCwgb3YtPmN1c3RvbWlkKTsKLQlpbmZvKCJtb2RlbDogJXMiLCBvdi0+ZGVzYyk7CisJZGV2X2luZm8oJm92LT5kZXYtPmRldiwgIm1vZGVsOiAlc1xuIiwgb3YtPmRlc2MpOwogCiAJaWYgKDAgPT0gc3RyY21wKG92LT5kZXNjLCBOT1RfREVGSU5FRF9TVFIpKSB7CiAJCWVycigiQ2FtZXJhIHR5cGUgKCVkKSBub3QgcmVjb2duaXplZCIsIG92LT5jdXN0b21pZCk7CkBAIC01NDI2LDcgKzU0MzcsOCBAQAogCVBERUJVRyg0LCAiIik7CiAKIAkvKiBGaXJzdCA1IGJpdHMgb2YgY3VzdG9tIElEIHJlZyBhcmUgYSByZXZpc2lvbiBJRCBvbiBPVjUxOCAqLwotCWluZm8oIkRldmljZSByZXZpc2lvbiAlZCIsIDB4MUYgJiByZWdfcihvdiwgUjUxMV9TWVNfQ1VTVF9JRCkpOworCWRldl9pbmZvKCZvdi0+ZGV2LT5kZXYsICJEZXZpY2UgcmV2aXNpb24gJWRcbiIsCisJCSAweDFGICYgcmVnX3Iob3YsIFI1MTFfU1lTX0NVU1RfSUQpKTsKIAogCS8qIEdpdmUgaXQgdGhlIGRlZmF1bHQgZGVzY3JpcHRpb24gKi8KIAlvdi0+ZGVzYyA9IHN5bWJvbGljKGNhbWxpc3QsIDApOwpAQCAtNTQ0OCw3ICs1NDYwLDggQEAKIAkgKiByZXF1aXJlZC4gT1Y1MTggaGFzIG5vIHVuY29tcHJlc3NlZCBtb2RlLCB0byBzYXZlIFJBTS4gKi8KIAlpZiAoIWR1bXBwaXggJiYgIW92LT5jb21wcmVzcykgewogCQlvdi0+Y29tcHJlc3MgPSAxOwotCQl3YXJuKCJDb21wcmVzc2lvbiByZXF1aXJlZCB3aXRoIE9WNTE4Li4uZW5hYmxpbmciKTsKKwkJZGV2X3dhcm4oJm92LT5kZXYtPmRldiwKKwkJCSAiQ29tcHJlc3Npb24gcmVxdWlyZWQgd2l0aCBPVjUxOC4uLmVuYWJsaW5nXG4iKTsKIAl9CiAKIAlpZiAob3YtPmJyaWRnZSA9PSBCUkdfT1Y1MTgpIHsKQEAgLTU3NzMsNyArNTc4Niw4IEBACiAJCWdvdG8gZXJyb3I7CiAJfQogCi0JaW5mbygiVVNCICVzIHZpZGVvIGRldmljZSBmb3VuZCIsIHN5bWJvbGljKGJyZ2xpc3QsIG92LT5icmlkZ2UpKTsKKwlkZXZfaW5mbygmaW50Zi0+ZGV2LCAiVVNCICVzIHZpZGVvIGRldmljZSBmb3VuZFxuIiwKKwkJIHN5bWJvbGljKGJyZ2xpc3QsIG92LT5icmlkZ2UpKTsKIAogCWluaXRfd2FpdHF1ZXVlX2hlYWQoJm92LT53cSk7CiAKQEAgLTU4NTQsOCArNTg2OCw4IEBACiAJCWdvdG8gZXJyb3I7CiAJfQogCi0JaW5mbygiRGV2aWNlIGF0ICVzIHJlZ2lzdGVyZWQgdG8gbWlub3IgJWQiLCBvdi0+dXNiX3BhdGgsCi0JICAgICBvdi0+dmRldi0+bWlub3IpOworCWRldl9pbmZvKCZpbnRmLT5kZXYsICJEZXZpY2UgYXQgJXMgcmVnaXN0ZXJlZCB0byBtaW5vciAlZFxuIiwKKwkJIG92LT51c2JfcGF0aCwgb3YtPnZkZXYtPm1pbm9yKTsKIAogCXVzYl9zZXRfaW50ZmRhdGEoaW50Ziwgb3YpOwogCWlmIChvdl9jcmVhdGVfc3lzZnMob3YtPnZkZXYpKSB7CkBAIC01OTU4LDcgKzU5NzIsOCBAQAogCWlmIChyZXR2YWwpCiAJCWdvdG8gb3V0OwogCi0JaW5mbyhEUklWRVJfVkVSU0lPTiAiIDogIiBEUklWRVJfREVTQyk7CisJcHJpbnRrKEtFUk5fSU5GTyBLQlVJTERfTU9ETkFNRSAiOiAiIERSSVZFUl9WRVJTSU9OICI6IgorCSAgICAgICBEUklWRVJfREVTQyAiXG4iKTsKIAogb3V0OgogCXJldHVybiByZXR2YWw7CkBAIC01OTY4LDggKzU5ODMsNyBAQAogdXNiX292NTExX2V4aXQodm9pZCkKIHsKIAl1c2JfZGVyZWdpc3Rlcigmb3Y1MTFfZHJpdmVyKTsKLQlpbmZvKCJkcml2ZXIgZGVyZWdpc3RlcmVkIik7Ci0KKwlwcmludGsoS0VSTl9JTkZPIEtCVUlMRF9NT0ROQU1FICI6IGRyaXZlciBkZXJlZ2lzdGVyZWRcbiIpOwogfQogCiBtb2R1bGVfaW5pdCh1c2Jfb3Y1MTFfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL292NTExLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL292NTExLmgKaW5kZXggYmFkZWQxMi4uNzBkOTllNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9vdjUxMS5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vb3Y1MTEuaApAQCAtMTIsNyArMTIsOCBAQAogCiAjaWZkZWYgT1Y1MTFfREVCVUcKIAkjZGVmaW5lIFBERUJVRyhsZXZlbCwgZm10LCBhcmdzLi4uKSBcCi0JCWlmIChkZWJ1ZyA+PSAobGV2ZWwpKSBpbmZvKCJbJXM6JWRdICIgZm10LCBcCisJCWlmIChkZWJ1ZyA+PSAobGV2ZWwpKQlcCisJCQlwcmludGsoS0VSTl9JTkZPIEtCVUlMRF9NT0ROQU1FICJbJXM6JWRdIFxuIiBmbXQsIFwKIAkJX19mdW5jX18sIF9fTElORV9fICwgIyMgYXJncykKICNlbHNlCiAJI2RlZmluZSBQREVCVUcobGV2ZWwsIGZtdCwgYXJncy4uLikgZG8ge30gd2hpbGUoMCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vb3ZjYW1jaGlwL292Y2FtY2hpcF9jb3JlLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL292Y2FtY2hpcC9vdmNhbWNoaXBfY29yZS5jCmluZGV4IDA2NWMyNDUuLjJjNGFjYmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vb3ZjYW1jaGlwL292Y2FtY2hpcF9jb3JlLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9vdmNhbWNoaXAvb3ZjYW1jaGlwX2NvcmUuYwpAQCAtNDksMTIgKzQ5LDYgQEAKICNkZWZpbmUgR0VORVJJQ19SRUdfSURfTE9XICAgICAgICAweDFECS8qIG1hbnVmYWN0dXJlciBJRCBMU0IgKi8KICNkZWZpbmUgR0VORVJJQ19SRUdfQ09NX0kgICAgICAgICAweDI5CS8qIG1pc2MgSUQgYml0cyAqLwogCi1leHRlcm4gc3RydWN0IG92Y2FtY2hpcF9vcHMgb3Y2eDIwX29wczsKLWV4dGVybiBzdHJ1Y3Qgb3ZjYW1jaGlwX29wcyBvdjZ4MzBfb3BzOwotZXh0ZXJuIHN0cnVjdCBvdmNhbWNoaXBfb3BzIG92N3gxMF9vcHM7Ci1leHRlcm4gc3RydWN0IG92Y2FtY2hpcF9vcHMgb3Y3eDIwX29wczsKLWV4dGVybiBzdHJ1Y3Qgb3ZjYW1jaGlwX29wcyBvdjc2YmVfb3BzOwotCiBzdGF0aWMgY2hhciAqY2hpcF9uYW1lc1tOVU1fQ0NfVFlQRVNdID0gewogCVtDQ19VTktOT1dOXQk9ICJVbmtub3duIGNoaXAiLAogCVtDQ19PVjc2QkVdCT0gIk9WNzZCRSIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL292Y2FtY2hpcC9vdmNhbWNoaXBfcHJpdi5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9vdmNhbWNoaXAvb3ZjYW1jaGlwX3ByaXYuaAppbmRleCA5YWZhNGZlLi5hMDU2NTBmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL292Y2FtY2hpcC9vdmNhbWNoaXBfcHJpdi5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vb3ZjYW1jaGlwL292Y2FtY2hpcF9wcml2LmgKQEAgLTUzLDYgKzUzLDEyIEBACiAJaW50IGluaXRpYWxpemVkOyAgICAgICAgICAgLyogT1ZDQU1DSElQX0NNRF9JTklUSUFMSVpFIHdhcyBzdWNjZXNzZnVsICovCiB9OwogCitleHRlcm4gc3RydWN0IG92Y2FtY2hpcF9vcHMgb3Y2eDIwX29wczsKK2V4dGVybiBzdHJ1Y3Qgb3ZjYW1jaGlwX29wcyBvdjZ4MzBfb3BzOworZXh0ZXJuIHN0cnVjdCBvdmNhbWNoaXBfb3BzIG92N3gxMF9vcHM7CitleHRlcm4gc3RydWN0IG92Y2FtY2hpcF9vcHMgb3Y3eDIwX29wczsKK2V4dGVybiBzdHJ1Y3Qgb3ZjYW1jaGlwX29wcyBvdjc2YmVfb3BzOworCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIC8qICAgICAgICAgICAgICBJMkMgSS9PICAgICAgICAgICAgICAqLwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3Btcy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9wbXMuYwppbmRleCA3Yzg0Zjc5Li45OTQ4MDc4IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3Btcy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcG1zLmMKQEAgLTQ3LDYgKzQ3LDcgQEAKIAlzdHJ1Y3QgdmlkZW9fcGljdHVyZSBwaWN0dXJlOwogCWludCBoZWlnaHQ7CiAJaW50IHdpZHRoOworCXVuc2lnbmVkIGxvbmcgaW5fdXNlOwogCXN0cnVjdCBtdXRleCBsb2NrOwogfTsKIApAQCAtODgxLDEwICs4ODIsMjcgQEAKIAlyZXR1cm4gbGVuOwogfQogCitzdGF0aWMgaW50IHBtc19leGNsdXNpdmVfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2ID0gdmlkZW9fZGV2ZGF0YShmaWxlKTsKKwlzdHJ1Y3QgcG1zX2RldmljZSAqcGQgPSAoc3RydWN0IHBtc19kZXZpY2UgKil2OworCisJcmV0dXJuIHRlc3RfYW5kX3NldF9iaXQoMCwgJnBkLT5pbl91c2UpID8gLUVCVVNZIDogMDsKK30KKworc3RhdGljIGludCBwbXNfZXhjbHVzaXZlX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJc3RydWN0IHZpZGVvX2RldmljZSAqdiA9IHZpZGVvX2RldmRhdGEoZmlsZSk7CisJc3RydWN0IHBtc19kZXZpY2UgKnBkID0gKHN0cnVjdCBwbXNfZGV2aWNlICopdjsKKworCWNsZWFyX2JpdCgwLCAmcGQtPmluX3VzZSk7CisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHBtc19mb3BzID0gewogCS5vd25lcgkJPSBUSElTX01PRFVMRSwKLQkub3BlbiAgICAgICAgICAgPSB2aWRlb19leGNsdXNpdmVfb3BlbiwKLQkucmVsZWFzZSAgICAgICAgPSB2aWRlb19leGNsdXNpdmVfcmVsZWFzZSwKKwkub3BlbiAgICAgICAgICAgPSBwbXNfZXhjbHVzaXZlX29wZW4sCisJLnJlbGVhc2UgICAgICAgID0gcG1zX2V4Y2x1c2l2ZV9yZWxlYXNlLAogCS5pb2N0bCAgICAgICAgICA9IHBtc19pb2N0bCwKICNpZmRlZiBDT05GSUdfQ09NUEFUCiAJLmNvbXBhdF9pb2N0bAk9IHY0bF9jb21wYXRfaW9jdGwzMiwKQEAgLTg5Nyw2ICs5MTUsNyBAQAogewogCS5uYW1lCQk9ICJNZWRpYXZpc2lvbiBQTVMiLAogCS5mb3BzICAgICAgICAgICA9ICZwbXNfZm9wcywKKwkucmVsZWFzZSAJPSB2aWRlb19kZXZpY2VfcmVsZWFzZV9lbXB0eSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcG1zX2RldmljZSBwbXNfZGV2aWNlOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItY3RybC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItY3RybC5jCmluZGV4IDA3NjRmYmYuLjIwM2Y1NGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWN0cmwuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1jdHJsLmMKQEAgLTEzNCwxMyArMTM0LDE3IEBACiAKIAogLyogUmV0cmlldmUgY29udHJvbCdzIGRlZmF1bHQgdmFsdWUgKGFueSB0eXBlKSAqLwotaW50IHB2cjJfY3RybF9nZXRfZGVmKHN0cnVjdCBwdnIyX2N0cmwgKmNwdHIpCitpbnQgcHZyMl9jdHJsX2dldF9kZWYoc3RydWN0IHB2cjJfY3RybCAqY3B0ciwgaW50ICp2YWxwdHIpCiB7CiAJaW50IHJldCA9IDA7CiAJaWYgKCFjcHRyKSByZXR1cm4gMDsKIAlMT0NLX1RBS0UoY3B0ci0+aGR3LT5iaWdfbG9jayk7IGRvIHsKIAkJaWYgKGNwdHItPmluZm8tPnR5cGUgPT0gcHZyMl9jdGxfaW50KSB7Ci0JCQlyZXQgPSBjcHRyLT5pbmZvLT5kZWZhdWx0X3ZhbHVlOworCQkJaWYgKGNwdHItPmluZm8tPmdldF9kZWZfdmFsdWUpIHsKKwkJCQlyZXQgPSBjcHRyLT5pbmZvLT5nZXRfZGVmX3ZhbHVlKGNwdHIsIHZhbHB0cik7CisJCQl9IGVsc2UgeworCQkJCSp2YWxwdHIgPSBjcHRyLT5pbmZvLT5kZWZhdWx0X3ZhbHVlOworCQkJfQogCQl9CiAJfSB3aGlsZSgwKTsgTE9DS19HSVZFKGNwdHItPmhkdy0+YmlnX2xvY2spOwogCXJldHVybiByZXQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1jdHJsLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1jdHJsLmgKaW5kZXggMDM3MWFlNi4uNzk0ZmY5MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItY3RybC5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWN0cmwuaApAQCAtNDksNyArNDksNyBAQAogaW50IHB2cjJfY3RybF9nZXRfbWluKHN0cnVjdCBwdnIyX2N0cmwgKik7CiAKIC8qIFJldHJpZXZlIGNvbnRyb2wncyBkZWZhdWx0IHZhbHVlIChhbnkgdHlwZSkgKi8KLWludCBwdnIyX2N0cmxfZ2V0X2RlZihzdHJ1Y3QgcHZyMl9jdHJsICopOworaW50IHB2cjJfY3RybF9nZXRfZGVmKHN0cnVjdCBwdnIyX2N0cmwgKiwgaW50ICp2YWxwdHIpOwogCiAvKiBSZXRyaWV2ZSBjb250cm9sJ3MgZW51bWVyYXRpb24gY291bnQgKGVudW0gb25seSkgKi8KIGludCBwdnIyX2N0cmxfZ2V0X2NudChzdHJ1Y3QgcHZyMl9jdHJsICopOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItaGR3LWludGVybmFsLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1oZHctaW50ZXJuYWwuaAppbmRleCA2NTdmODYxLi5kZTdlZTcyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1oZHctaW50ZXJuYWwuaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1oZHctaW50ZXJuYWwuaApAQCAtODIsNiArODIsNyBAQAogCiAJLyogQ29udHJvbCdzIGltcGxlbWVudGF0aW9uICovCiAJcHZyMl9jdGxmX2dldF92YWx1ZSBnZXRfdmFsdWU7ICAgICAgLyogR2V0IGl0cyB2YWx1ZSAqLworCXB2cjJfY3RsZl9nZXRfdmFsdWUgZ2V0X2RlZl92YWx1ZTsgIC8qIEdldCBpdHMgZGVmYXVsdCB2YWx1ZSAqLwogCXB2cjJfY3RsZl9nZXRfdmFsdWUgZ2V0X21pbl92YWx1ZTsgIC8qIEdldCBtaW5pbXVtIGFsbG93ZWQgdmFsdWUgKi8KIAlwdnIyX2N0bGZfZ2V0X3ZhbHVlIGdldF9tYXhfdmFsdWU7ICAvKiBHZXQgbWF4aW11bSBhbGxvd2VkIHZhbHVlICovCiAJcHZyMl9jdGxmX3NldF92YWx1ZSBzZXRfdmFsdWU7ICAgICAgLyogU2V0IGl0cyB2YWx1ZSAqLwpAQCAtMzA3LDYgKzMwOCwxMCBAQAogCXN0cnVjdCB2NGwyX3R1bmVyIHR1bmVyX3NpZ25hbF9pbmZvOwogCWludCB0dW5lcl9zaWduYWxfc3RhbGU7CiAKKwkvKiBDcm9wcGluZyBjYXBhYmlsaXR5IGluZm8gKi8KKwlzdHJ1Y3QgdjRsMl9jcm9wY2FwIGNyb3BjYXBfaW5mbzsKKwlpbnQgY3JvcGNhcF9zdGFsZTsKKwogCS8qIFZpZGVvIHN0YW5kYXJkIGhhbmRsaW5nICovCiAJdjRsMl9zdGRfaWQgc3RkX21hc2tfZWVwcm9tOyAvLyBIYXJkd2FyZSBzdXBwb3J0ZWQgc2VsZWN0aW9ucwogCXY0bDJfc3RkX2lkIHN0ZF9tYXNrX2F2YWlsOyAgLy8gV2hpY2ggc3RhbmRhcmRzIHdlIG1heSBzZWxlY3QgZnJvbQpAQCAtMzY3LDYgKzM3MiwxMCBAQAogCVZDUkVBVEVfREFUQShiYXNzKTsKIAlWQ1JFQVRFX0RBVEEodHJlYmxlKTsKIAlWQ1JFQVRFX0RBVEEobXV0ZSk7CisJVkNSRUFURV9EQVRBKGNyb3BsKTsKKwlWQ1JFQVRFX0RBVEEoY3JvcHQpOworCVZDUkVBVEVfREFUQShjcm9wdyk7CisJVkNSRUFURV9EQVRBKGNyb3BoKTsKIAlWQ1JFQVRFX0RBVEEoaW5wdXQpOwogCVZDUkVBVEVfREFUQShhdWRpb21vZGUpOwogCVZDUkVBVEVfREFUQShyZXNfaG9yKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWhkdy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItaGR3LmMKaW5kZXggZjA1MWM2YS4uOTQyNjViZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItaGR3LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItaGR3LmMKQEAgLTI5OCw2ICsyOTgsNyBAQAogCQkJCXVuc2lnbmVkIGludCB0aW1lb3V0LGludCBwcm9iZV9mbCwKIAkJCQl2b2lkICp3cml0ZV9kYXRhLHVuc2lnbmVkIGludCB3cml0ZV9sZW4sCiAJCQkJdm9pZCAqcmVhZF9kYXRhLHVuc2lnbmVkIGludCByZWFkX2xlbik7CitzdGF0aWMgaW50IHB2cjJfaGR3X2NoZWNrX2Nyb3BjYXAoc3RydWN0IHB2cjJfaGR3ICpoZHcpOwogCiAKIHN0YXRpYyB2b2lkIHRyYWNlX3N0Yml0KGNvbnN0IGNoYXIgKm5hbWUsaW50IHZhbCkKQEAgLTQwMiw2ICs0MDMsMTk0IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgY3RybF9jcm9wbF9taW5fZ2V0KHN0cnVjdCBwdnIyX2N0cmwgKmNwdHIsIGludCAqbGVmdCkKK3sKKwlzdHJ1Y3QgdjRsMl9jcm9wY2FwICpjYXAgPSAmY3B0ci0+aGR3LT5jcm9wY2FwX2luZm87CisJaW50IHN0YXQgPSBwdnIyX2hkd19jaGVja19jcm9wY2FwKGNwdHItPmhkdyk7CisJaWYgKHN0YXQgIT0gMCkgeworCQlyZXR1cm4gc3RhdDsKKwl9CisJKmxlZnQgPSBjYXAtPmJvdW5kcy5sZWZ0OworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGN0cmxfY3JvcGxfbWF4X2dldChzdHJ1Y3QgcHZyMl9jdHJsICpjcHRyLCBpbnQgKmxlZnQpCit7CisJc3RydWN0IHY0bDJfY3JvcGNhcCAqY2FwID0gJmNwdHItPmhkdy0+Y3JvcGNhcF9pbmZvOworCWludCBzdGF0ID0gcHZyMl9oZHdfY2hlY2tfY3JvcGNhcChjcHRyLT5oZHcpOworCWlmIChzdGF0ICE9IDApIHsKKwkJcmV0dXJuIHN0YXQ7CisJfQorCSpsZWZ0ID0gY2FwLT5ib3VuZHMubGVmdDsKKwlpZiAoY2FwLT5ib3VuZHMud2lkdGggPiBjcHRyLT5oZHctPmNyb3B3X3ZhbCkgeworCQkqbGVmdCArPSBjYXAtPmJvdW5kcy53aWR0aCAtIGNwdHItPmhkdy0+Y3JvcHdfdmFsOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjdHJsX2Nyb3B0X21pbl9nZXQoc3RydWN0IHB2cjJfY3RybCAqY3B0ciwgaW50ICp0b3ApCit7CisJc3RydWN0IHY0bDJfY3JvcGNhcCAqY2FwID0gJmNwdHItPmhkdy0+Y3JvcGNhcF9pbmZvOworCWludCBzdGF0ID0gcHZyMl9oZHdfY2hlY2tfY3JvcGNhcChjcHRyLT5oZHcpOworCWlmIChzdGF0ICE9IDApIHsKKwkJcmV0dXJuIHN0YXQ7CisJfQorCSp0b3AgPSBjYXAtPmJvdW5kcy50b3A7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY3RybF9jcm9wdF9tYXhfZ2V0KHN0cnVjdCBwdnIyX2N0cmwgKmNwdHIsIGludCAqdG9wKQoreworCXN0cnVjdCB2NGwyX2Nyb3BjYXAgKmNhcCA9ICZjcHRyLT5oZHctPmNyb3BjYXBfaW5mbzsKKwlpbnQgc3RhdCA9IHB2cjJfaGR3X2NoZWNrX2Nyb3BjYXAoY3B0ci0+aGR3KTsKKwlpZiAoc3RhdCAhPSAwKSB7CisJCXJldHVybiBzdGF0OworCX0KKwkqdG9wID0gY2FwLT5ib3VuZHMudG9wOworCWlmIChjYXAtPmJvdW5kcy5oZWlnaHQgPiBjcHRyLT5oZHctPmNyb3BoX3ZhbCkgeworCQkqdG9wICs9IGNhcC0+Ym91bmRzLmhlaWdodCAtIGNwdHItPmhkdy0+Y3JvcGhfdmFsOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjdHJsX2Nyb3B3X21heF9nZXQoc3RydWN0IHB2cjJfY3RybCAqY3B0ciwgaW50ICp2YWwpCit7CisJc3RydWN0IHY0bDJfY3JvcGNhcCAqY2FwID0gJmNwdHItPmhkdy0+Y3JvcGNhcF9pbmZvOworCWludCBzdGF0ID0gcHZyMl9oZHdfY2hlY2tfY3JvcGNhcChjcHRyLT5oZHcpOworCWlmIChzdGF0ICE9IDApIHsKKwkJcmV0dXJuIHN0YXQ7CisJfQorCSp2YWwgPSAwOworCWlmIChjYXAtPmJvdW5kcy53aWR0aCA+IGNwdHItPmhkdy0+Y3JvcGxfdmFsKSB7CisJCSp2YWwgPSBjYXAtPmJvdW5kcy53aWR0aCAtIGNwdHItPmhkdy0+Y3JvcGxfdmFsOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjdHJsX2Nyb3BoX21heF9nZXQoc3RydWN0IHB2cjJfY3RybCAqY3B0ciwgaW50ICp2YWwpCit7CisJc3RydWN0IHY0bDJfY3JvcGNhcCAqY2FwID0gJmNwdHItPmhkdy0+Y3JvcGNhcF9pbmZvOworCWludCBzdGF0ID0gcHZyMl9oZHdfY2hlY2tfY3JvcGNhcChjcHRyLT5oZHcpOworCWlmIChzdGF0ICE9IDApIHsKKwkJcmV0dXJuIHN0YXQ7CisJfQorCSp2YWwgPSAwOworCWlmIChjYXAtPmJvdW5kcy5oZWlnaHQgPiBjcHRyLT5oZHctPmNyb3B0X3ZhbCkgeworCQkqdmFsID0gY2FwLT5ib3VuZHMuaGVpZ2h0IC0gY3B0ci0+aGR3LT5jcm9wdF92YWw7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGN0cmxfZ2V0X2Nyb3BjYXBibChzdHJ1Y3QgcHZyMl9jdHJsICpjcHRyLCBpbnQgKnZhbCkKK3sKKwlzdHJ1Y3QgdjRsMl9jcm9wY2FwICpjYXAgPSAmY3B0ci0+aGR3LT5jcm9wY2FwX2luZm87CisJaW50IHN0YXQgPSBwdnIyX2hkd19jaGVja19jcm9wY2FwKGNwdHItPmhkdyk7CisJaWYgKHN0YXQgIT0gMCkgeworCQlyZXR1cm4gc3RhdDsKKwl9CisJKnZhbCA9IGNhcC0+Ym91bmRzLmxlZnQ7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY3RybF9nZXRfY3JvcGNhcGJ0KHN0cnVjdCBwdnIyX2N0cmwgKmNwdHIsIGludCAqdmFsKQoreworCXN0cnVjdCB2NGwyX2Nyb3BjYXAgKmNhcCA9ICZjcHRyLT5oZHctPmNyb3BjYXBfaW5mbzsKKwlpbnQgc3RhdCA9IHB2cjJfaGR3X2NoZWNrX2Nyb3BjYXAoY3B0ci0+aGR3KTsKKwlpZiAoc3RhdCAhPSAwKSB7CisJCXJldHVybiBzdGF0OworCX0KKwkqdmFsID0gY2FwLT5ib3VuZHMudG9wOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGN0cmxfZ2V0X2Nyb3BjYXBidyhzdHJ1Y3QgcHZyMl9jdHJsICpjcHRyLCBpbnQgKnZhbCkKK3sKKwlzdHJ1Y3QgdjRsMl9jcm9wY2FwICpjYXAgPSAmY3B0ci0+aGR3LT5jcm9wY2FwX2luZm87CisJaW50IHN0YXQgPSBwdnIyX2hkd19jaGVja19jcm9wY2FwKGNwdHItPmhkdyk7CisJaWYgKHN0YXQgIT0gMCkgeworCQlyZXR1cm4gc3RhdDsKKwl9CisJKnZhbCA9IGNhcC0+Ym91bmRzLndpZHRoOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGN0cmxfZ2V0X2Nyb3BjYXBiaChzdHJ1Y3QgcHZyMl9jdHJsICpjcHRyLCBpbnQgKnZhbCkKK3sKKwlzdHJ1Y3QgdjRsMl9jcm9wY2FwICpjYXAgPSAmY3B0ci0+aGR3LT5jcm9wY2FwX2luZm87CisJaW50IHN0YXQgPSBwdnIyX2hkd19jaGVja19jcm9wY2FwKGNwdHItPmhkdyk7CisJaWYgKHN0YXQgIT0gMCkgeworCQlyZXR1cm4gc3RhdDsKKwl9CisJKnZhbCA9IGNhcC0+Ym91bmRzLmhlaWdodDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjdHJsX2dldF9jcm9wY2FwZGwoc3RydWN0IHB2cjJfY3RybCAqY3B0ciwgaW50ICp2YWwpCit7CisJc3RydWN0IHY0bDJfY3JvcGNhcCAqY2FwID0gJmNwdHItPmhkdy0+Y3JvcGNhcF9pbmZvOworCWludCBzdGF0ID0gcHZyMl9oZHdfY2hlY2tfY3JvcGNhcChjcHRyLT5oZHcpOworCWlmIChzdGF0ICE9IDApIHsKKwkJcmV0dXJuIHN0YXQ7CisJfQorCSp2YWwgPSBjYXAtPmRlZnJlY3QubGVmdDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjdHJsX2dldF9jcm9wY2FwZHQoc3RydWN0IHB2cjJfY3RybCAqY3B0ciwgaW50ICp2YWwpCit7CisJc3RydWN0IHY0bDJfY3JvcGNhcCAqY2FwID0gJmNwdHItPmhkdy0+Y3JvcGNhcF9pbmZvOworCWludCBzdGF0ID0gcHZyMl9oZHdfY2hlY2tfY3JvcGNhcChjcHRyLT5oZHcpOworCWlmIChzdGF0ICE9IDApIHsKKwkJcmV0dXJuIHN0YXQ7CisJfQorCSp2YWwgPSBjYXAtPmRlZnJlY3QudG9wOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGN0cmxfZ2V0X2Nyb3BjYXBkdyhzdHJ1Y3QgcHZyMl9jdHJsICpjcHRyLCBpbnQgKnZhbCkKK3sKKwlzdHJ1Y3QgdjRsMl9jcm9wY2FwICpjYXAgPSAmY3B0ci0+aGR3LT5jcm9wY2FwX2luZm87CisJaW50IHN0YXQgPSBwdnIyX2hkd19jaGVja19jcm9wY2FwKGNwdHItPmhkdyk7CisJaWYgKHN0YXQgIT0gMCkgeworCQlyZXR1cm4gc3RhdDsKKwl9CisJKnZhbCA9IGNhcC0+ZGVmcmVjdC53aWR0aDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjdHJsX2dldF9jcm9wY2FwZGgoc3RydWN0IHB2cjJfY3RybCAqY3B0ciwgaW50ICp2YWwpCit7CisJc3RydWN0IHY0bDJfY3JvcGNhcCAqY2FwID0gJmNwdHItPmhkdy0+Y3JvcGNhcF9pbmZvOworCWludCBzdGF0ID0gcHZyMl9oZHdfY2hlY2tfY3JvcGNhcChjcHRyLT5oZHcpOworCWlmIChzdGF0ICE9IDApIHsKKwkJcmV0dXJuIHN0YXQ7CisJfQorCSp2YWwgPSBjYXAtPmRlZnJlY3QuaGVpZ2h0OworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGN0cmxfZ2V0X2Nyb3BjYXBwYW4oc3RydWN0IHB2cjJfY3RybCAqY3B0ciwgaW50ICp2YWwpCit7CisJc3RydWN0IHY0bDJfY3JvcGNhcCAqY2FwID0gJmNwdHItPmhkdy0+Y3JvcGNhcF9pbmZvOworCWludCBzdGF0ID0gcHZyMl9oZHdfY2hlY2tfY3JvcGNhcChjcHRyLT5oZHcpOworCWlmIChzdGF0ICE9IDApIHsKKwkJcmV0dXJuIHN0YXQ7CisJfQorCSp2YWwgPSBjYXAtPnBpeGVsYXNwZWN0Lm51bWVyYXRvcjsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjdHJsX2dldF9jcm9wY2FwcGFkKHN0cnVjdCBwdnIyX2N0cmwgKmNwdHIsIGludCAqdmFsKQoreworCXN0cnVjdCB2NGwyX2Nyb3BjYXAgKmNhcCA9ICZjcHRyLT5oZHctPmNyb3BjYXBfaW5mbzsKKwlpbnQgc3RhdCA9IHB2cjJfaGR3X2NoZWNrX2Nyb3BjYXAoY3B0ci0+aGR3KTsKKwlpZiAoc3RhdCAhPSAwKSB7CisJCXJldHVybiBzdGF0OworCX0KKwkqdmFsID0gY2FwLT5waXhlbGFzcGVjdC5kZW5vbWluYXRvcjsKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGludCBjdHJsX3ZyZXNfbWF4X2dldChzdHJ1Y3QgcHZyMl9jdHJsICpjcHRyLGludCAqdnApCiB7CiAJLyogQWN0dWFsIG1heGltdW0gZGVwZW5kcyBvbiB0aGUgdmlkZW8gc3RhbmRhcmQgaW4gZWZmZWN0LiAqLwpAQCAtNzc5LDYgKzk2OCwxMCBAQAogVkNSRUFURV9GVU5DUyhiYXNzKQogVkNSRUFURV9GVU5DUyh0cmVibGUpCiBWQ1JFQVRFX0ZVTkNTKG11dGUpCitWQ1JFQVRFX0ZVTkNTKGNyb3BsKQorVkNSRUFURV9GVU5DUyhjcm9wdCkKK1ZDUkVBVEVfRlVOQ1MoY3JvcHcpCitWQ1JFQVRFX0ZVTkNTKGNyb3BoKQogVkNSRUFURV9GVU5DUyhhdWRpb21vZGUpCiBWQ1JFQVRFX0ZVTkNTKHJlc19ob3IpCiBWQ1JFQVRFX0ZVTkNTKHJlc192ZXIpCkBAIC04NDksNiArMTA0Miw3MiBAQAogCQkuZGVmYXVsdF92YWx1ZSA9IDAsCiAJCURFRlJFRihtdXRlKSwKIAkJREVGQk9PTCwKKwl9LCB7CisJCS5kZXNjID0gIkNhcHR1cmUgY3JvcCBsZWZ0IG1hcmdpbiIsCisJCS5uYW1lID0gImNyb3BfbGVmdCIsCisJCS5pbnRlcm5hbF9pZCA9IFBWUjJfQ0lEX0NST1BMLAorCQkuZGVmYXVsdF92YWx1ZSA9IDAsCisJCURFRlJFRihjcm9wbCksCisJCURFRklOVCgtMTI5LCAzNDApLAorCQkuZ2V0X21pbl92YWx1ZSA9IGN0cmxfY3JvcGxfbWluX2dldCwKKwkJLmdldF9tYXhfdmFsdWUgPSBjdHJsX2Nyb3BsX21heF9nZXQsCisJCS5nZXRfZGVmX3ZhbHVlID0gY3RybF9nZXRfY3JvcGNhcGRsLAorCX0sIHsKKwkJLmRlc2MgPSAiQ2FwdHVyZSBjcm9wIHRvcCBtYXJnaW4iLAorCQkubmFtZSA9ICJjcm9wX3RvcCIsCisJCS5pbnRlcm5hbF9pZCA9IFBWUjJfQ0lEX0NST1BULAorCQkuZGVmYXVsdF92YWx1ZSA9IDAsCisJCURFRlJFRihjcm9wdCksCisJCURFRklOVCgtMzUsIDU0NCksCisJCS5nZXRfbWluX3ZhbHVlID0gY3RybF9jcm9wdF9taW5fZ2V0LAorCQkuZ2V0X21heF92YWx1ZSA9IGN0cmxfY3JvcHRfbWF4X2dldCwKKwkJLmdldF9kZWZfdmFsdWUgPSBjdHJsX2dldF9jcm9wY2FwZHQsCisJfSwgeworCQkuZGVzYyA9ICJDYXB0dXJlIGNyb3Agd2lkdGgiLAorCQkubmFtZSA9ICJjcm9wX3dpZHRoIiwKKwkJLmludGVybmFsX2lkID0gUFZSMl9DSURfQ1JPUFcsCisJCS5kZWZhdWx0X3ZhbHVlID0gNzIwLAorCQlERUZSRUYoY3JvcHcpLAorCQkuZ2V0X21heF92YWx1ZSA9IGN0cmxfY3JvcHdfbWF4X2dldCwKKwkJLmdldF9kZWZfdmFsdWUgPSBjdHJsX2dldF9jcm9wY2FwZHcsCisJfSwgeworCQkuZGVzYyA9ICJDYXB0dXJlIGNyb3AgaGVpZ2h0IiwKKwkJLm5hbWUgPSAiY3JvcF9oZWlnaHQiLAorCQkuaW50ZXJuYWxfaWQgPSBQVlIyX0NJRF9DUk9QSCwKKwkJLmRlZmF1bHRfdmFsdWUgPSA0ODAsCisJCURFRlJFRihjcm9waCksCisJCS5nZXRfbWF4X3ZhbHVlID0gY3RybF9jcm9waF9tYXhfZ2V0LAorCQkuZ2V0X2RlZl92YWx1ZSA9IGN0cmxfZ2V0X2Nyb3BjYXBkaCwKKwl9LCB7CisJCS5kZXNjID0gIkNhcHR1cmUgY2FwYWJpbGl0eSBwaXhlbCBhc3BlY3QgbnVtZXJhdG9yIiwKKwkJLm5hbWUgPSAiY3JvcGNhcF9waXhlbF9udW1lcmF0b3IiLAorCQkuaW50ZXJuYWxfaWQgPSBQVlIyX0NJRF9DUk9QQ0FQUEFOLAorCQkuZ2V0X3ZhbHVlID0gY3RybF9nZXRfY3JvcGNhcHBhbiwKKwl9LCB7CisJCS5kZXNjID0gIkNhcHR1cmUgY2FwYWJpbGl0eSBwaXhlbCBhc3BlY3QgZGVub21pbmF0b3IiLAorCQkubmFtZSA9ICJjcm9wY2FwX3BpeGVsX2Rlbm9taW5hdG9yIiwKKwkJLmludGVybmFsX2lkID0gUFZSMl9DSURfQ1JPUENBUFBBRCwKKwkJLmdldF92YWx1ZSA9IGN0cmxfZ2V0X2Nyb3BjYXBwYWQsCisJfSwgeworCQkuZGVzYyA9ICJDYXB0dXJlIGNhcGFiaWxpdHkgYm91bmRzIHRvcCIsCisJCS5uYW1lID0gImNyb3BjYXBfYm91bmRzX3RvcCIsCisJCS5pbnRlcm5hbF9pZCA9IFBWUjJfQ0lEX0NST1BDQVBCVCwKKwkJLmdldF92YWx1ZSA9IGN0cmxfZ2V0X2Nyb3BjYXBidCwKKwl9LCB7CisJCS5kZXNjID0gIkNhcHR1cmUgY2FwYWJpbGl0eSBib3VuZHMgbGVmdCIsCisJCS5uYW1lID0gImNyb3BjYXBfYm91bmRzX2xlZnQiLAorCQkuaW50ZXJuYWxfaWQgPSBQVlIyX0NJRF9DUk9QQ0FQQkwsCisJCS5nZXRfdmFsdWUgPSBjdHJsX2dldF9jcm9wY2FwYmwsCisJfSwgeworCQkuZGVzYyA9ICJDYXB0dXJlIGNhcGFiaWxpdHkgYm91bmRzIHdpZHRoIiwKKwkJLm5hbWUgPSAiY3JvcGNhcF9ib3VuZHNfd2lkdGgiLAorCQkuaW50ZXJuYWxfaWQgPSBQVlIyX0NJRF9DUk9QQ0FQQlcsCisJCS5nZXRfdmFsdWUgPSBjdHJsX2dldF9jcm9wY2FwYncsCisJfSwgeworCQkuZGVzYyA9ICJDYXB0dXJlIGNhcGFiaWxpdHkgYm91bmRzIGhlaWdodCIsCisJCS5uYW1lID0gImNyb3BjYXBfYm91bmRzX2hlaWdodCIsCisJCS5pbnRlcm5hbF9pZCA9IFBWUjJfQ0lEX0NST1BDQVBCSCwKKwkJLmdldF92YWx1ZSA9IGN0cmxfZ2V0X2Nyb3BjYXBiaCwKIAl9LHsKIAkJLmRlc2MgPSAiVmlkZW8gU291cmNlIiwKIAkJLm5hbWUgPSAiaW5wdXQiLApAQCAtMTMxMyw5ICsxNTcyLDE5IEBACiAJCWlmIChiY250ID4gRklSTVdBUkVfQ0hVTktfU0laRSkgYmNudCA9IEZJUk1XQVJFX0NIVU5LX1NJWkU7CiAJCW1lbWNweShmd19wdHIsIGZ3X2VudHJ5LT5kYXRhICsgZndfZG9uZSwgYmNudCk7CiAJCS8qIFVzYnNub29wIGxvZyBzaG93cyB0aGF0IHdlIG11c3Qgc3dhcCBieXRlcy4uLiAqLworCQkvKiBTb21lIGJhY2tncm91bmQgaW5mbzogVGhlIGRhdGEgYmVpbmcgc3dhcHBlZCBoZXJlIGlzIGEKKwkJICAgZmlybXdhcmUgaW1hZ2UgZGVzdGluZWQgZm9yIHRoZSBtcGVnIGVuY29kZXIgY2hpcCB0aGF0CisJCSAgIGxpdmVzIGF0IHRoZSBvdGhlciBlbmQgb2YgYSBVU0IgZW5kcG9pbnQuICBUaGUgZW5jb2RlcgorCQkgICBjaGlwIGFsd2F5cyB0YWxrcyBpbiAzMiBiaXQgY2h1bmtzIGFuZCBpdHMgc3RvcmFnZSBpcworCQkgICBvcmdhbml6ZWQgaW50byAzMiBiaXQgd29yZHMuICBIb3dldmVyIGZyb20gdGhlIGZpbGUKKwkJICAgc3lzdGVtIHRvIHRoZSBlbmNvZGVyIGNoaXAgZXZlcnl0aGluZyBpcyBwdXJlbHkgYSBieXRlCisJCSAgIHN0cmVhbS4gIFRoZSBmaXJtd2FyZSBmaWxlJ3MgY29udGVudHMgYXJlIGFsd2F5cyAzMiBiaXQKKwkJICAgc3dhcHBlZCBmcm9tIHdoYXQgdGhlIGVuY29kZXIgZXhwZWN0cy4gIFRodXMgdGhlIG5lZWQKKwkJICAgYWx3YXlzIGV4aXN0cyB0byBzd2FwIHRoZSBieXRlcyByZWdhcmRsZXNzIG9mIHRoZSBlbmRpYW4KKwkJICAgdHlwZSBvZiB0aGUgaG9zdCBwcm9jZXNzb3IgYW5kIHRoZXJlZm9yZSBzd2FiMzIoKSBtYWtlcworCQkgICB0aGUgbW9zdCBzZW5zZS4gKi8KIAkJZm9yIChpY250ID0gMDsgaWNudCA8IGJjbnQvNCA7IGljbnQrKykKLQkJCSgodTMyICopZndfcHRyKVtpY250XSA9Ci0JCQkJX19fc3dhYjMyKCgodTMyICopZndfcHRyKVtpY250XSk7CisJCQkoKHUzMiAqKWZ3X3B0cilbaWNudF0gPSBzd2FiMzIoKCh1MzIgKilmd19wdHIpW2ljbnRdKTsKIAogCQlyZXQgfD0gdXNiX2J1bGtfbXNnKGhkdy0+dXNiX2RldiwgcGlwZSwgZndfcHRyLGJjbnQsCiAJCQkJICAgICZhY3R1YWxfbGVuZ3RoLCBIWik7CkBAIC0xOTA1LDcgKzIxNzQsNyBAQAogCQkJCSBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqZGV2aWQpCiB7CiAJdW5zaWduZWQgaW50IGlkeCxjbnQxLGNudDIsbTsKLQlzdHJ1Y3QgcHZyMl9oZHcgKmhkdzsKKwlzdHJ1Y3QgcHZyMl9oZHcgKmhkdyA9IE5VTEw7CiAJaW50IHZhbGlkX3N0ZF9tYXNrOwogCXN0cnVjdCBwdnIyX2N0cmwgKmNwdHI7CiAJY29uc3Qgc3RydWN0IHB2cjJfZGV2aWNlX2Rlc2MgKmhkd19kZXNjOwpAQCAtMTkxNSw2ICsyMTg0LDE2IEBACiAKIAloZHdfZGVzYyA9IChjb25zdCBzdHJ1Y3QgcHZyMl9kZXZpY2VfZGVzYyAqKShkZXZpZC0+ZHJpdmVyX2luZm8pOwogCisJaWYgKGhkd19kZXNjID09IE5VTEwpIHsKKwkJcHZyMl90cmFjZShQVlIyX1RSQUNFX0lOSVQsICJwdnIyX2hkd19jcmVhdGU6IgorCQkJICAgIiBObyBkZXZpY2UgZGVzY3JpcHRpb24gcG9pbnRlciwiCisJCQkgICAiIHVuYWJsZSB0byBjb250aW51ZS4iKTsKKwkJcHZyMl90cmFjZShQVlIyX1RSQUNFX0lOSVQsICJJZiB5b3UgaGF2ZSBhIG5ldyBkZXZpY2UgdHlwZSwiCisJCQkgICAiIHBsZWFzZSBjb250YWN0IE1pa2UgSXNlbHkgPGlzZWx5QHBvYm94LmNvbT4iCisJCQkgICAiIHRvIGdldCBpdCBpbmNsdWRlZCBpbiB0aGUgZHJpdmVyXG4iKTsKKwkJZ290byBmYWlsOworCX0KKwogCWhkdyA9IGt6YWxsb2Moc2l6ZW9mKCpoZHcpLEdGUF9LRVJORUwpOwogCXB2cjJfdHJhY2UoUFZSMl9UUkFDRV9JTklULCJwdnIyX2hkd19jcmVhdGU6IGhkdz0lcCwgdHlwZSBcIiVzXCIiLAogCQkgICBoZHcsaGR3X2Rlc2MtPmRlc2NyaXB0aW9uKTsKQEAgLTIwNzIsNiArMjM1MSw3IEBACiAJCQl2YWxpZF9zdGRfbWFzazsKIAl9CiAKKwloZHctPmNyb3BjYXBfc3RhbGUgPSAhMDsKIAloZHctPmVlcHJvbV9hZGRyID0gLTE7CiAJaGR3LT51bml0X251bWJlciA9IC0xOwogCWhkdy0+djRsX21pbm9yX251bWJlcl92aWRlbyA9IC0xOwpAQCAtMjUwOCw2ICsyNzg4LDI4IEBACiAJCS8qIENhbid0IGNvbW1pdCBhbnl0aGluZyB1bnRpbCBwYXRod2F5IGlzIG9rLiAqLwogCQlyZXR1cm4gMDsKIAl9CisJLyogVGhlIGJyb2FkY2FzdCBkZWNvZGVyIGNhbiBvbmx5IHNjYWxlIGRvd24sIHNvIGlmCisJICogcmVzXypfZGlydHkgJiYgY3JvcCB3aW5kb3cgPCBvdXRwdXQgZm9ybWF0ID09PiBlbmxhcmdlIGNyb3AuCisJICoKKwkgKiBUaGUgbXBlZyBlbmNvZGVyIHJlY2VpdmVzIGZpZWxkcyBvZiByZXNfaG9yX3ZhbCBkb3RzIGFuZAorCSAqIHJlc192ZXJfdmFsIGhhbGZsaW5lcy4gIExpbWl0czogaG9yPD03MjAsIHZlcjw9NTc2LgorCSAqLworCWlmIChoZHctPnJlc19ob3JfZGlydHkgJiYgaGR3LT5jcm9wd192YWwgPCBoZHctPnJlc19ob3JfdmFsKSB7CisJCWhkdy0+Y3JvcHdfdmFsID0gaGR3LT5yZXNfaG9yX3ZhbDsKKwkJaGR3LT5jcm9wd19kaXJ0eSA9ICEwOworCX0gZWxzZSBpZiAoaGR3LT5jcm9wd19kaXJ0eSkgeworCQloZHctPnJlc19ob3JfZGlydHkgPSAhMDsgICAgICAgICAgIC8qIG11c3QgcmVzY2FsZSAqLworCQloZHctPnJlc19ob3JfdmFsID0gbWluKDcyMCwgaGR3LT5jcm9wd192YWwpOworCX0KKwlpZiAoaGR3LT5yZXNfdmVyX2RpcnR5ICYmIGhkdy0+Y3JvcGhfdmFsIDwgaGR3LT5yZXNfdmVyX3ZhbCkgeworCQloZHctPmNyb3BoX3ZhbCA9IGhkdy0+cmVzX3Zlcl92YWw7CisJCWhkdy0+Y3JvcGhfZGlydHkgPSAhMDsKKwl9IGVsc2UgaWYgKGhkdy0+Y3JvcGhfZGlydHkpIHsKKwkJaW50IG52cmVzID0gaGR3LT5zdGRfbWFza19jdXIgJiBWNEwyX1NURF81MjVfNjAgPyA0ODAgOiA1NzY7CisJCWhkdy0+cmVzX3Zlcl9kaXJ0eSA9ICEwOworCQloZHctPnJlc192ZXJfdmFsID0gbWluKG52cmVzLCBoZHctPmNyb3BoX3ZhbCk7CisJfQorCiAJLyogSWYgYW55IG9mIHRoZSBiZWxvdyBoYXMgY2hhbmdlZCwgdGhlbiB3ZSBjYW4ndCBkbyB0aGUgdXBkYXRlCiAJICAgd2hpbGUgdGhlIHBpcGVsaW5lIGlzIHJ1bm5pbmcuICBQaXBlbGluZSBtdXN0IGJlIHBhdXNlZCBmaXJzdAogCSAgIGFuZCBkZWNvZGVyIC0+IGVuY29kZXIgY29ubmVjdGlvbiBiZSBtYWRlIHF1aWVzY2VudCBiZWZvcmUgd2UKQEAgLTI1MTgsNiArMjgyMCw4IEBACiAJCSBoZHctPnNyYXRlX2RpcnR5IHx8CiAJCSBoZHctPnJlc192ZXJfZGlydHkgfHwKIAkJIGhkdy0+cmVzX2hvcl9kaXJ0eSB8fAorCQkgaGR3LT5jcm9wd19kaXJ0eSB8fAorCQkgaGR3LT5jcm9waF9kaXJ0eSB8fAogCQkgaGR3LT5pbnB1dF9kaXJ0eSB8fAogCQkgKGhkdy0+YWN0aXZlX3N0cmVhbV90eXBlICE9IGhkdy0+ZGVzaXJlZF9zdHJlYW1fdHlwZSkpOwogCWlmIChkaXNydXB0aXZlX2NoYW5nZSAmJiAhaGR3LT5zdGF0ZV9waXBlbGluZV9pZGxlKSB7CkBAIC0yNTg3LDYgKzI4OTEsOSBAQAogCX0KIAogCWhkdy0+c3RhdGVfcGlwZWxpbmVfY29uZmlnID0gITA7CisJLyogSGFyZHdhcmUgc3RhdGUgbWF5IGhhdmUgY2hhbmdlZCBpbiBhIHdheSB0byBjYXVzZSB0aGUgY3JvcHBpbmcKKwkgICBjYXBhYmlsaXRpZXMgdG8gaGF2ZSBjaGFuZ2VkLiAgU28gbWFyayBpdCBzdGFsZSwgd2hpY2ggd2lsbAorCSAgIGNhdXNlIGEgbGF0ZXIgcmUtZmV0Y2guICovCiAJdHJhY2Vfc3RiaXQoInN0YXRlX3BpcGVsaW5lX2NvbmZpZyIsaGR3LT5zdGF0ZV9waXBlbGluZV9jb25maWcpOwogCXJldHVybiAhMDsKIH0KQEAgLTI2NzcsNiArMjk4NCwzMyBAQAogfQogCiAKK3N0YXRpYyBpbnQgcHZyMl9oZHdfY2hlY2tfY3JvcGNhcChzdHJ1Y3QgcHZyMl9oZHcgKmhkdykKK3sKKwlpZiAoIWhkdy0+Y3JvcGNhcF9zdGFsZSkgeworCQlyZXR1cm4gMDsKKwl9CisJcHZyMl9pMmNfY29yZV9zdGF0dXNfcG9sbChoZHcpOworCWlmIChoZHctPmNyb3BjYXBfc3RhbGUpIHsKKwkJcmV0dXJuIC1FSU87CisJfQorCXJldHVybiAwOworfQorCisKKy8qIFJldHVybiBpbmZvcm1hdGlvbiBhYm91dCBjcm9wcGluZyBjYXBhYmlsaXRpZXMgKi8KK2ludCBwdnIyX2hkd19nZXRfY3JvcGNhcChzdHJ1Y3QgcHZyMl9oZHcgKmhkdywgc3RydWN0IHY0bDJfY3JvcGNhcCAqcHApCit7CisJaW50IHN0YXQgPSAwOworCUxPQ0tfVEFLRShoZHctPmJpZ19sb2NrKTsKKwlzdGF0ID0gcHZyMl9oZHdfY2hlY2tfY3JvcGNhcChoZHcpOworCWlmICghc3RhdCkgeworCQltZW1jcHkocHAsICZoZHctPmNyb3BjYXBfaW5mbywgc2l6ZW9mKGhkdy0+Y3JvcGNhcF9pbmZvKSk7CisJfQorCUxPQ0tfR0lWRShoZHctPmJpZ19sb2NrKTsKKwlyZXR1cm4gc3RhdDsKK30KKworCiAvKiBSZXR1cm4gaW5mb3JtYXRpb24gYWJvdXQgdGhlIHR1bmVyICovCiBpbnQgcHZyMl9oZHdfZ2V0X3R1bmVyX3N0YXR1cyhzdHJ1Y3QgcHZyMl9oZHcgKmhkdyxzdHJ1Y3QgdjRsMl90dW5lciAqdnRwKQogewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItaGR3LmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1oZHcuaAppbmRleCBjMDQ5NTZkLi40OTQ4MmQxIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1oZHcuaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1oZHcuaApAQCAtMzYsNiArMzYsMTYgQEAKICNkZWZpbmUgUFZSMl9DSURfRlJFUVVFTkNZIDYKICNkZWZpbmUgUFZSMl9DSURfSFJFUyA3CiAjZGVmaW5lIFBWUjJfQ0lEX1ZSRVMgOAorI2RlZmluZSBQVlIyX0NJRF9DUk9QTCA5CisjZGVmaW5lIFBWUjJfQ0lEX0NST1BUIDEwCisjZGVmaW5lIFBWUjJfQ0lEX0NST1BXIDExCisjZGVmaW5lIFBWUjJfQ0lEX0NST1BIIDEyCisjZGVmaW5lIFBWUjJfQ0lEX0NST1BDQVBQQU4gMTMKKyNkZWZpbmUgUFZSMl9DSURfQ1JPUENBUFBBRCAxNAorI2RlZmluZSBQVlIyX0NJRF9DUk9QQ0FQQkwgMTUKKyNkZWZpbmUgUFZSMl9DSURfQ1JPUENBUEJUIDE2CisjZGVmaW5lIFBWUjJfQ0lEX0NST1BDQVBCVyAxNworI2RlZmluZSBQVlIyX0NJRF9DUk9QQ0FQQkggMTgKIAogLyogTGVnYWwgdmFsdWVzIGZvciB0aGUgSU5QVVQgc3RhdGUgdmFyaWFibGUgKi8KICNkZWZpbmUgUFZSMl9DVkFMX0lOUFVUX1RWIDAKQEAgLTE3MCw2ICsxODAsOSBAQAogLyogUmV0dXJuIGluZm9ybWF0aW9uIGFib3V0IHRoZSB0dW5lciAqLwogaW50IHB2cjJfaGR3X2dldF90dW5lcl9zdGF0dXMoc3RydWN0IHB2cjJfaGR3ICosc3RydWN0IHY0bDJfdHVuZXIgKik7CiAKKy8qIFJldHVybiBpbmZvcm1hdGlvbiBhYm91dCBjcm9wcGluZyBjYXBhYmlsaXRpZXMgKi8KK2ludCBwdnIyX2hkd19nZXRfY3JvcGNhcChzdHJ1Y3QgcHZyMl9oZHcgKiwgc3RydWN0IHY0bDJfY3JvcGNhcCAqKTsKKwogLyogUXVlcnkgZGV2aWNlIGFuZCBzZWUgaWYgaXQgdGhpbmtzIGl0IGlzIG9uIGEgaGlnaC1zcGVlZCBVU0IgbGluayAqLwogaW50IHB2cjJfaGR3X2lzX2hzbShzdHJ1Y3QgcHZyMl9oZHcgKik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWkyYy1jaGlwcy12NGwyLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1pMmMtY2hpcHMtdjRsMi5jCmluZGV4IGNjZGI0MjkuLjk0YTQ3NzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWkyYy1jaGlwcy12NGwyLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItaTJjLWNoaXBzLXY0bDIuYwpAQCAtMzcsOCArMzcsOSBAQAogI2RlZmluZSBPUF9WT0xVTUUgMwogI2RlZmluZSBPUF9GUkVRIDQKICNkZWZpbmUgT1BfQVVESU9SQVRFIDUKLSNkZWZpbmUgT1BfU0laRSA2Ci0jZGVmaW5lIE9QX0xPRyA3CisjZGVmaW5lIE9QX0NST1AgNgorI2RlZmluZSBPUF9TSVpFIDcKKyNkZWZpbmUgT1BfTE9HIDgKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBwdnIyX2kyY19vcCAqIGNvbnN0IG9wc1tdID0gewogCVtPUF9TVEFOREFSRF0gPSAmcHZyMl9pMmNfb3BfdjRsMl9zdGFuZGFyZCwKQEAgLTQ2LDYgKzQ3LDcgQEAKIAlbT1BfQkNTSF0gPSAmcHZyMl9pMmNfb3BfdjRsMl9iY3NoLAogCVtPUF9WT0xVTUVdID0gJnB2cjJfaTJjX29wX3Y0bDJfdm9sdW1lLAogCVtPUF9GUkVRXSA9ICZwdnIyX2kyY19vcF92NGwyX2ZyZXF1ZW5jeSwKKwlbT1BfQ1JPUF0gPSAmcHZyMl9pMmNfb3BfdjRsMl9jcm9wLAogCVtPUF9TSVpFXSA9ICZwdnIyX2kyY19vcF92NGwyX3NpemUsCiAJW09QX0xPR10gPSAmcHZyMl9pMmNfb3BfdjRsMl9sb2csCiB9OwpAQCAtNTksNiArNjEsNyBAQAogCQkJKDEgPDwgT1BfQkNTSCkgfAogCQkJKDEgPDwgT1BfVk9MVU1FKSB8CiAJCQkoMSA8PCBPUF9GUkVRKSB8CisJCQkoMSA8PCBPUF9DUk9QKSB8CiAJCQkoMSA8PCBPUF9TSVpFKSB8CiAJCQkoMSA8PCBPUF9MT0cpKTsKIAljcC0+c3RhdHVzX3BvbGwgPSBwdnIyX3Y0bDJfY21kX3N0YXR1c19wb2xsOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItaTJjLWNtZC12NGwyLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1pMmMtY21kLXY0bDIuYwppbmRleCA1NWYwNGEwLi4xNmJiMTE5IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1pMmMtY21kLXY0bDIuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1pMmMtY21kLXY0bDIuYwpAQCAtMzcsNiArMzcsNyBAQAogCQlwdnIyX2kyY19jb3JlX2NtZChoZHcsVklESU9DX1NfU1RELCZ2cyk7CiAJfQogCWhkdy0+dHVuZXJfc2lnbmFsX3N0YWxlID0gITA7CisJaGR3LT5jcm9wY2FwX3N0YWxlID0gITA7CiB9CiAKIApAQCAtMjMzLDYgKzIzNCwzNyBAQAogfTsKIAogCitzdGF0aWMgdm9pZCBzZXRfY3JvcChzdHJ1Y3QgcHZyMl9oZHcgKmhkdykKK3sKKwlzdHJ1Y3QgdjRsMl9jcm9wIGNyb3A7CisKKwltZW1zZXQoJmNyb3AsIDAsIHNpemVvZiBjcm9wKTsKKwljcm9wLnR5cGUgPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU7CisJY3JvcC5jLmxlZnQgPSBoZHctPmNyb3BsX3ZhbDsKKwljcm9wLmMudG9wID0gaGR3LT5jcm9wdF92YWw7CisJY3JvcC5jLmhlaWdodCA9IGhkdy0+Y3JvcGhfdmFsOworCWNyb3AuYy53aWR0aCA9IGhkdy0+Y3JvcHdfdmFsOworCisJcHZyMl90cmFjZShQVlIyX1RSQUNFX0NISVBTLAorCQkgICAiaTJjIHY0bDIgc2V0X2Nyb3AgY3JvcD0lZDolZDolZDolZCIsCisJCSAgIGNyb3AuYy53aWR0aCwgY3JvcC5jLmhlaWdodCwgY3JvcC5jLmxlZnQsIGNyb3AuYy50b3ApOworCisJcHZyMl9pMmNfY29yZV9jbWQoaGR3LCBWSURJT0NfU19DUk9QLCAmY3JvcCk7Cit9CisKK3N0YXRpYyBpbnQgY2hlY2tfY3JvcChzdHJ1Y3QgcHZyMl9oZHcgKmhkdykKK3sKKwlyZXR1cm4gKGhkdy0+Y3JvcGxfZGlydHkgfHwgaGR3LT5jcm9wdF9kaXJ0eSB8fAorCQloZHctPmNyb3B3X2RpcnR5IHx8IGhkdy0+Y3JvcGhfZGlydHkpOworfQorCitjb25zdCBzdHJ1Y3QgcHZyMl9pMmNfb3AgcHZyMl9pMmNfb3BfdjRsMl9jcm9wID0geworCS5jaGVjayA9IGNoZWNrX2Nyb3AsCisJLnVwZGF0ZSA9IHNldF9jcm9wLAorCS5uYW1lID0gInY0bDJfY3JvcCIsCit9OworCisKIHN0YXRpYyB2b2lkIGRvX2xvZyhzdHJ1Y3QgcHZyMl9oZHcgKmhkdykKIHsKIAlwdnIyX3RyYWNlKFBWUjJfVFJBQ0VfQ0hJUFMsImkyYyB2NGwyIGRvX2xvZygpIik7CkBAIC0yNjMsNyArMjk1LDE5IEBACiAKIHZvaWQgcHZyMl92NGwyX2NtZF9zdGF0dXNfcG9sbChzdHJ1Y3QgcHZyMl9pMmNfY2xpZW50ICpjcCkKIHsKLQlwdnIyX2kyY19jbGllbnRfY21kKGNwLFZJRElPQ19HX1RVTkVSLCZjcC0+aGR3LT50dW5lcl9zaWduYWxfaW5mbyk7CisJaW50IHN0YXQ7CisJc3RydWN0IHB2cjJfaGR3ICpoZHcgPSBjcC0+aGR3OworCWlmIChoZHctPmNyb3BjYXBfc3RhbGUpIHsKKwkJaGR3LT5jcm9wY2FwX2luZm8udHlwZSA9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRTsKKwkJc3RhdCA9IHB2cjJfaTJjX2NsaWVudF9jbWQoY3AsIFZJRElPQ19DUk9QQ0FQLAorCQkJCQkgICAmaGR3LT5jcm9wY2FwX2luZm8pOworCQlpZiAoc3RhdCA9PSAwKSB7CisJCQkvKiBDaGVjayB3YXMgc3VjY2Vzc2Z1bCwgc28gdGhlIGRhdGEgaXMgbm8KKwkJCSAgIGxvbmdlciBjb25zaWRlcmVkIHN0YWxlLiAqLworCQkJaGR3LT5jcm9wY2FwX3N0YWxlID0gMDsKKwkJfQorCX0KKwlwdnIyX2kyY19jbGllbnRfY21kKGNwLCBWSURJT0NfR19UVU5FUiwgJmhkdy0+dHVuZXJfc2lnbmFsX2luZm8pOwogfQogCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWkyYy1jbWQtdjRsMi5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItaTJjLWNtZC12NGwyLmgKaW5kZXggN2ZhMzg2OC4uZWI3NDRhMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItaTJjLWNtZC12NGwyLmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItaTJjLWNtZC12NGwyLmgKQEAgLTI5LDYgKzI5LDcgQEAKIGV4dGVybiBjb25zdCBzdHJ1Y3QgcHZyMl9pMmNfb3AgcHZyMl9pMmNfb3BfdjRsMl9iY3NoOwogZXh0ZXJuIGNvbnN0IHN0cnVjdCBwdnIyX2kyY19vcCBwdnIyX2kyY19vcF92NGwyX3ZvbHVtZTsKIGV4dGVybiBjb25zdCBzdHJ1Y3QgcHZyMl9pMmNfb3AgcHZyMl9pMmNfb3BfdjRsMl9mcmVxdWVuY3k7CitleHRlcm4gY29uc3Qgc3RydWN0IHB2cjJfaTJjX29wIHB2cjJfaTJjX29wX3Y0bDJfY3JvcDsKIGV4dGVybiBjb25zdCBzdHJ1Y3QgcHZyMl9pMmNfb3AgcHZyMl9pMmNfb3BfdjRsMl9zaXplOwogZXh0ZXJuIGNvbnN0IHN0cnVjdCBwdnIyX2kyY19vcCBwdnIyX2kyY19vcF92NGwyX2F1ZGlvbW9kZTsKIGV4dGVybiBjb25zdCBzdHJ1Y3QgcHZyMl9pMmNfb3AgcHZyMl9pMmNfb3BfdjRsMl9sb2c7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1pMmMtY29yZS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItaTJjLWNvcmUuYwppbmRleCBlNjAwNTc2Li5kNmEzNTQwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1pMmMtY29yZS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWkyYy1jb3JlLmMKQEAgLTgyNyw3ICs4MjcsNyBAQAogCWlmICgoZGV0YWlsICYgUFZSMl9JMkNfREVUQUlMX0NUTE1BU0spICYmIGNwLT5jdGxfbWFzaykgewogCQl1bnNpZ25lZCBpbnQgaWR4OwogCQl1bnNpZ25lZCBsb25nIG1zayxzbTsKLQkJaW50IHNwY2ZsOworCiAJCWJjbnQgPSBzY25wcmludGYoYnVmLG1heGxlbiwiIFsiKTsKIAkJY2NudCArPSBiY250OyBidWYgKz0gYmNudDsgbWF4bGVuIC09IGJjbnQ7CiAJCXNtID0gMDsKQEAgLTg5MSw2ICs4OTEsNyBAQAogCUlOSVRfTElTVF9IRUFEKCZjcC0+bGlzdCk7CiAJY3AtPmNsaWVudCA9IGNsaWVudDsKIAltdXRleF9sb2NrKCZoZHctPmkyY19saXN0X2xvY2spOyBkbyB7CisJCWhkdy0+Y3JvcGNhcF9zdGFsZSA9ICEwOwogCQlsaXN0X2FkZF90YWlsKCZjcC0+bGlzdCwmaGR3LT5pMmNfY2xpZW50cyk7CiAJCWhkdy0+aTJjX3BlbmRfdHlwZXMgfD0gUFZSMl9JMkNfUEVORF9ERVRFQ1Q7CiAJfSB3aGlsZSAoMCk7IG11dGV4X3VubG9jaygmaGR3LT5pMmNfbGlzdF9sb2NrKTsKQEAgLTkwNSw2ICs5MDYsNyBAQAogCXVuc2lnbmVkIGxvbmcgYW1hc2sgPSAwOwogCWludCBmb3VuZGZsID0gMDsKIAltdXRleF9sb2NrKCZoZHctPmkyY19saXN0X2xvY2spOyBkbyB7CisJCWhkdy0+Y3JvcGNhcF9zdGFsZSA9ICEwOwogCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoY3AsIG5jcCwgJmhkdy0+aTJjX2NsaWVudHMsIGxpc3QpIHsKIAkJCWlmIChjcC0+Y2xpZW50ID09IGNsaWVudCkgewogCQkJCXRyYWNlX2kyYygicHZyMl9pMmNfZGV0YWNoIgpAQCAtOTQ2LDIyICs5NDgsMzIgQEAKIAkuY2xpZW50X3VucmVnaXN0ZXIgPSBwdnIyX2kyY19kZXRhY2hfaW5mb3JtLAogfTsKIAotc3RhdGljIHZvaWQgZG9faTJjX3NjYW4oc3RydWN0IHB2cjJfaGR3ICpoZHcpCisKKy8qIFJldHVybiB0cnVlIGlmIGRldmljZSBleGlzdHMgYXQgZ2l2ZW4gYWRkcmVzcyAqLworc3RhdGljIGludCBkb19pMmNfcHJvYmUoc3RydWN0IHB2cjJfaGR3ICpoZHcsIGludCBhZGRyKQogewogCXN0cnVjdCBpMmNfbXNnIG1zZ1sxXTsKLQlpbnQgaSxyYzsKKwlpbnQgcmM7CiAJbXNnWzBdLmFkZHIgPSAwOwogCW1zZ1swXS5mbGFncyA9IEkyQ19NX1JEOwogCW1zZ1swXS5sZW4gPSAwOwogCW1zZ1swXS5idWYgPSBOVUxMOwotCXByaW50aygiJXM6IGkyYyBzY2FuIGJlZ2lubmluZ1xuIixoZHctPm5hbWUpOworCW1zZ1swXS5hZGRyID0gYWRkcjsKKwlyYyA9IGkyY190cmFuc2ZlcigmaGR3LT5pMmNfYWRhcCwgbXNnLCBBUlJBWV9TSVpFKG1zZykpOworCXJldHVybiByYyA9PSAxOworfQorCitzdGF0aWMgdm9pZCBkb19pMmNfc2NhbihzdHJ1Y3QgcHZyMl9oZHcgKmhkdykKK3sKKwlpbnQgaTsKKwlwcmludGsoS0VSTl9JTkZPICIlczogaTJjIHNjYW4gYmVnaW5uaW5nXG4iLCBoZHctPm5hbWUpOwogCWZvciAoaSA9IDA7IGkgPCAxMjg7IGkrKykgewotCQltc2dbMF0uYWRkciA9IGk7Ci0JCXJjID0gaTJjX3RyYW5zZmVyKCZoZHctPmkyY19hZGFwLG1zZywgQVJSQVlfU0laRShtc2cpKTsKLQkJaWYgKHJjICE9IDEpIGNvbnRpbnVlOwotCQlwcmludGsoIiVzOiBpMmMgc2NhbjogZm91bmQgZGV2aWNlIEAgMHgleFxuIixoZHctPm5hbWUsaSk7CisJCWlmIChkb19pMmNfcHJvYmUoaGR3LCBpKSkgeworCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IGkyYyBzY2FuOiBmb3VuZCBkZXZpY2UgQCAweCV4XG4iLAorCQkJICAgICAgIGhkdy0+bmFtZSwgaSk7CisJCX0KIAl9Ci0JcHJpbnRrKCIlczogaTJjIHNjYW4gZG9uZS5cbiIsaGR3LT5uYW1lKTsKKwlwcmludGsoS0VSTl9JTkZPICIlczogaTJjIHNjYW4gZG9uZS5cbiIsIGhkdy0+bmFtZSk7CiB9CiAKIHZvaWQgcHZyMl9pMmNfY29yZV9pbml0KHN0cnVjdCBwdnIyX2hkdyAqaGR3KQpAQCAtOTgwLDggKzk5Miw2IEBACiAJCWhkdy0+aTJjX2Z1bmNbMHgxOF0gPSBpMmNfYmxhY2tfaG9sZTsKIAl9IGVsc2UgaWYgKGlyX21vZGVbaGR3LT51bml0X251bWJlcl0gPT0gMSkgewogCQlpZiAoaGR3LT5oZHdfZGVzYy0+aXJfc2NoZW1lID09IFBWUjJfSVJfU0NIRU1FXzI0WFhYKSB7Ci0JCQkvKiBUaGlzIGNvbW1lbnQgaXMgcHJlc2VudCBQVVJFTFkgdG8gZ2V0Ci0JCQkgICBjaGVja3BhdGNoLnBsIHRvIFNURlUuICBMb3ZlbHksIGVoPyAqLwogCQkJaGR3LT5pMmNfZnVuY1sweDE4XSA9IGkyY18yNHh4eF9pcjsKIAkJfQogCX0KQEAgLTEwMDYsNiArMTAxNiwxNiBAQAogCW11dGV4X2luaXQoJmhkdy0+aTJjX2xpc3RfbG9jayk7CiAJaGR3LT5pMmNfbGlua2VkID0gITA7CiAJaTJjX2FkZF9hZGFwdGVyKCZoZHctPmkyY19hZGFwKTsKKwlpZiAoaGR3LT5pMmNfZnVuY1sweDE4XSA9PSBpMmNfMjR4eHhfaXIpIHsKKwkJLyogUHJvYmUgZm9yIGEgZGlmZmVyZW50IHR5cGUgb2YgSVIgcmVjZWl2ZXIgb24gdGhpcworCQkgICBkZXZpY2UuICBJZiBwcmVzZW50LCBkaXNhYmxlIHRoZSBlbXVsYXRlZCBJUiByZWNlaXZlci4gKi8KKwkJaWYgKGRvX2kyY19wcm9iZShoZHcsIDB4NzEpKSB7CisJCQlwdnIyX3RyYWNlKFBWUjJfVFJBQ0VfSU5GTywKKwkJCQkgICAiRGV2aWNlIGhhcyBuZXdlciBJUiBoYXJkd2FyZTsiCisJCQkJICAgIiBkaXNhYmxpbmcgdW5uZWVkZWQgdmlydHVhbCBJUiBkZXZpY2UiKTsKKwkJCWhkdy0+aTJjX2Z1bmNbMHgxOF0gPSBOVUxMOworCQl9CisJfQogCWlmIChpMmNfc2NhbikgZG9faTJjX3NjYW4oaGR3KTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItbWFpbi5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItbWFpbi5jCmluZGV4IGFkMGQ5OGMuLjliM2M4NzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLW1haW4uYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1tYWluLmMKQEAgLTEzNyw5ICsxMzcsMTEgQEAKIAlyZXQgPSB1c2JfcmVnaXN0ZXIoJnB2cl9kcml2ZXIpOwogCiAJaWYgKHJldCA9PSAwKQotCQlpbmZvKERSSVZFUl9ERVNDICIgOiAiIERSSVZFUl9WRVJTSU9OKTsKLQlpZiAocHZydXNiMl9kZWJ1ZykgaW5mbygiRGVidWcgbWFzayBpcyAlZCAoMHgleCkiLAotCQkJCXB2cnVzYjJfZGVidWcscHZydXNiMl9kZWJ1Zyk7CisJCXByaW50ayhLRVJOX0lORk8gS0JVSUxEX01PRE5BTUUgIjogIiBEUklWRVJfVkVSU0lPTiAiOiIKKwkJICAgICAgIERSSVZFUl9ERVNDICJcbiIpOworCWlmIChwdnJ1c2IyX2RlYnVnKQorCQlwcmludGsoS0VSTl9JTkZPIEtCVUlMRF9NT0ROQU1FICI6IERlYnVnIG1hc2sgaXMgJWQgKDB4JXgpXG4iLAorCQkgICAgICAgcHZydXNiMl9kZWJ1ZyxwdnJ1c2IyX2RlYnVnKTsKIAogCXB2cjJfdHJhY2UoUFZSMl9UUkFDRV9JTklULCJwdnJfaW5pdCBjb21wbGV0ZSIpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1zeXNmcy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItc3lzZnMuYwppbmRleCA0NmE4YzM5Yi4uNzMzNjgwZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItc3lzZnMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1zeXNmcy5jCkBAIC02NSw2ICs2NSw3IEBACiAJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgYXR0cl90eXBlOwogCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlIGF0dHJfbWluOwogCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlIGF0dHJfbWF4OworCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlIGF0dHJfZGVmOwogCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlIGF0dHJfZW51bTsKIAlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSBhdHRyX2JpdHM7CiAJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgYXR0cl92YWw7CkBAIC0xNDUsNiArMTQ2LDIzIEBACiAJcmV0dXJuIHNjbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiVsZFxuIiwgdmFsKTsKIH0KIAorc3RhdGljIHNzaXplX3Qgc2hvd19kZWYoc3RydWN0IGRldmljZSAqY2xhc3NfZGV2LAorCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQljaGFyICpidWYpCit7CisJc3RydWN0IHB2cjJfc3lzZnNfY3RsX2l0ZW0gKmNpcDsKKwlpbnQgdmFsOworCWludCByZXQ7CisJY2lwID0gY29udGFpbmVyX29mKGF0dHIsIHN0cnVjdCBwdnIyX3N5c2ZzX2N0bF9pdGVtLCBhdHRyX2RlZik7CisJcmV0ID0gcHZyMl9jdHJsX2dldF9kZWYoY2lwLT5jcHRyLCAmdmFsKTsKKwlwdnIyX3N5c2ZzX3RyYWNlKCJwdnIyX3N5c2ZzKCVwKSBzaG93X2RlZihjaWQ9JWQpIGlzICVkLCBzdGF0PSVkIiwKKwkJCSBjaXAtPmNocHRyLCBjaXAtPmN0bF9pZCwgdmFsLCByZXQpOworCWlmIChyZXQgPCAwKSB7CisJCXJldHVybiByZXQ7CisJfQorCXJldHVybiBzY25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIlZFxuIiwgdmFsKTsKK30KKwogc3RhdGljIHNzaXplX3Qgc2hvd192YWxfbm9ybShzdHJ1Y3QgZGV2aWNlICpjbGFzc19kZXYsCiAJCQkgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAogCQkJICAgICBjaGFyICpidWYpCkBAIC0zMjAsNiArMzM4LDEwIEBACiAJY2lwLT5hdHRyX21heC5hdHRyLm1vZGUgPSBTX0lSVUdPOwogCWNpcC0+YXR0cl9tYXguc2hvdyA9IHNob3dfbWF4OwogCisJY2lwLT5hdHRyX2RlZi5hdHRyLm5hbWUgPSAiZGVmX3ZhbCI7CisJY2lwLT5hdHRyX2RlZi5hdHRyLm1vZGUgPSBTX0lSVUdPOworCWNpcC0+YXR0cl9kZWYuc2hvdyA9IHNob3dfZGVmOworCiAJY2lwLT5hdHRyX3ZhbC5hdHRyLm5hbWUgPSAiY3VyX3ZhbCI7CiAJY2lwLT5hdHRyX3ZhbC5hdHRyLm1vZGUgPSBTX0lSVUdPOwogCkBAIC0zNDMsNiArMzY1LDcgQEAKIAljaXAtPmF0dHJfZ2VuW2FjbnQrK10gPSAmY2lwLT5hdHRyX25hbWUuYXR0cjsKIAljaXAtPmF0dHJfZ2VuW2FjbnQrK10gPSAmY2lwLT5hdHRyX3R5cGUuYXR0cjsKIAljaXAtPmF0dHJfZ2VuW2FjbnQrK10gPSAmY2lwLT5hdHRyX3ZhbC5hdHRyOworCWNpcC0+YXR0cl9nZW5bYWNudCsrXSA9ICZjaXAtPmF0dHJfZGVmLmF0dHI7CiAJY2lwLT5hdHRyX3ZhbC5zaG93ID0gc2hvd192YWxfbm9ybTsKIAljaXAtPmF0dHJfdmFsLnN0b3JlID0gc3RvcmVfdmFsX25vcm07CiAJaWYgKHB2cjJfY3RybF9oYXNfY3VzdG9tX3N5bWJvbHMoY3B0cikpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLXY0bDIuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLXY0bDIuYwppbmRleCAwMDMwNmZhLi5mMDQ4ZDgwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi12NGwyLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItdjRsMi5jCkBAIC01MzMsNyArNTMzLDcgQEAKIAogCQkJbG1pbiA9IHB2cjJfY3RybF9nZXRfbWluKGhjcCk7CiAJCQlsbWF4ID0gcHZyMl9jdHJsX2dldF9tYXgoaGNwKTsKLQkJCWxkZWYgPSBwdnIyX2N0cmxfZ2V0X2RlZihoY3ApOworCQkJcHZyMl9jdHJsX2dldF9kZWYoaGNwLCAmbGRlZik7CiAJCQlpZiAodyA9PSAtMSkgewogCQkJCXcgPSBsZGVmOwogCQkJfSBlbHNlIGlmICh3IDwgbG1pbikgewpAQCAtNTQzLDcgKzU0Myw3IEBACiAJCQl9CiAJCQlsbWluID0gcHZyMl9jdHJsX2dldF9taW4odmNwKTsKIAkJCWxtYXggPSBwdnIyX2N0cmxfZ2V0X21heCh2Y3ApOwotCQkJbGRlZiA9IHB2cjJfY3RybF9nZXRfZGVmKHZjcCk7CisJCQlwdnIyX2N0cmxfZ2V0X2RlZih2Y3AsICZsZGVmKTsKIAkJCWlmIChoID09IC0xKSB7CiAJCQkJaCA9IGxkZWY7CiAJCQl9IGVsc2UgaWYgKGggPCBsbWluKSB7CkBAIC02MDQsNiArNjA0LDcgQEAKIAljYXNlIFZJRElPQ19RVUVSWUNUUkw6CiAJewogCQlzdHJ1Y3QgcHZyMl9jdHJsICpjcHRyOworCQlpbnQgdmFsOwogCQlzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgKnZjID0gKHN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCAqKWFyZzsKIAkJcmV0ID0gMDsKIAkJaWYgKHZjLT5pZCAmIFY0TDJfQ1RSTF9GTEFHX05FWFRfQ1RSTCkgewpAQCAtNjI3LDcgKzYyOCw4IEBACiAJCQkgICBwdnIyX2N0cmxfZ2V0X2Rlc2MoY3B0cikpOwogCQlzdHJsY3B5KHZjLT5uYW1lLHB2cjJfY3RybF9nZXRfZGVzYyhjcHRyKSxzaXplb2YodmMtPm5hbWUpKTsKIAkJdmMtPmZsYWdzID0gcHZyMl9jdHJsX2dldF92NGxmbGFncyhjcHRyKTsKLQkJdmMtPmRlZmF1bHRfdmFsdWUgPSBwdnIyX2N0cmxfZ2V0X2RlZihjcHRyKTsKKwkJcHZyMl9jdHJsX2dldF9kZWYoY3B0ciwgJnZhbCk7CisJCXZjLT5kZWZhdWx0X3ZhbHVlID0gdmFsOwogCQlzd2l0Y2ggKHB2cjJfY3RybF9nZXRfdHlwZShjcHRyKSkgewogCQljYXNlIHB2cjJfY3RsX2VudW06CiAJCQl2Yy0+dHlwZSA9IFY0TDJfQ1RSTF9UWVBFX01FTlU7CkBAIC03NTMsNiArNzU1LDkyIEBACiAJCWJyZWFrOwogCX0KIAorCWNhc2UgVklESU9DX0NST1BDQVA6CisJeworCQlzdHJ1Y3QgdjRsMl9jcm9wY2FwICpjYXAgPSAoc3RydWN0IHY0bDJfY3JvcGNhcCAqKWFyZzsKKwkJaWYgKGNhcC0+dHlwZSAhPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUpIHsKKwkJCXJldCA9IC1FSU5WQUw7CisJCQlicmVhazsKKwkJfQorCQlyZXQgPSBwdnIyX2hkd19nZXRfY3JvcGNhcChoZHcsIGNhcCk7CisJCWNhcC0+dHlwZSA9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRTsgLyogcGFyYW5vaWEgKi8KKwkJYnJlYWs7CisJfQorCWNhc2UgVklESU9DX0dfQ1JPUDoKKwl7CisJCXN0cnVjdCB2NGwyX2Nyb3AgKmNyb3AgPSAoc3RydWN0IHY0bDJfY3JvcCAqKWFyZzsKKwkJaW50IHZhbCA9IDA7CisJCWlmIChjcm9wLT50eXBlICE9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSkgeworCQkJcmV0ID0gLUVJTlZBTDsKKwkJCWJyZWFrOworCQl9CisJCXJldCA9IHB2cjJfY3RybF9nZXRfdmFsdWUoCisJCQlwdnIyX2hkd19nZXRfY3RybF9ieV9pZChoZHcsIFBWUjJfQ0lEX0NST1BMKSwgJnZhbCk7CisJCWlmIChyZXQgIT0gMCkgeworCQkJcmV0ID0gLUVJTlZBTDsKKwkJCWJyZWFrOworCQl9CisJCWNyb3AtPmMubGVmdCA9IHZhbDsKKwkJcmV0ID0gcHZyMl9jdHJsX2dldF92YWx1ZSgKKwkJCXB2cjJfaGR3X2dldF9jdHJsX2J5X2lkKGhkdywgUFZSMl9DSURfQ1JPUFQpLCAmdmFsKTsKKwkJaWYgKHJldCAhPSAwKSB7CisJCQlyZXQgPSAtRUlOVkFMOworCQkJYnJlYWs7CisJCX0KKwkJY3JvcC0+Yy50b3AgPSB2YWw7CisJCXJldCA9IHB2cjJfY3RybF9nZXRfdmFsdWUoCisJCQlwdnIyX2hkd19nZXRfY3RybF9ieV9pZChoZHcsIFBWUjJfQ0lEX0NST1BXKSwgJnZhbCk7CisJCWlmIChyZXQgIT0gMCkgeworCQkJcmV0ID0gLUVJTlZBTDsKKwkJCWJyZWFrOworCQl9CisJCWNyb3AtPmMud2lkdGggPSB2YWw7CisJCXJldCA9IHB2cjJfY3RybF9nZXRfdmFsdWUoCisJCQlwdnIyX2hkd19nZXRfY3RybF9ieV9pZChoZHcsIFBWUjJfQ0lEX0NST1BIKSwgJnZhbCk7CisJCWlmIChyZXQgIT0gMCkgeworCQkJcmV0ID0gLUVJTlZBTDsKKwkJCWJyZWFrOworCQl9CisJCWNyb3AtPmMuaGVpZ2h0ID0gdmFsOworCX0KKwljYXNlIFZJRElPQ19TX0NST1A6CisJeworCQlzdHJ1Y3QgdjRsMl9jcm9wICpjcm9wID0gKHN0cnVjdCB2NGwyX2Nyb3AgKilhcmc7CisJCXN0cnVjdCB2NGwyX2Nyb3BjYXAgY2FwOworCQlpZiAoY3JvcC0+dHlwZSAhPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUpIHsKKwkJCXJldCA9IC1FSU5WQUw7CisJCQlicmVhazsKKwkJfQorCQljYXAudHlwZSA9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRTsKKwkJcmV0ID0gcHZyMl9jdHJsX3NldF92YWx1ZSgKKwkJCXB2cjJfaGR3X2dldF9jdHJsX2J5X2lkKGhkdywgUFZSMl9DSURfQ1JPUEwpLAorCQkJY3JvcC0+Yy5sZWZ0KTsKKwkJaWYgKHJldCAhPSAwKSB7CisJCQlyZXQgPSAtRUlOVkFMOworCQkJYnJlYWs7CisJCX0KKwkJcmV0ID0gcHZyMl9jdHJsX3NldF92YWx1ZSgKKwkJCXB2cjJfaGR3X2dldF9jdHJsX2J5X2lkKGhkdywgUFZSMl9DSURfQ1JPUFQpLAorCQkJY3JvcC0+Yy50b3ApOworCQlpZiAocmV0ICE9IDApIHsKKwkJCXJldCA9IC1FSU5WQUw7CisJCQlicmVhazsKKwkJfQorCQlyZXQgPSBwdnIyX2N0cmxfc2V0X3ZhbHVlKAorCQkJcHZyMl9oZHdfZ2V0X2N0cmxfYnlfaWQoaGR3LCBQVlIyX0NJRF9DUk9QVyksCisJCQljcm9wLT5jLndpZHRoKTsKKwkJaWYgKHJldCAhPSAwKSB7CisJCQlyZXQgPSAtRUlOVkFMOworCQkJYnJlYWs7CisJCX0KKwkJcmV0ID0gcHZyMl9jdHJsX3NldF92YWx1ZSgKKwkJCXB2cjJfaGR3X2dldF9jdHJsX2J5X2lkKGhkdywgUFZSMl9DSURfQ1JPUEgpLAorCQkJY3JvcC0+Yy5oZWlnaHQpOworCQlpZiAocmV0ICE9IDApIHsKKwkJCXJldCA9IC1FSU5WQUw7CisJCQlicmVhazsKKwkJfQorCX0KIAljYXNlIFZJRElPQ19MT0dfU1RBVFVTOgogCXsKIAkJcHZyMl9oZHdfdHJpZ2dlcl9tb2R1bGVfbG9nKGhkdyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B3Yy9wd2MtY3RybC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9wd2MvcHdjLWN0cmwuYwppbmRleCBkYmM1NjA3Li5jNjY1MzAyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B3Yy9wd2MtY3RybC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHdjL3B3Yy1jdHJsLmMKQEAgLTQxLDcgKzQxLDYgQEAKICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2VuZGlmCiAjaW5jbHVkZSA8YXNtL2Vycm5vLmg+Ci0jaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgogCiAjaW5jbHVkZSAicHdjLmgiCiAjaW5jbHVkZSAicHdjLXVuY29tcHJlc3MuaCIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHdjL3B3Yy1pZi5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9wd2MvcHdjLWlmLmMKaW5kZXggOWFlZTdjYi4uYWIyODM4OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9wd2MvcHdjLWlmLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9wd2MvcHdjLWlmLmMKQEAgLTExMTIsNyArMTExMiw3IEBACiAKIAlQV0NfREVCVUdfT1BFTigiPj4gdmlkZW9fb3BlbiBjYWxsZWQodmRldiA9IDB4JXApLlxuIiwgdmRldik7CiAKLQlwZGV2ID0gKHN0cnVjdCBwd2NfZGV2aWNlICopdmRldi0+cHJpdjsKKwlwZGV2ID0gdmlkZW9fZ2V0X2RydmRhdGEodmRldik7CiAJQlVHX09OKCFwZGV2KTsKIAlpZiAocGRldi0+dm9wZW4pIHsKIAkJUFdDX0RFQlVHX09QRU4oIkknbSBidXN5LCBzb21lb25lIGlzIHVzaW5nIHRoZSBkZXZpY2UuXG4iKTsKQEAgLTEyMzMsNyArMTIzMyw3IEBACiAJUFdDX0RFQlVHX09QRU4oIj4+IHZpZGVvX2Nsb3NlIGNhbGxlZCh2ZGV2ID0gMHglcCkuXG4iLCB2ZGV2KTsKIAogCWxvY2tfa2VybmVsKCk7Ci0JcGRldiA9IChzdHJ1Y3QgcHdjX2RldmljZSAqKXZkZXYtPnByaXY7CisJcGRldiA9IHZpZGVvX2dldF9kcnZkYXRhKHZkZXYpOwogCWlmIChwZGV2LT52b3BlbiA9PSAwKQogCQlQV0NfREVCVUdfTU9EVUxFKCJ2aWRlb19jbG9zZSgpIGNhbGxlZCBvbiBjbG9zZWQgZGV2aWNlP1xuIik7CiAKQEAgLTEzMDQsNyArMTMwNCw3IEBACiAJCQl2ZGV2LCBidWYsIGNvdW50KTsKIAlpZiAodmRldiA9PSBOVUxMKQogCQlyZXR1cm4gLUVGQVVMVDsKLQlwZGV2ID0gdmRldi0+cHJpdjsKKwlwZGV2ID0gdmlkZW9fZ2V0X2RydmRhdGEodmRldik7CiAJaWYgKHBkZXYgPT0gTlVMTCkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKQEAgLTEzODYsNyArMTM4Niw3IEBACiAKIAlpZiAodmRldiA9PSBOVUxMKQogCQlyZXR1cm4gLUVGQVVMVDsKLQlwZGV2ID0gdmRldi0+cHJpdjsKKwlwZGV2ID0gdmlkZW9fZ2V0X2RydmRhdGEodmRldik7CiAJaWYgKHBkZXYgPT0gTlVMTCkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKQEAgLTE0MDgsNyArMTQwOCw3IEBACiAKIAlpZiAoIXZkZXYpCiAJCWdvdG8gb3V0OwotCXBkZXYgPSB2ZGV2LT5wcml2OworCXBkZXYgPSB2aWRlb19nZXRfZHJ2ZGF0YSh2ZGV2KTsKIAogCW11dGV4X2xvY2soJnBkZXYtPm1vZGxvY2spOwogCWlmICghcGRldi0+dW5wbHVnZ2VkKQpAQCAtMTQyOCw3ICsxNDI4LDcgQEAKIAlpbnQgaW5kZXg7CiAKIAlQV0NfREVCVUdfTUVNT1JZKCI+PiAlc1xuIiwgX19mdW5jX18pOwotCXBkZXYgPSB2ZGV2LT5wcml2OworCXBkZXYgPSB2aWRlb19nZXRfZHJ2ZGF0YSh2ZGV2KTsKIAlzaXplID0gdm1hLT52bV9lbmQgLSB2bWEtPnZtX3N0YXJ0OwogCXN0YXJ0ID0gdm1hLT52bV9zdGFydDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9wd2MvcHdjLXY0bC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9wd2MvcHdjLXY0bC5jCmluZGV4IDE3NDI4ODkuLjc2YTEzNzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHdjL3B3Yy12NGwuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B3Yy9wd2MtdjRsLmMKQEAgLTM0Niw3ICszNDYsNyBAQAogCiAJaWYgKHZkZXYgPT0gTlVMTCkKIAkJcmV0dXJuIC1FRkFVTFQ7Ci0JcGRldiA9IHZkZXYtPnByaXY7CisJcGRldiA9IHZpZGVvX2dldF9kcnZkYXRhKHZkZXYpOwogCWlmIChwZGV2ID09IE5VTEwpCiAJCXJldHVybiAtRUZBVUxUOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B4YV9jYW1lcmEuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHhhX2NhbWVyYS5jCmluZGV4IGNmOTZiMmMuLmViNmJlNTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHhhX2NhbWVyYS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHhhX2NhbWVyYS5jCkBAIC02MjksMTcgKzYyOSw2IEBACiAJCXBkYXRhLT5pbml0KHBjZGV2LT5kZXYpOwogCX0KIAotCWlmIChwZGF0YSAmJiBwZGF0YS0+cG93ZXIpIHsKLQkJZGV2X2RiZyhwY2Rldi0+ZGV2LCAiJXM6IFBvd2VyIG9uIGNhbWVyYVxuIiwgX19mdW5jX18pOwotCQlwZGF0YS0+cG93ZXIocGNkZXYtPmRldiwgMSk7Ci0JfQotCi0JaWYgKHBkYXRhICYmIHBkYXRhLT5yZXNldCkgewotCQlkZXZfZGJnKHBjZGV2LT5kZXYsICIlczogUmVsZWFzaW5nIGNhbWVyYSByZXNldFxuIiwKLQkJCV9fZnVuY19fKTsKLQkJcGRhdGEtPnJlc2V0KHBjZGV2LT5kZXYsIDEpOwotCX0KLQogCUNJQ1IwID0gMHgzRkY7ICAgLyogZGlzYWJsZSBhbGwgaW50ZXJydXB0cyAqLwogCiAJaWYgKHBjZGV2LT5wbGF0Zm9ybV9mbGFncyAmIFBYQV9DQU1FUkFfUENMS19FTikKQEAgLTY2MCwyMCArNjQ5LDcgQEAKIAogc3RhdGljIHZvaWQgcHhhX2NhbWVyYV9kZWFjdGl2YXRlKHN0cnVjdCBweGFfY2FtZXJhX2RldiAqcGNkZXYpCiB7Ci0Jc3RydWN0IHB4YWNhbWVyYV9wbGF0Zm9ybV9kYXRhICpib2FyZCA9IHBjZGV2LT5wZGF0YTsKLQogCWNsa19kaXNhYmxlKHBjZGV2LT5jbGspOwotCi0JaWYgKGJvYXJkICYmIGJvYXJkLT5yZXNldCkgewotCQlkZXZfZGJnKHBjZGV2LT5kZXYsICIlczogQXNzZXJ0aW5nIGNhbWVyYSByZXNldFxuIiwKLQkJCV9fZnVuY19fKTsKLQkJYm9hcmQtPnJlc2V0KHBjZGV2LT5kZXYsIDApOwotCX0KLQotCWlmIChib2FyZCAmJiBib2FyZC0+cG93ZXIpIHsKLQkJZGV2X2RiZyhwY2Rldi0+ZGV2LCAiJXM6IFBvd2VyIG9mZiBjYW1lcmFcbiIsIF9fZnVuY19fKTsKLQkJYm9hcmQtPnBvd2VyKHBjZGV2LT5kZXYsIDApOwotCX0KIH0KIAogc3RhdGljIGlycXJldHVybl90IHB4YV9jYW1lcmFfaXJxKGludCBpcnEsIHZvaWQgKmRhdGEpCkBAIC0xMTQ0LDMxICsxMTIwLDMxIEBACiAJcGNkZXYtPmRldiA9ICZwZGV2LT5kZXY7CiAKIAkvKiByZXF1ZXN0IGRtYSAqLwotCXBjZGV2LT5kbWFfY2hhbnNbMF0gPSBweGFfcmVxdWVzdF9kbWEoIkNJX1kiLCBETUFfUFJJT19ISUdILAotCQkJCQkgICAgICBweGFfY2FtZXJhX2RtYV9pcnFfeSwgcGNkZXYpOwotCWlmIChwY2Rldi0+ZG1hX2NoYW5zWzBdIDwgMCkgeworCWVyciA9IHB4YV9yZXF1ZXN0X2RtYSgiQ0lfWSIsIERNQV9QUklPX0hJR0gsCisJCQkgICAgICBweGFfY2FtZXJhX2RtYV9pcnFfeSwgcGNkZXYpOworCWlmIChlcnIgPCAwKSB7CiAJCWRldl9lcnIocGNkZXYtPmRldiwgIkNhbid0IHJlcXVlc3QgRE1BIGZvciBZXG4iKTsKLQkJZXJyID0gLUVOT01FTTsKIAkJZ290byBleGl0X2lvdW5tYXA7CiAJfQorCXBjZGV2LT5kbWFfY2hhbnNbMF0gPSBlcnI7CiAJZGV2X2RiZyhwY2Rldi0+ZGV2LCAiZ290IERNQSBjaGFubmVsICVkXG4iLCBwY2Rldi0+ZG1hX2NoYW5zWzBdKTsKIAotCXBjZGV2LT5kbWFfY2hhbnNbMV0gPSBweGFfcmVxdWVzdF9kbWEoIkNJX1UiLCBETUFfUFJJT19ISUdILAotCQkJCQkgICAgICBweGFfY2FtZXJhX2RtYV9pcnFfdSwgcGNkZXYpOwotCWlmIChwY2Rldi0+ZG1hX2NoYW5zWzFdIDwgMCkgeworCWVyciA9IHB4YV9yZXF1ZXN0X2RtYSgiQ0lfVSIsIERNQV9QUklPX0hJR0gsCisJCQkgICAgICBweGFfY2FtZXJhX2RtYV9pcnFfdSwgcGNkZXYpOworCWlmIChlcnIgPCAwKSB7CiAJCWRldl9lcnIocGNkZXYtPmRldiwgIkNhbid0IHJlcXVlc3QgRE1BIGZvciBVXG4iKTsKLQkJZXJyID0gLUVOT01FTTsKIAkJZ290byBleGl0X2ZyZWVfZG1hX3k7CiAJfQorCXBjZGV2LT5kbWFfY2hhbnNbMV0gPSBlcnI7CiAJZGV2X2RiZyhwY2Rldi0+ZGV2LCAiZ290IERNQSBjaGFubmVsIChVKSAlZFxuIiwgcGNkZXYtPmRtYV9jaGFuc1sxXSk7CiAKLQlwY2Rldi0+ZG1hX2NoYW5zWzJdID0gcHhhX3JlcXVlc3RfZG1hKCJDSV9WIiwgRE1BX1BSSU9fSElHSCwKLQkJCQkJICAgICAgcHhhX2NhbWVyYV9kbWFfaXJxX3YsIHBjZGV2KTsKLQlpZiAocGNkZXYtPmRtYV9jaGFuc1swXSA8IDApIHsKKwllcnIgPSBweGFfcmVxdWVzdF9kbWEoIkNJX1YiLCBETUFfUFJJT19ISUdILAorCQkJICAgICAgcHhhX2NhbWVyYV9kbWFfaXJxX3YsIHBjZGV2KTsKKwlpZiAoZXJyIDwgMCkgewogCQlkZXZfZXJyKHBjZGV2LT5kZXYsICJDYW4ndCByZXF1ZXN0IERNQSBmb3IgVlxuIik7Ci0JCWVyciA9IC1FTk9NRU07CiAJCWdvdG8gZXhpdF9mcmVlX2RtYV91OwogCX0KKwlwY2Rldi0+ZG1hX2NoYW5zWzJdID0gZXJyOwogCWRldl9kYmcocGNkZXYtPmRldiwgImdvdCBETUEgY2hhbm5lbCAoVikgJWRcbiIsIHBjZGV2LT5kbWFfY2hhbnNbMl0pOwogCiAJRFJDTVIoNjgpID0gcGNkZXYtPmRtYV9jaGFuc1swXSB8IERSQ01SX01BUFZMRDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vczIyNTVkcnYuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vczIyNTVkcnYuYwppbmRleCA5MmI4M2ZlLi41MjcyOTI2IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3MyMjU1ZHJ2LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zMjI1NWRydi5jCkBAIC01OCw2ICs1OCw4IEBACiAKIAogCisvKiBkZWZhdWx0IEpQRUcgcXVhbGl0eSAqLworI2RlZmluZSBTMjI1NV9ERUZfSlBFR19RVUFMICAgICA1MAogLyogdmVuZG9yIHJlcXVlc3QgaW4gKi8KICNkZWZpbmUgUzIyNTVfVlJfSU4JCTAKIC8qIHZlbmRvciByZXF1ZXN0IG91dCAqLwpAQCAtNjcsMjAgKzY5LDIxIEBACiAvKiBVU0IgZW5kcG9pbnQgbnVtYmVyIGZvciBjb25maWd1cmluZyB0aGUgZGV2aWNlICovCiAjZGVmaW5lIFMyMjU1X0NPTkZJR19FUCAgICAgICAgIDIKIC8qIG1heGltdW0gdGltZSBmb3IgRFNQIHRvIHN0YXJ0IHJlc3BvbmRpbmcgYWZ0ZXIgbGFzdCBGVyB3b3JkIGxvYWRlZChtcykgKi8KLSNkZWZpbmUgUzIyNTVfRFNQX0JPT1RUSU1FICAgICAgNDAwCisjZGVmaW5lIFMyMjU1X0RTUF9CT09UVElNRSAgICAgIDgwMAogLyogbWF4aW11bSB0aW1lIHRvIHdhaXQgZm9yIGZpcm13YXJlIHRvIGxvYWQgKG1zKSAqLwogI2RlZmluZSBTMjI1NV9MT0FEX1RJTUVPVVQgICAgICAoNTAwMCArIFMyMjU1X0RTUF9CT09UVElNRSkKICNkZWZpbmUgUzIyNTVfREVGX0JVRlMgICAgICAgICAgMTYKKyNkZWZpbmUgUzIyNTVfU0VUTU9ERV9USU1FT1VUICAgNTAwCiAjZGVmaW5lIE1BWF9DSEFOTkVMUwkJNAotI2RlZmluZSBGUkFNRV9NQVJLRVIJCTB4MjI1NURBNEFMCi0jZGVmaW5lIE1BWF9QSVBFX1VTQkJMT0NLCSg0MCAqIDEwMjQpCi0jZGVmaW5lIERFRkFVTFRfUElQRV9VU0JCTE9DSwkoMTYgKiAxMDI0KQorI2RlZmluZSBTMjI1NV9NQVJLRVJfRlJBTUUJMHgyMjU1REE0QUwKKyNkZWZpbmUgUzIyNTVfTUFSS0VSX1JFU1BPTlNFCTB4MjI1NUFDQUNMCisjZGVmaW5lIFMyMjU1X1VTQl9YRkVSX1NJWkUJKDE2ICogMTAyNCkKICNkZWZpbmUgTUFYX0NIQU5ORUxTCQk0CiAjZGVmaW5lIE1BWF9QSVBFX0JVRkZFUlMJMQogI2RlZmluZSBTWVNfRlJBTUVTCQk0CiAvKiBtYXhpbXVtIHNpemUgaXMgUEFMIGZ1bGwgc2l6ZSBwbHVzIHJvb20gZm9yIHRoZSBtYXJrZXIgaGVhZGVyKHMpICovCi0jZGVmaW5lIFNZU19GUkFNRVNfTUFYU0laRQkoNzIwICogMjg4ICogMiAqIDIgKyA0MDk2KQotI2RlZmluZSBERUZfVVNCX0JMT0NLCQkoNDA5NikKKyNkZWZpbmUgU1lTX0ZSQU1FU19NQVhTSVpFCSg3MjAqMjg4KjIqMiArIDQwOTYpCisjZGVmaW5lIERFRl9VU0JfQkxPQ0sJCVMyMjU1X1VTQl9YRkVSX1NJWkUKICNkZWZpbmUgTElORV9TWl80Q0lGU19OVFNDCTY0MAogI2RlZmluZSBMSU5FX1NaXzJDSUZTX05UU0MJNjQwCiAjZGVmaW5lIExJTkVfU1pfMUNJRlNfTlRTQwkzMjAKQEAgLTEwOCw2ICsxMTEsOSBAQAogI2RlZmluZSBDT0xPUl9ZVVZQTAkxCS8qIFlVViBwbGFuYXIgKi8KICNkZWZpbmUgQ09MT1JfWVVWUEsJMgkvKiBZVVYgcGFja2VkICovCiAjZGVmaW5lIENPTE9SX1k4CTQJLyogbW9ub2Nocm9tZSAqLworI2RlZmluZSBDT0xPUl9KUEcgICAgICAgNSAgICAgICAvKiBKUEVHICovCisjZGVmaW5lIE1BU0tfQ09MT1IgICAgICAweGZmCisjZGVmaW5lIE1BU0tfSlBHX1FVQUxJVFkgMHhmZjAwCiAKIC8qIGZyYW1lIGRlY2ltYXRpb24uIE5vdCBpbXBsZW1lbnRlZCBieSBWNEwgeWV0KGV4cGVyaW1lbnRhbCBpbiBWNEwpICovCiAjZGVmaW5lIEZERUNfMQkJMQkvKiBjYXB0dXJlIGV2ZXJ5IGZyYW1lLiBkZWZhdWx0ICovCkBAIC0xNDgsMTYgKzE1NCwxNCBAQAogCXUzMiByZXN0YXJ0OwkvKiBpZiBEU1AgcmVxdWlyZXMgcmVzdGFydCAqLwogfTsKIAorCisjZGVmaW5lIFMyMjU1X1JFQURfSURMRQkJMAorI2RlZmluZSBTMjI1NV9SRUFEX0ZSQU1FCTEKKwogLyogZnJhbWUgc3RydWN0dXJlICovCi0jZGVmaW5lIEZSQU1FX1NUQVRFX1VOVVNFRAkwCi0jZGVmaW5lIEZSQU1FX1NUQVRFX0ZJTExJTkcJMQotI2RlZmluZSBGUkFNRV9TVEFURV9GVUxMCTIKLQotCiBzdHJ1Y3QgczIyNTVfZnJhbWVpIHsKIAl1bnNpZ25lZCBsb25nIHNpemU7Ci0KLQl1bnNpZ25lZCBsb25nIHVsU3RhdGU7CS8qIHVsU3RhdGUgPT0wIHVudXNlZCwgMSBiZWluZyBmaWxsZWQsIDIgZnVsbCAqLworCXVuc2lnbmVkIGxvbmcgdWxTdGF0ZTsJLyogdWxTdGF0ZTpTMjI1NV9SRUFEX0lETEUsIFMyMjU1X1JFQURfRlJBTUUqLwogCXZvaWQgKmxwdmJpdHM7CQkvKiBpbWFnZSBkYXRhICovCiAJdW5zaWduZWQgbG9uZyBjdXJfc2l6ZTsJLyogY3VycmVudCBkYXRhIGNvcGllZCB0byBpdCAqLwogfTsKQEAgLTE4OCw2ICsxOTIsMTAgQEAKICNkZWZpbmUgUzIyNTVfRldfRkFJTEVECQkzCiAjZGVmaW5lIFMyMjU1X0ZXX0RJU0NPTk5FQ1RJTkcgIDQKIAorI2RlZmluZSBTMjI1NV9GV19NQVJLRVIgICAgICAgICAweDIyNTUyZjJmCisvKiAyMjU1IHJlYWQgc3RhdGVzICovCisjZGVmaW5lIFMyMjU1X1JFQURfSURMRSAgICAgICAgIDAKKyNkZWZpbmUgUzIyNTVfUkVBRF9GUkFNRSAgICAgICAgMQogc3RydWN0IHMyMjU1X2Z3IHsKIAlpbnQJCSAgICAgIGZ3X2xvYWRlZDsKIAlpbnQJCSAgICAgIGZ3X3NpemU7CkBAIC0xOTUsNyArMjAzLDYgQEAKIAlhdG9taWNfdAkgICAgICBmd19zdGF0ZTsKIAl2b2lkCQkgICAgICAqcGZ3X2RhdGE7CiAJd2FpdF9xdWV1ZV9oZWFkX3QgICAgIHdhaXRfZnc7Ci0Jc3RydWN0IHRpbWVyX2xpc3QgICAgIGRzcF93YWl0OwogCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZnc7CiB9OwogCkBAIC0yMzcsMTUgKzI0NCwyNyBAQAogCXN0cnVjdCBzMjI1NV9waXBlaW5mbwlwaXBlc1tNQVhfUElQRV9CVUZGRVJTXTsKIAlzdHJ1Y3QgczIyNTVfYnVmZmVyaQkJYnVmZmVyW01BWF9DSEFOTkVMU107CiAJc3RydWN0IHMyMjU1X21vZGUJbW9kZVtNQVhfQ0hBTk5FTFNdOworCS8qIGpwZWcgY29tcHJlc3Npb24gKi8KKwlzdHJ1Y3QgdjRsMl9qcGVnY29tcHJlc3Npb24gamNbTUFYX0NIQU5ORUxTXTsKIAljb25zdCBzdHJ1Y3QgczIyNTVfZm10CSpjdXJfZm10W01BWF9DSEFOTkVMU107CiAJaW50CQkJY3VyX2ZyYW1lW01BWF9DSEFOTkVMU107CiAJaW50CQkJbGFzdF9mcmFtZVtNQVhfQ0hBTk5FTFNdOwogCXUzMgkJCWNjOwkvKiBjdXJyZW50IGNoYW5uZWwgKi8KIAlpbnQJCQliX2FjcXVpcmVbTUFYX0NIQU5ORUxTXTsKKwkvKiBhbGxvY2F0ZWQgaW1hZ2Ugc2l6ZSAqLwogCXVuc2lnbmVkIGxvbmcJCXJlcV9pbWFnZV9zaXplW01BWF9DSEFOTkVMU107CisJLyogcmVjZWl2ZWQgcGFja2V0IHNpemUgKi8KKwl1bnNpZ25lZCBsb25nCQlwa3Rfc2l6ZVtNQVhfQ0hBTk5FTFNdOwogCWludAkJCWJhZF9wYXlsb2FkW01BWF9DSEFOTkVMU107CiAJdW5zaWduZWQgbG9uZwkJZnJhbWVfY291bnRbTUFYX0NIQU5ORUxTXTsKIAlpbnQJCQlmcmFtZV9yZWFkeTsKKwkvKiBpZiBKUEVHIGltYWdlICovCisJaW50ICAgICAgICAgICAgICAgICAgICAganBnX3NpemVbTUFYX0NIQU5ORUxTXTsKKwkvKiBpZiBjaGFubmVsIGNvbmZpZ3VyZWQgdG8gZGVmYXVsdCBzdGF0ZSAqLworCWludCAgICAgICAgICAgICAgICAgICAgIGNobl9jb25maWd1cmVkW01BWF9DSEFOTkVMU107CisJd2FpdF9xdWV1ZV9oZWFkX3QgICAgICAgd2FpdF9zZXRtb2RlW01BWF9DSEFOTkVMU107CisJaW50ICAgICAgICAgICAgICAgICAgICAgc2V0bW9kZV9yZWFkeVtNQVhfQ0hBTk5FTFNdOworCWludCAgICAgICAgICAgICAgICAgICAgIGNobl9yZWFkeTsKIAlzdHJ1Y3Qga3JlZgkJa3JlZjsKIAlzcGlubG9ja190ICAgICAgICAgICAgICBzbG9jazsKIH07CkBAIC0zMDYsMTIgKzMyNSwxNiBAQAogc3RhdGljIGludCBzMjI1NV9zdGFydF9hY3F1aXJlKHN0cnVjdCBzMjI1NV9kZXYgKmRldiwgdW5zaWduZWQgbG9uZyBjaG4pOwogc3RhdGljIGludCBzMjI1NV9zdG9wX2FjcXVpcmUoc3RydWN0IHMyMjU1X2RldiAqZGV2LCB1bnNpZ25lZCBsb25nIGNobik7CiBzdGF0aWMgdm9pZCBzMjI1NV9maWxsYnVmZihzdHJ1Y3QgczIyNTVfZGV2ICpkZXYsIHN0cnVjdCBzMjI1NV9idWZmZXIgKmJ1ZiwKLQkJCSAgIGludCBjaG4pOworCQkJICAgaW50IGNobiwgaW50IGpwZ3NpemUpOwogc3RhdGljIGludCBzMjI1NV9zZXRfbW9kZShzdHJ1Y3QgczIyNTVfZGV2ICpkZXYsIHVuc2lnbmVkIGxvbmcgY2huLAogCQkJICBzdHJ1Y3QgczIyNTVfbW9kZSAqbW9kZSk7CiBzdGF0aWMgaW50IHMyMjU1X2JvYXJkX3NodXRkb3duKHN0cnVjdCBzMjI1NV9kZXYgKmRldik7CiBzdGF0aWMgdm9pZCBzMjI1NV9leGl0X3Y0bChzdHJ1Y3QgczIyNTVfZGV2ICpkZXYpOwotc3RhdGljIHZvaWQgczIyNTVfZndsb2FkX3N0YXJ0KHN0cnVjdCBzMjI1NV9kZXYgKmRldik7CitzdGF0aWMgdm9pZCBzMjI1NV9md2xvYWRfc3RhcnQoc3RydWN0IHMyMjU1X2RldiAqZGV2LCBpbnQgcmVzZXQpOworc3RhdGljIHZvaWQgczIyNTVfZGVzdHJveShzdHJ1Y3Qga3JlZiAqa3JlZik7CitzdGF0aWMgbG9uZyBzMjI1NV92ZW5kb3JfcmVxKHN0cnVjdCBzMjI1NV9kZXYgKmRldiwgdW5zaWduZWQgY2hhciByZXEsCisJCQkgICAgIHUxNiBpbmRleCwgdTE2IHZhbHVlLCB2b2lkICpidWYsCisJCQkgICAgIHMzMiBidWZfbGVuLCBpbnQgYk91dCk7CiAKICNkZWZpbmUgZHByaW50ayhsZXZlbCwgZm10LCBhcmcuLi4pCQkJCQlcCiAJZG8gewkJCQkJCQkJXApAQCAtNDA3LDYgKzQzMCwxMCBAQAogCQkuZm91cmNjID0gVjRMMl9QSVhfRk1UX1VZVlksCiAJCS5kZXB0aCA9IDE2CiAJfSwgeworCQkubmFtZSA9ICJKUEciLAorCQkuZm91cmNjID0gVjRMMl9QSVhfRk1UX0pQRUcsCisJCS5kZXB0aCA9IDI0CisJfSwgewogCQkubmFtZSA9ICI4YnBwIEdSRVkiLAogCQkuZm91cmNjID0gVjRMMl9QSVhfRk1UX0dSRVksCiAJCS5kZXB0aCA9IDgKQEAgLTQ2NCw2ICs0OTEsMTMgQEAKIAlyZXR1cm47CiB9CiAKK3N0YXRpYyB2b2lkIHMyMjU1X3Jlc2V0X2RzcHBvd2VyKHN0cnVjdCBzMjI1NV9kZXYgKmRldikKK3sKKwlzMjI1NV92ZW5kb3JfcmVxKGRldiwgMHg0MCwgMHgwYjBiLCAweDBiMGIsIE5VTEwsIDAsIDEpOworCW1zbGVlcCgxMCk7CisJczIyNTVfdmVuZG9yX3JlcShkZXYsIDB4NTAsIDB4MDAwMCwgMHgwMDAwLCBOVUxMLCAwLCAxKTsKKwlyZXR1cm47Cit9CiAKIC8qIGtpY2tzdGFydHMgdGhlIGZpcm13YXJlIGxvYWRpbmcuIGZyb20gcHJvYmUKICAqLwpAQCAtNDgwLDE4ICs1MTQsNiBAQAogCX0KIH0KIAotLyogY2FsbGVkIHdoZW4gRFNQIGlzIHVwIGFuZCBydW5uaW5nLiAgRFNQIGlzIGd1YXJhbnRlZWQgdG8KLSAgIGJlIHJ1bm5pbmcgYWZ0ZXIgUzIyNTVfRFNQX0JPT1RUSU1FICovCi1zdGF0aWMgdm9pZCBzMjI1NV9kc3BfcnVubmluZyh1bnNpZ25lZCBsb25nIHVzZXJfZGF0YSkKLXsKLQlzdHJ1Y3QgczIyNTVfZncgKmRhdGEgPSAoc3RydWN0IHMyMjU1X2Z3ICopdXNlcl9kYXRhOwotCWRwcmludGsoMSwgImRzcCBydW5uaW5nXG4iKTsKLQlhdG9taWNfc2V0KCZkYXRhLT5md19zdGF0ZSwgUzIyNTVfRldfU1VDQ0VTUyk7Ci0Jd2FrZV91cCgmZGF0YS0+d2FpdF9mdyk7Ci0JcHJpbnRrKEtFUk5fSU5GTyAiczIyNTU6IGZpcm13YXJlIGxvYWRlZCBzdWNjZXNzZnVsbHlcbiIpOwotCXJldHVybjsKLX0KLQogCiAvKiB0aGlzIGxvYWRzIHRoZSBmaXJtd2FyZSBhc3luY2hyb25vdXNseS4KICAgIE9yaWdpbmFsbHkgdGhpcyB3YXMgZG9uZSBzeW5jaHJvb3VzbHkgaW4gcHJvYmUuCkBAIC01NDksMTkgKzU3MSwxNCBAQAogCQl9CiAJCWRhdGEtPmZ3X2xvYWRlZCArPSBsZW47CiAJfSBlbHNlIHsKLQkJaW5pdF90aW1lcigmZGF0YS0+ZHNwX3dhaXQpOwotCQlkYXRhLT5kc3Bfd2FpdC5mdW5jdGlvbiA9IHMyMjU1X2RzcF9ydW5uaW5nOwotCQlkYXRhLT5kc3Bfd2FpdC5kYXRhID0gKHVuc2lnbmVkIGxvbmcpZGF0YTsKIAkJYXRvbWljX3NldCgmZGF0YS0+Zndfc3RhdGUsIFMyMjU1X0ZXX0xPQURFRF9EU1BXQUlUKTsKLQkJbW9kX3RpbWVyKCZkYXRhLT5kc3Bfd2FpdCwgbXNlY3NfdG9famlmZmllcyhTMjI1NV9EU1BfQk9PVFRJTUUpCi0JCQkgICsgamlmZmllcyk7CiAJfQogCWRwcmludGsoMTAwLCAiMjI1NSBjb21wbGV0ZSBkb25lXG4iKTsKIAlyZXR1cm47CiAKIH0KIAotc3RhdGljIGludCBzMjI1NV9nb3RfZnJhbWUoc3RydWN0IHMyMjU1X2RldiAqZGV2LCBpbnQgY2huKQorc3RhdGljIGludCBzMjI1NV9nb3RfZnJhbWUoc3RydWN0IHMyMjU1X2RldiAqZGV2LCBpbnQgY2huLCBpbnQganBnc2l6ZSkKIHsKIAlzdHJ1Y3QgczIyNTVfZG1hcXVldWUgKmRtYV9xID0gJmRldi0+dmlkcVtjaG5dOwogCXN0cnVjdCBzMjI1NV9idWZmZXIgKmJ1ZjsKQEAgLTU4Niw4ICs2MDMsNyBAQAogCWxpc3RfZGVsKCZidWYtPnZiLnF1ZXVlKTsKIAlkb19nZXR0aW1lb2ZkYXkoJmJ1Zi0+dmIudHMpOwogCWRwcmludGsoMTAwLCAiWyVwLyVkXSB3YWtldXBcbiIsIGJ1ZiwgYnVmLT52Yi5pKTsKLQotCXMyMjU1X2ZpbGxidWZmKGRldiwgYnVmLCBkbWFfcS0+Y2hhbm5lbCk7CisJczIyNTVfZmlsbGJ1ZmYoZGV2LCBidWYsIGRtYV9xLT5jaGFubmVsLCBqcGdzaXplKTsKIAl3YWtlX3VwKCZidWYtPnZiLmRvbmUpOwogCWRwcmludGsoMiwgIndha2V1cCBbYnVmL2ldIFslcC8lZF1cbiIsIGJ1ZiwgYnVmLT52Yi5pKTsKIHVubG9jazoKQEAgLTYyMSw3ICs2MzcsNyBAQAogICoKICAqLwogc3RhdGljIHZvaWQgczIyNTVfZmlsbGJ1ZmYoc3RydWN0IHMyMjU1X2RldiAqZGV2LCBzdHJ1Y3QgczIyNTVfYnVmZmVyICpidWYsCi0JCQkgICBpbnQgY2huKQorCQkJICAgaW50IGNobiwgaW50IGpwZ3NpemUpCiB7CiAJaW50IHBvcyA9IDA7CiAJc3RydWN0IHRpbWV2YWwgdHM7CkBAIC02NDksNiArNjY1LDEwIEBACiAJCWNhc2UgVjRMMl9QSVhfRk1UX0dSRVk6CiAJCQltZW1jcHkodmJ1ZiwgdG1wYnVmLCBidWYtPnZiLndpZHRoICogYnVmLT52Yi5oZWlnaHQpOwogCQkJYnJlYWs7CisJCWNhc2UgVjRMMl9QSVhfRk1UX0pQRUc6CisJCQlidWYtPnZiLnNpemUgPSBqcGdzaXplOworCQkJbWVtY3B5KHZidWYsIHRtcGJ1ZiwgYnVmLT52Yi5zaXplKTsKKwkJCWJyZWFrOwogCQljYXNlIFY0TDJfUElYX0ZNVF9ZVVY0MjJQOgogCQkJbWVtY3B5KHZidWYsIHRtcGJ1ZiwKIAkJCSAgICAgICBidWYtPnZiLndpZHRoICogYnVmLT52Yi5oZWlnaHQgKiAyKTsKQEAgLTY1Nyw5ICs2NzcsNiBAQAogCQkJcHJpbnRrKEtFUk5fREVCVUcgInMyMjU1OiB1bmtub3duIGZvcm1hdD9cbiIpOwogCQl9CiAJCWRldi0+bGFzdF9mcmFtZVtjaG5dID0gLTE7Ci0JCS8qIGRvbmUgd2l0aCB0aGUgZnJhbWUsIGZyZWUgaXQgKi8KLQkJZnJtLT51bFN0YXRlID0gMDsKLQkJZHByaW50ayg0LCAiZnJlZWluZyBidWZmZXJcbiIpOwogCX0gZWxzZSB7CiAJCXByaW50ayhLRVJOX0VSUiAiczIyNTU6ID09PT09PT1ubyBmcmFtZVxuIik7CiAJCXJldHVybjsKQEAgLTEwMjEsNiArMTAzOCwxMCBAQAogCWNhc2UgVjRMMl9QSVhfRk1UX0dSRVk6CiAJCWZoLT5tb2RlLmNvbG9yID0gQ09MT1JfWTg7CiAJCWJyZWFrOworCWNhc2UgVjRMMl9QSVhfRk1UX0pQRUc6CisJCWZoLT5tb2RlLmNvbG9yID0gQ09MT1JfSlBHIHwKKwkJCShmaC0+ZGV2LT5qY1tmaC0+Y2hhbm5lbF0ucXVhbGl0eSA8PCA4KTsKKwkJYnJlYWs7CiAJY2FzZSBWNEwyX1BJWF9GTVRfWVVWNDIyUDoKIAkJZmgtPm1vZGUuY29sb3IgPSBDT0xPUl9ZVVZQTDsKIAkJYnJlYWs7CkBAIC0xMTM5LDcgKzExNjAsNyBAQAogCQl9CiAJfQogCW91dEltYWdlU2l6ZSA9IGxpbmVzUGVyRnJhbWUgKiBwaXhlbHNQZXJMaW5lOwotCWlmIChtb2RlLT5jb2xvciAhPSBDT0xPUl9ZOCkgeworCWlmICgobW9kZS0+Y29sb3IgJiBNQVNLX0NPTE9SKSAhPSBDT0xPUl9ZOCkgewogCQkvKiAyIGJ5dGVzL3BpeGVsIGlmIG5vdCBtb25vY2hyb21lICovCiAJCW91dEltYWdlU2l6ZSAqPSAyOwogCX0KQEAgLTExODUsMTIgKzEyMDYsMTcgQEAKIAl1MzIgKmJ1ZmZlcjsKIAl1bnNpZ25lZCBsb25nIGNobl9yZXY7CiAKKwltdXRleF9sb2NrKCZkZXYtPmxvY2spOwogCWNobl9yZXYgPSBHX2Nobm1hcFtjaG5dOwogCWRwcmludGsoMywgIm1vZGUgc2NhbGUgWyVsZF0gJXAgJWRcbiIsIGNobiwgbW9kZSwgbW9kZS0+c2NhbGUpOwogCWRwcmludGsoMywgIm1vZGUgc2NhbGUgWyVsZF0gJXAgJWRcbiIsIGNobiwgJmRldi0+bW9kZVtjaG5dLAogCQlkZXYtPm1vZGVbY2huXS5zY2FsZSk7CiAJZHByaW50aygyLCAibW9kZSBjb250cmFzdCAleFxuIiwgbW9kZS0+Y29udHJhc3QpOwogCisJLyogaWYgSlBFRywgc2V0IHRoZSBxdWFsaXR5ICovCisJaWYgKChtb2RlLT5jb2xvciAmIE1BU0tfQ09MT1IpID09IENPTE9SX0pQRykKKwkJbW9kZS0+Y29sb3IgPSAoZGV2LT5qY1tjaG5dLnF1YWxpdHkgPDwgOCkgfCBDT0xPUl9KUEc7CisKIAkvKiBzYXZlIHRoZSBtb2RlICovCiAJZGV2LT5tb2RlW2Nobl0gPSAqbW9kZTsKIAlkZXYtPnJlcV9pbWFnZV9zaXplW2Nobl0gPSBnZXRfdHJhbnNmZXJfc2l6ZShtb2RlKTsKQEAgLTExOTksNiArMTIyNSw3IEBACiAJYnVmZmVyID0ga3phbGxvYyg1MTIsIEdGUF9LRVJORUwpOwogCWlmIChidWZmZXIgPT0gTlVMTCkgewogCQlkZXZfZXJyKCZkZXYtPnVkZXYtPmRldiwgIm91dCBvZiBtZW1cbiIpOworCQltdXRleF91bmxvY2soJmRldi0+bG9jayk7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KIApAQCAtMTIxNCwxMiArMTI0MSwyMCBAQAogCWRwcmludGsoMSwgInNldCBtb2RlIGRvbmUgY2huICVsdSwgJWRcbiIsIGNobiwgcmVzKTsKIAogCS8qIHdhaXQgYXQgbGVhc3QgMyBmcmFtZXMgYmVmb3JlIGNvbnRpbnVpbmcgKi8KLQlpZiAobW9kZS0+cmVzdGFydCkKLQkJbXNsZWVwKDEyNSk7CisJaWYgKG1vZGUtPnJlc3RhcnQpIHsKKwkJZGV2LT5zZXRtb2RlX3JlYWR5W2Nobl0gPSAwOworCQl3YWl0X2V2ZW50X3RpbWVvdXQoZGV2LT53YWl0X3NldG1vZGVbY2huXSwKKwkJCQkgICAoZGV2LT5zZXRtb2RlX3JlYWR5W2Nobl0gIT0gMCksCisJCQkJICAgbXNlY3NfdG9famlmZmllcyhTMjI1NV9TRVRNT0RFX1RJTUVPVVQpKTsKKwkJaWYgKGRldi0+c2V0bW9kZV9yZWFkeVtjaG5dICE9IDEpIHsKKwkJCXByaW50ayhLRVJOX0RFQlVHICJzMjI1NTogbm8gc2V0IG1vZGUgcmVzcG9uc2VcbiIpOworCQkJcmVzID0gLUVGQVVMVDsKKwkJfQorCX0KIAogCS8qIGNsZWFyIHRoZSByZXN0YXJ0IGZsYWcgKi8KIAlkZXYtPm1vZGVbY2huXS5yZXN0YXJ0ID0gMDsKLQorCW11dGV4X3VubG9jaygmZGV2LT5sb2NrKTsKIAlyZXR1cm4gcmVzOwogfQogCkBAIC0xMjcwLDcgKzEzMDUsNyBAQAogCWRldi0+Y3VyX2ZyYW1lW2Nobl0gPSAwOwogCWRldi0+ZnJhbWVfY291bnRbY2huXSA9IDA7CiAJZm9yIChqID0gMDsgaiA8IFNZU19GUkFNRVM7IGorKykgewotCQlkZXYtPmJ1ZmZlcltjaG5dLmZyYW1lW2pdLnVsU3RhdGUgPSAwOworCQlkZXYtPmJ1ZmZlcltjaG5dLmZyYW1lW2pdLnVsU3RhdGUgPSBTMjI1NV9SRUFEX0lETEU7CiAJCWRldi0+YnVmZmVyW2Nobl0uZnJhbWVbal0uY3VyX3NpemUgPSAwOwogCX0KIAlyZXMgPSB2aWRlb2J1Zl9zdHJlYW1vbigmZmgtPnZiX3ZpZHEpOwpAQCAtMTQ0Niw2ICsxNDgxLDI3IEBACiAJcmV0dXJuIC1FSU5WQUw7CiB9CiAKK3N0YXRpYyBpbnQgdmlkaW9jX2dfanBlZ2NvbXAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJCQkgc3RydWN0IHY0bDJfanBlZ2NvbXByZXNzaW9uICpqYykKK3sKKwlzdHJ1Y3QgczIyNTVfZmggKmZoID0gcHJpdjsKKwlzdHJ1Y3QgczIyNTVfZGV2ICpkZXYgPSBmaC0+ZGV2OworCSpqYyA9IGRldi0+amNbZmgtPmNoYW5uZWxdOworCWRwcmludGsoMiwgImdldHRpbmcganBlZ2NvbXByZXNzaW9uLCBxdWFsaXR5ICVkXG4iLCBqYy0+cXVhbGl0eSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX3NfanBlZ2NvbXAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJCQkgc3RydWN0IHY0bDJfanBlZ2NvbXByZXNzaW9uICpqYykKK3sKKwlzdHJ1Y3QgczIyNTVfZmggKmZoID0gcHJpdjsKKwlzdHJ1Y3QgczIyNTVfZGV2ICpkZXYgPSBmaC0+ZGV2OworCWlmIChqYy0+cXVhbGl0eSA8IDAgfHwgamMtPnF1YWxpdHkgPiAxMDApCisJCXJldHVybiAtRUlOVkFMOworCWRldi0+amNbZmgtPmNoYW5uZWxdLnF1YWxpdHkgPSBqYy0+cXVhbGl0eTsKKwlkcHJpbnRrKDIsICJzZXR0aW5nIGpwZWcgcXVhbGl0eSAlZFxuIiwgamMtPnF1YWxpdHkpOworCXJldHVybiAwOworfQogc3RhdGljIGludCBzMjI1NV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQogewogCWludCBtaW5vciA9IGltaW5vcihpbm9kZSk7CkBAIC0xNDU1LDggKzE1MTEsMTAgQEAKIAllbnVtIHY0bDJfYnVmX3R5cGUgdHlwZSA9IDA7CiAJaW50IGkgPSAwOwogCWludCBjdXJfY2hhbm5lbCA9IC0xOworCWludCBzdGF0ZTsKIAlkcHJpbnRrKDEsICJzMjI1NTogb3BlbiBjYWxsZWQgKG1pbm9yPSVkKVxuIiwgbWlub3IpOwogCisJbG9ja19rZXJuZWwoKTsKIAlsaXN0X2Zvcl9lYWNoKGxpc3QsICZzMjI1NV9kZXZsaXN0KSB7CiAJCWggPSBsaXN0X2VudHJ5KGxpc3QsIHN0cnVjdCBzMjI1NV9kZXYsIHMyMjU1X2Rldmxpc3QpOwogCQlmb3IgKGkgPSAwOyBpIDwgTUFYX0NIQU5ORUxTOyBpKyspIHsKQEAgLTE0NjksNDUgKzE1MjcsNzggQEAKIAl9CiAKIAlpZiAoKE5VTEwgPT0gZGV2KSB8fCAoY3VyX2NoYW5uZWwgPT0gLTEpKSB7Ci0JCWRwcmludGsoMSwgInMyMjU1OiBvcGVudjRsIG5vIGRldlxuIik7CisJCXVubG9ja19rZXJuZWwoKTsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiczIyNTU6IG9wZW52NGwgbm8gZGV2XG4iKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCisJaWYgKGF0b21pY19yZWFkKCZkZXYtPmZ3X2RhdGEtPmZ3X3N0YXRlKSA9PSBTMjI1NV9GV19ESVNDT05ORUNUSU5HKSB7CisJCXVubG9ja19rZXJuZWwoKTsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiZGlzY29ubmVjdGluZ1xuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKwlrcmVmX2dldCgmZGV2LT5rcmVmKTsKIAltdXRleF9sb2NrKCZkZXYtPm9wZW5fbG9jayk7CiAKIAlkZXYtPnVzZXJzW2N1cl9jaGFubmVsXSsrOwogCWRwcmludGsoNCwgInMyMjU1OiBvcGVuX2hhbmRsZXMgJWRcbiIsIGRldi0+dXNlcnNbY3VyX2NoYW5uZWxdKTsKIAotCWlmIChhdG9taWNfcmVhZCgmZGV2LT5md19kYXRhLT5md19zdGF0ZSkgPT0gUzIyNTVfRldfRkFJTEVEKSB7CisJc3dpdGNoIChhdG9taWNfcmVhZCgmZGV2LT5md19kYXRhLT5md19zdGF0ZSkpIHsKKwljYXNlIFMyMjU1X0ZXX0ZBSUxFRDoKIAkJZXJyKCIyMjU1IGZpcm13YXJlIGxvYWQgZmFpbGVkLiByZXRyeWluZy5cbiIpOwotCQlzMjI1NV9md2xvYWRfc3RhcnQoZGV2KTsKKwkJczIyNTVfZndsb2FkX3N0YXJ0KGRldiwgMSk7CiAJCXdhaXRfZXZlbnRfdGltZW91dChkZXYtPmZ3X2RhdGEtPndhaXRfZncsCi0JCQkJICAgKGF0b21pY19yZWFkKCZkZXYtPmZ3X2RhdGEtPmZ3X3N0YXRlKQotCQkJCSAgICAhPSBTMjI1NV9GV19OT1RMT0FERUQpLAorCQkJCSAgICgoYXRvbWljX3JlYWQoJmRldi0+ZndfZGF0YS0+Zndfc3RhdGUpCisJCQkJICAgICA9PSBTMjI1NV9GV19TVUNDRVNTKSB8fAorCQkJCSAgICAoYXRvbWljX3JlYWQoJmRldi0+ZndfZGF0YS0+Zndfc3RhdGUpCisJCQkJICAgICA9PSBTMjI1NV9GV19ESVNDT05ORUNUSU5HKSksCiAJCQkJICAgbXNlY3NfdG9famlmZmllcyhTMjI1NV9MT0FEX1RJTUVPVVQpKTsKLQkJaWYgKGF0b21pY19yZWFkKCZkZXYtPmZ3X2RhdGEtPmZ3X3N0YXRlKQotCQkgICAgIT0gUzIyNTVfRldfU1VDQ0VTUykgewotCQkJcHJpbnRrKEtFUk5fSU5GTyAiMjI1NSBGVyBsb2FkIGZhaWxlZC5cbiIpOwotCQkJZGV2LT51c2Vyc1tjdXJfY2hhbm5lbF0tLTsKLQkJCW11dGV4X3VubG9jaygmZGV2LT5vcGVuX2xvY2spOwotCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCX0KLQl9IGVsc2UgaWYgKGF0b21pY19yZWFkKCZkZXYtPmZ3X2RhdGEtPmZ3X3N0YXRlKSA9PSBTMjI1NV9GV19OT1RMT0FERUQpIHsKKwkJYnJlYWs7CisJY2FzZSBTMjI1NV9GV19OT1RMT0FERUQ6CisJY2FzZSBTMjI1NV9GV19MT0FERURfRFNQV0FJVDoKIAkJLyogZ2l2ZSBTMjI1NV9MT0FEX1RJTUVPVVQgdGltZSBmb3IgZmlybXdhcmUgdG8gbG9hZCBpbiBjYXNlCiAJCSAgIGRyaXZlciBsb2FkZWQgYW5kIHRoZW4gZGV2aWNlIGltbWVkaWF0ZWx5IG9wZW5lZCAqLwogCQlwcmludGsoS0VSTl9JTkZPICIlcyB3YWl0aW5nIGZvciBmaXJtd2FyZSBsb2FkXG4iLCBfX2Z1bmNfXyk7CiAJCXdhaXRfZXZlbnRfdGltZW91dChkZXYtPmZ3X2RhdGEtPndhaXRfZncsCi0JCQkJICAgKGF0b21pY19yZWFkKCZkZXYtPmZ3X2RhdGEtPmZ3X3N0YXRlKQotCQkJCSAgICE9IFMyMjU1X0ZXX05PVExPQURFRCksCi0JCQkJICAgbXNlY3NfdG9famlmZmllcyhTMjI1NV9MT0FEX1RJTUVPVVQpKTsKLQkJaWYgKGF0b21pY19yZWFkKCZkZXYtPmZ3X2RhdGEtPmZ3X3N0YXRlKQotCQkgICAgIT0gUzIyNTVfRldfU1VDQ0VTUykgewotCQkJcHJpbnRrKEtFUk5fSU5GTyAiMjI1NSBmaXJtd2FyZSBub3QgbG9hZGVkIgotCQkJICAgICAgICJ0cnkgYWdhaW5cbiIpOwotCQkJZGV2LT51c2Vyc1tjdXJfY2hhbm5lbF0tLTsKLQkJCW11dGV4X3VubG9jaygmZGV2LT5vcGVuX2xvY2spOwotCQkJcmV0dXJuIC1FQlVTWTsKKwkJCQkgICAoKGF0b21pY19yZWFkKCZkZXYtPmZ3X2RhdGEtPmZ3X3N0YXRlKQorCQkJCSAgICAgPT0gUzIyNTVfRldfU1VDQ0VTUykgfHwKKwkJCQkgICAgKGF0b21pY19yZWFkKCZkZXYtPmZ3X2RhdGEtPmZ3X3N0YXRlKQorCQkJCSAgICAgPT0gUzIyNTVfRldfRElTQ09OTkVDVElORykpLAorCQkJbXNlY3NfdG9famlmZmllcyhTMjI1NV9MT0FEX1RJTUVPVVQpKTsKKwkJYnJlYWs7CisJY2FzZSBTMjI1NV9GV19TVUNDRVNTOgorCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKwlzdGF0ZSA9IGF0b21pY19yZWFkKCZkZXYtPmZ3X2RhdGEtPmZ3X3N0YXRlKTsKKwlpZiAoc3RhdGUgIT0gUzIyNTVfRldfU1VDQ0VTUykgeworCQlpbnQgcmM7CisJCXN3aXRjaCAoc3RhdGUpIHsKKwkJY2FzZSBTMjI1NV9GV19GQUlMRUQ6CisJCQlwcmludGsoS0VSTl9JTkZPICIyMjU1IEZXIGxvYWQgZmFpbGVkLiAlZFxuIiwgc3RhdGUpOworCQkJcmMgPSAtRU5PREVWOworCQkJYnJlYWs7CisJCWNhc2UgUzIyNTVfRldfRElTQ09OTkVDVElORzoKKwkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBkaXNjb25uZWN0aW5nXG4iLCBfX2Z1bmNfXyk7CisJCQlyYyA9IC1FTk9ERVY7CisJCQlicmVhazsKKwkJY2FzZSBTMjI1NV9GV19MT0FERURfRFNQV0FJVDoKKwkJY2FzZSBTMjI1NV9GV19OT1RMT0FERUQ6CisJCQlwcmludGsoS0VSTl9JTkZPICIlczogZmlybXdhcmUgbm90IGxvYWRlZCB5ZXQiCisJCQkgICAgICAgInBsZWFzZSB0cnkgYWdhaW4gbGF0ZXJcbiIsCisJCQkgICAgICAgX19mdW5jX18pOworCQkJcmMgPSAtRUFHQUlOOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlwcmludGsoS0VSTl9JTkZPICIlczogdW5rbm93biBzdGF0ZVxuIiwgX19mdW5jX18pOworCQkJcmMgPSAtRUZBVUxUOworCQkJYnJlYWs7CiAJCX0KKwkJZGV2LT51c2Vyc1tjdXJfY2hhbm5lbF0tLTsKKwkJbXV0ZXhfdW5sb2NrKCZkZXYtPm9wZW5fbG9jayk7CisJCWtyZWZfcHV0KCZkZXYtPmtyZWYsIHMyMjU1X2Rlc3Ryb3kpOworCQl1bmxvY2tfa2VybmVsKCk7CisJCXJldHVybiByYzsKIAl9CiAKIAkvKiBhbGxvY2F0ZSArIGluaXRpYWxpemUgcGVyIGZpbGVoYW5kbGUgZGF0YSAqLwpAQCAtMTUxNSw2ICsxNjA2LDggQEAKIAlpZiAoTlVMTCA9PSBmaCkgewogCQlkZXYtPnVzZXJzW2N1cl9jaGFubmVsXS0tOwogCQltdXRleF91bmxvY2soJmRldi0+b3Blbl9sb2NrKTsKKwkJa3JlZl9wdXQoJmRldi0+a3JlZiwgczIyNTVfZGVzdHJveSk7CisJCXVubG9ja19rZXJuZWwoKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCkBAIC0xNTI4LDYgKzE2MjEsMTMgQEAKIAlmaC0+aGVpZ2h0ID0gTlVNX0xJTkVTXzRDSUZTX05UU0MgKiAyOwogCWZoLT5jaGFubmVsID0gY3VyX2NoYW5uZWw7CiAKKwkvKiBjb25maWd1cmUgY2hhbm5lbCB0byBkZWZhdWx0IHN0YXRlICovCisJaWYgKCFkZXYtPmNobl9jb25maWd1cmVkW2N1cl9jaGFubmVsXSkgeworCQlzMjI1NV9zZXRfbW9kZShkZXYsIGN1cl9jaGFubmVsLCAmZmgtPm1vZGUpOworCQlkZXYtPmNobl9jb25maWd1cmVkW2N1cl9jaGFubmVsXSA9IDE7CisJfQorCisKIAkvKiBQdXQgYWxsIGNvbnRyb2xzIGF0IGEgc2FuZSBzdGF0ZSAqLwogCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHMyMjU1X3FjdHJsKTsgaSsrKQogCQlxY3RsX3JlZ3NbaV0gPSBzMjI1NV9xY3RybFtpXS5kZWZhdWx0X3ZhbHVlOwpAQCAtMTU0Niw4ICsxNjQ2LDggQEAKIAkJCQkgICAgVjRMMl9GSUVMRF9JTlRFUkxBQ0VELAogCQkJCSAgICBzaXplb2Yoc3RydWN0IHMyMjU1X2J1ZmZlciksIGZoKTsKIAotCWtyZWZfZ2V0KCZkZXYtPmtyZWYpOwogCW11dGV4X3VubG9jaygmZGV2LT5vcGVuX2xvY2spOworCXVubG9ja19rZXJuZWwoKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTU2OSwzMCArMTY2OSwyNCBAQAogc3RhdGljIHZvaWQgczIyNTVfZGVzdHJveShzdHJ1Y3Qga3JlZiAqa3JlZikKIHsKIAlzdHJ1Y3QgczIyNTVfZGV2ICpkZXYgPSB0b19zMjI1NV9kZXYoa3JlZik7CisJc3RydWN0IGxpc3RfaGVhZCAqbGlzdDsKKwlpbnQgaTsKIAlpZiAoIWRldikgewogCQlwcmludGsoS0VSTl9FUlIgInMyMjU1ZHJ2OiBrcmVmIHByb2JsZW1cbiIpOwogCQlyZXR1cm47CiAJfQotCi0JLyoKLQkgKiBXYWtlIHVwIGFueSBmaXJtd2FyZSBsb2FkIHdhaXRpbmcgKG9ubHkgZG9uZSBpbiAub3BlbiwKLQkgKiB3aGljaCBob2xkcyB0aGUgb3Blbl9sb2NrIG11dGV4KQotCSAqLwogCWF0b21pY19zZXQoJmRldi0+ZndfZGF0YS0+Zndfc3RhdGUsIFMyMjU1X0ZXX0RJU0NPTk5FQ1RJTkcpOwogCXdha2VfdXAoJmRldi0+ZndfZGF0YS0+d2FpdF9mdyk7Ci0KLQkvKiBwcmV2ZW50IHMyMjU1X2Rpc2Nvbm5lY3QgZnJvbSByYWNpbmcgczIyNTVfb3BlbiAqLworCWZvciAoaSA9IDA7IGkgPCBNQVhfQ0hBTk5FTFM7IGkrKykgeworCQlkZXYtPnNldG1vZGVfcmVhZHlbaV0gPSAxOworCQl3YWtlX3VwKCZkZXYtPndhaXRfc2V0bW9kZVtpXSk7CisJfQogCW11dGV4X2xvY2soJmRldi0+b3Blbl9sb2NrKTsKKwkvKiByZXNldCB0aGUgRFNQIHNvIGZpcm13YXJlIGNhbiBiZSByZWxvYWQgbmV4dCB0aW1lICovCisJczIyNTVfcmVzZXRfZHNwcG93ZXIoZGV2KTsKIAlzMjI1NV9leGl0X3Y0bChkZXYpOwotCS8qCi0JICogZGV2aWNlIHVucmVnaXN0ZXJlZCBzbyBubyBsb25nZXIgcG9zc2libGUgdG8gb3Blbi4gb3Blbl9tdXRleAotCSAqICBjYW4gYmUgdW5sb2NrZWQgYW5kIHRpbWVycyBkZWxldGVkIGFmdGVyd2FyZHMuCi0JICovCi0JbXV0ZXhfdW5sb2NrKCZkZXYtPm9wZW5fbG9jayk7Ci0KIAkvKiBib2FyZCBzaHV0ZG93biBzdG9wcyB0aGUgcmVhZCBwaXBlIGlmIGl0IGlzIHJ1bm5pbmcgKi8KIAlzMjI1NV9ib2FyZF9zaHV0ZG93bihkZXYpOwotCiAJLyogbWFrZSBzdXJlIGZpcm13YXJlIHN0aWxsIG5vdCB0cnlpbmcgdG8gbG9hZCAqLwogCWRlbF90aW1lcigmZGV2LT50aW1lcik7ICAvKiBvbmx5IHN0YXJ0ZWQgaW4gLnByb2JlIGFuZCAub3BlbiAqLwogCkBAIC0xNjAyLDIzICsxNjk2LDE5IEBACiAJCXVzYl9mcmVlX3VyYihkZXYtPmZ3X2RhdGEtPmZ3X3VyYik7CiAJCWRldi0+ZndfZGF0YS0+ZndfdXJiID0gTlVMTDsKIAl9Ci0KLQkvKgotCSAqIGRlbGV0ZSB0aGUgZHNwX3dhaXQgdGltZXIsIHdoaWNoIHNldHMgdGhlIGZpcm13YXJlCi0JICogc3RhdGUgb24gY29tcGxldGlvbi4gIFRoaXMgaXMgZG9uZSBiZWZvcmUgZndfZGF0YQotCSAqIGlzIGZyZWVkIGJlbG93LgotCSAqLwotCi0JZGVsX3RpbWVyKCZkZXYtPmZ3X2RhdGEtPmRzcF93YWl0KTsgLyogb25seSBzdGFydGVkIGluIC5vcGVuICovCi0KIAlpZiAoZGV2LT5md19kYXRhLT5mdykKIAkJcmVsZWFzZV9maXJtd2FyZShkZXYtPmZ3X2RhdGEtPmZ3KTsKIAlrZnJlZShkZXYtPmZ3X2RhdGEtPnBmd19kYXRhKTsKIAlrZnJlZShkZXYtPmZ3X2RhdGEpOwotCiAJdXNiX3B1dF9kZXYoZGV2LT51ZGV2KTsKIAlkcHJpbnRrKDEsICIlcyIsIF9fZnVuY19fKTsKIAlrZnJlZShkZXYpOworCisJd2hpbGUgKCFsaXN0X2VtcHR5KCZzMjI1NV9kZXZsaXN0KSkgeworCQlsaXN0ID0gczIyNTVfZGV2bGlzdC5uZXh0OworCQlsaXN0X2RlbChsaXN0KTsKKwl9CisJbXV0ZXhfdW5sb2NrKCZkZXYtPm9wZW5fbG9jayk7CiB9CiAKIHN0YXRpYyBpbnQgczIyNTVfY2xvc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCkBAIC0xNzAyLDYgKzE3OTIsOCBAQAogI2lmZGVmIENPTkZJR19WSURFT19WNEwxX0NPTVBBVAogCS52aWRpb2NnbWJ1ZiA9IHZpZGlvY19jZ21idWYsCiAjZW5kaWYKKwkudmlkaW9jX3NfanBlZ2NvbXAgPSB2aWRpb2Nfc19qcGVnY29tcCwKKwkudmlkaW9jX2dfanBlZ2NvbXAgPSB2aWRpb2NfZ19qcGVnY29tcCwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgdmlkZW9fZGV2aWNlIHRlbXBsYXRlID0gewpAQCAtMTc0MCw3ICsxODMyLDcgQEAKIAkJCXJldCA9IHZpZGVvX3JlZ2lzdGVyX2RldmljZShkZXYtPnZkZXZbaV0sCiAJCQkJCQkgICAgVkZMX1RZUEVfR1JBQkJFUiwKIAkJCQkJCSAgICBjdXJfbnIgKyBpKTsKLQkJZGV2LT52ZGV2W2ldLT5wcml2ID0gZGV2OworCQl2aWRlb19zZXRfZHJ2ZGF0YShkZXYtPnZkZXZbaV0sIGRldik7CiAKIAkJaWYgKHJldCAhPSAwKSB7CiAJCQlkZXZfZXJyKCZkZXYtPnVkZXYtPmRldiwKQEAgLTE3NTQsMTggKzE4NDYsMTYgQEAKIAogc3RhdGljIHZvaWQgczIyNTVfZXhpdF92NGwoc3RydWN0IHMyMjU1X2RldiAqZGV2KQogewotCXN0cnVjdCBsaXN0X2hlYWQgKmxpc3Q7CisKIAlpbnQgaTsKLQkvKiB1bnJlZ2lzdGVyIHRoZSB2aWRlbyBkZXZpY2VzICovCi0Jd2hpbGUgKCFsaXN0X2VtcHR5KCZzMjI1NV9kZXZsaXN0KSkgewotCQlsaXN0ID0gczIyNTVfZGV2bGlzdC5uZXh0OwotCQlsaXN0X2RlbChsaXN0KTsKLQl9CiAJZm9yIChpID0gMDsgaSA8IE1BWF9DSEFOTkVMUzsgaSsrKSB7Ci0JCWlmICgtMSAhPSBkZXYtPnZkZXZbaV0tPm1pbm9yKQorCQlpZiAoLTEgIT0gZGV2LT52ZGV2W2ldLT5taW5vcikgewogCQkJdmlkZW9fdW5yZWdpc3Rlcl9kZXZpY2UoZGV2LT52ZGV2W2ldKTsKLQkJZWxzZQorCQkJcHJpbnRrKEtFUk5fSU5GTyAiczIyNTUgdW5yZWdpc3RlcmVkXG4iKTsKKwkJfSBlbHNlIHsKIAkJCXZpZGVvX2RldmljZV9yZWxlYXNlKGRldi0+dmRldltpXSk7CisJCQlwcmludGsoS0VSTl9JTkZPICJzMjI1NSByZWxlYXNlZFxuIik7CisJCX0KIAl9CiB9CiAKQEAgLTE3NzUsMTMzICsxODY1LDEyMiBAQAogICogZnVuY3Rpb24gYWdhaW4pLgogICoKICAqIFJlY2VpdmVkIGZyYW1lIHN0cnVjdHVyZToKLSAqIGJ5dGVzIDAtMzogIG1hcmtlciA6IDB4MjI1NURBNEFMIChGUkFNRV9NQVJLRVIpCisgKiBieXRlcyAwLTM6ICBtYXJrZXIgOiAweDIyNTVEQTRBTCAoUzIyNTVfTUFSS0VSX0ZSQU1FKQogICogYnl0ZXMgNC03OiAgY2hhbm5lbDogMC0zCiAgKiBieXRlcyA4LTExOiBwYXlsb2FkIHNpemU6ICBzaXplIG9mIHRoZSBmcmFtZQogICogYnl0ZXMgMTItcGF5bG9hZHNpemUrMTI6ICBmcmFtZSBkYXRhCiAgKi8KIHN0YXRpYyBpbnQgc2F2ZV9mcmFtZShzdHJ1Y3QgczIyNTVfZGV2ICpkZXYsIHN0cnVjdCBzMjI1NV9waXBlaW5mbyAqcGlwZV9pbmZvKQogewotCXN0YXRpYyBpbnQgZGJnc3luYzsgLyogPSAwOyAqLwogCWNoYXIgKnBkZXN0OwogCXUzMiBvZmZzZXQgPSAwOwotCWludCBic3luYyA9IDA7Ci0JaW50IGJ0cnVuYyA9IDA7CisJaW50IGJmcmFtZSA9IDA7CiAJY2hhciAqcHNyYzsKIAl1bnNpZ25lZCBsb25nIGNvcHlfc2l6ZTsKIAl1bnNpZ25lZCBsb25nIHNpemU7CiAJczMyIGlkeCA9IC0xOwogCXN0cnVjdCBzMjI1NV9mcmFtZWkgKmZybTsKIAl1bnNpZ25lZCBjaGFyICpwZGF0YTsKLQl1bnNpZ25lZCBsb25nIGN1cl9zaXplOwotCWludCBic2VhcmNoID0gMDsKLQlzdHJ1Y3QgczIyNTVfYnVmZmVyaSAqYnVmOworCiAJZHByaW50aygxMDAsICJidWZmZXIgdG8gdXNlclxuIik7CiAKIAlpZHggPSBkZXYtPmN1cl9mcmFtZVtkZXYtPmNjXTsKLQlidWYgPSAmZGV2LT5idWZmZXJbZGV2LT5jY107Ci0JZnJtID0gJmJ1Zi0+ZnJhbWVbaWR4XTsKLQotCWlmIChmcm0tPnVsU3RhdGUgPT0gMCkgewotCQlmcm0tPnVsU3RhdGUgPSAxOwotCQlmcm0tPmN1cl9zaXplID0gMDsKLQkJYnNlYXJjaCA9IDE7Ci0JfSBlbHNlIGlmIChmcm0tPnVsU3RhdGUgPT0gMikgewotCQkvKiBzeXN0ZW0gZnJhbWUgd2FzIG5vdCBmcmVlZCAqLwotCQlkcHJpbnRrKDIsICJzeXMgZnJhbWUgbm90IGZyZWUuICBvdmVycnVuIHJpbmdidWZcbiIpOwotCQlic2VhcmNoID0gMTsKLQkJZnJtLT51bFN0YXRlID0gMTsKLQkJZnJtLT5jdXJfc2l6ZSA9IDA7Ci0JfQotCi0JaWYgKGJzZWFyY2gpIHsKLQkJaWYgKCooczMyICopIHBpcGVfaW5mby0+dHJhbnNmZXJfYnVmZmVyICE9IEZSQU1FX01BUktFUikgewotCQkJdTMyIGpqOwotCQkJaWYgKGRiZ3N5bmMgPT0gMCkgewotCQkJCWRwcmludGsoMywgIm5vdCBzeW5jaGVkLCBkaXNjYXJkaW5nIGFsbCBwYWNrZXRzIgotCQkJCQkidW50aWwgbWFya2VyXG4iKTsKLQotCQkJCWRiZ3N5bmMrKzsKLQkJCX0KLQkJCXBkYXRhID0gKHVuc2lnbmVkIGNoYXIgKilwaXBlX2luZm8tPnRyYW5zZmVyX2J1ZmZlcjsKLQkJCWZvciAoamogPSAwOyBqaiA8IChwaXBlX2luZm8tPmN1cl90cmFuc2Zlcl9zaXplIC0gMTIpOwotCQkJICAgICBqaisrKSB7Ci0JCQkJaWYgKCooczMyICopIHBkYXRhID09IEZSQU1FX01BUktFUikgewotCQkJCQlpbnQgY2M7Ci0JCQkJCWRwcmludGsoMywKLQkJCQkJCSJmb3VuZCBmcmFtZSBtYXJrZXIgYXQgb2Zmc2V0OiIKLQkJCQkJCSIgJWQgWyV4ICV4XVxuIiwgamosIHBkYXRhWzBdLAotCQkJCQkJcGRhdGFbMV0pOwotCQkJCQlvZmZzZXQgPSBqajsKLQkJCQkJYnN5bmMgPSAxOwotCQkJCQljYyA9ICoodTMyICopIChwZGF0YSArIHNpemVvZih1MzIpKTsKLQkJCQkJaWYgKGNjID49IE1BWF9DSEFOTkVMUykgewotCQkJCQkJcHJpbnRrKEtFUk5fRVJSCi0JCQkJCQkgICAgICAgImJhZCBjaGFubmVsXG4iKTsKLQkJCQkJCXJldHVybiAtRUlOVkFMOwotCQkJCQl9Ci0JCQkJCS8qIHJldmVyc2UgaXQgKi8KLQkJCQkJZGV2LT5jYyA9IEdfY2hubWFwW2NjXTsKLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJCXBkYXRhKys7Ci0JCQl9Ci0JCQlpZiAoYnN5bmMgPT0gMCkKLQkJCQlyZXR1cm4gLUVJTlZBTDsKLQkJfSBlbHNlIHsKLQkJCXUzMiAqcHdvcmQ7Ci0JCQl1MzIgcGF5bG9hZDsKLQkJCWludCBjYzsKLQkJCWRiZ3N5bmMgPSAwOwotCQkJYnN5bmMgPSAxOwotCQkJcHdvcmQgPSAodTMyICopIHBpcGVfaW5mby0+dHJhbnNmZXJfYnVmZmVyOwotCQkJY2MgPSBwd29yZFsxXTsKLQotCQkJaWYgKGNjID49IE1BWF9DSEFOTkVMUykgewotCQkJCXByaW50aygiaW52YWxpZCBjaGFubmVsIGZvdW5kLiAiCi0JCQkJCSJ0aHJvd2luZyBvdXQgZGF0YSFcbiIpOwotCQkJCXJldHVybiAtRUlOVkFMOwotCQkJfQotCQkJZGV2LT5jYyA9IEdfY2hubWFwW2NjXTsKLQkJCXBheWxvYWQgPSBwd29yZFsyXTsKLQkJCWlmIChwYXlsb2FkICE9IGRldi0+cmVxX2ltYWdlX3NpemVbZGV2LT5jY10pIHsKLQkJCQlkcHJpbnRrKDEsICJbJWRdWyVkXXVuZXhwZWN0ZWQgcGF5bG9hZDogJWQiCi0JCQkJCSJyZXF1aXJlZDogJWx1IFxuIiwgY2MsIGRldi0+Y2MsCi0JCQkJCXBheWxvYWQsIGRldi0+cmVxX2ltYWdlX3NpemVbZGV2LT5jY10pOwotCQkJCWRldi0+YmFkX3BheWxvYWRbZGV2LT5jY10rKzsKLQkJCQkvKiBkaXNjYXJkIHRoZSBiYWQgZnJhbWUgKi8KLQkJCQlyZXR1cm4gLUVJTlZBTDsKLQkJCX0KLQotCQl9Ci0JfQotCS8qIHNlYXJjaCBkb25lLiAgbm93IGZpbmQgb3V0IGlmIHNob3VsZCBiZSBhY3F1aXJpbmcKLQkgICBvbiB0aGlzIGNoYW5uZWwgKi8KLQlpZiAoIWRldi0+Yl9hY3F1aXJlW2Rldi0+Y2NdKSB7Ci0JCWZybS0+dWxTdGF0ZSA9IDA7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCWlkeCA9IGRldi0+Y3VyX2ZyYW1lW2Rldi0+Y2NdOwogCWZybSA9ICZkZXYtPmJ1ZmZlcltkZXYtPmNjXS5mcmFtZVtpZHhdOwogCi0JaWYgKGZybS0+dWxTdGF0ZSA9PSAwKSB7Ci0JCWZybS0+dWxTdGF0ZSA9IDE7Ci0JCWZybS0+Y3VyX3NpemUgPSAwOwotCX0gZWxzZSBpZiAoZnJtLT51bFN0YXRlID09IDIpIHsKLQkJLyogc3lzdGVtIGZyYW1lIHJpbmcgYnVmZmVyIG92ZXJydW4gKi8KLQkJZHByaW50aygyLCAic3lzIGZyYW1lIG92ZXJydW4uICBvdmVyd3JpdGluZyBmcmFtZSAlZCAlZFxuIiwKLQkJCWRldi0+Y2MsIGlkeCk7Ci0JCWZybS0+dWxTdGF0ZSA9IDE7CisJaWYgKGZybS0+dWxTdGF0ZSA9PSBTMjI1NV9SRUFEX0lETEUpIHsKKwkJaW50IGpqOworCQl1bnNpZ25lZCBpbnQgY2M7CisJCXMzMiAqcGR3b3JkOworCQlpbnQgcGF5bG9hZDsKKwkJLyogc2VhcmNoIGZvciBtYXJrZXIgY29kZXMgKi8KKwkJcGRhdGEgPSAodW5zaWduZWQgY2hhciAqKXBpcGVfaW5mby0+dHJhbnNmZXJfYnVmZmVyOworCQlmb3IgKGpqID0gMDsgamogPCAocGlwZV9pbmZvLT5jdXJfdHJhbnNmZXJfc2l6ZSAtIDEyKTsgamorKykgeworCQkJc3dpdGNoICgqKHMzMiAqKSBwZGF0YSkgeworCQkJY2FzZSBTMjI1NV9NQVJLRVJfRlJBTUU6CisJCQkJcGR3b3JkID0gKHMzMiAqKXBkYXRhOworCQkJCWRwcmludGsoNCwgImZvdW5kIGZyYW1lIG1hcmtlciBhdCBvZmZzZXQ6IgorCQkJCQkiICVkIFsleCAleF1cbiIsIGpqLCBwZGF0YVswXSwKKwkJCQkJcGRhdGFbMV0pOworCQkJCW9mZnNldCA9IGpqICsgUFJFRklYX1NJWkU7CisJCQkJYmZyYW1lID0gMTsKKwkJCQljYyA9IHBkd29yZFsxXTsKKwkJCQlpZiAoY2MgPj0gTUFYX0NIQU5ORUxTKSB7CisJCQkJCXByaW50ayhLRVJOX0VSUgorCQkJCQkgICAgICAgImJhZCBjaGFubmVsXG4iKTsKKwkJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQkJfQorCQkJCS8qIHJldmVyc2UgaXQgKi8KKwkJCQlkZXYtPmNjID0gR19jaG5tYXBbY2NdOworCQkJCXBheWxvYWQgPSAgcGR3b3JkWzNdOworCQkJCWlmIChwYXlsb2FkID4gZGV2LT5yZXFfaW1hZ2Vfc2l6ZVtkZXYtPmNjXSkgeworCQkJCQlkZXYtPmJhZF9wYXlsb2FkW2Rldi0+Y2NdKys7CisJCQkJCS8qIGRpc2NhcmQgdGhlIGJhZCBmcmFtZSAqLworCQkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCQl9CisJCQkJZGV2LT5wa3Rfc2l6ZVtkZXYtPmNjXSA9IHBheWxvYWQ7CisJCQkJZGV2LT5qcGdfc2l6ZVtkZXYtPmNjXSA9IHBkd29yZFs0XTsKKwkJCQlicmVhazsKKwkJCWNhc2UgUzIyNTVfTUFSS0VSX1JFU1BPTlNFOgorCQkJCXBkd29yZCA9IChzMzIgKilwZGF0YTsKKwkJCQlwZGF0YSArPSBERUZfVVNCX0JMT0NLOworCQkJCWpqICs9IERFRl9VU0JfQkxPQ0s7CisJCQkJaWYgKHBkd29yZFsxXSA+PSBNQVhfQ0hBTk5FTFMpCisJCQkJCWJyZWFrOworCQkJCWNjID0gR19jaG5tYXBbcGR3b3JkWzFdXTsKKwkJCQlpZiAoIShjYyA+PSAwICYmIGNjIDwgTUFYX0NIQU5ORUxTKSkKKwkJCQkJYnJlYWs7CisJCQkJc3dpdGNoIChwZHdvcmRbMl0pIHsKKwkJCQljYXNlIDB4MDE6CisJCQkJCS8qIGNoZWNrIGlmIGNoYW5uZWwgdmFsaWQgKi8KKwkJCQkJLyogc2V0IG1vZGUgcmVhZHkgKi8KKwkJCQkJZGV2LT5zZXRtb2RlX3JlYWR5W2NjXSA9IDE7CisJCQkJCXdha2VfdXAoJmRldi0+d2FpdF9zZXRtb2RlW2NjXSk7CisJCQkJCWRwcmludGsoNSwgInNldG1vZGUgcmVhZHkgJWRcbiIsIGNjKTsKKwkJCQkJYnJlYWs7CisJCQkJY2FzZSAweDEwOgorCisJCQkJCWRldi0+Y2huX3JlYWR5IHw9ICgxIDw8IGNjKTsKKwkJCQkJaWYgKChkZXYtPmNobl9yZWFkeSAmIDB4MGYpICE9IDB4MGYpCisJCQkJCQlicmVhazsKKwkJCQkJLyogYWxsIGNoYW5uZWxzIHJlYWR5ICovCisJCQkJCXByaW50ayhLRVJOX0lORk8gInMyMjU1OiBmdyBsb2FkZWRcbiIpOworCQkJCQlhdG9taWNfc2V0KCZkZXYtPmZ3X2RhdGEtPmZ3X3N0YXRlLAorCQkJCQkJICAgUzIyNTVfRldfU1VDQ0VTUyk7CisJCQkJCXdha2VfdXAoJmRldi0+ZndfZGF0YS0+d2FpdF9mdyk7CisJCQkJCWJyZWFrOworCQkJCWRlZmF1bHQ6CisJCQkJCXByaW50ayhLRVJOX0lORk8gInMyMjU1IHVua253biByZXNwXG4iKTsKKwkJCQl9CisJCQlkZWZhdWx0OgorCQkJCXBkYXRhKys7CisJCQkJYnJlYWs7CisJCQl9CisJCQlpZiAoYmZyYW1lKQorCQkJCWJyZWFrOworCQl9IC8qIGZvciAqLworCQlpZiAoIWJmcmFtZSkKKwkJCXJldHVybiAtRUlOVkFMOworCX0KKworCisJaWR4ID0gZGV2LT5jdXJfZnJhbWVbZGV2LT5jY107CisJZnJtID0gJmRldi0+YnVmZmVyW2Rldi0+Y2NdLmZyYW1lW2lkeF07CisKKwkvKiBzZWFyY2ggZG9uZS4gIG5vdyBmaW5kIG91dCBpZiBzaG91bGQgYmUgYWNxdWlyaW5nIG9uIHRoaXMgY2hhbm5lbCAqLworCWlmICghZGV2LT5iX2FjcXVpcmVbZGV2LT5jY10pIHsKKwkJLyogd2UgZm91bmQgYSBmcmFtZSwgYnV0IHRoaXMgY2hhbm5lbCBpcyB0dXJuZWQgb2ZmICovCisJCWZybS0+dWxTdGF0ZSA9IFMyMjU1X1JFQURfSURMRTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKGZybS0+dWxTdGF0ZSA9PSBTMjI1NV9SRUFEX0lETEUpIHsKKwkJZnJtLT51bFN0YXRlID0gUzIyNTVfUkVBRF9GUkFNRTsKIAkJZnJtLT5jdXJfc2l6ZSA9IDA7CiAJfQogCi0JaWYgKGJzeW5jKSB7Ci0JCS8qIHNraXAgdGhlIG1hcmtlciA1MTIgYnl0ZXMgKGFuZCBvZmZzZXQgaWYgb3V0IG9mIHN5bmMpICovCi0JCXBzcmMgPSAodTggKilwaXBlX2luZm8tPnRyYW5zZmVyX2J1ZmZlciArIG9mZnNldCArIFBSRUZJWF9TSVpFOwotCX0gZWxzZSB7Ci0JCXBzcmMgPSAodTggKilwaXBlX2luZm8tPnRyYW5zZmVyX2J1ZmZlcjsKLQl9CisJLyogc2tpcCB0aGUgbWFya2VyIDUxMiBieXRlcyAoYW5kIG9mZnNldCBpZiBvdXQgb2Ygc3luYykgKi8KKwlwc3JjID0gKHU4ICopcGlwZV9pbmZvLT50cmFuc2Zlcl9idWZmZXIgKyBvZmZzZXQ7CisKIAogCWlmIChmcm0tPmxwdmJpdHMgPT0gTlVMTCkgewogCQlkcHJpbnRrKDEsICJzMjI1NSBmcmFtZSBidWZmZXIgPT0gTlVMTC4lcCAlcCAlZCAlZCIsCkBAIC0xOTExLDMzICsxOTkwLDIwIEBACiAKIAlwZGVzdCA9IGZybS0+bHB2Yml0cyArIGZybS0+Y3VyX3NpemU7CiAKLQlpZiAoYnN5bmMpIHsKLQkJY29weV9zaXplID0KLQkJICAgIChwaXBlX2luZm8tPmN1cl90cmFuc2Zlcl9zaXplIC0gb2Zmc2V0KSAtIFBSRUZJWF9TSVpFOwotCQlpZiAoY29weV9zaXplID4gcGlwZV9pbmZvLT5jdXJfdHJhbnNmZXJfc2l6ZSkgewotCQkJcHJpbnRrKCJpbnZhbGlkIGNvcHkgc2l6ZSwgb3ZlcmZsb3chXG4iKTsKLQkJCXJldHVybiAtRU5PTUVNOwotCQl9Ci0JfSBlbHNlIHsKLQkJY29weV9zaXplID0gcGlwZV9pbmZvLT5jdXJfdHJhbnNmZXJfc2l6ZTsKLQl9CisJY29weV9zaXplID0gKHBpcGVfaW5mby0+Y3VyX3RyYW5zZmVyX3NpemUgLSBvZmZzZXQpOwogCi0JY3VyX3NpemUgPSBmcm0tPmN1cl9zaXplOwotCXNpemUgPSBkZXYtPnJlcV9pbWFnZV9zaXplW2Rldi0+Y2NdOworCXNpemUgPSBkZXYtPnBrdF9zaXplW2Rldi0+Y2NdIC0gUFJFRklYX1NJWkU7CiAKLQlpZiAoKGNvcHlfc2l6ZSArIGN1cl9zaXplKSA+IHNpemUpIHsKLQkJY29weV9zaXplID0gc2l6ZSAtIGN1cl9zaXplOwotCQlidHJ1bmMgPSAxOwotCX0KKwkvKiBzYW5pdHkgY2hlY2sgb24gcGRlc3QgKi8KKwlpZiAoKGNvcHlfc2l6ZSArIGZybS0+Y3VyX3NpemUpIDwgZGV2LT5yZXFfaW1hZ2Vfc2l6ZVtkZXYtPmNjXSkKKwkJbWVtY3B5KHBkZXN0LCBwc3JjLCBjb3B5X3NpemUpOwogCi0JbWVtY3B5KHBkZXN0LCBwc3JjLCBjb3B5X3NpemUpOwotCWN1cl9zaXplICs9IGNvcHlfc2l6ZTsKIAlmcm0tPmN1cl9zaXplICs9IGNvcHlfc2l6ZTsKLQlkcHJpbnRrKDUwLCAiY3VyX3NpemUgc2l6ZSAlbHUgc2l6ZSAlbHUgXG4iLCBjdXJfc2l6ZSwgc2l6ZSk7CisJZHByaW50ayg0LCAiY3VyX3NpemUgc2l6ZSAlbHUgc2l6ZSAlbHUgXG4iLCBmcm0tPmN1cl9zaXplLCBzaXplKTsKIAotCWlmIChjdXJfc2l6ZSA+PSAoc2l6ZSAtIFBSRUZJWF9TSVpFKSkgeworCWlmIChmcm0tPmN1cl9zaXplID49IHNpemUpIHsKKwogCQl1MzIgY2MgPSBkZXYtPmNjOwotCQlmcm0tPnVsU3RhdGUgPSAyOwogCQlkcHJpbnRrKDIsICIqKioqKioqKioqKioqKioqWyVkXUJ1ZmZlclslZF1mdWxsKioqKioqKioqKioqKlxuIiwKIAkJCWNjLCBpZHgpOwogCQlkZXYtPmxhc3RfZnJhbWVbY2NdID0gZGV2LT5jdXJfZnJhbWVbY2NdOwpAQCAtMTk0NiwxNiArMjAxMiwxMyBAQAogCQlpZiAoKGRldi0+Y3VyX2ZyYW1lW2NjXSA9PSBTWVNfRlJBTUVTKSB8fAogCQkgICAgKGRldi0+Y3VyX2ZyYW1lW2NjXSA9PSBkZXYtPmJ1ZmZlcltjY10uZHdGcmFtZXMpKQogCQkJZGV2LT5jdXJfZnJhbWVbY2NdID0gMDsKLQotCQkvKiBzaWduYWwgdGhlIHNlbWFwaG9yZSBmb3IgdGhpcyBjaGFubmVsICovCisJCS8qIGZyYW1lIHJlYWR5ICovCiAJCWlmIChkZXYtPmJfYWNxdWlyZVtjY10pCi0JCQlzMjI1NV9nb3RfZnJhbWUoZGV2LCBjYyk7CisJCQlzMjI1NV9nb3RfZnJhbWUoZGV2LCBjYywgZGV2LT5qcGdfc2l6ZVtjY10pOwogCQlkZXYtPmZyYW1lX2NvdW50W2NjXSsrOwotCX0KLQkvKiBmcmFtZSB3YXMgdHJ1bmNhdGVkICovCi0JaWYgKGJ0cnVuYykgewotCQkvKiByZXR1cm4gbW9yZSBkYXRhIHRvIHByb2Nlc3MgKi8KLQkJcmV0dXJuIEVBR0FJTjsKKwkJZnJtLT51bFN0YXRlID0gUzIyNTVfUkVBRF9JRExFOworCQlmcm0tPmN1cl9zaXplID0gMDsKKwogCX0KIAkvKiBkb25lIHN1Y2Nlc3NmdWxseSAqLwogCXJldHVybiAwOwpAQCAtMTk3NCw4ICsyMDM3LDggQEAKIAl9CiAJLyogb3RoZXJ3aXNlIGNvcHkgdG8gdGhlIHN5c3RlbSBidWZmZXJzICovCiAJcmVzID0gc2F2ZV9mcmFtZShkZXYsIHBpcGVfaW5mbyk7Ci0JaWYgKHJlcyA9PSBFQUdBSU4pCi0JCXNhdmVfZnJhbWUoZGV2LCBwaXBlX2luZm8pOworCWlmIChyZXMgIT0gMCkKKwkJZHByaW50ayg0LCAiczIyNTU6IHJlYWQgY2FsbGJhY2sgZmFpbGVkXG4iKTsKIAogCWRwcmludGsoNTAsICJjYWxsYmFjayByZWFkIHZpZGVvIGRvbmVcbiIpOwogCXJldHVybjsKQEAgLTIwOTUsMTEgKzIxNTgsOSBAQAogCiAJCW1lbXNldChwaXBlLCAwLCBzaXplb2YoKnBpcGUpKTsKIAkJcGlwZS0+ZGV2ID0gZGV2OwotCQlwaXBlLT5jdXJfdHJhbnNmZXJfc2l6ZSA9IERFRkFVTFRfUElQRV9VU0JCTE9DSzsKLQkJcGlwZS0+bWF4X3RyYW5zZmVyX3NpemUgPSBNQVhfUElQRV9VU0JCTE9DSzsKKwkJcGlwZS0+Y3VyX3RyYW5zZmVyX3NpemUgPSBTMjI1NV9VU0JfWEZFUl9TSVpFOworCQlwaXBlLT5tYXhfdHJhbnNmZXJfc2l6ZSA9IFMyMjU1X1VTQl9YRkVSX1NJWkU7CiAKLQkJaWYgKHBpcGUtPmN1cl90cmFuc2Zlcl9zaXplID4gcGlwZS0+bWF4X3RyYW5zZmVyX3NpemUpCi0JCQlwaXBlLT5jdXJfdHJhbnNmZXJfc2l6ZSA9IHBpcGUtPm1heF90cmFuc2Zlcl9zaXplOwogCQlwaXBlLT50cmFuc2Zlcl9idWZmZXIgPSBremFsbG9jKHBpcGUtPm1heF90cmFuc2Zlcl9zaXplLAogCQkJCQkJR0ZQX0tFUk5FTCk7CiAJCWlmIChwaXBlLT50cmFuc2Zlcl9idWZmZXIgPT0gTlVMTCkgewpAQCAtMjExOSw2ICsyMTgwLDcgQEAKIAlmb3IgKGogPSAwOyBqIDwgTUFYX0NIQU5ORUxTOyBqKyspIHsKIAkJZGV2LT5iX2FjcXVpcmVbal0gPSAwOwogCQlkZXYtPm1vZGVbal0gPSBtb2RlX2RlZjsKKwkJZGV2LT5qY1tqXS5xdWFsaXR5ID0gUzIyNTVfREVGX0pQRUdfUVVBTDsKIAkJZGV2LT5jdXJfZm10W2pdID0gJmZvcm1hdHNbMF07CiAJCWRldi0+bW9kZVtqXS5yZXN0YXJ0ID0gMTsKIAkJZGV2LT5yZXFfaW1hZ2Vfc2l6ZVtqXSA9IGdldF90cmFuc2Zlcl9zaXplKCZtb2RlX2RlZik7CkBAIC0yMzIzLDcgKzIzODUsNyBAQAogCWtmcmVlKGJ1ZmZlcik7CiAJZGV2LT5iX2FjcXVpcmVbY2huXSA9IDA7CiAKLQlyZXR1cm4gMDsKKwlyZXR1cm4gcmVzOwogfQogCiBzdGF0aWMgdm9pZCBzMjI1NV9zdG9wX3JlYWRwaXBlKHN0cnVjdCBzMjI1NV9kZXYgKmRldikKQEAgLTIzNTksOCArMjQyMSwxMCBAQAogCXJldHVybjsKIH0KIAotc3RhdGljIHZvaWQgczIyNTVfZndsb2FkX3N0YXJ0KHN0cnVjdCBzMjI1NV9kZXYgKmRldikKK3N0YXRpYyB2b2lkIHMyMjU1X2Z3bG9hZF9zdGFydChzdHJ1Y3QgczIyNTVfZGV2ICpkZXYsIGludCByZXNldCkKIHsKKwlpZiAocmVzZXQpCisJCXMyMjU1X3Jlc2V0X2RzcHBvd2VyKGRldik7CiAJZGV2LT5md19kYXRhLT5md19zaXplID0gZGV2LT5md19kYXRhLT5mdy0+c2l6ZTsKIAlhdG9taWNfc2V0KCZkZXYtPmZ3X2RhdGEtPmZ3X3N0YXRlLCBTMjI1NV9GV19OT1RMT0FERUQpOwogCW1lbWNweShkZXYtPmZ3X2RhdGEtPnBmd19kYXRhLApAQCAtMjM4Myw2ICsyNDQ3LDggQEAKIAlzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmVuZHBvaW50OwogCWludCBpOwogCWludCByZXR2YWwgPSAtRU5PTUVNOworCV9fbGUzMiAqcGRhdGE7CisJaW50IGZ3X3NpemU7CiAKIAlkcHJpbnRrKDIsICJzMjI1NTogcHJvYmVcbiIpOwogCkBAIC0yNDM3LDYgKzI1MDMsOCBAQAogCWRldi0+dGltZXIuZGF0YSA9ICh1bnNpZ25lZCBsb25nKWRldi0+ZndfZGF0YTsKIAogCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmRldi0+ZndfZGF0YS0+d2FpdF9mdyk7CisJZm9yIChpID0gMDsgaSA8IE1BWF9DSEFOTkVMUzsgaSsrKQorCQlpbml0X3dhaXRxdWV1ZV9oZWFkKCZkZXYtPndhaXRfc2V0bW9kZVtpXSk7CiAKIAogCWRldi0+ZndfZGF0YS0+ZndfdXJiID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfS0VSTkVMKTsKQEAgLTI0NTYsMTYgKzI1MjQsMzAgQEAKIAkJcHJpbnRrKEtFUk5fRVJSICJzZW5zb3JheSAyMjU1IGZhaWxlZCB0byBnZXQgZmlybXdhcmVcbiIpOwogCQlnb3RvIGVycm9yOwogCX0KKwkvKiBjaGVjayB0aGUgZmlybXdhcmUgaXMgdmFsaWQgKi8KKwlmd19zaXplID0gZGV2LT5md19kYXRhLT5mdy0+c2l6ZTsKKwlwZGF0YSA9IChfX2xlMzIgKikgJmRldi0+ZndfZGF0YS0+ZnctPmRhdGFbZndfc2l6ZSAtIDhdOwogCisJaWYgKCpwZGF0YSAhPSBTMjI1NV9GV19NQVJLRVIpIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiRmlybXdhcmUgaW52YWxpZC5cbiIpOworCQlyZXR2YWwgPSAtRU5PREVWOworCQlnb3RvIGVycm9yOworCX0gZWxzZSB7CisJCS8qIG1ha2Ugc3VyZSBmaXJtd2FyZSBpcyB0aGUgbGF0ZXN0ICovCisJCV9fbGUzMiAqcFJlbDsKKwkJcFJlbCA9IChfX2xlMzIgKikgJmRldi0+ZndfZGF0YS0+ZnctPmRhdGFbZndfc2l6ZSAtIDRdOworCQlwcmludGsoS0VSTl9JTkZPICJzMjI1NSBkc3AgZncgdmVyc2lvbiAleFxuIiwgKnBSZWwpOworCX0KIAkvKiBsb2FkcyB2NGwgc3BlY2lmaWMgKi8KIAlzMjI1NV9wcm9iZV92NGwoZGV2KTsKKwl1c2JfcmVzZXRfZGV2aWNlKGRldi0+dWRldik7CiAJLyogbG9hZCAyMjU1IGJvYXJkIHNwZWNpZmljICovCiAJczIyNTVfYm9hcmRfaW5pdChkZXYpOwogCiAJZHByaW50ayg0LCAiYmVmb3JlIHByb2JlIGRvbmUgJXBcbiIsIGRldik7CiAJc3Bpbl9sb2NrX2luaXQoJmRldi0+c2xvY2spOwogCi0JczIyNTVfZndsb2FkX3N0YXJ0KGRldik7CisJczIyNTVfZndsb2FkX3N0YXJ0KGRldiwgMCk7CiAJZGV2X2luZm8oJmludGVyZmFjZS0+ZGV2LCAiU2Vuc29yYXkgMjI1NSBkZXRlY3RlZFxuIik7CiAJcmV0dXJuIDA7CiBlcnJvcjoKQEAgLTI0NzYsMTQgKzI1NTgsMzAgQEAKIHN0YXRpYyB2b2lkIHMyMjU1X2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSkKIHsKIAlzdHJ1Y3QgczIyNTVfZGV2ICpkZXYgPSBOVUxMOworCWludCBpOwogCWRwcmludGsoMSwgInMyMjU1OiBkaXNjb25uZWN0IGludGVyZmFjZSAlcFxuIiwgaW50ZXJmYWNlKTsKIAlkZXYgPSB1c2JfZ2V0X2ludGZkYXRhKGludGVyZmFjZSk7CisKKwkvKgorCSAqIHdha2UgdXAgYW55IG9mIHRoZSB0aW1lcnMgdG8gYWxsb3cgb3Blbl9sb2NrIHRvIGJlCisJICogYWNxdWlyZWQgc29vbmVyCisJICovCisJYXRvbWljX3NldCgmZGV2LT5md19kYXRhLT5md19zdGF0ZSwgUzIyNTVfRldfRElTQ09OTkVDVElORyk7CisJd2FrZV91cCgmZGV2LT5md19kYXRhLT53YWl0X2Z3KTsKKwlmb3IgKGkgPSAwOyBpIDwgTUFYX0NIQU5ORUxTOyBpKyspIHsKKwkJZGV2LT5zZXRtb2RlX3JlYWR5W2ldID0gMTsKKwkJd2FrZV91cCgmZGV2LT53YWl0X3NldG1vZGVbaV0pOworCX0KKworCW11dGV4X2xvY2soJmRldi0+b3Blbl9sb2NrKTsKKwl1c2Jfc2V0X2ludGZkYXRhKGludGVyZmFjZSwgTlVMTCk7CisJbXV0ZXhfdW5sb2NrKCZkZXYtPm9wZW5fbG9jayk7CisKIAlpZiAoZGV2KSB7CiAJCWtyZWZfcHV0KCZkZXYtPmtyZWYsIHMyMjU1X2Rlc3Ryb3kpOwogCQlkcHJpbnRrKDEsICJzMjI1NWRydjogZGlzY29ubmVjdFxuIik7CiAJCWRldl9pbmZvKCZpbnRlcmZhY2UtPmRldiwgInMyMjU1dXNiIG5vdyBkaXNjb25uZWN0ZWRcbiIpOwogCX0KLQl1c2Jfc2V0X2ludGZkYXRhKGludGVyZmFjZSwgTlVMTCk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBzMjI1NV9kcml2ZXIgPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTUyNDZhLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTUyNDZhLmMKaW5kZXggNmVlNjNlNi4uNGEyMWI4YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE1MjQ2YS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNTI0NmEuYwpAQCAtNDMsMTM2ICs0MywzNjQgQEAKICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAjaW5jbHVkZSA8bGludXgvdmlkZW90ZXh0Lmg+CiAjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYuaD4KICNpbmNsdWRlIDxtZWRpYS92NGwyLWNvbW1vbi5oPgogI2luY2x1ZGUgPG1lZGlhL3Y0bDItaW9jdGwuaD4KLSNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgotCi0jaW5jbHVkZSAic2FhNTI0NmEuaCIKKyNpbmNsdWRlIDxtZWRpYS92NGwyLWkyYy1kcnYtbGVnYWN5Lmg+CiAKIE1PRFVMRV9BVVRIT1IoIk1pY2hhZWwgR2VuZyA8bGludXhATWljaGFlbEdlbmcuZGU+Iik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIlBoaWxpcHMgU0FBNTI0NkEsIFNBQTUyODEgVGVsZXRleHQgZGVjb2RlciBkcml2ZXIiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIAorI2RlZmluZSBNQUpPUl9WRVJTSU9OIDEJCS8qIGRyaXZlciBtYWpvciB2ZXJzaW9uIG51bWJlciAqLworI2RlZmluZSBNSU5PUl9WRVJTSU9OIDgJCS8qIGRyaXZlciBtaW5vciB2ZXJzaW9uIG51bWJlciAqLworCisvKiBOdW1iZXIgb2YgREFVcyA9IG51bWJlciBvZiBwYWdlcyB0aGF0IGNhbiBiZSBzZWFyY2hlZCBhdCB0aGUgc2FtZSB0aW1lLiAqLworI2RlZmluZSBOVU1fREFVUyA0CisKKyNkZWZpbmUgTlVNX1JPV1NfUEVSX1BBR0UgNDAKKworLyogZmlyc3QgY29sdW1uIGlzIDAgKG5vdCAxKSAqLworI2RlZmluZSBQT1NfVElNRV9TVEFSVCAzMgorI2RlZmluZSBQT1NfVElNRV9FTkQgMzkKKworI2RlZmluZSBQT1NfSEVBREVSX1NUQVJUIDcKKyNkZWZpbmUgUE9TX0hFQURFUl9FTkQgMzEKKworLyogUmV0dXJucyAndHJ1ZScgaWYgdGhlIHBhcnQgb2YgdGhlIHZpZGVvdGV4dCBwYWdlIGRlc2NyaWJlZCB3aXRoIHJlcSBjb250YWlucworICAgKGF0IGxlYXN0IHBhcnRzIG9mKSB0aGUgdGltZSBmaWVsZCAqLworI2RlZmluZSBSRVFfQ09OVEFJTlNfVElNRShwX3JlcSkgXAorCSgocF9yZXEpLT5zdGFydCA8PSBQT1NfVElNRV9FTkQgJiYgXAorCSAocF9yZXEpLT5lbmQgICA+PSBQT1NfVElNRV9TVEFSVCkKKworLyogUmV0dXJucyAndHJ1ZScgaWYgdGhlIHBhcnQgb2YgdGhlIHZpZGVvdGV4dCBwYWdlIGRlc2NyaWJlZCB3aXRoIHJlcSBjb250YWlucworICAgKGF0IGxlYXN0IHBhcnRzIG9mKSB0aGUgcGFnZSBoZWFkZXIgKi8KKyNkZWZpbmUgUkVRX0NPTlRBSU5TX0hFQURFUihwX3JlcSkgXAorCSgocF9yZXEpLT5zdGFydCA8PSBQT1NfSEVBREVSX0VORCAmJiBcCisJIChwX3JlcSktPmVuZCAgID49IFBPU19IRUFERVJfU1RBUlQpCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIE1vZGUgcmVnaXN0ZXIgbnVtYmVycyBvZiB0aGUgU0FBNTI0NkEJCQkJICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2RlZmluZSBTQUE1MjQ2QV9SRUdJU1RFUl9SMCAgICAwCisjZGVmaW5lIFNBQTUyNDZBX1JFR0lTVEVSX1IxICAgIDEKKyNkZWZpbmUgU0FBNTI0NkFfUkVHSVNURVJfUjIgICAgMgorI2RlZmluZSBTQUE1MjQ2QV9SRUdJU1RFUl9SMyAgICAzCisjZGVmaW5lIFNBQTUyNDZBX1JFR0lTVEVSX1I0ICAgIDQKKyNkZWZpbmUgU0FBNTI0NkFfUkVHSVNURVJfUjUgICAgNQorI2RlZmluZSBTQUE1MjQ2QV9SRUdJU1RFUl9SNiAgICA2CisjZGVmaW5lIFNBQTUyNDZBX1JFR0lTVEVSX1I3ICAgIDcKKyNkZWZpbmUgU0FBNTI0NkFfUkVHSVNURVJfUjggICAgOAorI2RlZmluZSBTQUE1MjQ2QV9SRUdJU1RFUl9SOSAgICA5CisjZGVmaW5lIFNBQTUyNDZBX1JFR0lTVEVSX1IxMCAgMTAKKyNkZWZpbmUgU0FBNTI0NkFfUkVHSVNURVJfUjExICAxMQorI2RlZmluZSBTQUE1MjQ2QV9SRUdJU1RFUl9SMTFCIDExCisKKy8qIFNBQTUyNDZBIG1vZGUgcmVnaXN0ZXJzIG9mdGVuIGF1dG9pbmNyZW1lbnQgdG8gdGhlIG5leHQgcmVnaXN0ZXIuCisgICBUaGVyZWZvcmUgd2UgdXNlIHZhcmlhYmxlIGFyZ3VtZW50IGxpc3RzLiBUaGUgZm9sbG93aW5nIG1hY3JvIGluZGljYXRlcworICAgdGhlIGVuZCBvZiBhIGNvbW1hbmQgbGlzdC4gKi8KKyNkZWZpbmUgQ09NTUFORF9FTkQgKC0xKQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBDb250ZW50cyBvZiB0aGUgbW9kZSByZWdpc3RlcnMgb2YgdGhlIFNBQTUyNDZBCQkJICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogUmVnaXN0ZXIgUjAgKEFkdmFuY2VkIENvbnRyb2wpICovCisjZGVmaW5lIFIwX1NFTEVDVF9SMTEJCQkJCSAgIDB4MDAKKyNkZWZpbmUgUjBfU0VMRUNUX1IxMUIJCQkJCSAgIDB4MDEKKworI2RlZmluZSBSMF9QTExfVElNRV9DT05TVEFOVF9MT05HCQkJICAgMHgwMAorI2RlZmluZSBSMF9QTExfVElNRV9DT05TVEFOVF9TSE9SVAkJCSAgIDB4MDIKKworI2RlZmluZSBSMF9FTkFCTEVfbk9ERF9FVkVOX09VVFBVVAkJCSAgIDB4MDAKKyNkZWZpbmUgUjBfRElTQUJMRV9uT0REX0VWRU5fT1VUUFVUCQkJICAgMHgwNAorCisjZGVmaW5lIFIwX0VOQUJMRV9IRFJfUE9MTAkJCQkgICAweDAwCisjZGVmaW5lIFIwX0RJU0FCTEVfSERSX1BPTEwJCQkJICAgMHgxMAorCisjZGVmaW5lIFIwX0RPX05PVF9GT1JDRV9uT0REX0VWRU5fTE9XX0lGX1BJQ1RVUkVfRElTUExBWUVEIDB4MDAKKyNkZWZpbmUgUjBfRk9SQ0Vfbk9ERF9FVkVOX0xPV19JRl9QSUNUVVJFX0RJU1BMQVlFRAkgICAweDIwCisKKyNkZWZpbmUgUjBfTk9fRlJFRV9SVU5fUExMCQkJCSAgIDB4MDAKKyNkZWZpbmUgUjBfRlJFRV9SVU5fUExMCQkJCQkgICAweDQwCisKKyNkZWZpbmUgUjBfTk9fQVVUT01BVElDX0ZBU1RFWFRfUFJPTVBUCQkJICAgMHgwMAorI2RlZmluZSBSMF9BVVRPTUFUSUNfRkFTVEVYVF9QUk9NUFQJCQkgICAweDgwCisKKy8qIFJlZ2lzdGVyIFIxIChNb2RlKSAqLworI2RlZmluZSBSMV9JTlRFUkxBQ0VEXzMxMl9BTkRfSEFMRl8zMTJfQU5EX0hBTEZfTElORVMJICAgMHgwMAorI2RlZmluZSBSMV9OT05fSU5URVJMQUNFRF8zMTJfMzEzX0xJTkVTCQkJICAgMHgwMQorI2RlZmluZSBSMV9OT05fSU5URVJMQUNFRF8zMTJfMzEyX0xJTkVTCQkJICAgMHgwMgorI2RlZmluZSBSMV9GRkJfTEVBRElOR19FREdFX0lOX0ZJUlNUX0JST0FEX1BVTFNFCSAgIDB4MDMKKyNkZWZpbmUgUjFfRkZCX0xFQURJTkdfRURHRV9JTl9TRUNPTkRfQlJPQURfUFVMU0UJICAgMHgwNworCisjZGVmaW5lIFIxX0RFVwkJCQkJCSAgIDB4MDAKKyNkZWZpbmUgUjFfRlVMTF9GSUVMRAkJCQkJICAgMHgwOAorCisjZGVmaW5lIFIxX0VYVEVOREVEX1BBQ0tFVF9ESVNBQkxFCQkJICAgMHgwMAorI2RlZmluZSBSMV9FWFRFTkRFRF9QQUNLRVRfRU5BQkxFCQkJICAgMHgxMAorCisjZGVmaW5lIFIxX0RBVVNfQUxMX09OCQkJCQkgICAweDAwCisjZGVmaW5lIFIxX0RBVVNfQUxMX09GRgkJCQkJICAgMHgyMAorCisjZGVmaW5lIFIxXzdfQklUU19QTFVTX1BBUklUWQkJCQkgICAweDAwCisjZGVmaW5lIFIxXzhfQklUU19OT19QQVJJVFkJCQkJICAgMHg0MAorCisjZGVmaW5lIFIxX1ZDU19UT19TQ1MJCQkJCSAgIDB4MDAKKyNkZWZpbmUgUjFfTk9fVkNTX1RPX1NDUwkJCQkgICAweDgwCisKKy8qIFJlZ2lzdGVyIFIyIChQYWdlIHJlcXVlc3QgYWRkcmVzcykgKi8KKyNkZWZpbmUgUjJfSU5fUjNfU0VMRUNUX1BBR0VfSFVORFJFRFMJCQkgICAweDAwCisjZGVmaW5lIFIyX0lOX1IzX1NFTEVDVF9QQUdFX1RFTlMJCQkgICAweDAxCisjZGVmaW5lIFIyX0lOX1IzX1NFTEVDVF9QQUdFX1VOSVRTCQkJICAgMHgwMgorI2RlZmluZSBSMl9JTl9SM19TRUxFQ1RfSE9VUlNfVEVOUwkJCSAgIDB4MDMKKyNkZWZpbmUgUjJfSU5fUjNfU0VMRUNUX0hPVVJTX1VOSVRTCQkJICAgMHgwNAorI2RlZmluZSBSMl9JTl9SM19TRUxFQ1RfTUlOVVRFU19URU5TCQkJICAgMHgwNQorI2RlZmluZSBSMl9JTl9SM19TRUxFQ1RfTUlOVVRFU19VTklUUwkJCSAgIDB4MDYKKworI2RlZmluZSBSMl9EQVVfMAkJCQkJICAgMHgwMAorI2RlZmluZSBSMl9EQVVfMQkJCQkJICAgMHgxMAorI2RlZmluZSBSMl9EQVVfMgkJCQkJICAgMHgyMAorI2RlZmluZSBSMl9EQVVfMwkJCQkJICAgMHgzMAorCisjZGVmaW5lIFIyX0JBTktfMAkJCQkJICAgMHgwMAorI2RlZmluZSBSMl9CQU5LIDEJCQkJCSAgIDB4NDAKKworI2RlZmluZSBSMl9IQU1NSU5HX0NIRUNLX09OCQkJCSAgIDB4ODAKKyNkZWZpbmUgUjJfSEFNTUlOR19DSEVDS19PRkYJCQkJICAgMHgwMAorCisvKiBSZWdpc3RlciBSMyAoUGFnZSByZXF1ZXN0IGRhdGEpICovCisjZGVmaW5lIFIzX1BBR0VfSFVORFJFRFNfMAkJCQkgICAweDAwCisjZGVmaW5lIFIzX1BBR0VfSFVORFJFRFNfMQkJCQkgICAweDAxCisjZGVmaW5lIFIzX1BBR0VfSFVORFJFRFNfMgkJCQkgICAweDAyCisjZGVmaW5lIFIzX1BBR0VfSFVORFJFRFNfMwkJCQkgICAweDAzCisjZGVmaW5lIFIzX1BBR0VfSFVORFJFRFNfNAkJCQkgICAweDA0CisjZGVmaW5lIFIzX1BBR0VfSFVORFJFRFNfNQkJCQkgICAweDA1CisjZGVmaW5lIFIzX1BBR0VfSFVORFJFRFNfNgkJCQkgICAweDA2CisjZGVmaW5lIFIzX1BBR0VfSFVORFJFRFNfNwkJCQkgICAweDA3CisKKyNkZWZpbmUgUjNfSE9MRF9QQUdFCQkJCQkgICAweDAwCisjZGVmaW5lIFIzX1VQREFURV9QQUdFCQkJCQkgICAweDA4CisKKyNkZWZpbmUgUjNfUEFHRV9IVU5EUkVEU19ET19OT1RfQ0FSRQkJCSAgIDB4MDAKKyNkZWZpbmUgUjNfUEFHRV9IVU5EUkVEU19ET19DQVJFCQkJICAgMHgxMAorCisjZGVmaW5lIFIzX1BBR0VfVEVOU19ET19OT1RfQ0FSRQkJCSAgIDB4MDAKKyNkZWZpbmUgUjNfUEFHRV9URU5TX0RPX0NBUkUJCQkJICAgMHgxMAorCisjZGVmaW5lIFIzX1BBR0VfVU5JVFNfRE9fTk9UX0NBUkUJCQkgICAweDAwCisjZGVmaW5lIFIzX1BBR0VfVU5JVFNfRE9fQ0FSRQkJCQkgICAweDEwCisKKyNkZWZpbmUgUjNfSE9VUlNfVEVOU19ET19OT1RfQ0FSRQkJCSAgIDB4MDAKKyNkZWZpbmUgUjNfSE9VUlNfVEVOU19ET19DQVJFCQkJCSAgIDB4MTAKKworI2RlZmluZSBSM19IT1VSU19VTklUU19ET19OT1RfQ0FSRQkJCSAgIDB4MDAKKyNkZWZpbmUgUjNfSE9VUlNfVU5JVFNfRE9fQ0FSRQkJCQkgICAweDEwCisKKyNkZWZpbmUgUjNfTUlOVVRFU19URU5TX0RPX05PVF9DQVJFCQkJICAgMHgwMAorI2RlZmluZSBSM19NSU5VVEVTX1RFTlNfRE9fQ0FSRQkJCQkgICAweDEwCisKKyNkZWZpbmUgUjNfTUlOVVRFU19VTklUU19ET19OT1RfQ0FSRQkJCSAgIDB4MDAKKyNkZWZpbmUgUjNfTUlOVVRFU19VTklUU19ET19DQVJFCQkJICAgMHgxMAorCisvKiBSZWdpc3RlciBSNCAoRGlzcGxheSBjaGFwdGVyKSAqLworI2RlZmluZSBSNF9ESVNQTEFZX1BBR0VfMAkJCQkgICAweDAwCisjZGVmaW5lIFI0X0RJU1BMQVlfUEFHRV8xCQkJCSAgIDB4MDEKKyNkZWZpbmUgUjRfRElTUExBWV9QQUdFXzIJCQkJICAgMHgwMgorI2RlZmluZSBSNF9ESVNQTEFZX1BBR0VfMwkJCQkgICAweDAzCisjZGVmaW5lIFI0X0RJU1BMQVlfUEFHRV80CQkJCSAgIDB4MDQKKyNkZWZpbmUgUjRfRElTUExBWV9QQUdFXzUJCQkJICAgMHgwNQorI2RlZmluZSBSNF9ESVNQTEFZX1BBR0VfNgkJCQkgICAweDA2CisjZGVmaW5lIFI0X0RJU1BMQVlfUEFHRV83CQkJCSAgIDB4MDcKKworLyogUmVnaXN0ZXIgUjUgKE5vcm1hbCBkaXNwbGF5IGNvbnRyb2wpICovCisjZGVmaW5lIFI1X1BJQ1RVUkVfSU5TSURFX0JPWElOR19PRkYJCQkgICAweDAwCisjZGVmaW5lIFI1X1BJQ1RVUkVfSU5TSURFX0JPWElOR19PTgkJCSAgIDB4MDEKKworI2RlZmluZSBSNV9QSUNUVVJFX09VVFNJREVfQk9YSU5HX09GRgkJCSAgIDB4MDAKKyNkZWZpbmUgUjVfUElDVFVSRV9PVVRTSURFX0JPWElOR19PTgkJCSAgIDB4MDIKKworI2RlZmluZSBSNV9URVhUX0lOU0lERV9CT1hJTkdfT0ZGCQkJICAgMHgwMAorI2RlZmluZSBSNV9URVhUX0lOU0lERV9CT1hJTkdfT04JCQkgICAweDA0CisKKyNkZWZpbmUgUjVfVEVYVF9PVVRTSURFX0JPWElOR19PRkYJCQkgICAweDAwCisjZGVmaW5lIFI1X1RFWFRfT1VUU0lERV9CT1hJTkdfT04JCQkgICAweDA4CisKKyNkZWZpbmUgUjVfQ09OVFJBU1RfUkVEVUNUSU9OX0lOU0lERV9CT1hJTkdfT0ZGCQkgICAweDAwCisjZGVmaW5lIFI1X0NPTlRSQVNUX1JFRFVDVElPTl9JTlNJREVfQk9YSU5HX09OCQkgICAweDEwCisKKyNkZWZpbmUgUjVfQ09OVFJBU1RfUkVEVUNUSU9OX09VVFNJREVfQk9YSU5HX09GRgkgICAweDAwCisjZGVmaW5lIFI1X0NPTlRSQVNUX1JFRFVDVElPTl9PVVRTSURFX0JPWElOR19PTgkJICAgMHgyMAorCisjZGVmaW5lIFI1X0JBQ0tHUk9VTkRfQ09MT1JfSU5TSURFX0JPWElOR19PRkYJCSAgIDB4MDAKKyNkZWZpbmUgUjVfQkFDS0dST1VORF9DT0xPUl9JTlNJREVfQk9YSU5HX09OCQkgICAweDQwCisKKyNkZWZpbmUgUjVfQkFDS0dST1VORF9DT0xPUl9PVVRTSURFX0JPWElOR19PRkYJCSAgIDB4MDAKKyNkZWZpbmUgUjVfQkFDS0dST1VORF9DT0xPUl9PVVRTSURFX0JPWElOR19PTgkJICAgMHg4MAorCisvKiBSZWdpc3RlciBSNiAoTmV3c2ZsYXNoIGRpc3BsYXkpICovCisjZGVmaW5lIFI2X05FV1NGTEFTSF9QSUNUVVJFX0lOU0lERV9CT1hJTkdfT0ZGCQkgICAweDAwCisjZGVmaW5lIFI2X05FV1NGTEFTSF9QSUNUVVJFX0lOU0lERV9CT1hJTkdfT04JCSAgIDB4MDEKKworI2RlZmluZSBSNl9ORVdTRkxBU0hfUElDVFVSRV9PVVRTSURFX0JPWElOR19PRkYJCSAgIDB4MDAKKyNkZWZpbmUgUjZfTkVXU0ZMQVNIX1BJQ1RVUkVfT1VUU0lERV9CT1hJTkdfT04JCSAgIDB4MDIKKworI2RlZmluZSBSNl9ORVdTRkxBU0hfVEVYVF9JTlNJREVfQk9YSU5HX09GRgkJICAgMHgwMAorI2RlZmluZSBSNl9ORVdTRkxBU0hfVEVYVF9JTlNJREVfQk9YSU5HX09OCQkgICAweDA0CisKKyNkZWZpbmUgUjZfTkVXU0ZMQVNIX1RFWFRfT1VUU0lERV9CT1hJTkdfT0ZGCQkgICAweDAwCisjZGVmaW5lIFI2X05FV1NGTEFTSF9URVhUX09VVFNJREVfQk9YSU5HX09OCQkgICAweDA4CisKKyNkZWZpbmUgUjZfTkVXU0ZMQVNIX0NPTlRSQVNUX1JFRFVDVElPTl9JTlNJREVfQk9YSU5HX09GRiAgMHgwMAorI2RlZmluZSBSNl9ORVdTRkxBU0hfQ09OVFJBU1RfUkVEVUNUSU9OX0lOU0lERV9CT1hJTkdfT04gICAweDEwCisKKyNkZWZpbmUgUjZfTkVXU0ZMQVNIX0NPTlRSQVNUX1JFRFVDVElPTl9PVVRTSURFX0JPWElOR19PRkYgMHgwMAorI2RlZmluZSBSNl9ORVdTRkxBU0hfQ09OVFJBU1RfUkVEVUNUSU9OX09VVFNJREVfQk9YSU5HX09OICAweDIwCisKKyNkZWZpbmUgUjZfTkVXU0ZMQVNIX0JBQ0tHUk9VTkRfQ09MT1JfSU5TSURFX0JPWElOR19PRkYgICAgMHgwMAorI2RlZmluZSBSNl9ORVdTRkxBU0hfQkFDS0dST1VORF9DT0xPUl9JTlNJREVfQk9YSU5HX09OCSAgIDB4NDAKKworI2RlZmluZSBSNl9ORVdTRkxBU0hfQkFDS0dST1VORF9DT0xPUl9PVVRTSURFX0JPWElOR19PRkYgICAweDAwCisjZGVmaW5lIFI2X05FV1NGTEFTSF9CQUNLR1JPVU5EX0NPTE9SX09VVFNJREVfQk9YSU5HX09OICAgIDB4ODAKKworLyogUmVnaXN0ZXIgUjcgKERpc3BsYXkgbW9kZSkgKi8KKyNkZWZpbmUgUjdfQk9YX09GRl9ST1dfMAkJCQkgICAweDAwCisjZGVmaW5lIFI3X0JPWF9PTl9ST1dfMAkJCQkJICAgMHgwMQorCisjZGVmaW5lIFI3X0JPWF9PRkZfUk9XXzFfVE9fMjMJCQkJICAgMHgwMAorI2RlZmluZSBSN19CT1hfT05fUk9XXzFfVE9fMjMJCQkJICAgMHgwMgorCisjZGVmaW5lIFI3X0JPWF9PRkZfUk9XXzI0CQkJCSAgIDB4MDAKKyNkZWZpbmUgUjdfQk9YX09OX1JPV18yNAkJCQkgICAweDA0CisKKyNkZWZpbmUgUjdfU0lOR0xFX0hFSUdIVAkJCQkgICAweDAwCisjZGVmaW5lIFI3X0RPVUJMRV9IRUlHSFQJCQkJICAgMHgwOAorCisjZGVmaW5lIFI3X1RPUF9IQUxGCQkJCQkgICAweDAwCisjZGVmaW5lIFI3X0JPVFRPTV9IQUxGCQkJCQkgICAweDEwCisKKyNkZWZpbmUgUjdfUkVWRUFMX09GRgkJCQkJICAgMHgwMAorI2RlZmluZSBSN19SRVZFQUxfT04JCQkJCSAgIDB4MjAKKworI2RlZmluZSBSN19DVVJTRVJfT0ZGCQkJCQkgICAweDAwCisjZGVmaW5lIFI3X0NVUlNFUl9PTgkJCQkJICAgMHg0MAorCisjZGVmaW5lIFI3X1NUQVRVU19CT1RUT00JCQkJICAgMHgwMAorI2RlZmluZSBSN19TVEFUVVNfVE9QCQkJCQkgICAweDgwCisKKy8qIFJlZ2lzdGVyIFI4IChBY3RpdmUgY2hhcHRlcikgKi8KKyNkZWZpbmUgUjhfQUNUSVZFX0NIQVBURVJfMAkJCQkgICAweDAwCisjZGVmaW5lIFI4X0FDVElWRV9DSEFQVEVSXzEJCQkJICAgMHgwMQorI2RlZmluZSBSOF9BQ1RJVkVfQ0hBUFRFUl8yCQkJCSAgIDB4MDIKKyNkZWZpbmUgUjhfQUNUSVZFX0NIQVBURVJfMwkJCQkgICAweDAzCisjZGVmaW5lIFI4X0FDVElWRV9DSEFQVEVSXzQJCQkJICAgMHgwNAorI2RlZmluZSBSOF9BQ1RJVkVfQ0hBUFRFUl81CQkJCSAgIDB4MDUKKyNkZWZpbmUgUjhfQUNUSVZFX0NIQVBURVJfNgkJCQkgICAweDA2CisjZGVmaW5lIFI4X0FDVElWRV9DSEFQVEVSXzcJCQkJICAgMHgwNworCisjZGVmaW5lIFI4X0NMRUFSX01FTU9SWQkJCQkJICAgMHgwOAorI2RlZmluZSBSOF9ET19OT1RfQ0xFQVJfTUVNT1JZCQkJCSAgIDB4MDAKKworLyogUmVnaXN0ZXIgUjkgKEN1cnNlciByb3cpICovCisjZGVmaW5lIFI5X0NVUlNFUl9ST1dfMAkJCQkJICAgMHgwMAorI2RlZmluZSBSOV9DVVJTRVJfUk9XXzEJCQkJCSAgIDB4MDEKKyNkZWZpbmUgUjlfQ1VSU0VSX1JPV18yCQkJCQkgICAweDAyCisjZGVmaW5lIFI5X0NVUlNFUl9ST1dfMjUJCQkJICAgMHgxOQorCisvKiBSZWdpc3RlciBSMTAgKEN1cnNlciBjb2x1bW4pICovCisjZGVmaW5lIFIxMF9DVVJTRVJfQ09MVU1OXzAJCQkJICAgMHgwMAorI2RlZmluZSBSMTBfQ1VSU0VSX0NPTFVNTl82CQkJCSAgIDB4MDYKKyNkZWZpbmUgUjEwX0NVUlNFUl9DT0xVTU5fOAkJCQkgICAweDA4CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIFJvdyAyNSBjb250cm9sIGRhdGEgaW4gY29sdW1uIDAgdG8gOQkJCQkJICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2RlZmluZSBST1cyNV9DT0xVTU4wX1BBR0VfVU5JVFMJCQkgICAweDBGCisKKyNkZWZpbmUgUk9XMjVfQ09MVU1OMV9QQUdFX1RFTlMJCQkJICAgMHgwRgorCisjZGVmaW5lIFJPVzI1X0NPTFVNTjJfTUlOVVRFU19VTklUUwkJCSAgIDB4MEYKKworI2RlZmluZSBST1cyNV9DT0xVTU4zX01JTlVURVNfVEVOUwkJCSAgIDB4MDcKKyNkZWZpbmUgUk9XMjVfQ09MVU1OM19ERUxFVEVfUEFHRQkJCSAgIDB4MDgKKworI2RlZmluZSBST1cyNV9DT0xVTU40X0hPVVJfVU5JVFMJCQkgICAweDBGCisKKyNkZWZpbmUgUk9XMjVfQ09MVU1ONV9IT1VSX1RFTlMJCQkJICAgMHgwMworI2RlZmluZSBST1cyNV9DT0xVTU41X0lOU0VSVF9IRUFETElORQkJCSAgIDB4MDQKKyNkZWZpbmUgUk9XMjVfQ09MVU1ONV9JTlNFUlRfU1VCVElUTEUJCQkgICAweDA4CisKKyNkZWZpbmUgUk9XMjVfQ09MVU1ONl9TVVBQUkVTU19IRUFERVIJCQkgICAweDAxCisjZGVmaW5lIFJPVzI1X0NPTFVNTjZfVVBEQVRFX1BBR0UJCQkgICAweDAyCisjZGVmaW5lIFJPVzI1X0NPTFVNTjZfSU5URVJSVVBURURfU0VRVUVOQ0UJCSAgIDB4MDQKKyNkZWZpbmUgUk9XMjVfQ09MVU1ONl9TVVBQUkVTU19ESVNQTEFZCQkJICAgMHgwOAorCisjZGVmaW5lIFJPVzI1X0NPTFVNTjdfU0VSSUFMX01PREUJCQkgICAweDAxCisjZGVmaW5lIFJPVzI1X0NPTFVNTjdfQ0hBUkFDVEVSX1NFVAkJCSAgIDB4MEUKKworI2RlZmluZSBST1cyNV9DT0xVTU44X1BBR0VfSFVORFJFRFMJCQkgICAweDA3CisjZGVmaW5lIFJPVzI1X0NPTFVNTjhfUEFHRV9OT1RfRk9VTkQJCQkgICAweDEwCisKKyNkZWZpbmUgUk9XMjVfQ09MVU1OOV9QQUdFX0JFSU5HX0xPT0tFRF9GT1IJCSAgIDB4MjAKKworI2RlZmluZSBST1cyNV9DT0xVTU4wX1RPXzdfSEFNTUlOR19FUlJPUgkJICAgMHgxMAorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBIZWxwZXIgbWFjcm9zIGZvciBleHRyYWN0aW5nIHBhZ2UsIGhvdXIgYW5kIG1pbnV0ZSBkaWdpdHMJCSAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIEJZVEVfUE9TICAwIGlzIGF0IHJvdyAwLCBjb2x1bW4gMCwKKyAgIEJZVEVfUE9TICAxIGlzIGF0IHJvdyAwLCBjb2x1bW4gMSwKKyAgIEJZVEVfUE9TIDQwIGlzIGF0IHJvdyAxLCBjb2x1bW4gMCwgKHdpdGggTlVNX1JPV1NfUEVSX1BBR0UgPSA0MCkKKyAgIEJZVEVfUE9TIDQxIGlzIGF0IHJvdyAxLCBjb2x1bW4gMSwgKHdpdGggTlVNX1JPV1NfUEVSX1BBR0UgPSA0MCksCisgICAuLi4gKi8KKyNkZWZpbmUgUk9XKEJZVEVfUE9TKSAgICAoQllURV9QT1MgLyBOVU1fUk9XU19QRVJfUEFHRSkKKyNkZWZpbmUgQ09MVU1OKEJZVEVfUE9TKSAoQllURV9QT1MgJSBOVU1fUk9XU19QRVJfUEFHRSkKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogSGVscGVyIG1hY3JvcyBmb3IgZXh0cmFjdGluZyBwYWdlLCBob3VyIGFuZCBtaW51dGUgZGlnaXRzCQkgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBNYWNyb3MgZm9yIGV4dHJhY3RpbmcgaHVuZHJlZHMsIHRlbnMgYW5kIHVuaXRzIG9mIGEgcGFnZSBudW1iZXIgd2hpY2gKKyAgIG11c3QgYmUgaW4gdGhlIHJhbmdlIDAgLi4uIDB4Nzk5LgorICAgTm90ZSB0aGF0IHBhZ2UgaXMgY29kZWQgaW4gaGV4YWRlY2ltYWwsIGkuZS4gMHgxMjMgbWVhbnMgcGFnZSAxMjMuCisgICBwYWdlIDB4Li4gbWVhbnMgcGFnZSA4Li4gKi8KKyNkZWZpbmUgSFVORFJFRFNfT0ZfUEFHRShwYWdlKSAoKChwYWdlKSAvIDB4MTAwKSAmIDB4NykKKyNkZWZpbmUgVEVOU19PRl9QQUdFKHBhZ2UpICAgICAoKChwYWdlKSAvIDB4MTApICAmIDB4RikKKyNkZWZpbmUgVU5JVFNfT0ZfUEFHRShwYWdlKSAgICAgKChwYWdlKSAmIDB4RikKKworLyogTWFjcm9zIGZvciBleHRyYWN0aW5nIHRlbnMgYW5kIHVuaXRzIG9mIGEgaG91ciBpbmZvcm1hdGlvbiB3aGljaAorICAgbXVzdCBiZSBpbiB0aGUgcmFuZ2UgMCAuLi4gMHgyNC4KKyAgIE5vdGUgdGhhdCBob3VyIGlzIGNvZGVkIGluIGhleGFkZWNpbWFsLCBpLmUuIDB4MTIgbWVhbnMgMTIgaG91cnMgKi8KKyNkZWZpbmUgVEVOU19PRl9IT1VSKGhvdXIpICAoKGhvdXIpIC8gMHgxMCkKKyNkZWZpbmUgVU5JVFNfT0ZfSE9VUihob3VyKSAoKGhvdXIpICYgMHhGKQorCisvKiBNYWNyb3MgZm9yIGV4dHJhY3RpbmcgdGVucyBhbmQgdW5pdHMgb2YgYSBtaW51dGUgaW5mb3JtYXRpb24gd2hpY2gKKyAgIG11c3QgYmUgaW4gdGhlIHJhbmdlIDAgLi4uIDB4NTkuCisgICBOb3RlIHRoYXQgbWludXRlIGlzIGNvZGVkIGluIGhleGFkZWNpbWFsLCBpLmUuIDB4MTIgbWVhbnMgMTIgbWludXRlcyAqLworI2RlZmluZSBURU5TX09GX01JTlVURShtaW51dGUpICAoKG1pbnV0ZSkgLyAweDEwKQorI2RlZmluZSBVTklUU19PRl9NSU5VVEUobWludXRlKSAoKG1pbnV0ZSkgJiAweEYpCisKKyNkZWZpbmUgSE9VUl9NQVggICAweDIzCisjZGVmaW5lIE1JTlVURV9NQVggMHg1OQorI2RlZmluZSBQQUdFX01BWCAgIDB4OEZGCisKKwogc3RydWN0IHNhYTUyNDZhX2RldmljZQogewogCXU4ICAgICBwZ2J1ZltOVU1fREFVU11bVlRYX1ZJUlRVQUxTSVpFXTsKIAlpbnQgICAgaXNfc2VhcmNoaW5nW05VTV9EQVVTXTsKIAlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50OworCXVuc2lnbmVkIGxvbmcgaW5fdXNlOwogCXN0cnVjdCBtdXRleCBsb2NrOwogfTsKIAogc3RhdGljIHN0cnVjdCB2aWRlb19kZXZpY2Ugc2FhX3RlbXBsYXRlOwkvKiBEZWNsYXJlZCBuZWFyIGJvdHRvbSAqLwogCi0vKiBBZGRyZXNzZXMgdG8gc2NhbiAqLwotc3RhdGljIHVuc2lnbmVkIHNob3J0IG5vcm1hbF9pMmNbXQkgPSB7IEkyQ19BRERSRVNTLCBJMkNfQ0xJRU5UX0VORCB9OwotCi1JMkNfQ0xJRU5UX0lOU01PRDsKLQotc3RhdGljIHN0cnVjdCBpMmNfY2xpZW50IGNsaWVudF90ZW1wbGF0ZTsKLQotc3RhdGljIGludCBzYWE1MjQ2YV9hdHRhY2goc3RydWN0IGkyY19hZGFwdGVyICphZGFwLCBpbnQgYWRkciwgaW50IGtpbmQpCi17Ci0JaW50IHBnYnVmOwotCWludCBlcnI7Ci0Jc3RydWN0IGkyY19jbGllbnQgKmNsaWVudDsKLQlzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2ZDsKLQlzdHJ1Y3Qgc2FhNTI0NmFfZGV2aWNlICp0OwotCi0JcHJpbnRrKEtFUk5fSU5GTyAic2FhNTI0NmE6IHRlbGV0ZXh0IGNoaXAgZm91bmQuXG4iKTsKLQljbGllbnQ9a21hbGxvYyhzaXplb2YoKmNsaWVudCksIEdGUF9LRVJORUwpOwotCWlmKGNsaWVudD09TlVMTCkKLQkJcmV0dXJuIC1FTk9NRU07Ci0JY2xpZW50X3RlbXBsYXRlLmFkYXB0ZXIgPSBhZGFwOwotCWNsaWVudF90ZW1wbGF0ZS5hZGRyID0gYWRkcjsKLQltZW1jcHkoY2xpZW50LCAmY2xpZW50X3RlbXBsYXRlLCBzaXplb2YoKmNsaWVudCkpOwotCXQgPSBremFsbG9jKHNpemVvZigqdCksIEdGUF9LRVJORUwpOwotCWlmKHQ9PU5VTEwpCi0JewotCQlrZnJlZShjbGllbnQpOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9Ci0Jc3RybGNweShjbGllbnQtPm5hbWUsIElGX05BTUUsIEkyQ19OQU1FX1NJWkUpOwotCW11dGV4X2luaXQoJnQtPmxvY2spOwotCi0JLyoKLQkgKglOb3cgY3JlYXRlIGEgdmlkZW80bGludXggZGV2aWNlCi0JICovCi0KLQl2ZCA9IHZpZGVvX2RldmljZV9hbGxvYygpOwotCWlmKHZkPT1OVUxMKQotCXsKLQkJa2ZyZWUodCk7Ci0JCWtmcmVlKGNsaWVudCk7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KLQlpMmNfc2V0X2NsaWVudGRhdGEoY2xpZW50LCB2ZCk7Ci0JbWVtY3B5KHZkLCAmc2FhX3RlbXBsYXRlLCBzaXplb2YoKnZkKSk7Ci0KLQlmb3IgKHBnYnVmID0gMDsgcGdidWYgPCBOVU1fREFVUzsgcGdidWYrKykKLQl7Ci0JCW1lbXNldCh0LT5wZ2J1ZltwZ2J1Zl0sICcgJywgc2l6ZW9mKHQtPnBnYnVmWzBdKSk7Ci0JCXQtPmlzX3NlYXJjaGluZ1twZ2J1Zl0gPSBmYWxzZTsKLQl9Ci0JdmQtPnByaXY9dDsKLQotCi0JLyoKLQkgKglSZWdpc3RlciBpdAotCSAqLwotCi0JaWYoKGVycj12aWRlb19yZWdpc3Rlcl9kZXZpY2UodmQsIFZGTF9UWVBFX1ZUWCwtMSkpPDApCi0JewotCQlrZnJlZSh0KTsKLQkJa2ZyZWUoY2xpZW50KTsKLQkJdmlkZW9fZGV2aWNlX3JlbGVhc2UodmQpOwotCQlyZXR1cm4gZXJyOwotCX0KLQl0LT5jbGllbnQgPSBjbGllbnQ7Ci0JaTJjX2F0dGFjaF9jbGllbnQoY2xpZW50KTsKLQlyZXR1cm4gMDsKLX0KLQotLyoKLSAqCVdlIGRvIG1vc3Qgb2YgdGhlIGhhcmQgd29yayB3aGVuIHdlIGJlY29tZSBhIGRldmljZSBvbiB0aGUgaTJjLgotICovCi1zdGF0aWMgaW50IHNhYTUyNDZhX3Byb2JlKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcCkKLXsKLQlpZiAoYWRhcC0+Y2xhc3MgJiBJMkNfQ0xBU1NfVFZfQU5BTE9HKQotCQlyZXR1cm4gaTJjX3Byb2JlKGFkYXAsICZhZGRyX2RhdGEsIHNhYTUyNDZhX2F0dGFjaCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgc2FhNTI0NmFfZGV0YWNoKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCi17Ci0Jc3RydWN0IHZpZGVvX2RldmljZSAqdmQgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKLQlpMmNfZGV0YWNoX2NsaWVudChjbGllbnQpOwotCXZpZGVvX3VucmVnaXN0ZXJfZGV2aWNlKHZkKTsKLQlrZnJlZSh2ZC0+cHJpdik7Ci0Ja2ZyZWUoY2xpZW50KTsKLQlyZXR1cm4gMDsKLX0KLQogLyoKICAqCUkyQyBpbnRlcmZhY2VzCiAgKi8KIAotc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIGkyY19kcml2ZXJfdmlkZW90ZXh0ID0KLXsKLQkuZHJpdmVyID0gewotCQkubmFtZSAJPSBJRl9OQU1FLAkJLyogbmFtZSAqLwotCX0sCi0JLmlkIAkJPSBJMkNfRFJJVkVSSURfU0FBNTI0OSwgLyogaW4gaTJjLmggKi8KLQkuYXR0YWNoX2FkYXB0ZXIgPSBzYWE1MjQ2YV9wcm9iZSwKLQkuZGV0YWNoX2NsaWVudCAgPSBzYWE1MjQ2YV9kZXRhY2gsCi19OwotCi1zdGF0aWMgc3RydWN0IGkyY19jbGllbnQgY2xpZW50X3RlbXBsYXRlID0gewotCS5kcml2ZXIJCT0gJmkyY19kcml2ZXJfdmlkZW90ZXh0LAotCS5uYW1lCQk9ICIodW5zZXQpIiwKLX07Ci0KIHN0YXRpYyBpbnQgaTJjX3NlbmRidWYoc3RydWN0IHNhYTUyNDZhX2RldmljZSAqdCwgaW50IHJlZywgaW50IGNvdW50LCB1OCAqZGF0YSkKIHsKIAljaGFyIGJ1Zls2NF07CkBAIC01NzksOCArODA3LDggQEAKIHN0YXRpYyBpbnQgZG9fc2FhNTI0NmFfaW9jdGwoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUsCiAJCQkgICAgdW5zaWduZWQgaW50IGNtZCwgdm9pZCAqYXJnKQogewotCXN0cnVjdCB2aWRlb19kZXZpY2UgKnZkID0gdmlkZW9fZGV2ZGF0YShmaWxlKTsKLQlzdHJ1Y3Qgc2FhNTI0NmFfZGV2aWNlICp0PXZkLT5wcml2OworCXN0cnVjdCBzYWE1MjQ2YV9kZXZpY2UgKnQgPSB2aWRlb19kcnZkYXRhKGZpbGUpOworCiAJc3dpdGNoKGNtZCkKIAl7CiAJCWNhc2UgVlRYSU9DR0VUSU5GTzoKQEAgLTcyMCw4ICs5NDgsNyBAQAogc3RhdGljIGludCBzYWE1MjQ2YV9pb2N0bChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSwKIAkJCSB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKIHsKLQlzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2ZCA9IHZpZGVvX2RldmRhdGEoZmlsZSk7Ci0Jc3RydWN0IHNhYTUyNDZhX2RldmljZSAqdCA9IHZkLT5wcml2OworCXN0cnVjdCBzYWE1MjQ2YV9kZXZpY2UgKnQgPSB2aWRlb19kcnZkYXRhKGZpbGUpOwogCWludCBlcnI7CiAKIAljbWQgPSB2dHhfZml4X2NvbW1hbmQoY21kKTsKQEAgLTczMywyMSArOTYwLDE1IEBACiAKIHN0YXRpYyBpbnQgc2FhNTI0NmFfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKLQlzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2ZCA9IHZpZGVvX2RldmRhdGEoZmlsZSk7Ci0Jc3RydWN0IHNhYTUyNDZhX2RldmljZSAqdCA9IHZkLT5wcml2OwotCWludCBlcnI7CisJc3RydWN0IHNhYTUyNDZhX2RldmljZSAqdCA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CiAKLQllcnIgPSB2aWRlb19leGNsdXNpdmVfb3Blbihpbm9kZSxmaWxlKTsKLQlpZiAoZXJyIDwgMCkKLQkJcmV0dXJuIGVycjsKKwlpZiAodC0+Y2xpZW50ID09IE5VTEwpCisJCXJldHVybiAtRU5PREVWOwogCi0JaWYgKHQtPmNsaWVudD09TlVMTCkgewotCQllcnIgPSAtRU5PREVWOwotCQlnb3RvIGZhaWw7Ci0JfQorCWlmICh0ZXN0X2FuZF9zZXRfYml0KDAsICZ0LT5pbl91c2UpKQorCQlyZXR1cm4gLUVCVVNZOwogCiAJaWYgKGkyY19zZW5kZGF0YSh0LCBTQUE1MjQ2QV9SRUdJU1RFUl9SMCwKLQogCQlSMF9TRUxFQ1RfUjExIHwKIAkJUjBfUExMX1RJTUVfQ09OU1RBTlRfTE9ORyB8CiAJCVIwX0VOQUJMRV9uT0REX0VWRU5fT1VUUFVUIHwKQEAgLTc3MywyMSArOTk0LDE1IEBACiAKIAkJQ09NTUFORF9FTkQpKQogCXsKLQkJZXJyID0gLUVJTzsKLQkJZ290byBmYWlsOworCQljbGVhcl9iaXQoMCwgJnQtPmluX3VzZSk7CisJCXJldHVybiAtRUlPOwogCX0KLQogCXJldHVybiAwOwotCi1mYWlsOgotCXZpZGVvX2V4Y2x1c2l2ZV9yZWxlYXNlKGlub2RlLGZpbGUpOwotCXJldHVybiBlcnI7CiB9CiAKIHN0YXRpYyBpbnQgc2FhNTI0NmFfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKLQlzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2ZCA9IHZpZGVvX2RldmRhdGEoZmlsZSk7Ci0Jc3RydWN0IHNhYTUyNDZhX2RldmljZSAqdCA9IHZkLT5wcml2OworCXN0cnVjdCBzYWE1MjQ2YV9kZXZpY2UgKnQgPSB2aWRlb19kcnZkYXRhKGZpbGUpOwogCiAJLyogU3RvcCBhbGwgYWNxdWlzaXRpb24gY2lyY3VpdHMuICovCiAJaTJjX3NlbmRkYXRhKHQsIFNBQTUyNDZBX1JFR0lTVEVSX1IxLApAQCAtODAwLDI2ICsxMDE1LDEwIEBACiAJCVIxX1ZDU19UT19TQ1MsCiAKIAkJQ09NTUFORF9FTkQpOwotCXZpZGVvX2V4Y2x1c2l2ZV9yZWxlYXNlKGlub2RlLGZpbGUpOworCWNsZWFyX2JpdCgwLCAmdC0+aW5fdXNlKTsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBfX2luaXQgaW5pdF9zYWFfNTI0NmEgKHZvaWQpCi17Ci0JcHJpbnRrKEtFUk5fSU5GTwotCQkiU0FBNTI0NkEgKG9yIGNvbXBhdGlibGUpIFRlbGV0ZXh0IGRlY29kZXIgZHJpdmVyIHZlcnNpb24gJWQuJWRcbiIsCi0JCU1BSk9SX1ZFUlNJT04sIE1JTk9SX1ZFUlNJT04pOwotCXJldHVybiBpMmNfYWRkX2RyaXZlcigmaTJjX2RyaXZlcl92aWRlb3RleHQpOwotfQotCi1zdGF0aWMgdm9pZCBfX2V4aXQgY2xlYW51cF9zYWFfNTI0NmEgKHZvaWQpCi17Ci0JaTJjX2RlbF9kcml2ZXIoJmkyY19kcml2ZXJfdmlkZW90ZXh0KTsKLX0KLQotbW9kdWxlX2luaXQoaW5pdF9zYWFfNTI0NmEpOwotbW9kdWxlX2V4aXQoY2xlYW51cF9zYWFfNTI0NmEpOwotCiBzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBzYWFfZm9wcyA9IHsKIAkub3duZXIJID0gVEhJU19NT0RVTEUsCiAJLm9wZW4JID0gc2FhNTI0NmFfb3BlbiwKQEAgLTgzMCw4ICsxMDI5LDc5IEBACiAKIHN0YXRpYyBzdHJ1Y3QgdmlkZW9fZGV2aWNlIHNhYV90ZW1wbGF0ZSA9CiB7Ci0JLm5hbWUJICA9IElGX05BTUUsCisJLm5hbWUJICA9ICJzYWE1MjQ2YSIsCiAJLmZvcHMJICA9ICZzYWFfZm9wcywKIAkucmVsZWFzZSAgPSB2aWRlb19kZXZpY2VfcmVsZWFzZSwKIAkubWlub3IgICAgPSAtMSwKIH07CisKKy8qIEFkZHJlc3NlcyB0byBzY2FuICovCitzdGF0aWMgdW5zaWduZWQgc2hvcnQgbm9ybWFsX2kyY1tdID0geyAweDIyID4+IDEsIEkyQ19DTElFTlRfRU5EIH07CisKK0kyQ19DTElFTlRfSU5TTU9EOworCitzdGF0aWMgaW50IHNhYTUyNDZhX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCisJCQljb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpCit7CisJaW50IHBnYnVmOworCWludCBlcnI7CisJc3RydWN0IHZpZGVvX2RldmljZSAqdmQ7CisJc3RydWN0IHNhYTUyNDZhX2RldmljZSAqdDsKKworCXY0bF9pbmZvKGNsaWVudCwgImNoaXAgZm91bmQgQCAweCV4ICglcylcbiIsCisJCQljbGllbnQtPmFkZHIgPDwgMSwgY2xpZW50LT5hZGFwdGVyLT5uYW1lKTsKKwl2NGxfaW5mbyhjbGllbnQsICJWaWRlb1RleHQgdmVyc2lvbiAlZC4lZFxuIiwKKwkJCU1BSk9SX1ZFUlNJT04sIE1JTk9SX1ZFUlNJT04pOworCXQgPSBremFsbG9jKHNpemVvZigqdCksIEdGUF9LRVJORUwpOworCWlmICh0ID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCW11dGV4X2luaXQoJnQtPmxvY2spOworCisJLyogTm93IGNyZWF0ZSBhIHZpZGVvNGxpbnV4IGRldmljZSAqLworCXZkID0gdmlkZW9fZGV2aWNlX2FsbG9jKCk7CisJaWYgKHZkID09IE5VTEwpIHsKKwkJa2ZyZWUodCk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwlpMmNfc2V0X2NsaWVudGRhdGEoY2xpZW50LCB2ZCk7CisJbWVtY3B5KHZkLCAmc2FhX3RlbXBsYXRlLCBzaXplb2YoKnZkKSk7CisKKwlmb3IgKHBnYnVmID0gMDsgcGdidWYgPCBOVU1fREFVUzsgcGdidWYrKykgeworCQltZW1zZXQodC0+cGdidWZbcGdidWZdLCAnICcsIHNpemVvZih0LT5wZ2J1ZlswXSkpOworCQl0LT5pc19zZWFyY2hpbmdbcGdidWZdID0gZmFsc2U7CisJfQorCXZpZGVvX3NldF9kcnZkYXRhKHZkLCB0KTsKKworCS8qIFJlZ2lzdGVyIGl0ICovCisJZXJyID0gdmlkZW9fcmVnaXN0ZXJfZGV2aWNlKHZkLCBWRkxfVFlQRV9WVFgsIC0xKTsKKwlpZiAoZXJyIDwgMCkgeworCQlrZnJlZSh0KTsKKwkJdmlkZW9fZGV2aWNlX3JlbGVhc2UodmQpOworCQlyZXR1cm4gZXJyOworCX0KKwl0LT5jbGllbnQgPSBjbGllbnQ7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2FhNTI0NmFfcmVtb3ZlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCit7CisJc3RydWN0IHZpZGVvX2RldmljZSAqdmQgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKworCXZpZGVvX3VucmVnaXN0ZXJfZGV2aWNlKHZkKTsKKwlrZnJlZSh2aWRlb19nZXRfZHJ2ZGF0YSh2ZCkpOworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgc2FhNTI0NmFfaWRbXSA9IHsKKwl7ICJzYWE1MjQ2YSIsIDAgfSwKKwl7IH0KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKGkyYywgc2FhNTI0NmFfaWQpOworCitzdGF0aWMgc3RydWN0IHY0bDJfaTJjX2RyaXZlcl9kYXRhIHY0bDJfaTJjX2RhdGEgPSB7CisJLm5hbWUgPSAic2FhNTI0NmEiLAorCS5kcml2ZXJpZCA9IEkyQ19EUklWRVJJRF9TQUE1MjQ5LAorCS5wcm9iZSA9IHNhYTUyNDZhX3Byb2JlLAorCS5yZW1vdmUgPSBzYWE1MjQ2YV9yZW1vdmUsCisJLmlkX3RhYmxlID0gc2FhNTI0NmFfaWQsCit9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE1MjQ2YS5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE1MjQ2YS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NDM5NGMwLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNTI0NmEuaAorKysgL2Rldi9udWxsCkBAIC0xLDM1OSArMCwwIEBACi0vKgotICAgRHJpdmVyIGZvciB0aGUgU0FBNTI0NkEgb3IgU0FBNTI4MSBUZWxldGV4dCAoPVZpZGVvdGV4dCkgZGVjb2RlciBjaGlwcyBmcm9tCi0gICBQaGlsaXBzLgotCi0gICBDb3B5cmlnaHQgKEMpIDIwMDQgTWljaGFlbCBHZW5nIChsaW51eEBNaWNoYWVsR2VuZy5kZSkKLQotICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLQotICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQotICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KLQotICovCi0jaWZuZGVmIF9fU0FBNTI0NkFfSF9fCi0jZGVmaW5lIF9fU0FBNTI0NkFfSF9fCi0KLSNkZWZpbmUgTUFKT1JfVkVSU0lPTiAxCQkvKiBkcml2ZXIgbWFqb3IgdmVyc2lvbiBudW1iZXIgKi8KLSNkZWZpbmUgTUlOT1JfVkVSU0lPTiA4CQkvKiBkcml2ZXIgbWlub3IgdmVyc2lvbiBudW1iZXIgKi8KLQotI2RlZmluZSBJRl9OQU1FICJTQUE1MjQ2QSIKLQotI2RlZmluZSBJMkNfQUREUkVTUyAxNwotCi0vKiBOdW1iZXIgb2YgREFVcyA9IG51bWJlciBvZiBwYWdlcyB0aGF0IGNhbiBiZSBzZWFyY2hlZCBhdCB0aGUgc2FtZSB0aW1lLiAqLwotI2RlZmluZSBOVU1fREFVUyA0Ci0KLSNkZWZpbmUgTlVNX1JPV1NfUEVSX1BBR0UgNDAKLQotLyogZmlyc3QgY29sdW1uIGlzIDAgKG5vdCAxKSAqLwotI2RlZmluZSBQT1NfVElNRV9TVEFSVCAzMgotI2RlZmluZSBQT1NfVElNRV9FTkQgMzkKLQotI2RlZmluZSBQT1NfSEVBREVSX1NUQVJUIDcKLSNkZWZpbmUgUE9TX0hFQURFUl9FTkQgMzEKLQotLyogUmV0dXJucyAndHJ1ZScgaWYgdGhlIHBhcnQgb2YgdGhlIHZpZGVvdGV4dCBwYWdlIGRlc2NyaWJlZCB3aXRoIHJlcSBjb250YWlucwotICAgKGF0IGxlYXN0IHBhcnRzIG9mKSB0aGUgdGltZSBmaWVsZCAqLwotI2RlZmluZSBSRVFfQ09OVEFJTlNfVElNRShwX3JlcSkgXAotCSgocF9yZXEpLT5zdGFydCA8PSBQT1NfVElNRV9FTkQgJiYgXAotCSAocF9yZXEpLT5lbmQgICA+PSBQT1NfVElNRV9TVEFSVCkKLQotLyogUmV0dXJucyAndHJ1ZScgaWYgdGhlIHBhcnQgb2YgdGhlIHZpZGVvdGV4dCBwYWdlIGRlc2NyaWJlZCB3aXRoIHJlcSBjb250YWlucwotICAgKGF0IGxlYXN0IHBhcnRzIG9mKSB0aGUgcGFnZSBoZWFkZXIgKi8KLSNkZWZpbmUgUkVRX0NPTlRBSU5TX0hFQURFUihwX3JlcSkgXAotCSgocF9yZXEpLT5zdGFydCA8PSBQT1NfSEVBREVSX0VORCAmJiBcCi0JIChwX3JlcSktPmVuZCAgID49IFBPU19IRUFERVJfU1RBUlQpCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qIE1vZGUgcmVnaXN0ZXIgbnVtYmVycyBvZiB0aGUgU0FBNTI0NkEJCQkJICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotI2RlZmluZSBTQUE1MjQ2QV9SRUdJU1RFUl9SMCAgICAwCi0jZGVmaW5lIFNBQTUyNDZBX1JFR0lTVEVSX1IxICAgIDEKLSNkZWZpbmUgU0FBNTI0NkFfUkVHSVNURVJfUjIgICAgMgotI2RlZmluZSBTQUE1MjQ2QV9SRUdJU1RFUl9SMyAgICAzCi0jZGVmaW5lIFNBQTUyNDZBX1JFR0lTVEVSX1I0ICAgIDQKLSNkZWZpbmUgU0FBNTI0NkFfUkVHSVNURVJfUjUgICAgNQotI2RlZmluZSBTQUE1MjQ2QV9SRUdJU1RFUl9SNiAgICA2Ci0jZGVmaW5lIFNBQTUyNDZBX1JFR0lTVEVSX1I3ICAgIDcKLSNkZWZpbmUgU0FBNTI0NkFfUkVHSVNURVJfUjggICAgOAotI2RlZmluZSBTQUE1MjQ2QV9SRUdJU1RFUl9SOSAgICA5Ci0jZGVmaW5lIFNBQTUyNDZBX1JFR0lTVEVSX1IxMCAgMTAKLSNkZWZpbmUgU0FBNTI0NkFfUkVHSVNURVJfUjExICAxMQotI2RlZmluZSBTQUE1MjQ2QV9SRUdJU1RFUl9SMTFCIDExCi0KLS8qIFNBQTUyNDZBIG1vZGUgcmVnaXN0ZXJzIG9mdGVuIGF1dG9pbmNyZW1lbnQgdG8gdGhlIG5leHQgcmVnaXN0ZXIuCi0gICBUaGVyZWZvcmUgd2UgdXNlIHZhcmlhYmxlIGFyZ3VtZW50IGxpc3RzLiBUaGUgZm9sbG93aW5nIG1hY3JvIGluZGljYXRlcwotICAgdGhlIGVuZCBvZiBhIGNvbW1hbmQgbGlzdC4gKi8KLSNkZWZpbmUgQ09NTUFORF9FTkQgKC0gMSkKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogQ29udGVudHMgb2YgdGhlIG1vZGUgcmVnaXN0ZXJzIG9mIHRoZSBTQUE1MjQ2QQkJCSAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qIFJlZ2lzdGVyIFIwIChBZHZhbmNlZCBDb250cm9sKSAqLwotI2RlZmluZSBSMF9TRUxFQ1RfUjExCQkJCQkgICAweDAwCi0jZGVmaW5lIFIwX1NFTEVDVF9SMTFCCQkJCQkgICAweDAxCi0KLSNkZWZpbmUgUjBfUExMX1RJTUVfQ09OU1RBTlRfTE9ORwkJCSAgIDB4MDAKLSNkZWZpbmUgUjBfUExMX1RJTUVfQ09OU1RBTlRfU0hPUlQJCQkgICAweDAyCi0KLSNkZWZpbmUgUjBfRU5BQkxFX25PRERfRVZFTl9PVVRQVVQJCQkgICAweDAwCi0jZGVmaW5lIFIwX0RJU0FCTEVfbk9ERF9FVkVOX09VVFBVVAkJCSAgIDB4MDQKLQotI2RlZmluZSBSMF9FTkFCTEVfSERSX1BPTEwJCQkJICAgMHgwMAotI2RlZmluZSBSMF9ESVNBQkxFX0hEUl9QT0xMCQkJCSAgIDB4MTAKLQotI2RlZmluZSBSMF9ET19OT1RfRk9SQ0Vfbk9ERF9FVkVOX0xPV19JRl9QSUNUVVJFX0RJU1BMQVlFRCAweDAwCi0jZGVmaW5lIFIwX0ZPUkNFX25PRERfRVZFTl9MT1dfSUZfUElDVFVSRV9ESVNQTEFZRUQJICAgMHgyMAotCi0jZGVmaW5lIFIwX05PX0ZSRUVfUlVOX1BMTAkJCQkgICAweDAwCi0jZGVmaW5lIFIwX0ZSRUVfUlVOX1BMTAkJCQkJICAgMHg0MAotCi0jZGVmaW5lIFIwX05PX0FVVE9NQVRJQ19GQVNURVhUX1BST01QVAkJCSAgIDB4MDAKLSNkZWZpbmUgUjBfQVVUT01BVElDX0ZBU1RFWFRfUFJPTVBUCQkJICAgMHg4MAotCi0vKiBSZWdpc3RlciBSMSAoTW9kZSkgKi8KLSNkZWZpbmUgUjFfSU5URVJMQUNFRF8zMTJfQU5EX0hBTEZfMzEyX0FORF9IQUxGX0xJTkVTCSAgIDB4MDAKLSNkZWZpbmUgUjFfTk9OX0lOVEVSTEFDRURfMzEyXzMxM19MSU5FUwkJCSAgIDB4MDEKLSNkZWZpbmUgUjFfTk9OX0lOVEVSTEFDRURfMzEyXzMxMl9MSU5FUwkJCSAgIDB4MDIKLSNkZWZpbmUgUjFfRkZCX0xFQURJTkdfRURHRV9JTl9GSVJTVF9CUk9BRF9QVUxTRQkgICAweDAzCi0jZGVmaW5lIFIxX0ZGQl9MRUFESU5HX0VER0VfSU5fU0VDT05EX0JST0FEX1BVTFNFCSAgIDB4MDcKLQotI2RlZmluZSBSMV9ERVcJCQkJCQkgICAweDAwCi0jZGVmaW5lIFIxX0ZVTExfRklFTEQJCQkJCSAgIDB4MDgKLQotI2RlZmluZSBSMV9FWFRFTkRFRF9QQUNLRVRfRElTQUJMRQkJCSAgIDB4MDAKLSNkZWZpbmUgUjFfRVhURU5ERURfUEFDS0VUX0VOQUJMRQkJCSAgIDB4MTAKLQotI2RlZmluZSBSMV9EQVVTX0FMTF9PTgkJCQkJICAgMHgwMAotI2RlZmluZSBSMV9EQVVTX0FMTF9PRkYJCQkJCSAgIDB4MjAKLQotI2RlZmluZSBSMV83X0JJVFNfUExVU19QQVJJVFkJCQkJICAgMHgwMAotI2RlZmluZSBSMV84X0JJVFNfTk9fUEFSSVRZCQkJCSAgIDB4NDAKLQotI2RlZmluZSBSMV9WQ1NfVE9fU0NTCQkJCQkgICAweDAwCi0jZGVmaW5lIFIxX05PX1ZDU19UT19TQ1MJCQkJICAgMHg4MAotCi0vKiBSZWdpc3RlciBSMiAoUGFnZSByZXF1ZXN0IGFkZHJlc3MpICovCi0jZGVmaW5lIFIyX0lOX1IzX1NFTEVDVF9QQUdFX0hVTkRSRURTCQkJICAgMHgwMAotI2RlZmluZSBSMl9JTl9SM19TRUxFQ1RfUEFHRV9URU5TCQkJICAgMHgwMQotI2RlZmluZSBSMl9JTl9SM19TRUxFQ1RfUEFHRV9VTklUUwkJCSAgIDB4MDIKLSNkZWZpbmUgUjJfSU5fUjNfU0VMRUNUX0hPVVJTX1RFTlMJCQkgICAweDAzCi0jZGVmaW5lIFIyX0lOX1IzX1NFTEVDVF9IT1VSU19VTklUUwkJCSAgIDB4MDQKLSNkZWZpbmUgUjJfSU5fUjNfU0VMRUNUX01JTlVURVNfVEVOUwkJCSAgIDB4MDUKLSNkZWZpbmUgUjJfSU5fUjNfU0VMRUNUX01JTlVURVNfVU5JVFMJCQkgICAweDA2Ci0KLSNkZWZpbmUgUjJfREFVXzAJCQkJCSAgIDB4MDAKLSNkZWZpbmUgUjJfREFVXzEJCQkJCSAgIDB4MTAKLSNkZWZpbmUgUjJfREFVXzIJCQkJCSAgIDB4MjAKLSNkZWZpbmUgUjJfREFVXzMJCQkJCSAgIDB4MzAKLQotI2RlZmluZSBSMl9CQU5LXzAJCQkJCSAgIDB4MDAKLSNkZWZpbmUgUjJfQkFOSyAxCQkJCQkgICAweDQwCi0KLSNkZWZpbmUgUjJfSEFNTUlOR19DSEVDS19PTgkJCQkgICAweDgwCi0jZGVmaW5lIFIyX0hBTU1JTkdfQ0hFQ0tfT0ZGCQkJCSAgIDB4MDAKLQotLyogUmVnaXN0ZXIgUjMgKFBhZ2UgcmVxdWVzdCBkYXRhKSAqLwotI2RlZmluZSBSM19QQUdFX0hVTkRSRURTXzAJCQkJICAgMHgwMAotI2RlZmluZSBSM19QQUdFX0hVTkRSRURTXzEJCQkJICAgMHgwMQotI2RlZmluZSBSM19QQUdFX0hVTkRSRURTXzIJCQkJICAgMHgwMgotI2RlZmluZSBSM19QQUdFX0hVTkRSRURTXzMJCQkJICAgMHgwMwotI2RlZmluZSBSM19QQUdFX0hVTkRSRURTXzQJCQkJICAgMHgwNAotI2RlZmluZSBSM19QQUdFX0hVTkRSRURTXzUJCQkJICAgMHgwNQotI2RlZmluZSBSM19QQUdFX0hVTkRSRURTXzYJCQkJICAgMHgwNgotI2RlZmluZSBSM19QQUdFX0hVTkRSRURTXzcJCQkJICAgMHgwNwotCi0jZGVmaW5lIFIzX0hPTERfUEFHRQkJCQkJICAgMHgwMAotI2RlZmluZSBSM19VUERBVEVfUEFHRQkJCQkJICAgMHgwOAotCi0jZGVmaW5lIFIzX1BBR0VfSFVORFJFRFNfRE9fTk9UX0NBUkUJCQkgICAweDAwCi0jZGVmaW5lIFIzX1BBR0VfSFVORFJFRFNfRE9fQ0FSRQkJCSAgIDB4MTAKLQotI2RlZmluZSBSM19QQUdFX1RFTlNfRE9fTk9UX0NBUkUJCQkgICAweDAwCi0jZGVmaW5lIFIzX1BBR0VfVEVOU19ET19DQVJFCQkJCSAgIDB4MTAKLQotI2RlZmluZSBSM19QQUdFX1VOSVRTX0RPX05PVF9DQVJFCQkJICAgMHgwMAotI2RlZmluZSBSM19QQUdFX1VOSVRTX0RPX0NBUkUJCQkJICAgMHgxMAotCi0jZGVmaW5lIFIzX0hPVVJTX1RFTlNfRE9fTk9UX0NBUkUJCQkgICAweDAwCi0jZGVmaW5lIFIzX0hPVVJTX1RFTlNfRE9fQ0FSRQkJCQkgICAweDEwCi0KLSNkZWZpbmUgUjNfSE9VUlNfVU5JVFNfRE9fTk9UX0NBUkUJCQkgICAweDAwCi0jZGVmaW5lIFIzX0hPVVJTX1VOSVRTX0RPX0NBUkUJCQkJICAgMHgxMAotCi0jZGVmaW5lIFIzX01JTlVURVNfVEVOU19ET19OT1RfQ0FSRQkJCSAgIDB4MDAKLSNkZWZpbmUgUjNfTUlOVVRFU19URU5TX0RPX0NBUkUJCQkJICAgMHgxMAotCi0jZGVmaW5lIFIzX01JTlVURVNfVU5JVFNfRE9fTk9UX0NBUkUJCQkgICAweDAwCi0jZGVmaW5lIFIzX01JTlVURVNfVU5JVFNfRE9fQ0FSRQkJCSAgIDB4MTAKLQotLyogUmVnaXN0ZXIgUjQgKERpc3BsYXkgY2hhcHRlcikgKi8KLSNkZWZpbmUgUjRfRElTUExBWV9QQUdFXzAJCQkJICAgMHgwMAotI2RlZmluZSBSNF9ESVNQTEFZX1BBR0VfMQkJCQkgICAweDAxCi0jZGVmaW5lIFI0X0RJU1BMQVlfUEFHRV8yCQkJCSAgIDB4MDIKLSNkZWZpbmUgUjRfRElTUExBWV9QQUdFXzMJCQkJICAgMHgwMwotI2RlZmluZSBSNF9ESVNQTEFZX1BBR0VfNAkJCQkgICAweDA0Ci0jZGVmaW5lIFI0X0RJU1BMQVlfUEFHRV81CQkJCSAgIDB4MDUKLSNkZWZpbmUgUjRfRElTUExBWV9QQUdFXzYJCQkJICAgMHgwNgotI2RlZmluZSBSNF9ESVNQTEFZX1BBR0VfNwkJCQkgICAweDA3Ci0KLS8qIFJlZ2lzdGVyIFI1IChOb3JtYWwgZGlzcGxheSBjb250cm9sKSAqLwotI2RlZmluZSBSNV9QSUNUVVJFX0lOU0lERV9CT1hJTkdfT0ZGCQkJICAgMHgwMAotI2RlZmluZSBSNV9QSUNUVVJFX0lOU0lERV9CT1hJTkdfT04JCQkgICAweDAxCi0KLSNkZWZpbmUgUjVfUElDVFVSRV9PVVRTSURFX0JPWElOR19PRkYJCQkgICAweDAwCi0jZGVmaW5lIFI1X1BJQ1RVUkVfT1VUU0lERV9CT1hJTkdfT04JCQkgICAweDAyCi0KLSNkZWZpbmUgUjVfVEVYVF9JTlNJREVfQk9YSU5HX09GRgkJCSAgIDB4MDAKLSNkZWZpbmUgUjVfVEVYVF9JTlNJREVfQk9YSU5HX09OCQkJICAgMHgwNAotCi0jZGVmaW5lIFI1X1RFWFRfT1VUU0lERV9CT1hJTkdfT0ZGCQkJICAgMHgwMAotI2RlZmluZSBSNV9URVhUX09VVFNJREVfQk9YSU5HX09OCQkJICAgMHgwOAotCi0jZGVmaW5lIFI1X0NPTlRSQVNUX1JFRFVDVElPTl9JTlNJREVfQk9YSU5HX09GRgkJICAgMHgwMAotI2RlZmluZSBSNV9DT05UUkFTVF9SRURVQ1RJT05fSU5TSURFX0JPWElOR19PTgkJICAgMHgxMAotCi0jZGVmaW5lIFI1X0NPTlRSQVNUX1JFRFVDVElPTl9PVVRTSURFX0JPWElOR19PRkYJICAgMHgwMAotI2RlZmluZSBSNV9DT05UUkFTVF9SRURVQ1RJT05fT1VUU0lERV9CT1hJTkdfT04JCSAgIDB4MjAKLQotI2RlZmluZSBSNV9CQUNLR1JPVU5EX0NPTE9SX0lOU0lERV9CT1hJTkdfT0ZGCQkgICAweDAwCi0jZGVmaW5lIFI1X0JBQ0tHUk9VTkRfQ09MT1JfSU5TSURFX0JPWElOR19PTgkJICAgMHg0MAotCi0jZGVmaW5lIFI1X0JBQ0tHUk9VTkRfQ09MT1JfT1VUU0lERV9CT1hJTkdfT0ZGCQkgICAweDAwCi0jZGVmaW5lIFI1X0JBQ0tHUk9VTkRfQ09MT1JfT1VUU0lERV9CT1hJTkdfT04JCSAgIDB4ODAKLQotLyogUmVnaXN0ZXIgUjYgKE5ld3NmbGFzaCBkaXNwbGF5KSAqLwotI2RlZmluZSBSNl9ORVdTRkxBU0hfUElDVFVSRV9JTlNJREVfQk9YSU5HX09GRgkJICAgMHgwMAotI2RlZmluZSBSNl9ORVdTRkxBU0hfUElDVFVSRV9JTlNJREVfQk9YSU5HX09OCQkgICAweDAxCi0KLSNkZWZpbmUgUjZfTkVXU0ZMQVNIX1BJQ1RVUkVfT1VUU0lERV9CT1hJTkdfT0ZGCQkgICAweDAwCi0jZGVmaW5lIFI2X05FV1NGTEFTSF9QSUNUVVJFX09VVFNJREVfQk9YSU5HX09OCQkgICAweDAyCi0KLSNkZWZpbmUgUjZfTkVXU0ZMQVNIX1RFWFRfSU5TSURFX0JPWElOR19PRkYJCSAgIDB4MDAKLSNkZWZpbmUgUjZfTkVXU0ZMQVNIX1RFWFRfSU5TSURFX0JPWElOR19PTgkJICAgMHgwNAotCi0jZGVmaW5lIFI2X05FV1NGTEFTSF9URVhUX09VVFNJREVfQk9YSU5HX09GRgkJICAgMHgwMAotI2RlZmluZSBSNl9ORVdTRkxBU0hfVEVYVF9PVVRTSURFX0JPWElOR19PTgkJICAgMHgwOAotCi0jZGVmaW5lIFI2X05FV1NGTEFTSF9DT05UUkFTVF9SRURVQ1RJT05fSU5TSURFX0JPWElOR19PRkYgIDB4MDAKLSNkZWZpbmUgUjZfTkVXU0ZMQVNIX0NPTlRSQVNUX1JFRFVDVElPTl9JTlNJREVfQk9YSU5HX09OICAgMHgxMAotCi0jZGVmaW5lIFI2X05FV1NGTEFTSF9DT05UUkFTVF9SRURVQ1RJT05fT1VUU0lERV9CT1hJTkdfT0ZGIDB4MDAKLSNkZWZpbmUgUjZfTkVXU0ZMQVNIX0NPTlRSQVNUX1JFRFVDVElPTl9PVVRTSURFX0JPWElOR19PTiAgMHgyMAotCi0jZGVmaW5lIFI2X05FV1NGTEFTSF9CQUNLR1JPVU5EX0NPTE9SX0lOU0lERV9CT1hJTkdfT0ZGICAgIDB4MDAKLSNkZWZpbmUgUjZfTkVXU0ZMQVNIX0JBQ0tHUk9VTkRfQ09MT1JfSU5TSURFX0JPWElOR19PTgkgICAweDQwCi0KLSNkZWZpbmUgUjZfTkVXU0ZMQVNIX0JBQ0tHUk9VTkRfQ09MT1JfT1VUU0lERV9CT1hJTkdfT0ZGICAgMHgwMAotI2RlZmluZSBSNl9ORVdTRkxBU0hfQkFDS0dST1VORF9DT0xPUl9PVVRTSURFX0JPWElOR19PTiAgICAweDgwCi0KLS8qIFJlZ2lzdGVyIFI3IChEaXNwbGF5IG1vZGUpICovCi0jZGVmaW5lIFI3X0JPWF9PRkZfUk9XXzAJCQkJICAgMHgwMAotI2RlZmluZSBSN19CT1hfT05fUk9XXzAJCQkJCSAgIDB4MDEKLQotI2RlZmluZSBSN19CT1hfT0ZGX1JPV18xX1RPXzIzCQkJCSAgIDB4MDAKLSNkZWZpbmUgUjdfQk9YX09OX1JPV18xX1RPXzIzCQkJCSAgIDB4MDIKLQotI2RlZmluZSBSN19CT1hfT0ZGX1JPV18yNAkJCQkgICAweDAwCi0jZGVmaW5lIFI3X0JPWF9PTl9ST1dfMjQJCQkJICAgMHgwNAotCi0jZGVmaW5lIFI3X1NJTkdMRV9IRUlHSFQJCQkJICAgMHgwMAotI2RlZmluZSBSN19ET1VCTEVfSEVJR0hUCQkJCSAgIDB4MDgKLQotI2RlZmluZSBSN19UT1BfSEFMRgkJCQkJICAgMHgwMAotI2RlZmluZSBSN19CT1RUT01fSEFMRgkJCQkJICAgMHgxMAotCi0jZGVmaW5lIFI3X1JFVkVBTF9PRkYJCQkJCSAgIDB4MDAKLSNkZWZpbmUgUjdfUkVWRUFMX09OCQkJCQkgICAweDIwCi0KLSNkZWZpbmUgUjdfQ1VSU0VSX09GRgkJCQkJICAgMHgwMAotI2RlZmluZSBSN19DVVJTRVJfT04JCQkJCSAgIDB4NDAKLQotI2RlZmluZSBSN19TVEFUVVNfQk9UVE9NCQkJCSAgIDB4MDAKLSNkZWZpbmUgUjdfU1RBVFVTX1RPUAkJCQkJICAgMHg4MAotCi0vKiBSZWdpc3RlciBSOCAoQWN0aXZlIGNoYXB0ZXIpICovCi0jZGVmaW5lIFI4X0FDVElWRV9DSEFQVEVSXzAJCQkJICAgMHgwMAotI2RlZmluZSBSOF9BQ1RJVkVfQ0hBUFRFUl8xCQkJCSAgIDB4MDEKLSNkZWZpbmUgUjhfQUNUSVZFX0NIQVBURVJfMgkJCQkgICAweDAyCi0jZGVmaW5lIFI4X0FDVElWRV9DSEFQVEVSXzMJCQkJICAgMHgwMwotI2RlZmluZSBSOF9BQ1RJVkVfQ0hBUFRFUl80CQkJCSAgIDB4MDQKLSNkZWZpbmUgUjhfQUNUSVZFX0NIQVBURVJfNQkJCQkgICAweDA1Ci0jZGVmaW5lIFI4X0FDVElWRV9DSEFQVEVSXzYJCQkJICAgMHgwNgotI2RlZmluZSBSOF9BQ1RJVkVfQ0hBUFRFUl83CQkJCSAgIDB4MDcKLQotI2RlZmluZSBSOF9DTEVBUl9NRU1PUlkJCQkJCSAgIDB4MDgKLSNkZWZpbmUgUjhfRE9fTk9UX0NMRUFSX01FTU9SWQkJCQkgICAweDAwCi0KLS8qIFJlZ2lzdGVyIFI5IChDdXJzZXIgcm93KSAqLwotI2RlZmluZSBSOV9DVVJTRVJfUk9XXzAJCQkJCSAgIDB4MDAKLSNkZWZpbmUgUjlfQ1VSU0VSX1JPV18xCQkJCQkgICAweDAxCi0jZGVmaW5lIFI5X0NVUlNFUl9ST1dfMgkJCQkJICAgMHgwMgotI2RlZmluZSBSOV9DVVJTRVJfUk9XXzI1CQkJCSAgIDB4MTkKLQotLyogUmVnaXN0ZXIgUjEwIChDdXJzZXIgY29sdW1uKSAqLwotI2RlZmluZSBSMTBfQ1VSU0VSX0NPTFVNTl8wCQkJCSAgIDB4MDAKLSNkZWZpbmUgUjEwX0NVUlNFUl9DT0xVTU5fNgkJCQkgICAweDA2Ci0jZGVmaW5lIFIxMF9DVVJTRVJfQ09MVU1OXzgJCQkJICAgMHgwOAotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiBSb3cgMjUgY29udHJvbCBkYXRhIGluIGNvbHVtbiAwIHRvIDkJCQkJCSAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSNkZWZpbmUgUk9XMjVfQ09MVU1OMF9QQUdFX1VOSVRTCQkJICAgMHgwRgotCi0jZGVmaW5lIFJPVzI1X0NPTFVNTjFfUEFHRV9URU5TCQkJCSAgIDB4MEYKLQotI2RlZmluZSBST1cyNV9DT0xVTU4yX01JTlVURVNfVU5JVFMJCQkgICAweDBGCi0KLSNkZWZpbmUgUk9XMjVfQ09MVU1OM19NSU5VVEVTX1RFTlMJCQkgICAweDA3Ci0jZGVmaW5lIFJPVzI1X0NPTFVNTjNfREVMRVRFX1BBR0UJCQkgICAweDA4Ci0KLSNkZWZpbmUgUk9XMjVfQ09MVU1ONF9IT1VSX1VOSVRTCQkJICAgMHgwRgotCi0jZGVmaW5lIFJPVzI1X0NPTFVNTjVfSE9VUl9URU5TCQkJCSAgIDB4MDMKLSNkZWZpbmUgUk9XMjVfQ09MVU1ONV9JTlNFUlRfSEVBRExJTkUJCQkgICAweDA0Ci0jZGVmaW5lIFJPVzI1X0NPTFVNTjVfSU5TRVJUX1NVQlRJVExFCQkJICAgMHgwOAotCi0jZGVmaW5lIFJPVzI1X0NPTFVNTjZfU1VQUFJFU1NfSEVBREVSCQkJICAgMHgwMQotI2RlZmluZSBST1cyNV9DT0xVTU42X1VQREFURV9QQUdFCQkJICAgMHgwMgotI2RlZmluZSBST1cyNV9DT0xVTU42X0lOVEVSUlVQVEVEX1NFUVVFTkNFCQkgICAweDA0Ci0jZGVmaW5lIFJPVzI1X0NPTFVNTjZfU1VQUFJFU1NfRElTUExBWQkJCSAgIDB4MDgKLQotI2RlZmluZSBST1cyNV9DT0xVTU43X1NFUklBTF9NT0RFCQkJICAgMHgwMQotI2RlZmluZSBST1cyNV9DT0xVTU43X0NIQVJBQ1RFUl9TRVQJCQkgICAweDBFCi0KLSNkZWZpbmUgUk9XMjVfQ09MVU1OOF9QQUdFX0hVTkRSRURTCQkJICAgMHgwNwotI2RlZmluZSBST1cyNV9DT0xVTU44X1BBR0VfTk9UX0ZPVU5ECQkJICAgMHgxMAotCi0jZGVmaW5lIFJPVzI1X0NPTFVNTjlfUEFHRV9CRUlOR19MT09LRURfRk9SCQkgICAweDIwCi0KLSNkZWZpbmUgUk9XMjVfQ09MVU1OMF9UT183X0hBTU1JTkdfRVJST1IJCSAgIDB4MTAKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogSGVscGVyIG1hY3JvcyBmb3IgZXh0cmFjdGluZyBwYWdlLCBob3VyIGFuZCBtaW51dGUgZGlnaXRzCQkgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiBCWVRFX1BPUyAgMCBpcyBhdCByb3cgMCwgY29sdW1uIDAsCi0gICBCWVRFX1BPUyAgMSBpcyBhdCByb3cgMCwgY29sdW1uIDEsCi0gICBCWVRFX1BPUyA0MCBpcyBhdCByb3cgMSwgY29sdW1uIDAsICh3aXRoIE5VTV9ST1dTX1BFUl9QQUdFID0gNDApCi0gICBCWVRFX1BPUyA0MSBpcyBhdCByb3cgMSwgY29sdW1uIDEsICh3aXRoIE5VTV9ST1dTX1BFUl9QQUdFID0gNDApLAotICAgLi4uICovCi0jZGVmaW5lIFJPVyhCWVRFX1BPUykgICAgKEJZVEVfUE9TIC8gTlVNX1JPV1NfUEVSX1BBR0UpCi0jZGVmaW5lIENPTFVNTihCWVRFX1BPUykgKEJZVEVfUE9TICUgTlVNX1JPV1NfUEVSX1BBR0UpCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qIEhlbHBlciBtYWNyb3MgZm9yIGV4dHJhY3RpbmcgcGFnZSwgaG91ciBhbmQgbWludXRlIGRpZ2l0cwkJICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogTWFjcm9zIGZvciBleHRyYWN0aW5nIGh1bmRyZWRzLCB0ZW5zIGFuZCB1bml0cyBvZiBhIHBhZ2UgbnVtYmVyIHdoaWNoCi0gICBtdXN0IGJlIGluIHRoZSByYW5nZSAwIC4uLiAweDc5OS4KLSAgIE5vdGUgdGhhdCBwYWdlIGlzIGNvZGVkIGluIGhleGFkZWNpbWFsLCBpLmUuIDB4MTIzIG1lYW5zIHBhZ2UgMTIzLgotICAgcGFnZSAweC4uIG1lYW5zIHBhZ2UgOC4uICovCi0jZGVmaW5lIEhVTkRSRURTX09GX1BBR0UocGFnZSkgKCgocGFnZSkgLyAweDEwMCkgJiAweDcpCi0jZGVmaW5lIFRFTlNfT0ZfUEFHRShwYWdlKSAgICAgKCgocGFnZSkgLyAweDEwKSAgJiAweEYpCi0jZGVmaW5lIFVOSVRTX09GX1BBR0UocGFnZSkgICAgICgocGFnZSkgJiAweEYpCi0KLS8qIE1hY3JvcyBmb3IgZXh0cmFjdGluZyB0ZW5zIGFuZCB1bml0cyBvZiBhIGhvdXIgaW5mb3JtYXRpb24gd2hpY2gKLSAgIG11c3QgYmUgaW4gdGhlIHJhbmdlIDAgLi4uIDB4MjQuCi0gICBOb3RlIHRoYXQgaG91ciBpcyBjb2RlZCBpbiBoZXhhZGVjaW1hbCwgaS5lLiAweDEyIG1lYW5zIDEyIGhvdXJzICovCi0jZGVmaW5lIFRFTlNfT0ZfSE9VUihob3VyKSAgKChob3VyKSAvIDB4MTApCi0jZGVmaW5lIFVOSVRTX09GX0hPVVIoaG91cikgKChob3VyKSAmIDB4RikKLQotLyogTWFjcm9zIGZvciBleHRyYWN0aW5nIHRlbnMgYW5kIHVuaXRzIG9mIGEgbWludXRlIGluZm9ybWF0aW9uIHdoaWNoCi0gICBtdXN0IGJlIGluIHRoZSByYW5nZSAwIC4uLiAweDU5LgotICAgTm90ZSB0aGF0IG1pbnV0ZSBpcyBjb2RlZCBpbiBoZXhhZGVjaW1hbCwgaS5lLiAweDEyIG1lYW5zIDEyIG1pbnV0ZXMgKi8KLSNkZWZpbmUgVEVOU19PRl9NSU5VVEUobWludXRlKSAgKChtaW51dGUpIC8gMHgxMCkKLSNkZWZpbmUgVU5JVFNfT0ZfTUlOVVRFKG1pbnV0ZSkgKChtaW51dGUpICYgMHhGKQotCi0jZGVmaW5lIEhPVVJfTUFYICAgMHgyMwotI2RlZmluZSBNSU5VVEVfTUFYIDB4NTkKLSNkZWZpbmUgUEFHRV9NQVggICAweDhGRgotCi0jZW5kaWYgIC8qIF9fU0FBNTI0NkFfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTUyNDkuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNTI0OS5jCmluZGV4IDBkNjM5NzMuLjNiYjk1OWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNTI0OS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNTI0OS5jCkBAIC0xNSw4ICsxNSw2IEBACiAgKgogICoJQ29weXJpZ2h0IChjKSAxOTk4IFJpY2hhcmQgR3VlbnRoZXIgPHJpY2hhcmQuZ3VlbnRoZXJAc3R1ZGVudC51bmktdHVlYmluZ2VuLmRlPgogICoKLSAqICRJZDogc2FhNTI0OS5jLHYgMS4xIDE5OTgvMDMvMzAgMjI6MjM6MjMgYWxhbiBFeHAgJAotICoKICAqCURlcml2ZWQgRnJvbQogICoKICAqIHZ0eC5jOgpAQCAtNDUsMzMgKzQzLDI4IEBACiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+Ci0jaW5jbHVkZSA8bGludXgvZXJybm8uaD4KLSNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgotI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8c3RkYXJnLmg+CiAjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvdmlkZW90ZXh0Lmg+CiAjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYuaD4KICNpbmNsdWRlIDxtZWRpYS92NGwyLWNvbW1vbi5oPgogI2luY2x1ZGUgPG1lZGlhL3Y0bDItaW9jdGwuaD4KLSNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItaTJjLWRydi1sZWdhY3kuaD4KIAotCi0jaW5jbHVkZSA8YXNtL2lvLmg+Ci0jaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KK01PRFVMRV9BVVRIT1IoIk1pY2hhZWwgR2VuZyA8bGludXhATWljaGFlbEdlbmcuZGU+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIlBoaWxpcHMgU0FBNTI0OSBUZWxldGV4dCBkZWNvZGVyIGRyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogCiAjZGVmaW5lIFZUWF9WRVJfTUFKIDEKICNkZWZpbmUgVlRYX1ZFUl9NSU4gOAogCiAKLQogI2RlZmluZSBOVU1fREFVUyA0CiAjZGVmaW5lIE5VTV9CVUZTIDgKLSNkZWZpbmUgSUZfTkFNRSAiU0FBNTI0OSIKIAogc3RhdGljIGNvbnN0IGludCBkaXNwX21vZGVzWzhdWzNdID0KIHsKQEAgLTEwOSw2ICsxMDIsNyBAQAogCWludCBkaXNwX21vZGU7CiAJaW50IHZpcnR1YWxfbW9kZTsKIAlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50OworCXVuc2lnbmVkIGxvbmcgaW5fdXNlOwogCXN0cnVjdCBtdXRleCBsb2NrOwogfTsKIApAQCAtMTIzLDEyNSArMTE3LDggQEAKIAogI2RlZmluZSBWVFhfREVWX01JTk9SIDAKIAotLyogR2VuZXJhbCBkZWZpbmVzIGFuZCBkZWJ1Z2dpbmcgc3VwcG9ydCAqLwotCi0jZGVmaW5lIFJFU0NIRUQgZG8geyBjb25kX3Jlc2NoZWQoKTsgfSB3aGlsZSgwKQotCiBzdGF0aWMgc3RydWN0IHZpZGVvX2RldmljZSBzYWFfdGVtcGxhdGU7CS8qIERlY2xhcmVkIG5lYXIgYm90dG9tICovCiAKLS8qIEFkZHJlc3NlcyB0byBzY2FuICovCi1zdGF0aWMgdW5zaWduZWQgc2hvcnQgbm9ybWFsX2kyY1tdID0gezM0Pj4xLEkyQ19DTElFTlRfRU5EfTsKLQotSTJDX0NMSUVOVF9JTlNNT0Q7Ci0KLXN0YXRpYyBzdHJ1Y3QgaTJjX2NsaWVudCBjbGllbnRfdGVtcGxhdGU7Ci0KLXN0YXRpYyBpbnQgc2FhNTI0OV9hdHRhY2goc3RydWN0IGkyY19hZGFwdGVyICphZGFwLCBpbnQgYWRkciwgaW50IGtpbmQpCi17Ci0JaW50IHBnYnVmOwotCWludCBlcnI7Ci0Jc3RydWN0IGkyY19jbGllbnQgKmNsaWVudDsKLQlzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2ZDsKLQlzdHJ1Y3Qgc2FhNTI0OV9kZXZpY2UgKnQ7Ci0KLQlwcmludGsoS0VSTl9JTkZPICJzYWE1MjQ5OiB0ZWxldGV4dCBjaGlwIGZvdW5kLlxuIik7Ci0JY2xpZW50PWttYWxsb2Moc2l6ZW9mKCpjbGllbnQpLCBHRlBfS0VSTkVMKTsKLQlpZihjbGllbnQ9PU5VTEwpCi0JCXJldHVybiAtRU5PTUVNOwotCWNsaWVudF90ZW1wbGF0ZS5hZGFwdGVyID0gYWRhcDsKLQljbGllbnRfdGVtcGxhdGUuYWRkciA9IGFkZHI7Ci0JbWVtY3B5KGNsaWVudCwgJmNsaWVudF90ZW1wbGF0ZSwgc2l6ZW9mKCpjbGllbnQpKTsKLQl0ID0ga3phbGxvYyhzaXplb2YoKnQpLCBHRlBfS0VSTkVMKTsKLQlpZih0PT1OVUxMKQotCXsKLQkJa2ZyZWUoY2xpZW50KTsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCXN0cmxjcHkoY2xpZW50LT5uYW1lLCBJRl9OQU1FLCBJMkNfTkFNRV9TSVpFKTsKLQltdXRleF9pbml0KCZ0LT5sb2NrKTsKLQotCS8qCi0JICoJTm93IGNyZWF0ZSBhIHZpZGVvNGxpbnV4IGRldmljZQotCSAqLwotCi0JdmQgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgdmlkZW9fZGV2aWNlKSwgR0ZQX0tFUk5FTCk7Ci0JaWYodmQ9PU5VTEwpCi0JewotCQlrZnJlZSh0KTsKLQkJa2ZyZWUoY2xpZW50KTsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCWkyY19zZXRfY2xpZW50ZGF0YShjbGllbnQsIHZkKTsKLQltZW1jcHkodmQsICZzYWFfdGVtcGxhdGUsIHNpemVvZigqdmQpKTsKLQotCWZvciAocGdidWYgPSAwOyBwZ2J1ZiA8IE5VTV9EQVVTOyBwZ2J1ZisrKQotCXsKLQkJbWVtc2V0KHQtPnZkYXVbcGdidWZdLnBnYnVmLCAnICcsIHNpemVvZih0LT52ZGF1WzBdLnBnYnVmKSk7Ci0JCW1lbXNldCh0LT52ZGF1W3BnYnVmXS5zcmVncywgMCwgc2l6ZW9mKHQtPnZkYXVbMF0uc3JlZ3MpKTsKLQkJbWVtc2V0KHQtPnZkYXVbcGdidWZdLmxhc3RzdGF0LCAwLCBzaXplb2YodC0+dmRhdVswXS5sYXN0c3RhdCkpOwotCQl0LT52ZGF1W3BnYnVmXS5leHBpcmUgPSAwOwotCQl0LT52ZGF1W3BnYnVmXS5jbHJmb3VuZCA9IHRydWU7Ci0JCXQtPnZkYXVbcGdidWZdLnN0b3BwZWQgPSB0cnVlOwotCQl0LT5pc19zZWFyY2hpbmdbcGdidWZdID0gZmFsc2U7Ci0JfQotCXZkLT5wcml2PXQ7Ci0KLQotCS8qCi0JICoJUmVnaXN0ZXIgaXQKLQkgKi8KLQotCWlmKChlcnI9dmlkZW9fcmVnaXN0ZXJfZGV2aWNlKHZkLCBWRkxfVFlQRV9WVFgsLTEpKTwwKQotCXsKLQkJa2ZyZWUodCk7Ci0JCWtmcmVlKHZkKTsKLQkJa2ZyZWUoY2xpZW50KTsKLQkJcmV0dXJuIGVycjsKLQl9Ci0JdC0+Y2xpZW50ID0gY2xpZW50OwotCWkyY19hdHRhY2hfY2xpZW50KGNsaWVudCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qCi0gKglXZSBkbyBtb3N0IG9mIHRoZSBoYXJkIHdvcmsgd2hlbiB3ZSBiZWNvbWUgYSBkZXZpY2Ugb24gdGhlIGkyYy4KLSAqLwotCi1zdGF0aWMgaW50IHNhYTUyNDlfcHJvYmUoc3RydWN0IGkyY19hZGFwdGVyICphZGFwKQotewotCWlmIChhZGFwLT5jbGFzcyAmIEkyQ19DTEFTU19UVl9BTkFMT0cpCi0JCXJldHVybiBpMmNfcHJvYmUoYWRhcCwgJmFkZHJfZGF0YSwgc2FhNTI0OV9hdHRhY2gpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHNhYTUyNDlfZGV0YWNoKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCi17Ci0Jc3RydWN0IHZpZGVvX2RldmljZSAqdmQgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKLQlpMmNfZGV0YWNoX2NsaWVudChjbGllbnQpOwotCXZpZGVvX3VucmVnaXN0ZXJfZGV2aWNlKHZkKTsKLQlrZnJlZSh2ZC0+cHJpdik7Ci0Ja2ZyZWUodmQpOwotCWtmcmVlKGNsaWVudCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qIG5ldyBJMkMgZHJpdmVyIHN1cHBvcnQgKi8KLQotc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIGkyY19kcml2ZXJfdmlkZW90ZXh0ID0KLXsKLQkuZHJpdmVyID0gewotCQkubmFtZSAJPSBJRl9OQU1FLAkJLyogbmFtZSAqLwotCX0sCi0JLmlkIAkJPSBJMkNfRFJJVkVSSURfU0FBNTI0OSwgLyogaW4gaTJjLmggKi8KLQkuYXR0YWNoX2FkYXB0ZXIgPSBzYWE1MjQ5X3Byb2JlLAotCS5kZXRhY2hfY2xpZW50ICA9IHNhYTUyNDlfZGV0YWNoLAotfTsKLQotc3RhdGljIHN0cnVjdCBpMmNfY2xpZW50IGNsaWVudF90ZW1wbGF0ZSA9IHsKLQkuZHJpdmVyCQk9ICZpMmNfZHJpdmVyX3ZpZGVvdGV4dCwKLQkubmFtZQkJPSAiKHVuc2V0KSIsCi19OwotCiAvKgogICoJV2FpdCB0aGUgZ2l2ZW4gbnVtYmVyIG9mIGppZmZpZXMgKDEwbXMpLiBUaGlzIGNhbGxzIHRoZSBzY2hlZHVsZXIsIHNvIHRoZSBhY3R1YWwKICAqCWRlbGF5IG1heSBiZSBsb25nZXIuCkBAIC0yNzUsNyArMTUyLDcgQEAKIAlidWZbMF0gPSByZWc7CiAJbWVtY3B5KGJ1ZisxLCBkYXRhLCBjb3VudCk7CiAKLQlpZihpMmNfbWFzdGVyX3NlbmQodC0+Y2xpZW50LCBidWYsIGNvdW50KzEpPT1jb3VudCsxKQorCWlmIChpMmNfbWFzdGVyX3NlbmQodC0+Y2xpZW50LCBidWYsIGNvdW50ICsgMSkgPT0gY291bnQgKyAxKQogCQlyZXR1cm4gMDsKIAlyZXR1cm4gLTE7CiB9CkBAIC0zMTcsMjQ2ICsxOTQsMjM2IEBACiAJCQkgICAgdW5zaWduZWQgaW50IGNtZCwgdm9pZCAqYXJnKQogewogCXN0YXRpYyBpbnQgdmlydHVhbF9tb2RlID0gZmFsc2U7Ci0Jc3RydWN0IHZpZGVvX2RldmljZSAqdmQgPSB2aWRlb19kZXZkYXRhKGZpbGUpOwotCXN0cnVjdCBzYWE1MjQ5X2RldmljZSAqdD12ZC0+cHJpdjsKKwlzdHJ1Y3Qgc2FhNTI0OV9kZXZpY2UgKnQgPSB2aWRlb19kcnZkYXRhKGZpbGUpOwogCi0Jc3dpdGNoKGNtZCkKKwlzd2l0Y2ggKGNtZCkgeworCWNhc2UgVlRYSU9DR0VUSU5GTzoKIAl7Ci0JCWNhc2UgVlRYSU9DR0VUSU5GTzoKLQkJewotCQkJdnR4X2luZm9fdCAqaW5mbyA9IGFyZzsKLQkJCWluZm8tPnZlcnNpb25fbWFqb3IgPSBWVFhfVkVSX01BSjsKLQkJCWluZm8tPnZlcnNpb25fbWlub3IgPSBWVFhfVkVSX01JTjsKLQkJCWluZm8tPm51bXBhZ2VzID0gTlVNX0RBVVM7Ci0JCQkvKmluZm8tPmNjdF90eXBlID0gQ0NUX1RZUEU7Ki8KLQkJCXJldHVybiAwOwotCQl9CisJCXZ0eF9pbmZvX3QgKmluZm8gPSBhcmc7CisJCWluZm8tPnZlcnNpb25fbWFqb3IgPSBWVFhfVkVSX01BSjsKKwkJaW5mby0+dmVyc2lvbl9taW5vciA9IFZUWF9WRVJfTUlOOworCQlpbmZvLT5udW1wYWdlcyA9IE5VTV9EQVVTOworCQkvKmluZm8tPmNjdF90eXBlID0gQ0NUX1RZUEU7Ki8KKwkJcmV0dXJuIDA7CisJfQogCi0JCWNhc2UgVlRYSU9DQ0xSUEFHRToKLQkJewotCQkJdnR4X3BhZ2VyZXFfdCAqcmVxID0gYXJnOworCWNhc2UgVlRYSU9DQ0xSUEFHRToKKwl7CisJCXZ0eF9wYWdlcmVxX3QgKnJlcSA9IGFyZzsKIAotCQkJaWYgKHJlcS0+cGdidWYgPCAwIHx8IHJlcS0+cGdidWYgPj0gTlVNX0RBVVMpCi0JCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCQltZW1zZXQodC0+dmRhdVtyZXEtPnBnYnVmXS5wZ2J1ZiwgJyAnLCBzaXplb2YodC0+dmRhdVswXS5wZ2J1ZikpOwotCQkJdC0+dmRhdVtyZXEtPnBnYnVmXS5jbHJmb3VuZCA9IHRydWU7Ci0JCQlyZXR1cm4gMDsKLQkJfQorCQlpZiAocmVxLT5wZ2J1ZiA8IDAgfHwgcmVxLT5wZ2J1ZiA+PSBOVU1fREFVUykKKwkJCXJldHVybiAtRUlOVkFMOworCQltZW1zZXQodC0+dmRhdVtyZXEtPnBnYnVmXS5wZ2J1ZiwgJyAnLCBzaXplb2YodC0+dmRhdVswXS5wZ2J1ZikpOworCQl0LT52ZGF1W3JlcS0+cGdidWZdLmNscmZvdW5kID0gdHJ1ZTsKKwkJcmV0dXJuIDA7CisJfQogCi0JCWNhc2UgVlRYSU9DQ0xSRk9VTkQ6Ci0JCXsKLQkJCXZ0eF9wYWdlcmVxX3QgKnJlcSA9IGFyZzsKKwljYXNlIFZUWElPQ0NMUkZPVU5EOgorCXsKKwkJdnR4X3BhZ2VyZXFfdCAqcmVxID0gYXJnOwogCi0JCQlpZiAocmVxLT5wZ2J1ZiA8IDAgfHwgcmVxLT5wZ2J1ZiA+PSBOVU1fREFVUykKLQkJCQlyZXR1cm4gLUVJTlZBTDsKLQkJCXQtPnZkYXVbcmVxLT5wZ2J1Zl0uY2xyZm91bmQgPSB0cnVlOwotCQkJcmV0dXJuIDA7Ci0JCX0KKwkJaWYgKHJlcS0+cGdidWYgPCAwIHx8IHJlcS0+cGdidWYgPj0gTlVNX0RBVVMpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJdC0+dmRhdVtyZXEtPnBnYnVmXS5jbHJmb3VuZCA9IHRydWU7CisJCXJldHVybiAwOworCX0KIAotCQljYXNlIFZUWElPQ1BBR0VSRVE6Ci0JCXsKLQkJCXZ0eF9wYWdlcmVxX3QgKnJlcSA9IGFyZzsKLQkJCWlmICghKHJlcS0+cGFnZW1hc2sgJiBQR01BU0tfUEFHRSkpCi0JCQkJcmVxLT5wYWdlID0gMDsKLQkJCWlmICghKHJlcS0+cGFnZW1hc2sgJiBQR01BU0tfSE9VUikpCi0JCQkJcmVxLT5ob3VyID0gMDsKLQkJCWlmICghKHJlcS0+cGFnZW1hc2sgJiBQR01BU0tfTUlOVVRFKSkKLQkJCQlyZXEtPm1pbnV0ZSA9IDA7Ci0JCQlpZiAocmVxLT5wYWdlIDwgMCB8fCByZXEtPnBhZ2UgPiAweDhmZikgLyogN0ZGID8/ICovCi0JCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCQlyZXEtPnBhZ2UgJj0gMHg3ZmY7Ci0JCQlpZiAocmVxLT5ob3VyIDwgMCB8fCByZXEtPmhvdXIgPiAweDNmIHx8IHJlcS0+bWludXRlIDwgMCB8fCByZXEtPm1pbnV0ZSA+IDB4N2YgfHwKLQkJCQlyZXEtPnBhZ2VtYXNrIDwgMCB8fCByZXEtPnBhZ2VtYXNrID49IFBHTUFTS19NQVggfHwgcmVxLT5wZ2J1ZiA8IDAgfHwgcmVxLT5wZ2J1ZiA+PSBOVU1fREFVUykKLQkJCQlyZXR1cm4gLUVJTlZBTDsKLQkJCXQtPnZkYXVbcmVxLT5wZ2J1Zl0uc3JlZ3NbMF0gPSAocmVxLT5wYWdlbWFzayAmIFBHX0hVTkQgPyAweDEwIDogMCkgfCAocmVxLT5wYWdlIC8gMHgxMDApOwotCQkJdC0+dmRhdVtyZXEtPnBnYnVmXS5zcmVnc1sxXSA9IChyZXEtPnBhZ2VtYXNrICYgUEdfVEVOID8gMHgxMCA6IDApIHwgKChyZXEtPnBhZ2UgLyAweDEwKSAmIDB4Zik7Ci0JCQl0LT52ZGF1W3JlcS0+cGdidWZdLnNyZWdzWzJdID0gKHJlcS0+cGFnZW1hc2sgJiBQR19VTklUID8gMHgxMCA6IDApIHwgKHJlcS0+cGFnZSAmIDB4Zik7Ci0JCQl0LT52ZGF1W3JlcS0+cGdidWZdLnNyZWdzWzNdID0gKHJlcS0+cGFnZW1hc2sgJiBIUl9URU4gPyAweDEwIDogMCkgfCAocmVxLT5ob3VyIC8gMHgxMCk7Ci0JCQl0LT52ZGF1W3JlcS0+cGdidWZdLnNyZWdzWzRdID0gKHJlcS0+cGFnZW1hc2sgJiBIUl9VTklUID8gMHgxMCA6IDApIHwgKHJlcS0+aG91ciAmIDB4Zik7Ci0JCQl0LT52ZGF1W3JlcS0+cGdidWZdLnNyZWdzWzVdID0gKHJlcS0+cGFnZW1hc2sgJiBNSU5fVEVOID8gMHgxMCA6IDApIHwgKHJlcS0+bWludXRlIC8gMHgxMCk7Ci0JCQl0LT52ZGF1W3JlcS0+cGdidWZdLnNyZWdzWzZdID0gKHJlcS0+cGFnZW1hc2sgJiBNSU5fVU5JVCA/IDB4MTAgOiAwKSB8IChyZXEtPm1pbnV0ZSAmIDB4Zik7Ci0JCQl0LT52ZGF1W3JlcS0+cGdidWZdLnN0b3BwZWQgPSBmYWxzZTsKLQkJCXQtPnZkYXVbcmVxLT5wZ2J1Zl0uY2xyZm91bmQgPSB0cnVlOwotCQkJdC0+aXNfc2VhcmNoaW5nW3JlcS0+cGdidWZdID0gdHJ1ZTsKLQkJCXJldHVybiAwOwotCQl9CisJY2FzZSBWVFhJT0NQQUdFUkVROgorCXsKKwkJdnR4X3BhZ2VyZXFfdCAqcmVxID0gYXJnOworCQlpZiAoIShyZXEtPnBhZ2VtYXNrICYgUEdNQVNLX1BBR0UpKQorCQkJcmVxLT5wYWdlID0gMDsKKwkJaWYgKCEocmVxLT5wYWdlbWFzayAmIFBHTUFTS19IT1VSKSkKKwkJCXJlcS0+aG91ciA9IDA7CisJCWlmICghKHJlcS0+cGFnZW1hc2sgJiBQR01BU0tfTUlOVVRFKSkKKwkJCXJlcS0+bWludXRlID0gMDsKKwkJaWYgKHJlcS0+cGFnZSA8IDAgfHwgcmVxLT5wYWdlID4gMHg4ZmYpIC8qIDdGRiA/PyAqLworCQkJcmV0dXJuIC1FSU5WQUw7CisJCXJlcS0+cGFnZSAmPSAweDdmZjsKKwkJaWYgKHJlcS0+aG91ciA8IDAgfHwgcmVxLT5ob3VyID4gMHgzZiB8fCByZXEtPm1pbnV0ZSA8IDAgfHwgcmVxLT5taW51dGUgPiAweDdmIHx8CisJCQlyZXEtPnBhZ2VtYXNrIDwgMCB8fCByZXEtPnBhZ2VtYXNrID49IFBHTUFTS19NQVggfHwgcmVxLT5wZ2J1ZiA8IDAgfHwgcmVxLT5wZ2J1ZiA+PSBOVU1fREFVUykKKwkJCXJldHVybiAtRUlOVkFMOworCQl0LT52ZGF1W3JlcS0+cGdidWZdLnNyZWdzWzBdID0gKHJlcS0+cGFnZW1hc2sgJiBQR19IVU5EID8gMHgxMCA6IDApIHwgKHJlcS0+cGFnZSAvIDB4MTAwKTsKKwkJdC0+dmRhdVtyZXEtPnBnYnVmXS5zcmVnc1sxXSA9IChyZXEtPnBhZ2VtYXNrICYgUEdfVEVOID8gMHgxMCA6IDApIHwgKChyZXEtPnBhZ2UgLyAweDEwKSAmIDB4Zik7CisJCXQtPnZkYXVbcmVxLT5wZ2J1Zl0uc3JlZ3NbMl0gPSAocmVxLT5wYWdlbWFzayAmIFBHX1VOSVQgPyAweDEwIDogMCkgfCAocmVxLT5wYWdlICYgMHhmKTsKKwkJdC0+dmRhdVtyZXEtPnBnYnVmXS5zcmVnc1szXSA9IChyZXEtPnBhZ2VtYXNrICYgSFJfVEVOID8gMHgxMCA6IDApIHwgKHJlcS0+aG91ciAvIDB4MTApOworCQl0LT52ZGF1W3JlcS0+cGdidWZdLnNyZWdzWzRdID0gKHJlcS0+cGFnZW1hc2sgJiBIUl9VTklUID8gMHgxMCA6IDApIHwgKHJlcS0+aG91ciAmIDB4Zik7CisJCXQtPnZkYXVbcmVxLT5wZ2J1Zl0uc3JlZ3NbNV0gPSAocmVxLT5wYWdlbWFzayAmIE1JTl9URU4gPyAweDEwIDogMCkgfCAocmVxLT5taW51dGUgLyAweDEwKTsKKwkJdC0+dmRhdVtyZXEtPnBnYnVmXS5zcmVnc1s2XSA9IChyZXEtPnBhZ2VtYXNrICYgTUlOX1VOSVQgPyAweDEwIDogMCkgfCAocmVxLT5taW51dGUgJiAweGYpOworCQl0LT52ZGF1W3JlcS0+cGdidWZdLnN0b3BwZWQgPSBmYWxzZTsKKwkJdC0+dmRhdVtyZXEtPnBnYnVmXS5jbHJmb3VuZCA9IHRydWU7CisJCXQtPmlzX3NlYXJjaGluZ1tyZXEtPnBnYnVmXSA9IHRydWU7CisJCXJldHVybiAwOworCX0KIAotCQljYXNlIFZUWElPQ0dFVFNUQVQ6Ci0JCXsKLQkJCXZ0eF9wYWdlcmVxX3QgKnJlcSA9IGFyZzsKLQkJCXU4IGluZm9iaXRzWzEwXTsKLQkJCXZ0eF9wYWdlaW5mb190IGluZm87Ci0JCQlpbnQgYTsKKwljYXNlIFZUWElPQ0dFVFNUQVQ6CisJeworCQl2dHhfcGFnZXJlcV90ICpyZXEgPSBhcmc7CisJCXU4IGluZm9iaXRzWzEwXTsKKwkJdnR4X3BhZ2VpbmZvX3QgaW5mbzsKKwkJaW50IGE7CiAKLQkJCWlmIChyZXEtPnBnYnVmIDwgMCB8fCByZXEtPnBnYnVmID49IE5VTV9EQVVTKQotCQkJCXJldHVybiAtRUlOVkFMOwotCQkJaWYgKCF0LT52ZGF1W3JlcS0+cGdidWZdLnN0b3BwZWQpCi0JCQl7Ci0JCQkJaWYgKGkyY19zZW5kZGF0YSh0LCAyLCAwLCAtMSkgfHwKLQkJCQkJaTJjX3NlbmRidWYodCwgMywgc2l6ZW9mKHQtPnZkYXVbMF0uc3JlZ3MpLCB0LT52ZGF1W3JlcS0+cGdidWZdLnNyZWdzKSB8fAotCQkJCQlpMmNfc2VuZGRhdGEodCwgOCwgMCwgMjUsIDAsICcgJywgJyAnLCAnICcsICcgJywgJyAnLCAnICcsICcgJywgJyAnLCAnICcsIC0xKSB8fAotCQkJCQlpMmNfc2VuZGRhdGEodCwgMiwgMCwgdC0+dmRhdVtyZXEtPnBnYnVmXS5zcmVnc1swXSB8IDgsIC0xKSB8fAotCQkJCQlpMmNfc2VuZGRhdGEodCwgOCwgMCwgMjUsIDAsIC0xKSkKKwkJaWYgKHJlcS0+cGdidWYgPCAwIHx8IHJlcS0+cGdidWYgPj0gTlVNX0RBVVMpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJaWYgKCF0LT52ZGF1W3JlcS0+cGdidWZdLnN0b3BwZWQpIHsKKwkJCWlmIChpMmNfc2VuZGRhdGEodCwgMiwgMCwgLTEpIHx8CisJCQkJaTJjX3NlbmRidWYodCwgMywgc2l6ZW9mKHQtPnZkYXVbMF0uc3JlZ3MpLCB0LT52ZGF1W3JlcS0+cGdidWZdLnNyZWdzKSB8fAorCQkJCWkyY19zZW5kZGF0YSh0LCA4LCAwLCAyNSwgMCwgJyAnLCAnICcsICcgJywgJyAnLCAnICcsICcgJywgJyAnLCAnICcsICcgJywgLTEpIHx8CisJCQkJaTJjX3NlbmRkYXRhKHQsIDIsIDAsIHQtPnZkYXVbcmVxLT5wZ2J1Zl0uc3JlZ3NbMF0gfCA4LCAtMSkgfHwKKwkJCQlpMmNfc2VuZGRhdGEodCwgOCwgMCwgMjUsIDAsIC0xKSkKKwkJCQlyZXR1cm4gLUVJTzsKKwkJCWpkZWxheShQQUdFX1dBSVQpOworCQkJaWYgKGkyY19nZXRkYXRhKHQsIDEwLCBpbmZvYml0cykpCisJCQkJcmV0dXJuIC1FSU87CisKKwkJCWlmICghKGluZm9iaXRzWzhdICYgMHgxMCkgJiYgIShpbmZvYml0c1s3XSAmIDB4ZjApICYmCS8qIGNoZWNrIEZPVU5ELWJpdCAqLworCQkJCShtZW1jbXAoaW5mb2JpdHMsIHQtPnZkYXVbcmVxLT5wZ2J1Zl0ubGFzdHN0YXQsIHNpemVvZihpbmZvYml0cykpIHx8CisJCQkJdGltZV9hZnRlcl9lcShqaWZmaWVzLCB0LT52ZGF1W3JlcS0+cGdidWZdLmV4cGlyZSkpKQorCQkJewkJLyogY2hlY2sgaWYgbmV3IHBhZ2UgYXJyaXZlZCAqLworCQkJCWlmIChpMmNfc2VuZGRhdGEodCwgOCwgMCwgMCwgMCwgLTEpIHx8CisJCQkJCWkyY19nZXRkYXRhKHQsIFZUWF9QQUdFU0laRSwgdC0+dmRhdVtyZXEtPnBnYnVmXS5wZ2J1ZikpCiAJCQkJCXJldHVybiAtRUlPOwotCQkJCWpkZWxheShQQUdFX1dBSVQpOwotCQkJCWlmIChpMmNfZ2V0ZGF0YSh0LCAxMCwgaW5mb2JpdHMpKQotCQkJCQlyZXR1cm4gLUVJTzsKLQotCQkJCWlmICghKGluZm9iaXRzWzhdICYgMHgxMCkgJiYgIShpbmZvYml0c1s3XSAmIDB4ZjApICYmCS8qIGNoZWNrIEZPVU5ELWJpdCAqLwotCQkJCQkobWVtY21wKGluZm9iaXRzLCB0LT52ZGF1W3JlcS0+cGdidWZdLmxhc3RzdGF0LCBzaXplb2YoaW5mb2JpdHMpKSB8fAotCQkJCQl0aW1lX2FmdGVyX2VxKGppZmZpZXMsIHQtPnZkYXVbcmVxLT5wZ2J1Zl0uZXhwaXJlKSkpCi0JCQkJewkJLyogY2hlY2sgaWYgbmV3IHBhZ2UgYXJyaXZlZCAqLwotCQkJCQlpZiAoaTJjX3NlbmRkYXRhKHQsIDgsIDAsIDAsIDAsIC0xKSB8fAotCQkJCQkJaTJjX2dldGRhdGEodCwgVlRYX1BBR0VTSVpFLCB0LT52ZGF1W3JlcS0+cGdidWZdLnBnYnVmKSkKKwkJCQl0LT52ZGF1W3JlcS0+cGdidWZdLmV4cGlyZSA9IGppZmZpZXMgKyBQR0JVRl9FWFBJUkU7CisJCQkJbWVtc2V0KHQtPnZkYXVbcmVxLT5wZ2J1Zl0ucGdidWYgKyBWVFhfUEFHRVNJWkUsICcgJywgVlRYX1ZJUlRVQUxTSVpFIC0gVlRYX1BBR0VTSVpFKTsKKwkJCQlpZiAodC0+dmlydHVhbF9tb2RlKSB7CisJCQkJCS8qIFBhY2tldCBYLzI0ICovCisJCQkJCWlmIChpMmNfc2VuZGRhdGEodCwgOCwgMCwgMHgyMCwgMCwgLTEpIHx8CisJCQkJCQlpMmNfZ2V0ZGF0YSh0LCA0MCwgdC0+dmRhdVtyZXEtPnBnYnVmXS5wZ2J1ZiArIFZUWF9QQUdFU0laRSArIDIwICogNDApKQogCQkJCQkJcmV0dXJuIC1FSU87Ci0JCQkJCXQtPnZkYXVbcmVxLT5wZ2J1Zl0uZXhwaXJlID0gamlmZmllcyArIFBHQlVGX0VYUElSRTsKLQkJCQkJbWVtc2V0KHQtPnZkYXVbcmVxLT5wZ2J1Zl0ucGdidWYgKyBWVFhfUEFHRVNJWkUsICcgJywgVlRYX1ZJUlRVQUxTSVpFIC0gVlRYX1BBR0VTSVpFKTsKLQkJCQkJaWYgKHQtPnZpcnR1YWxfbW9kZSkKLQkJCQkJewotCQkJCQkJLyogUGFja2V0IFgvMjQgKi8KLQkJCQkJCWlmIChpMmNfc2VuZGRhdGEodCwgOCwgMCwgMHgyMCwgMCwgLTEpIHx8Ci0JCQkJCQkJaTJjX2dldGRhdGEodCwgNDAsIHQtPnZkYXVbcmVxLT5wZ2J1Zl0ucGdidWYgKyBWVFhfUEFHRVNJWkUgKyAyMCAqIDQwKSkKLQkJCQkJCQlyZXR1cm4gLUVJTzsKLQkJCQkJCS8qIFBhY2tldCBYLzI3LzAgKi8KLQkJCQkJCWlmIChpMmNfc2VuZGRhdGEodCwgOCwgMCwgMHgyMSwgMCwgLTEpIHx8Ci0JCQkJCQkJaTJjX2dldGRhdGEodCwgNDAsIHQtPnZkYXVbcmVxLT5wZ2J1Zl0ucGdidWYgKyBWVFhfUEFHRVNJWkUgKyAxNiAqIDQwKSkKLQkJCQkJCQlyZXR1cm4gLUVJTzsKLQkJCQkJCS8qIFBhY2tldCA4LzMwLzAuLi44LzMwLzE1Ci0JCQkJCQkgKiBGSVhNRTogQUZBSUssIHRoZSA1MjQ5IGRvZXMgaGFtbWluZy1kZWNvZGluZyBmb3Igc29tZSBieXRlcyBpbiBwYWNrZXQgOC8zMCwKLQkJCQkJCSAqICAgICAgICBzbyB3ZSBzaG91bGQgdW5kbyB0aGlzIGhlcmUuCi0JCQkJCQkgKi8KLQkJCQkJCWlmIChpMmNfc2VuZGRhdGEodCwgOCwgMCwgMHgyMiwgMCwgLTEpIHx8Ci0JCQkJCQkJaTJjX2dldGRhdGEodCwgNDAsIHQtPnZkYXVbcmVxLT5wZ2J1Zl0ucGdidWYgKyBWVFhfUEFHRVNJWkUgKyAyMyAqIDQwKSkKLQkJCQkJCQlyZXR1cm4gLUVJTzsKLQkJCQkJfQotCQkJCQl0LT52ZGF1W3JlcS0+cGdidWZdLmNscmZvdW5kID0gZmFsc2U7Ci0JCQkJCW1lbWNweSh0LT52ZGF1W3JlcS0+cGdidWZdLmxhc3RzdGF0LCBpbmZvYml0cywgc2l6ZW9mKGluZm9iaXRzKSk7CisJCQkJCS8qIFBhY2tldCBYLzI3LzAgKi8KKwkJCQkJaWYgKGkyY19zZW5kZGF0YSh0LCA4LCAwLCAweDIxLCAwLCAtMSkgfHwKKwkJCQkJCWkyY19nZXRkYXRhKHQsIDQwLCB0LT52ZGF1W3JlcS0+cGdidWZdLnBnYnVmICsgVlRYX1BBR0VTSVpFICsgMTYgKiA0MCkpCisJCQkJCQlyZXR1cm4gLUVJTzsKKwkJCQkJLyogUGFja2V0IDgvMzAvMC4uLjgvMzAvMTUKKwkJCQkJICogRklYTUU6IEFGQUlLLCB0aGUgNTI0OSBkb2VzIGhhbW1pbmctZGVjb2RpbmcgZm9yIHNvbWUgYnl0ZXMgaW4gcGFja2V0IDgvMzAsCisJCQkJCSAqICAgICAgICBzbyB3ZSBzaG91bGQgdW5kbyB0aGlzIGhlcmUuCisJCQkJCSAqLworCQkJCQlpZiAoaTJjX3NlbmRkYXRhKHQsIDgsIDAsIDB4MjIsIDAsIC0xKSB8fAorCQkJCQkJaTJjX2dldGRhdGEodCwgNDAsIHQtPnZkYXVbcmVxLT5wZ2J1Zl0ucGdidWYgKyBWVFhfUEFHRVNJWkUgKyAyMyAqIDQwKSkKKwkJCQkJCXJldHVybiAtRUlPOwogCQkJCX0KLQkJCQllbHNlCi0JCQkJewotCQkJCQltZW1jcHkoaW5mb2JpdHMsIHQtPnZkYXVbcmVxLT5wZ2J1Zl0ubGFzdHN0YXQsIHNpemVvZihpbmZvYml0cykpOwotCQkJCX0KLQkJCX0KLQkJCWVsc2UKLQkJCXsKKwkJCQl0LT52ZGF1W3JlcS0+cGdidWZdLmNscmZvdW5kID0gZmFsc2U7CisJCQkJbWVtY3B5KHQtPnZkYXVbcmVxLT5wZ2J1Zl0ubGFzdHN0YXQsIGluZm9iaXRzLCBzaXplb2YoaW5mb2JpdHMpKTsKKwkJCX0gZWxzZSB7CiAJCQkJbWVtY3B5KGluZm9iaXRzLCB0LT52ZGF1W3JlcS0+cGdidWZdLmxhc3RzdGF0LCBzaXplb2YoaW5mb2JpdHMpKTsKIAkJCX0KLQotCQkJaW5mby5wYWdlbnVtID0gKChpbmZvYml0c1s4XSA8PCA4KSAmIDB4NzAwKSB8ICgoaW5mb2JpdHNbMV0gPDwgNCkgJiAweGYwKSB8IChpbmZvYml0c1swXSAmIDB4MGYpOwotCQkJaWYgKGluZm8ucGFnZW51bSA8IDB4MTAwKQotCQkJCWluZm8ucGFnZW51bSArPSAweDgwMDsKLQkJCWluZm8uaG91ciA9ICgoaW5mb2JpdHNbNV0gPDwgNCkgJiAweDMwKSB8IChpbmZvYml0c1s0XSAmIDB4MGYpOwotCQkJaW5mby5taW51dGUgPSAoKGluZm9iaXRzWzNdIDw8IDQpICYgMHg3MCkgfCAoaW5mb2JpdHNbMl0gJiAweDBmKTsKLQkJCWluZm8uY2hhcnNldCA9ICgoaW5mb2JpdHNbN10gPj4gMSkgJiA3KTsKLQkJCWluZm8uZGVsZXRlID0gISEoaW5mb2JpdHNbM10gJiA4KTsKLQkJCWluZm8uaGVhZGxpbmUgPSAhIShpbmZvYml0c1s1XSAmIDQpOwotCQkJaW5mby5zdWJ0aXRsZSA9ICEhKGluZm9iaXRzWzVdICYgOCk7Ci0JCQlpbmZvLnN1cHBfaGVhZGVyID0gISEoaW5mb2JpdHNbNl0gJiAxKTsKLQkJCWluZm8udXBkYXRlID0gISEoaW5mb2JpdHNbNl0gJiAyKTsKLQkJCWluZm8uaW50ZXJfc2VxID0gISEoaW5mb2JpdHNbNl0gJiA0KTsKLQkJCWluZm8uZGlzX2Rpc3AgPSAhIShpbmZvYml0c1s2XSAmIDgpOwotCQkJaW5mby5zZXJpYWwgPSAhIShpbmZvYml0c1s3XSAmIDEpOwotCQkJaW5mby5ub3Rmb3VuZCA9ICEhKGluZm9iaXRzWzhdICYgMHgxMCk7Ci0JCQlpbmZvLnBibGYgPSAhIShpbmZvYml0c1s5XSAmIDB4MjApOwotCQkJaW5mby5oYW1taW5nID0gMDsKLQkJCWZvciAoYSA9IDA7IGEgPD0gNzsgYSsrKQotCQkJewotCQkJCWlmIChpbmZvYml0c1thXSAmIDB4ZjApCi0JCQkJewotCQkJCQlpbmZvLmhhbW1pbmcgPSAxOwotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQl9Ci0JCQlpZiAodC0+dmRhdVtyZXEtPnBnYnVmXS5jbHJmb3VuZCkKLQkJCQlpbmZvLm5vdGZvdW5kID0gMTsKLQkJCWlmKGNvcHlfdG9fdXNlcihyZXEtPmJ1ZmZlciwgJmluZm8sIHNpemVvZih2dHhfcGFnZWluZm9fdCkpKQotCQkJCXJldHVybiAtRUZBVUxUOwotCQkJaWYgKCFpbmZvLmhhbW1pbmcgJiYgIWluZm8ubm90Zm91bmQpCi0JCQl7Ci0JCQkJdC0+aXNfc2VhcmNoaW5nW3JlcS0+cGdidWZdID0gZmFsc2U7Ci0JCQl9Ci0JCQlyZXR1cm4gMDsKKwkJfSBlbHNlIHsKKwkJCW1lbWNweShpbmZvYml0cywgdC0+dmRhdVtyZXEtPnBnYnVmXS5sYXN0c3RhdCwgc2l6ZW9mKGluZm9iaXRzKSk7CiAJCX0KIAotCQljYXNlIFZUWElPQ0dFVFBBR0U6Ci0JCXsKLQkJCXZ0eF9wYWdlcmVxX3QgKnJlcSA9IGFyZzsKLQkJCWludCBzdGFydCwgZW5kOwotCi0JCQlpZiAocmVxLT5wZ2J1ZiA8IDAgfHwgcmVxLT5wZ2J1ZiA+PSBOVU1fREFVUyB8fCByZXEtPnN0YXJ0IDwgMCB8fAotCQkJCXJlcS0+c3RhcnQgPiByZXEtPmVuZCB8fCByZXEtPmVuZCA+PSAodmlydHVhbF9tb2RlID8gVlRYX1ZJUlRVQUxTSVpFIDogVlRYX1BBR0VTSVpFKSkKLQkJCQlyZXR1cm4gLUVJTlZBTDsKLQkJCWlmKGNvcHlfdG9fdXNlcihyZXEtPmJ1ZmZlciwgJnQtPnZkYXVbcmVxLT5wZ2J1Zl0ucGdidWZbcmVxLT5zdGFydF0sIHJlcS0+ZW5kIC0gcmVxLT5zdGFydCArIDEpKQotCQkJCXJldHVybiAtRUZBVUxUOwotCi0JCQkgLyoKLQkJCSAgKglBbHdheXMgcmVhZCB0aGUgdGltZSBkaXJlY3RseSBmcm9tIFNBQTUyNDkKLQkJCSAgKi8KLQotCQkJaWYgKHJlcS0+c3RhcnQgPD0gMzkgJiYgcmVxLT5lbmQgPj0gMzIpCi0JCQl7Ci0JCQkJaW50IGxlbjsKLQkJCQljaGFyIGJ1ZlsxNl07Ci0JCQkJc3RhcnQgPSBtYXgocmVxLT5zdGFydCwgMzIpOwotCQkJCWVuZCA9IG1pbihyZXEtPmVuZCwgMzkpOwotCQkJCWxlbj1lbmQtc3RhcnQrMTsKLQkJCQlpZiAoaTJjX3NlbmRkYXRhKHQsIDgsIDAsIDAsIHN0YXJ0LCAtMSkgfHwKLQkJCQkJaTJjX2dldGRhdGEodCwgbGVuLCBidWYpKQotCQkJCQlyZXR1cm4gLUVJTzsKLQkJCQlpZihjb3B5X3RvX3VzZXIocmVxLT5idWZmZXIrc3RhcnQtcmVxLT5zdGFydCwgYnVmLCBsZW4pKQotCQkJCQlyZXR1cm4gLUVGQVVMVDsKKwkJaW5mby5wYWdlbnVtID0gKChpbmZvYml0c1s4XSA8PCA4KSAmIDB4NzAwKSB8ICgoaW5mb2JpdHNbMV0gPDwgNCkgJiAweGYwKSB8IChpbmZvYml0c1swXSAmIDB4MGYpOworCQlpZiAoaW5mby5wYWdlbnVtIDwgMHgxMDApCisJCQlpbmZvLnBhZ2VudW0gKz0gMHg4MDA7CisJCWluZm8uaG91ciA9ICgoaW5mb2JpdHNbNV0gPDwgNCkgJiAweDMwKSB8IChpbmZvYml0c1s0XSAmIDB4MGYpOworCQlpbmZvLm1pbnV0ZSA9ICgoaW5mb2JpdHNbM10gPDwgNCkgJiAweDcwKSB8IChpbmZvYml0c1syXSAmIDB4MGYpOworCQlpbmZvLmNoYXJzZXQgPSAoKGluZm9iaXRzWzddID4+IDEpICYgNyk7CisJCWluZm8uZGVsZXRlID0gISEoaW5mb2JpdHNbM10gJiA4KTsKKwkJaW5mby5oZWFkbGluZSA9ICEhKGluZm9iaXRzWzVdICYgNCk7CisJCWluZm8uc3VidGl0bGUgPSAhIShpbmZvYml0c1s1XSAmIDgpOworCQlpbmZvLnN1cHBfaGVhZGVyID0gISEoaW5mb2JpdHNbNl0gJiAxKTsKKwkJaW5mby51cGRhdGUgPSAhIShpbmZvYml0c1s2XSAmIDIpOworCQlpbmZvLmludGVyX3NlcSA9ICEhKGluZm9iaXRzWzZdICYgNCk7CisJCWluZm8uZGlzX2Rpc3AgPSAhIShpbmZvYml0c1s2XSAmIDgpOworCQlpbmZvLnNlcmlhbCA9ICEhKGluZm9iaXRzWzddICYgMSk7CisJCWluZm8ubm90Zm91bmQgPSAhIShpbmZvYml0c1s4XSAmIDB4MTApOworCQlpbmZvLnBibGYgPSAhIShpbmZvYml0c1s5XSAmIDB4MjApOworCQlpbmZvLmhhbW1pbmcgPSAwOworCQlmb3IgKGEgPSAwOyBhIDw9IDc7IGErKykgeworCQkJaWYgKGluZm9iaXRzW2FdICYgMHhmMCkgeworCQkJCWluZm8uaGFtbWluZyA9IDE7CisJCQkJYnJlYWs7CiAJCQl9Ci0JCQkvKiBJbnNlcnQgdGhlIGN1cnJlbnQgaGVhZGVyIGlmIERBVSBpcyBzdGlsbCBzZWFyY2hpbmcgZm9yIGEgcGFnZSAqLwotCQkJaWYgKHJlcS0+c3RhcnQgPD0gMzEgJiYgcmVxLT5lbmQgPj0gNyAmJiB0LT5pc19zZWFyY2hpbmdbcmVxLT5wZ2J1Zl0pCi0JCQl7Ci0JCQkJY2hhciBidWZbMzJdOwotCQkJCWludCBsZW47Ci0JCQkJc3RhcnQgPSBtYXgocmVxLT5zdGFydCwgNyk7Ci0JCQkJZW5kID0gbWluKHJlcS0+ZW5kLCAzMSk7Ci0JCQkJbGVuPWVuZC1zdGFydCsxOwotCQkJCWlmIChpMmNfc2VuZGRhdGEodCwgOCwgMCwgMCwgc3RhcnQsIC0xKSB8fAotCQkJCQlpMmNfZ2V0ZGF0YSh0LCBsZW4sIGJ1ZikpCi0JCQkJCXJldHVybiAtRUlPOwotCQkJCWlmKGNvcHlfdG9fdXNlcihyZXEtPmJ1ZmZlcitzdGFydC1yZXEtPnN0YXJ0LCBidWYsIGxlbikpCi0JCQkJCXJldHVybiAtRUZBVUxUOwotCQkJfQotCQkJcmV0dXJuIDA7CiAJCX0KLQotCQljYXNlIFZUWElPQ1NUT1BEQVU6Ci0JCXsKLQkJCXZ0eF9wYWdlcmVxX3QgKnJlcSA9IGFyZzsKLQotCQkJaWYgKHJlcS0+cGdidWYgPCAwIHx8IHJlcS0+cGdidWYgPj0gTlVNX0RBVVMpCi0JCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCQl0LT52ZGF1W3JlcS0+cGdidWZdLnN0b3BwZWQgPSB0cnVlOworCQlpZiAodC0+dmRhdVtyZXEtPnBnYnVmXS5jbHJmb3VuZCkKKwkJCWluZm8ubm90Zm91bmQgPSAxOworCQlpZiAoY29weV90b191c2VyKHJlcS0+YnVmZmVyLCAmaW5mbywgc2l6ZW9mKHZ0eF9wYWdlaW5mb190KSkpCisJCQlyZXR1cm4gLUVGQVVMVDsKKwkJaWYgKCFpbmZvLmhhbW1pbmcgJiYgIWluZm8ubm90Zm91bmQpCiAJCQl0LT5pc19zZWFyY2hpbmdbcmVxLT5wZ2J1Zl0gPSBmYWxzZTsKLQkJCXJldHVybiAwOwotCQl9CisJCXJldHVybiAwOworCX0KIAotCQljYXNlIFZUWElPQ1BVVFBBR0U6Ci0JCWNhc2UgVlRYSU9DU0VURElTUDoKLQkJY2FzZSBWVFhJT0NQVVRTVEFUOgotCQkJcmV0dXJuIDA7CisJY2FzZSBWVFhJT0NHRVRQQUdFOgorCXsKKwkJdnR4X3BhZ2VyZXFfdCAqcmVxID0gYXJnOworCQlpbnQgc3RhcnQsIGVuZDsKIAotCQljYXNlIFZUWElPQ0NMUkNBQ0hFOgotCQl7Ci0JCQlpZiAoaTJjX3NlbmRkYXRhKHQsIDAsIE5VTV9EQVVTLCAwLCA4LCAtMSkgfHwgaTJjX3NlbmRkYXRhKHQsIDExLAotCQkJCScgJywnICcsJyAnLCcgJywnICcsJyAnLCcgJywnICcsJyAnLCcgJywnICcsJyAnLAotCQkJCScgJywnICcsJyAnLCcgJywnICcsJyAnLCcgJywnICcsJyAnLCcgJywnICcsJyAnLCAtMSkpCisJCWlmIChyZXEtPnBnYnVmIDwgMCB8fCByZXEtPnBnYnVmID49IE5VTV9EQVVTIHx8IHJlcS0+c3RhcnQgPCAwIHx8CisJCQlyZXEtPnN0YXJ0ID4gcmVxLT5lbmQgfHwgcmVxLT5lbmQgPj0gKHZpcnR1YWxfbW9kZSA/IFZUWF9WSVJUVUFMU0laRSA6IFZUWF9QQUdFU0laRSkpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJaWYgKGNvcHlfdG9fdXNlcihyZXEtPmJ1ZmZlciwgJnQtPnZkYXVbcmVxLT5wZ2J1Zl0ucGdidWZbcmVxLT5zdGFydF0sIHJlcS0+ZW5kIC0gcmVxLT5zdGFydCArIDEpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisKKwkJIC8qCisJCSAgKglBbHdheXMgcmVhZCB0aGUgdGltZSBkaXJlY3RseSBmcm9tIFNBQTUyNDkKKwkJICAqLworCisJCWlmIChyZXEtPnN0YXJ0IDw9IDM5ICYmIHJlcS0+ZW5kID49IDMyKSB7CisJCQlpbnQgbGVuOworCQkJY2hhciBidWZbMTZdOworCQkJc3RhcnQgPSBtYXgocmVxLT5zdGFydCwgMzIpOworCQkJZW5kID0gbWluKHJlcS0+ZW5kLCAzOSk7CisJCQlsZW4gPSBlbmQgLSBzdGFydCArIDE7CisJCQlpZiAoaTJjX3NlbmRkYXRhKHQsIDgsIDAsIDAsIHN0YXJ0LCAtMSkgfHwKKwkJCQlpMmNfZ2V0ZGF0YSh0LCBsZW4sIGJ1ZikpCiAJCQkJcmV0dXJuIC1FSU87Ci0JCQlpZiAoaTJjX3NlbmRkYXRhKHQsIDMsIDB4MjAsIC0xKSkKLQkJCQlyZXR1cm4gLUVJTzsKLQkJCWpkZWxheSgxMCAqIENMRUFSX0RFTEFZKTsJCQkvKiBJIGhhdmUgbm8gaWRlYSBob3cgbG9uZyB3ZSBoYXZlIHRvIHdhaXQgaGVyZSAqLwotCQkJcmV0dXJuIDA7CisJCQlpZiAoY29weV90b191c2VyKHJlcS0+YnVmZmVyICsgc3RhcnQgLSByZXEtPnN0YXJ0LCBidWYsIGxlbikpCisJCQkJcmV0dXJuIC1FRkFVTFQ7CiAJCX0KKwkJLyogSW5zZXJ0IHRoZSBjdXJyZW50IGhlYWRlciBpZiBEQVUgaXMgc3RpbGwgc2VhcmNoaW5nIGZvciBhIHBhZ2UgKi8KKwkJaWYgKHJlcS0+c3RhcnQgPD0gMzEgJiYgcmVxLT5lbmQgPj0gNyAmJiB0LT5pc19zZWFyY2hpbmdbcmVxLT5wZ2J1Zl0pIHsKKwkJCWNoYXIgYnVmWzMyXTsKKwkJCWludCBsZW47CiAKLQkJY2FzZSBWVFhJT0NTRVRWSVJUOgotCQl7Ci0JCQkvKiBUaGUgU0FBNTI0OSBoYXMgdmlydHVhbC1yb3cgcmVjZXB0aW9uIHR1cm5lZCBvbiBhbHdheXMgKi8KLQkJCXQtPnZpcnR1YWxfbW9kZSA9IChpbnQpKGxvbmcpYXJnOwotCQkJcmV0dXJuIDA7CisJCQlzdGFydCA9IG1heChyZXEtPnN0YXJ0LCA3KTsKKwkJCWVuZCA9IG1pbihyZXEtPmVuZCwgMzEpOworCQkJbGVuID0gZW5kIC0gc3RhcnQgKyAxOworCQkJaWYgKGkyY19zZW5kZGF0YSh0LCA4LCAwLCAwLCBzdGFydCwgLTEpIHx8CisJCQkJaTJjX2dldGRhdGEodCwgbGVuLCBidWYpKQorCQkJCXJldHVybiAtRUlPOworCQkJaWYgKGNvcHlfdG9fdXNlcihyZXEtPmJ1ZmZlciArIHN0YXJ0IC0gcmVxLT5zdGFydCwgYnVmLCBsZW4pKQorCQkJCXJldHVybiAtRUZBVUxUOwogCQl9CisJCXJldHVybiAwOworCX0KKworCWNhc2UgVlRYSU9DU1RPUERBVToKKwl7CisJCXZ0eF9wYWdlcmVxX3QgKnJlcSA9IGFyZzsKKworCQlpZiAocmVxLT5wZ2J1ZiA8IDAgfHwgcmVxLT5wZ2J1ZiA+PSBOVU1fREFVUykKKwkJCXJldHVybiAtRUlOVkFMOworCQl0LT52ZGF1W3JlcS0+cGdidWZdLnN0b3BwZWQgPSB0cnVlOworCQl0LT5pc19zZWFyY2hpbmdbcmVxLT5wZ2J1Zl0gPSBmYWxzZTsKKwkJcmV0dXJuIDA7CisJfQorCisJY2FzZSBWVFhJT0NQVVRQQUdFOgorCWNhc2UgVlRYSU9DU0VURElTUDoKKwljYXNlIFZUWElPQ1BVVFNUQVQ6CisJCXJldHVybiAwOworCisJY2FzZSBWVFhJT0NDTFJDQUNIRToKKwl7CisJCWlmIChpMmNfc2VuZGRhdGEodCwgMCwgTlVNX0RBVVMsIDAsIDgsIC0xKSB8fCBpMmNfc2VuZGRhdGEodCwgMTEsCisJCQknICcsICcgJywgJyAnLCAnICcsICcgJywgJyAnLAorCQkJJyAnLCAnICcsICcgJywgJyAnLCAnICcsICcgJywKKwkJCScgJywgJyAnLCAnICcsICcgJywgJyAnLCAnICcsCisJCQknICcsICcgJywgJyAnLCAnICcsICcgJywgJyAnLAorCQkJLTEpKQorCQkJcmV0dXJuIC1FSU87CisJCWlmIChpMmNfc2VuZGRhdGEodCwgMywgMHgyMCwgLTEpKQorCQkJcmV0dXJuIC1FSU87CisJCWpkZWxheSgxMCAqIENMRUFSX0RFTEFZKTsJCQkvKiBJIGhhdmUgbm8gaWRlYSBob3cgbG9uZyB3ZSBoYXZlIHRvIHdhaXQgaGVyZSAqLworCQlyZXR1cm4gMDsKKwl9CisKKwljYXNlIFZUWElPQ1NFVFZJUlQ6CisJeworCQkvKiBUaGUgU0FBNTI0OSBoYXMgdmlydHVhbC1yb3cgcmVjZXB0aW9uIHR1cm5lZCBvbiBhbHdheXMgKi8KKwkJdC0+dmlydHVhbF9tb2RlID0gKGludCkobG9uZylhcmc7CisJCXJldHVybiAwOworCX0KIAl9CiAJcmV0dXJuIC1FSU5WQUw7CiB9CkBAIC02MTYsOCArNDgzLDcgQEAKIHN0YXRpYyBpbnQgc2FhNTI0OV9pb2N0bChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSwKIAkJCSB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKIHsKLQlzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2ZCA9IHZpZGVvX2RldmRhdGEoZmlsZSk7Ci0Jc3RydWN0IHNhYTUyNDlfZGV2aWNlICp0PXZkLT5wcml2OworCXN0cnVjdCBzYWE1MjQ5X2RldmljZSAqdCA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CiAJaW50IGVycjsKIAogCWNtZCA9IHZ0eF9maXhfY29tbWFuZChjbWQpOwpAQCAtNjI5LDMyICs0OTUsMjcgQEAKIAogc3RhdGljIGludCBzYWE1MjQ5X29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCiB7Ci0Jc3RydWN0IHZpZGVvX2RldmljZSAqdmQgPSB2aWRlb19kZXZkYXRhKGZpbGUpOwotCXN0cnVjdCBzYWE1MjQ5X2RldmljZSAqdD12ZC0+cHJpdjsKLQlpbnQgZXJyLHBnYnVmOworCXN0cnVjdCBzYWE1MjQ5X2RldmljZSAqdCA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CisJaW50IHBnYnVmOwogCi0JZXJyID0gdmlkZW9fZXhjbHVzaXZlX29wZW4oaW5vZGUsZmlsZSk7Ci0JaWYgKGVyciA8IDApCi0JCXJldHVybiBlcnI7CisJaWYgKHQtPmNsaWVudCA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT0RFVjsKIAotCWlmICh0LT5jbGllbnQ9PU5VTEwpIHsKLQkJZXJyID0gLUVOT0RFVjsKLQkJZ290byBmYWlsOwotCX0KKwlpZiAodGVzdF9hbmRfc2V0X2JpdCgwLCAmdC0+aW5fdXNlKSkKKwkJcmV0dXJuIC1FQlVTWTsKIAotCWlmIChpMmNfc2VuZGRhdGEodCwgMCwgMCwgLTEpIHx8CQkvKiBTZWxlY3QgUjExICovCi0JCQkJCQkvKiBUdXJuIG9mZiBwYXJpdHkgY2hlY2tzICh3ZSBkbyB0aGlzIG91cnNlbHZlcykgKi8KKwlpZiAoaTJjX3NlbmRkYXRhKHQsIDAsIDAsIC0xKSB8fCAvKiBTZWxlY3QgUjExICovCisJCS8qIFR1cm4gb2ZmIHBhcml0eSBjaGVja3MgKHdlIGRvIHRoaXMgb3Vyc2VsdmVzKSAqLwogCQlpMmNfc2VuZGRhdGEodCwgMSwgZGlzcF9tb2Rlc1t0LT5kaXNwX21vZGVdWzBdLCAwLCAtMSkgfHwKLQkJCQkJCS8qIERpc3BsYXkgVFYtcGljdHVyZSwgbm8gdmlydHVhbCByb3dzICovCi0JCWkyY19zZW5kZGF0YSh0LCA0LCBOVU1fREFVUywgZGlzcF9tb2Rlc1t0LT5kaXNwX21vZGVdWzFdLCBkaXNwX21vZGVzW3QtPmRpc3BfbW9kZV1bMl0sIDcsIC0xKSkgLyogU2V0IGRpc3BsYXkgdG8gcGFnZSA0ICovCi0KKwkJLyogRGlzcGxheSBUVi1waWN0dXJlLCBubyB2aXJ0dWFsIHJvd3MgKi8KKwkJaTJjX3NlbmRkYXRhKHQsIDQsIE5VTV9EQVVTLCBkaXNwX21vZGVzW3QtPmRpc3BfbW9kZV1bMV0sIGRpc3BfbW9kZXNbdC0+ZGlzcF9tb2RlXVsyXSwgNywgLTEpKQorCQkvKiBTZXQgZGlzcGxheSB0byBwYWdlIDQgKi8KIAl7Ci0JCWVyciA9IC1FSU87Ci0JCWdvdG8gZmFpbDsKKwkJY2xlYXJfYml0KDAsICZ0LT5pbl91c2UpOworCQlyZXR1cm4gLUVJTzsKIAl9CiAKLQlmb3IgKHBnYnVmID0gMDsgcGdidWYgPCBOVU1fREFVUzsgcGdidWYrKykKLQl7CisJZm9yIChwZ2J1ZiA9IDA7IHBnYnVmIDwgTlVNX0RBVVM7IHBnYnVmKyspIHsKIAkJbWVtc2V0KHQtPnZkYXVbcGdidWZdLnBnYnVmLCAnICcsIHNpemVvZih0LT52ZGF1WzBdLnBnYnVmKSk7CiAJCW1lbXNldCh0LT52ZGF1W3BnYnVmXS5zcmVncywgMCwgc2l6ZW9mKHQtPnZkYXVbMF0uc3JlZ3MpKTsKIAkJbWVtc2V0KHQtPnZkYXVbcGdidWZdLmxhc3RzdGF0LCAwLCBzaXplb2YodC0+dmRhdVswXS5sYXN0c3RhdCkpOwpAQCAtNjY1LDM5ICs1MjYsMjAgQEAKIAl9CiAJdC0+dmlydHVhbF9tb2RlID0gZmFsc2U7CiAJcmV0dXJuIDA7Ci0KLSBmYWlsOgotCXZpZGVvX2V4Y2x1c2l2ZV9yZWxlYXNlKGlub2RlLGZpbGUpOwotCXJldHVybiBlcnI7CiB9CiAKIAogCiBzdGF0aWMgaW50IHNhYTUyNDlfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKLQlzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2ZCA9IHZpZGVvX2RldmRhdGEoZmlsZSk7Ci0Jc3RydWN0IHNhYTUyNDlfZGV2aWNlICp0PXZkLT5wcml2OworCXN0cnVjdCBzYWE1MjQ5X2RldmljZSAqdCA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CisKIAlpMmNfc2VuZGRhdGEodCwgMSwgMHgyMCwgLTEpOwkJLyogVHVybiBvZmYgQ0NUICovCiAJaTJjX3NlbmRkYXRhKHQsIDUsIDMsIDMsIC0xKTsJCS8qIFR1cm4gb2ZmIFRWLWRpc3BsYXkgKi8KLQl2aWRlb19leGNsdXNpdmVfcmVsZWFzZShpbm9kZSxmaWxlKTsKKwljbGVhcl9iaXQoMCwgJnQtPmluX3VzZSk7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgX19pbml0IGluaXRfc2FhXzUyNDkgKHZvaWQpCi17Ci0JcHJpbnRrKEtFUk5fSU5GTyAiU0FBNTI0OSBkcml2ZXIgKCIgSUZfTkFNRSAiIGludGVyZmFjZSkgZm9yIFZpZGVvVGV4dCB2ZXJzaW9uICVkLiVkXG4iLAotCQkJVlRYX1ZFUl9NQUosIFZUWF9WRVJfTUlOKTsKLQlyZXR1cm4gaTJjX2FkZF9kcml2ZXIoJmkyY19kcml2ZXJfdmlkZW90ZXh0KTsKLX0KLQotc3RhdGljIHZvaWQgX19leGl0IGNsZWFudXBfc2FhXzUyNDkgKHZvaWQpCi17Ci0JaTJjX2RlbF9kcml2ZXIoJmkyY19kcml2ZXJfdmlkZW90ZXh0KTsKLX0KLQotbW9kdWxlX2luaXQoaW5pdF9zYWFfNTI0OSk7Ci1tb2R1bGVfZXhpdChjbGVhbnVwX3NhYV81MjQ5KTsKLQogc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgc2FhX2ZvcHMgPSB7CiAJLm93bmVyCQk9IFRISVNfTU9EVUxFLAogCS5vcGVuCQk9IHNhYTUyNDlfb3BlbiwKQEAgLTcxMSw4ICs1NTMsODQgQEAKIAogc3RhdGljIHN0cnVjdCB2aWRlb19kZXZpY2Ugc2FhX3RlbXBsYXRlID0KIHsKLQkubmFtZQkJPSBJRl9OQU1FLAorCS5uYW1lCQk9ICJzYWE1MjQ5IiwKIAkuZm9wcyAgICAgICAgICAgPSAmc2FhX2ZvcHMsCisJLnJlbGVhc2UgCT0gdmlkZW9fZGV2aWNlX3JlbGVhc2UsCiB9OwogCi1NT0RVTEVfTElDRU5TRSgiR1BMIik7CisvKiBBZGRyZXNzZXMgdG8gc2NhbiAqLworc3RhdGljIHVuc2lnbmVkIHNob3J0IG5vcm1hbF9pMmNbXSA9IHsgMHgyMiA+PiAxLCBJMkNfQ0xJRU5UX0VORCB9OworCitJMkNfQ0xJRU5UX0lOU01PRDsKKworc3RhdGljIGludCBzYWE1MjQ5X3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCisJCQljb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpCit7CisJaW50IHBnYnVmOworCWludCBlcnI7CisJc3RydWN0IHZpZGVvX2RldmljZSAqdmQ7CisJc3RydWN0IHNhYTUyNDlfZGV2aWNlICp0OworCisJdjRsX2luZm8oY2xpZW50LCAiY2hpcCBmb3VuZCBAIDB4JXggKCVzKVxuIiwKKwkJCWNsaWVudC0+YWRkciA8PCAxLCBjbGllbnQtPmFkYXB0ZXItPm5hbWUpOworCXY0bF9pbmZvKGNsaWVudCwgIlZpZGVvVGV4dCB2ZXJzaW9uICVkLiVkXG4iLAorCQkJVlRYX1ZFUl9NQUosIFZUWF9WRVJfTUlOKTsKKwl0ID0ga3phbGxvYyhzaXplb2YoKnQpLCBHRlBfS0VSTkVMKTsKKwlpZiAodCA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKwltdXRleF9pbml0KCZ0LT5sb2NrKTsKKworCS8qIE5vdyBjcmVhdGUgYSB2aWRlbzRsaW51eCBkZXZpY2UgKi8KKwl2ZCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCB2aWRlb19kZXZpY2UpLCBHRlBfS0VSTkVMKTsKKwlpZiAodmQgPT0gTlVMTCkgeworCQlrZnJlZShjbGllbnQpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJaTJjX3NldF9jbGllbnRkYXRhKGNsaWVudCwgdmQpOworCW1lbWNweSh2ZCwgJnNhYV90ZW1wbGF0ZSwgc2l6ZW9mKCp2ZCkpOworCisJZm9yIChwZ2J1ZiA9IDA7IHBnYnVmIDwgTlVNX0RBVVM7IHBnYnVmKyspIHsKKwkJbWVtc2V0KHQtPnZkYXVbcGdidWZdLnBnYnVmLCAnICcsIHNpemVvZih0LT52ZGF1WzBdLnBnYnVmKSk7CisJCW1lbXNldCh0LT52ZGF1W3BnYnVmXS5zcmVncywgMCwgc2l6ZW9mKHQtPnZkYXVbMF0uc3JlZ3MpKTsKKwkJbWVtc2V0KHQtPnZkYXVbcGdidWZdLmxhc3RzdGF0LCAwLCBzaXplb2YodC0+dmRhdVswXS5sYXN0c3RhdCkpOworCQl0LT52ZGF1W3BnYnVmXS5leHBpcmUgPSAwOworCQl0LT52ZGF1W3BnYnVmXS5jbHJmb3VuZCA9IHRydWU7CisJCXQtPnZkYXVbcGdidWZdLnN0b3BwZWQgPSB0cnVlOworCQl0LT5pc19zZWFyY2hpbmdbcGdidWZdID0gZmFsc2U7CisJfQorCXZpZGVvX3NldF9kcnZkYXRhKHZkLCB0KTsKKworCS8qIFJlZ2lzdGVyIGl0ICovCisJZXJyID0gdmlkZW9fcmVnaXN0ZXJfZGV2aWNlKHZkLCBWRkxfVFlQRV9WVFgsIC0xKTsKKwlpZiAoZXJyIDwgMCkgeworCQlrZnJlZSh0KTsKKwkJa2ZyZWUodmQpOworCQlyZXR1cm4gZXJyOworCX0KKwl0LT5jbGllbnQgPSBjbGllbnQ7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2FhNTI0OV9yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKK3sKKwlzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2ZCA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCisJdmlkZW9fdW5yZWdpc3Rlcl9kZXZpY2UodmQpOworCWtmcmVlKHZpZGVvX2dldF9kcnZkYXRhKHZkKSk7CisJa2ZyZWUodmQpOworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgc2FhNTI0OV9pZFtdID0geworCXsgInNhYTUyNDkiLCAwIH0sCisJeyB9Cit9OworTU9EVUxFX0RFVklDRV9UQUJMRShpMmMsIHNhYTUyNDlfaWQpOworCitzdGF0aWMgc3RydWN0IHY0bDJfaTJjX2RyaXZlcl9kYXRhIHY0bDJfaTJjX2RhdGEgPSB7CisJLm5hbWUgPSAic2FhNTI0OSIsCisJLmRyaXZlcmlkID0gSTJDX0RSSVZFUklEX1NBQTUyNDksCisJLnByb2JlID0gc2FhNTI0OV9wcm9iZSwKKwkucmVtb3ZlID0gc2FhNTI0OV9yZW1vdmUsCisJLmlkX3RhYmxlID0gc2FhNTI0OV9pZCwKK307CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMTAuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzExMC5jCmluZGV4IDRhYTgyYjMuLmFkZjJiYTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzExMC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzExMC5jCkBAIC0zMSwzNiArMzEsMjQgQEAKICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC93YWl0Lmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxsaW51eC92aWRlb2Rldi5oPgorI2luY2x1ZGUgPGxpbnV4L3ZpZGVvX2RlY29kZXIuaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWNvbW1vbi5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItaTJjLWRydi1sZWdhY3kuaD4KIAogTU9EVUxFX0RFU0NSSVBUSU9OKCJQaGlsaXBzIFNBQTcxMTAgdmlkZW8gZGVjb2RlciBkcml2ZXIiKTsKIE1PRFVMRV9BVVRIT1IoIlBhdWxpbmUgTWlkZGVsaW5rIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKLSNpbmNsdWRlIDxsaW51eC9pMmMuaD4KLQotI2RlZmluZSBJMkNfTkFNRShzKSAocyktPm5hbWUKLQotI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Lmg+Ci0jaW5jbHVkZSA8bWVkaWEvdjRsMi1jb21tb24uaD4KLSNpbmNsdWRlIDxsaW51eC92aWRlb19kZWNvZGVyLmg+Ci0KIHN0YXRpYyBpbnQgZGVidWc7CiBtb2R1bGVfcGFyYW0oZGVidWcsIGludCwgMCk7CiBNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiRGVidWcgbGV2ZWwgKDAtMSkiKTsKIAotI2RlZmluZSBkcHJpbnRrKG51bSwgZm9ybWF0LCBhcmdzLi4uKSBcCi0JZG8geyBcCi0JCWlmIChkZWJ1ZyA+PSBudW0pIFwKLQkJCXByaW50ayhmb3JtYXQsICMjYXJncyk7IFwKLQl9IHdoaWxlICgwKQotCiAjZGVmaW5lIFNBQTcxMTBfTUFYX0lOUFVUCTkJLyogNiBDVkJTLCAzIFNWSFMgKi8KICNkZWZpbmUgU0FBNzExMF9NQVhfT1VUUFVUCTAJLyogaXRzIGEgZGVjb2RlciBvbmx5ICovCiAKLSNkZWZpbmUJSTJDX1NBQTcxMTAJCTB4OUMJLyogb3IgMHg5RSAqLwotCiAjZGVmaW5lIFNBQTcxMTBfTlJfUkVHCQkweDM1CiAKIHN0cnVjdCBzYWE3MTEwIHsKQEAgLTgxLDEwICs2OSw3IEBACiAvKiBJMkMgc3VwcG9ydCBmdW5jdGlvbnMJCQkJCQkgICAqLwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAotc3RhdGljIGludAotc2FhNzExMF93cml0ZSAoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKLQkgICAgICAgdTggICAgICAgICAgICAgICAgIHJlZywKLQkgICAgICAgdTggICAgICAgICAgICAgICAgIHZhbHVlKQorc3RhdGljIGludCBzYWE3MTEwX3dyaXRlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHU4IHJlZywgdTggdmFsdWUpCiB7CiAJc3RydWN0IHNhYTcxMTAgKmRlY29kZXIgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKIApAQCAtOTIsMTAgKzc3LDcgQEAKIAlyZXR1cm4gaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsIHJlZywgdmFsdWUpOwogfQogCi1zdGF0aWMgaW50Ci1zYWE3MTEwX3dyaXRlX2Jsb2NrIChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAotCQkgICAgIGNvbnN0IHU4ICAgICAgICAgICpkYXRhLAotCQkgICAgIHVuc2lnbmVkIGludCAgICAgICBsZW4pCitzdGF0aWMgaW50IHNhYTcxMTBfd3JpdGVfYmxvY2soc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgY29uc3QgdTggKmRhdGEsIHVuc2lnbmVkIGludCBsZW4pCiB7CiAJaW50IHJldCA9IC0xOwogCXU4IHJlZyA9ICpkYXRhOwkJLyogZmlyc3QgcmVnaXN0ZXIgdG8gd3JpdGUgdG8gKi8KQEAgLTExNSw4ICs5Nyw4IEBACiAJCW1lbWNweShkZWNvZGVyLT5yZWcgKyByZWcsIGRhdGEgKyAxLCBsZW4gLSAxKTsKIAl9IGVsc2UgewogCQlmb3IgKCsrZGF0YSwgLS1sZW47IGxlbjsgbGVuLS0pIHsKLQkJCWlmICgocmV0ID0gc2FhNzExMF93cml0ZShjbGllbnQsIHJlZysrLAotCQkJCQkJICpkYXRhKyspKSA8IDApCisJCQlyZXQgPSBzYWE3MTEwX3dyaXRlKGNsaWVudCwgcmVnKyssICpkYXRhKyspOworCQkJaWYgKHJldCA8IDApCiAJCQkJYnJlYWs7CiAJCX0KIAl9CkBAIC0xMjQsOCArMTA2LDcgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW5saW5lIGludAotc2FhNzExMF9yZWFkIChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQorc3RhdGljIGlubGluZSBpbnQgc2FhNzExMF9yZWFkKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCiB7CiAJcmV0dXJuIGkyY19zbWJ1c19yZWFkX2J5dGUoY2xpZW50KTsKIH0KQEAgLTEzOCw5ICsxMTksNyBAQAogI2RlZmluZSBGUkVTUF8wNkhfU1ZJREVPIDB4ODMJLy8weEMwCiAKIAotc3RhdGljIGludAotc2FhNzExMF9zZWxtdXggKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCi0JCWludCAgICAgICAgICAgICAgICBjaGFuKQorc3RhdGljIGludCBzYWE3MTEwX3NlbG11eChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBpbnQgY2hhbikKIHsKIAlzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBtb2Rlc1s5XVs4XSA9IHsKIAkJLyogbW9kZSAwICovCkBAIC0xOTcsOCArMTc2LDcgQEAKIAkvKiAweDMwICovIDB4NDQsIDB4NzEsIDB4MDIsIDB4OEMsIDB4MDIKIH07CiAKLXN0YXRpYyBpbnQKLWRldGVybWluZV9ub3JtIChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQorc3RhdGljIGludCBkZXRlcm1pbmVfbm9ybShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQogewogCURFRklORV9XQUlUKHdhaXQpOwogCXN0cnVjdCBzYWE3MTEwICpkZWNvZGVyID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CkBAIC0yMTIsMjkgKzE5MCwyMyBAQAogCWZpbmlzaF93YWl0KCZkZWNvZGVyLT53cSwgJndhaXQpOwogCXN0YXR1cyA9IHNhYTcxMTBfcmVhZChjbGllbnQpOwogCWlmIChzdGF0dXMgJiAweDQwKSB7Ci0JCWRwcmludGsoMSwgS0VSTl9JTkZPICIlczogc3RhdHVzPTB4JTAyeCAobm8gc2lnbmFsKVxuIiwKLQkJCUkyQ19OQU1FKGNsaWVudCksIHN0YXR1cyk7CisJCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgInN0YXR1cz0weCUwMnggKG5vIHNpZ25hbClcbiIsIHN0YXR1cyk7CiAJCXJldHVybiBkZWNvZGVyLT5ub3JtOwkvLyBubyBjaGFuZ2UKIAl9CiAJaWYgKChzdGF0dXMgJiAzKSA9PSAwKSB7CiAJCXNhYTcxMTBfd3JpdGUoY2xpZW50LCAweDA2LCAweDgzKTsKIAkJaWYgKHN0YXR1cyAmIDB4MjApIHsKLQkJCWRwcmludGsoMSwKLQkJCQlLRVJOX0lORk8KLQkJCQkiJXM6IHN0YXR1cz0weCUwMnggKE5UU0Mvbm8gY29sb3IpXG4iLAotCQkJCUkyQ19OQU1FKGNsaWVudCksIHN0YXR1cyk7CisJCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJzdGF0dXM9MHglMDJ4IChOVFNDL25vIGNvbG9yKVxuIiwgc3RhdHVzKTsKIAkJCS8vc2FhNzExMF93cml0ZShjbGllbnQsMHgyRSwweDgxKTsKIAkJCXJldHVybiBWSURFT19NT0RFX05UU0M7CiAJCX0KLQkJZHByaW50aygxLCBLRVJOX0lORk8gIiVzOiBzdGF0dXM9MHglMDJ4IChQQUwvbm8gY29sb3IpXG4iLAotCQkJSTJDX05BTUUoY2xpZW50KSwgc3RhdHVzKTsKKwkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAic3RhdHVzPTB4JTAyeCAoUEFML25vIGNvbG9yKVxuIiwgc3RhdHVzKTsKIAkJLy9zYWE3MTEwX3dyaXRlKGNsaWVudCwweDJFLDB4OUEpOwogCQlyZXR1cm4gVklERU9fTU9ERV9QQUw7CiAJfQogCS8vc2FhNzExMF93cml0ZShjbGllbnQsMHgwNiwweDAzKTsKIAlpZiAoc3RhdHVzICYgMHgyMCkgewkvKiA2MEh6ICovCi0JCWRwcmludGsoMSwgS0VSTl9JTkZPICIlczogc3RhdHVzPTB4JTAyeCAoTlRTQylcbiIsCi0JCQlJMkNfTkFNRShjbGllbnQpLCBzdGF0dXMpOworCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJzdGF0dXM9MHglMDJ4IChOVFNDKVxuIiwgc3RhdHVzKTsKIAkJc2FhNzExMF93cml0ZShjbGllbnQsIDB4MEQsIDB4ODYpOwogCQlzYWE3MTEwX3dyaXRlKGNsaWVudCwgMHgwRiwgMHg1MCk7CiAJCXNhYTcxMTBfd3JpdGUoY2xpZW50LCAweDExLCAweDJDKTsKQEAgLTI1NCwxMyArMjI2LDExIEBACiAKIAlzdGF0dXMgPSBzYWE3MTEwX3JlYWQoY2xpZW50KTsKIAlpZiAoKHN0YXR1cyAmIDB4MDMpID09IDB4MDEpIHsKLQkJZHByaW50aygxLCBLRVJOX0lORk8gIiVzOiBzdGF0dXM9MHglMDJ4IChTRUNBTSlcbiIsCi0JCQlJMkNfTkFNRShjbGllbnQpLCBzdGF0dXMpOworCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJzdGF0dXM9MHglMDJ4IChTRUNBTSlcbiIsIHN0YXR1cyk7CiAJCXNhYTcxMTBfd3JpdGUoY2xpZW50LCAweDBELCAweDg3KTsKIAkJcmV0dXJuIFZJREVPX01PREVfU0VDQU07CiAJfQotCWRwcmludGsoMSwgS0VSTl9JTkZPICIlczogc3RhdHVzPTB4JTAyeCAoUEFMKVxuIiwgSTJDX05BTUUoY2xpZW50KSwKLQkJc3RhdHVzKTsKKwl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJzdGF0dXM9MHglMDJ4IChQQUwpXG4iLCBzdGF0dXMpOwogCXJldHVybiBWSURFT19NT0RFX1BBTDsKIH0KIApAQCAtMjg2LDggKzI1Niw4IEBACiAJCSAgICBWSURFT19ERUNPREVSX1NFQ0FNIHwgVklERU9fREVDT0RFUl9BVVRPOwogCQlkYy0+aW5wdXRzID0gU0FBNzExMF9NQVhfSU5QVVQ7CiAJCWRjLT5vdXRwdXRzID0gU0FBNzExMF9NQVhfT1VUUFVUOwotCX0KIAkJYnJlYWs7CisJfQogCiAJY2FzZSBERUNPREVSX0dFVF9TVEFUVVM6CiAJewpAQCAtMjk1LDggKzI2NSw4IEBACiAJCWludCByZXMgPSAwOwogCiAJCXN0YXR1cyA9IHNhYTcxMTBfcmVhZChjbGllbnQpOwotCQlkcHJpbnRrKDEsIEtFUk5fSU5GTyAiJXM6IHN0YXR1cz0weCUwMnggbm9ybT0lZFxuIiwKLQkJCUkyQ19OQU1FKGNsaWVudCksIHN0YXR1cywgZGVjb2Rlci0+bm9ybSk7CisJCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgInN0YXR1cz0weCUwMnggbm9ybT0lZFxuIiwKKwkJCSAgICAgICBzdGF0dXMsIGRlY29kZXItPm5vcm0pOwogCQlpZiAoIShzdGF0dXMgJiAweDQwKSkKIAkJCXJlcyB8PSBERUNPREVSX1NUQVRVU19HT09EOwogCQlpZiAoc3RhdHVzICYgMHgwMykKQEAgLTMxNCw4ICsyODQsOCBAQAogCQkJYnJlYWs7CiAJCX0KIAkJKihpbnQgKikgYXJnID0gcmVzOwotCX0KIAkJYnJlYWs7CisJfQogCiAJY2FzZSBERUNPREVSX1NFVF9OT1JNOgogCQl2ID0gKihpbnQgKikgYXJnOwpAQCAtMzI4LDM0ICsyOTgsMjQgQEAKIAkJCQlzYWE3MTEwX3dyaXRlKGNsaWVudCwgMHgwRiwgMHg1MCk7CiAJCQkJc2FhNzExMF93cml0ZShjbGllbnQsIDB4MTEsIDB4MkMpOwogCQkJCS8vc2FhNzExMF93cml0ZShjbGllbnQsIDB4MkUsIDB4ODEpOwotCQkJCWRwcmludGsoMSwKLQkJCQkJS0VSTl9JTkZPICIlczogc3dpdGNoZWQgdG8gTlRTQ1xuIiwKLQkJCQkJSTJDX05BTUUoY2xpZW50KSk7CisJCQkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAic3dpdGNoZWQgdG8gTlRTQ1xuIik7CiAJCQkJYnJlYWs7CiAJCQljYXNlIFZJREVPX01PREVfUEFMOgogCQkJCXNhYTcxMTBfd3JpdGUoY2xpZW50LCAweDBELCAweDg2KTsKIAkJCQlzYWE3MTEwX3dyaXRlKGNsaWVudCwgMHgwRiwgMHgxMCk7CiAJCQkJc2FhNzExMF93cml0ZShjbGllbnQsIDB4MTEsIDB4NTkpOwogCQkJCS8vc2FhNzExMF93cml0ZShjbGllbnQsIDB4MkUsIDB4OUEpOwotCQkJCWRwcmludGsoMSwKLQkJCQkJS0VSTl9JTkZPICIlczogc3dpdGNoZWQgdG8gUEFMXG4iLAotCQkJCQlJMkNfTkFNRShjbGllbnQpKTsKKwkJCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJzd2l0Y2hlZCB0byBQQUxcbiIpOwogCQkJCWJyZWFrOwogCQkJY2FzZSBWSURFT19NT0RFX1NFQ0FNOgogCQkJCXNhYTcxMTBfd3JpdGUoY2xpZW50LCAweDBELCAweDg3KTsKIAkJCQlzYWE3MTEwX3dyaXRlKGNsaWVudCwgMHgwRiwgMHgxMCk7CiAJCQkJc2FhNzExMF93cml0ZShjbGllbnQsIDB4MTEsIDB4NTkpOwogCQkJCS8vc2FhNzExMF93cml0ZShjbGllbnQsIDB4MkUsIDB4OUEpOwotCQkJCWRwcmludGsoMSwKLQkJCQkJS0VSTl9JTkZPCi0JCQkJCSIlczogc3dpdGNoZWQgdG8gU0VDQU1cbiIsCi0JCQkJCUkyQ19OQU1FKGNsaWVudCkpOworCQkJCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgInN3aXRjaGVkIHRvIFNFQ0FNXG4iKTsKIAkJCQlicmVhazsKIAkJCWNhc2UgVklERU9fTU9ERV9BVVRPOgotCQkJCWRwcmludGsoMSwKLQkJCQkJS0VSTl9JTkZPCi0JCQkJCSIlczogVFYgc3RhbmRhcmQgZGV0ZWN0aW9uLi4uXG4iLAotCQkJCQlJMkNfTkFNRShjbGllbnQpKTsKKwkJCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJzd2l0Y2hlZCB0byBBVVRPXG4iKTsKIAkJCQlkZWNvZGVyLT5ub3JtID0gZGV0ZXJtaW5lX25vcm0oY2xpZW50KTsKIAkJCQkqKGludCAqKSBhcmcgPSBkZWNvZGVyLT5ub3JtOwogCQkJCWJyZWFrOwpAQCAtMzY4LDE1ICszMjgsMTIgQEAKIAljYXNlIERFQ09ERVJfU0VUX0lOUFVUOgogCQl2ID0gKihpbnQgKikgYXJnOwogCQlpZiAodiA8IDAgfHwgdiA+IFNBQTcxMTBfTUFYX0lOUFVUKSB7Ci0JCQlkcHJpbnRrKDEsCi0JCQkJS0VSTl9JTkZPICIlczogaW5wdXQ9JWQgbm90IGF2YWlsYWJsZVxuIiwKLQkJCQlJMkNfTkFNRShjbGllbnQpLCB2KTsKKwkJCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgImlucHV0PSVkIG5vdCBhdmFpbGFibGVcbiIsIHYpOwogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KIAkJaWYgKGRlY29kZXItPmlucHV0ICE9IHYpIHsKIAkJCXNhYTcxMTBfc2VsbXV4KGNsaWVudCwgdik7Ci0JCQlkcHJpbnRrKDEsIEtFUk5fSU5GTyAiJXM6IHN3aXRjaGVkIHRvIGlucHV0PSVkXG4iLAotCQkJCUkyQ19OQU1FKGNsaWVudCksIHYpOworCQkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAic3dpdGNoZWQgdG8gaW5wdXQ9JWRcbiIsIHYpOwogCQl9CiAJCWJyZWFrOwogCkBAIC0zOTIsOCArMzQ5LDcgQEAKIAkJaWYgKGRlY29kZXItPmVuYWJsZSAhPSB2KSB7CiAJCQlkZWNvZGVyLT5lbmFibGUgPSB2OwogCQkJc2FhNzExMF93cml0ZShjbGllbnQsIDB4MEUsIHYgPyAweDE4IDogMHg4MCk7Ci0JCQlkcHJpbnRrKDEsIEtFUk5fSU5GTyAiJXM6IFlVViAlc1xuIiwgSTJDX05BTUUoY2xpZW50KSwKLQkJCQl2ID8gIm9uIiA6ICJvZmYiKTsKKwkJCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgIllVViAlc1xuIiwgdiA/ICJvbiIgOiAib2ZmIik7CiAJCX0KIAkJYnJlYWs7CiAKQEAgLTQyMywyMyArMzc5LDIzIEBACiAJCQlzYWE3MTEwX3dyaXRlKGNsaWVudCwgMHgwNywKIAkJCQkgICAgICAoZGVjb2Rlci0+aHVlID4+IDgpIC0gMTI4KTsKIAkJfQotCX0KIAkJYnJlYWs7CisJfQogCiAJY2FzZSBERUNPREVSX0RVTVA6CisJCWlmICghZGVidWcpCisJCQlicmVhazsKIAkJZm9yICh2ID0gMDsgdiA8IFNBQTcxMTBfTlJfUkVHOyB2ICs9IDE2KSB7CiAJCQlpbnQgajsKLQkJCWRwcmludGsoMSwgS0VSTl9ERUJVRyAiJXM6ICUwMng6IiwgSTJDX05BTUUoY2xpZW50KSwKLQkJCQl2KTsKKwkJCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgIiUwMng6Iiwgdik7CiAJCQlmb3IgKGogPSAwOyBqIDwgMTYgJiYgdiArIGogPCBTQUE3MTEwX05SX1JFRzsgaisrKQotCQkJCWRwcmludGsoMSwgIiAlMDJ4IiwgZGVjb2Rlci0+cmVnW3YgKyBqXSk7Ci0JCQlkcHJpbnRrKDEsICJcbiIpOworCQkJCXByaW50ayhLRVJOX0NPTlQgIiAlMDJ4IiwgZGVjb2Rlci0+cmVnW3YgKyBqXSk7CisJCQlwcmludGsoS0VSTl9DT05UICJcbiIpOwogCQl9CiAJCWJyZWFrOwogCiAJZGVmYXVsdDoKLQkJZHByaW50aygxLCBLRVJOX0lORk8gInVua25vd24gc2FhNzExMF9jb21tYW5kPz8oJWQpXG4iLAotCQkJY21kKTsKKwkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAidW5rbm93biBjb21tYW5kICUwOHhcbiIsIGNtZCk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAlyZXR1cm4gMDsKQEAgLTQ1MSw1NSArNDA3LDI4IEBACiAgKiBHZW5lcmljIGkyYyBwcm9iZQogICogY29uY2VybmluZyB0aGUgYWRkcmVzc2VzOiBpMmMgd2FudHMgNyBiaXQgKHdpdGhvdXQgdGhlIHIvdyBiaXQpLCBzbyAnPj4xJwogICovCi1zdGF0aWMgdW5zaWduZWQgc2hvcnQgbm9ybWFsX2kyY1tdID0gewotCUkyQ19TQUE3MTEwID4+IDEsCi0JKEkyQ19TQUE3MTEwID4+IDEpICsgMSwKLQlJMkNfQ0xJRU5UX0VORAotfTsKIAotc3RhdGljIHVuc2lnbmVkIHNob3J0IGlnbm9yZSA9IEkyQ19DTElFTlRfRU5EOworc3RhdGljIHVuc2lnbmVkIHNob3J0IG5vcm1hbF9pMmNbXSA9IHsgMHg5YyA+PiAxLCAweDllID4+IDEsIEkyQ19DTElFTlRfRU5EIH07CiAKLXN0YXRpYyBzdHJ1Y3QgaTJjX2NsaWVudF9hZGRyZXNzX2RhdGEgYWRkcl9kYXRhID0gewotCS5ub3JtYWxfaTJjCQk9IG5vcm1hbF9pMmMsCi0JLnByb2JlCQkJPSAmaWdub3JlLAotCS5pZ25vcmUJCQk9ICZpZ25vcmUsCi19OworSTJDX0NMSUVOVF9JTlNNT0Q7CiAKLXN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBpMmNfZHJpdmVyX3NhYTcxMTA7Ci0KLXN0YXRpYyBpbnQKLXNhYTcxMTBfZGV0ZWN0X2NsaWVudCAoc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyLAotCQkgICAgICAgaW50ICAgICAgICAgICAgICAgICBhZGRyZXNzLAotCQkgICAgICAgaW50ICAgICAgICAgICAgICAgICBraW5kKQorc3RhdGljIGludCBzYWE3MTEwX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCisJCQljb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpCiB7Ci0Jc3RydWN0IGkyY19jbGllbnQgKmNsaWVudDsKIAlzdHJ1Y3Qgc2FhNzExMCAqZGVjb2RlcjsKIAlpbnQgcnY7CiAKLQlkcHJpbnRrKDEsCi0JCUtFUk5fSU5GTwotCQkic2FhNzExMC5jOiBkZXRlY3Rpbmcgc2FhNzExMCBjbGllbnQgb24gYWRkcmVzcyAweCV4XG4iLAotCQlhZGRyZXNzIDw8IDEpOwotCiAJLyogQ2hlY2sgaWYgdGhlIGFkYXB0ZXIgc3VwcG9ydHMgdGhlIG5lZWRlZCBmZWF0dXJlcyAqLwotCWlmICghaTJjX2NoZWNrX2Z1bmN0aW9uYWxpdHkKLQkgICAgKGFkYXB0ZXIsCi0JICAgICBJMkNfRlVOQ19TTUJVU19SRUFEX0JZVEUgfCBJMkNfRlVOQ19TTUJVU19XUklURV9CWVRFX0RBVEEpKQotCQlyZXR1cm4gMDsKKwlpZiAoIWkyY19jaGVja19mdW5jdGlvbmFsaXR5KGNsaWVudC0+YWRhcHRlciwKKwkJSTJDX0ZVTkNfU01CVVNfUkVBRF9CWVRFIHwgSTJDX0ZVTkNfU01CVVNfV1JJVEVfQllURV9EQVRBKSkKKwkJcmV0dXJuIC1FTk9ERVY7CiAKLQljbGllbnQgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgaTJjX2NsaWVudCksIEdGUF9LRVJORUwpOwotCWlmICghY2xpZW50KQotCQlyZXR1cm4gLUVOT01FTTsKLQljbGllbnQtPmFkZHIgPSBhZGRyZXNzOwotCWNsaWVudC0+YWRhcHRlciA9IGFkYXB0ZXI7Ci0JY2xpZW50LT5kcml2ZXIgPSAmaTJjX2RyaXZlcl9zYWE3MTEwOwotCXN0cmxjcHkoSTJDX05BTUUoY2xpZW50KSwgInNhYTcxMTAiLCBzaXplb2YoSTJDX05BTUUoY2xpZW50KSkpOworCXY0bF9pbmZvKGNsaWVudCwgImNoaXAgZm91bmQgQCAweCV4ICglcylcbiIsCisJCQljbGllbnQtPmFkZHIgPDwgMSwgY2xpZW50LT5hZGFwdGVyLT5uYW1lKTsKIAogCWRlY29kZXIgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgc2FhNzExMCksIEdGUF9LRVJORUwpOwotCWlmICghZGVjb2RlcikgewotCQlrZnJlZShjbGllbnQpOworCWlmICghZGVjb2RlcikKIAkJcmV0dXJuIC1FTk9NRU07Ci0JfQogCWRlY29kZXItPm5vcm0gPSBWSURFT19NT0RFX1BBTDsKIAlkZWNvZGVyLT5pbnB1dCA9IDA7CiAJZGVjb2Rlci0+ZW5hYmxlID0gMTsKQEAgLTUxMCwxOCArNDM5LDEwIEBACiAJaW5pdF93YWl0cXVldWVfaGVhZCgmZGVjb2Rlci0+d3EpOwogCWkyY19zZXRfY2xpZW50ZGF0YShjbGllbnQsIGRlY29kZXIpOwogCi0JcnYgPSBpMmNfYXR0YWNoX2NsaWVudChjbGllbnQpOwotCWlmIChydikgewotCQlrZnJlZShjbGllbnQpOwotCQlrZnJlZShkZWNvZGVyKTsKLQkJcmV0dXJuIHJ2OwotCX0KLQogCXJ2ID0gc2FhNzExMF93cml0ZV9ibG9jayhjbGllbnQsIGluaXRzZXEsIHNpemVvZihpbml0c2VxKSk7Ci0JaWYgKHJ2IDwgMCkKLQkJZHByaW50aygxLCBLRVJOX0VSUiAiJXNfYXR0YWNoOiBpbml0IHN0YXR1cyAlZFxuIiwKLQkJCUkyQ19OQU1FKGNsaWVudCksIHJ2KTsKLQllbHNlIHsKKwlpZiAocnYgPCAwKSB7CisJCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgImluaXQgc3RhdHVzICVkXG4iLCBydik7CisJfSBlbHNlIHsKIAkJaW50IHZlciwgc3RhdHVzOwogCQlzYWE3MTEwX3dyaXRlKGNsaWVudCwgMHgyMSwgMHgxMCk7CiAJCXNhYTcxMTBfd3JpdGUoY2xpZW50LCAweDBlLCAweDE4KTsKQEAgLTUzMCwxMCArNDUxLDggQEAKIAkJc2FhNzExMF93cml0ZShjbGllbnQsIDB4MEQsIDB4MDYpOwogCQkvL21kZWxheSgxNTApOwogCQlzdGF0dXMgPSBzYWE3MTEwX3JlYWQoY2xpZW50KTsKLQkJZHByaW50aygxLAotCQkJS0VSTl9JTkZPCi0JCQkiJXNfYXR0YWNoOiBTQUE3MTEwQSB2ZXJzaW9uICV4IGF0IDB4JTAyeCwgc3RhdHVzPTB4JTAyeFxuIiwKLQkJCUkyQ19OQU1FKGNsaWVudCksIHZlciwgY2xpZW50LT5hZGRyIDw8IDEsIHN0YXR1cyk7CisJCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgInZlcnNpb24gJXgsIHN0YXR1cz0weCUwMnhcbiIsCisJCQkgICAgICAgdmVyLCBzdGF0dXMpOwogCQlzYWE3MTEwX3dyaXRlKGNsaWVudCwgMHgwRCwgMHg4Nik7CiAJCXNhYTcxMTBfd3JpdGUoY2xpZW50LCAweDBGLCAweDEwKTsKIAkJc2FhNzExMF93cml0ZShjbGllbnQsIDB4MTEsIDB4NTkpOwpAQCAtNTQ3LDU4ICs0NjYsMjUgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludAotc2FhNzExMF9hdHRhY2hfYWRhcHRlciAoc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyKQorc3RhdGljIGludCBzYWE3MTEwX3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQogewotCWRwcmludGsoMSwKLQkJS0VSTl9JTkZPCi0JCSJzYWE3MTEwLmM6IHN0YXJ0aW5nIHByb2JlIGZvciBhZGFwdGVyICVzICgweCV4KVxuIiwKLQkJSTJDX05BTUUoYWRhcHRlciksIGFkYXB0ZXItPmlkKTsKLQlyZXR1cm4gaTJjX3Byb2JlKGFkYXB0ZXIsICZhZGRyX2RhdGEsICZzYWE3MTEwX2RldGVjdF9jbGllbnQpOwotfQotCi1zdGF0aWMgaW50Ci1zYWE3MTEwX2RldGFjaF9jbGllbnQgKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCi17Ci0Jc3RydWN0IHNhYTcxMTAgKmRlY29kZXIgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKLQlpbnQgZXJyOwotCi0JZXJyID0gaTJjX2RldGFjaF9jbGllbnQoY2xpZW50KTsKLQlpZiAoZXJyKSB7Ci0JCXJldHVybiBlcnI7Ci0JfQotCi0Ja2ZyZWUoZGVjb2Rlcik7Ci0Ja2ZyZWUoY2xpZW50KTsKLQorCWtmcmVlKGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpKTsKIAlyZXR1cm4gMDsKIH0KIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAotc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIGkyY19kcml2ZXJfc2FhNzExMCA9IHsKLQkuZHJpdmVyID0gewotCQkubmFtZSA9ICJzYWE3MTEwIiwKLQl9LAotCi0JLmlkID0gSTJDX0RSSVZFUklEX1NBQTcxMTAsCi0KLQkuYXR0YWNoX2FkYXB0ZXIgPSBzYWE3MTEwX2F0dGFjaF9hZGFwdGVyLAotCS5kZXRhY2hfY2xpZW50ID0gc2FhNzExMF9kZXRhY2hfY2xpZW50LAotCS5jb21tYW5kID0gc2FhNzExMF9jb21tYW5kLAorc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkIHNhYTcxMTBfaWRbXSA9IHsKKwl7ICJzYWE3MTEwIiwgMCB9LAorCXsgfQogfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUoaTJjLCBzYWE3MTEwX2lkKTsKIAotc3RhdGljIGludCBfX2luaXQKLXNhYTcxMTBfaW5pdCAodm9pZCkKLXsKLQlyZXR1cm4gaTJjX2FkZF9kcml2ZXIoJmkyY19kcml2ZXJfc2FhNzExMCk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fZXhpdAotc2FhNzExMF9leGl0ICh2b2lkKQotewotCWkyY19kZWxfZHJpdmVyKCZpMmNfZHJpdmVyX3NhYTcxMTApOwotfQotCi1tb2R1bGVfaW5pdChzYWE3MTEwX2luaXQpOwotbW9kdWxlX2V4aXQoc2FhNzExMF9leGl0KTsKK3N0YXRpYyBzdHJ1Y3QgdjRsMl9pMmNfZHJpdmVyX2RhdGEgdjRsMl9pMmNfZGF0YSA9IHsKKwkubmFtZSA9ICJzYWE3MTEwIiwKKwkuZHJpdmVyaWQgPSBJMkNfRFJJVkVSSURfU0FBNzExMCwKKwkuY29tbWFuZCA9IHNhYTcxMTBfY29tbWFuZCwKKwkucHJvYmUgPSBzYWE3MTEwX3Byb2JlLAorCS5yZW1vdmUgPSBzYWE3MTEwX3JlbW92ZSwKKwkuaWRfdGFibGUgPSBzYWE3MTEwX2lkLAorfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzExMS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTExLmMKaW5kZXggOTZjM2Q0My4uYTQ3MzhhMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTExLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTExLmMKQEAgLTI4LDQzICsyOCwyNCBAQAogICovCiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KLSNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgotI2luY2x1ZGUgPGxpbnV4L2ZzLmg+Ci0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvbWFqb3IuaD4KLSNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0jaW5jbHVkZSA8bGludXgvbW0uaD4KLSNpbmNsdWRlIDxsaW51eC9zaWduYWwuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgotI2luY2x1ZGUgPGFzbS9pby5oPgotI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+Ci0jaW5jbHVkZSA8YXNtL3BhZ2UuaD4KKyNpbmNsdWRlIDxsaW51eC9pb2N0bC5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+Ci0KKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMtaWQuaD4KICNpbmNsdWRlIDxsaW51eC92aWRlb2Rldi5oPgogI2luY2x1ZGUgPGxpbnV4L3ZpZGVvX2RlY29kZXIuaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWNvbW1vbi5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItaTJjLWRydi1sZWdhY3kuaD4KIAogTU9EVUxFX0RFU0NSSVBUSU9OKCJQaGlsaXBzIFNBQTcxMTEgdmlkZW8gZGVjb2RlciBkcml2ZXIiKTsKIE1PRFVMRV9BVVRIT1IoIkRhdmUgUGVya3MiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIAotCi0jZGVmaW5lIEkyQ19OQU1FKHMpIChzKS0+bmFtZQotCi0KIHN0YXRpYyBpbnQgZGVidWc7CiBtb2R1bGVfcGFyYW0oZGVidWcsIGludCwgMDY0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiRGVidWcgbGV2ZWwgKDAtMSkiKTsKIAotI2RlZmluZSBkcHJpbnRrKG51bSwgZm9ybWF0LCBhcmdzLi4uKSBcCi0JZG8geyBcCi0JCWlmIChkZWJ1ZyA+PSBudW0pIFwKLQkJCXByaW50ayhmb3JtYXQsICMjYXJncyk7IFwKLQl9IHdoaWxlICgwKQotCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCiAjZGVmaW5lIFNBQTcxMTFfTlJfUkVHCQkweDE4CkBAIC03NywxNCArNTgsOSBAQAogCWludCBlbmFibGU7CiB9OwogCi0jZGVmaW5lICAgSTJDX1NBQTcxMTEgICAgICAgIDB4NDgKLQogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAotc3RhdGljIGlubGluZSBpbnQKLXNhYTcxMTFfd3JpdGUgKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCi0JICAgICAgIHU4ICAgICAgICAgICAgICAgICByZWcsCi0JICAgICAgIHU4ICAgICAgICAgICAgICAgICB2YWx1ZSkKK3N0YXRpYyBpbmxpbmUgaW50IHNhYTcxMTFfd3JpdGUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdTggcmVnLCB1OCB2YWx1ZSkKIHsKIAlzdHJ1Y3Qgc2FhNzExMSAqZGVjb2RlciA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwogCkBAIC05Miw4ICs2OCw3IEBACiAJcmV0dXJuIGkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCByZWcsIHZhbHVlKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkCi1zYWE3MTExX3dyaXRlX2lmX2NoYW5nZWQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdTggcmVnLCB1OCB2YWx1ZSkKK3N0YXRpYyBpbmxpbmUgdm9pZCBzYWE3MTExX3dyaXRlX2lmX2NoYW5nZWQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdTggcmVnLCB1OCB2YWx1ZSkKIHsKIAlzdHJ1Y3Qgc2FhNzExMSAqZGVjb2RlciA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwogCkBAIC0xMDMsMTAgKzc4LDcgQEAKIAl9CiB9CiAKLXN0YXRpYyBpbnQKLXNhYTcxMTFfd3JpdGVfYmxvY2sgKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCi0JCSAgICAgY29uc3QgdTggICAgICAgICAgKmRhdGEsCi0JCSAgICAgdW5zaWduZWQgaW50ICAgICAgIGxlbikKK3N0YXRpYyBpbnQgc2FhNzExMV93cml0ZV9ibG9jayhzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBjb25zdCB1OCAqZGF0YSwgdW5zaWduZWQgaW50IGxlbikKIHsKIAlpbnQgcmV0ID0gLTE7CiAJdTggcmVnOwpAQCAtMTI3LDE4ICs5OSwxNyBAQAogCQkJCSAgICBkZWNvZGVyLT5yZWdbcmVnKytdID0gZGF0YVsxXTsKIAkJCQlsZW4gLT0gMjsKIAkJCQlkYXRhICs9IDI7Ci0JCQl9IHdoaWxlIChsZW4gPj0gMiAmJiBkYXRhWzBdID09IHJlZyAmJgotCQkJCSBibG9ja19sZW4gPCAzMik7Ci0JCQlpZiAoKHJldCA9IGkyY19tYXN0ZXJfc2VuZChjbGllbnQsIGJsb2NrX2RhdGEsCi0JCQkJCQkgICBibG9ja19sZW4pKSA8IDApCisJCQl9IHdoaWxlIChsZW4gPj0gMiAmJiBkYXRhWzBdID09IHJlZyAmJiBibG9ja19sZW4gPCAzMik7CisJCQlyZXQgPSBpMmNfbWFzdGVyX3NlbmQoY2xpZW50LCBibG9ja19kYXRhLCBibG9ja19sZW4pOworCQkJaWYgKHJldCA8IDApCiAJCQkJYnJlYWs7CiAJCX0KIAl9IGVsc2UgewogCQkvKiBkbyBzb21lIHNsb3cgSTJDIGVtdWxhdGlvbiBraW5kIG9mIHRoaW5nICovCiAJCXdoaWxlIChsZW4gPj0gMikgewogCQkJcmVnID0gKmRhdGErKzsKLQkJCWlmICgocmV0ID0gc2FhNzExMV93cml0ZShjbGllbnQsIHJlZywKLQkJCQkJCSAqZGF0YSsrKSkgPCAwKQorCQkJcmV0ID0gc2FhNzExMV93cml0ZShjbGllbnQsIHJlZywgKmRhdGErKyk7CisJCQlpZiAocmV0IDwgMCkKIAkJCQlicmVhazsKIAkJCWxlbiAtPSAyOwogCQl9CkBAIC0xNDcsMTYgKzExOCwxMyBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQKLXNhYTcxMTFfaW5pdF9kZWNvZGVyIChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAotCSAgICAgIHN0cnVjdCB2aWRlb19kZWNvZGVyX2luaXQgKmluaXQpCitzdGF0aWMgaW50IHNhYTcxMTFfaW5pdF9kZWNvZGVyKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCisJCXN0cnVjdCB2aWRlb19kZWNvZGVyX2luaXQgKmluaXQpCiB7CiAJcmV0dXJuIHNhYTcxMTFfd3JpdGVfYmxvY2soY2xpZW50LCBpbml0LT5kYXRhLCBpbml0LT5sZW4pOwogfQogCi1zdGF0aWMgaW5saW5lIGludAotc2FhNzExMV9yZWFkIChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAotCSAgICAgIHU4ICAgICAgICAgICAgICAgICByZWcpCitzdGF0aWMgaW5saW5lIGludCBzYWE3MTExX3JlYWQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdTggcmVnKQogewogCXJldHVybiBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LCByZWcpOwogfQpAQCAtMjAzLDI4ICsxNzEsMjMgQEAKIAkweDE3LCAweDAwLAkJLyogMTcgLSBWQkkgKi8KIH07CiAKLXN0YXRpYyBpbnQKLXNhYTcxMTFfY29tbWFuZCAoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKLQkJIHVuc2lnbmVkIGludCAgICAgICBjbWQsCi0JCSB2b2lkICAgICAgICAgICAgICAqYXJnKQorc3RhdGljIGludCBzYWE3MTExX2NvbW1hbmQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdW5zaWduZWQgY21kLCB2b2lkICphcmcpCiB7CiAJc3RydWN0IHNhYTcxMTEgKmRlY29kZXIgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKIAogCXN3aXRjaCAoY21kKSB7Ci0KIAljYXNlIDA6CiAJCWJyZWFrOwogCWNhc2UgREVDT0RFUl9JTklUOgogCXsKIAkJc3RydWN0IHZpZGVvX2RlY29kZXJfaW5pdCAqaW5pdCA9IGFyZzsKKwkJc3RydWN0IHZpZGVvX2RlY29kZXJfaW5pdCB2ZGk7CisKIAkJaWYgKE5VTEwgIT0gaW5pdCkKIAkJCXJldHVybiBzYWE3MTExX2luaXRfZGVjb2RlcihjbGllbnQsIGluaXQpOwotCQllbHNlIHsKLQkJCXN0cnVjdCB2aWRlb19kZWNvZGVyX2luaXQgdmRpOwotCQkJdmRpLmRhdGEgPSBzYWE3MTExX2kyY19pbml0OwotCQkJdmRpLmxlbiA9IHNpemVvZihzYWE3MTExX2kyY19pbml0KTsKLQkJCXJldHVybiBzYWE3MTExX2luaXRfZGVjb2RlcihjbGllbnQsICZ2ZGkpOwotCQl9CisJCXZkaS5kYXRhID0gc2FhNzExMV9pMmNfaW5pdDsKKwkJdmRpLmxlbiA9IHNpemVvZihzYWE3MTExX2kyY19pbml0KTsKKwkJcmV0dXJuIHNhYTcxMTFfaW5pdF9kZWNvZGVyKGNsaWVudCwgJnZkaSk7CiAJfQogCiAJY2FzZSBERUNPREVSX0RVTVA6CkBAIC0yMzQsMTUgKzE5NywxNSBAQAogCQlmb3IgKGkgPSAwOyBpIDwgU0FBNzExMV9OUl9SRUc7IGkgKz0gMTYpIHsKIAkJCWludCBqOwogCi0JCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6ICUwM3giLCBJMkNfTkFNRShjbGllbnQpLCBpKTsKKwkJCXY0bF9pbmZvKGNsaWVudCwgIiUwM3giLCBpKTsKIAkJCWZvciAoaiA9IDA7IGogPCAxNiAmJiBpICsgaiA8IFNBQTcxMTFfTlJfUkVHOyArK2opIHsKLQkJCQlwcmludGsoIiAlMDJ4IiwKKwkJCQlwcmludGsoS0VSTl9DT05UICIgJTAyeCIsCiAJCQkJICAgICAgIHNhYTcxMTFfcmVhZChjbGllbnQsIGkgKyBqKSk7CiAJCQl9Ci0JCQlwcmludGsoIlxuIik7CisJCQlwcmludGsoS0VSTl9DT05UICJcbiIpOwogCQl9Ci0JfQogCQlicmVhazsKKwl9CiAKIAljYXNlIERFQ09ERVJfR0VUX0NBUEFCSUxJVElFUzoKIAl7CkBAIC0yNTUsOCArMjE4LDggQEAKIAkJCSAgICAgVklERU9fREVDT0RFUl9DQ0lSOwogCQljYXAtPmlucHV0cyA9IDg7CiAJCWNhcC0+b3V0cHV0cyA9IDE7Ci0JfQogCQlicmVhazsKKwl9CiAKIAljYXNlIERFQ09ERVJfR0VUX1NUQVRVUzoKIAl7CkBAIC0yNjUsOCArMjI4LDcgQEAKIAkJaW50IHJlczsKIAogCQlzdGF0dXMgPSBzYWE3MTExX3JlYWQoY2xpZW50LCAweDFmKTsKLQkJZHByaW50aygxLCBLRVJOX0RFQlVHICIlcyBzdGF0dXM6IDB4JTAyeFxuIiwgSTJDX05BTUUoY2xpZW50KSwKLQkJCXN0YXR1cyk7CisJCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgInN0YXR1czogMHglMDJ4XG4iLCBzdGF0dXMpOwogCQlyZXMgPSAwOwogCQlpZiAoKHN0YXR1cyAmICgxIDw8IDYpKSA9PSAwKSB7CiAJCQlyZXMgfD0gREVDT0RFUl9TVEFUVVNfR09PRDsKQEAgLTI5NCw4ICsyNTYsOCBAQAogCQkJcmVzIHw9IERFQ09ERVJfU1RBVFVTX0NPTE9SOwogCQl9CiAJCSppYXJnID0gcmVzOwotCX0KIAkJYnJlYWs7CisJfQogCiAJY2FzZSBERUNPREVSX1NFVF9HUElPOgogCXsKQEAgLTM2Miw4ICszMjQsOCBAQAogCiAJCX0KIAkJZGVjb2Rlci0+bm9ybSA9ICppYXJnOwotCX0KIAkJYnJlYWs7CisJfQogCiAJY2FzZSBERUNPREVSX1NFVF9JTlBVVDoKIAl7CkBAIC0zODcsOCArMzQ5LDggQEAKIAkJCQkJCQkgICAgIDMpID8gMHg4MCA6CiAJCQkJCQkJICAgIDApKTsKIAkJfQotCX0KIAkJYnJlYWs7CisJfQogCiAJY2FzZSBERUNPREVSX1NFVF9PVVRQVVQ6CiAJewpAQCAtMzk4LDggKzM2MCw4IEBACiAJCWlmICgqaWFyZyAhPSAwKSB7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQotCX0KIAkJYnJlYWs7CisJfQogCiAJY2FzZSBERUNPREVSX0VOQUJMRV9PVVRQVVQ6CiAJewpAQCAtNDM5LDggKzQwMSw4IEBACiAJCQkJCSAgICAgIChkZWNvZGVyLT5yZWdbMHgxMV0gJiAweGYzKSk7CiAJCQl9CiAJCX0KLQl9CiAJCWJyZWFrOworCX0KIAogCWNhc2UgREVDT0RFUl9TRVRfUElDVFVSRToKIAl7CkBAIC00NTQsOCArNDE2LDggQEAKIAkJc2FhNzExMV93cml0ZShjbGllbnQsIDB4MGMsIHBpYy0+Y29sb3VyID4+IDkpOwogCQkvKiBXZSB3YW50IC0xMjggdG8gMTI3IHdlIGdldCAwLTY1NTM1ICovCiAJCXNhYTcxMTFfd3JpdGUoY2xpZW50LCAweDBkLCAocGljLT5odWUgLSAzMjc2OCkgPj4gOCk7Ci0JfQogCQlicmVhazsKKwl9CiAKIAlkZWZhdWx0OgogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTQ2Niw0OCArNDI4LDIzIEBACiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKLS8qCi0gKiBHZW5lcmljIGkyYyBwcm9iZQotICogY29uY2VybmluZyB0aGUgYWRkcmVzc2VzOiBpMmMgd2FudHMgNyBiaXQgKHdpdGhvdXQgdGhlIHIvdyBiaXQpLCBzbyAnPj4xJwotICovCi1zdGF0aWMgdW5zaWduZWQgc2hvcnQgbm9ybWFsX2kyY1tdID0geyBJMkNfU0FBNzExMSA+PiAxLCBJMkNfQ0xJRU5UX0VORCB9Oworc3RhdGljIHVuc2lnbmVkIHNob3J0IG5vcm1hbF9pMmNbXSA9IHsgMHg0OCA+PiAxLCBJMkNfQ0xJRU5UX0VORCB9OwogCi1zdGF0aWMgdW5zaWduZWQgc2hvcnQgaWdub3JlID0gSTJDX0NMSUVOVF9FTkQ7CitJMkNfQ0xJRU5UX0lOU01PRDsKIAotc3RhdGljIHN0cnVjdCBpMmNfY2xpZW50X2FkZHJlc3NfZGF0YSBhZGRyX2RhdGEgPSB7Ci0JLm5vcm1hbF9pMmMJCT0gbm9ybWFsX2kyYywKLQkucHJvYmUJCQk9ICZpZ25vcmUsCi0JLmlnbm9yZQkJCT0gJmlnbm9yZSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBpMmNfZHJpdmVyX3NhYTcxMTE7Ci0KLXN0YXRpYyBpbnQKLXNhYTcxMTFfZGV0ZWN0X2NsaWVudCAoc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyLAotCQkgICAgICAgaW50ICAgICAgICAgICAgICAgICBhZGRyZXNzLAotCQkgICAgICAgaW50ICAgICAgICAgICAgICAgICBraW5kKQorc3RhdGljIGludCBzYWE3MTExX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCisJCQljb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpCiB7CiAJaW50IGk7Ci0Jc3RydWN0IGkyY19jbGllbnQgKmNsaWVudDsKIAlzdHJ1Y3Qgc2FhNzExMSAqZGVjb2RlcjsKIAlzdHJ1Y3QgdmlkZW9fZGVjb2Rlcl9pbml0IHZkaTsKIAotCWRwcmludGsoMSwKLQkJS0VSTl9JTkZPCi0JCSJzYWE3MTExLmM6IGRldGVjdGluZyBzYWE3MTExIGNsaWVudCBvbiBhZGRyZXNzIDB4JXhcbiIsCi0JCWFkZHJlc3MgPDwgMSk7Ci0KIAkvKiBDaGVjayBpZiB0aGUgYWRhcHRlciBzdXBwb3J0cyB0aGUgbmVlZGVkIGZlYXR1cmVzICovCi0JaWYgKCFpMmNfY2hlY2tfZnVuY3Rpb25hbGl0eShhZGFwdGVyLCBJMkNfRlVOQ19TTUJVU19CWVRFX0RBVEEpKQotCQlyZXR1cm4gMDsKKwlpZiAoIWkyY19jaGVja19mdW5jdGlvbmFsaXR5KGNsaWVudC0+YWRhcHRlciwgSTJDX0ZVTkNfU01CVVNfQllURV9EQVRBKSkKKwkJcmV0dXJuIC1FTk9ERVY7CiAKLQljbGllbnQgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgaTJjX2NsaWVudCksIEdGUF9LRVJORUwpOwotCWlmICghY2xpZW50KQotCQlyZXR1cm4gLUVOT01FTTsKLQljbGllbnQtPmFkZHIgPSBhZGRyZXNzOwotCWNsaWVudC0+YWRhcHRlciA9IGFkYXB0ZXI7Ci0JY2xpZW50LT5kcml2ZXIgPSAmaTJjX2RyaXZlcl9zYWE3MTExOwotCXN0cmxjcHkoSTJDX05BTUUoY2xpZW50KSwgInNhYTcxMTEiLCBzaXplb2YoSTJDX05BTUUoY2xpZW50KSkpOworCXY0bF9pbmZvKGNsaWVudCwgImNoaXAgZm91bmQgQCAweCV4ICglcylcbiIsCisJCQljbGllbnQtPmFkZHIgPDwgMSwgY2xpZW50LT5hZGFwdGVyLT5uYW1lKTsKIAogCWRlY29kZXIgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgc2FhNzExMSksIEdGUF9LRVJORUwpOwogCWlmIChkZWNvZGVyID09IE5VTEwpIHsKQEAgLTUxOSw4MiArNDU2LDM3IEBACiAJZGVjb2Rlci0+ZW5hYmxlID0gMTsKIAlpMmNfc2V0X2NsaWVudGRhdGEoY2xpZW50LCBkZWNvZGVyKTsKIAotCWkgPSBpMmNfYXR0YWNoX2NsaWVudChjbGllbnQpOwotCWlmIChpKSB7Ci0JCWtmcmVlKGNsaWVudCk7Ci0JCWtmcmVlKGRlY29kZXIpOwotCQlyZXR1cm4gaTsKLQl9Ci0KIAl2ZGkuZGF0YSA9IHNhYTcxMTFfaTJjX2luaXQ7CiAJdmRpLmxlbiA9IHNpemVvZihzYWE3MTExX2kyY19pbml0KTsKIAlpID0gc2FhNzExMV9pbml0X2RlY29kZXIoY2xpZW50LCAmdmRpKTsKIAlpZiAoaSA8IDApIHsKLQkJZHByaW50aygxLCBLRVJOX0VSUiAiJXNfYXR0YWNoIGVycm9yOiBpbml0IHN0YXR1cyAlZFxuIiwKLQkJCUkyQ19OQU1FKGNsaWVudCksIGkpOworCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJpbml0IHN0YXR1cyAlZFxuIiwgaSk7CiAJfSBlbHNlIHsKLQkJZHByaW50aygxLAotCQkJS0VSTl9JTkZPCi0JCQkiJXNfYXR0YWNoOiBjaGlwIHZlcnNpb24gJXggYXQgYWRkcmVzcyAweCV4XG4iLAotCQkJSTJDX05BTUUoY2xpZW50KSwgc2FhNzExMV9yZWFkKGNsaWVudCwgMHgwMCkgPj4gNCwKLQkJCWNsaWVudC0+YWRkciA8PCAxKTsKKwkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAicmV2aXNpb24gJXhcbiIsCisJCQlzYWE3MTExX3JlYWQoY2xpZW50LCAweDAwKSA+PiA0KTsKIAl9Ci0KIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludAotc2FhNzExMV9hdHRhY2hfYWRhcHRlciAoc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyKQorc3RhdGljIGludCBzYWE3MTExX3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQogewotCWRwcmludGsoMSwKLQkJS0VSTl9JTkZPCi0JCSJzYWE3MTExLmM6IHN0YXJ0aW5nIHByb2JlIGZvciBhZGFwdGVyICVzICgweCV4KVxuIiwKLQkJSTJDX05BTUUoYWRhcHRlciksIGFkYXB0ZXItPmlkKTsKLQlyZXR1cm4gaTJjX3Byb2JlKGFkYXB0ZXIsICZhZGRyX2RhdGEsICZzYWE3MTExX2RldGVjdF9jbGllbnQpOwotfQotCi1zdGF0aWMgaW50Ci1zYWE3MTExX2RldGFjaF9jbGllbnQgKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCi17Ci0Jc3RydWN0IHNhYTcxMTEgKmRlY29kZXIgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKLQlpbnQgZXJyOwotCi0JZXJyID0gaTJjX2RldGFjaF9jbGllbnQoY2xpZW50KTsKLQlpZiAoZXJyKSB7Ci0JCXJldHVybiBlcnI7Ci0JfQotCi0Ja2ZyZWUoZGVjb2Rlcik7Ci0Ja2ZyZWUoY2xpZW50KTsKLQorCWtmcmVlKGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpKTsKIAlyZXR1cm4gMDsKIH0KIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAotc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIGkyY19kcml2ZXJfc2FhNzExMSA9IHsKLQkuZHJpdmVyID0gewotCQkubmFtZSA9ICJzYWE3MTExIiwKLQl9LAotCi0JLmlkID0gSTJDX0RSSVZFUklEX1NBQTcxMTFBLAotCi0JLmF0dGFjaF9hZGFwdGVyID0gc2FhNzExMV9hdHRhY2hfYWRhcHRlciwKLQkuZGV0YWNoX2NsaWVudCA9IHNhYTcxMTFfZGV0YWNoX2NsaWVudCwKLQkuY29tbWFuZCA9IHNhYTcxMTFfY29tbWFuZCwKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCBzYWE3MTExX2lkW10gPSB7CisJeyAic2FhNzExMV9vbGQiLCAwIH0sCS8qICJzYWE3MTExIiBtYXBzIHRvIHRoZSBzYWE3MTE1IGRyaXZlciAqLworCXsgfQogfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUoaTJjLCBzYWE3MTExX2lkKTsKIAotc3RhdGljIGludCBfX2luaXQKLXNhYTcxMTFfaW5pdCAodm9pZCkKLXsKLQlyZXR1cm4gaTJjX2FkZF9kcml2ZXIoJmkyY19kcml2ZXJfc2FhNzExMSk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fZXhpdAotc2FhNzExMV9leGl0ICh2b2lkKQotewotCWkyY19kZWxfZHJpdmVyKCZpMmNfZHJpdmVyX3NhYTcxMTEpOwotfQotCi1tb2R1bGVfaW5pdChzYWE3MTExX2luaXQpOwotbW9kdWxlX2V4aXQoc2FhNzExMV9leGl0KTsKK3N0YXRpYyBzdHJ1Y3QgdjRsMl9pMmNfZHJpdmVyX2RhdGEgdjRsMl9pMmNfZGF0YSA9IHsKKwkubmFtZSA9ICJzYWE3MTExIiwKKwkuZHJpdmVyaWQgPSBJMkNfRFJJVkVSSURfU0FBNzExMUEsCisJLmNvbW1hbmQgPSBzYWE3MTExX2NvbW1hbmQsCisJLnByb2JlID0gc2FhNzExMV9wcm9iZSwKKwkucmVtb3ZlID0gc2FhNzExMV9yZW1vdmUsCisJLmlkX3RhYmxlID0gc2FhNzExMV9pZCwKK307CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMTQuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzExNC5jCmluZGV4IGU3OTA3NTUuLjdjYTcwOWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzExNC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzExNC5jCkBAIC0yOSw0MyArMjksMjQgQEAKICAqLwogCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Ci0jaW5jbHVkZSA8bGludXgvZXJybm8uaD4KLSNpbmNsdWRlIDxsaW51eC9mcy5oPgotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L21ham9yLmg+Ci0jaW5jbHVkZSA8bGludXgvc2xhYi5oPgotI2luY2x1ZGUgPGxpbnV4L21tLmg+Ci0jaW5jbHVkZSA8bGludXgvc2lnbmFsLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9pMmMuaD4KLSNpbmNsdWRlIDxhc20vaW8uaD4KLSNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgotI2luY2x1ZGUgPGFzbS9wYWdlLmg+CisjaW5jbHVkZSA8bGludXgvaW9jdGwuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgotCisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bGludXgvaTJjLWlkLmg+CiAjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYuaD4KICNpbmNsdWRlIDxsaW51eC92aWRlb19kZWNvZGVyLmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1jb21tb24uaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWkyYy1kcnYtbGVnYWN5Lmg+CiAKIE1PRFVMRV9ERVNDUklQVElPTigiUGhpbGlwcyBTQUE3MTE0SCB2aWRlbyBkZWNvZGVyIGRyaXZlciIpOwogTU9EVUxFX0FVVEhPUigiTWF4aW0gWWV2dHl1c2hraW4iKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIAotCi0jZGVmaW5lIEkyQ19OQU1FKHgpICh4KS0+bmFtZQotCi0KIHN0YXRpYyBpbnQgZGVidWc7CiBtb2R1bGVfcGFyYW0oZGVidWcsIGludCwgMCk7CiBNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiRGVidWcgbGV2ZWwgKDAtMSkiKTsKIAotI2RlZmluZSBkcHJpbnRrKG51bSwgZm9ybWF0LCBhcmdzLi4uKSBcCi0JZG8geyBcCi0JCWlmIChkZWJ1ZyA+PSBudW0pIFwKLQkJCXByaW50ayhmb3JtYXQsICMjYXJncyk7IFwKLQl9IHdoaWxlICgwKQotCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCiBzdHJ1Y3Qgc2FhNzExNCB7CkBAIC04MSw5ICs2Miw2IEBACiAJaW50IHBsYXliYWNrOwogfTsKIAotI2RlZmluZSAgIEkyQ19TQUE3MTE0ICAgICAgICAweDQyCi0jZGVmaW5lICAgSTJDX1NBQTcxMTRBICAgICAgIDB4NDAKLQogI2RlZmluZSAgIEkyQ19ERUxBWSAgIDEwCiAKIApAQCAtMTI5LDE4ICsxMDcsMTIgQEAKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAotc3RhdGljIGlubGluZSBpbnQKLXNhYTcxMTRfd3JpdGUgKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCi0JICAgICAgIHU4ICAgICAgICAgICAgICAgICByZWcsCi0JICAgICAgIHU4ICAgICAgICAgICAgICAgICB2YWx1ZSkKK3N0YXRpYyBpbmxpbmUgaW50IHNhYTcxMTRfd3JpdGUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdTggcmVnLCB1OCB2YWx1ZSkKIHsKIAlyZXR1cm4gaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsIHJlZywgdmFsdWUpOwogfQogCi1zdGF0aWMgaW50Ci1zYWE3MTE0X3dyaXRlX2Jsb2NrIChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAotCQkgICAgIGNvbnN0IHU4ICAgICAgICAgICpkYXRhLAotCQkgICAgIHVuc2lnbmVkIGludCAgICAgICBsZW4pCitzdGF0aWMgaW50IHNhYTcxMTRfd3JpdGVfYmxvY2soc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgY29uc3QgdTggKmRhdGEsIHVuc2lnbmVkIGludCBsZW4pCiB7CiAJaW50IHJldCA9IC0xOwogCXU4IHJlZzsKQEAgLTE2MCwxOCArMTMyLDE3IEBACiAJCQkJcmVnKys7CiAJCQkJbGVuIC09IDI7CiAJCQkJZGF0YSArPSAyOwotCQkJfSB3aGlsZSAobGVuID49IDIgJiYgZGF0YVswXSA9PSByZWcgJiYKLQkJCQkgYmxvY2tfbGVuIDwgMzIpOwotCQkJaWYgKChyZXQgPSBpMmNfbWFzdGVyX3NlbmQoY2xpZW50LCBibG9ja19kYXRhLAotCQkJCQkJICAgYmxvY2tfbGVuKSkgPCAwKQorCQkJfSB3aGlsZSAobGVuID49IDIgJiYgZGF0YVswXSA9PSByZWcgJiYgYmxvY2tfbGVuIDwgMzIpOworCQkJcmV0ID0gaTJjX21hc3Rlcl9zZW5kKGNsaWVudCwgYmxvY2tfZGF0YSwgYmxvY2tfbGVuKTsKKwkJCWlmIChyZXQgPCAwKQogCQkJCWJyZWFrOwogCQl9CiAJfSBlbHNlIHsKIAkJLyogZG8gc29tZSBzbG93IEkyQyBlbXVsYXRpb24ga2luZCBvZiB0aGluZyAqLwogCQl3aGlsZSAobGVuID49IDIpIHsKIAkJCXJlZyA9ICpkYXRhKys7Ci0JCQlpZiAoKHJldCA9IHNhYTcxMTRfd3JpdGUoY2xpZW50LCByZWcsCi0JCQkJCQkgKmRhdGErKykpIDwgMCkKKwkJCXJldCA9IHNhYTcxMTRfd3JpdGUoY2xpZW50LCByZWcsICpkYXRhKyspOworCQkJaWYgKHJldCA8IDApCiAJCQkJYnJlYWs7CiAJCQlsZW4gLT0gMjsKIAkJfQpAQCAtMTgwLDkgKzE1MSw3IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGlubGluZSBpbnQKLXNhYTcxMTRfcmVhZCAoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKLQkgICAgICB1OCAgICAgICAgICAgICAgICAgcmVnKQorc3RhdGljIGlubGluZSBpbnQgc2FhNzExNF9yZWFkKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHU4IHJlZykKIHsKIAlyZXR1cm4gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwgcmVnKTsKIH0KQEAgLTQ1MiwxNSArNDIxLDExIEBACiAJMHhlZiwgMHgwMAogfTsKIAotc3RhdGljIGludAotc2FhNzExNF9jb21tYW5kIChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAotCQkgdW5zaWduZWQgaW50ICAgICAgIGNtZCwKLQkJIHZvaWQgICAgICAgICAgICAgICphcmcpCitzdGF0aWMgaW50IHNhYTcxMTRfY29tbWFuZChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1bnNpZ25lZCBjbWQsIHZvaWQgKmFyZykKIHsKIAlzdHJ1Y3Qgc2FhNzExNCAqZGVjb2RlciA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwogCiAJc3dpdGNoIChjbWQpIHsKLQogCWNhc2UgMDoKIAkJLy9kcHJpbnRrKDEsIEtFUk5fSU5GTyAiJXM6IHdyaXRpbmcgaW5pdFxuIiwgSTJDX05BTUUoY2xpZW50KSk7CiAJCS8vc2FhNzExNF93cml0ZV9ibG9jayhjbGllbnQsIGluaXQsIHNpemVvZihpbml0KSk7CkBAIC00NzAsMjcgKzQzNSwyOCBAQAogCXsKIAkJaW50IGk7CiAKLQkJZHByaW50aygxLCBLRVJOX0lORk8gIiVzOiBkZWNvZGVyIGR1bXBcbiIsIEkyQ19OQU1FKGNsaWVudCkpOworCQlpZiAoIWRlYnVnKQorCQkJYnJlYWs7CisJCXY0bF9pbmZvKGNsaWVudCwgImRlY29kZXIgZHVtcFxuIik7CiAKIAkJZm9yIChpID0gMDsgaSA8IDMyOyBpICs9IDE2KSB7CiAJCQlpbnQgajsKIAotCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiAlMDN4IiwgSTJDX05BTUUoY2xpZW50KSwgaSk7CisJCQl2NGxfaW5mbyhjbGllbnQsICIlMDN4IiwgaSk7CiAJCQlmb3IgKGogPSAwOyBqIDwgMTY7ICsraikgewotCQkJCXByaW50aygiICUwMngiLAorCQkJCXByaW50ayhLRVJOX0NPTlQgIiAlMDJ4IiwKIAkJCQkgICAgICAgc2FhNzExNF9yZWFkKGNsaWVudCwgaSArIGopKTsKIAkJCX0KLQkJCXByaW50aygiXG4iKTsKKwkJCXByaW50ayhLRVJOX0NPTlQgIlxuIik7CiAJCX0KLQl9CiAJCWJyZWFrOworCX0KIAogCWNhc2UgREVDT0RFUl9HRVRfQ0FQQUJJTElUSUVTOgogCXsKIAkJc3RydWN0IHZpZGVvX2RlY29kZXJfY2FwYWJpbGl0eSAqY2FwID0gYXJnOwogCi0JCWRwcmludGsoMSwgS0VSTl9ERUJVRyAiJXM6IGRlY29kZXIgZ2V0IGNhcGFiaWxpdGllc1xuIiwKLQkJCUkyQ19OQU1FKGNsaWVudCkpOworCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJnZXQgY2FwYWJpbGl0aWVzXG4iKTsKIAogCQljYXAtPmZsYWdzID0gVklERU9fREVDT0RFUl9QQUwgfAogCQkJICAgICBWSURFT19ERUNPREVSX05UU0MgfApAQCAtNDk4LDggKzQ2NCw4IEBACiAJCQkgICAgIFZJREVPX0RFQ09ERVJfQ0NJUjsKIAkJY2FwLT5pbnB1dHMgPSA4OwogCQljYXAtPm91dHB1dHMgPSAxOwotCX0KIAkJYnJlYWs7CisJfQogCiAJY2FzZSBERUNPREVSX0dFVF9TVEFUVVM6CiAJewpAQCAtNTA5LDggKzQ3NSw3IEBACiAKIAkJc3RhdHVzID0gc2FhNzExNF9yZWFkKGNsaWVudCwgMHgxZik7CiAKLQkJZHByaW50aygxLCBLRVJOX0RFQlVHICIlcyBzdGF0dXM6IDB4JTAyeFxuIiwgSTJDX05BTUUoY2xpZW50KSwKLQkJCXN0YXR1cyk7CisJCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgInN0YXR1czogMHglMDJ4XG4iLCBzdGF0dXMpOwogCQlyZXMgPSAwOwogCQlpZiAoKHN0YXR1cyAmICgxIDw8IDYpKSA9PSAwKSB7CiAJCQlyZXMgfD0gREVDT0RFUl9TVEFUVVNfR09PRDsKQEAgLTUzOCw4ICs1MDMsOCBAQAogCQkJcmVzIHw9IERFQ09ERVJfU1RBVFVTX0NPTE9SOwogCQl9CiAJCSppYXJnID0gcmVzOwotCX0KIAkJYnJlYWs7CisJfQogCiAJY2FzZSBERUNPREVSX1NFVF9OT1JNOgogCXsKQEAgLTU0NywxMiArNTEyLDExIEBACiAKIAkJc2hvcnQgaW50IGhvZmYgPSAwLCB2b2ZmID0gMCwgdyA9IDAsIGggPSAwOwogCi0JCWRwcmludGsoMSwgS0VSTl9ERUJVRyAiJXM6IGRlY29kZXIgc2V0IG5vcm0gIiwKLQkJCUkyQ19OQU1FKGNsaWVudCkpOwotCQlzd2l0Y2ggKCppYXJnKSB7CisJCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgInNldCBub3JtXG4iKTsKIAorCQlzd2l0Y2ggKCppYXJnKSB7CiAJCWNhc2UgVklERU9fTU9ERV9OVFNDOgotCQkJZHByaW50aygxLCAiTlRTQ1xuIik7CisJCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJOVFNDXG4iKTsKIAkJCWRlY29kZXItPnJlZ1tSRUdfQUREUigweDA2KV0gPQogCQkJICAgIFNBQV83MTE0X05UU0NfSFNZTkNfU1RBUlQ7CiAJCQlkZWNvZGVyLT5yZWdbUkVHX0FERFIoMHgwNyldID0KQEAgLTU3MSw3ICs1MzUsNyBAQAogCQkJYnJlYWs7CiAKIAkJY2FzZSBWSURFT19NT0RFX1BBTDoKLQkJCWRwcmludGsoMSwgIlBBTFxuIik7CisJCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJQQUxcbiIpOwogCQkJZGVjb2Rlci0+cmVnW1JFR19BRERSKDB4MDYpXSA9CiAJCQkgICAgU0FBXzcxMTRfUEFMX0hTWU5DX1NUQVJUOwogCQkJZGVjb2Rlci0+cmVnW1JFR19BRERSKDB4MDcpXSA9CkBAIC01OTAsOSArNTU0LDggQEAKIAkJCWJyZWFrOwogCiAJCWRlZmF1bHQ6Ci0JCQlkcHJpbnRrKDEsICIgVW5rbm93biB2aWRlbyBtb2RlISEhXG4iKTsKKwkJCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgIlVua25vd24gdmlkZW8gbW9kZVxuIik7CiAJCQlyZXR1cm4gLUVJTlZBTDsKLQogCQl9CiAKIApAQCAtNjQ0LDIyICs2MDcsMjAgQEAKIAkJc2FhNzExNF93cml0ZShjbGllbnQsIDB4ODAsIDB4MzYpOwkvLyBpLXBvcnQgYW5kIHNjYWxlciBiYWNrIGVuZCBjbG9jayBzZWxlY3Rpb24KIAogCQlkZWNvZGVyLT5ub3JtID0gKmlhcmc7Ci0JfQogCQlicmVhazsKKwl9CiAKIAljYXNlIERFQ09ERVJfU0VUX0lOUFVUOgogCXsKIAkJaW50ICppYXJnID0gYXJnOwogCi0JCWRwcmludGsoMSwgS0VSTl9ERUJVRyAiJXM6IGRlY29kZXIgc2V0IGlucHV0ICglZClcbiIsCi0JCQlJMkNfTkFNRShjbGllbnQpLCAqaWFyZyk7CisJCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgInNldCBpbnB1dCAoJWQpXG4iLCAqaWFyZyk7CiAJCWlmICgqaWFyZyA8IDAgfHwgKmlhcmcgPiA3KSB7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCiAJCWlmIChkZWNvZGVyLT5pbnB1dCAhPSAqaWFyZykgewotCQkJZHByaW50aygxLCBLRVJOX0RFQlVHICIlczogbm93IHNldHRpbmcgJXMgaW5wdXRcbiIsCi0JCQkJSTJDX05BTUUoY2xpZW50KSwKKwkJCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgIm5vdyBzZXR0aW5nICVzIGlucHV0XG4iLAogCQkJCSppYXJnID49IDYgPyAiUy1WaWRlbyIgOiAiQ29tcG9zaXRlIik7CiAJCQlkZWNvZGVyLT5pbnB1dCA9ICppYXJnOwogCkBAIC02OTAsMzAgKzY1MSwyOSBAQAogCQkJc2FhNzExNF93cml0ZShjbGllbnQsIDB4MGUsCiAJCQkJICAgICAgZGVjb2Rlci0+cmVnW1JFR19BRERSKDB4MGUpXSk7CiAJCX0KLQl9CiAJCWJyZWFrOworCX0KIAogCWNhc2UgREVDT0RFUl9TRVRfT1VUUFVUOgogCXsKIAkJaW50ICppYXJnID0gYXJnOwogCi0JCWRwcmludGsoMSwgS0VSTl9ERUJVRyAiJXM6IGRlY29kZXIgc2V0IG91dHB1dFxuIiwKLQkJCUkyQ19OQU1FKGNsaWVudCkpOworCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJzZXQgb3V0cHV0XG4iKTsKIAogCQkvKiBub3QgbXVjaCBjaG9pY2Ugb2Ygb3V0cHV0cyAqLwogCQlpZiAoKmlhcmcgIT0gMCkgewogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KLQl9CiAJCWJyZWFrOworCX0KIAogCWNhc2UgREVDT0RFUl9FTkFCTEVfT1VUUFVUOgogCXsKIAkJaW50ICppYXJnID0gYXJnOwogCQlpbnQgZW5hYmxlID0gKCppYXJnICE9IDApOwogCi0JCWRwcmludGsoMSwgS0VSTl9ERUJVRyAiJXM6IGRlY29kZXIgJXMgb3V0cHV0XG4iLAotCQkJSTJDX05BTUUoY2xpZW50KSwgZW5hYmxlID8gImVuYWJsZSIgOiAiZGlzYWJsZSIpOworCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICIlcyBvdXRwdXRcbiIsCisJCQllbmFibGUgPyAiZW5hYmxlIiA6ICJkaXNhYmxlIik7CiAKIAkJZGVjb2Rlci0+cGxheWJhY2sgPSAhZW5hYmxlOwogCkBAIC03NTQsMTggKzcxNCwxNiBAQAogCQkJc2FhNzExNF93cml0ZShjbGllbnQsIDB4ODAsIDB4MzYpOwogCiAJCX0KLQl9CiAJCWJyZWFrOworCX0KIAogCWNhc2UgREVDT0RFUl9TRVRfUElDVFVSRToKIAl7CiAJCXN0cnVjdCB2aWRlb19waWN0dXJlICpwaWMgPSBhcmc7CiAKLQkJZHByaW50aygxLAotCQkJS0VSTl9ERUJVRwotCQkJIiVzOiBkZWNvZGVyIHNldCBwaWN0dXJlIGJyaWdodD0lZCBjb250cmFzdD0lZCBzYXR1cmF0aW9uPSVkIGh1ZT0lZFxuIiwKLQkJCUkyQ19OQU1FKGNsaWVudCksIHBpYy0+YnJpZ2h0bmVzcywgcGljLT5jb250cmFzdCwKLQkJCXBpYy0+Y29sb3VyLCBwaWMtPmh1ZSk7CisJCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwKKwkJCSJkZWNvZGVyIHNldCBwaWN0dXJlIGJyaWdodD0lZCBjb250cmFzdD0lZCBzYXR1cmF0aW9uPSVkIGh1ZT0lZFxuIiwKKwkJCXBpYy0+YnJpZ2h0bmVzcywgcGljLT5jb250cmFzdCwgcGljLT5jb2xvdXIsIHBpYy0+aHVlKTsKIAogCQlpZiAoZGVjb2Rlci0+YnJpZ2h0ICE9IHBpYy0+YnJpZ2h0bmVzcykgewogCQkJLyogV2Ugd2FudCAwIHRvIDI1NSB3ZSBnZXQgMC02NTUzNSAqLwpAQCAtNzg5LDggKzc0Nyw4IEBACiAJCQlzYWE3MTE0X3dyaXRlKGNsaWVudCwgMHgwZCwKIAkJCQkgICAgICAoZGVjb2Rlci0+aHVlIC0gMzI3NjgpID4+IDgpOwogCQl9Ci0JfQogCQlicmVhazsKKwl9CiAKIAlkZWZhdWx0OgogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTgwMSw1OCArNzU5LDMwIEBACiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKLS8qCi0gKiBHZW5lcmljIGkyYyBwcm9iZQotICogY29uY2VybmluZyB0aGUgYWRkcmVzc2VzOiBpMmMgd2FudHMgNyBiaXQgKHdpdGhvdXQgdGhlIHIvdyBiaXQpLCBzbyAnPj4xJwotICovCi1zdGF0aWMgdW5zaWduZWQgc2hvcnQgbm9ybWFsX2kyY1tdID0KLSAgICB7IEkyQ19TQUE3MTE0ID4+IDEsIEkyQ19TQUE3MTE0QSA+PiAxLCBJMkNfQ0xJRU5UX0VORCB9Oworc3RhdGljIHVuc2lnbmVkIHNob3J0IG5vcm1hbF9pMmNbXSA9IHsgMHg0MiA+PiAxLCAweDQwID4+IDEsIEkyQ19DTElFTlRfRU5EIH07CiAKLXN0YXRpYyB1bnNpZ25lZCBzaG9ydCBpZ25vcmUgPSBJMkNfQ0xJRU5UX0VORDsKK0kyQ19DTElFTlRfSU5TTU9EOwogCi1zdGF0aWMgc3RydWN0IGkyY19jbGllbnRfYWRkcmVzc19kYXRhIGFkZHJfZGF0YSA9IHsKLQkubm9ybWFsX2kyYwkJPSBub3JtYWxfaTJjLAotCS5wcm9iZQkJCT0gJmlnbm9yZSwKLQkuaWdub3JlCQkJPSAmaWdub3JlLAotfTsKLQotc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIGkyY19kcml2ZXJfc2FhNzExNDsKLQotc3RhdGljIGludAotc2FhNzExNF9kZXRlY3RfY2xpZW50IChzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIsCi0JCSAgICAgICBpbnQgICAgICAgICAgICAgICAgIGFkZHJlc3MsCi0JCSAgICAgICBpbnQgICAgICAgICAgICAgICAgIGtpbmQpCitzdGF0aWMgaW50IHNhYTcxMTRfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKKwkJCWNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCkKIHsKIAlpbnQgaSwgZXJyWzMwXTsKIAlzaG9ydCBpbnQgaG9mZiA9IFNBQV83MTE0X05UU0NfSE9GRlNFVDsKIAlzaG9ydCBpbnQgdm9mZiA9IFNBQV83MTE0X05UU0NfVk9GRlNFVDsKIAlzaG9ydCBpbnQgdyA9IFNBQV83MTE0X05UU0NfV0lEVEg7CiAJc2hvcnQgaW50IGggPSBTQUFfNzExNF9OVFNDX0hFSUdIVDsKLQlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50OwogCXN0cnVjdCBzYWE3MTE0ICpkZWNvZGVyOwogCi0JZHByaW50aygxLAotCQlLRVJOX0lORk8KLQkJInNhYTcxMTQuYzogZGV0ZWN0aW5nIHNhYTcxMTQgY2xpZW50IG9uIGFkZHJlc3MgMHgleFxuIiwKLQkJYWRkcmVzcyA8PCAxKTsKLQogCS8qIENoZWNrIGlmIHRoZSBhZGFwdGVyIHN1cHBvcnRzIHRoZSBuZWVkZWQgZmVhdHVyZXMgKi8KLQlpZiAoIWkyY19jaGVja19mdW5jdGlvbmFsaXR5KGFkYXB0ZXIsIEkyQ19GVU5DX1NNQlVTX0JZVEVfREFUQSkpCi0JCXJldHVybiAwOworCWlmICghaTJjX2NoZWNrX2Z1bmN0aW9uYWxpdHkoY2xpZW50LT5hZGFwdGVyLCBJMkNfRlVOQ19TTUJVU19CWVRFX0RBVEEpKQorCQlyZXR1cm4gLUVOT0RFVjsKIAotCWNsaWVudCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBpMmNfY2xpZW50KSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFjbGllbnQpCi0JCXJldHVybiAtRU5PTUVNOwotCWNsaWVudC0+YWRkciA9IGFkZHJlc3M7Ci0JY2xpZW50LT5hZGFwdGVyID0gYWRhcHRlcjsKLQljbGllbnQtPmRyaXZlciA9ICZpMmNfZHJpdmVyX3NhYTcxMTQ7Ci0Jc3RybGNweShJMkNfTkFNRShjbGllbnQpLCAic2FhNzExNCIsIHNpemVvZihJMkNfTkFNRShjbGllbnQpKSk7CisJdjRsX2luZm8oY2xpZW50LCAiY2hpcCBmb3VuZCBAIDB4JXggKCVzKVxuIiwKKwkJCWNsaWVudC0+YWRkciA8PCAxLCBjbGllbnQtPmFkYXB0ZXItPm5hbWUpOwogCiAJZGVjb2RlciA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBzYWE3MTE0KSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKGRlY29kZXIgPT0gTlVMTCkgewotCQlrZnJlZShjbGllbnQpOworCWlmIChkZWNvZGVyID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwotCX0KIAlkZWNvZGVyLT5ub3JtID0gVklERU9fTU9ERV9OVFNDOwogCWRlY29kZXItPmlucHV0ID0gLTE7CiAJZGVjb2Rlci0+ZW5hYmxlID0gMTsKQEAgLTkzNyw4ICs4NjcsNyBAQAogCWRlY29kZXItPnJlZ1tSRUdfQUREUigweDBlKV0gfD0gMTsJLy8gY29tYmZpbHRlciBvbgogCiAKLQlkcHJpbnRrKDEsIEtFUk5fREVCVUcgIiVzX2F0dGFjaDogc3RhcnRpbmcgZGVjb2RlciBpbml0XG4iLAotCQlJMkNfTkFNRShjbGllbnQpKTsKKwl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJzdGFydGluZyBpbml0XG4iKTsKIAogCWVyclswXSA9CiAJICAgIHNhYTcxMTRfd3JpdGVfYmxvY2soY2xpZW50LCBkZWNvZGVyLT5yZWcgKyAoMHgyMCA8PCAxKSwKQEAgLTk2MiwyOCArODkxLDIzIEBACiAKIAlmb3IgKGkgPSAwOyBpIDw9IDU7IGkrKykgewogCQlpZiAoZXJyW2ldIDwgMCkgewotCQkJZHByaW50aygxLAotCQkJCUtFUk5fRVJSCi0JCQkJIiVzX2F0dGFjaDogaW5pdCBlcnJvciAlZCBhdCBzdGFnZSAlZCwgbGVhdmluZyBhdHRhY2guXG4iLAotCQkJCUkyQ19OQU1FKGNsaWVudCksIGksIGVycltpXSk7CisJCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsCisJCQkJImluaXQgZXJyb3IgJWQgYXQgc3RhZ2UgJWQsIGxlYXZpbmcgYXR0YWNoLlxuIiwKKwkJCQlpLCBlcnJbaV0pOwogCQkJa2ZyZWUoZGVjb2Rlcik7Ci0JCQlrZnJlZShjbGllbnQpOwotCQkJcmV0dXJuIDA7CisJCQlyZXR1cm4gLUVJTzsKIAkJfQogCX0KIAogCWZvciAoaSA9IDY7IGkgPCA4OyBpKyspIHsKLQkJZHByaW50aygxLAotCQkJS0VSTl9ERUJVRwotCQkJIiVzX2F0dGFjaDogcmVnWzB4JTAyeF0gPSAweCUwMnggKDB4JTAyeClcbiIsCi0JCQlJMkNfTkFNRShjbGllbnQpLCBpLCBzYWE3MTE0X3JlYWQoY2xpZW50LCBpKSwKKwkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LAorCQkJInJlZ1sweCUwMnhdID0gMHglMDJ4ICgweCUwMngpXG4iLAorCQkJaSwgc2FhNzExNF9yZWFkKGNsaWVudCwgaSksCiAJCQlkZWNvZGVyLT5yZWdbUkVHX0FERFIoaSldKTsKIAl9CiAKLQlkcHJpbnRrKDEsCi0JCUtFUk5fREVCVUcKLQkJIiVzX2F0dGFjaDogcGVyZm9ybWluZyBkZWNvZGVyIHJlc2V0IHNlcXVlbmNlXG4iLAotCQlJMkNfTkFNRShjbGllbnQpKTsKKwl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsCisJCSJwZXJmb3JtaW5nIGRlY29kZXIgcmVzZXQgc2VxdWVuY2VcbiIpOwogCiAJZXJyWzZdID0gc2FhNzExNF93cml0ZShjbGllbnQsIDB4ODAsIDB4MDYpOwkvLyBpLXBvcnQgYW5kIHNjYWxlciBiYWNrZW5kIGNsb2NrIHNlbGVjdGlvbiwgdGFzayBBJkIgb2ZmCiAJZXJyWzddID0gc2FhNzExNF93cml0ZShjbGllbnQsIDB4ODgsIDB4ZDgpOwkvLyBzdyByZXNldCBzY2FsZXIKQEAgLTk5MSwxOSArOTE1LDE1IEBACiAKIAlmb3IgKGkgPSA2OyBpIDw9IDg7IGkrKykgewogCQlpZiAoZXJyW2ldIDwgMCkgewotCQkJZHByaW50aygxLAotCQkJCUtFUk5fRVJSCi0JCQkJIiVzX2F0dGFjaDogaW5pdCBlcnJvciAlZCBhdCBzdGFnZSAlZCwgbGVhdmluZyBhdHRhY2guXG4iLAotCQkJCUkyQ19OQU1FKGNsaWVudCksIGksIGVycltpXSk7CisJCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsCisJCQkJImluaXQgZXJyb3IgJWQgYXQgc3RhZ2UgJWQsIGxlYXZpbmcgYXR0YWNoLlxuIiwKKwkJCQlpLCBlcnJbaV0pOwogCQkJa2ZyZWUoZGVjb2Rlcik7Ci0JCQlrZnJlZShjbGllbnQpOwotCQkJcmV0dXJuIDA7CisJCQlyZXR1cm4gLUVJTzsKIAkJfQogCX0KIAotCWRwcmludGsoMSwgS0VSTl9JTkZPICIlc19hdHRhY2g6IHBlcmZvcm1pbmcgdGhlIHJlc3Qgb2YgaW5pdFxuIiwKLQkJSTJDX05BTUUoY2xpZW50KSk7Ci0KKwl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJwZXJmb3JtaW5nIHRoZSByZXN0IG9mIGluaXRcbiIpOwogCiAJZXJyWzldID0gc2FhNzExNF93cml0ZShjbGllbnQsIDB4MDEsIGRlY29kZXItPnJlZ1tSRUdfQUREUigweDAxKV0pOwogCWVyclsxMF0gPSBzYWE3MTE0X3dyaXRlX2Jsb2NrKGNsaWVudCwgZGVjb2Rlci0+cmVnICsgKDB4MDMgPDwgMSksICgweDFlICsgMSAtIDB4MDMpIDw8IDEpOwkvLyBiaWcgc2VxCkBAIC0xMDM5LDM3ICs5NTksMzIgQEAKIAogCWZvciAoaSA9IDk7IGkgPD0gMTg7IGkrKykgewogCQlpZiAoZXJyW2ldIDwgMCkgewotCQkJZHByaW50aygxLAotCQkJCUtFUk5fRVJSCi0JCQkJIiVzX2F0dGFjaDogaW5pdCBlcnJvciAlZCBhdCBzdGFnZSAlZCwgbGVhdmluZyBhdHRhY2guXG4iLAotCQkJCUkyQ19OQU1FKGNsaWVudCksIGksIGVycltpXSk7CisJCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsCisJCQkJImluaXQgZXJyb3IgJWQgYXQgc3RhZ2UgJWQsIGxlYXZpbmcgYXR0YWNoLlxuIiwKKwkJCQlpLCBlcnJbaV0pOwogCQkJa2ZyZWUoZGVjb2Rlcik7Ci0JCQlrZnJlZShjbGllbnQpOwotCQkJcmV0dXJuIDA7CisJCQlyZXR1cm4gLUVJTzsKIAkJfQogCX0KIAogCiAJZm9yIChpID0gNjsgaSA8IDg7IGkrKykgewotCQlkcHJpbnRrKDEsCi0JCQlLRVJOX0RFQlVHCi0JCQkiJXNfYXR0YWNoOiByZWdbMHglMDJ4XSA9IDB4JTAyeCAoMHglMDJ4KVxuIiwKLQkJCUkyQ19OQU1FKGNsaWVudCksIGksIHNhYTcxMTRfcmVhZChjbGllbnQsIGkpLAorCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsCisJCQkicmVnWzB4JTAyeF0gPSAweCUwMnggKDB4JTAyeClcbiIsCisJCQlpLCBzYWE3MTE0X3JlYWQoY2xpZW50LCBpKSwKIAkJCWRlY29kZXItPnJlZ1tSRUdfQUREUihpKV0pOwogCX0KIAogCiAJZm9yIChpID0gMHgxMTsgaSA8PSAweDEzOyBpKyspIHsKLQkJZHByaW50aygxLAotCQkJS0VSTl9ERUJVRwotCQkJIiVzX2F0dGFjaDogcmVnWzB4JTAyeF0gPSAweCUwMnggKDB4JTAyeClcbiIsCi0JCQlJMkNfTkFNRShjbGllbnQpLCBpLCBzYWE3MTE0X3JlYWQoY2xpZW50LCBpKSwKKwkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LAorCQkJInJlZ1sweCUwMnhdID0gMHglMDJ4ICgweCUwMngpXG4iLAorCQkJaSwgc2FhNzExNF9yZWFkKGNsaWVudCwgaSksCiAJCQlkZWNvZGVyLT5yZWdbUkVHX0FERFIoaSldKTsKIAl9CiAKIAotCWRwcmludGsoMSwgS0VSTl9ERUJVRyAiJXNfYXR0YWNoOiBzZXR0aW5nIHZpZGVvIGlucHV0XG4iLAotCQlJMkNfTkFNRShjbGllbnQpKTsKKwl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJzZXR0aW5nIHZpZGVvIGlucHV0XG4iKTsKIAogCWVyclsxOV0gPQogCSAgICBzYWE3MTE0X3dyaXRlKGNsaWVudCwgMHgwMiwgZGVjb2Rlci0+cmVnW1JFR19BRERSKDB4MDIpXSk7CkBAIC0xMDgwLDIwICs5OTUsMTUgQEAKIAogCWZvciAoaSA9IDE5OyBpIDw9IDIxOyBpKyspIHsKIAkJaWYgKGVycltpXSA8IDApIHsKLQkJCWRwcmludGsoMSwKLQkJCQlLRVJOX0VSUgotCQkJCSIlc19hdHRhY2g6IGluaXQgZXJyb3IgJWQgYXQgc3RhZ2UgJWQsIGxlYXZpbmcgYXR0YWNoLlxuIiwKLQkJCQlJMkNfTkFNRShjbGllbnQpLCBpLCBlcnJbaV0pOworCQkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LAorCQkJCSJpbml0IGVycm9yICVkIGF0IHN0YWdlICVkLCBsZWF2aW5nIGF0dGFjaC5cbiIsCisJCQkJaSwgZXJyW2ldKTsKIAkJCWtmcmVlKGRlY29kZXIpOwotCQkJa2ZyZWUoY2xpZW50KTsKLQkJCXJldHVybiAwOworCQkJcmV0dXJuIC1FSU87CiAJCX0KIAl9CiAKLQlkcHJpbnRrKDEsCi0JCUtFUk5fREVCVUcKLQkJIiVzX2F0dGFjaDogcGVyZm9ybWluZyBkZWNvZGVyIHJlc2V0IHNlcXVlbmNlXG4iLAotCQlJMkNfTkFNRShjbGllbnQpKTsKKwl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJwZXJmb3JtaW5nIGRlY29kZXIgcmVzZXQgc2VxdWVuY2VcbiIpOwogCiAJZXJyWzIyXSA9IHNhYTcxMTRfd3JpdGUoY2xpZW50LCAweDg4LCAweGQ4KTsJLy8gc3cgcmVzZXQgc2NhbGVyCiAJZXJyWzIzXSA9IHNhYTcxMTRfd3JpdGUoY2xpZW50LCAweDg4LCAweGY4KTsJLy8gc3cgcmVzZXQgc2NhbGVyIHJlbGVhc2UKQEAgLTExMDIsMTMgKzEwMTIsMTEgQEAKIAogCWZvciAoaSA9IDIyOyBpIDw9IDI0OyBpKyspIHsKIAkJaWYgKGVycltpXSA8IDApIHsKLQkJCWRwcmludGsoMSwKLQkJCQlLRVJOX0VSUgotCQkJCSIlc19hdHRhY2g6IGluaXQgZXJyb3IgJWQgYXQgc3RhZ2UgJWQsIGxlYXZpbmcgYXR0YWNoLlxuIiwKLQkJCQlJMkNfTkFNRShjbGllbnQpLCBpLCBlcnJbaV0pOworCQkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LAorCQkJCSJpbml0IGVycm9yICVkIGF0IHN0YWdlICVkLCBsZWF2aW5nIGF0dGFjaC5cbiIsCisJCQkJaSwgZXJyW2ldKTsKIAkJCWtmcmVlKGRlY29kZXIpOwotCQkJa2ZyZWUoY2xpZW50KTsKLQkJCXJldHVybiAwOworCQkJcmV0dXJuIC1FSU87CiAJCX0KIAl9CiAKQEAgLTExMTYsMTAxICsxMDI0LDQ1IEBACiAJZXJyWzI2XSA9IHNhYTcxMTRfd3JpdGUoY2xpZW50LCAweDA3LCBpbml0W1JFR19BRERSKDB4MDcpXSk7CiAJZXJyWzI3XSA9IHNhYTcxMTRfd3JpdGUoY2xpZW50LCAweDEwLCBpbml0W1JFR19BRERSKDB4MTApXSk7CiAKLQlkcHJpbnRrKDEsCi0JCUtFUk5fSU5GTwotCQkiJXNfYXR0YWNoOiBjaGlwIHZlcnNpb24gJXgsIGRlY29kZXIgc3RhdHVzIDB4JTAyeFxuIiwKLQkJSTJDX05BTUUoY2xpZW50KSwgc2FhNzExNF9yZWFkKGNsaWVudCwgMHgwMCkgPj4gNCwKKwl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJjaGlwIHZlcnNpb24gJXgsIGRlY29kZXIgc3RhdHVzIDB4JTAyeFxuIiwKKwkJc2FhNzExNF9yZWFkKGNsaWVudCwgMHgwMCkgPj4gNCwKIAkJc2FhNzExNF9yZWFkKGNsaWVudCwgMHgxZikpOwotCWRwcmludGsoMSwKLQkJS0VSTl9ERUJVRwotCQkiJXNfYXR0YWNoOiBwb3dlciBzYXZlIGNvbnRyb2w6IDB4JTAyeCwgc2NhbGVyIHN0YXR1czogMHglMDJ4XG4iLAotCQlJMkNfTkFNRShjbGllbnQpLCBzYWE3MTE0X3JlYWQoY2xpZW50LCAweDg4KSwKKwl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsCisJCSJwb3dlciBzYXZlIGNvbnRyb2w6IDB4JTAyeCwgc2NhbGVyIHN0YXR1czogMHglMDJ4XG4iLAorCQlzYWE3MTE0X3JlYWQoY2xpZW50LCAweDg4KSwKIAkJc2FhNzExNF9yZWFkKGNsaWVudCwgMHg4ZikpOwogCiAKIAlmb3IgKGkgPSAweDk0OyBpIDwgMHg5NjsgaSsrKSB7Ci0JCWRwcmludGsoMSwKLQkJCUtFUk5fREVCVUcKLQkJCSIlc19hdHRhY2g6IHJlZ1sweCUwMnhdID0gMHglMDJ4ICgweCUwMngpXG4iLAotCQkJSTJDX05BTUUoY2xpZW50KSwgaSwgc2FhNzExNF9yZWFkKGNsaWVudCwgaSksCisJCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwKKwkJCSJyZWdbMHglMDJ4XSA9IDB4JTAyeCAoMHglMDJ4KVxuIiwKKwkJCWksIHNhYTcxMTRfcmVhZChjbGllbnQsIGkpLAogCQkJZGVjb2Rlci0+cmVnW1JFR19BRERSKGkpXSk7CiAJfQogCi0JaSA9IGkyY19hdHRhY2hfY2xpZW50KGNsaWVudCk7Ci0JaWYgKGkpIHsKLQkJa2ZyZWUoY2xpZW50KTsKLQkJa2ZyZWUoZGVjb2Rlcik7Ci0JCXJldHVybiBpOwotCX0KLQogCS8vaSA9IHNhYTcxMTRfd3JpdGVfYmxvY2soY2xpZW50LCBpbml0LCBzaXplb2YoaW5pdCkpOwotCWkgPSAwOwotCWlmIChpIDwgMCkgewotCQlkcHJpbnRrKDEsIEtFUk5fRVJSICIlc19hdHRhY2ggZXJyb3I6IGluaXQgc3RhdHVzICVkXG4iLAotCQkJSTJDX05BTUUoY2xpZW50KSwgaSk7Ci0JfSBlbHNlIHsKLQkJZHByaW50aygxLAotCQkJS0VSTl9JTkZPCi0JCQkiJXNfYXR0YWNoOiBjaGlwIHZlcnNpb24gJXggYXQgYWRkcmVzcyAweCV4XG4iLAotCQkJSTJDX05BTUUoY2xpZW50KSwgc2FhNzExNF9yZWFkKGNsaWVudCwgMHgwMCkgPj4gNCwKLQkJCWNsaWVudC0+YWRkciA8PCAxKTsKLQl9Ci0KIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludAotc2FhNzExNF9hdHRhY2hfYWRhcHRlciAoc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyKQorc3RhdGljIGludCBzYWE3MTE0X3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQogewotCWRwcmludGsoMSwKLQkJS0VSTl9JTkZPCi0JCSJzYWE3MTE0LmM6IHN0YXJ0aW5nIHByb2JlIGZvciBhZGFwdGVyICVzICgweCV4KVxuIiwKLQkJSTJDX05BTUUoYWRhcHRlciksIGFkYXB0ZXItPmlkKTsKLQlyZXR1cm4gaTJjX3Byb2JlKGFkYXB0ZXIsICZhZGRyX2RhdGEsICZzYWE3MTE0X2RldGVjdF9jbGllbnQpOwotfQotCi1zdGF0aWMgaW50Ci1zYWE3MTE0X2RldGFjaF9jbGllbnQgKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCi17Ci0Jc3RydWN0IHNhYTcxMTQgKmRlY29kZXIgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKLQlpbnQgZXJyOwotCi0JZXJyID0gaTJjX2RldGFjaF9jbGllbnQoY2xpZW50KTsKLQlpZiAoZXJyKSB7Ci0JCXJldHVybiBlcnI7Ci0JfQotCi0Ja2ZyZWUoZGVjb2Rlcik7Ci0Ja2ZyZWUoY2xpZW50KTsKLQorCWtmcmVlKGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpKTsKIAlyZXR1cm4gMDsKIH0KIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAotc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIGkyY19kcml2ZXJfc2FhNzExNCA9IHsKLQkuZHJpdmVyID0gewotCQkubmFtZSA9ICJzYWE3MTE0IiwKLQl9LAotCi0JLmlkID0gSTJDX0RSSVZFUklEX1NBQTcxMTQsCi0KLQkuYXR0YWNoX2FkYXB0ZXIgPSBzYWE3MTE0X2F0dGFjaF9hZGFwdGVyLAotCS5kZXRhY2hfY2xpZW50ID0gc2FhNzExNF9kZXRhY2hfY2xpZW50LAotCS5jb21tYW5kID0gc2FhNzExNF9jb21tYW5kLAorc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkIHNhYTcxMTRfaWRbXSA9IHsKKwl7ICJzYWE3MTE0X29sZCIsIDAgfSwJLyogInNhYTcxMTQiIG1hcHMgdG8gdGhlIHNhYTcxMTUgZHJpdmVyICovCisJeyB9CiB9OworTU9EVUxFX0RFVklDRV9UQUJMRShpMmMsIHNhYTcxMTRfaWQpOwogCi1zdGF0aWMgaW50IF9faW5pdAotc2FhNzExNF9pbml0ICh2b2lkKQotewotCXJldHVybiBpMmNfYWRkX2RyaXZlcigmaTJjX2RyaXZlcl9zYWE3MTE0KTsKLX0KLQotc3RhdGljIHZvaWQgX19leGl0Ci1zYWE3MTE0X2V4aXQgKHZvaWQpCi17Ci0JaTJjX2RlbF9kcml2ZXIoJmkyY19kcml2ZXJfc2FhNzExNCk7Ci19Ci0KLW1vZHVsZV9pbml0KHNhYTcxMTRfaW5pdCk7Ci1tb2R1bGVfZXhpdChzYWE3MTE0X2V4aXQpOworc3RhdGljIHN0cnVjdCB2NGwyX2kyY19kcml2ZXJfZGF0YSB2NGwyX2kyY19kYXRhID0geworCS5uYW1lID0gInNhYTcxMTQiLAorCS5kcml2ZXJpZCA9IEkyQ19EUklWRVJJRF9TQUE3MTE0LAorCS5jb21tYW5kID0gc2FhNzExNF9jb21tYW5kLAorCS5wcm9iZSA9IHNhYTcxMTRfcHJvYmUsCisJLnJlbW92ZSA9IHNhYTcxMTRfcmVtb3ZlLAorCS5pZF90YWJsZSA9IHNhYTcxMTRfaWQsCit9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTE1LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMTUuYwppbmRleCBhZDczM2NhLi5jOGU5Y2IzIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMTUuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMTUuYwpAQCAtMTA1Nyw3ICsxMDU3LDcgQEAKIAlmb3IgKGkgPSAwOyBpIDw9IDIzOyBpKyspCiAJCWxjcltpXSA9IDB4ZmY7CiAKLQlpZiAoZm10LT5zZXJ2aWNlX3NldCA9PSAwKSB7CisJaWYgKGZtdCA9PSBOVUxMKSB7CiAJCS8qIHJhdyBWQkkgKi8KIAkJaWYgKGlzXzUwaHopCiAJCQlmb3IgKGkgPSA2OyBpIDw9IDIzOyBpKyspCkBAIC0xMTEzLDcgKzExMTMsNyBAQAogCX0KIAogCS8qIGVuYWJsZS9kaXNhYmxlIHJhdyBWQkkgY2FwdHVyaW5nICovCi0Jc2FhNzExeF93cml0ZXJlZ3MoY2xpZW50LCBmbXQtPnNlcnZpY2Vfc2V0ID09IDAgPworCXNhYTcxMXhfd3JpdGVyZWdzKGNsaWVudCwgZm10ID09IE5VTEwgPwogCQkJCXNhYTcxMTVfY2ZnX3ZiaV9vbiA6CiAJCQkJc2FhNzExNV9jZmdfdmJpX29mZik7CiB9CkBAIC0xMTUzLDYgKzExNTMsMTAgQEAKIAkJc2FhNzExeF9zZXRfbGNyKGNsaWVudCwgJmZtdC0+Zm10LnNsaWNlZCk7CiAJCXJldHVybiAwOwogCX0KKwlpZiAoZm10LT50eXBlID09IFY0TDJfQlVGX1RZUEVfVkJJX0NBUFRVUkUpIHsKKwkJc2FhNzExeF9zZXRfbGNyKGNsaWVudCwgTlVMTCk7CisJCXJldHVybiAwOworCX0KIAlpZiAoZm10LT50eXBlICE9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKQEAgLTEzMDksMTAgKzEzMTMsMTMgQEAKIAljYXNlIFZJRElPQ19JTlRfU19WSURFT19ST1VUSU5HOgogCXsKIAkJc3RydWN0IHY0bDJfcm91dGluZyAqcm91dGUgPSBhcmc7CisJCXUzMiBpbnB1dCA9IHJvdXRlLT5pbnB1dDsKKwkJdTggbWFzayA9IChzdGF0ZS0+aWRlbnQgPT0gVjRMMl9JREVOVF9TQUE3MTExKSA/IDB4ZjggOiAweGYwOwogCiAJCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgImRlY29kZXIgc2V0IGlucHV0ICVkIG91dHB1dCAlZFxuIiwgcm91dGUtPmlucHV0LCByb3V0ZS0+b3V0cHV0KTsKLQkJLyogc2FhNzExMyBkb2VzIG5vdCBoYXZlIHRoZXNlIGlucHV0cyAqLwotCQlpZiAoc3RhdGUtPmlkZW50ID09IFY0TDJfSURFTlRfU0FBNzExMyAmJgorCQkvKiBzYWE3MTExLzMgZG9lcyBub3QgaGF2ZSB0aGVzZSBpbnB1dHMgKi8KKwkJaWYgKChzdGF0ZS0+aWRlbnQgPT0gVjRMMl9JREVOVF9TQUE3MTEzIHx8CisJCSAgICAgc3RhdGUtPmlkZW50ID09IFY0TDJfSURFTlRfU0FBNzExMSkgJiYKIAkJICAgIChyb3V0ZS0+aW5wdXQgPT0gU0FBNzExNV9DT01QT1NJVEU0IHx8CiAJCSAgICAgcm91dGUtPmlucHV0ID09IFNBQTcxMTVfQ09NUE9TSVRFNSkpIHsKIAkJCXJldHVybiAtRUlOVkFMOwpAQCAtMTMyNywxMCArMTMzNCwyMyBAQAogCQkJKHJvdXRlLT5pbnB1dCA+PSBTQUE3MTE1X1NWSURFTzApID8gIlMtVmlkZW8iIDogIkNvbXBvc2l0ZSIsIChyb3V0ZS0+b3V0cHV0ID09IFNBQTcxMTVfSVBPUlRfT04pID8gImlwb3J0IG9uIiA6ICJpcG9ydCBvZmYiKTsKIAkJc3RhdGUtPmlucHV0ID0gcm91dGUtPmlucHV0OwogCisJCS8qIHNhYTcxMTEgaGFzIHNsaWdodGx5IGRpZmZlcmVudCBpbnB1dCBudW1iZXJpbmcgKi8KKwkJaWYgKHN0YXRlLT5pZGVudCA9PSBWNEwyX0lERU5UX1NBQTcxMTEpIHsKKwkJCWlmIChpbnB1dCA+PSBTQUE3MTE1X0NPTVBPU0lURTQpCisJCQkJaW5wdXQgLT0gMjsKKwkJCS8qIHNhYTcxMTEgc3BlY2lmaWMgKi8KKwkJCXNhYTcxMXhfd3JpdGUoY2xpZW50LCBSXzEwX0NIUk9NQV9DTlRMXzIsCisJCQkJCShzYWE3MTF4X3JlYWQoY2xpZW50LCBSXzEwX0NIUk9NQV9DTlRMXzIpICYgMHgzZikgfAorCQkJCQkoKHJvdXRlLT5vdXRwdXQgJiAweGMwKSBeIDB4NDApKTsKKwkJCXNhYTcxMXhfd3JpdGUoY2xpZW50LCBSXzEzX1JUX1hfUE9SVF9PVVRfQ05UTCwKKwkJCQkJKHNhYTcxMXhfcmVhZChjbGllbnQsIFJfMTNfUlRfWF9QT1JUX09VVF9DTlRMKSAmIDB4ZjApIHwKKwkJCQkJKChyb3V0ZS0+b3V0cHV0ICYgMikgPyAweDBhIDogMCkpOworCQl9CisKIAkJLyogc2VsZWN0IG1vZGUgKi8KIAkJc2FhNzExeF93cml0ZShjbGllbnQsIFJfMDJfSU5QVVRfQ05UTF8xLAotCQkJICAgICAgKHNhYTcxMXhfcmVhZChjbGllbnQsIFJfMDJfSU5QVVRfQ05UTF8xKSAmIDB4ZjApIHwKLQkJCSAgICAgICBzdGF0ZS0+aW5wdXQpOworCQkJICAgICAgKHNhYTcxMXhfcmVhZChjbGllbnQsIFJfMDJfSU5QVVRfQ05UTF8xKSAmIG1hc2spIHwKKwkJCSAgICAgICBpbnB1dCk7CiAKIAkJLyogYnlwYXNzIGNocm9taW5hbmNlIHRyYXAgZm9yIFMtVmlkZW8gbW9kZXMgKi8KIAkJc2FhNzExeF93cml0ZShjbGllbnQsIFJfMDlfTFVNQV9DTlRMLApAQCAtMTM4NCw2ICsxNDA0LDEzIEBACiAJCXNhYTcxMXhfd3JpdGVyZWdzKGNsaWVudCwgc2FhNzExNV9jZmdfcmVzZXRfc2NhbGVyKTsKIAkJYnJlYWs7CiAKKwljYXNlIFZJRElPQ19JTlRfU19HUElPOgorCQlpZiAoc3RhdGUtPmlkZW50ICE9IFY0TDJfSURFTlRfU0FBNzExMSkKKwkJCXJldHVybiAtRUlOVkFMOworCQlzYWE3MTF4X3dyaXRlKGNsaWVudCwgMHgxMSwgKHNhYTcxMXhfcmVhZChjbGllbnQsIDB4MTEpICYgMHg3ZikgfAorCQkJKCoodTMyICopYXJnID8gMHg4MCA6IDApKTsKKwkJYnJlYWs7CisKIAljYXNlIFZJRElPQ19JTlRfR19WQklfREFUQToKIAl7CiAJCXN0cnVjdCB2NGwyX3NsaWNlZF92YmlfZGF0YSAqZGF0YSA9IGFyZzsKQEAgLTE1MzksNyArMTU2Niw4IEBACiAJCXN0YXRlLT5jcnlzdGFsX2ZyZXEgPSBTQUE3MTE1X0ZSRVFfMzJfMTFfTUhaOwogCQlzYWE3MTF4X3dyaXRlcmVncyhjbGllbnQsIHNhYTcxMTVfaW5pdF9hdXRvX2lucHV0KTsKIAl9Ci0Jc2FhNzExeF93cml0ZXJlZ3MoY2xpZW50LCBzYWE3MTE1X2luaXRfbWlzYyk7CisJaWYgKHN0YXRlLT5pZGVudCAhPSBWNEwyX0lERU5UX1NBQTcxMTEpCisJCXNhYTcxMXhfd3JpdGVyZWdzKGNsaWVudCwgc2FhNzExNV9pbml0X21pc2MpOwogCXNhYTcxMXhfc2V0X3Y0bHN0ZChjbGllbnQsIFY0TDJfU1REX05UU0MpOwogCiAJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAic3RhdHVzOiAoMUUpIDB4JTAyeCwgKDFGKSAweCUwMnhcbiIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMjcuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEyNy5jCmluZGV4IGQwZTgzZmUuLmNjMDJmYjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEyNy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEyNy5jCkBAIC0yOSw3ICsyOSw3IEBACiAgKiBOb3RlOiB0aGUgc2FhNzEyNiBpcyBpZGVudGljYWwgdG8gdGhlIHNhYTcxMjcsIGFuZCB0aGUgc2FhNzEyOCBpcwogICogaWRlbnRpY2FsIHRvIHRoZSBzYWE3MTI5LCBleGNlcHQgdGhhdCB0aGUgc2FhNzEyNiBhbmQgc2FhNzEyOCBoYXZlCiAgKiBtYWNyb3Zpc2lvbiBhbnRpLXRhcGluZyBzdXBwb3J0LiBUaGlzIGRyaXZlciB3aWxsIGFsbW9zdCBjZXJ0YWlubHkKLSAqIHdvcmsgZmluZCBmb3IgdGhvc2UgY2hpcHMsIGV4Y2VwdCBvZiBjb3Vyc2UgZm9yIHRoZSBtaXNzaW5nIGFudGktdGFwaW5nCisgKiB3b3JrIGZpbmUgZm9yIHRob3NlIGNoaXBzLCBleGNlcHQgb2YgY291cnNlIGZvciB0aGUgbWlzc2luZyBhbnRpLXRhcGluZwogICogc3VwcG9ydC4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTY3NTJocy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTY3NTJocy5jCmluZGV4IDcwN2JlMTcuLjFmYjZlY2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE2NzUyaHMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNjc1MmhzLmMKQEAgLTEsMyArMSwyNyBAQAorIC8qCisgICAgc2FhNjc1MmhzIC0gaTJjLWRyaXZlciBmb3IgdGhlIHNhYTY3NTJocyBieSBQaGlsaXBzCisKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDQgQW5kcmV3IGRlIFF1aW5jZXkKKworICAgIEFDLTMgc3VwcG9ydDoKKworICAgIENvcHlyaWdodCAoQykgMjAwOCBIYW5zIFZlcmt1aWwgPGh2ZXJrdWlsQHhzNGFsbC5ubD4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2cyBwdWJsaXNoZWQgYnkKKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNdnNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICAqLworCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CkBAIC0xMCw2ICszNCw4IEBACiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC92aWRlb2RldjIuaD4KICNpbmNsdWRlIDxtZWRpYS92NGwyLWNvbW1vbi5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItY2hpcC1pZGVudC5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItaTJjLWRydi1sZWdhY3kuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvY3JjMzIuaD4KIApAQCAtMjcsOSArNTMsNiBAQAogTU9EVUxFX0FVVEhPUigiQW5kcmV3IGRlIFF1aW5jZXkiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIAotc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIGRyaXZlcjsKLXN0YXRpYyBzdHJ1Y3QgaTJjX2NsaWVudCBjbGllbnRfdGVtcGxhdGU7Ci0KIGVudW0gc2FhNjc1MmhzX3ZpZGVvZm9ybWF0IHsKIAlTQUE2NzUySFNfVkZfRDEgPSAwLCAgICAvKiBzdGFuZGFyZCBEMSB2aWRlbyBmb3JtYXQ6IDcyMHg1NzYgKi8KIAlTQUE2NzUySFNfVkZfMl8zX0QxID0gMSwvKiAyLzNEMSB2aWRlbyBmb3JtYXQ6IDQ4MHg1NzYgKi8KQEAgLTQ2LDcgKzY5LDkgQEAKIAlfX3UxNgkJCQl0c19waWRfcGNyOwogCiAJLyogYXVkaW8gKi8KLQllbnVtIHY0bDJfbXBlZ19hdWRpb19sMl9iaXRyYXRlIGF1X2wyX2JpdHJhdGU7CisJZW51bSB2NGwyX21wZWdfYXVkaW9fZW5jb2RpbmcgICAgYXVfZW5jb2Rpbmc7CisJZW51bSB2NGwyX21wZWdfYXVkaW9fbDJfYml0cmF0ZSAgYXVfbDJfYml0cmF0ZTsKKwllbnVtIHY0bDJfbXBlZ19hdWRpb19hYzNfYml0cmF0ZSBhdV9hYzNfYml0cmF0ZTsKIAogCS8qIHZpZGVvICovCiAJZW51bSB2NGwyX21wZWdfdmlkZW9fYXNwZWN0CXZpX2FzcGVjdDsKQEAgLTcwLDcgKzk1LDkgQEAKIH07CiAKIHN0cnVjdCBzYWE2NzUyaHNfc3RhdGUgewotCXN0cnVjdCBpMmNfY2xpZW50ICAgICAgICAgICAgIGNsaWVudDsKKwlpbnQgCQkJICAgICAgY2hpcDsKKwl1MzIgCQkJICAgICAgcmV2aXNpb247CisJaW50IAkJCSAgICAgIGhhc19hYzM7CiAJc3RydWN0IHNhYTY3NTJoc19tcGVnX3BhcmFtcyAgcGFyYW1zOwogCWVudW0gc2FhNjc1MmhzX3ZpZGVvZm9ybWF0ICAgIHZpZGVvX2Zvcm1hdDsKIAl2NGwyX3N0ZF9pZCAgICAgICAgICAgICAgICAgICBzdGFuZGFyZDsKQEAgLTE0NSw2ICsxNzIsMzkgQEAKIAkweDAwLCAweDAwLCAweDAwLCAweDAwIC8qIENSQzMyICovCiB9OwogCitzdGF0aWMgdTggUE1UX0FDM1tdID0geworCTB4YzIsIC8qIGkyYyByZWdpc3RlciAqLworCTB4MDEsIC8qIHRhYmxlIG51bWJlciBmb3IgZW5jb2RlcigxKSAqLworCTB4NDcsIC8qIHN5bmMgKi8KKworCTB4NDAsIC8qIHRyYW5zcG9ydF9lcnJvcl9pbmRpY2F0b3IoMCksIHBheWxvYWRfdW5pdF9zdGFydCgxKSwgdHJhbnNwb3J0X3ByaW9yaXR5KDApICovCisJMHgxMCwgLyogUE1UIFBJRCAoMHgwMDEwKSAqLworCTB4MTAsIC8qIHRyYW5zcG9ydF9zY3JhbWJsaW5nX2NvbnRyb2woMDApLCBhZGFwdGF0aW9uX2ZpZWxkX2NvbnRyb2woMDEpLCBjb250aW51aXR5X2NvdW50ZXIoMCkgKi8KKworCTB4MDAsIC8qIFBTSSBwb2ludGVyIHRvIHN0YXJ0IG9mIHRhYmxlICovCisKKwkweDAyLCAvKiBUSUQgKDIpICovCisJMHhiMCwgMHgxYSwgLyogc2VjdGlvbl9zeW50YXhfaW5kaWNhdG9yKDEpLCBzZWN0aW9uX2xlbmd0aCgyNikgKi8KKworCTB4MDAsIDB4MDEsIC8qIHByb2dyYW1fbnVtYmVyKDEpICovCisKKwkweGMxLCAvKiB2ZXJzaW9uX251bWJlcigwKSwgY3VycmVudF9uZXh0X2luZGljYXRvcigxKSAqLworCisJMHgwMCwgMHgwMCwgLyogc2VjdGlvbl9udW1iZXIoMCksIGxhc3Rfc2VjdGlvbl9udW1iZXIoMCkgKi8KKworCTB4ZTEsIDB4MDQsIC8qIFBDUl9QSUQgKDB4MDEwNCkgKi8KKworCTB4ZjAsIDB4MDAsIC8qIHByb2dyYW1faW5mb19sZW5ndGgoMCkgKi8KKworCTB4MDIsIDB4ZTEsIDB4MDAsIDB4ZjAsIDB4MDAsIC8qIHZpZGVvIHN0cmVhbSB0eXBlKDIpLCBwaWQgKi8KKwkweDA2LCAweGUxLCAweDAzLCAweGYwLCAweDAzLCAvKiBhdWRpbyBzdHJlYW0gdHlwZSg2KSwgcGlkICovCisJMHg2YSwgLyogQUMzICovCisJMHgwMSwgLyogRGVzY3JpcHRvcl9sZW5ndGgoMSkgKi8KKwkweDAwLCAvKiBjb21wb25lbnRfdHlwZV9mbGFnKDApLCBic2lkX2ZsYWcoMCksIG1haW5pZF9mbGFnKDApLCBhc3ZjX2ZsYWcoMCksIHJlc2VydmVkIGZsYWdzKDApICovCisKKwkweEVELCAweERFLCAweDJELCAweEYzIC8qIENSQzMyIEJFICovCit9OworCiBzdGF0aWMgc3RydWN0IHNhYTY3NTJoc19tcGVnX3BhcmFtcyBwYXJhbV9kZWZhdWx0cyA9CiB7CiAJLnRzX3BpZF9wbXQgICAgICA9IDE2LApAQCAtMTU3LDEyICsyMTcsMTQgQEAKIAkudmlfYml0cmF0ZV9wZWFrID0gNjAwMCwKIAkudmlfYml0cmF0ZV9tb2RlID0gVjRMMl9NUEVHX1ZJREVPX0JJVFJBVEVfTU9ERV9WQlIsCiAKKwkuYXVfZW5jb2RpbmcgICAgID0gVjRMMl9NUEVHX0FVRElPX0VOQ09ESU5HX0xBWUVSXzIsCiAJLmF1X2wyX2JpdHJhdGUgICA9IFY0TDJfTVBFR19BVURJT19MMl9CSVRSQVRFXzI1NkssCisJLmF1X2FjM19iaXRyYXRlICA9IFY0TDJfTVBFR19BVURJT19BQzNfQklUUkFURV8yNTZLLAogfTsKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCi1zdGF0aWMgaW50IHNhYTY3NTJoc19jaGlwX2NvbW1hbmQoc3RydWN0IGkyY19jbGllbnQqIGNsaWVudCwKK3N0YXRpYyBpbnQgc2FhNjc1MmhzX2NoaXBfY29tbWFuZChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAogCQkJCSAgZW51bSBzYWE2NzUyaHNfY29tbWFuZCBjb21tYW5kKQogewogCXVuc2lnbmVkIGNoYXIgYnVmWzNdOwpAQCAtMjI5LDQ1ICsyOTEsNjEgQEAKIH0KIAogCi1zdGF0aWMgaW50IHNhYTY3NTJoc19zZXRfYml0cmF0ZShzdHJ1Y3QgaTJjX2NsaWVudCogY2xpZW50LAotCQkJCSBzdHJ1Y3Qgc2FhNjc1MmhzX21wZWdfcGFyYW1zKiBwYXJhbXMpCitzdGF0aWMgaW5saW5lIHZvaWQgc2V0X3JlZzgoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdWludDhfdCByZWcsIHVpbnQ4X3QgdmFsKQoreworCXU4IGJ1ZlsyXTsKKworCWJ1ZlswXSA9IHJlZzsKKwlidWZbMV0gPSB2YWw7CisJaTJjX21hc3Rlcl9zZW5kKGNsaWVudCwgYnVmLCAyKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHNldF9yZWcxNihzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1aW50OF90IHJlZywgdWludDE2X3QgdmFsKQogewogCXU4IGJ1ZlszXTsKKworCWJ1ZlswXSA9IHJlZzsKKwlidWZbMV0gPSB2YWwgPj4gODsKKwlidWZbMl0gPSB2YWwgJiAweGZmOworCWkyY19tYXN0ZXJfc2VuZChjbGllbnQsIGJ1ZiwgMyk7Cit9CisKK3N0YXRpYyBpbnQgc2FhNjc1MmhzX3NldF9iaXRyYXRlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCisJCQkJIHN0cnVjdCBzYWE2NzUyaHNfc3RhdGUgKmgpCit7CisJc3RydWN0IHNhYTY3NTJoc19tcGVnX3BhcmFtcyAqcGFyYW1zID0gJmgtPnBhcmFtczsKIAlpbnQgdG90X2JpdHJhdGU7CisJaW50IGlzXzM4NGs7CiAKIAkvKiBzZXQgdGhlIGJpdHJhdGUgbW9kZSAqLwotCWJ1ZlswXSA9IDB4NzE7Ci0JYnVmWzFdID0gKHBhcmFtcy0+dmlfYml0cmF0ZV9tb2RlID09IFY0TDJfTVBFR19WSURFT19CSVRSQVRFX01PREVfVkJSKSA/IDAgOiAxOwotCWkyY19tYXN0ZXJfc2VuZChjbGllbnQsIGJ1ZiwgMik7CisJc2V0X3JlZzgoY2xpZW50LCAweDcxLAorCQlwYXJhbXMtPnZpX2JpdHJhdGVfbW9kZSAhPSBWNEwyX01QRUdfVklERU9fQklUUkFURV9NT0RFX1ZCUik7CiAKIAkvKiBzZXQgdGhlIHZpZGVvIGJpdHJhdGUgKi8KIAlpZiAocGFyYW1zLT52aV9iaXRyYXRlX21vZGUgPT0gVjRMMl9NUEVHX1ZJREVPX0JJVFJBVEVfTU9ERV9WQlIpIHsKIAkJLyogc2V0IHRoZSB0YXJnZXQgYml0cmF0ZSAqLwotCQlidWZbMF0gPSAweDgwOwotCQlidWZbMV0gPSBwYXJhbXMtPnZpX2JpdHJhdGUgPj4gODsKLQkJYnVmWzJdID0gcGFyYW1zLT52aV9iaXRyYXRlICYgMHhmZjsKLQkJaTJjX21hc3Rlcl9zZW5kKGNsaWVudCwgYnVmLCAzKTsKKwkJc2V0X3JlZzE2KGNsaWVudCwgMHg4MCwgcGFyYW1zLT52aV9iaXRyYXRlKTsKIAogCQkvKiBzZXQgdGhlIG1heCBiaXRyYXRlICovCi0JCWJ1ZlswXSA9IDB4ODE7Ci0JCWJ1ZlsxXSA9IHBhcmFtcy0+dmlfYml0cmF0ZV9wZWFrID4+IDg7Ci0JCWJ1ZlsyXSA9IHBhcmFtcy0+dmlfYml0cmF0ZV9wZWFrICYgMHhmZjsKLQkJaTJjX21hc3Rlcl9zZW5kKGNsaWVudCwgYnVmLCAzKTsKKwkJc2V0X3JlZzE2KGNsaWVudCwgMHg4MSwgcGFyYW1zLT52aV9iaXRyYXRlX3BlYWspOwogCQl0b3RfYml0cmF0ZSA9IHBhcmFtcy0+dmlfYml0cmF0ZV9wZWFrOwogCX0gZWxzZSB7CiAJCS8qIHNldCB0aGUgdGFyZ2V0IGJpdHJhdGUgKG5vIG1heCBiaXRyYXRlIGZvciBDQlIpICovCi0JCWJ1ZlswXSA9IDB4ODE7Ci0JCWJ1ZlsxXSA9IHBhcmFtcy0+dmlfYml0cmF0ZSA+PiA4OwotCQlidWZbMl0gPSBwYXJhbXMtPnZpX2JpdHJhdGUgJiAweGZmOwotCQlpMmNfbWFzdGVyX3NlbmQoY2xpZW50LCBidWYsIDMpOworCQlzZXRfcmVnMTYoY2xpZW50LCAweDgxLCBwYXJhbXMtPnZpX2JpdHJhdGUpOwogCQl0b3RfYml0cmF0ZSA9IHBhcmFtcy0+dmlfYml0cmF0ZTsKIAl9CiAKKwkvKiBzZXQgdGhlIGF1ZGlvIGVuY29kaW5nICovCisJc2V0X3JlZzgoY2xpZW50LCAweDkzLAorCQkJcGFyYW1zLT5hdV9lbmNvZGluZyA9PSBWNEwyX01QRUdfQVVESU9fRU5DT0RJTkdfQUMzKTsKKwogCS8qIHNldCB0aGUgYXVkaW8gYml0cmF0ZSAqLwotCWJ1ZlswXSA9IDB4OTQ7Ci0JYnVmWzFdID0gKFY0TDJfTVBFR19BVURJT19MMl9CSVRSQVRFXzI1NksgPT0gcGFyYW1zLT5hdV9sMl9iaXRyYXRlKSA/IDAgOiAxOwotCWkyY19tYXN0ZXJfc2VuZChjbGllbnQsIGJ1ZiwgMik7Ci0JdG90X2JpdHJhdGUgKz0gKFY0TDJfTVBFR19BVURJT19MMl9CSVRSQVRFXzI1NksgPT0gcGFyYW1zLT5hdV9sMl9iaXRyYXRlKSA/IDI1NiA6IDM4NDsKKwlpZiAocGFyYW1zLT5hdV9lbmNvZGluZyA9PSBWNEwyX01QRUdfQVVESU9fRU5DT0RJTkdfQUMzKQorCQlpc18zODRrID0gVjRMMl9NUEVHX0FVRElPX0FDM19CSVRSQVRFXzM4NEsgPT0gcGFyYW1zLT5hdV9hYzNfYml0cmF0ZTsKKwllbHNlCisJCWlzXzM4NGsgPSBWNEwyX01QRUdfQVVESU9fTDJfQklUUkFURV8zODRLID09IHBhcmFtcy0+YXVfbDJfYml0cmF0ZTsKKwlzZXRfcmVnOChjbGllbnQsIDB4OTQsIGlzXzM4NGspOworCXRvdF9iaXRyYXRlICs9IGlzXzM4NGsgPyAzODQgOiAyNTY7CiAKIAkvKiBOb3RlOiB0aGUgdG90YWwgbWF4IGJpdHJhdGUgaXMgZGV0ZXJtaW5lZCBieSBhZGRpbmcgdGhlIHZpZGVvIGFuZCBhdWRpbwogCSAgIGJpdHJhdGVzIHRvZ2V0aGVyIGFuZCBhbHNvIGFkZGluZyBhbiBleHRyYSA3NjhrYml0L3MgdG8gc3RheSBvbiB0aGUKQEAgLTI3OCwxNiArMzU2LDEyIEBACiAJCXRvdF9iaXRyYXRlID0gTVBFR19UT1RBTF9UQVJHRVRfQklUUkFURV9NQVg7CiAKIAkvKiBzZXQgdGhlIHRvdGFsIGJpdHJhdGUgKi8KLQlidWZbMF0gPSAweGIxOwotCWJ1ZlsxXSA9IHRvdF9iaXRyYXRlID4+IDg7Ci0JYnVmWzJdID0gdG90X2JpdHJhdGUgJiAweGZmOwotCWkyY19tYXN0ZXJfc2VuZChjbGllbnQsIGJ1ZiwgMyk7Ci0KKwlzZXRfcmVnMTYoY2xpZW50LCAweGIxLCB0b3RfYml0cmF0ZSk7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIHNhYTY3NTJoc19zZXRfc3Vic2FtcGxpbmcoc3RydWN0IGkyY19jbGllbnQqIGNsaWVudCwKLQkJCQkgICAgICBzdHJ1Y3QgdjRsMl9mb3JtYXQqIGYpCitzdGF0aWMgdm9pZCBzYWE2NzUyaHNfc2V0X3N1YnNhbXBsaW5nKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCisJCQkJICAgICAgc3RydWN0IHY0bDJfZm9ybWF0ICpmKQogewogCXN0cnVjdCBzYWE2NzUyaHNfc3RhdGUgKmggPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKIAlpbnQgZGlzdF8zNTIsIGRpc3RfNDgwLCBkaXN0XzcyMDsKQEAgLTMzMiw3ICs0MDYsNyBAQAogfQogCiAKLXN0YXRpYyBpbnQgaGFuZGxlX2N0cmwoc3RydWN0IHNhYTY3NTJoc19tcGVnX3BhcmFtcyAqcGFyYW1zLAorc3RhdGljIGludCBoYW5kbGVfY3RybChpbnQgaGFzX2FjMywgc3RydWN0IHNhYTY3NTJoc19tcGVnX3BhcmFtcyAqcGFyYW1zLAogCQlzdHJ1Y3QgdjRsMl9leHRfY29udHJvbCAqY3RybCwgdW5zaWduZWQgaW50IGNtZCkKIHsKIAlpbnQgb2xkID0gMCwgbmV3OwpAQCAtMzc5LDggKzQ1Myw5IEBACiAJCQlwYXJhbXMtPnRzX3BpZF9wY3IgPSBuZXc7CiAJCQlicmVhazsKIAkJY2FzZSBWNEwyX0NJRF9NUEVHX0FVRElPX0VOQ09ESU5HOgotCQkJb2xkID0gVjRMMl9NUEVHX0FVRElPX0VOQ09ESU5HX0xBWUVSXzI7Ci0JCQlpZiAoc2V0ICYmIG5ldyAhPSBvbGQpCisJCQlvbGQgPSBwYXJhbXMtPmF1X2VuY29kaW5nOworCQkJaWYgKHNldCAmJiBuZXcgIT0gVjRMMl9NUEVHX0FVRElPX0VOQ09ESU5HX0xBWUVSXzIgJiYKKwkJCSAgICAoIWhhc19hYzMgfHwgbmV3ICE9IFY0TDJfTVBFR19BVURJT19FTkNPRElOR19BQzMpKQogCQkJCXJldHVybiAtRVJBTkdFOwogCQkJbmV3ID0gb2xkOwogCQkJYnJlYWs7CkBAIC0zOTUsNiArNDcwLDE5IEBACiAJCQkJbmV3ID0gVjRMMl9NUEVHX0FVRElPX0wyX0JJVFJBVEVfMzg0SzsKIAkJCXBhcmFtcy0+YXVfbDJfYml0cmF0ZSA9IG5ldzsKIAkJCWJyZWFrOworCQljYXNlIFY0TDJfQ0lEX01QRUdfQVVESU9fQUMzX0JJVFJBVEU6CisJCQlpZiAoIWhhc19hYzMpCisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQlvbGQgPSBwYXJhbXMtPmF1X2FjM19iaXRyYXRlOworCQkJaWYgKHNldCAmJiBuZXcgIT0gVjRMMl9NUEVHX0FVRElPX0FDM19CSVRSQVRFXzI1NksgJiYKKwkJCQkgICBuZXcgIT0gVjRMMl9NUEVHX0FVRElPX0FDM19CSVRSQVRFXzM4NEspCisJCQkJcmV0dXJuIC1FUkFOR0U7CisJCQlpZiAobmV3IDw9IFY0TDJfTVBFR19BVURJT19BQzNfQklUUkFURV8yNTZLKQorCQkJCW5ldyA9IFY0TDJfTVBFR19BVURJT19BQzNfQklUUkFURV8yNTZLOworCQkJZWxzZQorCQkJCW5ldyA9IFY0TDJfTVBFR19BVURJT19BQzNfQklUUkFURV8zODRLOworCQkJcGFyYW1zLT5hdV9hYzNfYml0cmF0ZSA9IG5ldzsKKwkJCWJyZWFrOwogCQljYXNlIFY0TDJfQ0lEX01QRUdfQVVESU9fU0FNUExJTkdfRlJFUToKIAkJCW9sZCA9IFY0TDJfTVBFR19BVURJT19TQU1QTElOR19GUkVRXzQ4MDAwOwogCQkJaWYgKHNldCAmJiBuZXcgIT0gb2xkKQpAQCAtNDQ4LDE3ICs1MzYsMTkgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBzYWE2NzUyaHNfcWN0cmwoc3RydWN0IHNhYTY3NTJoc19tcGVnX3BhcmFtcyAqcGFyYW1zLAorc3RhdGljIGludCBzYWE2NzUyaHNfcWN0cmwoc3RydWN0IHNhYTY3NTJoc19zdGF0ZSAqaCwKIAkJc3RydWN0IHY0bDJfcXVlcnljdHJsICpxY3RybCkKIHsKKwlzdHJ1Y3Qgc2FhNjc1MmhzX21wZWdfcGFyYW1zICpwYXJhbXMgPSAmaC0+cGFyYW1zOwogCWludCBlcnI7CiAKIAlzd2l0Y2ggKHFjdHJsLT5pZCkgewogCWNhc2UgVjRMMl9DSURfTVBFR19BVURJT19FTkNPRElORzoKIAkJcmV0dXJuIHY0bDJfY3RybF9xdWVyeV9maWxsKHFjdHJsLAogCQkJCVY0TDJfTVBFR19BVURJT19FTkNPRElOR19MQVlFUl8yLAotCQkJCVY0TDJfTVBFR19BVURJT19FTkNPRElOR19MQVlFUl8yLCAxLAotCQkJCVY0TDJfTVBFR19BVURJT19FTkNPRElOR19MQVlFUl8yKTsKKwkJCQloLT5oYXNfYWMzID8gVjRMMl9NUEVHX0FVRElPX0VOQ09ESU5HX0FDMyA6CisJCQkJCVY0TDJfTVBFR19BVURJT19FTkNPRElOR19MQVlFUl8yLAorCQkJCTEsIFY0TDJfTVBFR19BVURJT19FTkNPRElOR19MQVlFUl8yKTsKIAogCWNhc2UgVjRMMl9DSURfTVBFR19BVURJT19MMl9CSVRSQVRFOgogCQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwocWN0cmwsCkBAIC00NjYsNiArNTU2LDE0IEBACiAJCQkJVjRMMl9NUEVHX0FVRElPX0wyX0JJVFJBVEVfMzg0SywgMSwKIAkJCQlWNEwyX01QRUdfQVVESU9fTDJfQklUUkFURV8yNTZLKTsKIAorCWNhc2UgVjRMMl9DSURfTVBFR19BVURJT19BQzNfQklUUkFURToKKwkJaWYgKCFoLT5oYXNfYWMzKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbChxY3RybCwKKwkJCQlWNEwyX01QRUdfQVVESU9fQUMzX0JJVFJBVEVfMjU2SywKKwkJCQlWNEwyX01QRUdfQVVESU9fQUMzX0JJVFJBVEVfMzg0SywgMSwKKwkJCQlWNEwyX01QRUdfQVVESU9fQUMzX0JJVFJBVEVfMjU2Syk7CisKIAljYXNlIFY0TDJfQ0lEX01QRUdfQVVESU9fU0FNUExJTkdfRlJFUToKIAkJcmV0dXJuIHY0bDJfY3RybF9xdWVyeV9maWxsKHFjdHJsLAogCQkJCVY0TDJfTVBFR19BVURJT19TQU1QTElOR19GUkVRXzQ4MDAwLApAQCAtNTEyLDQ0ICs2MTAsNTcgQEAKIAlyZXR1cm4gLUVJTlZBTDsKIH0KIAotc3RhdGljIGludCBzYWE2NzUyaHNfcW1lbnUoc3RydWN0IHNhYTY3NTJoc19tcGVnX3BhcmFtcyAqcGFyYW1zLAorc3RhdGljIGludCBzYWE2NzUyaHNfcW1lbnUoc3RydWN0IHNhYTY3NTJoc19zdGF0ZSAqaCwKIAkJc3RydWN0IHY0bDJfcXVlcnltZW51ICpxbWVudSkKIHsKLQlzdGF0aWMgY29uc3QgY2hhciAqbXBlZ19hdWRpb19sMl9iaXRyYXRlW10gPSB7Ci0JCSIiLAotCQkiIiwKLQkJIiIsCi0JCSIiLAotCQkiIiwKLQkJIiIsCi0JCSIiLAotCQkiIiwKLQkJIiIsCi0JCSIiLAotCQkiIiwKLQkJIjI1NiBrYnBzIiwKLQkJIiIsCi0JCSIzODQga2JwcyIsCi0JCU5VTEwKKwlzdGF0aWMgY29uc3QgdTMyIG1wZWdfYXVkaW9fZW5jb2RpbmdbXSA9IHsKKwkJVjRMMl9NUEVHX0FVRElPX0VOQ09ESU5HX0xBWUVSXzIsCisJCVY0TDJfQ1RSTF9NRU5VX0lEU19FTkQKKwl9OworCXN0YXRpYyBjb25zdCB1MzIgbXBlZ19hdWRpb19hYzNfZW5jb2RpbmdbXSA9IHsKKwkJVjRMMl9NUEVHX0FVRElPX0VOQ09ESU5HX0xBWUVSXzIsCisJCVY0TDJfTVBFR19BVURJT19FTkNPRElOR19BQzMsCisJCVY0TDJfQ1RSTF9NRU5VX0lEU19FTkQKKwl9OworCXN0YXRpYyB1MzIgbXBlZ19hdWRpb19sMl9iaXRyYXRlW10gPSB7CisJCVY0TDJfTVBFR19BVURJT19MMl9CSVRSQVRFXzI1NkssCisJCVY0TDJfTVBFR19BVURJT19MMl9CSVRSQVRFXzM4NEssCisJCVY0TDJfQ1RSTF9NRU5VX0lEU19FTkQKKwl9OworCXN0YXRpYyB1MzIgbXBlZ19hdWRpb19hYzNfYml0cmF0ZVtdID0geworCQlWNEwyX01QRUdfQVVESU9fQUMzX0JJVFJBVEVfMjU2SywKKwkJVjRMMl9NUEVHX0FVRElPX0FDM19CSVRSQVRFXzM4NEssCisJCVY0TDJfQ1RSTF9NRU5VX0lEU19FTkQKIAl9OwogCXN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCBxY3RybDsKIAlpbnQgZXJyOwogCiAJcWN0cmwuaWQgPSBxbWVudS0+aWQ7Ci0JZXJyID0gc2FhNjc1MmhzX3FjdHJsKHBhcmFtcywgJnFjdHJsKTsKKwllcnIgPSBzYWE2NzUyaHNfcWN0cmwoaCwgJnFjdHJsKTsKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwotCWlmIChxbWVudS0+aWQgPT0gVjRMMl9DSURfTVBFR19BVURJT19MMl9CSVRSQVRFKQotCQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X21lbnUocW1lbnUsICZxY3RybCwKKwlzd2l0Y2ggKHFtZW51LT5pZCkgeworCWNhc2UgVjRMMl9DSURfTVBFR19BVURJT19MMl9CSVRSQVRFOgorCQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X21lbnVfdmFsaWRfaXRlbXMocW1lbnUsCiAJCQkJbXBlZ19hdWRpb19sMl9iaXRyYXRlKTsKLQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X21lbnUocW1lbnUsICZxY3RybCwKLQkJCXY0bDJfY3RybF9nZXRfbWVudShxbWVudS0+aWQpKTsKKwljYXNlIFY0TDJfQ0lEX01QRUdfQVVESU9fQUMzX0JJVFJBVEU6CisJCWlmICghaC0+aGFzX2FjMykKKwkJCXJldHVybiAtRUlOVkFMOworCQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X21lbnVfdmFsaWRfaXRlbXMocW1lbnUsCisJCQkJbXBlZ19hdWRpb19hYzNfYml0cmF0ZSk7CisJY2FzZSBWNEwyX0NJRF9NUEVHX0FVRElPX0VOQ09ESU5HOgorCQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X21lbnVfdmFsaWRfaXRlbXMocW1lbnUsCisJCQloLT5oYXNfYWMzID8gbXBlZ19hdWRpb19hYzNfZW5jb2RpbmcgOgorCQkJCW1wZWdfYXVkaW9fZW5jb2RpbmcpOworCX0KKwlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X21lbnUocW1lbnUsICZxY3RybCwgTlVMTCk7CiB9CiAKLXN0YXRpYyBpbnQgc2FhNjc1MmhzX2luaXQoc3RydWN0IGkyY19jbGllbnQqIGNsaWVudCkKK3N0YXRpYyBpbnQgc2FhNjc1MmhzX2luaXQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdTMyIGxlYWRpbmdfbnVsbF9ieXRlcykKIHsKIAl1bnNpZ25lZCBjaGFyIGJ1Zls5XSwgYnVmMls0XTsKIAlzdHJ1Y3Qgc2FhNjc1MmhzX3N0YXRlICpoOworCXVuc2lnbmVkIHNpemU7CiAJdTMyIGNyYzsKIAl1bnNpZ25lZCBjaGFyIGxvY2FsUEFUWzI1Nl07CiAJdW5zaWduZWQgY2hhciBsb2NhbFBNVFsyNTZdOwpAQCAtNTU3LDQ1ICs2NjgsMzEgQEAKIAloID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CiAKIAkvKiBTZXQgdmlkZW8gZm9ybWF0IC0gbXVzdCBiZSBkb25lIGZpcnN0IGFzIGl0IHJlc2V0cyBvdGhlciBzZXR0aW5ncyAqLwotCWJ1ZlswXSA9IDB4NDE7Ci0JYnVmWzFdID0gaC0+dmlkZW9fZm9ybWF0OwotCWkyY19tYXN0ZXJfc2VuZChjbGllbnQsIGJ1ZiwgMik7CisJc2V0X3JlZzgoY2xpZW50LCAweDQxLCBoLT52aWRlb19mb3JtYXQpOwogCiAJLyogU2V0IG51bWJlciBvZiBsaW5lcyBpbiBpbnB1dCBzaWduYWwgKi8KLQlidWZbMF0gPSAweDQwOwotCWJ1ZlsxXSA9IDB4MDA7Ci0JaWYgKGgtPnN0YW5kYXJkICYgVjRMMl9TVERfNTI1XzYwKQotCQlidWZbMV0gPSAweDAxOwotCWkyY19tYXN0ZXJfc2VuZChjbGllbnQsIGJ1ZiwgMik7CisJc2V0X3JlZzgoY2xpZW50LCAweDQwLCAoaC0+c3RhbmRhcmQgJiBWNEwyX1NURF81MjVfNjApID8gMSA6IDApOwogCiAJLyogc2V0IGJpdHJhdGUgKi8KLQlzYWE2NzUyaHNfc2V0X2JpdHJhdGUoY2xpZW50LCAmaC0+cGFyYW1zKTsKKwlzYWE2NzUyaHNfc2V0X2JpdHJhdGUoY2xpZW50LCBoKTsKIAogCS8qIFNldCBHT1Agc3RydWN0dXJlIHszLCAxM30gKi8KLQlidWZbMF0gPSAweDcyOwotCWJ1ZlsxXSA9IDB4MDM7Ci0JYnVmWzJdID0gMHgwRDsKLQlpMmNfbWFzdGVyX3NlbmQoY2xpZW50LGJ1ZiwzKTsKKwlzZXRfcmVnMTYoY2xpZW50LCAweDcyLCAweDAzMGQpOwogCiAJLyogU2V0IG1pbmltdW0gUS1zY2FsZSB7NH0gKi8KLQlidWZbMF0gPSAweDgyOwotCWJ1ZlsxXSA9IDB4MDQ7Ci0JaTJjX21hc3Rlcl9zZW5kKGNsaWVudCxidWYsMik7CisJc2V0X3JlZzgoY2xpZW50LCAweDgyLCAweDA0KTsKIAogCS8qIFNldCBtYXhpbXVtIFEtc2NhbGUgezEyfSAqLwotCWJ1ZlswXSA9IDB4ODM7Ci0JYnVmWzFdID0gMHgwQzsKLQlpMmNfbWFzdGVyX3NlbmQoY2xpZW50LGJ1ZiwyKTsKKwlzZXRfcmVnOChjbGllbnQsIDB4ODMsIDB4MGMpOwogCiAJLyogU2V0IE91dHB1dCBQcm90b2NvbCAqLwotCWJ1ZlswXSA9IDB4RDA7Ci0JYnVmWzFdID0gMHg4MTsKLQlpMmNfbWFzdGVyX3NlbmQoY2xpZW50LGJ1ZiwyKTsKKwlzZXRfcmVnOChjbGllbnQsIDB4ZDAsIDB4ODEpOwogCiAJLyogU2V0IHZpZGVvIG91dHB1dCBzdHJlYW0gZm9ybWF0IHtUU30gKi8KLQlidWZbMF0gPSAweEIwOwotCWJ1ZlsxXSA9IDB4MDU7Ci0JaTJjX21hc3Rlcl9zZW5kKGNsaWVudCxidWYsMik7CisJc2V0X3JlZzgoY2xpZW50LCAweGIwLCAweDA1KTsKKworCS8qIFNldCBsZWFkaW5nIG51bGwgYnl0ZSBmb3IgVFMgKi8KKwlzZXRfcmVnMTYoY2xpZW50LCAweGY2LCBsZWFkaW5nX251bGxfYnl0ZXMpOwogCiAJLyogY29tcHV0ZSBQQVQgKi8KIAltZW1jcHkobG9jYWxQQVQsIFBBVCwgc2l6ZW9mKFBBVCkpOwpAQCAtNjA4LDcgKzcwNSwxMyBAQAogCWxvY2FsUEFUW3NpemVvZihQQVQpIC0gMV0gPSBjcmMgJiAweEZGOwogCiAJLyogY29tcHV0ZSBQTVQgKi8KLQltZW1jcHkobG9jYWxQTVQsIFBNVCwgc2l6ZW9mKFBNVCkpOworCWlmIChoLT5wYXJhbXMuYXVfZW5jb2RpbmcgPT0gVjRMMl9NUEVHX0FVRElPX0VOQ09ESU5HX0FDMykgeworCQlzaXplID0gc2l6ZW9mKFBNVF9BQzMpOworCQltZW1jcHkobG9jYWxQTVQsIFBNVF9BQzMsIHNpemUpOworCX0gZWxzZSB7CisJCXNpemUgPSBzaXplb2YoUE1UKTsKKwkJbWVtY3B5KGxvY2FsUE1ULCBQTVQsIHNpemUpOworCX0KIAlsb2NhbFBNVFszXSA9IDB4NDAgfCAoKGgtPnBhcmFtcy50c19waWRfcG10ID4+IDgpICYgMHgwZik7CiAJbG9jYWxQTVRbNF0gPSBoLT5wYXJhbXMudHNfcGlkX3BtdCAmIDB4ZmY7CiAJbG9jYWxQTVRbMTVdID0gMHhFMCB8ICgoaC0+cGFyYW1zLnRzX3BpZF9wY3IgPj4gOCkgJiAweDBGKTsKQEAgLTYxNyw0MCArNzIwLDI4IEBACiAJbG9jYWxQTVRbMjFdID0gaC0+cGFyYW1zLnRzX3BpZF92aWRlbyAmIDB4RkY7CiAJbG9jYWxQTVRbMjVdID0gMHhFMCB8ICgoaC0+cGFyYW1zLnRzX3BpZF9hdWRpbyA+PiA4KSAmIDB4MEYpOwogCWxvY2FsUE1UWzI2XSA9IGgtPnBhcmFtcy50c19waWRfYXVkaW8gJiAweEZGOwotCWNyYyA9IGNyYzMyX2JlKH4wLCAmbG9jYWxQTVRbN10sIHNpemVvZihQTVQpIC0gNyAtIDQpOwotCWxvY2FsUE1UW3NpemVvZihQTVQpIC0gNF0gPSAoY3JjID4+IDI0KSAmIDB4RkY7Ci0JbG9jYWxQTVRbc2l6ZW9mKFBNVCkgLSAzXSA9IChjcmMgPj4gMTYpICYgMHhGRjsKLQlsb2NhbFBNVFtzaXplb2YoUE1UKSAtIDJdID0gKGNyYyA+PiA4KSAmIDB4RkY7Ci0JbG9jYWxQTVRbc2l6ZW9mKFBNVCkgLSAxXSA9IGNyYyAmIDB4RkY7CisJY3JjID0gY3JjMzJfYmUofjAsICZsb2NhbFBNVFs3XSwgc2l6ZSAtIDcgLSA0KTsKKwlsb2NhbFBNVFtzaXplIC0gNF0gPSAoY3JjID4+IDI0KSAmIDB4RkY7CisJbG9jYWxQTVRbc2l6ZSAtIDNdID0gKGNyYyA+PiAxNikgJiAweEZGOworCWxvY2FsUE1UW3NpemUgLSAyXSA9IChjcmMgPj4gOCkgJiAweEZGOworCWxvY2FsUE1UW3NpemUgLSAxXSA9IGNyYyAmIDB4RkY7CiAKIAkvKiBTZXQgQXVkaW8gUElEICovCi0JYnVmWzBdID0gMHhDMTsKLQlidWZbMV0gPSAoaC0+cGFyYW1zLnRzX3BpZF9hdWRpbyA+PiA4KSAmIDB4RkY7Ci0JYnVmWzJdID0gaC0+cGFyYW1zLnRzX3BpZF9hdWRpbyAmIDB4RkY7Ci0JaTJjX21hc3Rlcl9zZW5kKGNsaWVudCxidWYsMyk7CisJc2V0X3JlZzE2KGNsaWVudCwgMHhjMSwgaC0+cGFyYW1zLnRzX3BpZF9hdWRpbyk7CiAKIAkvKiBTZXQgVmlkZW8gUElEICovCi0JYnVmWzBdID0gMHhDMDsKLQlidWZbMV0gPSAoaC0+cGFyYW1zLnRzX3BpZF92aWRlbyA+PiA4KSAmIDB4RkY7Ci0JYnVmWzJdID0gaC0+cGFyYW1zLnRzX3BpZF92aWRlbyAmIDB4RkY7Ci0JaTJjX21hc3Rlcl9zZW5kKGNsaWVudCxidWYsMyk7CisJc2V0X3JlZzE2KGNsaWVudCwgMHhjMCwgaC0+cGFyYW1zLnRzX3BpZF92aWRlbyk7CiAKIAkvKiBTZXQgUENSIFBJRCAqLwotCWJ1ZlswXSA9IDB4QzQ7Ci0JYnVmWzFdID0gKGgtPnBhcmFtcy50c19waWRfcGNyID4+IDgpICYgMHhGRjsKLQlidWZbMl0gPSBoLT5wYXJhbXMudHNfcGlkX3BjciAmIDB4RkY7Ci0JaTJjX21hc3Rlcl9zZW5kKGNsaWVudCxidWYsMyk7CisJc2V0X3JlZzE2KGNsaWVudCwgMHhjNCwgaC0+cGFyYW1zLnRzX3BpZF9wY3IpOwogCiAJLyogU2VuZCBTSSB0YWJsZXMgKi8KLQlpMmNfbWFzdGVyX3NlbmQoY2xpZW50LGxvY2FsUEFULHNpemVvZihQQVQpKTsKLQlpMmNfbWFzdGVyX3NlbmQoY2xpZW50LGxvY2FsUE1ULHNpemVvZihQTVQpKTsKKwlpMmNfbWFzdGVyX3NlbmQoY2xpZW50LCBsb2NhbFBBVCwgc2l6ZW9mKFBBVCkpOworCWkyY19tYXN0ZXJfc2VuZChjbGllbnQsIGxvY2FsUE1ULCBzaXplKTsKIAogCS8qIG11dGUgdGhlbiB1bm11dGUgYXVkaW8uIFRoaXMgcmVtb3ZlcyBidXp6aW5nIGFydGVmYWN0cyAqLwotCWJ1ZlswXSA9IDB4YTQ7Ci0JYnVmWzFdID0gMTsKLQlpMmNfbWFzdGVyX3NlbmQoY2xpZW50LCBidWYsIDIpOwotCWJ1ZlsxXSA9IDA7Ci0JaTJjX21hc3Rlcl9zZW5kKGNsaWVudCwgYnVmLCAyKTsKKwlzZXRfcmVnOChjbGllbnQsIDB4YTQsIDEpOworCXNldF9yZWc4KGNsaWVudCwgMHhhNCwgMCk7CiAKIAkvKiBzdGFydCBpdCBnb2luZyAqLwogCXNhYTY3NTJoc19jaGlwX2NvbW1hbmQoY2xpZW50LCBTQUE2NzUySFNfQ09NTUFORF9TVEFSVCk7CkBAIC02ODgsNDUgKzc3OSw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgc2FhNjc1MmhzX2F0dGFjaChzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXAsIGludCBhZGRyLCBpbnQga2luZCkKLXsKLQlzdHJ1Y3Qgc2FhNjc1MmhzX3N0YXRlICpoOwotCi0KLQlpZiAoTlVMTCA9PSAoaCA9IGt6YWxsb2Moc2l6ZW9mKCpoKSwgR0ZQX0tFUk5FTCkpKQotCQlyZXR1cm4gLUVOT01FTTsKLQloLT5jbGllbnQgPSBjbGllbnRfdGVtcGxhdGU7Ci0JaC0+cGFyYW1zID0gcGFyYW1fZGVmYXVsdHM7Ci0JaC0+Y2xpZW50LmFkYXB0ZXIgPSBhZGFwOwotCWgtPmNsaWVudC5hZGRyID0gYWRkcjsKLQotCS8qIEFzc3VtZSA2MjUgaW5wdXQgbGluZXMgKi8KLQloLT5zdGFuZGFyZCA9IDA7Ci0KLQlpMmNfc2V0X2NsaWVudGRhdGEoJmgtPmNsaWVudCwgaCk7Ci0JaTJjX2F0dGFjaF9jbGllbnQoJmgtPmNsaWVudCk7Ci0KLQl2NGxfaW5mbygmaC0+Y2xpZW50LCJzYWE2NzUyaHM6IGNoaXAgZm91bmQgQCAweCV4XG4iLCBhZGRyPDwxKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBzYWE2NzUyaHNfcHJvYmUoc3RydWN0IGkyY19hZGFwdGVyICphZGFwKQotewotCWlmIChhZGFwLT5jbGFzcyAmIEkyQ19DTEFTU19UVl9BTkFMT0cpCi0JCXJldHVybiBpMmNfcHJvYmUoYWRhcCwgJmFkZHJfZGF0YSwgc2FhNjc1MmhzX2F0dGFjaCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgc2FhNjc1MmhzX2RldGFjaChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQotewotCXN0cnVjdCBzYWE2NzUyaHNfc3RhdGUgKmg7Ci0KLQloID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7Ci0JaTJjX2RldGFjaF9jbGllbnQoY2xpZW50KTsKLQlrZnJlZShoKTsKLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIGludAogc2FhNjc1MmhzX2NvbW1hbmQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdW5zaWduZWQgaW50IGNtZCwgdm9pZCAqYXJnKQogewpAQCAtNzM3LDE0ICs3ODksMTMgQEAKIAlpbnQgaTsKIAogCXN3aXRjaCAoY21kKSB7CisJY2FzZSBWSURJT0NfSU5UX0lOSVQ6CisJCS8qIGFwcGx5IHNldHRpbmdzIGFuZCBzdGFydCBlbmNvZGVyICovCisJCXNhYTY3NTJoc19pbml0KGNsaWVudCwgKih1MzIgKilhcmcpOworCQlicmVhazsKIAljYXNlIFZJRElPQ19TX0VYVF9DVFJMUzoKIAkJaWYgKGN0cmxzLT5jdHJsX2NsYXNzICE9IFY0TDJfQ1RSTF9DTEFTU19NUEVHKQogCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCWlmIChjdHJscy0+Y291bnQgPT0gMCkgewotCQkJLyogYXBwbHkgc2V0dGluZ3MgYW5kIHN0YXJ0IGVuY29kZXIgKi8KLQkJCXNhYTY3NTJoc19pbml0KGNsaWVudCk7Ci0JCQlicmVhazsKLQkJfQogCQkvKiBmYWxsIHRocm91Z2ggKi8KIAljYXNlIFZJRElPQ19UUllfRVhUX0NUUkxTOgogCWNhc2UgVklESU9DX0dfRVhUX0NUUkxTOgpAQCAtNzUyLDcgKzgwMyw4IEBACiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJcGFyYW1zID0gaC0+cGFyYW1zOwogCQlmb3IgKGkgPSAwOyBpIDwgY3RybHMtPmNvdW50OyBpKyspIHsKLQkJCWlmICgoZXJyID0gaGFuZGxlX2N0cmwoJnBhcmFtcywgY3RybHMtPmNvbnRyb2xzICsgaSwgY21kKSkpIHsKKwkJCWVyciA9IGhhbmRsZV9jdHJsKGgtPmhhc19hYzMsICZwYXJhbXMsIGN0cmxzLT5jb250cm9scyArIGksIGNtZCk7CisJCQlpZiAoZXJyKSB7CiAJCQkJY3RybHMtPmVycm9yX2lkeCA9IGk7CiAJCQkJcmV0dXJuIGVycjsKIAkJCX0KQEAgLTc2MCw5ICs4MTIsOSBAQAogCQloLT5wYXJhbXMgPSBwYXJhbXM7CiAJCWJyZWFrOwogCWNhc2UgVklESU9DX1FVRVJZQ1RSTDoKLQkJcmV0dXJuIHNhYTY3NTJoc19xY3RybCgmaC0+cGFyYW1zLCBhcmcpOworCQlyZXR1cm4gc2FhNjc1MmhzX3FjdHJsKGgsIGFyZyk7CiAJY2FzZSBWSURJT0NfUVVFUllNRU5VOgotCQlyZXR1cm4gc2FhNjc1MmhzX3FtZW51KCZoLT5wYXJhbXMsIGFyZyk7CisJCXJldHVybiBzYWE2NzUyaHNfcW1lbnUoaCwgYXJnKTsKIAljYXNlIFZJRElPQ19HX0ZNVDoKIAl7CiAJICAgc3RydWN0IHY0bDJfZm9ybWF0ICpmID0gYXJnOwpAQCAtNzg1LDYgKzgzNywxMSBAQAogCWNhc2UgVklESU9DX1NfU1REOgogCQloLT5zdGFuZGFyZCA9ICooKHY0bDJfc3RkX2lkICopIGFyZyk7CiAJCWJyZWFrOworCisJY2FzZSBWSURJT0NfR19DSElQX0lERU5UOgorCQlyZXR1cm4gdjRsMl9jaGlwX2lkZW50X2kyY19jbGllbnQoY2xpZW50LAorCQkJCWFyZywgaC0+Y2hpcCwgaC0+cmV2aXNpb24pOworCiAJZGVmYXVsdDoKIAkJLyogbm90aGluZyAqLwogCQlicmVhazsKQEAgLTc5MywzNiArODUwLDU1IEBACiAJcmV0dXJuIGVycjsKIH0KIAotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIGRyaXZlciA9IHsKLQkuZHJpdmVyID0gewotCQkubmFtZSAgID0gInNhYTY3NTJocyIsCi0JfSwKLQkuaWQgICAgICAgICAgICAgPSBJMkNfRFJJVkVSSURfU0FBNjc1MkhTLAotCS5hdHRhY2hfYWRhcHRlciA9IHNhYTY3NTJoc19wcm9iZSwKLQkuZGV0YWNoX2NsaWVudCAgPSBzYWE2NzUyaHNfZGV0YWNoLAotCS5jb21tYW5kICAgICAgICA9IHNhYTY3NTJoc19jb21tYW5kLAotfTsKLQotc3RhdGljIHN0cnVjdCBpMmNfY2xpZW50IGNsaWVudF90ZW1wbGF0ZSA9CitzdGF0aWMgaW50IHNhYTY3NTJoc19wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAorCQkJY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKQogewotCS5uYW1lICAgICAgID0gInNhYTY3NTJocyIsCi0JLmRyaXZlciAgICAgPSAmZHJpdmVyLAotfTsKKwlzdHJ1Y3Qgc2FhNjc1MmhzX3N0YXRlICpoID0ga3phbGxvYyhzaXplb2YoKmgpLCBHRlBfS0VSTkVMKTsKKwl1OCBhZGRyID0gMHgxMzsKKwl1OCBkYXRhWzEyXTsKIAotc3RhdGljIGludCBfX2luaXQgc2FhNjc1MmhzX2luaXRfbW9kdWxlKHZvaWQpCi17Ci0JcmV0dXJuIGkyY19hZGRfZHJpdmVyKCZkcml2ZXIpOworCXY0bF9pbmZvKGNsaWVudCwgImNoaXAgZm91bmQgQCAweCV4ICglcylcbiIsCisJCQljbGllbnQtPmFkZHIgPDwgMSwgY2xpZW50LT5hZGFwdGVyLT5uYW1lKTsKKwlpZiAoaCA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWkyY19tYXN0ZXJfc2VuZChjbGllbnQsICZhZGRyLCAxKTsKKwlpMmNfbWFzdGVyX3JlY3YoY2xpZW50LCBkYXRhLCBzaXplb2YoZGF0YSkpOworCWgtPmNoaXAgPSBWNEwyX0lERU5UX1NBQTY3NTJIUzsKKwloLT5yZXZpc2lvbiA9IChkYXRhWzhdIDw8IDgpIHwgZGF0YVs5XTsKKwloLT5oYXNfYWMzID0gMDsKKwlpZiAoaC0+cmV2aXNpb24gPT0gMHgwMjA2KSB7CisJCWgtPmNoaXAgPSBWNEwyX0lERU5UX1NBQTY3NTJIU19BQzM7CisJCWgtPmhhc19hYzMgPSAxOworCQl2NGxfaW5mbyhjbGllbnQsICJzdXBwb3J0IEFDLTNcbiIpOworCX0KKwloLT5wYXJhbXMgPSBwYXJhbV9kZWZhdWx0czsKKwloLT5zdGFuZGFyZCA9IDA7IC8qIEFzc3VtZSA2MjUgaW5wdXQgbGluZXMgKi8KKworCWkyY19zZXRfY2xpZW50ZGF0YShjbGllbnQsIGgpOworCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBfX2V4aXQgc2FhNjc1MmhzX2NsZWFudXBfbW9kdWxlKHZvaWQpCitzdGF0aWMgaW50IHNhYTY3NTJoc19yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKIHsKLQlpMmNfZGVsX2RyaXZlcigmZHJpdmVyKTsKKwlrZnJlZShpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KSk7CisJcmV0dXJuIDA7CiB9CiAKLW1vZHVsZV9pbml0KHNhYTY3NTJoc19pbml0X21vZHVsZSk7Ci1tb2R1bGVfZXhpdChzYWE2NzUyaHNfY2xlYW51cF9tb2R1bGUpOworc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkIHNhYTY3NTJoc19pZFtdID0geworCXsgInNhYTY3NTJocyIsIDAgfSwKKwl7IH0KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKGkyYywgc2FhNjc1MmhzX2lkKTsKKworc3RhdGljIHN0cnVjdCB2NGwyX2kyY19kcml2ZXJfZGF0YSB2NGwyX2kyY19kYXRhID0geworCS5uYW1lID0gInNhYTY3NTJocyIsCisJLmRyaXZlcmlkID0gSTJDX0RSSVZFUklEX1NBQTY3NTJIUywKKwkuY29tbWFuZCA9IHNhYTY3NTJoc19jb21tYW5kLAorCS5wcm9iZSA9IHNhYTY3NTJoc19wcm9iZSwKKwkucmVtb3ZlID0gc2FhNjc1MmhzX3JlbW92ZSwKKwkuaWRfdGFibGUgPSBzYWE2NzUyaHNfaWQsCit9OwogCiAvKgogICogT3ZlcnJpZGVzIGZvciBFbWFjcyBzbyB0aGF0IHdlIGZvbGxvdyBMaW51cydzIHRhYmJpbmcgc3R5bGUuCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1jYXJkcy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtY2FyZHMuYwppbmRleCA5ODM2NGQxLi5kZGM1NDAyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1jYXJkcy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LWNhcmRzLmMKQEAgLTMyNjAsNiArMzI2MCw3IEBACiAJfSwKIAlbU0FBNzEzNF9CT0FSRF9IQVVQUEFVR0VfSFZSMTExMF0gPSB7CiAJCS8qIFRob21hcyBHZW50eSA8dG9tbG9oYXZlQGdtYWlsLmNvbT4gKi8KKwkJLyogRGF2aWQgQmVudGhhbSA8ZGIyNjAxNzlAaG90bWFpbC5jb20+ICovCiAJCS5uYW1lICAgICAgICAgICA9ICJIYXVwcGF1Z2UgV2luVFYtSFZSMTExMCBEVkItVC9IeWJyaWQiLAogCQkuYXVkaW9fY2xvY2sgICAgPSAweDAwMTg3ZGU3LAogCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9QSElMSVBTX1REQTgyOTAsCkBAIC0zMjY4LDIzICszMjY5LDI2IEBACiAJCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCiAJCS50dW5lcl9jb25maWcgICA9IDEsCiAJCS5tcGVnICAgICAgICAgICA9IFNBQTcxMzRfTVBFR19EVkIsCisJCS5ncGlvbWFzayAgICAgICA9IDB4MDIwMDEwMCwKIAkJLmlucHV0cyAgICAgICAgID0ge3sKIAkJCS5uYW1lID0gbmFtZV90diwKIAkJCS52bXV4ID0gMSwKIAkJCS5hbXV4ID0gVFYsCiAJCQkudHYgICA9IDEsCi0JCX0sewotCQkJLm5hbWUgICA9IG5hbWVfY29tcDEsCi0JCQkudm11eCAgID0gMywKLQkJCS5hbXV4ICAgPSBMSU5FMiwgLyogRklYTUU6IGF1ZGlvIGRvZXNuJ3Qgd29yayBvbiBzdmlkZW8vY29tcG9zaXRlICovCi0JCX0sewotCQkJLm5hbWUgICA9IG5hbWVfc3ZpZGVvLAotCQkJLnZtdXggICA9IDgsCi0JCQkuYW11eCAgID0gTElORTIsIC8qIEZJWE1FOiBhdWRpbyBkb2Vzbid0IHdvcmsgb24gc3ZpZGVvL2NvbXBvc2l0ZSAqLwotCQl9fSwKKwkJCS5ncGlvID0gMHgwMDAwMTAwLAorCQl9LCB7CisJCQkubmFtZSA9IG5hbWVfY29tcDEsCisJCQkudm11eCA9IDMsCisJCQkuYW11eCA9IExJTkUxLAorCQl9LCB7CisJCQkubmFtZSA9IG5hbWVfc3ZpZGVvLAorCQkJLnZtdXggPSA4LAorCQkJLmFtdXggPSBMSU5FMSwKKwkJfSB9LAogCQkucmFkaW8gPSB7CiAJCQkubmFtZSA9IG5hbWVfcmFkaW8sCi0JCQkuYW11eCAgID0gVFYsCisJCQkuYW11eCA9IFRWLAorCQkJLmdwaW8gPSAweDAyMDAxMDAsCiAJCX0sCiAJfSwKIAlbU0FBNzEzNF9CT0FSRF9DSU5FUkdZX0hUX1BDTUNJQV0gPSB7CkBAIC0zMzg4LDYgKzMzOTIsNDIgQEAKIAkJCS5hbXV4ID0gMCwKIAkJfSwKIAl9LAorCVtTQUE3MTM0X0JPQVJEX0VOQ09SRV9FTkxUVl9GTTUzXSA9IHsKKwkJLm5hbWUgICAgICAgICAgID0gIkVuY29yZSBFTkxUVi1GTSB2NS4zIiwKKwkJLmF1ZGlvX2Nsb2NrICAgID0gMHgwMDIwMDAwMCwKKwkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfVE5GXzUzMzVNRiwKKwkJLnJhZGlvX3R5cGUgICAgID0gVU5TRVQsCisJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKKwkJLnJhZGlvX2FkZHIJPSBBRERSX1VOU0VULAorCQkuZ3Bpb21hc2sJPSAweDcwMDAsCisJCS5pbnB1dHMgICAgICAgICA9IHsgeworCQkJLm5hbWUgPSBuYW1lX3R2LAorCQkJLnZtdXggPSAxLAorCQkJLmFtdXggPSAxLAorCQkJLnR2ICAgPSAxLAorCQkJLmdwaW8gPSAweDUwMDAwLAorCQl9LCB7CisJCQkubmFtZSA9IG5hbWVfY29tcDEsCisJCQkudm11eCA9IDMsCisJCQkuYW11eCA9IDIsCisJCQkuZ3BpbyA9IDB4MjAwMCwKKwkJfSwgeworCQkJLm5hbWUgPSBuYW1lX3N2aWRlbywKKwkJCS52bXV4ID0gOCwKKwkJCS5hbXV4ID0gMiwKKwkJCS5ncGlvID0gMHgyMDAwLAorCQl9IH0sCisJCS5yYWRpbyA9IHsKKwkJCS5uYW1lID0gbmFtZV9yYWRpbywKKwkJCS52bXV4ID0gMSwKKwkJCS5hbXV4ID0gMSwKKwkJfSwKKwkJLm11dGUgPSB7CisJCQkubmFtZSA9IG5hbWVfbXV0ZSwKKwkJCS5ncGlvID0gMHhmMDAwLAorCQkJLmFtdXggPSAwLAorCQl9LAorCX0sCiAJW1NBQTcxMzRfQk9BUkRfQ0lORVJHWV9IVF9QQ0ldID0gewogCQkubmFtZSAgICAgICAgICAgPSAiVGVycmF0ZWMgQ2luZXJneSBIVCBQQ0kiLAogCQkuYXVkaW9fY2xvY2sgICAgPSAweDAwMTg3ZGU3LApAQCAtMzYzMSw2ICszNjcxLDQwIEBACiAJCQkudHYgICAgID0gMSwKIAkJfX0sCiAJfSwKKwlbU0FBNzEzNF9CT0FSRF9BVkVSTUVESUFfTTEzNUFdID0geworCQkubmFtZSAgICAgICAgICAgPSAiQXZlcm1lZGlhIFBDSSBwdXJlIGFuYWxvZyAoTTEzNUEpIiwKKwkJLmF1ZGlvX2Nsb2NrICAgID0gMHgwMDE4N2RlNywKKwkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfUEhJTElQU19UREE4MjkwLAorCQkucmFkaW9fdHlwZSAgICAgPSBVTlNFVCwKKwkJLnR1bmVyX2FkZHIgICAgID0gQUREUl9VTlNFVCwKKwkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKKwkJLnR1bmVyX2NvbmZpZyAgID0gMiwKKwkJLmdwaW9tYXNrICAgICAgID0gMHgwMjAyMDAwMDAsCisJCS5pbnB1dHMgICAgICAgICA9IHt7CisJCQkubmFtZSA9IG5hbWVfdHYsCisJCQkudm11eCA9IDEsCisJCQkuYW11eCA9IFRWLAorCQkJLnR2ICAgPSAxLAorCQl9LCB7CisJCQkubmFtZSA9IG5hbWVfY29tcDEsCisJCQkudm11eCA9IDMsCisJCQkuYW11eCA9IExJTkUxLAorCQl9LCB7CisJCQkubmFtZSA9IG5hbWVfc3ZpZGVvLAorCQkJLnZtdXggPSA4LAorCQkJLmFtdXggPSBMSU5FMSwKKwkJfSB9LAorCQkucmFkaW8gPSB7CisJCQkubmFtZSA9IG5hbWVfcmFkaW8sCisJCQkuYW11eCA9IFRWLAorCQkJLmdwaW8gPSAweDAwMjAwMDAwLAorCQl9LAorCQkubXV0ZSA9IHsKKwkJCS5uYW1lID0gbmFtZV9tdXRlLAorCQkJLmFtdXggPSBUViwKKwkJCS5ncGlvID0gMHgwMSwKKwkJfSwKKwl9LAogCVtTQUE3MTM0X0JPQVJEX0JFSE9MRF80MDFdID0gewogCQkvKiAgICAgICBCZWhvbGRlciBJbnRsLiBMdGQuIDIwMDggICAgICAqLwogCQkvKkRtaXRyeSBCZWxpbW92IDxkLmJlbGltb3ZAZ21haWwuY29tPiAqLwpAQCAtNDQwOSw2ICs0NDgzLDEyOSBAQAogCQkvKiBubyBEVkIgc3VwcG9ydCBmb3Igbm93ICovCiAJCS8qIC5tcGVnICAgICAgICAgICA9IFNBQTcxMzRfTVBFR19EVkIsICovCiAJfSwKKwlbU0FBNzEzNF9CT0FSRF9BU1VTVGVLX1RJR0VSXzNJTjFdID0geworCQkubmFtZSAgICAgICAgICAgPSAiQXN1cyBUaWdlciAzaW4xIiwKKwkJLmF1ZGlvX2Nsb2NrICAgID0gMHgwMDE4N2RlNywKKwkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfUEhJTElQU19UREE4MjkwLAorCQkucmFkaW9fdHlwZSAgICAgPSBVTlNFVCwKKwkJLnR1bmVyX2FkZHIgICAgID0gQUREUl9VTlNFVCwKKwkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKKwkJLnR1bmVyX2NvbmZpZyAgID0gMiwKKwkJLmdwaW9tYXNrICAgICAgID0gMSA8PCAyMSwKKwkJLm1wZWcgICAgICAgICAgID0gU0FBNzEzNF9NUEVHX0RWQiwKKwkJLmlucHV0cyAgICAgICAgID0ge3sKKwkJCS5uYW1lID0gbmFtZV90diwKKwkJCS52bXV4ID0gMSwKKwkJCS5hbXV4ID0gVFYsCisJCQkudHYgICA9IDEsCisJCX0sIHsKKwkJCS5uYW1lID0gbmFtZV9jb21wLAorCQkJLnZtdXggPSAwLAorCQkJLmFtdXggPSBMSU5FMiwKKwkJfSwgeworCQkJLm5hbWUgPSBuYW1lX3N2aWRlbywKKwkJCS52bXV4ID0gOCwKKwkJCS5hbXV4ID0gTElORTIsCisJCX0gfSwKKwkJLnJhZGlvID0geworCQkJLm5hbWUgPSBuYW1lX3JhZGlvLAorCQkJLmFtdXggPSBUViwKKwkJCS5ncGlvID0gMHgwMjAwMDAwLAorCQl9LAorCX0sCisJW1NBQTcxMzRfQk9BUkRfUkVBTF9BTkdFTF8yMjBdID0geworCQkubmFtZSAgICAgICAgICAgPSAiWm9naXMgUmVhbCBBbmdlbCAyMjAiLAorCQkuYXVkaW9fY2xvY2sgICAgPSAweDAwMTg3ZGU3LAorCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9UTkZfNTMzNU1GLAorCQkucmFkaW9fdHlwZSAgICAgPSBVTlNFVCwKKwkJLnR1bmVyX2FkZHIgICAgID0gQUREUl9VTlNFVCwKKwkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKKwkJLmdwaW9tYXNrICAgICAgID0gMHg4MDFhODA4NywKKwkJLmlucHV0cyA9IHsgeworCQkJLm5hbWUgICA9IG5hbWVfdHYsCisJCQkudm11eCAgID0gMywKKwkJCS5hbXV4ICAgPSBMSU5FMiwKKwkJCS50diAgICAgPSAxLAorCQkJLmdwaW8gICA9IDB4NjI0MDAwLAorCQl9LCB7CisJCQkubmFtZSAgID0gbmFtZV9jb21wMSwKKwkJCS52bXV4ICAgPSAxLAorCQkJLmFtdXggICA9IExJTkUxLAorCQkJLmdwaW8gICA9IDB4NjI0MDAwLAorCQl9LCB7CisJCQkubmFtZSAgID0gbmFtZV9zdmlkZW8sCisJCQkudm11eCAgID0gMSwKKwkJCS5hbXV4ICAgPSBMSU5FMSwKKwkJCS5ncGlvICAgPSAweDYyNDAwMCwKKwkJfSB9LAorCQkucmFkaW8gPSB7CisJCQkubmFtZSAgID0gbmFtZV9yYWRpbywKKwkJCS5hbXV4ICAgPSBMSU5FMiwKKwkJCS5ncGlvICAgPSAweDYyNDAwMSwKKwkJfSwKKwkJLm11dGUgPSB7CisJCQkubmFtZSA9IG5hbWVfbXV0ZSwKKwkJCS5hbXV4ID0gVFYsCisJCX0sCisJfSwKKwlbU0FBNzEzNF9CT0FSRF9BRFNfSU5TVEFOVF9IRFRWX1BDSV0gPSB7CisJCS5uYW1lICAgICAgICAgICA9ICJBRFMgVGVjaCBJbnN0YW50IEhEVFYiLAorCQkuYXVkaW9fY2xvY2sgICAgPSAweDAwMTg3ZGU3LAorCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9QSElMSVBTX1RVVjEyMzZELAorCQkucmFkaW9fdHlwZSAgICAgPSBVTlNFVCwKKwkJLnR1bmVyX2FkZHIgICAgID0gQUREUl9VTlNFVCwKKwkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKKwkJLnRkYTk4ODdfY29uZiAgID0gVERBOTg4N19QUkVTRU5ULAorCQkubXBlZyAgICAgICAgICAgPSBTQUE3MTM0X01QRUdfRFZCLAorCQkuaW5wdXRzICAgICAgICAgPSB7IHsKKwkJCS5uYW1lID0gbmFtZV90diwKKwkJCS52bXV4ID0gMSwKKwkJCS5hbXV4ID0gVFYsCisJCQkudHYgICA9IDEsCisJCX0sIHsKKwkJCS5uYW1lID0gbmFtZV9jb21wLAorCQkJLnZtdXggPSA0LAorCQkJLmFtdXggPSBMSU5FMSwKKwkJfSwgeworCQkJLm5hbWUgPSBuYW1lX3N2aWRlbywKKwkJCS52bXV4ID0gOCwKKwkJCS5hbXV4ID0gTElORTEsCisJCX0gfSwKKwl9LAorCVtTQUE3MTM0X0JPQVJEX0FTVVNUZUtfVElHRVJdID0geworCQkubmFtZSAgICAgICAgICAgPSAiQXN1cyBUaWdlciBSZXY6MS4wMCIsCisJCS5hdWRpb19jbG9jayAgICA9IDB4MDAxODdkZTcsCisJCS50dW5lcl90eXBlICAgICA9IFRVTkVSX1BISUxJUFNfVERBODI5MCwKKwkJLnJhZGlvX3R5cGUgICAgID0gVU5TRVQsCisJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKKwkJLnJhZGlvX2FkZHIJPSBBRERSX1VOU0VULAorCQkudHVuZXJfY29uZmlnICAgPSAwLAorCQkubXBlZyAgICAgICAgICAgPSBTQUE3MTM0X01QRUdfRFZCLAorCQkuZ3Bpb21hc2sgICAgICAgPSAweDAyMDAwMDAsCisJCS5pbnB1dHMgPSB7IHsKKwkJCS5uYW1lICAgPSBuYW1lX3R2LAorCQkJLnZtdXggICA9IDEsCisJCQkuYW11eCAgID0gVFYsCisJCQkudHYgICAgID0gMSwKKwkJfSwgeworCQkJLm5hbWUgICA9IG5hbWVfY29tcDEsCisJCQkudm11eCAgID0gMywKKwkJCS5hbXV4ICAgPSBMSU5FMiwKKwkJfSwgeworCQkJLm5hbWUgICA9IG5hbWVfY29tcDIsCisJCQkudm11eCAgID0gMCwKKwkJCS5hbXV4ICAgPSBMSU5FMiwKKwkJfSwgeworCQkJLm5hbWUgICA9IG5hbWVfc3ZpZGVvLAorCQkJLnZtdXggICA9IDgsCisJCQkuYW11eCAgID0gTElORTIsCisJCX0gfSwKKwkJLnJhZGlvID0geworCQkJLm5hbWUgICA9IG5hbWVfcmFkaW8sCisJCQkuYW11eCAgID0gVFYsCisJCQkuZ3BpbyAgID0gMHgwMjAwMDAwLAorCQl9LAorCX0sCiB9OwogCiBjb25zdCB1bnNpZ25lZCBpbnQgc2FhNzEzNF9iY291bnQgPSBBUlJBWV9TSVpFKHNhYTcxMzRfYm9hcmRzKTsKQEAgLTQ3NzcsNiArNDk3NCwxMiBAQAogCiAJfSx7CiAJCS52ZW5kb3IgICAgICAgPSBQQ0lfVkVORE9SX0lEX1BISUxJUFMsCisJCS5kZXZpY2UgICAgICAgPSBQQ0lfREVWSUNFX0lEX1BISUxJUFNfU0FBNzEzMywKKwkJLnN1YnZlbmRvciAgICA9IDB4MTQ2MSwgLyogQXZlcm1lZGlhIFRlY2hub2xvZ2llcyBJbmMgKi8KKwkJLnN1YmRldmljZSAgICA9IDB4ZjExZCwKKwkJLmRyaXZlcl9kYXRhICA9IFNBQTcxMzRfQk9BUkRfQVZFUk1FRElBX00xMzVBLAorCX0sIHsKKwkJLnZlbmRvciAgICAgICA9IFBDSV9WRU5ET1JfSURfUEhJTElQUywKIAkJLmRldmljZSAgICAgICA9IFBDSV9ERVZJQ0VfSURfUEhJTElQU19TQUE3MTMwLAogCQkuc3VidmVuZG9yICAgID0gUENJX1ZFTkRPUl9JRF9QSElMSVBTLAogCQkuc3ViZGV2aWNlICAgID0gMHgyMDA0LApAQCAtNTE1Nyw2ICs1MzYwLDEyIEBACiAJCS5kcml2ZXJfZGF0YSAgPSBTQUE3MTM0X0JPQVJEX0VOQ09SRV9FTkxUVl9GTSwKIAl9LHsKIAkJLnZlbmRvciAgICAgICA9IFBDSV9WRU5ET1JfSURfUEhJTElQUywKKwkJLmRldmljZSAgICAgICA9IFBDSV9ERVZJQ0VfSURfUEhJTElQU19TQUE3MTMwLAorCQkuc3VidmVuZG9yICAgID0gMHgxYTdmLAorCQkuc3ViZGV2aWNlICAgID0gMHgyMDA4LAorCQkuZHJpdmVyX2RhdGEgID0gU0FBNzEzNF9CT0FSRF9FTkNPUkVfRU5MVFZfRk01MywKKwl9LCB7CisJCS52ZW5kb3IgICAgICAgPSBQQ0lfVkVORE9SX0lEX1BISUxJUFMsCiAJCS5kZXZpY2UgICAgICAgPSBQQ0lfREVWSUNFX0lEX1BISUxJUFNfU0FBNzEzMywKIAkJLnN1YnZlbmRvciAgICA9IDB4MTUzYiwKIAkJLnN1YmRldmljZSAgICA9IDB4MTE3NSwKQEAgLTUxODMsOCArNTM5Miw4IEBACiAJCS52ZW5kb3IgICAgICAgPSBQQ0lfVkVORE9SX0lEX1BISUxJUFMsCiAJCS5kZXZpY2UgICAgICAgPSBQQ0lfREVWSUNFX0lEX1BISUxJUFNfU0FBNzEzMywKIAkJLnN1YnZlbmRvciAgICA9IDB4MTA0MywKLQkJLnN1YmRldmljZSAgICA9IDB4NDg1NywKLQkJLmRyaXZlcl9kYXRhICA9IFNBQTcxMzRfQk9BUkRfQVNVU1RlS19QNzEzMV9EVUFMLAorCQkuc3ViZGV2aWNlICAgID0gMHg0ODU3LAkJLyogUkVWOjEuMDAgKi8KKwkJLmRyaXZlcl9kYXRhICA9IFNBQTcxMzRfQk9BUkRfQVNVU1RlS19USUdFUiwKIAl9LHsKIAkJLnZlbmRvciAgICAgICA9IFBDSV9WRU5ET1JfSURfUEhJTElQUywKIAkJLmRldmljZSAgICAgICA9IFBDSV9ERVZJQ0VfSURfUEhJTElQU19TQUE3MTM0LApAQCAtNTQxNSw2ICs1NjI0LDEyIEBACiAJCS5kcml2ZXJfZGF0YSAgPSBTQUE3MTM0X0JPQVJEX1ZJREVPTUFURV9UNzUwLAogCX0sIHsKIAkJLnZlbmRvciAgICAgICA9IFBDSV9WRU5ET1JfSURfUEhJTElQUywKKwkJLmRldmljZSAgICAgICA9IFBDSV9ERVZJQ0VfSURfUEhJTElQU19TQUE3MTMzLCAvKiBTQUE3MTM1SEwgKi8KKwkJLnN1YnZlbmRvciAgICA9IDB4MTQyMSwKKwkJLnN1YmRldmljZSAgICA9IDB4MDM4MCwKKwkJLmRyaXZlcl9kYXRhICA9IFNBQTcxMzRfQk9BUkRfQURTX0lOU1RBTlRfSERUVl9QQ0ksCisJfSwgeworCQkudmVuZG9yICAgICAgID0gUENJX1ZFTkRPUl9JRF9QSElMSVBTLAogCQkuZGV2aWNlICAgICAgID0gUENJX0RFVklDRV9JRF9QSElMSVBTX1NBQTcxMzMsCiAJCS5zdWJ2ZW5kb3IgICAgPSAweDUxNjksCiAJCS5zdWJkZXZpY2UgICAgPSAweDE1MDIsCkBAIC01NDMyLDYgKzU2NDcsMTIgQEAKIAkJLnN1YmRldmljZSAgICA9IDB4ZjYzNiwKIAkJLmRyaXZlcl9kYXRhICA9IFNBQTcxMzRfQk9BUkRfQVZFUk1FRElBX00xMDMsCiAJfSwgeworCQkudmVuZG9yICAgICAgID0gUENJX1ZFTkRPUl9JRF9QSElMSVBTLAorCQkuZGV2aWNlICAgICAgID0gUENJX0RFVklDRV9JRF9QSElMSVBTX1NBQTcxMzMsCisJCS5zdWJ2ZW5kb3IgICAgPSAweDEwNDMsCisJCS5zdWJkZXZpY2UgICAgPSAweDQ4NzgsIC8qIFJFVjoxLjAyRyAqLworCQkuZHJpdmVyX2RhdGEgID0gU0FBNzEzNF9CT0FSRF9BU1VTVGVLX1RJR0VSXzNJTjEsCisJfSwgewogCQkvKiAtLS0gYm9hcmRzIHdpdGhvdXQgZWVwcm9tICsgc3Vic3lzdGVtIElEIC0tLSAqLwogCQkudmVuZG9yICAgICAgID0gUENJX1ZFTkRPUl9JRF9QSElMSVBTLAogCQkuZGV2aWNlICAgICAgID0gUENJX0RFVklDRV9JRF9QSElMSVBTX1NBQTcxMzQsCkBAIC01NTQwLDcgKzU3NjEsNyBAQAogCXJldHVybiAwOwogfQogCi1pbnQgc2FhNzEzNF90dW5lcl9jYWxsYmFjayh2b2lkICpwcml2LCBpbnQgY29tbWFuZCwgaW50IGFyZykKK2ludCBzYWE3MTM0X3R1bmVyX2NhbGxiYWNrKHZvaWQgKnByaXYsIGludCBjb21wb25lbnQsIGludCBjb21tYW5kLCBpbnQgYXJnKQogewogCXN0cnVjdCBzYWE3MTM0X2RldiAqZGV2ID0gcHJpdjsKIAlpZiAoZGV2ICE9IE5VTEwpIHsKQEAgLTU2MjAsNiArNTg0MSw3IEBACiAJY2FzZSBTQUE3MTM0X0JPQVJEX0FWRVJNRURJQV9TVFVESU9fNTA3OgogCWNhc2UgU0FBNzEzNF9CT0FSRF9BVkVSTUVESUFfR09fMDA3X0ZNOgogCWNhc2UgU0FBNzEzNF9CT0FSRF9BVkVSTUVESUFfNzc3OgorCWNhc2UgU0FBNzEzNF9CT0FSRF9BVkVSTUVESUFfTTEzNUE6CiAvKiAgICAgIGNhc2UgU0FBNzEzNF9CT0FSRF9TQUJSRU5UX1NCVFRWRk06ICAqLyAvKiBub3QgZmluaXNoZWQgeWV0ICovCiAJY2FzZSBTQUE3MTM0X0JPQVJEX1ZJREVPTUFURV9UVl9QVlI6CiAJY2FzZSBTQUE3MTM0X0JPQVJEX1ZJREVPTUFURV9HT0xEX1BMVVM6CkBAIC01NjQ0LDYgKzU4NjYsNyBAQAogCWNhc2UgU0FBNzEzNF9CT0FSRF9BVkVSTUVESUFfQTE2QVI6CiAJY2FzZSBTQUE3MTM0X0JPQVJEX0VOQ09SRV9FTkxUVjoKIAljYXNlIFNBQTcxMzRfQk9BUkRfRU5DT1JFX0VOTFRWX0ZNOgorCWNhc2UgU0FBNzEzNF9CT0FSRF9FTkNPUkVfRU5MVFZfRk01MzoKIAljYXNlIFNBQTcxMzRfQk9BUkRfMTBNT09OU1RWTUFTVEVSMzoKIAljYXNlIFNBQTcxMzRfQk9BUkRfQkVIT0xEXzQwMToKIAljYXNlIFNBQTcxMzRfQk9BUkRfQkVIT0xEXzQwMzoKQEAgLTU2NTYsNiArNTg3OSw3IEBACiAJY2FzZSBTQUE3MTM0X0JPQVJEX0JFSE9MRF81MDVGTToKIAljYXNlIFNBQTcxMzRfQk9BUkRfQkVIT0xEXzUwN185Rk06CiAJY2FzZSBTQUE3MTM0X0JPQVJEX0dFTklVU19UVkdPX0ExMU1DRToKKwljYXNlIFNBQTcxMzRfQk9BUkRfUkVBTF9BTkdFTF8yMjA6CiAJCWRldi0+aGFzX3JlbW90ZSA9IFNBQTcxMzRfUkVNT1RFX0dQSU87CiAJCWJyZWFrOwogCWNhc2UgU0FBNzEzNF9CT0FSRF9GTFlEVkJTX0xSMzAwOgpAQCAtNTc0NSw2ICs1OTY5LDcgQEAKIAljYXNlIFNBQTcxMzRfQk9BUkRfUElOTkFDTEVfUENUVl8xMTBpOgogCWNhc2UgU0FBNzEzNF9CT0FSRF9QSU5OQUNMRV9QQ1RWXzMxMGk6CiAJY2FzZSBTQUE3MTM0X0JPQVJEX1VQTU9TVF9QVVJQTEVfVFY6CisJY2FzZSBTQUE3MTM0X0JPQVJEX01TSV9UVkFUQU5ZV0hFUkVfUExVUzoKIAljYXNlIFNBQTcxMzRfQk9BUkRfSEFVUFBBVUdFX0hWUjExMTA6CiAJY2FzZSBTQUE3MTM0X0JPQVJEX0JFSE9MRF82MDdfOUZNOgogCWNhc2UgU0FBNzEzNF9CT0FSRF9CRUhPTERfTTY6CkBAIC01OTg3LDYgKzYyMTIsNyBAQAogCWNhc2UgU0FBNzEzNF9CT0FSRF9QSU5OQUNMRV9QQ1RWXzMxMGk6CiAJY2FzZSBTQUE3MTM0X0JPQVJEX0tXT1JMRF9EVkJUXzIxMDoKIAljYXNlIFNBQTcxMzRfQk9BUkRfVEVWSU9OX0RWQlRfMjIwUkY6CisJY2FzZSBTQUE3MTM0X0JPQVJEX0FTVVNUZUtfVElHRVI6CiAJY2FzZSBTQUE3MTM0X0JPQVJEX0FTVVNUZUtfUDcxMzFfRFVBTDoKIAljYXNlIFNBQTcxMzRfQk9BUkRfQVNVU1RlS19QNzEzMV9IWUJSSURfTE5BOgogCWNhc2UgU0FBNzEzNF9CT0FSRF9NRURJT05fTUQ4ODAwX1FVQURSTzoKQEAgLTYwMDIsNiArNjIyOCwxNCBAQAogCQlpMmNfdHJhbnNmZXIoJmRldi0+aTJjX2FkYXAsICZtc2csIDEpOwogCQlicmVhazsKIAl9CisJY2FzZSBTQUE3MTM0X0JPQVJEX0FTVVNUZUtfVElHRVJfM0lOMToKKwl7CisJCXU4IGRhdGFbXSA9IHsgMHgzYywgMHgzMywgMHg2MH07CisJCXN0cnVjdCBpMmNfbXNnIG1zZyA9IHsuYWRkciA9IDB4MGIsIC5mbGFncyA9IDAsIC5idWYgPSBkYXRhLAorCQkJCQkJCS5sZW4gPSBzaXplb2YoZGF0YSl9OworCQlpMmNfdHJhbnNmZXIoJmRldi0+aTJjX2FkYXAsICZtc2csIDEpOworCQlicmVhazsKKwl9CiAJY2FzZSBTQUE3MTM0X0JPQVJEX0ZMWURWQl9UUklPOgogCXsKIAkJdTggZGF0YVtdID0geyAweDNjLCAweDMzLCAweDYyfTsKQEAgLTYwMjcsNiArNjI2MSw3IEBACiAJCWkyY190cmFuc2ZlcigmZGV2LT5pMmNfYWRhcCwgJm1zZywgMSk7CiAJCWJyZWFrOwogCX0KKwljYXNlIFNBQTcxMzRfQk9BUkRfQURTX0lOU1RBTlRfSERUVl9QQ0k6CiAJY2FzZSBTQUE3MTM0X0JPQVJEX0tXT1JMRF9BVFNDMTEwOgogCXsKIAkJLyogZW5hYmxlIHR1bmVyICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1jb3JlLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1jb3JlLmMKaW5kZXggNzVkNjE4NC4uYjY4NmJmYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtY29yZS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LWNvcmUuYwpAQCAtMjE1LDcgKzIxNSw3IEBACiBpbnQgc2FhNzEzNF9wZ3RhYmxlX2FsbG9jKHN0cnVjdCBwY2lfZGV2ICpwY2ksIHN0cnVjdCBzYWE3MTM0X3BndGFibGUgKnB0KQogewogCV9fbGUzMiAgICAgICAqY3B1OwotCWRtYV9hZGRyX3QgICBkbWFfYWRkcjsKKwlkbWFfYWRkcl90ICAgZG1hX2FkZHIgPSAwOwogCiAJY3B1ID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQocGNpLCBTQUE3MTM0X1BHVEFCTEVfU0laRSwgJmRtYV9hZGRyKTsKIAlpZiAoTlVMTCA9PSBjcHUpCkBAIC0zNTksMzIgKzM1OSw2IEBACiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5zbG9jayxmbGFncyk7CiB9CiAKLS8qIHJlc2VuZHMgYSBjdXJyZW50IGJ1ZmZlciBpbiBxdWV1ZSBhZnRlciByZXN1bWUgKi8KLQotc3RhdGljIGludCBzYWE3MTM0X2J1ZmZlcl9yZXF1ZXVlKHN0cnVjdCBzYWE3MTM0X2RldiAqZGV2LAotCQkJCSAgc3RydWN0IHNhYTcxMzRfZG1hcXVldWUgKnEpCi17Ci0Jc3RydWN0IHNhYTcxMzRfYnVmICpidWYsICpuZXh0OwotCi0JYXNzZXJ0X3NwaW5fbG9ja2VkKCZkZXYtPnNsb2NrKTsKLQotCWJ1ZiAgPSBxLT5jdXJyOwotCW5leHQgPSBidWY7Ci0JZHByaW50aygiYnVmZmVyX3JlcXVldWVcbiIpOwotCi0JaWYgKCFidWYpCi0JCXJldHVybiAwOwotCi0JZHByaW50aygiYnVmZmVyX3JlcXVldWUgOiByZXNlbmRpbmcgYWN0aXZlIGJ1ZmZlcnMgXG4iKTsKLQotCWlmICghbGlzdF9lbXB0eSgmcS0+cXVldWUpKQotCQluZXh0ID0gbGlzdF9lbnRyeShxLT5xdWV1ZS5uZXh0LCBzdHJ1Y3Qgc2FhNzEzNF9idWYsCi0JCQkJCSAgdmIucXVldWUpOwotCWJ1Zi0+YWN0aXZhdGUoZGV2LCBidWYsIG5leHQpOwotCi0JcmV0dXJuIDA7Ci19Ci0KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCiBpbnQgc2FhNzEzNF9zZXRfZG1hYml0cyhzdHJ1Y3Qgc2FhNzEzNF9kZXYgKmRldikKQEAgLTQ0Miw5ICs0MTYsNyBAQAogCS8qIFRTIGNhcHR1cmUgLS0gZG1hIDUgKi8KIAlpZiAoZGV2LT50c19xLmN1cnIpIHsKIAkJY3RybCB8PSBTQUE3MTM0X01BSU5fQ1RSTF9URTU7Ci0JCWlycSAgfD0gU0FBNzEzNF9JUlExX0lOVEVfUkEyXzMgfAotCQkJU0FBNzEzNF9JUlExX0lOVEVfUkEyXzIgfAotCQkJU0FBNzEzNF9JUlExX0lOVEVfUkEyXzEgfAorCQlpcnEgIHw9IFNBQTcxMzRfSVJRMV9JTlRFX1JBMl8xIHwKIAkJCVNBQTcxMzRfSVJRMV9JTlRFX1JBMl8wOwogCX0KIApAQCAtNzI3LDYgKzY5OSwxMCBAQAogCQkJaXJxMl9tYXNrIHw9IFNBQTcxMzRfSVJRMl9JTlRFX0dQSU8xOEE7CiAJfQogCisJaWYgKGRldi0+aGFzX3JlbW90ZSA9PSBTQUE3MTM0X1JFTU9URV9JMkMpIHsKKwkJcmVxdWVzdF9tb2R1bGUoImlyLWtiZC1pMmMiKTsKKwl9CisKIAlzYWFfd3JpdGVsKFNBQTcxMzRfSVJRMSwgMCk7CiAJc2FhX3dyaXRlbChTQUE3MTM0X0lSUTIsIGlycTJfbWFzayk7CiAKQEAgLTExMzksNiArMTExNSwzMiBAQAogfQogCiAjaWZkZWYgQ09ORklHX1BNCisKKy8qIHJlc2VuZHMgYSBjdXJyZW50IGJ1ZmZlciBpbiBxdWV1ZSBhZnRlciByZXN1bWUgKi8KK3N0YXRpYyBpbnQgc2FhNzEzNF9idWZmZXJfcmVxdWV1ZShzdHJ1Y3Qgc2FhNzEzNF9kZXYgKmRldiwKKwkJCQkgIHN0cnVjdCBzYWE3MTM0X2RtYXF1ZXVlICpxKQoreworCXN0cnVjdCBzYWE3MTM0X2J1ZiAqYnVmLCAqbmV4dDsKKworCWFzc2VydF9zcGluX2xvY2tlZCgmZGV2LT5zbG9jayk7CisKKwlidWYgID0gcS0+Y3VycjsKKwluZXh0ID0gYnVmOworCWRwcmludGsoImJ1ZmZlcl9yZXF1ZXVlXG4iKTsKKworCWlmICghYnVmKQorCQlyZXR1cm4gMDsKKworCWRwcmludGsoImJ1ZmZlcl9yZXF1ZXVlIDogcmVzZW5kaW5nIGFjdGl2ZSBidWZmZXJzIFxuIik7CisKKwlpZiAoIWxpc3RfZW1wdHkoJnEtPnF1ZXVlKSkKKwkJbmV4dCA9IGxpc3RfZW50cnkocS0+cXVldWUubmV4dCwgc3RydWN0IHNhYTcxMzRfYnVmLAorCQkJCQkgIHZiLnF1ZXVlKTsKKwlidWYtPmFjdGl2YXRlKGRldiwgYnVmLCBuZXh0KTsKKworCXJldHVybiAwOworfQorCiBzdGF0aWMgaW50IHNhYTcxMzRfc3VzcGVuZChzdHJ1Y3QgcGNpX2RldiAqcGNpX2RldiAsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtZHZiLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1kdmIuYwppbmRleCBiZTQ4YjliLi44YzQ2MTE1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1kdmIuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1kdmIuYwpAQCAtNTM1LDExICs1MzUsMTYgQEAKIAkJCQlzdHJ1Y3QgdGRhMTAwNHhfY29uZmlnICpjZGVjX2NvbmYsCiAJCQkJc3RydWN0IHRkYTgyN3hfY29uZmlnICp0dW5lcl9jb25mKQogewotCWRldi0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaCh0ZGExMDA0Nl9hdHRhY2gsIGNkZWNfY29uZiwgJmRldi0+aTJjX2FkYXApOwotCWlmIChkZXYtPmR2Yi5mcm9udGVuZCkgeworCXN0cnVjdCB2aWRlb2J1Zl9kdmJfZnJvbnRlbmQgKmZlMDsKKworCS8qIEdldCB0aGUgZmlyc3QgZnJvbnRlbmQgKi8KKwlmZTAgPSB2aWRlb2J1Zl9kdmJfZ2V0X2Zyb250ZW5kKCZkZXYtPmZyb250ZW5kcywgMSk7CisKKwlmZTAtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2godGRhMTAwNDZfYXR0YWNoLCBjZGVjX2NvbmYsICZkZXYtPmkyY19hZGFwKTsKKwlpZiAoZmUwLT5kdmIuZnJvbnRlbmQpIHsKIAkJaWYgKGNkZWNfY29uZi0+aTJjX2dhdGUpCi0JCQlkZXYtPmR2Yi5mcm9udGVuZC0+b3BzLmkyY19nYXRlX2N0cmwgPSB0ZGE4MjkwX2kyY19nYXRlX2N0cmw7Ci0JCWlmIChkdmJfYXR0YWNoKHRkYTgyN3hfYXR0YWNoLCBkZXYtPmR2Yi5mcm9udGVuZCwKKwkJCWZlMC0+ZHZiLmZyb250ZW5kLT5vcHMuaTJjX2dhdGVfY3RybCA9IHRkYTgyOTBfaTJjX2dhdGVfY3RybDsKKwkJaWYgKGR2Yl9hdHRhY2godGRhODI3eF9hdHRhY2gsIGZlMC0+ZHZiLmZyb250ZW5kLAogCQkJICAgICAgIGNkZWNfY29uZi0+dHVuZXJfYWRkcmVzcywKIAkJCSAgICAgICAmZGV2LT5pMmNfYWRhcCwgdHVuZXJfY29uZikpCiAJCQlyZXR1cm4gMDsKQEAgLTU1Myw3ICs1NTgsNiBAQAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKIHN0YXRpYyBzdHJ1Y3QgdGRhODI3eF9jb25maWcgdGRhODI3eF9jZmdfMCA9IHsKLQkudHVuZXJfY2FsbGJhY2sgPSBzYWE3MTM0X3R1bmVyX2NhbGxiYWNrLAogCS5pbml0ID0gcGhpbGlwc190ZGE4Mjd4X3R1bmVyX2luaXQsCiAJLnNsZWVwID0gcGhpbGlwc190ZGE4Mjd4X3R1bmVyX3NsZWVwLAogCS5jb25maWcgPSAwLApAQCAtNTYxLDcgKzU2NSw2IEBACiB9OwogCiBzdGF0aWMgc3RydWN0IHRkYTgyN3hfY29uZmlnIHRkYTgyN3hfY2ZnXzEgPSB7Ci0JLnR1bmVyX2NhbGxiYWNrID0gc2FhNzEzNF90dW5lcl9jYWxsYmFjaywKIAkuaW5pdCA9IHBoaWxpcHNfdGRhODI3eF90dW5lcl9pbml0LAogCS5zbGVlcCA9IHBoaWxpcHNfdGRhODI3eF90dW5lcl9zbGVlcCwKIAkuY29uZmlnID0gMSwKQEAgLTU2OSw3ICs1NzIsNiBAQAogfTsKIAogc3RhdGljIHN0cnVjdCB0ZGE4Mjd4X2NvbmZpZyB0ZGE4Mjd4X2NmZ18yID0gewotCS50dW5lcl9jYWxsYmFjayA9IHNhYTcxMzRfdHVuZXJfY2FsbGJhY2ssCiAJLmluaXQgPSBwaGlsaXBzX3RkYTgyN3hfdHVuZXJfaW5pdCwKIAkuc2xlZXAgPSBwaGlsaXBzX3RkYTgyN3hfdHVuZXJfc2xlZXAsCiAJLmNvbmZpZyA9IDIsCkBAIC01NzcsNyArNTc5LDYgQEAKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgdGRhODI3eF9jb25maWcgdGRhODI3eF9jZmdfMl9zdzQyID0gewotCS50dW5lcl9jYWxsYmFjayA9IHNhYTcxMzRfdHVuZXJfY2FsbGJhY2ssCiAJLmluaXQgPSBwaGlsaXBzX3RkYTgyN3hfdHVuZXJfaW5pdCwKIAkuc2xlZXAgPSBwaGlsaXBzX3RkYTgyN3hfdHVuZXJfc2xlZXAsCiAJLmNvbmZpZyA9IDIsCkBAIC03OTksNiArODAwLDIwIEBACiAJLnJlcXVlc3RfZmlybXdhcmUgPSBwaGlsaXBzX3RkYTEwMDR4X3JlcXVlc3RfZmlybXdhcmUKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgdGRhMTAwNHhfY29uZmlnIGFzdXNfdGlnZXJfM2luMV9jb25maWcgPSB7CisJLmRlbW9kX2FkZHJlc3MgPSAweDBiLAorCS5pbnZlcnQgICAgICAgID0gMSwKKwkuaW52ZXJ0X29jbGsgICA9IDAsCisJLnh0YWxfZnJlcSAgICAgPSBUREExMDA0Nl9YVEFMXzE2TSwKKwkuYWdjX2NvbmZpZyAgICA9IFREQTEwMDQ2X0FHQ19UREE4MjdYLAorCS5ncGlvX2NvbmZpZyAgID0gVERBMTAwNDZfR1AxMV9JLAorCS5pZl9mcmVxICAgICAgID0gVERBMTAwNDZfRlJFUV8wNDUsCisJLmkyY19nYXRlICAgICAgPSAweDRiLAorCS50dW5lcl9hZGRyZXNzID0gMHg2MSwKKwkuYW50ZW5uYV9zd2l0Y2ggPSAxLAorCS5yZXF1ZXN0X2Zpcm13YXJlID0gcGhpbGlwc190ZGExMDA0eF9yZXF1ZXN0X2Zpcm13YXJlCit9OworCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqIHNwZWNpYWwgY2FzZTogdGhpcyBjYXJkIHVzZXMgc2FhNzEzeCBHUElPMjIgZm9yIHRoZSBtb2RlIHN3aXRjaAogICovCkBAIC04MjIsNyArODM3LDYgQEAKIH0KIAogc3RhdGljIHN0cnVjdCB0ZGE4Mjd4X2NvbmZpZyBhZHNfZHVvX2NmZyA9IHsKLQkudHVuZXJfY2FsbGJhY2sgPSBzYWE3MTM0X3R1bmVyX2NhbGxiYWNrLAogCS5pbml0ID0gYWRzX2R1b190dW5lcl9pbml0LAogCS5zbGVlcCA9IGFkc19kdW9fdHVuZXJfc2xlZXAsCiAJLmNvbmZpZyA9IDAKQEAgLTkzNSwxMiArOTQ5LDMwIEBACiB7CiAJaW50IHJldDsKIAlpbnQgYXR0YWNoX3hjMzAyOCA9IDA7CisJc3RydWN0IHZpZGVvYnVmX2R2Yl9mcm9udGVuZCAqZmUwOworCisJLyogRklYTUU6IGFkZCBzdXBwb3J0IGZvciBtdWx0aS1mcm9udGVuZCAqLworCW11dGV4X2luaXQoJmRldi0+ZnJvbnRlbmRzLmxvY2spOworCUlOSVRfTElTVF9IRUFEKCZkZXYtPmZyb250ZW5kcy5mZWxpc3QpOworCWRldi0+ZnJvbnRlbmRzLmFjdGl2ZV9mZV9pZCA9IDA7CisKKwlwcmludGsoS0VSTl9JTkZPICIlcygpIGFsbG9jYXRpbmcgMSBmcm9udGVuZFxuIiwgX19mdW5jX18pOworCisJaWYgKHZpZGVvYnVmX2R2Yl9hbGxvY19mcm9udGVuZCgmZGV2LT5mcm9udGVuZHMsIDEpID09IE5VTEwpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlcygpIGZhaWxlZCB0byBhbGxvY1xuIiwgX19mdW5jX18pOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwkvKiBHZXQgdGhlIGZpcnN0IGZyb250ZW5kICovCisJZmUwID0gdmlkZW9idWZfZHZiX2dldF9mcm9udGVuZCgmZGV2LT5mcm9udGVuZHMsIDEpOworCWlmICghZmUwKQorCQlyZXR1cm4gLUVJTlZBTDsKIAogCS8qIGluaXQgc3RydWN0IHZpZGVvYnVmX2R2YiAqLwogCWRldi0+dHMubnJfYnVmcyAgICA9IDMyOwogCWRldi0+dHMubnJfcGFja2V0cyA9IDMyKjQ7Ci0JZGV2LT5kdmIubmFtZSA9IGRldi0+bmFtZTsKLQl2aWRlb2J1Zl9xdWV1ZV9zZ19pbml0KCZkZXYtPmR2Yi5kdmJxLCAmc2FhNzEzNF90c19xb3BzLAorCWZlMC0+ZHZiLm5hbWUgPSBkZXYtPm5hbWU7CisJdmlkZW9idWZfcXVldWVfc2dfaW5pdCgmZmUwLT5kdmIuZHZicSwgJnNhYTcxMzRfdHNfcW9wcywKIAkJCSAgICAmZGV2LT5wY2ktPmRldiwgJmRldi0+c2xvY2ssCiAJCQkgICAgVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFLAogCQkJICAgIFY0TDJfRklFTERfQUxURVJOQVRFLApAQCAtOTUwLDQ3ICs5ODIsNDcgQEAKIAlzd2l0Y2ggKGRldi0+Ym9hcmQpIHsKIAljYXNlIFNBQTcxMzRfQk9BUkRfUElOTkFDTEVfMzAwSV9EVkJUX1BBTDoKIAkJZHByaW50aygicGlubmFjbGUgMzAwaSBkdmIgc2V0dXBcbiIpOwotCQlkZXYtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2gobXQzNTJfYXR0YWNoLCAmcGlubmFjbGVfMzAwaSwKKwkJZmUwLT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKG10MzUyX2F0dGFjaCwgJnBpbm5hY2xlXzMwMGksCiAJCQkJCSAgICAgICAmZGV2LT5pMmNfYWRhcCk7Ci0JCWlmIChkZXYtPmR2Yi5mcm9udGVuZCkgewotCQkJZGV2LT5kdmIuZnJvbnRlbmQtPm9wcy50dW5lcl9vcHMuc2V0X3BhcmFtcyA9IG10MzUyX3Bpbm5hY2xlX3R1bmVyX3NldF9wYXJhbXM7CisJCWlmIChmZTAtPmR2Yi5mcm9udGVuZCkgeworCQkJZmUwLT5kdmIuZnJvbnRlbmQtPm9wcy50dW5lcl9vcHMuc2V0X3BhcmFtcyA9IG10MzUyX3Bpbm5hY2xlX3R1bmVyX3NldF9wYXJhbXM7CiAJCX0KIAkJYnJlYWs7CiAJY2FzZSBTQUE3MTM0X0JPQVJEX0FWRVJNRURJQV83Nzc6CiAJY2FzZSBTQUE3MTM0X0JPQVJEX0FWRVJNRURJQV9BMTZBUjoKIAkJZHByaW50aygiYXZlcnR2IDc3NyBkdmIgc2V0dXBcbiIpOwotCQlkZXYtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2gobXQzNTJfYXR0YWNoLCAmYXZlcm1lZGlhXzc3NywKKwkJZmUwLT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKG10MzUyX2F0dGFjaCwgJmF2ZXJtZWRpYV83NzcsCiAJCQkJCSAgICAgICAmZGV2LT5pMmNfYWRhcCk7Ci0JCWlmIChkZXYtPmR2Yi5mcm9udGVuZCkgewotCQkJZHZiX2F0dGFjaChzaW1wbGVfdHVuZXJfYXR0YWNoLCBkZXYtPmR2Yi5mcm9udGVuZCwKKwkJaWYgKGZlMC0+ZHZiLmZyb250ZW5kKSB7CisJCQlkdmJfYXR0YWNoKHNpbXBsZV90dW5lcl9hdHRhY2gsIGZlMC0+ZHZiLmZyb250ZW5kLAogCQkJCSAgICZkZXYtPmkyY19hZGFwLCAweDYxLAogCQkJCSAgIFRVTkVSX1BISUxJUFNfVEQxMzE2KTsKIAkJfQogCQlicmVhazsKIAljYXNlIFNBQTcxMzRfQk9BUkRfQVZFUk1FRElBX0ExNkQ6CiAJCWRwcmludGsoIkF2ZXJNZWRpYSBBMTZEIGR2YiBzZXR1cFxuIik7Ci0JCWRldi0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaChtdDM1Ml9hdHRhY2gsCisJCWZlMC0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaChtdDM1Ml9hdHRhY2gsCiAJCQkJCQkmYXZlcm1lZGlhX3hjMzAyOF9tdDM1Ml9kZXYsCiAJCQkJCQkmZGV2LT5pMmNfYWRhcCk7CiAJCWF0dGFjaF94YzMwMjggPSAxOwogCQlicmVhazsKIAljYXNlIFNBQTcxMzRfQk9BUkRfTUQ3MTM0OgotCQlkZXYtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2godGRhMTAwNDZfYXR0YWNoLAorCQlmZTAtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2godGRhMTAwNDZfYXR0YWNoLAogCQkJCQkgICAgICAgJm1lZGlvbl9jYXJkYnVzLAogCQkJCQkgICAgICAgJmRldi0+aTJjX2FkYXApOwotCQlpZiAoZGV2LT5kdmIuZnJvbnRlbmQpIHsKLQkJCWR2Yl9hdHRhY2goc2ltcGxlX3R1bmVyX2F0dGFjaCwgZGV2LT5kdmIuZnJvbnRlbmQsCisJCWlmIChmZTAtPmR2Yi5mcm9udGVuZCkgeworCQkJZHZiX2F0dGFjaChzaW1wbGVfdHVuZXJfYXR0YWNoLCBmZTAtPmR2Yi5mcm9udGVuZCwKIAkJCQkgICAmZGV2LT5pMmNfYWRhcCwgbWVkaW9uX2NhcmRidXMudHVuZXJfYWRkcmVzcywKIAkJCQkgICBUVU5FUl9QSElMSVBTX0ZNRDEyMTZNRV9NSzMpOwogCQl9CiAJCWJyZWFrOwogCWNhc2UgU0FBNzEzNF9CT0FSRF9QSElMSVBTX1RPVUdIOgotCQlkZXYtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2godGRhMTAwNDZfYXR0YWNoLAorCQlmZTAtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2godGRhMTAwNDZfYXR0YWNoLAogCQkJCQkgICAgICAgJnBoaWxpcHNfdHUxMjE2XzYwX2NvbmZpZywKIAkJCQkJICAgICAgICZkZXYtPmkyY19hZGFwKTsKLQkJaWYgKGRldi0+ZHZiLmZyb250ZW5kKSB7Ci0JCQlkZXYtPmR2Yi5mcm9udGVuZC0+b3BzLnR1bmVyX29wcy5pbml0ID0gcGhpbGlwc190dTEyMTZfaW5pdDsKLQkJCWRldi0+ZHZiLmZyb250ZW5kLT5vcHMudHVuZXJfb3BzLnNldF9wYXJhbXMgPSBwaGlsaXBzX3RkYTY2NTFfcGxsX3NldDsKKwkJaWYgKGZlMC0+ZHZiLmZyb250ZW5kKSB7CisJCQlmZTAtPmR2Yi5mcm9udGVuZC0+b3BzLnR1bmVyX29wcy5pbml0ID0gcGhpbGlwc190dTEyMTZfaW5pdDsKKwkJCWZlMC0+ZHZiLmZyb250ZW5kLT5vcHMudHVuZXJfb3BzLnNldF9wYXJhbXMgPSBwaGlsaXBzX3RkYTY2NTFfcGxsX3NldDsKIAkJfQogCQlicmVhazsKIAljYXNlIFNBQTcxMzRfQk9BUkRfRkxZRFZCVERVTzoKQEAgLTEwMDEsMjQgKzEwMzMsMjQgQEAKIAkJYnJlYWs7CiAJY2FzZSBTQUE3MTM0X0JPQVJEX1BISUxJUFNfRVVST1BBOgogCWNhc2UgU0FBNzEzNF9CT0FSRF9WSURFT01BVEVfRFZCVF8zMDA6Ci0JCWRldi0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaCh0ZGExMDA0Nl9hdHRhY2gsCisJCWZlMC0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaCh0ZGExMDA0Nl9hdHRhY2gsCiAJCQkJCSAgICAgICAmcGhpbGlwc19ldXJvcGFfY29uZmlnLAogCQkJCQkgICAgICAgJmRldi0+aTJjX2FkYXApOwotCQlpZiAoZGV2LT5kdmIuZnJvbnRlbmQpIHsKLQkJCWRldi0+b3JpZ2luYWxfZGVtb2Rfc2xlZXAgPSBkZXYtPmR2Yi5mcm9udGVuZC0+b3BzLnNsZWVwOwotCQkJZGV2LT5kdmIuZnJvbnRlbmQtPm9wcy5zbGVlcCA9IHBoaWxpcHNfZXVyb3BhX2RlbW9kX3NsZWVwOwotCQkJZGV2LT5kdmIuZnJvbnRlbmQtPm9wcy50dW5lcl9vcHMuaW5pdCA9IHBoaWxpcHNfZXVyb3BhX3R1bmVyX2luaXQ7Ci0JCQlkZXYtPmR2Yi5mcm9udGVuZC0+b3BzLnR1bmVyX29wcy5zbGVlcCA9IHBoaWxpcHNfZXVyb3BhX3R1bmVyX3NsZWVwOwotCQkJZGV2LT5kdmIuZnJvbnRlbmQtPm9wcy50dW5lcl9vcHMuc2V0X3BhcmFtcyA9IHBoaWxpcHNfdGQxMzE2X3R1bmVyX3NldF9wYXJhbXM7CisJCWlmIChmZTAtPmR2Yi5mcm9udGVuZCkgeworCQkJZGV2LT5vcmlnaW5hbF9kZW1vZF9zbGVlcCA9IGZlMC0+ZHZiLmZyb250ZW5kLT5vcHMuc2xlZXA7CisJCQlmZTAtPmR2Yi5mcm9udGVuZC0+b3BzLnNsZWVwID0gcGhpbGlwc19ldXJvcGFfZGVtb2Rfc2xlZXA7CisJCQlmZTAtPmR2Yi5mcm9udGVuZC0+b3BzLnR1bmVyX29wcy5pbml0ID0gcGhpbGlwc19ldXJvcGFfdHVuZXJfaW5pdDsKKwkJCWZlMC0+ZHZiLmZyb250ZW5kLT5vcHMudHVuZXJfb3BzLnNsZWVwID0gcGhpbGlwc19ldXJvcGFfdHVuZXJfc2xlZXA7CisJCQlmZTAtPmR2Yi5mcm9udGVuZC0+b3BzLnR1bmVyX29wcy5zZXRfcGFyYW1zID0gcGhpbGlwc190ZDEzMTZfdHVuZXJfc2V0X3BhcmFtczsKIAkJfQogCQlicmVhazsKIAljYXNlIFNBQTcxMzRfQk9BUkRfVklERU9NQVRFX0RWQlRfMjAwOgotCQlkZXYtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2godGRhMTAwNDZfYXR0YWNoLAorCQlmZTAtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2godGRhMTAwNDZfYXR0YWNoLAogCQkJCQkgICAgICAgJnBoaWxpcHNfdHUxMjE2XzYxX2NvbmZpZywKIAkJCQkJICAgICAgICZkZXYtPmkyY19hZGFwKTsKLQkJaWYgKGRldi0+ZHZiLmZyb250ZW5kKSB7Ci0JCQlkZXYtPmR2Yi5mcm9udGVuZC0+b3BzLnR1bmVyX29wcy5pbml0ID0gcGhpbGlwc190dTEyMTZfaW5pdDsKLQkJCWRldi0+ZHZiLmZyb250ZW5kLT5vcHMudHVuZXJfb3BzLnNldF9wYXJhbXMgPSBwaGlsaXBzX3RkYTY2NTFfcGxsX3NldDsKKwkJaWYgKGZlMC0+ZHZiLmZyb250ZW5kKSB7CisJCQlmZTAtPmR2Yi5mcm9udGVuZC0+b3BzLnR1bmVyX29wcy5pbml0ID0gcGhpbGlwc190dTEyMTZfaW5pdDsKKwkJCWZlMC0+ZHZiLmZyb250ZW5kLT5vcHMudHVuZXJfb3BzLnNldF9wYXJhbXMgPSBwaGlsaXBzX3RkYTY2NTFfcGxsX3NldDsKIAkJfQogCQlicmVhazsKIAljYXNlIFNBQTcxMzRfQk9BUkRfS1dPUkxEX0RWQlRfMjEwOgpAQCAtMTA1NywxNCArMTA4OSwxNCBAQAogCQkJCQkJICZ0ZGE4Mjd4X2NmZ18wKSA8IDApCiAJCQkJZ290byBkZXR0YWNoX2Zyb250ZW5kOwogCQl9IGVsc2UgeyAgCQkvKiBzYXRlbGxpdGUgKi8KLQkJCWRldi0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaCh0ZGExMDA4Nl9hdHRhY2gsICZmbHlkdmJzLCAmZGV2LT5pMmNfYWRhcCk7Ci0JCQlpZiAoZGV2LT5kdmIuZnJvbnRlbmQpIHsKLQkJCQlpZiAoZHZiX2F0dGFjaCh0ZGE4MjZ4X2F0dGFjaCwgZGV2LT5kdmIuZnJvbnRlbmQsIDB4NjMsCisJCQlmZTAtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2godGRhMTAwODZfYXR0YWNoLCAmZmx5ZHZicywgJmRldi0+aTJjX2FkYXApOworCQkJaWYgKGZlMC0+ZHZiLmZyb250ZW5kKSB7CisJCQkJaWYgKGR2Yl9hdHRhY2godGRhODI2eF9hdHRhY2gsIGZlMC0+ZHZiLmZyb250ZW5kLCAweDYzLAogCQkJCQkJCQkJJmRldi0+aTJjX2FkYXAsIDApID09IE5VTEwpIHsKIAkJCQkJd3ByaW50aygiJXM6IExpZmV2aWV3IFRyaW8sIE5vIHRkYTgyNnggZm91bmQhXG4iLCBfX2Z1bmNfXyk7CiAJCQkJCWdvdG8gZGV0dGFjaF9mcm9udGVuZDsKIAkJCQl9Ci0JCQkJaWYgKGR2Yl9hdHRhY2goaXNsNjQyMV9hdHRhY2gsIGRldi0+ZHZiLmZyb250ZW5kLCAmZGV2LT5pMmNfYWRhcCwKKwkJCQlpZiAoZHZiX2F0dGFjaChpc2w2NDIxX2F0dGFjaCwgZmUwLT5kdmIuZnJvbnRlbmQsICZkZXYtPmkyY19hZGFwLAogCQkJCQkJCQkJCTB4MDgsIDAsIDApID09IE5VTEwpIHsKIAkJCQkJd3ByaW50aygiJXM6IExpZmV2aWV3IFRyaW8sIE5vIElTTDY0MjEgZm91bmQhXG4iLCBfX2Z1bmNfXyk7CiAJCQkJCWdvdG8gZGV0dGFjaF9mcm9udGVuZDsKQEAgLTEwNzQsMTEgKzExMDYsMTEgQEAKIAkJYnJlYWs7CiAJY2FzZSBTQUE3MTM0X0JPQVJEX0FEU19EVU9fQ0FSREJVU19QVFYzMzE6CiAJY2FzZSBTQUE3MTM0X0JPQVJEX0ZMWURWQlRfSFlCUklEX0NBUkRCVVM6Ci0JCWRldi0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaCh0ZGExMDA0Nl9hdHRhY2gsCisJCWZlMC0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaCh0ZGExMDA0Nl9hdHRhY2gsCiAJCQkJCSAgICAgICAmYWRzX3RlY2hfZHVvX2NvbmZpZywKIAkJCQkJICAgICAgICZkZXYtPmkyY19hZGFwKTsKLQkJaWYgKGRldi0+ZHZiLmZyb250ZW5kKSB7Ci0JCQlpZiAoZHZiX2F0dGFjaCh0ZGE4Mjd4X2F0dGFjaCxkZXYtPmR2Yi5mcm9udGVuZCwKKwkJaWYgKGZlMC0+ZHZiLmZyb250ZW5kKSB7CisJCQlpZiAoZHZiX2F0dGFjaCh0ZGE4Mjd4X2F0dGFjaCxmZTAtPmR2Yi5mcm9udGVuZCwKIAkJCQkgICBhZHNfdGVjaF9kdW9fY29uZmlnLnR1bmVyX2FkZHJlc3MsICZkZXYtPmkyY19hZGFwLAogCQkJCQkJCQkmYWRzX2R1b19jZmcpID09IE5VTEwpIHsKIAkJCQl3cHJpbnRrKCJubyB0ZGE4Mjd4IHR1bmVyIGZvdW5kIGF0IGFkZHI6ICUwMnhcbiIsCkBAIC0xMDk5LDE1ICsxMTMxLDE1IEBACiAJCQkJCQkgJnRkYTgyN3hfY2ZnXzApIDwgMCkKIAkJCQlnb3RvIGRldHRhY2hfZnJvbnRlbmQ7CiAJCX0gZWxzZSB7ICAgICAgICAvKiBzYXRlbGxpdGUgKi8KLQkJCWRldi0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaCh0ZGExMDA4Nl9hdHRhY2gsCisJCQlmZTAtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2godGRhMTAwODZfYXR0YWNoLAogCQkJCQkJCSZmbHlkdmJzLCAmZGV2LT5pMmNfYWRhcCk7Ci0JCQlpZiAoZGV2LT5kdmIuZnJvbnRlbmQpIHsKLQkJCQlzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSA9IGRldi0+ZHZiLmZyb250ZW5kOworCQkJaWYgKGZlMC0+ZHZiLmZyb250ZW5kKSB7CisJCQkJc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUgPSBmZTAtPmR2Yi5mcm9udGVuZDsKIAkJCQl1OCBkZXZfaWQgPSBkZXYtPmVlZGF0YVsyXTsKIAkJCQl1OCBkYXRhID0gMHhjNDsKIAkJCQlzdHJ1Y3QgaTJjX21zZyBtc2cgPSB7LmFkZHIgPSAweDA4LCAuZmxhZ3MgPSAwLCAubGVuID0gMX07CiAKLQkJCQlpZiAoZHZiX2F0dGFjaCh0ZGE4MjZ4X2F0dGFjaCwgZGV2LT5kdmIuZnJvbnRlbmQsCisJCQkJaWYgKGR2Yl9hdHRhY2godGRhODI2eF9hdHRhY2gsIGZlMC0+ZHZiLmZyb250ZW5kLAogCQkJCQkJMHg2MCwgJmRldi0+aTJjX2FkYXAsIDApID09IE5VTEwpIHsKIAkJCQkJd3ByaW50aygiJXM6IE1lZGlvbiBRdWFkcm8sIG5vIHRkYTgyNnggIgogCQkJCQkJImZvdW5kICFcbiIsIF9fZnVuY19fKTsKQEAgLTExNDEsMzAgKzExNzMsMzEgQEAKIAkJfQogCQlicmVhazsKIAljYXNlIFNBQTcxMzRfQk9BUkRfQVZFUk1FRElBX0FWRVJUVkhEX0ExODA6Ci0JCWRldi0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaChueHQyMDB4X2F0dGFjaCwgJmF2ZXJ0dmhkYTE4MCwKKwkJZmUwLT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKG54dDIwMHhfYXR0YWNoLCAmYXZlcnR2aGRhMTgwLAogCQkJCQkgICAgICAgJmRldi0+aTJjX2FkYXApOwotCQlpZiAoZGV2LT5kdmIuZnJvbnRlbmQpCi0JCQlkdmJfYXR0YWNoKGR2Yl9wbGxfYXR0YWNoLCBkZXYtPmR2Yi5mcm9udGVuZCwgMHg2MSwKKwkJaWYgKGZlMC0+ZHZiLmZyb250ZW5kKQorCQkJZHZiX2F0dGFjaChkdmJfcGxsX2F0dGFjaCwgZmUwLT5kdmIuZnJvbnRlbmQsIDB4NjEsCiAJCQkJICAgTlVMTCwgRFZCX1BMTF9UREhVMik7CiAJCWJyZWFrOworCWNhc2UgU0FBNzEzNF9CT0FSRF9BRFNfSU5TVEFOVF9IRFRWX1BDSToKIAljYXNlIFNBQTcxMzRfQk9BUkRfS1dPUkxEX0FUU0MxMTA6Ci0JCWRldi0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaChueHQyMDB4X2F0dGFjaCwgJmt3b3JsZGF0c2MxMTAsCisJCWZlMC0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaChueHQyMDB4X2F0dGFjaCwgJmt3b3JsZGF0c2MxMTAsCiAJCQkJCSAgICAgICAmZGV2LT5pMmNfYWRhcCk7Ci0JCWlmIChkZXYtPmR2Yi5mcm9udGVuZCkKLQkJCWR2Yl9hdHRhY2goc2ltcGxlX3R1bmVyX2F0dGFjaCwgZGV2LT5kdmIuZnJvbnRlbmQsCisJCWlmIChmZTAtPmR2Yi5mcm9udGVuZCkKKwkJCWR2Yl9hdHRhY2goc2ltcGxlX3R1bmVyX2F0dGFjaCwgZmUwLT5kdmIuZnJvbnRlbmQsCiAJCQkJICAgJmRldi0+aTJjX2FkYXAsIDB4NjEsCiAJCQkJICAgVFVORVJfUEhJTElQU19UVVYxMjM2RCk7CiAJCWJyZWFrOwogCWNhc2UgU0FBNzEzNF9CT0FSRF9GTFlEVkJTX0xSMzAwOgotCQlkZXYtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2godGRhMTAwODZfYXR0YWNoLCAmZmx5ZHZicywKKwkJZmUwLT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKHRkYTEwMDg2X2F0dGFjaCwgJmZseWR2YnMsCiAJCQkJCSAgICAgICAmZGV2LT5pMmNfYWRhcCk7Ci0JCWlmIChkZXYtPmR2Yi5mcm9udGVuZCkgewotCQkJaWYgKGR2Yl9hdHRhY2godGRhODI2eF9hdHRhY2gsIGRldi0+ZHZiLmZyb250ZW5kLCAweDYwLAorCQlpZiAoZmUwLT5kdmIuZnJvbnRlbmQpIHsKKwkJCWlmIChkdmJfYXR0YWNoKHRkYTgyNnhfYXR0YWNoLCBmZTAtPmR2Yi5mcm9udGVuZCwgMHg2MCwKIAkJCQkgICAgICAgJmRldi0+aTJjX2FkYXAsIDApID09IE5VTEwpIHsKIAkJCQl3cHJpbnRrKCIlczogTm8gdGRhODI2eCBmb3VuZCFcbiIsIF9fZnVuY19fKTsKIAkJCQlnb3RvIGRldHRhY2hfZnJvbnRlbmQ7CiAJCQl9Ci0JCQlpZiAoZHZiX2F0dGFjaChpc2w2NDIxX2F0dGFjaCwgZGV2LT5kdmIuZnJvbnRlbmQsCisJCQlpZiAoZHZiX2F0dGFjaChpc2w2NDIxX2F0dGFjaCwgZmUwLT5kdmIuZnJvbnRlbmQsCiAJCQkJICAgICAgICZkZXYtPmkyY19hZGFwLCAweDA4LCAwLCAwKSA9PSBOVUxMKSB7CiAJCQkJd3ByaW50aygiJXM6IE5vIElTTDY0MjEgZm91bmQhXG4iLCBfX2Z1bmNfXyk7CiAJCQkJZ290byBkZXR0YWNoX2Zyb250ZW5kOwpAQCAtMTE3MiwyNSArMTIwNSwyNSBAQAogCQl9CiAJCWJyZWFrOwogCWNhc2UgU0FBNzEzNF9CT0FSRF9BU1VTX0VVUk9QQTJfSFlCUklEOgotCQlkZXYtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2godGRhMTAwNDZfYXR0YWNoLAorCQlmZTAtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2godGRhMTAwNDZfYXR0YWNoLAogCQkJCQkgICAgICAgJm1lZGlvbl9jYXJkYnVzLAogCQkJCQkgICAgICAgJmRldi0+aTJjX2FkYXApOwotCQlpZiAoZGV2LT5kdmIuZnJvbnRlbmQpIHsKLQkJCWRldi0+b3JpZ2luYWxfZGVtb2Rfc2xlZXAgPSBkZXYtPmR2Yi5mcm9udGVuZC0+b3BzLnNsZWVwOwotCQkJZGV2LT5kdmIuZnJvbnRlbmQtPm9wcy5zbGVlcCA9IHBoaWxpcHNfZXVyb3BhX2RlbW9kX3NsZWVwOworCQlpZiAoZmUwLT5kdmIuZnJvbnRlbmQpIHsKKwkJCWRldi0+b3JpZ2luYWxfZGVtb2Rfc2xlZXAgPSBmZTAtPmR2Yi5mcm9udGVuZC0+b3BzLnNsZWVwOworCQkJZmUwLT5kdmIuZnJvbnRlbmQtPm9wcy5zbGVlcCA9IHBoaWxpcHNfZXVyb3BhX2RlbW9kX3NsZWVwOwogCi0JCQlkdmJfYXR0YWNoKHNpbXBsZV90dW5lcl9hdHRhY2gsIGRldi0+ZHZiLmZyb250ZW5kLAorCQkJZHZiX2F0dGFjaChzaW1wbGVfdHVuZXJfYXR0YWNoLCBmZTAtPmR2Yi5mcm9udGVuZCwKIAkJCQkgICAmZGV2LT5pMmNfYWRhcCwgbWVkaW9uX2NhcmRidXMudHVuZXJfYWRkcmVzcywKIAkJCQkgICBUVU5FUl9QSElMSVBTX0ZNRDEyMTZNRV9NSzMpOwogCQl9CiAJCWJyZWFrOwogCWNhc2UgU0FBNzEzNF9CT0FSRF9WSURFT01BVEVfRFZCVF8yMDBBOgotCQlkZXYtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2godGRhMTAwNDZfYXR0YWNoLAorCQlmZTAtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2godGRhMTAwNDZfYXR0YWNoLAogCQkJCSZwaGlsaXBzX2V1cm9wYV9jb25maWcsCiAJCQkJJmRldi0+aTJjX2FkYXApOwotCQlpZiAoZGV2LT5kdmIuZnJvbnRlbmQpIHsKLQkJCWRldi0+ZHZiLmZyb250ZW5kLT5vcHMudHVuZXJfb3BzLmluaXQgPSBwaGlsaXBzX3RkMTMxNl90dW5lcl9pbml0OwotCQkJZGV2LT5kdmIuZnJvbnRlbmQtPm9wcy50dW5lcl9vcHMuc2V0X3BhcmFtcyA9IHBoaWxpcHNfdGQxMzE2X3R1bmVyX3NldF9wYXJhbXM7CisJCWlmIChmZTAtPmR2Yi5mcm9udGVuZCkgeworCQkJZmUwLT5kdmIuZnJvbnRlbmQtPm9wcy50dW5lcl9vcHMuaW5pdCA9IHBoaWxpcHNfdGQxMzE2X3R1bmVyX2luaXQ7CisJCQlmZTAtPmR2Yi5mcm9udGVuZC0+b3BzLnR1bmVyX29wcy5zZXRfcGFyYW1zID0gcGhpbGlwc190ZDEzMTZfdHVuZXJfc2V0X3BhcmFtczsKIAkJfQogCQlicmVhazsKIAljYXNlIFNBQTcxMzRfQk9BUkRfQ0lORVJHWV9IVF9QQ01DSUE6CkBAIC0xMjI5LDE1ICsxMjYyLDE1IEBACiAJCQlnb3RvIGRldHRhY2hfZnJvbnRlbmQ7CiAJCWJyZWFrOwogCWNhc2UgU0FBNzEzNF9CT0FSRF9QSElMSVBTX1NOQUtFOgotCQlkZXYtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2godGRhMTAwODZfYXR0YWNoLCAmZmx5ZHZicywKKwkJZmUwLT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKHRkYTEwMDg2X2F0dGFjaCwgJmZseWR2YnMsCiAJCQkJCQkmZGV2LT5pMmNfYWRhcCk7Ci0JCWlmIChkZXYtPmR2Yi5mcm9udGVuZCkgewotCQkJaWYgKGR2Yl9hdHRhY2godGRhODI2eF9hdHRhY2gsIGRldi0+ZHZiLmZyb250ZW5kLCAweDYwLAorCQlpZiAoZmUwLT5kdmIuZnJvbnRlbmQpIHsKKwkJCWlmIChkdmJfYXR0YWNoKHRkYTgyNnhfYXR0YWNoLCBmZTAtPmR2Yi5mcm9udGVuZCwgMHg2MCwKIAkJCQkJJmRldi0+aTJjX2FkYXAsIDApID09IE5VTEwpIHsKIAkJCQl3cHJpbnRrKCIlczogTm8gdGRhODI2eCBmb3VuZCFcbiIsIF9fZnVuY19fKTsKIAkJCQlnb3RvIGRldHRhY2hfZnJvbnRlbmQ7CiAJCQl9Ci0JCQlpZiAoZHZiX2F0dGFjaChsbmJwMjFfYXR0YWNoLCBkZXYtPmR2Yi5mcm9udGVuZCwKKwkJCWlmIChkdmJfYXR0YWNoKGxuYnAyMV9hdHRhY2gsIGZlMC0+ZHZiLmZyb250ZW5kLAogCQkJCQkmZGV2LT5pMmNfYWRhcCwgMCwgMCkgPT0gTlVMTCkgewogCQkJCXdwcmludGsoIiVzOiBObyBsbmJwMjEgZm91bmQhXG4iLCBfX2Z1bmNfXyk7CiAJCQkJZ290byBkZXR0YWNoX2Zyb250ZW5kOwpAQCAtMTI1OSwyNCArMTI5MiwyNCBAQAogCQlzYWE3MTM0X3NldF9ncGlvKGRldiwgMjUsIDApOwogCQltc2xlZXAoMTApOwogCQlzYWE3MTM0X3NldF9ncGlvKGRldiwgMjUsIDEpOwotCQlkZXYtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2gobXQzNTJfYXR0YWNoLAorCQlmZTAtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2gobXQzNTJfYXR0YWNoLAogCQkJCQkJJmF2ZXJtZWRpYV94YzMwMjhfbXQzNTJfZGV2LAogCQkJCQkJJmRldi0+aTJjX2FkYXApOwogCQlhdHRhY2hfeGMzMDI4ID0gMTsKIAkJYnJlYWs7CiAJY2FzZSBTQUE3MTM0X0JPQVJEX01ENzEzNF9CUklER0VfMjoKLQkJZGV2LT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKHRkYTEwMDg2X2F0dGFjaCwKKwkJZmUwLT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKHRkYTEwMDg2X2F0dGFjaCwKIAkJCQkJCSZzZDE4NzhfNG0sICZkZXYtPmkyY19hZGFwKTsKLQkJaWYgKGRldi0+ZHZiLmZyb250ZW5kKSB7CisJCWlmIChmZTAtPmR2Yi5mcm9udGVuZCkgewogCQkJc3RydWN0IGR2Yl9mcm9udGVuZCAqZmU7Ci0JCQlpZiAoZHZiX2F0dGFjaChkdmJfcGxsX2F0dGFjaCwgZGV2LT5kdmIuZnJvbnRlbmQsIDB4NjAsCisJCQlpZiAoZHZiX2F0dGFjaChkdmJfcGxsX2F0dGFjaCwgZmUwLT5kdmIuZnJvbnRlbmQsIDB4NjAsCiAJCQkJICAmZGV2LT5pMmNfYWRhcCwgRFZCX1BMTF9QSElMSVBTX1NEMTg3OF9UREE4MjYxKSA9PSBOVUxMKSB7CiAJCQkJd3ByaW50aygiJXM6IE1ENzEzNCBEVkItUywgbm8gU0QxODc4ICIKIAkJCQkJImZvdW5kICFcbiIsIF9fZnVuY19fKTsKIAkJCQlnb3RvIGRldHRhY2hfZnJvbnRlbmQ7CiAJCQl9CiAJCQkvKiB3ZSBuZWVkIHRvIG9wZW4gdGhlIGkyYyBnYXRlICh3ZSBrbm93IGl0IGV4aXN0cykgKi8KLQkJCWZlID0gZGV2LT5kdmIuZnJvbnRlbmQ7CisJCQlmZSA9IGZlMC0+ZHZiLmZyb250ZW5kOwogCQkJZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKGZlLCAxKTsKIAkJCWlmIChkdmJfYXR0YWNoKGlzbDY0MDVfYXR0YWNoLCBmZSwKIAkJCQkJJmRldi0+aTJjX2FkYXAsIDB4MDgsIDAsIDApID09IE5VTEwpIHsKQEAgLTEyOTUsMTEgKzEzMjgsNDEgQEAKIAkJc2FhNzEzNF9zZXRfZ3BpbyhkZXYsIDI1LCAwKTsKIAkJbXNsZWVwKDEwKTsKIAkJc2FhNzEzNF9zZXRfZ3BpbyhkZXYsIDI1LCAxKTsKLQkJZGV2LT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKG10MzUyX2F0dGFjaCwKKwkJZmUwLT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKG10MzUyX2F0dGFjaCwKIAkJCQkJCSZhdmVybWVkaWFfeGMzMDI4X210MzUyX2RldiwKIAkJCQkJCSZkZXYtPmkyY19hZGFwKTsKIAkJYXR0YWNoX3hjMzAyOCA9IDE7CiAJCWJyZWFrOworCWNhc2UgU0FBNzEzNF9CT0FSRF9BU1VTVGVLX1RJR0VSXzNJTjE6CisJCWlmICghdXNlX2Zyb250ZW5kKSB7ICAgICAvKiB0ZXJyZXN0cmlhbCAqLworCQkJaWYgKGNvbmZpZ3VyZV90ZGE4Mjd4X2ZlKGRldiwgJmFzdXNfdGlnZXJfM2luMV9jb25maWcsCisJCQkJCQkJJnRkYTgyN3hfY2ZnXzIpIDwgMCkKKwkJCQlnb3RvIGRldHRhY2hfZnJvbnRlbmQ7CisJCX0gZWxzZSB7ICAJCS8qIHNhdGVsbGl0ZSAqLworCQkJZmUwLT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKHRkYTEwMDg2X2F0dGFjaCwKKwkJCQkJCSZmbHlkdmJzLCAmZGV2LT5pMmNfYWRhcCk7CisJCQlpZiAoZmUwLT5kdmIuZnJvbnRlbmQpIHsKKwkJCQlpZiAoZHZiX2F0dGFjaCh0ZGE4MjZ4X2F0dGFjaCwKKwkJCQkJCWZlMC0+ZHZiLmZyb250ZW5kLCAweDYwLAorCQkJCQkJJmRldi0+aTJjX2FkYXAsIDApID09IE5VTEwpIHsKKwkJCQkJd3ByaW50aygiJXM6IEFzdXMgVGlnZXIgM2luMSwgbm8gIgorCQkJCQkJInRkYTgyNnggZm91bmQhXG4iLCBfX2Z1bmNfXyk7CisJCQkJCWdvdG8gZGV0dGFjaF9mcm9udGVuZDsKKwkJCQl9CisJCQkJaWYgKGR2Yl9hdHRhY2gobG5icDIxX2F0dGFjaCwgZmUwLT5kdmIuZnJvbnRlbmQsCisJCQkJCQkmZGV2LT5pMmNfYWRhcCwgMCwgMCkgPT0gTlVMTCkgeworCQkJCQl3cHJpbnRrKCIlczogQXN1cyBUaWdlciAzaW4xLCBubyBsbmJwMjEiCisJCQkJCQkiIGZvdW5kIVxuIiwgX19mdW5jX18pOworCQkJCQlnb3RvIGRldHRhY2hfZnJvbnRlbmQ7CisJCQkJfQorCQkJfQorCQl9CisJCWJyZWFrOworCWNhc2UgU0FBNzEzNF9CT0FSRF9BU1VTVGVLX1RJR0VSOgorCQlpZiAoY29uZmlndXJlX3RkYTgyN3hfZmUoZGV2LCAmcGhpbGlwc190aWdlcl9jb25maWcsCisJCQkJCSAmdGRhODI3eF9jZmdfMCkgPCAwKQorCQkJZ290byBkZXR0YWNoX2Zyb250ZW5kOworCQlicmVhazsKIAlkZWZhdWx0OgogCQl3cHJpbnRrKCJIdWg/IHVua25vd24gRFZCIGNhcmQ/XG4iKTsKIAkJYnJlYWs7CkBAIC0xMzEyLDEwICsxMzc1LDEwIEBACiAJCQkuaTJjX2FkZHIgID0gMHg2MSwKIAkJfTsKIAotCQlpZiAoIWRldi0+ZHZiLmZyb250ZW5kKQorCQlpZiAoIWZlMC0+ZHZiLmZyb250ZW5kKQogCQkJcmV0dXJuIC0xOwogCi0JCWZlID0gZHZiX2F0dGFjaCh4YzIwMjhfYXR0YWNoLCBkZXYtPmR2Yi5mcm9udGVuZCwgJmNmZyk7CisJCWZlID0gZHZiX2F0dGFjaCh4YzIwMjhfYXR0YWNoLCBmZTAtPmR2Yi5mcm9udGVuZCwgJmNmZyk7CiAJCWlmICghZmUpIHsKIAkJCXByaW50ayhLRVJOX0VSUiAiJXMvMjogeGMzMDI4IGF0dGFjaCBmYWlsZWRcbiIsCiAJCQkgICAgICAgZGV2LT5uYW1lKTsKQEAgLTEzMjMsMzggKzEzODYsNDcgQEAKIAkJfQogCX0KIAotCWlmIChOVUxMID09IGRldi0+ZHZiLmZyb250ZW5kKSB7CisJaWYgKE5VTEwgPT0gZmUwLT5kdmIuZnJvbnRlbmQpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICIlcy9kdmI6IGZyb250ZW5kIGluaXRpYWxpemF0aW9uIGZhaWxlZFxuIiwgZGV2LT5uYW1lKTsKIAkJcmV0dXJuIC0xOwogCX0KKwkvKiBkZWZpbmUgZ2VuZXJhbC1wdXJwb3NlIGNhbGxiYWNrIHBvaW50ZXIgKi8KKwlmZTAtPmR2Yi5mcm9udGVuZC0+Y2FsbGJhY2sgPSBzYWE3MTM0X3R1bmVyX2NhbGxiYWNrOwogCiAJLyogcmVnaXN0ZXIgZXZlcnl0aGluZyBlbHNlICovCi0JcmV0ID0gdmlkZW9idWZfZHZiX3JlZ2lzdGVyKCZkZXYtPmR2YiwgVEhJU19NT0RVTEUsIGRldiwgJmRldi0+cGNpLT5kZXYsCi0JCQkJICAgIGFkYXB0ZXJfbnIpOworCXJldCA9IHZpZGVvYnVmX2R2Yl9yZWdpc3Rlcl9idXMoJmRldi0+ZnJvbnRlbmRzLCBUSElTX01PRFVMRSwgZGV2LAorCQkmZGV2LT5wY2ktPmRldiwgYWRhcHRlcl9uciwgMCk7CiAKIAkvKiB0aGlzIHNlcXVlbmNlIGlzIG5lY2Vzc2FyeSB0byBtYWtlIHRoZSB0ZGExMDA0eCBsb2FkIGl0cyBmaXJtd2FyZQogCSAqIGFuZCB0byBlbnRlciBhbmFsb2cgbW9kZSBvZiBoeWJyaWQgYm9hcmRzCiAJICovCiAJaWYgKCFyZXQpIHsKLQkJaWYgKGRldi0+ZHZiLmZyb250ZW5kLT5vcHMuaW5pdCkKLQkJCWRldi0+ZHZiLmZyb250ZW5kLT5vcHMuaW5pdChkZXYtPmR2Yi5mcm9udGVuZCk7Ci0JCWlmIChkZXYtPmR2Yi5mcm9udGVuZC0+b3BzLnNsZWVwKQotCQkJZGV2LT5kdmIuZnJvbnRlbmQtPm9wcy5zbGVlcChkZXYtPmR2Yi5mcm9udGVuZCk7Ci0JCWlmIChkZXYtPmR2Yi5mcm9udGVuZC0+b3BzLnR1bmVyX29wcy5zbGVlcCkKLQkJCWRldi0+ZHZiLmZyb250ZW5kLT5vcHMudHVuZXJfb3BzLnNsZWVwKGRldi0+ZHZiLmZyb250ZW5kKTsKKwkJaWYgKGZlMC0+ZHZiLmZyb250ZW5kLT5vcHMuaW5pdCkKKwkJCWZlMC0+ZHZiLmZyb250ZW5kLT5vcHMuaW5pdChmZTAtPmR2Yi5mcm9udGVuZCk7CisJCWlmIChmZTAtPmR2Yi5mcm9udGVuZC0+b3BzLnNsZWVwKQorCQkJZmUwLT5kdmIuZnJvbnRlbmQtPm9wcy5zbGVlcChmZTAtPmR2Yi5mcm9udGVuZCk7CisJCWlmIChmZTAtPmR2Yi5mcm9udGVuZC0+b3BzLnR1bmVyX29wcy5zbGVlcCkKKwkJCWZlMC0+ZHZiLmZyb250ZW5kLT5vcHMudHVuZXJfb3BzLnNsZWVwKGZlMC0+ZHZiLmZyb250ZW5kKTsKIAl9CiAJcmV0dXJuIHJldDsKIAogZGV0dGFjaF9mcm9udGVuZDoKLQlpZiAoZGV2LT5kdmIuZnJvbnRlbmQpCi0JCWR2Yl9mcm9udGVuZF9kZXRhY2goZGV2LT5kdmIuZnJvbnRlbmQpOwotCWRldi0+ZHZiLmZyb250ZW5kID0gTlVMTDsKKwlpZiAoZmUwLT5kdmIuZnJvbnRlbmQpCisJCWR2Yl9mcm9udGVuZF9kZXRhY2goZmUwLT5kdmIuZnJvbnRlbmQpOworCWZlMC0+ZHZiLmZyb250ZW5kID0gTlVMTDsKIAogCXJldHVybiAtMTsKIH0KIAogc3RhdGljIGludCBkdmJfZmluaShzdHJ1Y3Qgc2FhNzEzNF9kZXYgKmRldikKIHsKKwlzdHJ1Y3QgdmlkZW9idWZfZHZiX2Zyb250ZW5kICpmZTA7CisKKwkvKiBHZXQgdGhlIGZpcnN0IGZyb250ZW5kICovCisJZmUwID0gdmlkZW9idWZfZHZiX2dldF9mcm9udGVuZCgmZGV2LT5mcm9udGVuZHMsIDEpOworCWlmICghZmUwKQorCQlyZXR1cm4gLUVJTlZBTDsKKwogCS8qIEZJWE1FOiBJIHN1c3BlY3QgdGhhdCB0aGlzIGNvZGUgaXMgYm9ndXMsIHNpbmNlIHRoZSBlbnRyeSBmb3IKIAkgICBQaW5uYWNsZSAzMDBJIERWQi1UIFBBTCBhbHJlYWR5IGRlZmluZXMgdGhlIHByb3BlciBpbml0IHRvIGFsbG93CiAJICAgdGhlIGRldGVjdGlvbiBvZiBtdDIwMzIgKFREQTk4ODdfUE9SVDJfSU5BQ1RJVkUpCkBAIC0xMzc0LDcgKzE0NDYsNyBAQAogCQkJdTggZGF0YSA9IDB4ODA7CiAJCQlzdHJ1Y3QgaTJjX21zZyBtc2cgPSB7LmFkZHIgPSAweDA4LCAuYnVmID0gJmRhdGEsIC5mbGFncyA9IDAsIC5sZW4gPSAxfTsKIAkJCXN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlOwotCQkJZmUgPSBkZXYtPmR2Yi5mcm9udGVuZDsKKwkJCWZlID0gZmUwLT5kdmIuZnJvbnRlbmQ7CiAJCQlpZiAoZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKSB7CiAJCQkJZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKGZlLCAxKTsKIAkJCQlpMmNfdHJhbnNmZXIoJmRldi0+aTJjX2FkYXAsICZtc2csIDEpOwpAQCAtMTM4Miw4ICsxNDU0LDggQEAKIAkJCX0KIAkJfQogCX0KLQlpZiAoZGV2LT5kdmIuZnJvbnRlbmQpCi0JCXZpZGVvYnVmX2R2Yl91bnJlZ2lzdGVyKCZkZXYtPmR2Yik7CisJaWYgKGZlMC0+ZHZiLmZyb250ZW5kKQorCQl2aWRlb2J1Zl9kdmJfdW5yZWdpc3Rlcl9idXMoJmRldi0+ZnJvbnRlbmRzKTsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtZW1wcmVzcy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtZW1wcmVzcy5jCmluZGV4IGMwYzVkNzUuLjlhODc2NmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LWVtcHJlc3MuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1lbXByZXNzLmMKQEAgLTI5LDYgKzI5LDcgQEAKIAogI2luY2x1ZGUgPG1lZGlhL3NhYTY3NTJocy5oPgogI2luY2x1ZGUgPG1lZGlhL3Y0bDItY29tbW9uLmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1jaGlwLWlkZW50Lmg+CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCkBAIC02MywxMCArNjQsMTkgQEAKIAogc3RhdGljIGludCB0c19pbml0X2VuY29kZXIoc3RydWN0IHNhYTcxMzRfZGV2KiBkZXYpCiB7Ci0Jc3RydWN0IHY0bDJfZXh0X2NvbnRyb2xzIGN0cmxzID0geyBWNEwyX0NUUkxfQ0xBU1NfTVBFRywgMCB9OworCXUzMiBsZWFkaW5nX251bGxfYnl0ZXMgPSAwOwogCisJLyogSWYgbW9yZSBjYXJkcyBzdGFydCB0byBuZWVkIHRoaXMsIHRoZW4gdGhpcworCSAgIHNob3VsZCBwcm9iYWJseSBiZSBhZGRlZCB0byB0aGUgY2FyZCBkZWZpbml0aW9ucy4gKi8KKwlzd2l0Y2ggKGRldi0+Ym9hcmQpIHsKKwljYXNlIFNBQTcxMzRfQk9BUkRfQkVIT0xEX002OgorCWNhc2UgU0FBNzEzNF9CT0FSRF9CRUhPTERfTTYzOgorCWNhc2UgU0FBNzEzNF9CT0FSRF9CRUhPTERfTTZfRVhUUkE6CisJCWxlYWRpbmdfbnVsbF9ieXRlcyA9IDE7CisJCWJyZWFrOworCX0KIAl0c19yZXNldF9lbmNvZGVyKGRldik7Ci0Jc2FhNzEzNF9pMmNfY2FsbF9jbGllbnRzKGRldiwgVklESU9DX1NfRVhUX0NUUkxTLCAmY3RybHMpOworCXNhYTcxMzRfaTJjX2NhbGxfY2xpZW50cyhkZXYsIFZJRElPQ19JTlRfSU5JVCwgJmxlYWRpbmdfbnVsbF9ieXRlcyk7CiAJZGV2LT5lbXByZXNzX3N0YXJ0ZWQgPSAxOwogCXJldHVybiAwOwogfQpAQCAtNzksOSArODksMTEgQEAKIAlzdHJ1Y3Qgc2FhNzEzNF9kZXYgKmRldjsKIAlpbnQgZXJyOwogCisJbG9ja19rZXJuZWwoKTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRldiwgJnNhYTcxMzRfZGV2bGlzdCwgZGV2bGlzdCkKIAkJaWYgKGRldi0+ZW1wcmVzc19kZXYgJiYgZGV2LT5lbXByZXNzX2Rldi0+bWlub3IgPT0gbWlub3IpCiAJCQlnb3RvIGZvdW5kOworCXVubG9ja19rZXJuZWwoKTsKIAlyZXR1cm4gLUVOT0RFVjsKICBmb3VuZDoKIApAQCAtMTAzLDYgKzExNSw3IEBACiBkb25lX3VwOgogCW11dGV4X3VubG9jaygmZGV2LT5lbXByZXNzX3RzcS52Yl9sb2NrKTsKIGRvbmU6CisJdW5sb2NrX2tlcm5lbCgpOwogCXJldHVybiBlcnI7CiB9CiAKQEAgLTI5MCwxNSArMzAzLDYgQEAKIAlyZXR1cm4gdmlkZW9idWZfc3RyZWFtb2ZmKCZkZXYtPmVtcHJlc3NfdHNxKTsKIH0KIAotc3RhdGljIGludCBzYWE3MTM0X2kyY19jYWxsX3NhYTY3NTIoc3RydWN0IHNhYTcxMzRfZGV2ICpkZXYsCi0JCQkJCSAgICAgIHVuc2lnbmVkIGludCBjbWQsIHZvaWQgKmFyZykKLXsKLQlpZiAoZGV2LT5tcGVnX2kyY19jbGllbnQgPT0gTlVMTCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JcmV0dXJuIGRldi0+bXBlZ19pMmNfY2xpZW50LT5kcml2ZXItPmNvbW1hbmQoZGV2LT5tcGVnX2kyY19jbGllbnQsCi0JCQkJCQkJCWNtZCwgYXJnKTsKLX0KLQogc3RhdGljIGludCBlbXByZXNzX3NfZXh0X2N0cmxzKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQkJICAgICAgIHN0cnVjdCB2NGwyX2V4dF9jb250cm9scyAqY3RybHMpCiB7CkBAIC00MDAsNiArNDA0LDM5IEBACiAJcmV0dXJuIHNhYTcxMzRfaTJjX2NhbGxfc2FhNjc1MihkZXYsIFZJRElPQ19RVUVSWU1FTlUsIGMpOwogfQogCitzdGF0aWMgaW50IGVtcHJlc3NfZ19jaGlwX2lkZW50KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwKKwkgICAgICAgc3RydWN0IHY0bDJfY2hpcF9pZGVudCAqY2hpcCkKK3sKKwlzdHJ1Y3Qgc2FhNzEzNF9kZXYgKmRldiA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKworCWNoaXAtPmlkZW50ID0gVjRMMl9JREVOVF9OT05FOworCWNoaXAtPnJldmlzaW9uID0gMDsKKwlpZiAoZGV2LT5tcGVnX2kyY19jbGllbnQgPT0gTlVMTCkKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKGNoaXAtPm1hdGNoX3R5cGUgPT0gVjRMMl9DSElQX01BVENIX0kyQ19EUklWRVIgJiYKKwkgICAgY2hpcC0+bWF0Y2hfY2hpcCA9PSBJMkNfRFJJVkVSSURfU0FBNjc1MkhTKQorCQlyZXR1cm4gc2FhNzEzNF9pMmNfY2FsbF9zYWE2NzUyKGRldiwgVklESU9DX0dfQ0hJUF9JREVOVCwgY2hpcCk7CisJaWYgKGNoaXAtPm1hdGNoX3R5cGUgPT0gVjRMMl9DSElQX01BVENIX0kyQ19BRERSICYmCisJICAgIGNoaXAtPm1hdGNoX2NoaXAgPT0gZGV2LT5tcGVnX2kyY19jbGllbnQtPmFkZHIpCisJCXJldHVybiBzYWE3MTM0X2kyY19jYWxsX3NhYTY3NTIoZGV2LCBWSURJT0NfR19DSElQX0lERU5ULCBjaGlwKTsKKwlyZXR1cm4gLUVJTlZBTDsKK30KKworc3RhdGljIGludCBlbXByZXNzX3Nfc3RkKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LCB2NGwyX3N0ZF9pZCAqaWQpCit7CisJc3RydWN0IHNhYTcxMzRfZGV2ICpkZXYgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisKKwlyZXR1cm4gc2FhNzEzNF9zX3N0ZF9pbnRlcm5hbChkZXYsIE5VTEwsIGlkKTsKK30KKworc3RhdGljIGludCBlbXByZXNzX2dfc3RkKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LCB2NGwyX3N0ZF9pZCAqaWQpCit7CisJc3RydWN0IHNhYTcxMzRfZGV2ICpkZXYgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisKKwkqaWQgPSBkZXYtPnR2bm9ybS0+aWQ7CisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHRzX2ZvcHMgPQogewogCS5vd25lcgkgID0gVEhJU19NT0RVTEUsCkBAIC00MjgsMTEgKzQ2NSwxMyBAQAogCS52aWRpb2NfZW51bV9pbnB1dAkJPSBlbXByZXNzX2VudW1faW5wdXQsCiAJLnZpZGlvY19nX2lucHV0CQkJPSBlbXByZXNzX2dfaW5wdXQsCiAJLnZpZGlvY19zX2lucHV0CQkJPSBlbXByZXNzX3NfaW5wdXQsCi0KIAkudmlkaW9jX3F1ZXJ5Y3RybAkJPSBlbXByZXNzX3F1ZXJ5Y3RybCwKIAkudmlkaW9jX3F1ZXJ5bWVudQkJPSBlbXByZXNzX3F1ZXJ5bWVudSwKIAkudmlkaW9jX2dfY3RybAkJCT0gZW1wcmVzc19nX2N0cmwsCiAJLnZpZGlvY19zX2N0cmwJCQk9IGVtcHJlc3Nfc19jdHJsLAorCS52aWRpb2NfZ19jaGlwX2lkZW50IAkJPSBlbXByZXNzX2dfY2hpcF9pZGVudCwKKwkudmlkaW9jX3Nfc3RkCQkJPSBlbXByZXNzX3Nfc3RkLAorCS52aWRpb2NfZ19zdGQJCQk9IGVtcHJlc3NfZ19zdGQsCiB9OwogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtaTJjLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1pMmMuYwppbmRleCA1ZjcxM2U2Li4yMGMxYjMzIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1pMmMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1pMmMuYwpAQCAtMzM3LDYgKzMzNyw3IEBACiAJCWNhc2UgMHg0NzoKIAkJY2FzZSAweDcxOgogCQljYXNlIDB4MmQ6CisJCWNhc2UgMHgzMDoKIAkJewogCQkJc3RydWN0IElSX2kyYyAqaXIgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKIAkJCWQxcHJpbnRrKCIlcyBpMmMgSVIgZGV0ZWN0ZWQgKCVzKS5cbiIsCkBAIC00MjcsNiArNDI4LDE2IEBACiAJaTJjX2NsaWVudHNfY29tbWFuZCgmZGV2LT5pMmNfYWRhcCwgY21kLCBhcmcpOwogfQogCitpbnQgc2FhNzEzNF9pMmNfY2FsbF9zYWE2NzUyKHN0cnVjdCBzYWE3MTM0X2RldiAqZGV2LAorCQkJCQkgICAgICB1bnNpZ25lZCBpbnQgY21kLCB2b2lkICphcmcpCit7CisJaWYgKGRldi0+bXBlZ19pMmNfY2xpZW50ID09IE5VTEwpCisJCXJldHVybiAtRUlOVkFMOworCXJldHVybiBkZXYtPm1wZWdfaTJjX2NsaWVudC0+ZHJpdmVyLT5jb21tYW5kKGRldi0+bXBlZ19pMmNfY2xpZW50LAorCQkJCQkJCQljbWQsIGFyZyk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChzYWE3MTM0X2kyY19jYWxsX3NhYTY3NTIpOworCiBpbnQgc2FhNzEzNF9pMmNfcmVnaXN0ZXIoc3RydWN0IHNhYTcxMzRfZGV2ICpkZXYpCiB7CiAJZGV2LT5pMmNfYWRhcCA9IHNhYTcxMzRfYWRhcF90ZW1wbGF0ZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LWlucHV0LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1pbnB1dC5jCmluZGV4IGFkMDhkMTMuLmM1M2ZkNWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LWlucHV0LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtaW5wdXQuYwpAQCAtNjIsOCArNjIsMTEgQEAKICNkZWZpbmUgaTJjZHByaW50ayhmbXQsIGFyZy4uLikgICAgaWYgKGlyX2RlYnVnKSBcCiAJcHJpbnRrKEtFUk5fREVCVUcgIiVzL2lyOiAiIGZtdCwgaXItPmMubmFtZSAsICMjIGFyZykKIAotLyoqIHJjNSBmdW5jdGlvbnMgKi8KKy8qIEhlbHBlciBmdW5jdGlvbnMgZm9yIFJDNSBhbmQgTkVDIGRlY29kaW5nIGF0IEdQSU8xNiBvciBHUElPMTggKi8KIHN0YXRpYyBpbnQgc2FhNzEzNF9yYzVfaXJxKHN0cnVjdCBzYWE3MTM0X2RldiAqZGV2KTsKK3N0YXRpYyBpbnQgc2FhNzEzNF9uZWNfaXJxKHN0cnVjdCBzYWE3MTM0X2RldiAqZGV2KTsKK3N0YXRpYyB2b2lkIG5lY190YXNrKHVuc2lnbmVkIGxvbmcgZGF0YSk7CitzdGF0aWMgdm9pZCBzYWE3MTM0X25lY190aW1lcih1bnNpZ25lZCBsb25nIGRhdGEpOwogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLSBHUElPIGdlbmVyaWMga2V5Y29kZSBidWlsZGVyIC0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKQEAgLTExNSw2ICsxMTgsNTMgQEAKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tIENoaXAgc3BlY2lmaWMgSTJDIGtleSBidWlsZGVycyAtLS0tLS0tLS0tLS0tLS0tLSAqLwogCitzdGF0aWMgaW50IGdldF9rZXlfbXNpX3R2YW55d2hlcmVfcGx1cyhzdHJ1Y3QgSVJfaTJjICppciwgdTMyICppcl9rZXksCisJCQkJICAgICAgIHUzMiAqaXJfcmF3KQoreworCXVuc2lnbmVkIGNoYXIgYjsKKwlpbnQgZ3BpbzsKKworCS8qIDxkZXY+IGlzIG5lZWRlZCB0byBhY2Nlc3MgR1BJTy4gVXNlZCBieSB0aGUgc2FhX3JlYWRsIG1hY3JvLiAqLworCXN0cnVjdCBzYWE3MTM0X2RldiAqZGV2ID0gaXItPmMuYWRhcHRlci0+YWxnb19kYXRhOworCWlmIChkZXYgPT0gTlVMTCkgeworCQlkcHJpbnRrKCJnZXRfa2V5X21zaV90dmFueXdoZXJlX3BsdXM6ICIKKwkJCSJnaXItPmMuYWRhcHRlci0+YWxnb19kYXRhIGlzIE5VTEwhXG4iKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJLyogcmlzaW5nIFNBQTcxMzRfR1BJT19HUFJFU0NBTiByZWFkcyB0aGUgc3RhdHVzICovCisKKwlzYWFfY2xlYXJiKFNBQTcxMzRfR1BJT19HUE1PREUzLCBTQUE3MTM0X0dQSU9fR1BSRVNDQU4pOworCXNhYV9zZXRiKFNBQTcxMzRfR1BJT19HUE1PREUzLCBTQUE3MTM0X0dQSU9fR1BSRVNDQU4pOworCisJZ3BpbyA9IHNhYV9yZWFkbChTQUE3MTM0X0dQSU9fR1BTVEFUVVMwID4+IDIpOworCisJLyogR1BJTyYweDQwIGlzIHB1bHNlZCBsb3cgd2hlbiBhIGJ1dHRvbiBpcyBwcmVzc2VkLiBEb24ndCBkbworCSAgIEkyQyByZWNlaXZlIGlmIGdwaW8mMHg0MCBpcyBub3QgbG93LiAqLworCisJaWYgKGdwaW8gJiAweDQwKQorCQlyZXR1cm4gMDsgICAgICAgLyogTm8gYnV0dG9uIHByZXNzICovCisKKwkvKiBHUElPIHNheXMgdGhlcmUgaXMgYSBidXR0b24gcHJlc3MuIEdldCBpdC4gKi8KKworCWlmICgxICE9IGkyY19tYXN0ZXJfcmVjdigmaXItPmMsICZiLCAxKSkgeworCQlpMmNkcHJpbnRrKCJyZWFkIGVycm9yXG4iKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJLyogTm8gYnV0dG9uIHByZXNzICovCisKKwlpZiAoYiA9PSAweGZmKQorCQlyZXR1cm4gMDsKKworCS8qIEJ1dHRvbiBwcmVzc2VkICovCisKKwlkcHJpbnRrKCJnZXRfa2V5X21zaV90dmFueXdoZXJlX3BsdXM6IEtleSA9IDB4JTAyWFxuIiwgYik7CisJKmlyX2tleSA9IGI7CisJKmlyX3JhdyA9IGI7CisJcmV0dXJuIDE7Cit9CisKIHN0YXRpYyBpbnQgZ2V0X2tleV9wdXJwbGV0dihzdHJ1Y3QgSVJfaTJjICppciwgdTMyICppcl9rZXksIHUzMiAqaXJfcmF3KQogewogCXVuc2lnbmVkIGNoYXIgYjsKQEAgLTI4MCw3ICszMzAsOSBAQAogewogCXN0cnVjdCBjYXJkX2lyICppciA9IGRldi0+cmVtb3RlOwogCi0JaWYgKCFpci0+cG9sbGluZyAmJiAhaXItPnJjNV9ncGlvKSB7CisJaWYgKGlyLT5uZWNfZ3BpbykgeworCQlzYWE3MTM0X25lY19pcnEoZGV2KTsKKwl9IGVsc2UgaWYgKCFpci0+cG9sbGluZyAmJiAhaXItPnJjNV9ncGlvKSB7CiAJCWJ1aWxkX2tleShkZXYpOwogCX0gZWxzZSBpZiAoaXItPnJjNV9ncGlvKSB7CiAJCXNhYTcxMzRfcmM1X2lycShkZXYpOwpAQCAtMzE2LDYgKzM2OCwxMCBAQAogCQlpci0+YWRkciA9IDB4MTc7CiAJCWlyLT5yYzVfa2V5X3RpbWVvdXQgPSBpcl9yYzVfa2V5X3RpbWVvdXQ7CiAJCWlyLT5yYzVfcmVtb3RlX2dhcCA9IGlyX3JjNV9yZW1vdGVfZ2FwOworCX0gZWxzZSBpZiAoaXItPm5lY19ncGlvKSB7CisJCXNldHVwX3RpbWVyKCZpci0+dGltZXJfa2V5dXAsIHNhYTcxMzRfbmVjX3RpbWVyLAorCQkJICAgICh1bnNpZ25lZCBsb25nKWRldik7CisJCXRhc2tsZXRfaW5pdCgmaXItPnRsZXQsIG5lY190YXNrLCAodW5zaWduZWQgbG9uZylkZXYpOwogCX0KIH0KIApAQCAtMzM1LDYgKzM5MSw3IEBACiAJdTMyIG1hc2tfa2V5dXAgICA9IDA7CiAJaW50IHBvbGxpbmcgICAgICA9IDA7CiAJaW50IHJjNV9ncGlvCSA9IDA7CisJaW50IG5lY19ncGlvCSA9IDA7CiAJaW50IGlyX3R5cGUgICAgICA9IElSX1RZUEVfT1RIRVI7CiAJaW50IGVycjsKIApAQCAtMzkxLDYgKzQ0OCwxMiBAQAogCQlzYWFfc2V0YihTQUE3MTM0X0dQSU9fR1BNT0RFMCwgMHg0KTsKIAkJc2FhX3NldGIoU0FBNzEzNF9HUElPX0dQU1RBVFVTMCwgMHg0KTsKIAkJYnJlYWs7CisJY2FzZSBTQUE3MTM0X0JPQVJEX0FWRVJNRURJQV9NMTM1QToKKwkJaXJfY29kZXMgICAgID0gaXJfY29kZXNfYXZlcm1lZGlhX20xMzVhOworCQltYXNrX2tleWRvd24gPSAweDAwNDAwMDA7CisJCW1hc2tfa2V5Y29kZSA9IDB4MDAwMTNmOworCQluZWNfZ3BpbyAgICAgPSAxOworCQlicmVhazsKIAljYXNlIFNBQTcxMzRfQk9BUkRfQVZFUk1FRElBXzc3NzoKIAljYXNlIFNBQTcxMzRfQk9BUkRfQVZFUk1FRElBX0ExNkFSOgogCQlpcl9jb2RlcyAgICAgPSBpcl9jb2Rlc19hdmVybWVkaWE7CkBAIC00OTksNiArNTYyLDEyIEBACiAJCW1hc2tfa2V5dXAgICA9IDB4MDQwMDAwOwogCQlwb2xsaW5nICAgICAgPSA1MDsgLy8gbXMKIAkJYnJlYWs7CisJY2FzZSBTQUE3MTM0X0JPQVJEX0VOQ09SRV9FTkxUVl9GTTUzOgorCQlpcl9jb2RlcyAgICAgPSBpcl9jb2Rlc19lbmNvcmVfZW5sdHZfZm01MzsKKwkJbWFza19rZXlkb3duID0gMHgwMDQwMDAwOworCQltYXNrX2tleWNvZGUgPSAweDAwMDA3ZjsKKwkJbmVjX2dwaW8gPSAxOworCQlicmVhazsKIAljYXNlIFNBQTcxMzRfQk9BUkRfMTBNT09OU1RWTUFTVEVSMzoKIAkJaXJfY29kZXMgICAgID0gaXJfY29kZXNfZW5jb3JlX2VubHR2OwogCQltYXNrX2tleWNvZGUgPSAweDVmODAwMDA7CkBAIC01MTEsNiArNTgwLDEyIEBACiAJCW1hc2tfa2V5ZG93biA9IDB4ZjAwMDAwOwogCQlwb2xsaW5nID0gNTA7IC8qIG1zICovCiAJCWJyZWFrOworCWNhc2UgU0FBNzEzNF9CT0FSRF9SRUFMX0FOR0VMXzIyMDoKKwkJaXJfY29kZXMgICAgID0gaXJfY29kZXNfcmVhbF9hdWRpb18yMjBfMzJfa2V5czsKKwkJbWFza19rZXljb2RlID0gMHgzZjAwOworCQltYXNrX2tleXVwICAgPSAweDQwMDA7CisJCXBvbGxpbmcgPSA1MDsgLyogbXMgKi8KKwkJYnJlYWs7CiAJfQogCWlmIChOVUxMID09IGlyX2NvZGVzKSB7CiAJCXByaW50aygiJXM6IE9vcHM6IElSIGNvbmZpZyBlcnJvciBbY2FyZD0lZF1cbiIsCkBAIC01MzMsNiArNjA4LDcgQEAKIAlpci0+bWFza19rZXl1cCAgID0gbWFza19rZXl1cDsKIAlpci0+cG9sbGluZyAgICAgID0gcG9sbGluZzsKIAlpci0+cmM1X2dwaW8JID0gcmM1X2dwaW87CisJaXItPm5lY19ncGlvCSA9IG5lY19ncGlvOwogCiAJLyogaW5pdCBpbnB1dCBkZXZpY2UgKi8KIAlzbnByaW50Zihpci0+bmFtZSwgc2l6ZW9mKGlyLT5uYW1lKSwgInNhYTcxMzQgSVIgKCVzKSIsCkBAIC02MTIsNiArNjg4LDExIEBACiAJCWlyLT5nZXRfa2V5ICAgPSBnZXRfa2V5X3B1cnBsZXR2OwogCQlpci0+aXJfY29kZXMgID0gaXJfY29kZXNfcHVycGxldHY7CiAJCWJyZWFrOworCWNhc2UgU0FBNzEzNF9CT0FSRF9NU0lfVFZBVEFOWVdIRVJFX1BMVVM6CisJCXNucHJpbnRmKGlyLT5jLm5hbWUsIHNpemVvZihpci0+Yy5uYW1lKSwgIk1TSSBUVkBueXdoZXJlIFBsdXMiKTsKKwkJaXItPmdldF9rZXkgID0gZ2V0X2tleV9tc2lfdHZhbnl3aGVyZV9wbHVzOworCQlpci0+aXJfY29kZXMgPSBpcl9jb2Rlc19tc2lfdHZhbnl3aGVyZV9wbHVzOworCQlicmVhazsKIAljYXNlIFNBQTcxMzRfQk9BUkRfSEFVUFBBVUdFX0hWUjExMTA6CiAJCXNucHJpbnRmKGlyLT5jLm5hbWUsIHNpemVvZihpci0+Yy5uYW1lKSwgIkhWUiAxMTEwIik7CiAJCWlyLT5nZXRfa2V5ICAgPSBnZXRfa2V5X2h2cjExMTA7CkBAIC02NzUsOCArNzU2LDEyNSBAQAogCXJldHVybiAxOwogfQogCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBMb2NhbCB2YXJpYWJsZXM6Ci0gKiBjLWJhc2ljLW9mZnNldDogOAotICogRW5kOgorCisvKiBPbiBORUMgcHJvdG9jb2wsIE9uZSBoYXMgMi4yNSBtcywgYW5kIHplcm8gaGFzIDEuMTI1IG1zCisgICBUaGUgZmlyc3QgcHVsc2UgKHN0YXJ0KSBoYXMgOSArIDQuNSBtcwogICovCisKK3N0YXRpYyB2b2lkIHNhYTcxMzRfbmVjX3RpbWVyKHVuc2lnbmVkIGxvbmcgZGF0YSkKK3sKKwlzdHJ1Y3Qgc2FhNzEzNF9kZXYgKmRldiA9IChzdHJ1Y3Qgc2FhNzEzNF9kZXYgKikgZGF0YTsKKwlzdHJ1Y3QgY2FyZF9pciAqaXIgPSBkZXYtPnJlbW90ZTsKKworCWRwcmludGsoIkNhbmNlbCBrZXkgcmVwZWF0XG4iKTsKKworCWlyX2lucHV0X25va2V5KGlyLT5kZXYsICZpci0+aXIpOworfQorCitzdGF0aWMgdm9pZCBuZWNfdGFzayh1bnNpZ25lZCBsb25nIGRhdGEpCit7CisJc3RydWN0IHNhYTcxMzRfZGV2ICpkZXYgPSAoc3RydWN0IHNhYTcxMzRfZGV2ICopIGRhdGE7CisJc3RydWN0IGNhcmRfaXIgKmlyOworCXN0cnVjdCB0aW1ldmFsIHR2OworCWludCBjb3VudCwgcHVsc2UsIG9sZHB1bHNlLCBnYXA7CisJdTMyIGlyY29kZSA9IDAsIG5vdF9jb2RlID0gMDsKKwlpbnQgbmdhcCA9IDA7CisKKwlpZiAoIWRhdGEpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJzYWE3MTN4L2lyOiBDYW4ndCByZWNvdmVyIGRldiBzdHJ1Y3RcbiIpOworCQkvKiBHUElPIHdpbGwgYmUga2VwdCBkaXNhYmxlZCAqLworCQlyZXR1cm47CisJfQorCisJaXIgPSBkZXYtPnJlbW90ZTsKKworCS8qIHJpc2luZyBTQUE3MTM0X0dQSU9fR1BSRVNDQU4gcmVhZHMgdGhlIHN0YXR1cyAqLworCXNhYV9jbGVhcmIoU0FBNzEzNF9HUElPX0dQTU9ERTMsIFNBQTcxMzRfR1BJT19HUFJFU0NBTik7CisJc2FhX3NldGIoU0FBNzEzNF9HUElPX0dQTU9ERTMsIFNBQTcxMzRfR1BJT19HUFJFU0NBTik7CisKKwlvbGRwdWxzZSA9IHNhYV9yZWFkbChTQUE3MTM0X0dQSU9fR1BTVEFUVVMwID4+IDIpICYgaXItPm1hc2tfa2V5ZG93bjsKKwlwdWxzZSA9IG9sZHB1bHNlOworCisJZG9fZ2V0dGltZW9mZGF5KCZ0dik7CisJaXItPmJhc2VfdGltZSA9IHR2OworCisJLyogRGVjb2RlIE5FQyBwdWxzZWNvZGUuIFRoaXMgY29kZSBjYW4gdGFrZSB1cCB0byA3Ni41IG1zIHRvIHJ1bi4KKwkgICBVbmZvcnR1bmF0ZWx5LCB1c2luZyBJUlEgdG8gZGVjb2RlIHB1bHNlIGRpZG4ndCB3b3JrLCBzaW5jZSBpdCB1c2VzCisJICAgYSBwdWxzZSB0cmFpbiBvZiAzOEtIei4gVGhpcyBtZWFucyBvbmUgcHVsc2Ugb24gZWFjaCA1MiB1cworCSAqLworCWRvIHsKKwkJLyogV2FpdCB1bnRpbCB0aGUgZW5kIG9mIHB1bHNlL3NwYWNlIG9yIDUgbXMgKi8KKwkJZm9yIChjb3VudCA9IDA7IGNvdW50IDwgNTAwOyBjb3VudCsrKSAgeworCQkJdWRlbGF5KDEwKTsKKwkJCS8qIHJpc2luZyBTQUE3MTM0X0dQSU9fR1BSRVNDQU4gcmVhZHMgdGhlIHN0YXR1cyAqLworCQkJc2FhX2NsZWFyYihTQUE3MTM0X0dQSU9fR1BNT0RFMywgU0FBNzEzNF9HUElPX0dQUkVTQ0FOKTsKKwkJCXNhYV9zZXRiKFNBQTcxMzRfR1BJT19HUE1PREUzLCBTQUE3MTM0X0dQSU9fR1BSRVNDQU4pOworCQkJcHVsc2UgPSBzYWFfcmVhZGwoU0FBNzEzNF9HUElPX0dQU1RBVFVTMCA+PiAyKQorCQkJCSYgaXItPm1hc2tfa2V5ZG93bjsKKwkJCWlmIChwdWxzZSAhPSBvbGRwdWxzZSkKKwkJCQlicmVhazsKKwkJfQorCisJCWRvX2dldHRpbWVvZmRheSgmdHYpOworCQlnYXAgPSAxMDAwMDAwICogKHR2LnR2X3NlYyAtIGlyLT5iYXNlX3RpbWUudHZfc2VjKSArCisJCQkJdHYudHZfdXNlYyAtIGlyLT5iYXNlX3RpbWUudHZfdXNlYzsKKworCQlpZiAoIXB1bHNlKSB7CisJCQkvKiBCaXQgMCBoYXMgNTYwIHVzLCB3aGlsZSBiaXQgMSBoYXMgMTEyMCB1cy4KKwkJCSAgIERvIHNvbWV0aGluZyBvbmx5IGlmIGJpdCA9PSAxCisJCQkgKi8KKwkJCWlmIChuZ2FwICYmIChnYXAgPiA1NjAgKyAyODApKSB7CisJCQkJdW5zaWduZWQgaW50IHNoaWZ0ID0gbmdhcCAtIDE7CisKKwkJCQkvKiBBZGRyZXNzIGZpcnN0LCB0aGVuIGNvbW1hbmQgKi8KKwkJCQlpZiAoc2hpZnQgPCA4KSB7CisJCQkJCXNoaWZ0ICs9IDg7CisJCQkJCWlyY29kZSB8PSAxIDw8IHNoaWZ0OworCQkJCX0gZWxzZSBpZiAoc2hpZnQgPCAxNikgeworCQkJCQlub3RfY29kZSB8PSAxIDw8IHNoaWZ0OworCQkJCX0gZWxzZSBpZiAoc2hpZnQgPCAyNCkgeworCQkJCQlzaGlmdCAtPSAxNjsKKwkJCQkJaXJjb2RlIHw9IDEgPDwgc2hpZnQ7CisJCQkJfSBlbHNlIHsKKwkJCQkJc2hpZnQgLT0gMjQ7CisJCQkJCW5vdF9jb2RlIHw9IDEgPDwgc2hpZnQ7CisJCQkJfQorCQkJfQorCQkJbmdhcCsrOworCQl9CisKKworCQlpci0+YmFzZV90aW1lID0gdHY7CisKKwkJLyogVElNRU9VVCAtIExvbmcgcHVsc2UgKi8KKwkJaWYgKGdhcCA+PSA1MDAwKQorCQkJYnJlYWs7CisJCW9sZHB1bHNlID0gcHVsc2U7CisJfSB3aGlsZSAobmdhcCA8IDMyKTsKKworCWlmIChuZ2FwID09IDMyKSB7CisJCS8qIEZJWE1FOiBzaG91bGQgY2hlY2sgaWYgbm90X2NvZGUgPT0gfmlyY29kZSAqLworCQlpci0+Y29kZSA9IGlyX2V4dHJhY3RfYml0cyhpcmNvZGUsIGlyLT5tYXNrX2tleWNvZGUpOworCisJCWRwcmludGsoInNjYW5jb2RlID0gMHglMDJ4IChjb2RlID0gMHglMDJ4LCBub3Rjb2RlPSAweCUwMngpXG4iLAorCQkJIGlyLT5jb2RlLCBpcmNvZGUsIG5vdF9jb2RlKTsKKworCQlpcl9pbnB1dF9rZXlkb3duKGlyLT5kZXYsICZpci0+aXIsIGlyLT5jb2RlLCBpci0+Y29kZSk7CisJfSBlbHNlCisJCWRwcmludGsoIlJlcGVhdCBsYXN0IGtleVxuIik7CisKKwkvKiBLZWVwIHJlcGVhdGluZyB0aGUgbGFzdCBrZXkgKi8KKwltb2RfdGltZXIoJmlyLT50aW1lcl9rZXl1cCwgamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoMTUwKSk7CisKKwlzYWFfc2V0bChTQUE3MTM0X0lSUTIsIFNBQTcxMzRfSVJRMl9JTlRFX0dQSU8xOCk7Cit9CisKK3N0YXRpYyBpbnQgc2FhNzEzNF9uZWNfaXJxKHN0cnVjdCBzYWE3MTM0X2RldiAqZGV2KQoreworCXN0cnVjdCBjYXJkX2lyICppciA9IGRldi0+cmVtb3RlOworCisJc2FhX2NsZWFybChTQUE3MTM0X0lSUTIsIFNBQTcxMzRfSVJRMl9JTlRFX0dQSU8xOCk7CisJdGFza2xldF9zY2hlZHVsZSgmaXItPnRsZXQpOworCisJcmV0dXJuIDE7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC10cy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtdHMuYwppbmRleCBlYWU3MmZkLi5lZjU1YTU5IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC10cy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LXRzLmMKQEAgLTY2LDExICs2NiwyOSBAQAogCXNhYTcxMzRfc2V0X2RtYWJpdHMoZGV2KTsKIAogCW1vZF90aW1lcigmZGV2LT50c19xLnRpbWVvdXQsIGppZmZpZXMrQlVGRkVSX1RJTUVPVVQpOworCisJaWYgKGRldi0+dHNfc3RhdGUgPT0gU0FBNzEzNF9UU19CVUZGX0RPTkUpIHsKKwkJLyogQ2xlYXIgVFMgY2FjaGUgKi8KKwkJZGV2LT5idWZmX2NudCA9IDA7CisJCXNhYV93cml0ZWIoU0FBNzEzNF9UU19TRVJJQUwxLCAweDAwKTsKKwkJc2FhX3dyaXRlYihTQUE3MTM0X1RTX1NFUklBTDEsIDB4MDMpOworCQlzYWFfd3JpdGViKFNBQTcxMzRfVFNfU0VSSUFMMSwgMHgwMCk7CisJCXNhYV93cml0ZWIoU0FBNzEzNF9UU19TRVJJQUwxLCAweDAxKTsKKworCQkvKiBUUyBjbG9jayBub24taW52ZXJ0ZWQgKi8KKwkJc2FhX3dyaXRlYihTQUE3MTM0X1RTX1NFUklBTDEsIDB4MDApOworCisJCS8qIFN0YXJ0IFRTIHN0cmVhbSAqLworCQlzYWFfd3JpdGViKFNBQTcxMzRfVFNfU0VSSUFMMCwgMHg0MCk7CisJCXNhYV93cml0ZWIoU0FBNzEzNF9UU19QQVJBTExFTCwgMHhFQyk7CisJCWRldi0+dHNfc3RhdGUgPSBTQUE3MTM0X1RTX1NUQVJURUQ7CisJfQorCiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgYnVmZmVyX3ByZXBhcmUoc3RydWN0IHZpZGVvYnVmX3F1ZXVlICpxLCBzdHJ1Y3QgdmlkZW9idWZfYnVmZmVyICp2YiwKLQkJCSAgZW51bSB2NGwyX2ZpZWxkIGZpZWxkKQorCQllbnVtIHY0bDJfZmllbGQgZmllbGQpCiB7CiAJc3RydWN0IHNhYTcxMzRfZGV2ICpkZXYgPSBxLT5wcml2X2RhdGE7CiAJc3RydWN0IHNhYTcxMzRfYnVmICpidWYgPSBjb250YWluZXJfb2YodmIsc3RydWN0IHNhYTcxMzRfYnVmLHZiKTsKQEAgLTExMCwxNiArMTI4LDIyIEBACiAJCQlnb3RvIG9vcHM7CiAJfQogCi0JLyogZG1hOiBzZXR1cCBjaGFubmVsIDUgKD0gVFMpICovCi0JY29udHJvbCA9IFNBQTcxMzRfUlNfQ09OVFJPTF9CVVJTVF8xNiB8Ci0JCSAgU0FBNzEzNF9SU19DT05UUk9MX01FIHwKLQkJICAoYnVmLT5wdC0+ZG1hID4+IDEyKTsKKwlkZXYtPmJ1ZmZfY250Kys7CiAKLQlzYWFfd3JpdGViKFNBQTcxMzRfVFNfRE1BMCwgKChsaW5lcy0xKSYweGZmKSk7Ci0Jc2FhX3dyaXRlYihTQUE3MTM0X1RTX0RNQTEsICgoKGxpbmVzLTEpPj44KSYweGZmKSk7Ci0Jc2FhX3dyaXRlYihTQUE3MTM0X1RTX0RNQTIsICgoKChsaW5lcy0xKT4+MTYpJjB4M2YpIHwgMHgwMCkpOyAvKiBUU05PUElUPTAsIFRTQ09MQVA9MCAqLwotCXNhYV93cml0ZWwoU0FBNzEzNF9SU19QSVRDSCg1KSxUU19QQUNLRVRfU0laRSk7Ci0Jc2FhX3dyaXRlbChTQUE3MTM0X1JTX0NPTlRST0woNSksY29udHJvbCk7CisJaWYgKGRldi0+YnVmZl9jbnQgPT0gZGV2LT50cy5ucl9idWZzKSB7CisJCWRldi0+dHNfc3RhdGUgPSBTQUE3MTM0X1RTX0JVRkZfRE9ORTsKKwkJLyogZG1hOiBzZXR1cCBjaGFubmVsIDUgKD0gVFMpICovCisJCWNvbnRyb2wgPSBTQUE3MTM0X1JTX0NPTlRST0xfQlVSU1RfMTYgfAorCQkJU0FBNzEzNF9SU19DT05UUk9MX01FIHwKKwkJCShidWYtPnB0LT5kbWEgPj4gMTIpOworCisJCXNhYV93cml0ZWIoU0FBNzEzNF9UU19ETUEwLCAobGluZXMgLSAxKSAmIDB4ZmYpOworCQlzYWFfd3JpdGViKFNBQTcxMzRfVFNfRE1BMSwgKChsaW5lcyAtIDEpID4+IDgpICYgMHhmZik7CisJCS8qIFRTTk9QSVQ9MCwgVFNDT0xBUD0wICovCisJCXNhYV93cml0ZWIoU0FBNzEzNF9UU19ETUEyLCAoKChsaW5lcyAtIDEpID4+IDE2KSAmIDB4M2YpIHwgMHgwMCk7CisJCXNhYV93cml0ZWwoU0FBNzEzNF9SU19QSVRDSCg1KSwgVFNfUEFDS0VUX1NJWkUpOworCQlzYWFfd3JpdGVsKFNBQTcxMzRfUlNfQ09OVFJPTCg1KSwgY29udHJvbCk7CisJfQogCiAJYnVmLT52Yi5zdGF0ZSA9IFZJREVPQlVGX1BSRVBBUkVEOwogCWJ1Zi0+YWN0aXZhdGUgPSBidWZmZXJfYWN0aXZhdGU7CkBAIC0xNDAsNiArMTY0LDggQEAKIAlpZiAoMCA9PSAqY291bnQpCiAJCSpjb3VudCA9IGRldi0+dHMubnJfYnVmczsKIAkqY291bnQgPSBzYWE3MTM0X2J1ZmZlcl9jb3VudCgqc2l6ZSwqY291bnQpOworCWRldi0+YnVmZl9jbnQgPSAwOworCWRldi0+dHNfc3RhdGUgPSBTQUE3MTM0X1RTX1NUT1BQRUQ7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTE1NCw3ICsxODAsMTMgQEAKIHN0YXRpYyB2b2lkIGJ1ZmZlcl9yZWxlYXNlKHN0cnVjdCB2aWRlb2J1Zl9xdWV1ZSAqcSwgc3RydWN0IHZpZGVvYnVmX2J1ZmZlciAqdmIpCiB7CiAJc3RydWN0IHNhYTcxMzRfYnVmICpidWYgPSBjb250YWluZXJfb2YodmIsc3RydWN0IHNhYTcxMzRfYnVmLHZiKTsKKwlzdHJ1Y3Qgc2FhNzEzNF9kZXYgKmRldiA9IHEtPnByaXZfZGF0YTsKIAorCWlmIChkZXYtPnRzX3N0YXRlID09IFNBQTcxMzRfVFNfU1RBUlRFRCkgeworCQkvKiBTdG9wIFRTIHRyYW5zcG9ydCAqLworCQlzYWFfd3JpdGViKFNBQTcxMzRfVFNfUEFSQUxMRUwsIDB4NmMpOworCQlkZXYtPnRzX3N0YXRlID0gU0FBNzEzNF9UU19TVE9QUEVEOworCX0KIAlzYWE3MTM0X2RtYV9mcmVlKHEsYnVmKTsKIH0KIApAQCAtMTgyLDcgKzIxNCw3IEBACiAJLyogZGVhY3RpdmF0ZSBUUyBzb2Z0cmVzZXQgKi8KIAlzYWFfd3JpdGViKFNBQTcxMzRfVFNfU0VSSUFMMSwgMHgwMCk7CiAJLyogVFNTT1AgaGlnaCBhY3RpdmUsIFRTVkFMIGhpZ2ggYWN0aXZlLCBUU0xPQ0sgaWdub3JlZCAqLwotCXNhYV93cml0ZWIoU0FBNzEzNF9UU19QQVJBTExFTCwgMHhlYyk7CisJc2FhX3dyaXRlYihTQUE3MTM0X1RTX1BBUkFMTEVMLCAweDZjKTsKIAlzYWFfd3JpdGViKFNBQTcxMzRfVFNfUEFSQUxMRUxfU0VSSUFMLCAoVFNfUEFDS0VUX1NJWkUtMSkpOwogCXNhYV93cml0ZWIoU0FBNzEzNF9UU19ETUEwLCAoKGRldi0+dHMubnJfcGFja2V0cy0xKSYweGZmKSk7CiAJc2FhX3dyaXRlYihTQUE3MTM0X1RTX0RNQTEsICgoKGRldi0+dHMubnJfcGFja2V0cy0xKT4+OCkmMHhmZikpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtdmlkZW8uYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LXZpZGVvLmMKaW5kZXggNjhjMjY4OS4uMDJiYjY3NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtdmlkZW8uYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC12aWRlby5jCkBAIC02MjgsNiArNjI4LDkgQEAKIAogCWlmIChjYXJkX2luKGRldiwgZGV2LT5jdGxfaW5wdXQpLnR2KQogCQlzYWE3MTM0X2kyY19jYWxsX2NsaWVudHMoZGV2LCBWSURJT0NfU19TVEQsICZkZXYtPnR2bm9ybS0+aWQpOworCS8qIFNldCB0aGUgY29ycmVjdCBub3JtIGZvciB0aGUgc2FhNjc1MmhzLiBUaGlzIGZ1bmN0aW9uCisJICAgZG9lcyBub3RoaW5nIGlmIHRoZXJlIGlzIG5vIHNhYTY3NTJocy4gKi8KKwlzYWE3MTM0X2kyY19jYWxsX3NhYTY3NTIoZGV2LCBWSURJT0NfU19TVEQsICZkZXYtPnR2bm9ybS0+aWQpOwogfQogCiBzdGF0aWMgdm9pZCBzZXRfaF9wcmVzY2FsZShzdHJ1Y3Qgc2FhNzEzNF9kZXYgKmRldiwgaW50IHRhc2ssIGludCBwcmVzY2FsZSkKQEAgLTEzMzAsNiArMTMzMyw4IEBACiAJc3RydWN0IHNhYTcxMzRfZmggKmZoOwogCWVudW0gdjRsMl9idWZfdHlwZSB0eXBlID0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOwogCWludCByYWRpbyA9IDA7CisKKwlsb2NrX2tlcm5lbCgpOwogCWxpc3RfZm9yX2VhY2hfZW50cnkoZGV2LCAmc2FhNzEzNF9kZXZsaXN0LCBkZXZsaXN0KSB7CiAJCWlmIChkZXYtPnZpZGVvX2RldiAmJiAoZGV2LT52aWRlb19kZXYtPm1pbm9yID09IG1pbm9yKSkKIAkJCWdvdG8gZm91bmQ7CkBAIC0xMzQyLDYgKzEzNDcsNyBAQAogCQkJZ290byBmb3VuZDsKIAkJfQogCX0KKwl1bmxvY2tfa2VybmVsKCk7CiAJcmV0dXJuIC1FTk9ERVY7CiAgZm91bmQ6CiAKQEAgLTEzNTAsOCArMTM1NiwxMCBAQAogCiAJLyogYWxsb2NhdGUgKyBpbml0aWFsaXplIHBlciBmaWxlaGFuZGxlIGRhdGEgKi8KIAlmaCA9IGt6YWxsb2Moc2l6ZW9mKCpmaCksR0ZQX0tFUk5FTCk7Ci0JaWYgKE5VTEwgPT0gZmgpCisJaWYgKE5VTEwgPT0gZmgpIHsKKwkJdW5sb2NrX2tlcm5lbCgpOwogCQlyZXR1cm4gLUVOT01FTTsKKwl9CiAJZmlsZS0+cHJpdmF0ZV9kYXRhID0gZmg7CiAJZmgtPmRldiAgICAgID0gZGV2OwogCWZoLT5yYWRpbyAgICA9IHJhZGlvOwpAQCAtMTM4NCw2ICsxMzkyLDcgQEAKIAkJLyogc3dpdGNoIHRvIHZpZGVvL3ZiaSBtb2RlICovCiAJCXZpZGVvX211eChkZXYsZGV2LT5jdGxfaW5wdXQpOwogCX0KKwl1bmxvY2tfa2VybmVsKCk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTE3OTAsMTggKzE3OTksMjUgQEAKIAkJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgc2FhNzEzNF9zX3N0ZChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwgdjRsMl9zdGRfaWQgKmlkKQoraW50IHNhYTcxMzRfc19zdGRfaW50ZXJuYWwoc3RydWN0IHNhYTcxMzRfZGV2ICpkZXYsIHN0cnVjdCBzYWE3MTM0X2ZoICpmaCwgdjRsMl9zdGRfaWQgKmlkKQogewotCXN0cnVjdCBzYWE3MTM0X2ZoICpmaCA9IHByaXY7Ci0Jc3RydWN0IHNhYTcxMzRfZGV2ICpkZXYgPSBmaC0+ZGV2OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdW5zaWduZWQgaW50IGk7CiAJdjRsMl9zdGRfaWQgZml4dXA7CiAJaW50IGVycjsKIAotCWVyciA9IHY0bDJfcHJpb19jaGVjaygmZGV2LT5wcmlvLCAmZmgtPnByaW8pOwotCWlmICgwICE9IGVycikKLQkJcmV0dXJuIGVycjsKKwkvKiBXaGVuIGNhbGxlZCBmcm9tIHRoZSBlbXByZXNzIGNvZGUgZmggPT0gTlVMTC4KKwkgICBUaGF0IG5lZWRzIHRvIGJlIGZpeGVkIHNvbWVob3csIGJ1dCBmb3Igbm93IHRoaXMgaXMKKwkgICBnb29kIGVub3VnaC4gKi8KKwlpZiAoZmgpIHsKKwkJZXJyID0gdjRsMl9wcmlvX2NoZWNrKCZkZXYtPnByaW8sICZmaC0+cHJpbyk7CisJCWlmICgwICE9IGVycikKKwkJCXJldHVybiBlcnI7CisJfSBlbHNlIGlmIChyZXNfbG9ja2VkKGRldiwgUkVTT1VSQ0VfT1ZFUkxBWSkpIHsKKwkJLyogRG9uJ3QgY2hhbmdlIHRoZSBzdGQgZnJvbSB0aGUgbXBlZyBkZXZpY2UKKwkJICAgaWYgb3ZlcmxheSBpcyBhY3RpdmUuICovCisJCXJldHVybiAtRUJVU1k7CisJfQogCiAJZm9yIChpID0gMDsgaSA8IFRWTk9STVM7IGkrKykKIAkJaWYgKCppZCA9PSB0dm5vcm1zW2ldLmlkKQpAQCAtMTgzNCw3ICsxODUwLDcgQEAKIAkqaWQgPSB0dm5vcm1zW2ldLmlkOwogCiAJbXV0ZXhfbG9jaygmZGV2LT5sb2NrKTsKLQlpZiAocmVzX2NoZWNrKGZoLCBSRVNPVVJDRV9PVkVSTEFZKSkgeworCWlmIChmaCAmJiByZXNfY2hlY2soZmgsIFJFU09VUkNFX09WRVJMQVkpKSB7CiAJCXNwaW5fbG9ja19pcnFzYXZlKCZkZXYtPnNsb2NrLCBmbGFncyk7CiAJCXN0b3BfcHJldmlldyhkZXYsIGZoKTsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5zbG9jaywgZmxhZ3MpOwpAQCAtMTg1MSw2ICsxODY3LDIzIEBACiAJbXV0ZXhfdW5sb2NrKCZkZXYtPmxvY2spOwogCXJldHVybiAwOwogfQorRVhQT1JUX1NZTUJPTF9HUEwoc2FhNzEzNF9zX3N0ZF9pbnRlcm5hbCk7CisKK3N0YXRpYyBpbnQgc2FhNzEzNF9zX3N0ZChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwgdjRsMl9zdGRfaWQgKmlkKQoreworCXN0cnVjdCBzYWE3MTM0X2ZoICpmaCA9IHByaXY7CisKKwlyZXR1cm4gc2FhNzEzNF9zX3N0ZF9pbnRlcm5hbChmaC0+ZGV2LCBmaCwgaWQpOworfQorCitzdGF0aWMgaW50IHNhYTcxMzRfZ19zdGQoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsIHY0bDJfc3RkX2lkICppZCkKK3sKKwlzdHJ1Y3Qgc2FhNzEzNF9maCAqZmggPSBwcml2OworCXN0cnVjdCBzYWE3MTM0X2RldiAqZGV2ID0gZmgtPmRldjsKKworCSppZCA9IGRldi0+dHZub3JtLT5pZDsKKwlyZXR1cm4gMDsKK30KIAogc3RhdGljIGludCBzYWE3MTM0X2Nyb3BjYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCQkJCXN0cnVjdCB2NGwyX2Nyb3BjYXAgKmNhcCkKQEAgLTIwNzcsMTggKzIxMTAsNiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHNhYTcxMzRfZW51bV9mbXRfdmJpX2NhcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAgKnByaXYsCi0JCQkJCXN0cnVjdCB2NGwyX2ZtdGRlc2MgKmYpCi17Ci0JaWYgKDAgIT0gZi0+aW5kZXgpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JZi0+cGl4ZWxmb3JtYXQgPSBWNEwyX1BJWF9GTVRfR1JFWTsKLQlzdHJjcHkoZi0+ZGVzY3JpcHRpb24sICJ2YmkgZGF0YSIpOwotCi0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyBpbnQgc2FhNzEzNF9nX2ZidWYoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmYsCiAJCQkJc3RydWN0IHY0bDJfZnJhbWVidWZmZXIgKmZiKQogewpAQCAtMjM3OSw3ICsyNDAwLDYgQEAKIAkudmlkaW9jX2dfZm10X3ZpZF9vdmVybGF5CT0gc2FhNzEzNF9nX2ZtdF92aWRfb3ZlcmxheSwKIAkudmlkaW9jX3RyeV9mbXRfdmlkX292ZXJsYXkJPSBzYWE3MTM0X3RyeV9mbXRfdmlkX292ZXJsYXksCiAJLnZpZGlvY19zX2ZtdF92aWRfb3ZlcmxheQk9IHNhYTcxMzRfc19mbXRfdmlkX292ZXJsYXksCi0JLnZpZGlvY19lbnVtX2ZtdF92YmlfY2FwCT0gc2FhNzEzNF9lbnVtX2ZtdF92YmlfY2FwLAogCS52aWRpb2NfZ19mbXRfdmJpX2NhcAkJPSBzYWE3MTM0X3RyeV9nZXRfc2V0X2ZtdF92YmlfY2FwLAogCS52aWRpb2NfdHJ5X2ZtdF92YmlfY2FwCQk9IHNhYTcxMzRfdHJ5X2dldF9zZXRfZm10X3ZiaV9jYXAsCiAJLnZpZGlvY19zX2ZtdF92YmlfY2FwCQk9IHNhYTcxMzRfdHJ5X2dldF9zZXRfZm10X3ZiaV9jYXAsCkBAIC0yMzkxLDYgKzI0MTEsNyBAQAogCS52aWRpb2NfcWJ1ZgkJCT0gc2FhNzEzNF9xYnVmLAogCS52aWRpb2NfZHFidWYJCQk9IHNhYTcxMzRfZHFidWYsCiAJLnZpZGlvY19zX3N0ZAkJCT0gc2FhNzEzNF9zX3N0ZCwKKwkudmlkaW9jX2dfc3RkCQkJPSBzYWE3MTM0X2dfc3RkLAogCS52aWRpb2NfZW51bV9pbnB1dAkJPSBzYWE3MTM0X2VudW1faW5wdXQsCiAJLnZpZGlvY19nX2lucHV0CQkJPSBzYWE3MTM0X2dfaW5wdXQsCiAJLnZpZGlvY19zX2lucHV0CQkJPSBzYWE3MTM0X3NfaW5wdXQsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQuaAppbmRleCBhMDg4NGY2Li4yNDA5NmQ2IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LmgKQEAgLTI2OSw2ICsyNjksMTIgQEAKICNkZWZpbmUgU0FBNzEzNF9CT0FSRF9CRUhPTERfTTZfRVhUUkEgICAgMTQ0CiAjZGVmaW5lIFNBQTcxMzRfQk9BUkRfQVZFUk1FRElBX00xMDMgICAgMTQ1CiAjZGVmaW5lIFNBQTcxMzRfQk9BUkRfQVNVU1RlS19QNzEzMV9BTkFMT0cgMTQ2CisjZGVmaW5lIFNBQTcxMzRfQk9BUkRfQVNVU1RlS19USUdFUl8zSU4xICAgMTQ3CisjZGVmaW5lIFNBQTcxMzRfQk9BUkRfRU5DT1JFX0VOTFRWX0ZNNTMgMTQ4CisjZGVmaW5lIFNBQTcxMzRfQk9BUkRfQVZFUk1FRElBX00xMzVBICAgIDE0OQorI2RlZmluZSBTQUE3MTM0X0JPQVJEX1JFQUxfQU5HRUxfMjIwICAgICAxNTAKKyNkZWZpbmUgU0FBNzEzNF9CT0FSRF9BRFNfSU5TVEFOVF9IRFRWX1BDSSAgMTUxCisjZGVmaW5lIFNBQTcxMzRfQk9BUkRfQVNVU1RlS19USUdFUiAgICAgICAgIDE1MgogCiAjZGVmaW5lIFNBQTcxMzRfTUFYQk9BUkRTIDgKICNkZWZpbmUgU0FBNzEzNF9JTlBVVF9NQVggOApAQCAtNDYyLDYgKzQ2OCwxMiBAQAogCXZvaWQgICAgICAgICAgICAgICAgICAgICAgICgqc2lnbmFsX2NoYW5nZSkoc3RydWN0IHNhYTcxMzRfZGV2ICpkZXYpOwogfTsKIAorZW51bSBzYWE3MTM0X3RzX3N0YXR1cyB7CisJU0FBNzEzNF9UU19TVE9QUEVELAorCVNBQTcxMzRfVFNfQlVGRl9ET05FLAorCVNBQTcxMzRfVFNfU1RBUlRFRCwKK307CisKIC8qIGdsb2JhbCBkZXZpY2Ugc3RhdHVzICovCiBzdHJ1Y3Qgc2FhNzEzNF9kZXYgewogCXN0cnVjdCBsaXN0X2hlYWQgICAgICAgICAgIGRldmxpc3Q7CkBAIC01NTUsNiArNTY3LDggQEAKIAkvKiBTQUE3MTM0X01QRUdfKiAqLwogCXN0cnVjdCBzYWE3MTM0X3RzICAgICAgICAgIHRzOwogCXN0cnVjdCBzYWE3MTM0X2RtYXF1ZXVlICAgIHRzX3E7CisJZW51bSBzYWE3MTM0X3RzX3N0YXR1cyAJICAgdHNfc3RhdGU7CisJdW5zaWduZWQgaW50IAkJICAgYnVmZl9jbnQ7CiAJc3RydWN0IHNhYTcxMzRfbXBlZ19vcHMgICAgKm1vcHM7CiAJc3RydWN0IGkyY19jbGllbnQgCSAgICptcGVnX2kyY19jbGllbnQ7CiAKQEAgLTU2Nyw3ICs1ODEsNyBAQAogCiAjaWYgZGVmaW5lZChDT05GSUdfVklERU9fU0FBNzEzNF9EVkIpIHx8IGRlZmluZWQoQ09ORklHX1ZJREVPX1NBQTcxMzRfRFZCX01PRFVMRSkKIAkvKiBTQUE3MTM0X01QRUdfRFZCIG9ubHkgKi8KLQlzdHJ1Y3QgdmlkZW9idWZfZHZiICAgICAgICBkdmI7CisJc3RydWN0IHZpZGVvYnVmX2R2Yl9mcm9udGVuZHMgZnJvbnRlbmRzOwogCWludCAoKm9yaWdpbmFsX2RlbW9kX3NsZWVwKShzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSk7CiAJaW50ICgqb3JpZ2luYWxfc2V0X3ZvbHRhZ2UpKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCBmZV9zZWNfdm9sdGFnZV90IHZvbHRhZ2UpOwogCWludCAoKm9yaWdpbmFsX3NldF9oaWdoX3ZvbHRhZ2UpKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCBsb25nIGFyZyk7CkBAIC02NDQsNyArNjU4LDcgQEAKIAogZXh0ZXJuIGludCBzYWE3MTM0X2JvYXJkX2luaXQxKHN0cnVjdCBzYWE3MTM0X2RldiAqZGV2KTsKIGV4dGVybiBpbnQgc2FhNzEzNF9ib2FyZF9pbml0MihzdHJ1Y3Qgc2FhNzEzNF9kZXYgKmRldik7Ci1pbnQgc2FhNzEzNF90dW5lcl9jYWxsYmFjayh2b2lkICpwcml2LCBpbnQgY29tbWFuZCwgaW50IGFyZyk7CitpbnQgc2FhNzEzNF90dW5lcl9jYWxsYmFjayh2b2lkICpwcml2LCBpbnQgY29tcG9uZW50LCBpbnQgY29tbWFuZCwgaW50IGFyZyk7CiAKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KQEAgLTY1NCw2ICs2NjgsOCBAQAogaW50IHNhYTcxMzRfaTJjX3VucmVnaXN0ZXIoc3RydWN0IHNhYTcxMzRfZGV2ICpkZXYpOwogdm9pZCBzYWE3MTM0X2kyY19jYWxsX2NsaWVudHMoc3RydWN0IHNhYTcxMzRfZGV2ICpkZXYsCiAJCQkgICAgICB1bnNpZ25lZCBpbnQgY21kLCB2b2lkICphcmcpOworaW50IHNhYTcxMzRfaTJjX2NhbGxfc2FhNjc1MihzdHJ1Y3Qgc2FhNzEzNF9kZXYgKmRldiwKKwkJCSAgICAgIHVuc2lnbmVkIGludCBjbWQsIHZvaWQgKmFyZyk7CiAKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KQEAgLTY2Niw2ICs2ODIsNyBAQAogaW50IHNhYTcxMzRfc19jdHJsX2ludGVybmFsKHN0cnVjdCBzYWE3MTM0X2RldiAqZGV2LCAgc3RydWN0IHNhYTcxMzRfZmggKmZoLCBzdHJ1Y3QgdjRsMl9jb250cm9sICpjKTsKIGludCBzYWE3MTM0X2dfY3RybF9pbnRlcm5hbChzdHJ1Y3Qgc2FhNzEzNF9kZXYgKmRldiwgIHN0cnVjdCBzYWE3MTM0X2ZoICpmaCwgc3RydWN0IHY0bDJfY29udHJvbCAqYyk7CiBpbnQgc2FhNzEzNF9xdWVyeWN0cmwoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsIHN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCAqYyk7CitpbnQgc2FhNzEzNF9zX3N0ZF9pbnRlcm5hbChzdHJ1Y3Qgc2FhNzEzNF9kZXYgKmRldiwgIHN0cnVjdCBzYWE3MTM0X2ZoICpmaCwgdjRsMl9zdGRfaWQgKmlkKTsKIAogaW50IHNhYTcxMzRfdmlkZW9wb3J0X2luaXQoc3RydWN0IHNhYTcxMzRfZGV2ICpkZXYpOwogdm9pZCBzYWE3MTM0X3NldF90dm5vcm1faHcoc3RydWN0IHNhYTcxMzRfZGV2ICpkZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTg1LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxODUuYwppbmRleCAwMmZkYTRlLi42ZGViYjY1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxODUuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxODUuYwpAQCAtMjUsNDMgKzI1LDI1IEBACiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+Ci0jaW5jbHVkZSA8bGludXgvZnMuaD4KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9tYWpvci5oPgotI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNpbmNsdWRlIDxsaW51eC9tbS5oPgotI2luY2x1ZGUgPGxpbnV4L3NpZ25hbC5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8bGludXgvaTJjLmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+Ci0jaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KLSNpbmNsdWRlIDxhc20vcGFnZS5oPgorI2luY2x1ZGUgPGxpbnV4L2lvY3RsLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KLQorI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy1pZC5oPgogI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Lmg+CiAjaW5jbHVkZSA8bGludXgvdmlkZW9fZW5jb2Rlci5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItY29tbW9uLmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1pMmMtZHJ2LWxlZ2FjeS5oPgogCiBNT0RVTEVfREVTQ1JJUFRJT04oIlBoaWxpcHMgU0FBNzE4NSB2aWRlbyBlbmNvZGVyIGRyaXZlciIpOwogTU9EVUxFX0FVVEhPUigiRGF2ZSBQZXJrcyIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogCiAKLSNkZWZpbmUgSTJDX05BTUUocykgKHMpLT5uYW1lCi0KLQogc3RhdGljIGludCBkZWJ1ZzsKIG1vZHVsZV9wYXJhbShkZWJ1ZywgaW50LCAwKTsKIE1PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJEZWJ1ZyBsZXZlbCAoMC0xKSIpOwogCi0jZGVmaW5lIGRwcmludGsobnVtLCBmb3JtYXQsIGFyZ3MuLi4pIFwKLQlkbyB7IFwKLQkJaWYgKGRlYnVnID49IG51bSkgXAotCQkJcHJpbnRrKGZvcm1hdCwgIyNhcmdzKTsgXAotCX0gd2hpbGUgKDApCi0KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKIHN0cnVjdCBzYWE3MTg1IHsKQEAgLTc1LDMyICs1NywyNCBAQAogCWludCBzYXQ7CiB9OwogCi0jZGVmaW5lICAgSTJDX1NBQTcxODUgICAgICAgIDB4ODgKLQogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAotc3RhdGljIGlubGluZSBpbnQKLXNhYTcxODVfcmVhZCAoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKK3N0YXRpYyBpbmxpbmUgaW50IHNhYTcxODVfcmVhZChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQogewogCXJldHVybiBpMmNfc21idXNfcmVhZF9ieXRlKGNsaWVudCk7CiB9CiAKLXN0YXRpYyBpbnQKLXNhYTcxODVfd3JpdGUgKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCi0JICAgICAgIHU4ICAgICAgICAgICAgICAgICByZWcsCi0JICAgICAgIHU4ICAgICAgICAgICAgICAgICB2YWx1ZSkKK3N0YXRpYyBpbnQgc2FhNzE4NV93cml0ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1OCByZWcsIHU4IHZhbHVlKQogewogCXN0cnVjdCBzYWE3MTg1ICplbmNvZGVyID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CiAKLQlkcHJpbnRrKDEsIEtFUk5fREVCVUcgIlNBQTcxODU6ICUwMnggc2V0IHRvICUwMnhcbiIsIHJlZywgdmFsdWUpOworCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgIiUwMnggc2V0IHRvICUwMnhcbiIsIHJlZywgdmFsdWUpOwogCWVuY29kZXItPnJlZ1tyZWddID0gdmFsdWU7CiAJcmV0dXJuIGkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCByZWcsIHZhbHVlKTsKIH0KIAotc3RhdGljIGludAotc2FhNzE4NV93cml0ZV9ibG9jayAoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKLQkJICAgICBjb25zdCB1OCAgICAgICAgICAqZGF0YSwKLQkJICAgICB1bnNpZ25lZCBpbnQgICAgICAgbGVuKQorc3RhdGljIGludCBzYWE3MTg1X3dyaXRlX2Jsb2NrKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCisJCWNvbnN0IHU4ICpkYXRhLCB1bnNpZ25lZCBpbnQgbGVuKQogewogCWludCByZXQgPSAtMTsKIAl1OCByZWc7CkBAIC0xMjEsMTggKzk1LDE3IEBACiAJCQkJICAgIGVuY29kZXItPnJlZ1tyZWcrK10gPSBkYXRhWzFdOwogCQkJCWxlbiAtPSAyOwogCQkJCWRhdGEgKz0gMjsKLQkJCX0gd2hpbGUgKGxlbiA+PSAyICYmIGRhdGFbMF0gPT0gcmVnICYmCi0JCQkJIGJsb2NrX2xlbiA8IDMyKTsKLQkJCWlmICgocmV0ID0gaTJjX21hc3Rlcl9zZW5kKGNsaWVudCwgYmxvY2tfZGF0YSwKLQkJCQkJCSAgIGJsb2NrX2xlbikpIDwgMCkKKwkJCX0gd2hpbGUgKGxlbiA+PSAyICYmIGRhdGFbMF0gPT0gcmVnICYmIGJsb2NrX2xlbiA8IDMyKTsKKwkJCXJldCA9IGkyY19tYXN0ZXJfc2VuZChjbGllbnQsIGJsb2NrX2RhdGEsIGJsb2NrX2xlbik7CisJCQlpZiAocmV0IDwgMCkKIAkJCQlicmVhazsKIAkJfQogCX0gZWxzZSB7CiAJCS8qIGRvIHNvbWUgc2xvdyBJMkMgZW11bGF0aW9uIGtpbmQgb2YgdGhpbmcgKi8KIAkJd2hpbGUgKGxlbiA+PSAyKSB7CiAJCQlyZWcgPSAqZGF0YSsrOwotCQkJaWYgKChyZXQgPSBzYWE3MTg1X3dyaXRlKGNsaWVudCwgcmVnLAotCQkJCQkJICpkYXRhKyspKSA8IDApCisJCQlyZXQgPSBzYWE3MTg1X3dyaXRlKGNsaWVudCwgcmVnLCAqZGF0YSsrKTsKKwkJCWlmIChyZXQgPCAwKQogCQkJCWJyZWFrOwogCQkJbGVuIC09IDI7CiAJCX0KQEAgLTI0MCwxNSArMjEzLDExIEBACiAJMHg2NiwgMHgyMSwJCS8qIEZTQzMgKi8KIH07CiAKLXN0YXRpYyBpbnQKLXNhYTcxODVfY29tbWFuZCAoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKLQkJIHVuc2lnbmVkIGludCAgICAgICBjbWQsCi0JCSB2b2lkICAgICAgICAgICAgICAqYXJnKQorc3RhdGljIGludCBzYWE3MTg1X2NvbW1hbmQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdW5zaWduZWQgY21kLCB2b2lkICphcmcpCiB7CiAJc3RydWN0IHNhYTcxODUgKmVuY29kZXIgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKIAogCXN3aXRjaCAoY21kKSB7Ci0KIAljYXNlIDA6CiAJCXNhYTcxODVfd3JpdGVfYmxvY2soY2xpZW50LCBpbml0X2NvbW1vbiwKIAkJCQkgICAgc2l6ZW9mKGluaXRfY29tbW9uKSk7CkBAIC0yNjQsNyArMjMzLDYgQEAKIAkJCQkJICAgIHNpemVvZihpbml0X3BhbCkpOwogCQkJYnJlYWs7CiAJCX0KLQogCQlicmVhazsKIAogCWNhc2UgRU5DT0RFUl9HRVRfQ0FQQUJJTElUSUVTOgpAQCAtMjc2LDggKzI0NCw4IEBACiAJCSAgICBWSURFT19FTkNPREVSX1NFQ0FNIHwgVklERU9fRU5DT0RFUl9DQ0lSOwogCQljYXAtPmlucHV0cyA9IDE7CiAJCWNhcC0+b3V0cHV0cyA9IDE7Ci0JfQogCQlicmVhazsKKwl9CiAKIAljYXNlIEVOQ09ERVJfU0VUX05PUk06CiAJewpAQCAtMjg2LDcgKzI1NCw2IEBACiAJCS8vc2FhNzE4NV93cml0ZV9ibG9jayhjbGllbnQsIGluaXRfY29tbW9uLCBzaXplb2YoaW5pdF9jb21tb24pKTsKIAogCQlzd2l0Y2ggKCppYXJnKSB7Ci0KIAkJY2FzZSBWSURFT19NT0RFX05UU0M6CiAJCQlzYWE3MTg1X3dyaXRlX2Jsb2NrKGNsaWVudCwgaW5pdF9udHNjLAogCQkJCQkgICAgc2l6ZW9mKGluaXRfbnRzYykpOwpAQCAtMzAwLDExICsyNjcsMTAgQEAKIAkJY2FzZSBWSURFT19NT0RFX1NFQ0FNOgogCQlkZWZhdWx0OgogCQkJcmV0dXJuIC1FSU5WQUw7Ci0KIAkJfQogCQllbmNvZGVyLT5ub3JtID0gKmlhcmc7Ci0JfQogCQlicmVhazsKKwl9CiAKIAljYXNlIEVOQ09ERVJfU0VUX0lOUFVUOgogCXsKQEAgLTMxNCw3ICsyODAsNiBAQAogCQkgKmlhcmcgPSAxOiBpbnB1dCBpcyBmcm9tIFpSMzYwNjAgKi8KIAogCQlzd2l0Y2ggKCppYXJnKSB7Ci0KIAkJY2FzZSAwOgogCQkJLyogU3dpdGNoIFJUQ0UgdG8gMSAqLwogCQkJc2FhNzE4NV93cml0ZShjbGllbnQsIDB4NjEsCkBAIC0zMzIsMjEgKzI5NywxOSBAQAogCiAJCWRlZmF1bHQ6CiAJCQlyZXR1cm4gLUVJTlZBTDsKLQogCQl9Ci0JfQogCQlicmVhazsKKwl9CiAKIAljYXNlIEVOQ09ERVJfU0VUX09VVFBVVDoKIAl7CiAJCWludCAqaWFyZyA9IGFyZzsKIAogCQkvKiBub3QgbXVjaCBjaG9pY2Ugb2Ygb3V0cHV0cyAqLwotCQlpZiAoKmlhcmcgIT0gMCkgeworCQlpZiAoKmlhcmcgIT0gMCkKIAkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0JfQogCQlicmVhazsKKwl9CiAKIAljYXNlIEVOQ09ERVJfRU5BQkxFX09VVFBVVDoKIAl7CkBAIC0zNTYsOCArMzE5LDggQEAKIAkJc2FhNzE4NV93cml0ZShjbGllbnQsIDB4NjEsCiAJCQkgICAgICAoZW5jb2Rlci0+cmVnWzB4NjFdICYgMHhiZikgfAogCQkJICAgICAgKGVuY29kZXItPmVuYWJsZSA/IDB4MDAgOiAweDQwKSk7Ci0JfQogCQlicmVhazsKKwl9CiAKIAlkZWZhdWx0OgogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTM2OCwxMzggKzMzMSw2NSBAQAogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCi0vKgotICogR2VuZXJpYyBpMmMgcHJvYmUKLSAqIGNvbmNlcm5pbmcgdGhlIGFkZHJlc3NlczogaTJjIHdhbnRzIDcgYml0ICh3aXRob3V0IHRoZSByL3cgYml0KSwgc28gJz4+MScKLSAqLwotc3RhdGljIHVuc2lnbmVkIHNob3J0IG5vcm1hbF9pMmNbXSA9IHsgSTJDX1NBQTcxODUgPj4gMSwgSTJDX0NMSUVOVF9FTkQgfTsKK3N0YXRpYyB1bnNpZ25lZCBzaG9ydCBub3JtYWxfaTJjW10gPSB7IDB4ODggPj4gMSwgSTJDX0NMSUVOVF9FTkQgfTsKIAotc3RhdGljIHVuc2lnbmVkIHNob3J0IGlnbm9yZSA9IEkyQ19DTElFTlRfRU5EOworSTJDX0NMSUVOVF9JTlNNT0Q7CiAKLXN0YXRpYyBzdHJ1Y3QgaTJjX2NsaWVudF9hZGRyZXNzX2RhdGEgYWRkcl9kYXRhID0gewotCS5ub3JtYWxfaTJjCQk9IG5vcm1hbF9pMmMsCi0JLnByb2JlCQkJPSAmaWdub3JlLAotCS5pZ25vcmUJCQk9ICZpZ25vcmUsCi19OwotCi1zdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgaTJjX2RyaXZlcl9zYWE3MTg1OwotCi1zdGF0aWMgaW50Ci1zYWE3MTg1X2RldGVjdF9jbGllbnQgKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlciwKLQkJICAgICAgIGludCAgICAgICAgICAgICAgICAgYWRkcmVzcywKLQkJICAgICAgIGludCAgICAgICAgICAgICAgICAga2luZCkKK3N0YXRpYyBpbnQgc2FhNzE4NV9wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAorCQkJY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKQogewogCWludCBpOwotCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQ7CiAJc3RydWN0IHNhYTcxODUgKmVuY29kZXI7CiAKLQlkcHJpbnRrKDEsCi0JCUtFUk5fSU5GTwotCQkic2FhNzE4NS5jOiBkZXRlY3Rpbmcgc2FhNzE4NSBjbGllbnQgb24gYWRkcmVzcyAweCV4XG4iLAotCQlhZGRyZXNzIDw8IDEpOwotCiAJLyogQ2hlY2sgaWYgdGhlIGFkYXB0ZXIgc3VwcG9ydHMgdGhlIG5lZWRlZCBmZWF0dXJlcyAqLwotCWlmICghaTJjX2NoZWNrX2Z1bmN0aW9uYWxpdHkoYWRhcHRlciwgSTJDX0ZVTkNfU01CVVNfQllURV9EQVRBKSkKLQkJcmV0dXJuIDA7CisJaWYgKCFpMmNfY2hlY2tfZnVuY3Rpb25hbGl0eShjbGllbnQtPmFkYXB0ZXIsIEkyQ19GVU5DX1NNQlVTX0JZVEVfREFUQSkpCisJCXJldHVybiAtRU5PREVWOwogCi0JY2xpZW50ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGkyY19jbGllbnQpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWNsaWVudCkKLQkJcmV0dXJuIC1FTk9NRU07Ci0JY2xpZW50LT5hZGRyID0gYWRkcmVzczsKLQljbGllbnQtPmFkYXB0ZXIgPSBhZGFwdGVyOwotCWNsaWVudC0+ZHJpdmVyID0gJmkyY19kcml2ZXJfc2FhNzE4NTsKLQlzdHJsY3B5KEkyQ19OQU1FKGNsaWVudCksICJzYWE3MTg1Iiwgc2l6ZW9mKEkyQ19OQU1FKGNsaWVudCkpKTsKKwl2NGxfaW5mbyhjbGllbnQsICJjaGlwIGZvdW5kIEAgMHgleCAoJXMpXG4iLAorCQkJY2xpZW50LT5hZGRyIDw8IDEsIGNsaWVudC0+YWRhcHRlci0+bmFtZSk7CiAKIAllbmNvZGVyID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHNhYTcxODUpLCBHRlBfS0VSTkVMKTsKLQlpZiAoZW5jb2RlciA9PSBOVUxMKSB7Ci0JCWtmcmVlKGNsaWVudCk7CisJaWYgKGVuY29kZXIgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07Ci0JfQogCWVuY29kZXItPm5vcm0gPSBWSURFT19NT0RFX05UU0M7CiAJZW5jb2Rlci0+ZW5hYmxlID0gMTsKIAlpMmNfc2V0X2NsaWVudGRhdGEoY2xpZW50LCBlbmNvZGVyKTsKIAotCWkgPSBpMmNfYXR0YWNoX2NsaWVudChjbGllbnQpOwotCWlmIChpKSB7Ci0JCWtmcmVlKGNsaWVudCk7Ci0JCWtmcmVlKGVuY29kZXIpOwotCQlyZXR1cm4gaTsKLQl9Ci0KIAlpID0gc2FhNzE4NV93cml0ZV9ibG9jayhjbGllbnQsIGluaXRfY29tbW9uLCBzaXplb2YoaW5pdF9jb21tb24pKTsKLQlpZiAoaSA+PSAwKSB7Ci0JCWkgPSBzYWE3MTg1X3dyaXRlX2Jsb2NrKGNsaWVudCwgaW5pdF9udHNjLAotCQkJCQlzaXplb2YoaW5pdF9udHNjKSk7Ci0JfQotCWlmIChpIDwgMCkgewotCQlkcHJpbnRrKDEsIEtFUk5fRVJSICIlc19hdHRhY2g6IGluaXQgZXJyb3IgJWRcbiIsCi0JCQlJMkNfTkFNRShjbGllbnQpLCBpKTsKLQl9IGVsc2UgewotCQlkcHJpbnRrKDEsCi0JCQlLRVJOX0lORk8KLQkJCSIlc19hdHRhY2g6IGNoaXAgdmVyc2lvbiAlZCBhdCBhZGRyZXNzIDB4JXhcbiIsCi0JCQlJMkNfTkFNRShjbGllbnQpLCBzYWE3MTg1X3JlYWQoY2xpZW50KSA+PiA1LAotCQkJY2xpZW50LT5hZGRyIDw8IDEpOwotCX0KLQorCWlmIChpID49IDApCisJCWkgPSBzYWE3MTg1X3dyaXRlX2Jsb2NrKGNsaWVudCwgaW5pdF9udHNjLCBzaXplb2YoaW5pdF9udHNjKSk7CisJaWYgKGkgPCAwKQorCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJpbml0IGVycm9yICVkXG4iLCBpKTsKKwllbHNlCisJCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgInJldmlzaW9uIDB4JXhcbiIsCisJCQkJc2FhNzE4NV9yZWFkKGNsaWVudCkgPj4gNSk7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQKLXNhYTcxODVfYXR0YWNoX2FkYXB0ZXIgKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlcikKLXsKLQlkcHJpbnRrKDEsCi0JCUtFUk5fSU5GTwotCQkic2FhNzE4NS5jOiBzdGFydGluZyBwcm9iZSBmb3IgYWRhcHRlciAlcyAoMHgleClcbiIsCi0JCUkyQ19OQU1FKGFkYXB0ZXIpLCBhZGFwdGVyLT5pZCk7Ci0JcmV0dXJuIGkyY19wcm9iZShhZGFwdGVyLCAmYWRkcl9kYXRhLCAmc2FhNzE4NV9kZXRlY3RfY2xpZW50KTsKLX0KLQotc3RhdGljIGludAotc2FhNzE4NV9kZXRhY2hfY2xpZW50IChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQorc3RhdGljIGludCBzYWE3MTg1X3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQogewogCXN0cnVjdCBzYWE3MTg1ICplbmNvZGVyID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7Ci0JaW50IGVycjsKLQotCWVyciA9IGkyY19kZXRhY2hfY2xpZW50KGNsaWVudCk7Ci0JaWYgKGVycikgewotCQlyZXR1cm4gZXJyOwotCX0KIAogCXNhYTcxODVfd3JpdGUoY2xpZW50LCAweDYxLCAoZW5jb2Rlci0+cmVnWzB4NjFdKSB8IDB4NDApOwkvKiBTVzogb3V0cHV0IG9mZiBpcyBhY3RpdmUgKi8KIAkvL3NhYTcxODVfd3JpdGUoY2xpZW50LCAweDNhLCAoZW5jb2Rlci0+cmVnWzB4M2FdKSB8IDB4ODApOyAvKiBTVzogY29sb3IgYmFyICovCiAKIAlrZnJlZShlbmNvZGVyKTsKLQlrZnJlZShjbGllbnQpOwotCiAJcmV0dXJuIDA7CiB9CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKLXN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBpMmNfZHJpdmVyX3NhYTcxODUgPSB7Ci0JLmRyaXZlciA9IHsKLQkJLm5hbWUgPSAic2FhNzE4NSIsCS8qIG5hbWUgKi8KLQl9LAotCi0JLmlkID0gSTJDX0RSSVZFUklEX1NBQTcxODVCLAotCi0JLmF0dGFjaF9hZGFwdGVyID0gc2FhNzE4NV9hdHRhY2hfYWRhcHRlciwKLQkuZGV0YWNoX2NsaWVudCA9IHNhYTcxODVfZGV0YWNoX2NsaWVudCwKLQkuY29tbWFuZCA9IHNhYTcxODVfY29tbWFuZCwKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCBzYWE3MTg1X2lkW10gPSB7CisJeyAic2FhNzE4NSIsIDAgfSwKKwl7IH0KIH07CitNT0RVTEVfREVWSUNFX1RBQkxFKGkyYywgc2FhNzE4NV9pZCk7CiAKLXN0YXRpYyBpbnQgX19pbml0Ci1zYWE3MTg1X2luaXQgKHZvaWQpCi17Ci0JcmV0dXJuIGkyY19hZGRfZHJpdmVyKCZpMmNfZHJpdmVyX3NhYTcxODUpOwotfQotCi1zdGF0aWMgdm9pZCBfX2V4aXQKLXNhYTcxODVfZXhpdCAodm9pZCkKLXsKLQlpMmNfZGVsX2RyaXZlcigmaTJjX2RyaXZlcl9zYWE3MTg1KTsKLX0KLQotbW9kdWxlX2luaXQoc2FhNzE4NV9pbml0KTsKLW1vZHVsZV9leGl0KHNhYTcxODVfZXhpdCk7CitzdGF0aWMgc3RydWN0IHY0bDJfaTJjX2RyaXZlcl9kYXRhIHY0bDJfaTJjX2RhdGEgPSB7CisJLm5hbWUgPSAic2FhNzE4NSIsCisJLmRyaXZlcmlkID0gSTJDX0RSSVZFUklEX1NBQTcxODVCLAorCS5jb21tYW5kID0gc2FhNzE4NV9jb21tYW5kLAorCS5wcm9iZSA9IHNhYTcxODVfcHJvYmUsCisJLnJlbW92ZSA9IHNhYTcxODVfcmVtb3ZlLAorCS5pZF90YWJsZSA9IHNhYTcxODVfaWQsCit9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zZTQwMS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9zZTQwMS5jCmluZGV4IGFjY2VlZDUuLmFlMzk0OTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2U0MDEuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NlNDAxLmMKQEAgLTI4OCw3ICsyODgsNyBAQAogCWludCBzdGF0dXM7CiAKIAlpZiAoIXNlNDAxLT5kZXYpIHsKLQkJaW5mbygib2hvaDogZGV2aWNlIHZhcG91cmlzaGVkIik7CisJCWRldl9pbmZvKCZ1cmItPmRldi0+ZGV2LCAiZGV2aWNlIHZhcG91cmlzaGVkXG4iKTsKIAkJcmV0dXJuOwogCX0KIApAQCAtMzI4LDcgKzMyOCw3IEBACiAJCXJldHVybjsKIAogCWlmICghc2U0MDEtPmRldikgewotCQlpbmZvICgib2hvaDogZGV2aWNlIHZhcG91cmlzaGVkIik7CisJCWRldl9pbmZvKCZ1cmItPmRldi0+ZGV2LCAiZGV2aWNlIHZhcG91cmlzaGVkXG4iKTsKIAkJcmV0dXJuOwogCX0KIApAQCAtMzc1LDcgKzM3NSw3IEBACiAJdXJiLT5zdGF0dXM9MDsKIAl1cmItPmRldj1zZTQwMS0+ZGV2OwogCWlmKHVzYl9zdWJtaXRfdXJiKHVyYiwgR0ZQX0tFUk5FTCkpCi0JCWluZm8oInVyYiBidXJuZWQgZG93biIpOworCQlkZXZfaW5mbygmdXJiLT5kZXYtPmRldiwgInVyYiBidXJuZWQgZG93blxuIik7CiAJcmV0dXJuOwogfQogCkBAIC04NjAsNyArODYwLDggQEAKIAkJKTsKIAkJaWYgKHNlNDAxLT5udWxscGFja2V0cyA+IFNFNDAxX01BWF9OVUxMUEFDS0VUUykgewogCQkJc2U0MDEtPm51bGxwYWNrZXRzPTA7Ci0JCQlpbmZvKCJ0byBtYW55IG51bGwgbGVuZ3RoIHBhY2tldHMsIHJlc3RhcnRpbmcgY2FwdHVyZSIpOworCQkJZGV2X2luZm8oJnNlNDAxLT5kZXYtPmRldiwKKwkJCQkgInRvbyBtYW55IG51bGwgbGVuZ3RoIHBhY2tldHMsIHJlc3RhcnRpbmcgY2FwdHVyZVxuIik7CiAJCQlzZTQwMV9zdG9wX3N0cmVhbShzZTQwMSk7CiAJCQlzZTQwMV9zdGFydF9zdHJlYW0oc2U0MDEpOwogCQl9IGVsc2UgewpAQCAtODgwLDcgKzg4MSw4IEBACiAJCQkJc2U0MDEtPnNjcmF0Y2hfdXNlPTA7CiAJCQlpZiAoZXJyb3JzID4gU0U0MDFfTUFYX0VSUk9SUykgewogCQkJCWVycm9ycz0wOwotCQkJCWluZm8oInRvIG11Y2ggZXJyb3JzLCByZXN0YXJ0aW5nIGNhcHR1cmUiKTsKKwkJCQlkZXZfaW5mbygmc2U0MDEtPmRldi0+ZGV2LAorCQkJCQkgInRvbyBtYW55IGVycm9ycywgcmVzdGFydGluZyBjYXB0dXJlXG4iKTsKIAkJCQlzZTQwMV9zdG9wX3N0cmVhbShzZTQwMSk7CiAJCQkJc2U0MDFfc3RhcnRfc3RyZWFtKHNlNDAxKTsKIAkJCX0KQEAgLTkxMyw3ICs5MTUsNyBAQAogCQl1c2Jfa2lsbF91cmIoc2U0MDEtPmludHVyYik7CiAJCXVzYl9mcmVlX3VyYihzZTQwMS0+aW50dXJiKTsKIAl9Ci0JaW5mbygiJXMgZGlzY29ubmVjdGVkIiwgc2U0MDEtPmNhbWVyYV9uYW1lKTsKKwlkZXZfaW5mbygmc2U0MDEtPmRldi0+ZGV2LCAiJXMgZGlzY29ubmVjdGVkIiwgc2U0MDEtPmNhbWVyYV9uYW1lKTsKIAogCS8qIEZyZWUgdGhlIG1lbW9yeSAqLwogCWtmcmVlKHNlNDAxLT53aWR0aCk7CkBAIC05MzYsMTQgKzkzOCwxOCBAQAogCXN0cnVjdCB1c2Jfc2U0MDEgKnNlNDAxID0gKHN0cnVjdCB1c2Jfc2U0MDEgKilkZXY7CiAJaW50IGVyciA9IDA7CiAKLQlpZiAoc2U0MDEtPnVzZXIpCisJbG9ja19rZXJuZWwoKTsKKwlpZiAoc2U0MDEtPnVzZXIpIHsKKwkJdW5sb2NrX2tlcm5lbCgpOwogCQlyZXR1cm4gLUVCVVNZOworCX0KIAlzZTQwMS0+ZmJ1ZiA9IHJ2bWFsbG9jKHNlNDAxLT5tYXhmcmFtZXNpemUgKiBTRTQwMV9OVU1GUkFNRVMpOwogCWlmIChzZTQwMS0+ZmJ1ZikKIAkJZmlsZS0+cHJpdmF0ZV9kYXRhID0gZGV2OwogCWVsc2UKIAkJZXJyID0gLUVOT01FTTsKIAlzZTQwMS0+dXNlciA9ICFlcnI7CisJdW5sb2NrX2tlcm5lbCgpOwogCiAJcmV0dXJuIGVycjsKIH0KQEAgLTk1Niw4ICs5NjIsOCBAQAogCiAJcnZmcmVlKHNlNDAxLT5mYnVmLCBzZTQwMS0+bWF4ZnJhbWVzaXplICogU0U0MDFfTlVNRlJBTUVTKTsKIAlpZiAoc2U0MDEtPnJlbW92ZWQpIHsKKwkJZGV2X2luZm8oJnNlNDAxLT5kZXYtPmRldiwgImRldmljZSB1bnJlZ2lzdGVyZWRcbiIpOwogCQl1c2Jfc2U0MDFfcmVtb3ZlX2Rpc2Nvbm5lY3RlZChzZTQwMSk7Ci0JCWluZm8oImRldmljZSB1bnJlZ2lzdGVyZWQiKTsKIAl9IGVsc2UgewogCQlmb3IgKGk9MDsgaTxTRTQwMV9OVU1GUkFNRVM7IGkrKykKIAkJCXNlNDAxLT5mcmFtZVtpXS5ncmFic3RhdGU9RlJBTUVfVU5VU0VEOwpAQCAtMTIzMiw2ICsxMjM4LDcgQEAKIHN0YXRpYyBzdHJ1Y3QgdmlkZW9fZGV2aWNlIHNlNDAxX3RlbXBsYXRlID0gewogCS5uYW1lID0gICAgICAgICAic2U0MDEgVVNCIGNhbWVyYSIsCiAJLmZvcHMgPSAgICAgICAgICZzZTQwMV9mb3BzLAorCS5yZWxlYXNlID0gdmlkZW9fZGV2aWNlX3JlbGVhc2VfZW1wdHksCiB9OwogCiAKQEAgLTEyNzEsNyArMTI3OCw3IEBACiAJZm9yIChpPTA7IGk8c2U0MDEtPnNpemVzOyBpKyspIHsKIAkJc3ByaW50Zih0ZW1wLCAiJXMgJWR4JWQiLCB0ZW1wLCBzZTQwMS0+d2lkdGhbaV0sIHNlNDAxLT5oZWlnaHRbaV0pOwogCX0KLQlpbmZvKCIlcyIsIHRlbXApOworCWRldl9pbmZvKCZzZTQwMS0+ZGV2LT5kZXYsICIlc1xuIiwgdGVtcCk7CiAJc2U0MDEtPm1heGZyYW1lc2l6ZT1zZTQwMS0+d2lkdGhbc2U0MDEtPnNpemVzLTFdKnNlNDAxLT5oZWlnaHRbc2U0MDEtPnNpemVzLTFdKjM7CiAKIAlyYz1zZTQwMV9zbmRjdHJsKDAsIHNlNDAxLCBTRTQwMV9SRVFfR0VUX1dJRFRILCAwLCBjcCwgc2l6ZW9mKGNwKSk7CkBAIC0xMzA1LDcgKzEzMTIsOCBAQAogCWlmIChidXR0b24pIHsKIAkJc2U0MDEtPmludHVyYj11c2JfYWxsb2NfdXJiKDAsIEdGUF9LRVJORUwpOwogCQlpZiAoIXNlNDAxLT5pbnR1cmIpIHsKLQkJCWluZm8oIkFsbG9jYXRpb24gb2YgaW50dXJiIGZhaWxlZCIpOworCQkJZGV2X2luZm8oJnNlNDAxLT5kZXYtPmRldiwKKwkJCQkgIkFsbG9jYXRpb24gb2YgaW50dXJiIGZhaWxlZFxuIik7CiAJCQlyZXR1cm4gMTsKIAkJfQogCQl1c2JfZmlsbF9pbnRfdXJiKHNlNDAxLT5pbnR1cmIsIHNlNDAxLT5kZXYsCkBAIC0xMzE2LDcgKzEzMjQsNyBAQAogCQkgICAgOAogCQkpOwogCQlpZiAodXNiX3N1Ym1pdF91cmIoc2U0MDEtPmludHVyYiwgR0ZQX0tFUk5FTCkpIHsKLQkJCWluZm8oImludCB1cmIgYnVybmVkIGRvd24iKTsKKwkJCWRldl9pbmZvKCZzZTQwMS0+ZGV2LT5kZXYsICJpbnQgdXJiIGJ1cm5lZCBkb3duXG4iKTsKIAkJCXJldHVybiAxOwogCQl9CiAJfSBlbHNlCkBAIC0xMzczLDcgKzEzODEsNyBAQAogCQlyZXR1cm4gLUVOT0RFVjsKIAogCS8qIFdlIGZvdW5kIG9uZSAqLwotCWluZm8oIlNFNDAxIGNhbWVyYSBmb3VuZDogJXMiLCBjYW1lcmFfbmFtZSk7CisJZGV2X2luZm8oJmludGYtPmRldiwgIlNFNDAxIGNhbWVyYSBmb3VuZDogJXNcbiIsIGNhbWVyYV9uYW1lKTsKIAogCWlmICgoc2U0MDEgPSBremFsbG9jKHNpemVvZigqc2U0MDEpLCBHRlBfS0VSTkVMKSkgPT0gTlVMTCkgewogCQllcnIoImNvdWxkbid0IGttYWxsb2Mgc2U0MDEgc3RydWN0Iik7CkBAIC0xMzg0LDcgKzEzOTIsOCBAQAogCXNlNDAxLT5pZmFjZSA9IGludGVyZmFjZS0+YkludGVyZmFjZU51bWJlcjsKIAlzZTQwMS0+Y2FtZXJhX25hbWUgPSBjYW1lcmFfbmFtZTsKIAotCWluZm8oImZpcm13YXJlIHZlcnNpb246ICUwMngiLCBsZTE2X3RvX2NwdShkZXYtPmRlc2NyaXB0b3IuYmNkRGV2aWNlKSAmIDI1NSk7CisJZGV2X2luZm8oJmludGYtPmRldiwgImZpcm13YXJlIHZlcnNpb246ICUwMnhcbiIsCisJCSBsZTE2X3RvX2NwdShkZXYtPmRlc2NyaXB0b3IuYmNkRGV2aWNlKSAmIDI1NSk7CiAKIAlpZiAoc2U0MDFfaW5pdChzZTQwMSwgYnV0dG9uKSkgewogCQlrZnJlZShzZTQwMSk7CkBAIC0xNDAyLDcgKzE0MTEsOCBAQAogCQllcnIoInZpZGVvX3JlZ2lzdGVyX2RldmljZSBmYWlsZWQiKTsKIAkJcmV0dXJuIC1FSU87CiAJfQotCWluZm8oInJlZ2lzdGVyZWQgbmV3IHZpZGVvIGRldmljZTogdmlkZW8lZCIsIHNlNDAxLT52ZGV2Lm1pbm9yKTsKKwlkZXZfaW5mbygmaW50Zi0+ZGV2LCAicmVnaXN0ZXJlZCBuZXcgdmlkZW8gZGV2aWNlOiB2aWRlbyVkXG4iLAorCQkgc2U0MDEtPnZkZXYubWlub3IpOwogCiAJdXNiX3NldF9pbnRmZGF0YSAoaW50Ziwgc2U0MDEpOwogCXJldHVybiAwOwpAQCAtMTQ0NiwxMCArMTQ1NiwxMCBAQAogCiBzdGF0aWMgaW50IF9faW5pdCB1c2Jfc2U0MDFfaW5pdCh2b2lkKQogewotCWluZm8oIlNFNDAxIHVzYiBjYW1lcmEgZHJpdmVyIHZlcnNpb24gJXMgcmVnaXN0ZXJpbmciLCB2ZXJzaW9uKTsKKwlwcmludGsoS0VSTl9JTkZPICJTRTQwMSB1c2IgY2FtZXJhIGRyaXZlciB2ZXJzaW9uICVzIHJlZ2lzdGVyaW5nXG4iLCB2ZXJzaW9uKTsKIAlpZiAoZmxpY2tlcmxlc3MpCiAJCWlmIChmbGlja2VybGVzcyE9NTAgJiYgZmxpY2tlcmxlc3MhPTYwKSB7Ci0JCQlpbmZvKCJJbnZhbGxpZCBmbGlja2VybGVzcyB2YWx1ZSwgdXNlIDAsIDUwIG9yIDYwLiIpOworCQkJcHJpbnRrKEtFUk5fRVJSICJJbnZhbGxpZCBmbGlja2VybGVzcyB2YWx1ZSwgdXNlIDAsIDUwIG9yIDYwLlxuIik7CiAJCQlyZXR1cm4gLTE7CiAJfQogCXJldHVybiB1c2JfcmVnaXN0ZXIoJnNlNDAxX2RyaXZlcik7CkBAIC0xNDU4LDcgKzE0NjgsNyBAQAogc3RhdGljIHZvaWQgX19leGl0IHVzYl9zZTQwMV9leGl0KHZvaWQpCiB7CiAJdXNiX2RlcmVnaXN0ZXIoJnNlNDAxX2RyaXZlcik7Ci0JaW5mbygiU0U0MDEgZHJpdmVyIGRlcmVnaXN0ZXJlZCIpOworCXByaW50ayhLRVJOX0lORk8gIlNFNDAxIGRyaXZlciBkZXJlZ2lzdGVyZWRcZnJhbWUiKTsKIH0KIAogbW9kdWxlX2luaXQodXNiX3NlNDAxX2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zaF9tb2JpbGVfY2V1X2NhbWVyYS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9zaF9tb2JpbGVfY2V1X2NhbWVyYS5jCmluZGV4IDMxODc1NGUuLjI0MDc2MDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2hfbW9iaWxlX2NldV9jYW1lcmEuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NoX21vYmlsZV9jZXVfY2FtZXJhLmMKQEAgLTQwLDM5ICs0MCwzOSBAQAogCiAvKiByZWdpc3RlciBvZmZzZXRzIGZvciBzaDc3MjIgLyBzaDc3MjMgKi8KIAotI2RlZmluZSBDQVBTUiAgMHgwMAotI2RlZmluZSBDQVBDUiAgMHgwNAotI2RlZmluZSBDQU1DUiAgMHgwOAotI2RlZmluZSBDTUNZUiAgMHgwYwotI2RlZmluZSBDQU1PUiAgMHgxMAotI2RlZmluZSBDQVBXUiAgMHgxNAotI2RlZmluZSBDQUlGUiAgMHgxOAotI2RlZmluZSBDU1RDUiAgMHgyMCAvKiBub3Qgb24gc2g3NzIzICovCi0jZGVmaW5lIENTRUNSICAweDI0IC8qIG5vdCBvbiBzaDc3MjMgKi8KLSNkZWZpbmUgQ1JDTlRSIDB4MjgKLSNkZWZpbmUgQ1JDTVBSIDB4MmMKLSNkZWZpbmUgQ0ZMQ1IgIDB4MzAKLSNkZWZpbmUgQ0ZTWlIgIDB4MzQKLSNkZWZpbmUgQ0RXRFIgIDB4MzgKLSNkZWZpbmUgQ0RBWVIgIDB4M2MKLSNkZWZpbmUgQ0RBQ1IgIDB4NDAKLSNkZWZpbmUgQ0RCWVIgIDB4NDQKLSNkZWZpbmUgQ0RCQ1IgIDB4NDgKLSNkZWZpbmUgQ0JEU1IgIDB4NGMKLSNkZWZpbmUgQ0ZXQ1IgIDB4NWMKLSNkZWZpbmUgQ0xGQ1IgIDB4NjAKLSNkZWZpbmUgQ0RPQ1IgIDB4NjQKLSNkZWZpbmUgQ0REQ1IgIDB4NjgKLSNkZWZpbmUgQ0REQVIgIDB4NmMKLSNkZWZpbmUgQ0VJRVIgIDB4NzAKLSNkZWZpbmUgQ0VUQ1IgIDB4NzQKLSNkZWZpbmUgQ1NUU1IgIDB4N2MKLSNkZWZpbmUgQ1NSVFIgIDB4ODAKLSNkZWZpbmUgQ0RTU1IgIDB4ODQKLSNkZWZpbmUgQ0RBWVIyIDB4OTAKLSNkZWZpbmUgQ0RBQ1IyIDB4OTQKLSNkZWZpbmUgQ0RCWVIyIDB4OTgKLSNkZWZpbmUgQ0RCQ1IyIDB4OWMKKyNkZWZpbmUgQ0FQU1IgIDB4MDAgLyogQ2FwdHVyZSBzdGFydCByZWdpc3RlciAqLworI2RlZmluZSBDQVBDUiAgMHgwNCAvKiBDYXB0dXJlIGNvbnRyb2wgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgQ0FNQ1IgIDB4MDggLyogQ2FwdHVyZSBpbnRlcmZhY2UgY29udHJvbCByZWdpc3RlciAqLworI2RlZmluZSBDTUNZUiAgMHgwYyAvKiBDYXB0dXJlIGludGVyZmFjZSBjeWNsZSAgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgQ0FNT1IgIDB4MTAgLyogQ2FwdHVyZSBpbnRlcmZhY2Ugb2Zmc2V0IHJlZ2lzdGVyICovCisjZGVmaW5lIENBUFdSICAweDE0IC8qIENhcHR1cmUgaW50ZXJmYWNlIHdpZHRoIHJlZ2lzdGVyICovCisjZGVmaW5lIENBSUZSICAweDE4IC8qIENhcHR1cmUgaW50ZXJmYWNlIGlucHV0IGZvcm1hdCByZWdpc3RlciAqLworI2RlZmluZSBDU1RDUiAgMHgyMCAvKiBDYW1lcmEgc3Ryb2JlIGNvbnRyb2wgcmVnaXN0ZXIgKDw9IHNoNzcyMikgKi8KKyNkZWZpbmUgQ1NFQ1IgIDB4MjQgLyogQ2FtZXJhIHN0cm9iZSBlbWlzc2lvbiBjb3VudCByZWdpc3RlciAoPD0gc2g3NzIyKSAqLworI2RlZmluZSBDUkNOVFIgMHgyOCAvKiBDRVUgcmVnaXN0ZXIgY29udHJvbCByZWdpc3RlciAqLworI2RlZmluZSBDUkNNUFIgMHgyYyAvKiBDRVUgcmVnaXN0ZXIgZm9yY2libGUgY29udHJvbCByZWdpc3RlciAqLworI2RlZmluZSBDRkxDUiAgMHgzMCAvKiBDYXB0dXJlIGZpbHRlciBjb250cm9sIHJlZ2lzdGVyICovCisjZGVmaW5lIENGU1pSICAweDM0IC8qIENhcHR1cmUgZmlsdGVyIHNpemUgY2xpcCByZWdpc3RlciAqLworI2RlZmluZSBDRFdEUiAgMHgzOCAvKiBDYXB0dXJlIGRlc3RpbmF0aW9uIHdpZHRoIHJlZ2lzdGVyICovCisjZGVmaW5lIENEQVlSICAweDNjIC8qIENhcHR1cmUgZGF0YSBhZGRyZXNzIFkgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgQ0RBQ1IgIDB4NDAgLyogQ2FwdHVyZSBkYXRhIGFkZHJlc3MgQyByZWdpc3RlciAqLworI2RlZmluZSBDREJZUiAgMHg0NCAvKiBDYXB0dXJlIGRhdGEgYm90dG9tLWZpZWxkIGFkZHJlc3MgWSByZWdpc3RlciAqLworI2RlZmluZSBDREJDUiAgMHg0OCAvKiBDYXB0dXJlIGRhdGEgYm90dG9tLWZpZWxkIGFkZHJlc3MgQyByZWdpc3RlciAqLworI2RlZmluZSBDQkRTUiAgMHg0YyAvKiBDYXB0dXJlIGJ1bmRsZSBkZXN0aW5hdGlvbiBzaXplIHJlZ2lzdGVyICovCisjZGVmaW5lIENGV0NSICAweDVjIC8qIEZpcmV3YWxsIG9wZXJhdGlvbiBjb250cm9sIHJlZ2lzdGVyICovCisjZGVmaW5lIENMRkNSICAweDYwIC8qIENhcHR1cmUgbG93LXBhc3MgZmlsdGVyIGNvbnRyb2wgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgQ0RPQ1IgIDB4NjQgLyogQ2FwdHVyZSBkYXRhIG91dHB1dCBjb250cm9sIHJlZ2lzdGVyICovCisjZGVmaW5lIENERENSICAweDY4IC8qIENhcHR1cmUgZGF0YSBjb21wbGV4aXR5IGxldmVsIHJlZ2lzdGVyICovCisjZGVmaW5lIENEREFSICAweDZjIC8qIENhcHR1cmUgZGF0YSBjb21wbGV4aXR5IGxldmVsIGFkZHJlc3MgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgQ0VJRVIgIDB4NzAgLyogQ2FwdHVyZSBldmVudCBpbnRlcnJ1cHQgZW5hYmxlIHJlZ2lzdGVyICovCisjZGVmaW5lIENFVENSICAweDc0IC8qIENhcHR1cmUgZXZlbnQgZmxhZyBjbGVhciByZWdpc3RlciAqLworI2RlZmluZSBDU1RTUiAgMHg3YyAvKiBDYXB0dXJlIHN0YXR1cyByZWdpc3RlciAqLworI2RlZmluZSBDU1JUUiAgMHg4MCAvKiBDYXB0dXJlIHNvZnR3YXJlIHJlc2V0IHJlZ2lzdGVyICovCisjZGVmaW5lIENEU1NSICAweDg0IC8qIENhcHR1cmUgZGF0YSBzaXplIHJlZ2lzdGVyICovCisjZGVmaW5lIENEQVlSMiAweDkwIC8qIENhcHR1cmUgZGF0YSBhZGRyZXNzIFkgcmVnaXN0ZXIgMiAqLworI2RlZmluZSBDREFDUjIgMHg5NCAvKiBDYXB0dXJlIGRhdGEgYWRkcmVzcyBDIHJlZ2lzdGVyIDIgKi8KKyNkZWZpbmUgQ0RCWVIyIDB4OTggLyogQ2FwdHVyZSBkYXRhIGJvdHRvbS1maWVsZCBhZGRyZXNzIFkgcmVnaXN0ZXIgMiAqLworI2RlZmluZSBDREJDUjIgMHg5YyAvKiBDYXB0dXJlIGRhdGEgYm90dG9tLWZpZWxkIGFkZHJlc3MgQyByZWdpc3RlciAyICovCiAKIHN0YXRpYyBERUZJTkVfTVVURVgoY2FtZXJhX2xvY2spOwogCkBAIC0xNjUsNiArMTY1LDcgQEAKIAljZXVfd3JpdGUocGNkZXYsIENFVENSLCAweDAzMTdmMzEzIF4gMHgxMCk7CiAKIAlpZiAocGNkZXYtPmFjdGl2ZSkgeworCQlwY2Rldi0+YWN0aXZlLT5zdGF0ZSA9IFZJREVPQlVGX0FDVElWRTsKIAkJY2V1X3dyaXRlKHBjZGV2LCBDREFZUiwgdmlkZW9idWZfdG9fZG1hX2NvbnRpZyhwY2Rldi0+YWN0aXZlKSk7CiAJCWNldV93cml0ZShwY2RldiwgQ0FQU1IsIDB4MSk7IC8qIHN0YXJ0IGNhcHR1cmUgKi8KIAl9CkBAIC0yMzYsNyArMjM3LDcgQEAKIAlkZXZfZGJnKCZpY2QtPmRldiwgIiVzICh2Yj0weCVwKSAweCUwOGx4ICV6ZFxuIiwgX19mdW5jX18sCiAJCXZiLCB2Yi0+YmFkZHIsIHZiLT5ic2l6ZSk7CiAKLQl2Yi0+c3RhdGUgPSBWSURFT0JVRl9BQ1RJVkU7CisJdmItPnN0YXRlID0gVklERU9CVUZfUVVFVUVEOwogCXNwaW5fbG9ja19pcnFzYXZlKCZwY2Rldi0+bG9jaywgZmxhZ3MpOwogCWxpc3RfYWRkX3RhaWwoJnZiLT5xdWV1ZSwgJnBjZGV2LT5jYXB0dXJlKTsKIApAQCAtMzA0LDkgKzMwNSw2IEBACiAJCSAiU3VwZXJIIE1vYmlsZSBDRVUgZHJpdmVyIGF0dGFjaGVkIHRvIGNhbWVyYSAlZFxuIiwKIAkJIGljZC0+ZGV2bnVtKTsKIAotCWlmIChwY2Rldi0+cGRhdGEtPmVuYWJsZV9jYW1lcmEpCi0JCXBjZGV2LT5wZGF0YS0+ZW5hYmxlX2NhbWVyYSgpOwotCiAJcmV0ID0gaWNkLT5vcHMtPmluaXQoaWNkKTsKIAlpZiAocmV0KQogCQlnb3RvIGVycjsKQEAgLTMyNiwxNSArMzI0LDI1IEBACiB7CiAJc3RydWN0IHNvY19jYW1lcmFfaG9zdCAqaWNpID0gdG9fc29jX2NhbWVyYV9ob3N0KGljZC0+ZGV2LnBhcmVudCk7CiAJc3RydWN0IHNoX21vYmlsZV9jZXVfZGV2ICpwY2RldiA9IGljaS0+cHJpdjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJQlVHX09OKGljZCAhPSBwY2Rldi0+aWNkKTsKIAogCS8qIGRpc2FibGUgY2FwdHVyZSwgZGlzYWJsZSBpbnRlcnJ1cHRzICovCiAJY2V1X3dyaXRlKHBjZGV2LCBDRUlFUiwgMCk7CiAJY2V1X3dyaXRlKHBjZGV2LCBDQVBTUiwgMSA8PCAxNik7IC8qIHJlc2V0ICovCisKKwkvKiBtYWtlIHN1cmUgYWN0aXZlIGJ1ZmZlciBpcyBjYW5jZWxlZCAqLworCXNwaW5fbG9ja19pcnFzYXZlKCZwY2Rldi0+bG9jaywgZmxhZ3MpOworCWlmIChwY2Rldi0+YWN0aXZlKSB7CisJCWxpc3RfZGVsKCZwY2Rldi0+YWN0aXZlLT5xdWV1ZSk7CisJCXBjZGV2LT5hY3RpdmUtPnN0YXRlID0gVklERU9CVUZfRVJST1I7CisJCXdha2VfdXBfYWxsKCZwY2Rldi0+YWN0aXZlLT5kb25lKTsKKwkJcGNkZXYtPmFjdGl2ZSA9IE5VTEw7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBjZGV2LT5sb2NrLCBmbGFncyk7CisKIAlpY2QtPm9wcy0+cmVsZWFzZShpY2QpOwotCWlmIChwY2Rldi0+cGRhdGEtPmRpc2FibGVfY2FtZXJhKQotCQlwY2Rldi0+cGRhdGEtPmRpc2FibGVfY2FtZXJhKCk7CiAKIAlkZXZfaW5mbygmaWNkLT5kZXYsCiAJCSAiU3VwZXJIIE1vYmlsZSBDRVUgZHJpdmVyIGRldGFjaGVkIGZyb20gY2FtZXJhICVkXG4iLApAQCAtMzk2LDcgKzQwNCwyMCBAQAogCWNldV93cml0ZShwY2RldiwgQ0ZMQ1IsIDApOyAvKiBkYXRhIGZldGNoIG1vZGUgLSBubyBzY2FsaW5nICovCiAJY2V1X3dyaXRlKHBjZGV2LCBDRlNaUiwgKGljZC0+aGVpZ2h0IDw8IDE2KSB8IGNmc3pyX3dpZHRoKTsKIAljZXVfd3JpdGUocGNkZXYsIENMRkNSLCAwKTsgLyogZGF0YSBmZXRjaCBtb2RlIC0gbm8gbG93cGFzcyBmaWx0ZXIgKi8KLQljZXVfd3JpdGUocGNkZXYsIENET0NSLCAweDAwMDAwMDE2KTsKKworCS8qIEEgZmV3IHdvcmRzIGFib3V0IGJ5dGUgb3JkZXIgKG9ic2VydmVkIGluIEJpZyBFbmRpYW4gbW9kZSkKKwkgKgorCSAqIEluIGRhdGEgZmV0Y2ggbW9kZSBieXRlcyBhcmUgcmVjZWl2ZWQgaW4gY2h1bmtzIG9mIDggYnl0ZXMuCisJICogRDAsIEQxLCBEMiwgRDMsIEQ0LCBENSwgRDYsIEQ3IChEMCByZWNlaXZlZCBmaXJzdCkKKwkgKgorCSAqIFRoZSBkYXRhIGlzIGhvd2V2ZXIgYnkgZGVmYXVsdCB3cml0dGVuIHRvIG1lbW9yeSBpbiByZXZlcnNlIG9yZGVyOgorCSAqIEQ3LCBENiwgRDUsIEQ0LCBEMywgRDIsIEQxLCBEMCAoRDcgd3JpdHRlbiB0byBsb3dlc3QgYnl0ZSkKKwkgKgorCSAqIFRoZSBsb3dlc3QgdGhyZWUgYml0cyBvZiBDRE9DUiBhbGxvd3MgdXMgdG8gZG8gc3dhcHBpbmcsCisJICogdXNpbmcgNyB3ZSBzd2FwIHRoZSBkYXRhIGJ5dGVzIHRvIG1hdGNoIHRoZSBpbmNvbWluZyBvcmRlcjoKKwkgKiBEMCwgRDEsIEQyLCBEMywgRDQsIEQ1LCBENiwgRDcKKwkgKi8KKwljZXVfd3JpdGUocGNkZXYsIENET0NSLCAweDAwMDAwMDE3KTsKIAogCWNldV93cml0ZShwY2RldiwgQ0RXRFIsIGNkd2RyX3dpZHRoKTsKIAljZXVfd3JpdGUocGNkZXYsIENGV0NSLCAwKTsgLyoga2VlcCAiZGF0YWZldGNoIGZpcmV3YWxsIiBkaXNhYmxlZCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zbjljMTAyL3NuOWMxMDJfY29yZS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9zbjljMTAyL3NuOWMxMDJfY29yZS5jCmluZGV4IDJkYTY5MzguLjIwZTMwYmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc245YzEwMi9zbjljMTAyX2NvcmUuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NuOWMxMDIvc245YzEwMl9jb3JlLmMKQEAgLTExNiw2ICsxMTYsMjYgQEAKIAkJICJcbiIpOwogI2VuZGlmCiAKKy8qCisgICBBZGQgdGhlIHByb2JlIGVudHJpZXMgdG8gdGhpcyB0YWJsZS4gQmUgc3VyZSB0byBhZGQgdGhlIGVudHJ5IGluIHRoZSByaWdodAorICAgcGxhY2UsIHNpbmNlLCBvbiBmYWlsdXJlLCB0aGUgbmV4dCBwcm9iaW5nIHJvdXRpbmUgaXMgY2FsbGVkIGFjY29yZGluZyB0bworICAgdGhlIG9yZGVyIG9mIHRoZSBsaXN0IGJlbG93LCBmcm9tIHRvcCB0byBib3R0b20uCisqLworc3RhdGljIGludCAoKnNuOWMxMDJfc2Vuc29yX3RhYmxlW10pKHN0cnVjdCBzbjljMTAyX2RldmljZSAqKSA9IHsKKwkmc245YzEwMl9wcm9iZV9odjcxMzFkLCAvKiBzdHJvbmcgZGV0ZWN0aW9uIGJhc2VkIG9uIFNFTlNPUiBpZHMgKi8KKwkmc245YzEwMl9wcm9iZV9odjcxMzFyLCAvKiBzdHJvbmcgZGV0ZWN0aW9uIGJhc2VkIG9uIFNFTlNPUiBpZHMgKi8KKwkmc245YzEwMl9wcm9iZV9taTAzNDMsIC8qIHN0cm9uZyBkZXRlY3Rpb24gYmFzZWQgb24gU0VOU09SIGlkcyAqLworCSZzbjljMTAyX3Byb2JlX21pMDM2MCwgLyogc3Ryb25nIGRldGVjdGlvbiBiYXNlZCBvbiBTRU5TT1IgaWRzICovCisJJnNuOWMxMDJfcHJvYmVfbXQ5djExMSwgLyogc3Ryb25nIGRldGVjdGlvbiBiYXNlZCBvbiBTRU5TT1IgaWRzICovCisJJnNuOWMxMDJfcHJvYmVfcGFzMTA2YiwgLyogc3Ryb25nIGRldGVjdGlvbiBiYXNlZCBvbiBTRU5TT1IgaWRzICovCisJJnNuOWMxMDJfcHJvYmVfcGFzMjAyYmNiLCAvKiBzdHJvbmcgZGV0ZWN0aW9uIGJhc2VkIG9uIFNFTlNPUiBpZHMgKi8KKwkmc245YzEwMl9wcm9iZV9vdjc2MzAsIC8qIHN0cm9uZyBkZXRlY3Rpb24gYmFzZWQgb24gU0VOU09SIGlkcyAqLworCSZzbjljMTAyX3Byb2JlX292NzY2MCwgLyogc3Ryb25nIGRldGVjdGlvbiBiYXNlZCBvbiBTRU5TT1IgaWRzICovCisJJnNuOWMxMDJfcHJvYmVfdGFzNTExMGMxYiwgLyogZGV0ZWN0aW9uIGJhc2VkIG9uIFVTQiBwaWQvdmlkICovCisJJnNuOWMxMDJfcHJvYmVfdGFzNTExMGQsIC8qIGRldGVjdGlvbiBiYXNlZCBvbiBVU0IgcGlkL3ZpZCAqLworCSZzbjljMTAyX3Byb2JlX3RhczUxMzBkMWIsIC8qIGRldGVjdGlvbiBiYXNlZCBvbiBVU0IgcGlkL3ZpZCAqLworfTsKKwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiBzdGF0aWMgdTMyCkBAIC0xNzQ2LDcgKzE3NjYsNyBAQAogCWlmICghZG93bl9yZWFkX3RyeWxvY2soJnNuOWMxMDJfZGV2X2xvY2spKQogCQlyZXR1cm4gLUVSRVNUQVJUU1lTOwogCi0JY2FtID0gdmlkZW9fZ2V0X2RydmRhdGEodmlkZW9fZGV2ZGF0YShmaWxwKSk7CisJY2FtID0gdmlkZW9fZHJ2ZGF0YShmaWxwKTsKIAogCWlmICh3YWl0X2Zvcl9jb21wbGV0aW9uX2ludGVycnVwdGlibGUoJmNhbS0+cHJvYmUpKSB7CiAJCXVwX3JlYWQoJnNuOWMxMDJfZGV2X2xvY2spOwpAQCAtMTg0Myw3ICsxODYzLDcgQEAKIAogCWRvd25fd3JpdGUoJnNuOWMxMDJfZGV2X2xvY2spOwogCi0JY2FtID0gdmlkZW9fZ2V0X2RydmRhdGEodmlkZW9fZGV2ZGF0YShmaWxwKSk7CisJY2FtID0gdmlkZW9fZHJ2ZGF0YShmaWxwKTsKIAogCXNuOWMxMDJfc3RvcF90cmFuc2ZlcihjYW0pOwogCXNuOWMxMDJfcmVsZWFzZV9idWZmZXJzKGNhbSk7CkBAIC0xODYzLDcgKzE4ODMsNyBAQAogc3RhdGljIHNzaXplX3QKIHNuOWMxMDJfcmVhZChzdHJ1Y3QgZmlsZSogZmlscCwgY2hhciBfX3VzZXIgKiBidWYsIHNpemVfdCBjb3VudCwgbG9mZl90KiBmX3BvcykKIHsKLQlzdHJ1Y3Qgc245YzEwMl9kZXZpY2UqIGNhbSA9IHZpZGVvX2dldF9kcnZkYXRhKHZpZGVvX2RldmRhdGEoZmlscCkpOworCXN0cnVjdCBzbjljMTAyX2RldmljZSAqY2FtID0gdmlkZW9fZHJ2ZGF0YShmaWxwKTsKIAlzdHJ1Y3Qgc245YzEwMl9mcmFtZV90KiBmLCAqIGk7CiAJdW5zaWduZWQgbG9uZyBsb2NrX2ZsYWdzOwogCWxvbmcgdGltZW91dDsKQEAgLTE5ODcsNyArMjAwNyw3IEBACiAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgc245YzEwMl9wb2xsKHN0cnVjdCBmaWxlICpmaWxwLCBwb2xsX3RhYmxlICp3YWl0KQogewotCXN0cnVjdCBzbjljMTAyX2RldmljZSogY2FtID0gdmlkZW9fZ2V0X2RydmRhdGEodmlkZW9fZGV2ZGF0YShmaWxwKSk7CisJc3RydWN0IHNuOWMxMDJfZGV2aWNlICpjYW0gPSB2aWRlb19kcnZkYXRhKGZpbHApOwogCXN0cnVjdCBzbjljMTAyX2ZyYW1lX3QqIGY7CiAJdW5zaWduZWQgbG9uZyBsb2NrX2ZsYWdzOwogCXVuc2lnbmVkIGludCBtYXNrID0gMDsKQEAgLTIwNjMsNyArMjA4Myw3IEBACiAKIHN0YXRpYyBpbnQgc245YzEwMl9tbWFwKHN0cnVjdCBmaWxlKiBmaWxwLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKIHsKLQlzdHJ1Y3Qgc245YzEwMl9kZXZpY2UqIGNhbSA9IHZpZGVvX2dldF9kcnZkYXRhKHZpZGVvX2RldmRhdGEoZmlscCkpOworCXN0cnVjdCBzbjljMTAyX2RldmljZSAqY2FtID0gdmlkZW9fZHJ2ZGF0YShmaWxwKTsKIAl1bnNpZ25lZCBsb25nIHNpemUgPSB2bWEtPnZtX2VuZCAtIHZtYS0+dm1fc3RhcnQsCiAJCSAgICAgIHN0YXJ0ID0gdm1hLT52bV9zdGFydDsKIAl2b2lkICpwb3M7CkBAIC0zMDc1LDcgKzMwOTUsNyBAQAogc3RhdGljIGludCBzbjljMTAyX2lvY3RsX3Y0bDIoc3RydWN0IGlub2RlKiBpbm9kZSwgc3RydWN0IGZpbGUqIGZpbHAsCiAJCQkgICAgICB1bnNpZ25lZCBpbnQgY21kLCB2b2lkIF9fdXNlciAqIGFyZykKIHsKLQlzdHJ1Y3Qgc245YzEwMl9kZXZpY2UqIGNhbSA9IHZpZGVvX2dldF9kcnZkYXRhKHZpZGVvX2RldmRhdGEoZmlscCkpOworCXN0cnVjdCBzbjljMTAyX2RldmljZSAqY2FtID0gdmlkZW9fZHJ2ZGF0YShmaWxwKTsKIAogCXN3aXRjaCAoY21kKSB7CiAKQEAgLTMxNzksNyArMzE5OSw3IEBACiBzdGF0aWMgaW50IHNuOWMxMDJfaW9jdGwoc3RydWN0IGlub2RlKiBpbm9kZSwgc3RydWN0IGZpbGUqIGZpbHAsCiAJCQkgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCiB7Ci0Jc3RydWN0IHNuOWMxMDJfZGV2aWNlKiBjYW0gPSB2aWRlb19nZXRfZHJ2ZGF0YSh2aWRlb19kZXZkYXRhKGZpbHApKTsKKwlzdHJ1Y3Qgc245YzEwMl9kZXZpY2UgKmNhbSA9IHZpZGVvX2RydmRhdGEoZmlscCk7CiAJaW50IGVyciA9IDA7CiAKIAlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZjYW0tPmZpbGVvcF9tdXRleCkpCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NuOWMxMDIvc245YzEwMl9kZXZ0YWJsZS5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9zbjljMTAyL3NuOWMxMDJfZGV2dGFibGUuaAppbmRleCA5MGE0MDFkLi5lMjM3MzRmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NuOWMxMDIvc245YzEwMl9kZXZ0YWJsZS5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc245YzEwMi9zbjljMTAyX2RldnRhYmxlLmgKQEAgLTE0MCwyNCArMTQwLDQgQEAKIGV4dGVybiBpbnQgc245YzEwMl9wcm9iZV90YXM1MTEwZChzdHJ1Y3Qgc245YzEwMl9kZXZpY2UqIGNhbSk7CiBleHRlcm4gaW50IHNuOWMxMDJfcHJvYmVfdGFzNTEzMGQxYihzdHJ1Y3Qgc245YzEwMl9kZXZpY2UqIGNhbSk7CiAKLS8qCi0gICBBZGQgdGhlIGFib3ZlIGVudHJpZXMgdG8gdGhpcyB0YWJsZS4gQmUgc3VyZSB0byBhZGQgdGhlIGVudHJ5IGluIHRoZSByaWdodAotICAgcGxhY2UsIHNpbmNlLCBvbiBmYWlsdXJlLCB0aGUgbmV4dCBwcm9iaW5nIHJvdXRpbmUgaXMgY2FsbGVkIGFjY29yZGluZyB0bwotICAgdGhlIG9yZGVyIG9mIHRoZSBsaXN0IGJlbG93LCBmcm9tIHRvcCB0byBib3R0b20uCi0qLwotc3RhdGljIGludCAoKnNuOWMxMDJfc2Vuc29yX3RhYmxlW10pKHN0cnVjdCBzbjljMTAyX2RldmljZSopID0gewotCSZzbjljMTAyX3Byb2JlX2h2NzEzMWQsIC8qIHN0cm9uZyBkZXRlY3Rpb24gYmFzZWQgb24gU0VOU09SIGlkcyAqLwotCSZzbjljMTAyX3Byb2JlX2h2NzEzMXIsIC8qIHN0cm9uZyBkZXRlY3Rpb24gYmFzZWQgb24gU0VOU09SIGlkcyAqLwotCSZzbjljMTAyX3Byb2JlX21pMDM0MywgLyogc3Ryb25nIGRldGVjdGlvbiBiYXNlZCBvbiBTRU5TT1IgaWRzICovCi0JJnNuOWMxMDJfcHJvYmVfbWkwMzYwLCAvKiBzdHJvbmcgZGV0ZWN0aW9uIGJhc2VkIG9uIFNFTlNPUiBpZHMgKi8KLQkmc245YzEwMl9wcm9iZV9tdDl2MTExLCAvKiBzdHJvbmcgZGV0ZWN0aW9uIGJhc2VkIG9uIFNFTlNPUiBpZHMgKi8KLQkmc245YzEwMl9wcm9iZV9wYXMxMDZiLCAvKiBzdHJvbmcgZGV0ZWN0aW9uIGJhc2VkIG9uIFNFTlNPUiBpZHMgKi8KLQkmc245YzEwMl9wcm9iZV9wYXMyMDJiY2IsIC8qIHN0cm9uZyBkZXRlY3Rpb24gYmFzZWQgb24gU0VOU09SIGlkcyAqLwotCSZzbjljMTAyX3Byb2JlX292NzYzMCwgLyogc3Ryb25nIGRldGVjdGlvbiBiYXNlZCBvbiBTRU5TT1IgaWRzICovCi0JJnNuOWMxMDJfcHJvYmVfb3Y3NjYwLCAvKiBzdHJvbmcgZGV0ZWN0aW9uIGJhc2VkIG9uIFNFTlNPUiBpZHMgKi8KLQkmc245YzEwMl9wcm9iZV90YXM1MTEwYzFiLCAvKiBkZXRlY3Rpb24gYmFzZWQgb24gVVNCIHBpZC92aWQgKi8KLQkmc245YzEwMl9wcm9iZV90YXM1MTEwZCwgLyogZGV0ZWN0aW9uIGJhc2VkIG9uIFVTQiBwaWQvdmlkICovCi0JJnNuOWMxMDJfcHJvYmVfdGFzNTEzMGQxYiwgLyogZGV0ZWN0aW9uIGJhc2VkIG9uIFVTQiBwaWQvdmlkICovCi19OwotCiAjZW5kaWYgLyogX1NOOUMxMDJfREVWVEFCTEVfSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc245YzEwMi9zbjljMTAyX2h2NzEzMWQuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc245YzEwMi9zbjljMTAyX2h2NzEzMWQuYwppbmRleCBlYWY5YWQwLi5kYjI0MzQ5IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NuOWMxMDIvc245YzEwMl9odjcxMzFkLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zbjljMTAyL3NuOWMxMDJfaHY3MTMxZC5jCkBAIC0yMCw2ICsyMCw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAjaW5jbHVkZSAic245YzEwMl9zZW5zb3IuaCIKKyNpbmNsdWRlICJzbjljMTAyX2RldnRhYmxlLmgiCiAKIAogc3RhdGljIGludCBodjcxMzFkX2luaXQoc3RydWN0IHNuOWMxMDJfZGV2aWNlKiBjYW0pCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NuOWMxMDIvc245YzEwMl9odjcxMzFyLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NuOWMxMDIvc245YzEwMl9odjcxMzFyLmMKaW5kZXggMGZjNDAxMi4uNDI5NTg4NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zbjljMTAyL3NuOWMxMDJfaHY3MTMxci5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc245YzEwMi9zbjljMTAyX2h2NzEzMXIuYwpAQCAtMjAsNiArMjAsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogI2luY2x1ZGUgInNuOWMxMDJfc2Vuc29yLmgiCisjaW5jbHVkZSAic245YzEwMl9kZXZ0YWJsZS5oIgogCiAKIHN0YXRpYyBpbnQgaHY3MTMxcl9pbml0KHN0cnVjdCBzbjljMTAyX2RldmljZSogY2FtKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zbjljMTAyL3NuOWMxMDJfbWkwMzQzLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NuOWMxMDIvc245YzEwMl9taTAzNDMuYwppbmRleCAwMGIxMzRjLi4xZjViMDliIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NuOWMxMDIvc245YzEwMl9taTAzNDMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NuOWMxMDIvc245YzEwMl9taTAzNDMuYwpAQCAtMjAsNiArMjAsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogI2luY2x1ZGUgInNuOWMxMDJfc2Vuc29yLmgiCisjaW5jbHVkZSAic245YzEwMl9kZXZ0YWJsZS5oIgogCiAKIHN0YXRpYyBpbnQgbWkwMzQzX2luaXQoc3RydWN0IHNuOWMxMDJfZGV2aWNlKiBjYW0pCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NuOWMxMDIvc245YzEwMl9taTAzNjAuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc245YzEwMi9zbjljMTAyX21pMDM2MC5jCmluZGV4IGY4ZDgxZDguLmQ5NzNmYzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc245YzEwMi9zbjljMTAyX21pMDM2MC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc245YzEwMi9zbjljMTAyX21pMDM2MC5jCkBAIC0yMCw2ICsyMCw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAjaW5jbHVkZSAic245YzEwMl9zZW5zb3IuaCIKKyNpbmNsdWRlICJzbjljMTAyX2RldnRhYmxlLmgiCiAKIAogc3RhdGljIGludCBtaTAzNjBfaW5pdChzdHJ1Y3Qgc245YzEwMl9kZXZpY2UqIGNhbSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc245YzEwMi9zbjljMTAyX210OXYxMTEuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc245YzEwMi9zbjljMTAyX210OXYxMTEuYwppbmRleCAzYjk4YWMzLi45NTk4NmViIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NuOWMxMDIvc245YzEwMl9tdDl2MTExLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zbjljMTAyL3NuOWMxMDJfbXQ5djExMS5jCkBAIC0yMCw2ICsyMCw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAjaW5jbHVkZSAic245YzEwMl9zZW5zb3IuaCIKKyNpbmNsdWRlICJzbjljMTAyX2RldnRhYmxlLmgiCiAKIAogc3RhdGljIGludCBtdDl2MTExX2luaXQoc3RydWN0IHNuOWMxMDJfZGV2aWNlICpjYW0pCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NuOWMxMDIvc245YzEwMl9vdjc2MzAuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc245YzEwMi9zbjljMTAyX292NzYzMC5jCmluZGV4IGU0ODU2ZmQuLjgwMzcxMmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc245YzEwMi9zbjljMTAyX292NzYzMC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc245YzEwMi9zbjljMTAyX292NzYzMC5jCkBAIC0yMCw2ICsyMCw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAjaW5jbHVkZSAic245YzEwMl9zZW5zb3IuaCIKKyNpbmNsdWRlICJzbjljMTAyX2RldnRhYmxlLmgiCiAKIAogc3RhdGljIGludCBvdjc2MzBfaW5pdChzdHJ1Y3Qgc245YzEwMl9kZXZpY2UqIGNhbSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc245YzEwMi9zbjljMTAyX292NzY2MC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9zbjljMTAyL3NuOWMxMDJfb3Y3NjYwLmMKaW5kZXggOGFhZTQxNi4uNzk3Nzc5NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zbjljMTAyL3NuOWMxMDJfb3Y3NjYwLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zbjljMTAyL3NuOWMxMDJfb3Y3NjYwLmMKQEAgLTIwLDYgKzIwLDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKICNpbmNsdWRlICJzbjljMTAyX3NlbnNvci5oIgorI2luY2x1ZGUgInNuOWMxMDJfZGV2dGFibGUuaCIKIAogCiBzdGF0aWMgaW50IG92NzY2MF9pbml0KHN0cnVjdCBzbjljMTAyX2RldmljZSogY2FtKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zbjljMTAyL3NuOWMxMDJfcGFzMTA2Yi5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9zbjljMTAyL3NuOWMxMDJfcGFzMTA2Yi5jCmluZGV4IDM2MGYyYTguLjgxY2Q5NjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc245YzEwMi9zbjljMTAyX3BhczEwNmIuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NuOWMxMDIvc245YzEwMl9wYXMxMDZiLmMKQEAgLTIxLDYgKzIxLDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSAic245YzEwMl9zZW5zb3IuaCIKKyNpbmNsdWRlICJzbjljMTAyX2RldnRhYmxlLmgiCiAKIAogc3RhdGljIGludCBwYXMxMDZiX2luaXQoc3RydWN0IHNuOWMxMDJfZGV2aWNlKiBjYW0pCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NuOWMxMDIvc245YzEwMl9wYXMyMDJiY2IuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc245YzEwMi9zbjljMTAyX3BhczIwMmJjYi5jCmluZGV4IGNhNGExNTAuLjI3ODJmOTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc245YzEwMi9zbjljMTAyX3BhczIwMmJjYi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc245YzEwMi9zbjljMTAyX3BhczIwMmJjYi5jCkBAIC0yNiw2ICsyNiw3IEBACiAKICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgInNuOWMxMDJfc2Vuc29yLmgiCisjaW5jbHVkZSAic245YzEwMl9kZXZ0YWJsZS5oIgogCiAKIHN0YXRpYyBpbnQgcGFzMjAyYmNiX2luaXQoc3RydWN0IHNuOWMxMDJfZGV2aWNlKiBjYW0pCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NuOWMxMDIvc245YzEwMl90YXM1MTEwYzFiLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NuOWMxMDIvc245YzEwMl90YXM1MTEwYzFiLmMKaW5kZXggZTdkMmRlMi4uMDRjZGZkZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zbjljMTAyL3NuOWMxMDJfdGFzNTExMGMxYi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc245YzEwMi9zbjljMTAyX3RhczUxMTBjMWIuYwpAQCAtMjAsNiArMjAsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogI2luY2x1ZGUgInNuOWMxMDJfc2Vuc29yLmgiCisjaW5jbHVkZSAic245YzEwMl9kZXZ0YWJsZS5oIgogCiAKIHN0YXRpYyBpbnQgdGFzNTExMGMxYl9pbml0KHN0cnVjdCBzbjljMTAyX2RldmljZSogY2FtKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zbjljMTAyL3NuOWMxMDJfdGFzNTExMGQuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc245YzEwMi9zbjljMTAyX3RhczUxMTBkLmMKaW5kZXggZDMyZmRiYy4uOTM3MmU2ZjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc245YzEwMi9zbjljMTAyX3RhczUxMTBkLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zbjljMTAyL3NuOWMxMDJfdGFzNTExMGQuYwpAQCAtMjAsNiArMjAsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogI2luY2x1ZGUgInNuOWMxMDJfc2Vuc29yLmgiCisjaW5jbHVkZSAic245YzEwMl9kZXZ0YWJsZS5oIgogCiAKIHN0YXRpYyBpbnQgdGFzNTExMGRfaW5pdChzdHJ1Y3Qgc245YzEwMl9kZXZpY2UqIGNhbSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc245YzEwMi9zbjljMTAyX3RhczUxMzBkMWIuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc245YzEwMi9zbjljMTAyX3RhczUxMzBkMWIuYwppbmRleCA1NmZiMWQ1Li5hMzBiYmM0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NuOWMxMDIvc245YzEwMl90YXM1MTMwZDFiLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zbjljMTAyL3NuOWMxMDJfdGFzNTEzMGQxYi5jCkBAIC0yMCw2ICsyMCw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAjaW5jbHVkZSAic245YzEwMl9zZW5zb3IuaCIKKyNpbmNsdWRlICJzbjljMTAyX2RldnRhYmxlLmgiCiAKIAogc3RhdGljIGludCB0YXM1MTMwZDFiX2luaXQoc3RydWN0IHNuOWMxMDJfZGV2aWNlKiBjYW0pCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NvY19jYW1lcmFfcGxhdGZvcm0uYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc29jX2NhbWVyYV9wbGF0Zm9ybS5jCmluZGV4IDFhZGMyNTcuLmJiN2E5ZDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc29jX2NhbWVyYV9wbGF0Zm9ybS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc29jX2NhbWVyYV9wbGF0Zm9ybS5jCkBAIC0xOCwxNSArMTgsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Mi5oPgogI2luY2x1ZGUgPG1lZGlhL3Y0bDItY29tbW9uLmg+CiAjaW5jbHVkZSA8bWVkaWEvc29jX2NhbWVyYS5oPgotCi1zdHJ1Y3Qgc29jX2NhbWVyYV9wbGF0Zm9ybV9pbmZvIHsKLQlpbnQgaWZhY2U7Ci0JY2hhciAqZm9ybWF0X25hbWU7Ci0JdW5zaWduZWQgbG9uZyBmb3JtYXRfZGVwdGg7Ci0Jc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCBmb3JtYXQ7Ci0JdW5zaWduZWQgbG9uZyBidXNfcGFyYW07Ci0JaW50ICgqc2V0X2NhcHR1cmUpKHN0cnVjdCBzb2NfY2FtZXJhX3BsYXRmb3JtX2luZm8gKmluZm8sIGludCBlbmFibGUpOwotfTsKKyNpbmNsdWRlIDxtZWRpYS9zb2NfY2FtZXJhX3BsYXRmb3JtLmg+CiAKIHN0cnVjdCBzb2NfY2FtZXJhX3BsYXRmb3JtX3ByaXYgewogCXN0cnVjdCBzb2NfY2FtZXJhX3BsYXRmb3JtX2luZm8gKmluZm87CkBAIC00NCwxMSArMzYsMjEgQEAKIAogc3RhdGljIGludCBzb2NfY2FtZXJhX3BsYXRmb3JtX2luaXQoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QpCiB7CisJc3RydWN0IHNvY19jYW1lcmFfcGxhdGZvcm1faW5mbyAqcCA9IHNvY19jYW1lcmFfcGxhdGZvcm1fZ2V0X2luZm8oaWNkKTsKKworCWlmIChwLT5wb3dlcikKKwkJcC0+cG93ZXIoMSk7CisKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBzb2NfY2FtZXJhX3BsYXRmb3JtX3JlbGVhc2Uoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QpCiB7CisJc3RydWN0IHNvY19jYW1lcmFfcGxhdGZvcm1faW5mbyAqcCA9IHNvY19jYW1lcmFfcGxhdGZvcm1fZ2V0X2luZm8oaWNkKTsKKworCWlmIChwLT5wb3dlcikKKwkJcC0+cG93ZXIoMCk7CisKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zdGstd2ViY2FtLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3N0ay13ZWJjYW0uYwppbmRleCBhZDM2YWYzLi5lZGFlYTQ5IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3N0ay13ZWJjYW0uYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3N0ay13ZWJjYW0uYwpAQCAtMjcsNyArMjcsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgotI2luY2x1ZGUgPGxpbnV4L2tyZWYuaD4KIAogI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CkBAIC02NSwyMiArNjQsNiBAQAogfTsKIE1PRFVMRV9ERVZJQ0VfVEFCTEUodXNiLCBzdGt3ZWJjYW1fdGFibGUpOwogCi1zdGF0aWMgdm9pZCBzdGtfY2FtZXJhX2NsZWFudXAoc3RydWN0IGtyZWYgKmtyZWYpCi17Ci0Jc3RydWN0IHN0a19jYW1lcmEgKmRldiA9IHRvX3N0a19jYW1lcmEoa3JlZik7Ci0KLQlTVEtfSU5GTygiU3ludGVrIFVTQjIuMCBDYW1lcmEgcmVsZWFzZSByZXNvdXJjZXMiCi0JCSIgdmlkZW8gZGV2aWNlIC9kZXYvdmlkZW8lZFxuIiwgZGV2LT52ZGV2Lm1pbm9yKTsKLQl2aWRlb191bnJlZ2lzdGVyX2RldmljZSgmZGV2LT52ZGV2KTsKLQlkZXYtPnZkZXYucHJpdiA9IE5VTEw7Ci0KLQlpZiAoZGV2LT5zaW9fYnVmcyAhPSBOVUxMIHx8IGRldi0+aXNvYnVmcyAhPSBOVUxMKQotCQlTVEtfRVJST1IoIldlIGFyZSBsZWFraW5nIG1lbW9yeVxuIik7Ci0JdXNiX3B1dF9pbnRmKGRldi0+aW50ZXJmYWNlKTsKLQlrZnJlZShkZXYpOwotfQotCi0KIC8qCiAgKiBCYXNpYyBzdHVmZgogICovCkBAIC01NzYsNyArNTU5LDcgQEAKIAogCQl1cmIgPSBkZXYtPmlzb2J1ZnNbaV0udXJiOwogCQlpZiAodXJiKSB7Ci0JCQlpZiAoYXRvbWljX3JlYWQoJmRldi0+dXJic191c2VkKSkKKwkJCWlmIChhdG9taWNfcmVhZCgmZGV2LT51cmJzX3VzZWQpICYmIGlzX3ByZXNlbnQoZGV2KSkKIAkJCQl1c2Jfa2lsbF91cmIodXJiKTsKIAkJCXVzYl9mcmVlX3VyYih1cmIpOwogCQl9CkBAIC02ODksNDUgKzY3MiwzMCBAQAogCXZkZXYgPSB2aWRlb19kZXZkYXRhKGZwKTsKIAlkZXYgPSB2ZGV2X3RvX2NhbWVyYSh2ZGV2KTsKIAotCWlmIChkZXYgPT0gTlVMTCB8fCAhaXNfcHJlc2VudChkZXYpKQorCWxvY2tfa2VybmVsKCk7CisJaWYgKGRldiA9PSBOVUxMIHx8ICFpc19wcmVzZW50KGRldikpIHsKKwkJdW5sb2NrX2tlcm5lbCgpOwogCQlyZXR1cm4gLUVOWElPOwotCWZwLT5wcml2YXRlX2RhdGEgPSB2ZGV2OwotCWtyZWZfZ2V0KCZkZXYtPmtyZWYpOworCX0KKwlmcC0+cHJpdmF0ZV9kYXRhID0gZGV2OwogCXVzYl9hdXRvcG1fZ2V0X2ludGVyZmFjZShkZXYtPmludGVyZmFjZSk7CisJdW5sb2NrX2tlcm5lbCgpOwogCiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgdjRsX3N0a19yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmcCkKIHsKLQlzdHJ1Y3Qgc3RrX2NhbWVyYSAqZGV2OwotCXN0cnVjdCB2aWRlb19kZXZpY2UgKnZkZXY7CisJc3RydWN0IHN0a19jYW1lcmEgKmRldiA9IGZwLT5wcml2YXRlX2RhdGE7CiAKLQl2ZGV2ID0gdmlkZW9fZGV2ZGF0YShmcCk7Ci0JaWYgKHZkZXYgPT0gTlVMTCkgewotCQlTVEtfRVJST1IoInY0bF9yZWxlYXNlIGNhbGxlZCB3L28gdmlkZW8gZGV2ZGF0YVxuIik7Ci0JCXJldHVybiAtRUZBVUxUOwotCX0KLQlkZXYgPSB2ZGV2X3RvX2NhbWVyYSh2ZGV2KTsKLQlpZiAoZGV2ID09IE5VTEwpIHsKLQkJU1RLX0VSUk9SKCJ2NGxfcmVsZWFzZSBjYWxsZWQgb24gcmVtb3ZlZCBkZXZpY2VcbiIpOwotCQlyZXR1cm4gLUVOT0RFVjsKKwlpZiAoZGV2LT5vd25lciA9PSBmcCkgeworCQlzdGtfc3RvcF9zdHJlYW0oZGV2KTsKKwkJc3RrX2ZyZWVfYnVmZmVycyhkZXYpOworCQlkZXYtPm93bmVyID0gTlVMTDsKIAl9CiAKLQlpZiAoZGV2LT5vd25lciAhPSBmcCkgeworCWlmKGlzX3ByZXNlbnQoZGV2KSkKIAkJdXNiX2F1dG9wbV9wdXRfaW50ZXJmYWNlKGRldi0+aW50ZXJmYWNlKTsKLQkJa3JlZl9wdXQoJmRldi0+a3JlZiwgc3RrX2NhbWVyYV9jbGVhbnVwKTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0Jc3RrX3N0b3Bfc3RyZWFtKGRldik7Ci0KLQlzdGtfZnJlZV9idWZmZXJzKGRldik7Ci0KLQlkZXYtPm93bmVyID0gTlVMTDsKLQotCXVzYl9hdXRvcG1fcHV0X2ludGVyZmFjZShkZXYtPmludGVyZmFjZSk7Ci0Ja3JlZl9wdXQoJmRldi0+a3JlZiwgc3RrX2NhbWVyYV9jbGVhbnVwKTsKIAogCXJldHVybiAwOwogfQpAQCAtNzM4LDE3ICs3MDYsOCBAQAogCWludCBpOwogCWludCByZXQ7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQlzdHJ1Y3Qgc3RrX2NhbWVyYSAqZGV2OwotCXN0cnVjdCB2aWRlb19kZXZpY2UgKnZkZXY7CiAJc3RydWN0IHN0a19zaW9fYnVmZmVyICpzYnVmOwotCi0JdmRldiA9IHZpZGVvX2RldmRhdGEoZnApOwotCWlmICh2ZGV2ID09IE5VTEwpCi0JCXJldHVybiAtRUZBVUxUOwotCWRldiA9IHZkZXZfdG9fY2FtZXJhKHZkZXYpOwotCi0JaWYgKGRldiA9PSBOVUxMKQotCQlyZXR1cm4gLUVJTzsKKwlzdHJ1Y3Qgc3RrX2NhbWVyYSAqZGV2ID0gZnAtPnByaXZhdGVfZGF0YTsKIAogCWlmICghaXNfcHJlc2VudChkZXYpKQogCQlyZXR1cm4gLUVJTzsKQEAgLTgwNCwxNyArNzYzLDcgQEAKIAogc3RhdGljIHVuc2lnbmVkIGludCB2NGxfc3RrX3BvbGwoc3RydWN0IGZpbGUgKmZwLCBwb2xsX3RhYmxlICp3YWl0KQogewotCXN0cnVjdCBzdGtfY2FtZXJhICpkZXY7Ci0Jc3RydWN0IHZpZGVvX2RldmljZSAqdmRldjsKLQotCXZkZXYgPSB2aWRlb19kZXZkYXRhKGZwKTsKLQotCWlmICh2ZGV2ID09IE5VTEwpCi0JCXJldHVybiAtRUZBVUxUOwotCi0JZGV2ID0gdmRldl90b19jYW1lcmEodmRldik7Ci0JaWYgKGRldiA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT0RFVjsKKwlzdHJ1Y3Qgc3RrX2NhbWVyYSAqZGV2ID0gZnAtPnByaXZhdGVfZGF0YTsKIAogCXBvbGxfd2FpdChmcCwgJmRldi0+d2FpdF9mcmFtZSwgd2FpdCk7CiAKQEAgLTg1MCwxNiArNzk5LDEyIEBACiAJdW5zaWduZWQgaW50IGk7CiAJaW50IHJldDsKIAl1bnNpZ25lZCBsb25nIG9mZnNldCA9IHZtYS0+dm1fcGdvZmYgPDwgUEFHRV9TSElGVDsKLQlzdHJ1Y3Qgc3RrX2NhbWVyYSAqZGV2OwotCXN0cnVjdCB2aWRlb19kZXZpY2UgKnZkZXY7CisJc3RydWN0IHN0a19jYW1lcmEgKmRldiA9IGZwLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IHN0a19zaW9fYnVmZmVyICpzYnVmID0gTlVMTDsKIAogCWlmICghKHZtYS0+dm1fZmxhZ3MgJiBWTV9XUklURSkgfHwgISh2bWEtPnZtX2ZsYWdzICYgVk1fU0hBUkVEKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQl2ZGV2ID0gdmlkZW9fZGV2ZGF0YShmcCk7Ci0JZGV2ID0gdmRldl90b19jYW1lcmEodmRldik7Ci0KIAlmb3IgKGkgPSAwOyBpIDwgZGV2LT5uX3NidWZzOyBpKyspIHsKIAkJaWYgKGRldi0+c2lvX2J1ZnNbaV0udjRsYnVmLm0ub2Zmc2V0ID09IG9mZnNldCkgewogCQkJc2J1ZiA9IGRldi0+c2lvX2J1ZnMgKyBpOwpAQCAtMTM1NSw2ICsxMzAwLDEyIEBACiAKIHN0YXRpYyB2b2lkIHN0a192NGxfZGV2X3JlbGVhc2Uoc3RydWN0IHZpZGVvX2RldmljZSAqdmQpCiB7CisJc3RydWN0IHN0a19jYW1lcmEgKmRldiA9IHZkZXZfdG9fY2FtZXJhKHZkKTsKKworCWlmIChkZXYtPnNpb19idWZzICE9IE5VTEwgfHwgZGV2LT5pc29idWZzICE9IE5VTEwpCisJCVNUS19FUlJPUigiV2UgYXJlIGxlYWtpbmcgbWVtb3J5XG4iKTsKKwl1c2JfcHV0X2ludGYoZGV2LT5pbnRlcmZhY2UpOworCWtmcmVlKGRldik7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgdmlkZW9fZGV2aWNlIHN0a192NGxfZGF0YSA9IHsKQEAgLTEzNzUsNyArMTMyNiw2IEBACiAJZGV2LT52ZGV2ID0gc3RrX3Y0bF9kYXRhOwogCWRldi0+dmRldi5kZWJ1ZyA9IGRlYnVnOwogCWRldi0+dmRldi5wYXJlbnQgPSAmZGV2LT5pbnRlcmZhY2UtPmRldjsKLQlkZXYtPnZkZXYucHJpdiA9IGRldjsKIAllcnIgPSB2aWRlb19yZWdpc3Rlcl9kZXZpY2UoJmRldi0+dmRldiwgVkZMX1RZUEVfR1JBQkJFUiwgLTEpOwogCWlmIChlcnIpCiAJCVNUS19FUlJPUigidjRsIHJlZ2lzdHJhdGlvbiBmYWlsZWRcbiIpOwpAQCAtMTM5Miw3ICsxMzQyLDcgQEAKIAkJY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQogewogCWludCBpOwotCWludCBlcnI7CisJaW50IGVyciA9IDA7CiAKIAlzdHJ1Y3Qgc3RrX2NhbWVyYSAqZGV2ID0gTlVMTDsKIAlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiA9IGludGVyZmFjZV90b191c2JkZXYoaW50ZXJmYWNlKTsKQEAgLTE0MDUsNyArMTM1NSw2IEBACiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAotCWtyZWZfaW5pdCgmZGV2LT5rcmVmKTsKIAlzcGluX2xvY2tfaW5pdCgmZGV2LT5zcGlubG9jayk7CiAJaW5pdF93YWl0cXVldWVfaGVhZCgmZGV2LT53YWl0X2ZyYW1lKTsKIApAQCAtMTQzOCw4ICsxMzg3LDggQEAKIAl9CiAJaWYgKCFkZXYtPmlzb2NfZXApIHsKIAkJU1RLX0VSUk9SKCJDb3VsZCBub3QgZmluZCBpc29jLWluIGVuZHBvaW50Iik7Ci0JCWtyZWZfcHV0KCZkZXYtPmtyZWYsIHN0a19jYW1lcmFfY2xlYW51cCk7Ci0JCXJldHVybiAtRU5PREVWOworCQllcnIgPSAtRU5PREVWOworCQlnb3RvIGVycm9yOwogCX0KIAlkZXYtPnZzZXR0aW5ncy5icmlnaHRuZXNzID0gMHg3ZmZmOwogCWRldi0+dnNldHRpbmdzLnBhbGV0dGUgPSBWNEwyX1BJWF9GTVRfUkdCNTY1OwpAQCAtMTQ1MywxNCArMTQwMiwxNyBAQAogCiAJZXJyID0gc3RrX3JlZ2lzdGVyX3ZpZGVvX2RldmljZShkZXYpOwogCWlmIChlcnIpIHsKLQkJa3JlZl9wdXQoJmRldi0+a3JlZiwgc3RrX2NhbWVyYV9jbGVhbnVwKTsKLQkJcmV0dXJuIGVycjsKKwkJZ290byBlcnJvcjsKIAl9CiAKIAlzdGtfY3JlYXRlX3N5c2ZzX2ZpbGVzKCZkZXYtPnZkZXYpOwogCXVzYl9hdXRvcG1fZW5hYmxlKGRldi0+aW50ZXJmYWNlKTsKIAogCXJldHVybiAwOworCitlcnJvcjoKKwlrZnJlZShkZXYpOworCXJldHVybiBlcnI7CiB9CiAKIHN0YXRpYyB2b2lkIHN0a19jYW1lcmFfZGlzY29ubmVjdChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlKQpAQCAtMTQ3Myw3ICsxNDI1LDEwIEBACiAJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZkZXYtPndhaXRfZnJhbWUpOwogCXN0a19yZW1vdmVfc3lzZnNfZmlsZXMoJmRldi0+dmRldik7CiAKLQlrcmVmX3B1dCgmZGV2LT5rcmVmLCBzdGtfY2FtZXJhX2NsZWFudXApOworCVNUS19JTkZPKCJTeW50ZWsgVVNCMi4wIENhbWVyYSByZWxlYXNlIHJlc291cmNlcyAiCisJCSJ2aWRlbyBkZXZpY2UgL2Rldi92aWRlbyVkXG4iLCBkZXYtPnZkZXYubWlub3IpOworCisJdmlkZW9fdW5yZWdpc3Rlcl9kZXZpY2UoJmRldi0+dmRldik7CiB9CiAKICNpZmRlZiBDT05GSUdfUE0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc3RrLXdlYmNhbS5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9zdGstd2ViY2FtLmgKaW5kZXggZGY0ZGZlZi4uOWY2NzM2NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zdGstd2ViY2FtLmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zdGstd2ViY2FtLmgKQEAgLTk5LDcgKzk5LDYgQEAKIAogCXU4IGlzb2NfZXA7CiAKLQlzdHJ1Y3Qga3JlZiBrcmVmOwogCS8qIE5vdCBzdXJlIGlmIHRoaXMgaXMgcmlnaHQgKi8KIAlhdG9taWNfdCB1cmJzX3VzZWQ7CiAKQEAgLTEyMSwxMCArMTIwLDggQEAKIAl1bnNpZ25lZCBzZXF1ZW5jZTsKIH07CiAKLSNkZWZpbmUgdG9fc3RrX2NhbWVyYShkKSBjb250YWluZXJfb2YoZCwgc3RydWN0IHN0a19jYW1lcmEsIGtyZWYpCiAjZGVmaW5lIHZkZXZfdG9fY2FtZXJhKGQpIGNvbnRhaW5lcl9vZihkLCBzdHJ1Y3Qgc3RrX2NhbWVyYSwgdmRldikKIAotdm9pZCBzdGtfY2FtZXJhX2RlbGV0ZShzdHJ1Y3Qga3JlZiAqKTsKIGludCBzdGtfY2FtZXJhX3dyaXRlX3JlZyhzdHJ1Y3Qgc3RrX2NhbWVyYSAqLCB1MTYsIHU4KTsKIGludCBzdGtfY2FtZXJhX3JlYWRfcmVnKHN0cnVjdCBzdGtfY2FtZXJhICosIHUxNiwgaW50ICopOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3N0cmFkaXMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc3RyYWRpcy5jCmluZGV4IDI3NmJkZWQuLmJiYWQ1NGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc3RyYWRpcy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc3RyYWRpcy5jCkBAIC0xODgyLDEyICsxODgyLDE2IEBACiAJc3RydWN0IHZpZGVvX2RldmljZSAqdmRldiA9IHZpZGVvX2RldmRhdGEoZmlsZSk7CiAJc3RydWN0IHNhYTcxNDYgKnNhYSA9IGNvbnRhaW5lcl9vZih2ZGV2LCBzdHJ1Y3Qgc2FhNzE0NiwgdmlkZW9fZGV2KTsKIAorCWxvY2tfa2VybmVsKCk7CiAJZmlsZS0+cHJpdmF0ZV9kYXRhID0gc2FhOwogCiAJc2FhLT51c2VyKys7Ci0JaWYgKHNhYS0+dXNlciA+IDEpCisJaWYgKHNhYS0+dXNlciA+IDEpIHsKKwkJdW5sb2NrX2tlcm5lbCgpOwogCQlyZXR1cm4gMDsJLyogZGV2aWNlIG9wZW4gYWxyZWFkeSwgZG9uJ3QgcmVzZXQgKi8KKwl9CiAJc2FhLT53cml0ZW1vZGUgPSBWSURfV1JJVEVfTVBFR19WSUQ7CS8qIGRlZmF1bHQgdG8gdmlkZW8gKi8KKwl1bmxvY2tfa2VybmVsKCk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTE5MjEsNiArMTkyNSw3IEBACiAJLm5hbWUgPSAiU0FBNzE0NkEiLAogCS5mb3BzID0gJnNhYV9mb3BzLAogCS5taW5vciA9IC0xLAorCS5yZWxlYXNlID0gdmlkZW9fZGV2aWNlX3JlbGVhc2VfZW1wdHksCiB9OwogCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBjb25maWd1cmVfc2FhNzE0NihzdHJ1Y3QgcGNpX2RldiAqcGRldiwgaW50IG51bSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc3R2NjgwLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3N0djY4MC5jCmluZGV4IGRjZTk0NzQuLjljNTQ5ZDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc3R2NjgwLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zdHY2ODAuYwpAQCAtODQsNyArODQsOCBAQAogI2RlZmluZSBQREVCVUcobGV2ZWwsIGZtdCwgYXJncy4uLikgXAogCWRvIHsgXAogCWlmIChkZWJ1ZyA+PSBsZXZlbCkJXAotCQlpbmZvKCJbJXM6JWRdICIgZm10LCBfX2Z1bmNfXywgX19MSU5FX18gLCAjIyBhcmdzKTsJXAorCQlwcmludGsoS0VSTl9JTkZPIEtCVUlMRF9NT0ROQU1FICIgWyVzOiVkXSBcbiIgZm10LAlcCisJCQlfX2Z1bmNfXywgX19MSU5FX18gLCAjIyBhcmdzKTsJXAogCX0gd2hpbGUgKDApCiAKIApAQCAtMTA4Niw2ICsxMDg3LDcgQEAKIAlpbnQgZXJyID0gMDsKIAogCS8qIHdlIGFyZSBjYWxsZWQgd2l0aCB0aGUgQktMIGhlbGQgKi8KKwlsb2NrX2tlcm5lbCgpOwogCXN0djY4MC0+dXNlciA9IDE7CiAJZXJyID0gc3R2X2luaXQgKHN0djY4MCk7CS8qIG1haW4gaW5pdGlhbGl6YXRpb24gcm91dGluZSBmb3IgY2FtZXJhICovCiAKQEAgLTEwOTksNiArMTEwMSw3IEBACiAJfQogCWlmIChlcnIpCiAJCXN0djY4MC0+dXNlciA9IDA7CisJdW5sb2NrX2tlcm5lbCgpOwogCiAJcmV0dXJuIGVycjsKIH0KQEAgLTE1NTAsNyArMTU1Myw4IEBACiAJfQogCVBERUJVRyAoMCwgIlNUVihpKTogdXNiIGNhbWVyYSBkcml2ZXIgdmVyc2lvbiAlcyByZWdpc3RlcmluZyIsIERSSVZFUl9WRVJTSU9OKTsKIAotCWluZm8oRFJJVkVSX0RFU0MgIiAiIERSSVZFUl9WRVJTSU9OKTsKKwlwcmludGsoS0VSTl9JTkZPIEtCVUlMRF9NT0ROQU1FICI6ICIgRFJJVkVSX1ZFUlNJT04gIjoiCisJICAgICAgIERSSVZFUl9ERVNDICJcbiIpOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3RkYTk4NDAuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdGRhOTg0MC5jCmluZGV4IDI0MzdjMWEuLjFjMzkxZjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdGRhOTg0MC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdGRhOTg0MC5jCkBAIC0yLDYgKzIsNyBAQAogICAgIHRkYTk4NDAgLSBpMmMtZHJpdmVyIGZvciB0aGUgdGRhOTg0MCBieSBTR1MgVGhvbXNvbgogCiAgICAgQ29weXJpZ2h0IChDKSAxOTk4LTIwMDMgTWljaGFlbCBIdW5vbGQgPG1pY2hhZWxAbWlodS5kZT4KKyAgICBDb3B5cmlnaHQgKEMpIDIwMDggSGFucyBWZXJrdWlsIDxodmVya3VpbEB4czRhbGwubmw+CiAKICAgICBUaGUgdGRhOTg0MCBpcyBhIHN0ZXJlby9kdWFsIHNvdW5kIHByb2Nlc3NvciB3aXRoIGRpZ2l0YWwKICAgICBpZGVudGlmaWNhdGlvbi4gSXQgY2FuIGJlIGZvdW5kIGF0IGFkZHJlc3MgMHg4NCBvbiB0aGUgaTJjLWJ1cy4KQEAgLTI4LDU5ICsyOSwxMTggQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9pb2N0bC5oPgogI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgotCisjaW5jbHVkZSA8bWVkaWEvdjRsMi1jb21tb24uaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWkyYy1kcnYtbGVnYWN5Lmg+CiAjaW5jbHVkZSAidGRhOTg0MC5oIgogCi1zdGF0aWMgaW50IGRlYnVnOwkJLyogaW5zbW9kIHBhcmFtZXRlciAqLwotbW9kdWxlX3BhcmFtKGRlYnVnLCBpbnQsIDA2NDQpOwotTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgIlR1cm4gb24vb2ZmIGRldmljZSBkZWJ1Z2dpbmcgKGRlZmF1bHQ6b2ZmKS4iKTsKK01PRFVMRV9BVVRIT1IoIk1pY2hhZWwgSHVub2xkIDxtaWNoYWVsQG1paHUuZGU+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oInRkYTk4NDAgZHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKLSNkZWZpbmUgZHByaW50ayhhcmdzLi4uKSBcCi0JICAgIGRvIHsgaWYgKGRlYnVnKSB7IHByaW50aygiJXM6ICVzKClbJWRdOiAiLCBLQlVJTERfTU9ETkFNRSwgX19mdW5jX18sIF9fTElORV9fKTsgcHJpbnRrKGFyZ3MpOyB9IH0gd2hpbGUgKDApCitzdGF0aWMgaW50IGRlYnVnOworbW9kdWxlX3BhcmFtKGRlYnVnLCBpbnQsIDA2NDQpOworCitNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiRGVidWcgbGV2ZWwgKDAtMSkiKTsKIAogI2RlZmluZQlTV0lUQ0gJCTB4MDAKICNkZWZpbmUJTEVWRUxfQURKVVNUCTB4MDIKICNkZWZpbmUJU1RFUkVPX0FESlVTVAkweDAzCiAjZGVmaW5lCVRFU1QJCTB4MDQKIAorI2RlZmluZSBUREE5ODQwX1NFVF9NVVRFICAgICAgICAgICAgICAgIDB4MDAKKyNkZWZpbmUgVERBOTg0MF9TRVRfTU9OTyAgICAgICAgICAgICAgICAweDEwCisjZGVmaW5lIFREQTk4NDBfU0VUX1NURVJFTyAgICAgICAgICAgICAgMHgyYQorI2RlZmluZSBUREE5ODQwX1NFVF9MQU5HMSAgICAgICAgICAgICAgIDB4MTIKKyNkZWZpbmUgVERBOTg0MF9TRVRfTEFORzIgICAgICAgICAgICAgICAweDFlCisjZGVmaW5lIFREQTk4NDBfU0VUX0JPVEggICAgICAgICAgICAgICAgMHgxYQorI2RlZmluZSBUREE5ODQwX1NFVF9CT1RIX1IgICAgICAgICAgICAgIDB4MTYKKyNkZWZpbmUgVERBOTg0MF9TRVRfRVhURVJOQUwgICAgICAgICAgICAweDdhCisKIC8qIGFkZHJlc3NlcyB0byBzY2FuLCBmb3VuZCBvbmx5IGF0IDB4NDIgKDctQml0KSAqLwogc3RhdGljIHVuc2lnbmVkIHNob3J0IG5vcm1hbF9pMmNbXSA9IHsgSTJDX0FERFJfVERBOTg0MCwgSTJDX0NMSUVOVF9FTkQgfTsKIAogLyogbWFnaWMgZGVmaW5pdGlvbiBvZiBhbGwgb3RoZXIgdmFyaWFibGVzIGFuZCB0aGluZ3MgKi8KIEkyQ19DTElFTlRfSU5TTU9EOwogCi1zdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgZHJpdmVyOwotc3RhdGljIHN0cnVjdCBpMmNfY2xpZW50IGNsaWVudF90ZW1wbGF0ZTsKLQotc3RhdGljIGludCBjb21tYW5kKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHVuc2lnbmVkIGludCBjbWQsIHZvaWQgKmFyZykKK3N0YXRpYyB2b2lkIHRkYTk4NDBfd3JpdGUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdTggcmVnLCB1OCB2YWwpCiB7Ci0JaW50IHJlc3VsdDsKKwlpZiAoaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsIHJlZywgdmFsKSkKKwkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAiZXJyb3Igd3JpdGluZyAlMDJ4IHRvICUwMnhcbiIsCisJCQkJdmFsLCByZWcpOworfQorCitzdGF0aWMgaW50IHRkYTk4NDBfY29tbWFuZChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1bnNpZ25lZCBjbWQsIHZvaWQgKmFyZykKK3sKIAlpbnQgYnl0ZSA9ICooaW50ICopYXJnOwogCiAJc3dpdGNoIChjbWQpIHsKLQljYXNlIFREQTk4NDBfU1dJVENIOgorCWNhc2UgVklESU9DX1NfVFVORVI6IHsKKwkJc3RydWN0IHY0bDJfdHVuZXIgKnQgPSBhcmc7CisJCWludCBieXRlOwogCi0JCWRwcmludGsoIlREQTk4NDBfU1dJVENIOiAweCUwMnhcbiIsIGJ5dGUpOworCQlpZiAodC0+aW5kZXgpCisJCQlyZXR1cm4gLUVJTlZBTDsKIAotCQlpZiAoYnl0ZSAhPSBUREE5ODQwX1NFVF9NT05PCi0JCSAgICAmJiBieXRlICE9IFREQTk4NDBfU0VUX01VVEUKLQkJICAgICYmIGJ5dGUgIT0gVERBOTg0MF9TRVRfU1RFUkVPCi0JCSAgICAmJiBieXRlICE9IFREQTk4NDBfU0VUX0xBTkcxCi0JCSAgICAmJiBieXRlICE9IFREQTk4NDBfU0VUX0xBTkcyCi0JCSAgICAmJiBieXRlICE9IFREQTk4NDBfU0VUX0JPVEgKLQkJICAgICYmIGJ5dGUgIT0gVERBOTg0MF9TRVRfQk9USF9SCi0JCSAgICAmJiBieXRlICE9IFREQTk4NDBfU0VUX0VYVEVSTkFMKSB7CisJCXN3aXRjaCAodC0+YXVkbW9kZSkgeworCQljYXNlIFY0TDJfVFVORVJfTU9ERV9TVEVSRU86CisJCQlieXRlID0gVERBOTg0MF9TRVRfU1RFUkVPOworCQkJYnJlYWs7CisJCWNhc2UgVjRMMl9UVU5FUl9NT0RFX0xBTkcxX0xBTkcyOgorCQkJYnl0ZSA9IFREQTk4NDBfU0VUX0JPVEg7CisJCQlicmVhazsKKwkJY2FzZSBWNEwyX1RVTkVSX01PREVfTEFORzE6CisJCQlieXRlID0gVERBOTg0MF9TRVRfTEFORzE7CisJCQlicmVhazsKKwkJY2FzZSBWNEwyX1RVTkVSX01PREVfTEFORzI6CisJCQlieXRlID0gVERBOTg0MF9TRVRfTEFORzI7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWJ5dGUgPSBUREE5ODQwX1NFVF9NT05POworCQkJYnJlYWs7CisJCX0KKwkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAiVERBOTg0MF9TV0lUQ0g6IDB4JTAyeFxuIiwgYnl0ZSk7CisJCXRkYTk4NDBfd3JpdGUoY2xpZW50LCBTV0lUQ0gsIGJ5dGUpOworCQlicmVhazsKKwl9CisKKwljYXNlIFZJRElPQ19HX1RVTkVSOiB7CisJCXN0cnVjdCB2NGwyX3R1bmVyICp0ID0gYXJnOworCQl1OCBieXRlOworCisJCXQtPnJ4c3ViY2hhbnMgPSBWNEwyX1RVTkVSX1NVQl9NT05POworCQlpZiAoMSAhPSBpMmNfbWFzdGVyX3JlY3YoY2xpZW50LCAmYnl0ZSwgMSkpIHsKKwkJCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwKKwkJCQkiaTJjX21hc3Rlcl9yZWN2KCkgZmFpbGVkXG4iKTsKKwkJCXJldHVybiAtRUlPOworCQl9CisKKwkJaWYgKGJ5dGUgJiAweDgwKSB7CisJCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsCisJCQkJIlREQTk4NDBfREVURUNUOiByZWdpc3RlciBjb250ZW50cyBpbnZhbGlkXG4iKTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAKLQkJcmVzdWx0ID0gaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsIFNXSVRDSCwgYnl0ZSk7Ci0JCWlmIChyZXN1bHQpCi0JCQlkcHJpbnRrKCJpMmNfc21idXNfd3JpdGVfYnl0ZSgpIGZhaWxlZCwgcmV0OiVkXG4iLCByZXN1bHQpOworCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJUREE5ODQwX0RFVEVDVDogYnl0ZTogMHglMDJ4XG4iLCBieXRlKTsKKworCQlzd2l0Y2ggKGJ5dGUgJiAweDYwKSB7CisJCWNhc2UgMHgwMDoKKwkJCXQtPnJ4c3ViY2hhbnMgPSBWNEwyX1RVTkVSX1NVQl9NT05POworCQkJYnJlYWs7CisJCWNhc2UgMHgyMDoKKwkJCXQtPnJ4c3ViY2hhbnMgPSBWNEwyX1RVTkVSX1NVQl9MQU5HMSB8IFY0TDJfVFVORVJfU1VCX0xBTkcyOworCQkJYnJlYWs7CisJCWNhc2UgMHg0MDoKKwkJCXQtPnJ4c3ViY2hhbnMgPSBWNEwyX1RVTkVSX1NVQl9TVEVSRU8gfCBWNEwyX1RVTkVSX1NVQl9NT05POworCQkJYnJlYWs7CisJCWRlZmF1bHQ6IC8qIEluY29ycmVjdCBkZXRlY3QgKi8KKwkJCXQtPnJ4c3ViY2hhbnMgPSBWNEwyX1RVTkVSX01PREVfTU9OTzsKKwkJCWJyZWFrOworCQl9CiAJCWJyZWFrOworCX0KIAogCWNhc2UgVERBOTg0MF9MRVZFTF9BREpVU1Q6Ci0KLQkJZHByaW50aygiVERBOTg0MF9MRVZFTF9BREpVU1Q6ICVkXG4iLCBieXRlKTsKKwkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAiVERBOTg0MF9MRVZFTF9BREpVU1Q6ICVkXG4iLCBieXRlKTsKIAogCQkvKiBjaGVjayBmb3IgY29ycmVjdCByYW5nZSAqLwogCQlpZiAoYnl0ZSA+IDI1IHx8IGJ5dGUgPCAtMjApCkBAIC05MiwxNSArMTUyLDExIEBACiAJCQlieXRlICs9IDB4ODsKIAkJZWxzZQogCQkJYnl0ZSA9IC1ieXRlOwotCi0JCXJlc3VsdCA9IGkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCBMRVZFTF9BREpVU1QsIGJ5dGUpOwotCQlpZiAocmVzdWx0KQotCQkJZHByaW50aygiaTJjX3NtYnVzX3dyaXRlX2J5dGUoKSBmYWlsZWQsIHJldDolZFxuIiwgcmVzdWx0KTsKKwkJdGRhOTg0MF93cml0ZShjbGllbnQsIExFVkVMX0FESlVTVCwgYnl0ZSk7CiAJCWJyZWFrOwogCiAJY2FzZSBUREE5ODQwX1NURVJFT19BREpVU1Q6Ci0KLQkJZHByaW50aygiVERBOTg0MF9TVEVSRU9fQURKVVNUOiAlZFxuIiwgYnl0ZSk7CisJCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgIlREQTk4NDBfU1RFUkVPX0FESlVTVDogJWRcbiIsIGJ5dGUpOwogCiAJCS8qIGNoZWNrIGZvciBjb3JyZWN0IHJhbmdlICovCiAJCWlmIChieXRlID4gMjUgfHwgYnl0ZSA8IC0yNCkKQEAgLTExMywxNDMgKzE2OSw1OSBAQAogCQllbHNlCiAJCQlieXRlID0gLWJ5dGU7CiAKLQkJcmVzdWx0ID0gaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsIFNURVJFT19BREpVU1QsIGJ5dGUpOwotCQlpZiAocmVzdWx0KQotCQkJZHByaW50aygiaTJjX3NtYnVzX3dyaXRlX2J5dGUoKSBmYWlsZWQsIHJldDolZFxuIiwgcmVzdWx0KTsKLQkJYnJlYWs7Ci0KLQljYXNlIFREQTk4NDBfREVURUNUOiB7Ci0JCWludCAqcmV0ID0gKGludCAqKWFyZzsKLQotCQlieXRlID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwgU1RFUkVPX0FESlVTVCk7Ci0JCWlmIChieXRlID09IC0xKSB7Ci0JCQlkcHJpbnRrKCJpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoKSBmYWlsZWRcbiIpOwotCQkJcmV0dXJuIC1FSU87Ci0JCX0KLQotCQlpZiAoMCAhPSAoYnl0ZSAmIDB4ODApKSB7Ci0JCQlkcHJpbnRrKCJUREE5ODQwX0RFVEVDVDogcmVnaXN0ZXIgY29udGVudHMgaW52YWxpZFxuIik7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCi0JCWRwcmludGsoIlREQTk4NDBfREVURUNUOiBieXRlOiAweCUwMnhcbiIsIGJ5dGUpOwotCQkqcmV0ID0gKChieXRlICYgMHg2MCkgPj4gNSk7Ci0JCXJlc3VsdCA9IDA7Ci0JCWJyZWFrOwotCX0KLQljYXNlIFREQTk4NDBfVEVTVDoKLQkJZHByaW50aygiVERBOTg0MF9URVNUOiAweCUwMnhcbiIsIGJ5dGUpOwotCi0JCS8qIG1hc2sgb3V0IGlycmVsZXZhbnQgYml0cyAqLwotCQlieXRlICY9IDB4MzsKLQotCQlyZXN1bHQgPSBpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgVEVTVCwgYnl0ZSk7Ci0JCWlmIChyZXN1bHQpCi0JCQlkcHJpbnRrKCJpMmNfc21idXNfd3JpdGVfYnl0ZSgpIGZhaWxlZCwgcmV0OiVkXG4iLCByZXN1bHQpOworCQl0ZGE5ODQwX3dyaXRlKGNsaWVudCwgU1RFUkVPX0FESlVTVCwgYnl0ZSk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXJldHVybiAtRU5PSU9DVExDTUQ7CiAJfQogCi0JaWYgKHJlc3VsdCkKLQkJcmV0dXJuIC1FSU87Ci0KIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBkZXRlY3Qoc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyLCBpbnQgYWRkcmVzcywgaW50IGtpbmQpCitzdGF0aWMgaW50IHRkYTk4NDBfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKKwkJCSAgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKQogewotCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQ7Ci0JaW50IHJlc3VsdCA9IDA7Ci0KLQlpbnQgYnl0ZSA9IDB4MDsKKwlpbnQgcmVzdWx0OworCWludCBieXRlOwogCiAJLyogbGV0J3Mgc2VlIHdoZXRoZXIgdGhpcyBhZGFwdGVyIGNhbiBzdXBwb3J0IHdoYXQgd2UgbmVlZCAqLwotCWlmICgwID09IGkyY19jaGVja19mdW5jdGlvbmFsaXR5KGFkYXB0ZXIsCi0JCQkJICAgIEkyQ19GVU5DX1NNQlVTX1JFQURfQllURV9EQVRBIHwKLQkJCQkgICAgSTJDX0ZVTkNfU01CVVNfV1JJVEVfQllURV9EQVRBKSkgeworCWlmICghaTJjX2NoZWNrX2Z1bmN0aW9uYWxpdHkoY2xpZW50LT5hZGFwdGVyLAorCQkJSTJDX0ZVTkNfU01CVVNfUkVBRF9CWVRFX0RBVEEgfAorCQkJSTJDX0ZVTkNfU01CVVNfV1JJVEVfQllURV9EQVRBKSkKIAkJcmV0dXJuIDA7Ci0JfQogCi0JLyogYWxsb2NhdGUgbWVtb3J5IGZvciBjbGllbnQgc3RydWN0dXJlICovCi0JY2xpZW50ID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGkyY19jbGllbnQpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWNsaWVudCkgewotCQlwcmludGsoIm5vdCBlbm91Z2gga2VybmVsIG1lbW9yeVxuIik7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KLQotCS8qIGZpbGwgY2xpZW50IHN0cnVjdHVyZSAqLwotCW1lbWNweShjbGllbnQsICZjbGllbnRfdGVtcGxhdGUsIHNpemVvZihzdHJ1Y3QgaTJjX2NsaWVudCkpOwotCWNsaWVudC0+YWRkciA9IGFkZHJlc3M7Ci0JY2xpZW50LT5hZGFwdGVyID0gYWRhcHRlcjsKLQotCS8qIHRlbGwgdGhlIGkyYyBsYXllciBhIG5ldyBjbGllbnQgaGFzIGFycml2ZWQgKi8KLQlpZiAoMCAhPSAocmVzdWx0ID0gaTJjX2F0dGFjaF9jbGllbnQoY2xpZW50KSkpIHsKLQkJa2ZyZWUoY2xpZW50KTsKLQkJcmV0dXJuIHJlc3VsdDsKLQl9CisJdjRsX2luZm8oY2xpZW50LCAiY2hpcCBmb3VuZCBAIDB4JXggKCVzKVxuIiwKKwkJCWNsaWVudC0+YWRkciA8PCAxLCBjbGllbnQtPmFkYXB0ZXItPm5hbWUpOwogCiAJLyogc2V0IGluaXRpYWwgdmFsdWVzIGZvciBsZXZlbCAmIHN0ZXJlbyAtIGFkanVzdG1lbnQsIG1vZGUgKi8KIAlieXRlID0gMDsKLQlyZXN1bHQgID0gY29tbWFuZChjbGllbnQsIFREQTk4NDBfTEVWRUxfQURKVVNULCAmYnl0ZSk7Ci0JcmVzdWx0ICs9IGNvbW1hbmQoY2xpZW50LCBUREE5ODQwX1NURVJFT19BREpVU1QsICZieXRlKTsKLQlieXRlID0gVERBOTg0MF9TRVRfTU9OTzsKLQlyZXN1bHQgPSBjb21tYW5kKGNsaWVudCwgVERBOTg0MF9TV0lUQ0gsICZieXRlKTsKKwlyZXN1bHQgPSB0ZGE5ODQwX2NvbW1hbmQoY2xpZW50LCBUREE5ODQwX0xFVkVMX0FESlVTVCwgJmJ5dGUpOworCXJlc3VsdCArPSB0ZGE5ODQwX2NvbW1hbmQoY2xpZW50LCBUREE5ODQwX1NURVJFT19BREpVU1QsICZieXRlKTsKKwl0ZGE5ODQwX3dyaXRlKGNsaWVudCwgU1dJVENILCBUREE5ODQwX1NFVF9TVEVSRU8pOwogCWlmIChyZXN1bHQpIHsKLQkJZHByaW50aygiY291bGQgbm90IGluaXRpYWxpemUgdGRhOTg0MFxuIik7CisJCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgImNvdWxkIG5vdCBpbml0aWFsaXplIHRkYTk4NDBcbiIpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9Ci0KLQlwcmludGsoInRkYTk4NDA6IGRldGVjdGVkIEAgMHglMDJ4IG9uIGFkYXB0ZXIgJXNcbiIsIGFkZHJlc3MsICZjbGllbnQtPmFkYXB0ZXItPm5hbWVbMF0pOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGF0dGFjaChzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIpCitzdGF0aWMgaW50IHRkYTk4NDBfbGVnYWN5X3Byb2JlKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlcikKIHsKLQkvKiBsZXQncyBzZWUgd2hldGhlciB0aGlzIGlzIGEga25vdyBhZGFwdGVyIHdlIGNhbiBhdHRhY2ggdG8gKi8KLQlpZiAoYWRhcHRlci0+aWQgIT0gSTJDX0hXX1NBQTcxNDYpIHsKLQkJZHByaW50aygicmVmdXNpbmcgdG8gcHJvYmUgb24gdW5rbm93biBhZGFwdGVyIFtuYW1lPSclcycsaWQ9MHgleF1cbiIsIGFkYXB0ZXItPm5hbWUsIGFkYXB0ZXItPmlkKTsKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JfQotCi0JcmV0dXJuIGkyY19wcm9iZShhZGFwdGVyLCAmYWRkcl9kYXRhLCAmZGV0ZWN0KTsKKwkvKiBMZXQncyBzZWUgd2hldGhlciB0aGlzIGlzIGEga25vd24gYWRhcHRlciB3ZSBjYW4gYXR0YWNoIHRvLgorCSAgIFByZXZlbnRzIGNvbmZsaWN0cyB3aXRoIHR2YXVkaW8uYy4gKi8KKwlyZXR1cm4gYWRhcHRlci0+aWQgPT0gSTJDX0hXX1NBQTcxNDY7CiB9Ci0KLXN0YXRpYyBpbnQgZGV0YWNoKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCi17Ci0JaW50IHJldCA9IGkyY19kZXRhY2hfY2xpZW50KGNsaWVudCk7Ci0Ja2ZyZWUoY2xpZW50KTsKLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgZHJpdmVyID0gewotCS5kcml2ZXIgPSB7Ci0JCS5uYW1lID0gInRkYTk4NDAiLAotCX0sCi0JLmlkCT0gSTJDX0RSSVZFUklEX1REQTk4NDAsCi0JLmF0dGFjaF9hZGFwdGVyCT0gYXR0YWNoLAotCS5kZXRhY2hfY2xpZW50CT0gZGV0YWNoLAotCS5jb21tYW5kCT0gY29tbWFuZCwKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCB0ZGE5ODQwX2lkW10gPSB7CisJeyAidGRhOTg0MCIsIDAgfSwKKwl7IH0KIH07CitNT0RVTEVfREVWSUNFX1RBQkxFKGkyYywgdGRhOTg0MF9pZCk7CiAKLXN0YXRpYyBzdHJ1Y3QgaTJjX2NsaWVudCBjbGllbnRfdGVtcGxhdGUgPSB7CitzdGF0aWMgc3RydWN0IHY0bDJfaTJjX2RyaXZlcl9kYXRhIHY0bDJfaTJjX2RhdGEgPSB7CiAJLm5hbWUgPSAidGRhOTg0MCIsCi0JLmRyaXZlciA9ICZkcml2ZXIsCisJLmRyaXZlcmlkID0gSTJDX0RSSVZFUklEX1REQTk4NDAsCisJLmNvbW1hbmQgPSB0ZGE5ODQwX2NvbW1hbmQsCisJLnByb2JlID0gdGRhOTg0MF9wcm9iZSwKKwkubGVnYWN5X3Byb2JlID0gdGRhOTg0MF9sZWdhY3lfcHJvYmUsCisJLmlkX3RhYmxlID0gdGRhOTg0MF9pZCwKIH07Ci0KLXN0YXRpYyBpbnQgX19pbml0IHRoaXNfbW9kdWxlX2luaXQodm9pZCkKLXsKLQlyZXR1cm4gaTJjX2FkZF9kcml2ZXIoJmRyaXZlcik7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fZXhpdCB0aGlzX21vZHVsZV9leGl0KHZvaWQpCi17Ci0JaTJjX2RlbF9kcml2ZXIoJmRyaXZlcik7Ci19Ci0KLW1vZHVsZV9pbml0KHRoaXNfbW9kdWxlX2luaXQpOwotbW9kdWxlX2V4aXQodGhpc19tb2R1bGVfZXhpdCk7Ci0KLU1PRFVMRV9BVVRIT1IoIk1pY2hhZWwgSHVub2xkIDxtaWNoYWVsQG1paHUuZGU+Iik7Ci1NT0RVTEVfREVTQ1JJUFRJT04oInRkYTk4NDAgZHJpdmVyIik7Ci1NT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3RkYTk4NDAuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdGRhOTg0MC5oCmluZGV4IDdkYTg0MzIuLmRjMTJhZTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdGRhOTg0MC5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdGRhOTg0MC5oCkBAIC0zLDI0ICszLDYgQEAKIAogI2RlZmluZQlJMkNfQUREUl9UREE5ODQwCQkweDQyCiAKLSNkZWZpbmUgVERBOTg0MF9ERVRFQ1QJCV9JT1IoJ3YnLDEsaW50KQotLyogcmV0dXJuIHZhbHVlcyBmb3IgVERBOTg0MF9ERVRDVCAqLwotI2RlZmluZSBUREE5ODQwX01PTk9fREVURUNUCQkweDAKLSNkZWZpbmUJVERBOTg0MF9EVUFMX0RFVEVDVAkJMHgxCi0jZGVmaW5lCVREQTk4NDBfU1RFUkVPX0RFVEVDVAkJMHgyCi0jZGVmaW5lCVREQTk4NDBfSU5DT1JSRUNUX0RFVEVDVAkweDMKLQotI2RlZmluZSBUREE5ODQwX1NXSVRDSAkJX0lPVygndicsMixpbnQpCi0vKiBtb2RlcyB0aGFuIGNhbiBiZSBzZXQgd2l0aCBUREE5ODQwX1NXSVRDSCAqLwotI2RlZmluZQlUREE5ODQwX1NFVF9NVVRFCQkweDAwCi0jZGVmaW5lCVREQTk4NDBfU0VUX01PTk8JCTB4MTAKLSNkZWZpbmUJVERBOTg0MF9TRVRfU1RFUkVPCQkweDJhCi0jZGVmaW5lCVREQTk4NDBfU0VUX0xBTkcxCQkweDEyCi0jZGVmaW5lCVREQTk4NDBfU0VUX0xBTkcyCQkweDFlCi0jZGVmaW5lCVREQTk4NDBfU0VUX0JPVEgJCTB4MWEKLSNkZWZpbmUJVERBOTg0MF9TRVRfQk9USF9SCQkweDE2Ci0jZGVmaW5lCVREQTk4NDBfU0VUX0VYVEVSTkFMCQkweDdhCi0KIC8qIHZhbHVlcyBtYXkgcmFuZ2UgYmV0d2VlbiArMi41IGFuZCAtMi4wOwogICAgdGhlIHZhbHVlIGhhcyB0byBiZSBtdWx0aXBsaWVkIHdpdGggMTAgKi8KICNkZWZpbmUgVERBOTg0MF9MRVZFTF9BREpVU1QJX0lPVygndicsMyxpbnQpCkBAIC0yOSw3ICsxMSw0IEBACiAgICB0aGUgdmFsdWUgaGFzIHRvIGJlIG11bHRpcGxpZWQgd2l0aCAxMCAqLwogI2RlZmluZSBUREE5ODQwX1NURVJFT19BREpVU1QJX0lPVygndicsNCxpbnQpCiAKLS8qIGN1cnJlbnRseSBub3QgaW1wbGVtZW50ZWQgKi8KLSNkZWZpbmUgVERBOTg0MF9URVNUCQlfSU9XKCd2Jyw1LGludCkKLQogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3RlYTY0MTVjLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3RlYTY0MTVjLmMKaW5kZXggNDIxYzE0NC4uY2RlMDkyYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby90ZWE2NDE1Yy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdGVhNjQxNWMuYwpAQCAtMiw2ICsyLDcgQEAKICAgICB0ZWE2NDE1YyAtIGkyYy1kcml2ZXIgZm9yIHRoZSB0ZWE2NDE1YyBieSBTR1MgVGhvbXNvbgogCiAgICAgQ29weXJpZ2h0IChDKSAxOTk4LTIwMDMgTWljaGFlbCBIdW5vbGQgPG1pY2hhZWxAbWlodS5kZT4KKyAgICBDb3B5cmlnaHQgKEMpIDIwMDggSGFucyBWZXJrdWlsIDxodmVya3VpbEB4czRhbGwubmw+CiAKICAgICBUaGUgdGVhNjQxNWMgaXMgYSBidXMgY29udHJvbGxlZCB2aWRlby1tYXRyaXgtc3dpdGNoCiAgICAgd2l0aCA4IGlucHV0cyBhbmQgNiBvdXRwdXRzLgpAQCAtMzAsMTggKzMxLDE4IEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvaW9jdGwuaD4KICNpbmNsdWRlIDxsaW51eC9pMmMuaD4KLQorI2luY2x1ZGUgPG1lZGlhL3Y0bDItY29tbW9uLmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1pMmMtZHJ2LWxlZ2FjeS5oPgogI2luY2x1ZGUgInRlYTY0MTVjLmgiCiAKLXN0YXRpYyBpbnQgZGVidWc7CQkvKiBpbnNtb2QgcGFyYW1ldGVyICovCitNT0RVTEVfQVVUSE9SKCJNaWNoYWVsIEh1bm9sZCA8bWljaGFlbEBtaWh1LmRlPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJ0ZWE2NDE1YyBkcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKworc3RhdGljIGludCBkZWJ1ZzsKIG1vZHVsZV9wYXJhbShkZWJ1ZywgaW50LCAwNjQ0KTsKLU1PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJUdXJuIG9uL29mZiBkZXZpY2UgZGVidWdnaW5nIChkZWZhdWx0Om9mZikuIik7CiAKLSNkZWZpbmUgZHByaW50ayhhcmdzLi4uKSBcCi0JICAgIGRvIHsgaWYgKGRlYnVnKSB7IHByaW50aygiJXM6ICVzKClbJWRdOiAiLCBLQlVJTERfTU9ETkFNRSwgX19mdW5jX18sIF9fTElORV9fKTsgcHJpbnRrKGFyZ3MpOyB9IH0gd2hpbGUgKDApCi0KLSNkZWZpbmUgVEVBNjQxNUNfTlVNX0lOUFVUUwk4Ci0jZGVmaW5lIFRFQTY0MTVDX05VTV9PVVRQVVRTCTYKK01PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJEZWJ1ZyBsZXZlbCAoMC0xKSIpOwogCiAvKiBhZGRyZXNzZXMgdG8gc2NhbiwgZm91bmQgb25seSBhdCAweDAzIGFuZC9vciAweDQzICg3LWJpdCkgKi8KIHN0YXRpYyB1bnNpZ25lZCBzaG9ydCBub3JtYWxfaTJjW10gPSB7IEkyQ19URUE2NDE1Q18xLCBJMkNfVEVBNjQxNUNfMiwgSTJDX0NMSUVOVF9FTkQgfTsKQEAgLTQ5LDYwICs1MCw2IEBACiAvKiBtYWdpYyBkZWZpbml0aW9uIG9mIGFsbCBvdGhlciB2YXJpYWJsZXMgYW5kIHRoaW5ncyAqLwogSTJDX0NMSUVOVF9JTlNNT0Q7CiAKLXN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBkcml2ZXI7Ci1zdGF0aWMgc3RydWN0IGkyY19jbGllbnQgY2xpZW50X3RlbXBsYXRlOwotCi0vKiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBieSBpMmNfcHJvYmUgKi8KLXN0YXRpYyBpbnQgZGV0ZWN0KHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlciwgaW50IGFkZHJlc3MsIGludCBraW5kKQotewotCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSBOVUxMOwotCWludCBlcnIgPSAwOwotCi0JLyogbGV0J3Mgc2VlIHdoZXRoZXIgdGhpcyBhZGFwdGVyIGNhbiBzdXBwb3J0IHdoYXQgd2UgbmVlZCAqLwotCWlmICgwID09IGkyY19jaGVja19mdW5jdGlvbmFsaXR5KGFkYXB0ZXIsIEkyQ19GVU5DX1NNQlVTX1dSSVRFX0JZVEUpKSB7Ci0JCXJldHVybiAwOwotCX0KLQotCS8qIGFsbG9jYXRlIG1lbW9yeSBmb3IgY2xpZW50IHN0cnVjdHVyZSAqLwotCWNsaWVudCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBpMmNfY2xpZW50KSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFjbGllbnQpIHsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCi0JLyogZmlsbCBjbGllbnQgc3RydWN0dXJlICovCi0JbWVtY3B5KGNsaWVudCwgJmNsaWVudF90ZW1wbGF0ZSwgc2l6ZW9mKHN0cnVjdCBpMmNfY2xpZW50KSk7Ci0JY2xpZW50LT5hZGRyID0gYWRkcmVzczsKLQljbGllbnQtPmFkYXB0ZXIgPSBhZGFwdGVyOwotCi0JLyogdGVsbCB0aGUgaTJjIGxheWVyIGEgbmV3IGNsaWVudCBoYXMgYXJyaXZlZCAqLwotCWlmICgwICE9IChlcnIgPSBpMmNfYXR0YWNoX2NsaWVudChjbGllbnQpKSkgewotCQlrZnJlZShjbGllbnQpOwotCQlyZXR1cm4gZXJyOwotCX0KLQotCXByaW50aygidGVhNjQxNWM6IGRldGVjdGVkIEAgMHglMDJ4IG9uIGFkYXB0ZXIgJXNcbiIsIGFkZHJlc3MsICZjbGllbnQtPmFkYXB0ZXItPm5hbWVbMF0pOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgYXR0YWNoKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlcikKLXsKLQkvKiBsZXQncyBzZWUgd2hldGhlciB0aGlzIGlzIGEga25vdyBhZGFwdGVyIHdlIGNhbiBhdHRhY2ggdG8gKi8KLQlpZiAoYWRhcHRlci0+aWQgIT0gSTJDX0hXX1NBQTcxNDYpIHsKLQkJZHByaW50aygicmVmdXNpbmcgdG8gcHJvYmUgb24gdW5rbm93biBhZGFwdGVyIFtuYW1lPSclcycsaWQ9MHgleF1cbiIsIGFkYXB0ZXItPm5hbWUsIGFkYXB0ZXItPmlkKTsKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JfQotCi0JcmV0dXJuIGkyY19wcm9iZShhZGFwdGVyLCAmYWRkcl9kYXRhLCAmZGV0ZWN0KTsKLX0KLQotc3RhdGljIGludCBkZXRhY2goc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKLXsKLQlpbnQgcmV0ID0gaTJjX2RldGFjaF9jbGllbnQoY2xpZW50KTsKLQlrZnJlZShjbGllbnQpOwotCXJldHVybiByZXQ7Ci19Ci0KIC8qIG1ha2VzIGEgY29ubmVjdGlvbiBiZXR3ZWVuIHRoZSBpbnB1dC1waW4gJ2knIGFuZCB0aGUgb3V0cHV0LXBpbiAnbycKICAgIGZvciB0aGUgdGVhNjQxNWMtY2xpZW50ICdjbGllbnQnICovCiBzdGF0aWMgaW50IHN3aXRjaF9tYXRyaXgoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgaW50IGksIGludCBvKQpAQCAtMTEwLDcgKzU3LDcgQEAKIAl1OCBieXRlID0gMDsKIAlpbnQgcmV0OwogCi0JZHByaW50aygiYWRyOjB4JTAyeCwgaTolZCwgbzolZFxuIiwgY2xpZW50LT5hZGRyLCBpLCBvKTsKKwl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJpPSVkLCBvPSVkXG4iLCBpLCBvKTsKIAogCS8qIGNoZWNrIGlmIHRoZSBwaW5zIGFyZSB2YWxpZCAqLwogCWlmICgwID09ICgoMSA9PSBpIHx8ICAzID09IGkgfHwgIDUgPT0gaSB8fCAgNiA9PSBpIHx8ICA4ID09IGkgfHwgMTAgPT0gaSB8fCAyMCA9PSBpIHx8IDExID09IGkpCkBAIC0xNjgsMTQgKzExNSwxNCBAQAogCiAJcmV0ID0gaTJjX3NtYnVzX3dyaXRlX2J5dGUoY2xpZW50LCBieXRlKTsKIAlpZiAocmV0KSB7Ci0JCWRwcmludGsoImkyY19zbWJ1c193cml0ZV9ieXRlKCkgZmFpbGVkLCByZXQ6JWRcbiIsIHJldCk7CisJCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwKKwkJCSJpMmNfc21idXNfd3JpdGVfYnl0ZSgpIGZhaWxlZCwgcmV0OiVkXG4iLCByZXQpOwogCQlyZXR1cm4gLUVJTzsKIAl9Ci0KIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IGNvbW1hbmQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdW5zaWduZWQgaW50IGNtZCwgdm9pZCAqYXJnKQorc3RhdGljIGludCB0ZWE2NDE1Y19jb21tYW5kKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHVuc2lnbmVkIGNtZCwgdm9pZCAqYXJnKQogewogCXN0cnVjdCB0ZWE2NDE1Y19tdWx0aXBsZXggKnYgPSAoc3RydWN0IHRlYTY0MTVjX211bHRpcGxleCAqKWFyZzsKIAlpbnQgcmVzdWx0ID0gMDsKQEAgLTE4NywzOCArMTM0LDQwIEBACiAJZGVmYXVsdDoKIAkJcmV0dXJuIC1FTk9JT0NUTENNRDsKIAl9Ci0KIAlyZXR1cm4gcmVzdWx0OwogfQogCi1zdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgZHJpdmVyID0gewotCS5kcml2ZXIgPSB7Ci0JCS5uYW1lID0gInRlYTY0MTVjIiwKLQl9LAotCS5pZCAJPSBJMkNfRFJJVkVSSURfVEVBNjQxNUMsCi0JLmF0dGFjaF9hZGFwdGVyCT0gYXR0YWNoLAotCS5kZXRhY2hfY2xpZW50CT0gZGV0YWNoLAotCS5jb21tYW5kCT0gY29tbWFuZCwKLX07CisvKiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBieSBpMmNfcHJvYmUgKi8KK3N0YXRpYyBpbnQgdGVhNjQxNWNfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKKwkJCSAgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKQoreworCS8qIGxldCdzIHNlZSB3aGV0aGVyIHRoaXMgYWRhcHRlciBjYW4gc3VwcG9ydCB3aGF0IHdlIG5lZWQgKi8KKwlpZiAoIWkyY19jaGVja19mdW5jdGlvbmFsaXR5KGNsaWVudC0+YWRhcHRlciwgSTJDX0ZVTkNfU01CVVNfV1JJVEVfQllURSkpCisJCXJldHVybiAwOwogCi1zdGF0aWMgc3RydWN0IGkyY19jbGllbnQgY2xpZW50X3RlbXBsYXRlID0geworCXY0bF9pbmZvKGNsaWVudCwgImNoaXAgZm91bmQgQCAweCV4ICglcylcbiIsCisJCQljbGllbnQtPmFkZHIgPDwgMSwgY2xpZW50LT5hZGFwdGVyLT5uYW1lKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB0ZWE2NDE1Y19sZWdhY3lfcHJvYmUoc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyKQoreworCS8qIExldCdzIHNlZSB3aGV0aGVyIHRoaXMgaXMgYSBrbm93biBhZGFwdGVyIHdlIGNhbiBhdHRhY2ggdG8uCisJICAgUHJldmVudHMgY29uZmxpY3RzIHdpdGggdHZhdWRpby5jLiAqLworCXJldHVybiBhZGFwdGVyLT5pZCA9PSBJMkNfSFdfU0FBNzE0NjsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkIHRlYTY0MTVjX2lkW10gPSB7CisJeyAidGVhNjQxNWMiLCAwIH0sCisJeyB9Cit9OworTU9EVUxFX0RFVklDRV9UQUJMRShpMmMsIHRlYTY0MTVjX2lkKTsKKworc3RhdGljIHN0cnVjdCB2NGwyX2kyY19kcml2ZXJfZGF0YSB2NGwyX2kyY19kYXRhID0gewogCS5uYW1lID0gInRlYTY0MTVjIiwKLQkuZHJpdmVyID0gJmRyaXZlciwKKwkuZHJpdmVyaWQgPSBJMkNfRFJJVkVSSURfVEVBNjQxNUMsCisJLmNvbW1hbmQgPSB0ZWE2NDE1Y19jb21tYW5kLAorCS5wcm9iZSA9IHRlYTY0MTVjX3Byb2JlLAorCS5sZWdhY3lfcHJvYmUgPSB0ZWE2NDE1Y19sZWdhY3lfcHJvYmUsCisJLmlkX3RhYmxlID0gdGVhNjQxNWNfaWQsCiB9OwotCi1zdGF0aWMgaW50IF9faW5pdCB0aGlzX21vZHVsZV9pbml0KHZvaWQpCi17Ci0JcmV0dXJuIGkyY19hZGRfZHJpdmVyKCZkcml2ZXIpOwotfQotCi1zdGF0aWMgdm9pZCBfX2V4aXQgdGhpc19tb2R1bGVfZXhpdCh2b2lkKQotewotCWkyY19kZWxfZHJpdmVyKCZkcml2ZXIpOwotfQotCi1tb2R1bGVfaW5pdCh0aGlzX21vZHVsZV9pbml0KTsKLW1vZHVsZV9leGl0KHRoaXNfbW9kdWxlX2V4aXQpOwotCi1NT0RVTEVfQVVUSE9SKCJNaWNoYWVsIEh1bm9sZCA8bWljaGFlbEBtaWh1LmRlPiIpOwotTU9EVUxFX0RFU0NSSVBUSU9OKCJ0ZWE2NDE1YyBkcml2ZXIiKTsKLU1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdGVhNjQyMC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby90ZWE2NDIwLmMKaW5kZXggYjVjODk1Ny4uZTUwODIwOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby90ZWE2NDIwLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby90ZWE2NDIwLmMKQEAgLTIsNiArMiw3IEBACiAgICAgdGVhNjQyMCAtIGkyYy1kcml2ZXIgZm9yIHRoZSB0ZWE2NDIwIGJ5IFNHUyBUaG9tc29uCiAKICAgICBDb3B5cmlnaHQgKEMpIDE5OTgtMjAwMyBNaWNoYWVsIEh1bm9sZCA8bWljaGFlbEBtaWh1LmRlPgorICAgIENvcHlyaWdodCAoQykgMjAwOCBIYW5zIFZlcmt1aWwgPGh2ZXJrdWlsQHhzNGFsbC5ubD4KIAogICAgIFRoZSB0ZWE2NDIwIGlzIGEgYnVzIGNvbnRyb2xsZWQgYXVkaW8tbWF0cml4IHdpdGggNSBzdGVyZW8gaW5wdXRzLAogICAgIDQgc3RlcmVvIG91dHB1dHMgYW5kIGdhaW4gY29udHJvbCBmb3IgZWFjaCBvdXRwdXQuCkBAIC0zMCwxNSArMzEsMTggQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9pb2N0bC5oPgogI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgotCisjaW5jbHVkZSA8bWVkaWEvdjRsMi1jb21tb24uaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWkyYy1kcnYtbGVnYWN5Lmg+CiAjaW5jbHVkZSAidGVhNjQyMC5oIgogCi1zdGF0aWMgaW50IGRlYnVnOwkJLyogaW5zbW9kIHBhcmFtZXRlciAqLwotbW9kdWxlX3BhcmFtKGRlYnVnLCBpbnQsIDA2NDQpOwotTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgIlR1cm4gb24vb2ZmIGRldmljZSBkZWJ1Z2dpbmcgKGRlZmF1bHQ6b2ZmKS4iKTsKK01PRFVMRV9BVVRIT1IoIk1pY2hhZWwgSHVub2xkIDxtaWNoYWVsQG1paHUuZGU+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oInRlYTY0MjAgZHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKLSNkZWZpbmUgZHByaW50ayhhcmdzLi4uKSBcCi0JICAgIGRvIHsgaWYgKGRlYnVnKSB7IHByaW50aygiJXM6ICVzKClbJWRdOiAiLCBLQlVJTERfTU9ETkFNRSwgX19mdW5jX18sIF9fTElORV9fKTsgcHJpbnRrKGFyZ3MpOyB9IH0gd2hpbGUgKDApCitzdGF0aWMgaW50IGRlYnVnOworbW9kdWxlX3BhcmFtKGRlYnVnLCBpbnQsIDA2NDQpOworCitNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiRGVidWcgbGV2ZWwgKDAtMSkiKTsKIAogLyogYWRkcmVzc2VzIHRvIHNjYW4sIGZvdW5kIG9ubHkgYXQgMHg0YyBhbmQvb3IgMHg0ZCAoNy1CaXQpICovCiBzdGF0aWMgdW5zaWduZWQgc2hvcnQgbm9ybWFsX2kyY1tdID0geyBJMkNfQUREUl9URUE2NDIwXzEsIEkyQ19BRERSX1RFQTY0MjBfMiwgSTJDX0NMSUVOVF9FTkQgfTsKQEAgLTQ2LDIzICs1MCwyMCBAQAogLyogbWFnaWMgZGVmaW5pdGlvbiBvZiBhbGwgb3RoZXIgdmFyaWFibGVzIGFuZCB0aGluZ3MgKi8KIEkyQ19DTElFTlRfSU5TTU9EOwogCi1zdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgZHJpdmVyOwotc3RhdGljIHN0cnVjdCBpMmNfY2xpZW50IGNsaWVudF90ZW1wbGF0ZTsKLQogLyogbWFrZSBhIGNvbm5lY3Rpb24gYmV0d2VlbiB0aGUgaW5wdXQgJ2knIGFuZCB0aGUgb3V0cHV0ICdvJwogICAgd2l0aCBnYWluICdnJyBmb3IgdGhlIHRlYTY0MjAtY2xpZW50ICdjbGllbnQnIChub3RlOiBpID0gNiBtZWFucyAnbXV0ZScpICovCiBzdGF0aWMgaW50IHRlYTY0MjBfc3dpdGNoKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIGludCBpLCBpbnQgbywgaW50IGcpCiB7Ci0JdTggYnl0ZSA9IDA7CisJdTggYnl0ZTsKIAlpbnQgcmV0OwogCi0JZHByaW50aygiYWRyOjB4JTAyeCwgaTolZCwgbzolZCwgZzolZFxuIiwgY2xpZW50LT5hZGRyLCBpLCBvLCBnKTsKKwl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJpPSVkLCBvPSVkLCBnPSVkXG4iLCBpLCBvLCBnKTsKIAogCS8qIGNoZWNrIGlmIHRoZSBwYXJhbWV0ZXJzIGFyZSB2YWxpZCAqLwogCWlmIChpIDwgMSB8fCBpID4gNiB8fCBvIDwgMSB8fCBvID4gNCB8fCBnIDwgMCB8fCBnID4gNiB8fCBnICUgMiAhPSAwKQogCQlyZXR1cm4gLTE7CiAKLQlieXRlICA9ICgobyAtIDEpIDw8IDUpOworCWJ5dGUgPSAoKG8gLSAxKSA8PCA1KTsKIAlieXRlIHw9IChpIC0gMSk7CiAKIAkvKiB0byB1bmRlcnN0YW5kIHRoaXMsIGhhdmUgYSBsb29rIGF0IHRoZSB0ZWE2NDIwLXNwZWNzIChwLjUpICovCkBAIC04Miw3NiArODMsMTQgQEAKIAogCXJldCA9IGkyY19zbWJ1c193cml0ZV9ieXRlKGNsaWVudCwgYnl0ZSk7CiAJaWYgKHJldCkgewotCQlkcHJpbnRrKCJpMmNfc21idXNfd3JpdGVfYnl0ZSgpIGZhaWxlZCwgcmV0OiVkXG4iLCByZXQpOworCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsCisJCQkiaTJjX3NtYnVzX3dyaXRlX2J5dGUoKSBmYWlsZWQsIHJldDolZFxuIiwgcmV0KTsKIAkJcmV0dXJuIC1FSU87CiAJfQotCiAJcmV0dXJuIDA7CiB9CiAKLS8qIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGJ5IGkyY19wcm9iZSAqLwotc3RhdGljIGludCB0ZWE2NDIwX2RldGVjdChzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIsIGludCBhZGRyZXNzLCBpbnQga2luZCkKLXsKLQlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50OwotCWludCBlcnIgPSAwLCBpID0gMDsKLQotCS8qIGxldCdzIHNlZSB3aGV0aGVyIHRoaXMgYWRhcHRlciBjYW4gc3VwcG9ydCB3aGF0IHdlIG5lZWQgKi8KLQlpZiAoMCA9PSBpMmNfY2hlY2tfZnVuY3Rpb25hbGl0eShhZGFwdGVyLCBJMkNfRlVOQ19TTUJVU19XUklURV9CWVRFKSkgewotCQlyZXR1cm4gMDsKLQl9Ci0KLQkvKiBhbGxvY2F0ZSBtZW1vcnkgZm9yIGNsaWVudCBzdHJ1Y3R1cmUgKi8KLQljbGllbnQgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgaTJjX2NsaWVudCksIEdGUF9LRVJORUwpOwotCWlmICghY2xpZW50KSB7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KLQotCS8qIGZpbGwgY2xpZW50IHN0cnVjdHVyZSAqLwotCW1lbWNweShjbGllbnQsICZjbGllbnRfdGVtcGxhdGUsIHNpemVvZihzdHJ1Y3QgaTJjX2NsaWVudCkpOwotCWNsaWVudC0+YWRkciA9IGFkZHJlc3M7Ci0JY2xpZW50LT5hZGFwdGVyID0gYWRhcHRlcjsKLQotCS8qIHRlbGwgdGhlIGkyYyBsYXllciBhIG5ldyBjbGllbnQgaGFzIGFycml2ZWQgKi8KLQlpZiAoMCAhPSAoZXJyID0gaTJjX2F0dGFjaF9jbGllbnQoY2xpZW50KSkpIHsKLQkJa2ZyZWUoY2xpZW50KTsKLQkJcmV0dXJuIGVycjsKLQl9Ci0KLQkvKiBzZXQgaW5pdGlhbCB2YWx1ZXM6IHNldCAibXV0ZSItaW5wdXQgdG8gYWxsIG91dHB1dHMgYXQgZ2FpbiAwICovCi0JZXJyID0gMDsKLQlmb3IgKGkgPSAxOyBpIDwgNTsgaSsrKSB7Ci0JCWVyciArPSB0ZWE2NDIwX3N3aXRjaChjbGllbnQsIDYsIGksIDApOwotCX0KLQlpZiAoZXJyKSB7Ci0JCWRwcmludGsoImNvdWxkIG5vdCBpbml0aWFsaXplIHRlYTY0MjBcbiIpOwotCQlrZnJlZShjbGllbnQpOwotCQlyZXR1cm4gLUVOT0RFVjsKLQl9Ci0KLQlwcmludGsoInRlYTY0MjA6IGRldGVjdGVkIEAgMHglMDJ4IG9uIGFkYXB0ZXIgJXNcbiIsIGFkZHJlc3MsICZjbGllbnQtPmFkYXB0ZXItPm5hbWVbMF0pOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgYXR0YWNoKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlcikKLXsKLQkvKiBsZXQncyBzZWUgd2hldGhlciB0aGlzIGlzIGEga25vdyBhZGFwdGVyIHdlIGNhbiBhdHRhY2ggdG8gKi8KLQlpZiAoYWRhcHRlci0+aWQgIT0gSTJDX0hXX1NBQTcxNDYpIHsKLQkJZHByaW50aygicmVmdXNpbmcgdG8gcHJvYmUgb24gdW5rbm93biBhZGFwdGVyIFtuYW1lPSclcycsaWQ9MHgleF1cbiIsIGFkYXB0ZXItPm5hbWUsIGFkYXB0ZXItPmlkKTsKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JfQotCi0JcmV0dXJuIGkyY19wcm9iZShhZGFwdGVyLCAmYWRkcl9kYXRhLCAmdGVhNjQyMF9kZXRlY3QpOwotfQotCi1zdGF0aWMgaW50IGRldGFjaChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQotewotCWludCByZXQgPSBpMmNfZGV0YWNoX2NsaWVudChjbGllbnQpOwotCWtmcmVlKGNsaWVudCk7Ci0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGludCBjb21tYW5kKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHVuc2lnbmVkIGludCBjbWQsIHZvaWQgKmFyZykKK3N0YXRpYyBpbnQgdGVhNjQyMF9jb21tYW5kKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHVuc2lnbmVkIGNtZCwgdm9pZCAqYXJnKQogewogCXN0cnVjdCB0ZWE2NDIwX211bHRpcGxleCAqYSA9IChzdHJ1Y3QgdGVhNjQyMF9tdWx0aXBsZXggKilhcmc7CiAJaW50IHJlc3VsdCA9IDA7CkBAIC0xNjcsMzQgKzEwNiw1MCBAQAogCXJldHVybiByZXN1bHQ7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBkcml2ZXIgPSB7Ci0JLmRyaXZlciA9IHsKLQkJLm5hbWUgPSAidGVhNjQyMCIsCi0JfSwKLQkuaWQJPSBJMkNfRFJJVkVSSURfVEVBNjQyMCwKLQkuYXR0YWNoX2FkYXB0ZXIJPSBhdHRhY2gsCi0JLmRldGFjaF9jbGllbnQJPSBkZXRhY2gsCi0JLmNvbW1hbmQJPSBjb21tYW5kLAotfTsKKy8qIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGJ5IGkyY19wcm9iZSAqLworc3RhdGljIGludCB0ZWE2NDIwX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCisJCQkgIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCkKK3sKKwlpbnQgZXJyLCBpOwogCi1zdGF0aWMgc3RydWN0IGkyY19jbGllbnQgY2xpZW50X3RlbXBsYXRlID0geworCS8qIGxldCdzIHNlZSB3aGV0aGVyIHRoaXMgYWRhcHRlciBjYW4gc3VwcG9ydCB3aGF0IHdlIG5lZWQgKi8KKwlpZiAoIWkyY19jaGVja19mdW5jdGlvbmFsaXR5KGNsaWVudC0+YWRhcHRlciwgSTJDX0ZVTkNfU01CVVNfV1JJVEVfQllURSkpCisJCXJldHVybiAtRUlPOworCisJdjRsX2luZm8oY2xpZW50LCAiY2hpcCBmb3VuZCBAIDB4JXggKCVzKVxuIiwKKwkJCWNsaWVudC0+YWRkciA8PCAxLCBjbGllbnQtPmFkYXB0ZXItPm5hbWUpOworCisJLyogc2V0IGluaXRpYWwgdmFsdWVzOiBzZXQgIm11dGUiLWlucHV0IHRvIGFsbCBvdXRwdXRzIGF0IGdhaW4gMCAqLworCWVyciA9IDA7CisJZm9yIChpID0gMTsgaSA8IDU7IGkrKykgeworCQllcnIgKz0gdGVhNjQyMF9zd2l0Y2goY2xpZW50LCA2LCBpLCAwKTsKKwl9CisJaWYgKGVycikgeworCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJjb3VsZCBub3QgaW5pdGlhbGl6ZSB0ZWE2NDIwXG4iKTsKKwkJa2ZyZWUoY2xpZW50KTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHRlYTY0MjBfbGVnYWN5X3Byb2JlKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlcikKK3sKKwkvKiBMZXQncyBzZWUgd2hldGhlciB0aGlzIGlzIGEga25vd24gYWRhcHRlciB3ZSBjYW4gYXR0YWNoIHRvLgorCSAgIFByZXZlbnRzIGNvbmZsaWN0cyB3aXRoIHR2YXVkaW8uYy4gKi8KKwlyZXR1cm4gYWRhcHRlci0+aWQgPT0gSTJDX0hXX1NBQTcxNDY7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCB0ZWE2NDIwX2lkW10gPSB7CisJeyAidGVhNjQyMCIsIDAgfSwKKwl7IH0KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKGkyYywgdGVhNjQyMF9pZCk7CisKK3N0YXRpYyBzdHJ1Y3QgdjRsMl9pMmNfZHJpdmVyX2RhdGEgdjRsMl9pMmNfZGF0YSA9IHsKIAkubmFtZSA9ICJ0ZWE2NDIwIiwKLQkuZHJpdmVyID0gJmRyaXZlciwKKwkuZHJpdmVyaWQgPSBJMkNfRFJJVkVSSURfVEVBNjQyMCwKKwkuY29tbWFuZCA9IHRlYTY0MjBfY29tbWFuZCwKKwkucHJvYmUgPSB0ZWE2NDIwX3Byb2JlLAorCS5sZWdhY3lfcHJvYmUgPSB0ZWE2NDIwX2xlZ2FjeV9wcm9iZSwKKwkuaWRfdGFibGUgPSB0ZWE2NDIwX2lkLAogfTsKLQotc3RhdGljIGludCBfX2luaXQgdGhpc19tb2R1bGVfaW5pdCh2b2lkKQotewotCXJldHVybiBpMmNfYWRkX2RyaXZlcigmZHJpdmVyKTsKLX0KLQotc3RhdGljIHZvaWQgX19leGl0IHRoaXNfbW9kdWxlX2V4aXQodm9pZCkKLXsKLQlpMmNfZGVsX2RyaXZlcigmZHJpdmVyKTsKLX0KLQotbW9kdWxlX2luaXQodGhpc19tb2R1bGVfaW5pdCk7Ci1tb2R1bGVfZXhpdCh0aGlzX21vZHVsZV9leGl0KTsKLQotTU9EVUxFX0FVVEhPUigiTWljaGFlbCBIdW5vbGQgPG1pY2hhZWxAbWlodS5kZT4iKTsKLU1PRFVMRV9ERVNDUklQVElPTigidGVhNjQyMCBkcml2ZXIiKTsKLU1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdHVuZXItMzAzNi5jIGIvZHJpdmVycy9tZWRpYS92aWRlby90dW5lci0zMDM2LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJkZjUwNmUuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby90dW5lci0zMDM2LmMKKysrIC9kZXYvbnVsbApAQCAtMSwyMTQgKzAsMCBAQAotLyoKLSAqIERyaXZlciBmb3IgUGhpbGlwcyBTQUIzMDM2ICJDSVRBQyIgdHVuZXIgY29udHJvbCBjaGlwLgotICoKLSAqIEF1dGhvcjogUGhpbCBCbHVuZGVsbCA8cGhpbGJAZ251Lm9yZz4KLSAqCi0gKiBUaGUgU0FCMzAzNiBpcyBqdXN0IGFib3V0IGRpZmZlcmVudCBlbm91Z2ggZnJvbSB0aGUgY2hpcHMgdGhhdAotICogdHVuZXIuYyBjb3BlcyB3aXRoIHRvIG1ha2UgaXQgbm90IHdvcnRoIHRoZSBlZmZvcnQgdG8gY3Jvd2JhcgotICogdGhlIHN1cHBvcnQgaW50byB0aGF0IGZpbGUuICBTbyBpbnN0ZWFkIHdlIGhhdmUgYSBzZXBhcmF0ZSBkcml2ZXIuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgotICogMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KLSNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KLSNpbmNsdWRlIDxsaW51eC90aW1lci5oPgotI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Ci0jaW5jbHVkZSA8bGludXgvZXJybm8uaD4KLSNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotCi0jaW5jbHVkZSA8bGludXgvaTJjLmg+Ci0jaW5jbHVkZSA8bGludXgvdmlkZW9kZXYuaD4KLSNpbmNsdWRlIDxtZWRpYS92NGwyLWNvbW1vbi5oPgotCi0jaW5jbHVkZSA8bWVkaWEvdHVuZXIuaD4KLQotc3RhdGljIGludCBkZWJ1ZzsJLyogaW5zbW9kIHBhcmFtZXRlciAqLwotc3RhdGljIGludCB0aGlzX2FkYXA7Ci0KLXN0YXRpYyBzdHJ1Y3QgaTJjX2NsaWVudCBjbGllbnRfdGVtcGxhdGU7Ci0KLS8qIEFkZHJlc3NlcyB0byBzY2FuICovCi1zdGF0aWMgdW5zaWduZWQgc2hvcnQgbm9ybWFsX2kyY1tdID0geyAweDYwLCAweDYxLCBJMkNfQ0xJRU5UX0VORCB9Owotc3RhdGljIHVuc2lnbmVkIHNob3J0IGlnbm9yZSA9IEkyQ19DTElFTlRfRU5EOwotCi1zdGF0aWMgc3RydWN0IGkyY19jbGllbnRfYWRkcmVzc19kYXRhIGFkZHJfZGF0YSA9IHsKLQkubm9ybWFsX2kyYwk9IG5vcm1hbF9pMmMsCi0JLnByb2JlCQk9ICZpZ25vcmUsCi0JLmlnbm9yZQkJPSAmaWdub3JlLAotfTsKLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi1zdGF0aWMgdW5zaWduZWQgY2hhcgotdHVuZXJfZ2V0c3RhdHVzIChzdHJ1Y3QgaTJjX2NsaWVudCAqYykKLXsKLQl1bnNpZ25lZCBjaGFyIGJ5dGU7Ci0JaWYgKGkyY19tYXN0ZXJfcmVjdihjLCAmYnl0ZSwgMSkgIT0gMSkKLQkJcHJpbnRrKEtFUk5fRVJSICJ0dW5lci0zMDM2OiBJL08gZXJyb3IuXG4iKTsKLQlyZXR1cm4gYnl0ZTsKLX0KLQotI2RlZmluZSBUVU5FUl9GTCAgICAgICAgMHg4MAotCi1zdGF0aWMgaW50Ci10dW5lcl9pc2xvY2tlZCAoc3RydWN0IGkyY19jbGllbnQgKmMpCi17Ci0JcmV0dXJuICh0dW5lcl9nZXRzdGF0dXMoYykgJiBUVU5FUl9GTCk7Ci19Ci0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotc3RhdGljIHZvaWQKLXNldF90dl9mcmVxKHN0cnVjdCBpMmNfY2xpZW50ICpjLCBpbnQgZnJlcSkKLXsKLQl1MTYgZGl2ID0gKChmcmVxICogMjApIC8gMTYpOwotCXVuc2lnbmVkIGxvbmcgZ2l2ZV91cCA9IGppZmZpZXMgKyBIWjsKLQl1bnNpZ25lZCBjaGFyIGJ1ZmZlclsyXTsKLQotCWlmIChkZWJ1ZykKLQkJcHJpbnRrKEtFUk5fREVCVUcgInR1bmVyOiBzZXR0aW5nIGZyZXF1ZW5jeSAlZE1IeiwgZGl2aXNvciAleFxuIiwgZnJlcSAvIDE2LCBkaXYpOwotCi0JLyogU2VsZWN0IGhpZ2ggdHVuaW5nIGN1cnJlbnQgKi8KLQlidWZmZXJbMF0gPSAweDI5OwotCWJ1ZmZlclsxXSA9IDB4M2U7Ci0KLQlpZiAoaTJjX21hc3Rlcl9zZW5kKGMsIGJ1ZmZlciwgMikgIT0gMikKLQkJcHJpbnRrKCJ0dW5lcjogaTJjIGkvbyBlcnJvciAxXG4iKTsKLQotCWJ1ZmZlclswXSA9IDB4ODAgfCAoKGRpdj4+OCkgJiAweDdmKTsKLQlidWZmZXJbMV0gPSBkaXYgJiAweGZmOwotCi0JaWYgKGkyY19tYXN0ZXJfc2VuZChjLCBidWZmZXIsIDIpICE9IDIpCi0JCXByaW50aygidHVuZXI6IGkyYyBpL28gZXJyb3IgMlxuIik7Ci0KLQl3aGlsZSAoIXR1bmVyX2lzbG9ja2VkKGMpICYmIHRpbWVfYmVmb3JlKGppZmZpZXMsIGdpdmVfdXApKQotCQlzY2hlZHVsZSgpOwotCi0JaWYgKCF0dW5lcl9pc2xvY2tlZChjKSkKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAidHVuZXI6IGZhaWxlZCB0byBhY2hpZXZlIFBMTCBsb2NrXG4iKTsKLQotCS8qIFNlbGVjdCBsb3cgdHVuaW5nIGN1cnJlbnQgYW5kIGVuZ2FnZSBBRkMgKi8KLQlidWZmZXJbMF0gPSAweDI5OwotCWJ1ZmZlclsxXSA9IDB4YjI7Ci0KLQlpZiAoaTJjX21hc3Rlcl9zZW5kKGMsIGJ1ZmZlciwgMikgIT0gMikKLQkJcHJpbnRrKCJ0dW5lcjogaTJjIGkvbyBlcnJvciAzXG4iKTsKLQotCWlmIChkZWJ1ZykKLQkJcHJpbnRrKEtFUk5fREVCVUcgInR1bmVyOiBzdGF0dXMgJTAyeFxuIiwgdHVuZXJfZ2V0c3RhdHVzKGMpKTsKLX0KLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi1zdGF0aWMgaW50Ci10dW5lcl9hdHRhY2goc3RydWN0IGkyY19hZGFwdGVyICphZGFwLCBpbnQgYWRkciwgaW50IGtpbmQpCi17Ci0Jc3RhdGljIHVuc2lnbmVkIGNoYXIgYnVmZmVyW10gPSB7IDB4MjksIDB4MzIsIDB4MmEsIDAsIDB4MmIsIDAgfTsKLQotCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQ7Ci0KLQlpZiAodGhpc19hZGFwID4gMCkKLQkJcmV0dXJuIC0xOwotCXRoaXNfYWRhcCsrOwotCi0JY2xpZW50X3RlbXBsYXRlLmFkYXB0ZXIgPSBhZGFwOwotCWNsaWVudF90ZW1wbGF0ZS5hZGRyID0gYWRkcjsKLQotCWNsaWVudCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBpMmNfY2xpZW50KSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKGNsaWVudCA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT01FTTsKLQltZW1jcHkoY2xpZW50LCAmY2xpZW50X3RlbXBsYXRlLCBzaXplb2Yoc3RydWN0IGkyY19jbGllbnQpKTsKLQotCXByaW50aygidHVuZXI6IFNBQjMwMzYgZm91bmQsIHN0YXR1cyAlMDJ4XG4iLCB0dW5lcl9nZXRzdGF0dXMoY2xpZW50KSk7Ci0KLQlpMmNfYXR0YWNoX2NsaWVudChjbGllbnQpOwotCi0JaWYgKGkyY19tYXN0ZXJfc2VuZChjbGllbnQsIGJ1ZmZlciwgMikgIT0gMikKLQkJcHJpbnRrKCJ0dW5lcjogaTJjIGkvbyBlcnJvciAxXG4iKTsKLQlpZiAoaTJjX21hc3Rlcl9zZW5kKGNsaWVudCwgYnVmZmVyKzIsIDIpICE9IDIpCi0JCXByaW50aygidHVuZXI6IGkyYyBpL28gZXJyb3IgMlxuIik7Ci0JaWYgKGkyY19tYXN0ZXJfc2VuZChjbGllbnQsIGJ1ZmZlcis0LCAyKSAhPSAyKQotCQlwcmludGsoInR1bmVyOiBpMmMgaS9vIGVycm9yIDNcbiIpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50Ci10dW5lcl9kZXRhY2goc3RydWN0IGkyY19jbGllbnQgKmMpCi17Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQKLXR1bmVyX2NvbW1hbmQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdW5zaWduZWQgaW50IGNtZCwgdm9pZCAqYXJnKQotewotCWludCAqaWFyZyA9IChpbnQqKWFyZzsKLQotCXN3aXRjaCAoY21kKQotCXsKLQkJY2FzZSBWSURJT0NTRlJFUToKLQkJCXNldF90dl9mcmVxKGNsaWVudCwgKmlhcmcpOwotCQkJYnJlYWs7Ci0KLQkJZGVmYXVsdDoKLQkJCXJldHVybiAtRUlOVkFMOwotCX0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludAotdHVuZXJfcHJvYmUoc3RydWN0IGkyY19hZGFwdGVyICphZGFwKQotewotCXRoaXNfYWRhcCA9IDA7Ci0JaWYgKGFkYXAtPmlkID09IEkyQ19IV19CX0xQKQotCQlyZXR1cm4gaTJjX3Byb2JlKGFkYXAsICZhZGRyX2RhdGEsIHR1bmVyX2F0dGFjaCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLXN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlcgotaTJjX2RyaXZlcl90dW5lciA9Ci17Ci0JLmRyaXZlciA9IHsKLQkJLm5hbWUJPQkic2FiMzAzNiIsCi0JfSwKLQkuaWQJCT0JSTJDX0RSSVZFUklEX1NBQjMwMzYsCi0JLmF0dGFjaF9hZGFwdGVyID0JdHVuZXJfcHJvYmUsCi0JLmRldGFjaF9jbGllbnQgID0JdHVuZXJfZGV0YWNoLAotCS5jb21tYW5kCT0JdHVuZXJfY29tbWFuZAotfTsKLQotc3RhdGljIHN0cnVjdCBpMmNfY2xpZW50IGNsaWVudF90ZW1wbGF0ZSA9Ci17Ci0JLmRyaXZlcgkJPSAmaTJjX2RyaXZlcl90dW5lciwKLQkubmFtZQkJPSAiU0FCMzAzNiIsCi19OwotCi1zdGF0aWMgaW50IF9faW5pdAotdHVuZXIzMDM2X2luaXQodm9pZCkKLXsKLQlyZXR1cm4gaTJjX2FkZF9kcml2ZXIoJmkyY19kcml2ZXJfdHVuZXIpOwotfQotCi1zdGF0aWMgdm9pZCBfX2V4aXQKLXR1bmVyMzAzNl9leGl0KHZvaWQpCi17Ci0JaTJjX2RlbF9kcml2ZXIoJmkyY19kcml2ZXJfdHVuZXIpOwotfQotCi1NT0RVTEVfREVTQ1JJUFRJT04oIlNBQjMwMzYgdHVuZXIgZHJpdmVyIik7Ci1NT0RVTEVfQVVUSE9SKCJQaGlsaXAgQmx1bmRlbGwgPHBoaWxiQGdudS5vcmc+Iik7Ci1NT0RVTEVfTElDRU5TRSgiR1BMIik7Ci0KLW1vZHVsZV9wYXJhbShkZWJ1ZywgaW50LCAwKTsKLU1PRFVMRV9QQVJNX0RFU0MoZGVidWcsIkVuYWJsZSBkZWJ1Z2dpbmcgb3V0cHV0Iik7Ci0KLW1vZHVsZV9pbml0KHR1bmVyMzAzNl9pbml0KTsKLW1vZHVsZV9leGl0KHR1bmVyMzAzNl9leGl0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdHVuZXItY29yZS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby90dW5lci1jb3JlLmMKaW5kZXggZDgwNmEzNS4uNGE3NzM1YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby90dW5lci1jb3JlLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby90dW5lci1jb3JlLmMKQEAgLTkyLDcgKzkyLDYgQEAKIAogCXVuc2lnbmVkIGludCAgICAgICAgdHlwZTsgLyogY2hpcCB0eXBlIGlkICovCiAJdW5zaWduZWQgaW50ICAgICAgICBjb25maWc7Ci0JaW50ICgqdHVuZXJfY2FsbGJhY2spICh2b2lkICpkZXYsIGludCBjb21tYW5kLCBpbnQgYXJnKTsKIAljb25zdCBjaGFyICAgICAgICAgICpuYW1lOwogfTsKIApAQCAtMzQ2LDcgKzM0NSw3IEBACiAKIHN0YXRpYyB2b2lkIHNldF90eXBlKHN0cnVjdCBpMmNfY2xpZW50ICpjLCB1bnNpZ25lZCBpbnQgdHlwZSwKIAkJICAgICB1bnNpZ25lZCBpbnQgbmV3X21vZGVfbWFzaywgdW5zaWduZWQgaW50IG5ld19jb25maWcsCi0JCSAgICAgaW50ICgqdHVuZXJfY2FsbGJhY2spICh2b2lkICpkZXYsIGludCBjb21tYW5kLGludCBhcmcpKQorCQkgICAgIGludCAoKnR1bmVyX2NhbGxiYWNrKSAodm9pZCAqZGV2LCBpbnQgY29tcG9uZW50LCBpbnQgY21kLCBpbnQgYXJnKSkKIHsKIAlzdHJ1Y3QgdHVuZXIgKnQgPSBpMmNfZ2V0X2NsaWVudGRhdGEoYyk7CiAJc3RydWN0IGR2Yl90dW5lcl9vcHMgKmZlX3R1bmVyX29wcyA9ICZ0LT5mZS5vcHMudHVuZXJfb3BzOwpAQCAtMzYyLDcgKzM2MSw3IEBACiAJdC0+Y29uZmlnID0gbmV3X2NvbmZpZzsKIAlpZiAodHVuZXJfY2FsbGJhY2sgIT0gTlVMTCkgewogCQl0dW5lcl9kYmcoImRlZmluaW5nIEdQSU8gY2FsbGJhY2tcbiIpOwotCQl0LT50dW5lcl9jYWxsYmFjayA9IHR1bmVyX2NhbGxiYWNrOworCQl0LT5mZS5jYWxsYmFjayA9IHR1bmVyX2NhbGxiYWNrOwogCX0KIAogCWlmICh0LT5tb2RlID09IFRfVU5JTklUSUFMSVpFRCkgewpAQCAtMzg1LDcgKzM4NCw2IEBACiAJewogCQlzdHJ1Y3QgdGRhODI5eF9jb25maWcgY2ZnID0gewogCQkJLmxuYV9jZmcgICAgICAgID0gdC0+Y29uZmlnLAotCQkJLnR1bmVyX2NhbGxiYWNrID0gdC0+dHVuZXJfY2FsbGJhY2ssCiAJCX07CiAJCWlmICghZHZiX2F0dGFjaCh0ZGE4Mjl4X2F0dGFjaCwgJnQtPmZlLCB0LT5pMmMtPmFkYXB0ZXIsCiAJCQkJdC0+aTJjLT5hZGRyLCAmY2ZnKSkKQEAgLTQzMyw3ICs0MzEsNiBAQAogCQlzdHJ1Y3QgeGMyMDI4X2NvbmZpZyBjZmcgPSB7CiAJCQkuaTJjX2FkYXAgID0gdC0+aTJjLT5hZGFwdGVyLAogCQkJLmkyY19hZGRyICA9IHQtPmkyYy0+YWRkciwKLQkJCS5jYWxsYmFjayAgPSB0LT50dW5lcl9jYWxsYmFjaywKIAkJfTsKIAkJaWYgKCFkdmJfYXR0YWNoKHhjMjAyOF9hdHRhY2gsICZ0LT5mZSwgJmNmZykpCiAJCQlnb3RvIGF0dGFjaF9mYWlsZWQ7CkBAIC00NTAsMTAgKzQ0Nyw4IEBACiAKIAkJeGM1MDAwX2NmZy5pMmNfYWRkcmVzcwkgID0gdC0+aTJjLT5hZGRyOwogCQl4YzUwMDBfY2ZnLmlmX2toegkgID0gNTM4MDsKLQkJeGM1MDAwX2NmZy50dW5lcl9jYWxsYmFjayA9IHQtPnR1bmVyX2NhbGxiYWNrOwogCQlpZiAoIWR2Yl9hdHRhY2goeGM1MDAwX2F0dGFjaCwKLQkJCQkmdC0+ZmUsIHQtPmkyYy0+YWRhcHRlciwgJnhjNTAwMF9jZmcsCi0JCQkJYy0+YWRhcHRlci0+YWxnb19kYXRhKSkKKwkJCQkmdC0+ZmUsIHQtPmkyYy0+YWRhcHRlciwgJnhjNTAwMF9jZmcpKQogCQkJZ290byBhdHRhY2hfZmFpbGVkOwogCiAJCXhjX3R1bmVyX29wcyA9ICZ0LT5mZS5vcHMudHVuZXJfb3BzOwpAQCAtMTIyNSw3ICsxMjIwLDcgQEAKIAl9IGVsc2UgewogCQl0LT5tb2RlID0gVjRMMl9UVU5FUl9ESUdJVEFMX1RWOwogCX0KLQlzZXRfdHlwZShjbGllbnQsIHQtPnR5cGUsIHQtPm1vZGVfbWFzaywgdC0+Y29uZmlnLCB0LT50dW5lcl9jYWxsYmFjayk7CisJc2V0X3R5cGUoY2xpZW50LCB0LT50eXBlLCB0LT5tb2RlX21hc2ssIHQtPmNvbmZpZywgdC0+ZmUuY2FsbGJhY2spOwogCWxpc3RfYWRkX3RhaWwoJnQtPmxpc3QsICZ0dW5lcl9saXN0KTsKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdHZlZXByb20uYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdHZlZXByb20uYwppbmRleCBiY2MzMmZhLi4zYjBiODRjIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3R2ZWVwcm9tLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby90dmVlcHJvbS5jCkBAIC0yNDIsNyArMjQyLDcgQEAKIAl7IFRVTkVSX0FCU0VOVCwgICAgICAgIAkJIlRDTCBNMjUyM18zREJIX0UifSwKIAl7IFRVTkVSX0FCU0VOVCwgICAgICAgIAkJIlRDTCBNMjUyM18zRElIX0UifSwKIAl7IFRVTkVSX0FCU0VOVCwgICAgICAgIAkJIlRDTCBNRlBFMDVfMl9VIn0sCi0JeyBUVU5FUl9QSElMSVBTX0ZNRDEyMTZNRV9NSzMsCSJQaGlsaXBzIEZNRDEyMTZNRVgifSwKKwl7IFRVTkVSX1BISUxJUFNfRk1EMTIxNk1FWF9NSzMsCSJQaGlsaXBzIEZNRDEyMTZNRVgifSwKIAl7IFRVTkVSX0FCU0VOVCwgICAgICAgIAkJIlBoaWxpcHMgRlJIMjAzNkIifSwKIAl7IFRVTkVSX0FCU0VOVCwgICAgICAgIAkJIlBhbmFzb25pYyBFTkdGNzVfMDFHRiJ9LAogCXsgVFVORVJfQUJTRU5ULCAgICAgICAgCQkiTWF4TGluZWFyIE1YTDUwMDUifSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXNidmlkZW8vaWJtY2FtLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3VzYnZpZGVvL2libWNhbS5jCmluZGV4IGNjMjdlZmUuLjI4NDIxZDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXNidmlkZW8vaWJtY2FtLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby91c2J2aWRlby9pYm1jYW0uYwpAQCAtMjU4LDcgKzI1OCw5IEBACiAJCQkgICAgKFJJTkdfUVVFVUVfUEVFSygmdXZkLT5kcCwgMikgPT0gMHgwMCkpCiAJCQl7CiAjaWYgMAkJCQkvKiBUaGlzIGNvZGUgaGVscHMgdG8gZGV0ZWN0IG5ldyBmcmFtZSBtYXJrZXJzICovCi0JCQkJaW5mbygiSGVhZGVyIHNpZzogMDAgRkYgMDAgJTAyWCIsIFJJTkdfUVVFVUVfUEVFSygmdXZkLT5kcCwgMykpOworCQkJCWRldl9pbmZvKCZ1dmQtPmRldi0+ZGV2LAorCQkJCQkgIkhlYWRlciBzaWc6IDAwIEZGIDAwICUwMlhcbiIsCisJCQkJCSBSSU5HX1FVRVVFX1BFRUsoJnV2ZC0+ZHAsIDMpKTsKICNlbmRpZgogCQkJCWZyYW1lLT5oZWFkZXIgPSBSSU5HX1FVRVVFX1BFRUsoJnV2ZC0+ZHAsIDMpOwogCQkJCWlmICgoZnJhbWUtPmhlYWRlciA9PSBIRFJTSUdfTU9ERUwxXzEyOHg5NikgfHwKQEAgLTI2Niw3ICsyNjgsOCBAQAogCQkJCSAgICAoZnJhbWUtPmhlYWRlciA9PSBIRFJTSUdfTU9ERUwxXzM1MngyODgpKQogCQkJCXsKICNpZiAwCi0JCQkJCWluZm8oIkhlYWRlciBmb3VuZC4iKTsKKwkJCQkJZGV2X2luZm8oJnV2ZC0+ZGV2LT5kZXYsCisJCQkJCQkgIkhlYWRlciBmb3VuZC5cbiIpOwogI2VuZGlmCiAJCQkJCVJJTkdfUVVFVUVfREVRVUVVRV9CWVRFUygmdXZkLT5kcCwgbWFya2VyX2xlbik7CiAJCQkJCWljYW0tPmhhc19oZHIgPSAxOwpAQCAtMjk1LDcgKzI5OCw3IEBACiAJCQkgICAgKFJJTkdfUVVFVUVfUEVFSygmdXZkLT5kcCwgMSkgPT0gMHhGRikpCiAJCQl7CiAjaWYgMAotCQkJCWluZm8oIkhlYWRlciBmb3VuZC4iKTsKKwkJCQlkZXZfaW5mbygmdXZkLT5kZXYtPmRldiwgIkhlYWRlciBmb3VuZC5cbiIpOwogI2VuZGlmCiAJCQkJUklOR19RVUVVRV9ERVFVRVVFX0JZVEVTKCZ1dmQtPmRwLCBtYXJrZXJfbGVuKTsKIAkJCQlpY2FtLT5oYXNfaGRyID0gMTsKQEAgLTMzOCw3ICszNDEsNyBAQAogCQkJCWJ5dGU0ID0gUklOR19RVUVVRV9QRUVLKCZ1dmQtPmRwLCAzKTsKIAkJCQlmcmFtZS0+aGVhZGVyID0gKGJ5dGUzIDw8IDgpIHwgYnl0ZTQ7CiAjaWYgMAotCQkJCWluZm8oIkhlYWRlciBmb3VuZC4iKTsKKwkJCQlkZXZfaW5mbygmdXZkLT5kZXYtPmRldiwgIkhlYWRlciBmb3VuZC5cbiIpOwogI2VuZGlmCiAJCQkJUklOR19RVUVVRV9ERVFVRVVFX0JZVEVTKCZ1dmQtPmRwLCBtYXJrZXJfbGVuKTsKIAkJCQlpY2FtLT5oYXNfaGRyID0gMTsKQEAgLTM1NCw3ICszNTcsOCBAQAogCX0KIAlpZiAoIWljYW0tPmhhc19oZHIpIHsKIAkJaWYgKHV2ZC0+ZGVidWcgPiAyKQotCQkJaW5mbygiU2tpcHBpbmcgZnJhbWUsIG5vIGhlYWRlciIpOworCQkJZGV2X2luZm8oJnV2ZC0+ZGV2LT5kZXYsCisJCQkJICJTa2lwcGluZyBmcmFtZSwgbm8gaGVhZGVyXG4iKTsKIAkJcmV0dXJuIHNjYW5fRW5kUGFyc2U7CiAJfQogCkBAIC04ODEsNyArODg1LDkgQEAKIAkgKi8KIAlpZiAoKGZyYW1lLT5jdXJsaW5lICsgMSkgPj0gZGF0YV9oKSB7CiAJCWlmICh1dmQtPmRlYnVnID49IDMpCi0JCQlpbmZvKCJSZWFjaGVkIGxpbmUgJWQuIChmcmFtZSBpcyBkb25lKSIsIGZyYW1lLT5jdXJsaW5lKTsKKwkJCWRldl9pbmZvKCZ1dmQtPmRldi0+ZGV2LAorCQkJCSAiUmVhY2hlZCBsaW5lICVkLiAoZnJhbWUgaXMgZG9uZSlcbiIsCisJCQkJIGZyYW1lLT5jdXJsaW5lKTsKIAkJcmV0dXJuIHNjYW5fTmV4dEZyYW1lOwogCX0KIApAQCAtOTU0LDggKzk2MCw5IEBACiAKIAlpZiAoZnJhbWUtPmN1cmxpbmUgPj0gVklERU9TSVpFX1koZnJhbWUtPnJlcXVlc3QpKSB7CiAJCWlmICh1dmQtPmRlYnVnID49IDMpIHsKLQkJCWluZm8oIkFsbCByZXF1ZXN0ZWQgbGluZXMgKCVsZC4pIGRvbmUuIiwKLQkJCSAgICAgVklERU9TSVpFX1koZnJhbWUtPnJlcXVlc3QpKTsKKwkJCWRldl9pbmZvKCZ1dmQtPmRldi0+ZGV2LAorCQkJCSAiQWxsIHJlcXVlc3RlZCBsaW5lcyAoJWxkLikgZG9uZS5cbiIsCisJCQkJIFZJREVPU0laRV9ZKGZyYW1lLT5yZXF1ZXN0KSk7CiAJCX0KIAkJcmV0dXJuIHNjYW5fTmV4dEZyYW1lOwogCX0gZWxzZQpAQCAtMTAwMCw3ICsxMDA3LDkgQEAKIAkgKi8KIAlpZiAoKGZyYW1lLT5jdXJsaW5lICsgMSkgPj0gZGF0YV9oKSB7CiAJCWlmICh1dmQtPmRlYnVnID49IDMpCi0JCQlpbmZvKCJSZWFjaGVkIGxpbmUgJWQuIChmcmFtZSBpcyBkb25lKSIsIGZyYW1lLT5jdXJsaW5lKTsKKwkJCWRldl9pbmZvKCZ1dmQtPmRldi0+ZGV2LAorCQkJCSAiUmVhY2hlZCBsaW5lICVkLiAoZnJhbWUgaXMgZG9uZSlcbiIsCisJCQkJIGZyYW1lLT5jdXJsaW5lKTsKIAkJcmV0dXJuIHNjYW5fTmV4dEZyYW1lOwogCX0KIApAQCAtMTA0OSw4ICsxMDU4LDkgQEAKIAogCWlmIChmcmFtZS0+Y3VybGluZSA+PSBWSURFT1NJWkVfWShmcmFtZS0+cmVxdWVzdCkpIHsKIAkJaWYgKHV2ZC0+ZGVidWcgPj0gMykgewotCQkJaW5mbygiQWxsIHJlcXVlc3RlZCBsaW5lcyAoJWxkLikgZG9uZS4iLAotCQkJICAgICBWSURFT1NJWkVfWShmcmFtZS0+cmVxdWVzdCkpOworCQkJZGV2X2luZm8oJnV2ZC0+ZGV2LT5kZXYsCisJCQkJICJBbGwgcmVxdWVzdGVkIGxpbmVzICglbGQuKSBkb25lLlxuIiwKKwkJCQkgVklERU9TSVpFX1koZnJhbWUtPnJlcXVlc3QpKTsKIAkJfQogCQlyZXR1cm4gc2Nhbl9OZXh0RnJhbWU7CiAJfSBlbHNlCkBAIC0xMTcxLDEwICsxMTgxLDExIEBACiAJCQlzaXplb2YoY3ApLAogCQkJMTAwMCk7CiAjaWYgMAotCQlpbmZvKCJVU0IgPT4gJTAyeCUwMnglMDJ4JTAyeCUwMnglMDJ4JTAyeCUwMnggIgotCQkgICAgICAgIihyZXE9JCUwMnggdmFsPSQlMDR4IGluZD0kJTA0eCkiLAotCQkgICAgICAgY3BbMF0sY3BbMV0sY3BbMl0sY3BbM10sY3BbNF0sY3BbNV0sY3BbNl0sY3BbN10sCi0JCSAgICAgICByZXEsIHZhbHVlLCBpbmRleCk7CisJCWRldl9pbmZvKCZ1dmQtPmRldi0+ZGV2LAorCQkJICJVU0IgPT4gJTAyeCUwMnglMDJ4JTAyeCUwMnglMDJ4JTAyeCUwMnggIgorCQkJICIocmVxPSQlMDJ4IHZhbD0kJTA0eCBpbmQ9JCUwNHgpXG4iLAorCQkJIGNwWzBdLGNwWzFdLGNwWzJdLGNwWzNdLGNwWzRdLGNwWzVdLGNwWzZdLGNwWzddLAorCQkJIHJlcSwgdmFsdWUsIGluZGV4KTsKICNlbmRpZgogCX0gZWxzZSB7CiAJCWkgPSB1c2JfY29udHJvbF9tc2coCkBAIC0xNDQ5LDEwICsxNDYwLDkgQEAKICAqLwogc3RhdGljIHZvaWQgaWJtY2FtX2NoYW5nZV9saWdodGluZ19jb25kaXRpb25zKHN0cnVjdCB1dmQgKnV2ZCkKIHsKLQlzdGF0aWMgY29uc3QgY2hhciBwcm9jW10gPSAiaWJtY2FtX2NoYW5nZV9saWdodGluZ19jb25kaXRpb25zIjsKLQogCWlmIChkZWJ1ZyA+IDApCi0JCWluZm8oIiVzOiBTZXQgbGlnaHRpbmcgdG8gJWh1LiIsIHByb2MsIGxpZ2h0aW5nKTsKKwkJZGV2X2luZm8oJnV2ZC0+ZGV2LT5kZXYsCisJCQkgIiVzOiBTZXQgbGlnaHRpbmcgdG8gJWh1LlxuIiwgX19mdW5jX18sIGxpZ2h0aW5nKTsKIAogCXN3aXRjaCAoSUJNQ0FNX1QodXZkKS0+Y2FtZXJhX21vZGVsKSB7CiAJY2FzZSBJQk1DQU1fTU9ERUxfMToKQEAgLTE0OTUsOCArMTUwNSw2IEBACiAgKi8KIHN0YXRpYyB2b2lkIGlibWNhbV9zZXRfc2hhcnBuZXNzKHN0cnVjdCB1dmQgKnV2ZCkKIHsKLQlzdGF0aWMgY29uc3QgY2hhciBwcm9jW10gPSAiaWJtY2FtX3NldF9zaGFycG5lc3MiOwotCiAJc3dpdGNoIChJQk1DQU1fVCh1dmQpLT5jYW1lcmFfbW9kZWwpIHsKIAljYXNlIElCTUNBTV9NT0RFTF8xOgogCXsKQEAgLTE1MDUsNyArMTUxMyw4IEBACiAKIAkJUkVTVFJJQ1RfVE9fUkFOR0Uoc2hhcnBuZXNzLCBTSEFSUE5FU1NfTUlOLCBTSEFSUE5FU1NfTUFYKTsKIAkJaWYgKGRlYnVnID4gMCkKLQkJCWluZm8oIiVzOiBTZXQgc2hhcnBuZXNzIHRvICVodS4iLCBwcm9jLCBzaGFycG5lc3MpOworCQkJZGV2X2luZm8oJnV2ZC0+ZGV2LT5kZXYsICIlczogU2V0IHNoYXJwbmVzcyB0byAlaHUuXG4iLAorCQkJCSBfX2Z1bmNfXywgc2hhcnBuZXNzKTsKIAogCQlzdiA9IHNhW3NoYXJwbmVzcyAtIFNIQVJQTkVTU19NSU5dOwogCQlmb3IgKGk9MDsgaSA8IDI7IGkrKykgewpAQCAtMTU2NCwxMSArMTU3MywxMSBAQAogICovCiBzdGF0aWMgdm9pZCBpYm1jYW1fc2V0X2JyaWdodG5lc3Moc3RydWN0IHV2ZCAqdXZkKQogewotCXN0YXRpYyBjb25zdCBjaGFyIHByb2NbXSA9ICJpYm1jYW1fc2V0X2JyaWdodG5lc3MiOwogCXN0YXRpYyBjb25zdCB1bnNpZ25lZCBzaG9ydCBuID0gMTsKIAogCWlmIChkZWJ1ZyA+IDApCi0JCWluZm8oIiVzOiBTZXQgYnJpZ2h0bmVzcyB0byAlaHUuIiwgcHJvYywgdXZkLT52cGljLmJyaWdodG5lc3MpOworCQlkZXZfaW5mbygmdXZkLT5kZXYtPmRldiwgIiVzOiBTZXQgYnJpZ2h0bmVzcyB0byAlaHUuXG4iLAorCQkJIF9fZnVuY19fLCB1dmQtPnZwaWMuYnJpZ2h0bmVzcyk7CiAKIAlzd2l0Y2ggKElCTUNBTV9UKHV2ZCktPmNhbWVyYV9tb2RlbCkgewogCWNhc2UgSUJNQ0FNX01PREVMXzE6CkBAIC0yMTE1LDcgKzIxMjQsOCBAQAogCQkJYnJlYWs7CiAJCX0KIAkJaWYgKHV2ZC0+ZGVidWcgPiAwKQotCQkJaW5mbygiRnJhbWVyYXRlIChoYXJkd2FyZSk6ICVoZC4iLCBod19mcHMpOworCQkJZGV2X2luZm8oJnV2ZC0+ZGV2LT5kZXYsICJGcmFtZXJhdGUgKGhhcmR3YXJlKTogJWhkLlxuIiwKKwkJCQkgaHdfZnBzKTsKIAkJUkVTVFJJQ1RfVE9fUkFOR0UoaHdfZnBzLCAwLCAzMSk7CiAJCWlibWNhbV9tb2RlbDJfUGFja2V0MSh1dmQsIG1vZDJfc2V0X2ZyYW1lcmF0ZSwgaHdfZnBzKTsKIAl9CkBAIC0zNDg3LDcgKzM0OTcsNyBAQAogCS8qIDAxLjAxLjA4IC0gQWRkZWQgZm9yIFJDQSB2aWRlbyBpbiBzdXBwb3J0IC1MTyAqLwogCWlmKGluaXRfbW9kZWwzX2lucHV0KSB7CiAJCWlmIChkZWJ1ZyA+IDApCi0JCQlpbmZvKCJTZXR0aW5nIGlucHV0IHRvIFJDQS4iKTsKKwkJCWRldl9pbmZvKCZ1dmQtPmRldi0+ZGV2LCAiU2V0dGluZyBpbnB1dCB0byBSQ0EuXG4iKTsKIAkJZm9yIChpPTA7IGkgPCBBUlJBWV9TSVpFKGluaXREYXRhKTsgaSsrKSB7CiAJCQlpYm1jYW1fdmVpbyh1dmQsIGluaXREYXRhW2ldLnJlcSwgaW5pdERhdGFbaV0udmFsdWUsIGluaXREYXRhW2ldLmluZGV4KTsKIAkJfQpAQCAtMzY4NSw3ICszNjk1LDcgQEAKIAl1bnNpZ25lZCBjaGFyIHZpZGVvX2VwID0gMDsKIAogCWlmIChkZWJ1ZyA+PSAxKQotCQlpbmZvKCJpYm1jYW1fcHJvYmUoJXAsJXUuKSIsIGludGYsIGlmbnVtKTsKKwkJZGV2X2luZm8oJnV2ZC0+ZGV2LT5kZXYsICJpYm1jYW1fcHJvYmUoJXAsJXUuKVxuIiwgaW50ZiwgaWZudW0pOwogCiAJLyogV2UgZG9uJ3QgaGFuZGxlIG11bHRpLWNvbmZpZyBjYW1lcmFzICovCiAJaWYgKGRldi0+ZGVzY3JpcHRvci5iTnVtQ29uZmlndXJhdGlvbnMgIT0gMSkKQEAgLTM3MzYsMTQgKzM3NDYsMTYgQEAKIAkJCWJyYW5kID0gIklCTSBQQyBDYW1lcmEiOyAvKiBhLmsuYS4gWGlybGluayBDLUl0ICovCiAJCQlicmVhazsKIAkJfQotCQlpbmZvKCIlcyBVU0IgY2FtZXJhIGZvdW5kIChtb2RlbCAlZCwgcmV2LiAweCUwNHgpIiwKLQkJICAgICBicmFuZCwgbW9kZWwsIGxlMTZfdG9fY3B1KGRldi0+ZGVzY3JpcHRvci5iY2REZXZpY2UpKTsKKwkJZGV2X2luZm8oJnV2ZC0+ZGV2LT5kZXYsCisJCQkgIiVzIFVTQiBjYW1lcmEgZm91bmQgKG1vZGVsICVkLCByZXYuIDB4JTA0eClcbiIsCisJCQkgYnJhbmQsIG1vZGVsLCBsZTE2X3RvX2NwdShkZXYtPmRlc2NyaXB0b3IuYmNkRGV2aWNlKSk7CiAJfSB3aGlsZSAoMCk7CiAKIAkvKiBWYWxpZGF0ZSBmb3VuZCBpbnRlcmZhY2U6IG11c3QgaGF2ZSBvbmUgSVNPIGVuZHBvaW50ICovCiAJbmFzID0gaW50Zi0+bnVtX2FsdHNldHRpbmc7CiAJaWYgKGRlYnVnID4gMCkKLQkJaW5mbygiTnVtYmVyIG9mIGFsdGVybmF0ZSBzZXR0aW5ncz0lZC4iLCBuYXMpOworCQlkZXZfaW5mbygmdXZkLT5kZXYtPmRldiwgIk51bWJlciBvZiBhbHRlcm5hdGUgc2V0dGluZ3M9JWQuXG4iLAorCQkJIG5hcyk7CiAJaWYgKG5hcyA8IDIpIHsKIAkJZXJyKCJUb28gZmV3IGFsdGVybmF0ZSBzZXR0aW5ncyBmb3IgdGhpcyBjYW1lcmEhIik7CiAJCXJldHVybiAtRU5PREVWOwpAQCAtMzc4Nyw3ICszNzk5LDkgQEAKIAkJCQlhY3RJbnRlcmZhY2UgPSBpOwogCQkJCW1heFBTID0gbGUxNl90b19jcHUoZW5kcG9pbnQtPndNYXhQYWNrZXRTaXplKTsKIAkJCQlpZiAoZGVidWcgPiAwKQotCQkJCQlpbmZvKCJBY3RpdmUgc2V0dGluZz0lZC4gbWF4UFM9JWQuIiwgaSwgbWF4UFMpOworCQkJCQlkZXZfaW5mbygmdXZkLT5kZXYtPmRldiwKKwkJCQkJCSAiQWN0aXZlIHNldHRpbmc9JWQuICIKKwkJCQkJCSAibWF4UFM9JWQuXG4iLCBpLCBtYXhQUyk7CiAJCQl9IGVsc2UKIAkJCQllcnIoIk1vcmUgdGhhbiBvbmUgYWN0aXZlIGFsdC4gc2V0dGluZyEgSWdub3JpbmcgIyVkLiIsIGkpOwogCQl9CkBAIC0zODI2LDcgKzM4NDAsNyBAQAogCQkJUkVTVFJJQ1RfVE9fUkFOR0UoZnJhbWVyYXRlLCAwLCA1KTsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgotCQkJaW5mbygiSUJNIGNhbWVyYTogdXNpbmcgMzIweDI0MCIpOworCQkJZGV2X2luZm8oJnV2ZC0+ZGV2LT5kZXYsICJJQk0gY2FtZXJhOiB1c2luZyAzMjB4MjQwXG4iKTsKIAkJCXNpemUgPSBTSVpFXzMyMHgyNDA7CiAJCQkvKiBObyBicmVhayBoZXJlICovCiAJCWNhc2UgU0laRV8zMjB4MjQwOgpAQCAtMzg1NSw3ICszODY5LDcgQEAKIAkJCWNhbnZhc1kgPSAxMjA7CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKLQkJCWluZm8oIklCTSBOZXRDYW1lcmE6IHVzaW5nIDE3NngxNDQiKTsKKwkJCWRldl9pbmZvKCZ1dmQtPmRldi0+ZGV2LCAiSUJNIE5ldENhbWVyYTogdXNpbmcgMTc2eDE0NFxuIik7CiAJCQlzaXplID0gU0laRV8xNzZ4MTQ0OwogCQkJLyogTm8gYnJlYWsgaGVyZSAqLwogCQljYXNlIFNJWkVfMTc2eDE0NDoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXNidmlkZW8va29uaWNhd2MuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXNidmlkZW8va29uaWNhd2MuYwppbmRleCAxYzE4MDI4Li5kYTI3YTUyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3VzYnZpZGVvL2tvbmljYXdjLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby91c2J2aWRlby9rb25pY2F3Yy5jCkBAIC0yMjksNyArMjI5LDggQEAKIAogCWNhbS0+aW5wdXQgPSBpbnB1dF9kZXYgPSBpbnB1dF9hbGxvY2F0ZV9kZXZpY2UoKTsKIAlpZiAoIWlucHV0X2RldikgewotCQl3YXJuKCJOb3QgZW5vdWdoIG1lbW9yeSBmb3IgY2FtZXJhJ3MgaW5wdXQgZGV2aWNlXG4iKTsKKwkJZGV2X3dhcm4oJmRldi0+ZGV2LAorCQkJICJOb3QgZW5vdWdoIG1lbW9yeSBmb3IgY2FtZXJhJ3MgaW5wdXQgZGV2aWNlXG4iKTsKIAkJcmV0dXJuOwogCX0KIApAQCAtMjQzLDggKzI0NCw5IEBACiAKIAllcnJvciA9IGlucHV0X3JlZ2lzdGVyX2RldmljZShjYW0tPmlucHV0KTsKIAlpZiAoZXJyb3IpIHsKLQkJd2FybigiRmFpbGVkIHRvIHJlZ2lzdGVyIGNhbWVyYSdzIGlucHV0IGRldmljZSwgZXJyOiAlZFxuIiwKLQkJICAgICBlcnJvcik7CisJCWRldl93YXJuKCZkZXYtPmRldiwKKwkJCSAiRmFpbGVkIHRvIHJlZ2lzdGVyIGNhbWVyYSdzIGlucHV0IGRldmljZSwgZXJyOiAlZFxuIiwKKwkJCSBlcnJvcik7CiAJCWlucHV0X2ZyZWVfZGV2aWNlKGNhbS0+aW5wdXQpOwogCQljYW0tPmlucHV0ID0gTlVMTDsKIAl9CkBAIC0zMzcsNyArMzM5LDggQEAKIAkJfQogCiAJCWlmKChzdHMgPiAweDAxKSAmJiAoc3RzIDwgMHg4MCkpIHsKLQkJCWluZm8oInVua25vd24gc3RhdHVzICUyLjJ4Iiwgc3RzKTsKKwkJCWRldl9pbmZvKCZ1dmQtPmRldi0+ZGV2LCAidW5rbm93biBzdGF0dXMgJTIuMnhcbiIsCisJCQkJIHN0cyk7CiAJCQliYWQrKzsKIAkJCWNvbnRpbnVlOwogCQl9CkBAIC01NjgsOCArNTcxLDEyIEBACiAJCQkJCWZkcm9wcyA9ICgweDgwICsgY3VyZnJhbWUgLSBjYW0tPmxhc3RmcmFtZSkgJiAweDdGOwogCQkJCQlmZHJvcHMtLTsKIAkJCQkJaWYoZmRyb3BzKSB7Ci0JCQkJCQlpbmZvKCJEcm9wcGVkICVkIGZyYW1lcyAoJWQgLT4gJWQpIiwgZmRyb3BzLAotCQkJCQkJICAgICBjYW0tPmxhc3RmcmFtZSwgY3VyZnJhbWUpOworCQkJCQkJZGV2X2luZm8oJnV2ZC0+ZGV2LT5kZXYsCisJCQkJCQkJICJEcm9wcGVkICVkIGZyYW1lcyAiCisJCQkJCQkJICIoJWQgLT4gJWQpXG4iLAorCQkJCQkJCSBmZHJvcHMsCisJCQkJCQkJIGNhbS0+bGFzdGZyYW1lLAorCQkJCQkJCSBjdXJmcmFtZSk7CiAJCQkJCX0KIAkJCQl9CiAJCQkJY2FtLT5sYXN0ZnJhbWUgPSBjdXJmcmFtZTsKQEAgLTc4NCw3ICs3OTEsOCBAQAogCWlmIChkZXYtPmRlc2NyaXB0b3IuYk51bUNvbmZpZ3VyYXRpb25zICE9IDEpCiAJCXJldHVybiAtRU5PREVWOwogCi0JaW5mbygiS29uaWNhIFdlYmNhbSAocmV2LiAweCUwNHgpIiwgbGUxNl90b19jcHUoZGV2LT5kZXNjcmlwdG9yLmJjZERldmljZSkpOworCWRldl9pbmZvKCZpbnRmLT5kZXYsICJLb25pY2EgV2ViY2FtIChyZXYuIDB4JTA0eClcbiIsCisJCSBsZTE2X3RvX2NwdShkZXYtPmRlc2NyaXB0b3IuYmNkRGV2aWNlKSk7CiAJUkVTVFJJQ1RfVE9fUkFOR0Uoc3BlZWQsIDAsIE1BWF9TUEVFRCk7CiAKIAkvKiBWYWxpZGF0ZSBmb3VuZCBpbnRlcmZhY2U6IG11c3QgaGF2ZSBvbmUgSVNPIGVuZHBvaW50ICovCkBAIC05MjUsNyArOTMzLDggQEAKIHN0YXRpYyBpbnQgX19pbml0IGtvbmljYXdjX2luaXQodm9pZCkKIHsKIAlzdHJ1Y3QgdXNidmlkZW9fY2IgY2JUYmw7Ci0JaW5mbyhEUklWRVJfREVTQyAiICIgRFJJVkVSX1ZFUlNJT04pOworCXByaW50ayhLRVJOX0lORk8gS0JVSUxEX01PRE5BTUUgIjogIiBEUklWRVJfVkVSU0lPTiAiOiIKKwkgICAgICAgRFJJVkVSX0RFU0MgIlxuIik7CiAJbWVtc2V0KCZjYlRibCwgMCwgc2l6ZW9mKGNiVGJsKSk7CiAJY2JUYmwucHJvYmUgPSBrb25pY2F3Y19wcm9iZTsKIAljYlRibC5zZXR1cE9uT3BlbiA9IGtvbmljYXdjX3NldHVwX29uX29wZW47CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3VzYnZpZGVvL3F1aWNrY2FtX21lc3Nlbmdlci5jIGIvZHJpdmVycy9tZWRpYS92aWRlby91c2J2aWRlby9xdWlja2NhbV9tZXNzZW5nZXIuYwppbmRleCAzZDI2YTMwLi40NDU5YjhhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3VzYnZpZGVvL3F1aWNrY2FtX21lc3Nlbmdlci5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXNidmlkZW8vcXVpY2tjYW1fbWVzc2VuZ2VyLmMKQEAgLTkzLDcgKzkzLDcgQEAKIAogCWNhbS0+aW5wdXQgPSBpbnB1dF9kZXYgPSBpbnB1dF9hbGxvY2F0ZV9kZXZpY2UoKTsKIAlpZiAoIWlucHV0X2RldikgewotCQl3YXJuKCJpbnN1ZmZpY2llbnQgbWVtIGZvciBjYW0gaW5wdXQgZGV2aWNlIik7CisJCWRldl93YXJuKCZkZXYtPmRldiwgImluc3VmZmljaWVudCBtZW0gZm9yIGNhbSBpbnB1dCBkZXZpY2VcbiIpOwogCQlyZXR1cm47CiAJfQogCkBAIC0xMDcsOCArMTA3LDkgQEAKIAogCWVycm9yID0gaW5wdXRfcmVnaXN0ZXJfZGV2aWNlKGNhbS0+aW5wdXQpOwogCWlmIChlcnJvcikgewotCQl3YXJuKCJGYWlsZWQgdG8gcmVnaXN0ZXIgY2FtZXJhJ3MgaW5wdXQgZGV2aWNlLCBlcnI6ICVkXG4iLAotCQkgICAgIGVycm9yKTsKKwkJZGV2X3dhcm4oJmRldi0+ZGV2LAorCQkJICJGYWlsZWQgdG8gcmVnaXN0ZXIgY2FtZXJhJ3MgaW5wdXQgZGV2aWNlLCBlcnI6ICVkXG4iLAorCQkJIGVycm9yKTsKIAkJaW5wdXRfZnJlZV9kZXZpY2UoY2FtLT5pbnB1dCk7CiAJCWNhbS0+aW5wdXQgPSBOVUxMOwogCX0KQEAgLTU4Nyw4ICs1ODgsOSBAQAogCQkJZGF0YXVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0ub2Zmc2V0OwogCiAJCWlmIChzdCA8IDApIHsKLQkJCXdhcm4oIkRhdGEgZXJyb3I6IHBhY2tldD0lZC4gbGVuPSVkLiBzdGF0dXM9JWQuIiwKLQkJCSAgICAgIGksIG4sIHN0KTsKKwkJCWRldl93YXJuKCZ1dmQtPmRldi0+ZGV2LAorCQkJCSAiRGF0YSBlcnJvcjogcGFja2V0PSVkLiBsZW49JWQuIHN0YXR1cz0lZC5cbiIsCisJCQkJIGksIG4sIHN0KTsKIAkJCXV2ZC0+c3RhdHMuaXNvX2Vycl9jb3VudCsrOwogCQkJY29udGludWU7CiAJCX0KQEAgLTY5OSw3ICs3MDEsNyBAQAogCiAJcmV0ID0gcWNtX2NhbWVyYV9vZmYodXZkKTsKIAlpZiAocmV0KQotCQl3YXJuKCJjb3VsZG4ndCB0dXJuIHRoZSBjYW0gb2ZmLiIpOworCQlkZXZfd2FybigmdXZkLT5kZXYtPmRldiwgImNvdWxkbid0IHR1cm4gdGhlIGNhbSBvZmYuXG4iKTsKIAogCXV2ZC0+c3RyZWFtaW5nID0gMDsKIApAQCAtMTA4MCw3ICsxMDgyLDggQEAKIAogc3RhdGljIGludCBfX2luaXQgcWNtX2luaXQodm9pZCkKIHsKLQlpbmZvKERSSVZFUl9ERVNDICIgIiBEUklWRVJfVkVSU0lPTik7CisJcHJpbnRrKEtFUk5fSU5GTyBLQlVJTERfTU9ETkFNRSAiOiAiIERSSVZFUl9WRVJTSU9OICI6IgorCSAgICAgICBEUklWRVJfREVTQyAiXG4iKTsKIAogCXJldHVybiB1c2J2aWRlb19yZWdpc3RlcigKIAkJJmNhbXMsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3VzYnZpZGVvL3VsdHJhY2FtLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3VzYnZpZGVvL3VsdHJhY2FtLmMKaW5kZXggOTU0NGU2NC4uOTcxNGJhYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby91c2J2aWRlby91bHRyYWNhbS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXNidmlkZW8vdWx0cmFjYW0uYwpAQCAtMTU2LDEwICsxNTYsMTEgQEAKIAkJCXNpemVvZihjcCksCiAJCQkxMDAwKTsKICNpZiAxCi0JCWluZm8oIlVTQiA9PiAlMDJ4JTAyeCUwMnglMDJ4JTAyeCUwMnglMDJ4JTAyeCAiCi0JCSAgICAgICAiKHJlcT0kJTAyeCB2YWw9JCUwNHggaW5kPSQlMDR4KSIsCi0JCSAgICAgICBjcFswXSxjcFsxXSxjcFsyXSxjcFszXSxjcFs0XSxjcFs1XSxjcFs2XSxjcFs3XSwKLQkJICAgICAgIHJlcSwgdmFsdWUsIGluZGV4KTsKKwkJZGV2X2luZm8oJnV2ZC0+ZGV2LT5kZXYsCisJCQkgIlVTQiA9PiAlMDJ4JTAyeCUwMnglMDJ4JTAyeCUwMnglMDJ4JTAyeCAiCisJCQkgIihyZXE9JCUwMnggdmFsPSQlMDR4IGluZD0kJTA0eClcbiIsCisJCQkgY3BbMF0sY3BbMV0sY3BbMl0sY3BbM10sY3BbNF0sY3BbNV0sY3BbNl0sY3BbN10sCisJCQkgcmVxLCB2YWx1ZSwgaW5kZXgpOwogI2VuZGlmCiAJfSBlbHNlIHsKIAkJaSA9IHVzYl9jb250cm9sX21zZygKQEAgLTUxNywxOSArNTE4LDIwIEBACiAJdW5zaWduZWQgY2hhciB2aWRlb19lcCA9IDA7CiAKIAlpZiAoZGVidWcgPj0gMSkKLQkJaW5mbygidWx0cmFjYW1fcHJvYmUoJXApIiwgaW50Zik7CisJCWRldl9pbmZvKCZpbnRmLT5kZXYsICJ1bHRyYWNhbV9wcm9iZVxuIik7CiAKIAkvKiBXZSBkb24ndCBoYW5kbGUgbXVsdGktY29uZmlnIGNhbWVyYXMgKi8KIAlpZiAoZGV2LT5kZXNjcmlwdG9yLmJOdW1Db25maWd1cmF0aW9ucyAhPSAxKQogCQlyZXR1cm4gLUVOT0RFVjsKIAotCWluZm8oIklCTSBVbHRyYSBjYW1lcmEgZm91bmQgKHJldi4gMHglMDR4KSIsCi0JCWxlMTZfdG9fY3B1KGRldi0+ZGVzY3JpcHRvci5iY2REZXZpY2UpKTsKKwlkZXZfaW5mbygmaW50Zi0+ZGV2LCAiSUJNIFVsdHJhIGNhbWVyYSBmb3VuZCAocmV2LiAweCUwNHgpXG4iLAorCQkgbGUxNl90b19jcHUoZGV2LT5kZXNjcmlwdG9yLmJjZERldmljZSkpOwogCiAJLyogVmFsaWRhdGUgZm91bmQgaW50ZXJmYWNlOiBtdXN0IGhhdmUgb25lIElTTyBlbmRwb2ludCAqLwogCW5hcyA9IGludGYtPm51bV9hbHRzZXR0aW5nOwogCWlmIChkZWJ1ZyA+IDApCi0JCWluZm8oIk51bWJlciBvZiBhbHRlcm5hdGUgc2V0dGluZ3M9JWQuIiwgbmFzKTsKKwkJZGV2X2luZm8oJmludGYtPmRldiwgIk51bWJlciBvZiBhbHRlcm5hdGUgc2V0dGluZ3M9JWQuXG4iLAorCQkJIG5hcyk7CiAJaWYgKG5hcyA8IDgpIHsKIAkJZXJyKCJUb28gZmV3IGFsdGVybmF0ZSBzZXR0aW5ncyBmb3IgdGhpcyBjYW1lcmEhIik7CiAJCXJldHVybiAtRU5PREVWOwpAQCAtNTc2LDcgKzU3OCw5IEBACiAJCQkJYWN0SW50ZXJmYWNlID0gaTsKIAkJCQltYXhQUyA9IGxlMTZfdG9fY3B1KGVuZHBvaW50LT53TWF4UGFja2V0U2l6ZSk7CiAJCQkJaWYgKGRlYnVnID4gMCkKLQkJCQkJaW5mbygiQWN0aXZlIHNldHRpbmc9JWQuIG1heFBTPSVkLiIsIGksIG1heFBTKTsKKwkJCQkJZGV2X2luZm8oJmludGYtPmRldiwKKwkJCQkJCSAiQWN0aXZlIHNldHRpbmc9JWQuICIKKwkJCQkJCSAibWF4UFM9JWQuXG4iLCBpLCBtYXhQUyk7CiAJCQl9IGVsc2UgewogCQkJCS8qIEdvdCBhbm90aGVyIGFjdGl2ZSBhbHQuIHNldHRpbmcgKi8KIAkJCQlpZiAobWF4UFMgPCBsZTE2X3RvX2NwdShlbmRwb2ludC0+d01heFBhY2tldFNpemUpKSB7CkBAIC01ODQsOCArNTg4LDExIEBACiAJCQkJCWFjdEludGVyZmFjZSA9IGk7CiAJCQkJCW1heFBTID0gbGUxNl90b19jcHUoZW5kcG9pbnQtPndNYXhQYWNrZXRTaXplKTsKIAkJCQkJaWYgKGRlYnVnID4gMCkgewotCQkJCQkJaW5mbygiRXZlbiBiZXR0ZXIgY3RpdmUgc2V0dGluZz0lZC4gbWF4UFM9JWQuIiwKLQkJCQkJCSAgICAgaSwgbWF4UFMpOworCQkJCQkJZGV2X2luZm8oJmludGYtPmRldiwKKwkJCQkJCQkgIkV2ZW4gYmV0dGVyIGN0aXZlICIKKwkJCQkJCQkgInNldHRpbmc9JWQuICIKKwkJCQkJCQkgIm1heFBTPSVkLlxuIiwKKwkJCQkJCQkgaSwgbWF4UFMpOwogCQkJCQl9CiAJCQkJfQogCQkJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby91c2J2aWRlby91c2J2aWRlby5jIGIvZHJpdmVycy9tZWRpYS92aWRlby91c2J2aWRlby91c2J2aWRlby5jCmluZGV4IGJmMWJjMmYuLjA3Y2Q4N2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXNidmlkZW8vdXNidmlkZW8uYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3VzYnZpZGVvL3VzYnZpZGVvLmMKQEAgLTQ2OCw4ICs0NjgsOSBAQAogCQkJcGVyY2VudCA9ICgxMDAgKiBnb29kUGFja2V0cykgLyBhbGxQYWNrZXRzOwogCQllbHNlCiAJCQlwZXJjZW50ID0gZ29vZFBhY2tldHMgLyAoYWxsUGFja2V0cyAvIDEwMCk7Ci0JCWluZm8oIlBhY2tldCBTdGF0aXN0aWNzOiBUb3RhbD0lbHUuIEVtcHR5PSVsdS4gVXNhZ2U9JWx1JSUiLAotCQkgICAgIGFsbFBhY2tldHMsIGJhZFBhY2tldHMsIHBlcmNlbnQpOworCQlkZXZfaW5mbygmdXZkLT5kZXYtPmRldiwKKwkJCSAiUGFja2V0IFN0YXRpc3RpY3M6IFRvdGFsPSVsdS4gRW1wdHk9JWx1LiBVc2FnZT0lbHUlJVxuIiwKKwkJCSBhbGxQYWNrZXRzLCBiYWRQYWNrZXRzLCBwZXJjZW50KTsKIAkJaWYgKHV2ZC0+aXNvX3BhY2tldF9sZW4gPiAwKSB7CiAJCQl1bnNpZ25lZCBsb25nIGFsbEJ5dGVzLCB4ZmVyQnl0ZXM7CiAJCQljaGFyIG11bHRpcGxpZXIgPSAnICc7CkBAIC00OTcsOCArNDk4LDkgQEAKIAkJCQkJfQogCQkJCX0KIAkJCX0KLQkJCWluZm8oIlRyYW5zZmVyIFN0YXRpc3RpY3M6IFRyYW5zZmVycmVkPSVsdSVjQiBVc2FnZT0lbHUlJSIsCi0JCQkgICAgIHhmZXJCeXRlcywgbXVsdGlwbGllciwgcGVyY2VudCk7CisJCQlkZXZfaW5mbygmdXZkLT5kZXYtPmRldiwKKwkJCQkgIlRyYW5zZmVyIFN0YXRpc3RpY3M6IFRyYW5zZmVycmVkPSVsdSVjQiBVc2FnZT0lbHUlJVxuIiwKKwkJCQkgeGZlckJ5dGVzLCBtdWx0aXBsaWVyLCBwZXJjZW50KTsKIAkJfQogCX0KIH0KQEAgLTU0NSw3ICs1NDcsNyBAQAogCXsJLyogRm9yIGRlYnVnZ2luZyBwdXJwb3NlcyBvbmx5ICovCiAJCWNoYXIgdG1wWzIwXTsKIAkJdXNidmlkZW9fVmlkZW9zaXplVG9TdHJpbmcodG1wLCBzaXplb2YodG1wKSwgZnJhbWUtPnJlcXVlc3QpOwotCQlpbmZvKCJ0ZXN0cGF0dGVybjogZnJhbWU9JXMiLCB0bXApOworCQlkZXZfaW5mbygmdXZkLT5kZXYtPmRldiwgInRlc3RwYXR0ZXJuOiBmcmFtZT0lc1xuIiwgdG1wKTsKIAl9CiAjZW5kaWYKIAkvKiBGb3JtIGV2ZXJ5IHNjYW4gbGluZSAqLwpAQCAtODU0LDcgKzg1Niw3IEBACiAKIAl1c2J2aWRlb19DbGllbnRJbmNNb2RDb3VudCh1dmQpOwogCWlmICh1dmQtPmRlYnVnID4gMCkKLQkJaW5mbygiJXMoJXAuKSIsIF9fZnVuY19fLCBpbnRmKTsKKwkJZGV2X2luZm8oJmludGYtPmRldiwgIiVzKCVwLilcbiIsIF9fZnVuY19fLCBpbnRmKTsKIAogCW11dGV4X2xvY2soJnV2ZC0+bG9jayk7CiAJdXZkLT5yZW1vdmVfcGVuZGluZyA9IDE7IC8qIE5vdyBhbGwgSVNPIGRhdGEgd2lsbCBiZSBpZ25vcmVkICovCkBAIC04NzAsMTQgKzg3MiwxNSBAQAogCiAJdmlkZW9fdW5yZWdpc3Rlcl9kZXZpY2UoJnV2ZC0+dmRldik7CiAJaWYgKHV2ZC0+ZGVidWcgPiAwKQotCQlpbmZvKCIlczogVmlkZW8gdW5yZWdpc3RlcmVkLiIsIF9fZnVuY19fKTsKKwkJZGV2X2luZm8oJmludGYtPmRldiwgIiVzOiBWaWRlbyB1bnJlZ2lzdGVyZWQuXG4iLCBfX2Z1bmNfXyk7CiAKIAlpZiAodXZkLT51c2VyKQotCQlpbmZvKCIlczogSW4gdXNlLCBkaXNjb25uZWN0IHBlbmRpbmcuIiwgX19mdW5jX18pOworCQlkZXZfaW5mbygmaW50Zi0+ZGV2LCAiJXM6IEluIHVzZSwgZGlzY29ubmVjdCBwZW5kaW5nLlxuIiwKKwkJCSBfX2Z1bmNfXyk7CiAJZWxzZQogCQl1c2J2aWRlb19DYW1lcmFSZWxlYXNlKHV2ZCk7CiAJbXV0ZXhfdW5sb2NrKCZ1dmQtPmxvY2spOwotCWluZm8oIlVTQiBjYW1lcmEgZGlzY29ubmVjdGVkLiIpOworCWRldl9pbmZvKCZpbnRmLT5kZXYsICJVU0IgY2FtZXJhIGRpc2Nvbm5lY3RlZC5cbiIpOwogCiAJdXNidmlkZW9fQ2xpZW50RGVjTW9kQ291bnQodXZkKTsKIH0KQEAgLTEwMTUsMTQgKzEwMTgsMTcgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCWlmICh1dmQtPnZpZGVvX2VuZHAgPT0gMCkgewotCQlpbmZvKCIlczogTm8gdmlkZW8gZW5kcG9pbnQgc3BlY2lmaWVkOyBkYXRhIHB1bXAgZGlzYWJsZWQuIiwgX19mdW5jX18pOworCQlkZXZfaW5mbygmdXZkLT5kZXYtPmRldiwKKwkJCSAiJXM6IE5vIHZpZGVvIGVuZHBvaW50IHNwZWNpZmllZDsgZGF0YSBwdW1wIGRpc2FibGVkLlxuIiwKKwkJCSBfX2Z1bmNfXyk7CiAJfQogCWlmICh1dmQtPnBhbGV0dGVCaXRzID09IDApIHsKIAkJZXJyKCIlczogTm8gcGFsZXR0ZXMgc3BlY2lmaWVkISIsIF9fZnVuY19fKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCWlmICh1dmQtPmRlZmF1bHRQYWxldHRlID09IDApIHsKLQkJaW5mbygiJXM6IE5vIGRlZmF1bHQgcGFsZXR0ZSEiLCBfX2Z1bmNfXyk7CisJCWRldl9pbmZvKCZ1dmQtPmRldi0+ZGV2LCAiJXM6IE5vIGRlZmF1bHQgcGFsZXR0ZSFcbiIsCisJCQkgX19mdW5jX18pOwogCX0KIAogCXV2ZC0+bWF4X2ZyYW1lX3NpemUgPSBWSURFT1NJWkVfWCh1dmQtPmNhbnZhcykgKgpAQCAtMTAzMSwyNSArMTAzNywyOSBAQAogCXVzYnZpZGVvX1ZpZGVvc2l6ZVRvU3RyaW5nKHRtcDIsIHNpemVvZih0bXAyKSwgdXZkLT5jYW52YXMpOwogCiAJaWYgKHV2ZC0+ZGVidWcgPiAwKSB7Ci0JCWluZm8oIiVzOiBpZmFjZT0lZC4gZW5kcG9pbnQ9JCUwMnggcGFsZXR0ZUJpdHM9JCUwOGx4IiwKLQkJICAgICBfX2Z1bmNfXywgdXZkLT5pZmFjZSwgdXZkLT52aWRlb19lbmRwLCB1dmQtPnBhbGV0dGVCaXRzKTsKKwkJZGV2X2luZm8oJnV2ZC0+ZGV2LT5kZXYsCisJCQkgIiVzOiBpZmFjZT0lZC4gZW5kcG9pbnQ9JCUwMnggcGFsZXR0ZUJpdHM9JCUwOGx4XG4iLAorCQkJIF9fZnVuY19fLCB1dmQtPmlmYWNlLCB1dmQtPnZpZGVvX2VuZHAsCisJCQkgdXZkLT5wYWxldHRlQml0cyk7CiAJfQogCWlmICh1dmQtPmRldiA9PSBOVUxMKSB7CiAJCWVycigiJXM6IHV2ZC0+ZGV2ID09IE5VTEwiLCBfX2Z1bmNfXyk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAl1dmQtPnZkZXYucGFyZW50ID0gJnV2ZC0+ZGV2LT5kZXY7Ci0JaWYgKHZpZGVvX3JlZ2lzdGVyX2RldmljZSgmdXZkLT52ZGV2LCBWRkxfVFlQRV9HUkFCQkVSLCB2aWRlb19ucikgPT0gLTEpIHsKKwl1dmQtPnZkZXYucmVsZWFzZSA9IHZpZGVvX2RldmljZV9yZWxlYXNlX2VtcHR5OworCWlmICh2aWRlb19yZWdpc3Rlcl9kZXZpY2UoJnV2ZC0+dmRldiwgVkZMX1RZUEVfR1JBQkJFUiwgdmlkZW9fbnIpIDwgMCkgewogCQllcnIoIiVzOiB2aWRlb19yZWdpc3Rlcl9kZXZpY2UgZmFpbGVkIiwgX19mdW5jX18pOwogCQlyZXR1cm4gLUVQSVBFOwogCX0KIAlpZiAodXZkLT5kZWJ1ZyA+IDEpIHsKLQkJaW5mbygiJXM6IHZpZGVvX3JlZ2lzdGVyX2RldmljZSgpIHN1Y2Nlc3NmdWwiLCBfX2Z1bmNfXyk7CisJCWRldl9pbmZvKCZ1dmQtPmRldi0+ZGV2LAorCQkJICIlczogdmlkZW9fcmVnaXN0ZXJfZGV2aWNlKCkgc3VjY2Vzc2Z1bFxuIiwgX19mdW5jX18pOwogCX0KIAotCWluZm8oIiVzIG9uIC9kZXYvdmlkZW8lZDogY2FudmFzPSVzIHZpZGVvc2l6ZT0lcyIsCi0JICAgICAodXZkLT5oYW5kbGUgIT0gTlVMTCkgPyB1dmQtPmhhbmRsZS0+ZHJ2TmFtZSA6ICI/Pz8iLAotCSAgICAgdXZkLT52ZGV2Lm1pbm9yLCB0bXAyLCB0bXAxKTsKKwlkZXZfaW5mbygmdXZkLT5kZXYtPmRldiwgIiVzIG9uIC9kZXYvdmlkZW8lZDogY2FudmFzPSVzIHZpZGVvc2l6ZT0lc1xuIiwKKwkJICh1dmQtPmhhbmRsZSAhPSBOVUxMKSA/IHV2ZC0+aGFuZGxlLT5kcnZOYW1lIDogIj8/PyIsCisJCSB1dmQtPnZkZXYubWlub3IsIHRtcDIsIHRtcDEpOwogCiAJdXNiX2dldF9kZXYodXZkLT5kZXYpOwogCXJldHVybiAwOwpAQCAtMTExMSw3ICsxMTIxLDcgQEAKIAlpbnQgaSwgZXJyQ29kZSA9IDA7CiAKIAlpZiAodXZkLT5kZWJ1ZyA+IDEpCi0JCWluZm8oIiVzKCQlcCkiLCBfX2Z1bmNfXywgZGV2KTsKKwkJZGV2X2luZm8oJnV2ZC0+ZGV2LT5kZXYsICIlcygkJXApXG4iLCBfX2Z1bmNfXywgZGV2KTsKIAogCWlmICgwIDwgdXNidmlkZW9fQ2xpZW50SW5jTW9kQ291bnQodXZkKSkKIAkJcmV0dXJuIC1FTk9ERVY7CkBAIC0xMTc4LDE5ICsxMTg4LDI1IEBACiAJCWlmIChlcnJDb2RlID09IDApIHsKIAkJCWlmIChWQUxJRF9DQUxMQkFDSyh1dmQsIHNldHVwT25PcGVuKSkgewogCQkJCWlmICh1dmQtPmRlYnVnID4gMSkKLQkJCQkJaW5mbygiJXM6IHNldHVwT25PcGVuIGNhbGxiYWNrIiwgX19mdW5jX18pOworCQkJCQlkZXZfaW5mbygmdXZkLT5kZXYtPmRldiwKKwkJCQkJCSAiJXM6IHNldHVwT25PcGVuIGNhbGxiYWNrXG4iLAorCQkJCQkJIF9fZnVuY19fKTsKIAkJCQllcnJDb2RlID0gR0VUX0NBTExCQUNLKHV2ZCwgc2V0dXBPbk9wZW4pKHV2ZCk7CiAJCQkJaWYgKGVyckNvZGUgPCAwKSB7CiAJCQkJCWVycigiJXM6IHNldHVwT25PcGVuIGNhbGxiYWNrIGZhaWxlZCAoJWQuKS4iLAogCQkJCQkgICAgX19mdW5jX18sIGVyckNvZGUpOwogCQkJCX0gZWxzZSBpZiAodXZkLT5kZWJ1ZyA+IDEpIHsKLQkJCQkJaW5mbygiJXM6IHNldHVwT25PcGVuIGNhbGxiYWNrIHN1Y2Nlc3NmdWwiLCBfX2Z1bmNfXyk7CisJCQkJCWRldl9pbmZvKCZ1dmQtPmRldi0+ZGV2LAorCQkJCQkJICIlczogc2V0dXBPbk9wZW4gY2FsbGJhY2sgc3VjY2Vzc2Z1bFxuIiwKKwkJCQkJCSBfX2Z1bmNfXyk7CiAJCQkJfQogCQkJfQogCQkJaWYgKGVyckNvZGUgPT0gMCkgewogCQkJCXV2ZC0+c2V0dGluZ3NBZGp1c3RlZCA9IDA7CiAJCQkJaWYgKHV2ZC0+ZGVidWcgPiAxKQotCQkJCQlpbmZvKCIlczogT3BlbiBzdWNjZWVkZWQuIiwgX19mdW5jX18pOworCQkJCQlkZXZfaW5mbygmdXZkLT5kZXYtPmRldiwKKwkJCQkJCSAiJXM6IE9wZW4gc3VjY2VlZGVkLlxuIiwKKwkJCQkJCSBfX2Z1bmNfXyk7CiAJCQkJdXZkLT51c2VyKys7CiAJCQkJZmlsZS0+cHJpdmF0ZV9kYXRhID0gdXZkOwogCQkJfQpAQCAtMTIwMCw3ICsxMjE2LDggQEAKIAlpZiAoZXJyQ29kZSAhPSAwKQogCQl1c2J2aWRlb19DbGllbnREZWNNb2RDb3VudCh1dmQpOwogCWlmICh1dmQtPmRlYnVnID4gMCkKLQkJaW5mbygiJXM6IFJldHVybmluZyAlZC4iLCBfX2Z1bmNfXywgZXJyQ29kZSk7CisJCWRldl9pbmZvKCZ1dmQtPmRldi0+ZGV2LCAiJXM6IFJldHVybmluZyAlZC5cbiIsIF9fZnVuY19fLAorCQkJIGVyckNvZGUpOwogCXJldHVybiBlcnJDb2RlOwogfQogCkBAIC0xMjIzLDcgKzEyNDAsNyBAQAogCWludCBpOwogCiAJaWYgKHV2ZC0+ZGVidWcgPiAxKQotCQlpbmZvKCIlcygkJXApIiwgX19mdW5jX18sIGRldik7CisJCWRldl9pbmZvKCZ1dmQtPmRldi0+ZGV2LCAiJXMoJCVwKVxuIiwgX19mdW5jX18sIGRldik7CiAKIAltdXRleF9sb2NrKCZ1dmQtPmxvY2spOwogCUdFVF9DQUxMQkFDSyh1dmQsIHN0b3BEYXRhUHVtcCkodXZkKTsKQEAgLTEyNDMsMTQgKzEyNjAsMTUgQEAKIAl1dmQtPnVzZXItLTsKIAlpZiAodXZkLT5yZW1vdmVfcGVuZGluZykgewogCQlpZiAodXZkLT5kZWJ1ZyA+IDApCi0JCQlpbmZvKCJ1c2J2aWRlb192NGxfY2xvc2U6IEZpbmFsIGRpc2Nvbm5lY3QuIik7CisJCQlkZXZfaW5mbygmdXZkLT5kZXYtPmRldiwgIiVzOiBGaW5hbCBkaXNjb25uZWN0LlxuIiwKKwkJCQkgX19mdW5jX18pOwogCQl1c2J2aWRlb19DYW1lcmFSZWxlYXNlKHV2ZCk7CiAJfQogCW11dGV4X3VubG9jaygmdXZkLT5sb2NrKTsKIAl1c2J2aWRlb19DbGllbnREZWNNb2RDb3VudCh1dmQpOwogCiAJaWYgKHV2ZC0+ZGVidWcgPiAxKQotCQlpbmZvKCIlczogQ29tcGxldGVkLiIsIF9fZnVuY19fKTsKKwkJZGV2X2luZm8oJnV2ZC0+ZGV2LT5kZXYsICIlczogQ29tcGxldGVkLlxuIiwgX19mdW5jX18pOwogCWZpbGUtPnByaXZhdGVfZGF0YSA9IE5VTEw7CiAJcmV0dXJuIDA7CiB9CkBAIC0xMzY0LDggKzEzODIsOSBAQAogCQkJc3RydWN0IHZpZGVvX21tYXAgKnZtID0gYXJnOwogCiAJCQlpZiAodXZkLT5kZWJ1ZyA+PSAxKSB7Ci0JCQkJaW5mbygiVklESU9DTUNBUFRVUkU6IGZyYW1lPSVkLiBzaXplPSVkeCVkLCBmb3JtYXQ9JWQuIiwKLQkJCQkgICAgIHZtLT5mcmFtZSwgdm0tPndpZHRoLCB2bS0+aGVpZ2h0LCB2bS0+Zm9ybWF0KTsKKwkJCQlkZXZfaW5mbygmdXZkLT5kZXYtPmRldiwKKwkJCQkJICJWSURJT0NNQ0FQVFVSRTogZnJhbWU9JWQuIHNpemU9JWR4JWQsIGZvcm1hdD0lZC5cbiIsCisJCQkJCSB2bS0+ZnJhbWUsIHZtLT53aWR0aCwgdm0tPmhlaWdodCwgdm0tPmZvcm1hdCk7CiAJCQl9CiAJCQkvKgogCQkJICogQ2hlY2sgaWYgdGhlIHJlcXVlc3RlZCBzaXplIGlzIHN1cHBvcnRlZC4gSWYgdGhlIHJlcXVlc3RvcgpAQCAtMTM4MywxOCArMTQwMiwyNCBAQAogCQkJaWYgKCh2bS0+d2lkdGggPiBWSURFT1NJWkVfWCh1dmQtPmNhbnZhcykpIHx8CiAJCQkgICAgKHZtLT5oZWlnaHQgPiBWSURFT1NJWkVfWSh1dmQtPmNhbnZhcykpKSB7CiAJCQkJaWYgKHV2ZC0+ZGVidWcgPiAwKSB7Ci0JCQkJCWluZm8oIlZJRElPQ01DQVBUVVJFOiBTaXplPSVkeCVkIHRvbyBsYXJnZTsgIgotCQkJCQkgICAgICJhbGxvd2VkIG9ubHkgdXAgdG8gJWxkeCVsZCIsIHZtLT53aWR0aCwgdm0tPmhlaWdodCwKLQkJCQkJICAgICBWSURFT1NJWkVfWCh1dmQtPmNhbnZhcyksIFZJREVPU0laRV9ZKHV2ZC0+Y2FudmFzKSk7CisJCQkJCWRldl9pbmZvKCZ1dmQtPmRldi0+ZGV2LAorCQkJCQkJICJWSURJT0NNQ0FQVFVSRTogU2l6ZT0lZHglZCAiCisJCQkJCQkgInRvbyBsYXJnZTsgYWxsb3dlZCBvbmx5IHVwICIKKwkJCQkJCSAidG8gJWxkeCVsZFxuIiwgdm0tPndpZHRoLAorCQkJCQkJIHZtLT5oZWlnaHQsCisJCQkJCQkgVklERU9TSVpFX1godXZkLT5jYW52YXMpLAorCQkJCQkJIFZJREVPU0laRV9ZKHV2ZC0+Y2FudmFzKSk7CiAJCQkJfQogCQkJCXJldHVybiAtRUlOVkFMOwogCQkJfQogCQkJLyogQ2hlY2sgaWYgdGhlIHBhbGV0dGUgaXMgc3VwcG9ydGVkICovCiAJCQlpZiAoKCgxTCA8PCB2bS0+Zm9ybWF0KSAmIHV2ZC0+cGFsZXR0ZUJpdHMpID09IDApIHsKIAkJCQlpZiAodXZkLT5kZWJ1ZyA+IDApIHsKLQkJCQkJaW5mbygiVklESU9DTUNBUFRVUkU6IGZvcm1hdD0lZC4gbm90IHN1cHBvcnRlZCIKLQkJCQkJICAgICAiIChwYWxldHRlQml0cz0kJTA4bHgpIiwKLQkJCQkJICAgICB2bS0+Zm9ybWF0LCB1dmQtPnBhbGV0dGVCaXRzKTsKKwkJCQkJZGV2X2luZm8oJnV2ZC0+ZGV2LT5kZXYsCisJCQkJCQkgIlZJRElPQ01DQVBUVVJFOiBmb3JtYXQ9JWQuICIKKwkJCQkJCSAibm90IHN1cHBvcnRlZCAiCisJCQkJCQkgIihwYWxldHRlQml0cz0kJTA4bHgpXG4iLAorCQkJCQkJIHZtLT5mb3JtYXQsIHV2ZC0+cGFsZXR0ZUJpdHMpOwogCQkJCX0KIAkJCQlyZXR1cm4gLUVJTlZBTDsKIAkJCX0KQEAgLTE0MjIsNyArMTQ0Nyw5IEBACiAJCQkJcmV0dXJuIC1FSU5WQUw7CiAKIAkJCWlmICh1dmQtPmRlYnVnID49IDEpCi0JCQkJaW5mbygiVklESU9DU1lOQzogc3luY2luZyB0byBmcmFtZSAlZC4iLCAqZnJhbWVOdW0pOworCQkJCWRldl9pbmZvKCZ1dmQtPmRldi0+ZGV2LAorCQkJCQkgIlZJRElPQ1NZTkM6IHN5bmNpbmcgdG8gZnJhbWUgJWQuXG4iLAorCQkJCQkgKmZyYW1lTnVtKTsKIAkJCWlmICh1dmQtPmZsYWdzICYgRkxBR1NfTk9fREVDT0RJTkcpCiAJCQkJcmV0ID0gdXNidmlkZW9fR2V0RnJhbWUodXZkLCAqZnJhbWVOdW0pOwogCQkJZWxzZSBpZiAoVkFMSURfQ0FMTEJBQ0sodXZkLCBnZXRGcmFtZSkpIHsKQEAgLTE1MDQsNyArMTUzMSw5IEBACiAJCXJldHVybiAtRUZBVUxUOwogCiAJaWYgKHV2ZC0+ZGVidWcgPj0gMSkKLQkJaW5mbygiJXM6ICVaZC4gYnl0ZXMsIG5vYmxvY2s9JWQuIiwgX19mdW5jX18sIGNvdW50LCBub2Jsb2NrKTsKKwkJZGV2X2luZm8oJnV2ZC0+ZGV2LT5kZXYsCisJCQkgIiVzOiAlWmQuIGJ5dGVzLCBub2Jsb2NrPSVkLlxuIiwKKwkJCSBfX2Z1bmNfXywgY291bnQsIG5vYmxvY2spOwogCiAJbXV0ZXhfbG9jaygmdXZkLT5sb2NrKTsKIApAQCAtMTY4NSwxOCArMTcxNCwyMSBAQAogCQlyZXR1cm47CiAjaWYgMAogCWlmICh1cmItPmFjdHVhbF9sZW5ndGggPiAwKSB7Ci0JCWluZm8oInVyYj0kJXAgc3RhdHVzPSVkLiBlcnJjb3VudD0lZC4gbGVuZ3RoPSVkLiIsCi0JCSAgICAgdXJiLCB1cmItPnN0YXR1cywgdXJiLT5lcnJvcl9jb3VudCwgdXJiLT5hY3R1YWxfbGVuZ3RoKTsKKwkJZGV2X2luZm8oJnV2ZC0+ZGV2LT5kZXYsCisJCQkgInVyYj0kJXAgc3RhdHVzPSVkLiBlcnJjb3VudD0lZC4gbGVuZ3RoPSVkLlxuIiwKKwkJCSB1cmIsIHVyYi0+c3RhdHVzLCB1cmItPmVycm9yX2NvdW50LAorCQkJIHVyYi0+YWN0dWFsX2xlbmd0aCk7CiAJfSBlbHNlIHsKIAkJc3RhdGljIGludCBjID0gMDsKIAkJaWYgKGMrKyAlIDEwMCA9PSAwKQotCQkJaW5mbygiTm8gSXNvYyBkYXRhIik7CisJCQlkZXZfaW5mbygmdXZkLT5kZXYtPmRldiwgIk5vIElzb2MgZGF0YVxuIik7CiAJfQogI2VuZGlmCiAKIAlpZiAoIXV2ZC0+c3RyZWFtaW5nKSB7CiAJCWlmICh1dmQtPmRlYnVnID49IDEpCi0JCQlpbmZvKCJOb3Qgc3RyZWFtaW5nLCBidXQgaW50ZXJydXB0ISIpOworCQkJZGV2X2luZm8oJnV2ZC0+ZGV2LT5kZXYsCisJCQkJICJOb3Qgc3RyZWFtaW5nLCBidXQgaW50ZXJydXB0IVxuIik7CiAJCXJldHVybjsKIAl9CiAKQEAgLTE3NDEsNyArMTc3Myw3IEBACiAJaW50IGksIGVyckZsYWc7CiAKIAlpZiAodXZkLT5kZWJ1ZyA+IDEpCi0JCWluZm8oIiVzKCQlcCkiLCBfX2Z1bmNfXywgdXZkKTsKKwkJZGV2X2luZm8oJnV2ZC0+ZGV2LT5kZXYsICIlcygkJXApXG4iLCBfX2Z1bmNfXywgdXZkKTsKIAogCWlmICghQ0FNRVJBX0lTX09QRVJBVElPTkFMKHV2ZCkpIHsKIAkJZXJyKCIlczogQ2FtZXJhIGlzIG5vdCBvcGVyYXRpb25hbCIsIF9fZnVuY19fKTsKQEAgLTE3ODksNyArMTgyMSw5IEBACiAKIAl1dmQtPnN0cmVhbWluZyA9IDE7CiAJaWYgKHV2ZC0+ZGVidWcgPiAxKQotCQlpbmZvKCIlczogc3RyZWFtaW5nPTEgdmlkZW9fZW5kcD0kJTAyeCIsIF9fZnVuY19fLCB1dmQtPnZpZGVvX2VuZHApOworCQlkZXZfaW5mbygmdXZkLT5kZXYtPmRldiwKKwkJCSAiJXM6IHN0cmVhbWluZz0xIHZpZGVvX2VuZHA9JCUwMnhcbiIsIF9fZnVuY19fLAorCQkJIHV2ZC0+dmlkZW9fZW5kcCk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTE4MTEsMTQgKzE4NDUsMTQgQEAKIAkJcmV0dXJuOwogCiAJaWYgKHV2ZC0+ZGVidWcgPiAxKQotCQlpbmZvKCIlcygkJXApIiwgX19mdW5jX18sIHV2ZCk7CisJCWRldl9pbmZvKCZ1dmQtPmRldi0+ZGV2LCAiJXMoJCVwKVxuIiwgX19mdW5jX18sIHV2ZCk7CiAKIAkvKiBVbnNjaGVkdWxlIGFsbCBvZiB0aGUgaXNvIHRkJ3MgKi8KIAlmb3IgKGk9MDsgaSA8IFVTQlZJREVPX05VTVNCVUY7IGkrKykgewogCQl1c2Jfa2lsbF91cmIodXZkLT5zYnVmW2ldLnVyYik7CiAJfQogCWlmICh1dmQtPmRlYnVnID4gMSkKLQkJaW5mbygiJXM6IHN0cmVhbWluZz0wIiwgX19mdW5jX18pOworCQlkZXZfaW5mbygmdXZkLT5kZXYtPmRldiwgIiVzOiBzdHJlYW1pbmc9MFxuIiwgX19mdW5jX18pOwogCXV2ZC0+c3RyZWFtaW5nID0gMDsKIAogCWlmICghdXZkLT5yZW1vdmVfcGVuZGluZykgewpAQCAtMTg1MCw3ICsxODg0LDggQEAKIAlpbnQgbjsKIAogCWlmICh1dmQtPmRlYnVnID4gMSkKLQkJaW5mbygidXNidmlkZW9fTmV3RnJhbWUoJCVwLCVkLikiLCB1dmQsIGZyYW1lbnVtKTsKKwkJZGV2X2luZm8oJnV2ZC0+ZGV2LT5kZXYsICJ1c2J2aWRlb19OZXdGcmFtZSgkJXAsJWQuKVxuIiwgdXZkLAorCQkJIGZyYW1lbnVtKTsKIAogCS8qIElmIHdlJ3JlIG5vdCBncmFiYmluZyBhIGZyYW1lIHJpZ2h0IG5vdyBhbmQgdGhlIG90aGVyIGZyYW1lIGlzICovCiAJLyogIHJlYWR5IHRvIGJlIGdyYWJiZWQgaW50bywgdGhlbiB1c2UgaXQgaW5zdGVhZCAqLwpAQCAtMTk1NSwxMiArMTk5MCwxNCBAQAogCXN0cnVjdCB1c2J2aWRlb19mcmFtZSAqZnJhbWUgPSAmdXZkLT5mcmFtZVtmcmFtZU51bV07CiAKIAlpZiAodXZkLT5kZWJ1ZyA+PSAyKQotCQlpbmZvKCIlcygkJXAsJWQuKSIsIF9fZnVuY19fLCB1dmQsIGZyYW1lTnVtKTsKKwkJZGV2X2luZm8oJnV2ZC0+ZGV2LT5kZXYsICIlcygkJXAsJWQuKVxuIiwgX19mdW5jX18sIHV2ZCwKKwkJCSBmcmFtZU51bSk7CiAKIAlzd2l0Y2ggKGZyYW1lLT5mcmFtZVN0YXRlKSB7CiAJY2FzZSBGcmFtZVN0YXRlX1VudXNlZDoKIAkJaWYgKHV2ZC0+ZGVidWcgPj0gMikKLQkJCWluZm8oIiVzOiBGcmFtZVN0YXRlX1VudXNlZCIsIF9fZnVuY19fKTsKKwkJCWRldl9pbmZvKCZ1dmQtPmRldi0+ZGV2LCAiJXM6IEZyYW1lU3RhdGVfVW51c2VkXG4iLAorCQkJCSBfX2Z1bmNfXyk7CiAJCXJldHVybiAtRUlOVkFMOwogCWNhc2UgRnJhbWVTdGF0ZV9SZWFkeToKIAljYXNlIEZyYW1lU3RhdGVfR3JhYmJpbmc6CkBAIC0xOTcwLDcgKzIwMDcsOSBAQAogCXJlZG86CiAJCWlmICghQ0FNRVJBX0lTX09QRVJBVElPTkFMKHV2ZCkpIHsKIAkJCWlmICh1dmQtPmRlYnVnID49IDIpCi0JCQkJaW5mbygiJXM6IENhbWVyYSBpcyBub3Qgb3BlcmF0aW9uYWwgKDEpIiwgX19mdW5jX18pOworCQkJCWRldl9pbmZvKCZ1dmQtPmRldi0+ZGV2LAorCQkJCQkgIiVzOiBDYW1lcmEgaXMgbm90IG9wZXJhdGlvbmFsICgxKVxuIiwKKwkJCQkJIF9fZnVuY19fKTsKIAkJCXJldHVybiAtRUlPOwogCQl9CiAJCW50cmllcyA9IDA7CkBAIC0xOTc5LDI0ICsyMDE4LDMzIEBACiAJCQlzaWduYWxQZW5kaW5nID0gc2lnbmFsX3BlbmRpbmcoY3VycmVudCk7CiAJCQlpZiAoIUNBTUVSQV9JU19PUEVSQVRJT05BTCh1dmQpKSB7CiAJCQkJaWYgKHV2ZC0+ZGVidWcgPj0gMikKLQkJCQkJaW5mbygiJXM6IENhbWVyYSBpcyBub3Qgb3BlcmF0aW9uYWwgKDIpIiwgX19mdW5jX18pOworCQkJCQlkZXZfaW5mbygmdXZkLT5kZXYtPmRldiwKKwkJCQkJCSAiJXM6IENhbWVyYSBpcyBub3QgIgorCQkJCQkJICJvcGVyYXRpb25hbCAoMilcbiIsIF9fZnVuY19fKTsKIAkJCQlyZXR1cm4gLUVJTzsKIAkJCX0KIAkJCWFzc2VydCh1dmQtPmZidWYgIT0gTlVMTCk7CiAJCQlpZiAoc2lnbmFsUGVuZGluZykgewogCQkJCWlmICh1dmQtPmRlYnVnID49IDIpCi0JCQkJCWluZm8oIiVzOiBTaWduYWw9JCUwOHgiLCBfX2Z1bmNfXywgc2lnbmFsUGVuZGluZyk7CisJCQkJCWRldl9pbmZvKCZ1dmQtPmRldi0+ZGV2LAorCQkJCQkiJXM6IFNpZ25hbD0kJTA4eFxuIiwgX19mdW5jX18sCisJCQkJCXNpZ25hbFBlbmRpbmcpOwogCQkJCWlmICh1dmQtPmZsYWdzICYgRkxBR1NfUkVUUllfVklESU9DU1lOQykgewogCQkJCQl1c2J2aWRlb19UZXN0UGF0dGVybih1dmQsIDEsIDApOwogCQkJCQl1dmQtPmN1cmZyYW1lID0gLTE7CiAJCQkJCXV2ZC0+c3RhdHMuZnJhbWVfbnVtKys7CiAJCQkJCWlmICh1dmQtPmRlYnVnID49IDIpCi0JCQkJCQlpbmZvKCIlczogRm9yY2VkIHRlc3QgcGF0dGVybiBzY3JlZW4iLCBfX2Z1bmNfXyk7CisJCQkJCQlkZXZfaW5mbygmdXZkLT5kZXYtPmRldiwKKwkJCQkJCQkgIiVzOiBGb3JjZWQgdGVzdCAiCisJCQkJCQkJICJwYXR0ZXJuIHNjcmVlblxuIiwKKwkJCQkJCQkgX19mdW5jX18pOwogCQkJCQlyZXR1cm4gMDsKIAkJCQl9IGVsc2UgewogCQkJCQkvKiBTdGFuZGFyZCBhbnN3ZXI6IEludGVycnVwdGVkISAqLwogCQkJCQlpZiAodXZkLT5kZWJ1ZyA+PSAyKQotCQkJCQkJaW5mbygiJXM6IEludGVycnVwdGVkISIsIF9fZnVuY19fKTsKKwkJCQkJCWRldl9pbmZvKCZ1dmQtPmRldi0+ZGV2LAorCQkJCQkJCSAiJXM6IEludGVycnVwdGVkIVxuIiwKKwkJCQkJCQkgX19mdW5jX18pOwogCQkJCQlyZXR1cm4gLUVJTlRSOwogCQkJCX0KIAkJCX0gZWxzZSB7CkBAIC0yMDEwLDggKzIwNTgsMTAgQEAKIAkJCX0KIAkJfSB3aGlsZSAoZnJhbWUtPmZyYW1lU3RhdGUgPT0gRnJhbWVTdGF0ZV9HcmFiYmluZyk7CiAJCWlmICh1dmQtPmRlYnVnID49IDIpIHsKLQkJCWluZm8oIiVzOiBHcmFiYmluZyBkb25lOyBzdGF0ZT0lZC4gKCVsdS4gYnl0ZXMpIiwKLQkJCSAgICAgX19mdW5jX18sIGZyYW1lLT5mcmFtZVN0YXRlLCBmcmFtZS0+c2VxUmVhZF9MZW5ndGgpOworCQkJZGV2X2luZm8oJnV2ZC0+ZGV2LT5kZXYsCisJCQkJICIlczogR3JhYmJpbmcgZG9uZTsgc3RhdGU9JWQuICglbHUuIGJ5dGVzKVxuIiwKKwkJCQkgX19mdW5jX18sIGZyYW1lLT5mcmFtZVN0YXRlLAorCQkJCSBmcmFtZS0+c2VxUmVhZF9MZW5ndGgpOwogCQl9CiAJCWlmIChmcmFtZS0+ZnJhbWVTdGF0ZSA9PSBGcmFtZVN0YXRlX0Vycm9yKSB7CiAJCQlpbnQgcmV0ID0gdXNidmlkZW9fTmV3RnJhbWUodXZkLCBmcmFtZU51bSk7CkBAIC0yMDQ4LDcgKzIwOTgsOSBAQAogCQl9CiAJCWZyYW1lLT5mcmFtZVN0YXRlID0gRnJhbWVTdGF0ZV9Eb25lX0hvbGQ7CiAJCWlmICh1dmQtPmRlYnVnID49IDIpCi0JCQlpbmZvKCIlczogRW50ZXJlZCBGcmFtZVN0YXRlX0RvbmVfSG9sZCBzdGF0ZS4iLCBfX2Z1bmNfXyk7CisJCQlkZXZfaW5mbygmdXZkLT5kZXYtPmRldiwKKwkJCQkgIiVzOiBFbnRlcmVkIEZyYW1lU3RhdGVfRG9uZV9Ib2xkIHN0YXRlLlxuIiwKKwkJCQkgX19mdW5jX18pOwogCQlyZXR1cm4gMDsKIAogCWNhc2UgRnJhbWVTdGF0ZV9Eb25lX0hvbGQ6CkBAIC0yMDU5LDcgKzIxMTEsOSBAQAogCQkgKiBpdCB3aWxsIGJlIHJlbGVhc2VkIGJhY2sgaW50byB0aGUgd2lsZCB0byByb2FtIGZyZWVseS4KIAkJICovCiAJCWlmICh1dmQtPmRlYnVnID49IDIpCi0JCQlpbmZvKCIlczogRnJhbWVTdGF0ZV9Eb25lX0hvbGQgc3RhdGUuIiwgX19mdW5jX18pOworCQkJZGV2X2luZm8oJnV2ZC0+ZGV2LT5kZXYsCisJCQkJICIlczogRnJhbWVTdGF0ZV9Eb25lX0hvbGQgc3RhdGUuXG4iLAorCQkJCSBfX2Z1bmNfXyk7CiAJCXJldHVybiAwOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby91c2J2aWRlby92aWNhbS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby91c2J2aWRlby92aWNhbS5jCmluZGV4IDJlYjQ1ODIuLjdhMTI3ZDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXNidmlkZW8vdmljYW0uYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3VzYnZpZGVvL3ZpY2FtLmMKQEAgLTQ3Miw5ICs0NzIsOCBAQAogc3RhdGljIGludAogdmljYW1fb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKLQlzdHJ1Y3QgdmlkZW9fZGV2aWNlICpkZXYgPSB2aWRlb19kZXZkYXRhKGZpbGUpOwotCXN0cnVjdCB2aWNhbV9jYW1lcmEgKmNhbSA9Ci0JICAgIChzdHJ1Y3QgdmljYW1fY2FtZXJhICopIGRldi0+cHJpdjsKKwlzdHJ1Y3QgdmljYW1fY2FtZXJhICpjYW0gPSB2aWRlb19kcnZkYXRhKGZpbGUpOworCiAJREJHKCJvcGVuXG4iKTsKIAogCWlmICghY2FtKSB7CkBAIC00ODgsMjAgKzQ4NywyNCBAQAogCSAqIHJlbHkgb24gdGhpcyBmYWN0IGZvcmV2ZXIuCiAJICovCiAKKwlsb2NrX2tlcm5lbCgpOwogCWlmIChjYW0tPm9wZW5fY291bnQgPiAwKSB7CiAJCXByaW50ayhLRVJOX0lORk8KIAkJICAgICAgICJ2aWNhbV9vcGVuIGNhbGxlZCBvbiBhbHJlYWR5IG9wZW5lZCBjYW1lcmEiKTsKKwkJdW5sb2NrX2tlcm5lbCgpOwogCQlyZXR1cm4gLUVCVVNZOwogCX0KIAogCWNhbS0+cmF3X2ltYWdlID0ga21hbGxvYyhWSUNBTV9NQVhfUkVBRF9TSVpFLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWNhbS0+cmF3X2ltYWdlKSB7CisJCXVubG9ja19rZXJuZWwoKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCiAJY2FtLT5mcmFtZWJ1ZiA9IHJ2bWFsbG9jKFZJQ0FNX01BWF9GUkFNRV9TSVpFICogVklDQU1fRlJBTUVTKTsKIAlpZiAoIWNhbS0+ZnJhbWVidWYpIHsKIAkJa2ZyZWUoY2FtLT5yYXdfaW1hZ2UpOworCQl1bmxvY2tfa2VybmVsKCk7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KIApAQCAtNTA5LDYgKzUxMiw3IEBACiAJaWYgKCFjYW0tPmNudHJsYnVmKSB7CiAJCWtmcmVlKGNhbS0+cmF3X2ltYWdlKTsKIAkJcnZmcmVlKGNhbS0+ZnJhbWVidWYsIFZJQ0FNX01BWF9GUkFNRV9TSVpFICogVklDQU1fRlJBTUVTKTsKKwkJdW5sb2NrX2tlcm5lbCgpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKQEAgLTUyNiw2ICs1MzAsNyBAQAogCWNhbS0+b3Blbl9jb3VudCsrOwogCiAJZmlsZS0+cHJpdmF0ZV9kYXRhID0gY2FtOworCXVubG9ja19rZXJuZWwoKTsKIAogCXJldHVybiAwOwogfQpAQCAtNzk1LDYgKzgwMCw3IEBACiAJLm5hbWUgCQk9ICJWaUNhbS1iYXNlZCBVU0IgQ2FtZXJhIiwKIAkuZm9wcyAJCT0gJnZpY2FtX2ZvcHMsCiAJLm1pbm9yIAkJPSAtMSwKKwkucmVsZWFzZSAJPSB2aWRlb19kZXZpY2VfcmVsZWFzZV9lbXB0eSwKIH07CiAKIC8qIHRhYmxlIG9mIGRldmljZXMgdGhhdCB3b3JrIHdpdGggdGhpcyBkcml2ZXIgKi8KQEAgLTg1OSw5ICs4NjUsOCBAQAogCiAJbXV0ZXhfaW5pdCgmY2FtLT5jYW1fbG9jayk7CiAKLQltZW1jcHkoJmNhbS0+dmRldiwgJnZpY2FtX3RlbXBsYXRlLAotCSAgICAgICBzaXplb2YgKHZpY2FtX3RlbXBsYXRlKSk7Ci0JY2FtLT52ZGV2LnByaXYgPSBjYW07CS8vIHNvcnQgb2YgYSByZXZlcnNlIG1hcHBpbmcgZm9yIHRob3NlIGZ1bmN0aW9ucyB0aGF0IGdldCB2ZGV2IG9ubHkKKwltZW1jcHkoJmNhbS0+dmRldiwgJnZpY2FtX3RlbXBsYXRlLCBzaXplb2YodmljYW1fdGVtcGxhdGUpKTsKKwl2aWRlb19zZXRfZHJ2ZGF0YSgmY2FtLT52ZGV2LCBjYW0pOwogCiAJY2FtLT51ZGV2ID0gZGV2OwogCWNhbS0+YnVsa0VuZHBvaW50ID0gYnVsa0VuZHBvaW50OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby91c2J2aXNpb24vdXNidmlzaW9uLWNvcmUuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXNidmlzaW9uL3VzYnZpc2lvbi1jb3JlLmMKaW5kZXggYzMxN2VkNy4uOWU0ZjUwNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby91c2J2aXNpb24vdXNidmlzaW9uLWNvcmUuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3VzYnZpc2lvbi91c2J2aXNpb24tY29yZS5jCkBAIC00NSwxMCArNDUsNiBAQAogCiAjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CiAKLSNpZmRlZiBDT05GSUdfS01PRAotI2luY2x1ZGUgPGxpbnV4L2ttb2QuaD4KLSNlbmRpZgotCiAjaW5jbHVkZSAidXNidmlzaW9uLmgiCiAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgY29yZV9kZWJ1ZzsKQEAgLTg0LDcgKzgwLDggQEAKICNpZmRlZiBVU0JWSVNJT05fREVCVUcKIAkjZGVmaW5lIFBERUJVRyhsZXZlbCwgZm10LCBhcmdzLi4uKSB7IFwKIAkJaWYgKGNvcmVfZGVidWcgJiAobGV2ZWwpKSBcCi0JCQlpbmZvKCJbJXM6JWRdICIgZm10LCBfX2Z1bmNfXywgX19MSU5FX18gLCAjIyBhcmdzKTsgXAorCQkJcHJpbnRrKEtFUk5fSU5GTyBLQlVJTERfTU9ETkFNRSAiOlslczolZF0gIiBmbXQsIFwKKwkJCQlfX2Z1bmNfXywgX19MSU5FX18gLCAjIyBhcmdzKTsgXAogCX0KICNlbHNlCiAJI2RlZmluZSBQREVCVUcobGV2ZWwsIGZtdCwgYXJncy4uLikgZG8ge30gd2hpbGUoMCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXNidmlzaW9uL3VzYnZpc2lvbi1pMmMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXNidmlzaW9uL3VzYnZpc2lvbi1pMmMuYwppbmRleCBhNmQwMDg1Li45MjQyN2ZkIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3VzYnZpc2lvbi91c2J2aXNpb24taTJjLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby91c2J2aXNpb24vdXNidmlzaW9uLWkyYy5jCkBAIC00Nyw3ICs0Nyw4IEBACiAKICNkZWZpbmUgUERFQlVHKGxldmVsLCBmbXQsIGFyZ3MuLi4pIHsgXAogCQlpZiAoaTJjX2RlYnVnICYgKGxldmVsKSkgXAotCQkJaW5mbygiWyVzOiVkXSAiIGZtdCwgX19mdW5jX18sIF9fTElORV9fICwgIyMgYXJncyk7IFwKKwkJCXByaW50ayhLRVJOX0lORk8gS0JVSUxEX01PRE5BTUUgIjpbJXM6JWRdICIgZm10LCBcCisJCQkJX19mdW5jX18sIF9fTElORV9fICwgIyMgYXJncyk7IFwKIAl9CiAKIHN0YXRpYyBpbnQgdXNidmlzaW9uX2kyY193cml0ZShzdHJ1Y3QgdXNiX3VzYnZpc2lvbiAqdXNidmlzaW9uLCB1bnNpZ25lZCBjaGFyIGFkZHIsIGNoYXIgKmJ1ZiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXNidmlzaW9uL3VzYnZpc2lvbi12aWRlby5jIGIvZHJpdmVycy9tZWRpYS92aWRlby91c2J2aXNpb24vdXNidmlzaW9uLXZpZGVvLmMKaW5kZXggYjk3NzExNi4uNzdhZWIzOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby91c2J2aXNpb24vdXNidmlzaW9uLXZpZGVvLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby91c2J2aXNpb24vdXNidmlzaW9uLXZpZGVvLmMKQEAgLTY5LDEwICs2OSw2IEBACiAKICNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KIAotI2lmZGVmIENPTkZJR19LTU9ECi0jaW5jbHVkZSA8bGludXgva21vZC5oPgotI2VuZGlmCi0KICNpbmNsdWRlICJ1c2J2aXNpb24uaCIKICNpbmNsdWRlICJ1c2J2aXNpb24tY2FyZHMuaCIKIApAQCAtOTgsNyArOTQsOCBAQAogI2lmZGVmIFVTQlZJU0lPTl9ERUJVRwogCSNkZWZpbmUgUERFQlVHKGxldmVsLCBmbXQsIGFyZ3MuLi4pIHsgXAogCQlpZiAodmlkZW9fZGVidWcgJiAobGV2ZWwpKSBcCi0JCQlpbmZvKCJbJXM6JWRdICIgZm10LCBfX2Z1bmNfXywgX19MSU5FX18gLCAjIyBhcmdzKTsgXAorCQkJcHJpbnRrKEtFUk5fSU5GTyBLQlVJTERfTU9ETkFNRSAiOlslczolZF0gIiBmbXQsIFwKKwkJCQlfX2Z1bmNfXywgX19MSU5FX18gLCAjIyBhcmdzKTsgXAogCX0KICNlbHNlCiAJI2RlZmluZSBQREVCVUcobGV2ZWwsIGZtdCwgYXJncy4uLikgZG8ge30gd2hpbGUoMCkKQEAgLTM2MCwxMyArMzU3LDEyIEBACiAgKi8KIHN0YXRpYyBpbnQgdXNidmlzaW9uX3Y0bDJfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKLQlzdHJ1Y3QgdmlkZW9fZGV2aWNlICpkZXYgPSB2aWRlb19kZXZkYXRhKGZpbGUpOwotCXN0cnVjdCB1c2JfdXNidmlzaW9uICp1c2J2aXNpb24gPQotCQkoc3RydWN0IHVzYl91c2J2aXNpb24gKikgdmlkZW9fZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgdXNiX3VzYnZpc2lvbiAqdXNidmlzaW9uID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKIAlpbnQgZXJyQ29kZSA9IDA7CiAKIAlQREVCVUcoREJHX0lPLCAib3BlbiIpOwogCisJbG9ja19rZXJuZWwoKTsKIAl1c2J2aXNpb25fcmVzZXRfcG93ZXJPZmZUaW1lcih1c2J2aXNpb24pOwogCiAJaWYgKHVzYnZpc2lvbi0+dXNlcikKQEAgLTQyNCw2ICs0MjAsNyBAQAogCXVzYnZpc2lvbl9lbXB0eV9mcmFtZXF1ZXVlcyh1c2J2aXNpb24pOwogCiAJUERFQlVHKERCR19JTywgInN1Y2Nlc3MiKTsKKwl1bmxvY2tfa2VybmVsKCk7CiAJcmV0dXJuIGVyckNvZGU7CiB9CiAKQEAgLTQzNyw5ICs0MzQsNyBAQAogICovCiBzdGF0aWMgaW50IHVzYnZpc2lvbl92NGwyX2Nsb3NlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQogewotCXN0cnVjdCB2aWRlb19kZXZpY2UgKmRldiA9IHZpZGVvX2RldmRhdGEoZmlsZSk7Ci0Jc3RydWN0IHVzYl91c2J2aXNpb24gKnVzYnZpc2lvbiA9Ci0JCShzdHJ1Y3QgdXNiX3VzYnZpc2lvbiAqKSB2aWRlb19nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCB1c2JfdXNidmlzaW9uICp1c2J2aXNpb24gPSB2aWRlb19kcnZkYXRhKGZpbGUpOwogCiAJUERFQlVHKERCR19JTywgImNsb3NlIik7CiAJbXV0ZXhfbG9jaygmdXNidmlzaW9uLT5sb2NrKTsKQEAgLTQ4NCw5ICs0NzksNyBAQAogc3RhdGljIGludCB2aWRpb2NfZ19yZWdpc3RlciAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCQkJc3RydWN0IHY0bDJfcmVnaXN0ZXIgKnJlZykKIHsKLQlzdHJ1Y3QgdmlkZW9fZGV2aWNlICpkZXYgPSB2aWRlb19kZXZkYXRhKGZpbGUpOwotCXN0cnVjdCB1c2JfdXNidmlzaW9uICp1c2J2aXNpb24gPQotCQkoc3RydWN0IHVzYl91c2J2aXNpb24gKikgdmlkZW9fZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgdXNiX3VzYnZpc2lvbiAqdXNidmlzaW9uID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKIAlpbnQgZXJyQ29kZTsKIAogCWlmICghdjRsMl9jaGlwX21hdGNoX2hvc3QocmVnLT5tYXRjaF90eXBlLCByZWctPm1hdGNoX2NoaXApKQpAQCAtNTA1LDkgKzQ5OCw3IEBACiBzdGF0aWMgaW50IHZpZGlvY19zX3JlZ2lzdGVyIChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCQlzdHJ1Y3QgdjRsMl9yZWdpc3RlciAqcmVnKQogewotCXN0cnVjdCB2aWRlb19kZXZpY2UgKmRldiA9IHZpZGVvX2RldmRhdGEoZmlsZSk7Ci0Jc3RydWN0IHVzYl91c2J2aXNpb24gKnVzYnZpc2lvbiA9Ci0JCShzdHJ1Y3QgdXNiX3VzYnZpc2lvbiAqKSB2aWRlb19nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCB1c2JfdXNidmlzaW9uICp1c2J2aXNpb24gPSB2aWRlb19kcnZkYXRhKGZpbGUpOwogCWludCBlcnJDb2RlOwogCiAJaWYgKCF2NGwyX2NoaXBfbWF0Y2hfaG9zdChyZWctPm1hdGNoX3R5cGUsIHJlZy0+bWF0Y2hfY2hpcCkpCkBAIC01MjYsOSArNTE3LDcgQEAKIHN0YXRpYyBpbnQgdmlkaW9jX3F1ZXJ5Y2FwIChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAgKnByaXYsCiAJCQkJCXN0cnVjdCB2NGwyX2NhcGFiaWxpdHkgKnZjKQogewotCXN0cnVjdCB2aWRlb19kZXZpY2UgKmRldiA9IHZpZGVvX2RldmRhdGEoZmlsZSk7Ci0Jc3RydWN0IHVzYl91c2J2aXNpb24gKnVzYnZpc2lvbiA9Ci0JCShzdHJ1Y3QgdXNiX3VzYnZpc2lvbiAqKSB2aWRlb19nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCB1c2JfdXNidmlzaW9uICp1c2J2aXNpb24gPSB2aWRlb19kcnZkYXRhKGZpbGUpOwogCiAJc3RybGNweSh2Yy0+ZHJpdmVyLCAiVVNCVmlzaW9uIiwgc2l6ZW9mKHZjLT5kcml2ZXIpKTsKIAlzdHJsY3B5KHZjLT5jYXJkLApAQCAtNTQ4LDkgKzUzNyw3IEBACiBzdGF0aWMgaW50IHZpZGlvY19lbnVtX2lucHV0IChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCQlzdHJ1Y3QgdjRsMl9pbnB1dCAqdmkpCiB7Ci0Jc3RydWN0IHZpZGVvX2RldmljZSAqZGV2ID0gdmlkZW9fZGV2ZGF0YShmaWxlKTsKLQlzdHJ1Y3QgdXNiX3VzYnZpc2lvbiAqdXNidmlzaW9uID0KLQkJKHN0cnVjdCB1c2JfdXNidmlzaW9uICopIHZpZGVvX2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IHVzYl91c2J2aXNpb24gKnVzYnZpc2lvbiA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CiAJaW50IGNoYW47CiAKIAlpZiAoKHZpLT5pbmRleCA+PSB1c2J2aXNpb24tPnZpZGVvX2lucHV0cykgfHwgKHZpLT5pbmRleCA8IDApICkKQEAgLTYwMyw5ICs1OTAsNyBAQAogCiBzdGF0aWMgaW50IHZpZGlvY19nX2lucHV0IChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwgdW5zaWduZWQgaW50ICppbnB1dCkKIHsKLQlzdHJ1Y3QgdmlkZW9fZGV2aWNlICpkZXYgPSB2aWRlb19kZXZkYXRhKGZpbGUpOwotCXN0cnVjdCB1c2JfdXNidmlzaW9uICp1c2J2aXNpb24gPQotCQkoc3RydWN0IHVzYl91c2J2aXNpb24gKikgdmlkZW9fZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgdXNiX3VzYnZpc2lvbiAqdXNidmlzaW9uID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKIAogCSppbnB1dCA9IHVzYnZpc2lvbi0+Y3RsX2lucHV0OwogCXJldHVybiAwOwpAQCAtNjEzLDkgKzU5OCw3IEBACiAKIHN0YXRpYyBpbnQgdmlkaW9jX3NfaW5wdXQgKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LCB1bnNpZ25lZCBpbnQgaW5wdXQpCiB7Ci0Jc3RydWN0IHZpZGVvX2RldmljZSAqZGV2ID0gdmlkZW9fZGV2ZGF0YShmaWxlKTsKLQlzdHJ1Y3QgdXNiX3VzYnZpc2lvbiAqdXNidmlzaW9uID0KLQkJKHN0cnVjdCB1c2JfdXNidmlzaW9uICopIHZpZGVvX2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IHVzYl91c2J2aXNpb24gKnVzYnZpc2lvbiA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CiAKIAlpZiAoKGlucHV0ID49IHVzYnZpc2lvbi0+dmlkZW9faW5wdXRzKSB8fCAoaW5wdXQgPCAwKSApCiAJCXJldHVybiAtRUlOVkFMOwpAQCAtNjMyLDkgKzYxNSw4IEBACiAKIHN0YXRpYyBpbnQgdmlkaW9jX3Nfc3RkIChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwgdjRsMl9zdGRfaWQgKmlkKQogewotCXN0cnVjdCB2aWRlb19kZXZpY2UgKmRldiA9IHZpZGVvX2RldmRhdGEoZmlsZSk7Ci0Jc3RydWN0IHVzYl91c2J2aXNpb24gKnVzYnZpc2lvbiA9Ci0JCShzdHJ1Y3QgdXNiX3VzYnZpc2lvbiAqKSB2aWRlb19nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCB1c2JfdXNidmlzaW9uICp1c2J2aXNpb24gPSB2aWRlb19kcnZkYXRhKGZpbGUpOworCiAJdXNidmlzaW9uLT50dm5vcm1JZD0qaWQ7CiAKIAltdXRleF9sb2NrKCZ1c2J2aXNpb24tPmxvY2spOwpAQCAtNjUwLDkgKzYzMiw3IEBACiBzdGF0aWMgaW50IHZpZGlvY19nX3R1bmVyIChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCQlzdHJ1Y3QgdjRsMl90dW5lciAqdnQpCiB7Ci0Jc3RydWN0IHZpZGVvX2RldmljZSAqZGV2ID0gdmlkZW9fZGV2ZGF0YShmaWxlKTsKLQlzdHJ1Y3QgdXNiX3VzYnZpc2lvbiAqdXNidmlzaW9uID0KLQkJKHN0cnVjdCB1c2JfdXNidmlzaW9uICopIHZpZGVvX2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IHVzYl91c2J2aXNpb24gKnVzYnZpc2lvbiA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CiAKIAlpZiAoIXVzYnZpc2lvbi0+aGF2ZV90dW5lciB8fCB2dC0+aW5kZXgpCS8vIE9ubHkgdHVuZXIgMAogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTY3MSw5ICs2NTEsNyBAQAogc3RhdGljIGludCB2aWRpb2Nfc190dW5lciAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCQkJc3RydWN0IHY0bDJfdHVuZXIgKnZ0KQogewotCXN0cnVjdCB2aWRlb19kZXZpY2UgKmRldiA9IHZpZGVvX2RldmRhdGEoZmlsZSk7Ci0Jc3RydWN0IHVzYl91c2J2aXNpb24gKnVzYnZpc2lvbiA9Ci0JCShzdHJ1Y3QgdXNiX3VzYnZpc2lvbiAqKSB2aWRlb19nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCB1c2JfdXNidmlzaW9uICp1c2J2aXNpb24gPSB2aWRlb19kcnZkYXRhKGZpbGUpOwogCiAJLy8gT25seSBubyBvciBvbmUgdHVuZXIgZm9yIG5vdwogCWlmICghdXNidmlzaW9uLT5oYXZlX3R1bmVyIHx8IHZ0LT5pbmRleCkKQEAgLTY4Nyw5ICs2NjUsNyBAQAogc3RhdGljIGludCB2aWRpb2NfZ19mcmVxdWVuY3kgKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQkJCXN0cnVjdCB2NGwyX2ZyZXF1ZW5jeSAqZnJlcSkKIHsKLQlzdHJ1Y3QgdmlkZW9fZGV2aWNlICpkZXYgPSB2aWRlb19kZXZkYXRhKGZpbGUpOwotCXN0cnVjdCB1c2JfdXNidmlzaW9uICp1c2J2aXNpb24gPQotCQkoc3RydWN0IHVzYl91c2J2aXNpb24gKikgdmlkZW9fZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgdXNiX3VzYnZpc2lvbiAqdXNidmlzaW9uID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKIAogCWZyZXEtPnR1bmVyID0gMDsgLy8gT25seSBvbmUgdHVuZXIKIAlpZih1c2J2aXNpb24tPnJhZGlvKSB7CkBAIC03MDUsOSArNjgxLDcgQEAKIHN0YXRpYyBpbnQgdmlkaW9jX3NfZnJlcXVlbmN5IChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCQlzdHJ1Y3QgdjRsMl9mcmVxdWVuY3kgKmZyZXEpCiB7Ci0Jc3RydWN0IHZpZGVvX2RldmljZSAqZGV2ID0gdmlkZW9fZGV2ZGF0YShmaWxlKTsKLQlzdHJ1Y3QgdXNiX3VzYnZpc2lvbiAqdXNidmlzaW9uID0KLQkJKHN0cnVjdCB1c2JfdXNidmlzaW9uICopIHZpZGVvX2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IHVzYl91c2J2aXNpb24gKnVzYnZpc2lvbiA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CiAKIAkvLyBPbmx5IG5vIG9yIG9uZSB0dW5lciBmb3Igbm93CiAJaWYgKCF1c2J2aXNpb24tPmhhdmVfdHVuZXIgfHwgZnJlcS0+dHVuZXIpCkBAIC03MjEsOSArNjk1LDcgQEAKIAogc3RhdGljIGludCB2aWRpb2NfZ19hdWRpbyAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsIHN0cnVjdCB2NGwyX2F1ZGlvICphKQogewotCXN0cnVjdCB2aWRlb19kZXZpY2UgKmRldiA9IHZpZGVvX2RldmRhdGEoZmlsZSk7Ci0Jc3RydWN0IHVzYl91c2J2aXNpb24gKnVzYnZpc2lvbiA9Ci0JCShzdHJ1Y3QgdXNiX3VzYnZpc2lvbiAqKSB2aWRlb19nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCB1c2JfdXNidmlzaW9uICp1c2J2aXNpb24gPSB2aWRlb19kcnZkYXRhKGZpbGUpOwogCiAJbWVtc2V0KGEsMCxzaXplb2YoKmEpKTsKIAlpZih1c2J2aXNpb24tPnJhZGlvKSB7CkBAIC03NDgsOSArNzIwLDcgQEAKIHN0YXRpYyBpbnQgdmlkaW9jX3F1ZXJ5Y3RybCAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCQkgICAgc3RydWN0IHY0bDJfcXVlcnljdHJsICpjdHJsKQogewotCXN0cnVjdCB2aWRlb19kZXZpY2UgKmRldiA9IHZpZGVvX2RldmRhdGEoZmlsZSk7Ci0Jc3RydWN0IHVzYl91c2J2aXNpb24gKnVzYnZpc2lvbiA9Ci0JCShzdHJ1Y3QgdXNiX3VzYnZpc2lvbiAqKSB2aWRlb19nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCB1c2JfdXNidmlzaW9uICp1c2J2aXNpb24gPSB2aWRlb19kcnZkYXRhKGZpbGUpOwogCWludCBpZD1jdHJsLT5pZDsKIAogCW1lbXNldChjdHJsLDAsc2l6ZW9mKCpjdHJsKSk7CkBAIC03NjcsOSArNzM3LDcgQEAKIHN0YXRpYyBpbnQgdmlkaW9jX2dfY3RybCAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCQkJc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCkKIHsKLQlzdHJ1Y3QgdmlkZW9fZGV2aWNlICpkZXYgPSB2aWRlb19kZXZkYXRhKGZpbGUpOwotCXN0cnVjdCB1c2JfdXNidmlzaW9uICp1c2J2aXNpb24gPQotCQkoc3RydWN0IHVzYl91c2J2aXNpb24gKikgdmlkZW9fZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgdXNiX3VzYnZpc2lvbiAqdXNidmlzaW9uID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKIAljYWxsX2kyY19jbGllbnRzKHVzYnZpc2lvbiwgVklESU9DX0dfQ1RSTCwgY3RybCk7CiAKIAlyZXR1cm4gMDsKQEAgLTc3OCw5ICs3NDYsNyBAQAogc3RhdGljIGludCB2aWRpb2Nfc19jdHJsIChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCQlzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsKQogewotCXN0cnVjdCB2aWRlb19kZXZpY2UgKmRldiA9IHZpZGVvX2RldmRhdGEoZmlsZSk7Ci0Jc3RydWN0IHVzYl91c2J2aXNpb24gKnVzYnZpc2lvbiA9Ci0JCShzdHJ1Y3QgdXNiX3VzYnZpc2lvbiAqKSB2aWRlb19nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCB1c2JfdXNidmlzaW9uICp1c2J2aXNpb24gPSB2aWRlb19kcnZkYXRhKGZpbGUpOwogCWNhbGxfaTJjX2NsaWVudHModXNidmlzaW9uLCBWSURJT0NfU19DVFJMLCBjdHJsKTsKIAogCXJldHVybiAwOwpAQCAtNzg5LDkgKzc1NSw3IEBACiBzdGF0aWMgaW50IHZpZGlvY19yZXFidWZzIChzdHJ1Y3QgZmlsZSAqZmlsZSwKIAkJCSAgIHZvaWQgKnByaXYsIHN0cnVjdCB2NGwyX3JlcXVlc3RidWZmZXJzICp2cikKIHsKLQlzdHJ1Y3QgdmlkZW9fZGV2aWNlICpkZXYgPSB2aWRlb19kZXZkYXRhKGZpbGUpOwotCXN0cnVjdCB1c2JfdXNidmlzaW9uICp1c2J2aXNpb24gPQotCQkoc3RydWN0IHVzYl91c2J2aXNpb24gKikgdmlkZW9fZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgdXNiX3VzYnZpc2lvbiAqdXNidmlzaW9uID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKIAlpbnQgcmV0OwogCiAJUkVTVFJJQ1RfVE9fUkFOR0UodnItPmNvdW50LDEsVVNCVklTSU9OX05VTUZSQU1FUyk7CkBAIC04MTksOSArNzgzLDcgQEAKIHN0YXRpYyBpbnQgdmlkaW9jX3F1ZXJ5YnVmIChzdHJ1Y3QgZmlsZSAqZmlsZSwKIAkJCSAgICB2b2lkICpwcml2LCBzdHJ1Y3QgdjRsMl9idWZmZXIgKnZiKQogewotCXN0cnVjdCB2aWRlb19kZXZpY2UgKmRldiA9IHZpZGVvX2RldmRhdGEoZmlsZSk7Ci0Jc3RydWN0IHVzYl91c2J2aXNpb24gKnVzYnZpc2lvbiA9Ci0JCShzdHJ1Y3QgdXNiX3VzYnZpc2lvbiAqKSB2aWRlb19nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCB1c2JfdXNidmlzaW9uICp1c2J2aXNpb24gPSB2aWRlb19kcnZkYXRhKGZpbGUpOwogCXN0cnVjdCB1c2J2aXNpb25fZnJhbWUgKmZyYW1lOwogCiAJLyogRklYTUUgOiBtdXN0IGNvbnRyb2wKQEAgLTg1Nyw5ICs4MTksNyBAQAogCiBzdGF0aWMgaW50IHZpZGlvY19xYnVmIChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwgc3RydWN0IHY0bDJfYnVmZmVyICp2YikKIHsKLQlzdHJ1Y3QgdmlkZW9fZGV2aWNlICpkZXYgPSB2aWRlb19kZXZkYXRhKGZpbGUpOwotCXN0cnVjdCB1c2JfdXNidmlzaW9uICp1c2J2aXNpb24gPQotCQkoc3RydWN0IHVzYl91c2J2aXNpb24gKikgdmlkZW9fZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgdXNiX3VzYnZpc2lvbiAqdXNidmlzaW9uID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKIAlzdHJ1Y3QgdXNidmlzaW9uX2ZyYW1lICpmcmFtZTsKIAl1bnNpZ25lZCBsb25nIGxvY2tfZmxhZ3M7CiAKQEAgLTg5Niw5ICs4NTYsNyBAQAogCiBzdGF0aWMgaW50IHZpZGlvY19kcWJ1ZiAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsIHN0cnVjdCB2NGwyX2J1ZmZlciAqdmIpCiB7Ci0Jc3RydWN0IHZpZGVvX2RldmljZSAqZGV2ID0gdmlkZW9fZGV2ZGF0YShmaWxlKTsKLQlzdHJ1Y3QgdXNiX3VzYnZpc2lvbiAqdXNidmlzaW9uID0KLQkJKHN0cnVjdCB1c2JfdXNidmlzaW9uICopIHZpZGVvX2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IHVzYl91c2J2aXNpb24gKnVzYnZpc2lvbiA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CiAJaW50IHJldDsKIAlzdHJ1Y3QgdXNidmlzaW9uX2ZyYW1lICpmOwogCXVuc2lnbmVkIGxvbmcgbG9ja19mbGFnczsKQEAgLTkzOSw5ICs4OTcsNyBAQAogCiBzdGF0aWMgaW50IHZpZGlvY19zdHJlYW1vbihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwgZW51bSB2NGwyX2J1Zl90eXBlIGkpCiB7Ci0Jc3RydWN0IHZpZGVvX2RldmljZSAqZGV2ID0gdmlkZW9fZGV2ZGF0YShmaWxlKTsKLQlzdHJ1Y3QgdXNiX3VzYnZpc2lvbiAqdXNidmlzaW9uID0KLQkJKHN0cnVjdCB1c2JfdXNidmlzaW9uICopIHZpZGVvX2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IHVzYl91c2J2aXNpb24gKnVzYnZpc2lvbiA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CiAJaW50IGI9VjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOwogCiAJdXNidmlzaW9uLT5zdHJlYW1pbmcgPSBTdHJlYW1fT247CkBAIC05NTMsOSArOTA5LDcgQEAKIHN0YXRpYyBpbnQgdmlkaW9jX3N0cmVhbW9mZihzdHJ1Y3QgZmlsZSAqZmlsZSwKIAkJCSAgICB2b2lkICpwcml2LCBlbnVtIHY0bDJfYnVmX3R5cGUgdHlwZSkKIHsKLQlzdHJ1Y3QgdmlkZW9fZGV2aWNlICpkZXYgPSB2aWRlb19kZXZkYXRhKGZpbGUpOwotCXN0cnVjdCB1c2JfdXNidmlzaW9uICp1c2J2aXNpb24gPQotCQkoc3RydWN0IHVzYl91c2J2aXNpb24gKikgdmlkZW9fZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgdXNiX3VzYnZpc2lvbiAqdXNidmlzaW9uID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKIAlpbnQgYj1WNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU7CiAKIAlpZiAodHlwZSAhPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUpCkBAIC05ODgsOSArOTQyLDcgQEAKIHN0YXRpYyBpbnQgdmlkaW9jX2dfZm10X3ZpZF9jYXAgKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQkJCQlzdHJ1Y3QgdjRsMl9mb3JtYXQgKnZmKQogewotCXN0cnVjdCB2aWRlb19kZXZpY2UgKmRldiA9IHZpZGVvX2RldmRhdGEoZmlsZSk7Ci0Jc3RydWN0IHVzYl91c2J2aXNpb24gKnVzYnZpc2lvbiA9Ci0JCShzdHJ1Y3QgdXNiX3VzYnZpc2lvbiAqKSB2aWRlb19nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCB1c2JfdXNidmlzaW9uICp1c2J2aXNpb24gPSB2aWRlb19kcnZkYXRhKGZpbGUpOwogCXZmLT5mbXQucGl4LndpZHRoID0gdXNidmlzaW9uLT5jdXJ3aWR0aDsKIAl2Zi0+Zm10LnBpeC5oZWlnaHQgPSB1c2J2aXNpb24tPmN1cmhlaWdodDsKIAl2Zi0+Zm10LnBpeC5waXhlbGZvcm1hdCA9IHVzYnZpc2lvbi0+cGFsZXR0ZS5mb3JtYXQ7CkBAIC0xMDA2LDkgKzk1OCw3IEBACiBzdGF0aWMgaW50IHZpZGlvY190cnlfZm10X3ZpZF9jYXAgKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQkJICAgICAgIHN0cnVjdCB2NGwyX2Zvcm1hdCAqdmYpCiB7Ci0Jc3RydWN0IHZpZGVvX2RldmljZSAqZGV2ID0gdmlkZW9fZGV2ZGF0YShmaWxlKTsKLQlzdHJ1Y3QgdXNiX3VzYnZpc2lvbiAqdXNidmlzaW9uID0KLQkJKHN0cnVjdCB1c2JfdXNidmlzaW9uICopIHZpZGVvX2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IHVzYl91c2J2aXNpb24gKnVzYnZpc2lvbiA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CiAJaW50IGZvcm1hdElkeDsKIAogCS8qIEZpbmQgcmVxdWVzdGVkIGZvcm1hdCBpbiBhdmFpbGFibGUgb25lcyAqLwpAQCAtMTAzNiw5ICs5ODYsNyBAQAogc3RhdGljIGludCB2aWRpb2Nfc19mbXRfdmlkX2NhcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCSAgICAgICBzdHJ1Y3QgdjRsMl9mb3JtYXQgKnZmKQogewotCXN0cnVjdCB2aWRlb19kZXZpY2UgKmRldiA9IHZpZGVvX2RldmRhdGEoZmlsZSk7Ci0Jc3RydWN0IHVzYl91c2J2aXNpb24gKnVzYnZpc2lvbiA9Ci0JCShzdHJ1Y3QgdXNiX3VzYnZpc2lvbiAqKSB2aWRlb19nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCB1c2JfdXNidmlzaW9uICp1c2J2aXNpb24gPSB2aWRlb19kcnZkYXRhKGZpbGUpOwogCWludCByZXQ7CiAKIAlpZiggMCAhPSAocmV0PXZpZGlvY190cnlfZm10X3ZpZF9jYXAgKGZpbGUsIHByaXYsIHZmKSkgKSB7CkBAIC0xMDY2LDkgKzEwMTQsNyBAQAogc3RhdGljIHNzaXplX3QgdXNidmlzaW9uX3Y0bDJfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1ZiwKIAkJICAgICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCiB7Ci0Jc3RydWN0IHZpZGVvX2RldmljZSAqZGV2ID0gdmlkZW9fZGV2ZGF0YShmaWxlKTsKLQlzdHJ1Y3QgdXNiX3VzYnZpc2lvbiAqdXNidmlzaW9uID0KLQkJKHN0cnVjdCB1c2JfdXNidmlzaW9uICopIHZpZGVvX2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IHVzYl91c2J2aXNpb24gKnVzYnZpc2lvbiA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CiAJaW50IG5vYmxvY2sgPSBmaWxlLT5mX2ZsYWdzICYgT19OT05CTE9DSzsKIAl1bnNpZ25lZCBsb25nIGxvY2tfZmxhZ3M7CiAKQEAgLTExNzcsMTAgKzExMjMsNyBAQAogCQlzdGFydCA9IHZtYS0+dm1fc3RhcnQ7CiAJdm9pZCAqcG9zOwogCXUzMiBpOwotCi0Jc3RydWN0IHZpZGVvX2RldmljZSAqZGV2ID0gdmlkZW9fZGV2ZGF0YShmaWxlKTsKLQlzdHJ1Y3QgdXNiX3VzYnZpc2lvbiAqdXNidmlzaW9uID0KLQkJKHN0cnVjdCB1c2JfdXNidmlzaW9uICopIHZpZGVvX2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IHVzYl91c2J2aXNpb24gKnVzYnZpc2lvbiA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CiAKIAlQREVCVUcoREJHX01NQVAsICJtbWFwIik7CiAKQEAgLTEyMzcsOSArMTE4MCw3IEBACiAgKi8KIHN0YXRpYyBpbnQgdXNidmlzaW9uX3JhZGlvX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCiB7Ci0Jc3RydWN0IHZpZGVvX2RldmljZSAqZGV2ID0gdmlkZW9fZGV2ZGF0YShmaWxlKTsKLQlzdHJ1Y3QgdXNiX3VzYnZpc2lvbiAqdXNidmlzaW9uID0KLQkJKHN0cnVjdCB1c2JfdXNidmlzaW9uICopIHZpZGVvX2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IHVzYl91c2J2aXNpb24gKnVzYnZpc2lvbiA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CiAJaW50IGVyckNvZGUgPSAwOwogCiAJUERFQlVHKERCR19JTywgIiVzOiIsIF9fZnVuY19fKTsKQEAgLTEyODksOSArMTIzMCw3IEBACiAKIHN0YXRpYyBpbnQgdXNidmlzaW9uX3JhZGlvX2Nsb3NlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQogewotCXN0cnVjdCB2aWRlb19kZXZpY2UgKmRldiA9IHZpZGVvX2RldmRhdGEoZmlsZSk7Ci0Jc3RydWN0IHVzYl91c2J2aXNpb24gKnVzYnZpc2lvbiA9Ci0JCShzdHJ1Y3QgdXNiX3VzYnZpc2lvbiAqKSB2aWRlb19nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCB1c2JfdXNidmlzaW9uICp1c2J2aXNpb24gPSB2aWRlb19kcnZkYXRhKGZpbGUpOwogCWludCBlcnJDb2RlID0gMDsKIAogCVBERUJVRyhEQkdfSU8sICIiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXZjL3V2Y19jdHJsLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3V2Yy91dmNfY3RybC5jCmluZGV4IGZlYWIxMmEuLmYxNmFhZmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXZjL3V2Y19jdHJsLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby91dmMvdXZjX2N0cmwuYwpAQCAtODMsNiArODMsMjIgQEAKIAl9LAogCXsKIAkJLmVudGl0eQkJPSBVVkNfR1VJRF9VVkNfUFJPQ0VTU0lORywKKwkJLnNlbGVjdG9yCT0gUFVfV0hJVEVfQkFMQU5DRV9URU1QRVJBVFVSRV9DT05UUk9MLAorCQkuaW5kZXgJCT0gNiwKKwkJLnNpemUJCT0gMiwKKwkJLmZsYWdzCQk9IFVWQ19DT05UUk9MX1NFVF9DVVIgfCBVVkNfQ09OVFJPTF9HRVRfUkFOR0UKKwkJCQl8IFVWQ19DT05UUk9MX1JFU1RPUkUgfCBVVkNfQ09OVFJPTF9BVVRPX1VQREFURSwKKwl9LAorCXsKKwkJLmVudGl0eQkJPSBVVkNfR1VJRF9VVkNfUFJPQ0VTU0lORywKKwkJLnNlbGVjdG9yCT0gUFVfV0hJVEVfQkFMQU5DRV9DT01QT05FTlRfQ09OVFJPTCwKKwkJLmluZGV4CQk9IDcsCisJCS5zaXplCQk9IDQsCisJCS5mbGFncwkJPSBVVkNfQ09OVFJPTF9TRVRfQ1VSIHwgVVZDX0NPTlRST0xfR0VUX1JBTkdFCisJCQkJfCBVVkNfQ09OVFJPTF9SRVNUT1JFIHwgVVZDX0NPTlRST0xfQVVUT19VUERBVEUsCisJfSwKKwl7CisJCS5lbnRpdHkJCT0gVVZDX0dVSURfVVZDX1BST0NFU1NJTkcsCiAJCS5zZWxlY3Rvcgk9IFBVX0JBQ0tMSUdIVF9DT01QRU5TQVRJT05fQ09OVFJPTCwKIAkJLmluZGV4CQk9IDgsCiAJCS5zaXplCQk9IDIsCkBAIC0xMTQsNiArMTMwLDYwIEBACiAJCQkJfCBVVkNfQ09OVFJPTF9HRVRfREVGIHwgVVZDX0NPTlRST0xfUkVTVE9SRSwKIAl9LAogCXsKKwkJLmVudGl0eQkJPSBVVkNfR1VJRF9VVkNfUFJPQ0VTU0lORywKKwkJLnNlbGVjdG9yCT0gUFVfV0hJVEVfQkFMQU5DRV9URU1QRVJBVFVSRV9BVVRPX0NPTlRST0wsCisJCS5pbmRleAkJPSAxMiwKKwkJLnNpemUJCT0gMSwKKwkJLmZsYWdzCQk9IFVWQ19DT05UUk9MX1NFVF9DVVIgfCBVVkNfQ09OVFJPTF9HRVRfQ1VSCisJCQkJfCBVVkNfQ09OVFJPTF9HRVRfREVGIHwgVVZDX0NPTlRST0xfUkVTVE9SRSwKKwl9LAorCXsKKwkJLmVudGl0eQkJPSBVVkNfR1VJRF9VVkNfUFJPQ0VTU0lORywKKwkJLnNlbGVjdG9yCT0gUFVfV0hJVEVfQkFMQU5DRV9DT01QT05FTlRfQVVUT19DT05UUk9MLAorCQkuaW5kZXgJCT0gMTMsCisJCS5zaXplCQk9IDEsCisJCS5mbGFncwkJPSBVVkNfQ09OVFJPTF9TRVRfQ1VSIHwgVVZDX0NPTlRST0xfR0VUX0NVUgorCQkJCXwgVVZDX0NPTlRST0xfR0VUX0RFRiB8IFVWQ19DT05UUk9MX1JFU1RPUkUsCisJfSwKKwl7CisJCS5lbnRpdHkJCT0gVVZDX0dVSURfVVZDX1BST0NFU1NJTkcsCisJCS5zZWxlY3Rvcgk9IFBVX0RJR0lUQUxfTVVMVElQTElFUl9DT05UUk9MLAorCQkuaW5kZXgJCT0gMTQsCisJCS5zaXplCQk9IDIsCisJCS5mbGFncwkJPSBVVkNfQ09OVFJPTF9TRVRfQ1VSIHwgVVZDX0NPTlRST0xfR0VUX1JBTkdFCisJCQkJfCBVVkNfQ09OVFJPTF9SRVNUT1JFLAorCX0sCisJeworCQkuZW50aXR5CQk9IFVWQ19HVUlEX1VWQ19QUk9DRVNTSU5HLAorCQkuc2VsZWN0b3IJPSBQVV9ESUdJVEFMX01VTFRJUExJRVJfTElNSVRfQ09OVFJPTCwKKwkJLmluZGV4CQk9IDE1LAorCQkuc2l6ZQkJPSAyLAorCQkuZmxhZ3MJCT0gVVZDX0NPTlRST0xfU0VUX0NVUiB8IFVWQ19DT05UUk9MX0dFVF9SQU5HRQorCQkJCXwgVVZDX0NPTlRST0xfUkVTVE9SRSwKKwl9LAorCXsKKwkJLmVudGl0eQkJPSBVVkNfR1VJRF9VVkNfUFJPQ0VTU0lORywKKwkJLnNlbGVjdG9yCT0gUFVfQU5BTE9HX1ZJREVPX1NUQU5EQVJEX0NPTlRST0wsCisJCS5pbmRleAkJPSAxNiwKKwkJLnNpemUJCT0gMSwKKwkJLmZsYWdzCQk9IFVWQ19DT05UUk9MX0dFVF9DVVIsCisJfSwKKwl7CisJCS5lbnRpdHkJCT0gVVZDX0dVSURfVVZDX1BST0NFU1NJTkcsCisJCS5zZWxlY3Rvcgk9IFBVX0FOQUxPR19MT0NLX1NUQVRVU19DT05UUk9MLAorCQkuaW5kZXgJCT0gMTcsCisJCS5zaXplCQk9IDEsCisJCS5mbGFncwkJPSBVVkNfQ09OVFJPTF9HRVRfQ1VSLAorCX0sCisJeworCQkuZW50aXR5CQk9IFVWQ19HVUlEX1VWQ19DQU1FUkEsCisJCS5zZWxlY3Rvcgk9IENUX1NDQU5OSU5HX01PREVfQ09OVFJPTCwKKwkJLmluZGV4CQk9IDAsCisJCS5zaXplCQk9IDEsCisJCS5mbGFncwkJPSBVVkNfQ09OVFJPTF9TRVRfQ1VSIHwgVVZDX0NPTlRST0xfR0VUX0NVUgorCQkJCXwgVVZDX0NPTlRST0xfUkVTVE9SRSwKKwl9LAorCXsKIAkJLmVudGl0eQkJPSBVVkNfR1VJRF9VVkNfQ0FNRVJBLAogCQkuc2VsZWN0b3IJPSBDVF9BRV9NT0RFX0NPTlRST0wsCiAJCS5pbmRleAkJPSAxLApAQCAtMTQwLDYgKzIxMCwxNCBAQAogCX0sCiAJewogCQkuZW50aXR5CQk9IFVWQ19HVUlEX1VWQ19DQU1FUkEsCisJCS5zZWxlY3Rvcgk9IENUX0VYUE9TVVJFX1RJTUVfUkVMQVRJVkVfQ09OVFJPTCwKKwkJLmluZGV4CQk9IDQsCisJCS5zaXplCQk9IDEsCisJCS5mbGFncwkJPSBVVkNfQ09OVFJPTF9TRVRfQ1VSIHwgVVZDX0NPTlRST0xfR0VUX0NVUgorCQkJCXwgVVZDX0NPTlRST0xfUkVTVE9SRSwKKwl9LAorCXsKKwkJLmVudGl0eQkJPSBVVkNfR1VJRF9VVkNfQ0FNRVJBLAogCQkuc2VsZWN0b3IJPSBDVF9GT0NVU19BQlNPTFVURV9DT05UUk9MLAogCQkuaW5kZXgJCT0gNSwKIAkJLnNpemUJCT0gMiwKQEAgLTE0OCw2ICsyMjYsNzggQEAKIAl9LAogCXsKIAkJLmVudGl0eQkJPSBVVkNfR1VJRF9VVkNfQ0FNRVJBLAorCQkuc2VsZWN0b3IJPSBDVF9GT0NVU19SRUxBVElWRV9DT05UUk9MLAorCQkuaW5kZXgJCT0gNiwKKwkJLnNpemUJCT0gMiwKKwkJLmZsYWdzCQk9IFVWQ19DT05UUk9MX1NFVF9DVVIgfCBVVkNfQ09OVFJPTF9HRVRfUkFOR0UKKwkJCQl8IFVWQ19DT05UUk9MX0FVVE9fVVBEQVRFLAorCX0sCisJeworCQkuZW50aXR5CQk9IFVWQ19HVUlEX1VWQ19DQU1FUkEsCisJCS5zZWxlY3Rvcgk9IENUX0lSSVNfQUJTT0xVVEVfQ09OVFJPTCwKKwkJLmluZGV4CQk9IDcsCisJCS5zaXplCQk9IDIsCisJCS5mbGFncwkJPSBVVkNfQ09OVFJPTF9TRVRfQ1VSIHwgVVZDX0NPTlRST0xfR0VUX1JBTkdFCisJCQkJfCBVVkNfQ09OVFJPTF9SRVNUT1JFIHwgVVZDX0NPTlRST0xfQVVUT19VUERBVEUsCisJfSwKKwl7CisJCS5lbnRpdHkJCT0gVVZDX0dVSURfVVZDX0NBTUVSQSwKKwkJLnNlbGVjdG9yCT0gQ1RfSVJJU19SRUxBVElWRV9DT05UUk9MLAorCQkuaW5kZXgJCT0gOCwKKwkJLnNpemUJCT0gMSwKKwkJLmZsYWdzCQk9IFVWQ19DT05UUk9MX1NFVF9DVVIgfCBVVkNfQ09OVFJPTF9HRVRfQ1VSCisJCQkJfCBVVkNfQ09OVFJPTF9BVVRPX1VQREFURSwKKwl9LAorCXsKKwkJLmVudGl0eQkJPSBVVkNfR1VJRF9VVkNfQ0FNRVJBLAorCQkuc2VsZWN0b3IJPSBDVF9aT09NX0FCU09MVVRFX0NPTlRST0wsCisJCS5pbmRleAkJPSA5LAorCQkuc2l6ZQkJPSAyLAorCQkuZmxhZ3MJCT0gVVZDX0NPTlRST0xfU0VUX0NVUiB8IFVWQ19DT05UUk9MX0dFVF9SQU5HRQorCQkJCXwgVVZDX0NPTlRST0xfUkVTVE9SRSB8IFVWQ19DT05UUk9MX0FVVE9fVVBEQVRFLAorCX0sCisJeworCQkuZW50aXR5CQk9IFVWQ19HVUlEX1VWQ19DQU1FUkEsCisJCS5zZWxlY3Rvcgk9IENUX1pPT01fUkVMQVRJVkVfQ09OVFJPTCwKKwkJLmluZGV4CQk9IDEwLAorCQkuc2l6ZQkJPSAzLAorCQkuZmxhZ3MJCT0gVVZDX0NPTlRST0xfU0VUX0NVUiB8IFVWQ19DT05UUk9MX0dFVF9SQU5HRQorCQkJCXwgVVZDX0NPTlRST0xfQVVUT19VUERBVEUsCisJfSwKKwl7CisJCS5lbnRpdHkJCT0gVVZDX0dVSURfVVZDX0NBTUVSQSwKKwkJLnNlbGVjdG9yCT0gQ1RfUEFOVElMVF9BQlNPTFVURV9DT05UUk9MLAorCQkuaW5kZXgJCT0gMTEsCisJCS5zaXplCQk9IDgsCisJCS5mbGFncwkJPSBVVkNfQ09OVFJPTF9TRVRfQ1VSIHwgVVZDX0NPTlRST0xfR0VUX1JBTkdFCisJCQkJfCBVVkNfQ09OVFJPTF9SRVNUT1JFIHwgVVZDX0NPTlRST0xfQVVUT19VUERBVEUsCisJfSwKKwl7CisJCS5lbnRpdHkJCT0gVVZDX0dVSURfVVZDX0NBTUVSQSwKKwkJLnNlbGVjdG9yCT0gQ1RfUEFOVElMVF9SRUxBVElWRV9DT05UUk9MLAorCQkuaW5kZXgJCT0gMTIsCisJCS5zaXplCQk9IDQsCisJCS5mbGFncwkJPSBVVkNfQ09OVFJPTF9TRVRfQ1VSIHwgVVZDX0NPTlRST0xfR0VUX1JBTkdFCisJCQkJfCBVVkNfQ09OVFJPTF9BVVRPX1VQREFURSwKKwl9LAorCXsKKwkJLmVudGl0eQkJPSBVVkNfR1VJRF9VVkNfQ0FNRVJBLAorCQkuc2VsZWN0b3IJPSBDVF9ST0xMX0FCU09MVVRFX0NPTlRST0wsCisJCS5pbmRleAkJPSAxMywKKwkJLnNpemUJCT0gMiwKKwkJLmZsYWdzCQk9IFVWQ19DT05UUk9MX1NFVF9DVVIgfCBVVkNfQ09OVFJPTF9HRVRfUkFOR0UKKwkJCQl8IFVWQ19DT05UUk9MX1JFU1RPUkUgfCBVVkNfQ09OVFJPTF9BVVRPX1VQREFURSwKKwl9LAorCXsKKwkJLmVudGl0eQkJPSBVVkNfR1VJRF9VVkNfQ0FNRVJBLAorCQkuc2VsZWN0b3IJPSBDVF9ST0xMX1JFTEFUSVZFX0NPTlRST0wsCisJCS5pbmRleAkJPSAxNCwKKwkJLnNpemUJCT0gMiwKKwkJLmZsYWdzCQk9IFVWQ19DT05UUk9MX1NFVF9DVVIgfCBVVkNfQ09OVFJPTF9HRVRfUkFOR0UKKwkJCQl8IFVWQ19DT05UUk9MX0FVVE9fVVBEQVRFLAorCX0sCisJeworCQkuZW50aXR5CQk9IFVWQ19HVUlEX1VWQ19DQU1FUkEsCiAJCS5zZWxlY3Rvcgk9IENUX0ZPQ1VTX0FVVE9fQ09OVFJPTCwKIAkJLmluZGV4CQk9IDE3LAogCQkuc2l6ZQkJPSAxLApAQCAtMTU1LDM1ICszMDUsMTEgQEAKIAkJCQl8IFVWQ19DT05UUk9MX0dFVF9ERUYgfCBVVkNfQ09OVFJPTF9SRVNUT1JFLAogCX0sCiAJewotCQkuZW50aXR5CQk9IFVWQ19HVUlEX1VWQ19QUk9DRVNTSU5HLAotCQkuc2VsZWN0b3IJPSBQVV9XSElURV9CQUxBTkNFX1RFTVBFUkFUVVJFX0FVVE9fQ09OVFJPTCwKLQkJLmluZGV4CQk9IDEyLAorCQkuZW50aXR5CQk9IFVWQ19HVUlEX1VWQ19DQU1FUkEsCisJCS5zZWxlY3Rvcgk9IENUX1BSSVZBQ1lfQ09OVFJPTCwKKwkJLmluZGV4CQk9IDE4LAogCQkuc2l6ZQkJPSAxLAogCQkuZmxhZ3MJCT0gVVZDX0NPTlRST0xfU0VUX0NVUiB8IFVWQ19DT05UUk9MX0dFVF9DVVIKLQkJCQl8IFVWQ19DT05UUk9MX0dFVF9ERUYgfCBVVkNfQ09OVFJPTF9SRVNUT1JFLAotCX0sCi0JewotCQkuZW50aXR5CQk9IFVWQ19HVUlEX1VWQ19QUk9DRVNTSU5HLAotCQkuc2VsZWN0b3IJPSBQVV9XSElURV9CQUxBTkNFX1RFTVBFUkFUVVJFX0NPTlRST0wsCi0JCS5pbmRleAkJPSA2LAotCQkuc2l6ZQkJPSAyLAotCQkuZmxhZ3MJCT0gVVZDX0NPTlRST0xfU0VUX0NVUiB8IFVWQ19DT05UUk9MX0dFVF9SQU5HRQotCQkJCXwgVVZDX0NPTlRST0xfUkVTVE9SRSB8IFVWQ19DT05UUk9MX0FVVE9fVVBEQVRFLAotCX0sCi0JewotCQkuZW50aXR5CQk9IFVWQ19HVUlEX1VWQ19QUk9DRVNTSU5HLAotCQkuc2VsZWN0b3IJPSBQVV9XSElURV9CQUxBTkNFX0NPTVBPTkVOVF9BVVRPX0NPTlRST0wsCi0JCS5pbmRleAkJPSAxMywKLQkJLnNpemUJCT0gMSwKLQkJLmZsYWdzCQk9IFVWQ19DT05UUk9MX1NFVF9DVVIgfCBVVkNfQ09OVFJPTF9HRVRfQ1VSCi0JCQkJfCBVVkNfQ09OVFJPTF9HRVRfREVGIHwgVVZDX0NPTlRST0xfUkVTVE9SRSwKLQl9LAotCXsKLQkJLmVudGl0eQkJPSBVVkNfR1VJRF9VVkNfUFJPQ0VTU0lORywKLQkJLnNlbGVjdG9yCT0gUFVfV0hJVEVfQkFMQU5DRV9DT01QT05FTlRfQ09OVFJPTCwKLQkJLmluZGV4CQk9IDcsCi0JCS5zaXplCQk9IDQsCi0JCS5mbGFncwkJPSBVVkNfQ09OVFJPTF9TRVRfQ1VSIHwgVVZDX0NPTlRST0xfR0VUX1JBTkdFCiAJCQkJfCBVVkNfQ09OVFJPTF9SRVNUT1JFIHwgVVZDX0NPTlRST0xfQVVUT19VUERBVEUsCiAJfSwKIH07CkBAIC03MTEsNyArODM3LDE3IEBACiAKIAlmb3IgKGkgPSAwOyBpIDwgZW50aXR5LT5uY29udHJvbHM7ICsraSkgewogCQljdHJsID0gJmVudGl0eS0+Y29udHJvbHNbaV07Ci0JCWlmIChjdHJsLT5pbmZvID09IE5VTEwgfHwgIWN0cmwtPmRpcnR5KQorCQlpZiAoY3RybC0+aW5mbyA9PSBOVUxMKQorCQkJY29udGludWU7CisKKwkJLyogUmVzZXQgdGhlIGxvYWRlZCBmbGFnIGZvciBhdXRvLXVwZGF0ZSBjb250cm9scyB0aGF0IHdlcmUKKwkJICogbWFya2VkIGFzIGxvYWRlZCBpbiB1dmNfY3RybF9nZXQvdXZjX2N0cmxfc2V0IHRvIHByZXZlbnQKKwkJICogdXZjX2N0cmxfZ2V0IGZyb20gdXNpbmcgdGhlIGNhY2hlZCB2YWx1ZS4KKwkJICovCisJCWlmIChjdHJsLT5pbmZvLT5mbGFncyAmIFVWQ19DT05UUk9MX0FVVE9fVVBEQVRFKQorCQkJY3RybC0+bG9hZGVkID0gMDsKKworCQlpZiAoIWN0cmwtPmRpcnR5KQogCQkJY29udGludWU7CiAKIAkJaWYgKCFyb2xsYmFjaykKQEAgLTcyNyw5ICs4NjMsNiBAQAogCQkJICAgICAgIHV2Y19jdHJsX2RhdGEoY3RybCwgVVZDX0NUUkxfREFUQV9CQUNLVVApLAogCQkJICAgICAgIGN0cmwtPmluZm8tPnNpemUpOwogCi0JCWlmICgoY3RybC0+aW5mby0+ZmxhZ3MgJiBVVkNfQ09OVFJPTF9HRVRfQ1VSKSA9PSAwKQotCQkJY3RybC0+bG9hZGVkID0gMDsKLQogCQljdHJsLT5kaXJ0eSA9IDA7CiAKIAkJaWYgKHJldCA8IDApCkBAIC03ODcsOCArOTIwLDcgQEAKIAkJaWYgKHJldCA8IDApCiAJCQlyZXR1cm4gcmV0OwogCi0JCWlmICgoY3RybC0+aW5mby0+ZmxhZ3MgJiBVVkNfQ09OVFJPTF9BVVRPX1VQREFURSkgPT0gMCkKLQkJCWN0cmwtPmxvYWRlZCA9IDE7CisJCWN0cmwtPmxvYWRlZCA9IDE7CiAJfQogCiAJeGN0cmwtPnZhbHVlID0gdXZjX2dldF9sZV92YWx1ZSgKQEAgLTgzOSw4ICs5NzEsNyBAQAogCQkJCXJldHVybiByZXQ7CiAJCX0KIAotCQlpZiAoKGN0cmwtPmluZm8tPmZsYWdzICYgVVZDX0NPTlRST0xfQVVUT19VUERBVEUpID09IDApCi0JCQljdHJsLT5sb2FkZWQgPSAxOworCQljdHJsLT5sb2FkZWQgPSAxOwogCX0KIAogCWlmICghY3RybC0+ZGlydHkpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXZjL3V2Y19kcml2ZXIuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXZjL3V2Y19kcml2ZXIuYwppbmRleCA3ZTEwMjAzLi5kN2FkMDYwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3V2Yy91dmNfZHJpdmVyLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby91dmMvdXZjX2RyaXZlci5jCkBAIC0xNjYzLDcgKzE2NjMsNyBAQAogCXJldHVybiB1dmNfdmlkZW9fc3VzcGVuZCgmZGV2LT52aWRlbyk7CiB9CiAKLXN0YXRpYyBpbnQgdXZjX3Jlc3VtZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKK3N0YXRpYyBpbnQgX191dmNfcmVzdW1lKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLCBpbnQgcmVzZXQpCiB7CiAJc3RydWN0IHV2Y19kZXZpY2UgKmRldiA9IHVzYl9nZXRfaW50ZmRhdGEoaW50Zik7CiAJaW50IHJldDsKQEAgLTE2NzIsNyArMTY3Miw3IEBACiAJCWludGYtPmN1cl9hbHRzZXR0aW5nLT5kZXNjLmJJbnRlcmZhY2VOdW1iZXIpOwogCiAJaWYgKGludGYtPmN1cl9hbHRzZXR0aW5nLT5kZXNjLmJJbnRlcmZhY2VTdWJDbGFzcyA9PSBTQ19WSURFT0NPTlRST0wpIHsKLQkJaWYgKChyZXQgPSB1dmNfY3RybF9yZXN1bWVfZGV2aWNlKGRldikpIDwgMCkKKwkJaWYgKHJlc2V0ICYmIChyZXQgPSB1dmNfY3RybF9yZXN1bWVfZGV2aWNlKGRldikpIDwgMCkKIAkJCXJldHVybiByZXQ7CiAKIAkJcmV0dXJuIHV2Y19zdGF0dXNfcmVzdW1lKGRldik7CkBAIC0xNjg3LDYgKzE2ODcsMTYgQEAKIAlyZXR1cm4gdXZjX3ZpZGVvX3Jlc3VtZSgmZGV2LT52aWRlbyk7CiB9CiAKK3N0YXRpYyBpbnQgdXZjX3Jlc3VtZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKK3sKKwlyZXR1cm4gX191dmNfcmVzdW1lKGludGYsIDApOworfQorCitzdGF0aWMgaW50IHV2Y19yZXNldF9yZXN1bWUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCit7CisJcmV0dXJuIF9fdXZjX3Jlc3VtZShpbnRmLCAxKTsKK30KKwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKiBEcml2ZXIgaW5pdGlhbGl6YXRpb24gYW5kIGNsZWFudXAKICAqLwpAQCAtMTkwMiw2ICsxOTEyLDI0IEBACiAJICAuYkludGVyZmFjZVN1YkNsYXNzCT0gMSwKIAkgIC5iSW50ZXJmYWNlUHJvdG9jb2wJPSAwLAogCSAgLmRyaXZlcl9pbmZvCQk9IFVWQ19RVUlSS19QUk9CRV9NSU5NQVggfSwKKwkvKiBDb21wYXEgUHJlc2FyaW8gQjEyMDAgLSBCaXNvbiBFbGVjdHJvbmljcyAqLworCXsgLm1hdGNoX2ZsYWdzCQk9IFVTQl9ERVZJQ0VfSURfTUFUQ0hfREVWSUNFCisJCQkJfCBVU0JfREVWSUNFX0lEX01BVENIX0lOVF9JTkZPLAorCSAgLmlkVmVuZG9yCQk9IDB4NTk4NiwKKwkgIC5pZFByb2R1Y3QJCT0gMHgwMTA0LAorCSAgLmJJbnRlcmZhY2VDbGFzcwk9IFVTQl9DTEFTU19WSURFTywKKwkgIC5iSW50ZXJmYWNlU3ViQ2xhc3MJPSAxLAorCSAgLmJJbnRlcmZhY2VQcm90b2NvbAk9IDAsCisJICAuZHJpdmVyX2luZm8JCT0gVVZDX1FVSVJLX1BST0JFX01JTk1BWCB9LAorCS8qIEFjZXIgVHJhdmVsbWF0ZSA3NzIwIC0gQmlzb24gRWxlY3Ryb25pY3MgKi8KKwl7IC5tYXRjaF9mbGFncwkJPSBVU0JfREVWSUNFX0lEX01BVENIX0RFVklDRQorCQkJCXwgVVNCX0RFVklDRV9JRF9NQVRDSF9JTlRfSU5GTywKKwkgIC5pZFZlbmRvcgkJPSAweDU5ODYsCisJICAuaWRQcm9kdWN0CQk9IDB4MDEwNSwKKwkgIC5iSW50ZXJmYWNlQ2xhc3MJPSBVU0JfQ0xBU1NfVklERU8sCisJICAuYkludGVyZmFjZVN1YkNsYXNzCT0gMSwKKwkgIC5iSW50ZXJmYWNlUHJvdG9jb2wJPSAwLAorCSAgLmRyaXZlcl9pbmZvCQk9IFVWQ19RVUlSS19QUk9CRV9NSU5NQVggfSwKIAkvKiBNZWRpb24gQWtveWEgTWluaSBFMTIxMCAtIEJpc29uIEVsZWN0cm9uaWNzICovCiAJeyAubWF0Y2hfZmxhZ3MJCT0gVVNCX0RFVklDRV9JRF9NQVRDSF9ERVZJQ0UKIAkJCQl8IFVTQl9ERVZJQ0VfSURfTUFUQ0hfSU5UX0lORk8sCkBAIC0xOTIwLDYgKzE5NDgsMjQgQEAKIAkgIC5iSW50ZXJmYWNlU3ViQ2xhc3MJPSAxLAogCSAgLmJJbnRlcmZhY2VQcm90b2NvbAk9IDAsCiAJICAuZHJpdmVyX2luZm8JCT0gVVZDX1FVSVJLX1BST0JFX01JTk1BWCB9LAorCS8qICBGdWppdHN1IEFtaWxvIFNJMjYzNiAtIEJpc29uIEVsZWN0cm9uaWNzICovCisJeyAubWF0Y2hfZmxhZ3MJCT0gVVNCX0RFVklDRV9JRF9NQVRDSF9ERVZJQ0UKKwkJCQl8IFVTQl9ERVZJQ0VfSURfTUFUQ0hfSU5UX0lORk8sCisJICAuaWRWZW5kb3IJCT0gMHg1OTg2LAorCSAgLmlkUHJvZHVjdAkJPSAweDAyMDIsCisJICAuYkludGVyZmFjZUNsYXNzCT0gVVNCX0NMQVNTX1ZJREVPLAorCSAgLmJJbnRlcmZhY2VTdWJDbGFzcwk9IDEsCisJICAuYkludGVyZmFjZVByb3RvY29sCT0gMCwKKwkgIC5kcml2ZXJfaW5mbwkJPSBVVkNfUVVJUktfUFJPQkVfTUlOTUFYIH0sCisJLyogIEFkdmVudCA0MjExIC0gQmlzb24gRWxlY3Ryb25pY3MgKi8KKwl7IC5tYXRjaF9mbGFncwkJPSBVU0JfREVWSUNFX0lEX01BVENIX0RFVklDRQorCQkJCXwgVVNCX0RFVklDRV9JRF9NQVRDSF9JTlRfSU5GTywKKwkgIC5pZFZlbmRvcgkJPSAweDU5ODYsCisJICAuaWRQcm9kdWN0CQk9IDB4MDIwMywKKwkgIC5iSW50ZXJmYWNlQ2xhc3MJPSBVU0JfQ0xBU1NfVklERU8sCisJICAuYkludGVyZmFjZVN1YkNsYXNzCT0gMSwKKwkgIC5iSW50ZXJmYWNlUHJvdG9jb2wJPSAwLAorCSAgLmRyaXZlcl9pbmZvCQk9IFVWQ19RVUlSS19QUk9CRV9NSU5NQVggfSwKIAkvKiBCaXNvbiBFbGVjdHJvbmljcyAqLwogCXsgLm1hdGNoX2ZsYWdzCQk9IFVTQl9ERVZJQ0VfSURfTUFUQ0hfREVWSUNFCiAJCQkJfCBVU0JfREVWSUNFX0lEX01BVENIX0lOVF9JTkZPLApAQCAtMTk1Miw2ICsxOTk4LDcgQEAKIAkJLmRpc2Nvbm5lY3QJPSB1dmNfZGlzY29ubmVjdCwKIAkJLnN1c3BlbmQJPSB1dmNfc3VzcGVuZCwKIAkJLnJlc3VtZQkJPSB1dmNfcmVzdW1lLAorCQkucmVzZXRfcmVzdW1lCT0gdXZjX3Jlc2V0X3Jlc3VtZSwKIAkJLmlkX3RhYmxlCT0gdXZjX2lkcywKIAkJLnN1cHBvcnRzX2F1dG9zdXNwZW5kID0gMSwKIAl9LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby91dmMvdXZjX3N0YXR1cy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby91dmMvdXZjX3N0YXR1cy5jCmluZGV4IDc1ZTY3OGEuLjVkNjBiMjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXZjL3V2Y19zdGF0dXMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3V2Yy91dmNfc3RhdHVzLmMKQEAgLTE3NywxMCArMTc3LDE2IEBACiAKIAl1dmNfaW5wdXRfaW5pdChkZXYpOwogCi0JZGV2LT5pbnRfdXJiID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfS0VSTkVMKTsKLQlpZiAoZGV2LT5pbnRfdXJiID09IE5VTEwpCisJZGV2LT5zdGF0dXMgPSBremFsbG9jKFVWQ19NQVhfU1RBVFVTX1NJWkUsIEdGUF9LRVJORUwpOworCWlmIChkZXYtPnN0YXR1cyA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKIAorCWRldi0+aW50X3VyYiA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0tFUk5FTCk7CisJaWYgKGRldi0+aW50X3VyYiA9PSBOVUxMKSB7CisJCWtmcmVlKGRldi0+c3RhdHVzKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCiAJcGlwZSA9IHVzYl9yY3ZpbnRwaXBlKGRldi0+dWRldiwgZXAtPmRlc2MuYkVuZHBvaW50QWRkcmVzcyk7CiAKIAkvKiBGb3IgaGlnaC1zcGVlZCBpbnRlcnJ1cHQgZW5kcG9pbnRzLCB0aGUgYkludGVydmFsIHZhbHVlIGlzIHVzZWQgYXMKQEAgLTE5Miw3ICsxOTgsNyBAQAogCQlpbnRlcnZhbCA9IGZscyhpbnRlcnZhbCkgLSAxOwogCiAJdXNiX2ZpbGxfaW50X3VyYihkZXYtPmludF91cmIsIGRldi0+dWRldiwgcGlwZSwKLQkJZGV2LT5zdGF0dXMsIHNpemVvZiBkZXYtPnN0YXR1cywgdXZjX3N0YXR1c19jb21wbGV0ZSwKKwkJZGV2LT5zdGF0dXMsIFVWQ19NQVhfU1RBVFVTX1NJWkUsIHV2Y19zdGF0dXNfY29tcGxldGUsCiAJCWRldiwgaW50ZXJ2YWwpOwogCiAJcmV0dXJuIHVzYl9zdWJtaXRfdXJiKGRldi0+aW50X3VyYiwgR0ZQX0tFUk5FTCk7CkBAIC0yMDIsNiArMjA4LDcgQEAKIHsKIAl1c2Jfa2lsbF91cmIoZGV2LT5pbnRfdXJiKTsKIAl1c2JfZnJlZV91cmIoZGV2LT5pbnRfdXJiKTsKKwlrZnJlZShkZXYtPnN0YXR1cyk7CiAJdXZjX2lucHV0X2NsZWFudXAoZGV2KTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby91dmMvdXZjX3Y0bDIuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXZjL3V2Y192NGwyLmMKaW5kZXggZDdiZDcxYi4uNzhlNGM0ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby91dmMvdXZjX3Y0bDIuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3V2Yy91dmNfdjRsMi5jCkBAIC00MDAsMTUgKzQwMCwxMyBAQAogCiBzdGF0aWMgaW50IHV2Y192NGwyX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCiB7Ci0Jc3RydWN0IHZpZGVvX2RldmljZSAqdmRldjsKIAlzdHJ1Y3QgdXZjX3ZpZGVvX2RldmljZSAqdmlkZW87CiAJc3RydWN0IHV2Y19maCAqaGFuZGxlOwogCWludCByZXQgPSAwOwogCiAJdXZjX3RyYWNlKFVWQ19UUkFDRV9DQUxMUywgInV2Y192NGwyX29wZW5cbiIpOwogCW11dGV4X2xvY2soJnV2Y19kcml2ZXIub3Blbl9tdXRleCk7Ci0JdmRldiA9IHZpZGVvX2RldmRhdGEoZmlsZSk7Ci0JdmlkZW8gPSB2aWRlb19nZXRfZHJ2ZGF0YSh2ZGV2KTsKKwl2aWRlbyA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CiAKIAlpZiAodmlkZW8tPmRldi0+c3RhdGUgJiBVVkNfREVWX0RJU0NPTk5FQ1RFRCkgewogCQlyZXQgPSAtRU5PREVWOwpAQCAtNDQwLDggKzQzOCw3IEBACiAKIHN0YXRpYyBpbnQgdXZjX3Y0bDJfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKLQlzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2ZGV2ID0gdmlkZW9fZGV2ZGF0YShmaWxlKTsKLQlzdHJ1Y3QgdXZjX3ZpZGVvX2RldmljZSAqdmlkZW8gPSB2aWRlb19nZXRfZHJ2ZGF0YSh2ZGV2KTsKKwlzdHJ1Y3QgdXZjX3ZpZGVvX2RldmljZSAqdmlkZW8gPSB2aWRlb19kcnZkYXRhKGZpbGUpOwogCXN0cnVjdCB1dmNfZmggKmhhbmRsZSA9IChzdHJ1Y3QgdXZjX2ZoICopZmlsZS0+cHJpdmF0ZV9kYXRhOwogCiAJdXZjX3RyYWNlKFVWQ19UUkFDRV9DQUxMUywgInV2Y192NGwyX3JlbGVhc2VcbiIpOwpAQCAtODQ1LDEwICs4NDIsNiBAQAogCQlpZiAocmV0IDwgMCkKIAkJCXJldHVybiByZXQ7CiAKLQkJaWYgKCEodmlkZW8tPnN0cmVhbWluZy0+Y3VyX2Zvcm1hdC0+ZmxhZ3MgJgotCQkgICAgVVZDX0ZNVF9GTEFHX0NPTVBSRVNTRUQpKQotCQkJdmlkZW8tPnF1ZXVlLmZsYWdzIHw9IFVWQ19RVUVVRV9EUk9QX0lOQ09NUExFVEU7Ci0KIAkJcmItPmNvdW50ID0gcmV0OwogCQlyZXQgPSAwOwogCQlicmVhazsKQEAgLTEwMzEsOCArMTAyNCw3IEBACiAKIHN0YXRpYyBpbnQgdXZjX3Y0bDJfbW1hcChzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCiB7Ci0Jc3RydWN0IHZpZGVvX2RldmljZSAqdmRldiA9IHZpZGVvX2RldmRhdGEoZmlsZSk7Ci0Jc3RydWN0IHV2Y192aWRlb19kZXZpY2UgKnZpZGVvID0gdmlkZW9fZ2V0X2RydmRhdGEodmRldik7CisJc3RydWN0IHV2Y192aWRlb19kZXZpY2UgKnZpZGVvID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKIAlzdHJ1Y3QgdXZjX2J1ZmZlciAqdW5pbml0aWFsaXplZF92YXIoYnVmZmVyKTsKIAlzdHJ1Y3QgcGFnZSAqcGFnZTsKIAl1bnNpZ25lZCBsb25nIGFkZHIsIHN0YXJ0LCBzaXplOwpAQCAtMTA4NSw4ICsxMDc3LDcgQEAKIAogc3RhdGljIHVuc2lnbmVkIGludCB1dmNfdjRsMl9wb2xsKHN0cnVjdCBmaWxlICpmaWxlLCBwb2xsX3RhYmxlICp3YWl0KQogewotCXN0cnVjdCB2aWRlb19kZXZpY2UgKnZkZXYgPSB2aWRlb19kZXZkYXRhKGZpbGUpOwotCXN0cnVjdCB1dmNfdmlkZW9fZGV2aWNlICp2aWRlbyA9IHZpZGVvX2dldF9kcnZkYXRhKHZkZXYpOworCXN0cnVjdCB1dmNfdmlkZW9fZGV2aWNlICp2aWRlbyA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CiAKIAl1dmNfdHJhY2UoVVZDX1RSQUNFX0NBTExTLCAidXZjX3Y0bDJfcG9sbFxuIik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXZjL3V2Y192aWRlby5jIGIvZHJpdmVycy9tZWRpYS92aWRlby91dmMvdXZjX3ZpZGVvLmMKaW5kZXggNjg1NGFjNy4uYjdiYjIzOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby91dmMvdXZjX3ZpZGVvLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby91dmMvdXZjX3ZpZGVvLmMKQEAgLTQ1NSw3ICs0NTUsOCBAQAogCQkJdXJiLT5pc29fZnJhbWVfZGVzY1tpXS5hY3R1YWxfbGVuZ3RoIC0gcmV0KTsKIAogCQkvKiBQcm9jZXNzIHRoZSBoZWFkZXIgYWdhaW4uICovCi0JCXV2Y192aWRlb19kZWNvZGVfZW5kKHZpZGVvLCBidWYsIG1lbSwgcmV0KTsKKwkJdXZjX3ZpZGVvX2RlY29kZV9lbmQodmlkZW8sIGJ1ZiwgbWVtLAorCQkJdXJiLT5pc29fZnJhbWVfZGVzY1tpXS5hY3R1YWxfbGVuZ3RoKTsKIAogCQlpZiAoYnVmLT5zdGF0ZSA9PSBVVkNfQlVGX1NUQVRFX0RPTkUgfHwKIAkJICAgIGJ1Zi0+c3RhdGUgPT0gVVZDX0JVRl9TVEFURV9FUlJPUikKQEAgLTUxMiw3ICs1MTMsNyBAQAogCSAgICB2aWRlby0+YnVsay5wYXlsb2FkX3NpemUgPj0gdmlkZW8tPmJ1bGsubWF4X3BheWxvYWRfc2l6ZSkgewogCQlpZiAoIXZpZGVvLT5idWxrLnNraXBfcGF5bG9hZCAmJiBidWYgIT0gTlVMTCkgewogCQkJdXZjX3ZpZGVvX2RlY29kZV9lbmQodmlkZW8sIGJ1ZiwgdmlkZW8tPmJ1bGsuaGVhZGVyLAotCQkJCXZpZGVvLT5idWxrLmhlYWRlcl9zaXplKTsKKwkJCQl2aWRlby0+YnVsay5wYXlsb2FkX3NpemUpOwogCQkJaWYgKGJ1Zi0+c3RhdGUgPT0gVVZDX0JVRl9TVEFURV9ET05FIHx8CiAJCQkgICAgYnVmLT5zdGF0ZSA9PSBVVkNfQlVGX1NUQVRFX0VSUk9SKQogCQkJCWJ1ZiA9IHV2Y19xdWV1ZV9uZXh0X2J1ZmZlcigmdmlkZW8tPnF1ZXVlLCBidWYpOwpAQCAtNjU1LDcgKzY1Niw3IEBACiAJaWYgKHNpemUgPiBVVkNfTUFYX0ZSQU1FX1NJWkUpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JbnBhY2tldHMgPSAoc2l6ZSArIHBzaXplIC0gMSkgLyBwc2l6ZTsKKwlucGFja2V0cyA9IERJVl9ST1VORF9VUChzaXplLCBwc2l6ZSk7CiAJaWYgKG5wYWNrZXRzID4gVVZDX01BWF9JU09fUEFDS0VUUykKIAkJbnBhY2tldHMgPSBVVkNfTUFYX0lTT19QQUNLRVRTOwogCkBAIC05NzAsNiArOTcxLDExIEBACiAJCXJldHVybiAwOwogCX0KIAorCWlmICh2aWRlby0+c3RyZWFtaW5nLT5jdXJfZm9ybWF0LT5mbGFncyAmIFVWQ19GTVRfRkxBR19DT01QUkVTU0VEKQorCQl2aWRlby0+cXVldWUuZmxhZ3MgJj0gflVWQ19RVUVVRV9EUk9QX0lOQ09NUExFVEU7CisJZWxzZQorCQl2aWRlby0+cXVldWUuZmxhZ3MgfD0gVVZDX1FVRVVFX0RST1BfSU5DT01QTEVURTsKKwogCWlmICgocmV0ID0gdXZjX3F1ZXVlX2VuYWJsZSgmdmlkZW8tPnF1ZXVlLCAxKSkgPCAwKQogCQlyZXR1cm4gcmV0OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3V2Yy91dmN2aWRlby5oIGIvZHJpdmVycy9tZWRpYS92aWRlby91dmMvdXZjdmlkZW8uaAppbmRleCBiYWZlMzQwLi45YTZiYzFhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3V2Yy91dmN2aWRlby5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXZjL3V2Y3ZpZGVvLmgKQEAgLTMwMyw2ICszMDMsOCBAQAogI2RlZmluZSBVVkNfTUFYX0ZSQU1FX1NJWkUJKDE2KjEwMjQqMTAyNCkKIC8qIE1heGltdW0gbnVtYmVyIG9mIHZpZGVvIGJ1ZmZlcnMuICovCiAjZGVmaW5lIFVWQ19NQVhfVklERU9fQlVGRkVSUwkzMgorLyogTWF4aW11bSBzdGF0dXMgYnVmZmVyIHNpemUgaW4gYnl0ZXMgb2YgaW50ZXJydXB0IFVSQi4gKi8KKyNkZWZpbmUgVVZDX01BWF9TVEFUVVNfU0laRQkxNgogCiAjZGVmaW5lIFVWQ19DVFJMX0NPTlRST0xfVElNRU9VVAkzMDAKICNkZWZpbmUgVVZDX0NUUkxfU1RSRUFNSU5HX1RJTUVPVVQJMTAwMApAQCAtNjM0LDcgKzYzNiw3IEBACiAJLyogU3RhdHVzIEludGVycnVwdCBFbmRwb2ludCAqLwogCXN0cnVjdCB1c2JfaG9zdF9lbmRwb2ludCAqaW50X2VwOwogCXN0cnVjdCB1cmIgKmludF91cmI7Ci0JX191OCBzdGF0dXNbMTZdOworCV9fdTggKnN0YXR1czsKIAlzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dDsKIAogCS8qIFZpZGVvIFN0cmVhbWluZyBpbnRlcmZhY2VzICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3Y0bDEtY29tcGF0LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3Y0bDEtY29tcGF0LmMKaW5kZXggNzk5MzdkMS4uOTI4Y2I0MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby92NGwxLWNvbXBhdC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdjRsMS1jb21wYXQuYwpAQCAtMzYsMTAgKzM2LDYgQEAKICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KIAotI2lmZGVmIENPTkZJR19LTU9ECi0jaW5jbHVkZSA8bGludXgva21vZC5oPgotI2VuZGlmCi0KIHN0YXRpYyB1bnNpZ25lZCBpbnQgZGVidWc7CiBtb2R1bGVfcGFyYW0oZGVidWcsIGludCwgMDY0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiZW5hYmxlIGRlYnVnIG1lc3NhZ2VzIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3Y0bDItY29tbW9uLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3Y0bDItY29tbW9uLmMKaW5kZXggODhjYTEzMS4uODQ2NzYzZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby92NGwyLWNvbW1vbi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdjRsMi1jb21tb24uYwpAQCAtNjAsMTAgKzYwLDYgQEAKICNpbmNsdWRlIDxtZWRpYS92NGwyLWNvbW1vbi5oPgogI2luY2x1ZGUgPG1lZGlhL3Y0bDItY2hpcC1pZGVudC5oPgogCi0jaWZkZWYgQ09ORklHX0tNT0QKLSNpbmNsdWRlIDxsaW51eC9rbW9kLmg+Ci0jZW5kaWYKLQogI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Mi5oPgogCiBNT0RVTEVfQVVUSE9SKCJCaWxsIERpcmtzLCBKdXN0aW4gU2Nob2VtYW4sIEdlcmQgS25vcnIiKTsKQEAgLTE4Nyw5ICsxODMsMTEgQEAKIAkJTlVMTAogCX07CiAJc3RhdGljIGNvbnN0IGNoYXIgKm1wZWdfYXVkaW9fZW5jb2RpbmdbXSA9IHsKLQkJIkxheWVyIEkiLAotCQkiTGF5ZXIgSUkiLAotCQkiTGF5ZXIgSUlJIiwKKwkJIk1QRUctMS8yIExheWVyIEkiLAorCQkiTVBFRy0xLzIgTGF5ZXIgSUkiLAorCQkiTVBFRy0xLzIgTGF5ZXIgSUlJIiwKKwkJIk1QRUctMi80IEFBQyIsCisJCSJBQy0zIiwKIAkJTlVMTAogCX07CiAJc3RhdGljIGNvbnN0IGNoYXIgKm1wZWdfYXVkaW9fbDFfYml0cmF0ZVtdID0gewpAQCAtMjQzLDYgKzI0MSwyOCBAQAogCQkiMzIwIGticHMiLAogCQlOVUxMCiAJfTsKKwlzdGF0aWMgY29uc3QgY2hhciAqbXBlZ19hdWRpb19hYzNfYml0cmF0ZVtdID0geworCQkiMzIga2JwcyIsCisJCSI0MCBrYnBzIiwKKwkJIjQ4IGticHMiLAorCQkiNTYga2JwcyIsCisJCSI2NCBrYnBzIiwKKwkJIjgwIGticHMiLAorCQkiOTYga2JwcyIsCisJCSIxMTIga2JwcyIsCisJCSIxMjgga2JwcyIsCisJCSIxNjAga2JwcyIsCisJCSIxOTIga2JwcyIsCisJCSIyMjQga2JwcyIsCisJCSIyNTYga2JwcyIsCisJCSIzMjAga2JwcyIsCisJCSIzODQga2JwcyIsCisJCSI0NDgga2JwcyIsCisJCSI1MTIga2JwcyIsCisJCSI1NzYga2JwcyIsCisJCSI2NDAga2JwcyIsCisJCU5VTEwKKwl9OwogCXN0YXRpYyBjb25zdCBjaGFyICptcGVnX2F1ZGlvX21vZGVbXSA9IHsKIAkJIlN0ZXJlbyIsCiAJCSJKb2ludCBTdGVyZW8iLApAQCAtMjcxLDYgKzI5MSw3IEBACiAJc3RhdGljIGNvbnN0IGNoYXIgKm1wZWdfdmlkZW9fZW5jb2RpbmdbXSA9IHsKIAkJIk1QRUctMSIsCiAJCSJNUEVHLTIiLAorCQkiTVBFRy00IEFWQyIsCiAJCU5VTEwKIAl9OwogCXN0YXRpYyBjb25zdCBjaGFyICptcGVnX3ZpZGVvX2FzcGVjdFtdID0gewpAQCAtMzExLDYgKzMzMiw4IEBACiAJCQlyZXR1cm4gbXBlZ19hdWRpb19sMl9iaXRyYXRlOwogCQljYXNlIFY0TDJfQ0lEX01QRUdfQVVESU9fTDNfQklUUkFURToKIAkJCXJldHVybiBtcGVnX2F1ZGlvX2wzX2JpdHJhdGU7CisJCWNhc2UgVjRMMl9DSURfTVBFR19BVURJT19BQzNfQklUUkFURToKKwkJCXJldHVybiBtcGVnX2F1ZGlvX2FjM19iaXRyYXRlOwogCQljYXNlIFY0TDJfQ0lEX01QRUdfQVVESU9fTU9ERToKIAkJCXJldHVybiBtcGVnX2F1ZGlvX21vZGU7CiAJCWNhc2UgVjRMMl9DSURfTVBFR19BVURJT19NT0RFX0VYVEVOU0lPTjoKQEAgLTMzNSw2MiArMzU4LDczIEBACiB9CiBFWFBPUlRfU1lNQk9MKHY0bDJfY3RybF9nZXRfbWVudSk7CiAKKy8qIFJldHVybiB0aGUgY29udHJvbCBuYW1lLiAqLworY29uc3QgY2hhciAqdjRsMl9jdHJsX2dldF9uYW1lKHUzMiBpZCkKK3sKKwlzd2l0Y2ggKGlkKSB7CisJLyogVVNFUiBjb250cm9scyAqLworCWNhc2UgVjRMMl9DSURfVVNFUl9DTEFTUzogCXJldHVybiAiVXNlciBDb250cm9scyI7CisJY2FzZSBWNEwyX0NJRF9BVURJT19WT0xVTUU6IAlyZXR1cm4gIlZvbHVtZSI7CisJY2FzZSBWNEwyX0NJRF9BVURJT19NVVRFOiAJcmV0dXJuICJNdXRlIjsKKwljYXNlIFY0TDJfQ0lEX0FVRElPX0JBTEFOQ0U6IAlyZXR1cm4gIkJhbGFuY2UiOworCWNhc2UgVjRMMl9DSURfQVVESU9fQkFTUzogCXJldHVybiAiQmFzcyI7CisJY2FzZSBWNEwyX0NJRF9BVURJT19UUkVCTEU6IAlyZXR1cm4gIlRyZWJsZSI7CisJY2FzZSBWNEwyX0NJRF9BVURJT19MT1VETkVTUzogCXJldHVybiAiTG91ZG5lc3MiOworCWNhc2UgVjRMMl9DSURfQlJJR0hUTkVTUzogCXJldHVybiAiQnJpZ2h0bmVzcyI7CisJY2FzZSBWNEwyX0NJRF9DT05UUkFTVDogCXJldHVybiAiQ29udHJhc3QiOworCWNhc2UgVjRMMl9DSURfU0FUVVJBVElPTjogCXJldHVybiAiU2F0dXJhdGlvbiI7CisJY2FzZSBWNEwyX0NJRF9IVUU6IAkJcmV0dXJuICJIdWUiOworCisJLyogTVBFRyBjb250cm9scyAqLworCWNhc2UgVjRMMl9DSURfTVBFR19DTEFTUzogCQlyZXR1cm4gIk1QRUcgRW5jb2RlciBDb250cm9scyI7CisJY2FzZSBWNEwyX0NJRF9NUEVHX0FVRElPX1NBTVBMSU5HX0ZSRVE6IHJldHVybiAiQXVkaW8gU2FtcGxpbmcgRnJlcXVlbmN5IjsKKwljYXNlIFY0TDJfQ0lEX01QRUdfQVVESU9fRU5DT0RJTkc6IAlyZXR1cm4gIkF1ZGlvIEVuY29kaW5nIjsKKwljYXNlIFY0TDJfQ0lEX01QRUdfQVVESU9fTDFfQklUUkFURTogCXJldHVybiAiQXVkaW8gTGF5ZXIgSSBCaXRyYXRlIjsKKwljYXNlIFY0TDJfQ0lEX01QRUdfQVVESU9fTDJfQklUUkFURTogCXJldHVybiAiQXVkaW8gTGF5ZXIgSUkgQml0cmF0ZSI7CisJY2FzZSBWNEwyX0NJRF9NUEVHX0FVRElPX0wzX0JJVFJBVEU6IAlyZXR1cm4gIkF1ZGlvIExheWVyIElJSSBCaXRyYXRlIjsKKwljYXNlIFY0TDJfQ0lEX01QRUdfQVVESU9fQUFDX0JJVFJBVEU6IAlyZXR1cm4gIkF1ZGlvIEFBQyBCaXRyYXRlIjsKKwljYXNlIFY0TDJfQ0lEX01QRUdfQVVESU9fQUMzX0JJVFJBVEU6IAlyZXR1cm4gIkF1ZGlvIEFDLTMgQml0cmF0ZSI7CisJY2FzZSBWNEwyX0NJRF9NUEVHX0FVRElPX01PREU6IAkJcmV0dXJuICJBdWRpbyBTdGVyZW8gTW9kZSI7CisJY2FzZSBWNEwyX0NJRF9NUEVHX0FVRElPX01PREVfRVhURU5TSU9OOiByZXR1cm4gIkF1ZGlvIFN0ZXJlbyBNb2RlIEV4dGVuc2lvbiI7CisJY2FzZSBWNEwyX0NJRF9NUEVHX0FVRElPX0VNUEhBU0lTOiAJcmV0dXJuICJBdWRpbyBFbXBoYXNpcyI7CisJY2FzZSBWNEwyX0NJRF9NUEVHX0FVRElPX0NSQzogCQlyZXR1cm4gIkF1ZGlvIENSQyI7CisJY2FzZSBWNEwyX0NJRF9NUEVHX0FVRElPX01VVEU6IAkJcmV0dXJuICJBdWRpbyBNdXRlIjsKKwljYXNlIFY0TDJfQ0lEX01QRUdfVklERU9fRU5DT0RJTkc6IAlyZXR1cm4gIlZpZGVvIEVuY29kaW5nIjsKKwljYXNlIFY0TDJfQ0lEX01QRUdfVklERU9fQVNQRUNUOiAJcmV0dXJuICJWaWRlbyBBc3BlY3QiOworCWNhc2UgVjRMMl9DSURfTVBFR19WSURFT19CX0ZSQU1FUzogCXJldHVybiAiVmlkZW8gQiBGcmFtZXMiOworCWNhc2UgVjRMMl9DSURfTVBFR19WSURFT19HT1BfU0laRTogCXJldHVybiAiVmlkZW8gR09QIFNpemUiOworCWNhc2UgVjRMMl9DSURfTVBFR19WSURFT19HT1BfQ0xPU1VSRTogCXJldHVybiAiVmlkZW8gR09QIENsb3N1cmUiOworCWNhc2UgVjRMMl9DSURfTVBFR19WSURFT19QVUxMRE9XTjogCXJldHVybiAiVmlkZW8gUHVsbGRvd24iOworCWNhc2UgVjRMMl9DSURfTVBFR19WSURFT19CSVRSQVRFX01PREU6IAlyZXR1cm4gIlZpZGVvIEJpdHJhdGUgTW9kZSI7CisJY2FzZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0JJVFJBVEU6IAlyZXR1cm4gIlZpZGVvIEJpdHJhdGUiOworCWNhc2UgVjRMMl9DSURfTVBFR19WSURFT19CSVRSQVRFX1BFQUs6IAlyZXR1cm4gIlZpZGVvIFBlYWsgQml0cmF0ZSI7CisJY2FzZSBWNEwyX0NJRF9NUEVHX1ZJREVPX1RFTVBPUkFMX0RFQ0lNQVRJT046IHJldHVybiAiVmlkZW8gVGVtcG9yYWwgRGVjaW1hdGlvbiI7CisJY2FzZSBWNEwyX0NJRF9NUEVHX1ZJREVPX01VVEU6IAkJcmV0dXJuICJWaWRlbyBNdXRlIjsKKwljYXNlIFY0TDJfQ0lEX01QRUdfVklERU9fTVVURV9ZVVY6CXJldHVybiAiVmlkZW8gTXV0ZSBZVVYiOworCWNhc2UgVjRMMl9DSURfTVBFR19TVFJFQU1fVFlQRTogCXJldHVybiAiU3RyZWFtIFR5cGUiOworCWNhc2UgVjRMMl9DSURfTVBFR19TVFJFQU1fUElEX1BNVDogCXJldHVybiAiU3RyZWFtIFBNVCBQcm9ncmFtIElEIjsKKwljYXNlIFY0TDJfQ0lEX01QRUdfU1RSRUFNX1BJRF9BVURJTzogCXJldHVybiAiU3RyZWFtIEF1ZGlvIFByb2dyYW0gSUQiOworCWNhc2UgVjRMMl9DSURfTVBFR19TVFJFQU1fUElEX1ZJREVPOiAJcmV0dXJuICJTdHJlYW0gVmlkZW8gUHJvZ3JhbSBJRCI7CisJY2FzZSBWNEwyX0NJRF9NUEVHX1NUUkVBTV9QSURfUENSOiAJcmV0dXJuICJTdHJlYW0gUENSIFByb2dyYW0gSUQiOworCWNhc2UgVjRMMl9DSURfTVBFR19TVFJFQU1fUEVTX0lEX0FVRElPOiByZXR1cm4gIlN0cmVhbSBQRVMgQXVkaW8gSUQiOworCWNhc2UgVjRMMl9DSURfTVBFR19TVFJFQU1fUEVTX0lEX1ZJREVPOiByZXR1cm4gIlN0cmVhbSBQRVMgVmlkZW8gSUQiOworCWNhc2UgVjRMMl9DSURfTVBFR19TVFJFQU1fVkJJX0ZNVDoJcmV0dXJuICJTdHJlYW0gVkJJIEZvcm1hdCI7CisKKwlkZWZhdWx0OgorCQlyZXR1cm4gTlVMTDsKKwl9Cit9CitFWFBPUlRfU1lNQk9MKHY0bDJfY3RybF9nZXRfbmFtZSk7CisKIC8qIEZpbGwgaW4gYSBzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgKi8KIGludCB2NGwyX2N0cmxfcXVlcnlfZmlsbChzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgKnFjdHJsLCBzMzIgbWluLCBzMzIgbWF4LCBzMzIgc3RlcCwgczMyIGRlZikKIHsKLQljb25zdCBjaGFyICpuYW1lOworCWNvbnN0IGNoYXIgKm5hbWUgPSB2NGwyX2N0cmxfZ2V0X25hbWUocWN0cmwtPmlkKTsKIAogCXFjdHJsLT5mbGFncyA9IDA7Ci0Jc3dpdGNoIChxY3RybC0+aWQpIHsKLQkvKiBVU0VSIGNvbnRyb2xzICovCi0JY2FzZSBWNEwyX0NJRF9VU0VSX0NMQVNTOiAJbmFtZSA9ICJVc2VyIENvbnRyb2xzIjsgYnJlYWs7Ci0JY2FzZSBWNEwyX0NJRF9BVURJT19WT0xVTUU6IAluYW1lID0gIlZvbHVtZSI7IGJyZWFrOwotCWNhc2UgVjRMMl9DSURfQVVESU9fTVVURTogCW5hbWUgPSAiTXV0ZSI7IGJyZWFrOwotCWNhc2UgVjRMMl9DSURfQVVESU9fQkFMQU5DRTogCW5hbWUgPSAiQmFsYW5jZSI7IGJyZWFrOwotCWNhc2UgVjRMMl9DSURfQVVESU9fQkFTUzogCW5hbWUgPSAiQmFzcyI7IGJyZWFrOwotCWNhc2UgVjRMMl9DSURfQVVESU9fVFJFQkxFOiAJbmFtZSA9ICJUcmVibGUiOyBicmVhazsKLQljYXNlIFY0TDJfQ0lEX0FVRElPX0xPVURORVNTOiAJbmFtZSA9ICJMb3VkbmVzcyI7IGJyZWFrOwotCWNhc2UgVjRMMl9DSURfQlJJR0hUTkVTUzogCW5hbWUgPSAiQnJpZ2h0bmVzcyI7IGJyZWFrOwotCWNhc2UgVjRMMl9DSURfQ09OVFJBU1Q6IAluYW1lID0gIkNvbnRyYXN0IjsgYnJlYWs7Ci0JY2FzZSBWNEwyX0NJRF9TQVRVUkFUSU9OOiAJbmFtZSA9ICJTYXR1cmF0aW9uIjsgYnJlYWs7Ci0JY2FzZSBWNEwyX0NJRF9IVUU6IAkJbmFtZSA9ICJIdWUiOyBicmVhazsKLQotCS8qIE1QRUcgY29udHJvbHMgKi8KLQljYXNlIFY0TDJfQ0lEX01QRUdfQ0xBU1M6IAkJbmFtZSA9ICJNUEVHIEVuY29kZXIgQ29udHJvbHMiOyBicmVhazsKLQljYXNlIFY0TDJfQ0lEX01QRUdfQVVESU9fU0FNUExJTkdfRlJFUTogbmFtZSA9ICJBdWRpbyBTYW1wbGluZyBGcmVxdWVuY3kiOyBicmVhazsKLQljYXNlIFY0TDJfQ0lEX01QRUdfQVVESU9fRU5DT0RJTkc6IAluYW1lID0gIkF1ZGlvIEVuY29kaW5nIExheWVyIjsgYnJlYWs7Ci0JY2FzZSBWNEwyX0NJRF9NUEVHX0FVRElPX0wxX0JJVFJBVEU6IAluYW1lID0gIkF1ZGlvIExheWVyIEkgQml0cmF0ZSI7IGJyZWFrOwotCWNhc2UgVjRMMl9DSURfTVBFR19BVURJT19MMl9CSVRSQVRFOiAJbmFtZSA9ICJBdWRpbyBMYXllciBJSSBCaXRyYXRlIjsgYnJlYWs7Ci0JY2FzZSBWNEwyX0NJRF9NUEVHX0FVRElPX0wzX0JJVFJBVEU6IAluYW1lID0gIkF1ZGlvIExheWVyIElJSSBCaXRyYXRlIjsgYnJlYWs7Ci0JY2FzZSBWNEwyX0NJRF9NUEVHX0FVRElPX01PREU6IAkJbmFtZSA9ICJBdWRpbyBTdGVyZW8gTW9kZSI7IGJyZWFrOwotCWNhc2UgVjRMMl9DSURfTVBFR19BVURJT19NT0RFX0VYVEVOU0lPTjogbmFtZSA9ICJBdWRpbyBTdGVyZW8gTW9kZSBFeHRlbnNpb24iOyBicmVhazsKLQljYXNlIFY0TDJfQ0lEX01QRUdfQVVESU9fRU1QSEFTSVM6IAluYW1lID0gIkF1ZGlvIEVtcGhhc2lzIjsgYnJlYWs7Ci0JY2FzZSBWNEwyX0NJRF9NUEVHX0FVRElPX0NSQzogCQluYW1lID0gIkF1ZGlvIENSQyI7IGJyZWFrOwotCWNhc2UgVjRMMl9DSURfTVBFR19BVURJT19NVVRFOiAJCW5hbWUgPSAiQXVkaW8gTXV0ZSI7IGJyZWFrOwotCWNhc2UgVjRMMl9DSURfTVBFR19WSURFT19FTkNPRElORzogCW5hbWUgPSAiVmlkZW8gRW5jb2RpbmciOyBicmVhazsKLQljYXNlIFY0TDJfQ0lEX01QRUdfVklERU9fQVNQRUNUOiAJbmFtZSA9ICJWaWRlbyBBc3BlY3QiOyBicmVhazsKLQljYXNlIFY0TDJfQ0lEX01QRUdfVklERU9fQl9GUkFNRVM6IAluYW1lID0gIlZpZGVvIEIgRnJhbWVzIjsgYnJlYWs7Ci0JY2FzZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0dPUF9TSVpFOiAJbmFtZSA9ICJWaWRlbyBHT1AgU2l6ZSI7IGJyZWFrOwotCWNhc2UgVjRMMl9DSURfTVBFR19WSURFT19HT1BfQ0xPU1VSRTogCW5hbWUgPSAiVmlkZW8gR09QIENsb3N1cmUiOyBicmVhazsKLQljYXNlIFY0TDJfQ0lEX01QRUdfVklERU9fUFVMTERPV046IAluYW1lID0gIlZpZGVvIFB1bGxkb3duIjsgYnJlYWs7Ci0JY2FzZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0JJVFJBVEVfTU9ERTogCW5hbWUgPSAiVmlkZW8gQml0cmF0ZSBNb2RlIjsgYnJlYWs7Ci0JY2FzZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0JJVFJBVEU6IAluYW1lID0gIlZpZGVvIEJpdHJhdGUiOyBicmVhazsKLQljYXNlIFY0TDJfQ0lEX01QRUdfVklERU9fQklUUkFURV9QRUFLOiAJbmFtZSA9ICJWaWRlbyBQZWFrIEJpdHJhdGUiOyBicmVhazsKLQljYXNlIFY0TDJfQ0lEX01QRUdfVklERU9fVEVNUE9SQUxfREVDSU1BVElPTjogbmFtZSA9ICJWaWRlbyBUZW1wb3JhbCBEZWNpbWF0aW9uIjsgYnJlYWs7Ci0JY2FzZSBWNEwyX0NJRF9NUEVHX1ZJREVPX01VVEU6IAkJbmFtZSA9ICJWaWRlbyBNdXRlIjsgYnJlYWs7Ci0JY2FzZSBWNEwyX0NJRF9NUEVHX1ZJREVPX01VVEVfWVVWOgluYW1lID0gIlZpZGVvIE11dGUgWVVWIjsgYnJlYWs7Ci0JY2FzZSBWNEwyX0NJRF9NUEVHX1NUUkVBTV9UWVBFOiAJbmFtZSA9ICJTdHJlYW0gVHlwZSI7IGJyZWFrOwotCWNhc2UgVjRMMl9DSURfTVBFR19TVFJFQU1fUElEX1BNVDogCW5hbWUgPSAiU3RyZWFtIFBNVCBQcm9ncmFtIElEIjsgYnJlYWs7Ci0JY2FzZSBWNEwyX0NJRF9NUEVHX1NUUkVBTV9QSURfQVVESU86IAluYW1lID0gIlN0cmVhbSBBdWRpbyBQcm9ncmFtIElEIjsgYnJlYWs7Ci0JY2FzZSBWNEwyX0NJRF9NUEVHX1NUUkVBTV9QSURfVklERU86IAluYW1lID0gIlN0cmVhbSBWaWRlbyBQcm9ncmFtIElEIjsgYnJlYWs7Ci0JY2FzZSBWNEwyX0NJRF9NUEVHX1NUUkVBTV9QSURfUENSOiAJbmFtZSA9ICJTdHJlYW0gUENSIFByb2dyYW0gSUQiOyBicmVhazsKLQljYXNlIFY0TDJfQ0lEX01QRUdfU1RSRUFNX1BFU19JRF9BVURJTzogbmFtZSA9ICJTdHJlYW0gUEVTIEF1ZGlvIElEIjsgYnJlYWs7Ci0JY2FzZSBWNEwyX0NJRF9NUEVHX1NUUkVBTV9QRVNfSURfVklERU86IG5hbWUgPSAiU3RyZWFtIFBFUyBWaWRlbyBJRCI7IGJyZWFrOwotCWNhc2UgVjRMMl9DSURfTVBFR19TVFJFQU1fVkJJX0ZNVDoJbmFtZSA9ICJTdHJlYW0gVkJJIEZvcm1hdCI7IGJyZWFrOwotCi0JZGVmYXVsdDoKKwlpZiAobmFtZSA9PSBOVUxMKQogCQlyZXR1cm4gLUVJTlZBTDsKLQl9CisKIAlzd2l0Y2ggKHFjdHJsLT5pZCkgewogCWNhc2UgVjRMMl9DSURfQVVESU9fTVVURToKIAljYXNlIFY0TDJfQ0lEX0FVRElPX0xPVURORVNTOgpAQCAtNDA3LDYgKzQ0MSw3IEBACiAJY2FzZSBWNEwyX0NJRF9NUEVHX0FVRElPX0wxX0JJVFJBVEU6CiAJY2FzZSBWNEwyX0NJRF9NUEVHX0FVRElPX0wyX0JJVFJBVEU6CiAJY2FzZSBWNEwyX0NJRF9NUEVHX0FVRElPX0wzX0JJVFJBVEU6CisJY2FzZSBWNEwyX0NJRF9NUEVHX0FVRElPX0FDM19CSVRSQVRFOgogCWNhc2UgVjRMMl9DSURfTVBFR19BVURJT19NT0RFOgogCWNhc2UgVjRMMl9DSURfTVBFR19BVURJT19NT0RFX0VYVEVOU0lPTjoKIAljYXNlIFY0TDJfQ0lEX01QRUdfQVVESU9fRU1QSEFTSVM6CkBAIC00OTMsNyArNTI4LDcgQEAKIAljYXNlIFY0TDJfQ0lEX01QRUdfQVVESU9fRU5DT0RJTkc6CiAJCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbChxY3RybCwKIAkJCQlWNEwyX01QRUdfQVVESU9fRU5DT0RJTkdfTEFZRVJfMSwKLQkJCQlWNEwyX01QRUdfQVVESU9fRU5DT0RJTkdfTEFZRVJfMywgMSwKKwkJCQlWNEwyX01QRUdfQVVESU9fRU5DT0RJTkdfQUMzLCAxLAogCQkJCVY0TDJfTVBFR19BVURJT19FTkNPRElOR19MQVlFUl8yKTsKIAljYXNlIFY0TDJfQ0lEX01QRUdfQVVESU9fTDFfQklUUkFURToKIAkJcmV0dXJuIHY0bDJfY3RybF9xdWVyeV9maWxsKHFjdHJsLApAQCAtNTEwLDYgKzU0NSwxMyBAQAogCQkJCVY0TDJfTVBFR19BVURJT19MM19CSVRSQVRFXzMySywKIAkJCQlWNEwyX01QRUdfQVVESU9fTDNfQklUUkFURV8zMjBLLCAxLAogCQkJCVY0TDJfTVBFR19BVURJT19MM19CSVRSQVRFXzE5MkspOworCWNhc2UgVjRMMl9DSURfTVBFR19BVURJT19BQUNfQklUUkFURToKKwkJcmV0dXJuIHY0bDJfY3RybF9xdWVyeV9maWxsKHFjdHJsLCAwLCA2NDAwLCAxLCAzMjAwMDAwKTsKKwljYXNlIFY0TDJfQ0lEX01QRUdfQVVESU9fQUMzX0JJVFJBVEU6CisJCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbChxY3RybCwKKwkJCQlWNEwyX01QRUdfQVVESU9fQUMzX0JJVFJBVEVfMzJLLAorCQkJCVY0TDJfTVBFR19BVURJT19BQzNfQklUUkFURV82NDBLLCAxLAorCQkJCVY0TDJfTVBFR19BVURJT19BQzNfQklUUkFURV8zODRLKTsKIAljYXNlIFY0TDJfQ0lEX01QRUdfQVVESU9fTU9ERToKIAkJcmV0dXJuIHY0bDJfY3RybF9xdWVyeV9maWxsKHFjdHJsLAogCQkJCVY0TDJfTVBFR19BVURJT19NT0RFX1NURVJFTywKQEAgLTUzNSw3ICs1NzcsNyBAQAogCWNhc2UgVjRMMl9DSURfTVBFR19WSURFT19FTkNPRElORzoKIAkJcmV0dXJuIHY0bDJfY3RybF9xdWVyeV9maWxsKHFjdHJsLAogCQkJCVY0TDJfTVBFR19WSURFT19FTkNPRElOR19NUEVHXzEsCi0JCQkJVjRMMl9NUEVHX1ZJREVPX0VOQ09ESU5HX01QRUdfMiwgMSwKKwkJCQlWNEwyX01QRUdfVklERU9fRU5DT0RJTkdfTVBFR180X0FWQywgMSwKIAkJCQlWNEwyX01QRUdfVklERU9fRU5DT0RJTkdfTVBFR18yKTsKIAljYXNlIFY0TDJfQ0lEX01QRUdfVklERU9fQVNQRUNUOgogCQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwocWN0cmwsCkBAIC01OTQsMTIgKzYzNiwxNyBAQAogRVhQT1JUX1NZTUJPTCh2NGwyX2N0cmxfcXVlcnlfZmlsbF9zdGQpOwogCiAvKiBGaWxsIGluIGEgc3RydWN0IHY0bDJfcXVlcnltZW51IGJhc2VkIG9uIHRoZSBzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgYW5kCi0gICB0aGUgbWVudS4gVGhlIHFjdHJsIHBvaW50ZXIgbWF5IGJlIE5VTEwsIGluIHdoaWNoIGNhc2UgaXQgaXMgaWdub3JlZC4gKi8KKyAgIHRoZSBtZW51LiBUaGUgcWN0cmwgcG9pbnRlciBtYXkgYmUgTlVMTCwgaW4gd2hpY2ggY2FzZSBpdCBpcyBpZ25vcmVkLgorICAgSWYgbWVudV9pdGVtcyBpcyBOVUxMLCB0aGVuIHRoZSBtZW51IGl0ZW1zIGFyZSByZXRyaWV2ZWQgdXNpbmcKKyAgIHY0bDJfY3RybF9nZXRfbWVudS4gKi8KIGludCB2NGwyX2N0cmxfcXVlcnlfbWVudShzdHJ1Y3QgdjRsMl9xdWVyeW1lbnUgKnFtZW51LCBzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgKnFjdHJsLAogCSAgICAgICBjb25zdCBjaGFyICoqbWVudV9pdGVtcykKIHsKIAlpbnQgaTsKIAorCXFtZW51LT5yZXNlcnZlZCA9IDA7CisJaWYgKG1lbnVfaXRlbXMgPT0gTlVMTCkKKwkJbWVudV9pdGVtcyA9IHY0bDJfY3RybF9nZXRfbWVudShxbWVudS0+aWQpOwogCWlmIChtZW51X2l0ZW1zID09IE5VTEwgfHwKIAkgICAgKHFjdHJsICYmIChxbWVudS0+aW5kZXggPCBxY3RybC0+bWluaW11bSB8fCBxbWVudS0+aW5kZXggPiBxY3RybC0+bWF4aW11bSkpKQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTYwNywxMSArNjU0LDMxIEBACiAJaWYgKG1lbnVfaXRlbXNbaV0gPT0gTlVMTCB8fCBtZW51X2l0ZW1zW2ldWzBdID09ICdcMCcpCiAJCXJldHVybiAtRUlOVkFMOwogCXNucHJpbnRmKHFtZW51LT5uYW1lLCBzaXplb2YocW1lbnUtPm5hbWUpLCBtZW51X2l0ZW1zW3FtZW51LT5pbmRleF0pOwotCXFtZW51LT5yZXNlcnZlZCA9IDA7CiAJcmV0dXJuIDA7CiB9CiBFWFBPUlRfU1lNQk9MKHY0bDJfY3RybF9xdWVyeV9tZW51KTsKIAorLyogRmlsbCBpbiBhIHN0cnVjdCB2NGwyX3F1ZXJ5bWVudSBiYXNlZCBvbiB0aGUgc3BlY2lmaWVkIGFycmF5IG9mIHZhbGlkCisgICBtZW51IGl0ZW1zICh0ZXJtaW5hdGVkIGJ5IFY0TDJfQ1RSTF9NRU5VX0lEU19FTkQpLgorICAgVXNlIHRoaXMgaWYgdGhlcmUgYXJlICdob2xlcycgaW4gdGhlIGxpc3Qgb2YgdmFsaWQgbWVudSBpdGVtcy4gKi8KK2ludCB2NGwyX2N0cmxfcXVlcnlfbWVudV92YWxpZF9pdGVtcyhzdHJ1Y3QgdjRsMl9xdWVyeW1lbnUgKnFtZW51LCBjb25zdCB1MzIgKmlkcykKK3sKKwljb25zdCBjaGFyICoqbWVudV9pdGVtcyA9IHY0bDJfY3RybF9nZXRfbWVudShxbWVudS0+aWQpOworCisJcW1lbnUtPnJlc2VydmVkID0gMDsKKwlpZiAobWVudV9pdGVtcyA9PSBOVUxMIHx8IGlkcyA9PSBOVUxMKQorCQlyZXR1cm4gLUVJTlZBTDsKKwl3aGlsZSAoKmlkcyAhPSBWNEwyX0NUUkxfTUVOVV9JRFNfRU5EKSB7CisJCWlmICgqaWRzKysgPT0gcW1lbnUtPmluZGV4KSB7CisJCQlzbnByaW50ZihxbWVudS0+bmFtZSwgc2l6ZW9mKHFtZW51LT5uYW1lKSwKKwkJCQkgICAgICAgbWVudV9pdGVtc1txbWVudS0+aW5kZXhdKTsKKwkJCXJldHVybiAwOworCQl9CisJfQorCXJldHVybiAtRUlOVkFMOworfQorRVhQT1JUX1NZTUJPTCh2NGwyX2N0cmxfcXVlcnlfbWVudV92YWxpZF9pdGVtcyk7CisKIC8qIGN0cmxfY2xhc3NlcyBwb2ludHMgdG8gYW4gYXJyYXkgb2YgdTMyIHBvaW50ZXJzLCB0aGUgbGFzdCBlbGVtZW50IGlzCiAgICBhIE5VTEwgcG9pbnRlci4gRWFjaCB1MzIgYXJyYXkgaXMgYSAwLXRlcm1pbmF0ZWQgYXJyYXkgb2YgY29udHJvbCBJRHMuCiAgICBFYWNoIGFycmF5IG11c3QgYmUgc29ydGVkIGxvdyB0byBoaWdoIGFuZCBiZWxvbmcgdG8gdGhlIHNhbWUgY29udHJvbApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby92NGwyLWRldi5jIGIvZHJpdmVycy9tZWRpYS92aWRlby92NGwyLWRldi5jCmluZGV4IDE1NWZkZWMuLmNjZDY1NjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdjRsMi1kZXYuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3Y0bDItZGV2LmMKQEAgLTQyLDYgKzQyLDcgQEAKIAkJCSBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQogewogCXN0cnVjdCB2aWRlb19kZXZpY2UgKnZmZCA9IGNvbnRhaW5lcl9vZihjZCwgc3RydWN0IHZpZGVvX2RldmljZSwgZGV2KTsKKwogCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVpXG4iLCB2ZmQtPmluZGV4KTsKIH0KIApAQCAtNDksNiArNTAsNyBAQAogCQkJIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCiB7CiAJc3RydWN0IHZpZGVvX2RldmljZSAqdmZkID0gY29udGFpbmVyX29mKGNkLCBzdHJ1Y3QgdmlkZW9fZGV2aWNlLCBkZXYpOworCiAJcmV0dXJuIHNwcmludGYoYnVmLCAiJS4qc1xuIiwgKGludClzaXplb2YodmZkLT5uYW1lKSwgdmZkLT5uYW1lKTsKIH0KIApAQCAtNTgsMTIgKzYwLDE2IEBACiAJX19BVFRSX05VTEwKIH07CiAKKy8qCisgKglBY3RpdmUgZGV2aWNlcworICovCitzdGF0aWMgc3RydWN0IHZpZGVvX2RldmljZSAqdmlkZW9fZGV2aWNlW1ZJREVPX05VTV9ERVZJQ0VTXTsKK3N0YXRpYyBERUZJTkVfTVVURVgodmlkZW9kZXZfbG9jayk7CitzdGF0aWMgREVDTEFSRV9CSVRNQVAodmlkZW9fbnVtc1tWRkxfVFlQRV9NQVhdLCBWSURFT19OVU1fREVWSUNFUyk7CisKIHN0cnVjdCB2aWRlb19kZXZpY2UgKnZpZGVvX2RldmljZV9hbGxvYyh2b2lkKQogewotCXN0cnVjdCB2aWRlb19kZXZpY2UgKnZmZDsKLQotCXZmZCA9IGt6YWxsb2Moc2l6ZW9mKCp2ZmQpLCBHRlBfS0VSTkVMKTsKLQlyZXR1cm4gdmZkOworCXJldHVybiBremFsbG9jKHNpemVvZihzdHJ1Y3QgdmlkZW9fZGV2aWNlKSwgR0ZQX0tFUk5FTCk7CiB9CiBFWFBPUlRfU1lNQk9MKHZpZGVvX2RldmljZV9hbGxvYyk7CiAKQEAgLTczLDE2ICs3OSw1MiBAQAogfQogRVhQT1JUX1NZTUJPTCh2aWRlb19kZXZpY2VfcmVsZWFzZSk7CiAKK3ZvaWQgdmlkZW9fZGV2aWNlX3JlbGVhc2VfZW1wdHkoc3RydWN0IHZpZGVvX2RldmljZSAqdmZkKQoreworCS8qIERvIG5vdGhpbmcgKi8KKwkvKiBPbmx5IHZhbGlkIHdoZW4gdGhlIHZpZGVvX2RldmljZSBzdHJ1Y3QgaXMgYSBzdGF0aWMuICovCit9CitFWFBPUlRfU1lNQk9MKHZpZGVvX2RldmljZV9yZWxlYXNlX2VtcHR5KTsKKworLyogQ2FsbGVkIHdoZW4gdGhlIGxhc3QgdXNlciBvZiB0aGUgY2hhcmFjdGVyIGRldmljZSBpcyBnb25lLiAqLworc3RhdGljIHZvaWQgdjRsMl9jaGFyZGV2X3JlbGVhc2Uoc3RydWN0IGtvYmplY3QgKmtvYmopCit7CisJc3RydWN0IHZpZGVvX2RldmljZSAqdmZkID0gY29udGFpbmVyX29mKGtvYmosIHN0cnVjdCB2aWRlb19kZXZpY2UsIGNkZXYua29iaik7CisKKwltdXRleF9sb2NrKCZ2aWRlb2Rldl9sb2NrKTsKKwlpZiAodmlkZW9fZGV2aWNlW3ZmZC0+bWlub3JdICE9IHZmZCkgeworCQltdXRleF91bmxvY2soJnZpZGVvZGV2X2xvY2spOworCQlCVUcoKTsKKwkJcmV0dXJuOworCX0KKworCS8qIEZyZWUgdXAgdGhpcyBkZXZpY2UgZm9yIHJldXNlICovCisJdmlkZW9fZGV2aWNlW3ZmZC0+bWlub3JdID0gTlVMTDsKKwljbGVhcl9iaXQodmZkLT5udW0sIHZpZGVvX251bXNbdmZkLT52ZmxfdHlwZV0pOworCW11dGV4X3VubG9jaygmdmlkZW9kZXZfbG9jayk7CisKKwkvKiBSZWxlYXNlIHRoZSBjaGFyYWN0ZXIgZGV2aWNlICovCisJdmZkLT5jZGV2X3JlbGVhc2Uoa29iaik7CisJLyogUmVsZWFzZSB2aWRlb19kZXZpY2UgYW5kIHBlcmZvcm0gb3RoZXIKKwkgICBjbGVhbnVwcyBhcyBuZWVkZWQuICovCisJaWYgKHZmZC0+cmVsZWFzZSkKKwkJdmZkLT5yZWxlYXNlKHZmZCk7Cit9CisKKy8qIFRoZSBuZXcga29ial90eXBlIGZvciB0aGUgY2hhcmFjdGVyIGRldmljZSAqLworc3RhdGljIHN0cnVjdCBrb2JqX3R5cGUgdjRsMl9rdHlwZV9jZGV2X2RlZmF1bHQgPSB7CisJLnJlbGVhc2UgPSB2NGwyX2NoYXJkZXZfcmVsZWFzZSwKK307CisKIHN0YXRpYyB2b2lkIHZpZGVvX3JlbGVhc2Uoc3RydWN0IGRldmljZSAqY2QpCiB7CiAJc3RydWN0IHZpZGVvX2RldmljZSAqdmZkID0gY29udGFpbmVyX29mKGNkLCBzdHJ1Y3QgdmlkZW9fZGV2aWNlLCBkZXYpOwogCi0jaWYgMQotCS8qIG5lZWRlZCB1bnRpbCBhbGwgZHJpdmVycyBhcmUgZml4ZWQgKi8KLQlpZiAoIXZmZC0+cmVsZWFzZSkKLQkJcmV0dXJuOwotI2VuZGlmCi0JdmZkLT5yZWxlYXNlKHZmZCk7CisJLyogSXQncyBub3cgc2FmZSB0byBkZWxldGUgdGhlIGNoYXIgZGV2aWNlLgorCSAgIFRoaXMgd2lsbCBlaXRoZXIgdHJpZ2dlciB0aGUgdjRsMl9jaGFyZGV2X3JlbGVhc2UgaW1tZWRpYXRlbHkgKGlmCisJICAgdGhlIHJlZmNvdW50IGdvZXMgdG8gMCkgb3IgbGF0ZXIgd2hlbiB0aGUgbGFzdCB1c2VyIG9mIHRoZQorCSAgIGNoYXJhY3RlciBkZXZpY2UgY2xvc2VzIGl0LiAqLworCWNkZXZfZGVsKCZ2ZmQtPmNkZXYpOwogfQogCiBzdGF0aWMgc3RydWN0IGNsYXNzIHZpZGVvX2NsYXNzID0gewpAQCAtOTEsODcgKzEzMywxMiBAQAogCS5kZXZfcmVsZWFzZSA9IHZpZGVvX3JlbGVhc2UsCiB9OwogCi0vKgotICoJQWN0aXZlIGRldmljZXMKLSAqLwotCi1zdGF0aWMgc3RydWN0IHZpZGVvX2RldmljZSAqdmlkZW9fZGV2aWNlW1ZJREVPX05VTV9ERVZJQ0VTXTsKLXN0YXRpYyBERUZJTkVfTVVURVgodmlkZW9kZXZfbG9jayk7Ci0KIHN0cnVjdCB2aWRlb19kZXZpY2UgKnZpZGVvX2RldmRhdGEoc3RydWN0IGZpbGUgKmZpbGUpCiB7CiAJcmV0dXJuIHZpZGVvX2RldmljZVtpbWlub3IoZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSldOwogfQogRVhQT1JUX1NZTUJPTCh2aWRlb19kZXZkYXRhKTsKIAotLyoKLSAqCU9wZW4gYSB2aWRlbyBkZXZpY2UgLSBGSVhNRTogT2Jzb2xldGVkCi0gKi8KLXN0YXRpYyBpbnQgdmlkZW9fb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKLXsKLQl1bnNpZ25lZCBpbnQgbWlub3IgPSBpbWlub3IoaW5vZGUpOwotCWludCBlcnIgPSAwOwotCXN0cnVjdCB2aWRlb19kZXZpY2UgKnZmbDsKLQljb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zICpvbGRfZm9wczsKLQotCWlmIChtaW5vciA+PSBWSURFT19OVU1fREVWSUNFUykKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JbG9ja19rZXJuZWwoKTsKLQltdXRleF9sb2NrKCZ2aWRlb2Rldl9sb2NrKTsKLQl2ZmwgPSB2aWRlb19kZXZpY2VbbWlub3JdOwotCWlmICh2ZmwgPT0gTlVMTCkgewotCQltdXRleF91bmxvY2soJnZpZGVvZGV2X2xvY2spOwotCQlyZXF1ZXN0X21vZHVsZSgiY2hhci1tYWpvci0lZC0lZCIsIFZJREVPX01BSk9SLCBtaW5vcik7Ci0JCW11dGV4X2xvY2soJnZpZGVvZGV2X2xvY2spOwotCQl2ZmwgPSB2aWRlb19kZXZpY2VbbWlub3JdOwotCQlpZiAodmZsID09IE5VTEwpIHsKLQkJCW11dGV4X3VubG9jaygmdmlkZW9kZXZfbG9jayk7Ci0JCQl1bmxvY2tfa2VybmVsKCk7Ci0JCQlyZXR1cm4gLUVOT0RFVjsKLQkJfQotCX0KLQlvbGRfZm9wcyA9IGZpbGUtPmZfb3A7Ci0JZmlsZS0+Zl9vcCA9IGZvcHNfZ2V0KHZmbC0+Zm9wcyk7Ci0JaWYgKGZpbGUtPmZfb3AtPm9wZW4pCi0JCWVyciA9IGZpbGUtPmZfb3AtPm9wZW4oaW5vZGUsIGZpbGUpOwotCWlmIChlcnIpIHsKLQkJZm9wc19wdXQoZmlsZS0+Zl9vcCk7Ci0JCWZpbGUtPmZfb3AgPSBmb3BzX2dldChvbGRfZm9wcyk7Ci0JfQotCWZvcHNfcHV0KG9sZF9mb3BzKTsKLQltdXRleF91bmxvY2soJnZpZGVvZGV2X2xvY2spOwotCXVubG9ja19rZXJuZWwoKTsKLQlyZXR1cm4gZXJyOwotfQotCi0vKgotICogb3Blbi9yZWxlYXNlIGhlbHBlciBmdW5jdGlvbnMgLS0gaGFuZGxlIGV4Y2x1c2l2ZSBvcGVucwotICogU2hvdWxkIGJlIHJlbW92ZWQgc29vbgotICovCi1pbnQgdmlkZW9fZXhjbHVzaXZlX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCi17Ci0Jc3RydWN0IHZpZGVvX2RldmljZSAqdmZsID0gdmlkZW9fZGV2ZGF0YShmaWxlKTsKLQlpbnQgcmV0dmFsID0gMDsKLQotCW11dGV4X2xvY2soJnZmbC0+bG9jayk7Ci0JaWYgKHZmbC0+dXNlcnMpCi0JCXJldHZhbCA9IC1FQlVTWTsKLQllbHNlCi0JCXZmbC0+dXNlcnMrKzsKLQltdXRleF91bmxvY2soJnZmbC0+bG9jayk7Ci0JcmV0dXJuIHJldHZhbDsKLX0KLUVYUE9SVF9TWU1CT0wodmlkZW9fZXhjbHVzaXZlX29wZW4pOwotCi1pbnQgdmlkZW9fZXhjbHVzaXZlX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCi17Ci0Jc3RydWN0IHZpZGVvX2RldmljZSAqdmZsID0gdmlkZW9fZGV2ZGF0YShmaWxlKTsKLQotCXZmbC0+dXNlcnMtLTsKLQlyZXR1cm4gMDsKLX0KLUVYUE9SVF9TWU1CT0wodmlkZW9fZXhjbHVzaXZlX3JlbGVhc2UpOwotCiAvKioKICAqIGdldF9pbmRleCAtIGFzc2lnbiBzdHJlYW0gbnVtYmVyIGJhc2VkIG9uIHBhcmVudCBkZXZpY2UKICAqIEB2ZGV2OiB2aWRlb19kZXZpY2UgdG8gYXNzaWduIGluZGV4IG51bWJlciB0bywgdmRldi0+ZGV2IHNob3VsZCBiZSBhc3NpZ25lZApAQCAtMjUyLDMzICsyMTksMjkgQEAKIAkJCQkJaW50IGluZGV4KQogewogCWludCBpID0gMDsKLQlpbnQgYmFzZTsKLQlpbnQgZW5kOwogCWludCByZXQ7Ci0JY2hhciAqbmFtZV9iYXNlOworCWludCBtaW5vcl9vZmZzZXQgPSAwOworCWludCBtaW5vcl9jbnQgPSBWSURFT19OVU1fREVWSUNFUzsKKwljb25zdCBjaGFyICpuYW1lX2Jhc2U7CisJdm9pZCAqcHJpdiA9IHZpZGVvX2dldF9kcnZkYXRhKHZmZCk7CisKKwkvKiB0aGUgcmVsZWFzZSBjYWxsYmFjayBNVVNUIGJlIHByZXNlbnQgKi8KKwlCVUdfT04oIXZmZC0+cmVsZWFzZSk7CiAKIAlpZiAodmZkID09IE5VTEwpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJc3dpdGNoICh0eXBlKSB7CiAJY2FzZSBWRkxfVFlQRV9HUkFCQkVSOgotCQliYXNlID0gTUlOT1JfVkZMX1RZUEVfR1JBQkJFUl9NSU47Ci0JCWVuZCA9IE1JTk9SX1ZGTF9UWVBFX0dSQUJCRVJfTUFYKzE7CiAJCW5hbWVfYmFzZSA9ICJ2aWRlbyI7CiAJCWJyZWFrOwogCWNhc2UgVkZMX1RZUEVfVlRYOgotCQliYXNlID0gTUlOT1JfVkZMX1RZUEVfVlRYX01JTjsKLQkJZW5kID0gTUlOT1JfVkZMX1RZUEVfVlRYX01BWCsxOwogCQluYW1lX2Jhc2UgPSAidnR4IjsKIAkJYnJlYWs7CiAJY2FzZSBWRkxfVFlQRV9WQkk6Ci0JCWJhc2UgPSBNSU5PUl9WRkxfVFlQRV9WQklfTUlOOwotCQllbmQgPSBNSU5PUl9WRkxfVFlQRV9WQklfTUFYKzE7CiAJCW5hbWVfYmFzZSA9ICJ2YmkiOwogCQlicmVhazsKIAljYXNlIFZGTF9UWVBFX1JBRElPOgotCQliYXNlID0gTUlOT1JfVkZMX1RZUEVfUkFESU9fTUlOOwotCQllbmQgPSBNSU5PUl9WRkxfVFlQRV9SQURJT19NQVgrMTsKIAkJbmFtZV9iYXNlID0gInJhZGlvIjsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKQEAgLTI4NywyOCArMjUwLDcwIEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAorCXZmZC0+dmZsX3R5cGUgPSB0eXBlOworCisjaWZkZWYgQ09ORklHX1ZJREVPX0ZJWEVEX01JTk9SX1JBTkdFUworCS8qIEtlZXAgdGhlIHJhbmdlcyBmb3IgdGhlIGZpcnN0IGZvdXIgdHlwZXMgZm9yIGhpc3RvcmljYWwKKwkgKiByZWFzb25zLgorCSAqIE5ld2VyIGRldmljZXMgKG5vdCB5ZXQgaW4gcGxhY2UpIHNob3VsZCB1c2UgdGhlIHJhbmdlCisJICogb2YgMTI4LTE5MSBhbmQganVzdCBwaWNrIHRoZSBmaXJzdCBmcmVlIG1pbm9yIHRoZXJlCisJICogKG5ldyBzdHlsZSkuICovCisJc3dpdGNoICh0eXBlKSB7CisJY2FzZSBWRkxfVFlQRV9HUkFCQkVSOgorCQltaW5vcl9vZmZzZXQgPSAwOworCQltaW5vcl9jbnQgPSA2NDsKKwkJYnJlYWs7CisJY2FzZSBWRkxfVFlQRV9SQURJTzoKKwkJbWlub3Jfb2Zmc2V0ID0gNjQ7CisJCW1pbm9yX2NudCA9IDY0OworCQlicmVhazsKKwljYXNlIFZGTF9UWVBFX1ZUWDoKKwkJbWlub3Jfb2Zmc2V0ID0gMTkyOworCQltaW5vcl9jbnQgPSAzMjsKKwkJYnJlYWs7CisJY2FzZSBWRkxfVFlQRV9WQkk6CisJCW1pbm9yX29mZnNldCA9IDIyNDsKKwkJbWlub3JfY250ID0gMzI7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCW1pbm9yX29mZnNldCA9IDEyODsKKwkJbWlub3JfY250ID0gNjQ7CisJCWJyZWFrOworCX0KKyNlbmRpZgorCisJLyogSW5pdGlhbGl6ZSB0aGUgY2hhcmFjdGVyIGRldmljZSAqLworCWNkZXZfaW5pdCgmdmZkLT5jZGV2LCB2ZmQtPmZvcHMpOworCXZmZC0+Y2Rldi5vd25lciA9IHZmZC0+Zm9wcy0+b3duZXI7CiAJLyogcGljayBhIG1pbm9yIG51bWJlciAqLwogCW11dGV4X2xvY2soJnZpZGVvZGV2X2xvY2spOwotCWlmIChuciA+PSAwICAmJiAgbnIgPCBlbmQtYmFzZSkgewotCQkvKiB1c2UgdGhlIG9uZSB0aGUgZHJpdmVyIGFza2VkIGZvciAqLwotCQlpID0gYmFzZSArIG5yOwotCQlpZiAoTlVMTCAhPSB2aWRlb19kZXZpY2VbaV0pIHsKLQkJCW11dGV4X3VubG9jaygmdmlkZW9kZXZfbG9jayk7Ci0JCQlyZXR1cm4gLUVORklMRTsKLQkJfQotCX0gZWxzZSB7Ci0JCS8qIHVzZSBmaXJzdCBmcmVlICovCi0JCWZvciAoaSA9IGJhc2U7IGkgPCBlbmQ7IGkrKykKLQkJCWlmIChOVUxMID09IHZpZGVvX2RldmljZVtpXSkKLQkJCQlicmVhazsKLQkJaWYgKGkgPT0gZW5kKSB7Ci0JCQltdXRleF91bmxvY2soJnZpZGVvZGV2X2xvY2spOwotCQkJcmV0dXJuIC1FTkZJTEU7Ci0JCX0KKwluciA9IGZpbmRfbmV4dF96ZXJvX2JpdCh2aWRlb19udW1zW3R5cGVdLCBtaW5vcl9jbnQsIG5yID09IC0xID8gMCA6IG5yKTsKKwlpZiAobnIgPT0gbWlub3JfY250KQorCQluciA9IGZpbmRfZmlyc3RfemVyb19iaXQodmlkZW9fbnVtc1t0eXBlXSwgbWlub3JfY250KTsKKwlpZiAobnIgPT0gbWlub3JfY250KSB7CisJCXByaW50ayhLRVJOX0VSUiAiY291bGQgbm90IGdldCBhIGZyZWUga2VybmVsIG51bWJlclxuIik7CisJCW11dGV4X3VubG9jaygmdmlkZW9kZXZfbG9jayk7CisJCXJldHVybiAtRU5GSUxFOwogCX0KLQl2aWRlb19kZXZpY2VbaV0gPSB2ZmQ7Ci0JdmZkLT52ZmxfdHlwZSA9IHR5cGU7Ci0JdmZkLT5taW5vciA9IGk7CisjaWZkZWYgQ09ORklHX1ZJREVPX0ZJWEVEX01JTk9SX1JBTkdFUworCS8qIDEtb24tMSBtYXBwaW5nIG9mIGtlcm5lbCBudW1iZXIgdG8gbWlub3IgbnVtYmVyICovCisJaSA9IG5yOworI2Vsc2UKKwkvKiBUaGUga2VybmVsIG51bWJlciBhbmQgbWlub3IgbnVtYmVycyBhcmUgaW5kZXBlbmRlbnQgKi8KKwlmb3IgKGkgPSAwOyBpIDwgVklERU9fTlVNX0RFVklDRVM7IGkrKykKKwkJaWYgKHZpZGVvX2RldmljZVtpXSA9PSBOVUxMKQorCQkJYnJlYWs7CisJaWYgKGkgPT0gVklERU9fTlVNX0RFVklDRVMpIHsKKwkJbXV0ZXhfdW5sb2NrKCZ2aWRlb2Rldl9sb2NrKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJjb3VsZCBub3QgZ2V0IGEgZnJlZSBtaW5vclxuIik7CisJCXJldHVybiAtRU5GSUxFOworCX0KKyNlbmRpZgorCXZmZC0+bWlub3IgPSBpICsgbWlub3Jfb2Zmc2V0OworCXZmZC0+bnVtID0gbnI7CisJc2V0X2JpdChuciwgdmlkZW9fbnVtc1t0eXBlXSk7CisJQlVHX09OKHZpZGVvX2RldmljZVt2ZmQtPm1pbm9yXSk7CisJdmlkZW9fZGV2aWNlW3ZmZC0+bWlub3JdID0gdmZkOwogCiAJcmV0ID0gZ2V0X2luZGV4KHZmZCwgaW5kZXgpOwogCXZmZC0+aW5kZXggPSByZXQ7CkBAIC0zMjAsMzUgKzMyNSw0MSBAQAogCQlnb3RvIGZhaWxfbWlub3I7CiAJfQogCi0JbXV0ZXhfaW5pdCgmdmZkLT5sb2NrKTsKLQorCXJldCA9IGNkZXZfYWRkKCZ2ZmQtPmNkZXYsIE1LREVWKFZJREVPX01BSk9SLCB2ZmQtPm1pbm9yKSwgMSk7CisJaWYgKHJldCA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogY2Rldl9hZGQgZmFpbGVkXG4iLCBfX2Z1bmNfXyk7CisJCWdvdG8gZmFpbF9taW5vcjsKKwl9CiAJLyogc3lzZnMgY2xhc3MgKi8KLQltZW1zZXQoJnZmZC0+ZGV2LCAweDAwLCBzaXplb2YodmZkLT5kZXYpKTsKKwltZW1zZXQoJnZmZC0+ZGV2LCAwLCBzaXplb2YodmZkLT5kZXYpKTsKKwkvKiBUaGUgbWVtc2V0IGFib3ZlIGNsZWFyZWQgdGhlIGRldmljZSdzIGRydmRhdGEsIHNvCisJICAgcHV0IGJhY2sgdGhlIGNvcHkgd2UgbWFkZSBlYXJsaWVyLiAqLworCXZpZGVvX3NldF9kcnZkYXRhKHZmZCwgcHJpdik7CiAJdmZkLT5kZXYuY2xhc3MgPSAmdmlkZW9fY2xhc3M7CiAJdmZkLT5kZXYuZGV2dCA9IE1LREVWKFZJREVPX01BSk9SLCB2ZmQtPm1pbm9yKTsKIAlpZiAodmZkLT5wYXJlbnQpCiAJCXZmZC0+ZGV2LnBhcmVudCA9IHZmZC0+cGFyZW50OwotCXNwcmludGYodmZkLT5kZXYuYnVzX2lkLCAiJXMlZCIsIG5hbWVfYmFzZSwgaSAtIGJhc2UpOworCXNwcmludGYodmZkLT5kZXYuYnVzX2lkLCAiJXMlZCIsIG5hbWVfYmFzZSwgbnIpOwogCXJldCA9IGRldmljZV9yZWdpc3RlcigmdmZkLT5kZXYpOwogCWlmIChyZXQgPCAwKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiJXM6IGRldmljZV9yZWdpc3RlciBmYWlsZWRcbiIsIF9fZnVuY19fKTsKLQkJZ290byBmYWlsX21pbm9yOworCQlnb3RvIGRlbF9jZGV2OwogCX0KLQotI2lmIDEKLQkvKiBuZWVkZWQgdW50aWwgYWxsIGRyaXZlcnMgYXJlIGZpeGVkICovCi0JaWYgKCF2ZmQtPnJlbGVhc2UpCi0JCXByaW50ayhLRVJOX1dBUk5JTkcgInZpZGVvZGV2OiBcIiVzXCIgaGFzIG5vIHJlbGVhc2UgY2FsbGJhY2suICIKLQkJICAgICAgICJQbGVhc2UgZml4IHlvdXIgZHJpdmVyIGZvciBwcm9wZXIgc3lzZnMgc3VwcG9ydCwgc2VlICIKLQkJICAgICAgICJodHRwOi8vbHduLm5ldC9BcnRpY2xlcy8zNjg1MC9cbiIsIHZmZC0+bmFtZSk7Ci0jZW5kaWYKKwkvKiBSZW1lbWJlciB0aGUgY2RldidzIHJlbGVhc2UgZnVuY3Rpb24gKi8KKwl2ZmQtPmNkZXZfcmVsZWFzZSA9IHZmZC0+Y2Rldi5rb2JqLmt0eXBlLT5yZWxlYXNlOworCS8qIEluc3RhbGwgb3VyIG93biAqLworCXZmZC0+Y2Rldi5rb2JqLmt0eXBlID0gJnY0bDJfa3R5cGVfY2Rldl9kZWZhdWx0OwogCXJldHVybiAwOwogCitkZWxfY2RldjoKKwljZGV2X2RlbCgmdmZkLT5jZGV2KTsKKwogZmFpbF9taW5vcjoKIAltdXRleF9sb2NrKCZ2aWRlb2Rldl9sb2NrKTsKIAl2aWRlb19kZXZpY2VbdmZkLT5taW5vcl0gPSBOVUxMOwotCXZmZC0+bWlub3IgPSAtMTsKKwljbGVhcl9iaXQodmZkLT5udW0sIHZpZGVvX251bXNbdHlwZV0pOwogCW11dGV4X3VubG9jaygmdmlkZW9kZXZfbG9jayk7CisJdmZkLT5taW5vciA9IC0xOwogCXJldHVybiByZXQ7CiB9CiBFWFBPUlRfU1lNQk9MKHZpZGVvX3JlZ2lzdGVyX2RldmljZV9pbmRleCk7CkBAIC0zNjMsNDIgKzM3NCwyOSBAQAogCiB2b2lkIHZpZGVvX3VucmVnaXN0ZXJfZGV2aWNlKHN0cnVjdCB2aWRlb19kZXZpY2UgKnZmZCkKIHsKLQltdXRleF9sb2NrKCZ2aWRlb2Rldl9sb2NrKTsKLQlpZiAodmlkZW9fZGV2aWNlW3ZmZC0+bWlub3JdICE9IHZmZCkKLQkJcGFuaWMoInZpZGVvZGV2OiBiYWQgdW5yZWdpc3RlciIpOwotCi0JdmlkZW9fZGV2aWNlW3ZmZC0+bWlub3JdID0gTlVMTDsKIAlkZXZpY2VfdW5yZWdpc3RlcigmdmZkLT5kZXYpOwotCW11dGV4X3VubG9jaygmdmlkZW9kZXZfbG9jayk7CiB9CiBFWFBPUlRfU1lNQk9MKHZpZGVvX3VucmVnaXN0ZXJfZGV2aWNlKTsKIAogLyoKLSAqIFZpZGVvIGZzIG9wZXJhdGlvbnMKLSAqLwotc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdmlkZW9fZm9wcyA9IHsKLQkub3duZXIJCT0gVEhJU19NT0RVTEUsCi0JLmxsc2VlawkJPSBub19sbHNlZWssCi0JLm9wZW4JCT0gdmlkZW9fb3BlbiwKLX07Ci0KLS8qCiAgKglJbml0aWFsaXNlIHZpZGVvIGZvciBsaW51eAogICovCi0KIHN0YXRpYyBpbnQgX19pbml0IHZpZGVvZGV2X2luaXQodm9pZCkKIHsKKwlkZXZfdCBkZXYgPSBNS0RFVihWSURFT19NQUpPUiwgMCk7CiAJaW50IHJldDsKIAogCXByaW50ayhLRVJOX0lORk8gIkxpbnV4IHZpZGVvIGNhcHR1cmUgaW50ZXJmYWNlOiB2Mi4wMFxuIik7Ci0JaWYgKHJlZ2lzdGVyX2NocmRldihWSURFT19NQUpPUiwgVklERU9fTkFNRSwgJnZpZGVvX2ZvcHMpKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgInZpZGVvX2RldjogdW5hYmxlIHRvIGdldCBtYWpvciAlZFxuIiwgVklERU9fTUFKT1IpOwotCQlyZXR1cm4gLUVJTzsKKwlyZXQgPSByZWdpc3Rlcl9jaHJkZXZfcmVnaW9uKGRldiwgVklERU9fTlVNX0RFVklDRVMsIFZJREVPX05BTUUpOworCWlmIChyZXQgPCAwKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgInZpZGVvZGV2OiB1bmFibGUgdG8gZ2V0IG1ham9yICVkXG4iLAorCQkJCVZJREVPX01BSk9SKTsKKwkJcmV0dXJuIHJldDsKIAl9CiAKIAlyZXQgPSBjbGFzc19yZWdpc3RlcigmdmlkZW9fY2xhc3MpOwogCWlmIChyZXQgPCAwKSB7Ci0JCXVucmVnaXN0ZXJfY2hyZGV2KFZJREVPX01BSk9SLCBWSURFT19OQU1FKTsKKwkJdW5yZWdpc3Rlcl9jaHJkZXZfcmVnaW9uKGRldiwgVklERU9fTlVNX0RFVklDRVMpOwogCQlwcmludGsoS0VSTl9XQVJOSU5HICJ2aWRlb19kZXY6IGNsYXNzX3JlZ2lzdGVyIGZhaWxlZFxuIik7CiAJCXJldHVybiAtRUlPOwogCX0KQEAgLTQwOCw4ICs0MDYsMTAgQEAKIAogc3RhdGljIHZvaWQgX19leGl0IHZpZGVvZGV2X2V4aXQodm9pZCkKIHsKKwlkZXZfdCBkZXYgPSBNS0RFVihWSURFT19NQUpPUiwgMCk7CisKIAljbGFzc191bnJlZ2lzdGVyKCZ2aWRlb19jbGFzcyk7Ci0JdW5yZWdpc3Rlcl9jaHJkZXYoVklERU9fTUFKT1IsIFZJREVPX05BTUUpOworCXVucmVnaXN0ZXJfY2hyZGV2X3JlZ2lvbihkZXYsIFZJREVPX05VTV9ERVZJQ0VTKTsKIH0KIAogbW9kdWxlX2luaXQodmlkZW9kZXZfaW5pdCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdjRsMi1pb2N0bC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby92NGwyLWlvY3RsLmMKaW5kZXggMTQwZWY5Mi4uMTU1YzlkNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby92NGwyLWlvY3RsLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby92NGwyLWlvY3RsLmMKQEAgLTc0NiwxOCArNzQ2LDYgQEAKIAkJCQlyZXQgPSBvcHMtPnZpZGlvY19lbnVtX2ZtdF92aWRfb3ZlcmxheShmaWxlLAogCQkJCQlmaCwgZik7CiAJCQlicmVhazsKLSNpZiAxCi0JCS8qIFY0TDJfQlVGX1RZUEVfVkJJX0NBUFRVUkUgc2hvdWxkIG5vdCBzdXBwb3J0IFZJRElPQ19FTlVNX0ZNVAotCQkgKiBhY2NvcmRpbmcgdG8gdGhlIHNwZWMuIFRoZSBidHR2IGFuZCBzYWE3MTM0IGRyaXZlcnMgc3VwcG9ydAotCQkgKiBpdCB0aG91Z2gsIHNvIGp1c3Qgd2FybiB0aGF0IHRoaXMgaXMgZGVwcmVjYXRlZCBhbmQgd2lsbCBiZQotCQkgKiByZW1vdmVkIGluIHRoZSBuZWFyIGZ1dHVyZS4gKi8KLQkJY2FzZSBWNEwyX0JVRl9UWVBFX1ZCSV9DQVBUVVJFOgotCQkJaWYgKG9wcy0+dmlkaW9jX2VudW1fZm10X3ZiaV9jYXApIHsKLQkJCQlwcmludGsoS0VSTl9XQVJOSU5HICJ2aWRpb2NfZW51bV9mbXRfdmJpX2NhcCB3aWxsIGJlIHJlbW92ZWQgaW4gMi42LjI4IVxuIik7Ci0JCQkJcmV0ID0gb3BzLT52aWRpb2NfZW51bV9mbXRfdmJpX2NhcChmaWxlLCBmaCwgZik7Ci0JCQl9Ci0JCQlicmVhazsKLSNlbmRpZgogCQljYXNlIFY0TDJfQlVGX1RZUEVfVklERU9fT1VUUFVUOgogCQkJaWYgKG9wcy0+dmlkaW9jX2VudW1fZm10X3ZpZF9vdXQpCiAJCQkJcmV0ID0gb3BzLT52aWRpb2NfZW51bV9mbXRfdmlkX291dChmaWxlLCBmaCwgZik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3ZpZGVvYnVmLWR2Yi5jIGIvZHJpdmVycy9tZWRpYS92aWRlby92aWRlb2J1Zi1kdmIuYwppbmRleCBiNTZjZmZjLi45MTcyNzdkIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3ZpZGVvYnVmLWR2Yi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdmlkZW9idWYtZHZiLmMKQEAgLTEyNiw3ICsxMjYsNiBAQAogCW11dGV4X2xvY2soJmR2Yi0+bG9jayk7CiAJZHZiLT5uZmVlZHMtLTsKIAlpZiAoMCA9PSBkdmItPm5mZWVkcyAgJiYgIE5VTEwgIT0gZHZiLT50aHJlYWQpIHsKLQkJLy8gRklYTUU6IGN4ODgwMl9jYW5jZWxfYnVmZmVycyhkZXYpOwogCQllcnIgPSBrdGhyZWFkX3N0b3AoZHZiLT50aHJlYWQpOwogCQlkdmItPnRocmVhZCA9IE5VTEw7CiAJfQpAQCAtMTM0LDMwICsxMzMsMzggQEAKIAlyZXR1cm4gZXJyOwogfQogCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotaW50IHZpZGVvYnVmX2R2Yl9yZWdpc3RlcihzdHJ1Y3QgdmlkZW9idWZfZHZiICpkdmIsCitzdGF0aWMgaW50IHZpZGVvYnVmX2R2Yl9yZWdpc3Rlcl9hZGFwdGVyKHN0cnVjdCB2aWRlb2J1Zl9kdmJfZnJvbnRlbmRzICpmZSwKIAkJCSAgc3RydWN0IG1vZHVsZSAqbW9kdWxlLAogCQkJICB2b2lkICphZGFwdGVyX3ByaXYsCiAJCQkgIHN0cnVjdCBkZXZpY2UgKmRldmljZSwKLQkJCSAgc2hvcnQgKmFkYXB0ZXJfbnIpCisJCQkgIGNoYXIgKmFkYXB0ZXJfbmFtZSwKKwkJCSAgc2hvcnQgKmFkYXB0ZXJfbnIsCisJCQkgIGludCBtZmVfc2hhcmVkKQogewogCWludCByZXN1bHQ7CiAKLQltdXRleF9pbml0KCZkdmItPmxvY2spOworCW11dGV4X2luaXQoJmZlLT5sb2NrKTsKIAogCS8qIHJlZ2lzdGVyIGFkYXB0ZXIgKi8KLQlyZXN1bHQgPSBkdmJfcmVnaXN0ZXJfYWRhcHRlcigmZHZiLT5hZGFwdGVyLCBkdmItPm5hbWUsIG1vZHVsZSwgZGV2aWNlLAotCQkJCSAgICAgIGFkYXB0ZXJfbnIpOworCXJlc3VsdCA9IGR2Yl9yZWdpc3Rlcl9hZGFwdGVyKCZmZS0+YWRhcHRlciwgYWRhcHRlcl9uYW1lLCBtb2R1bGUsCisJCWRldmljZSwgYWRhcHRlcl9ucik7CiAJaWYgKHJlc3VsdCA8IDApIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IGR2Yl9yZWdpc3Rlcl9hZGFwdGVyIGZhaWxlZCAoZXJybm8gPSAlZClcbiIsCi0JCSAgICAgICBkdmItPm5hbWUsIHJlc3VsdCk7Ci0JCWdvdG8gZmFpbF9hZGFwdGVyOworCQkgICAgICAgYWRhcHRlcl9uYW1lLCByZXN1bHQpOwogCX0KLQlkdmItPmFkYXB0ZXIucHJpdiA9IGFkYXB0ZXJfcHJpdjsKKwlmZS0+YWRhcHRlci5wcml2ID0gYWRhcHRlcl9wcml2OworCWZlLT5hZGFwdGVyLm1mZV9zaGFyZWQgPSBtZmVfc2hhcmVkOworCisJcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIGludCB2aWRlb2J1Zl9kdmJfcmVnaXN0ZXJfZnJvbnRlbmQoc3RydWN0IGR2Yl9hZGFwdGVyICphZGFwdGVyLAorCXN0cnVjdCB2aWRlb2J1Zl9kdmIgKmR2YikKK3sKKwlpbnQgcmVzdWx0OwogCiAJLyogcmVnaXN0ZXIgZnJvbnRlbmQgKi8KLQlyZXN1bHQgPSBkdmJfcmVnaXN0ZXJfZnJvbnRlbmQoJmR2Yi0+YWRhcHRlciwgZHZiLT5mcm9udGVuZCk7CisJcmVzdWx0ID0gZHZiX3JlZ2lzdGVyX2Zyb250ZW5kKGFkYXB0ZXIsIGR2Yi0+ZnJvbnRlbmQpOwogCWlmIChyZXN1bHQgPCAwKSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBkdmJfcmVnaXN0ZXJfZnJvbnRlbmQgZmFpbGVkIChlcnJubyA9ICVkKVxuIiwKIAkJICAgICAgIGR2Yi0+bmFtZSwgcmVzdWx0KTsKQEAgLTE4Myw3ICsxOTAsOCBAQAogCWR2Yi0+ZG14ZGV2LmZpbHRlcm51bSAgICA9IDI1NjsKIAlkdmItPmRteGRldi5kZW11eCAgICAgICAgPSAmZHZiLT5kZW11eC5kbXg7CiAJZHZiLT5kbXhkZXYuY2FwYWJpbGl0aWVzID0gMDsKLQlyZXN1bHQgPSBkdmJfZG14ZGV2X2luaXQoJmR2Yi0+ZG14ZGV2LCAmZHZiLT5hZGFwdGVyKTsKKwlyZXN1bHQgPSBkdmJfZG14ZGV2X2luaXQoJmR2Yi0+ZG14ZGV2LCBhZGFwdGVyKTsKKwogCWlmIChyZXN1bHQgPCAwKSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBkdmJfZG14ZGV2X2luaXQgZmFpbGVkIChlcnJubyA9ICVkKVxuIiwKIAkJICAgICAgIGR2Yi0+bmFtZSwgcmVzdWx0KTsKQEAgLTIxNCw3ICsyMjIsMTEgQEAKIAl9CiAKIAkvKiByZWdpc3RlciBuZXR3b3JrIGFkYXB0ZXIgKi8KLQlkdmJfbmV0X2luaXQoJmR2Yi0+YWRhcHRlciwgJmR2Yi0+bmV0LCAmZHZiLT5kZW11eC5kbXgpOworCWR2Yl9uZXRfaW5pdChhZGFwdGVyLCAmZHZiLT5uZXQsICZkdmItPmRlbXV4LmRteCk7CisJaWYgKGR2Yi0+bmV0LmR2YmRldiA9PSBOVUxMKSB7CisJCXJlc3VsdCA9IC1FTk9NRU07CisJCWdvdG8gZmFpbF9mZV9jb25uOworCX0KIAlyZXR1cm4gMDsKIAogZmFpbF9mZV9jb25uOgpAQCAtMjI5LDMwICsyNDEsMTUxIEBACiAJZHZiX3VucmVnaXN0ZXJfZnJvbnRlbmQoZHZiLT5mcm9udGVuZCk7CiBmYWlsX2Zyb250ZW5kOgogCWR2Yl9mcm9udGVuZF9kZXRhY2goZHZiLT5mcm9udGVuZCk7Ci0JZHZiX3VucmVnaXN0ZXJfYWRhcHRlcigmZHZiLT5hZGFwdGVyKTsKLWZhaWxfYWRhcHRlcjoKKwlkdmItPmZyb250ZW5kID0gTlVMTDsKKwogCXJldHVybiByZXN1bHQ7CiB9CiAKLXZvaWQgdmlkZW9idWZfZHZiX3VucmVnaXN0ZXIoc3RydWN0IHZpZGVvYnVmX2R2YiAqZHZiKQotewotCWR2Yl9uZXRfcmVsZWFzZSgmZHZiLT5uZXQpOwotCWR2Yi0+ZGVtdXguZG14LnJlbW92ZV9mcm9udGVuZCgmZHZiLT5kZW11eC5kbXgsICZkdmItPmZlX21lbSk7Ci0JZHZiLT5kZW11eC5kbXgucmVtb3ZlX2Zyb250ZW5kKCZkdmItPmRlbXV4LmRteCwgJmR2Yi0+ZmVfaHcpOwotCWR2Yl9kbXhkZXZfcmVsZWFzZSgmZHZiLT5kbXhkZXYpOwotCWR2Yl9kbXhfcmVsZWFzZSgmZHZiLT5kZW11eCk7Ci0JZHZiX3VucmVnaXN0ZXJfZnJvbnRlbmQoZHZiLT5mcm9udGVuZCk7Ci0JZHZiX2Zyb250ZW5kX2RldGFjaChkdmItPmZyb250ZW5kKTsKLQlkdmJfdW5yZWdpc3Rlcl9hZGFwdGVyKCZkdmItPmFkYXB0ZXIpOwotfQotCi1FWFBPUlRfU1lNQk9MKHZpZGVvYnVmX2R2Yl9yZWdpc3Rlcik7Ci1FWFBPUlRfU1lNQk9MKHZpZGVvYnVmX2R2Yl91bnJlZ2lzdGVyKTsKLQogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0vKgotICogTG9jYWwgdmFyaWFibGVzOgotICogYy1iYXNpYy1vZmZzZXQ6IDgKLSAqIGNvbXBpbGUtY29tbWFuZDogIm1ha2UgRFZCPTEiCi0gKiBFbmQ6Ci0gKi8KKy8qIFJlZ2lzdGVyIGEgc2luZ2xlIGFkYXB0ZXIgYW5kIG9uZSBvciBtb3JlIGZyb250ZW5kcyAqLworaW50IHZpZGVvYnVmX2R2Yl9yZWdpc3Rlcl9idXMoc3RydWN0IHZpZGVvYnVmX2R2Yl9mcm9udGVuZHMgKmYsCisJCQkgIHN0cnVjdCBtb2R1bGUgKm1vZHVsZSwKKwkJCSAgdm9pZCAqYWRhcHRlcl9wcml2LAorCQkJICBzdHJ1Y3QgZGV2aWNlICpkZXZpY2UsCisJCQkgIHNob3J0ICphZGFwdGVyX25yLAorCQkJICBpbnQgbWZlX3NoYXJlZCkKK3sKKwlzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0LCAqcTsKKwlzdHJ1Y3QgdmlkZW9idWZfZHZiX2Zyb250ZW5kICpmZTsKKwlpbnQgcmVzOworCisJZmUgPSB2aWRlb2J1Zl9kdmJfZ2V0X2Zyb250ZW5kKGYsIDEpOworCWlmICghZmUpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiVW5hYmxlIHRvIHJlZ2lzdGVyIHRoZSBhZGFwdGVyIHdoaWNoIGhhcyBubyBmcm9udGVuZHNcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKiBCcmluZyB1cCB0aGUgYWRhcHRlciAqLworCXJlcyA9IHZpZGVvYnVmX2R2Yl9yZWdpc3Rlcl9hZGFwdGVyKGYsIG1vZHVsZSwgYWRhcHRlcl9wcml2LCBkZXZpY2UsCisJCWZlLT5kdmIubmFtZSwgYWRhcHRlcl9uciwgbWZlX3NoYXJlZCk7CisJaWYgKHJlcyA8IDApIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAidmlkZW9idWZfZHZiX3JlZ2lzdGVyX2FkYXB0ZXIgZmFpbGVkIChlcnJubyA9ICVkKVxuIiwgcmVzKTsKKwkJcmV0dXJuIHJlczsKKwl9CisKKwkvKiBBdHRhY2ggYWxsIG9mIHRoZSBmcm9udGVuZHMgdG8gdGhlIGFkYXB0ZXIgKi8KKwltdXRleF9sb2NrKCZmLT5sb2NrKTsKKwlsaXN0X2Zvcl9lYWNoX3NhZmUobGlzdCwgcSwgJmYtPmZlbGlzdCkgeworCQlmZSA9IGxpc3RfZW50cnkobGlzdCwgc3RydWN0IHZpZGVvYnVmX2R2Yl9mcm9udGVuZCwgZmVsaXN0KTsKKwkJcmVzID0gdmlkZW9idWZfZHZiX3JlZ2lzdGVyX2Zyb250ZW5kKCZmLT5hZGFwdGVyLCAmZmUtPmR2Yik7CisJCWlmIChyZXMgPCAwKSB7CisJCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogdmlkZW9idWZfZHZiX3JlZ2lzdGVyX2Zyb250ZW5kIGZhaWxlZCAoZXJybm8gPSAlZClcbiIsCisJCQkJZmUtPmR2Yi5uYW1lLCByZXMpOworCQkJZ290byBlcnI7CisJCX0KKwl9CisJbXV0ZXhfdW5sb2NrKCZmLT5sb2NrKTsKKwlyZXR1cm4gMDsKKworZXJyOgorCW11dGV4X3VubG9jaygmZi0+bG9jayk7CisJdmlkZW9idWZfZHZiX3VucmVnaXN0ZXJfYnVzKGYpOworCXJldHVybiByZXM7Cit9CitFWFBPUlRfU1lNQk9MKHZpZGVvYnVmX2R2Yl9yZWdpc3Rlcl9idXMpOworCit2b2lkIHZpZGVvYnVmX2R2Yl91bnJlZ2lzdGVyX2J1cyhzdHJ1Y3QgdmlkZW9idWZfZHZiX2Zyb250ZW5kcyAqZikKK3sKKwlzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0LCAqcTsKKwlzdHJ1Y3QgdmlkZW9idWZfZHZiX2Zyb250ZW5kICpmZTsKKworCW11dGV4X2xvY2soJmYtPmxvY2spOworCWxpc3RfZm9yX2VhY2hfc2FmZShsaXN0LCBxLCAmZi0+ZmVsaXN0KSB7CisJCWZlID0gbGlzdF9lbnRyeShsaXN0LCBzdHJ1Y3QgdmlkZW9idWZfZHZiX2Zyb250ZW5kLCBmZWxpc3QpOworCQlpZiAoZmUtPmR2Yi5uZXQuZHZiZGV2KSB7CisJCQlkdmJfbmV0X3JlbGVhc2UoJmZlLT5kdmIubmV0KTsKKwkJCWZlLT5kdmIuZGVtdXguZG14LnJlbW92ZV9mcm9udGVuZCgmZmUtPmR2Yi5kZW11eC5kbXgsCisJCQkJJmZlLT5kdmIuZmVfbWVtKTsKKwkJCWZlLT5kdmIuZGVtdXguZG14LnJlbW92ZV9mcm9udGVuZCgmZmUtPmR2Yi5kZW11eC5kbXgsCisJCQkJJmZlLT5kdmIuZmVfaHcpOworCQkJZHZiX2RteGRldl9yZWxlYXNlKCZmZS0+ZHZiLmRteGRldik7CisJCQlkdmJfZG14X3JlbGVhc2UoJmZlLT5kdmIuZGVtdXgpOworCQkJZHZiX3VucmVnaXN0ZXJfZnJvbnRlbmQoZmUtPmR2Yi5mcm9udGVuZCk7CisJCX0KKwkJaWYgKGZlLT5kdmIuZnJvbnRlbmQpCisJCQkvKiBhbHdheXMgYWxsb2NhdGVkLCBtYXkgaGF2ZSBiZWVuIHJlc2V0ICovCisJCQlkdmJfZnJvbnRlbmRfZGV0YWNoKGZlLT5kdmIuZnJvbnRlbmQpOworCQlsaXN0X2RlbChsaXN0KTsKKwkJa2ZyZWUoZmUpOworCX0KKwltdXRleF91bmxvY2soJmYtPmxvY2spOworCisJZHZiX3VucmVnaXN0ZXJfYWRhcHRlcigmZi0+YWRhcHRlcik7Cit9CitFWFBPUlRfU1lNQk9MKHZpZGVvYnVmX2R2Yl91bnJlZ2lzdGVyX2J1cyk7CisKK3N0cnVjdCB2aWRlb2J1Zl9kdmJfZnJvbnRlbmQgKnZpZGVvYnVmX2R2Yl9nZXRfZnJvbnRlbmQoCisJc3RydWN0IHZpZGVvYnVmX2R2Yl9mcm9udGVuZHMgKmYsIGludCBpZCkKK3sKKwlzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0LCAqcTsKKwlzdHJ1Y3QgdmlkZW9idWZfZHZiX2Zyb250ZW5kICpmZSwgKnJldCA9IE5VTEw7CisKKwltdXRleF9sb2NrKCZmLT5sb2NrKTsKKworCWxpc3RfZm9yX2VhY2hfc2FmZShsaXN0LCBxLCAmZi0+ZmVsaXN0KSB7CisJCWZlID0gbGlzdF9lbnRyeShsaXN0LCBzdHJ1Y3QgdmlkZW9idWZfZHZiX2Zyb250ZW5kLCBmZWxpc3QpOworCQlpZiAoZmUtPmlkID09IGlkKSB7CisJCQlyZXQgPSBmZTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJbXV0ZXhfdW5sb2NrKCZmLT5sb2NrKTsKKworCXJldHVybiByZXQ7Cit9CitFWFBPUlRfU1lNQk9MKHZpZGVvYnVmX2R2Yl9nZXRfZnJvbnRlbmQpOworCitpbnQgdmlkZW9idWZfZHZiX2ZpbmRfZnJvbnRlbmQoc3RydWN0IHZpZGVvYnVmX2R2Yl9mcm9udGVuZHMgKmYsCisJc3RydWN0IGR2Yl9mcm9udGVuZCAqcCkKK3sKKwlzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0LCAqcTsKKwlzdHJ1Y3QgdmlkZW9idWZfZHZiX2Zyb250ZW5kICpmZSA9IE5VTEw7CisJaW50IHJldCA9IDA7CisKKwltdXRleF9sb2NrKCZmLT5sb2NrKTsKKworCWxpc3RfZm9yX2VhY2hfc2FmZShsaXN0LCBxLCAmZi0+ZmVsaXN0KSB7CisJCWZlID0gbGlzdF9lbnRyeShsaXN0LCBzdHJ1Y3QgdmlkZW9idWZfZHZiX2Zyb250ZW5kLCBmZWxpc3QpOworCQlpZiAoZmUtPmR2Yi5mcm9udGVuZCA9PSBwKSB7CisJCQlyZXQgPSBmZS0+aWQ7CisJCQlicmVhazsKKwkJfQorCX0KKworCW11dGV4X3VubG9jaygmZi0+bG9jayk7CisKKwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTCh2aWRlb2J1Zl9kdmJfZmluZF9mcm9udGVuZCk7CisKK3N0cnVjdCB2aWRlb2J1Zl9kdmJfZnJvbnRlbmQgKnZpZGVvYnVmX2R2Yl9hbGxvY19mcm9udGVuZCgKKwlzdHJ1Y3QgdmlkZW9idWZfZHZiX2Zyb250ZW5kcyAqZiwgaW50IGlkKQoreworCXN0cnVjdCB2aWRlb2J1Zl9kdmJfZnJvbnRlbmQgKmZlOworCisJZmUgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgdmlkZW9idWZfZHZiX2Zyb250ZW5kKSwgR0ZQX0tFUk5FTCk7CisJaWYgKGZlID09IE5VTEwpCisJCWdvdG8gZmFpbF9hbGxvYzsKKworCWZlLT5pZCA9IGlkOworCW11dGV4X2luaXQoJmZlLT5kdmIubG9jayk7CisKKwltdXRleF9sb2NrKCZmLT5sb2NrKTsKKwlsaXN0X2FkZF90YWlsKCZmZS0+ZmVsaXN0LCAmZi0+ZmVsaXN0KTsKKwltdXRleF91bmxvY2soJmYtPmxvY2spOworCitmYWlsX2FsbG9jOgorCXJldHVybiBmZTsKK30KK0VYUE9SVF9TWU1CT0wodmlkZW9idWZfZHZiX2FsbG9jX2Zyb250ZW5kKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdmluby5jIGIvZHJpdmVycy9tZWRpYS92aWRlby92aW5vLmMKaW5kZXggMWVkZGE0NS4uMWVmYzVmMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby92aW5vLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby92aW5vLmMKQEAgLTMwLDE2ICszMCwxMiBAQAogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvdGltZS5oPgogI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KLQotI2lmZGVmIENPTkZJR19LTU9ECiAjaW5jbHVkZSA8bGludXgva21vZC5oPgotI2VuZGlmCiAKICNpbmNsdWRlIDxsaW51eC9pMmMuaD4KICNpbmNsdWRlIDxsaW51eC9pMmMtYWxnby1zZ2kuaD4KIAogI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Mi5oPgotI2luY2x1ZGUgPG1lZGlhL3Y0bDItaW9jdGwuaD4KICNpbmNsdWRlIDxtZWRpYS92NGwyLWNvbW1vbi5oPgogI2luY2x1ZGUgPG1lZGlhL3Y0bDItaW9jdGwuaD4KICNpbmNsdWRlIDxsaW51eC92aWRlb19kZWNvZGVyLmg+CkBAIC04MTAsNyArODA2LDcgQEAKIAlkcHJpbnRrKCJ2aW5vX2ZyZWVfYnVmZmVyX3dpdGhfY291bnQoKTogY291bnQgPSAlZFxuIiwgY291bnQpOwogCiAJZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKLQkJQ2xlYXJQYWdlUmVzZXJ2ZWQodmlydF90b19wYWdlKGZiLT5kZXNjX3RhYmxlLnZpcnR1YWxbaV0pKTsKKwkJQ2xlYXJQYWdlUmVzZXJ2ZWQodmlydF90b19wYWdlKCh2b2lkICopZmItPmRlc2NfdGFibGUudmlydHVhbFtpXSkpOwogCQlkbWFfdW5tYXBfc2luZ2xlKE5VTEwsCiAJCQkJIGZiLT5kZXNjX3RhYmxlLmRtYV9jcHVbVklOT19QQUdFX1JBVElPICogaV0sCiAJCQkJIFBBR0VfU0laRSwgRE1BX0ZST01fREVWSUNFKTsKQEAgLTg4OCw3ICs4ODQsNyBAQAogCQkJCWRtYV9kYXRhX2FkZHIgKyBWSU5PX1BBR0VfU0laRSAqIGo7CiAJCX0KIAotCQlTZXRQYWdlUmVzZXJ2ZWQodmlydF90b19wYWdlKGZiLT5kZXNjX3RhYmxlLnZpcnR1YWxbaV0pKTsKKwkJU2V0UGFnZVJlc2VydmVkKHZpcnRfdG9fcGFnZSgodm9pZCAqKWZiLT5kZXNjX3RhYmxlLnZpcnR1YWxbaV0pKTsKIAl9CiAKIAkvKiBwYWdlX2NvdW50IG5lZWRzIHRvIGJlIHNldCBhbnl3YXksIGJlY2F1c2UgdGhlIGRlc2NyaXB0b3IgdGFibGUgaGFzCkBAIC05NzUsNyArOTcxLDcgQEAKIAkJCQlkbWFfZGF0YV9hZGRyICsgVklOT19QQUdFX1NJWkUgKiBqOwogCQl9CiAKLQkJU2V0UGFnZVJlc2VydmVkKHZpcnRfdG9fcGFnZShmYi0+ZGVzY190YWJsZS52aXJ0dWFsW2ldKSk7CisJCVNldFBhZ2VSZXNlcnZlZCh2aXJ0X3RvX3BhZ2UoKHZvaWQgKilmYi0+ZGVzY190YWJsZS52aXJ0dWFsW2ldKSk7CiAJfQogCiAJLyogcGFnZV9jb3VudCBuZWVkcyB0byBiZSBzZXQgYW55d2F5LCBiZWNhdXNlIHRoZSBkZXNjcmlwdG9yIHRhYmxlIGhhcwpAQCAtNDAyNSw4ICs0MDIxLDcgQEAKIAogc3RhdGljIGludCB2aW5vX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCiB7Ci0Jc3RydWN0IHZpZGVvX2RldmljZSAqZGV2ID0gdmlkZW9fZGV2ZGF0YShmaWxlKTsKLQlzdHJ1Y3Qgdmlub19jaGFubmVsX3NldHRpbmdzICp2Y3MgPSB2aWRlb19nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCB2aW5vX2NoYW5uZWxfc2V0dGluZ3MgKnZjcyA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CiAJaW50IHJldCA9IDA7CiAJZHByaW50aygib3BlbigpOiBjaGFubmVsID0gJWNcbiIsCiAJICAgICAgICh2Y3MtPmNoYW5uZWwgPT0gVklOT19DSEFOTkVMX0EpID8gJ0EnIDogJ0InKTsKQEAgLTQwNTcsOCArNDA1Miw3IEBACiAKIHN0YXRpYyBpbnQgdmlub19jbG9zZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKLQlzdHJ1Y3QgdmlkZW9fZGV2aWNlICpkZXYgPSB2aWRlb19kZXZkYXRhKGZpbGUpOwotCXN0cnVjdCB2aW5vX2NoYW5uZWxfc2V0dGluZ3MgKnZjcyA9IHZpZGVvX2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IHZpbm9fY2hhbm5lbF9zZXR0aW5ncyAqdmNzID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKIAlkcHJpbnRrKCJjbG9zZSgpOlxuIik7CiAKIAltdXRleF9sb2NrKCZ2Y3MtPm11dGV4KTsKQEAgLTQxMDEsOCArNDA5NSw3IEBACiAKIHN0YXRpYyBpbnQgdmlub19tbWFwKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKIHsKLQlzdHJ1Y3QgdmlkZW9fZGV2aWNlICpkZXYgPSB2aWRlb19kZXZkYXRhKGZpbGUpOwotCXN0cnVjdCB2aW5vX2NoYW5uZWxfc2V0dGluZ3MgKnZjcyA9IHZpZGVvX2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IHZpbm9fY2hhbm5lbF9zZXR0aW5ncyAqdmNzID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKIAogCXVuc2lnbmVkIGxvbmcgc3RhcnQgPSB2bWEtPnZtX3N0YXJ0OwogCXVuc2lnbmVkIGxvbmcgc2l6ZSA9IHZtYS0+dm1fZW5kIC0gdm1hLT52bV9zdGFydDsKQEAgLTQyMDcsOCArNDIwMCw3IEBACiAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgdmlub19wb2xsKHN0cnVjdCBmaWxlICpmaWxlLCBwb2xsX3RhYmxlICpwdCkKIHsKLQlzdHJ1Y3QgdmlkZW9fZGV2aWNlICpkZXYgPSB2aWRlb19kZXZkYXRhKGZpbGUpOwotCXN0cnVjdCB2aW5vX2NoYW5uZWxfc2V0dGluZ3MgKnZjcyA9IHZpZGVvX2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IHZpbm9fY2hhbm5lbF9zZXR0aW5ncyAqdmNzID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKIAl1bnNpZ25lZCBpbnQgb3V0Z29pbmc7CiAJdW5zaWduZWQgaW50IHJldCA9IDA7CiAKQEAgLTQyNDgsOCArNDI0MCw3IEBACiBzdGF0aWMgaW50IHZpbm9fZG9faW9jdGwoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUsCiAJCSAgICAgIHVuc2lnbmVkIGludCBjbWQsIHZvaWQgKmFyZykKIHsKLQlzdHJ1Y3QgdmlkZW9fZGV2aWNlICpkZXYgPSB2aWRlb19kZXZkYXRhKGZpbGUpOwotCXN0cnVjdCB2aW5vX2NoYW5uZWxfc2V0dGluZ3MgKnZjcyA9IHZpZGVvX2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IHZpbm9fY2hhbm5lbF9zZXR0aW5ncyAqdmNzID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKIAogI2lmZGVmIFZJTk9fREVCVUcKIAlzd2l0Y2ggKF9JT0NfVFlQRShjbWQpKSB7CkBAIC00MzU2LDggKzQzNDcsNyBAQAogc3RhdGljIGludCB2aW5vX2lvY3RsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlLAogCQkgICAgICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKIHsKLQlzdHJ1Y3QgdmlkZW9fZGV2aWNlICpkZXYgPSB2aWRlb19kZXZkYXRhKGZpbGUpOwotCXN0cnVjdCB2aW5vX2NoYW5uZWxfc2V0dGluZ3MgKnZjcyA9IHZpZGVvX2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IHZpbm9fY2hhbm5lbF9zZXR0aW5ncyAqdmNzID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKIAlpbnQgcmV0OwogCiAJaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmdmNzLT5tdXRleCkpCkBAIC00NjQxLDcgKzQ2MzEsNyBAQAogCX0KIAl2aW5vX2luaXRfc3RhZ2UrKzsKIAotI2lmIGRlZmluZWQoQ09ORklHX0tNT0QpICYmIGRlZmluZWQoTU9EVUxFKQorI2lmZGVmIE1PRFVMRQogCXJlcXVlc3RfbW9kdWxlKCJzYWE3MTkxIik7CiAJcmVxdWVzdF9tb2R1bGUoImluZHljYW0iKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby92aXZpLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3ZpdmkuYwppbmRleCA4YmE4ZGFhLi43ZDdlNTFkIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3ZpdmkuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3ZpdmkuYwpAQCAtMTI4LDEyICsxMjgsNTYgQEAKIAlpbnQgICBkZXB0aDsKIH07CiAKLXN0YXRpYyBzdHJ1Y3Qgdml2aV9mbXQgZm9ybWF0ID0gewotCS5uYW1lICAgICA9ICI0OjI6MiwgcGFja2VkLCBZVVlWIiwKLQkuZm91cmNjICAgPSBWNEwyX1BJWF9GTVRfWVVZViwKLQkuZGVwdGggICAgPSAxNiwKK3N0YXRpYyBzdHJ1Y3Qgdml2aV9mbXQgZm9ybWF0c1tdID0geworCXsKKwkJLm5hbWUgICAgID0gIjQ6MjoyLCBwYWNrZWQsIFlVWVYiLAorCQkuZm91cmNjICAgPSBWNEwyX1BJWF9GTVRfWVVZViwKKwkJLmRlcHRoICAgID0gMTYsCisJfSwKKwl7CisJCS5uYW1lICAgICA9ICI0OjI6MiwgcGFja2VkLCBVWVZZIiwKKwkJLmZvdXJjYyAgID0gVjRMMl9QSVhfRk1UX1VZVlksCisJCS5kZXB0aCAgICA9IDE2LAorCX0sCisJeworCQkubmFtZSAgICAgPSAiUkdCNTY1IChMRSkiLAorCQkuZm91cmNjICAgPSBWNEwyX1BJWF9GTVRfUkdCNTY1LCAvKiBnZ2diYmJiYiBycnJycmdnZyAqLworCQkuZGVwdGggICAgPSAxNiwKKwl9LAorCXsKKwkJLm5hbWUgICAgID0gIlJHQjU2NSAoQkUpIiwKKwkJLmZvdXJjYyAgID0gVjRMMl9QSVhfRk1UX1JHQjU2NVgsIC8qIHJycnJyZ2dnIGdnZ2JiYmJiICovCisJCS5kZXB0aCAgICA9IDE2LAorCX0sCisJeworCQkubmFtZSAgICAgPSAiUkdCNTU1IChMRSkiLAorCQkuZm91cmNjICAgPSBWNEwyX1BJWF9GTVRfUkdCNTU1LCAvKiBnZ2diYmJiYiBhcnJycnJnZyAqLworCQkuZGVwdGggICAgPSAxNiwKKwl9LAorCXsKKwkJLm5hbWUgICAgID0gIlJHQjU1NSAoQkUpIiwKKwkJLmZvdXJjYyAgID0gVjRMMl9QSVhfRk1UX1JHQjU1NVgsIC8qIGFycnJycmdnIGdnZ2JiYmJiICovCisJCS5kZXB0aCAgICA9IDE2LAorCX0sCiB9OwogCitzdGF0aWMgc3RydWN0IHZpdmlfZm10ICpnZXRfZm9ybWF0KHN0cnVjdCB2NGwyX2Zvcm1hdCAqZikKK3sKKwlzdHJ1Y3Qgdml2aV9mbXQgKmZtdDsKKwl1bnNpZ25lZCBpbnQgazsKKworCWZvciAoayA9IDA7IGsgPCBBUlJBWV9TSVpFKGZvcm1hdHMpOyBrKyspIHsKKwkJZm10ID0gJmZvcm1hdHNba107CisJCWlmIChmbXQtPmZvdXJjYyA9PSBmLT5mbXQucGl4LnBpeGVsZm9ybWF0KQorCQkJYnJlYWs7CisJfQorCisJaWYgKGsgPT0gQVJSQVlfU0laRShmb3JtYXRzKSkKKwkJcmV0dXJuIE5VTEw7CisKKwlyZXR1cm4gJmZvcm1hdHNba107Cit9CisKIHN0cnVjdCBzZ190b19hZGRyIHsKIAlpbnQgcG9zOwogCXN0cnVjdCBzY2F0dGVybGlzdCAqc2c7CkBAIC0xOTAsNiArMjM0LDcgQEAKIAlzdHJ1Y3QgdmlkZW9idWZfcXVldWUgICAgICB2Yl92aWRxOwogCiAJZW51bSB2NGwyX2J1Zl90eXBlICAgICAgICAgdHlwZTsKKwl1bnNpZ25lZCBjaGFyICAgICAgICAgICAgICBiYXJzWzhdWzNdOwogfTsKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0yMzQsMTMgKzI3OSwxMDcgQEAKICNkZWZpbmUgVFNUQU1QX01BWF9ZIFRTVEFNUF9NSU5fWSsxNQogI2RlZmluZSBUU1RBTVBfTUlOX1ggNjQKIAotc3RhdGljIHZvaWQgZ2VuX2xpbmUoY2hhciAqYmFzZXAsIGludCBpbmlwb3MsIGludCB3bWF4LAorc3RhdGljIHZvaWQgZ2VuX3R3b3BpeChzdHJ1Y3Qgdml2aV9maCAqZmgsIHVuc2lnbmVkIGNoYXIgKmJ1ZiwgaW50IGNvbG9ycG9zKQoreworCXVuc2lnbmVkIGNoYXIgcl95LCBnX3UsIGJfdjsKKwl1bnNpZ25lZCBjaGFyICpwOworCWludCBjb2xvcjsKKworCXJfeSA9IGZoLT5iYXJzW2NvbG9ycG9zXVswXTsgLyogUiBvciBwcmVjYWxjdWxhdGVkIFkgKi8KKwlnX3UgPSBmaC0+YmFyc1tjb2xvcnBvc11bMV07IC8qIEcgb3IgcHJlY2FsY3VsYXRlZCBVICovCisJYl92ID0gZmgtPmJhcnNbY29sb3Jwb3NdWzJdOyAvKiBCIG9yIHByZWNhbGN1bGF0ZWQgViAqLworCisJZm9yIChjb2xvciA9IDA7IGNvbG9yIDwgNDsgY29sb3IrKykgeworCQlwID0gYnVmICsgY29sb3I7CisKKwkJc3dpdGNoIChmaC0+Zm10LT5mb3VyY2MpIHsKKwkJY2FzZSBWNEwyX1BJWF9GTVRfWVVZVjoKKwkJCXN3aXRjaCAoY29sb3IpIHsKKwkJCWNhc2UgMDoKKwkJCWNhc2UgMjoKKwkJCQkqcCA9IHJfeTsKKwkJCQlicmVhazsKKwkJCWNhc2UgMToKKwkJCQkqcCA9IGdfdTsKKwkJCQlicmVhazsKKwkJCWNhc2UgMzoKKwkJCQkqcCA9IGJfdjsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIFY0TDJfUElYX0ZNVF9VWVZZOgorCQkJc3dpdGNoIChjb2xvcikgeworCQkJY2FzZSAxOgorCQkJY2FzZSAzOgorCQkJCSpwID0gcl95OworCQkJCWJyZWFrOworCQkJY2FzZSAwOgorCQkJCSpwID0gZ191OworCQkJCWJyZWFrOworCQkJY2FzZSAyOgorCQkJCSpwID0gYl92OworCQkJCWJyZWFrOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgVjRMMl9QSVhfRk1UX1JHQjU2NToKKwkJCXN3aXRjaCAoY29sb3IpIHsKKwkJCWNhc2UgMDoKKwkJCWNhc2UgMjoKKwkJCQkqcCA9IChnX3UgPDwgNSkgfCBiX3Y7CisJCQkJYnJlYWs7CisJCQljYXNlIDE6CisJCQljYXNlIDM6CisJCQkJKnAgPSAocl95IDw8IDMpIHwgKGdfdSA+PiAzKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIFY0TDJfUElYX0ZNVF9SR0I1NjVYOgorCQkJc3dpdGNoIChjb2xvcikgeworCQkJY2FzZSAwOgorCQkJY2FzZSAyOgorCQkJCSpwID0gKHJfeSA8PCAzKSB8IChnX3UgPj4gMyk7CisJCQkJYnJlYWs7CisJCQljYXNlIDE6CisJCQljYXNlIDM6CisJCQkJKnAgPSAoZ191IDw8IDUpIHwgYl92OworCQkJCWJyZWFrOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgVjRMMl9QSVhfRk1UX1JHQjU1NToKKwkJCXN3aXRjaCAoY29sb3IpIHsKKwkJCWNhc2UgMDoKKwkJCWNhc2UgMjoKKwkJCQkqcCA9IChnX3UgPDwgNSkgfCBiX3Y7CisJCQkJYnJlYWs7CisJCQljYXNlIDE6CisJCQljYXNlIDM6CisJCQkJKnAgPSAocl95IDw8IDIpIHwgKGdfdSA+PiAzKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIFY0TDJfUElYX0ZNVF9SR0I1NTVYOgorCQkJc3dpdGNoIChjb2xvcikgeworCQkJY2FzZSAwOgorCQkJY2FzZSAyOgorCQkJCSpwID0gKHJfeSA8PCAyKSB8IChnX3UgPj4gMyk7CisJCQkJYnJlYWs7CisJCQljYXNlIDE6CisJCQljYXNlIDM6CisJCQkJKnAgPSAoZ191IDw8IDUpIHwgYl92OworCQkJCWJyZWFrOworCQkJfQorCQkJYnJlYWs7CisJCX0KKwl9Cit9CisKK3N0YXRpYyB2b2lkIGdlbl9saW5lKHN0cnVjdCB2aXZpX2ZoICpmaCwgY2hhciAqYmFzZXAsIGludCBpbmlwb3MsIGludCB3bWF4LAogCQlpbnQgaG1heCwgaW50IGxpbmUsIGludCBjb3VudCwgY2hhciAqdGltZXN0cikKIHsKLQlpbnQgIHcsIGksIGosIHk7CisJaW50ICB3LCBpLCBqOwogCWludCBwb3MgPSBpbmlwb3M7Ci0JY2hhciAqcCwgKnM7Ci0JdTggICBjaHIsIHIsIGcsIGIsIGNvbG9yOworCWNoYXIgKnM7CisJdTggY2hyOwogCiAJLyogV2Ugd2lsbCBqdXN0IGR1cGxpY2F0ZSB0aGUgc2Vjb25kIHBpeGVsIGF0IHRoZSBwYWNrZXQgKi8KIAl3bWF4IC89IDI7CkBAIC0yNDgsMjcgKzM4Nyw5IEBACiAJLyogR2VuZXJhdGUgYSBzdGFuZGFyZCBjb2xvciBiYXIgcGF0dGVybiAqLwogCWZvciAodyA9IDA7IHcgPCB3bWF4OyB3KyspIHsKIAkJaW50IGNvbG9ycG9zID0gKCh3ICsgY291bnQpICogOC8od21heCArIDEpKSAlIDg7Ci0JCXIgPSBiYXJzW2NvbG9ycG9zXVswXTsKLQkJZyA9IGJhcnNbY29sb3Jwb3NdWzFdOwotCQliID0gYmFyc1tjb2xvcnBvc11bMl07CiAKLQkJZm9yIChjb2xvciA9IDA7IGNvbG9yIDwgNDsgY29sb3IrKykgewotCQkJcCA9IGJhc2VwICsgcG9zOwotCi0JCQlzd2l0Y2ggKGNvbG9yKSB7Ci0JCQljYXNlIDA6Ci0JCQljYXNlIDI6Ci0JCQkJKnAgPSBUT19ZKHIsIGcsIGIpOwkvKiBMdW1hICovCi0JCQkJYnJlYWs7Ci0JCQljYXNlIDE6Ci0JCQkJKnAgPSBUT19VKHIsIGcsIGIpOwkvKiBDYiAqLwotCQkJCWJyZWFrOwotCQkJY2FzZSAzOgotCQkJCSpwID0gVE9fVihyLCBnLCBiKTsJLyogQ3IgKi8KLQkJCQlicmVhazsKLQkJCX0KLQkJCXBvcysrOwotCQl9CisJCWdlbl90d29waXgoZmgsIGJhc2VwICsgcG9zLCBjb2xvcnBvcyk7CisJCXBvcyArPSA0OyAvKiBvbmx5IDE2IGJwcCBzdXBwb3J0ZWQgZm9yIG5vdyAqLwogCX0KIAogCS8qIENoZWNrcyBpZiBpdCBpcyBwb3NzaWJsZSB0byBzaG93IHRpbWVzdGFtcCAqLwpAQCAtMjgzLDM4ICs0MDQsMTIgQEAKIAkJZm9yIChzID0gdGltZXN0cjsgKnM7IHMrKykgewogCQkJY2hyID0gcm9tOHgxNl9iaXRzWygqcy0weDMwKSoxNitsaW5lLVRTVEFNUF9NSU5fWV07CiAJCQlmb3IgKGkgPSAwOyBpIDwgNzsgaSsrKSB7Ci0JCQkJaWYgKGNociAmIDEgPDwgKDcgLSBpKSkgewotCQkJCQkvKiBGb250IGNvbG9yKi8KLQkJCQkJciA9IDA7Ci0JCQkJCWcgPSAxOTg7Ci0JCQkJCWIgPSAwOwotCQkJCX0gZWxzZSB7Ci0JCQkJCS8qIEJhY2tncm91bmQgY29sb3IgKi8KLQkJCQkJciA9IGJhcnNbQkxBQ0tdWzBdOwotCQkJCQlnID0gYmFyc1tCTEFDS11bMV07Ci0JCQkJCWIgPSBiYXJzW0JMQUNLXVsyXTsKLQkJCQl9Ci0KIAkJCQlwb3MgPSBpbmlwb3MgKyBqICogMjsKLQkJCQlmb3IgKGNvbG9yID0gMDsgY29sb3IgPCA0OyBjb2xvcisrKSB7Ci0JCQkJCXAgPSBiYXNlcCArIHBvczsKLQotCQkJCQl5ID0gVE9fWShyLCBnLCBiKTsKLQotCQkJCQlzd2l0Y2ggKGNvbG9yKSB7Ci0JCQkJCWNhc2UgMDoKLQkJCQkJY2FzZSAyOgotCQkJCQkJKnAgPSBUT19ZKHIsIGcsIGIpOyAvKiBMdW1hICovCi0JCQkJCQlicmVhazsKLQkJCQkJY2FzZSAxOgotCQkJCQkJKnAgPSBUT19VKHIsIGcsIGIpOyAvKiBDYiAqLwotCQkJCQkJYnJlYWs7Ci0JCQkJCWNhc2UgMzoKLQkJCQkJCSpwID0gVE9fVihyLCBnLCBiKTsgLyogQ3IgKi8KLQkJCQkJCWJyZWFrOwotCQkJCQl9Ci0JCQkJCXBvcysrOwotCQkJCX0KKwkJCQkvKiBEcmF3IHdoaXRlIGZvbnQgb24gYmxhY2sgYmFja2dyb3VuZCAqLworCQkJCWlmIChjaHIgJiAxIDw8ICg3IC0gaSkpCisJCQkJCWdlbl90d29waXgoZmgsIGJhc2VwICsgcG9zLCBXSElURSk7CisJCQkJZWxzZQorCQkJCQlnZW5fdHdvcGl4KGZoLCBiYXNlcCArIHBvcywgQkxBQ0spOwogCQkJCWorKzsKIAkJCX0KIAkJfQpAQCAtMzI0LDggKzQxOSw5IEBACiAJcmV0dXJuOwogfQogCi1zdGF0aWMgdm9pZCB2aXZpX2ZpbGxidWZmKHN0cnVjdCB2aXZpX2RldiAqZGV2LCBzdHJ1Y3Qgdml2aV9idWZmZXIgKmJ1ZikKK3N0YXRpYyB2b2lkIHZpdmlfZmlsbGJ1ZmYoc3RydWN0IHZpdmlfZmggKmZoLCBzdHJ1Y3Qgdml2aV9idWZmZXIgKmJ1ZikKIHsKKwlzdHJ1Y3Qgdml2aV9kZXYgKmRldiA9IGZoLT5kZXY7CiAJaW50IGggLCBwb3MgPSAwOwogCWludCBobWF4ICA9IGJ1Zi0+dmIuaGVpZ2h0OwogCWludCB3bWF4ICA9IGJ1Zi0+dmIud2lkdGg7CkBAIC0zNDEsNyArNDM3LDcgQEAKIAkJcmV0dXJuOwogCiAJZm9yIChoID0gMDsgaCA8IGhtYXg7IGgrKykgewotCQlnZW5fbGluZSh0bXBidWYsIDAsIHdtYXgsIGhtYXgsIGgsIGRldi0+bXZfY291bnQsCisJCWdlbl9saW5lKGZoLCB0bXBidWYsIDAsIHdtYXgsIGhtYXgsIGgsIGRldi0+bXZfY291bnQsCiAJCQkgZGV2LT50aW1lc3RyKTsKIAkJbWVtY3B5KHZidWYgKyBwb3MsIHRtcGJ1Ziwgd21heCAqIDIpOwogCQlwb3MgKz0gd21heCoyOwpAQCAtNDEwLDcgKzUwNiw3IEBACiAJZG9fZ2V0dGltZW9mZGF5KCZidWYtPnZiLnRzKTsKIAogCS8qIEZpbGwgYnVmZmVyICovCi0Jdml2aV9maWxsYnVmZihkZXYsIGJ1Zik7CisJdml2aV9maWxsYnVmZihmaCwgYnVmKTsKIAlkcHJpbnRrKGRldiwgMSwgImZpbGxlZCBidWZmZXIgJXBcbiIsIGJ1Zik7CiAKIAl3YWtlX3VwKCZidWYtPnZiLmRvbmUpOwpAQCAtNjM2LDExICs3MzIsMTUgQEAKIHN0YXRpYyBpbnQgdmlkaW9jX2VudW1fZm10X3ZpZF9jYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgICpwcml2LAogCQkJCQlzdHJ1Y3QgdjRsMl9mbXRkZXNjICpmKQogewotCWlmIChmLT5pbmRleCA+IDApCisJc3RydWN0IHZpdmlfZm10ICpmbXQ7CisKKwlpZiAoZi0+aW5kZXggPj0gQVJSQVlfU0laRShmb3JtYXRzKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlzdHJsY3B5KGYtPmRlc2NyaXB0aW9uLCBmb3JtYXQubmFtZSwgc2l6ZW9mKGYtPmRlc2NyaXB0aW9uKSk7Ci0JZi0+cGl4ZWxmb3JtYXQgPSBmb3JtYXQuZm91cmNjOworCWZtdCA9ICZmb3JtYXRzW2YtPmluZGV4XTsKKworCXN0cmxjcHkoZi0+ZGVzY3JpcHRpb24sIGZtdC0+bmFtZSwgc2l6ZW9mKGYtPmRlc2NyaXB0aW9uKSk7CisJZi0+cGl4ZWxmb3JtYXQgPSBmbXQtPmZvdXJjYzsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNjcwLDEzICs3NzAsMTIgQEAKIAllbnVtIHY0bDJfZmllbGQgZmllbGQ7CiAJdW5zaWduZWQgaW50IG1heHcsIG1heGg7CiAKLQlpZiAoZm9ybWF0LmZvdXJjYyAhPSBmLT5mbXQucGl4LnBpeGVsZm9ybWF0KSB7Ci0JCWRwcmludGsoZGV2LCAxLCAiRm91cmNjIGZvcm1hdCAoMHglMDh4KSBpbnZhbGlkLiAiCi0JCQkiRHJpdmVyIGFjY2VwdHMgb25seSAweCUwOHhcbiIsCi0JCQlmLT5mbXQucGl4LnBpeGVsZm9ybWF0LCBmb3JtYXQuZm91cmNjKTsKKwlmbXQgPSBnZXRfZm9ybWF0KGYpOworCWlmICghZm10KSB7CisJCWRwcmludGsoZGV2LCAxLCAiRm91cmNjIGZvcm1hdCAoMHglMDh4KSBpbnZhbGlkLlxuIiwKKwkJCWYtPmZtdC5waXgucGl4ZWxmb3JtYXQpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9Ci0JZm10ID0gJmZvcm1hdDsKIAogCWZpZWxkID0gZi0+Zm10LnBpeC5maWVsZDsKIApAQCAtNzE0LDYgKzgxMyw4IEBACiB7CiAJc3RydWN0IHZpdmlfZmggICpmaCA9IHByaXY7CiAJc3RydWN0IHZpZGVvYnVmX3F1ZXVlICpxID0gJmZoLT52Yl92aWRxOworCXVuc2lnbmVkIGNoYXIgciwgZywgYjsKKwlpbnQgaywgaXNfeXV2OwogCiAJaW50IHJldCA9IHZpZGlvY190cnlfZm10X3ZpZF9jYXAoZmlsZSwgZmgsIGYpOwogCWlmIChyZXQgPCAwKQpAQCAtNzI3LDEyICs4MjgsNDkgQEAKIAkJZ290byBvdXQ7CiAJfQogCi0JZmgtPmZtdCAgICAgICAgICAgPSAmZm9ybWF0OworCWZoLT5mbXQgICAgICAgICAgID0gZ2V0X2Zvcm1hdChmKTsKIAlmaC0+d2lkdGggICAgICAgICA9IGYtPmZtdC5waXgud2lkdGg7CiAJZmgtPmhlaWdodCAgICAgICAgPSBmLT5mbXQucGl4LmhlaWdodDsKIAlmaC0+dmJfdmlkcS5maWVsZCA9IGYtPmZtdC5waXguZmllbGQ7CiAJZmgtPnR5cGUgICAgICAgICAgPSBmLT50eXBlOwogCisJLyogcHJlY2FsY3VsYXRlIGNvbG9yIGJhciB2YWx1ZXMgdG8gc3BlZWQgdXAgcmVuZGVyaW5nICovCisJZm9yIChrID0gMDsgayA8IDg7IGsrKykgeworCQlyID0gYmFyc1trXVswXTsKKwkJZyA9IGJhcnNba11bMV07CisJCWIgPSBiYXJzW2tdWzJdOworCQlpc195dXYgPSAwOworCisJCXN3aXRjaCAoZmgtPmZtdC0+Zm91cmNjKSB7CisJCWNhc2UgVjRMMl9QSVhfRk1UX1lVWVY6CisJCWNhc2UgVjRMMl9QSVhfRk1UX1VZVlk6CisJCQlpc195dXYgPSAxOworCQkJYnJlYWs7CisJCWNhc2UgVjRMMl9QSVhfRk1UX1JHQjU2NToKKwkJY2FzZSBWNEwyX1BJWF9GTVRfUkdCNTY1WDoKKwkJCXIgPj49IDM7CisJCQlnID4+PSAyOworCQkJYiA+Pj0gMzsKKwkJCWJyZWFrOworCQljYXNlIFY0TDJfUElYX0ZNVF9SR0I1NTU6CisJCWNhc2UgVjRMMl9QSVhfRk1UX1JHQjU1NVg6CisJCQlyID4+PSAzOworCQkJZyA+Pj0gMzsKKwkJCWIgPj49IDM7CisJCQlicmVhazsKKwkJfQorCisJCWlmIChpc195dXYpIHsKKwkJCWZoLT5iYXJzW2tdWzBdID0gVE9fWShyLCBnLCBiKTsJLyogTHVtYSAqLworCQkJZmgtPmJhcnNba11bMV0gPSBUT19VKHIsIGcsIGIpOwkvKiBDYiAqLworCQkJZmgtPmJhcnNba11bMl0gPSBUT19WKHIsIGcsIGIpOwkvKiBDciAqLworCQl9IGVsc2UgeworCQkJZmgtPmJhcnNba11bMF0gPSByOworCQkJZmgtPmJhcnNba11bMV0gPSBnOworCQkJZmgtPmJhcnNba11bMl0gPSBiOworCQl9CisJfQorCiAJcmV0ID0gMDsKIG91dDoKIAltdXRleF91bmxvY2soJnEtPnZiX2xvY2spOwpAQCAtODg2LDggKzEwMjQsNiBAQAogCUZpbGUgb3BlcmF0aW9ucyBmb3IgdGhlIGRldmljZQogICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAotI2RlZmluZSBsaW5lX2J1Zl9zaXplKG5vcm0pIChub3JtX21heHcobm9ybSkqKGZvcm1hdC5kZXB0aCs3KS84KQotCiBzdGF0aWMgaW50IHZpdmlfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKIAlpbnQgbWlub3IgPSBpbWlub3IoaW5vZGUpOwpAQCAtODk4LDkgKzEwMzQsMTEgQEAKIAogCXByaW50ayhLRVJOX0RFQlVHICJ2aXZpOiBvcGVuIGNhbGxlZCAobWlub3I9JWQpXG4iLCBtaW5vcik7CiAKKwlsb2NrX2tlcm5lbCgpOwogCWxpc3RfZm9yX2VhY2hfZW50cnkoZGV2LCAmdml2aV9kZXZsaXN0LCB2aXZpX2Rldmxpc3QpCiAJCWlmIChkZXYtPnZmZC0+bWlub3IgPT0gbWlub3IpCiAJCQlnb3RvIGZvdW5kOworCXVubG9ja19rZXJuZWwoKTsKIAlyZXR1cm4gLUVOT0RFVjsKIAogZm91bmQ6CkBAIC05MjUsMTQgKzEwNjMsMTYgQEAKIAl9CiB1bmxvY2s6CiAJbXV0ZXhfdW5sb2NrKCZkZXYtPm11dGV4KTsKLQlpZiAocmV0dmFsKQorCWlmIChyZXR2YWwpIHsKKwkJdW5sb2NrX2tlcm5lbCgpOwogCQlyZXR1cm4gcmV0dmFsOworCX0KIAogCWZpbGUtPnByaXZhdGVfZGF0YSA9IGZoOwogCWZoLT5kZXYgICAgICA9IGRldjsKIAogCWZoLT50eXBlICAgICA9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRTsKLQlmaC0+Zm10ICAgICAgPSAmZm9ybWF0OworCWZoLT5mbXQgICAgICA9ICZmb3JtYXRzWzBdOwogCWZoLT53aWR0aCAgICA9IDY0MDsKIAlmaC0+aGVpZ2h0ICAgPSA0ODA7CiAKQEAgLTk1NSw2ICsxMDk1LDcgQEAKIAkJCXNpemVvZihzdHJ1Y3Qgdml2aV9idWZmZXIpLCBmaCk7CiAKIAl2aXZpX3N0YXJ0X3RocmVhZChmaCk7CisJdW5sb2NrX2tlcm5lbCgpOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3ZweDMyMjAuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdnB4MzIyMC5jCmluZGV4IDM1MjkzMDI5Li42N2FhMGRiIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3ZweDMyMjAuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3ZweDMyMjAuYwpAQCAtMjIsMzQgKzIyLDIxIEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0KLSNpbmNsdWRlIDxsaW51eC9ieXRlb3JkZXIvc3dhYi5oPgotCi0jaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KLQogI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgotCi0jZGVmaW5lIEkyQ19OQU1FKHgpICh4KS0+bmFtZQotCi0jaW5jbHVkZSA8bGludXgvdmlkZW9kZXYuaD4KICNpbmNsdWRlIDxtZWRpYS92NGwyLWNvbW1vbi5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItaTJjLWRydi1sZWdhY3kuaD4KKyNpbmNsdWRlIDxsaW51eC92aWRlb2Rldi5oPgogI2luY2x1ZGUgPGxpbnV4L3ZpZGVvX2RlY29kZXIuaD4KIAotI2RlZmluZSBJMkNfVlBYMzIyMCAgICAgICAgMHg4NgotI2RlZmluZSBWUFgzMjIwX0RFQlVHCUtFUk5fREVCVUcgInZweDMyMjA6ICIKK01PRFVMRV9ERVNDUklQVElPTigidnB4MzIyMGEvdnB4MzIxNmIvdnB4MzIxNGMgdmlkZW8gZGVjb2RlciBkcml2ZXIiKTsKK01PRFVMRV9BVVRIT1IoIkxhdXJlbnQgUGluY2hhcnQiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIAogc3RhdGljIGludCBkZWJ1ZzsKIG1vZHVsZV9wYXJhbShkZWJ1ZywgaW50LCAwKTsKIE1PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJEZWJ1ZyBsZXZlbCAoMC0xKSIpOwogCi0jZGVmaW5lIGRwcmludGsobnVtLCBmb3JtYXQsIGFyZ3MuLi4pIFwKLQlkbyB7IFwKLQkJaWYgKGRlYnVnID49IG51bSkgXAotCQkJcHJpbnRrKGZvcm1hdCwgIyNhcmdzKTsgXAotCX0gd2hpbGUgKDApCi0KICNkZWZpbmUgVlBYX1RJTUVPVVRfQ09VTlQgIDEwCiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCkBAIC02OSwxMCArNTYsOCBAQAogc3RhdGljIGNoYXIgKmlucHV0c1tdID0geyAiaW50ZXJuYWwiLCAiY29tcG9zaXRlIiwgInN2aWRlbyIgfTsKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLXN0YXRpYyBpbmxpbmUgaW50Ci12cHgzMjIwX3dyaXRlIChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAotCSAgICAgICB1OCAgICAgICAgICAgICAgICAgcmVnLAotCSAgICAgICB1OCAgICAgICAgICAgICAgICAgdmFsdWUpCisKK3N0YXRpYyBpbmxpbmUgaW50IHZweDMyMjBfd3JpdGUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdTggcmVnLCB1OCB2YWx1ZSkKIHsKIAlzdHJ1Y3QgdnB4MzIyMCAqZGVjb2RlciA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwogCkBAIC04MCwxNSArNjUsMTIgQEAKIAlyZXR1cm4gaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsIHJlZywgdmFsdWUpOwogfQogCi1zdGF0aWMgaW5saW5lIGludAotdnB4MzIyMF9yZWFkIChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAotCSAgICAgIHU4ICAgICAgICAgICAgICAgICByZWcpCitzdGF0aWMgaW5saW5lIGludCB2cHgzMjIwX3JlYWQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdTggcmVnKQogewogCXJldHVybiBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LCByZWcpOwogfQogCi1zdGF0aWMgaW50Ci12cHgzMjIwX2ZwX3N0YXR1cyAoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKK3N0YXRpYyBpbnQgdnB4MzIyMF9mcF9zdGF0dXMoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKIHsKIAl1bnNpZ25lZCBjaGFyIHN0YXR1czsKIAl1bnNpZ25lZCBpbnQgaTsKQEAgLTEwOCwxNCArOTAsMTEgQEAKIAlyZXR1cm4gLTE7CiB9CiAKLXN0YXRpYyBpbnQKLXZweDMyMjBfZnBfd3JpdGUgKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCi0JCSAgdTggICAgICAgICAgICAgICAgIGZwYWRkciwKLQkJICB1MTYgICAgICAgICAgICAgICAgZGF0YSkKK3N0YXRpYyBpbnQgdnB4MzIyMF9mcF93cml0ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1OCBmcGFkZHIsIHUxNiBkYXRhKQogewogCS8qIFdyaXRlIHRoZSAxNi1iaXQgYWRkcmVzcyB0byB0aGUgRlBXUiByZWdpc3RlciAqLwogCWlmIChpMmNfc21idXNfd3JpdGVfd29yZF9kYXRhKGNsaWVudCwgMHgyNywgc3dhYjE2KGZwYWRkcikpID09IC0xKSB7Ci0JCWRwcmludGsoMSwgVlBYMzIyMF9ERUJVRyAiJXM6IGZhaWxlZFxuIiwgX19mdW5jX18pOworCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICIlczogZmFpbGVkXG4iLCBfX2Z1bmNfXyk7CiAJCXJldHVybiAtMTsKIAl9CiAKQEAgLTEyNCwyMiArMTAzLDIwIEBACiAKIAkvKiBXcml0ZSB0aGUgMTYtYml0IGRhdGEgdG8gdGhlIEZQREFUIHJlZ2lzdGVyICovCiAJaWYgKGkyY19zbWJ1c193cml0ZV93b3JkX2RhdGEoY2xpZW50LCAweDI4LCBzd2FiMTYoZGF0YSkpID09IC0xKSB7Ci0JCWRwcmludGsoMSwgVlBYMzIyMF9ERUJVRyAiJXM6IGZhaWxlZFxuIiwgX19mdW5jX18pOworCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICIlczogZmFpbGVkXG4iLCBfX2Z1bmNfXyk7CiAJCXJldHVybiAtMTsKIAl9CiAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHUxNgotdnB4MzIyMF9mcF9yZWFkIChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAotCQkgdTE2ICAgICAgICAgICAgICAgIGZwYWRkcikKK3N0YXRpYyB1MTYgdnB4MzIyMF9mcF9yZWFkKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHUxNiBmcGFkZHIpCiB7CiAJczE2IGRhdGE7CiAKIAkvKiBXcml0ZSB0aGUgMTYtYml0IGFkZHJlc3MgdG8gdGhlIEZQUkQgcmVnaXN0ZXIgKi8KIAlpZiAoaTJjX3NtYnVzX3dyaXRlX3dvcmRfZGF0YShjbGllbnQsIDB4MjYsIHN3YWIxNihmcGFkZHIpKSA9PSAtMSkgewotCQlkcHJpbnRrKDEsIFZQWDMyMjBfREVCVUcgIiVzOiBmYWlsZWRcbiIsIF9fZnVuY19fKTsKKwkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAiJXM6IGZhaWxlZFxuIiwgX19mdW5jX18pOwogCQlyZXR1cm4gLTE7CiAJfQogCkBAIC0xNDksMjUgKzEyNiwyMiBAQAogCS8qIFJlYWQgdGhlIDE2LWJpdCBkYXRhIGZyb20gdGhlIEZQREFUIHJlZ2lzdGVyICovCiAJZGF0YSA9IGkyY19zbWJ1c19yZWFkX3dvcmRfZGF0YShjbGllbnQsIDB4MjgpOwogCWlmIChkYXRhID09IC0xKSB7Ci0JCWRwcmludGsoMSwgVlBYMzIyMF9ERUJVRyAiJXM6IGZhaWxlZFxuIiwgX19mdW5jX18pOworCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICIlczogZmFpbGVkXG4iLCBfX2Z1bmNfXyk7CiAJCXJldHVybiAtMTsKIAl9CiAKIAlyZXR1cm4gc3dhYjE2KGRhdGEpOwogfQogCi1zdGF0aWMgaW50Ci12cHgzMjIwX3dyaXRlX2Jsb2NrIChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAotCQkgICAgIGNvbnN0IHU4ICAgICAgICAgICpkYXRhLAotCQkgICAgIHVuc2lnbmVkIGludCAgICAgICBsZW4pCitzdGF0aWMgaW50IHZweDMyMjBfd3JpdGVfYmxvY2soc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgY29uc3QgdTggKmRhdGEsIHVuc2lnbmVkIGludCBsZW4pCiB7CiAJdTggcmVnOwogCWludCByZXQgPSAtMTsKIAogCXdoaWxlIChsZW4gPj0gMikgewogCQlyZWcgPSAqZGF0YSsrOwotCQlpZiAoKHJldCA9Ci0JCSAgICAgdnB4MzIyMF93cml0ZShjbGllbnQsIHJlZywgKmRhdGErKykpIDwgMCkKKwkJcmV0ID0gdnB4MzIyMF93cml0ZShjbGllbnQsIHJlZywgKmRhdGErKyk7CisJCWlmIChyZXQgPCAwKQogCQkJYnJlYWs7CiAJCWxlbiAtPSAyOwogCX0KQEAgLTE3NSwxMCArMTQ5LDggQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50Ci12cHgzMjIwX3dyaXRlX2ZwX2Jsb2NrIChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAotCQkJY29uc3QgdTE2ICAgICAgICAgKmRhdGEsCi0JCQl1bnNpZ25lZCBpbnQgICAgICAgbGVuKQorc3RhdGljIGludCB2cHgzMjIwX3dyaXRlX2ZwX2Jsb2NrKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCisJCWNvbnN0IHUxNiAqZGF0YSwgdW5zaWduZWQgaW50IGxlbikKIHsKIAl1OCByZWc7CiAJaW50IHJldCA9IDA7CkBAIC0yODcsMjUgKzI1OSwyMCBAQAogCTB4NGIsIDB4Mjk4LAkJLyogUExMIGdhaW4gKi8KIH07CiAKLXN0YXRpYyB2b2lkCi12cHgzMjIwX2R1bXBfaTJjIChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQorc3RhdGljIHZvaWQgdnB4MzIyMF9kdW1wX2kyYyhzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQogewogCWludCBsZW4gPSBzaXplb2YoaW5pdF9jb21tb24pOwogCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEgPSBpbml0X2NvbW1vbjsKIAogCXdoaWxlIChsZW4gPiAxKSB7Ci0JCWRwcmludGsoMSwKLQkJCUtFUk5fREVCVUcgInZweDMyMTZiIGkyYyByZWcgMHglMDJ4IGRhdGEgMHglMDJ4XG4iLAorCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJpMmMgcmVnIDB4JTAyeCBkYXRhIDB4JTAyeFxuIiwKIAkJCSpkYXRhLCB2cHgzMjIwX3JlYWQoY2xpZW50LCAqZGF0YSkpOwogCQlkYXRhICs9IDI7CiAJCWxlbiAtPSAyOwogCX0KIH0KIAotc3RhdGljIGludAotdnB4MzIyMF9jb21tYW5kIChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAotCQkgdW5zaWduZWQgaW50ICAgICAgIGNtZCwKLQkJIHZvaWQgICAgICAgICAgICAgICphcmcpCitzdGF0aWMgaW50IHZweDMyMjBfY29tbWFuZChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1bnNpZ25lZCBjbWQsIHZvaWQgKmFyZykKIHsKIAlzdHJ1Y3QgdnB4MzIyMCAqZGVjb2RlciA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwogCkBAIC0zMTcsNyArMjg0LDYgQEAKIAkJdnB4MzIyMF93cml0ZV9mcF9ibG9jayhjbGllbnQsIGluaXRfZnAsCiAJCQkJICAgICAgIHNpemVvZihpbml0X2ZwKSA+PiAxKTsKIAkJc3dpdGNoIChkZWNvZGVyLT5ub3JtKSB7Ci0KIAkJY2FzZSBWSURFT19NT0RFX05UU0M6CiAJCQl2cHgzMjIwX3dyaXRlX2ZwX2Jsb2NrKGNsaWVudCwgaW5pdF9udHNjLAogCQkJCQkgICAgICAgc2l6ZW9mKGluaXRfbnRzYykgPj4gMSk7CkBAIC0zMzYsMjEgKzMwMiwyMCBAQAogCQkJCQkgICAgICAgc2l6ZW9mKGluaXRfcGFsKSA+PiAxKTsKIAkJCWJyZWFrOwogCQl9Ci0JfQogCQlicmVhazsKKwl9CiAKIAljYXNlIERFQ09ERVJfRFVNUDoKIAl7CiAJCXZweDMyMjBfZHVtcF9pMmMoY2xpZW50KTsKLQl9CiAJCWJyZWFrOworCX0KIAogCWNhc2UgREVDT0RFUl9HRVRfQ0FQQUJJTElUSUVTOgogCXsKIAkJc3RydWN0IHZpZGVvX2RlY29kZXJfY2FwYWJpbGl0eSAqY2FwID0gYXJnOwogCi0JCWRwcmludGsoMSwgS0VSTl9ERUJVRyAiJXM6IERFQ09ERVJfR0VUX0NBUEFCSUxJVElFU1xuIiwKLQkJCUkyQ19OQU1FKGNsaWVudCkpOworCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJERUNPREVSX0dFVF9DQVBBQklMSVRJRVNcbiIpOwogCiAJCWNhcC0+ZmxhZ3MgPSBWSURFT19ERUNPREVSX1BBTCB8CiAJCQkgICAgIFZJREVPX0RFQ09ERVJfTlRTQyB8CkBAIC0zNTksMjAgKzMyNCwxOCBAQAogCQkJICAgICBWSURFT19ERUNPREVSX0NDSVI7CiAJCWNhcC0+aW5wdXRzID0gMzsKIAkJY2FwLT5vdXRwdXRzID0gMTsKLQl9CiAJCWJyZWFrOworCX0KIAogCWNhc2UgREVDT0RFUl9HRVRfU1RBVFVTOgogCXsKIAkJaW50IHJlcyA9IDAsIHN0YXR1czsKIAotCQlkcHJpbnRrKDEsIEtFUk5fSU5GTyAiJXM6IERFQ09ERVJfR0VUX1NUQVRVU1xuIiwKLQkJCUkyQ19OQU1FKGNsaWVudCkpOworCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJERUNPREVSX0dFVF9TVEFUVVNcbiIpOwogCiAJCXN0YXR1cyA9IHZweDMyMjBfZnBfcmVhZChjbGllbnQsIDB4MGYzKTsKIAotCQlkcHJpbnRrKDEsIEtFUk5fSU5GTyAiJXM6IHN0YXR1czogMHglMDR4XG4iLCBJMkNfTkFNRShjbGllbnQpLAotCQkJc3RhdHVzKTsKKwkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAic3RhdHVzOiAweCUwNHhcbiIsIHN0YXR1cyk7CiAKIAkJaWYgKHN0YXR1cyA8IDApCiAJCQlyZXR1cm4gc3RhdHVzOwpAQCAtMzgxLDcgKzM0NCw2IEBACiAJCQlyZXMgfD0gREVDT0RFUl9TVEFUVVNfR09PRCB8IERFQ09ERVJfU1RBVFVTX0NPTE9SOwogCiAJCQlzd2l0Y2ggKHN0YXR1cyAmIDB4MTgpIHsKLQogCQkJY2FzZSAweDAwOgogCQkJY2FzZSAweDEwOgogCQkJY2FzZSAweDE0OgpAQCAtNDAyLDggKzM2NCw4IEBACiAJCX0KIAogCQkqKGludCAqKSBhcmcgPSByZXM7Ci0JfQogCQlicmVhazsKKwl9CiAKIAljYXNlIERFQ09ERVJfU0VUX05PUk06CiAJewpAQCAtNDE1LDUwICszNzcsNDMgQEAKIAkJICAgY2hvb3NlbiB2aWRlbyBub3JtICovCiAJCXRlbXBfaW5wdXQgPSB2cHgzMjIwX2ZwX3JlYWQoY2xpZW50LCAweGYyKTsKIAotCQlkcHJpbnRrKDEsIEtFUk5fREVCVUcgIiVzOiBERUNPREVSX1NFVF9OT1JNICVkXG4iLAotCQkJSTJDX05BTUUoY2xpZW50KSwgKmlhcmcpOworCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJERUNPREVSX1NFVF9OT1JNICVkXG4iLCAqaWFyZyk7CiAJCXN3aXRjaCAoKmlhcmcpIHsKLQogCQljYXNlIFZJREVPX01PREVfTlRTQzoKIAkJCXZweDMyMjBfd3JpdGVfZnBfYmxvY2soY2xpZW50LCBpbml0X250c2MsCiAJCQkJCSAgICAgICBzaXplb2YoaW5pdF9udHNjKSA+PiAxKTsKLQkJCWRwcmludGsoMSwgS0VSTl9JTkZPICIlczogbm9ybSBzd2l0Y2hlZCB0byBOVFNDXG4iLAotCQkJCUkyQ19OQU1FKGNsaWVudCkpOworCQkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAibm9ybSBzd2l0Y2hlZCB0byBOVFNDXG4iKTsKIAkJCWJyZWFrOwogCiAJCWNhc2UgVklERU9fTU9ERV9QQUw6CiAJCQl2cHgzMjIwX3dyaXRlX2ZwX2Jsb2NrKGNsaWVudCwgaW5pdF9wYWwsCiAJCQkJCSAgICAgICBzaXplb2YoaW5pdF9wYWwpID4+IDEpOwotCQkJZHByaW50aygxLCBLRVJOX0lORk8gIiVzOiBub3JtIHN3aXRjaGVkIHRvIFBBTFxuIiwKLQkJCQlJMkNfTkFNRShjbGllbnQpKTsKKwkJCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgIm5vcm0gc3dpdGNoZWQgdG8gUEFMXG4iKTsKIAkJCWJyZWFrOwogCiAJCWNhc2UgVklERU9fTU9ERV9TRUNBTToKIAkJCXZweDMyMjBfd3JpdGVfZnBfYmxvY2soY2xpZW50LCBpbml0X3NlY2FtLAogCQkJCQkgICAgICAgc2l6ZW9mKGluaXRfc2VjYW0pID4+IDEpOwotCQkJZHByaW50aygxLCBLRVJOX0lORk8gIiVzOiBub3JtIHN3aXRjaGVkIHRvIFNFQ0FNXG4iLAotCQkJCUkyQ19OQU1FKGNsaWVudCkpOworCQkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAibm9ybSBzd2l0Y2hlZCB0byBTRUNBTVxuIik7CiAJCQlicmVhazsKIAogCQljYXNlIFZJREVPX01PREVfQVVUTzoKIAkJCS8qIEZJWE1FIFRoaXMgaXMgb25seSBwcmVsaW1pbmFyeSBzdXBwb3J0ICovCiAJCQlkYXRhID0gdnB4MzIyMF9mcF9yZWFkKGNsaWVudCwgMHhmMikgJiAweDIwOwogCQkJdnB4MzIyMF9mcF93cml0ZShjbGllbnQsIDB4ZjIsIDB4MDBjMCB8IGRhdGEpOwotCQkJZHByaW50aygxLCBLRVJOX0lORk8gIiVzOiBub3JtIHN3aXRjaGVkIHRvIEF1dG9cbiIsCi0JCQkJSTJDX05BTUUoY2xpZW50KSk7CisJCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJub3JtIHN3aXRjaGVkIHRvIEFVVE9cbiIpOwogCQkJYnJlYWs7CiAKIAkJZGVmYXVsdDoKIAkJCXJldHVybiAtRUlOVkFMOwotCiAJCX0KIAkJZGVjb2Rlci0+bm9ybSA9ICppYXJnOwogCiAJCS8qIEFuZCBoZXJlIHdlIHNldCB0aGUgYmFja2VkIHVwIHZpZGVvIGlucHV0IGFnYWluICovCiAJCXZweDMyMjBfZnBfd3JpdGUoY2xpZW50LCAweGYyLCB0ZW1wX2lucHV0IHwgMHgwMDEwKTsKIAkJdWRlbGF5KDEwKTsKLQl9CiAJCWJyZWFrOworCX0KIAogCWNhc2UgREVDT0RFUl9TRVRfSU5QVVQ6CiAJewpAQCAtNDc3LDggKzQzMiw3IEBACiAJCWlmICgqaWFyZyA8IDAgfHwgKmlhcmcgPiAyKQogCQkJcmV0dXJuIC1FSU5WQUw7CiAKLQkJZHByaW50aygxLCBLRVJOX0lORk8gIiVzOiBpbnB1dCBzd2l0Y2hlZCB0byAlc1xuIiwKLQkJCUkyQ19OQU1FKGNsaWVudCksIGlucHV0c1sqaWFyZ10pOworCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJpbnB1dCBzd2l0Y2hlZCB0byAlc1xuIiwgaW5wdXRzWyppYXJnXSk7CiAKIAkJdnB4MzIyMF93cml0ZShjbGllbnQsIDB4MzMsIGlucHV0WyppYXJnXVswXSk7CiAKQEAgLTQ5MCw4ICs0NDQsOCBAQAogCQkJCSBkYXRhIHwgKGlucHV0WyppYXJnXVsxXSA8PCA1KSB8IDB4MDAxMCk7CiAKIAkJdWRlbGF5KDEwKTsKLQl9CiAJCWJyZWFrOworCX0KIAogCWNhc2UgREVDT0RFUl9TRVRfT1VUUFVUOgogCXsKQEAgLTUwMSwxOSArNDU1LDE4IEBACiAJCWlmICgqaWFyZyAhPSAwKSB7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQotCX0KIAkJYnJlYWs7CisJfQogCiAJY2FzZSBERUNPREVSX0VOQUJMRV9PVVRQVVQ6CiAJewogCQlpbnQgKmlhcmcgPSBhcmc7CiAKLQkJZHByaW50aygxLCBLRVJOX0RFQlVHICIlczogREVDT0RFUl9FTkFCTEVfT1VUUFVUICVkXG4iLAotCQkJSTJDX05BTUUoY2xpZW50KSwgKmlhcmcpOworCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJERUNPREVSX0VOQUJMRV9PVVRQVVQgJWRcbiIsICppYXJnKTsKIAogCQl2cHgzMjIwX3dyaXRlKGNsaWVudCwgMHhmMiwgKCppYXJnID8gMHgxYiA6IDB4MDApKTsKLQl9CiAJCWJyZWFrOworCX0KIAogCWNhc2UgREVDT0RFUl9TRVRfUElDVFVSRToKIAl7CkBAIC01NDQsOCArNDk3LDggQEAKIAkJCXZweDMyMjBfZnBfd3JpdGUoY2xpZW50LCAweDFjLAogCQkJCQkgKChkZWNvZGVyLT5odWUgLSAzMjc2OCkgPj4gNikgJiAweEZGRik7CiAJCX0KLQl9CiAJCWJyZWFrOworCX0KIAogCWRlZmF1bHQ6CiAJCXJldHVybiAtRUlOVkFMOwpAQCAtNTU0LDggKzUwNyw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQKLXZweDMyMjBfaW5pdF9jbGllbnQgKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCitzdGF0aWMgaW50IHZweDMyMjBfaW5pdF9jbGllbnQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKIHsKIAl2cHgzMjIwX3dyaXRlX2Jsb2NrKGNsaWVudCwgaW5pdF9jb21tb24sIHNpemVvZihpbml0X2NvbW1vbikpOwogCXZweDMyMjBfd3JpdGVfZnBfYmxvY2soY2xpZW50LCBpbml0X2ZwLCBzaXplb2YoaW5pdF9mcCkgPj4gMSk7CkBAIC01NjksMTE1ICs1MjEsMjYgQEAKICAqIENsaWVudCBtYW5hZ2VtZW50IGNvZGUKICAqLwogCi0vKgotICogR2VuZXJpYyBpMmMgcHJvYmUKLSAqIGNvbmNlcm5pbmcgdGhlIGFkZHJlc3NlczogaTJjIHdhbnRzIDcgYml0ICh3aXRob3V0IHRoZSByL3cgYml0KSwgc28gJz4+MScKLSAqLwotc3RhdGljIHVuc2lnbmVkIHNob3J0IG5vcm1hbF9pMmNbXSA9Ci0gICAgeyBJMkNfVlBYMzIyMCA+PiAxLCAoSTJDX1ZQWDMyMjAgPj4gMSkgKyA0LAotCUkyQ19DTElFTlRfRU5ECi19Oworc3RhdGljIHVuc2lnbmVkIHNob3J0IG5vcm1hbF9pMmNbXSA9IHsgMHg4NiA+PiAxLCAweDhlID4+IDEsIEkyQ19DTElFTlRfRU5EIH07CiAKLXN0YXRpYyB1bnNpZ25lZCBzaG9ydCBpZ25vcmUgPSBJMkNfQ0xJRU5UX0VORDsKK0kyQ19DTElFTlRfSU5TTU9EOwogCi1zdGF0aWMgc3RydWN0IGkyY19jbGllbnRfYWRkcmVzc19kYXRhIGFkZHJfZGF0YSA9IHsKLQkubm9ybWFsX2kyYwkJPSBub3JtYWxfaTJjLAotCS5wcm9iZQkJCT0gJmlnbm9yZSwKLQkuaWdub3JlCQkJPSAmaWdub3JlLAotfTsKLQotc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIHZweDMyMjBfaTJjX2RyaXZlcjsKLQotc3RhdGljIGludAotdnB4MzIyMF9kZXRhY2hfY2xpZW50IChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQorc3RhdGljIGludCB2cHgzMjIwX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCisJCQljb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpCiB7Ci0Jc3RydWN0IHZweDMyMjAgKmRlY29kZXIgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKLQlpbnQgZXJyOwotCi0JZXJyID0gaTJjX2RldGFjaF9jbGllbnQoY2xpZW50KTsKLQlpZiAoZXJyKSB7Ci0JCXJldHVybiBlcnI7Ci0JfQotCi0Ja2ZyZWUoZGVjb2Rlcik7Ci0Ja2ZyZWUoY2xpZW50KTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50Ci12cHgzMjIwX2RldGVjdF9jbGllbnQgKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlciwKLQkJICAgICAgIGludCAgICAgICAgICAgICAgICAgYWRkcmVzcywKLQkJICAgICAgIGludCAgICAgICAgICAgICAgICAga2luZCkKLXsKLQlpbnQgZXJyOwotCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQ7CiAJc3RydWN0IHZweDMyMjAgKmRlY29kZXI7Ci0KLQlkcHJpbnRrKDEsIFZQWDMyMjBfREVCVUcgIiVzXG4iLCBfX2Z1bmNfXyk7CisJY29uc3QgY2hhciAqbmFtZSA9IE5VTEw7CisJdTggdmVyOworCXUxNiBwbjsKIAogCS8qIENoZWNrIGlmIHRoZSBhZGFwdGVyIHN1cHBvcnRzIHRoZSBuZWVkZWQgZmVhdHVyZXMgKi8KLQlpZiAoIWkyY19jaGVja19mdW5jdGlvbmFsaXR5Ci0JICAgIChhZGFwdGVyLCBJMkNfRlVOQ19TTUJVU19CWVRFX0RBVEEgfCBJMkNfRlVOQ19TTUJVU19XT1JEX0RBVEEpKQotCQlyZXR1cm4gMDsKLQotCWNsaWVudCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBpMmNfY2xpZW50KSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKGNsaWVudCA9PSBOVUxMKSB7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KLQotCWNsaWVudC0+YWRkciA9IGFkZHJlc3M7Ci0JY2xpZW50LT5hZGFwdGVyID0gYWRhcHRlcjsKLQljbGllbnQtPmRyaXZlciA9ICZ2cHgzMjIwX2kyY19kcml2ZXI7Ci0KLQkvKiBDaGVjayBmb3IgbWFudWZhY3R1cmUgSUQgYW5kIHBhcnQgbnVtYmVyICovCi0JaWYgKGtpbmQgPCAwKSB7Ci0JCXU4IGlkOwotCQl1MTYgcG47Ci0KLQkJaWQgPSB2cHgzMjIwX3JlYWQoY2xpZW50LCAweDAwKTsKLQkJaWYgKGlkICE9IDB4ZWMpIHsKLQkJCWRwcmludGsoMSwKLQkJCQlLRVJOX0lORk8KLQkJCQkidnB4MzIyMF9hdHRhY2g6IFdyb25nIG1hbnVmYWN0dXJlciBJRCAoMHglMDJ4KVxuIiwKLQkJCQlpZCk7Ci0JCQlrZnJlZShjbGllbnQpOwotCQkJcmV0dXJuIDA7Ci0JCX0KLQotCQlwbiA9ICh2cHgzMjIwX3JlYWQoY2xpZW50LCAweDAyKSA8PCA4KSArCi0JCSAgICB2cHgzMjIwX3JlYWQoY2xpZW50LCAweDAxKTsKLQkJc3dpdGNoIChwbikgewotCQljYXNlIDB4NDY4MDoKLQkJCXN0cmxjcHkoSTJDX05BTUUoY2xpZW50KSwgInZweDMyMjBhIiwKLQkJCQlzaXplb2YoSTJDX05BTUUoY2xpZW50KSkpOwotCQkJYnJlYWs7Ci0JCWNhc2UgMHg0MjYwOgotCQkJc3RybGNweShJMkNfTkFNRShjbGllbnQpLCAidnB4MzIxNmIiLAotCQkJCXNpemVvZihJMkNfTkFNRShjbGllbnQpKSk7Ci0JCQlicmVhazsKLQkJY2FzZSAweDQyODA6Ci0JCQlzdHJsY3B5KEkyQ19OQU1FKGNsaWVudCksICJ2cHgzMjE0YyIsCi0JCQkJc2l6ZW9mKEkyQ19OQU1FKGNsaWVudCkpKTsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJZHByaW50aygxLAotCQkJCUtFUk5fSU5GTwotCQkJCSIlczogV3JvbmcgcGFydCBudW1iZXIgKDB4JTA0eClcbiIsCi0JCQkJX19mdW5jX18sIHBuKTsKLQkJCWtmcmVlKGNsaWVudCk7Ci0JCQlyZXR1cm4gMDsKLQkJfQotCX0gZWxzZSB7Ci0JCXN0cmxjcHkoSTJDX05BTUUoY2xpZW50KSwgImZvcmNlZCB2cHgzMnh4IiwKLQkJCXNpemVvZihJMkNfTkFNRShjbGllbnQpKSk7Ci0JfQorCWlmICghaTJjX2NoZWNrX2Z1bmN0aW9uYWxpdHkoY2xpZW50LT5hZGFwdGVyLAorCQlJMkNfRlVOQ19TTUJVU19CWVRFX0RBVEEgfCBJMkNfRlVOQ19TTUJVU19XT1JEX0RBVEEpKQorCQlyZXR1cm4gLUVOT0RFVjsKIAogCWRlY29kZXIgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgdnB4MzIyMCksIEdGUF9LRVJORUwpOwotCWlmIChkZWNvZGVyID09IE5VTEwpIHsKLQkJa2ZyZWUoY2xpZW50KTsKKwlpZiAoZGVjb2RlciA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKLQl9CiAJZGVjb2Rlci0+bm9ybSA9IFZJREVPX01PREVfUEFMOwogCWRlY29kZXItPmlucHV0ID0gMDsKIAlkZWNvZGVyLT5lbmFibGUgPSAxOwpAQCAtNjg3LDYzICs1NTAsNTIgQEAKIAlkZWNvZGVyLT5zYXQgPSAzMjc2ODsKIAlpMmNfc2V0X2NsaWVudGRhdGEoY2xpZW50LCBkZWNvZGVyKTsKIAotCWVyciA9IGkyY19hdHRhY2hfY2xpZW50KGNsaWVudCk7Ci0JaWYgKGVycikgewotCQlrZnJlZShjbGllbnQpOwotCQlrZnJlZShkZWNvZGVyKTsKLQkJcmV0dXJuIGVycjsKKwl2ZXIgPSBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LCAweDAwKTsKKwlwbiA9IChpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LCAweDAyKSA8PCA4KSArCisJCWkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsIDB4MDEpOworCWlmICh2ZXIgPT0gMHhlYykgeworCQlzd2l0Y2ggKHBuKSB7CisJCWNhc2UgMHg0NjgwOgorCQkJbmFtZSA9ICJ2cHgzMjIwYSI7CisJCQlicmVhazsKKwkJY2FzZSAweDQyNjA6CisJCQluYW1lID0gInZweDMyMTZiIjsKKwkJCWJyZWFrOworCQljYXNlIDB4NDI4MDoKKwkJCW5hbWUgPSAidnB4MzIxNGMiOworCQkJYnJlYWs7CisJCX0KIAl9Ci0KLQlkcHJpbnRrKDEsIEtFUk5fSU5GTyAiJXM6IHZweDMyeHggY2xpZW50IGZvdW5kIGF0IGFkZHJlc3MgMHglMDJ4XG4iLAotCQlJMkNfTkFNRShjbGllbnQpLCBjbGllbnQtPmFkZHIgPDwgMSk7CisJaWYgKG5hbWUpCisJCXY0bF9pbmZvKGNsaWVudCwgIiVzIGZvdW5kIEAgMHgleCAoJXMpXG4iLCBuYW1lLAorCQkJY2xpZW50LT5hZGRyIDw8IDEsIGNsaWVudC0+YWRhcHRlci0+bmFtZSk7CisJZWxzZQorCQl2NGxfaW5mbyhjbGllbnQsICJjaGlwICglMDJ4OiUwNHgpIGZvdW5kIEAgMHgleCAoJXMpXG4iLAorCQkJdmVyLCBwbiwgY2xpZW50LT5hZGRyIDw8IDEsIGNsaWVudC0+YWRhcHRlci0+bmFtZSk7CiAKIAl2cHgzMjIwX2luaXRfY2xpZW50KGNsaWVudCk7Ci0KIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludAotdnB4MzIyMF9hdHRhY2hfYWRhcHRlciAoc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyKQorc3RhdGljIGludCB2cHgzMjIwX3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQogewotCWludCByZXQ7Ci0KLQlyZXQgPSBpMmNfcHJvYmUoYWRhcHRlciwgJmFkZHJfZGF0YSwgJnZweDMyMjBfZGV0ZWN0X2NsaWVudCk7Ci0JZHByaW50aygxLCBWUFgzMjIwX0RFQlVHICIlczogaTJjX3Byb2JlIHJldHVybmVkICVkXG4iLAotCQlfX2Z1bmNfXywgcmV0KTsKLQlyZXR1cm4gcmV0OworCWtmcmVlKGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpKTsKKwlyZXR1cm4gMDsKIH0KIAotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIERyaXZlciBpbml0aWFsaXphdGlvbiBhbmQgY2xlYW51cCBjb2RlCi0gKi8KLQotc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIHZweDMyMjBfaTJjX2RyaXZlciA9IHsKLQkuZHJpdmVyID0gewotCQkubmFtZSA9ICJ2cHgzMjIwIiwKLQl9LAotCi0JLmlkID0gSTJDX0RSSVZFUklEX1ZQWDMyMjAsCi0KLQkuYXR0YWNoX2FkYXB0ZXIgPSB2cHgzMjIwX2F0dGFjaF9hZGFwdGVyLAotCS5kZXRhY2hfY2xpZW50ID0gdnB4MzIyMF9kZXRhY2hfY2xpZW50LAotCS5jb21tYW5kID0gdnB4MzIyMF9jb21tYW5kLAorc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkIHZweDMyMjBfaWRbXSA9IHsKKwl7ICJ2cHgzMjIwYSIsIDAgfSwKKwl7ICJ2cHgzMjE2YiIsIDAgfSwKKwl7ICJ2cHgzMjE0YyIsIDAgfSwKKwl7IH0KIH07CitNT0RVTEVfREVWSUNFX1RBQkxFKGkyYywgdnB4MzIyMF9pZCk7CiAKLXN0YXRpYyBpbnQgX19pbml0Ci12cHgzMjIwX2luaXQgKHZvaWQpCi17Ci0JcmV0dXJuIGkyY19hZGRfZHJpdmVyKCZ2cHgzMjIwX2kyY19kcml2ZXIpOwotfQotCi1zdGF0aWMgdm9pZCBfX2V4aXQKLXZweDMyMjBfY2xlYW51cCAodm9pZCkKLXsKLQlpMmNfZGVsX2RyaXZlcigmdnB4MzIyMF9pMmNfZHJpdmVyKTsKLX0KLQotbW9kdWxlX2luaXQodnB4MzIyMF9pbml0KTsKLW1vZHVsZV9leGl0KHZweDMyMjBfY2xlYW51cCk7Ci0KLU1PRFVMRV9ERVNDUklQVElPTigidnB4MzIyMGEvdnB4MzIxNmIvdnB4MzIxNGMgdmlkZW8gZGVjb2RlciBkcml2ZXIiKTsKLU1PRFVMRV9BVVRIT1IoIkxhdXJlbnQgUGluY2hhcnQiKTsKLU1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK3N0YXRpYyBzdHJ1Y3QgdjRsMl9pMmNfZHJpdmVyX2RhdGEgdjRsMl9pMmNfZGF0YSA9IHsKKwkubmFtZSA9ICJ2cHgzMjIwIiwKKwkuZHJpdmVyaWQgPSBJMkNfRFJJVkVSSURfVlBYMzIyMCwKKwkuY29tbWFuZCA9IHZweDMyMjBfY29tbWFuZCwKKwkucHJvYmUgPSB2cHgzMjIwX3Byb2JlLAorCS5yZW1vdmUgPSB2cHgzMjIwX3JlbW92ZSwKKwkuaWRfdGFibGUgPSB2cHgzMjIwX2lkLAorfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdzk5NjYuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdzk5NjYuYwppbmRleCAyZmYwMGJjLi5iMmRiZTQ4IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3c5OTY2LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby93OTk2Ni5jCkBAIC0xMTMsNiArMTEzLDcgQEAKIAlzaWduZWQgY2hhciBjb250cmFzdDsKIAlzaWduZWQgY2hhciBjb2xvcjsKIAlzaWduZWQgY2hhciBodWU7CisJdW5zaWduZWQgbG9uZyBpbl91c2U7CiB9OwogCiAvKgpAQCAtMTg0LDEwICsxODUsMjUgQEAKIHN0YXRpYyBzc2l6ZV90IHc5OTY2X3Y0bF9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmLAogCQkJICAgICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpOwogCitzdGF0aWMgaW50IHc5OTY2X2V4Y2x1c2l2ZV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXN0cnVjdCB3OTk2Nl9kZXYgKmNhbSA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CisKKwlyZXR1cm4gdGVzdF9hbmRfc2V0X2JpdCgwLCAmY2FtLT5pbl91c2UpID8gLUVCVVNZIDogMDsKK30KKworc3RhdGljIGludCB3OTk2Nl9leGNsdXNpdmVfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlzdHJ1Y3Qgdzk5NjZfZGV2ICpjYW0gPSB2aWRlb19kcnZkYXRhKGZpbGUpOworCisJY2xlYXJfYml0KDAsICZjYW0tPmluX3VzZSk7CisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHc5OTY2X2ZvcHMgPSB7CiAJLm93bmVyCQk9IFRISVNfTU9EVUxFLAotCS5vcGVuICAgICAgICAgICA9IHZpZGVvX2V4Y2x1c2l2ZV9vcGVuLAotCS5yZWxlYXNlICAgICAgICA9IHZpZGVvX2V4Y2x1c2l2ZV9yZWxlYXNlLAorCS5vcGVuICAgICAgICAgICA9IHc5OTY2X2V4Y2x1c2l2ZV9vcGVuLAorCS5yZWxlYXNlICAgICAgICA9IHc5OTY2X2V4Y2x1c2l2ZV9yZWxlYXNlLAogCS5pb2N0bCAgICAgICAgICA9IHc5OTY2X3Y0bF9pb2N0bCwKICNpZmRlZiBDT05GSUdfQ09NUEFUCiAJLmNvbXBhdF9pb2N0bAk9IHY0bF9jb21wYXRfaW9jdGwzMiwKQEAgLTE5OCw2ICsyMTQsNyBAQAogc3RhdGljIHN0cnVjdCB2aWRlb19kZXZpY2Ugdzk5NjZfdGVtcGxhdGUgPSB7CiAJLm5hbWUgICAgICAgICAgID0gVzk5NjZfRFJJVkVSTkFNRSwKIAkuZm9wcyAgICAgICAgICAgPSAmdzk5NjZfZm9wcywKKwkucmVsZWFzZSAJPSB2aWRlb19kZXZpY2VfcmVsZWFzZV9lbXB0eSwKIH07CiAKIC8qCkBAIC0zMzIsNyArMzQ5LDcgQEAKIAogLy8gRmlsbCBpbiB0aGUgdmlkZW9fZGV2aWNlIHN0cnVjdCBhbmQgcmVnaXN0ZXIgdXMgdG8gdjRsCiAJbWVtY3B5KCZjYW0tPnZkZXYsICZ3OTk2Nl90ZW1wbGF0ZSwgc2l6ZW9mKHN0cnVjdCB2aWRlb19kZXZpY2UpKTsKLQljYW0tPnZkZXYucHJpdiA9IGNhbTsKKwl2aWRlb19zZXRfZHJ2ZGF0YSgmY2FtLT52ZGV2LCBjYW0pOwogCiAJaWYgKHZpZGVvX3JlZ2lzdGVyX2RldmljZSgmY2FtLT52ZGV2LCBWRkxfVFlQRV9HUkFCQkVSLCB2aWRlb19ucikgPCAwKQogCQlyZXR1cm4gLTE7CkBAIC03MTMsOCArNzMwLDcgQEAKIHN0YXRpYyBpbnQgdzk5NjZfdjRsX2RvX2lvY3RsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlLAogCQkJICAgICAgdW5zaWduZWQgaW50IGNtZCwgdm9pZCAqYXJnKQogewotCXN0cnVjdCB2aWRlb19kZXZpY2UgKnZkZXYgPSB2aWRlb19kZXZkYXRhKGZpbGUpOwotCXN0cnVjdCB3OTk2Nl9kZXYgKmNhbSA9IHZkZXYtPnByaXY7CisJc3RydWN0IHc5OTY2X2RldiAqY2FtID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKIAogCXN3aXRjaChjbWQpCiAJewpAQCAtODcyLDggKzg4OCw3IEBACiBzdGF0aWMgc3NpemVfdCB3OTk2Nl92NGxfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciAgX191c2VyICpidWYsCiAJCQkgICAgICBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKIHsKLQlzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2ZGV2ID0gdmlkZW9fZGV2ZGF0YShmaWxlKTsKLQlzdHJ1Y3Qgdzk5NjZfZGV2ICpjYW0gPSB2ZGV2LT5wcml2OworCXN0cnVjdCB3OTk2Nl9kZXYgKmNhbSA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CiAJdW5zaWduZWQgY2hhciBhZGRyID0gMHhhMDsJLy8gRUNQLCByZWFkLCBDQ0QtdHJhbnNmZXIsIDAwMDAwCiAJdW5zaWduZWQgY2hhciBfX3VzZXIgKmRlc3QgPSAodW5zaWduZWQgY2hhciBfX3VzZXIgKilidWY7CiAJdW5zaWduZWQgbG9uZyBkbGVmdCA9IGNvdW50OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby93OTk2OGNmLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3c5OTY4Y2YuYwppbmRleCAxMWVkZjc5Li5kY2Q0NWRiIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3c5OTY4Y2YuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3c5OTY4Y2YuYwpAQCAtMTExLDcgKzExMSw3IEBACiAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgcGFyYW1fbnZbMjRdOyAvKiBudW1iZXIgb2YgdmFsdWVzIHBlciBwYXJhbWV0ZXIgKi8KIAotI2lmZGVmIENPTkZJR19LTU9ECisjaWZkZWYgQ09ORklHX01PRFVMRVMKIG1vZHVsZV9wYXJhbShvdm1vZF9sb2FkLCBib29sLCAwNjQ0KTsKICNlbmRpZgogbW9kdWxlX3BhcmFtKHNpbWNhbXMsIHVzaG9ydCwgMDY0NCk7CkBAIC0xNDQsNyArMTQ0LDcgQEAKIG1vZHVsZV9wYXJhbShzcGVjaWZpY19kZWJ1ZywgYm9vbCwgMDY0NCk7CiAjZW5kaWYKIAotI2lmZGVmIENPTkZJR19LTU9ECisjaWZkZWYgQ09ORklHX01PRFVMRVMKIE1PRFVMRV9QQVJNX0RFU0Mob3Ztb2RfbG9hZCwKIAkJICJcbjwwfDE+IEF1dG9tYXRpYyAnb3ZjYW1jaGlwJyBtb2R1bGUgbG9hZGluZy4iCiAJCSAiXG4wIGRpc2FibGVkLCAxIGVuYWJsZWQuIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby96YzAzMDEvemMwMzAxX2NvcmUuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vemMwMzAxL3pjMDMwMV9jb3JlLmMKaW5kZXggMGMzMjg3Ny4uNmEwOTAyYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby96YzAzMDEvemMwMzAxX2NvcmUuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3pjMDMwMS96YzAzMDFfY29yZS5jCkBAIC02NTcsNyArNjU3LDcgQEAKIAlpZiAoIWRvd25fcmVhZF90cnlsb2NrKCZ6YzAzMDFfZGV2X2xvY2spKQogCQlyZXR1cm4gLUVBR0FJTjsKIAotCWNhbSA9IHZpZGVvX2dldF9kcnZkYXRhKHZpZGVvX2RldmRhdGEoZmlscCkpOworCWNhbSA9IHZpZGVvX2RydmRhdGEoZmlscCk7CiAKIAlpZiAod2FpdF9mb3JfY29tcGxldGlvbl9pbnRlcnJ1cHRpYmxlKCZjYW0tPnByb2JlKSkgewogCQl1cF9yZWFkKCZ6YzAzMDFfZGV2X2xvY2spOwpAQCAtNzM5LDcgKzczOSw3IEBACiAKIAlkb3duX3dyaXRlKCZ6YzAzMDFfZGV2X2xvY2spOwogCi0JY2FtID0gdmlkZW9fZ2V0X2RydmRhdGEodmlkZW9fZGV2ZGF0YShmaWxwKSk7CisJY2FtID0gdmlkZW9fZHJ2ZGF0YShmaWxwKTsKIAogCXpjMDMwMV9zdG9wX3RyYW5zZmVyKGNhbSk7CiAJemMwMzAxX3JlbGVhc2VfYnVmZmVycyhjYW0pOwpAQCAtNzU5LDcgKzc1OSw3IEBACiBzdGF0aWMgc3NpemVfdAogemMwMzAxX3JlYWQoc3RydWN0IGZpbGUqIGZpbHAsIGNoYXIgX191c2VyICogYnVmLCBzaXplX3QgY291bnQsIGxvZmZfdCogZl9wb3MpCiB7Ci0Jc3RydWN0IHpjMDMwMV9kZXZpY2UqIGNhbSA9IHZpZGVvX2dldF9kcnZkYXRhKHZpZGVvX2RldmRhdGEoZmlscCkpOworCXN0cnVjdCB6YzAzMDFfZGV2aWNlICpjYW0gPSB2aWRlb19kcnZkYXRhKGZpbHApOwogCXN0cnVjdCB6YzAzMDFfZnJhbWVfdCogZiwgKiBpOwogCXVuc2lnbmVkIGxvbmcgbG9ja19mbGFnczsKIAlsb25nIHRpbWVvdXQ7CkBAIC04NjYsNyArODY2LDcgQEAKIAogc3RhdGljIHVuc2lnbmVkIGludCB6YzAzMDFfcG9sbChzdHJ1Y3QgZmlsZSAqZmlscCwgcG9sbF90YWJsZSAqd2FpdCkKIHsKLQlzdHJ1Y3QgemMwMzAxX2RldmljZSogY2FtID0gdmlkZW9fZ2V0X2RydmRhdGEodmlkZW9fZGV2ZGF0YShmaWxwKSk7CisJc3RydWN0IHpjMDMwMV9kZXZpY2UgKmNhbSA9IHZpZGVvX2RydmRhdGEoZmlscCk7CiAJc3RydWN0IHpjMDMwMV9mcmFtZV90KiBmOwogCXVuc2lnbmVkIGxvbmcgbG9ja19mbGFnczsKIAl1bnNpZ25lZCBpbnQgbWFzayA9IDA7CkBAIC05NDEsNyArOTQxLDcgQEAKIAogc3RhdGljIGludCB6YzAzMDFfbW1hcChzdHJ1Y3QgZmlsZSogZmlscCwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCiB7Ci0Jc3RydWN0IHpjMDMwMV9kZXZpY2UqIGNhbSA9IHZpZGVvX2dldF9kcnZkYXRhKHZpZGVvX2RldmRhdGEoZmlscCkpOworCXN0cnVjdCB6YzAzMDFfZGV2aWNlICpjYW0gPSB2aWRlb19kcnZkYXRhKGZpbHApOwogCXVuc2lnbmVkIGxvbmcgc2l6ZSA9IHZtYS0+dm1fZW5kIC0gdm1hLT52bV9zdGFydCwKIAkJICAgICAgc3RhcnQgPSB2bWEtPnZtX3N0YXJ0OwogCXZvaWQgKnBvczsKQEAgLTE3OTYsNyArMTc5Niw3IEBACiBzdGF0aWMgaW50IHpjMDMwMV9pb2N0bF92NGwyKHN0cnVjdCBpbm9kZSogaW5vZGUsIHN0cnVjdCBmaWxlKiBmaWxwLAogCQkJICAgICB1bnNpZ25lZCBpbnQgY21kLCB2b2lkIF9fdXNlciAqIGFyZykKIHsKLQlzdHJ1Y3QgemMwMzAxX2RldmljZSogY2FtID0gdmlkZW9fZ2V0X2RydmRhdGEodmlkZW9fZGV2ZGF0YShmaWxwKSk7CisJc3RydWN0IHpjMDMwMV9kZXZpY2UgKmNhbSA9IHZpZGVvX2RydmRhdGEoZmlscCk7CiAKIAlzd2l0Y2ggKGNtZCkgewogCkBAIC0xODkxLDcgKzE4OTEsNyBAQAogc3RhdGljIGludCB6YzAzMDFfaW9jdGwoc3RydWN0IGlub2RlKiBpbm9kZSwgc3RydWN0IGZpbGUqIGZpbHAsCiAJCQl1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKIHsKLQlzdHJ1Y3QgemMwMzAxX2RldmljZSogY2FtID0gdmlkZW9fZ2V0X2RydmRhdGEodmlkZW9fZGV2ZGF0YShmaWxwKSk7CisJc3RydWN0IHpjMDMwMV9kZXZpY2UgKmNhbSA9IHZpZGVvX2RydmRhdGEoZmlscCk7CiAJaW50IGVyciA9IDA7CiAKIAlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZjYW0tPmZpbGVvcF9tdXRleCkpCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3pvcmFuL0tjb25maWcgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3pvcmFuL0tjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGVhNWZhNwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vem9yYW4vS2NvbmZpZwpAQCAtMCwwICsxLDczIEBACitjb25maWcgVklERU9fWk9SQU4KKwl0cmlzdGF0ZSAiWm9yYW4gWlIzNjA1Ny8zNjA2NyBWaWRlbyBGb3IgTGludXgiCisJZGVwZW5kcyBvbiBQQ0kgJiYgSTJDX0FMR09CSVQgJiYgVklERU9fVjRMMSAmJiBWSVJUX1RPX0JVUworCWhlbHAKKwkgIFNheSBZIGZvciBzdXBwb3J0IGZvciBNSlBFRyBjYXB0dXJlIGNhcmRzIGJhc2VkIG9uIHRoZSBab3JhbgorCSAgMzYwNTcvMzYwNjcgUENJIGNvbnRyb2xsZXIgY2hpcHNldC4gVGhpcyBpbmNsdWRlcyB0aGUgSW9tZWdhCisJICBCdXosIFBpbm5hY2xlIERDMTArIGFuZCB0aGUgTGludXggTWVkaWEgTGFicyBMTUwzMy4gVGhlcmUgaXMKKwkgIGEgZHJpdmVyIGhvbWVwYWdlIGF0IDxodHRwOi8vbWpwZWcuc2YubmV0L2RyaXZlci16b3Jhbi8+LiBGb3IKKwkgIG1vcmUgaW5mb3JtYXRpb24sIGNoZWNrIDxmaWxlOkRvY3VtZW50YXRpb24vdmlkZW80bGludXgvWm9yYW4+LgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCB6cjM2MDY3LgorCitjb25maWcgVklERU9fWk9SQU5fREMzMAorCXRyaXN0YXRlICJQaW5uYWNsZS9NaXJvIERDMzAoKykgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIFZJREVPX1pPUkFOCisJc2VsZWN0IFZJREVPX0FEVjcxNzUgaWYgVklERU9fSEVMUEVSX0NISVBTX0FVVE8KKwlzZWxlY3QgVklERU9fVlBYMzIyMCBpZiBWSURFT19IRUxQRVJfQ0hJUFNfQVVUTworCWhlbHAKKwkgIFN1cHBvcnQgZm9yIHRoZSBQaW5uYWNsZS9NaXJvIERDMzAoKykgTUpQRUcgY2FwdHVyZS9wbGF5YmFjaworCSAgY2FyZC4gVGhpcyBhbHNvIHN1cHBvcnRzIHJlYWxseSBvbGQgREMxMCBjYXJkcyBiYXNlZCBvbiB0aGUKKwkgIHpyMzYwNTAgTUpQRUcgY29kZWMgYW5kIHpyMzYwMTYgVkZFLgorCitjb25maWcgVklERU9fWk9SQU5fWlIzNjA2MAorCXRyaXN0YXRlICJab3JhbiBaUjM2MDYwIgorCWRlcGVuZHMgb24gVklERU9fWk9SQU4KKwloZWxwCisJICBTYXkgWSB0byBzdXBwb3J0IFpvcmFuIGJvYXJkcyBiYXNlZCBvbiAzNjA2MCBjaGlwcy4KKwkgIFRoaXMgaW5jbHVkZXMgSW9tZWdhIEJ1eiwgUGlubmFjbGUgREMxMCwgTGludXggbWVkaWEgTGFicyAzMworCSAgYW5kIDMzIFIxMCBhbmQgQXZlck1lZGlhIDYgYm9hcmRzLgorCitjb25maWcgVklERU9fWk9SQU5fQlVaCisJdHJpc3RhdGUgIklvbWVnYSBCdXogc3VwcG9ydCIKKwlkZXBlbmRzIG9uIFZJREVPX1pPUkFOX1pSMzYwNjAKKwlzZWxlY3QgVklERU9fU0FBNzExMSBpZiBWSURFT19IRUxQRVJfQ0hJUFNfQVVUTworCXNlbGVjdCBWSURFT19TQUE3MTg1IGlmIFZJREVPX0hFTFBFUl9DSElQU19BVVRPCisJaGVscAorCSAgU3VwcG9ydCBmb3IgdGhlIElvbWVnYSBCdXogTUpQRUcgY2FwdHVyZS9wbGF5YmFjayBjYXJkLgorCitjb25maWcgVklERU9fWk9SQU5fREMxMAorCXRyaXN0YXRlICJQaW5uYWNsZS9NaXJvIERDMTAoKykgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIFZJREVPX1pPUkFOX1pSMzYwNjAKKwlzZWxlY3QgVklERU9fU0FBNzExMCBpZiBWSURFT19IRUxQRVJfQ0hJUFNfQVVUTworCXNlbGVjdCBWSURFT19BRFY3MTc1IGlmIFZJREVPX0hFTFBFUl9DSElQU19BVVRPCisJaGVscAorCSAgU3VwcG9ydCBmb3IgdGhlIFBpbm5hY2xlL01pcm8gREMxMCgrKSBNSlBFRyBjYXB0dXJlL3BsYXliYWNrCisJICBjYXJkLgorCitjb25maWcgVklERU9fWk9SQU5fTE1MMzMKKwl0cmlzdGF0ZSAiTGludXggTWVkaWEgTGFicyBMTUwzMyBzdXBwb3J0IgorCWRlcGVuZHMgb24gVklERU9fWk9SQU5fWlIzNjA2MAorCXNlbGVjdCBWSURFT19CVDgxOSBpZiBWSURFT19IRUxQRVJfQ0hJUFNfQVVUTworCXNlbGVjdCBWSURFT19CVDg1NiBpZiBWSURFT19IRUxQRVJfQ0hJUFNfQVVUTworCWhlbHAKKwkgIFN1cHBvcnQgZm9yIHRoZSBMaW51eCBNZWRpYSBMYWJzIExNTDMzIE1KUEVHIGNhcHR1cmUvcGxheWJhY2sKKwkgIGNhcmQuCisKK2NvbmZpZyBWSURFT19aT1JBTl9MTUwzM1IxMAorCXRyaXN0YXRlICJMaW51eCBNZWRpYSBMYWJzIExNTDMzUjEwIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBWSURFT19aT1JBTl9aUjM2MDYwCisJc2VsZWN0IFZJREVPX1NBQTcxMTQgaWYgVklERU9fSEVMUEVSX0NISVBTX0FVVE8KKwlzZWxlY3QgVklERU9fQURWNzE3MCBpZiBWSURFT19IRUxQRVJfQ0hJUFNfQVVUTworCWhlbHAKKwkgIHN1cHBvcnQgZm9yIHRoZSBMaW51eCBNZWRpYSBMYWJzIExNTDMzUjEwIE1KUEVHIGNhcHR1cmUvcGxheWJhY2sKKwkgIGNhcmQuCisKK2NvbmZpZyBWSURFT19aT1JBTl9BVlM2RVlFUworCXRyaXN0YXRlICJBdmVyTWVkaWEgNiBFeWVzIHN1cHBvcnQgKEVYUEVSSU1FTlRBTCkiCisJZGVwZW5kcyBvbiBWSURFT19aT1JBTl9aUjM2MDYwICYmIEVYUEVSSU1FTlRBTCAmJiBWSURFT19WNEwxCisJc2VsZWN0IFZJREVPX0JUODU2IGlmIFZJREVPX0hFTFBFUl9DSElQU19BVVRPCisJc2VsZWN0IFZJREVPX0tTMDEyNyBpZiBWSURFT19IRUxQRVJfQ0hJUFNfQVVUTworCWhlbHAKKwkgIFN1cHBvcnQgZm9yIHRoZSBBdmVyTWVkaWEgNiBFeWVzIHZpZGVvIHN1cnZlaWxsYW5jZSBjYXJkLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby96b3Jhbi9NYWtlZmlsZSBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vem9yYW4vTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDRjYzEzMwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vem9yYW4vTWFrZWZpbGUKQEAgLTAsMCArMSw2IEBACit6cjM2MDY3LW9ianMJOj0Jem9yYW5fcHJvY2ZzLm8gem9yYW5fZGV2aWNlLm8gXAorCQkJem9yYW5fZHJpdmVyLm8gem9yYW5fY2FyZC5vCisKK29iai0kKENPTkZJR19WSURFT19aT1JBTikgKz0genIzNjA2Ny5vIHZpZGVvY29kZWMubworb2JqLSQoQ09ORklHX1ZJREVPX1pPUkFOX0RDMzApICs9IHpyMzYwNTAubyB6cjM2MDE2Lm8KK29iai0kKENPTkZJR19WSURFT19aT1JBTl9aUjM2MDYwKSArPSB6cjM2MDYwLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdmlkZW9jb2RlYy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby96b3Jhbi92aWRlb2NvZGVjLmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGRyaXZlcnMvbWVkaWEvdmlkZW8vdmlkZW9jb2RlYy5jCnJlbmFtZSB0byBkcml2ZXJzL21lZGlhL3ZpZGVvL3pvcmFuL3ZpZGVvY29kZWMuYwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby92aWRlb2NvZGVjLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3pvcmFuL3ZpZGVvY29kZWMuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gZHJpdmVycy9tZWRpYS92aWRlby92aWRlb2NvZGVjLmgKcmVuYW1lIHRvIGRyaXZlcnMvbWVkaWEvdmlkZW8vem9yYW4vdmlkZW9jb2RlYy5oCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3pvcmFuLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3pvcmFuL3pvcmFuLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGRyaXZlcnMvbWVkaWEvdmlkZW8vem9yYW4uaApyZW5hbWUgdG8gZHJpdmVycy9tZWRpYS92aWRlby96b3Jhbi96b3Jhbi5oCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3pvcmFuL3pvcmFuX2NhcmQuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vem9yYW4vem9yYW5fY2FyZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhNWYyZjgKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3pvcmFuL3pvcmFuX2NhcmQuYwpAQCAtMCwwICsxLDE2NzEgQEAKKy8qCisgKiBab3JhbiB6cjM2MDU3L3pyMzYwNjcgUENJIGNvbnRyb2xsZXIgZHJpdmVyLCBmb3IgdGhlCisgKiBQaW5uYWNsZS9NaXJvIERDMTAvREMxMCsvREMzMC9EQzMwKywgSW9tZWdhIEJ1eiwgTGludXgKKyAqIE1lZGlhIExhYnMgTE1MMzMvTE1MMzNSMTAuCisgKgorICogVGhpcyBwYXJ0IGhhbmRsZXMgY2FyZC1zcGVjaWZpYyBkYXRhIGFuZCBkZXRlY3Rpb24KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgU2VyZ3VlaSBNaXJpZG9ub3YgPG1pcnNldkBjaWNlc2UubXg+CisgKgorICogQ3VycmVudGx5IG1haW50YWluZWQgYnk6CisgKiAgIFJvbmFsZCBCdWx0amUgICAgPHJidWx0amVAcm9uYWxkLmJpdGZyZWFrLm5ldD4KKyAqICAgTGF1cmVudCBQaW5jaGFydCA8bGF1cmVudC5waW5jaGFydEBza3luZXQuYmU+CisgKiAgIE1haWxpbmdsaXN0ICAgICAgPG1qcGVnLXVzZXJzQGxpc3RzLnNmLm5ldD4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworCisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KKworI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMtYWxnby1iaXQuaD4KKyNpbmNsdWRlIDxsaW51eC92aWRlb2Rldi5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItY29tbW9uLmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9zZW0uaD4KKyNpbmNsdWRlIDxsaW51eC9rbW9kLmg+CisjaW5jbHVkZSA8bGludXgvd2FpdC5oPgorCisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvdmlkZW9fZGVjb2Rlci5oPgorI2luY2x1ZGUgPGxpbnV4L3ZpZGVvX2VuY29kZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgorCisjaW5jbHVkZSA8YXNtL2lvLmg+CisKKyNpbmNsdWRlICJ2aWRlb2NvZGVjLmgiCisjaW5jbHVkZSAiem9yYW4uaCIKKyNpbmNsdWRlICJ6b3Jhbl9jYXJkLmgiCisjaW5jbHVkZSAiem9yYW5fZGV2aWNlLmgiCisjaW5jbHVkZSAiem9yYW5fcHJvY2ZzLmgiCisKK2V4dGVybiBjb25zdCBzdHJ1Y3Qgem9yYW5fZm9ybWF0IHpvcmFuX2Zvcm1hdHNbXTsKKworc3RhdGljIGludCBjYXJkW0JVWl9NQVhdID0geyAtMSwgLTEsIC0xLCAtMSB9OworbW9kdWxlX3BhcmFtX2FycmF5KGNhcmQsIGludCwgTlVMTCwgMDQ0NCk7CitNT0RVTEVfUEFSTV9ERVNDKGNhcmQsICJUaGUgdHlwZSBvZiBjYXJkIik7CisKK3N0YXRpYyBpbnQgZW5jb2RlcltCVVpfTUFYXSA9IHsgLTEsIC0xLCAtMSwgLTEgfTsKK21vZHVsZV9wYXJhbV9hcnJheShlbmNvZGVyLCBpbnQsIE5VTEwsIDA0NDQpOworTU9EVUxFX1BBUk1fREVTQyhlbmNvZGVyLCAiaTJjIFRWIGVuY29kZXIiKTsKKworc3RhdGljIGludCBkZWNvZGVyW0JVWl9NQVhdID0geyAtMSwgLTEsIC0xLCAtMSB9OworbW9kdWxlX3BhcmFtX2FycmF5KGRlY29kZXIsIGludCwgTlVMTCwgMDQ0NCk7CitNT0RVTEVfUEFSTV9ERVNDKGRlY29kZXIsICJpMmMgVFYgZGVjb2RlciIpOworCisvKgorICAgVGhlIHZpZGVvIG1lbSBhZGRyZXNzIG9mIHRoZSB2aWRlbyBjYXJkLgorICAgVGhlIGRyaXZlciBoYXMgYSBsaXR0bGUgZGF0YWJhc2UgZm9yIHNvbWUgdmlkZW9jYXJkcworICAgdG8gZGV0ZXJtaW5lIGl0IGZyb20gdGhlcmUuIElmIHlvdXIgdmlkZW8gY2FyZCBpcyBub3QgaW4gdGhlcmUKKyAgIHlvdSBoYXZlIGVpdGhlciB0byBnaXZlIGl0IHRvIHRoZSBkcml2ZXIgYXMgYSBwYXJhbWV0ZXIKKyAgIG9yIHNldCBpbiBpbiBhIFZJRElPQ1NGQlVGIGlvY3RsCisgKi8KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgdmlkbWVtOwkvKiBkZWZhdWx0ID0gMCAtIFZpZGVvIG1lbW9yeSBiYXNlIGFkZHJlc3MgKi8KK21vZHVsZV9wYXJhbSh2aWRtZW0sIHVsb25nLCAwNDQ0KTsKK01PRFVMRV9QQVJNX0RFU0ModmlkbWVtLCAiRGVmYXVsdCB2aWRlbyBtZW1vcnkgYmFzZSBhZGRyZXNzIik7CisKKy8qCisgICBEZWZhdWx0IGlucHV0IGFuZCB2aWRlbyBub3JtIGF0IHN0YXJ0dXAgb2YgdGhlIGRyaXZlci4KKyovCisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgZGVmYXVsdF9pbnB1dDsJLyogZGVmYXVsdCAwID0gQ29tcG9zaXRlLCAxID0gUy1WaWRlbyAqLworbW9kdWxlX3BhcmFtKGRlZmF1bHRfaW5wdXQsIHVpbnQsIDA0NDQpOworTU9EVUxFX1BBUk1fREVTQyhkZWZhdWx0X2lucHV0LAorCQkgIkRlZmF1bHQgaW5wdXQgKDA9Q29tcG9zaXRlLCAxPVMtVmlkZW8sIDI9SW50ZXJuYWwpIik7CisKK3N0YXRpYyBpbnQgZGVmYXVsdF9tdXggPSAxOwkvKiA2IEV5ZXMgaW5wdXQgc2VsZWN0aW9uICovCittb2R1bGVfcGFyYW0oZGVmYXVsdF9tdXgsIGludCwgMDY0NCk7CitNT0RVTEVfUEFSTV9ERVNDKGRlZmF1bHRfbXV4LAorCQkgIkRlZmF1bHQgNiBFeWVzIG11eCBzZXR0aW5nIChJbnB1dCBzZWxlY3Rpb24pIik7CisKK3N0YXRpYyBpbnQgZGVmYXVsdF9ub3JtOwkvKiBkZWZhdWx0IDAgPSBQQUwsIDEgPSBOVFNDIDIgPSBTRUNBTSAqLworbW9kdWxlX3BhcmFtKGRlZmF1bHRfbm9ybSwgaW50LCAwNDQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoZGVmYXVsdF9ub3JtLCAiRGVmYXVsdCBub3JtICgwPVBBTCwgMT1OVFNDLCAyPVNFQ0FNKSIpOworCisvKiAvZGV2L3ZpZGVvTiwgLTEgZm9yIGF1dG9kZXRlY3QgKi8KK3N0YXRpYyBpbnQgdmlkZW9fbnJbQlVaX01BWF0gPSB7LTEsIC0xLCAtMSwgLTF9OworbW9kdWxlX3BhcmFtX2FycmF5KHZpZGVvX25yLCBpbnQsIE5VTEwsIDA0NDQpOworTU9EVUxFX1BBUk1fREVTQyh2aWRlb19uciwgInZpZGVvIGRldmljZSBudW1iZXIgKC0xPUF1dG8pIik7CisKKy8qCisgICBOdW1iZXIgYW5kIHNpemUgb2YgZ3JhYiBidWZmZXJzIGZvciBWaWRlbyA0IExpbnV4CisgICBUaGUgdmFzdCBtYWpvcml0eSBvZiBhcHBsaWNhdGlvbnMgc2hvdWxkIG5vdCBuZWVkIG1vcmUgdGhhbiAyLAorICAgdGhlIHZlcnkgcG9wdWxhciBCVFRWIGRyaXZlciBhY3R1YWxseSBkb2VzIE9OTFkgaGF2ZSAyLgorICAgVGltZSBzZW5zaXRpdmUgYXBwbGljYXRpb25zIG1pZ2h0IG5lZWQgbW9yZSwgdGhlIG1heGltdW0KKyAgIGlzIFZJREVPX01BWF9GUkFNRSAoZGVmaW5lZCBpbiA8bGludXgvdmlkZW9kZXYuaD4pLgorCisgICBUaGUgc2l6ZSBpcyBzZXQgc28gdGhhdCB0aGUgbWF4aW11bSBwb3NzaWJsZSByZXF1ZXN0CisgICBjYW4gYmUgc2F0aXNmaWVkLiBEZWNyZWFzZSAgaXQsIGlmIGJpZ3BoeXNfYXJlYSBhbGxvYydkCisgICBtZW1vcnkgaXMgbG93LiBJZiB5b3UgZG9uJ3QgaGF2ZSB0aGUgYmlncGh5c19hcmVhIHBhdGNoLAorICAgc2V0IGl0IHRvIDEyOCBLQi4gV2lsbCB5b3UgYWxsb3cgb25seSB0byBncmFiIHNtYWxsCisgICBpbWFnZXMgd2l0aCBWNEwsIGJ1dCB0aGF0J3MgYmV0dGVyIHRoYW4gbm90aGluZy4KKworICAgdjRsX2J1ZnNpemUgaGFzIHRvIGJlIGdpdmVuIGluIEtCICEKKworKi8KKworaW50IHY0bF9uYnVmcyA9IDI7CitpbnQgdjRsX2J1ZnNpemUgPSAxMjg7CQkvKiBFdmVyeWJvZHkgc2hvdWxkIGJlIGFibGUgdG8gd29yayB3aXRoIHRoaXMgc2V0dGluZyAqLworbW9kdWxlX3BhcmFtKHY0bF9uYnVmcywgaW50LCAwNjQ0KTsKK01PRFVMRV9QQVJNX0RFU0ModjRsX25idWZzLCAiTWF4aW11bSBudW1iZXIgb2YgVjRMIGJ1ZmZlcnMgdG8gdXNlIik7Cittb2R1bGVfcGFyYW0odjRsX2J1ZnNpemUsIGludCwgMDY0NCk7CitNT0RVTEVfUEFSTV9ERVNDKHY0bF9idWZzaXplLCAiTWF4aW11bSBzaXplIHBlciBWNEwgYnVmZmVyIChpbiBrQikiKTsKKworaW50IGpwZ19uYnVmcyA9IDMyOworaW50IGpwZ19idWZzaXplID0gNTEyOwkJLyogbWF4IHNpemUgZm9yIDEwMCUgcXVhbGl0eSBmdWxsLVBBTCBmcmFtZSAqLworbW9kdWxlX3BhcmFtKGpwZ19uYnVmcywgaW50LCAwNjQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoanBnX25idWZzLCAiTWF4aW11bSBudW1iZXIgb2YgSlBHIGJ1ZmZlcnMgdG8gdXNlIik7Cittb2R1bGVfcGFyYW0oanBnX2J1ZnNpemUsIGludCwgMDY0NCk7CitNT0RVTEVfUEFSTV9ERVNDKGpwZ19idWZzaXplLCAiTWF4aW11bSBzaXplIHBlciBKUEcgYnVmZmVyIChpbiBrQikiKTsKKworaW50IHBhc3NfdGhyb3VnaCA9IDA7CQkvKiAxPVBhc3MgdGhyb3VnaCBUViBzaWduYWwgd2hlbiBkZXZpY2UgaXMgbm90IHVzZWQgKi8KKwkJCQkvKiAwPVNob3cgY29sb3IgYmFyIHdoZW4gZGV2aWNlIGlzIG5vdCB1c2VkIChMTUwzMzogb25seSBpZiBsbWwzM2RwYXRoPTEpICovCittb2R1bGVfcGFyYW0ocGFzc190aHJvdWdoLCBpbnQsIDA2NDQpOworTU9EVUxFX1BBUk1fREVTQyhwYXNzX3Rocm91Z2gsCisJCSAiUGFzcyBUViBzaWduYWwgdGhyb3VnaCB0byBUVi1vdXQgd2hlbiBpZGxpbmciKTsKKworaW50IHpyMzYwNjdfZGVidWcgPSAxOworbW9kdWxlX3BhcmFtX25hbWVkKGRlYnVnLCB6cjM2MDY3X2RlYnVnLCBpbnQsIDA2NDQpOworTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgIkRlYnVnIGxldmVsICgwLTUpIik7CisKK01PRFVMRV9ERVNDUklQVElPTigiWm9yYW4tMzYwNTcvMzYwNjcgSlBFRyBjb2RlYyBkcml2ZXIiKTsKK01PRFVMRV9BVVRIT1IoIlNlcmd1ZWkgTWlyaWRvbm92Iik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKK3N0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCB6cjM2MDY3X3BjaV90YmxbXSA9IHsKKwl7UENJX1ZFTkRPUl9JRF9aT1JBTiwgUENJX0RFVklDRV9JRF9aT1JBTl8zNjA1NywKKwkgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCisJezB9Cit9OworTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIHpyMzYwNjdfcGNpX3RibCk7CisKK2ludCB6b3Jhbl9udW07CQkJLyogbnVtYmVyIG9mIEJ1enMgaW4gdXNlICovCitzdHJ1Y3Qgem9yYW4gKnpvcmFuW0JVWl9NQVhdOworCisvKiB2aWRlb2NvZGVjIGJ1cyBmdW5jdGlvbnMgWlIzNjA2MCAqLworc3RhdGljIHUzMgorenIzNjA2MF9yZWFkIChzdHJ1Y3QgdmlkZW9jb2RlYyAqY29kZWMsCisJICAgICAgdTE2ICAgICAgICAgICAgICAgIHJlZykKK3sKKwlzdHJ1Y3Qgem9yYW4gKnpyID0gKHN0cnVjdCB6b3JhbiAqKSBjb2RlYy0+bWFzdGVyX2RhdGEtPmRhdGE7CisJX191MzIgZGF0YTsKKworCWlmIChwb3N0X29mZmljZV93YWl0KHpyKQorCSAgICB8fCBwb3N0X29mZmljZV93cml0ZSh6ciwgMCwgMSwgcmVnID4+IDgpCisJICAgIHx8IHBvc3Rfb2ZmaWNlX3dyaXRlKHpyLCAwLCAyLCByZWcgJiAweGZmKSkgeworCQlyZXR1cm4gLTE7CisJfQorCisJZGF0YSA9IHBvc3Rfb2ZmaWNlX3JlYWQoenIsIDAsIDMpICYgMHhmZjsKKwlyZXR1cm4gZGF0YTsKK30KKworc3RhdGljIHZvaWQKK3pyMzYwNjBfd3JpdGUgKHN0cnVjdCB2aWRlb2NvZGVjICpjb2RlYywKKwkgICAgICAgdTE2ICAgICAgICAgICAgICAgIHJlZywKKwkgICAgICAgdTMyICAgICAgICAgICAgICAgIHZhbCkKK3sKKwlzdHJ1Y3Qgem9yYW4gKnpyID0gKHN0cnVjdCB6b3JhbiAqKSBjb2RlYy0+bWFzdGVyX2RhdGEtPmRhdGE7CisKKwlpZiAocG9zdF9vZmZpY2Vfd2FpdCh6cikKKwkgICAgfHwgcG9zdF9vZmZpY2Vfd3JpdGUoenIsIDAsIDEsIHJlZyA+PiA4KQorCSAgICB8fCBwb3N0X29mZmljZV93cml0ZSh6ciwgMCwgMiwgcmVnICYgMHhmZikpIHsKKwkJcmV0dXJuOworCX0KKworCXBvc3Rfb2ZmaWNlX3dyaXRlKHpyLCAwLCAzLCB2YWwgJiAweGZmKTsKK30KKworLyogdmlkZW9jb2RlYyBidXMgZnVuY3Rpb25zIFpSMzYwNTAgKi8KK3N0YXRpYyB1MzIKK3pyMzYwNTBfcmVhZCAoc3RydWN0IHZpZGVvY29kZWMgKmNvZGVjLAorCSAgICAgIHUxNiAgICAgICAgICAgICAgICByZWcpCit7CisJc3RydWN0IHpvcmFuICp6ciA9IChzdHJ1Y3Qgem9yYW4gKikgY29kZWMtPm1hc3Rlcl9kYXRhLT5kYXRhOworCV9fdTMyIGRhdGE7CisKKwlpZiAocG9zdF9vZmZpY2Vfd2FpdCh6cikKKwkgICAgfHwgcG9zdF9vZmZpY2Vfd3JpdGUoenIsIDEsIDAsIHJlZyA+PiAyKSkgewkvLyByZWcuIEhJR0hCWVRFUworCQlyZXR1cm4gLTE7CisJfQorCisJZGF0YSA9IHBvc3Rfb2ZmaWNlX3JlYWQoenIsIDAsIHJlZyAmIDB4MDMpICYgMHhmZjsJLy8gcmVnLiBMT1dCWVRFUyArIHJlYWQKKwlyZXR1cm4gZGF0YTsKK30KKworc3RhdGljIHZvaWQKK3pyMzYwNTBfd3JpdGUgKHN0cnVjdCB2aWRlb2NvZGVjICpjb2RlYywKKwkgICAgICAgdTE2ICAgICAgICAgICAgICAgIHJlZywKKwkgICAgICAgdTMyICAgICAgICAgICAgICAgIHZhbCkKK3sKKwlzdHJ1Y3Qgem9yYW4gKnpyID0gKHN0cnVjdCB6b3JhbiAqKSBjb2RlYy0+bWFzdGVyX2RhdGEtPmRhdGE7CisKKwlpZiAocG9zdF9vZmZpY2Vfd2FpdCh6cikKKwkgICAgfHwgcG9zdF9vZmZpY2Vfd3JpdGUoenIsIDEsIDAsIHJlZyA+PiAyKSkgewkvLyByZWcuIEhJR0hCWVRFUworCQlyZXR1cm47CisJfQorCisJcG9zdF9vZmZpY2Vfd3JpdGUoenIsIDAsIHJlZyAmIDB4MDMsIHZhbCAmIDB4ZmYpOwkvLyByZWcuIExPV0JZVEVTICsgd3IuIGRhdGEKK30KKworLyogdmlkZW9jb2RlYyBidXMgZnVuY3Rpb25zIFpSMzYwMTYgKi8KK3N0YXRpYyB1MzIKK3pyMzYwMTZfcmVhZCAoc3RydWN0IHZpZGVvY29kZWMgKmNvZGVjLAorCSAgICAgIHUxNiAgICAgICAgICAgICAgICByZWcpCit7CisJc3RydWN0IHpvcmFuICp6ciA9IChzdHJ1Y3Qgem9yYW4gKikgY29kZWMtPm1hc3Rlcl9kYXRhLT5kYXRhOworCV9fdTMyIGRhdGE7CisKKwlpZiAocG9zdF9vZmZpY2Vfd2FpdCh6cikpIHsKKwkJcmV0dXJuIC0xOworCX0KKworCWRhdGEgPSBwb3N0X29mZmljZV9yZWFkKHpyLCAyLCByZWcgJiAweDAzKSAmIDB4ZmY7CS8vIHJlYWQKKwlyZXR1cm4gZGF0YTsKK30KKworLyogaGFjayBmb3IgaW4gem9yYW5fZGV2aWNlLmMgKi8KK3ZvaWQKK3pyMzYwMTZfd3JpdGUgKHN0cnVjdCB2aWRlb2NvZGVjICpjb2RlYywKKwkgICAgICAgdTE2ICAgICAgICAgICAgICAgIHJlZywKKwkgICAgICAgdTMyICAgICAgICAgICAgICAgIHZhbCkKK3sKKwlzdHJ1Y3Qgem9yYW4gKnpyID0gKHN0cnVjdCB6b3JhbiAqKSBjb2RlYy0+bWFzdGVyX2RhdGEtPmRhdGE7CisKKwlpZiAocG9zdF9vZmZpY2Vfd2FpdCh6cikpIHsKKwkJcmV0dXJuOworCX0KKworCXBvc3Rfb2ZmaWNlX3dyaXRlKHpyLCAyLCByZWcgJiAweDAzLCB2YWwgJiAweDBmZik7CS8vIHdyLiBkYXRhCit9CisKKy8qCisgKiBCb2FyZCBzcGVjaWZpYyBpbmZvcm1hdGlvbgorICovCisKK3N0YXRpYyB2b2lkCitkYzEwX2luaXQgKHN0cnVjdCB6b3JhbiAqenIpCit7CisJZHByaW50aygzLCBLRVJOX0RFQlVHICIlczogZGMxMF9pbml0KClcbiIsIFpSX0RFVk5BTUUoenIpKTsKKworCS8qIFBpeGVsIGNsb2NrIHNlbGVjdGlvbiAqLworCUdQSU8oenIsIDQsIDApOworCUdQSU8oenIsIDUsIDEpOworCS8qIEVuYWJsZSB0aGUgdmlkZW8gYnVzIHN5bmMgc2lnbmFscyAqLworCUdQSU8oenIsIDcsIDApOworfQorCitzdGF0aWMgdm9pZAorZGMxMHBsdXNfaW5pdCAoc3RydWN0IHpvcmFuICp6cikKK3sKKwlkcHJpbnRrKDMsIEtFUk5fREVCVUcgIiVzOiBkYzEwcGx1c19pbml0KClcbiIsIFpSX0RFVk5BTUUoenIpKTsKK30KKworc3RhdGljIHZvaWQKK2J1el9pbml0IChzdHJ1Y3Qgem9yYW4gKnpyKQoreworCWRwcmludGsoMywgS0VSTl9ERUJVRyAiJXM6IGJ1el9pbml0KClcbiIsIFpSX0RFVk5BTUUoenIpKTsKKworCS8qIHNvbWUgc3R1ZmYgZnJvbSBJb21lZ2EgKi8KKwlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKHpyLT5wY2lfZGV2LCAweGZjLCAweDkwNjgwZjE1KTsKKwlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKHpyLT5wY2lfZGV2LCAweDBjLCAweDAwMDEyMDIwKTsKKwlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKHpyLT5wY2lfZGV2LCAweGU4LCAweGMwMjAwMDAwKTsKK30KKworc3RhdGljIHZvaWQKK2xtbDMzX2luaXQgKHN0cnVjdCB6b3JhbiAqenIpCit7CisJZHByaW50aygzLCBLRVJOX0RFQlVHICIlczogbG1sMzNfaW5pdCgpXG4iLCBaUl9ERVZOQU1FKHpyKSk7CisKKwlHUElPKHpyLCAyLCAxKTsJCS8vIFNldCBDb21wb3NpdGUgaW5wdXQvb3V0cHV0Cit9CisKK3N0YXRpYyB2b2lkCithdnM2ZXllc19pbml0IChzdHJ1Y3Qgem9yYW4gKnpyKQoreworCS8vIEF2ZXJNZWRpYSA2LUV5ZXMgb3JpZ2luYWwgZHJpdmVyIGJ5IENocmlzdGVyIFdlaW5pZ2VsCisKKwkvLyBMaWZ0ZWQgc3RyYWlnaHQgZnJvbSBDaHJpc3RlcidzIG9sZCBkcml2ZXIgYW5kCisJLy8gbW9kaWZpZWQgc2xpZ2h0bHkgYnkgTWFydGluIFNhbXVlbHNzb24uCisKKwlpbnQgbXV4ID0gZGVmYXVsdF9tdXg7IC8qIDEgPSBCVDg2NiwgNyA9IFZJRDEgKi8KKworCUdQSU8oenIsIDQsIDEpOyAvKiBCdDg2NiBTTEVFUCBvbiAqLworCXVkZWxheSgyKTsKKworCUdQSU8oenIsIDAsIDEpOyAvKiBaUjM2MDYwIC9SRVNFVCBvbiAqLworCUdQSU8oenIsIDEsIDApOyAvKiBaUjM2MDYwIC9TTEVFUCBvbiAqLworCUdQSU8oenIsIDIsIG11eCAmIDEpOyAgIC8qIE1VWCBTMCAqLworCUdQSU8oenIsIDMsIDApOyAvKiAvRlJBTUUgb24gKi8KKwlHUElPKHpyLCA0LCAwKTsgLyogQnQ4NjYgU0xFRVAgb2ZmICovCisJR1BJTyh6ciwgNSwgbXV4ICYgMik7ICAgLyogTVVYIFMxICovCisJR1BJTyh6ciwgNiwgMCk7IC8qID8gKi8KKwlHUElPKHpyLCA3LCBtdXggJiA0KTsgICAvKiBNVVggUzIgKi8KKworfQorCitzdGF0aWMgY2hhciAqCitpMmNpZF90b19tb2R1bGVuYW1lICh1MTYgaTJjX2lkKQoreworCWNoYXIgKm5hbWUgPSBOVUxMOworCisJc3dpdGNoIChpMmNfaWQpIHsKKwljYXNlIEkyQ19EUklWRVJJRF9TQUE3MTEwOgorCQluYW1lID0gInNhYTcxMTAiOworCQlicmVhazsKKwljYXNlIEkyQ19EUklWRVJJRF9TQUE3MTExQToKKwkJbmFtZSA9ICJzYWE3MTExIjsKKwkJYnJlYWs7CisJY2FzZSBJMkNfRFJJVkVSSURfU0FBNzExNDoKKwkJbmFtZSA9ICJzYWE3MTE0IjsKKwkJYnJlYWs7CisJY2FzZSBJMkNfRFJJVkVSSURfU0FBNzE4NUI6CisJCW5hbWUgPSAic2FhNzE4NSI7CisJCWJyZWFrOworCWNhc2UgSTJDX0RSSVZFUklEX0FEVjcxNzA6CisJCW5hbWUgPSAiYWR2NzE3MCI7CisJCWJyZWFrOworCWNhc2UgSTJDX0RSSVZFUklEX0FEVjcxNzU6CisJCW5hbWUgPSAiYWR2NzE3NSI7CisJCWJyZWFrOworCWNhc2UgSTJDX0RSSVZFUklEX0JUODE5OgorCQluYW1lID0gImJ0ODE5IjsKKwkJYnJlYWs7CisJY2FzZSBJMkNfRFJJVkVSSURfQlQ4NTY6CisJCW5hbWUgPSAiYnQ4NTYiOworCQlicmVhazsKKwljYXNlIEkyQ19EUklWRVJJRF9CVDg2NjoKKwkJbmFtZSA9ICJidDg2NiI7CisJCWJyZWFrOworCWNhc2UgSTJDX0RSSVZFUklEX1ZQWDMyMjA6CisJCW5hbWUgPSAidnB4MzIyMCI7CisJCWJyZWFrOworCWNhc2UgSTJDX0RSSVZFUklEX0tTMDEyNzoKKwkJbmFtZSA9ICJrczAxMjciOworCQlicmVhazsKKwl9CisKKwlyZXR1cm4gbmFtZTsKK30KKworc3RhdGljIGNoYXIgKgorY29kZWNpZF90b19tb2R1bGVuYW1lICh1MTYgY29kZWNpZCkKK3sKKwljaGFyICpuYW1lID0gTlVMTDsKKworCXN3aXRjaCAoY29kZWNpZCkgeworCWNhc2UgQ09ERUNfVFlQRV9aUjM2MDYwOgorCQluYW1lID0gInpyMzYwNjAiOworCQlicmVhazsKKwljYXNlIENPREVDX1RZUEVfWlIzNjA1MDoKKwkJbmFtZSA9ICJ6cjM2MDUwIjsKKwkJYnJlYWs7CisJY2FzZSBDT0RFQ19UWVBFX1pSMzYwMTY6CisJCW5hbWUgPSAienIzNjAxNiI7CisJCWJyZWFrOworCX0KKworCXJldHVybiBuYW1lOworfQorCisvLyBzdHJ1Y3QgdHZub3JtIHsKKy8vICAgICAgdTE2IFd0LCBXYSwgSFN0YXJ0LCBIU3luY1N0YXJ0LCBIdCwgSGEsIFZTdGFydDsKKy8vIH07CisKK3N0YXRpYyBzdHJ1Y3QgdHZub3JtIGY1MHNxcGl4ZWwgPSB7IDk0NCwgNzY4LCA4MywgODgwLCA2MjUsIDU3NiwgMTYgfTsKK3N0YXRpYyBzdHJ1Y3QgdHZub3JtIGY2MHNxcGl4ZWwgPSB7IDc4MCwgNjQwLCA1MSwgNzE2LCA1MjUsIDQ4MCwgMTIgfTsKK3N0YXRpYyBzdHJ1Y3QgdHZub3JtIGY1MGNjaXI2MDEgPSB7IDg2NCwgNzIwLCA3NSwgODA0LCA2MjUsIDU3NiwgMTggfTsKK3N0YXRpYyBzdHJ1Y3QgdHZub3JtIGY2MGNjaXI2MDEgPSB7IDg1OCwgNzIwLCA1NywgNzg4LCA1MjUsIDQ4MCwgMTYgfTsKKworc3RhdGljIHN0cnVjdCB0dm5vcm0gZjUwY2NpcjYwMV9sbWwzMyA9IHsgODY0LCA3MjAsIDc1KzM0LCA4MDQsIDYyNSwgNTc2LCAxOCB9Oworc3RhdGljIHN0cnVjdCB0dm5vcm0gZjYwY2NpcjYwMV9sbWwzMyA9IHsgODU4LCA3MjAsIDU3KzM0LCA3ODgsIDUyNSwgNDgwLCAxNiB9OworCisvKiBUaGUgREMxMCAoNTcvMTYvNTApIHVzZXMgVkFjdGl2ZSBhcyBIU3luYywgc28gSFN0YXJ0IG11c3QgYmUgMCAqLworc3RhdGljIHN0cnVjdCB0dm5vcm0gZjUwc3FwaXhlbF9kYzEwID0geyA5NDQsIDc2OCwgMCwgODgwLCA2MjUsIDU3NiwgMCB9Oworc3RhdGljIHN0cnVjdCB0dm5vcm0gZjYwc3FwaXhlbF9kYzEwID0geyA3ODAsIDY0MCwgMCwgNzE2LCA1MjUsIDQ4MCwgMTIgfTsKKworLyogRklYTUU6IEkgY2Fubm90IHN3YXAgVSBhbmQgViBpbiBzYWE3MTE0LCBzbyBpIGRvIG9uZQorICogcGl4ZWwgbGVmdCBzaGlmdCBpbiB6b3JhbiAoNzUgLT4gNzQpCisgKiAoTWF4aW0gWWV2dHl1c2hraW4gPG1heEBsaW51eG1lZGlhbGFicy5jb20+KSAqLworc3RhdGljIHN0cnVjdCB0dm5vcm0gZjUwY2NpcjYwMV9sbTMzcjEwID0geyA4NjQsIDcyMCwgNzQrNTQsIDgwNCwgNjI1LCA1NzYsIDE4IH07CitzdGF0aWMgc3RydWN0IHR2bm9ybSBmNjBjY2lyNjAxX2xtMzNyMTAgPSB7IDg1OCwgNzIwLCA1Nis1NCwgNzg4LCA1MjUsIDQ4MCwgMTYgfTsKKworLyogRklYTUU6IFRoZSBrczAxMjcgc2VlbSBpbmNhcGFibGUgb2Ygc3dhcHBpbmcgVSBhbmQgViwgdG9vLCB3aGljaCBpcyB3aHkgSQorICogY29weSBNYXhpbSdzIGxlZnQgc2hpZnQgaGFjayBmb3IgdGhlIDYgRXllcy4KKyAqCisgKiBDaHJpc3RlcidzIGRyaXZlciB1c2VkIHRoZSB1bnNoaWZ0ZWQgbm9ybXMsIHRob3VnaC4uLgorICogL1NhbSAgKi8KK3N0YXRpYyBzdHJ1Y3QgdHZub3JtIGY1MGNjaXI2MDFfYXZzNmV5ZXMgPSB7IDg2NCwgNzIwLCA3NCwgODA0LCA2MjUsIDU3NiwgMTggfTsKK3N0YXRpYyBzdHJ1Y3QgdHZub3JtIGY2MGNjaXI2MDFfYXZzNmV5ZXMgPSB7IDg1OCwgNzIwLCA1NiwgNzg4LCA1MjUsIDQ4MCwgMTYgfTsKKworc3RhdGljIHN0cnVjdCBjYXJkX2luZm8gem9yYW5fY2FyZHNbTlVNX0NBUkRTXSBfX2RldmluaXRkYXRhID0geworCXsKKwkJLnR5cGUgPSBEQzEwX29sZCwKKwkJLm5hbWUgPSAiREMxMChvbGQpIiwKKwkJLmkyY19kZWNvZGVyID0gSTJDX0RSSVZFUklEX1ZQWDMyMjAsCisJCS52aWRlb19jb2RlYyA9IENPREVDX1RZUEVfWlIzNjA1MCwKKwkJLnZpZGVvX3ZmZSA9IENPREVDX1RZUEVfWlIzNjAxNiwKKworCQkuaW5wdXRzID0gMywKKwkJLmlucHV0ID0geworCQkJeyAxLCAiQ29tcG9zaXRlIiB9LAorCQkJeyAyLCAiUy1WaWRlbyIgfSwKKwkJCXsgMCwgIkludGVybmFsL2NvbXAiIH0KKwkJfSwKKwkJLm5vcm1zID0gMywKKwkJLnR2biA9IHsKKwkJCSZmNTBzcXBpeGVsX2RjMTAsCisJCQkmZjYwc3FwaXhlbF9kYzEwLAorCQkJJmY1MHNxcGl4ZWxfZGMxMAorCQl9LAorCQkuanBlZ19pbnQgPSAwLAorCQkudnN5bmNfaW50ID0gWlIzNjA1N19JU1JfR0lSUTEsCisJCS5ncGlvID0geyAyLCAxLCAtMSwgMywgNywgMCwgNCwgNSB9LAorCQkuZ3Bpb19wb2wgPSB7IDAsIDAsIDAsIDEsIDAsIDAsIDAsIDAgfSwKKwkJLmdwY3MgPSB7IC0xLCAwIH0sCisJCS52ZmVfcG9sID0geyAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwIH0sCisJCS5nd3Nfbm90X2Nvbm5lY3RlZCA9IDAsCisJCS5pbnB1dF9tdXggPSAwLAorCQkuaW5pdCA9ICZkYzEwX2luaXQsCisJfSwgeworCQkudHlwZSA9IERDMTBfbmV3LAorCQkubmFtZSA9ICJEQzEwKG5ldykiLAorCQkuaTJjX2RlY29kZXIgPSBJMkNfRFJJVkVSSURfU0FBNzExMCwKKwkJLmkyY19lbmNvZGVyID0gSTJDX0RSSVZFUklEX0FEVjcxNzUsCisJCS52aWRlb19jb2RlYyA9IENPREVDX1RZUEVfWlIzNjA2MCwKKworCQkuaW5wdXRzID0gMywKKwkJLmlucHV0ID0geworCQkJCXsgMCwgIkNvbXBvc2l0ZSIgfSwKKwkJCQl7IDcsICJTLVZpZGVvIiB9LAorCQkJCXsgNSwgIkludGVybmFsL2NvbXAiIH0KKwkJCX0sCisJCS5ub3JtcyA9IDMsCisJCS50dm4gPSB7CisJCQkJJmY1MHNxcGl4ZWwsCisJCQkJJmY2MHNxcGl4ZWwsCisJCQkJJmY1MHNxcGl4ZWx9LAorCQkuanBlZ19pbnQgPSBaUjM2MDU3X0lTUl9HSVJRMCwKKwkJLnZzeW5jX2ludCA9IFpSMzYwNTdfSVNSX0dJUlExLAorCQkuZ3BpbyA9IHsgMywgMCwgNiwgMSwgMiwgLTEsIDQsIDUgfSwKKwkJLmdwaW9fcG9sID0geyAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwIH0sCisJCS5ncGNzID0geyAtMSwgMX0sCisJCS52ZmVfcG9sID0geyAxLCAxLCAxLCAxLCAwLCAwLCAwLCAwIH0sCisJCS5nd3Nfbm90X2Nvbm5lY3RlZCA9IDAsCisJCS5pbnB1dF9tdXggPSAwLAorCQkuaW5pdCA9ICZkYzEwcGx1c19pbml0LAorCX0sIHsKKwkJLnR5cGUgPSBEQzEwcGx1cywKKwkJLm5hbWUgPSAiREMxMHBsdXMiLAorCQkudmVuZG9yX2lkID0gUENJX1ZFTkRPUl9JRF9NSVJPLAorCQkuZGV2aWNlX2lkID0gUENJX0RFVklDRV9JRF9NSVJPX0RDMTBQTFVTLAorCQkuaTJjX2RlY29kZXIgPSBJMkNfRFJJVkVSSURfU0FBNzExMCwKKwkJLmkyY19lbmNvZGVyID0gSTJDX0RSSVZFUklEX0FEVjcxNzUsCisJCS52aWRlb19jb2RlYyA9IENPREVDX1RZUEVfWlIzNjA2MCwKKworCQkuaW5wdXRzID0gMywKKwkJLmlucHV0ID0geworCQkJeyAwLCAiQ29tcG9zaXRlIiB9LAorCQkJeyA3LCAiUy1WaWRlbyIgfSwKKwkJCXsgNSwgIkludGVybmFsL2NvbXAiIH0KKwkJfSwKKwkJLm5vcm1zID0gMywKKwkJLnR2biA9IHsKKwkJCSZmNTBzcXBpeGVsLAorCQkJJmY2MHNxcGl4ZWwsCisJCQkmZjUwc3FwaXhlbAorCQl9LAorCQkuanBlZ19pbnQgPSBaUjM2MDU3X0lTUl9HSVJRMCwKKwkJLnZzeW5jX2ludCA9IFpSMzYwNTdfSVNSX0dJUlExLAorCQkuZ3BpbyA9IHsgMywgMCwgNiwgMSwgMiwgLTEsIDQsIDUgfSwKKwkJLmdwaW9fcG9sID0geyAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwIH0sCisJCS5ncGNzID0geyAtMSwgMSB9LAorCQkudmZlX3BvbCA9IHsgMSwgMSwgMSwgMSwgMCwgMCwgMCwgMCB9LAorCQkuZ3dzX25vdF9jb25uZWN0ZWQgPSAwLAorCQkuaW5wdXRfbXV4ID0gMCwKKwkJLmluaXQgPSAmZGMxMHBsdXNfaW5pdCwKKwl9LCB7CisJCS50eXBlID0gREMzMCwKKwkJLm5hbWUgPSAiREMzMCIsCisJCS5pMmNfZGVjb2RlciA9IEkyQ19EUklWRVJJRF9WUFgzMjIwLAorCQkuaTJjX2VuY29kZXIgPSBJMkNfRFJJVkVSSURfQURWNzE3NSwKKwkJLnZpZGVvX2NvZGVjID0gQ09ERUNfVFlQRV9aUjM2MDUwLAorCQkudmlkZW9fdmZlID0gQ09ERUNfVFlQRV9aUjM2MDE2LAorCisJCS5pbnB1dHMgPSAzLAorCQkuaW5wdXQgPSB7CisJCQl7IDEsICJDb21wb3NpdGUiIH0sCisJCQl7IDIsICJTLVZpZGVvIiB9LAorCQkJeyAwLCAiSW50ZXJuYWwvY29tcCIgfQorCQl9LAorCQkubm9ybXMgPSAzLAorCQkudHZuID0geworCQkJJmY1MHNxcGl4ZWxfZGMxMCwKKwkJCSZmNjBzcXBpeGVsX2RjMTAsCisJCQkmZjUwc3FwaXhlbF9kYzEwCisJCX0sCisJCS5qcGVnX2ludCA9IDAsCisJCS52c3luY19pbnQgPSBaUjM2MDU3X0lTUl9HSVJRMSwKKwkJLmdwaW8gPSB7IDIsIDEsIC0xLCAzLCA3LCAwLCA0LCA1IH0sCisJCS5ncGlvX3BvbCA9IHsgMCwgMCwgMCwgMSwgMCwgMCwgMCwgMCB9LAorCQkuZ3BjcyA9IHsgLTEsIDAgfSwKKwkJLnZmZV9wb2wgPSB7IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAgfSwKKwkJLmd3c19ub3RfY29ubmVjdGVkID0gMCwKKwkJLmlucHV0X211eCA9IDAsCisJCS5pbml0ID0gJmRjMTBfaW5pdCwKKwl9LCB7CisJCS50eXBlID0gREMzMHBsdXMsCisJCS5uYW1lID0gIkRDMzBwbHVzIiwKKwkJLnZlbmRvcl9pZCA9IFBDSV9WRU5ET1JfSURfTUlSTywKKwkJLmRldmljZV9pZCA9IFBDSV9ERVZJQ0VfSURfTUlST19EQzMwUExVUywKKwkJLmkyY19kZWNvZGVyID0gSTJDX0RSSVZFUklEX1ZQWDMyMjAsCisJCS5pMmNfZW5jb2RlciA9IEkyQ19EUklWRVJJRF9BRFY3MTc1LAorCQkudmlkZW9fY29kZWMgPSBDT0RFQ19UWVBFX1pSMzYwNTAsCisJCS52aWRlb192ZmUgPSBDT0RFQ19UWVBFX1pSMzYwMTYsCisKKwkJLmlucHV0cyA9IDMsCisJCS5pbnB1dCA9IHsKKwkJCXsgMSwgIkNvbXBvc2l0ZSIgfSwKKwkJCXsgMiwgIlMtVmlkZW8iIH0sCisJCQl7IDAsICJJbnRlcm5hbC9jb21wIiB9CisJCX0sCisJCS5ub3JtcyA9IDMsCisJCS50dm4gPSB7CisJCQkmZjUwc3FwaXhlbF9kYzEwLAorCQkJJmY2MHNxcGl4ZWxfZGMxMCwKKwkJCSZmNTBzcXBpeGVsX2RjMTAKKwkJfSwKKwkJLmpwZWdfaW50ID0gMCwKKwkJLnZzeW5jX2ludCA9IFpSMzYwNTdfSVNSX0dJUlExLAorCQkuZ3BpbyA9IHsgMiwgMSwgLTEsIDMsIDcsIDAsIDQsIDUgfSwKKwkJLmdwaW9fcG9sID0geyAwLCAwLCAwLCAxLCAwLCAwLCAwLCAwIH0sCisJCS5ncGNzID0geyAtMSwgMCB9LAorCQkudmZlX3BvbCA9IHsgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCB9LAorCQkuZ3dzX25vdF9jb25uZWN0ZWQgPSAwLAorCQkuaW5wdXRfbXV4ID0gMCwKKwkJLmluaXQgPSAmZGMxMF9pbml0LAorCX0sIHsKKwkJLnR5cGUgPSBMTUwzMywKKwkJLm5hbWUgPSAiTE1MMzMiLAorCQkuaTJjX2RlY29kZXIgPSBJMkNfRFJJVkVSSURfQlQ4MTksCisJCS5pMmNfZW5jb2RlciA9IEkyQ19EUklWRVJJRF9CVDg1NiwKKwkJLnZpZGVvX2NvZGVjID0gQ09ERUNfVFlQRV9aUjM2MDYwLAorCisJCS5pbnB1dHMgPSAyLAorCQkuaW5wdXQgPSB7CisJCQl7IDAsICJDb21wb3NpdGUiIH0sCisJCQl7IDcsICJTLVZpZGVvIiB9CisJCX0sCisJCS5ub3JtcyA9IDIsCisJCS50dm4gPSB7CisJCQkmZjUwY2NpcjYwMV9sbWwzMywKKwkJCSZmNjBjY2lyNjAxX2xtbDMzLAorCQkJTlVMTAorCQl9LAorCQkuanBlZ19pbnQgPSBaUjM2MDU3X0lTUl9HSVJRMSwKKwkJLnZzeW5jX2ludCA9IFpSMzYwNTdfSVNSX0dJUlEwLAorCQkuZ3BpbyA9IHsgMSwgLTEsIDMsIDUsIDcsIC0xLCAtMSwgLTEgfSwKKwkJLmdwaW9fcG9sID0geyAwLCAwLCAwLCAwLCAxLCAwLCAwLCAwIH0sCisJCS5ncGNzID0geyAzLCAxIH0sCisJCS52ZmVfcG9sID0geyAxLCAxLCAwLCAwLCAwLCAxLCAwLCAwIH0sCisJCS5nd3Nfbm90X2Nvbm5lY3RlZCA9IDEsCisJCS5pbnB1dF9tdXggPSAwLAorCQkuaW5pdCA9ICZsbWwzM19pbml0LAorCX0sIHsKKwkJLnR5cGUgPSBMTUwzM1IxMCwKKwkJLm5hbWUgPSAiTE1MMzNSMTAiLAorCQkudmVuZG9yX2lkID0gUENJX1ZFTkRPUl9JRF9FTEVDVFJPTklDREVTSUdOR01CSCwKKwkJLmRldmljZV9pZCA9IFBDSV9ERVZJQ0VfSURfTE1MXzMzUjEwLAorCQkuaTJjX2RlY29kZXIgPSBJMkNfRFJJVkVSSURfU0FBNzExNCwKKwkJLmkyY19lbmNvZGVyID0gSTJDX0RSSVZFUklEX0FEVjcxNzAsCisJCS52aWRlb19jb2RlYyA9IENPREVDX1RZUEVfWlIzNjA2MCwKKworCQkuaW5wdXRzID0gMiwKKwkJLmlucHV0ID0geworCQkJeyAwLCAiQ29tcG9zaXRlIiB9LAorCQkJeyA3LCAiUy1WaWRlbyIgfQorCQl9LAorCQkubm9ybXMgPSAyLAorCQkudHZuID0geworCQkJJmY1MGNjaXI2MDFfbG0zM3IxMCwKKwkJCSZmNjBjY2lyNjAxX2xtMzNyMTAsCisJCQlOVUxMCisJCX0sCisJCS5qcGVnX2ludCA9IFpSMzYwNTdfSVNSX0dJUlExLAorCQkudnN5bmNfaW50ID0gWlIzNjA1N19JU1JfR0lSUTAsCisJCS5ncGlvID0geyAxLCAtMSwgMywgNSwgNywgLTEsIC0xLCAtMSB9LAorCQkuZ3Bpb19wb2wgPSB7IDAsIDAsIDAsIDAsIDEsIDAsIDAsIDAgfSwKKwkJLmdwY3MgPSB7IDMsIDEgfSwKKwkJLnZmZV9wb2wgPSB7IDEsIDEsIDAsIDAsIDAsIDEsIDAsIDAgfSwKKwkJLmd3c19ub3RfY29ubmVjdGVkID0gMSwKKwkJLmlucHV0X211eCA9IDAsCisJCS5pbml0ID0gJmxtbDMzX2luaXQsCisJfSwgeworCQkudHlwZSA9IEJVWiwKKwkJLm5hbWUgPSAiQnV6IiwKKwkJLnZlbmRvcl9pZCA9IFBDSV9WRU5ET1JfSURfSU9NRUdBLAorCQkuZGV2aWNlX2lkID0gUENJX0RFVklDRV9JRF9JT01FR0FfQlVaLAorCQkuaTJjX2RlY29kZXIgPSBJMkNfRFJJVkVSSURfU0FBNzExMUEsCisJCS5pMmNfZW5jb2RlciA9IEkyQ19EUklWRVJJRF9TQUE3MTg1QiwKKwkJLnZpZGVvX2NvZGVjID0gQ09ERUNfVFlQRV9aUjM2MDYwLAorCisJCS5pbnB1dHMgPSAyLAorCQkuaW5wdXQgPSB7CisJCQl7IDMsICJDb21wb3NpdGUiIH0sCisJCQl7IDcsICJTLVZpZGVvIiB9CisJCX0sCisJCS5ub3JtcyA9IDMsCisJCS50dm4gPSB7CisJCQkmZjUwY2NpcjYwMSwKKwkJCSZmNjBjY2lyNjAxLAorCQkJJmY1MGNjaXI2MDEKKwkJfSwKKwkJLmpwZWdfaW50ID0gWlIzNjA1N19JU1JfR0lSUTEsCisJCS52c3luY19pbnQgPSBaUjM2MDU3X0lTUl9HSVJRMCwKKwkJLmdwaW8gPSB7IDEsIC0xLCAzLCAtMSwgLTEsIC0xLCAtMSwgLTEgfSwKKwkJLmdwaW9fcG9sID0geyAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwIH0sCisJCS5ncGNzID0geyAzLCAxIH0sCisJCS52ZmVfcG9sID0geyAxLCAxLCAwLCAwLCAwLCAxLCAwLCAwIH0sCisJCS5nd3Nfbm90X2Nvbm5lY3RlZCA9IDEsCisJCS5pbnB1dF9tdXggPSAwLAorCQkuaW5pdCA9ICZidXpfaW5pdCwKKwl9LCB7CisJCS50eXBlID0gQVZTNkVZRVMsCisJCS5uYW1lID0gIjYtRXllcyIsCisJCS8qIEF2ZXJNZWRpYSBjaG9zZSBub3QgdG8gYnJhbmQgdGhlIDYtRXllcy4gVGh1cyBpdAorCQkgICBjYW4ndCBiZSBhdXRvZGV0ZWN0ZWQsIGFuZCByZXF1aXJlcyBjYXJkPXguICovCisJCS52ZW5kb3JfaWQgPSAtMSwKKwkJLmRldmljZV9pZCA9IC0xLAorCQkuaTJjX2RlY29kZXIgPSBJMkNfRFJJVkVSSURfS1MwMTI3LAorCQkuaTJjX2VuY29kZXIgPSBJMkNfRFJJVkVSSURfQlQ4NjYsCisJCS52aWRlb19jb2RlYyA9IENPREVDX1RZUEVfWlIzNjA2MCwKKworCQkuaW5wdXRzID0gMTAsCisJCS5pbnB1dCA9IHsKKwkJCXsgMCwgIkNvbXBvc2l0ZSAxIiB9LAorCQkJeyAxLCAiQ29tcG9zaXRlIDIiIH0sCisJCQl7IDIsICJDb21wb3NpdGUgMyIgfSwKKwkJCXsgNCwgIkNvbXBvc2l0ZSA0IiB9LAorCQkJeyA1LCAiQ29tcG9zaXRlIDUiIH0sCisJCQl7IDYsICJDb21wb3NpdGUgNiIgfSwKKwkJCXsgOCwgIlMtVmlkZW8gMSIgfSwKKwkJCXsgOSwgIlMtVmlkZW8gMiIgfSwKKwkJCXsxMCwgIlMtVmlkZW8gMyIgfSwKKwkJCXsxNSwgIllDYkNyIiB9CisJCX0sCisJCS5ub3JtcyA9IDIsCisJCS50dm4gPSB7CisJCQkmZjUwY2NpcjYwMV9hdnM2ZXllcywKKwkJCSZmNjBjY2lyNjAxX2F2czZleWVzLAorCQkJTlVMTAorCQl9LAorCQkuanBlZ19pbnQgPSBaUjM2MDU3X0lTUl9HSVJRMSwKKwkJLnZzeW5jX2ludCA9IFpSMzYwNTdfSVNSX0dJUlEwLAorCQkuZ3BpbyA9IHsgMSwgMCwgMywgLTEsIC0xLCAtMSwgLTEsIC0xIH0sLy8gVmFsaWRpdHkgdW5rbm93biAvU2FtCisJCS5ncGlvX3BvbCA9IHsgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCB9LCAvLyBWYWxpZGl0eSB1bmtub3duIC9TYW0KKwkJLmdwY3MgPSB7IDMsIDEgfSwJCQkvLyBWYWxpZGl0eSB1bmtub3duIC9TYW0KKwkJLnZmZV9wb2wgPSB7IDEsIDAsIDAsIDAsIDAsIDEsIDAsIDAgfSwgIC8vIFZhbGlkaXR5IHVua25vd24gL1NhbQorCQkuZ3dzX25vdF9jb25uZWN0ZWQgPSAxLAorCQkuaW5wdXRfbXV4ID0gMSwKKwkJLmluaXQgPSAmYXZzNmV5ZXNfaW5pdCwKKwl9CisKK307CisKKy8qCisgKiBJMkMgZnVuY3Rpb25zCisgKi8KKy8qIHNvZnR3YXJlIEkyQyBmdW5jdGlvbnMgKi8KK3N0YXRpYyBpbnQKK3pvcmFuX2kyY19nZXRzZGEgKHZvaWQgKmRhdGEpCit7CisJc3RydWN0IHpvcmFuICp6ciA9IChzdHJ1Y3Qgem9yYW4gKikgZGF0YTsKKworCXJldHVybiAoYnRyZWFkKFpSMzYwNTdfSTJDQlIpID4+IDEpICYgMTsKK30KKworc3RhdGljIGludAorem9yYW5faTJjX2dldHNjbCAodm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3Qgem9yYW4gKnpyID0gKHN0cnVjdCB6b3JhbiAqKSBkYXRhOworCisJcmV0dXJuIGJ0cmVhZChaUjM2MDU3X0kyQ0JSKSAmIDE7Cit9CisKK3N0YXRpYyB2b2lkCit6b3Jhbl9pMmNfc2V0c2RhICh2b2lkICpkYXRhLAorCQkgIGludCAgIHN0YXRlKQoreworCXN0cnVjdCB6b3JhbiAqenIgPSAoc3RydWN0IHpvcmFuICopIGRhdGE7CisKKwlpZiAoc3RhdGUpCisJCXpyLT5pMmNiciB8PSAyOworCWVsc2UKKwkJenItPmkyY2JyICY9IH4yOworCWJ0d3JpdGUoenItPmkyY2JyLCBaUjM2MDU3X0kyQ0JSKTsKK30KKworc3RhdGljIHZvaWQKK3pvcmFuX2kyY19zZXRzY2wgKHZvaWQgKmRhdGEsCisJCSAgaW50ICAgc3RhdGUpCit7CisJc3RydWN0IHpvcmFuICp6ciA9IChzdHJ1Y3Qgem9yYW4gKikgZGF0YTsKKworCWlmIChzdGF0ZSkKKwkJenItPmkyY2JyIHw9IDE7CisJZWxzZQorCQl6ci0+aTJjYnIgJj0gfjE7CisJYnR3cml0ZSh6ci0+aTJjYnIsIFpSMzYwNTdfSTJDQlIpOworfQorCitzdGF0aWMgaW50Cit6b3Jhbl9pMmNfY2xpZW50X3JlZ2lzdGVyIChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQoreworCXN0cnVjdCB6b3JhbiAqenIgPSAoc3RydWN0IHpvcmFuICopIGkyY19nZXRfYWRhcGRhdGEoY2xpZW50LT5hZGFwdGVyKTsKKwlpbnQgcmVzID0gMDsKKworCWRwcmludGsoMiwKKwkJS0VSTl9ERUJVRyAiJXM6IGkyY19jbGllbnRfcmVnaXN0ZXIoKSAtIGRyaXZlciBpZCA9ICVkXG4iLAorCQlaUl9ERVZOQU1FKHpyKSwgY2xpZW50LT5kcml2ZXItPmlkKTsKKworCW11dGV4X2xvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKKworCWlmICh6ci0+dXNlciA+IDApIHsKKwkJLyogd2UncmUgYWxyZWFkeSBidXN5LCBzbyB3ZSBrZWVwIGEgcmVmZXJlbmNlIHRvCisJCSAqIHRoZW0uLi4gQ291bGQgZG8gYSBsb3Qgb2Ygc3R1ZmYgaGVyZSwgYnV0IHRoaXMKKwkJICogaXMgZWFzaWVzdC4gKERpZCBJIGV2ZXIgbWVudGlvbiBJJ20gYSBsYXp5IGFzcz8pCisJCSAqLworCQlyZXMgPSAtRUJVU1k7CisJCWdvdG8gY2xpZW50cmVnX3VubG9ja19hbmRfcmV0dXJuOworCX0KKworCWlmIChjbGllbnQtPmRyaXZlci0+aWQgPT0genItPmNhcmQuaTJjX2RlY29kZXIpCisJCXpyLT5kZWNvZGVyID0gY2xpZW50OworCWVsc2UgaWYgKGNsaWVudC0+ZHJpdmVyLT5pZCA9PSB6ci0+Y2FyZC5pMmNfZW5jb2RlcikKKwkJenItPmVuY29kZXIgPSBjbGllbnQ7CisJZWxzZSB7CisJCXJlcyA9IC1FTk9ERVY7CisJCWdvdG8gY2xpZW50cmVnX3VubG9ja19hbmRfcmV0dXJuOworCX0KKworY2xpZW50cmVnX3VubG9ja19hbmRfcmV0dXJuOgorCW11dGV4X3VubG9jaygmenItPnJlc291cmNlX2xvY2spOworCisJcmV0dXJuIHJlczsKK30KKworc3RhdGljIGludAorem9yYW5faTJjX2NsaWVudF91bnJlZ2lzdGVyIChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQoreworCXN0cnVjdCB6b3JhbiAqenIgPSAoc3RydWN0IHpvcmFuICopIGkyY19nZXRfYWRhcGRhdGEoY2xpZW50LT5hZGFwdGVyKTsKKwlpbnQgcmVzID0gMDsKKworCWRwcmludGsoMiwgS0VSTl9ERUJVRyAiJXM6IGkyY19jbGllbnRfdW5yZWdpc3RlcigpXG4iLCBaUl9ERVZOQU1FKHpyKSk7CisKKwltdXRleF9sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7CisKKwlpZiAoenItPnVzZXIgPiAwKSB7CisJCXJlcyA9IC1FQlVTWTsKKwkJZ290byBjbGllbnR1bnJlZ191bmxvY2tfYW5kX3JldHVybjsKKwl9CisKKwkvKiB0cnkgdG8gbG9jYXRlIGl0ICovCisJaWYgKGNsaWVudCA9PSB6ci0+ZW5jb2RlcikgeworCQl6ci0+ZW5jb2RlciA9IE5VTEw7CisJfSBlbHNlIGlmIChjbGllbnQgPT0genItPmRlY29kZXIpIHsKKwkJenItPmRlY29kZXIgPSBOVUxMOworCQlzbnByaW50ZihaUl9ERVZOQU1FKHpyKSwgc2l6ZW9mKFpSX0RFVk5BTUUoenIpKSwgIk1KUEVHWyVkXSIsIHpyLT5pZCk7CisJfQorY2xpZW50dW5yZWdfdW5sb2NrX2FuZF9yZXR1cm46CisJbXV0ZXhfdW5sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7CisJcmV0dXJuIHJlczsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfYWxnb19iaXRfZGF0YSB6b3Jhbl9pMmNfYml0X2RhdGFfdGVtcGxhdGUgPSB7CisJLnNldHNkYSA9IHpvcmFuX2kyY19zZXRzZGEsCisJLnNldHNjbCA9IHpvcmFuX2kyY19zZXRzY2wsCisJLmdldHNkYSA9IHpvcmFuX2kyY19nZXRzZGEsCisJLmdldHNjbCA9IHpvcmFuX2kyY19nZXRzY2wsCisJLnVkZWxheSA9IDEwLAorCS50aW1lb3V0ID0gMTAwLAorfTsKKworc3RhdGljIGludAorem9yYW5fcmVnaXN0ZXJfaTJjIChzdHJ1Y3Qgem9yYW4gKnpyKQoreworCW1lbWNweSgmenItPmkyY19hbGdvLCAmem9yYW5faTJjX2JpdF9kYXRhX3RlbXBsYXRlLAorCSAgICAgICBzaXplb2Yoc3RydWN0IGkyY19hbGdvX2JpdF9kYXRhKSk7CisJenItPmkyY19hbGdvLmRhdGEgPSB6cjsKKwl6ci0+aTJjX2FkYXB0ZXIuY2xhc3MgPSBJMkNfQ0xBU1NfVFZfQU5BTE9HOworCXpyLT5pMmNfYWRhcHRlci5pZCA9IEkyQ19IV19CX1pSMzYwNjc7CisJenItPmkyY19hZGFwdGVyLmNsaWVudF9yZWdpc3RlciA9IHpvcmFuX2kyY19jbGllbnRfcmVnaXN0ZXI7CisJenItPmkyY19hZGFwdGVyLmNsaWVudF91bnJlZ2lzdGVyID0gem9yYW5faTJjX2NsaWVudF91bnJlZ2lzdGVyOworCXN0cmxjcHkoenItPmkyY19hZGFwdGVyLm5hbWUsIFpSX0RFVk5BTUUoenIpLAorCQlzaXplb2YoenItPmkyY19hZGFwdGVyLm5hbWUpKTsKKwlpMmNfc2V0X2FkYXBkYXRhKCZ6ci0+aTJjX2FkYXB0ZXIsIHpyKTsKKwl6ci0+aTJjX2FkYXB0ZXIuYWxnb19kYXRhID0gJnpyLT5pMmNfYWxnbzsKKwl6ci0+aTJjX2FkYXB0ZXIuZGV2LnBhcmVudCA9ICZ6ci0+cGNpX2Rldi0+ZGV2OworCXJldHVybiBpMmNfYml0X2FkZF9idXMoJnpyLT5pMmNfYWRhcHRlcik7Cit9CisKK3N0YXRpYyB2b2lkCit6b3Jhbl91bnJlZ2lzdGVyX2kyYyAoc3RydWN0IHpvcmFuICp6cikKK3sKKwlpMmNfZGVsX2FkYXB0ZXIoJnpyLT5pMmNfYWRhcHRlcik7Cit9CisKKy8qIENoZWNrIGEgem9yYW5fcGFyYW1zIHN0cnVjdCBmb3IgY29ycmVjdG5lc3MsIGluc2VydCBkZWZhdWx0IHBhcmFtcyAqLworCitpbnQKK3pvcmFuX2NoZWNrX2pwZ19zZXR0aW5ncyAoc3RydWN0IHpvcmFuICAgICAgICAgICAgICAqenIsCisJCQkgIHN0cnVjdCB6b3Jhbl9qcGdfc2V0dGluZ3MgKnNldHRpbmdzKQoreworCWludCBlcnIgPSAwLCBlcnIwID0gMDsKKworCWRwcmludGsoNCwKKwkJS0VSTl9ERUJVRworCQkiJXM6IGNoZWNrX2pwZ19zZXR0aW5ncygpIC0gZGVjOiAlZCwgSGRjbTogJWQsIFZkY206ICVkLCBUZGNtOiAlZFxuIiwKKwkJWlJfREVWTkFNRSh6ciksIHNldHRpbmdzLT5kZWNpbWF0aW9uLCBzZXR0aW5ncy0+SG9yRGNtLAorCQlzZXR0aW5ncy0+VmVyRGNtLCBzZXR0aW5ncy0+VG1wRGNtKTsKKwlkcHJpbnRrKDQsCisJCUtFUk5fREVCVUcKKwkJIiVzOiBjaGVja19qcGdfc2V0dGluZ3MoKSAtIHg6ICVkLCB5OiAlZCwgdzogJWQsIHk6ICVkXG4iLAorCQlaUl9ERVZOQU1FKHpyKSwgc2V0dGluZ3MtPmltZ194LCBzZXR0aW5ncy0+aW1nX3ksCisJCXNldHRpbmdzLT5pbWdfd2lkdGgsIHNldHRpbmdzLT5pbWdfaGVpZ2h0KTsKKwkvKiBDaGVjayBkZWNpbWF0aW9uLCBzZXQgZGVmYXVsdCB2YWx1ZXMgZm9yIGRlY2ltYXRpb24gPSAxLCAyLCA0ICovCisJc3dpdGNoIChzZXR0aW5ncy0+ZGVjaW1hdGlvbikgeworCWNhc2UgMToKKworCQlzZXR0aW5ncy0+SG9yRGNtID0gMTsKKwkJc2V0dGluZ3MtPlZlckRjbSA9IDE7CisJCXNldHRpbmdzLT5UbXBEY20gPSAxOworCQlzZXR0aW5ncy0+ZmllbGRfcGVyX2J1ZmYgPSAyOworCQlzZXR0aW5ncy0+aW1nX3ggPSAwOworCQlzZXR0aW5ncy0+aW1nX3kgPSAwOworCQlzZXR0aW5ncy0+aW1nX3dpZHRoID0gQlVaX01BWF9XSURUSDsKKwkJc2V0dGluZ3MtPmltZ19oZWlnaHQgPSBCVVpfTUFYX0hFSUdIVCAvIDI7CisJCWJyZWFrOworCWNhc2UgMjoKKworCQlzZXR0aW5ncy0+SG9yRGNtID0gMjsKKwkJc2V0dGluZ3MtPlZlckRjbSA9IDE7CisJCXNldHRpbmdzLT5UbXBEY20gPSAyOworCQlzZXR0aW5ncy0+ZmllbGRfcGVyX2J1ZmYgPSAxOworCQlzZXR0aW5ncy0+aW1nX3ggPSAoQlVaX01BWF9XSURUSCA9PSA3MjApID8gOCA6IDA7CisJCXNldHRpbmdzLT5pbWdfeSA9IDA7CisJCXNldHRpbmdzLT5pbWdfd2lkdGggPQorCQkgICAgKEJVWl9NQVhfV0lEVEggPT0gNzIwKSA/IDcwNCA6IEJVWl9NQVhfV0lEVEg7CisJCXNldHRpbmdzLT5pbWdfaGVpZ2h0ID0gQlVaX01BWF9IRUlHSFQgLyAyOworCQlicmVhazsKKwljYXNlIDQ6CisKKwkJaWYgKHpyLT5jYXJkLnR5cGUgPT0gREMxMF9uZXcpIHsKKwkJCWRwcmludGsoMSwKKwkJCQlLRVJOX0RFQlVHCisJCQkJIiVzOiBjaGVja19qcGdfc2V0dGluZ3MoKSAtIEhEZWMgYnkgNCBpcyBub3Qgc3VwcG9ydGVkIG9uIHRoZSBEQzEwXG4iLAorCQkJCVpSX0RFVk5BTUUoenIpKTsKKwkJCWVycjArKzsKKwkJCWJyZWFrOworCQl9CisKKwkJc2V0dGluZ3MtPkhvckRjbSA9IDQ7CisJCXNldHRpbmdzLT5WZXJEY20gPSAyOworCQlzZXR0aW5ncy0+VG1wRGNtID0gMjsKKwkJc2V0dGluZ3MtPmZpZWxkX3Blcl9idWZmID0gMTsKKwkJc2V0dGluZ3MtPmltZ194ID0gKEJVWl9NQVhfV0lEVEggPT0gNzIwKSA/IDggOiAwOworCQlzZXR0aW5ncy0+aW1nX3kgPSAwOworCQlzZXR0aW5ncy0+aW1nX3dpZHRoID0KKwkJICAgIChCVVpfTUFYX1dJRFRIID09IDcyMCkgPyA3MDQgOiBCVVpfTUFYX1dJRFRIOworCQlzZXR0aW5ncy0+aW1nX2hlaWdodCA9IEJVWl9NQVhfSEVJR0hUIC8gMjsKKwkJYnJlYWs7CisJY2FzZSAwOgorCisJCS8qIFdlIGhhdmUgdG8gY2hlY2sgdGhlIGRhdGEgdGhlIHVzZXIgaGFzIHNldCAqLworCisJCWlmIChzZXR0aW5ncy0+SG9yRGNtICE9IDEgJiYgc2V0dGluZ3MtPkhvckRjbSAhPSAyICYmCisJCSAgICAoenItPmNhcmQudHlwZSA9PSBEQzEwX25ldyB8fCBzZXR0aW5ncy0+SG9yRGNtICE9IDQpKQorCQkJZXJyMCsrOworCQlpZiAoc2V0dGluZ3MtPlZlckRjbSAhPSAxICYmIHNldHRpbmdzLT5WZXJEY20gIT0gMikKKwkJCWVycjArKzsKKwkJaWYgKHNldHRpbmdzLT5UbXBEY20gIT0gMSAmJiBzZXR0aW5ncy0+VG1wRGNtICE9IDIpCisJCQllcnIwKys7CisJCWlmIChzZXR0aW5ncy0+ZmllbGRfcGVyX2J1ZmYgIT0gMSAmJgorCQkgICAgc2V0dGluZ3MtPmZpZWxkX3Blcl9idWZmICE9IDIpCisJCQllcnIwKys7CisJCWlmIChzZXR0aW5ncy0+aW1nX3ggPCAwKQorCQkJZXJyMCsrOworCQlpZiAoc2V0dGluZ3MtPmltZ195IDwgMCkKKwkJCWVycjArKzsKKwkJaWYgKHNldHRpbmdzLT5pbWdfd2lkdGggPCAwKQorCQkJZXJyMCsrOworCQlpZiAoc2V0dGluZ3MtPmltZ19oZWlnaHQgPCAwKQorCQkJZXJyMCsrOworCQlpZiAoc2V0dGluZ3MtPmltZ194ICsgc2V0dGluZ3MtPmltZ193aWR0aCA+IEJVWl9NQVhfV0lEVEgpCisJCQllcnIwKys7CisJCWlmIChzZXR0aW5ncy0+aW1nX3kgKyBzZXR0aW5ncy0+aW1nX2hlaWdodCA+CisJCSAgICBCVVpfTUFYX0hFSUdIVCAvIDIpCisJCQllcnIwKys7CisJCWlmIChzZXR0aW5ncy0+SG9yRGNtICYmIHNldHRpbmdzLT5WZXJEY20pIHsKKwkJCWlmIChzZXR0aW5ncy0+aW1nX3dpZHRoICUKKwkJCSAgICAoMTYgKiBzZXR0aW5ncy0+SG9yRGNtKSAhPSAwKQorCQkJCWVycjArKzsKKwkJCWlmIChzZXR0aW5ncy0+aW1nX2hlaWdodCAlCisJCQkgICAgKDggKiBzZXR0aW5ncy0+VmVyRGNtKSAhPSAwKQorCQkJCWVycjArKzsKKwkJfQorCisJCWlmIChlcnIwKSB7CisJCQlkcHJpbnRrKDEsCisJCQkJS0VSTl9FUlIKKwkJCQkiJXM6IGNoZWNrX2pwZ19zZXR0aW5ncygpIC0gZXJyb3IgaW4gcGFyYW1zIGZvciBkZWNpbWF0aW9uID0gMFxuIiwKKwkJCQlaUl9ERVZOQU1FKHpyKSk7CisJCQllcnIrKzsKKwkJfQorCQlicmVhazsKKwlkZWZhdWx0OgorCQlkcHJpbnRrKDEsCisJCQlLRVJOX0VSUgorCQkJIiVzOiBjaGVja19qcGdfc2V0dGluZ3MoKSAtIGRlY2ltYXRpb24gPSAlZCwgbXVzdCBiZSAwLCAxLCAyIG9yIDRcbiIsCisJCQlaUl9ERVZOQU1FKHpyKSwgc2V0dGluZ3MtPmRlY2ltYXRpb24pOworCQllcnIrKzsKKwkJYnJlYWs7CisJfQorCisJaWYgKHNldHRpbmdzLT5qcGdfY29tcC5xdWFsaXR5ID4gMTAwKQorCQlzZXR0aW5ncy0+anBnX2NvbXAucXVhbGl0eSA9IDEwMDsKKwlpZiAoc2V0dGluZ3MtPmpwZ19jb21wLnF1YWxpdHkgPCA1KQorCQlzZXR0aW5ncy0+anBnX2NvbXAucXVhbGl0eSA9IDU7CisJaWYgKHNldHRpbmdzLT5qcGdfY29tcC5BUFBuIDwgMCkKKwkJc2V0dGluZ3MtPmpwZ19jb21wLkFQUG4gPSAwOworCWlmIChzZXR0aW5ncy0+anBnX2NvbXAuQVBQbiA+IDE1KQorCQlzZXR0aW5ncy0+anBnX2NvbXAuQVBQbiA9IDE1OworCWlmIChzZXR0aW5ncy0+anBnX2NvbXAuQVBQX2xlbiA8IDApCisJCXNldHRpbmdzLT5qcGdfY29tcC5BUFBfbGVuID0gMDsKKwlpZiAoc2V0dGluZ3MtPmpwZ19jb21wLkFQUF9sZW4gPiA2MCkKKwkJc2V0dGluZ3MtPmpwZ19jb21wLkFQUF9sZW4gPSA2MDsKKwlpZiAoc2V0dGluZ3MtPmpwZ19jb21wLkNPTV9sZW4gPCAwKQorCQlzZXR0aW5ncy0+anBnX2NvbXAuQ09NX2xlbiA9IDA7CisJaWYgKHNldHRpbmdzLT5qcGdfY29tcC5DT01fbGVuID4gNjApCisJCXNldHRpbmdzLT5qcGdfY29tcC5DT01fbGVuID0gNjA7CisJaWYgKGVycikKKwkJcmV0dXJuIC1FSU5WQUw7CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQKK3pvcmFuX29wZW5faW5pdF9wYXJhbXMgKHN0cnVjdCB6b3JhbiAqenIpCit7CisJaW50IGk7CisKKwkvKiBVc2VyIG11c3QgZXhwbGljaXRseSBzZXQgYSB3aW5kb3cgKi8KKwl6ci0+b3ZlcmxheV9zZXR0aW5ncy5pc19zZXQgPSAwOworCXpyLT5vdmVybGF5X21hc2sgPSBOVUxMOworCXpyLT5vdmVybGF5X2FjdGl2ZSA9IFpPUkFOX0ZSRUU7CisKKwl6ci0+djRsX21lbWdyYWJfYWN0aXZlID0gMDsKKwl6ci0+djRsX292ZXJsYXlfYWN0aXZlID0gMDsKKwl6ci0+djRsX2dyYWJfZnJhbWUgPSBOT19HUkFCX0FDVElWRTsKKwl6ci0+djRsX2dyYWJfc2VxID0gMDsKKwl6ci0+djRsX3NldHRpbmdzLndpZHRoID0gMTkyOworCXpyLT52NGxfc2V0dGluZ3MuaGVpZ2h0ID0gMTQ0OworCXpyLT52NGxfc2V0dGluZ3MuZm9ybWF0ID0gJnpvcmFuX2Zvcm1hdHNbN107CS8qIFlVWTIgLSBZVVYtNDoyOjIgcGFja2VkICovCisJenItPnY0bF9zZXR0aW5ncy5ieXRlc3BlcmxpbmUgPQorCSAgICB6ci0+djRsX3NldHRpbmdzLndpZHRoICoKKwkgICAgKCh6ci0+djRsX3NldHRpbmdzLmZvcm1hdC0+ZGVwdGggKyA3KSAvIDgpOworCisJLyogRE1BIHJpbmcgc3R1ZmYgZm9yIFY0TCAqLworCXpyLT52NGxfcGVuZF90YWlsID0gMDsKKwl6ci0+djRsX3BlbmRfaGVhZCA9IDA7CisJenItPnY0bF9zeW5jX3RhaWwgPSAwOworCXpyLT52NGxfYnVmZmVycy5hY3RpdmUgPSBaT1JBTl9GUkVFOworCWZvciAoaSA9IDA7IGkgPCBWSURFT19NQVhfRlJBTUU7IGkrKykgeworCQl6ci0+djRsX2J1ZmZlcnMuYnVmZmVyW2ldLnN0YXRlID0gQlVaX1NUQVRFX1VTRVI7CS8qIG5vdGhpbmcgZ29pbmcgb24gKi8KKwl9CisJenItPnY0bF9idWZmZXJzLmFsbG9jYXRlZCA9IDA7CisKKwlmb3IgKGkgPSAwOyBpIDwgQlVaX01BWF9GUkFNRTsgaSsrKSB7CisJCXpyLT5qcGdfYnVmZmVycy5idWZmZXJbaV0uc3RhdGUgPSBCVVpfU1RBVEVfVVNFUjsJLyogbm90aGluZyBnb2luZyBvbiAqLworCX0KKwl6ci0+anBnX2J1ZmZlcnMuYWN0aXZlID0gWk9SQU5fRlJFRTsKKwl6ci0+anBnX2J1ZmZlcnMuYWxsb2NhdGVkID0gMDsKKwkvKiBTZXQgbmVjZXNzYXJ5IHBhcmFtcyBhbmQgY2FsbCB6b3Jhbl9jaGVja19qcGdfc2V0dGluZ3MgdG8gc2V0IHRoZSBkZWZhdWx0cyAqLworCXpyLT5qcGdfc2V0dGluZ3MuZGVjaW1hdGlvbiA9IDE7CisJenItPmpwZ19zZXR0aW5ncy5qcGdfY29tcC5xdWFsaXR5ID0gNTA7CS8qIGRlZmF1bHQgY29tcHJlc3Npb24gZmFjdG9yIDggKi8KKwlpZiAoenItPmNhcmQudHlwZSAhPSBCVVopCisJCXpyLT5qcGdfc2V0dGluZ3Mub2RkX2V2ZW4gPSAxOworCWVsc2UKKwkJenItPmpwZ19zZXR0aW5ncy5vZGRfZXZlbiA9IDA7CisJenItPmpwZ19zZXR0aW5ncy5qcGdfY29tcC5BUFBuID0gMDsKKwl6ci0+anBnX3NldHRpbmdzLmpwZ19jb21wLkFQUF9sZW4gPSAwOwkvKiBObyBBUFBuIG1hcmtlciAqLworCW1lbXNldCh6ci0+anBnX3NldHRpbmdzLmpwZ19jb21wLkFQUF9kYXRhLCAwLAorCSAgICAgICBzaXplb2YoenItPmpwZ19zZXR0aW5ncy5qcGdfY29tcC5BUFBfZGF0YSkpOworCXpyLT5qcGdfc2V0dGluZ3MuanBnX2NvbXAuQ09NX2xlbiA9IDA7CS8qIE5vIENPTSBtYXJrZXIgKi8KKwltZW1zZXQoenItPmpwZ19zZXR0aW5ncy5qcGdfY29tcC5DT01fZGF0YSwgMCwKKwkgICAgICAgc2l6ZW9mKHpyLT5qcGdfc2V0dGluZ3MuanBnX2NvbXAuQ09NX2RhdGEpKTsKKwl6ci0+anBnX3NldHRpbmdzLmpwZ19jb21wLmpwZWdfbWFya2VycyA9CisJICAgIEpQRUdfTUFSS0VSX0RIVCB8IEpQRUdfTUFSS0VSX0RRVDsKKwlpID0gem9yYW5fY2hlY2tfanBnX3NldHRpbmdzKHpyLCAmenItPmpwZ19zZXR0aW5ncyk7CisJaWYgKGkpCisJCWRwcmludGsoMSwKKwkJCUtFUk5fRVJSCisJCQkiJXM6IHpvcmFuX29wZW5faW5pdF9wYXJhbXMoKSBpbnRlcm5hbCBlcnJvclxuIiwKKwkJCVpSX0RFVk5BTUUoenIpKTsKKworCWNsZWFyX2ludGVycnVwdF9jb3VudGVycyh6cik7CisJenItPnRlc3RpbmcgPSAwOworfQorCitzdGF0aWMgdm9pZCBfX2RldmluaXQKK3Rlc3RfaW50ZXJydXB0cyAoc3RydWN0IHpvcmFuICp6cikKK3sKKwlERUZJTkVfV0FJVCh3YWl0KTsKKwlpbnQgdGltZW91dCwgaWNyOworCisJY2xlYXJfaW50ZXJydXB0X2NvdW50ZXJzKHpyKTsKKworCXpyLT50ZXN0aW5nID0gMTsKKwlpY3IgPSBidHJlYWQoWlIzNjA1N19JQ1IpOworCWJ0d3JpdGUoMHg3ODAwMDAwMCB8IFpSMzYwNTdfSUNSX0ludFBpbkVuLCBaUjM2MDU3X0lDUik7CisJcHJlcGFyZV90b193YWl0KCZ6ci0+dGVzdF9xLCAmd2FpdCwgVEFTS19JTlRFUlJVUFRJQkxFKTsKKwl0aW1lb3V0ID0gc2NoZWR1bGVfdGltZW91dChIWik7CisJZmluaXNoX3dhaXQoJnpyLT50ZXN0X3EsICZ3YWl0KTsKKwlidHdyaXRlKDAsIFpSMzYwNTdfSUNSKTsKKwlidHdyaXRlKDB4NzgwMDAwMDAsIFpSMzYwNTdfSVNSKTsKKwl6ci0+dGVzdGluZyA9IDA7CisJZHByaW50ayg1LCBLRVJOX0lORk8gIiVzOiBUZXN0aW5nIGludGVycnVwdHMuLi5cbiIsIFpSX0RFVk5BTUUoenIpKTsKKwlpZiAodGltZW91dCkgeworCQlkcHJpbnRrKDEsICI6IHRpbWUgc3BlbnQ6ICVkXG4iLCAxICogSFogLSB0aW1lb3V0KTsKKwl9CisJaWYgKHpyMzYwNjdfZGVidWcgPiAxKQorCQlwcmludF9pbnRlcnJ1cHRzKHpyKTsKKwlidHdyaXRlKGljciwgWlIzNjA1N19JQ1IpOworfQorCitzdGF0aWMgaW50IF9fZGV2aW5pdAorenIzNjA1N19pbml0IChzdHJ1Y3Qgem9yYW4gKnpyKQoreworCWludCBqLCBlcnI7CisJaW50IHR3byA9IDI7CisJaW50IHplcm8gPSAwOworCisJZHByaW50aygxLAorCQlLRVJOX0lORk8KKwkJIiVzOiB6cjM2MDU3X2luaXQoKSAtIGluaXRpYWxpemluZyBjYXJkWyVkXSwgenI9JXBcbiIsCisJCVpSX0RFVk5BTUUoenIpLCB6ci0+aWQsIHpyKTsKKworCS8qIGRlZmF1bHQgc2V0dXAgb2YgYWxsIHBhcmFtZXRlcnMgd2hpY2ggd2lsbCBwZXJzaXN0IGJldHdlZW4gb3BlbnMgKi8KKwl6ci0+dXNlciA9IDA7CisKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZ6ci0+djRsX2NhcHEpOworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnpyLT5qcGdfY2FwcSk7CisJaW5pdF93YWl0cXVldWVfaGVhZCgmenItPnRlc3RfcSk7CisJenItPmpwZ19idWZmZXJzLmFsbG9jYXRlZCA9IDA7CisJenItPnY0bF9idWZmZXJzLmFsbG9jYXRlZCA9IDA7CisKKwl6ci0+YnVmZmVyLmJhc2UgPSAodm9pZCAqKSB2aWRtZW07CisJenItPmJ1ZmZlci53aWR0aCA9IDA7CisJenItPmJ1ZmZlci5oZWlnaHQgPSAwOworCXpyLT5idWZmZXIuZGVwdGggPSAwOworCXpyLT5idWZmZXIuYnl0ZXNwZXJsaW5lID0gMDsKKworCS8qIEF2b2lkIG5vbnNlbnNlIHNldHRpbmdzIGZyb20gdXNlciBmb3IgZGVmYXVsdCBpbnB1dC9ub3JtICovCisJaWYgKGRlZmF1bHRfbm9ybSA8IFZJREVPX01PREVfUEFMICYmCisJICAgIGRlZmF1bHRfbm9ybSA+IFZJREVPX01PREVfU0VDQU0pCisJCWRlZmF1bHRfbm9ybSA9IFZJREVPX01PREVfUEFMOworCXpyLT5ub3JtID0gZGVmYXVsdF9ub3JtOworCWlmICghKHpyLT50aW1pbmcgPSB6ci0+Y2FyZC50dm5benItPm5vcm1dKSkgeworCQlkcHJpbnRrKDEsCisJCQlLRVJOX1dBUk5JTkcKKwkJCSIlczogenIzNjA1N19pbml0KCkgLSBkZWZhdWx0IFRWIHN0YW5kYXJkIG5vdCBzdXBwb3J0ZWQgYnkgaGFyZHdhcmUuIFBBTCB3aWxsIGJlIHVzZWQuXG4iLAorCQkJWlJfREVWTkFNRSh6cikpOworCQl6ci0+bm9ybSA9IFZJREVPX01PREVfUEFMOworCQl6ci0+dGltaW5nID0genItPmNhcmQudHZuW3pyLT5ub3JtXTsKKwl9CisKKwlpZiAoZGVmYXVsdF9pbnB1dCA+IHpyLT5jYXJkLmlucHV0cy0xKSB7CisJCWRwcmludGsoMSwKKwkJCUtFUk5fV0FSTklORworCQkJIiVzOiBkZWZhdWx0X2lucHV0IHZhbHVlICVkIG91dCBvZiByYW5nZSAoMC0lZClcbiIsCisJCQlaUl9ERVZOQU1FKHpyKSwgZGVmYXVsdF9pbnB1dCwgenItPmNhcmQuaW5wdXRzLTEpOworCQlkZWZhdWx0X2lucHV0ID0gMDsKKwl9CisJenItPmlucHV0ID0gZGVmYXVsdF9pbnB1dDsKKworCS8qIFNob3VsZCB0aGUgZm9sbG93aW5nIGJlIHJlc2V0IGF0IGV2ZXJ5IG9wZW4gPyAqLworCXpyLT5odWUgPSAzMjc2ODsKKwl6ci0+Y29udHJhc3QgPSAzMjc2ODsKKwl6ci0+c2F0dXJhdGlvbiA9IDMyNzY4OworCXpyLT5icmlnaHRuZXNzID0gMzI3Njg7CisKKwkvKiBkZWZhdWx0IHNldHVwICh3aWxsIGJlIHJlcGVhdGVkIGF0IGV2ZXJ5IG9wZW4pICovCisJem9yYW5fb3Blbl9pbml0X3BhcmFtcyh6cik7CisKKwkvKiBhbGxvY2F0ZSBtZW1vcnkgKmJlZm9yZSogZG9pbmcgYW55dGhpbmcgdG8gdGhlIGhhcmR3YXJlCisJICogaW4gY2FzZSBhbGxvY2F0aW9uIGZhaWxzICovCisJenItPnN0YXRfY29tID0ga3phbGxvYyhCVVpfTlVNX1NUQVRfQ09NICogNCwgR0ZQX0tFUk5FTCk7CisJenItPnZpZGVvX2RldiA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCB2aWRlb19kZXZpY2UpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXpyLT5zdGF0X2NvbSB8fCAhenItPnZpZGVvX2RldikgeworCQlkcHJpbnRrKDEsCisJCQlLRVJOX0VSUgorCQkJIiVzOiB6cjM2MDU3X2luaXQoKSAtIGttYWxsb2MgKFNUQVRfQ09NKSBmYWlsZWRcbiIsCisJCQlaUl9ERVZOQU1FKHpyKSk7CisJCWVyciA9IC1FTk9NRU07CisJCWdvdG8gZXhpdF9mcmVlOworCX0KKwlmb3IgKGogPSAwOyBqIDwgQlVaX05VTV9TVEFUX0NPTTsgaisrKSB7CisJCXpyLT5zdGF0X2NvbVtqXSA9IGNwdV90b19sZTMyKDEpOyAvKiBtYXJrIGFzIHVuYXZhaWxhYmxlIHRvIHpyMzYwNTcgKi8KKwl9CisKKwkvKgorCSAqICAgTm93IGFkZCB0aGUgdGVtcGxhdGUgYW5kIHJlZ2lzdGVyIHRoZSBkZXZpY2UgdW5pdC4KKwkgKi8KKwltZW1jcHkoenItPnZpZGVvX2RldiwgJnpvcmFuX3RlbXBsYXRlLCBzaXplb2Yoem9yYW5fdGVtcGxhdGUpKTsKKwlzdHJjcHkoenItPnZpZGVvX2Rldi0+bmFtZSwgWlJfREVWTkFNRSh6cikpOworCWVyciA9IHZpZGVvX3JlZ2lzdGVyX2RldmljZSh6ci0+dmlkZW9fZGV2LCBWRkxfVFlQRV9HUkFCQkVSLCB2aWRlb19uclt6ci0+aWRdKTsKKwlpZiAoZXJyIDwgMCkKKwkJZ290byBleGl0X3VucmVnaXN0ZXI7CisKKwl6b3Jhbl9pbml0X2hhcmR3YXJlKHpyKTsKKwlpZiAoenIzNjA2N19kZWJ1ZyA+IDIpCisJCWRldGVjdF9ndWVzdF9hY3Rpdml0eSh6cik7CisJdGVzdF9pbnRlcnJ1cHRzKHpyKTsKKwlpZiAoIXBhc3NfdGhyb3VnaCkgeworCQlkZWNvZGVyX2NvbW1hbmQoenIsIERFQ09ERVJfRU5BQkxFX09VVFBVVCwgJnplcm8pOworCQllbmNvZGVyX2NvbW1hbmQoenIsIEVOQ09ERVJfU0VUX0lOUFVULCAmdHdvKTsKKwl9CisKKwl6ci0+em9yYW5fcHJvYyA9IE5VTEw7CisJenItPmluaXRpYWxpemVkID0gMTsKKwlyZXR1cm4gMDsKKworZXhpdF91bnJlZ2lzdGVyOgorCXpvcmFuX3VucmVnaXN0ZXJfaTJjKHpyKTsKK2V4aXRfZnJlZToKKwlrZnJlZSh6ci0+c3RhdF9jb20pOworCWtmcmVlKHpyLT52aWRlb19kZXYpOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyB2b2lkCit6b3Jhbl9yZWxlYXNlIChzdHJ1Y3Qgem9yYW4gKnpyKQoreworCWlmICghenItPmluaXRpYWxpemVkKQorCQlnb3RvIGV4aXRfZnJlZTsKKwkvKiB1bnJlZ2lzdGVyIHZpZGVvY29kZWMgYnVzICovCisJaWYgKHpyLT5jb2RlYykgeworCQlzdHJ1Y3QgdmlkZW9jb2RlY19tYXN0ZXIgKm1hc3RlciA9IHpyLT5jb2RlYy0+bWFzdGVyX2RhdGE7CisKKwkJdmlkZW9jb2RlY19kZXRhY2goenItPmNvZGVjKTsKKwkJa2ZyZWUobWFzdGVyKTsKKwl9CisJaWYgKHpyLT52ZmUpIHsKKwkJc3RydWN0IHZpZGVvY29kZWNfbWFzdGVyICptYXN0ZXIgPSB6ci0+dmZlLT5tYXN0ZXJfZGF0YTsKKworCQl2aWRlb2NvZGVjX2RldGFjaCh6ci0+dmZlKTsKKwkJa2ZyZWUobWFzdGVyKTsKKwl9CisKKwkvKiB1bnJlZ2lzdGVyIGkyYyBidXMgKi8KKwl6b3Jhbl91bnJlZ2lzdGVyX2kyYyh6cik7CisJLyogZGlzYWJsZSBQQ0kgYnVzLW1hc3RlcmluZyAqLworCXpvcmFuX3NldF9wY2lfbWFzdGVyKHpyLCAwKTsKKwkvKiBwdXQgY2hpcCBpbnRvIHJlc2V0ICovCisJYnR3cml0ZSgwLCBaUjM2MDU3X1NQR1BQQ1IpOworCWZyZWVfaXJxKHpyLT5wY2lfZGV2LT5pcnEsIHpyKTsKKwkvKiB1bm1hcCBhbmQgZnJlZSBtZW1vcnkgKi8KKwlrZnJlZSh6ci0+c3RhdF9jb20pOworCXpvcmFuX3Byb2NfY2xlYW51cCh6cik7CisJaW91bm1hcCh6ci0+enIzNjA1N19tZW0pOworCXBjaV9kaXNhYmxlX2RldmljZSh6ci0+cGNpX2Rldik7CisJdmlkZW9fdW5yZWdpc3Rlcl9kZXZpY2UoenItPnZpZGVvX2Rldik7CitleGl0X2ZyZWU6CisJa2ZyZWUoenIpOworfQorCit2b2lkCit6b3Jhbl92ZGV2X3JlbGVhc2UgKHN0cnVjdCB2aWRlb19kZXZpY2UgKnZkZXYpCit7CisJa2ZyZWUodmRldik7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdmlkZW9jb2RlY19tYXN0ZXIgKiBfX2RldmluaXQKK3pvcmFuX3NldHVwX3ZpZGVvY29kZWMgKHN0cnVjdCB6b3JhbiAqenIsCisJCQlpbnQgICAgICAgICAgIHR5cGUpCit7CisJc3RydWN0IHZpZGVvY29kZWNfbWFzdGVyICptID0gTlVMTDsKKworCW0gPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgdmlkZW9jb2RlY19tYXN0ZXIpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIW0pIHsKKwkJZHByaW50aygxLAorCQkJS0VSTl9FUlIKKwkJCSIlczogem9yYW5fc2V0dXBfdmlkZW9jb2RlYygpIC0gbm8gbWVtb3J5XG4iLAorCQkJWlJfREVWTkFNRSh6cikpOworCQlyZXR1cm4gbTsKKwl9CisKKwkvKiBtYWdpYyBhbmQgdHlwZSBhcmUgdW51c2VkIGZvciBtYXN0ZXIgc3RydWN0LiBNYWtlcyBzZW5zZSBvbmx5IGF0CisJICAgY29kZWMgc3RydWN0cy4KKwkgICBJbiB0aGUgcGFzdCwgLnR5cGUgd2VyZSBpbml0aWFsaXplZCB0byB0aGUgb2xkIFY0TDEgLmhhcmR3YXJlCisJICAgdmFsdWUsIGFzIFZJRF9IQVJEV0FSRV9aUjM2MDY3CisJICovCisJbS0+bWFnaWMgPSAwTDsKKwltLT50eXBlID0gMDsKKworCW0tPmZsYWdzID0gQ09ERUNfRkxBR19FTkNPREVSIHwgQ09ERUNfRkxBR19ERUNPREVSOworCXN0cm5jcHkobS0+bmFtZSwgWlJfREVWTkFNRSh6ciksIHNpemVvZihtLT5uYW1lKSk7CisJbS0+ZGF0YSA9IHpyOworCisJc3dpdGNoICh0eXBlKQorCXsKKwljYXNlIENPREVDX1RZUEVfWlIzNjA2MDoKKwkJbS0+cmVhZHJlZyA9IHpyMzYwNjBfcmVhZDsKKwkJbS0+d3JpdGVyZWcgPSB6cjM2MDYwX3dyaXRlOworCQltLT5mbGFncyB8PSBDT0RFQ19GTEFHX0pQRUcgfCBDT0RFQ19GTEFHX1ZGRTsKKwkJYnJlYWs7CisJY2FzZSBDT0RFQ19UWVBFX1pSMzYwNTA6CisJCW0tPnJlYWRyZWcgPSB6cjM2MDUwX3JlYWQ7CisJCW0tPndyaXRlcmVnID0genIzNjA1MF93cml0ZTsKKwkJbS0+ZmxhZ3MgfD0gQ09ERUNfRkxBR19KUEVHOworCQlicmVhazsKKwljYXNlIENPREVDX1RZUEVfWlIzNjAxNjoKKwkJbS0+cmVhZHJlZyA9IHpyMzYwMTZfcmVhZDsKKwkJbS0+d3JpdGVyZWcgPSB6cjM2MDE2X3dyaXRlOworCQltLT5mbGFncyB8PSBDT0RFQ19GTEFHX1ZGRTsKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIG07Cit9CisKKy8qCisgKiAgIFNjYW4gZm9yIGEgQnV6IGNhcmQgKGFjdHVhbGx5IGZvciB0aGUgUENJIGNvbnRyb2xsZXIgWlIzNjA1NyksCisgKiAgIHJlcXVlc3QgdGhlIGlycSBhbmQgbWFwIHRoZSBpbyBtZW1vcnkKKyAqLworc3RhdGljIGludCBfX2RldmluaXQKK2ZpbmRfenIzNjA1NyAodm9pZCkKK3sKKwl1bnNpZ25lZCBjaGFyIGxhdGVuY3ksIG5lZWRfbGF0ZW5jeTsKKwlzdHJ1Y3Qgem9yYW4gKnpyOworCXN0cnVjdCBwY2lfZGV2ICpkZXYgPSBOVUxMOworCWludCByZXN1bHQ7CisJc3RydWN0IHZpZGVvY29kZWNfbWFzdGVyICptYXN0ZXJfdmZlID0gTlVMTDsKKwlzdHJ1Y3QgdmlkZW9jb2RlY19tYXN0ZXIgKm1hc3Rlcl9jb2RlYyA9IE5VTEw7CisJaW50IGNhcmRfbnVtOworCWNoYXIgKmkyY19lbmNfbmFtZSwgKmkyY19kZWNfbmFtZSwgKmNvZGVjX25hbWUsICp2ZmVfbmFtZTsKKworCXpvcmFuX251bSA9IDA7CisJd2hpbGUgKHpvcmFuX251bSA8IEJVWl9NQVggJiYKKwkgICAgICAgKGRldiA9IHBjaV9nZXRfZGV2aWNlKFBDSV9WRU5ET1JfSURfWk9SQU4sIFBDSV9ERVZJQ0VfSURfWk9SQU5fMzYwNTcsIGRldikpICE9IE5VTEwpIHsKKwkJY2FyZF9udW0gPSBjYXJkW3pvcmFuX251bV07CisJCXpyID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHpvcmFuKSwgR0ZQX0tFUk5FTCk7CisJCWlmICghenIpIHsKKwkJCWRwcmludGsoMSwKKwkJCQlLRVJOX0VSUgorCQkJCSIlczogZmluZF96cjM2MDU3KCkgLSBremFsbG9jIGZhaWxlZFxuIiwKKwkJCQlaT1JBTl9OQU1FKTsKKwkJCWNvbnRpbnVlOworCQl9CisJCXpyLT5wY2lfZGV2ID0gZGV2OworCQkvL3pyLT56cjM2MDU3X21lbSA9IE5VTEw7CisJCXpyLT5pZCA9IHpvcmFuX251bTsKKwkJc25wcmludGYoWlJfREVWTkFNRSh6ciksIHNpemVvZihaUl9ERVZOQU1FKHpyKSksICJNSlBFR1sldV0iLCB6ci0+aWQpOworCQlzcGluX2xvY2tfaW5pdCgmenItPnNwaW5sb2NrKTsKKwkJbXV0ZXhfaW5pdCgmenItPnJlc291cmNlX2xvY2spOworCQlpZiAocGNpX2VuYWJsZV9kZXZpY2UoZGV2KSkKKwkJCWdvdG8genJfZnJlZV9tZW07CisJCXpyLT56cjM2MDU3X2FkciA9IHBjaV9yZXNvdXJjZV9zdGFydCh6ci0+cGNpX2RldiwgMCk7CisJCXBjaV9yZWFkX2NvbmZpZ19ieXRlKHpyLT5wY2lfZGV2LCBQQ0lfQ0xBU1NfUkVWSVNJT04sCisJCQkJICAgICAmenItPnJldmlzaW9uKTsKKwkJaWYgKHpyLT5yZXZpc2lvbiA8IDIpIHsKKwkJCWRwcmludGsoMSwKKwkJCQlLRVJOX0lORk8KKwkJCQkiJXM6IFpvcmFuIFpSMzYwNTcgKHJldiAlZCkgaXJxOiAlZCwgbWVtb3J5OiAweCUwOHguXG4iLAorCQkJCVpSX0RFVk5BTUUoenIpLCB6ci0+cmV2aXNpb24sIHpyLT5wY2lfZGV2LT5pcnEsCisJCQkJenItPnpyMzYwNTdfYWRyKTsKKworCQkJaWYgKGNhcmRfbnVtID09IC0xKSB7CisJCQkJZHByaW50aygxLAorCQkJCQlLRVJOX0VSUgorCQkJCQkiJXM6IGZpbmRfenIzNjA1NygpIC0gbm8gY2FyZCBzcGVjaWZpZWQsIHBsZWFzZSB1c2UgdGhlIGNhcmQ9WCBpbnNtb2Qgb3B0aW9uXG4iLAorCQkJCQlaUl9ERVZOQU1FKHpyKSk7CisJCQkJZ290byB6cl9mcmVlX21lbTsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCWludCBpOworCQkJdW5zaWduZWQgc2hvcnQgc3NfdmVuZG9yLCBzc19kZXZpY2U7CisKKwkJCXNzX3ZlbmRvciA9IHpyLT5wY2lfZGV2LT5zdWJzeXN0ZW1fdmVuZG9yOworCQkJc3NfZGV2aWNlID0genItPnBjaV9kZXYtPnN1YnN5c3RlbV9kZXZpY2U7CisJCQlkcHJpbnRrKDEsCisJCQkJS0VSTl9JTkZPCisJCQkJIiVzOiBab3JhbiBaUjM2MDY3IChyZXYgJWQpIGlycTogJWQsIG1lbW9yeTogMHglMDh4XG4iLAorCQkJCVpSX0RFVk5BTUUoenIpLCB6ci0+cmV2aXNpb24sIHpyLT5wY2lfZGV2LT5pcnEsCisJCQkJenItPnpyMzYwNTdfYWRyKTsKKwkJCWRwcmludGsoMSwKKwkJCQlLRVJOX0lORk8KKwkJCQkiJXM6IHN1YnN5c3RlbSB2ZW5kb3I9MHglMDR4IGlkPTB4JTA0eFxuIiwKKwkJCQlaUl9ERVZOQU1FKHpyKSwgc3NfdmVuZG9yLCBzc19kZXZpY2UpOworCQkJaWYgKGNhcmRfbnVtID09IC0xKSB7CisJCQkJZHByaW50aygzLAorCQkJCQlLRVJOX0RFQlVHCisJCQkJCSIlczogZmluZF96cjM2MDU3KCkgLSB0cnlpbmcgdG8gYXV0b2RldGVjdCBjYXJkIHR5cGVcbiIsCisJCQkJCVpSX0RFVk5BTUUoenIpKTsKKwkJCQlmb3IgKGk9MDtpPE5VTV9DQVJEUztpKyspIHsKKwkJCQkJaWYgKHNzX3ZlbmRvciA9PSB6b3Jhbl9jYXJkc1tpXS52ZW5kb3JfaWQgJiYKKwkJCQkJICAgIHNzX2RldmljZSA9PSB6b3Jhbl9jYXJkc1tpXS5kZXZpY2VfaWQpIHsKKwkJCQkJCWRwcmludGsoMywKKwkJCQkJCQlLRVJOX0RFQlVHCisJCQkJCQkJIiVzOiBmaW5kX3pyMzYwNTcoKSAtIGNhcmQgJXMgZGV0ZWN0ZWRcbiIsCisJCQkJCQkJWlJfREVWTkFNRSh6ciksCisJCQkJCQkJem9yYW5fY2FyZHNbaV0ubmFtZSk7CisJCQkJCQljYXJkX251bSA9IGk7CisJCQkJCQlicmVhazsKKwkJCQkJfQorCQkJCX0KKwkJCQlpZiAoaSA9PSBOVU1fQ0FSRFMpIHsKKwkJCQkJZHByaW50aygxLAorCQkJCQkJS0VSTl9FUlIKKwkJCQkJCSIlczogZmluZF96cjM2MDU3KCkgLSB1bmtub3duIGNhcmRcbiIsCisJCQkJCQlaUl9ERVZOQU1FKHpyKSk7CisJCQkJCWdvdG8genJfZnJlZV9tZW07CisJCQkJfQorCQkJfQorCQl9CisKKwkJaWYgKGNhcmRfbnVtIDwgMCB8fCBjYXJkX251bSA+PSBOVU1fQ0FSRFMpIHsKKwkJCWRwcmludGsoMiwKKwkJCQlLRVJOX0VSUgorCQkJCSIlczogZmluZF96cjM2MDU3KCkgLSBpbnZhbGlkIGNhcmRudW0gJWRcbiIsCisJCQkJWlJfREVWTkFNRSh6ciksIGNhcmRfbnVtKTsKKwkJCWdvdG8genJfZnJlZV9tZW07CisJCX0KKworCQkvKiBldmVuIHRob3VnaCB3ZSBtYWtlIHRoaXMgYSBub24gcG9pbnRlciBhbmQgdGh1cworCQkgKiB0aGVvcmV0aWNhbGx5IGFsbG93IGZvciBtYWtpbmcgY2hhbmdlcyB0byB0aGlzIHN0cnVjdAorCQkgKiBvbiBhIHBlci1pbmRpdmlkdWFsIGNhcmQgYmFzaXMgYXQgcnVudGltZSwgdGhpcyBpcworCQkgKiBzdHJvbmdseSBkaXNjb3VyYWdlZC4gVGhpcyBzdHJ1Y3R1cmUgaXMgaW50ZW5kZWQgdG8KKwkJICoga2VlcCBnZW5lcmFsIGNhcmQgaW5mb3JtYXRpb24sIG5vIHNldHRpbmdzIG9yIGFueXRoaW5nICovCisJCXpyLT5jYXJkID0gem9yYW5fY2FyZHNbY2FyZF9udW1dOworCQlzbnByaW50ZihaUl9ERVZOQU1FKHpyKSwgc2l6ZW9mKFpSX0RFVk5BTUUoenIpKSwKKwkJCSAiJXNbJXVdIiwgenItPmNhcmQubmFtZSwgenItPmlkKTsKKworCQl6ci0+enIzNjA1N19tZW0gPSBpb3JlbWFwX25vY2FjaGUoenItPnpyMzYwNTdfYWRyLCAweDEwMDApOworCQlpZiAoIXpyLT56cjM2MDU3X21lbSkgeworCQkJZHByaW50aygxLAorCQkJCUtFUk5fRVJSCisJCQkJIiVzOiBmaW5kX3pyMzYwNTcoKSAtIGlvcmVtYXAgZmFpbGVkXG4iLAorCQkJCVpSX0RFVk5BTUUoenIpKTsKKwkJCWdvdG8genJfZnJlZV9tZW07CisJCX0KKworCQlyZXN1bHQgPSByZXF1ZXN0X2lycSh6ci0+cGNpX2Rldi0+aXJxLAorCQkJCSAgICAgem9yYW5faXJxLAorCQkJCSAgICAgSVJRRl9TSEFSRUQgfCBJUlFGX0RJU0FCTEVELAorCQkJCSAgICAgWlJfREVWTkFNRSh6ciksCisJCQkJICAgICAodm9pZCAqKSB6cik7CisJCWlmIChyZXN1bHQgPCAwKSB7CisJCQlpZiAocmVzdWx0ID09IC1FSU5WQUwpIHsKKwkJCQlkcHJpbnRrKDEsCisJCQkJCUtFUk5fRVJSCisJCQkJCSIlczogZmluZF96cjM2MDU3KCkgLSBiYWQgaXJxIG51bWJlciBvciBoYW5kbGVyXG4iLAorCQkJCQlaUl9ERVZOQU1FKHpyKSk7CisJCQl9IGVsc2UgaWYgKHJlc3VsdCA9PSAtRUJVU1kpIHsKKwkJCQlkcHJpbnRrKDEsCisJCQkJCUtFUk5fRVJSCisJCQkJCSIlczogZmluZF96cjM2MDU3KCkgLSBJUlEgJWQgYnVzeSwgY2hhbmdlIHlvdXIgUG5QIGNvbmZpZyBpbiBCSU9TXG4iLAorCQkJCQlaUl9ERVZOQU1FKHpyKSwgenItPnBjaV9kZXYtPmlycSk7CisJCQl9IGVsc2UgeworCQkJCWRwcmludGsoMSwKKwkJCQkJS0VSTl9FUlIKKwkJCQkJIiVzOiBmaW5kX3pyMzYwNTcoKSAtIGNhbid0IGFzc2lnbiBpcnEsIGVycm9yIGNvZGUgJWRcbiIsCisJCQkJCVpSX0RFVk5BTUUoenIpLCByZXN1bHQpOworCQkJfQorCQkJZ290byB6cl91bm1hcDsKKwkJfQorCisJCS8qIHNldCBQQ0kgbGF0ZW5jeSB0aW1lciAqLworCQlwY2lfcmVhZF9jb25maWdfYnl0ZSh6ci0+cGNpX2RldiwgUENJX0xBVEVOQ1lfVElNRVIsCisJCQkJICAgICAmbGF0ZW5jeSk7CisJCW5lZWRfbGF0ZW5jeSA9IHpyLT5yZXZpc2lvbiA+IDEgPyAzMiA6IDQ4OworCQlpZiAobGF0ZW5jeSAhPSBuZWVkX2xhdGVuY3kpIHsKKwkJCWRwcmludGsoMiwKKwkJCQlLRVJOX0lORk8KKwkJCQkiJXM6IENoYW5naW5nIFBDSSBsYXRlbmN5IGZyb20gJWQgdG8gJWQuXG4iLAorCQkJCVpSX0RFVk5BTUUoenIpLCBsYXRlbmN5LCBuZWVkX2xhdGVuY3kpOworCQkJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKHpyLT5wY2lfZGV2LAorCQkJCQkgICAgICBQQ0lfTEFURU5DWV9USU1FUiwKKwkJCQkJICAgICAgbmVlZF9sYXRlbmN5KTsKKwkJfQorCisJCXpyMzYwNTdfcmVzdGFydCh6cik7CisJCS8qIGkyYyAqLworCQlkcHJpbnRrKDIsIEtFUk5fSU5GTyAiJXM6IEluaXRpYWxpemluZyBpMmMgYnVzLi4uXG4iLAorCQkJWlJfREVWTkFNRSh6cikpOworCisJCS8qIGkyYyBkZWNvZGVyICovCisJCWlmIChkZWNvZGVyW3pyLT5pZF0gIT0gLTEpIHsKKwkJCWkyY19kZWNfbmFtZSA9IGkyY2lkX3RvX21vZHVsZW5hbWUoZGVjb2Rlclt6ci0+aWRdKTsKKwkJCXpyLT5jYXJkLmkyY19kZWNvZGVyID0gZGVjb2Rlclt6ci0+aWRdOworCQl9IGVsc2UgaWYgKHpyLT5jYXJkLmkyY19kZWNvZGVyICE9IDApIHsKKwkJCWkyY19kZWNfbmFtZSA9CisJCQkJaTJjaWRfdG9fbW9kdWxlbmFtZSh6ci0+Y2FyZC5pMmNfZGVjb2Rlcik7CisJCX0gZWxzZSB7CisJCQlpMmNfZGVjX25hbWUgPSBOVUxMOworCQl9CisKKwkJaWYgKGkyY19kZWNfbmFtZSkgeworCQkJaWYgKChyZXN1bHQgPSByZXF1ZXN0X21vZHVsZShpMmNfZGVjX25hbWUpKSA8IDApIHsKKwkJCQlkcHJpbnRrKDEsCisJCQkJCUtFUk5fRVJSCisJCQkJCSIlczogZmFpbGVkIHRvIGxvYWQgbW9kdWxlICVzOiAlZFxuIiwKKwkJCQkJWlJfREVWTkFNRSh6ciksIGkyY19kZWNfbmFtZSwgcmVzdWx0KTsKKwkJCX0KKwkJfQorCisJCS8qIGkyYyBlbmNvZGVyICovCisJCWlmIChlbmNvZGVyW3pyLT5pZF0gIT0gLTEpIHsKKwkJCWkyY19lbmNfbmFtZSA9IGkyY2lkX3RvX21vZHVsZW5hbWUoZW5jb2Rlclt6ci0+aWRdKTsKKwkJCXpyLT5jYXJkLmkyY19lbmNvZGVyID0gZW5jb2Rlclt6ci0+aWRdOworCQl9IGVsc2UgaWYgKHpyLT5jYXJkLmkyY19lbmNvZGVyICE9IDApIHsKKwkJCWkyY19lbmNfbmFtZSA9CisJCQkJaTJjaWRfdG9fbW9kdWxlbmFtZSh6ci0+Y2FyZC5pMmNfZW5jb2Rlcik7CisJCX0gZWxzZSB7CisJCQlpMmNfZW5jX25hbWUgPSBOVUxMOworCQl9CisKKwkJaWYgKGkyY19lbmNfbmFtZSkgeworCQkJaWYgKChyZXN1bHQgPSByZXF1ZXN0X21vZHVsZShpMmNfZW5jX25hbWUpKSA8IDApIHsKKwkJCQlkcHJpbnRrKDEsCisJCQkJCUtFUk5fRVJSCisJCQkJCSIlczogZmFpbGVkIHRvIGxvYWQgbW9kdWxlICVzOiAlZFxuIiwKKwkJCQkJWlJfREVWTkFNRSh6ciksIGkyY19lbmNfbmFtZSwgcmVzdWx0KTsKKwkJCX0KKwkJfQorCisJCWlmICh6b3Jhbl9yZWdpc3Rlcl9pMmMoenIpIDwgMCkgeworCQkJZHByaW50aygxLAorCQkJCUtFUk5fRVJSCisJCQkJIiVzOiBmaW5kX3pyMzYwNTcoKSAtIGNhbid0IGluaXRpYWxpemUgaTJjIGJ1c1xuIiwKKwkJCQlaUl9ERVZOQU1FKHpyKSk7CisJCQlnb3RvIHpyX2ZyZWVfaXJxOworCQl9CisKKwkJZHByaW50aygyLAorCQkJS0VSTl9JTkZPICIlczogSW5pdGlhbGl6aW5nIHZpZGVvY29kZWMgYnVzLi4uXG4iLAorCQkJWlJfREVWTkFNRSh6cikpOworCisJCWlmICh6ci0+Y2FyZC52aWRlb19jb2RlYyAhPSAwICYmCisJCSAgICAoY29kZWNfbmFtZSA9CisJCSAgICAgY29kZWNpZF90b19tb2R1bGVuYW1lKHpyLT5jYXJkLnZpZGVvX2NvZGVjKSkgIT0gTlVMTCkgeworCQkJaWYgKChyZXN1bHQgPSByZXF1ZXN0X21vZHVsZShjb2RlY19uYW1lKSkgPCAwKSB7CisJCQkJZHByaW50aygxLAorCQkJCQlLRVJOX0VSUgorCQkJCQkiJXM6IGZhaWxlZCB0byBsb2FkIG1vZHVsZXMgJXM6ICVkXG4iLAorCQkJCQlaUl9ERVZOQU1FKHpyKSwgY29kZWNfbmFtZSwgcmVzdWx0KTsKKwkJCX0KKwkJfQorCQlpZiAoenItPmNhcmQudmlkZW9fdmZlICE9IDAgJiYKKwkJICAgICh2ZmVfbmFtZSA9CisJCSAgICAgY29kZWNpZF90b19tb2R1bGVuYW1lKHpyLT5jYXJkLnZpZGVvX3ZmZSkpICE9IE5VTEwpIHsKKwkJCWlmICgocmVzdWx0ID0gcmVxdWVzdF9tb2R1bGUodmZlX25hbWUpKSA8IDApIHsKKwkJCQlkcHJpbnRrKDEsCisJCQkJCUtFUk5fRVJSCisJCQkJCSIlczogZmFpbGVkIHRvIGxvYWQgbW9kdWxlcyAlczogJWRcbiIsCisJCQkJCVpSX0RFVk5BTUUoenIpLCB2ZmVfbmFtZSwgcmVzdWx0KTsKKwkJCX0KKwkJfQorCisJCS8qIHJlc2V0IEpQRUcgY29kZWMgKi8KKwkJanBlZ19jb2RlY19zbGVlcCh6ciwgMSk7CisJCWpwZWdfY29kZWNfcmVzZXQoenIpOworCQkvKiB2aWRlbyBidXMgZW5hYmxlZCAqLworCQkvKiBkaXNwbGF5IGNvZGVjIHJldmlzaW9uICovCisJCWlmICh6ci0+Y2FyZC52aWRlb19jb2RlYyAhPSAwKSB7CisJCQltYXN0ZXJfY29kZWMgPSB6b3Jhbl9zZXR1cF92aWRlb2NvZGVjKHpyLAorCQkJCQkJCSAgICAgIHpyLT5jYXJkLnZpZGVvX2NvZGVjKTsKKwkJCWlmICghbWFzdGVyX2NvZGVjKQorCQkJCWdvdG8genJfdW5yZWdfaTJjOworCQkJenItPmNvZGVjID0gdmlkZW9jb2RlY19hdHRhY2gobWFzdGVyX2NvZGVjKTsKKwkJCWlmICghenItPmNvZGVjKSB7CisJCQkJZHByaW50aygxLAorCQkJCQlLRVJOX0VSUgorCQkJCQkiJXM6IGZpbmRfenIzNjA1NygpIC0gbm8gY29kZWMgZm91bmRcbiIsCisJCQkJCVpSX0RFVk5BTUUoenIpKTsKKwkJCQlnb3RvIHpyX2ZyZWVfY29kZWM7CisJCQl9CisJCQlpZiAoenItPmNvZGVjLT50eXBlICE9IHpyLT5jYXJkLnZpZGVvX2NvZGVjKSB7CisJCQkJZHByaW50aygxLAorCQkJCQlLRVJOX0VSUgorCQkJCQkiJXM6IGZpbmRfenIzNjA1NygpIC0gd3JvbmcgY29kZWNcbiIsCisJCQkJCVpSX0RFVk5BTUUoenIpKTsKKwkJCQlnb3RvIHpyX2RldGFjaF9jb2RlYzsKKwkJCX0KKwkJfQorCQlpZiAoenItPmNhcmQudmlkZW9fdmZlICE9IDApIHsKKwkJCW1hc3Rlcl92ZmUgPSB6b3Jhbl9zZXR1cF92aWRlb2NvZGVjKHpyLAorCQkJCQkJCSAgICB6ci0+Y2FyZC52aWRlb192ZmUpOworCQkJaWYgKCFtYXN0ZXJfdmZlKQorCQkJCWdvdG8genJfZGV0YWNoX2NvZGVjOworCQkJenItPnZmZSA9IHZpZGVvY29kZWNfYXR0YWNoKG1hc3Rlcl92ZmUpOworCQkJaWYgKCF6ci0+dmZlKSB7CisJCQkJZHByaW50aygxLAorCQkJCQlLRVJOX0VSUgorCQkJCQkiJXM6IGZpbmRfenIzNjA1NygpIC0gbm8gVkZFIGZvdW5kXG4iLAorCQkJCQlaUl9ERVZOQU1FKHpyKSk7CisJCQkJZ290byB6cl9mcmVlX3ZmZTsKKwkJCX0KKwkJCWlmICh6ci0+dmZlLT50eXBlICE9IHpyLT5jYXJkLnZpZGVvX3ZmZSkgeworCQkJCWRwcmludGsoMSwKKwkJCQkJS0VSTl9FUlIKKwkJCQkJIiVzOiBmaW5kX3pyMzYwNTcoKSA9IHdyb25nIFZGRVxuIiwKKwkJCQkJWlJfREVWTkFNRSh6cikpOworCQkJCWdvdG8genJfZGV0YWNoX3ZmZTsKKwkJCX0KKwkJfQorCQkvKiBTdWNjZXNzIHNvIGtlZXAgdGhlIHBjaV9kZXYgcmVmZXJlbmNlZCAqLworCQlwY2lfZGV2X2dldCh6ci0+cGNpX2Rldik7CisJCXpvcmFuW3pvcmFuX251bSsrXSA9IHpyOworCQljb250aW51ZTsKKworCQkvLyBJbml0IGVycm9ycworCSAgICAgIHpyX2RldGFjaF92ZmU6CisJCXZpZGVvY29kZWNfZGV0YWNoKHpyLT52ZmUpOworCSAgICAgIHpyX2ZyZWVfdmZlOgorCQlrZnJlZShtYXN0ZXJfdmZlKTsKKwkgICAgICB6cl9kZXRhY2hfY29kZWM6CisJCXZpZGVvY29kZWNfZGV0YWNoKHpyLT5jb2RlYyk7CisJICAgICAgenJfZnJlZV9jb2RlYzoKKwkJa2ZyZWUobWFzdGVyX2NvZGVjKTsKKwkgICAgICB6cl91bnJlZ19pMmM6CisJCXpvcmFuX3VucmVnaXN0ZXJfaTJjKHpyKTsKKwkgICAgICB6cl9mcmVlX2lycToKKwkJYnR3cml0ZSgwLCBaUjM2MDU3X1NQR1BQQ1IpOworCQlmcmVlX2lycSh6ci0+cGNpX2Rldi0+aXJxLCB6cik7CisJICAgICAgenJfdW5tYXA6CisJCWlvdW5tYXAoenItPnpyMzYwNTdfbWVtKTsKKwkgICAgICB6cl9mcmVlX21lbToKKwkJa2ZyZWUoenIpOworCQljb250aW51ZTsKKwl9CisJaWYgKGRldikJLyogQ2xlYW4gdXAgcmVmIGNvdW50IG9uIGVhcmx5IGV4aXQgKi8KKwkJcGNpX2Rldl9wdXQoZGV2KTsKKworCWlmICh6b3Jhbl9udW0gPT0gMCkgeworCQlkcHJpbnRrKDEsIEtFUk5fSU5GTyAiTm8ga25vd24gTUpQRUcgY2FyZHMgZm91bmQuXG4iKTsKKwl9CisJcmV0dXJuIHpvcmFuX251bTsKK30KKworc3RhdGljIGludCBfX2luaXQKK2luaXRfZGMxMF9jYXJkcyAodm9pZCkKK3sKKwlpbnQgaTsKKworCW1lbXNldCh6b3JhbiwgMCwgc2l6ZW9mKHpvcmFuKSk7CisJcHJpbnRrKEtFUk5fSU5GTyAiWm9yYW4gTUpQRUcgYm9hcmQgZHJpdmVyIHZlcnNpb24gJWQuJWQuJWRcbiIsCisJICAgICAgIE1BSk9SX1ZFUlNJT04sIE1JTk9SX1ZFUlNJT04sIFJFTEVBU0VfVkVSU0lPTik7CisKKwkvKiBMb29rIGZvciBjYXJkcyAqLworCWlmIChmaW5kX3pyMzYwNTcoKSA8IDApIHsKKwkJcmV0dXJuIC1FSU87CisJfQorCWlmICh6b3Jhbl9udW0gPT0gMCkKKwkJcmV0dXJuIC1FTk9ERVY7CisJZHByaW50aygxLCBLRVJOX0lORk8gIiVzOiAlZCBjYXJkKHMpIGZvdW5kXG4iLCBaT1JBTl9OQU1FLAorCQl6b3Jhbl9udW0pOworCS8qIGNoZWNrIHRoZSBwYXJhbWV0ZXJzIHdlIGhhdmUgYmVlbiBnaXZlbiwgYWRqdXN0IGlmIG5lY2Vzc2FyeSAqLworCWlmICh2NGxfbmJ1ZnMgPCAyKQorCQl2NGxfbmJ1ZnMgPSAyOworCWlmICh2NGxfbmJ1ZnMgPiBWSURFT19NQVhfRlJBTUUpCisJCXY0bF9uYnVmcyA9IFZJREVPX01BWF9GUkFNRTsKKwkvKiBUaGUgdXNlciBzcGVjZmllcyB0aGUgaW4gS0IsIHdlIHdhbnQgdGhlbSBpbiBieXRlCisJICogKGFuZCBwYWdlIGFsaWduZWQpICovCisJdjRsX2J1ZnNpemUgPSBQQUdFX0FMSUdOKHY0bF9idWZzaXplICogMTAyNCk7CisJaWYgKHY0bF9idWZzaXplIDwgMzI3NjgpCisJCXY0bF9idWZzaXplID0gMzI3Njg7CisJLyogMiBNQiBpcyBhcmJpdHJhcnkgYnV0IHN1ZmZpY2llbnQgZm9yIHRoZSBtYXhpbXVtIHBvc3NpYmxlIGltYWdlcyAqLworCWlmICh2NGxfYnVmc2l6ZSA+IDIwNDggKiAxMDI0KQorCQl2NGxfYnVmc2l6ZSA9IDIwNDggKiAxMDI0OworCWlmIChqcGdfbmJ1ZnMgPCA0KQorCQlqcGdfbmJ1ZnMgPSA0OworCWlmIChqcGdfbmJ1ZnMgPiBCVVpfTUFYX0ZSQU1FKQorCQlqcGdfbmJ1ZnMgPSBCVVpfTUFYX0ZSQU1FOworCWpwZ19idWZzaXplID0gUEFHRV9BTElHTihqcGdfYnVmc2l6ZSAqIDEwMjQpOworCWlmIChqcGdfYnVmc2l6ZSA8IDgxOTIpCisJCWpwZ19idWZzaXplID0gODE5MjsKKwlpZiAoanBnX2J1ZnNpemUgPiAoNTEyICogMTAyNCkpCisJCWpwZ19idWZzaXplID0gNTEyICogMTAyNDsKKwkvKiBVc2UgcGFyYW1ldGVyIGZvciB2aWRtZW0gb3IgdHJ5IHRvIGZpbmQgYSB2aWRlbyBjYXJkICovCisJaWYgKHZpZG1lbSkgeworCQlkcHJpbnRrKDEsCisJCQlLRVJOX0lORk8KKwkJCSIlczogVXNpbmcgc3VwcGxpZWQgdmlkZW8gbWVtb3J5IGJhc2UgYWRkcmVzcyBAIDB4JWx4XG4iLAorCQkJWk9SQU5fTkFNRSwgdmlkbWVtKTsKKwl9CisKKwkvKiByYW5kb20gbm9uc2Vuc2UgKi8KKwlkcHJpbnRrKDYsIEtFUk5fREVCVUcgIkpvdHRpIGlzIGVlbiBoZWxkIVxuIik7CisKKwkvKiBzb21lIG1haW5ib2FyZHMgbWlnaHQgbm90IGRvIFBDSS1QQ0kgZGF0YSB0cmFuc2ZlciB3ZWxsICovCisJaWYgKHBjaV9wY2lfcHJvYmxlbXMgJiAoUENJUENJX0ZBSUx8UENJQUdQX0ZBSUx8UENJUENJX0FMSU1BR0lLKSkgeworCQlkcHJpbnRrKDEsCisJCQlLRVJOX1dBUk5JTkcKKwkJCSIlczogY2hpcHNldCBkb2VzIG5vdCBzdXBwb3J0IHJlbGlhYmxlIFBDSS1QQ0kgRE1BXG4iLAorCQkJWk9SQU5fTkFNRSk7CisJfQorCisJLyogdGFrZSBjYXJlIG9mIE5hdG9tYSBjaGlwc2V0IGFuZCBhIHJldmlzaW9uIDEgenIzNjA1NyAqLworCWZvciAoaSA9IDA7IGkgPCB6b3Jhbl9udW07IGkrKykgeworCQlzdHJ1Y3Qgem9yYW4gKnpyID0gem9yYW5baV07CisKKwkJaWYgKChwY2lfcGNpX3Byb2JsZW1zICYgUENJUENJX05BVE9NQSkgJiYgenItPnJldmlzaW9uIDw9IDEpIHsKKwkJCXpyLT5qcGdfYnVmZmVycy5uZWVkX2NvbnRpZ3VvdXMgPSAxOworCQkJZHByaW50aygxLAorCQkJCUtFUk5fSU5GTworCQkJCSIlczogWlIzNjA1Ny9OYXRvbWEgYnVnLCBtYXguIGJ1ZmZlciBzaXplIGlzIDEyOEtcbiIsCisJCQkJWlJfREVWTkFNRSh6cikpOworCQl9CisKKwkJaWYgKHpyMzYwNTdfaW5pdCh6cikgPCAwKSB7CisJCQlmb3IgKGkgPSAwOyBpIDwgem9yYW5fbnVtOyBpKyspCisJCQkJem9yYW5fcmVsZWFzZSh6b3JhbltpXSk7CisJCQlyZXR1cm4gLUVJTzsKKwkJfQorCQl6b3Jhbl9wcm9jX2luaXQoenIpOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQKK3VubG9hZF9kYzEwX2NhcmRzICh2b2lkKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IHpvcmFuX251bTsgaSsrKQorCQl6b3Jhbl9yZWxlYXNlKHpvcmFuW2ldKTsKK30KKworbW9kdWxlX2luaXQoaW5pdF9kYzEwX2NhcmRzKTsKK21vZHVsZV9leGl0KHVubG9hZF9kYzEwX2NhcmRzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vem9yYW5fY2FyZC5oIGIvZHJpdmVycy9tZWRpYS92aWRlby96b3Jhbi96b3Jhbl9jYXJkLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGRyaXZlcnMvbWVkaWEvdmlkZW8vem9yYW5fY2FyZC5oCnJlbmFtZSB0byBkcml2ZXJzL21lZGlhL3ZpZGVvL3pvcmFuL3pvcmFuX2NhcmQuaApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby96b3Jhbi96b3Jhbl9kZXZpY2UuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vem9yYW4vem9yYW5fZGV2aWNlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWQ5NDhmZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vem9yYW4vem9yYW5fZGV2aWNlLmMKQEAgLTAsMCArMSwxNzQ3IEBACisvKgorICogWm9yYW4genIzNjA1Ny96cjM2MDY3IFBDSSBjb250cm9sbGVyIGRyaXZlciwgZm9yIHRoZQorICogUGlubmFjbGUvTWlybyBEQzEwL0RDMTArL0RDMzAvREMzMCssIElvbWVnYSBCdXosIExpbnV4CisgKiBNZWRpYSBMYWJzIExNTDMzL0xNTDMzUjEwLgorICoKKyAqIFRoaXMgcGFydCBoYW5kbGVzIGRldmljZSBhY2Nlc3MgKFBDSS9JMkMvY29kZWMvLi4uKQorICoKKyAqIENvcHlyaWdodCAoQykgMjAwMCBTZXJndWVpIE1pcmlkb25vdiA8bWlyc2V2QGNpY2VzZS5teD4KKyAqCisgKiBDdXJyZW50bHkgbWFpbnRhaW5lZCBieToKKyAqICAgUm9uYWxkIEJ1bHRqZSAgICA8cmJ1bHRqZUByb25hbGQuYml0ZnJlYWsubmV0PgorICogICBMYXVyZW50IFBpbmNoYXJ0IDxsYXVyZW50LnBpbmNoYXJ0QHNreW5ldC5iZT4KKyAqICAgTWFpbGluZ2xpc3QgICAgICA8bWpwZWctdXNlcnNAbGlzdHMuc2YubmV0PgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KKworI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMtYWxnby1iaXQuaD4KKyNpbmNsdWRlIDxsaW51eC92aWRlb2Rldi5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvc2VtLmg+CisKKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC92aWRlb19kZWNvZGVyLmg+CisjaW5jbHVkZSA8bGludXgvdmlkZW9fZW5jb2Rlci5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvd2FpdC5oPgorCisjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorCisjaW5jbHVkZSAidmlkZW9jb2RlYy5oIgorI2luY2x1ZGUgInpvcmFuLmgiCisjaW5jbHVkZSAiem9yYW5fZGV2aWNlLmgiCisjaW5jbHVkZSAiem9yYW5fY2FyZC5oIgorCisjZGVmaW5lIElSUV9NQVNLICggWlIzNjA1N19JU1JfR0lSUTAgfCBcCisJCSAgIFpSMzYwNTdfSVNSX0dJUlExIHwgXAorCQkgICBaUjM2MDU3X0lTUl9KUEVHUmVwSVJRICkKKworc3RhdGljIGludCBsbWwzM2RwYXRoOwkJLyogZGVmYXVsdCA9IDAKKwkJCQkgKiAxIHdpbGwgdXNlIGRpZ2l0YWwgcGF0aCBpbiBjYXB0dXJlCisJCQkJICogbW9kZSBpbnN0ZWFkIG9mIGFuYWxvZy4gSXQgY2FuIGJlCisJCQkJICogdXNlZCBmb3IgcGljdHVyZSBhZGp1c3RtZW50cyB1c2luZworCQkJCSAqIHRvb2wgbGlrZSB4YXd0diB3aGlsZSB3YXRjaGluZyBpbWFnZQorCQkJCSAqIG9uIFRWIG1vbml0b3IgY29ubmVjdGVkIHRvIHRoZSBvdXRwdXQuCisJCQkJICogSG93ZXZlciwgZHVlIHRvIGFic2VuY2Ugb2YgNzUgT2htCisJCQkJICogbG9hZCBvbiBCdDgxOSBpbnB1dCwgdGhlcmUgd2lsbCBiZQorCQkJCSAqIHNvbWUgaW1hZ2UgaW1wZXJmZWN0aW9ucyAqLworCittb2R1bGVfcGFyYW0obG1sMzNkcGF0aCwgYm9vbCwgMDY0NCk7CitNT0RVTEVfUEFSTV9ERVNDKGxtbDMzZHBhdGgsCisJCSAiVXNlIGRpZ2l0YWwgcGF0aCBjYXB0dXJlIG1vZGUgKG9uIExNTDMzIGNhcmRzKSIpOworCitzdGF0aWMgdm9pZAorenIzNjA1N19pbml0X3ZmZSAoc3RydWN0IHpvcmFuICp6cik7CisKKy8qCisgKiBHZW5lcmFsIFB1cnBvc2UgSS9PIGFuZCBHdWVzdCBidXMgYWNjZXNzCisgKi8KKworLyoKKyAqIFRoaXMgaXMgYSBiaXQgdHJpY2t5LiBXaGVuIGEgYm9hcmQgbGFja3MgYSBHUElPIGZ1bmN0aW9uLCB0aGUgY29ycmVzcG9uZGluZworICogR1BJTyBiaXQgbnVtYmVyIGluIHRoZSBjYXJkX2luZm8gc3RydWN0dXJlIGlzIHNldCB0byAwLgorICovCisKK3ZvaWQKK0dQSU8gKHN0cnVjdCB6b3JhbiAqenIsCisgICAgICBpbnQgICAgICAgICAgIGJpdCwKKyAgICAgIHVuc2lnbmVkIGludCAgdmFsdWUpCit7CisJdTMyIHJlZzsKKwl1MzIgbWFzazsKKworCS8qIE1ha2Ugc3VyZSB0aGUgYml0IG51bWJlciBpcyBsZWdhbAorCSAqIEEgYml0IG51bWJlciBvZiAtMSAobGFja2luZykgZ2l2ZXMgYSBtYXNrIG9mIDAsCisJICogbWFraW5nIGl0IGhhcm1sZXNzICovCisJbWFzayA9ICgxIDw8ICgyNCArIGJpdCkpICYgMHhmZjAwMDAwMDsKKwlyZWcgPSBidHJlYWQoWlIzNjA1N19HUFBHQ1IxKSAmIH5tYXNrOworCWlmICh2YWx1ZSkgeworCQlyZWcgfD0gbWFzazsKKwl9CisJYnR3cml0ZShyZWcsIFpSMzYwNTdfR1BQR0NSMSk7CisJdWRlbGF5KDEpOworfQorCisvKgorICogV2FpdCB0aWwgcG9zdCBvZmZpY2UgaXMgbm8gbG9uZ2VyIGJ1c3kKKyAqLworCitpbnQKK3Bvc3Rfb2ZmaWNlX3dhaXQgKHN0cnVjdCB6b3JhbiAqenIpCit7CisJdTMyIHBvcjsKKworLy8gICAgICB3aGlsZSAoKChwb3IgPSBidHJlYWQoWlIzNjA1N19QT1IpKSAmIChaUjM2MDU3X1BPUl9QT1BlbiB8IFpSMzYwNTdfUE9SX1BPVGltZSkpID09IFpSMzYwNTdfUE9SX1BPUGVuKSB7CisJd2hpbGUgKChwb3IgPSBidHJlYWQoWlIzNjA1N19QT1IpKSAmIFpSMzYwNTdfUE9SX1BPUGVuKSB7CisJCS8qIHdhaXQgZm9yIHNvbWV0aGluZyB0byBoYXBwZW4gKi8KKwl9CisJaWYgKChwb3IgJiBaUjM2MDU3X1BPUl9QT1RpbWUpICYmICF6ci0+Y2FyZC5nd3Nfbm90X2Nvbm5lY3RlZCkgeworCQkvKiBJbiBMTUwzMy9CVVogXEdXUyBsaW5lIGlzIG5vdCBjb25uZWN0ZWQsIHNvIGl0IGhhcyBhbHdheXMgdGltZW91dCBzZXQgKi8KKwkJZHByaW50aygxLCBLRVJOX0lORk8gIiVzOiBwb3AgdGltZW91dCAlMDh4XG4iLCBaUl9ERVZOQU1FKHpyKSwKKwkJCXBvcik7CisJCXJldHVybiAtMTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworaW50Citwb3N0X29mZmljZV93cml0ZSAoc3RydWN0IHpvcmFuICp6ciwKKwkJICAgdW5zaWduZWQgaW50ICBndWVzdCwKKwkJICAgdW5zaWduZWQgaW50ICByZWcsCisJCSAgIHVuc2lnbmVkIGludCAgdmFsdWUpCit7CisJdTMyIHBvcjsKKworCXBvciA9CisJICAgIFpSMzYwNTdfUE9SX1BPRGlyIHwgWlIzNjA1N19QT1JfUE9UaW1lIHwgKChndWVzdCAmIDcpIDw8IDIwKSB8CisJICAgICgocmVnICYgNykgPDwgMTYpIHwgKHZhbHVlICYgMHhGRik7CisJYnR3cml0ZShwb3IsIFpSMzYwNTdfUE9SKTsKKworCXJldHVybiBwb3N0X29mZmljZV93YWl0KHpyKTsKK30KKworaW50Citwb3N0X29mZmljZV9yZWFkIChzdHJ1Y3Qgem9yYW4gKnpyLAorCQkgIHVuc2lnbmVkIGludCAgZ3Vlc3QsCisJCSAgdW5zaWduZWQgaW50ICByZWcpCit7CisJdTMyIHBvcjsKKworCXBvciA9IFpSMzYwNTdfUE9SX1BPVGltZSB8ICgoZ3Vlc3QgJiA3KSA8PCAyMCkgfCAoKHJlZyAmIDcpIDw8IDE2KTsKKwlidHdyaXRlKHBvciwgWlIzNjA1N19QT1IpOworCWlmIChwb3N0X29mZmljZV93YWl0KHpyKSA8IDApIHsKKwkJcmV0dXJuIC0xOworCX0KKworCXJldHVybiBidHJlYWQoWlIzNjA1N19QT1IpICYgMHhGRjsKK30KKworLyoKKyAqIGRldGVjdCBndWVzdHMKKyAqLworCitzdGF0aWMgdm9pZAorZHVtcF9ndWVzdHMgKHN0cnVjdCB6b3JhbiAqenIpCit7CisJaWYgKHpyMzYwNjdfZGVidWcgPiAyKSB7CisJCWludCBpLCBndWVzdFs4XTsKKworCQlmb3IgKGkgPSAxOyBpIDwgODsgaSsrKSB7CS8vIERvbid0IHJlYWQganBlZyBjb2RlYyBoZXJlCisJCQlndWVzdFtpXSA9IHBvc3Rfb2ZmaWNlX3JlYWQoenIsIGksIDApOworCQl9CisKKwkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IEd1ZXN0czoiLCBaUl9ERVZOQU1FKHpyKSk7CisKKwkJZm9yIChpID0gMTsgaSA8IDg7IGkrKykgeworCQkJcHJpbnRrKCIgMHglMDJ4IiwgZ3Vlc3RbaV0pOworCQl9CisJCXByaW50aygiXG4iKTsKKwl9Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZworZ2V0X3RpbWUgKHZvaWQpCit7CisJc3RydWN0IHRpbWV2YWwgdHY7CisKKwlkb19nZXR0aW1lb2ZkYXkoJnR2KTsKKwlyZXR1cm4gKDEwMDAwMDAgKiB0di50dl9zZWMgKyB0di50dl91c2VjKTsKK30KKwordm9pZAorZGV0ZWN0X2d1ZXN0X2FjdGl2aXR5IChzdHJ1Y3Qgem9yYW4gKnpyKQoreworCWludCB0aW1lb3V0LCBpLCBqLCByZXMsIGd1ZXN0WzhdLCBndWVzdDBbOF0sIGNoYW5nZVs4XVszXTsKKwl1bnNpZ25lZCBsb25nIHQwLCB0MTsKKworCWR1bXBfZ3Vlc3RzKHpyKTsKKwlwcmludGsoS0VSTl9JTkZPICIlczogRGV0ZWN0aW5nIGd1ZXN0cyBhY3Rpdml0eSwgcGxlYXNlIHdhaXQuLi5cbiIsCisJICAgICAgIFpSX0RFVk5BTUUoenIpKTsKKwlmb3IgKGkgPSAxOyBpIDwgODsgaSsrKSB7CS8vIERvbid0IHJlYWQganBlZyBjb2RlYyBoZXJlCisJCWd1ZXN0MFtpXSA9IGd1ZXN0W2ldID0gcG9zdF9vZmZpY2VfcmVhZCh6ciwgaSwgMCk7CisJfQorCisJdGltZW91dCA9IDA7CisJaiA9IDA7CisJdDAgPSBnZXRfdGltZSgpOworCXdoaWxlICh0aW1lb3V0IDwgMTAwMDApIHsKKwkJdWRlbGF5KDEwKTsKKwkJdGltZW91dCsrOworCQlmb3IgKGkgPSAxOyAoaSA8IDgpICYmIChqIDwgOCk7IGkrKykgeworCQkJcmVzID0gcG9zdF9vZmZpY2VfcmVhZCh6ciwgaSwgMCk7CisJCQlpZiAocmVzICE9IGd1ZXN0W2ldKSB7CisJCQkJdDEgPSBnZXRfdGltZSgpOworCQkJCWNoYW5nZVtqXVswXSA9ICh0MSAtIHQwKTsKKwkJCQl0MCA9IHQxOworCQkJCWNoYW5nZVtqXVsxXSA9IGk7CisJCQkJY2hhbmdlW2pdWzJdID0gcmVzOworCQkJCWorKzsKKwkJCQlndWVzdFtpXSA9IHJlczsKKwkJCX0KKwkJfQorCQlpZiAoaiA+PSA4KQorCQkJYnJlYWs7CisJfQorCXByaW50ayhLRVJOX0lORk8gIiVzOiBHdWVzdHM6IiwgWlJfREVWTkFNRSh6cikpOworCisJZm9yIChpID0gMTsgaSA8IDg7IGkrKykgeworCQlwcmludGsoIiAweCUwMngiLCBndWVzdDBbaV0pOworCX0KKwlwcmludGsoIlxuIik7CisJaWYgKGogPT0gMCkgeworCQlwcmludGsoS0VSTl9JTkZPICIlczogTm8gYWN0aXZpdHkgZGV0ZWN0ZWQuXG4iLCBaUl9ERVZOQU1FKHpyKSk7CisJCXJldHVybjsKKwl9CisJZm9yIChpID0gMDsgaSA8IGo7IGkrKykgeworCQlwcmludGsoS0VSTl9JTkZPICIlczogJTZkOiAlZCA9PiAweCUwMnhcbiIsIFpSX0RFVk5BTUUoenIpLAorCQkgICAgICAgY2hhbmdlW2ldWzBdLCBjaGFuZ2VbaV1bMV0sIGNoYW5nZVtpXVsyXSk7CisJfQorfQorCisvKgorICogSlBFRyBDb2RlYyBhY2Nlc3MKKyAqLworCit2b2lkCitqcGVnX2NvZGVjX3NsZWVwIChzdHJ1Y3Qgem9yYW4gKnpyLAorCQkgIGludCAgICAgICAgICAgc2xlZXApCit7CisJR1BJTyh6ciwgenItPmNhcmQuZ3Bpb1taUl9HUElPX0pQRUdfU0xFRVBdLCAhc2xlZXApOworCWlmICghc2xlZXApIHsKKwkJZHByaW50aygzLAorCQkJS0VSTl9ERUJVRworCQkJIiVzOiBqcGVnX2NvZGVjX3NsZWVwKCkgLSB3YWtlIEdQSU89MHglMDh4XG4iLAorCQkJWlJfREVWTkFNRSh6ciksIGJ0cmVhZChaUjM2MDU3X0dQUEdDUjEpKTsKKwkJdWRlbGF5KDUwMCk7CisJfSBlbHNlIHsKKwkJZHByaW50aygzLAorCQkJS0VSTl9ERUJVRworCQkJIiVzOiBqcGVnX2NvZGVjX3NsZWVwKCkgLSBzbGVlcCBHUElPPTB4JTA4eFxuIiwKKwkJCVpSX0RFVk5BTUUoenIpLCBidHJlYWQoWlIzNjA1N19HUFBHQ1IxKSk7CisJCXVkZWxheSgyKTsKKwl9Cit9CisKK2ludAoranBlZ19jb2RlY19yZXNldCAoc3RydWN0IHpvcmFuICp6cikKK3sKKwkvKiBUYWtlIHRoZSBjb2RlYyBvdXQgb2Ygc2xlZXAgKi8KKwlqcGVnX2NvZGVjX3NsZWVwKHpyLCAwKTsKKworCWlmICh6ci0+Y2FyZC5ncGNzW0dQQ1NfSlBFR19SRVNFVF0gIT0gMHhmZikgeworCQlwb3N0X29mZmljZV93cml0ZSh6ciwgenItPmNhcmQuZ3Bjc1tHUENTX0pQRUdfUkVTRVRdLCAwLAorCQkJCSAgMCk7CisJCXVkZWxheSgyKTsKKwl9IGVsc2UgeworCQlHUElPKHpyLCB6ci0+Y2FyZC5ncGlvW1pSX0dQSU9fSlBFR19SRVNFVF0sIDApOworCQl1ZGVsYXkoMik7CisJCUdQSU8oenIsIHpyLT5jYXJkLmdwaW9bWlJfR1BJT19KUEVHX1JFU0VUXSwgMSk7CisJCXVkZWxheSgyKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqICAgU2V0IHRoZSByZWdpc3RlcnMgZm9yIHRoZSBzaXplIHdlIGhhdmUgc3BlY2lmaWVkLiBEb24ndCBib3RoZXIKKyAqICAgdHJ5aW5nIHRvIHVuZGVyc3RhbmQgdGhpcyB3aXRob3V0IHRoZSBaUjM2MDU3IG1hbnVhbCBpbiBmcm9udCBvZgorICogICB5b3UgW0FDXS4KKyAqCisgKiAgIFBTOiBUaGUgbWFudWFsIGlzIGZyZWUgZm9yIGRvd25sb2FkIGluIC5wZGYgZm9ybWF0IGZyb20KKyAqICAgd3d3LnpvcmFuLmNvbSAtIG5pY2VseSBkb25lIHRob3NlIGZvbGtzLgorICovCisKK3N0YXRpYyB2b2lkCit6cjM2MDU3X2FkanVzdF92ZmUgKHN0cnVjdCB6b3JhbiAgICAgICAgICAqenIsCisJCSAgICBlbnVtIHpvcmFuX2NvZGVjX21vZGUgIG1vZGUpCit7CisJdTMyIHJlZzsKKworCXN3aXRjaCAobW9kZSkgeworCWNhc2UgQlVaX01PREVfTU9USU9OX0RFQ09NUFJFU1M6CisJCWJ0YW5kKH5aUjM2MDU3X1ZGRVNQRlJfRXh0RmwsIFpSMzYwNTdfVkZFU1BGUik7CisJCXJlZyA9IGJ0cmVhZChaUjM2MDU3X1ZGRUhDUik7CisJCWlmICgocmVnICYgKDEgPDwgMTApKSAmJiB6ci0+Y2FyZC50eXBlICE9IExNTDMzUjEwKSB7CisJCQlyZWcgKz0gKCgxIDw8IDEwKSB8IDEpOworCQl9CisJCWJ0d3JpdGUocmVnLCBaUjM2MDU3X1ZGRUhDUik7CisJCWJyZWFrOworCWNhc2UgQlVaX01PREVfTU9USU9OX0NPTVBSRVNTOgorCWNhc2UgQlVaX01PREVfSURMRToKKwlkZWZhdWx0OgorCQlpZiAoenItPm5vcm0gPT0gVklERU9fTU9ERV9OVFNDIHx8CisJCSAgICAoenItPmNhcmQudHlwZSA9PSBMTUwzM1IxMCAmJgorCQkgICAgIHpyLT5ub3JtID09IFZJREVPX01PREVfUEFMKSkKKwkJCWJ0YW5kKH5aUjM2MDU3X1ZGRVNQRlJfRXh0RmwsIFpSMzYwNTdfVkZFU1BGUik7CisJCWVsc2UKKwkJCWJ0b3IoWlIzNjA1N19WRkVTUEZSX0V4dEZsLCBaUjM2MDU3X1ZGRVNQRlIpOworCQlyZWcgPSBidHJlYWQoWlIzNjA1N19WRkVIQ1IpOworCQlpZiAoIShyZWcgJiAoMSA8PCAxMCkpICYmIHpyLT5jYXJkLnR5cGUgIT0gTE1MMzNSMTApIHsKKwkJCXJlZyAtPSAoKDEgPDwgMTApIHwgMSk7CisJCX0KKwkJYnR3cml0ZShyZWcsIFpSMzYwNTdfVkZFSENSKTsKKwkJYnJlYWs7CisJfQorfQorCisvKgorICogc2V0IGdlb21ldHJ5CisgKi8KKworc3RhdGljIHZvaWQKK3pyMzYwNTdfc2V0X3ZmZSAoc3RydWN0IHpvcmFuICAgICAgICAgICAgICAqenIsCisJCSBpbnQgICAgICAgICAgICAgICAgICAgICAgICB2aWRlb193aWR0aCwKKwkJIGludCAgICAgICAgICAgICAgICAgICAgICAgIHZpZGVvX2hlaWdodCwKKwkJIGNvbnN0IHN0cnVjdCB6b3Jhbl9mb3JtYXQgKmZvcm1hdCkKK3sKKwlzdHJ1Y3QgdHZub3JtICp0dm47CisJdW5zaWduZWQgSFN0YXJ0LCBIRW5kLCBWU3RhcnQsIFZFbmQ7CisJdW5zaWduZWQgRGlzcE1vZGU7CisJdW5zaWduZWQgVmlkV2luV2lkLCBWaWRXaW5IdDsKKwl1bnNpZ25lZCBoY3JvcDEsIGhjcm9wMiwgdmNyb3AxLCB2Y3JvcDI7CisJdW5zaWduZWQgV2EsIFdlLCBIYSwgSGU7CisJdW5zaWduZWQgWCwgWSwgSG9yRGNtLCBWZXJEY207CisJdTMyIHJlZzsKKwl1bnNpZ25lZCBtYXNrX2xpbmVfc2l6ZTsKKworCXR2biA9IHpyLT50aW1pbmc7CisKKwlXYSA9IHR2bi0+V2E7CisJSGEgPSB0dm4tPkhhOworCisJZHByaW50aygyLCBLRVJOX0lORk8gIiVzOiBzZXRfdmZlKCkgLSB3aWR0aCA9ICVkLCBoZWlnaHQgPSAlZFxuIiwKKwkJWlJfREVWTkFNRSh6ciksIHZpZGVvX3dpZHRoLCB2aWRlb19oZWlnaHQpOworCisJaWYgKHpyLT5ub3JtICE9IFZJREVPX01PREVfUEFMICYmCisJICAgIHpyLT5ub3JtICE9IFZJREVPX01PREVfTlRTQyAmJgorCSAgICB6ci0+bm9ybSAhPSBWSURFT19NT0RFX1NFQ0FNKSB7CisJCWRwcmludGsoMSwKKwkJCUtFUk5fRVJSICIlczogc2V0X3ZmZSgpIC0gbm9ybSA9ICVkIG5vdCB2YWxpZFxuIiwKKwkJCVpSX0RFVk5BTUUoenIpLCB6ci0+bm9ybSk7CisJCXJldHVybjsKKwl9CisJaWYgKHZpZGVvX3dpZHRoIDwgQlVaX01JTl9XSURUSCB8fAorCSAgICB2aWRlb19oZWlnaHQgPCBCVVpfTUlOX0hFSUdIVCB8fAorCSAgICB2aWRlb193aWR0aCA+IFdhIHx8IHZpZGVvX2hlaWdodCA+IEhhKSB7CisJCWRwcmludGsoMSwgS0VSTl9FUlIgIiVzOiBzZXRfdmZlOiB3PSVkIGg9JWQgbm90IHZhbGlkXG4iLAorCQkJWlJfREVWTkFNRSh6ciksIHZpZGVvX3dpZHRoLCB2aWRlb19oZWlnaHQpOworCQlyZXR1cm47CisJfQorCisJLyoqKiogenIzNjA1NyAqKioqLworCisJLyogaG9yaXpvbnRhbCAqLworCVZpZFdpbldpZCA9IHZpZGVvX3dpZHRoOworCVggPSBESVZfUk9VTkRfVVAoVmlkV2luV2lkICogNjQsIHR2bi0+V2EpOworCVdlID0gKFZpZFdpbldpZCAqIDY0KSAvIFg7CisJSG9yRGNtID0gNjQgLSBYOworCWhjcm9wMSA9IDIgKiAoKHR2bi0+V2EgLSBXZSkgLyA0KTsKKwloY3JvcDIgPSB0dm4tPldhIC0gV2UgLSBoY3JvcDE7CisJSFN0YXJ0ID0gdHZuLT5IU3RhcnQgPyB0dm4tPkhTdGFydCA6IDE7CisJLyogKFJvbmFsZCkgT3JpZ2luYWwgY29tbWVudDoKKwkgKiAifCAxIERvZXNuJ3QgaGF2ZSBhbnkgZWZmZWN0LCB0ZXN0ZWQgb24gYm90aCBhIERDMTAgYW5kIGEgREMxMCsiCisJICogdGhpcyBpcyBmYWxzZS4gSXQgaW52ZXJzZXMgY2hyb21hIHZhbHVlcyBvbiB0aGUgTE1MMzNSMTAgKHNvIENyCisJICogc3VkZGVubHkgaXMgc2hvd24gYXMgQ2IgYW5kIHJldmVyc2UsIHJlYWxseSBjb29sIGVmZmVjdCBpZiB5b3UKKwkgKiB3YW50IHRvIHNlZSBibHVlIGZhY2VzLCBub3QgdXNlZnVsIG90aGVyd2lzZSkuIFNvIGRvbid0IHVzZSB8MS4KKwkgKiBIb3dldmVyLCB0aGUgREMxMCBoYXMgJzAnIGFzIEhTdGFydCwgYnV0IGRvZXMgbmVlZCB8MSwgc28gd2UKKwkgKiB1c2UgYSBkaXJ0eSBjaGVjay4uLgorCSAqLworCUhFbmQgPSBIU3RhcnQgKyB0dm4tPldhIC0gMTsKKwlIU3RhcnQgKz0gaGNyb3AxOworCUhFbmQgLT0gaGNyb3AyOworCXJlZyA9ICgoSFN0YXJ0ICYgWlIzNjA1N19WRkVIQ1JfSG1hc2spIDw8IFpSMzYwNTdfVkZFSENSX0hTdGFydCkKKwkgICAgfCAoKEhFbmQgJiBaUjM2MDU3X1ZGRUhDUl9IbWFzaykgPDwgWlIzNjA1N19WRkVIQ1JfSEVuZCk7CisJaWYgKHpyLT5jYXJkLnZmZV9wb2wuaHN5bmNfcG9sKQorCQlyZWcgfD0gWlIzNjA1N19WRkVIQ1JfSFNQb2w7CisJYnR3cml0ZShyZWcsIFpSMzYwNTdfVkZFSENSKTsKKworCS8qIFZlcnRpY2FsICovCisJRGlzcE1vZGUgPSAhKHZpZGVvX2hlaWdodCA+IEJVWl9NQVhfSEVJR0hUIC8gMik7CisJVmlkV2luSHQgPSBEaXNwTW9kZSA/IHZpZGVvX2hlaWdodCA6IHZpZGVvX2hlaWdodCAvIDI7CisJWSA9IERJVl9ST1VORF9VUChWaWRXaW5IdCAqIDY0ICogMiwgdHZuLT5IYSk7CisJSGUgPSAoVmlkV2luSHQgKiA2NCkgLyBZOworCVZlckRjbSA9IDY0IC0gWTsKKwl2Y3JvcDEgPSAodHZuLT5IYSAvIDIgLSBIZSkgLyAyOworCXZjcm9wMiA9IHR2bi0+SGEgLyAyIC0gSGUgLSB2Y3JvcDE7CisJVlN0YXJ0ID0gdHZuLT5WU3RhcnQ7CisJVkVuZCA9IFZTdGFydCArIHR2bi0+SGEgLyAyOwkvLyAtIDE7IEZJWE1FIFNuYXBTaG90IHRpbWVzIG91dCB3aXRoIC0xIGluIDc2OCo1NzYgb24gdGhlIERDMTAgLSBMUAorCVZTdGFydCArPSB2Y3JvcDE7CisJVkVuZCAtPSB2Y3JvcDI7CisJcmVnID0gKChWU3RhcnQgJiBaUjM2MDU3X1ZGRVZDUl9WbWFzaykgPDwgWlIzNjA1N19WRkVWQ1JfVlN0YXJ0KQorCSAgICB8ICgoVkVuZCAmIFpSMzYwNTdfVkZFVkNSX1ZtYXNrKSA8PCBaUjM2MDU3X1ZGRVZDUl9WRW5kKTsKKwlpZiAoenItPmNhcmQudmZlX3BvbC52c3luY19wb2wpCisJCXJlZyB8PSBaUjM2MDU3X1ZGRVZDUl9WU1BvbDsKKwlidHdyaXRlKHJlZywgWlIzNjA1N19WRkVWQ1IpOworCisJLyogc2NhbGVyIGFuZCBwaXhlbCBmb3JtYXQgKi8KKwlyZWcgPSAwOworCXJlZyB8PSAoSG9yRGNtIDw8IFpSMzYwNTdfVkZFU1BGUl9Ib3JEY20pOworCXJlZyB8PSAoVmVyRGNtIDw8IFpSMzYwNTdfVkZFU1BGUl9WZXJEY20pOworCXJlZyB8PSAoRGlzcE1vZGUgPDwgWlIzNjA1N19WRkVTUEZSX0Rpc3BNb2RlKTsKKwkvKiBSSjogSSBkb24ndCBrbm93LCB3aHkgdGhlIGZvbGxvd2luZyBoYXMgdG8gYmUgdGhlIG9wcG9zaXRlCisJICogb2YgdGhlIGNvcnJlc3BvbmRpbmcgWlIzNjA2MCBzZXR0aW5nLCBidXQgb25seSB0aGlzIHdheQorCSAqIHdlIGdldCB0aGUgY29ycmVjdCBjb2xvcnMgd2hlbiB1bmNvbXByZXNzaW5nIHRvIHRoZSBzY3JlZW4gICovCisJLy9yZWcgfD0gWlIzNjA1N19WRkVTUEZSX1ZDTEtQb2w7IC8qKi8KKwkvKiBSSjogRG9uJ3Qga25vdyBpZiB0aGF0IGlzIG5lZWRlZCBmb3IgTlRTQyBhbHNvICovCisJaWYgKHpyLT5ub3JtICE9IFZJREVPX01PREVfTlRTQykKKwkJcmVnIHw9IFpSMzYwNTdfVkZFU1BGUl9FeHRGbDsJLy8gTkVFREVEISEhISEhISBXb2xmZ2FuZworCXJlZyB8PSBaUjM2MDU3X1ZGRVNQRlJfVG9wRmllbGQ7CisJaWYgKEhvckRjbSA+PSA0OCkgeworCQlyZWcgfD0gMyA8PCBaUjM2MDU3X1ZGRVNQRlJfSEZpbHRlcjsJLyogNSB0YXAgZmlsdGVyICovCisJfSBlbHNlIGlmIChIb3JEY20gPj0gMzIpIHsKKwkJcmVnIHw9IDIgPDwgWlIzNjA1N19WRkVTUEZSX0hGaWx0ZXI7CS8qIDQgdGFwIGZpbHRlciAqLworCX0gZWxzZSBpZiAoSG9yRGNtID49IDE2KSB7CisJCXJlZyB8PSAxIDw8IFpSMzYwNTdfVkZFU1BGUl9IRmlsdGVyOwkvKiAzIHRhcCBmaWx0ZXIgKi8KKwl9CisJcmVnIHw9IGZvcm1hdC0+dmZlc3BmcjsKKwlidHdyaXRlKHJlZywgWlIzNjA1N19WRkVTUEZSKTsKKworCS8qIGRpc3BsYXkgY29uZmlndXJhdGlvbiAqLworCXJlZyA9ICgxNiA8PCBaUjM2MDU3X1ZEQ1JfTWluUGl4KQorCSAgICB8IChWaWRXaW5IdCA8PCBaUjM2MDU3X1ZEQ1JfVmlkV2luSHQpCisJICAgIHwgKFZpZFdpbldpZCA8PCBaUjM2MDU3X1ZEQ1JfVmlkV2luV2lkKTsKKwlpZiAocGNpX3BjaV9wcm9ibGVtcyAmIFBDSVBDSV9UUklUT04pCisJCS8vIHx8IHpyLT5yZXZpc2lvbiA8IDEpIC8vIFJldmlzaW9uIDEgaGFzIGFsc28gVHJpdG9uIHN1cHBvcnQKKwkJcmVnICY9IH5aUjM2MDU3X1ZEQ1JfVHJpdG9uOworCWVsc2UKKwkJcmVnIHw9IFpSMzYwNTdfVkRDUl9Ucml0b247CisJYnR3cml0ZShyZWcsIFpSMzYwNTdfVkRDUik7CisKKwkvKiAoUm9uYWxkKSBkb24ndCB3cml0ZSB0aGlzIGlmIG92ZXJsYXlfbWFzayA9IE5VTEwgKi8KKwlpZiAoenItPm92ZXJsYXlfbWFzaykgeworCQkvKiBXcml0ZSBvdmVybGF5IGNsaXBwaW5nIG1hc2sgZGF0YSwgYnV0IGRvbid0IGVuYWJsZSBvdmVybGF5IGNsaXBwaW5nICovCisJCS8qIFJKOiBzaW5jZSB0aGlzIG1ha2VzIG9ubHkgc2Vuc2Ugb24gdGhlIHNjcmVlbiwgd2UgdXNlCisJCSAqIHpyLT5vdmVybGF5X3NldHRpbmdzLndpZHRoIGluc3RlYWQgb2YgdmlkZW9fd2lkdGggKi8KKworCQltYXNrX2xpbmVfc2l6ZSA9IChCVVpfTUFYX1dJRFRIICsgMzEpIC8gMzI7CisJCXJlZyA9IHZpcnRfdG9fYnVzKHpyLT5vdmVybGF5X21hc2spOworCQlidHdyaXRlKHJlZywgWlIzNjA1N19NTVRSKTsKKwkJcmVnID0gdmlydF90b19idXMoenItPm92ZXJsYXlfbWFzayArIG1hc2tfbGluZV9zaXplKTsKKwkJYnR3cml0ZShyZWcsIFpSMzYwNTdfTU1CUik7CisJCXJlZyA9CisJCSAgICBtYXNrX2xpbmVfc2l6ZSAtICh6ci0+b3ZlcmxheV9zZXR0aW5ncy53aWR0aCArCisJCQkJICAgICAgMzEpIC8gMzI7CisJCWlmIChEaXNwTW9kZSA9PSAwKQorCQkJcmVnICs9IG1hc2tfbGluZV9zaXplOworCQlyZWcgPDw9IFpSMzYwNTdfT0NSX01hc2tTdHJpZGU7CisJCWJ0d3JpdGUocmVnLCBaUjM2MDU3X09DUik7CisJfQorCisJenIzNjA1N19hZGp1c3RfdmZlKHpyLCB6ci0+Y29kZWNfbW9kZSk7Cit9CisKKy8qCisgKiBTd2l0Y2ggb3ZlcmxheSBvbiBvciBvZmYKKyAqLworCit2b2lkCit6cjM2MDU3X292ZXJsYXkgKHN0cnVjdCB6b3JhbiAqenIsCisJCSBpbnQgICAgICAgICAgIG9uKQoreworCXUzMiByZWc7CisKKwlpZiAob24pIHsKKwkJLyogZG8gdGhlIG5lY2Vzc2FyeSBzZXR0aW5ncyAuLi4gKi8KKwkJYnRhbmQoflpSMzYwNTdfVkRDUl9WaWRFbiwgWlIzNjA1N19WRENSKTsJLyogc3dpdGNoIGl0IG9mZiBmaXJzdCAqLworCisJCXpyMzYwNTdfc2V0X3ZmZSh6ciwKKwkJCQl6ci0+b3ZlcmxheV9zZXR0aW5ncy53aWR0aCwKKwkJCQl6ci0+b3ZlcmxheV9zZXR0aW5ncy5oZWlnaHQsCisJCQkJenItPm92ZXJsYXlfc2V0dGluZ3MuZm9ybWF0KTsKKworCQkvKiBTdGFydCBhbmQgbGVuZ3RoIG9mIGVhY2ggbGluZSBNVVNUIGJlIDQtYnl0ZSBhbGlnbmVkLgorCQkgKiBUaGlzIHNob3VsZCBiZSBhbGxyZWFkeSBjaGVja2VkIGJlZm9yZSB0aGUgY2FsbCB0byB0aGlzIHJvdXRpbmUuCisJCSAqIEFsbCBlcnJvciBtZXNzYWdlcyBhcmUgaW50ZXJuYWwgZHJpdmVyIGNoZWNraW5nIG9ubHkhICovCisKKwkJLyogdmlkZW8gZGlzcGxheSB0b3AgYW5kIGJvdHRvbSByZWdpc3RlcnMgKi8KKwkJcmVnID0gKGxvbmcpIHpyLT5idWZmZXIuYmFzZSArCisJCSAgICB6ci0+b3ZlcmxheV9zZXR0aW5ncy54ICoKKwkJICAgICgoenItPm92ZXJsYXlfc2V0dGluZ3MuZm9ybWF0LT5kZXB0aCArIDcpIC8gOCkgKworCQkgICAgenItPm92ZXJsYXlfc2V0dGluZ3MueSAqCisJCSAgICB6ci0+YnVmZmVyLmJ5dGVzcGVybGluZTsKKwkJYnR3cml0ZShyZWcsIFpSMzYwNTdfVkRUUik7CisJCWlmIChyZWcgJiAzKQorCQkJZHByaW50aygxLAorCQkJCUtFUk5fRVJSCisJCQkJIiVzOiB6cjM2MDU3X292ZXJsYXkoKSAtIHZpZGVvX2FkZHJlc3Mgbm90IGFsaWduZWRcbiIsCisJCQkJWlJfREVWTkFNRSh6cikpOworCQlpZiAoenItPm92ZXJsYXlfc2V0dGluZ3MuaGVpZ2h0ID4gQlVaX01BWF9IRUlHSFQgLyAyKQorCQkJcmVnICs9IHpyLT5idWZmZXIuYnl0ZXNwZXJsaW5lOworCQlidHdyaXRlKHJlZywgWlIzNjA1N19WREJSKTsKKworCQkvKiB2aWRlbyBzdHJpZGUsIHN0YXR1cywgYW5kIGZyYW1lIGdyYWIgcmVnaXN0ZXIgKi8KKwkJcmVnID0genItPmJ1ZmZlci5ieXRlc3BlcmxpbmUgLQorCQkgICAgenItPm92ZXJsYXlfc2V0dGluZ3Mud2lkdGggKgorCQkgICAgKCh6ci0+b3ZlcmxheV9zZXR0aW5ncy5mb3JtYXQtPmRlcHRoICsgNykgLyA4KTsKKwkJaWYgKHpyLT5vdmVybGF5X3NldHRpbmdzLmhlaWdodCA+IEJVWl9NQVhfSEVJR0hUIC8gMikKKwkJCXJlZyArPSB6ci0+YnVmZmVyLmJ5dGVzcGVybGluZTsKKwkJaWYgKHJlZyAmIDMpCisJCQlkcHJpbnRrKDEsCisJCQkJS0VSTl9FUlIKKwkJCQkiJXM6IHpyMzYwNTdfb3ZlcmxheSgpIC0gdmlkZW9fc3RyaWRlIG5vdCBhbGlnbmVkXG4iLAorCQkJCVpSX0RFVk5BTUUoenIpKTsKKwkJcmVnID0gKHJlZyA8PCBaUjM2MDU3X1ZTU0ZHUl9EaXNwU3RyaWRlKTsKKwkJcmVnIHw9IFpSMzYwNTdfVlNTRkdSX1ZpZE92ZjsJLyogY2xlYXIgb3ZlcmZsb3cgc3RhdHVzICovCisJCWJ0d3JpdGUocmVnLCBaUjM2MDU3X1ZTU0ZHUik7CisKKwkJLyogU2V0IG92ZXJsYXkgY2xpcHBpbmcgKi8KKwkJaWYgKHpyLT5vdmVybGF5X3NldHRpbmdzLmNsaXBjb3VudCA+IDApCisJCQlidG9yKFpSMzYwNTdfT0NSX092bEVuYWJsZSwgWlIzNjA1N19PQ1IpOworCisJCS8qIC4uLiBhbmQgc3dpdGNoIGl0IG9uICovCisJCWJ0b3IoWlIzNjA1N19WRENSX1ZpZEVuLCBaUjM2MDU3X1ZEQ1IpOworCX0gZWxzZSB7CisJCS8qIFN3aXRjaCBpdCBvZmYgKi8KKwkJYnRhbmQoflpSMzYwNTdfVkRDUl9WaWRFbiwgWlIzNjA1N19WRENSKTsKKwl9Cit9CisKKy8qCisgKiBUaGUgb3ZlcmxheSBtYXNrIGhhcyBvbmUgYml0IGZvciBlYWNoIHBpeGVsIG9uIGEgc2NhbiBsaW5lLAorICogIGFuZCB0aGUgbWF4aW11bSB3aW5kb3cgc2l6ZSBpcyBCVVpfTUFYX1dJRFRIICogQlVaX01BWF9IRUlHSFQgcGl4ZWxzLgorICovCisKK3ZvaWQKK3dyaXRlX292ZXJsYXlfbWFzayAoc3RydWN0IGZpbGUgICAgICAgKmZpbGUsCisJCSAgICBzdHJ1Y3QgdmlkZW9fY2xpcCAqdnAsCisJCSAgICBpbnQgICAgICAgICAgICAgICAgY291bnQpCit7CisJc3RydWN0IHpvcmFuX2ZoICpmaCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3Qgem9yYW4gKnpyID0gZmgtPnpyOworCXVuc2lnbmVkIG1hc2tfbGluZV9zaXplID0gKEJVWl9NQVhfV0lEVEggKyAzMSkgLyAzMjsKKwl1MzIgKm1hc2s7CisJaW50IHgsIHksIHdpZHRoLCBoZWlnaHQ7CisJdW5zaWduZWQgaSwgaiwgazsKKwl1MzIgcmVnOworCisJLyogZmlsbCBtYXNrIHdpdGggb25lIGJpdHMgKi8KKwltZW1zZXQoZmgtPm92ZXJsYXlfbWFzaywgfjAsIG1hc2tfbGluZV9zaXplICogNCAqIEJVWl9NQVhfSEVJR0hUKTsKKwlyZWcgPSAwOworCisJZm9yIChpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKKwkJLyogcGljayB1cCBsb2NhbCBjb3B5IG9mIGNsaXAgKi8KKwkJeCA9IHZwW2ldLng7CisJCXkgPSB2cFtpXS55OworCQl3aWR0aCA9IHZwW2ldLndpZHRoOworCQloZWlnaHQgPSB2cFtpXS5oZWlnaHQ7CisKKwkJLyogdHJpbSBjbGlwcyB0aGF0IGV4dGVuZCBiZXlvbmQgdGhlIHdpbmRvdyAqLworCQlpZiAoeCA8IDApIHsKKwkJCXdpZHRoICs9IHg7CisJCQl4ID0gMDsKKwkJfQorCQlpZiAoeSA8IDApIHsKKwkJCWhlaWdodCArPSB5OworCQkJeSA9IDA7CisJCX0KKwkJaWYgKHggKyB3aWR0aCA+IGZoLT5vdmVybGF5X3NldHRpbmdzLndpZHRoKSB7CisJCQl3aWR0aCA9IGZoLT5vdmVybGF5X3NldHRpbmdzLndpZHRoIC0geDsKKwkJfQorCQlpZiAoeSArIGhlaWdodCA+IGZoLT5vdmVybGF5X3NldHRpbmdzLmhlaWdodCkgeworCQkJaGVpZ2h0ID0gZmgtPm92ZXJsYXlfc2V0dGluZ3MuaGVpZ2h0IC0geTsKKwkJfQorCisJCS8qIGlnbm9yZSBkZWdlbmVyYXRlIGNsaXBzICovCisJCWlmIChoZWlnaHQgPD0gMCkgeworCQkJY29udGludWU7CisJCX0KKwkJaWYgKHdpZHRoIDw9IDApIHsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJLyogYXBwbHkgY2xpcCBmb3IgZWFjaCBzY2FuIGxpbmUgKi8KKwkJZm9yIChqID0gMDsgaiA8IGhlaWdodDsgKytqKSB7CisJCQkvKiByZXNldCBiaXQgZm9yIGVhY2ggcGl4ZWwgKi8KKwkJCS8qIHRoaXMgY2FuIGJlIG9wdGltaXplZCBsYXRlciBpZiBuZWVkIGJlICovCisJCQltYXNrID0gZmgtPm92ZXJsYXlfbWFzayArICh5ICsgaikgKiBtYXNrX2xpbmVfc2l6ZTsKKwkJCWZvciAoayA9IDA7IGsgPCB3aWR0aDsgKytrKSB7CisJCQkJbWFza1soeCArIGspIC8gMzJdICY9CisJCQkJICAgIH4oKHUzMikgMSA8PCAoeCArIGspICUgMzIpOworCQkJfQorCQl9CisJfQorfQorCisvKiBFbmFibGUvRGlzYWJsZSB1bmNvbXByZXNzZWQgbWVtb3J5IGdyYWJiaW5nIG9mIHRoZSAzNjA1NyAqLworCit2b2lkCit6cjM2MDU3X3NldF9tZW1ncmFiIChzdHJ1Y3Qgem9yYW4gKnpyLAorCQkgICAgIGludCAgICAgICAgICAgbW9kZSkKK3sKKwlpZiAobW9kZSkgeworCQkvKiBXZSBvbmx5IGNoZWNrIFNuYXBTaG90IGFuZCBub3QgRnJhbWVHcmFiIGhlcmUuICBTbmFwU2hvdD09MQorCQkgKiBtZWFucyBhIGNhcHR1cmUgaXMgYWxyZWFkeSBpbiBwcm9ncmVzcywgYnV0IEZyYW1lR3JhYj09MQorCQkgKiBkb2Vzbid0IG5lY2Vzc2FyeSBtZWFuIHRoYXQuICBJdCdzIG1vcmUgY29ycmVjdCB0byBzYXkgYSAxCisJCSAqIHRvIDAgdHJhbnNpdGlvbiBpbmRpY2F0ZXMgYSBjYXB0dXJlIGNvbXBsZXRlZC4gIElmIGEKKwkJICogY2FwdHVyZSBpcyBwZW5kaW5nIHdoZW4gY2FwdHVyaW5nIGlzIHR1bmVkIG9mZiwgRnJhbWVHcmFiCisJCSAqIHdpbGwgYmUgc3R1Y2sgYXQgMSB1bnRpbCBjYXB0dXJpbmcgaXMgdHVybmVkIGJhY2sgb24uCisJCSAqLworCQlpZiAoYnRyZWFkKFpSMzYwNTdfVlNTRkdSKSAmIFpSMzYwNTdfVlNTRkdSX1NuYXBTaG90KQorCQkJZHByaW50aygxLAorCQkJCUtFUk5fV0FSTklORworCQkJCSIlczogenIzNjA1N19zZXRfbWVtZ3JhYigxKSB3aXRoIFNuYXBTaG90IG9uIT9cbiIsCisJCQkJWlJfREVWTkFNRSh6cikpOworCisJCS8qIHN3aXRjaCBvbiBWU3luYyBpbnRlcnJ1cHRzICovCisJCWJ0d3JpdGUoSVJRX01BU0ssIFpSMzYwNTdfSVNSKTsJLy8gQ2xlYXIgSW50ZXJydXB0cworCQlidG9yKHpyLT5jYXJkLnZzeW5jX2ludCwgWlIzNjA1N19JQ1IpOwkvLyBTVworCisJCS8qIGVuYWJsZSBTbmFwU2hvdCAqLworCQlidG9yKFpSMzYwNTdfVlNTRkdSX1NuYXBTaG90LCBaUjM2MDU3X1ZTU0ZHUik7CisKKwkJLyogU2V0IHpyMzYwNTcgdmlkZW8gZnJvbnQgZW5kICBhbmQgZW5hYmxlIHZpZGVvICovCisJCXpyMzYwNTdfc2V0X3ZmZSh6ciwgenItPnY0bF9zZXR0aW5ncy53aWR0aCwKKwkJCQl6ci0+djRsX3NldHRpbmdzLmhlaWdodCwKKwkJCQl6ci0+djRsX3NldHRpbmdzLmZvcm1hdCk7CisKKwkJenItPnY0bF9tZW1ncmFiX2FjdGl2ZSA9IDE7CisJfSBlbHNlIHsKKwkJLyogc3dpdGNoIG9mZiBWU3luYyBpbnRlcnJ1cHRzICovCisJCWJ0YW5kKH56ci0+Y2FyZC52c3luY19pbnQsIFpSMzYwNTdfSUNSKTsJLy8gU1cKKworCQl6ci0+djRsX21lbWdyYWJfYWN0aXZlID0gMDsKKwkJenItPnY0bF9ncmFiX2ZyYW1lID0gTk9fR1JBQl9BQ1RJVkU7CisKKwkJLyogcmVlbmFibGUgZ3JhYmJpbmcgdG8gc2NyZWVuIGlmIGl0IHdhcyBydW5uaW5nICovCisJCWlmICh6ci0+djRsX292ZXJsYXlfYWN0aXZlKSB7CisJCQl6cjM2MDU3X292ZXJsYXkoenIsIDEpOworCQl9IGVsc2UgeworCQkJYnRhbmQoflpSMzYwNTdfVkRDUl9WaWRFbiwgWlIzNjA1N19WRENSKTsKKwkJCWJ0YW5kKH5aUjM2MDU3X1ZTU0ZHUl9TbmFwU2hvdCwgWlIzNjA1N19WU1NGR1IpOworCQl9CisJfQorfQorCitpbnQKK3dhaXRfZ3JhYl9wZW5kaW5nIChzdHJ1Y3Qgem9yYW4gKnpyKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwkvKiB3YWl0IHVudGlsIGFsbCBwZW5kaW5nIGdyYWJzIGFyZSBmaW5pc2hlZCAqLworCisJaWYgKCF6ci0+djRsX21lbWdyYWJfYWN0aXZlKQorCQlyZXR1cm4gMDsKKworCXdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZSh6ci0+djRsX2NhcHEsCisJCQkoenItPnY0bF9wZW5kX3RhaWwgPT0genItPnY0bF9wZW5kX2hlYWQpKTsKKwlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpCisJCXJldHVybiAtRVJFU1RBUlRTWVM7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmenItPnNwaW5sb2NrLCBmbGFncyk7CisJenIzNjA1N19zZXRfbWVtZ3JhYih6ciwgMCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmenItPnNwaW5sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gMDsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICBTZXQgdXAgdGhlIEJ1ei1zcGVjaWZpYyBNSlBFRyBwYXJ0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyBpbmxpbmUgdm9pZAorc2V0X2ZyYW1lIChzdHJ1Y3Qgem9yYW4gKnpyLAorCSAgIGludCAgICAgICAgICAgdmFsKQoreworCUdQSU8oenIsIHpyLT5jYXJkLmdwaW9bWlJfR1BJT19KUEVHX0ZSQU1FXSwgdmFsKTsKK30KKworc3RhdGljIHZvaWQKK3NldF92aWRlb2J1c19kaXIgKHN0cnVjdCB6b3JhbiAqenIsCisJCSAgaW50ICAgICAgICAgICB2YWwpCit7CisJc3dpdGNoICh6ci0+Y2FyZC50eXBlKSB7CisJY2FzZSBMTUwzMzoKKwljYXNlIExNTDMzUjEwOgorCQlpZiAobG1sMzNkcGF0aCA9PSAwKQorCQkJR1BJTyh6ciwgNSwgdmFsKTsKKwkJZWxzZQorCQkJR1BJTyh6ciwgNSwgMSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCUdQSU8oenIsIHpyLT5jYXJkLmdwaW9bWlJfR1BJT19WSURfRElSXSwKKwkJICAgICB6ci0+Y2FyZC5ncGlvX3BvbFtaUl9HUElPX1ZJRF9ESVJdID8gIXZhbCA6IHZhbCk7CisJCWJyZWFrOworCX0KK30KKworc3RhdGljIHZvaWQKK2luaXRfanBlZ19xdWV1ZSAoc3RydWN0IHpvcmFuICp6cikKK3sKKwlpbnQgaTsKKworCS8qIHJlLWluaXRpYWxpemUgRE1BIHJpbmcgc3R1ZmYgKi8KKwl6ci0+anBnX3F1ZV9oZWFkID0gMDsKKwl6ci0+anBnX2RtYV9oZWFkID0gMDsKKwl6ci0+anBnX2RtYV90YWlsID0gMDsKKwl6ci0+anBnX3F1ZV90YWlsID0gMDsKKwl6ci0+anBnX3NlcV9udW0gPSAwOworCXpyLT5KUEVHX2Vycm9yID0gMDsKKwl6ci0+bnVtX2Vycm9ycyA9IDA7CisJenItPmpwZ19lcnJfc2VxID0gMDsKKwl6ci0+anBnX2Vycl9zaGlmdCA9IDA7CisJenItPmpwZ19xdWV1ZWRfbnVtID0gMDsKKwlmb3IgKGkgPSAwOyBpIDwgenItPmpwZ19idWZmZXJzLm51bV9idWZmZXJzOyBpKyspIHsKKwkJenItPmpwZ19idWZmZXJzLmJ1ZmZlcltpXS5zdGF0ZSA9IEJVWl9TVEFURV9VU0VSOwkvKiBub3RoaW5nIGdvaW5nIG9uICovCisJfQorCWZvciAoaSA9IDA7IGkgPCBCVVpfTlVNX1NUQVRfQ09NOyBpKyspIHsKKwkJenItPnN0YXRfY29tW2ldID0gY3B1X3RvX2xlMzIoMSk7CS8qIG1hcmsgYXMgdW5hdmFpbGFibGUgdG8genIzNjA1NyAqLworCX0KK30KKworc3RhdGljIHZvaWQKK3pyMzYwNTdfc2V0X2pwZyAoc3RydWN0IHpvcmFuICAgICAgICAgICp6ciwKKwkJIGVudW0gem9yYW5fY29kZWNfbW9kZSAgbW9kZSkKK3sKKwlzdHJ1Y3QgdHZub3JtICp0dm47CisJdTMyIHJlZzsKKworCXR2biA9IHpyLT50aW1pbmc7CisKKwkvKiBhc3NlcnQgUF9SZXNldCwgZGlzYWJsZSBjb2RlIHRyYW5zZmVyLCBkZWFzc2VydCBBY3RpdmUgKi8KKwlidHdyaXRlKDAsIFpSMzYwNTdfSlBDKTsKKworCS8qIE1KUEVHIGNvbXByZXNzaW9uIG1vZGUgKi8KKwlzd2l0Y2ggKG1vZGUpIHsKKworCWNhc2UgQlVaX01PREVfTU9USU9OX0NPTVBSRVNTOgorCWRlZmF1bHQ6CisJCXJlZyA9IFpSMzYwNTdfSk1DX01KUEdDbXBNb2RlOworCQlicmVhazsKKworCWNhc2UgQlVaX01PREVfTU9USU9OX0RFQ09NUFJFU1M6CisJCXJlZyA9IFpSMzYwNTdfSk1DX01KUEdFeHBNb2RlOworCQlyZWcgfD0gWlIzNjA1N19KTUNfU3luY01zdHI7CisJCS8qIFJKOiBUaGUgZm9sbG93aW5nIGlzIGV4cGVyaW1lbnRhbCAtIGltcHJvdmVzIHRoZSBvdXRwdXQgdG8gc2NyZWVuICovCisJCS8vaWYoenItPmpwZ19zZXR0aW5ncy5WRklGT19GQikgcmVnIHw9IFpSMzYwNTdfSk1DX1ZGSUZPX0ZCOyAvLyBObywgaXQgZG9lc24ndC4gU00KKwkJYnJlYWs7CisKKwljYXNlIEJVWl9NT0RFX1NUSUxMX0NPTVBSRVNTOgorCQlyZWcgPSBaUjM2MDU3X0pNQ19KUEdDbXBNb2RlOworCQlicmVhazsKKworCWNhc2UgQlVaX01PREVfU1RJTExfREVDT01QUkVTUzoKKwkJcmVnID0gWlIzNjA1N19KTUNfSlBHRXhwTW9kZTsKKwkJYnJlYWs7CisKKwl9CisJcmVnIHw9IFpSMzYwNTdfSk1DX0pQRzsKKwlpZiAoenItPmpwZ19zZXR0aW5ncy5maWVsZF9wZXJfYnVmZiA9PSAxKQorCQlyZWcgfD0gWlIzNjA1N19KTUNfRmxkX3Blcl9idWZmOworCWJ0d3JpdGUocmVnLCBaUjM2MDU3X0pNQyk7CisKKwkvKiB2ZXJ0aWNhbCAqLworCWJ0b3IoWlIzNjA1N19WRkVWQ1JfVlNQb2wsIFpSMzYwNTdfVkZFVkNSKTsKKwlyZWcgPSAoNiA8PCBaUjM2MDU3X1ZTUF9Wc3luY1NpemUpIHwKKwkgICAgICAodHZuLT5IdCA8PCBaUjM2MDU3X1ZTUF9Gcm1Ub3QpOworCWJ0d3JpdGUocmVnLCBaUjM2MDU3X1ZTUCk7CisJcmVnID0gKCh6ci0+anBnX3NldHRpbmdzLmltZ195ICsgdHZuLT5WU3RhcnQpIDw8IFpSMzYwNTdfRlZBUF9OQVkpIHwKKwkgICAgICAoenItPmpwZ19zZXR0aW5ncy5pbWdfaGVpZ2h0IDw8IFpSMzYwNTdfRlZBUF9QQVkpOworCWJ0d3JpdGUocmVnLCBaUjM2MDU3X0ZWQVApOworCisJLyogaG9yaXpvbnRhbCAqLworCWlmICh6ci0+Y2FyZC52ZmVfcG9sLmhzeW5jX3BvbCkKKwkJYnRvcihaUjM2MDU3X1ZGRUhDUl9IU1BvbCwgWlIzNjA1N19WRkVIQ1IpOworCWVsc2UKKwkJYnRhbmQoflpSMzYwNTdfVkZFSENSX0hTUG9sLCBaUjM2MDU3X1ZGRUhDUik7CisJcmVnID0gKCh0dm4tPkhTeW5jU3RhcnQpIDw8IFpSMzYwNTdfSFNQX0hzeW5jU3RhcnQpIHwKKwkgICAgICAodHZuLT5XdCA8PCBaUjM2MDU3X0hTUF9MaW5lVG90KTsKKwlidHdyaXRlKHJlZywgWlIzNjA1N19IU1ApOworCXJlZyA9ICgoenItPmpwZ19zZXR0aW5ncy5pbWdfeCArCisJCXR2bi0+SFN0YXJ0ICsgNCkgPDwgWlIzNjA1N19GSEFQX05BWCkgfAorCSAgICAgICh6ci0+anBnX3NldHRpbmdzLmltZ193aWR0aCA8PCBaUjM2MDU3X0ZIQVBfUEFYKTsKKwlidHdyaXRlKHJlZywgWlIzNjA1N19GSEFQKTsKKworCS8qIGZpZWxkIHByb2Nlc3MgcGFyYW1ldGVycyAqLworCWlmICh6ci0+anBnX3NldHRpbmdzLm9kZF9ldmVuKQorCQlyZWcgPSBaUjM2MDU3X0ZQUF9PZGRfRXZlbjsKKwllbHNlCisJCXJlZyA9IDA7CisKKwlidHdyaXRlKHJlZywgWlIzNjA1N19GUFApOworCisJLyogU2V0IHByb3BlciBWQ0xLIFBvbGFyaXR5LCBlbHNlIGNvbG9ycyB3aWxsIGJlIHdyb25nIGR1cmluZyBwbGF5YmFjayAqLworCS8vYnRvcihaUjM2MDU3X1ZGRVNQRlJfVkNMS1BvbCwgWlIzNjA1N19WRkVTUEZSKTsKKworCS8qIGNvZGUgYmFzZSBhZGRyZXNzICovCisJcmVnID0gdmlydF90b19idXMoenItPnN0YXRfY29tKTsKKwlidHdyaXRlKHJlZywgWlIzNjA1N19KQ0JBKTsKKworCS8qIEZJRk8gdGhyZXNob2xkIChGSUZPIGlzIDE2MC4gZG91YmxlIHdvcmRzKSAqLworCS8qIE5PVEU6IGRlY2ltYWwgdmFsdWVzIGhlcmUgKi8KKwlzd2l0Y2ggKG1vZGUpIHsKKworCWNhc2UgQlVaX01PREVfU1RJTExfQ09NUFJFU1M6CisJY2FzZSBCVVpfTU9ERV9NT1RJT05fQ09NUFJFU1M6CisJCWlmICh6ci0+Y2FyZC50eXBlICE9IEJVWikKKwkJCXJlZyA9IDE0MDsKKwkJZWxzZQorCQkJcmVnID0gNjA7CisJCWJyZWFrOworCisJY2FzZSBCVVpfTU9ERV9TVElMTF9ERUNPTVBSRVNTOgorCWNhc2UgQlVaX01PREVfTU9USU9OX0RFQ09NUFJFU1M6CisJCXJlZyA9IDIwOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCXJlZyA9IDgwOworCQlicmVhazsKKworCX0KKwlidHdyaXRlKHJlZywgWlIzNjA1N19KQ0ZUKTsKKwl6cjM2MDU3X2FkanVzdF92ZmUoenIsIG1vZGUpOworCit9CisKK3ZvaWQKK3ByaW50X2ludGVycnVwdHMgKHN0cnVjdCB6b3JhbiAqenIpCit7CisJaW50IHJlcywgbm9lcnIgPSAwOworCisJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IGludGVycnVwdHMgcmVjZWl2ZWQ6IiwgWlJfREVWTkFNRSh6cikpOworCWlmICgocmVzID0genItPmZpZWxkX2NvdW50ZXIpIDwgLTEgfHwgcmVzID4gMSkgeworCQlwcmludGsoIiBGRDolZCIsIHJlcyk7CisJfQorCWlmICgocmVzID0genItPmludHJfY291bnRlcl9HSVJRMSkgIT0gMCkgeworCQlwcmludGsoIiBHSVJRMTolZCIsIHJlcyk7CisJCW5vZXJyKys7CisJfQorCWlmICgocmVzID0genItPmludHJfY291bnRlcl9HSVJRMCkgIT0gMCkgeworCQlwcmludGsoIiBHSVJRMDolZCIsIHJlcyk7CisJCW5vZXJyKys7CisJfQorCWlmICgocmVzID0genItPmludHJfY291bnRlcl9Db2RSZXBJUlEpICE9IDApIHsKKwkJcHJpbnRrKCIgQ29kUmVwSVJROiVkIiwgcmVzKTsKKwkJbm9lcnIrKzsKKwl9CisJaWYgKChyZXMgPSB6ci0+aW50cl9jb3VudGVyX0pQRUdSZXBJUlEpICE9IDApIHsKKwkJcHJpbnRrKCIgSlBFR1JlcElSUTolZCIsIHJlcyk7CisJCW5vZXJyKys7CisJfQorCWlmICh6ci0+SlBFR19tYXhfbWlzc2VkKSB7CisJCXByaW50aygiIEpQRUcgZGVsYXlzOiBtYXg9JWQgbWluPSVkIiwgenItPkpQRUdfbWF4X21pc3NlZCwKKwkJICAgICAgIHpyLT5KUEVHX21pbl9taXNzZWQpOworCX0KKwlpZiAoenItPkVORF9ldmVudF9taXNzZWQpIHsKKwkJcHJpbnRrKCIgRU5EcyBtaXNzZWQ6ICVkIiwgenItPkVORF9ldmVudF9taXNzZWQpOworCX0KKwkvL2lmICh6ci0+anBnX3F1ZXVlZF9udW0pIHsKKwlwcmludGsoIiBxdWV1ZV9zdGF0ZT0lbGQvJWxkLyVsZC8lbGQiLCB6ci0+anBnX3F1ZV90YWlsLAorCSAgICAgICB6ci0+anBnX2RtYV90YWlsLCB6ci0+anBnX2RtYV9oZWFkLCB6ci0+anBnX3F1ZV9oZWFkKTsKKwkvL30KKwlpZiAoIW5vZXJyKSB7CisJCXByaW50aygiOiBubyBpbnRlcnJ1cHRzIGRldGVjdGVkLiIpOworCX0KKwlwcmludGsoIlxuIik7Cit9CisKK3ZvaWQKK2NsZWFyX2ludGVycnVwdF9jb3VudGVycyAoc3RydWN0IHpvcmFuICp6cikKK3sKKwl6ci0+aW50cl9jb3VudGVyX0dJUlExID0gMDsKKwl6ci0+aW50cl9jb3VudGVyX0dJUlEwID0gMDsKKwl6ci0+aW50cl9jb3VudGVyX0NvZFJlcElSUSA9IDA7CisJenItPmludHJfY291bnRlcl9KUEVHUmVwSVJRID0gMDsKKwl6ci0+ZmllbGRfY291bnRlciA9IDA7CisJenItPklSUTFfaW4gPSAwOworCXpyLT5JUlExX291dCA9IDA7CisJenItPkpQRUdfaW4gPSAwOworCXpyLT5KUEVHX291dCA9IDA7CisJenItPkpQRUdfMCA9IDA7CisJenItPkpQRUdfMSA9IDA7CisJenItPkVORF9ldmVudF9taXNzZWQgPSAwOworCXpyLT5KUEVHX21pc3NlZCA9IDA7CisJenItPkpQRUdfbWF4X21pc3NlZCA9IDA7CisJenItPkpQRUdfbWluX21pc3NlZCA9IDB4N2ZmZmZmZmY7Cit9CisKK3N0YXRpYyB1MzIKK2NvdW50X3Jlc2V0X2ludGVycnVwdCAoc3RydWN0IHpvcmFuICp6cikKK3sKKwl1MzIgaXNyOworCisJaWYgKChpc3IgPSBidHJlYWQoWlIzNjA1N19JU1IpICYgMHg3ODAwMDAwMCkpIHsKKwkJaWYgKGlzciAmIFpSMzYwNTdfSVNSX0dJUlExKSB7CisJCQlidHdyaXRlKFpSMzYwNTdfSVNSX0dJUlExLCBaUjM2MDU3X0lTUik7CisJCQl6ci0+aW50cl9jb3VudGVyX0dJUlExKys7CisJCX0KKwkJaWYgKGlzciAmIFpSMzYwNTdfSVNSX0dJUlEwKSB7CisJCQlidHdyaXRlKFpSMzYwNTdfSVNSX0dJUlEwLCBaUjM2MDU3X0lTUik7CisJCQl6ci0+aW50cl9jb3VudGVyX0dJUlEwKys7CisJCX0KKwkJaWYgKGlzciAmIFpSMzYwNTdfSVNSX0NvZFJlcElSUSkgeworCQkJYnR3cml0ZShaUjM2MDU3X0lTUl9Db2RSZXBJUlEsIFpSMzYwNTdfSVNSKTsKKwkJCXpyLT5pbnRyX2NvdW50ZXJfQ29kUmVwSVJRKys7CisJCX0KKwkJaWYgKGlzciAmIFpSMzYwNTdfSVNSX0pQRUdSZXBJUlEpIHsKKwkJCWJ0d3JpdGUoWlIzNjA1N19JU1JfSlBFR1JlcElSUSwgWlIzNjA1N19JU1IpOworCQkJenItPmludHJfY291bnRlcl9KUEVHUmVwSVJRKys7CisJCX0KKwl9CisJcmV0dXJuIGlzcjsKK30KKwordm9pZAoranBlZ19zdGFydCAoc3RydWN0IHpvcmFuICp6cikKK3sKKwlpbnQgcmVnOworCisJenItPmZyYW1lX251bSA9IDA7CisKKwkvKiBkZWFzc2VydCBQX3Jlc2V0LCBkaXNhYmxlIGNvZGUgdHJhbnNmZXIsIGRlYXNzZXJ0IEFjdGl2ZSAqLworCWJ0d3JpdGUoWlIzNjA1N19KUENfUF9SZXNldCwgWlIzNjA1N19KUEMpOworCS8qIHN0b3AgZmx1c2hpbmcgdGhlIGludGVybmFsIGNvZGUgYnVmZmVyICovCisJYnRhbmQoflpSMzYwNTdfTUNUQ1JfQ0ZsdXNoLCBaUjM2MDU3X01DVENSKTsKKwkvKiBlbmFibGUgY29kZSB0cmFuc2ZlciAqLworCWJ0b3IoWlIzNjA1N19KUENfQ29kVHJuc0VuLCBaUjM2MDU3X0pQQyk7CisKKwkvKiBjbGVhciBJUlFzICovCisJYnR3cml0ZShJUlFfTUFTSywgWlIzNjA1N19JU1IpOworCS8qIGVuYWJsZSB0aGUgSlBFRyBJUlFzICovCisJYnR3cml0ZSh6ci0+Y2FyZC5qcGVnX2ludCB8CisJCQlaUjM2MDU3X0lDUl9KUEVHUmVwSVJRIHwKKwkJCVpSMzYwNTdfSUNSX0ludFBpbkVuLAorCQlaUjM2MDU3X0lDUik7CisKKwlzZXRfZnJhbWUoenIsIDApOwkvLyBcRlJBTUUKKworCS8qIHNldCB0aGUgSlBFRyBjb2RlYyBndWVzdCBJRCAqLworCXJlZyA9ICh6ci0+Y2FyZC5ncGNzWzFdIDw8IFpSMzYwNTdfSkNHSV9KUEVHdWVzdElEKSB8CisJICAgICAgICgwIDw8IFpSMzYwNTdfSkNHSV9KUEVHdWVzdFJlZyk7CisJYnR3cml0ZShyZWcsIFpSMzYwNTdfSkNHSSk7CisKKwlpZiAoenItPmNhcmQudmlkZW9fdmZlID09IENPREVDX1RZUEVfWlIzNjAxNiAmJgorCSAgICB6ci0+Y2FyZC52aWRlb19jb2RlYyA9PSBDT0RFQ19UWVBFX1pSMzYwNTApIHsKKwkJLyogRW5hYmxlIHByb2Nlc3Npbmcgb24gdGhlIFpSMzYwMTYgKi8KKwkJaWYgKHpyLT52ZmUpCisJCQl6cjM2MDE2X3dyaXRlKHpyLT52ZmUsIDAsIDEpOworCisJCS8qIGxvYWQgdGhlIGFkZHJlc3Mgb2YgdGhlIEdPIHJlZ2lzdGVyIGluIHRoZSBaUjM2MDUwIGxhdGNoICovCisJCXBvc3Rfb2ZmaWNlX3dyaXRlKHpyLCAwLCAwLCAwKTsKKwl9CisKKwkvKiBhc3NlcnQgQWN0aXZlICovCisJYnRvcihaUjM2MDU3X0pQQ19BY3RpdmUsIFpSMzYwNTdfSlBDKTsKKworCS8qIGVuYWJsZSB0aGUgR28gZ2VuZXJhdGlvbiAqLworCWJ0b3IoWlIzNjA1N19KTUNfR29fZW4sIFpSMzYwNTdfSk1DKTsKKwl1ZGVsYXkoMzApOworCisJc2V0X2ZyYW1lKHpyLCAxKTsJLy8gL0ZSQU1FCisKKwlkcHJpbnRrKDMsIEtFUk5fREVCVUcgIiVzOiBqcGVnX3N0YXJ0XG4iLCBaUl9ERVZOQU1FKHpyKSk7Cit9CisKK3ZvaWQKK3pyMzYwNTdfZW5hYmxlX2pwZyAoc3RydWN0IHpvcmFuICAgICAgICAgICp6ciwKKwkJICAgIGVudW0gem9yYW5fY29kZWNfbW9kZSAgbW9kZSkKK3sKKwlzdGF0aWMgaW50IHplcm87CisJc3RhdGljIGludCBvbmUgPSAxOworCXN0cnVjdCB2ZmVfc2V0dGluZ3MgY2FwOworCWludCBmaWVsZF9zaXplID0KKwkgICAgenItPmpwZ19idWZmZXJzLmJ1ZmZlcl9zaXplIC8genItPmpwZ19zZXR0aW5ncy5maWVsZF9wZXJfYnVmZjsKKworCXpyLT5jb2RlY19tb2RlID0gbW9kZTsKKworCWNhcC54ID0genItPmpwZ19zZXR0aW5ncy5pbWdfeDsKKwljYXAueSA9IHpyLT5qcGdfc2V0dGluZ3MuaW1nX3k7CisJY2FwLndpZHRoID0genItPmpwZ19zZXR0aW5ncy5pbWdfd2lkdGg7CisJY2FwLmhlaWdodCA9IHpyLT5qcGdfc2V0dGluZ3MuaW1nX2hlaWdodDsKKwljYXAuZGVjaW1hdGlvbiA9CisJICAgIHpyLT5qcGdfc2V0dGluZ3MuSG9yRGNtIHwgKHpyLT5qcGdfc2V0dGluZ3MuVmVyRGNtIDw8IDgpOworCWNhcC5xdWFsaXR5ID0genItPmpwZ19zZXR0aW5ncy5qcGdfY29tcC5xdWFsaXR5OworCisJc3dpdGNoIChtb2RlKSB7CisKKwljYXNlIEJVWl9NT0RFX01PVElPTl9DT01QUkVTUzogeworCQlzdHJ1Y3QganBlZ19hcHBfbWFya2VyIGFwcDsKKwkJc3RydWN0IGpwZWdfY29tX21hcmtlciBjb207CisKKwkJLyogSW4gbW90aW9uIGNvbXByZXNzIG1vZGUsIHRoZSBkZWNvZGVyIG91dHB1dCBtdXN0IGJlIGVuYWJsZWQsIGFuZAorCQkgKiB0aGUgdmlkZW8gYnVzIGRpcmVjdGlvbiBzZXQgdG8gaW5wdXQuCisJCSAqLworCQlzZXRfdmlkZW9idXNfZGlyKHpyLCAwKTsKKwkJZGVjb2Rlcl9jb21tYW5kKHpyLCBERUNPREVSX0VOQUJMRV9PVVRQVVQsICZvbmUpOworCQllbmNvZGVyX2NvbW1hbmQoenIsIEVOQ09ERVJfU0VUX0lOUFVULCAmemVybyk7CisKKwkJLyogVGFrZSB0aGUgSlBFRyBjb2RlYyBhbmQgdGhlIFZGRSBvdXQgb2Ygc2xlZXAgKi8KKwkJanBlZ19jb2RlY19zbGVlcCh6ciwgMCk7CisKKwkJLyogc2V0IEpQRUcgYXBwL2NvbSBtYXJrZXIgKi8KKwkJYXBwLmFwcG4gPSB6ci0+anBnX3NldHRpbmdzLmpwZ19jb21wLkFQUG47CisJCWFwcC5sZW4gPSB6ci0+anBnX3NldHRpbmdzLmpwZ19jb21wLkFQUF9sZW47CisJCW1lbWNweShhcHAuZGF0YSwgenItPmpwZ19zZXR0aW5ncy5qcGdfY29tcC5BUFBfZGF0YSwgNjApOworCQl6ci0+Y29kZWMtPmNvbnRyb2woenItPmNvZGVjLCBDT0RFQ19TX0pQRUdfQVBQX0RBVEEsCisJCQkJICAgc2l6ZW9mKHN0cnVjdCBqcGVnX2FwcF9tYXJrZXIpLCAmYXBwKTsKKworCQljb20ubGVuID0genItPmpwZ19zZXR0aW5ncy5qcGdfY29tcC5DT01fbGVuOworCQltZW1jcHkoY29tLmRhdGEsIHpyLT5qcGdfc2V0dGluZ3MuanBnX2NvbXAuQ09NX2RhdGEsIDYwKTsKKwkJenItPmNvZGVjLT5jb250cm9sKHpyLT5jb2RlYywgQ09ERUNfU19KUEVHX0NPTV9EQVRBLAorCQkJCSAgIHNpemVvZihzdHJ1Y3QganBlZ19jb21fbWFya2VyKSwgJmNvbSk7CisKKwkJLyogU2V0dXAgdGhlIEpQRUcgY29kZWMgKi8KKwkJenItPmNvZGVjLT5jb250cm9sKHpyLT5jb2RlYywgQ09ERUNfU19KUEVHX1REU19CWVRFLAorCQkJCSAgIHNpemVvZihpbnQpLCAmZmllbGRfc2l6ZSk7CisJCXpyLT5jb2RlYy0+c2V0X3ZpZGVvKHpyLT5jb2RlYywgenItPnRpbWluZywgJmNhcCwKKwkJCQkgICAgICZ6ci0+Y2FyZC52ZmVfcG9sKTsKKwkJenItPmNvZGVjLT5zZXRfbW9kZSh6ci0+Y29kZWMsIENPREVDX0RPX0NPTVBSRVNTSU9OKTsKKworCQkvKiBTZXR1cCB0aGUgVkZFICovCisJCWlmICh6ci0+dmZlKSB7CisJCQl6ci0+dmZlLT5jb250cm9sKHpyLT52ZmUsIENPREVDX1NfSlBFR19URFNfQllURSwKKwkJCQkJIHNpemVvZihpbnQpLCAmZmllbGRfc2l6ZSk7CisJCQl6ci0+dmZlLT5zZXRfdmlkZW8oenItPnZmZSwgenItPnRpbWluZywgJmNhcCwKKwkJCQkJICAgJnpyLT5jYXJkLnZmZV9wb2wpOworCQkJenItPnZmZS0+c2V0X21vZGUoenItPnZmZSwgQ09ERUNfRE9fQ09NUFJFU1NJT04pOworCQl9CisKKwkJaW5pdF9qcGVnX3F1ZXVlKHpyKTsKKwkJenIzNjA1N19zZXRfanBnKHpyLCBtb2RlKTsJLy8gXFBfUmVzZXQsIC4uLiBWaWRlbyBwYXJhbSwgRklGTworCisJCWNsZWFyX2ludGVycnVwdF9jb3VudGVycyh6cik7CisJCWRwcmludGsoMiwgS0VSTl9JTkZPICIlczogZW5hYmxlX2pwZyhNT1RJT05fQ09NUFJFU1MpXG4iLAorCQkJWlJfREVWTkFNRSh6cikpOworCQlicmVhazsKKwl9CisKKwljYXNlIEJVWl9NT0RFX01PVElPTl9ERUNPTVBSRVNTOgorCQkvKiBJbiBtb3Rpb24gZGVjb21wcmVzc2lvbiBtb2RlLCB0aGUgZGVjb2RlciBvdXRwdXQgbXVzdCBiZSBkaXNhYmxlZCwgYW5kCisJCSAqIHRoZSB2aWRlbyBidXMgZGlyZWN0aW9uIHNldCB0byBvdXRwdXQuCisJCSAqLworCQlkZWNvZGVyX2NvbW1hbmQoenIsIERFQ09ERVJfRU5BQkxFX09VVFBVVCwgJnplcm8pOworCQlzZXRfdmlkZW9idXNfZGlyKHpyLCAxKTsKKwkJZW5jb2Rlcl9jb21tYW5kKHpyLCBFTkNPREVSX1NFVF9JTlBVVCwgJm9uZSk7CisKKwkJLyogVGFrZSB0aGUgSlBFRyBjb2RlYyBhbmQgdGhlIFZGRSBvdXQgb2Ygc2xlZXAgKi8KKwkJanBlZ19jb2RlY19zbGVlcCh6ciwgMCk7CisJCS8qIFNldHVwIHRoZSBWRkUgKi8KKwkJaWYgKHpyLT52ZmUpIHsKKwkJCXpyLT52ZmUtPnNldF92aWRlbyh6ci0+dmZlLCB6ci0+dGltaW5nLCAmY2FwLAorCQkJCQkgICAmenItPmNhcmQudmZlX3BvbCk7CisJCQl6ci0+dmZlLT5zZXRfbW9kZSh6ci0+dmZlLCBDT0RFQ19ET19FWFBBTlNJT04pOworCQl9CisJCS8qIFNldHVwIHRoZSBKUEVHIGNvZGVjICovCisJCXpyLT5jb2RlYy0+c2V0X3ZpZGVvKHpyLT5jb2RlYywgenItPnRpbWluZywgJmNhcCwKKwkJCQkgICAgICZ6ci0+Y2FyZC52ZmVfcG9sKTsKKwkJenItPmNvZGVjLT5zZXRfbW9kZSh6ci0+Y29kZWMsIENPREVDX0RPX0VYUEFOU0lPTik7CisKKwkJaW5pdF9qcGVnX3F1ZXVlKHpyKTsKKwkJenIzNjA1N19zZXRfanBnKHpyLCBtb2RlKTsJLy8gXFBfUmVzZXQsIC4uLiBWaWRlbyBwYXJhbSwgRklGTworCisJCWNsZWFyX2ludGVycnVwdF9jb3VudGVycyh6cik7CisJCWRwcmludGsoMiwgS0VSTl9JTkZPICIlczogZW5hYmxlX2pwZyhNT1RJT05fREVDT01QUkVTUylcbiIsCisJCQlaUl9ERVZOQU1FKHpyKSk7CisJCWJyZWFrOworCisJY2FzZSBCVVpfTU9ERV9JRExFOgorCWRlZmF1bHQ6CisJCS8qIHNodXQgZG93biBwcm9jZXNzaW5nICovCisJCWJ0YW5kKH4oenItPmNhcmQuanBlZ19pbnQgfCBaUjM2MDU3X0lDUl9KUEVHUmVwSVJRKSwKKwkJICAgICAgWlIzNjA1N19JQ1IpOworCQlidHdyaXRlKHpyLT5jYXJkLmpwZWdfaW50IHwgWlIzNjA1N19JQ1JfSlBFR1JlcElSUSwKKwkJCVpSMzYwNTdfSVNSKTsKKwkJYnRhbmQoflpSMzYwNTdfSk1DX0dvX2VuLCBaUjM2MDU3X0pNQyk7CS8vIFxHb19lbgorCisJCW1zbGVlcCg1MCk7CisKKwkJc2V0X3ZpZGVvYnVzX2Rpcih6ciwgMCk7CisJCXNldF9mcmFtZSh6ciwgMSk7CS8vIC9GUkFNRQorCQlidG9yKFpSMzYwNTdfTUNUQ1JfQ0ZsdXNoLCBaUjM2MDU3X01DVENSKTsJLy8gL0NGbHVzaAorCQlidHdyaXRlKDAsIFpSMzYwNTdfSlBDKTsJLy8gXFBfUmVzZXQsXENvZFRybnNFbixcQWN0aXZlCisJCWJ0YW5kKH5aUjM2MDU3X0pNQ19WRklGT19GQiwgWlIzNjA1N19KTUMpOworCQlidGFuZCh+WlIzNjA1N19KTUNfU3luY01zdHIsIFpSMzYwNTdfSk1DKTsKKwkJanBlZ19jb2RlY19yZXNldCh6cik7CisJCWpwZWdfY29kZWNfc2xlZXAoenIsIDEpOworCQl6cjM2MDU3X2FkanVzdF92ZmUoenIsIG1vZGUpOworCisJCWRlY29kZXJfY29tbWFuZCh6ciwgREVDT0RFUl9FTkFCTEVfT1VUUFVULCAmb25lKTsKKwkJZW5jb2Rlcl9jb21tYW5kKHpyLCBFTkNPREVSX1NFVF9JTlBVVCwgJnplcm8pOworCisJCWRwcmludGsoMiwgS0VSTl9JTkZPICIlczogZW5hYmxlX2pwZyhJRExFKVxuIiwgWlJfREVWTkFNRSh6cikpOworCQlicmVhazsKKworCX0KK30KKworLyogd2hlbiB0aGlzIGlzIGNhbGxlZCB0aGUgc3BpbmxvY2sgbXVzdCBiZSBoZWxkICovCit2b2lkCit6b3Jhbl9mZWVkX3N0YXRfY29tIChzdHJ1Y3Qgem9yYW4gKnpyKQoreworCS8qIG1vdmUgZnJhbWVzIGZyb20gcGVuZGluZyBxdWV1ZSB0byBETUEgKi8KKworCWludCBmcmFtZSwgaSwgbWF4X3N0YXRfY29tOworCisJbWF4X3N0YXRfY29tID0KKwkgICAgKHpyLT5qcGdfc2V0dGluZ3MuVG1wRGNtID09CisJICAgICAxKSA/IEJVWl9OVU1fU1RBVF9DT00gOiAoQlVaX05VTV9TVEFUX0NPTSA+PiAxKTsKKworCXdoaWxlICgoenItPmpwZ19kbWFfaGVhZCAtIHpyLT5qcGdfZG1hX3RhaWwpIDwgbWF4X3N0YXRfY29tICYmCisJICAgICAgIHpyLT5qcGdfZG1hX2hlYWQgPCB6ci0+anBnX3F1ZV9oZWFkKSB7CisKKwkJZnJhbWUgPSB6ci0+anBnX3BlbmRbenItPmpwZ19kbWFfaGVhZCAmIEJVWl9NQVNLX0ZSQU1FXTsKKwkJaWYgKHpyLT5qcGdfc2V0dGluZ3MuVG1wRGNtID09IDEpIHsKKwkJCS8qIGZpbGwgMSBzdGF0X2NvbSBlbnRyeSAqLworCQkJaSA9ICh6ci0+anBnX2RtYV9oZWFkIC0KKwkJCSAgICAgenItPmpwZ19lcnJfc2hpZnQpICYgQlVaX01BU0tfU1RBVF9DT007CisJCQlpZiAoISh6ci0+c3RhdF9jb21baV0gJiBjcHVfdG9fbGUzMigxKSkpCisJCQkJYnJlYWs7CisJCQl6ci0+c3RhdF9jb21baV0gPQorCQkJICAgIGNwdV90b19sZTMyKHpyLT5qcGdfYnVmZmVycy5idWZmZXJbZnJhbWVdLmZyYWdfdGFiX2J1cyk7CisJCX0gZWxzZSB7CisJCQkvKiBmaWxsIDIgc3RhdF9jb20gZW50cmllcyAqLworCQkJaSA9ICgoenItPmpwZ19kbWFfaGVhZCAtCisJCQkgICAgICB6ci0+anBnX2Vycl9zaGlmdCkgJiAxKSAqIDI7CisJCQlpZiAoISh6ci0+c3RhdF9jb21baV0gJiBjcHVfdG9fbGUzMigxKSkpCisJCQkJYnJlYWs7CisJCQl6ci0+c3RhdF9jb21baV0gPQorCQkJICAgIGNwdV90b19sZTMyKHpyLT5qcGdfYnVmZmVycy5idWZmZXJbZnJhbWVdLmZyYWdfdGFiX2J1cyk7CisJCQl6ci0+c3RhdF9jb21baSArIDFdID0KKwkJCSAgICBjcHVfdG9fbGUzMih6ci0+anBnX2J1ZmZlcnMuYnVmZmVyW2ZyYW1lXS5mcmFnX3RhYl9idXMpOworCQl9CisJCXpyLT5qcGdfYnVmZmVycy5idWZmZXJbZnJhbWVdLnN0YXRlID0gQlVaX1NUQVRFX0RNQTsKKwkJenItPmpwZ19kbWFfaGVhZCsrOworCisJfQorCWlmICh6ci0+Y29kZWNfbW9kZSA9PSBCVVpfTU9ERV9NT1RJT05fREVDT01QUkVTUykKKwkJenItPmpwZ19xdWV1ZWRfbnVtKys7Cit9CisKKy8qIHdoZW4gdGhpcyBpcyBjYWxsZWQgdGhlIHNwaW5sb2NrIG11c3QgYmUgaGVsZCAqLworc3RhdGljIHZvaWQKK3pvcmFuX3JlYXBfc3RhdF9jb20gKHN0cnVjdCB6b3JhbiAqenIpCit7CisJLyogbW92ZSBmcmFtZXMgZnJvbSBETUEgcXVldWUgdG8gZG9uZSBxdWV1ZSAqLworCisJaW50IGk7CisJdTMyIHN0YXRfY29tOworCXVuc2lnbmVkIGludCBzZXE7CisJdW5zaWduZWQgaW50IGRpZjsKKwlzdHJ1Y3Qgem9yYW5fanBnX2J1ZmZlciAqYnVmZmVyOworCWludCBmcmFtZTsKKworCS8qIEluIG1vdGlvbiBkZWNvbXByZXNzIHdlIGRvbid0IGhhdmUgYSBoYXJkd2FyZSBmcmFtZSBjb3VudGVyLAorCSAqIHdlIGp1c3QgY291bnQgdGhlIGludGVycnVwdHMgaGVyZSAqLworCisJaWYgKHpyLT5jb2RlY19tb2RlID09IEJVWl9NT0RFX01PVElPTl9ERUNPTVBSRVNTKSB7CisJCXpyLT5qcGdfc2VxX251bSsrOworCX0KKwl3aGlsZSAoenItPmpwZ19kbWFfdGFpbCA8IHpyLT5qcGdfZG1hX2hlYWQpIHsKKwkJaWYgKHpyLT5qcGdfc2V0dGluZ3MuVG1wRGNtID09IDEpCisJCQlpID0gKHpyLT5qcGdfZG1hX3RhaWwgLQorCQkJICAgICB6ci0+anBnX2Vycl9zaGlmdCkgJiBCVVpfTUFTS19TVEFUX0NPTTsKKwkJZWxzZQorCQkJaSA9ICgoenItPmpwZ19kbWFfdGFpbCAtCisJCQkgICAgICB6ci0+anBnX2Vycl9zaGlmdCkgJiAxKSAqIDIgKyAxOworCisJCXN0YXRfY29tID0gbGUzMl90b19jcHUoenItPnN0YXRfY29tW2ldKTsKKworCQlpZiAoKHN0YXRfY29tICYgMSkgPT0gMCkgeworCQkJcmV0dXJuOworCQl9CisJCWZyYW1lID0genItPmpwZ19wZW5kW3pyLT5qcGdfZG1hX3RhaWwgJiBCVVpfTUFTS19GUkFNRV07CisJCWJ1ZmZlciA9ICZ6ci0+anBnX2J1ZmZlcnMuYnVmZmVyW2ZyYW1lXTsKKwkJZG9fZ2V0dGltZW9mZGF5KCZidWZmZXItPmJzLnRpbWVzdGFtcCk7CisKKwkJaWYgKHpyLT5jb2RlY19tb2RlID09IEJVWl9NT0RFX01PVElPTl9DT01QUkVTUykgeworCQkJYnVmZmVyLT5icy5sZW5ndGggPSAoc3RhdF9jb20gJiAweDdmZmZmZikgPj4gMTsKKworCQkJLyogdXBkYXRlIHNlcXVlbmNlIG51bWJlciB3aXRoIHRoZSBoZWxwIG9mIHRoZSBjb3VudGVyIGluIHN0YXRfY29tICovCisKKwkJCXNlcSA9ICgoc3RhdF9jb20gPj4gMjQpICsgenItPmpwZ19lcnJfc2VxKSAmIDB4ZmY7CisJCQlkaWYgPSAoc2VxIC0genItPmpwZ19zZXFfbnVtKSAmIDB4ZmY7CisJCQl6ci0+anBnX3NlcV9udW0gKz0gZGlmOworCQl9IGVsc2UgeworCQkJYnVmZmVyLT5icy5sZW5ndGggPSAwOworCQl9CisJCWJ1ZmZlci0+YnMuc2VxID0KKwkJICAgIHpyLT5qcGdfc2V0dGluZ3MuVG1wRGNtID09CisJCSAgICAyID8gKHpyLT5qcGdfc2VxX251bSA+PiAxKSA6IHpyLT5qcGdfc2VxX251bTsKKwkJYnVmZmVyLT5zdGF0ZSA9IEJVWl9TVEFURV9ET05FOworCisJCXpyLT5qcGdfZG1hX3RhaWwrKzsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCitlcnJvcl9oYW5kbGVyIChzdHJ1Y3Qgem9yYW4gKnpyLAorCSAgICAgICB1MzIgICAgICAgICAgIGFzdGF0LAorCSAgICAgICB1MzIgICAgICAgICAgIHN0YXQpCit7CisJLyogVGhpcyBpcyBKUEVHIGVycm9yIGhhbmRsaW5nIHBhcnQgKi8KKwlpZiAoKHpyLT5jb2RlY19tb2RlICE9IEJVWl9NT0RFX01PVElPTl9DT01QUkVTUykgJiYKKwkgICAgKHpyLT5jb2RlY19tb2RlICE9IEJVWl9NT0RFX01PVElPTl9ERUNPTVBSRVNTKSkgeworCQkvL2RwcmludGsoMSwgS0VSTl9FUlIgIiVzOiBJbnRlcm5hbCBlcnJvcjogZXJyb3IgaGFuZGxpbmcgcmVxdWVzdCBpbiBtb2RlICVkXG4iLCBaUl9ERVZOQU1FKHpyKSwgenItPmNvZGVjX21vZGUpOworCQlyZXR1cm47CisJfQorCisJaWYgKChzdGF0ICYgMSkgPT0gMCAmJgorCSAgICB6ci0+Y29kZWNfbW9kZSA9PSBCVVpfTU9ERV9NT1RJT05fQ09NUFJFU1MgJiYKKwkgICAgenItPmpwZ19kbWFfdGFpbCAtIHpyLT5qcGdfcXVlX3RhaWwgPj0KKwkgICAgIHpyLT5qcGdfYnVmZmVycy5udW1fYnVmZmVycykgeworCQkvKiBObyBmcmVlIGJ1ZmZlcnMuLi4gKi8KKwkJem9yYW5fcmVhcF9zdGF0X2NvbSh6cik7CisJCXpvcmFuX2ZlZWRfc3RhdF9jb20oenIpOworCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJnpyLT5qcGdfY2FwcSk7CisJCXpyLT5KUEVHX21pc3NlZCA9IDA7CisJCXJldHVybjsKKwl9CisKKwlpZiAoenItPkpQRUdfZXJyb3IgIT0gMSkgeworCQkvKgorCQkgKiBGaXJzdCBlbnRyeTogZXJyb3IganVzdCBoYXBwZW5lZCBkdXJpbmcgbm9ybWFsIG9wZXJhdGlvbgorCQkgKgorCQkgKiBJbiBCVVpfTU9ERV9NT1RJT05fQ09NUFJFU1M6CisJCSAqCisJCSAqIFBvc3NpYmxlIGdsaXRjaCBpbiBUViBzaWduYWwuIEluIHRoaXMgY2FzZSB3ZSBzaG91bGQKKwkJICogc3RvcCB0aGUgY29kZWMgYW5kIHdhaXQgZm9yIGdvb2QgcXVhbGl0eSBzaWduYWwgYmVmb3JlCisJCSAqIHJlc3RhcnRpbmcgaXQgdG8gYXZvaWQgZnVydGhlciBwcm9ibGVtcworCQkgKgorCQkgKiBJbiBCVVpfTU9ERV9NT1RJT05fREVDT01QUkVTUzoKKwkJICoKKwkJICogQmFkIEpQRUcgZnJhbWU6IHdlIGhhdmUgdG8gbWFyayBpdCBhcyBwcm9jZXNzZWQgKGNvZGVjIGNyYXNoZWQKKwkJICogYW5kIHdhcyBub3QgYWJsZSB0byBkbyBpdCBpdHNlbGYpLCBhbmQgdG8gcmVtb3ZlIGl0IGZyb20gcXVldWUuCisJCSAqLworCQlidGFuZCh+WlIzNjA1N19KTUNfR29fZW4sIFpSMzYwNTdfSk1DKTsKKwkJdWRlbGF5KDEpOworCQlzdGF0ID0gc3RhdCB8IChwb3N0X29mZmljZV9yZWFkKHpyLCA3LCAwKSAmIDMpIDw8IDg7CisJCWJ0d3JpdGUoMCwgWlIzNjA1N19KUEMpOworCQlidG9yKFpSMzYwNTdfTUNUQ1JfQ0ZsdXNoLCBaUjM2MDU3X01DVENSKTsKKwkJanBlZ19jb2RlY19yZXNldCh6cik7CisJCWpwZWdfY29kZWNfc2xlZXAoenIsIDEpOworCQl6ci0+SlBFR19lcnJvciA9IDE7CisJCXpyLT5udW1fZXJyb3JzKys7CisKKwkJLyogUmVwb3J0IGVycm9yICovCisJCWlmICh6cjM2MDY3X2RlYnVnID4gMSAmJiB6ci0+bnVtX2Vycm9ycyA8PSA4KSB7CisJCQlsb25nIGZyYW1lOworCQkJZnJhbWUgPQorCQkJICAgIHpyLT5qcGdfcGVuZFt6ci0+anBnX2RtYV90YWlsICYgQlVaX01BU0tfRlJBTUVdOworCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkgICAgICAgIiVzOiBKUEVHIGVycm9yIHN0YXQ9MHglMDh4KDB4JTA4eCkgcXVldWVfc3RhdGU9JWxkLyVsZC8lbGQvJWxkIHNlcT0lbGQgZnJhbWU9JWxkLiBDb2RlYyBzdG9wcGVkLiAiLAorCQkJICAgICAgIFpSX0RFVk5BTUUoenIpLCBzdGF0LCB6ci0+bGFzdF9pc3IsCisJCQkgICAgICAgenItPmpwZ19xdWVfdGFpbCwgenItPmpwZ19kbWFfdGFpbCwKKwkJCSAgICAgICB6ci0+anBnX2RtYV9oZWFkLCB6ci0+anBnX3F1ZV9oZWFkLAorCQkJICAgICAgIHpyLT5qcGdfc2VxX251bSwgZnJhbWUpOworCQkJcHJpbnRrKCJzdGF0X2NvbSBmcmFtZXM6Iik7CisJCQl7CisJCQkJaW50IGksIGo7CisJCQkJZm9yIChqID0gMDsgaiA8IEJVWl9OVU1fU1RBVF9DT007IGorKykgeworCQkJCQlmb3IgKGkgPSAwOworCQkJCQkgICAgIGkgPCB6ci0+anBnX2J1ZmZlcnMubnVtX2J1ZmZlcnM7CisJCQkJCSAgICAgaSsrKSB7CisJCQkJCQlpZiAobGUzMl90b19jcHUoenItPnN0YXRfY29tW2pdKSA9PQorCQkJCQkJICAgIHpyLT5qcGdfYnVmZmVycy4KKwkJCQkJCSAgICBidWZmZXJbaV0uCisJCQkJCQkgICAgZnJhZ190YWJfYnVzKSB7CisJCQkJCQkJcHJpbnRrKCIlIGQtPiVkIiwKKwkJCQkJCQkgICAgICAgaiwgaSk7CisJCQkJCQl9CisJCQkJCX0KKwkJCQl9CisJCQkJcHJpbnRrKCJcbiIpOworCQkJfQorCQl9CisJCS8qIEZpbmQgYW4gZW50cnkgaW4gc3RhdF9jb20gYW5kIHJvdGF0ZSBjb250ZW50cyAqLworCQl7CisJCQlpbnQgaTsKKworCQkJaWYgKHpyLT5qcGdfc2V0dGluZ3MuVG1wRGNtID09IDEpCisJCQkJaSA9ICh6ci0+anBnX2RtYV90YWlsIC0KKwkJCQkgICAgIHpyLT5qcGdfZXJyX3NoaWZ0KSAmIEJVWl9NQVNLX1NUQVRfQ09NOworCQkJZWxzZQorCQkJCWkgPSAoKHpyLT5qcGdfZG1hX3RhaWwgLQorCQkJCSAgICAgIHpyLT5qcGdfZXJyX3NoaWZ0KSAmIDEpICogMjsKKwkJCWlmICh6ci0+Y29kZWNfbW9kZSA9PSBCVVpfTU9ERV9NT1RJT05fREVDT01QUkVTUykgeworCQkJCS8qIE1pbWljIHpyMzYwNjcgb3BlcmF0aW9uICovCisJCQkJenItPnN0YXRfY29tW2ldIHw9IGNwdV90b19sZTMyKDEpOworCQkJCWlmICh6ci0+anBnX3NldHRpbmdzLlRtcERjbSAhPSAxKQorCQkJCQl6ci0+c3RhdF9jb21baSArIDFdIHw9IGNwdV90b19sZTMyKDEpOworCQkJCS8qIFJlZmlsbCAqLworCQkJCXpvcmFuX3JlYXBfc3RhdF9jb20oenIpOworCQkJCXpvcmFuX2ZlZWRfc3RhdF9jb20oenIpOworCQkJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmenItPmpwZ19jYXBxKTsKKwkJCQkvKiBGaW5kIGFuIGVudHJ5IGluIHN0YXRfY29tIGFnYWluIGFmdGVyIHJlZmlsbCAqLworCQkJCWlmICh6ci0+anBnX3NldHRpbmdzLlRtcERjbSA9PSAxKQorCQkJCQlpID0gKHpyLT5qcGdfZG1hX3RhaWwgLQorCQkJCQkgICAgIHpyLT5qcGdfZXJyX3NoaWZ0KSAmCisJCQkJCSAgICBCVVpfTUFTS19TVEFUX0NPTTsKKwkJCQllbHNlCisJCQkJCWkgPSAoKHpyLT5qcGdfZG1hX3RhaWwgLQorCQkJCQkgICAgICB6ci0+anBnX2Vycl9zaGlmdCkgJiAxKSAqIDI7CisJCQl9CisJCQlpZiAoaSkgeworCQkJCS8qIFJvdGF0ZSBzdGF0X2NvbW0gZW50cmllcyB0byBtYWtlIGN1cnJlbnQgZW50cnkgZmlyc3QgKi8KKwkJCQlpbnQgajsKKwkJCQlfX2xlMzIgYnVzX2FkZHJbQlVaX05VTV9TVEFUX0NPTV07CisKKwkJCQkvKiBIZXJlIHdlIGFyZSBjb3B5aW5nIHRoZSBzdGF0X2NvbSBhcnJheSwgd2hpY2gKKwkJCQkgKiBpcyBhbHJlYWR5IGluIGxpdHRsZSBlbmRpYW4gZm9ybWF0LCBzbworCQkJCSAqIG5vIGVuZGlhbiBjb252ZXJzaW9ucyBoZXJlCisJCQkJICovCisJCQkJbWVtY3B5KGJ1c19hZGRyLCB6ci0+c3RhdF9jb20sCisJCQkJICAgICAgIHNpemVvZihidXNfYWRkcikpOworCQkJCWZvciAoaiA9IDA7IGogPCBCVVpfTlVNX1NUQVRfQ09NOyBqKyspIHsKKwkJCQkJenItPnN0YXRfY29tW2pdID0KKwkJCQkJICAgIGJ1c19hZGRyWyhpICsgaikgJgorCQkJCQkJICAgICBCVVpfTUFTS19TVEFUX0NPTV07CisKKwkJCQl9CisJCQkJenItPmpwZ19lcnJfc2hpZnQgKz0gaTsKKwkJCQl6ci0+anBnX2Vycl9zaGlmdCAmPSBCVVpfTUFTS19TVEFUX0NPTTsKKwkJCX0KKwkJCWlmICh6ci0+Y29kZWNfbW9kZSA9PSBCVVpfTU9ERV9NT1RJT05fQ09NUFJFU1MpCisJCQkJenItPmpwZ19lcnJfc2VxID0genItPmpwZ19zZXFfbnVtOwkvKiArIDE7ICovCisJCX0KKwl9CisKKwkvKiBOb3cgdGhlIHN0YXRfY29tbSBidWZmZXIgaXMgcmVhZHkgZm9yIHJlc3RhcnQgKi8KKwlkbyB7CisJCWludCBzdGF0dXMsIG1vZGU7CisKKwkJaWYgKHpyLT5jb2RlY19tb2RlID09IEJVWl9NT0RFX01PVElPTl9DT01QUkVTUykgeworCQkJZGVjb2Rlcl9jb21tYW5kKHpyLCBERUNPREVSX0dFVF9TVEFUVVMsICZzdGF0dXMpOworCQkJbW9kZSA9IENPREVDX0RPX0NPTVBSRVNTSU9OOworCQl9IGVsc2UgeworCQkJc3RhdHVzID0gMDsKKwkJCW1vZGUgPSBDT0RFQ19ET19FWFBBTlNJT047CisJCX0KKwkJaWYgKHpyLT5jb2RlY19tb2RlID09IEJVWl9NT0RFX01PVElPTl9ERUNPTVBSRVNTIHx8CisJCSAgICAoc3RhdHVzICYgREVDT0RFUl9TVEFUVVNfR09PRCkpIHsKKwkJCS8qKioqKioqKioqIFJFU1RBUlQgY29kZSAqKioqKioqKioqKioqLworCQkJanBlZ19jb2RlY19yZXNldCh6cik7CisJCQl6ci0+Y29kZWMtPnNldF9tb2RlKHpyLT5jb2RlYywgbW9kZSk7CisJCQl6cjM2MDU3X3NldF9qcGcoenIsIHpyLT5jb2RlY19tb2RlKTsKKwkJCWpwZWdfc3RhcnQoenIpOworCisJCQlpZiAoenItPm51bV9lcnJvcnMgPD0gOCkKKwkJCQlkcHJpbnRrKDIsIEtFUk5fSU5GTyAiJXM6IFJlc3RhcnRcbiIsCisJCQkJCVpSX0RFVk5BTUUoenIpKTsKKworCQkJenItPkpQRUdfbWlzc2VkID0gMDsKKwkJCXpyLT5KUEVHX2Vycm9yID0gMjsKKwkJCS8qKioqKioqKioqIEVuZCBSRVNUQVJUIGNvZGUgKioqKioqKioqKiovCisJCX0KKwl9IHdoaWxlICgwKTsKK30KKworaXJxcmV0dXJuX3QKK3pvcmFuX2lycSAoaW50ICAgICAgICAgICAgIGlycSwKKwkgICB2b2lkICAgICAgICAgICAqZGV2X2lkKQoreworCXUzMiBzdGF0LCBhc3RhdDsKKwlpbnQgY291bnQ7CisJc3RydWN0IHpvcmFuICp6cjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJenIgPSBkZXZfaWQ7CisJY291bnQgPSAwOworCisJaWYgKHpyLT50ZXN0aW5nKSB7CisJCS8qIFRlc3RpbmcgaW50ZXJydXB0cyAqLworCQlzcGluX2xvY2tfaXJxc2F2ZSgmenItPnNwaW5sb2NrLCBmbGFncyk7CisJCXdoaWxlICgoc3RhdCA9IGNvdW50X3Jlc2V0X2ludGVycnVwdCh6cikpKSB7CisJCQlpZiAoY291bnQrKyA+IDEwMCkgeworCQkJCWJ0YW5kKH5aUjM2MDU3X0lDUl9JbnRQaW5FbiwgWlIzNjA1N19JQ1IpOworCQkJCWRwcmludGsoMSwKKwkJCQkJS0VSTl9FUlIKKwkJCQkJIiVzOiBJUlEgbG9ja3VwIHdoaWxlIHRlc3RpbmcsIGlzcj0weCUwOHgsIGNsZWFyZWQgaW50IG1hc2tcbiIsCisJCQkJCVpSX0RFVk5BTUUoenIpLCBzdGF0KTsKKwkJCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJnpyLT50ZXN0X3EpOworCQkJfQorCQl9CisJCXpyLT5sYXN0X2lzciA9IHN0YXQ7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnpyLT5zcGlubG9jaywgZmxhZ3MpOworCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CisJfQorCisJc3Bpbl9sb2NrX2lycXNhdmUoJnpyLT5zcGlubG9jaywgZmxhZ3MpOworCXdoaWxlICgxKSB7CisJCS8qIGdldC9jbGVhciBpbnRlcnJ1cHQgc3RhdHVzIGJpdHMgKi8KKwkJc3RhdCA9IGNvdW50X3Jlc2V0X2ludGVycnVwdCh6cik7CisJCWFzdGF0ID0gc3RhdCAmIElSUV9NQVNLOworCQlpZiAoIWFzdGF0KSB7CisJCQlicmVhazsKKwkJfQorCQlkcHJpbnRrKDQsCisJCQlLRVJOX0RFQlVHCisJCQkiem9yYW5faXJxOiBhc3RhdDogMHglMDh4LCBtYXNrOiAweCUwOHhcbiIsCisJCQlhc3RhdCwgYnRyZWFkKFpSMzYwNTdfSUNSKSk7CisJCWlmIChhc3RhdCAmIHpyLT5jYXJkLnZzeW5jX2ludCkgewkvLyBTVworCisJCQlpZiAoenItPmNvZGVjX21vZGUgPT0gQlVaX01PREVfTU9USU9OX0RFQ09NUFJFU1MgfHwKKwkJCSAgICB6ci0+Y29kZWNfbW9kZSA9PSBCVVpfTU9ERV9NT1RJT05fQ09NUFJFU1MpIHsKKwkJCQkvKiBjb3VudCBtaXNzZWQgaW50ZXJydXB0cyAqLworCQkJCXpyLT5KUEVHX21pc3NlZCsrOworCQkJfQorCQkJLy9wb3N0X29mZmljZV9yZWFkKHpyLDEsMCk7CisJCQkvKiBJbnRlcnJ1cHRzIG1heSBzdGlsbCBoYXBwZW4gd2hlbgorCQkJICogenItPnY0bF9tZW1ncmFiX2FjdGl2ZSBpcyBzd2l0Y2hlZCBvZmYuCisJCQkgKiBXZSBzaW1wbHkgaWdub3JlIHRoZW0gKi8KKworCQkJaWYgKHpyLT52NGxfbWVtZ3JhYl9hY3RpdmUpIHsKKworCQkJCS8qIEEgbG90IG1vcmUgY2hlY2tzIHNob3VsZCBiZSBoZXJlIC4uLiAqLworCQkJCWlmICgoYnRyZWFkKFpSMzYwNTdfVlNTRkdSKSAmCisJCQkJICAgICBaUjM2MDU3X1ZTU0ZHUl9TbmFwU2hvdCkgPT0gMCkKKwkJCQkJZHByaW50aygxLAorCQkJCQkJS0VSTl9XQVJOSU5HCisJCQkJCQkiJXM6IEJ1eklSUSB3aXRoIFNuYXBTaG90IG9mZiA/Pz9cbiIsCisJCQkJCQlaUl9ERVZOQU1FKHpyKSk7CisKKwkJCQlpZiAoenItPnY0bF9ncmFiX2ZyYW1lICE9IE5PX0dSQUJfQUNUSVZFKSB7CisJCQkJCS8qIFRoZXJlIGlzIGEgZ3JhYiBvbiBhIGZyYW1lIGdvaW5nIG9uLCBjaGVjayBpZiBpdCBoYXMgZmluaXNoZWQgKi8KKworCQkJCQlpZiAoKGJ0cmVhZChaUjM2MDU3X1ZTU0ZHUikgJgorCQkJCQkgICAgIFpSMzYwNTdfVlNTRkdSX0ZyYW1lR3JhYikgPT0KKwkJCQkJICAgIDApIHsKKwkJCQkJCS8qIGl0IGlzIGZpbmlzaGVkLCBub3RpZnkgdGhlIHVzZXIgKi8KKworCQkJCQkJenItPnY0bF9idWZmZXJzLmJ1ZmZlclt6ci0+djRsX2dyYWJfZnJhbWVdLnN0YXRlID0gQlVaX1NUQVRFX0RPTkU7CisJCQkJCQl6ci0+djRsX2J1ZmZlcnMuYnVmZmVyW3pyLT52NGxfZ3JhYl9mcmFtZV0uYnMuc2VxID0genItPnY0bF9ncmFiX3NlcTsKKwkJCQkJCWRvX2dldHRpbWVvZmRheSgmenItPnY0bF9idWZmZXJzLmJ1ZmZlclt6ci0+djRsX2dyYWJfZnJhbWVdLmJzLnRpbWVzdGFtcCk7CisJCQkJCQl6ci0+djRsX2dyYWJfZnJhbWUgPSBOT19HUkFCX0FDVElWRTsKKwkJCQkJCXpyLT52NGxfcGVuZF90YWlsKys7CisJCQkJCX0KKwkJCQl9CisKKwkJCQlpZiAoenItPnY0bF9ncmFiX2ZyYW1lID09IE5PX0dSQUJfQUNUSVZFKQorCQkJCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJnpyLT52NGxfY2FwcSk7CisKKwkJCQkvKiBDaGVjayBpZiB0aGVyZSBpcyBhbm90aGVyIGdyYWIgcXVldWVkICovCisKKwkJCQlpZiAoenItPnY0bF9ncmFiX2ZyYW1lID09IE5PX0dSQUJfQUNUSVZFICYmCisJCQkJICAgIHpyLT52NGxfcGVuZF90YWlsICE9IHpyLT52NGxfcGVuZF9oZWFkKSB7CisKKwkJCQkJaW50IGZyYW1lID0genItPnY0bF9wZW5kW3pyLT52NGxfcGVuZF90YWlsICYKKwkJCQkJCQkgVjRMX01BU0tfRlJBTUVdOworCQkJCQl1MzIgcmVnOworCisJCQkJCXpyLT52NGxfZ3JhYl9mcmFtZSA9IGZyYW1lOworCisJCQkJCS8qIFNldCB6cjM2MDU3IHZpZGVvIGZyb250IGVuZCBhbmQgZW5hYmxlIHZpZGVvICovCisKKwkJCQkJLyogQnVmZmVyIGFkZHJlc3MgKi8KKworCQkJCQlyZWcgPQorCQkJCQkgICAgenItPnY0bF9idWZmZXJzLmJ1ZmZlcltmcmFtZV0uCisJCQkJCSAgICBmYnVmZmVyX2J1czsKKwkJCQkJYnR3cml0ZShyZWcsIFpSMzYwNTdfVkRUUik7CisJCQkJCWlmICh6ci0+djRsX3NldHRpbmdzLmhlaWdodCA+CisJCQkJCSAgICBCVVpfTUFYX0hFSUdIVCAvIDIpCisJCQkJCQlyZWcgKz0KKwkJCQkJCSAgICB6ci0+djRsX3NldHRpbmdzLgorCQkJCQkJICAgIGJ5dGVzcGVybGluZTsKKwkJCQkJYnR3cml0ZShyZWcsIFpSMzYwNTdfVkRCUik7CisKKwkJCQkJLyogdmlkZW8gc3RyaWRlLCBzdGF0dXMsIGFuZCBmcmFtZSBncmFiIHJlZ2lzdGVyICovCisJCQkJCXJlZyA9IDA7CisJCQkJCWlmICh6ci0+djRsX3NldHRpbmdzLmhlaWdodCA+CisJCQkJCSAgICBCVVpfTUFYX0hFSUdIVCAvIDIpCisJCQkJCQlyZWcgKz0KKwkJCQkJCSAgICB6ci0+djRsX3NldHRpbmdzLgorCQkJCQkJICAgIGJ5dGVzcGVybGluZTsKKwkJCQkJcmVnID0KKwkJCQkJICAgIChyZWcgPDwKKwkJCQkJICAgICBaUjM2MDU3X1ZTU0ZHUl9EaXNwU3RyaWRlKTsKKwkJCQkJcmVnIHw9IFpSMzYwNTdfVlNTRkdSX1ZpZE92ZjsKKwkJCQkJcmVnIHw9IFpSMzYwNTdfVlNTRkdSX1NuYXBTaG90OworCQkJCQlyZWcgfD0gWlIzNjA1N19WU1NGR1JfRnJhbWVHcmFiOworCQkJCQlidHdyaXRlKHJlZywgWlIzNjA1N19WU1NGR1IpOworCisJCQkJCWJ0b3IoWlIzNjA1N19WRENSX1ZpZEVuLAorCQkJCQkgICAgIFpSMzYwNTdfVkRDUik7CisJCQkJfQorCQkJfQorCisJCQkvKiBldmVuIGlmIHdlIGRvbid0IGdyYWIsIHdlIGRvIHdhbnQgdG8gaW5jcmVtZW50CisJCQkgKiB0aGUgc2VxdWVuY2UgY291bnRlciB0byBzZWUgbG9zdCBmcmFtZXMgKi8KKwkJCXpyLT52NGxfZ3JhYl9zZXErKzsKKwkJfQorI2lmIChJUlFfTUFTSyAmIFpSMzYwNTdfSVNSX0NvZFJlcElSUSkKKwkJaWYgKGFzdGF0ICYgWlIzNjA1N19JU1JfQ29kUmVwSVJRKSB7CisJCQl6ci0+aW50cl9jb3VudGVyX0NvZFJlcElSUSsrOworCQkJSURFQlVHKHByaW50aworCQkJICAgICAgIChLRVJOX0RFQlVHICIlczogWlIzNjA1N19JU1JfQ29kUmVwSVJRXG4iLAorCQkJCVpSX0RFVk5BTUUoenIpKSk7CisJCQlidGFuZCh+WlIzNjA1N19JQ1JfQ29kUmVwSVJRLCBaUjM2MDU3X0lDUik7CisJCX0KKyNlbmRpZgkJCQkvKiAoSVJRX01BU0sgJiBaUjM2MDU3X0lTUl9Db2RSZXBJUlEpICovCisKKyNpZiAoSVJRX01BU0sgJiBaUjM2MDU3X0lTUl9KUEVHUmVwSVJRKQorCQlpZiAoYXN0YXQgJiBaUjM2MDU3X0lTUl9KUEVHUmVwSVJRKSB7CisKKwkJCWlmICh6ci0+Y29kZWNfbW9kZSA9PSBCVVpfTU9ERV9NT1RJT05fREVDT01QUkVTUyB8fAorCQkJICAgIHpyLT5jb2RlY19tb2RlID09IEJVWl9NT0RFX01PVElPTl9DT01QUkVTUykgeworCQkJCWlmICh6cjM2MDY3X2RlYnVnID4gMSAmJgorCQkJCSAgICAoIXpyLT5mcmFtZV9udW0gfHwgenItPkpQRUdfZXJyb3IpKSB7CisJCQkJCXByaW50ayhLRVJOX0lORk8KKwkJCQkJICAgICAgICIlczogZmlyc3QgZnJhbWUgcmVhZHk6IHN0YXRlPTB4JTA4eCBvZGRfZXZlbj0lZCBmaWVsZF9wZXJfYnVmZj0lZCBkZWxheT0lZFxuIiwKKwkJCQkJICAgICAgIFpSX0RFVk5BTUUoenIpLCBzdGF0LAorCQkJCQkgICAgICAgenItPmpwZ19zZXR0aW5ncy5vZGRfZXZlbiwKKwkJCQkJICAgICAgIHpyLT5qcGdfc2V0dGluZ3MuCisJCQkJCSAgICAgICBmaWVsZF9wZXJfYnVmZiwKKwkJCQkJICAgICAgIHpyLT5KUEVHX21pc3NlZCk7CisJCQkJCXsKKwkJCQkJCWNoYXIgc2NbXSA9ICIwMDAwIjsKKwkJCQkJCWNoYXIgc3ZbNV07CisJCQkJCQlpbnQgaTsKKwkJCQkJCXN0cmNweShzdiwgc2MpOworCQkJCQkJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgeworCQkJCQkJCWlmIChsZTMyX3RvX2NwdSh6ci0+c3RhdF9jb21baV0pICYgMSkKKwkJCQkJCQkJc3ZbaV0gPSAnMSc7CisJCQkJCQl9CisJCQkJCQlzdls0XSA9IDA7CisJCQkJCQlwcmludGsoS0VSTl9JTkZPCisJCQkJCQkgICAgICAgIiVzOiBzdGF0X2NvbT0lcyBxdWV1ZV9zdGF0ZT0lbGQvJWxkLyVsZC8lbGRcbiIsCisJCQkJCQkgICAgICAgWlJfREVWTkFNRSh6ciksIHN2LAorCQkJCQkJICAgICAgIHpyLT5qcGdfcXVlX3RhaWwsCisJCQkJCQkgICAgICAgenItPmpwZ19kbWFfdGFpbCwKKwkJCQkJCSAgICAgICB6ci0+anBnX2RtYV9oZWFkLAorCQkJCQkJICAgICAgIHpyLT5qcGdfcXVlX2hlYWQpOworCQkJCQl9CisJCQkJfSBlbHNlIHsKKwkJCQkJaWYgKHpyLT5KUEVHX21pc3NlZCA+IHpyLT5KUEVHX21heF9taXNzZWQpCS8vIEdldCBzdGF0aXN0aWNzCisJCQkJCQl6ci0+SlBFR19tYXhfbWlzc2VkID0KKwkJCQkJCSAgICB6ci0+SlBFR19taXNzZWQ7CisJCQkJCWlmICh6ci0+SlBFR19taXNzZWQgPAorCQkJCQkgICAgenItPkpQRUdfbWluX21pc3NlZCkKKwkJCQkJCXpyLT5KUEVHX21pbl9taXNzZWQgPQorCQkJCQkJICAgIHpyLT5KUEVHX21pc3NlZDsKKwkJCQl9CisKKwkJCQlpZiAoenIzNjA2N19kZWJ1ZyA+IDIgJiYgenItPmZyYW1lX251bSA8IDYpIHsKKwkJCQkJaW50IGk7CisJCQkJCXByaW50aygiJXM6IHNlcT0lbGQgc3RhdF9jb206IiwKKwkJCQkJICAgICAgIFpSX0RFVk5BTUUoenIpLCB6ci0+anBnX3NlcV9udW0pOworCQkJCQlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7CisJCQkJCQlwcmludGsoIiAlMDh4IiwKKwkJCQkJCSAgICAgICBsZTMyX3RvX2NwdSh6ci0+c3RhdF9jb21baV0pKTsKKwkJCQkJfQorCQkJCQlwcmludGsoIlxuIik7CisJCQkJfQorCQkJCXpyLT5mcmFtZV9udW0rKzsKKwkJCQl6ci0+SlBFR19taXNzZWQgPSAwOworCQkJCXpyLT5KUEVHX2Vycm9yID0gMDsKKwkJCQl6b3Jhbl9yZWFwX3N0YXRfY29tKHpyKTsKKwkJCQl6b3Jhbl9mZWVkX3N0YXRfY29tKHpyKTsKKwkJCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJnpyLT5qcGdfY2FwcSk7CisJCQl9IC8qZWxzZSB7CisJCQkgICAgICBkcHJpbnRrKDEsCisJCQkJCUtFUk5fRVJSCisJCQkJCSIlczogSlBFRyBpbnRlcnJ1cHQgd2hpbGUgbm90IGluIG1vdGlvbiAoZGUpY29tcHJlc3MgbW9kZSFcbiIsCisJCQkJCVpSX0RFVk5BTUUoenIpKTsKKwkJCX0qLworCQl9CisjZW5kaWYJCQkJLyogKElSUV9NQVNLICYgWlIzNjA1N19JU1JfSlBFR1JlcElSUSkgKi8KKworCQkvKiBEQVRFUlIsIHRvbyBtYW55IGZpZWxkcyBtaXNzZWQsIGVycm9yIHByb2Nlc3NpbmcgKi8KKwkJaWYgKChhc3RhdCAmIHpyLT5jYXJkLmpwZWdfaW50KSB8fAorCQkgICAgenItPkpQRUdfbWlzc2VkID4gMjUgfHwKKwkJICAgIHpyLT5KUEVHX2Vycm9yID09IDEJfHwKKwkJICAgICgoenItPmNvZGVjX21vZGUgPT0gQlVaX01PREVfTU9USU9OX0RFQ09NUFJFU1MpICYmCisJCSAgICAgKHpyLT5mcmFtZV9udW0gJiAoenItPkpQRUdfbWlzc2VkID4KKwkJCQkgICAgICAgenItPmpwZ19zZXR0aW5ncy5maWVsZF9wZXJfYnVmZikpKSkgeworCQkJZXJyb3JfaGFuZGxlcih6ciwgYXN0YXQsIHN0YXQpOworCQl9CisKKwkJY291bnQrKzsKKwkJaWYgKGNvdW50ID4gMTApIHsKKwkJCWRwcmludGsoMiwgS0VSTl9XQVJOSU5HICIlczogaXJxIGxvb3AgJWRcbiIsCisJCQkJWlJfREVWTkFNRSh6ciksIGNvdW50KTsKKwkJCWlmIChjb3VudCA+IDIwKSB7CisJCQkJYnRhbmQoflpSMzYwNTdfSUNSX0ludFBpbkVuLCBaUjM2MDU3X0lDUik7CisJCQkJZHByaW50aygyLAorCQkJCQlLRVJOX0VSUgorCQkJCQkiJXM6IElSUSBsb2NrdXAsIGNsZWFyZWQgaW50IG1hc2tcbiIsCisJCQkJCVpSX0RFVk5BTUUoenIpKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCQl6ci0+bGFzdF9pc3IgPSBzdGF0OworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ6ci0+c3BpbmxvY2ssIGZsYWdzKTsKKworCXJldHVybiBJUlFfSEFORExFRDsKK30KKwordm9pZAorem9yYW5fc2V0X3BjaV9tYXN0ZXIgKHN0cnVjdCB6b3JhbiAqenIsCisJCSAgICAgIGludCAgICAgICAgICAgc2V0X21hc3RlcikKK3sKKwlpZiAoc2V0X21hc3RlcikgeworCQlwY2lfc2V0X21hc3Rlcih6ci0+cGNpX2Rldik7CisJfSBlbHNlIHsKKwkJdTE2IGNvbW1hbmQ7CisKKwkJcGNpX3JlYWRfY29uZmlnX3dvcmQoenItPnBjaV9kZXYsIFBDSV9DT01NQU5ELCAmY29tbWFuZCk7CisJCWNvbW1hbmQgJj0gflBDSV9DT01NQU5EX01BU1RFUjsKKwkJcGNpX3dyaXRlX2NvbmZpZ193b3JkKHpyLT5wY2lfZGV2LCBQQ0lfQ09NTUFORCwgY29tbWFuZCk7CisJfQorfQorCit2b2lkCit6b3Jhbl9pbml0X2hhcmR3YXJlIChzdHJ1Y3Qgem9yYW4gKnpyKQoreworCWludCBqLCB6ZXJvID0gMDsKKworCS8qIEVuYWJsZSBidXMtbWFzdGVyaW5nICovCisJem9yYW5fc2V0X3BjaV9tYXN0ZXIoenIsIDEpOworCisJLyogSW5pdGlhbGl6ZSB0aGUgYm9hcmQgKi8KKwlpZiAoenItPmNhcmQuaW5pdCkgeworCQl6ci0+Y2FyZC5pbml0KHpyKTsKKwl9CisKKwlqID0genItPmNhcmQuaW5wdXRbenItPmlucHV0XS5tdXhzZWw7CisKKwlkZWNvZGVyX2NvbW1hbmQoenIsIDAsIE5VTEwpOworCWRlY29kZXJfY29tbWFuZCh6ciwgREVDT0RFUl9TRVRfTk9STSwgJnpyLT5ub3JtKTsKKwlkZWNvZGVyX2NvbW1hbmQoenIsIERFQ09ERVJfU0VUX0lOUFVULCAmaik7CisKKwllbmNvZGVyX2NvbW1hbmQoenIsIDAsIE5VTEwpOworCWVuY29kZXJfY29tbWFuZCh6ciwgRU5DT0RFUl9TRVRfTk9STSwgJnpyLT5ub3JtKTsKKwllbmNvZGVyX2NvbW1hbmQoenIsIEVOQ09ERVJfU0VUX0lOUFVULCAmemVybyk7CisKKwkvKiB0b2dnbGUgSlBFRyBjb2RlYyBzbGVlcCB0byBzeW5jIFBMTCAqLworCWpwZWdfY29kZWNfc2xlZXAoenIsIDEpOworCWpwZWdfY29kZWNfc2xlZXAoenIsIDApOworCisJLyogc2V0IGluZGl2aWR1YWwgaW50ZXJydXB0IGVuYWJsZXMgKHdpdGhvdXQgR0lSUTEpCisJICogYnV0IGRvbid0IGdsb2JhbCBlbmFibGUgdW50aWwgem9yYW5fb3BlbigpICovCisKKwkvL2J0d3JpdGUoSVJRX01BU0sgJiB+WlIzNjA1N19JU1JfR0lSUTEsIFpSMzYwNTdfSUNSKTsgIC8vIFNXCisJLy8gSXQgbG9va3MgbGlrZSB1c2luZyBvbmx5IEpQRUdSZXBJUlFFbiBpcyBub3QgYWx3YXlzIHJlbGlhYmxlLAorCS8vIG1heSBiZSB3aGVuIEpQRUcgY29kZWMgY3Jhc2hlcyBpdCB3b24ndCBnZW5lcmF0ZSBJUlE/IFNvLAorCSAvKkNQKi8JCQkvLyAgICAgICAgYnR3cml0ZShJUlFfTUFTSywgWlIzNjA1N19JQ1IpOyAvLyBFbmFibGUgVnN5bmMgaW50ZXJydXB0cyB0b28uIFNNICAgIFdIWSA/IExQCisJICAgIHpyMzYwNTdfaW5pdF92ZmUoenIpOworCisJenIzNjA1N19lbmFibGVfanBnKHpyLCBCVVpfTU9ERV9JRExFKTsKKworCWJ0d3JpdGUoSVJRX01BU0ssIFpSMzYwNTdfSVNSKTsJLy8gQ2xlYXJzIGludGVycnVwdHMKK30KKwordm9pZAorenIzNjA1N19yZXN0YXJ0IChzdHJ1Y3Qgem9yYW4gKnpyKQoreworCWJ0d3JpdGUoMCwgWlIzNjA1N19TUEdQUENSKTsKKwltZGVsYXkoMSk7CisJYnRvcihaUjM2MDU3X1NQR1BQQ1JfU29mdFJlc2V0LCBaUjM2MDU3X1NQR1BQQ1IpOworCW1kZWxheSgxKTsKKworCS8qIGFzc2VydCBQX1Jlc2V0ICovCisJYnR3cml0ZSgwLCBaUjM2MDU3X0pQQyk7CisJLyogc2V0IHVwIEdQSU8gZGlyZWN0aW9uIC0gYWxsIG91dHB1dCAqLworCWJ0d3JpdGUoWlIzNjA1N19TUEdQUENSX1NvZnRSZXNldCB8IDAsIFpSMzYwNTdfU1BHUFBDUik7CisKKwkvKiBzZXQgdXAgR1BJTyBwaW5zIGFuZCBndWVzdCBidXMgdGltaW5nICovCisJYnR3cml0ZSgoMHg4MSA8PCAyNCkgfCAweDg4ODgsIFpSMzYwNTdfR1BQR0NSMSk7Cit9CisKKy8qCisgKiBpbml0aWFsaXplIHZpZGVvIGZyb250IGVuZAorICovCisKK3N0YXRpYyB2b2lkCit6cjM2MDU3X2luaXRfdmZlIChzdHJ1Y3Qgem9yYW4gKnpyKQoreworCXUzMiByZWc7CisKKwlyZWcgPSBidHJlYWQoWlIzNjA1N19WRkVTUEZSKTsKKwlyZWcgfD0gWlIzNjA1N19WRkVTUEZSX0xpdHRsZUVuZGlhbjsKKwlyZWcgJj0gflpSMzYwNTdfVkZFU1BGUl9WQ0xLUG9sOworCXJlZyB8PSBaUjM2MDU3X1ZGRVNQRlJfRXh0Rmw7CisJcmVnIHw9IFpSMzYwNTdfVkZFU1BGUl9Ub3BGaWVsZDsKKwlidHdyaXRlKHJlZywgWlIzNjA1N19WRkVTUEZSKTsKKwlyZWcgPSBidHJlYWQoWlIzNjA1N19WRENSKTsKKwlpZiAocGNpX3BjaV9wcm9ibGVtcyAmIFBDSVBDSV9UUklUT04pCisJCS8vIHx8IHpyLT5yZXZpc2lvbiA8IDEpIC8vIFJldmlzaW9uIDEgaGFzIGFsc28gVHJpdG9uIHN1cHBvcnQKKwkJcmVnICY9IH5aUjM2MDU3X1ZEQ1JfVHJpdG9uOworCWVsc2UKKwkJcmVnIHw9IFpSMzYwNTdfVkRDUl9Ucml0b247CisJYnR3cml0ZShyZWcsIFpSMzYwNTdfVkRDUik7Cit9CisKKy8qCisgKiBJbnRlcmZhY2UgdG8gZGVjb2RlciBhbmQgZW5jb2RlciBjaGlwcyB1c2luZyBpMmMgYnVzCisgKi8KKworaW50CitkZWNvZGVyX2NvbW1hbmQgKHN0cnVjdCB6b3JhbiAqenIsCisJCSBpbnQgICAgICAgICAgIGNtZCwKKwkJIHZvaWQgICAgICAgICAqZGF0YSkKK3sKKwlpZiAoenItPmRlY29kZXIgPT0gTlVMTCkKKwkJcmV0dXJuIC1FSU87CisKKwlpZiAoenItPmNhcmQudHlwZSA9PSBMTUwzMyAmJgorCSAgICAoY21kID09IERFQ09ERVJfU0VUX05PUk0gfHwgY21kID09IERFQ09ERVJfU0VUX0lOUFVUKSkgeworCQlpbnQgcmVzOworCisJCS8vIEJ0ODE5IG5lZWRzIHRvIHJlc2V0IGl0cyBGSUZPIGJ1ZmZlciB1c2luZyAjRlJTVCBwaW4gYW5kCisJCS8vIExNTDMzIGNhcmQgdXNlcyBHUElPKDcpIGZvciB0aGF0LgorCQlHUElPKHpyLCA3LCAwKTsKKwkJcmVzID0genItPmRlY29kZXItPmRyaXZlci0+Y29tbWFuZCh6ci0+ZGVjb2RlciwgY21kLCBkYXRhKTsKKwkJLy8gUHVsbCAjRlJTVCBoaWdoLgorCQlHUElPKHpyLCA3LCAxKTsKKwkJcmV0dXJuIHJlczsKKwl9IGVsc2UKKwkJcmV0dXJuIHpyLT5kZWNvZGVyLT5kcml2ZXItPmNvbW1hbmQoenItPmRlY29kZXIsIGNtZCwKKwkJCQkJCSAgICBkYXRhKTsKK30KKworaW50CitlbmNvZGVyX2NvbW1hbmQgKHN0cnVjdCB6b3JhbiAqenIsCisJCSBpbnQgICAgICAgICAgIGNtZCwKKwkJIHZvaWQgICAgICAgICAqZGF0YSkKK3sKKwlpZiAoenItPmVuY29kZXIgPT0gTlVMTCkKKwkJcmV0dXJuIC0xOworCisJcmV0dXJuIHpyLT5lbmNvZGVyLT5kcml2ZXItPmNvbW1hbmQoenItPmVuY29kZXIsIGNtZCwgZGF0YSk7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3pvcmFuL3pvcmFuX2RldmljZS5oIGIvZHJpdmVycy9tZWRpYS92aWRlby96b3Jhbi96b3Jhbl9kZXZpY2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NGM2YzhlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby96b3Jhbi96b3Jhbl9kZXZpY2UuaApAQCAtMCwwICsxLDk3IEBACisvKgorICogWm9yYW4genIzNjA1Ny96cjM2MDY3IFBDSSBjb250cm9sbGVyIGRyaXZlciwgZm9yIHRoZQorICogUGlubmFjbGUvTWlybyBEQzEwL0RDMTArL0RDMzAvREMzMCssIElvbWVnYSBCdXosIExpbnV4CisgKiBNZWRpYSBMYWJzIExNTDMzL0xNTDMzUjEwLgorICoKKyAqIFRoaXMgcGFydCBoYW5kbGVzIGNhcmQtc3BlY2lmaWMgZGF0YSBhbmQgZGV0ZWN0aW9uCisgKgorICogQ29weXJpZ2h0IChDKSAyMDAwIFNlcmd1ZWkgTWlyaWRvbm92IDxtaXJzZXZAY2ljZXNlLm14PgorICoKKyAqIEN1cnJlbnRseSBtYWludGFpbmVkIGJ5OgorICogICBSb25hbGQgQnVsdGplICAgIDxyYnVsdGplQHJvbmFsZC5iaXRmcmVhay5uZXQ+CisgKiAgIExhdXJlbnQgUGluY2hhcnQgPGxhdXJlbnQucGluY2hhcnRAc2t5bmV0LmJlPgorICogICBNYWlsaW5nbGlzdCAgICAgIDxtanBlZy11c2Vyc0BsaXN0cy5zZi5uZXQ+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworI2lmbmRlZiBfX1pPUkFOX0RFVklDRV9IX18KKyNkZWZpbmUgX19aT1JBTl9ERVZJQ0VfSF9fCisKKy8qIGdlbmVyYWwgcHVycG9zZSBJL08gKi8KK2V4dGVybiB2b2lkIEdQSU8oc3RydWN0IHpvcmFuICp6ciwKKwkJIGludCBiaXQsCisJCSB1bnNpZ25lZCBpbnQgdmFsdWUpOworCisvKiBjb2RlYyAob3IgYWN0dWFsbHk6IGd1ZXN0IGJ1cykgYWNjZXNzICovCitleHRlcm4gaW50IHBvc3Rfb2ZmaWNlX3dhaXQoc3RydWN0IHpvcmFuICp6cik7CitleHRlcm4gaW50IHBvc3Rfb2ZmaWNlX3dyaXRlKHN0cnVjdCB6b3JhbiAqenIsCisJCQkgICAgIHVuc2lnbmVkIGd1ZXN0LAorCQkJICAgICB1bnNpZ25lZCByZWcsCisJCQkgICAgIHVuc2lnbmVkIHZhbHVlKTsKK2V4dGVybiBpbnQgcG9zdF9vZmZpY2VfcmVhZChzdHJ1Y3Qgem9yYW4gKnpyLAorCQkJICAgIHVuc2lnbmVkIGd1ZXN0LAorCQkJICAgIHVuc2lnbmVkIHJlZyk7CisKK2V4dGVybiB2b2lkIGRldGVjdF9ndWVzdF9hY3Rpdml0eShzdHJ1Y3Qgem9yYW4gKnpyKTsKKworZXh0ZXJuIHZvaWQganBlZ19jb2RlY19zbGVlcChzdHJ1Y3Qgem9yYW4gKnpyLAorCQkJICAgICBpbnQgc2xlZXApOworZXh0ZXJuIGludCBqcGVnX2NvZGVjX3Jlc2V0KHN0cnVjdCB6b3JhbiAqenIpOworCisvKiB6cjM2MHg3IGFjY2VzcyB0byByYXcgY2FwdHVyZSAqLworZXh0ZXJuIHZvaWQgenIzNjA1N19vdmVybGF5KHN0cnVjdCB6b3JhbiAqenIsCisJCQkgICAgaW50IG9uKTsKK2V4dGVybiB2b2lkIHdyaXRlX292ZXJsYXlfbWFzayhzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJCSAgICAgICBzdHJ1Y3QgdmlkZW9fY2xpcCAqdnAsCisJCQkgICAgICAgaW50IGNvdW50KTsKK2V4dGVybiB2b2lkIHpyMzYwNTdfc2V0X21lbWdyYWIoc3RydWN0IHpvcmFuICp6ciwKKwkJCQlpbnQgbW9kZSk7CitleHRlcm4gaW50IHdhaXRfZ3JhYl9wZW5kaW5nKHN0cnVjdCB6b3JhbiAqenIpOworCisvKiBpbnRlcnJ1cHRzICovCitleHRlcm4gdm9pZCBwcmludF9pbnRlcnJ1cHRzKHN0cnVjdCB6b3JhbiAqenIpOworZXh0ZXJuIHZvaWQgY2xlYXJfaW50ZXJydXB0X2NvdW50ZXJzKHN0cnVjdCB6b3JhbiAqenIpOworZXh0ZXJuIGlycXJldHVybl90IHpvcmFuX2lycShpbnQgaXJxLCB2b2lkICpkZXZfaWQpOworCisvKiBKUEVHIGNvZGVjIGFjY2VzcyAqLworZXh0ZXJuIHZvaWQganBlZ19zdGFydChzdHJ1Y3Qgem9yYW4gKnpyKTsKK2V4dGVybiB2b2lkIHpyMzYwNTdfZW5hYmxlX2pwZyhzdHJ1Y3Qgem9yYW4gKnpyLAorCQkJICAgICAgIGVudW0gem9yYW5fY29kZWNfbW9kZSBtb2RlKTsKK2V4dGVybiB2b2lkIHpvcmFuX2ZlZWRfc3RhdF9jb20oc3RydWN0IHpvcmFuICp6cik7CisKKy8qIGdlbmVyYWwgKi8KK2V4dGVybiB2b2lkIHpvcmFuX3NldF9wY2lfbWFzdGVyKHN0cnVjdCB6b3JhbiAqenIsCisJCQkJIGludCBzZXRfbWFzdGVyKTsKK2V4dGVybiB2b2lkIHpvcmFuX2luaXRfaGFyZHdhcmUoc3RydWN0IHpvcmFuICp6cik7CitleHRlcm4gdm9pZCB6cjM2MDU3X3Jlc3RhcnQoc3RydWN0IHpvcmFuICp6cik7CisKK2V4dGVybiBjb25zdCBzdHJ1Y3Qgem9yYW5fZm9ybWF0IHpvcmFuX2Zvcm1hdHNbXTsKKworZXh0ZXJuIGludCB2NGxfbmJ1ZnM7CitleHRlcm4gaW50IHY0bF9idWZzaXplOworZXh0ZXJuIGludCBqcGdfbmJ1ZnM7CitleHRlcm4gaW50IGpwZ19idWZzaXplOworZXh0ZXJuIGludCBwYXNzX3Rocm91Z2g7CisKKy8qIGkyYyAqLworZXh0ZXJuIGludCBkZWNvZGVyX2NvbW1hbmQoc3RydWN0IHpvcmFuICp6ciwKKwkJCSAgIGludCBjbWQsCisJCQkgICB2b2lkICpkYXRhKTsKK2V4dGVybiBpbnQgZW5jb2Rlcl9jb21tYW5kKHN0cnVjdCB6b3JhbiAqenIsCisJCQkgICBpbnQgY21kLAorCQkJICAgdm9pZCAqZGF0YSk7CisKKyNlbmRpZgkJCQkvKiBfX1pPUkFOX0RFVklDRV9IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vem9yYW4vem9yYW5fZHJpdmVyLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3pvcmFuL3pvcmFuX2RyaXZlci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRiMTFhYjkKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3pvcmFuL3pvcmFuX2RyaXZlci5jCkBAIC0wLDAgKzEsNDY0OCBAQAorLyoKKyAqIFpvcmFuIHpyMzYwNTcvenIzNjA2NyBQQ0kgY29udHJvbGxlciBkcml2ZXIsIGZvciB0aGUKKyAqIFBpbm5hY2xlL01pcm8gREMxMC9EQzEwKy9EQzMwL0RDMzArLCBJb21lZ2EgQnV6LCBMaW51eAorICogTWVkaWEgTGFicyBMTUwzMy9MTUwzM1IxMC4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgU2VyZ3VlaSBNaXJpZG9ub3YgPG1pcnNldkBjaWNlc2UubXg+CisgKgorICogQ2hhbmdlcyBmb3IgQlVaIGJ5IFdvbGZnYW5nIFNjaGVyciA8c2NoZXJyQG5ldDR5b3UubmV0PgorICoKKyAqIENoYW5nZXMgZm9yIERDMTAvREMzMCBieSBMYXVyZW50IFBpbmNoYXJ0IDxsYXVyZW50LnBpbmNoYXJ0QHNreW5ldC5iZT4KKyAqCisgKiBDaGFuZ2VzIGZvciBMTUwzM1IxMCBieSBNYXhpbSBZZXZ0eXVzaGtpbiA8bWF4QGxpbnV4bWVkaWFsYWJzLmNvbT4KKyAqCisgKiBDaGFuZ2VzIGZvciB2aWRlb2RldjIvdjRsMiBieSBSb25hbGQgQnVsdGplIDxyYnVsdGplQHJvbmFsZC5iaXRmcmVhay5uZXQ+CisgKgorICogQmFzZWQgb24KKyAqCisgKiBNaXJvIERDMTAgZHJpdmVyCisgKiBDb3B5cmlnaHQgKEMpIDE5OTkgV29sZmdhbmcgU2NoZXJyIDxzY2hlcnJAbmV0NHlvdS5uZXQ+CisgKgorICogSW9tZWdhIEJ1eiBkcml2ZXIgdmVyc2lvbiAxLjAKKyAqIENvcHlyaWdodCAoQykgMTk5OSBSYWluZXIgSm9oYW5uaSA8UmFpbmVyQEpvaGFubmkuZGU+CisgKgorICogYnV6LjAuMC4zCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggRGF2ZSBQZXJrcyA8ZHBlcmtzQGlibS5uZXQ+CisgKgorICogYnR0diAtIEJ0ODQ4IGZyYW1lIGdyYWJiZXIgZHJpdmVyCisgKiBDb3B5cmlnaHQgKEMpIDE5OTYsOTcsOTggUmFscGggIE1ldHpsZXIgKHJqa21AdGhwLnVuaS1rb2Vsbi5kZSkKKyAqICAgICAgICAgICAgICAgICAgICAgICAgJiBNYXJjdXMgTWV0emxlciAobW9jbUB0aHAudW5pLWtvZWxuLmRlKQorICoKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworCisjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CisjaW5jbHVkZSA8bGludXgvd2FpdC5oPgorCisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bGludXgvaTJjLWFsZ28tYml0Lmg+CisKKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2RlZmluZSAgICAgTUFQX05SKHgpICAgICAgIHZpcnRfdG9fcGFnZSh4KQorI2RlZmluZSAgICAgWk9SQU5fVklEX1RZUEUgICggXAorCQkJCVZJRF9UWVBFX0NBUFRVUkUgfCBcCisJCQkJVklEX1RZUEVfT1ZFUkxBWSB8IFwKKwkJCQlWSURfVFlQRV9DTElQUElORyB8IFwKKwkJCQlWSURfVFlQRV9GUkFNRVJBTSB8IFwKKwkJCQlWSURfVFlQRV9TQ0FMRVMgfCBcCisJCQkJVklEX1RZUEVfTUpQRUdfREVDT0RFUiB8IFwKKwkJCQlWSURfVFlQRV9NSlBFR19FTkNPREVSIFwKKwkJCSAgICAgKQorCisjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYuaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWNvbW1vbi5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItaW9jdGwuaD4KKyNpbmNsdWRlICJ2aWRlb2NvZGVjLmgiCisKKyNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CisKKyNpbmNsdWRlIDxsaW51eC92aWRlb19kZWNvZGVyLmg+CisjaW5jbHVkZSA8bGludXgvdmlkZW9fZW5jb2Rlci5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisjaW5jbHVkZSAiem9yYW4uaCIKKyNpbmNsdWRlICJ6b3Jhbl9kZXZpY2UuaCIKKyNpbmNsdWRlICJ6b3Jhbl9jYXJkLmgiCisKKwkvKiB3ZSBkZWNsYXJlIHNvbWUgY2FyZCB0eXBlIGRlZmluaXRpb25zIGhlcmUsIHRoZXkgbWVhbgorCSAqIHRoZSBzYW1lIGFzIHRoZSB2NGwxIFpPUkFOX1ZJRF9UWVBFIGFib3ZlLCBleGNlcHQgaXQncyB2NGwyICovCisjZGVmaW5lIFpPUkFOX1Y0TDJfVklEX0ZMQUdTICggXAorCQkJCVY0TDJfQ0FQX1NUUkVBTUlORyB8XAorCQkJCVY0TDJfQ0FQX1ZJREVPX0NBUFRVUkUgfFwKKwkJCQlWNEwyX0NBUF9WSURFT19PVVRQVVQgfFwKKwkJCQlWNEwyX0NBUF9WSURFT19PVkVSTEFZIFwKKwkJCSAgICAgICkKKworCisjaWYgZGVmaW5lZChDT05GSUdfVklERU9fVjRMMV9DT01QQVQpCisjZGVmaW5lIFpGTVQocGFsLCBmY2MsIGNzKSBcCisJLnBhbGV0dGUgPSAocGFsKSwgLmZvdXJjYyA9IChmY2MpLCAuY29sb3JzcGFjZSA9IChjcykKKyNlbHNlCisjZGVmaW5lIFpGTVQocGFsLCBmY2MsIGNzKSBcCisJLmZvdXJjYyA9IChmY2MpLCAuY29sb3JzcGFjZSA9IChjcykKKyNlbmRpZgorCitjb25zdCBzdHJ1Y3Qgem9yYW5fZm9ybWF0IHpvcmFuX2Zvcm1hdHNbXSA9IHsKKwl7CisJCS5uYW1lID0gIjE1LWJpdCBSR0IgTEUiLAorCQlaRk1UKFZJREVPX1BBTEVUVEVfUkdCNTU1LAorCQkgICAgIFY0TDJfUElYX0ZNVF9SR0I1NTUsIFY0TDJfQ09MT1JTUEFDRV9TUkdCKSwKKwkJLmRlcHRoID0gMTUsCisJCS5mbGFncyA9IFpPUkFOX0ZPUk1BVF9DQVBUVVJFIHwKKwkJCSBaT1JBTl9GT1JNQVRfT1ZFUkxBWSwKKwkJLnZmZXNwZnIgPSBaUjM2MDU3X1ZGRVNQRlJfUkdCNTU1fFpSMzYwNTdfVkZFU1BGUl9FcnJEaWZ8CisJCQkgICBaUjM2MDU3X1ZGRVNQRlJfTGl0dGxlRW5kaWFuLAorCX0sIHsKKwkJLm5hbWUgPSAiMTUtYml0IFJHQiBCRSIsCisJCVpGTVQoLTEsCisJCSAgICAgVjRMMl9QSVhfRk1UX1JHQjU1NVgsIFY0TDJfQ09MT1JTUEFDRV9TUkdCKSwKKwkJLmRlcHRoID0gMTUsCisJCS5mbGFncyA9IFpPUkFOX0ZPUk1BVF9DQVBUVVJFIHwKKwkJCSBaT1JBTl9GT1JNQVRfT1ZFUkxBWSwKKwkJLnZmZXNwZnIgPSBaUjM2MDU3X1ZGRVNQRlJfUkdCNTU1fFpSMzYwNTdfVkZFU1BGUl9FcnJEaWYsCisJfSwgeworCQkubmFtZSA9ICIxNi1iaXQgUkdCIExFIiwKKwkJWkZNVChWSURFT19QQUxFVFRFX1JHQjU2NSwKKwkJICAgICBWNEwyX1BJWF9GTVRfUkdCNTY1LCBWNEwyX0NPTE9SU1BBQ0VfU1JHQiksCisJCS5kZXB0aCA9IDE2LAorCQkuZmxhZ3MgPSBaT1JBTl9GT1JNQVRfQ0FQVFVSRSB8CisJCQkgWk9SQU5fRk9STUFUX09WRVJMQVksCisJCS52ZmVzcGZyID0gWlIzNjA1N19WRkVTUEZSX1JHQjU2NXxaUjM2MDU3X1ZGRVNQRlJfRXJyRGlmfAorCQkJICAgWlIzNjA1N19WRkVTUEZSX0xpdHRsZUVuZGlhbiwKKwl9LCB7CisJCS5uYW1lID0gIjE2LWJpdCBSR0IgQkUiLAorCQlaRk1UKC0xLAorCQkgICAgIFY0TDJfUElYX0ZNVF9SR0I1NjVYLCBWNEwyX0NPTE9SU1BBQ0VfU1JHQiksCisJCS5kZXB0aCA9IDE2LAorCQkuZmxhZ3MgPSBaT1JBTl9GT1JNQVRfQ0FQVFVSRSB8CisJCQkgWk9SQU5fRk9STUFUX09WRVJMQVksCisJCS52ZmVzcGZyID0gWlIzNjA1N19WRkVTUEZSX1JHQjU2NXxaUjM2MDU3X1ZGRVNQRlJfRXJyRGlmLAorCX0sIHsKKwkJLm5hbWUgPSAiMjQtYml0IFJHQiIsCisJCVpGTVQoVklERU9fUEFMRVRURV9SR0IyNCwKKwkJICAgICBWNEwyX1BJWF9GTVRfQkdSMjQsIFY0TDJfQ09MT1JTUEFDRV9TUkdCKSwKKwkJLmRlcHRoID0gMjQsCisJCS5mbGFncyA9IFpPUkFOX0ZPUk1BVF9DQVBUVVJFIHwKKwkJCSBaT1JBTl9GT1JNQVRfT1ZFUkxBWSwKKwkJLnZmZXNwZnIgPSBaUjM2MDU3X1ZGRVNQRlJfUkdCODg4fFpSMzYwNTdfVkZFU1BGUl9QYWNrMjQsCisJfSwgeworCQkubmFtZSA9ICIzMi1iaXQgUkdCIExFIiwKKwkJWkZNVChWSURFT19QQUxFVFRFX1JHQjMyLAorCQkgICAgIFY0TDJfUElYX0ZNVF9CR1IzMiwgVjRMMl9DT0xPUlNQQUNFX1NSR0IpLAorCQkuZGVwdGggPSAzMiwKKwkJLmZsYWdzID0gWk9SQU5fRk9STUFUX0NBUFRVUkUgfAorCQkJIFpPUkFOX0ZPUk1BVF9PVkVSTEFZLAorCQkudmZlc3BmciA9IFpSMzYwNTdfVkZFU1BGUl9SR0I4ODh8WlIzNjA1N19WRkVTUEZSX0xpdHRsZUVuZGlhbiwKKwl9LCB7CisJCS5uYW1lID0gIjMyLWJpdCBSR0IgQkUiLAorCQlaRk1UKC0xLAorCQkgICAgIFY0TDJfUElYX0ZNVF9SR0IzMiwgVjRMMl9DT0xPUlNQQUNFX1NSR0IpLAorCQkuZGVwdGggPSAzMiwKKwkJLmZsYWdzID0gWk9SQU5fRk9STUFUX0NBUFRVUkUgfAorCQkJIFpPUkFOX0ZPUk1BVF9PVkVSTEFZLAorCQkudmZlc3BmciA9IFpSMzYwNTdfVkZFU1BGUl9SR0I4ODgsCisJfSwgeworCQkubmFtZSA9ICI0OjI6MiwgcGFja2VkLCBZVVlWIiwKKwkJWkZNVChWSURFT19QQUxFVFRFX1lVVjQyMiwKKwkJICAgICBWNEwyX1BJWF9GTVRfWVVZViwgVjRMMl9DT0xPUlNQQUNFX1NNUFRFMTcwTSksCisJCS5kZXB0aCA9IDE2LAorCQkuZmxhZ3MgPSBaT1JBTl9GT1JNQVRfQ0FQVFVSRSB8CisJCQkgWk9SQU5fRk9STUFUX09WRVJMQVksCisJCS52ZmVzcGZyID0gWlIzNjA1N19WRkVTUEZSX1lVVjQyMiwKKwl9LCB7CisJCS5uYW1lID0gIjQ6MjoyLCBwYWNrZWQsIFVZVlkiLAorCQlaRk1UKFZJREVPX1BBTEVUVEVfVVlWWSwKKwkJICAgICBWNEwyX1BJWF9GTVRfVVlWWSwgVjRMMl9DT0xPUlNQQUNFX1NNUFRFMTcwTSksCisJCS5kZXB0aCA9IDE2LAorCQkuZmxhZ3MgPSBaT1JBTl9GT1JNQVRfQ0FQVFVSRSB8CisJCQkgWk9SQU5fRk9STUFUX09WRVJMQVksCisJCS52ZmVzcGZyID0gWlIzNjA1N19WRkVTUEZSX1lVVjQyMnxaUjM2MDU3X1ZGRVNQRlJfTGl0dGxlRW5kaWFuLAorCX0sIHsKKwkJLm5hbWUgPSAiSGFyZHdhcmUtZW5jb2RlZCBNb3Rpb24tSlBFRyIsCisJCVpGTVQoLTEsCisJCSAgICAgVjRMMl9QSVhfRk1UX01KUEVHLCBWNEwyX0NPTE9SU1BBQ0VfU01QVEUxNzBNKSwKKwkJLmRlcHRoID0gMCwKKwkJLmZsYWdzID0gWk9SQU5fRk9STUFUX0NBUFRVUkUgfAorCQkJIFpPUkFOX0ZPUk1BVF9QTEFZQkFDSyB8CisJCQkgWk9SQU5fRk9STUFUX0NPTVBSRVNTRUQsCisJfQorfTsKKyNkZWZpbmUgTlVNX0ZPUk1BVFMgQVJSQVlfU0laRSh6b3Jhbl9mb3JtYXRzKQorCisvLyBSSjogVGVzdCBvbmx5IC0gd2FudCB0byB0ZXN0IEJVWl9VU0VfSElNRU0gZXZlbiB3aGVuIENPTkZJR19CSUdQSFlTX0FSRUEgaXMgZGVmaW5lZAorCisKK3N0YXRpYyBpbnQgbG9ja19ub3JtOwkvKiAwID0gZGVmYXVsdCAxID0gRG9uJ3QgY2hhbmdlIFRWIHN0YW5kYXJkIChub3JtKSAqLworbW9kdWxlX3BhcmFtKGxvY2tfbm9ybSwgaW50LCAwNjQ0KTsKK01PRFVMRV9QQVJNX0RFU0MobG9ja19ub3JtLCAiUHJldmVudCBub3JtIGNoYW5nZXMgKDEgPSBpZ25vcmUsID4xID0gZmFpbCkiKTsKKworCS8qIHNtYWxsIGhlbHBlciBmdW5jdGlvbiBmb3IgY2FsY3VsYXRpbmcgYnVmZmVyc2l6ZXMgZm9yIHY0bDIKKwkgKiB3ZSBjYWxjdWxhdGUgdGhlIG5lYXJlc3QgaGlnaGVyIHBvd2VyLW9mLXR3bywgd2hpY2gKKwkgKiB3aWxsIGJlIHRoZSByZWNvbW1lbmRlZCBidWZmZXJzaXplICovCitzdGF0aWMgX191MzIKK3pvcmFuX3Y0bDJfY2FsY19idWZzaXplIChzdHJ1Y3Qgem9yYW5fanBnX3NldHRpbmdzICpzZXR0aW5ncykKK3sKKwlfX3U4IGRpdiA9IHNldHRpbmdzLT5WZXJEY20gKiBzZXR0aW5ncy0+SG9yRGNtICogc2V0dGluZ3MtPlRtcERjbTsKKwlfX3UzMiBudW0gPSAoMTAyNCAqIDUxMikgLyAoZGl2KTsKKwlfX3UzMiByZXN1bHQgPSAyOworCisJbnVtLS07CisJd2hpbGUgKG51bSkgeworCQludW0gPj49IDE7CisJCXJlc3VsdCA8PD0gMTsKKwl9CisKKwlpZiAocmVzdWx0ID4ganBnX2J1ZnNpemUpCisJCXJldHVybiBqcGdfYnVmc2l6ZTsKKwlpZiAocmVzdWx0IDwgODE5MikKKwkJcmV0dXJuIDgxOTI7CisJcmV0dXJuIHJlc3VsdDsKK30KKworLyogZm9yd2FyZCByZWZlcmVuY2VzICovCitzdGF0aWMgdm9pZCB2NGxfZmJ1ZmZlcl9mcmVlKHN0cnVjdCBmaWxlICpmaWxlKTsKK3N0YXRpYyB2b2lkIGpwZ19mYnVmZmVyX2ZyZWUoc3RydWN0IGZpbGUgKmZpbGUpOworCisvKgorICogICBBbGxvY2F0ZSB0aGUgVjRMIGdyYWIgYnVmZmVycworICoKKyAqICAgVGhlc2UgaGF2ZSB0byBiZSBweXNpY2FsbHkgY29udGlndW91cy4KKyAqICAgSWYgdjRsX2J1ZnNpemUgPD0gTUFYX0tNQUxMT0NfTUVNIHdlIHVzZSBrbWFsbG9jCisgKiAgIGVsc2Ugd2UgdHJ5IHRvIGFsbG9jYXRlIHRoZW0gd2l0aCBiaWdwaHlzYXJlYV9hbGxvY19wYWdlcworICogICBpZiB0aGUgYmlncGh5c2FyZWEgcGF0Y2ggaXMgcHJlc2VudCBpbiB0aGUga2VybmVsLAorICogICBlbHNlIHdlIHRyeSB0byB1c2UgaGlnaCBtZW1vcnkgKGlmIHRoZSB1c2VyIGhhcyBib290ZXQKKyAqICAgTGludXggd2l0aCB0aGUgbmVjZXNzYXJ5IG1lbW9yeSBsZWZ0IG92ZXIpLgorICovCisKK3N0YXRpYyB1bnNpZ25lZCBsb25nCitnZXRfaGlnaF9tZW0gKHVuc2lnbmVkIGxvbmcgc2l6ZSkKK3sKKy8qCisgKiBDaGVjayBpZiB0aGVyZSBpcyB1c2FibGUgbWVtb3J5IGF0IHRoZSBlbmQgb2YgTGludXggbWVtb3J5CisgKiBvZiBhdCBsZWFzdCBzaXplLiBSZXR1cm4gdGhlIHBoeXNpY2FsIGFkZHJlc3Mgb2YgdGhpcyBtZW1vcnksCisgKiByZXR1cm4gMCBvbiBmYWlsdXJlLgorICoKKyAqIFRoZSBpZGVhIGlzIGZyb20gQWxleGFuZHJvIFJ1YmluaSdzIGJvb2sgIkxpbnV4IGRldmljZSBkcml2ZXJzIi4KKyAqIFRoZSBkcml2ZXIgZnJvbSBoaW0gd2hpY2ggaXMgZG93bmxvYWRhYmxlIGZyb20gTydSZWlsbHkncworICogd2ViIHNpdGUgbWlzc2VzIHRoZSAidmlydF90b19waHlzKGhpZ2hfbWVtb3J5KSIgcGFydAorICogKGFuZCB0aGVyZWZvcmUgZG9lc24ndCB3b3JrIGF0IGFsbCAtIGF0IGxlYXN0IHdpdGggMi4yLngga2VybmVscykuCisgKgorICogSXQgc2hvdWxkIGJlIHVubmVjZXNzYXJ5IHRvIG1lbnRpb24gdGhhdCBUSElTIElTIERBTkdFUk9VUywKKyAqIGlmIG1vcmUgdGhhbiBvbmUgZHJpdmVyIGF0IGEgdGltZSBoYXMgdGhlIGlkZWEgdG8gdXNlIHRoaXMgbWVtb3J5ISEhIQorICovCisKKwl2b2xhdGlsZSB1bnNpZ25lZCBjaGFyIF9faW9tZW0gKm1lbTsKKwl1bnNpZ25lZCBjaGFyIGM7CisJdW5zaWduZWQgbG9uZyBoaV9tZW1fcGg7CisJdW5zaWduZWQgbG9uZyBpOworCisJLyogTWFwIHRoZSBoaWdoIG1lbW9yeSB0byB1c2VyIHNwYWNlICovCisKKwloaV9tZW1fcGggPSB2aXJ0X3RvX3BoeXMoaGlnaF9tZW1vcnkpOworCisJbWVtID0gaW9yZW1hcChoaV9tZW1fcGgsIHNpemUpOworCWlmICghbWVtKSB7CisJCWRwcmludGsoMSwKKwkJCUtFUk5fRVJSICIlczogZ2V0X2hpZ2hfbWVtKCkgLSBpb3JlbWFwIGZhaWxlZFxuIiwKKwkJCVpPUkFOX05BTUUpOworCQlyZXR1cm4gMDsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7CisJCS8qIENoZWNrIGlmIGl0IGlzIG1lbW9yeSAqLworCQljID0gaSAmIDB4ZmY7CisJCXdyaXRlYihjLCBtZW0gKyBpKTsKKwkJaWYgKHJlYWRiKG1lbSArIGkpICE9IGMpCisJCQlicmVhazsKKwkJYyA9IDI1NSAtIGM7CisJCXdyaXRlYihjLCBtZW0gKyBpKTsKKwkJaWYgKHJlYWRiKG1lbSArIGkpICE9IGMpCisJCQlicmVhazsKKwkJd3JpdGViKDAsIG1lbSArIGkpOwkvKiB6ZXJvIG91dCBtZW1vcnkgKi8KKworCQkvKiBnaXZlIHRoZSBrZXJuZWwgYWlyIHRvIGJyZWF0aCAqLworCQlpZiAoKGkgJiAweDNmZmZmKSA9PSAweDNmZmZmKQorCQkJc2NoZWR1bGUoKTsKKwl9CisKKwlpb3VubWFwKG1lbSk7CisKKwlpZiAoaSAhPSBzaXplKSB7CisJCWRwcmludGsoMSwKKwkJCUtFUk5fRVJSCisJCQkiJXM6IGdldF9oaWdoX21lbSgpIC0gcmVxdWVzdGVkICVsdSwgYXZhaWwgJWx1XG4iLAorCQkJWk9SQU5fTkFNRSwgc2l6ZSwgaSk7CisJCXJldHVybiAwOworCX0KKworCXJldHVybiBoaV9tZW1fcGg7Cit9CisKK3N0YXRpYyBpbnQKK3Y0bF9mYnVmZmVyX2FsbG9jIChzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlzdHJ1Y3Qgem9yYW5fZmggKmZoID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCB6b3JhbiAqenIgPSBmaC0+enI7CisJaW50IGksIG9mZjsKKwl1bnNpZ25lZCBjaGFyICptZW07CisJdW5zaWduZWQgbG9uZyBwbWVtID0gMDsKKworCS8qIHdlIG1pZ2h0IGhhdmUgb2xkIGJ1ZmZlcnMgbHlpbmcgYXJvdW5kLi4uICovCisJaWYgKGZoLT52NGxfYnVmZmVycy5yZWFkeV90b19iZV9mcmVlZCkgeworCQl2NGxfZmJ1ZmZlcl9mcmVlKGZpbGUpOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBmaC0+djRsX2J1ZmZlcnMubnVtX2J1ZmZlcnM7IGkrKykgeworCQlpZiAoZmgtPnY0bF9idWZmZXJzLmJ1ZmZlcltpXS5mYnVmZmVyKQorCQkJZHByaW50aygyLAorCQkJCUtFUk5fV0FSTklORworCQkJCSIlczogdjRsX2ZidWZmZXJfYWxsb2MoKSAtIGJ1ZmZlciAlZCBhbGxyZWFkeSBhbGxvY2F0ZWQhP1xuIiwKKwkJCQlaUl9ERVZOQU1FKHpyKSwgaSk7CisKKwkJLy91ZGVsYXkoMjApOworCQlpZiAoZmgtPnY0bF9idWZmZXJzLmJ1ZmZlcl9zaXplIDw9IE1BWF9LTUFMTE9DX01FTSkgeworCQkJLyogVXNlIGttYWxsb2MgKi8KKworCQkJbWVtID0ga21hbGxvYyhmaC0+djRsX2J1ZmZlcnMuYnVmZmVyX3NpemUsIEdGUF9LRVJORUwpOworCQkJaWYgKCFtZW0pIHsKKwkJCQlkcHJpbnRrKDEsCisJCQkJCUtFUk5fRVJSCisJCQkJCSIlczogdjRsX2ZidWZmZXJfYWxsb2MoKSAtIGttYWxsb2MgZm9yIFY0TCBidWYgJWQgZmFpbGVkXG4iLAorCQkJCQlaUl9ERVZOQU1FKHpyKSwgaSk7CisJCQkJdjRsX2ZidWZmZXJfZnJlZShmaWxlKTsKKwkJCQlyZXR1cm4gLUVOT0JVRlM7CisJCQl9CisJCQlmaC0+djRsX2J1ZmZlcnMuYnVmZmVyW2ldLmZidWZmZXIgPSBtZW07CisJCQlmaC0+djRsX2J1ZmZlcnMuYnVmZmVyW2ldLmZidWZmZXJfcGh5cyA9CisJCQkgICAgdmlydF90b19waHlzKG1lbSk7CisJCQlmaC0+djRsX2J1ZmZlcnMuYnVmZmVyW2ldLmZidWZmZXJfYnVzID0KKwkJCSAgICB2aXJ0X3RvX2J1cyhtZW0pOworCQkJZm9yIChvZmYgPSAwOyBvZmYgPCBmaC0+djRsX2J1ZmZlcnMuYnVmZmVyX3NpemU7CisJCQkgICAgIG9mZiArPSBQQUdFX1NJWkUpCisJCQkJU2V0UGFnZVJlc2VydmVkKE1BUF9OUihtZW0gKyBvZmYpKTsKKwkJCWRwcmludGsoNCwKKwkJCQlLRVJOX0lORk8KKwkJCQkiJXM6IHY0bF9mYnVmZmVyX2FsbG9jKCkgLSBWNEwgZnJhbWUgJWQgbWVtIDB4JWx4IChidXM6IDB4JWx4KVxuIiwKKwkJCQlaUl9ERVZOQU1FKHpyKSwgaSwgKHVuc2lnbmVkIGxvbmcpIG1lbSwKKwkJCQl2aXJ0X3RvX2J1cyhtZW0pKTsKKwkJfSBlbHNlIHsKKworCQkJLyogVXNlIGhpZ2ggbWVtb3J5IHdoaWNoIGhhcyBiZWVuIGxlZnQgYXQgYm9vdCB0aW1lICovCisKKwkJCS8qIE9rLiwgT2suIHRoaXMgaXMgYW4gZXZpbCBoYWNrIC0gd2UgbWFrZQorCQkJICogdGhlIGFzc3VtcHRpb24gdGhhdCBwaHlzaWNhbCBhZGRyZXNzZXMgYXJlCisJCQkgKiB0aGUgc2FtZSBhcyBidXMgYWRkcmVzc2VzICh0cnVlIGF0IGxlYXN0CisJCQkgKiBmb3IgSW50ZWwgcHJvY2Vzc29ycykuIFRoZSB3aG9sZSBtZXRob2Qgb2YKKwkJCSAqIG9idGFpbmluZyBhbmQgdXNpbmcgdGhpcyBtZW1vcnkgaXMgbm90IHZlcnkKKwkJCSAqIG5pY2UgLSBidXQgSSBob3BlIGl0IHNhdmVzIHNvbWUgcG9vciB1c2VycworCQkJICogZnJvbSBrZXJuZWwgaGFja2luZywgd2hpY2ggbWlnaHQgaGF2ZSBldmVuCisJCQkgKiBtb3JlIGV2aWwgcmVzdWx0cyAqLworCisJCQlpZiAoaSA9PSAwKSB7CisJCQkJaW50IHNpemUgPQorCQkJCSAgICBmaC0+djRsX2J1ZmZlcnMubnVtX2J1ZmZlcnMgKgorCQkJCSAgICBmaC0+djRsX2J1ZmZlcnMuYnVmZmVyX3NpemU7CisKKwkJCQlwbWVtID0gZ2V0X2hpZ2hfbWVtKHNpemUpOworCQkJCWlmIChwbWVtID09IDApIHsKKwkJCQkJZHByaW50aygxLAorCQkJCQkJS0VSTl9FUlIKKwkJCQkJCSIlczogdjRsX2ZidWZmZXJfYWxsb2MoKSAtIGdldF9oaWdoX21lbSAoc2l6ZSA9ICVkIEtCKSBmb3IgVjRMIGJ1ZnMgZmFpbGVkXG4iLAorCQkJCQkJWlJfREVWTkFNRSh6ciksIHNpemUgPj4gMTApOworCQkJCQlyZXR1cm4gLUVOT0JVRlM7CisJCQkJfQorCQkJCWZoLT52NGxfYnVmZmVycy5idWZmZXJbMF0uZmJ1ZmZlciA9IE5VTEw7CisJCQkJZmgtPnY0bF9idWZmZXJzLmJ1ZmZlclswXS5mYnVmZmVyX3BoeXMgPSBwbWVtOworCQkJCWZoLT52NGxfYnVmZmVycy5idWZmZXJbMF0uZmJ1ZmZlcl9idXMgPSBwbWVtOworCQkJCWRwcmludGsoNCwKKwkJCQkJS0VSTl9JTkZPCisJCQkJCSIlczogdjRsX2ZidWZmZXJfYWxsb2MoKSAtIHVzaW5nICVkIEtCIGhpZ2ggbWVtb3J5XG4iLAorCQkJCQlaUl9ERVZOQU1FKHpyKSwgc2l6ZSA+PiAxMCk7CisJCQl9IGVsc2UgeworCQkJCWZoLT52NGxfYnVmZmVycy5idWZmZXJbaV0uZmJ1ZmZlciA9IE5VTEw7CisJCQkJZmgtPnY0bF9idWZmZXJzLmJ1ZmZlcltpXS5mYnVmZmVyX3BoeXMgPQorCQkJCSAgICBwbWVtICsgaSAqIGZoLT52NGxfYnVmZmVycy5idWZmZXJfc2l6ZTsKKwkJCQlmaC0+djRsX2J1ZmZlcnMuYnVmZmVyW2ldLmZidWZmZXJfYnVzID0KKwkJCQkgICAgcG1lbSArIGkgKiBmaC0+djRsX2J1ZmZlcnMuYnVmZmVyX3NpemU7CisJCQl9CisJCX0KKwl9CisKKwlmaC0+djRsX2J1ZmZlcnMuYWxsb2NhdGVkID0gMTsKKworCXJldHVybiAwOworfQorCisvKiBmcmVlIHRoZSBWNEwgZ3JhYiBidWZmZXJzICovCitzdGF0aWMgdm9pZAordjRsX2ZidWZmZXJfZnJlZSAoc3RydWN0IGZpbGUgKmZpbGUpCit7CisJc3RydWN0IHpvcmFuX2ZoICpmaCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3Qgem9yYW4gKnpyID0gZmgtPnpyOworCWludCBpLCBvZmY7CisJdW5zaWduZWQgY2hhciAqbWVtOworCisJZHByaW50ayg0LCBLRVJOX0lORk8gIiVzOiB2NGxfZmJ1ZmZlcl9mcmVlKClcbiIsIFpSX0RFVk5BTUUoenIpKTsKKworCWZvciAoaSA9IDA7IGkgPCBmaC0+djRsX2J1ZmZlcnMubnVtX2J1ZmZlcnM7IGkrKykgeworCQlpZiAoIWZoLT52NGxfYnVmZmVycy5idWZmZXJbaV0uZmJ1ZmZlcikKKwkJCWNvbnRpbnVlOworCisJCWlmIChmaC0+djRsX2J1ZmZlcnMuYnVmZmVyX3NpemUgPD0gTUFYX0tNQUxMT0NfTUVNKSB7CisJCQltZW0gPSBmaC0+djRsX2J1ZmZlcnMuYnVmZmVyW2ldLmZidWZmZXI7CisJCQlmb3IgKG9mZiA9IDA7IG9mZiA8IGZoLT52NGxfYnVmZmVycy5idWZmZXJfc2l6ZTsKKwkJCSAgICAgb2ZmICs9IFBBR0VfU0laRSkKKwkJCQlDbGVhclBhZ2VSZXNlcnZlZChNQVBfTlIobWVtICsgb2ZmKSk7CisJCQlrZnJlZSgodm9pZCAqKSBmaC0+djRsX2J1ZmZlcnMuYnVmZmVyW2ldLmZidWZmZXIpOworCQl9CisJCWZoLT52NGxfYnVmZmVycy5idWZmZXJbaV0uZmJ1ZmZlciA9IE5VTEw7CisJfQorCisJZmgtPnY0bF9idWZmZXJzLmFsbG9jYXRlZCA9IDA7CisJZmgtPnY0bF9idWZmZXJzLnJlYWR5X3RvX2JlX2ZyZWVkID0gMDsKK30KKworLyoKKyAqICAgQWxsb2NhdGUgdGhlIE1KUEVHIGdyYWIgYnVmZmVycy4KKyAqCisgKiAgIElmIHRoZSByZXF1ZXN0ZWQgYnVmZmVyIHNpemUgaXMgc21hbGxlciB0aGFuIE1BWF9LTUFMTE9DX01FTSwKKyAqICAga21hbGxvYyBpcyB1c2VkIHRvIHJlcXVlc3QgYSBwaHlzaWNhbGx5IGNvbnRpZ3VvdXMgYXJlYSwKKyAqICAgZWxzZSB3ZSBhbGxvY2F0ZSB0aGUgbWVtb3J5IGluIGZyYW1nZW50cyB3aXRoIGdldF96ZXJvZWRfcGFnZS4KKyAqCisgKiAgIElmIGEgTmF0b21hIGNoaXBzZXQgaXMgcHJlc2VudCBhbmQgdGhpcyBpcyBhIHJldmlzaW9uIDEgenIzNjA1NywKKyAqICAgZWFjaCBNSlBFRyBidWZmZXIgbmVlZHMgdG8gYmUgcGh5c2ljYWxseSBjb250aWd1b3VzLgorICogICAoUko6IFRoaXMgc3RhdGVtZW50IGlzIGZyb20gRGF2ZSBQZXJrcycgb3JpZ2luYWwgZHJpdmVyLAorICogICBJIGNvdWxkIG5ldmVyIGNoZWNrIGl0IGJlY2F1c2UgSSBoYXZlIGEgenIzNjA2NykKKyAqICAgVGhlIGRyaXZlciBjYXJlcyBhYm91dCB0aGlzIGJlY2F1c2UgaXQgcmVkdWNlcyB0aGUgYnVmZmVyCisgKiAgIHNpemUgdG8gTUFYX0tNQUxMT0NfTUVNIGluIHRoYXQgY2FzZSAod2hpY2ggZm9yY2VzIGNvbnRpZ3VvdXMgYWxsb2NhdGlvbikuCisgKgorICogICBSSjogVGhlIGNvbnRlbnRzIGdyYWIgYnVmZmVycyBuZWVkcyBuZXZlciBiZSBhY2Nlc3NlZCBpbiB0aGUgZHJpdmVyLgorICogICAgICAgVGhlcmVmb3JlIHRoZXJlIGlzIG5vIG5lZWQgdG8gYWxsb2NhdGUgdGhlbSB3aXRoIHZtYWxsb2MgaW4gb3JkZXIKKyAqICAgICAgIHRvIGdldCBhIGNvbnRpZ3VvdXMgdmlydHVhbCBtZW1vcnkgc3BhY2UuCisgKiAgICAgICBJIGRvbid0IHVuZGVyc3RhbmQgd2h5IG1hbnkgb3RoZXIgZHJpdmVycyBmaXJzdCBhbGxvY2F0ZSB0aGVtIHdpdGgKKyAqICAgICAgIHZtYWxsb2MgKHdoaWNoIHVzZXMgaW50ZXJuYWxseSBhbHNvIGdldF96ZXJvZWRfcGFnZSwgYnV0IGRlbGl2ZXJzIHlvdQorICogICAgICAgdmlydHVhbCBhZGRyZXNzZXMpIGFuZCB0aGVuIGFnYWluIGhhdmUgdG8gbWFrZSBhIGxvdCBvZiBlZmZvcnRzCisgKiAgICAgICB0byBnZXQgdGhlIHBoeXNpY2FsIGFkZHJlc3MuCisgKgorICogICBCZW4gQ2FwcGVyOgorICogICAgICAgT24gYmlnLWVuZGlhbiBhcmNoaXRlY3R1cmVzIChzdWNoIGFzIHBwYykgc29tZSBleHRyYSBzdGVwcworICogICAgICAgYXJlIG5lZWRlZC4gV2hlbiByZWFkaW5nIGFuZCB3cml0aW5nIHRvIHRoZSBzdGF0X2NvbSBhcnJheQorICogICAgICAgYW5kIGZyYWdtZW50IGJ1ZmZlcnMsIHRoZSBkZXZpY2UgZXhwZWN0cyB0byBzZWUgbGl0dGxlLQorICogICAgICAgZW5kaWFuIHZhbHVlcy4gVGhlIHVzZSBvZiBjcHVfdG9fbGUzMigpIGFuZCBsZTMyX3RvX2NwdSgpCisgKiAgICAgICBpbiB0aGlzIGZ1bmN0aW9uIChhbmQgb25lIG9yIHR3byBvdGhlcnMgaW4gem9yYW5fZGV2aWNlLmMpCisgKiAgICAgICBlbnN1cmUgdGhhdCB0aGVzZSB2YWx1ZXMgYXJlIGFsd2F5cyBzdG9yZWQgaW4gbGl0dGxlLWVuZGlhbgorICogICAgICAgZm9ybSwgcmVnYXJkbGVzcyBvZiBhcmNoaXRlY3R1cmUuIFRoZSB6cjM2MDU3IGRvZXMgVmVyeSBCYWQKKyAqICAgICAgIFRoaW5ncyBvbiBiaWcgZW5kaWFuIGFyY2hpdGVjdHVyZXMgaWYgdGhlIHN0YXRfY29tIGFycmF5CisgKiAgICAgICBhbmQgZnJhZ21lbnQgYnVmZmVycyBhcmUgbm90IGxpdHRsZS1lbmRpYW4uCisgKi8KKworc3RhdGljIGludAoranBnX2ZidWZmZXJfYWxsb2MgKHN0cnVjdCBmaWxlICpmaWxlKQoreworCXN0cnVjdCB6b3Jhbl9maCAqZmggPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHpvcmFuICp6ciA9IGZoLT56cjsKKwlpbnQgaSwgaiwgb2ZmOworCXVuc2lnbmVkIGxvbmcgbWVtOworCisJLyogd2UgbWlnaHQgaGF2ZSBvbGQgYnVmZmVycyBseWluZyBhcm91bmQgKi8KKwlpZiAoZmgtPmpwZ19idWZmZXJzLnJlYWR5X3RvX2JlX2ZyZWVkKSB7CisJCWpwZ19mYnVmZmVyX2ZyZWUoZmlsZSk7CisJfQorCisJZm9yIChpID0gMDsgaSA8IGZoLT5qcGdfYnVmZmVycy5udW1fYnVmZmVyczsgaSsrKSB7CisJCWlmIChmaC0+anBnX2J1ZmZlcnMuYnVmZmVyW2ldLmZyYWdfdGFiKQorCQkJZHByaW50aygyLAorCQkJCUtFUk5fV0FSTklORworCQkJCSIlczoganBnX2ZidWZmZXJfYWxsb2MoKSAtIGJ1ZmZlciAlZCBhbGxyZWFkeSBhbGxvY2F0ZWQhP1xuIiwKKwkJCQlaUl9ERVZOQU1FKHpyKSwgaSk7CisKKwkJLyogQWxsb2NhdGUgZnJhZ21lbnQgdGFibGUgZm9yIHRoaXMgYnVmZmVyICovCisKKwkJbWVtID0gZ2V0X3plcm9lZF9wYWdlKEdGUF9LRVJORUwpOworCQlpZiAobWVtID09IDApIHsKKwkJCWRwcmludGsoMSwKKwkJCQlLRVJOX0VSUgorCQkJCSIlczoganBnX2ZidWZmZXJfYWxsb2MoKSAtIGdldF96ZXJvZWRfcGFnZSAoZnJhZ190YWIpIGZhaWxlZCBmb3IgYnVmZmVyICVkXG4iLAorCQkJCVpSX0RFVk5BTUUoenIpLCBpKTsKKwkJCWpwZ19mYnVmZmVyX2ZyZWUoZmlsZSk7CisJCQlyZXR1cm4gLUVOT0JVRlM7CisJCX0KKwkJZmgtPmpwZ19idWZmZXJzLmJ1ZmZlcltpXS5mcmFnX3RhYiA9IChfX2xlMzIgKikgbWVtOworCQlmaC0+anBnX2J1ZmZlcnMuYnVmZmVyW2ldLmZyYWdfdGFiX2J1cyA9CisJCSAgICB2aXJ0X3RvX2J1cygodm9pZCAqKSBtZW0pOworCisJCS8vaWYgKGFsbG9jX2NvbnRpZykgeworCQlpZiAoZmgtPmpwZ19idWZmZXJzLm5lZWRfY29udGlndW91cykgeworCQkJbWVtID0KKwkJCSAgICAodW5zaWduZWQgbG9uZykga21hbGxvYyhmaC0+anBnX2J1ZmZlcnMuCisJCQkJCQkgICAgYnVmZmVyX3NpemUsCisJCQkJCQkgICAgR0ZQX0tFUk5FTCk7CisJCQlpZiAobWVtID09IDApIHsKKwkJCQlkcHJpbnRrKDEsCisJCQkJCUtFUk5fRVJSCisJCQkJCSIlczoganBnX2ZidWZmZXJfYWxsb2MoKSAtIGttYWxsb2MgZmFpbGVkIGZvciBidWZmZXIgJWRcbiIsCisJCQkJCVpSX0RFVk5BTUUoenIpLCBpKTsKKwkJCQlqcGdfZmJ1ZmZlcl9mcmVlKGZpbGUpOworCQkJCXJldHVybiAtRU5PQlVGUzsKKwkJCX0KKwkJCWZoLT5qcGdfYnVmZmVycy5idWZmZXJbaV0uZnJhZ190YWJbMF0gPQorCQkJICAgIGNwdV90b19sZTMyKHZpcnRfdG9fYnVzKCh2b2lkICopIG1lbSkpOworCQkJZmgtPmpwZ19idWZmZXJzLmJ1ZmZlcltpXS5mcmFnX3RhYlsxXSA9CisJCQkgICAgY3B1X3RvX2xlMzIoKChmaC0+anBnX2J1ZmZlcnMuYnVmZmVyX3NpemUgLyA0KSA8PCAxKSB8IDEpOworCQkJZm9yIChvZmYgPSAwOyBvZmYgPCBmaC0+anBnX2J1ZmZlcnMuYnVmZmVyX3NpemU7CisJCQkgICAgIG9mZiArPSBQQUdFX1NJWkUpCisJCQkJU2V0UGFnZVJlc2VydmVkKE1BUF9OUihtZW0gKyBvZmYpKTsKKwkJfSBlbHNlIHsKKwkJCS8qIGpwZ19idWZzaXplIGlzIGFsbHJlYXkgcGFnZSBhbGlnbmVkICovCisJCQlmb3IgKGogPSAwOworCQkJICAgICBqIDwgZmgtPmpwZ19idWZmZXJzLmJ1ZmZlcl9zaXplIC8gUEFHRV9TSVpFOworCQkJICAgICBqKyspIHsKKwkJCQltZW0gPSBnZXRfemVyb2VkX3BhZ2UoR0ZQX0tFUk5FTCk7CisJCQkJaWYgKG1lbSA9PSAwKSB7CisJCQkJCWRwcmludGsoMSwKKwkJCQkJCUtFUk5fRVJSCisJCQkJCQkiJXM6IGpwZ19mYnVmZmVyX2FsbG9jKCkgLSBnZXRfemVyb2VkX3BhZ2UgZmFpbGVkIGZvciBidWZmZXIgJWRcbiIsCisJCQkJCQlaUl9ERVZOQU1FKHpyKSwgaSk7CisJCQkJCWpwZ19mYnVmZmVyX2ZyZWUoZmlsZSk7CisJCQkJCXJldHVybiAtRU5PQlVGUzsKKwkJCQl9CisKKwkJCQlmaC0+anBnX2J1ZmZlcnMuYnVmZmVyW2ldLmZyYWdfdGFiWzIgKiBqXSA9CisJCQkJICAgIGNwdV90b19sZTMyKHZpcnRfdG9fYnVzKCh2b2lkICopIG1lbSkpOworCQkJCWZoLT5qcGdfYnVmZmVycy5idWZmZXJbaV0uZnJhZ190YWJbMiAqIGogKworCQkJCQkJCQkgICAxXSA9CisJCQkJICAgIGNwdV90b19sZTMyKChQQUdFX1NJWkUgLyA0KSA8PCAxKTsKKwkJCQlTZXRQYWdlUmVzZXJ2ZWQoTUFQX05SKG1lbSkpOworCQkJfQorCisJCQlmaC0+anBnX2J1ZmZlcnMuYnVmZmVyW2ldLmZyYWdfdGFiWzIgKiBqIC0gMV0gfD0gY3B1X3RvX2xlMzIoMSk7CisJCX0KKwl9CisKKwlkcHJpbnRrKDQsCisJCUtFUk5fREVCVUcgIiVzOiBqcGdfZmJ1ZmZlcl9hbGxvYygpIC0gJWQgS0IgYWxsb2NhdGVkXG4iLAorCQlaUl9ERVZOQU1FKHpyKSwKKwkJKGZoLT5qcGdfYnVmZmVycy5udW1fYnVmZmVycyAqCisJCSBmaC0+anBnX2J1ZmZlcnMuYnVmZmVyX3NpemUpID4+IDEwKTsKKworCWZoLT5qcGdfYnVmZmVycy5hbGxvY2F0ZWQgPSAxOworCisJcmV0dXJuIDA7Cit9CisKKy8qIGZyZWUgdGhlIE1KUEVHIGdyYWIgYnVmZmVycyAqLworc3RhdGljIHZvaWQKK2pwZ19mYnVmZmVyX2ZyZWUgKHN0cnVjdCBmaWxlICpmaWxlKQoreworCXN0cnVjdCB6b3Jhbl9maCAqZmggPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHpvcmFuICp6ciA9IGZoLT56cjsKKwlpbnQgaSwgaiwgb2ZmOworCXVuc2lnbmVkIGNoYXIgKm1lbTsKKworCWRwcmludGsoNCwgS0VSTl9ERUJVRyAiJXM6IGpwZ19mYnVmZmVyX2ZyZWUoKVxuIiwgWlJfREVWTkFNRSh6cikpOworCisJZm9yIChpID0gMDsgaSA8IGZoLT5qcGdfYnVmZmVycy5udW1fYnVmZmVyczsgaSsrKSB7CisJCWlmICghZmgtPmpwZ19idWZmZXJzLmJ1ZmZlcltpXS5mcmFnX3RhYikKKwkJCWNvbnRpbnVlOworCisJCS8vaWYgKGFsbG9jX2NvbnRpZykgeworCQlpZiAoZmgtPmpwZ19idWZmZXJzLm5lZWRfY29udGlndW91cykgeworCQkJaWYgKGZoLT5qcGdfYnVmZmVycy5idWZmZXJbaV0uZnJhZ190YWJbMF0pIHsKKwkJCQltZW0gPSAodW5zaWduZWQgY2hhciAqKSBidXNfdG9fdmlydChsZTMyX3RvX2NwdSgKKwkJCQkJZmgtPmpwZ19idWZmZXJzLmJ1ZmZlcltpXS5mcmFnX3RhYlswXSkpOworCQkJCWZvciAob2ZmID0gMDsKKwkJCQkgICAgIG9mZiA8IGZoLT5qcGdfYnVmZmVycy5idWZmZXJfc2l6ZTsKKwkJCQkgICAgIG9mZiArPSBQQUdFX1NJWkUpCisJCQkJCUNsZWFyUGFnZVJlc2VydmVkKE1BUF9OUgorCQkJCQkJCSAgKG1lbSArIG9mZikpOworCQkJCWtmcmVlKG1lbSk7CisJCQkJZmgtPmpwZ19idWZmZXJzLmJ1ZmZlcltpXS5mcmFnX3RhYlswXSA9IDA7CisJCQkJZmgtPmpwZ19idWZmZXJzLmJ1ZmZlcltpXS5mcmFnX3RhYlsxXSA9IDA7CisJCQl9CisJCX0gZWxzZSB7CisJCQlmb3IgKGogPSAwOworCQkJICAgICBqIDwgZmgtPmpwZ19idWZmZXJzLmJ1ZmZlcl9zaXplIC8gUEFHRV9TSVpFOworCQkJICAgICBqKyspIHsKKwkJCQlpZiAoIWZoLT5qcGdfYnVmZmVycy5idWZmZXJbaV0uCisJCQkJICAgIGZyYWdfdGFiWzIgKiBqXSkKKwkJCQkJYnJlYWs7CisJCQkJQ2xlYXJQYWdlUmVzZXJ2ZWQoTUFQX05SCisJCQkJCQkgIChidXNfdG9fdmlydAorCQkJCQkJICAgKGxlMzJfdG9fY3B1CisJCQkJCQkgICAgKGZoLT5qcGdfYnVmZmVycy4KKwkJCQkJCSAgICAgYnVmZmVyW2ldLmZyYWdfdGFiWzIgKgorCQkJCQkJCQkgICAgICAgal0pKSkpOworCQkJCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZykKKwkJCQkJICBidXNfdG9fdmlydAorCQkJCQkJICAobGUzMl90b19jcHUKKwkJCQkJCSAgIChmaC0+anBnX2J1ZmZlcnMuCisJCQkJCQkgICAgICBidWZmZXJbaV0uCisJCQkJCQkgICAgICBmcmFnX3RhYlsyICogal0pKSk7CisJCQkJZmgtPmpwZ19idWZmZXJzLmJ1ZmZlcltpXS5mcmFnX3RhYlsyICogal0gPQorCQkJCSAgICAwOworCQkJCWZoLT5qcGdfYnVmZmVycy5idWZmZXJbaV0uZnJhZ190YWJbMiAqIGogKworCQkJCQkJCQkgICAxXSA9IDA7CisJCQl9CisJCX0KKworCQlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpIGZoLT5qcGdfYnVmZmVycy5idWZmZXJbaV0uCisJCQkgIGZyYWdfdGFiKTsKKwkJZmgtPmpwZ19idWZmZXJzLmJ1ZmZlcltpXS5mcmFnX3RhYiA9IE5VTEw7CisJfQorCisJZmgtPmpwZ19idWZmZXJzLmFsbG9jYXRlZCA9IDA7CisJZmgtPmpwZ19idWZmZXJzLnJlYWR5X3RvX2JlX2ZyZWVkID0gMDsKK30KKworLyoKKyAqICAgVjRMIEJ1ZmZlciBncmFiYmluZworICovCisKK3N0YXRpYyBpbnQKK3pvcmFuX3Y0bF9zZXRfZm9ybWF0IChzdHJ1Y3QgZmlsZSAgICAgICAgICAgICAgICpmaWxlLAorCQkgICAgICBpbnQgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aCwKKwkJICAgICAgaW50ICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0LAorCQkgICAgICBjb25zdCBzdHJ1Y3Qgem9yYW5fZm9ybWF0ICpmb3JtYXQpCit7CisJc3RydWN0IHpvcmFuX2ZoICpmaCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3Qgem9yYW4gKnpyID0gZmgtPnpyOworCWludCBicHA7CisKKwkvKiBDaGVjayBzaXplIGFuZCBmb3JtYXQgb2YgdGhlIGdyYWIgd2FudGVkICovCisKKwlpZiAoaGVpZ2h0IDwgQlVaX01JTl9IRUlHSFQgfHwgd2lkdGggPCBCVVpfTUlOX1dJRFRIIHx8CisJICAgIGhlaWdodCA+IEJVWl9NQVhfSEVJR0hUIHx8IHdpZHRoID4gQlVaX01BWF9XSURUSCkgeworCQlkcHJpbnRrKDEsCisJCQlLRVJOX0VSUgorCQkJIiVzOiB2NGxfc2V0X2Zvcm1hdCgpIC0gd3JvbmcgZnJhbWUgc2l6ZSAoJWR4JWQpXG4iLAorCQkJWlJfREVWTkFNRSh6ciksIHdpZHRoLCBoZWlnaHQpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlicHAgPSAoZm9ybWF0LT5kZXB0aCArIDcpIC8gODsKKworCS8qIENoZWNrIGFnYWluc3QgYXZhaWxhYmxlIGJ1ZmZlciBzaXplICovCisJaWYgKGhlaWdodCAqIHdpZHRoICogYnBwID4gZmgtPnY0bF9idWZmZXJzLmJ1ZmZlcl9zaXplKSB7CisJCWRwcmludGsoMSwKKwkJCUtFUk5fRVJSCisJCQkiJXM6IHY0bF9zZXRfZm9ybWF0KCkgLSB2aWRlbyBidWZmZXIgc2l6ZSAoJWQga0IpIGlzIHRvbyBzbWFsbFxuIiwKKwkJCVpSX0RFVk5BTUUoenIpLCBmaC0+djRsX2J1ZmZlcnMuYnVmZmVyX3NpemUgPj4gMTApOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKiBUaGUgdmlkZW8gZnJvbnQgZW5kIG5lZWRzIDQtYnl0ZSBhbGluZ2VkIGxpbmUgc2l6ZXMgKi8KKworCWlmICgoYnBwID09IDIgJiYgKHdpZHRoICYgMSkpIHx8IChicHAgPT0gMyAmJiAod2lkdGggJiAzKSkpIHsKKwkJZHByaW50aygxLAorCQkJS0VSTl9FUlIKKwkJCSIlczogdjRsX3NldF9mb3JtYXQoKSAtIHdyb25nIGZyYW1lIGFsaW5nbWVudFxuIiwKKwkJCVpSX0RFVk5BTUUoenIpKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJZmgtPnY0bF9zZXR0aW5ncy53aWR0aCA9IHdpZHRoOworCWZoLT52NGxfc2V0dGluZ3MuaGVpZ2h0ID0gaGVpZ2h0OworCWZoLT52NGxfc2V0dGluZ3MuZm9ybWF0ID0gZm9ybWF0OworCWZoLT52NGxfc2V0dGluZ3MuYnl0ZXNwZXJsaW5lID0gYnBwICogZmgtPnY0bF9zZXR0aW5ncy53aWR0aDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50Cit6b3Jhbl92NGxfcXVldWVfZnJhbWUgKHN0cnVjdCBmaWxlICpmaWxlLAorCQkgICAgICAgaW50ICAgICAgICAgIG51bSkKK3sKKwlzdHJ1Y3Qgem9yYW5fZmggKmZoID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCB6b3JhbiAqenIgPSBmaC0+enI7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgcmVzID0gMDsKKworCWlmICghZmgtPnY0bF9idWZmZXJzLmFsbG9jYXRlZCkgeworCQlkcHJpbnRrKDEsCisJCQlLRVJOX0VSUgorCQkJIiVzOiB2NGxfcXVldWVfZnJhbWUoKSAtIGJ1ZmZlcnMgbm90IHlldCBhbGxvY2F0ZWRcbiIsCisJCQlaUl9ERVZOQU1FKHpyKSk7CisJCXJlcyA9IC1FTk9NRU07CisJfQorCisJLyogTm8gZ3JhYmJpbmcgb3V0c2lkZSB0aGUgYnVmZmVyIHJhbmdlISAqLworCWlmIChudW0gPj0gZmgtPnY0bF9idWZmZXJzLm51bV9idWZmZXJzIHx8IG51bSA8IDApIHsKKwkJZHByaW50aygxLAorCQkJS0VSTl9FUlIKKwkJCSIlczogdjRsX3F1ZXVlX2ZyYW1lKCkgLSBidWZmZXIgJWQgaXMgb3V0IG9mIHJhbmdlXG4iLAorCQkJWlJfREVWTkFNRSh6ciksIG51bSk7CisJCXJlcyA9IC1FSU5WQUw7CisJfQorCisJc3Bpbl9sb2NrX2lycXNhdmUoJnpyLT5zcGlubG9jaywgZmxhZ3MpOworCisJaWYgKGZoLT52NGxfYnVmZmVycy5hY3RpdmUgPT0gWk9SQU5fRlJFRSkgeworCQlpZiAoenItPnY0bF9idWZmZXJzLmFjdGl2ZSA9PSBaT1JBTl9GUkVFKSB7CisJCQl6ci0+djRsX2J1ZmZlcnMgPSBmaC0+djRsX2J1ZmZlcnM7CisJCQlmaC0+djRsX2J1ZmZlcnMuYWN0aXZlID0gWk9SQU5fQUNUSVZFOworCQl9IGVsc2UgeworCQkJZHByaW50aygxLAorCQkJCUtFUk5fRVJSCisJCQkJIiVzOiB2NGxfcXVldWVfZnJhbWUoKSAtIGFub3RoZXIgc2Vzc2lvbiBpcyBhbHJlYWR5IGNhcHR1cmluZ1xuIiwKKwkJCQlaUl9ERVZOQU1FKHpyKSk7CisJCQlyZXMgPSAtRUJVU1k7CisJCX0KKwl9CisKKwkvKiBtYWtlIHN1cmUgYSBncmFiIGlzbid0IGdvaW5nIG9uIGN1cnJlbnRseSB3aXRoIHRoaXMgYnVmZmVyICovCisJaWYgKCFyZXMpIHsKKwkJc3dpdGNoICh6ci0+djRsX2J1ZmZlcnMuYnVmZmVyW251bV0uc3RhdGUpIHsKKwkJZGVmYXVsdDoKKwkJY2FzZSBCVVpfU1RBVEVfUEVORDoKKwkJCWlmICh6ci0+djRsX2J1ZmZlcnMuYWN0aXZlID09IFpPUkFOX0ZSRUUpIHsKKwkJCQlmaC0+djRsX2J1ZmZlcnMuYWN0aXZlID0gWk9SQU5fRlJFRTsKKwkJCQl6ci0+djRsX2J1ZmZlcnMuYWxsb2NhdGVkID0gMDsKKwkJCX0KKwkJCXJlcyA9IC1FQlVTWTsJLyogd2hhdCBhcmUgeW91IGRvaW5nPyAqLworCQkJYnJlYWs7CisJCWNhc2UgQlVaX1NUQVRFX0RPTkU6CisJCQlkcHJpbnRrKDIsCisJCQkJS0VSTl9XQVJOSU5HCisJCQkJIiVzOiB2NGxfcXVldWVfZnJhbWUoKSAtIHF1ZXVlaW5nIGJ1ZmZlciAlZCBpbiBzdGF0ZSBET05FIT9cbiIsCisJCQkJWlJfREVWTkFNRSh6ciksIG51bSk7CisJCWNhc2UgQlVaX1NUQVRFX1VTRVI6CisJCQkvKiBzaW5jZSB0aGVyZSBpcyBhdCBsZWFzdCBvbmUgdW51c2VkIGJ1ZmZlciB0aGVyZSdzIHJvb20gZm9yIGF0IGxlYXN0CisJCQkgKiBvbmUgbW9yZSBwZW5kW10gZW50cnkgKi8KKwkJCXpyLT52NGxfcGVuZFt6ci0+djRsX3BlbmRfaGVhZCsrICYKKwkJCQkJVjRMX01BU0tfRlJBTUVdID0gbnVtOworCQkJenItPnY0bF9idWZmZXJzLmJ1ZmZlcltudW1dLnN0YXRlID0gQlVaX1NUQVRFX1BFTkQ7CisJCQl6ci0+djRsX2J1ZmZlcnMuYnVmZmVyW251bV0uYnMubGVuZ3RoID0KKwkJCSAgICBmaC0+djRsX3NldHRpbmdzLmJ5dGVzcGVybGluZSAqCisJCQkgICAgenItPnY0bF9zZXR0aW5ncy5oZWlnaHQ7CisJCQlmaC0+djRsX2J1ZmZlcnMuYnVmZmVyW251bV0gPQorCQkJICAgIHpyLT52NGxfYnVmZmVycy5idWZmZXJbbnVtXTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmenItPnNwaW5sb2NrLCBmbGFncyk7CisKKwlpZiAoIXJlcyAmJiB6ci0+djRsX2J1ZmZlcnMuYWN0aXZlID09IFpPUkFOX0ZSRUUpCisJCXpyLT52NGxfYnVmZmVycy5hY3RpdmUgPSBmaC0+djRsX2J1ZmZlcnMuYWN0aXZlOworCisJcmV0dXJuIHJlczsKK30KKworc3RhdGljIGludAordjRsX2dyYWIgKHN0cnVjdCBmaWxlICAgICAgICpmaWxlLAorCSAgc3RydWN0IHZpZGVvX21tYXAgKm1wKQoreworCXN0cnVjdCB6b3Jhbl9maCAqZmggPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHpvcmFuICp6ciA9IGZoLT56cjsKKwlpbnQgcmVzID0gMCwgaTsKKworCWZvciAoaSA9IDA7IGkgPCBOVU1fRk9STUFUUzsgaSsrKSB7CisJCWlmICh6b3Jhbl9mb3JtYXRzW2ldLnBhbGV0dGUgPT0gbXAtPmZvcm1hdCAmJgorCQkgICAgem9yYW5fZm9ybWF0c1tpXS5mbGFncyAmIFpPUkFOX0ZPUk1BVF9DQVBUVVJFICYmCisJCSAgICAhKHpvcmFuX2Zvcm1hdHNbaV0uZmxhZ3MgJiBaT1JBTl9GT1JNQVRfQ09NUFJFU1NFRCkpCisJCQlicmVhazsKKwl9CisJaWYgKGkgPT0gTlVNX0ZPUk1BVFMgfHwgem9yYW5fZm9ybWF0c1tpXS5kZXB0aCA9PSAwKSB7CisJCWRwcmludGsoMSwKKwkJCUtFUk5fRVJSCisJCQkiJXM6IHY0bF9ncmFiKCkgLSB3cm9uZyBieXRlcy1wZXItcGl4ZWwgZm9ybWF0XG4iLAorCQkJWlJfREVWTkFNRSh6cikpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKgorCSAqIFRvIG1pbmltaXplIHRoZSB0aW1lIHNwZW50IGluIHRoZSBJUlEgcm91dGluZSwgd2UgYXZvaWQgc2V0dGluZyB1cAorCSAqIHRoZSB2aWRlbyBmcm9udCBlbmQgdGhlcmUuCisJICogSWYgdGhpcyBncmFiIGhhcyBkaWZmZXJlbnQgcGFyYW1ldGVycyBmcm9tIGEgcnVubmluZyBzdHJlYW1pbmcgY2FwdHVyZQorCSAqIHdlIHN0b3AgdGhlIHN0cmVhbWluZyBjYXB0dXJlIGFuZCBzdGFydCBpdCBvdmVyIGFnYWluLgorCSAqLworCWlmICh6ci0+djRsX21lbWdyYWJfYWN0aXZlICYmCisJICAgICh6ci0+djRsX3NldHRpbmdzLndpZHRoICE9IG1wLT53aWR0aCB8fAorCSAgICAgenItPnY0bF9zZXR0aW5ncy5oZWlnaHQgIT0gbXAtPmhlaWdodCB8fAorCSAgICAgenItPnY0bF9zZXR0aW5ncy5mb3JtYXQtPnBhbGV0dGUgIT0gbXAtPmZvcm1hdCkpIHsKKwkJcmVzID0gd2FpdF9ncmFiX3BlbmRpbmcoenIpOworCQlpZiAocmVzKQorCQkJcmV0dXJuIHJlczsKKwl9CisJaWYgKChyZXMgPSB6b3Jhbl92NGxfc2V0X2Zvcm1hdChmaWxlLAorCQkJCQltcC0+d2lkdGgsCisJCQkJCW1wLT5oZWlnaHQsCisJCQkJCSZ6b3Jhbl9mb3JtYXRzW2ldKSkpCisJCXJldHVybiByZXM7CisJenItPnY0bF9zZXR0aW5ncyA9IGZoLT52NGxfc2V0dGluZ3M7CisKKwkvKiBxdWV1ZSB0aGUgZnJhbWUgaW4gdGhlIHBlbmRpbmcgcXVldWUgKi8KKwlpZiAoKHJlcyA9IHpvcmFuX3Y0bF9xdWV1ZV9mcmFtZShmaWxlLCBtcC0+ZnJhbWUpKSkgeworCQlmaC0+djRsX2J1ZmZlcnMuYWN0aXZlID0gWk9SQU5fRlJFRTsKKwkJcmV0dXJuIHJlczsKKwl9CisKKwkvKiBwdXQgdGhlIDM2MDU3IGludG8gZnJhbWUgZ3JhYmJpbmcgbW9kZSAqLworCWlmICghcmVzICYmICF6ci0+djRsX21lbWdyYWJfYWN0aXZlKQorCQl6cjM2MDU3X3NldF9tZW1ncmFiKHpyLCAxKTsKKworCS8vZHByaW50ayg0LCBLRVJOX0lORk8gIiVzOiBGcmFtZSBncmFiIDMuLi5cbiIsIFpSX0RFVk5BTUUoenIpKTsKKworCXJldHVybiByZXM7Cit9CisKKy8qCisgKiBTeW5jIG9uIGEgVjRMIGJ1ZmZlcgorICovCisKK3N0YXRpYyBpbnQKK3Y0bF9zeW5jIChzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkgIGludCAgICAgICAgICBmcmFtZSkKK3sKKwlzdHJ1Y3Qgem9yYW5fZmggKmZoID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCB6b3JhbiAqenIgPSBmaC0+enI7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWlmIChmaC0+djRsX2J1ZmZlcnMuYWN0aXZlID09IFpPUkFOX0ZSRUUpIHsKKwkJZHByaW50aygxLAorCQkJS0VSTl9FUlIKKwkJCSIlczogdjRsX3N5bmMoKSAtIG5vIGdyYWIgYWN0aXZlIGZvciB0aGlzIHNlc3Npb25cbiIsCisJCQlaUl9ERVZOQU1FKHpyKSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qIGNoZWNrIHBhc3NlZC1pbiBmcmFtZSBudW1iZXIgKi8KKwlpZiAoZnJhbWUgPj0gZmgtPnY0bF9idWZmZXJzLm51bV9idWZmZXJzIHx8IGZyYW1lIDwgMCkgeworCQlkcHJpbnRrKDEsCisJCQlLRVJOX0VSUiAiJXM6IHY0bF9zeW5jKCkgLSBmcmFtZSAlZCBpcyBpbnZhbGlkXG4iLAorCQkJWlJfREVWTkFNRSh6ciksIGZyYW1lKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogQ2hlY2sgaWYgaXMgYnVmZmVyIHdhcyBxdWV1ZWQgYXQgYWxsICovCisJaWYgKHpyLT52NGxfYnVmZmVycy5idWZmZXJbZnJhbWVdLnN0YXRlID09IEJVWl9TVEFURV9VU0VSKSB7CisJCWRwcmludGsoMSwKKwkJCUtFUk5fRVJSCisJCQkiJXM6IHY0bF9zeW5jKCkgLSBhdHRlbXB0IHRvIHN5bmMgb24gYSBidWZmZXIgd2hpY2ggd2FzIG5vdCBxdWV1ZWQ/XG4iLAorCQkJWlJfREVWTkFNRSh6cikpOworCQlyZXR1cm4gLUVQUk9UTzsKKwl9CisKKwkvKiB3YWl0IG9uIHRoaXMgYnVmZmVyIHRvIGdldCByZWFkeSAqLworCWlmICghd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQoenItPnY0bF9jYXBxLAorCQkJCSh6ci0+djRsX2J1ZmZlcnMuYnVmZmVyW2ZyYW1lXS5zdGF0ZSAhPSBCVVpfU1RBVEVfUEVORCksCisJCQkJMTAqSFopKQorCQlyZXR1cm4gLUVUSU1FOworCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkKKwkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKKworCS8qIGJ1ZmZlciBzaG91bGQgbm93IGJlIGluIEJVWl9TVEFURV9ET05FICovCisJaWYgKHpyLT52NGxfYnVmZmVycy5idWZmZXJbZnJhbWVdLnN0YXRlICE9IEJVWl9TVEFURV9ET05FKQorCQlkcHJpbnRrKDIsCisJCQlLRVJOX0VSUiAiJXM6IHY0bF9zeW5jKCkgLSBpbnRlcm5hbCBzdGF0ZSBlcnJvclxuIiwKKwkJCVpSX0RFVk5BTUUoenIpKTsKKworCXpyLT52NGxfYnVmZmVycy5idWZmZXJbZnJhbWVdLnN0YXRlID0gQlVaX1NUQVRFX1VTRVI7CisJZmgtPnY0bF9idWZmZXJzLmJ1ZmZlcltmcmFtZV0gPSB6ci0+djRsX2J1ZmZlcnMuYnVmZmVyW2ZyYW1lXTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZ6ci0+c3BpbmxvY2ssIGZsYWdzKTsKKworCS8qIENoZWNrIGlmIHN0cmVhbWluZyBjYXB0dXJlIGhhcyBmaW5pc2hlZCAqLworCWlmICh6ci0+djRsX3BlbmRfdGFpbCA9PSB6ci0+djRsX3BlbmRfaGVhZCkgeworCQl6cjM2MDU3X3NldF9tZW1ncmFiKHpyLCAwKTsKKwkJaWYgKHpyLT52NGxfYnVmZmVycy5hY3RpdmUgPT0gWk9SQU5fQUNUSVZFKSB7CisJCQlmaC0+djRsX2J1ZmZlcnMuYWN0aXZlID0genItPnY0bF9idWZmZXJzLmFjdGl2ZSA9CisJCQkgICAgWk9SQU5fRlJFRTsKKwkJCXpyLT52NGxfYnVmZmVycy5hbGxvY2F0ZWQgPSAwOworCQl9CisJfQorCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmenItPnNwaW5sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqICAgUXVldWUgYSBNSlBFRyBidWZmZXIgZm9yIGNhcHR1cmUvcGxheWJhY2sKKyAqLworCitzdGF0aWMgaW50Cit6b3Jhbl9qcGdfcXVldWVfZnJhbWUgKHN0cnVjdCBmaWxlICAgICAgICAgICpmaWxlLAorCQkgICAgICAgaW50ICAgICAgICAgICAgICAgICAgIG51bSwKKwkJICAgICAgIGVudW0gem9yYW5fY29kZWNfbW9kZSBtb2RlKQoreworCXN0cnVjdCB6b3Jhbl9maCAqZmggPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHpvcmFuICp6ciA9IGZoLT56cjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCByZXMgPSAwOworCisJLyogQ2hlY2sgaWYgYnVmZmVycyBhcmUgYWxsb2NhdGVkICovCisJaWYgKCFmaC0+anBnX2J1ZmZlcnMuYWxsb2NhdGVkKSB7CisJCWRwcmludGsoMSwKKwkJCUtFUk5fRVJSCisJCQkiJXM6IGpwZ19xdWV1ZV9mcmFtZSgpIC0gYnVmZmVycyBub3QgeWV0IGFsbG9jYXRlZFxuIiwKKwkJCVpSX0RFVk5BTUUoenIpKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJLyogTm8gZ3JhYmJpbmcgb3V0c2lkZSB0aGUgYnVmZmVyIHJhbmdlISAqLworCWlmIChudW0gPj0gZmgtPmpwZ19idWZmZXJzLm51bV9idWZmZXJzIHx8IG51bSA8IDApIHsKKwkJZHByaW50aygxLAorCQkJS0VSTl9FUlIKKwkJCSIlczoganBnX3F1ZXVlX2ZyYW1lKCkgLSBidWZmZXIgJWQgb3V0IG9mIHJhbmdlXG4iLAorCQkJWlJfREVWTkFNRSh6ciksIG51bSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qIHdoYXQgaXMgdGhlIGNvZGVjIG1vZGUgcmlnaHQgbm93PyAqLworCWlmICh6ci0+Y29kZWNfbW9kZSA9PSBCVVpfTU9ERV9JRExFKSB7CisJCXpyLT5qcGdfc2V0dGluZ3MgPSBmaC0+anBnX3NldHRpbmdzOworCX0gZWxzZSBpZiAoenItPmNvZGVjX21vZGUgIT0gbW9kZSkgeworCQkvKiB3cm9uZyBjb2RlYyBtb2RlIGFjdGl2ZSAtIGludmFsaWQgKi8KKwkJZHByaW50aygxLAorCQkJS0VSTl9FUlIKKwkJCSIlczoganBnX3F1ZXVlX2ZyYW1lKCkgLSBjb2RlYyBpbiB3cm9uZyBtb2RlXG4iLAorCQkJWlJfREVWTkFNRSh6cikpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAoZmgtPmpwZ19idWZmZXJzLmFjdGl2ZSA9PSBaT1JBTl9GUkVFKSB7CisJCWlmICh6ci0+anBnX2J1ZmZlcnMuYWN0aXZlID09IFpPUkFOX0ZSRUUpIHsKKwkJCXpyLT5qcGdfYnVmZmVycyA9IGZoLT5qcGdfYnVmZmVyczsKKwkJCWZoLT5qcGdfYnVmZmVycy5hY3RpdmUgPSBaT1JBTl9BQ1RJVkU7CisJCX0gZWxzZSB7CisJCQlkcHJpbnRrKDEsCisJCQkJS0VSTl9FUlIKKwkJCQkiJXM6IGpwZ19xdWV1ZV9mcmFtZSgpIC0gYW5vdGhlciBzZXNzaW9uIGlzIGFscmVhZHkgY2FwdHVyaW5nXG4iLAorCQkJCVpSX0RFVk5BTUUoenIpKTsKKwkJCXJlcyA9IC1FQlVTWTsKKwkJfQorCX0KKworCWlmICghcmVzICYmIHpyLT5jb2RlY19tb2RlID09IEJVWl9NT0RFX0lETEUpIHsKKwkJLyogT2sgbG9hZCB1cCB0aGUganBlZyBjb2RlYyAqLworCQl6cjM2MDU3X2VuYWJsZV9qcGcoenIsIG1vZGUpOworCX0KKworCXNwaW5fbG9ja19pcnFzYXZlKCZ6ci0+c3BpbmxvY2ssIGZsYWdzKTsKKworCWlmICghcmVzKSB7CisJCXN3aXRjaCAoenItPmpwZ19idWZmZXJzLmJ1ZmZlcltudW1dLnN0YXRlKSB7CisJCWNhc2UgQlVaX1NUQVRFX0RPTkU6CisJCQlkcHJpbnRrKDIsCisJCQkJS0VSTl9XQVJOSU5HCisJCQkJIiVzOiBqcGdfcXVldWVfZnJhbWUoKSAtIHF1ZWluZyBmcmFtZSBpbiBCVVpfU1RBVEVfRE9ORSBzdGF0ZSE/XG4iLAorCQkJCVpSX0RFVk5BTUUoenIpKTsKKwkJY2FzZSBCVVpfU1RBVEVfVVNFUjoKKwkJCS8qIHNpbmNlIHRoZXJlIGlzIGF0IGxlYXN0IG9uZSB1bnVzZWQgYnVmZmVyIHRoZXJlJ3Mgcm9vbSBmb3IgYXQKKwkJCSAqbGVhc3Qgb25lIG1vcmUgcGVuZFtdIGVudHJ5ICovCisJCQl6ci0+anBnX3BlbmRbenItPmpwZ19xdWVfaGVhZCsrICYgQlVaX01BU0tfRlJBTUVdID0KKwkJCSAgICBudW07CisJCQl6ci0+anBnX2J1ZmZlcnMuYnVmZmVyW251bV0uc3RhdGUgPSBCVVpfU1RBVEVfUEVORDsKKwkJCWZoLT5qcGdfYnVmZmVycy5idWZmZXJbbnVtXSA9CisJCQkgICAgenItPmpwZ19idWZmZXJzLmJ1ZmZlcltudW1dOworCQkJem9yYW5fZmVlZF9zdGF0X2NvbSh6cik7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJY2FzZSBCVVpfU1RBVEVfRE1BOgorCQljYXNlIEJVWl9TVEFURV9QRU5EOgorCQkJaWYgKHpyLT5qcGdfYnVmZmVycy5hY3RpdmUgPT0gWk9SQU5fRlJFRSkgeworCQkJCWZoLT5qcGdfYnVmZmVycy5hY3RpdmUgPSBaT1JBTl9GUkVFOworCQkJCXpyLT5qcGdfYnVmZmVycy5hbGxvY2F0ZWQgPSAwOworCQkJfQorCQkJcmVzID0gLUVCVVNZOwkvKiB3aGF0IGFyZSB5b3UgZG9pbmc/ICovCisJCQlicmVhazsKKwkJfQorCX0KKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnpyLT5zcGlubG9jaywgZmxhZ3MpOworCisJaWYgKCFyZXMgJiYgenItPmpwZ19idWZmZXJzLmFjdGl2ZSA9PSBaT1JBTl9GUkVFKSB7CisJCXpyLT5qcGdfYnVmZmVycy5hY3RpdmUgPSBmaC0+anBnX2J1ZmZlcnMuYWN0aXZlOworCX0KKworCXJldHVybiByZXM7Cit9CisKK3N0YXRpYyBpbnQKK2pwZ19xYnVmIChzdHJ1Y3QgZmlsZSAgICAgICAgICAqZmlsZSwKKwkgIGludCAgICAgICAgICAgICAgICAgICBmcmFtZSwKKwkgIGVudW0gem9yYW5fY29kZWNfbW9kZSBtb2RlKQoreworCXN0cnVjdCB6b3Jhbl9maCAqZmggPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHpvcmFuICp6ciA9IGZoLT56cjsKKwlpbnQgcmVzID0gMDsKKworCS8qIERvZXMgdGhlIHVzZXIgd2FudCB0byBzdG9wIHN0cmVhbWluZz8gKi8KKwlpZiAoZnJhbWUgPCAwKSB7CisJCWlmICh6ci0+Y29kZWNfbW9kZSA9PSBtb2RlKSB7CisJCQlpZiAoZmgtPmpwZ19idWZmZXJzLmFjdGl2ZSA9PSBaT1JBTl9GUkVFKSB7CisJCQkJZHByaW50aygxLAorCQkJCQlLRVJOX0VSUgorCQkJCQkiJXM6IGpwZ19xYnVmKC0xKSAtIHNlc3Npb24gbm90IGFjdGl2ZVxuIiwKKwkJCQkJWlJfREVWTkFNRSh6cikpOworCQkJCXJldHVybiAtRUlOVkFMOworCQkJfQorCQkJZmgtPmpwZ19idWZmZXJzLmFjdGl2ZSA9IHpyLT5qcGdfYnVmZmVycy5hY3RpdmUgPQorCQkJICAgIFpPUkFOX0ZSRUU7CisJCQl6ci0+anBnX2J1ZmZlcnMuYWxsb2NhdGVkID0gMDsKKwkJCXpyMzYwNTdfZW5hYmxlX2pwZyh6ciwgQlVaX01PREVfSURMRSk7CisJCQlyZXR1cm4gMDsKKwkJfSBlbHNlIHsKKwkJCWRwcmludGsoMSwKKwkJCQlLRVJOX0VSUgorCQkJCSIlczoganBnX3FidWYoKSAtIHN0b3Agc3RyZWFtaW5nIGJ1dCBub3QgaW4gc3RyZWFtaW5nIG1vZGVcbiIsCisJCQkJWlJfREVWTkFNRSh6cikpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwl9CisKKwlpZiAoKHJlcyA9IHpvcmFuX2pwZ19xdWV1ZV9mcmFtZShmaWxlLCBmcmFtZSwgbW9kZSkpKQorCQlyZXR1cm4gcmVzOworCisJLyogU3RhcnQgdGhlIGpwZWcgY29kZWMgd2hlbiB0aGUgZmlyc3QgZnJhbWUgaXMgcXVldWVkICAqLworCWlmICghcmVzICYmIHpyLT5qcGdfcXVlX2hlYWQgPT0gMSkKKwkJanBlZ19zdGFydCh6cik7CisKKwlyZXR1cm4gcmVzOworfQorCisvKgorICogICBTeW5jIG9uIGEgTUpQRUcgYnVmZmVyCisgKi8KKworc3RhdGljIGludAoranBnX3N5bmMgKHN0cnVjdCBmaWxlICAgICAgICpmaWxlLAorCSAgc3RydWN0IHpvcmFuX3N5bmMgKmJzKQoreworCXN0cnVjdCB6b3Jhbl9maCAqZmggPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHpvcmFuICp6ciA9IGZoLT56cjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCBmcmFtZTsKKworCWlmIChmaC0+anBnX2J1ZmZlcnMuYWN0aXZlID09IFpPUkFOX0ZSRUUpIHsKKwkJZHByaW50aygxLAorCQkJS0VSTl9FUlIKKwkJCSIlczoganBnX3N5bmMoKSAtIGNhcHR1cmUgaXMgbm90IGN1cnJlbnRseSBhY3RpdmVcbiIsCisJCQlaUl9ERVZOQU1FKHpyKSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlpZiAoenItPmNvZGVjX21vZGUgIT0gQlVaX01PREVfTU9USU9OX0RFQ09NUFJFU1MgJiYKKwkgICAgenItPmNvZGVjX21vZGUgIT0gQlVaX01PREVfTU9USU9OX0NPTVBSRVNTKSB7CisJCWRwcmludGsoMSwKKwkJCUtFUk5fRVJSCisJCQkiJXM6IGpwZ19zeW5jKCkgLSBjb2RlYyBub3QgaW4gc3RyZWFtaW5nIG1vZGVcbiIsCisJCQlaUl9ERVZOQU1FKHpyKSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlpZiAoIXdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV90aW1lb3V0KHpyLT5qcGdfY2FwcSwKKwkJCSh6ci0+anBnX3F1ZV90YWlsICE9IHpyLT5qcGdfZG1hX3RhaWwgfHwKKwkJCSB6ci0+anBnX2RtYV90YWlsID09IHpyLT5qcGdfZG1hX2hlYWQpLAorCQkJMTAqSFopKSB7CisJCWludCBpc3I7CisKKwkJYnRhbmQoflpSMzYwNTdfSk1DX0dvX2VuLCBaUjM2MDU3X0pNQyk7CisJCXVkZWxheSgxKTsKKwkJenItPmNvZGVjLT5jb250cm9sKHpyLT5jb2RlYywgQ09ERUNfR19TVEFUVVMsCisJCQkJCSAgIHNpemVvZihpc3IpLCAmaXNyKTsKKwkJZHByaW50aygxLAorCQkJS0VSTl9FUlIKKwkJCSIlczoganBnX3N5bmMoKSAtIHRpbWVvdXQ6IGNvZGVjIGlzcj0weCUwMnhcbiIsCisJCQlaUl9ERVZOQU1FKHpyKSwgaXNyKTsKKworCQlyZXR1cm4gLUVUSU1FOworCisJfQorCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkKKwkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZ6ci0+c3BpbmxvY2ssIGZsYWdzKTsKKworCWlmICh6ci0+anBnX2RtYV90YWlsICE9IHpyLT5qcGdfZG1hX2hlYWQpCisJCWZyYW1lID0genItPmpwZ19wZW5kW3pyLT5qcGdfcXVlX3RhaWwrKyAmIEJVWl9NQVNLX0ZSQU1FXTsKKwllbHNlCisJCWZyYW1lID0genItPmpwZ19wZW5kW3pyLT5qcGdfcXVlX3RhaWwgJiBCVVpfTUFTS19GUkFNRV07CisKKwkvKiBidWZmZXIgc2hvdWxkIG5vdyBiZSBpbiBCVVpfU1RBVEVfRE9ORSAqLworCWlmICh6ci0+anBnX2J1ZmZlcnMuYnVmZmVyW2ZyYW1lXS5zdGF0ZSAhPSBCVVpfU1RBVEVfRE9ORSkKKwkJZHByaW50aygyLAorCQkJS0VSTl9FUlIgIiVzOiBqcGdfc3luYygpIC0gaW50ZXJuYWwgc3RhdGUgZXJyb3JcbiIsCisJCQlaUl9ERVZOQU1FKHpyKSk7CisKKwkqYnMgPSB6ci0+anBnX2J1ZmZlcnMuYnVmZmVyW2ZyYW1lXS5iczsKKwlicy0+ZnJhbWUgPSBmcmFtZTsKKwl6ci0+anBnX2J1ZmZlcnMuYnVmZmVyW2ZyYW1lXS5zdGF0ZSA9IEJVWl9TVEFURV9VU0VSOworCWZoLT5qcGdfYnVmZmVycy5idWZmZXJbZnJhbWVdID0genItPmpwZ19idWZmZXJzLmJ1ZmZlcltmcmFtZV07CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ6ci0+c3BpbmxvY2ssIGZsYWdzKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZAorem9yYW5fb3Blbl9pbml0X3Nlc3Npb24gKHN0cnVjdCBmaWxlICpmaWxlKQoreworCWludCBpOworCXN0cnVjdCB6b3Jhbl9maCAqZmggPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHpvcmFuICp6ciA9IGZoLT56cjsKKworCS8qIFBlciBkZWZhdWx0LCBtYXAgdGhlIFY0TCBCdWZmZXJzICovCisJZmgtPm1hcF9tb2RlID0gWk9SQU5fTUFQX01PREVfUkFXOworCisJLyogdGFrZSBvdmVyIHRoZSBjYXJkJ3MgY3VycmVudCBzZXR0aW5ncyAqLworCWZoLT5vdmVybGF5X3NldHRpbmdzID0genItPm92ZXJsYXlfc2V0dGluZ3M7CisJZmgtPm92ZXJsYXlfc2V0dGluZ3MuaXNfc2V0ID0gMDsKKwlmaC0+b3ZlcmxheV9zZXR0aW5ncy5mb3JtYXQgPSB6ci0+b3ZlcmxheV9zZXR0aW5ncy5mb3JtYXQ7CisJZmgtPm92ZXJsYXlfYWN0aXZlID0gWk9SQU5fRlJFRTsKKworCS8qIHY0bCBzZXR0aW5ncyAqLworCWZoLT52NGxfc2V0dGluZ3MgPSB6ci0+djRsX3NldHRpbmdzOworCisJLyogdjRsX2J1ZmZlcnMgKi8KKwltZW1zZXQoJmZoLT52NGxfYnVmZmVycywgMCwgc2l6ZW9mKHN0cnVjdCB6b3Jhbl92NGxfc3RydWN0KSk7CisJZm9yIChpID0gMDsgaSA8IFZJREVPX01BWF9GUkFNRTsgaSsrKSB7CisJCWZoLT52NGxfYnVmZmVycy5idWZmZXJbaV0uc3RhdGUgPSBCVVpfU1RBVEVfVVNFUjsJLyogbm90aGluZyBnb2luZyBvbiAqLworCQlmaC0+djRsX2J1ZmZlcnMuYnVmZmVyW2ldLmJzLmZyYW1lID0gaTsKKwl9CisJZmgtPnY0bF9idWZmZXJzLmFsbG9jYXRlZCA9IDA7CisJZmgtPnY0bF9idWZmZXJzLnJlYWR5X3RvX2JlX2ZyZWVkID0gMDsKKwlmaC0+djRsX2J1ZmZlcnMuYWN0aXZlID0gWk9SQU5fRlJFRTsKKwlmaC0+djRsX2J1ZmZlcnMuYnVmZmVyX3NpemUgPSB2NGxfYnVmc2l6ZTsKKwlmaC0+djRsX2J1ZmZlcnMubnVtX2J1ZmZlcnMgPSB2NGxfbmJ1ZnM7CisKKwkvKiBqcGcgc2V0dGluZ3MgKi8KKwlmaC0+anBnX3NldHRpbmdzID0genItPmpwZ19zZXR0aW5nczsKKworCS8qIGpwZ19idWZmZXJzICovCisJbWVtc2V0KCZmaC0+anBnX2J1ZmZlcnMsIDAsIHNpemVvZihzdHJ1Y3Qgem9yYW5fanBnX3N0cnVjdCkpOworCWZvciAoaSA9IDA7IGkgPCBCVVpfTUFYX0ZSQU1FOyBpKyspIHsKKwkJZmgtPmpwZ19idWZmZXJzLmJ1ZmZlcltpXS5zdGF0ZSA9IEJVWl9TVEFURV9VU0VSOwkvKiBub3RoaW5nIGdvaW5nIG9uICovCisJCWZoLT5qcGdfYnVmZmVycy5idWZmZXJbaV0uYnMuZnJhbWUgPSBpOworCX0KKwlmaC0+anBnX2J1ZmZlcnMubmVlZF9jb250aWd1b3VzID0genItPmpwZ19idWZmZXJzLm5lZWRfY29udGlndW91czsKKwlmaC0+anBnX2J1ZmZlcnMuYWxsb2NhdGVkID0gMDsKKwlmaC0+anBnX2J1ZmZlcnMucmVhZHlfdG9fYmVfZnJlZWQgPSAwOworCWZoLT5qcGdfYnVmZmVycy5hY3RpdmUgPSBaT1JBTl9GUkVFOworCWZoLT5qcGdfYnVmZmVycy5idWZmZXJfc2l6ZSA9IGpwZ19idWZzaXplOworCWZoLT5qcGdfYnVmZmVycy5udW1fYnVmZmVycyA9IGpwZ19uYnVmczsKK30KKworc3RhdGljIHZvaWQKK3pvcmFuX2Nsb3NlX2VuZF9zZXNzaW9uIChzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlzdHJ1Y3Qgem9yYW5fZmggKmZoID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCB6b3JhbiAqenIgPSBmaC0+enI7CisKKwkvKiBvdmVybGF5ICovCisJaWYgKGZoLT5vdmVybGF5X2FjdGl2ZSAhPSBaT1JBTl9GUkVFKSB7CisJCWZoLT5vdmVybGF5X2FjdGl2ZSA9IHpyLT5vdmVybGF5X2FjdGl2ZSA9IFpPUkFOX0ZSRUU7CisJCXpyLT52NGxfb3ZlcmxheV9hY3RpdmUgPSAwOworCQlpZiAoIXpyLT52NGxfbWVtZ3JhYl9hY3RpdmUpCisJCQl6cjM2MDU3X292ZXJsYXkoenIsIDApOworCQl6ci0+b3ZlcmxheV9tYXNrID0gTlVMTDsKKwl9CisKKwkvKiB2NGwgY2FwdHVyZSAqLworCWlmIChmaC0+djRsX2J1ZmZlcnMuYWN0aXZlICE9IFpPUkFOX0ZSRUUpIHsKKwkJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCQlzcGluX2xvY2tfaXJxc2F2ZSgmenItPnNwaW5sb2NrLCBmbGFncyk7CisJCXpyMzYwNTdfc2V0X21lbWdyYWIoenIsIDApOworCQl6ci0+djRsX2J1ZmZlcnMuYWxsb2NhdGVkID0gMDsKKwkJenItPnY0bF9idWZmZXJzLmFjdGl2ZSA9IGZoLT52NGxfYnVmZmVycy5hY3RpdmUgPQorCQkgICAgWk9SQU5fRlJFRTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmenItPnNwaW5sb2NrLCBmbGFncyk7CisJfQorCisJLyogdjRsIGJ1ZmZlcnMgKi8KKwlpZiAoZmgtPnY0bF9idWZmZXJzLmFsbG9jYXRlZCB8fAorCSAgICBmaC0+djRsX2J1ZmZlcnMucmVhZHlfdG9fYmVfZnJlZWQpIHsKKwkJdjRsX2ZidWZmZXJfZnJlZShmaWxlKTsKKwl9CisKKwkvKiBqcGcgY2FwdHVyZSAqLworCWlmIChmaC0+anBnX2J1ZmZlcnMuYWN0aXZlICE9IFpPUkFOX0ZSRUUpIHsKKwkJenIzNjA1N19lbmFibGVfanBnKHpyLCBCVVpfTU9ERV9JRExFKTsKKwkJenItPmpwZ19idWZmZXJzLmFsbG9jYXRlZCA9IDA7CisJCXpyLT5qcGdfYnVmZmVycy5hY3RpdmUgPSBmaC0+anBnX2J1ZmZlcnMuYWN0aXZlID0KKwkJICAgIFpPUkFOX0ZSRUU7CisJfQorCisJLyoganBnIGJ1ZmZlcnMgKi8KKwlpZiAoZmgtPmpwZ19idWZmZXJzLmFsbG9jYXRlZCB8fAorCSAgICBmaC0+anBnX2J1ZmZlcnMucmVhZHlfdG9fYmVfZnJlZWQpIHsKKwkJanBnX2ZidWZmZXJfZnJlZShmaWxlKTsKKwl9Cit9CisKKy8qCisgKiAgIE9wZW4gYSB6b3JhbiBjYXJkLiBSaWdodCBub3cgdGhlIGZsYWdzIHN0dWZmIGlzIGp1c3QgcGxheWluZworICovCisKK3N0YXRpYyBpbnQKK3pvcmFuX29wZW4gKHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJICAgIHN0cnVjdCBmaWxlICAqZmlsZSkKK3sKKwl1bnNpZ25lZCBpbnQgbWlub3IgPSBpbWlub3IoaW5vZGUpOworCXN0cnVjdCB6b3JhbiAqenIgPSBOVUxMOworCXN0cnVjdCB6b3Jhbl9maCAqZmg7CisJaW50IGksIHJlcywgZmlyc3Rfb3BlbiA9IDAsIGhhdmVfbW9kdWxlX2xvY2tzID0gMDsKKworCWxvY2tfa2VybmVsKCk7CisJLyogZmluZCB0aGUgZGV2aWNlICovCisJZm9yIChpID0gMDsgaSA8IHpvcmFuX251bTsgaSsrKSB7CisJCWlmICh6b3JhbltpXS0+dmlkZW9fZGV2LT5taW5vciA9PSBtaW5vcikgeworCQkJenIgPSB6b3JhbltpXTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJaWYgKCF6cikgeworCQlkcHJpbnRrKDEsIEtFUk5fRVJSICIlczogZGV2aWNlIG5vdCBmb3VuZCFcbiIsIFpPUkFOX05BTUUpOworCQlyZXMgPSAtRU5PREVWOworCQlnb3RvIG9wZW5fdW5sb2NrX2FuZF9yZXR1cm47CisJfQorCisJLyogc2VlIGZzL2RldmljZS5jIC0gdGhlIGtlcm5lbCBhbHJlYWR5IGxvY2tzIGR1cmluZyBvcGVuKCksCisJICogc28gbG9ja2luZyBvdXJzZWx2ZXMgb25seSBjYXVzZXMgZGVhZGxvY2tzICovCisJLyptdXRleF9sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7Ki8KKworCWlmICghenItPmRlY29kZXIpIHsKKwkJZHByaW50aygxLAorCQkJS0VSTl9FUlIgIiVzOiBubyBUViBkZWNvZGVyIGxvYWRlZCBmb3IgZGV2aWNlIVxuIiwKKwkJCVpSX0RFVk5BTUUoenIpKTsKKwkJcmVzID0gLUVJTzsKKwkJZ290byBvcGVuX3VubG9ja19hbmRfcmV0dXJuOworCX0KKworCS8qIHRyeSB0byBncmFiIGEgbW9kdWxlIGxvY2sgKi8KKwlpZiAoIXRyeV9tb2R1bGVfZ2V0KFRISVNfTU9EVUxFKSkgeworCQlkcHJpbnRrKDEsCisJCQlLRVJOX0VSUgorCQkJIiVzOiBmYWlsZWQgdG8gYWNxdWlyZSBteSBvd24gbG9jayEgUEFOSUMhXG4iLAorCQkJWlJfREVWTkFNRSh6cikpOworCQlyZXMgPSAtRU5PREVWOworCQlnb3RvIG9wZW5fdW5sb2NrX2FuZF9yZXR1cm47CisJfQorCWlmICghdHJ5X21vZHVsZV9nZXQoenItPmRlY29kZXItPmRyaXZlci0+ZHJpdmVyLm93bmVyKSkgeworCQlkcHJpbnRrKDEsCisJCQlLRVJOX0VSUgorCQkJIiVzOiBmYWlsZWQgdG8gZ3JhYiBvd25lcnNoaXAgb2YgaTJjIGRlY29kZXJcbiIsCisJCQlaUl9ERVZOQU1FKHpyKSk7CisJCXJlcyA9IC1FSU87CisJCW1vZHVsZV9wdXQoVEhJU19NT0RVTEUpOworCQlnb3RvIG9wZW5fdW5sb2NrX2FuZF9yZXR1cm47CisJfQorCWlmICh6ci0+ZW5jb2RlciAmJgorCSAgICAhdHJ5X21vZHVsZV9nZXQoenItPmVuY29kZXItPmRyaXZlci0+ZHJpdmVyLm93bmVyKSkgeworCQlkcHJpbnRrKDEsCisJCQlLRVJOX0VSUgorCQkJIiVzOiBmYWlsZWQgdG8gZ3JhYiBvd25lcnNoaXAgb2YgaTJjIGVuY29kZXJcbiIsCisJCQlaUl9ERVZOQU1FKHpyKSk7CisJCXJlcyA9IC1FSU87CisJCW1vZHVsZV9wdXQoenItPmRlY29kZXItPmRyaXZlci0+ZHJpdmVyLm93bmVyKTsKKwkJbW9kdWxlX3B1dChUSElTX01PRFVMRSk7CisJCWdvdG8gb3Blbl91bmxvY2tfYW5kX3JldHVybjsKKwl9CisKKwloYXZlX21vZHVsZV9sb2NrcyA9IDE7CisKKwlpZiAoenItPnVzZXIgPj0gMjA0OCkgeworCQlkcHJpbnRrKDEsIEtFUk5fRVJSICIlczogdG9vIG1hbnkgdXNlcnMgKCVkKSBvbiBkZXZpY2VcbiIsCisJCQlaUl9ERVZOQU1FKHpyKSwgenItPnVzZXIpOworCQlyZXMgPSAtRUJVU1k7CisJCWdvdG8gb3Blbl91bmxvY2tfYW5kX3JldHVybjsKKwl9CisKKwlkcHJpbnRrKDEsIEtFUk5fSU5GTyAiJXM6IHpvcmFuX29wZW4oJXMsIHBpZD1bJWRdKSwgdXNlcnMoLSk9JWRcbiIsCisJCVpSX0RFVk5BTUUoenIpLCBjdXJyZW50LT5jb21tLCB0YXNrX3BpZF9ucihjdXJyZW50KSwgenItPnVzZXIpOworCisJLyogbm93LCBjcmVhdGUgdGhlIG9wZW4oKS1zcGVjaWZpYyBmaWxlX29wcyBzdHJ1Y3QgKi8KKwlmaCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB6b3Jhbl9maCksIEdGUF9LRVJORUwpOworCWlmICghZmgpIHsKKwkJZHByaW50aygxLAorCQkJS0VSTl9FUlIKKwkJCSIlczogem9yYW5fb3BlbigpIC0gYWxsb2NhdGlvbiBvZiB6b3Jhbl9maCBmYWlsZWRcbiIsCisJCQlaUl9ERVZOQU1FKHpyKSk7CisJCXJlcyA9IC1FTk9NRU07CisJCWdvdG8gb3Blbl91bmxvY2tfYW5kX3JldHVybjsKKwl9CisJLyogdXNlZCB0byBiZSBCVVpfTUFYX1dJRFRIL0hFSUdIVCwgYnV0IHRoYXQgZ2l2ZXMgb3ZlcmZsb3dzCisJICogb24gbm9ybS1jaGFuZ2UhICovCisJZmgtPm92ZXJsYXlfbWFzayA9CisJICAgIGttYWxsb2MoKCg3NjggKyAzMSkgLyAzMikgKiA1NzYgKiA0LCBHRlBfS0VSTkVMKTsKKwlpZiAoIWZoLT5vdmVybGF5X21hc2spIHsKKwkJZHByaW50aygxLAorCQkJS0VSTl9FUlIKKwkJCSIlczogem9yYW5fb3BlbigpIC0gYWxsb2NhdGlvbiBvZiBvdmVybGF5X21hc2sgZmFpbGVkXG4iLAorCQkJWlJfREVWTkFNRSh6cikpOworCQlrZnJlZShmaCk7CisJCXJlcyA9IC1FTk9NRU07CisJCWdvdG8gb3Blbl91bmxvY2tfYW5kX3JldHVybjsKKwl9CisKKwlpZiAoenItPnVzZXIrKyA9PSAwKQorCQlmaXJzdF9vcGVuID0gMTsKKworCS8qbXV0ZXhfdW5sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7Ki8KKworCS8qIGRlZmF1bHQgc2V0dXAgLSBUT0RPOiBsb29rIGF0IGZsYWdzICovCisJaWYgKGZpcnN0X29wZW4pIHsJLyogRmlyc3QgZGV2aWNlIG9wZW4gKi8KKwkJenIzNjA1N19yZXN0YXJ0KHpyKTsKKwkJem9yYW5fb3Blbl9pbml0X3BhcmFtcyh6cik7CisJCXpvcmFuX2luaXRfaGFyZHdhcmUoenIpOworCisJCWJ0b3IoWlIzNjA1N19JQ1JfSW50UGluRW4sIFpSMzYwNTdfSUNSKTsKKwl9CisKKwkvKiBzZXQgZmlsZV9vcHMgc3R1ZmYgKi8KKwlmaWxlLT5wcml2YXRlX2RhdGEgPSBmaDsKKwlmaC0+enIgPSB6cjsKKwl6b3Jhbl9vcGVuX2luaXRfc2Vzc2lvbihmaWxlKTsKKwl1bmxvY2tfa2VybmVsKCk7CisKKwlyZXR1cm4gMDsKKworb3Blbl91bmxvY2tfYW5kX3JldHVybjoKKwkvKiBpZiB3ZSBncmFiYmVkIGxvY2tzLCByZWxlYXNlIHRoZW0gYWNjb3JkaW5nbHkgKi8KKwlpZiAoaGF2ZV9tb2R1bGVfbG9ja3MpIHsKKwkJbW9kdWxlX3B1dCh6ci0+ZGVjb2Rlci0+ZHJpdmVyLT5kcml2ZXIub3duZXIpOworCQlpZiAoenItPmVuY29kZXIpIHsKKwkJCW1vZHVsZV9wdXQoenItPmVuY29kZXItPmRyaXZlci0+ZHJpdmVyLm93bmVyKTsKKwkJfQorCQltb2R1bGVfcHV0KFRISVNfTU9EVUxFKTsKKwl9CisKKwkvKiBpZiB0aGVyZSdzIG5vIGRldmljZSBmb3VuZCwgd2UgZGlkbid0IG9idGFpbiB0aGUgbG9jayBlaXRoZXIgKi8KKwlpZiAoenIpIHsKKwkJLyptdXRleF91bmxvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsqLworCX0KKwl1bmxvY2tfa2VybmVsKCk7CisKKwlyZXR1cm4gcmVzOworfQorCitzdGF0aWMgaW50Cit6b3Jhbl9jbG9zZSAoc3RydWN0IGlub2RlICppbm9kZSwKKwkgICAgIHN0cnVjdCBmaWxlICAqZmlsZSkKK3sKKwlzdHJ1Y3Qgem9yYW5fZmggKmZoID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCB6b3JhbiAqenIgPSBmaC0+enI7CisKKwlkcHJpbnRrKDEsIEtFUk5fSU5GTyAiJXM6IHpvcmFuX2Nsb3NlKCVzLCBwaWQ9WyVkXSksIHVzZXJzKCspPSVkXG4iLAorCQlaUl9ERVZOQU1FKHpyKSwgY3VycmVudC0+Y29tbSwgdGFza19waWRfbnIoY3VycmVudCksIHpyLT51c2VyKTsKKworCS8qIGtlcm5lbCBsb2NrcyAoZnMvZGV2aWNlLmMpLCBzbyBkb24ndCBkbyB0aGF0IG91cnNlbHZlcworCSAqIChwcmV2ZW50cyBkZWFkbG9ja3MpICovCisJLyptdXRleF9sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7Ki8KKworCXpvcmFuX2Nsb3NlX2VuZF9zZXNzaW9uKGZpbGUpOworCisJaWYgKHpyLT51c2VyLS0gPT0gMSkgewkvKiBMYXN0IHByb2Nlc3MgKi8KKwkJLyogQ2xlYW4gdXAgSlBFRyBwcm9jZXNzICovCisJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmenItPmpwZ19jYXBxKTsKKwkJenIzNjA1N19lbmFibGVfanBnKHpyLCBCVVpfTU9ERV9JRExFKTsKKwkJenItPmpwZ19idWZmZXJzLmFsbG9jYXRlZCA9IDA7CisJCXpyLT5qcGdfYnVmZmVycy5hY3RpdmUgPSBaT1JBTl9GUkVFOworCisJCS8qIGRpc2FibGUgaW50ZXJydXB0cyAqLworCQlidGFuZCh+WlIzNjA1N19JQ1JfSW50UGluRW4sIFpSMzYwNTdfSUNSKTsKKworCQlpZiAoenIzNjA2N19kZWJ1ZyA+IDEpCisJCQlwcmludF9pbnRlcnJ1cHRzKHpyKTsKKworCQkvKiBPdmVybGF5IG9mZiAqLworCQl6ci0+djRsX292ZXJsYXlfYWN0aXZlID0gMDsKKwkJenIzNjA1N19vdmVybGF5KHpyLCAwKTsKKwkJenItPm92ZXJsYXlfbWFzayA9IE5VTEw7CisKKwkJLyogY2FwdHVyZSBvZmYgKi8KKwkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZ6ci0+djRsX2NhcHEpOworCQl6cjM2MDU3X3NldF9tZW1ncmFiKHpyLCAwKTsKKwkJenItPnY0bF9idWZmZXJzLmFsbG9jYXRlZCA9IDA7CisJCXpyLT52NGxfYnVmZmVycy5hY3RpdmUgPSBaT1JBTl9GUkVFOworCQl6b3Jhbl9zZXRfcGNpX21hc3Rlcih6ciwgMCk7CisKKwkJaWYgKCFwYXNzX3Rocm91Z2gpIHsJLyogU3dpdGNoIHRvIGNvbG9yIGJhciAqLworCQkJaW50IHplcm8gPSAwLCB0d28gPSAyOworCQkJZGVjb2Rlcl9jb21tYW5kKHpyLCBERUNPREVSX0VOQUJMRV9PVVRQVVQsICZ6ZXJvKTsKKwkJCWVuY29kZXJfY29tbWFuZCh6ciwgRU5DT0RFUl9TRVRfSU5QVVQsICZ0d28pOworCQl9CisJfQorCisJZmlsZS0+cHJpdmF0ZV9kYXRhID0gTlVMTDsKKwlrZnJlZShmaC0+b3ZlcmxheV9tYXNrKTsKKwlrZnJlZShmaCk7CisKKwkvKiByZWxlYXNlIGxvY2tzIG9uIHRoZSBpMmMgbW9kdWxlcyAqLworCW1vZHVsZV9wdXQoenItPmRlY29kZXItPmRyaXZlci0+ZHJpdmVyLm93bmVyKTsKKwlpZiAoenItPmVuY29kZXIpIHsKKwkJIG1vZHVsZV9wdXQoenItPmVuY29kZXItPmRyaXZlci0+ZHJpdmVyLm93bmVyKTsKKwl9CisJbW9kdWxlX3B1dChUSElTX01PRFVMRSk7CisKKwkvKm11dGV4X3VubG9jaygmenItPnJlc291cmNlX2xvY2spOyovCisKKwlkcHJpbnRrKDQsIEtFUk5fSU5GTyAiJXM6IHpvcmFuX2Nsb3NlKCkgZG9uZVxuIiwgWlJfREVWTkFNRSh6cikpOworCisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIHNzaXplX3QKK3pvcmFuX3JlYWQgKHN0cnVjdCBmaWxlICpmaWxlLAorCSAgICBjaGFyICAgICAgICBfX3VzZXIgKmRhdGEsCisJICAgIHNpemVfdCAgICAgICBjb3VudCwKKwkgICAgbG9mZl90ICAgICAgKnBwb3MpCit7CisJLyogd2Ugc2ltcGx5IGRvbid0IHN1cHBvcnQgcmVhZCgpICh5ZXQpLi4uICovCisKKwlyZXR1cm4gLUVJTlZBTDsKK30KKworc3RhdGljIHNzaXplX3QKK3pvcmFuX3dyaXRlIChzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkgICAgIGNvbnN0IGNoYXIgIF9fdXNlciAqZGF0YSwKKwkgICAgIHNpemVfdCAgICAgICBjb3VudCwKKwkgICAgIGxvZmZfdCAgICAgICpwcG9zKQoreworCS8qIC4uLmFuZCB0aGUgc2FtZSBnb2VzIGZvciB3cml0ZSgpICovCisKKwlyZXR1cm4gLUVJTlZBTDsKK30KKworc3RhdGljIGludAorc2V0dXBfZmJ1ZmZlciAoc3RydWN0IGZpbGUgICAgICAgICAgICAgICAqZmlsZSwKKwkgICAgICAgdm9pZCAgICAgICAgICAgICAgICAgICAgICAqYmFzZSwKKwkgICAgICAgY29uc3Qgc3RydWN0IHpvcmFuX2Zvcm1hdCAqZm10LAorCSAgICAgICBpbnQgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aCwKKwkgICAgICAgaW50ICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0LAorCSAgICAgICBpbnQgICAgICAgICAgICAgICAgICAgICAgICBieXRlc3BlcmxpbmUpCit7CisJc3RydWN0IHpvcmFuX2ZoICpmaCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3Qgem9yYW4gKnpyID0gZmgtPnpyOworCisJLyogKFJvbmFsZCkgdjRsL3Y0bDIgZ3VpZGVsaW5lcyAqLworCWlmICghY2FwYWJsZShDQVBfU1lTX0FETUlOKSAmJiAhY2FwYWJsZShDQVBfU1lTX1JBV0lPKSkKKwkJcmV0dXJuIC1FUEVSTTsKKworCS8qIERvbid0IGFsbG93IGZyYW1lIGJ1ZmZlciBvdmVybGF5IGlmIFBDSSBvciBBR1AgaXMgYnVnZ3ksIG9yIG9uCisJICAgQUxpIE1hZ2lrICh0aGF0IG5lZWRzIHZlcnkgbG93IGxhdGVuY3kgd2hpbGUgdGhlIGNhcmQgbmVlZHMgYQorCSAgIGhpZ2hlciB2YWx1ZSBhbHdheXMpICovCisKKwlpZiAocGNpX3BjaV9wcm9ibGVtcyAmIChQQ0lQQ0lfRkFJTCB8IFBDSUFHUF9GQUlMIHwgUENJUENJX0FMSU1BR0lLKSkKKwkJcmV0dXJuIC1FTlhJTzsKKworCS8qIHdlIG5lZWQgYSBieXRlc3BlcmxpbmUgdmFsdWUsIGV2ZW4gaWYgbm90IGdpdmVuICovCisJaWYgKCFieXRlc3BlcmxpbmUpCisJCWJ5dGVzcGVybGluZSA9IHdpZHRoICogKChmbXQtPmRlcHRoICsgNykgJiB+NykgLyA4OworCisjaWYgMAorCWlmICh6ci0+b3ZlcmxheV9hY3RpdmUpIHsKKwkJLyogZHpqZWUuLi4gc3R1cGlkIHVzZXJzLi4uIGRvbid0IGV2ZW4gYm90aGVyIHRvIHR1cm4gb2ZmCisJCSAqIG92ZXJsYXkgYmVmb3JlIGNoYW5naW5nIHRoZSBtZW1vcnkgbG9jYXRpb24uLi4KKwkJICogbm9ybWFsbHksIHdlIHdvdWxkIHJldHVybiBlcnJvcnMgaGVyZS4gSG93ZXZlciwgb25lIG9mCisJCSAqIHRoZSB0b29scyB0aGF0IGRvZXMgdGhpcyBpcy4uLiB4YXd0diEgYW5kIHNpbmNlIHhhd3R2CisJCSAqIGlzIHVzZWQgYnkgKy8tIDk5JSBvZiB0aGUgdXNlcnMsIHdlJ2QgcmF0aGVyIGJlIHVzZXItCisJCSAqIGZyaWVuZGx5IGFuZCBzaWxlbnRseSBkbyBhcyBpZiBub3RoaW5nIHdlbnQgd3JvbmcgKi8KKwkJZHByaW50aygzLAorCQkJS0VSTl9FUlIKKwkJCSIlczogc2V0dXBfZmJ1ZmZlcigpIC0gZm9yY2VkIG92ZXJsYXkgdHVybm9mZiBiZWNhdXNlIGZyYW1lYnVmZmVyIGNoYW5nZWRcbiIsCisJCQlaUl9ERVZOQU1FKHpyKSk7CisJCXpyMzYwNTdfb3ZlcmxheSh6ciwgMCk7CisJfQorI2VuZGlmCisKKwlpZiAoIShmbXQtPmZsYWdzICYgWk9SQU5fRk9STUFUX09WRVJMQVkpKSB7CisJCWRwcmludGsoMSwKKwkJCUtFUk5fRVJSCisJCQkiJXM6IHNldHVwX2ZidWZmZXIoKSAtIG5vIHZhbGlkIG92ZXJsYXkgZm9ybWF0IGdpdmVuXG4iLAorCQkJWlJfREVWTkFNRSh6cikpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJaWYgKGhlaWdodCA8PSAwIHx8IHdpZHRoIDw9IDAgfHwgYnl0ZXNwZXJsaW5lIDw9IDApIHsKKwkJZHByaW50aygxLAorCQkJS0VSTl9FUlIKKwkJCSIlczogc2V0dXBfZmJ1ZmZlcigpIC0gaW52YWxpZCBoZWlnaHQvd2lkdGgvYnBsIHZhbHVlICglZHwlZHwlZClcbiIsCisJCQlaUl9ERVZOQU1FKHpyKSwgd2lkdGgsIGhlaWdodCwgYnl0ZXNwZXJsaW5lKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCWlmIChieXRlc3BlcmxpbmUgJiAzKSB7CisJCWRwcmludGsoMSwKKwkJCUtFUk5fRVJSCisJCQkiJXM6IHNldHVwX2ZidWZmZXIoKSAtIGJ5dGVzcGVybGluZSAoJWQpIG11c3QgYmUgNC1ieXRlIGFsaWduZWRcbiIsCisJCQlaUl9ERVZOQU1FKHpyKSwgYnl0ZXNwZXJsaW5lKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJenItPmJ1ZmZlci5iYXNlID0gKHZvaWQgKikgKCh1bnNpZ25lZCBsb25nKSBiYXNlICYgfjMpOworCXpyLT5idWZmZXIuaGVpZ2h0ID0gaGVpZ2h0OworCXpyLT5idWZmZXIud2lkdGggPSB3aWR0aDsKKwl6ci0+YnVmZmVyLmRlcHRoID0gZm10LT5kZXB0aDsKKwl6ci0+b3ZlcmxheV9zZXR0aW5ncy5mb3JtYXQgPSBmbXQ7CisJenItPmJ1ZmZlci5ieXRlc3BlcmxpbmUgPSBieXRlc3BlcmxpbmU7CisKKwkvKiBUaGUgdXNlciBzaG91bGQgc2V0IG5ldyB3aW5kb3cgcGFyYW1ldGVycyAqLworCXpyLT5vdmVybGF5X3NldHRpbmdzLmlzX3NldCA9IDA7CisKKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMgaW50CitzZXR1cF93aW5kb3cgKHN0cnVjdCBmaWxlICAgICAgICpmaWxlLAorCSAgICAgIGludCAgICAgICAgICAgICAgICB4LAorCSAgICAgIGludCAgICAgICAgICAgICAgICB5LAorCSAgICAgIGludCAgICAgICAgICAgICAgICB3aWR0aCwKKwkgICAgICBpbnQgICAgICAgICAgICAgICAgaGVpZ2h0LAorCSAgICAgIHN0cnVjdCB2aWRlb19jbGlwIF9fdXNlciAqY2xpcHMsCisJICAgICAgaW50ICAgICAgICAgICAgICAgIGNsaXBjb3VudCwKKwkgICAgICB2b2lkICAgICAgICAgICAgICBfX3VzZXIgKmJpdG1hcCkKK3sKKwlzdHJ1Y3Qgem9yYW5fZmggKmZoID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCB6b3JhbiAqenIgPSBmaC0+enI7CisJc3RydWN0IHZpZGVvX2NsaXAgKnZjcCA9IE5VTEw7CisJaW50IG9uLCBlbmQ7CisKKworCWlmICghenItPmJ1ZmZlci5iYXNlKSB7CisJCWRwcmludGsoMSwKKwkJCUtFUk5fRVJSCisJCQkiJXM6IHNldHVwX3dpbmRvdygpIC0gZnJhbWUgYnVmZmVyIGhhcyB0byBiZSBzZXQgZmlyc3RcbiIsCisJCQlaUl9ERVZOQU1FKHpyKSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmICghZmgtPm92ZXJsYXlfc2V0dGluZ3MuZm9ybWF0KSB7CisJCWRwcmludGsoMSwKKwkJCUtFUk5fRVJSCisJCQkiJXM6IHNldHVwX3dpbmRvdygpIC0gbm8gb3ZlcmxheSBmb3JtYXQgc2V0XG4iLAorCQkJWlJfREVWTkFNRSh6cikpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKgorCSAqIFRoZSB2aWRlbyBmcm9udCBlbmQgbmVlZHMgNC1ieXRlIGFsaW5nZWQgbGluZSBzaXplcywgd2UgY29ycmVjdCB0aGF0CisJICogc2lsZW50bHkgaGVyZSBpZiBuZWNlc3NhcnkKKwkgKi8KKwlpZiAoenItPmJ1ZmZlci5kZXB0aCA9PSAxNSB8fCB6ci0+YnVmZmVyLmRlcHRoID09IDE2KSB7CisJCWVuZCA9ICh4ICsgd2lkdGgpICYgfjE7CS8qIHJvdW5kIGRvd24gKi8KKwkJeCA9ICh4ICsgMSkgJiB+MTsJLyogcm91bmQgdXAgKi8KKwkJd2lkdGggPSBlbmQgLSB4OworCX0KKworCWlmICh6ci0+YnVmZmVyLmRlcHRoID09IDI0KSB7CisJCWVuZCA9ICh4ICsgd2lkdGgpICYgfjM7CS8qIHJvdW5kIGRvd24gKi8KKwkJeCA9ICh4ICsgMykgJiB+MzsJLyogcm91bmQgdXAgKi8KKwkJd2lkdGggPSBlbmQgLSB4OworCX0KKworCWlmICh3aWR0aCA+IEJVWl9NQVhfV0lEVEgpCisJCXdpZHRoID0gQlVaX01BWF9XSURUSDsKKwlpZiAoaGVpZ2h0ID4gQlVaX01BWF9IRUlHSFQpCisJCWhlaWdodCA9IEJVWl9NQVhfSEVJR0hUOworCisJLyogQ2hlY2sgZm9yIHZhaWxkIHBhcmFtZXRlcnMgKi8KKwlpZiAod2lkdGggPCBCVVpfTUlOX1dJRFRIIHx8IGhlaWdodCA8IEJVWl9NSU5fSEVJR0hUIHx8CisJICAgIHdpZHRoID4gQlVaX01BWF9XSURUSCB8fCBoZWlnaHQgPiBCVVpfTUFYX0hFSUdIVCkgeworCQlkcHJpbnRrKDEsCisJCQlLRVJOX0VSUgorCQkJIiVzOiBzZXR1cF93aW5kb3coKSAtIHdpZHRoID0gJWQgb3IgaGVpZ2h0ID0gJWQgaW52YWxpZFxuIiwKKwkJCVpSX0RFVk5BTUUoenIpLCB3aWR0aCwgaGVpZ2h0KTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJZmgtPm92ZXJsYXlfc2V0dGluZ3MueCA9IHg7CisJZmgtPm92ZXJsYXlfc2V0dGluZ3MueSA9IHk7CisJZmgtPm92ZXJsYXlfc2V0dGluZ3Mud2lkdGggPSB3aWR0aDsKKwlmaC0+b3ZlcmxheV9zZXR0aW5ncy5oZWlnaHQgPSBoZWlnaHQ7CisJZmgtPm92ZXJsYXlfc2V0dGluZ3MuY2xpcGNvdW50ID0gY2xpcGNvdW50OworCisJLyoKKwkgKiBJZiBhbiBvdmVybGF5IGlzIHJ1bm5pbmcsIHdlIGhhdmUgdG8gc3dpdGNoIGl0IG9mZgorCSAqIGFuZCBzd2l0Y2ggaXQgb24gYWdhaW4gaW4gb3JkZXIgdG8gZ2V0IHRoZSBuZXcgc2V0dGluZ3MgaW4gZWZmZWN0LgorCSAqCisJICogV2UgYWxzbyB3YW50IHRvIGF2b2lkIHRoYXQgdGhlIG92ZXJsYXkgbWFzayBpcyB3cml0dGVuCisJICogd2hlbiBhbiBvdmVybGF5IGlzIHJ1bm5pbmcuCisJICovCisKKwlvbiA9IHpyLT52NGxfb3ZlcmxheV9hY3RpdmUgJiYgIXpyLT52NGxfbWVtZ3JhYl9hY3RpdmUgJiYKKwkgICAgenItPm92ZXJsYXlfYWN0aXZlICE9IFpPUkFOX0ZSRUUgJiYKKwkgICAgZmgtPm92ZXJsYXlfYWN0aXZlICE9IFpPUkFOX0ZSRUU7CisJaWYgKG9uKQorCQl6cjM2MDU3X292ZXJsYXkoenIsIDApOworCisJLyoKKwkgKiAgIFdyaXRlIHRoZSBvdmVybGF5IG1hc2sgaWYgY2xpcHMgYXJlIHdhbnRlZC4KKwkgKiAgIFdlIHByZWZlciBhIGJpdG1hcC4KKwkgKi8KKwlpZiAoYml0bWFwKSB7CisJCS8qIGZha2UgdmFsdWUgLSBpdCBqdXN0IG1lYW5zIHdlIHdhbnQgY2xpcHMgKi8KKwkJZmgtPm92ZXJsYXlfc2V0dGluZ3MuY2xpcGNvdW50ID0gMTsKKworCQlpZiAoY29weV9mcm9tX3VzZXIoZmgtPm92ZXJsYXlfbWFzaywgYml0bWFwLAorCQkJCSAgICh3aWR0aCAqIGhlaWdodCArIDcpIC8gOCkpIHsKKwkJCXJldHVybiAtRUZBVUxUOworCQl9CisJfSBlbHNlIGlmIChjbGlwY291bnQgPiAwKSB7CisJCS8qIHdyaXRlIG91ciBvd24gYml0bWFwIGZyb20gdGhlIGNsaXBzICovCisJCXZjcCA9IHZtYWxsb2Moc2l6ZW9mKHN0cnVjdCB2aWRlb19jbGlwKSAqIChjbGlwY291bnQgKyA0KSk7CisJCWlmICh2Y3AgPT0gTlVMTCkgeworCQkJZHByaW50aygxLAorCQkJCUtFUk5fRVJSCisJCQkJIiVzOiBzZXR1cF93aW5kb3coKSAtIEFsbG9jIG9mIGNsaXAgbWFzayBmYWlsZWRcbiIsCisJCQkJWlJfREVWTkFNRSh6cikpOworCQkJcmV0dXJuIC1FTk9NRU07CisJCX0KKwkJaWYgKGNvcHlfZnJvbV91c2VyCisJCSAgICAodmNwLCBjbGlwcywgc2l6ZW9mKHN0cnVjdCB2aWRlb19jbGlwKSAqIGNsaXBjb3VudCkpIHsKKwkJCXZmcmVlKHZjcCk7CisJCQlyZXR1cm4gLUVGQVVMVDsKKwkJfQorCQl3cml0ZV9vdmVybGF5X21hc2soZmlsZSwgdmNwLCBjbGlwY291bnQpOworCQl2ZnJlZSh2Y3ApOworCX0KKworCWZoLT5vdmVybGF5X3NldHRpbmdzLmlzX3NldCA9IDE7CisJaWYgKGZoLT5vdmVybGF5X2FjdGl2ZSAhPSBaT1JBTl9GUkVFICYmCisJICAgIHpyLT5vdmVybGF5X2FjdGl2ZSAhPSBaT1JBTl9GUkVFKQorCQl6ci0+b3ZlcmxheV9zZXR0aW5ncyA9IGZoLT5vdmVybGF5X3NldHRpbmdzOworCisJaWYgKG9uKQorCQl6cjM2MDU3X292ZXJsYXkoenIsIDEpOworCisJLyogTWFrZSBzdXJlIHRoZSBjaGFuZ2VzIGNvbWUgaW50byBlZmZlY3QgKi8KKwlyZXR1cm4gd2FpdF9ncmFiX3BlbmRpbmcoenIpOworfQorCitzdGF0aWMgaW50CitzZXR1cF9vdmVybGF5IChzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkgICAgICAgaW50ICAgICAgICAgIG9uKQoreworCXN0cnVjdCB6b3Jhbl9maCAqZmggPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHpvcmFuICp6ciA9IGZoLT56cjsKKworCS8qIElmIHRoZXJlIGlzIG5vdGhpbmcgdG8gZG8sIHJldHVybiBpbW1lZGlhdGx5ICovCisJaWYgKChvbiAmJiBmaC0+b3ZlcmxheV9hY3RpdmUgIT0gWk9SQU5fRlJFRSkgfHwKKwkgICAgKCFvbiAmJiBmaC0+b3ZlcmxheV9hY3RpdmUgPT0gWk9SQU5fRlJFRSkpCisJCXJldHVybiAwOworCisJLyogY2hlY2sgd2hldGhlciB3ZSdyZSB0b3VjaGluZyBzb21lb25lIGVsc2UncyBvdmVybGF5ICovCisJaWYgKG9uICYmIHpyLT5vdmVybGF5X2FjdGl2ZSAhPSBaT1JBTl9GUkVFICYmCisJICAgIGZoLT5vdmVybGF5X2FjdGl2ZSA9PSBaT1JBTl9GUkVFKSB7CisJCWRwcmludGsoMSwKKwkJCUtFUk5fRVJSCisJCQkiJXM6IHNldHVwX292ZXJsYXkoKSAtIG92ZXJsYXkgaXMgYWxyZWFkeSBhY3RpdmUgZm9yIGFub3RoZXIgc2Vzc2lvblxuIiwKKwkJCVpSX0RFVk5BTUUoenIpKTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisJaWYgKCFvbiAmJiB6ci0+b3ZlcmxheV9hY3RpdmUgIT0gWk9SQU5fRlJFRSAmJgorCSAgICBmaC0+b3ZlcmxheV9hY3RpdmUgPT0gWk9SQU5fRlJFRSkgeworCQlkcHJpbnRrKDEsCisJCQlLRVJOX0VSUgorCQkJIiVzOiBzZXR1cF9vdmVybGF5KCkgLSB5b3UgY2Fubm90IGNhbmNlbCBzb21lb25lIGVsc2UncyBzZXNzaW9uXG4iLAorCQkJWlJfREVWTkFNRSh6cikpOworCQlyZXR1cm4gLUVQRVJNOworCX0KKworCWlmIChvbiA9PSAwKSB7CisJCXpyLT5vdmVybGF5X2FjdGl2ZSA9IGZoLT5vdmVybGF5X2FjdGl2ZSA9IFpPUkFOX0ZSRUU7CisJCXpyLT52NGxfb3ZlcmxheV9hY3RpdmUgPSAwOworCQkvKiBXaGVuIGEgZ3JhYiBpcyBydW5uaW5nLCB0aGUgdmlkZW8gc2ltcGx5CisJCSAqIHdvbid0IGJlIHN3aXRjaGVkIG9uIGFueSBtb3JlICovCisJCWlmICghenItPnY0bF9tZW1ncmFiX2FjdGl2ZSkKKwkJCXpyMzYwNTdfb3ZlcmxheSh6ciwgMCk7CisJCXpyLT5vdmVybGF5X21hc2sgPSBOVUxMOworCX0gZWxzZSB7CisJCWlmICghenItPmJ1ZmZlci5iYXNlIHx8ICFmaC0+b3ZlcmxheV9zZXR0aW5ncy5pc19zZXQpIHsKKwkJCWRwcmludGsoMSwKKwkJCQlLRVJOX0VSUgorCQkJCSIlczogc2V0dXBfb3ZlcmxheSgpIC0gYnVmZmVyIG9yIHdpbmRvdyBub3Qgc2V0XG4iLAorCQkJCVpSX0RFVk5BTUUoenIpKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJCWlmICghZmgtPm92ZXJsYXlfc2V0dGluZ3MuZm9ybWF0KSB7CisJCQlkcHJpbnRrKDEsCisJCQkJS0VSTl9FUlIKKwkJCQkiJXM6IHNldHVwX292ZXJsYXkoKSAtIG5vIG92ZXJsYXkgZm9ybWF0IHNldFxuIiwKKwkJCQlaUl9ERVZOQU1FKHpyKSk7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCQl6ci0+b3ZlcmxheV9hY3RpdmUgPSBmaC0+b3ZlcmxheV9hY3RpdmUgPSBaT1JBTl9MT0NLRUQ7CisJCXpyLT52NGxfb3ZlcmxheV9hY3RpdmUgPSAxOworCQl6ci0+b3ZlcmxheV9tYXNrID0gZmgtPm92ZXJsYXlfbWFzazsKKwkJenItPm92ZXJsYXlfc2V0dGluZ3MgPSBmaC0+b3ZlcmxheV9zZXR0aW5nczsKKwkJaWYgKCF6ci0+djRsX21lbWdyYWJfYWN0aXZlKQorCQkJenIzNjA1N19vdmVybGF5KHpyLCAxKTsKKwkJLyogV2hlbiBhIGdyYWIgaXMgcnVubmluZywgdGhlIHZpZGVvIHdpbGwgYmUKKwkJICogc3dpdGNoZWQgb24gd2hlbiBncmFiIGlzIGZpbmlzaGVkICovCisJfQorCisJLyogTWFrZSBzdXJlIHRoZSBjaGFuZ2VzIGNvbWUgaW50byBlZmZlY3QgKi8KKwlyZXR1cm4gd2FpdF9ncmFiX3BlbmRpbmcoenIpOworfQorCisJLyogZ2V0IHRoZSBzdGF0dXMgb2YgYSBidWZmZXIgaW4gdGhlIGNsaWVudHMgYnVmZmVyIHF1ZXVlICovCitzdGF0aWMgaW50Cit6b3Jhbl92NGwyX2J1ZmZlcl9zdGF0dXMgKHN0cnVjdCBmaWxlICAgICAgICAqZmlsZSwKKwkJCSAgc3RydWN0IHY0bDJfYnVmZmVyICpidWYsCisJCQkgIGludCAgICAgICAgICAgICAgICAgbnVtKQoreworCXN0cnVjdCB6b3Jhbl9maCAqZmggPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHpvcmFuICp6ciA9IGZoLT56cjsKKworCWJ1Zi0+ZmxhZ3MgPSBWNEwyX0JVRl9GTEFHX01BUFBFRDsKKworCXN3aXRjaCAoZmgtPm1hcF9tb2RlKSB7CisJY2FzZSBaT1JBTl9NQVBfTU9ERV9SQVc6CisKKwkJLyogY2hlY2sgcmFuZ2UgKi8KKwkJaWYgKG51bSA8IDAgfHwgbnVtID49IGZoLT52NGxfYnVmZmVycy5udW1fYnVmZmVycyB8fAorCQkgICAgIWZoLT52NGxfYnVmZmVycy5hbGxvY2F0ZWQpIHsKKwkJCWRwcmludGsoMSwKKwkJCQlLRVJOX0VSUgorCQkJCSIlczogdjRsMl9idWZmZXJfc3RhdHVzKCkgLSB3cm9uZyBudW1iZXIgb3IgYnVmZmVycyBub3QgYWxsb2NhdGVkXG4iLAorCQkJCVpSX0RFVk5BTUUoenIpKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisKKwkJYnVmLT50eXBlID0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOworCQlidWYtPmxlbmd0aCA9IGZoLT52NGxfYnVmZmVycy5idWZmZXJfc2l6ZTsKKworCQkvKiBnZXQgYnVmZmVyICovCisJCWJ1Zi0+Ynl0ZXN1c2VkID0gZmgtPnY0bF9idWZmZXJzLmJ1ZmZlcltudW1dLmJzLmxlbmd0aDsKKwkJaWYgKGZoLT52NGxfYnVmZmVycy5idWZmZXJbbnVtXS5zdGF0ZSA9PSBCVVpfU1RBVEVfRE9ORSB8fAorCQkgICAgZmgtPnY0bF9idWZmZXJzLmJ1ZmZlcltudW1dLnN0YXRlID09IEJVWl9TVEFURV9VU0VSKSB7CisJCQlidWYtPnNlcXVlbmNlID0gZmgtPnY0bF9idWZmZXJzLmJ1ZmZlcltudW1dLmJzLnNlcTsKKwkJCWJ1Zi0+ZmxhZ3MgfD0gVjRMMl9CVUZfRkxBR19ET05FOworCQkJYnVmLT50aW1lc3RhbXAgPQorCQkJICAgIGZoLT52NGxfYnVmZmVycy5idWZmZXJbbnVtXS5icy50aW1lc3RhbXA7CisJCX0gZWxzZSB7CisJCQlidWYtPmZsYWdzIHw9IFY0TDJfQlVGX0ZMQUdfUVVFVUVEOworCQl9CisKKwkJaWYgKGZoLT52NGxfc2V0dGluZ3MuaGVpZ2h0IDw9IEJVWl9NQVhfSEVJR0hUIC8gMikKKwkJCWJ1Zi0+ZmllbGQgPSBWNEwyX0ZJRUxEX1RPUDsKKwkJZWxzZQorCQkJYnVmLT5maWVsZCA9IFY0TDJfRklFTERfSU5URVJMQUNFRDsKKworCQlicmVhazsKKworCWNhc2UgWk9SQU5fTUFQX01PREVfSlBHX1JFQzoKKwljYXNlIFpPUkFOX01BUF9NT0RFX0pQR19QTEFZOgorCisJCS8qIGNoZWNrIHJhbmdlICovCisJCWlmIChudW0gPCAwIHx8IG51bSA+PSBmaC0+anBnX2J1ZmZlcnMubnVtX2J1ZmZlcnMgfHwKKwkJICAgICFmaC0+anBnX2J1ZmZlcnMuYWxsb2NhdGVkKSB7CisJCQlkcHJpbnRrKDEsCisJCQkJS0VSTl9FUlIKKwkJCQkiJXM6IHY0bDJfYnVmZmVyX3N0YXR1cygpIC0gd3JvbmcgbnVtYmVyIG9yIGJ1ZmZlcnMgbm90IGFsbG9jYXRlZFxuIiwKKwkJCQlaUl9ERVZOQU1FKHpyKSk7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCisJCWJ1Zi0+dHlwZSA9IChmaC0+bWFwX21vZGUgPT0gWk9SQU5fTUFQX01PREVfSlBHX1JFQykgPworCQkJICAgICAgVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFIDoKKwkJCSAgICAgIFY0TDJfQlVGX1RZUEVfVklERU9fT1VUUFVUOworCQlidWYtPmxlbmd0aCA9IGZoLT5qcGdfYnVmZmVycy5idWZmZXJfc2l6ZTsKKworCQkvKiB0aGVzZSB2YXJpYWJsZXMgYXJlIG9ubHkgd3JpdHRlbiBhZnRlciBmcmFtZSBoYXMgYmVlbiBjYXB0dXJlZCAqLworCQlpZiAoZmgtPmpwZ19idWZmZXJzLmJ1ZmZlcltudW1dLnN0YXRlID09IEJVWl9TVEFURV9ET05FIHx8CisJCSAgICBmaC0+anBnX2J1ZmZlcnMuYnVmZmVyW251bV0uc3RhdGUgPT0gQlVaX1NUQVRFX1VTRVIpIHsKKwkJCWJ1Zi0+c2VxdWVuY2UgPSBmaC0+anBnX2J1ZmZlcnMuYnVmZmVyW251bV0uYnMuc2VxOworCQkJYnVmLT50aW1lc3RhbXAgPQorCQkJICAgIGZoLT5qcGdfYnVmZmVycy5idWZmZXJbbnVtXS5icy50aW1lc3RhbXA7CisJCQlidWYtPmJ5dGVzdXNlZCA9CisJCQkgICAgZmgtPmpwZ19idWZmZXJzLmJ1ZmZlcltudW1dLmJzLmxlbmd0aDsKKwkJCWJ1Zi0+ZmxhZ3MgfD0gVjRMMl9CVUZfRkxBR19ET05FOworCQl9IGVsc2UgeworCQkJYnVmLT5mbGFncyB8PSBWNEwyX0JVRl9GTEFHX1FVRVVFRDsKKwkJfQorCisJCS8qIHdoaWNoIGZpZWxkcyBhcmUgdGhlc2U/ICovCisJCWlmIChmaC0+anBnX3NldHRpbmdzLlRtcERjbSAhPSAxKQorCQkJYnVmLT5maWVsZCA9CisJCQkgICAgZmgtPmpwZ19zZXR0aW5ncy4KKwkJCSAgICBvZGRfZXZlbiA/IFY0TDJfRklFTERfVE9QIDogVjRMMl9GSUVMRF9CT1RUT007CisJCWVsc2UKKwkJCWJ1Zi0+ZmllbGQgPQorCQkJICAgIGZoLT5qcGdfc2V0dGluZ3MuCisJCQkgICAgb2RkX2V2ZW4gPyBWNEwyX0ZJRUxEX1NFUV9UQiA6CisJCQkgICAgVjRMMl9GSUVMRF9TRVFfQlQ7CisKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCisJCWRwcmludGsoNSwKKwkJCUtFUk5fRVJSCisJCQkiJXM6IHY0bDJfYnVmZmVyX3N0YXR1cygpIC0gaW52YWxpZCBidWZmZXIgdHlwZXxtYXBfbW9kZSAoJWR8JWQpXG4iLAorCQkJWlJfREVWTkFNRSh6ciksIGJ1Zi0+dHlwZSwgZmgtPm1hcF9tb2RlKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJYnVmLT5tZW1vcnkgPSBWNEwyX01FTU9SWV9NTUFQOworCWJ1Zi0+aW5kZXggPSBudW07CisJYnVmLT5tLm9mZnNldCA9IGJ1Zi0+bGVuZ3RoICogbnVtOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK3pvcmFuX3NldF9ub3JtIChzdHJ1Y3Qgem9yYW4gKnpyLAorCQlpbnQgICAgICAgICAgIG5vcm0pIC8qIFZJREVPX01PREVfKiAqLworeworCWludCBub3JtX2VuY29kZXIsIG9uOworCisJaWYgKHpyLT52NGxfYnVmZmVycy5hY3RpdmUgIT0gWk9SQU5fRlJFRSB8fAorCSAgICB6ci0+anBnX2J1ZmZlcnMuYWN0aXZlICE9IFpPUkFOX0ZSRUUpIHsKKwkJZHByaW50aygxLAorCQkJS0VSTl9XQVJOSU5HCisJCQkiJXM6IHNldF9ub3JtKCkgY2FsbGVkIHdoaWxlIGluIHBsYXliYWNrL2NhcHR1cmUgbW9kZVxuIiwKKwkJCVpSX0RFVk5BTUUoenIpKTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisKKwlpZiAobG9ja19ub3JtICYmIG5vcm0gIT0genItPm5vcm0pIHsKKwkJaWYgKGxvY2tfbm9ybSA+IDEpIHsKKwkJCWRwcmludGsoMSwKKwkJCQlLRVJOX1dBUk5JTkcKKwkJCQkiJXM6IHNldF9ub3JtKCkgLSBUViBzdGFuZGFyZCBpcyBsb2NrZWQsIGNhbiBub3Qgc3dpdGNoIG5vcm1cbiIsCisJCQkJWlJfREVWTkFNRSh6cikpOworCQkJcmV0dXJuIC1FUEVSTTsKKwkJfSBlbHNlIHsKKwkJCWRwcmludGsoMSwKKwkJCQlLRVJOX1dBUk5JTkcKKwkJCQkiJXM6IHNldF9ub3JtKCkgLSBUViBzdGFuZGFyZCBpcyBsb2NrZWQsIG5vcm0gd2FzIG5vdCBjaGFuZ2VkXG4iLAorCQkJCVpSX0RFVk5BTUUoenIpKTsKKwkJCW5vcm0gPSB6ci0+bm9ybTsKKwkJfQorCX0KKworCWlmIChub3JtICE9IFZJREVPX01PREVfQVVUTyAmJgorCSAgICAobm9ybSA8IDAgfHwgbm9ybSA+PSB6ci0+Y2FyZC5ub3JtcyB8fAorCSAgICAgIXpyLT5jYXJkLnR2bltub3JtXSkpIHsKKwkJZHByaW50aygxLAorCQkJS0VSTl9FUlIgIiVzOiBzZXRfbm9ybSgpIC0gdW5zdXBwb3J0ZWQgbm9ybSAlZFxuIiwKKwkJCVpSX0RFVk5BTUUoenIpLCBub3JtKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKG5vcm0gPT0gVklERU9fTU9ERV9BVVRPKSB7CisJCWludCBzdGF0dXM7CisKKwkJLyogaWYgd2UgaGF2ZSBhdXRvZGV0ZWN0LCAuLi4gKi8KKwkJc3RydWN0IHZpZGVvX2RlY29kZXJfY2FwYWJpbGl0eSBjYXBzOworCQlkZWNvZGVyX2NvbW1hbmQoenIsIERFQ09ERVJfR0VUX0NBUEFCSUxJVElFUywgJmNhcHMpOworCQlpZiAoIShjYXBzLmZsYWdzICYgVklERU9fREVDT0RFUl9BVVRPKSkgeworCQkJZHByaW50aygxLCBLRVJOX0VSUiAiJXM6IG5vcm09YXV0byB1bnN1cHBvcnRlZFxuIiwKKwkJCQlaUl9ERVZOQU1FKHpyKSk7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCisJCWRlY29kZXJfY29tbWFuZCh6ciwgREVDT0RFUl9TRVRfTk9STSwgJm5vcm0pOworCisJCS8qIGxldCBjaGFuZ2VzIGNvbWUgaW50byBlZmZlY3QgKi8KKwkJc3NsZWVwKDIpOworCisJCWRlY29kZXJfY29tbWFuZCh6ciwgREVDT0RFUl9HRVRfU1RBVFVTLCAmc3RhdHVzKTsKKwkJaWYgKCEoc3RhdHVzICYgREVDT0RFUl9TVEFUVVNfR09PRCkpIHsKKwkJCWRwcmludGsoMSwKKwkJCQlLRVJOX0VSUgorCQkJCSIlczogc2V0X25vcm0oKSAtIG5vIG5vcm0gZGV0ZWN0ZWRcbiIsCisJCQkJWlJfREVWTkFNRSh6cikpOworCQkJLyogcmVzZXQgbm9ybSAqLworCQkJZGVjb2Rlcl9jb21tYW5kKHpyLCBERUNPREVSX1NFVF9OT1JNLCAmenItPm5vcm0pOworCQkJcmV0dXJuIC1FSU87CisJCX0KKworCQlpZiAoc3RhdHVzICYgREVDT0RFUl9TVEFUVVNfTlRTQykKKwkJCW5vcm0gPSBWSURFT19NT0RFX05UU0M7CisJCWVsc2UgaWYgKHN0YXR1cyAmIERFQ09ERVJfU1RBVFVTX1NFQ0FNKQorCQkJbm9ybSA9IFZJREVPX01PREVfU0VDQU07CisJCWVsc2UKKwkJCW5vcm0gPSBWSURFT19NT0RFX1BBTDsKKwl9CisJenItPnRpbWluZyA9IHpyLT5jYXJkLnR2bltub3JtXTsKKwlub3JtX2VuY29kZXIgPSBub3JtOworCisJLyogV2Ugc3dpdGNoIG92ZXJsYXkgb2ZmIGFuZCBvbiBzaW5jZSBhIGNoYW5nZSBpbiB0aGUKKwkgKiBub3JtIG5lZWRzIGRpZmZlcmVudCBWRkUgc2V0dGluZ3MgKi8KKwlvbiA9IHpyLT5vdmVybGF5X2FjdGl2ZSAmJiAhenItPnY0bF9tZW1ncmFiX2FjdGl2ZTsKKwlpZiAob24pCisJCXpyMzYwNTdfb3ZlcmxheSh6ciwgMCk7CisKKwlkZWNvZGVyX2NvbW1hbmQoenIsIERFQ09ERVJfU0VUX05PUk0sICZub3JtKTsKKwllbmNvZGVyX2NvbW1hbmQoenIsIEVOQ09ERVJfU0VUX05PUk0sICZub3JtX2VuY29kZXIpOworCisJaWYgKG9uKQorCQl6cjM2MDU3X292ZXJsYXkoenIsIDEpOworCisJLyogTWFrZSBzdXJlIHRoZSBjaGFuZ2VzIGNvbWUgaW50byBlZmZlY3QgKi8KKwl6ci0+bm9ybSA9IG5vcm07CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludAorem9yYW5fc2V0X2lucHV0IChzdHJ1Y3Qgem9yYW4gKnpyLAorCQkgaW50ICAgICAgICAgICBpbnB1dCkKK3sKKwlpbnQgcmVhbGlucHV0OworCisJaWYgKGlucHV0ID09IHpyLT5pbnB1dCkgeworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoenItPnY0bF9idWZmZXJzLmFjdGl2ZSAhPSBaT1JBTl9GUkVFIHx8CisJICAgIHpyLT5qcGdfYnVmZmVycy5hY3RpdmUgIT0gWk9SQU5fRlJFRSkgeworCQlkcHJpbnRrKDEsCisJCQlLRVJOX1dBUk5JTkcKKwkJCSIlczogc2V0X2lucHV0KCkgY2FsbGVkIHdoaWxlIGluIHBsYXliYWNrL2NhcHR1cmUgbW9kZVxuIiwKKwkJCVpSX0RFVk5BTUUoenIpKTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisKKwlpZiAoaW5wdXQgPCAwIHx8IGlucHV0ID49IHpyLT5jYXJkLmlucHV0cykgeworCQlkcHJpbnRrKDEsCisJCQlLRVJOX0VSUgorCQkJIiVzOiBzZXRfaW5wdXQoKSAtIHVubnN1cHBvcnRlZCBpbnB1dCAlZFxuIiwKKwkJCVpSX0RFVk5BTUUoenIpLCBpbnB1dCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJlYWxpbnB1dCA9IHpyLT5jYXJkLmlucHV0W2lucHV0XS5tdXhzZWw7CisJenItPmlucHV0ID0gaW5wdXQ7CisKKwlkZWNvZGVyX2NvbW1hbmQoenIsIERFQ09ERVJfU0VUX0lOUFVULCAmcmVhbGlucHV0KTsKKworCXJldHVybiAwOworfQorCisvKgorICogICBpb2N0bCByb3V0aW5lCisgKi8KKworc3RhdGljIGludAorem9yYW5fZG9faW9jdGwgKHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCXN0cnVjdCBmaWxlICAqZmlsZSwKKwkJdW5zaWduZWQgaW50ICBjbWQsCisJCXZvaWQgICAgICAgICAqYXJnKQoreworCXN0cnVjdCB6b3Jhbl9maCAqZmggPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHpvcmFuICp6ciA9IGZoLT56cjsKKwkvKiBDQVJFRlVMOiB1c2VkIGluIG11bHRpcGxlIHBsYWNlcyBoZXJlICovCisJc3RydWN0IHpvcmFuX2pwZ19zZXR0aW5ncyBzZXR0aW5nczsKKworCS8qIHdlIG1pZ2h0IGhhdmUgb2xkZXIgYnVmZmVycyBseWluZyBhcm91bmQuLi4gV2UgZG9uJ3Qgd2FudAorCSAqIHRvIHdhaXQsIGJ1dCB3ZSBkbyB3YW50IHRvIHRyeSBjbGVhbmluZyB0aGVtIHVwIEFTQVAuIFNvCisJICogd2UgdHJ5IHRvIG9idGFpbiB0aGUgbG9jayBhbmQgZnJlZSB0aGVtLiBJZiB0aGF0IGZhaWxzLCB3ZQorCSAqIGRvbid0IGRvIGFueXRoaW5nIGFuZCB3YWl0IGZvciB0aGUgbmV4dCB0dXJuLiBJbiB0aGUgZW5kLAorCSAqIHpvcmFuX2Nsb3NlKCkgb3IgYSBuZXcgYWxsb2NhdGlvbiB3aWxsIHN0aWxsIGZyZWUgdGhlbS4uLgorCSAqIFRoaXMgaXMganVzdCBhICd0aGUgc29vbmVyIHRoZSBiZXR0ZXInIGV4dHJhICdmZWF0dXJlJworCSAqCisJICogV2UgZG9uJ3QgZnJlZSB0aGUgYnVmZmVycyByaWdodCBvbiBtdW5tYXAoKSBiZWNhdXNlIHRoYXQKKwkgKiBjYXVzZXMgb29wc2VzIChrZnJlZSgpIGluc2lkZSBtdW5tYXAoKSBvb3BzZXMgZm9yIG5vCisJICogYXBwYXJlbnQgcmVhc29uIC0gaXQncyBhbHNvIG5vdCByZXByb2R1Y2VhYmxlIGluIGFueSB3YXksCisJICogYnV0IG1vdmluZyB0aGUgZnJlZSBjb2RlIG91dHNpZGUgdGhlIG11bm1hcCgpIGhhbmRsZXIgZml4ZXMKKwkgKiBhbGwgdGhpcy4uLiBJZiBzb21lb25lIGtub3dzIHdoeSwgcGxlYXNlIGV4cGxhaW4gbWUgKFJvbmFsZCkKKwkgKi8KKwlpZiAobXV0ZXhfdHJ5bG9jaygmenItPnJlc291cmNlX2xvY2spKSB7CisJCS8qIHdlIG9idGFpbmVkIGl0ISBMZXQncyB0cnkgdG8gZnJlZSBzb21lIHRoaW5ncyAqLworCQlpZiAoZmgtPmpwZ19idWZmZXJzLnJlYWR5X3RvX2JlX2ZyZWVkKQorCQkJanBnX2ZidWZmZXJfZnJlZShmaWxlKTsKKwkJaWYgKGZoLT52NGxfYnVmZmVycy5yZWFkeV90b19iZV9mcmVlZCkKKwkJCXY0bF9mYnVmZmVyX2ZyZWUoZmlsZSk7CisKKwkJbXV0ZXhfdW5sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7CisJfQorCisJc3dpdGNoIChjbWQpIHsKKworCWNhc2UgVklESU9DR0NBUDoKKwl7CisJCXN0cnVjdCB2aWRlb19jYXBhYmlsaXR5ICp2Y2FwID0gYXJnOworCisJCWRwcmludGsoMywgS0VSTl9ERUJVRyAiJXM6IFZJRElPQ0dDQVBcbiIsIFpSX0RFVk5BTUUoenIpKTsKKworCQltZW1zZXQodmNhcCwgMCwgc2l6ZW9mKHN0cnVjdCB2aWRlb19jYXBhYmlsaXR5KSk7CisJCXN0cm5jcHkodmNhcC0+bmFtZSwgWlJfREVWTkFNRSh6ciksIHNpemVvZih2Y2FwLT5uYW1lKS0xKTsKKwkJdmNhcC0+dHlwZSA9IFpPUkFOX1ZJRF9UWVBFOworCisJCXZjYXAtPmNoYW5uZWxzID0genItPmNhcmQuaW5wdXRzOworCQl2Y2FwLT5hdWRpb3MgPSAwOworCQltdXRleF9sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7CisJCXZjYXAtPm1heHdpZHRoID0gQlVaX01BWF9XSURUSDsKKwkJdmNhcC0+bWF4aGVpZ2h0ID0gQlVaX01BWF9IRUlHSFQ7CisJCXZjYXAtPm1pbndpZHRoID0gQlVaX01JTl9XSURUSDsKKwkJdmNhcC0+bWluaGVpZ2h0ID0gQlVaX01JTl9IRUlHSFQ7CisJCW11dGV4X3VubG9jaygmenItPnJlc291cmNlX2xvY2spOworCisJCXJldHVybiAwOworCX0KKwkJYnJlYWs7CisKKwljYXNlIFZJRElPQ0dDSEFOOgorCXsKKwkJc3RydWN0IHZpZGVvX2NoYW5uZWwgKnZjaGFuID0gYXJnOworCQlpbnQgY2hhbm5lbCA9IHZjaGFuLT5jaGFubmVsOworCisJCWRwcmludGsoMywgS0VSTl9ERUJVRyAiJXM6IFZJRElPQ0dDSEFOIC0gY2hhbm5lbD0lZFxuIiwKKwkJCVpSX0RFVk5BTUUoenIpLCB2Y2hhbi0+Y2hhbm5lbCk7CisKKwkJbWVtc2V0KHZjaGFuLCAwLCBzaXplb2Yoc3RydWN0IHZpZGVvX2NoYW5uZWwpKTsKKwkJaWYgKGNoYW5uZWwgPiB6ci0+Y2FyZC5pbnB1dHMgfHwgY2hhbm5lbCA8IDApIHsKKwkJCWRwcmludGsoMSwKKwkJCQlLRVJOX0VSUgorCQkJCSIlczogVklESU9DR0NIQU4gb24gbm90IGV4aXN0aW5nIGNoYW5uZWwgJWRcbiIsCisJCQkJWlJfREVWTkFNRSh6ciksIGNoYW5uZWwpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKworCQlzdHJjcHkodmNoYW4tPm5hbWUsIHpyLT5jYXJkLmlucHV0W2NoYW5uZWxdLm5hbWUpOworCisJCXZjaGFuLT50dW5lcnMgPSAwOworCQl2Y2hhbi0+ZmxhZ3MgPSAwOworCQl2Y2hhbi0+dHlwZSA9IFZJREVPX1RZUEVfQ0FNRVJBOworCQltdXRleF9sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7CisJCXZjaGFuLT5ub3JtID0genItPm5vcm07CisJCW11dGV4X3VubG9jaygmenItPnJlc291cmNlX2xvY2spOworCQl2Y2hhbi0+Y2hhbm5lbCA9IGNoYW5uZWw7CisKKwkJcmV0dXJuIDA7CisJfQorCQlicmVhazsKKworCQkvKiBSSjogdGhlIGRvY3VtZW50YXRpb24gYXQgaHR0cDovL3JvYWRydW5uZXIuc3dhbnNlYS5saW51eC5vcmcudWsvdjRsYXBpLnNodG1sIHNheXM6CisJCSAqCisJCSAqICogIlRoZSBWSURJT0NTQ0hBTiBpb2N0bCB0YWtlcyBhbiBpbnRlZ2VyIGFyZ3VtZW50IGFuZCBzd2l0Y2hlcyB0aGUgY2FwdHVyZSB0byB0aGlzIGlucHV0LiIKKwkJICogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF5eXl5eXl4KKwkJICogKiBUaGUgZmFtb3MgQlRUViBkcml2ZXIgaGFzIGl0IGltcGxlbWVudGVkIHdpdGggYSBzdHJ1Y3QgdmlkZW9fY2hhbm5lbCBhcmd1bWVudAorCQkgKiAqIGFuZCB3ZSBmb2xsb3cgaXQgZm9yIGNvbXBhdGliaWxpdHkgcmVhc29ucworCQkgKiAqCisJCSAqICogQlRXOiB0aGlzIGlzIHRoZSBvbmx5IHdheSB0aGUgdXNlciBjYW4gc2V0IHRoZSBub3JtIQorCQkgKi8KKworCWNhc2UgVklESU9DU0NIQU46CisJeworCQlzdHJ1Y3QgdmlkZW9fY2hhbm5lbCAqdmNoYW4gPSBhcmc7CisJCWludCByZXM7CisKKwkJZHByaW50aygzLAorCQkJS0VSTl9ERUJVRworCQkJIiVzOiBWSURJT0NTQ0hBTiAtIGNoYW5uZWw9JWQsIG5vcm09JWRcbiIsCisJCQlaUl9ERVZOQU1FKHpyKSwgdmNoYW4tPmNoYW5uZWwsIHZjaGFuLT5ub3JtKTsKKworCQltdXRleF9sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7CisJCWlmICgocmVzID0gem9yYW5fc2V0X2lucHV0KHpyLCB2Y2hhbi0+Y2hhbm5lbCkpKQorCQkJZ290byBzY2hhbl91bmxvY2tfYW5kX3JldHVybjsKKwkJaWYgKChyZXMgPSB6b3Jhbl9zZXRfbm9ybSh6ciwgdmNoYW4tPm5vcm0pKSkKKwkJCWdvdG8gc2NoYW5fdW5sb2NrX2FuZF9yZXR1cm47CisKKwkJLyogTWFrZSBzdXJlIHRoZSBjaGFuZ2VzIGNvbWUgaW50byBlZmZlY3QgKi8KKwkJcmVzID0gd2FpdF9ncmFiX3BlbmRpbmcoenIpOworCXNjaGFuX3VubG9ja19hbmRfcmV0dXJuOgorCQltdXRleF91bmxvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKKwkJcmV0dXJuIHJlczsKKwl9CisJCWJyZWFrOworCisJY2FzZSBWSURJT0NHUElDVDoKKwl7CisJCXN0cnVjdCB2aWRlb19waWN0dXJlICp2cGljdCA9IGFyZzsKKworCQlkcHJpbnRrKDMsIEtFUk5fREVCVUcgIiVzOiBWSURJT0NHUElDVFxuIiwgWlJfREVWTkFNRSh6cikpOworCisJCW1lbXNldCh2cGljdCwgMCwgc2l6ZW9mKHN0cnVjdCB2aWRlb19waWN0dXJlKSk7CisJCW11dGV4X2xvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKKwkJdnBpY3QtPmh1ZSA9IHpyLT5odWU7CisJCXZwaWN0LT5icmlnaHRuZXNzID0genItPmJyaWdodG5lc3M7CisJCXZwaWN0LT5jb250cmFzdCA9IHpyLT5jb250cmFzdDsKKwkJdnBpY3QtPmNvbG91ciA9IHpyLT5zYXR1cmF0aW9uOworCQlpZiAoZmgtPm92ZXJsYXlfc2V0dGluZ3MuZm9ybWF0KSB7CisJCQl2cGljdC0+ZGVwdGggPSBmaC0+b3ZlcmxheV9zZXR0aW5ncy5mb3JtYXQtPmRlcHRoOworCQkJdnBpY3QtPnBhbGV0dGUgPSBmaC0+b3ZlcmxheV9zZXR0aW5ncy5mb3JtYXQtPnBhbGV0dGU7CisJCX0gZWxzZSB7CisJCQl2cGljdC0+ZGVwdGggPSAwOworCQl9CisJCW11dGV4X3VubG9jaygmenItPnJlc291cmNlX2xvY2spOworCisJCXJldHVybiAwOworCX0KKwkJYnJlYWs7CisKKwljYXNlIFZJRElPQ1NQSUNUOgorCXsKKwkJc3RydWN0IHZpZGVvX3BpY3R1cmUgKnZwaWN0ID0gYXJnOworCQlpbnQgaTsKKworCQlkcHJpbnRrKDMsCisJCQlLRVJOX0RFQlVHCisJCQkiJXM6IFZJRElPQ1NQSUNUIC0gYnJpPSVkLCBodWU9JWQsIGNvbD0lZCwgY29uPSVkLCBkZXA9JWQsIHBhbD0lZFxuIiwKKwkJCVpSX0RFVk5BTUUoenIpLCB2cGljdC0+YnJpZ2h0bmVzcywgdnBpY3QtPmh1ZSwKKwkJCXZwaWN0LT5jb2xvdXIsIHZwaWN0LT5jb250cmFzdCwgdnBpY3QtPmRlcHRoLAorCQkJdnBpY3QtPnBhbGV0dGUpOworCisJCWZvciAoaSA9IDA7IGkgPCBOVU1fRk9STUFUUzsgaSsrKSB7CisJCQljb25zdCBzdHJ1Y3Qgem9yYW5fZm9ybWF0ICpmbXQgPSAmem9yYW5fZm9ybWF0c1tpXTsKKworCQkJaWYgKGZtdC0+cGFsZXR0ZSAhPSAtMSAmJgorCQkJICAgIGZtdC0+ZmxhZ3MgJiBaT1JBTl9GT1JNQVRfT1ZFUkxBWSAmJgorCQkJICAgIGZtdC0+cGFsZXR0ZSA9PSB2cGljdC0+cGFsZXR0ZSAmJgorCQkJICAgIGZtdC0+ZGVwdGggPT0gdnBpY3QtPmRlcHRoKQorCQkJCWJyZWFrOworCQl9CisJCWlmIChpID09IE5VTV9GT1JNQVRTKSB7CisJCQlkcHJpbnRrKDEsCisJCQkJS0VSTl9FUlIKKwkJCQkiJXM6IFZJRElPQ1NQSUNUIC0gSW52YWxpZCBwYWxldHRlICVkXG4iLAorCQkJCVpSX0RFVk5BTUUoenIpLCB2cGljdC0+cGFsZXR0ZSk7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCisJCW11dGV4X2xvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKKworCQlkZWNvZGVyX2NvbW1hbmQoenIsIERFQ09ERVJfU0VUX1BJQ1RVUkUsIHZwaWN0KTsKKworCQl6ci0+aHVlID0gdnBpY3QtPmh1ZTsKKwkJenItPmNvbnRyYXN0ID0gdnBpY3QtPmNvbnRyYXN0OworCQl6ci0+c2F0dXJhdGlvbiA9IHZwaWN0LT5jb2xvdXI7CisJCXpyLT5icmlnaHRuZXNzID0gdnBpY3QtPmJyaWdodG5lc3M7CisKKwkJZmgtPm92ZXJsYXlfc2V0dGluZ3MuZm9ybWF0ID0gJnpvcmFuX2Zvcm1hdHNbaV07CisKKwkJbXV0ZXhfdW5sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7CisKKwkJcmV0dXJuIDA7CisJfQorCQlicmVhazsKKworCWNhc2UgVklESU9DQ0FQVFVSRToKKwl7CisJCWludCAqb24gPSBhcmcsIHJlczsKKworCQlkcHJpbnRrKDMsIEtFUk5fREVCVUcgIiVzOiBWSURJT0NDQVBUVVJFIC0gb249JWRcbiIsCisJCQlaUl9ERVZOQU1FKHpyKSwgKm9uKTsKKworCQltdXRleF9sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7CisJCXJlcyA9IHNldHVwX292ZXJsYXkoZmlsZSwgKm9uKTsKKwkJbXV0ZXhfdW5sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7CisKKwkJcmV0dXJuIHJlczsKKwl9CisJCWJyZWFrOworCisJY2FzZSBWSURJT0NHV0lOOgorCXsKKwkJc3RydWN0IHZpZGVvX3dpbmRvdyAqdndpbiA9IGFyZzsKKworCQlkcHJpbnRrKDMsIEtFUk5fREVCVUcgIiVzOiBWSURJT0NHV0lOXG4iLCBaUl9ERVZOQU1FKHpyKSk7CisKKwkJbWVtc2V0KHZ3aW4sIDAsIHNpemVvZihzdHJ1Y3QgdmlkZW9fd2luZG93KSk7CisJCW11dGV4X2xvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKKwkJdndpbi0+eCA9IGZoLT5vdmVybGF5X3NldHRpbmdzLng7CisJCXZ3aW4tPnkgPSBmaC0+b3ZlcmxheV9zZXR0aW5ncy55OworCQl2d2luLT53aWR0aCA9IGZoLT5vdmVybGF5X3NldHRpbmdzLndpZHRoOworCQl2d2luLT5oZWlnaHQgPSBmaC0+b3ZlcmxheV9zZXR0aW5ncy5oZWlnaHQ7CisJCW11dGV4X3VubG9jaygmenItPnJlc291cmNlX2xvY2spOworCQl2d2luLT5jbGlwY291bnQgPSAwOworCQlyZXR1cm4gMDsKKwl9CisJCWJyZWFrOworCisJY2FzZSBWSURJT0NTV0lOOgorCXsKKwkJc3RydWN0IHZpZGVvX3dpbmRvdyAqdndpbiA9IGFyZzsKKwkJaW50IHJlczsKKworCQlkcHJpbnRrKDMsCisJCQlLRVJOX0RFQlVHCisJCQkiJXM6IFZJRElPQ1NXSU4gLSB4PSVkLCB5PSVkLCB3PSVkLCBoPSVkLCBjbGlwY291bnQ9JWRcbiIsCisJCQlaUl9ERVZOQU1FKHpyKSwgdndpbi0+eCwgdndpbi0+eSwgdndpbi0+d2lkdGgsCisJCQl2d2luLT5oZWlnaHQsIHZ3aW4tPmNsaXBjb3VudCk7CisKKwkJbXV0ZXhfbG9jaygmenItPnJlc291cmNlX2xvY2spOworCQlyZXMgPQorCQkgICAgc2V0dXBfd2luZG93KGZpbGUsIHZ3aW4tPngsIHZ3aW4tPnksIHZ3aW4tPndpZHRoLAorCQkJCSB2d2luLT5oZWlnaHQsIHZ3aW4tPmNsaXBzLAorCQkJCSB2d2luLT5jbGlwY291bnQsIE5VTEwpOworCQltdXRleF91bmxvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKKworCQlyZXR1cm4gcmVzOworCX0KKwkJYnJlYWs7CisKKwljYXNlIFZJRElPQ0dGQlVGOgorCXsKKwkJc3RydWN0IHZpZGVvX2J1ZmZlciAqdmJ1ZiA9IGFyZzsKKworCQlkcHJpbnRrKDMsIEtFUk5fREVCVUcgIiVzOiBWSURJT0NHRkJVRlxuIiwgWlJfREVWTkFNRSh6cikpOworCisJCW11dGV4X2xvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKKwkJKnZidWYgPSB6ci0+YnVmZmVyOworCQltdXRleF91bmxvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKKwkJcmV0dXJuIDA7CisJfQorCQlicmVhazsKKworCWNhc2UgVklESU9DU0ZCVUY6CisJeworCQlzdHJ1Y3QgdmlkZW9fYnVmZmVyICp2YnVmID0gYXJnOworCQlpbnQgaSwgcmVzID0gMDsKKworCQlkcHJpbnRrKDMsCisJCQlLRVJOX0RFQlVHCisJCQkiJXM6IFZJRElPQ1NGQlVGIC0gYmFzZT0lcCwgdz0lZCwgaD0lZCwgZGVwdGg9JWQsIGJwbD0lZFxuIiwKKwkJCVpSX0RFVk5BTUUoenIpLCB2YnVmLT5iYXNlLCB2YnVmLT53aWR0aCwKKwkJCXZidWYtPmhlaWdodCwgdmJ1Zi0+ZGVwdGgsIHZidWYtPmJ5dGVzcGVybGluZSk7CisKKwkJZm9yIChpID0gMDsgaSA8IE5VTV9GT1JNQVRTOyBpKyspCisJCQlpZiAoem9yYW5fZm9ybWF0c1tpXS5kZXB0aCA9PSB2YnVmLT5kZXB0aCkKKwkJCQlicmVhazsKKwkJaWYgKGkgPT0gTlVNX0ZPUk1BVFMpIHsKKwkJCWRwcmludGsoMSwKKwkJCQlLRVJOX0VSUgorCQkJCSIlczogVklESU9DU0ZCVUYgLSBpbnZhbGlkIGZidWYgZGVwdGggJWRcbiIsCisJCQkJWlJfREVWTkFNRSh6ciksIHZidWYtPmRlcHRoKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisKKwkJbXV0ZXhfbG9jaygmenItPnJlc291cmNlX2xvY2spOworCQlyZXMgPQorCQkgICAgc2V0dXBfZmJ1ZmZlcihmaWxlLCB2YnVmLT5iYXNlLCAmem9yYW5fZm9ybWF0c1tpXSwKKwkJCQkgIHZidWYtPndpZHRoLCB2YnVmLT5oZWlnaHQsCisJCQkJICB2YnVmLT5ieXRlc3BlcmxpbmUpOworCQltdXRleF91bmxvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKKworCQlyZXR1cm4gcmVzOworCX0KKwkJYnJlYWs7CisKKwljYXNlIFZJRElPQ1NZTkM6CisJeworCQlpbnQgKmZyYW1lID0gYXJnLCByZXM7CisKKwkJZHByaW50aygzLCBLRVJOX0RFQlVHICIlczogVklESU9DU1lOQyAtIGZyYW1lPSVkXG4iLAorCQkJWlJfREVWTkFNRSh6ciksICpmcmFtZSk7CisKKwkJbXV0ZXhfbG9jaygmenItPnJlc291cmNlX2xvY2spOworCQlyZXMgPSB2NGxfc3luYyhmaWxlLCAqZnJhbWUpOworCQltdXRleF91bmxvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKKwkJaWYgKCFyZXMpCisJCQl6ci0+djRsX3N5bmNfdGFpbCsrOworCQlyZXR1cm4gcmVzOworCX0KKwkJYnJlYWs7CisKKwljYXNlIFZJRElPQ01DQVBUVVJFOgorCXsKKwkJc3RydWN0IHZpZGVvX21tYXAgKnZtYXAgPSBhcmc7CisJCWludCByZXM7CisKKwkJZHByaW50aygzLAorCQkJS0VSTl9ERUJVRworCQkJIiVzOiBWSURJT0NNQ0FQVFVSRSAtIGZyYW1lPSVkLCBnZW9tPSVkeCVkLCBmbXQ9JWRcbiIsCisJCQlaUl9ERVZOQU1FKHpyKSwgdm1hcC0+ZnJhbWUsIHZtYXAtPndpZHRoLCB2bWFwLT5oZWlnaHQsCisJCQl2bWFwLT5mb3JtYXQpOworCisJCW11dGV4X2xvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKKwkJcmVzID0gdjRsX2dyYWIoZmlsZSwgdm1hcCk7CisJCW11dGV4X3VubG9jaygmenItPnJlc291cmNlX2xvY2spOworCQlyZXR1cm4gcmVzOworCX0KKwkJYnJlYWs7CisKKwljYXNlIFZJRElPQ0dNQlVGOgorCXsKKwkJc3RydWN0IHZpZGVvX21idWYgKnZtYnVmID0gYXJnOworCQlpbnQgaSwgcmVzID0gMDsKKworCQlkcHJpbnRrKDMsIEtFUk5fREVCVUcgIiVzOiBWSURJT0NHTUJVRlxuIiwgWlJfREVWTkFNRSh6cikpOworCisJCXZtYnVmLT5zaXplID0KKwkJICAgIGZoLT52NGxfYnVmZmVycy5udW1fYnVmZmVycyAqCisJCSAgICBmaC0+djRsX2J1ZmZlcnMuYnVmZmVyX3NpemU7CisJCXZtYnVmLT5mcmFtZXMgPSBmaC0+djRsX2J1ZmZlcnMubnVtX2J1ZmZlcnM7CisJCWZvciAoaSA9IDA7IGkgPCB2bWJ1Zi0+ZnJhbWVzOyBpKyspIHsKKwkJCXZtYnVmLT5vZmZzZXRzW2ldID0KKwkJCSAgICBpICogZmgtPnY0bF9idWZmZXJzLmJ1ZmZlcl9zaXplOworCQl9CisKKwkJbXV0ZXhfbG9jaygmenItPnJlc291cmNlX2xvY2spOworCisJCWlmIChmaC0+anBnX2J1ZmZlcnMuYWxsb2NhdGVkIHx8IGZoLT52NGxfYnVmZmVycy5hbGxvY2F0ZWQpIHsKKwkJCWRwcmludGsoMSwKKwkJCQlLRVJOX0VSUgorCQkJCSIlczogVklESU9DR01CVUYgLSBidWZmZXJzIGFscmVhZHkgYWxsb2NhdGVkXG4iLAorCQkJCVpSX0RFVk5BTUUoenIpKTsKKwkJCXJlcyA9IC1FSU5WQUw7CisJCQlnb3RvIHY0bDFyZXFidWZfdW5sb2NrX2FuZF9yZXR1cm47CisJCX0KKworCQlpZiAodjRsX2ZidWZmZXJfYWxsb2MoZmlsZSkpIHsKKwkJCXJlcyA9IC1FTk9NRU07CisJCQlnb3RvIHY0bDFyZXFidWZfdW5sb2NrX2FuZF9yZXR1cm47CisJCX0KKworCQkvKiBUaGUgbmV4dCBtbWFwIHdpbGwgbWFwIHRoZSBWNEwgYnVmZmVycyAqLworCQlmaC0+bWFwX21vZGUgPSBaT1JBTl9NQVBfTU9ERV9SQVc7CisJdjRsMXJlcWJ1Zl91bmxvY2tfYW5kX3JldHVybjoKKwkJbXV0ZXhfdW5sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7CisKKwkJcmV0dXJuIHJlczsKKwl9CisJCWJyZWFrOworCisJY2FzZSBWSURJT0NHVU5JVDoKKwl7CisJCXN0cnVjdCB2aWRlb191bml0ICp2dW5pdCA9IGFyZzsKKworCQlkcHJpbnRrKDMsIEtFUk5fREVCVUcgIiVzOiBWSURJT0NHVU5JVFxuIiwgWlJfREVWTkFNRSh6cikpOworCisJCXZ1bml0LT52aWRlbyA9IHpyLT52aWRlb19kZXYtPm1pbm9yOworCQl2dW5pdC0+dmJpID0gVklERU9fTk9fVU5JVDsKKwkJdnVuaXQtPnJhZGlvID0gVklERU9fTk9fVU5JVDsKKwkJdnVuaXQtPmF1ZGlvID0gVklERU9fTk9fVU5JVDsKKwkJdnVuaXQtPnRlbGV0ZXh0ID0gVklERU9fTk9fVU5JVDsKKworCQlyZXR1cm4gMDsKKwl9CisJCWJyZWFrOworCisJCS8qCisJCSAqIFJKOiBJbiBwcmluY2lwYWwgd2UgY291bGQgc3VwcG9ydCBzdWJjYXB0dXJlcyBmb3IgVjRMIGdyYWJiaW5nLgorCQkgKiAgICAgTm90IGV2ZW4gdGhlIGZhbW91cyBCVFRWIGRyaXZlciBoYXMgdGhlbSwgaG93ZXZlci4KKwkJICogICAgIElmIHRoZXJlIHNob3VsZCBiZSBhIHN0cm9uZyBkZW1hbmQsIG9uZSBjb3VsZCBjb25zaWRlcgorCQkgKiAgICAgdG8gaW1wbGVtZW50IHRoZW0uCisJCSAqLworCWNhc2UgVklESU9DR0NBUFRVUkU6CisJeworCQlkcHJpbnRrKDMsIEtFUk5fRVJSICIlczogVklESU9DR0NBUFRVUkUgbm90IHN1cHBvcnRlZFxuIiwKKwkJCVpSX0RFVk5BTUUoenIpKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCQlicmVhazsKKworCWNhc2UgVklESU9DU0NBUFRVUkU6CisJeworCQlkcHJpbnRrKDMsIEtFUk5fRVJSICIlczogVklESU9DU0NBUFRVUkUgbm90IHN1cHBvcnRlZFxuIiwKKwkJCVpSX0RFVk5BTUUoenIpKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCQlicmVhazsKKworCWNhc2UgQlVaSU9DX0dfUEFSQU1TOgorCXsKKwkJc3RydWN0IHpvcmFuX3BhcmFtcyAqYnBhcmFtcyA9IGFyZzsKKworCQlkcHJpbnRrKDMsIEtFUk5fREVCVUcgIiVzOiBCVVpJT0NfR19QQVJBTVNcbiIsIFpSX0RFVk5BTUUoenIpKTsKKworCQltZW1zZXQoYnBhcmFtcywgMCwgc2l6ZW9mKHN0cnVjdCB6b3Jhbl9wYXJhbXMpKTsKKwkJYnBhcmFtcy0+bWFqb3JfdmVyc2lvbiA9IE1BSk9SX1ZFUlNJT047CisJCWJwYXJhbXMtPm1pbm9yX3ZlcnNpb24gPSBNSU5PUl9WRVJTSU9OOworCisJCW11dGV4X2xvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKKworCQlicGFyYW1zLT5ub3JtID0genItPm5vcm07CisJCWJwYXJhbXMtPmlucHV0ID0genItPmlucHV0OworCisJCWJwYXJhbXMtPmRlY2ltYXRpb24gPSBmaC0+anBnX3NldHRpbmdzLmRlY2ltYXRpb247CisJCWJwYXJhbXMtPkhvckRjbSA9IGZoLT5qcGdfc2V0dGluZ3MuSG9yRGNtOworCQlicGFyYW1zLT5WZXJEY20gPSBmaC0+anBnX3NldHRpbmdzLlZlckRjbTsKKwkJYnBhcmFtcy0+VG1wRGNtID0gZmgtPmpwZ19zZXR0aW5ncy5UbXBEY207CisJCWJwYXJhbXMtPmZpZWxkX3Blcl9idWZmID0gZmgtPmpwZ19zZXR0aW5ncy5maWVsZF9wZXJfYnVmZjsKKwkJYnBhcmFtcy0+aW1nX3ggPSBmaC0+anBnX3NldHRpbmdzLmltZ194OworCQlicGFyYW1zLT5pbWdfeSA9IGZoLT5qcGdfc2V0dGluZ3MuaW1nX3k7CisJCWJwYXJhbXMtPmltZ193aWR0aCA9IGZoLT5qcGdfc2V0dGluZ3MuaW1nX3dpZHRoOworCQlicGFyYW1zLT5pbWdfaGVpZ2h0ID0gZmgtPmpwZ19zZXR0aW5ncy5pbWdfaGVpZ2h0OworCQlicGFyYW1zLT5vZGRfZXZlbiA9IGZoLT5qcGdfc2V0dGluZ3Mub2RkX2V2ZW47CisKKwkJYnBhcmFtcy0+cXVhbGl0eSA9IGZoLT5qcGdfc2V0dGluZ3MuanBnX2NvbXAucXVhbGl0eTsKKwkJYnBhcmFtcy0+QVBQbiA9IGZoLT5qcGdfc2V0dGluZ3MuanBnX2NvbXAuQVBQbjsKKwkJYnBhcmFtcy0+QVBQX2xlbiA9IGZoLT5qcGdfc2V0dGluZ3MuanBnX2NvbXAuQVBQX2xlbjsKKwkJbWVtY3B5KGJwYXJhbXMtPkFQUF9kYXRhLAorCQkgICAgICAgZmgtPmpwZ19zZXR0aW5ncy5qcGdfY29tcC5BUFBfZGF0YSwKKwkJICAgICAgIHNpemVvZihicGFyYW1zLT5BUFBfZGF0YSkpOworCQlicGFyYW1zLT5DT01fbGVuID0genItPmpwZ19zZXR0aW5ncy5qcGdfY29tcC5DT01fbGVuOworCQltZW1jcHkoYnBhcmFtcy0+Q09NX2RhdGEsCisJCSAgICAgICBmaC0+anBnX3NldHRpbmdzLmpwZ19jb21wLkNPTV9kYXRhLAorCQkgICAgICAgc2l6ZW9mKGJwYXJhbXMtPkNPTV9kYXRhKSk7CisJCWJwYXJhbXMtPmpwZWdfbWFya2VycyA9CisJCSAgICBmaC0+anBnX3NldHRpbmdzLmpwZ19jb21wLmpwZWdfbWFya2VyczsKKworCQltdXRleF91bmxvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKKworCQlicGFyYW1zLT5WRklGT19GQiA9IDA7CisKKwkJcmV0dXJuIDA7CisJfQorCQlicmVhazsKKworCWNhc2UgQlVaSU9DX1NfUEFSQU1TOgorCXsKKwkJc3RydWN0IHpvcmFuX3BhcmFtcyAqYnBhcmFtcyA9IGFyZzsKKwkJaW50IHJlcyA9IDA7CisKKwkJZHByaW50aygzLCBLRVJOX0RFQlVHICIlczogQlVaSU9DX1NfUEFSQU1TXG4iLCBaUl9ERVZOQU1FKHpyKSk7CisKKwkJc2V0dGluZ3MuZGVjaW1hdGlvbiA9IGJwYXJhbXMtPmRlY2ltYXRpb247CisJCXNldHRpbmdzLkhvckRjbSA9IGJwYXJhbXMtPkhvckRjbTsKKwkJc2V0dGluZ3MuVmVyRGNtID0gYnBhcmFtcy0+VmVyRGNtOworCQlzZXR0aW5ncy5UbXBEY20gPSBicGFyYW1zLT5UbXBEY207CisJCXNldHRpbmdzLmZpZWxkX3Blcl9idWZmID0gYnBhcmFtcy0+ZmllbGRfcGVyX2J1ZmY7CisJCXNldHRpbmdzLmltZ194ID0gYnBhcmFtcy0+aW1nX3g7CisJCXNldHRpbmdzLmltZ195ID0gYnBhcmFtcy0+aW1nX3k7CisJCXNldHRpbmdzLmltZ193aWR0aCA9IGJwYXJhbXMtPmltZ193aWR0aDsKKwkJc2V0dGluZ3MuaW1nX2hlaWdodCA9IGJwYXJhbXMtPmltZ19oZWlnaHQ7CisJCXNldHRpbmdzLm9kZF9ldmVuID0gYnBhcmFtcy0+b2RkX2V2ZW47CisKKwkJc2V0dGluZ3MuanBnX2NvbXAucXVhbGl0eSA9IGJwYXJhbXMtPnF1YWxpdHk7CisJCXNldHRpbmdzLmpwZ19jb21wLkFQUG4gPSBicGFyYW1zLT5BUFBuOworCQlzZXR0aW5ncy5qcGdfY29tcC5BUFBfbGVuID0gYnBhcmFtcy0+QVBQX2xlbjsKKwkJbWVtY3B5KHNldHRpbmdzLmpwZ19jb21wLkFQUF9kYXRhLCBicGFyYW1zLT5BUFBfZGF0YSwKKwkJICAgICAgIHNpemVvZihicGFyYW1zLT5BUFBfZGF0YSkpOworCQlzZXR0aW5ncy5qcGdfY29tcC5DT01fbGVuID0gYnBhcmFtcy0+Q09NX2xlbjsKKwkJbWVtY3B5KHNldHRpbmdzLmpwZ19jb21wLkNPTV9kYXRhLCBicGFyYW1zLT5DT01fZGF0YSwKKwkJICAgICAgIHNpemVvZihicGFyYW1zLT5DT01fZGF0YSkpOworCQlzZXR0aW5ncy5qcGdfY29tcC5qcGVnX21hcmtlcnMgPSBicGFyYW1zLT5qcGVnX21hcmtlcnM7CisKKwkJbXV0ZXhfbG9jaygmenItPnJlc291cmNlX2xvY2spOworCisJCWlmICh6ci0+Y29kZWNfbW9kZSAhPSBCVVpfTU9ERV9JRExFKSB7CisJCQlkcHJpbnRrKDEsCisJCQkJS0VSTl9FUlIKKwkJCQkiJXM6IEJVWklPQ19TX1BBUkFNUyBjYWxsZWQsIGJ1dCBCdXogaW4gY2FwdHVyZS9wbGF5YmFjayBtb2RlXG4iLAorCQkJCVpSX0RFVk5BTUUoenIpKTsKKwkJCXJlcyA9IC1FSU5WQUw7CisJCQlnb3RvIHNwYXJhbXNfdW5sb2NrX2FuZF9yZXR1cm47CisJCX0KKworCQkvKiBDaGVjayB0aGUgcGFyYW1zIGZpcnN0IGJlZm9yZSBvdmVyd3JpdGluZyBvdXIKKwkJICogbnRlcm5hbCB2YWx1ZXMgKi8KKwkJaWYgKHpvcmFuX2NoZWNrX2pwZ19zZXR0aW5ncyh6ciwgJnNldHRpbmdzKSkgeworCQkJcmVzID0gLUVJTlZBTDsKKwkJCWdvdG8gc3BhcmFtc191bmxvY2tfYW5kX3JldHVybjsKKwkJfQorCisJCWZoLT5qcGdfc2V0dGluZ3MgPSBzZXR0aW5nczsKKwlzcGFyYW1zX3VubG9ja19hbmRfcmV0dXJuOgorCQltdXRleF91bmxvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKKworCQlyZXR1cm4gcmVzOworCX0KKwkJYnJlYWs7CisKKwljYXNlIEJVWklPQ19SRVFCVUZTOgorCXsKKwkJc3RydWN0IHpvcmFuX3JlcXVlc3RidWZmZXJzICpicmVxID0gYXJnOworCQlpbnQgcmVzID0gMDsKKworCQlkcHJpbnRrKDMsCisJCQlLRVJOX0RFQlVHCisJCQkiJXM6IEJVWklPQ19SRVFCVUZTIC0gY291bnQ9JWx1LCBzaXplPSVsdVxuIiwKKwkJCVpSX0RFVk5BTUUoenIpLCBicmVxLT5jb3VudCwgYnJlcS0+c2l6ZSk7CisKKwkJLyogRW5mb3JjZSByZWFzb25hYmxlIGxvd2VyIGFuZCB1cHBlciBsaW1pdHMgKi8KKwkJaWYgKGJyZXEtPmNvdW50IDwgNCkKKwkJCWJyZXEtPmNvdW50ID0gNDsJLyogQ291bGQgYmUgY2hvb3NlbiBzbWFsbGVyICovCisJCWlmIChicmVxLT5jb3VudCA+IGpwZ19uYnVmcykKKwkJCWJyZXEtPmNvdW50ID0ganBnX25idWZzOworCQlicmVxLT5zaXplID0gUEFHRV9BTElHTihicmVxLT5zaXplKTsKKwkJaWYgKGJyZXEtPnNpemUgPCA4MTkyKQorCQkJYnJlcS0+c2l6ZSA9IDgxOTI7CS8qIEFyYml0cmFyeSAqLworCQkvKiBicmVxLT5zaXplIGlzIGxpbWl0ZWQgYnkgMSBwYWdlIGZvciB0aGUgc3RhdF9jb20KKwkJICogdGFibGVzIHRvIGEgTWF4aW11bSBvZiAyIE1CICovCisJCWlmIChicmVxLT5zaXplID4ganBnX2J1ZnNpemUpCisJCQlicmVxLT5zaXplID0ganBnX2J1ZnNpemU7CisJCWlmIChmaC0+anBnX2J1ZmZlcnMubmVlZF9jb250aWd1b3VzICYmCisJCSAgICBicmVxLT5zaXplID4gTUFYX0tNQUxMT0NfTUVNKQorCQkJYnJlcS0+c2l6ZSA9IE1BWF9LTUFMTE9DX01FTTsKKworCQltdXRleF9sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7CisKKwkJaWYgKGZoLT5qcGdfYnVmZmVycy5hbGxvY2F0ZWQgfHwgZmgtPnY0bF9idWZmZXJzLmFsbG9jYXRlZCkgeworCQkJZHByaW50aygxLAorCQkJCUtFUk5fRVJSCisJCQkJIiVzOiBCVVpJT0NfUkVRQlVGUyAtIGJ1ZmZlcnMgYWxscmVhZHkgYWxsb2NhdGVkXG4iLAorCQkJCVpSX0RFVk5BTUUoenIpKTsKKwkJCXJlcyA9IC1FQlVTWTsKKwkJCWdvdG8ganBncmVxYnVmX3VubG9ja19hbmRfcmV0dXJuOworCQl9CisKKwkJZmgtPmpwZ19idWZmZXJzLm51bV9idWZmZXJzID0gYnJlcS0+Y291bnQ7CisJCWZoLT5qcGdfYnVmZmVycy5idWZmZXJfc2l6ZSA9IGJyZXEtPnNpemU7CisKKwkJaWYgKGpwZ19mYnVmZmVyX2FsbG9jKGZpbGUpKSB7CisJCQlyZXMgPSAtRU5PTUVNOworCQkJZ290byBqcGdyZXFidWZfdW5sb2NrX2FuZF9yZXR1cm47CisJCX0KKworCQkvKiBUaGUgbmV4dCBtbWFwIHdpbGwgbWFwIHRoZSBNSlBFRyBidWZmZXJzIC0gY291bGQKKwkJICogYWxzbyBiZSAqX1BMQVksIGJ1dCBpdCBkb2Vzbid0IG1hdHRlciBoZXJlICovCisJCWZoLT5tYXBfbW9kZSA9IFpPUkFOX01BUF9NT0RFX0pQR19SRUM7CisJanBncmVxYnVmX3VubG9ja19hbmRfcmV0dXJuOgorCQltdXRleF91bmxvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKKworCQlyZXR1cm4gcmVzOworCX0KKwkJYnJlYWs7CisKKwljYXNlIEJVWklPQ19RQlVGX0NBUFQ6CisJeworCQlpbnQgKmZyYW1lID0gYXJnLCByZXM7CisKKwkJZHByaW50aygzLCBLRVJOX0RFQlVHICIlczogQlVaSU9DX1FCVUZfQ0FQVCAtIGZyYW1lPSVkXG4iLAorCQkJWlJfREVWTkFNRSh6ciksICpmcmFtZSk7CisKKwkJbXV0ZXhfbG9jaygmenItPnJlc291cmNlX2xvY2spOworCQlyZXMgPSBqcGdfcWJ1ZihmaWxlLCAqZnJhbWUsIEJVWl9NT0RFX01PVElPTl9DT01QUkVTUyk7CisJCW11dGV4X3VubG9jaygmenItPnJlc291cmNlX2xvY2spOworCisJCXJldHVybiByZXM7CisJfQorCQlicmVhazsKKworCWNhc2UgQlVaSU9DX1FCVUZfUExBWToKKwl7CisJCWludCAqZnJhbWUgPSBhcmcsIHJlczsKKworCQlkcHJpbnRrKDMsIEtFUk5fREVCVUcgIiVzOiBCVVpJT0NfUUJVRl9QTEFZIC0gZnJhbWU9JWRcbiIsCisJCQlaUl9ERVZOQU1FKHpyKSwgKmZyYW1lKTsKKworCQltdXRleF9sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7CisJCXJlcyA9IGpwZ19xYnVmKGZpbGUsICpmcmFtZSwgQlVaX01PREVfTU9USU9OX0RFQ09NUFJFU1MpOworCQltdXRleF91bmxvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKKworCQlyZXR1cm4gcmVzOworCX0KKwkJYnJlYWs7CisKKwljYXNlIEJVWklPQ19TWU5DOgorCXsKKwkJc3RydWN0IHpvcmFuX3N5bmMgKmJzeW5jID0gYXJnOworCQlpbnQgcmVzOworCisJCWRwcmludGsoMywgS0VSTl9ERUJVRyAiJXM6IEJVWklPQ19TWU5DXG4iLCBaUl9ERVZOQU1FKHpyKSk7CisKKwkJbXV0ZXhfbG9jaygmenItPnJlc291cmNlX2xvY2spOworCQlyZXMgPSBqcGdfc3luYyhmaWxlLCBic3luYyk7CisJCW11dGV4X3VubG9jaygmenItPnJlc291cmNlX2xvY2spOworCisJCXJldHVybiByZXM7CisJfQorCQlicmVhazsKKworCWNhc2UgQlVaSU9DX0dfU1RBVFVTOgorCXsKKwkJc3RydWN0IHpvcmFuX3N0YXR1cyAqYnN0YXQgPSBhcmc7CisJCWludCBub3JtLCBpbnB1dCwgc3RhdHVzLCByZXMgPSAwOworCisJCWRwcmludGsoMywgS0VSTl9ERUJVRyAiJXM6IEJVWklPQ19HX1NUQVRVU1xuIiwgWlJfREVWTkFNRSh6cikpOworCisJCWlmICh6ci0+Y29kZWNfbW9kZSAhPSBCVVpfTU9ERV9JRExFKSB7CisJCQlkcHJpbnRrKDEsCisJCQkJS0VSTl9FUlIKKwkJCQkiJXM6IEJVWklPQ19HX1NUQVRVUyBjYWxsZWQgYnV0IEJ1eiBpbiBjYXB0dXJlL3BsYXliYWNrIG1vZGVcbiIsCisJCQkJWlJfREVWTkFNRSh6cikpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKworCQlpbnB1dCA9IHpyLT5jYXJkLmlucHV0W2JzdGF0LT5pbnB1dF0ubXV4c2VsOworCQlub3JtID0gVklERU9fTU9ERV9BVVRPOworCisJCW11dGV4X2xvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKKworCQlpZiAoenItPmNvZGVjX21vZGUgIT0gQlVaX01PREVfSURMRSkgeworCQkJZHByaW50aygxLAorCQkJCUtFUk5fRVJSCisJCQkJIiVzOiBCVVpJT0NfR19TVEFUVVMgY2FsbGVkLCBidXQgQnV6IGluIGNhcHR1cmUvcGxheWJhY2sgbW9kZVxuIiwKKwkJCQlaUl9ERVZOQU1FKHpyKSk7CisJCQlyZXMgPSAtRUlOVkFMOworCQkJZ290byBnc3RhdF91bmxvY2tfYW5kX3JldHVybjsKKwkJfQorCisJCWRlY29kZXJfY29tbWFuZCh6ciwgREVDT0RFUl9TRVRfSU5QVVQsICZpbnB1dCk7CisJCWRlY29kZXJfY29tbWFuZCh6ciwgREVDT0RFUl9TRVRfTk9STSwgJm5vcm0pOworCisJCS8qIHNsZWVwIDEgc2Vjb25kICovCisJCXNzbGVlcCgxKTsKKworCQkvKiBHZXQgc3RhdHVzIG9mIHZpZGVvIGRlY29kZXIgKi8KKwkJZGVjb2Rlcl9jb21tYW5kKHpyLCBERUNPREVSX0dFVF9TVEFUVVMsICZzdGF0dXMpOworCisJCS8qIHJlc3RvcmUgcHJldmlvdXMgaW5wdXQgYW5kIG5vcm0gKi8KKwkJaW5wdXQgPSB6ci0+Y2FyZC5pbnB1dFt6ci0+aW5wdXRdLm11eHNlbDsKKwkJZGVjb2Rlcl9jb21tYW5kKHpyLCBERUNPREVSX1NFVF9JTlBVVCwgJmlucHV0KTsKKwkJZGVjb2Rlcl9jb21tYW5kKHpyLCBERUNPREVSX1NFVF9OT1JNLCAmenItPm5vcm0pOworCWdzdGF0X3VubG9ja19hbmRfcmV0dXJuOgorCQltdXRleF91bmxvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKKworCQlpZiAoIXJlcykgeworCQkJYnN0YXQtPnNpZ25hbCA9CisJCQkgICAgKHN0YXR1cyAmIERFQ09ERVJfU1RBVFVTX0dPT0QpID8gMSA6IDA7CisJCQlpZiAoc3RhdHVzICYgREVDT0RFUl9TVEFUVVNfTlRTQykKKwkJCQlic3RhdC0+bm9ybSA9IFZJREVPX01PREVfTlRTQzsKKwkJCWVsc2UgaWYgKHN0YXR1cyAmIERFQ09ERVJfU1RBVFVTX1NFQ0FNKQorCQkJCWJzdGF0LT5ub3JtID0gVklERU9fTU9ERV9TRUNBTTsKKwkJCWVsc2UKKwkJCQlic3RhdC0+bm9ybSA9IFZJREVPX01PREVfUEFMOworCisJCQlic3RhdC0+Y29sb3IgPQorCQkJICAgIChzdGF0dXMgJiBERUNPREVSX1NUQVRVU19DT0xPUikgPyAxIDogMDsKKwkJfQorCisJCXJldHVybiByZXM7CisJfQorCQlicmVhazsKKworCQkvKiBUaGUgbmV3IHZpZGVvNGxpbnV4MiBjYXB0dXJlIGludGVyZmFjZSAtIG11Y2ggbmljZXIgdGhhbiB2aWRlbzRsaW51eDEsIHNpbmNlCisJCSAqIGl0IGFsbG93cyBmb3IgaW50ZWdyYXRpbmcgdGhlIEpQRUcgY2FwdHVyaW5nIGNhbGxzIGluc2lkZSBzdGFuZGFyZCB2NGwyCisJCSAqLworCisJY2FzZSBWSURJT0NfUVVFUllDQVA6CisJeworCQlzdHJ1Y3QgdjRsMl9jYXBhYmlsaXR5ICpjYXAgPSBhcmc7CisKKwkJZHByaW50aygzLCBLRVJOX0RFQlVHICIlczogVklESU9DX1FVRVJZQ0FQXG4iLCBaUl9ERVZOQU1FKHpyKSk7CisKKwkJbWVtc2V0KGNhcCwgMCwgc2l6ZW9mKCpjYXApKTsKKwkJc3RybmNweShjYXAtPmNhcmQsIFpSX0RFVk5BTUUoenIpLCBzaXplb2YoY2FwLT5jYXJkKS0xKTsKKwkJc3RybmNweShjYXAtPmRyaXZlciwgInpvcmFuIiwgc2l6ZW9mKGNhcC0+ZHJpdmVyKS0xKTsKKwkJc25wcmludGYoY2FwLT5idXNfaW5mbywgc2l6ZW9mKGNhcC0+YnVzX2luZm8pLCAiUENJOiVzIiwKKwkJCSBwY2lfbmFtZSh6ci0+cGNpX2RldikpOworCQljYXAtPnZlcnNpb24gPQorCQkgICAgS0VSTkVMX1ZFUlNJT04oTUFKT1JfVkVSU0lPTiwgTUlOT1JfVkVSU0lPTiwKKwkJCQkgICBSRUxFQVNFX1ZFUlNJT04pOworCQljYXAtPmNhcGFiaWxpdGllcyA9IFpPUkFOX1Y0TDJfVklEX0ZMQUdTOworCisJCXJldHVybiAwOworCX0KKwkJYnJlYWs7CisKKwljYXNlIFZJRElPQ19FTlVNX0ZNVDoKKwl7CisJCXN0cnVjdCB2NGwyX2ZtdGRlc2MgKmZtdCA9IGFyZzsKKwkJaW50IGluZGV4ID0gZm10LT5pbmRleCwgbnVtID0gLTEsIGksIGZsYWcgPSAwLCB0eXBlID0KKwkJICAgIGZtdC0+dHlwZTsKKworCQlkcHJpbnRrKDMsIEtFUk5fREVCVUcgIiVzOiBWSURJT0NfRU5VTV9GTVQgLSBpbmRleD0lZFxuIiwKKwkJCVpSX0RFVk5BTUUoenIpLCBmbXQtPmluZGV4KTsKKworCQlzd2l0Y2ggKGZtdC0+dHlwZSkgeworCQljYXNlIFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRToKKwkJCWZsYWcgPSBaT1JBTl9GT1JNQVRfQ0FQVFVSRTsKKwkJCWJyZWFrOworCQljYXNlIFY0TDJfQlVGX1RZUEVfVklERU9fT1VUUFVUOgorCQkJZmxhZyA9IFpPUkFOX0ZPUk1BVF9QTEFZQkFDSzsKKwkJCWJyZWFrOworCQljYXNlIFY0TDJfQlVGX1RZUEVfVklERU9fT1ZFUkxBWToKKwkJCWZsYWcgPSBaT1JBTl9GT1JNQVRfT1ZFUkxBWTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJZHByaW50aygxLAorCQkJCUtFUk5fRVJSCisJCQkJIiVzOiBWSURJT0NfRU5VTV9GTVQgLSB1bmtub3duIHR5cGUgJWRcbiIsCisJCQkJWlJfREVWTkFNRSh6ciksIGZtdC0+dHlwZSk7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCisJCWZvciAoaSA9IDA7IGkgPCBOVU1fRk9STUFUUzsgaSsrKSB7CisJCQlpZiAoem9yYW5fZm9ybWF0c1tpXS5mbGFncyAmIGZsYWcpCisJCQkJbnVtKys7CisJCQlpZiAobnVtID09IGZtdC0+aW5kZXgpCisJCQkJYnJlYWs7CisJCX0KKwkJaWYgKGZtdC0+aW5kZXggPCAwIC8qIGxhdGUsIGJ1dCBub3QgdG9vIGxhdGUgKi8gIHx8CisJCSAgICBpID09IE5VTV9GT1JNQVRTKQorCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJbWVtc2V0KGZtdCwgMCwgc2l6ZW9mKCpmbXQpKTsKKwkJZm10LT5pbmRleCA9IGluZGV4OworCQlmbXQtPnR5cGUgPSB0eXBlOworCQlzdHJuY3B5KGZtdC0+ZGVzY3JpcHRpb24sIHpvcmFuX2Zvcm1hdHNbaV0ubmFtZSwgc2l6ZW9mKGZtdC0+ZGVzY3JpcHRpb24pLTEpOworCQlmbXQtPnBpeGVsZm9ybWF0ID0gem9yYW5fZm9ybWF0c1tpXS5mb3VyY2M7CisJCWlmICh6b3Jhbl9mb3JtYXRzW2ldLmZsYWdzICYgWk9SQU5fRk9STUFUX0NPTVBSRVNTRUQpCisJCQlmbXQtPmZsYWdzIHw9IFY0TDJfRk1UX0ZMQUdfQ09NUFJFU1NFRDsKKworCQlyZXR1cm4gMDsKKwl9CisJCWJyZWFrOworCisJY2FzZSBWSURJT0NfR19GTVQ6CisJeworCQlzdHJ1Y3QgdjRsMl9mb3JtYXQgKmZtdCA9IGFyZzsKKwkJaW50IHR5cGUgPSBmbXQtPnR5cGU7CisKKwkJZHByaW50ayg1LCBLRVJOX0RFQlVHICIlczogVklESU9DX0dfRk1UXG4iLCBaUl9ERVZOQU1FKHpyKSk7CisKKwkJbWVtc2V0KGZtdCwgMCwgc2l6ZW9mKCpmbXQpKTsKKwkJZm10LT50eXBlID0gdHlwZTsKKworCQlzd2l0Y2ggKGZtdC0+dHlwZSkgeworCQljYXNlIFY0TDJfQlVGX1RZUEVfVklERU9fT1ZFUkxBWToKKworCQkJbXV0ZXhfbG9jaygmenItPnJlc291cmNlX2xvY2spOworCisJCQlmbXQtPmZtdC53aW4udy5sZWZ0ID0gZmgtPm92ZXJsYXlfc2V0dGluZ3MueDsKKwkJCWZtdC0+Zm10Lndpbi53LnRvcCA9IGZoLT5vdmVybGF5X3NldHRpbmdzLnk7CisJCQlmbXQtPmZtdC53aW4udy53aWR0aCA9IGZoLT5vdmVybGF5X3NldHRpbmdzLndpZHRoOworCQkJZm10LT5mbXQud2luLncuaGVpZ2h0ID0KKwkJCSAgICBmaC0+b3ZlcmxheV9zZXR0aW5ncy5oZWlnaHQ7CisJCQlpZiAoZmgtPm92ZXJsYXlfc2V0dGluZ3Mud2lkdGggKiAyID4KKwkJCSAgICBCVVpfTUFYX0hFSUdIVCkKKwkJCQlmbXQtPmZtdC53aW4uZmllbGQgPSBWNEwyX0ZJRUxEX0lOVEVSTEFDRUQ7CisJCQllbHNlCisJCQkJZm10LT5mbXQud2luLmZpZWxkID0gVjRMMl9GSUVMRF9UT1A7CisKKwkJCW11dGV4X3VubG9jaygmenItPnJlc291cmNlX2xvY2spOworCisJCQlicmVhazsKKworCQljYXNlIFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRToKKwkJY2FzZSBWNEwyX0JVRl9UWVBFX1ZJREVPX09VVFBVVDoKKworCQkJbXV0ZXhfbG9jaygmenItPnJlc291cmNlX2xvY2spOworCisJCQlpZiAoZm10LT50eXBlID09IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSAmJgorCQkJICAgIGZoLT5tYXBfbW9kZSA9PSBaT1JBTl9NQVBfTU9ERV9SQVcpIHsKKworCQkJCWZtdC0+Zm10LnBpeC53aWR0aCA9CisJCQkJICAgIGZoLT52NGxfc2V0dGluZ3Mud2lkdGg7CisJCQkJZm10LT5mbXQucGl4LmhlaWdodCA9CisJCQkJICAgIGZoLT52NGxfc2V0dGluZ3MuaGVpZ2h0OworCQkJCWZtdC0+Zm10LnBpeC5zaXplaW1hZ2UgPQorCQkJCSAgICBmaC0+djRsX3NldHRpbmdzLmJ5dGVzcGVybGluZSAqCisJCQkJICAgIGZoLT52NGxfc2V0dGluZ3MuaGVpZ2h0OworCQkJCWZtdC0+Zm10LnBpeC5waXhlbGZvcm1hdCA9CisJCQkJICAgIGZoLT52NGxfc2V0dGluZ3MuZm9ybWF0LT5mb3VyY2M7CisJCQkJZm10LT5mbXQucGl4LmNvbG9yc3BhY2UgPQorCQkJCSAgICBmaC0+djRsX3NldHRpbmdzLmZvcm1hdC0+Y29sb3JzcGFjZTsKKwkJCQlmbXQtPmZtdC5waXguYnl0ZXNwZXJsaW5lID0KKwkJCQkgICAgZmgtPnY0bF9zZXR0aW5ncy5ieXRlc3BlcmxpbmU7CisJCQkJaWYgKEJVWl9NQVhfSEVJR0hUIDwKKwkJCQkgICAgKGZoLT52NGxfc2V0dGluZ3MuaGVpZ2h0ICogMikpCisJCQkJCWZtdC0+Zm10LnBpeC5maWVsZCA9CisJCQkJCSAgICBWNEwyX0ZJRUxEX0lOVEVSTEFDRUQ7CisJCQkJZWxzZQorCQkJCQlmbXQtPmZtdC5waXguZmllbGQgPQorCQkJCQkgICAgVjRMMl9GSUVMRF9UT1A7CisKKwkJCX0gZWxzZSB7CisKKwkJCQlmbXQtPmZtdC5waXgud2lkdGggPQorCQkJCSAgICBmaC0+anBnX3NldHRpbmdzLmltZ193aWR0aCAvCisJCQkJICAgIGZoLT5qcGdfc2V0dGluZ3MuSG9yRGNtOworCQkJCWZtdC0+Zm10LnBpeC5oZWlnaHQgPQorCQkJCSAgICBmaC0+anBnX3NldHRpbmdzLmltZ19oZWlnaHQgLworCQkJCSAgICAoZmgtPmpwZ19zZXR0aW5ncy5WZXJEY20gKgorCQkJCSAgICAgZmgtPmpwZ19zZXR0aW5ncy5UbXBEY20pOworCQkJCWZtdC0+Zm10LnBpeC5zaXplaW1hZ2UgPQorCQkJCSAgICB6b3Jhbl92NGwyX2NhbGNfYnVmc2l6ZSgmZmgtPgorCQkJCQkJCSAgICBqcGdfc2V0dGluZ3MpOworCQkJCWZtdC0+Zm10LnBpeC5waXhlbGZvcm1hdCA9CisJCQkJICAgIFY0TDJfUElYX0ZNVF9NSlBFRzsKKwkJCQlpZiAoZmgtPmpwZ19zZXR0aW5ncy5UbXBEY20gPT0gMSkKKwkJCQkJZm10LT5mbXQucGl4LmZpZWxkID0KKwkJCQkJICAgIChmaC0+anBnX3NldHRpbmdzLgorCQkJCQkgICAgIG9kZF9ldmVuID8gVjRMMl9GSUVMRF9TRVFfQlQgOgorCQkJCQkgICAgIFY0TDJfRklFTERfU0VRX0JUKTsKKwkJCQllbHNlCisJCQkJCWZtdC0+Zm10LnBpeC5maWVsZCA9CisJCQkJCSAgICAoZmgtPmpwZ19zZXR0aW5ncy4KKwkJCQkJICAgICBvZGRfZXZlbiA/IFY0TDJfRklFTERfVE9QIDoKKwkJCQkJICAgICBWNEwyX0ZJRUxEX0JPVFRPTSk7CisKKwkJCQlmbXQtPmZtdC5waXguYnl0ZXNwZXJsaW5lID0gMDsKKwkJCQlmbXQtPmZtdC5waXguY29sb3JzcGFjZSA9CisJCQkJICAgIFY0TDJfQ09MT1JTUEFDRV9TTVBURTE3ME07CisJCQl9CisKKwkJCW11dGV4X3VubG9jaygmenItPnJlc291cmNlX2xvY2spOworCisJCQlicmVhazsKKworCQlkZWZhdWx0OgorCQkJZHByaW50aygxLAorCQkJCUtFUk5fRVJSCisJCQkJIiVzOiBWSURJT0NfR19GTVQgLSB1bnN1cHBvcnRlZCB0eXBlICVkXG4iLAorCQkJCVpSX0RFVk5BTUUoenIpLCBmbXQtPnR5cGUpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwkJcmV0dXJuIDA7CisJfQorCQlicmVhazsKKworCWNhc2UgVklESU9DX1NfRk1UOgorCXsKKwkJc3RydWN0IHY0bDJfZm9ybWF0ICpmbXQgPSBhcmc7CisJCWludCBpLCByZXMgPSAwOworCQlfX2xlMzIgcHJpbnRmb3JtYXQ7CisKKwkJZHByaW50aygzLCBLRVJOX0RFQlVHICIlczogVklESU9DX1NfRk1UIC0gdHlwZT0lZCwgIiwKKwkJCVpSX0RFVk5BTUUoenIpLCBmbXQtPnR5cGUpOworCisJCXN3aXRjaCAoZm10LT50eXBlKSB7CisJCWNhc2UgVjRMMl9CVUZfVFlQRV9WSURFT19PVkVSTEFZOgorCisJCQlkcHJpbnRrKDMsICJ4PSVkLCB5PSVkLCB3PSVkLCBoPSVkLCBjbnQ9JWQsIG1hcD0weCVwXG4iLAorCQkJCWZtdC0+Zm10Lndpbi53LmxlZnQsIGZtdC0+Zm10Lndpbi53LnRvcCwKKwkJCQlmbXQtPmZtdC53aW4udy53aWR0aCwKKwkJCQlmbXQtPmZtdC53aW4udy5oZWlnaHQsCisJCQkJZm10LT5mbXQud2luLmNsaXBjb3VudCwKKwkJCQlmbXQtPmZtdC53aW4uYml0bWFwKTsKKwkJCW11dGV4X2xvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKKwkJCXJlcyA9CisJCQkgICAgc2V0dXBfd2luZG93KGZpbGUsIGZtdC0+Zm10Lndpbi53LmxlZnQsCisJCQkJCSBmbXQtPmZtdC53aW4udy50b3AsCisJCQkJCSBmbXQtPmZtdC53aW4udy53aWR0aCwKKwkJCQkJIGZtdC0+Zm10Lndpbi53LmhlaWdodCwKKwkJCQkJIChzdHJ1Y3QgdmlkZW9fY2xpcCBfX3VzZXIgKikKKwkJCQkJICAgZm10LT5mbXQud2luLmNsaXBzLAorCQkJCQkgZm10LT5mbXQud2luLmNsaXBjb3VudCwKKwkJCQkJIGZtdC0+Zm10Lndpbi5iaXRtYXApOworCQkJbXV0ZXhfdW5sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7CisJCQlyZXR1cm4gcmVzOworCQkJYnJlYWs7CisKKwkJY2FzZSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU6CisJCWNhc2UgVjRMMl9CVUZfVFlQRV9WSURFT19PVVRQVVQ6CisKKwkJCXByaW50Zm9ybWF0ID0KKwkJCSAgICBfX2NwdV90b19sZTMyKGZtdC0+Zm10LnBpeC5waXhlbGZvcm1hdCk7CisJCQlkcHJpbnRrKDMsICJzaXplPSVkeCVkLCBmbXQ9MHgleCAoJTQuNHMpXG4iLAorCQkJCWZtdC0+Zm10LnBpeC53aWR0aCwgZm10LT5mbXQucGl4LmhlaWdodCwKKwkJCQlmbXQtPmZtdC5waXgucGl4ZWxmb3JtYXQsCisJCQkJKGNoYXIgKikgJnByaW50Zm9ybWF0KTsKKworCQkJLyogd2UgY2FuIGJlIHJlcXVlc3RlZCB0byBkbyBKUEVHL3JhdyBwbGF5YmFjay9jYXB0dXJlICovCisJCQlpZiAoIQorCQkJICAgIChmbXQtPnR5cGUgPT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFIHx8CisJCQkgICAgIChmbXQtPnR5cGUgPT0gVjRMMl9CVUZfVFlQRV9WSURFT19PVVRQVVQgJiYKKwkJCSAgICAgIGZtdC0+Zm10LnBpeC5waXhlbGZvcm1hdCA9PQorCQkJICAgICAgVjRMMl9QSVhfRk1UX01KUEVHKSkpIHsKKwkJCQlkcHJpbnRrKDEsCisJCQkJCUtFUk5fRVJSCisJCQkJCSIlczogVklESU9DX1NfRk1UIC0gdW5rbm93biB0eXBlICVkLzB4JXgoJTQuNHMpIGNvbWJpbmF0aW9uXG4iLAorCQkJCQlaUl9ERVZOQU1FKHpyKSwgZm10LT50eXBlLAorCQkJCQlmbXQtPmZtdC5waXgucGl4ZWxmb3JtYXQsCisJCQkJCShjaGFyICopICZwcmludGZvcm1hdCk7CisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQl9CisKKwkJCWlmIChmbXQtPmZtdC5waXgucGl4ZWxmb3JtYXQgPT0gVjRMMl9QSVhfRk1UX01KUEVHKSB7CisJCQkJbXV0ZXhfbG9jaygmenItPnJlc291cmNlX2xvY2spOworCisJCQkJc2V0dGluZ3MgPSBmaC0+anBnX3NldHRpbmdzOworCisJCQkJaWYgKGZoLT52NGxfYnVmZmVycy5hbGxvY2F0ZWQgfHwKKwkJCQkgICAgZmgtPmpwZ19idWZmZXJzLmFsbG9jYXRlZCkgeworCQkJCQlkcHJpbnRrKDEsCisJCQkJCQlLRVJOX0VSUgorCQkJCQkJIiVzOiBWSURJT0NfU19GTVQgLSBjYW5ub3QgY2hhbmdlIGNhcHR1cmUgbW9kZVxuIiwKKwkJCQkJCVpSX0RFVk5BTUUoenIpKTsKKwkJCQkJcmVzID0gLUVCVVNZOworCQkJCQlnb3RvIHNmbXRqcGdfdW5sb2NrX2FuZF9yZXR1cm47CisJCQkJfQorCisJCQkJLyogd2UgYWN0dWFsbHkgbmVlZCB0byBzZXQgJ3JlYWwnIHBhcmFtZXRlcnMgbm93ICovCisJCQkJaWYgKChmbXQtPmZtdC5waXguaGVpZ2h0ICogMikgPgorCQkJCSAgICBCVVpfTUFYX0hFSUdIVCkKKwkJCQkJc2V0dGluZ3MuVG1wRGNtID0gMTsKKwkJCQllbHNlCisJCQkJCXNldHRpbmdzLlRtcERjbSA9IDI7CisJCQkJc2V0dGluZ3MuZGVjaW1hdGlvbiA9IDA7CisJCQkJaWYgKGZtdC0+Zm10LnBpeC5oZWlnaHQgPD0KKwkJCQkgICAgZmgtPmpwZ19zZXR0aW5ncy5pbWdfaGVpZ2h0IC8gMikKKwkJCQkJc2V0dGluZ3MuVmVyRGNtID0gMjsKKwkJCQllbHNlCisJCQkJCXNldHRpbmdzLlZlckRjbSA9IDE7CisJCQkJaWYgKGZtdC0+Zm10LnBpeC53aWR0aCA8PQorCQkJCSAgICBmaC0+anBnX3NldHRpbmdzLmltZ193aWR0aCAvIDQpCisJCQkJCXNldHRpbmdzLkhvckRjbSA9IDQ7CisJCQkJZWxzZSBpZiAoZm10LT5mbXQucGl4LndpZHRoIDw9CisJCQkJCSBmaC0+anBnX3NldHRpbmdzLmltZ193aWR0aCAvIDIpCisJCQkJCXNldHRpbmdzLkhvckRjbSA9IDI7CisJCQkJZWxzZQorCQkJCQlzZXR0aW5ncy5Ib3JEY20gPSAxOworCQkJCWlmIChzZXR0aW5ncy5UbXBEY20gPT0gMSkKKwkJCQkJc2V0dGluZ3MuZmllbGRfcGVyX2J1ZmYgPSAyOworCQkJCWVsc2UKKwkJCQkJc2V0dGluZ3MuZmllbGRfcGVyX2J1ZmYgPSAxOworCisJCQkJLyogY2hlY2sgKi8KKwkJCQlpZiAoKHJlcyA9CisJCQkJICAgICB6b3Jhbl9jaGVja19qcGdfc2V0dGluZ3MoenIsCisJCQkJCQkJICAgICAgJnNldHRpbmdzKSkpCisJCQkJCWdvdG8gc2ZtdGpwZ191bmxvY2tfYW5kX3JldHVybjsKKworCQkJCS8qIGl0J3Mgb2ssIHNvIHNldCB0aGVtICovCisJCQkJZmgtPmpwZ19zZXR0aW5ncyA9IHNldHRpbmdzOworCisJCQkJLyogdGVsbCB0aGUgdXNlciB3aGF0IHdlIGFjdHVhbGx5IGRpZCAqLworCQkJCWZtdC0+Zm10LnBpeC53aWR0aCA9CisJCQkJICAgIHNldHRpbmdzLmltZ193aWR0aCAvIHNldHRpbmdzLkhvckRjbTsKKwkJCQlmbXQtPmZtdC5waXguaGVpZ2h0ID0KKwkJCQkgICAgc2V0dGluZ3MuaW1nX2hlaWdodCAqIDIgLworCQkJCSAgICAoc2V0dGluZ3MuVG1wRGNtICogc2V0dGluZ3MuVmVyRGNtKTsKKwkJCQlpZiAoc2V0dGluZ3MuVG1wRGNtID09IDEpCisJCQkJCWZtdC0+Zm10LnBpeC5maWVsZCA9CisJCQkJCSAgICAoZmgtPmpwZ19zZXR0aW5ncy4KKwkJCQkJICAgICBvZGRfZXZlbiA/IFY0TDJfRklFTERfU0VRX1RCIDoKKwkJCQkJICAgICBWNEwyX0ZJRUxEX1NFUV9CVCk7CisJCQkJZWxzZQorCQkJCQlmbXQtPmZtdC5waXguZmllbGQgPQorCQkJCQkgICAgKGZoLT5qcGdfc2V0dGluZ3MuCisJCQkJCSAgICAgb2RkX2V2ZW4gPyBWNEwyX0ZJRUxEX1RPUCA6CisJCQkJCSAgICAgVjRMMl9GSUVMRF9CT1RUT00pOworCQkJCWZoLT5qcGdfYnVmZmVycy5idWZmZXJfc2l6ZSA9CisJCQkJICAgIHpvcmFuX3Y0bDJfY2FsY19idWZzaXplKCZmaC0+CisJCQkJCQkJICAgIGpwZ19zZXR0aW5ncyk7CisJCQkJZm10LT5mbXQucGl4LmJ5dGVzcGVybGluZSA9IDA7CisJCQkJZm10LT5mbXQucGl4LnNpemVpbWFnZSA9CisJCQkJICAgIGZoLT5qcGdfYnVmZmVycy5idWZmZXJfc2l6ZTsKKwkJCQlmbXQtPmZtdC5waXguY29sb3JzcGFjZSA9CisJCQkJICAgIFY0TDJfQ09MT1JTUEFDRV9TTVBURTE3ME07CisKKwkJCQkvKiB3ZSBoZXJlYnkgYWJ1c2UgdGhpcyB2YXJpYWJsZSB0byBzaG93IHRoYXQKKwkJCQkgKiB3ZSdyZSBnb25uYSBkbyBtanBlZyBjYXB0dXJlICovCisJCQkJZmgtPm1hcF9tb2RlID0KKwkJCQkgICAgKGZtdC0+dHlwZSA9PQorCQkJCSAgICAgVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFKSA/CisJCQkJICAgIFpPUkFOX01BUF9NT0RFX0pQR19SRUMgOgorCQkJCSAgICBaT1JBTl9NQVBfTU9ERV9KUEdfUExBWTsKKwkJCXNmbXRqcGdfdW5sb2NrX2FuZF9yZXR1cm46CisJCQkJbXV0ZXhfdW5sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7CisJCQl9IGVsc2UgeworCQkJCWZvciAoaSA9IDA7IGkgPCBOVU1fRk9STUFUUzsgaSsrKQorCQkJCQlpZiAoZm10LT5mbXQucGl4LnBpeGVsZm9ybWF0ID09CisJCQkJCSAgICB6b3Jhbl9mb3JtYXRzW2ldLmZvdXJjYykKKwkJCQkJCWJyZWFrOworCQkJCWlmIChpID09IE5VTV9GT1JNQVRTKSB7CisJCQkJCWRwcmludGsoMSwKKwkJCQkJCUtFUk5fRVJSCisJCQkJCQkiJXM6IFZJRElPQ19TX0ZNVCAtIHVua25vd24vdW5zdXBwb3J0ZWQgZm9ybWF0IDB4JXggKCU0LjRzKVxuIiwKKwkJCQkJCVpSX0RFVk5BTUUoenIpLAorCQkJCQkJZm10LT5mbXQucGl4LnBpeGVsZm9ybWF0LAorCQkJCQkJKGNoYXIgKikgJnByaW50Zm9ybWF0KTsKKwkJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQkJfQorCQkJCW11dGV4X2xvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKKwkJCQlpZiAoZmgtPmpwZ19idWZmZXJzLmFsbG9jYXRlZCB8fAorCQkJCSAgICAoZmgtPnY0bF9idWZmZXJzLmFsbG9jYXRlZCAmJgorCQkJCSAgICAgZmgtPnY0bF9idWZmZXJzLmFjdGl2ZSAhPQorCQkJCSAgICAgWk9SQU5fRlJFRSkpIHsKKwkJCQkJZHByaW50aygxLAorCQkJCQkJS0VSTl9FUlIKKwkJCQkJCSIlczogVklESU9DX1NfRk1UIC0gY2Fubm90IGNoYW5nZSBjYXB0dXJlIG1vZGVcbiIsCisJCQkJCQlaUl9ERVZOQU1FKHpyKSk7CisJCQkJCXJlcyA9IC1FQlVTWTsKKwkJCQkJZ290byBzZm10djRsX3VubG9ja19hbmRfcmV0dXJuOworCQkJCX0KKwkJCQlpZiAoZm10LT5mbXQucGl4LmhlaWdodCA+IEJVWl9NQVhfSEVJR0hUKQorCQkJCQlmbXQtPmZtdC5waXguaGVpZ2h0ID0KKwkJCQkJICAgIEJVWl9NQVhfSEVJR0hUOworCQkJCWlmIChmbXQtPmZtdC5waXgud2lkdGggPiBCVVpfTUFYX1dJRFRIKQorCQkJCQlmbXQtPmZtdC5waXgud2lkdGggPSBCVVpfTUFYX1dJRFRIOworCisJCQkJaWYgKChyZXMgPQorCQkJCSAgICAgem9yYW5fdjRsX3NldF9mb3JtYXQoZmlsZSwKKwkJCQkJCQkgIGZtdC0+Zm10LnBpeC4KKwkJCQkJCQkgIHdpZHRoLAorCQkJCQkJCSAgZm10LT5mbXQucGl4LgorCQkJCQkJCSAgaGVpZ2h0LAorCQkJCQkJCSAgJnpvcmFuX2Zvcm1hdHMKKwkJCQkJCQkgIFtpXSkpKQorCQkJCQlnb3RvIHNmbXR2NGxfdW5sb2NrX2FuZF9yZXR1cm47CisKKwkJCQkvKiB0ZWxsIHRoZSB1c2VyIHRoZQorCQkJCSAqIHJlc3VsdHMvbWlzc2luZyBzdHVmZiAqLworCQkJCWZtdC0+Zm10LnBpeC5ieXRlc3BlcmxpbmUgPQorCQkJCQlmaC0+djRsX3NldHRpbmdzLmJ5dGVzcGVybGluZTsKKwkJCQlmbXQtPmZtdC5waXguc2l6ZWltYWdlID0KKwkJCQkJZmgtPnY0bF9zZXR0aW5ncy5oZWlnaHQgKgorCQkJCQlmaC0+djRsX3NldHRpbmdzLmJ5dGVzcGVybGluZTsKKwkJCQlmbXQtPmZtdC5waXguY29sb3JzcGFjZSA9CisJCQkJCWZoLT52NGxfc2V0dGluZ3MuZm9ybWF0LT5jb2xvcnNwYWNlOworCQkJCWlmIChCVVpfTUFYX0hFSUdIVCA8CisJCQkJICAgIChmaC0+djRsX3NldHRpbmdzLmhlaWdodCAqIDIpKQorCQkJCQlmbXQtPmZtdC5waXguZmllbGQgPQorCQkJCQkgICAgVjRMMl9GSUVMRF9JTlRFUkxBQ0VEOworCQkJCWVsc2UKKwkJCQkJZm10LT5mbXQucGl4LmZpZWxkID0KKwkJCQkJICAgIFY0TDJfRklFTERfVE9QOworCisJCQkJZmgtPm1hcF9tb2RlID0gWk9SQU5fTUFQX01PREVfUkFXOworCQkJc2ZtdHY0bF91bmxvY2tfYW5kX3JldHVybjoKKwkJCQltdXRleF91bmxvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKKwkJCX0KKworCQkJYnJlYWs7CisKKwkJZGVmYXVsdDoKKwkJCWRwcmludGsoMSwKKwkJCQlLRVJOX0VSUgorCQkJCSIlczogVklESU9DX1NfRk1UIC0gdW5zdXBwb3J0ZWQgdHlwZSAlZFxuIiwKKwkJCQlaUl9ERVZOQU1FKHpyKSwgZm10LT50eXBlKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisKKwkJcmV0dXJuIHJlczsKKwl9CisJCWJyZWFrOworCisJY2FzZSBWSURJT0NfR19GQlVGOgorCXsKKwkJc3RydWN0IHY0bDJfZnJhbWVidWZmZXIgKmZiID0gYXJnOworCisJCWRwcmludGsoMywgS0VSTl9ERUJVRyAiJXM6IFZJRElPQ19HX0ZCVUZcbiIsIFpSX0RFVk5BTUUoenIpKTsKKworCQltZW1zZXQoZmIsIDAsIHNpemVvZigqZmIpKTsKKwkJbXV0ZXhfbG9jaygmenItPnJlc291cmNlX2xvY2spOworCQlmYi0+YmFzZSA9IHpyLT5idWZmZXIuYmFzZTsKKwkJZmItPmZtdC53aWR0aCA9IHpyLT5idWZmZXIud2lkdGg7CisJCWZiLT5mbXQuaGVpZ2h0ID0genItPmJ1ZmZlci5oZWlnaHQ7CisJCWlmICh6ci0+b3ZlcmxheV9zZXR0aW5ncy5mb3JtYXQpIHsKKwkJCWZiLT5mbXQucGl4ZWxmb3JtYXQgPQorCQkJCWZoLT5vdmVybGF5X3NldHRpbmdzLmZvcm1hdC0+Zm91cmNjOworCQl9CisJCWZiLT5mbXQuYnl0ZXNwZXJsaW5lID0genItPmJ1ZmZlci5ieXRlc3BlcmxpbmU7CisJCW11dGV4X3VubG9jaygmenItPnJlc291cmNlX2xvY2spOworCQlmYi0+Zm10LmNvbG9yc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfU1JHQjsKKwkJZmItPmZtdC5maWVsZCA9IFY0TDJfRklFTERfSU5URVJMQUNFRDsKKwkJZmItPmZsYWdzID0gVjRMMl9GQlVGX0ZMQUdfT1ZFUkxBWTsKKwkJZmItPmNhcGFiaWxpdHkgPSBWNEwyX0ZCVUZfQ0FQX0xJU1RfQ0xJUFBJTkc7CisKKwkJcmV0dXJuIDA7CisJfQorCQlicmVhazsKKworCWNhc2UgVklESU9DX1NfRkJVRjoKKwl7CisJCWludCBpLCByZXMgPSAwOworCQlzdHJ1Y3QgdjRsMl9mcmFtZWJ1ZmZlciAqZmIgPSBhcmc7CisJCV9fbGUzMiBwcmludGZvcm1hdCA9IF9fY3B1X3RvX2xlMzIoZmItPmZtdC5waXhlbGZvcm1hdCk7CisKKwkJZHByaW50aygzLAorCQkJS0VSTl9ERUJVRworCQkJIiVzOiBWSURJT0NfU19GQlVGIC0gYmFzZT0weCVwLCBzaXplPSVkeCVkLCBicGw9JWQsIGZtdD0weCV4ICglNC40cylcbiIsCisJCQlaUl9ERVZOQU1FKHpyKSwgZmItPmJhc2UsIGZiLT5mbXQud2lkdGgsIGZiLT5mbXQuaGVpZ2h0LAorCQkJZmItPmZtdC5ieXRlc3BlcmxpbmUsIGZiLT5mbXQucGl4ZWxmb3JtYXQsCisJCQkoY2hhciAqKSAmcHJpbnRmb3JtYXQpOworCisJCWZvciAoaSA9IDA7IGkgPCBOVU1fRk9STUFUUzsgaSsrKQorCQkJaWYgKHpvcmFuX2Zvcm1hdHNbaV0uZm91cmNjID09IGZiLT5mbXQucGl4ZWxmb3JtYXQpCisJCQkJYnJlYWs7CisJCWlmIChpID09IE5VTV9GT1JNQVRTKSB7CisJCQlkcHJpbnRrKDEsCisJCQkJS0VSTl9FUlIKKwkJCQkiJXM6IFZJRElPQ19TX0ZCVUYgLSBmb3JtYXQ9MHgleCAoJTQuNHMpIG5vdCBhbGxvd2VkXG4iLAorCQkJCVpSX0RFVk5BTUUoenIpLCBmYi0+Zm10LnBpeGVsZm9ybWF0LAorCQkJCShjaGFyICopICZwcmludGZvcm1hdCk7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCisJCW11dGV4X2xvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKKwkJcmVzID0KKwkJICAgIHNldHVwX2ZidWZmZXIoZmlsZSwgZmItPmJhc2UsICZ6b3Jhbl9mb3JtYXRzW2ldLAorCQkJCSAgZmItPmZtdC53aWR0aCwgZmItPmZtdC5oZWlnaHQsCisJCQkJICBmYi0+Zm10LmJ5dGVzcGVybGluZSk7CisJCW11dGV4X3VubG9jaygmenItPnJlc291cmNlX2xvY2spOworCisJCXJldHVybiByZXM7CisJfQorCQlicmVhazsKKworCWNhc2UgVklESU9DX09WRVJMQVk6CisJeworCQlpbnQgKm9uID0gYXJnLCByZXM7CisKKwkJZHByaW50aygzLCBLRVJOX0RFQlVHICIlczogVklESU9DX1BSRVZJRVcgLSBvbj0lZFxuIiwKKwkJCVpSX0RFVk5BTUUoenIpLCAqb24pOworCisJCW11dGV4X2xvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKKwkJcmVzID0gc2V0dXBfb3ZlcmxheShmaWxlLCAqb24pOworCQltdXRleF91bmxvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKKworCQlyZXR1cm4gcmVzOworCX0KKwkJYnJlYWs7CisKKwljYXNlIFZJRElPQ19SRVFCVUZTOgorCXsKKwkJc3RydWN0IHY0bDJfcmVxdWVzdGJ1ZmZlcnMgKnJlcSA9IGFyZzsKKwkJaW50IHJlcyA9IDA7CisKKwkJZHByaW50aygzLCBLRVJOX0RFQlVHICIlczogVklESU9DX1JFUUJVRlMgLSB0eXBlPSVkXG4iLAorCQkJWlJfREVWTkFNRSh6ciksIHJlcS0+dHlwZSk7CisKKwkJaWYgKHJlcS0+bWVtb3J5ICE9IFY0TDJfTUVNT1JZX01NQVApIHsKKwkJCWRwcmludGsoMSwKKwkJCQlLRVJOX0VSUgorCQkJCSIlczogb25seSBNRU1PUllfTU1BUCBjYXB0dXJlIGlzIHN1cHBvcnRlZCwgbm90ICVkXG4iLAorCQkJCVpSX0RFVk5BTUUoenIpLCByZXEtPm1lbW9yeSk7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCisJCW11dGV4X2xvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKKworCQlpZiAoZmgtPnY0bF9idWZmZXJzLmFsbG9jYXRlZCB8fCBmaC0+anBnX2J1ZmZlcnMuYWxsb2NhdGVkKSB7CisJCQlkcHJpbnRrKDEsCisJCQkJS0VSTl9FUlIKKwkJCQkiJXM6IFZJRElPQ19SRVFCVUZTIC0gYnVmZmVycyBhbGxyZWFkeSBhbGxvY2F0ZWRcbiIsCisJCQkJWlJfREVWTkFNRSh6cikpOworCQkJcmVzID0gLUVCVVNZOworCQkJZ290byB2NGwycmVxYnVmX3VubG9ja19hbmRfcmV0dXJuOworCQl9CisKKwkJaWYgKGZoLT5tYXBfbW9kZSA9PSBaT1JBTl9NQVBfTU9ERV9SQVcgJiYKKwkJICAgIHJlcS0+dHlwZSA9PSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUpIHsKKworCQkJLyogY29udHJvbCB1c2VyIGlucHV0ICovCisJCQlpZiAocmVxLT5jb3VudCA8IDIpCisJCQkJcmVxLT5jb3VudCA9IDI7CisJCQlpZiAocmVxLT5jb3VudCA+IHY0bF9uYnVmcykKKwkJCQlyZXEtPmNvdW50ID0gdjRsX25idWZzOworCQkJZmgtPnY0bF9idWZmZXJzLm51bV9idWZmZXJzID0gcmVxLT5jb3VudDsKKworCQkJaWYgKHY0bF9mYnVmZmVyX2FsbG9jKGZpbGUpKSB7CisJCQkJcmVzID0gLUVOT01FTTsKKwkJCQlnb3RvIHY0bDJyZXFidWZfdW5sb2NrX2FuZF9yZXR1cm47CisJCQl9CisKKwkJCS8qIFRoZSBuZXh0IG1tYXAgd2lsbCBtYXAgdGhlIFY0TCBidWZmZXJzICovCisJCQlmaC0+bWFwX21vZGUgPSBaT1JBTl9NQVBfTU9ERV9SQVc7CisKKwkJfSBlbHNlIGlmIChmaC0+bWFwX21vZGUgPT0gWk9SQU5fTUFQX01PREVfSlBHX1JFQyB8fAorCQkJICAgZmgtPm1hcF9tb2RlID09IFpPUkFOX01BUF9NT0RFX0pQR19QTEFZKSB7CisKKwkJCS8qIHdlIG5lZWQgdG8gY2FsY3VsYXRlIHNpemUgb3Vyc2VsdmVzIG5vdyAqLworCQkJaWYgKHJlcS0+Y291bnQgPCA0KQorCQkJCXJlcS0+Y291bnQgPSA0OworCQkJaWYgKHJlcS0+Y291bnQgPiBqcGdfbmJ1ZnMpCisJCQkJcmVxLT5jb3VudCA9IGpwZ19uYnVmczsKKwkJCWZoLT5qcGdfYnVmZmVycy5udW1fYnVmZmVycyA9IHJlcS0+Y291bnQ7CisJCQlmaC0+anBnX2J1ZmZlcnMuYnVmZmVyX3NpemUgPQorCQkJICAgIHpvcmFuX3Y0bDJfY2FsY19idWZzaXplKCZmaC0+anBnX3NldHRpbmdzKTsKKworCQkJaWYgKGpwZ19mYnVmZmVyX2FsbG9jKGZpbGUpKSB7CisJCQkJcmVzID0gLUVOT01FTTsKKwkJCQlnb3RvIHY0bDJyZXFidWZfdW5sb2NrX2FuZF9yZXR1cm47CisJCQl9CisKKwkJCS8qIFRoZSBuZXh0IG1tYXAgd2lsbCBtYXAgdGhlIE1KUEVHIGJ1ZmZlcnMgKi8KKwkJCWlmIChyZXEtPnR5cGUgPT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFKQorCQkJCWZoLT5tYXBfbW9kZSA9IFpPUkFOX01BUF9NT0RFX0pQR19SRUM7CisJCQllbHNlCisJCQkJZmgtPm1hcF9tb2RlID0gWk9SQU5fTUFQX01PREVfSlBHX1BMQVk7CisKKwkJfSBlbHNlIHsKKwkJCWRwcmludGsoMSwKKwkJCQlLRVJOX0VSUgorCQkJCSIlczogVklESU9DX1JFUUJVRlMgLSB1bmtub3duIHR5cGUgJWRcbiIsCisJCQkJWlJfREVWTkFNRSh6ciksIHJlcS0+dHlwZSk7CisJCQlyZXMgPSAtRUlOVkFMOworCQkJZ290byB2NGwycmVxYnVmX3VubG9ja19hbmRfcmV0dXJuOworCQl9CisJdjRsMnJlcWJ1Zl91bmxvY2tfYW5kX3JldHVybjoKKwkJbXV0ZXhfdW5sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7CisKKwkJcmV0dXJuIDA7CisJfQorCQlicmVhazsKKworCWNhc2UgVklESU9DX1FVRVJZQlVGOgorCXsKKwkJc3RydWN0IHY0bDJfYnVmZmVyICpidWYgPSBhcmc7CisJCV9fdTMyIHR5cGUgPSBidWYtPnR5cGU7CisJCWludCBpbmRleCA9IGJ1Zi0+aW5kZXgsIHJlczsKKworCQlkcHJpbnRrKDMsCisJCQlLRVJOX0RFQlVHCisJCQkiJXM6IFZJRElPQ19RVUVSWUJVRiAtIGluZGV4PSVkLCB0eXBlPSVkXG4iLAorCQkJWlJfREVWTkFNRSh6ciksIGJ1Zi0+aW5kZXgsIGJ1Zi0+dHlwZSk7CisKKwkJbWVtc2V0KGJ1ZiwgMCwgc2l6ZW9mKCpidWYpKTsKKwkJYnVmLT50eXBlID0gdHlwZTsKKwkJYnVmLT5pbmRleCA9IGluZGV4OworCisJCW11dGV4X2xvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKKwkJcmVzID0gem9yYW5fdjRsMl9idWZmZXJfc3RhdHVzKGZpbGUsIGJ1ZiwgYnVmLT5pbmRleCk7CisJCW11dGV4X3VubG9jaygmenItPnJlc291cmNlX2xvY2spOworCisJCXJldHVybiByZXM7CisJfQorCQlicmVhazsKKworCWNhc2UgVklESU9DX1FCVUY6CisJeworCQlzdHJ1Y3QgdjRsMl9idWZmZXIgKmJ1ZiA9IGFyZzsKKwkJaW50IHJlcyA9IDAsIGNvZGVjX21vZGUsIGJ1Zl90eXBlOworCisJCWRwcmludGsoMywKKwkJCUtFUk5fREVCVUcgIiVzOiBWSURJT0NfUUJVRiAtIHR5cGU9JWQsIGluZGV4PSVkXG4iLAorCQkJWlJfREVWTkFNRSh6ciksIGJ1Zi0+dHlwZSwgYnVmLT5pbmRleCk7CisKKwkJbXV0ZXhfbG9jaygmenItPnJlc291cmNlX2xvY2spOworCisJCXN3aXRjaCAoZmgtPm1hcF9tb2RlKSB7CisJCWNhc2UgWk9SQU5fTUFQX01PREVfUkFXOgorCQkJaWYgKGJ1Zi0+dHlwZSAhPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUpIHsKKwkJCQlkcHJpbnRrKDEsCisJCQkJCUtFUk5fRVJSCisJCQkJCSIlczogVklESU9DX1FCVUYgLSBpbnZhbGlkIGJ1Zi0+dHlwZT0lZCBmb3IgbWFwX21vZGU9JWRcbiIsCisJCQkJCVpSX0RFVk5BTUUoenIpLCBidWYtPnR5cGUsIGZoLT5tYXBfbW9kZSk7CisJCQkJcmVzID0gLUVJTlZBTDsKKwkJCQlnb3RvIHFidWZfdW5sb2NrX2FuZF9yZXR1cm47CisJCQl9CisKKwkJCXJlcyA9IHpvcmFuX3Y0bF9xdWV1ZV9mcmFtZShmaWxlLCBidWYtPmluZGV4KTsKKwkJCWlmIChyZXMpCisJCQkJZ290byBxYnVmX3VubG9ja19hbmRfcmV0dXJuOworCQkJaWYgKCF6ci0+djRsX21lbWdyYWJfYWN0aXZlICYmCisJCQkgICAgZmgtPnY0bF9idWZmZXJzLmFjdGl2ZSA9PSBaT1JBTl9MT0NLRUQpCisJCQkJenIzNjA1N19zZXRfbWVtZ3JhYih6ciwgMSk7CisJCQlicmVhazsKKworCQljYXNlIFpPUkFOX01BUF9NT0RFX0pQR19SRUM6CisJCWNhc2UgWk9SQU5fTUFQX01PREVfSlBHX1BMQVk6CisJCQlpZiAoZmgtPm1hcF9tb2RlID09IFpPUkFOX01BUF9NT0RFX0pQR19QTEFZKSB7CisJCQkJYnVmX3R5cGUgPSBWNEwyX0JVRl9UWVBFX1ZJREVPX09VVFBVVDsKKwkJCQljb2RlY19tb2RlID0gQlVaX01PREVfTU9USU9OX0RFQ09NUFJFU1M7CisJCQl9IGVsc2UgeworCQkJCWJ1Zl90eXBlID0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOworCQkJCWNvZGVjX21vZGUgPSBCVVpfTU9ERV9NT1RJT05fQ09NUFJFU1M7CisJCQl9CisKKwkJCWlmIChidWYtPnR5cGUgIT0gYnVmX3R5cGUpIHsKKwkJCQlkcHJpbnRrKDEsCisJCQkJCUtFUk5fRVJSCisJCQkJCSIlczogVklESU9DX1FCVUYgLSBpbnZhbGlkIGJ1Zi0+dHlwZT0lZCBmb3IgbWFwX21vZGU9JWRcbiIsCisJCQkJCVpSX0RFVk5BTUUoenIpLCBidWYtPnR5cGUsIGZoLT5tYXBfbW9kZSk7CisJCQkJcmVzID0gLUVJTlZBTDsKKwkJCQlnb3RvIHFidWZfdW5sb2NrX2FuZF9yZXR1cm47CisJCQl9CisKKwkJCXJlcyA9CisJCQkgICAgem9yYW5fanBnX3F1ZXVlX2ZyYW1lKGZpbGUsIGJ1Zi0+aW5kZXgsCisJCQkJCQkgIGNvZGVjX21vZGUpOworCQkJaWYgKHJlcyAhPSAwKQorCQkJCWdvdG8gcWJ1Zl91bmxvY2tfYW5kX3JldHVybjsKKwkJCWlmICh6ci0+Y29kZWNfbW9kZSA9PSBCVVpfTU9ERV9JRExFICYmCisJCQkgICAgZmgtPmpwZ19idWZmZXJzLmFjdGl2ZSA9PSBaT1JBTl9MT0NLRUQpIHsKKwkJCQl6cjM2MDU3X2VuYWJsZV9qcGcoenIsIGNvZGVjX21vZGUpOworCQkJfQorCQkJYnJlYWs7CisKKwkJZGVmYXVsdDoKKwkJCWRwcmludGsoMSwKKwkJCQlLRVJOX0VSUgorCQkJCSIlczogVklESU9DX1FCVUYgLSB1bnN1cHBvcnRlZCB0eXBlICVkXG4iLAorCQkJCVpSX0RFVk5BTUUoenIpLCBidWYtPnR5cGUpOworCQkJcmVzID0gLUVJTlZBTDsKKwkJCWdvdG8gcWJ1Zl91bmxvY2tfYW5kX3JldHVybjsKKwkJfQorCXFidWZfdW5sb2NrX2FuZF9yZXR1cm46CisJCW11dGV4X3VubG9jaygmenItPnJlc291cmNlX2xvY2spOworCisJCXJldHVybiByZXM7CisJfQorCQlicmVhazsKKworCWNhc2UgVklESU9DX0RRQlVGOgorCXsKKwkJc3RydWN0IHY0bDJfYnVmZmVyICpidWYgPSBhcmc7CisJCWludCByZXMgPSAwLCBidWZfdHlwZSwgbnVtID0gLTE7CS8qIGNvbXBpbGVyIGJvcmtzIGhlcmUgKD8pICovCisKKwkJZHByaW50aygzLCBLRVJOX0RFQlVHICIlczogVklESU9DX0RRQlVGIC0gdHlwZT0lZFxuIiwKKwkJCVpSX0RFVk5BTUUoenIpLCBidWYtPnR5cGUpOworCisJCW11dGV4X2xvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKKworCQlzd2l0Y2ggKGZoLT5tYXBfbW9kZSkgeworCQljYXNlIFpPUkFOX01BUF9NT0RFX1JBVzoKKwkJCWlmIChidWYtPnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFKSB7CisJCQkJZHByaW50aygxLAorCQkJCQlLRVJOX0VSUgorCQkJCQkiJXM6IFZJRElPQ19RQlVGIC0gaW52YWxpZCBidWYtPnR5cGU9JWQgZm9yIG1hcF9tb2RlPSVkXG4iLAorCQkJCQlaUl9ERVZOQU1FKHpyKSwgYnVmLT50eXBlLCBmaC0+bWFwX21vZGUpOworCQkJCXJlcyA9IC1FSU5WQUw7CisJCQkJZ290byBkcWJ1Zl91bmxvY2tfYW5kX3JldHVybjsKKwkJCX0KKworCQkJbnVtID0genItPnY0bF9wZW5kW3pyLT52NGxfc3luY190YWlsICYgVjRMX01BU0tfRlJBTUVdOworCQkJaWYgKGZpbGUtPmZfZmxhZ3MgJiBPX05PTkJMT0NLICYmCisJCQkgICAgenItPnY0bF9idWZmZXJzLmJ1ZmZlcltudW1dLnN0YXRlICE9CisJCQkgICAgQlVaX1NUQVRFX0RPTkUpIHsKKwkJCQlyZXMgPSAtRUFHQUlOOworCQkJCWdvdG8gZHFidWZfdW5sb2NrX2FuZF9yZXR1cm47CisJCQl9CisJCQlyZXMgPSB2NGxfc3luYyhmaWxlLCBudW0pOworCQkJaWYgKHJlcykKKwkJCQlnb3RvIGRxYnVmX3VubG9ja19hbmRfcmV0dXJuOworCQkJZWxzZQorCQkJCXpyLT52NGxfc3luY190YWlsKys7CisJCQlyZXMgPSB6b3Jhbl92NGwyX2J1ZmZlcl9zdGF0dXMoZmlsZSwgYnVmLCBudW0pOworCQkJYnJlYWs7CisKKwkJY2FzZSBaT1JBTl9NQVBfTU9ERV9KUEdfUkVDOgorCQljYXNlIFpPUkFOX01BUF9NT0RFX0pQR19QTEFZOgorCQl7CisJCQlzdHJ1Y3Qgem9yYW5fc3luYyBiczsKKworCQkJaWYgKGZoLT5tYXBfbW9kZSA9PSBaT1JBTl9NQVBfTU9ERV9KUEdfUExBWSkKKwkJCQlidWZfdHlwZSA9IFY0TDJfQlVGX1RZUEVfVklERU9fT1VUUFVUOworCQkJZWxzZQorCQkJCWJ1Zl90eXBlID0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOworCisJCQlpZiAoYnVmLT50eXBlICE9IGJ1Zl90eXBlKSB7CisJCQkJZHByaW50aygxLAorCQkJCQlLRVJOX0VSUgorCQkJCQkiJXM6IFZJRElPQ19RQlVGIC0gaW52YWxpZCBidWYtPnR5cGU9JWQgZm9yIG1hcF9tb2RlPSVkXG4iLAorCQkJCQlaUl9ERVZOQU1FKHpyKSwgYnVmLT50eXBlLCBmaC0+bWFwX21vZGUpOworCQkJCXJlcyA9IC1FSU5WQUw7CisJCQkJZ290byBkcWJ1Zl91bmxvY2tfYW5kX3JldHVybjsKKwkJCX0KKworCQkJbnVtID0KKwkJCSAgICB6ci0+anBnX3BlbmRbenItPgorCQkJCQkganBnX3F1ZV90YWlsICYgQlVaX01BU0tfRlJBTUVdOworCisJCQlpZiAoZmlsZS0+Zl9mbGFncyAmIE9fTk9OQkxPQ0sgJiYKKwkJCSAgICB6ci0+anBnX2J1ZmZlcnMuYnVmZmVyW251bV0uc3RhdGUgIT0KKwkJCSAgICBCVVpfU1RBVEVfRE9ORSkgeworCQkJCXJlcyA9IC1FQUdBSU47CisJCQkJZ290byBkcWJ1Zl91bmxvY2tfYW5kX3JldHVybjsKKwkJCX0KKwkJCXJlcyA9IGpwZ19zeW5jKGZpbGUsICZicyk7CisJCQlpZiAocmVzKQorCQkJCWdvdG8gZHFidWZfdW5sb2NrX2FuZF9yZXR1cm47CisJCQlyZXMgPQorCQkJICAgIHpvcmFuX3Y0bDJfYnVmZmVyX3N0YXR1cyhmaWxlLCBidWYsIGJzLmZyYW1lKTsKKwkJCWJyZWFrOworCQl9CisKKwkJZGVmYXVsdDoKKwkJCWRwcmludGsoMSwKKwkJCQlLRVJOX0VSUgorCQkJCSIlczogVklESU9DX0RRQlVGIC0gdW5zdXBwb3J0ZWQgdHlwZSAlZFxuIiwKKwkJCQlaUl9ERVZOQU1FKHpyKSwgYnVmLT50eXBlKTsKKwkJCXJlcyA9IC1FSU5WQUw7CisJCQlnb3RvIGRxYnVmX3VubG9ja19hbmRfcmV0dXJuOworCQl9CisJZHFidWZfdW5sb2NrX2FuZF9yZXR1cm46CisJCW11dGV4X3VubG9jaygmenItPnJlc291cmNlX2xvY2spOworCisJCXJldHVybiByZXM7CisJfQorCQlicmVhazsKKworCWNhc2UgVklESU9DX1NUUkVBTU9OOgorCXsKKwkJaW50IHJlcyA9IDA7CisKKwkJZHByaW50aygzLCBLRVJOX0RFQlVHICIlczogVklESU9DX1NUUkVBTU9OXG4iLCBaUl9ERVZOQU1FKHpyKSk7CisKKwkJbXV0ZXhfbG9jaygmenItPnJlc291cmNlX2xvY2spOworCisJCXN3aXRjaCAoZmgtPm1hcF9tb2RlKSB7CisJCWNhc2UgWk9SQU5fTUFQX01PREVfUkFXOgkvKiByYXcgY2FwdHVyZSAqLworCQkJaWYgKHpyLT52NGxfYnVmZmVycy5hY3RpdmUgIT0gWk9SQU5fQUNUSVZFIHx8CisJCQkgICAgZmgtPnY0bF9idWZmZXJzLmFjdGl2ZSAhPSBaT1JBTl9BQ1RJVkUpIHsKKwkJCQlyZXMgPSAtRUJVU1k7CisJCQkJZ290byBzdHJtb25fdW5sb2NrX2FuZF9yZXR1cm47CisJCQl9CisKKwkJCXpyLT52NGxfYnVmZmVycy5hY3RpdmUgPSBmaC0+djRsX2J1ZmZlcnMuYWN0aXZlID0KKwkJCSAgICBaT1JBTl9MT0NLRUQ7CisJCQl6ci0+djRsX3NldHRpbmdzID0gZmgtPnY0bF9zZXR0aW5nczsKKworCQkJenItPnY0bF9zeW5jX3RhaWwgPSB6ci0+djRsX3BlbmRfdGFpbDsKKwkJCWlmICghenItPnY0bF9tZW1ncmFiX2FjdGl2ZSAmJgorCQkJICAgIHpyLT52NGxfcGVuZF9oZWFkICE9IHpyLT52NGxfcGVuZF90YWlsKSB7CisJCQkJenIzNjA1N19zZXRfbWVtZ3JhYih6ciwgMSk7CisJCQl9CisJCQlicmVhazsKKworCQljYXNlIFpPUkFOX01BUF9NT0RFX0pQR19SRUM6CisJCWNhc2UgWk9SQU5fTUFQX01PREVfSlBHX1BMQVk6CisJCQkvKiB3aGF0IGlzIHRoZSBjb2RlYyBtb2RlIHJpZ2h0IG5vdz8gKi8KKwkJCWlmICh6ci0+anBnX2J1ZmZlcnMuYWN0aXZlICE9IFpPUkFOX0FDVElWRSB8fAorCQkJICAgIGZoLT5qcGdfYnVmZmVycy5hY3RpdmUgIT0gWk9SQU5fQUNUSVZFKSB7CisJCQkJcmVzID0gLUVCVVNZOworCQkJCWdvdG8gc3RybW9uX3VubG9ja19hbmRfcmV0dXJuOworCQkJfQorCisJCQl6ci0+anBnX2J1ZmZlcnMuYWN0aXZlID0gZmgtPmpwZ19idWZmZXJzLmFjdGl2ZSA9CisJCQkgICAgWk9SQU5fTE9DS0VEOworCisJCQlpZiAoenItPmpwZ19xdWVfaGVhZCAhPSB6ci0+anBnX3F1ZV90YWlsKSB7CisJCQkJLyogU3RhcnQgdGhlIGpwZWcgY29kZWMgd2hlbiB0aGUgZmlyc3QgZnJhbWUgaXMgcXVldWVkICAqLworCQkJCWpwZWdfc3RhcnQoenIpOworCQkJfQorCisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWRwcmludGsoMSwKKwkJCQlLRVJOX0VSUgorCQkJCSIlczogVklESU9DX1NUUkVBTU9OIC0gaW52YWxpZCBtYXAgbW9kZSAlZFxuIiwKKwkJCQlaUl9ERVZOQU1FKHpyKSwgZmgtPm1hcF9tb2RlKTsKKwkJCXJlcyA9IC1FSU5WQUw7CisJCQlnb3RvIHN0cm1vbl91bmxvY2tfYW5kX3JldHVybjsKKwkJfQorCXN0cm1vbl91bmxvY2tfYW5kX3JldHVybjoKKwkJbXV0ZXhfdW5sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7CisKKwkJcmV0dXJuIHJlczsKKwl9CisJCWJyZWFrOworCisJY2FzZSBWSURJT0NfU1RSRUFNT0ZGOgorCXsKKwkJaW50IGksIHJlcyA9IDA7CisKKwkJZHByaW50aygzLCBLRVJOX0RFQlVHICIlczogVklESU9DX1NUUkVBTU9GRlxuIiwgWlJfREVWTkFNRSh6cikpOworCisJCW11dGV4X2xvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKKworCQlzd2l0Y2ggKGZoLT5tYXBfbW9kZSkgeworCQljYXNlIFpPUkFOX01BUF9NT0RFX1JBVzoJLyogcmF3IGNhcHR1cmUgKi8KKwkJCWlmIChmaC0+djRsX2J1ZmZlcnMuYWN0aXZlID09IFpPUkFOX0ZSRUUgJiYKKwkJCSAgICB6ci0+djRsX2J1ZmZlcnMuYWN0aXZlICE9IFpPUkFOX0ZSRUUpIHsKKwkJCQlyZXMgPSAtRVBFUk07CS8qIHN0YXkgb2ZmIG90aGVyJ3Mgc2V0dGluZ3MhICovCisJCQkJZ290byBzdHJtb2ZmX3VubG9ja19hbmRfcmV0dXJuOworCQkJfQorCQkJaWYgKHpyLT52NGxfYnVmZmVycy5hY3RpdmUgPT0gWk9SQU5fRlJFRSkKKwkJCQlnb3RvIHN0cm1vZmZfdW5sb2NrX2FuZF9yZXR1cm47CisKKwkJCS8qIHVubG9hZCBjYXB0dXJlICovCisJCQlpZiAoenItPnY0bF9tZW1ncmFiX2FjdGl2ZSkgeworCQkJCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwkJCQlzcGluX2xvY2tfaXJxc2F2ZSgmenItPnNwaW5sb2NrLCBmbGFncyk7CisJCQkJenIzNjA1N19zZXRfbWVtZ3JhYih6ciwgMCk7CisJCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmenItPnNwaW5sb2NrLCBmbGFncyk7CisJCQl9CisKKwkJCWZvciAoaSA9IDA7IGkgPCBmaC0+djRsX2J1ZmZlcnMubnVtX2J1ZmZlcnM7IGkrKykKKwkJCQl6ci0+djRsX2J1ZmZlcnMuYnVmZmVyW2ldLnN0YXRlID0KKwkJCQkgICAgQlVaX1NUQVRFX1VTRVI7CisJCQlmaC0+djRsX2J1ZmZlcnMgPSB6ci0+djRsX2J1ZmZlcnM7CisKKwkJCXpyLT52NGxfYnVmZmVycy5hY3RpdmUgPSBmaC0+djRsX2J1ZmZlcnMuYWN0aXZlID0KKwkJCSAgICBaT1JBTl9GUkVFOworCisJCQl6ci0+djRsX2dyYWJfc2VxID0gMDsKKwkJCXpyLT52NGxfcGVuZF9oZWFkID0genItPnY0bF9wZW5kX3RhaWwgPSAwOworCQkJenItPnY0bF9zeW5jX3RhaWwgPSAwOworCisJCQlicmVhazsKKworCQljYXNlIFpPUkFOX01BUF9NT0RFX0pQR19SRUM6CisJCWNhc2UgWk9SQU5fTUFQX01PREVfSlBHX1BMQVk6CisJCQlpZiAoZmgtPmpwZ19idWZmZXJzLmFjdGl2ZSA9PSBaT1JBTl9GUkVFICYmCisJCQkgICAgenItPmpwZ19idWZmZXJzLmFjdGl2ZSAhPSBaT1JBTl9GUkVFKSB7CisJCQkJcmVzID0gLUVQRVJNOwkvKiBzdGF5IG9mZiBvdGhlcidzIHNldHRpbmdzISAqLworCQkJCWdvdG8gc3RybW9mZl91bmxvY2tfYW5kX3JldHVybjsKKwkJCX0KKwkJCWlmICh6ci0+anBnX2J1ZmZlcnMuYWN0aXZlID09IFpPUkFOX0ZSRUUpCisJCQkJZ290byBzdHJtb2ZmX3VubG9ja19hbmRfcmV0dXJuOworCisJCQlyZXMgPQorCQkJICAgIGpwZ19xYnVmKGZpbGUsIC0xLAorCQkJCSAgICAgKGZoLT5tYXBfbW9kZSA9PQorCQkJCSAgICAgIFpPUkFOX01BUF9NT0RFX0pQR19SRUMpID8KKwkJCQkgICAgIEJVWl9NT0RFX01PVElPTl9DT01QUkVTUyA6CisJCQkJICAgICBCVVpfTU9ERV9NT1RJT05fREVDT01QUkVTUyk7CisJCQlpZiAocmVzKQorCQkJCWdvdG8gc3RybW9mZl91bmxvY2tfYW5kX3JldHVybjsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJZHByaW50aygxLAorCQkJCUtFUk5fRVJSCisJCQkJIiVzOiBWSURJT0NfU1RSRUFNT0ZGIC0gaW52YWxpZCBtYXAgbW9kZSAlZFxuIiwKKwkJCQlaUl9ERVZOQU1FKHpyKSwgZmgtPm1hcF9tb2RlKTsKKwkJCXJlcyA9IC1FSU5WQUw7CisJCQlnb3RvIHN0cm1vZmZfdW5sb2NrX2FuZF9yZXR1cm47CisJCX0KKwlzdHJtb2ZmX3VubG9ja19hbmRfcmV0dXJuOgorCQltdXRleF91bmxvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKKworCQlyZXR1cm4gcmVzOworCX0KKwkJYnJlYWs7CisKKwljYXNlIFZJRElPQ19RVUVSWUNUUkw6CisJeworCQlzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgKmN0cmwgPSBhcmc7CisKKwkJZHByaW50aygzLCBLRVJOX0RFQlVHICIlczogVklESU9DX1FVRVJZQ1RSTCAtIGlkPSVkXG4iLAorCQkJWlJfREVWTkFNRSh6ciksIGN0cmwtPmlkKTsKKworCQkvKiB3ZSBvbmx5IHN1cHBvcnQgaHVlL3NhdHVyYXRpb24vY29udHJhc3QvYnJpZ2h0bmVzcyAqLworCQlpZiAoY3RybC0+aWQgPCBWNEwyX0NJRF9CUklHSFRORVNTIHx8CisJCSAgICBjdHJsLT5pZCA+IFY0TDJfQ0lEX0hVRSkKKwkJCXJldHVybiAtRUlOVkFMOworCQllbHNlIHsKKwkJCWludCBpZCA9IGN0cmwtPmlkOworCQkJbWVtc2V0KGN0cmwsIDAsIHNpemVvZigqY3RybCkpOworCQkJY3RybC0+aWQgPSBpZDsKKwkJfQorCisJCXN3aXRjaCAoY3RybC0+aWQpIHsKKwkJY2FzZSBWNEwyX0NJRF9CUklHSFRORVNTOgorCQkJc3RybmNweShjdHJsLT5uYW1lLCAiQnJpZ2h0bmVzcyIsIHNpemVvZihjdHJsLT5uYW1lKS0xKTsKKwkJCWJyZWFrOworCQljYXNlIFY0TDJfQ0lEX0NPTlRSQVNUOgorCQkJc3RybmNweShjdHJsLT5uYW1lLCAiQ29udHJhc3QiLCBzaXplb2YoY3RybC0+bmFtZSktMSk7CisJCQlicmVhazsKKwkJY2FzZSBWNEwyX0NJRF9TQVRVUkFUSU9OOgorCQkJc3RybmNweShjdHJsLT5uYW1lLCAiU2F0dXJhdGlvbiIsIHNpemVvZihjdHJsLT5uYW1lKS0xKTsKKwkJCWJyZWFrOworCQljYXNlIFY0TDJfQ0lEX0hVRToKKwkJCXN0cm5jcHkoY3RybC0+bmFtZSwgIkh1ZSIsIHNpemVvZihjdHJsLT5uYW1lKS0xKTsKKwkJCWJyZWFrOworCQl9CisKKwkJY3RybC0+bWluaW11bSA9IDA7CisJCWN0cmwtPm1heGltdW0gPSA2NTUzNTsKKwkJY3RybC0+c3RlcCA9IDE7CisJCWN0cmwtPmRlZmF1bHRfdmFsdWUgPSAzMjc2ODsKKwkJY3RybC0+dHlwZSA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVI7CisKKwkJcmV0dXJuIDA7CisJfQorCQlicmVhazsKKworCWNhc2UgVklESU9DX0dfQ1RSTDoKKwl7CisJCXN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwgPSBhcmc7CisKKwkJZHByaW50aygzLCBLRVJOX0RFQlVHICIlczogVklESU9DX0dfQ1RSTCAtIGlkPSVkXG4iLAorCQkJWlJfREVWTkFNRSh6ciksIGN0cmwtPmlkKTsKKworCQkvKiB3ZSBvbmx5IHN1cHBvcnQgaHVlL3NhdHVyYXRpb24vY29udHJhc3QvYnJpZ2h0bmVzcyAqLworCQlpZiAoY3RybC0+aWQgPCBWNEwyX0NJRF9CUklHSFRORVNTIHx8CisJCSAgICBjdHJsLT5pZCA+IFY0TDJfQ0lEX0hVRSkKKwkJCXJldHVybiAtRUlOVkFMOworCisJCW11dGV4X2xvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKKwkJc3dpdGNoIChjdHJsLT5pZCkgeworCQljYXNlIFY0TDJfQ0lEX0JSSUdIVE5FU1M6CisJCQljdHJsLT52YWx1ZSA9IHpyLT5icmlnaHRuZXNzOworCQkJYnJlYWs7CisJCWNhc2UgVjRMMl9DSURfQ09OVFJBU1Q6CisJCQljdHJsLT52YWx1ZSA9IHpyLT5jb250cmFzdDsKKwkJCWJyZWFrOworCQljYXNlIFY0TDJfQ0lEX1NBVFVSQVRJT046CisJCQljdHJsLT52YWx1ZSA9IHpyLT5zYXR1cmF0aW9uOworCQkJYnJlYWs7CisJCWNhc2UgVjRMMl9DSURfSFVFOgorCQkJY3RybC0+dmFsdWUgPSB6ci0+aHVlOworCQkJYnJlYWs7CisJCX0KKwkJbXV0ZXhfdW5sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7CisKKwkJcmV0dXJuIDA7CisJfQorCQlicmVhazsKKworCWNhc2UgVklESU9DX1NfQ1RSTDoKKwl7CisJCXN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwgPSBhcmc7CisJCXN0cnVjdCB2aWRlb19waWN0dXJlIHBpY3Q7CisKKwkJZHByaW50aygzLCBLRVJOX0RFQlVHICIlczogVklESU9DX1NfQ1RSTCAtIGlkPSVkXG4iLAorCQkJWlJfREVWTkFNRSh6ciksIGN0cmwtPmlkKTsKKworCQkvKiB3ZSBvbmx5IHN1cHBvcnQgaHVlL3NhdHVyYXRpb24vY29udHJhc3QvYnJpZ2h0bmVzcyAqLworCQlpZiAoY3RybC0+aWQgPCBWNEwyX0NJRF9CUklHSFRORVNTIHx8CisJCSAgICBjdHJsLT5pZCA+IFY0TDJfQ0lEX0hVRSkKKwkJCXJldHVybiAtRUlOVkFMOworCisJCWlmIChjdHJsLT52YWx1ZSA8IDAgfHwgY3RybC0+dmFsdWUgPiA2NTUzNSkgeworCQkJZHByaW50aygxLAorCQkJCUtFUk5fRVJSCisJCQkJIiVzOiBWSURJT0NfU19DVFJMIC0gaW52YWxpZCB2YWx1ZSAlZCBmb3IgaWQ9JWRcbiIsCisJCQkJWlJfREVWTkFNRSh6ciksIGN0cmwtPnZhbHVlLCBjdHJsLT5pZCk7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCisJCW11dGV4X2xvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKKwkJc3dpdGNoIChjdHJsLT5pZCkgeworCQljYXNlIFY0TDJfQ0lEX0JSSUdIVE5FU1M6CisJCQl6ci0+YnJpZ2h0bmVzcyA9IGN0cmwtPnZhbHVlOworCQkJYnJlYWs7CisJCWNhc2UgVjRMMl9DSURfQ09OVFJBU1Q6CisJCQl6ci0+Y29udHJhc3QgPSBjdHJsLT52YWx1ZTsKKwkJCWJyZWFrOworCQljYXNlIFY0TDJfQ0lEX1NBVFVSQVRJT046CisJCQl6ci0+c2F0dXJhdGlvbiA9IGN0cmwtPnZhbHVlOworCQkJYnJlYWs7CisJCWNhc2UgVjRMMl9DSURfSFVFOgorCQkJenItPmh1ZSA9IGN0cmwtPnZhbHVlOworCQkJYnJlYWs7CisJCX0KKwkJcGljdC5icmlnaHRuZXNzID0genItPmJyaWdodG5lc3M7CisJCXBpY3QuY29udHJhc3QgPSB6ci0+Y29udHJhc3Q7CisJCXBpY3QuY29sb3VyID0genItPnNhdHVyYXRpb247CisJCXBpY3QuaHVlID0genItPmh1ZTsKKworCQlkZWNvZGVyX2NvbW1hbmQoenIsIERFQ09ERVJfU0VUX1BJQ1RVUkUsICZwaWN0KTsKKworCQltdXRleF91bmxvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKKworCQlyZXR1cm4gMDsKKwl9CisJCWJyZWFrOworCisJY2FzZSBWSURJT0NfRU5VTVNURDoKKwl7CisJCXN0cnVjdCB2NGwyX3N0YW5kYXJkICpzdGQgPSBhcmc7CisKKwkJZHByaW50aygzLCBLRVJOX0RFQlVHICIlczogVklESU9DX0VOVU1TVEQgLSBpbmRleD0lZFxuIiwKKwkJCVpSX0RFVk5BTUUoenIpLCBzdGQtPmluZGV4KTsKKworCQlpZiAoc3RkLT5pbmRleCA8IDAgfHwgc3RkLT5pbmRleCA+PSAoenItPmNhcmQubm9ybXMgKyAxKSkKKwkJCXJldHVybiAtRUlOVkFMOworCQllbHNlIHsKKwkJCWludCBpZCA9IHN0ZC0+aW5kZXg7CisJCQltZW1zZXQoc3RkLCAwLCBzaXplb2YoKnN0ZCkpOworCQkJc3RkLT5pbmRleCA9IGlkOworCQl9CisKKwkJaWYgKHN0ZC0+aW5kZXggPT0genItPmNhcmQubm9ybXMpIHsKKwkJCS8qIGlmIHdlIGhhdmUgYXV0b2RldGVjdCwgLi4uICovCisJCQlzdHJ1Y3QgdmlkZW9fZGVjb2Rlcl9jYXBhYmlsaXR5IGNhcHM7CisJCQlkZWNvZGVyX2NvbW1hbmQoenIsIERFQ09ERVJfR0VUX0NBUEFCSUxJVElFUywKKwkJCQkJJmNhcHMpOworCQkJaWYgKGNhcHMuZmxhZ3MgJiBWSURFT19ERUNPREVSX0FVVE8pIHsKKwkJCQlzdGQtPmlkID0gVjRMMl9TVERfQUxMOworCQkJCXN0cm5jcHkoc3RkLT5uYW1lLCAiQXV0b2RldGVjdCIsIHNpemVvZihzdGQtPm5hbWUpLTEpOworCQkJCXJldHVybiAwOworCQkJfSBlbHNlCisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwkJc3dpdGNoIChzdGQtPmluZGV4KSB7CisJCWNhc2UgMDoKKwkJCXN0ZC0+aWQgPSBWNEwyX1NURF9QQUw7CisJCQlzdHJuY3B5KHN0ZC0+bmFtZSwgIlBBTCIsIHNpemVvZihzdGQtPm5hbWUpLTEpOworCQkJc3RkLT5mcmFtZXBlcmlvZC5udW1lcmF0b3IgPSAxOworCQkJc3RkLT5mcmFtZXBlcmlvZC5kZW5vbWluYXRvciA9IDI1OworCQkJc3RkLT5mcmFtZWxpbmVzID0genItPmNhcmQudHZuWzBdLT5IdDsKKwkJCWJyZWFrOworCQljYXNlIDE6CisJCQlzdGQtPmlkID0gVjRMMl9TVERfTlRTQzsKKwkJCXN0cm5jcHkoc3RkLT5uYW1lLCAiTlRTQyIsIHNpemVvZihzdGQtPm5hbWUpLTEpOworCQkJc3RkLT5mcmFtZXBlcmlvZC5udW1lcmF0b3IgPSAxMDAxOworCQkJc3RkLT5mcmFtZXBlcmlvZC5kZW5vbWluYXRvciA9IDMwMDAwOworCQkJc3RkLT5mcmFtZWxpbmVzID0genItPmNhcmQudHZuWzFdLT5IdDsKKwkJCWJyZWFrOworCQljYXNlIDI6CisJCQlzdGQtPmlkID0gVjRMMl9TVERfU0VDQU07CisJCQlzdHJuY3B5KHN0ZC0+bmFtZSwgIlNFQ0FNIiwgc2l6ZW9mKHN0ZC0+bmFtZSktMSk7CisJCQlzdGQtPmZyYW1lcGVyaW9kLm51bWVyYXRvciA9IDE7CisJCQlzdGQtPmZyYW1lcGVyaW9kLmRlbm9taW5hdG9yID0gMjU7CisJCQlzdGQtPmZyYW1lbGluZXMgPSB6ci0+Y2FyZC50dm5bMl0tPkh0OworCQkJYnJlYWs7CisJCX0KKworCQlyZXR1cm4gMDsKKwl9CisJCWJyZWFrOworCisJY2FzZSBWSURJT0NfR19TVEQ6CisJeworCQl2NGwyX3N0ZF9pZCAqc3RkID0gYXJnOworCQlpbnQgbm9ybTsKKworCQlkcHJpbnRrKDMsIEtFUk5fREVCVUcgIiVzOiBWSURJT0NfR19TVERcbiIsIFpSX0RFVk5BTUUoenIpKTsKKworCQltdXRleF9sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7CisJCW5vcm0gPSB6ci0+bm9ybTsKKwkJbXV0ZXhfdW5sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7CisKKwkJc3dpdGNoIChub3JtKSB7CisJCWNhc2UgVklERU9fTU9ERV9QQUw6CisJCQkqc3RkID0gVjRMMl9TVERfUEFMOworCQkJYnJlYWs7CisJCWNhc2UgVklERU9fTU9ERV9OVFNDOgorCQkJKnN0ZCA9IFY0TDJfU1REX05UU0M7CisJCQlicmVhazsKKwkJY2FzZSBWSURFT19NT0RFX1NFQ0FNOgorCQkJKnN0ZCA9IFY0TDJfU1REX1NFQ0FNOworCQkJYnJlYWs7CisJCX0KKworCQlyZXR1cm4gMDsKKwl9CisJCWJyZWFrOworCisJY2FzZSBWSURJT0NfU19TVEQ6CisJeworCQlpbnQgbm9ybSA9IC0xLCByZXMgPSAwOworCQl2NGwyX3N0ZF9pZCAqc3RkID0gYXJnOworCisJCWRwcmludGsoMywgS0VSTl9ERUJVRyAiJXM6IFZJRElPQ19TX1NURCAtIG5vcm09MHglbGx4XG4iLAorCQkJWlJfREVWTkFNRSh6ciksICh1bnNpZ25lZCBsb25nIGxvbmcpKnN0ZCk7CisKKwkJaWYgKCgqc3RkICYgVjRMMl9TVERfUEFMKSAmJiAhKCpzdGQgJiB+VjRMMl9TVERfUEFMKSkKKwkJCW5vcm0gPSBWSURFT19NT0RFX1BBTDsKKwkJZWxzZSBpZiAoKCpzdGQgJiBWNEwyX1NURF9OVFNDKSAmJiAhKCpzdGQgJiB+VjRMMl9TVERfTlRTQykpCisJCQlub3JtID0gVklERU9fTU9ERV9OVFNDOworCQllbHNlIGlmICgoKnN0ZCAmIFY0TDJfU1REX1NFQ0FNKSAmJiAhKCpzdGQgJiB+VjRMMl9TVERfU0VDQU0pKQorCQkJbm9ybSA9IFZJREVPX01PREVfU0VDQU07CisJCWVsc2UgaWYgKCpzdGQgPT0gVjRMMl9TVERfQUxMKQorCQkJbm9ybSA9IFZJREVPX01PREVfQVVUTzsKKwkJZWxzZSB7CisJCQlkcHJpbnRrKDEsCisJCQkJS0VSTl9FUlIKKwkJCQkiJXM6IFZJRElPQ19TX1NURCAtIGludmFsaWQgbm9ybSAweCVsbHhcbiIsCisJCQkJWlJfREVWTkFNRSh6ciksICh1bnNpZ25lZCBsb25nIGxvbmcpKnN0ZCk7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCisJCW11dGV4X2xvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKKwkJaWYgKChyZXMgPSB6b3Jhbl9zZXRfbm9ybSh6ciwgbm9ybSkpKQorCQkJZ290byBzc3RkX3VubG9ja19hbmRfcmV0dXJuOworCisJCXJlcyA9IHdhaXRfZ3JhYl9wZW5kaW5nKHpyKTsKKwlzc3RkX3VubG9ja19hbmRfcmV0dXJuOgorCQltdXRleF91bmxvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKKwkJcmV0dXJuIHJlczsKKwl9CisJCWJyZWFrOworCisJY2FzZSBWSURJT0NfRU5VTUlOUFVUOgorCXsKKwkJc3RydWN0IHY0bDJfaW5wdXQgKmlucCA9IGFyZzsKKwkJaW50IHN0YXR1czsKKworCQlkcHJpbnRrKDMsIEtFUk5fREVCVUcgIiVzOiBWSURJT0NfRU5VTUlOUFVUIC0gaW5kZXg9JWRcbiIsCisJCQlaUl9ERVZOQU1FKHpyKSwgaW5wLT5pbmRleCk7CisKKwkJaWYgKGlucC0+aW5kZXggPCAwIHx8IGlucC0+aW5kZXggPj0genItPmNhcmQuaW5wdXRzKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCWVsc2UgeworCQkJaW50IGlkID0gaW5wLT5pbmRleDsKKwkJCW1lbXNldChpbnAsIDAsIHNpemVvZigqaW5wKSk7CisJCQlpbnAtPmluZGV4ID0gaWQ7CisJCX0KKworCQlzdHJuY3B5KGlucC0+bmFtZSwgenItPmNhcmQuaW5wdXRbaW5wLT5pbmRleF0ubmFtZSwKKwkJCXNpemVvZihpbnAtPm5hbWUpIC0gMSk7CisJCWlucC0+dHlwZSA9IFY0TDJfSU5QVVRfVFlQRV9DQU1FUkE7CisJCWlucC0+c3RkID0gVjRMMl9TVERfQUxMOworCisJCS8qIEdldCBzdGF0dXMgb2YgdmlkZW8gZGVjb2RlciAqLworCQltdXRleF9sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7CisJCWRlY29kZXJfY29tbWFuZCh6ciwgREVDT0RFUl9HRVRfU1RBVFVTLCAmc3RhdHVzKTsKKwkJbXV0ZXhfdW5sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7CisKKwkJaWYgKCEoc3RhdHVzICYgREVDT0RFUl9TVEFUVVNfR09PRCkpIHsKKwkJCWlucC0+c3RhdHVzIHw9IFY0TDJfSU5fU1RfTk9fUE9XRVI7CisJCQlpbnAtPnN0YXR1cyB8PSBWNEwyX0lOX1NUX05PX1NJR05BTDsKKwkJfQorCQlpZiAoIShzdGF0dXMgJiBERUNPREVSX1NUQVRVU19DT0xPUikpCisJCQlpbnAtPnN0YXR1cyB8PSBWNEwyX0lOX1NUX05PX0NPTE9SOworCisJCXJldHVybiAwOworCX0KKwkJYnJlYWs7CisKKwljYXNlIFZJRElPQ19HX0lOUFVUOgorCXsKKwkJaW50ICppbnB1dCA9IGFyZzsKKworCQlkcHJpbnRrKDMsIEtFUk5fREVCVUcgIiVzOiBWSURJT0NfR19JTlBVVFxuIiwgWlJfREVWTkFNRSh6cikpOworCisJCW11dGV4X2xvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKKwkJKmlucHV0ID0genItPmlucHV0OworCQltdXRleF91bmxvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKKworCQlyZXR1cm4gMDsKKwl9CisJCWJyZWFrOworCisJY2FzZSBWSURJT0NfU19JTlBVVDoKKwl7CisJCWludCAqaW5wdXQgPSBhcmcsIHJlcyA9IDA7CisKKwkJZHByaW50aygzLCBLRVJOX0RFQlVHICIlczogVklESU9DX1NfSU5QVVQgLSBpbnB1dD0lZFxuIiwKKwkJCVpSX0RFVk5BTUUoenIpLCAqaW5wdXQpOworCisJCW11dGV4X2xvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKKwkJaWYgKChyZXMgPSB6b3Jhbl9zZXRfaW5wdXQoenIsICppbnB1dCkpKQorCQkJZ290byBzaW5wdXRfdW5sb2NrX2FuZF9yZXR1cm47CisKKwkJLyogTWFrZSBzdXJlIHRoZSBjaGFuZ2VzIGNvbWUgaW50byBlZmZlY3QgKi8KKwkJcmVzID0gd2FpdF9ncmFiX3BlbmRpbmcoenIpOworCXNpbnB1dF91bmxvY2tfYW5kX3JldHVybjoKKwkJbXV0ZXhfdW5sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7CisJCXJldHVybiByZXM7CisJfQorCQlicmVhazsKKworCWNhc2UgVklESU9DX0VOVU1PVVRQVVQ6CisJeworCQlzdHJ1Y3QgdjRsMl9vdXRwdXQgKm91dHAgPSBhcmc7CisKKwkJZHByaW50aygzLCBLRVJOX0RFQlVHICIlczogVklESU9DX0VOVU1PVVRQVVQgLSBpbmRleD0lZFxuIiwKKwkJCVpSX0RFVk5BTUUoenIpLCBvdXRwLT5pbmRleCk7CisKKwkJaWYgKG91dHAtPmluZGV4ICE9IDApCisJCQlyZXR1cm4gLUVJTlZBTDsKKworCQltZW1zZXQob3V0cCwgMCwgc2l6ZW9mKCpvdXRwKSk7CisJCW91dHAtPmluZGV4ID0gMDsKKwkJb3V0cC0+dHlwZSA9IFY0TDJfT1VUUFVUX1RZUEVfQU5BTE9HVkdBT1ZFUkxBWTsKKwkJc3RybmNweShvdXRwLT5uYW1lLCAiQXV0b2RldGVjdCIsIHNpemVvZihvdXRwLT5uYW1lKS0xKTsKKworCQlyZXR1cm4gMDsKKwl9CisJCWJyZWFrOworCisJY2FzZSBWSURJT0NfR19PVVRQVVQ6CisJeworCQlpbnQgKm91dHB1dCA9IGFyZzsKKworCQlkcHJpbnRrKDMsIEtFUk5fREVCVUcgIiVzOiBWSURJT0NfR19PVVRQVVRcbiIsIFpSX0RFVk5BTUUoenIpKTsKKworCQkqb3V0cHV0ID0gMDsKKworCQlyZXR1cm4gMDsKKwl9CisJCWJyZWFrOworCisJY2FzZSBWSURJT0NfU19PVVRQVVQ6CisJeworCQlpbnQgKm91dHB1dCA9IGFyZzsKKworCQlkcHJpbnRrKDMsIEtFUk5fREVCVUcgIiVzOiBWSURJT0NfU19PVVRQVVQgLSBvdXRwdXQ9JWRcbiIsCisJCQlaUl9ERVZOQU1FKHpyKSwgKm91dHB1dCk7CisKKwkJaWYgKCpvdXRwdXQgIT0gMCkKKwkJCXJldHVybiAtRUlOVkFMOworCisJCXJldHVybiAwOworCX0KKwkJYnJlYWs7CisKKwkJLyogY3JvcHBpbmcgKHN1Yi1mcmFtZSBjYXB0dXJlKSAqLworCWNhc2UgVklESU9DX0NST1BDQVA6CisJeworCQlzdHJ1Y3QgdjRsMl9jcm9wY2FwICpjcm9wY2FwID0gYXJnOworCQlpbnQgdHlwZSA9IGNyb3BjYXAtPnR5cGUsIHJlcyA9IDA7CisKKwkJZHByaW50aygzLCBLRVJOX0VSUiAiJXM6IFZJRElPQ19DUk9QQ0FQIC0gdHlwZT0lZFxuIiwKKwkJCVpSX0RFVk5BTUUoenIpLCBjcm9wY2FwLT50eXBlKTsKKworCQltZW1zZXQoY3JvcGNhcCwgMCwgc2l6ZW9mKCpjcm9wY2FwKSk7CisJCWNyb3BjYXAtPnR5cGUgPSB0eXBlOworCisJCW11dGV4X2xvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKKworCQlpZiAoY3JvcGNhcC0+dHlwZSAhPSBWNEwyX0JVRl9UWVBFX1ZJREVPX09VVFBVVCAmJgorCQkgICAgKGNyb3BjYXAtPnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFIHx8CisJCSAgICAgZmgtPm1hcF9tb2RlID09IFpPUkFOX01BUF9NT0RFX1JBVykpIHsKKwkJCWRwcmludGsoMSwKKwkJCQlLRVJOX0VSUgorCQkJCSIlczogVklESU9DX0NST1BDQVAgLSBzdWJjYXB0dXJlIG9ubHkgc3VwcG9ydGVkIGZvciBjb21wcmVzc2VkIGNhcHR1cmVcbiIsCisJCQkJWlJfREVWTkFNRSh6cikpOworCQkJcmVzID0gLUVJTlZBTDsKKwkJCWdvdG8gY3JvcGNhcF91bmxvY2tfYW5kX3JldHVybjsKKwkJfQorCisJCWNyb3BjYXAtPmJvdW5kcy50b3AgPSBjcm9wY2FwLT5ib3VuZHMubGVmdCA9IDA7CisJCWNyb3BjYXAtPmJvdW5kcy53aWR0aCA9IEJVWl9NQVhfV0lEVEg7CisJCWNyb3BjYXAtPmJvdW5kcy5oZWlnaHQgPSBCVVpfTUFYX0hFSUdIVDsKKwkJY3JvcGNhcC0+ZGVmcmVjdC50b3AgPSBjcm9wY2FwLT5kZWZyZWN0LmxlZnQgPSAwOworCQljcm9wY2FwLT5kZWZyZWN0LndpZHRoID0gQlVaX01JTl9XSURUSDsKKwkJY3JvcGNhcC0+ZGVmcmVjdC5oZWlnaHQgPSBCVVpfTUlOX0hFSUdIVDsKKwljcm9wY2FwX3VubG9ja19hbmRfcmV0dXJuOgorCQltdXRleF91bmxvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKKwkJcmV0dXJuIHJlczsKKwl9CisJCWJyZWFrOworCisJY2FzZSBWSURJT0NfR19DUk9QOgorCXsKKwkJc3RydWN0IHY0bDJfY3JvcCAqY3JvcCA9IGFyZzsKKwkJaW50IHR5cGUgPSBjcm9wLT50eXBlLCByZXMgPSAwOworCisJCWRwcmludGsoMywgS0VSTl9FUlIgIiVzOiBWSURJT0NfR19DUk9QIC0gdHlwZT0lZFxuIiwKKwkJCVpSX0RFVk5BTUUoenIpLCBjcm9wLT50eXBlKTsKKworCQltZW1zZXQoY3JvcCwgMCwgc2l6ZW9mKCpjcm9wKSk7CisJCWNyb3AtPnR5cGUgPSB0eXBlOworCisJCW11dGV4X2xvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKKworCQlpZiAoY3JvcC0+dHlwZSAhPSBWNEwyX0JVRl9UWVBFX1ZJREVPX09VVFBVVCAmJgorCQkgICAgKGNyb3AtPnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFIHx8CisJCSAgICAgZmgtPm1hcF9tb2RlID09IFpPUkFOX01BUF9NT0RFX1JBVykpIHsKKwkJCWRwcmludGsoMSwKKwkJCQlLRVJOX0VSUgorCQkJCSIlczogVklESU9DX0dfQ1JPUCAtIHN1YmNhcHR1cmUgb25seSBzdXBwb3J0ZWQgZm9yIGNvbXByZXNzZWQgY2FwdHVyZVxuIiwKKwkJCQlaUl9ERVZOQU1FKHpyKSk7CisJCQlyZXMgPSAtRUlOVkFMOworCQkJZ290byBnY3JvcF91bmxvY2tfYW5kX3JldHVybjsKKwkJfQorCisJCWNyb3AtPmMudG9wID0gZmgtPmpwZ19zZXR0aW5ncy5pbWdfeTsKKwkJY3JvcC0+Yy5sZWZ0ID0gZmgtPmpwZ19zZXR0aW5ncy5pbWdfeDsKKwkJY3JvcC0+Yy53aWR0aCA9IGZoLT5qcGdfc2V0dGluZ3MuaW1nX3dpZHRoOworCQljcm9wLT5jLmhlaWdodCA9IGZoLT5qcGdfc2V0dGluZ3MuaW1nX2hlaWdodDsKKworCWdjcm9wX3VubG9ja19hbmRfcmV0dXJuOgorCQltdXRleF91bmxvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKKworCQlyZXR1cm4gcmVzOworCX0KKwkJYnJlYWs7CisKKwljYXNlIFZJRElPQ19TX0NST1A6CisJeworCQlzdHJ1Y3QgdjRsMl9jcm9wICpjcm9wID0gYXJnOworCQlpbnQgcmVzID0gMDsKKworCQlzZXR0aW5ncyA9IGZoLT5qcGdfc2V0dGluZ3M7CisKKwkJZHByaW50aygzLAorCQkJS0VSTl9FUlIKKwkJCSIlczogVklESU9DX1NfQ1JPUCAtIHR5cGU9JWQsIHg9JWQseT0lZCx3PSVkLGg9JWRcbiIsCisJCQlaUl9ERVZOQU1FKHpyKSwgY3JvcC0+dHlwZSwgY3JvcC0+Yy5sZWZ0LCBjcm9wLT5jLnRvcCwKKwkJCWNyb3AtPmMud2lkdGgsIGNyb3AtPmMuaGVpZ2h0KTsKKworCQltdXRleF9sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7CisKKwkJaWYgKGZoLT5qcGdfYnVmZmVycy5hbGxvY2F0ZWQgfHwgZmgtPnY0bF9idWZmZXJzLmFsbG9jYXRlZCkgeworCQkJZHByaW50aygxLAorCQkJCUtFUk5fRVJSCisJCQkJIiVzOiBWSURJT0NfU19DUk9QIC0gY2Fubm90IGNoYW5nZSBzZXR0aW5ncyB3aGlsZSBhY3RpdmVcbiIsCisJCQkJWlJfREVWTkFNRSh6cikpOworCQkJcmVzID0gLUVCVVNZOworCQkJZ290byBzY3JvcF91bmxvY2tfYW5kX3JldHVybjsKKwkJfQorCisJCWlmIChjcm9wLT50eXBlICE9IFY0TDJfQlVGX1RZUEVfVklERU9fT1VUUFVUICYmCisJCSAgICAoY3JvcC0+dHlwZSAhPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUgfHwKKwkJICAgICBmaC0+bWFwX21vZGUgPT0gWk9SQU5fTUFQX01PREVfUkFXKSkgeworCQkJZHByaW50aygxLAorCQkJCUtFUk5fRVJSCisJCQkJIiVzOiBWSURJT0NfR19DUk9QIC0gc3ViY2FwdHVyZSBvbmx5IHN1cHBvcnRlZCBmb3IgY29tcHJlc3NlZCBjYXB0dXJlXG4iLAorCQkJCVpSX0RFVk5BTUUoenIpKTsKKwkJCXJlcyA9IC1FSU5WQUw7CisJCQlnb3RvIHNjcm9wX3VubG9ja19hbmRfcmV0dXJuOworCQl9CisKKwkJLyogbW92ZSBpbnRvIGEgZm9ybSB0aGF0IHdlIHVuZGVyc3RhbmQgKi8KKwkJc2V0dGluZ3MuaW1nX3ggPSBjcm9wLT5jLmxlZnQ7CisJCXNldHRpbmdzLmltZ195ID0gY3JvcC0+Yy50b3A7CisJCXNldHRpbmdzLmltZ193aWR0aCA9IGNyb3AtPmMud2lkdGg7CisJCXNldHRpbmdzLmltZ19oZWlnaHQgPSBjcm9wLT5jLmhlaWdodDsKKworCQkvKiBjaGVjayB2YWxpZGl0eSAqLworCQlpZiAoKHJlcyA9IHpvcmFuX2NoZWNrX2pwZ19zZXR0aW5ncyh6ciwgJnNldHRpbmdzKSkpCisJCQlnb3RvIHNjcm9wX3VubG9ja19hbmRfcmV0dXJuOworCisJCS8qIGFjY2VwdCAqLworCQlmaC0+anBnX3NldHRpbmdzID0gc2V0dGluZ3M7CisKKwlzY3JvcF91bmxvY2tfYW5kX3JldHVybjoKKwkJbXV0ZXhfdW5sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7CisJCXJldHVybiByZXM7CisJfQorCQlicmVhazsKKworCWNhc2UgVklESU9DX0dfSlBFR0NPTVA6CisJeworCQlzdHJ1Y3QgdjRsMl9qcGVnY29tcHJlc3Npb24gKnBhcmFtcyA9IGFyZzsKKworCQlkcHJpbnRrKDMsIEtFUk5fREVCVUcgIiVzOiBWSURJT0NfR19KUEVHQ09NUFxuIiwKKwkJCVpSX0RFVk5BTUUoenIpKTsKKworCQltZW1zZXQocGFyYW1zLCAwLCBzaXplb2YoKnBhcmFtcykpOworCisJCW11dGV4X2xvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKKworCQlwYXJhbXMtPnF1YWxpdHkgPSBmaC0+anBnX3NldHRpbmdzLmpwZ19jb21wLnF1YWxpdHk7CisJCXBhcmFtcy0+QVBQbiA9IGZoLT5qcGdfc2V0dGluZ3MuanBnX2NvbXAuQVBQbjsKKwkJbWVtY3B5KHBhcmFtcy0+QVBQX2RhdGEsCisJCSAgICAgICBmaC0+anBnX3NldHRpbmdzLmpwZ19jb21wLkFQUF9kYXRhLAorCQkgICAgICAgZmgtPmpwZ19zZXR0aW5ncy5qcGdfY29tcC5BUFBfbGVuKTsKKwkJcGFyYW1zLT5BUFBfbGVuID0gZmgtPmpwZ19zZXR0aW5ncy5qcGdfY29tcC5BUFBfbGVuOworCQltZW1jcHkocGFyYW1zLT5DT01fZGF0YSwKKwkJICAgICAgIGZoLT5qcGdfc2V0dGluZ3MuanBnX2NvbXAuQ09NX2RhdGEsCisJCSAgICAgICBmaC0+anBnX3NldHRpbmdzLmpwZ19jb21wLkNPTV9sZW4pOworCQlwYXJhbXMtPkNPTV9sZW4gPSBmaC0+anBnX3NldHRpbmdzLmpwZ19jb21wLkNPTV9sZW47CisJCXBhcmFtcy0+anBlZ19tYXJrZXJzID0KKwkJICAgIGZoLT5qcGdfc2V0dGluZ3MuanBnX2NvbXAuanBlZ19tYXJrZXJzOworCisJCW11dGV4X3VubG9jaygmenItPnJlc291cmNlX2xvY2spOworCisJCXJldHVybiAwOworCX0KKwkJYnJlYWs7CisKKwljYXNlIFZJRElPQ19TX0pQRUdDT01QOgorCXsKKwkJc3RydWN0IHY0bDJfanBlZ2NvbXByZXNzaW9uICpwYXJhbXMgPSBhcmc7CisJCWludCByZXMgPSAwOworCisJCXNldHRpbmdzID0gZmgtPmpwZ19zZXR0aW5nczsKKworCQlkcHJpbnRrKDMsCisJCQlLRVJOX0RFQlVHCisJCQkiJXM6IFZJRElPQ19TX0pQRUdDT01QIC0gcXVhbGl0eT0lZCwgQVBQTj0lZCwgQVBQX2xlbj0lZCwgQ09NX2xlbj0lZFxuIiwKKwkJCVpSX0RFVk5BTUUoenIpLCBwYXJhbXMtPnF1YWxpdHksIHBhcmFtcy0+QVBQbiwKKwkJCXBhcmFtcy0+QVBQX2xlbiwgcGFyYW1zLT5DT01fbGVuKTsKKworCQlzZXR0aW5ncy5qcGdfY29tcCA9ICpwYXJhbXM7CisKKwkJbXV0ZXhfbG9jaygmenItPnJlc291cmNlX2xvY2spOworCisJCWlmIChmaC0+djRsX2J1ZmZlcnMuYWN0aXZlICE9IFpPUkFOX0ZSRUUgfHwKKwkJICAgIGZoLT5qcGdfYnVmZmVycy5hY3RpdmUgIT0gWk9SQU5fRlJFRSkgeworCQkJZHByaW50aygxLAorCQkJCUtFUk5fV0FSTklORworCQkJCSIlczogVklESU9DX1NfSlBFR0NPTVAgY2FsbGVkIHdoaWxlIGluIHBsYXliYWNrL2NhcHR1cmUgbW9kZVxuIiwKKwkJCQlaUl9ERVZOQU1FKHpyKSk7CisJCQlyZXMgPSAtRUJVU1k7CisJCQlnb3RvIHNqcGVnY191bmxvY2tfYW5kX3JldHVybjsKKwkJfQorCisJCWlmICgocmVzID0gem9yYW5fY2hlY2tfanBnX3NldHRpbmdzKHpyLCAmc2V0dGluZ3MpKSkKKwkJCWdvdG8gc2pwZWdjX3VubG9ja19hbmRfcmV0dXJuOworCQlpZiAoIWZoLT5qcGdfYnVmZmVycy5hbGxvY2F0ZWQpCisJCQlmaC0+anBnX2J1ZmZlcnMuYnVmZmVyX3NpemUgPQorCQkJICAgIHpvcmFuX3Y0bDJfY2FsY19idWZzaXplKCZmaC0+anBnX3NldHRpbmdzKTsKKwkJZmgtPmpwZ19zZXR0aW5ncy5qcGdfY29tcCA9ICpwYXJhbXMgPSBzZXR0aW5ncy5qcGdfY29tcDsKKwlzanBlZ2NfdW5sb2NrX2FuZF9yZXR1cm46CisJCW11dGV4X3VubG9jaygmenItPnJlc291cmNlX2xvY2spOworCisJCXJldHVybiAwOworCX0KKwkJYnJlYWs7CisKKwljYXNlIFZJRElPQ19RVUVSWVNURDoJLyogd2h5IGlzIHRoaXMgdXNlZnVsPyAqLworCXsKKwkJdjRsMl9zdGRfaWQgKnN0ZCA9IGFyZzsKKworCQlkcHJpbnRrKDMsCisJCQlLRVJOX0RFQlVHICIlczogVklESU9DX1FVRVJZX1NURCAtIHN0ZD0weCVsbHhcbiIsCisJCQlaUl9ERVZOQU1FKHpyKSwgKHVuc2lnbmVkIGxvbmcgbG9uZykqc3RkKTsKKworCQlpZiAoKnN0ZCA9PSBWNEwyX1NURF9BTEwgfHwgKnN0ZCA9PSBWNEwyX1NURF9OVFNDIHx8CisJCSAgICAqc3RkID09IFY0TDJfU1REX1BBTCB8fCAoKnN0ZCA9PSBWNEwyX1NURF9TRUNBTSAmJgorCQkJCQkgICAgIHpyLT5jYXJkLm5vcm1zID09IDMpKSB7CisJCQlyZXR1cm4gMDsKKwkJfQorCisJCXJldHVybiAtRUlOVkFMOworCX0KKwkJYnJlYWs7CisKKwljYXNlIFZJRElPQ19UUllfRk1UOgorCXsKKwkJc3RydWN0IHY0bDJfZm9ybWF0ICpmbXQgPSBhcmc7CisJCWludCByZXMgPSAwOworCisJCWRwcmludGsoMywgS0VSTl9ERUJVRyAiJXM6IFZJRElPQ19UUllfRk1UIC0gdHlwZT0lZFxuIiwKKwkJCVpSX0RFVk5BTUUoenIpLCBmbXQtPnR5cGUpOworCisJCXN3aXRjaCAoZm10LT50eXBlKSB7CisJCWNhc2UgVjRMMl9CVUZfVFlQRV9WSURFT19PVkVSTEFZOgorCQkJbXV0ZXhfbG9jaygmenItPnJlc291cmNlX2xvY2spOworCisJCQlpZiAoZm10LT5mbXQud2luLncud2lkdGggPiBCVVpfTUFYX1dJRFRIKQorCQkJCWZtdC0+Zm10Lndpbi53LndpZHRoID0gQlVaX01BWF9XSURUSDsKKwkJCWlmIChmbXQtPmZtdC53aW4udy53aWR0aCA8IEJVWl9NSU5fV0lEVEgpCisJCQkJZm10LT5mbXQud2luLncud2lkdGggPSBCVVpfTUlOX1dJRFRIOworCQkJaWYgKGZtdC0+Zm10Lndpbi53LmhlaWdodCA+IEJVWl9NQVhfSEVJR0hUKQorCQkJCWZtdC0+Zm10Lndpbi53LmhlaWdodCA9IEJVWl9NQVhfSEVJR0hUOworCQkJaWYgKGZtdC0+Zm10Lndpbi53LmhlaWdodCA8IEJVWl9NSU5fSEVJR0hUKQorCQkJCWZtdC0+Zm10Lndpbi53LmhlaWdodCA9IEJVWl9NSU5fSEVJR0hUOworCisJCQltdXRleF91bmxvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKKwkJCWJyZWFrOworCisJCWNhc2UgVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOgorCQljYXNlIFY0TDJfQlVGX1RZUEVfVklERU9fT1VUUFVUOgorCQkJaWYgKGZtdC0+Zm10LnBpeC5ieXRlc3BlcmxpbmUgPiAwKQorCQkJCXJldHVybiAtRUlOVkFMOworCisJCQltdXRleF9sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7CisKKwkJCWlmIChmbXQtPmZtdC5waXgucGl4ZWxmb3JtYXQgPT0gVjRMMl9QSVhfRk1UX01KUEVHKSB7CisJCQkJc2V0dGluZ3MgPSBmaC0+anBnX3NldHRpbmdzOworCisJCQkJLyogd2UgYWN0dWFsbHkgbmVlZCB0byBzZXQgJ3JlYWwnIHBhcmFtZXRlcnMgbm93ICovCisJCQkJaWYgKChmbXQtPmZtdC5waXguaGVpZ2h0ICogMikgPgorCQkJCSAgICBCVVpfTUFYX0hFSUdIVCkKKwkJCQkJc2V0dGluZ3MuVG1wRGNtID0gMTsKKwkJCQllbHNlCisJCQkJCXNldHRpbmdzLlRtcERjbSA9IDI7CisJCQkJc2V0dGluZ3MuZGVjaW1hdGlvbiA9IDA7CisJCQkJaWYgKGZtdC0+Zm10LnBpeC5oZWlnaHQgPD0KKwkJCQkgICAgZmgtPmpwZ19zZXR0aW5ncy5pbWdfaGVpZ2h0IC8gMikKKwkJCQkJc2V0dGluZ3MuVmVyRGNtID0gMjsKKwkJCQllbHNlCisJCQkJCXNldHRpbmdzLlZlckRjbSA9IDE7CisJCQkJaWYgKGZtdC0+Zm10LnBpeC53aWR0aCA8PQorCQkJCSAgICBmaC0+anBnX3NldHRpbmdzLmltZ193aWR0aCAvIDQpCisJCQkJCXNldHRpbmdzLkhvckRjbSA9IDQ7CisJCQkJZWxzZSBpZiAoZm10LT5mbXQucGl4LndpZHRoIDw9CisJCQkJCSBmaC0+anBnX3NldHRpbmdzLmltZ193aWR0aCAvIDIpCisJCQkJCXNldHRpbmdzLkhvckRjbSA9IDI7CisJCQkJZWxzZQorCQkJCQlzZXR0aW5ncy5Ib3JEY20gPSAxOworCQkJCWlmIChzZXR0aW5ncy5UbXBEY20gPT0gMSkKKwkJCQkJc2V0dGluZ3MuZmllbGRfcGVyX2J1ZmYgPSAyOworCQkJCWVsc2UKKwkJCQkJc2V0dGluZ3MuZmllbGRfcGVyX2J1ZmYgPSAxOworCisJCQkJLyogY2hlY2sgKi8KKwkJCQlpZiAoKHJlcyA9CisJCQkJICAgICB6b3Jhbl9jaGVja19qcGdfc2V0dGluZ3MoenIsCisJCQkJCQkJICAgICAgJnNldHRpbmdzKSkpCisJCQkJCWdvdG8gdHJ5Zm10X3VubG9ja19hbmRfcmV0dXJuOworCisJCQkJLyogdGVsbCB0aGUgdXNlciB3aGF0IHdlIGFjdHVhbGx5IGRpZCAqLworCQkJCWZtdC0+Zm10LnBpeC53aWR0aCA9CisJCQkJICAgIHNldHRpbmdzLmltZ193aWR0aCAvIHNldHRpbmdzLkhvckRjbTsKKwkJCQlmbXQtPmZtdC5waXguaGVpZ2h0ID0KKwkJCQkgICAgc2V0dGluZ3MuaW1nX2hlaWdodCAqIDIgLworCQkJCSAgICAoc2V0dGluZ3MuVG1wRGNtICogc2V0dGluZ3MuVmVyRGNtKTsKKwkJCQlpZiAoc2V0dGluZ3MuVG1wRGNtID09IDEpCisJCQkJCWZtdC0+Zm10LnBpeC5maWVsZCA9CisJCQkJCSAgICAoZmgtPmpwZ19zZXR0aW5ncy4KKwkJCQkJICAgICBvZGRfZXZlbiA/IFY0TDJfRklFTERfU0VRX1RCIDoKKwkJCQkJICAgICBWNEwyX0ZJRUxEX1NFUV9CVCk7CisJCQkJZWxzZQorCQkJCQlmbXQtPmZtdC5waXguZmllbGQgPQorCQkJCQkgICAgKGZoLT5qcGdfc2V0dGluZ3MuCisJCQkJCSAgICAgb2RkX2V2ZW4gPyBWNEwyX0ZJRUxEX1RPUCA6CisJCQkJCSAgICAgVjRMMl9GSUVMRF9CT1RUT00pOworCisJCQkJZm10LT5mbXQucGl4LnNpemVpbWFnZSA9CisJCQkJICAgIHpvcmFuX3Y0bDJfY2FsY19idWZzaXplKCZzZXR0aW5ncyk7CisJCQl9IGVsc2UgaWYgKGZtdC0+dHlwZSA9PQorCQkJCSAgIFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSkgeworCQkJCWludCBpOworCisJCQkJZm9yIChpID0gMDsgaSA8IE5VTV9GT1JNQVRTOyBpKyspCisJCQkJCWlmICh6b3Jhbl9mb3JtYXRzW2ldLmZvdXJjYyA9PQorCQkJCQkgICAgZm10LT5mbXQucGl4LnBpeGVsZm9ybWF0KQorCQkJCQkJYnJlYWs7CisJCQkJaWYgKGkgPT0gTlVNX0ZPUk1BVFMpIHsKKwkJCQkJcmVzID0gLUVJTlZBTDsKKwkJCQkJZ290byB0cnlmbXRfdW5sb2NrX2FuZF9yZXR1cm47CisJCQkJfQorCisJCQkJaWYgKGZtdC0+Zm10LnBpeC53aWR0aCA+IEJVWl9NQVhfV0lEVEgpCisJCQkJCWZtdC0+Zm10LnBpeC53aWR0aCA9IEJVWl9NQVhfV0lEVEg7CisJCQkJaWYgKGZtdC0+Zm10LnBpeC53aWR0aCA8IEJVWl9NSU5fV0lEVEgpCisJCQkJCWZtdC0+Zm10LnBpeC53aWR0aCA9IEJVWl9NSU5fV0lEVEg7CisJCQkJaWYgKGZtdC0+Zm10LnBpeC5oZWlnaHQgPiBCVVpfTUFYX0hFSUdIVCkKKwkJCQkJZm10LT5mbXQucGl4LmhlaWdodCA9CisJCQkJCSAgICBCVVpfTUFYX0hFSUdIVDsKKwkJCQlpZiAoZm10LT5mbXQucGl4LmhlaWdodCA8IEJVWl9NSU5fSEVJR0hUKQorCQkJCQlmbXQtPmZtdC5waXguaGVpZ2h0ID0KKwkJCQkJICAgIEJVWl9NSU5fSEVJR0hUOworCQkJfSBlbHNlIHsKKwkJCQlyZXMgPSAtRUlOVkFMOworCQkJCWdvdG8gdHJ5Zm10X3VubG9ja19hbmRfcmV0dXJuOworCQkJfQorCQl0cnlmbXRfdW5sb2NrX2FuZF9yZXR1cm46CisJCQltdXRleF91bmxvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKKworCQkJcmV0dXJuIHJlczsKKwkJCWJyZWFrOworCisJCWRlZmF1bHQ6CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCisJCXJldHVybiAwOworCX0KKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlkcHJpbnRrKDEsIEtFUk5fREVCVUcgIiVzOiBVTktOT1dOIGlvY3RsIGNtZDogMHgleFxuIiwKKwkJCVpSX0RFVk5BTUUoenIpLCBjbWQpOworCQlyZXR1cm4gLUVOT0lPQ1RMQ01EOworCQlicmVhazsKKworCX0KKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMgaW50Cit6b3Jhbl9pb2N0bCAoc3RydWN0IGlub2RlICppbm9kZSwKKwkgICAgIHN0cnVjdCBmaWxlICAqZmlsZSwKKwkgICAgIHVuc2lnbmVkIGludCAgY21kLAorCSAgICAgdW5zaWduZWQgbG9uZyBhcmcpCit7CisJcmV0dXJuIHZpZGVvX3VzZXJjb3B5KGlub2RlLCBmaWxlLCBjbWQsIGFyZywgem9yYW5fZG9faW9jdGwpOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50Cit6b3Jhbl9wb2xsIChzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkgICAgcG9sbF90YWJsZSAgKndhaXQpCit7CisJc3RydWN0IHpvcmFuX2ZoICpmaCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3Qgem9yYW4gKnpyID0gZmgtPnpyOworCWludCByZXMgPSAwLCBmcmFtZTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJLyogd2Ugc2hvdWxkIGNoZWNrIHdoZXRoZXIgYnVmZmVycyBhcmUgcmVhZHkgdG8gYmUgc3luY2VkIG9uCisJICogKHcvbyB3YWl0cyAtIE9fTk9OQkxPQ0spIGhlcmUKKwkgKiBpZiByZWFkeSBmb3IgcmVhZCAoc3luYyksIHJldHVybiBQT0xMSU58UE9MTFJETk9STSwKKwkgKiBpZiByZWFkeSBmb3Igd3JpdGUgKHN5bmMpLCByZXR1cm4gUE9MTE9VVHxQT0xMV1JOT1JNLAorCSAqIGlmIGVycm9yLCByZXR1cm4gUE9MTEVSUiwKKwkgKiBpZiBubyBidWZmZXJzIHF1ZXVlZCBvciBzbywgcmV0dXJuIFBPTExOVkFMCisJICovCisKKwltdXRleF9sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7CisKKwlzd2l0Y2ggKGZoLT5tYXBfbW9kZSkgeworCWNhc2UgWk9SQU5fTUFQX01PREVfUkFXOgorCQlwb2xsX3dhaXQoZmlsZSwgJnpyLT52NGxfY2FwcSwgd2FpdCk7CisJCWZyYW1lID0genItPnY0bF9wZW5kW3pyLT52NGxfc3luY190YWlsICYgVjRMX01BU0tfRlJBTUVdOworCisJCXNwaW5fbG9ja19pcnFzYXZlKCZ6ci0+c3BpbmxvY2ssIGZsYWdzKTsKKwkJZHByaW50aygzLAorCQkJS0VSTl9ERUJVRworCQkJIiVzOiAlcygpIHJhdyAtIGFjdGl2ZT0lYywgc3luY190YWlsPSVsdS8lYywgcGVuZF90YWlsPSVsdSwgcGVuZF9oZWFkPSVsdVxuIiwKKwkJCVpSX0RFVk5BTUUoenIpLCBfX2Z1bmNfXywKKwkJCSJGQUwiW2ZoLT52NGxfYnVmZmVycy5hY3RpdmVdLCB6ci0+djRsX3N5bmNfdGFpbCwKKwkJCSJVUE1EIlt6ci0+djRsX2J1ZmZlcnMuYnVmZmVyW2ZyYW1lXS5zdGF0ZV0sCisJCQl6ci0+djRsX3BlbmRfdGFpbCwgenItPnY0bF9wZW5kX2hlYWQpOworCQkvKiBQcm9jZXNzIGlzIHRoZSBvbmUgY2FwdHVyaW5nPyAqLworCQlpZiAoZmgtPnY0bF9idWZmZXJzLmFjdGl2ZSAhPSBaT1JBTl9GUkVFICYmCisJCSAgICAvKiBCdWZmZXIgcmVhZHkgdG8gRFFCVUY/ICovCisJCSAgICB6ci0+djRsX2J1ZmZlcnMuYnVmZmVyW2ZyYW1lXS5zdGF0ZSA9PSBCVVpfU1RBVEVfRE9ORSkKKwkJCXJlcyA9IFBPTExJTiB8IFBPTExSRE5PUk07CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnpyLT5zcGlubG9jaywgZmxhZ3MpOworCisJCWJyZWFrOworCisJY2FzZSBaT1JBTl9NQVBfTU9ERV9KUEdfUkVDOgorCWNhc2UgWk9SQU5fTUFQX01PREVfSlBHX1BMQVk6CisJCXBvbGxfd2FpdChmaWxlLCAmenItPmpwZ19jYXBxLCB3YWl0KTsKKwkJZnJhbWUgPSB6ci0+anBnX3BlbmRbenItPmpwZ19xdWVfdGFpbCAmIEJVWl9NQVNLX0ZSQU1FXTsKKworCQlzcGluX2xvY2tfaXJxc2F2ZSgmenItPnNwaW5sb2NrLCBmbGFncyk7CisJCWRwcmludGsoMywKKwkJCUtFUk5fREVCVUcKKwkJCSIlczogJXMoKSBqcGcgLSBhY3RpdmU9JWMsIHF1ZV90YWlsPSVsdS8lYywgcXVlX2hlYWQ9JWx1LCBkbWE9JWx1LyVsdVxuIiwKKwkJCVpSX0RFVk5BTUUoenIpLCBfX2Z1bmNfXywKKwkJCSJGQUwiW2ZoLT5qcGdfYnVmZmVycy5hY3RpdmVdLCB6ci0+anBnX3F1ZV90YWlsLAorCQkJIlVQTUQiW3pyLT5qcGdfYnVmZmVycy5idWZmZXJbZnJhbWVdLnN0YXRlXSwKKwkJCXpyLT5qcGdfcXVlX2hlYWQsIHpyLT5qcGdfZG1hX3RhaWwsIHpyLT5qcGdfZG1hX2hlYWQpOworCQlpZiAoZmgtPmpwZ19idWZmZXJzLmFjdGl2ZSAhPSBaT1JBTl9GUkVFICYmCisJCSAgICB6ci0+anBnX2J1ZmZlcnMuYnVmZmVyW2ZyYW1lXS5zdGF0ZSA9PSBCVVpfU1RBVEVfRE9ORSkgeworCQkJaWYgKGZoLT5tYXBfbW9kZSA9PSBaT1JBTl9NQVBfTU9ERV9KUEdfUkVDKQorCQkJCXJlcyA9IFBPTExJTiB8IFBPTExSRE5PUk07CisJCQllbHNlCisJCQkJcmVzID0gUE9MTE9VVCB8IFBPTExXUk5PUk07CisJCX0KKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmenItPnNwaW5sb2NrLCBmbGFncyk7CisKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlkcHJpbnRrKDEsCisJCQlLRVJOX0VSUgorCQkJIiVzOiB6b3Jhbl9wb2xsKCkgLSBpbnRlcm5hbCBlcnJvciwgdW5rbm93biBtYXBfbW9kZT0lZFxuIiwKKwkJCVpSX0RFVk5BTUUoenIpLCBmaC0+bWFwX21vZGUpOworCQlyZXMgPSBQT0xMTlZBTDsKKwl9CisKKwltdXRleF91bmxvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKKworCXJldHVybiByZXM7Cit9CisKKworLyoKKyAqIFRoaXMgbWFwcyB0aGUgYnVmZmVycyB0byB1c2VyIHNwYWNlLgorICoKKyAqIERlcGVuZGluZyBvbiB0aGUgc3RhdGUgb2YgZmgtPm1hcF9tb2RlCisgKiB0aGUgVjRMIG9yIHRoZSBNSlBFRyBidWZmZXJzIGFyZSBtYXBwZWQKKyAqIHBlciBidWZmZXIgb3IgYWxsIHRvZ2V0aGVyCisgKgorICogTm90ZSB0aGF0IHdlIG5lZWQgdG8gY29ubmVjdCB0byBzb21lCisgKiB1bm1hcCBzaWduYWwgZXZlbnQgdG8gdW5tYXAgdGhlIGRlLWFsbG9jYXRlCisgKiB0aGUgYnVmZmVyIGFjY29yZGluZ2x5ICh6b3Jhbl92bV9jbG9zZSgpKQorICovCisKK3N0YXRpYyB2b2lkCit6b3Jhbl92bV9vcGVuIChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKK3sKKwlzdHJ1Y3Qgem9yYW5fbWFwcGluZyAqbWFwID0gdm1hLT52bV9wcml2YXRlX2RhdGE7CisKKwltYXAtPmNvdW50Kys7Cit9CisKK3N0YXRpYyB2b2lkCit6b3Jhbl92bV9jbG9zZSAoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCit7CisJc3RydWN0IHpvcmFuX21hcHBpbmcgKm1hcCA9IHZtYS0+dm1fcHJpdmF0ZV9kYXRhOworCXN0cnVjdCBmaWxlICpmaWxlID0gbWFwLT5maWxlOworCXN0cnVjdCB6b3Jhbl9maCAqZmggPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHpvcmFuICp6ciA9IGZoLT56cjsKKwlpbnQgaTsKKworCW1hcC0+Y291bnQtLTsKKwlpZiAobWFwLT5jb3VudCA9PSAwKSB7CisJCXN3aXRjaCAoZmgtPm1hcF9tb2RlKSB7CisJCWNhc2UgWk9SQU5fTUFQX01PREVfSlBHX1JFQzoKKwkJY2FzZSBaT1JBTl9NQVBfTU9ERV9KUEdfUExBWToKKworCQkJZHByaW50aygzLCBLRVJOX0lORk8gIiVzOiBtdW5tYXAoTUpQRUcpXG4iLAorCQkJCVpSX0RFVk5BTUUoenIpKTsKKworCQkJZm9yIChpID0gMDsgaSA8IGZoLT5qcGdfYnVmZmVycy5udW1fYnVmZmVyczsgaSsrKSB7CisJCQkJaWYgKGZoLT5qcGdfYnVmZmVycy5idWZmZXJbaV0ubWFwID09IG1hcCkgeworCQkJCQlmaC0+anBnX2J1ZmZlcnMuYnVmZmVyW2ldLm1hcCA9CisJCQkJCSAgICBOVUxMOworCQkJCX0KKwkJCX0KKwkJCWtmcmVlKG1hcCk7CisKKwkJCWZvciAoaSA9IDA7IGkgPCBmaC0+anBnX2J1ZmZlcnMubnVtX2J1ZmZlcnM7IGkrKykKKwkJCQlpZiAoZmgtPmpwZ19idWZmZXJzLmJ1ZmZlcltpXS5tYXApCisJCQkJCWJyZWFrOworCQkJaWYgKGkgPT0gZmgtPmpwZ19idWZmZXJzLm51bV9idWZmZXJzKSB7CisJCQkJbXV0ZXhfbG9jaygmenItPnJlc291cmNlX2xvY2spOworCisJCQkJaWYgKGZoLT5qcGdfYnVmZmVycy5hY3RpdmUgIT0gWk9SQU5fRlJFRSkgeworCQkJCQlqcGdfcWJ1ZihmaWxlLCAtMSwgenItPmNvZGVjX21vZGUpOworCQkJCQl6ci0+anBnX2J1ZmZlcnMuYWxsb2NhdGVkID0gMDsKKwkJCQkJenItPmpwZ19idWZmZXJzLmFjdGl2ZSA9CisJCQkJCSAgICBmaC0+anBnX2J1ZmZlcnMuYWN0aXZlID0KKwkJCQkJICAgIFpPUkFOX0ZSRUU7CisJCQkJfQorCQkJCS8vanBnX2ZidWZmZXJfZnJlZShmaWxlKTsKKwkJCQlmaC0+anBnX2J1ZmZlcnMuYWxsb2NhdGVkID0gMDsKKwkJCQlmaC0+anBnX2J1ZmZlcnMucmVhZHlfdG9fYmVfZnJlZWQgPSAxOworCisJCQkJbXV0ZXhfdW5sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7CisJCQl9CisKKwkJCWJyZWFrOworCisJCWNhc2UgWk9SQU5fTUFQX01PREVfUkFXOgorCisJCQlkcHJpbnRrKDMsIEtFUk5fSU5GTyAiJXM6IG11bm1hcChWNEwpXG4iLAorCQkJCVpSX0RFVk5BTUUoenIpKTsKKworCQkJZm9yIChpID0gMDsgaSA8IGZoLT52NGxfYnVmZmVycy5udW1fYnVmZmVyczsgaSsrKSB7CisJCQkJaWYgKGZoLT52NGxfYnVmZmVycy5idWZmZXJbaV0ubWFwID09IG1hcCkgeworCQkJCQkvKiB1bnF1ZXVlL3VubWFwICovCisJCQkJCWZoLT52NGxfYnVmZmVycy5idWZmZXJbaV0ubWFwID0KKwkJCQkJICAgIE5VTEw7CisJCQkJfQorCQkJfQorCQkJa2ZyZWUobWFwKTsKKworCQkJZm9yIChpID0gMDsgaSA8IGZoLT52NGxfYnVmZmVycy5udW1fYnVmZmVyczsgaSsrKQorCQkJCWlmIChmaC0+djRsX2J1ZmZlcnMuYnVmZmVyW2ldLm1hcCkKKwkJCQkJYnJlYWs7CisJCQlpZiAoaSA9PSBmaC0+djRsX2J1ZmZlcnMubnVtX2J1ZmZlcnMpIHsKKwkJCQltdXRleF9sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7CisKKwkJCQlpZiAoZmgtPnY0bF9idWZmZXJzLmFjdGl2ZSAhPSBaT1JBTl9GUkVFKSB7CisJCQkJCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwkJCQkJc3Bpbl9sb2NrX2lycXNhdmUoJnpyLT5zcGlubG9jaywgZmxhZ3MpOworCQkJCQl6cjM2MDU3X3NldF9tZW1ncmFiKHpyLCAwKTsKKwkJCQkJenItPnY0bF9idWZmZXJzLmFsbG9jYXRlZCA9IDA7CisJCQkJCXpyLT52NGxfYnVmZmVycy5hY3RpdmUgPQorCQkJCQkgICAgZmgtPnY0bF9idWZmZXJzLmFjdGl2ZSA9CisJCQkJCSAgICBaT1JBTl9GUkVFOworCQkJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ6ci0+c3BpbmxvY2ssIGZsYWdzKTsKKwkJCQl9CisJCQkJLy92NGxfZmJ1ZmZlcl9mcmVlKGZpbGUpOworCQkJCWZoLT52NGxfYnVmZmVycy5hbGxvY2F0ZWQgPSAwOworCQkJCWZoLT52NGxfYnVmZmVycy5yZWFkeV90b19iZV9mcmVlZCA9IDE7CisKKwkJCQltdXRleF91bmxvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKKwkJCX0KKworCQkJYnJlYWs7CisKKwkJZGVmYXVsdDoKKwkJCXByaW50ayhLRVJOX0VSUgorCQkJICAgICAgICIlczogbXVubWFwKCkgLSBpbnRlcm5hbCBlcnJvciAtIHVua25vd24gbWFwIG1vZGUgJWRcbiIsCisJCQkgICAgICAgWlJfREVWTkFNRSh6ciksIGZoLT5tYXBfbW9kZSk7CisJCQlicmVhazsKKworCQl9CisJfQorfQorCitzdGF0aWMgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IHpvcmFuX3ZtX29wcyA9IHsKKwkub3BlbiA9IHpvcmFuX3ZtX29wZW4sCisJLmNsb3NlID0gem9yYW5fdm1fY2xvc2UsCit9OworCitzdGF0aWMgaW50Cit6b3Jhbl9tbWFwIChzdHJ1Y3QgZmlsZSAgICAgICAgICAgKmZpbGUsCisJICAgIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQoreworCXN0cnVjdCB6b3Jhbl9maCAqZmggPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHpvcmFuICp6ciA9IGZoLT56cjsKKwl1bnNpZ25lZCBsb25nIHNpemUgPSAodm1hLT52bV9lbmQgLSB2bWEtPnZtX3N0YXJ0KTsKKwl1bnNpZ25lZCBsb25nIG9mZnNldCA9IHZtYS0+dm1fcGdvZmYgPDwgUEFHRV9TSElGVDsKKwlpbnQgaSwgajsKKwl1bnNpZ25lZCBsb25nIHBhZ2UsIHN0YXJ0ID0gdm1hLT52bV9zdGFydCwgdG9kbywgcG9zLCBmcmFnbGVuOworCWludCBmaXJzdCwgbGFzdDsKKwlzdHJ1Y3Qgem9yYW5fbWFwcGluZyAqbWFwOworCWludCByZXMgPSAwOworCisJZHByaW50aygzLAorCQlLRVJOX0lORk8gIiVzOiBtbWFwKCVzKSBvZiAweCUwOGx4LTB4JTA4bHggKHNpemU9JWx1KVxuIiwKKwkJWlJfREVWTkFNRSh6ciksCisJCWZoLT5tYXBfbW9kZSA9PSBaT1JBTl9NQVBfTU9ERV9SQVcgPyAiVjRMIiA6ICJNSlBFRyIsCisJCXZtYS0+dm1fc3RhcnQsIHZtYS0+dm1fZW5kLCBzaXplKTsKKworCWlmICghKHZtYS0+dm1fZmxhZ3MgJiBWTV9TSEFSRUQpIHx8ICEodm1hLT52bV9mbGFncyAmIFZNX1JFQUQpIHx8CisJICAgICEodm1hLT52bV9mbGFncyAmIFZNX1dSSVRFKSkgeworCQlkcHJpbnRrKDEsCisJCQlLRVJOX0VSUgorCQkJIiVzOiBtbWFwKCkgLSBubyBNQVBfU0hBUkVEL1BST1Rfe1JFQUQsV1JJVEV9IGdpdmVuXG4iLAorCQkJWlJfREVWTkFNRSh6cikpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlzd2l0Y2ggKGZoLT5tYXBfbW9kZSkgeworCisJY2FzZSBaT1JBTl9NQVBfTU9ERV9KUEdfUkVDOgorCWNhc2UgWk9SQU5fTUFQX01PREVfSlBHX1BMQVk6CisKKwkJLyogbG9jayAqLworCQltdXRleF9sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7CisKKwkJLyogTWFwIHRoZSBNSlBFRyBidWZmZXJzICovCisJCWlmICghZmgtPmpwZ19idWZmZXJzLmFsbG9jYXRlZCkgeworCQkJZHByaW50aygxLAorCQkJCUtFUk5fRVJSCisJCQkJIiVzOiB6b3Jhbl9tbWFwKE1KUEVHKSAtIGJ1ZmZlcnMgbm90IHlldCBhbGxvY2F0ZWRcbiIsCisJCQkJWlJfREVWTkFNRSh6cikpOworCQkJcmVzID0gLUVOT01FTTsKKwkJCWdvdG8ganBnX21tYXBfdW5sb2NrX2FuZF9yZXR1cm47CisJCX0KKworCQlmaXJzdCA9IG9mZnNldCAvIGZoLT5qcGdfYnVmZmVycy5idWZmZXJfc2l6ZTsKKwkJbGFzdCA9IGZpcnN0IC0gMSArIHNpemUgLyBmaC0+anBnX2J1ZmZlcnMuYnVmZmVyX3NpemU7CisJCWlmIChvZmZzZXQgJSBmaC0+anBnX2J1ZmZlcnMuYnVmZmVyX3NpemUgIT0gMCB8fAorCQkgICAgc2l6ZSAlIGZoLT5qcGdfYnVmZmVycy5idWZmZXJfc2l6ZSAhPSAwIHx8IGZpcnN0IDwgMCB8fAorCQkgICAgbGFzdCA8IDAgfHwgZmlyc3QgPj0gZmgtPmpwZ19idWZmZXJzLm51bV9idWZmZXJzIHx8CisJCSAgICBsYXN0ID49IGZoLT5qcGdfYnVmZmVycy5udW1fYnVmZmVycykgeworCQkJZHByaW50aygxLAorCQkJCUtFUk5fRVJSCisJCQkJIiVzOiBtbWFwKE1KUEVHKSAtIG9mZnNldD0lbHUgb3Igc2l6ZT0lbHUgaW52YWxpZCBmb3IgYnVmc2l6ZT0lZCBhbmQgbnVtYnVmcz0lZFxuIiwKKwkJCQlaUl9ERVZOQU1FKHpyKSwgb2Zmc2V0LCBzaXplLAorCQkJCWZoLT5qcGdfYnVmZmVycy5idWZmZXJfc2l6ZSwKKwkJCQlmaC0+anBnX2J1ZmZlcnMubnVtX2J1ZmZlcnMpOworCQkJcmVzID0gLUVJTlZBTDsKKwkJCWdvdG8ganBnX21tYXBfdW5sb2NrX2FuZF9yZXR1cm47CisJCX0KKwkJZm9yIChpID0gZmlyc3Q7IGkgPD0gbGFzdDsgaSsrKSB7CisJCQlpZiAoZmgtPmpwZ19idWZmZXJzLmJ1ZmZlcltpXS5tYXApIHsKKwkJCQlkcHJpbnRrKDEsCisJCQkJCUtFUk5fRVJSCisJCQkJCSIlczogbW1hcChNSlBFRykgLSBidWZmZXIgJWQgYWxyZWFkeSBtYXBwZWRcbiIsCisJCQkJCVpSX0RFVk5BTUUoenIpLCBpKTsKKwkJCQlyZXMgPSAtRUJVU1k7CisJCQkJZ290byBqcGdfbW1hcF91bmxvY2tfYW5kX3JldHVybjsKKwkJCX0KKwkJfQorCisJCS8qIG1hcCB0aGVzZSBidWZmZXJzICh2NGxfYnVmZmVyc1tpXSkgKi8KKwkJbWFwID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHpvcmFuX21hcHBpbmcpLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCFtYXApIHsKKwkJCXJlcyA9IC1FTk9NRU07CisJCQlnb3RvIGpwZ19tbWFwX3VubG9ja19hbmRfcmV0dXJuOworCQl9CisJCW1hcC0+ZmlsZSA9IGZpbGU7CisJCW1hcC0+Y291bnQgPSAxOworCisJCXZtYS0+dm1fb3BzID0gJnpvcmFuX3ZtX29wczsKKwkJdm1hLT52bV9mbGFncyB8PSBWTV9ET05URVhQQU5EOworCQl2bWEtPnZtX3ByaXZhdGVfZGF0YSA9IG1hcDsKKworCQlmb3IgKGkgPSBmaXJzdDsgaSA8PSBsYXN0OyBpKyspIHsKKwkJCWZvciAoaiA9IDA7CisJCQkgICAgIGogPCBmaC0+anBnX2J1ZmZlcnMuYnVmZmVyX3NpemUgLyBQQUdFX1NJWkU7CisJCQkgICAgIGorKykgeworCQkJCWZyYWdsZW4gPQorCQkJCSAgICAobGUzMl90b19jcHUoZmgtPmpwZ19idWZmZXJzLmJ1ZmZlcltpXS4KKwkJCQkgICAgIGZyYWdfdGFiWzIgKiBqICsgMV0pICYgfjEpIDw8IDE7CisJCQkJdG9kbyA9IHNpemU7CisJCQkJaWYgKHRvZG8gPiBmcmFnbGVuKQorCQkJCQl0b2RvID0gZnJhZ2xlbjsKKwkJCQlwb3MgPQorCQkJCSAgICBsZTMyX3RvX2NwdShmaC0+anBnX2J1ZmZlcnMuCisJCQkJICAgIGJ1ZmZlcltpXS5mcmFnX3RhYlsyICogal0pOworCQkJCS8qIHNob3VsZCBqdXN0IGJlIHBvcyBvbiBpMzg2ICovCisJCQkJcGFnZSA9IHZpcnRfdG9fcGh5cyhidXNfdG9fdmlydChwb3MpKQorCQkJCQkJCQk+PiBQQUdFX1NISUZUOworCQkJCWlmIChyZW1hcF9wZm5fcmFuZ2Uodm1hLCBzdGFydCwgcGFnZSwKKwkJCQkJCQl0b2RvLCBQQUdFX1NIQVJFRCkpIHsKKwkJCQkJZHByaW50aygxLAorCQkJCQkJS0VSTl9FUlIKKwkJCQkJCSIlczogem9yYW5fbW1hcChWNEwpIC0gcmVtYXBfcGZuX3JhbmdlIGZhaWxlZFxuIiwKKwkJCQkJCVpSX0RFVk5BTUUoenIpKTsKKwkJCQkJcmVzID0gLUVBR0FJTjsKKwkJCQkJZ290byBqcGdfbW1hcF91bmxvY2tfYW5kX3JldHVybjsKKwkJCQl9CisJCQkJc2l6ZSAtPSB0b2RvOworCQkJCXN0YXJ0ICs9IHRvZG87CisJCQkJaWYgKHNpemUgPT0gMCkKKwkJCQkJYnJlYWs7CisJCQkJaWYgKGxlMzJfdG9fY3B1KGZoLT5qcGdfYnVmZmVycy5idWZmZXJbaV0uCisJCQkJICAgIGZyYWdfdGFiWzIgKiBqICsgMV0pICYgMSkKKwkJCQkJYnJlYWs7CS8qIHdhcyBsYXN0IGZyYWdtZW50ICovCisJCQl9CisJCQlmaC0+anBnX2J1ZmZlcnMuYnVmZmVyW2ldLm1hcCA9IG1hcDsKKwkJCWlmIChzaXplID09IDApCisJCQkJYnJlYWs7CisKKwkJfQorCWpwZ19tbWFwX3VubG9ja19hbmRfcmV0dXJuOgorCQltdXRleF91bmxvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKKworCQlicmVhazsKKworCWNhc2UgWk9SQU5fTUFQX01PREVfUkFXOgorCisJCW11dGV4X2xvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKKworCQkvKiBNYXAgdGhlIFY0TCBidWZmZXJzICovCisJCWlmICghZmgtPnY0bF9idWZmZXJzLmFsbG9jYXRlZCkgeworCQkJZHByaW50aygxLAorCQkJCUtFUk5fRVJSCisJCQkJIiVzOiB6b3Jhbl9tbWFwKFY0TCkgLSBidWZmZXJzIG5vdCB5ZXQgYWxsb2NhdGVkXG4iLAorCQkJCVpSX0RFVk5BTUUoenIpKTsKKwkJCXJlcyA9IC1FTk9NRU07CisJCQlnb3RvIHY0bF9tbWFwX3VubG9ja19hbmRfcmV0dXJuOworCQl9CisKKwkJZmlyc3QgPSBvZmZzZXQgLyBmaC0+djRsX2J1ZmZlcnMuYnVmZmVyX3NpemU7CisJCWxhc3QgPSBmaXJzdCAtIDEgKyBzaXplIC8gZmgtPnY0bF9idWZmZXJzLmJ1ZmZlcl9zaXplOworCQlpZiAob2Zmc2V0ICUgZmgtPnY0bF9idWZmZXJzLmJ1ZmZlcl9zaXplICE9IDAgfHwKKwkJICAgIHNpemUgJSBmaC0+djRsX2J1ZmZlcnMuYnVmZmVyX3NpemUgIT0gMCB8fCBmaXJzdCA8IDAgfHwKKwkJICAgIGxhc3QgPCAwIHx8IGZpcnN0ID49IGZoLT52NGxfYnVmZmVycy5udW1fYnVmZmVycyB8fAorCQkgICAgbGFzdCA+PSBmaC0+djRsX2J1ZmZlcnMuYnVmZmVyX3NpemUpIHsKKwkJCWRwcmludGsoMSwKKwkJCQlLRVJOX0VSUgorCQkJCSIlczogbW1hcChWNEwpIC0gb2Zmc2V0PSVsdSBvciBzaXplPSVsdSBpbnZhbGlkIGZvciBidWZzaXplPSVkIGFuZCBudW1idWZzPSVkXG4iLAorCQkJCVpSX0RFVk5BTUUoenIpLCBvZmZzZXQsIHNpemUsCisJCQkJZmgtPnY0bF9idWZmZXJzLmJ1ZmZlcl9zaXplLAorCQkJCWZoLT52NGxfYnVmZmVycy5udW1fYnVmZmVycyk7CisJCQlyZXMgPSAtRUlOVkFMOworCQkJZ290byB2NGxfbW1hcF91bmxvY2tfYW5kX3JldHVybjsKKwkJfQorCQlmb3IgKGkgPSBmaXJzdDsgaSA8PSBsYXN0OyBpKyspIHsKKwkJCWlmIChmaC0+djRsX2J1ZmZlcnMuYnVmZmVyW2ldLm1hcCkgeworCQkJCWRwcmludGsoMSwKKwkJCQkJS0VSTl9FUlIKKwkJCQkJIiVzOiBtbWFwKFY0TCkgLSBidWZmZXIgJWQgYWxyZWFkeSBtYXBwZWRcbiIsCisJCQkJCVpSX0RFVk5BTUUoenIpLCBpKTsKKwkJCQlyZXMgPSAtRUJVU1k7CisJCQkJZ290byB2NGxfbW1hcF91bmxvY2tfYW5kX3JldHVybjsKKwkJCX0KKwkJfQorCisJCS8qIG1hcCB0aGVzZSBidWZmZXJzICh2NGxfYnVmZmVyc1tpXSkgKi8KKwkJbWFwID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHpvcmFuX21hcHBpbmcpLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCFtYXApIHsKKwkJCXJlcyA9IC1FTk9NRU07CisJCQlnb3RvIHY0bF9tbWFwX3VubG9ja19hbmRfcmV0dXJuOworCQl9CisJCW1hcC0+ZmlsZSA9IGZpbGU7CisJCW1hcC0+Y291bnQgPSAxOworCisJCXZtYS0+dm1fb3BzID0gJnpvcmFuX3ZtX29wczsKKwkJdm1hLT52bV9mbGFncyB8PSBWTV9ET05URVhQQU5EOworCQl2bWEtPnZtX3ByaXZhdGVfZGF0YSA9IG1hcDsKKworCQlmb3IgKGkgPSBmaXJzdDsgaSA8PSBsYXN0OyBpKyspIHsKKwkJCXRvZG8gPSBzaXplOworCQkJaWYgKHRvZG8gPiBmaC0+djRsX2J1ZmZlcnMuYnVmZmVyX3NpemUpCisJCQkJdG9kbyA9IGZoLT52NGxfYnVmZmVycy5idWZmZXJfc2l6ZTsKKwkJCXBhZ2UgPSBmaC0+djRsX2J1ZmZlcnMuYnVmZmVyW2ldLmZidWZmZXJfcGh5czsKKwkJCWlmIChyZW1hcF9wZm5fcmFuZ2Uodm1hLCBzdGFydCwgcGFnZSA+PiBQQUdFX1NISUZULAorCQkJCQkJCXRvZG8sIFBBR0VfU0hBUkVEKSkgeworCQkJCWRwcmludGsoMSwKKwkJCQkJS0VSTl9FUlIKKwkJCQkJIiVzOiB6b3Jhbl9tbWFwKFY0TClpIC0gcmVtYXBfcGZuX3JhbmdlIGZhaWxlZFxuIiwKKwkJCQkJWlJfREVWTkFNRSh6cikpOworCQkJCXJlcyA9IC1FQUdBSU47CisJCQkJZ290byB2NGxfbW1hcF91bmxvY2tfYW5kX3JldHVybjsKKwkJCX0KKwkJCXNpemUgLT0gdG9kbzsKKwkJCXN0YXJ0ICs9IHRvZG87CisJCQlmaC0+djRsX2J1ZmZlcnMuYnVmZmVyW2ldLm1hcCA9IG1hcDsKKwkJCWlmIChzaXplID09IDApCisJCQkJYnJlYWs7CisJCX0KKwl2NGxfbW1hcF91bmxvY2tfYW5kX3JldHVybjoKKwkJbXV0ZXhfdW5sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7CisKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlkcHJpbnRrKDEsCisJCQlLRVJOX0VSUgorCQkJIiVzOiB6b3Jhbl9tbWFwKCkgLSBpbnRlcm5hbCBlcnJvciAtIHVua25vd24gbWFwIG1vZGUgJWRcbiIsCisJCQlaUl9ERVZOQU1FKHpyKSwgZmgtPm1hcF9tb2RlKTsKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHpvcmFuX2ZvcHMgPSB7CisJLm93bmVyID0gVEhJU19NT0RVTEUsCisJLm9wZW4gPSB6b3Jhbl9vcGVuLAorCS5yZWxlYXNlID0gem9yYW5fY2xvc2UsCisJLmlvY3RsID0gem9yYW5faW9jdGwsCisjaWZkZWYgQ09ORklHX0NPTVBBVAorCS5jb21wYXRfaW9jdGwJPSB2NGxfY29tcGF0X2lvY3RsMzIsCisjZW5kaWYKKwkubGxzZWVrID0gbm9fbGxzZWVrLAorCS5yZWFkID0gem9yYW5fcmVhZCwKKwkud3JpdGUgPSB6b3Jhbl93cml0ZSwKKwkubW1hcCA9IHpvcmFuX21tYXAsCisJLnBvbGwgPSB6b3Jhbl9wb2xsLAorfTsKKworc3RydWN0IHZpZGVvX2RldmljZSB6b3Jhbl90ZW1wbGF0ZSBfX2RldmluaXRkYXRhID0geworCS5uYW1lID0gWk9SQU5fTkFNRSwKKwkuZm9wcyA9ICZ6b3Jhbl9mb3BzLAorCS5yZWxlYXNlID0gJnpvcmFuX3ZkZXZfcmVsZWFzZSwKKwkubWlub3IgPSAtMQorfTsKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby96b3Jhbl9wcm9jZnMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vem9yYW4vem9yYW5fcHJvY2ZzLmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGRyaXZlcnMvbWVkaWEvdmlkZW8vem9yYW5fcHJvY2ZzLmMKcmVuYW1lIHRvIGRyaXZlcnMvbWVkaWEvdmlkZW8vem9yYW4vem9yYW5fcHJvY2ZzLmMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vem9yYW5fcHJvY2ZzLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3pvcmFuL3pvcmFuX3Byb2Nmcy5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBkcml2ZXJzL21lZGlhL3ZpZGVvL3pvcmFuX3Byb2Nmcy5oCnJlbmFtZSB0byBkcml2ZXJzL21lZGlhL3ZpZGVvL3pvcmFuL3pvcmFuX3Byb2Nmcy5oCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3pyMzYwMTYuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vem9yYW4venIzNjAxNi5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBkcml2ZXJzL21lZGlhL3ZpZGVvL3pyMzYwMTYuYwpyZW5hbWUgdG8gZHJpdmVycy9tZWRpYS92aWRlby96b3Jhbi96cjM2MDE2LmMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8venIzNjAxNi5oIGIvZHJpdmVycy9tZWRpYS92aWRlby96b3Jhbi96cjM2MDE2LmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGRyaXZlcnMvbWVkaWEvdmlkZW8venIzNjAxNi5oCnJlbmFtZSB0byBkcml2ZXJzL21lZGlhL3ZpZGVvL3pvcmFuL3pyMzYwMTYuaApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby96cjM2MDUwLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3pvcmFuL3pyMzYwNTAuYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gZHJpdmVycy9tZWRpYS92aWRlby96cjM2MDUwLmMKcmVuYW1lIHRvIGRyaXZlcnMvbWVkaWEvdmlkZW8vem9yYW4venIzNjA1MC5jCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3pyMzYwNTAuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vem9yYW4venIzNjA1MC5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBkcml2ZXJzL21lZGlhL3ZpZGVvL3pyMzYwNTAuaApyZW5hbWUgdG8gZHJpdmVycy9tZWRpYS92aWRlby96b3Jhbi96cjM2MDUwLmgKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8venIzNjA1Ny5oIGIvZHJpdmVycy9tZWRpYS92aWRlby96b3Jhbi96cjM2MDU3LmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGRyaXZlcnMvbWVkaWEvdmlkZW8venIzNjA1Ny5oCnJlbmFtZSB0byBkcml2ZXJzL21lZGlhL3ZpZGVvL3pvcmFuL3pyMzYwNTcuaApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby96cjM2MDYwLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3pvcmFuL3pyMzYwNjAuYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gZHJpdmVycy9tZWRpYS92aWRlby96cjM2MDYwLmMKcmVuYW1lIHRvIGRyaXZlcnMvbWVkaWEvdmlkZW8vem9yYW4venIzNjA2MC5jCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3pyMzYwNjAuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vem9yYW4venIzNjA2MC5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBkcml2ZXJzL21lZGlhL3ZpZGVvL3pyMzYwNjAuaApyZW5hbWUgdG8gZHJpdmVycy9tZWRpYS92aWRlby96b3Jhbi96cjM2MDYwLmgKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vem9yYW5fY2FyZC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby96b3Jhbl9jYXJkLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMyODJiZTcuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby96b3Jhbl9jYXJkLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxNjcwICswLDAgQEAKLS8qCi0gKiBab3JhbiB6cjM2MDU3L3pyMzYwNjcgUENJIGNvbnRyb2xsZXIgZHJpdmVyLCBmb3IgdGhlCi0gKiBQaW5uYWNsZS9NaXJvIERDMTAvREMxMCsvREMzMC9EQzMwKywgSW9tZWdhIEJ1eiwgTGludXgKLSAqIE1lZGlhIExhYnMgTE1MMzMvTE1MMzNSMTAuCi0gKgotICogVGhpcyBwYXJ0IGhhbmRsZXMgY2FyZC1zcGVjaWZpYyBkYXRhIGFuZCBkZXRlY3Rpb24KLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgU2VyZ3VlaSBNaXJpZG9ub3YgPG1pcnNldkBjaWNlc2UubXg+Ci0gKgotICogQ3VycmVudGx5IG1haW50YWluZWQgYnk6Ci0gKiAgIFJvbmFsZCBCdWx0amUgICAgPHJidWx0amVAcm9uYWxkLmJpdGZyZWFrLm5ldD4KLSAqICAgTGF1cmVudCBQaW5jaGFydCA8bGF1cmVudC5waW5jaGFydEBza3luZXQuYmU+Ci0gKiAgIE1haWxpbmdsaXN0ICAgICAgPG1qcGVnLXVzZXJzQGxpc3RzLnNmLm5ldD4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KLQotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KLQotI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KLSNpbmNsdWRlIDxsaW51eC9pMmMuaD4KLSNpbmNsdWRlIDxsaW51eC9pMmMtYWxnby1iaXQuaD4KLSNpbmNsdWRlIDxsaW51eC92aWRlb2Rldi5oPgotI2luY2x1ZGUgPG1lZGlhL3Y0bDItY29tbW9uLmg+Ci0jaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KLSNpbmNsdWRlIDxsaW51eC9zZW0uaD4KLSNpbmNsdWRlIDxsaW51eC9rbW9kLmg+Ci0jaW5jbHVkZSA8bGludXgvd2FpdC5oPgotCi0jaW5jbHVkZSA8bGludXgvcGNpLmg+Ci0jaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Ci0jaW5jbHVkZSA8bGludXgvdmlkZW9fZGVjb2Rlci5oPgotI2luY2x1ZGUgPGxpbnV4L3ZpZGVvX2VuY29kZXIuaD4KLSNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgotCi0jaW5jbHVkZSA8YXNtL2lvLmg+Ci0KLSNpbmNsdWRlICJ2aWRlb2NvZGVjLmgiCi0jaW5jbHVkZSAiem9yYW4uaCIKLSNpbmNsdWRlICJ6b3Jhbl9jYXJkLmgiCi0jaW5jbHVkZSAiem9yYW5fZGV2aWNlLmgiCi0jaW5jbHVkZSAiem9yYW5fcHJvY2ZzLmgiCi0KLWV4dGVybiBjb25zdCBzdHJ1Y3Qgem9yYW5fZm9ybWF0IHpvcmFuX2Zvcm1hdHNbXTsKLQotc3RhdGljIGludCBjYXJkW0JVWl9NQVhdID0geyAtMSwgLTEsIC0xLCAtMSB9OwotbW9kdWxlX3BhcmFtX2FycmF5KGNhcmQsIGludCwgTlVMTCwgMDQ0NCk7Ci1NT0RVTEVfUEFSTV9ERVNDKGNhcmQsICJUaGUgdHlwZSBvZiBjYXJkIik7Ci0KLXN0YXRpYyBpbnQgZW5jb2RlcltCVVpfTUFYXSA9IHsgLTEsIC0xLCAtMSwgLTEgfTsKLW1vZHVsZV9wYXJhbV9hcnJheShlbmNvZGVyLCBpbnQsIE5VTEwsIDA0NDQpOwotTU9EVUxFX1BBUk1fREVTQyhlbmNvZGVyLCAiaTJjIFRWIGVuY29kZXIiKTsKLQotc3RhdGljIGludCBkZWNvZGVyW0JVWl9NQVhdID0geyAtMSwgLTEsIC0xLCAtMSB9OwotbW9kdWxlX3BhcmFtX2FycmF5KGRlY29kZXIsIGludCwgTlVMTCwgMDQ0NCk7Ci1NT0RVTEVfUEFSTV9ERVNDKGRlY29kZXIsICJpMmMgVFYgZGVjb2RlciIpOwotCi0vKgotICAgVGhlIHZpZGVvIG1lbSBhZGRyZXNzIG9mIHRoZSB2aWRlbyBjYXJkLgotICAgVGhlIGRyaXZlciBoYXMgYSBsaXR0bGUgZGF0YWJhc2UgZm9yIHNvbWUgdmlkZW9jYXJkcwotICAgdG8gZGV0ZXJtaW5lIGl0IGZyb20gdGhlcmUuIElmIHlvdXIgdmlkZW8gY2FyZCBpcyBub3QgaW4gdGhlcmUKLSAgIHlvdSBoYXZlIGVpdGhlciB0byBnaXZlIGl0IHRvIHRoZSBkcml2ZXIgYXMgYSBwYXJhbWV0ZXIKLSAgIG9yIHNldCBpbiBpbiBhIFZJRElPQ1NGQlVGIGlvY3RsCi0gKi8KLQotc3RhdGljIHVuc2lnbmVkIGxvbmcgdmlkbWVtOwkvKiBkZWZhdWx0ID0gMCAtIFZpZGVvIG1lbW9yeSBiYXNlIGFkZHJlc3MgKi8KLW1vZHVsZV9wYXJhbSh2aWRtZW0sIHVsb25nLCAwNDQ0KTsKLU1PRFVMRV9QQVJNX0RFU0ModmlkbWVtLCAiRGVmYXVsdCB2aWRlbyBtZW1vcnkgYmFzZSBhZGRyZXNzIik7Ci0KLS8qCi0gICBEZWZhdWx0IGlucHV0IGFuZCB2aWRlbyBub3JtIGF0IHN0YXJ0dXAgb2YgdGhlIGRyaXZlci4KLSovCi0KLXN0YXRpYyB1bnNpZ25lZCBpbnQgZGVmYXVsdF9pbnB1dDsJLyogZGVmYXVsdCAwID0gQ29tcG9zaXRlLCAxID0gUy1WaWRlbyAqLwotbW9kdWxlX3BhcmFtKGRlZmF1bHRfaW5wdXQsIHVpbnQsIDA0NDQpOwotTU9EVUxFX1BBUk1fREVTQyhkZWZhdWx0X2lucHV0LAotCQkgIkRlZmF1bHQgaW5wdXQgKDA9Q29tcG9zaXRlLCAxPVMtVmlkZW8sIDI9SW50ZXJuYWwpIik7Ci0KLXN0YXRpYyBpbnQgZGVmYXVsdF9tdXggPSAxOwkvKiA2IEV5ZXMgaW5wdXQgc2VsZWN0aW9uICovCi1tb2R1bGVfcGFyYW0oZGVmYXVsdF9tdXgsIGludCwgMDY0NCk7Ci1NT0RVTEVfUEFSTV9ERVNDKGRlZmF1bHRfbXV4LAotCQkgIkRlZmF1bHQgNiBFeWVzIG11eCBzZXR0aW5nIChJbnB1dCBzZWxlY3Rpb24pIik7Ci0KLXN0YXRpYyBpbnQgZGVmYXVsdF9ub3JtOwkvKiBkZWZhdWx0IDAgPSBQQUwsIDEgPSBOVFNDIDIgPSBTRUNBTSAqLwotbW9kdWxlX3BhcmFtKGRlZmF1bHRfbm9ybSwgaW50LCAwNDQ0KTsKLU1PRFVMRV9QQVJNX0RFU0MoZGVmYXVsdF9ub3JtLCAiRGVmYXVsdCBub3JtICgwPVBBTCwgMT1OVFNDLCAyPVNFQ0FNKSIpOwotCi0vKiAvZGV2L3ZpZGVvTiwgLTEgZm9yIGF1dG9kZXRlY3QgKi8KLXN0YXRpYyBpbnQgdmlkZW9fbnJbQlVaX01BWF0gPSB7LTEsIC0xLCAtMSwgLTF9OwotbW9kdWxlX3BhcmFtX2FycmF5KHZpZGVvX25yLCBpbnQsIE5VTEwsIDA0NDQpOwotTU9EVUxFX1BBUk1fREVTQyh2aWRlb19uciwgInZpZGVvIGRldmljZSBudW1iZXIgKC0xPUF1dG8pIik7Ci0KLS8qCi0gICBOdW1iZXIgYW5kIHNpemUgb2YgZ3JhYiBidWZmZXJzIGZvciBWaWRlbyA0IExpbnV4Ci0gICBUaGUgdmFzdCBtYWpvcml0eSBvZiBhcHBsaWNhdGlvbnMgc2hvdWxkIG5vdCBuZWVkIG1vcmUgdGhhbiAyLAotICAgdGhlIHZlcnkgcG9wdWxhciBCVFRWIGRyaXZlciBhY3R1YWxseSBkb2VzIE9OTFkgaGF2ZSAyLgotICAgVGltZSBzZW5zaXRpdmUgYXBwbGljYXRpb25zIG1pZ2h0IG5lZWQgbW9yZSwgdGhlIG1heGltdW0KLSAgIGlzIFZJREVPX01BWF9GUkFNRSAoZGVmaW5lZCBpbiA8bGludXgvdmlkZW9kZXYuaD4pLgotCi0gICBUaGUgc2l6ZSBpcyBzZXQgc28gdGhhdCB0aGUgbWF4aW11bSBwb3NzaWJsZSByZXF1ZXN0Ci0gICBjYW4gYmUgc2F0aXNmaWVkLiBEZWNyZWFzZSAgaXQsIGlmIGJpZ3BoeXNfYXJlYSBhbGxvYydkCi0gICBtZW1vcnkgaXMgbG93LiBJZiB5b3UgZG9uJ3QgaGF2ZSB0aGUgYmlncGh5c19hcmVhIHBhdGNoLAotICAgc2V0IGl0IHRvIDEyOCBLQi4gV2lsbCB5b3UgYWxsb3cgb25seSB0byBncmFiIHNtYWxsCi0gICBpbWFnZXMgd2l0aCBWNEwsIGJ1dCB0aGF0J3MgYmV0dGVyIHRoYW4gbm90aGluZy4KLQotICAgdjRsX2J1ZnNpemUgaGFzIHRvIGJlIGdpdmVuIGluIEtCICEKLQotKi8KLQotaW50IHY0bF9uYnVmcyA9IDI7Ci1pbnQgdjRsX2J1ZnNpemUgPSAxMjg7CQkvKiBFdmVyeWJvZHkgc2hvdWxkIGJlIGFibGUgdG8gd29yayB3aXRoIHRoaXMgc2V0dGluZyAqLwotbW9kdWxlX3BhcmFtKHY0bF9uYnVmcywgaW50LCAwNjQ0KTsKLU1PRFVMRV9QQVJNX0RFU0ModjRsX25idWZzLCAiTWF4aW11bSBudW1iZXIgb2YgVjRMIGJ1ZmZlcnMgdG8gdXNlIik7Ci1tb2R1bGVfcGFyYW0odjRsX2J1ZnNpemUsIGludCwgMDY0NCk7Ci1NT0RVTEVfUEFSTV9ERVNDKHY0bF9idWZzaXplLCAiTWF4aW11bSBzaXplIHBlciBWNEwgYnVmZmVyIChpbiBrQikiKTsKLQotaW50IGpwZ19uYnVmcyA9IDMyOwotaW50IGpwZ19idWZzaXplID0gNTEyOwkJLyogbWF4IHNpemUgZm9yIDEwMCUgcXVhbGl0eSBmdWxsLVBBTCBmcmFtZSAqLwotbW9kdWxlX3BhcmFtKGpwZ19uYnVmcywgaW50LCAwNjQ0KTsKLU1PRFVMRV9QQVJNX0RFU0MoanBnX25idWZzLCAiTWF4aW11bSBudW1iZXIgb2YgSlBHIGJ1ZmZlcnMgdG8gdXNlIik7Ci1tb2R1bGVfcGFyYW0oanBnX2J1ZnNpemUsIGludCwgMDY0NCk7Ci1NT0RVTEVfUEFSTV9ERVNDKGpwZ19idWZzaXplLCAiTWF4aW11bSBzaXplIHBlciBKUEcgYnVmZmVyIChpbiBrQikiKTsKLQotaW50IHBhc3NfdGhyb3VnaCA9IDA7CQkvKiAxPVBhc3MgdGhyb3VnaCBUViBzaWduYWwgd2hlbiBkZXZpY2UgaXMgbm90IHVzZWQgKi8KLQkJCQkvKiAwPVNob3cgY29sb3IgYmFyIHdoZW4gZGV2aWNlIGlzIG5vdCB1c2VkIChMTUwzMzogb25seSBpZiBsbWwzM2RwYXRoPTEpICovCi1tb2R1bGVfcGFyYW0ocGFzc190aHJvdWdoLCBpbnQsIDA2NDQpOwotTU9EVUxFX1BBUk1fREVTQyhwYXNzX3Rocm91Z2gsCi0JCSAiUGFzcyBUViBzaWduYWwgdGhyb3VnaCB0byBUVi1vdXQgd2hlbiBpZGxpbmciKTsKLQotaW50IHpyMzYwNjdfZGVidWcgPSAxOwotbW9kdWxlX3BhcmFtX25hbWVkKGRlYnVnLCB6cjM2MDY3X2RlYnVnLCBpbnQsIDA2NDQpOwotTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgIkRlYnVnIGxldmVsICgwLTUpIik7Ci0KLU1PRFVMRV9ERVNDUklQVElPTigiWm9yYW4tMzYwNTcvMzYwNjcgSlBFRyBjb2RlYyBkcml2ZXIiKTsKLU1PRFVMRV9BVVRIT1IoIlNlcmd1ZWkgTWlyaWRvbm92Iik7Ci1NT0RVTEVfTElDRU5TRSgiR1BMIik7Ci0KLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCB6cjM2MDY3X3BjaV90YmxbXSA9IHsKLQl7UENJX1ZFTkRPUl9JRF9aT1JBTiwgUENJX0RFVklDRV9JRF9aT1JBTl8zNjA1NywKLQkgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCi0JezB9Ci19OwotTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIHpyMzYwNjdfcGNpX3RibCk7Ci0KLWludCB6b3Jhbl9udW07CQkJLyogbnVtYmVyIG9mIEJ1enMgaW4gdXNlICovCi1zdHJ1Y3Qgem9yYW4gKnpvcmFuW0JVWl9NQVhdOwotCi0vKiB2aWRlb2NvZGVjIGJ1cyBmdW5jdGlvbnMgWlIzNjA2MCAqLwotc3RhdGljIHUzMgotenIzNjA2MF9yZWFkIChzdHJ1Y3QgdmlkZW9jb2RlYyAqY29kZWMsCi0JICAgICAgdTE2ICAgICAgICAgICAgICAgIHJlZykKLXsKLQlzdHJ1Y3Qgem9yYW4gKnpyID0gKHN0cnVjdCB6b3JhbiAqKSBjb2RlYy0+bWFzdGVyX2RhdGEtPmRhdGE7Ci0JX191MzIgZGF0YTsKLQotCWlmIChwb3N0X29mZmljZV93YWl0KHpyKQotCSAgICB8fCBwb3N0X29mZmljZV93cml0ZSh6ciwgMCwgMSwgcmVnID4+IDgpCi0JICAgIHx8IHBvc3Rfb2ZmaWNlX3dyaXRlKHpyLCAwLCAyLCByZWcgJiAweGZmKSkgewotCQlyZXR1cm4gLTE7Ci0JfQotCi0JZGF0YSA9IHBvc3Rfb2ZmaWNlX3JlYWQoenIsIDAsIDMpICYgMHhmZjsKLQlyZXR1cm4gZGF0YTsKLX0KLQotc3RhdGljIHZvaWQKLXpyMzYwNjBfd3JpdGUgKHN0cnVjdCB2aWRlb2NvZGVjICpjb2RlYywKLQkgICAgICAgdTE2ICAgICAgICAgICAgICAgIHJlZywKLQkgICAgICAgdTMyICAgICAgICAgICAgICAgIHZhbCkKLXsKLQlzdHJ1Y3Qgem9yYW4gKnpyID0gKHN0cnVjdCB6b3JhbiAqKSBjb2RlYy0+bWFzdGVyX2RhdGEtPmRhdGE7Ci0KLQlpZiAocG9zdF9vZmZpY2Vfd2FpdCh6cikKLQkgICAgfHwgcG9zdF9vZmZpY2Vfd3JpdGUoenIsIDAsIDEsIHJlZyA+PiA4KQotCSAgICB8fCBwb3N0X29mZmljZV93cml0ZSh6ciwgMCwgMiwgcmVnICYgMHhmZikpIHsKLQkJcmV0dXJuOwotCX0KLQotCXBvc3Rfb2ZmaWNlX3dyaXRlKHpyLCAwLCAzLCB2YWwgJiAweGZmKTsKLX0KLQotLyogdmlkZW9jb2RlYyBidXMgZnVuY3Rpb25zIFpSMzYwNTAgKi8KLXN0YXRpYyB1MzIKLXpyMzYwNTBfcmVhZCAoc3RydWN0IHZpZGVvY29kZWMgKmNvZGVjLAotCSAgICAgIHUxNiAgICAgICAgICAgICAgICByZWcpCi17Ci0Jc3RydWN0IHpvcmFuICp6ciA9IChzdHJ1Y3Qgem9yYW4gKikgY29kZWMtPm1hc3Rlcl9kYXRhLT5kYXRhOwotCV9fdTMyIGRhdGE7Ci0KLQlpZiAocG9zdF9vZmZpY2Vfd2FpdCh6cikKLQkgICAgfHwgcG9zdF9vZmZpY2Vfd3JpdGUoenIsIDEsIDAsIHJlZyA+PiAyKSkgewkvLyByZWcuIEhJR0hCWVRFUwotCQlyZXR1cm4gLTE7Ci0JfQotCi0JZGF0YSA9IHBvc3Rfb2ZmaWNlX3JlYWQoenIsIDAsIHJlZyAmIDB4MDMpICYgMHhmZjsJLy8gcmVnLiBMT1dCWVRFUyArIHJlYWQKLQlyZXR1cm4gZGF0YTsKLX0KLQotc3RhdGljIHZvaWQKLXpyMzYwNTBfd3JpdGUgKHN0cnVjdCB2aWRlb2NvZGVjICpjb2RlYywKLQkgICAgICAgdTE2ICAgICAgICAgICAgICAgIHJlZywKLQkgICAgICAgdTMyICAgICAgICAgICAgICAgIHZhbCkKLXsKLQlzdHJ1Y3Qgem9yYW4gKnpyID0gKHN0cnVjdCB6b3JhbiAqKSBjb2RlYy0+bWFzdGVyX2RhdGEtPmRhdGE7Ci0KLQlpZiAocG9zdF9vZmZpY2Vfd2FpdCh6cikKLQkgICAgfHwgcG9zdF9vZmZpY2Vfd3JpdGUoenIsIDEsIDAsIHJlZyA+PiAyKSkgewkvLyByZWcuIEhJR0hCWVRFUwotCQlyZXR1cm47Ci0JfQotCi0JcG9zdF9vZmZpY2Vfd3JpdGUoenIsIDAsIHJlZyAmIDB4MDMsIHZhbCAmIDB4ZmYpOwkvLyByZWcuIExPV0JZVEVTICsgd3IuIGRhdGEKLX0KLQotLyogdmlkZW9jb2RlYyBidXMgZnVuY3Rpb25zIFpSMzYwMTYgKi8KLXN0YXRpYyB1MzIKLXpyMzYwMTZfcmVhZCAoc3RydWN0IHZpZGVvY29kZWMgKmNvZGVjLAotCSAgICAgIHUxNiAgICAgICAgICAgICAgICByZWcpCi17Ci0Jc3RydWN0IHpvcmFuICp6ciA9IChzdHJ1Y3Qgem9yYW4gKikgY29kZWMtPm1hc3Rlcl9kYXRhLT5kYXRhOwotCV9fdTMyIGRhdGE7Ci0KLQlpZiAocG9zdF9vZmZpY2Vfd2FpdCh6cikpIHsKLQkJcmV0dXJuIC0xOwotCX0KLQotCWRhdGEgPSBwb3N0X29mZmljZV9yZWFkKHpyLCAyLCByZWcgJiAweDAzKSAmIDB4ZmY7CS8vIHJlYWQKLQlyZXR1cm4gZGF0YTsKLX0KLQotLyogaGFjayBmb3IgaW4gem9yYW5fZGV2aWNlLmMgKi8KLXZvaWQKLXpyMzYwMTZfd3JpdGUgKHN0cnVjdCB2aWRlb2NvZGVjICpjb2RlYywKLQkgICAgICAgdTE2ICAgICAgICAgICAgICAgIHJlZywKLQkgICAgICAgdTMyICAgICAgICAgICAgICAgIHZhbCkKLXsKLQlzdHJ1Y3Qgem9yYW4gKnpyID0gKHN0cnVjdCB6b3JhbiAqKSBjb2RlYy0+bWFzdGVyX2RhdGEtPmRhdGE7Ci0KLQlpZiAocG9zdF9vZmZpY2Vfd2FpdCh6cikpIHsKLQkJcmV0dXJuOwotCX0KLQotCXBvc3Rfb2ZmaWNlX3dyaXRlKHpyLCAyLCByZWcgJiAweDAzLCB2YWwgJiAweDBmZik7CS8vIHdyLiBkYXRhCi19Ci0KLS8qCi0gKiBCb2FyZCBzcGVjaWZpYyBpbmZvcm1hdGlvbgotICovCi0KLXN0YXRpYyB2b2lkCi1kYzEwX2luaXQgKHN0cnVjdCB6b3JhbiAqenIpCi17Ci0JZHByaW50aygzLCBLRVJOX0RFQlVHICIlczogZGMxMF9pbml0KClcbiIsIFpSX0RFVk5BTUUoenIpKTsKLQotCS8qIFBpeGVsIGNsb2NrIHNlbGVjdGlvbiAqLwotCUdQSU8oenIsIDQsIDApOwotCUdQSU8oenIsIDUsIDEpOwotCS8qIEVuYWJsZSB0aGUgdmlkZW8gYnVzIHN5bmMgc2lnbmFscyAqLwotCUdQSU8oenIsIDcsIDApOwotfQotCi1zdGF0aWMgdm9pZAotZGMxMHBsdXNfaW5pdCAoc3RydWN0IHpvcmFuICp6cikKLXsKLQlkcHJpbnRrKDMsIEtFUk5fREVCVUcgIiVzOiBkYzEwcGx1c19pbml0KClcbiIsIFpSX0RFVk5BTUUoenIpKTsKLX0KLQotc3RhdGljIHZvaWQKLWJ1el9pbml0IChzdHJ1Y3Qgem9yYW4gKnpyKQotewotCWRwcmludGsoMywgS0VSTl9ERUJVRyAiJXM6IGJ1el9pbml0KClcbiIsIFpSX0RFVk5BTUUoenIpKTsKLQotCS8qIHNvbWUgc3R1ZmYgZnJvbSBJb21lZ2EgKi8KLQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKHpyLT5wY2lfZGV2LCAweGZjLCAweDkwNjgwZjE1KTsKLQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKHpyLT5wY2lfZGV2LCAweDBjLCAweDAwMDEyMDIwKTsKLQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKHpyLT5wY2lfZGV2LCAweGU4LCAweGMwMjAwMDAwKTsKLX0KLQotc3RhdGljIHZvaWQKLWxtbDMzX2luaXQgKHN0cnVjdCB6b3JhbiAqenIpCi17Ci0JZHByaW50aygzLCBLRVJOX0RFQlVHICIlczogbG1sMzNfaW5pdCgpXG4iLCBaUl9ERVZOQU1FKHpyKSk7Ci0KLQlHUElPKHpyLCAyLCAxKTsJCS8vIFNldCBDb21wb3NpdGUgaW5wdXQvb3V0cHV0Ci19Ci0KLXN0YXRpYyB2b2lkCi1hdnM2ZXllc19pbml0IChzdHJ1Y3Qgem9yYW4gKnpyKQotewotCS8vIEF2ZXJNZWRpYSA2LUV5ZXMgb3JpZ2luYWwgZHJpdmVyIGJ5IENocmlzdGVyIFdlaW5pZ2VsCi0KLQkvLyBMaWZ0ZWQgc3RyYWlnaHQgZnJvbSBDaHJpc3RlcidzIG9sZCBkcml2ZXIgYW5kCi0JLy8gbW9kaWZpZWQgc2xpZ2h0bHkgYnkgTWFydGluIFNhbXVlbHNzb24uCi0KLQlpbnQgbXV4ID0gZGVmYXVsdF9tdXg7IC8qIDEgPSBCVDg2NiwgNyA9IFZJRDEgKi8KLQotCUdQSU8oenIsIDQsIDEpOyAvKiBCdDg2NiBTTEVFUCBvbiAqLwotCXVkZWxheSgyKTsKLQotCUdQSU8oenIsIDAsIDEpOyAvKiBaUjM2MDYwIC9SRVNFVCBvbiAqLwotCUdQSU8oenIsIDEsIDApOyAvKiBaUjM2MDYwIC9TTEVFUCBvbiAqLwotCUdQSU8oenIsIDIsIG11eCAmIDEpOyAgIC8qIE1VWCBTMCAqLwotCUdQSU8oenIsIDMsIDApOyAvKiAvRlJBTUUgb24gKi8KLQlHUElPKHpyLCA0LCAwKTsgLyogQnQ4NjYgU0xFRVAgb2ZmICovCi0JR1BJTyh6ciwgNSwgbXV4ICYgMik7ICAgLyogTVVYIFMxICovCi0JR1BJTyh6ciwgNiwgMCk7IC8qID8gKi8KLQlHUElPKHpyLCA3LCBtdXggJiA0KTsgICAvKiBNVVggUzIgKi8KLQotfQotCi1zdGF0aWMgY2hhciAqCi1pMmNpZF90b19tb2R1bGVuYW1lICh1MTYgaTJjX2lkKQotewotCWNoYXIgKm5hbWUgPSBOVUxMOwotCi0Jc3dpdGNoIChpMmNfaWQpIHsKLQljYXNlIEkyQ19EUklWRVJJRF9TQUE3MTEwOgotCQluYW1lID0gInNhYTcxMTAiOwotCQlicmVhazsKLQljYXNlIEkyQ19EUklWRVJJRF9TQUE3MTExQToKLQkJbmFtZSA9ICJzYWE3MTExIjsKLQkJYnJlYWs7Ci0JY2FzZSBJMkNfRFJJVkVSSURfU0FBNzExNDoKLQkJbmFtZSA9ICJzYWE3MTE0IjsKLQkJYnJlYWs7Ci0JY2FzZSBJMkNfRFJJVkVSSURfU0FBNzE4NUI6Ci0JCW5hbWUgPSAic2FhNzE4NSI7Ci0JCWJyZWFrOwotCWNhc2UgSTJDX0RSSVZFUklEX0FEVjcxNzA6Ci0JCW5hbWUgPSAiYWR2NzE3MCI7Ci0JCWJyZWFrOwotCWNhc2UgSTJDX0RSSVZFUklEX0FEVjcxNzU6Ci0JCW5hbWUgPSAiYWR2NzE3NSI7Ci0JCWJyZWFrOwotCWNhc2UgSTJDX0RSSVZFUklEX0JUODE5OgotCQluYW1lID0gImJ0ODE5IjsKLQkJYnJlYWs7Ci0JY2FzZSBJMkNfRFJJVkVSSURfQlQ4NTY6Ci0JCW5hbWUgPSAiYnQ4NTYiOwotCQlicmVhazsKLQljYXNlIEkyQ19EUklWRVJJRF9CVDg2NjoKLQkJbmFtZSA9ICJidDg2NiI7Ci0JCWJyZWFrOwotCWNhc2UgSTJDX0RSSVZFUklEX1ZQWDMyMjA6Ci0JCW5hbWUgPSAidnB4MzIyMCI7Ci0JCWJyZWFrOwotCWNhc2UgSTJDX0RSSVZFUklEX0tTMDEyNzoKLQkJbmFtZSA9ICJrczAxMjciOwotCQlicmVhazsKLQl9Ci0KLQlyZXR1cm4gbmFtZTsKLX0KLQotc3RhdGljIGNoYXIgKgotY29kZWNpZF90b19tb2R1bGVuYW1lICh1MTYgY29kZWNpZCkKLXsKLQljaGFyICpuYW1lID0gTlVMTDsKLQotCXN3aXRjaCAoY29kZWNpZCkgewotCWNhc2UgQ09ERUNfVFlQRV9aUjM2MDYwOgotCQluYW1lID0gInpyMzYwNjAiOwotCQlicmVhazsKLQljYXNlIENPREVDX1RZUEVfWlIzNjA1MDoKLQkJbmFtZSA9ICJ6cjM2MDUwIjsKLQkJYnJlYWs7Ci0JY2FzZSBDT0RFQ19UWVBFX1pSMzYwMTY6Ci0JCW5hbWUgPSAienIzNjAxNiI7Ci0JCWJyZWFrOwotCX0KLQotCXJldHVybiBuYW1lOwotfQotCi0vLyBzdHJ1Y3QgdHZub3JtIHsKLS8vICAgICAgdTE2IFd0LCBXYSwgSFN0YXJ0LCBIU3luY1N0YXJ0LCBIdCwgSGEsIFZTdGFydDsKLS8vIH07Ci0KLXN0YXRpYyBzdHJ1Y3QgdHZub3JtIGY1MHNxcGl4ZWwgPSB7IDk0NCwgNzY4LCA4MywgODgwLCA2MjUsIDU3NiwgMTYgfTsKLXN0YXRpYyBzdHJ1Y3QgdHZub3JtIGY2MHNxcGl4ZWwgPSB7IDc4MCwgNjQwLCA1MSwgNzE2LCA1MjUsIDQ4MCwgMTIgfTsKLXN0YXRpYyBzdHJ1Y3QgdHZub3JtIGY1MGNjaXI2MDEgPSB7IDg2NCwgNzIwLCA3NSwgODA0LCA2MjUsIDU3NiwgMTggfTsKLXN0YXRpYyBzdHJ1Y3QgdHZub3JtIGY2MGNjaXI2MDEgPSB7IDg1OCwgNzIwLCA1NywgNzg4LCA1MjUsIDQ4MCwgMTYgfTsKLQotc3RhdGljIHN0cnVjdCB0dm5vcm0gZjUwY2NpcjYwMV9sbWwzMyA9IHsgODY0LCA3MjAsIDc1KzM0LCA4MDQsIDYyNSwgNTc2LCAxOCB9Owotc3RhdGljIHN0cnVjdCB0dm5vcm0gZjYwY2NpcjYwMV9sbWwzMyA9IHsgODU4LCA3MjAsIDU3KzM0LCA3ODgsIDUyNSwgNDgwLCAxNiB9OwotCi0vKiBUaGUgREMxMCAoNTcvMTYvNTApIHVzZXMgVkFjdGl2ZSBhcyBIU3luYywgc28gSFN0YXJ0IG11c3QgYmUgMCAqLwotc3RhdGljIHN0cnVjdCB0dm5vcm0gZjUwc3FwaXhlbF9kYzEwID0geyA5NDQsIDc2OCwgMCwgODgwLCA2MjUsIDU3NiwgMCB9Owotc3RhdGljIHN0cnVjdCB0dm5vcm0gZjYwc3FwaXhlbF9kYzEwID0geyA3ODAsIDY0MCwgMCwgNzE2LCA1MjUsIDQ4MCwgMTIgfTsKLQotLyogRklYTUU6IEkgY2Fubm90IHN3YXAgVSBhbmQgViBpbiBzYWE3MTE0LCBzbyBpIGRvIG9uZQotICogcGl4ZWwgbGVmdCBzaGlmdCBpbiB6b3JhbiAoNzUgLT4gNzQpCi0gKiAoTWF4aW0gWWV2dHl1c2hraW4gPG1heEBsaW51eG1lZGlhbGFicy5jb20+KSAqLwotc3RhdGljIHN0cnVjdCB0dm5vcm0gZjUwY2NpcjYwMV9sbTMzcjEwID0geyA4NjQsIDcyMCwgNzQrNTQsIDgwNCwgNjI1LCA1NzYsIDE4IH07Ci1zdGF0aWMgc3RydWN0IHR2bm9ybSBmNjBjY2lyNjAxX2xtMzNyMTAgPSB7IDg1OCwgNzIwLCA1Nis1NCwgNzg4LCA1MjUsIDQ4MCwgMTYgfTsKLQotLyogRklYTUU6IFRoZSBrczAxMjcgc2VlbSBpbmNhcGFibGUgb2Ygc3dhcHBpbmcgVSBhbmQgViwgdG9vLCB3aGljaCBpcyB3aHkgSQotICogY29weSBNYXhpbSdzIGxlZnQgc2hpZnQgaGFjayBmb3IgdGhlIDYgRXllcy4KLSAqCi0gKiBDaHJpc3RlcidzIGRyaXZlciB1c2VkIHRoZSB1bnNoaWZ0ZWQgbm9ybXMsIHRob3VnaC4uLgotICogL1NhbSAgKi8KLXN0YXRpYyBzdHJ1Y3QgdHZub3JtIGY1MGNjaXI2MDFfYXZzNmV5ZXMgPSB7IDg2NCwgNzIwLCA3NCwgODA0LCA2MjUsIDU3NiwgMTggfTsKLXN0YXRpYyBzdHJ1Y3QgdHZub3JtIGY2MGNjaXI2MDFfYXZzNmV5ZXMgPSB7IDg1OCwgNzIwLCA1NiwgNzg4LCA1MjUsIDQ4MCwgMTYgfTsKLQotc3RhdGljIHN0cnVjdCBjYXJkX2luZm8gem9yYW5fY2FyZHNbTlVNX0NBUkRTXSBfX2RldmluaXRkYXRhID0gewotCXsKLQkJLnR5cGUgPSBEQzEwX29sZCwKLQkJLm5hbWUgPSAiREMxMChvbGQpIiwKLQkJLmkyY19kZWNvZGVyID0gSTJDX0RSSVZFUklEX1ZQWDMyMjAsCi0JCS52aWRlb19jb2RlYyA9IENPREVDX1RZUEVfWlIzNjA1MCwKLQkJLnZpZGVvX3ZmZSA9IENPREVDX1RZUEVfWlIzNjAxNiwKLQotCQkuaW5wdXRzID0gMywKLQkJLmlucHV0ID0gewotCQkJeyAxLCAiQ29tcG9zaXRlIiB9LAotCQkJeyAyLCAiUy1WaWRlbyIgfSwKLQkJCXsgMCwgIkludGVybmFsL2NvbXAiIH0KLQkJfSwKLQkJLm5vcm1zID0gMywKLQkJLnR2biA9IHsKLQkJCSZmNTBzcXBpeGVsX2RjMTAsCi0JCQkmZjYwc3FwaXhlbF9kYzEwLAotCQkJJmY1MHNxcGl4ZWxfZGMxMAotCQl9LAotCQkuanBlZ19pbnQgPSAwLAotCQkudnN5bmNfaW50ID0gWlIzNjA1N19JU1JfR0lSUTEsCi0JCS5ncGlvID0geyAyLCAxLCAtMSwgMywgNywgMCwgNCwgNSB9LAotCQkuZ3Bpb19wb2wgPSB7IDAsIDAsIDAsIDEsIDAsIDAsIDAsIDAgfSwKLQkJLmdwY3MgPSB7IC0xLCAwIH0sCi0JCS52ZmVfcG9sID0geyAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwIH0sCi0JCS5nd3Nfbm90X2Nvbm5lY3RlZCA9IDAsCi0JCS5pbnB1dF9tdXggPSAwLAotCQkuaW5pdCA9ICZkYzEwX2luaXQsCi0JfSwgewotCQkudHlwZSA9IERDMTBfbmV3LAotCQkubmFtZSA9ICJEQzEwKG5ldykiLAotCQkuaTJjX2RlY29kZXIgPSBJMkNfRFJJVkVSSURfU0FBNzExMCwKLQkJLmkyY19lbmNvZGVyID0gSTJDX0RSSVZFUklEX0FEVjcxNzUsCi0JCS52aWRlb19jb2RlYyA9IENPREVDX1RZUEVfWlIzNjA2MCwKLQotCQkuaW5wdXRzID0gMywKLQkJLmlucHV0ID0gewotCQkJCXsgMCwgIkNvbXBvc2l0ZSIgfSwKLQkJCQl7IDcsICJTLVZpZGVvIiB9LAotCQkJCXsgNSwgIkludGVybmFsL2NvbXAiIH0KLQkJCX0sCi0JCS5ub3JtcyA9IDMsCi0JCS50dm4gPSB7Ci0JCQkJJmY1MHNxcGl4ZWwsCi0JCQkJJmY2MHNxcGl4ZWwsCi0JCQkJJmY1MHNxcGl4ZWx9LAotCQkuanBlZ19pbnQgPSBaUjM2MDU3X0lTUl9HSVJRMCwKLQkJLnZzeW5jX2ludCA9IFpSMzYwNTdfSVNSX0dJUlExLAotCQkuZ3BpbyA9IHsgMywgMCwgNiwgMSwgMiwgLTEsIDQsIDUgfSwKLQkJLmdwaW9fcG9sID0geyAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwIH0sCi0JCS5ncGNzID0geyAtMSwgMX0sCi0JCS52ZmVfcG9sID0geyAxLCAxLCAxLCAxLCAwLCAwLCAwLCAwIH0sCi0JCS5nd3Nfbm90X2Nvbm5lY3RlZCA9IDAsCi0JCS5pbnB1dF9tdXggPSAwLAotCQkuaW5pdCA9ICZkYzEwcGx1c19pbml0LAotCX0sIHsKLQkJLnR5cGUgPSBEQzEwcGx1cywKLQkJLm5hbWUgPSAiREMxMHBsdXMiLAotCQkudmVuZG9yX2lkID0gUENJX1ZFTkRPUl9JRF9NSVJPLAotCQkuZGV2aWNlX2lkID0gUENJX0RFVklDRV9JRF9NSVJPX0RDMTBQTFVTLAotCQkuaTJjX2RlY29kZXIgPSBJMkNfRFJJVkVSSURfU0FBNzExMCwKLQkJLmkyY19lbmNvZGVyID0gSTJDX0RSSVZFUklEX0FEVjcxNzUsCi0JCS52aWRlb19jb2RlYyA9IENPREVDX1RZUEVfWlIzNjA2MCwKLQotCQkuaW5wdXRzID0gMywKLQkJLmlucHV0ID0gewotCQkJeyAwLCAiQ29tcG9zaXRlIiB9LAotCQkJeyA3LCAiUy1WaWRlbyIgfSwKLQkJCXsgNSwgIkludGVybmFsL2NvbXAiIH0KLQkJfSwKLQkJLm5vcm1zID0gMywKLQkJLnR2biA9IHsKLQkJCSZmNTBzcXBpeGVsLAotCQkJJmY2MHNxcGl4ZWwsCi0JCQkmZjUwc3FwaXhlbAotCQl9LAotCQkuanBlZ19pbnQgPSBaUjM2MDU3X0lTUl9HSVJRMCwKLQkJLnZzeW5jX2ludCA9IFpSMzYwNTdfSVNSX0dJUlExLAotCQkuZ3BpbyA9IHsgMywgMCwgNiwgMSwgMiwgLTEsIDQsIDUgfSwKLQkJLmdwaW9fcG9sID0geyAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwIH0sCi0JCS5ncGNzID0geyAtMSwgMSB9LAotCQkudmZlX3BvbCA9IHsgMSwgMSwgMSwgMSwgMCwgMCwgMCwgMCB9LAotCQkuZ3dzX25vdF9jb25uZWN0ZWQgPSAwLAotCQkuaW5wdXRfbXV4ID0gMCwKLQkJLmluaXQgPSAmZGMxMHBsdXNfaW5pdCwKLQl9LCB7Ci0JCS50eXBlID0gREMzMCwKLQkJLm5hbWUgPSAiREMzMCIsCi0JCS5pMmNfZGVjb2RlciA9IEkyQ19EUklWRVJJRF9WUFgzMjIwLAotCQkuaTJjX2VuY29kZXIgPSBJMkNfRFJJVkVSSURfQURWNzE3NSwKLQkJLnZpZGVvX2NvZGVjID0gQ09ERUNfVFlQRV9aUjM2MDUwLAotCQkudmlkZW9fdmZlID0gQ09ERUNfVFlQRV9aUjM2MDE2LAotCi0JCS5pbnB1dHMgPSAzLAotCQkuaW5wdXQgPSB7Ci0JCQl7IDEsICJDb21wb3NpdGUiIH0sCi0JCQl7IDIsICJTLVZpZGVvIiB9LAotCQkJeyAwLCAiSW50ZXJuYWwvY29tcCIgfQotCQl9LAotCQkubm9ybXMgPSAzLAotCQkudHZuID0gewotCQkJJmY1MHNxcGl4ZWxfZGMxMCwKLQkJCSZmNjBzcXBpeGVsX2RjMTAsCi0JCQkmZjUwc3FwaXhlbF9kYzEwCi0JCX0sCi0JCS5qcGVnX2ludCA9IDAsCi0JCS52c3luY19pbnQgPSBaUjM2MDU3X0lTUl9HSVJRMSwKLQkJLmdwaW8gPSB7IDIsIDEsIC0xLCAzLCA3LCAwLCA0LCA1IH0sCi0JCS5ncGlvX3BvbCA9IHsgMCwgMCwgMCwgMSwgMCwgMCwgMCwgMCB9LAotCQkuZ3BjcyA9IHsgLTEsIDAgfSwKLQkJLnZmZV9wb2wgPSB7IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAgfSwKLQkJLmd3c19ub3RfY29ubmVjdGVkID0gMCwKLQkJLmlucHV0X211eCA9IDAsCi0JCS5pbml0ID0gJmRjMTBfaW5pdCwKLQl9LCB7Ci0JCS50eXBlID0gREMzMHBsdXMsCi0JCS5uYW1lID0gIkRDMzBwbHVzIiwKLQkJLnZlbmRvcl9pZCA9IFBDSV9WRU5ET1JfSURfTUlSTywKLQkJLmRldmljZV9pZCA9IFBDSV9ERVZJQ0VfSURfTUlST19EQzMwUExVUywKLQkJLmkyY19kZWNvZGVyID0gSTJDX0RSSVZFUklEX1ZQWDMyMjAsCi0JCS5pMmNfZW5jb2RlciA9IEkyQ19EUklWRVJJRF9BRFY3MTc1LAotCQkudmlkZW9fY29kZWMgPSBDT0RFQ19UWVBFX1pSMzYwNTAsCi0JCS52aWRlb192ZmUgPSBDT0RFQ19UWVBFX1pSMzYwMTYsCi0KLQkJLmlucHV0cyA9IDMsCi0JCS5pbnB1dCA9IHsKLQkJCXsgMSwgIkNvbXBvc2l0ZSIgfSwKLQkJCXsgMiwgIlMtVmlkZW8iIH0sCi0JCQl7IDAsICJJbnRlcm5hbC9jb21wIiB9Ci0JCX0sCi0JCS5ub3JtcyA9IDMsCi0JCS50dm4gPSB7Ci0JCQkmZjUwc3FwaXhlbF9kYzEwLAotCQkJJmY2MHNxcGl4ZWxfZGMxMCwKLQkJCSZmNTBzcXBpeGVsX2RjMTAKLQkJfSwKLQkJLmpwZWdfaW50ID0gMCwKLQkJLnZzeW5jX2ludCA9IFpSMzYwNTdfSVNSX0dJUlExLAotCQkuZ3BpbyA9IHsgMiwgMSwgLTEsIDMsIDcsIDAsIDQsIDUgfSwKLQkJLmdwaW9fcG9sID0geyAwLCAwLCAwLCAxLCAwLCAwLCAwLCAwIH0sCi0JCS5ncGNzID0geyAtMSwgMCB9LAotCQkudmZlX3BvbCA9IHsgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCB9LAotCQkuZ3dzX25vdF9jb25uZWN0ZWQgPSAwLAotCQkuaW5wdXRfbXV4ID0gMCwKLQkJLmluaXQgPSAmZGMxMF9pbml0LAotCX0sIHsKLQkJLnR5cGUgPSBMTUwzMywKLQkJLm5hbWUgPSAiTE1MMzMiLAotCQkuaTJjX2RlY29kZXIgPSBJMkNfRFJJVkVSSURfQlQ4MTksCi0JCS5pMmNfZW5jb2RlciA9IEkyQ19EUklWRVJJRF9CVDg1NiwKLQkJLnZpZGVvX2NvZGVjID0gQ09ERUNfVFlQRV9aUjM2MDYwLAotCi0JCS5pbnB1dHMgPSAyLAotCQkuaW5wdXQgPSB7Ci0JCQl7IDAsICJDb21wb3NpdGUiIH0sCi0JCQl7IDcsICJTLVZpZGVvIiB9Ci0JCX0sCi0JCS5ub3JtcyA9IDIsCi0JCS50dm4gPSB7Ci0JCQkmZjUwY2NpcjYwMV9sbWwzMywKLQkJCSZmNjBjY2lyNjAxX2xtbDMzLAotCQkJTlVMTAotCQl9LAotCQkuanBlZ19pbnQgPSBaUjM2MDU3X0lTUl9HSVJRMSwKLQkJLnZzeW5jX2ludCA9IFpSMzYwNTdfSVNSX0dJUlEwLAotCQkuZ3BpbyA9IHsgMSwgLTEsIDMsIDUsIDcsIC0xLCAtMSwgLTEgfSwKLQkJLmdwaW9fcG9sID0geyAwLCAwLCAwLCAwLCAxLCAwLCAwLCAwIH0sCi0JCS5ncGNzID0geyAzLCAxIH0sCi0JCS52ZmVfcG9sID0geyAxLCAxLCAwLCAwLCAwLCAxLCAwLCAwIH0sCi0JCS5nd3Nfbm90X2Nvbm5lY3RlZCA9IDEsCi0JCS5pbnB1dF9tdXggPSAwLAotCQkuaW5pdCA9ICZsbWwzM19pbml0LAotCX0sIHsKLQkJLnR5cGUgPSBMTUwzM1IxMCwKLQkJLm5hbWUgPSAiTE1MMzNSMTAiLAotCQkudmVuZG9yX2lkID0gUENJX1ZFTkRPUl9JRF9FTEVDVFJPTklDREVTSUdOR01CSCwKLQkJLmRldmljZV9pZCA9IFBDSV9ERVZJQ0VfSURfTE1MXzMzUjEwLAotCQkuaTJjX2RlY29kZXIgPSBJMkNfRFJJVkVSSURfU0FBNzExNCwKLQkJLmkyY19lbmNvZGVyID0gSTJDX0RSSVZFUklEX0FEVjcxNzAsCi0JCS52aWRlb19jb2RlYyA9IENPREVDX1RZUEVfWlIzNjA2MCwKLQotCQkuaW5wdXRzID0gMiwKLQkJLmlucHV0ID0gewotCQkJeyAwLCAiQ29tcG9zaXRlIiB9LAotCQkJeyA3LCAiUy1WaWRlbyIgfQotCQl9LAotCQkubm9ybXMgPSAyLAotCQkudHZuID0gewotCQkJJmY1MGNjaXI2MDFfbG0zM3IxMCwKLQkJCSZmNjBjY2lyNjAxX2xtMzNyMTAsCi0JCQlOVUxMCi0JCX0sCi0JCS5qcGVnX2ludCA9IFpSMzYwNTdfSVNSX0dJUlExLAotCQkudnN5bmNfaW50ID0gWlIzNjA1N19JU1JfR0lSUTAsCi0JCS5ncGlvID0geyAxLCAtMSwgMywgNSwgNywgLTEsIC0xLCAtMSB9LAotCQkuZ3Bpb19wb2wgPSB7IDAsIDAsIDAsIDAsIDEsIDAsIDAsIDAgfSwKLQkJLmdwY3MgPSB7IDMsIDEgfSwKLQkJLnZmZV9wb2wgPSB7IDEsIDEsIDAsIDAsIDAsIDEsIDAsIDAgfSwKLQkJLmd3c19ub3RfY29ubmVjdGVkID0gMSwKLQkJLmlucHV0X211eCA9IDAsCi0JCS5pbml0ID0gJmxtbDMzX2luaXQsCi0JfSwgewotCQkudHlwZSA9IEJVWiwKLQkJLm5hbWUgPSAiQnV6IiwKLQkJLnZlbmRvcl9pZCA9IFBDSV9WRU5ET1JfSURfSU9NRUdBLAotCQkuZGV2aWNlX2lkID0gUENJX0RFVklDRV9JRF9JT01FR0FfQlVaLAotCQkuaTJjX2RlY29kZXIgPSBJMkNfRFJJVkVSSURfU0FBNzExMUEsCi0JCS5pMmNfZW5jb2RlciA9IEkyQ19EUklWRVJJRF9TQUE3MTg1QiwKLQkJLnZpZGVvX2NvZGVjID0gQ09ERUNfVFlQRV9aUjM2MDYwLAotCi0JCS5pbnB1dHMgPSAyLAotCQkuaW5wdXQgPSB7Ci0JCQl7IDMsICJDb21wb3NpdGUiIH0sCi0JCQl7IDcsICJTLVZpZGVvIiB9Ci0JCX0sCi0JCS5ub3JtcyA9IDMsCi0JCS50dm4gPSB7Ci0JCQkmZjUwY2NpcjYwMSwKLQkJCSZmNjBjY2lyNjAxLAotCQkJJmY1MGNjaXI2MDEKLQkJfSwKLQkJLmpwZWdfaW50ID0gWlIzNjA1N19JU1JfR0lSUTEsCi0JCS52c3luY19pbnQgPSBaUjM2MDU3X0lTUl9HSVJRMCwKLQkJLmdwaW8gPSB7IDEsIC0xLCAzLCAtMSwgLTEsIC0xLCAtMSwgLTEgfSwKLQkJLmdwaW9fcG9sID0geyAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwIH0sCi0JCS5ncGNzID0geyAzLCAxIH0sCi0JCS52ZmVfcG9sID0geyAxLCAxLCAwLCAwLCAwLCAxLCAwLCAwIH0sCi0JCS5nd3Nfbm90X2Nvbm5lY3RlZCA9IDEsCi0JCS5pbnB1dF9tdXggPSAwLAotCQkuaW5pdCA9ICZidXpfaW5pdCwKLQl9LCB7Ci0JCS50eXBlID0gQVZTNkVZRVMsCi0JCS5uYW1lID0gIjYtRXllcyIsCi0JCS8qIEF2ZXJNZWRpYSBjaG9zZSBub3QgdG8gYnJhbmQgdGhlIDYtRXllcy4gVGh1cyBpdAotCQkgICBjYW4ndCBiZSBhdXRvZGV0ZWN0ZWQsIGFuZCByZXF1aXJlcyBjYXJkPXguICovCi0JCS52ZW5kb3JfaWQgPSAtMSwKLQkJLmRldmljZV9pZCA9IC0xLAotCQkuaTJjX2RlY29kZXIgPSBJMkNfRFJJVkVSSURfS1MwMTI3LAotCQkuaTJjX2VuY29kZXIgPSBJMkNfRFJJVkVSSURfQlQ4NjYsCi0JCS52aWRlb19jb2RlYyA9IENPREVDX1RZUEVfWlIzNjA2MCwKLQotCQkuaW5wdXRzID0gMTAsCi0JCS5pbnB1dCA9IHsKLQkJCXsgMCwgIkNvbXBvc2l0ZSAxIiB9LAotCQkJeyAxLCAiQ29tcG9zaXRlIDIiIH0sCi0JCQl7IDIsICJDb21wb3NpdGUgMyIgfSwKLQkJCXsgNCwgIkNvbXBvc2l0ZSA0IiB9LAotCQkJeyA1LCAiQ29tcG9zaXRlIDUiIH0sCi0JCQl7IDYsICJDb21wb3NpdGUgNiIgfSwKLQkJCXsgOCwgIlMtVmlkZW8gMSIgfSwKLQkJCXsgOSwgIlMtVmlkZW8gMiIgfSwKLQkJCXsxMCwgIlMtVmlkZW8gMyIgfSwKLQkJCXsxNSwgIllDYkNyIiB9Ci0JCX0sCi0JCS5ub3JtcyA9IDIsCi0JCS50dm4gPSB7Ci0JCQkmZjUwY2NpcjYwMV9hdnM2ZXllcywKLQkJCSZmNjBjY2lyNjAxX2F2czZleWVzLAotCQkJTlVMTAotCQl9LAotCQkuanBlZ19pbnQgPSBaUjM2MDU3X0lTUl9HSVJRMSwKLQkJLnZzeW5jX2ludCA9IFpSMzYwNTdfSVNSX0dJUlEwLAotCQkuZ3BpbyA9IHsgMSwgMCwgMywgLTEsIC0xLCAtMSwgLTEsIC0xIH0sLy8gVmFsaWRpdHkgdW5rbm93biAvU2FtCi0JCS5ncGlvX3BvbCA9IHsgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCB9LCAvLyBWYWxpZGl0eSB1bmtub3duIC9TYW0KLQkJLmdwY3MgPSB7IDMsIDEgfSwJCQkvLyBWYWxpZGl0eSB1bmtub3duIC9TYW0KLQkJLnZmZV9wb2wgPSB7IDEsIDAsIDAsIDAsIDAsIDEsIDAsIDAgfSwgIC8vIFZhbGlkaXR5IHVua25vd24gL1NhbQotCQkuZ3dzX25vdF9jb25uZWN0ZWQgPSAxLAotCQkuaW5wdXRfbXV4ID0gMSwKLQkJLmluaXQgPSAmYXZzNmV5ZXNfaW5pdCwKLQl9Ci0KLX07Ci0KLS8qCi0gKiBJMkMgZnVuY3Rpb25zCi0gKi8KLS8qIHNvZnR3YXJlIEkyQyBmdW5jdGlvbnMgKi8KLXN0YXRpYyBpbnQKLXpvcmFuX2kyY19nZXRzZGEgKHZvaWQgKmRhdGEpCi17Ci0Jc3RydWN0IHpvcmFuICp6ciA9IChzdHJ1Y3Qgem9yYW4gKikgZGF0YTsKLQotCXJldHVybiAoYnRyZWFkKFpSMzYwNTdfSTJDQlIpID4+IDEpICYgMTsKLX0KLQotc3RhdGljIGludAotem9yYW5faTJjX2dldHNjbCAodm9pZCAqZGF0YSkKLXsKLQlzdHJ1Y3Qgem9yYW4gKnpyID0gKHN0cnVjdCB6b3JhbiAqKSBkYXRhOwotCi0JcmV0dXJuIGJ0cmVhZChaUjM2MDU3X0kyQ0JSKSAmIDE7Ci19Ci0KLXN0YXRpYyB2b2lkCi16b3Jhbl9pMmNfc2V0c2RhICh2b2lkICpkYXRhLAotCQkgIGludCAgIHN0YXRlKQotewotCXN0cnVjdCB6b3JhbiAqenIgPSAoc3RydWN0IHpvcmFuICopIGRhdGE7Ci0KLQlpZiAoc3RhdGUpCi0JCXpyLT5pMmNiciB8PSAyOwotCWVsc2UKLQkJenItPmkyY2JyICY9IH4yOwotCWJ0d3JpdGUoenItPmkyY2JyLCBaUjM2MDU3X0kyQ0JSKTsKLX0KLQotc3RhdGljIHZvaWQKLXpvcmFuX2kyY19zZXRzY2wgKHZvaWQgKmRhdGEsCi0JCSAgaW50ICAgc3RhdGUpCi17Ci0Jc3RydWN0IHpvcmFuICp6ciA9IChzdHJ1Y3Qgem9yYW4gKikgZGF0YTsKLQotCWlmIChzdGF0ZSkKLQkJenItPmkyY2JyIHw9IDE7Ci0JZWxzZQotCQl6ci0+aTJjYnIgJj0gfjE7Ci0JYnR3cml0ZSh6ci0+aTJjYnIsIFpSMzYwNTdfSTJDQlIpOwotfQotCi1zdGF0aWMgaW50Ci16b3Jhbl9pMmNfY2xpZW50X3JlZ2lzdGVyIChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQotewotCXN0cnVjdCB6b3JhbiAqenIgPSAoc3RydWN0IHpvcmFuICopIGkyY19nZXRfYWRhcGRhdGEoY2xpZW50LT5hZGFwdGVyKTsKLQlpbnQgcmVzID0gMDsKLQotCWRwcmludGsoMiwKLQkJS0VSTl9ERUJVRyAiJXM6IGkyY19jbGllbnRfcmVnaXN0ZXIoKSAtIGRyaXZlciBpZCA9ICVkXG4iLAotCQlaUl9ERVZOQU1FKHpyKSwgY2xpZW50LT5kcml2ZXItPmlkKTsKLQotCW11dGV4X2xvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKLQotCWlmICh6ci0+dXNlciA+IDApIHsKLQkJLyogd2UncmUgYWxyZWFkeSBidXN5LCBzbyB3ZSBrZWVwIGEgcmVmZXJlbmNlIHRvCi0JCSAqIHRoZW0uLi4gQ291bGQgZG8gYSBsb3Qgb2Ygc3R1ZmYgaGVyZSwgYnV0IHRoaXMKLQkJICogaXMgZWFzaWVzdC4gKERpZCBJIGV2ZXIgbWVudGlvbiBJJ20gYSBsYXp5IGFzcz8pCi0JCSAqLwotCQlyZXMgPSAtRUJVU1k7Ci0JCWdvdG8gY2xpZW50cmVnX3VubG9ja19hbmRfcmV0dXJuOwotCX0KLQotCWlmIChjbGllbnQtPmRyaXZlci0+aWQgPT0genItPmNhcmQuaTJjX2RlY29kZXIpCi0JCXpyLT5kZWNvZGVyID0gY2xpZW50OwotCWVsc2UgaWYgKGNsaWVudC0+ZHJpdmVyLT5pZCA9PSB6ci0+Y2FyZC5pMmNfZW5jb2RlcikKLQkJenItPmVuY29kZXIgPSBjbGllbnQ7Ci0JZWxzZSB7Ci0JCXJlcyA9IC1FTk9ERVY7Ci0JCWdvdG8gY2xpZW50cmVnX3VubG9ja19hbmRfcmV0dXJuOwotCX0KLQotY2xpZW50cmVnX3VubG9ja19hbmRfcmV0dXJuOgotCW11dGV4X3VubG9jaygmenItPnJlc291cmNlX2xvY2spOwotCi0JcmV0dXJuIHJlczsKLX0KLQotc3RhdGljIGludAotem9yYW5faTJjX2NsaWVudF91bnJlZ2lzdGVyIChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQotewotCXN0cnVjdCB6b3JhbiAqenIgPSAoc3RydWN0IHpvcmFuICopIGkyY19nZXRfYWRhcGRhdGEoY2xpZW50LT5hZGFwdGVyKTsKLQlpbnQgcmVzID0gMDsKLQotCWRwcmludGsoMiwgS0VSTl9ERUJVRyAiJXM6IGkyY19jbGllbnRfdW5yZWdpc3RlcigpXG4iLCBaUl9ERVZOQU1FKHpyKSk7Ci0KLQltdXRleF9sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7Ci0KLQlpZiAoenItPnVzZXIgPiAwKSB7Ci0JCXJlcyA9IC1FQlVTWTsKLQkJZ290byBjbGllbnR1bnJlZ191bmxvY2tfYW5kX3JldHVybjsKLQl9Ci0KLQkvKiB0cnkgdG8gbG9jYXRlIGl0ICovCi0JaWYgKGNsaWVudCA9PSB6ci0+ZW5jb2RlcikgewotCQl6ci0+ZW5jb2RlciA9IE5VTEw7Ci0JfSBlbHNlIGlmIChjbGllbnQgPT0genItPmRlY29kZXIpIHsKLQkJenItPmRlY29kZXIgPSBOVUxMOwotCQlzbnByaW50ZihaUl9ERVZOQU1FKHpyKSwgc2l6ZW9mKFpSX0RFVk5BTUUoenIpKSwgIk1KUEVHWyVkXSIsIHpyLT5pZCk7Ci0JfQotY2xpZW50dW5yZWdfdW5sb2NrX2FuZF9yZXR1cm46Ci0JbXV0ZXhfdW5sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7Ci0JcmV0dXJuIHJlczsKLX0KLQotc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfYWxnb19iaXRfZGF0YSB6b3Jhbl9pMmNfYml0X2RhdGFfdGVtcGxhdGUgPSB7Ci0JLnNldHNkYSA9IHpvcmFuX2kyY19zZXRzZGEsCi0JLnNldHNjbCA9IHpvcmFuX2kyY19zZXRzY2wsCi0JLmdldHNkYSA9IHpvcmFuX2kyY19nZXRzZGEsCi0JLmdldHNjbCA9IHpvcmFuX2kyY19nZXRzY2wsCi0JLnVkZWxheSA9IDEwLAotCS50aW1lb3V0ID0gMTAwLAotfTsKLQotc3RhdGljIGludAotem9yYW5fcmVnaXN0ZXJfaTJjIChzdHJ1Y3Qgem9yYW4gKnpyKQotewotCW1lbWNweSgmenItPmkyY19hbGdvLCAmem9yYW5faTJjX2JpdF9kYXRhX3RlbXBsYXRlLAotCSAgICAgICBzaXplb2Yoc3RydWN0IGkyY19hbGdvX2JpdF9kYXRhKSk7Ci0JenItPmkyY19hbGdvLmRhdGEgPSB6cjsKLQl6ci0+aTJjX2FkYXB0ZXIuaWQgPSBJMkNfSFdfQl9aUjM2MDY3OwotCXpyLT5pMmNfYWRhcHRlci5jbGllbnRfcmVnaXN0ZXIgPSB6b3Jhbl9pMmNfY2xpZW50X3JlZ2lzdGVyOwotCXpyLT5pMmNfYWRhcHRlci5jbGllbnRfdW5yZWdpc3RlciA9IHpvcmFuX2kyY19jbGllbnRfdW5yZWdpc3RlcjsKLQlzdHJsY3B5KHpyLT5pMmNfYWRhcHRlci5uYW1lLCBaUl9ERVZOQU1FKHpyKSwKLQkJc2l6ZW9mKHpyLT5pMmNfYWRhcHRlci5uYW1lKSk7Ci0JaTJjX3NldF9hZGFwZGF0YSgmenItPmkyY19hZGFwdGVyLCB6cik7Ci0JenItPmkyY19hZGFwdGVyLmFsZ29fZGF0YSA9ICZ6ci0+aTJjX2FsZ287Ci0JenItPmkyY19hZGFwdGVyLmRldi5wYXJlbnQgPSAmenItPnBjaV9kZXYtPmRldjsKLQlyZXR1cm4gaTJjX2JpdF9hZGRfYnVzKCZ6ci0+aTJjX2FkYXB0ZXIpOwotfQotCi1zdGF0aWMgdm9pZAotem9yYW5fdW5yZWdpc3Rlcl9pMmMgKHN0cnVjdCB6b3JhbiAqenIpCi17Ci0JaTJjX2RlbF9hZGFwdGVyKCZ6ci0+aTJjX2FkYXB0ZXIpOwotfQotCi0vKiBDaGVjayBhIHpvcmFuX3BhcmFtcyBzdHJ1Y3QgZm9yIGNvcnJlY3RuZXNzLCBpbnNlcnQgZGVmYXVsdCBwYXJhbXMgKi8KLQotaW50Ci16b3Jhbl9jaGVja19qcGdfc2V0dGluZ3MgKHN0cnVjdCB6b3JhbiAgICAgICAgICAgICAgKnpyLAotCQkJICBzdHJ1Y3Qgem9yYW5fanBnX3NldHRpbmdzICpzZXR0aW5ncykKLXsKLQlpbnQgZXJyID0gMCwgZXJyMCA9IDA7Ci0KLQlkcHJpbnRrKDQsCi0JCUtFUk5fREVCVUcKLQkJIiVzOiBjaGVja19qcGdfc2V0dGluZ3MoKSAtIGRlYzogJWQsIEhkY206ICVkLCBWZGNtOiAlZCwgVGRjbTogJWRcbiIsCi0JCVpSX0RFVk5BTUUoenIpLCBzZXR0aW5ncy0+ZGVjaW1hdGlvbiwgc2V0dGluZ3MtPkhvckRjbSwKLQkJc2V0dGluZ3MtPlZlckRjbSwgc2V0dGluZ3MtPlRtcERjbSk7Ci0JZHByaW50ayg0LAotCQlLRVJOX0RFQlVHCi0JCSIlczogY2hlY2tfanBnX3NldHRpbmdzKCkgLSB4OiAlZCwgeTogJWQsIHc6ICVkLCB5OiAlZFxuIiwKLQkJWlJfREVWTkFNRSh6ciksIHNldHRpbmdzLT5pbWdfeCwgc2V0dGluZ3MtPmltZ195LAotCQlzZXR0aW5ncy0+aW1nX3dpZHRoLCBzZXR0aW5ncy0+aW1nX2hlaWdodCk7Ci0JLyogQ2hlY2sgZGVjaW1hdGlvbiwgc2V0IGRlZmF1bHQgdmFsdWVzIGZvciBkZWNpbWF0aW9uID0gMSwgMiwgNCAqLwotCXN3aXRjaCAoc2V0dGluZ3MtPmRlY2ltYXRpb24pIHsKLQljYXNlIDE6Ci0KLQkJc2V0dGluZ3MtPkhvckRjbSA9IDE7Ci0JCXNldHRpbmdzLT5WZXJEY20gPSAxOwotCQlzZXR0aW5ncy0+VG1wRGNtID0gMTsKLQkJc2V0dGluZ3MtPmZpZWxkX3Blcl9idWZmID0gMjsKLQkJc2V0dGluZ3MtPmltZ194ID0gMDsKLQkJc2V0dGluZ3MtPmltZ195ID0gMDsKLQkJc2V0dGluZ3MtPmltZ193aWR0aCA9IEJVWl9NQVhfV0lEVEg7Ci0JCXNldHRpbmdzLT5pbWdfaGVpZ2h0ID0gQlVaX01BWF9IRUlHSFQgLyAyOwotCQlicmVhazsKLQljYXNlIDI6Ci0KLQkJc2V0dGluZ3MtPkhvckRjbSA9IDI7Ci0JCXNldHRpbmdzLT5WZXJEY20gPSAxOwotCQlzZXR0aW5ncy0+VG1wRGNtID0gMjsKLQkJc2V0dGluZ3MtPmZpZWxkX3Blcl9idWZmID0gMTsKLQkJc2V0dGluZ3MtPmltZ194ID0gKEJVWl9NQVhfV0lEVEggPT0gNzIwKSA/IDggOiAwOwotCQlzZXR0aW5ncy0+aW1nX3kgPSAwOwotCQlzZXR0aW5ncy0+aW1nX3dpZHRoID0KLQkJICAgIChCVVpfTUFYX1dJRFRIID09IDcyMCkgPyA3MDQgOiBCVVpfTUFYX1dJRFRIOwotCQlzZXR0aW5ncy0+aW1nX2hlaWdodCA9IEJVWl9NQVhfSEVJR0hUIC8gMjsKLQkJYnJlYWs7Ci0JY2FzZSA0OgotCi0JCWlmICh6ci0+Y2FyZC50eXBlID09IERDMTBfbmV3KSB7Ci0JCQlkcHJpbnRrKDEsCi0JCQkJS0VSTl9ERUJVRwotCQkJCSIlczogY2hlY2tfanBnX3NldHRpbmdzKCkgLSBIRGVjIGJ5IDQgaXMgbm90IHN1cHBvcnRlZCBvbiB0aGUgREMxMFxuIiwKLQkJCQlaUl9ERVZOQU1FKHpyKSk7Ci0JCQllcnIwKys7Ci0JCQlicmVhazsKLQkJfQotCi0JCXNldHRpbmdzLT5Ib3JEY20gPSA0OwotCQlzZXR0aW5ncy0+VmVyRGNtID0gMjsKLQkJc2V0dGluZ3MtPlRtcERjbSA9IDI7Ci0JCXNldHRpbmdzLT5maWVsZF9wZXJfYnVmZiA9IDE7Ci0JCXNldHRpbmdzLT5pbWdfeCA9IChCVVpfTUFYX1dJRFRIID09IDcyMCkgPyA4IDogMDsKLQkJc2V0dGluZ3MtPmltZ195ID0gMDsKLQkJc2V0dGluZ3MtPmltZ193aWR0aCA9Ci0JCSAgICAoQlVaX01BWF9XSURUSCA9PSA3MjApID8gNzA0IDogQlVaX01BWF9XSURUSDsKLQkJc2V0dGluZ3MtPmltZ19oZWlnaHQgPSBCVVpfTUFYX0hFSUdIVCAvIDI7Ci0JCWJyZWFrOwotCWNhc2UgMDoKLQotCQkvKiBXZSBoYXZlIHRvIGNoZWNrIHRoZSBkYXRhIHRoZSB1c2VyIGhhcyBzZXQgKi8KLQotCQlpZiAoc2V0dGluZ3MtPkhvckRjbSAhPSAxICYmIHNldHRpbmdzLT5Ib3JEY20gIT0gMiAmJgotCQkgICAgKHpyLT5jYXJkLnR5cGUgPT0gREMxMF9uZXcgfHwgc2V0dGluZ3MtPkhvckRjbSAhPSA0KSkKLQkJCWVycjArKzsKLQkJaWYgKHNldHRpbmdzLT5WZXJEY20gIT0gMSAmJiBzZXR0aW5ncy0+VmVyRGNtICE9IDIpCi0JCQllcnIwKys7Ci0JCWlmIChzZXR0aW5ncy0+VG1wRGNtICE9IDEgJiYgc2V0dGluZ3MtPlRtcERjbSAhPSAyKQotCQkJZXJyMCsrOwotCQlpZiAoc2V0dGluZ3MtPmZpZWxkX3Blcl9idWZmICE9IDEgJiYKLQkJICAgIHNldHRpbmdzLT5maWVsZF9wZXJfYnVmZiAhPSAyKQotCQkJZXJyMCsrOwotCQlpZiAoc2V0dGluZ3MtPmltZ194IDwgMCkKLQkJCWVycjArKzsKLQkJaWYgKHNldHRpbmdzLT5pbWdfeSA8IDApCi0JCQllcnIwKys7Ci0JCWlmIChzZXR0aW5ncy0+aW1nX3dpZHRoIDwgMCkKLQkJCWVycjArKzsKLQkJaWYgKHNldHRpbmdzLT5pbWdfaGVpZ2h0IDwgMCkKLQkJCWVycjArKzsKLQkJaWYgKHNldHRpbmdzLT5pbWdfeCArIHNldHRpbmdzLT5pbWdfd2lkdGggPiBCVVpfTUFYX1dJRFRIKQotCQkJZXJyMCsrOwotCQlpZiAoc2V0dGluZ3MtPmltZ195ICsgc2V0dGluZ3MtPmltZ19oZWlnaHQgPgotCQkgICAgQlVaX01BWF9IRUlHSFQgLyAyKQotCQkJZXJyMCsrOwotCQlpZiAoc2V0dGluZ3MtPkhvckRjbSAmJiBzZXR0aW5ncy0+VmVyRGNtKSB7Ci0JCQlpZiAoc2V0dGluZ3MtPmltZ193aWR0aCAlCi0JCQkgICAgKDE2ICogc2V0dGluZ3MtPkhvckRjbSkgIT0gMCkKLQkJCQllcnIwKys7Ci0JCQlpZiAoc2V0dGluZ3MtPmltZ19oZWlnaHQgJQotCQkJICAgICg4ICogc2V0dGluZ3MtPlZlckRjbSkgIT0gMCkKLQkJCQllcnIwKys7Ci0JCX0KLQotCQlpZiAoZXJyMCkgewotCQkJZHByaW50aygxLAotCQkJCUtFUk5fRVJSCi0JCQkJIiVzOiBjaGVja19qcGdfc2V0dGluZ3MoKSAtIGVycm9yIGluIHBhcmFtcyBmb3IgZGVjaW1hdGlvbiA9IDBcbiIsCi0JCQkJWlJfREVWTkFNRSh6cikpOwotCQkJZXJyKys7Ci0JCX0KLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJZHByaW50aygxLAotCQkJS0VSTl9FUlIKLQkJCSIlczogY2hlY2tfanBnX3NldHRpbmdzKCkgLSBkZWNpbWF0aW9uID0gJWQsIG11c3QgYmUgMCwgMSwgMiBvciA0XG4iLAotCQkJWlJfREVWTkFNRSh6ciksIHNldHRpbmdzLT5kZWNpbWF0aW9uKTsKLQkJZXJyKys7Ci0JCWJyZWFrOwotCX0KLQotCWlmIChzZXR0aW5ncy0+anBnX2NvbXAucXVhbGl0eSA+IDEwMCkKLQkJc2V0dGluZ3MtPmpwZ19jb21wLnF1YWxpdHkgPSAxMDA7Ci0JaWYgKHNldHRpbmdzLT5qcGdfY29tcC5xdWFsaXR5IDwgNSkKLQkJc2V0dGluZ3MtPmpwZ19jb21wLnF1YWxpdHkgPSA1OwotCWlmIChzZXR0aW5ncy0+anBnX2NvbXAuQVBQbiA8IDApCi0JCXNldHRpbmdzLT5qcGdfY29tcC5BUFBuID0gMDsKLQlpZiAoc2V0dGluZ3MtPmpwZ19jb21wLkFQUG4gPiAxNSkKLQkJc2V0dGluZ3MtPmpwZ19jb21wLkFQUG4gPSAxNTsKLQlpZiAoc2V0dGluZ3MtPmpwZ19jb21wLkFQUF9sZW4gPCAwKQotCQlzZXR0aW5ncy0+anBnX2NvbXAuQVBQX2xlbiA9IDA7Ci0JaWYgKHNldHRpbmdzLT5qcGdfY29tcC5BUFBfbGVuID4gNjApCi0JCXNldHRpbmdzLT5qcGdfY29tcC5BUFBfbGVuID0gNjA7Ci0JaWYgKHNldHRpbmdzLT5qcGdfY29tcC5DT01fbGVuIDwgMCkKLQkJc2V0dGluZ3MtPmpwZ19jb21wLkNPTV9sZW4gPSAwOwotCWlmIChzZXR0aW5ncy0+anBnX2NvbXAuQ09NX2xlbiA+IDYwKQotCQlzZXR0aW5ncy0+anBnX2NvbXAuQ09NX2xlbiA9IDYwOwotCWlmIChlcnIpCi0JCXJldHVybiAtRUlOVkFMOwotCXJldHVybiAwOwotfQotCi12b2lkCi16b3Jhbl9vcGVuX2luaXRfcGFyYW1zIChzdHJ1Y3Qgem9yYW4gKnpyKQotewotCWludCBpOwotCi0JLyogVXNlciBtdXN0IGV4cGxpY2l0bHkgc2V0IGEgd2luZG93ICovCi0JenItPm92ZXJsYXlfc2V0dGluZ3MuaXNfc2V0ID0gMDsKLQl6ci0+b3ZlcmxheV9tYXNrID0gTlVMTDsKLQl6ci0+b3ZlcmxheV9hY3RpdmUgPSBaT1JBTl9GUkVFOwotCi0JenItPnY0bF9tZW1ncmFiX2FjdGl2ZSA9IDA7Ci0JenItPnY0bF9vdmVybGF5X2FjdGl2ZSA9IDA7Ci0JenItPnY0bF9ncmFiX2ZyYW1lID0gTk9fR1JBQl9BQ1RJVkU7Ci0JenItPnY0bF9ncmFiX3NlcSA9IDA7Ci0JenItPnY0bF9zZXR0aW5ncy53aWR0aCA9IDE5MjsKLQl6ci0+djRsX3NldHRpbmdzLmhlaWdodCA9IDE0NDsKLQl6ci0+djRsX3NldHRpbmdzLmZvcm1hdCA9ICZ6b3Jhbl9mb3JtYXRzWzddOwkvKiBZVVkyIC0gWVVWLTQ6MjoyIHBhY2tlZCAqLwotCXpyLT52NGxfc2V0dGluZ3MuYnl0ZXNwZXJsaW5lID0KLQkgICAgenItPnY0bF9zZXR0aW5ncy53aWR0aCAqCi0JICAgICgoenItPnY0bF9zZXR0aW5ncy5mb3JtYXQtPmRlcHRoICsgNykgLyA4KTsKLQotCS8qIERNQSByaW5nIHN0dWZmIGZvciBWNEwgKi8KLQl6ci0+djRsX3BlbmRfdGFpbCA9IDA7Ci0JenItPnY0bF9wZW5kX2hlYWQgPSAwOwotCXpyLT52NGxfc3luY190YWlsID0gMDsKLQl6ci0+djRsX2J1ZmZlcnMuYWN0aXZlID0gWk9SQU5fRlJFRTsKLQlmb3IgKGkgPSAwOyBpIDwgVklERU9fTUFYX0ZSQU1FOyBpKyspIHsKLQkJenItPnY0bF9idWZmZXJzLmJ1ZmZlcltpXS5zdGF0ZSA9IEJVWl9TVEFURV9VU0VSOwkvKiBub3RoaW5nIGdvaW5nIG9uICovCi0JfQotCXpyLT52NGxfYnVmZmVycy5hbGxvY2F0ZWQgPSAwOwotCi0JZm9yIChpID0gMDsgaSA8IEJVWl9NQVhfRlJBTUU7IGkrKykgewotCQl6ci0+anBnX2J1ZmZlcnMuYnVmZmVyW2ldLnN0YXRlID0gQlVaX1NUQVRFX1VTRVI7CS8qIG5vdGhpbmcgZ29pbmcgb24gKi8KLQl9Ci0JenItPmpwZ19idWZmZXJzLmFjdGl2ZSA9IFpPUkFOX0ZSRUU7Ci0JenItPmpwZ19idWZmZXJzLmFsbG9jYXRlZCA9IDA7Ci0JLyogU2V0IG5lY2Vzc2FyeSBwYXJhbXMgYW5kIGNhbGwgem9yYW5fY2hlY2tfanBnX3NldHRpbmdzIHRvIHNldCB0aGUgZGVmYXVsdHMgKi8KLQl6ci0+anBnX3NldHRpbmdzLmRlY2ltYXRpb24gPSAxOwotCXpyLT5qcGdfc2V0dGluZ3MuanBnX2NvbXAucXVhbGl0eSA9IDUwOwkvKiBkZWZhdWx0IGNvbXByZXNzaW9uIGZhY3RvciA4ICovCi0JaWYgKHpyLT5jYXJkLnR5cGUgIT0gQlVaKQotCQl6ci0+anBnX3NldHRpbmdzLm9kZF9ldmVuID0gMTsKLQllbHNlCi0JCXpyLT5qcGdfc2V0dGluZ3Mub2RkX2V2ZW4gPSAwOwotCXpyLT5qcGdfc2V0dGluZ3MuanBnX2NvbXAuQVBQbiA9IDA7Ci0JenItPmpwZ19zZXR0aW5ncy5qcGdfY29tcC5BUFBfbGVuID0gMDsJLyogTm8gQVBQbiBtYXJrZXIgKi8KLQltZW1zZXQoenItPmpwZ19zZXR0aW5ncy5qcGdfY29tcC5BUFBfZGF0YSwgMCwKLQkgICAgICAgc2l6ZW9mKHpyLT5qcGdfc2V0dGluZ3MuanBnX2NvbXAuQVBQX2RhdGEpKTsKLQl6ci0+anBnX3NldHRpbmdzLmpwZ19jb21wLkNPTV9sZW4gPSAwOwkvKiBObyBDT00gbWFya2VyICovCi0JbWVtc2V0KHpyLT5qcGdfc2V0dGluZ3MuanBnX2NvbXAuQ09NX2RhdGEsIDAsCi0JICAgICAgIHNpemVvZih6ci0+anBnX3NldHRpbmdzLmpwZ19jb21wLkNPTV9kYXRhKSk7Ci0JenItPmpwZ19zZXR0aW5ncy5qcGdfY29tcC5qcGVnX21hcmtlcnMgPQotCSAgICBKUEVHX01BUktFUl9ESFQgfCBKUEVHX01BUktFUl9EUVQ7Ci0JaSA9IHpvcmFuX2NoZWNrX2pwZ19zZXR0aW5ncyh6ciwgJnpyLT5qcGdfc2V0dGluZ3MpOwotCWlmIChpKQotCQlkcHJpbnRrKDEsCi0JCQlLRVJOX0VSUgotCQkJIiVzOiB6b3Jhbl9vcGVuX2luaXRfcGFyYW1zKCkgaW50ZXJuYWwgZXJyb3JcbiIsCi0JCQlaUl9ERVZOQU1FKHpyKSk7Ci0KLQljbGVhcl9pbnRlcnJ1cHRfY291bnRlcnMoenIpOwotCXpyLT50ZXN0aW5nID0gMDsKLX0KLQotc3RhdGljIHZvaWQgX19kZXZpbml0Ci10ZXN0X2ludGVycnVwdHMgKHN0cnVjdCB6b3JhbiAqenIpCi17Ci0JREVGSU5FX1dBSVQod2FpdCk7Ci0JaW50IHRpbWVvdXQsIGljcjsKLQotCWNsZWFyX2ludGVycnVwdF9jb3VudGVycyh6cik7Ci0KLQl6ci0+dGVzdGluZyA9IDE7Ci0JaWNyID0gYnRyZWFkKFpSMzYwNTdfSUNSKTsKLQlidHdyaXRlKDB4NzgwMDAwMDAgfCBaUjM2MDU3X0lDUl9JbnRQaW5FbiwgWlIzNjA1N19JQ1IpOwotCXByZXBhcmVfdG9fd2FpdCgmenItPnRlc3RfcSwgJndhaXQsIFRBU0tfSU5URVJSVVBUSUJMRSk7Ci0JdGltZW91dCA9IHNjaGVkdWxlX3RpbWVvdXQoSFopOwotCWZpbmlzaF93YWl0KCZ6ci0+dGVzdF9xLCAmd2FpdCk7Ci0JYnR3cml0ZSgwLCBaUjM2MDU3X0lDUik7Ci0JYnR3cml0ZSgweDc4MDAwMDAwLCBaUjM2MDU3X0lTUik7Ci0JenItPnRlc3RpbmcgPSAwOwotCWRwcmludGsoNSwgS0VSTl9JTkZPICIlczogVGVzdGluZyBpbnRlcnJ1cHRzLi4uXG4iLCBaUl9ERVZOQU1FKHpyKSk7Ci0JaWYgKHRpbWVvdXQpIHsKLQkJZHByaW50aygxLCAiOiB0aW1lIHNwZW50OiAlZFxuIiwgMSAqIEhaIC0gdGltZW91dCk7Ci0JfQotCWlmICh6cjM2MDY3X2RlYnVnID4gMSkKLQkJcHJpbnRfaW50ZXJydXB0cyh6cik7Ci0JYnR3cml0ZShpY3IsIFpSMzYwNTdfSUNSKTsKLX0KLQotc3RhdGljIGludCBfX2RldmluaXQKLXpyMzYwNTdfaW5pdCAoc3RydWN0IHpvcmFuICp6cikKLXsKLQlpbnQgaiwgZXJyOwotCWludCB0d28gPSAyOwotCWludCB6ZXJvID0gMDsKLQotCWRwcmludGsoMSwKLQkJS0VSTl9JTkZPCi0JCSIlczogenIzNjA1N19pbml0KCkgLSBpbml0aWFsaXppbmcgY2FyZFslZF0sIHpyPSVwXG4iLAotCQlaUl9ERVZOQU1FKHpyKSwgenItPmlkLCB6cik7Ci0KLQkvKiBkZWZhdWx0IHNldHVwIG9mIGFsbCBwYXJhbWV0ZXJzIHdoaWNoIHdpbGwgcGVyc2lzdCBiZXR3ZWVuIG9wZW5zICovCi0JenItPnVzZXIgPSAwOwotCi0JaW5pdF93YWl0cXVldWVfaGVhZCgmenItPnY0bF9jYXBxKTsKLQlpbml0X3dhaXRxdWV1ZV9oZWFkKCZ6ci0+anBnX2NhcHEpOwotCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnpyLT50ZXN0X3EpOwotCXpyLT5qcGdfYnVmZmVycy5hbGxvY2F0ZWQgPSAwOwotCXpyLT52NGxfYnVmZmVycy5hbGxvY2F0ZWQgPSAwOwotCi0JenItPmJ1ZmZlci5iYXNlID0gKHZvaWQgKikgdmlkbWVtOwotCXpyLT5idWZmZXIud2lkdGggPSAwOwotCXpyLT5idWZmZXIuaGVpZ2h0ID0gMDsKLQl6ci0+YnVmZmVyLmRlcHRoID0gMDsKLQl6ci0+YnVmZmVyLmJ5dGVzcGVybGluZSA9IDA7Ci0KLQkvKiBBdm9pZCBub25zZW5zZSBzZXR0aW5ncyBmcm9tIHVzZXIgZm9yIGRlZmF1bHQgaW5wdXQvbm9ybSAqLwotCWlmIChkZWZhdWx0X25vcm0gPCBWSURFT19NT0RFX1BBTCAmJgotCSAgICBkZWZhdWx0X25vcm0gPiBWSURFT19NT0RFX1NFQ0FNKQotCQlkZWZhdWx0X25vcm0gPSBWSURFT19NT0RFX1BBTDsKLQl6ci0+bm9ybSA9IGRlZmF1bHRfbm9ybTsKLQlpZiAoISh6ci0+dGltaW5nID0genItPmNhcmQudHZuW3pyLT5ub3JtXSkpIHsKLQkJZHByaW50aygxLAotCQkJS0VSTl9XQVJOSU5HCi0JCQkiJXM6IHpyMzYwNTdfaW5pdCgpIC0gZGVmYXVsdCBUViBzdGFuZGFyZCBub3Qgc3VwcG9ydGVkIGJ5IGhhcmR3YXJlLiBQQUwgd2lsbCBiZSB1c2VkLlxuIiwKLQkJCVpSX0RFVk5BTUUoenIpKTsKLQkJenItPm5vcm0gPSBWSURFT19NT0RFX1BBTDsKLQkJenItPnRpbWluZyA9IHpyLT5jYXJkLnR2blt6ci0+bm9ybV07Ci0JfQotCi0JaWYgKGRlZmF1bHRfaW5wdXQgPiB6ci0+Y2FyZC5pbnB1dHMtMSkgewotCQlkcHJpbnRrKDEsCi0JCQlLRVJOX1dBUk5JTkcKLQkJCSIlczogZGVmYXVsdF9pbnB1dCB2YWx1ZSAlZCBvdXQgb2YgcmFuZ2UgKDAtJWQpXG4iLAotCQkJWlJfREVWTkFNRSh6ciksIGRlZmF1bHRfaW5wdXQsIHpyLT5jYXJkLmlucHV0cy0xKTsKLQkJZGVmYXVsdF9pbnB1dCA9IDA7Ci0JfQotCXpyLT5pbnB1dCA9IGRlZmF1bHRfaW5wdXQ7Ci0KLQkvKiBTaG91bGQgdGhlIGZvbGxvd2luZyBiZSByZXNldCBhdCBldmVyeSBvcGVuID8gKi8KLQl6ci0+aHVlID0gMzI3Njg7Ci0JenItPmNvbnRyYXN0ID0gMzI3Njg7Ci0JenItPnNhdHVyYXRpb24gPSAzMjc2ODsKLQl6ci0+YnJpZ2h0bmVzcyA9IDMyNzY4OwotCi0JLyogZGVmYXVsdCBzZXR1cCAod2lsbCBiZSByZXBlYXRlZCBhdCBldmVyeSBvcGVuKSAqLwotCXpvcmFuX29wZW5faW5pdF9wYXJhbXMoenIpOwotCi0JLyogYWxsb2NhdGUgbWVtb3J5ICpiZWZvcmUqIGRvaW5nIGFueXRoaW5nIHRvIHRoZSBoYXJkd2FyZQotCSAqIGluIGNhc2UgYWxsb2NhdGlvbiBmYWlscyAqLwotCXpyLT5zdGF0X2NvbSA9IGt6YWxsb2MoQlVaX05VTV9TVEFUX0NPTSAqIDQsIEdGUF9LRVJORUwpOwotCXpyLT52aWRlb19kZXYgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgdmlkZW9fZGV2aWNlKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCF6ci0+c3RhdF9jb20gfHwgIXpyLT52aWRlb19kZXYpIHsKLQkJZHByaW50aygxLAotCQkJS0VSTl9FUlIKLQkJCSIlczogenIzNjA1N19pbml0KCkgLSBrbWFsbG9jIChTVEFUX0NPTSkgZmFpbGVkXG4iLAotCQkJWlJfREVWTkFNRSh6cikpOwotCQllcnIgPSAtRU5PTUVNOwotCQlnb3RvIGV4aXRfZnJlZTsKLQl9Ci0JZm9yIChqID0gMDsgaiA8IEJVWl9OVU1fU1RBVF9DT007IGorKykgewotCQl6ci0+c3RhdF9jb21bal0gPSBjcHVfdG9fbGUzMigxKTsgLyogbWFyayBhcyB1bmF2YWlsYWJsZSB0byB6cjM2MDU3ICovCi0JfQotCi0JLyoKLQkgKiAgIE5vdyBhZGQgdGhlIHRlbXBsYXRlIGFuZCByZWdpc3RlciB0aGUgZGV2aWNlIHVuaXQuCi0JICovCi0JbWVtY3B5KHpyLT52aWRlb19kZXYsICZ6b3Jhbl90ZW1wbGF0ZSwgc2l6ZW9mKHpvcmFuX3RlbXBsYXRlKSk7Ci0Jc3RyY3B5KHpyLT52aWRlb19kZXYtPm5hbWUsIFpSX0RFVk5BTUUoenIpKTsKLQllcnIgPSB2aWRlb19yZWdpc3Rlcl9kZXZpY2UoenItPnZpZGVvX2RldiwgVkZMX1RZUEVfR1JBQkJFUiwgdmlkZW9fbnJbenItPmlkXSk7Ci0JaWYgKGVyciA8IDApCi0JCWdvdG8gZXhpdF91bnJlZ2lzdGVyOwotCi0Jem9yYW5faW5pdF9oYXJkd2FyZSh6cik7Ci0JaWYgKHpyMzYwNjdfZGVidWcgPiAyKQotCQlkZXRlY3RfZ3Vlc3RfYWN0aXZpdHkoenIpOwotCXRlc3RfaW50ZXJydXB0cyh6cik7Ci0JaWYgKCFwYXNzX3Rocm91Z2gpIHsKLQkJZGVjb2Rlcl9jb21tYW5kKHpyLCBERUNPREVSX0VOQUJMRV9PVVRQVVQsICZ6ZXJvKTsKLQkJZW5jb2Rlcl9jb21tYW5kKHpyLCBFTkNPREVSX1NFVF9JTlBVVCwgJnR3byk7Ci0JfQotCi0JenItPnpvcmFuX3Byb2MgPSBOVUxMOwotCXpyLT5pbml0aWFsaXplZCA9IDE7Ci0JcmV0dXJuIDA7Ci0KLWV4aXRfdW5yZWdpc3RlcjoKLQl6b3Jhbl91bnJlZ2lzdGVyX2kyYyh6cik7Ci1leGl0X2ZyZWU6Ci0Ja2ZyZWUoenItPnN0YXRfY29tKTsKLQlrZnJlZSh6ci0+dmlkZW9fZGV2KTsKLQlyZXR1cm4gZXJyOwotfQotCi1zdGF0aWMgdm9pZAotem9yYW5fcmVsZWFzZSAoc3RydWN0IHpvcmFuICp6cikKLXsKLQlpZiAoIXpyLT5pbml0aWFsaXplZCkKLQkJZ290byBleGl0X2ZyZWU7Ci0JLyogdW5yZWdpc3RlciB2aWRlb2NvZGVjIGJ1cyAqLwotCWlmICh6ci0+Y29kZWMpIHsKLQkJc3RydWN0IHZpZGVvY29kZWNfbWFzdGVyICptYXN0ZXIgPSB6ci0+Y29kZWMtPm1hc3Rlcl9kYXRhOwotCi0JCXZpZGVvY29kZWNfZGV0YWNoKHpyLT5jb2RlYyk7Ci0JCWtmcmVlKG1hc3Rlcik7Ci0JfQotCWlmICh6ci0+dmZlKSB7Ci0JCXN0cnVjdCB2aWRlb2NvZGVjX21hc3RlciAqbWFzdGVyID0genItPnZmZS0+bWFzdGVyX2RhdGE7Ci0KLQkJdmlkZW9jb2RlY19kZXRhY2goenItPnZmZSk7Ci0JCWtmcmVlKG1hc3Rlcik7Ci0JfQotCi0JLyogdW5yZWdpc3RlciBpMmMgYnVzICovCi0Jem9yYW5fdW5yZWdpc3Rlcl9pMmMoenIpOwotCS8qIGRpc2FibGUgUENJIGJ1cy1tYXN0ZXJpbmcgKi8KLQl6b3Jhbl9zZXRfcGNpX21hc3Rlcih6ciwgMCk7Ci0JLyogcHV0IGNoaXAgaW50byByZXNldCAqLwotCWJ0d3JpdGUoMCwgWlIzNjA1N19TUEdQUENSKTsKLQlmcmVlX2lycSh6ci0+cGNpX2Rldi0+aXJxLCB6cik7Ci0JLyogdW5tYXAgYW5kIGZyZWUgbWVtb3J5ICovCi0Ja2ZyZWUoenItPnN0YXRfY29tKTsKLQl6b3Jhbl9wcm9jX2NsZWFudXAoenIpOwotCWlvdW5tYXAoenItPnpyMzYwNTdfbWVtKTsKLQlwY2lfZGlzYWJsZV9kZXZpY2UoenItPnBjaV9kZXYpOwotCXZpZGVvX3VucmVnaXN0ZXJfZGV2aWNlKHpyLT52aWRlb19kZXYpOwotZXhpdF9mcmVlOgotCWtmcmVlKHpyKTsKLX0KLQotdm9pZAotem9yYW5fdmRldl9yZWxlYXNlIChzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2ZGV2KQotewotCWtmcmVlKHZkZXYpOwotfQotCi1zdGF0aWMgc3RydWN0IHZpZGVvY29kZWNfbWFzdGVyICogX19kZXZpbml0Ci16b3Jhbl9zZXR1cF92aWRlb2NvZGVjIChzdHJ1Y3Qgem9yYW4gKnpyLAotCQkJaW50ICAgICAgICAgICB0eXBlKQotewotCXN0cnVjdCB2aWRlb2NvZGVjX21hc3RlciAqbSA9IE5VTEw7Ci0KLQltID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHZpZGVvY29kZWNfbWFzdGVyKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFtKSB7Ci0JCWRwcmludGsoMSwKLQkJCUtFUk5fRVJSCi0JCQkiJXM6IHpvcmFuX3NldHVwX3ZpZGVvY29kZWMoKSAtIG5vIG1lbW9yeVxuIiwKLQkJCVpSX0RFVk5BTUUoenIpKTsKLQkJcmV0dXJuIG07Ci0JfQotCi0JLyogbWFnaWMgYW5kIHR5cGUgYXJlIHVudXNlZCBmb3IgbWFzdGVyIHN0cnVjdC4gTWFrZXMgc2Vuc2Ugb25seSBhdAotCSAgIGNvZGVjIHN0cnVjdHMuCi0JICAgSW4gdGhlIHBhc3QsIC50eXBlIHdlcmUgaW5pdGlhbGl6ZWQgdG8gdGhlIG9sZCBWNEwxIC5oYXJkd2FyZQotCSAgIHZhbHVlLCBhcyBWSURfSEFSRFdBUkVfWlIzNjA2NwotCSAqLwotCW0tPm1hZ2ljID0gMEw7Ci0JbS0+dHlwZSA9IDA7Ci0KLQltLT5mbGFncyA9IENPREVDX0ZMQUdfRU5DT0RFUiB8IENPREVDX0ZMQUdfREVDT0RFUjsKLQlzdHJuY3B5KG0tPm5hbWUsIFpSX0RFVk5BTUUoenIpLCBzaXplb2YobS0+bmFtZSkpOwotCW0tPmRhdGEgPSB6cjsKLQotCXN3aXRjaCAodHlwZSkKLQl7Ci0JY2FzZSBDT0RFQ19UWVBFX1pSMzYwNjA6Ci0JCW0tPnJlYWRyZWcgPSB6cjM2MDYwX3JlYWQ7Ci0JCW0tPndyaXRlcmVnID0genIzNjA2MF93cml0ZTsKLQkJbS0+ZmxhZ3MgfD0gQ09ERUNfRkxBR19KUEVHIHwgQ09ERUNfRkxBR19WRkU7Ci0JCWJyZWFrOwotCWNhc2UgQ09ERUNfVFlQRV9aUjM2MDUwOgotCQltLT5yZWFkcmVnID0genIzNjA1MF9yZWFkOwotCQltLT53cml0ZXJlZyA9IHpyMzYwNTBfd3JpdGU7Ci0JCW0tPmZsYWdzIHw9IENPREVDX0ZMQUdfSlBFRzsKLQkJYnJlYWs7Ci0JY2FzZSBDT0RFQ19UWVBFX1pSMzYwMTY6Ci0JCW0tPnJlYWRyZWcgPSB6cjM2MDE2X3JlYWQ7Ci0JCW0tPndyaXRlcmVnID0genIzNjAxNl93cml0ZTsKLQkJbS0+ZmxhZ3MgfD0gQ09ERUNfRkxBR19WRkU7Ci0JCWJyZWFrOwotCX0KLQotCXJldHVybiBtOwotfQotCi0vKgotICogICBTY2FuIGZvciBhIEJ1eiBjYXJkIChhY3R1YWxseSBmb3IgdGhlIFBDSSBjb250cm9sbGVyIFpSMzYwNTcpLAotICogICByZXF1ZXN0IHRoZSBpcnEgYW5kIG1hcCB0aGUgaW8gbWVtb3J5Ci0gKi8KLXN0YXRpYyBpbnQgX19kZXZpbml0Ci1maW5kX3pyMzYwNTcgKHZvaWQpCi17Ci0JdW5zaWduZWQgY2hhciBsYXRlbmN5LCBuZWVkX2xhdGVuY3k7Ci0Jc3RydWN0IHpvcmFuICp6cjsKLQlzdHJ1Y3QgcGNpX2RldiAqZGV2ID0gTlVMTDsKLQlpbnQgcmVzdWx0OwotCXN0cnVjdCB2aWRlb2NvZGVjX21hc3RlciAqbWFzdGVyX3ZmZSA9IE5VTEw7Ci0Jc3RydWN0IHZpZGVvY29kZWNfbWFzdGVyICptYXN0ZXJfY29kZWMgPSBOVUxMOwotCWludCBjYXJkX251bTsKLQljaGFyICppMmNfZW5jX25hbWUsICppMmNfZGVjX25hbWUsICpjb2RlY19uYW1lLCAqdmZlX25hbWU7Ci0KLQl6b3Jhbl9udW0gPSAwOwotCXdoaWxlICh6b3Jhbl9udW0gPCBCVVpfTUFYICYmCi0JICAgICAgIChkZXYgPSBwY2lfZ2V0X2RldmljZShQQ0lfVkVORE9SX0lEX1pPUkFOLCBQQ0lfREVWSUNFX0lEX1pPUkFOXzM2MDU3LCBkZXYpKSAhPSBOVUxMKSB7Ci0JCWNhcmRfbnVtID0gY2FyZFt6b3Jhbl9udW1dOwotCQl6ciA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB6b3JhbiksIEdGUF9LRVJORUwpOwotCQlpZiAoIXpyKSB7Ci0JCQlkcHJpbnRrKDEsCi0JCQkJS0VSTl9FUlIKLQkJCQkiJXM6IGZpbmRfenIzNjA1NygpIC0ga3phbGxvYyBmYWlsZWRcbiIsCi0JCQkJWk9SQU5fTkFNRSk7Ci0JCQljb250aW51ZTsKLQkJfQotCQl6ci0+cGNpX2RldiA9IGRldjsKLQkJLy96ci0+enIzNjA1N19tZW0gPSBOVUxMOwotCQl6ci0+aWQgPSB6b3Jhbl9udW07Ci0JCXNucHJpbnRmKFpSX0RFVk5BTUUoenIpLCBzaXplb2YoWlJfREVWTkFNRSh6cikpLCAiTUpQRUdbJXVdIiwgenItPmlkKTsKLQkJc3Bpbl9sb2NrX2luaXQoJnpyLT5zcGlubG9jayk7Ci0JCW11dGV4X2luaXQoJnpyLT5yZXNvdXJjZV9sb2NrKTsKLQkJaWYgKHBjaV9lbmFibGVfZGV2aWNlKGRldikpCi0JCQlnb3RvIHpyX2ZyZWVfbWVtOwotCQl6ci0+enIzNjA1N19hZHIgPSBwY2lfcmVzb3VyY2Vfc3RhcnQoenItPnBjaV9kZXYsIDApOwotCQlwY2lfcmVhZF9jb25maWdfYnl0ZSh6ci0+cGNpX2RldiwgUENJX0NMQVNTX1JFVklTSU9OLAotCQkJCSAgICAgJnpyLT5yZXZpc2lvbik7Ci0JCWlmICh6ci0+cmV2aXNpb24gPCAyKSB7Ci0JCQlkcHJpbnRrKDEsCi0JCQkJS0VSTl9JTkZPCi0JCQkJIiVzOiBab3JhbiBaUjM2MDU3IChyZXYgJWQpIGlycTogJWQsIG1lbW9yeTogMHglMDh4LlxuIiwKLQkJCQlaUl9ERVZOQU1FKHpyKSwgenItPnJldmlzaW9uLCB6ci0+cGNpX2Rldi0+aXJxLAotCQkJCXpyLT56cjM2MDU3X2Fkcik7Ci0KLQkJCWlmIChjYXJkX251bSA9PSAtMSkgewotCQkJCWRwcmludGsoMSwKLQkJCQkJS0VSTl9FUlIKLQkJCQkJIiVzOiBmaW5kX3pyMzYwNTcoKSAtIG5vIGNhcmQgc3BlY2lmaWVkLCBwbGVhc2UgdXNlIHRoZSBjYXJkPVggaW5zbW9kIG9wdGlvblxuIiwKLQkJCQkJWlJfREVWTkFNRSh6cikpOwotCQkJCWdvdG8genJfZnJlZV9tZW07Ci0JCQl9Ci0JCX0gZWxzZSB7Ci0JCQlpbnQgaTsKLQkJCXVuc2lnbmVkIHNob3J0IHNzX3ZlbmRvciwgc3NfZGV2aWNlOwotCi0JCQlzc192ZW5kb3IgPSB6ci0+cGNpX2Rldi0+c3Vic3lzdGVtX3ZlbmRvcjsKLQkJCXNzX2RldmljZSA9IHpyLT5wY2lfZGV2LT5zdWJzeXN0ZW1fZGV2aWNlOwotCQkJZHByaW50aygxLAotCQkJCUtFUk5fSU5GTwotCQkJCSIlczogWm9yYW4gWlIzNjA2NyAocmV2ICVkKSBpcnE6ICVkLCBtZW1vcnk6IDB4JTA4eFxuIiwKLQkJCQlaUl9ERVZOQU1FKHpyKSwgenItPnJldmlzaW9uLCB6ci0+cGNpX2Rldi0+aXJxLAotCQkJCXpyLT56cjM2MDU3X2Fkcik7Ci0JCQlkcHJpbnRrKDEsCi0JCQkJS0VSTl9JTkZPCi0JCQkJIiVzOiBzdWJzeXN0ZW0gdmVuZG9yPTB4JTA0eCBpZD0weCUwNHhcbiIsCi0JCQkJWlJfREVWTkFNRSh6ciksIHNzX3ZlbmRvciwgc3NfZGV2aWNlKTsKLQkJCWlmIChjYXJkX251bSA9PSAtMSkgewotCQkJCWRwcmludGsoMywKLQkJCQkJS0VSTl9ERUJVRwotCQkJCQkiJXM6IGZpbmRfenIzNjA1NygpIC0gdHJ5aW5nIHRvIGF1dG9kZXRlY3QgY2FyZCB0eXBlXG4iLAotCQkJCQlaUl9ERVZOQU1FKHpyKSk7Ci0JCQkJZm9yIChpPTA7aTxOVU1fQ0FSRFM7aSsrKSB7Ci0JCQkJCWlmIChzc192ZW5kb3IgPT0gem9yYW5fY2FyZHNbaV0udmVuZG9yX2lkICYmCi0JCQkJCSAgICBzc19kZXZpY2UgPT0gem9yYW5fY2FyZHNbaV0uZGV2aWNlX2lkKSB7Ci0JCQkJCQlkcHJpbnRrKDMsCi0JCQkJCQkJS0VSTl9ERUJVRwotCQkJCQkJCSIlczogZmluZF96cjM2MDU3KCkgLSBjYXJkICVzIGRldGVjdGVkXG4iLAotCQkJCQkJCVpSX0RFVk5BTUUoenIpLAotCQkJCQkJCXpvcmFuX2NhcmRzW2ldLm5hbWUpOwotCQkJCQkJY2FyZF9udW0gPSBpOwotCQkJCQkJYnJlYWs7Ci0JCQkJCX0KLQkJCQl9Ci0JCQkJaWYgKGkgPT0gTlVNX0NBUkRTKSB7Ci0JCQkJCWRwcmludGsoMSwKLQkJCQkJCUtFUk5fRVJSCi0JCQkJCQkiJXM6IGZpbmRfenIzNjA1NygpIC0gdW5rbm93biBjYXJkXG4iLAotCQkJCQkJWlJfREVWTkFNRSh6cikpOwotCQkJCQlnb3RvIHpyX2ZyZWVfbWVtOwotCQkJCX0KLQkJCX0KLQkJfQotCi0JCWlmIChjYXJkX251bSA8IDAgfHwgY2FyZF9udW0gPj0gTlVNX0NBUkRTKSB7Ci0JCQlkcHJpbnRrKDIsCi0JCQkJS0VSTl9FUlIKLQkJCQkiJXM6IGZpbmRfenIzNjA1NygpIC0gaW52YWxpZCBjYXJkbnVtICVkXG4iLAotCQkJCVpSX0RFVk5BTUUoenIpLCBjYXJkX251bSk7Ci0JCQlnb3RvIHpyX2ZyZWVfbWVtOwotCQl9Ci0KLQkJLyogZXZlbiB0aG91Z2ggd2UgbWFrZSB0aGlzIGEgbm9uIHBvaW50ZXIgYW5kIHRodXMKLQkJICogdGhlb3JldGljYWxseSBhbGxvdyBmb3IgbWFraW5nIGNoYW5nZXMgdG8gdGhpcyBzdHJ1Y3QKLQkJICogb24gYSBwZXItaW5kaXZpZHVhbCBjYXJkIGJhc2lzIGF0IHJ1bnRpbWUsIHRoaXMgaXMKLQkJICogc3Ryb25nbHkgZGlzY291cmFnZWQuIFRoaXMgc3RydWN0dXJlIGlzIGludGVuZGVkIHRvCi0JCSAqIGtlZXAgZ2VuZXJhbCBjYXJkIGluZm9ybWF0aW9uLCBubyBzZXR0aW5ncyBvciBhbnl0aGluZyAqLwotCQl6ci0+Y2FyZCA9IHpvcmFuX2NhcmRzW2NhcmRfbnVtXTsKLQkJc25wcmludGYoWlJfREVWTkFNRSh6ciksIHNpemVvZihaUl9ERVZOQU1FKHpyKSksCi0JCQkgIiVzWyV1XSIsIHpyLT5jYXJkLm5hbWUsIHpyLT5pZCk7Ci0KLQkJenItPnpyMzYwNTdfbWVtID0gaW9yZW1hcF9ub2NhY2hlKHpyLT56cjM2MDU3X2FkciwgMHgxMDAwKTsKLQkJaWYgKCF6ci0+enIzNjA1N19tZW0pIHsKLQkJCWRwcmludGsoMSwKLQkJCQlLRVJOX0VSUgotCQkJCSIlczogZmluZF96cjM2MDU3KCkgLSBpb3JlbWFwIGZhaWxlZFxuIiwKLQkJCQlaUl9ERVZOQU1FKHpyKSk7Ci0JCQlnb3RvIHpyX2ZyZWVfbWVtOwotCQl9Ci0KLQkJcmVzdWx0ID0gcmVxdWVzdF9pcnEoenItPnBjaV9kZXYtPmlycSwKLQkJCQkgICAgIHpvcmFuX2lycSwKLQkJCQkgICAgIElSUUZfU0hBUkVEIHwgSVJRRl9ESVNBQkxFRCwKLQkJCQkgICAgIFpSX0RFVk5BTUUoenIpLAotCQkJCSAgICAgKHZvaWQgKikgenIpOwotCQlpZiAocmVzdWx0IDwgMCkgewotCQkJaWYgKHJlc3VsdCA9PSAtRUlOVkFMKSB7Ci0JCQkJZHByaW50aygxLAotCQkJCQlLRVJOX0VSUgotCQkJCQkiJXM6IGZpbmRfenIzNjA1NygpIC0gYmFkIGlycSBudW1iZXIgb3IgaGFuZGxlclxuIiwKLQkJCQkJWlJfREVWTkFNRSh6cikpOwotCQkJfSBlbHNlIGlmIChyZXN1bHQgPT0gLUVCVVNZKSB7Ci0JCQkJZHByaW50aygxLAotCQkJCQlLRVJOX0VSUgotCQkJCQkiJXM6IGZpbmRfenIzNjA1NygpIC0gSVJRICVkIGJ1c3ksIGNoYW5nZSB5b3VyIFBuUCBjb25maWcgaW4gQklPU1xuIiwKLQkJCQkJWlJfREVWTkFNRSh6ciksIHpyLT5wY2lfZGV2LT5pcnEpOwotCQkJfSBlbHNlIHsKLQkJCQlkcHJpbnRrKDEsCi0JCQkJCUtFUk5fRVJSCi0JCQkJCSIlczogZmluZF96cjM2MDU3KCkgLSBjYW4ndCBhc3NpZ24gaXJxLCBlcnJvciBjb2RlICVkXG4iLAotCQkJCQlaUl9ERVZOQU1FKHpyKSwgcmVzdWx0KTsKLQkJCX0KLQkJCWdvdG8genJfdW5tYXA7Ci0JCX0KLQotCQkvKiBzZXQgUENJIGxhdGVuY3kgdGltZXIgKi8KLQkJcGNpX3JlYWRfY29uZmlnX2J5dGUoenItPnBjaV9kZXYsIFBDSV9MQVRFTkNZX1RJTUVSLAotCQkJCSAgICAgJmxhdGVuY3kpOwotCQluZWVkX2xhdGVuY3kgPSB6ci0+cmV2aXNpb24gPiAxID8gMzIgOiA0ODsKLQkJaWYgKGxhdGVuY3kgIT0gbmVlZF9sYXRlbmN5KSB7Ci0JCQlkcHJpbnRrKDIsCi0JCQkJS0VSTl9JTkZPCi0JCQkJIiVzOiBDaGFuZ2luZyBQQ0kgbGF0ZW5jeSBmcm9tICVkIHRvICVkLlxuIiwKLQkJCQlaUl9ERVZOQU1FKHpyKSwgbGF0ZW5jeSwgbmVlZF9sYXRlbmN5KTsKLQkJCXBjaV93cml0ZV9jb25maWdfYnl0ZSh6ci0+cGNpX2RldiwKLQkJCQkJICAgICAgUENJX0xBVEVOQ1lfVElNRVIsCi0JCQkJCSAgICAgIG5lZWRfbGF0ZW5jeSk7Ci0JCX0KLQotCQl6cjM2MDU3X3Jlc3RhcnQoenIpOwotCQkvKiBpMmMgKi8KLQkJZHByaW50aygyLCBLRVJOX0lORk8gIiVzOiBJbml0aWFsaXppbmcgaTJjIGJ1cy4uLlxuIiwKLQkJCVpSX0RFVk5BTUUoenIpKTsKLQotCQkvKiBpMmMgZGVjb2RlciAqLwotCQlpZiAoZGVjb2Rlclt6ci0+aWRdICE9IC0xKSB7Ci0JCQlpMmNfZGVjX25hbWUgPSBpMmNpZF90b19tb2R1bGVuYW1lKGRlY29kZXJbenItPmlkXSk7Ci0JCQl6ci0+Y2FyZC5pMmNfZGVjb2RlciA9IGRlY29kZXJbenItPmlkXTsKLQkJfSBlbHNlIGlmICh6ci0+Y2FyZC5pMmNfZGVjb2RlciAhPSAwKSB7Ci0JCQlpMmNfZGVjX25hbWUgPQotCQkJCWkyY2lkX3RvX21vZHVsZW5hbWUoenItPmNhcmQuaTJjX2RlY29kZXIpOwotCQl9IGVsc2UgewotCQkJaTJjX2RlY19uYW1lID0gTlVMTDsKLQkJfQotCi0JCWlmIChpMmNfZGVjX25hbWUpIHsKLQkJCWlmICgocmVzdWx0ID0gcmVxdWVzdF9tb2R1bGUoaTJjX2RlY19uYW1lKSkgPCAwKSB7Ci0JCQkJZHByaW50aygxLAotCQkJCQlLRVJOX0VSUgotCQkJCQkiJXM6IGZhaWxlZCB0byBsb2FkIG1vZHVsZSAlczogJWRcbiIsCi0JCQkJCVpSX0RFVk5BTUUoenIpLCBpMmNfZGVjX25hbWUsIHJlc3VsdCk7Ci0JCQl9Ci0JCX0KLQotCQkvKiBpMmMgZW5jb2RlciAqLwotCQlpZiAoZW5jb2Rlclt6ci0+aWRdICE9IC0xKSB7Ci0JCQlpMmNfZW5jX25hbWUgPSBpMmNpZF90b19tb2R1bGVuYW1lKGVuY29kZXJbenItPmlkXSk7Ci0JCQl6ci0+Y2FyZC5pMmNfZW5jb2RlciA9IGVuY29kZXJbenItPmlkXTsKLQkJfSBlbHNlIGlmICh6ci0+Y2FyZC5pMmNfZW5jb2RlciAhPSAwKSB7Ci0JCQlpMmNfZW5jX25hbWUgPQotCQkJCWkyY2lkX3RvX21vZHVsZW5hbWUoenItPmNhcmQuaTJjX2VuY29kZXIpOwotCQl9IGVsc2UgewotCQkJaTJjX2VuY19uYW1lID0gTlVMTDsKLQkJfQotCi0JCWlmIChpMmNfZW5jX25hbWUpIHsKLQkJCWlmICgocmVzdWx0ID0gcmVxdWVzdF9tb2R1bGUoaTJjX2VuY19uYW1lKSkgPCAwKSB7Ci0JCQkJZHByaW50aygxLAotCQkJCQlLRVJOX0VSUgotCQkJCQkiJXM6IGZhaWxlZCB0byBsb2FkIG1vZHVsZSAlczogJWRcbiIsCi0JCQkJCVpSX0RFVk5BTUUoenIpLCBpMmNfZW5jX25hbWUsIHJlc3VsdCk7Ci0JCQl9Ci0JCX0KLQotCQlpZiAoem9yYW5fcmVnaXN0ZXJfaTJjKHpyKSA8IDApIHsKLQkJCWRwcmludGsoMSwKLQkJCQlLRVJOX0VSUgotCQkJCSIlczogZmluZF96cjM2MDU3KCkgLSBjYW4ndCBpbml0aWFsaXplIGkyYyBidXNcbiIsCi0JCQkJWlJfREVWTkFNRSh6cikpOwotCQkJZ290byB6cl9mcmVlX2lycTsKLQkJfQotCi0JCWRwcmludGsoMiwKLQkJCUtFUk5fSU5GTyAiJXM6IEluaXRpYWxpemluZyB2aWRlb2NvZGVjIGJ1cy4uLlxuIiwKLQkJCVpSX0RFVk5BTUUoenIpKTsKLQotCQlpZiAoenItPmNhcmQudmlkZW9fY29kZWMgIT0gMCAmJgotCQkgICAgKGNvZGVjX25hbWUgPQotCQkgICAgIGNvZGVjaWRfdG9fbW9kdWxlbmFtZSh6ci0+Y2FyZC52aWRlb19jb2RlYykpICE9IE5VTEwpIHsKLQkJCWlmICgocmVzdWx0ID0gcmVxdWVzdF9tb2R1bGUoY29kZWNfbmFtZSkpIDwgMCkgewotCQkJCWRwcmludGsoMSwKLQkJCQkJS0VSTl9FUlIKLQkJCQkJIiVzOiBmYWlsZWQgdG8gbG9hZCBtb2R1bGVzICVzOiAlZFxuIiwKLQkJCQkJWlJfREVWTkFNRSh6ciksIGNvZGVjX25hbWUsIHJlc3VsdCk7Ci0JCQl9Ci0JCX0KLQkJaWYgKHpyLT5jYXJkLnZpZGVvX3ZmZSAhPSAwICYmCi0JCSAgICAodmZlX25hbWUgPQotCQkgICAgIGNvZGVjaWRfdG9fbW9kdWxlbmFtZSh6ci0+Y2FyZC52aWRlb192ZmUpKSAhPSBOVUxMKSB7Ci0JCQlpZiAoKHJlc3VsdCA9IHJlcXVlc3RfbW9kdWxlKHZmZV9uYW1lKSkgPCAwKSB7Ci0JCQkJZHByaW50aygxLAotCQkJCQlLRVJOX0VSUgotCQkJCQkiJXM6IGZhaWxlZCB0byBsb2FkIG1vZHVsZXMgJXM6ICVkXG4iLAotCQkJCQlaUl9ERVZOQU1FKHpyKSwgdmZlX25hbWUsIHJlc3VsdCk7Ci0JCQl9Ci0JCX0KLQotCQkvKiByZXNldCBKUEVHIGNvZGVjICovCi0JCWpwZWdfY29kZWNfc2xlZXAoenIsIDEpOwotCQlqcGVnX2NvZGVjX3Jlc2V0KHpyKTsKLQkJLyogdmlkZW8gYnVzIGVuYWJsZWQgKi8KLQkJLyogZGlzcGxheSBjb2RlYyByZXZpc2lvbiAqLwotCQlpZiAoenItPmNhcmQudmlkZW9fY29kZWMgIT0gMCkgewotCQkJbWFzdGVyX2NvZGVjID0gem9yYW5fc2V0dXBfdmlkZW9jb2RlYyh6ciwKLQkJCQkJCQkgICAgICB6ci0+Y2FyZC52aWRlb19jb2RlYyk7Ci0JCQlpZiAoIW1hc3Rlcl9jb2RlYykKLQkJCQlnb3RvIHpyX3VucmVnX2kyYzsKLQkJCXpyLT5jb2RlYyA9IHZpZGVvY29kZWNfYXR0YWNoKG1hc3Rlcl9jb2RlYyk7Ci0JCQlpZiAoIXpyLT5jb2RlYykgewotCQkJCWRwcmludGsoMSwKLQkJCQkJS0VSTl9FUlIKLQkJCQkJIiVzOiBmaW5kX3pyMzYwNTcoKSAtIG5vIGNvZGVjIGZvdW5kXG4iLAotCQkJCQlaUl9ERVZOQU1FKHpyKSk7Ci0JCQkJZ290byB6cl9mcmVlX2NvZGVjOwotCQkJfQotCQkJaWYgKHpyLT5jb2RlYy0+dHlwZSAhPSB6ci0+Y2FyZC52aWRlb19jb2RlYykgewotCQkJCWRwcmludGsoMSwKLQkJCQkJS0VSTl9FUlIKLQkJCQkJIiVzOiBmaW5kX3pyMzYwNTcoKSAtIHdyb25nIGNvZGVjXG4iLAotCQkJCQlaUl9ERVZOQU1FKHpyKSk7Ci0JCQkJZ290byB6cl9kZXRhY2hfY29kZWM7Ci0JCQl9Ci0JCX0KLQkJaWYgKHpyLT5jYXJkLnZpZGVvX3ZmZSAhPSAwKSB7Ci0JCQltYXN0ZXJfdmZlID0gem9yYW5fc2V0dXBfdmlkZW9jb2RlYyh6ciwKLQkJCQkJCQkgICAgenItPmNhcmQudmlkZW9fdmZlKTsKLQkJCWlmICghbWFzdGVyX3ZmZSkKLQkJCQlnb3RvIHpyX2RldGFjaF9jb2RlYzsKLQkJCXpyLT52ZmUgPSB2aWRlb2NvZGVjX2F0dGFjaChtYXN0ZXJfdmZlKTsKLQkJCWlmICghenItPnZmZSkgewotCQkJCWRwcmludGsoMSwKLQkJCQkJS0VSTl9FUlIKLQkJCQkJIiVzOiBmaW5kX3pyMzYwNTcoKSAtIG5vIFZGRSBmb3VuZFxuIiwKLQkJCQkJWlJfREVWTkFNRSh6cikpOwotCQkJCWdvdG8genJfZnJlZV92ZmU7Ci0JCQl9Ci0JCQlpZiAoenItPnZmZS0+dHlwZSAhPSB6ci0+Y2FyZC52aWRlb192ZmUpIHsKLQkJCQlkcHJpbnRrKDEsCi0JCQkJCUtFUk5fRVJSCi0JCQkJCSIlczogZmluZF96cjM2MDU3KCkgPSB3cm9uZyBWRkVcbiIsCi0JCQkJCVpSX0RFVk5BTUUoenIpKTsKLQkJCQlnb3RvIHpyX2RldGFjaF92ZmU7Ci0JCQl9Ci0JCX0KLQkJLyogU3VjY2VzcyBzbyBrZWVwIHRoZSBwY2lfZGV2IHJlZmVyZW5jZWQgKi8KLQkJcGNpX2Rldl9nZXQoenItPnBjaV9kZXYpOwotCQl6b3Jhblt6b3Jhbl9udW0rK10gPSB6cjsKLQkJY29udGludWU7Ci0KLQkJLy8gSW5pdCBlcnJvcnMKLQkgICAgICB6cl9kZXRhY2hfdmZlOgotCQl2aWRlb2NvZGVjX2RldGFjaCh6ci0+dmZlKTsKLQkgICAgICB6cl9mcmVlX3ZmZToKLQkJa2ZyZWUobWFzdGVyX3ZmZSk7Ci0JICAgICAgenJfZGV0YWNoX2NvZGVjOgotCQl2aWRlb2NvZGVjX2RldGFjaCh6ci0+Y29kZWMpOwotCSAgICAgIHpyX2ZyZWVfY29kZWM6Ci0JCWtmcmVlKG1hc3Rlcl9jb2RlYyk7Ci0JICAgICAgenJfdW5yZWdfaTJjOgotCQl6b3Jhbl91bnJlZ2lzdGVyX2kyYyh6cik7Ci0JICAgICAgenJfZnJlZV9pcnE6Ci0JCWJ0d3JpdGUoMCwgWlIzNjA1N19TUEdQUENSKTsKLQkJZnJlZV9pcnEoenItPnBjaV9kZXYtPmlycSwgenIpOwotCSAgICAgIHpyX3VubWFwOgotCQlpb3VubWFwKHpyLT56cjM2MDU3X21lbSk7Ci0JICAgICAgenJfZnJlZV9tZW06Ci0JCWtmcmVlKHpyKTsKLQkJY29udGludWU7Ci0JfQotCWlmIChkZXYpCS8qIENsZWFuIHVwIHJlZiBjb3VudCBvbiBlYXJseSBleGl0ICovCi0JCXBjaV9kZXZfcHV0KGRldik7Ci0KLQlpZiAoem9yYW5fbnVtID09IDApIHsKLQkJZHByaW50aygxLCBLRVJOX0lORk8gIk5vIGtub3duIE1KUEVHIGNhcmRzIGZvdW5kLlxuIik7Ci0JfQotCXJldHVybiB6b3Jhbl9udW07Ci19Ci0KLXN0YXRpYyBpbnQgX19pbml0Ci1pbml0X2RjMTBfY2FyZHMgKHZvaWQpCi17Ci0JaW50IGk7Ci0KLQltZW1zZXQoem9yYW4sIDAsIHNpemVvZih6b3JhbikpOwotCXByaW50ayhLRVJOX0lORk8gIlpvcmFuIE1KUEVHIGJvYXJkIGRyaXZlciB2ZXJzaW9uICVkLiVkLiVkXG4iLAotCSAgICAgICBNQUpPUl9WRVJTSU9OLCBNSU5PUl9WRVJTSU9OLCBSRUxFQVNFX1ZFUlNJT04pOwotCi0JLyogTG9vayBmb3IgY2FyZHMgKi8KLQlpZiAoZmluZF96cjM2MDU3KCkgPCAwKSB7Ci0JCXJldHVybiAtRUlPOwotCX0KLQlpZiAoem9yYW5fbnVtID09IDApCi0JCXJldHVybiAtRU5PREVWOwotCWRwcmludGsoMSwgS0VSTl9JTkZPICIlczogJWQgY2FyZChzKSBmb3VuZFxuIiwgWk9SQU5fTkFNRSwKLQkJem9yYW5fbnVtKTsKLQkvKiBjaGVjayB0aGUgcGFyYW1ldGVycyB3ZSBoYXZlIGJlZW4gZ2l2ZW4sIGFkanVzdCBpZiBuZWNlc3NhcnkgKi8KLQlpZiAodjRsX25idWZzIDwgMikKLQkJdjRsX25idWZzID0gMjsKLQlpZiAodjRsX25idWZzID4gVklERU9fTUFYX0ZSQU1FKQotCQl2NGxfbmJ1ZnMgPSBWSURFT19NQVhfRlJBTUU7Ci0JLyogVGhlIHVzZXIgc3BlY2ZpZXMgdGhlIGluIEtCLCB3ZSB3YW50IHRoZW0gaW4gYnl0ZQotCSAqIChhbmQgcGFnZSBhbGlnbmVkKSAqLwotCXY0bF9idWZzaXplID0gUEFHRV9BTElHTih2NGxfYnVmc2l6ZSAqIDEwMjQpOwotCWlmICh2NGxfYnVmc2l6ZSA8IDMyNzY4KQotCQl2NGxfYnVmc2l6ZSA9IDMyNzY4OwotCS8qIDIgTUIgaXMgYXJiaXRyYXJ5IGJ1dCBzdWZmaWNpZW50IGZvciB0aGUgbWF4aW11bSBwb3NzaWJsZSBpbWFnZXMgKi8KLQlpZiAodjRsX2J1ZnNpemUgPiAyMDQ4ICogMTAyNCkKLQkJdjRsX2J1ZnNpemUgPSAyMDQ4ICogMTAyNDsKLQlpZiAoanBnX25idWZzIDwgNCkKLQkJanBnX25idWZzID0gNDsKLQlpZiAoanBnX25idWZzID4gQlVaX01BWF9GUkFNRSkKLQkJanBnX25idWZzID0gQlVaX01BWF9GUkFNRTsKLQlqcGdfYnVmc2l6ZSA9IFBBR0VfQUxJR04oanBnX2J1ZnNpemUgKiAxMDI0KTsKLQlpZiAoanBnX2J1ZnNpemUgPCA4MTkyKQotCQlqcGdfYnVmc2l6ZSA9IDgxOTI7Ci0JaWYgKGpwZ19idWZzaXplID4gKDUxMiAqIDEwMjQpKQotCQlqcGdfYnVmc2l6ZSA9IDUxMiAqIDEwMjQ7Ci0JLyogVXNlIHBhcmFtZXRlciBmb3IgdmlkbWVtIG9yIHRyeSB0byBmaW5kIGEgdmlkZW8gY2FyZCAqLwotCWlmICh2aWRtZW0pIHsKLQkJZHByaW50aygxLAotCQkJS0VSTl9JTkZPCi0JCQkiJXM6IFVzaW5nIHN1cHBsaWVkIHZpZGVvIG1lbW9yeSBiYXNlIGFkZHJlc3MgQCAweCVseFxuIiwKLQkJCVpPUkFOX05BTUUsIHZpZG1lbSk7Ci0JfQotCi0JLyogcmFuZG9tIG5vbnNlbnNlICovCi0JZHByaW50ayg2LCBLRVJOX0RFQlVHICJKb3R0aSBpcyBlZW4gaGVsZCFcbiIpOwotCi0JLyogc29tZSBtYWluYm9hcmRzIG1pZ2h0IG5vdCBkbyBQQ0ktUENJIGRhdGEgdHJhbnNmZXIgd2VsbCAqLwotCWlmIChwY2lfcGNpX3Byb2JsZW1zICYgKFBDSVBDSV9GQUlMfFBDSUFHUF9GQUlMfFBDSVBDSV9BTElNQUdJSykpIHsKLQkJZHByaW50aygxLAotCQkJS0VSTl9XQVJOSU5HCi0JCQkiJXM6IGNoaXBzZXQgZG9lcyBub3Qgc3VwcG9ydCByZWxpYWJsZSBQQ0ktUENJIERNQVxuIiwKLQkJCVpPUkFOX05BTUUpOwotCX0KLQotCS8qIHRha2UgY2FyZSBvZiBOYXRvbWEgY2hpcHNldCBhbmQgYSByZXZpc2lvbiAxIHpyMzYwNTcgKi8KLQlmb3IgKGkgPSAwOyBpIDwgem9yYW5fbnVtOyBpKyspIHsKLQkJc3RydWN0IHpvcmFuICp6ciA9IHpvcmFuW2ldOwotCi0JCWlmICgocGNpX3BjaV9wcm9ibGVtcyAmIFBDSVBDSV9OQVRPTUEpICYmIHpyLT5yZXZpc2lvbiA8PSAxKSB7Ci0JCQl6ci0+anBnX2J1ZmZlcnMubmVlZF9jb250aWd1b3VzID0gMTsKLQkJCWRwcmludGsoMSwKLQkJCQlLRVJOX0lORk8KLQkJCQkiJXM6IFpSMzYwNTcvTmF0b21hIGJ1ZywgbWF4LiBidWZmZXIgc2l6ZSBpcyAxMjhLXG4iLAotCQkJCVpSX0RFVk5BTUUoenIpKTsKLQkJfQotCi0JCWlmICh6cjM2MDU3X2luaXQoenIpIDwgMCkgewotCQkJZm9yIChpID0gMDsgaSA8IHpvcmFuX251bTsgaSsrKQotCQkJCXpvcmFuX3JlbGVhc2Uoem9yYW5baV0pOwotCQkJcmV0dXJuIC1FSU87Ci0JCX0KLQkJem9yYW5fcHJvY19pbml0KHpyKTsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgX19leGl0Ci11bmxvYWRfZGMxMF9jYXJkcyAodm9pZCkKLXsKLQlpbnQgaTsKLQotCWZvciAoaSA9IDA7IGkgPCB6b3Jhbl9udW07IGkrKykKLQkJem9yYW5fcmVsZWFzZSh6b3JhbltpXSk7Ci19Ci0KLW1vZHVsZV9pbml0KGluaXRfZGMxMF9jYXJkcyk7Ci1tb2R1bGVfZXhpdCh1bmxvYWRfZGMxMF9jYXJkcyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3pvcmFuX2RldmljZS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby96b3Jhbl9kZXZpY2UuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODhkMzY5Ny4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3pvcmFuX2RldmljZS5jCisrKyAvZGV2L251bGwKQEAgLTEsMTc0OSArMCwwIEBACi0vKgotICogWm9yYW4genIzNjA1Ny96cjM2MDY3IFBDSSBjb250cm9sbGVyIGRyaXZlciwgZm9yIHRoZQotICogUGlubmFjbGUvTWlybyBEQzEwL0RDMTArL0RDMzAvREMzMCssIElvbWVnYSBCdXosIExpbnV4Ci0gKiBNZWRpYSBMYWJzIExNTDMzL0xNTDMzUjEwLgotICoKLSAqIFRoaXMgcGFydCBoYW5kbGVzIGRldmljZSBhY2Nlc3MgKFBDSS9JMkMvY29kZWMvLi4uKQotICoKLSAqIENvcHlyaWdodCAoQykgMjAwMCBTZXJndWVpIE1pcmlkb25vdiA8bWlyc2V2QGNpY2VzZS5teD4KLSAqCi0gKiBDdXJyZW50bHkgbWFpbnRhaW5lZCBieToKLSAqICAgUm9uYWxkIEJ1bHRqZSAgICA8cmJ1bHRqZUByb25hbGQuYml0ZnJlYWsubmV0PgotICogICBMYXVyZW50IFBpbmNoYXJ0IDxsYXVyZW50LnBpbmNoYXJ0QHNreW5ldC5iZT4KLSAqICAgTWFpbGluZ2xpc3QgICAgICA8bWpwZWctdXNlcnNAbGlzdHMuc2YubmV0PgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgotICovCi0KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KLQotI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgotI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KLSNpbmNsdWRlIDxsaW51eC9pMmMuaD4KLSNpbmNsdWRlIDxsaW51eC9pMmMtYWxnby1iaXQuaD4KLSNpbmNsdWRlIDxsaW51eC92aWRlb2Rldi5oPgotI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+Ci0jaW5jbHVkZSA8bGludXgvc2VtLmg+Ci0KLSNpbmNsdWRlIDxsaW51eC9wY2kuaD4KLSNpbmNsdWRlIDxsaW51eC92aWRlb19kZWNvZGVyLmg+Ci0jaW5jbHVkZSA8bGludXgvdmlkZW9fZW5jb2Rlci5oPgotI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Ci0jaW5jbHVkZSA8bGludXgvd2FpdC5oPgotCi0jaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgotI2luY2x1ZGUgPGFzbS9pby5oPgotCi0jaW5jbHVkZSAidmlkZW9jb2RlYy5oIgotI2luY2x1ZGUgInpvcmFuLmgiCi0jaW5jbHVkZSAiem9yYW5fZGV2aWNlLmgiCi0jaW5jbHVkZSAiem9yYW5fY2FyZC5oIgotCi0jZGVmaW5lIElSUV9NQVNLICggWlIzNjA1N19JU1JfR0lSUTAgfCBcCi0JCSAgIFpSMzYwNTdfSVNSX0dJUlExIHwgXAotCQkgICBaUjM2MDU3X0lTUl9KUEVHUmVwSVJRICkKLQotZXh0ZXJuIGNvbnN0IHN0cnVjdCB6b3Jhbl9mb3JtYXQgem9yYW5fZm9ybWF0c1tdOwotCi1zdGF0aWMgaW50IGxtbDMzZHBhdGg7CQkvKiBkZWZhdWx0ID0gMAotCQkJCSAqIDEgd2lsbCB1c2UgZGlnaXRhbCBwYXRoIGluIGNhcHR1cmUKLQkJCQkgKiBtb2RlIGluc3RlYWQgb2YgYW5hbG9nLiBJdCBjYW4gYmUKLQkJCQkgKiB1c2VkIGZvciBwaWN0dXJlIGFkanVzdG1lbnRzIHVzaW5nCi0JCQkJICogdG9vbCBsaWtlIHhhd3R2IHdoaWxlIHdhdGNoaW5nIGltYWdlCi0JCQkJICogb24gVFYgbW9uaXRvciBjb25uZWN0ZWQgdG8gdGhlIG91dHB1dC4KLQkJCQkgKiBIb3dldmVyLCBkdWUgdG8gYWJzZW5jZSBvZiA3NSBPaG0KLQkJCQkgKiBsb2FkIG9uIEJ0ODE5IGlucHV0LCB0aGVyZSB3aWxsIGJlCi0JCQkJICogc29tZSBpbWFnZSBpbXBlcmZlY3Rpb25zICovCi0KLW1vZHVsZV9wYXJhbShsbWwzM2RwYXRoLCBib29sLCAwNjQ0KTsKLU1PRFVMRV9QQVJNX0RFU0MobG1sMzNkcGF0aCwKLQkJICJVc2UgZGlnaXRhbCBwYXRoIGNhcHR1cmUgbW9kZSAob24gTE1MMzMgY2FyZHMpIik7Ci0KLXN0YXRpYyB2b2lkCi16cjM2MDU3X2luaXRfdmZlIChzdHJ1Y3Qgem9yYW4gKnpyKTsKLQotLyoKLSAqIEdlbmVyYWwgUHVycG9zZSBJL08gYW5kIEd1ZXN0IGJ1cyBhY2Nlc3MKLSAqLwotCi0vKgotICogVGhpcyBpcyBhIGJpdCB0cmlja3kuIFdoZW4gYSBib2FyZCBsYWNrcyBhIEdQSU8gZnVuY3Rpb24sIHRoZSBjb3JyZXNwb25kaW5nCi0gKiBHUElPIGJpdCBudW1iZXIgaW4gdGhlIGNhcmRfaW5mbyBzdHJ1Y3R1cmUgaXMgc2V0IHRvIDAuCi0gKi8KLQotdm9pZAotR1BJTyAoc3RydWN0IHpvcmFuICp6ciwKLSAgICAgIGludCAgICAgICAgICAgYml0LAotICAgICAgdW5zaWduZWQgaW50ICB2YWx1ZSkKLXsKLQl1MzIgcmVnOwotCXUzMiBtYXNrOwotCi0JLyogTWFrZSBzdXJlIHRoZSBiaXQgbnVtYmVyIGlzIGxlZ2FsCi0JICogQSBiaXQgbnVtYmVyIG9mIC0xIChsYWNraW5nKSBnaXZlcyBhIG1hc2sgb2YgMCwKLQkgKiBtYWtpbmcgaXQgaGFybWxlc3MgKi8KLQltYXNrID0gKDEgPDwgKDI0ICsgYml0KSkgJiAweGZmMDAwMDAwOwotCXJlZyA9IGJ0cmVhZChaUjM2MDU3X0dQUEdDUjEpICYgfm1hc2s7Ci0JaWYgKHZhbHVlKSB7Ci0JCXJlZyB8PSBtYXNrOwotCX0KLQlidHdyaXRlKHJlZywgWlIzNjA1N19HUFBHQ1IxKTsKLQl1ZGVsYXkoMSk7Ci19Ci0KLS8qCi0gKiBXYWl0IHRpbCBwb3N0IG9mZmljZSBpcyBubyBsb25nZXIgYnVzeQotICovCi0KLWludAotcG9zdF9vZmZpY2Vfd2FpdCAoc3RydWN0IHpvcmFuICp6cikKLXsKLQl1MzIgcG9yOwotCi0vLyAgICAgIHdoaWxlICgoKHBvciA9IGJ0cmVhZChaUjM2MDU3X1BPUikpICYgKFpSMzYwNTdfUE9SX1BPUGVuIHwgWlIzNjA1N19QT1JfUE9UaW1lKSkgPT0gWlIzNjA1N19QT1JfUE9QZW4pIHsKLQl3aGlsZSAoKHBvciA9IGJ0cmVhZChaUjM2MDU3X1BPUikpICYgWlIzNjA1N19QT1JfUE9QZW4pIHsKLQkJLyogd2FpdCBmb3Igc29tZXRoaW5nIHRvIGhhcHBlbiAqLwotCX0KLQlpZiAoKHBvciAmIFpSMzYwNTdfUE9SX1BPVGltZSkgJiYgIXpyLT5jYXJkLmd3c19ub3RfY29ubmVjdGVkKSB7Ci0JCS8qIEluIExNTDMzL0JVWiBcR1dTIGxpbmUgaXMgbm90IGNvbm5lY3RlZCwgc28gaXQgaGFzIGFsd2F5cyB0aW1lb3V0IHNldCAqLwotCQlkcHJpbnRrKDEsIEtFUk5fSU5GTyAiJXM6IHBvcCB0aW1lb3V0ICUwOHhcbiIsIFpSX0RFVk5BTUUoenIpLAotCQkJcG9yKTsKLQkJcmV0dXJuIC0xOwotCX0KLQotCXJldHVybiAwOwotfQotCi1pbnQKLXBvc3Rfb2ZmaWNlX3dyaXRlIChzdHJ1Y3Qgem9yYW4gKnpyLAotCQkgICB1bnNpZ25lZCBpbnQgIGd1ZXN0LAotCQkgICB1bnNpZ25lZCBpbnQgIHJlZywKLQkJICAgdW5zaWduZWQgaW50ICB2YWx1ZSkKLXsKLQl1MzIgcG9yOwotCi0JcG9yID0KLQkgICAgWlIzNjA1N19QT1JfUE9EaXIgfCBaUjM2MDU3X1BPUl9QT1RpbWUgfCAoKGd1ZXN0ICYgNykgPDwgMjApIHwKLQkgICAgKChyZWcgJiA3KSA8PCAxNikgfCAodmFsdWUgJiAweEZGKTsKLQlidHdyaXRlKHBvciwgWlIzNjA1N19QT1IpOwotCi0JcmV0dXJuIHBvc3Rfb2ZmaWNlX3dhaXQoenIpOwotfQotCi1pbnQKLXBvc3Rfb2ZmaWNlX3JlYWQgKHN0cnVjdCB6b3JhbiAqenIsCi0JCSAgdW5zaWduZWQgaW50ICBndWVzdCwKLQkJICB1bnNpZ25lZCBpbnQgIHJlZykKLXsKLQl1MzIgcG9yOwotCi0JcG9yID0gWlIzNjA1N19QT1JfUE9UaW1lIHwgKChndWVzdCAmIDcpIDw8IDIwKSB8ICgocmVnICYgNykgPDwgMTYpOwotCWJ0d3JpdGUocG9yLCBaUjM2MDU3X1BPUik7Ci0JaWYgKHBvc3Rfb2ZmaWNlX3dhaXQoenIpIDwgMCkgewotCQlyZXR1cm4gLTE7Ci0JfQotCi0JcmV0dXJuIGJ0cmVhZChaUjM2MDU3X1BPUikgJiAweEZGOwotfQotCi0vKgotICogZGV0ZWN0IGd1ZXN0cwotICovCi0KLXN0YXRpYyB2b2lkCi1kdW1wX2d1ZXN0cyAoc3RydWN0IHpvcmFuICp6cikKLXsKLQlpZiAoenIzNjA2N19kZWJ1ZyA+IDIpIHsKLQkJaW50IGksIGd1ZXN0WzhdOwotCi0JCWZvciAoaSA9IDE7IGkgPCA4OyBpKyspIHsJLy8gRG9uJ3QgcmVhZCBqcGVnIGNvZGVjIGhlcmUKLQkJCWd1ZXN0W2ldID0gcG9zdF9vZmZpY2VfcmVhZCh6ciwgaSwgMCk7Ci0JCX0KLQotCQlwcmludGsoS0VSTl9JTkZPICIlczogR3Vlc3RzOiIsIFpSX0RFVk5BTUUoenIpKTsKLQotCQlmb3IgKGkgPSAxOyBpIDwgODsgaSsrKSB7Ci0JCQlwcmludGsoIiAweCUwMngiLCBndWVzdFtpXSk7Ci0JCX0KLQkJcHJpbnRrKCJcbiIpOwotCX0KLX0KLQotc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nCi1nZXRfdGltZSAodm9pZCkKLXsKLQlzdHJ1Y3QgdGltZXZhbCB0djsKLQotCWRvX2dldHRpbWVvZmRheSgmdHYpOwotCXJldHVybiAoMTAwMDAwMCAqIHR2LnR2X3NlYyArIHR2LnR2X3VzZWMpOwotfQotCi12b2lkCi1kZXRlY3RfZ3Vlc3RfYWN0aXZpdHkgKHN0cnVjdCB6b3JhbiAqenIpCi17Ci0JaW50IHRpbWVvdXQsIGksIGosIHJlcywgZ3Vlc3RbOF0sIGd1ZXN0MFs4XSwgY2hhbmdlWzhdWzNdOwotCXVuc2lnbmVkIGxvbmcgdDAsIHQxOwotCi0JZHVtcF9ndWVzdHMoenIpOwotCXByaW50ayhLRVJOX0lORk8gIiVzOiBEZXRlY3RpbmcgZ3Vlc3RzIGFjdGl2aXR5LCBwbGVhc2Ugd2FpdC4uLlxuIiwKLQkgICAgICAgWlJfREVWTkFNRSh6cikpOwotCWZvciAoaSA9IDE7IGkgPCA4OyBpKyspIHsJLy8gRG9uJ3QgcmVhZCBqcGVnIGNvZGVjIGhlcmUKLQkJZ3Vlc3QwW2ldID0gZ3Vlc3RbaV0gPSBwb3N0X29mZmljZV9yZWFkKHpyLCBpLCAwKTsKLQl9Ci0KLQl0aW1lb3V0ID0gMDsKLQlqID0gMDsKLQl0MCA9IGdldF90aW1lKCk7Ci0Jd2hpbGUgKHRpbWVvdXQgPCAxMDAwMCkgewotCQl1ZGVsYXkoMTApOwotCQl0aW1lb3V0Kys7Ci0JCWZvciAoaSA9IDE7IChpIDwgOCkgJiYgKGogPCA4KTsgaSsrKSB7Ci0JCQlyZXMgPSBwb3N0X29mZmljZV9yZWFkKHpyLCBpLCAwKTsKLQkJCWlmIChyZXMgIT0gZ3Vlc3RbaV0pIHsKLQkJCQl0MSA9IGdldF90aW1lKCk7Ci0JCQkJY2hhbmdlW2pdWzBdID0gKHQxIC0gdDApOwotCQkJCXQwID0gdDE7Ci0JCQkJY2hhbmdlW2pdWzFdID0gaTsKLQkJCQljaGFuZ2Vbal1bMl0gPSByZXM7Ci0JCQkJaisrOwotCQkJCWd1ZXN0W2ldID0gcmVzOwotCQkJfQotCQl9Ci0JCWlmIChqID49IDgpCi0JCQlicmVhazsKLQl9Ci0JcHJpbnRrKEtFUk5fSU5GTyAiJXM6IEd1ZXN0czoiLCBaUl9ERVZOQU1FKHpyKSk7Ci0KLQlmb3IgKGkgPSAxOyBpIDwgODsgaSsrKSB7Ci0JCXByaW50aygiIDB4JTAyeCIsIGd1ZXN0MFtpXSk7Ci0JfQotCXByaW50aygiXG4iKTsKLQlpZiAoaiA9PSAwKSB7Ci0JCXByaW50ayhLRVJOX0lORk8gIiVzOiBObyBhY3Rpdml0eSBkZXRlY3RlZC5cbiIsIFpSX0RFVk5BTUUoenIpKTsKLQkJcmV0dXJuOwotCX0KLQlmb3IgKGkgPSAwOyBpIDwgajsgaSsrKSB7Ci0JCXByaW50ayhLRVJOX0lORk8gIiVzOiAlNmQ6ICVkID0+IDB4JTAyeFxuIiwgWlJfREVWTkFNRSh6ciksCi0JCSAgICAgICBjaGFuZ2VbaV1bMF0sIGNoYW5nZVtpXVsxXSwgY2hhbmdlW2ldWzJdKTsKLQl9Ci19Ci0KLS8qCi0gKiBKUEVHIENvZGVjIGFjY2VzcwotICovCi0KLXZvaWQKLWpwZWdfY29kZWNfc2xlZXAgKHN0cnVjdCB6b3JhbiAqenIsCi0JCSAgaW50ICAgICAgICAgICBzbGVlcCkKLXsKLQlHUElPKHpyLCB6ci0+Y2FyZC5ncGlvW1pSX0dQSU9fSlBFR19TTEVFUF0sICFzbGVlcCk7Ci0JaWYgKCFzbGVlcCkgewotCQlkcHJpbnRrKDMsCi0JCQlLRVJOX0RFQlVHCi0JCQkiJXM6IGpwZWdfY29kZWNfc2xlZXAoKSAtIHdha2UgR1BJTz0weCUwOHhcbiIsCi0JCQlaUl9ERVZOQU1FKHpyKSwgYnRyZWFkKFpSMzYwNTdfR1BQR0NSMSkpOwotCQl1ZGVsYXkoNTAwKTsKLQl9IGVsc2UgewotCQlkcHJpbnRrKDMsCi0JCQlLRVJOX0RFQlVHCi0JCQkiJXM6IGpwZWdfY29kZWNfc2xlZXAoKSAtIHNsZWVwIEdQSU89MHglMDh4XG4iLAotCQkJWlJfREVWTkFNRSh6ciksIGJ0cmVhZChaUjM2MDU3X0dQUEdDUjEpKTsKLQkJdWRlbGF5KDIpOwotCX0KLX0KLQotaW50Ci1qcGVnX2NvZGVjX3Jlc2V0IChzdHJ1Y3Qgem9yYW4gKnpyKQotewotCS8qIFRha2UgdGhlIGNvZGVjIG91dCBvZiBzbGVlcCAqLwotCWpwZWdfY29kZWNfc2xlZXAoenIsIDApOwotCi0JaWYgKHpyLT5jYXJkLmdwY3NbR1BDU19KUEVHX1JFU0VUXSAhPSAweGZmKSB7Ci0JCXBvc3Rfb2ZmaWNlX3dyaXRlKHpyLCB6ci0+Y2FyZC5ncGNzW0dQQ1NfSlBFR19SRVNFVF0sIDAsCi0JCQkJICAwKTsKLQkJdWRlbGF5KDIpOwotCX0gZWxzZSB7Ci0JCUdQSU8oenIsIHpyLT5jYXJkLmdwaW9bWlJfR1BJT19KUEVHX1JFU0VUXSwgMCk7Ci0JCXVkZWxheSgyKTsKLQkJR1BJTyh6ciwgenItPmNhcmQuZ3Bpb1taUl9HUElPX0pQRUdfUkVTRVRdLCAxKTsKLQkJdWRlbGF5KDIpOwotCX0KLQotCXJldHVybiAwOwotfQotCi0vKgotICogICBTZXQgdGhlIHJlZ2lzdGVycyBmb3IgdGhlIHNpemUgd2UgaGF2ZSBzcGVjaWZpZWQuIERvbid0IGJvdGhlcgotICogICB0cnlpbmcgdG8gdW5kZXJzdGFuZCB0aGlzIHdpdGhvdXQgdGhlIFpSMzYwNTcgbWFudWFsIGluIGZyb250IG9mCi0gKiAgIHlvdSBbQUNdLgotICoKLSAqICAgUFM6IFRoZSBtYW51YWwgaXMgZnJlZSBmb3IgZG93bmxvYWQgaW4gLnBkZiBmb3JtYXQgZnJvbQotICogICB3d3cuem9yYW4uY29tIC0gbmljZWx5IGRvbmUgdGhvc2UgZm9sa3MuCi0gKi8KLQotc3RhdGljIHZvaWQKLXpyMzYwNTdfYWRqdXN0X3ZmZSAoc3RydWN0IHpvcmFuICAgICAgICAgICp6ciwKLQkJICAgIGVudW0gem9yYW5fY29kZWNfbW9kZSAgbW9kZSkKLXsKLQl1MzIgcmVnOwotCi0Jc3dpdGNoIChtb2RlKSB7Ci0JY2FzZSBCVVpfTU9ERV9NT1RJT05fREVDT01QUkVTUzoKLQkJYnRhbmQoflpSMzYwNTdfVkZFU1BGUl9FeHRGbCwgWlIzNjA1N19WRkVTUEZSKTsKLQkJcmVnID0gYnRyZWFkKFpSMzYwNTdfVkZFSENSKTsKLQkJaWYgKChyZWcgJiAoMSA8PCAxMCkpICYmIHpyLT5jYXJkLnR5cGUgIT0gTE1MMzNSMTApIHsKLQkJCXJlZyArPSAoKDEgPDwgMTApIHwgMSk7Ci0JCX0KLQkJYnR3cml0ZShyZWcsIFpSMzYwNTdfVkZFSENSKTsKLQkJYnJlYWs7Ci0JY2FzZSBCVVpfTU9ERV9NT1RJT05fQ09NUFJFU1M6Ci0JY2FzZSBCVVpfTU9ERV9JRExFOgotCWRlZmF1bHQ6Ci0JCWlmICh6ci0+bm9ybSA9PSBWSURFT19NT0RFX05UU0MgfHwKLQkJICAgICh6ci0+Y2FyZC50eXBlID09IExNTDMzUjEwICYmCi0JCSAgICAgenItPm5vcm0gPT0gVklERU9fTU9ERV9QQUwpKQotCQkJYnRhbmQoflpSMzYwNTdfVkZFU1BGUl9FeHRGbCwgWlIzNjA1N19WRkVTUEZSKTsKLQkJZWxzZQotCQkJYnRvcihaUjM2MDU3X1ZGRVNQRlJfRXh0RmwsIFpSMzYwNTdfVkZFU1BGUik7Ci0JCXJlZyA9IGJ0cmVhZChaUjM2MDU3X1ZGRUhDUik7Ci0JCWlmICghKHJlZyAmICgxIDw8IDEwKSkgJiYgenItPmNhcmQudHlwZSAhPSBMTUwzM1IxMCkgewotCQkJcmVnIC09ICgoMSA8PCAxMCkgfCAxKTsKLQkJfQotCQlidHdyaXRlKHJlZywgWlIzNjA1N19WRkVIQ1IpOwotCQlicmVhazsKLQl9Ci19Ci0KLS8qCi0gKiBzZXQgZ2VvbWV0cnkKLSAqLwotCi1zdGF0aWMgdm9pZAotenIzNjA1N19zZXRfdmZlIChzdHJ1Y3Qgem9yYW4gICAgICAgICAgICAgICp6ciwKLQkJIGludCAgICAgICAgICAgICAgICAgICAgICAgIHZpZGVvX3dpZHRoLAotCQkgaW50ICAgICAgICAgICAgICAgICAgICAgICAgdmlkZW9faGVpZ2h0LAotCQkgY29uc3Qgc3RydWN0IHpvcmFuX2Zvcm1hdCAqZm9ybWF0KQotewotCXN0cnVjdCB0dm5vcm0gKnR2bjsKLQl1bnNpZ25lZCBIU3RhcnQsIEhFbmQsIFZTdGFydCwgVkVuZDsKLQl1bnNpZ25lZCBEaXNwTW9kZTsKLQl1bnNpZ25lZCBWaWRXaW5XaWQsIFZpZFdpbkh0OwotCXVuc2lnbmVkIGhjcm9wMSwgaGNyb3AyLCB2Y3JvcDEsIHZjcm9wMjsKLQl1bnNpZ25lZCBXYSwgV2UsIEhhLCBIZTsKLQl1bnNpZ25lZCBYLCBZLCBIb3JEY20sIFZlckRjbTsKLQl1MzIgcmVnOwotCXVuc2lnbmVkIG1hc2tfbGluZV9zaXplOwotCi0JdHZuID0genItPnRpbWluZzsKLQotCVdhID0gdHZuLT5XYTsKLQlIYSA9IHR2bi0+SGE7Ci0KLQlkcHJpbnRrKDIsIEtFUk5fSU5GTyAiJXM6IHNldF92ZmUoKSAtIHdpZHRoID0gJWQsIGhlaWdodCA9ICVkXG4iLAotCQlaUl9ERVZOQU1FKHpyKSwgdmlkZW9fd2lkdGgsIHZpZGVvX2hlaWdodCk7Ci0KLQlpZiAoenItPm5vcm0gIT0gVklERU9fTU9ERV9QQUwgJiYKLQkgICAgenItPm5vcm0gIT0gVklERU9fTU9ERV9OVFNDICYmCi0JICAgIHpyLT5ub3JtICE9IFZJREVPX01PREVfU0VDQU0pIHsKLQkJZHByaW50aygxLAotCQkJS0VSTl9FUlIgIiVzOiBzZXRfdmZlKCkgLSBub3JtID0gJWQgbm90IHZhbGlkXG4iLAotCQkJWlJfREVWTkFNRSh6ciksIHpyLT5ub3JtKTsKLQkJcmV0dXJuOwotCX0KLQlpZiAodmlkZW9fd2lkdGggPCBCVVpfTUlOX1dJRFRIIHx8Ci0JICAgIHZpZGVvX2hlaWdodCA8IEJVWl9NSU5fSEVJR0hUIHx8Ci0JICAgIHZpZGVvX3dpZHRoID4gV2EgfHwgdmlkZW9faGVpZ2h0ID4gSGEpIHsKLQkJZHByaW50aygxLCBLRVJOX0VSUiAiJXM6IHNldF92ZmU6IHc9JWQgaD0lZCBub3QgdmFsaWRcbiIsCi0JCQlaUl9ERVZOQU1FKHpyKSwgdmlkZW9fd2lkdGgsIHZpZGVvX2hlaWdodCk7Ci0JCXJldHVybjsKLQl9Ci0KLQkvKioqKiB6cjM2MDU3ICoqKiovCi0KLQkvKiBob3Jpem9udGFsICovCi0JVmlkV2luV2lkID0gdmlkZW9fd2lkdGg7Ci0JWCA9IChWaWRXaW5XaWQgKiA2NCArIHR2bi0+V2EgLSAxKSAvIHR2bi0+V2E7Ci0JV2UgPSAoVmlkV2luV2lkICogNjQpIC8gWDsKLQlIb3JEY20gPSA2NCAtIFg7Ci0JaGNyb3AxID0gMiAqICgodHZuLT5XYSAtIFdlKSAvIDQpOwotCWhjcm9wMiA9IHR2bi0+V2EgLSBXZSAtIGhjcm9wMTsKLQlIU3RhcnQgPSB0dm4tPkhTdGFydCA/IHR2bi0+SFN0YXJ0IDogMTsKLQkvKiAoUm9uYWxkKSBPcmlnaW5hbCBjb21tZW50OgotCSAqICJ8IDEgRG9lc24ndCBoYXZlIGFueSBlZmZlY3QsIHRlc3RlZCBvbiBib3RoIGEgREMxMCBhbmQgYSBEQzEwKyIKLQkgKiB0aGlzIGlzIGZhbHNlLiBJdCBpbnZlcnNlcyBjaHJvbWEgdmFsdWVzIG9uIHRoZSBMTUwzM1IxMCAoc28gQ3IKLQkgKiBzdWRkZW5seSBpcyBzaG93biBhcyBDYiBhbmQgcmV2ZXJzZSwgcmVhbGx5IGNvb2wgZWZmZWN0IGlmIHlvdQotCSAqIHdhbnQgdG8gc2VlIGJsdWUgZmFjZXMsIG5vdCB1c2VmdWwgb3RoZXJ3aXNlKS4gU28gZG9uJ3QgdXNlIHwxLgotCSAqIEhvd2V2ZXIsIHRoZSBEQzEwIGhhcyAnMCcgYXMgSFN0YXJ0LCBidXQgZG9lcyBuZWVkIHwxLCBzbyB3ZQotCSAqIHVzZSBhIGRpcnR5IGNoZWNrLi4uCi0JICovCi0JSEVuZCA9IEhTdGFydCArIHR2bi0+V2EgLSAxOwotCUhTdGFydCArPSBoY3JvcDE7Ci0JSEVuZCAtPSBoY3JvcDI7Ci0JcmVnID0gKChIU3RhcnQgJiBaUjM2MDU3X1ZGRUhDUl9IbWFzaykgPDwgWlIzNjA1N19WRkVIQ1JfSFN0YXJ0KQotCSAgICB8ICgoSEVuZCAmIFpSMzYwNTdfVkZFSENSX0htYXNrKSA8PCBaUjM2MDU3X1ZGRUhDUl9IRW5kKTsKLQlpZiAoenItPmNhcmQudmZlX3BvbC5oc3luY19wb2wpCi0JCXJlZyB8PSBaUjM2MDU3X1ZGRUhDUl9IU1BvbDsKLQlidHdyaXRlKHJlZywgWlIzNjA1N19WRkVIQ1IpOwotCi0JLyogVmVydGljYWwgKi8KLQlEaXNwTW9kZSA9ICEodmlkZW9faGVpZ2h0ID4gQlVaX01BWF9IRUlHSFQgLyAyKTsKLQlWaWRXaW5IdCA9IERpc3BNb2RlID8gdmlkZW9faGVpZ2h0IDogdmlkZW9faGVpZ2h0IC8gMjsKLQlZID0gKFZpZFdpbkh0ICogNjQgKiAyICsgdHZuLT5IYSAtIDEpIC8gdHZuLT5IYTsKLQlIZSA9IChWaWRXaW5IdCAqIDY0KSAvIFk7Ci0JVmVyRGNtID0gNjQgLSBZOwotCXZjcm9wMSA9ICh0dm4tPkhhIC8gMiAtIEhlKSAvIDI7Ci0JdmNyb3AyID0gdHZuLT5IYSAvIDIgLSBIZSAtIHZjcm9wMTsKLQlWU3RhcnQgPSB0dm4tPlZTdGFydDsKLQlWRW5kID0gVlN0YXJ0ICsgdHZuLT5IYSAvIDI7CS8vIC0gMTsgRklYTUUgU25hcFNob3QgdGltZXMgb3V0IHdpdGggLTEgaW4gNzY4KjU3NiBvbiB0aGUgREMxMCAtIExQCi0JVlN0YXJ0ICs9IHZjcm9wMTsKLQlWRW5kIC09IHZjcm9wMjsKLQlyZWcgPSAoKFZTdGFydCAmIFpSMzYwNTdfVkZFVkNSX1ZtYXNrKSA8PCBaUjM2MDU3X1ZGRVZDUl9WU3RhcnQpCi0JICAgIHwgKChWRW5kICYgWlIzNjA1N19WRkVWQ1JfVm1hc2spIDw8IFpSMzYwNTdfVkZFVkNSX1ZFbmQpOwotCWlmICh6ci0+Y2FyZC52ZmVfcG9sLnZzeW5jX3BvbCkKLQkJcmVnIHw9IFpSMzYwNTdfVkZFVkNSX1ZTUG9sOwotCWJ0d3JpdGUocmVnLCBaUjM2MDU3X1ZGRVZDUik7Ci0KLQkvKiBzY2FsZXIgYW5kIHBpeGVsIGZvcm1hdCAqLwotCXJlZyA9IDA7Ci0JcmVnIHw9IChIb3JEY20gPDwgWlIzNjA1N19WRkVTUEZSX0hvckRjbSk7Ci0JcmVnIHw9IChWZXJEY20gPDwgWlIzNjA1N19WRkVTUEZSX1ZlckRjbSk7Ci0JcmVnIHw9IChEaXNwTW9kZSA8PCBaUjM2MDU3X1ZGRVNQRlJfRGlzcE1vZGUpOwotCS8qIFJKOiBJIGRvbid0IGtub3csIHdoeSB0aGUgZm9sbG93aW5nIGhhcyB0byBiZSB0aGUgb3Bwb3NpdGUKLQkgKiBvZiB0aGUgY29ycmVzcG9uZGluZyBaUjM2MDYwIHNldHRpbmcsIGJ1dCBvbmx5IHRoaXMgd2F5Ci0JICogd2UgZ2V0IHRoZSBjb3JyZWN0IGNvbG9ycyB3aGVuIHVuY29tcHJlc3NpbmcgdG8gdGhlIHNjcmVlbiAgKi8KLQkvL3JlZyB8PSBaUjM2MDU3X1ZGRVNQRlJfVkNMS1BvbDsgLyoqLwotCS8qIFJKOiBEb24ndCBrbm93IGlmIHRoYXQgaXMgbmVlZGVkIGZvciBOVFNDIGFsc28gKi8KLQlpZiAoenItPm5vcm0gIT0gVklERU9fTU9ERV9OVFNDKQotCQlyZWcgfD0gWlIzNjA1N19WRkVTUEZSX0V4dEZsOwkvLyBORUVERUQhISEhISEhIFdvbGZnYW5nCi0JcmVnIHw9IFpSMzYwNTdfVkZFU1BGUl9Ub3BGaWVsZDsKLQlpZiAoSG9yRGNtID49IDQ4KSB7Ci0JCXJlZyB8PSAzIDw8IFpSMzYwNTdfVkZFU1BGUl9IRmlsdGVyOwkvKiA1IHRhcCBmaWx0ZXIgKi8KLQl9IGVsc2UgaWYgKEhvckRjbSA+PSAzMikgewotCQlyZWcgfD0gMiA8PCBaUjM2MDU3X1ZGRVNQRlJfSEZpbHRlcjsJLyogNCB0YXAgZmlsdGVyICovCi0JfSBlbHNlIGlmIChIb3JEY20gPj0gMTYpIHsKLQkJcmVnIHw9IDEgPDwgWlIzNjA1N19WRkVTUEZSX0hGaWx0ZXI7CS8qIDMgdGFwIGZpbHRlciAqLwotCX0KLQlyZWcgfD0gZm9ybWF0LT52ZmVzcGZyOwotCWJ0d3JpdGUocmVnLCBaUjM2MDU3X1ZGRVNQRlIpOwotCi0JLyogZGlzcGxheSBjb25maWd1cmF0aW9uICovCi0JcmVnID0gKDE2IDw8IFpSMzYwNTdfVkRDUl9NaW5QaXgpCi0JICAgIHwgKFZpZFdpbkh0IDw8IFpSMzYwNTdfVkRDUl9WaWRXaW5IdCkKLQkgICAgfCAoVmlkV2luV2lkIDw8IFpSMzYwNTdfVkRDUl9WaWRXaW5XaWQpOwotCWlmIChwY2lfcGNpX3Byb2JsZW1zICYgUENJUENJX1RSSVRPTikKLQkJLy8gfHwgenItPnJldmlzaW9uIDwgMSkgLy8gUmV2aXNpb24gMSBoYXMgYWxzbyBUcml0b24gc3VwcG9ydAotCQlyZWcgJj0gflpSMzYwNTdfVkRDUl9Ucml0b247Ci0JZWxzZQotCQlyZWcgfD0gWlIzNjA1N19WRENSX1RyaXRvbjsKLQlidHdyaXRlKHJlZywgWlIzNjA1N19WRENSKTsKLQotCS8qIChSb25hbGQpIGRvbid0IHdyaXRlIHRoaXMgaWYgb3ZlcmxheV9tYXNrID0gTlVMTCAqLwotCWlmICh6ci0+b3ZlcmxheV9tYXNrKSB7Ci0JCS8qIFdyaXRlIG92ZXJsYXkgY2xpcHBpbmcgbWFzayBkYXRhLCBidXQgZG9uJ3QgZW5hYmxlIG92ZXJsYXkgY2xpcHBpbmcgKi8KLQkJLyogUko6IHNpbmNlIHRoaXMgbWFrZXMgb25seSBzZW5zZSBvbiB0aGUgc2NyZWVuLCB3ZSB1c2UKLQkJICogenItPm92ZXJsYXlfc2V0dGluZ3Mud2lkdGggaW5zdGVhZCBvZiB2aWRlb193aWR0aCAqLwotCi0JCW1hc2tfbGluZV9zaXplID0gKEJVWl9NQVhfV0lEVEggKyAzMSkgLyAzMjsKLQkJcmVnID0gdmlydF90b19idXMoenItPm92ZXJsYXlfbWFzayk7Ci0JCWJ0d3JpdGUocmVnLCBaUjM2MDU3X01NVFIpOwotCQlyZWcgPSB2aXJ0X3RvX2J1cyh6ci0+b3ZlcmxheV9tYXNrICsgbWFza19saW5lX3NpemUpOwotCQlidHdyaXRlKHJlZywgWlIzNjA1N19NTUJSKTsKLQkJcmVnID0KLQkJICAgIG1hc2tfbGluZV9zaXplIC0gKHpyLT5vdmVybGF5X3NldHRpbmdzLndpZHRoICsKLQkJCQkgICAgICAzMSkgLyAzMjsKLQkJaWYgKERpc3BNb2RlID09IDApCi0JCQlyZWcgKz0gbWFza19saW5lX3NpemU7Ci0JCXJlZyA8PD0gWlIzNjA1N19PQ1JfTWFza1N0cmlkZTsKLQkJYnR3cml0ZShyZWcsIFpSMzYwNTdfT0NSKTsKLQl9Ci0KLQl6cjM2MDU3X2FkanVzdF92ZmUoenIsIHpyLT5jb2RlY19tb2RlKTsKLX0KLQotLyoKLSAqIFN3aXRjaCBvdmVybGF5IG9uIG9yIG9mZgotICovCi0KLXZvaWQKLXpyMzYwNTdfb3ZlcmxheSAoc3RydWN0IHpvcmFuICp6ciwKLQkJIGludCAgICAgICAgICAgb24pCi17Ci0JdTMyIHJlZzsKLQotCWlmIChvbikgewotCQkvKiBkbyB0aGUgbmVjZXNzYXJ5IHNldHRpbmdzIC4uLiAqLwotCQlidGFuZCh+WlIzNjA1N19WRENSX1ZpZEVuLCBaUjM2MDU3X1ZEQ1IpOwkvKiBzd2l0Y2ggaXQgb2ZmIGZpcnN0ICovCi0KLQkJenIzNjA1N19zZXRfdmZlKHpyLAotCQkJCXpyLT5vdmVybGF5X3NldHRpbmdzLndpZHRoLAotCQkJCXpyLT5vdmVybGF5X3NldHRpbmdzLmhlaWdodCwKLQkJCQl6ci0+b3ZlcmxheV9zZXR0aW5ncy5mb3JtYXQpOwotCi0JCS8qIFN0YXJ0IGFuZCBsZW5ndGggb2YgZWFjaCBsaW5lIE1VU1QgYmUgNC1ieXRlIGFsaWduZWQuCi0JCSAqIFRoaXMgc2hvdWxkIGJlIGFsbHJlYWR5IGNoZWNrZWQgYmVmb3JlIHRoZSBjYWxsIHRvIHRoaXMgcm91dGluZS4KLQkJICogQWxsIGVycm9yIG1lc3NhZ2VzIGFyZSBpbnRlcm5hbCBkcml2ZXIgY2hlY2tpbmcgb25seSEgKi8KLQotCQkvKiB2aWRlbyBkaXNwbGF5IHRvcCBhbmQgYm90dG9tIHJlZ2lzdGVycyAqLwotCQlyZWcgPSAobG9uZykgenItPmJ1ZmZlci5iYXNlICsKLQkJICAgIHpyLT5vdmVybGF5X3NldHRpbmdzLnggKgotCQkgICAgKCh6ci0+b3ZlcmxheV9zZXR0aW5ncy5mb3JtYXQtPmRlcHRoICsgNykgLyA4KSArCi0JCSAgICB6ci0+b3ZlcmxheV9zZXR0aW5ncy55ICoKLQkJICAgIHpyLT5idWZmZXIuYnl0ZXNwZXJsaW5lOwotCQlidHdyaXRlKHJlZywgWlIzNjA1N19WRFRSKTsKLQkJaWYgKHJlZyAmIDMpCi0JCQlkcHJpbnRrKDEsCi0JCQkJS0VSTl9FUlIKLQkJCQkiJXM6IHpyMzYwNTdfb3ZlcmxheSgpIC0gdmlkZW9fYWRkcmVzcyBub3QgYWxpZ25lZFxuIiwKLQkJCQlaUl9ERVZOQU1FKHpyKSk7Ci0JCWlmICh6ci0+b3ZlcmxheV9zZXR0aW5ncy5oZWlnaHQgPiBCVVpfTUFYX0hFSUdIVCAvIDIpCi0JCQlyZWcgKz0genItPmJ1ZmZlci5ieXRlc3BlcmxpbmU7Ci0JCWJ0d3JpdGUocmVnLCBaUjM2MDU3X1ZEQlIpOwotCi0JCS8qIHZpZGVvIHN0cmlkZSwgc3RhdHVzLCBhbmQgZnJhbWUgZ3JhYiByZWdpc3RlciAqLwotCQlyZWcgPSB6ci0+YnVmZmVyLmJ5dGVzcGVybGluZSAtCi0JCSAgICB6ci0+b3ZlcmxheV9zZXR0aW5ncy53aWR0aCAqCi0JCSAgICAoKHpyLT5vdmVybGF5X3NldHRpbmdzLmZvcm1hdC0+ZGVwdGggKyA3KSAvIDgpOwotCQlpZiAoenItPm92ZXJsYXlfc2V0dGluZ3MuaGVpZ2h0ID4gQlVaX01BWF9IRUlHSFQgLyAyKQotCQkJcmVnICs9IHpyLT5idWZmZXIuYnl0ZXNwZXJsaW5lOwotCQlpZiAocmVnICYgMykKLQkJCWRwcmludGsoMSwKLQkJCQlLRVJOX0VSUgotCQkJCSIlczogenIzNjA1N19vdmVybGF5KCkgLSB2aWRlb19zdHJpZGUgbm90IGFsaWduZWRcbiIsCi0JCQkJWlJfREVWTkFNRSh6cikpOwotCQlyZWcgPSAocmVnIDw8IFpSMzYwNTdfVlNTRkdSX0Rpc3BTdHJpZGUpOwotCQlyZWcgfD0gWlIzNjA1N19WU1NGR1JfVmlkT3ZmOwkvKiBjbGVhciBvdmVyZmxvdyBzdGF0dXMgKi8KLQkJYnR3cml0ZShyZWcsIFpSMzYwNTdfVlNTRkdSKTsKLQotCQkvKiBTZXQgb3ZlcmxheSBjbGlwcGluZyAqLwotCQlpZiAoenItPm92ZXJsYXlfc2V0dGluZ3MuY2xpcGNvdW50ID4gMCkKLQkJCWJ0b3IoWlIzNjA1N19PQ1JfT3ZsRW5hYmxlLCBaUjM2MDU3X09DUik7Ci0KLQkJLyogLi4uIGFuZCBzd2l0Y2ggaXQgb24gKi8KLQkJYnRvcihaUjM2MDU3X1ZEQ1JfVmlkRW4sIFpSMzYwNTdfVkRDUik7Ci0JfSBlbHNlIHsKLQkJLyogU3dpdGNoIGl0IG9mZiAqLwotCQlidGFuZCh+WlIzNjA1N19WRENSX1ZpZEVuLCBaUjM2MDU3X1ZEQ1IpOwotCX0KLX0KLQotLyoKLSAqIFRoZSBvdmVybGF5IG1hc2sgaGFzIG9uZSBiaXQgZm9yIGVhY2ggcGl4ZWwgb24gYSBzY2FuIGxpbmUsCi0gKiAgYW5kIHRoZSBtYXhpbXVtIHdpbmRvdyBzaXplIGlzIEJVWl9NQVhfV0lEVEggKiBCVVpfTUFYX0hFSUdIVCBwaXhlbHMuCi0gKi8KLQotdm9pZAotd3JpdGVfb3ZlcmxheV9tYXNrIChzdHJ1Y3QgZmlsZSAgICAgICAqZmlsZSwKLQkJICAgIHN0cnVjdCB2aWRlb19jbGlwICp2cCwKLQkJICAgIGludCAgICAgICAgICAgICAgICBjb3VudCkKLXsKLQlzdHJ1Y3Qgem9yYW5fZmggKmZoID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwotCXN0cnVjdCB6b3JhbiAqenIgPSBmaC0+enI7Ci0JdW5zaWduZWQgbWFza19saW5lX3NpemUgPSAoQlVaX01BWF9XSURUSCArIDMxKSAvIDMyOwotCXUzMiAqbWFzazsKLQlpbnQgeCwgeSwgd2lkdGgsIGhlaWdodDsKLQl1bnNpZ25lZCBpLCBqLCBrOwotCXUzMiByZWc7Ci0KLQkvKiBmaWxsIG1hc2sgd2l0aCBvbmUgYml0cyAqLwotCW1lbXNldChmaC0+b3ZlcmxheV9tYXNrLCB+MCwgbWFza19saW5lX3NpemUgKiA0ICogQlVaX01BWF9IRUlHSFQpOwotCXJlZyA9IDA7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgY291bnQ7ICsraSkgewotCQkvKiBwaWNrIHVwIGxvY2FsIGNvcHkgb2YgY2xpcCAqLwotCQl4ID0gdnBbaV0ueDsKLQkJeSA9IHZwW2ldLnk7Ci0JCXdpZHRoID0gdnBbaV0ud2lkdGg7Ci0JCWhlaWdodCA9IHZwW2ldLmhlaWdodDsKLQotCQkvKiB0cmltIGNsaXBzIHRoYXQgZXh0ZW5kIGJleW9uZCB0aGUgd2luZG93ICovCi0JCWlmICh4IDwgMCkgewotCQkJd2lkdGggKz0geDsKLQkJCXggPSAwOwotCQl9Ci0JCWlmICh5IDwgMCkgewotCQkJaGVpZ2h0ICs9IHk7Ci0JCQl5ID0gMDsKLQkJfQotCQlpZiAoeCArIHdpZHRoID4gZmgtPm92ZXJsYXlfc2V0dGluZ3Mud2lkdGgpIHsKLQkJCXdpZHRoID0gZmgtPm92ZXJsYXlfc2V0dGluZ3Mud2lkdGggLSB4OwotCQl9Ci0JCWlmICh5ICsgaGVpZ2h0ID4gZmgtPm92ZXJsYXlfc2V0dGluZ3MuaGVpZ2h0KSB7Ci0JCQloZWlnaHQgPSBmaC0+b3ZlcmxheV9zZXR0aW5ncy5oZWlnaHQgLSB5OwotCQl9Ci0KLQkJLyogaWdub3JlIGRlZ2VuZXJhdGUgY2xpcHMgKi8KLQkJaWYgKGhlaWdodCA8PSAwKSB7Ci0JCQljb250aW51ZTsKLQkJfQotCQlpZiAod2lkdGggPD0gMCkgewotCQkJY29udGludWU7Ci0JCX0KLQotCQkvKiBhcHBseSBjbGlwIGZvciBlYWNoIHNjYW4gbGluZSAqLwotCQlmb3IgKGogPSAwOyBqIDwgaGVpZ2h0OyArK2opIHsKLQkJCS8qIHJlc2V0IGJpdCBmb3IgZWFjaCBwaXhlbCAqLwotCQkJLyogdGhpcyBjYW4gYmUgb3B0aW1pemVkIGxhdGVyIGlmIG5lZWQgYmUgKi8KLQkJCW1hc2sgPSBmaC0+b3ZlcmxheV9tYXNrICsgKHkgKyBqKSAqIG1hc2tfbGluZV9zaXplOwotCQkJZm9yIChrID0gMDsgayA8IHdpZHRoOyArK2spIHsKLQkJCQltYXNrWyh4ICsgaykgLyAzMl0gJj0KLQkJCQkgICAgfigodTMyKSAxIDw8ICh4ICsgaykgJSAzMik7Ci0JCQl9Ci0JCX0KLQl9Ci19Ci0KLS8qIEVuYWJsZS9EaXNhYmxlIHVuY29tcHJlc3NlZCBtZW1vcnkgZ3JhYmJpbmcgb2YgdGhlIDM2MDU3ICovCi0KLXZvaWQKLXpyMzYwNTdfc2V0X21lbWdyYWIgKHN0cnVjdCB6b3JhbiAqenIsCi0JCSAgICAgaW50ICAgICAgICAgICBtb2RlKQotewotCWlmIChtb2RlKSB7Ci0JCS8qIFdlIG9ubHkgY2hlY2sgU25hcFNob3QgYW5kIG5vdCBGcmFtZUdyYWIgaGVyZS4gIFNuYXBTaG90PT0xCi0JCSAqIG1lYW5zIGEgY2FwdHVyZSBpcyBhbHJlYWR5IGluIHByb2dyZXNzLCBidXQgRnJhbWVHcmFiPT0xCi0JCSAqIGRvZXNuJ3QgbmVjZXNzYXJ5IG1lYW4gdGhhdC4gIEl0J3MgbW9yZSBjb3JyZWN0IHRvIHNheSBhIDEKLQkJICogdG8gMCB0cmFuc2l0aW9uIGluZGljYXRlcyBhIGNhcHR1cmUgY29tcGxldGVkLiAgSWYgYQotCQkgKiBjYXB0dXJlIGlzIHBlbmRpbmcgd2hlbiBjYXB0dXJpbmcgaXMgdHVuZWQgb2ZmLCBGcmFtZUdyYWIKLQkJICogd2lsbCBiZSBzdHVjayBhdCAxIHVudGlsIGNhcHR1cmluZyBpcyB0dXJuZWQgYmFjayBvbi4KLQkJICovCi0JCWlmIChidHJlYWQoWlIzNjA1N19WU1NGR1IpICYgWlIzNjA1N19WU1NGR1JfU25hcFNob3QpCi0JCQlkcHJpbnRrKDEsCi0JCQkJS0VSTl9XQVJOSU5HCi0JCQkJIiVzOiB6cjM2MDU3X3NldF9tZW1ncmFiKDEpIHdpdGggU25hcFNob3Qgb24hP1xuIiwKLQkJCQlaUl9ERVZOQU1FKHpyKSk7Ci0KLQkJLyogc3dpdGNoIG9uIFZTeW5jIGludGVycnVwdHMgKi8KLQkJYnR3cml0ZShJUlFfTUFTSywgWlIzNjA1N19JU1IpOwkvLyBDbGVhciBJbnRlcnJ1cHRzCi0JCWJ0b3IoenItPmNhcmQudnN5bmNfaW50LCBaUjM2MDU3X0lDUik7CS8vIFNXCi0KLQkJLyogZW5hYmxlIFNuYXBTaG90ICovCi0JCWJ0b3IoWlIzNjA1N19WU1NGR1JfU25hcFNob3QsIFpSMzYwNTdfVlNTRkdSKTsKLQotCQkvKiBTZXQgenIzNjA1NyB2aWRlbyBmcm9udCBlbmQgIGFuZCBlbmFibGUgdmlkZW8gKi8KLQkJenIzNjA1N19zZXRfdmZlKHpyLCB6ci0+djRsX3NldHRpbmdzLndpZHRoLAotCQkJCXpyLT52NGxfc2V0dGluZ3MuaGVpZ2h0LAotCQkJCXpyLT52NGxfc2V0dGluZ3MuZm9ybWF0KTsKLQotCQl6ci0+djRsX21lbWdyYWJfYWN0aXZlID0gMTsKLQl9IGVsc2UgewotCQkvKiBzd2l0Y2ggb2ZmIFZTeW5jIGludGVycnVwdHMgKi8KLQkJYnRhbmQofnpyLT5jYXJkLnZzeW5jX2ludCwgWlIzNjA1N19JQ1IpOwkvLyBTVwotCi0JCXpyLT52NGxfbWVtZ3JhYl9hY3RpdmUgPSAwOwotCQl6ci0+djRsX2dyYWJfZnJhbWUgPSBOT19HUkFCX0FDVElWRTsKLQotCQkvKiByZWVuYWJsZSBncmFiYmluZyB0byBzY3JlZW4gaWYgaXQgd2FzIHJ1bm5pbmcgKi8KLQkJaWYgKHpyLT52NGxfb3ZlcmxheV9hY3RpdmUpIHsKLQkJCXpyMzYwNTdfb3ZlcmxheSh6ciwgMSk7Ci0JCX0gZWxzZSB7Ci0JCQlidGFuZCh+WlIzNjA1N19WRENSX1ZpZEVuLCBaUjM2MDU3X1ZEQ1IpOwotCQkJYnRhbmQoflpSMzYwNTdfVlNTRkdSX1NuYXBTaG90LCBaUjM2MDU3X1ZTU0ZHUik7Ci0JCX0KLQl9Ci19Ci0KLWludAotd2FpdF9ncmFiX3BlbmRpbmcgKHN0cnVjdCB6b3JhbiAqenIpCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCS8qIHdhaXQgdW50aWwgYWxsIHBlbmRpbmcgZ3JhYnMgYXJlIGZpbmlzaGVkICovCi0KLQlpZiAoIXpyLT52NGxfbWVtZ3JhYl9hY3RpdmUpCi0JCXJldHVybiAwOwotCi0Jd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKHpyLT52NGxfY2FwcSwKLQkJCSh6ci0+djRsX3BlbmRfdGFpbCA9PSB6ci0+djRsX3BlbmRfaGVhZCkpOwotCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkKLQkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZ6ci0+c3BpbmxvY2ssIGZsYWdzKTsKLQl6cjM2MDU3X3NldF9tZW1ncmFiKHpyLCAwKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ6ci0+c3BpbmxvY2ssIGZsYWdzKTsKLQotCXJldHVybiAwOwotfQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogIFNldCB1cCB0aGUgQnV6LXNwZWNpZmljIE1KUEVHIHBhcnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotc3RhdGljIGlubGluZSB2b2lkCi1zZXRfZnJhbWUgKHN0cnVjdCB6b3JhbiAqenIsCi0JICAgaW50ICAgICAgICAgICB2YWwpCi17Ci0JR1BJTyh6ciwgenItPmNhcmQuZ3Bpb1taUl9HUElPX0pQRUdfRlJBTUVdLCB2YWwpOwotfQotCi1zdGF0aWMgdm9pZAotc2V0X3ZpZGVvYnVzX2RpciAoc3RydWN0IHpvcmFuICp6ciwKLQkJICBpbnQgICAgICAgICAgIHZhbCkKLXsKLQlzd2l0Y2ggKHpyLT5jYXJkLnR5cGUpIHsKLQljYXNlIExNTDMzOgotCWNhc2UgTE1MMzNSMTA6Ci0JCWlmIChsbWwzM2RwYXRoID09IDApCi0JCQlHUElPKHpyLCA1LCB2YWwpOwotCQllbHNlCi0JCQlHUElPKHpyLCA1LCAxKTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJR1BJTyh6ciwgenItPmNhcmQuZ3Bpb1taUl9HUElPX1ZJRF9ESVJdLAotCQkgICAgIHpyLT5jYXJkLmdwaW9fcG9sW1pSX0dQSU9fVklEX0RJUl0gPyAhdmFsIDogdmFsKTsKLQkJYnJlYWs7Ci0JfQotfQotCi1zdGF0aWMgdm9pZAotaW5pdF9qcGVnX3F1ZXVlIChzdHJ1Y3Qgem9yYW4gKnpyKQotewotCWludCBpOwotCi0JLyogcmUtaW5pdGlhbGl6ZSBETUEgcmluZyBzdHVmZiAqLwotCXpyLT5qcGdfcXVlX2hlYWQgPSAwOwotCXpyLT5qcGdfZG1hX2hlYWQgPSAwOwotCXpyLT5qcGdfZG1hX3RhaWwgPSAwOwotCXpyLT5qcGdfcXVlX3RhaWwgPSAwOwotCXpyLT5qcGdfc2VxX251bSA9IDA7Ci0JenItPkpQRUdfZXJyb3IgPSAwOwotCXpyLT5udW1fZXJyb3JzID0gMDsKLQl6ci0+anBnX2Vycl9zZXEgPSAwOwotCXpyLT5qcGdfZXJyX3NoaWZ0ID0gMDsKLQl6ci0+anBnX3F1ZXVlZF9udW0gPSAwOwotCWZvciAoaSA9IDA7IGkgPCB6ci0+anBnX2J1ZmZlcnMubnVtX2J1ZmZlcnM7IGkrKykgewotCQl6ci0+anBnX2J1ZmZlcnMuYnVmZmVyW2ldLnN0YXRlID0gQlVaX1NUQVRFX1VTRVI7CS8qIG5vdGhpbmcgZ29pbmcgb24gKi8KLQl9Ci0JZm9yIChpID0gMDsgaSA8IEJVWl9OVU1fU1RBVF9DT007IGkrKykgewotCQl6ci0+c3RhdF9jb21baV0gPSBjcHVfdG9fbGUzMigxKTsJLyogbWFyayBhcyB1bmF2YWlsYWJsZSB0byB6cjM2MDU3ICovCi0JfQotfQotCi1zdGF0aWMgdm9pZAotenIzNjA1N19zZXRfanBnIChzdHJ1Y3Qgem9yYW4gICAgICAgICAgKnpyLAotCQkgZW51bSB6b3Jhbl9jb2RlY19tb2RlICBtb2RlKQotewotCXN0cnVjdCB0dm5vcm0gKnR2bjsKLQl1MzIgcmVnOwotCi0JdHZuID0genItPnRpbWluZzsKLQotCS8qIGFzc2VydCBQX1Jlc2V0LCBkaXNhYmxlIGNvZGUgdHJhbnNmZXIsIGRlYXNzZXJ0IEFjdGl2ZSAqLwotCWJ0d3JpdGUoMCwgWlIzNjA1N19KUEMpOwotCi0JLyogTUpQRUcgY29tcHJlc3Npb24gbW9kZSAqLwotCXN3aXRjaCAobW9kZSkgewotCi0JY2FzZSBCVVpfTU9ERV9NT1RJT05fQ09NUFJFU1M6Ci0JZGVmYXVsdDoKLQkJcmVnID0gWlIzNjA1N19KTUNfTUpQR0NtcE1vZGU7Ci0JCWJyZWFrOwotCi0JY2FzZSBCVVpfTU9ERV9NT1RJT05fREVDT01QUkVTUzoKLQkJcmVnID0gWlIzNjA1N19KTUNfTUpQR0V4cE1vZGU7Ci0JCXJlZyB8PSBaUjM2MDU3X0pNQ19TeW5jTXN0cjsKLQkJLyogUko6IFRoZSBmb2xsb3dpbmcgaXMgZXhwZXJpbWVudGFsIC0gaW1wcm92ZXMgdGhlIG91dHB1dCB0byBzY3JlZW4gKi8KLQkJLy9pZih6ci0+anBnX3NldHRpbmdzLlZGSUZPX0ZCKSByZWcgfD0gWlIzNjA1N19KTUNfVkZJRk9fRkI7IC8vIE5vLCBpdCBkb2Vzbid0LiBTTQotCQlicmVhazsKLQotCWNhc2UgQlVaX01PREVfU1RJTExfQ09NUFJFU1M6Ci0JCXJlZyA9IFpSMzYwNTdfSk1DX0pQR0NtcE1vZGU7Ci0JCWJyZWFrOwotCi0JY2FzZSBCVVpfTU9ERV9TVElMTF9ERUNPTVBSRVNTOgotCQlyZWcgPSBaUjM2MDU3X0pNQ19KUEdFeHBNb2RlOwotCQlicmVhazsKLQotCX0KLQlyZWcgfD0gWlIzNjA1N19KTUNfSlBHOwotCWlmICh6ci0+anBnX3NldHRpbmdzLmZpZWxkX3Blcl9idWZmID09IDEpCi0JCXJlZyB8PSBaUjM2MDU3X0pNQ19GbGRfcGVyX2J1ZmY7Ci0JYnR3cml0ZShyZWcsIFpSMzYwNTdfSk1DKTsKLQotCS8qIHZlcnRpY2FsICovCi0JYnRvcihaUjM2MDU3X1ZGRVZDUl9WU1BvbCwgWlIzNjA1N19WRkVWQ1IpOwotCXJlZyA9ICg2IDw8IFpSMzYwNTdfVlNQX1ZzeW5jU2l6ZSkgfAotCSAgICAgICh0dm4tPkh0IDw8IFpSMzYwNTdfVlNQX0ZybVRvdCk7Ci0JYnR3cml0ZShyZWcsIFpSMzYwNTdfVlNQKTsKLQlyZWcgPSAoKHpyLT5qcGdfc2V0dGluZ3MuaW1nX3kgKyB0dm4tPlZTdGFydCkgPDwgWlIzNjA1N19GVkFQX05BWSkgfAotCSAgICAgICh6ci0+anBnX3NldHRpbmdzLmltZ19oZWlnaHQgPDwgWlIzNjA1N19GVkFQX1BBWSk7Ci0JYnR3cml0ZShyZWcsIFpSMzYwNTdfRlZBUCk7Ci0KLQkvKiBob3Jpem9udGFsICovCi0JaWYgKHpyLT5jYXJkLnZmZV9wb2wuaHN5bmNfcG9sKQotCQlidG9yKFpSMzYwNTdfVkZFSENSX0hTUG9sLCBaUjM2MDU3X1ZGRUhDUik7Ci0JZWxzZQotCQlidGFuZCh+WlIzNjA1N19WRkVIQ1JfSFNQb2wsIFpSMzYwNTdfVkZFSENSKTsKLQlyZWcgPSAoKHR2bi0+SFN5bmNTdGFydCkgPDwgWlIzNjA1N19IU1BfSHN5bmNTdGFydCkgfAotCSAgICAgICh0dm4tPld0IDw8IFpSMzYwNTdfSFNQX0xpbmVUb3QpOwotCWJ0d3JpdGUocmVnLCBaUjM2MDU3X0hTUCk7Ci0JcmVnID0gKCh6ci0+anBnX3NldHRpbmdzLmltZ194ICsKLQkJdHZuLT5IU3RhcnQgKyA0KSA8PCBaUjM2MDU3X0ZIQVBfTkFYKSB8Ci0JICAgICAgKHpyLT5qcGdfc2V0dGluZ3MuaW1nX3dpZHRoIDw8IFpSMzYwNTdfRkhBUF9QQVgpOwotCWJ0d3JpdGUocmVnLCBaUjM2MDU3X0ZIQVApOwotCi0JLyogZmllbGQgcHJvY2VzcyBwYXJhbWV0ZXJzICovCi0JaWYgKHpyLT5qcGdfc2V0dGluZ3Mub2RkX2V2ZW4pCi0JCXJlZyA9IFpSMzYwNTdfRlBQX09kZF9FdmVuOwotCWVsc2UKLQkJcmVnID0gMDsKLQotCWJ0d3JpdGUocmVnLCBaUjM2MDU3X0ZQUCk7Ci0KLQkvKiBTZXQgcHJvcGVyIFZDTEsgUG9sYXJpdHksIGVsc2UgY29sb3JzIHdpbGwgYmUgd3JvbmcgZHVyaW5nIHBsYXliYWNrICovCi0JLy9idG9yKFpSMzYwNTdfVkZFU1BGUl9WQ0xLUG9sLCBaUjM2MDU3X1ZGRVNQRlIpOwotCi0JLyogY29kZSBiYXNlIGFkZHJlc3MgKi8KLQlyZWcgPSB2aXJ0X3RvX2J1cyh6ci0+c3RhdF9jb20pOwotCWJ0d3JpdGUocmVnLCBaUjM2MDU3X0pDQkEpOwotCi0JLyogRklGTyB0aHJlc2hvbGQgKEZJRk8gaXMgMTYwLiBkb3VibGUgd29yZHMpICovCi0JLyogTk9URTogZGVjaW1hbCB2YWx1ZXMgaGVyZSAqLwotCXN3aXRjaCAobW9kZSkgewotCi0JY2FzZSBCVVpfTU9ERV9TVElMTF9DT01QUkVTUzoKLQljYXNlIEJVWl9NT0RFX01PVElPTl9DT01QUkVTUzoKLQkJaWYgKHpyLT5jYXJkLnR5cGUgIT0gQlVaKQotCQkJcmVnID0gMTQwOwotCQllbHNlCi0JCQlyZWcgPSA2MDsKLQkJYnJlYWs7Ci0KLQljYXNlIEJVWl9NT0RFX1NUSUxMX0RFQ09NUFJFU1M6Ci0JY2FzZSBCVVpfTU9ERV9NT1RJT05fREVDT01QUkVTUzoKLQkJcmVnID0gMjA7Ci0JCWJyZWFrOwotCi0JZGVmYXVsdDoKLQkJcmVnID0gODA7Ci0JCWJyZWFrOwotCi0JfQotCWJ0d3JpdGUocmVnLCBaUjM2MDU3X0pDRlQpOwotCXpyMzYwNTdfYWRqdXN0X3ZmZSh6ciwgbW9kZSk7Ci0KLX0KLQotdm9pZAotcHJpbnRfaW50ZXJydXB0cyAoc3RydWN0IHpvcmFuICp6cikKLXsKLQlpbnQgcmVzLCBub2VyciA9IDA7Ci0KLQlwcmludGsoS0VSTl9JTkZPICIlczogaW50ZXJydXB0cyByZWNlaXZlZDoiLCBaUl9ERVZOQU1FKHpyKSk7Ci0JaWYgKChyZXMgPSB6ci0+ZmllbGRfY291bnRlcikgPCAtMSB8fCByZXMgPiAxKSB7Ci0JCXByaW50aygiIEZEOiVkIiwgcmVzKTsKLQl9Ci0JaWYgKChyZXMgPSB6ci0+aW50cl9jb3VudGVyX0dJUlExKSAhPSAwKSB7Ci0JCXByaW50aygiIEdJUlExOiVkIiwgcmVzKTsKLQkJbm9lcnIrKzsKLQl9Ci0JaWYgKChyZXMgPSB6ci0+aW50cl9jb3VudGVyX0dJUlEwKSAhPSAwKSB7Ci0JCXByaW50aygiIEdJUlEwOiVkIiwgcmVzKTsKLQkJbm9lcnIrKzsKLQl9Ci0JaWYgKChyZXMgPSB6ci0+aW50cl9jb3VudGVyX0NvZFJlcElSUSkgIT0gMCkgewotCQlwcmludGsoIiBDb2RSZXBJUlE6JWQiLCByZXMpOwotCQlub2VycisrOwotCX0KLQlpZiAoKHJlcyA9IHpyLT5pbnRyX2NvdW50ZXJfSlBFR1JlcElSUSkgIT0gMCkgewotCQlwcmludGsoIiBKUEVHUmVwSVJROiVkIiwgcmVzKTsKLQkJbm9lcnIrKzsKLQl9Ci0JaWYgKHpyLT5KUEVHX21heF9taXNzZWQpIHsKLQkJcHJpbnRrKCIgSlBFRyBkZWxheXM6IG1heD0lZCBtaW49JWQiLCB6ci0+SlBFR19tYXhfbWlzc2VkLAotCQkgICAgICAgenItPkpQRUdfbWluX21pc3NlZCk7Ci0JfQotCWlmICh6ci0+RU5EX2V2ZW50X21pc3NlZCkgewotCQlwcmludGsoIiBFTkRzIG1pc3NlZDogJWQiLCB6ci0+RU5EX2V2ZW50X21pc3NlZCk7Ci0JfQotCS8vaWYgKHpyLT5qcGdfcXVldWVkX251bSkgewotCXByaW50aygiIHF1ZXVlX3N0YXRlPSVsZC8lbGQvJWxkLyVsZCIsIHpyLT5qcGdfcXVlX3RhaWwsCi0JICAgICAgIHpyLT5qcGdfZG1hX3RhaWwsIHpyLT5qcGdfZG1hX2hlYWQsIHpyLT5qcGdfcXVlX2hlYWQpOwotCS8vfQotCWlmICghbm9lcnIpIHsKLQkJcHJpbnRrKCI6IG5vIGludGVycnVwdHMgZGV0ZWN0ZWQuIik7Ci0JfQotCXByaW50aygiXG4iKTsKLX0KLQotdm9pZAotY2xlYXJfaW50ZXJydXB0X2NvdW50ZXJzIChzdHJ1Y3Qgem9yYW4gKnpyKQotewotCXpyLT5pbnRyX2NvdW50ZXJfR0lSUTEgPSAwOwotCXpyLT5pbnRyX2NvdW50ZXJfR0lSUTAgPSAwOwotCXpyLT5pbnRyX2NvdW50ZXJfQ29kUmVwSVJRID0gMDsKLQl6ci0+aW50cl9jb3VudGVyX0pQRUdSZXBJUlEgPSAwOwotCXpyLT5maWVsZF9jb3VudGVyID0gMDsKLQl6ci0+SVJRMV9pbiA9IDA7Ci0JenItPklSUTFfb3V0ID0gMDsKLQl6ci0+SlBFR19pbiA9IDA7Ci0JenItPkpQRUdfb3V0ID0gMDsKLQl6ci0+SlBFR18wID0gMDsKLQl6ci0+SlBFR18xID0gMDsKLQl6ci0+RU5EX2V2ZW50X21pc3NlZCA9IDA7Ci0JenItPkpQRUdfbWlzc2VkID0gMDsKLQl6ci0+SlBFR19tYXhfbWlzc2VkID0gMDsKLQl6ci0+SlBFR19taW5fbWlzc2VkID0gMHg3ZmZmZmZmZjsKLX0KLQotc3RhdGljIHUzMgotY291bnRfcmVzZXRfaW50ZXJydXB0IChzdHJ1Y3Qgem9yYW4gKnpyKQotewotCXUzMiBpc3I7Ci0KLQlpZiAoKGlzciA9IGJ0cmVhZChaUjM2MDU3X0lTUikgJiAweDc4MDAwMDAwKSkgewotCQlpZiAoaXNyICYgWlIzNjA1N19JU1JfR0lSUTEpIHsKLQkJCWJ0d3JpdGUoWlIzNjA1N19JU1JfR0lSUTEsIFpSMzYwNTdfSVNSKTsKLQkJCXpyLT5pbnRyX2NvdW50ZXJfR0lSUTErKzsKLQkJfQotCQlpZiAoaXNyICYgWlIzNjA1N19JU1JfR0lSUTApIHsKLQkJCWJ0d3JpdGUoWlIzNjA1N19JU1JfR0lSUTAsIFpSMzYwNTdfSVNSKTsKLQkJCXpyLT5pbnRyX2NvdW50ZXJfR0lSUTArKzsKLQkJfQotCQlpZiAoaXNyICYgWlIzNjA1N19JU1JfQ29kUmVwSVJRKSB7Ci0JCQlidHdyaXRlKFpSMzYwNTdfSVNSX0NvZFJlcElSUSwgWlIzNjA1N19JU1IpOwotCQkJenItPmludHJfY291bnRlcl9Db2RSZXBJUlErKzsKLQkJfQotCQlpZiAoaXNyICYgWlIzNjA1N19JU1JfSlBFR1JlcElSUSkgewotCQkJYnR3cml0ZShaUjM2MDU3X0lTUl9KUEVHUmVwSVJRLCBaUjM2MDU3X0lTUik7Ci0JCQl6ci0+aW50cl9jb3VudGVyX0pQRUdSZXBJUlErKzsKLQkJfQotCX0KLQlyZXR1cm4gaXNyOwotfQotCi12b2lkCi1qcGVnX3N0YXJ0IChzdHJ1Y3Qgem9yYW4gKnpyKQotewotCWludCByZWc7Ci0KLQl6ci0+ZnJhbWVfbnVtID0gMDsKLQotCS8qIGRlYXNzZXJ0IFBfcmVzZXQsIGRpc2FibGUgY29kZSB0cmFuc2ZlciwgZGVhc3NlcnQgQWN0aXZlICovCi0JYnR3cml0ZShaUjM2MDU3X0pQQ19QX1Jlc2V0LCBaUjM2MDU3X0pQQyk7Ci0JLyogc3RvcCBmbHVzaGluZyB0aGUgaW50ZXJuYWwgY29kZSBidWZmZXIgKi8KLQlidGFuZCh+WlIzNjA1N19NQ1RDUl9DRmx1c2gsIFpSMzYwNTdfTUNUQ1IpOwotCS8qIGVuYWJsZSBjb2RlIHRyYW5zZmVyICovCi0JYnRvcihaUjM2MDU3X0pQQ19Db2RUcm5zRW4sIFpSMzYwNTdfSlBDKTsKLQotCS8qIGNsZWFyIElSUXMgKi8KLQlidHdyaXRlKElSUV9NQVNLLCBaUjM2MDU3X0lTUik7Ci0JLyogZW5hYmxlIHRoZSBKUEVHIElSUXMgKi8KLQlidHdyaXRlKHpyLT5jYXJkLmpwZWdfaW50IHwKLQkJCVpSMzYwNTdfSUNSX0pQRUdSZXBJUlEgfAotCQkJWlIzNjA1N19JQ1JfSW50UGluRW4sCi0JCVpSMzYwNTdfSUNSKTsKLQotCXNldF9mcmFtZSh6ciwgMCk7CS8vIFxGUkFNRQotCi0JLyogc2V0IHRoZSBKUEVHIGNvZGVjIGd1ZXN0IElEICovCi0JcmVnID0gKHpyLT5jYXJkLmdwY3NbMV0gPDwgWlIzNjA1N19KQ0dJX0pQRUd1ZXN0SUQpIHwKLQkgICAgICAgKDAgPDwgWlIzNjA1N19KQ0dJX0pQRUd1ZXN0UmVnKTsKLQlidHdyaXRlKHJlZywgWlIzNjA1N19KQ0dJKTsKLQotCWlmICh6ci0+Y2FyZC52aWRlb192ZmUgPT0gQ09ERUNfVFlQRV9aUjM2MDE2ICYmCi0JICAgIHpyLT5jYXJkLnZpZGVvX2NvZGVjID09IENPREVDX1RZUEVfWlIzNjA1MCkgewotCQkvKiBFbmFibGUgcHJvY2Vzc2luZyBvbiB0aGUgWlIzNjAxNiAqLwotCQlpZiAoenItPnZmZSkKLQkJCXpyMzYwMTZfd3JpdGUoenItPnZmZSwgMCwgMSk7Ci0KLQkJLyogbG9hZCB0aGUgYWRkcmVzcyBvZiB0aGUgR08gcmVnaXN0ZXIgaW4gdGhlIFpSMzYwNTAgbGF0Y2ggKi8KLQkJcG9zdF9vZmZpY2Vfd3JpdGUoenIsIDAsIDAsIDApOwotCX0KLQotCS8qIGFzc2VydCBBY3RpdmUgKi8KLQlidG9yKFpSMzYwNTdfSlBDX0FjdGl2ZSwgWlIzNjA1N19KUEMpOwotCi0JLyogZW5hYmxlIHRoZSBHbyBnZW5lcmF0aW9uICovCi0JYnRvcihaUjM2MDU3X0pNQ19Hb19lbiwgWlIzNjA1N19KTUMpOwotCXVkZWxheSgzMCk7Ci0KLQlzZXRfZnJhbWUoenIsIDEpOwkvLyAvRlJBTUUKLQotCWRwcmludGsoMywgS0VSTl9ERUJVRyAiJXM6IGpwZWdfc3RhcnRcbiIsIFpSX0RFVk5BTUUoenIpKTsKLX0KLQotdm9pZAotenIzNjA1N19lbmFibGVfanBnIChzdHJ1Y3Qgem9yYW4gICAgICAgICAgKnpyLAotCQkgICAgZW51bSB6b3Jhbl9jb2RlY19tb2RlICBtb2RlKQotewotCXN0YXRpYyBpbnQgemVybzsKLQlzdGF0aWMgaW50IG9uZSA9IDE7Ci0Jc3RydWN0IHZmZV9zZXR0aW5ncyBjYXA7Ci0JaW50IGZpZWxkX3NpemUgPQotCSAgICB6ci0+anBnX2J1ZmZlcnMuYnVmZmVyX3NpemUgLyB6ci0+anBnX3NldHRpbmdzLmZpZWxkX3Blcl9idWZmOwotCi0JenItPmNvZGVjX21vZGUgPSBtb2RlOwotCi0JY2FwLnggPSB6ci0+anBnX3NldHRpbmdzLmltZ194OwotCWNhcC55ID0genItPmpwZ19zZXR0aW5ncy5pbWdfeTsKLQljYXAud2lkdGggPSB6ci0+anBnX3NldHRpbmdzLmltZ193aWR0aDsKLQljYXAuaGVpZ2h0ID0genItPmpwZ19zZXR0aW5ncy5pbWdfaGVpZ2h0OwotCWNhcC5kZWNpbWF0aW9uID0KLQkgICAgenItPmpwZ19zZXR0aW5ncy5Ib3JEY20gfCAoenItPmpwZ19zZXR0aW5ncy5WZXJEY20gPDwgOCk7Ci0JY2FwLnF1YWxpdHkgPSB6ci0+anBnX3NldHRpbmdzLmpwZ19jb21wLnF1YWxpdHk7Ci0KLQlzd2l0Y2ggKG1vZGUpIHsKLQotCWNhc2UgQlVaX01PREVfTU9USU9OX0NPTVBSRVNTOiB7Ci0JCXN0cnVjdCBqcGVnX2FwcF9tYXJrZXIgYXBwOwotCQlzdHJ1Y3QganBlZ19jb21fbWFya2VyIGNvbTsKLQotCQkvKiBJbiBtb3Rpb24gY29tcHJlc3MgbW9kZSwgdGhlIGRlY29kZXIgb3V0cHV0IG11c3QgYmUgZW5hYmxlZCwgYW5kCi0JCSAqIHRoZSB2aWRlbyBidXMgZGlyZWN0aW9uIHNldCB0byBpbnB1dC4KLQkJICovCi0JCXNldF92aWRlb2J1c19kaXIoenIsIDApOwotCQlkZWNvZGVyX2NvbW1hbmQoenIsIERFQ09ERVJfRU5BQkxFX09VVFBVVCwgJm9uZSk7Ci0JCWVuY29kZXJfY29tbWFuZCh6ciwgRU5DT0RFUl9TRVRfSU5QVVQsICZ6ZXJvKTsKLQotCQkvKiBUYWtlIHRoZSBKUEVHIGNvZGVjIGFuZCB0aGUgVkZFIG91dCBvZiBzbGVlcCAqLwotCQlqcGVnX2NvZGVjX3NsZWVwKHpyLCAwKTsKLQotCQkvKiBzZXQgSlBFRyBhcHAvY29tIG1hcmtlciAqLwotCQlhcHAuYXBwbiA9IHpyLT5qcGdfc2V0dGluZ3MuanBnX2NvbXAuQVBQbjsKLQkJYXBwLmxlbiA9IHpyLT5qcGdfc2V0dGluZ3MuanBnX2NvbXAuQVBQX2xlbjsKLQkJbWVtY3B5KGFwcC5kYXRhLCB6ci0+anBnX3NldHRpbmdzLmpwZ19jb21wLkFQUF9kYXRhLCA2MCk7Ci0JCXpyLT5jb2RlYy0+Y29udHJvbCh6ci0+Y29kZWMsIENPREVDX1NfSlBFR19BUFBfREFUQSwKLQkJCQkgICBzaXplb2Yoc3RydWN0IGpwZWdfYXBwX21hcmtlciksICZhcHApOwotCi0JCWNvbS5sZW4gPSB6ci0+anBnX3NldHRpbmdzLmpwZ19jb21wLkNPTV9sZW47Ci0JCW1lbWNweShjb20uZGF0YSwgenItPmpwZ19zZXR0aW5ncy5qcGdfY29tcC5DT01fZGF0YSwgNjApOwotCQl6ci0+Y29kZWMtPmNvbnRyb2woenItPmNvZGVjLCBDT0RFQ19TX0pQRUdfQ09NX0RBVEEsCi0JCQkJICAgc2l6ZW9mKHN0cnVjdCBqcGVnX2NvbV9tYXJrZXIpLCAmY29tKTsKLQotCQkvKiBTZXR1cCB0aGUgSlBFRyBjb2RlYyAqLwotCQl6ci0+Y29kZWMtPmNvbnRyb2woenItPmNvZGVjLCBDT0RFQ19TX0pQRUdfVERTX0JZVEUsCi0JCQkJICAgc2l6ZW9mKGludCksICZmaWVsZF9zaXplKTsKLQkJenItPmNvZGVjLT5zZXRfdmlkZW8oenItPmNvZGVjLCB6ci0+dGltaW5nLCAmY2FwLAotCQkJCSAgICAgJnpyLT5jYXJkLnZmZV9wb2wpOwotCQl6ci0+Y29kZWMtPnNldF9tb2RlKHpyLT5jb2RlYywgQ09ERUNfRE9fQ09NUFJFU1NJT04pOwotCi0JCS8qIFNldHVwIHRoZSBWRkUgKi8KLQkJaWYgKHpyLT52ZmUpIHsKLQkJCXpyLT52ZmUtPmNvbnRyb2woenItPnZmZSwgQ09ERUNfU19KUEVHX1REU19CWVRFLAotCQkJCQkgc2l6ZW9mKGludCksICZmaWVsZF9zaXplKTsKLQkJCXpyLT52ZmUtPnNldF92aWRlbyh6ci0+dmZlLCB6ci0+dGltaW5nLCAmY2FwLAotCQkJCQkgICAmenItPmNhcmQudmZlX3BvbCk7Ci0JCQl6ci0+dmZlLT5zZXRfbW9kZSh6ci0+dmZlLCBDT0RFQ19ET19DT01QUkVTU0lPTik7Ci0JCX0KLQotCQlpbml0X2pwZWdfcXVldWUoenIpOwotCQl6cjM2MDU3X3NldF9qcGcoenIsIG1vZGUpOwkvLyBcUF9SZXNldCwgLi4uIFZpZGVvIHBhcmFtLCBGSUZPCi0KLQkJY2xlYXJfaW50ZXJydXB0X2NvdW50ZXJzKHpyKTsKLQkJZHByaW50aygyLCBLRVJOX0lORk8gIiVzOiBlbmFibGVfanBnKE1PVElPTl9DT01QUkVTUylcbiIsCi0JCQlaUl9ERVZOQU1FKHpyKSk7Ci0JCWJyZWFrOwotCX0KLQotCWNhc2UgQlVaX01PREVfTU9USU9OX0RFQ09NUFJFU1M6Ci0JCS8qIEluIG1vdGlvbiBkZWNvbXByZXNzaW9uIG1vZGUsIHRoZSBkZWNvZGVyIG91dHB1dCBtdXN0IGJlIGRpc2FibGVkLCBhbmQKLQkJICogdGhlIHZpZGVvIGJ1cyBkaXJlY3Rpb24gc2V0IHRvIG91dHB1dC4KLQkJICovCi0JCWRlY29kZXJfY29tbWFuZCh6ciwgREVDT0RFUl9FTkFCTEVfT1VUUFVULCAmemVybyk7Ci0JCXNldF92aWRlb2J1c19kaXIoenIsIDEpOwotCQllbmNvZGVyX2NvbW1hbmQoenIsIEVOQ09ERVJfU0VUX0lOUFVULCAmb25lKTsKLQotCQkvKiBUYWtlIHRoZSBKUEVHIGNvZGVjIGFuZCB0aGUgVkZFIG91dCBvZiBzbGVlcCAqLwotCQlqcGVnX2NvZGVjX3NsZWVwKHpyLCAwKTsKLQkJLyogU2V0dXAgdGhlIFZGRSAqLwotCQlpZiAoenItPnZmZSkgewotCQkJenItPnZmZS0+c2V0X3ZpZGVvKHpyLT52ZmUsIHpyLT50aW1pbmcsICZjYXAsCi0JCQkJCSAgICZ6ci0+Y2FyZC52ZmVfcG9sKTsKLQkJCXpyLT52ZmUtPnNldF9tb2RlKHpyLT52ZmUsIENPREVDX0RPX0VYUEFOU0lPTik7Ci0JCX0KLQkJLyogU2V0dXAgdGhlIEpQRUcgY29kZWMgKi8KLQkJenItPmNvZGVjLT5zZXRfdmlkZW8oenItPmNvZGVjLCB6ci0+dGltaW5nLCAmY2FwLAotCQkJCSAgICAgJnpyLT5jYXJkLnZmZV9wb2wpOwotCQl6ci0+Y29kZWMtPnNldF9tb2RlKHpyLT5jb2RlYywgQ09ERUNfRE9fRVhQQU5TSU9OKTsKLQotCQlpbml0X2pwZWdfcXVldWUoenIpOwotCQl6cjM2MDU3X3NldF9qcGcoenIsIG1vZGUpOwkvLyBcUF9SZXNldCwgLi4uIFZpZGVvIHBhcmFtLCBGSUZPCi0KLQkJY2xlYXJfaW50ZXJydXB0X2NvdW50ZXJzKHpyKTsKLQkJZHByaW50aygyLCBLRVJOX0lORk8gIiVzOiBlbmFibGVfanBnKE1PVElPTl9ERUNPTVBSRVNTKVxuIiwKLQkJCVpSX0RFVk5BTUUoenIpKTsKLQkJYnJlYWs7Ci0KLQljYXNlIEJVWl9NT0RFX0lETEU6Ci0JZGVmYXVsdDoKLQkJLyogc2h1dCBkb3duIHByb2Nlc3NpbmcgKi8KLQkJYnRhbmQofih6ci0+Y2FyZC5qcGVnX2ludCB8IFpSMzYwNTdfSUNSX0pQRUdSZXBJUlEpLAotCQkgICAgICBaUjM2MDU3X0lDUik7Ci0JCWJ0d3JpdGUoenItPmNhcmQuanBlZ19pbnQgfCBaUjM2MDU3X0lDUl9KUEVHUmVwSVJRLAotCQkJWlIzNjA1N19JU1IpOwotCQlidGFuZCh+WlIzNjA1N19KTUNfR29fZW4sIFpSMzYwNTdfSk1DKTsJLy8gXEdvX2VuCi0KLQkJbXNsZWVwKDUwKTsKLQotCQlzZXRfdmlkZW9idXNfZGlyKHpyLCAwKTsKLQkJc2V0X2ZyYW1lKHpyLCAxKTsJLy8gL0ZSQU1FCi0JCWJ0b3IoWlIzNjA1N19NQ1RDUl9DRmx1c2gsIFpSMzYwNTdfTUNUQ1IpOwkvLyAvQ0ZsdXNoCi0JCWJ0d3JpdGUoMCwgWlIzNjA1N19KUEMpOwkvLyBcUF9SZXNldCxcQ29kVHJuc0VuLFxBY3RpdmUKLQkJYnRhbmQoflpSMzYwNTdfSk1DX1ZGSUZPX0ZCLCBaUjM2MDU3X0pNQyk7Ci0JCWJ0YW5kKH5aUjM2MDU3X0pNQ19TeW5jTXN0ciwgWlIzNjA1N19KTUMpOwotCQlqcGVnX2NvZGVjX3Jlc2V0KHpyKTsKLQkJanBlZ19jb2RlY19zbGVlcCh6ciwgMSk7Ci0JCXpyMzYwNTdfYWRqdXN0X3ZmZSh6ciwgbW9kZSk7Ci0KLQkJZGVjb2Rlcl9jb21tYW5kKHpyLCBERUNPREVSX0VOQUJMRV9PVVRQVVQsICZvbmUpOwotCQllbmNvZGVyX2NvbW1hbmQoenIsIEVOQ09ERVJfU0VUX0lOUFVULCAmemVybyk7Ci0KLQkJZHByaW50aygyLCBLRVJOX0lORk8gIiVzOiBlbmFibGVfanBnKElETEUpXG4iLCBaUl9ERVZOQU1FKHpyKSk7Ci0JCWJyZWFrOwotCi0JfQotfQotCi0vKiB3aGVuIHRoaXMgaXMgY2FsbGVkIHRoZSBzcGlubG9jayBtdXN0IGJlIGhlbGQgKi8KLXZvaWQKLXpvcmFuX2ZlZWRfc3RhdF9jb20gKHN0cnVjdCB6b3JhbiAqenIpCi17Ci0JLyogbW92ZSBmcmFtZXMgZnJvbSBwZW5kaW5nIHF1ZXVlIHRvIERNQSAqLwotCi0JaW50IGZyYW1lLCBpLCBtYXhfc3RhdF9jb207Ci0KLQltYXhfc3RhdF9jb20gPQotCSAgICAoenItPmpwZ19zZXR0aW5ncy5UbXBEY20gPT0KLQkgICAgIDEpID8gQlVaX05VTV9TVEFUX0NPTSA6IChCVVpfTlVNX1NUQVRfQ09NID4+IDEpOwotCi0Jd2hpbGUgKCh6ci0+anBnX2RtYV9oZWFkIC0genItPmpwZ19kbWFfdGFpbCkgPCBtYXhfc3RhdF9jb20gJiYKLQkgICAgICAgenItPmpwZ19kbWFfaGVhZCA8IHpyLT5qcGdfcXVlX2hlYWQpIHsKLQotCQlmcmFtZSA9IHpyLT5qcGdfcGVuZFt6ci0+anBnX2RtYV9oZWFkICYgQlVaX01BU0tfRlJBTUVdOwotCQlpZiAoenItPmpwZ19zZXR0aW5ncy5UbXBEY20gPT0gMSkgewotCQkJLyogZmlsbCAxIHN0YXRfY29tIGVudHJ5ICovCi0JCQlpID0gKHpyLT5qcGdfZG1hX2hlYWQgLQotCQkJICAgICB6ci0+anBnX2Vycl9zaGlmdCkgJiBCVVpfTUFTS19TVEFUX0NPTTsKLQkJCWlmICghKHpyLT5zdGF0X2NvbVtpXSAmIGNwdV90b19sZTMyKDEpKSkKLQkJCQlicmVhazsKLQkJCXpyLT5zdGF0X2NvbVtpXSA9Ci0JCQkgICAgY3B1X3RvX2xlMzIoenItPmpwZ19idWZmZXJzLmJ1ZmZlcltmcmFtZV0uZnJhZ190YWJfYnVzKTsKLQkJfSBlbHNlIHsKLQkJCS8qIGZpbGwgMiBzdGF0X2NvbSBlbnRyaWVzICovCi0JCQlpID0gKCh6ci0+anBnX2RtYV9oZWFkIC0KLQkJCSAgICAgIHpyLT5qcGdfZXJyX3NoaWZ0KSAmIDEpICogMjsKLQkJCWlmICghKHpyLT5zdGF0X2NvbVtpXSAmIGNwdV90b19sZTMyKDEpKSkKLQkJCQlicmVhazsKLQkJCXpyLT5zdGF0X2NvbVtpXSA9Ci0JCQkgICAgY3B1X3RvX2xlMzIoenItPmpwZ19idWZmZXJzLmJ1ZmZlcltmcmFtZV0uZnJhZ190YWJfYnVzKTsKLQkJCXpyLT5zdGF0X2NvbVtpICsgMV0gPQotCQkJICAgIGNwdV90b19sZTMyKHpyLT5qcGdfYnVmZmVycy5idWZmZXJbZnJhbWVdLmZyYWdfdGFiX2J1cyk7Ci0JCX0KLQkJenItPmpwZ19idWZmZXJzLmJ1ZmZlcltmcmFtZV0uc3RhdGUgPSBCVVpfU1RBVEVfRE1BOwotCQl6ci0+anBnX2RtYV9oZWFkKys7Ci0KLQl9Ci0JaWYgKHpyLT5jb2RlY19tb2RlID09IEJVWl9NT0RFX01PVElPTl9ERUNPTVBSRVNTKQotCQl6ci0+anBnX3F1ZXVlZF9udW0rKzsKLX0KLQotLyogd2hlbiB0aGlzIGlzIGNhbGxlZCB0aGUgc3BpbmxvY2sgbXVzdCBiZSBoZWxkICovCi1zdGF0aWMgdm9pZAotem9yYW5fcmVhcF9zdGF0X2NvbSAoc3RydWN0IHpvcmFuICp6cikKLXsKLQkvKiBtb3ZlIGZyYW1lcyBmcm9tIERNQSBxdWV1ZSB0byBkb25lIHF1ZXVlICovCi0KLQlpbnQgaTsKLQl1MzIgc3RhdF9jb207Ci0JdW5zaWduZWQgaW50IHNlcTsKLQl1bnNpZ25lZCBpbnQgZGlmOwotCXN0cnVjdCB6b3Jhbl9qcGdfYnVmZmVyICpidWZmZXI7Ci0JaW50IGZyYW1lOwotCi0JLyogSW4gbW90aW9uIGRlY29tcHJlc3Mgd2UgZG9uJ3QgaGF2ZSBhIGhhcmR3YXJlIGZyYW1lIGNvdW50ZXIsCi0JICogd2UganVzdCBjb3VudCB0aGUgaW50ZXJydXB0cyBoZXJlICovCi0KLQlpZiAoenItPmNvZGVjX21vZGUgPT0gQlVaX01PREVfTU9USU9OX0RFQ09NUFJFU1MpIHsKLQkJenItPmpwZ19zZXFfbnVtKys7Ci0JfQotCXdoaWxlICh6ci0+anBnX2RtYV90YWlsIDwgenItPmpwZ19kbWFfaGVhZCkgewotCQlpZiAoenItPmpwZ19zZXR0aW5ncy5UbXBEY20gPT0gMSkKLQkJCWkgPSAoenItPmpwZ19kbWFfdGFpbCAtCi0JCQkgICAgIHpyLT5qcGdfZXJyX3NoaWZ0KSAmIEJVWl9NQVNLX1NUQVRfQ09NOwotCQllbHNlCi0JCQlpID0gKCh6ci0+anBnX2RtYV90YWlsIC0KLQkJCSAgICAgIHpyLT5qcGdfZXJyX3NoaWZ0KSAmIDEpICogMiArIDE7Ci0KLQkJc3RhdF9jb20gPSBsZTMyX3RvX2NwdSh6ci0+c3RhdF9jb21baV0pOwotCi0JCWlmICgoc3RhdF9jb20gJiAxKSA9PSAwKSB7Ci0JCQlyZXR1cm47Ci0JCX0KLQkJZnJhbWUgPSB6ci0+anBnX3BlbmRbenItPmpwZ19kbWFfdGFpbCAmIEJVWl9NQVNLX0ZSQU1FXTsKLQkJYnVmZmVyID0gJnpyLT5qcGdfYnVmZmVycy5idWZmZXJbZnJhbWVdOwotCQlkb19nZXR0aW1lb2ZkYXkoJmJ1ZmZlci0+YnMudGltZXN0YW1wKTsKLQotCQlpZiAoenItPmNvZGVjX21vZGUgPT0gQlVaX01PREVfTU9USU9OX0NPTVBSRVNTKSB7Ci0JCQlidWZmZXItPmJzLmxlbmd0aCA9IChzdGF0X2NvbSAmIDB4N2ZmZmZmKSA+PiAxOwotCi0JCQkvKiB1cGRhdGUgc2VxdWVuY2UgbnVtYmVyIHdpdGggdGhlIGhlbHAgb2YgdGhlIGNvdW50ZXIgaW4gc3RhdF9jb20gKi8KLQotCQkJc2VxID0gKChzdGF0X2NvbSA+PiAyNCkgKyB6ci0+anBnX2Vycl9zZXEpICYgMHhmZjsKLQkJCWRpZiA9IChzZXEgLSB6ci0+anBnX3NlcV9udW0pICYgMHhmZjsKLQkJCXpyLT5qcGdfc2VxX251bSArPSBkaWY7Ci0JCX0gZWxzZSB7Ci0JCQlidWZmZXItPmJzLmxlbmd0aCA9IDA7Ci0JCX0KLQkJYnVmZmVyLT5icy5zZXEgPQotCQkgICAgenItPmpwZ19zZXR0aW5ncy5UbXBEY20gPT0KLQkJICAgIDIgPyAoenItPmpwZ19zZXFfbnVtID4+IDEpIDogenItPmpwZ19zZXFfbnVtOwotCQlidWZmZXItPnN0YXRlID0gQlVaX1NUQVRFX0RPTkU7Ci0KLQkJenItPmpwZ19kbWFfdGFpbCsrOwotCX0KLX0KLQotc3RhdGljIHZvaWQKLWVycm9yX2hhbmRsZXIgKHN0cnVjdCB6b3JhbiAqenIsCi0JICAgICAgIHUzMiAgICAgICAgICAgYXN0YXQsCi0JICAgICAgIHUzMiAgICAgICAgICAgc3RhdCkKLXsKLQkvKiBUaGlzIGlzIEpQRUcgZXJyb3IgaGFuZGxpbmcgcGFydCAqLwotCWlmICgoenItPmNvZGVjX21vZGUgIT0gQlVaX01PREVfTU9USU9OX0NPTVBSRVNTKSAmJgotCSAgICAoenItPmNvZGVjX21vZGUgIT0gQlVaX01PREVfTU9USU9OX0RFQ09NUFJFU1MpKSB7Ci0JCS8vZHByaW50aygxLCBLRVJOX0VSUiAiJXM6IEludGVybmFsIGVycm9yOiBlcnJvciBoYW5kbGluZyByZXF1ZXN0IGluIG1vZGUgJWRcbiIsIFpSX0RFVk5BTUUoenIpLCB6ci0+Y29kZWNfbW9kZSk7Ci0JCXJldHVybjsKLQl9Ci0KLQlpZiAoKHN0YXQgJiAxKSA9PSAwICYmCi0JICAgIHpyLT5jb2RlY19tb2RlID09IEJVWl9NT0RFX01PVElPTl9DT01QUkVTUyAmJgotCSAgICB6ci0+anBnX2RtYV90YWlsIC0genItPmpwZ19xdWVfdGFpbCA+PQotCSAgICAgenItPmpwZ19idWZmZXJzLm51bV9idWZmZXJzKSB7Ci0JCS8qIE5vIGZyZWUgYnVmZmVycy4uLiAqLwotCQl6b3Jhbl9yZWFwX3N0YXRfY29tKHpyKTsKLQkJem9yYW5fZmVlZF9zdGF0X2NvbSh6cik7Ci0JCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmenItPmpwZ19jYXBxKTsKLQkJenItPkpQRUdfbWlzc2VkID0gMDsKLQkJcmV0dXJuOwotCX0KLQotCWlmICh6ci0+SlBFR19lcnJvciAhPSAxKSB7Ci0JCS8qCi0JCSAqIEZpcnN0IGVudHJ5OiBlcnJvciBqdXN0IGhhcHBlbmVkIGR1cmluZyBub3JtYWwgb3BlcmF0aW9uCi0JCSAqCi0JCSAqIEluIEJVWl9NT0RFX01PVElPTl9DT01QUkVTUzoKLQkJICoKLQkJICogUG9zc2libGUgZ2xpdGNoIGluIFRWIHNpZ25hbC4gSW4gdGhpcyBjYXNlIHdlIHNob3VsZAotCQkgKiBzdG9wIHRoZSBjb2RlYyBhbmQgd2FpdCBmb3IgZ29vZCBxdWFsaXR5IHNpZ25hbCBiZWZvcmUKLQkJICogcmVzdGFydGluZyBpdCB0byBhdm9pZCBmdXJ0aGVyIHByb2JsZW1zCi0JCSAqCi0JCSAqIEluIEJVWl9NT0RFX01PVElPTl9ERUNPTVBSRVNTOgotCQkgKgotCQkgKiBCYWQgSlBFRyBmcmFtZTogd2UgaGF2ZSB0byBtYXJrIGl0IGFzIHByb2Nlc3NlZCAoY29kZWMgY3Jhc2hlZAotCQkgKiBhbmQgd2FzIG5vdCBhYmxlIHRvIGRvIGl0IGl0c2VsZiksIGFuZCB0byByZW1vdmUgaXQgZnJvbSBxdWV1ZS4KLQkJICovCi0JCWJ0YW5kKH5aUjM2MDU3X0pNQ19Hb19lbiwgWlIzNjA1N19KTUMpOwotCQl1ZGVsYXkoMSk7Ci0JCXN0YXQgPSBzdGF0IHwgKHBvc3Rfb2ZmaWNlX3JlYWQoenIsIDcsIDApICYgMykgPDwgODsKLQkJYnR3cml0ZSgwLCBaUjM2MDU3X0pQQyk7Ci0JCWJ0b3IoWlIzNjA1N19NQ1RDUl9DRmx1c2gsIFpSMzYwNTdfTUNUQ1IpOwotCQlqcGVnX2NvZGVjX3Jlc2V0KHpyKTsKLQkJanBlZ19jb2RlY19zbGVlcCh6ciwgMSk7Ci0JCXpyLT5KUEVHX2Vycm9yID0gMTsKLQkJenItPm51bV9lcnJvcnMrKzsKLQotCQkvKiBSZXBvcnQgZXJyb3IgKi8KLQkJaWYgKHpyMzYwNjdfZGVidWcgPiAxICYmIHpyLT5udW1fZXJyb3JzIDw9IDgpIHsKLQkJCWxvbmcgZnJhbWU7Ci0JCQlmcmFtZSA9Ci0JCQkgICAgenItPmpwZ19wZW5kW3pyLT5qcGdfZG1hX3RhaWwgJiBCVVpfTUFTS19GUkFNRV07Ci0JCQlwcmludGsoS0VSTl9FUlIKLQkJCSAgICAgICAiJXM6IEpQRUcgZXJyb3Igc3RhdD0weCUwOHgoMHglMDh4KSBxdWV1ZV9zdGF0ZT0lbGQvJWxkLyVsZC8lbGQgc2VxPSVsZCBmcmFtZT0lbGQuIENvZGVjIHN0b3BwZWQuICIsCi0JCQkgICAgICAgWlJfREVWTkFNRSh6ciksIHN0YXQsIHpyLT5sYXN0X2lzciwKLQkJCSAgICAgICB6ci0+anBnX3F1ZV90YWlsLCB6ci0+anBnX2RtYV90YWlsLAotCQkJICAgICAgIHpyLT5qcGdfZG1hX2hlYWQsIHpyLT5qcGdfcXVlX2hlYWQsCi0JCQkgICAgICAgenItPmpwZ19zZXFfbnVtLCBmcmFtZSk7Ci0JCQlwcmludGsoInN0YXRfY29tIGZyYW1lczoiKTsKLQkJCXsKLQkJCQlpbnQgaSwgajsKLQkJCQlmb3IgKGogPSAwOyBqIDwgQlVaX05VTV9TVEFUX0NPTTsgaisrKSB7Ci0JCQkJCWZvciAoaSA9IDA7Ci0JCQkJCSAgICAgaSA8IHpyLT5qcGdfYnVmZmVycy5udW1fYnVmZmVyczsKLQkJCQkJICAgICBpKyspIHsKLQkJCQkJCWlmIChsZTMyX3RvX2NwdSh6ci0+c3RhdF9jb21bal0pID09Ci0JCQkJCQkgICAgenItPmpwZ19idWZmZXJzLgotCQkJCQkJICAgIGJ1ZmZlcltpXS4KLQkJCQkJCSAgICBmcmFnX3RhYl9idXMpIHsKLQkJCQkJCQlwcmludGsoIiUgZC0+JWQiLAotCQkJCQkJCSAgICAgICBqLCBpKTsKLQkJCQkJCX0KLQkJCQkJfQotCQkJCX0KLQkJCQlwcmludGsoIlxuIik7Ci0JCQl9Ci0JCX0KLQkJLyogRmluZCBhbiBlbnRyeSBpbiBzdGF0X2NvbSBhbmQgcm90YXRlIGNvbnRlbnRzICovCi0JCXsKLQkJCWludCBpOwotCi0JCQlpZiAoenItPmpwZ19zZXR0aW5ncy5UbXBEY20gPT0gMSkKLQkJCQlpID0gKHpyLT5qcGdfZG1hX3RhaWwgLQotCQkJCSAgICAgenItPmpwZ19lcnJfc2hpZnQpICYgQlVaX01BU0tfU1RBVF9DT007Ci0JCQllbHNlCi0JCQkJaSA9ICgoenItPmpwZ19kbWFfdGFpbCAtCi0JCQkJICAgICAgenItPmpwZ19lcnJfc2hpZnQpICYgMSkgKiAyOwotCQkJaWYgKHpyLT5jb2RlY19tb2RlID09IEJVWl9NT0RFX01PVElPTl9ERUNPTVBSRVNTKSB7Ci0JCQkJLyogTWltaWMgenIzNjA2NyBvcGVyYXRpb24gKi8KLQkJCQl6ci0+c3RhdF9jb21baV0gfD0gY3B1X3RvX2xlMzIoMSk7Ci0JCQkJaWYgKHpyLT5qcGdfc2V0dGluZ3MuVG1wRGNtICE9IDEpCi0JCQkJCXpyLT5zdGF0X2NvbVtpICsgMV0gfD0gY3B1X3RvX2xlMzIoMSk7Ci0JCQkJLyogUmVmaWxsICovCi0JCQkJem9yYW5fcmVhcF9zdGF0X2NvbSh6cik7Ci0JCQkJem9yYW5fZmVlZF9zdGF0X2NvbSh6cik7Ci0JCQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZ6ci0+anBnX2NhcHEpOwotCQkJCS8qIEZpbmQgYW4gZW50cnkgaW4gc3RhdF9jb20gYWdhaW4gYWZ0ZXIgcmVmaWxsICovCi0JCQkJaWYgKHpyLT5qcGdfc2V0dGluZ3MuVG1wRGNtID09IDEpCi0JCQkJCWkgPSAoenItPmpwZ19kbWFfdGFpbCAtCi0JCQkJCSAgICAgenItPmpwZ19lcnJfc2hpZnQpICYKLQkJCQkJICAgIEJVWl9NQVNLX1NUQVRfQ09NOwotCQkJCWVsc2UKLQkJCQkJaSA9ICgoenItPmpwZ19kbWFfdGFpbCAtCi0JCQkJCSAgICAgIHpyLT5qcGdfZXJyX3NoaWZ0KSAmIDEpICogMjsKLQkJCX0KLQkJCWlmIChpKSB7Ci0JCQkJLyogUm90YXRlIHN0YXRfY29tbSBlbnRyaWVzIHRvIG1ha2UgY3VycmVudCBlbnRyeSBmaXJzdCAqLwotCQkJCWludCBqOwotCQkJCV9fbGUzMiBidXNfYWRkcltCVVpfTlVNX1NUQVRfQ09NXTsKLQotCQkJCS8qIEhlcmUgd2UgYXJlIGNvcHlpbmcgdGhlIHN0YXRfY29tIGFycmF5LCB3aGljaAotCQkJCSAqIGlzIGFscmVhZHkgaW4gbGl0dGxlIGVuZGlhbiBmb3JtYXQsIHNvCi0JCQkJICogbm8gZW5kaWFuIGNvbnZlcnNpb25zIGhlcmUKLQkJCQkgKi8KLQkJCQltZW1jcHkoYnVzX2FkZHIsIHpyLT5zdGF0X2NvbSwKLQkJCQkgICAgICAgc2l6ZW9mKGJ1c19hZGRyKSk7Ci0JCQkJZm9yIChqID0gMDsgaiA8IEJVWl9OVU1fU1RBVF9DT007IGorKykgewotCQkJCQl6ci0+c3RhdF9jb21bal0gPQotCQkJCQkgICAgYnVzX2FkZHJbKGkgKyBqKSAmCi0JCQkJCQkgICAgIEJVWl9NQVNLX1NUQVRfQ09NXTsKLQotCQkJCX0KLQkJCQl6ci0+anBnX2Vycl9zaGlmdCArPSBpOwotCQkJCXpyLT5qcGdfZXJyX3NoaWZ0ICY9IEJVWl9NQVNLX1NUQVRfQ09NOwotCQkJfQotCQkJaWYgKHpyLT5jb2RlY19tb2RlID09IEJVWl9NT0RFX01PVElPTl9DT01QUkVTUykKLQkJCQl6ci0+anBnX2Vycl9zZXEgPSB6ci0+anBnX3NlcV9udW07CS8qICsgMTsgKi8KLQkJfQotCX0KLQotCS8qIE5vdyB0aGUgc3RhdF9jb21tIGJ1ZmZlciBpcyByZWFkeSBmb3IgcmVzdGFydCAqLwotCWRvIHsKLQkJaW50IHN0YXR1cywgbW9kZTsKLQotCQlpZiAoenItPmNvZGVjX21vZGUgPT0gQlVaX01PREVfTU9USU9OX0NPTVBSRVNTKSB7Ci0JCQlkZWNvZGVyX2NvbW1hbmQoenIsIERFQ09ERVJfR0VUX1NUQVRVUywgJnN0YXR1cyk7Ci0JCQltb2RlID0gQ09ERUNfRE9fQ09NUFJFU1NJT047Ci0JCX0gZWxzZSB7Ci0JCQlzdGF0dXMgPSAwOwotCQkJbW9kZSA9IENPREVDX0RPX0VYUEFOU0lPTjsKLQkJfQotCQlpZiAoenItPmNvZGVjX21vZGUgPT0gQlVaX01PREVfTU9USU9OX0RFQ09NUFJFU1MgfHwKLQkJICAgIChzdGF0dXMgJiBERUNPREVSX1NUQVRVU19HT09EKSkgewotCQkJLyoqKioqKioqKiogUkVTVEFSVCBjb2RlICoqKioqKioqKioqKiovCi0JCQlqcGVnX2NvZGVjX3Jlc2V0KHpyKTsKLQkJCXpyLT5jb2RlYy0+c2V0X21vZGUoenItPmNvZGVjLCBtb2RlKTsKLQkJCXpyMzYwNTdfc2V0X2pwZyh6ciwgenItPmNvZGVjX21vZGUpOwotCQkJanBlZ19zdGFydCh6cik7Ci0KLQkJCWlmICh6ci0+bnVtX2Vycm9ycyA8PSA4KQotCQkJCWRwcmludGsoMiwgS0VSTl9JTkZPICIlczogUmVzdGFydFxuIiwKLQkJCQkJWlJfREVWTkFNRSh6cikpOwotCi0JCQl6ci0+SlBFR19taXNzZWQgPSAwOwotCQkJenItPkpQRUdfZXJyb3IgPSAyOwotCQkJLyoqKioqKioqKiogRW5kIFJFU1RBUlQgY29kZSAqKioqKioqKioqKi8KLQkJfQotCX0gd2hpbGUgKDApOwotfQotCi1pcnFyZXR1cm5fdAotem9yYW5faXJxIChpbnQgICAgICAgICAgICAgaXJxLAotCSAgIHZvaWQgICAgICAgICAgICpkZXZfaWQpCi17Ci0JdTMyIHN0YXQsIGFzdGF0OwotCWludCBjb3VudDsKLQlzdHJ1Y3Qgem9yYW4gKnpyOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQl6ciA9IGRldl9pZDsKLQljb3VudCA9IDA7Ci0KLQlpZiAoenItPnRlc3RpbmcpIHsKLQkJLyogVGVzdGluZyBpbnRlcnJ1cHRzICovCi0JCXNwaW5fbG9ja19pcnFzYXZlKCZ6ci0+c3BpbmxvY2ssIGZsYWdzKTsKLQkJd2hpbGUgKChzdGF0ID0gY291bnRfcmVzZXRfaW50ZXJydXB0KHpyKSkpIHsKLQkJCWlmIChjb3VudCsrID4gMTAwKSB7Ci0JCQkJYnRhbmQoflpSMzYwNTdfSUNSX0ludFBpbkVuLCBaUjM2MDU3X0lDUik7Ci0JCQkJZHByaW50aygxLAotCQkJCQlLRVJOX0VSUgotCQkJCQkiJXM6IElSUSBsb2NrdXAgd2hpbGUgdGVzdGluZywgaXNyPTB4JTA4eCwgY2xlYXJlZCBpbnQgbWFza1xuIiwKLQkJCQkJWlJfREVWTkFNRSh6ciksIHN0YXQpOwotCQkJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmenItPnRlc3RfcSk7Ci0JCQl9Ci0JCX0KLQkJenItPmxhc3RfaXNyID0gc3RhdDsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmenItPnNwaW5sb2NrLCBmbGFncyk7Ci0JCXJldHVybiBJUlFfSEFORExFRDsKLQl9Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmenItPnNwaW5sb2NrLCBmbGFncyk7Ci0Jd2hpbGUgKDEpIHsKLQkJLyogZ2V0L2NsZWFyIGludGVycnVwdCBzdGF0dXMgYml0cyAqLwotCQlzdGF0ID0gY291bnRfcmVzZXRfaW50ZXJydXB0KHpyKTsKLQkJYXN0YXQgPSBzdGF0ICYgSVJRX01BU0s7Ci0JCWlmICghYXN0YXQpIHsKLQkJCWJyZWFrOwotCQl9Ci0JCWRwcmludGsoNCwKLQkJCUtFUk5fREVCVUcKLQkJCSJ6b3Jhbl9pcnE6IGFzdGF0OiAweCUwOHgsIG1hc2s6IDB4JTA4eFxuIiwKLQkJCWFzdGF0LCBidHJlYWQoWlIzNjA1N19JQ1IpKTsKLQkJaWYgKGFzdGF0ICYgenItPmNhcmQudnN5bmNfaW50KSB7CS8vIFNXCi0KLQkJCWlmICh6ci0+Y29kZWNfbW9kZSA9PSBCVVpfTU9ERV9NT1RJT05fREVDT01QUkVTUyB8fAotCQkJICAgIHpyLT5jb2RlY19tb2RlID09IEJVWl9NT0RFX01PVElPTl9DT01QUkVTUykgewotCQkJCS8qIGNvdW50IG1pc3NlZCBpbnRlcnJ1cHRzICovCi0JCQkJenItPkpQRUdfbWlzc2VkKys7Ci0JCQl9Ci0JCQkvL3Bvc3Rfb2ZmaWNlX3JlYWQoenIsMSwwKTsKLQkJCS8qIEludGVycnVwdHMgbWF5IHN0aWxsIGhhcHBlbiB3aGVuCi0JCQkgKiB6ci0+djRsX21lbWdyYWJfYWN0aXZlIGlzIHN3aXRjaGVkIG9mZi4KLQkJCSAqIFdlIHNpbXBseSBpZ25vcmUgdGhlbSAqLwotCi0JCQlpZiAoenItPnY0bF9tZW1ncmFiX2FjdGl2ZSkgewotCi0JCQkJLyogQSBsb3QgbW9yZSBjaGVja3Mgc2hvdWxkIGJlIGhlcmUgLi4uICovCi0JCQkJaWYgKChidHJlYWQoWlIzNjA1N19WU1NGR1IpICYKLQkJCQkgICAgIFpSMzYwNTdfVlNTRkdSX1NuYXBTaG90KSA9PSAwKQotCQkJCQlkcHJpbnRrKDEsCi0JCQkJCQlLRVJOX1dBUk5JTkcKLQkJCQkJCSIlczogQnV6SVJRIHdpdGggU25hcFNob3Qgb2ZmID8/P1xuIiwKLQkJCQkJCVpSX0RFVk5BTUUoenIpKTsKLQotCQkJCWlmICh6ci0+djRsX2dyYWJfZnJhbWUgIT0gTk9fR1JBQl9BQ1RJVkUpIHsKLQkJCQkJLyogVGhlcmUgaXMgYSBncmFiIG9uIGEgZnJhbWUgZ29pbmcgb24sIGNoZWNrIGlmIGl0IGhhcyBmaW5pc2hlZCAqLwotCi0JCQkJCWlmICgoYnRyZWFkKFpSMzYwNTdfVlNTRkdSKSAmCi0JCQkJCSAgICAgWlIzNjA1N19WU1NGR1JfRnJhbWVHcmFiKSA9PQotCQkJCQkgICAgMCkgewotCQkJCQkJLyogaXQgaXMgZmluaXNoZWQsIG5vdGlmeSB0aGUgdXNlciAqLwotCi0JCQkJCQl6ci0+djRsX2J1ZmZlcnMuYnVmZmVyW3pyLT52NGxfZ3JhYl9mcmFtZV0uc3RhdGUgPSBCVVpfU1RBVEVfRE9ORTsKLQkJCQkJCXpyLT52NGxfYnVmZmVycy5idWZmZXJbenItPnY0bF9ncmFiX2ZyYW1lXS5icy5zZXEgPSB6ci0+djRsX2dyYWJfc2VxOwotCQkJCQkJZG9fZ2V0dGltZW9mZGF5KCZ6ci0+djRsX2J1ZmZlcnMuYnVmZmVyW3pyLT52NGxfZ3JhYl9mcmFtZV0uYnMudGltZXN0YW1wKTsKLQkJCQkJCXpyLT52NGxfZ3JhYl9mcmFtZSA9IE5PX0dSQUJfQUNUSVZFOwotCQkJCQkJenItPnY0bF9wZW5kX3RhaWwrKzsKLQkJCQkJfQotCQkJCX0KLQotCQkJCWlmICh6ci0+djRsX2dyYWJfZnJhbWUgPT0gTk9fR1JBQl9BQ1RJVkUpCi0JCQkJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmenItPnY0bF9jYXBxKTsKLQotCQkJCS8qIENoZWNrIGlmIHRoZXJlIGlzIGFub3RoZXIgZ3JhYiBxdWV1ZWQgKi8KLQotCQkJCWlmICh6ci0+djRsX2dyYWJfZnJhbWUgPT0gTk9fR1JBQl9BQ1RJVkUgJiYKLQkJCQkgICAgenItPnY0bF9wZW5kX3RhaWwgIT0genItPnY0bF9wZW5kX2hlYWQpIHsKLQotCQkJCQlpbnQgZnJhbWUgPSB6ci0+djRsX3BlbmRbenItPnY0bF9wZW5kX3RhaWwgJgotCQkJCQkJCSBWNExfTUFTS19GUkFNRV07Ci0JCQkJCXUzMiByZWc7Ci0KLQkJCQkJenItPnY0bF9ncmFiX2ZyYW1lID0gZnJhbWU7Ci0KLQkJCQkJLyogU2V0IHpyMzYwNTcgdmlkZW8gZnJvbnQgZW5kIGFuZCBlbmFibGUgdmlkZW8gKi8KLQotCQkJCQkvKiBCdWZmZXIgYWRkcmVzcyAqLwotCi0JCQkJCXJlZyA9Ci0JCQkJCSAgICB6ci0+djRsX2J1ZmZlcnMuYnVmZmVyW2ZyYW1lXS4KLQkJCQkJICAgIGZidWZmZXJfYnVzOwotCQkJCQlidHdyaXRlKHJlZywgWlIzNjA1N19WRFRSKTsKLQkJCQkJaWYgKHpyLT52NGxfc2V0dGluZ3MuaGVpZ2h0ID4KLQkJCQkJICAgIEJVWl9NQVhfSEVJR0hUIC8gMikKLQkJCQkJCXJlZyArPQotCQkJCQkJICAgIHpyLT52NGxfc2V0dGluZ3MuCi0JCQkJCQkgICAgYnl0ZXNwZXJsaW5lOwotCQkJCQlidHdyaXRlKHJlZywgWlIzNjA1N19WREJSKTsKLQotCQkJCQkvKiB2aWRlbyBzdHJpZGUsIHN0YXR1cywgYW5kIGZyYW1lIGdyYWIgcmVnaXN0ZXIgKi8KLQkJCQkJcmVnID0gMDsKLQkJCQkJaWYgKHpyLT52NGxfc2V0dGluZ3MuaGVpZ2h0ID4KLQkJCQkJICAgIEJVWl9NQVhfSEVJR0hUIC8gMikKLQkJCQkJCXJlZyArPQotCQkJCQkJICAgIHpyLT52NGxfc2V0dGluZ3MuCi0JCQkJCQkgICAgYnl0ZXNwZXJsaW5lOwotCQkJCQlyZWcgPQotCQkJCQkgICAgKHJlZyA8PAotCQkJCQkgICAgIFpSMzYwNTdfVlNTRkdSX0Rpc3BTdHJpZGUpOwotCQkJCQlyZWcgfD0gWlIzNjA1N19WU1NGR1JfVmlkT3ZmOwotCQkJCQlyZWcgfD0gWlIzNjA1N19WU1NGR1JfU25hcFNob3Q7Ci0JCQkJCXJlZyB8PSBaUjM2MDU3X1ZTU0ZHUl9GcmFtZUdyYWI7Ci0JCQkJCWJ0d3JpdGUocmVnLCBaUjM2MDU3X1ZTU0ZHUik7Ci0KLQkJCQkJYnRvcihaUjM2MDU3X1ZEQ1JfVmlkRW4sCi0JCQkJCSAgICAgWlIzNjA1N19WRENSKTsKLQkJCQl9Ci0JCQl9Ci0KLQkJCS8qIGV2ZW4gaWYgd2UgZG9uJ3QgZ3JhYiwgd2UgZG8gd2FudCB0byBpbmNyZW1lbnQKLQkJCSAqIHRoZSBzZXF1ZW5jZSBjb3VudGVyIHRvIHNlZSBsb3N0IGZyYW1lcyAqLwotCQkJenItPnY0bF9ncmFiX3NlcSsrOwotCQl9Ci0jaWYgKElSUV9NQVNLICYgWlIzNjA1N19JU1JfQ29kUmVwSVJRKQotCQlpZiAoYXN0YXQgJiBaUjM2MDU3X0lTUl9Db2RSZXBJUlEpIHsKLQkJCXpyLT5pbnRyX2NvdW50ZXJfQ29kUmVwSVJRKys7Ci0JCQlJREVCVUcocHJpbnRrCi0JCQkgICAgICAgKEtFUk5fREVCVUcgIiVzOiBaUjM2MDU3X0lTUl9Db2RSZXBJUlFcbiIsCi0JCQkJWlJfREVWTkFNRSh6cikpKTsKLQkJCWJ0YW5kKH5aUjM2MDU3X0lDUl9Db2RSZXBJUlEsIFpSMzYwNTdfSUNSKTsKLQkJfQotI2VuZGlmCQkJCS8qIChJUlFfTUFTSyAmIFpSMzYwNTdfSVNSX0NvZFJlcElSUSkgKi8KLQotI2lmIChJUlFfTUFTSyAmIFpSMzYwNTdfSVNSX0pQRUdSZXBJUlEpCi0JCWlmIChhc3RhdCAmIFpSMzYwNTdfSVNSX0pQRUdSZXBJUlEpIHsKLQotCQkJaWYgKHpyLT5jb2RlY19tb2RlID09IEJVWl9NT0RFX01PVElPTl9ERUNPTVBSRVNTIHx8Ci0JCQkgICAgenItPmNvZGVjX21vZGUgPT0gQlVaX01PREVfTU9USU9OX0NPTVBSRVNTKSB7Ci0JCQkJaWYgKHpyMzYwNjdfZGVidWcgPiAxICYmCi0JCQkJICAgICghenItPmZyYW1lX251bSB8fCB6ci0+SlBFR19lcnJvcikpIHsKLQkJCQkJcHJpbnRrKEtFUk5fSU5GTwotCQkJCQkgICAgICAgIiVzOiBmaXJzdCBmcmFtZSByZWFkeTogc3RhdGU9MHglMDh4IG9kZF9ldmVuPSVkIGZpZWxkX3Blcl9idWZmPSVkIGRlbGF5PSVkXG4iLAotCQkJCQkgICAgICAgWlJfREVWTkFNRSh6ciksIHN0YXQsCi0JCQkJCSAgICAgICB6ci0+anBnX3NldHRpbmdzLm9kZF9ldmVuLAotCQkJCQkgICAgICAgenItPmpwZ19zZXR0aW5ncy4KLQkJCQkJICAgICAgIGZpZWxkX3Blcl9idWZmLAotCQkJCQkgICAgICAgenItPkpQRUdfbWlzc2VkKTsKLQkJCQkJewotCQkJCQkJY2hhciBzY1tdID0gIjAwMDAiOwotCQkJCQkJY2hhciBzdls1XTsKLQkJCQkJCWludCBpOwotCQkJCQkJc3RyY3B5KHN2LCBzYyk7Ci0JCQkJCQlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7Ci0JCQkJCQkJaWYgKGxlMzJfdG9fY3B1KHpyLT5zdGF0X2NvbVtpXSkgJiAxKQotCQkJCQkJCQlzdltpXSA9ICcxJzsKLQkJCQkJCX0KLQkJCQkJCXN2WzRdID0gMDsKLQkJCQkJCXByaW50ayhLRVJOX0lORk8KLQkJCQkJCSAgICAgICAiJXM6IHN0YXRfY29tPSVzIHF1ZXVlX3N0YXRlPSVsZC8lbGQvJWxkLyVsZFxuIiwKLQkJCQkJCSAgICAgICBaUl9ERVZOQU1FKHpyKSwgc3YsCi0JCQkJCQkgICAgICAgenItPmpwZ19xdWVfdGFpbCwKLQkJCQkJCSAgICAgICB6ci0+anBnX2RtYV90YWlsLAotCQkJCQkJICAgICAgIHpyLT5qcGdfZG1hX2hlYWQsCi0JCQkJCQkgICAgICAgenItPmpwZ19xdWVfaGVhZCk7Ci0JCQkJCX0KLQkJCQl9IGVsc2UgewotCQkJCQlpZiAoenItPkpQRUdfbWlzc2VkID4genItPkpQRUdfbWF4X21pc3NlZCkJLy8gR2V0IHN0YXRpc3RpY3MKLQkJCQkJCXpyLT5KUEVHX21heF9taXNzZWQgPQotCQkJCQkJICAgIHpyLT5KUEVHX21pc3NlZDsKLQkJCQkJaWYgKHpyLT5KUEVHX21pc3NlZCA8Ci0JCQkJCSAgICB6ci0+SlBFR19taW5fbWlzc2VkKQotCQkJCQkJenItPkpQRUdfbWluX21pc3NlZCA9Ci0JCQkJCQkgICAgenItPkpQRUdfbWlzc2VkOwotCQkJCX0KLQotCQkJCWlmICh6cjM2MDY3X2RlYnVnID4gMiAmJiB6ci0+ZnJhbWVfbnVtIDwgNikgewotCQkJCQlpbnQgaTsKLQkJCQkJcHJpbnRrKCIlczogc2VxPSVsZCBzdGF0X2NvbToiLAotCQkJCQkgICAgICAgWlJfREVWTkFNRSh6ciksIHpyLT5qcGdfc2VxX251bSk7Ci0JCQkJCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKLQkJCQkJCXByaW50aygiICUwOHgiLAotCQkJCQkJICAgICAgIGxlMzJfdG9fY3B1KHpyLT5zdGF0X2NvbVtpXSkpOwotCQkJCQl9Ci0JCQkJCXByaW50aygiXG4iKTsKLQkJCQl9Ci0JCQkJenItPmZyYW1lX251bSsrOwotCQkJCXpyLT5KUEVHX21pc3NlZCA9IDA7Ci0JCQkJenItPkpQRUdfZXJyb3IgPSAwOwotCQkJCXpvcmFuX3JlYXBfc3RhdF9jb20oenIpOwotCQkJCXpvcmFuX2ZlZWRfc3RhdF9jb20oenIpOwotCQkJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmenItPmpwZ19jYXBxKTsKLQkJCX0gLyplbHNlIHsKLQkJCSAgICAgIGRwcmludGsoMSwKLQkJCQkJS0VSTl9FUlIKLQkJCQkJIiVzOiBKUEVHIGludGVycnVwdCB3aGlsZSBub3QgaW4gbW90aW9uIChkZSljb21wcmVzcyBtb2RlIVxuIiwKLQkJCQkJWlJfREVWTkFNRSh6cikpOwotCQkJfSovCi0JCX0KLSNlbmRpZgkJCQkvKiAoSVJRX01BU0sgJiBaUjM2MDU3X0lTUl9KUEVHUmVwSVJRKSAqLwotCi0JCS8qIERBVEVSUiwgdG9vIG1hbnkgZmllbGRzIG1pc3NlZCwgZXJyb3IgcHJvY2Vzc2luZyAqLwotCQlpZiAoKGFzdGF0ICYgenItPmNhcmQuanBlZ19pbnQpIHx8Ci0JCSAgICB6ci0+SlBFR19taXNzZWQgPiAyNSB8fAotCQkgICAgenItPkpQRUdfZXJyb3IgPT0gMQl8fAotCQkgICAgKCh6ci0+Y29kZWNfbW9kZSA9PSBCVVpfTU9ERV9NT1RJT05fREVDT01QUkVTUykgJiYKLQkJICAgICAoenItPmZyYW1lX251bSAmICh6ci0+SlBFR19taXNzZWQgPgotCQkJCSAgICAgICB6ci0+anBnX3NldHRpbmdzLmZpZWxkX3Blcl9idWZmKSkpKSB7Ci0JCQllcnJvcl9oYW5kbGVyKHpyLCBhc3RhdCwgc3RhdCk7Ci0JCX0KLQotCQljb3VudCsrOwotCQlpZiAoY291bnQgPiAxMCkgewotCQkJZHByaW50aygyLCBLRVJOX1dBUk5JTkcgIiVzOiBpcnEgbG9vcCAlZFxuIiwKLQkJCQlaUl9ERVZOQU1FKHpyKSwgY291bnQpOwotCQkJaWYgKGNvdW50ID4gMjApIHsKLQkJCQlidGFuZCh+WlIzNjA1N19JQ1JfSW50UGluRW4sIFpSMzYwNTdfSUNSKTsKLQkJCQlkcHJpbnRrKDIsCi0JCQkJCUtFUk5fRVJSCi0JCQkJCSIlczogSVJRIGxvY2t1cCwgY2xlYXJlZCBpbnQgbWFza1xuIiwKLQkJCQkJWlJfREVWTkFNRSh6cikpOwotCQkJCWJyZWFrOwotCQkJfQotCQl9Ci0JCXpyLT5sYXN0X2lzciA9IHN0YXQ7Ci0JfQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnpyLT5zcGlubG9jaywgZmxhZ3MpOwotCi0JcmV0dXJuIElSUV9IQU5ETEVEOwotfQotCi12b2lkCi16b3Jhbl9zZXRfcGNpX21hc3RlciAoc3RydWN0IHpvcmFuICp6ciwKLQkJICAgICAgaW50ICAgICAgICAgICBzZXRfbWFzdGVyKQotewotCWlmIChzZXRfbWFzdGVyKSB7Ci0JCXBjaV9zZXRfbWFzdGVyKHpyLT5wY2lfZGV2KTsKLQl9IGVsc2UgewotCQl1MTYgY29tbWFuZDsKLQotCQlwY2lfcmVhZF9jb25maWdfd29yZCh6ci0+cGNpX2RldiwgUENJX0NPTU1BTkQsICZjb21tYW5kKTsKLQkJY29tbWFuZCAmPSB+UENJX0NPTU1BTkRfTUFTVEVSOwotCQlwY2lfd3JpdGVfY29uZmlnX3dvcmQoenItPnBjaV9kZXYsIFBDSV9DT01NQU5ELCBjb21tYW5kKTsKLQl9Ci19Ci0KLXZvaWQKLXpvcmFuX2luaXRfaGFyZHdhcmUgKHN0cnVjdCB6b3JhbiAqenIpCi17Ci0JaW50IGosIHplcm8gPSAwOwotCi0JLyogRW5hYmxlIGJ1cy1tYXN0ZXJpbmcgKi8KLQl6b3Jhbl9zZXRfcGNpX21hc3Rlcih6ciwgMSk7Ci0KLQkvKiBJbml0aWFsaXplIHRoZSBib2FyZCAqLwotCWlmICh6ci0+Y2FyZC5pbml0KSB7Ci0JCXpyLT5jYXJkLmluaXQoenIpOwotCX0KLQotCWogPSB6ci0+Y2FyZC5pbnB1dFt6ci0+aW5wdXRdLm11eHNlbDsKLQotCWRlY29kZXJfY29tbWFuZCh6ciwgMCwgTlVMTCk7Ci0JZGVjb2Rlcl9jb21tYW5kKHpyLCBERUNPREVSX1NFVF9OT1JNLCAmenItPm5vcm0pOwotCWRlY29kZXJfY29tbWFuZCh6ciwgREVDT0RFUl9TRVRfSU5QVVQsICZqKTsKLQotCWVuY29kZXJfY29tbWFuZCh6ciwgMCwgTlVMTCk7Ci0JZW5jb2Rlcl9jb21tYW5kKHpyLCBFTkNPREVSX1NFVF9OT1JNLCAmenItPm5vcm0pOwotCWVuY29kZXJfY29tbWFuZCh6ciwgRU5DT0RFUl9TRVRfSU5QVVQsICZ6ZXJvKTsKLQotCS8qIHRvZ2dsZSBKUEVHIGNvZGVjIHNsZWVwIHRvIHN5bmMgUExMICovCi0JanBlZ19jb2RlY19zbGVlcCh6ciwgMSk7Ci0JanBlZ19jb2RlY19zbGVlcCh6ciwgMCk7Ci0KLQkvKiBzZXQgaW5kaXZpZHVhbCBpbnRlcnJ1cHQgZW5hYmxlcyAod2l0aG91dCBHSVJRMSkKLQkgKiBidXQgZG9uJ3QgZ2xvYmFsIGVuYWJsZSB1bnRpbCB6b3Jhbl9vcGVuKCkgKi8KLQotCS8vYnR3cml0ZShJUlFfTUFTSyAmIH5aUjM2MDU3X0lTUl9HSVJRMSwgWlIzNjA1N19JQ1IpOyAgLy8gU1cKLQkvLyBJdCBsb29rcyBsaWtlIHVzaW5nIG9ubHkgSlBFR1JlcElSUUVuIGlzIG5vdCBhbHdheXMgcmVsaWFibGUsCi0JLy8gbWF5IGJlIHdoZW4gSlBFRyBjb2RlYyBjcmFzaGVzIGl0IHdvbid0IGdlbmVyYXRlIElSUT8gU28sCi0JIC8qQ1AqLwkJCS8vICAgICAgICBidHdyaXRlKElSUV9NQVNLLCBaUjM2MDU3X0lDUik7IC8vIEVuYWJsZSBWc3luYyBpbnRlcnJ1cHRzIHRvby4gU00gICAgV0hZID8gTFAKLQkgICAgenIzNjA1N19pbml0X3ZmZSh6cik7Ci0KLQl6cjM2MDU3X2VuYWJsZV9qcGcoenIsIEJVWl9NT0RFX0lETEUpOwotCi0JYnR3cml0ZShJUlFfTUFTSywgWlIzNjA1N19JU1IpOwkvLyBDbGVhcnMgaW50ZXJydXB0cwotfQotCi12b2lkCi16cjM2MDU3X3Jlc3RhcnQgKHN0cnVjdCB6b3JhbiAqenIpCi17Ci0JYnR3cml0ZSgwLCBaUjM2MDU3X1NQR1BQQ1IpOwotCW1kZWxheSgxKTsKLQlidG9yKFpSMzYwNTdfU1BHUFBDUl9Tb2Z0UmVzZXQsIFpSMzYwNTdfU1BHUFBDUik7Ci0JbWRlbGF5KDEpOwotCi0JLyogYXNzZXJ0IFBfUmVzZXQgKi8KLQlidHdyaXRlKDAsIFpSMzYwNTdfSlBDKTsKLQkvKiBzZXQgdXAgR1BJTyBkaXJlY3Rpb24gLSBhbGwgb3V0cHV0ICovCi0JYnR3cml0ZShaUjM2MDU3X1NQR1BQQ1JfU29mdFJlc2V0IHwgMCwgWlIzNjA1N19TUEdQUENSKTsKLQotCS8qIHNldCB1cCBHUElPIHBpbnMgYW5kIGd1ZXN0IGJ1cyB0aW1pbmcgKi8KLQlidHdyaXRlKCgweDgxIDw8IDI0KSB8IDB4ODg4OCwgWlIzNjA1N19HUFBHQ1IxKTsKLX0KLQotLyoKLSAqIGluaXRpYWxpemUgdmlkZW8gZnJvbnQgZW5kCi0gKi8KLQotc3RhdGljIHZvaWQKLXpyMzYwNTdfaW5pdF92ZmUgKHN0cnVjdCB6b3JhbiAqenIpCi17Ci0JdTMyIHJlZzsKLQotCXJlZyA9IGJ0cmVhZChaUjM2MDU3X1ZGRVNQRlIpOwotCXJlZyB8PSBaUjM2MDU3X1ZGRVNQRlJfTGl0dGxlRW5kaWFuOwotCXJlZyAmPSB+WlIzNjA1N19WRkVTUEZSX1ZDTEtQb2w7Ci0JcmVnIHw9IFpSMzYwNTdfVkZFU1BGUl9FeHRGbDsKLQlyZWcgfD0gWlIzNjA1N19WRkVTUEZSX1RvcEZpZWxkOwotCWJ0d3JpdGUocmVnLCBaUjM2MDU3X1ZGRVNQRlIpOwotCXJlZyA9IGJ0cmVhZChaUjM2MDU3X1ZEQ1IpOwotCWlmIChwY2lfcGNpX3Byb2JsZW1zICYgUENJUENJX1RSSVRPTikKLQkJLy8gfHwgenItPnJldmlzaW9uIDwgMSkgLy8gUmV2aXNpb24gMSBoYXMgYWxzbyBUcml0b24gc3VwcG9ydAotCQlyZWcgJj0gflpSMzYwNTdfVkRDUl9Ucml0b247Ci0JZWxzZQotCQlyZWcgfD0gWlIzNjA1N19WRENSX1RyaXRvbjsKLQlidHdyaXRlKHJlZywgWlIzNjA1N19WRENSKTsKLX0KLQotLyoKLSAqIEludGVyZmFjZSB0byBkZWNvZGVyIGFuZCBlbmNvZGVyIGNoaXBzIHVzaW5nIGkyYyBidXMKLSAqLwotCi1pbnQKLWRlY29kZXJfY29tbWFuZCAoc3RydWN0IHpvcmFuICp6ciwKLQkJIGludCAgICAgICAgICAgY21kLAotCQkgdm9pZCAgICAgICAgICpkYXRhKQotewotCWlmICh6ci0+ZGVjb2RlciA9PSBOVUxMKQotCQlyZXR1cm4gLUVJTzsKLQotCWlmICh6ci0+Y2FyZC50eXBlID09IExNTDMzICYmCi0JICAgIChjbWQgPT0gREVDT0RFUl9TRVRfTk9STSB8fCBjbWQgPT0gREVDT0RFUl9TRVRfSU5QVVQpKSB7Ci0JCWludCByZXM7Ci0KLQkJLy8gQnQ4MTkgbmVlZHMgdG8gcmVzZXQgaXRzIEZJRk8gYnVmZmVyIHVzaW5nICNGUlNUIHBpbiBhbmQKLQkJLy8gTE1MMzMgY2FyZCB1c2VzIEdQSU8oNykgZm9yIHRoYXQuCi0JCUdQSU8oenIsIDcsIDApOwotCQlyZXMgPSB6ci0+ZGVjb2Rlci0+ZHJpdmVyLT5jb21tYW5kKHpyLT5kZWNvZGVyLCBjbWQsIGRhdGEpOwotCQkvLyBQdWxsICNGUlNUIGhpZ2guCi0JCUdQSU8oenIsIDcsIDEpOwotCQlyZXR1cm4gcmVzOwotCX0gZWxzZQotCQlyZXR1cm4genItPmRlY29kZXItPmRyaXZlci0+Y29tbWFuZCh6ci0+ZGVjb2RlciwgY21kLAotCQkJCQkJICAgIGRhdGEpOwotfQotCi1pbnQKLWVuY29kZXJfY29tbWFuZCAoc3RydWN0IHpvcmFuICp6ciwKLQkJIGludCAgICAgICAgICAgY21kLAotCQkgdm9pZCAgICAgICAgICpkYXRhKQotewotCWlmICh6ci0+ZW5jb2RlciA9PSBOVUxMKQotCQlyZXR1cm4gLTE7Ci0KLQlyZXR1cm4genItPmVuY29kZXItPmRyaXZlci0+Y29tbWFuZCh6ci0+ZW5jb2RlciwgY21kLCBkYXRhKTsKLX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vem9yYW5fZGV2aWNlLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3pvcmFuX2RldmljZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzN2ZhODZhLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vem9yYW5fZGV2aWNlLmgKKysrIC9kZXYvbnVsbApAQCAtMSw4OSArMCwwIEBACi0vKgotICogWm9yYW4genIzNjA1Ny96cjM2MDY3IFBDSSBjb250cm9sbGVyIGRyaXZlciwgZm9yIHRoZQotICogUGlubmFjbGUvTWlybyBEQzEwL0RDMTArL0RDMzAvREMzMCssIElvbWVnYSBCdXosIExpbnV4Ci0gKiBNZWRpYSBMYWJzIExNTDMzL0xNTDMzUjEwLgotICoKLSAqIFRoaXMgcGFydCBoYW5kbGVzIGNhcmQtc3BlY2lmaWMgZGF0YSBhbmQgZGV0ZWN0aW9uCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDAwIFNlcmd1ZWkgTWlyaWRvbm92IDxtaXJzZXZAY2ljZXNlLm14PgotICoKLSAqIEN1cnJlbnRseSBtYWludGFpbmVkIGJ5OgotICogICBSb25hbGQgQnVsdGplICAgIDxyYnVsdGplQHJvbmFsZC5iaXRmcmVhay5uZXQ+Ci0gKiAgIExhdXJlbnQgUGluY2hhcnQgPGxhdXJlbnQucGluY2hhcnRAc2t5bmV0LmJlPgotICogICBNYWlsaW5nbGlzdCAgICAgIDxtanBlZy11c2Vyc0BsaXN0cy5zZi5uZXQ+Ci0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCi0gKi8KLQotI2lmbmRlZiBfX1pPUkFOX0RFVklDRV9IX18KLSNkZWZpbmUgX19aT1JBTl9ERVZJQ0VfSF9fCi0KLS8qIGdlbmVyYWwgcHVycG9zZSBJL08gKi8KLWV4dGVybiB2b2lkIEdQSU8oc3RydWN0IHpvcmFuICp6ciwKLQkJIGludCBiaXQsCi0JCSB1bnNpZ25lZCBpbnQgdmFsdWUpOwotCi0vKiBjb2RlYyAob3IgYWN0dWFsbHk6IGd1ZXN0IGJ1cykgYWNjZXNzICovCi1leHRlcm4gaW50IHBvc3Rfb2ZmaWNlX3dhaXQoc3RydWN0IHpvcmFuICp6cik7Ci1leHRlcm4gaW50IHBvc3Rfb2ZmaWNlX3dyaXRlKHN0cnVjdCB6b3JhbiAqenIsCi0JCQkgICAgIHVuc2lnbmVkIGd1ZXN0LAotCQkJICAgICB1bnNpZ25lZCByZWcsCi0JCQkgICAgIHVuc2lnbmVkIHZhbHVlKTsKLWV4dGVybiBpbnQgcG9zdF9vZmZpY2VfcmVhZChzdHJ1Y3Qgem9yYW4gKnpyLAotCQkJICAgIHVuc2lnbmVkIGd1ZXN0LAotCQkJICAgIHVuc2lnbmVkIHJlZyk7Ci0KLWV4dGVybiB2b2lkIGRldGVjdF9ndWVzdF9hY3Rpdml0eShzdHJ1Y3Qgem9yYW4gKnpyKTsKLQotZXh0ZXJuIHZvaWQganBlZ19jb2RlY19zbGVlcChzdHJ1Y3Qgem9yYW4gKnpyLAotCQkJICAgICBpbnQgc2xlZXApOwotZXh0ZXJuIGludCBqcGVnX2NvZGVjX3Jlc2V0KHN0cnVjdCB6b3JhbiAqenIpOwotCi0vKiB6cjM2MHg3IGFjY2VzcyB0byByYXcgY2FwdHVyZSAqLwotZXh0ZXJuIHZvaWQgenIzNjA1N19vdmVybGF5KHN0cnVjdCB6b3JhbiAqenIsCi0JCQkgICAgaW50IG9uKTsKLWV4dGVybiB2b2lkIHdyaXRlX292ZXJsYXlfbWFzayhzdHJ1Y3QgZmlsZSAqZmlsZSwKLQkJCSAgICAgICBzdHJ1Y3QgdmlkZW9fY2xpcCAqdnAsCi0JCQkgICAgICAgaW50IGNvdW50KTsKLWV4dGVybiB2b2lkIHpyMzYwNTdfc2V0X21lbWdyYWIoc3RydWN0IHpvcmFuICp6ciwKLQkJCQlpbnQgbW9kZSk7Ci1leHRlcm4gaW50IHdhaXRfZ3JhYl9wZW5kaW5nKHN0cnVjdCB6b3JhbiAqenIpOwotCi0vKiBpbnRlcnJ1cHRzICovCi1leHRlcm4gdm9pZCBwcmludF9pbnRlcnJ1cHRzKHN0cnVjdCB6b3JhbiAqenIpOwotZXh0ZXJuIHZvaWQgY2xlYXJfaW50ZXJydXB0X2NvdW50ZXJzKHN0cnVjdCB6b3JhbiAqenIpOwotZXh0ZXJuIGlycXJldHVybl90IHpvcmFuX2lycShpbnQgaXJxLCB2b2lkICpkZXZfaWQpOwotCi0vKiBKUEVHIGNvZGVjIGFjY2VzcyAqLwotZXh0ZXJuIHZvaWQganBlZ19zdGFydChzdHJ1Y3Qgem9yYW4gKnpyKTsKLWV4dGVybiB2b2lkIHpyMzYwNTdfZW5hYmxlX2pwZyhzdHJ1Y3Qgem9yYW4gKnpyLAotCQkJICAgICAgIGVudW0gem9yYW5fY29kZWNfbW9kZSBtb2RlKTsKLWV4dGVybiB2b2lkIHpvcmFuX2ZlZWRfc3RhdF9jb20oc3RydWN0IHpvcmFuICp6cik7Ci0KLS8qIGdlbmVyYWwgKi8KLWV4dGVybiB2b2lkIHpvcmFuX3NldF9wY2lfbWFzdGVyKHN0cnVjdCB6b3JhbiAqenIsCi0JCQkJIGludCBzZXRfbWFzdGVyKTsKLWV4dGVybiB2b2lkIHpvcmFuX2luaXRfaGFyZHdhcmUoc3RydWN0IHpvcmFuICp6cik7Ci1leHRlcm4gdm9pZCB6cjM2MDU3X3Jlc3RhcnQoc3RydWN0IHpvcmFuICp6cik7Ci0KLS8qIGkyYyAqLwotZXh0ZXJuIGludCBkZWNvZGVyX2NvbW1hbmQoc3RydWN0IHpvcmFuICp6ciwKLQkJCSAgIGludCBjbWQsCi0JCQkgICB2b2lkICpkYXRhKTsKLWV4dGVybiBpbnQgZW5jb2Rlcl9jb21tYW5kKHN0cnVjdCB6b3JhbiAqenIsCi0JCQkgICBpbnQgY21kLAotCQkJICAgdm9pZCAqZGF0YSk7Ci0KLSNlbmRpZgkJCQkvKiBfX1pPUkFOX0RFVklDRV9IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vem9yYW5fZHJpdmVyLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3pvcmFuX2RyaXZlci5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZGFiOWVlLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vem9yYW5fZHJpdmVyLmMKKysrIC9kZXYvbnVsbApAQCAtMSw0NjQ4ICswLDAgQEAKLS8qCi0gKiBab3JhbiB6cjM2MDU3L3pyMzYwNjcgUENJIGNvbnRyb2xsZXIgZHJpdmVyLCBmb3IgdGhlCi0gKiBQaW5uYWNsZS9NaXJvIERDMTAvREMxMCsvREMzMC9EQzMwKywgSW9tZWdhIEJ1eiwgTGludXgKLSAqIE1lZGlhIExhYnMgTE1MMzMvTE1MMzNSMTAuCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDAwIFNlcmd1ZWkgTWlyaWRvbm92IDxtaXJzZXZAY2ljZXNlLm14PgotICoKLSAqIENoYW5nZXMgZm9yIEJVWiBieSBXb2xmZ2FuZyBTY2hlcnIgPHNjaGVyckBuZXQ0eW91Lm5ldD4KLSAqCi0gKiBDaGFuZ2VzIGZvciBEQzEwL0RDMzAgYnkgTGF1cmVudCBQaW5jaGFydCA8bGF1cmVudC5waW5jaGFydEBza3luZXQuYmU+Ci0gKgotICogQ2hhbmdlcyBmb3IgTE1MMzNSMTAgYnkgTWF4aW0gWWV2dHl1c2hraW4gPG1heEBsaW51eG1lZGlhbGFicy5jb20+Ci0gKgotICogQ2hhbmdlcyBmb3IgdmlkZW9kZXYyL3Y0bDIgYnkgUm9uYWxkIEJ1bHRqZSA8cmJ1bHRqZUByb25hbGQuYml0ZnJlYWsubmV0PgotICoKLSAqIEJhc2VkIG9uCi0gKgotICogTWlybyBEQzEwIGRyaXZlcgotICogQ29weXJpZ2h0IChDKSAxOTk5IFdvbGZnYW5nIFNjaGVyciA8c2NoZXJyQG5ldDR5b3UubmV0PgotICoKLSAqIElvbWVnYSBCdXogZHJpdmVyIHZlcnNpb24gMS4wCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTkgUmFpbmVyIEpvaGFubmkgPFJhaW5lckBKb2hhbm5pLmRlPgotICoKLSAqIGJ1ei4wLjAuMwotICogQ29weXJpZ2h0IChDKSAxOTk4IERhdmUgUGVya3MgPGRwZXJrc0BpYm0ubmV0PgotICoKLSAqIGJ0dHYgLSBCdDg0OCBmcmFtZSBncmFiYmVyIGRyaXZlcgotICogQ29weXJpZ2h0IChDKSAxOTk2LDk3LDk4IFJhbHBoICBNZXR6bGVyIChyamttQHRocC51bmkta29lbG4uZGUpCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICYgTWFyY3VzIE1ldHpsZXIgKG1vY21AdGhwLnVuaS1rb2Vsbi5kZSkKLSAqCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KLSNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0jaW5jbHVkZSA8bGludXgvcGNpLmg+Ci0jaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgotI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KLQotI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgotI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgotI2luY2x1ZGUgPGxpbnV4L2kyYy1hbGdvLWJpdC5oPgotCi0jaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KLSNkZWZpbmUgICAgIE1BUF9OUih4KSAgICAgICB2aXJ0X3RvX3BhZ2UoeCkKLSNkZWZpbmUgICAgIFpPUkFOX1ZJRF9UWVBFICAoIFwKLQkJCQlWSURfVFlQRV9DQVBUVVJFIHwgXAotCQkJCVZJRF9UWVBFX09WRVJMQVkgfCBcCi0JCQkJVklEX1RZUEVfQ0xJUFBJTkcgfCBcCi0JCQkJVklEX1RZUEVfRlJBTUVSQU0gfCBcCi0JCQkJVklEX1RZUEVfU0NBTEVTIHwgXAotCQkJCVZJRF9UWVBFX01KUEVHX0RFQ09ERVIgfCBcCi0JCQkJVklEX1RZUEVfTUpQRUdfRU5DT0RFUiBcCi0JCQkgICAgICkKLQotI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Lmg+Ci0jaW5jbHVkZSA8bWVkaWEvdjRsMi1jb21tb24uaD4KLSNpbmNsdWRlIDxtZWRpYS92NGwyLWlvY3RsLmg+Ci0jaW5jbHVkZSAidmlkZW9jb2RlYy5oIgotCi0jaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgotI2luY2x1ZGUgPGFzbS9pby5oPgotI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+Ci0jaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgotCi0jaW5jbHVkZSA8bGludXgvdmlkZW9fZGVjb2Rlci5oPgotI2luY2x1ZGUgPGxpbnV4L3ZpZGVvX2VuY29kZXIuaD4KLSNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgotI2luY2x1ZGUgInpvcmFuLmgiCi0jaW5jbHVkZSAiem9yYW5fZGV2aWNlLmgiCi0jaW5jbHVkZSAiem9yYW5fY2FyZC5oIgotCi0JLyogd2UgZGVjbGFyZSBzb21lIGNhcmQgdHlwZSBkZWZpbml0aW9ucyBoZXJlLCB0aGV5IG1lYW4KLQkgKiB0aGUgc2FtZSBhcyB0aGUgdjRsMSBaT1JBTl9WSURfVFlQRSBhYm92ZSwgZXhjZXB0IGl0J3MgdjRsMiAqLwotI2RlZmluZSBaT1JBTl9WNEwyX1ZJRF9GTEFHUyAoIFwKLQkJCQlWNEwyX0NBUF9TVFJFQU1JTkcgfFwKLQkJCQlWNEwyX0NBUF9WSURFT19DQVBUVVJFIHxcCi0JCQkJVjRMMl9DQVBfVklERU9fT1VUUFVUIHxcCi0JCQkJVjRMMl9DQVBfVklERU9fT1ZFUkxBWSBcCi0JCQkgICAgICApCi0KLQotI2lmIGRlZmluZWQoQ09ORklHX1ZJREVPX1Y0TDFfQ09NUEFUKQotI2RlZmluZSBaRk1UKHBhbCwgZmNjLCBjcykgXAotCS5wYWxldHRlID0gKHBhbCksIC5mb3VyY2MgPSAoZmNjKSwgLmNvbG9yc3BhY2UgPSAoY3MpCi0jZWxzZQotI2RlZmluZSBaRk1UKHBhbCwgZmNjLCBjcykgXAotCS5mb3VyY2MgPSAoZmNjKSwgLmNvbG9yc3BhY2UgPSAoY3MpCi0jZW5kaWYKLQotY29uc3Qgc3RydWN0IHpvcmFuX2Zvcm1hdCB6b3Jhbl9mb3JtYXRzW10gPSB7Ci0JewotCQkubmFtZSA9ICIxNS1iaXQgUkdCIExFIiwKLQkJWkZNVChWSURFT19QQUxFVFRFX1JHQjU1NSwKLQkJICAgICBWNEwyX1BJWF9GTVRfUkdCNTU1LCBWNEwyX0NPTE9SU1BBQ0VfU1JHQiksCi0JCS5kZXB0aCA9IDE1LAotCQkuZmxhZ3MgPSBaT1JBTl9GT1JNQVRfQ0FQVFVSRSB8Ci0JCQkgWk9SQU5fRk9STUFUX09WRVJMQVksCi0JCS52ZmVzcGZyID0gWlIzNjA1N19WRkVTUEZSX1JHQjU1NXxaUjM2MDU3X1ZGRVNQRlJfRXJyRGlmfAotCQkJICAgWlIzNjA1N19WRkVTUEZSX0xpdHRsZUVuZGlhbiwKLQl9LCB7Ci0JCS5uYW1lID0gIjE1LWJpdCBSR0IgQkUiLAotCQlaRk1UKC0xLAotCQkgICAgIFY0TDJfUElYX0ZNVF9SR0I1NTVYLCBWNEwyX0NPTE9SU1BBQ0VfU1JHQiksCi0JCS5kZXB0aCA9IDE1LAotCQkuZmxhZ3MgPSBaT1JBTl9GT1JNQVRfQ0FQVFVSRSB8Ci0JCQkgWk9SQU5fRk9STUFUX09WRVJMQVksCi0JCS52ZmVzcGZyID0gWlIzNjA1N19WRkVTUEZSX1JHQjU1NXxaUjM2MDU3X1ZGRVNQRlJfRXJyRGlmLAotCX0sIHsKLQkJLm5hbWUgPSAiMTYtYml0IFJHQiBMRSIsCi0JCVpGTVQoVklERU9fUEFMRVRURV9SR0I1NjUsCi0JCSAgICAgVjRMMl9QSVhfRk1UX1JHQjU2NSwgVjRMMl9DT0xPUlNQQUNFX1NSR0IpLAotCQkuZGVwdGggPSAxNiwKLQkJLmZsYWdzID0gWk9SQU5fRk9STUFUX0NBUFRVUkUgfAotCQkJIFpPUkFOX0ZPUk1BVF9PVkVSTEFZLAotCQkudmZlc3BmciA9IFpSMzYwNTdfVkZFU1BGUl9SR0I1NjV8WlIzNjA1N19WRkVTUEZSX0VyckRpZnwKLQkJCSAgIFpSMzYwNTdfVkZFU1BGUl9MaXR0bGVFbmRpYW4sCi0JfSwgewotCQkubmFtZSA9ICIxNi1iaXQgUkdCIEJFIiwKLQkJWkZNVCgtMSwKLQkJICAgICBWNEwyX1BJWF9GTVRfUkdCNTY1WCwgVjRMMl9DT0xPUlNQQUNFX1NSR0IpLAotCQkuZGVwdGggPSAxNiwKLQkJLmZsYWdzID0gWk9SQU5fRk9STUFUX0NBUFRVUkUgfAotCQkJIFpPUkFOX0ZPUk1BVF9PVkVSTEFZLAotCQkudmZlc3BmciA9IFpSMzYwNTdfVkZFU1BGUl9SR0I1NjV8WlIzNjA1N19WRkVTUEZSX0VyckRpZiwKLQl9LCB7Ci0JCS5uYW1lID0gIjI0LWJpdCBSR0IiLAotCQlaRk1UKFZJREVPX1BBTEVUVEVfUkdCMjQsCi0JCSAgICAgVjRMMl9QSVhfRk1UX0JHUjI0LCBWNEwyX0NPTE9SU1BBQ0VfU1JHQiksCi0JCS5kZXB0aCA9IDI0LAotCQkuZmxhZ3MgPSBaT1JBTl9GT1JNQVRfQ0FQVFVSRSB8Ci0JCQkgWk9SQU5fRk9STUFUX09WRVJMQVksCi0JCS52ZmVzcGZyID0gWlIzNjA1N19WRkVTUEZSX1JHQjg4OHxaUjM2MDU3X1ZGRVNQRlJfUGFjazI0LAotCX0sIHsKLQkJLm5hbWUgPSAiMzItYml0IFJHQiBMRSIsCi0JCVpGTVQoVklERU9fUEFMRVRURV9SR0IzMiwKLQkJICAgICBWNEwyX1BJWF9GTVRfQkdSMzIsIFY0TDJfQ09MT1JTUEFDRV9TUkdCKSwKLQkJLmRlcHRoID0gMzIsCi0JCS5mbGFncyA9IFpPUkFOX0ZPUk1BVF9DQVBUVVJFIHwKLQkJCSBaT1JBTl9GT1JNQVRfT1ZFUkxBWSwKLQkJLnZmZXNwZnIgPSBaUjM2MDU3X1ZGRVNQRlJfUkdCODg4fFpSMzYwNTdfVkZFU1BGUl9MaXR0bGVFbmRpYW4sCi0JfSwgewotCQkubmFtZSA9ICIzMi1iaXQgUkdCIEJFIiwKLQkJWkZNVCgtMSwKLQkJICAgICBWNEwyX1BJWF9GTVRfUkdCMzIsIFY0TDJfQ09MT1JTUEFDRV9TUkdCKSwKLQkJLmRlcHRoID0gMzIsCi0JCS5mbGFncyA9IFpPUkFOX0ZPUk1BVF9DQVBUVVJFIHwKLQkJCSBaT1JBTl9GT1JNQVRfT1ZFUkxBWSwKLQkJLnZmZXNwZnIgPSBaUjM2MDU3X1ZGRVNQRlJfUkdCODg4LAotCX0sIHsKLQkJLm5hbWUgPSAiNDoyOjIsIHBhY2tlZCwgWVVZViIsCi0JCVpGTVQoVklERU9fUEFMRVRURV9ZVVY0MjIsCi0JCSAgICAgVjRMMl9QSVhfRk1UX1lVWVYsIFY0TDJfQ09MT1JTUEFDRV9TTVBURTE3ME0pLAotCQkuZGVwdGggPSAxNiwKLQkJLmZsYWdzID0gWk9SQU5fRk9STUFUX0NBUFRVUkUgfAotCQkJIFpPUkFOX0ZPUk1BVF9PVkVSTEFZLAotCQkudmZlc3BmciA9IFpSMzYwNTdfVkZFU1BGUl9ZVVY0MjIsCi0JfSwgewotCQkubmFtZSA9ICI0OjI6MiwgcGFja2VkLCBVWVZZIiwKLQkJWkZNVChWSURFT19QQUxFVFRFX1VZVlksCi0JCSAgICAgVjRMMl9QSVhfRk1UX1VZVlksIFY0TDJfQ09MT1JTUEFDRV9TTVBURTE3ME0pLAotCQkuZGVwdGggPSAxNiwKLQkJLmZsYWdzID0gWk9SQU5fRk9STUFUX0NBUFRVUkUgfAotCQkJIFpPUkFOX0ZPUk1BVF9PVkVSTEFZLAotCQkudmZlc3BmciA9IFpSMzYwNTdfVkZFU1BGUl9ZVVY0MjJ8WlIzNjA1N19WRkVTUEZSX0xpdHRsZUVuZGlhbiwKLQl9LCB7Ci0JCS5uYW1lID0gIkhhcmR3YXJlLWVuY29kZWQgTW90aW9uLUpQRUciLAotCQlaRk1UKC0xLAotCQkgICAgIFY0TDJfUElYX0ZNVF9NSlBFRywgVjRMMl9DT0xPUlNQQUNFX1NNUFRFMTcwTSksCi0JCS5kZXB0aCA9IDAsCi0JCS5mbGFncyA9IFpPUkFOX0ZPUk1BVF9DQVBUVVJFIHwKLQkJCSBaT1JBTl9GT1JNQVRfUExBWUJBQ0sgfAotCQkJIFpPUkFOX0ZPUk1BVF9DT01QUkVTU0VELAotCX0KLX07Ci0jZGVmaW5lIE5VTV9GT1JNQVRTIEFSUkFZX1NJWkUoem9yYW5fZm9ybWF0cykKLQotLy8gUko6IFRlc3Qgb25seSAtIHdhbnQgdG8gdGVzdCBCVVpfVVNFX0hJTUVNIGV2ZW4gd2hlbiBDT05GSUdfQklHUEhZU19BUkVBIGlzIGRlZmluZWQKLQotCi1leHRlcm4gaW50IHY0bF9uYnVmczsKLWV4dGVybiBpbnQgdjRsX2J1ZnNpemU7Ci1leHRlcm4gaW50IGpwZ19uYnVmczsKLWV4dGVybiBpbnQganBnX2J1ZnNpemU7Ci1leHRlcm4gaW50IHBhc3NfdGhyb3VnaDsKLQotc3RhdGljIGludCBsb2NrX25vcm07CS8qIDAgPSBkZWZhdWx0IDEgPSBEb24ndCBjaGFuZ2UgVFYgc3RhbmRhcmQgKG5vcm0pICovCi1tb2R1bGVfcGFyYW0obG9ja19ub3JtLCBpbnQsIDA2NDQpOwotTU9EVUxFX1BBUk1fREVTQyhsb2NrX25vcm0sICJQcmV2ZW50IG5vcm0gY2hhbmdlcyAoMSA9IGlnbm9yZSwgPjEgPSBmYWlsKSIpOwotCi0JLyogc21hbGwgaGVscGVyIGZ1bmN0aW9uIGZvciBjYWxjdWxhdGluZyBidWZmZXJzaXplcyBmb3IgdjRsMgotCSAqIHdlIGNhbGN1bGF0ZSB0aGUgbmVhcmVzdCBoaWdoZXIgcG93ZXItb2YtdHdvLCB3aGljaAotCSAqIHdpbGwgYmUgdGhlIHJlY29tbWVuZGVkIGJ1ZmZlcnNpemUgKi8KLXN0YXRpYyBfX3UzMgotem9yYW5fdjRsMl9jYWxjX2J1ZnNpemUgKHN0cnVjdCB6b3Jhbl9qcGdfc2V0dGluZ3MgKnNldHRpbmdzKQotewotCV9fdTggZGl2ID0gc2V0dGluZ3MtPlZlckRjbSAqIHNldHRpbmdzLT5Ib3JEY20gKiBzZXR0aW5ncy0+VG1wRGNtOwotCV9fdTMyIG51bSA9ICgxMDI0ICogNTEyKSAvIChkaXYpOwotCV9fdTMyIHJlc3VsdCA9IDI7Ci0KLQludW0tLTsKLQl3aGlsZSAobnVtKSB7Ci0JCW51bSA+Pj0gMTsKLQkJcmVzdWx0IDw8PSAxOwotCX0KLQotCWlmIChyZXN1bHQgPiBqcGdfYnVmc2l6ZSkKLQkJcmV0dXJuIGpwZ19idWZzaXplOwotCWlmIChyZXN1bHQgPCA4MTkyKQotCQlyZXR1cm4gODE5MjsKLQlyZXR1cm4gcmVzdWx0OwotfQotCi0vKiBmb3J3YXJkIHJlZmVyZW5jZXMgKi8KLXN0YXRpYyB2b2lkIHY0bF9mYnVmZmVyX2ZyZWUoc3RydWN0IGZpbGUgKmZpbGUpOwotc3RhdGljIHZvaWQganBnX2ZidWZmZXJfZnJlZShzdHJ1Y3QgZmlsZSAqZmlsZSk7Ci0KLS8qCi0gKiAgIEFsbG9jYXRlIHRoZSBWNEwgZ3JhYiBidWZmZXJzCi0gKgotICogICBUaGVzZSBoYXZlIHRvIGJlIHB5c2ljYWxseSBjb250aWd1b3VzLgotICogICBJZiB2NGxfYnVmc2l6ZSA8PSBNQVhfS01BTExPQ19NRU0gd2UgdXNlIGttYWxsb2MKLSAqICAgZWxzZSB3ZSB0cnkgdG8gYWxsb2NhdGUgdGhlbSB3aXRoIGJpZ3BoeXNhcmVhX2FsbG9jX3BhZ2VzCi0gKiAgIGlmIHRoZSBiaWdwaHlzYXJlYSBwYXRjaCBpcyBwcmVzZW50IGluIHRoZSBrZXJuZWwsCi0gKiAgIGVsc2Ugd2UgdHJ5IHRvIHVzZSBoaWdoIG1lbW9yeSAoaWYgdGhlIHVzZXIgaGFzIGJvb3RldAotICogICBMaW51eCB3aXRoIHRoZSBuZWNlc3NhcnkgbWVtb3J5IGxlZnQgb3ZlcikuCi0gKi8KLQotc3RhdGljIHVuc2lnbmVkIGxvbmcKLWdldF9oaWdoX21lbSAodW5zaWduZWQgbG9uZyBzaXplKQotewotLyoKLSAqIENoZWNrIGlmIHRoZXJlIGlzIHVzYWJsZSBtZW1vcnkgYXQgdGhlIGVuZCBvZiBMaW51eCBtZW1vcnkKLSAqIG9mIGF0IGxlYXN0IHNpemUuIFJldHVybiB0aGUgcGh5c2ljYWwgYWRkcmVzcyBvZiB0aGlzIG1lbW9yeSwKLSAqIHJldHVybiAwIG9uIGZhaWx1cmUuCi0gKgotICogVGhlIGlkZWEgaXMgZnJvbSBBbGV4YW5kcm8gUnViaW5pJ3MgYm9vayAiTGludXggZGV2aWNlIGRyaXZlcnMiLgotICogVGhlIGRyaXZlciBmcm9tIGhpbSB3aGljaCBpcyBkb3dubG9hZGFibGUgZnJvbSBPJ1JlaWxseSdzCi0gKiB3ZWIgc2l0ZSBtaXNzZXMgdGhlICJ2aXJ0X3RvX3BoeXMoaGlnaF9tZW1vcnkpIiBwYXJ0Ci0gKiAoYW5kIHRoZXJlZm9yZSBkb2Vzbid0IHdvcmsgYXQgYWxsIC0gYXQgbGVhc3Qgd2l0aCAyLjIueCBrZXJuZWxzKS4KLSAqCi0gKiBJdCBzaG91bGQgYmUgdW5uZWNlc3NhcnkgdG8gbWVudGlvbiB0aGF0IFRISVMgSVMgREFOR0VST1VTLAotICogaWYgbW9yZSB0aGFuIG9uZSBkcml2ZXIgYXQgYSB0aW1lIGhhcyB0aGUgaWRlYSB0byB1c2UgdGhpcyBtZW1vcnkhISEhCi0gKi8KLQotCXZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgX19pb21lbSAqbWVtOwotCXVuc2lnbmVkIGNoYXIgYzsKLQl1bnNpZ25lZCBsb25nIGhpX21lbV9waDsKLQl1bnNpZ25lZCBsb25nIGk7Ci0KLQkvKiBNYXAgdGhlIGhpZ2ggbWVtb3J5IHRvIHVzZXIgc3BhY2UgKi8KLQotCWhpX21lbV9waCA9IHZpcnRfdG9fcGh5cyhoaWdoX21lbW9yeSk7Ci0KLQltZW0gPSBpb3JlbWFwKGhpX21lbV9waCwgc2l6ZSk7Ci0JaWYgKCFtZW0pIHsKLQkJZHByaW50aygxLAotCQkJS0VSTl9FUlIgIiVzOiBnZXRfaGlnaF9tZW0oKSAtIGlvcmVtYXAgZmFpbGVkXG4iLAotCQkJWk9SQU5fTkFNRSk7Ci0JCXJldHVybiAwOwotCX0KLQotCWZvciAoaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKLQkJLyogQ2hlY2sgaWYgaXQgaXMgbWVtb3J5ICovCi0JCWMgPSBpICYgMHhmZjsKLQkJd3JpdGViKGMsIG1lbSArIGkpOwotCQlpZiAocmVhZGIobWVtICsgaSkgIT0gYykKLQkJCWJyZWFrOwotCQljID0gMjU1IC0gYzsKLQkJd3JpdGViKGMsIG1lbSArIGkpOwotCQlpZiAocmVhZGIobWVtICsgaSkgIT0gYykKLQkJCWJyZWFrOwotCQl3cml0ZWIoMCwgbWVtICsgaSk7CS8qIHplcm8gb3V0IG1lbW9yeSAqLwotCi0JCS8qIGdpdmUgdGhlIGtlcm5lbCBhaXIgdG8gYnJlYXRoICovCi0JCWlmICgoaSAmIDB4M2ZmZmYpID09IDB4M2ZmZmYpCi0JCQlzY2hlZHVsZSgpOwotCX0KLQotCWlvdW5tYXAobWVtKTsKLQotCWlmIChpICE9IHNpemUpIHsKLQkJZHByaW50aygxLAotCQkJS0VSTl9FUlIKLQkJCSIlczogZ2V0X2hpZ2hfbWVtKCkgLSByZXF1ZXN0ZWQgJWx1LCBhdmFpbCAlbHVcbiIsCi0JCQlaT1JBTl9OQU1FLCBzaXplLCBpKTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JcmV0dXJuIGhpX21lbV9waDsKLX0KLQotc3RhdGljIGludAotdjRsX2ZidWZmZXJfYWxsb2MgKHN0cnVjdCBmaWxlICpmaWxlKQotewotCXN0cnVjdCB6b3Jhbl9maCAqZmggPSBmaWxlLT5wcml2YXRlX2RhdGE7Ci0Jc3RydWN0IHpvcmFuICp6ciA9IGZoLT56cjsKLQlpbnQgaSwgb2ZmOwotCXVuc2lnbmVkIGNoYXIgKm1lbTsKLQl1bnNpZ25lZCBsb25nIHBtZW0gPSAwOwotCi0JLyogd2UgbWlnaHQgaGF2ZSBvbGQgYnVmZmVycyBseWluZyBhcm91bmQuLi4gKi8KLQlpZiAoZmgtPnY0bF9idWZmZXJzLnJlYWR5X3RvX2JlX2ZyZWVkKSB7Ci0JCXY0bF9mYnVmZmVyX2ZyZWUoZmlsZSk7Ci0JfQotCi0JZm9yIChpID0gMDsgaSA8IGZoLT52NGxfYnVmZmVycy5udW1fYnVmZmVyczsgaSsrKSB7Ci0JCWlmIChmaC0+djRsX2J1ZmZlcnMuYnVmZmVyW2ldLmZidWZmZXIpCi0JCQlkcHJpbnRrKDIsCi0JCQkJS0VSTl9XQVJOSU5HCi0JCQkJIiVzOiB2NGxfZmJ1ZmZlcl9hbGxvYygpIC0gYnVmZmVyICVkIGFsbHJlYWR5IGFsbG9jYXRlZCE/XG4iLAotCQkJCVpSX0RFVk5BTUUoenIpLCBpKTsKLQotCQkvL3VkZWxheSgyMCk7Ci0JCWlmIChmaC0+djRsX2J1ZmZlcnMuYnVmZmVyX3NpemUgPD0gTUFYX0tNQUxMT0NfTUVNKSB7Ci0JCQkvKiBVc2Uga21hbGxvYyAqLwotCi0JCQltZW0gPSBrbWFsbG9jKGZoLT52NGxfYnVmZmVycy5idWZmZXJfc2l6ZSwgR0ZQX0tFUk5FTCk7Ci0JCQlpZiAoIW1lbSkgewotCQkJCWRwcmludGsoMSwKLQkJCQkJS0VSTl9FUlIKLQkJCQkJIiVzOiB2NGxfZmJ1ZmZlcl9hbGxvYygpIC0ga21hbGxvYyBmb3IgVjRMIGJ1ZiAlZCBmYWlsZWRcbiIsCi0JCQkJCVpSX0RFVk5BTUUoenIpLCBpKTsKLQkJCQl2NGxfZmJ1ZmZlcl9mcmVlKGZpbGUpOwotCQkJCXJldHVybiAtRU5PQlVGUzsKLQkJCX0KLQkJCWZoLT52NGxfYnVmZmVycy5idWZmZXJbaV0uZmJ1ZmZlciA9IG1lbTsKLQkJCWZoLT52NGxfYnVmZmVycy5idWZmZXJbaV0uZmJ1ZmZlcl9waHlzID0KLQkJCSAgICB2aXJ0X3RvX3BoeXMobWVtKTsKLQkJCWZoLT52NGxfYnVmZmVycy5idWZmZXJbaV0uZmJ1ZmZlcl9idXMgPQotCQkJICAgIHZpcnRfdG9fYnVzKG1lbSk7Ci0JCQlmb3IgKG9mZiA9IDA7IG9mZiA8IGZoLT52NGxfYnVmZmVycy5idWZmZXJfc2l6ZTsKLQkJCSAgICAgb2ZmICs9IFBBR0VfU0laRSkKLQkJCQlTZXRQYWdlUmVzZXJ2ZWQoTUFQX05SKG1lbSArIG9mZikpOwotCQkJZHByaW50ayg0LAotCQkJCUtFUk5fSU5GTwotCQkJCSIlczogdjRsX2ZidWZmZXJfYWxsb2MoKSAtIFY0TCBmcmFtZSAlZCBtZW0gMHglbHggKGJ1czogMHglbHgpXG4iLAotCQkJCVpSX0RFVk5BTUUoenIpLCBpLCAodW5zaWduZWQgbG9uZykgbWVtLAotCQkJCXZpcnRfdG9fYnVzKG1lbSkpOwotCQl9IGVsc2UgewotCi0JCQkvKiBVc2UgaGlnaCBtZW1vcnkgd2hpY2ggaGFzIGJlZW4gbGVmdCBhdCBib290IHRpbWUgKi8KLQotCQkJLyogT2suLCBPay4gdGhpcyBpcyBhbiBldmlsIGhhY2sgLSB3ZSBtYWtlCi0JCQkgKiB0aGUgYXNzdW1wdGlvbiB0aGF0IHBoeXNpY2FsIGFkZHJlc3NlcyBhcmUKLQkJCSAqIHRoZSBzYW1lIGFzIGJ1cyBhZGRyZXNzZXMgKHRydWUgYXQgbGVhc3QKLQkJCSAqIGZvciBJbnRlbCBwcm9jZXNzb3JzKS4gVGhlIHdob2xlIG1ldGhvZCBvZgotCQkJICogb2J0YWluaW5nIGFuZCB1c2luZyB0aGlzIG1lbW9yeSBpcyBub3QgdmVyeQotCQkJICogbmljZSAtIGJ1dCBJIGhvcGUgaXQgc2F2ZXMgc29tZSBwb29yIHVzZXJzCi0JCQkgKiBmcm9tIGtlcm5lbCBoYWNraW5nLCB3aGljaCBtaWdodCBoYXZlIGV2ZW4KLQkJCSAqIG1vcmUgZXZpbCByZXN1bHRzICovCi0KLQkJCWlmIChpID09IDApIHsKLQkJCQlpbnQgc2l6ZSA9Ci0JCQkJICAgIGZoLT52NGxfYnVmZmVycy5udW1fYnVmZmVycyAqCi0JCQkJICAgIGZoLT52NGxfYnVmZmVycy5idWZmZXJfc2l6ZTsKLQotCQkJCXBtZW0gPSBnZXRfaGlnaF9tZW0oc2l6ZSk7Ci0JCQkJaWYgKHBtZW0gPT0gMCkgewotCQkJCQlkcHJpbnRrKDEsCi0JCQkJCQlLRVJOX0VSUgotCQkJCQkJIiVzOiB2NGxfZmJ1ZmZlcl9hbGxvYygpIC0gZ2V0X2hpZ2hfbWVtIChzaXplID0gJWQgS0IpIGZvciBWNEwgYnVmcyBmYWlsZWRcbiIsCi0JCQkJCQlaUl9ERVZOQU1FKHpyKSwgc2l6ZSA+PiAxMCk7Ci0JCQkJCXJldHVybiAtRU5PQlVGUzsKLQkJCQl9Ci0JCQkJZmgtPnY0bF9idWZmZXJzLmJ1ZmZlclswXS5mYnVmZmVyID0gTlVMTDsKLQkJCQlmaC0+djRsX2J1ZmZlcnMuYnVmZmVyWzBdLmZidWZmZXJfcGh5cyA9IHBtZW07Ci0JCQkJZmgtPnY0bF9idWZmZXJzLmJ1ZmZlclswXS5mYnVmZmVyX2J1cyA9IHBtZW07Ci0JCQkJZHByaW50ayg0LAotCQkJCQlLRVJOX0lORk8KLQkJCQkJIiVzOiB2NGxfZmJ1ZmZlcl9hbGxvYygpIC0gdXNpbmcgJWQgS0IgaGlnaCBtZW1vcnlcbiIsCi0JCQkJCVpSX0RFVk5BTUUoenIpLCBzaXplID4+IDEwKTsKLQkJCX0gZWxzZSB7Ci0JCQkJZmgtPnY0bF9idWZmZXJzLmJ1ZmZlcltpXS5mYnVmZmVyID0gTlVMTDsKLQkJCQlmaC0+djRsX2J1ZmZlcnMuYnVmZmVyW2ldLmZidWZmZXJfcGh5cyA9Ci0JCQkJICAgIHBtZW0gKyBpICogZmgtPnY0bF9idWZmZXJzLmJ1ZmZlcl9zaXplOwotCQkJCWZoLT52NGxfYnVmZmVycy5idWZmZXJbaV0uZmJ1ZmZlcl9idXMgPQotCQkJCSAgICBwbWVtICsgaSAqIGZoLT52NGxfYnVmZmVycy5idWZmZXJfc2l6ZTsKLQkJCX0KLQkJfQotCX0KLQotCWZoLT52NGxfYnVmZmVycy5hbGxvY2F0ZWQgPSAxOwotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qIGZyZWUgdGhlIFY0TCBncmFiIGJ1ZmZlcnMgKi8KLXN0YXRpYyB2b2lkCi12NGxfZmJ1ZmZlcl9mcmVlIChzdHJ1Y3QgZmlsZSAqZmlsZSkKLXsKLQlzdHJ1Y3Qgem9yYW5fZmggKmZoID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwotCXN0cnVjdCB6b3JhbiAqenIgPSBmaC0+enI7Ci0JaW50IGksIG9mZjsKLQl1bnNpZ25lZCBjaGFyICptZW07Ci0KLQlkcHJpbnRrKDQsIEtFUk5fSU5GTyAiJXM6IHY0bF9mYnVmZmVyX2ZyZWUoKVxuIiwgWlJfREVWTkFNRSh6cikpOwotCi0JZm9yIChpID0gMDsgaSA8IGZoLT52NGxfYnVmZmVycy5udW1fYnVmZmVyczsgaSsrKSB7Ci0JCWlmICghZmgtPnY0bF9idWZmZXJzLmJ1ZmZlcltpXS5mYnVmZmVyKQotCQkJY29udGludWU7Ci0KLQkJaWYgKGZoLT52NGxfYnVmZmVycy5idWZmZXJfc2l6ZSA8PSBNQVhfS01BTExPQ19NRU0pIHsKLQkJCW1lbSA9IGZoLT52NGxfYnVmZmVycy5idWZmZXJbaV0uZmJ1ZmZlcjsKLQkJCWZvciAob2ZmID0gMDsgb2ZmIDwgZmgtPnY0bF9idWZmZXJzLmJ1ZmZlcl9zaXplOwotCQkJICAgICBvZmYgKz0gUEFHRV9TSVpFKQotCQkJCUNsZWFyUGFnZVJlc2VydmVkKE1BUF9OUihtZW0gKyBvZmYpKTsKLQkJCWtmcmVlKCh2b2lkICopIGZoLT52NGxfYnVmZmVycy5idWZmZXJbaV0uZmJ1ZmZlcik7Ci0JCX0KLQkJZmgtPnY0bF9idWZmZXJzLmJ1ZmZlcltpXS5mYnVmZmVyID0gTlVMTDsKLQl9Ci0KLQlmaC0+djRsX2J1ZmZlcnMuYWxsb2NhdGVkID0gMDsKLQlmaC0+djRsX2J1ZmZlcnMucmVhZHlfdG9fYmVfZnJlZWQgPSAwOwotfQotCi0vKgotICogICBBbGxvY2F0ZSB0aGUgTUpQRUcgZ3JhYiBidWZmZXJzLgotICoKLSAqICAgSWYgdGhlIHJlcXVlc3RlZCBidWZmZXIgc2l6ZSBpcyBzbWFsbGVyIHRoYW4gTUFYX0tNQUxMT0NfTUVNLAotICogICBrbWFsbG9jIGlzIHVzZWQgdG8gcmVxdWVzdCBhIHBoeXNpY2FsbHkgY29udGlndW91cyBhcmVhLAotICogICBlbHNlIHdlIGFsbG9jYXRlIHRoZSBtZW1vcnkgaW4gZnJhbWdlbnRzIHdpdGggZ2V0X3plcm9lZF9wYWdlLgotICoKLSAqICAgSWYgYSBOYXRvbWEgY2hpcHNldCBpcyBwcmVzZW50IGFuZCB0aGlzIGlzIGEgcmV2aXNpb24gMSB6cjM2MDU3LAotICogICBlYWNoIE1KUEVHIGJ1ZmZlciBuZWVkcyB0byBiZSBwaHlzaWNhbGx5IGNvbnRpZ3VvdXMuCi0gKiAgIChSSjogVGhpcyBzdGF0ZW1lbnQgaXMgZnJvbSBEYXZlIFBlcmtzJyBvcmlnaW5hbCBkcml2ZXIsCi0gKiAgIEkgY291bGQgbmV2ZXIgY2hlY2sgaXQgYmVjYXVzZSBJIGhhdmUgYSB6cjM2MDY3KQotICogICBUaGUgZHJpdmVyIGNhcmVzIGFib3V0IHRoaXMgYmVjYXVzZSBpdCByZWR1Y2VzIHRoZSBidWZmZXIKLSAqICAgc2l6ZSB0byBNQVhfS01BTExPQ19NRU0gaW4gdGhhdCBjYXNlICh3aGljaCBmb3JjZXMgY29udGlndW91cyBhbGxvY2F0aW9uKS4KLSAqCi0gKiAgIFJKOiBUaGUgY29udGVudHMgZ3JhYiBidWZmZXJzIG5lZWRzIG5ldmVyIGJlIGFjY2Vzc2VkIGluIHRoZSBkcml2ZXIuCi0gKiAgICAgICBUaGVyZWZvcmUgdGhlcmUgaXMgbm8gbmVlZCB0byBhbGxvY2F0ZSB0aGVtIHdpdGggdm1hbGxvYyBpbiBvcmRlcgotICogICAgICAgdG8gZ2V0IGEgY29udGlndW91cyB2aXJ0dWFsIG1lbW9yeSBzcGFjZS4KLSAqICAgICAgIEkgZG9uJ3QgdW5kZXJzdGFuZCB3aHkgbWFueSBvdGhlciBkcml2ZXJzIGZpcnN0IGFsbG9jYXRlIHRoZW0gd2l0aAotICogICAgICAgdm1hbGxvYyAod2hpY2ggdXNlcyBpbnRlcm5hbGx5IGFsc28gZ2V0X3plcm9lZF9wYWdlLCBidXQgZGVsaXZlcnMgeW91Ci0gKiAgICAgICB2aXJ0dWFsIGFkZHJlc3NlcykgYW5kIHRoZW4gYWdhaW4gaGF2ZSB0byBtYWtlIGEgbG90IG9mIGVmZm9ydHMKLSAqICAgICAgIHRvIGdldCB0aGUgcGh5c2ljYWwgYWRkcmVzcy4KLSAqCi0gKiAgIEJlbiBDYXBwZXI6Ci0gKiAgICAgICBPbiBiaWctZW5kaWFuIGFyY2hpdGVjdHVyZXMgKHN1Y2ggYXMgcHBjKSBzb21lIGV4dHJhIHN0ZXBzCi0gKiAgICAgICBhcmUgbmVlZGVkLiBXaGVuIHJlYWRpbmcgYW5kIHdyaXRpbmcgdG8gdGhlIHN0YXRfY29tIGFycmF5Ci0gKiAgICAgICBhbmQgZnJhZ21lbnQgYnVmZmVycywgdGhlIGRldmljZSBleHBlY3RzIHRvIHNlZSBsaXR0bGUtCi0gKiAgICAgICBlbmRpYW4gdmFsdWVzLiBUaGUgdXNlIG9mIGNwdV90b19sZTMyKCkgYW5kIGxlMzJfdG9fY3B1KCkKLSAqICAgICAgIGluIHRoaXMgZnVuY3Rpb24gKGFuZCBvbmUgb3IgdHdvIG90aGVycyBpbiB6b3Jhbl9kZXZpY2UuYykKLSAqICAgICAgIGVuc3VyZSB0aGF0IHRoZXNlIHZhbHVlcyBhcmUgYWx3YXlzIHN0b3JlZCBpbiBsaXR0bGUtZW5kaWFuCi0gKiAgICAgICBmb3JtLCByZWdhcmRsZXNzIG9mIGFyY2hpdGVjdHVyZS4gVGhlIHpyMzYwNTcgZG9lcyBWZXJ5IEJhZAotICogICAgICAgVGhpbmdzIG9uIGJpZyBlbmRpYW4gYXJjaGl0ZWN0dXJlcyBpZiB0aGUgc3RhdF9jb20gYXJyYXkKLSAqICAgICAgIGFuZCBmcmFnbWVudCBidWZmZXJzIGFyZSBub3QgbGl0dGxlLWVuZGlhbi4KLSAqLwotCi1zdGF0aWMgaW50Ci1qcGdfZmJ1ZmZlcl9hbGxvYyAoc3RydWN0IGZpbGUgKmZpbGUpCi17Ci0Jc3RydWN0IHpvcmFuX2ZoICpmaCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKLQlzdHJ1Y3Qgem9yYW4gKnpyID0gZmgtPnpyOwotCWludCBpLCBqLCBvZmY7Ci0JdW5zaWduZWQgbG9uZyBtZW07Ci0KLQkvKiB3ZSBtaWdodCBoYXZlIG9sZCBidWZmZXJzIGx5aW5nIGFyb3VuZCAqLwotCWlmIChmaC0+anBnX2J1ZmZlcnMucmVhZHlfdG9fYmVfZnJlZWQpIHsKLQkJanBnX2ZidWZmZXJfZnJlZShmaWxlKTsKLQl9Ci0KLQlmb3IgKGkgPSAwOyBpIDwgZmgtPmpwZ19idWZmZXJzLm51bV9idWZmZXJzOyBpKyspIHsKLQkJaWYgKGZoLT5qcGdfYnVmZmVycy5idWZmZXJbaV0uZnJhZ190YWIpCi0JCQlkcHJpbnRrKDIsCi0JCQkJS0VSTl9XQVJOSU5HCi0JCQkJIiVzOiBqcGdfZmJ1ZmZlcl9hbGxvYygpIC0gYnVmZmVyICVkIGFsbHJlYWR5IGFsbG9jYXRlZCE/XG4iLAotCQkJCVpSX0RFVk5BTUUoenIpLCBpKTsKLQotCQkvKiBBbGxvY2F0ZSBmcmFnbWVudCB0YWJsZSBmb3IgdGhpcyBidWZmZXIgKi8KLQotCQltZW0gPSBnZXRfemVyb2VkX3BhZ2UoR0ZQX0tFUk5FTCk7Ci0JCWlmIChtZW0gPT0gMCkgewotCQkJZHByaW50aygxLAotCQkJCUtFUk5fRVJSCi0JCQkJIiVzOiBqcGdfZmJ1ZmZlcl9hbGxvYygpIC0gZ2V0X3plcm9lZF9wYWdlIChmcmFnX3RhYikgZmFpbGVkIGZvciBidWZmZXIgJWRcbiIsCi0JCQkJWlJfREVWTkFNRSh6ciksIGkpOwotCQkJanBnX2ZidWZmZXJfZnJlZShmaWxlKTsKLQkJCXJldHVybiAtRU5PQlVGUzsKLQkJfQotCQlmaC0+anBnX2J1ZmZlcnMuYnVmZmVyW2ldLmZyYWdfdGFiID0gKF9fbGUzMiAqKSBtZW07Ci0JCWZoLT5qcGdfYnVmZmVycy5idWZmZXJbaV0uZnJhZ190YWJfYnVzID0KLQkJICAgIHZpcnRfdG9fYnVzKCh2b2lkICopIG1lbSk7Ci0KLQkJLy9pZiAoYWxsb2NfY29udGlnKSB7Ci0JCWlmIChmaC0+anBnX2J1ZmZlcnMubmVlZF9jb250aWd1b3VzKSB7Ci0JCQltZW0gPQotCQkJICAgICh1bnNpZ25lZCBsb25nKSBrbWFsbG9jKGZoLT5qcGdfYnVmZmVycy4KLQkJCQkJCSAgICBidWZmZXJfc2l6ZSwKLQkJCQkJCSAgICBHRlBfS0VSTkVMKTsKLQkJCWlmIChtZW0gPT0gMCkgewotCQkJCWRwcmludGsoMSwKLQkJCQkJS0VSTl9FUlIKLQkJCQkJIiVzOiBqcGdfZmJ1ZmZlcl9hbGxvYygpIC0ga21hbGxvYyBmYWlsZWQgZm9yIGJ1ZmZlciAlZFxuIiwKLQkJCQkJWlJfREVWTkFNRSh6ciksIGkpOwotCQkJCWpwZ19mYnVmZmVyX2ZyZWUoZmlsZSk7Ci0JCQkJcmV0dXJuIC1FTk9CVUZTOwotCQkJfQotCQkJZmgtPmpwZ19idWZmZXJzLmJ1ZmZlcltpXS5mcmFnX3RhYlswXSA9Ci0JCQkgICAgY3B1X3RvX2xlMzIodmlydF90b19idXMoKHZvaWQgKikgbWVtKSk7Ci0JCQlmaC0+anBnX2J1ZmZlcnMuYnVmZmVyW2ldLmZyYWdfdGFiWzFdID0KLQkJCSAgICBjcHVfdG9fbGUzMigoKGZoLT5qcGdfYnVmZmVycy5idWZmZXJfc2l6ZSAvIDQpIDw8IDEpIHwgMSk7Ci0JCQlmb3IgKG9mZiA9IDA7IG9mZiA8IGZoLT5qcGdfYnVmZmVycy5idWZmZXJfc2l6ZTsKLQkJCSAgICAgb2ZmICs9IFBBR0VfU0laRSkKLQkJCQlTZXRQYWdlUmVzZXJ2ZWQoTUFQX05SKG1lbSArIG9mZikpOwotCQl9IGVsc2UgewotCQkJLyoganBnX2J1ZnNpemUgaXMgYWxscmVheSBwYWdlIGFsaWduZWQgKi8KLQkJCWZvciAoaiA9IDA7Ci0JCQkgICAgIGogPCBmaC0+anBnX2J1ZmZlcnMuYnVmZmVyX3NpemUgLyBQQUdFX1NJWkU7Ci0JCQkgICAgIGorKykgewotCQkJCW1lbSA9IGdldF96ZXJvZWRfcGFnZShHRlBfS0VSTkVMKTsKLQkJCQlpZiAobWVtID09IDApIHsKLQkJCQkJZHByaW50aygxLAotCQkJCQkJS0VSTl9FUlIKLQkJCQkJCSIlczoganBnX2ZidWZmZXJfYWxsb2MoKSAtIGdldF96ZXJvZWRfcGFnZSBmYWlsZWQgZm9yIGJ1ZmZlciAlZFxuIiwKLQkJCQkJCVpSX0RFVk5BTUUoenIpLCBpKTsKLQkJCQkJanBnX2ZidWZmZXJfZnJlZShmaWxlKTsKLQkJCQkJcmV0dXJuIC1FTk9CVUZTOwotCQkJCX0KLQotCQkJCWZoLT5qcGdfYnVmZmVycy5idWZmZXJbaV0uZnJhZ190YWJbMiAqIGpdID0KLQkJCQkgICAgY3B1X3RvX2xlMzIodmlydF90b19idXMoKHZvaWQgKikgbWVtKSk7Ci0JCQkJZmgtPmpwZ19idWZmZXJzLmJ1ZmZlcltpXS5mcmFnX3RhYlsyICogaiArCi0JCQkJCQkJCSAgIDFdID0KLQkJCQkgICAgY3B1X3RvX2xlMzIoKFBBR0VfU0laRSAvIDQpIDw8IDEpOwotCQkJCVNldFBhZ2VSZXNlcnZlZChNQVBfTlIobWVtKSk7Ci0JCQl9Ci0KLQkJCWZoLT5qcGdfYnVmZmVycy5idWZmZXJbaV0uZnJhZ190YWJbMiAqIGogLSAxXSB8PSBjcHVfdG9fbGUzMigxKTsKLQkJfQotCX0KLQotCWRwcmludGsoNCwKLQkJS0VSTl9ERUJVRyAiJXM6IGpwZ19mYnVmZmVyX2FsbG9jKCkgLSAlZCBLQiBhbGxvY2F0ZWRcbiIsCi0JCVpSX0RFVk5BTUUoenIpLAotCQkoZmgtPmpwZ19idWZmZXJzLm51bV9idWZmZXJzICoKLQkJIGZoLT5qcGdfYnVmZmVycy5idWZmZXJfc2l6ZSkgPj4gMTApOwotCi0JZmgtPmpwZ19idWZmZXJzLmFsbG9jYXRlZCA9IDE7Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyogZnJlZSB0aGUgTUpQRUcgZ3JhYiBidWZmZXJzICovCi1zdGF0aWMgdm9pZAotanBnX2ZidWZmZXJfZnJlZSAoc3RydWN0IGZpbGUgKmZpbGUpCi17Ci0Jc3RydWN0IHpvcmFuX2ZoICpmaCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKLQlzdHJ1Y3Qgem9yYW4gKnpyID0gZmgtPnpyOwotCWludCBpLCBqLCBvZmY7Ci0JdW5zaWduZWQgY2hhciAqbWVtOwotCi0JZHByaW50ayg0LCBLRVJOX0RFQlVHICIlczoganBnX2ZidWZmZXJfZnJlZSgpXG4iLCBaUl9ERVZOQU1FKHpyKSk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgZmgtPmpwZ19idWZmZXJzLm51bV9idWZmZXJzOyBpKyspIHsKLQkJaWYgKCFmaC0+anBnX2J1ZmZlcnMuYnVmZmVyW2ldLmZyYWdfdGFiKQotCQkJY29udGludWU7Ci0KLQkJLy9pZiAoYWxsb2NfY29udGlnKSB7Ci0JCWlmIChmaC0+anBnX2J1ZmZlcnMubmVlZF9jb250aWd1b3VzKSB7Ci0JCQlpZiAoZmgtPmpwZ19idWZmZXJzLmJ1ZmZlcltpXS5mcmFnX3RhYlswXSkgewotCQkJCW1lbSA9ICh1bnNpZ25lZCBjaGFyICopIGJ1c190b192aXJ0KGxlMzJfdG9fY3B1KAotCQkJCQlmaC0+anBnX2J1ZmZlcnMuYnVmZmVyW2ldLmZyYWdfdGFiWzBdKSk7Ci0JCQkJZm9yIChvZmYgPSAwOwotCQkJCSAgICAgb2ZmIDwgZmgtPmpwZ19idWZmZXJzLmJ1ZmZlcl9zaXplOwotCQkJCSAgICAgb2ZmICs9IFBBR0VfU0laRSkKLQkJCQkJQ2xlYXJQYWdlUmVzZXJ2ZWQoTUFQX05SCi0JCQkJCQkJICAobWVtICsgb2ZmKSk7Ci0JCQkJa2ZyZWUobWVtKTsKLQkJCQlmaC0+anBnX2J1ZmZlcnMuYnVmZmVyW2ldLmZyYWdfdGFiWzBdID0gMDsKLQkJCQlmaC0+anBnX2J1ZmZlcnMuYnVmZmVyW2ldLmZyYWdfdGFiWzFdID0gMDsKLQkJCX0KLQkJfSBlbHNlIHsKLQkJCWZvciAoaiA9IDA7Ci0JCQkgICAgIGogPCBmaC0+anBnX2J1ZmZlcnMuYnVmZmVyX3NpemUgLyBQQUdFX1NJWkU7Ci0JCQkgICAgIGorKykgewotCQkJCWlmICghZmgtPmpwZ19idWZmZXJzLmJ1ZmZlcltpXS4KLQkJCQkgICAgZnJhZ190YWJbMiAqIGpdKQotCQkJCQlicmVhazsKLQkJCQlDbGVhclBhZ2VSZXNlcnZlZChNQVBfTlIKLQkJCQkJCSAgKGJ1c190b192aXJ0Ci0JCQkJCQkgICAobGUzMl90b19jcHUKLQkJCQkJCSAgICAoZmgtPmpwZ19idWZmZXJzLgotCQkJCQkJICAgICBidWZmZXJbaV0uZnJhZ190YWJbMiAqCi0JCQkJCQkJCSAgICAgICBqXSkpKSk7Ci0JCQkJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKQotCQkJCQkgIGJ1c190b192aXJ0Ci0JCQkJCQkgIChsZTMyX3RvX2NwdQotCQkJCQkJICAgKGZoLT5qcGdfYnVmZmVycy4KLQkJCQkJCSAgICAgIGJ1ZmZlcltpXS4KLQkJCQkJCSAgICAgIGZyYWdfdGFiWzIgKiBqXSkpKTsKLQkJCQlmaC0+anBnX2J1ZmZlcnMuYnVmZmVyW2ldLmZyYWdfdGFiWzIgKiBqXSA9Ci0JCQkJICAgIDA7Ci0JCQkJZmgtPmpwZ19idWZmZXJzLmJ1ZmZlcltpXS5mcmFnX3RhYlsyICogaiArCi0JCQkJCQkJCSAgIDFdID0gMDsKLQkJCX0KLQkJfQotCi0JCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZykgZmgtPmpwZ19idWZmZXJzLmJ1ZmZlcltpXS4KLQkJCSAgZnJhZ190YWIpOwotCQlmaC0+anBnX2J1ZmZlcnMuYnVmZmVyW2ldLmZyYWdfdGFiID0gTlVMTDsKLQl9Ci0KLQlmaC0+anBnX2J1ZmZlcnMuYWxsb2NhdGVkID0gMDsKLQlmaC0+anBnX2J1ZmZlcnMucmVhZHlfdG9fYmVfZnJlZWQgPSAwOwotfQotCi0vKgotICogICBWNEwgQnVmZmVyIGdyYWJiaW5nCi0gKi8KLQotc3RhdGljIGludAotem9yYW5fdjRsX3NldF9mb3JtYXQgKHN0cnVjdCBmaWxlICAgICAgICAgICAgICAgKmZpbGUsCi0JCSAgICAgIGludCAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoLAotCQkgICAgICBpbnQgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQsCi0JCSAgICAgIGNvbnN0IHN0cnVjdCB6b3Jhbl9mb3JtYXQgKmZvcm1hdCkKLXsKLQlzdHJ1Y3Qgem9yYW5fZmggKmZoID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwotCXN0cnVjdCB6b3JhbiAqenIgPSBmaC0+enI7Ci0JaW50IGJwcDsKLQotCS8qIENoZWNrIHNpemUgYW5kIGZvcm1hdCBvZiB0aGUgZ3JhYiB3YW50ZWQgKi8KLQotCWlmIChoZWlnaHQgPCBCVVpfTUlOX0hFSUdIVCB8fCB3aWR0aCA8IEJVWl9NSU5fV0lEVEggfHwKLQkgICAgaGVpZ2h0ID4gQlVaX01BWF9IRUlHSFQgfHwgd2lkdGggPiBCVVpfTUFYX1dJRFRIKSB7Ci0JCWRwcmludGsoMSwKLQkJCUtFUk5fRVJSCi0JCQkiJXM6IHY0bF9zZXRfZm9ybWF0KCkgLSB3cm9uZyBmcmFtZSBzaXplICglZHglZClcbiIsCi0JCQlaUl9ERVZOQU1FKHpyKSwgd2lkdGgsIGhlaWdodCk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCWJwcCA9IChmb3JtYXQtPmRlcHRoICsgNykgLyA4OwotCi0JLyogQ2hlY2sgYWdhaW5zdCBhdmFpbGFibGUgYnVmZmVyIHNpemUgKi8KLQlpZiAoaGVpZ2h0ICogd2lkdGggKiBicHAgPiBmaC0+djRsX2J1ZmZlcnMuYnVmZmVyX3NpemUpIHsKLQkJZHByaW50aygxLAotCQkJS0VSTl9FUlIKLQkJCSIlczogdjRsX3NldF9mb3JtYXQoKSAtIHZpZGVvIGJ1ZmZlciBzaXplICglZCBrQikgaXMgdG9vIHNtYWxsXG4iLAotCQkJWlJfREVWTkFNRSh6ciksIGZoLT52NGxfYnVmZmVycy5idWZmZXJfc2l6ZSA+PiAxMCk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCS8qIFRoZSB2aWRlbyBmcm9udCBlbmQgbmVlZHMgNC1ieXRlIGFsaW5nZWQgbGluZSBzaXplcyAqLwotCi0JaWYgKChicHAgPT0gMiAmJiAod2lkdGggJiAxKSkgfHwgKGJwcCA9PSAzICYmICh3aWR0aCAmIDMpKSkgewotCQlkcHJpbnRrKDEsCi0JCQlLRVJOX0VSUgotCQkJIiVzOiB2NGxfc2V0X2Zvcm1hdCgpIC0gd3JvbmcgZnJhbWUgYWxpbmdtZW50XG4iLAotCQkJWlJfREVWTkFNRSh6cikpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlmaC0+djRsX3NldHRpbmdzLndpZHRoID0gd2lkdGg7Ci0JZmgtPnY0bF9zZXR0aW5ncy5oZWlnaHQgPSBoZWlnaHQ7Ci0JZmgtPnY0bF9zZXR0aW5ncy5mb3JtYXQgPSBmb3JtYXQ7Ci0JZmgtPnY0bF9zZXR0aW5ncy5ieXRlc3BlcmxpbmUgPSBicHAgKiBmaC0+djRsX3NldHRpbmdzLndpZHRoOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQKLXpvcmFuX3Y0bF9xdWV1ZV9mcmFtZSAoc3RydWN0IGZpbGUgKmZpbGUsCi0JCSAgICAgICBpbnQgICAgICAgICAgbnVtKQotewotCXN0cnVjdCB6b3Jhbl9maCAqZmggPSBmaWxlLT5wcml2YXRlX2RhdGE7Ci0Jc3RydWN0IHpvcmFuICp6ciA9IGZoLT56cjsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWludCByZXMgPSAwOwotCi0JaWYgKCFmaC0+djRsX2J1ZmZlcnMuYWxsb2NhdGVkKSB7Ci0JCWRwcmludGsoMSwKLQkJCUtFUk5fRVJSCi0JCQkiJXM6IHY0bF9xdWV1ZV9mcmFtZSgpIC0gYnVmZmVycyBub3QgeWV0IGFsbG9jYXRlZFxuIiwKLQkJCVpSX0RFVk5BTUUoenIpKTsKLQkJcmVzID0gLUVOT01FTTsKLQl9Ci0KLQkvKiBObyBncmFiYmluZyBvdXRzaWRlIHRoZSBidWZmZXIgcmFuZ2UhICovCi0JaWYgKG51bSA+PSBmaC0+djRsX2J1ZmZlcnMubnVtX2J1ZmZlcnMgfHwgbnVtIDwgMCkgewotCQlkcHJpbnRrKDEsCi0JCQlLRVJOX0VSUgotCQkJIiVzOiB2NGxfcXVldWVfZnJhbWUoKSAtIGJ1ZmZlciAlZCBpcyBvdXQgb2YgcmFuZ2VcbiIsCi0JCQlaUl9ERVZOQU1FKHpyKSwgbnVtKTsKLQkJcmVzID0gLUVJTlZBTDsKLQl9Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmenItPnNwaW5sb2NrLCBmbGFncyk7Ci0KLQlpZiAoZmgtPnY0bF9idWZmZXJzLmFjdGl2ZSA9PSBaT1JBTl9GUkVFKSB7Ci0JCWlmICh6ci0+djRsX2J1ZmZlcnMuYWN0aXZlID09IFpPUkFOX0ZSRUUpIHsKLQkJCXpyLT52NGxfYnVmZmVycyA9IGZoLT52NGxfYnVmZmVyczsKLQkJCWZoLT52NGxfYnVmZmVycy5hY3RpdmUgPSBaT1JBTl9BQ1RJVkU7Ci0JCX0gZWxzZSB7Ci0JCQlkcHJpbnRrKDEsCi0JCQkJS0VSTl9FUlIKLQkJCQkiJXM6IHY0bF9xdWV1ZV9mcmFtZSgpIC0gYW5vdGhlciBzZXNzaW9uIGlzIGFscmVhZHkgY2FwdHVyaW5nXG4iLAotCQkJCVpSX0RFVk5BTUUoenIpKTsKLQkJCXJlcyA9IC1FQlVTWTsKLQkJfQotCX0KLQotCS8qIG1ha2Ugc3VyZSBhIGdyYWIgaXNuJ3QgZ29pbmcgb24gY3VycmVudGx5IHdpdGggdGhpcyBidWZmZXIgKi8KLQlpZiAoIXJlcykgewotCQlzd2l0Y2ggKHpyLT52NGxfYnVmZmVycy5idWZmZXJbbnVtXS5zdGF0ZSkgewotCQlkZWZhdWx0OgotCQljYXNlIEJVWl9TVEFURV9QRU5EOgotCQkJaWYgKHpyLT52NGxfYnVmZmVycy5hY3RpdmUgPT0gWk9SQU5fRlJFRSkgewotCQkJCWZoLT52NGxfYnVmZmVycy5hY3RpdmUgPSBaT1JBTl9GUkVFOwotCQkJCXpyLT52NGxfYnVmZmVycy5hbGxvY2F0ZWQgPSAwOwotCQkJfQotCQkJcmVzID0gLUVCVVNZOwkvKiB3aGF0IGFyZSB5b3UgZG9pbmc/ICovCi0JCQlicmVhazsKLQkJY2FzZSBCVVpfU1RBVEVfRE9ORToKLQkJCWRwcmludGsoMiwKLQkJCQlLRVJOX1dBUk5JTkcKLQkJCQkiJXM6IHY0bF9xdWV1ZV9mcmFtZSgpIC0gcXVldWVpbmcgYnVmZmVyICVkIGluIHN0YXRlIERPTkUhP1xuIiwKLQkJCQlaUl9ERVZOQU1FKHpyKSwgbnVtKTsKLQkJY2FzZSBCVVpfU1RBVEVfVVNFUjoKLQkJCS8qIHNpbmNlIHRoZXJlIGlzIGF0IGxlYXN0IG9uZSB1bnVzZWQgYnVmZmVyIHRoZXJlJ3Mgcm9vbSBmb3IgYXQgbGVhc3QKLQkJCSAqIG9uZSBtb3JlIHBlbmRbXSBlbnRyeSAqLwotCQkJenItPnY0bF9wZW5kW3pyLT52NGxfcGVuZF9oZWFkKysgJgotCQkJCQlWNExfTUFTS19GUkFNRV0gPSBudW07Ci0JCQl6ci0+djRsX2J1ZmZlcnMuYnVmZmVyW251bV0uc3RhdGUgPSBCVVpfU1RBVEVfUEVORDsKLQkJCXpyLT52NGxfYnVmZmVycy5idWZmZXJbbnVtXS5icy5sZW5ndGggPQotCQkJICAgIGZoLT52NGxfc2V0dGluZ3MuYnl0ZXNwZXJsaW5lICoKLQkJCSAgICB6ci0+djRsX3NldHRpbmdzLmhlaWdodDsKLQkJCWZoLT52NGxfYnVmZmVycy5idWZmZXJbbnVtXSA9Ci0JCQkgICAgenItPnY0bF9idWZmZXJzLmJ1ZmZlcltudW1dOwotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ6ci0+c3BpbmxvY2ssIGZsYWdzKTsKLQotCWlmICghcmVzICYmIHpyLT52NGxfYnVmZmVycy5hY3RpdmUgPT0gWk9SQU5fRlJFRSkKLQkJenItPnY0bF9idWZmZXJzLmFjdGl2ZSA9IGZoLT52NGxfYnVmZmVycy5hY3RpdmU7Ci0KLQlyZXR1cm4gcmVzOwotfQotCi1zdGF0aWMgaW50Ci12NGxfZ3JhYiAoc3RydWN0IGZpbGUgICAgICAgKmZpbGUsCi0JICBzdHJ1Y3QgdmlkZW9fbW1hcCAqbXApCi17Ci0Jc3RydWN0IHpvcmFuX2ZoICpmaCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKLQlzdHJ1Y3Qgem9yYW4gKnpyID0gZmgtPnpyOwotCWludCByZXMgPSAwLCBpOwotCi0JZm9yIChpID0gMDsgaSA8IE5VTV9GT1JNQVRTOyBpKyspIHsKLQkJaWYgKHpvcmFuX2Zvcm1hdHNbaV0ucGFsZXR0ZSA9PSBtcC0+Zm9ybWF0ICYmCi0JCSAgICB6b3Jhbl9mb3JtYXRzW2ldLmZsYWdzICYgWk9SQU5fRk9STUFUX0NBUFRVUkUgJiYKLQkJICAgICEoem9yYW5fZm9ybWF0c1tpXS5mbGFncyAmIFpPUkFOX0ZPUk1BVF9DT01QUkVTU0VEKSkKLQkJCWJyZWFrOwotCX0KLQlpZiAoaSA9PSBOVU1fRk9STUFUUyB8fCB6b3Jhbl9mb3JtYXRzW2ldLmRlcHRoID09IDApIHsKLQkJZHByaW50aygxLAotCQkJS0VSTl9FUlIKLQkJCSIlczogdjRsX2dyYWIoKSAtIHdyb25nIGJ5dGVzLXBlci1waXhlbCBmb3JtYXRcbiIsCi0JCQlaUl9ERVZOQU1FKHpyKSk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCS8qCi0JICogVG8gbWluaW1pemUgdGhlIHRpbWUgc3BlbnQgaW4gdGhlIElSUSByb3V0aW5lLCB3ZSBhdm9pZCBzZXR0aW5nIHVwCi0JICogdGhlIHZpZGVvIGZyb250IGVuZCB0aGVyZS4KLQkgKiBJZiB0aGlzIGdyYWIgaGFzIGRpZmZlcmVudCBwYXJhbWV0ZXJzIGZyb20gYSBydW5uaW5nIHN0cmVhbWluZyBjYXB0dXJlCi0JICogd2Ugc3RvcCB0aGUgc3RyZWFtaW5nIGNhcHR1cmUgYW5kIHN0YXJ0IGl0IG92ZXIgYWdhaW4uCi0JICovCi0JaWYgKHpyLT52NGxfbWVtZ3JhYl9hY3RpdmUgJiYKLQkgICAgKHpyLT52NGxfc2V0dGluZ3Mud2lkdGggIT0gbXAtPndpZHRoIHx8Ci0JICAgICB6ci0+djRsX3NldHRpbmdzLmhlaWdodCAhPSBtcC0+aGVpZ2h0IHx8Ci0JICAgICB6ci0+djRsX3NldHRpbmdzLmZvcm1hdC0+cGFsZXR0ZSAhPSBtcC0+Zm9ybWF0KSkgewotCQlyZXMgPSB3YWl0X2dyYWJfcGVuZGluZyh6cik7Ci0JCWlmIChyZXMpCi0JCQlyZXR1cm4gcmVzOwotCX0KLQlpZiAoKHJlcyA9IHpvcmFuX3Y0bF9zZXRfZm9ybWF0KGZpbGUsCi0JCQkJCW1wLT53aWR0aCwKLQkJCQkJbXAtPmhlaWdodCwKLQkJCQkJJnpvcmFuX2Zvcm1hdHNbaV0pKSkKLQkJcmV0dXJuIHJlczsKLQl6ci0+djRsX3NldHRpbmdzID0gZmgtPnY0bF9zZXR0aW5nczsKLQotCS8qIHF1ZXVlIHRoZSBmcmFtZSBpbiB0aGUgcGVuZGluZyBxdWV1ZSAqLwotCWlmICgocmVzID0gem9yYW5fdjRsX3F1ZXVlX2ZyYW1lKGZpbGUsIG1wLT5mcmFtZSkpKSB7Ci0JCWZoLT52NGxfYnVmZmVycy5hY3RpdmUgPSBaT1JBTl9GUkVFOwotCQlyZXR1cm4gcmVzOwotCX0KLQotCS8qIHB1dCB0aGUgMzYwNTcgaW50byBmcmFtZSBncmFiYmluZyBtb2RlICovCi0JaWYgKCFyZXMgJiYgIXpyLT52NGxfbWVtZ3JhYl9hY3RpdmUpCi0JCXpyMzYwNTdfc2V0X21lbWdyYWIoenIsIDEpOwotCi0JLy9kcHJpbnRrKDQsIEtFUk5fSU5GTyAiJXM6IEZyYW1lIGdyYWIgMy4uLlxuIiwgWlJfREVWTkFNRSh6cikpOwotCi0JcmV0dXJuIHJlczsKLX0KLQotLyoKLSAqIFN5bmMgb24gYSBWNEwgYnVmZmVyCi0gKi8KLQotc3RhdGljIGludAotdjRsX3N5bmMgKHN0cnVjdCBmaWxlICpmaWxlLAotCSAgaW50ICAgICAgICAgIGZyYW1lKQotewotCXN0cnVjdCB6b3Jhbl9maCAqZmggPSBmaWxlLT5wcml2YXRlX2RhdGE7Ci0Jc3RydWN0IHpvcmFuICp6ciA9IGZoLT56cjsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JaWYgKGZoLT52NGxfYnVmZmVycy5hY3RpdmUgPT0gWk9SQU5fRlJFRSkgewotCQlkcHJpbnRrKDEsCi0JCQlLRVJOX0VSUgotCQkJIiVzOiB2NGxfc3luYygpIC0gbm8gZ3JhYiBhY3RpdmUgZm9yIHRoaXMgc2Vzc2lvblxuIiwKLQkJCVpSX0RFVk5BTUUoenIpKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JLyogY2hlY2sgcGFzc2VkLWluIGZyYW1lIG51bWJlciAqLwotCWlmIChmcmFtZSA+PSBmaC0+djRsX2J1ZmZlcnMubnVtX2J1ZmZlcnMgfHwgZnJhbWUgPCAwKSB7Ci0JCWRwcmludGsoMSwKLQkJCUtFUk5fRVJSICIlczogdjRsX3N5bmMoKSAtIGZyYW1lICVkIGlzIGludmFsaWRcbiIsCi0JCQlaUl9ERVZOQU1FKHpyKSwgZnJhbWUpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQkvKiBDaGVjayBpZiBpcyBidWZmZXIgd2FzIHF1ZXVlZCBhdCBhbGwgKi8KLQlpZiAoenItPnY0bF9idWZmZXJzLmJ1ZmZlcltmcmFtZV0uc3RhdGUgPT0gQlVaX1NUQVRFX1VTRVIpIHsKLQkJZHByaW50aygxLAotCQkJS0VSTl9FUlIKLQkJCSIlczogdjRsX3N5bmMoKSAtIGF0dGVtcHQgdG8gc3luYyBvbiBhIGJ1ZmZlciB3aGljaCB3YXMgbm90IHF1ZXVlZD9cbiIsCi0JCQlaUl9ERVZOQU1FKHpyKSk7Ci0JCXJldHVybiAtRVBST1RPOwotCX0KLQotCS8qIHdhaXQgb24gdGhpcyBidWZmZXIgdG8gZ2V0IHJlYWR5ICovCi0JaWYgKCF3YWl0X2V2ZW50X2ludGVycnVwdGlibGVfdGltZW91dCh6ci0+djRsX2NhcHEsCi0JCQkJKHpyLT52NGxfYnVmZmVycy5idWZmZXJbZnJhbWVdLnN0YXRlICE9IEJVWl9TVEFURV9QRU5EKSwKLQkJCQkxMCpIWikpCi0JCXJldHVybiAtRVRJTUU7Ci0JaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKQotCQlyZXR1cm4gLUVSRVNUQVJUU1lTOwotCi0JLyogYnVmZmVyIHNob3VsZCBub3cgYmUgaW4gQlVaX1NUQVRFX0RPTkUgKi8KLQlpZiAoenItPnY0bF9idWZmZXJzLmJ1ZmZlcltmcmFtZV0uc3RhdGUgIT0gQlVaX1NUQVRFX0RPTkUpCi0JCWRwcmludGsoMiwKLQkJCUtFUk5fRVJSICIlczogdjRsX3N5bmMoKSAtIGludGVybmFsIHN0YXRlIGVycm9yXG4iLAotCQkJWlJfREVWTkFNRSh6cikpOwotCi0JenItPnY0bF9idWZmZXJzLmJ1ZmZlcltmcmFtZV0uc3RhdGUgPSBCVVpfU1RBVEVfVVNFUjsKLQlmaC0+djRsX2J1ZmZlcnMuYnVmZmVyW2ZyYW1lXSA9IHpyLT52NGxfYnVmZmVycy5idWZmZXJbZnJhbWVdOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnpyLT5zcGlubG9jaywgZmxhZ3MpOwotCi0JLyogQ2hlY2sgaWYgc3RyZWFtaW5nIGNhcHR1cmUgaGFzIGZpbmlzaGVkICovCi0JaWYgKHpyLT52NGxfcGVuZF90YWlsID09IHpyLT52NGxfcGVuZF9oZWFkKSB7Ci0JCXpyMzYwNTdfc2V0X21lbWdyYWIoenIsIDApOwotCQlpZiAoenItPnY0bF9idWZmZXJzLmFjdGl2ZSA9PSBaT1JBTl9BQ1RJVkUpIHsKLQkJCWZoLT52NGxfYnVmZmVycy5hY3RpdmUgPSB6ci0+djRsX2J1ZmZlcnMuYWN0aXZlID0KLQkJCSAgICBaT1JBTl9GUkVFOwotCQkJenItPnY0bF9idWZmZXJzLmFsbG9jYXRlZCA9IDA7Ci0JCX0KLQl9Ci0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ6ci0+c3BpbmxvY2ssIGZsYWdzKTsKLQotCXJldHVybiAwOwotfQotCi0vKgotICogICBRdWV1ZSBhIE1KUEVHIGJ1ZmZlciBmb3IgY2FwdHVyZS9wbGF5YmFjawotICovCi0KLXN0YXRpYyBpbnQKLXpvcmFuX2pwZ19xdWV1ZV9mcmFtZSAoc3RydWN0IGZpbGUgICAgICAgICAgKmZpbGUsCi0JCSAgICAgICBpbnQgICAgICAgICAgICAgICAgICAgbnVtLAotCQkgICAgICAgZW51bSB6b3Jhbl9jb2RlY19tb2RlIG1vZGUpCi17Ci0Jc3RydWN0IHpvcmFuX2ZoICpmaCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKLQlzdHJ1Y3Qgem9yYW4gKnpyID0gZmgtPnpyOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IHJlcyA9IDA7Ci0KLQkvKiBDaGVjayBpZiBidWZmZXJzIGFyZSBhbGxvY2F0ZWQgKi8KLQlpZiAoIWZoLT5qcGdfYnVmZmVycy5hbGxvY2F0ZWQpIHsKLQkJZHByaW50aygxLAotCQkJS0VSTl9FUlIKLQkJCSIlczoganBnX3F1ZXVlX2ZyYW1lKCkgLSBidWZmZXJzIG5vdCB5ZXQgYWxsb2NhdGVkXG4iLAotCQkJWlJfREVWTkFNRSh6cikpOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9Ci0KLQkvKiBObyBncmFiYmluZyBvdXRzaWRlIHRoZSBidWZmZXIgcmFuZ2UhICovCi0JaWYgKG51bSA+PSBmaC0+anBnX2J1ZmZlcnMubnVtX2J1ZmZlcnMgfHwgbnVtIDwgMCkgewotCQlkcHJpbnRrKDEsCi0JCQlLRVJOX0VSUgotCQkJIiVzOiBqcGdfcXVldWVfZnJhbWUoKSAtIGJ1ZmZlciAlZCBvdXQgb2YgcmFuZ2VcbiIsCi0JCQlaUl9ERVZOQU1FKHpyKSwgbnVtKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JLyogd2hhdCBpcyB0aGUgY29kZWMgbW9kZSByaWdodCBub3c/ICovCi0JaWYgKHpyLT5jb2RlY19tb2RlID09IEJVWl9NT0RFX0lETEUpIHsKLQkJenItPmpwZ19zZXR0aW5ncyA9IGZoLT5qcGdfc2V0dGluZ3M7Ci0JfSBlbHNlIGlmICh6ci0+Y29kZWNfbW9kZSAhPSBtb2RlKSB7Ci0JCS8qIHdyb25nIGNvZGVjIG1vZGUgYWN0aXZlIC0gaW52YWxpZCAqLwotCQlkcHJpbnRrKDEsCi0JCQlLRVJOX0VSUgotCQkJIiVzOiBqcGdfcXVldWVfZnJhbWUoKSAtIGNvZGVjIGluIHdyb25nIG1vZGVcbiIsCi0JCQlaUl9ERVZOQU1FKHpyKSk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCWlmIChmaC0+anBnX2J1ZmZlcnMuYWN0aXZlID09IFpPUkFOX0ZSRUUpIHsKLQkJaWYgKHpyLT5qcGdfYnVmZmVycy5hY3RpdmUgPT0gWk9SQU5fRlJFRSkgewotCQkJenItPmpwZ19idWZmZXJzID0gZmgtPmpwZ19idWZmZXJzOwotCQkJZmgtPmpwZ19idWZmZXJzLmFjdGl2ZSA9IFpPUkFOX0FDVElWRTsKLQkJfSBlbHNlIHsKLQkJCWRwcmludGsoMSwKLQkJCQlLRVJOX0VSUgotCQkJCSIlczoganBnX3F1ZXVlX2ZyYW1lKCkgLSBhbm90aGVyIHNlc3Npb24gaXMgYWxyZWFkeSBjYXB0dXJpbmdcbiIsCi0JCQkJWlJfREVWTkFNRSh6cikpOwotCQkJcmVzID0gLUVCVVNZOwotCQl9Ci0JfQotCi0JaWYgKCFyZXMgJiYgenItPmNvZGVjX21vZGUgPT0gQlVaX01PREVfSURMRSkgewotCQkvKiBPayBsb2FkIHVwIHRoZSBqcGVnIGNvZGVjICovCi0JCXpyMzYwNTdfZW5hYmxlX2pwZyh6ciwgbW9kZSk7Ci0JfQotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnpyLT5zcGlubG9jaywgZmxhZ3MpOwotCi0JaWYgKCFyZXMpIHsKLQkJc3dpdGNoICh6ci0+anBnX2J1ZmZlcnMuYnVmZmVyW251bV0uc3RhdGUpIHsKLQkJY2FzZSBCVVpfU1RBVEVfRE9ORToKLQkJCWRwcmludGsoMiwKLQkJCQlLRVJOX1dBUk5JTkcKLQkJCQkiJXM6IGpwZ19xdWV1ZV9mcmFtZSgpIC0gcXVlaW5nIGZyYW1lIGluIEJVWl9TVEFURV9ET05FIHN0YXRlIT9cbiIsCi0JCQkJWlJfREVWTkFNRSh6cikpOwotCQljYXNlIEJVWl9TVEFURV9VU0VSOgotCQkJLyogc2luY2UgdGhlcmUgaXMgYXQgbGVhc3Qgb25lIHVudXNlZCBidWZmZXIgdGhlcmUncyByb29tIGZvciBhdAotCQkJICpsZWFzdCBvbmUgbW9yZSBwZW5kW10gZW50cnkgKi8KLQkJCXpyLT5qcGdfcGVuZFt6ci0+anBnX3F1ZV9oZWFkKysgJiBCVVpfTUFTS19GUkFNRV0gPQotCQkJICAgIG51bTsKLQkJCXpyLT5qcGdfYnVmZmVycy5idWZmZXJbbnVtXS5zdGF0ZSA9IEJVWl9TVEFURV9QRU5EOwotCQkJZmgtPmpwZ19idWZmZXJzLmJ1ZmZlcltudW1dID0KLQkJCSAgICB6ci0+anBnX2J1ZmZlcnMuYnVmZmVyW251bV07Ci0JCQl6b3Jhbl9mZWVkX3N0YXRfY29tKHpyKTsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQljYXNlIEJVWl9TVEFURV9ETUE6Ci0JCWNhc2UgQlVaX1NUQVRFX1BFTkQ6Ci0JCQlpZiAoenItPmpwZ19idWZmZXJzLmFjdGl2ZSA9PSBaT1JBTl9GUkVFKSB7Ci0JCQkJZmgtPmpwZ19idWZmZXJzLmFjdGl2ZSA9IFpPUkFOX0ZSRUU7Ci0JCQkJenItPmpwZ19idWZmZXJzLmFsbG9jYXRlZCA9IDA7Ci0JCQl9Ci0JCQlyZXMgPSAtRUJVU1k7CS8qIHdoYXQgYXJlIHlvdSBkb2luZz8gKi8KLQkJCWJyZWFrOwotCQl9Ci0JfQotCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmenItPnNwaW5sb2NrLCBmbGFncyk7Ci0KLQlpZiAoIXJlcyAmJiB6ci0+anBnX2J1ZmZlcnMuYWN0aXZlID09IFpPUkFOX0ZSRUUpIHsKLQkJenItPmpwZ19idWZmZXJzLmFjdGl2ZSA9IGZoLT5qcGdfYnVmZmVycy5hY3RpdmU7Ci0JfQotCi0JcmV0dXJuIHJlczsKLX0KLQotc3RhdGljIGludAotanBnX3FidWYgKHN0cnVjdCBmaWxlICAgICAgICAgICpmaWxlLAotCSAgaW50ICAgICAgICAgICAgICAgICAgIGZyYW1lLAotCSAgZW51bSB6b3Jhbl9jb2RlY19tb2RlIG1vZGUpCi17Ci0Jc3RydWN0IHpvcmFuX2ZoICpmaCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKLQlzdHJ1Y3Qgem9yYW4gKnpyID0gZmgtPnpyOwotCWludCByZXMgPSAwOwotCi0JLyogRG9lcyB0aGUgdXNlciB3YW50IHRvIHN0b3Agc3RyZWFtaW5nPyAqLwotCWlmIChmcmFtZSA8IDApIHsKLQkJaWYgKHpyLT5jb2RlY19tb2RlID09IG1vZGUpIHsKLQkJCWlmIChmaC0+anBnX2J1ZmZlcnMuYWN0aXZlID09IFpPUkFOX0ZSRUUpIHsKLQkJCQlkcHJpbnRrKDEsCi0JCQkJCUtFUk5fRVJSCi0JCQkJCSIlczoganBnX3FidWYoLTEpIC0gc2Vzc2lvbiBub3QgYWN0aXZlXG4iLAotCQkJCQlaUl9ERVZOQU1FKHpyKSk7Ci0JCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCQl9Ci0JCQlmaC0+anBnX2J1ZmZlcnMuYWN0aXZlID0genItPmpwZ19idWZmZXJzLmFjdGl2ZSA9Ci0JCQkgICAgWk9SQU5fRlJFRTsKLQkJCXpyLT5qcGdfYnVmZmVycy5hbGxvY2F0ZWQgPSAwOwotCQkJenIzNjA1N19lbmFibGVfanBnKHpyLCBCVVpfTU9ERV9JRExFKTsKLQkJCXJldHVybiAwOwotCQl9IGVsc2UgewotCQkJZHByaW50aygxLAotCQkJCUtFUk5fRVJSCi0JCQkJIiVzOiBqcGdfcWJ1ZigpIC0gc3RvcCBzdHJlYW1pbmcgYnV0IG5vdCBpbiBzdHJlYW1pbmcgbW9kZVxuIiwKLQkJCQlaUl9ERVZOQU1FKHpyKSk7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCX0KLQotCWlmICgocmVzID0gem9yYW5fanBnX3F1ZXVlX2ZyYW1lKGZpbGUsIGZyYW1lLCBtb2RlKSkpCi0JCXJldHVybiByZXM7Ci0KLQkvKiBTdGFydCB0aGUganBlZyBjb2RlYyB3aGVuIHRoZSBmaXJzdCBmcmFtZSBpcyBxdWV1ZWQgICovCi0JaWYgKCFyZXMgJiYgenItPmpwZ19xdWVfaGVhZCA9PSAxKQotCQlqcGVnX3N0YXJ0KHpyKTsKLQotCXJldHVybiByZXM7Ci19Ci0KLS8qCi0gKiAgIFN5bmMgb24gYSBNSlBFRyBidWZmZXIKLSAqLwotCi1zdGF0aWMgaW50Ci1qcGdfc3luYyAoc3RydWN0IGZpbGUgICAgICAgKmZpbGUsCi0JICBzdHJ1Y3Qgem9yYW5fc3luYyAqYnMpCi17Ci0Jc3RydWN0IHpvcmFuX2ZoICpmaCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKLQlzdHJ1Y3Qgem9yYW4gKnpyID0gZmgtPnpyOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IGZyYW1lOwotCi0JaWYgKGZoLT5qcGdfYnVmZmVycy5hY3RpdmUgPT0gWk9SQU5fRlJFRSkgewotCQlkcHJpbnRrKDEsCi0JCQlLRVJOX0VSUgotCQkJIiVzOiBqcGdfc3luYygpIC0gY2FwdHVyZSBpcyBub3QgY3VycmVudGx5IGFjdGl2ZVxuIiwKLQkJCVpSX0RFVk5BTUUoenIpKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCWlmICh6ci0+Y29kZWNfbW9kZSAhPSBCVVpfTU9ERV9NT1RJT05fREVDT01QUkVTUyAmJgotCSAgICB6ci0+Y29kZWNfbW9kZSAhPSBCVVpfTU9ERV9NT1RJT05fQ09NUFJFU1MpIHsKLQkJZHByaW50aygxLAotCQkJS0VSTl9FUlIKLQkJCSIlczoganBnX3N5bmMoKSAtIGNvZGVjIG5vdCBpbiBzdHJlYW1pbmcgbW9kZVxuIiwKLQkJCVpSX0RFVk5BTUUoenIpKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCWlmICghd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQoenItPmpwZ19jYXBxLAotCQkJKHpyLT5qcGdfcXVlX3RhaWwgIT0genItPmpwZ19kbWFfdGFpbCB8fAotCQkJIHpyLT5qcGdfZG1hX3RhaWwgPT0genItPmpwZ19kbWFfaGVhZCksCi0JCQkxMCpIWikpIHsKLQkJaW50IGlzcjsKLQotCQlidGFuZCh+WlIzNjA1N19KTUNfR29fZW4sIFpSMzYwNTdfSk1DKTsKLQkJdWRlbGF5KDEpOwotCQl6ci0+Y29kZWMtPmNvbnRyb2woenItPmNvZGVjLCBDT0RFQ19HX1NUQVRVUywKLQkJCQkJICAgc2l6ZW9mKGlzciksICZpc3IpOwotCQlkcHJpbnRrKDEsCi0JCQlLRVJOX0VSUgotCQkJIiVzOiBqcGdfc3luYygpIC0gdGltZW91dDogY29kZWMgaXNyPTB4JTAyeFxuIiwKLQkJCVpSX0RFVk5BTUUoenIpLCBpc3IpOwotCi0JCXJldHVybiAtRVRJTUU7Ci0KLQl9Ci0JaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKQotCQlyZXR1cm4gLUVSRVNUQVJUU1lTOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnpyLT5zcGlubG9jaywgZmxhZ3MpOwotCi0JaWYgKHpyLT5qcGdfZG1hX3RhaWwgIT0genItPmpwZ19kbWFfaGVhZCkKLQkJZnJhbWUgPSB6ci0+anBnX3BlbmRbenItPmpwZ19xdWVfdGFpbCsrICYgQlVaX01BU0tfRlJBTUVdOwotCWVsc2UKLQkJZnJhbWUgPSB6ci0+anBnX3BlbmRbenItPmpwZ19xdWVfdGFpbCAmIEJVWl9NQVNLX0ZSQU1FXTsKLQotCS8qIGJ1ZmZlciBzaG91bGQgbm93IGJlIGluIEJVWl9TVEFURV9ET05FICovCi0JaWYgKHpyLT5qcGdfYnVmZmVycy5idWZmZXJbZnJhbWVdLnN0YXRlICE9IEJVWl9TVEFURV9ET05FKQotCQlkcHJpbnRrKDIsCi0JCQlLRVJOX0VSUiAiJXM6IGpwZ19zeW5jKCkgLSBpbnRlcm5hbCBzdGF0ZSBlcnJvclxuIiwKLQkJCVpSX0RFVk5BTUUoenIpKTsKLQotCSpicyA9IHpyLT5qcGdfYnVmZmVycy5idWZmZXJbZnJhbWVdLmJzOwotCWJzLT5mcmFtZSA9IGZyYW1lOwotCXpyLT5qcGdfYnVmZmVycy5idWZmZXJbZnJhbWVdLnN0YXRlID0gQlVaX1NUQVRFX1VTRVI7Ci0JZmgtPmpwZ19idWZmZXJzLmJ1ZmZlcltmcmFtZV0gPSB6ci0+anBnX2J1ZmZlcnMuYnVmZmVyW2ZyYW1lXTsKLQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnpyLT5zcGlubG9jaywgZmxhZ3MpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkCi16b3Jhbl9vcGVuX2luaXRfc2Vzc2lvbiAoc3RydWN0IGZpbGUgKmZpbGUpCi17Ci0JaW50IGk7Ci0Jc3RydWN0IHpvcmFuX2ZoICpmaCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKLQlzdHJ1Y3Qgem9yYW4gKnpyID0gZmgtPnpyOwotCi0JLyogUGVyIGRlZmF1bHQsIG1hcCB0aGUgVjRMIEJ1ZmZlcnMgKi8KLQlmaC0+bWFwX21vZGUgPSBaT1JBTl9NQVBfTU9ERV9SQVc7Ci0KLQkvKiB0YWtlIG92ZXIgdGhlIGNhcmQncyBjdXJyZW50IHNldHRpbmdzICovCi0JZmgtPm92ZXJsYXlfc2V0dGluZ3MgPSB6ci0+b3ZlcmxheV9zZXR0aW5nczsKLQlmaC0+b3ZlcmxheV9zZXR0aW5ncy5pc19zZXQgPSAwOwotCWZoLT5vdmVybGF5X3NldHRpbmdzLmZvcm1hdCA9IHpyLT5vdmVybGF5X3NldHRpbmdzLmZvcm1hdDsKLQlmaC0+b3ZlcmxheV9hY3RpdmUgPSBaT1JBTl9GUkVFOwotCi0JLyogdjRsIHNldHRpbmdzICovCi0JZmgtPnY0bF9zZXR0aW5ncyA9IHpyLT52NGxfc2V0dGluZ3M7Ci0KLQkvKiB2NGxfYnVmZmVycyAqLwotCW1lbXNldCgmZmgtPnY0bF9idWZmZXJzLCAwLCBzaXplb2Yoc3RydWN0IHpvcmFuX3Y0bF9zdHJ1Y3QpKTsKLQlmb3IgKGkgPSAwOyBpIDwgVklERU9fTUFYX0ZSQU1FOyBpKyspIHsKLQkJZmgtPnY0bF9idWZmZXJzLmJ1ZmZlcltpXS5zdGF0ZSA9IEJVWl9TVEFURV9VU0VSOwkvKiBub3RoaW5nIGdvaW5nIG9uICovCi0JCWZoLT52NGxfYnVmZmVycy5idWZmZXJbaV0uYnMuZnJhbWUgPSBpOwotCX0KLQlmaC0+djRsX2J1ZmZlcnMuYWxsb2NhdGVkID0gMDsKLQlmaC0+djRsX2J1ZmZlcnMucmVhZHlfdG9fYmVfZnJlZWQgPSAwOwotCWZoLT52NGxfYnVmZmVycy5hY3RpdmUgPSBaT1JBTl9GUkVFOwotCWZoLT52NGxfYnVmZmVycy5idWZmZXJfc2l6ZSA9IHY0bF9idWZzaXplOwotCWZoLT52NGxfYnVmZmVycy5udW1fYnVmZmVycyA9IHY0bF9uYnVmczsKLQotCS8qIGpwZyBzZXR0aW5ncyAqLwotCWZoLT5qcGdfc2V0dGluZ3MgPSB6ci0+anBnX3NldHRpbmdzOwotCi0JLyoganBnX2J1ZmZlcnMgKi8KLQltZW1zZXQoJmZoLT5qcGdfYnVmZmVycywgMCwgc2l6ZW9mKHN0cnVjdCB6b3Jhbl9qcGdfc3RydWN0KSk7Ci0JZm9yIChpID0gMDsgaSA8IEJVWl9NQVhfRlJBTUU7IGkrKykgewotCQlmaC0+anBnX2J1ZmZlcnMuYnVmZmVyW2ldLnN0YXRlID0gQlVaX1NUQVRFX1VTRVI7CS8qIG5vdGhpbmcgZ29pbmcgb24gKi8KLQkJZmgtPmpwZ19idWZmZXJzLmJ1ZmZlcltpXS5icy5mcmFtZSA9IGk7Ci0JfQotCWZoLT5qcGdfYnVmZmVycy5uZWVkX2NvbnRpZ3VvdXMgPSB6ci0+anBnX2J1ZmZlcnMubmVlZF9jb250aWd1b3VzOwotCWZoLT5qcGdfYnVmZmVycy5hbGxvY2F0ZWQgPSAwOwotCWZoLT5qcGdfYnVmZmVycy5yZWFkeV90b19iZV9mcmVlZCA9IDA7Ci0JZmgtPmpwZ19idWZmZXJzLmFjdGl2ZSA9IFpPUkFOX0ZSRUU7Ci0JZmgtPmpwZ19idWZmZXJzLmJ1ZmZlcl9zaXplID0ganBnX2J1ZnNpemU7Ci0JZmgtPmpwZ19idWZmZXJzLm51bV9idWZmZXJzID0ganBnX25idWZzOwotfQotCi1zdGF0aWMgdm9pZAotem9yYW5fY2xvc2VfZW5kX3Nlc3Npb24gKHN0cnVjdCBmaWxlICpmaWxlKQotewotCXN0cnVjdCB6b3Jhbl9maCAqZmggPSBmaWxlLT5wcml2YXRlX2RhdGE7Ci0Jc3RydWN0IHpvcmFuICp6ciA9IGZoLT56cjsKLQotCS8qIG92ZXJsYXkgKi8KLQlpZiAoZmgtPm92ZXJsYXlfYWN0aXZlICE9IFpPUkFOX0ZSRUUpIHsKLQkJZmgtPm92ZXJsYXlfYWN0aXZlID0genItPm92ZXJsYXlfYWN0aXZlID0gWk9SQU5fRlJFRTsKLQkJenItPnY0bF9vdmVybGF5X2FjdGl2ZSA9IDA7Ci0JCWlmICghenItPnY0bF9tZW1ncmFiX2FjdGl2ZSkKLQkJCXpyMzYwNTdfb3ZlcmxheSh6ciwgMCk7Ci0JCXpyLT5vdmVybGF5X21hc2sgPSBOVUxMOwotCX0KLQotCS8qIHY0bCBjYXB0dXJlICovCi0JaWYgKGZoLT52NGxfYnVmZmVycy5hY3RpdmUgIT0gWk9SQU5fRlJFRSkgewotCQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JCXNwaW5fbG9ja19pcnFzYXZlKCZ6ci0+c3BpbmxvY2ssIGZsYWdzKTsKLQkJenIzNjA1N19zZXRfbWVtZ3JhYih6ciwgMCk7Ci0JCXpyLT52NGxfYnVmZmVycy5hbGxvY2F0ZWQgPSAwOwotCQl6ci0+djRsX2J1ZmZlcnMuYWN0aXZlID0gZmgtPnY0bF9idWZmZXJzLmFjdGl2ZSA9Ci0JCSAgICBaT1JBTl9GUkVFOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ6ci0+c3BpbmxvY2ssIGZsYWdzKTsKLQl9Ci0KLQkvKiB2NGwgYnVmZmVycyAqLwotCWlmIChmaC0+djRsX2J1ZmZlcnMuYWxsb2NhdGVkIHx8Ci0JICAgIGZoLT52NGxfYnVmZmVycy5yZWFkeV90b19iZV9mcmVlZCkgewotCQl2NGxfZmJ1ZmZlcl9mcmVlKGZpbGUpOwotCX0KLQotCS8qIGpwZyBjYXB0dXJlICovCi0JaWYgKGZoLT5qcGdfYnVmZmVycy5hY3RpdmUgIT0gWk9SQU5fRlJFRSkgewotCQl6cjM2MDU3X2VuYWJsZV9qcGcoenIsIEJVWl9NT0RFX0lETEUpOwotCQl6ci0+anBnX2J1ZmZlcnMuYWxsb2NhdGVkID0gMDsKLQkJenItPmpwZ19idWZmZXJzLmFjdGl2ZSA9IGZoLT5qcGdfYnVmZmVycy5hY3RpdmUgPQotCQkgICAgWk9SQU5fRlJFRTsKLQl9Ci0KLQkvKiBqcGcgYnVmZmVycyAqLwotCWlmIChmaC0+anBnX2J1ZmZlcnMuYWxsb2NhdGVkIHx8Ci0JICAgIGZoLT5qcGdfYnVmZmVycy5yZWFkeV90b19iZV9mcmVlZCkgewotCQlqcGdfZmJ1ZmZlcl9mcmVlKGZpbGUpOwotCX0KLX0KLQotLyoKLSAqICAgT3BlbiBhIHpvcmFuIGNhcmQuIFJpZ2h0IG5vdyB0aGUgZmxhZ3Mgc3R1ZmYgaXMganVzdCBwbGF5aW5nCi0gKi8KLQotc3RhdGljIGludAotem9yYW5fb3BlbiAoc3RydWN0IGlub2RlICppbm9kZSwKLQkgICAgc3RydWN0IGZpbGUgICpmaWxlKQotewotCXVuc2lnbmVkIGludCBtaW5vciA9IGltaW5vcihpbm9kZSk7Ci0Jc3RydWN0IHpvcmFuICp6ciA9IE5VTEw7Ci0Jc3RydWN0IHpvcmFuX2ZoICpmaDsKLQlpbnQgaSwgcmVzLCBmaXJzdF9vcGVuID0gMCwgaGF2ZV9tb2R1bGVfbG9ja3MgPSAwOwotCi0JLyogZmluZCB0aGUgZGV2aWNlICovCi0JZm9yIChpID0gMDsgaSA8IHpvcmFuX251bTsgaSsrKSB7Ci0JCWlmICh6b3JhbltpXS0+dmlkZW9fZGV2LT5taW5vciA9PSBtaW5vcikgewotCQkJenIgPSB6b3JhbltpXTsKLQkJCWJyZWFrOwotCQl9Ci0JfQotCi0JaWYgKCF6cikgewotCQlkcHJpbnRrKDEsIEtFUk5fRVJSICIlczogZGV2aWNlIG5vdCBmb3VuZCFcbiIsIFpPUkFOX05BTUUpOwotCQlyZXMgPSAtRU5PREVWOwotCQlnb3RvIG9wZW5fdW5sb2NrX2FuZF9yZXR1cm47Ci0JfQotCi0JLyogc2VlIGZzL2RldmljZS5jIC0gdGhlIGtlcm5lbCBhbHJlYWR5IGxvY2tzIGR1cmluZyBvcGVuKCksCi0JICogc28gbG9ja2luZyBvdXJzZWx2ZXMgb25seSBjYXVzZXMgZGVhZGxvY2tzICovCi0JLyptdXRleF9sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7Ki8KLQotCWlmICghenItPmRlY29kZXIpIHsKLQkJZHByaW50aygxLAotCQkJS0VSTl9FUlIgIiVzOiBubyBUViBkZWNvZGVyIGxvYWRlZCBmb3IgZGV2aWNlIVxuIiwKLQkJCVpSX0RFVk5BTUUoenIpKTsKLQkJcmVzID0gLUVJTzsKLQkJZ290byBvcGVuX3VubG9ja19hbmRfcmV0dXJuOwotCX0KLQotCS8qIHRyeSB0byBncmFiIGEgbW9kdWxlIGxvY2sgKi8KLQlpZiAoIXRyeV9tb2R1bGVfZ2V0KFRISVNfTU9EVUxFKSkgewotCQlkcHJpbnRrKDEsCi0JCQlLRVJOX0VSUgotCQkJIiVzOiBmYWlsZWQgdG8gYWNxdWlyZSBteSBvd24gbG9jayEgUEFOSUMhXG4iLAotCQkJWlJfREVWTkFNRSh6cikpOwotCQlyZXMgPSAtRU5PREVWOwotCQlnb3RvIG9wZW5fdW5sb2NrX2FuZF9yZXR1cm47Ci0JfQotCWlmICghdHJ5X21vZHVsZV9nZXQoenItPmRlY29kZXItPmRyaXZlci0+ZHJpdmVyLm93bmVyKSkgewotCQlkcHJpbnRrKDEsCi0JCQlLRVJOX0VSUgotCQkJIiVzOiBmYWlsZWQgdG8gZ3JhYiBvd25lcnNoaXAgb2YgaTJjIGRlY29kZXJcbiIsCi0JCQlaUl9ERVZOQU1FKHpyKSk7Ci0JCXJlcyA9IC1FSU87Ci0JCW1vZHVsZV9wdXQoVEhJU19NT0RVTEUpOwotCQlnb3RvIG9wZW5fdW5sb2NrX2FuZF9yZXR1cm47Ci0JfQotCWlmICh6ci0+ZW5jb2RlciAmJgotCSAgICAhdHJ5X21vZHVsZV9nZXQoenItPmVuY29kZXItPmRyaXZlci0+ZHJpdmVyLm93bmVyKSkgewotCQlkcHJpbnRrKDEsCi0JCQlLRVJOX0VSUgotCQkJIiVzOiBmYWlsZWQgdG8gZ3JhYiBvd25lcnNoaXAgb2YgaTJjIGVuY29kZXJcbiIsCi0JCQlaUl9ERVZOQU1FKHpyKSk7Ci0JCXJlcyA9IC1FSU87Ci0JCW1vZHVsZV9wdXQoenItPmRlY29kZXItPmRyaXZlci0+ZHJpdmVyLm93bmVyKTsKLQkJbW9kdWxlX3B1dChUSElTX01PRFVMRSk7Ci0JCWdvdG8gb3Blbl91bmxvY2tfYW5kX3JldHVybjsKLQl9Ci0KLQloYXZlX21vZHVsZV9sb2NrcyA9IDE7Ci0KLQlpZiAoenItPnVzZXIgPj0gMjA0OCkgewotCQlkcHJpbnRrKDEsIEtFUk5fRVJSICIlczogdG9vIG1hbnkgdXNlcnMgKCVkKSBvbiBkZXZpY2VcbiIsCi0JCQlaUl9ERVZOQU1FKHpyKSwgenItPnVzZXIpOwotCQlyZXMgPSAtRUJVU1k7Ci0JCWdvdG8gb3Blbl91bmxvY2tfYW5kX3JldHVybjsKLQl9Ci0KLQlkcHJpbnRrKDEsIEtFUk5fSU5GTyAiJXM6IHpvcmFuX29wZW4oJXMsIHBpZD1bJWRdKSwgdXNlcnMoLSk9JWRcbiIsCi0JCVpSX0RFVk5BTUUoenIpLCBjdXJyZW50LT5jb21tLCB0YXNrX3BpZF9ucihjdXJyZW50KSwgenItPnVzZXIpOwotCi0JLyogbm93LCBjcmVhdGUgdGhlIG9wZW4oKS1zcGVjaWZpYyBmaWxlX29wcyBzdHJ1Y3QgKi8KLQlmaCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB6b3Jhbl9maCksIEdGUF9LRVJORUwpOwotCWlmICghZmgpIHsKLQkJZHByaW50aygxLAotCQkJS0VSTl9FUlIKLQkJCSIlczogem9yYW5fb3BlbigpIC0gYWxsb2NhdGlvbiBvZiB6b3Jhbl9maCBmYWlsZWRcbiIsCi0JCQlaUl9ERVZOQU1FKHpyKSk7Ci0JCXJlcyA9IC1FTk9NRU07Ci0JCWdvdG8gb3Blbl91bmxvY2tfYW5kX3JldHVybjsKLQl9Ci0JLyogdXNlZCB0byBiZSBCVVpfTUFYX1dJRFRIL0hFSUdIVCwgYnV0IHRoYXQgZ2l2ZXMgb3ZlcmZsb3dzCi0JICogb24gbm9ybS1jaGFuZ2UhICovCi0JZmgtPm92ZXJsYXlfbWFzayA9Ci0JICAgIGttYWxsb2MoKCg3NjggKyAzMSkgLyAzMikgKiA1NzYgKiA0LCBHRlBfS0VSTkVMKTsKLQlpZiAoIWZoLT5vdmVybGF5X21hc2spIHsKLQkJZHByaW50aygxLAotCQkJS0VSTl9FUlIKLQkJCSIlczogem9yYW5fb3BlbigpIC0gYWxsb2NhdGlvbiBvZiBvdmVybGF5X21hc2sgZmFpbGVkXG4iLAotCQkJWlJfREVWTkFNRSh6cikpOwotCQlrZnJlZShmaCk7Ci0JCXJlcyA9IC1FTk9NRU07Ci0JCWdvdG8gb3Blbl91bmxvY2tfYW5kX3JldHVybjsKLQl9Ci0KLQlpZiAoenItPnVzZXIrKyA9PSAwKQotCQlmaXJzdF9vcGVuID0gMTsKLQotCS8qbXV0ZXhfdW5sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7Ki8KLQotCS8qIGRlZmF1bHQgc2V0dXAgLSBUT0RPOiBsb29rIGF0IGZsYWdzICovCi0JaWYgKGZpcnN0X29wZW4pIHsJLyogRmlyc3QgZGV2aWNlIG9wZW4gKi8KLQkJenIzNjA1N19yZXN0YXJ0KHpyKTsKLQkJem9yYW5fb3Blbl9pbml0X3BhcmFtcyh6cik7Ci0JCXpvcmFuX2luaXRfaGFyZHdhcmUoenIpOwotCi0JCWJ0b3IoWlIzNjA1N19JQ1JfSW50UGluRW4sIFpSMzYwNTdfSUNSKTsKLQl9Ci0KLQkvKiBzZXQgZmlsZV9vcHMgc3R1ZmYgKi8KLQlmaWxlLT5wcml2YXRlX2RhdGEgPSBmaDsKLQlmaC0+enIgPSB6cjsKLQl6b3Jhbl9vcGVuX2luaXRfc2Vzc2lvbihmaWxlKTsKLQotCXJldHVybiAwOwotCi1vcGVuX3VubG9ja19hbmRfcmV0dXJuOgotCS8qIGlmIHdlIGdyYWJiZWQgbG9ja3MsIHJlbGVhc2UgdGhlbSBhY2NvcmRpbmdseSAqLwotCWlmIChoYXZlX21vZHVsZV9sb2NrcykgewotCQltb2R1bGVfcHV0KHpyLT5kZWNvZGVyLT5kcml2ZXItPmRyaXZlci5vd25lcik7Ci0JCWlmICh6ci0+ZW5jb2RlcikgewotCQkJbW9kdWxlX3B1dCh6ci0+ZW5jb2Rlci0+ZHJpdmVyLT5kcml2ZXIub3duZXIpOwotCQl9Ci0JCW1vZHVsZV9wdXQoVEhJU19NT0RVTEUpOwotCX0KLQotCS8qIGlmIHRoZXJlJ3Mgbm8gZGV2aWNlIGZvdW5kLCB3ZSBkaWRuJ3Qgb2J0YWluIHRoZSBsb2NrIGVpdGhlciAqLwotCWlmICh6cikgewotCQkvKm11dGV4X3VubG9jaygmenItPnJlc291cmNlX2xvY2spOyovCi0JfQotCi0JcmV0dXJuIHJlczsKLX0KLQotc3RhdGljIGludAotem9yYW5fY2xvc2UgKHN0cnVjdCBpbm9kZSAqaW5vZGUsCi0JICAgICBzdHJ1Y3QgZmlsZSAgKmZpbGUpCi17Ci0Jc3RydWN0IHpvcmFuX2ZoICpmaCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKLQlzdHJ1Y3Qgem9yYW4gKnpyID0gZmgtPnpyOwotCi0JZHByaW50aygxLCBLRVJOX0lORk8gIiVzOiB6b3Jhbl9jbG9zZSglcywgcGlkPVslZF0pLCB1c2VycygrKT0lZFxuIiwKLQkJWlJfREVWTkFNRSh6ciksIGN1cnJlbnQtPmNvbW0sIHRhc2tfcGlkX25yKGN1cnJlbnQpLCB6ci0+dXNlcik7Ci0KLQkvKiBrZXJuZWwgbG9ja3MgKGZzL2RldmljZS5jKSwgc28gZG9uJ3QgZG8gdGhhdCBvdXJzZWx2ZXMKLQkgKiAocHJldmVudHMgZGVhZGxvY2tzKSAqLwotCS8qbXV0ZXhfbG9jaygmenItPnJlc291cmNlX2xvY2spOyovCi0KLQl6b3Jhbl9jbG9zZV9lbmRfc2Vzc2lvbihmaWxlKTsKLQotCWlmICh6ci0+dXNlci0tID09IDEpIHsJLyogTGFzdCBwcm9jZXNzICovCi0JCS8qIENsZWFuIHVwIEpQRUcgcHJvY2VzcyAqLwotCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJnpyLT5qcGdfY2FwcSk7Ci0JCXpyMzYwNTdfZW5hYmxlX2pwZyh6ciwgQlVaX01PREVfSURMRSk7Ci0JCXpyLT5qcGdfYnVmZmVycy5hbGxvY2F0ZWQgPSAwOwotCQl6ci0+anBnX2J1ZmZlcnMuYWN0aXZlID0gWk9SQU5fRlJFRTsKLQotCQkvKiBkaXNhYmxlIGludGVycnVwdHMgKi8KLQkJYnRhbmQoflpSMzYwNTdfSUNSX0ludFBpbkVuLCBaUjM2MDU3X0lDUik7Ci0KLQkJaWYgKHpyMzYwNjdfZGVidWcgPiAxKQotCQkJcHJpbnRfaW50ZXJydXB0cyh6cik7Ci0KLQkJLyogT3ZlcmxheSBvZmYgKi8KLQkJenItPnY0bF9vdmVybGF5X2FjdGl2ZSA9IDA7Ci0JCXpyMzYwNTdfb3ZlcmxheSh6ciwgMCk7Ci0JCXpyLT5vdmVybGF5X21hc2sgPSBOVUxMOwotCi0JCS8qIGNhcHR1cmUgb2ZmICovCi0JCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmenItPnY0bF9jYXBxKTsKLQkJenIzNjA1N19zZXRfbWVtZ3JhYih6ciwgMCk7Ci0JCXpyLT52NGxfYnVmZmVycy5hbGxvY2F0ZWQgPSAwOwotCQl6ci0+djRsX2J1ZmZlcnMuYWN0aXZlID0gWk9SQU5fRlJFRTsKLQkJem9yYW5fc2V0X3BjaV9tYXN0ZXIoenIsIDApOwotCi0JCWlmICghcGFzc190aHJvdWdoKSB7CS8qIFN3aXRjaCB0byBjb2xvciBiYXIgKi8KLQkJCWludCB6ZXJvID0gMCwgdHdvID0gMjsKLQkJCWRlY29kZXJfY29tbWFuZCh6ciwgREVDT0RFUl9FTkFCTEVfT1VUUFVULCAmemVybyk7Ci0JCQllbmNvZGVyX2NvbW1hbmQoenIsIEVOQ09ERVJfU0VUX0lOUFVULCAmdHdvKTsKLQkJfQotCX0KLQotCWZpbGUtPnByaXZhdGVfZGF0YSA9IE5VTEw7Ci0Ja2ZyZWUoZmgtPm92ZXJsYXlfbWFzayk7Ci0Ja2ZyZWUoZmgpOwotCi0JLyogcmVsZWFzZSBsb2NrcyBvbiB0aGUgaTJjIG1vZHVsZXMgKi8KLQltb2R1bGVfcHV0KHpyLT5kZWNvZGVyLT5kcml2ZXItPmRyaXZlci5vd25lcik7Ci0JaWYgKHpyLT5lbmNvZGVyKSB7Ci0JCSBtb2R1bGVfcHV0KHpyLT5lbmNvZGVyLT5kcml2ZXItPmRyaXZlci5vd25lcik7Ci0JfQotCW1vZHVsZV9wdXQoVEhJU19NT0RVTEUpOwotCi0JLyptdXRleF91bmxvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsqLwotCi0JZHByaW50ayg0LCBLRVJOX0lORk8gIiVzOiB6b3Jhbl9jbG9zZSgpIGRvbmVcbiIsIFpSX0RFVk5BTUUoenIpKTsKLQotCXJldHVybiAwOwotfQotCi0KLXN0YXRpYyBzc2l6ZV90Ci16b3Jhbl9yZWFkIChzdHJ1Y3QgZmlsZSAqZmlsZSwKLQkgICAgY2hhciAgICAgICAgX191c2VyICpkYXRhLAotCSAgICBzaXplX3QgICAgICAgY291bnQsCi0JICAgIGxvZmZfdCAgICAgICpwcG9zKQotewotCS8qIHdlIHNpbXBseSBkb24ndCBzdXBwb3J0IHJlYWQoKSAoeWV0KS4uLiAqLwotCi0JcmV0dXJuIC1FSU5WQUw7Ci19Ci0KLXN0YXRpYyBzc2l6ZV90Ci16b3Jhbl93cml0ZSAoc3RydWN0IGZpbGUgKmZpbGUsCi0JICAgICBjb25zdCBjaGFyICBfX3VzZXIgKmRhdGEsCi0JICAgICBzaXplX3QgICAgICAgY291bnQsCi0JICAgICBsb2ZmX3QgICAgICAqcHBvcykKLXsKLQkvKiAuLi5hbmQgdGhlIHNhbWUgZ29lcyBmb3Igd3JpdGUoKSAqLwotCi0JcmV0dXJuIC1FSU5WQUw7Ci19Ci0KLXN0YXRpYyBpbnQKLXNldHVwX2ZidWZmZXIgKHN0cnVjdCBmaWxlICAgICAgICAgICAgICAgKmZpbGUsCi0JICAgICAgIHZvaWQgICAgICAgICAgICAgICAgICAgICAgKmJhc2UsCi0JICAgICAgIGNvbnN0IHN0cnVjdCB6b3Jhbl9mb3JtYXQgKmZtdCwKLQkgICAgICAgaW50ICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGgsCi0JICAgICAgIGludCAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodCwKLQkgICAgICAgaW50ICAgICAgICAgICAgICAgICAgICAgICAgYnl0ZXNwZXJsaW5lKQotewotCXN0cnVjdCB6b3Jhbl9maCAqZmggPSBmaWxlLT5wcml2YXRlX2RhdGE7Ci0Jc3RydWN0IHpvcmFuICp6ciA9IGZoLT56cjsKLQotCS8qIChSb25hbGQpIHY0bC92NGwyIGd1aWRlbGluZXMgKi8KLQlpZiAoIWNhcGFibGUoQ0FQX1NZU19BRE1JTikgJiYgIWNhcGFibGUoQ0FQX1NZU19SQVdJTykpCi0JCXJldHVybiAtRVBFUk07Ci0KLQkvKiBEb24ndCBhbGxvdyBmcmFtZSBidWZmZXIgb3ZlcmxheSBpZiBQQ0kgb3IgQUdQIGlzIGJ1Z2d5LCBvciBvbgotCSAgIEFMaSBNYWdpayAodGhhdCBuZWVkcyB2ZXJ5IGxvdyBsYXRlbmN5IHdoaWxlIHRoZSBjYXJkIG5lZWRzIGEKLQkgICBoaWdoZXIgdmFsdWUgYWx3YXlzKSAqLwotCi0JaWYgKHBjaV9wY2lfcHJvYmxlbXMgJiAoUENJUENJX0ZBSUwgfCBQQ0lBR1BfRkFJTCB8IFBDSVBDSV9BTElNQUdJSykpCi0JCXJldHVybiAtRU5YSU87Ci0KLQkvKiB3ZSBuZWVkIGEgYnl0ZXNwZXJsaW5lIHZhbHVlLCBldmVuIGlmIG5vdCBnaXZlbiAqLwotCWlmICghYnl0ZXNwZXJsaW5lKQotCQlieXRlc3BlcmxpbmUgPSB3aWR0aCAqICgoZm10LT5kZXB0aCArIDcpICYgfjcpIC8gODsKLQotI2lmIDAKLQlpZiAoenItPm92ZXJsYXlfYWN0aXZlKSB7Ci0JCS8qIGR6amVlLi4uIHN0dXBpZCB1c2Vycy4uLiBkb24ndCBldmVuIGJvdGhlciB0byB0dXJuIG9mZgotCQkgKiBvdmVybGF5IGJlZm9yZSBjaGFuZ2luZyB0aGUgbWVtb3J5IGxvY2F0aW9uLi4uCi0JCSAqIG5vcm1hbGx5LCB3ZSB3b3VsZCByZXR1cm4gZXJyb3JzIGhlcmUuIEhvd2V2ZXIsIG9uZSBvZgotCQkgKiB0aGUgdG9vbHMgdGhhdCBkb2VzIHRoaXMgaXMuLi4geGF3dHYhIGFuZCBzaW5jZSB4YXd0dgotCQkgKiBpcyB1c2VkIGJ5ICsvLSA5OSUgb2YgdGhlIHVzZXJzLCB3ZSdkIHJhdGhlciBiZSB1c2VyLQotCQkgKiBmcmllbmRseSBhbmQgc2lsZW50bHkgZG8gYXMgaWYgbm90aGluZyB3ZW50IHdyb25nICovCi0JCWRwcmludGsoMywKLQkJCUtFUk5fRVJSCi0JCQkiJXM6IHNldHVwX2ZidWZmZXIoKSAtIGZvcmNlZCBvdmVybGF5IHR1cm5vZmYgYmVjYXVzZSBmcmFtZWJ1ZmZlciBjaGFuZ2VkXG4iLAotCQkJWlJfREVWTkFNRSh6cikpOwotCQl6cjM2MDU3X292ZXJsYXkoenIsIDApOwotCX0KLSNlbmRpZgotCi0JaWYgKCEoZm10LT5mbGFncyAmIFpPUkFOX0ZPUk1BVF9PVkVSTEFZKSkgewotCQlkcHJpbnRrKDEsCi0JCQlLRVJOX0VSUgotCQkJIiVzOiBzZXR1cF9mYnVmZmVyKCkgLSBubyB2YWxpZCBvdmVybGF5IGZvcm1hdCBnaXZlblxuIiwKLQkJCVpSX0RFVk5BTUUoenIpKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCWlmIChoZWlnaHQgPD0gMCB8fCB3aWR0aCA8PSAwIHx8IGJ5dGVzcGVybGluZSA8PSAwKSB7Ci0JCWRwcmludGsoMSwKLQkJCUtFUk5fRVJSCi0JCQkiJXM6IHNldHVwX2ZidWZmZXIoKSAtIGludmFsaWQgaGVpZ2h0L3dpZHRoL2JwbCB2YWx1ZSAoJWR8JWR8JWQpXG4iLAotCQkJWlJfREVWTkFNRSh6ciksIHdpZHRoLCBoZWlnaHQsIGJ5dGVzcGVybGluZSk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQlpZiAoYnl0ZXNwZXJsaW5lICYgMykgewotCQlkcHJpbnRrKDEsCi0JCQlLRVJOX0VSUgotCQkJIiVzOiBzZXR1cF9mYnVmZmVyKCkgLSBieXRlc3BlcmxpbmUgKCVkKSBtdXN0IGJlIDQtYnl0ZSBhbGlnbmVkXG4iLAotCQkJWlJfREVWTkFNRSh6ciksIGJ5dGVzcGVybGluZSk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCXpyLT5idWZmZXIuYmFzZSA9ICh2b2lkICopICgodW5zaWduZWQgbG9uZykgYmFzZSAmIH4zKTsKLQl6ci0+YnVmZmVyLmhlaWdodCA9IGhlaWdodDsKLQl6ci0+YnVmZmVyLndpZHRoID0gd2lkdGg7Ci0JenItPmJ1ZmZlci5kZXB0aCA9IGZtdC0+ZGVwdGg7Ci0JenItPm92ZXJsYXlfc2V0dGluZ3MuZm9ybWF0ID0gZm10OwotCXpyLT5idWZmZXIuYnl0ZXNwZXJsaW5lID0gYnl0ZXNwZXJsaW5lOwotCi0JLyogVGhlIHVzZXIgc2hvdWxkIHNldCBuZXcgd2luZG93IHBhcmFtZXRlcnMgKi8KLQl6ci0+b3ZlcmxheV9zZXR0aW5ncy5pc19zZXQgPSAwOwotCi0JcmV0dXJuIDA7Ci19Ci0KLQotc3RhdGljIGludAotc2V0dXBfd2luZG93IChzdHJ1Y3QgZmlsZSAgICAgICAqZmlsZSwKLQkgICAgICBpbnQgICAgICAgICAgICAgICAgeCwKLQkgICAgICBpbnQgICAgICAgICAgICAgICAgeSwKLQkgICAgICBpbnQgICAgICAgICAgICAgICAgd2lkdGgsCi0JICAgICAgaW50ICAgICAgICAgICAgICAgIGhlaWdodCwKLQkgICAgICBzdHJ1Y3QgdmlkZW9fY2xpcCBfX3VzZXIgKmNsaXBzLAotCSAgICAgIGludCAgICAgICAgICAgICAgICBjbGlwY291bnQsCi0JICAgICAgdm9pZCAgICAgICAgICAgICAgX191c2VyICpiaXRtYXApCi17Ci0Jc3RydWN0IHpvcmFuX2ZoICpmaCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKLQlzdHJ1Y3Qgem9yYW4gKnpyID0gZmgtPnpyOwotCXN0cnVjdCB2aWRlb19jbGlwICp2Y3AgPSBOVUxMOwotCWludCBvbiwgZW5kOwotCi0KLQlpZiAoIXpyLT5idWZmZXIuYmFzZSkgewotCQlkcHJpbnRrKDEsCi0JCQlLRVJOX0VSUgotCQkJIiVzOiBzZXR1cF93aW5kb3coKSAtIGZyYW1lIGJ1ZmZlciBoYXMgdG8gYmUgc2V0IGZpcnN0XG4iLAotCQkJWlJfREVWTkFNRSh6cikpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlpZiAoIWZoLT5vdmVybGF5X3NldHRpbmdzLmZvcm1hdCkgewotCQlkcHJpbnRrKDEsCi0JCQlLRVJOX0VSUgotCQkJIiVzOiBzZXR1cF93aW5kb3coKSAtIG5vIG92ZXJsYXkgZm9ybWF0IHNldFxuIiwKLQkJCVpSX0RFVk5BTUUoenIpKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JLyoKLQkgKiBUaGUgdmlkZW8gZnJvbnQgZW5kIG5lZWRzIDQtYnl0ZSBhbGluZ2VkIGxpbmUgc2l6ZXMsIHdlIGNvcnJlY3QgdGhhdAotCSAqIHNpbGVudGx5IGhlcmUgaWYgbmVjZXNzYXJ5Ci0JICovCi0JaWYgKHpyLT5idWZmZXIuZGVwdGggPT0gMTUgfHwgenItPmJ1ZmZlci5kZXB0aCA9PSAxNikgewotCQllbmQgPSAoeCArIHdpZHRoKSAmIH4xOwkvKiByb3VuZCBkb3duICovCi0JCXggPSAoeCArIDEpICYgfjE7CS8qIHJvdW5kIHVwICovCi0JCXdpZHRoID0gZW5kIC0geDsKLQl9Ci0KLQlpZiAoenItPmJ1ZmZlci5kZXB0aCA9PSAyNCkgewotCQllbmQgPSAoeCArIHdpZHRoKSAmIH4zOwkvKiByb3VuZCBkb3duICovCi0JCXggPSAoeCArIDMpICYgfjM7CS8qIHJvdW5kIHVwICovCi0JCXdpZHRoID0gZW5kIC0geDsKLQl9Ci0KLQlpZiAod2lkdGggPiBCVVpfTUFYX1dJRFRIKQotCQl3aWR0aCA9IEJVWl9NQVhfV0lEVEg7Ci0JaWYgKGhlaWdodCA+IEJVWl9NQVhfSEVJR0hUKQotCQloZWlnaHQgPSBCVVpfTUFYX0hFSUdIVDsKLQotCS8qIENoZWNrIGZvciB2YWlsZCBwYXJhbWV0ZXJzICovCi0JaWYgKHdpZHRoIDwgQlVaX01JTl9XSURUSCB8fCBoZWlnaHQgPCBCVVpfTUlOX0hFSUdIVCB8fAotCSAgICB3aWR0aCA+IEJVWl9NQVhfV0lEVEggfHwgaGVpZ2h0ID4gQlVaX01BWF9IRUlHSFQpIHsKLQkJZHByaW50aygxLAotCQkJS0VSTl9FUlIKLQkJCSIlczogc2V0dXBfd2luZG93KCkgLSB3aWR0aCA9ICVkIG9yIGhlaWdodCA9ICVkIGludmFsaWRcbiIsCi0JCQlaUl9ERVZOQU1FKHpyKSwgd2lkdGgsIGhlaWdodCk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCWZoLT5vdmVybGF5X3NldHRpbmdzLnggPSB4OwotCWZoLT5vdmVybGF5X3NldHRpbmdzLnkgPSB5OwotCWZoLT5vdmVybGF5X3NldHRpbmdzLndpZHRoID0gd2lkdGg7Ci0JZmgtPm92ZXJsYXlfc2V0dGluZ3MuaGVpZ2h0ID0gaGVpZ2h0OwotCWZoLT5vdmVybGF5X3NldHRpbmdzLmNsaXBjb3VudCA9IGNsaXBjb3VudDsKLQotCS8qCi0JICogSWYgYW4gb3ZlcmxheSBpcyBydW5uaW5nLCB3ZSBoYXZlIHRvIHN3aXRjaCBpdCBvZmYKLQkgKiBhbmQgc3dpdGNoIGl0IG9uIGFnYWluIGluIG9yZGVyIHRvIGdldCB0aGUgbmV3IHNldHRpbmdzIGluIGVmZmVjdC4KLQkgKgotCSAqIFdlIGFsc28gd2FudCB0byBhdm9pZCB0aGF0IHRoZSBvdmVybGF5IG1hc2sgaXMgd3JpdHRlbgotCSAqIHdoZW4gYW4gb3ZlcmxheSBpcyBydW5uaW5nLgotCSAqLwotCi0Jb24gPSB6ci0+djRsX292ZXJsYXlfYWN0aXZlICYmICF6ci0+djRsX21lbWdyYWJfYWN0aXZlICYmCi0JICAgIHpyLT5vdmVybGF5X2FjdGl2ZSAhPSBaT1JBTl9GUkVFICYmCi0JICAgIGZoLT5vdmVybGF5X2FjdGl2ZSAhPSBaT1JBTl9GUkVFOwotCWlmIChvbikKLQkJenIzNjA1N19vdmVybGF5KHpyLCAwKTsKLQotCS8qCi0JICogICBXcml0ZSB0aGUgb3ZlcmxheSBtYXNrIGlmIGNsaXBzIGFyZSB3YW50ZWQuCi0JICogICBXZSBwcmVmZXIgYSBiaXRtYXAuCi0JICovCi0JaWYgKGJpdG1hcCkgewotCQkvKiBmYWtlIHZhbHVlIC0gaXQganVzdCBtZWFucyB3ZSB3YW50IGNsaXBzICovCi0JCWZoLT5vdmVybGF5X3NldHRpbmdzLmNsaXBjb3VudCA9IDE7Ci0KLQkJaWYgKGNvcHlfZnJvbV91c2VyKGZoLT5vdmVybGF5X21hc2ssIGJpdG1hcCwKLQkJCQkgICAod2lkdGggKiBoZWlnaHQgKyA3KSAvIDgpKSB7Ci0JCQlyZXR1cm4gLUVGQVVMVDsKLQkJfQotCX0gZWxzZSBpZiAoY2xpcGNvdW50ID4gMCkgewotCQkvKiB3cml0ZSBvdXIgb3duIGJpdG1hcCBmcm9tIHRoZSBjbGlwcyAqLwotCQl2Y3AgPSB2bWFsbG9jKHNpemVvZihzdHJ1Y3QgdmlkZW9fY2xpcCkgKiAoY2xpcGNvdW50ICsgNCkpOwotCQlpZiAodmNwID09IE5VTEwpIHsKLQkJCWRwcmludGsoMSwKLQkJCQlLRVJOX0VSUgotCQkJCSIlczogc2V0dXBfd2luZG93KCkgLSBBbGxvYyBvZiBjbGlwIG1hc2sgZmFpbGVkXG4iLAotCQkJCVpSX0RFVk5BTUUoenIpKTsKLQkJCXJldHVybiAtRU5PTUVNOwotCQl9Ci0JCWlmIChjb3B5X2Zyb21fdXNlcgotCQkgICAgKHZjcCwgY2xpcHMsIHNpemVvZihzdHJ1Y3QgdmlkZW9fY2xpcCkgKiBjbGlwY291bnQpKSB7Ci0JCQl2ZnJlZSh2Y3ApOwotCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCX0KLQkJd3JpdGVfb3ZlcmxheV9tYXNrKGZpbGUsIHZjcCwgY2xpcGNvdW50KTsKLQkJdmZyZWUodmNwKTsKLQl9Ci0KLQlmaC0+b3ZlcmxheV9zZXR0aW5ncy5pc19zZXQgPSAxOwotCWlmIChmaC0+b3ZlcmxheV9hY3RpdmUgIT0gWk9SQU5fRlJFRSAmJgotCSAgICB6ci0+b3ZlcmxheV9hY3RpdmUgIT0gWk9SQU5fRlJFRSkKLQkJenItPm92ZXJsYXlfc2V0dGluZ3MgPSBmaC0+b3ZlcmxheV9zZXR0aW5nczsKLQotCWlmIChvbikKLQkJenIzNjA1N19vdmVybGF5KHpyLCAxKTsKLQotCS8qIE1ha2Ugc3VyZSB0aGUgY2hhbmdlcyBjb21lIGludG8gZWZmZWN0ICovCi0JcmV0dXJuIHdhaXRfZ3JhYl9wZW5kaW5nKHpyKTsKLX0KLQotc3RhdGljIGludAotc2V0dXBfb3ZlcmxheSAoc3RydWN0IGZpbGUgKmZpbGUsCi0JICAgICAgIGludCAgICAgICAgICBvbikKLXsKLQlzdHJ1Y3Qgem9yYW5fZmggKmZoID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwotCXN0cnVjdCB6b3JhbiAqenIgPSBmaC0+enI7Ci0KLQkvKiBJZiB0aGVyZSBpcyBub3RoaW5nIHRvIGRvLCByZXR1cm4gaW1tZWRpYXRseSAqLwotCWlmICgob24gJiYgZmgtPm92ZXJsYXlfYWN0aXZlICE9IFpPUkFOX0ZSRUUpIHx8Ci0JICAgICghb24gJiYgZmgtPm92ZXJsYXlfYWN0aXZlID09IFpPUkFOX0ZSRUUpKQotCQlyZXR1cm4gMDsKLQotCS8qIGNoZWNrIHdoZXRoZXIgd2UncmUgdG91Y2hpbmcgc29tZW9uZSBlbHNlJ3Mgb3ZlcmxheSAqLwotCWlmIChvbiAmJiB6ci0+b3ZlcmxheV9hY3RpdmUgIT0gWk9SQU5fRlJFRSAmJgotCSAgICBmaC0+b3ZlcmxheV9hY3RpdmUgPT0gWk9SQU5fRlJFRSkgewotCQlkcHJpbnRrKDEsCi0JCQlLRVJOX0VSUgotCQkJIiVzOiBzZXR1cF9vdmVybGF5KCkgLSBvdmVybGF5IGlzIGFscmVhZHkgYWN0aXZlIGZvciBhbm90aGVyIHNlc3Npb25cbiIsCi0JCQlaUl9ERVZOQU1FKHpyKSk7Ci0JCXJldHVybiAtRUJVU1k7Ci0JfQotCWlmICghb24gJiYgenItPm92ZXJsYXlfYWN0aXZlICE9IFpPUkFOX0ZSRUUgJiYKLQkgICAgZmgtPm92ZXJsYXlfYWN0aXZlID09IFpPUkFOX0ZSRUUpIHsKLQkJZHByaW50aygxLAotCQkJS0VSTl9FUlIKLQkJCSIlczogc2V0dXBfb3ZlcmxheSgpIC0geW91IGNhbm5vdCBjYW5jZWwgc29tZW9uZSBlbHNlJ3Mgc2Vzc2lvblxuIiwKLQkJCVpSX0RFVk5BTUUoenIpKTsKLQkJcmV0dXJuIC1FUEVSTTsKLQl9Ci0KLQlpZiAob24gPT0gMCkgewotCQl6ci0+b3ZlcmxheV9hY3RpdmUgPSBmaC0+b3ZlcmxheV9hY3RpdmUgPSBaT1JBTl9GUkVFOwotCQl6ci0+djRsX292ZXJsYXlfYWN0aXZlID0gMDsKLQkJLyogV2hlbiBhIGdyYWIgaXMgcnVubmluZywgdGhlIHZpZGVvIHNpbXBseQotCQkgKiB3b24ndCBiZSBzd2l0Y2hlZCBvbiBhbnkgbW9yZSAqLwotCQlpZiAoIXpyLT52NGxfbWVtZ3JhYl9hY3RpdmUpCi0JCQl6cjM2MDU3X292ZXJsYXkoenIsIDApOwotCQl6ci0+b3ZlcmxheV9tYXNrID0gTlVMTDsKLQl9IGVsc2UgewotCQlpZiAoIXpyLT5idWZmZXIuYmFzZSB8fCAhZmgtPm92ZXJsYXlfc2V0dGluZ3MuaXNfc2V0KSB7Ci0JCQlkcHJpbnRrKDEsCi0JCQkJS0VSTl9FUlIKLQkJCQkiJXM6IHNldHVwX292ZXJsYXkoKSAtIGJ1ZmZlciBvciB3aW5kb3cgbm90IHNldFxuIiwKLQkJCQlaUl9ERVZOQU1FKHpyKSk7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCQlpZiAoIWZoLT5vdmVybGF5X3NldHRpbmdzLmZvcm1hdCkgewotCQkJZHByaW50aygxLAotCQkJCUtFUk5fRVJSCi0JCQkJIiVzOiBzZXR1cF9vdmVybGF5KCkgLSBubyBvdmVybGF5IGZvcm1hdCBzZXRcbiIsCi0JCQkJWlJfREVWTkFNRSh6cikpOwotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQkJenItPm92ZXJsYXlfYWN0aXZlID0gZmgtPm92ZXJsYXlfYWN0aXZlID0gWk9SQU5fTE9DS0VEOwotCQl6ci0+djRsX292ZXJsYXlfYWN0aXZlID0gMTsKLQkJenItPm92ZXJsYXlfbWFzayA9IGZoLT5vdmVybGF5X21hc2s7Ci0JCXpyLT5vdmVybGF5X3NldHRpbmdzID0gZmgtPm92ZXJsYXlfc2V0dGluZ3M7Ci0JCWlmICghenItPnY0bF9tZW1ncmFiX2FjdGl2ZSkKLQkJCXpyMzYwNTdfb3ZlcmxheSh6ciwgMSk7Ci0JCS8qIFdoZW4gYSBncmFiIGlzIHJ1bm5pbmcsIHRoZSB2aWRlbyB3aWxsIGJlCi0JCSAqIHN3aXRjaGVkIG9uIHdoZW4gZ3JhYiBpcyBmaW5pc2hlZCAqLwotCX0KLQotCS8qIE1ha2Ugc3VyZSB0aGUgY2hhbmdlcyBjb21lIGludG8gZWZmZWN0ICovCi0JcmV0dXJuIHdhaXRfZ3JhYl9wZW5kaW5nKHpyKTsKLX0KLQotCS8qIGdldCB0aGUgc3RhdHVzIG9mIGEgYnVmZmVyIGluIHRoZSBjbGllbnRzIGJ1ZmZlciBxdWV1ZSAqLwotc3RhdGljIGludAotem9yYW5fdjRsMl9idWZmZXJfc3RhdHVzIChzdHJ1Y3QgZmlsZSAgICAgICAgKmZpbGUsCi0JCQkgIHN0cnVjdCB2NGwyX2J1ZmZlciAqYnVmLAotCQkJICBpbnQgICAgICAgICAgICAgICAgIG51bSkKLXsKLQlzdHJ1Y3Qgem9yYW5fZmggKmZoID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwotCXN0cnVjdCB6b3JhbiAqenIgPSBmaC0+enI7Ci0KLQlidWYtPmZsYWdzID0gVjRMMl9CVUZfRkxBR19NQVBQRUQ7Ci0KLQlzd2l0Y2ggKGZoLT5tYXBfbW9kZSkgewotCWNhc2UgWk9SQU5fTUFQX01PREVfUkFXOgotCi0JCS8qIGNoZWNrIHJhbmdlICovCi0JCWlmIChudW0gPCAwIHx8IG51bSA+PSBmaC0+djRsX2J1ZmZlcnMubnVtX2J1ZmZlcnMgfHwKLQkJICAgICFmaC0+djRsX2J1ZmZlcnMuYWxsb2NhdGVkKSB7Ci0JCQlkcHJpbnRrKDEsCi0JCQkJS0VSTl9FUlIKLQkJCQkiJXM6IHY0bDJfYnVmZmVyX3N0YXR1cygpIC0gd3JvbmcgbnVtYmVyIG9yIGJ1ZmZlcnMgbm90IGFsbG9jYXRlZFxuIiwKLQkJCQlaUl9ERVZOQU1FKHpyKSk7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCi0JCWJ1Zi0+dHlwZSA9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRTsKLQkJYnVmLT5sZW5ndGggPSBmaC0+djRsX2J1ZmZlcnMuYnVmZmVyX3NpemU7Ci0KLQkJLyogZ2V0IGJ1ZmZlciAqLwotCQlidWYtPmJ5dGVzdXNlZCA9IGZoLT52NGxfYnVmZmVycy5idWZmZXJbbnVtXS5icy5sZW5ndGg7Ci0JCWlmIChmaC0+djRsX2J1ZmZlcnMuYnVmZmVyW251bV0uc3RhdGUgPT0gQlVaX1NUQVRFX0RPTkUgfHwKLQkJICAgIGZoLT52NGxfYnVmZmVycy5idWZmZXJbbnVtXS5zdGF0ZSA9PSBCVVpfU1RBVEVfVVNFUikgewotCQkJYnVmLT5zZXF1ZW5jZSA9IGZoLT52NGxfYnVmZmVycy5idWZmZXJbbnVtXS5icy5zZXE7Ci0JCQlidWYtPmZsYWdzIHw9IFY0TDJfQlVGX0ZMQUdfRE9ORTsKLQkJCWJ1Zi0+dGltZXN0YW1wID0KLQkJCSAgICBmaC0+djRsX2J1ZmZlcnMuYnVmZmVyW251bV0uYnMudGltZXN0YW1wOwotCQl9IGVsc2UgewotCQkJYnVmLT5mbGFncyB8PSBWNEwyX0JVRl9GTEFHX1FVRVVFRDsKLQkJfQotCi0JCWlmIChmaC0+djRsX3NldHRpbmdzLmhlaWdodCA8PSBCVVpfTUFYX0hFSUdIVCAvIDIpCi0JCQlidWYtPmZpZWxkID0gVjRMMl9GSUVMRF9UT1A7Ci0JCWVsc2UKLQkJCWJ1Zi0+ZmllbGQgPSBWNEwyX0ZJRUxEX0lOVEVSTEFDRUQ7Ci0KLQkJYnJlYWs7Ci0KLQljYXNlIFpPUkFOX01BUF9NT0RFX0pQR19SRUM6Ci0JY2FzZSBaT1JBTl9NQVBfTU9ERV9KUEdfUExBWToKLQotCQkvKiBjaGVjayByYW5nZSAqLwotCQlpZiAobnVtIDwgMCB8fCBudW0gPj0gZmgtPmpwZ19idWZmZXJzLm51bV9idWZmZXJzIHx8Ci0JCSAgICAhZmgtPmpwZ19idWZmZXJzLmFsbG9jYXRlZCkgewotCQkJZHByaW50aygxLAotCQkJCUtFUk5fRVJSCi0JCQkJIiVzOiB2NGwyX2J1ZmZlcl9zdGF0dXMoKSAtIHdyb25nIG51bWJlciBvciBidWZmZXJzIG5vdCBhbGxvY2F0ZWRcbiIsCi0JCQkJWlJfREVWTkFNRSh6cikpOwotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQotCQlidWYtPnR5cGUgPSAoZmgtPm1hcF9tb2RlID09IFpPUkFOX01BUF9NT0RFX0pQR19SRUMpID8KLQkJCSAgICAgIFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSA6Ci0JCQkgICAgICBWNEwyX0JVRl9UWVBFX1ZJREVPX09VVFBVVDsKLQkJYnVmLT5sZW5ndGggPSBmaC0+anBnX2J1ZmZlcnMuYnVmZmVyX3NpemU7Ci0KLQkJLyogdGhlc2UgdmFyaWFibGVzIGFyZSBvbmx5IHdyaXR0ZW4gYWZ0ZXIgZnJhbWUgaGFzIGJlZW4gY2FwdHVyZWQgKi8KLQkJaWYgKGZoLT5qcGdfYnVmZmVycy5idWZmZXJbbnVtXS5zdGF0ZSA9PSBCVVpfU1RBVEVfRE9ORSB8fAotCQkgICAgZmgtPmpwZ19idWZmZXJzLmJ1ZmZlcltudW1dLnN0YXRlID09IEJVWl9TVEFURV9VU0VSKSB7Ci0JCQlidWYtPnNlcXVlbmNlID0gZmgtPmpwZ19idWZmZXJzLmJ1ZmZlcltudW1dLmJzLnNlcTsKLQkJCWJ1Zi0+dGltZXN0YW1wID0KLQkJCSAgICBmaC0+anBnX2J1ZmZlcnMuYnVmZmVyW251bV0uYnMudGltZXN0YW1wOwotCQkJYnVmLT5ieXRlc3VzZWQgPQotCQkJICAgIGZoLT5qcGdfYnVmZmVycy5idWZmZXJbbnVtXS5icy5sZW5ndGg7Ci0JCQlidWYtPmZsYWdzIHw9IFY0TDJfQlVGX0ZMQUdfRE9ORTsKLQkJfSBlbHNlIHsKLQkJCWJ1Zi0+ZmxhZ3MgfD0gVjRMMl9CVUZfRkxBR19RVUVVRUQ7Ci0JCX0KLQotCQkvKiB3aGljaCBmaWVsZHMgYXJlIHRoZXNlPyAqLwotCQlpZiAoZmgtPmpwZ19zZXR0aW5ncy5UbXBEY20gIT0gMSkKLQkJCWJ1Zi0+ZmllbGQgPQotCQkJICAgIGZoLT5qcGdfc2V0dGluZ3MuCi0JCQkgICAgb2RkX2V2ZW4gPyBWNEwyX0ZJRUxEX1RPUCA6IFY0TDJfRklFTERfQk9UVE9NOwotCQllbHNlCi0JCQlidWYtPmZpZWxkID0KLQkJCSAgICBmaC0+anBnX3NldHRpbmdzLgotCQkJICAgIG9kZF9ldmVuID8gVjRMMl9GSUVMRF9TRVFfVEIgOgotCQkJICAgIFY0TDJfRklFTERfU0VRX0JUOwotCi0JCWJyZWFrOwotCi0JZGVmYXVsdDoKLQotCQlkcHJpbnRrKDUsCi0JCQlLRVJOX0VSUgotCQkJIiVzOiB2NGwyX2J1ZmZlcl9zdGF0dXMoKSAtIGludmFsaWQgYnVmZmVyIHR5cGV8bWFwX21vZGUgKCVkfCVkKVxuIiwKLQkJCVpSX0RFVk5BTUUoenIpLCBidWYtPnR5cGUsIGZoLT5tYXBfbW9kZSk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCWJ1Zi0+bWVtb3J5ID0gVjRMMl9NRU1PUllfTU1BUDsKLQlidWYtPmluZGV4ID0gbnVtOwotCWJ1Zi0+bS5vZmZzZXQgPSBidWYtPmxlbmd0aCAqIG51bTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50Ci16b3Jhbl9zZXRfbm9ybSAoc3RydWN0IHpvcmFuICp6ciwKLQkJaW50ICAgICAgICAgICBub3JtKSAvKiBWSURFT19NT0RFXyogKi8KLXsKLQlpbnQgbm9ybV9lbmNvZGVyLCBvbjsKLQotCWlmICh6ci0+djRsX2J1ZmZlcnMuYWN0aXZlICE9IFpPUkFOX0ZSRUUgfHwKLQkgICAgenItPmpwZ19idWZmZXJzLmFjdGl2ZSAhPSBaT1JBTl9GUkVFKSB7Ci0JCWRwcmludGsoMSwKLQkJCUtFUk5fV0FSTklORwotCQkJIiVzOiBzZXRfbm9ybSgpIGNhbGxlZCB3aGlsZSBpbiBwbGF5YmFjay9jYXB0dXJlIG1vZGVcbiIsCi0JCQlaUl9ERVZOQU1FKHpyKSk7Ci0JCXJldHVybiAtRUJVU1k7Ci0JfQotCi0JaWYgKGxvY2tfbm9ybSAmJiBub3JtICE9IHpyLT5ub3JtKSB7Ci0JCWlmIChsb2NrX25vcm0gPiAxKSB7Ci0JCQlkcHJpbnRrKDEsCi0JCQkJS0VSTl9XQVJOSU5HCi0JCQkJIiVzOiBzZXRfbm9ybSgpIC0gVFYgc3RhbmRhcmQgaXMgbG9ja2VkLCBjYW4gbm90IHN3aXRjaCBub3JtXG4iLAotCQkJCVpSX0RFVk5BTUUoenIpKTsKLQkJCXJldHVybiAtRVBFUk07Ci0JCX0gZWxzZSB7Ci0JCQlkcHJpbnRrKDEsCi0JCQkJS0VSTl9XQVJOSU5HCi0JCQkJIiVzOiBzZXRfbm9ybSgpIC0gVFYgc3RhbmRhcmQgaXMgbG9ja2VkLCBub3JtIHdhcyBub3QgY2hhbmdlZFxuIiwKLQkJCQlaUl9ERVZOQU1FKHpyKSk7Ci0JCQlub3JtID0genItPm5vcm07Ci0JCX0KLQl9Ci0KLQlpZiAobm9ybSAhPSBWSURFT19NT0RFX0FVVE8gJiYKLQkgICAgKG5vcm0gPCAwIHx8IG5vcm0gPj0genItPmNhcmQubm9ybXMgfHwKLQkgICAgICF6ci0+Y2FyZC50dm5bbm9ybV0pKSB7Ci0JCWRwcmludGsoMSwKLQkJCUtFUk5fRVJSICIlczogc2V0X25vcm0oKSAtIHVuc3VwcG9ydGVkIG5vcm0gJWRcbiIsCi0JCQlaUl9ERVZOQU1FKHpyKSwgbm9ybSk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCWlmIChub3JtID09IFZJREVPX01PREVfQVVUTykgewotCQlpbnQgc3RhdHVzOwotCi0JCS8qIGlmIHdlIGhhdmUgYXV0b2RldGVjdCwgLi4uICovCi0JCXN0cnVjdCB2aWRlb19kZWNvZGVyX2NhcGFiaWxpdHkgY2FwczsKLQkJZGVjb2Rlcl9jb21tYW5kKHpyLCBERUNPREVSX0dFVF9DQVBBQklMSVRJRVMsICZjYXBzKTsKLQkJaWYgKCEoY2Fwcy5mbGFncyAmIFZJREVPX0RFQ09ERVJfQVVUTykpIHsKLQkJCWRwcmludGsoMSwgS0VSTl9FUlIgIiVzOiBub3JtPWF1dG8gdW5zdXBwb3J0ZWRcbiIsCi0JCQkJWlJfREVWTkFNRSh6cikpOwotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQotCQlkZWNvZGVyX2NvbW1hbmQoenIsIERFQ09ERVJfU0VUX05PUk0sICZub3JtKTsKLQotCQkvKiBsZXQgY2hhbmdlcyBjb21lIGludG8gZWZmZWN0ICovCi0JCXNzbGVlcCgyKTsKLQotCQlkZWNvZGVyX2NvbW1hbmQoenIsIERFQ09ERVJfR0VUX1NUQVRVUywgJnN0YXR1cyk7Ci0JCWlmICghKHN0YXR1cyAmIERFQ09ERVJfU1RBVFVTX0dPT0QpKSB7Ci0JCQlkcHJpbnRrKDEsCi0JCQkJS0VSTl9FUlIKLQkJCQkiJXM6IHNldF9ub3JtKCkgLSBubyBub3JtIGRldGVjdGVkXG4iLAotCQkJCVpSX0RFVk5BTUUoenIpKTsKLQkJCS8qIHJlc2V0IG5vcm0gKi8KLQkJCWRlY29kZXJfY29tbWFuZCh6ciwgREVDT0RFUl9TRVRfTk9STSwgJnpyLT5ub3JtKTsKLQkJCXJldHVybiAtRUlPOwotCQl9Ci0KLQkJaWYgKHN0YXR1cyAmIERFQ09ERVJfU1RBVFVTX05UU0MpCi0JCQlub3JtID0gVklERU9fTU9ERV9OVFNDOwotCQllbHNlIGlmIChzdGF0dXMgJiBERUNPREVSX1NUQVRVU19TRUNBTSkKLQkJCW5vcm0gPSBWSURFT19NT0RFX1NFQ0FNOwotCQllbHNlCi0JCQlub3JtID0gVklERU9fTU9ERV9QQUw7Ci0JfQotCXpyLT50aW1pbmcgPSB6ci0+Y2FyZC50dm5bbm9ybV07Ci0Jbm9ybV9lbmNvZGVyID0gbm9ybTsKLQotCS8qIFdlIHN3aXRjaCBvdmVybGF5IG9mZiBhbmQgb24gc2luY2UgYSBjaGFuZ2UgaW4gdGhlCi0JICogbm9ybSBuZWVkcyBkaWZmZXJlbnQgVkZFIHNldHRpbmdzICovCi0Jb24gPSB6ci0+b3ZlcmxheV9hY3RpdmUgJiYgIXpyLT52NGxfbWVtZ3JhYl9hY3RpdmU7Ci0JaWYgKG9uKQotCQl6cjM2MDU3X292ZXJsYXkoenIsIDApOwotCi0JZGVjb2Rlcl9jb21tYW5kKHpyLCBERUNPREVSX1NFVF9OT1JNLCAmbm9ybSk7Ci0JZW5jb2Rlcl9jb21tYW5kKHpyLCBFTkNPREVSX1NFVF9OT1JNLCAmbm9ybV9lbmNvZGVyKTsKLQotCWlmIChvbikKLQkJenIzNjA1N19vdmVybGF5KHpyLCAxKTsKLQotCS8qIE1ha2Ugc3VyZSB0aGUgY2hhbmdlcyBjb21lIGludG8gZWZmZWN0ICovCi0JenItPm5vcm0gPSBub3JtOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQKLXpvcmFuX3NldF9pbnB1dCAoc3RydWN0IHpvcmFuICp6ciwKLQkJIGludCAgICAgICAgICAgaW5wdXQpCi17Ci0JaW50IHJlYWxpbnB1dDsKLQotCWlmIChpbnB1dCA9PSB6ci0+aW5wdXQpIHsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JaWYgKHpyLT52NGxfYnVmZmVycy5hY3RpdmUgIT0gWk9SQU5fRlJFRSB8fAotCSAgICB6ci0+anBnX2J1ZmZlcnMuYWN0aXZlICE9IFpPUkFOX0ZSRUUpIHsKLQkJZHByaW50aygxLAotCQkJS0VSTl9XQVJOSU5HCi0JCQkiJXM6IHNldF9pbnB1dCgpIGNhbGxlZCB3aGlsZSBpbiBwbGF5YmFjay9jYXB0dXJlIG1vZGVcbiIsCi0JCQlaUl9ERVZOQU1FKHpyKSk7Ci0JCXJldHVybiAtRUJVU1k7Ci0JfQotCi0JaWYgKGlucHV0IDwgMCB8fCBpbnB1dCA+PSB6ci0+Y2FyZC5pbnB1dHMpIHsKLQkJZHByaW50aygxLAotCQkJS0VSTl9FUlIKLQkJCSIlczogc2V0X2lucHV0KCkgLSB1bm5zdXBwb3J0ZWQgaW5wdXQgJWRcbiIsCi0JCQlaUl9ERVZOQU1FKHpyKSwgaW5wdXQpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlyZWFsaW5wdXQgPSB6ci0+Y2FyZC5pbnB1dFtpbnB1dF0ubXV4c2VsOwotCXpyLT5pbnB1dCA9IGlucHV0OwotCi0JZGVjb2Rlcl9jb21tYW5kKHpyLCBERUNPREVSX1NFVF9JTlBVVCwgJnJlYWxpbnB1dCk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyoKLSAqICAgaW9jdGwgcm91dGluZQotICovCi0KLXN0YXRpYyBpbnQKLXpvcmFuX2RvX2lvY3RsIChzdHJ1Y3QgaW5vZGUgKmlub2RlLAotCQlzdHJ1Y3QgZmlsZSAgKmZpbGUsCi0JCXVuc2lnbmVkIGludCAgY21kLAotCQl2b2lkICAgICAgICAgKmFyZykKLXsKLQlzdHJ1Y3Qgem9yYW5fZmggKmZoID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwotCXN0cnVjdCB6b3JhbiAqenIgPSBmaC0+enI7Ci0JLyogQ0FSRUZVTDogdXNlZCBpbiBtdWx0aXBsZSBwbGFjZXMgaGVyZSAqLwotCXN0cnVjdCB6b3Jhbl9qcGdfc2V0dGluZ3Mgc2V0dGluZ3M7Ci0KLQkvKiB3ZSBtaWdodCBoYXZlIG9sZGVyIGJ1ZmZlcnMgbHlpbmcgYXJvdW5kLi4uIFdlIGRvbid0IHdhbnQKLQkgKiB0byB3YWl0LCBidXQgd2UgZG8gd2FudCB0byB0cnkgY2xlYW5pbmcgdGhlbSB1cCBBU0FQLiBTbwotCSAqIHdlIHRyeSB0byBvYnRhaW4gdGhlIGxvY2sgYW5kIGZyZWUgdGhlbS4gSWYgdGhhdCBmYWlscywgd2UKLQkgKiBkb24ndCBkbyBhbnl0aGluZyBhbmQgd2FpdCBmb3IgdGhlIG5leHQgdHVybi4gSW4gdGhlIGVuZCwKLQkgKiB6b3Jhbl9jbG9zZSgpIG9yIGEgbmV3IGFsbG9jYXRpb24gd2lsbCBzdGlsbCBmcmVlIHRoZW0uLi4KLQkgKiBUaGlzIGlzIGp1c3QgYSAndGhlIHNvb25lciB0aGUgYmV0dGVyJyBleHRyYSAnZmVhdHVyZScKLQkgKgotCSAqIFdlIGRvbid0IGZyZWUgdGhlIGJ1ZmZlcnMgcmlnaHQgb24gbXVubWFwKCkgYmVjYXVzZSB0aGF0Ci0JICogY2F1c2VzIG9vcHNlcyAoa2ZyZWUoKSBpbnNpZGUgbXVubWFwKCkgb29wc2VzIGZvciBubwotCSAqIGFwcGFyZW50IHJlYXNvbiAtIGl0J3MgYWxzbyBub3QgcmVwcm9kdWNlYWJsZSBpbiBhbnkgd2F5LAotCSAqIGJ1dCBtb3ZpbmcgdGhlIGZyZWUgY29kZSBvdXRzaWRlIHRoZSBtdW5tYXAoKSBoYW5kbGVyIGZpeGVzCi0JICogYWxsIHRoaXMuLi4gSWYgc29tZW9uZSBrbm93cyB3aHksIHBsZWFzZSBleHBsYWluIG1lIChSb25hbGQpCi0JICovCi0JaWYgKG11dGV4X3RyeWxvY2soJnpyLT5yZXNvdXJjZV9sb2NrKSkgewotCQkvKiB3ZSBvYnRhaW5lZCBpdCEgTGV0J3MgdHJ5IHRvIGZyZWUgc29tZSB0aGluZ3MgKi8KLQkJaWYgKGZoLT5qcGdfYnVmZmVycy5yZWFkeV90b19iZV9mcmVlZCkKLQkJCWpwZ19mYnVmZmVyX2ZyZWUoZmlsZSk7Ci0JCWlmIChmaC0+djRsX2J1ZmZlcnMucmVhZHlfdG9fYmVfZnJlZWQpCi0JCQl2NGxfZmJ1ZmZlcl9mcmVlKGZpbGUpOwotCi0JCW11dGV4X3VubG9jaygmenItPnJlc291cmNlX2xvY2spOwotCX0KLQotCXN3aXRjaCAoY21kKSB7Ci0KLQljYXNlIFZJRElPQ0dDQVA6Ci0JewotCQlzdHJ1Y3QgdmlkZW9fY2FwYWJpbGl0eSAqdmNhcCA9IGFyZzsKLQotCQlkcHJpbnRrKDMsIEtFUk5fREVCVUcgIiVzOiBWSURJT0NHQ0FQXG4iLCBaUl9ERVZOQU1FKHpyKSk7Ci0KLQkJbWVtc2V0KHZjYXAsIDAsIHNpemVvZihzdHJ1Y3QgdmlkZW9fY2FwYWJpbGl0eSkpOwotCQlzdHJuY3B5KHZjYXAtPm5hbWUsIFpSX0RFVk5BTUUoenIpLCBzaXplb2YodmNhcC0+bmFtZSktMSk7Ci0JCXZjYXAtPnR5cGUgPSBaT1JBTl9WSURfVFlQRTsKLQotCQl2Y2FwLT5jaGFubmVscyA9IHpyLT5jYXJkLmlucHV0czsKLQkJdmNhcC0+YXVkaW9zID0gMDsKLQkJbXV0ZXhfbG9jaygmenItPnJlc291cmNlX2xvY2spOwotCQl2Y2FwLT5tYXh3aWR0aCA9IEJVWl9NQVhfV0lEVEg7Ci0JCXZjYXAtPm1heGhlaWdodCA9IEJVWl9NQVhfSEVJR0hUOwotCQl2Y2FwLT5taW53aWR0aCA9IEJVWl9NSU5fV0lEVEg7Ci0JCXZjYXAtPm1pbmhlaWdodCA9IEJVWl9NSU5fSEVJR0hUOwotCQltdXRleF91bmxvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKLQotCQlyZXR1cm4gMDsKLQl9Ci0JCWJyZWFrOwotCi0JY2FzZSBWSURJT0NHQ0hBTjoKLQl7Ci0JCXN0cnVjdCB2aWRlb19jaGFubmVsICp2Y2hhbiA9IGFyZzsKLQkJaW50IGNoYW5uZWwgPSB2Y2hhbi0+Y2hhbm5lbDsKLQotCQlkcHJpbnRrKDMsIEtFUk5fREVCVUcgIiVzOiBWSURJT0NHQ0hBTiAtIGNoYW5uZWw9JWRcbiIsCi0JCQlaUl9ERVZOQU1FKHpyKSwgdmNoYW4tPmNoYW5uZWwpOwotCi0JCW1lbXNldCh2Y2hhbiwgMCwgc2l6ZW9mKHN0cnVjdCB2aWRlb19jaGFubmVsKSk7Ci0JCWlmIChjaGFubmVsID4genItPmNhcmQuaW5wdXRzIHx8IGNoYW5uZWwgPCAwKSB7Ci0JCQlkcHJpbnRrKDEsCi0JCQkJS0VSTl9FUlIKLQkJCQkiJXM6IFZJRElPQ0dDSEFOIG9uIG5vdCBleGlzdGluZyBjaGFubmVsICVkXG4iLAotCQkJCVpSX0RFVk5BTUUoenIpLCBjaGFubmVsKTsKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0KLQkJc3RyY3B5KHZjaGFuLT5uYW1lLCB6ci0+Y2FyZC5pbnB1dFtjaGFubmVsXS5uYW1lKTsKLQotCQl2Y2hhbi0+dHVuZXJzID0gMDsKLQkJdmNoYW4tPmZsYWdzID0gMDsKLQkJdmNoYW4tPnR5cGUgPSBWSURFT19UWVBFX0NBTUVSQTsKLQkJbXV0ZXhfbG9jaygmenItPnJlc291cmNlX2xvY2spOwotCQl2Y2hhbi0+bm9ybSA9IHpyLT5ub3JtOwotCQltdXRleF91bmxvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKLQkJdmNoYW4tPmNoYW5uZWwgPSBjaGFubmVsOwotCi0JCXJldHVybiAwOwotCX0KLQkJYnJlYWs7Ci0KLQkJLyogUko6IHRoZSBkb2N1bWVudGF0aW9uIGF0IGh0dHA6Ly9yb2FkcnVubmVyLnN3YW5zZWEubGludXgub3JnLnVrL3Y0bGFwaS5zaHRtbCBzYXlzOgotCQkgKgotCQkgKiAqICJUaGUgVklESU9DU0NIQU4gaW9jdGwgdGFrZXMgYW4gaW50ZWdlciBhcmd1bWVudCBhbmQgc3dpdGNoZXMgdGhlIGNhcHR1cmUgdG8gdGhpcyBpbnB1dC4iCi0JCSAqICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeXl5eXl5eCi0JCSAqICogVGhlIGZhbW9zIEJUVFYgZHJpdmVyIGhhcyBpdCBpbXBsZW1lbnRlZCB3aXRoIGEgc3RydWN0IHZpZGVvX2NoYW5uZWwgYXJndW1lbnQKLQkJICogKiBhbmQgd2UgZm9sbG93IGl0IGZvciBjb21wYXRpYmlsaXR5IHJlYXNvbnMKLQkJICogKgotCQkgKiAqIEJUVzogdGhpcyBpcyB0aGUgb25seSB3YXkgdGhlIHVzZXIgY2FuIHNldCB0aGUgbm9ybSEKLQkJICovCi0KLQljYXNlIFZJRElPQ1NDSEFOOgotCXsKLQkJc3RydWN0IHZpZGVvX2NoYW5uZWwgKnZjaGFuID0gYXJnOwotCQlpbnQgcmVzOwotCi0JCWRwcmludGsoMywKLQkJCUtFUk5fREVCVUcKLQkJCSIlczogVklESU9DU0NIQU4gLSBjaGFubmVsPSVkLCBub3JtPSVkXG4iLAotCQkJWlJfREVWTkFNRSh6ciksIHZjaGFuLT5jaGFubmVsLCB2Y2hhbi0+bm9ybSk7Ci0KLQkJbXV0ZXhfbG9jaygmenItPnJlc291cmNlX2xvY2spOwotCQlpZiAoKHJlcyA9IHpvcmFuX3NldF9pbnB1dCh6ciwgdmNoYW4tPmNoYW5uZWwpKSkKLQkJCWdvdG8gc2NoYW5fdW5sb2NrX2FuZF9yZXR1cm47Ci0JCWlmICgocmVzID0gem9yYW5fc2V0X25vcm0oenIsIHZjaGFuLT5ub3JtKSkpCi0JCQlnb3RvIHNjaGFuX3VubG9ja19hbmRfcmV0dXJuOwotCi0JCS8qIE1ha2Ugc3VyZSB0aGUgY2hhbmdlcyBjb21lIGludG8gZWZmZWN0ICovCi0JCXJlcyA9IHdhaXRfZ3JhYl9wZW5kaW5nKHpyKTsKLQlzY2hhbl91bmxvY2tfYW5kX3JldHVybjoKLQkJbXV0ZXhfdW5sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7Ci0JCXJldHVybiByZXM7Ci0JfQotCQlicmVhazsKLQotCWNhc2UgVklESU9DR1BJQ1Q6Ci0JewotCQlzdHJ1Y3QgdmlkZW9fcGljdHVyZSAqdnBpY3QgPSBhcmc7Ci0KLQkJZHByaW50aygzLCBLRVJOX0RFQlVHICIlczogVklESU9DR1BJQ1RcbiIsIFpSX0RFVk5BTUUoenIpKTsKLQotCQltZW1zZXQodnBpY3QsIDAsIHNpemVvZihzdHJ1Y3QgdmlkZW9fcGljdHVyZSkpOwotCQltdXRleF9sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7Ci0JCXZwaWN0LT5odWUgPSB6ci0+aHVlOwotCQl2cGljdC0+YnJpZ2h0bmVzcyA9IHpyLT5icmlnaHRuZXNzOwotCQl2cGljdC0+Y29udHJhc3QgPSB6ci0+Y29udHJhc3Q7Ci0JCXZwaWN0LT5jb2xvdXIgPSB6ci0+c2F0dXJhdGlvbjsKLQkJaWYgKGZoLT5vdmVybGF5X3NldHRpbmdzLmZvcm1hdCkgewotCQkJdnBpY3QtPmRlcHRoID0gZmgtPm92ZXJsYXlfc2V0dGluZ3MuZm9ybWF0LT5kZXB0aDsKLQkJCXZwaWN0LT5wYWxldHRlID0gZmgtPm92ZXJsYXlfc2V0dGluZ3MuZm9ybWF0LT5wYWxldHRlOwotCQl9IGVsc2UgewotCQkJdnBpY3QtPmRlcHRoID0gMDsKLQkJfQotCQltdXRleF91bmxvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKLQotCQlyZXR1cm4gMDsKLQl9Ci0JCWJyZWFrOwotCi0JY2FzZSBWSURJT0NTUElDVDoKLQl7Ci0JCXN0cnVjdCB2aWRlb19waWN0dXJlICp2cGljdCA9IGFyZzsKLQkJaW50IGk7Ci0KLQkJZHByaW50aygzLAotCQkJS0VSTl9ERUJVRwotCQkJIiVzOiBWSURJT0NTUElDVCAtIGJyaT0lZCwgaHVlPSVkLCBjb2w9JWQsIGNvbj0lZCwgZGVwPSVkLCBwYWw9JWRcbiIsCi0JCQlaUl9ERVZOQU1FKHpyKSwgdnBpY3QtPmJyaWdodG5lc3MsIHZwaWN0LT5odWUsCi0JCQl2cGljdC0+Y29sb3VyLCB2cGljdC0+Y29udHJhc3QsIHZwaWN0LT5kZXB0aCwKLQkJCXZwaWN0LT5wYWxldHRlKTsKLQotCQlmb3IgKGkgPSAwOyBpIDwgTlVNX0ZPUk1BVFM7IGkrKykgewotCQkJY29uc3Qgc3RydWN0IHpvcmFuX2Zvcm1hdCAqZm10ID0gJnpvcmFuX2Zvcm1hdHNbaV07Ci0KLQkJCWlmIChmbXQtPnBhbGV0dGUgIT0gLTEgJiYKLQkJCSAgICBmbXQtPmZsYWdzICYgWk9SQU5fRk9STUFUX09WRVJMQVkgJiYKLQkJCSAgICBmbXQtPnBhbGV0dGUgPT0gdnBpY3QtPnBhbGV0dGUgJiYKLQkJCSAgICBmbXQtPmRlcHRoID09IHZwaWN0LT5kZXB0aCkKLQkJCQlicmVhazsKLQkJfQotCQlpZiAoaSA9PSBOVU1fRk9STUFUUykgewotCQkJZHByaW50aygxLAotCQkJCUtFUk5fRVJSCi0JCQkJIiVzOiBWSURJT0NTUElDVCAtIEludmFsaWQgcGFsZXR0ZSAlZFxuIiwKLQkJCQlaUl9ERVZOQU1FKHpyKSwgdnBpY3QtPnBhbGV0dGUpOwotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQotCQltdXRleF9sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7Ci0KLQkJZGVjb2Rlcl9jb21tYW5kKHpyLCBERUNPREVSX1NFVF9QSUNUVVJFLCB2cGljdCk7Ci0KLQkJenItPmh1ZSA9IHZwaWN0LT5odWU7Ci0JCXpyLT5jb250cmFzdCA9IHZwaWN0LT5jb250cmFzdDsKLQkJenItPnNhdHVyYXRpb24gPSB2cGljdC0+Y29sb3VyOwotCQl6ci0+YnJpZ2h0bmVzcyA9IHZwaWN0LT5icmlnaHRuZXNzOwotCi0JCWZoLT5vdmVybGF5X3NldHRpbmdzLmZvcm1hdCA9ICZ6b3Jhbl9mb3JtYXRzW2ldOwotCi0JCW11dGV4X3VubG9jaygmenItPnJlc291cmNlX2xvY2spOwotCi0JCXJldHVybiAwOwotCX0KLQkJYnJlYWs7Ci0KLQljYXNlIFZJRElPQ0NBUFRVUkU6Ci0JewotCQlpbnQgKm9uID0gYXJnLCByZXM7Ci0KLQkJZHByaW50aygzLCBLRVJOX0RFQlVHICIlczogVklESU9DQ0FQVFVSRSAtIG9uPSVkXG4iLAotCQkJWlJfREVWTkFNRSh6ciksICpvbik7Ci0KLQkJbXV0ZXhfbG9jaygmenItPnJlc291cmNlX2xvY2spOwotCQlyZXMgPSBzZXR1cF9vdmVybGF5KGZpbGUsICpvbik7Ci0JCW11dGV4X3VubG9jaygmenItPnJlc291cmNlX2xvY2spOwotCi0JCXJldHVybiByZXM7Ci0JfQotCQlicmVhazsKLQotCWNhc2UgVklESU9DR1dJTjoKLQl7Ci0JCXN0cnVjdCB2aWRlb193aW5kb3cgKnZ3aW4gPSBhcmc7Ci0KLQkJZHByaW50aygzLCBLRVJOX0RFQlVHICIlczogVklESU9DR1dJTlxuIiwgWlJfREVWTkFNRSh6cikpOwotCi0JCW1lbXNldCh2d2luLCAwLCBzaXplb2Yoc3RydWN0IHZpZGVvX3dpbmRvdykpOwotCQltdXRleF9sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7Ci0JCXZ3aW4tPnggPSBmaC0+b3ZlcmxheV9zZXR0aW5ncy54OwotCQl2d2luLT55ID0gZmgtPm92ZXJsYXlfc2V0dGluZ3MueTsKLQkJdndpbi0+d2lkdGggPSBmaC0+b3ZlcmxheV9zZXR0aW5ncy53aWR0aDsKLQkJdndpbi0+aGVpZ2h0ID0gZmgtPm92ZXJsYXlfc2V0dGluZ3MuaGVpZ2h0OwotCQltdXRleF91bmxvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKLQkJdndpbi0+Y2xpcGNvdW50ID0gMDsKLQkJcmV0dXJuIDA7Ci0JfQotCQlicmVhazsKLQotCWNhc2UgVklESU9DU1dJTjoKLQl7Ci0JCXN0cnVjdCB2aWRlb193aW5kb3cgKnZ3aW4gPSBhcmc7Ci0JCWludCByZXM7Ci0KLQkJZHByaW50aygzLAotCQkJS0VSTl9ERUJVRwotCQkJIiVzOiBWSURJT0NTV0lOIC0geD0lZCwgeT0lZCwgdz0lZCwgaD0lZCwgY2xpcGNvdW50PSVkXG4iLAotCQkJWlJfREVWTkFNRSh6ciksIHZ3aW4tPngsIHZ3aW4tPnksIHZ3aW4tPndpZHRoLAotCQkJdndpbi0+aGVpZ2h0LCB2d2luLT5jbGlwY291bnQpOwotCi0JCW11dGV4X2xvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKLQkJcmVzID0KLQkJICAgIHNldHVwX3dpbmRvdyhmaWxlLCB2d2luLT54LCB2d2luLT55LCB2d2luLT53aWR0aCwKLQkJCQkgdndpbi0+aGVpZ2h0LCB2d2luLT5jbGlwcywKLQkJCQkgdndpbi0+Y2xpcGNvdW50LCBOVUxMKTsKLQkJbXV0ZXhfdW5sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7Ci0KLQkJcmV0dXJuIHJlczsKLQl9Ci0JCWJyZWFrOwotCi0JY2FzZSBWSURJT0NHRkJVRjoKLQl7Ci0JCXN0cnVjdCB2aWRlb19idWZmZXIgKnZidWYgPSBhcmc7Ci0KLQkJZHByaW50aygzLCBLRVJOX0RFQlVHICIlczogVklESU9DR0ZCVUZcbiIsIFpSX0RFVk5BTUUoenIpKTsKLQotCQltdXRleF9sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7Ci0JCSp2YnVmID0genItPmJ1ZmZlcjsKLQkJbXV0ZXhfdW5sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7Ci0JCXJldHVybiAwOwotCX0KLQkJYnJlYWs7Ci0KLQljYXNlIFZJRElPQ1NGQlVGOgotCXsKLQkJc3RydWN0IHZpZGVvX2J1ZmZlciAqdmJ1ZiA9IGFyZzsKLQkJaW50IGksIHJlcyA9IDA7Ci0KLQkJZHByaW50aygzLAotCQkJS0VSTl9ERUJVRwotCQkJIiVzOiBWSURJT0NTRkJVRiAtIGJhc2U9JXAsIHc9JWQsIGg9JWQsIGRlcHRoPSVkLCBicGw9JWRcbiIsCi0JCQlaUl9ERVZOQU1FKHpyKSwgdmJ1Zi0+YmFzZSwgdmJ1Zi0+d2lkdGgsCi0JCQl2YnVmLT5oZWlnaHQsIHZidWYtPmRlcHRoLCB2YnVmLT5ieXRlc3BlcmxpbmUpOwotCi0JCWZvciAoaSA9IDA7IGkgPCBOVU1fRk9STUFUUzsgaSsrKQotCQkJaWYgKHpvcmFuX2Zvcm1hdHNbaV0uZGVwdGggPT0gdmJ1Zi0+ZGVwdGgpCi0JCQkJYnJlYWs7Ci0JCWlmIChpID09IE5VTV9GT1JNQVRTKSB7Ci0JCQlkcHJpbnRrKDEsCi0JCQkJS0VSTl9FUlIKLQkJCQkiJXM6IFZJRElPQ1NGQlVGIC0gaW52YWxpZCBmYnVmIGRlcHRoICVkXG4iLAotCQkJCVpSX0RFVk5BTUUoenIpLCB2YnVmLT5kZXB0aCk7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCi0JCW11dGV4X2xvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKLQkJcmVzID0KLQkJICAgIHNldHVwX2ZidWZmZXIoZmlsZSwgdmJ1Zi0+YmFzZSwgJnpvcmFuX2Zvcm1hdHNbaV0sCi0JCQkJICB2YnVmLT53aWR0aCwgdmJ1Zi0+aGVpZ2h0LAotCQkJCSAgdmJ1Zi0+Ynl0ZXNwZXJsaW5lKTsKLQkJbXV0ZXhfdW5sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7Ci0KLQkJcmV0dXJuIHJlczsKLQl9Ci0JCWJyZWFrOwotCi0JY2FzZSBWSURJT0NTWU5DOgotCXsKLQkJaW50ICpmcmFtZSA9IGFyZywgcmVzOwotCi0JCWRwcmludGsoMywgS0VSTl9ERUJVRyAiJXM6IFZJRElPQ1NZTkMgLSBmcmFtZT0lZFxuIiwKLQkJCVpSX0RFVk5BTUUoenIpLCAqZnJhbWUpOwotCi0JCW11dGV4X2xvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKLQkJcmVzID0gdjRsX3N5bmMoZmlsZSwgKmZyYW1lKTsKLQkJbXV0ZXhfdW5sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7Ci0JCWlmICghcmVzKQotCQkJenItPnY0bF9zeW5jX3RhaWwrKzsKLQkJcmV0dXJuIHJlczsKLQl9Ci0JCWJyZWFrOwotCi0JY2FzZSBWSURJT0NNQ0FQVFVSRToKLQl7Ci0JCXN0cnVjdCB2aWRlb19tbWFwICp2bWFwID0gYXJnOwotCQlpbnQgcmVzOwotCi0JCWRwcmludGsoMywKLQkJCUtFUk5fREVCVUcKLQkJCSIlczogVklESU9DTUNBUFRVUkUgLSBmcmFtZT0lZCwgZ2VvbT0lZHglZCwgZm10PSVkXG4iLAotCQkJWlJfREVWTkFNRSh6ciksIHZtYXAtPmZyYW1lLCB2bWFwLT53aWR0aCwgdm1hcC0+aGVpZ2h0LAotCQkJdm1hcC0+Zm9ybWF0KTsKLQotCQltdXRleF9sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7Ci0JCXJlcyA9IHY0bF9ncmFiKGZpbGUsIHZtYXApOwotCQltdXRleF91bmxvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKLQkJcmV0dXJuIHJlczsKLQl9Ci0JCWJyZWFrOwotCi0JY2FzZSBWSURJT0NHTUJVRjoKLQl7Ci0JCXN0cnVjdCB2aWRlb19tYnVmICp2bWJ1ZiA9IGFyZzsKLQkJaW50IGksIHJlcyA9IDA7Ci0KLQkJZHByaW50aygzLCBLRVJOX0RFQlVHICIlczogVklESU9DR01CVUZcbiIsIFpSX0RFVk5BTUUoenIpKTsKLQotCQl2bWJ1Zi0+c2l6ZSA9Ci0JCSAgICBmaC0+djRsX2J1ZmZlcnMubnVtX2J1ZmZlcnMgKgotCQkgICAgZmgtPnY0bF9idWZmZXJzLmJ1ZmZlcl9zaXplOwotCQl2bWJ1Zi0+ZnJhbWVzID0gZmgtPnY0bF9idWZmZXJzLm51bV9idWZmZXJzOwotCQlmb3IgKGkgPSAwOyBpIDwgdm1idWYtPmZyYW1lczsgaSsrKSB7Ci0JCQl2bWJ1Zi0+b2Zmc2V0c1tpXSA9Ci0JCQkgICAgaSAqIGZoLT52NGxfYnVmZmVycy5idWZmZXJfc2l6ZTsKLQkJfQotCi0JCW11dGV4X2xvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKLQotCQlpZiAoZmgtPmpwZ19idWZmZXJzLmFsbG9jYXRlZCB8fCBmaC0+djRsX2J1ZmZlcnMuYWxsb2NhdGVkKSB7Ci0JCQlkcHJpbnRrKDEsCi0JCQkJS0VSTl9FUlIKLQkJCQkiJXM6IFZJRElPQ0dNQlVGIC0gYnVmZmVycyBhbHJlYWR5IGFsbG9jYXRlZFxuIiwKLQkJCQlaUl9ERVZOQU1FKHpyKSk7Ci0JCQlyZXMgPSAtRUlOVkFMOwotCQkJZ290byB2NGwxcmVxYnVmX3VubG9ja19hbmRfcmV0dXJuOwotCQl9Ci0KLQkJaWYgKHY0bF9mYnVmZmVyX2FsbG9jKGZpbGUpKSB7Ci0JCQlyZXMgPSAtRU5PTUVNOwotCQkJZ290byB2NGwxcmVxYnVmX3VubG9ja19hbmRfcmV0dXJuOwotCQl9Ci0KLQkJLyogVGhlIG5leHQgbW1hcCB3aWxsIG1hcCB0aGUgVjRMIGJ1ZmZlcnMgKi8KLQkJZmgtPm1hcF9tb2RlID0gWk9SQU5fTUFQX01PREVfUkFXOwotCXY0bDFyZXFidWZfdW5sb2NrX2FuZF9yZXR1cm46Ci0JCW11dGV4X3VubG9jaygmenItPnJlc291cmNlX2xvY2spOwotCi0JCXJldHVybiByZXM7Ci0JfQotCQlicmVhazsKLQotCWNhc2UgVklESU9DR1VOSVQ6Ci0JewotCQlzdHJ1Y3QgdmlkZW9fdW5pdCAqdnVuaXQgPSBhcmc7Ci0KLQkJZHByaW50aygzLCBLRVJOX0RFQlVHICIlczogVklESU9DR1VOSVRcbiIsIFpSX0RFVk5BTUUoenIpKTsKLQotCQl2dW5pdC0+dmlkZW8gPSB6ci0+dmlkZW9fZGV2LT5taW5vcjsKLQkJdnVuaXQtPnZiaSA9IFZJREVPX05PX1VOSVQ7Ci0JCXZ1bml0LT5yYWRpbyA9IFZJREVPX05PX1VOSVQ7Ci0JCXZ1bml0LT5hdWRpbyA9IFZJREVPX05PX1VOSVQ7Ci0JCXZ1bml0LT50ZWxldGV4dCA9IFZJREVPX05PX1VOSVQ7Ci0KLQkJcmV0dXJuIDA7Ci0JfQotCQlicmVhazsKLQotCQkvKgotCQkgKiBSSjogSW4gcHJpbmNpcGFsIHdlIGNvdWxkIHN1cHBvcnQgc3ViY2FwdHVyZXMgZm9yIFY0TCBncmFiYmluZy4KLQkJICogICAgIE5vdCBldmVuIHRoZSBmYW1vdXMgQlRUViBkcml2ZXIgaGFzIHRoZW0sIGhvd2V2ZXIuCi0JCSAqICAgICBJZiB0aGVyZSBzaG91bGQgYmUgYSBzdHJvbmcgZGVtYW5kLCBvbmUgY291bGQgY29uc2lkZXIKLQkJICogICAgIHRvIGltcGxlbWVudCB0aGVtLgotCQkgKi8KLQljYXNlIFZJRElPQ0dDQVBUVVJFOgotCXsKLQkJZHByaW50aygzLCBLRVJOX0VSUiAiJXM6IFZJRElPQ0dDQVBUVVJFIG5vdCBzdXBwb3J0ZWRcbiIsCi0JCQlaUl9ERVZOQU1FKHpyKSk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQkJYnJlYWs7Ci0KLQljYXNlIFZJRElPQ1NDQVBUVVJFOgotCXsKLQkJZHByaW50aygzLCBLRVJOX0VSUiAiJXM6IFZJRElPQ1NDQVBUVVJFIG5vdCBzdXBwb3J0ZWRcbiIsCi0JCQlaUl9ERVZOQU1FKHpyKSk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQkJYnJlYWs7Ci0KLQljYXNlIEJVWklPQ19HX1BBUkFNUzoKLQl7Ci0JCXN0cnVjdCB6b3Jhbl9wYXJhbXMgKmJwYXJhbXMgPSBhcmc7Ci0KLQkJZHByaW50aygzLCBLRVJOX0RFQlVHICIlczogQlVaSU9DX0dfUEFSQU1TXG4iLCBaUl9ERVZOQU1FKHpyKSk7Ci0KLQkJbWVtc2V0KGJwYXJhbXMsIDAsIHNpemVvZihzdHJ1Y3Qgem9yYW5fcGFyYW1zKSk7Ci0JCWJwYXJhbXMtPm1ham9yX3ZlcnNpb24gPSBNQUpPUl9WRVJTSU9OOwotCQlicGFyYW1zLT5taW5vcl92ZXJzaW9uID0gTUlOT1JfVkVSU0lPTjsKLQotCQltdXRleF9sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7Ci0KLQkJYnBhcmFtcy0+bm9ybSA9IHpyLT5ub3JtOwotCQlicGFyYW1zLT5pbnB1dCA9IHpyLT5pbnB1dDsKLQotCQlicGFyYW1zLT5kZWNpbWF0aW9uID0gZmgtPmpwZ19zZXR0aW5ncy5kZWNpbWF0aW9uOwotCQlicGFyYW1zLT5Ib3JEY20gPSBmaC0+anBnX3NldHRpbmdzLkhvckRjbTsKLQkJYnBhcmFtcy0+VmVyRGNtID0gZmgtPmpwZ19zZXR0aW5ncy5WZXJEY207Ci0JCWJwYXJhbXMtPlRtcERjbSA9IGZoLT5qcGdfc2V0dGluZ3MuVG1wRGNtOwotCQlicGFyYW1zLT5maWVsZF9wZXJfYnVmZiA9IGZoLT5qcGdfc2V0dGluZ3MuZmllbGRfcGVyX2J1ZmY7Ci0JCWJwYXJhbXMtPmltZ194ID0gZmgtPmpwZ19zZXR0aW5ncy5pbWdfeDsKLQkJYnBhcmFtcy0+aW1nX3kgPSBmaC0+anBnX3NldHRpbmdzLmltZ195OwotCQlicGFyYW1zLT5pbWdfd2lkdGggPSBmaC0+anBnX3NldHRpbmdzLmltZ193aWR0aDsKLQkJYnBhcmFtcy0+aW1nX2hlaWdodCA9IGZoLT5qcGdfc2V0dGluZ3MuaW1nX2hlaWdodDsKLQkJYnBhcmFtcy0+b2RkX2V2ZW4gPSBmaC0+anBnX3NldHRpbmdzLm9kZF9ldmVuOwotCi0JCWJwYXJhbXMtPnF1YWxpdHkgPSBmaC0+anBnX3NldHRpbmdzLmpwZ19jb21wLnF1YWxpdHk7Ci0JCWJwYXJhbXMtPkFQUG4gPSBmaC0+anBnX3NldHRpbmdzLmpwZ19jb21wLkFQUG47Ci0JCWJwYXJhbXMtPkFQUF9sZW4gPSBmaC0+anBnX3NldHRpbmdzLmpwZ19jb21wLkFQUF9sZW47Ci0JCW1lbWNweShicGFyYW1zLT5BUFBfZGF0YSwKLQkJICAgICAgIGZoLT5qcGdfc2V0dGluZ3MuanBnX2NvbXAuQVBQX2RhdGEsCi0JCSAgICAgICBzaXplb2YoYnBhcmFtcy0+QVBQX2RhdGEpKTsKLQkJYnBhcmFtcy0+Q09NX2xlbiA9IHpyLT5qcGdfc2V0dGluZ3MuanBnX2NvbXAuQ09NX2xlbjsKLQkJbWVtY3B5KGJwYXJhbXMtPkNPTV9kYXRhLAotCQkgICAgICAgZmgtPmpwZ19zZXR0aW5ncy5qcGdfY29tcC5DT01fZGF0YSwKLQkJICAgICAgIHNpemVvZihicGFyYW1zLT5DT01fZGF0YSkpOwotCQlicGFyYW1zLT5qcGVnX21hcmtlcnMgPQotCQkgICAgZmgtPmpwZ19zZXR0aW5ncy5qcGdfY29tcC5qcGVnX21hcmtlcnM7Ci0KLQkJbXV0ZXhfdW5sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7Ci0KLQkJYnBhcmFtcy0+VkZJRk9fRkIgPSAwOwotCi0JCXJldHVybiAwOwotCX0KLQkJYnJlYWs7Ci0KLQljYXNlIEJVWklPQ19TX1BBUkFNUzoKLQl7Ci0JCXN0cnVjdCB6b3Jhbl9wYXJhbXMgKmJwYXJhbXMgPSBhcmc7Ci0JCWludCByZXMgPSAwOwotCi0JCWRwcmludGsoMywgS0VSTl9ERUJVRyAiJXM6IEJVWklPQ19TX1BBUkFNU1xuIiwgWlJfREVWTkFNRSh6cikpOwotCi0JCXNldHRpbmdzLmRlY2ltYXRpb24gPSBicGFyYW1zLT5kZWNpbWF0aW9uOwotCQlzZXR0aW5ncy5Ib3JEY20gPSBicGFyYW1zLT5Ib3JEY207Ci0JCXNldHRpbmdzLlZlckRjbSA9IGJwYXJhbXMtPlZlckRjbTsKLQkJc2V0dGluZ3MuVG1wRGNtID0gYnBhcmFtcy0+VG1wRGNtOwotCQlzZXR0aW5ncy5maWVsZF9wZXJfYnVmZiA9IGJwYXJhbXMtPmZpZWxkX3Blcl9idWZmOwotCQlzZXR0aW5ncy5pbWdfeCA9IGJwYXJhbXMtPmltZ194OwotCQlzZXR0aW5ncy5pbWdfeSA9IGJwYXJhbXMtPmltZ195OwotCQlzZXR0aW5ncy5pbWdfd2lkdGggPSBicGFyYW1zLT5pbWdfd2lkdGg7Ci0JCXNldHRpbmdzLmltZ19oZWlnaHQgPSBicGFyYW1zLT5pbWdfaGVpZ2h0OwotCQlzZXR0aW5ncy5vZGRfZXZlbiA9IGJwYXJhbXMtPm9kZF9ldmVuOwotCi0JCXNldHRpbmdzLmpwZ19jb21wLnF1YWxpdHkgPSBicGFyYW1zLT5xdWFsaXR5OwotCQlzZXR0aW5ncy5qcGdfY29tcC5BUFBuID0gYnBhcmFtcy0+QVBQbjsKLQkJc2V0dGluZ3MuanBnX2NvbXAuQVBQX2xlbiA9IGJwYXJhbXMtPkFQUF9sZW47Ci0JCW1lbWNweShzZXR0aW5ncy5qcGdfY29tcC5BUFBfZGF0YSwgYnBhcmFtcy0+QVBQX2RhdGEsCi0JCSAgICAgICBzaXplb2YoYnBhcmFtcy0+QVBQX2RhdGEpKTsKLQkJc2V0dGluZ3MuanBnX2NvbXAuQ09NX2xlbiA9IGJwYXJhbXMtPkNPTV9sZW47Ci0JCW1lbWNweShzZXR0aW5ncy5qcGdfY29tcC5DT01fZGF0YSwgYnBhcmFtcy0+Q09NX2RhdGEsCi0JCSAgICAgICBzaXplb2YoYnBhcmFtcy0+Q09NX2RhdGEpKTsKLQkJc2V0dGluZ3MuanBnX2NvbXAuanBlZ19tYXJrZXJzID0gYnBhcmFtcy0+anBlZ19tYXJrZXJzOwotCi0JCW11dGV4X2xvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKLQotCQlpZiAoenItPmNvZGVjX21vZGUgIT0gQlVaX01PREVfSURMRSkgewotCQkJZHByaW50aygxLAotCQkJCUtFUk5fRVJSCi0JCQkJIiVzOiBCVVpJT0NfU19QQVJBTVMgY2FsbGVkLCBidXQgQnV6IGluIGNhcHR1cmUvcGxheWJhY2sgbW9kZVxuIiwKLQkJCQlaUl9ERVZOQU1FKHpyKSk7Ci0JCQlyZXMgPSAtRUlOVkFMOwotCQkJZ290byBzcGFyYW1zX3VubG9ja19hbmRfcmV0dXJuOwotCQl9Ci0KLQkJLyogQ2hlY2sgdGhlIHBhcmFtcyBmaXJzdCBiZWZvcmUgb3ZlcndyaXRpbmcgb3VyCi0JCSAqIG50ZXJuYWwgdmFsdWVzICovCi0JCWlmICh6b3Jhbl9jaGVja19qcGdfc2V0dGluZ3MoenIsICZzZXR0aW5ncykpIHsKLQkJCXJlcyA9IC1FSU5WQUw7Ci0JCQlnb3RvIHNwYXJhbXNfdW5sb2NrX2FuZF9yZXR1cm47Ci0JCX0KLQotCQlmaC0+anBnX3NldHRpbmdzID0gc2V0dGluZ3M7Ci0Jc3BhcmFtc191bmxvY2tfYW5kX3JldHVybjoKLQkJbXV0ZXhfdW5sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7Ci0KLQkJcmV0dXJuIHJlczsKLQl9Ci0JCWJyZWFrOwotCi0JY2FzZSBCVVpJT0NfUkVRQlVGUzoKLQl7Ci0JCXN0cnVjdCB6b3Jhbl9yZXF1ZXN0YnVmZmVycyAqYnJlcSA9IGFyZzsKLQkJaW50IHJlcyA9IDA7Ci0KLQkJZHByaW50aygzLAotCQkJS0VSTl9ERUJVRwotCQkJIiVzOiBCVVpJT0NfUkVRQlVGUyAtIGNvdW50PSVsdSwgc2l6ZT0lbHVcbiIsCi0JCQlaUl9ERVZOQU1FKHpyKSwgYnJlcS0+Y291bnQsIGJyZXEtPnNpemUpOwotCi0JCS8qIEVuZm9yY2UgcmVhc29uYWJsZSBsb3dlciBhbmQgdXBwZXIgbGltaXRzICovCi0JCWlmIChicmVxLT5jb3VudCA8IDQpCi0JCQlicmVxLT5jb3VudCA9IDQ7CS8qIENvdWxkIGJlIGNob29zZW4gc21hbGxlciAqLwotCQlpZiAoYnJlcS0+Y291bnQgPiBqcGdfbmJ1ZnMpCi0JCQlicmVxLT5jb3VudCA9IGpwZ19uYnVmczsKLQkJYnJlcS0+c2l6ZSA9IFBBR0VfQUxJR04oYnJlcS0+c2l6ZSk7Ci0JCWlmIChicmVxLT5zaXplIDwgODE5MikKLQkJCWJyZXEtPnNpemUgPSA4MTkyOwkvKiBBcmJpdHJhcnkgKi8KLQkJLyogYnJlcS0+c2l6ZSBpcyBsaW1pdGVkIGJ5IDEgcGFnZSBmb3IgdGhlIHN0YXRfY29tCi0JCSAqIHRhYmxlcyB0byBhIE1heGltdW0gb2YgMiBNQiAqLwotCQlpZiAoYnJlcS0+c2l6ZSA+IGpwZ19idWZzaXplKQotCQkJYnJlcS0+c2l6ZSA9IGpwZ19idWZzaXplOwotCQlpZiAoZmgtPmpwZ19idWZmZXJzLm5lZWRfY29udGlndW91cyAmJgotCQkgICAgYnJlcS0+c2l6ZSA+IE1BWF9LTUFMTE9DX01FTSkKLQkJCWJyZXEtPnNpemUgPSBNQVhfS01BTExPQ19NRU07Ci0KLQkJbXV0ZXhfbG9jaygmenItPnJlc291cmNlX2xvY2spOwotCi0JCWlmIChmaC0+anBnX2J1ZmZlcnMuYWxsb2NhdGVkIHx8IGZoLT52NGxfYnVmZmVycy5hbGxvY2F0ZWQpIHsKLQkJCWRwcmludGsoMSwKLQkJCQlLRVJOX0VSUgotCQkJCSIlczogQlVaSU9DX1JFUUJVRlMgLSBidWZmZXJzIGFsbHJlYWR5IGFsbG9jYXRlZFxuIiwKLQkJCQlaUl9ERVZOQU1FKHpyKSk7Ci0JCQlyZXMgPSAtRUJVU1k7Ci0JCQlnb3RvIGpwZ3JlcWJ1Zl91bmxvY2tfYW5kX3JldHVybjsKLQkJfQotCi0JCWZoLT5qcGdfYnVmZmVycy5udW1fYnVmZmVycyA9IGJyZXEtPmNvdW50OwotCQlmaC0+anBnX2J1ZmZlcnMuYnVmZmVyX3NpemUgPSBicmVxLT5zaXplOwotCi0JCWlmIChqcGdfZmJ1ZmZlcl9hbGxvYyhmaWxlKSkgewotCQkJcmVzID0gLUVOT01FTTsKLQkJCWdvdG8ganBncmVxYnVmX3VubG9ja19hbmRfcmV0dXJuOwotCQl9Ci0KLQkJLyogVGhlIG5leHQgbW1hcCB3aWxsIG1hcCB0aGUgTUpQRUcgYnVmZmVycyAtIGNvdWxkCi0JCSAqIGFsc28gYmUgKl9QTEFZLCBidXQgaXQgZG9lc24ndCBtYXR0ZXIgaGVyZSAqLwotCQlmaC0+bWFwX21vZGUgPSBaT1JBTl9NQVBfTU9ERV9KUEdfUkVDOwotCWpwZ3JlcWJ1Zl91bmxvY2tfYW5kX3JldHVybjoKLQkJbXV0ZXhfdW5sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7Ci0KLQkJcmV0dXJuIHJlczsKLQl9Ci0JCWJyZWFrOwotCi0JY2FzZSBCVVpJT0NfUUJVRl9DQVBUOgotCXsKLQkJaW50ICpmcmFtZSA9IGFyZywgcmVzOwotCi0JCWRwcmludGsoMywgS0VSTl9ERUJVRyAiJXM6IEJVWklPQ19RQlVGX0NBUFQgLSBmcmFtZT0lZFxuIiwKLQkJCVpSX0RFVk5BTUUoenIpLCAqZnJhbWUpOwotCi0JCW11dGV4X2xvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKLQkJcmVzID0ganBnX3FidWYoZmlsZSwgKmZyYW1lLCBCVVpfTU9ERV9NT1RJT05fQ09NUFJFU1MpOwotCQltdXRleF91bmxvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKLQotCQlyZXR1cm4gcmVzOwotCX0KLQkJYnJlYWs7Ci0KLQljYXNlIEJVWklPQ19RQlVGX1BMQVk6Ci0JewotCQlpbnQgKmZyYW1lID0gYXJnLCByZXM7Ci0KLQkJZHByaW50aygzLCBLRVJOX0RFQlVHICIlczogQlVaSU9DX1FCVUZfUExBWSAtIGZyYW1lPSVkXG4iLAotCQkJWlJfREVWTkFNRSh6ciksICpmcmFtZSk7Ci0KLQkJbXV0ZXhfbG9jaygmenItPnJlc291cmNlX2xvY2spOwotCQlyZXMgPSBqcGdfcWJ1ZihmaWxlLCAqZnJhbWUsIEJVWl9NT0RFX01PVElPTl9ERUNPTVBSRVNTKTsKLQkJbXV0ZXhfdW5sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7Ci0KLQkJcmV0dXJuIHJlczsKLQl9Ci0JCWJyZWFrOwotCi0JY2FzZSBCVVpJT0NfU1lOQzoKLQl7Ci0JCXN0cnVjdCB6b3Jhbl9zeW5jICpic3luYyA9IGFyZzsKLQkJaW50IHJlczsKLQotCQlkcHJpbnRrKDMsIEtFUk5fREVCVUcgIiVzOiBCVVpJT0NfU1lOQ1xuIiwgWlJfREVWTkFNRSh6cikpOwotCi0JCW11dGV4X2xvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKLQkJcmVzID0ganBnX3N5bmMoZmlsZSwgYnN5bmMpOwotCQltdXRleF91bmxvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKLQotCQlyZXR1cm4gcmVzOwotCX0KLQkJYnJlYWs7Ci0KLQljYXNlIEJVWklPQ19HX1NUQVRVUzoKLQl7Ci0JCXN0cnVjdCB6b3Jhbl9zdGF0dXMgKmJzdGF0ID0gYXJnOwotCQlpbnQgbm9ybSwgaW5wdXQsIHN0YXR1cywgcmVzID0gMDsKLQotCQlkcHJpbnRrKDMsIEtFUk5fREVCVUcgIiVzOiBCVVpJT0NfR19TVEFUVVNcbiIsIFpSX0RFVk5BTUUoenIpKTsKLQotCQlpZiAoenItPmNvZGVjX21vZGUgIT0gQlVaX01PREVfSURMRSkgewotCQkJZHByaW50aygxLAotCQkJCUtFUk5fRVJSCi0JCQkJIiVzOiBCVVpJT0NfR19TVEFUVVMgY2FsbGVkIGJ1dCBCdXogaW4gY2FwdHVyZS9wbGF5YmFjayBtb2RlXG4iLAotCQkJCVpSX0RFVk5BTUUoenIpKTsKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0KLQkJaW5wdXQgPSB6ci0+Y2FyZC5pbnB1dFtic3RhdC0+aW5wdXRdLm11eHNlbDsKLQkJbm9ybSA9IFZJREVPX01PREVfQVVUTzsKLQotCQltdXRleF9sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7Ci0KLQkJaWYgKHpyLT5jb2RlY19tb2RlICE9IEJVWl9NT0RFX0lETEUpIHsKLQkJCWRwcmludGsoMSwKLQkJCQlLRVJOX0VSUgotCQkJCSIlczogQlVaSU9DX0dfU1RBVFVTIGNhbGxlZCwgYnV0IEJ1eiBpbiBjYXB0dXJlL3BsYXliYWNrIG1vZGVcbiIsCi0JCQkJWlJfREVWTkFNRSh6cikpOwotCQkJcmVzID0gLUVJTlZBTDsKLQkJCWdvdG8gZ3N0YXRfdW5sb2NrX2FuZF9yZXR1cm47Ci0JCX0KLQotCQlkZWNvZGVyX2NvbW1hbmQoenIsIERFQ09ERVJfU0VUX0lOUFVULCAmaW5wdXQpOwotCQlkZWNvZGVyX2NvbW1hbmQoenIsIERFQ09ERVJfU0VUX05PUk0sICZub3JtKTsKLQotCQkvKiBzbGVlcCAxIHNlY29uZCAqLwotCQlzc2xlZXAoMSk7Ci0KLQkJLyogR2V0IHN0YXR1cyBvZiB2aWRlbyBkZWNvZGVyICovCi0JCWRlY29kZXJfY29tbWFuZCh6ciwgREVDT0RFUl9HRVRfU1RBVFVTLCAmc3RhdHVzKTsKLQotCQkvKiByZXN0b3JlIHByZXZpb3VzIGlucHV0IGFuZCBub3JtICovCi0JCWlucHV0ID0genItPmNhcmQuaW5wdXRbenItPmlucHV0XS5tdXhzZWw7Ci0JCWRlY29kZXJfY29tbWFuZCh6ciwgREVDT0RFUl9TRVRfSU5QVVQsICZpbnB1dCk7Ci0JCWRlY29kZXJfY29tbWFuZCh6ciwgREVDT0RFUl9TRVRfTk9STSwgJnpyLT5ub3JtKTsKLQlnc3RhdF91bmxvY2tfYW5kX3JldHVybjoKLQkJbXV0ZXhfdW5sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7Ci0KLQkJaWYgKCFyZXMpIHsKLQkJCWJzdGF0LT5zaWduYWwgPQotCQkJICAgIChzdGF0dXMgJiBERUNPREVSX1NUQVRVU19HT09EKSA/IDEgOiAwOwotCQkJaWYgKHN0YXR1cyAmIERFQ09ERVJfU1RBVFVTX05UU0MpCi0JCQkJYnN0YXQtPm5vcm0gPSBWSURFT19NT0RFX05UU0M7Ci0JCQllbHNlIGlmIChzdGF0dXMgJiBERUNPREVSX1NUQVRVU19TRUNBTSkKLQkJCQlic3RhdC0+bm9ybSA9IFZJREVPX01PREVfU0VDQU07Ci0JCQllbHNlCi0JCQkJYnN0YXQtPm5vcm0gPSBWSURFT19NT0RFX1BBTDsKLQotCQkJYnN0YXQtPmNvbG9yID0KLQkJCSAgICAoc3RhdHVzICYgREVDT0RFUl9TVEFUVVNfQ09MT1IpID8gMSA6IDA7Ci0JCX0KLQotCQlyZXR1cm4gcmVzOwotCX0KLQkJYnJlYWs7Ci0KLQkJLyogVGhlIG5ldyB2aWRlbzRsaW51eDIgY2FwdHVyZSBpbnRlcmZhY2UgLSBtdWNoIG5pY2VyIHRoYW4gdmlkZW80bGludXgxLCBzaW5jZQotCQkgKiBpdCBhbGxvd3MgZm9yIGludGVncmF0aW5nIHRoZSBKUEVHIGNhcHR1cmluZyBjYWxscyBpbnNpZGUgc3RhbmRhcmQgdjRsMgotCQkgKi8KLQotCWNhc2UgVklESU9DX1FVRVJZQ0FQOgotCXsKLQkJc3RydWN0IHY0bDJfY2FwYWJpbGl0eSAqY2FwID0gYXJnOwotCi0JCWRwcmludGsoMywgS0VSTl9ERUJVRyAiJXM6IFZJRElPQ19RVUVSWUNBUFxuIiwgWlJfREVWTkFNRSh6cikpOwotCi0JCW1lbXNldChjYXAsIDAsIHNpemVvZigqY2FwKSk7Ci0JCXN0cm5jcHkoY2FwLT5jYXJkLCBaUl9ERVZOQU1FKHpyKSwgc2l6ZW9mKGNhcC0+Y2FyZCktMSk7Ci0JCXN0cm5jcHkoY2FwLT5kcml2ZXIsICJ6b3JhbiIsIHNpemVvZihjYXAtPmRyaXZlciktMSk7Ci0JCXNucHJpbnRmKGNhcC0+YnVzX2luZm8sIHNpemVvZihjYXAtPmJ1c19pbmZvKSwgIlBDSTolcyIsCi0JCQkgcGNpX25hbWUoenItPnBjaV9kZXYpKTsKLQkJY2FwLT52ZXJzaW9uID0KLQkJICAgIEtFUk5FTF9WRVJTSU9OKE1BSk9SX1ZFUlNJT04sIE1JTk9SX1ZFUlNJT04sCi0JCQkJICAgUkVMRUFTRV9WRVJTSU9OKTsKLQkJY2FwLT5jYXBhYmlsaXRpZXMgPSBaT1JBTl9WNEwyX1ZJRF9GTEFHUzsKLQotCQlyZXR1cm4gMDsKLQl9Ci0JCWJyZWFrOwotCi0JY2FzZSBWSURJT0NfRU5VTV9GTVQ6Ci0JewotCQlzdHJ1Y3QgdjRsMl9mbXRkZXNjICpmbXQgPSBhcmc7Ci0JCWludCBpbmRleCA9IGZtdC0+aW5kZXgsIG51bSA9IC0xLCBpLCBmbGFnID0gMCwgdHlwZSA9Ci0JCSAgICBmbXQtPnR5cGU7Ci0KLQkJZHByaW50aygzLCBLRVJOX0RFQlVHICIlczogVklESU9DX0VOVU1fRk1UIC0gaW5kZXg9JWRcbiIsCi0JCQlaUl9ERVZOQU1FKHpyKSwgZm10LT5pbmRleCk7Ci0KLQkJc3dpdGNoIChmbXQtPnR5cGUpIHsKLQkJY2FzZSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU6Ci0JCQlmbGFnID0gWk9SQU5fRk9STUFUX0NBUFRVUkU7Ci0JCQlicmVhazsKLQkJY2FzZSBWNEwyX0JVRl9UWVBFX1ZJREVPX09VVFBVVDoKLQkJCWZsYWcgPSBaT1JBTl9GT1JNQVRfUExBWUJBQ0s7Ci0JCQlicmVhazsKLQkJY2FzZSBWNEwyX0JVRl9UWVBFX1ZJREVPX09WRVJMQVk6Ci0JCQlmbGFnID0gWk9SQU5fRk9STUFUX09WRVJMQVk7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCWRwcmludGsoMSwKLQkJCQlLRVJOX0VSUgotCQkJCSIlczogVklESU9DX0VOVU1fRk1UIC0gdW5rbm93biB0eXBlICVkXG4iLAotCQkJCVpSX0RFVk5BTUUoenIpLCBmbXQtPnR5cGUpOwotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQotCQlmb3IgKGkgPSAwOyBpIDwgTlVNX0ZPUk1BVFM7IGkrKykgewotCQkJaWYgKHpvcmFuX2Zvcm1hdHNbaV0uZmxhZ3MgJiBmbGFnKQotCQkJCW51bSsrOwotCQkJaWYgKG51bSA9PSBmbXQtPmluZGV4KQotCQkJCWJyZWFrOwotCQl9Ci0JCWlmIChmbXQtPmluZGV4IDwgMCAvKiBsYXRlLCBidXQgbm90IHRvbyBsYXRlICovICB8fAotCQkgICAgaSA9PSBOVU1fRk9STUFUUykKLQkJCXJldHVybiAtRUlOVkFMOwotCi0JCW1lbXNldChmbXQsIDAsIHNpemVvZigqZm10KSk7Ci0JCWZtdC0+aW5kZXggPSBpbmRleDsKLQkJZm10LT50eXBlID0gdHlwZTsKLQkJc3RybmNweShmbXQtPmRlc2NyaXB0aW9uLCB6b3Jhbl9mb3JtYXRzW2ldLm5hbWUsIHNpemVvZihmbXQtPmRlc2NyaXB0aW9uKS0xKTsKLQkJZm10LT5waXhlbGZvcm1hdCA9IHpvcmFuX2Zvcm1hdHNbaV0uZm91cmNjOwotCQlpZiAoem9yYW5fZm9ybWF0c1tpXS5mbGFncyAmIFpPUkFOX0ZPUk1BVF9DT01QUkVTU0VEKQotCQkJZm10LT5mbGFncyB8PSBWNEwyX0ZNVF9GTEFHX0NPTVBSRVNTRUQ7Ci0KLQkJcmV0dXJuIDA7Ci0JfQotCQlicmVhazsKLQotCWNhc2UgVklESU9DX0dfRk1UOgotCXsKLQkJc3RydWN0IHY0bDJfZm9ybWF0ICpmbXQgPSBhcmc7Ci0JCWludCB0eXBlID0gZm10LT50eXBlOwotCi0JCWRwcmludGsoNSwgS0VSTl9ERUJVRyAiJXM6IFZJRElPQ19HX0ZNVFxuIiwgWlJfREVWTkFNRSh6cikpOwotCi0JCW1lbXNldChmbXQsIDAsIHNpemVvZigqZm10KSk7Ci0JCWZtdC0+dHlwZSA9IHR5cGU7Ci0KLQkJc3dpdGNoIChmbXQtPnR5cGUpIHsKLQkJY2FzZSBWNEwyX0JVRl9UWVBFX1ZJREVPX09WRVJMQVk6Ci0KLQkJCW11dGV4X2xvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKLQotCQkJZm10LT5mbXQud2luLncubGVmdCA9IGZoLT5vdmVybGF5X3NldHRpbmdzLng7Ci0JCQlmbXQtPmZtdC53aW4udy50b3AgPSBmaC0+b3ZlcmxheV9zZXR0aW5ncy55OwotCQkJZm10LT5mbXQud2luLncud2lkdGggPSBmaC0+b3ZlcmxheV9zZXR0aW5ncy53aWR0aDsKLQkJCWZtdC0+Zm10Lndpbi53LmhlaWdodCA9Ci0JCQkgICAgZmgtPm92ZXJsYXlfc2V0dGluZ3MuaGVpZ2h0OwotCQkJaWYgKGZoLT5vdmVybGF5X3NldHRpbmdzLndpZHRoICogMiA+Ci0JCQkgICAgQlVaX01BWF9IRUlHSFQpCi0JCQkJZm10LT5mbXQud2luLmZpZWxkID0gVjRMMl9GSUVMRF9JTlRFUkxBQ0VEOwotCQkJZWxzZQotCQkJCWZtdC0+Zm10Lndpbi5maWVsZCA9IFY0TDJfRklFTERfVE9QOwotCi0JCQltdXRleF91bmxvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKLQotCQkJYnJlYWs7Ci0KLQkJY2FzZSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU6Ci0JCWNhc2UgVjRMMl9CVUZfVFlQRV9WSURFT19PVVRQVVQ6Ci0KLQkJCW11dGV4X2xvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKLQotCQkJaWYgKGZtdC0+dHlwZSA9PSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUgJiYKLQkJCSAgICBmaC0+bWFwX21vZGUgPT0gWk9SQU5fTUFQX01PREVfUkFXKSB7Ci0KLQkJCQlmbXQtPmZtdC5waXgud2lkdGggPQotCQkJCSAgICBmaC0+djRsX3NldHRpbmdzLndpZHRoOwotCQkJCWZtdC0+Zm10LnBpeC5oZWlnaHQgPQotCQkJCSAgICBmaC0+djRsX3NldHRpbmdzLmhlaWdodDsKLQkJCQlmbXQtPmZtdC5waXguc2l6ZWltYWdlID0KLQkJCQkgICAgZmgtPnY0bF9zZXR0aW5ncy5ieXRlc3BlcmxpbmUgKgotCQkJCSAgICBmaC0+djRsX3NldHRpbmdzLmhlaWdodDsKLQkJCQlmbXQtPmZtdC5waXgucGl4ZWxmb3JtYXQgPQotCQkJCSAgICBmaC0+djRsX3NldHRpbmdzLmZvcm1hdC0+Zm91cmNjOwotCQkJCWZtdC0+Zm10LnBpeC5jb2xvcnNwYWNlID0KLQkJCQkgICAgZmgtPnY0bF9zZXR0aW5ncy5mb3JtYXQtPmNvbG9yc3BhY2U7Ci0JCQkJZm10LT5mbXQucGl4LmJ5dGVzcGVybGluZSA9Ci0JCQkJICAgIGZoLT52NGxfc2V0dGluZ3MuYnl0ZXNwZXJsaW5lOwotCQkJCWlmIChCVVpfTUFYX0hFSUdIVCA8Ci0JCQkJICAgIChmaC0+djRsX3NldHRpbmdzLmhlaWdodCAqIDIpKQotCQkJCQlmbXQtPmZtdC5waXguZmllbGQgPQotCQkJCQkgICAgVjRMMl9GSUVMRF9JTlRFUkxBQ0VEOwotCQkJCWVsc2UKLQkJCQkJZm10LT5mbXQucGl4LmZpZWxkID0KLQkJCQkJICAgIFY0TDJfRklFTERfVE9QOwotCi0JCQl9IGVsc2UgewotCi0JCQkJZm10LT5mbXQucGl4LndpZHRoID0KLQkJCQkgICAgZmgtPmpwZ19zZXR0aW5ncy5pbWdfd2lkdGggLwotCQkJCSAgICBmaC0+anBnX3NldHRpbmdzLkhvckRjbTsKLQkJCQlmbXQtPmZtdC5waXguaGVpZ2h0ID0KLQkJCQkgICAgZmgtPmpwZ19zZXR0aW5ncy5pbWdfaGVpZ2h0IC8KLQkJCQkgICAgKGZoLT5qcGdfc2V0dGluZ3MuVmVyRGNtICoKLQkJCQkgICAgIGZoLT5qcGdfc2V0dGluZ3MuVG1wRGNtKTsKLQkJCQlmbXQtPmZtdC5waXguc2l6ZWltYWdlID0KLQkJCQkgICAgem9yYW5fdjRsMl9jYWxjX2J1ZnNpemUoJmZoLT4KLQkJCQkJCQkgICAganBnX3NldHRpbmdzKTsKLQkJCQlmbXQtPmZtdC5waXgucGl4ZWxmb3JtYXQgPQotCQkJCSAgICBWNEwyX1BJWF9GTVRfTUpQRUc7Ci0JCQkJaWYgKGZoLT5qcGdfc2V0dGluZ3MuVG1wRGNtID09IDEpCi0JCQkJCWZtdC0+Zm10LnBpeC5maWVsZCA9Ci0JCQkJCSAgICAoZmgtPmpwZ19zZXR0aW5ncy4KLQkJCQkJICAgICBvZGRfZXZlbiA/IFY0TDJfRklFTERfU0VRX0JUIDoKLQkJCQkJICAgICBWNEwyX0ZJRUxEX1NFUV9CVCk7Ci0JCQkJZWxzZQotCQkJCQlmbXQtPmZtdC5waXguZmllbGQgPQotCQkJCQkgICAgKGZoLT5qcGdfc2V0dGluZ3MuCi0JCQkJCSAgICAgb2RkX2V2ZW4gPyBWNEwyX0ZJRUxEX1RPUCA6Ci0JCQkJCSAgICAgVjRMMl9GSUVMRF9CT1RUT00pOwotCi0JCQkJZm10LT5mbXQucGl4LmJ5dGVzcGVybGluZSA9IDA7Ci0JCQkJZm10LT5mbXQucGl4LmNvbG9yc3BhY2UgPQotCQkJCSAgICBWNEwyX0NPTE9SU1BBQ0VfU01QVEUxNzBNOwotCQkJfQotCi0JCQltdXRleF91bmxvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKLQotCQkJYnJlYWs7Ci0KLQkJZGVmYXVsdDoKLQkJCWRwcmludGsoMSwKLQkJCQlLRVJOX0VSUgotCQkJCSIlczogVklESU9DX0dfRk1UIC0gdW5zdXBwb3J0ZWQgdHlwZSAlZFxuIiwKLQkJCQlaUl9ERVZOQU1FKHpyKSwgZm10LT50eXBlKTsKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0JCXJldHVybiAwOwotCX0KLQkJYnJlYWs7Ci0KLQljYXNlIFZJRElPQ19TX0ZNVDoKLQl7Ci0JCXN0cnVjdCB2NGwyX2Zvcm1hdCAqZm10ID0gYXJnOwotCQlpbnQgaSwgcmVzID0gMDsKLQkJX19sZTMyIHByaW50Zm9ybWF0OwotCi0JCWRwcmludGsoMywgS0VSTl9ERUJVRyAiJXM6IFZJRElPQ19TX0ZNVCAtIHR5cGU9JWQsICIsCi0JCQlaUl9ERVZOQU1FKHpyKSwgZm10LT50eXBlKTsKLQotCQlzd2l0Y2ggKGZtdC0+dHlwZSkgewotCQljYXNlIFY0TDJfQlVGX1RZUEVfVklERU9fT1ZFUkxBWToKLQotCQkJZHByaW50aygzLCAieD0lZCwgeT0lZCwgdz0lZCwgaD0lZCwgY250PSVkLCBtYXA9MHglcFxuIiwKLQkJCQlmbXQtPmZtdC53aW4udy5sZWZ0LCBmbXQtPmZtdC53aW4udy50b3AsCi0JCQkJZm10LT5mbXQud2luLncud2lkdGgsCi0JCQkJZm10LT5mbXQud2luLncuaGVpZ2h0LAotCQkJCWZtdC0+Zm10Lndpbi5jbGlwY291bnQsCi0JCQkJZm10LT5mbXQud2luLmJpdG1hcCk7Ci0JCQltdXRleF9sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7Ci0JCQlyZXMgPQotCQkJICAgIHNldHVwX3dpbmRvdyhmaWxlLCBmbXQtPmZtdC53aW4udy5sZWZ0LAotCQkJCQkgZm10LT5mbXQud2luLncudG9wLAotCQkJCQkgZm10LT5mbXQud2luLncud2lkdGgsCi0JCQkJCSBmbXQtPmZtdC53aW4udy5oZWlnaHQsCi0JCQkJCSAoc3RydWN0IHZpZGVvX2NsaXAgX191c2VyICopCi0JCQkJCSAgIGZtdC0+Zm10Lndpbi5jbGlwcywKLQkJCQkJIGZtdC0+Zm10Lndpbi5jbGlwY291bnQsCi0JCQkJCSBmbXQtPmZtdC53aW4uYml0bWFwKTsKLQkJCW11dGV4X3VubG9jaygmenItPnJlc291cmNlX2xvY2spOwotCQkJcmV0dXJuIHJlczsKLQkJCWJyZWFrOwotCi0JCWNhc2UgVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOgotCQljYXNlIFY0TDJfQlVGX1RZUEVfVklERU9fT1VUUFVUOgotCi0JCQlwcmludGZvcm1hdCA9Ci0JCQkgICAgX19jcHVfdG9fbGUzMihmbXQtPmZtdC5waXgucGl4ZWxmb3JtYXQpOwotCQkJZHByaW50aygzLCAic2l6ZT0lZHglZCwgZm10PTB4JXggKCU0LjRzKVxuIiwKLQkJCQlmbXQtPmZtdC5waXgud2lkdGgsIGZtdC0+Zm10LnBpeC5oZWlnaHQsCi0JCQkJZm10LT5mbXQucGl4LnBpeGVsZm9ybWF0LAotCQkJCShjaGFyICopICZwcmludGZvcm1hdCk7Ci0KLQkJCS8qIHdlIGNhbiBiZSByZXF1ZXN0ZWQgdG8gZG8gSlBFRy9yYXcgcGxheWJhY2svY2FwdHVyZSAqLwotCQkJaWYgKCEKLQkJCSAgICAoZm10LT50eXBlID09IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSB8fAotCQkJICAgICAoZm10LT50eXBlID09IFY0TDJfQlVGX1RZUEVfVklERU9fT1VUUFVUICYmCi0JCQkgICAgICBmbXQtPmZtdC5waXgucGl4ZWxmb3JtYXQgPT0KLQkJCSAgICAgIFY0TDJfUElYX0ZNVF9NSlBFRykpKSB7Ci0JCQkJZHByaW50aygxLAotCQkJCQlLRVJOX0VSUgotCQkJCQkiJXM6IFZJRElPQ19TX0ZNVCAtIHVua25vd24gdHlwZSAlZC8weCV4KCU0LjRzKSBjb21iaW5hdGlvblxuIiwKLQkJCQkJWlJfREVWTkFNRSh6ciksIGZtdC0+dHlwZSwKLQkJCQkJZm10LT5mbXQucGl4LnBpeGVsZm9ybWF0LAotCQkJCQkoY2hhciAqKSAmcHJpbnRmb3JtYXQpOwotCQkJCXJldHVybiAtRUlOVkFMOwotCQkJfQotCi0JCQlpZiAoZm10LT5mbXQucGl4LnBpeGVsZm9ybWF0ID09IFY0TDJfUElYX0ZNVF9NSlBFRykgewotCQkJCW11dGV4X2xvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKLQotCQkJCXNldHRpbmdzID0gZmgtPmpwZ19zZXR0aW5nczsKLQotCQkJCWlmIChmaC0+djRsX2J1ZmZlcnMuYWxsb2NhdGVkIHx8Ci0JCQkJICAgIGZoLT5qcGdfYnVmZmVycy5hbGxvY2F0ZWQpIHsKLQkJCQkJZHByaW50aygxLAotCQkJCQkJS0VSTl9FUlIKLQkJCQkJCSIlczogVklESU9DX1NfRk1UIC0gY2Fubm90IGNoYW5nZSBjYXB0dXJlIG1vZGVcbiIsCi0JCQkJCQlaUl9ERVZOQU1FKHpyKSk7Ci0JCQkJCXJlcyA9IC1FQlVTWTsKLQkJCQkJZ290byBzZm10anBnX3VubG9ja19hbmRfcmV0dXJuOwotCQkJCX0KLQotCQkJCS8qIHdlIGFjdHVhbGx5IG5lZWQgdG8gc2V0ICdyZWFsJyBwYXJhbWV0ZXJzIG5vdyAqLwotCQkJCWlmICgoZm10LT5mbXQucGl4LmhlaWdodCAqIDIpID4KLQkJCQkgICAgQlVaX01BWF9IRUlHSFQpCi0JCQkJCXNldHRpbmdzLlRtcERjbSA9IDE7Ci0JCQkJZWxzZQotCQkJCQlzZXR0aW5ncy5UbXBEY20gPSAyOwotCQkJCXNldHRpbmdzLmRlY2ltYXRpb24gPSAwOwotCQkJCWlmIChmbXQtPmZtdC5waXguaGVpZ2h0IDw9Ci0JCQkJICAgIGZoLT5qcGdfc2V0dGluZ3MuaW1nX2hlaWdodCAvIDIpCi0JCQkJCXNldHRpbmdzLlZlckRjbSA9IDI7Ci0JCQkJZWxzZQotCQkJCQlzZXR0aW5ncy5WZXJEY20gPSAxOwotCQkJCWlmIChmbXQtPmZtdC5waXgud2lkdGggPD0KLQkJCQkgICAgZmgtPmpwZ19zZXR0aW5ncy5pbWdfd2lkdGggLyA0KQotCQkJCQlzZXR0aW5ncy5Ib3JEY20gPSA0OwotCQkJCWVsc2UgaWYgKGZtdC0+Zm10LnBpeC53aWR0aCA8PQotCQkJCQkgZmgtPmpwZ19zZXR0aW5ncy5pbWdfd2lkdGggLyAyKQotCQkJCQlzZXR0aW5ncy5Ib3JEY20gPSAyOwotCQkJCWVsc2UKLQkJCQkJc2V0dGluZ3MuSG9yRGNtID0gMTsKLQkJCQlpZiAoc2V0dGluZ3MuVG1wRGNtID09IDEpCi0JCQkJCXNldHRpbmdzLmZpZWxkX3Blcl9idWZmID0gMjsKLQkJCQllbHNlCi0JCQkJCXNldHRpbmdzLmZpZWxkX3Blcl9idWZmID0gMTsKLQotCQkJCS8qIGNoZWNrICovCi0JCQkJaWYgKChyZXMgPQotCQkJCSAgICAgem9yYW5fY2hlY2tfanBnX3NldHRpbmdzKHpyLAotCQkJCQkJCSAgICAgICZzZXR0aW5ncykpKQotCQkJCQlnb3RvIHNmbXRqcGdfdW5sb2NrX2FuZF9yZXR1cm47Ci0KLQkJCQkvKiBpdCdzIG9rLCBzbyBzZXQgdGhlbSAqLwotCQkJCWZoLT5qcGdfc2V0dGluZ3MgPSBzZXR0aW5nczsKLQotCQkJCS8qIHRlbGwgdGhlIHVzZXIgd2hhdCB3ZSBhY3R1YWxseSBkaWQgKi8KLQkJCQlmbXQtPmZtdC5waXgud2lkdGggPQotCQkJCSAgICBzZXR0aW5ncy5pbWdfd2lkdGggLyBzZXR0aW5ncy5Ib3JEY207Ci0JCQkJZm10LT5mbXQucGl4LmhlaWdodCA9Ci0JCQkJICAgIHNldHRpbmdzLmltZ19oZWlnaHQgKiAyIC8KLQkJCQkgICAgKHNldHRpbmdzLlRtcERjbSAqIHNldHRpbmdzLlZlckRjbSk7Ci0JCQkJaWYgKHNldHRpbmdzLlRtcERjbSA9PSAxKQotCQkJCQlmbXQtPmZtdC5waXguZmllbGQgPQotCQkJCQkgICAgKGZoLT5qcGdfc2V0dGluZ3MuCi0JCQkJCSAgICAgb2RkX2V2ZW4gPyBWNEwyX0ZJRUxEX1NFUV9UQiA6Ci0JCQkJCSAgICAgVjRMMl9GSUVMRF9TRVFfQlQpOwotCQkJCWVsc2UKLQkJCQkJZm10LT5mbXQucGl4LmZpZWxkID0KLQkJCQkJICAgIChmaC0+anBnX3NldHRpbmdzLgotCQkJCQkgICAgIG9kZF9ldmVuID8gVjRMMl9GSUVMRF9UT1AgOgotCQkJCQkgICAgIFY0TDJfRklFTERfQk9UVE9NKTsKLQkJCQlmaC0+anBnX2J1ZmZlcnMuYnVmZmVyX3NpemUgPQotCQkJCSAgICB6b3Jhbl92NGwyX2NhbGNfYnVmc2l6ZSgmZmgtPgotCQkJCQkJCSAgICBqcGdfc2V0dGluZ3MpOwotCQkJCWZtdC0+Zm10LnBpeC5ieXRlc3BlcmxpbmUgPSAwOwotCQkJCWZtdC0+Zm10LnBpeC5zaXplaW1hZ2UgPQotCQkJCSAgICBmaC0+anBnX2J1ZmZlcnMuYnVmZmVyX3NpemU7Ci0KLQkJCQkvKiB3ZSBoZXJlYnkgYWJ1c2UgdGhpcyB2YXJpYWJsZSB0byBzaG93IHRoYXQKLQkJCQkgKiB3ZSdyZSBnb25uYSBkbyBtanBlZyBjYXB0dXJlICovCi0JCQkJZmgtPm1hcF9tb2RlID0KLQkJCQkgICAgKGZtdC0+dHlwZSA9PQotCQkJCSAgICAgVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFKSA/Ci0JCQkJICAgIFpPUkFOX01BUF9NT0RFX0pQR19SRUMgOgotCQkJCSAgICBaT1JBTl9NQVBfTU9ERV9KUEdfUExBWTsKLQkJCXNmbXRqcGdfdW5sb2NrX2FuZF9yZXR1cm46Ci0JCQkJbXV0ZXhfdW5sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7Ci0JCQl9IGVsc2UgewotCQkJCWZvciAoaSA9IDA7IGkgPCBOVU1fRk9STUFUUzsgaSsrKQotCQkJCQlpZiAoZm10LT5mbXQucGl4LnBpeGVsZm9ybWF0ID09Ci0JCQkJCSAgICB6b3Jhbl9mb3JtYXRzW2ldLmZvdXJjYykKLQkJCQkJCWJyZWFrOwotCQkJCWlmIChpID09IE5VTV9GT1JNQVRTKSB7Ci0JCQkJCWRwcmludGsoMSwKLQkJCQkJCUtFUk5fRVJSCi0JCQkJCQkiJXM6IFZJRElPQ19TX0ZNVCAtIHVua25vd24vdW5zdXBwb3J0ZWQgZm9ybWF0IDB4JXggKCU0LjRzKVxuIiwKLQkJCQkJCVpSX0RFVk5BTUUoenIpLAotCQkJCQkJZm10LT5mbXQucGl4LnBpeGVsZm9ybWF0LAotCQkJCQkJKGNoYXIgKikgJnByaW50Zm9ybWF0KTsKLQkJCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCQkJfQotCQkJCW11dGV4X2xvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKLQkJCQlpZiAoZmgtPmpwZ19idWZmZXJzLmFsbG9jYXRlZCB8fAotCQkJCSAgICAoZmgtPnY0bF9idWZmZXJzLmFsbG9jYXRlZCAmJgotCQkJCSAgICAgZmgtPnY0bF9idWZmZXJzLmFjdGl2ZSAhPQotCQkJCSAgICAgWk9SQU5fRlJFRSkpIHsKLQkJCQkJZHByaW50aygxLAotCQkJCQkJS0VSTl9FUlIKLQkJCQkJCSIlczogVklESU9DX1NfRk1UIC0gY2Fubm90IGNoYW5nZSBjYXB0dXJlIG1vZGVcbiIsCi0JCQkJCQlaUl9ERVZOQU1FKHpyKSk7Ci0JCQkJCXJlcyA9IC1FQlVTWTsKLQkJCQkJZ290byBzZm10djRsX3VubG9ja19hbmRfcmV0dXJuOwotCQkJCX0KLQkJCQlpZiAoZm10LT5mbXQucGl4LmhlaWdodCA+IEJVWl9NQVhfSEVJR0hUKQotCQkJCQlmbXQtPmZtdC5waXguaGVpZ2h0ID0KLQkJCQkJICAgIEJVWl9NQVhfSEVJR0hUOwotCQkJCWlmIChmbXQtPmZtdC5waXgud2lkdGggPiBCVVpfTUFYX1dJRFRIKQotCQkJCQlmbXQtPmZtdC5waXgud2lkdGggPSBCVVpfTUFYX1dJRFRIOwotCi0JCQkJaWYgKChyZXMgPQotCQkJCSAgICAgem9yYW5fdjRsX3NldF9mb3JtYXQoZmlsZSwKLQkJCQkJCQkgIGZtdC0+Zm10LnBpeC4KLQkJCQkJCQkgIHdpZHRoLAotCQkJCQkJCSAgZm10LT5mbXQucGl4LgotCQkJCQkJCSAgaGVpZ2h0LAotCQkJCQkJCSAgJnpvcmFuX2Zvcm1hdHMKLQkJCQkJCQkgIFtpXSkpKQotCQkJCQlnb3RvIHNmbXR2NGxfdW5sb2NrX2FuZF9yZXR1cm47Ci0KLQkJCQkvKiB0ZWxsIHRoZSB1c2VyIHRoZQotCQkJCSAqIHJlc3VsdHMvbWlzc2luZyBzdHVmZiAqLwotCQkJCWZtdC0+Zm10LnBpeC5ieXRlc3BlcmxpbmUgPQotCQkJCQlmaC0+djRsX3NldHRpbmdzLmJ5dGVzcGVybGluZTsKLQkJCQlmbXQtPmZtdC5waXguc2l6ZWltYWdlID0KLQkJCQkJZmgtPnY0bF9zZXR0aW5ncy5oZWlnaHQgKgotCQkJCQlmaC0+djRsX3NldHRpbmdzLmJ5dGVzcGVybGluZTsKLQkJCQlpZiAoQlVaX01BWF9IRUlHSFQgPAotCQkJCSAgICAoZmgtPnY0bF9zZXR0aW5ncy5oZWlnaHQgKiAyKSkKLQkJCQkJZm10LT5mbXQucGl4LmZpZWxkID0KLQkJCQkJICAgIFY0TDJfRklFTERfSU5URVJMQUNFRDsKLQkJCQllbHNlCi0JCQkJCWZtdC0+Zm10LnBpeC5maWVsZCA9Ci0JCQkJCSAgICBWNEwyX0ZJRUxEX1RPUDsKLQotCQkJCWZoLT5tYXBfbW9kZSA9IFpPUkFOX01BUF9NT0RFX1JBVzsKLQkJCXNmbXR2NGxfdW5sb2NrX2FuZF9yZXR1cm46Ci0JCQkJbXV0ZXhfdW5sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7Ci0JCQl9Ci0KLQkJCWJyZWFrOwotCi0JCWRlZmF1bHQ6Ci0JCQlkcHJpbnRrKDMsICJ1bnN1cHBvcnRlZFxuIik7Ci0JCQlkcHJpbnRrKDEsCi0JCQkJS0VSTl9FUlIKLQkJCQkiJXM6IFZJRElPQ19TX0ZNVCAtIHVuc3VwcG9ydGVkIHR5cGUgJWRcbiIsCi0JCQkJWlJfREVWTkFNRSh6ciksIGZtdC0+dHlwZSk7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCi0JCXJldHVybiByZXM7Ci0JfQotCQlicmVhazsKLQotCWNhc2UgVklESU9DX0dfRkJVRjoKLQl7Ci0JCXN0cnVjdCB2NGwyX2ZyYW1lYnVmZmVyICpmYiA9IGFyZzsKLQotCQlkcHJpbnRrKDMsIEtFUk5fREVCVUcgIiVzOiBWSURJT0NfR19GQlVGXG4iLCBaUl9ERVZOQU1FKHpyKSk7Ci0KLQkJbWVtc2V0KGZiLCAwLCBzaXplb2YoKmZiKSk7Ci0JCW11dGV4X2xvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKLQkJZmItPmJhc2UgPSB6ci0+YnVmZmVyLmJhc2U7Ci0JCWZiLT5mbXQud2lkdGggPSB6ci0+YnVmZmVyLndpZHRoOwotCQlmYi0+Zm10LmhlaWdodCA9IHpyLT5idWZmZXIuaGVpZ2h0OwotCQlpZiAoenItPm92ZXJsYXlfc2V0dGluZ3MuZm9ybWF0KSB7Ci0JCQlmYi0+Zm10LnBpeGVsZm9ybWF0ID0KLQkJCQlmaC0+b3ZlcmxheV9zZXR0aW5ncy5mb3JtYXQtPmZvdXJjYzsKLQkJfQotCQlmYi0+Zm10LmJ5dGVzcGVybGluZSA9IHpyLT5idWZmZXIuYnl0ZXNwZXJsaW5lOwotCQltdXRleF91bmxvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKLQkJZmItPmZtdC5jb2xvcnNwYWNlID0gVjRMMl9DT0xPUlNQQUNFX1NSR0I7Ci0JCWZiLT5mbXQuZmllbGQgPSBWNEwyX0ZJRUxEX0lOVEVSTEFDRUQ7Ci0JCWZiLT5mbGFncyA9IFY0TDJfRkJVRl9GTEFHX09WRVJMQVk7Ci0JCWZiLT5jYXBhYmlsaXR5ID0gVjRMMl9GQlVGX0NBUF9MSVNUX0NMSVBQSU5HOwotCi0JCXJldHVybiAwOwotCX0KLQkJYnJlYWs7Ci0KLQljYXNlIFZJRElPQ19TX0ZCVUY6Ci0JewotCQlpbnQgaSwgcmVzID0gMDsKLQkJc3RydWN0IHY0bDJfZnJhbWVidWZmZXIgKmZiID0gYXJnOwotCQlfX2xlMzIgcHJpbnRmb3JtYXQgPSBfX2NwdV90b19sZTMyKGZiLT5mbXQucGl4ZWxmb3JtYXQpOwotCi0JCWRwcmludGsoMywKLQkJCUtFUk5fREVCVUcKLQkJCSIlczogVklESU9DX1NfRkJVRiAtIGJhc2U9MHglcCwgc2l6ZT0lZHglZCwgYnBsPSVkLCBmbXQ9MHgleCAoJTQuNHMpXG4iLAotCQkJWlJfREVWTkFNRSh6ciksIGZiLT5iYXNlLCBmYi0+Zm10LndpZHRoLCBmYi0+Zm10LmhlaWdodCwKLQkJCWZiLT5mbXQuYnl0ZXNwZXJsaW5lLCBmYi0+Zm10LnBpeGVsZm9ybWF0LAotCQkJKGNoYXIgKikgJnByaW50Zm9ybWF0KTsKLQotCQlmb3IgKGkgPSAwOyBpIDwgTlVNX0ZPUk1BVFM7IGkrKykKLQkJCWlmICh6b3Jhbl9mb3JtYXRzW2ldLmZvdXJjYyA9PSBmYi0+Zm10LnBpeGVsZm9ybWF0KQotCQkJCWJyZWFrOwotCQlpZiAoaSA9PSBOVU1fRk9STUFUUykgewotCQkJZHByaW50aygxLAotCQkJCUtFUk5fRVJSCi0JCQkJIiVzOiBWSURJT0NfU19GQlVGIC0gZm9ybWF0PTB4JXggKCU0LjRzKSBub3QgYWxsb3dlZFxuIiwKLQkJCQlaUl9ERVZOQU1FKHpyKSwgZmItPmZtdC5waXhlbGZvcm1hdCwKLQkJCQkoY2hhciAqKSAmcHJpbnRmb3JtYXQpOwotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQotCQltdXRleF9sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7Ci0JCXJlcyA9Ci0JCSAgICBzZXR1cF9mYnVmZmVyKGZpbGUsIGZiLT5iYXNlLCAmem9yYW5fZm9ybWF0c1tpXSwKLQkJCQkgIGZiLT5mbXQud2lkdGgsIGZiLT5mbXQuaGVpZ2h0LAotCQkJCSAgZmItPmZtdC5ieXRlc3BlcmxpbmUpOwotCQltdXRleF91bmxvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKLQotCQlyZXR1cm4gcmVzOwotCX0KLQkJYnJlYWs7Ci0KLQljYXNlIFZJRElPQ19PVkVSTEFZOgotCXsKLQkJaW50ICpvbiA9IGFyZywgcmVzOwotCi0JCWRwcmludGsoMywgS0VSTl9ERUJVRyAiJXM6IFZJRElPQ19QUkVWSUVXIC0gb249JWRcbiIsCi0JCQlaUl9ERVZOQU1FKHpyKSwgKm9uKTsKLQotCQltdXRleF9sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7Ci0JCXJlcyA9IHNldHVwX292ZXJsYXkoZmlsZSwgKm9uKTsKLQkJbXV0ZXhfdW5sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7Ci0KLQkJcmV0dXJuIHJlczsKLQl9Ci0JCWJyZWFrOwotCi0JY2FzZSBWSURJT0NfUkVRQlVGUzoKLQl7Ci0JCXN0cnVjdCB2NGwyX3JlcXVlc3RidWZmZXJzICpyZXEgPSBhcmc7Ci0JCWludCByZXMgPSAwOwotCi0JCWRwcmludGsoMywgS0VSTl9ERUJVRyAiJXM6IFZJRElPQ19SRVFCVUZTIC0gdHlwZT0lZFxuIiwKLQkJCVpSX0RFVk5BTUUoenIpLCByZXEtPnR5cGUpOwotCi0JCWlmIChyZXEtPm1lbW9yeSAhPSBWNEwyX01FTU9SWV9NTUFQKSB7Ci0JCQlkcHJpbnRrKDEsCi0JCQkJS0VSTl9FUlIKLQkJCQkiJXM6IG9ubHkgTUVNT1JZX01NQVAgY2FwdHVyZSBpcyBzdXBwb3J0ZWQsIG5vdCAlZFxuIiwKLQkJCQlaUl9ERVZOQU1FKHpyKSwgcmVxLT5tZW1vcnkpOwotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQotCQltdXRleF9sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7Ci0KLQkJaWYgKGZoLT52NGxfYnVmZmVycy5hbGxvY2F0ZWQgfHwgZmgtPmpwZ19idWZmZXJzLmFsbG9jYXRlZCkgewotCQkJZHByaW50aygxLAotCQkJCUtFUk5fRVJSCi0JCQkJIiVzOiBWSURJT0NfUkVRQlVGUyAtIGJ1ZmZlcnMgYWxscmVhZHkgYWxsb2NhdGVkXG4iLAotCQkJCVpSX0RFVk5BTUUoenIpKTsKLQkJCXJlcyA9IC1FQlVTWTsKLQkJCWdvdG8gdjRsMnJlcWJ1Zl91bmxvY2tfYW5kX3JldHVybjsKLQkJfQotCi0JCWlmIChmaC0+bWFwX21vZGUgPT0gWk9SQU5fTUFQX01PREVfUkFXICYmCi0JCSAgICByZXEtPnR5cGUgPT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFKSB7Ci0KLQkJCS8qIGNvbnRyb2wgdXNlciBpbnB1dCAqLwotCQkJaWYgKHJlcS0+Y291bnQgPCAyKQotCQkJCXJlcS0+Y291bnQgPSAyOwotCQkJaWYgKHJlcS0+Y291bnQgPiB2NGxfbmJ1ZnMpCi0JCQkJcmVxLT5jb3VudCA9IHY0bF9uYnVmczsKLQkJCWZoLT52NGxfYnVmZmVycy5udW1fYnVmZmVycyA9IHJlcS0+Y291bnQ7Ci0KLQkJCWlmICh2NGxfZmJ1ZmZlcl9hbGxvYyhmaWxlKSkgewotCQkJCXJlcyA9IC1FTk9NRU07Ci0JCQkJZ290byB2NGwycmVxYnVmX3VubG9ja19hbmRfcmV0dXJuOwotCQkJfQotCi0JCQkvKiBUaGUgbmV4dCBtbWFwIHdpbGwgbWFwIHRoZSBWNEwgYnVmZmVycyAqLwotCQkJZmgtPm1hcF9tb2RlID0gWk9SQU5fTUFQX01PREVfUkFXOwotCi0JCX0gZWxzZSBpZiAoZmgtPm1hcF9tb2RlID09IFpPUkFOX01BUF9NT0RFX0pQR19SRUMgfHwKLQkJCSAgIGZoLT5tYXBfbW9kZSA9PSBaT1JBTl9NQVBfTU9ERV9KUEdfUExBWSkgewotCi0JCQkvKiB3ZSBuZWVkIHRvIGNhbGN1bGF0ZSBzaXplIG91cnNlbHZlcyBub3cgKi8KLQkJCWlmIChyZXEtPmNvdW50IDwgNCkKLQkJCQlyZXEtPmNvdW50ID0gNDsKLQkJCWlmIChyZXEtPmNvdW50ID4ganBnX25idWZzKQotCQkJCXJlcS0+Y291bnQgPSBqcGdfbmJ1ZnM7Ci0JCQlmaC0+anBnX2J1ZmZlcnMubnVtX2J1ZmZlcnMgPSByZXEtPmNvdW50OwotCQkJZmgtPmpwZ19idWZmZXJzLmJ1ZmZlcl9zaXplID0KLQkJCSAgICB6b3Jhbl92NGwyX2NhbGNfYnVmc2l6ZSgmZmgtPmpwZ19zZXR0aW5ncyk7Ci0KLQkJCWlmIChqcGdfZmJ1ZmZlcl9hbGxvYyhmaWxlKSkgewotCQkJCXJlcyA9IC1FTk9NRU07Ci0JCQkJZ290byB2NGwycmVxYnVmX3VubG9ja19hbmRfcmV0dXJuOwotCQkJfQotCi0JCQkvKiBUaGUgbmV4dCBtbWFwIHdpbGwgbWFwIHRoZSBNSlBFRyBidWZmZXJzICovCi0JCQlpZiAocmVxLT50eXBlID09IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSkKLQkJCQlmaC0+bWFwX21vZGUgPSBaT1JBTl9NQVBfTU9ERV9KUEdfUkVDOwotCQkJZWxzZQotCQkJCWZoLT5tYXBfbW9kZSA9IFpPUkFOX01BUF9NT0RFX0pQR19QTEFZOwotCi0JCX0gZWxzZSB7Ci0JCQlkcHJpbnRrKDEsCi0JCQkJS0VSTl9FUlIKLQkJCQkiJXM6IFZJRElPQ19SRVFCVUZTIC0gdW5rbm93biB0eXBlICVkXG4iLAotCQkJCVpSX0RFVk5BTUUoenIpLCByZXEtPnR5cGUpOwotCQkJcmVzID0gLUVJTlZBTDsKLQkJCWdvdG8gdjRsMnJlcWJ1Zl91bmxvY2tfYW5kX3JldHVybjsKLQkJfQotCXY0bDJyZXFidWZfdW5sb2NrX2FuZF9yZXR1cm46Ci0JCW11dGV4X3VubG9jaygmenItPnJlc291cmNlX2xvY2spOwotCi0JCXJldHVybiAwOwotCX0KLQkJYnJlYWs7Ci0KLQljYXNlIFZJRElPQ19RVUVSWUJVRjoKLQl7Ci0JCXN0cnVjdCB2NGwyX2J1ZmZlciAqYnVmID0gYXJnOwotCQlfX3UzMiB0eXBlID0gYnVmLT50eXBlOwotCQlpbnQgaW5kZXggPSBidWYtPmluZGV4LCByZXM7Ci0KLQkJZHByaW50aygzLAotCQkJS0VSTl9ERUJVRwotCQkJIiVzOiBWSURJT0NfUVVFUllCVUYgLSBpbmRleD0lZCwgdHlwZT0lZFxuIiwKLQkJCVpSX0RFVk5BTUUoenIpLCBidWYtPmluZGV4LCBidWYtPnR5cGUpOwotCi0JCW1lbXNldChidWYsIDAsIHNpemVvZigqYnVmKSk7Ci0JCWJ1Zi0+dHlwZSA9IHR5cGU7Ci0JCWJ1Zi0+aW5kZXggPSBpbmRleDsKLQotCQltdXRleF9sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7Ci0JCXJlcyA9IHpvcmFuX3Y0bDJfYnVmZmVyX3N0YXR1cyhmaWxlLCBidWYsIGJ1Zi0+aW5kZXgpOwotCQltdXRleF91bmxvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKLQotCQlyZXR1cm4gcmVzOwotCX0KLQkJYnJlYWs7Ci0KLQljYXNlIFZJRElPQ19RQlVGOgotCXsKLQkJc3RydWN0IHY0bDJfYnVmZmVyICpidWYgPSBhcmc7Ci0JCWludCByZXMgPSAwLCBjb2RlY19tb2RlLCBidWZfdHlwZTsKLQotCQlkcHJpbnRrKDMsCi0JCQlLRVJOX0RFQlVHICIlczogVklESU9DX1FCVUYgLSB0eXBlPSVkLCBpbmRleD0lZFxuIiwKLQkJCVpSX0RFVk5BTUUoenIpLCBidWYtPnR5cGUsIGJ1Zi0+aW5kZXgpOwotCi0JCW11dGV4X2xvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKLQotCQlzd2l0Y2ggKGZoLT5tYXBfbW9kZSkgewotCQljYXNlIFpPUkFOX01BUF9NT0RFX1JBVzoKLQkJCWlmIChidWYtPnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFKSB7Ci0JCQkJZHByaW50aygxLAotCQkJCQlLRVJOX0VSUgotCQkJCQkiJXM6IFZJRElPQ19RQlVGIC0gaW52YWxpZCBidWYtPnR5cGU9JWQgZm9yIG1hcF9tb2RlPSVkXG4iLAotCQkJCQlaUl9ERVZOQU1FKHpyKSwgYnVmLT50eXBlLCBmaC0+bWFwX21vZGUpOwotCQkJCXJlcyA9IC1FSU5WQUw7Ci0JCQkJZ290byBxYnVmX3VubG9ja19hbmRfcmV0dXJuOwotCQkJfQotCi0JCQlyZXMgPSB6b3Jhbl92NGxfcXVldWVfZnJhbWUoZmlsZSwgYnVmLT5pbmRleCk7Ci0JCQlpZiAocmVzKQotCQkJCWdvdG8gcWJ1Zl91bmxvY2tfYW5kX3JldHVybjsKLQkJCWlmICghenItPnY0bF9tZW1ncmFiX2FjdGl2ZSAmJgotCQkJICAgIGZoLT52NGxfYnVmZmVycy5hY3RpdmUgPT0gWk9SQU5fTE9DS0VEKQotCQkJCXpyMzYwNTdfc2V0X21lbWdyYWIoenIsIDEpOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBaT1JBTl9NQVBfTU9ERV9KUEdfUkVDOgotCQljYXNlIFpPUkFOX01BUF9NT0RFX0pQR19QTEFZOgotCQkJaWYgKGZoLT5tYXBfbW9kZSA9PSBaT1JBTl9NQVBfTU9ERV9KUEdfUExBWSkgewotCQkJCWJ1Zl90eXBlID0gVjRMMl9CVUZfVFlQRV9WSURFT19PVVRQVVQ7Ci0JCQkJY29kZWNfbW9kZSA9IEJVWl9NT0RFX01PVElPTl9ERUNPTVBSRVNTOwotCQkJfSBlbHNlIHsKLQkJCQlidWZfdHlwZSA9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRTsKLQkJCQljb2RlY19tb2RlID0gQlVaX01PREVfTU9USU9OX0NPTVBSRVNTOwotCQkJfQotCi0JCQlpZiAoYnVmLT50eXBlICE9IGJ1Zl90eXBlKSB7Ci0JCQkJZHByaW50aygxLAotCQkJCQlLRVJOX0VSUgotCQkJCQkiJXM6IFZJRElPQ19RQlVGIC0gaW52YWxpZCBidWYtPnR5cGU9JWQgZm9yIG1hcF9tb2RlPSVkXG4iLAotCQkJCQlaUl9ERVZOQU1FKHpyKSwgYnVmLT50eXBlLCBmaC0+bWFwX21vZGUpOwotCQkJCXJlcyA9IC1FSU5WQUw7Ci0JCQkJZ290byBxYnVmX3VubG9ja19hbmRfcmV0dXJuOwotCQkJfQotCi0JCQlyZXMgPQotCQkJICAgIHpvcmFuX2pwZ19xdWV1ZV9mcmFtZShmaWxlLCBidWYtPmluZGV4LAotCQkJCQkJICBjb2RlY19tb2RlKTsKLQkJCWlmIChyZXMgIT0gMCkKLQkJCQlnb3RvIHFidWZfdW5sb2NrX2FuZF9yZXR1cm47Ci0JCQlpZiAoenItPmNvZGVjX21vZGUgPT0gQlVaX01PREVfSURMRSAmJgotCQkJICAgIGZoLT5qcGdfYnVmZmVycy5hY3RpdmUgPT0gWk9SQU5fTE9DS0VEKSB7Ci0JCQkJenIzNjA1N19lbmFibGVfanBnKHpyLCBjb2RlY19tb2RlKTsKLQkJCX0KLQkJCWJyZWFrOwotCi0JCWRlZmF1bHQ6Ci0JCQlkcHJpbnRrKDEsCi0JCQkJS0VSTl9FUlIKLQkJCQkiJXM6IFZJRElPQ19RQlVGIC0gdW5zdXBwb3J0ZWQgdHlwZSAlZFxuIiwKLQkJCQlaUl9ERVZOQU1FKHpyKSwgYnVmLT50eXBlKTsKLQkJCXJlcyA9IC1FSU5WQUw7Ci0JCQlnb3RvIHFidWZfdW5sb2NrX2FuZF9yZXR1cm47Ci0JCX0KLQlxYnVmX3VubG9ja19hbmRfcmV0dXJuOgotCQltdXRleF91bmxvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKLQotCQlyZXR1cm4gcmVzOwotCX0KLQkJYnJlYWs7Ci0KLQljYXNlIFZJRElPQ19EUUJVRjoKLQl7Ci0JCXN0cnVjdCB2NGwyX2J1ZmZlciAqYnVmID0gYXJnOwotCQlpbnQgcmVzID0gMCwgYnVmX3R5cGUsIG51bSA9IC0xOwkvKiBjb21waWxlciBib3JrcyBoZXJlICg/KSAqLwotCi0JCWRwcmludGsoMywgS0VSTl9ERUJVRyAiJXM6IFZJRElPQ19EUUJVRiAtIHR5cGU9JWRcbiIsCi0JCQlaUl9ERVZOQU1FKHpyKSwgYnVmLT50eXBlKTsKLQotCQltdXRleF9sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7Ci0KLQkJc3dpdGNoIChmaC0+bWFwX21vZGUpIHsKLQkJY2FzZSBaT1JBTl9NQVBfTU9ERV9SQVc6Ci0JCQlpZiAoYnVmLT50eXBlICE9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSkgewotCQkJCWRwcmludGsoMSwKLQkJCQkJS0VSTl9FUlIKLQkJCQkJIiVzOiBWSURJT0NfUUJVRiAtIGludmFsaWQgYnVmLT50eXBlPSVkIGZvciBtYXBfbW9kZT0lZFxuIiwKLQkJCQkJWlJfREVWTkFNRSh6ciksIGJ1Zi0+dHlwZSwgZmgtPm1hcF9tb2RlKTsKLQkJCQlyZXMgPSAtRUlOVkFMOwotCQkJCWdvdG8gZHFidWZfdW5sb2NrX2FuZF9yZXR1cm47Ci0JCQl9Ci0KLQkJCW51bSA9IHpyLT52NGxfcGVuZFt6ci0+djRsX3N5bmNfdGFpbCAmIFY0TF9NQVNLX0ZSQU1FXTsKLQkJCWlmIChmaWxlLT5mX2ZsYWdzICYgT19OT05CTE9DSyAmJgotCQkJICAgIHpyLT52NGxfYnVmZmVycy5idWZmZXJbbnVtXS5zdGF0ZSAhPQotCQkJICAgIEJVWl9TVEFURV9ET05FKSB7Ci0JCQkJcmVzID0gLUVBR0FJTjsKLQkJCQlnb3RvIGRxYnVmX3VubG9ja19hbmRfcmV0dXJuOwotCQkJfQotCQkJcmVzID0gdjRsX3N5bmMoZmlsZSwgbnVtKTsKLQkJCWlmIChyZXMpCi0JCQkJZ290byBkcWJ1Zl91bmxvY2tfYW5kX3JldHVybjsKLQkJCWVsc2UKLQkJCQl6ci0+djRsX3N5bmNfdGFpbCsrOwotCQkJcmVzID0gem9yYW5fdjRsMl9idWZmZXJfc3RhdHVzKGZpbGUsIGJ1ZiwgbnVtKTsKLQkJCWJyZWFrOwotCi0JCWNhc2UgWk9SQU5fTUFQX01PREVfSlBHX1JFQzoKLQkJY2FzZSBaT1JBTl9NQVBfTU9ERV9KUEdfUExBWToKLQkJewotCQkJc3RydWN0IHpvcmFuX3N5bmMgYnM7Ci0KLQkJCWlmIChmaC0+bWFwX21vZGUgPT0gWk9SQU5fTUFQX01PREVfSlBHX1BMQVkpCi0JCQkJYnVmX3R5cGUgPSBWNEwyX0JVRl9UWVBFX1ZJREVPX09VVFBVVDsKLQkJCWVsc2UKLQkJCQlidWZfdHlwZSA9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRTsKLQotCQkJaWYgKGJ1Zi0+dHlwZSAhPSBidWZfdHlwZSkgewotCQkJCWRwcmludGsoMSwKLQkJCQkJS0VSTl9FUlIKLQkJCQkJIiVzOiBWSURJT0NfUUJVRiAtIGludmFsaWQgYnVmLT50eXBlPSVkIGZvciBtYXBfbW9kZT0lZFxuIiwKLQkJCQkJWlJfREVWTkFNRSh6ciksIGJ1Zi0+dHlwZSwgZmgtPm1hcF9tb2RlKTsKLQkJCQlyZXMgPSAtRUlOVkFMOwotCQkJCWdvdG8gZHFidWZfdW5sb2NrX2FuZF9yZXR1cm47Ci0JCQl9Ci0KLQkJCW51bSA9Ci0JCQkgICAgenItPmpwZ19wZW5kW3pyLT4KLQkJCQkJIGpwZ19xdWVfdGFpbCAmIEJVWl9NQVNLX0ZSQU1FXTsKLQotCQkJaWYgKGZpbGUtPmZfZmxhZ3MgJiBPX05PTkJMT0NLICYmCi0JCQkgICAgenItPmpwZ19idWZmZXJzLmJ1ZmZlcltudW1dLnN0YXRlICE9Ci0JCQkgICAgQlVaX1NUQVRFX0RPTkUpIHsKLQkJCQlyZXMgPSAtRUFHQUlOOwotCQkJCWdvdG8gZHFidWZfdW5sb2NrX2FuZF9yZXR1cm47Ci0JCQl9Ci0JCQlyZXMgPSBqcGdfc3luYyhmaWxlLCAmYnMpOwotCQkJaWYgKHJlcykKLQkJCQlnb3RvIGRxYnVmX3VubG9ja19hbmRfcmV0dXJuOwotCQkJcmVzID0KLQkJCSAgICB6b3Jhbl92NGwyX2J1ZmZlcl9zdGF0dXMoZmlsZSwgYnVmLCBicy5mcmFtZSk7Ci0JCQlicmVhazsKLQkJfQotCi0JCWRlZmF1bHQ6Ci0JCQlkcHJpbnRrKDEsCi0JCQkJS0VSTl9FUlIKLQkJCQkiJXM6IFZJRElPQ19EUUJVRiAtIHVuc3VwcG9ydGVkIHR5cGUgJWRcbiIsCi0JCQkJWlJfREVWTkFNRSh6ciksIGJ1Zi0+dHlwZSk7Ci0JCQlyZXMgPSAtRUlOVkFMOwotCQkJZ290byBkcWJ1Zl91bmxvY2tfYW5kX3JldHVybjsKLQkJfQotCWRxYnVmX3VubG9ja19hbmRfcmV0dXJuOgotCQltdXRleF91bmxvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKLQotCQlyZXR1cm4gcmVzOwotCX0KLQkJYnJlYWs7Ci0KLQljYXNlIFZJRElPQ19TVFJFQU1PTjoKLQl7Ci0JCWludCByZXMgPSAwOwotCi0JCWRwcmludGsoMywgS0VSTl9ERUJVRyAiJXM6IFZJRElPQ19TVFJFQU1PTlxuIiwgWlJfREVWTkFNRSh6cikpOwotCi0JCW11dGV4X2xvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKLQotCQlzd2l0Y2ggKGZoLT5tYXBfbW9kZSkgewotCQljYXNlIFpPUkFOX01BUF9NT0RFX1JBVzoJLyogcmF3IGNhcHR1cmUgKi8KLQkJCWlmICh6ci0+djRsX2J1ZmZlcnMuYWN0aXZlICE9IFpPUkFOX0FDVElWRSB8fAotCQkJICAgIGZoLT52NGxfYnVmZmVycy5hY3RpdmUgIT0gWk9SQU5fQUNUSVZFKSB7Ci0JCQkJcmVzID0gLUVCVVNZOwotCQkJCWdvdG8gc3RybW9uX3VubG9ja19hbmRfcmV0dXJuOwotCQkJfQotCi0JCQl6ci0+djRsX2J1ZmZlcnMuYWN0aXZlID0gZmgtPnY0bF9idWZmZXJzLmFjdGl2ZSA9Ci0JCQkgICAgWk9SQU5fTE9DS0VEOwotCQkJenItPnY0bF9zZXR0aW5ncyA9IGZoLT52NGxfc2V0dGluZ3M7Ci0KLQkJCXpyLT52NGxfc3luY190YWlsID0genItPnY0bF9wZW5kX3RhaWw7Ci0JCQlpZiAoIXpyLT52NGxfbWVtZ3JhYl9hY3RpdmUgJiYKLQkJCSAgICB6ci0+djRsX3BlbmRfaGVhZCAhPSB6ci0+djRsX3BlbmRfdGFpbCkgewotCQkJCXpyMzYwNTdfc2V0X21lbWdyYWIoenIsIDEpOwotCQkJfQotCQkJYnJlYWs7Ci0KLQkJY2FzZSBaT1JBTl9NQVBfTU9ERV9KUEdfUkVDOgotCQljYXNlIFpPUkFOX01BUF9NT0RFX0pQR19QTEFZOgotCQkJLyogd2hhdCBpcyB0aGUgY29kZWMgbW9kZSByaWdodCBub3c/ICovCi0JCQlpZiAoenItPmpwZ19idWZmZXJzLmFjdGl2ZSAhPSBaT1JBTl9BQ1RJVkUgfHwKLQkJCSAgICBmaC0+anBnX2J1ZmZlcnMuYWN0aXZlICE9IFpPUkFOX0FDVElWRSkgewotCQkJCXJlcyA9IC1FQlVTWTsKLQkJCQlnb3RvIHN0cm1vbl91bmxvY2tfYW5kX3JldHVybjsKLQkJCX0KLQotCQkJenItPmpwZ19idWZmZXJzLmFjdGl2ZSA9IGZoLT5qcGdfYnVmZmVycy5hY3RpdmUgPQotCQkJICAgIFpPUkFOX0xPQ0tFRDsKLQotCQkJaWYgKHpyLT5qcGdfcXVlX2hlYWQgIT0genItPmpwZ19xdWVfdGFpbCkgewotCQkJCS8qIFN0YXJ0IHRoZSBqcGVnIGNvZGVjIHdoZW4gdGhlIGZpcnN0IGZyYW1lIGlzIHF1ZXVlZCAgKi8KLQkJCQlqcGVnX3N0YXJ0KHpyKTsKLQkJCX0KLQotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlkcHJpbnRrKDEsCi0JCQkJS0VSTl9FUlIKLQkJCQkiJXM6IFZJRElPQ19TVFJFQU1PTiAtIGludmFsaWQgbWFwIG1vZGUgJWRcbiIsCi0JCQkJWlJfREVWTkFNRSh6ciksIGZoLT5tYXBfbW9kZSk7Ci0JCQlyZXMgPSAtRUlOVkFMOwotCQkJZ290byBzdHJtb25fdW5sb2NrX2FuZF9yZXR1cm47Ci0JCX0KLQlzdHJtb25fdW5sb2NrX2FuZF9yZXR1cm46Ci0JCW11dGV4X3VubG9jaygmenItPnJlc291cmNlX2xvY2spOwotCi0JCXJldHVybiByZXM7Ci0JfQotCQlicmVhazsKLQotCWNhc2UgVklESU9DX1NUUkVBTU9GRjoKLQl7Ci0JCWludCBpLCByZXMgPSAwOwotCi0JCWRwcmludGsoMywgS0VSTl9ERUJVRyAiJXM6IFZJRElPQ19TVFJFQU1PRkZcbiIsIFpSX0RFVk5BTUUoenIpKTsKLQotCQltdXRleF9sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7Ci0KLQkJc3dpdGNoIChmaC0+bWFwX21vZGUpIHsKLQkJY2FzZSBaT1JBTl9NQVBfTU9ERV9SQVc6CS8qIHJhdyBjYXB0dXJlICovCi0JCQlpZiAoZmgtPnY0bF9idWZmZXJzLmFjdGl2ZSA9PSBaT1JBTl9GUkVFICYmCi0JCQkgICAgenItPnY0bF9idWZmZXJzLmFjdGl2ZSAhPSBaT1JBTl9GUkVFKSB7Ci0JCQkJcmVzID0gLUVQRVJNOwkvKiBzdGF5IG9mZiBvdGhlcidzIHNldHRpbmdzISAqLwotCQkJCWdvdG8gc3RybW9mZl91bmxvY2tfYW5kX3JldHVybjsKLQkJCX0KLQkJCWlmICh6ci0+djRsX2J1ZmZlcnMuYWN0aXZlID09IFpPUkFOX0ZSRUUpCi0JCQkJZ290byBzdHJtb2ZmX3VubG9ja19hbmRfcmV0dXJuOwotCi0JCQkvKiB1bmxvYWQgY2FwdHVyZSAqLwotCQkJaWYgKHpyLT52NGxfbWVtZ3JhYl9hY3RpdmUpIHsKLQkJCQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JCQkJc3Bpbl9sb2NrX2lycXNhdmUoJnpyLT5zcGlubG9jaywgZmxhZ3MpOwotCQkJCXpyMzYwNTdfc2V0X21lbWdyYWIoenIsIDApOwotCQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnpyLT5zcGlubG9jaywgZmxhZ3MpOwotCQkJfQotCi0JCQlmb3IgKGkgPSAwOyBpIDwgZmgtPnY0bF9idWZmZXJzLm51bV9idWZmZXJzOyBpKyspCi0JCQkJenItPnY0bF9idWZmZXJzLmJ1ZmZlcltpXS5zdGF0ZSA9Ci0JCQkJICAgIEJVWl9TVEFURV9VU0VSOwotCQkJZmgtPnY0bF9idWZmZXJzID0genItPnY0bF9idWZmZXJzOwotCi0JCQl6ci0+djRsX2J1ZmZlcnMuYWN0aXZlID0gZmgtPnY0bF9idWZmZXJzLmFjdGl2ZSA9Ci0JCQkgICAgWk9SQU5fRlJFRTsKLQotCQkJenItPnY0bF9ncmFiX3NlcSA9IDA7Ci0JCQl6ci0+djRsX3BlbmRfaGVhZCA9IHpyLT52NGxfcGVuZF90YWlsID0gMDsKLQkJCXpyLT52NGxfc3luY190YWlsID0gMDsKLQotCQkJYnJlYWs7Ci0KLQkJY2FzZSBaT1JBTl9NQVBfTU9ERV9KUEdfUkVDOgotCQljYXNlIFpPUkFOX01BUF9NT0RFX0pQR19QTEFZOgotCQkJaWYgKGZoLT5qcGdfYnVmZmVycy5hY3RpdmUgPT0gWk9SQU5fRlJFRSAmJgotCQkJICAgIHpyLT5qcGdfYnVmZmVycy5hY3RpdmUgIT0gWk9SQU5fRlJFRSkgewotCQkJCXJlcyA9IC1FUEVSTTsJLyogc3RheSBvZmYgb3RoZXIncyBzZXR0aW5ncyEgKi8KLQkJCQlnb3RvIHN0cm1vZmZfdW5sb2NrX2FuZF9yZXR1cm47Ci0JCQl9Ci0JCQlpZiAoenItPmpwZ19idWZmZXJzLmFjdGl2ZSA9PSBaT1JBTl9GUkVFKQotCQkJCWdvdG8gc3RybW9mZl91bmxvY2tfYW5kX3JldHVybjsKLQotCQkJcmVzID0KLQkJCSAgICBqcGdfcWJ1ZihmaWxlLCAtMSwKLQkJCQkgICAgIChmaC0+bWFwX21vZGUgPT0KLQkJCQkgICAgICBaT1JBTl9NQVBfTU9ERV9KUEdfUkVDKSA/Ci0JCQkJICAgICBCVVpfTU9ERV9NT1RJT05fQ09NUFJFU1MgOgotCQkJCSAgICAgQlVaX01PREVfTU9USU9OX0RFQ09NUFJFU1MpOwotCQkJaWYgKHJlcykKLQkJCQlnb3RvIHN0cm1vZmZfdW5sb2NrX2FuZF9yZXR1cm47Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCWRwcmludGsoMSwKLQkJCQlLRVJOX0VSUgotCQkJCSIlczogVklESU9DX1NUUkVBTU9GRiAtIGludmFsaWQgbWFwIG1vZGUgJWRcbiIsCi0JCQkJWlJfREVWTkFNRSh6ciksIGZoLT5tYXBfbW9kZSk7Ci0JCQlyZXMgPSAtRUlOVkFMOwotCQkJZ290byBzdHJtb2ZmX3VubG9ja19hbmRfcmV0dXJuOwotCQl9Ci0Jc3RybW9mZl91bmxvY2tfYW5kX3JldHVybjoKLQkJbXV0ZXhfdW5sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7Ci0KLQkJcmV0dXJuIHJlczsKLQl9Ci0JCWJyZWFrOwotCi0JY2FzZSBWSURJT0NfUVVFUllDVFJMOgotCXsKLQkJc3RydWN0IHY0bDJfcXVlcnljdHJsICpjdHJsID0gYXJnOwotCi0JCWRwcmludGsoMywgS0VSTl9ERUJVRyAiJXM6IFZJRElPQ19RVUVSWUNUUkwgLSBpZD0lZFxuIiwKLQkJCVpSX0RFVk5BTUUoenIpLCBjdHJsLT5pZCk7Ci0KLQkJLyogd2Ugb25seSBzdXBwb3J0IGh1ZS9zYXR1cmF0aW9uL2NvbnRyYXN0L2JyaWdodG5lc3MgKi8KLQkJaWYgKGN0cmwtPmlkIDwgVjRMMl9DSURfQlJJR0hUTkVTUyB8fAotCQkgICAgY3RybC0+aWQgPiBWNEwyX0NJRF9IVUUpCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJZWxzZSB7Ci0JCQlpbnQgaWQgPSBjdHJsLT5pZDsKLQkJCW1lbXNldChjdHJsLCAwLCBzaXplb2YoKmN0cmwpKTsKLQkJCWN0cmwtPmlkID0gaWQ7Ci0JCX0KLQotCQlzd2l0Y2ggKGN0cmwtPmlkKSB7Ci0JCWNhc2UgVjRMMl9DSURfQlJJR0hUTkVTUzoKLQkJCXN0cm5jcHkoY3RybC0+bmFtZSwgIkJyaWdodG5lc3MiLCBzaXplb2YoY3RybC0+bmFtZSktMSk7Ci0JCQlicmVhazsKLQkJY2FzZSBWNEwyX0NJRF9DT05UUkFTVDoKLQkJCXN0cm5jcHkoY3RybC0+bmFtZSwgIkNvbnRyYXN0Iiwgc2l6ZW9mKGN0cmwtPm5hbWUpLTEpOwotCQkJYnJlYWs7Ci0JCWNhc2UgVjRMMl9DSURfU0FUVVJBVElPTjoKLQkJCXN0cm5jcHkoY3RybC0+bmFtZSwgIlNhdHVyYXRpb24iLCBzaXplb2YoY3RybC0+bmFtZSktMSk7Ci0JCQlicmVhazsKLQkJY2FzZSBWNEwyX0NJRF9IVUU6Ci0JCQlzdHJuY3B5KGN0cmwtPm5hbWUsICJIdWUiLCBzaXplb2YoY3RybC0+bmFtZSktMSk7Ci0JCQlicmVhazsKLQkJfQotCi0JCWN0cmwtPm1pbmltdW0gPSAwOwotCQljdHJsLT5tYXhpbXVtID0gNjU1MzU7Ci0JCWN0cmwtPnN0ZXAgPSAxOwotCQljdHJsLT5kZWZhdWx0X3ZhbHVlID0gMzI3Njg7Ci0JCWN0cmwtPnR5cGUgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSOwotCi0JCXJldHVybiAwOwotCX0KLQkJYnJlYWs7Ci0KLQljYXNlIFZJRElPQ19HX0NUUkw6Ci0JewotCQlzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsID0gYXJnOwotCi0JCWRwcmludGsoMywgS0VSTl9ERUJVRyAiJXM6IFZJRElPQ19HX0NUUkwgLSBpZD0lZFxuIiwKLQkJCVpSX0RFVk5BTUUoenIpLCBjdHJsLT5pZCk7Ci0KLQkJLyogd2Ugb25seSBzdXBwb3J0IGh1ZS9zYXR1cmF0aW9uL2NvbnRyYXN0L2JyaWdodG5lc3MgKi8KLQkJaWYgKGN0cmwtPmlkIDwgVjRMMl9DSURfQlJJR0hUTkVTUyB8fAotCQkgICAgY3RybC0+aWQgPiBWNEwyX0NJRF9IVUUpCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQotCQltdXRleF9sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7Ci0JCXN3aXRjaCAoY3RybC0+aWQpIHsKLQkJY2FzZSBWNEwyX0NJRF9CUklHSFRORVNTOgotCQkJY3RybC0+dmFsdWUgPSB6ci0+YnJpZ2h0bmVzczsKLQkJCWJyZWFrOwotCQljYXNlIFY0TDJfQ0lEX0NPTlRSQVNUOgotCQkJY3RybC0+dmFsdWUgPSB6ci0+Y29udHJhc3Q7Ci0JCQlicmVhazsKLQkJY2FzZSBWNEwyX0NJRF9TQVRVUkFUSU9OOgotCQkJY3RybC0+dmFsdWUgPSB6ci0+c2F0dXJhdGlvbjsKLQkJCWJyZWFrOwotCQljYXNlIFY0TDJfQ0lEX0hVRToKLQkJCWN0cmwtPnZhbHVlID0genItPmh1ZTsKLQkJCWJyZWFrOwotCQl9Ci0JCW11dGV4X3VubG9jaygmenItPnJlc291cmNlX2xvY2spOwotCi0JCXJldHVybiAwOwotCX0KLQkJYnJlYWs7Ci0KLQljYXNlIFZJRElPQ19TX0NUUkw6Ci0JewotCQlzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsID0gYXJnOwotCQlzdHJ1Y3QgdmlkZW9fcGljdHVyZSBwaWN0OwotCi0JCWRwcmludGsoMywgS0VSTl9ERUJVRyAiJXM6IFZJRElPQ19TX0NUUkwgLSBpZD0lZFxuIiwKLQkJCVpSX0RFVk5BTUUoenIpLCBjdHJsLT5pZCk7Ci0KLQkJLyogd2Ugb25seSBzdXBwb3J0IGh1ZS9zYXR1cmF0aW9uL2NvbnRyYXN0L2JyaWdodG5lc3MgKi8KLQkJaWYgKGN0cmwtPmlkIDwgVjRMMl9DSURfQlJJR0hUTkVTUyB8fAotCQkgICAgY3RybC0+aWQgPiBWNEwyX0NJRF9IVUUpCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQotCQlpZiAoY3RybC0+dmFsdWUgPCAwIHx8IGN0cmwtPnZhbHVlID4gNjU1MzUpIHsKLQkJCWRwcmludGsoMSwKLQkJCQlLRVJOX0VSUgotCQkJCSIlczogVklESU9DX1NfQ1RSTCAtIGludmFsaWQgdmFsdWUgJWQgZm9yIGlkPSVkXG4iLAotCQkJCVpSX0RFVk5BTUUoenIpLCBjdHJsLT52YWx1ZSwgY3RybC0+aWQpOwotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQotCQltdXRleF9sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7Ci0JCXN3aXRjaCAoY3RybC0+aWQpIHsKLQkJY2FzZSBWNEwyX0NJRF9CUklHSFRORVNTOgotCQkJenItPmJyaWdodG5lc3MgPSBjdHJsLT52YWx1ZTsKLQkJCWJyZWFrOwotCQljYXNlIFY0TDJfQ0lEX0NPTlRSQVNUOgotCQkJenItPmNvbnRyYXN0ID0gY3RybC0+dmFsdWU7Ci0JCQlicmVhazsKLQkJY2FzZSBWNEwyX0NJRF9TQVRVUkFUSU9OOgotCQkJenItPnNhdHVyYXRpb24gPSBjdHJsLT52YWx1ZTsKLQkJCWJyZWFrOwotCQljYXNlIFY0TDJfQ0lEX0hVRToKLQkJCXpyLT5odWUgPSBjdHJsLT52YWx1ZTsKLQkJCWJyZWFrOwotCQl9Ci0JCXBpY3QuYnJpZ2h0bmVzcyA9IHpyLT5icmlnaHRuZXNzOwotCQlwaWN0LmNvbnRyYXN0ID0genItPmNvbnRyYXN0OwotCQlwaWN0LmNvbG91ciA9IHpyLT5zYXR1cmF0aW9uOwotCQlwaWN0Lmh1ZSA9IHpyLT5odWU7Ci0KLQkJZGVjb2Rlcl9jb21tYW5kKHpyLCBERUNPREVSX1NFVF9QSUNUVVJFLCAmcGljdCk7Ci0KLQkJbXV0ZXhfdW5sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7Ci0KLQkJcmV0dXJuIDA7Ci0JfQotCQlicmVhazsKLQotCWNhc2UgVklESU9DX0VOVU1TVEQ6Ci0JewotCQlzdHJ1Y3QgdjRsMl9zdGFuZGFyZCAqc3RkID0gYXJnOwotCi0JCWRwcmludGsoMywgS0VSTl9ERUJVRyAiJXM6IFZJRElPQ19FTlVNU1REIC0gaW5kZXg9JWRcbiIsCi0JCQlaUl9ERVZOQU1FKHpyKSwgc3RkLT5pbmRleCk7Ci0KLQkJaWYgKHN0ZC0+aW5kZXggPCAwIHx8IHN0ZC0+aW5kZXggPj0gKHpyLT5jYXJkLm5vcm1zICsgMSkpCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJZWxzZSB7Ci0JCQlpbnQgaWQgPSBzdGQtPmluZGV4OwotCQkJbWVtc2V0KHN0ZCwgMCwgc2l6ZW9mKCpzdGQpKTsKLQkJCXN0ZC0+aW5kZXggPSBpZDsKLQkJfQotCi0JCWlmIChzdGQtPmluZGV4ID09IHpyLT5jYXJkLm5vcm1zKSB7Ci0JCQkvKiBpZiB3ZSBoYXZlIGF1dG9kZXRlY3QsIC4uLiAqLwotCQkJc3RydWN0IHZpZGVvX2RlY29kZXJfY2FwYWJpbGl0eSBjYXBzOwotCQkJZGVjb2Rlcl9jb21tYW5kKHpyLCBERUNPREVSX0dFVF9DQVBBQklMSVRJRVMsCi0JCQkJCSZjYXBzKTsKLQkJCWlmIChjYXBzLmZsYWdzICYgVklERU9fREVDT0RFUl9BVVRPKSB7Ci0JCQkJc3RkLT5pZCA9IFY0TDJfU1REX0FMTDsKLQkJCQlzdHJuY3B5KHN0ZC0+bmFtZSwgIkF1dG9kZXRlY3QiLCBzaXplb2Yoc3RkLT5uYW1lKS0xKTsKLQkJCQlyZXR1cm4gMDsKLQkJCX0gZWxzZQotCQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0JCXN3aXRjaCAoc3RkLT5pbmRleCkgewotCQljYXNlIDA6Ci0JCQlzdGQtPmlkID0gVjRMMl9TVERfUEFMOwotCQkJc3RybmNweShzdGQtPm5hbWUsICJQQUwiLCBzaXplb2Yoc3RkLT5uYW1lKS0xKTsKLQkJCXN0ZC0+ZnJhbWVwZXJpb2QubnVtZXJhdG9yID0gMTsKLQkJCXN0ZC0+ZnJhbWVwZXJpb2QuZGVub21pbmF0b3IgPSAyNTsKLQkJCXN0ZC0+ZnJhbWVsaW5lcyA9IHpyLT5jYXJkLnR2blswXS0+SHQ7Ci0JCQlicmVhazsKLQkJY2FzZSAxOgotCQkJc3RkLT5pZCA9IFY0TDJfU1REX05UU0M7Ci0JCQlzdHJuY3B5KHN0ZC0+bmFtZSwgIk5UU0MiLCBzaXplb2Yoc3RkLT5uYW1lKS0xKTsKLQkJCXN0ZC0+ZnJhbWVwZXJpb2QubnVtZXJhdG9yID0gMTAwMTsKLQkJCXN0ZC0+ZnJhbWVwZXJpb2QuZGVub21pbmF0b3IgPSAzMDAwMDsKLQkJCXN0ZC0+ZnJhbWVsaW5lcyA9IHpyLT5jYXJkLnR2blsxXS0+SHQ7Ci0JCQlicmVhazsKLQkJY2FzZSAyOgotCQkJc3RkLT5pZCA9IFY0TDJfU1REX1NFQ0FNOwotCQkJc3RybmNweShzdGQtPm5hbWUsICJTRUNBTSIsIHNpemVvZihzdGQtPm5hbWUpLTEpOwotCQkJc3RkLT5mcmFtZXBlcmlvZC5udW1lcmF0b3IgPSAxOwotCQkJc3RkLT5mcmFtZXBlcmlvZC5kZW5vbWluYXRvciA9IDI1OwotCQkJc3RkLT5mcmFtZWxpbmVzID0genItPmNhcmQudHZuWzJdLT5IdDsKLQkJCWJyZWFrOwotCQl9Ci0KLQkJcmV0dXJuIDA7Ci0JfQotCQlicmVhazsKLQotCWNhc2UgVklESU9DX0dfU1REOgotCXsKLQkJdjRsMl9zdGRfaWQgKnN0ZCA9IGFyZzsKLQkJaW50IG5vcm07Ci0KLQkJZHByaW50aygzLCBLRVJOX0RFQlVHICIlczogVklESU9DX0dfU1REXG4iLCBaUl9ERVZOQU1FKHpyKSk7Ci0KLQkJbXV0ZXhfbG9jaygmenItPnJlc291cmNlX2xvY2spOwotCQlub3JtID0genItPm5vcm07Ci0JCW11dGV4X3VubG9jaygmenItPnJlc291cmNlX2xvY2spOwotCi0JCXN3aXRjaCAobm9ybSkgewotCQljYXNlIFZJREVPX01PREVfUEFMOgotCQkJKnN0ZCA9IFY0TDJfU1REX1BBTDsKLQkJCWJyZWFrOwotCQljYXNlIFZJREVPX01PREVfTlRTQzoKLQkJCSpzdGQgPSBWNEwyX1NURF9OVFNDOwotCQkJYnJlYWs7Ci0JCWNhc2UgVklERU9fTU9ERV9TRUNBTToKLQkJCSpzdGQgPSBWNEwyX1NURF9TRUNBTTsKLQkJCWJyZWFrOwotCQl9Ci0KLQkJcmV0dXJuIDA7Ci0JfQotCQlicmVhazsKLQotCWNhc2UgVklESU9DX1NfU1REOgotCXsKLQkJaW50IG5vcm0gPSAtMSwgcmVzID0gMDsKLQkJdjRsMl9zdGRfaWQgKnN0ZCA9IGFyZzsKLQotCQlkcHJpbnRrKDMsIEtFUk5fREVCVUcgIiVzOiBWSURJT0NfU19TVEQgLSBub3JtPTB4JWxseFxuIiwKLQkJCVpSX0RFVk5BTUUoenIpLCAodW5zaWduZWQgbG9uZyBsb25nKSpzdGQpOwotCi0JCWlmICgoKnN0ZCAmIFY0TDJfU1REX1BBTCkgJiYgISgqc3RkICYgflY0TDJfU1REX1BBTCkpCi0JCQlub3JtID0gVklERU9fTU9ERV9QQUw7Ci0JCWVsc2UgaWYgKCgqc3RkICYgVjRMMl9TVERfTlRTQykgJiYgISgqc3RkICYgflY0TDJfU1REX05UU0MpKQotCQkJbm9ybSA9IFZJREVPX01PREVfTlRTQzsKLQkJZWxzZSBpZiAoKCpzdGQgJiBWNEwyX1NURF9TRUNBTSkgJiYgISgqc3RkICYgflY0TDJfU1REX1NFQ0FNKSkKLQkJCW5vcm0gPSBWSURFT19NT0RFX1NFQ0FNOwotCQllbHNlIGlmICgqc3RkID09IFY0TDJfU1REX0FMTCkKLQkJCW5vcm0gPSBWSURFT19NT0RFX0FVVE87Ci0JCWVsc2UgewotCQkJZHByaW50aygxLAotCQkJCUtFUk5fRVJSCi0JCQkJIiVzOiBWSURJT0NfU19TVEQgLSBpbnZhbGlkIG5vcm0gMHglbGx4XG4iLAotCQkJCVpSX0RFVk5BTUUoenIpLCAodW5zaWduZWQgbG9uZyBsb25nKSpzdGQpOwotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQotCQltdXRleF9sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7Ci0JCWlmICgocmVzID0gem9yYW5fc2V0X25vcm0oenIsIG5vcm0pKSkKLQkJCWdvdG8gc3N0ZF91bmxvY2tfYW5kX3JldHVybjsKLQotCQlyZXMgPSB3YWl0X2dyYWJfcGVuZGluZyh6cik7Ci0Jc3N0ZF91bmxvY2tfYW5kX3JldHVybjoKLQkJbXV0ZXhfdW5sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7Ci0JCXJldHVybiByZXM7Ci0JfQotCQlicmVhazsKLQotCWNhc2UgVklESU9DX0VOVU1JTlBVVDoKLQl7Ci0JCXN0cnVjdCB2NGwyX2lucHV0ICppbnAgPSBhcmc7Ci0JCWludCBzdGF0dXM7Ci0KLQkJZHByaW50aygzLCBLRVJOX0RFQlVHICIlczogVklESU9DX0VOVU1JTlBVVCAtIGluZGV4PSVkXG4iLAotCQkJWlJfREVWTkFNRSh6ciksIGlucC0+aW5kZXgpOwotCi0JCWlmIChpbnAtPmluZGV4IDwgMCB8fCBpbnAtPmluZGV4ID49IHpyLT5jYXJkLmlucHV0cykKLQkJCXJldHVybiAtRUlOVkFMOwotCQllbHNlIHsKLQkJCWludCBpZCA9IGlucC0+aW5kZXg7Ci0JCQltZW1zZXQoaW5wLCAwLCBzaXplb2YoKmlucCkpOwotCQkJaW5wLT5pbmRleCA9IGlkOwotCQl9Ci0KLQkJc3RybmNweShpbnAtPm5hbWUsIHpyLT5jYXJkLmlucHV0W2lucC0+aW5kZXhdLm5hbWUsCi0JCQlzaXplb2YoaW5wLT5uYW1lKSAtIDEpOwotCQlpbnAtPnR5cGUgPSBWNEwyX0lOUFVUX1RZUEVfQ0FNRVJBOwotCQlpbnAtPnN0ZCA9IFY0TDJfU1REX0FMTDsKLQotCQkvKiBHZXQgc3RhdHVzIG9mIHZpZGVvIGRlY29kZXIgKi8KLQkJbXV0ZXhfbG9jaygmenItPnJlc291cmNlX2xvY2spOwotCQlkZWNvZGVyX2NvbW1hbmQoenIsIERFQ09ERVJfR0VUX1NUQVRVUywgJnN0YXR1cyk7Ci0JCW11dGV4X3VubG9jaygmenItPnJlc291cmNlX2xvY2spOwotCi0JCWlmICghKHN0YXR1cyAmIERFQ09ERVJfU1RBVFVTX0dPT0QpKSB7Ci0JCQlpbnAtPnN0YXR1cyB8PSBWNEwyX0lOX1NUX05PX1BPV0VSOwotCQkJaW5wLT5zdGF0dXMgfD0gVjRMMl9JTl9TVF9OT19TSUdOQUw7Ci0JCX0KLQkJaWYgKCEoc3RhdHVzICYgREVDT0RFUl9TVEFUVVNfQ09MT1IpKQotCQkJaW5wLT5zdGF0dXMgfD0gVjRMMl9JTl9TVF9OT19DT0xPUjsKLQotCQlyZXR1cm4gMDsKLQl9Ci0JCWJyZWFrOwotCi0JY2FzZSBWSURJT0NfR19JTlBVVDoKLQl7Ci0JCWludCAqaW5wdXQgPSBhcmc7Ci0KLQkJZHByaW50aygzLCBLRVJOX0RFQlVHICIlczogVklESU9DX0dfSU5QVVRcbiIsIFpSX0RFVk5BTUUoenIpKTsKLQotCQltdXRleF9sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7Ci0JCSppbnB1dCA9IHpyLT5pbnB1dDsKLQkJbXV0ZXhfdW5sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7Ci0KLQkJcmV0dXJuIDA7Ci0JfQotCQlicmVhazsKLQotCWNhc2UgVklESU9DX1NfSU5QVVQ6Ci0JewotCQlpbnQgKmlucHV0ID0gYXJnLCByZXMgPSAwOwotCi0JCWRwcmludGsoMywgS0VSTl9ERUJVRyAiJXM6IFZJRElPQ19TX0lOUFVUIC0gaW5wdXQ9JWRcbiIsCi0JCQlaUl9ERVZOQU1FKHpyKSwgKmlucHV0KTsKLQotCQltdXRleF9sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7Ci0JCWlmICgocmVzID0gem9yYW5fc2V0X2lucHV0KHpyLCAqaW5wdXQpKSkKLQkJCWdvdG8gc2lucHV0X3VubG9ja19hbmRfcmV0dXJuOwotCi0JCS8qIE1ha2Ugc3VyZSB0aGUgY2hhbmdlcyBjb21lIGludG8gZWZmZWN0ICovCi0JCXJlcyA9IHdhaXRfZ3JhYl9wZW5kaW5nKHpyKTsKLQlzaW5wdXRfdW5sb2NrX2FuZF9yZXR1cm46Ci0JCW11dGV4X3VubG9jaygmenItPnJlc291cmNlX2xvY2spOwotCQlyZXR1cm4gcmVzOwotCX0KLQkJYnJlYWs7Ci0KLQljYXNlIFZJRElPQ19FTlVNT1VUUFVUOgotCXsKLQkJc3RydWN0IHY0bDJfb3V0cHV0ICpvdXRwID0gYXJnOwotCi0JCWRwcmludGsoMywgS0VSTl9ERUJVRyAiJXM6IFZJRElPQ19FTlVNT1VUUFVUIC0gaW5kZXg9JWRcbiIsCi0JCQlaUl9ERVZOQU1FKHpyKSwgb3V0cC0+aW5kZXgpOwotCi0JCWlmIChvdXRwLT5pbmRleCAhPSAwKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQkJbWVtc2V0KG91dHAsIDAsIHNpemVvZigqb3V0cCkpOwotCQlvdXRwLT5pbmRleCA9IDA7Ci0JCW91dHAtPnR5cGUgPSBWNEwyX09VVFBVVF9UWVBFX0FOQUxPR1ZHQU9WRVJMQVk7Ci0JCXN0cm5jcHkob3V0cC0+bmFtZSwgIkF1dG9kZXRlY3QiLCBzaXplb2Yob3V0cC0+bmFtZSktMSk7Ci0KLQkJcmV0dXJuIDA7Ci0JfQotCQlicmVhazsKLQotCWNhc2UgVklESU9DX0dfT1VUUFVUOgotCXsKLQkJaW50ICpvdXRwdXQgPSBhcmc7Ci0KLQkJZHByaW50aygzLCBLRVJOX0RFQlVHICIlczogVklESU9DX0dfT1VUUFVUXG4iLCBaUl9ERVZOQU1FKHpyKSk7Ci0KLQkJKm91dHB1dCA9IDA7Ci0KLQkJcmV0dXJuIDA7Ci0JfQotCQlicmVhazsKLQotCWNhc2UgVklESU9DX1NfT1VUUFVUOgotCXsKLQkJaW50ICpvdXRwdXQgPSBhcmc7Ci0KLQkJZHByaW50aygzLCBLRVJOX0RFQlVHICIlczogVklESU9DX1NfT1VUUFVUIC0gb3V0cHV0PSVkXG4iLAotCQkJWlJfREVWTkFNRSh6ciksICpvdXRwdXQpOwotCi0JCWlmICgqb3V0cHV0ICE9IDApCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQotCQlyZXR1cm4gMDsKLQl9Ci0JCWJyZWFrOwotCi0JCS8qIGNyb3BwaW5nIChzdWItZnJhbWUgY2FwdHVyZSkgKi8KLQljYXNlIFZJRElPQ19DUk9QQ0FQOgotCXsKLQkJc3RydWN0IHY0bDJfY3JvcGNhcCAqY3JvcGNhcCA9IGFyZzsKLQkJaW50IHR5cGUgPSBjcm9wY2FwLT50eXBlLCByZXMgPSAwOwotCi0JCWRwcmludGsoMywgS0VSTl9FUlIgIiVzOiBWSURJT0NfQ1JPUENBUCAtIHR5cGU9JWRcbiIsCi0JCQlaUl9ERVZOQU1FKHpyKSwgY3JvcGNhcC0+dHlwZSk7Ci0KLQkJbWVtc2V0KGNyb3BjYXAsIDAsIHNpemVvZigqY3JvcGNhcCkpOwotCQljcm9wY2FwLT50eXBlID0gdHlwZTsKLQotCQltdXRleF9sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7Ci0KLQkJaWYgKGNyb3BjYXAtPnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WSURFT19PVVRQVVQgJiYKLQkJICAgIChjcm9wY2FwLT50eXBlICE9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSB8fAotCQkgICAgIGZoLT5tYXBfbW9kZSA9PSBaT1JBTl9NQVBfTU9ERV9SQVcpKSB7Ci0JCQlkcHJpbnRrKDEsCi0JCQkJS0VSTl9FUlIKLQkJCQkiJXM6IFZJRElPQ19DUk9QQ0FQIC0gc3ViY2FwdHVyZSBvbmx5IHN1cHBvcnRlZCBmb3IgY29tcHJlc3NlZCBjYXB0dXJlXG4iLAotCQkJCVpSX0RFVk5BTUUoenIpKTsKLQkJCXJlcyA9IC1FSU5WQUw7Ci0JCQlnb3RvIGNyb3BjYXBfdW5sb2NrX2FuZF9yZXR1cm47Ci0JCX0KLQotCQljcm9wY2FwLT5ib3VuZHMudG9wID0gY3JvcGNhcC0+Ym91bmRzLmxlZnQgPSAwOwotCQljcm9wY2FwLT5ib3VuZHMud2lkdGggPSBCVVpfTUFYX1dJRFRIOwotCQljcm9wY2FwLT5ib3VuZHMuaGVpZ2h0ID0gQlVaX01BWF9IRUlHSFQ7Ci0JCWNyb3BjYXAtPmRlZnJlY3QudG9wID0gY3JvcGNhcC0+ZGVmcmVjdC5sZWZ0ID0gMDsKLQkJY3JvcGNhcC0+ZGVmcmVjdC53aWR0aCA9IEJVWl9NSU5fV0lEVEg7Ci0JCWNyb3BjYXAtPmRlZnJlY3QuaGVpZ2h0ID0gQlVaX01JTl9IRUlHSFQ7Ci0JY3JvcGNhcF91bmxvY2tfYW5kX3JldHVybjoKLQkJbXV0ZXhfdW5sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7Ci0JCXJldHVybiByZXM7Ci0JfQotCQlicmVhazsKLQotCWNhc2UgVklESU9DX0dfQ1JPUDoKLQl7Ci0JCXN0cnVjdCB2NGwyX2Nyb3AgKmNyb3AgPSBhcmc7Ci0JCWludCB0eXBlID0gY3JvcC0+dHlwZSwgcmVzID0gMDsKLQotCQlkcHJpbnRrKDMsIEtFUk5fRVJSICIlczogVklESU9DX0dfQ1JPUCAtIHR5cGU9JWRcbiIsCi0JCQlaUl9ERVZOQU1FKHpyKSwgY3JvcC0+dHlwZSk7Ci0KLQkJbWVtc2V0KGNyb3AsIDAsIHNpemVvZigqY3JvcCkpOwotCQljcm9wLT50eXBlID0gdHlwZTsKLQotCQltdXRleF9sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7Ci0KLQkJaWYgKGNyb3AtPnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WSURFT19PVVRQVVQgJiYKLQkJICAgIChjcm9wLT50eXBlICE9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSB8fAotCQkgICAgIGZoLT5tYXBfbW9kZSA9PSBaT1JBTl9NQVBfTU9ERV9SQVcpKSB7Ci0JCQlkcHJpbnRrKDEsCi0JCQkJS0VSTl9FUlIKLQkJCQkiJXM6IFZJRElPQ19HX0NST1AgLSBzdWJjYXB0dXJlIG9ubHkgc3VwcG9ydGVkIGZvciBjb21wcmVzc2VkIGNhcHR1cmVcbiIsCi0JCQkJWlJfREVWTkFNRSh6cikpOwotCQkJcmVzID0gLUVJTlZBTDsKLQkJCWdvdG8gZ2Nyb3BfdW5sb2NrX2FuZF9yZXR1cm47Ci0JCX0KLQotCQljcm9wLT5jLnRvcCA9IGZoLT5qcGdfc2V0dGluZ3MuaW1nX3k7Ci0JCWNyb3AtPmMubGVmdCA9IGZoLT5qcGdfc2V0dGluZ3MuaW1nX3g7Ci0JCWNyb3AtPmMud2lkdGggPSBmaC0+anBnX3NldHRpbmdzLmltZ193aWR0aDsKLQkJY3JvcC0+Yy5oZWlnaHQgPSBmaC0+anBnX3NldHRpbmdzLmltZ19oZWlnaHQ7Ci0KLQlnY3JvcF91bmxvY2tfYW5kX3JldHVybjoKLQkJbXV0ZXhfdW5sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7Ci0KLQkJcmV0dXJuIHJlczsKLQl9Ci0JCWJyZWFrOwotCi0JY2FzZSBWSURJT0NfU19DUk9QOgotCXsKLQkJc3RydWN0IHY0bDJfY3JvcCAqY3JvcCA9IGFyZzsKLQkJaW50IHJlcyA9IDA7Ci0KLQkJc2V0dGluZ3MgPSBmaC0+anBnX3NldHRpbmdzOwotCi0JCWRwcmludGsoMywKLQkJCUtFUk5fRVJSCi0JCQkiJXM6IFZJRElPQ19TX0NST1AgLSB0eXBlPSVkLCB4PSVkLHk9JWQsdz0lZCxoPSVkXG4iLAotCQkJWlJfREVWTkFNRSh6ciksIGNyb3AtPnR5cGUsIGNyb3AtPmMubGVmdCwgY3JvcC0+Yy50b3AsCi0JCQljcm9wLT5jLndpZHRoLCBjcm9wLT5jLmhlaWdodCk7Ci0KLQkJbXV0ZXhfbG9jaygmenItPnJlc291cmNlX2xvY2spOwotCi0JCWlmIChmaC0+anBnX2J1ZmZlcnMuYWxsb2NhdGVkIHx8IGZoLT52NGxfYnVmZmVycy5hbGxvY2F0ZWQpIHsKLQkJCWRwcmludGsoMSwKLQkJCQlLRVJOX0VSUgotCQkJCSIlczogVklESU9DX1NfQ1JPUCAtIGNhbm5vdCBjaGFuZ2Ugc2V0dGluZ3Mgd2hpbGUgYWN0aXZlXG4iLAotCQkJCVpSX0RFVk5BTUUoenIpKTsKLQkJCXJlcyA9IC1FQlVTWTsKLQkJCWdvdG8gc2Nyb3BfdW5sb2NrX2FuZF9yZXR1cm47Ci0JCX0KLQotCQlpZiAoY3JvcC0+dHlwZSAhPSBWNEwyX0JVRl9UWVBFX1ZJREVPX09VVFBVVCAmJgotCQkgICAgKGNyb3AtPnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFIHx8Ci0JCSAgICAgZmgtPm1hcF9tb2RlID09IFpPUkFOX01BUF9NT0RFX1JBVykpIHsKLQkJCWRwcmludGsoMSwKLQkJCQlLRVJOX0VSUgotCQkJCSIlczogVklESU9DX0dfQ1JPUCAtIHN1YmNhcHR1cmUgb25seSBzdXBwb3J0ZWQgZm9yIGNvbXByZXNzZWQgY2FwdHVyZVxuIiwKLQkJCQlaUl9ERVZOQU1FKHpyKSk7Ci0JCQlyZXMgPSAtRUlOVkFMOwotCQkJZ290byBzY3JvcF91bmxvY2tfYW5kX3JldHVybjsKLQkJfQotCi0JCS8qIG1vdmUgaW50byBhIGZvcm0gdGhhdCB3ZSB1bmRlcnN0YW5kICovCi0JCXNldHRpbmdzLmltZ194ID0gY3JvcC0+Yy5sZWZ0OwotCQlzZXR0aW5ncy5pbWdfeSA9IGNyb3AtPmMudG9wOwotCQlzZXR0aW5ncy5pbWdfd2lkdGggPSBjcm9wLT5jLndpZHRoOwotCQlzZXR0aW5ncy5pbWdfaGVpZ2h0ID0gY3JvcC0+Yy5oZWlnaHQ7Ci0KLQkJLyogY2hlY2sgdmFsaWRpdHkgKi8KLQkJaWYgKChyZXMgPSB6b3Jhbl9jaGVja19qcGdfc2V0dGluZ3MoenIsICZzZXR0aW5ncykpKQotCQkJZ290byBzY3JvcF91bmxvY2tfYW5kX3JldHVybjsKLQotCQkvKiBhY2NlcHQgKi8KLQkJZmgtPmpwZ19zZXR0aW5ncyA9IHNldHRpbmdzOwotCi0Jc2Nyb3BfdW5sb2NrX2FuZF9yZXR1cm46Ci0JCW11dGV4X3VubG9jaygmenItPnJlc291cmNlX2xvY2spOwotCQlyZXR1cm4gcmVzOwotCX0KLQkJYnJlYWs7Ci0KLQljYXNlIFZJRElPQ19HX0pQRUdDT01QOgotCXsKLQkJc3RydWN0IHY0bDJfanBlZ2NvbXByZXNzaW9uICpwYXJhbXMgPSBhcmc7Ci0KLQkJZHByaW50aygzLCBLRVJOX0RFQlVHICIlczogVklESU9DX0dfSlBFR0NPTVBcbiIsCi0JCQlaUl9ERVZOQU1FKHpyKSk7Ci0KLQkJbWVtc2V0KHBhcmFtcywgMCwgc2l6ZW9mKCpwYXJhbXMpKTsKLQotCQltdXRleF9sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7Ci0KLQkJcGFyYW1zLT5xdWFsaXR5ID0gZmgtPmpwZ19zZXR0aW5ncy5qcGdfY29tcC5xdWFsaXR5OwotCQlwYXJhbXMtPkFQUG4gPSBmaC0+anBnX3NldHRpbmdzLmpwZ19jb21wLkFQUG47Ci0JCW1lbWNweShwYXJhbXMtPkFQUF9kYXRhLAotCQkgICAgICAgZmgtPmpwZ19zZXR0aW5ncy5qcGdfY29tcC5BUFBfZGF0YSwKLQkJICAgICAgIGZoLT5qcGdfc2V0dGluZ3MuanBnX2NvbXAuQVBQX2xlbik7Ci0JCXBhcmFtcy0+QVBQX2xlbiA9IGZoLT5qcGdfc2V0dGluZ3MuanBnX2NvbXAuQVBQX2xlbjsKLQkJbWVtY3B5KHBhcmFtcy0+Q09NX2RhdGEsCi0JCSAgICAgICBmaC0+anBnX3NldHRpbmdzLmpwZ19jb21wLkNPTV9kYXRhLAotCQkgICAgICAgZmgtPmpwZ19zZXR0aW5ncy5qcGdfY29tcC5DT01fbGVuKTsKLQkJcGFyYW1zLT5DT01fbGVuID0gZmgtPmpwZ19zZXR0aW5ncy5qcGdfY29tcC5DT01fbGVuOwotCQlwYXJhbXMtPmpwZWdfbWFya2VycyA9Ci0JCSAgICBmaC0+anBnX3NldHRpbmdzLmpwZ19jb21wLmpwZWdfbWFya2VyczsKLQotCQltdXRleF91bmxvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKLQotCQlyZXR1cm4gMDsKLQl9Ci0JCWJyZWFrOwotCi0JY2FzZSBWSURJT0NfU19KUEVHQ09NUDoKLQl7Ci0JCXN0cnVjdCB2NGwyX2pwZWdjb21wcmVzc2lvbiAqcGFyYW1zID0gYXJnOwotCQlpbnQgcmVzID0gMDsKLQotCQlzZXR0aW5ncyA9IGZoLT5qcGdfc2V0dGluZ3M7Ci0KLQkJZHByaW50aygzLAotCQkJS0VSTl9ERUJVRwotCQkJIiVzOiBWSURJT0NfU19KUEVHQ09NUCAtIHF1YWxpdHk9JWQsIEFQUE49JWQsIEFQUF9sZW49JWQsIENPTV9sZW49JWRcbiIsCi0JCQlaUl9ERVZOQU1FKHpyKSwgcGFyYW1zLT5xdWFsaXR5LCBwYXJhbXMtPkFQUG4sCi0JCQlwYXJhbXMtPkFQUF9sZW4sIHBhcmFtcy0+Q09NX2xlbik7Ci0KLQkJc2V0dGluZ3MuanBnX2NvbXAgPSAqcGFyYW1zOwotCi0JCW11dGV4X2xvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKLQotCQlpZiAoZmgtPnY0bF9idWZmZXJzLmFjdGl2ZSAhPSBaT1JBTl9GUkVFIHx8Ci0JCSAgICBmaC0+anBnX2J1ZmZlcnMuYWN0aXZlICE9IFpPUkFOX0ZSRUUpIHsKLQkJCWRwcmludGsoMSwKLQkJCQlLRVJOX1dBUk5JTkcKLQkJCQkiJXM6IFZJRElPQ19TX0pQRUdDT01QIGNhbGxlZCB3aGlsZSBpbiBwbGF5YmFjay9jYXB0dXJlIG1vZGVcbiIsCi0JCQkJWlJfREVWTkFNRSh6cikpOwotCQkJcmVzID0gLUVCVVNZOwotCQkJZ290byBzanBlZ2NfdW5sb2NrX2FuZF9yZXR1cm47Ci0JCX0KLQotCQlpZiAoKHJlcyA9IHpvcmFuX2NoZWNrX2pwZ19zZXR0aW5ncyh6ciwgJnNldHRpbmdzKSkpCi0JCQlnb3RvIHNqcGVnY191bmxvY2tfYW5kX3JldHVybjsKLQkJaWYgKCFmaC0+anBnX2J1ZmZlcnMuYWxsb2NhdGVkKQotCQkJZmgtPmpwZ19idWZmZXJzLmJ1ZmZlcl9zaXplID0KLQkJCSAgICB6b3Jhbl92NGwyX2NhbGNfYnVmc2l6ZSgmZmgtPmpwZ19zZXR0aW5ncyk7Ci0JCWZoLT5qcGdfc2V0dGluZ3MuanBnX2NvbXAgPSAqcGFyYW1zID0gc2V0dGluZ3MuanBnX2NvbXA7Ci0Jc2pwZWdjX3VubG9ja19hbmRfcmV0dXJuOgotCQltdXRleF91bmxvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKLQotCQlyZXR1cm4gMDsKLQl9Ci0JCWJyZWFrOwotCi0JY2FzZSBWSURJT0NfUVVFUllTVEQ6CS8qIHdoeSBpcyB0aGlzIHVzZWZ1bD8gKi8KLQl7Ci0JCXY0bDJfc3RkX2lkICpzdGQgPSBhcmc7Ci0KLQkJZHByaW50aygzLAotCQkJS0VSTl9ERUJVRyAiJXM6IFZJRElPQ19RVUVSWV9TVEQgLSBzdGQ9MHglbGx4XG4iLAotCQkJWlJfREVWTkFNRSh6ciksICh1bnNpZ25lZCBsb25nIGxvbmcpKnN0ZCk7Ci0KLQkJaWYgKCpzdGQgPT0gVjRMMl9TVERfQUxMIHx8ICpzdGQgPT0gVjRMMl9TVERfTlRTQyB8fAotCQkgICAgKnN0ZCA9PSBWNEwyX1NURF9QQUwgfHwgKCpzdGQgPT0gVjRMMl9TVERfU0VDQU0gJiYKLQkJCQkJICAgICB6ci0+Y2FyZC5ub3JtcyA9PSAzKSkgewotCQkJcmV0dXJuIDA7Ci0JCX0KLQotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0JCWJyZWFrOwotCi0JY2FzZSBWSURJT0NfVFJZX0ZNVDoKLQl7Ci0JCXN0cnVjdCB2NGwyX2Zvcm1hdCAqZm10ID0gYXJnOwotCQlpbnQgcmVzID0gMDsKLQotCQlkcHJpbnRrKDMsIEtFUk5fREVCVUcgIiVzOiBWSURJT0NfVFJZX0ZNVCAtIHR5cGU9JWRcbiIsCi0JCQlaUl9ERVZOQU1FKHpyKSwgZm10LT50eXBlKTsKLQotCQlzd2l0Y2ggKGZtdC0+dHlwZSkgewotCQljYXNlIFY0TDJfQlVGX1RZUEVfVklERU9fT1ZFUkxBWToKLQkJCW11dGV4X2xvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKLQotCQkJaWYgKGZtdC0+Zm10Lndpbi53LndpZHRoID4gQlVaX01BWF9XSURUSCkKLQkJCQlmbXQtPmZtdC53aW4udy53aWR0aCA9IEJVWl9NQVhfV0lEVEg7Ci0JCQlpZiAoZm10LT5mbXQud2luLncud2lkdGggPCBCVVpfTUlOX1dJRFRIKQotCQkJCWZtdC0+Zm10Lndpbi53LndpZHRoID0gQlVaX01JTl9XSURUSDsKLQkJCWlmIChmbXQtPmZtdC53aW4udy5oZWlnaHQgPiBCVVpfTUFYX0hFSUdIVCkKLQkJCQlmbXQtPmZtdC53aW4udy5oZWlnaHQgPSBCVVpfTUFYX0hFSUdIVDsKLQkJCWlmIChmbXQtPmZtdC53aW4udy5oZWlnaHQgPCBCVVpfTUlOX0hFSUdIVCkKLQkJCQlmbXQtPmZtdC53aW4udy5oZWlnaHQgPSBCVVpfTUlOX0hFSUdIVDsKLQotCQkJbXV0ZXhfdW5sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7Ci0JCQlicmVhazsKLQotCQljYXNlIFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRToKLQkJY2FzZSBWNEwyX0JVRl9UWVBFX1ZJREVPX09VVFBVVDoKLQkJCWlmIChmbXQtPmZtdC5waXguYnl0ZXNwZXJsaW5lID4gMCkKLQkJCQlyZXR1cm4gLUVJTlZBTDsKLQotCQkJbXV0ZXhfbG9jaygmenItPnJlc291cmNlX2xvY2spOwotCi0JCQlpZiAoZm10LT5mbXQucGl4LnBpeGVsZm9ybWF0ID09IFY0TDJfUElYX0ZNVF9NSlBFRykgewotCQkJCXNldHRpbmdzID0gZmgtPmpwZ19zZXR0aW5nczsKLQotCQkJCS8qIHdlIGFjdHVhbGx5IG5lZWQgdG8gc2V0ICdyZWFsJyBwYXJhbWV0ZXJzIG5vdyAqLwotCQkJCWlmICgoZm10LT5mbXQucGl4LmhlaWdodCAqIDIpID4KLQkJCQkgICAgQlVaX01BWF9IRUlHSFQpCi0JCQkJCXNldHRpbmdzLlRtcERjbSA9IDE7Ci0JCQkJZWxzZQotCQkJCQlzZXR0aW5ncy5UbXBEY20gPSAyOwotCQkJCXNldHRpbmdzLmRlY2ltYXRpb24gPSAwOwotCQkJCWlmIChmbXQtPmZtdC5waXguaGVpZ2h0IDw9Ci0JCQkJICAgIGZoLT5qcGdfc2V0dGluZ3MuaW1nX2hlaWdodCAvIDIpCi0JCQkJCXNldHRpbmdzLlZlckRjbSA9IDI7Ci0JCQkJZWxzZQotCQkJCQlzZXR0aW5ncy5WZXJEY20gPSAxOwotCQkJCWlmIChmbXQtPmZtdC5waXgud2lkdGggPD0KLQkJCQkgICAgZmgtPmpwZ19zZXR0aW5ncy5pbWdfd2lkdGggLyA0KQotCQkJCQlzZXR0aW5ncy5Ib3JEY20gPSA0OwotCQkJCWVsc2UgaWYgKGZtdC0+Zm10LnBpeC53aWR0aCA8PQotCQkJCQkgZmgtPmpwZ19zZXR0aW5ncy5pbWdfd2lkdGggLyAyKQotCQkJCQlzZXR0aW5ncy5Ib3JEY20gPSAyOwotCQkJCWVsc2UKLQkJCQkJc2V0dGluZ3MuSG9yRGNtID0gMTsKLQkJCQlpZiAoc2V0dGluZ3MuVG1wRGNtID09IDEpCi0JCQkJCXNldHRpbmdzLmZpZWxkX3Blcl9idWZmID0gMjsKLQkJCQllbHNlCi0JCQkJCXNldHRpbmdzLmZpZWxkX3Blcl9idWZmID0gMTsKLQotCQkJCS8qIGNoZWNrICovCi0JCQkJaWYgKChyZXMgPQotCQkJCSAgICAgem9yYW5fY2hlY2tfanBnX3NldHRpbmdzKHpyLAotCQkJCQkJCSAgICAgICZzZXR0aW5ncykpKQotCQkJCQlnb3RvIHRyeWZtdF91bmxvY2tfYW5kX3JldHVybjsKLQotCQkJCS8qIHRlbGwgdGhlIHVzZXIgd2hhdCB3ZSBhY3R1YWxseSBkaWQgKi8KLQkJCQlmbXQtPmZtdC5waXgud2lkdGggPQotCQkJCSAgICBzZXR0aW5ncy5pbWdfd2lkdGggLyBzZXR0aW5ncy5Ib3JEY207Ci0JCQkJZm10LT5mbXQucGl4LmhlaWdodCA9Ci0JCQkJICAgIHNldHRpbmdzLmltZ19oZWlnaHQgKiAyIC8KLQkJCQkgICAgKHNldHRpbmdzLlRtcERjbSAqIHNldHRpbmdzLlZlckRjbSk7Ci0JCQkJaWYgKHNldHRpbmdzLlRtcERjbSA9PSAxKQotCQkJCQlmbXQtPmZtdC5waXguZmllbGQgPQotCQkJCQkgICAgKGZoLT5qcGdfc2V0dGluZ3MuCi0JCQkJCSAgICAgb2RkX2V2ZW4gPyBWNEwyX0ZJRUxEX1NFUV9UQiA6Ci0JCQkJCSAgICAgVjRMMl9GSUVMRF9TRVFfQlQpOwotCQkJCWVsc2UKLQkJCQkJZm10LT5mbXQucGl4LmZpZWxkID0KLQkJCQkJICAgIChmaC0+anBnX3NldHRpbmdzLgotCQkJCQkgICAgIG9kZF9ldmVuID8gVjRMMl9GSUVMRF9UT1AgOgotCQkJCQkgICAgIFY0TDJfRklFTERfQk9UVE9NKTsKLQotCQkJCWZtdC0+Zm10LnBpeC5zaXplaW1hZ2UgPQotCQkJCSAgICB6b3Jhbl92NGwyX2NhbGNfYnVmc2l6ZSgmc2V0dGluZ3MpOwotCQkJfSBlbHNlIGlmIChmbXQtPnR5cGUgPT0KLQkJCQkgICBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUpIHsKLQkJCQlpbnQgaTsKLQotCQkJCWZvciAoaSA9IDA7IGkgPCBOVU1fRk9STUFUUzsgaSsrKQotCQkJCQlpZiAoem9yYW5fZm9ybWF0c1tpXS5mb3VyY2MgPT0KLQkJCQkJICAgIGZtdC0+Zm10LnBpeC5waXhlbGZvcm1hdCkKLQkJCQkJCWJyZWFrOwotCQkJCWlmIChpID09IE5VTV9GT1JNQVRTKSB7Ci0JCQkJCXJlcyA9IC1FSU5WQUw7Ci0JCQkJCWdvdG8gdHJ5Zm10X3VubG9ja19hbmRfcmV0dXJuOwotCQkJCX0KLQotCQkJCWlmIChmbXQtPmZtdC5waXgud2lkdGggPiBCVVpfTUFYX1dJRFRIKQotCQkJCQlmbXQtPmZtdC5waXgud2lkdGggPSBCVVpfTUFYX1dJRFRIOwotCQkJCWlmIChmbXQtPmZtdC5waXgud2lkdGggPCBCVVpfTUlOX1dJRFRIKQotCQkJCQlmbXQtPmZtdC5waXgud2lkdGggPSBCVVpfTUlOX1dJRFRIOwotCQkJCWlmIChmbXQtPmZtdC5waXguaGVpZ2h0ID4gQlVaX01BWF9IRUlHSFQpCi0JCQkJCWZtdC0+Zm10LnBpeC5oZWlnaHQgPQotCQkJCQkgICAgQlVaX01BWF9IRUlHSFQ7Ci0JCQkJaWYgKGZtdC0+Zm10LnBpeC5oZWlnaHQgPCBCVVpfTUlOX0hFSUdIVCkKLQkJCQkJZm10LT5mbXQucGl4LmhlaWdodCA9Ci0JCQkJCSAgICBCVVpfTUlOX0hFSUdIVDsKLQkJCX0gZWxzZSB7Ci0JCQkJcmVzID0gLUVJTlZBTDsKLQkJCQlnb3RvIHRyeWZtdF91bmxvY2tfYW5kX3JldHVybjsKLQkJCX0KLQkJdHJ5Zm10X3VubG9ja19hbmRfcmV0dXJuOgotCQkJbXV0ZXhfdW5sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7Ci0KLQkJCXJldHVybiByZXM7Ci0JCQlicmVhazsKLQotCQlkZWZhdWx0OgotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQotCQlyZXR1cm4gMDsKLQl9Ci0JCWJyZWFrOwotCi0JZGVmYXVsdDoKLQkJZHByaW50aygxLCBLRVJOX0RFQlVHICIlczogVU5LTk9XTiBpb2N0bCBjbWQ6IDB4JXhcbiIsCi0JCQlaUl9ERVZOQU1FKHpyKSwgY21kKTsKLQkJcmV0dXJuIC1FTk9JT0NUTENNRDsKLQkJYnJlYWs7Ci0KLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KLQotc3RhdGljIGludAotem9yYW5faW9jdGwgKHN0cnVjdCBpbm9kZSAqaW5vZGUsCi0JICAgICBzdHJ1Y3QgZmlsZSAgKmZpbGUsCi0JICAgICB1bnNpZ25lZCBpbnQgIGNtZCwKLQkgICAgIHVuc2lnbmVkIGxvbmcgYXJnKQotewotCXJldHVybiB2aWRlb191c2VyY29weShpbm9kZSwgZmlsZSwgY21kLCBhcmcsIHpvcmFuX2RvX2lvY3RsKTsKLX0KLQotc3RhdGljIHVuc2lnbmVkIGludAotem9yYW5fcG9sbCAoc3RydWN0IGZpbGUgKmZpbGUsCi0JICAgIHBvbGxfdGFibGUgICp3YWl0KQotewotCXN0cnVjdCB6b3Jhbl9maCAqZmggPSBmaWxlLT5wcml2YXRlX2RhdGE7Ci0Jc3RydWN0IHpvcmFuICp6ciA9IGZoLT56cjsKLQlpbnQgcmVzID0gMCwgZnJhbWU7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCS8qIHdlIHNob3VsZCBjaGVjayB3aGV0aGVyIGJ1ZmZlcnMgYXJlIHJlYWR5IHRvIGJlIHN5bmNlZCBvbgotCSAqICh3L28gd2FpdHMgLSBPX05PTkJMT0NLKSBoZXJlCi0JICogaWYgcmVhZHkgZm9yIHJlYWQgKHN5bmMpLCByZXR1cm4gUE9MTElOfFBPTExSRE5PUk0sCi0JICogaWYgcmVhZHkgZm9yIHdyaXRlIChzeW5jKSwgcmV0dXJuIFBPTExPVVR8UE9MTFdSTk9STSwKLQkgKiBpZiBlcnJvciwgcmV0dXJuIFBPTExFUlIsCi0JICogaWYgbm8gYnVmZmVycyBxdWV1ZWQgb3Igc28sIHJldHVybiBQT0xMTlZBTAotCSAqLwotCi0JbXV0ZXhfbG9jaygmenItPnJlc291cmNlX2xvY2spOwotCi0Jc3dpdGNoIChmaC0+bWFwX21vZGUpIHsKLQljYXNlIFpPUkFOX01BUF9NT0RFX1JBVzoKLQkJcG9sbF93YWl0KGZpbGUsICZ6ci0+djRsX2NhcHEsIHdhaXQpOwotCQlmcmFtZSA9IHpyLT52NGxfcGVuZFt6ci0+djRsX3N5bmNfdGFpbCAmIFY0TF9NQVNLX0ZSQU1FXTsKLQotCQlzcGluX2xvY2tfaXJxc2F2ZSgmenItPnNwaW5sb2NrLCBmbGFncyk7Ci0JCWRwcmludGsoMywKLQkJCUtFUk5fREVCVUcKLQkJCSIlczogJXMoKSByYXcgLSBhY3RpdmU9JWMsIHN5bmNfdGFpbD0lbHUvJWMsIHBlbmRfdGFpbD0lbHUsIHBlbmRfaGVhZD0lbHVcbiIsCi0JCQlaUl9ERVZOQU1FKHpyKSwgX19mdW5jX18sCi0JCQkiRkFMIltmaC0+djRsX2J1ZmZlcnMuYWN0aXZlXSwgenItPnY0bF9zeW5jX3RhaWwsCi0JCQkiVVBNRCJbenItPnY0bF9idWZmZXJzLmJ1ZmZlcltmcmFtZV0uc3RhdGVdLAotCQkJenItPnY0bF9wZW5kX3RhaWwsIHpyLT52NGxfcGVuZF9oZWFkKTsKLQkJLyogUHJvY2VzcyBpcyB0aGUgb25lIGNhcHR1cmluZz8gKi8KLQkJaWYgKGZoLT52NGxfYnVmZmVycy5hY3RpdmUgIT0gWk9SQU5fRlJFRSAmJgotCQkgICAgLyogQnVmZmVyIHJlYWR5IHRvIERRQlVGPyAqLwotCQkgICAgenItPnY0bF9idWZmZXJzLmJ1ZmZlcltmcmFtZV0uc3RhdGUgPT0gQlVaX1NUQVRFX0RPTkUpCi0JCQlyZXMgPSBQT0xMSU4gfCBQT0xMUkROT1JNOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ6ci0+c3BpbmxvY2ssIGZsYWdzKTsKLQotCQlicmVhazsKLQotCWNhc2UgWk9SQU5fTUFQX01PREVfSlBHX1JFQzoKLQljYXNlIFpPUkFOX01BUF9NT0RFX0pQR19QTEFZOgotCQlwb2xsX3dhaXQoZmlsZSwgJnpyLT5qcGdfY2FwcSwgd2FpdCk7Ci0JCWZyYW1lID0genItPmpwZ19wZW5kW3pyLT5qcGdfcXVlX3RhaWwgJiBCVVpfTUFTS19GUkFNRV07Ci0KLQkJc3Bpbl9sb2NrX2lycXNhdmUoJnpyLT5zcGlubG9jaywgZmxhZ3MpOwotCQlkcHJpbnRrKDMsCi0JCQlLRVJOX0RFQlVHCi0JCQkiJXM6ICVzKCkganBnIC0gYWN0aXZlPSVjLCBxdWVfdGFpbD0lbHUvJWMsIHF1ZV9oZWFkPSVsdSwgZG1hPSVsdS8lbHVcbiIsCi0JCQlaUl9ERVZOQU1FKHpyKSwgX19mdW5jX18sCi0JCQkiRkFMIltmaC0+anBnX2J1ZmZlcnMuYWN0aXZlXSwgenItPmpwZ19xdWVfdGFpbCwKLQkJCSJVUE1EIlt6ci0+anBnX2J1ZmZlcnMuYnVmZmVyW2ZyYW1lXS5zdGF0ZV0sCi0JCQl6ci0+anBnX3F1ZV9oZWFkLCB6ci0+anBnX2RtYV90YWlsLCB6ci0+anBnX2RtYV9oZWFkKTsKLQkJaWYgKGZoLT5qcGdfYnVmZmVycy5hY3RpdmUgIT0gWk9SQU5fRlJFRSAmJgotCQkgICAgenItPmpwZ19idWZmZXJzLmJ1ZmZlcltmcmFtZV0uc3RhdGUgPT0gQlVaX1NUQVRFX0RPTkUpIHsKLQkJCWlmIChmaC0+bWFwX21vZGUgPT0gWk9SQU5fTUFQX01PREVfSlBHX1JFQykKLQkJCQlyZXMgPSBQT0xMSU4gfCBQT0xMUkROT1JNOwotCQkJZWxzZQotCQkJCXJlcyA9IFBPTExPVVQgfCBQT0xMV1JOT1JNOwotCQl9Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnpyLT5zcGlubG9jaywgZmxhZ3MpOwotCi0JCWJyZWFrOwotCi0JZGVmYXVsdDoKLQkJZHByaW50aygxLAotCQkJS0VSTl9FUlIKLQkJCSIlczogem9yYW5fcG9sbCgpIC0gaW50ZXJuYWwgZXJyb3IsIHVua25vd24gbWFwX21vZGU9JWRcbiIsCi0JCQlaUl9ERVZOQU1FKHpyKSwgZmgtPm1hcF9tb2RlKTsKLQkJcmVzID0gUE9MTE5WQUw7Ci0JfQotCi0JbXV0ZXhfdW5sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7Ci0KLQlyZXR1cm4gcmVzOwotfQotCi0KLS8qCi0gKiBUaGlzIG1hcHMgdGhlIGJ1ZmZlcnMgdG8gdXNlciBzcGFjZS4KLSAqCi0gKiBEZXBlbmRpbmcgb24gdGhlIHN0YXRlIG9mIGZoLT5tYXBfbW9kZQotICogdGhlIFY0TCBvciB0aGUgTUpQRUcgYnVmZmVycyBhcmUgbWFwcGVkCi0gKiBwZXIgYnVmZmVyIG9yIGFsbCB0b2dldGhlcgotICoKLSAqIE5vdGUgdGhhdCB3ZSBuZWVkIHRvIGNvbm5lY3QgdG8gc29tZQotICogdW5tYXAgc2lnbmFsIGV2ZW50IHRvIHVubWFwIHRoZSBkZS1hbGxvY2F0ZQotICogdGhlIGJ1ZmZlciBhY2NvcmRpbmdseSAoem9yYW5fdm1fY2xvc2UoKSkKLSAqLwotCi1zdGF0aWMgdm9pZAotem9yYW5fdm1fb3BlbiAoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCi17Ci0Jc3RydWN0IHpvcmFuX21hcHBpbmcgKm1hcCA9IHZtYS0+dm1fcHJpdmF0ZV9kYXRhOwotCi0JbWFwLT5jb3VudCsrOwotfQotCi1zdGF0aWMgdm9pZAotem9yYW5fdm1fY2xvc2UgKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQotewotCXN0cnVjdCB6b3Jhbl9tYXBwaW5nICptYXAgPSB2bWEtPnZtX3ByaXZhdGVfZGF0YTsKLQlzdHJ1Y3QgZmlsZSAqZmlsZSA9IG1hcC0+ZmlsZTsKLQlzdHJ1Y3Qgem9yYW5fZmggKmZoID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwotCXN0cnVjdCB6b3JhbiAqenIgPSBmaC0+enI7Ci0JaW50IGk7Ci0KLQltYXAtPmNvdW50LS07Ci0JaWYgKG1hcC0+Y291bnQgPT0gMCkgewotCQlzd2l0Y2ggKGZoLT5tYXBfbW9kZSkgewotCQljYXNlIFpPUkFOX01BUF9NT0RFX0pQR19SRUM6Ci0JCWNhc2UgWk9SQU5fTUFQX01PREVfSlBHX1BMQVk6Ci0KLQkJCWRwcmludGsoMywgS0VSTl9JTkZPICIlczogbXVubWFwKE1KUEVHKVxuIiwKLQkJCQlaUl9ERVZOQU1FKHpyKSk7Ci0KLQkJCWZvciAoaSA9IDA7IGkgPCBmaC0+anBnX2J1ZmZlcnMubnVtX2J1ZmZlcnM7IGkrKykgewotCQkJCWlmIChmaC0+anBnX2J1ZmZlcnMuYnVmZmVyW2ldLm1hcCA9PSBtYXApIHsKLQkJCQkJZmgtPmpwZ19idWZmZXJzLmJ1ZmZlcltpXS5tYXAgPQotCQkJCQkgICAgTlVMTDsKLQkJCQl9Ci0JCQl9Ci0JCQlrZnJlZShtYXApOwotCi0JCQlmb3IgKGkgPSAwOyBpIDwgZmgtPmpwZ19idWZmZXJzLm51bV9idWZmZXJzOyBpKyspCi0JCQkJaWYgKGZoLT5qcGdfYnVmZmVycy5idWZmZXJbaV0ubWFwKQotCQkJCQlicmVhazsKLQkJCWlmIChpID09IGZoLT5qcGdfYnVmZmVycy5udW1fYnVmZmVycykgewotCQkJCW11dGV4X2xvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKLQotCQkJCWlmIChmaC0+anBnX2J1ZmZlcnMuYWN0aXZlICE9IFpPUkFOX0ZSRUUpIHsKLQkJCQkJanBnX3FidWYoZmlsZSwgLTEsIHpyLT5jb2RlY19tb2RlKTsKLQkJCQkJenItPmpwZ19idWZmZXJzLmFsbG9jYXRlZCA9IDA7Ci0JCQkJCXpyLT5qcGdfYnVmZmVycy5hY3RpdmUgPQotCQkJCQkgICAgZmgtPmpwZ19idWZmZXJzLmFjdGl2ZSA9Ci0JCQkJCSAgICBaT1JBTl9GUkVFOwotCQkJCX0KLQkJCQkvL2pwZ19mYnVmZmVyX2ZyZWUoZmlsZSk7Ci0JCQkJZmgtPmpwZ19idWZmZXJzLmFsbG9jYXRlZCA9IDA7Ci0JCQkJZmgtPmpwZ19idWZmZXJzLnJlYWR5X3RvX2JlX2ZyZWVkID0gMTsKLQotCQkJCW11dGV4X3VubG9jaygmenItPnJlc291cmNlX2xvY2spOwotCQkJfQotCi0JCQlicmVhazsKLQotCQljYXNlIFpPUkFOX01BUF9NT0RFX1JBVzoKLQotCQkJZHByaW50aygzLCBLRVJOX0lORk8gIiVzOiBtdW5tYXAoVjRMKVxuIiwKLQkJCQlaUl9ERVZOQU1FKHpyKSk7Ci0KLQkJCWZvciAoaSA9IDA7IGkgPCBmaC0+djRsX2J1ZmZlcnMubnVtX2J1ZmZlcnM7IGkrKykgewotCQkJCWlmIChmaC0+djRsX2J1ZmZlcnMuYnVmZmVyW2ldLm1hcCA9PSBtYXApIHsKLQkJCQkJLyogdW5xdWV1ZS91bm1hcCAqLwotCQkJCQlmaC0+djRsX2J1ZmZlcnMuYnVmZmVyW2ldLm1hcCA9Ci0JCQkJCSAgICBOVUxMOwotCQkJCX0KLQkJCX0KLQkJCWtmcmVlKG1hcCk7Ci0KLQkJCWZvciAoaSA9IDA7IGkgPCBmaC0+djRsX2J1ZmZlcnMubnVtX2J1ZmZlcnM7IGkrKykKLQkJCQlpZiAoZmgtPnY0bF9idWZmZXJzLmJ1ZmZlcltpXS5tYXApCi0JCQkJCWJyZWFrOwotCQkJaWYgKGkgPT0gZmgtPnY0bF9idWZmZXJzLm51bV9idWZmZXJzKSB7Ci0JCQkJbXV0ZXhfbG9jaygmenItPnJlc291cmNlX2xvY2spOwotCi0JCQkJaWYgKGZoLT52NGxfYnVmZmVycy5hY3RpdmUgIT0gWk9SQU5fRlJFRSkgewotCQkJCQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JCQkJCXNwaW5fbG9ja19pcnFzYXZlKCZ6ci0+c3BpbmxvY2ssIGZsYWdzKTsKLQkJCQkJenIzNjA1N19zZXRfbWVtZ3JhYih6ciwgMCk7Ci0JCQkJCXpyLT52NGxfYnVmZmVycy5hbGxvY2F0ZWQgPSAwOwotCQkJCQl6ci0+djRsX2J1ZmZlcnMuYWN0aXZlID0KLQkJCQkJICAgIGZoLT52NGxfYnVmZmVycy5hY3RpdmUgPQotCQkJCQkgICAgWk9SQU5fRlJFRTsKLQkJCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmenItPnNwaW5sb2NrLCBmbGFncyk7Ci0JCQkJfQotCQkJCS8vdjRsX2ZidWZmZXJfZnJlZShmaWxlKTsKLQkJCQlmaC0+djRsX2J1ZmZlcnMuYWxsb2NhdGVkID0gMDsKLQkJCQlmaC0+djRsX2J1ZmZlcnMucmVhZHlfdG9fYmVfZnJlZWQgPSAxOwotCi0JCQkJbXV0ZXhfdW5sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7Ci0JCQl9Ci0KLQkJCWJyZWFrOwotCi0JCWRlZmF1bHQ6Ci0JCQlwcmludGsoS0VSTl9FUlIKLQkJCSAgICAgICAiJXM6IG11bm1hcCgpIC0gaW50ZXJuYWwgZXJyb3IgLSB1bmtub3duIG1hcCBtb2RlICVkXG4iLAotCQkJICAgICAgIFpSX0RFVk5BTUUoenIpLCBmaC0+bWFwX21vZGUpOwotCQkJYnJlYWs7Ci0KLQkJfQotCX0KLX0KLQotc3RhdGljIHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCB6b3Jhbl92bV9vcHMgPSB7Ci0JLm9wZW4gPSB6b3Jhbl92bV9vcGVuLAotCS5jbG9zZSA9IHpvcmFuX3ZtX2Nsb3NlLAotfTsKLQotc3RhdGljIGludAotem9yYW5fbW1hcCAoc3RydWN0IGZpbGUgICAgICAgICAgICpmaWxlLAotCSAgICBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKLXsKLQlzdHJ1Y3Qgem9yYW5fZmggKmZoID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwotCXN0cnVjdCB6b3JhbiAqenIgPSBmaC0+enI7Ci0JdW5zaWduZWQgbG9uZyBzaXplID0gKHZtYS0+dm1fZW5kIC0gdm1hLT52bV9zdGFydCk7Ci0JdW5zaWduZWQgbG9uZyBvZmZzZXQgPSB2bWEtPnZtX3Bnb2ZmIDw8IFBBR0VfU0hJRlQ7Ci0JaW50IGksIGo7Ci0JdW5zaWduZWQgbG9uZyBwYWdlLCBzdGFydCA9IHZtYS0+dm1fc3RhcnQsIHRvZG8sIHBvcywgZnJhZ2xlbjsKLQlpbnQgZmlyc3QsIGxhc3Q7Ci0Jc3RydWN0IHpvcmFuX21hcHBpbmcgKm1hcDsKLQlpbnQgcmVzID0gMDsKLQotCWRwcmludGsoMywKLQkJS0VSTl9JTkZPICIlczogbW1hcCglcykgb2YgMHglMDhseC0weCUwOGx4IChzaXplPSVsdSlcbiIsCi0JCVpSX0RFVk5BTUUoenIpLAotCQlmaC0+bWFwX21vZGUgPT0gWk9SQU5fTUFQX01PREVfUkFXID8gIlY0TCIgOiAiTUpQRUciLAotCQl2bWEtPnZtX3N0YXJ0LCB2bWEtPnZtX2VuZCwgc2l6ZSk7Ci0KLQlpZiAoISh2bWEtPnZtX2ZsYWdzICYgVk1fU0hBUkVEKSB8fCAhKHZtYS0+dm1fZmxhZ3MgJiBWTV9SRUFEKSB8fAotCSAgICAhKHZtYS0+dm1fZmxhZ3MgJiBWTV9XUklURSkpIHsKLQkJZHByaW50aygxLAotCQkJS0VSTl9FUlIKLQkJCSIlczogbW1hcCgpIC0gbm8gTUFQX1NIQVJFRC9QUk9UX3tSRUFELFdSSVRFfSBnaXZlblxuIiwKLQkJCVpSX0RFVk5BTUUoenIpKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0Jc3dpdGNoIChmaC0+bWFwX21vZGUpIHsKLQotCWNhc2UgWk9SQU5fTUFQX01PREVfSlBHX1JFQzoKLQljYXNlIFpPUkFOX01BUF9NT0RFX0pQR19QTEFZOgotCi0JCS8qIGxvY2sgKi8KLQkJbXV0ZXhfbG9jaygmenItPnJlc291cmNlX2xvY2spOwotCi0JCS8qIE1hcCB0aGUgTUpQRUcgYnVmZmVycyAqLwotCQlpZiAoIWZoLT5qcGdfYnVmZmVycy5hbGxvY2F0ZWQpIHsKLQkJCWRwcmludGsoMSwKLQkJCQlLRVJOX0VSUgotCQkJCSIlczogem9yYW5fbW1hcChNSlBFRykgLSBidWZmZXJzIG5vdCB5ZXQgYWxsb2NhdGVkXG4iLAotCQkJCVpSX0RFVk5BTUUoenIpKTsKLQkJCXJlcyA9IC1FTk9NRU07Ci0JCQlnb3RvIGpwZ19tbWFwX3VubG9ja19hbmRfcmV0dXJuOwotCQl9Ci0KLQkJZmlyc3QgPSBvZmZzZXQgLyBmaC0+anBnX2J1ZmZlcnMuYnVmZmVyX3NpemU7Ci0JCWxhc3QgPSBmaXJzdCAtIDEgKyBzaXplIC8gZmgtPmpwZ19idWZmZXJzLmJ1ZmZlcl9zaXplOwotCQlpZiAob2Zmc2V0ICUgZmgtPmpwZ19idWZmZXJzLmJ1ZmZlcl9zaXplICE9IDAgfHwKLQkJICAgIHNpemUgJSBmaC0+anBnX2J1ZmZlcnMuYnVmZmVyX3NpemUgIT0gMCB8fCBmaXJzdCA8IDAgfHwKLQkJICAgIGxhc3QgPCAwIHx8IGZpcnN0ID49IGZoLT5qcGdfYnVmZmVycy5udW1fYnVmZmVycyB8fAotCQkgICAgbGFzdCA+PSBmaC0+anBnX2J1ZmZlcnMubnVtX2J1ZmZlcnMpIHsKLQkJCWRwcmludGsoMSwKLQkJCQlLRVJOX0VSUgotCQkJCSIlczogbW1hcChNSlBFRykgLSBvZmZzZXQ9JWx1IG9yIHNpemU9JWx1IGludmFsaWQgZm9yIGJ1ZnNpemU9JWQgYW5kIG51bWJ1ZnM9JWRcbiIsCi0JCQkJWlJfREVWTkFNRSh6ciksIG9mZnNldCwgc2l6ZSwKLQkJCQlmaC0+anBnX2J1ZmZlcnMuYnVmZmVyX3NpemUsCi0JCQkJZmgtPmpwZ19idWZmZXJzLm51bV9idWZmZXJzKTsKLQkJCXJlcyA9IC1FSU5WQUw7Ci0JCQlnb3RvIGpwZ19tbWFwX3VubG9ja19hbmRfcmV0dXJuOwotCQl9Ci0JCWZvciAoaSA9IGZpcnN0OyBpIDw9IGxhc3Q7IGkrKykgewotCQkJaWYgKGZoLT5qcGdfYnVmZmVycy5idWZmZXJbaV0ubWFwKSB7Ci0JCQkJZHByaW50aygxLAotCQkJCQlLRVJOX0VSUgotCQkJCQkiJXM6IG1tYXAoTUpQRUcpIC0gYnVmZmVyICVkIGFscmVhZHkgbWFwcGVkXG4iLAotCQkJCQlaUl9ERVZOQU1FKHpyKSwgaSk7Ci0JCQkJcmVzID0gLUVCVVNZOwotCQkJCWdvdG8ganBnX21tYXBfdW5sb2NrX2FuZF9yZXR1cm47Ci0JCQl9Ci0JCX0KLQotCQkvKiBtYXAgdGhlc2UgYnVmZmVycyAodjRsX2J1ZmZlcnNbaV0pICovCi0JCW1hcCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCB6b3Jhbl9tYXBwaW5nKSwgR0ZQX0tFUk5FTCk7Ci0JCWlmICghbWFwKSB7Ci0JCQlyZXMgPSAtRU5PTUVNOwotCQkJZ290byBqcGdfbW1hcF91bmxvY2tfYW5kX3JldHVybjsKLQkJfQotCQltYXAtPmZpbGUgPSBmaWxlOwotCQltYXAtPmNvdW50ID0gMTsKLQotCQl2bWEtPnZtX29wcyA9ICZ6b3Jhbl92bV9vcHM7Ci0JCXZtYS0+dm1fZmxhZ3MgfD0gVk1fRE9OVEVYUEFORDsKLQkJdm1hLT52bV9wcml2YXRlX2RhdGEgPSBtYXA7Ci0KLQkJZm9yIChpID0gZmlyc3Q7IGkgPD0gbGFzdDsgaSsrKSB7Ci0JCQlmb3IgKGogPSAwOwotCQkJICAgICBqIDwgZmgtPmpwZ19idWZmZXJzLmJ1ZmZlcl9zaXplIC8gUEFHRV9TSVpFOwotCQkJICAgICBqKyspIHsKLQkJCQlmcmFnbGVuID0KLQkJCQkgICAgKGxlMzJfdG9fY3B1KGZoLT5qcGdfYnVmZmVycy5idWZmZXJbaV0uCi0JCQkJICAgICBmcmFnX3RhYlsyICogaiArIDFdKSAmIH4xKSA8PCAxOwotCQkJCXRvZG8gPSBzaXplOwotCQkJCWlmICh0b2RvID4gZnJhZ2xlbikKLQkJCQkJdG9kbyA9IGZyYWdsZW47Ci0JCQkJcG9zID0KLQkJCQkgICAgbGUzMl90b19jcHUoZmgtPmpwZ19idWZmZXJzLgotCQkJCSAgICBidWZmZXJbaV0uZnJhZ190YWJbMiAqIGpdKTsKLQkJCQkvKiBzaG91bGQganVzdCBiZSBwb3Mgb24gaTM4NiAqLwotCQkJCXBhZ2UgPSB2aXJ0X3RvX3BoeXMoYnVzX3RvX3ZpcnQocG9zKSkKLQkJCQkJCQkJPj4gUEFHRV9TSElGVDsKLQkJCQlpZiAocmVtYXBfcGZuX3JhbmdlKHZtYSwgc3RhcnQsIHBhZ2UsCi0JCQkJCQkJdG9kbywgUEFHRV9TSEFSRUQpKSB7Ci0JCQkJCWRwcmludGsoMSwKLQkJCQkJCUtFUk5fRVJSCi0JCQkJCQkiJXM6IHpvcmFuX21tYXAoVjRMKSAtIHJlbWFwX3Bmbl9yYW5nZSBmYWlsZWRcbiIsCi0JCQkJCQlaUl9ERVZOQU1FKHpyKSk7Ci0JCQkJCXJlcyA9IC1FQUdBSU47Ci0JCQkJCWdvdG8ganBnX21tYXBfdW5sb2NrX2FuZF9yZXR1cm47Ci0JCQkJfQotCQkJCXNpemUgLT0gdG9kbzsKLQkJCQlzdGFydCArPSB0b2RvOwotCQkJCWlmIChzaXplID09IDApCi0JCQkJCWJyZWFrOwotCQkJCWlmIChsZTMyX3RvX2NwdShmaC0+anBnX2J1ZmZlcnMuYnVmZmVyW2ldLgotCQkJCSAgICBmcmFnX3RhYlsyICogaiArIDFdKSAmIDEpCi0JCQkJCWJyZWFrOwkvKiB3YXMgbGFzdCBmcmFnbWVudCAqLwotCQkJfQotCQkJZmgtPmpwZ19idWZmZXJzLmJ1ZmZlcltpXS5tYXAgPSBtYXA7Ci0JCQlpZiAoc2l6ZSA9PSAwKQotCQkJCWJyZWFrOwotCi0JCX0KLQlqcGdfbW1hcF91bmxvY2tfYW5kX3JldHVybjoKLQkJbXV0ZXhfdW5sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7Ci0KLQkJYnJlYWs7Ci0KLQljYXNlIFpPUkFOX01BUF9NT0RFX1JBVzoKLQotCQltdXRleF9sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7Ci0KLQkJLyogTWFwIHRoZSBWNEwgYnVmZmVycyAqLwotCQlpZiAoIWZoLT52NGxfYnVmZmVycy5hbGxvY2F0ZWQpIHsKLQkJCWRwcmludGsoMSwKLQkJCQlLRVJOX0VSUgotCQkJCSIlczogem9yYW5fbW1hcChWNEwpIC0gYnVmZmVycyBub3QgeWV0IGFsbG9jYXRlZFxuIiwKLQkJCQlaUl9ERVZOQU1FKHpyKSk7Ci0JCQlyZXMgPSAtRU5PTUVNOwotCQkJZ290byB2NGxfbW1hcF91bmxvY2tfYW5kX3JldHVybjsKLQkJfQotCi0JCWZpcnN0ID0gb2Zmc2V0IC8gZmgtPnY0bF9idWZmZXJzLmJ1ZmZlcl9zaXplOwotCQlsYXN0ID0gZmlyc3QgLSAxICsgc2l6ZSAvIGZoLT52NGxfYnVmZmVycy5idWZmZXJfc2l6ZTsKLQkJaWYgKG9mZnNldCAlIGZoLT52NGxfYnVmZmVycy5idWZmZXJfc2l6ZSAhPSAwIHx8Ci0JCSAgICBzaXplICUgZmgtPnY0bF9idWZmZXJzLmJ1ZmZlcl9zaXplICE9IDAgfHwgZmlyc3QgPCAwIHx8Ci0JCSAgICBsYXN0IDwgMCB8fCBmaXJzdCA+PSBmaC0+djRsX2J1ZmZlcnMubnVtX2J1ZmZlcnMgfHwKLQkJICAgIGxhc3QgPj0gZmgtPnY0bF9idWZmZXJzLmJ1ZmZlcl9zaXplKSB7Ci0JCQlkcHJpbnRrKDEsCi0JCQkJS0VSTl9FUlIKLQkJCQkiJXM6IG1tYXAoVjRMKSAtIG9mZnNldD0lbHUgb3Igc2l6ZT0lbHUgaW52YWxpZCBmb3IgYnVmc2l6ZT0lZCBhbmQgbnVtYnVmcz0lZFxuIiwKLQkJCQlaUl9ERVZOQU1FKHpyKSwgb2Zmc2V0LCBzaXplLAotCQkJCWZoLT52NGxfYnVmZmVycy5idWZmZXJfc2l6ZSwKLQkJCQlmaC0+djRsX2J1ZmZlcnMubnVtX2J1ZmZlcnMpOwotCQkJcmVzID0gLUVJTlZBTDsKLQkJCWdvdG8gdjRsX21tYXBfdW5sb2NrX2FuZF9yZXR1cm47Ci0JCX0KLQkJZm9yIChpID0gZmlyc3Q7IGkgPD0gbGFzdDsgaSsrKSB7Ci0JCQlpZiAoZmgtPnY0bF9idWZmZXJzLmJ1ZmZlcltpXS5tYXApIHsKLQkJCQlkcHJpbnRrKDEsCi0JCQkJCUtFUk5fRVJSCi0JCQkJCSIlczogbW1hcChWNEwpIC0gYnVmZmVyICVkIGFscmVhZHkgbWFwcGVkXG4iLAotCQkJCQlaUl9ERVZOQU1FKHpyKSwgaSk7Ci0JCQkJcmVzID0gLUVCVVNZOwotCQkJCWdvdG8gdjRsX21tYXBfdW5sb2NrX2FuZF9yZXR1cm47Ci0JCQl9Ci0JCX0KLQotCQkvKiBtYXAgdGhlc2UgYnVmZmVycyAodjRsX2J1ZmZlcnNbaV0pICovCi0JCW1hcCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCB6b3Jhbl9tYXBwaW5nKSwgR0ZQX0tFUk5FTCk7Ci0JCWlmICghbWFwKSB7Ci0JCQlyZXMgPSAtRU5PTUVNOwotCQkJZ290byB2NGxfbW1hcF91bmxvY2tfYW5kX3JldHVybjsKLQkJfQotCQltYXAtPmZpbGUgPSBmaWxlOwotCQltYXAtPmNvdW50ID0gMTsKLQotCQl2bWEtPnZtX29wcyA9ICZ6b3Jhbl92bV9vcHM7Ci0JCXZtYS0+dm1fZmxhZ3MgfD0gVk1fRE9OVEVYUEFORDsKLQkJdm1hLT52bV9wcml2YXRlX2RhdGEgPSBtYXA7Ci0KLQkJZm9yIChpID0gZmlyc3Q7IGkgPD0gbGFzdDsgaSsrKSB7Ci0JCQl0b2RvID0gc2l6ZTsKLQkJCWlmICh0b2RvID4gZmgtPnY0bF9idWZmZXJzLmJ1ZmZlcl9zaXplKQotCQkJCXRvZG8gPSBmaC0+djRsX2J1ZmZlcnMuYnVmZmVyX3NpemU7Ci0JCQlwYWdlID0gZmgtPnY0bF9idWZmZXJzLmJ1ZmZlcltpXS5mYnVmZmVyX3BoeXM7Ci0JCQlpZiAocmVtYXBfcGZuX3JhbmdlKHZtYSwgc3RhcnQsIHBhZ2UgPj4gUEFHRV9TSElGVCwKLQkJCQkJCQl0b2RvLCBQQUdFX1NIQVJFRCkpIHsKLQkJCQlkcHJpbnRrKDEsCi0JCQkJCUtFUk5fRVJSCi0JCQkJCSIlczogem9yYW5fbW1hcChWNEwpaSAtIHJlbWFwX3Bmbl9yYW5nZSBmYWlsZWRcbiIsCi0JCQkJCVpSX0RFVk5BTUUoenIpKTsKLQkJCQlyZXMgPSAtRUFHQUlOOwotCQkJCWdvdG8gdjRsX21tYXBfdW5sb2NrX2FuZF9yZXR1cm47Ci0JCQl9Ci0JCQlzaXplIC09IHRvZG87Ci0JCQlzdGFydCArPSB0b2RvOwotCQkJZmgtPnY0bF9idWZmZXJzLmJ1ZmZlcltpXS5tYXAgPSBtYXA7Ci0JCQlpZiAoc2l6ZSA9PSAwKQotCQkJCWJyZWFrOwotCQl9Ci0JdjRsX21tYXBfdW5sb2NrX2FuZF9yZXR1cm46Ci0JCW11dGV4X3VubG9jaygmenItPnJlc291cmNlX2xvY2spOwotCi0JCWJyZWFrOwotCi0JZGVmYXVsdDoKLQkJZHByaW50aygxLAotCQkJS0VSTl9FUlIKLQkJCSIlczogem9yYW5fbW1hcCgpIC0gaW50ZXJuYWwgZXJyb3IgLSB1bmtub3duIG1hcCBtb2RlICVkXG4iLAotCQkJWlJfREVWTkFNRSh6ciksIGZoLT5tYXBfbW9kZSk7Ci0JCWJyZWFrOwotCX0KLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB6b3Jhbl9mb3BzID0gewotCS5vd25lciA9IFRISVNfTU9EVUxFLAotCS5vcGVuID0gem9yYW5fb3BlbiwKLQkucmVsZWFzZSA9IHpvcmFuX2Nsb3NlLAotCS5pb2N0bCA9IHpvcmFuX2lvY3RsLAotI2lmZGVmIENPTkZJR19DT01QQVQKLQkuY29tcGF0X2lvY3RsCT0gdjRsX2NvbXBhdF9pb2N0bDMyLAotI2VuZGlmCi0JLmxsc2VlayA9IG5vX2xsc2VlaywKLQkucmVhZCA9IHpvcmFuX3JlYWQsCi0JLndyaXRlID0gem9yYW5fd3JpdGUsCi0JLm1tYXAgPSB6b3Jhbl9tbWFwLAotCS5wb2xsID0gem9yYW5fcG9sbCwKLX07Ci0KLXN0cnVjdCB2aWRlb19kZXZpY2Ugem9yYW5fdGVtcGxhdGUgX19kZXZpbml0ZGF0YSA9IHsKLQkubmFtZSA9IFpPUkFOX05BTUUsCi0JLmZvcHMgPSAmem9yYW5fZm9wcywKLQkucmVsZWFzZSA9ICZ6b3Jhbl92ZGV2X3JlbGVhc2UsCi0JLm1pbm9yID0gLTEKLX07Ci0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8venIzNjR4eC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby96cjM2NHh4LmMKaW5kZXggMThkMWM0Yi4uN2NkYWM5OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby96cjM2NHh4LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby96cjM2NHh4LmMKQEAgLTUyLDcgKzUyLDcgQEAKIAogCiAvKiBEZWJ1ZyBtYWNybyAqLwotI2RlZmluZSBEQkcoeC4uLikgaWYgKGRlYnVnKSBpbmZvKHgpCisjZGVmaW5lIERCRyh4Li4uKSBpZiAoZGVidWcpIHByaW50ayhLRVJOX0lORk8gS0JVSUxEX01PRE5BTUUgeCkKIAogCiAvKiBJbml0IG1ldGhvZHMsIG5lZWQgdG8gZmluZCBuaWNlciBuYW1lcyBmb3IgdGhlc2UKQEAgLTExNiw2ICsxMTYsNyBAQAogCWludCBoZWlnaHQ7CiAJaW50IG1ldGhvZDsKIAlzdHJ1Y3QgbXV0ZXggbG9jazsKKwlpbnQgdXNlcnM7CiB9OwogCiAKQEAgLTEyNyw3ICsxMjgsNyBAQAogCiAJdW5zaWduZWQgY2hhciAqdHJhbnNmZXJfYnVmZmVyID0ga21hbGxvYyhzaXplLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXRyYW5zZmVyX2J1ZmZlcikgewotCQlpbmZvKCJrbWFsbG9jKCVkKSBmYWlsZWQiLCBzaXplKTsKKwkJZGV2X2VycigmdWRldi0+ZGV2LCAia21hbGxvYyglZCkgZmFpbGVkXG4iLCBzaXplKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCkBAIC0xNDMsNyArMTQ0LDggQEAKIAlrZnJlZSh0cmFuc2Zlcl9idWZmZXIpOwogCiAJaWYgKHN0YXR1cyA8IDApCi0JCWluZm8oIkZhaWxlZCBzZW5kaW5nIGNvbnRyb2wgbWVzc2FnZSwgZXJyb3IgJWQuIiwgc3RhdHVzKTsKKwkJZGV2X2VycigmdWRldi0+ZGV2LAorCQkJIkZhaWxlZCBzZW5kaW5nIGNvbnRyb2wgbWVzc2FnZSwgZXJyb3IgJWQuXG4iLCBzdGF0dXMpOwogCiAJcmV0dXJuIHN0YXR1czsKIH0KQEAgLTMwMywxMSArMzA1LDExIEBACiAJCURCRygiYnVmZmVyIDogJWQgJWQiLCBjYW0tPmJ1ZmZlclswXSwgY2FtLT5idWZmZXJbMV0pOwogCQlEQkcoImJ1bGsgOiBuPSVkIHNpemU9JWQiLCBuLCBhY3R1YWxfbGVuZ3RoKTsKIAkJaWYgKG4gPCAwKSB7Ci0JCQlpbmZvKCJlcnJvciByZWFkaW5nIGJ1bGsgbXNnIik7CisJCQlkZXZfZXJyKCZjYW0tPnVkZXYtPmRldiwgImVycm9yIHJlYWRpbmcgYnVsayBtc2dcbiIpOwogCQkJcmV0dXJuIDA7CiAJCX0KIAkJaWYgKGFjdHVhbF9sZW5ndGggPCAwIHx8IGFjdHVhbF9sZW5ndGggPiBCVUZGRVJfU0laRSkgewotCQkJaW5mbygid3JvbmcgbnVtYmVyIG9mIGJ5dGVzIik7CisJCQlkZXZfZXJyKCZjYW0tPnVkZXYtPmRldiwgIndyb25nIG51bWJlciBvZiBieXRlc1xuIik7CiAJCQlyZXR1cm4gMDsKIAkJfQogCkBAIC02NDEsNDIgKzY0Myw0NyBAQAogCiAJREJHKCJ6cjM2NHh4X29wZW4iKTsKIAotCWNhbS0+c2tpcCA9IDI7CisJbXV0ZXhfbG9jaygmY2FtLT5sb2NrKTsKIAotCWVyciA9IHZpZGVvX2V4Y2x1c2l2ZV9vcGVuKGlub2RlLCBmaWxlKTsKLQlpZiAoZXJyIDwgMCkKLQkJcmV0dXJuIGVycjsKKwlpZiAoY2FtLT51c2VycykgeworCQllcnIgPSAtRUJVU1k7CisJCWdvdG8gb3V0OworCX0KIAogCWlmICghY2FtLT5mcmFtZWJ1ZikgewogCQljYW0tPmZyYW1lYnVmID0gdm1hbGxvY18zMihNQVhfRlJBTUVfU0laRSAqIEZSQU1FUyk7CiAJCWlmICghY2FtLT5mcmFtZWJ1ZikgewotCQkJaW5mbygidm1hbGxvY18zMiBmYWlsZWQhIik7Ci0JCQlyZXR1cm4gLUVOT01FTTsKKwkJCWRldl9lcnIoJmNhbS0+dWRldi0+ZGV2LCAidm1hbGxvY18zMiBmYWlsZWQhXG4iKTsKKwkJCWVyciA9IC1FTk9NRU07CisJCQlnb3RvIG91dDsKIAkJfQogCX0KIAotCW11dGV4X2xvY2soJmNhbS0+bG9jayk7CiAJZm9yIChpID0gMDsgaW5pdFtjYW0tPm1ldGhvZF1baV0uc2l6ZSAhPSAtMTsgaSsrKSB7CiAJCWVyciA9CiAJCSAgICBzZW5kX2NvbnRyb2xfbXNnKHVkZXYsIDEsIGluaXRbY2FtLT5tZXRob2RdW2ldLnZhbHVlLAogCQkJCSAgICAgMCwgaW5pdFtjYW0tPm1ldGhvZF1baV0uYnl0ZXMsCiAJCQkJICAgICBpbml0W2NhbS0+bWV0aG9kXVtpXS5zaXplKTsKIAkJaWYgKGVyciA8IDApIHsKLQkJCWluZm8oImVycm9yIGR1cmluZyBvcGVuIHNlcXVlbmNlOiAlZCIsIGkpOwotCQkJbXV0ZXhfdW5sb2NrKCZjYW0tPmxvY2spOwotCQkJcmV0dXJuIGVycjsKKwkJCWRldl9lcnIoJmNhbS0+dWRldi0+ZGV2LAorCQkJCSJlcnJvciBkdXJpbmcgb3BlbiBzZXF1ZW5jZTogJWRcbiIsIGkpOworCQkJZ290byBvdXQ7CiAJCX0KIAl9CiAKKwljYW0tPnNraXAgPSAyOworCWNhbS0+dXNlcnMrKzsKIAlmaWxlLT5wcml2YXRlX2RhdGEgPSB2ZGV2OwogCiAJLyogQWRkZWQgc29tZSBkZWxheSBoZXJlLCBzaW5jZSBvcGVuaW5nL2Nsb3NpbmcgdGhlIGNhbWVyYSBxdWlja2x5LAogCSAqIGxpa2UgRWtpZ2EgZG9lcyBkdXJpbmcgaXRzIHN0YXJ0dXAsIGNhbiBjcmFzaCB0aGUgd2ViY2FtCiAJICovCiAJbWRlbGF5KDEwMCk7CisJZXJyID0gMDsKIAorb3V0OgogCW11dGV4X3VubG9jaygmY2FtLT5sb2NrKTsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gZXJyOwogfQogCiAKQEAgLTY5NywyOCArNzA0LDMwIEBACiAJdWRldiA9IGNhbS0+dWRldjsKIAogCW11dGV4X2xvY2soJmNhbS0+bG9jayk7CisKKwljYW0tPnVzZXJzLS07CisJZmlsZS0+cHJpdmF0ZV9kYXRhID0gTlVMTDsKKwogCWZvciAoaSA9IDA7IGkgPCAyOyBpKyspIHsKIAkJZXJyID0KIAkJICAgIHNlbmRfY29udHJvbF9tc2codWRldiwgMSwgaW5pdFtjYW0tPm1ldGhvZF1baV0udmFsdWUsCiAJCQkJICAgICAwLCBpbml0W2ldW2NhbS0+bWV0aG9kXS5ieXRlcywKIAkJCQkgICAgIGluaXRbY2FtLT5tZXRob2RdW2ldLnNpemUpOwogCQlpZiAoZXJyIDwgMCkgewotCQkJaW5mbygiZXJyb3IgZHVyaW5nIHJlbGVhc2Ugc2VxdWVuY2UiKTsKLQkJCW11dGV4X3VubG9jaygmY2FtLT5sb2NrKTsKLQkJCXJldHVybiBlcnI7CisJCQlkZXZfZXJyKCZ1ZGV2LT5kZXYsICJlcnJvciBkdXJpbmcgcmVsZWFzZSBzZXF1ZW5jZVxuIik7CisJCQlnb3RvIG91dDsKIAkJfQogCX0KIAotCWZpbGUtPnByaXZhdGVfZGF0YSA9IE5VTEw7Ci0JdmlkZW9fZXhjbHVzaXZlX3JlbGVhc2UoaW5vZGUsIGZpbGUpOwotCiAJLyogQWRkZWQgc29tZSBkZWxheSBoZXJlLCBzaW5jZSBvcGVuaW5nL2Nsb3NpbmcgdGhlIGNhbWVyYSBxdWlja2x5LAogCSAqIGxpa2UgRWtpZ2EgZG9lcyBkdXJpbmcgaXRzIHN0YXJ0dXAsIGNhbiBjcmFzaCB0aGUgd2ViY2FtCiAJICovCiAJbWRlbGF5KDEwMCk7CisJZXJyID0gMDsKIAorb3V0OgogCW11dGV4X3VubG9jaygmY2FtLT5sb2NrKTsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gZXJyOwogfQogCiAKQEAgLTgwMSwxMyArODEwLDE0IEBACiAKIAlEQkcoInByb2JpbmcuLi4iKTsKIAotCWluZm8oRFJJVkVSX0RFU0MgIiBjb21wYXRpYmxlIHdlYmNhbSBwbHVnZ2VkIik7Ci0JaW5mbygibW9kZWwgJTA0eDolMDR4IGRldGVjdGVkIiwgdWRldi0+ZGVzY3JpcHRvci5pZFZlbmRvciwKLQkgICAgIHVkZXYtPmRlc2NyaXB0b3IuaWRQcm9kdWN0KTsKKwlkZXZfaW5mbygmaW50Zi0+ZGV2LCBEUklWRVJfREVTQyAiIGNvbXBhdGlibGUgd2ViY2FtIHBsdWdnZWRcbiIpOworCWRldl9pbmZvKCZpbnRmLT5kZXYsICJtb2RlbCAlMDR4OiUwNHggZGV0ZWN0ZWRcbiIsCisJCSBsZTE2X3RvX2NwdSh1ZGV2LT5kZXNjcmlwdG9yLmlkVmVuZG9yKSwKKwkJIGxlMTZfdG9fY3B1KHVkZXYtPmRlc2NyaXB0b3IuaWRQcm9kdWN0KSk7CiAKIAljYW0gPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgenIzNjR4eF9jYW1lcmEpLCBHRlBfS0VSTkVMKTsKIAlpZiAoY2FtID09IE5VTEwpIHsKLQkJaW5mbygiY2FtOiBvdXQgb2YgbWVtb3J5ICEiKTsKKwkJZGV2X2VycigmdWRldi0+ZGV2LCAiY2FtOiBvdXQgb2YgbWVtb3J5ICFcbiIpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAJLyogc2F2ZSB0aGUgaW5pdCBtZXRob2QgdXNlZCBieSB0aGlzIGNhbWVyYSAqLwpAQCAtODE1LDcgKzgyNSw3IEBACiAKIAljYW0tPnZkZXYgPSB2aWRlb19kZXZpY2VfYWxsb2MoKTsKIAlpZiAoY2FtLT52ZGV2ID09IE5VTEwpIHsKLQkJaW5mbygiY2FtLT52ZGV2OiBvdXQgb2YgbWVtb3J5ICEiKTsKKwkJZGV2X2VycigmdWRldi0+ZGV2LCAiY2FtLT52ZGV2OiBvdXQgb2YgbWVtb3J5ICFcbiIpOwogCQlrZnJlZShjYW0pOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CkBAIC04MjcsNyArODM3LDcgQEAKIAljYW0tPnVkZXYgPSB1ZGV2OwogCiAJaWYgKChjYW0tPmJ1ZmZlciA9IGttYWxsb2MoQlVGRkVSX1NJWkUsIEdGUF9LRVJORUwpKSA9PSBOVUxMKSB7Ci0JCWluZm8oImNhbS0+YnVmZmVyOiBvdXQgb2YgbWVtb3J5ICEiKTsKKwkJZGV2X2luZm8oJnVkZXYtPmRldiwgImNhbS0+YnVmZmVyOiBvdXQgb2YgbWVtb3J5ICFcbiIpOwogCQl2aWRlb19kZXZpY2VfcmVsZWFzZShjYW0tPnZkZXYpOwogCQlrZnJlZShjYW0pOwogCQlyZXR1cm4gLUVOT0RFVjsKQEAgLTgzNSwxNyArODQ1LDE3IEBACiAKIAlzd2l0Y2ggKG1vZGUpIHsKIAljYXNlIDE6Ci0JCWluZm8oIjE2MHgxMjAgbW9kZSBzZWxlY3RlZCIpOworCQlkZXZfaW5mbygmdWRldi0+ZGV2LCAiMTYweDEyMCBtb2RlIHNlbGVjdGVkXG4iKTsKIAkJY2FtLT53aWR0aCA9IDE2MDsKIAkJY2FtLT5oZWlnaHQgPSAxMjA7CiAJCWJyZWFrOwogCWNhc2UgMjoKLQkJaW5mbygiNjQweDQ4MCBtb2RlIHNlbGVjdGVkIik7CisJCWRldl9pbmZvKCZ1ZGV2LT5kZXYsICI2NDB4NDgwIG1vZGUgc2VsZWN0ZWRcbiIpOwogCQljYW0tPndpZHRoID0gNjQwOwogCQljYW0tPmhlaWdodCA9IDQ4MDsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJaW5mbygiMzIweDI0MCBtb2RlIHNlbGVjdGVkIik7CisJCWRldl9pbmZvKCZ1ZGV2LT5kZXYsICIzMjB4MjQwIG1vZGUgc2VsZWN0ZWRcbiIpOwogCQljYW0tPndpZHRoID0gMzIwOwogCQljYW0tPmhlaWdodCA9IDI0MDsKIAkJYnJlYWs7CkBAIC04NjUsNyArODc1LDcgQEAKIAogCWVyciA9IHZpZGVvX3JlZ2lzdGVyX2RldmljZShjYW0tPnZkZXYsIFZGTF9UWVBFX0dSQUJCRVIsIC0xKTsKIAlpZiAoZXJyKSB7Ci0JCWluZm8oInZpZGVvX3JlZ2lzdGVyX2RldmljZSBmYWlsZWQiKTsKKwkJZGV2X2VycigmdWRldi0+ZGV2LCAidmlkZW9fcmVnaXN0ZXJfZGV2aWNlIGZhaWxlZFxuIik7CiAJCXZpZGVvX2RldmljZV9yZWxlYXNlKGNhbS0+dmRldik7CiAJCWtmcmVlKGNhbS0+YnVmZmVyKTsKIAkJa2ZyZWUoY2FtKTsKQEAgLTg3NCw3ICs4ODQsOCBAQAogCiAJdXNiX3NldF9pbnRmZGF0YShpbnRmLCBjYW0pOwogCi0JaW5mbyhEUklWRVJfREVTQyAiIGNvbnRyb2xsaW5nIHZpZGVvIGRldmljZSAlZCIsIGNhbS0+dmRldi0+bWlub3IpOworCWRldl9pbmZvKCZ1ZGV2LT5kZXYsIERSSVZFUl9ERVNDICIgY29udHJvbGxpbmcgdmlkZW8gZGV2aWNlICVkXG4iLAorCQkgY2FtLT52ZGV2LT5taW5vcik7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTg4NCw3ICs4OTUsNyBAQAogCXN0cnVjdCB6cjM2NHh4X2NhbWVyYSAqY2FtID0gdXNiX2dldF9pbnRmZGF0YShpbnRmKTsKIAl1c2Jfc2V0X2ludGZkYXRhKGludGYsIE5VTEwpOwogCWRldl9zZXRfZHJ2ZGF0YSgmaW50Zi0+ZGV2LCBOVUxMKTsKLQlpbmZvKERSSVZFUl9ERVNDICIgd2ViY2FtIHVucGx1Z2dlZCIpOworCWRldl9pbmZvKCZpbnRmLT5kZXYsIERSSVZFUl9ERVNDICIgd2ViY2FtIHVucGx1Z2dlZFxuIik7CiAJaWYgKGNhbS0+dmRldikKIAkJdmlkZW9fdW5yZWdpc3Rlcl9kZXZpY2UoY2FtLT52ZGV2KTsKIAljYW0tPnZkZXYgPSBOVUxMOwpAQCAtOTEzLDE2ICs5MjQsMTYgQEAKIAlpbnQgcmV0dmFsOwogCXJldHZhbCA9IHVzYl9yZWdpc3RlcigmenIzNjR4eF9kcml2ZXIpOwogCWlmIChyZXR2YWwpCi0JCWluZm8oInVzYl9yZWdpc3RlciBmYWlsZWQhIik7CisJCXByaW50ayhLRVJOX0VSUiBLQlVJTERfTU9ETkFNRSAiOiB1c2JfcmVnaXN0ZXIgZmFpbGVkIVxuIik7CiAJZWxzZQotCQlpbmZvKERSSVZFUl9ERVNDICIgbW9kdWxlIGxvYWRlZCIpOworCQlwcmludGsoS0VSTl9JTkZPIEtCVUlMRF9NT0ROQU1FICI6ICIgRFJJVkVSX0RFU0MgIlxuIik7CiAJcmV0dXJuIHJldHZhbDsKIH0KIAogCiBzdGF0aWMgdm9pZCBfX2V4aXQgenIzNjR4eF9leGl0KHZvaWQpCiB7Ci0JaW5mbyhEUklWRVJfREVTQyAiIG1vZHVsZSB1bmxvYWRlZCIpOworCXByaW50ayhLRVJOX0lORk8gS0JVSUxEX01PRE5BTUUgIjogIiBEUklWRVJfREVTQyAiIG1vZHVsZSB1bmxvYWRlZFxuIik7CiAJdXNiX2RlcmVnaXN0ZXIoJnpyMzY0eHhfZHJpdmVyKTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZW1zdGljay9jb3JlL21zcHJvX2Jsb2NrLmMgYi9kcml2ZXJzL21lbXN0aWNrL2NvcmUvbXNwcm9fYmxvY2suYwppbmRleCA2ZTI5MWJmLi41MjYzOTEzIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lbXN0aWNrL2NvcmUvbXNwcm9fYmxvY2suYworKysgYi9kcml2ZXJzL21lbXN0aWNrL2NvcmUvbXNwcm9fYmxvY2suYwpAQCAtMTA0NCw3ICsxMDQ0LDYgQEAKIAogCQlzX2F0dHItPmRldl9hdHRyLmF0dHIubmFtZSA9IHNfYXR0ci0+bmFtZTsKIAkJc19hdHRyLT5kZXZfYXR0ci5hdHRyLm1vZGUgPSBTX0lSVUdPOwotCQlzX2F0dHItPmRldl9hdHRyLmF0dHIub3duZXIgPSBUSElTX01PRFVMRTsKIAkJc19hdHRyLT5kZXZfYXR0ci5zaG93ID0gbXNwcm9fYmxvY2tfYXR0cl9zaG93KHNfYXR0ci0+aWQpOwogCiAJCWlmICghcmMpCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lc3NhZ2UvaTJvL01ha2VmaWxlIGIvZHJpdmVycy9tZXNzYWdlL2kyby9NYWtlZmlsZQppbmRleCAyYzJlMzlhLi5iMDk4MmRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lc3NhZ2UvaTJvL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbWVzc2FnZS9pMm8vTWFrZWZpbGUKQEAgLTUsNyArNSw3IEBACiAjIEluIHRoZSBmdXR1cmUsIHNvbWUgb2YgdGhlc2Ugc2hvdWxkIGJlIGJ1aWx0IGNvbmRpdGlvbmFsbHkuCiAjCiAKLWkyb19jb3JlLXkJCSs9IGlvcC5vIGRyaXZlci5vIGRldmljZS5vIGRlYnVnLm8gcGNpLm8gZXhlYy1vc20ubworaTJvX2NvcmUteQkJKz0gaW9wLm8gZHJpdmVyLm8gZGV2aWNlLm8gZGVidWcubyBwY2kubyBleGVjLW9zbS5vIG1lbW9yeS5vCiBpMm9fYnVzLXkJCSs9IGJ1cy1vc20ubwogaTJvX2NvbmZpZy15CQkrPSBjb25maWctb3NtLm8KIG9iai0kKENPTkZJR19JMk8pCSs9IGkyb19jb3JlLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVzc2FnZS9pMm8vZGV2aWNlLmMgYi9kcml2ZXJzL21lc3NhZ2UvaTJvL2RldmljZS5jCmluZGV4IDg3NzRjNjcuLjU0YzJlOWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVzc2FnZS9pMm8vZGV2aWNlLmMKKysrIGIvZHJpdmVycy9tZXNzYWdlL2kyby9kZXZpY2UuYwpAQCAtNDY3LDcgKzQ2Nyw3IEBACiAKIAlyZXMudmlydCA9IE5VTEw7CiAKLQlpZiAoaTJvX2RtYV9hbGxvYyhkZXYsICZyZXMsIHJlc2xlbiwgR0ZQX0tFUk5FTCkpCisJaWYgKGkyb19kbWFfYWxsb2MoZGV2LCAmcmVzLCByZXNsZW4pKQogCQlyZXR1cm4gLUVOT01FTTsKIAogCW1zZyA9IGkyb19tc2dfZ2V0X3dhaXQoYywgSTJPX1RJTUVPVVRfTUVTU0FHRV9HRVQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZXNzYWdlL2kyby9leGVjLW9zbS5jIGIvZHJpdmVycy9tZXNzYWdlL2kyby9leGVjLW9zbS5jCmluZGV4IDZjYmNjMjEuLjU2ZmFlZjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVzc2FnZS9pMm8vZXhlYy1vc20uYworKysgYi9kcml2ZXJzL21lc3NhZ2UvaTJvL2V4ZWMtb3NtLmMKQEAgLTM4OCw4ICszODgsOCBAQAogCiAJZGV2ID0gJmMtPnBkZXYtPmRldjsKIAotCWlmIChpMm9fZG1hX3JlYWxsb2MKLQkgICAgKGRldiwgJmMtPmRsY3QsIGxlMzJfdG9fY3B1KHNiLT5leHBlY3RlZF9sY3Rfc2l6ZSksIEdGUF9LRVJORUwpKQorCWlmIChpMm9fZG1hX3JlYWxsb2MoZGV2LCAmYy0+ZGxjdCwKKwkJCQkJbGUzMl90b19jcHUoc2ItPmV4cGVjdGVkX2xjdF9zaXplKSkpCiAJCXJldHVybiAtRU5PTUVNOwogCiAJbXNnID0gaTJvX21zZ19nZXRfd2FpdChjLCBJMk9fVElNRU9VVF9NRVNTQUdFX0dFVCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lc3NhZ2UvaTJvL2kyb19jb25maWcuYyBiL2RyaXZlcnMvbWVzc2FnZS9pMm8vaTJvX2NvbmZpZy5jCmluZGV4IDQyMzhkZTkuLmEzZmFiZGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVzc2FnZS9pMm8vaTJvX2NvbmZpZy5jCisrKyBiL2RyaXZlcnMvbWVzc2FnZS9pMm8vaTJvX2NvbmZpZy5jCkBAIC0yNjAsNyArMjYwLDcgQEAKIAlpZiAoSVNfRVJSKG1zZykpCiAJCXJldHVybiBQVFJfRVJSKG1zZyk7CiAKLQlpZiAoaTJvX2RtYV9hbGxvYygmYy0+cGRldi0+ZGV2LCAmYnVmZmVyLCBmcmFnc2l6ZSwgR0ZQX0tFUk5FTCkpIHsKKwlpZiAoaTJvX2RtYV9hbGxvYygmYy0+cGRldi0+ZGV2LCAmYnVmZmVyLCBmcmFnc2l6ZSkpIHsKIAkJaTJvX21zZ19ub3AoYywgbXNnKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQpAQCAtMzM5LDcgKzMzOSw3IEBACiAJaWYgKElTX0VSUihtc2cpKQogCQlyZXR1cm4gUFRSX0VSUihtc2cpOwogCi0JaWYgKGkyb19kbWFfYWxsb2MoJmMtPnBkZXYtPmRldiwgJmJ1ZmZlciwgZnJhZ3NpemUsIEdGUF9LRVJORUwpKSB7CisJaWYgKGkyb19kbWFfYWxsb2MoJmMtPnBkZXYtPmRldiwgJmJ1ZmZlciwgZnJhZ3NpemUpKSB7CiAJCWkyb19tc2dfbm9wKGMsIG1zZyk7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KQEAgLTYzNCw5ICs2MzQsNyBAQAogCQkJc2dfc2l6ZSA9IHNnW2ldLmZsYWdfY291bnQgJiAweGZmZmZmZjsKIAkJCXAgPSAmKHNnX2xpc3Rbc2dfaW5kZXhdKTsKIAkJCS8qIEFsbG9jYXRlIG1lbW9yeSBmb3IgdGhlIHRyYW5zZmVyICovCi0JCQlpZiAoaTJvX2RtYV9hbGxvYwotCQkJICAgICgmYy0+cGRldi0+ZGV2LCBwLCBzZ19zaXplLAotCQkJICAgICBQQ0lfRE1BX0JJRElSRUNUSU9OQUwpKSB7CisJCQlpZiAoaTJvX2RtYV9hbGxvYygmYy0+cGRldi0+ZGV2LCBwLCBzZ19zaXplKSkgewogCQkJCXByaW50ayhLRVJOX0RFQlVHCiAJCQkJICAgICAgICIlczogQ291bGQgbm90IGFsbG9jYXRlIFNHIGJ1ZmZlciAtIHNpemUgPSAlZCBidWZmZXIgbnVtYmVyICVkIG9mICVkXG4iLAogCQkJCSAgICAgICBjLT5uYW1lLCBzZ19zaXplLCBpLCBzZ19jb3VudCk7CkBAIC03ODAsMTIgKzc3OCwxMSBAQAogCXUzMiBzaXplID0gMDsKIAl1MzIgcmVwbHlfc2l6ZSA9IDA7CiAJdTMyIHJjb2RlID0gMDsKLQl2b2lkICpzZ19saXN0W1NHX1RBQkxFU0laRV07CisJc3RydWN0IGkyb19kbWEgc2dfbGlzdFtTR19UQUJMRVNJWkVdOwogCXUzMiBzZ19vZmZzZXQgPSAwOwogCXUzMiBzZ19jb3VudCA9IDA7CiAJaW50IHNnX2luZGV4ID0gMDsKIAl1MzIgaSA9IDA7Ci0Jdm9pZCAqcCA9IE5VTEw7CiAJaTJvX3N0YXR1c19ibG9jayAqc2I7CiAJc3RydWN0IGkyb19tZXNzYWdlICptc2c7CiAJdW5zaWduZWQgaW50IGlvcDsKQEAgLTg0Miw2ICs4MzksNyBAQAogCW1lbXNldChzZ19saXN0LCAwLCBzaXplb2Yoc2dfbGlzdFswXSkgKiBTR19UQUJMRVNJWkUpOwogCWlmIChzZ19vZmZzZXQpIHsKIAkJc3RydWN0IHNnX3NpbXBsZV9lbGVtZW50ICpzZzsKKwkJc3RydWN0IGkyb19kbWEgKnA7CiAKIAkJaWYgKHNnX29mZnNldCAqIDQgPj0gc2l6ZSkgewogCQkJcmNvZGUgPSAtRUZBVUxUOwpAQCAtODcxLDIyICs4NjksMjIgQEAKIAkJCQlnb3RvIHNnX2xpc3RfY2xlYW51cDsKIAkJCX0KIAkJCXNnX3NpemUgPSBzZ1tpXS5mbGFnX2NvdW50ICYgMHhmZmZmZmY7CisJCQlwID0gJihzZ19saXN0W3NnX2luZGV4XSk7CisJCQlpZiAoaTJvX2RtYV9hbGxvYygmYy0+cGRldi0+ZGV2LCBwLCBzZ19zaXplKSkgewogCQkJLyogQWxsb2NhdGUgbWVtb3J5IGZvciB0aGUgdHJhbnNmZXIgKi8KLQkJCXAgPSBrbWFsbG9jKHNnX3NpemUsIEdGUF9LRVJORUwpOwotCQkJaWYgKCFwKSB7CiAJCQkJcHJpbnRrKEtFUk5fREVCVUcKIAkJCQkgICAgICAgIiVzOiBDb3VsZCBub3QgYWxsb2NhdGUgU0cgYnVmZmVyIC0gc2l6ZSA9ICVkIGJ1ZmZlciBudW1iZXIgJWQgb2YgJWRcbiIsCiAJCQkJICAgICAgIGMtPm5hbWUsIHNnX3NpemUsIGksIHNnX2NvdW50KTsKIAkJCQlyY29kZSA9IC1FTk9NRU07CiAJCQkJZ290byBzZ19saXN0X2NsZWFudXA7CiAJCQl9Ci0JCQlzZ19saXN0W3NnX2luZGV4KytdID0gcDsJLy8gc2dsaXN0IGluZGV4ZWQgd2l0aCBpbnB1dCBmcmFtZSwgbm90IG91ciBpbnRlcm5hbCBmcmFtZS4KKwkJCXNnX2luZGV4Kys7CiAJCQkvKiBDb3B5IGluIHRoZSB1c2VyJ3MgU0cgYnVmZmVyIGlmIG5lY2Vzc2FyeSAqLwogCQkJaWYgKHNnW2ldLgogCQkJICAgIGZsYWdfY291bnQgJiAweDA0MDAwMDAwIC8qSTJPX1NHTF9GTEFHU19ESVIgKi8gKSB7CiAJCQkJLy8gVE9ETyA2NGJpdCBmaXgKIAkJCQlpZiAoY29weV9mcm9tX3VzZXIKLQkJCQkgICAgKHAsICh2b2lkIF9fdXNlciAqKXNnW2ldLmFkZHJfYnVzLAorCQkJCSAgICAocC0+dmlydCwgKHZvaWQgX191c2VyICopc2dbaV0uYWRkcl9idXMsCiAJCQkJICAgICBzZ19zaXplKSkgewogCQkJCQlwcmludGsoS0VSTl9ERUJVRwogCQkJCQkgICAgICAgIiVzOiBDb3VsZCBub3QgY29weSBTRyBidWYgJWQgRlJPTSB1c2VyXG4iLApAQCAtODk1LDggKzg5Myw3IEBACiAJCQkJCWdvdG8gc2dfbGlzdF9jbGVhbnVwOwogCQkJCX0KIAkJCX0KLQkJCS8vVE9ETyA2NGJpdCBmaXgKLQkJCXNnW2ldLmFkZHJfYnVzID0gdmlydF90b19idXMocCk7CisJCQlzZ1tpXS5hZGRyX2J1cyA9IHAtPnBoeXM7CiAJCX0KIAl9CiAKQEAgLTkwOCw3ICs5MDUsNyBAQAogCX0KIAogCWlmIChzZ19vZmZzZXQpIHsKLQkJdTMyIHJtc2dbMTI4XTsKKwkJdTMyIHJtc2dbSTJPX09VVEJPVU5EX01TR19GUkFNRV9TSVpFXTsKIAkJLyogQ29weSBiYWNrIHRoZSBTY2F0dGVyIEdhdGhlciBidWZmZXJzIGJhY2sgdG8gdXNlciBzcGFjZSAqLwogCQl1MzIgajsKIAkJLy8gVE9ETyA2NGJpdCBmaXgKQEAgLTk0MiwxMSArOTM5LDExIEBACiAJCQkJc2dfc2l6ZSA9IHNnW2pdLmZsYWdfY291bnQgJiAweGZmZmZmZjsKIAkJCQkvLyBUT0RPIDY0Yml0IGZpeAogCQkJCWlmIChjb3B5X3RvX3VzZXIKLQkJCQkgICAgKCh2b2lkIF9fdXNlciAqKXNnW2pdLmFkZHJfYnVzLCBzZ19saXN0W2pdLAorCQkJCSAgICAoKHZvaWQgX191c2VyICopc2dbal0uYWRkcl9idXMsIHNnX2xpc3Rbal0udmlydCwKIAkJCQkgICAgIHNnX3NpemUpKSB7CiAJCQkJCXByaW50ayhLRVJOX1dBUk5JTkcKIAkJCQkJICAgICAgICIlczogQ291bGQgbm90IGNvcHkgJXAgVE8gdXNlciAleFxuIiwKLQkJCQkJICAgICAgIGMtPm5hbWUsIHNnX2xpc3Rbal0sCisJCQkJCSAgICAgICBjLT5uYW1lLCBzZ19saXN0W2pdLnZpcnQsCiAJCQkJCSAgICAgICBzZ1tqXS5hZGRyX2J1cyk7CiAJCQkJCXJjb2RlID0gLUVGQVVMVDsKIAkJCQkJZ290byBzZ19saXN0X2NsZWFudXA7CkBAIC05NzMsNyArOTcwLDcgQEAKIAl9CiAKIAlmb3IgKGkgPSAwOyBpIDwgc2dfaW5kZXg7IGkrKykKLQkJa2ZyZWUoc2dfbGlzdFtpXSk7CisJCWkyb19kbWFfZnJlZSgmYy0+cGRldi0+ZGV2LCAmc2dfbGlzdFtpXSk7CiAKIGNsZWFudXA6CiAJa2ZyZWUocmVwbHkpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZXNzYWdlL2kyby9pb3AuYyBiL2RyaXZlcnMvbWVzc2FnZS9pMm8vaW9wLmMKaW5kZXggZGE3MTVlMS4uYmUyYjU5MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZXNzYWdlL2kyby9pb3AuYworKysgYi9kcml2ZXJzL21lc3NhZ2UvaTJvL2lvcC5jCkBAIC0xMDA0LDcgKzEwMDQsNyBAQAogCiAJCXNpemUgPSBocnQtPm51bV9lbnRyaWVzICogaHJ0LT5lbnRyeV9sZW4gPDwgMjsKIAkJaWYgKHNpemUgPiBjLT5ocnQubGVuKSB7Ci0JCQlpZiAoaTJvX2RtYV9yZWFsbG9jKGRldiwgJmMtPmhydCwgc2l6ZSwgR0ZQX0tFUk5FTCkpCisJCQlpZiAoaTJvX2RtYV9yZWFsbG9jKGRldiwgJmMtPmhydCwgc2l6ZSkpCiAJCQkJcmV0dXJuIC1FTk9NRU07CiAJCQllbHNlCiAJCQkJaHJ0ID0gYy0+aHJ0LnZpcnQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lc3NhZ2UvaTJvL21lbW9yeS5jIGIvZHJpdmVycy9tZXNzYWdlL2kyby9tZW1vcnkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNWNjOTVjCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZXNzYWdlL2kyby9tZW1vcnkuYwpAQCAtMCwwICsxLDMxMyBAQAorLyoKKyAqCUZ1bmN0aW9ucyB0byBoYW5kbGUgSTJPIG1lbW9yeQorICoKKyAqCVB1bGxlZCBmcm9tIHRoZSBpbmxpbmVzIGluIGkybyBoZWFkZXJzIGFuZCB1bmlubGluZWQKKyAqCisgKgorICoJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqCXVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICoJRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorICoJb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvaTJvLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSAiY29yZS5oIgorCisvKiBQcm90ZWN0cyBvdXIgMzIvNjRiaXQgbWFzayBzd2l0Y2hpbmcgKi8KK3N0YXRpYyBERUZJTkVfTVVURVgobWVtX2xvY2spOworCisvKioKKyAqCWkyb19zZ190YWJsZXNpemUgLSBDYWxjdWxhdGUgdGhlIG1heGltdW0gbnVtYmVyIG9mIGVsZW1lbnRzIGluIGEgU0dMCisgKglAYzogSTJPIGNvbnRyb2xsZXIgZm9yIHdoaWNoIHRoZSBjYWxjdWxhdGlvbiBzaG91bGQgYmUgZG9uZQorICoJQGJvZHlfc2l6ZTogbWF4aW11bSBib2R5IHNpemUgdXNlZCBmb3IgbWVzc2FnZSBpbiAzMi1iaXQgd29yZHMuCisgKgorICoJUmV0dXJuIHRoZSBtYXhpbXVtIG51bWJlciBvZiBTRyBlbGVtZW50cyBpbiBhIFNHIGxpc3QuCisgKi8KK3UxNiBpMm9fc2dfdGFibGVzaXplKHN0cnVjdCBpMm9fY29udHJvbGxlciAqYywgdTE2IGJvZHlfc2l6ZSkKK3sKKwlpMm9fc3RhdHVzX2Jsb2NrICpzYiA9IGMtPnN0YXR1c19ibG9jay52aXJ0OworCXUxNiBzZ19jb3VudCA9CisJICAgIChzYi0+aW5ib3VuZF9mcmFtZV9zaXplIC0gc2l6ZW9mKHN0cnVjdCBpMm9fbWVzc2FnZSkgLyA0KSAtCisJICAgIGJvZHlfc2l6ZTsKKworCWlmIChjLT5wYWVfc3VwcG9ydCkgeworCQkvKgorCQkgKiBmb3IgNjQtYml0IGEgU0cgYXR0cmlidXRlIGVsZW1lbnQgbXVzdCBiZSBhZGRlZCBhbmQgZWFjaAorCQkgKiBTRyBlbGVtZW50IG5lZWRzIDEyIGJ5dGVzIGluc3RlYWQgb2YgOC4KKwkJICovCisJCXNnX2NvdW50IC09IDI7CisJCXNnX2NvdW50IC89IDM7CisJfSBlbHNlCisJCXNnX2NvdW50IC89IDI7CisKKwlpZiAoYy0+c2hvcnRfcmVxICYmIChzZ19jb3VudCA+IDgpKQorCQlzZ19jb3VudCA9IDg7CisKKwlyZXR1cm4gc2dfY291bnQ7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChpMm9fc2dfdGFibGVzaXplKTsKKworCisvKioKKyAqCWkyb19kbWFfbWFwX3NpbmdsZSAtIE1hcCBwb2ludGVyIHRvIGNvbnRyb2xsZXIgYW5kIGZpbGwgaW4gSTJPIG1lc3NhZ2UuCisgKglAYzogSTJPIGNvbnRyb2xsZXIKKyAqCUBwdHI6IHBvaW50ZXIgdG8gdGhlIGRhdGEgd2hpY2ggc2hvdWxkIGJlIG1hcHBlZAorICoJQHNpemU6IHNpemUgb2YgZGF0YSBpbiBieXRlcworICoJQGRpcmVjdGlvbjogRE1BX1RPX0RFVklDRSAvIERNQV9GUk9NX0RFVklDRQorICoJQHNnX3B0cjogcG9pbnRlciB0byB0aGUgU0cgbGlzdCBpbnNpZGUgdGhlIEkyTyBtZXNzYWdlCisgKgorICoJVGhpcyBmdW5jdGlvbiBkb2VzIGFsbCBuZWNlc3NhcnkgRE1BIGhhbmRsaW5nIGFuZCBhbHNvIHdyaXRlcyB0aGUgSTJPCisgKglTR0wgZWxlbWVudHMgaW50byB0aGUgSTJPIG1lc3NhZ2UuIEZvciBkZXRhaWxzIG9uIERNQSBoYW5kbGluZyBzZWUgYWxzbworICoJZG1hX21hcF9zaW5nbGUoKS4gVGhlIHBvaW50ZXIgc2dfcHRyIHdpbGwgb25seSBiZSBzZXQgdG8gdGhlIGVuZCBvZiB0aGUKKyAqCVNHIGxpc3QgaWYgdGhlIGFsbG9jYXRpb24gd2FzIHN1Y2Nlc3NmdWwuCisgKgorICoJUmV0dXJucyBETUEgYWRkcmVzcyB3aGljaCBtdXN0IGJlIGNoZWNrZWQgZm9yIGZhaWx1cmVzIHVzaW5nCisgKglkbWFfbWFwcGluZ19lcnJvcigpLgorICovCitkbWFfYWRkcl90IGkyb19kbWFfbWFwX3NpbmdsZShzdHJ1Y3QgaTJvX2NvbnRyb2xsZXIgKmMsIHZvaWQgKnB0ciwKKwkJCQkJICAgIHNpemVfdCBzaXplLAorCQkJCQkgICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uLAorCQkJCQkgICAgdTMyICoqIHNnX3B0cikKK3sKKwl1MzIgc2dfZmxhZ3M7CisJdTMyICptcHRyID0gKnNnX3B0cjsKKwlkbWFfYWRkcl90IGRtYV9hZGRyOworCisJc3dpdGNoIChkaXJlY3Rpb24pIHsKKwljYXNlIERNQV9UT19ERVZJQ0U6CisJCXNnX2ZsYWdzID0gMHhkNDAwMDAwMDsKKwkJYnJlYWs7CisJY2FzZSBETUFfRlJPTV9ERVZJQ0U6CisJCXNnX2ZsYWdzID0gMHhkMDAwMDAwMDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIDA7CisJfQorCisJZG1hX2FkZHIgPSBkbWFfbWFwX3NpbmdsZSgmYy0+cGRldi0+ZGV2LCBwdHIsIHNpemUsIGRpcmVjdGlvbik7CisJaWYgKCFkbWFfbWFwcGluZ19lcnJvcigmYy0+cGRldi0+ZGV2LCBkbWFfYWRkcikpIHsKKyNpZmRlZiBDT05GSUdfSTJPX0VYVF9BREFQVEVDX0RNQTY0CisJCWlmICgoc2l6ZW9mKGRtYV9hZGRyX3QpID4gNCkgJiYgYy0+cGFlX3N1cHBvcnQpIHsKKwkJCSptcHRyKysgPSBjcHVfdG9fbGUzMigweDdDMDIwMDAyKTsKKwkJCSptcHRyKysgPSBjcHVfdG9fbGUzMihQQUdFX1NJWkUpOworCQl9CisjZW5kaWYKKworCQkqbXB0cisrID0gY3B1X3RvX2xlMzIoc2dfZmxhZ3MgfCBzaXplKTsKKwkJKm1wdHIrKyA9IGNwdV90b19sZTMyKGkyb19kbWFfbG93KGRtYV9hZGRyKSk7CisjaWZkZWYgQ09ORklHX0kyT19FWFRfQURBUFRFQ19ETUE2NAorCQlpZiAoKHNpemVvZihkbWFfYWRkcl90KSA+IDQpICYmIGMtPnBhZV9zdXBwb3J0KQorCQkJKm1wdHIrKyA9IGNwdV90b19sZTMyKGkyb19kbWFfaGlnaChkbWFfYWRkcikpOworI2VuZGlmCisJCSpzZ19wdHIgPSBtcHRyOworCX0KKwlyZXR1cm4gZG1hX2FkZHI7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChpMm9fZG1hX21hcF9zaW5nbGUpOworCisvKioKKyAqCWkyb19kbWFfbWFwX3NnIC0gTWFwIGEgU0cgTGlzdCB0byBjb250cm9sbGVyIGFuZCBmaWxsIGluIEkyTyBtZXNzYWdlLgorICoJQGM6IEkyTyBjb250cm9sbGVyCisgKglAc2c6IFNHIGxpc3QgdG8gYmUgbWFwcGVkCisgKglAc2dfY291bnQ6IG51bWJlciBvZiBlbGVtZW50cyBpbiB0aGUgU0cgbGlzdAorICoJQGRpcmVjdGlvbjogRE1BX1RPX0RFVklDRSAvIERNQV9GUk9NX0RFVklDRQorICoJQHNnX3B0cjogcG9pbnRlciB0byB0aGUgU0cgbGlzdCBpbnNpZGUgdGhlIEkyTyBtZXNzYWdlCisgKgorICoJVGhpcyBmdW5jdGlvbiBkb2VzIGFsbCBuZWNlc3NhcnkgRE1BIGhhbmRsaW5nIGFuZCBhbHNvIHdyaXRlcyB0aGUgSTJPCisgKglTR0wgZWxlbWVudHMgaW50byB0aGUgSTJPIG1lc3NhZ2UuIEZvciBkZXRhaWxzIG9uIERNQSBoYW5kbGluZyBzZWUgYWxzbworICoJZG1hX21hcF9zZygpLiBUaGUgcG9pbnRlciBzZ19wdHIgd2lsbCBvbmx5IGJlIHNldCB0byB0aGUgZW5kIG9mIHRoZSBTRworICoJbGlzdCBpZiB0aGUgYWxsb2NhdGlvbiB3YXMgc3VjY2Vzc2Z1bC4KKyAqCisgKglSZXR1cm5zIDAgb24gZmFpbHVyZSBvciAxIG9uIHN1Y2Nlc3MuCisgKi8KK2ludCBpMm9fZG1hX21hcF9zZyhzdHJ1Y3QgaTJvX2NvbnRyb2xsZXIgKmMsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csCisJICAgIGludCBzZ19jb3VudCwgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uLCB1MzIgKiogc2dfcHRyKQoreworCXUzMiBzZ19mbGFnczsKKwl1MzIgKm1wdHIgPSAqc2dfcHRyOworCisJc3dpdGNoIChkaXJlY3Rpb24pIHsKKwljYXNlIERNQV9UT19ERVZJQ0U6CisJCXNnX2ZsYWdzID0gMHgxNDAwMDAwMDsKKwkJYnJlYWs7CisJY2FzZSBETUFfRlJPTV9ERVZJQ0U6CisJCXNnX2ZsYWdzID0gMHgxMDAwMDAwMDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIDA7CisJfQorCisJc2dfY291bnQgPSBkbWFfbWFwX3NnKCZjLT5wZGV2LT5kZXYsIHNnLCBzZ19jb3VudCwgZGlyZWN0aW9uKTsKKwlpZiAoIXNnX2NvdW50KQorCQlyZXR1cm4gMDsKKworI2lmZGVmIENPTkZJR19JMk9fRVhUX0FEQVBURUNfRE1BNjQKKwlpZiAoKHNpemVvZihkbWFfYWRkcl90KSA+IDQpICYmIGMtPnBhZV9zdXBwb3J0KSB7CisJCSptcHRyKysgPSBjcHVfdG9fbGUzMigweDdDMDIwMDAyKTsKKwkJKm1wdHIrKyA9IGNwdV90b19sZTMyKFBBR0VfU0laRSk7CisJfQorI2VuZGlmCisKKwl3aGlsZSAoc2dfY291bnQtLSA+IDApIHsKKwkJaWYgKCFzZ19jb3VudCkKKwkJCXNnX2ZsYWdzIHw9IDB4QzAwMDAwMDA7CisJCSptcHRyKysgPSBjcHVfdG9fbGUzMihzZ19mbGFncyB8IHNnX2RtYV9sZW4oc2cpKTsKKwkJKm1wdHIrKyA9IGNwdV90b19sZTMyKGkyb19kbWFfbG93KHNnX2RtYV9hZGRyZXNzKHNnKSkpOworI2lmZGVmIENPTkZJR19JMk9fRVhUX0FEQVBURUNfRE1BNjQKKwkJaWYgKChzaXplb2YoZG1hX2FkZHJfdCkgPiA0KSAmJiBjLT5wYWVfc3VwcG9ydCkKKwkJCSptcHRyKysgPSBjcHVfdG9fbGUzMihpMm9fZG1hX2hpZ2goc2dfZG1hX2FkZHJlc3Moc2cpKSk7CisjZW5kaWYKKwkJc2cgPSBzZ19uZXh0KHNnKTsKKwl9CisJKnNnX3B0ciA9IG1wdHI7CisKKwlyZXR1cm4gMTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGkyb19kbWFfbWFwX3NnKTsKKworLyoqCisgKglpMm9fZG1hX2FsbG9jIC0gQWxsb2NhdGUgRE1BIG1lbW9yeQorICoJQGRldjogc3RydWN0IGRldmljZSBwb2ludGVyIHRvIHRoZSBQQ0kgZGV2aWNlIG9mIHRoZSBJMk8gY29udHJvbGxlcgorICoJQGFkZHI6IGkyb19kbWEgc3RydWN0IHdoaWNoIHNob3VsZCBnZXQgdGhlIERNQSBidWZmZXIKKyAqCUBsZW46IGxlbmd0aCBvZiB0aGUgbmV3IERNQSBtZW1vcnkKKyAqCisgKglBbGxvY2F0ZSBhIGNvaGVyZW50IERNQSBtZW1vcnkgYW5kIHdyaXRlIHRoZSBwb2ludGVycyBpbnRvIGFkZHIuCisgKgorICoJUmV0dXJucyAwIG9uIHN1Y2Nlc3Mgb3IgLUVOT01FTSBvbiBmYWlsdXJlLgorICovCitpbnQgaTJvX2RtYV9hbGxvYyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBpMm9fZG1hICphZGRyLCBzaXplX3QgbGVuKQoreworCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gdG9fcGNpX2RldihkZXYpOworCWludCBkbWFfNjQgPSAwOworCisJbXV0ZXhfbG9jaygmbWVtX2xvY2spOworCWlmICgoc2l6ZW9mKGRtYV9hZGRyX3QpID4gNCkgJiYgKHBkZXYtPmRtYV9tYXNrID09IERNQV82NEJJVF9NQVNLKSkgeworCQlkbWFfNjQgPSAxOworCQlpZiAocGNpX3NldF9kbWFfbWFzayhwZGV2LCBETUFfMzJCSVRfTUFTSykpIHsKKwkJCW11dGV4X3VubG9jaygmbWVtX2xvY2spOworCQkJcmV0dXJuIC1FTk9NRU07CisJCX0KKwl9CisKKwlhZGRyLT52aXJ0ID0gZG1hX2FsbG9jX2NvaGVyZW50KGRldiwgbGVuLCAmYWRkci0+cGh5cywgR0ZQX0tFUk5FTCk7CisKKwlpZiAoKHNpemVvZihkbWFfYWRkcl90KSA+IDQpICYmIGRtYV82NCkKKwkJaWYgKHBjaV9zZXRfZG1hX21hc2socGRldiwgRE1BXzY0QklUX01BU0spKQorCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiaTJvOiB1bmFibGUgdG8gc2V0IDY0LWJpdCBETUEiKTsKKwltdXRleF91bmxvY2soJm1lbV9sb2NrKTsKKworCWlmICghYWRkci0+dmlydCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwltZW1zZXQoYWRkci0+dmlydCwgMCwgbGVuKTsKKwlhZGRyLT5sZW4gPSBsZW47CisKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGkyb19kbWFfYWxsb2MpOworCisKKy8qKgorICoJaTJvX2RtYV9mcmVlIC0gRnJlZSBETUEgbWVtb3J5CisgKglAZGV2OiBzdHJ1Y3QgZGV2aWNlIHBvaW50ZXIgdG8gdGhlIFBDSSBkZXZpY2Ugb2YgdGhlIEkyTyBjb250cm9sbGVyCisgKglAYWRkcjogaTJvX2RtYSBzdHJ1Y3Qgd2hpY2ggY29udGFpbnMgdGhlIERNQSBidWZmZXIKKyAqCisgKglGcmVlIGEgY29oZXJlbnQgRE1BIG1lbW9yeSBhbmQgc2V0IHZpcnR1YWwgYWRkcmVzcyBvZiBhZGRyIHRvIE5VTEwuCisgKi8KK3ZvaWQgaTJvX2RtYV9mcmVlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGkyb19kbWEgKmFkZHIpCit7CisJaWYgKGFkZHItPnZpcnQpIHsKKwkJaWYgKGFkZHItPnBoeXMpCisJCQlkbWFfZnJlZV9jb2hlcmVudChkZXYsIGFkZHItPmxlbiwgYWRkci0+dmlydCwKKwkJCQkJICBhZGRyLT5waHlzKTsKKwkJZWxzZQorCQkJa2ZyZWUoYWRkci0+dmlydCk7CisJCWFkZHItPnZpcnQgPSBOVUxMOworCX0KK30KK0VYUE9SVF9TWU1CT0xfR1BMKGkyb19kbWFfZnJlZSk7CisKKworLyoqCisgKglpMm9fZG1hX3JlYWxsb2MgLSBSZWFsbG9jIERNQSBtZW1vcnkKKyAqCUBkZXY6IHN0cnVjdCBkZXZpY2UgcG9pbnRlciB0byB0aGUgUENJIGRldmljZSBvZiB0aGUgSTJPIGNvbnRyb2xsZXIKKyAqCUBhZGRyOiBwb2ludGVyIHRvIGEgaTJvX2RtYSBzdHJ1Y3QgRE1BIGJ1ZmZlcgorICoJQGxlbjogbmV3IGxlbmd0aCBvZiBtZW1vcnkKKyAqCisgKglJZiB0aGVyZSB3YXMgc29tZXRoaW5nIGFsbG9jYXRlZCBpbiB0aGUgYWRkciwgZnJlZSBpdCBmaXJzdC4gSWYgbGVuID4gMAorICoJdGhhbiB0cnkgdG8gYWxsb2NhdGUgaXQgYW5kIHdyaXRlIHRoZSBhZGRyZXNzZXMgYmFjayB0byB0aGUgYWRkcgorICoJc3RydWN0dXJlLiBJZiBsZW4gPT0gMCBzZXQgdGhlIHZpcnR1YWwgYWRkcmVzcyB0byBOVUxMLgorICoKKyAqCVJldHVybnMgdGhlIDAgb24gc3VjY2VzcyBvciBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUuCisgKi8KK2ludCBpMm9fZG1hX3JlYWxsb2Moc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgaTJvX2RtYSAqYWRkciwgc2l6ZV90IGxlbikKK3sKKwlpMm9fZG1hX2ZyZWUoZGV2LCBhZGRyKTsKKworCWlmIChsZW4pCisJCXJldHVybiBpMm9fZG1hX2FsbG9jKGRldiwgYWRkciwgbGVuKTsKKworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTF9HUEwoaTJvX2RtYV9yZWFsbG9jKTsKKworLyoKKyAqCWkyb19wb29sX2FsbG9jIC0gQWxsb2NhdGUgYW4gc2xhYiBjYWNoZSBhbmQgbWVtcG9vbAorICoJQG1lbXBvb2w6IHBvaW50ZXIgdG8gc3RydWN0IGkyb19wb29sIHRvIHdyaXRlIGRhdGEgaW50by4KKyAqCUBuYW1lOiBuYW1lIHdoaWNoIGlzIHVzZWQgdG8gaWRlbnRpZnkgY2FjaGUKKyAqCUBzaXplOiBzaXplIG9mIGVhY2ggb2JqZWN0CisgKglAbWluX25yOiBtaW5pbXVtIG51bWJlciBvZiBvYmplY3RzCisgKgorICoJRmlyc3QgYWxsb2NhdGVzIGEgc2xhYiBjYWNoZSB3aXRoIG5hbWUgYW5kIHNpemUuIFRoZW4gYWxsb2NhdGVzIGEKKyAqCW1lbXBvb2wgd2hpY2ggdXNlcyB0aGUgc2xhYiBjYWNoZSBmb3IgYWxsb2NhdGlvbiBhbmQgZnJlZWluZy4KKyAqCisgKglSZXR1cm5zIDAgb24gc3VjY2VzcyBvciBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUuCisgKi8KK2ludCBpMm9fcG9vbF9hbGxvYyhzdHJ1Y3QgaTJvX3Bvb2wgKnBvb2wsIGNvbnN0IGNoYXIgKm5hbWUsCisJCQkJIHNpemVfdCBzaXplLCBpbnQgbWluX25yKQoreworCXBvb2wtPm5hbWUgPSBrbWFsbG9jKHN0cmxlbihuYW1lKSArIDEsIEdGUF9LRVJORUwpOworCWlmICghcG9vbC0+bmFtZSkKKwkJZ290byBleGl0OworCXN0cmNweShwb29sLT5uYW1lLCBuYW1lKTsKKworCXBvb2wtPnNsYWIgPQorCSAgICBrbWVtX2NhY2hlX2NyZWF0ZShwb29sLT5uYW1lLCBzaXplLCAwLCBTTEFCX0hXQ0FDSEVfQUxJR04sIE5VTEwpOworCWlmICghcG9vbC0+c2xhYikKKwkJZ290byBmcmVlX25hbWU7CisKKwlwb29sLT5tZW1wb29sID0gbWVtcG9vbF9jcmVhdGVfc2xhYl9wb29sKG1pbl9uciwgcG9vbC0+c2xhYik7CisJaWYgKCFwb29sLT5tZW1wb29sKQorCQlnb3RvIGZyZWVfc2xhYjsKKworCXJldHVybiAwOworCitmcmVlX3NsYWI6CisJa21lbV9jYWNoZV9kZXN0cm95KHBvb2wtPnNsYWIpOworCitmcmVlX25hbWU6CisJa2ZyZWUocG9vbC0+bmFtZSk7CisKK2V4aXQ6CisJcmV0dXJuIC1FTk9NRU07Cit9CitFWFBPUlRfU1lNQk9MX0dQTChpMm9fcG9vbF9hbGxvYyk7CisKKy8qCisgKglpMm9fcG9vbF9mcmVlIC0gRnJlZSBzbGFiIGNhY2hlIGFuZCBtZW1wb29sIGFnYWluCisgKglAbWVtcG9vbDogcG9pbnRlciB0byBzdHJ1Y3QgaTJvX3Bvb2wgd2hpY2ggc2hvdWxkIGJlIGZyZWVkCisgKgorICoJTm90ZSB0aGF0IHlvdSBoYXZlIHRvIHJldHVybiBhbGwgb2JqZWN0cyB0byB0aGUgbWVtcG9vbCBhZ2FpbiBiZWZvcmUKKyAqCWNhbGxpbmcgaTJvX3Bvb2xfZnJlZSgpLgorICovCit2b2lkIGkyb19wb29sX2ZyZWUoc3RydWN0IGkyb19wb29sICpwb29sKQoreworCW1lbXBvb2xfZGVzdHJveShwb29sLT5tZW1wb29sKTsKKwlrbWVtX2NhY2hlX2Rlc3Ryb3kocG9vbC0+c2xhYik7CisJa2ZyZWUocG9vbC0+bmFtZSk7Cit9OworRVhQT1JUX1NZTUJPTF9HUEwoaTJvX3Bvb2xfZnJlZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lc3NhZ2UvaTJvL3BjaS5jIGIvZHJpdmVycy9tZXNzYWdlL2kyby9wY2kuYwppbmRleCA2ODVhODk1Li42MTBlZjEyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lc3NhZ2UvaTJvL3BjaS5jCisrKyBiL2RyaXZlcnMvbWVzc2FnZS9pMm8vcGNpLmMKQEAgLTE4NiwzMSArMTg2LDI5IEBACiAJCX0KIAl9CiAKLQlpZiAoaTJvX2RtYV9hbGxvYyhkZXYsICZjLT5zdGF0dXMsIDgsIEdGUF9LRVJORUwpKSB7CisJaWYgKGkyb19kbWFfYWxsb2MoZGV2LCAmYy0+c3RhdHVzLCA4KSkgewogCQlpMm9fcGNpX2ZyZWUoYyk7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAotCWlmIChpMm9fZG1hX2FsbG9jKGRldiwgJmMtPmhydCwgc2l6ZW9mKGkyb19ocnQpLCBHRlBfS0VSTkVMKSkgeworCWlmIChpMm9fZG1hX2FsbG9jKGRldiwgJmMtPmhydCwgc2l6ZW9mKGkyb19ocnQpKSkgewogCQlpMm9fcGNpX2ZyZWUoYyk7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAotCWlmIChpMm9fZG1hX2FsbG9jKGRldiwgJmMtPmRsY3QsIDgxOTIsIEdGUF9LRVJORUwpKSB7CisJaWYgKGkyb19kbWFfYWxsb2MoZGV2LCAmYy0+ZGxjdCwgODE5MikpIHsKIAkJaTJvX3BjaV9mcmVlKGMpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKLQlpZiAoaTJvX2RtYV9hbGxvYyhkZXYsICZjLT5zdGF0dXNfYmxvY2ssIHNpemVvZihpMm9fc3RhdHVzX2Jsb2NrKSwKLQkJCSAgR0ZQX0tFUk5FTCkpIHsKKwlpZiAoaTJvX2RtYV9hbGxvYyhkZXYsICZjLT5zdGF0dXNfYmxvY2ssIHNpemVvZihpMm9fc3RhdHVzX2Jsb2NrKSkpIHsKIAkJaTJvX3BjaV9mcmVlKGMpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKLQlpZiAoaTJvX2RtYV9hbGxvYwotCSAgICAoZGV2LCAmYy0+b3V0X3F1ZXVlLAotCSAgICAgSTJPX01BWF9PVVRCT1VORF9NU0dfRlJBTUVTICogSTJPX09VVEJPVU5EX01TR19GUkFNRV9TSVpFICoKLQkgICAgIHNpemVvZih1MzIpLCBHRlBfS0VSTkVMKSkgeworCWlmIChpMm9fZG1hX2FsbG9jKGRldiwgJmMtPm91dF9xdWV1ZSwKKwkJSTJPX01BWF9PVVRCT1VORF9NU0dfRlJBTUVTICogSTJPX09VVEJPVU5EX01TR19GUkFNRV9TSVpFICoKKwkJCQlzaXplb2YodTMyKSkpIHsKIAkJaTJvX3BjaV9mcmVlKGMpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21mZC9LY29uZmlnIGIvZHJpdmVycy9tZmQvS2NvbmZpZwppbmRleCAwZGFlMjQ1Li41YTc5ZDJkIDEwMDY0NAotLS0gYS9kcml2ZXJzL21mZC9LY29uZmlnCisrKyBiL2RyaXZlcnMvbWZkL0tjb25maWcKQEAgLTUyLDYgKzUyLDggQEAKIAogY29uZmlnIFVDQjE0MDBfQ09SRQogCXRyaXN0YXRlICJQaGlsaXBzIFVDQjE0MDAgQ29yZSBkcml2ZXIiCisJZGVwZW5kcyBvbiBBQzk3X0JVUworCWRlcGVuZHMgb24gR1BJT0xJQgogCWhlbHAKIAkgIFRoaXMgZW5hYmxlcyBzdXBwb3J0IGZvciB0aGUgUGhpbGlwcyBVQ0IxNDAwIGNvcmUgZnVuY3Rpb25zLgogCSAgVGhlIFVDQjE0MDAgaXMgYW4gQUM5NyBhdWRpbyBjb2RlYy4KQEAgLTU5LDYgKzYxLDIwIEBACiAJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKIAkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCB1Y2IxNDAwX2NvcmUuCiAKK2NvbmZpZyBUV0w0MDMwX0NPUkUKKwlib29sICJUZXhhcyBJbnN0cnVtZW50cyBUV0w0MDMwL1RQUzY1OXgwIFN1cHBvcnQiCisJZGVwZW5kcyBvbiBJMkM9eSAmJiBHRU5FUklDX0hBUkRJUlFTICYmIChBUkNIX09NQVAyIHx8IEFSQ0hfT01BUDMpCisJaGVscAorCSAgU2F5IHllcyBoZXJlIGlmIHlvdSBoYXZlIFRXTDQwMzAgZmFtaWx5IGNoaXAgb24geW91ciBib2FyZC4KKwkgIFRoaXMgY29yZSBkcml2ZXIgcHJvdmlkZXMgcmVnaXN0ZXIgYWNjZXNzIGFuZCBJUlEgaGFuZGxpbmcKKwkgIGZhY2lsaXRpZXMsIGFuZCByZWdpc3RlcnMgZGV2aWNlcyBmb3IgdGhlIHZhcmlvdXMgZnVuY3Rpb25zCisJICBzbyB0aGF0IGZ1bmN0aW9uLXNwZWNpZmljIGRyaXZlcnMgY2FuIGJpbmQgdG8gdGhlbS4KKworCSAgVGhlc2UgbXVsdGktZnVuY3Rpb24gY2hpcHMgYXJlIGZvdW5kIG9uIG1hbnkgT01BUDIgYW5kIE9NQVAzCisJICBib2FyZHMsIHByb3ZpZGluZyBwb3dlciBtYW5hZ2VtZW50LCBSVEMsIEdQSU8sIGtleXBhZCwgYQorCSAgaGlnaCBzcGVlZCBVU0IgT1RHIHRyYW5zY2VpdmVyLCBhbiBhdWRpbyBjb2RlYyAob24gbW9zdAorCSAgdmVyc2lvbnMpIGFuZCBtYW55IG90aGVyIGZlYXR1cmVzLgorCiBjb25maWcgTUZEX1RNSU8KIAlib29sCiAJZGVmYXVsdCBuCkBAIC04Nyw2ICsxMDMsNDQgQEAKIAloZWxwCiAJICBTdXBwb3J0IGZvciBUb3NoaWJhIE1vYmlsZSBJTyBDb250cm9sbGVyIFRDNjM5M1hCCiAKK2NvbmZpZyBNRkRfV004NDAwCisJdHJpc3RhdGUgIlN1cHBvcnQgV29sZnNvbiBNaWNyb2VsZWN0cm9uaWNzIFdNODQwMCIKKwloZWxwCisJICBTdXBwb3J0IGZvciB0aGUgV29sZnNvbiBNaWNyb2VsZWNyb25pY3MgV004NDAwIFBNSUMgYW5kIGF1ZGlvCisJICBDT0RFQy4gIFRoaXMgZHJpdmVyIGFkZHMgcHJvdmlkZXMgY29tbW9uIHN1cHBvcnQgZm9yIGFjY2Vzc2luZworCSAgdGhlIGRldmljZSwgYWRkaXRpb25hbCBkcml2ZXJzIG11c3QgYmUgZW5hYmxlZCBpbiBvcmRlciB0byB1c2UKKwkgIHRoZSBmdW5jdGlvbmFsaXR5IG9mIHRoZSBkZXZpY2UuCisKK2NvbmZpZyBNRkRfV004MzUwCisJdHJpc3RhdGUKKworY29uZmlnIE1GRF9XTTgzNTBfQ09ORklHX01PREVfMAorCWJvb2wKKwlkZXBlbmRzIG9uIE1GRF9XTTgzNTAKKworY29uZmlnIE1GRF9XTTgzNTBfQ09ORklHX01PREVfMQorCWJvb2wKKwlkZXBlbmRzIG9uIE1GRF9XTTgzNTAKKworY29uZmlnIE1GRF9XTTgzNTBfQ09ORklHX01PREVfMgorCWJvb2wKKwlkZXBlbmRzIG9uIE1GRF9XTTgzNTAKKworY29uZmlnIE1GRF9XTTgzNTBfQ09ORklHX01PREVfMworCWJvb2wKKwlkZXBlbmRzIG9uIE1GRF9XTTgzNTAKKworY29uZmlnIE1GRF9XTTgzNTBfSTJDCisJdHJpc3RhdGUgIlN1cHBvcnQgV29sZnNvbiBNaWNyb2VsZWN0cm9uaWNzIFdNODM1MCB3aXRoIEkyQyIKKwlzZWxlY3QgTUZEX1dNODM1MAorCWRlcGVuZHMgb24gSTJDCisJaGVscAorCSAgVGhlIFdNODM1MCBpcyBhbiBpbnRlZ3JhdGVkIGF1ZGlvIGFuZCBwb3dlciBtYW5hZ2VtZW50CisJICBzdWJzeXN0ZW0gd2l0aCB3YXRjaGRvZyBhbmQgUlRDIGZ1bmN0aW9uYWxpdHkgZm9yIGVtYmVkZGVkCisJICBzeXN0ZW1zLiAgVGhpcyBvcHRpb24gZW5hYmxlcyBjb3JlIHN1cHBvcnQgZm9yIHRoZSBXTTgzNTAgd2l0aAorCSAgSTJDIGFzIHRoZSBjb250cm9sIGludGVyZmFjZS4gIEFkZGl0aW9uYWwgb3B0aW9ucyBtdXN0IGJlCisJICBzZWxlY3RlZCB0byBlbmFibGUgc3VwcG9ydCBmb3IgdGhlIGZ1bmN0aW9uYWxpdHkgb2YgdGhlIGNoaXAuCisKIGVuZG1lbnUKIAogbWVudSAiTXVsdGltZWRpYSBDYXBhYmlsaXRpZXMgUG9ydCBkcml2ZXJzIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZmQvTWFrZWZpbGUgYi9kcml2ZXJzL21mZC9NYWtlZmlsZQppbmRleCA2YWJlYmUzLi42OGUyMzdiIDEwMDY0NAotLS0gYS9kcml2ZXJzL21mZC9NYWtlZmlsZQorKysgYi9kcml2ZXJzL21mZC9NYWtlZmlsZQpAQCAtMTIsNiArMTIsMTMgQEAKIG9iai0kKENPTkZJR19NRkRfVEM2Mzg3WEIpCSs9IHRjNjM4N3hiLm8KIG9iai0kKENPTkZJR19NRkRfVEM2MzkzWEIpCSs9IHRjNjM5M3hiLm8KIAorb2JqLSQoQ09ORklHX01GRF9XTTg0MDApCSs9IHdtODQwMC1jb3JlLm8KK3dtODM1MC1vYmpzCQkJOj0gd204MzUwLWNvcmUubyB3bTgzNTAtcmVnbWFwLm8gd204MzUwLWdwaW8ubworb2JqLSQoQ09ORklHX01GRF9XTTgzNTApCSs9IHdtODM1MC5vCitvYmotJChDT05GSUdfTUZEX1dNODM1MF9JMkMpCSs9IHdtODM1MC1pMmMubworCitvYmotJChDT05GSUdfVFdMNDAzMF9DT1JFKQkrPSB0d2w0MDMwLWNvcmUubworCiBvYmotJChDT05GSUdfTUZEX0NPUkUpCQkrPSBtZmQtY29yZS5vCiAKIG9iai0kKENPTkZJR19NQ1ApCQkrPSBtY3AtY29yZS5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL21mZC9hc2ljMy5jIGIvZHJpdmVycy9tZmQvYXNpYzMuYwppbmRleCBiYTVhYTIwLi5lNGMwZGI0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21mZC9hc2ljMy5jCisrKyBiL2RyaXZlcnMvbWZkL2FzaWMzLmMKQEAgLTEyMyw3ICsxMjMsNyBAQAogCQkJCQlpcnFuciA9IGFzaWMtPmlycV9iYXNlICsKIAkJCQkJCShBU0lDM19HUElPU19QRVJfQkFOSyAqIGJhbmspCiAJCQkJCQkrIGk7Ci0JCQkJCWRlc2MgPSBpcnFfZGVzYyArIGlycW5yOworCQkJCQlkZXNjID0gaXJxX3RvX2Rlc2MoaXJxbnIpOwogCQkJCQlkZXNjLT5oYW5kbGVfaXJxKGlycW5yLCBkZXNjKTsKIAkJCQkJaWYgKGFzaWMtPmlycV9ib3RoZWRnZVtiYW5rXSAmIGJpdCkKIAkJCQkJCWFzaWMzX2lycV9mbGlwX2VkZ2UoYXNpYywgYmFzZSwKQEAgLTEzNiw3ICsxMzYsNyBAQAogCQlmb3IgKGkgPSBBU0lDM19OVU1fR1BJT1M7IGkgPCBBU0lDM19OUl9JUlFTOyBpKyspIHsKIAkJCS8qIFRoZXkgc3RhcnQgYXQgYml0IDQgYW5kIGdvIHVwICovCiAJCQlpZiAoc3RhdHVzICYgKDEgPDwgKGkgLSBBU0lDM19OVU1fR1BJT1MgKyA0KSkpIHsKLQkJCQlkZXNjID0gaXJxX2Rlc2MgKyBhc2ljLT5pcnFfYmFzZSArIGk7CisJCQkJZGVzYyA9IGlycV90b19kZXNjKGFzaWMtPmlycV9iYXNlICsgaSk7CiAJCQkJZGVzYy0+aGFuZGxlX2lycShhc2ljLT5pcnFfYmFzZSArIGksCiAJCQkJCQkgZGVzYyk7CiAJCQl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21mZC9kYTkwM3guYyBiL2RyaXZlcnMvbWZkL2RhOTAzeC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1NzMyNmEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21mZC9kYTkwM3guYwpAQCAtMCwwICsxLDU2MyBAQAorLyoKKyAqIEJhc2UgZHJpdmVyIGZvciBEaWFsb2cgU2VtaWNvbmR1Y3RvciBEQTkwMzAvREE5MDM0CisgKgorICogQ29weXJpZ2h0IChDKSAyMDA4IENvbXB1bGFiLCBMdGQuCisgKiAJTWlrZSBSYXBvcG9ydCA8bWlrZUBjb21wdWxhYi5jby5pbD4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAwOCBNYXJ2ZWxsIEludGVybmF0aW9uYWwgTHRkLgorICogCUVyaWMgTWlhbyA8ZXJpYy5taWFvQG1hcnZlbGwuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPGxpbnV4L21mZC9kYTkwM3guaD4KKworI2RlZmluZSBEQTkwMzBfQ0hJUF9JRAkJMHgwMAorI2RlZmluZSBEQTkwMzBfRVZFTlRfQQkJMHgwMQorI2RlZmluZSBEQTkwMzBfRVZFTlRfQgkJMHgwMgorI2RlZmluZSBEQTkwMzBfRVZFTlRfQwkJMHgwMworI2RlZmluZSBEQTkwMzBfU1RBVFVTCQkweDA0CisjZGVmaW5lIERBOTAzMF9JUlFfTUFTS19BCTB4MDUKKyNkZWZpbmUgREE5MDMwX0lSUV9NQVNLX0IJMHgwNgorI2RlZmluZSBEQTkwMzBfSVJRX01BU0tfQwkweDA3CisjZGVmaW5lIERBOTAzMF9TWVNfQ1RSTF9BCTB4MDgKKyNkZWZpbmUgREE5MDMwX1NZU19DVFJMX0IJMHgwOQorI2RlZmluZSBEQTkwMzBfRkFVTFRfTE9HCTB4MGEKKworI2RlZmluZSBEQTkwMzRfQ0hJUF9JRAkJMHgwMAorI2RlZmluZSBEQTkwMzRfRVZFTlRfQQkJMHgwMQorI2RlZmluZSBEQTkwMzRfRVZFTlRfQgkJMHgwMgorI2RlZmluZSBEQTkwMzRfRVZFTlRfQwkJMHgwMworI2RlZmluZSBEQTkwMzRfRVZFTlRfRAkJMHgwNAorI2RlZmluZSBEQTkwMzRfU1RBVFVTX0EJCTB4MDUKKyNkZWZpbmUgREE5MDM0X1NUQVRVU19CCQkweDA2CisjZGVmaW5lIERBOTAzNF9JUlFfTUFTS19BCTB4MDcKKyNkZWZpbmUgREE5MDM0X0lSUV9NQVNLX0IJMHgwOAorI2RlZmluZSBEQTkwMzRfSVJRX01BU0tfQwkweDA5CisjZGVmaW5lIERBOTAzNF9JUlFfTUFTS19ECTB4MGEKKyNkZWZpbmUgREE5MDM0X1NZU19DVFJMX0EJMHgwYgorI2RlZmluZSBEQTkwMzRfU1lTX0NUUkxfQgkweDBjCisjZGVmaW5lIERBOTAzNF9GQVVMVF9MT0cJMHgwZAorCitzdHJ1Y3QgZGE5MDN4X2NoaXA7CisKK3N0cnVjdCBkYTkwM3hfY2hpcF9vcHMgeworCWludAkoKmluaXRfY2hpcCkoc3RydWN0IGRhOTAzeF9jaGlwICopOworCWludAkoKnVubWFza19ldmVudHMpKHN0cnVjdCBkYTkwM3hfY2hpcCAqLCB1bnNpZ25lZCBpbnQgZXZlbnRzKTsKKwlpbnQJKCptYXNrX2V2ZW50cykoc3RydWN0IGRhOTAzeF9jaGlwICosIHVuc2lnbmVkIGludCBldmVudHMpOworCWludAkoKnJlYWRfZXZlbnRzKShzdHJ1Y3QgZGE5MDN4X2NoaXAgKiwgdW5zaWduZWQgaW50ICpldmVudHMpOworCWludAkoKnJlYWRfc3RhdHVzKShzdHJ1Y3QgZGE5MDN4X2NoaXAgKiwgdW5zaWduZWQgaW50ICpzdGF0dXMpOworfTsKKworc3RydWN0IGRhOTAzeF9jaGlwIHsKKwlzdHJ1Y3QgaTJjX2NsaWVudAkqY2xpZW50OworCXN0cnVjdCBkZXZpY2UJCSpkZXY7CisJc3RydWN0IGRhOTAzeF9jaGlwX29wcwkqb3BzOworCisJaW50CQkJdHlwZTsKKwl1aW50MzJfdAkJZXZlbnRzX21hc2s7CisKKwlzdHJ1Y3QgbXV0ZXgJCWxvY2s7CisJc3RydWN0IHdvcmtfc3RydWN0CWlycV93b3JrOworCisJc3RydWN0IGJsb2NraW5nX25vdGlmaWVyX2hlYWQgbm90aWZpZXJfbGlzdDsKK307CisKK3N0YXRpYyBpbmxpbmUgaW50IF9fZGE5MDN4X3JlYWQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKKwkJCQlpbnQgcmVnLCB1aW50OF90ICp2YWwpCit7CisJaW50IHJldDsKKworCXJldCA9IGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsIHJlZyk7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2VycigmY2xpZW50LT5kZXYsICJmYWlsZWQgcmVhZGluZyBhdCAweCUwMnhcbiIsIHJlZyk7CisJCXJldHVybiByZXQ7CisJfQorCisJKnZhbCA9ICh1aW50OF90KXJldDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBpbnQgX19kYTkwM3hfcmVhZHMoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgaW50IHJlZywKKwkJCQkgaW50IGxlbiwgdWludDhfdCAqdmFsKQoreworCWludCByZXQ7CisKKwlyZXQgPSBpMmNfc21idXNfcmVhZF9pMmNfYmxvY2tfZGF0YShjbGllbnQsIHJlZywgbGVuLCB2YWwpOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoJmNsaWVudC0+ZGV2LCAiZmFpbGVkIHJlYWRpbmcgZnJvbSAweCUwMnhcbiIsIHJlZyk7CisJCXJldHVybiByZXQ7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIGludCBfX2RhOTAzeF93cml0ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAorCQkJCSBpbnQgcmVnLCB1aW50OF90IHZhbCkKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsIHJlZywgdmFsKTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKCZjbGllbnQtPmRldiwgImZhaWxlZCB3cml0aW5nIDB4JTAyeCB0byAweCUwMnhcbiIsCisJCQkJdmFsLCByZWcpOworCQlyZXR1cm4gcmV0OworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBpbnQgX19kYTkwM3hfd3JpdGVzKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIGludCByZWcsCisJCQkJICBpbnQgbGVuLCB1aW50OF90ICp2YWwpCit7CisJaW50IHJldDsKKworCXJldCA9IGkyY19zbWJ1c193cml0ZV9pMmNfYmxvY2tfZGF0YShjbGllbnQsIHJlZywgbGVuLCB2YWwpOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoJmNsaWVudC0+ZGV2LCAiZmFpbGVkIHdyaXRpbmdzIHRvIDB4JTAyeFxuIiwgcmVnKTsKKwkJcmV0dXJuIHJldDsKKwl9CisJcmV0dXJuIDA7Cit9CisKK2ludCBkYTkwM3hfcmVnaXN0ZXJfbm90aWZpZXIoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLAorCQkJCXVuc2lnbmVkIGludCBldmVudHMpCit7CisJc3RydWN0IGRhOTAzeF9jaGlwICpjaGlwID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisKKwljaGlwLT5vcHMtPnVubWFza19ldmVudHMoY2hpcCwgZXZlbnRzKTsKKwlyZXR1cm4gYmxvY2tpbmdfbm90aWZpZXJfY2hhaW5fcmVnaXN0ZXIoJmNoaXAtPm5vdGlmaWVyX2xpc3QsIG5iKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGRhOTAzeF9yZWdpc3Rlcl9ub3RpZmllcik7CisKK2ludCBkYTkwM3hfdW5yZWdpc3Rlcl9ub3RpZmllcihzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsCisJCQkJdW5zaWduZWQgaW50IGV2ZW50cykKK3sKKwlzdHJ1Y3QgZGE5MDN4X2NoaXAgKmNoaXAgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKworCWNoaXAtPm9wcy0+bWFza19ldmVudHMoY2hpcCwgZXZlbnRzKTsKKwlyZXR1cm4gYmxvY2tpbmdfbm90aWZpZXJfY2hhaW5fdW5yZWdpc3RlcigmY2hpcC0+bm90aWZpZXJfbGlzdCwgbmIpOworfQorRVhQT1JUX1NZTUJPTF9HUEwoZGE5MDN4X3VucmVnaXN0ZXJfbm90aWZpZXIpOworCitpbnQgZGE5MDN4X3dyaXRlKHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IHJlZywgdWludDhfdCB2YWwpCit7CisJcmV0dXJuIF9fZGE5MDN4X3dyaXRlKHRvX2kyY19jbGllbnQoZGV2KSwgcmVnLCB2YWwpOworfQorRVhQT1JUX1NZTUJPTF9HUEwoZGE5MDN4X3dyaXRlKTsKKworaW50IGRhOTAzeF9yZWFkKHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IHJlZywgdWludDhfdCAqdmFsKQoreworCXJldHVybiBfX2RhOTAzeF9yZWFkKHRvX2kyY19jbGllbnQoZGV2KSwgcmVnLCB2YWwpOworfQorRVhQT1JUX1NZTUJPTF9HUEwoZGE5MDN4X3JlYWQpOworCitpbnQgZGE5MDN4X3NldF9iaXRzKHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IHJlZywgdWludDhfdCBiaXRfbWFzaykKK3sKKwlzdHJ1Y3QgZGE5MDN4X2NoaXAgKmNoaXAgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwl1aW50OF90IHJlZ192YWw7CisJaW50IHJldCA9IDA7CisKKwltdXRleF9sb2NrKCZjaGlwLT5sb2NrKTsKKworCXJldCA9IF9fZGE5MDN4X3JlYWQoY2hpcC0+Y2xpZW50LCByZWcsICZyZWdfdmFsKTsKKwlpZiAocmV0KQorCQlnb3RvIG91dDsKKworCWlmICgocmVnX3ZhbCAmIGJpdF9tYXNrKSA9PSAwKSB7CisJCXJlZ192YWwgfD0gYml0X21hc2s7CisJCXJldCA9IF9fZGE5MDN4X3dyaXRlKGNoaXAtPmNsaWVudCwgcmVnLCByZWdfdmFsKTsKKwl9CitvdXQ6CisJbXV0ZXhfdW5sb2NrKCZjaGlwLT5sb2NrKTsKKwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTF9HUEwoZGE5MDN4X3NldF9iaXRzKTsKKworaW50IGRhOTAzeF9jbHJfYml0cyhzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCByZWcsIHVpbnQ4X3QgYml0X21hc2spCit7CisJc3RydWN0IGRhOTAzeF9jaGlwICpjaGlwID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJdWludDhfdCByZWdfdmFsOworCWludCByZXQgPSAwOworCisJbXV0ZXhfbG9jaygmY2hpcC0+bG9jayk7CisKKwlyZXQgPSBfX2RhOTAzeF9yZWFkKGNoaXAtPmNsaWVudCwgcmVnLCAmcmVnX3ZhbCk7CisJaWYgKHJldCkKKwkJZ290byBvdXQ7CisKKwlpZiAocmVnX3ZhbCAmIGJpdF9tYXNrKSB7CisJCXJlZ192YWwgJj0gfmJpdF9tYXNrOworCQlyZXQgPSBfX2RhOTAzeF93cml0ZShjaGlwLT5jbGllbnQsIHJlZywgcmVnX3ZhbCk7CisJfQorb3V0OgorCW11dGV4X3VubG9jaygmY2hpcC0+bG9jayk7CisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGRhOTAzeF9jbHJfYml0cyk7CisKK2ludCBkYTkwM3hfdXBkYXRlKHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IHJlZywgdWludDhfdCB2YWwsIHVpbnQ4X3QgbWFzaykKK3sKKwlzdHJ1Y3QgZGE5MDN4X2NoaXAgKmNoaXAgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwl1aW50OF90IHJlZ192YWw7CisJaW50IHJldCA9IDA7CisKKwltdXRleF9sb2NrKCZjaGlwLT5sb2NrKTsKKworCXJldCA9IF9fZGE5MDN4X3JlYWQoY2hpcC0+Y2xpZW50LCByZWcsICZyZWdfdmFsKTsKKwlpZiAocmV0KQorCQlnb3RvIG91dDsKKworCWlmICgocmVnX3ZhbCAmIG1hc2spICE9IHZhbCkgeworCQlyZWdfdmFsID0gKHJlZ192YWwgJiB+bWFzaykgfCB2YWw7CisJCXJldCA9IF9fZGE5MDN4X3dyaXRlKGNoaXAtPmNsaWVudCwgcmVnLCByZWdfdmFsKTsKKwl9CitvdXQ6CisJbXV0ZXhfdW5sb2NrKCZjaGlwLT5sb2NrKTsKKwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTF9HUEwoZGE5MDN4X3VwZGF0ZSk7CisKK2ludCBkYTkwM3hfcXVlcnlfc3RhdHVzKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IHNiaXRzKQoreworCXN0cnVjdCBkYTkwM3hfY2hpcCAqY2hpcCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXVuc2lnbmVkIGludCBzdGF0dXMgPSAwOworCisJY2hpcC0+b3BzLT5yZWFkX3N0YXR1cyhjaGlwLCAmc3RhdHVzKTsKKwlyZXR1cm4gKChzdGF0dXMgJiBzYml0cykgPT0gc2JpdHMpOworfQorRVhQT1JUX1NZTUJPTChkYTkwM3hfcXVlcnlfc3RhdHVzKTsKKworc3RhdGljIGludCBfX2RldmluaXQgZGE5MDMwX2luaXRfY2hpcChzdHJ1Y3QgZGE5MDN4X2NoaXAgKmNoaXApCit7CisJdWludDhfdCBjaGlwX2lkOworCWludCBlcnI7CisKKwllcnIgPSBfX2RhOTAzeF9yZWFkKGNoaXAtPmNsaWVudCwgREE5MDMwX0NISVBfSUQsICZjaGlwX2lkKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJZXJyID0gX19kYTkwM3hfd3JpdGUoY2hpcC0+Y2xpZW50LCBEQTkwMzBfU1lTX0NUUkxfQSwgMHhFOCk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCWRldl9pbmZvKGNoaXAtPmRldiwgIkRBOTAzMCAoQ0hJUCBJRDogMHglMDJ4KSBkZXRlY3RlZFxuIiwgY2hpcF9pZCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZGE5MDMwX3VubWFza19ldmVudHMoc3RydWN0IGRhOTAzeF9jaGlwICpjaGlwLCB1bnNpZ25lZCBpbnQgZXZlbnRzKQoreworCXVpbnQ4X3QgdlszXTsKKworCWNoaXAtPmV2ZW50c19tYXNrICY9IH5ldmVudHM7CisKKwl2WzBdID0gKGNoaXAtPmV2ZW50c19tYXNrICYgMHhmZik7CisJdlsxXSA9IChjaGlwLT5ldmVudHNfbWFzayA+PiA4KSAmIDB4ZmY7CisJdlsyXSA9IChjaGlwLT5ldmVudHNfbWFzayA+PiAxNikgJiAweGZmOworCisJcmV0dXJuIF9fZGE5MDN4X3dyaXRlcyhjaGlwLT5jbGllbnQsIERBOTAzMF9JUlFfTUFTS19BLCAzLCB2KTsKK30KKworc3RhdGljIGludCBkYTkwMzBfbWFza19ldmVudHMoc3RydWN0IGRhOTAzeF9jaGlwICpjaGlwLCB1bnNpZ25lZCBpbnQgZXZlbnRzKQoreworCXVpbnQ4X3QgdlszXTsKKworCWNoaXAtPmV2ZW50c19tYXNrICY9IH5ldmVudHM7CisKKwl2WzBdID0gKGNoaXAtPmV2ZW50c19tYXNrICYgMHhmZik7CisJdlsxXSA9IChjaGlwLT5ldmVudHNfbWFzayA+PiA4KSAmIDB4ZmY7CisJdlsyXSA9IChjaGlwLT5ldmVudHNfbWFzayA+PiAxNikgJiAweGZmOworCisJcmV0dXJuIF9fZGE5MDN4X3dyaXRlcyhjaGlwLT5jbGllbnQsIERBOTAzMF9JUlFfTUFTS19BLCAzLCB2KTsKK30KKworc3RhdGljIGludCBkYTkwMzBfcmVhZF9ldmVudHMoc3RydWN0IGRhOTAzeF9jaGlwICpjaGlwLCB1bnNpZ25lZCBpbnQgKmV2ZW50cykKK3sKKwl1aW50OF90IHZbM10gPSB7MCwgMCwgMH07CisJaW50IHJldDsKKworCXJldCA9IF9fZGE5MDN4X3JlYWRzKGNoaXAtPmNsaWVudCwgREE5MDMwX0VWRU5UX0EsIDMsIHYpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJKmV2ZW50cyA9ICh2WzJdIDw8IDE2KSB8ICh2WzFdIDw8IDgpIHwgdlswXTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBkYTkwMzBfcmVhZF9zdGF0dXMoc3RydWN0IGRhOTAzeF9jaGlwICpjaGlwLCB1bnNpZ25lZCBpbnQgKnN0YXR1cykKK3sKKwlyZXR1cm4gX19kYTkwM3hfcmVhZChjaGlwLT5jbGllbnQsIERBOTAzMF9TVEFUVVMsICh1aW50OF90ICopc3RhdHVzKTsKK30KKworc3RhdGljIGludCBkYTkwMzRfaW5pdF9jaGlwKHN0cnVjdCBkYTkwM3hfY2hpcCAqY2hpcCkKK3sKKwl1aW50OF90IGNoaXBfaWQ7CisJaW50IGVycjsKKworCWVyciA9IF9fZGE5MDN4X3JlYWQoY2hpcC0+Y2xpZW50LCBEQTkwMzRfQ0hJUF9JRCwgJmNoaXBfaWQpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwllcnIgPSBfX2RhOTAzeF93cml0ZShjaGlwLT5jbGllbnQsIERBOTAzNF9TWVNfQ1RSTF9BLCAweEU4KTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJLyogYXZvaWQgU1JBTSBwb3dlciBvZmYgZHVyaW5nIHNsZWVwKi8KKwlfX2RhOTAzeF93cml0ZShjaGlwLT5jbGllbnQsIDB4MTAsIDB4MDcpOworCV9fZGE5MDN4X3dyaXRlKGNoaXAtPmNsaWVudCwgMHgxMSwgMHhmZik7CisJX19kYTkwM3hfd3JpdGUoY2hpcC0+Y2xpZW50LCAweDEyLCAweGZmKTsKKworCS8qIEVuYWJsZSB0aGUgT05LRVkgcG93ZXIgZG93biBmdW5jdGlvbmFsaXR5ICovCisJX19kYTkwM3hfd3JpdGUoY2hpcC0+Y2xpZW50LCBEQTkwMzRfU1lTX0NUUkxfQiwgMHgyMCk7CisJX19kYTkwM3hfd3JpdGUoY2hpcC0+Y2xpZW50LCBEQTkwMzRfU1lTX0NUUkxfQSwgMHg2MCk7CisKKwkvKiB3b3JrYXJvdW5kIHRvIG1ha2UgTEVEcyB3b3JrICovCisJX19kYTkwM3hfd3JpdGUoY2hpcC0+Y2xpZW50LCAweDkwLCAweDAxKTsKKwlfX2RhOTAzeF93cml0ZShjaGlwLT5jbGllbnQsIDB4QjAsIDB4MDgpOworCisJLyogbWFrZSBBRFRWMSBhbmQgU0RUVjEgZWZmZWN0aXZlICovCisJX19kYTkwM3hfd3JpdGUoY2hpcC0+Y2xpZW50LCAweDIwLCAweDAwKTsKKworCWRldl9pbmZvKGNoaXAtPmRldiwgIkRBOTAzNCAoQ0hJUCBJRDogMHglMDJ4KSBkZXRlY3RlZFxuIiwgY2hpcF9pZCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZGE5MDM0X3VubWFza19ldmVudHMoc3RydWN0IGRhOTAzeF9jaGlwICpjaGlwLCB1bnNpZ25lZCBpbnQgZXZlbnRzKQoreworCXVpbnQ4X3Qgdls0XTsKKworCWNoaXAtPmV2ZW50c19tYXNrICY9IH5ldmVudHM7CisKKwl2WzBdID0gKGNoaXAtPmV2ZW50c19tYXNrICYgMHhmZik7CisJdlsxXSA9IChjaGlwLT5ldmVudHNfbWFzayA+PiA4KSAmIDB4ZmY7CisJdlsyXSA9IChjaGlwLT5ldmVudHNfbWFzayA+PiAxNikgJiAweGZmOworCXZbM10gPSAoY2hpcC0+ZXZlbnRzX21hc2sgPj4gMjQpICYgMHhmZjsKKworCXJldHVybiBfX2RhOTAzeF93cml0ZXMoY2hpcC0+Y2xpZW50LCBEQTkwMzRfSVJRX01BU0tfQSwgNCwgdik7Cit9CisKK3N0YXRpYyBpbnQgZGE5MDM0X21hc2tfZXZlbnRzKHN0cnVjdCBkYTkwM3hfY2hpcCAqY2hpcCwgdW5zaWduZWQgaW50IGV2ZW50cykKK3sKKwl1aW50OF90IHZbNF07CisKKwljaGlwLT5ldmVudHNfbWFzayB8PSBldmVudHM7CisKKwl2WzBdID0gKGNoaXAtPmV2ZW50c19tYXNrICYgMHhmZik7CisJdlsxXSA9IChjaGlwLT5ldmVudHNfbWFzayA+PiA4KSAmIDB4ZmY7CisJdlsyXSA9IChjaGlwLT5ldmVudHNfbWFzayA+PiAxNikgJiAweGZmOworCXZbM10gPSAoY2hpcC0+ZXZlbnRzX21hc2sgPj4gMjQpICYgMHhmZjsKKworCXJldHVybiBfX2RhOTAzeF93cml0ZXMoY2hpcC0+Y2xpZW50LCBEQTkwMzRfSVJRX01BU0tfQSwgNCwgdik7Cit9CisKK3N0YXRpYyBpbnQgZGE5MDM0X3JlYWRfZXZlbnRzKHN0cnVjdCBkYTkwM3hfY2hpcCAqY2hpcCwgdW5zaWduZWQgaW50ICpldmVudHMpCit7CisJdWludDhfdCB2WzRdID0gezAsIDAsIDAsIDB9OworCWludCByZXQ7CisKKwlyZXQgPSBfX2RhOTAzeF9yZWFkcyhjaGlwLT5jbGllbnQsIERBOTAzNF9FVkVOVF9BLCA0LCB2KTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCSpldmVudHMgPSAodlszXSA8PCAyNCkgfCAodlsyXSA8PCAxNikgfCAodlsxXSA8PCA4KSB8IHZbMF07CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZGE5MDM0X3JlYWRfc3RhdHVzKHN0cnVjdCBkYTkwM3hfY2hpcCAqY2hpcCwgdW5zaWduZWQgaW50ICpzdGF0dXMpCit7CisJdWludDhfdCB2WzJdID0gezAsIDB9OworCWludCByZXQgPSAwOworCisJcmV0ID0gX19kYTkwM3hfcmVhZHMoY2hpcC0+Y2xpZW50LCBEQTkwMzRfU1RBVFVTX0EsIDIsIHYpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwkqc3RhdHVzID0gKHZbMV0gPDwgOCkgfCB2WzBdOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBkYTkwM3hfaXJxX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCBkYTkwM3hfY2hpcCAqY2hpcCA9CisJCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgZGE5MDN4X2NoaXAsIGlycV93b3JrKTsKKwl1bnNpZ25lZCBpbnQgZXZlbnRzID0gMDsKKworCXdoaWxlICgxKSB7CisJCWlmIChjaGlwLT5vcHMtPnJlYWRfZXZlbnRzKGNoaXAsICZldmVudHMpKQorCQkJYnJlYWs7CisKKwkJZXZlbnRzICY9IH5jaGlwLT5ldmVudHNfbWFzazsKKwkJaWYgKGV2ZW50cyA9PSAwKQorCQkJYnJlYWs7CisKKwkJYmxvY2tpbmdfbm90aWZpZXJfY2FsbF9jaGFpbigKKwkJCQkmY2hpcC0+bm90aWZpZXJfbGlzdCwgZXZlbnRzLCBOVUxMKTsKKwl9CisJZW5hYmxlX2lycShjaGlwLT5jbGllbnQtPmlycSk7Cit9CisKK3N0YXRpYyBpbnQgZGE5MDN4X2lycV9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IGRhOTAzeF9jaGlwICpjaGlwID0gZGF0YTsKKworCWRpc2FibGVfaXJxX25vc3luYyhpcnEpOworCSh2b2lkKXNjaGVkdWxlX3dvcmsoJmNoaXAtPmlycV93b3JrKTsKKworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIHN0cnVjdCBkYTkwM3hfY2hpcF9vcHMgZGE5MDN4X29wc1tdID0geworCVswXSA9IHsKKwkJLmluaXRfY2hpcAk9IGRhOTAzMF9pbml0X2NoaXAsCisJCS51bm1hc2tfZXZlbnRzCT0gZGE5MDMwX3VubWFza19ldmVudHMsCisJCS5tYXNrX2V2ZW50cwk9IGRhOTAzMF9tYXNrX2V2ZW50cywKKwkJLnJlYWRfZXZlbnRzCT0gZGE5MDMwX3JlYWRfZXZlbnRzLAorCQkucmVhZF9zdGF0dXMJPSBkYTkwMzBfcmVhZF9zdGF0dXMsCisJfSwKKwlbMV0gPSB7CisJCS5pbml0X2NoaXAJPSBkYTkwMzRfaW5pdF9jaGlwLAorCQkudW5tYXNrX2V2ZW50cwk9IGRhOTAzNF91bm1hc2tfZXZlbnRzLAorCQkubWFza19ldmVudHMJPSBkYTkwMzRfbWFza19ldmVudHMsCisJCS5yZWFkX2V2ZW50cwk9IGRhOTAzNF9yZWFkX2V2ZW50cywKKwkJLnJlYWRfc3RhdHVzCT0gZGE5MDM0X3JlYWRfc3RhdHVzLAorCX0KK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCBkYTkwM3hfaWRfdGFibGVbXSA9IHsKKwl7ICJkYTkwMzAiLCAwIH0sCisJeyAiZGE5MDM0IiwgMSB9LAorCXsgfSwKK307CitNT0RVTEVfREVWSUNFX1RBQkxFKGkyYywgZGE5MDN4X2lkX3RhYmxlKTsKKworc3RhdGljIGludCBfX2RldmV4aXQgX19yZW1vdmVfc3ViZGV2KHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqdW51c2VkKQoreworCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKHRvX3BsYXRmb3JtX2RldmljZShkZXYpKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBfX2RldmV4aXQgZGE5MDN4X3JlbW92ZV9zdWJkZXZzKHN0cnVjdCBkYTkwM3hfY2hpcCAqY2hpcCkKK3sKKwlyZXR1cm4gZGV2aWNlX2Zvcl9lYWNoX2NoaWxkKGNoaXAtPmRldiwgTlVMTCwgX19yZW1vdmVfc3ViZGV2KTsKK30KKworc3RhdGljIGludCBfX2RldmluaXQgZGE5MDN4X2FkZF9zdWJkZXZzKHN0cnVjdCBkYTkwM3hfY2hpcCAqY2hpcCwKKwkJCQkJc3RydWN0IGRhOTAzeF9wbGF0Zm9ybV9kYXRhICpwZGF0YSkKK3sKKwlzdHJ1Y3QgZGE5MDN4X3N1YmRldl9pbmZvICpzdWJkZXY7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldjsKKwlpbnQgaSwgcmV0ID0gMDsKKworCWZvciAoaSA9IDA7IGkgPCBwZGF0YS0+bnVtX3N1YmRldnM7IGkrKykgeworCQlzdWJkZXYgPSAmcGRhdGEtPnN1YmRldnNbaV07CisKKwkJcGRldiA9IHBsYXRmb3JtX2RldmljZV9hbGxvYyhzdWJkZXYtPm5hbWUsIHN1YmRldi0+aWQpOworCisJCXBkZXYtPmRldi5wYXJlbnQgPSBjaGlwLT5kZXY7CisJCXBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhID0gc3ViZGV2LT5wbGF0Zm9ybV9kYXRhOworCisJCXJldCA9IHBsYXRmb3JtX2RldmljZV9hZGQocGRldik7CisJCWlmIChyZXQpCisJCQlnb3RvIGZhaWxlZDsKKwl9CisJcmV0dXJuIDA7CisKK2ZhaWxlZDoKKwlkYTkwM3hfcmVtb3ZlX3N1YmRldnMoY2hpcCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBfX2RldmluaXQgZGE5MDN4X3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCisJCQkJICBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpCit7CisJc3RydWN0IGRhOTAzeF9wbGF0Zm9ybV9kYXRhICpwZGF0YSA9IGNsaWVudC0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJc3RydWN0IGRhOTAzeF9jaGlwICpjaGlwOworCXVuc2lnbmVkIGludCB0bXA7CisJaW50IHJldDsKKworCWNoaXAgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgZGE5MDN4X2NoaXApLCBHRlBfS0VSTkVMKTsKKwlpZiAoY2hpcCA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWNoaXAtPmNsaWVudCA9IGNsaWVudDsKKwljaGlwLT5kZXYgPSAmY2xpZW50LT5kZXY7CisJY2hpcC0+b3BzID0gJmRhOTAzeF9vcHNbaWQtPmRyaXZlcl9kYXRhXTsKKworCW11dGV4X2luaXQoJmNoaXAtPmxvY2spOworCUlOSVRfV09SSygmY2hpcC0+aXJxX3dvcmssIGRhOTAzeF9pcnFfd29yayk7CisJQkxPQ0tJTkdfSU5JVF9OT1RJRklFUl9IRUFEKCZjaGlwLT5ub3RpZmllcl9saXN0KTsKKworCWkyY19zZXRfY2xpZW50ZGF0YShjbGllbnQsIGNoaXApOworCisJcmV0ID0gY2hpcC0+b3BzLT5pbml0X2NoaXAoY2hpcCk7CisJaWYgKHJldCkKKwkJZ290byBvdXRfZnJlZV9jaGlwOworCisJLyogbWFzayBhbmQgY2xlYXIgYWxsIElSUXMgKi8KKwljaGlwLT5ldmVudHNfbWFzayA9IDB4ZmZmZmZmZmY7CisJY2hpcC0+b3BzLT5tYXNrX2V2ZW50cyhjaGlwLCBjaGlwLT5ldmVudHNfbWFzayk7CisJY2hpcC0+b3BzLT5yZWFkX2V2ZW50cyhjaGlwLCAmdG1wKTsKKworCXJldCA9IHJlcXVlc3RfaXJxKGNsaWVudC0+aXJxLCBkYTkwM3hfaXJxX2hhbmRsZXIsCisJCQlJUlFGX0RJU0FCTEVEIHwgSVJRRl9UUklHR0VSX0ZBTExJTkcsCisJCQkiZGE5MDN4IiwgY2hpcCk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKCZjbGllbnQtPmRldiwgImZhaWxlZCB0byByZXF1ZXN0IGlycSAlZFxuIiwKKwkJCQljbGllbnQtPmlycSk7CisJCWdvdG8gb3V0X2ZyZWVfY2hpcDsKKwl9CisKKwlyZXQgPSBkYTkwM3hfYWRkX3N1YmRldnMoY2hpcCwgcGRhdGEpOworCWlmIChyZXQpCisJCWdvdG8gb3V0X2ZyZWVfaXJxOworCisJcmV0dXJuIDA7CisKK291dF9mcmVlX2lycToKKwlmcmVlX2lycShjbGllbnQtPmlycSwgY2hpcCk7CitvdXRfZnJlZV9jaGlwOgorCWkyY19zZXRfY2xpZW50ZGF0YShjbGllbnQsIE5VTEwpOworCWtmcmVlKGNoaXApOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZleGl0IGRhOTAzeF9yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKK3sKKwlzdHJ1Y3QgZGE5MDN4X2NoaXAgKmNoaXAgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKworCWRhOTAzeF9yZW1vdmVfc3ViZGV2cyhjaGlwKTsKKwlrZnJlZShjaGlwKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIGRhOTAzeF9kcml2ZXIgPSB7CisJLmRyaXZlcgk9IHsKKwkJLm5hbWUJPSAiZGE5MDN4IiwKKwkJLm93bmVyCT0gVEhJU19NT0RVTEUsCisJfSwKKwkucHJvYmUJCT0gZGE5MDN4X3Byb2JlLAorCS5yZW1vdmUJCT0gX19kZXZleGl0X3AoZGE5MDN4X3JlbW92ZSksCisJLmlkX3RhYmxlCT0gZGE5MDN4X2lkX3RhYmxlLAorfTsKKworc3RhdGljIGludCBfX2luaXQgZGE5MDN4X2luaXQodm9pZCkKK3sKKwlyZXR1cm4gaTJjX2FkZF9kcml2ZXIoJmRhOTAzeF9kcml2ZXIpOworfQorbW9kdWxlX2luaXQoZGE5MDN4X2luaXQpOworCitzdGF0aWMgdm9pZCBfX2V4aXQgZGE5MDN4X2V4aXQodm9pZCkKK3sKKwlpMmNfZGVsX2RyaXZlcigmZGE5MDN4X2RyaXZlcik7Cit9Cittb2R1bGVfZXhpdChkYTkwM3hfZXhpdCk7CisKK01PRFVMRV9ERVNDUklQVElPTigiUE1JQyBEcml2ZXIgZm9yIERpYWxvZyBTZW1pY29uZHVjdG9yIERBOTAzNCIpOworTU9EVUxFX0FVVEhPUigiRXJpYyBNaWFvIDxlcmljLm1pYW9AbWFydmVsbC5jb20+IgorCSAgICAgICJNaWtlIFJhcG9wb3J0IDxtaWtlQGNvbXB1bGFiLmNvLmlsPiIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZmQvaHRjLWVncGlvLmMgYi9kcml2ZXJzL21mZC9odGMtZWdwaW8uYwppbmRleCA2YmU0MzE3Li4xYTRkMDQ2IDEwMDY0NAotLS0gYS9kcml2ZXJzL21mZC9odGMtZWdwaW8uYworKysgYi9kcml2ZXJzL21mZC9odGMtZWdwaW8uYwpAQCAtMTEyLDcgKzExMiw3IEBACiAJCS8qIFJ1biBpcnEgaGFuZGxlciAqLwogCQlwcl9kZWJ1ZygiZ290IElSUSAlZFxuIiwgaXJxcGluKTsKIAkJaXJxID0gZWktPmlycV9zdGFydCArIGlycXBpbjsKLQkJZGVzYyA9ICZpcnFfZGVzY1tpcnFdOworCQlkZXNjID0gaXJxX3RvX2Rlc2MoaXJxKTsKIAkJZGVzYy0+aGFuZGxlX2lycShpcnEsIGRlc2MpOwogCX0KIH0KQEAgLTI4OSw3ICsyODksNyBAQAogCWVpLT5iYXNlX2FkZHIgPSBpb3JlbWFwX25vY2FjaGUocmVzLT5zdGFydCwgcmVzLT5lbmQgLSByZXMtPnN0YXJ0KTsKIAlpZiAoIWVpLT5iYXNlX2FkZHIpCiAJCWdvdG8gZmFpbDsKLQlwcl9kZWJ1ZygiRUdQSU8gcGh5cz0lMDh4IHZpcnQ9JXBcbiIsIHJlcy0+c3RhcnQsIGVpLT5iYXNlX2FkZHIpOworCXByX2RlYnVnKCJFR1BJTyBwaHlzPSUwOHggdmlydD0lcFxuIiwgKHUzMilyZXMtPnN0YXJ0LCBlaS0+YmFzZV9hZGRyKTsKIAogCWlmICgocGRhdGEtPmJ1c193aWR0aCAhPSAxNikgJiYgKHBkYXRhLT5idXNfd2lkdGggIT0gMzIpKQogCQlnb3RvIGZhaWw7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21mZC9tZmQtY29yZS5jIGIvZHJpdmVycy9tZmQvbWZkLWNvcmUuYwppbmRleCA5YzljMTI2Li42YzBkMWJlIDEwMDY0NAotLS0gYS9kcml2ZXJzL21mZC9tZmQtY29yZS5jCisrKyBiL2RyaXZlcnMvbWZkL21mZC1jb3JlLmMKQEAgLTIwLDcgKzIwLDcgQEAKIAkJCSAgc3RydWN0IHJlc291cmNlICptZW1fYmFzZSwKIAkJCSAgaW50IGlycV9iYXNlKQogewotCXN0cnVjdCByZXNvdXJjZSByZXNbY2VsbC0+bnVtX3Jlc291cmNlc107CisJc3RydWN0IHJlc291cmNlICpyZXM7CiAJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldjsKIAlpbnQgcmV0ID0gLUVOT01FTTsKIAlpbnQgcjsKQEAgLTI5LDE0ICsyOSwxNyBAQAogCWlmICghcGRldikKIAkJZ290byBmYWlsX2FsbG9jOwogCisJcmVzID0ga3phbGxvYyhzaXplb2YoKnJlcykgKiBjZWxsLT5udW1fcmVzb3VyY2VzLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXJlcykKKwkJZ290byBmYWlsX2RldmljZTsKKwogCXBkZXYtPmRldi5wYXJlbnQgPSBwYXJlbnQ7CiAKIAlyZXQgPSBwbGF0Zm9ybV9kZXZpY2VfYWRkX2RhdGEocGRldiwKIAkJCWNlbGwtPnBsYXRmb3JtX2RhdGEsIGNlbGwtPmRhdGFfc2l6ZSk7CiAJaWYgKHJldCkKLQkJZ290byBmYWlsX2RldmljZTsKKwkJZ290byBmYWlsX3JlczsKIAotCW1lbXNldChyZXMsIDAsIHNpemVvZihyZXMpKTsKIAlmb3IgKHIgPSAwOyByIDwgY2VsbC0+bnVtX3Jlc291cmNlczsgcisrKSB7CiAJCXJlc1tyXS5uYW1lID0gY2VsbC0+cmVzb3VyY2VzW3JdLm5hbWU7CiAJCXJlc1tyXS5mbGFncyA9IGNlbGwtPnJlc291cmNlc1tyXS5mbGFnczsKQEAgLTY0LDExICs2NywxNSBAQAogCiAJcmV0ID0gcGxhdGZvcm1fZGV2aWNlX2FkZChwZGV2KTsKIAlpZiAocmV0KQotCQlnb3RvIGZhaWxfZGV2aWNlOworCQlnb3RvIGZhaWxfcmVzOworCisJa2ZyZWUocmVzKTsKIAogCXJldHVybiAwOwogCiAvKglwbGF0Zm9ybV9kZXZpY2VfZGVsKHBkZXYpOyAqLworZmFpbF9yZXM6CisJa2ZyZWUocmVzKTsKIGZhaWxfZGV2aWNlOgogCXBsYXRmb3JtX2RldmljZV9wdXQocGRldik7CiBmYWlsX2FsbG9jOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZmQvc201MDEuYyBiL2RyaXZlcnMvbWZkL3NtNTAxLmMKaW5kZXggN2FlYmFkNC4uMjIwZTQzNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZmQvc201MDEuYworKysgYi9kcml2ZXJzL21mZC9zbTUwMS5jCkBAIC02MjMsOCArNjIzLDggQEAKIAogCXNtNTAxX3N5bmNfcmVncyhzbSk7CiAKLQlkZXZfaW5mbyhzbS0+ZGV2LCAiZ2F0ZSAlMDhseCwgY2xvY2sgJTA4bHgsIG1vZGUgJTA4bHhcbiIsCi0JCSBnYXRlLCBjbG9jaywgbW9kZSk7CisJZGV2X2RiZyhzbS0+ZGV2LCAiZ2F0ZSAlMDhseCwgY2xvY2sgJTA4bHgsIG1vZGUgJTA4bHhcbiIsCisJCWdhdGUsIGNsb2NrLCBtb2RlKTsKIAogCXNtNTAxX21kZWxheShzbSwgMTYpOwogCW11dGV4X3VubG9jaygmc20tPmNsb2NrX2xvY2spOwpAQCAtNzQyLDcgKzc0Miw3IEBACiAJaW50IHJldDsKIAogCWZvciAocHRyID0gMDsgcHRyIDwgcGRldi0+bnVtX3Jlc291cmNlczsgcHRyKyspIHsKLQkJcHJpbnRrKCIlc1slZF0gZmxhZ3MgJTA4bHg6ICUwOGxseC4uJTA4bGx4XG4iLAorCQlwcmludGsoS0VSTl9ERUJVRyAiJXNbJWRdIGZsYWdzICUwOGx4OiAlMDhsbHguLiUwOGxseFxuIiwKIAkJICAgICAgIHBkZXYtPm5hbWUsIHB0ciwKIAkJICAgICAgIHBkZXYtPnJlc291cmNlW3B0cl0uZmxhZ3MsCiAJCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKXBkZXYtPnJlc291cmNlW3B0cl0uc3RhcnQsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21mZC90N2w2NnhiLmMgYi9kcml2ZXJzL21mZC90N2w2NnhiLmMKaW5kZXggNDlhMGZmZi4uOWY3MDI0YzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWZkL3Q3bDY2eGIuYworKysgYi9kcml2ZXJzL21mZC90N2w2NnhiLmMKQEAgLTI0LDggKzI0LDEwIEBACiAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgogI2luY2x1ZGUgPGxpbnV4L2lycS5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L21mZC9jb3JlLmg+CiAjaW5jbHVkZSA8bGludXgvbWZkL3RtaW8uaD4KQEAgLTU2LDYgKzU4LDggQEAKIAlzcGlubG9ja190CQlsb2NrOwogCiAJc3RydWN0IHJlc291cmNlCQlyc2NyOworCXN0cnVjdCBjbGsJCSpjbGs0OG07CisJc3RydWN0IGNsawkJKmNsazMyazsKIAlpbnQJCQlpcnE7CiAJaW50CQkJaXJxX2Jhc2U7CiB9OwpAQCAtNjUsMTMgKzY5LDExIEBACiBzdGF0aWMgaW50IHQ3bDY2eGJfbW1jX2VuYWJsZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICptbWMpCiB7CiAJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKG1tYy0+ZGV2LnBhcmVudCk7Ci0Jc3RydWN0IHQ3bDY2eGJfcGxhdGZvcm1fZGF0YSAgICpwZGF0YSA9IGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CiAJc3RydWN0IHQ3bDY2eGIgKnQ3bDY2eGIgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdTggZGV2X2N0bDsKIAotCWlmIChwZGF0YS0+ZW5hYmxlX2NsazMyaykKLQkJcGRhdGEtPmVuYWJsZV9jbGszMmsoZGV2KTsKKwljbGtfZW5hYmxlKHQ3bDY2eGItPmNsazMyayk7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmdDdsNjZ4Yi0+bG9jaywgZmxhZ3MpOwogCkBAIC04Nyw3ICs4OSw2IEBACiBzdGF0aWMgaW50IHQ3bDY2eGJfbW1jX2Rpc2FibGUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqbW1jKQogewogCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldiA9IHRvX3BsYXRmb3JtX2RldmljZShtbWMtPmRldi5wYXJlbnQpOwotCXN0cnVjdCB0N2w2NnhiX3BsYXRmb3JtX2RhdGEgICAqcGRhdGEgPSBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOwogCXN0cnVjdCB0N2w2NnhiICp0N2w2NnhiID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXU4IGRldl9jdGw7CkBAIC0xMDAsOCArMTAxLDcgQEAKIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnQ3bDY2eGItPmxvY2ssIGZsYWdzKTsKIAotCWlmIChwZGF0YS0+ZGlzYWJsZV9jbGszMmspCi0JCXBkYXRhLT5kaXNhYmxlX2NsazMyayhkZXYpOworCWNsa19kaXNhYmxlKHQ3bDY2eGItPmNsazMyayk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTI1OCwxOCArMjU4LDIyIEBACiAjaWZkZWYgQ09ORklHX1BNCiBzdGF0aWMgaW50IHQ3bDY2eGJfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKKwlzdHJ1Y3QgdDdsNjZ4YiAqdDdsNjZ4YiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CiAJc3RydWN0IHQ3bDY2eGJfcGxhdGZvcm1fZGF0YSAqcGRhdGEgPSBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOwogCiAJaWYgKHBkYXRhICYmIHBkYXRhLT5zdXNwZW5kKQogCQlwZGF0YS0+c3VzcGVuZChkZXYpOworCWNsa19kaXNhYmxlKHQ3bDY2eGItPmNsazQ4bSk7CiAKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCB0N2w2NnhiX3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7CisJc3RydWN0IHQ3bDY2eGIgKnQ3bDY2eGIgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOwogCXN0cnVjdCB0N2w2NnhiX3BsYXRmb3JtX2RhdGEgKnBkYXRhID0gZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKIAorCWNsa19lbmFibGUodDdsNjZ4Yi0+Y2xrNDhtKTsKIAlpZiAocGRhdGEgJiYgcGRhdGEtPnJlc3VtZSkKIAkJcGRhdGEtPnJlc3VtZShkZXYpOwogCkBAIC0zMDksNiArMzEzLDE5IEBACiAKIAl0N2w2NnhiLT5pcnFfYmFzZSA9IHBkYXRhLT5pcnFfYmFzZTsKIAorCXQ3bDY2eGItPmNsazMyayA9IGNsa19nZXQoJmRldi0+ZGV2LCAiQ0xLX0NLMzJLIik7CisJaWYgKElTX0VSUih0N2w2NnhiLT5jbGszMmspKSB7CisJCXJldCA9IFBUUl9FUlIodDdsNjZ4Yi0+Y2xrMzJrKTsKKwkJZ290byBlcnJfY2xrMzJrX2dldDsKKwl9CisKKwl0N2w2NnhiLT5jbGs0OG0gPSBjbGtfZ2V0KCZkZXYtPmRldiwgIkNMS19DSzQ4TSIpOworCWlmIChJU19FUlIodDdsNjZ4Yi0+Y2xrNDhtKSkgeworCQlyZXQgPSBQVFJfRVJSKHQ3bDY2eGItPmNsazQ4bSk7CisJCWNsa19wdXQodDdsNjZ4Yi0+Y2xrMzJrKTsKKwkJZ290byBlcnJfY2xrNDhtX2dldDsKKwl9CisKIAlyc2NyID0gJnQ3bDY2eGItPnJzY3I7CiAJcnNjci0+bmFtZSA9ICJ0N2w2NnhiLWNvcmUiOwogCXJzY3ItPnN0YXJ0ID0gaW9tZW0tPnN0YXJ0OwpAQCAtMzI1LDYgKzM0Miw4IEBACiAJCWdvdG8gZXJyX2lvcmVtYXA7CiAJfQogCisJY2xrX2VuYWJsZSh0N2w2NnhiLT5jbGs0OG0pOworCiAJaWYgKHBkYXRhICYmIHBkYXRhLT5lbmFibGUpCiAJCXBkYXRhLT5lbmFibGUoZGV2KTsKIApAQCAtMzU5LDkgKzM3OCwxMyBAQAogCWlvdW5tYXAodDdsNjZ4Yi0+c2NyKTsKIGVycl9pb3JlbWFwOgogCXJlbGVhc2VfcmVzb3VyY2UoJnQ3bDY2eGItPnJzY3IpOwotZXJyX25vaXJxOgogZXJyX3JlcXVlc3Rfc2NyOgogCWtmcmVlKHQ3bDY2eGIpOworCWNsa19wdXQodDdsNjZ4Yi0+Y2xrNDhtKTsKK2Vycl9jbGs0OG1fZ2V0OgorCWNsa19wdXQodDdsNjZ4Yi0+Y2xrMzJrKTsKK2Vycl9jbGszMmtfZ2V0OgorZXJyX25vaXJxOgogCXJldHVybiByZXQ7CiB9CiAKQEAgLTM3Miw3ICszOTUsOCBAQAogCWludCByZXQ7CiAKIAlyZXQgPSBwZGF0YS0+ZGlzYWJsZShkZXYpOwotCisJY2xrX2Rpc2FibGUodDdsNjZ4Yi0+Y2xrNDhtKTsKKwljbGtfcHV0KHQ3bDY2eGItPmNsazQ4bSk7CiAJdDdsNjZ4Yl9kZXRhY2hfaXJxKGRldik7CiAJaW91bm1hcCh0N2w2NnhiLT5zY3IpOwogCXJlbGVhc2VfcmVzb3VyY2UoJnQ3bDY2eGItPnJzY3IpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZmQvdGM2Mzg3eGIuYyBiL2RyaXZlcnMvbWZkL3RjNjM4N3hiLmMKaW5kZXggYTIyYjIxYS4uNDMyMjJjMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZmQvdGM2Mzg3eGIuYworKysgYi9kcml2ZXJzL21mZC90YzYzODd4Yi5jCkBAIC0xMiw2ICsxMiw3IEBACiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KICNpbmNsdWRlIDxsaW51eC9lcnIuaD4KICNpbmNsdWRlIDxsaW51eC9tZmQvY29yZS5oPgogI2luY2x1ZGUgPGxpbnV4L21mZC90bWlvLmg+CkBAIC0yNCwxOCArMjUsMjIgQEAKICNpZmRlZiBDT05GSUdfUE0KIHN0YXRpYyBpbnQgdGM2Mzg3eGJfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKLQlzdHJ1Y3QgdGM2Mzg3eGJfcGxhdGZvcm1fZGF0YSAqcGRhdGEgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBjbGsgKmNsazMyayA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IHRjNjM4N3hiX3BsYXRmb3JtX2RhdGEgKnBkYXRhID0gZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKIAogCWlmIChwZGF0YSAmJiBwZGF0YS0+c3VzcGVuZCkKIAkJcGRhdGEtPnN1c3BlbmQoZGV2KTsKKwljbGtfZGlzYWJsZShjbGszMmspOwogCiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgdGM2Mzg3eGJfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgdGM2Mzg3eGJfcGxhdGZvcm1fZGF0YSAqcGRhdGEgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBjbGsgKmNsazMyayA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IHRjNjM4N3hiX3BsYXRmb3JtX2RhdGEgKnBkYXRhID0gZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKIAorCWNsa19lbmFibGUoY2xrMzJrKTsKIAlpZiAocGRhdGEgJiYgcGRhdGEtPnJlc3VtZSkKIAkJcGRhdGEtPnJlc3VtZShkZXYpOwogCkBAIC01MSwxMCArNTYsOSBAQAogc3RhdGljIGludCB0YzYzODd4Yl9tbWNfZW5hYmxlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm1tYykKIHsKIAlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYgICAgICA9IHRvX3BsYXRmb3JtX2RldmljZShtbWMtPmRldi5wYXJlbnQpOwotCXN0cnVjdCB0YzYzODd4Yl9wbGF0Zm9ybV9kYXRhICp0YzYzODd4YiA9IGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJc3RydWN0IGNsayAqY2xrMzJrID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKIAotCWlmICh0YzYzODd4Yi0+ZW5hYmxlX2NsazMyaykKLQkJdGM2Mzg3eGItPmVuYWJsZV9jbGszMmsoZGV2KTsKKwljbGtfZW5hYmxlKGNsazMyayk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTYyLDEwICs2Niw5IEBACiBzdGF0aWMgaW50IHRjNjM4N3hiX21tY19kaXNhYmxlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm1tYykKIHsKIAlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYgICAgICA9IHRvX3BsYXRmb3JtX2RldmljZShtbWMtPmRldi5wYXJlbnQpOwotCXN0cnVjdCB0YzYzODd4Yl9wbGF0Zm9ybV9kYXRhICp0YzYzODd4YiA9IGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJc3RydWN0IGNsayAqY2xrMzJrID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKIAotCWlmICh0YzYzODd4Yi0+ZGlzYWJsZV9jbGszMmspCi0JCXRjNjM4N3hiLT5kaXNhYmxlX2NsazMyayhkZXYpOworCWNsa19kaXNhYmxlKGNsazMyayk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTEwMiwxNCArMTA1LDE0IEBACiAKIHN0YXRpYyBpbnQgdGM2Mzg3eGJfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewotCXN0cnVjdCB0YzYzODd4Yl9wbGF0Zm9ybV9kYXRhICpkYXRhID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgdGM2Mzg3eGJfcGxhdGZvcm1fZGF0YSAqcGRhdGEgPSBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOwogCXN0cnVjdCByZXNvdXJjZSAqaW9tZW07CisJc3RydWN0IGNsayAqY2xrMzJrOwogCWludCBpcnEsIHJldDsKIAogCWlvbWVtID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOwogCWlmICghaW9tZW0pIHsKLQkJcmV0ID0gLUVJTlZBTDsKLQkJZ290byBlcnJfcmVzb3VyY2U7CisJCXJldHVybiAtRUlOVkFMOwogCX0KIAogCXJldCAgPSBwbGF0Zm9ybV9nZXRfaXJxKGRldiwgMCk7CkBAIC0xMTgsOCArMTIxLDE1IEBACiAJZWxzZQogCQlnb3RvIGVycl9yZXNvdXJjZTsKIAotCWlmIChkYXRhICYmIGRhdGEtPmVuYWJsZSkKLQkJZGF0YS0+ZW5hYmxlKGRldik7CisJY2xrMzJrID0gY2xrX2dldCgmZGV2LT5kZXYsICJDTEtfQ0szMksiKTsKKwlpZiAoSVNfRVJSKGNsazMyaykpIHsKKwkJcmV0ID0gUFRSX0VSUihjbGszMmspOworCQlnb3RvIGVycl9yZXNvdXJjZTsKKwl9CisJcGxhdGZvcm1fc2V0X2RydmRhdGEoZGV2LCBjbGszMmspOworCisJaWYgKHBkYXRhICYmIHBkYXRhLT5lbmFibGUpCisJCXBkYXRhLT5lbmFibGUoZGV2KTsKIAogCXByaW50ayhLRVJOX0lORk8gIlRvc2hpYmEgdGM2Mzg3eGIgaW5pdGlhbGlzZWRcbiIpOwogCkBAIC0xMzQsMTggKzE0NCwxOSBAQAogCWlmICghcmV0KQogCQlyZXR1cm4gMDsKIAorCWNsa19wdXQoY2xrMzJrKTsKIGVycl9yZXNvdXJjZToKIAlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgaW50IHRjNjM4N3hiX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IHRjNjM4N3hiX3BsYXRmb3JtX2RhdGEgKmRhdGEgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBjbGsgKmNsazMyayA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CiAKLQlpZiAoZGF0YSAmJiBkYXRhLT5kaXNhYmxlKQotCQlkYXRhLT5kaXNhYmxlKGRldik7Ci0KLQkvKiBGSVhNRSAtIGZyZWUgdGhlIHJlc291cmNlcyEgKi8KKwltZmRfcmVtb3ZlX2RldmljZXMoJmRldi0+ZGV2KTsKKwljbGtfZGlzYWJsZShjbGszMmspOworCWNsa19wdXQoY2xrMzJrKTsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShkZXYsIE5VTEwpOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21mZC90YzYzOTN4Yi5jIGIvZHJpdmVycy9tZmQvdGM2MzkzeGIuYwppbmRleCBlNGMxYzc4Li5mODU2ZTk0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21mZC90YzYzOTN4Yi5jCisrKyBiL2RyaXZlcnMvbWZkL3RjNjM5M3hiLmMKQEAgLTExMyw2ICsxMTMsOCBAQAogZW51bSB7CiAJVEM2MzkzWEJfQ0VMTF9OQU5ELAogCVRDNjM5M1hCX0NFTExfTU1DLAorCVRDNjM5M1hCX0NFTExfT0hDSSwKKwlUQzYzOTNYQl9DRUxMX0ZCLAogfTsKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCkBAIC0xNzAsNiArMTcyLDE3NiBAQAogCX0sCiB9OwogCitjb25zdCBzdGF0aWMgc3RydWN0IHJlc291cmNlIHRjNjM5M3hiX29oY2lfcmVzb3VyY2VzW10gPSB7CisJeworCQkuc3RhcnQJPSAweDMwMDAsCisJCS5lbmQJPSAweDMxZmYsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJeworCQkuc3RhcnQJPSAweDAzMDAsCisJCS5lbmQJPSAweDAzZmYsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJeworCQkuc3RhcnQJPSAweDAxMDAwMCwKKwkJLmVuZAk9IDB4MDE3ZmZmLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCXsKKwkJLnN0YXJ0CT0gMHgwMTgwMDAsCisJCS5lbmQJPSAweDAxZmZmZiwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwl7CisJCS5zdGFydAk9IElSUV9UQzYzOTNfT0hDSSwKKwkJLmVuZAk9IElSUV9UQzYzOTNfT0hDSSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgX19kZXZpbml0ZGF0YSB0YzYzOTN4Yl9mYl9yZXNvdXJjZXNbXSA9IHsKKwl7CisJCS5zdGFydAk9IDB4NTAwMCwKKwkJLmVuZAk9IDB4NTFmZiwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwl7CisJCS5zdGFydAk9IDB4MDUwMCwKKwkJLmVuZAk9IDB4MDVmZiwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwl7CisJCS5zdGFydAk9IDB4MTAwMDAwLAorCQkuZW5kCT0gMHgxZmZmZmYsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJeworCQkuc3RhcnQJPSBJUlFfVEM2MzkzX0ZCLAorCQkuZW5kCT0gSVJRX1RDNjM5M19GQiwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKK3N0YXRpYyBpbnQgdGM2MzkzeGJfb2hjaV9lbmFibGUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQoreworCXN0cnVjdCB0YzYzOTN4YiAqdGM2MzkzeGIgPSBkZXZfZ2V0X2RydmRhdGEoZGV2LT5kZXYucGFyZW50KTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXUxNiBjY3I7CisJdTggZmVyOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnRjNjM5M3hiLT5sb2NrLCBmbGFncyk7CisKKwljY3IgPSB0bWlvX2lvcmVhZDE2KHRjNjM5M3hiLT5zY3IgKyBTQ1JfQ0NSKTsKKwljY3IgfD0gU0NSX0NDUl9VU0JDSzsKKwl0bWlvX2lvd3JpdGUxNihjY3IsIHRjNjM5M3hiLT5zY3IgKyBTQ1JfQ0NSKTsKKworCWZlciA9IHRtaW9faW9yZWFkOCh0YzYzOTN4Yi0+c2NyICsgU0NSX0ZFUik7CisJZmVyIHw9IFNDUl9GRVJfVVNCRU47CisJdG1pb19pb3dyaXRlOChmZXIsIHRjNjM5M3hiLT5zY3IgKyBTQ1JfRkVSKTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnRjNjM5M3hiLT5sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB0YzYzOTN4Yl9vaGNpX2Rpc2FibGUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQoreworCXN0cnVjdCB0YzYzOTN4YiAqdGM2MzkzeGIgPSBkZXZfZ2V0X2RydmRhdGEoZGV2LT5kZXYucGFyZW50KTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXUxNiBjY3I7CisJdTggZmVyOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnRjNjM5M3hiLT5sb2NrLCBmbGFncyk7CisKKwlmZXIgPSB0bWlvX2lvcmVhZDgodGM2MzkzeGItPnNjciArIFNDUl9GRVIpOworCWZlciAmPSB+U0NSX0ZFUl9VU0JFTjsKKwl0bWlvX2lvd3JpdGU4KGZlciwgdGM2MzkzeGItPnNjciArIFNDUl9GRVIpOworCisJY2NyID0gdG1pb19pb3JlYWQxNih0YzYzOTN4Yi0+c2NyICsgU0NSX0NDUik7CisJY2NyICY9IH5TQ1JfQ0NSX1VTQkNLOworCXRtaW9faW93cml0ZTE2KGNjciwgdGM2MzkzeGItPnNjciArIFNDUl9DQ1IpOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdGM2MzkzeGItPmxvY2ssIGZsYWdzKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHRjNjM5M3hiX2ZiX2VuYWJsZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHRjNjM5M3hiICp0YzYzOTN4YiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYtPmRldi5wYXJlbnQpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdTE2IGNjcjsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZ0YzYzOTN4Yi0+bG9jaywgZmxhZ3MpOworCisJY2NyID0gdG1pb19pb3JlYWQxNih0YzYzOTN4Yi0+c2NyICsgU0NSX0NDUik7CisJY2NyICY9IH5TQ1JfQ0NSX01DTEtfTUFTSzsKKwljY3IgfD0gU0NSX0NDUl9NQ0xLXzQ4OworCXRtaW9faW93cml0ZTE2KGNjciwgdGM2MzkzeGItPnNjciArIFNDUl9DQ1IpOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdGM2MzkzeGItPmxvY2ssIGZsYWdzKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHRjNjM5M3hiX2ZiX2Rpc2FibGUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQoreworCXN0cnVjdCB0YzYzOTN4YiAqdGM2MzkzeGIgPSBkZXZfZ2V0X2RydmRhdGEoZGV2LT5kZXYucGFyZW50KTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXUxNiBjY3I7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmdGM2MzkzeGItPmxvY2ssIGZsYWdzKTsKKworCWNjciA9IHRtaW9faW9yZWFkMTYodGM2MzkzeGItPnNjciArIFNDUl9DQ1IpOworCWNjciAmPSB+U0NSX0NDUl9NQ0xLX01BU0s7CisJY2NyIHw9IFNDUl9DQ1JfTUNMS19PRkY7CisJdG1pb19pb3dyaXRlMTYoY2NyLCB0YzYzOTN4Yi0+c2NyICsgU0NSX0NDUik7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0YzYzOTN4Yi0+bG9jaywgZmxhZ3MpOworCisJcmV0dXJuIDA7Cit9CisKK2ludCB0YzYzOTN4Yl9sY2Rfc2V0X3Bvd2VyKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmZiLCBib29sIG9uKQoreworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldiA9IHRvX3BsYXRmb3JtX2RldmljZShmYi0+ZGV2LnBhcmVudCk7CisJc3RydWN0IHRjNjM5M3hiICp0YzYzOTN4YiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CisJdTggZmVyOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmdGM2MzkzeGItPmxvY2ssIGZsYWdzKTsKKworCWZlciA9IGlvcmVhZDgodGM2MzkzeGItPnNjciArIFNDUl9GRVIpOworCWlmIChvbikKKwkJZmVyIHw9IFNDUl9GRVJfU0xDREVOOworCWVsc2UKKwkJZmVyICY9IH5TQ1JfRkVSX1NMQ0RFTjsKKwlpb3dyaXRlOChmZXIsIHRjNjM5M3hiLT5zY3IgKyBTQ1JfRkVSKTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnRjNjM5M3hiLT5sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0wodGM2MzkzeGJfbGNkX3NldF9wb3dlcik7CisKK2ludCB0YzYzOTN4Yl9sY2RfbW9kZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpmYiwKKwkJCQkJY29uc3Qgc3RydWN0IGZiX3ZpZGVvbW9kZSAqbW9kZSkgeworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldiA9IHRvX3BsYXRmb3JtX2RldmljZShmYi0+ZGV2LnBhcmVudCk7CisJc3RydWN0IHRjNjM5M3hiICp0YzYzOTN4YiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZ0YzYzOTN4Yi0+bG9jaywgZmxhZ3MpOworCisJaW93cml0ZTE2KG1vZGUtPnBpeGNsb2NrLCB0YzYzOTN4Yi0+c2NyICsgU0NSX1BMTDFDUiArIDApOworCWlvd3JpdGUxNihtb2RlLT5waXhjbG9jayA+PiAxNiwgdGM2MzkzeGItPnNjciArIFNDUl9QTEwxQ1IgKyAyKTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnRjNjM5M3hiLT5sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0wodGM2MzkzeGJfbGNkX21vZGUpOworCiBzdGF0aWMgc3RydWN0IG1mZF9jZWxsIF9fZGV2aW5pdGRhdGEgdGM2MzkzeGJfY2VsbHNbXSA9IHsKIAlbVEM2MzkzWEJfQ0VMTF9OQU5EXSA9IHsKIAkJLm5hbWUgPSAidG1pby1uYW5kIiwKQEAgLTE4Miw2ICszNTQsMjQgQEAKIAkJLm51bV9yZXNvdXJjZXMgPSBBUlJBWV9TSVpFKHRjNjM5M3hiX21tY19yZXNvdXJjZXMpLAogCQkucmVzb3VyY2VzID0gdGM2MzkzeGJfbW1jX3Jlc291cmNlcywKIAl9LAorCVtUQzYzOTNYQl9DRUxMX09IQ0ldID0geworCQkubmFtZSA9ICJ0bWlvLW9oY2kiLAorCQkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUodGM2MzkzeGJfb2hjaV9yZXNvdXJjZXMpLAorCQkucmVzb3VyY2VzID0gdGM2MzkzeGJfb2hjaV9yZXNvdXJjZXMsCisJCS5lbmFibGUgPSB0YzYzOTN4Yl9vaGNpX2VuYWJsZSwKKwkJLnN1c3BlbmQgPSB0YzYzOTN4Yl9vaGNpX2Rpc2FibGUsCisJCS5yZXN1bWUgPSB0YzYzOTN4Yl9vaGNpX2VuYWJsZSwKKwkJLmRpc2FibGUgPSB0YzYzOTN4Yl9vaGNpX2Rpc2FibGUsCisJfSwKKwlbVEM2MzkzWEJfQ0VMTF9GQl0gPSB7CisJCS5uYW1lID0gInRtaW8tZmIiLAorCQkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUodGM2MzkzeGJfZmJfcmVzb3VyY2VzKSwKKwkJLnJlc291cmNlcyA9IHRjNjM5M3hiX2ZiX3Jlc291cmNlcywKKwkJLmVuYWJsZSA9IHRjNjM5M3hiX2ZiX2VuYWJsZSwKKwkJLnN1c3BlbmQgPSB0YzYzOTN4Yl9mYl9kaXNhYmxlLAorCQkucmVzdW1lID0gdGM2MzkzeGJfZmJfZW5hYmxlLAorCQkuZGlzYWJsZSA9IHRjNjM5M3hiX2ZiX2Rpc2FibGUsCisJfSwKIH07CiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwpAQCAtMzY5LDQxICs1NTksMTIgQEAKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKLXN0YXRpYyBpbnQgdGM2MzkzeGJfaHdfaW5pdChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IHRjNjM5M3hiX3BsYXRmb3JtX2RhdGEgKnRjcGQgPSBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOwotCXN0cnVjdCB0YzYzOTN4YiAqdGM2MzkzeGIgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOwotCWludCBpOwotCi0JaW93cml0ZTgodGM2MzkzeGItPnN1c3BlbmRfc3RhdGUuZmVyLAl0YzYzOTN4Yi0+c2NyICsgU0NSX0ZFUik7Ci0JaW93cml0ZTE2KHRjcGQtPnNjcl9wbGwyY3IsCQl0YzYzOTN4Yi0+c2NyICsgU0NSX1BMTDJDUik7Ci0JaW93cml0ZTE2KHRjNjM5M3hiLT5zdXNwZW5kX3N0YXRlLmNjciwJdGM2MzkzeGItPnNjciArIFNDUl9DQ1IpOwotCWlvd3JpdGUxNihTQ1JfTUNSX1JEWV9PUEVORFJBSU4gfCBTQ1JfTUNSX1JEWV9VTksgfCBTQ1JfTUNSX1JEWV9FTiB8Ci0JCSAgU0NSX01DUl9JTlRfT1BFTkRSQUlOIHwgU0NSX01DUl9JTlRfVU5LIHwgU0NSX01DUl9JTlRfRU4gfAotCQkgIEJJVCgxNSksCQkJdGM2MzkzeGItPnNjciArIFNDUl9NQ1IpOwotCWlvd3JpdGUxNih0Y3BkLT5zY3JfZ3BlciwJCXRjNjM5M3hiLT5zY3IgKyBTQ1JfR1BFUik7Ci0JaW93cml0ZTgoMCwJCQkJdGM2MzkzeGItPnNjciArIFNDUl9JUlIpOwotCWlvd3JpdGU4KDB4YmYsCQkJCXRjNjM5M3hiLT5zY3IgKyBTQ1JfSU1SKTsKLQotCWZvciAoaSA9IDA7IGkgPCAzOyBpKyspIHsKLQkJaW93cml0ZTgodGM2MzkzeGItPnN1c3BlbmRfc3RhdGUuZ3BvX2RzcltpXSwKLQkJCQkJdGM2MzkzeGItPnNjciArIFNDUl9HUE9fRFNSKGkpKTsKLQkJaW93cml0ZTgodGM2MzkzeGItPnN1c3BlbmRfc3RhdGUuZ3BvX2RvZWNyW2ldLAotCQkJCQl0YzYzOTN4Yi0+c2NyICsgU0NSX0dQT19ET0VDUihpKSk7Ci0JCWlvd3JpdGU4KHRjNjM5M3hiLT5zdXNwZW5kX3N0YXRlLmdwaV9iY3JbaV0sCi0JCQkJCXRjNjM5M3hiLT5zY3IgKyBTQ1JfR1BJX0JDUihpKSk7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyBpbnQgX19kZXZpbml0IHRjNjM5M3hiX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgdGM2MzkzeGJfcGxhdGZvcm1fZGF0YSAqdGNwZCA9IGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CiAJc3RydWN0IHRjNjM5M3hiICp0YzYzOTN4YjsKIAlzdHJ1Y3QgcmVzb3VyY2UgKmlvbWVtLCAqcnNjcjsKIAlpbnQgcmV0LCB0ZW1wOwotCWludCBpOwogCiAJaW9tZW0gPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UoZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CiAJaWYgKCFpb21lbSkKQEAgLTQ1OCwyMSArNjE5LDE2IEBACiAJaWYgKHJldCkKIAkJZ290byBlcnJfZW5hYmxlOwogCi0JdGM2MzkzeGItPnN1c3BlbmRfc3RhdGUuZmVyID0gMDsKLQotCWZvciAoaSA9IDA7IGkgPCAzOyBpKyspIHsKLQkJdGM2MzkzeGItPnN1c3BlbmRfc3RhdGUuZ3BvX2RzcltpXSA9Ci0JCQkodGNwZC0+c2NyX2dwb19kc3IgPj4gKDggKiBpKSkgJiAweGZmOwotCQl0YzYzOTN4Yi0+c3VzcGVuZF9zdGF0ZS5ncG9fZG9lY3JbaV0gPQotCQkJKHRjcGQtPnNjcl9ncG9fZG9lY3IgPj4gKDggKiBpKSkgJiAweGZmOwotCX0KLQotCXRjNjM5M3hiLT5zdXNwZW5kX3N0YXRlLmNjciA9IFNDUl9DQ1JfVU5LMSB8Ci0JCQkJCVNDUl9DQ1JfSENMS180ODsKLQotCXJldCA9IHRjNjM5M3hiX2h3X2luaXQoZGV2KTsKLQlpZiAocmV0KQotCQlnb3RvIGVycl9od19pbml0OworCWlvd3JpdGU4KDAsCQkJCXRjNjM5M3hiLT5zY3IgKyBTQ1JfRkVSKTsKKwlpb3dyaXRlMTYodGNwZC0+c2NyX3BsbDJjciwJCXRjNjM5M3hiLT5zY3IgKyBTQ1JfUExMMkNSKTsKKwlpb3dyaXRlMTYoU0NSX0NDUl9VTksxIHwgU0NSX0NDUl9IQ0xLXzQ4LAorCQkJCQkJdGM2MzkzeGItPnNjciArIFNDUl9DQ1IpOworCWlvd3JpdGUxNihTQ1JfTUNSX1JEWV9PUEVORFJBSU4gfCBTQ1JfTUNSX1JEWV9VTksgfCBTQ1JfTUNSX1JEWV9FTiB8CisJCSAgU0NSX01DUl9JTlRfT1BFTkRSQUlOIHwgU0NSX01DUl9JTlRfVU5LIHwgU0NSX01DUl9JTlRfRU4gfAorCQkgIEJJVCgxNSksCQkJdGM2MzkzeGItPnNjciArIFNDUl9NQ1IpOworCWlvd3JpdGUxNih0Y3BkLT5zY3JfZ3BlciwJCXRjNjM5M3hiLT5zY3IgKyBTQ1JfR1BFUik7CisJaW93cml0ZTgoMCwJCQkJdGM2MzkzeGItPnNjciArIFNDUl9JUlIpOworCWlvd3JpdGU4KDB4YmYsCQkJCXRjNjM5M3hiLT5zY3IgKyBTQ1JfSU1SKTsKIAogCXByaW50ayhLRVJOX0lORk8gIlRvc2hpYmEgdGM2MzkzeGIgcmV2aXNpb24gJWQgYXQgMHglMDhseCwgaXJxICVkXG4iLAogCQkJdG1pb19pb3JlYWQ4KHRjNjM5M3hiLT5zY3IgKyBTQ1JfUkVWSUQpLApAQCAtNDg4LDE2ICs2NDQsMzMgQEAKIAogCXRjNjM5M3hiX2F0dGFjaF9pcnEoZGV2KTsKIAorCWlmICh0Y3BkLT5zZXR1cCkgeworCQlyZXQgPSB0Y3BkLT5zZXR1cChkZXYpOworCQlpZiAocmV0KQorCQkJZ290byBlcnJfc2V0dXA7CisJfQorCiAJdGM2MzkzeGJfY2VsbHNbVEM2MzkzWEJfQ0VMTF9OQU5EXS5kcml2ZXJfZGF0YSA9IHRjcGQtPm5hbmRfZGF0YTsKIAl0YzYzOTN4Yl9jZWxsc1tUQzYzOTNYQl9DRUxMX05BTkRdLnBsYXRmb3JtX2RhdGEgPQogCQkmdGM2MzkzeGJfY2VsbHNbVEM2MzkzWEJfQ0VMTF9OQU5EXTsKIAl0YzYzOTN4Yl9jZWxsc1tUQzYzOTNYQl9DRUxMX05BTkRdLmRhdGFfc2l6ZSA9CiAJCXNpemVvZih0YzYzOTN4Yl9jZWxsc1tUQzYzOTNYQl9DRUxMX05BTkRdKTsKKwogCXRjNjM5M3hiX2NlbGxzW1RDNjM5M1hCX0NFTExfTU1DXS5wbGF0Zm9ybV9kYXRhID0KIAkJJnRjNjM5M3hiX2NlbGxzW1RDNjM5M1hCX0NFTExfTU1DXTsKIAl0YzYzOTN4Yl9jZWxsc1tUQzYzOTNYQl9DRUxMX01NQ10uZGF0YV9zaXplID0KIAkJc2l6ZW9mKHRjNjM5M3hiX2NlbGxzW1RDNjM5M1hCX0NFTExfTU1DXSk7CiAKKwl0YzYzOTN4Yl9jZWxsc1tUQzYzOTNYQl9DRUxMX09IQ0ldLnBsYXRmb3JtX2RhdGEgPQorCQkmdGM2MzkzeGJfY2VsbHNbVEM2MzkzWEJfQ0VMTF9PSENJXTsKKwl0YzYzOTN4Yl9jZWxsc1tUQzYzOTNYQl9DRUxMX09IQ0ldLmRhdGFfc2l6ZSA9CisJCXNpemVvZih0YzYzOTN4Yl9jZWxsc1tUQzYzOTNYQl9DRUxMX09IQ0ldKTsKKworCXRjNjM5M3hiX2NlbGxzW1RDNjM5M1hCX0NFTExfRkJdLmRyaXZlcl9kYXRhID0gdGNwZC0+ZmJfZGF0YTsKKwl0YzYzOTN4Yl9jZWxsc1tUQzYzOTNYQl9DRUxMX0ZCXS5wbGF0Zm9ybV9kYXRhID0KKwkJJnRjNjM5M3hiX2NlbGxzW1RDNjM5M1hCX0NFTExfRkJdOworCXRjNjM5M3hiX2NlbGxzW1RDNjM5M1hCX0NFTExfRkJdLmRhdGFfc2l6ZSA9CisJCXNpemVvZih0YzYzOTN4Yl9jZWxsc1tUQzYzOTNYQl9DRUxMX0ZCXSk7CiAKIAlyZXQgPSBtZmRfYWRkX2RldmljZXMoJmRldi0+ZGV2LCBkZXYtPmlkLAogCQkJdGM2MzkzeGJfY2VsbHMsIEFSUkFZX1NJWkUodGM2MzkzeGJfY2VsbHMpLApAQCAtNTA2LDEyICs2NzksMTUgQEAKIAlpZiAoIXJldCkKIAkJcmV0dXJuIDA7CiAKKwlpZiAodGNwZC0+dGVhcmRvd24pCisJCXRjcGQtPnRlYXJkb3duKGRldik7CisKK2Vycl9zZXR1cDoKIAl0YzYzOTN4Yl9kZXRhY2hfaXJxKGRldik7CiAKIGVycl9ncGlvX2FkZDoKIAlpZiAodGM2MzkzeGItPmdwaW8uYmFzZSAhPSAtMSkKIAkJdGVtcCA9IGdwaW9jaGlwX3JlbW92ZSgmdGM2MzkzeGItPmdwaW8pOwotZXJyX2h3X2luaXQ6CiAJdGNwZC0+ZGlzYWJsZShkZXYpOwogZXJyX2Nsa19lbmFibGU6CiAJY2xrX2Rpc2FibGUodGM2MzkzeGItPmNsayk7CkBAIC01MzUsNiArNzExLDEwIEBACiAJaW50IHJldDsKIAogCW1mZF9yZW1vdmVfZGV2aWNlcygmZGV2LT5kZXYpOworCisJaWYgKHRjcGQtPnRlYXJkb3duKQorCQl0Y3BkLT50ZWFyZG93bihkZXYpOworCiAJdGM2MzkzeGJfZGV0YWNoX2lycShkZXYpOwogCiAJaWYgKHRjNjM5M3hiLT5ncGlvLmJhc2UgIT0gLTEpIHsKQEAgLTU4NSwxNSArNzY1LDM3IEBACiAJc3RydWN0IHRjNjM5M3hiX3BsYXRmb3JtX2RhdGEgKnRjcGQgPSBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOwogCXN0cnVjdCB0YzYzOTN4YiAqdGM2MzkzeGIgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOwogCWludCByZXQ7CisJaW50IGk7CiAKIAljbGtfZW5hYmxlKHRjNjM5M3hiLT5jbGspOwogCiAJcmV0ID0gdGNwZC0+cmVzdW1lKGRldik7Ci0KIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCi0JcmV0dXJuIHRjNjM5M3hiX2h3X2luaXQoZGV2KTsKKwlpZiAoIXRjcGQtPnJlc3VtZV9yZXN0b3JlKQorCQlyZXR1cm4gMDsKKworCWlvd3JpdGU4KHRjNjM5M3hiLT5zdXNwZW5kX3N0YXRlLmZlciwJdGM2MzkzeGItPnNjciArIFNDUl9GRVIpOworCWlvd3JpdGUxNih0Y3BkLT5zY3JfcGxsMmNyLAkJdGM2MzkzeGItPnNjciArIFNDUl9QTEwyQ1IpOworCWlvd3JpdGUxNih0YzYzOTN4Yi0+c3VzcGVuZF9zdGF0ZS5jY3IsCXRjNjM5M3hiLT5zY3IgKyBTQ1JfQ0NSKTsKKwlpb3dyaXRlMTYoU0NSX01DUl9SRFlfT1BFTkRSQUlOIHwgU0NSX01DUl9SRFlfVU5LIHwgU0NSX01DUl9SRFlfRU4gfAorCQkgIFNDUl9NQ1JfSU5UX09QRU5EUkFJTiB8IFNDUl9NQ1JfSU5UX1VOSyB8IFNDUl9NQ1JfSU5UX0VOIHwKKwkJICBCSVQoMTUpLAkJCXRjNjM5M3hiLT5zY3IgKyBTQ1JfTUNSKTsKKwlpb3dyaXRlMTYodGNwZC0+c2NyX2dwZXIsCQl0YzYzOTN4Yi0+c2NyICsgU0NSX0dQRVIpOworCWlvd3JpdGU4KDAsCQkJCXRjNjM5M3hiLT5zY3IgKyBTQ1JfSVJSKTsKKwlpb3dyaXRlOCgweGJmLAkJCQl0YzYzOTN4Yi0+c2NyICsgU0NSX0lNUik7CisKKwlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKSB7CisJCWlvd3JpdGU4KHRjNjM5M3hiLT5zdXNwZW5kX3N0YXRlLmdwb19kc3JbaV0sCisJCQkJCXRjNjM5M3hiLT5zY3IgKyBTQ1JfR1BPX0RTUihpKSk7CisJCWlvd3JpdGU4KHRjNjM5M3hiLT5zdXNwZW5kX3N0YXRlLmdwb19kb2VjcltpXSwKKwkJCQkJdGM2MzkzeGItPnNjciArIFNDUl9HUE9fRE9FQ1IoaSkpOworCQlpb3dyaXRlOCh0YzYzOTN4Yi0+c3VzcGVuZF9zdGF0ZS5ncGlfYmNyW2ldLAorCQkJCQl0YzYzOTN4Yi0+c2NyICsgU0NSX0dQSV9CQ1IoaSkpOworCX0KKworCXJldHVybiAwOwogfQogI2Vsc2UKICNkZWZpbmUgdGM2MzkzeGJfc3VzcGVuZCBOVUxMCmRpZmYgLS1naXQgYS9kcml2ZXJzL21mZC90d2w0MDMwLWNvcmUuYyBiL2RyaXZlcnMvbWZkL3R3bDQwMzAtY29yZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZkOWEwMTYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21mZC90d2w0MDMwLWNvcmUuYwpAQCAtMCwwICsxLDExOTMgQEAKKy8qCisgKiB0d2w0MDMwX2NvcmUuYyAtIGRyaXZlciBmb3IgVFdMNDAzMC9UUFM2NTl4MCBQTSBhbmQgYXVkaW8gQ09ERUMgZGV2aWNlcworICoKKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA2IFRleGFzIEluc3RydW1lbnRzLCBJbmMuCisgKgorICogTW9kaWZpY2F0aW9ucyB0byBkZWZlciBpbnRlcnJ1cHQgaGFuZGxpbmcgdG8gYSBrZXJuZWwgdGhyZWFkOgorICogQ29weXJpZ2h0IChDKSAyMDA2IE1vbnRhVmlzdGEgU29mdHdhcmUsIEluYy4KKyAqCisgKiBCYXNlZCBvbiB0bHYzMjBhaWMyMy5jOgorICogQ29weXJpZ2h0IChjKSBieSBLYWkgU3ZhaG4gPGthaS5zdmFobkBub2tpYS5jb20+CisgKgorICogQ29kZSBjbGVhbnVwIGFuZCBtb2RpZmljYXRpb25zIHRvIElSUSBoYW5kbGVyLgorICogYnkgc3llZCBraGFzaW0gPHgwa2hhc2ltQHRpLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyBVU0EKKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsX3N0YXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9pcnEuaD4KKyNpbmNsdWRlIDxsaW51eC9yYW5kb20uaD4KKyNpbmNsdWRlIDxsaW51eC9rdGhyZWFkLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisKKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMvdHdsNDAzMC5oPgorCisKKy8qCisgKiBUaGUgVFdMNDAzMCAiVHJpdG9uIDIiIGlzIG9uZSBvZiBhIGZhbWlseSBvZiBhIG11bHRpLWZ1bmN0aW9uICJQb3dlcgorICogTWFuYWdlbWVudCBhbmQgU3lzdGVtIENvbXBhbmlvbiBEZXZpY2UiIGNoaXBzIG9yaWdpbmFsbHkgZGVzaWduZWQgZm9yCisgKiB1c2UgaW4gT01BUDIgYW5kIE9NQVAgMyBiYXNlZCBzeXN0ZW1zLiAgSXRzIGNvbnRyb2wgaW50ZXJmYWNlcyB1c2UgSTJDLAorICogb2Z0ZW4gYXQgYXJvdW5kIDMgTWJpdC9zZWMsIGluY2x1ZGluZyBmb3IgaW50ZXJydXB0IGhhbmRsaW5nLgorICoKKyAqIFRoaXMgZHJpdmVyIGNvcmUgcHJvdmlkZXMgZ2VuaXJxIHN1cHBvcnQgZm9yIHRoZSBpbnRlcnJ1cHRzIGVtaXR0ZWQsCisgKiBieSB0aGUgdmFyaW91cyBtb2R1bGVzLCBhbmQgZXhwb3J0cyByZWdpc3RlciBhY2Nlc3MgcHJpbWl0aXZlcy4KKyAqCisgKiBGSVhNRSB0aGlzIGRyaXZlciBjdXJyZW50bHkgcmVxdWlyZXMgdXNlIG9mIHRoZSBmaXJzdCBpbnRlcnJ1cHQgbGluZQorICogKGFuZCBhc3NvY2lhdGVkIHJlZ2lzdGVycykuCisgKi8KKworI2RlZmluZSBEUklWRVJfTkFNRQkJCSJ0d2w0MDMwIgorCisjaWYgZGVmaW5lZChDT05GSUdfVFdMNDAzMF9CQ0lfQkFUVEVSWSkgfHwgXAorCWRlZmluZWQoQ09ORklHX1RXTDQwMzBfQkNJX0JBVFRFUllfTU9EVUxFKQorI2RlZmluZSB0d2xfaGFzX2JjaSgpCQl0cnVlCisjZWxzZQorI2RlZmluZSB0d2xfaGFzX2JjaSgpCQlmYWxzZQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKENPTkZJR19LRVlCT0FSRF9UV0w0MDMwKSB8fCBkZWZpbmVkKENPTkZJR19LRVlCT0FSRF9UV0w0MDMwX01PRFVMRSkKKyNkZWZpbmUgdHdsX2hhc19rZXlwYWQoKQl0cnVlCisjZWxzZQorI2RlZmluZSB0d2xfaGFzX2tleXBhZCgpCWZhbHNlCisjZW5kaWYKKworI2lmIGRlZmluZWQoQ09ORklHX0dQSU9fVFdMNDAzMCkgfHwgZGVmaW5lZChDT05GSUdfR1BJT19UV0w0MDMwX01PRFVMRSkKKyNkZWZpbmUgdHdsX2hhc19ncGlvKCkJdHJ1ZQorI2Vsc2UKKyNkZWZpbmUgdHdsX2hhc19ncGlvKCkJZmFsc2UKKyNlbmRpZgorCisjaWYgZGVmaW5lZChDT05GSUdfVFdMNDAzMF9NQURDKSB8fCBkZWZpbmVkKENPTkZJR19UV0w0MDMwX01BRENfTU9EVUxFKQorI2RlZmluZSB0d2xfaGFzX21hZGMoKQl0cnVlCisjZWxzZQorI2RlZmluZSB0d2xfaGFzX21hZGMoKQlmYWxzZQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKENPTkZJR19SVENfRFJWX1RXTDQwMzApIHx8IGRlZmluZWQoQ09ORklHX1JUQ19EUlZfVFdMNDAzMF9NT0RVTEUpCisjZGVmaW5lIHR3bF9oYXNfcnRjKCkJdHJ1ZQorI2Vsc2UKKyNkZWZpbmUgdHdsX2hhc19ydGMoKQlmYWxzZQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKENPTkZJR19UV0w0MDMwX1VTQikgfHwgZGVmaW5lZChDT05GSUdfVFdMNDAzMF9VU0JfTU9EVUxFKQorI2RlZmluZSB0d2xfaGFzX3VzYigpCXRydWUKKyNlbHNlCisjZGVmaW5lIHR3bF9oYXNfdXNiKCkJZmFsc2UKKyNlbmRpZgorCitzdGF0aWMgaW5saW5lIHZvaWQgYWN0aXZhdGVfaXJxKGludCBpcnEpCit7CisjaWZkZWYgQ09ORklHX0FSTQorCS8qIEFSTSByZXF1aXJlcyBhbiBleHRyYSBzdGVwIHRvIGNsZWFyIElSUV9OT1JFUVVFU1QsIHdoaWNoIGl0CisJICogc2V0cyBvbiBiZWhhbGYgb2YgZXZlcnkgaXJxX2NoaXAuICBBbHNvIHNldHMgSVJRX05PUFJPQkUuCisJICovCisJc2V0X2lycV9mbGFncyhpcnEsIElSUUZfVkFMSUQpOworI2Vsc2UKKwkvKiBzYW1lIGVmZmVjdCBvbiBvdGhlciBhcmNoaXRlY3R1cmVzICovCisJc2V0X2lycV9ub3Byb2JlKGlycSk7CisjZW5kaWYKK30KKworLyogUHJpbWFyeSBJbnRlcnJ1cHQgSGFuZGxlciBvbiBUV0w0MDMwIFJlZ2lzdGVycyAqLworCisvKiBSZWdpc3RlciBEZWZpbml0aW9ucyAqLworCisjZGVmaW5lIFJFR19QSUhfSVNSX1AxCQkJKDB4MSkKKyNkZWZpbmUgUkVHX1BJSF9JU1JfUDIJCQkoMHgyKQorI2RlZmluZSBSRUdfUElIX1NJUgkJCSgweDMpCisKKy8qIFRyaXRvbiBDb3JlIGludGVybmFsIGluZm9ybWF0aW9uIChCRUdJTikgKi8KKworLyogTGFzdCAtIGZvciBpbmRleCBtYXgqLworI2RlZmluZSBUV0w0MDMwX01PRFVMRV9MQVNUCQlUV0w0MDMwX01PRFVMRV9TRUNVUkVEX1JFRworCisjZGVmaW5lIFRXTDQwMzBfTlVNX1NMQVZFUwkJNAorCisKKy8qIEJhc2UgQWRkcmVzcyBkZWZucyBmb3IgdHdsNDAzMF9tYXBbXSAqLworCisvKiBzdWJjaGlwL3NsYXZlIDAgLSBVU0IgSUQgKi8KKyNkZWZpbmUgVFdMNDAzMF9CQVNFQUREX1VTQgkJMHgwMDAwCisKKy8qIHN1YmNoaXAvc2xhdmUgMSAtIEFVRCBJRCAqLworI2RlZmluZSBUV0w0MDMwX0JBU0VBRERfQVVESU9fVk9JQ0UJMHgwMDAwCisjZGVmaW5lIFRXTDQwMzBfQkFTRUFERF9HUElPCQkweDAwOTgKKyNkZWZpbmUgVFdMNDAzMF9CQVNFQUREX0lOVEJSCQkweDAwODUKKyNkZWZpbmUgVFdMNDAzMF9CQVNFQUREX1BJSAkJMHgwMDgwCisjZGVmaW5lIFRXTDQwMzBfQkFTRUFERF9URVNUCQkweDAwNEMKKworLyogc3ViY2hpcC9zbGF2ZSAyIC0gQVVYIElEICovCisjZGVmaW5lIFRXTDQwMzBfQkFTRUFERF9JTlRFUlJVUFRTCTB4MDBCOQorI2RlZmluZSBUV0w0MDMwX0JBU0VBRERfTEVECQkweDAwRUUKKyNkZWZpbmUgVFdMNDAzMF9CQVNFQUREX01BREMJCTB4MDAwMAorI2RlZmluZSBUV0w0MDMwX0JBU0VBRERfTUFJTl9DSEFSR0UJMHgwMDc0CisjZGVmaW5lIFRXTDQwMzBfQkFTRUFERF9QUkVDSEFSR0UJMHgwMEFBCisjZGVmaW5lIFRXTDQwMzBfQkFTRUFERF9QV00wCQkweDAwRjgKKyNkZWZpbmUgVFdMNDAzMF9CQVNFQUREX1BXTTEJCTB4MDBGQgorI2RlZmluZSBUV0w0MDMwX0JBU0VBRERfUFdNQQkJMHgwMEVGCisjZGVmaW5lIFRXTDQwMzBfQkFTRUFERF9QV01CCQkweDAwRjEKKyNkZWZpbmUgVFdMNDAzMF9CQVNFQUREX0tFWVBBRAkJMHgwMEQyCisKKy8qIHN1YmNoaXAvc2xhdmUgMyAtIFBPV0VSIElEICovCisjZGVmaW5lIFRXTDQwMzBfQkFTRUFERF9CQUNLVVAJCTB4MDAxNAorI2RlZmluZSBUV0w0MDMwX0JBU0VBRERfSU5UCQkweDAwMkUKKyNkZWZpbmUgVFdMNDAzMF9CQVNFQUREX1BNX01BU1RFUgkweDAwMzYKKyNkZWZpbmUgVFdMNDAzMF9CQVNFQUREX1BNX1JFQ0VJVkVSCTB4MDA1QgorI2RlZmluZSBUV0w0MDMwX0JBU0VBRERfUlRDCQkweDAwMUMKKyNkZWZpbmUgVFdMNDAzMF9CQVNFQUREX1NFQ1VSRURfUkVHCTB4MDAwMAorCisvKiBUcml0b24gQ29yZSBpbnRlcm5hbCBpbmZvcm1hdGlvbiAoRU5EKSAqLworCisKKy8qIEZldyBwb3dlciB2YWx1ZXMgKi8KKyNkZWZpbmUgUl9DRkdfQk9PVAkJCTB4MDUKKyNkZWZpbmUgUl9QUk9URUNUX0tFWQkJCTB4MEUKKworLyogYWNjZXNzIGNvbnRyb2wgdmFsdWVzIGZvciBSX1BST1RFQ1RfS0VZICovCisjZGVmaW5lIEtFWV9VTkxPQ0sxCQkJMHhjZQorI2RlZmluZSBLRVlfVU5MT0NLMgkJCTB4ZWMKKyNkZWZpbmUgS0VZX0xPQ0sJCQkweDAwCisKKy8qIHNvbWUgZmllbGRzIGluIFJfQ0ZHX0JPT1QgKi8KKyNkZWZpbmUgSEZDTEtfRlJFUV8xOXAyX01IWgkJKDEgPDwgMCkKKyNkZWZpbmUgSEZDTEtfRlJFUV8yNl9NSFoJCSgyIDw8IDApCisjZGVmaW5lIEhGQ0xLX0ZSRVFfMzhwNF9NSFoJCSgzIDw8IDApCisjZGVmaW5lIEhJR0hfUEVSRl9TUQkJCSgxIDw8IDMpCisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyoqCisgKiBzdHJ1Y3QgdHdsNDAzMF9tb2RfaXJlZ3MgLSBUV0wgbW9kdWxlIElNUi9JU1IgcmVncyB0byBtYXNrL2NsZWFyIGF0IGluaXQKKyAqIEBtb2Rfbm86IFRXTDQwMzAgbW9kdWxlIG51bWJlciAoZS5nLiwgVFdMNDAzMF9NT0RVTEVfR1BJTykKKyAqIEBzaWhfY3RybDogYWRkcmVzcyBvZiBtb2R1bGUgU0lIX0NUUkwgcmVnaXN0ZXIKKyAqIEByZWdfY250OiBudW1iZXIgb2YgSU1SL0lTUiByZWdzCisgKiBAaW1yczogcG9pbnRlciB0byBhcnJheSBvZiBUV0wgbW9kdWxlIGludGVycnVwdCBtYXNrIHJlZ2lzdGVyIGluZGljZXMKKyAqIEBpc3JzOiBwb2ludGVyIHRvIGFycmF5IG9mIFRXTCBtb2R1bGUgaW50ZXJydXB0IHN0YXR1cyByZWdpc3RlciBpbmRpY2VzCisgKgorICogVGllcyB0b2dldGhlciBUV0w0MDMwIG1vZHVsZXMgYW5kIGxpc3RzIG9mIElNUi9JU1IgcmVnaXN0ZXJzIHRvIG1hc2svY2xlYXIKKyAqIGR1cmluZyB0d2xfaW5pdF9pcnEoKS4KKyAqLworc3RydWN0IHR3bDQwMzBfbW9kX2lyZWdzIHsKKwljb25zdCB1OCBtb2Rfbm87CisJY29uc3QgdTggc2loX2N0cmw7CisJY29uc3QgdTggcmVnX2NudDsKKwljb25zdCB1OCAqaW1yczsKKwljb25zdCB1OCAqaXNyczsKK307CisKKy8qIFRXTDQwMzAgSU5UIG1vZHVsZSBpbnRlcnJ1cHQgbWFzayByZWdpc3RlcnMgKi8KK3N0YXRpYyBjb25zdCB1OCBfX2luaXRjb25zdCB0d2w0MDMwX2ludF9pbXJfcmVnc1tdID0geworCVRXTDQwMzBfSU5UX1BXUl9JTVIxLAorCVRXTDQwMzBfSU5UX1BXUl9JTVIyLAorfTsKKworLyogVFdMNDAzMCBJTlQgbW9kdWxlIGludGVycnVwdCBzdGF0dXMgcmVnaXN0ZXJzICovCitzdGF0aWMgY29uc3QgdTggX19pbml0Y29uc3QgdHdsNDAzMF9pbnRfaXNyX3JlZ3NbXSA9IHsKKwlUV0w0MDMwX0lOVF9QV1JfSVNSMSwKKwlUV0w0MDMwX0lOVF9QV1JfSVNSMiwKK307CisKKy8qIFRXTDQwMzAgSU5URVJSVVBUUyBtb2R1bGUgaW50ZXJydXB0IG1hc2sgcmVnaXN0ZXJzICovCitzdGF0aWMgY29uc3QgdTggX19pbml0Y29uc3QgdHdsNDAzMF9pbnRlcnJ1cHRzX2ltcl9yZWdzW10gPSB7CisJVFdMNDAzMF9JTlRFUlJVUFRTX0JDSUlNUjFBLAorCVRXTDQwMzBfSU5URVJSVVBUU19CQ0lJTVIxQiwKKwlUV0w0MDMwX0lOVEVSUlVQVFNfQkNJSU1SMkEsCisJVFdMNDAzMF9JTlRFUlJVUFRTX0JDSUlNUjJCLAorfTsKKworLyogVFdMNDAzMCBJTlRFUlJVUFRTIG1vZHVsZSBpbnRlcnJ1cHQgc3RhdHVzIHJlZ2lzdGVycyAqLworc3RhdGljIGNvbnN0IHU4IF9faW5pdGNvbnN0IHR3bDQwMzBfaW50ZXJydXB0c19pc3JfcmVnc1tdID0geworCVRXTDQwMzBfSU5URVJSVVBUU19CQ0lJU1IxQSwKKwlUV0w0MDMwX0lOVEVSUlVQVFNfQkNJSVNSMUIsCisJVFdMNDAzMF9JTlRFUlJVUFRTX0JDSUlTUjJBLAorCVRXTDQwMzBfSU5URVJSVVBUU19CQ0lJU1IyQiwKK307CisKKy8qIFRXTDQwMzAgTUFEQyBtb2R1bGUgaW50ZXJydXB0IG1hc2sgcmVnaXN0ZXJzICovCitzdGF0aWMgY29uc3QgdTggX19pbml0Y29uc3QgdHdsNDAzMF9tYWRjX2ltcl9yZWdzW10gPSB7CisJVFdMNDAzMF9NQURDX0lNUjEsCisJVFdMNDAzMF9NQURDX0lNUjIsCit9OworCisvKiBUV0w0MDMwIE1BREMgbW9kdWxlIGludGVycnVwdCBzdGF0dXMgcmVnaXN0ZXJzICovCitzdGF0aWMgY29uc3QgdTggX19pbml0Y29uc3QgdHdsNDAzMF9tYWRjX2lzcl9yZWdzW10gPSB7CisJVFdMNDAzMF9NQURDX0lTUjEsCisJVFdMNDAzMF9NQURDX0lTUjIsCit9OworCisvKiBUV0w0MDMwIGtleXBhZCBtb2R1bGUgaW50ZXJydXB0IG1hc2sgcmVnaXN0ZXJzICovCitzdGF0aWMgY29uc3QgdTggX19pbml0Y29uc3QgdHdsNDAzMF9rZXlwYWRfaW1yX3JlZ3NbXSA9IHsKKwlUV0w0MDMwX0tFWVBBRF9LRVlQX0lNUjEsCisJVFdMNDAzMF9LRVlQQURfS0VZUF9JTVIyLAorfTsKKworLyogVFdMNDAzMCBrZXlwYWQgbW9kdWxlIGludGVycnVwdCBzdGF0dXMgcmVnaXN0ZXJzICovCitzdGF0aWMgY29uc3QgdTggX19pbml0Y29uc3QgdHdsNDAzMF9rZXlwYWRfaXNyX3JlZ3NbXSA9IHsKKwlUV0w0MDMwX0tFWVBBRF9LRVlQX0lTUjEsCisJVFdMNDAzMF9LRVlQQURfS0VZUF9JU1IyLAorfTsKKworLyogVFdMNDAzMCBHUElPIG1vZHVsZSBpbnRlcnJ1cHQgbWFzayByZWdpc3RlcnMgKi8KK3N0YXRpYyBjb25zdCB1OCBfX2luaXRjb25zdCB0d2w0MDMwX2dwaW9faW1yX3JlZ3NbXSA9IHsKKwlSRUdfR1BJT19JTVIxQSwKKwlSRUdfR1BJT19JTVIxQiwKKwlSRUdfR1BJT19JTVIyQSwKKwlSRUdfR1BJT19JTVIyQiwKKwlSRUdfR1BJT19JTVIzQSwKKwlSRUdfR1BJT19JTVIzQiwKK307CisKKy8qIFRXTDQwMzAgR1BJTyBtb2R1bGUgaW50ZXJydXB0IHN0YXR1cyByZWdpc3RlcnMgKi8KK3N0YXRpYyBjb25zdCB1OCBfX2luaXRjb25zdCB0d2w0MDMwX2dwaW9faXNyX3JlZ3NbXSA9IHsKKwlSRUdfR1BJT19JU1IxQSwKKwlSRUdfR1BJT19JU1IxQiwKKwlSRUdfR1BJT19JU1IyQSwKKwlSRUdfR1BJT19JU1IyQiwKKwlSRUdfR1BJT19JU1IzQSwKKwlSRUdfR1BJT19JU1IzQiwKK307CisKKy8qIFRXTDQwMzAgbW9kdWxlcyB0aGF0IGhhdmUgSU1SL0lTUiByZWdpc3RlcnMgdGhhdCBtdXN0IGJlIG1hc2tlZC9jbGVhcmVkICovCitzdGF0aWMgY29uc3Qgc3RydWN0IHR3bDQwMzBfbW9kX2lyZWdzIF9faW5pdGNvbnN0IHR3bDQwMzBfbW9kX3JlZ3NbXSA9IHsKKwl7CisJCS5tb2Rfbm8JICA9IFRXTDQwMzBfTU9EVUxFX0lOVCwKKwkJLnNpaF9jdHJsID0gVFdMNDAzMF9JTlRfUFdSX1NJSF9DVFJMLAorCQkucmVnX2NudCAgPSBBUlJBWV9TSVpFKHR3bDQwMzBfaW50X2ltcl9yZWdzKSwKKwkJLmltcnMJICA9IHR3bDQwMzBfaW50X2ltcl9yZWdzLAorCQkuaXNycwkgID0gdHdsNDAzMF9pbnRfaXNyX3JlZ3MsCisJfSwKKwl7CisJCS5tb2Rfbm8JICA9IFRXTDQwMzBfTU9EVUxFX0lOVEVSUlVQVFMsCisJCS5zaWhfY3RybCA9IFRXTDQwMzBfSU5URVJSVVBUU19CQ0lTSUhDVFJMLAorCQkucmVnX2NudCAgPSBBUlJBWV9TSVpFKHR3bDQwMzBfaW50ZXJydXB0c19pbXJfcmVncyksCisJCS5pbXJzCSAgPSB0d2w0MDMwX2ludGVycnVwdHNfaW1yX3JlZ3MsCisJCS5pc3JzCSAgPSB0d2w0MDMwX2ludGVycnVwdHNfaXNyX3JlZ3MsCisJfSwKKwl7CisJCS5tb2Rfbm8JICA9IFRXTDQwMzBfTU9EVUxFX01BREMsCisJCS5zaWhfY3RybCA9IFRXTDQwMzBfTUFEQ19TSUhfQ1RSTCwKKwkJLnJlZ19jbnQgID0gQVJSQVlfU0laRSh0d2w0MDMwX21hZGNfaW1yX3JlZ3MpLAorCQkuaW1ycwkgID0gdHdsNDAzMF9tYWRjX2ltcl9yZWdzLAorCQkuaXNycwkgID0gdHdsNDAzMF9tYWRjX2lzcl9yZWdzLAorCX0sCisJeworCQkubW9kX25vCSAgPSBUV0w0MDMwX01PRFVMRV9LRVlQQUQsCisJCS5zaWhfY3RybCA9IFRXTDQwMzBfS0VZUEFEX0tFWVBfU0lIX0NUUkwsCisJCS5yZWdfY250ICA9IEFSUkFZX1NJWkUodHdsNDAzMF9rZXlwYWRfaW1yX3JlZ3MpLAorCQkuaW1ycwkgID0gdHdsNDAzMF9rZXlwYWRfaW1yX3JlZ3MsCisJCS5pc3JzCSAgPSB0d2w0MDMwX2tleXBhZF9pc3JfcmVncywKKwl9LAorCXsKKwkJLm1vZF9ubwkgID0gVFdMNDAzMF9NT0RVTEVfR1BJTywKKwkJLnNpaF9jdHJsID0gUkVHX0dQSU9fU0lIX0NUUkwsCisJCS5yZWdfY250ICA9IEFSUkFZX1NJWkUodHdsNDAzMF9ncGlvX2ltcl9yZWdzKSwKKwkJLmltcnMJICA9IHR3bDQwMzBfZ3Bpb19pbXJfcmVncywKKwkJLmlzcnMJICA9IHR3bDQwMzBfZ3Bpb19pc3JfcmVncywKKwl9LAorfTsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyogaXMgZHJpdmVyIGFjdGl2ZSwgYm91bmQgdG8gYSBjaGlwPyAqLworc3RhdGljIGJvb2wgaW51c2U7CisKKy8qIFN0cnVjdHVyZSBmb3IgZWFjaCBUV0w0MDMwIFNsYXZlICovCitzdHJ1Y3QgdHdsNDAzMF9jbGllbnQgeworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQ7CisJdTggYWRkcmVzczsKKworCS8qIG1heCBudW1iIG9mIGkyY19tc2cgcmVxdWlyZWQgaXMgZm9yIHJlYWQgPTIgKi8KKwlzdHJ1Y3QgaTJjX21zZyB4ZmVyX21zZ1syXTsKKworCS8qIFRvIGxvY2sgYWNjZXNzIHRvIHhmZXJfbXNnICovCisJc3RydWN0IG11dGV4IHhmZXJfbG9jazsKK307CisKK3N0YXRpYyBzdHJ1Y3QgdHdsNDAzMF9jbGllbnQgdHdsNDAzMF9tb2R1bGVzW1RXTDQwMzBfTlVNX1NMQVZFU107CisKKworLyogbWFwcGluZyB0aGUgbW9kdWxlIGlkIHRvIHNsYXZlIGlkIGFuZCBiYXNlIGFkZHJlc3MgKi8KK3N0cnVjdCB0d2w0MDMwbWFwcGluZyB7CisJdW5zaWduZWQgY2hhciBzaWQ7CS8qIFNsYXZlIElEICovCisJdW5zaWduZWQgY2hhciBiYXNlOwkvKiBiYXNlIGFkZHJlc3MgKi8KK307CisKK3N0YXRpYyBzdHJ1Y3QgdHdsNDAzMG1hcHBpbmcgdHdsNDAzMF9tYXBbVFdMNDAzMF9NT0RVTEVfTEFTVCArIDFdID0geworCS8qCisJICogTk9URTogIGRvbid0IGNoYW5nZSB0aGlzIHRhYmxlIHdpdGhvdXQgdXBkYXRpbmcgdGhlCisJICogPGxpbnV4L2kyYy90d2w0MDMwLmg+IGRlZmluZXMgZm9yIFRXTDQwMzBfTU9EVUxFXyoKKwkgKiBzbyB0aGV5IGNvbnRpbnVlIHRvIG1hdGNoIHRoZSBvcmRlciBpbiB0aGlzIHRhYmxlLgorCSAqLworCisJeyAwLCBUV0w0MDMwX0JBU0VBRERfVVNCIH0sCisKKwl7IDEsIFRXTDQwMzBfQkFTRUFERF9BVURJT19WT0lDRSB9LAorCXsgMSwgVFdMNDAzMF9CQVNFQUREX0dQSU8gfSwKKwl7IDEsIFRXTDQwMzBfQkFTRUFERF9JTlRCUiB9LAorCXsgMSwgVFdMNDAzMF9CQVNFQUREX1BJSCB9LAorCXsgMSwgVFdMNDAzMF9CQVNFQUREX1RFU1QgfSwKKworCXsgMiwgVFdMNDAzMF9CQVNFQUREX0tFWVBBRCB9LAorCXsgMiwgVFdMNDAzMF9CQVNFQUREX01BREMgfSwKKwl7IDIsIFRXTDQwMzBfQkFTRUFERF9JTlRFUlJVUFRTIH0sCisJeyAyLCBUV0w0MDMwX0JBU0VBRERfTEVEIH0sCisJeyAyLCBUV0w0MDMwX0JBU0VBRERfTUFJTl9DSEFSR0UgfSwKKwl7IDIsIFRXTDQwMzBfQkFTRUFERF9QUkVDSEFSR0UgfSwKKwl7IDIsIFRXTDQwMzBfQkFTRUFERF9QV00wIH0sCisJeyAyLCBUV0w0MDMwX0JBU0VBRERfUFdNMSB9LAorCXsgMiwgVFdMNDAzMF9CQVNFQUREX1BXTUEgfSwKKwl7IDIsIFRXTDQwMzBfQkFTRUFERF9QV01CIH0sCisKKwl7IDMsIFRXTDQwMzBfQkFTRUFERF9CQUNLVVAgfSwKKwl7IDMsIFRXTDQwMzBfQkFTRUFERF9JTlQgfSwKKwl7IDMsIFRXTDQwMzBfQkFTRUFERF9QTV9NQVNURVIgfSwKKwl7IDMsIFRXTDQwMzBfQkFTRUFERF9QTV9SRUNFSVZFUiB9LAorCXsgMywgVFdMNDAzMF9CQVNFQUREX1JUQyB9LAorCXsgMywgVFdMNDAzMF9CQVNFQUREX1NFQ1VSRURfUkVHIH0sCit9OworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKgorICogVFdMNDAzMCBkb2Vzbid0IGhhdmUgUElIIG1hc2ssIGhlbmNlIGR1bW15IGZ1bmN0aW9uIGZvciBtYXNrCisgKiBhbmQgdW5tYXNrIG9mIHRoZSAoZWlnaHQpIGludGVycnVwdHMgcmVwb3J0ZWQgYXQgdGhhdCBsZXZlbCAuLi4KKyAqIG1hc2tpbmcgaXMgb25seSBhdmFpbGFibGUgZnJvbSBTSUggKHNlY29uZGFyeSkgbW9kdWxlcy4KKyAqLworCitzdGF0aWMgdm9pZCB0d2w0MDMwX2kyY19hY2tpcnEodW5zaWduZWQgaW50IGlycSkKK3sKK30KKworc3RhdGljIHZvaWQgdHdsNDAzMF9pMmNfZGlzYWJsZWludCh1bnNpZ25lZCBpbnQgaXJxKQoreworfQorCitzdGF0aWMgdm9pZCB0d2w0MDMwX2kyY19lbmFibGVpbnQodW5zaWduZWQgaW50IGlycSkKK3sKK30KKworc3RhdGljIHN0cnVjdCBpcnFfY2hpcCB0d2w0MDMwX2lycV9jaGlwID0geworCS5uYW1lCT0gInR3bDQwMzAiLAorCS5hY2sJPSB0d2w0MDMwX2kyY19hY2tpcnEsCisJLm1hc2sJPSB0d2w0MDMwX2kyY19kaXNhYmxlaW50LAorCS51bm1hc2sJPSB0d2w0MDMwX2kyY19lbmFibGVpbnQsCit9OworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiBFeHBvcnRlZCBGdW5jdGlvbnMgKi8KKworLyoqCisgKiB0d2w0MDMwX2kyY193cml0ZSAtIFdyaXRlcyBhIG4gYml0IHJlZ2lzdGVyIGluIFRXTDQwMzAKKyAqIEBtb2Rfbm86IG1vZHVsZSBudW1iZXIKKyAqIEB2YWx1ZTogYW4gYXJyYXkgb2YgbnVtX2J5dGVzKzEgY29udGFpbmluZyBkYXRhIHRvIHdyaXRlCisgKiBAcmVnOiByZWdpc3RlciBhZGRyZXNzIChqdXN0IG9mZnNldCB3aWxsIGRvKQorICogQG51bV9ieXRlczogbnVtYmVyIG9mIGJ5dGVzIHRvIHRyYW5zZmVyCisgKgorICogSU1QT1JUQU5UOiBmb3IgJ3ZhbHVlJyBwYXJhbWV0ZXI6IEFsbG9jYXRlIHZhbHVlIG51bV9ieXRlcysxIGFuZAorICogdmFsaWQgZGF0YSBzdGFydHMgYXQgT2Zmc2V0IDEuCisgKgorICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIG9wZXJhdGlvbiAtIDAgaXMgc3VjY2VzcworICovCitpbnQgdHdsNDAzMF9pMmNfd3JpdGUodTggbW9kX25vLCB1OCAqdmFsdWUsIHU4IHJlZywgdTggbnVtX2J5dGVzKQoreworCWludCByZXQ7CisJaW50IHNpZDsKKwlzdHJ1Y3QgdHdsNDAzMF9jbGllbnQgKnR3bDsKKwlzdHJ1Y3QgaTJjX21zZyAqbXNnOworCisJaWYgKHVubGlrZWx5KG1vZF9ubyA+IFRXTDQwMzBfTU9EVUxFX0xBU1QpKSB7CisJCXByX2VycigiJXM6IGludmFsaWQgbW9kdWxlIG51bWJlciAlZFxuIiwgRFJJVkVSX05BTUUsIG1vZF9ubyk7CisJCXJldHVybiAtRVBFUk07CisJfQorCXNpZCA9IHR3bDQwMzBfbWFwW21vZF9ub10uc2lkOworCXR3bCA9ICZ0d2w0MDMwX21vZHVsZXNbc2lkXTsKKworCWlmICh1bmxpa2VseSghaW51c2UpKSB7CisJCXByX2VycigiJXM6IGNsaWVudCAlZCBpcyBub3QgaW5pdGlhbGl6ZWRcbiIsIERSSVZFUl9OQU1FLCBzaWQpOworCQlyZXR1cm4gLUVQRVJNOworCX0KKwltdXRleF9sb2NrKCZ0d2wtPnhmZXJfbG9jayk7CisJLyoKKwkgKiBbTVNHMV06IGZpbGwgdGhlIHJlZ2lzdGVyIGFkZHJlc3MgZGF0YQorCSAqIGZpbGwgdGhlIGRhdGEgVHggYnVmZmVyCisJICovCisJbXNnID0gJnR3bC0+eGZlcl9tc2dbMF07CisJbXNnLT5hZGRyID0gdHdsLT5hZGRyZXNzOworCW1zZy0+bGVuID0gbnVtX2J5dGVzICsgMTsKKwltc2ctPmZsYWdzID0gMDsKKwltc2ctPmJ1ZiA9IHZhbHVlOworCS8qIG92ZXIgd3JpdGUgdGhlIGZpcnN0IGJ5dGUgb2YgYnVmZmVyIHdpdGggdGhlIHJlZ2lzdGVyIGFkZHJlc3MgKi8KKwkqdmFsdWUgPSB0d2w0MDMwX21hcFttb2Rfbm9dLmJhc2UgKyByZWc7CisJcmV0ID0gaTJjX3RyYW5zZmVyKHR3bC0+Y2xpZW50LT5hZGFwdGVyLCB0d2wtPnhmZXJfbXNnLCAxKTsKKwltdXRleF91bmxvY2soJnR3bC0+eGZlcl9sb2NrKTsKKworCS8qIGkyY1RyYW5zZmVyIHJldHVybnMgbnVtIG1lc3NhZ2VzLnRyYW5zbGF0ZSBpdCBwbHMuLiAqLworCWlmIChyZXQgPj0gMCkKKwkJcmV0ID0gMDsKKwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTCh0d2w0MDMwX2kyY193cml0ZSk7CisKKy8qKgorICogdHdsNDAzMF9pMmNfcmVhZCAtIFJlYWRzIGEgbiBiaXQgcmVnaXN0ZXIgaW4gVFdMNDAzMAorICogQG1vZF9ubzogbW9kdWxlIG51bWJlcgorICogQHZhbHVlOiBhbiBhcnJheSBvZiBudW1fYnl0ZXMgY29udGFpbmluZyBkYXRhIHRvIGJlIHJlYWQKKyAqIEByZWc6IHJlZ2lzdGVyIGFkZHJlc3MgKGp1c3Qgb2Zmc2V0IHdpbGwgZG8pCisgKiBAbnVtX2J5dGVzOiBudW1iZXIgb2YgYnl0ZXMgdG8gdHJhbnNmZXIKKyAqCisgKiBSZXR1cm5zIHJlc3VsdCBvZiBvcGVyYXRpb24gLSBudW1fYnl0ZXMgaXMgc3VjY2VzcyBlbHNlIGZhaWx1cmUuCisgKi8KK2ludCB0d2w0MDMwX2kyY19yZWFkKHU4IG1vZF9ubywgdTggKnZhbHVlLCB1OCByZWcsIHU4IG51bV9ieXRlcykKK3sKKwlpbnQgcmV0OworCXU4IHZhbDsKKwlpbnQgc2lkOworCXN0cnVjdCB0d2w0MDMwX2NsaWVudCAqdHdsOworCXN0cnVjdCBpMmNfbXNnICptc2c7CisKKwlpZiAodW5saWtlbHkobW9kX25vID4gVFdMNDAzMF9NT0RVTEVfTEFTVCkpIHsKKwkJcHJfZXJyKCIlczogaW52YWxpZCBtb2R1bGUgbnVtYmVyICVkXG4iLCBEUklWRVJfTkFNRSwgbW9kX25vKTsKKwkJcmV0dXJuIC1FUEVSTTsKKwl9CisJc2lkID0gdHdsNDAzMF9tYXBbbW9kX25vXS5zaWQ7CisJdHdsID0gJnR3bDQwMzBfbW9kdWxlc1tzaWRdOworCisJaWYgKHVubGlrZWx5KCFpbnVzZSkpIHsKKwkJcHJfZXJyKCIlczogY2xpZW50ICVkIGlzIG5vdCBpbml0aWFsaXplZFxuIiwgRFJJVkVSX05BTUUsIHNpZCk7CisJCXJldHVybiAtRVBFUk07CisJfQorCW11dGV4X2xvY2soJnR3bC0+eGZlcl9sb2NrKTsKKwkvKiBbTVNHMV0gZmlsbCB0aGUgcmVnaXN0ZXIgYWRkcmVzcyBkYXRhICovCisJbXNnID0gJnR3bC0+eGZlcl9tc2dbMF07CisJbXNnLT5hZGRyID0gdHdsLT5hZGRyZXNzOworCW1zZy0+bGVuID0gMTsKKwltc2ctPmZsYWdzID0gMDsJLyogUmVhZCB0aGUgcmVnaXN0ZXIgdmFsdWUgKi8KKwl2YWwgPSB0d2w0MDMwX21hcFttb2Rfbm9dLmJhc2UgKyByZWc7CisJbXNnLT5idWYgPSAmdmFsOworCS8qIFtNU0cyXSBmaWxsIHRoZSBkYXRhIHJ4IGJ1ZmZlciAqLworCW1zZyA9ICZ0d2wtPnhmZXJfbXNnWzFdOworCW1zZy0+YWRkciA9IHR3bC0+YWRkcmVzczsKKwltc2ctPmZsYWdzID0gSTJDX01fUkQ7CS8qIFJlYWQgdGhlIHJlZ2lzdGVyIHZhbHVlICovCisJbXNnLT5sZW4gPSBudW1fYnl0ZXM7CS8qIG9ubHkgbiBieXRlcyAqLworCW1zZy0+YnVmID0gdmFsdWU7CisJcmV0ID0gaTJjX3RyYW5zZmVyKHR3bC0+Y2xpZW50LT5hZGFwdGVyLCB0d2wtPnhmZXJfbXNnLCAyKTsKKwltdXRleF91bmxvY2soJnR3bC0+eGZlcl9sb2NrKTsKKworCS8qIGkyY1RyYW5zZmVyIHJldHVybnMgbnVtIG1lc3NhZ2VzLnRyYW5zbGF0ZSBpdCBwbHMuLiAqLworCWlmIChyZXQgPj0gMCkKKwkJcmV0ID0gMDsKKwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTCh0d2w0MDMwX2kyY19yZWFkKTsKKworLyoqCisgKiB0d2w0MDMwX2kyY193cml0ZV91OCAtIFdyaXRlcyBhIDggYml0IHJlZ2lzdGVyIGluIFRXTDQwMzAKKyAqIEBtb2Rfbm86IG1vZHVsZSBudW1iZXIKKyAqIEB2YWx1ZTogdGhlIHZhbHVlIHRvIGJlIHdyaXR0ZW4gOCBiaXQKKyAqIEByZWc6IHJlZ2lzdGVyIGFkZHJlc3MgKGp1c3Qgb2Zmc2V0IHdpbGwgZG8pCisgKgorICogUmV0dXJucyByZXN1bHQgb2Ygb3BlcmF0aW9uIC0gMCBpcyBzdWNjZXNzCisgKi8KK2ludCB0d2w0MDMwX2kyY193cml0ZV91OCh1OCBtb2Rfbm8sIHU4IHZhbHVlLCB1OCByZWcpCit7CisKKwkvKiAyIGJ5dGVzIG9mZnNldCAxIGNvbnRhaW5zIHRoZSBkYXRhIG9mZnNldCAwIGlzIHVzZWQgYnkgaTJjX3dyaXRlICovCisJdTggdGVtcF9idWZmZXJbMl0gPSB7IDAgfTsKKwkvKiBvZmZzZXQgMSBjb250YWlucyB0aGUgZGF0YSAqLworCXRlbXBfYnVmZmVyWzFdID0gdmFsdWU7CisJcmV0dXJuIHR3bDQwMzBfaTJjX3dyaXRlKG1vZF9ubywgdGVtcF9idWZmZXIsIHJlZywgMSk7Cit9CitFWFBPUlRfU1lNQk9MKHR3bDQwMzBfaTJjX3dyaXRlX3U4KTsKKworLyoqCisgKiB0d2w0MDMwX2kyY19yZWFkX3U4IC0gUmVhZHMgYSA4IGJpdCByZWdpc3RlciBmcm9tIFRXTDQwMzAKKyAqIEBtb2Rfbm86IG1vZHVsZSBudW1iZXIKKyAqIEB2YWx1ZTogdGhlIHZhbHVlIHJlYWQgOCBiaXQKKyAqIEByZWc6IHJlZ2lzdGVyIGFkZHJlc3MgKGp1c3Qgb2Zmc2V0IHdpbGwgZG8pCisgKgorICogUmV0dXJucyByZXN1bHQgb2Ygb3BlcmF0aW9uIC0gMCBpcyBzdWNjZXNzCisgKi8KK2ludCB0d2w0MDMwX2kyY19yZWFkX3U4KHU4IG1vZF9ubywgdTggKnZhbHVlLCB1OCByZWcpCit7CisJcmV0dXJuIHR3bDQwMzBfaTJjX3JlYWQobW9kX25vLCB2YWx1ZSwgcmVnLCAxKTsKK30KK0VYUE9SVF9TWU1CT0wodHdsNDAzMF9pMmNfcmVhZF91OCk7CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyB1bnNpZ25lZCB0d2w0MDMwX2lycV9iYXNlOworCitzdGF0aWMgc3RydWN0IGNvbXBsZXRpb24gaXJxX2V2ZW50OworCisvKgorICogVGhpcyB0aHJlYWQgcHJvY2Vzc2VzIGludGVycnVwdHMgcmVwb3J0ZWQgYnkgdGhlIFByaW1hcnkgSW50ZXJydXB0IEhhbmRsZXIuCisgKi8KK3N0YXRpYyBpbnQgdHdsNDAzMF9pcnFfdGhyZWFkKHZvaWQgKmRhdGEpCit7CisJbG9uZyBpcnEgPSAobG9uZylkYXRhOworCWlycV9kZXNjX3QgKmRlc2MgPSBpcnFfZGVzYyArIGlycTsKKwlzdGF0aWMgdW5zaWduZWQgaTJjX2Vycm9yczsKKwljb25zdCBzdGF0aWMgdW5zaWduZWQgbWF4X2kyY19lcnJvcnMgPSAxMDA7CisKKwljdXJyZW50LT5mbGFncyB8PSBQRl9OT0ZSRUVaRTsKKworCXdoaWxlICgha3RocmVhZF9zaG91bGRfc3RvcCgpKSB7CisJCWludCByZXQ7CisJCWludCBtb2R1bGVfaXJxOworCQl1OCBwaWhfaXNyOworCisJCS8qIFdhaXQgZm9yIElSUSwgdGhlbiByZWFkIFBJSCBpcnEgc3RhdHVzIChhbHNvIGJsb2NraW5nKSAqLworCQl3YWl0X2Zvcl9jb21wbGV0aW9uX2ludGVycnVwdGlibGUoJmlycV9ldmVudCk7CisKKwkJcmV0ID0gdHdsNDAzMF9pMmNfcmVhZF91OChUV0w0MDMwX01PRFVMRV9QSUgsICZwaWhfaXNyLAorCQkJCQkgIFJFR19QSUhfSVNSX1AxKTsKKwkJaWYgKHJldCkgeworCQkJcHJfd2FybmluZygiJXM6IEkyQyBlcnJvciAlZCByZWFkaW5nIFBJSCBJU1JcbiIsCisJCQkJCURSSVZFUl9OQU1FLCByZXQpOworCQkJaWYgKCsraTJjX2Vycm9ycyA+PSBtYXhfaTJjX2Vycm9ycykgeworCQkJCXByaW50ayhLRVJOX0VSUiAiTWF4aW11bSBJMkMgZXJyb3IgY291bnQiCisJCQkJCQkiIGV4Y2VlZGVkLiAgVGVybWluYXRpbmcgJXMuXG4iLAorCQkJCQkJX19mdW5jX18pOworCQkJCWJyZWFrOworCQkJfQorCQkJY29tcGxldGUoJmlycV9ldmVudCk7CisJCQljb250aW51ZTsKKwkJfQorCisJCS8qIHRoZXNlIGhhbmRsZXJzIGRlYWwgd2l0aCB0aGUgcmVsZXZhbnQgU0lIIGlycSBzdGF0dXMgKi8KKwkJbG9jYWxfaXJxX2Rpc2FibGUoKTsKKwkJZm9yIChtb2R1bGVfaXJxID0gdHdsNDAzMF9pcnFfYmFzZTsKKwkJCQlwaWhfaXNyOworCQkJCXBpaF9pc3IgPj49IDEsIG1vZHVsZV9pcnErKykgeworCQkJaWYgKHBpaF9pc3IgJiAweDEpIHsKKwkJCQlpcnFfZGVzY190ICpkID0gaXJxX2Rlc2MgKyBtb2R1bGVfaXJxOworCisJCQkJZC0+aGFuZGxlX2lycShtb2R1bGVfaXJxLCBkKTsKKwkJCX0KKwkJfQorCQlsb2NhbF9pcnFfZW5hYmxlKCk7CisKKwkJZGVzYy0+Y2hpcC0+dW5tYXNrKGlycSk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBkb190d2w0MDMwX2lycSgpIGlzIHRoZSBkZXNjLT5oYW5kbGUgbWV0aG9kIGZvciB0aGUgdHdsNDAzMCBpbnRlcnJ1cHQuCisgKiBUaGlzIGlzIGEgY2hhaW5lZCBpbnRlcnJ1cHQsIHNvIHRoZXJlIGlzIG5vIGRlc2MtPmFjdGlvbiBtZXRob2QgZm9yIGl0LgorICogTm93IHdlIG5lZWQgdG8gcXVlcnkgdGhlIGludGVycnVwdCBjb250cm9sbGVyIGluIHRoZSB0d2w0MDMwIHRvIGRldGVybWluZQorICogd2hpY2ggbW9kdWxlIGlzIGdlbmVyYXRpbmcgdGhlIGludGVycnVwdCByZXF1ZXN0LiAgSG93ZXZlciwgd2UgY2FuJ3QgZG8gaTJjCisgKiB0cmFuc2FjdGlvbnMgaW4gaW50ZXJydXB0IGNvbnRleHQsIHNvIHdlIG11c3QgZGVmZXIgdGhhdCB3b3JrIHRvIGEga2VybmVsCisgKiB0aHJlYWQuICBBbGwgd2UgZG8gaGVyZSBpcyBhY2tub3dsZWRnZSBhbmQgbWFzayB0aGUgaW50ZXJydXB0IGFuZCB3YWtldXAKKyAqIHRoZSBrZXJuZWwgdGhyZWFkLgorICovCitzdGF0aWMgdm9pZCBkb190d2w0MDMwX2lycSh1bnNpZ25lZCBpbnQgaXJxLCBpcnFfZGVzY190ICpkZXNjKQoreworCWNvbnN0IHVuc2lnbmVkIGludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CisKKwkvKgorCSAqIEVhcmxpZXIgdGhpcyB3YXMgZGVzYy0+dHJpZ2dlcmVkID0gMTsKKwkgKi8KKwlkZXNjLT5zdGF0dXMgfD0gSVJRX0xFVkVMOworCisJLyoKKwkgKiBBY2tub3dsZWRnZSwgY2xlYXIgX0FORF8gZGlzYWJsZSB0aGUgaW50ZXJydXB0LgorCSAqLworCWRlc2MtPmNoaXAtPmFjayhpcnEpOworCisJaWYgKCFkZXNjLT5kZXB0aCkgeworCQlrc3RhdF9jcHUoY3B1KS5pcnFzW2lycV0rKzsKKworCQljb21wbGV0ZSgmaXJxX2V2ZW50KTsKKwl9Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdGFza19zdHJ1Y3QgKiBfX2luaXQgc3RhcnRfdHdsNDAzMF9pcnFfdGhyZWFkKGxvbmcgaXJxKQoreworCXN0cnVjdCB0YXNrX3N0cnVjdCAqdGhyZWFkOworCisJaW5pdF9jb21wbGV0aW9uKCZpcnFfZXZlbnQpOworCXRocmVhZCA9IGt0aHJlYWRfcnVuKHR3bDQwMzBfaXJxX3RocmVhZCwgKHZvaWQgKilpcnEsICJ0d2w0MDMwLWlycSIpOworCWlmICghdGhyZWFkKQorCQlwcl9lcnIoIiVzOiBjb3VsZCBub3QgY3JlYXRlIHR3bDQwMzAgaXJxICVsZCB0aHJlYWQhXG4iLAorCQkgICAgICAgRFJJVkVSX05BTUUsIGlycSk7CisKKwlyZXR1cm4gdGhyZWFkOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW50IGFkZF9jaGlsZHJlbihzdHJ1Y3QgdHdsNDAzMF9wbGF0Zm9ybV9kYXRhICpwZGF0YSkKK3sKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlCSpwZGV2ID0gTlVMTDsKKwlzdHJ1Y3QgdHdsNDAzMF9jbGllbnQJKnR3bCA9IE5VTEw7CisJaW50CQkJc3RhdHVzID0gMDsKKworCWlmICh0d2xfaGFzX2JjaSgpICYmIHBkYXRhLT5iY2kpIHsKKwkJdHdsID0gJnR3bDQwMzBfbW9kdWxlc1szXTsKKworCQlwZGV2ID0gcGxhdGZvcm1fZGV2aWNlX2FsbG9jKCJ0d2w0MDMwX2JjaSIsIC0xKTsKKwkJaWYgKCFwZGV2KSB7CisJCQlwcl9kZWJ1ZygiJXM6IGNhbid0IGFsbG9jIGJjaSBkZXZcbiIsIERSSVZFUl9OQU1FKTsKKwkJCXN0YXR1cyA9IC1FTk9NRU07CisJCQlnb3RvIGVycjsKKwkJfQorCisJCWlmIChzdGF0dXMgPT0gMCkgeworCQkJcGRldi0+ZGV2LnBhcmVudCA9ICZ0d2wtPmNsaWVudC0+ZGV2OworCQkJc3RhdHVzID0gcGxhdGZvcm1fZGV2aWNlX2FkZF9kYXRhKHBkZXYsIHBkYXRhLT5iY2ksCisJCQkJCXNpemVvZigqcGRhdGEtPmJjaSkpOworCQkJaWYgKHN0YXR1cyA8IDApIHsKKwkJCQlkZXZfZGJnKCZ0d2wtPmNsaWVudC0+ZGV2LAorCQkJCQkiY2FuJ3QgYWRkIGJjaSBkYXRhLCAlZFxuIiwKKwkJCQkJc3RhdHVzKTsKKwkJCQlnb3RvIGVycjsKKwkJCX0KKwkJfQorCisJCWlmIChzdGF0dXMgPT0gMCkgeworCQkJc3RydWN0IHJlc291cmNlIHIgPSB7CisJCQkJLnN0YXJ0ID0gVFdMNDAzMF9QV1JJUlFfQ0hHX1BSRVMsCisJCQkJLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEsCisJCQl9OworCisJCQlzdGF0dXMgPSBwbGF0Zm9ybV9kZXZpY2VfYWRkX3Jlc291cmNlcyhwZGV2LCAmciwgMSk7CisJCX0KKworCQlpZiAoc3RhdHVzID09IDApCisJCQlzdGF0dXMgPSBwbGF0Zm9ybV9kZXZpY2VfYWRkKHBkZXYpOworCisJCWlmIChzdGF0dXMgPCAwKSB7CisJCQlwbGF0Zm9ybV9kZXZpY2VfcHV0KHBkZXYpOworCQkJZGV2X2RiZygmdHdsLT5jbGllbnQtPmRldiwKKwkJCQkJImNhbid0IGNyZWF0ZSBiY2kgZGV2LCAlZFxuIiwKKwkJCQkJc3RhdHVzKTsKKwkJCWdvdG8gZXJyOworCQl9CisJfQorCisJaWYgKHR3bF9oYXNfZ3BpbygpICYmIHBkYXRhLT5ncGlvKSB7CisJCXR3bCA9ICZ0d2w0MDMwX21vZHVsZXNbMV07CisKKwkJcGRldiA9IHBsYXRmb3JtX2RldmljZV9hbGxvYygidHdsNDAzMF9ncGlvIiwgLTEpOworCQlpZiAoIXBkZXYpIHsKKwkJCXByX2RlYnVnKCIlczogY2FuJ3QgYWxsb2MgZ3BpbyBkZXZcbiIsIERSSVZFUl9OQU1FKTsKKwkJCXN0YXR1cyA9IC1FTk9NRU07CisJCQlnb3RvIGVycjsKKwkJfQorCisJCS8qIG1vcmUgZHJpdmVyIG1vZGVsIGluaXQgKi8KKwkJaWYgKHN0YXR1cyA9PSAwKSB7CisJCQlwZGV2LT5kZXYucGFyZW50ID0gJnR3bC0+Y2xpZW50LT5kZXY7CisJCQkvKiBkZXZpY2VfaW5pdF93YWtldXAoJnBkZXYtPmRldiwgMSk7ICovCisKKwkJCXN0YXR1cyA9IHBsYXRmb3JtX2RldmljZV9hZGRfZGF0YShwZGV2LCBwZGF0YS0+Z3BpbywKKwkJCQkJc2l6ZW9mKCpwZGF0YS0+Z3BpbykpOworCQkJaWYgKHN0YXR1cyA8IDApIHsKKwkJCQlkZXZfZGJnKCZ0d2wtPmNsaWVudC0+ZGV2LAorCQkJCQkiY2FuJ3QgYWRkIGdwaW8gZGF0YSwgJWRcbiIsCisJCQkJCXN0YXR1cyk7CisJCQkJZ290byBlcnI7CisJCQl9CisJCX0KKworCQkvKiBHUElPIG1vZHVsZSBJUlEgKi8KKwkJaWYgKHN0YXR1cyA9PSAwKSB7CisJCQlzdHJ1Y3QgcmVzb3VyY2UJciA9IHsKKwkJCQkuc3RhcnQgPSBwZGF0YS0+aXJxX2Jhc2UgKyAwLAorCQkJCS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRLAorCQkJfTsKKworCQkJc3RhdHVzID0gcGxhdGZvcm1fZGV2aWNlX2FkZF9yZXNvdXJjZXMocGRldiwgJnIsIDEpOworCQl9CisKKwkJaWYgKHN0YXR1cyA9PSAwKQorCQkJc3RhdHVzID0gcGxhdGZvcm1fZGV2aWNlX2FkZChwZGV2KTsKKworCQlpZiAoc3RhdHVzIDwgMCkgeworCQkJcGxhdGZvcm1fZGV2aWNlX3B1dChwZGV2KTsKKwkJCWRldl9kYmcoJnR3bC0+Y2xpZW50LT5kZXYsCisJCQkJCSJjYW4ndCBjcmVhdGUgZ3BpbyBkZXYsICVkXG4iLAorCQkJCQlzdGF0dXMpOworCQkJZ290byBlcnI7CisJCX0KKwl9CisKKwlpZiAodHdsX2hhc19rZXlwYWQoKSAmJiBwZGF0YS0+a2V5cGFkKSB7CisJCXBkZXYgPSBwbGF0Zm9ybV9kZXZpY2VfYWxsb2MoInR3bDQwMzBfa2V5cGFkIiwgLTEpOworCQlpZiAocGRldikgeworCQkJdHdsID0gJnR3bDQwMzBfbW9kdWxlc1syXTsKKwkJCXBkZXYtPmRldi5wYXJlbnQgPSAmdHdsLT5jbGllbnQtPmRldjsKKwkJCWRldmljZV9pbml0X3dha2V1cCgmcGRldi0+ZGV2LCAxKTsKKwkJCXN0YXR1cyA9IHBsYXRmb3JtX2RldmljZV9hZGRfZGF0YShwZGV2LCBwZGF0YS0+a2V5cGFkLAorCQkJCQlzaXplb2YoKnBkYXRhLT5rZXlwYWQpKTsKKwkJCWlmIChzdGF0dXMgPCAwKSB7CisJCQkJZGV2X2RiZygmdHdsLT5jbGllbnQtPmRldiwKKwkJCQkJImNhbid0IGFkZCBrZXlwYWQgZGF0YSwgJWRcbiIsCisJCQkJCXN0YXR1cyk7CisJCQkJcGxhdGZvcm1fZGV2aWNlX3B1dChwZGV2KTsKKwkJCQlnb3RvIGVycjsKKwkJCX0KKwkJCXN0YXR1cyA9IHBsYXRmb3JtX2RldmljZV9hZGQocGRldik7CisJCQlpZiAoc3RhdHVzIDwgMCkgeworCQkJCXBsYXRmb3JtX2RldmljZV9wdXQocGRldik7CisJCQkJZGV2X2RiZygmdHdsLT5jbGllbnQtPmRldiwKKwkJCQkJCSJjYW4ndCBjcmVhdGUga2V5cGFkIGRldiwgJWRcbiIsCisJCQkJCQlzdGF0dXMpOworCQkJCWdvdG8gZXJyOworCQkJfQorCQl9IGVsc2UgeworCQkJcHJfZGVidWcoIiVzOiBjYW4ndCBhbGxvYyBrZXlwYWQgZGV2XG4iLCBEUklWRVJfTkFNRSk7CisJCQlzdGF0dXMgPSAtRU5PTUVNOworCQkJZ290byBlcnI7CisJCX0KKwl9CisKKwlpZiAodHdsX2hhc19tYWRjKCkgJiYgcGRhdGEtPm1hZGMpIHsKKwkJcGRldiA9IHBsYXRmb3JtX2RldmljZV9hbGxvYygidHdsNDAzMF9tYWRjIiwgLTEpOworCQlpZiAocGRldikgeworCQkJdHdsID0gJnR3bDQwMzBfbW9kdWxlc1syXTsKKwkJCXBkZXYtPmRldi5wYXJlbnQgPSAmdHdsLT5jbGllbnQtPmRldjsKKwkJCWRldmljZV9pbml0X3dha2V1cCgmcGRldi0+ZGV2LCAxKTsKKwkJCXN0YXR1cyA9IHBsYXRmb3JtX2RldmljZV9hZGRfZGF0YShwZGV2LCBwZGF0YS0+bWFkYywKKwkJCQkJc2l6ZW9mKCpwZGF0YS0+bWFkYykpOworCQkJaWYgKHN0YXR1cyA8IDApIHsKKwkJCQlwbGF0Zm9ybV9kZXZpY2VfcHV0KHBkZXYpOworCQkJCWRldl9kYmcoJnR3bC0+Y2xpZW50LT5kZXYsCisJCQkJCSJjYW4ndCBhZGQgbWFkYyBkYXRhLCAlZFxuIiwKKwkJCQkJc3RhdHVzKTsKKwkJCQlnb3RvIGVycjsKKwkJCX0KKwkJCXN0YXR1cyA9IHBsYXRmb3JtX2RldmljZV9hZGQocGRldik7CisJCQlpZiAoc3RhdHVzIDwgMCkgeworCQkJCXBsYXRmb3JtX2RldmljZV9wdXQocGRldik7CisJCQkJZGV2X2RiZygmdHdsLT5jbGllbnQtPmRldiwKKwkJCQkJCSJjYW4ndCBjcmVhdGUgbWFkYyBkZXYsICVkXG4iLAorCQkJCQkJc3RhdHVzKTsKKwkJCQlnb3RvIGVycjsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCXByX2RlYnVnKCIlczogY2FuJ3QgYWxsb2MgbWFkYyBkZXZcbiIsIERSSVZFUl9OQU1FKTsKKwkJCXN0YXR1cyA9IC1FTk9NRU07CisJCQlnb3RvIGVycjsKKwkJfQorCX0KKworCWlmICh0d2xfaGFzX3J0YygpKSB7CisJCXR3bCA9ICZ0d2w0MDMwX21vZHVsZXNbM107CisKKwkJcGRldiA9IHBsYXRmb3JtX2RldmljZV9hbGxvYygidHdsNDAzMF9ydGMiLCAtMSk7CisJCWlmICghcGRldikgeworCQkJcHJfZGVidWcoIiVzOiBjYW4ndCBhbGxvYyBydGMgZGV2XG4iLCBEUklWRVJfTkFNRSk7CisJCQlzdGF0dXMgPSAtRU5PTUVNOworCQl9IGVsc2UgeworCQkJcGRldi0+ZGV2LnBhcmVudCA9ICZ0d2wtPmNsaWVudC0+ZGV2OworCQkJZGV2aWNlX2luaXRfd2FrZXVwKCZwZGV2LT5kZXYsIDEpOworCQl9CisKKwkJLyoKKwkJICogUkVWSVNJVCBwbGF0Zm9ybV9kYXRhIGhlcmUgY3VycmVudGx5IG1pZ2h0IHVzZSBvZgorCQkgKiAibXNlY3VyZSIgbGluZSAuLi4gYnV0IGZvciBub3cgd2UganVzdCBleHBlY3QgYm9hcmQKKwkJICogc2V0dXAgdG8gdGVsbCB0aGUgY2hpcCAid2UgYXJlIHNlY3VyZSIgYXQgYWxsIHRpbWVzLgorCQkgKiBFdmVudHVhbGx5LCBMaW51eCBtaWdodCBiZWNvbWUgbW9yZSBhd2FyZSBvZiBzdWNoCisJCSAqIEhXIHNlY3VyaXR5IGNvbmNlcm5zLCBhbmQgImxlYXN0IHByaXZpbGVnZSIuCisJCSAqLworCisJCS8qIFJUQyBtb2R1bGUgSVJRICovCisJCWlmIChzdGF0dXMgPT0gMCkgeworCQkJc3RydWN0IHJlc291cmNlCXIgPSB7CisJCQkJLyogUkVWSVNJVCBkb24ndCBoYXJkLXdpcmUgdGhpcyBzdHVmZiAqLworCQkJCS5zdGFydCA9IFRXTDQwMzBfUFdSSVJRX1JUQywKKwkJCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSwKKwkJCX07CisKKwkJCXN0YXR1cyA9IHBsYXRmb3JtX2RldmljZV9hZGRfcmVzb3VyY2VzKHBkZXYsICZyLCAxKTsKKwkJfQorCisJCWlmIChzdGF0dXMgPT0gMCkKKwkJCXN0YXR1cyA9IHBsYXRmb3JtX2RldmljZV9hZGQocGRldik7CisKKwkJaWYgKHN0YXR1cyA8IDApIHsKKwkJCXBsYXRmb3JtX2RldmljZV9wdXQocGRldik7CisJCQlkZXZfZGJnKCZ0d2wtPmNsaWVudC0+ZGV2LAorCQkJCQkiY2FuJ3QgY3JlYXRlIHJ0YyBkZXYsICVkXG4iLAorCQkJCQlzdGF0dXMpOworCQkJZ290byBlcnI7CisJCX0KKwl9CisKKwlpZiAodHdsX2hhc191c2IoKSAmJiBwZGF0YS0+dXNiKSB7CisJCXR3bCA9ICZ0d2w0MDMwX21vZHVsZXNbMF07CisKKwkJcGRldiA9IHBsYXRmb3JtX2RldmljZV9hbGxvYygidHdsNDAzMF91c2IiLCAtMSk7CisJCWlmICghcGRldikgeworCQkJcHJfZGVidWcoIiVzOiBjYW4ndCBhbGxvYyB1c2IgZGV2XG4iLCBEUklWRVJfTkFNRSk7CisJCQlzdGF0dXMgPSAtRU5PTUVNOworCQkJZ290byBlcnI7CisJCX0KKworCQlpZiAoc3RhdHVzID09IDApIHsKKwkJCXBkZXYtPmRldi5wYXJlbnQgPSAmdHdsLT5jbGllbnQtPmRldjsKKwkJCWRldmljZV9pbml0X3dha2V1cCgmcGRldi0+ZGV2LCAxKTsKKwkJCXN0YXR1cyA9IHBsYXRmb3JtX2RldmljZV9hZGRfZGF0YShwZGV2LCBwZGF0YS0+dXNiLAorCQkJCQlzaXplb2YoKnBkYXRhLT51c2IpKTsKKwkJCWlmIChzdGF0dXMgPCAwKSB7CisJCQkJcGxhdGZvcm1fZGV2aWNlX3B1dChwZGV2KTsKKwkJCQlkZXZfZGJnKCZ0d2wtPmNsaWVudC0+ZGV2LAorCQkJCQkiY2FuJ3QgYWRkIHVzYiBkYXRhLCAlZFxuIiwKKwkJCQkJc3RhdHVzKTsKKwkJCQlnb3RvIGVycjsKKwkJCX0KKwkJfQorCisJCWlmIChzdGF0dXMgPT0gMCkgeworCQkJc3RydWN0IHJlc291cmNlIHIgPSB7CisJCQkJLnN0YXJ0ID0gVFdMNDAzMF9QV1JJUlFfVVNCX1BSRVMsCisJCQkJLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEsCisJCQl9OworCisJCQlzdGF0dXMgPSBwbGF0Zm9ybV9kZXZpY2VfYWRkX3Jlc291cmNlcyhwZGV2LCAmciwgMSk7CisJCX0KKworCQlpZiAoc3RhdHVzID09IDApCisJCQlzdGF0dXMgPSBwbGF0Zm9ybV9kZXZpY2VfYWRkKHBkZXYpOworCisJCWlmIChzdGF0dXMgPCAwKSB7CisJCQlwbGF0Zm9ybV9kZXZpY2VfcHV0KHBkZXYpOworCQkJZGV2X2RiZygmdHdsLT5jbGllbnQtPmRldiwKKwkJCQkJImNhbid0IGNyZWF0ZSB1c2IgZGV2LCAlZFxuIiwKKwkJCQkJc3RhdHVzKTsKKwkJfQorCX0KKworZXJyOgorCWlmIChzdGF0dXMpCisJCXByX2VycigiZmFpbGVkIHRvIGFkZCB0d2w0MDMwJ3MgY2hpbGRyZW4gKHN0YXR1cyAlZClcbiIsIHN0YXR1cyk7CisJcmV0dXJuIHN0YXR1czsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyoKKyAqIFRoZXNlIHRocmVlIGZ1bmN0aW9ucyBpbml0aWFsaXplIHRoZSBvbi1jaGlwIGNsb2NrIGZyYW1ld29yaywKKyAqIGxldHRpbmcgaXQgZ2VuZXJhdGUgdGhlIHJpZ2h0IGZyZXF1ZW5jaWVzIGZvciBVU0IsIE1BREMsIGFuZAorICogb3RoZXIgcHVycG9zZXMuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IF9faW5pdCBwcm90ZWN0X3BtX21hc3Rlcih2b2lkKQoreworCWludCBlID0gMDsKKworCWUgPSB0d2w0MDMwX2kyY193cml0ZV91OChUV0w0MDMwX01PRFVMRV9QTV9NQVNURVIsIEtFWV9MT0NLLAorCQkJUl9QUk9URUNUX0tFWSk7CisJcmV0dXJuIGU7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IF9faW5pdCB1bnByb3RlY3RfcG1fbWFzdGVyKHZvaWQpCit7CisJaW50IGUgPSAwOworCisJZSB8PSB0d2w0MDMwX2kyY193cml0ZV91OChUV0w0MDMwX01PRFVMRV9QTV9NQVNURVIsIEtFWV9VTkxPQ0sxLAorCQkJUl9QUk9URUNUX0tFWSk7CisJZSB8PSB0d2w0MDMwX2kyY193cml0ZV91OChUV0w0MDMwX01PRFVMRV9QTV9NQVNURVIsIEtFWV9VTkxPQ0syLAorCQkJUl9QUk9URUNUX0tFWSk7CisJcmV0dXJuIGU7Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCBjbG9ja3NfaW5pdCh2b2lkKQoreworCWludCBlID0gMDsKKwlzdHJ1Y3QgY2xrICpvc2M7CisJdTMyIHJhdGU7CisJdTggY3RybCA9IEhGQ0xLX0ZSRVFfMjZfTUhaOworCisjaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMikgfHwgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMykKKwlpZiAoY3B1X2lzX29tYXAyNDMwKCkpCisJCW9zYyA9IGNsa19nZXQoTlVMTCwgIm9zY19jayIpOworCWVsc2UKKwkJb3NjID0gY2xrX2dldChOVUxMLCAib3NjX3N5c19jayIpOworI2Vsc2UKKwkvKiBSRVZJU0lUIGZvciBub24tT01BUCBzeXN0ZW1zLCBwYXNzIHRoZSBjbG9jayByYXRlIGZyb20KKwkgKiBib2FyZCBpbml0IGNvZGUsIHVzaW5nIHBsYXRmb3JtX2RhdGEuCisJICovCisJb3NjID0gRVJSX1BUUigtRUlPKTsKKyNlbmRpZgorCWlmIChJU19FUlIob3NjKSkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICJTa2lwcGluZyB0d2w0MDMwIGludGVybmFsIGNsb2NrIGluaXQgYW5kICIKKwkJCQkidXNpbmcgYm9vdGxvYWRlciB2YWx1ZSAodW5rbm93biBvc2MgcmF0ZSlcbiIpOworCQlyZXR1cm47CisJfQorCisJcmF0ZSA9IGNsa19nZXRfcmF0ZShvc2MpOworCWNsa19wdXQob3NjKTsKKworCXN3aXRjaCAocmF0ZSkgeworCWNhc2UgMTkyMDAwMDA6CisJCWN0cmwgPSBIRkNMS19GUkVRXzE5cDJfTUhaOworCQlicmVhazsKKwljYXNlIDI2MDAwMDAwOgorCQljdHJsID0gSEZDTEtfRlJFUV8yNl9NSFo7CisJCWJyZWFrOworCWNhc2UgMzg0MDAwMDA6CisJCWN0cmwgPSBIRkNMS19GUkVRXzM4cDRfTUhaOworCQlicmVhazsKKwl9CisKKwljdHJsIHw9IEhJR0hfUEVSRl9TUTsKKwllIHw9IHVucHJvdGVjdF9wbV9tYXN0ZXIoKTsKKwkvKiBlZmZlY3QtPk1BREMrVVNCIGNrIGVuICovCisJZSB8PSB0d2w0MDMwX2kyY193cml0ZV91OChUV0w0MDMwX01PRFVMRV9QTV9NQVNURVIsIGN0cmwsIFJfQ0ZHX0JPT1QpOworCWUgfD0gcHJvdGVjdF9wbV9tYXN0ZXIoKTsKKworCWlmIChlIDwgMCkKKwkJcHJfZXJyKCIlczogY2xvY2sgaW5pdCBlcnIgWyVkXVxuIiwgRFJJVkVSX05BTUUsIGUpOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKioKKyAqIHR3bDQwMzBfaTJjX2NsZWFyX2lzciAtIGNsZWFyIFRXTDQwMzAgU0lIIElTUiByZWdzIHZpYSByZWFkICsgd3JpdGUKKyAqIEBtb2Rfbm86IFRXTDQwMzAgbW9kdWxlIG51bWJlcgorICogQHJlZzogcmVnaXN0ZXIgaW5kZXggdG8gY2xlYXIKKyAqIEBjb3I6IHZhbHVlIG9mIHRoZSA8bW9kdWxlPl9TSUhfQ1RSTC5DT1IgYml0ICgxIG9yIDApCisgKgorICogRWl0aGVyIHJlYWRzIChjb3IgPT0gMSkgb3Igd3JpdGVzIChjb3IgPT0gMCkgdG8gYSBUV0w0MDMwIGludGVycnVwdAorICogc3RhdHVzIHJlZ2lzdGVyIHRvIGVuc3VyZSB0aGF0IGFueSBwcmlvciBpbnRlcnJ1cHRzIGFyZSBjbGVhcmVkLgorICogUmV0dXJucyB0aGUgc3RhdHVzIGZyb20gdGhlIEkyQyByZWFkIG9wZXJhdGlvbi4KKyAqLworc3RhdGljIGludCBfX2luaXQgdHdsNDAzMF9pMmNfY2xlYXJfaXNyKHU4IG1vZF9ubywgdTggcmVnLCB1OCBjb3IpCit7CisJdTggdG1wOworCisJcmV0dXJuIChjb3IpID8gdHdsNDAzMF9pMmNfcmVhZF91OChtb2Rfbm8sICZ0bXAsIHJlZykgOgorCQl0d2w0MDMwX2kyY193cml0ZV91OChtb2Rfbm8sIDB4ZmYsIHJlZyk7Cit9CisKKy8qKgorICogdHdsNDAzMF9yZWFkX2Nvcl9iaXQgLSBhcmUgVFdMIG1vZHVsZSBJU1JzIGNsZWFyZWQgYnkgcmVhZHMgb3Igd3JpdGVzPworICogQG1vZF9ubzogVFdMNDAzMCBtb2R1bGUgbnVtYmVyCisgKiBAcmVnOiByZWdpc3RlciBpbmRleCB0byBjbGVhcgorICoKKyAqIFJldHVybnMgMSBpZiB0aGUgVFdMNDAzMCBTSUggaW50ZXJydXB0IHN0YXR1cyByZWdpc3RlcnMgKElTUnMpIGZvcgorICogdGhlIHNwZWNpZmllZCBUV0wgbW9kdWxlIGFyZSBjbGVhcmVkIGJ5IHJlYWRzLCBvciAwIGlmIGNsZWFyZWQgYnkKKyAqIHdyaXRlcy4KKyAqLworc3RhdGljIGludCB0d2w0MDMwX3JlYWRfY29yX2JpdCh1OCBtb2Rfbm8sIHU4IHJlZykKK3sKKwl1OCB0bXAgPSAwOworCisJV0FSTl9PTih0d2w0MDMwX2kyY19yZWFkX3U4KG1vZF9ubywgJnRtcCwgcmVnKSA8IDApOworCisJdG1wICY9IFRXTDQwMzBfU0lIX0NUUkxfQ09SX01BU0s7CisJdG1wID4+PSBfX2ZmcyhUV0w0MDMwX1NJSF9DVFJMX0NPUl9NQVNLKTsKKworCXJldHVybiB0bXA7Cit9CisKKy8qKgorICogdHdsNDAzMF9tYXNrX2NsZWFyX2ludHJzIC0gbWFzayBhbmQgY2xlYXIgYWxsIFRXTDQwMzAgaW50ZXJydXB0cworICogQHQ6IHBvaW50ZXIgdG8gdHdsNDAzMF9tb2RfaXJlZ3MgYXJyYXkKKyAqIEB0X3N6OiBBUlJBWV9TSVpFKHQpIChzdGFydGluZyBhdCAxKQorICoKKyAqIE1hc2sgYWxsIFRXTDQwMzAgaW50ZXJydXB0IG1hc2sgcmVnaXN0ZXJzIChJTVJzKSBhbmQgY2xlYXIgYWxsCisgKiBpbnRlcnJ1cHQgc3RhdHVzIHJlZ2lzdGVycyAoSVNScykuICBObyByZXR1cm4gdmFsdWUsIGJ1dCB3aWxsIFdBUk4gaWYKKyAqIGFueSBJMkMgb3BlcmF0aW9ucyBmYWlsLgorICovCitzdGF0aWMgdm9pZCBfX2luaXQgdHdsNDAzMF9tYXNrX2NsZWFyX2ludHJzKGNvbnN0IHN0cnVjdCB0d2w0MDMwX21vZF9pcmVncyAqdCwKKwkJCQkJICAgIGNvbnN0IHU4IHRfc3opCit7CisJaW50IGksIGo7CisKKwkvKgorCSAqIE4uQi4gLSBmdXJ0aGVyIGVmZmljaWVuY3kgaXMgcG9zc2libGUgaGVyZS4gIEVpZ2h0IEkyQworCSAqIG9wZXJhdGlvbnMgb24gQkNJIGFuZCBHUElPIG1vZHVsZXMgYXJlIGF2b2lkYWJsZSBpZiBJMkMKKwkgKiBidXJzdCByZWFkL3dyaXRlIHRyYW5zYWN0aW9ucyB3ZXJlIGltcGxlbWVudGVkLiAgV291bGQKKwkgKiBwcm9iYWJseSBzYXZlIGFib3V0IDFtcyBvZiBib290IHRpbWUgYW5kIGEgc21hbGwgYW1vdW50IG9mCisJICogcG93ZXIuCisJICovCisJZm9yIChpID0gMDsgaSA8IHRfc3o7IGkrKykgeworCQljb25zdCBzdHJ1Y3QgdHdsNDAzMF9tb2RfaXJlZ3MgdG1yID0gdFtpXTsKKwkJaW50IGNvcjsKKworCQkvKiBBcmUgSVNScyBjbGVhcmVkIGJ5IHJlYWRzIG9yIHdyaXRlcz8gKi8KKwkJY29yID0gdHdsNDAzMF9yZWFkX2Nvcl9iaXQodG1yLm1vZF9ubywgdG1yLnNpaF9jdHJsKTsKKworCQlmb3IgKGogPSAwOyBqIDwgdG1yLnJlZ19jbnQ7IGorKykgeworCisJCQkvKiBNYXNrIGludGVycnVwdHMgYXQgdGhlIFRXTDQwMzAgKi8KKwkJCVdBUk5fT04odHdsNDAzMF9pMmNfd3JpdGVfdTgodG1yLm1vZF9ubywgMHhmZiwKKwkJCQkJCSAgICAgdG1yLmltcnNbal0pIDwgMCk7CisKKwkJCS8qIENsZWFyIFRXTDQwMzAgSVNScyAqLworCQkJV0FSTl9PTih0d2w0MDMwX2kyY19jbGVhcl9pc3IodG1yLm1vZF9ubywKKwkJCQkJCSAgICAgIHRtci5pc3JzW2pdLCBjb3IpIDwgMCk7CisJCX0KKwl9Cit9CisKKworc3RhdGljIHZvaWQgdHdsX2luaXRfaXJxKGludCBpcnFfbnVtLCB1bnNpZ25lZCBpcnFfYmFzZSwgdW5zaWduZWQgaXJxX2VuZCkKK3sKKwlpbnQJaTsKKworCS8qCisJICogTWFzayBhbmQgY2xlYXIgYWxsIFRXTDQwMzAgaW50ZXJydXB0cyBzaW5jZSBpbml0aWFsbHkgd2UgZG8KKwkgKiBub3QgaGF2ZSBhbnkgVFdMNDAzMCBtb2R1bGUgaW50ZXJydXB0IGhhbmRsZXJzIHByZXNlbnQKKwkgKi8KKwl0d2w0MDMwX21hc2tfY2xlYXJfaW50cnModHdsNDAzMF9tb2RfcmVncywKKwkJCQkgQVJSQVlfU0laRSh0d2w0MDMwX21vZF9yZWdzKSk7CisKKwl0d2w0MDMwX2lycV9iYXNlID0gaXJxX2Jhc2U7CisKKwkvKiBpbnN0YWxsIGFuIGlycSBoYW5kbGVyIGZvciBlYWNoIG9mIHRoZSBQSUggbW9kdWxlcyAqLworCWZvciAoaSA9IGlycV9iYXNlOyBpIDwgaXJxX2VuZDsgaSsrKSB7CisJCXNldF9pcnFfY2hpcF9hbmRfaGFuZGxlcihpLCAmdHdsNDAzMF9pcnFfY2hpcCwKKwkJCQloYW5kbGVfc2ltcGxlX2lycSk7CisJCWFjdGl2YXRlX2lycShpKTsKKwl9CisKKwkvKiBpbnN0YWxsIGFuIGlycSBoYW5kbGVyIHRvIGRlbXVsdGlwbGV4IHRoZSBUV0w0MDMwIGludGVycnVwdCAqLworCXNldF9pcnFfZGF0YShpcnFfbnVtLCBzdGFydF90d2w0MDMwX2lycV90aHJlYWQoaXJxX251bSkpOworCXNldF9pcnFfY2hhaW5lZF9oYW5kbGVyKGlycV9udW0sIGRvX3R3bDQwMzBfaXJxKTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGludCB0d2w0MDMwX3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQoreworCXVuc2lnbmVkIGk7CisKKwkvKiBGSVhNRSB1bmRvIHR3bF9pbml0X2lycSgpICovCisJaWYgKHR3bDQwMzBfaXJxX2Jhc2UpIHsKKwkJZGV2X2VycigmY2xpZW50LT5kZXYsICJjYW4ndCB5ZXQgY2xlYW4gdXAgSVJRcz9cbiIpOworCQlyZXR1cm4gLUVOT1NZUzsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgVFdMNDAzMF9OVU1fU0xBVkVTOyBpKyspIHsKKwkJc3RydWN0IHR3bDQwMzBfY2xpZW50CSp0d2wgPSAmdHdsNDAzMF9tb2R1bGVzW2ldOworCisJCWlmICh0d2wtPmNsaWVudCAmJiB0d2wtPmNsaWVudCAhPSBjbGllbnQpCisJCQlpMmNfdW5yZWdpc3Rlcl9kZXZpY2UodHdsLT5jbGllbnQpOworCQl0d2w0MDMwX21vZHVsZXNbaV0uY2xpZW50ID0gTlVMTDsKKwl9CisJaW51c2UgPSBmYWxzZTsKKwlyZXR1cm4gMDsKK30KKworLyogTk9URTogIHRoaXMgZHJpdmVyIG9ubHkgaGFuZGxlcyBhIHNpbmdsZSB0d2w0MDMwL3RwczY1OXgwIGNoaXAgKi8KK3N0YXRpYyBpbnQKK3R3bDQwMzBfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKQoreworCWludAkJCQlzdGF0dXM7CisJdW5zaWduZWQJCQlpOworCXN0cnVjdCB0d2w0MDMwX3BsYXRmb3JtX2RhdGEJKnBkYXRhID0gY2xpZW50LT5kZXYucGxhdGZvcm1fZGF0YTsKKworCWlmICghcGRhdGEpIHsKKwkJZGV2X2RiZygmY2xpZW50LT5kZXYsICJubyBwbGF0Zm9ybSBkYXRhP1xuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmIChpMmNfY2hlY2tfZnVuY3Rpb25hbGl0eShjbGllbnQtPmFkYXB0ZXIsIEkyQ19GVU5DX0kyQykgPT0gMCkgeworCQlkZXZfZGJnKCZjbGllbnQtPmRldiwgImNhbid0IHRhbGsgSTJDP1xuIik7CisJCXJldHVybiAtRUlPOworCX0KKworCWlmIChpbnVzZSB8fCB0d2w0MDMwX2lycV9iYXNlKSB7CisJCWRldl9kYmcoJmNsaWVudC0+ZGV2LCAiZHJpdmVyIGlzIGFscmVhZHkgaW4gdXNlXG4iKTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgVFdMNDAzMF9OVU1fU0xBVkVTOyBpKyspIHsKKwkJc3RydWN0IHR3bDQwMzBfY2xpZW50CSp0d2wgPSAmdHdsNDAzMF9tb2R1bGVzW2ldOworCisJCXR3bC0+YWRkcmVzcyA9IGNsaWVudC0+YWRkciArIGk7CisJCWlmIChpID09IDApCisJCQl0d2wtPmNsaWVudCA9IGNsaWVudDsKKwkJZWxzZSB7CisJCQl0d2wtPmNsaWVudCA9IGkyY19uZXdfZHVtbXkoY2xpZW50LT5hZGFwdGVyLAorCQkJCQl0d2wtPmFkZHJlc3MpOworCQkJaWYgKCF0d2wtPmNsaWVudCkgeworCQkJCWRldl9lcnIoJnR3bC0+Y2xpZW50LT5kZXYsCisJCQkJCSJjYW4ndCBhdHRhY2ggY2xpZW50ICVkXG4iLCBpKTsKKwkJCQlzdGF0dXMgPSAtRU5PTUVNOworCQkJCWdvdG8gZmFpbDsKKwkJCX0KKwkJCXN0cmxjcHkodHdsLT5jbGllbnQtPm5hbWUsIGlkLT5uYW1lLAorCQkJCQlzaXplb2YodHdsLT5jbGllbnQtPm5hbWUpKTsKKwkJfQorCQltdXRleF9pbml0KCZ0d2wtPnhmZXJfbG9jayk7CisJfQorCWludXNlID0gdHJ1ZTsKKworCS8qIHNldHVwIGNsb2NrIGZyYW1ld29yayAqLworCWNsb2Nrc19pbml0KCk7CisKKwkvKiBNYXliZSBpbml0IHRoZSBUMiBJbnRlcnJ1cHQgc3Vic3lzdGVtICovCisJaWYgKGNsaWVudC0+aXJxCisJCQkmJiBwZGF0YS0+aXJxX2Jhc2UKKwkJCSYmIHBkYXRhLT5pcnFfZW5kID4gcGRhdGEtPmlycV9iYXNlKSB7CisJCXR3bF9pbml0X2lycShjbGllbnQtPmlycSwgcGRhdGEtPmlycV9iYXNlLCBwZGF0YS0+aXJxX2VuZCk7CisJCWRldl9pbmZvKCZjbGllbnQtPmRldiwgIklSUSAlZCBjaGFpbnMgSVJRcyAlZC4uJWRcbiIsCisJCQkJY2xpZW50LT5pcnEsIHBkYXRhLT5pcnFfYmFzZSwgcGRhdGEtPmlycV9lbmQgLSAxKTsKKwl9CisKKwlzdGF0dXMgPSBhZGRfY2hpbGRyZW4ocGRhdGEpOworZmFpbDoKKwlpZiAoc3RhdHVzIDwgMCkKKwkJdHdsNDAzMF9yZW1vdmUoY2xpZW50KTsKKwlyZXR1cm4gc3RhdHVzOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgdHdsNDAzMF9pZHNbXSA9IHsKKwl7ICJ0d2w0MDMwIiwgMCB9LAkvKiAiVHJpdG9uIDIiICovCisJeyAidHBzNjU5NTAiLCAwIH0sCS8qIGNhdGFsb2cgdmVyc2lvbiBvZiB0d2w0MDMwICovCisJeyAidHBzNjU5MzAiLCAwIH0sCS8qIGZld2VyIExET3MgYW5kIERBQ3M7IG5vIGNoYXJnZXIgKi8KKwl7ICJ0cHM2NTkyMCIsIDAgfSwJLyogZmV3ZXIgTERPczsgbm8gY29kZWMgb3IgY2hhcmdlciAqLworCXsgInR3bDUwMzAiLCAwIH0sCS8qIFQyIHVwZGF0ZWQgKi8KKwl7IC8qIGVuZCBvZiBsaXN0ICovIH0sCit9OworTU9EVUxFX0RFVklDRV9UQUJMRShpMmMsIHR3bDQwMzBfaWRzKTsKKworLyogT25lIENsaWVudCBEcml2ZXIgLCA0IENsaWVudHMgKi8KK3N0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciB0d2w0MDMwX2RyaXZlciA9IHsKKwkuZHJpdmVyLm5hbWUJPSBEUklWRVJfTkFNRSwKKwkuaWRfdGFibGUJPSB0d2w0MDMwX2lkcywKKwkucHJvYmUJCT0gdHdsNDAzMF9wcm9iZSwKKwkucmVtb3ZlCQk9IHR3bDQwMzBfcmVtb3ZlLAorfTsKKworc3RhdGljIGludCBfX2luaXQgdHdsNDAzMF9pbml0KHZvaWQpCit7CisJcmV0dXJuIGkyY19hZGRfZHJpdmVyKCZ0d2w0MDMwX2RyaXZlcik7Cit9CitzdWJzeXNfaW5pdGNhbGwodHdsNDAzMF9pbml0KTsKKworc3RhdGljIHZvaWQgX19leGl0IHR3bDQwMzBfZXhpdCh2b2lkKQoreworCWkyY19kZWxfZHJpdmVyKCZ0d2w0MDMwX2RyaXZlcik7Cit9Cittb2R1bGVfZXhpdCh0d2w0MDMwX2V4aXQpOworCitNT0RVTEVfQVVUSE9SKCJUZXhhcyBJbnN0cnVtZW50cywgSW5jLiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJJMkMgQ29yZSBpbnRlcmZhY2UgZm9yIFRXTDQwMzAiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWZkL3dtODM1MC1jb3JlLmMgYi9kcml2ZXJzL21mZC93bTgzNTAtY29yZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJmODdmNjcKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21mZC93bTgzNTAtY29yZS5jCkBAIC0wLDAgKzEsMTI3MyBAQAorLyoKKyAqIHdtODM1MC1jb3JlLmMgIC0tICBEZXZpY2UgYWNjZXNzIGZvciBXb2xmc29uIFdNODM1MAorICoKKyAqIENvcHlyaWdodCAyMDA3LCAyMDA4IFdvbGZzb24gTWljcm9lbGVjdHJvbmljcyBQTEMuCisgKgorICogQXV0aG9yOiBMaWFtIEdpcmR3b29kLCBNYXJrIEJyb3duCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAorICogIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgorICogIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvYnVnLmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KKworI2luY2x1ZGUgPGxpbnV4L21mZC93bTgzNTAvY29yZS5oPgorI2luY2x1ZGUgPGxpbnV4L21mZC93bTgzNTAvYXVkaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9tZmQvd204MzUwL2NvbXBhcmF0b3IuaD4KKyNpbmNsdWRlIDxsaW51eC9tZmQvd204MzUwL2dwaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9tZmQvd204MzUwL3BtaWMuaD4KKyNpbmNsdWRlIDxsaW51eC9tZmQvd204MzUwL3J0Yy5oPgorI2luY2x1ZGUgPGxpbnV4L21mZC93bTgzNTAvc3VwcGx5Lmg+CisjaW5jbHVkZSA8bGludXgvbWZkL3dtODM1MC93ZHQuaD4KKworI2RlZmluZSBXTTgzNTBfVU5MT0NLX0tFWQkJMHgwMDEzCisjZGVmaW5lIFdNODM1MF9MT0NLX0tFWQkJCTB4MDAwMAorCisjZGVmaW5lIFdNODM1MF9DTE9DS19DT05UUk9MXzEJCTB4MjgKKyNkZWZpbmUgV004MzUwX0FJRl9URVNUCQkJMHg3NAorCisvKiBkZWJ1ZyAqLworI2RlZmluZSBXTTgzNTBfQlVTX0RFQlVHIDAKKyNpZiBXTTgzNTBfQlVTX0RFQlVHCisjZGVmaW5lIGR1bXAocmVncywgc3JjKSBkbyB7IFwKKwlpbnQgaV87IFwKKwl1MTYgKnNyY18gPSBzcmM7IFwKKwlwcmludGsoS0VSTl9ERUJVRyk7IFwKKwlmb3IgKGlfID0gMDsgaV8gPCByZWdzOyBpXysrKSBcCisJCXByaW50aygiIDB4JTQuNHgiLCAqc3JjXysrKTsgXAorCXByaW50aygiXG4iKTsgXAorfSB3aGlsZSAoMCk7CisjZWxzZQorI2RlZmluZSBkdW1wKGJ5dGVzLCBzcmMpCisjZW5kaWYKKworI2RlZmluZSBXTTgzNTBfTE9DS19ERUJVRyAwCisjaWYgV004MzUwX0xPQ0tfREVCVUcKKyNkZWZpbmUgbGRiZyhmb3JtYXQsIGFyZy4uLikgcHJpbnRrKGZvcm1hdCwgIyMgYXJnKQorI2Vsc2UKKyNkZWZpbmUgbGRiZyhmb3JtYXQsIGFyZy4uLikKKyNlbmRpZgorCisvKgorICogV004MzUwIERldmljZSBJTworICovCitzdGF0aWMgREVGSU5FX01VVEVYKGlvX211dGV4KTsKK3N0YXRpYyBERUZJTkVfTVVURVgocmVnX2xvY2tfbXV0ZXgpOworc3RhdGljIERFRklORV9NVVRFWChhdXhhZGNfbXV0ZXgpOworCisvKiBQZXJmb3JtIGEgcGh5c2ljYWwgcmVhZCBmcm9tIHRoZSBkZXZpY2UuCisgKi8KK3N0YXRpYyBpbnQgd204MzUwX3BoeXNfcmVhZChzdHJ1Y3Qgd204MzUwICp3bTgzNTAsIHU4IHJlZywgaW50IG51bV9yZWdzLAorCQkJICAgIHUxNiAqZGVzdCkKK3sKKwlpbnQgaSwgcmV0OworCWludCBieXRlcyA9IG51bV9yZWdzICogMjsKKworCWRldl9kYmcod204MzUwLT5kZXYsICJ2b2xhdGlsZSByZWFkXG4iKTsKKwlyZXQgPSB3bTgzNTAtPnJlYWRfZGV2KHdtODM1MCwgcmVnLCBieXRlcywgKGNoYXIgKilkZXN0KTsKKworCWZvciAoaSA9IHJlZzsgaSA8IHJlZyArIG51bV9yZWdzOyBpKyspIHsKKwkJLyogQ2FjaGUgaXMgQ1BVIGVuZGlhbiAqLworCQlkZXN0W2kgLSByZWddID0gYmUxNl90b19jcHUoZGVzdFtpIC0gcmVnXSk7CisKKwkJLyogU2F0aXNmeSBub24tdm9sYXRpbGUgYml0cyBmcm9tIGNhY2hlICovCisJCWRlc3RbaSAtIHJlZ10gJj0gd204MzUwX3JlZ19pb19tYXBbaV0udm9sOworCQlkZXN0W2kgLSByZWddIHw9IHdtODM1MC0+cmVnX2NhY2hlW2ldOworCisJCS8qIE1hc2sgb3V0IG5vbi1yZWFkYWJsZSBiaXRzICovCisJCWRlc3RbaSAtIHJlZ10gJj0gd204MzUwX3JlZ19pb19tYXBbaV0ucmVhZGFibGU7CisJfQorCisJZHVtcChudW1fcmVncywgZGVzdCk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHdtODM1MF9yZWFkKHN0cnVjdCB3bTgzNTAgKndtODM1MCwgdTggcmVnLCBpbnQgbnVtX3JlZ3MsIHUxNiAqZGVzdCkKK3sKKwlpbnQgaTsKKwlpbnQgZW5kID0gcmVnICsgbnVtX3JlZ3M7CisJaW50IHJldCA9IDA7CisJaW50IGJ5dGVzID0gbnVtX3JlZ3MgKiAyOworCisJaWYgKHdtODM1MC0+cmVhZF9kZXYgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlpZiAoKHJlZyArIG51bV9yZWdzIC0gMSkgPiBXTTgzNTBfTUFYX1JFR0lTVEVSKSB7CisJCWRldl9lcnIod204MzUwLT5kZXYsICJpbnZhbGlkIHJlZyAleFxuIiwKKwkJCXJlZyArIG51bV9yZWdzIC0gMSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWRldl9kYmcod204MzUwLT5kZXYsCisJCSIlcyBSJWQoMHglMi4yeCkgJWQgcmVnc1xuIiwgX19mdW5jX18sIHJlZywgcmVnLCBudW1fcmVncyk7CisKKyNpZiBXTTgzNTBfQlVTX0RFQlVHCisJLyogd2UgY2FuIF9zYWZlbHlfIHJlYWQgYW55IHJlZ2lzdGVyLCBidXQgd2FybiBpZiByZWFkIG5vdCBzdXBwb3J0ZWQgKi8KKwlmb3IgKGkgPSByZWc7IGkgPCBlbmQ7IGkrKykgeworCQlpZiAoIXdtODM1MF9yZWdfaW9fbWFwW2ldLnJlYWRhYmxlKQorCQkJZGV2X3dhcm4od204MzUwLT5kZXYsCisJCQkJInJlZyBSJWQgaXMgbm90IHJlYWRhYmxlXG4iLCBpKTsKKwl9CisjZW5kaWYKKworCS8qIGlmIGFueSB2b2xhdGlsZSByZWdpc3RlcnMgYXJlIHJlcXVpcmVkLCB0aGVuIHJlYWQgYmFjayBhbGwgKi8KKwlmb3IgKGkgPSByZWc7IGkgPCBlbmQ7IGkrKykKKwkJaWYgKHdtODM1MF9yZWdfaW9fbWFwW2ldLnZvbCkKKwkJCXJldHVybiB3bTgzNTBfcGh5c19yZWFkKHdtODM1MCwgcmVnLCBudW1fcmVncywgZGVzdCk7CisKKwkvKiBubyB2b2xhdGlsZXMsIHRoZW4gY2FjaGUgaXMgZ29vZCAqLworCWRldl9kYmcod204MzUwLT5kZXYsICJjYWNoZSByZWFkXG4iKTsKKwltZW1jcHkoZGVzdCwgJndtODM1MC0+cmVnX2NhY2hlW3JlZ10sIGJ5dGVzKTsKKwlkdW1wKG51bV9yZWdzLCBkZXN0KTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW5saW5lIGludCBpc19yZWdfbG9ja2VkKHN0cnVjdCB3bTgzNTAgKndtODM1MCwgdTggcmVnKQoreworCWlmIChyZWcgPT0gV004MzUwX1NFQ1VSSVRZIHx8CisJICAgIHdtODM1MC0+cmVnX2NhY2hlW1dNODM1MF9TRUNVUklUWV0gPT0gV004MzUwX1VOTE9DS19LRVkpCisJCXJldHVybiAwOworCisJaWYgKChyZWcgPT0gV004MzUwX0dQSU9fQ09ORklHVVJBVElPTl9JX08pIHx8CisJICAgIChyZWcgPj0gV004MzUwX0dQSU9fRlVOQ1RJT05fU0VMRUNUXzEgJiYKKwkgICAgIHJlZyA8PSBXTTgzNTBfR1BJT19GVU5DVElPTl9TRUxFQ1RfNCkgfHwKKwkgICAgKHJlZyA+PSBXTTgzNTBfQkFUVEVSWV9DSEFSR0VSX0NPTlRST0xfMSAmJgorCSAgICAgcmVnIDw9IFdNODM1MF9CQVRURVJZX0NIQVJHRVJfQ09OVFJPTF8zKSkKKwkJcmV0dXJuIDE7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgd204MzUwX3dyaXRlKHN0cnVjdCB3bTgzNTAgKndtODM1MCwgdTggcmVnLCBpbnQgbnVtX3JlZ3MsIHUxNiAqc3JjKQoreworCWludCBpOworCWludCBlbmQgPSByZWcgKyBudW1fcmVnczsKKwlpbnQgYnl0ZXMgPSBudW1fcmVncyAqIDI7CisKKwlpZiAod204MzUwLT53cml0ZV9kZXYgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlpZiAoKHJlZyArIG51bV9yZWdzIC0gMSkgPiBXTTgzNTBfTUFYX1JFR0lTVEVSKSB7CisJCWRldl9lcnIod204MzUwLT5kZXYsICJpbnZhbGlkIHJlZyAleFxuIiwKKwkJCXJlZyArIG51bV9yZWdzIC0gMSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qIGl0J3MgZ2VuZXJhbGx5IG5vdCBhIGdvb2QgaWRlYSB0byB3cml0ZSB0byBSTyBvciBsb2NrZWQgcmVnaXN0ZXJzICovCisJZm9yIChpID0gcmVnOyBpIDwgZW5kOyBpKyspIHsKKwkJaWYgKCF3bTgzNTBfcmVnX2lvX21hcFtpXS53cml0YWJsZSkgeworCQkJZGV2X2Vycih3bTgzNTAtPmRldiwKKwkJCQkiYXR0ZW1wdGVkIHdyaXRlIHRvIHJlYWQgb25seSByZWcgUiVkXG4iLCBpKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisKKwkJaWYgKGlzX3JlZ19sb2NrZWQod204MzUwLCBpKSkgeworCQkJZGV2X2Vycih3bTgzNTAtPmRldiwKKwkJCSAgICAgICAiYXR0ZW1wdGVkIHdyaXRlIHRvIGxvY2tlZCByZWcgUiVkXG4iLCBpKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisKKwkJc3JjW2kgLSByZWddICY9IHdtODM1MF9yZWdfaW9fbWFwW2ldLndyaXRhYmxlOworCisJCXdtODM1MC0+cmVnX2NhY2hlW2ldID0KKwkJCSh3bTgzNTAtPnJlZ19jYWNoZVtpXSAmIH53bTgzNTBfcmVnX2lvX21hcFtpXS53cml0YWJsZSkKKwkJCXwgc3JjW2kgLSByZWddOworCisJCXNyY1tpIC0gcmVnXSA9IGNwdV90b19iZTE2KHNyY1tpIC0gcmVnXSk7CisJfQorCisJLyogQWN0dWFsbHkgd3JpdGUgaXQgb3V0ICovCisJcmV0dXJuIHdtODM1MC0+d3JpdGVfZGV2KHdtODM1MCwgcmVnLCBieXRlcywgKGNoYXIgKilzcmMpOworfQorCisvKgorICogU2FmZSByZWFkLCBtb2RpZnksIHdyaXRlIG1ldGhvZHMKKyAqLworaW50IHdtODM1MF9jbGVhcl9iaXRzKHN0cnVjdCB3bTgzNTAgKndtODM1MCwgdTE2IHJlZywgdTE2IG1hc2spCit7CisJdTE2IGRhdGE7CisJaW50IGVycjsKKworCW11dGV4X2xvY2soJmlvX211dGV4KTsKKwllcnIgPSB3bTgzNTBfcmVhZCh3bTgzNTAsIHJlZywgMSwgJmRhdGEpOworCWlmIChlcnIpIHsKKwkJZGV2X2Vycih3bTgzNTAtPmRldiwgInJlYWQgZnJvbSByZWcgUiVkIGZhaWxlZFxuIiwgcmVnKTsKKwkJZ290byBvdXQ7CisJfQorCisJZGF0YSAmPSB+bWFzazsKKwllcnIgPSB3bTgzNTBfd3JpdGUod204MzUwLCByZWcsIDEsICZkYXRhKTsKKwlpZiAoZXJyKQorCQlkZXZfZXJyKHdtODM1MC0+ZGV2LCAid3JpdGUgdG8gcmVnIFIlZCBmYWlsZWRcbiIsIHJlZyk7CitvdXQ6CisJbXV0ZXhfdW5sb2NrKCZpb19tdXRleCk7CisJcmV0dXJuIGVycjsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHdtODM1MF9jbGVhcl9iaXRzKTsKKworaW50IHdtODM1MF9zZXRfYml0cyhzdHJ1Y3Qgd204MzUwICp3bTgzNTAsIHUxNiByZWcsIHUxNiBtYXNrKQoreworCXUxNiBkYXRhOworCWludCBlcnI7CisKKwltdXRleF9sb2NrKCZpb19tdXRleCk7CisJZXJyID0gd204MzUwX3JlYWQod204MzUwLCByZWcsIDEsICZkYXRhKTsKKwlpZiAoZXJyKSB7CisJCWRldl9lcnIod204MzUwLT5kZXYsICJyZWFkIGZyb20gcmVnIFIlZCBmYWlsZWRcbiIsIHJlZyk7CisJCWdvdG8gb3V0OworCX0KKworCWRhdGEgfD0gbWFzazsKKwllcnIgPSB3bTgzNTBfd3JpdGUod204MzUwLCByZWcsIDEsICZkYXRhKTsKKwlpZiAoZXJyKQorCQlkZXZfZXJyKHdtODM1MC0+ZGV2LCAid3JpdGUgdG8gcmVnIFIlZCBmYWlsZWRcbiIsIHJlZyk7CitvdXQ6CisJbXV0ZXhfdW5sb2NrKCZpb19tdXRleCk7CisJcmV0dXJuIGVycjsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHdtODM1MF9zZXRfYml0cyk7CisKK3UxNiB3bTgzNTBfcmVnX3JlYWQoc3RydWN0IHdtODM1MCAqd204MzUwLCBpbnQgcmVnKQoreworCXUxNiBkYXRhOworCWludCBlcnI7CisKKwltdXRleF9sb2NrKCZpb19tdXRleCk7CisJZXJyID0gd204MzUwX3JlYWQod204MzUwLCByZWcsIDEsICZkYXRhKTsKKwlpZiAoZXJyKQorCQlkZXZfZXJyKHdtODM1MC0+ZGV2LCAicmVhZCBmcm9tIHJlZyBSJWQgZmFpbGVkXG4iLCByZWcpOworCisJbXV0ZXhfdW5sb2NrKCZpb19tdXRleCk7CisJcmV0dXJuIGRhdGE7Cit9CitFWFBPUlRfU1lNQk9MX0dQTCh3bTgzNTBfcmVnX3JlYWQpOworCitpbnQgd204MzUwX3JlZ193cml0ZShzdHJ1Y3Qgd204MzUwICp3bTgzNTAsIGludCByZWcsIHUxNiB2YWwpCit7CisJaW50IHJldDsKKwl1MTYgZGF0YSA9IHZhbDsKKworCW11dGV4X2xvY2soJmlvX211dGV4KTsKKwlyZXQgPSB3bTgzNTBfd3JpdGUod204MzUwLCByZWcsIDEsICZkYXRhKTsKKwlpZiAocmV0KQorCQlkZXZfZXJyKHdtODM1MC0+ZGV2LCAid3JpdGUgdG8gcmVnIFIlZCBmYWlsZWRcbiIsIHJlZyk7CisJbXV0ZXhfdW5sb2NrKCZpb19tdXRleCk7CisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHdtODM1MF9yZWdfd3JpdGUpOworCitpbnQgd204MzUwX2Jsb2NrX3JlYWQoc3RydWN0IHdtODM1MCAqd204MzUwLCBpbnQgc3RhcnRfcmVnLCBpbnQgcmVncywKKwkJICAgICAgdTE2ICpkZXN0KQoreworCWludCBlcnIgPSAwOworCisJbXV0ZXhfbG9jaygmaW9fbXV0ZXgpOworCWVyciA9IHdtODM1MF9yZWFkKHdtODM1MCwgc3RhcnRfcmVnLCByZWdzLCBkZXN0KTsKKwlpZiAoZXJyKQorCQlkZXZfZXJyKHdtODM1MC0+ZGV2LCAiYmxvY2sgcmVhZCBzdGFydGluZyBmcm9tIFIlZCBmYWlsZWRcbiIsCisJCQlzdGFydF9yZWcpOworCW11dGV4X3VubG9jaygmaW9fbXV0ZXgpOworCXJldHVybiBlcnI7Cit9CitFWFBPUlRfU1lNQk9MX0dQTCh3bTgzNTBfYmxvY2tfcmVhZCk7CisKK2ludCB3bTgzNTBfYmxvY2tfd3JpdGUoc3RydWN0IHdtODM1MCAqd204MzUwLCBpbnQgc3RhcnRfcmVnLCBpbnQgcmVncywKKwkJICAgICAgIHUxNiAqc3JjKQoreworCWludCByZXQgPSAwOworCisJbXV0ZXhfbG9jaygmaW9fbXV0ZXgpOworCXJldCA9IHdtODM1MF93cml0ZSh3bTgzNTAsIHN0YXJ0X3JlZywgcmVncywgc3JjKTsKKwlpZiAocmV0KQorCQlkZXZfZXJyKHdtODM1MC0+ZGV2LCAiYmxvY2sgd3JpdGUgc3RhcnRpbmcgYXQgUiVkIGZhaWxlZFxuIiwKKwkJCXN0YXJ0X3JlZyk7CisJbXV0ZXhfdW5sb2NrKCZpb19tdXRleCk7CisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHdtODM1MF9ibG9ja193cml0ZSk7CisKK2ludCB3bTgzNTBfcmVnX2xvY2soc3RydWN0IHdtODM1MCAqd204MzUwKQoreworCXUxNiBrZXkgPSBXTTgzNTBfTE9DS19LRVk7CisJaW50IHJldDsKKworCWxkYmcoX19mdW5jX18pOworCW11dGV4X2xvY2soJmlvX211dGV4KTsKKwlyZXQgPSB3bTgzNTBfd3JpdGUod204MzUwLCBXTTgzNTBfU0VDVVJJVFksIDEsICZrZXkpOworCWlmIChyZXQpCisJCWRldl9lcnIod204MzUwLT5kZXYsICJsb2NrIGZhaWxlZFxuIik7CisJbXV0ZXhfdW5sb2NrKCZpb19tdXRleCk7CisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHdtODM1MF9yZWdfbG9jayk7CisKK2ludCB3bTgzNTBfcmVnX3VubG9jayhzdHJ1Y3Qgd204MzUwICp3bTgzNTApCit7CisJdTE2IGtleSA9IFdNODM1MF9VTkxPQ0tfS0VZOworCWludCByZXQ7CisKKwlsZGJnKF9fZnVuY19fKTsKKwltdXRleF9sb2NrKCZpb19tdXRleCk7CisJcmV0ID0gd204MzUwX3dyaXRlKHdtODM1MCwgV004MzUwX1NFQ1VSSVRZLCAxLCAma2V5KTsKKwlpZiAocmV0KQorCQlkZXZfZXJyKHdtODM1MC0+ZGV2LCAidW5sb2NrIGZhaWxlZFxuIik7CisJbXV0ZXhfdW5sb2NrKCZpb19tdXRleCk7CisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHdtODM1MF9yZWdfdW5sb2NrKTsKKworc3RhdGljIHZvaWQgd204MzUwX2lycV9jYWxsX2hhbmRsZXIoc3RydWN0IHdtODM1MCAqd204MzUwLCBpbnQgaXJxKQoreworCW11dGV4X2xvY2soJndtODM1MC0+aXJxX211dGV4KTsKKworCWlmICh3bTgzNTAtPmlycVtpcnFdLmhhbmRsZXIpCisJCXdtODM1MC0+aXJxW2lycV0uaGFuZGxlcih3bTgzNTAsIGlycSwgd204MzUwLT5pcnFbaXJxXS5kYXRhKTsKKwllbHNlIHsKKwkJZGV2X2Vycih3bTgzNTAtPmRldiwgImlycSAlZCBub2JvZHkgY2FyZWQuIG5vdyBtYXNrZWQuXG4iLAorCQkJaXJxKTsKKwkJd204MzUwX21hc2tfaXJxKHdtODM1MCwgaXJxKTsKKwl9CisKKwltdXRleF91bmxvY2soJndtODM1MC0+aXJxX211dGV4KTsKK30KKworLyoKKyAqIHdtODM1MF9pcnFfd29ya2VyIGFjdHVhbGx5IGhhbmRsZXMgdGhlIGludGVycnVwdHMuICBTaW5jZSBhbGwKKyAqIGludGVycnVwdHMgYXJlIGNsZWFyIG9uIHJlYWQgdGhlIElSUSBsaW5lIHdpbGwgYmUgcmVhc3NlcnRlZCBhbmQKKyAqIHRoZSBwaHlzaWNhbCBJUlEgd2lsbCBiZSBoYW5kbGVkIGFnYWluIGlmIGFub3RoZXIgaW50ZXJydXB0IGlzCisgKiBhc3NlcnRlZCB3aGlsZSB3ZSBydW4gLSBpbiB0aGUgbm9ybWFsIGNvdXJzZSBvZiBldmVudHMgdGhpcyBpcyBhCisgKiByYXJlIG9jY3VycmVuY2Ugc28gd2Ugc2F2ZSBJMkMvU1BJIHJlYWRzLgorICovCitzdGF0aWMgdm9pZCB3bTgzNTBfaXJxX3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IHdtODM1MCAqd204MzUwID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCB3bTgzNTAsIGlycV93b3JrKTsKKwl1MTYgbGV2ZWxfb25lLCBzdGF0dXMxLCBzdGF0dXMyLCBjb21wOworCisJLyogVE9ETzogVXNlIGJsb2NrIHJlYWRzIHRvIGltcHJvdmUgcGVyZm9ybWFuY2U/ICovCisJbGV2ZWxfb25lID0gd204MzUwX3JlZ19yZWFkKHdtODM1MCwgV004MzUwX1NZU1RFTV9JTlRFUlJVUFRTKQorCQkmIH53bTgzNTBfcmVnX3JlYWQod204MzUwLCBXTTgzNTBfU1lTVEVNX0lOVEVSUlVQVFNfTUFTSyk7CisJc3RhdHVzMSA9IHdtODM1MF9yZWdfcmVhZCh3bTgzNTAsIFdNODM1MF9JTlRfU1RBVFVTXzEpCisJCSYgfndtODM1MF9yZWdfcmVhZCh3bTgzNTAsIFdNODM1MF9JTlRfU1RBVFVTXzFfTUFTSyk7CisJc3RhdHVzMiA9IHdtODM1MF9yZWdfcmVhZCh3bTgzNTAsIFdNODM1MF9JTlRfU1RBVFVTXzIpCisJCSYgfndtODM1MF9yZWdfcmVhZCh3bTgzNTAsIFdNODM1MF9JTlRfU1RBVFVTXzJfTUFTSyk7CisJY29tcCA9IHdtODM1MF9yZWdfcmVhZCh3bTgzNTAsIFdNODM1MF9DT01QQVJBVE9SX0lOVF9TVEFUVVMpCisJCSYgfndtODM1MF9yZWdfcmVhZCh3bTgzNTAsIFdNODM1MF9DT01QQVJBVE9SX0lOVF9TVEFUVVNfTUFTSyk7CisKKwkvKiBvdmVyIGN1cnJlbnQgKi8KKwlpZiAobGV2ZWxfb25lICYgV004MzUwX09DX0lOVCkgeworCQl1MTYgb2M7CisKKwkJb2MgPSB3bTgzNTBfcmVnX3JlYWQod204MzUwLCBXTTgzNTBfT1ZFUl9DVVJSRU5UX0lOVF9TVEFUVVMpOworCQlvYyAmPSB+d204MzUwX3JlZ19yZWFkKHdtODM1MCwKKwkJCQkgICAgICAgV004MzUwX09WRVJfQ1VSUkVOVF9JTlRfU1RBVFVTX01BU0spOworCisJCWlmIChvYyAmIFdNODM1MF9PQ19MU19FSU5UKQkvKiBsaW1pdCBzd2l0Y2ggKi8KKwkJCXdtODM1MF9pcnFfY2FsbF9oYW5kbGVyKHdtODM1MCwgV004MzUwX0lSUV9PQ19MUyk7CisJfQorCisJLyogdW5kZXIgdm9sdGFnZSAqLworCWlmIChsZXZlbF9vbmUgJiBXTTgzNTBfVVZfSU5UKSB7CisJCXUxNiB1djsKKworCQl1diA9IHdtODM1MF9yZWdfcmVhZCh3bTgzNTAsIFdNODM1MF9VTkRFUl9WT0xUQUdFX0lOVF9TVEFUVVMpOworCQl1diAmPSB+d204MzUwX3JlZ19yZWFkKHdtODM1MCwKKwkJCQkgICAgICAgV004MzUwX1VOREVSX1ZPTFRBR0VfSU5UX1NUQVRVU19NQVNLKTsKKworCQlpZiAodXYgJiBXTTgzNTBfVVZfREMxX0VJTlQpCisJCQl3bTgzNTBfaXJxX2NhbGxfaGFuZGxlcih3bTgzNTAsIFdNODM1MF9JUlFfVVZfREMxKTsKKwkJaWYgKHV2ICYgV004MzUwX1VWX0RDMl9FSU5UKQorCQkJd204MzUwX2lycV9jYWxsX2hhbmRsZXIod204MzUwLCBXTTgzNTBfSVJRX1VWX0RDMik7CisJCWlmICh1diAmIFdNODM1MF9VVl9EQzNfRUlOVCkKKwkJCXdtODM1MF9pcnFfY2FsbF9oYW5kbGVyKHdtODM1MCwgV004MzUwX0lSUV9VVl9EQzMpOworCQlpZiAodXYgJiBXTTgzNTBfVVZfREM0X0VJTlQpCisJCQl3bTgzNTBfaXJxX2NhbGxfaGFuZGxlcih3bTgzNTAsIFdNODM1MF9JUlFfVVZfREM0KTsKKwkJaWYgKHV2ICYgV004MzUwX1VWX0RDNV9FSU5UKQorCQkJd204MzUwX2lycV9jYWxsX2hhbmRsZXIod204MzUwLCBXTTgzNTBfSVJRX1VWX0RDNSk7CisJCWlmICh1diAmIFdNODM1MF9VVl9EQzZfRUlOVCkKKwkJCXdtODM1MF9pcnFfY2FsbF9oYW5kbGVyKHdtODM1MCwgV004MzUwX0lSUV9VVl9EQzYpOworCQlpZiAodXYgJiBXTTgzNTBfVVZfTERPMV9FSU5UKQorCQkJd204MzUwX2lycV9jYWxsX2hhbmRsZXIod204MzUwLCBXTTgzNTBfSVJRX1VWX0xETzEpOworCQlpZiAodXYgJiBXTTgzNTBfVVZfTERPMl9FSU5UKQorCQkJd204MzUwX2lycV9jYWxsX2hhbmRsZXIod204MzUwLCBXTTgzNTBfSVJRX1VWX0xETzIpOworCQlpZiAodXYgJiBXTTgzNTBfVVZfTERPM19FSU5UKQorCQkJd204MzUwX2lycV9jYWxsX2hhbmRsZXIod204MzUwLCBXTTgzNTBfSVJRX1VWX0xETzMpOworCQlpZiAodXYgJiBXTTgzNTBfVVZfTERPNF9FSU5UKQorCQkJd204MzUwX2lycV9jYWxsX2hhbmRsZXIod204MzUwLCBXTTgzNTBfSVJRX1VWX0xETzQpOworCX0KKworCS8qIGNoYXJnZXIsIFJUQyAqLworCWlmIChzdGF0dXMxKSB7CisJCWlmIChzdGF0dXMxICYgV004MzUwX0NIR19CQVRfSE9UX0VJTlQpCisJCQl3bTgzNTBfaXJxX2NhbGxfaGFuZGxlcih3bTgzNTAsCisJCQkJCQlXTTgzNTBfSVJRX0NIR19CQVRfSE9UKTsKKwkJaWYgKHN0YXR1czEgJiBXTTgzNTBfQ0hHX0JBVF9DT0xEX0VJTlQpCisJCQl3bTgzNTBfaXJxX2NhbGxfaGFuZGxlcih3bTgzNTAsCisJCQkJCQlXTTgzNTBfSVJRX0NIR19CQVRfQ09MRCk7CisJCWlmIChzdGF0dXMxICYgV004MzUwX0NIR19CQVRfRkFJTF9FSU5UKQorCQkJd204MzUwX2lycV9jYWxsX2hhbmRsZXIod204MzUwLAorCQkJCQkJV004MzUwX0lSUV9DSEdfQkFUX0ZBSUwpOworCQlpZiAoc3RhdHVzMSAmIFdNODM1MF9DSEdfVE9fRUlOVCkKKwkJCXdtODM1MF9pcnFfY2FsbF9oYW5kbGVyKHdtODM1MCwgV004MzUwX0lSUV9DSEdfVE8pOworCQlpZiAoc3RhdHVzMSAmIFdNODM1MF9DSEdfRU5EX0VJTlQpCisJCQl3bTgzNTBfaXJxX2NhbGxfaGFuZGxlcih3bTgzNTAsIFdNODM1MF9JUlFfQ0hHX0VORCk7CisJCWlmIChzdGF0dXMxICYgV004MzUwX0NIR19TVEFSVF9FSU5UKQorCQkJd204MzUwX2lycV9jYWxsX2hhbmRsZXIod204MzUwLCBXTTgzNTBfSVJRX0NIR19TVEFSVCk7CisJCWlmIChzdGF0dXMxICYgV004MzUwX0NIR19GQVNUX1JEWV9FSU5UKQorCQkJd204MzUwX2lycV9jYWxsX2hhbmRsZXIod204MzUwLAorCQkJCQkJV004MzUwX0lSUV9DSEdfRkFTVF9SRFkpOworCQlpZiAoc3RhdHVzMSAmIFdNODM1MF9DSEdfVkJBVFRfTFRfM1A5X0VJTlQpCisJCQl3bTgzNTBfaXJxX2NhbGxfaGFuZGxlcih3bTgzNTAsCisJCQkJCQlXTTgzNTBfSVJRX0NIR19WQkFUVF9MVF8zUDkpOworCQlpZiAoc3RhdHVzMSAmIFdNODM1MF9DSEdfVkJBVFRfTFRfM1AxX0VJTlQpCisJCQl3bTgzNTBfaXJxX2NhbGxfaGFuZGxlcih3bTgzNTAsCisJCQkJCQlXTTgzNTBfSVJRX0NIR19WQkFUVF9MVF8zUDEpOworCQlpZiAoc3RhdHVzMSAmIFdNODM1MF9DSEdfVkJBVFRfTFRfMlA4NV9FSU5UKQorCQkJd204MzUwX2lycV9jYWxsX2hhbmRsZXIod204MzUwLAorCQkJCQkJV004MzUwX0lSUV9DSEdfVkJBVFRfTFRfMlA4NSk7CisJCWlmIChzdGF0dXMxICYgV004MzUwX1JUQ19BTE1fRUlOVCkKKwkJCXdtODM1MF9pcnFfY2FsbF9oYW5kbGVyKHdtODM1MCwgV004MzUwX0lSUV9SVENfQUxNKTsKKwkJaWYgKHN0YXR1czEgJiBXTTgzNTBfUlRDX1NFQ19FSU5UKQorCQkJd204MzUwX2lycV9jYWxsX2hhbmRsZXIod204MzUwLCBXTTgzNTBfSVJRX1JUQ19TRUMpOworCQlpZiAoc3RhdHVzMSAmIFdNODM1MF9SVENfUEVSX0VJTlQpCisJCQl3bTgzNTBfaXJxX2NhbGxfaGFuZGxlcih3bTgzNTAsIFdNODM1MF9JUlFfUlRDX1BFUik7CisJfQorCisJLyogY3VycmVudCBzaW5rLCBzeXN0ZW0sIGF1eCBhZGMgKi8KKwlpZiAoc3RhdHVzMikgeworCQlpZiAoc3RhdHVzMiAmIFdNODM1MF9DUzFfRUlOVCkKKwkJCXdtODM1MF9pcnFfY2FsbF9oYW5kbGVyKHdtODM1MCwgV004MzUwX0lSUV9DUzEpOworCQlpZiAoc3RhdHVzMiAmIFdNODM1MF9DUzJfRUlOVCkKKwkJCXdtODM1MF9pcnFfY2FsbF9oYW5kbGVyKHdtODM1MCwgV004MzUwX0lSUV9DUzIpOworCisJCWlmIChzdGF0dXMyICYgV004MzUwX1NZU19IWVNUX0NPTVBfRkFJTF9FSU5UKQorCQkJd204MzUwX2lycV9jYWxsX2hhbmRsZXIod204MzUwLAorCQkJCQkJV004MzUwX0lSUV9TWVNfSFlTVF9DT01QX0ZBSUwpOworCQlpZiAoc3RhdHVzMiAmIFdNODM1MF9TWVNfQ0hJUF9HVDExNV9FSU5UKQorCQkJd204MzUwX2lycV9jYWxsX2hhbmRsZXIod204MzUwLAorCQkJCQkJV004MzUwX0lSUV9TWVNfQ0hJUF9HVDExNSk7CisJCWlmIChzdGF0dXMyICYgV004MzUwX1NZU19DSElQX0dUMTQwX0VJTlQpCisJCQl3bTgzNTBfaXJxX2NhbGxfaGFuZGxlcih3bTgzNTAsCisJCQkJCQlXTTgzNTBfSVJRX1NZU19DSElQX0dUMTQwKTsKKwkJaWYgKHN0YXR1czIgJiBXTTgzNTBfU1lTX1dET0dfVE9fRUlOVCkKKwkJCXdtODM1MF9pcnFfY2FsbF9oYW5kbGVyKHdtODM1MCwKKwkJCQkJCVdNODM1MF9JUlFfU1lTX1dET0dfVE8pOworCisJCWlmIChzdGF0dXMyICYgV004MzUwX0FVWEFEQ19EQVRBUkRZX0VJTlQpCisJCQl3bTgzNTBfaXJxX2NhbGxfaGFuZGxlcih3bTgzNTAsCisJCQkJCQlXTTgzNTBfSVJRX0FVWEFEQ19EQVRBUkRZKTsKKwkJaWYgKHN0YXR1czIgJiBXTTgzNTBfQVVYQURDX0RDT01QNF9FSU5UKQorCQkJd204MzUwX2lycV9jYWxsX2hhbmRsZXIod204MzUwLAorCQkJCQkJV004MzUwX0lSUV9BVVhBRENfRENPTVA0KTsKKwkJaWYgKHN0YXR1czIgJiBXTTgzNTBfQVVYQURDX0RDT01QM19FSU5UKQorCQkJd204MzUwX2lycV9jYWxsX2hhbmRsZXIod204MzUwLAorCQkJCQkJV004MzUwX0lSUV9BVVhBRENfRENPTVAzKTsKKwkJaWYgKHN0YXR1czIgJiBXTTgzNTBfQVVYQURDX0RDT01QMl9FSU5UKQorCQkJd204MzUwX2lycV9jYWxsX2hhbmRsZXIod204MzUwLAorCQkJCQkJV004MzUwX0lSUV9BVVhBRENfRENPTVAyKTsKKwkJaWYgKHN0YXR1czIgJiBXTTgzNTBfQVVYQURDX0RDT01QMV9FSU5UKQorCQkJd204MzUwX2lycV9jYWxsX2hhbmRsZXIod204MzUwLAorCQkJCQkJV004MzUwX0lSUV9BVVhBRENfRENPTVAxKTsKKworCQlpZiAoc3RhdHVzMiAmIFdNODM1MF9VU0JfTElNSVRfRUlOVCkKKwkJCXdtODM1MF9pcnFfY2FsbF9oYW5kbGVyKHdtODM1MCwgV004MzUwX0lSUV9VU0JfTElNSVQpOworCX0KKworCS8qIHdha2UsIGNvZGVjLCBleHQgKi8KKwlpZiAoY29tcCkgeworCQlpZiAoY29tcCAmIFdNODM1MF9XS1VQX09GRl9TVEFURV9FSU5UKQorCQkJd204MzUwX2lycV9jYWxsX2hhbmRsZXIod204MzUwLAorCQkJCQkJV004MzUwX0lSUV9XS1VQX09GRl9TVEFURSk7CisJCWlmIChjb21wICYgV004MzUwX1dLVVBfSElCX1NUQVRFX0VJTlQpCisJCQl3bTgzNTBfaXJxX2NhbGxfaGFuZGxlcih3bTgzNTAsCisJCQkJCQlXTTgzNTBfSVJRX1dLVVBfSElCX1NUQVRFKTsKKwkJaWYgKGNvbXAgJiBXTTgzNTBfV0tVUF9DT05WX0ZBVUxUX0VJTlQpCisJCQl3bTgzNTBfaXJxX2NhbGxfaGFuZGxlcih3bTgzNTAsCisJCQkJCQlXTTgzNTBfSVJRX1dLVVBfQ09OVl9GQVVMVCk7CisJCWlmIChjb21wICYgV004MzUwX1dLVVBfV0RPR19SU1RfRUlOVCkKKwkJCXdtODM1MF9pcnFfY2FsbF9oYW5kbGVyKHdtODM1MCwKKwkJCQkJCVdNODM1MF9JUlFfV0tVUF9XRE9HX1JTVCk7CisJCWlmIChjb21wICYgV004MzUwX1dLVVBfR1BfUFdSX09OX0VJTlQpCisJCQl3bTgzNTBfaXJxX2NhbGxfaGFuZGxlcih3bTgzNTAsCisJCQkJCQlXTTgzNTBfSVJRX1dLVVBfR1BfUFdSX09OKTsKKwkJaWYgKGNvbXAgJiBXTTgzNTBfV0tVUF9PTktFWV9FSU5UKQorCQkJd204MzUwX2lycV9jYWxsX2hhbmRsZXIod204MzUwLCBXTTgzNTBfSVJRX1dLVVBfT05LRVkpOworCQlpZiAoY29tcCAmIFdNODM1MF9XS1VQX0dQX1dBS0VVUF9FSU5UKQorCQkJd204MzUwX2lycV9jYWxsX2hhbmRsZXIod204MzUwLAorCQkJCQkJV004MzUwX0lSUV9XS1VQX0dQX1dBS0VVUCk7CisKKwkJaWYgKGNvbXAgJiBXTTgzNTBfQ09ERUNfSkNLX0RFVF9MX0VJTlQpCisJCQl3bTgzNTBfaXJxX2NhbGxfaGFuZGxlcih3bTgzNTAsCisJCQkJCQlXTTgzNTBfSVJRX0NPREVDX0pDS19ERVRfTCk7CisJCWlmIChjb21wICYgV004MzUwX0NPREVDX0pDS19ERVRfUl9FSU5UKQorCQkJd204MzUwX2lycV9jYWxsX2hhbmRsZXIod204MzUwLAorCQkJCQkJV004MzUwX0lSUV9DT0RFQ19KQ0tfREVUX1IpOworCQlpZiAoY29tcCAmIFdNODM1MF9DT0RFQ19NSUNTQ0RfRUlOVCkKKwkJCXdtODM1MF9pcnFfY2FsbF9oYW5kbGVyKHdtODM1MCwKKwkJCQkJCVdNODM1MF9JUlFfQ09ERUNfTUlDU0NEKTsKKwkJaWYgKGNvbXAgJiBXTTgzNTBfQ09ERUNfTUlDRF9FSU5UKQorCQkJd204MzUwX2lycV9jYWxsX2hhbmRsZXIod204MzUwLCBXTTgzNTBfSVJRX0NPREVDX01JQ0QpOworCisJCWlmIChjb21wICYgV004MzUwX0VYVF9VU0JfRkJfRUlOVCkKKwkJCXdtODM1MF9pcnFfY2FsbF9oYW5kbGVyKHdtODM1MCwgV004MzUwX0lSUV9FWFRfVVNCX0ZCKTsKKwkJaWYgKGNvbXAgJiBXTTgzNTBfRVhUX1dBTExfRkJfRUlOVCkKKwkJCXdtODM1MF9pcnFfY2FsbF9oYW5kbGVyKHdtODM1MCwKKwkJCQkJCVdNODM1MF9JUlFfRVhUX1dBTExfRkIpOworCQlpZiAoY29tcCAmIFdNODM1MF9FWFRfQkFUX0ZCX0VJTlQpCisJCQl3bTgzNTBfaXJxX2NhbGxfaGFuZGxlcih3bTgzNTAsIFdNODM1MF9JUlFfRVhUX0JBVF9GQik7CisJfQorCisJaWYgKGxldmVsX29uZSAmIFdNODM1MF9HUF9JTlQpIHsKKwkJaW50IGk7CisJCXUxNiBncGlvOworCisJCWdwaW8gPSB3bTgzNTBfcmVnX3JlYWQod204MzUwLCBXTTgzNTBfR1BJT19JTlRfU1RBVFVTKTsKKwkJZ3BpbyAmPSB+d204MzUwX3JlZ19yZWFkKHdtODM1MCwKKwkJCQkJIFdNODM1MF9HUElPX0lOVF9TVEFUVVNfTUFTSyk7CisKKwkJZm9yIChpID0gMDsgaSA8IDEyOyBpKyspIHsKKwkJCWlmIChncGlvICYgKDEgPDwgaSkpCisJCQkJd204MzUwX2lycV9jYWxsX2hhbmRsZXIod204MzUwLAorCQkJCQkJCVdNODM1MF9JUlFfR1BJTyhpKSk7CisJCX0KKwl9CisKKwllbmFibGVfaXJxKHdtODM1MC0+Y2hpcF9pcnEpOworfQorCitzdGF0aWMgaXJxcmV0dXJuX3Qgd204MzUwX2lycShpbnQgaXJxLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCB3bTgzNTAgKndtODM1MCA9IGRhdGE7CisKKwlkaXNhYmxlX2lycV9ub3N5bmMoaXJxKTsKKwlzY2hlZHVsZV93b3JrKCZ3bTgzNTAtPmlycV93b3JrKTsKKworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworaW50IHdtODM1MF9yZWdpc3Rlcl9pcnEoc3RydWN0IHdtODM1MCAqd204MzUwLCBpbnQgaXJxLAorCQkJdm9pZCAoKmhhbmRsZXIpIChzdHJ1Y3Qgd204MzUwICosIGludCwgdm9pZCAqKSwKKwkJCXZvaWQgKmRhdGEpCit7CisJaWYgKGlycSA8IDAgfHwgaXJxID4gV004MzUwX05VTV9JUlEgfHwgIWhhbmRsZXIpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKHdtODM1MC0+aXJxW2lycV0uaGFuZGxlcikKKwkJcmV0dXJuIC1FQlVTWTsKKworCW11dGV4X2xvY2soJndtODM1MC0+aXJxX211dGV4KTsKKwl3bTgzNTAtPmlycVtpcnFdLmhhbmRsZXIgPSBoYW5kbGVyOworCXdtODM1MC0+aXJxW2lycV0uZGF0YSA9IGRhdGE7CisJbXV0ZXhfdW5sb2NrKCZ3bTgzNTAtPmlycV9tdXRleCk7CisKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHdtODM1MF9yZWdpc3Rlcl9pcnEpOworCitpbnQgd204MzUwX2ZyZWVfaXJxKHN0cnVjdCB3bTgzNTAgKndtODM1MCwgaW50IGlycSkKK3sKKwlpZiAoaXJxIDwgMCB8fCBpcnEgPiBXTTgzNTBfTlVNX0lSUSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwltdXRleF9sb2NrKCZ3bTgzNTAtPmlycV9tdXRleCk7CisJd204MzUwLT5pcnFbaXJxXS5oYW5kbGVyID0gTlVMTDsKKwltdXRleF91bmxvY2soJndtODM1MC0+aXJxX211dGV4KTsKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHdtODM1MF9mcmVlX2lycSk7CisKK2ludCB3bTgzNTBfbWFza19pcnEoc3RydWN0IHdtODM1MCAqd204MzUwLCBpbnQgaXJxKQoreworCXN3aXRjaCAoaXJxKSB7CisJY2FzZSBXTTgzNTBfSVJRX0NIR19CQVRfSE9UOgorCQlyZXR1cm4gd204MzUwX3NldF9iaXRzKHdtODM1MCwgV004MzUwX0lOVF9TVEFUVVNfMV9NQVNLLAorCQkJCSAgICAgICBXTTgzNTBfSU1fQ0hHX0JBVF9IT1RfRUlOVCk7CisJY2FzZSBXTTgzNTBfSVJRX0NIR19CQVRfQ09MRDoKKwkJcmV0dXJuIHdtODM1MF9zZXRfYml0cyh3bTgzNTAsIFdNODM1MF9JTlRfU1RBVFVTXzFfTUFTSywKKwkJCQkgICAgICAgV004MzUwX0lNX0NIR19CQVRfQ09MRF9FSU5UKTsKKwljYXNlIFdNODM1MF9JUlFfQ0hHX0JBVF9GQUlMOgorCQlyZXR1cm4gd204MzUwX3NldF9iaXRzKHdtODM1MCwgV004MzUwX0lOVF9TVEFUVVNfMV9NQVNLLAorCQkJCSAgICAgICBXTTgzNTBfSU1fQ0hHX0JBVF9GQUlMX0VJTlQpOworCWNhc2UgV004MzUwX0lSUV9DSEdfVE86CisJCXJldHVybiB3bTgzNTBfc2V0X2JpdHMod204MzUwLCBXTTgzNTBfSU5UX1NUQVRVU18xX01BU0ssCisJCQkJICAgICAgIFdNODM1MF9JTV9DSEdfVE9fRUlOVCk7CisJY2FzZSBXTTgzNTBfSVJRX0NIR19FTkQ6CisJCXJldHVybiB3bTgzNTBfc2V0X2JpdHMod204MzUwLCBXTTgzNTBfSU5UX1NUQVRVU18xX01BU0ssCisJCQkJICAgICAgIFdNODM1MF9JTV9DSEdfRU5EX0VJTlQpOworCWNhc2UgV004MzUwX0lSUV9DSEdfU1RBUlQ6CisJCXJldHVybiB3bTgzNTBfc2V0X2JpdHMod204MzUwLCBXTTgzNTBfSU5UX1NUQVRVU18xX01BU0ssCisJCQkJICAgICAgIFdNODM1MF9JTV9DSEdfU1RBUlRfRUlOVCk7CisJY2FzZSBXTTgzNTBfSVJRX0NIR19GQVNUX1JEWToKKwkJcmV0dXJuIHdtODM1MF9zZXRfYml0cyh3bTgzNTAsIFdNODM1MF9JTlRfU1RBVFVTXzFfTUFTSywKKwkJCQkgICAgICAgV004MzUwX0lNX0NIR19GQVNUX1JEWV9FSU5UKTsKKwljYXNlIFdNODM1MF9JUlFfUlRDX1BFUjoKKwkJcmV0dXJuIHdtODM1MF9zZXRfYml0cyh3bTgzNTAsIFdNODM1MF9JTlRfU1RBVFVTXzFfTUFTSywKKwkJCQkgICAgICAgV004MzUwX0lNX1JUQ19QRVJfRUlOVCk7CisJY2FzZSBXTTgzNTBfSVJRX1JUQ19TRUM6CisJCXJldHVybiB3bTgzNTBfc2V0X2JpdHMod204MzUwLCBXTTgzNTBfSU5UX1NUQVRVU18xX01BU0ssCisJCQkJICAgICAgIFdNODM1MF9JTV9SVENfU0VDX0VJTlQpOworCWNhc2UgV004MzUwX0lSUV9SVENfQUxNOgorCQlyZXR1cm4gd204MzUwX3NldF9iaXRzKHdtODM1MCwgV004MzUwX0lOVF9TVEFUVVNfMV9NQVNLLAorCQkJCSAgICAgICBXTTgzNTBfSU1fUlRDX0FMTV9FSU5UKTsKKwljYXNlIFdNODM1MF9JUlFfQ0hHX1ZCQVRUX0xUXzNQOToKKwkJcmV0dXJuIHdtODM1MF9zZXRfYml0cyh3bTgzNTAsIFdNODM1MF9JTlRfU1RBVFVTXzFfTUFTSywKKwkJCQkgICAgICAgV004MzUwX0lNX0NIR19WQkFUVF9MVF8zUDlfRUlOVCk7CisJY2FzZSBXTTgzNTBfSVJRX0NIR19WQkFUVF9MVF8zUDE6CisJCXJldHVybiB3bTgzNTBfc2V0X2JpdHMod204MzUwLCBXTTgzNTBfSU5UX1NUQVRVU18xX01BU0ssCisJCQkJICAgICAgIFdNODM1MF9JTV9DSEdfVkJBVFRfTFRfM1AxX0VJTlQpOworCWNhc2UgV004MzUwX0lSUV9DSEdfVkJBVFRfTFRfMlA4NToKKwkJcmV0dXJuIHdtODM1MF9zZXRfYml0cyh3bTgzNTAsIFdNODM1MF9JTlRfU1RBVFVTXzFfTUFTSywKKwkJCQkgICAgICAgV004MzUwX0lNX0NIR19WQkFUVF9MVF8yUDg1X0VJTlQpOworCWNhc2UgV004MzUwX0lSUV9DUzE6CisJCXJldHVybiB3bTgzNTBfc2V0X2JpdHMod204MzUwLCBXTTgzNTBfSU5UX1NUQVRVU18yX01BU0ssCisJCQkJICAgICAgIFdNODM1MF9JTV9DUzFfRUlOVCk7CisJY2FzZSBXTTgzNTBfSVJRX0NTMjoKKwkJcmV0dXJuIHdtODM1MF9zZXRfYml0cyh3bTgzNTAsIFdNODM1MF9JTlRfU1RBVFVTXzJfTUFTSywKKwkJCQkgICAgICAgV004MzUwX0lNX0NTMl9FSU5UKTsKKwljYXNlIFdNODM1MF9JUlFfVVNCX0xJTUlUOgorCQlyZXR1cm4gd204MzUwX3NldF9iaXRzKHdtODM1MCwgV004MzUwX0lOVF9TVEFUVVNfMl9NQVNLLAorCQkJCSAgICAgICBXTTgzNTBfSU1fVVNCX0xJTUlUX0VJTlQpOworCWNhc2UgV004MzUwX0lSUV9BVVhBRENfREFUQVJEWToKKwkJcmV0dXJuIHdtODM1MF9zZXRfYml0cyh3bTgzNTAsIFdNODM1MF9JTlRfU1RBVFVTXzJfTUFTSywKKwkJCQkgICAgICAgV004MzUwX0lNX0FVWEFEQ19EQVRBUkRZX0VJTlQpOworCWNhc2UgV004MzUwX0lSUV9BVVhBRENfRENPTVA0OgorCQlyZXR1cm4gd204MzUwX3NldF9iaXRzKHdtODM1MCwgV004MzUwX0lOVF9TVEFUVVNfMl9NQVNLLAorCQkJCSAgICAgICBXTTgzNTBfSU1fQVVYQURDX0RDT01QNF9FSU5UKTsKKwljYXNlIFdNODM1MF9JUlFfQVVYQURDX0RDT01QMzoKKwkJcmV0dXJuIHdtODM1MF9zZXRfYml0cyh3bTgzNTAsIFdNODM1MF9JTlRfU1RBVFVTXzJfTUFTSywKKwkJCQkgICAgICAgV004MzUwX0lNX0FVWEFEQ19EQ09NUDNfRUlOVCk7CisJY2FzZSBXTTgzNTBfSVJRX0FVWEFEQ19EQ09NUDI6CisJCXJldHVybiB3bTgzNTBfc2V0X2JpdHMod204MzUwLCBXTTgzNTBfSU5UX1NUQVRVU18yX01BU0ssCisJCQkJICAgICAgIFdNODM1MF9JTV9BVVhBRENfRENPTVAyX0VJTlQpOworCWNhc2UgV004MzUwX0lSUV9BVVhBRENfRENPTVAxOgorCQlyZXR1cm4gd204MzUwX3NldF9iaXRzKHdtODM1MCwgV004MzUwX0lOVF9TVEFUVVNfMl9NQVNLLAorCQkJCSAgICAgICBXTTgzNTBfSU1fQVVYQURDX0RDT01QMV9FSU5UKTsKKwljYXNlIFdNODM1MF9JUlFfU1lTX0hZU1RfQ09NUF9GQUlMOgorCQlyZXR1cm4gd204MzUwX3NldF9iaXRzKHdtODM1MCwgV004MzUwX0lOVF9TVEFUVVNfMl9NQVNLLAorCQkJCSAgICAgICBXTTgzNTBfSU1fU1lTX0hZU1RfQ09NUF9GQUlMX0VJTlQpOworCWNhc2UgV004MzUwX0lSUV9TWVNfQ0hJUF9HVDExNToKKwkJcmV0dXJuIHdtODM1MF9zZXRfYml0cyh3bTgzNTAsIFdNODM1MF9JTlRfU1RBVFVTXzJfTUFTSywKKwkJCQkgICAgICAgV004MzUwX0lNX1NZU19DSElQX0dUMTE1X0VJTlQpOworCWNhc2UgV004MzUwX0lSUV9TWVNfQ0hJUF9HVDE0MDoKKwkJcmV0dXJuIHdtODM1MF9zZXRfYml0cyh3bTgzNTAsIFdNODM1MF9JTlRfU1RBVFVTXzJfTUFTSywKKwkJCQkgICAgICAgV004MzUwX0lNX1NZU19DSElQX0dUMTQwX0VJTlQpOworCWNhc2UgV004MzUwX0lSUV9TWVNfV0RPR19UTzoKKwkJcmV0dXJuIHdtODM1MF9zZXRfYml0cyh3bTgzNTAsIFdNODM1MF9JTlRfU1RBVFVTXzJfTUFTSywKKwkJCQkgICAgICAgV004MzUwX0lNX1NZU19XRE9HX1RPX0VJTlQpOworCWNhc2UgV004MzUwX0lSUV9VVl9MRE80OgorCQlyZXR1cm4gd204MzUwX3NldF9iaXRzKHdtODM1MCwKKwkJCQkgICAgICAgV004MzUwX1VOREVSX1ZPTFRBR0VfSU5UX1NUQVRVU19NQVNLLAorCQkJCSAgICAgICBXTTgzNTBfSU1fVVZfTERPNF9FSU5UKTsKKwljYXNlIFdNODM1MF9JUlFfVVZfTERPMzoKKwkJcmV0dXJuIHdtODM1MF9zZXRfYml0cyh3bTgzNTAsCisJCQkJICAgICAgIFdNODM1MF9VTkRFUl9WT0xUQUdFX0lOVF9TVEFUVVNfTUFTSywKKwkJCQkgICAgICAgV004MzUwX0lNX1VWX0xETzNfRUlOVCk7CisJY2FzZSBXTTgzNTBfSVJRX1VWX0xETzI6CisJCXJldHVybiB3bTgzNTBfc2V0X2JpdHMod204MzUwLAorCQkJCSAgICAgICBXTTgzNTBfVU5ERVJfVk9MVEFHRV9JTlRfU1RBVFVTX01BU0ssCisJCQkJICAgICAgIFdNODM1MF9JTV9VVl9MRE8yX0VJTlQpOworCWNhc2UgV004MzUwX0lSUV9VVl9MRE8xOgorCQlyZXR1cm4gd204MzUwX3NldF9iaXRzKHdtODM1MCwKKwkJCQkgICAgICAgV004MzUwX1VOREVSX1ZPTFRBR0VfSU5UX1NUQVRVU19NQVNLLAorCQkJCSAgICAgICBXTTgzNTBfSU1fVVZfTERPMV9FSU5UKTsKKwljYXNlIFdNODM1MF9JUlFfVVZfREM2OgorCQlyZXR1cm4gd204MzUwX3NldF9iaXRzKHdtODM1MCwKKwkJCQkgICAgICAgV004MzUwX1VOREVSX1ZPTFRBR0VfSU5UX1NUQVRVU19NQVNLLAorCQkJCSAgICAgICBXTTgzNTBfSU1fVVZfREM2X0VJTlQpOworCWNhc2UgV004MzUwX0lSUV9VVl9EQzU6CisJCXJldHVybiB3bTgzNTBfc2V0X2JpdHMod204MzUwLAorCQkJCSAgICAgICBXTTgzNTBfVU5ERVJfVk9MVEFHRV9JTlRfU1RBVFVTX01BU0ssCisJCQkJICAgICAgIFdNODM1MF9JTV9VVl9EQzVfRUlOVCk7CisJY2FzZSBXTTgzNTBfSVJRX1VWX0RDNDoKKwkJcmV0dXJuIHdtODM1MF9zZXRfYml0cyh3bTgzNTAsCisJCQkJICAgICAgIFdNODM1MF9VTkRFUl9WT0xUQUdFX0lOVF9TVEFUVVNfTUFTSywKKwkJCQkgICAgICAgV004MzUwX0lNX1VWX0RDNF9FSU5UKTsKKwljYXNlIFdNODM1MF9JUlFfVVZfREMzOgorCQlyZXR1cm4gd204MzUwX3NldF9iaXRzKHdtODM1MCwKKwkJCQkgICAgICAgV004MzUwX1VOREVSX1ZPTFRBR0VfSU5UX1NUQVRVU19NQVNLLAorCQkJCSAgICAgICBXTTgzNTBfSU1fVVZfREMzX0VJTlQpOworCWNhc2UgV004MzUwX0lSUV9VVl9EQzI6CisJCXJldHVybiB3bTgzNTBfc2V0X2JpdHMod204MzUwLAorCQkJCSAgICAgICBXTTgzNTBfVU5ERVJfVk9MVEFHRV9JTlRfU1RBVFVTX01BU0ssCisJCQkJICAgICAgIFdNODM1MF9JTV9VVl9EQzJfRUlOVCk7CisJY2FzZSBXTTgzNTBfSVJRX1VWX0RDMToKKwkJcmV0dXJuIHdtODM1MF9zZXRfYml0cyh3bTgzNTAsCisJCQkJICAgICAgIFdNODM1MF9VTkRFUl9WT0xUQUdFX0lOVF9TVEFUVVNfTUFTSywKKwkJCQkgICAgICAgV004MzUwX0lNX1VWX0RDMV9FSU5UKTsKKwljYXNlIFdNODM1MF9JUlFfT0NfTFM6CisJCXJldHVybiB3bTgzNTBfc2V0X2JpdHMod204MzUwLAorCQkJCSAgICAgICBXTTgzNTBfT1ZFUl9DVVJSRU5UX0lOVF9TVEFUVVNfTUFTSywKKwkJCQkgICAgICAgV004MzUwX0lNX09DX0xTX0VJTlQpOworCWNhc2UgV004MzUwX0lSUV9FWFRfVVNCX0ZCOgorCQlyZXR1cm4gd204MzUwX3NldF9iaXRzKHdtODM1MCwKKwkJCQkgICAgICAgV004MzUwX0NPTVBBUkFUT1JfSU5UX1NUQVRVU19NQVNLLAorCQkJCSAgICAgICBXTTgzNTBfSU1fRVhUX1VTQl9GQl9FSU5UKTsKKwljYXNlIFdNODM1MF9JUlFfRVhUX1dBTExfRkI6CisJCXJldHVybiB3bTgzNTBfc2V0X2JpdHMod204MzUwLAorCQkJCSAgICAgICBXTTgzNTBfQ09NUEFSQVRPUl9JTlRfU1RBVFVTX01BU0ssCisJCQkJICAgICAgIFdNODM1MF9JTV9FWFRfV0FMTF9GQl9FSU5UKTsKKwljYXNlIFdNODM1MF9JUlFfRVhUX0JBVF9GQjoKKwkJcmV0dXJuIHdtODM1MF9zZXRfYml0cyh3bTgzNTAsCisJCQkJICAgICAgIFdNODM1MF9DT01QQVJBVE9SX0lOVF9TVEFUVVNfTUFTSywKKwkJCQkgICAgICAgV004MzUwX0lNX0VYVF9CQVRfRkJfRUlOVCk7CisJY2FzZSBXTTgzNTBfSVJRX0NPREVDX0pDS19ERVRfTDoKKwkJcmV0dXJuIHdtODM1MF9zZXRfYml0cyh3bTgzNTAsCisJCQkJICAgICAgIFdNODM1MF9DT01QQVJBVE9SX0lOVF9TVEFUVVNfTUFTSywKKwkJCQkgICAgICAgV004MzUwX0lNX0NPREVDX0pDS19ERVRfTF9FSU5UKTsKKwljYXNlIFdNODM1MF9JUlFfQ09ERUNfSkNLX0RFVF9SOgorCQlyZXR1cm4gd204MzUwX3NldF9iaXRzKHdtODM1MCwKKwkJCQkgICAgICAgV004MzUwX0NPTVBBUkFUT1JfSU5UX1NUQVRVU19NQVNLLAorCQkJCSAgICAgICBXTTgzNTBfSU1fQ09ERUNfSkNLX0RFVF9SX0VJTlQpOworCWNhc2UgV004MzUwX0lSUV9DT0RFQ19NSUNTQ0Q6CisJCXJldHVybiB3bTgzNTBfc2V0X2JpdHMod204MzUwLAorCQkJCSAgICAgICBXTTgzNTBfQ09NUEFSQVRPUl9JTlRfU1RBVFVTX01BU0ssCisJCQkJICAgICAgIFdNODM1MF9JTV9DT0RFQ19NSUNTQ0RfRUlOVCk7CisJY2FzZSBXTTgzNTBfSVJRX0NPREVDX01JQ0Q6CisJCXJldHVybiB3bTgzNTBfc2V0X2JpdHMod204MzUwLAorCQkJCSAgICAgICBXTTgzNTBfQ09NUEFSQVRPUl9JTlRfU1RBVFVTX01BU0ssCisJCQkJICAgICAgIFdNODM1MF9JTV9DT0RFQ19NSUNEX0VJTlQpOworCWNhc2UgV004MzUwX0lSUV9XS1VQX09GRl9TVEFURToKKwkJcmV0dXJuIHdtODM1MF9zZXRfYml0cyh3bTgzNTAsCisJCQkJICAgICAgIFdNODM1MF9DT01QQVJBVE9SX0lOVF9TVEFUVVNfTUFTSywKKwkJCQkgICAgICAgV004MzUwX0lNX1dLVVBfT0ZGX1NUQVRFX0VJTlQpOworCWNhc2UgV004MzUwX0lSUV9XS1VQX0hJQl9TVEFURToKKwkJcmV0dXJuIHdtODM1MF9zZXRfYml0cyh3bTgzNTAsCisJCQkJICAgICAgIFdNODM1MF9DT01QQVJBVE9SX0lOVF9TVEFUVVNfTUFTSywKKwkJCQkgICAgICAgV004MzUwX0lNX1dLVVBfSElCX1NUQVRFX0VJTlQpOworCWNhc2UgV004MzUwX0lSUV9XS1VQX0NPTlZfRkFVTFQ6CisJCXJldHVybiB3bTgzNTBfc2V0X2JpdHMod204MzUwLAorCQkJCSAgICAgICBXTTgzNTBfQ09NUEFSQVRPUl9JTlRfU1RBVFVTX01BU0ssCisJCQkJICAgICAgIFdNODM1MF9JTV9XS1VQX0NPTlZfRkFVTFRfRUlOVCk7CisJY2FzZSBXTTgzNTBfSVJRX1dLVVBfV0RPR19SU1Q6CisJCXJldHVybiB3bTgzNTBfc2V0X2JpdHMod204MzUwLAorCQkJCSAgICAgICBXTTgzNTBfQ09NUEFSQVRPUl9JTlRfU1RBVFVTX01BU0ssCisJCQkJICAgICAgIFdNODM1MF9JTV9XS1VQX09GRl9TVEFURV9FSU5UKTsKKwljYXNlIFdNODM1MF9JUlFfV0tVUF9HUF9QV1JfT046CisJCXJldHVybiB3bTgzNTBfc2V0X2JpdHMod204MzUwLAorCQkJCSAgICAgICBXTTgzNTBfQ09NUEFSQVRPUl9JTlRfU1RBVFVTX01BU0ssCisJCQkJICAgICAgIFdNODM1MF9JTV9XS1VQX0dQX1BXUl9PTl9FSU5UKTsKKwljYXNlIFdNODM1MF9JUlFfV0tVUF9PTktFWToKKwkJcmV0dXJuIHdtODM1MF9zZXRfYml0cyh3bTgzNTAsCisJCQkJICAgICAgIFdNODM1MF9DT01QQVJBVE9SX0lOVF9TVEFUVVNfTUFTSywKKwkJCQkgICAgICAgV004MzUwX0lNX1dLVVBfT05LRVlfRUlOVCk7CisJY2FzZSBXTTgzNTBfSVJRX1dLVVBfR1BfV0FLRVVQOgorCQlyZXR1cm4gd204MzUwX3NldF9iaXRzKHdtODM1MCwKKwkJCQkgICAgICAgV004MzUwX0NPTVBBUkFUT1JfSU5UX1NUQVRVU19NQVNLLAorCQkJCSAgICAgICBXTTgzNTBfSU1fV0tVUF9HUF9XQUtFVVBfRUlOVCk7CisJY2FzZSBXTTgzNTBfSVJRX0dQSU8oMCk6CisJCXJldHVybiB3bTgzNTBfc2V0X2JpdHMod204MzUwLAorCQkJCSAgICAgICBXTTgzNTBfR1BJT19JTlRfU1RBVFVTX01BU0ssCisJCQkJICAgICAgIFdNODM1MF9JTV9HUDBfRUlOVCk7CisJY2FzZSBXTTgzNTBfSVJRX0dQSU8oMSk6CisJCXJldHVybiB3bTgzNTBfc2V0X2JpdHMod204MzUwLAorCQkJCSAgICAgICBXTTgzNTBfR1BJT19JTlRfU1RBVFVTX01BU0ssCisJCQkJICAgICAgIFdNODM1MF9JTV9HUDFfRUlOVCk7CisJY2FzZSBXTTgzNTBfSVJRX0dQSU8oMik6CisJCXJldHVybiB3bTgzNTBfc2V0X2JpdHMod204MzUwLAorCQkJCSAgICAgICBXTTgzNTBfR1BJT19JTlRfU1RBVFVTX01BU0ssCisJCQkJICAgICAgIFdNODM1MF9JTV9HUDJfRUlOVCk7CisJY2FzZSBXTTgzNTBfSVJRX0dQSU8oMyk6CisJCXJldHVybiB3bTgzNTBfc2V0X2JpdHMod204MzUwLAorCQkJCSAgICAgICBXTTgzNTBfR1BJT19JTlRfU1RBVFVTX01BU0ssCisJCQkJICAgICAgIFdNODM1MF9JTV9HUDNfRUlOVCk7CisJY2FzZSBXTTgzNTBfSVJRX0dQSU8oNCk6CisJCXJldHVybiB3bTgzNTBfc2V0X2JpdHMod204MzUwLAorCQkJCSAgICAgICBXTTgzNTBfR1BJT19JTlRfU1RBVFVTX01BU0ssCisJCQkJICAgICAgIFdNODM1MF9JTV9HUDRfRUlOVCk7CisJY2FzZSBXTTgzNTBfSVJRX0dQSU8oNSk6CisJCXJldHVybiB3bTgzNTBfc2V0X2JpdHMod204MzUwLAorCQkJCSAgICAgICBXTTgzNTBfR1BJT19JTlRfU1RBVFVTX01BU0ssCisJCQkJICAgICAgIFdNODM1MF9JTV9HUDVfRUlOVCk7CisJY2FzZSBXTTgzNTBfSVJRX0dQSU8oNik6CisJCXJldHVybiB3bTgzNTBfc2V0X2JpdHMod204MzUwLAorCQkJCSAgICAgICBXTTgzNTBfR1BJT19JTlRfU1RBVFVTX01BU0ssCisJCQkJICAgICAgIFdNODM1MF9JTV9HUDZfRUlOVCk7CisJY2FzZSBXTTgzNTBfSVJRX0dQSU8oNyk6CisJCXJldHVybiB3bTgzNTBfc2V0X2JpdHMod204MzUwLAorCQkJCSAgICAgICBXTTgzNTBfR1BJT19JTlRfU1RBVFVTX01BU0ssCisJCQkJICAgICAgIFdNODM1MF9JTV9HUDdfRUlOVCk7CisJY2FzZSBXTTgzNTBfSVJRX0dQSU8oOCk6CisJCXJldHVybiB3bTgzNTBfc2V0X2JpdHMod204MzUwLAorCQkJCSAgICAgICBXTTgzNTBfR1BJT19JTlRfU1RBVFVTX01BU0ssCisJCQkJICAgICAgIFdNODM1MF9JTV9HUDhfRUlOVCk7CisJY2FzZSBXTTgzNTBfSVJRX0dQSU8oOSk6CisJCXJldHVybiB3bTgzNTBfc2V0X2JpdHMod204MzUwLAorCQkJCSAgICAgICBXTTgzNTBfR1BJT19JTlRfU1RBVFVTX01BU0ssCisJCQkJICAgICAgIFdNODM1MF9JTV9HUDlfRUlOVCk7CisJY2FzZSBXTTgzNTBfSVJRX0dQSU8oMTApOgorCQlyZXR1cm4gd204MzUwX3NldF9iaXRzKHdtODM1MCwKKwkJCQkgICAgICAgV004MzUwX0dQSU9fSU5UX1NUQVRVU19NQVNLLAorCQkJCSAgICAgICBXTTgzNTBfSU1fR1AxMF9FSU5UKTsKKwljYXNlIFdNODM1MF9JUlFfR1BJTygxMSk6CisJCXJldHVybiB3bTgzNTBfc2V0X2JpdHMod204MzUwLAorCQkJCSAgICAgICBXTTgzNTBfR1BJT19JTlRfU1RBVFVTX01BU0ssCisJCQkJICAgICAgIFdNODM1MF9JTV9HUDExX0VJTlQpOworCWNhc2UgV004MzUwX0lSUV9HUElPKDEyKToKKwkJcmV0dXJuIHdtODM1MF9zZXRfYml0cyh3bTgzNTAsCisJCQkJICAgICAgIFdNODM1MF9HUElPX0lOVF9TVEFUVVNfTUFTSywKKwkJCQkgICAgICAgV004MzUwX0lNX0dQMTJfRUlOVCk7CisJZGVmYXVsdDoKKwkJZGV2X3dhcm4od204MzUwLT5kZXYsICJBdHRlbXB0aW5nIHRvIG1hc2sgdW5rbm93biBJUlEgJWRcbiIsCisJCQkgaXJxKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTF9HUEwod204MzUwX21hc2tfaXJxKTsKKworaW50IHdtODM1MF91bm1hc2tfaXJxKHN0cnVjdCB3bTgzNTAgKndtODM1MCwgaW50IGlycSkKK3sKKwlzd2l0Y2ggKGlycSkgeworCWNhc2UgV004MzUwX0lSUV9DSEdfQkFUX0hPVDoKKwkJcmV0dXJuIHdtODM1MF9jbGVhcl9iaXRzKHdtODM1MCwgV004MzUwX0lOVF9TVEFUVVNfMV9NQVNLLAorCQkJCQkgV004MzUwX0lNX0NIR19CQVRfSE9UX0VJTlQpOworCWNhc2UgV004MzUwX0lSUV9DSEdfQkFUX0NPTEQ6CisJCXJldHVybiB3bTgzNTBfY2xlYXJfYml0cyh3bTgzNTAsIFdNODM1MF9JTlRfU1RBVFVTXzFfTUFTSywKKwkJCQkJIFdNODM1MF9JTV9DSEdfQkFUX0NPTERfRUlOVCk7CisJY2FzZSBXTTgzNTBfSVJRX0NIR19CQVRfRkFJTDoKKwkJcmV0dXJuIHdtODM1MF9jbGVhcl9iaXRzKHdtODM1MCwgV004MzUwX0lOVF9TVEFUVVNfMV9NQVNLLAorCQkJCQkgV004MzUwX0lNX0NIR19CQVRfRkFJTF9FSU5UKTsKKwljYXNlIFdNODM1MF9JUlFfQ0hHX1RPOgorCQlyZXR1cm4gd204MzUwX2NsZWFyX2JpdHMod204MzUwLCBXTTgzNTBfSU5UX1NUQVRVU18xX01BU0ssCisJCQkJCSBXTTgzNTBfSU1fQ0hHX1RPX0VJTlQpOworCWNhc2UgV004MzUwX0lSUV9DSEdfRU5EOgorCQlyZXR1cm4gd204MzUwX2NsZWFyX2JpdHMod204MzUwLCBXTTgzNTBfSU5UX1NUQVRVU18xX01BU0ssCisJCQkJCSBXTTgzNTBfSU1fQ0hHX0VORF9FSU5UKTsKKwljYXNlIFdNODM1MF9JUlFfQ0hHX1NUQVJUOgorCQlyZXR1cm4gd204MzUwX2NsZWFyX2JpdHMod204MzUwLCBXTTgzNTBfSU5UX1NUQVRVU18xX01BU0ssCisJCQkJCSBXTTgzNTBfSU1fQ0hHX1NUQVJUX0VJTlQpOworCWNhc2UgV004MzUwX0lSUV9DSEdfRkFTVF9SRFk6CisJCXJldHVybiB3bTgzNTBfY2xlYXJfYml0cyh3bTgzNTAsIFdNODM1MF9JTlRfU1RBVFVTXzFfTUFTSywKKwkJCQkJIFdNODM1MF9JTV9DSEdfRkFTVF9SRFlfRUlOVCk7CisJY2FzZSBXTTgzNTBfSVJRX1JUQ19QRVI6CisJCXJldHVybiB3bTgzNTBfY2xlYXJfYml0cyh3bTgzNTAsIFdNODM1MF9JTlRfU1RBVFVTXzFfTUFTSywKKwkJCQkJIFdNODM1MF9JTV9SVENfUEVSX0VJTlQpOworCWNhc2UgV004MzUwX0lSUV9SVENfU0VDOgorCQlyZXR1cm4gd204MzUwX2NsZWFyX2JpdHMod204MzUwLCBXTTgzNTBfSU5UX1NUQVRVU18xX01BU0ssCisJCQkJCSBXTTgzNTBfSU1fUlRDX1NFQ19FSU5UKTsKKwljYXNlIFdNODM1MF9JUlFfUlRDX0FMTToKKwkJcmV0dXJuIHdtODM1MF9jbGVhcl9iaXRzKHdtODM1MCwgV004MzUwX0lOVF9TVEFUVVNfMV9NQVNLLAorCQkJCQkgV004MzUwX0lNX1JUQ19BTE1fRUlOVCk7CisJY2FzZSBXTTgzNTBfSVJRX0NIR19WQkFUVF9MVF8zUDk6CisJCXJldHVybiB3bTgzNTBfY2xlYXJfYml0cyh3bTgzNTAsIFdNODM1MF9JTlRfU1RBVFVTXzFfTUFTSywKKwkJCQkJIFdNODM1MF9JTV9DSEdfVkJBVFRfTFRfM1A5X0VJTlQpOworCWNhc2UgV004MzUwX0lSUV9DSEdfVkJBVFRfTFRfM1AxOgorCQlyZXR1cm4gd204MzUwX2NsZWFyX2JpdHMod204MzUwLCBXTTgzNTBfSU5UX1NUQVRVU18xX01BU0ssCisJCQkJCSBXTTgzNTBfSU1fQ0hHX1ZCQVRUX0xUXzNQMV9FSU5UKTsKKwljYXNlIFdNODM1MF9JUlFfQ0hHX1ZCQVRUX0xUXzJQODU6CisJCXJldHVybiB3bTgzNTBfY2xlYXJfYml0cyh3bTgzNTAsIFdNODM1MF9JTlRfU1RBVFVTXzFfTUFTSywKKwkJCQkJIFdNODM1MF9JTV9DSEdfVkJBVFRfTFRfMlA4NV9FSU5UKTsKKwljYXNlIFdNODM1MF9JUlFfQ1MxOgorCQlyZXR1cm4gd204MzUwX2NsZWFyX2JpdHMod204MzUwLCBXTTgzNTBfSU5UX1NUQVRVU18yX01BU0ssCisJCQkJCSBXTTgzNTBfSU1fQ1MxX0VJTlQpOworCWNhc2UgV004MzUwX0lSUV9DUzI6CisJCXJldHVybiB3bTgzNTBfY2xlYXJfYml0cyh3bTgzNTAsIFdNODM1MF9JTlRfU1RBVFVTXzJfTUFTSywKKwkJCQkJIFdNODM1MF9JTV9DUzJfRUlOVCk7CisJY2FzZSBXTTgzNTBfSVJRX1VTQl9MSU1JVDoKKwkJcmV0dXJuIHdtODM1MF9jbGVhcl9iaXRzKHdtODM1MCwgV004MzUwX0lOVF9TVEFUVVNfMl9NQVNLLAorCQkJCQkgV004MzUwX0lNX1VTQl9MSU1JVF9FSU5UKTsKKwljYXNlIFdNODM1MF9JUlFfQVVYQURDX0RBVEFSRFk6CisJCXJldHVybiB3bTgzNTBfY2xlYXJfYml0cyh3bTgzNTAsIFdNODM1MF9JTlRfU1RBVFVTXzJfTUFTSywKKwkJCQkJIFdNODM1MF9JTV9BVVhBRENfREFUQVJEWV9FSU5UKTsKKwljYXNlIFdNODM1MF9JUlFfQVVYQURDX0RDT01QNDoKKwkJcmV0dXJuIHdtODM1MF9jbGVhcl9iaXRzKHdtODM1MCwgV004MzUwX0lOVF9TVEFUVVNfMl9NQVNLLAorCQkJCQkgV004MzUwX0lNX0FVWEFEQ19EQ09NUDRfRUlOVCk7CisJY2FzZSBXTTgzNTBfSVJRX0FVWEFEQ19EQ09NUDM6CisJCXJldHVybiB3bTgzNTBfY2xlYXJfYml0cyh3bTgzNTAsIFdNODM1MF9JTlRfU1RBVFVTXzJfTUFTSywKKwkJCQkJIFdNODM1MF9JTV9BVVhBRENfRENPTVAzX0VJTlQpOworCWNhc2UgV004MzUwX0lSUV9BVVhBRENfRENPTVAyOgorCQlyZXR1cm4gd204MzUwX2NsZWFyX2JpdHMod204MzUwLCBXTTgzNTBfSU5UX1NUQVRVU18yX01BU0ssCisJCQkJCSBXTTgzNTBfSU1fQVVYQURDX0RDT01QMl9FSU5UKTsKKwljYXNlIFdNODM1MF9JUlFfQVVYQURDX0RDT01QMToKKwkJcmV0dXJuIHdtODM1MF9jbGVhcl9iaXRzKHdtODM1MCwgV004MzUwX0lOVF9TVEFUVVNfMl9NQVNLLAorCQkJCQkgV004MzUwX0lNX0FVWEFEQ19EQ09NUDFfRUlOVCk7CisJY2FzZSBXTTgzNTBfSVJRX1NZU19IWVNUX0NPTVBfRkFJTDoKKwkJcmV0dXJuIHdtODM1MF9jbGVhcl9iaXRzKHdtODM1MCwgV004MzUwX0lOVF9TVEFUVVNfMl9NQVNLLAorCQkJCQkgV004MzUwX0lNX1NZU19IWVNUX0NPTVBfRkFJTF9FSU5UKTsKKwljYXNlIFdNODM1MF9JUlFfU1lTX0NISVBfR1QxMTU6CisJCXJldHVybiB3bTgzNTBfY2xlYXJfYml0cyh3bTgzNTAsIFdNODM1MF9JTlRfU1RBVFVTXzJfTUFTSywKKwkJCQkJIFdNODM1MF9JTV9TWVNfQ0hJUF9HVDExNV9FSU5UKTsKKwljYXNlIFdNODM1MF9JUlFfU1lTX0NISVBfR1QxNDA6CisJCXJldHVybiB3bTgzNTBfY2xlYXJfYml0cyh3bTgzNTAsIFdNODM1MF9JTlRfU1RBVFVTXzJfTUFTSywKKwkJCQkJIFdNODM1MF9JTV9TWVNfQ0hJUF9HVDE0MF9FSU5UKTsKKwljYXNlIFdNODM1MF9JUlFfU1lTX1dET0dfVE86CisJCXJldHVybiB3bTgzNTBfY2xlYXJfYml0cyh3bTgzNTAsIFdNODM1MF9JTlRfU1RBVFVTXzJfTUFTSywKKwkJCQkJIFdNODM1MF9JTV9TWVNfV0RPR19UT19FSU5UKTsKKwljYXNlIFdNODM1MF9JUlFfVVZfTERPNDoKKwkJcmV0dXJuIHdtODM1MF9jbGVhcl9iaXRzKHdtODM1MCwKKwkJCQkJIFdNODM1MF9VTkRFUl9WT0xUQUdFX0lOVF9TVEFUVVNfTUFTSywKKwkJCQkJIFdNODM1MF9JTV9VVl9MRE80X0VJTlQpOworCWNhc2UgV004MzUwX0lSUV9VVl9MRE8zOgorCQlyZXR1cm4gd204MzUwX2NsZWFyX2JpdHMod204MzUwLAorCQkJCQkgV004MzUwX1VOREVSX1ZPTFRBR0VfSU5UX1NUQVRVU19NQVNLLAorCQkJCQkgV004MzUwX0lNX1VWX0xETzNfRUlOVCk7CisJY2FzZSBXTTgzNTBfSVJRX1VWX0xETzI6CisJCXJldHVybiB3bTgzNTBfY2xlYXJfYml0cyh3bTgzNTAsCisJCQkJCSBXTTgzNTBfVU5ERVJfVk9MVEFHRV9JTlRfU1RBVFVTX01BU0ssCisJCQkJCSBXTTgzNTBfSU1fVVZfTERPMl9FSU5UKTsKKwljYXNlIFdNODM1MF9JUlFfVVZfTERPMToKKwkJcmV0dXJuIHdtODM1MF9jbGVhcl9iaXRzKHdtODM1MCwKKwkJCQkJIFdNODM1MF9VTkRFUl9WT0xUQUdFX0lOVF9TVEFUVVNfTUFTSywKKwkJCQkJIFdNODM1MF9JTV9VVl9MRE8xX0VJTlQpOworCWNhc2UgV004MzUwX0lSUV9VVl9EQzY6CisJCXJldHVybiB3bTgzNTBfY2xlYXJfYml0cyh3bTgzNTAsCisJCQkJCSBXTTgzNTBfVU5ERVJfVk9MVEFHRV9JTlRfU1RBVFVTX01BU0ssCisJCQkJCSBXTTgzNTBfSU1fVVZfREM2X0VJTlQpOworCWNhc2UgV004MzUwX0lSUV9VVl9EQzU6CisJCXJldHVybiB3bTgzNTBfY2xlYXJfYml0cyh3bTgzNTAsCisJCQkJCSBXTTgzNTBfVU5ERVJfVk9MVEFHRV9JTlRfU1RBVFVTX01BU0ssCisJCQkJCSBXTTgzNTBfSU1fVVZfREM1X0VJTlQpOworCWNhc2UgV004MzUwX0lSUV9VVl9EQzQ6CisJCXJldHVybiB3bTgzNTBfY2xlYXJfYml0cyh3bTgzNTAsCisJCQkJCSBXTTgzNTBfVU5ERVJfVk9MVEFHRV9JTlRfU1RBVFVTX01BU0ssCisJCQkJCSBXTTgzNTBfSU1fVVZfREM0X0VJTlQpOworCWNhc2UgV004MzUwX0lSUV9VVl9EQzM6CisJCXJldHVybiB3bTgzNTBfY2xlYXJfYml0cyh3bTgzNTAsCisJCQkJCSBXTTgzNTBfVU5ERVJfVk9MVEFHRV9JTlRfU1RBVFVTX01BU0ssCisJCQkJCSBXTTgzNTBfSU1fVVZfREMzX0VJTlQpOworCWNhc2UgV004MzUwX0lSUV9VVl9EQzI6CisJCXJldHVybiB3bTgzNTBfY2xlYXJfYml0cyh3bTgzNTAsCisJCQkJCSBXTTgzNTBfVU5ERVJfVk9MVEFHRV9JTlRfU1RBVFVTX01BU0ssCisJCQkJCSBXTTgzNTBfSU1fVVZfREMyX0VJTlQpOworCWNhc2UgV004MzUwX0lSUV9VVl9EQzE6CisJCXJldHVybiB3bTgzNTBfY2xlYXJfYml0cyh3bTgzNTAsCisJCQkJCSBXTTgzNTBfVU5ERVJfVk9MVEFHRV9JTlRfU1RBVFVTX01BU0ssCisJCQkJCSBXTTgzNTBfSU1fVVZfREMxX0VJTlQpOworCWNhc2UgV004MzUwX0lSUV9PQ19MUzoKKwkJcmV0dXJuIHdtODM1MF9jbGVhcl9iaXRzKHdtODM1MCwKKwkJCQkJIFdNODM1MF9PVkVSX0NVUlJFTlRfSU5UX1NUQVRVU19NQVNLLAorCQkJCQkgV004MzUwX0lNX09DX0xTX0VJTlQpOworCWNhc2UgV004MzUwX0lSUV9FWFRfVVNCX0ZCOgorCQlyZXR1cm4gd204MzUwX2NsZWFyX2JpdHMod204MzUwLAorCQkJCQkgV004MzUwX0NPTVBBUkFUT1JfSU5UX1NUQVRVU19NQVNLLAorCQkJCQkgV004MzUwX0lNX0VYVF9VU0JfRkJfRUlOVCk7CisJY2FzZSBXTTgzNTBfSVJRX0VYVF9XQUxMX0ZCOgorCQlyZXR1cm4gd204MzUwX2NsZWFyX2JpdHMod204MzUwLAorCQkJCQkgV004MzUwX0NPTVBBUkFUT1JfSU5UX1NUQVRVU19NQVNLLAorCQkJCQkgV004MzUwX0lNX0VYVF9XQUxMX0ZCX0VJTlQpOworCWNhc2UgV004MzUwX0lSUV9FWFRfQkFUX0ZCOgorCQlyZXR1cm4gd204MzUwX2NsZWFyX2JpdHMod204MzUwLAorCQkJCQkgV004MzUwX0NPTVBBUkFUT1JfSU5UX1NUQVRVU19NQVNLLAorCQkJCQkgV004MzUwX0lNX0VYVF9CQVRfRkJfRUlOVCk7CisJY2FzZSBXTTgzNTBfSVJRX0NPREVDX0pDS19ERVRfTDoKKwkJcmV0dXJuIHdtODM1MF9jbGVhcl9iaXRzKHdtODM1MCwKKwkJCQkJIFdNODM1MF9DT01QQVJBVE9SX0lOVF9TVEFUVVNfTUFTSywKKwkJCQkJIFdNODM1MF9JTV9DT0RFQ19KQ0tfREVUX0xfRUlOVCk7CisJY2FzZSBXTTgzNTBfSVJRX0NPREVDX0pDS19ERVRfUjoKKwkJcmV0dXJuIHdtODM1MF9jbGVhcl9iaXRzKHdtODM1MCwKKwkJCQkJIFdNODM1MF9DT01QQVJBVE9SX0lOVF9TVEFUVVNfTUFTSywKKwkJCQkJIFdNODM1MF9JTV9DT0RFQ19KQ0tfREVUX1JfRUlOVCk7CisJY2FzZSBXTTgzNTBfSVJRX0NPREVDX01JQ1NDRDoKKwkJcmV0dXJuIHdtODM1MF9jbGVhcl9iaXRzKHdtODM1MCwKKwkJCQkJIFdNODM1MF9DT01QQVJBVE9SX0lOVF9TVEFUVVNfTUFTSywKKwkJCQkJIFdNODM1MF9JTV9DT0RFQ19NSUNTQ0RfRUlOVCk7CisJY2FzZSBXTTgzNTBfSVJRX0NPREVDX01JQ0Q6CisJCXJldHVybiB3bTgzNTBfY2xlYXJfYml0cyh3bTgzNTAsCisJCQkJCSBXTTgzNTBfQ09NUEFSQVRPUl9JTlRfU1RBVFVTX01BU0ssCisJCQkJCSBXTTgzNTBfSU1fQ09ERUNfTUlDRF9FSU5UKTsKKwljYXNlIFdNODM1MF9JUlFfV0tVUF9PRkZfU1RBVEU6CisJCXJldHVybiB3bTgzNTBfY2xlYXJfYml0cyh3bTgzNTAsCisJCQkJCSBXTTgzNTBfQ09NUEFSQVRPUl9JTlRfU1RBVFVTX01BU0ssCisJCQkJCSBXTTgzNTBfSU1fV0tVUF9PRkZfU1RBVEVfRUlOVCk7CisJY2FzZSBXTTgzNTBfSVJRX1dLVVBfSElCX1NUQVRFOgorCQlyZXR1cm4gd204MzUwX2NsZWFyX2JpdHMod204MzUwLAorCQkJCQkgV004MzUwX0NPTVBBUkFUT1JfSU5UX1NUQVRVU19NQVNLLAorCQkJCQkgV004MzUwX0lNX1dLVVBfSElCX1NUQVRFX0VJTlQpOworCWNhc2UgV004MzUwX0lSUV9XS1VQX0NPTlZfRkFVTFQ6CisJCXJldHVybiB3bTgzNTBfY2xlYXJfYml0cyh3bTgzNTAsCisJCQkJCSBXTTgzNTBfQ09NUEFSQVRPUl9JTlRfU1RBVFVTX01BU0ssCisJCQkJCSBXTTgzNTBfSU1fV0tVUF9DT05WX0ZBVUxUX0VJTlQpOworCWNhc2UgV004MzUwX0lSUV9XS1VQX1dET0dfUlNUOgorCQlyZXR1cm4gd204MzUwX2NsZWFyX2JpdHMod204MzUwLAorCQkJCQkgV004MzUwX0NPTVBBUkFUT1JfSU5UX1NUQVRVU19NQVNLLAorCQkJCQkgV004MzUwX0lNX1dLVVBfT0ZGX1NUQVRFX0VJTlQpOworCWNhc2UgV004MzUwX0lSUV9XS1VQX0dQX1BXUl9PTjoKKwkJcmV0dXJuIHdtODM1MF9jbGVhcl9iaXRzKHdtODM1MCwKKwkJCQkJIFdNODM1MF9DT01QQVJBVE9SX0lOVF9TVEFUVVNfTUFTSywKKwkJCQkJIFdNODM1MF9JTV9XS1VQX0dQX1BXUl9PTl9FSU5UKTsKKwljYXNlIFdNODM1MF9JUlFfV0tVUF9PTktFWToKKwkJcmV0dXJuIHdtODM1MF9jbGVhcl9iaXRzKHdtODM1MCwKKwkJCQkJIFdNODM1MF9DT01QQVJBVE9SX0lOVF9TVEFUVVNfTUFTSywKKwkJCQkJIFdNODM1MF9JTV9XS1VQX09OS0VZX0VJTlQpOworCWNhc2UgV004MzUwX0lSUV9XS1VQX0dQX1dBS0VVUDoKKwkJcmV0dXJuIHdtODM1MF9jbGVhcl9iaXRzKHdtODM1MCwKKwkJCQkJIFdNODM1MF9DT01QQVJBVE9SX0lOVF9TVEFUVVNfTUFTSywKKwkJCQkJIFdNODM1MF9JTV9XS1VQX0dQX1dBS0VVUF9FSU5UKTsKKwljYXNlIFdNODM1MF9JUlFfR1BJTygwKToKKwkJcmV0dXJuIHdtODM1MF9jbGVhcl9iaXRzKHdtODM1MCwKKwkJCQkJIFdNODM1MF9HUElPX0lOVF9TVEFUVVNfTUFTSywKKwkJCQkJIFdNODM1MF9JTV9HUDBfRUlOVCk7CisJY2FzZSBXTTgzNTBfSVJRX0dQSU8oMSk6CisJCXJldHVybiB3bTgzNTBfY2xlYXJfYml0cyh3bTgzNTAsCisJCQkJCSBXTTgzNTBfR1BJT19JTlRfU1RBVFVTX01BU0ssCisJCQkJCSBXTTgzNTBfSU1fR1AxX0VJTlQpOworCWNhc2UgV004MzUwX0lSUV9HUElPKDIpOgorCQlyZXR1cm4gd204MzUwX2NsZWFyX2JpdHMod204MzUwLAorCQkJCQkgV004MzUwX0dQSU9fSU5UX1NUQVRVU19NQVNLLAorCQkJCQkgV004MzUwX0lNX0dQMl9FSU5UKTsKKwljYXNlIFdNODM1MF9JUlFfR1BJTygzKToKKwkJcmV0dXJuIHdtODM1MF9jbGVhcl9iaXRzKHdtODM1MCwKKwkJCQkJIFdNODM1MF9HUElPX0lOVF9TVEFUVVNfTUFTSywKKwkJCQkJIFdNODM1MF9JTV9HUDNfRUlOVCk7CisJY2FzZSBXTTgzNTBfSVJRX0dQSU8oNCk6CisJCXJldHVybiB3bTgzNTBfY2xlYXJfYml0cyh3bTgzNTAsCisJCQkJCSBXTTgzNTBfR1BJT19JTlRfU1RBVFVTX01BU0ssCisJCQkJCSBXTTgzNTBfSU1fR1A0X0VJTlQpOworCWNhc2UgV004MzUwX0lSUV9HUElPKDUpOgorCQlyZXR1cm4gd204MzUwX2NsZWFyX2JpdHMod204MzUwLAorCQkJCQkgV004MzUwX0dQSU9fSU5UX1NUQVRVU19NQVNLLAorCQkJCQkgV004MzUwX0lNX0dQNV9FSU5UKTsKKwljYXNlIFdNODM1MF9JUlFfR1BJTyg2KToKKwkJcmV0dXJuIHdtODM1MF9jbGVhcl9iaXRzKHdtODM1MCwKKwkJCQkJIFdNODM1MF9HUElPX0lOVF9TVEFUVVNfTUFTSywKKwkJCQkJIFdNODM1MF9JTV9HUDZfRUlOVCk7CisJY2FzZSBXTTgzNTBfSVJRX0dQSU8oNyk6CisJCXJldHVybiB3bTgzNTBfY2xlYXJfYml0cyh3bTgzNTAsCisJCQkJCSBXTTgzNTBfR1BJT19JTlRfU1RBVFVTX01BU0ssCisJCQkJCSBXTTgzNTBfSU1fR1A3X0VJTlQpOworCWNhc2UgV004MzUwX0lSUV9HUElPKDgpOgorCQlyZXR1cm4gd204MzUwX2NsZWFyX2JpdHMod204MzUwLAorCQkJCQkgV004MzUwX0dQSU9fSU5UX1NUQVRVU19NQVNLLAorCQkJCQkgV004MzUwX0lNX0dQOF9FSU5UKTsKKwljYXNlIFdNODM1MF9JUlFfR1BJTyg5KToKKwkJcmV0dXJuIHdtODM1MF9jbGVhcl9iaXRzKHdtODM1MCwKKwkJCQkJIFdNODM1MF9HUElPX0lOVF9TVEFUVVNfTUFTSywKKwkJCQkJIFdNODM1MF9JTV9HUDlfRUlOVCk7CisJY2FzZSBXTTgzNTBfSVJRX0dQSU8oMTApOgorCQlyZXR1cm4gd204MzUwX2NsZWFyX2JpdHMod204MzUwLAorCQkJCQkgV004MzUwX0dQSU9fSU5UX1NUQVRVU19NQVNLLAorCQkJCQkgV004MzUwX0lNX0dQMTBfRUlOVCk7CisJY2FzZSBXTTgzNTBfSVJRX0dQSU8oMTEpOgorCQlyZXR1cm4gd204MzUwX2NsZWFyX2JpdHMod204MzUwLAorCQkJCQkgV004MzUwX0dQSU9fSU5UX1NUQVRVU19NQVNLLAorCQkJCQkgV004MzUwX0lNX0dQMTFfRUlOVCk7CisJY2FzZSBXTTgzNTBfSVJRX0dQSU8oMTIpOgorCQlyZXR1cm4gd204MzUwX2NsZWFyX2JpdHMod204MzUwLAorCQkJCQkgV004MzUwX0dQSU9fSU5UX1NUQVRVU19NQVNLLAorCQkJCQkgV004MzUwX0lNX0dQMTJfRUlOVCk7CisJZGVmYXVsdDoKKwkJZGV2X3dhcm4od204MzUwLT5kZXYsICJBdHRlbXB0aW5nIHRvIHVubWFzayB1bmtub3duIElSUSAlZFxuIiwKKwkJCSBpcnEpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MX0dQTCh3bTgzNTBfdW5tYXNrX2lycSk7CisKKy8qCisgKiBDYWNoZSBpcyBhbHdheXMgaG9zdCBlbmRpYW4uCisgKi8KK3N0YXRpYyBpbnQgd204MzUwX2NyZWF0ZV9jYWNoZShzdHJ1Y3Qgd204MzUwICp3bTgzNTAsIGludCBtb2RlKQoreworCWludCBpLCByZXQgPSAwOworCXUxNiB2YWx1ZTsKKwljb25zdCB1MTYgKnJlZ19tYXA7CisKKwlzd2l0Y2ggKG1vZGUpIHsKKyNpZmRlZiBDT05GSUdfTUZEX1dNODM1MF9DT05GSUdfTU9ERV8wCisJY2FzZSAwOgorCQlyZWdfbWFwID0gd204MzUwX21vZGUwX2RlZmF1bHRzOworCQlicmVhazsKKyNlbmRpZgorI2lmZGVmIENPTkZJR19NRkRfV004MzUwX0NPTkZJR19NT0RFXzEKKwljYXNlIDE6CisJCXJlZ19tYXAgPSB3bTgzNTBfbW9kZTFfZGVmYXVsdHM7CisJCWJyZWFrOworI2VuZGlmCisjaWZkZWYgQ09ORklHX01GRF9XTTgzNTBfQ09ORklHX01PREVfMgorCWNhc2UgMjoKKwkJcmVnX21hcCA9IHdtODM1MF9tb2RlMl9kZWZhdWx0czsKKwkJYnJlYWs7CisjZW5kaWYKKyNpZmRlZiBDT05GSUdfTUZEX1dNODM1MF9DT05GSUdfTU9ERV8zCisJY2FzZSAzOgorCQlyZWdfbWFwID0gd204MzUwX21vZGUzX2RlZmF1bHRzOworCQlicmVhazsKKyNlbmRpZgorCWRlZmF1bHQ6CisJCWRldl9lcnIod204MzUwLT5kZXYsICJDb25maWd1cmF0aW9uIG1vZGUgJWQgbm90IHN1cHBvcnRlZFxuIiwKKwkJCW1vZGUpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwl3bTgzNTAtPnJlZ19jYWNoZSA9CisJICAgIGt6YWxsb2Moc2l6ZW9mKHUxNikgKiAoV004MzUwX01BWF9SRUdJU1RFUiArIDEpLCBHRlBfS0VSTkVMKTsKKwlpZiAod204MzUwLT5yZWdfY2FjaGUgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwkvKiBSZWFkIHRoZSBpbml0aWFsIGNhY2hlIHN0YXRlIGJhY2sgZnJvbSB0aGUgZGV2aWNlIC0gdGhpcyBpcworCSAqIGEgUE1JQyBzbyB0aGUgZGV2aWNlIG1hbnkgbm90IGJlIGluIGEgdmlyZ2luIHN0YXRlIGFuZCB3ZQorCSAqIGNhbid0IHJlbHkgb24gdGhlIHNpbGljb24gdmFsdWVzLgorCSAqLworCWZvciAoaSA9IDA7IGkgPCBXTTgzNTBfTUFYX1JFR0lTVEVSOyBpKyspIHsKKwkJLyogYXVkaW8gcmVnaXN0ZXIgcmFuZ2UgKi8KKwkJaWYgKHdtODM1MF9yZWdfaW9fbWFwW2ldLnJlYWRhYmxlICYmCisJCSAgICAoaSA8IFdNODM1MF9DTE9DS19DT05UUk9MXzEgfHwgaSA+IFdNODM1MF9BSUZfVEVTVCkpIHsKKwkJCXJldCA9IHdtODM1MC0+cmVhZF9kZXYod204MzUwLCBpLCAyLCAoY2hhciAqKSZ2YWx1ZSk7CisJCQlpZiAocmV0IDwgMCkgeworCQkJCWRldl9lcnIod204MzUwLT5kZXYsCisJCQkJICAgICAgICJmYWlsZWQgdG8gcmVhZCBpbml0aWFsIGNhY2hlIHZhbHVlXG4iKTsKKwkJCQlnb3RvIG91dDsKKwkJCX0KKwkJCXZhbHVlID0gYmUxNl90b19jcHUodmFsdWUpOworCQkJdmFsdWUgJj0gd204MzUwX3JlZ19pb19tYXBbaV0ucmVhZGFibGU7CisJCQl3bTgzNTAtPnJlZ19jYWNoZVtpXSA9IHZhbHVlOworCQl9IGVsc2UKKwkJCXdtODM1MC0+cmVnX2NhY2hlW2ldID0gcmVnX21hcFtpXTsKKwl9CisKK291dDoKKwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTF9HUEwod204MzUwX2NyZWF0ZV9jYWNoZSk7CisKKy8qCisgKiBSZWdpc3RlciBhIGNsaWVudCBkZXZpY2UuICBUaGlzIGlzIG5vbi1mYXRhbCBzaW5jZSB0aGVyZSBpcyBubyBuZWVkIHRvCisgKiBmYWlsIHRoZSBlbnRpcmUgZGV2aWNlIGluaXQgZHVlIHRvIGEgc2luZ2xlIHBsYXRmb3JtIGRldmljZSBmYWlsaW5nLgorICovCitzdGF0aWMgdm9pZCB3bTgzNTBfY2xpZW50X2Rldl9yZWdpc3RlcihzdHJ1Y3Qgd204MzUwICp3bTgzNTAsCisJCQkJICAgICAgIGNvbnN0IGNoYXIgKm5hbWUsCisJCQkJICAgICAgIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKipwZGV2KQoreworCWludCByZXQ7CisKKwkqcGRldiA9IHBsYXRmb3JtX2RldmljZV9hbGxvYyhuYW1lLCAtMSk7CisJaWYgKHBkZXYgPT0gTlVMTCkgeworCQlkZXZfZXJyKHdtODM1MC0+ZGV2LCAiRmFpbGVkIHRvIGFsbG9jYXRlICVzXG4iLCBuYW1lKTsKKwkJcmV0dXJuOworCX0KKworCSgqcGRldiktPmRldi5wYXJlbnQgPSB3bTgzNTAtPmRldjsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YSgqcGRldiwgd204MzUwKTsKKwlyZXQgPSBwbGF0Zm9ybV9kZXZpY2VfYWRkKCpwZGV2KTsKKwlpZiAocmV0ICE9IDApIHsKKwkJZGV2X2Vycih3bTgzNTAtPmRldiwgIkZhaWxlZCB0byByZWdpc3RlciAlczogJWRcbiIsIG5hbWUsIHJldCk7CisJCXBsYXRmb3JtX2RldmljZV9wdXQoKnBkZXYpOworCQkqcGRldiA9IE5VTEw7CisJfQorfQorCitpbnQgd204MzUwX2RldmljZV9pbml0KHN0cnVjdCB3bTgzNTAgKndtODM1MCwgaW50IGlycSwKKwkJICAgICAgIHN0cnVjdCB3bTgzNTBfcGxhdGZvcm1fZGF0YSAqcGRhdGEpCit7CisJaW50IHJldCA9IC1FSU5WQUw7CisJdTE2IGlkMSwgaWQyLCBtYXNrLCBtb2RlOworCisJLyogZ2V0IFdNODM1MCByZXZpc2lvbiBhbmQgY29uZmlnIG1vZGUgKi8KKwl3bTgzNTAtPnJlYWRfZGV2KHdtODM1MCwgV004MzUwX1JFU0VUX0lELCBzaXplb2YoaWQxKSwgJmlkMSk7CisJd204MzUwLT5yZWFkX2Rldih3bTgzNTAsIFdNODM1MF9JRCwgc2l6ZW9mKGlkMiksICZpZDIpOworCisJaWQxID0gYmUxNl90b19jcHUoaWQxKTsKKwlpZDIgPSBiZTE2X3RvX2NwdShpZDIpOworCisJaWYgKGlkMSA9PSAweDYxNDMpIHsKKwkJc3dpdGNoICgoaWQyICYgV004MzUwX0NISVBfUkVWX01BU0spID4+IDEyKSB7CisJCWNhc2UgV004MzUwX1JFVl9FOgorCQkJZGV2X2luZm8od204MzUwLT5kZXYsICJGb3VuZCBSZXYgRSBkZXZpY2VcbiIpOworCQkJd204MzUwLT5yZXYgPSBXTTgzNTBfUkVWX0U7CisJCQlicmVhazsKKwkJY2FzZSBXTTgzNTBfUkVWX0Y6CisJCQlkZXZfaW5mbyh3bTgzNTAtPmRldiwgIkZvdW5kIFJldiBGIGRldmljZVxuIik7CisJCQl3bTgzNTAtPnJldiA9IFdNODM1MF9SRVZfRjsKKwkJCWJyZWFrOworCQljYXNlIFdNODM1MF9SRVZfRzoKKwkJCWRldl9pbmZvKHdtODM1MC0+ZGV2LCAiRm91bmQgUmV2IEcgZGV2aWNlXG4iKTsKKwkJCXdtODM1MC0+cmV2ID0gV004MzUwX1JFVl9HOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQkvKiBGb3Igc2FmZXR5IHdlIHJlZnVzZSB0byBydW4gb24gdW5rbm93biBoYXJkd2FyZSAqLworCQkJZGV2X2luZm8od204MzUwLT5kZXYsICJGb3VuZCB1bmtub3duIHJldlxuIik7CisJCQlyZXQgPSAtRU5PREVWOworCQkJZ290byBlcnI7CisJCX0KKwl9IGVsc2UgeworCQlkZXZfaW5mbyh3bTgzNTAtPmRldiwgIkRldmljZSB3aXRoIElEICV4IGlzIG5vdCBhIFdNODM1MFxuIiwKKwkJCSBpZDEpOworCQlyZXQgPSAtRU5PREVWOworCQlnb3RvIGVycjsKKwl9CisKKwltb2RlID0gaWQyICYgV004MzUwX0NPTkZfU1RTX01BU0sgPj4gMTA7CisJbWFzayA9IGlkMiAmIFdNODM1MF9DVVNUX0lEX01BU0s7CisJZGV2X2luZm8od204MzUwLT5kZXYsICJDb25maWcgbW9kZSAlZCwgUk9NIG1hc2sgJWRcbiIsIG1vZGUsIG1hc2spOworCisJcmV0ID0gd204MzUwX2NyZWF0ZV9jYWNoZSh3bTgzNTAsIG1vZGUpOworCWlmIChyZXQgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAid204MzUwOiBmYWlsZWQgdG8gY3JlYXRlIHJlZ2lzdGVyIGNhY2hlXG4iKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlpZiAocGRhdGEtPmluaXQpIHsKKwkJcmV0ID0gcGRhdGEtPmluaXQod204MzUwKTsKKwkJaWYgKHJldCAhPSAwKSB7CisJCQlkZXZfZXJyKHdtODM1MC0+ZGV2LCAiUGxhdGZvcm0gaW5pdCgpIGZhaWxlZDogJWRcbiIsCisJCQkJcmV0KTsKKwkJCWdvdG8gZXJyOworCQl9CisJfQorCisJbXV0ZXhfaW5pdCgmd204MzUwLT5pcnFfbXV0ZXgpOworCUlOSVRfV09SSygmd204MzUwLT5pcnFfd29yaywgd204MzUwX2lycV93b3JrZXIpOworCWlmIChpcnEpIHsKKwkJcmV0ID0gcmVxdWVzdF9pcnEoaXJxLCB3bTgzNTBfaXJxLCAwLAorCQkJCSAgIndtODM1MCIsIHdtODM1MCk7CisJCWlmIChyZXQgIT0gMCkgeworCQkJZGV2X2Vycih3bTgzNTAtPmRldiwgIkZhaWxlZCB0byByZXF1ZXN0IElSUTogJWRcbiIsCisJCQkJcmV0KTsKKwkJCWdvdG8gZXJyOworCQl9CisJfSBlbHNlIHsKKwkJZGV2X2Vycih3bTgzNTAtPmRldiwgIk5vIElSUSBjb25maWd1cmVkXG4iKTsKKwkJZ290byBlcnI7CisJfQorCXdtODM1MC0+Y2hpcF9pcnEgPSBpcnE7CisKKwl3bTgzNTBfcmVnX3dyaXRlKHdtODM1MCwgV004MzUwX1NZU1RFTV9JTlRFUlJVUFRTX01BU0ssIDB4MCk7CisKKwl3bTgzNTBfY2xpZW50X2Rldl9yZWdpc3Rlcih3bTgzNTAsICJ3bTgzNTAtY29kZWMiLAorCQkJCSAgICYod204MzUwLT5jb2RlYy5wZGV2KSk7CisJd204MzUwX2NsaWVudF9kZXZfcmVnaXN0ZXIod204MzUwLCAid204MzUwLWdwaW8iLAorCQkJCSAgICYod204MzUwLT5ncGlvLnBkZXYpKTsKKwl3bTgzNTBfY2xpZW50X2Rldl9yZWdpc3Rlcih3bTgzNTAsICJ3bTgzNTAtcG93ZXIiLAorCQkJCSAgICYod204MzUwLT5wb3dlci5wZGV2KSk7CisJd204MzUwX2NsaWVudF9kZXZfcmVnaXN0ZXIod204MzUwLCAid204MzUwLXJ0YyIsICYod204MzUwLT5ydGMucGRldikpOworCXdtODM1MF9jbGllbnRfZGV2X3JlZ2lzdGVyKHdtODM1MCwgIndtODM1MC13ZHQiLCAmKHdtODM1MC0+d2R0LnBkZXYpKTsKKworCXJldHVybiAwOworCitlcnI6CisJa2ZyZWUod204MzUwLT5yZWdfY2FjaGUpOworCXJldHVybiByZXQ7Cit9CitFWFBPUlRfU1lNQk9MX0dQTCh3bTgzNTBfZGV2aWNlX2luaXQpOworCit2b2lkIHdtODM1MF9kZXZpY2VfZXhpdChzdHJ1Y3Qgd204MzUwICp3bTgzNTApCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh3bTgzNTAtPnBtaWMucGRldik7IGkrKykKKwkJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIod204MzUwLT5wbWljLnBkZXZbaV0pOworCisJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIod204MzUwLT53ZHQucGRldik7CisJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIod204MzUwLT5ydGMucGRldik7CisJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIod204MzUwLT5wb3dlci5wZGV2KTsKKwlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3Rlcih3bTgzNTAtPmdwaW8ucGRldik7CisJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIod204MzUwLT5jb2RlYy5wZGV2KTsKKworCWZyZWVfaXJxKHdtODM1MC0+Y2hpcF9pcnEsIHdtODM1MCk7CisJZmx1c2hfd29yaygmd204MzUwLT5pcnFfd29yayk7CisJa2ZyZWUod204MzUwLT5yZWdfY2FjaGUpOworfQorRVhQT1JUX1NZTUJPTF9HUEwod204MzUwX2RldmljZV9leGl0KTsKKworTU9EVUxFX0RFU0NSSVBUSU9OKCJXTTgzNTAgQXVkaW9QbHVzIFBNSUMgY29yZSBkcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWZkL3dtODM1MC1ncGlvLmMgYi9kcml2ZXJzL21mZC93bTgzNTAtZ3Bpby5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmViZjk5YmUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21mZC93bTgzNTAtZ3Bpby5jCkBAIC0wLDAgKzEsMjIyIEBACisvKgorICogd204MzUwLWNvcmUuYyAgLS0gIERldmljZSBhY2Nlc3MgZm9yIFdvbGZzb24gV004MzUwCisgKgorICogQ29weXJpZ2h0IDIwMDcsIDIwMDggV29sZnNvbiBNaWNyb2VsZWN0cm9uaWNzIFBMQy4KKyAqCisgKiBBdXRob3I6IExpYW0gR2lyZHdvb2QKKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiAgdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgKiAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisKKyNpbmNsdWRlIDxsaW51eC9tZmQvd204MzUwL2NvcmUuaD4KKyNpbmNsdWRlIDxsaW51eC9tZmQvd204MzUwL2dwaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9tZmQvd204MzUwL3BtaWMuaD4KKworc3RhdGljIGludCBncGlvX3NldF9kaXIoc3RydWN0IHdtODM1MCAqd204MzUwLCBpbnQgZ3BpbywgaW50IGRpcikKK3sKKwlpbnQgcmV0OworCisJd204MzUwX3JlZ191bmxvY2sod204MzUwKTsKKwlpZiAoZGlyID09IFdNODM1MF9HUElPX0RJUl9PVVQpCisJCXJldCA9IHdtODM1MF9jbGVhcl9iaXRzKHdtODM1MCwKKwkJCQkJV004MzUwX0dQSU9fQ09ORklHVVJBVElPTl9JX08sCisJCQkJCTEgPDwgZ3Bpbyk7CisJZWxzZQorCQlyZXQgPSB3bTgzNTBfc2V0X2JpdHMod204MzUwLAorCQkJCSAgICAgIFdNODM1MF9HUElPX0NPTkZJR1VSQVRJT05fSV9PLAorCQkJCSAgICAgIDEgPDwgZ3Bpbyk7CisJd204MzUwX3JlZ19sb2NrKHdtODM1MCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBncGlvX3NldF9kZWJvdW5jZShzdHJ1Y3Qgd204MzUwICp3bTgzNTAsIGludCBncGlvLCBpbnQgZGIpCit7CisJaWYgKGRiID09IFdNODM1MF9HUElPX0RFQk9VTkNFX09OKQorCQlyZXR1cm4gd204MzUwX3NldF9iaXRzKHdtODM1MCwgV004MzUwX0dQSU9fREVCT1VOQ0UsCisJCQkJICAgICAgIDEgPDwgZ3Bpbyk7CisJZWxzZQorCQlyZXR1cm4gd204MzUwX2NsZWFyX2JpdHMod204MzUwLAorCQkJCQkgV004MzUwX0dQSU9fREVCT1VOQ0UsIDEgPDwgZ3Bpbyk7Cit9CisKK3N0YXRpYyBpbnQgZ3Bpb19zZXRfZnVuYyhzdHJ1Y3Qgd204MzUwICp3bTgzNTAsIGludCBncGlvLCBpbnQgZnVuYykKK3sKKwl1MTYgcmVnOworCisJd204MzUwX3JlZ191bmxvY2sod204MzUwKTsKKwlzd2l0Y2ggKGdwaW8pIHsKKwljYXNlIDA6CisJCXJlZyA9IHdtODM1MF9yZWdfcmVhZCh3bTgzNTAsIFdNODM1MF9HUElPX0ZVTkNUSU9OX1NFTEVDVF8xKQorCQkgICAgJiB+V004MzUwX0dQMF9GTl9NQVNLOworCQl3bTgzNTBfcmVnX3dyaXRlKHdtODM1MCwgV004MzUwX0dQSU9fRlVOQ1RJT05fU0VMRUNUXzEsCisJCQkJIHJlZyB8ICgoZnVuYyAmIDB4ZikgPDwgMCkpOworCQlicmVhazsKKwljYXNlIDE6CisJCXJlZyA9IHdtODM1MF9yZWdfcmVhZCh3bTgzNTAsIFdNODM1MF9HUElPX0ZVTkNUSU9OX1NFTEVDVF8xKQorCQkgICAgJiB+V004MzUwX0dQMV9GTl9NQVNLOworCQl3bTgzNTBfcmVnX3dyaXRlKHdtODM1MCwgV004MzUwX0dQSU9fRlVOQ1RJT05fU0VMRUNUXzEsCisJCQkJIHJlZyB8ICgoZnVuYyAmIDB4ZikgPDwgNCkpOworCQlicmVhazsKKwljYXNlIDI6CisJCXJlZyA9IHdtODM1MF9yZWdfcmVhZCh3bTgzNTAsIFdNODM1MF9HUElPX0ZVTkNUSU9OX1NFTEVDVF8xKQorCQkgICAgJiB+V004MzUwX0dQMl9GTl9NQVNLOworCQl3bTgzNTBfcmVnX3dyaXRlKHdtODM1MCwgV004MzUwX0dQSU9fRlVOQ1RJT05fU0VMRUNUXzEsCisJCQkJIHJlZyB8ICgoZnVuYyAmIDB4ZikgPDwgOCkpOworCQlicmVhazsKKwljYXNlIDM6CisJCXJlZyA9IHdtODM1MF9yZWdfcmVhZCh3bTgzNTAsIFdNODM1MF9HUElPX0ZVTkNUSU9OX1NFTEVDVF8xKQorCQkgICAgJiB+V004MzUwX0dQM19GTl9NQVNLOworCQl3bTgzNTBfcmVnX3dyaXRlKHdtODM1MCwgV004MzUwX0dQSU9fRlVOQ1RJT05fU0VMRUNUXzEsCisJCQkJIHJlZyB8ICgoZnVuYyAmIDB4ZikgPDwgMTIpKTsKKwkJYnJlYWs7CisJY2FzZSA0OgorCQlyZWcgPSB3bTgzNTBfcmVnX3JlYWQod204MzUwLCBXTTgzNTBfR1BJT19GVU5DVElPTl9TRUxFQ1RfMikKKwkJICAgICYgfldNODM1MF9HUDRfRk5fTUFTSzsKKwkJd204MzUwX3JlZ193cml0ZSh3bTgzNTAsIFdNODM1MF9HUElPX0ZVTkNUSU9OX1NFTEVDVF8yLAorCQkJCSByZWcgfCAoKGZ1bmMgJiAweGYpIDw8IDApKTsKKwkJYnJlYWs7CisJY2FzZSA1OgorCQlyZWcgPSB3bTgzNTBfcmVnX3JlYWQod204MzUwLCBXTTgzNTBfR1BJT19GVU5DVElPTl9TRUxFQ1RfMikKKwkJICAgICYgfldNODM1MF9HUDVfRk5fTUFTSzsKKwkJd204MzUwX3JlZ193cml0ZSh3bTgzNTAsIFdNODM1MF9HUElPX0ZVTkNUSU9OX1NFTEVDVF8yLAorCQkJCSByZWcgfCAoKGZ1bmMgJiAweGYpIDw8IDQpKTsKKwkJYnJlYWs7CisJY2FzZSA2OgorCQlyZWcgPSB3bTgzNTBfcmVnX3JlYWQod204MzUwLCBXTTgzNTBfR1BJT19GVU5DVElPTl9TRUxFQ1RfMikKKwkJICAgICYgfldNODM1MF9HUDZfRk5fTUFTSzsKKwkJd204MzUwX3JlZ193cml0ZSh3bTgzNTAsIFdNODM1MF9HUElPX0ZVTkNUSU9OX1NFTEVDVF8yLAorCQkJCSByZWcgfCAoKGZ1bmMgJiAweGYpIDw8IDgpKTsKKwkJYnJlYWs7CisJY2FzZSA3OgorCQlyZWcgPSB3bTgzNTBfcmVnX3JlYWQod204MzUwLCBXTTgzNTBfR1BJT19GVU5DVElPTl9TRUxFQ1RfMikKKwkJICAgICYgfldNODM1MF9HUDdfRk5fTUFTSzsKKwkJd204MzUwX3JlZ193cml0ZSh3bTgzNTAsIFdNODM1MF9HUElPX0ZVTkNUSU9OX1NFTEVDVF8yLAorCQkJCSByZWcgfCAoKGZ1bmMgJiAweGYpIDw8IDEyKSk7CisJCWJyZWFrOworCWNhc2UgODoKKwkJcmVnID0gd204MzUwX3JlZ19yZWFkKHdtODM1MCwgV004MzUwX0dQSU9fRlVOQ1RJT05fU0VMRUNUXzMpCisJCSAgICAmIH5XTTgzNTBfR1A4X0ZOX01BU0s7CisJCXdtODM1MF9yZWdfd3JpdGUod204MzUwLCBXTTgzNTBfR1BJT19GVU5DVElPTl9TRUxFQ1RfMywKKwkJCQkgcmVnIHwgKChmdW5jICYgMHhmKSA8PCAwKSk7CisJCWJyZWFrOworCWNhc2UgOToKKwkJcmVnID0gd204MzUwX3JlZ19yZWFkKHdtODM1MCwgV004MzUwX0dQSU9fRlVOQ1RJT05fU0VMRUNUXzMpCisJCSAgICAmIH5XTTgzNTBfR1A5X0ZOX01BU0s7CisJCXdtODM1MF9yZWdfd3JpdGUod204MzUwLCBXTTgzNTBfR1BJT19GVU5DVElPTl9TRUxFQ1RfMywKKwkJCQkgcmVnIHwgKChmdW5jICYgMHhmKSA8PCA0KSk7CisJCWJyZWFrOworCWNhc2UgMTA6CisJCXJlZyA9IHdtODM1MF9yZWdfcmVhZCh3bTgzNTAsIFdNODM1MF9HUElPX0ZVTkNUSU9OX1NFTEVDVF8zKQorCQkgICAgJiB+V004MzUwX0dQMTBfRk5fTUFTSzsKKwkJd204MzUwX3JlZ193cml0ZSh3bTgzNTAsIFdNODM1MF9HUElPX0ZVTkNUSU9OX1NFTEVDVF8zLAorCQkJCSByZWcgfCAoKGZ1bmMgJiAweGYpIDw8IDgpKTsKKwkJYnJlYWs7CisJY2FzZSAxMToKKwkJcmVnID0gd204MzUwX3JlZ19yZWFkKHdtODM1MCwgV004MzUwX0dQSU9fRlVOQ1RJT05fU0VMRUNUXzMpCisJCSAgICAmIH5XTTgzNTBfR1AxMV9GTl9NQVNLOworCQl3bTgzNTBfcmVnX3dyaXRlKHdtODM1MCwgV004MzUwX0dQSU9fRlVOQ1RJT05fU0VMRUNUXzMsCisJCQkJIHJlZyB8ICgoZnVuYyAmIDB4ZikgPDwgMTIpKTsKKwkJYnJlYWs7CisJY2FzZSAxMjoKKwkJcmVnID0gd204MzUwX3JlZ19yZWFkKHdtODM1MCwgV004MzUwX0dQSU9fRlVOQ1RJT05fU0VMRUNUXzQpCisJCSAgICAmIH5XTTgzNTBfR1AxMl9GTl9NQVNLOworCQl3bTgzNTBfcmVnX3dyaXRlKHdtODM1MCwgV004MzUwX0dQSU9fRlVOQ1RJT05fU0VMRUNUXzQsCisJCQkJIHJlZyB8ICgoZnVuYyAmIDB4ZikgPDwgMCkpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQl3bTgzNTBfcmVnX2xvY2sod204MzUwKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJd204MzUwX3JlZ19sb2NrKHdtODM1MCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZ3Bpb19zZXRfcHVsbF91cChzdHJ1Y3Qgd204MzUwICp3bTgzNTAsIGludCBncGlvLCBpbnQgdXApCit7CisJaWYgKHVwKQorCQlyZXR1cm4gd204MzUwX3NldF9iaXRzKHdtODM1MCwKKwkJCQkgICAgICAgV004MzUwX0dQSU9fUElOX1BVTExfVVBfQ09OVFJPTCwKKwkJCQkgICAgICAgMSA8PCBncGlvKTsKKwllbHNlCisJCXJldHVybiB3bTgzNTBfY2xlYXJfYml0cyh3bTgzNTAsCisJCQkJCSBXTTgzNTBfR1BJT19QSU5fUFVMTF9VUF9DT05UUk9MLAorCQkJCQkgMSA8PCBncGlvKTsKK30KKworc3RhdGljIGludCBncGlvX3NldF9wdWxsX2Rvd24oc3RydWN0IHdtODM1MCAqd204MzUwLCBpbnQgZ3BpbywgaW50IGRvd24pCit7CisJaWYgKGRvd24pCisJCXJldHVybiB3bTgzNTBfc2V0X2JpdHMod204MzUwLAorCQkJCSAgICAgICBXTTgzNTBfR1BJT19QVUxMX0RPV05fQ09OVFJPTCwKKwkJCQkgICAgICAgMSA8PCBncGlvKTsKKwllbHNlCisJCXJldHVybiB3bTgzNTBfY2xlYXJfYml0cyh3bTgzNTAsCisJCQkJCSBXTTgzNTBfR1BJT19QVUxMX0RPV05fQ09OVFJPTCwKKwkJCQkJIDEgPDwgZ3Bpbyk7Cit9CisKK3N0YXRpYyBpbnQgZ3Bpb19zZXRfcG9sYXJpdHkoc3RydWN0IHdtODM1MCAqd204MzUwLCBpbnQgZ3BpbywgaW50IHBvbCkKK3sKKwlpZiAocG9sID09IFdNODM1MF9HUElPX0FDVElWRV9ISUdIKQorCQlyZXR1cm4gd204MzUwX3NldF9iaXRzKHdtODM1MCwKKwkJCQkgICAgICAgV004MzUwX0dQSU9fUElOX1BPTEFSSVRZX1RZUEUsCisJCQkJICAgICAgIDEgPDwgZ3Bpbyk7CisJZWxzZQorCQlyZXR1cm4gd204MzUwX2NsZWFyX2JpdHMod204MzUwLAorCQkJCQkgV004MzUwX0dQSU9fUElOX1BPTEFSSVRZX1RZUEUsCisJCQkJCSAxIDw8IGdwaW8pOworfQorCitzdGF0aWMgaW50IGdwaW9fc2V0X2ludmVydChzdHJ1Y3Qgd204MzUwICp3bTgzNTAsIGludCBncGlvLCBpbnQgaW52ZXJ0KQoreworCWlmIChpbnZlcnQgPT0gV004MzUwX0dQSU9fSU5WRVJUX09OKQorCQlyZXR1cm4gd204MzUwX3NldF9iaXRzKHdtODM1MCwgV004MzUwX0dQSU9fSU5UX01PREUsIDEgPDwgZ3Bpbyk7CisJZWxzZQorCQlyZXR1cm4gd204MzUwX2NsZWFyX2JpdHMod204MzUwLAorCQkJCQkgV004MzUwX0dQSU9fSU5UX01PREUsIDEgPDwgZ3Bpbyk7Cit9CisKK2ludCB3bTgzNTBfZ3Bpb19jb25maWcoc3RydWN0IHdtODM1MCAqd204MzUwLCBpbnQgZ3BpbywgaW50IGRpciwgaW50IGZ1bmMsCisJCSAgICAgICBpbnQgcG9sLCBpbnQgcHVsbCwgaW50IGludmVydCwgaW50IGRlYm91bmNlKQoreworCS8qIG1ha2Ugc3VyZSB3ZSBuZXZlciBwdWxsIHVwIGFuZCBkb3duIGF0IHRoZSBzYW1lIHRpbWUgKi8KKwlpZiAocHVsbCA9PSBXTTgzNTBfR1BJT19QVUxMX05PTkUpIHsKKwkJaWYgKGdwaW9fc2V0X3B1bGxfdXAod204MzUwLCBncGlvLCAwKSkKKwkJCWdvdG8gZXJyOworCQlpZiAoZ3Bpb19zZXRfcHVsbF9kb3duKHdtODM1MCwgZ3BpbywgMCkpCisJCQlnb3RvIGVycjsKKwl9IGVsc2UgaWYgKHB1bGwgPT0gV004MzUwX0dQSU9fUFVMTF9VUCkgeworCQlpZiAoZ3Bpb19zZXRfcHVsbF9kb3duKHdtODM1MCwgZ3BpbywgMCkpCisJCQlnb3RvIGVycjsKKwkJaWYgKGdwaW9fc2V0X3B1bGxfdXAod204MzUwLCBncGlvLCAxKSkKKwkJCWdvdG8gZXJyOworCX0gZWxzZSBpZiAocHVsbCA9PSBXTTgzNTBfR1BJT19QVUxMX0RPV04pIHsKKwkJaWYgKGdwaW9fc2V0X3B1bGxfdXAod204MzUwLCBncGlvLCAwKSkKKwkJCWdvdG8gZXJyOworCQlpZiAoZ3Bpb19zZXRfcHVsbF9kb3duKHdtODM1MCwgZ3BpbywgMSkpCisJCQlnb3RvIGVycjsKKwl9CisKKwlpZiAoZ3Bpb19zZXRfaW52ZXJ0KHdtODM1MCwgZ3BpbywgaW52ZXJ0KSkKKwkJZ290byBlcnI7CisJaWYgKGdwaW9fc2V0X3BvbGFyaXR5KHdtODM1MCwgZ3BpbywgcG9sKSkKKwkJZ290byBlcnI7CisJaWYgKGdwaW9fc2V0X2RlYm91bmNlKHdtODM1MCwgZ3BpbywgZGVib3VuY2UpKQorCQlnb3RvIGVycjsKKwlpZiAoZ3Bpb19zZXRfZGlyKHdtODM1MCwgZ3BpbywgZGlyKSkKKwkJZ290byBlcnI7CisJcmV0dXJuIGdwaW9fc2V0X2Z1bmMod204MzUwLCBncGlvLCBmdW5jKTsKKworZXJyOgorCXJldHVybiAtRUlPOworfQorRVhQT1JUX1NZTUJPTF9HUEwod204MzUwX2dwaW9fY29uZmlnKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWZkL3dtODM1MC1pMmMuYyBiL2RyaXZlcnMvbWZkL3dtODM1MC1pMmMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZGZlMjFiCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZmQvd204MzUwLWkyYy5jCkBAIC0wLDAgKzEsMTIwIEBACisvKgorICogd204MzUwLWkyYy5jICAtLSAgR2VuZXJpYyBJMkMgZHJpdmVyIGZvciBXb2xmc29uIFdNODM1MCBQTUlDCisgKgorICogVGhpcyBkcml2ZXIgZGVmaW5lcyBhbmQgY29uZmlndXJlcyB0aGUgV004MzUwIGZvciB0aGUgRnJlZXNjYWxlIGkuTVgzMkFEUy4KKyAqCisgKiBDb3B5cmlnaHQgMjAwNywgMjAwOCBXb2xmc29uIE1pY3JvZWxlY3Ryb25pY3MgUExDLgorICoKKyAqIEF1dGhvcjogTGlhbSBHaXJkd29vZAorICogICAgICAgICBsaW51eEB3b2xmc29ubWljcm8uY29tCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAorICogIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgorICogIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9tZmQvd204MzUwL2NvcmUuaD4KKworc3RhdGljIGludCB3bTgzNTBfaTJjX3JlYWRfZGV2aWNlKHN0cnVjdCB3bTgzNTAgKndtODM1MCwgY2hhciByZWcsCisJCQkJICBpbnQgYnl0ZXMsIHZvaWQgKmRlc3QpCit7CisJaW50IHJldDsKKworCXJldCA9IGkyY19tYXN0ZXJfc2VuZCh3bTgzNTAtPmkyY19jbGllbnQsICZyZWcsIDEpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCXJldHVybiBpMmNfbWFzdGVyX3JlY3Yod204MzUwLT5pMmNfY2xpZW50LCBkZXN0LCBieXRlcyk7Cit9CisKK3N0YXRpYyBpbnQgd204MzUwX2kyY193cml0ZV9kZXZpY2Uoc3RydWN0IHdtODM1MCAqd204MzUwLCBjaGFyIHJlZywKKwkJCQkgICBpbnQgYnl0ZXMsIHZvaWQgKnNyYykKK3sKKwkvKiB3ZSBhZGQgMSBieXRlIGZvciBkZXZpY2UgcmVnaXN0ZXIgKi8KKwl1OCBtc2dbKFdNODM1MF9NQVhfUkVHSVNURVIgPDwgMSkgKyAxXTsKKworCWlmIChieXRlcyA+ICgoV004MzUwX01BWF9SRUdJU1RFUiA8PCAxKSArIDEpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCW1zZ1swXSA9IHJlZzsKKwltZW1jcHkoJm1zZ1sxXSwgc3JjLCBieXRlcyk7CisJcmV0dXJuIGkyY19tYXN0ZXJfc2VuZCh3bTgzNTAtPmkyY19jbGllbnQsIG1zZywgYnl0ZXMgKyAxKTsKK30KKworc3RhdGljIGludCB3bTgzNTBfaTJjX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICppMmMsCisJCQkgICAgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKQoreworCXN0cnVjdCB3bTgzNTAgKndtODM1MDsKKwlpbnQgcmV0ID0gMDsKKworCXdtODM1MCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB3bTgzNTApLCBHRlBfS0VSTkVMKTsKKwlpZiAod204MzUwID09IE5VTEwpIHsKKwkJa2ZyZWUoaTJjKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJaTJjX3NldF9jbGllbnRkYXRhKGkyYywgd204MzUwKTsKKwl3bTgzNTAtPmRldiA9ICZpMmMtPmRldjsKKwl3bTgzNTAtPmkyY19jbGllbnQgPSBpMmM7CisJd204MzUwLT5yZWFkX2RldiA9IHdtODM1MF9pMmNfcmVhZF9kZXZpY2U7CisJd204MzUwLT53cml0ZV9kZXYgPSB3bTgzNTBfaTJjX3dyaXRlX2RldmljZTsKKworCXJldCA9IHdtODM1MF9kZXZpY2VfaW5pdCh3bTgzNTAsIGkyYy0+aXJxLCBpMmMtPmRldi5wbGF0Zm9ybV9kYXRhKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBlcnI7CisKKwlyZXR1cm4gcmV0OworCitlcnI6CisJa2ZyZWUod204MzUwKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHdtODM1MF9pMmNfcmVtb3ZlKHN0cnVjdCBpMmNfY2xpZW50ICppMmMpCit7CisJc3RydWN0IHdtODM1MCAqd204MzUwID0gaTJjX2dldF9jbGllbnRkYXRhKGkyYyk7CisKKwl3bTgzNTBfZGV2aWNlX2V4aXQod204MzUwKTsKKwlrZnJlZSh3bTgzNTApOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCB3bTgzNTBfaTJjX2lkW10gPSB7CisgICAgICAgeyAid204MzUwIiwgMCB9LAorICAgICAgIHsgfQorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUoaTJjLCB3bTgzNTBfaTJjX2lkKTsKKworCitzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgd204MzUwX2kyY19kcml2ZXIgPSB7CisJLmRyaXZlciA9IHsKKwkJICAgLm5hbWUgPSAid204MzUwIiwKKwkJICAgLm93bmVyID0gVEhJU19NT0RVTEUsCisJfSwKKwkucHJvYmUgPSB3bTgzNTBfaTJjX3Byb2JlLAorCS5yZW1vdmUgPSB3bTgzNTBfaTJjX3JlbW92ZSwKKwkuaWRfdGFibGUgPSB3bTgzNTBfaTJjX2lkLAorfTsKKworc3RhdGljIGludCBfX2luaXQgd204MzUwX2kyY19pbml0KHZvaWQpCit7CisJcmV0dXJuIGkyY19hZGRfZHJpdmVyKCZ3bTgzNTBfaTJjX2RyaXZlcik7Cit9CisvKiBpbml0IGVhcmx5IHNvIGNvbnN1bWVyIGRldmljZXMgY2FuIGNvbXBsZXRlIHN5c3RlbSBib290ICovCitzdWJzeXNfaW5pdGNhbGwod204MzUwX2kyY19pbml0KTsKKworc3RhdGljIHZvaWQgX19leGl0IHdtODM1MF9pMmNfZXhpdCh2b2lkKQoreworCWkyY19kZWxfZHJpdmVyKCZ3bTgzNTBfaTJjX2RyaXZlcik7Cit9Cittb2R1bGVfZXhpdCh3bTgzNTBfaTJjX2V4aXQpOworCitNT0RVTEVfREVTQ1JJUFRJT04oIkkyQyBzdXBwb3J0IGZvciB0aGUgV004MzUwIEF1ZGlvUGx1cyBQTUlDIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21mZC93bTgzNTAtcmVnbWFwLmMgYi9kcml2ZXJzL21mZC93bTgzNTAtcmVnbWFwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTc0Njc4ZAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWZkL3dtODM1MC1yZWdtYXAuYwpAQCAtMCwwICsxLDEzNDcgQEAKKy8qCisgKiB3bTgzNTAtcmVnbWFwLmMgIC0tICBXb2xmc29uIE1pY3JvZWxlY3Ryb25pY3MgV004MzUwIHJlZ2lzdGVyIG1hcAorICoKKyAqIFRoaXMgZmlsZSBzcGxpdHMgb3V0IHRoZSB0YWJsZXMgZGVzY3JpYmluZyB0aGUgZGVmYXVsdHMgYW5kIGFjY2VzcworICogc3RhdHVzIG9mIHRoZSBXTTgzNTAgcmVnaXN0ZXJzIHNpbmNlIHRoZXkgYXJlIHJhdGhlciBsYXJnZS4KKyAqCisgKiBDb3B5cmlnaHQgMjAwNywgMjAwOCBXb2xmc29uIE1pY3JvZWxlY3Ryb25pY3MgUExDLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqICB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tZmQvd204MzUwL2NvcmUuaD4KKworI2lmZGVmIENPTkZJR19NRkRfV004MzUwX0NPTkZJR19NT0RFXzAKKworI3VuZGVmIFdNODM1MF9IQVZFX0NPTkZJR19NT0RFCisjZGVmaW5lIFdNODM1MF9IQVZFX0NPTkZJR19NT0RFCisKK2NvbnN0IHUxNiB3bTgzNTBfbW9kZTBfZGVmYXVsdHNbXSA9IHsKKwkweDE3RkYsICAgICAvKiBSMCAgIC0gUmVzZXQvSUQgKi8KKwkweDEwMDAsICAgICAvKiBSMSAgIC0gSUQgKi8KKwkweDAwMDAsICAgICAvKiBSMiAqLworCTB4MTAwMiwgICAgIC8qIFIzICAgLSBTeXN0ZW0gQ29udHJvbCAxICovCisJMHgwMDA0LCAgICAgLyogUjQgICAtIFN5c3RlbSBDb250cm9sIDIgKi8KKwkweDAwMDAsICAgICAvKiBSNSAgIC0gU3lzdGVtIEhpYmVybmF0ZSAqLworCTB4OEEwMCwgICAgIC8qIFI2ICAgLSBJbnRlcmZhY2UgQ29udHJvbCAqLworCTB4MDAwMCwgICAgIC8qIFI3ICovCisJMHg4MDAwLCAgICAgLyogUjggICAtIFBvd2VyIG1nbXQgKDEpICovCisJMHgwMDAwLCAgICAgLyogUjkgICAtIFBvd2VyIG1nbXQgKDIpICovCisJMHgwMDAwLCAgICAgLyogUjEwICAtIFBvd2VyIG1nbXQgKDMpICovCisJMHgyMDAwLCAgICAgLyogUjExICAtIFBvd2VyIG1nbXQgKDQpICovCisJMHgwRTAwLCAgICAgLyogUjEyICAtIFBvd2VyIG1nbXQgKDUpICovCisJMHgwMDAwLCAgICAgLyogUjEzICAtIFBvd2VyIG1nbXQgKDYpICovCisJMHgwMDAwLCAgICAgLyogUjE0ICAtIFBvd2VyIG1nbXQgKDcpICovCisJMHgwMDAwLCAgICAgLyogUjE1ICovCisJMHgwMDAwLCAgICAgLyogUjE2ICAtIFJUQyBTZWNvbmRzL01pbnV0ZXMgKi8KKwkweDAxMDAsICAgICAvKiBSMTcgIC0gUlRDIEhvdXJzL0RheSAqLworCTB4MDEwMSwgICAgIC8qIFIxOCAgLSBSVEMgRGF0ZS9Nb250aCAqLworCTB4MTQwMCwgICAgIC8qIFIxOSAgLSBSVEMgWWVhciAqLworCTB4MDAwMCwgICAgIC8qIFIyMCAgLSBBbGFybSBTZWNvbmRzL01pbnV0ZXMgKi8KKwkweDAwMDAsICAgICAvKiBSMjEgIC0gQWxhcm0gSG91cnMvRGF5ICovCisJMHgwMDAwLCAgICAgLyogUjIyICAtIEFsYXJtIERhdGUvTW9udGggKi8KKwkweDAzMjAsICAgICAvKiBSMjMgIC0gUlRDIFRpbWUgQ29udHJvbCAqLworCTB4MDAwMCwgICAgIC8qIFIyNCAgLSBTeXN0ZW0gSW50ZXJydXB0cyAqLworCTB4MDAwMCwgICAgIC8qIFIyNSAgLSBJbnRlcnJ1cHQgU3RhdHVzIDEgKi8KKwkweDAwMDAsICAgICAvKiBSMjYgIC0gSW50ZXJydXB0IFN0YXR1cyAyICovCisJMHgwMDAwLCAgICAgLyogUjI3ICAtIFBvd2VyIFVwIEludGVycnVwdCBTdGF0dXMgKi8KKwkweDAwMDAsICAgICAvKiBSMjggIC0gVW5kZXIgVm9sdGFnZSBJbnRlcnJ1cHQgc3RhdHVzICovCisJMHgwMDAwLCAgICAgLyogUjI5ICAtIE92ZXIgQ3VycmVudCBJbnRlcnJ1cHQgc3RhdHVzICovCisJMHgwMDAwLCAgICAgLyogUjMwICAtIEdQSU8gSW50ZXJydXB0IFN0YXR1cyAqLworCTB4MDAwMCwgICAgIC8qIFIzMSAgLSBDb21wYXJhdG9yIEludGVycnVwdCBTdGF0dXMgKi8KKwkweDNGRkYsICAgICAvKiBSMzIgIC0gU3lzdGVtIEludGVycnVwdHMgTWFzayAqLworCTB4MDAwMCwgICAgIC8qIFIzMyAgLSBJbnRlcnJ1cHQgU3RhdHVzIDEgTWFzayAqLworCTB4MDAwMCwgICAgIC8qIFIzNCAgLSBJbnRlcnJ1cHQgU3RhdHVzIDIgTWFzayAqLworCTB4MDAwMCwgICAgIC8qIFIzNSAgLSBQb3dlciBVcCBJbnRlcnJ1cHQgU3RhdHVzIE1hc2sgKi8KKwkweDAwMDAsICAgICAvKiBSMzYgIC0gVW5kZXIgVm9sdGFnZSBJbnRlcnJ1cHQgc3RhdHVzIE1hc2sgKi8KKwkweDAwMDAsICAgICAvKiBSMzcgIC0gT3ZlciBDdXJyZW50IEludGVycnVwdCBzdGF0dXMgTWFzayAqLworCTB4MDAwMCwgICAgIC8qIFIzOCAgLSBHUElPIEludGVycnVwdCBTdGF0dXMgTWFzayAqLworCTB4MDAwMCwgICAgIC8qIFIzOSAgLSBDb21wYXJhdG9yIEludGVycnVwdCBTdGF0dXMgTWFzayAqLworCTB4MDA0MCwgICAgIC8qIFI0MCAgLSBDbG9jayBDb250cm9sIDEgKi8KKwkweDAwMDAsICAgICAvKiBSNDEgIC0gQ2xvY2sgQ29udHJvbCAyICovCisJMHgzQjAwLCAgICAgLyogUjQyICAtIEZMTCBDb250cm9sIDEgKi8KKwkweDcwODYsICAgICAvKiBSNDMgIC0gRkxMIENvbnRyb2wgMiAqLworCTB4QzIyNiwgICAgIC8qIFI0NCAgLSBGTEwgQ29udHJvbCAzICovCisJMHgwMDAwLCAgICAgLyogUjQ1ICAtIEZMTCBDb250cm9sIDQgKi8KKwkweDAwMDAsICAgICAvKiBSNDYgKi8KKwkweDAwMDAsICAgICAvKiBSNDcgKi8KKwkweDAwMDAsICAgICAvKiBSNDggIC0gREFDIENvbnRyb2wgKi8KKwkweDAwMDAsICAgICAvKiBSNDkgKi8KKwkweDAwQzAsICAgICAvKiBSNTAgIC0gREFDIERpZ2l0YWwgVm9sdW1lIEwgKi8KKwkweDAwQzAsICAgICAvKiBSNTEgIC0gREFDIERpZ2l0YWwgVm9sdW1lIFIgKi8KKwkweDAwMDAsICAgICAvKiBSNTIgKi8KKwkweDAwNDAsICAgICAvKiBSNTMgIC0gREFDIExSIFJhdGUgKi8KKwkweDAwMDAsICAgICAvKiBSNTQgIC0gREFDIENsb2NrIENvbnRyb2wgKi8KKwkweDAwMDAsICAgICAvKiBSNTUgKi8KKwkweDAwMDAsICAgICAvKiBSNTYgKi8KKwkweDAwMDAsICAgICAvKiBSNTcgKi8KKwkweDQwMDAsICAgICAvKiBSNTggIC0gREFDIE11dGUgKi8KKwkweDAwMDAsICAgICAvKiBSNTkgIC0gREFDIE11dGUgVm9sdW1lICovCisJMHgwMDAwLCAgICAgLyogUjYwICAtIERBQyBTaWRlICovCisJMHgwMDAwLCAgICAgLyogUjYxICovCisJMHgwMDAwLCAgICAgLyogUjYyICovCisJMHgwMDAwLCAgICAgLyogUjYzICovCisJMHg4MDAwLCAgICAgLyogUjY0ICAtIEFEQyBDb250cm9sICovCisJMHgwMDAwLCAgICAgLyogUjY1ICovCisJMHgwMEMwLCAgICAgLyogUjY2ICAtIEFEQyBEaWdpdGFsIFZvbHVtZSBMICovCisJMHgwMEMwLCAgICAgLyogUjY3ICAtIEFEQyBEaWdpdGFsIFZvbHVtZSBSICovCisJMHgwMDAwLCAgICAgLyogUjY4ICAtIEFEQyBEaXZpZGVyICovCisJMHgwMDAwLCAgICAgLyogUjY5ICovCisJMHgwMDQwLCAgICAgLyogUjcwICAtIEFEQyBMUiBSYXRlICovCisJMHgwMDAwLCAgICAgLyogUjcxICovCisJMHgwMzAzLCAgICAgLyogUjcyICAtIElucHV0IENvbnRyb2wgKi8KKwkweDAwMDAsICAgICAvKiBSNzMgIC0gSU4zIElucHV0IENvbnRyb2wgKi8KKwkweDAwMDAsICAgICAvKiBSNzQgIC0gTWljIEJpYXMgQ29udHJvbCAqLworCTB4MDAwMCwgICAgIC8qIFI3NSAqLworCTB4MDAwMCwgICAgIC8qIFI3NiAgLSBPdXRwdXQgQ29udHJvbCAqLworCTB4MDAwMCwgICAgIC8qIFI3NyAgLSBKYWNrIERldGVjdCAqLworCTB4MDAwMCwgICAgIC8qIFI3OCAgLSBBbnRpIFBvcCBDb250cm9sICovCisJMHgwMDAwLCAgICAgLyogUjc5ICovCisJMHgwMDQwLCAgICAgLyogUjgwICAtIExlZnQgSW5wdXQgVm9sdW1lICovCisJMHgwMDQwLCAgICAgLyogUjgxICAtIFJpZ2h0IElucHV0IFZvbHVtZSAqLworCTB4MDAwMCwgICAgIC8qIFI4MiAqLworCTB4MDAwMCwgICAgIC8qIFI4MyAqLworCTB4MDAwMCwgICAgIC8qIFI4NCAqLworCTB4MDAwMCwgICAgIC8qIFI4NSAqLworCTB4MDAwMCwgICAgIC8qIFI4NiAqLworCTB4MDAwMCwgICAgIC8qIFI4NyAqLworCTB4MDgwMCwgICAgIC8qIFI4OCAgLSBMZWZ0IE1peGVyIENvbnRyb2wgKi8KKwkweDEwMDAsICAgICAvKiBSODkgIC0gUmlnaHQgTWl4ZXIgQ29udHJvbCAqLworCTB4MDAwMCwgICAgIC8qIFI5MCAqLworCTB4MDAwMCwgICAgIC8qIFI5MSAqLworCTB4MDAwMCwgICAgIC8qIFI5MiAgLSBPVVQzIE1peGVyIENvbnRyb2wgKi8KKwkweDAwMDAsICAgICAvKiBSOTMgIC0gT1VUNCBNaXhlciBDb250cm9sICovCisJMHgwMDAwLCAgICAgLyogUjk0ICovCisJMHgwMDAwLCAgICAgLyogUjk1ICovCisJMHgwMDAwLCAgICAgLyogUjk2ICAtIE91dHB1dCBMZWZ0IE1peGVyIFZvbHVtZSAqLworCTB4MDAwMCwgICAgIC8qIFI5NyAgLSBPdXRwdXQgUmlnaHQgTWl4ZXIgVm9sdW1lICovCisJMHgwMDAwLCAgICAgLyogUjk4ICAtIElucHV0IE1peGVyIFZvbHVtZSBMICovCisJMHgwMDAwLCAgICAgLyogUjk5ICAtIElucHV0IE1peGVyIFZvbHVtZSBSICovCisJMHgwMDAwLCAgICAgLyogUjEwMCAtIElucHV0IE1peGVyIFZvbHVtZSAqLworCTB4MDAwMCwgICAgIC8qIFIxMDEgKi8KKwkweDAwMDAsICAgICAvKiBSMTAyICovCisJMHgwMDAwLCAgICAgLyogUjEwMyAqLworCTB4MDBFNCwgICAgIC8qIFIxMDQgLSBMT1VUMSBWb2x1bWUgKi8KKwkweDAwRTQsICAgICAvKiBSMTA1IC0gUk9VVDEgVm9sdW1lICovCisJMHgwMEU0LCAgICAgLyogUjEwNiAtIExPVVQyIFZvbHVtZSAqLworCTB4MDJFNCwgICAgIC8qIFIxMDcgLSBST1VUMiBWb2x1bWUgKi8KKwkweDAwMDAsICAgICAvKiBSMTA4ICovCisJMHgwMDAwLCAgICAgLyogUjEwOSAqLworCTB4MDAwMCwgICAgIC8qIFIxMTAgKi8KKwkweDAwMDAsICAgICAvKiBSMTExIC0gQkVFUCBWb2x1bWUgKi8KKwkweDBBMDAsICAgICAvKiBSMTEyIC0gQUkgRm9ybWF0aW5nICovCisJMHgwMDAwLCAgICAgLyogUjExMyAtIEFEQyBEQUMgQ09NUCAqLworCTB4MDAyMCwgICAgIC8qIFIxMTQgLSBBSSBBREMgQ29udHJvbCAqLworCTB4MDAyMCwgICAgIC8qIFIxMTUgLSBBSSBEQUMgQ29udHJvbCAqLworCTB4MDAwMCwgICAgIC8qIFIxMTYgLSBBSUYgVGVzdCAqLworCTB4MDAwMCwgICAgIC8qIFIxMTcgKi8KKwkweDAwMDAsICAgICAvKiBSMTE4ICovCisJMHgwMDAwLCAgICAgLyogUjExOSAqLworCTB4MDAwMCwgICAgIC8qIFIxMjAgKi8KKwkweDAwMDAsICAgICAvKiBSMTIxICovCisJMHgwMDAwLCAgICAgLyogUjEyMiAqLworCTB4MDAwMCwgICAgIC8qIFIxMjMgKi8KKwkweDAwMDAsICAgICAvKiBSMTI0ICovCisJMHgwMDAwLCAgICAgLyogUjEyNSAqLworCTB4MDAwMCwgICAgIC8qIFIxMjYgKi8KKwkweDAwMDAsICAgICAvKiBSMTI3ICovCisJMHgxRkZGLCAgICAgLyogUjEyOCAtIEdQSU8gRGVib3VuY2UgKi8KKwkweDAwMDAsICAgICAvKiBSMTI5IC0gR1BJTyBQaW4gcHVsbCB1cCBDb250cm9sICovCisJMHgwM0ZDLCAgICAgLyogUjEzMCAtIEdQSU8gUHVsbCBkb3duIENvbnRyb2wgKi8KKwkweDAwMDAsICAgICAvKiBSMTMxIC0gR1BJTyBJbnRlcnJ1cHQgTW9kZSAqLworCTB4MDAwMCwgICAgIC8qIFIxMzIgKi8KKwkweDAwMDAsICAgICAvKiBSMTMzIC0gR1BJTyBDb250cm9sICovCisJMHgwRkZDLCAgICAgLyogUjEzNCAtIEdQSU8gQ29uZmlndXJhdGlvbiAoaS9vKSAqLworCTB4MEZGQywgICAgIC8qIFIxMzUgLSBHUElPIFBpbiBQb2xhcml0eSAvIFR5cGUgKi8KKwkweDAwMDAsICAgICAvKiBSMTM2ICovCisJMHgwMDAwLCAgICAgLyogUjEzNyAqLworCTB4MDAwMCwgICAgIC8qIFIxMzggKi8KKwkweDAwMDAsICAgICAvKiBSMTM5ICovCisJMHgwMDEzLCAgICAgLyogUjE0MCAtIEdQSU8gRnVuY3Rpb24gU2VsZWN0IDEgKi8KKwkweDAwMDAsICAgICAvKiBSMTQxIC0gR1BJTyBGdW5jdGlvbiBTZWxlY3QgMiAqLworCTB4MDAwMCwgICAgIC8qIFIxNDIgLSBHUElPIEZ1bmN0aW9uIFNlbGVjdCAzICovCisJMHgwMDAzLCAgICAgLyogUjE0MyAtIEdQSU8gRnVuY3Rpb24gU2VsZWN0IDQgKi8KKwkweDAwMDAsICAgICAvKiBSMTQ0IC0gRGlnaXRpc2VyIENvbnRyb2wgKDEpICovCisJMHgwMDAyLCAgICAgLyogUjE0NSAtIERpZ2l0aXNlciBDb250cm9sICgyKSAqLworCTB4MDAwMCwgICAgIC8qIFIxNDYgKi8KKwkweDAwMDAsICAgICAvKiBSMTQ3ICovCisJMHgwMDAwLCAgICAgLyogUjE0OCAqLworCTB4MDAwMCwgICAgIC8qIFIxNDkgKi8KKwkweDAwMDAsICAgICAvKiBSMTUwICovCisJMHgwMDAwLCAgICAgLyogUjE1MSAqLworCTB4NzAwMCwgICAgIC8qIFIxNTIgLSBBVVgxIFJlYWRiYWNrICovCisJMHg3MDAwLCAgICAgLyogUjE1MyAtIEFVWDIgUmVhZGJhY2sgKi8KKwkweDcwMDAsICAgICAvKiBSMTU0IC0gQVVYMyBSZWFkYmFjayAqLworCTB4NzAwMCwgICAgIC8qIFIxNTUgLSBBVVg0IFJlYWRiYWNrICovCisJMHgwMDAwLCAgICAgLyogUjE1NiAtIFVTQiBWb2x0YWdlIFJlYWRiYWNrICovCisJMHgwMDAwLCAgICAgLyogUjE1NyAtIExJTkUgVm9sdGFnZSBSZWFkYmFjayAqLworCTB4MDAwMCwgICAgIC8qIFIxNTggLSBCQVRUIFZvbHRhZ2UgUmVhZGJhY2sgKi8KKwkweDAwMDAsICAgICAvKiBSMTU5IC0gQ2hpcCBUZW1wIFJlYWRiYWNrICovCisJMHgwMDAwLCAgICAgLyogUjE2MCAqLworCTB4MDAwMCwgICAgIC8qIFIxNjEgKi8KKwkweDAwMDAsICAgICAvKiBSMTYyICovCisJMHgwMDAwLCAgICAgLyogUjE2MyAtIEdlbmVyaWMgQ29tcGFyYXRvciBDb250cm9sICovCisJMHgwMDAwLCAgICAgLyogUjE2NCAtIEdlbmVyaWMgY29tcGFyYXRvciAxICovCisJMHgwMDAwLCAgICAgLyogUjE2NSAtIEdlbmVyaWMgY29tcGFyYXRvciAyICovCisJMHgwMDAwLCAgICAgLyogUjE2NiAtIEdlbmVyaWMgY29tcGFyYXRvciAzICovCisJMHgwMDAwLCAgICAgLyogUjE2NyAtIEdlbmVyaWMgY29tcGFyYXRvciA0ICovCisJMHhBMDBGLCAgICAgLyogUjE2OCAtIEJhdHRlcnkgQ2hhcmdlciBDb250cm9sIDEgKi8KKwkweDBCMDYsICAgICAvKiBSMTY5IC0gQmF0dGVyeSBDaGFyZ2VyIENvbnRyb2wgMiAqLworCTB4MDAwMCwgICAgIC8qIFIxNzAgLSBCYXR0ZXJ5IENoYXJnZXIgQ29udHJvbCAzICovCisJMHgwMDAwLCAgICAgLyogUjE3MSAqLworCTB4MDAwMCwgICAgIC8qIFIxNzIgLSBDdXJyZW50IFNpbmsgRHJpdmVyIEEgKi8KKwkweDAwMDAsICAgICAvKiBSMTczIC0gQ1NBIEZsYXNoIGNvbnRyb2wgKi8KKwkweDAwMDAsICAgICAvKiBSMTc0IC0gQ3VycmVudCBTaW5rIERyaXZlciBCICovCisJMHgwMDAwLCAgICAgLyogUjE3NSAtIENTQiBGbGFzaCBjb250cm9sICovCisJMHgwMDAwLCAgICAgLyogUjE3NiAtIERDREMvTERPIHJlcXVlc3RlZCAqLworCTB4MDAyRCwgICAgIC8qIFIxNzcgLSBEQ0RDIEFjdGl2ZSBvcHRpb25zICovCisJMHgwMDAwLCAgICAgLyogUjE3OCAtIERDREMgU2xlZXAgb3B0aW9ucyAqLworCTB4MDAyNSwgICAgIC8qIFIxNzkgLSBQb3dlci1jaGVjayBjb21wYXJhdG9yICovCisJMHgwMDBFLCAgICAgLyogUjE4MCAtIERDREMxIENvbnRyb2wgKi8KKwkweDAwMDAsICAgICAvKiBSMTgxIC0gRENEQzEgVGltZW91dHMgKi8KKwkweDEwMDYsICAgICAvKiBSMTgyIC0gRENEQzEgTG93IFBvd2VyICovCisJMHgwMDE4LCAgICAgLyogUjE4MyAtIERDREMyIENvbnRyb2wgKi8KKwkweDAwMDAsICAgICAvKiBSMTg0IC0gRENEQzIgVGltZW91dHMgKi8KKwkweDAwMDAsICAgICAvKiBSMTg1ICovCisJMHgwMDAwLCAgICAgLyogUjE4NiAtIERDREMzIENvbnRyb2wgKi8KKwkweDAwMDAsICAgICAvKiBSMTg3IC0gRENEQzMgVGltZW91dHMgKi8KKwkweDAwMDYsICAgICAvKiBSMTg4IC0gRENEQzMgTG93IFBvd2VyICovCisJMHgwMDAwLCAgICAgLyogUjE4OSAtIERDREM0IENvbnRyb2wgKi8KKwkweDAwMDAsICAgICAvKiBSMTkwIC0gRENEQzQgVGltZW91dHMgKi8KKwkweDAwMDYsICAgICAvKiBSMTkxIC0gRENEQzQgTG93IFBvd2VyICovCisJMHgwMDA4LCAgICAgLyogUjE5MiAtIERDREM1IENvbnRyb2wgKi8KKwkweDAwMDAsICAgICAvKiBSMTkzIC0gRENEQzUgVGltZW91dHMgKi8KKwkweDAwMDAsICAgICAvKiBSMTk0ICovCisJMHgwMDAwLCAgICAgLyogUjE5NSAtIERDREM2IENvbnRyb2wgKi8KKwkweDAwMDAsICAgICAvKiBSMTk2IC0gRENEQzYgVGltZW91dHMgKi8KKwkweDAwMDYsICAgICAvKiBSMTk3IC0gRENEQzYgTG93IFBvd2VyICovCisJMHgwMDAwLCAgICAgLyogUjE5OCAqLworCTB4MDAwMywgICAgIC8qIFIxOTkgLSBMaW1pdCBTd2l0Y2ggQ29udHJvbCAqLworCTB4MDAxQywgICAgIC8qIFIyMDAgLSBMRE8xIENvbnRyb2wgKi8KKwkweDAwMDAsICAgICAvKiBSMjAxIC0gTERPMSBUaW1lb3V0cyAqLworCTB4MDAxQywgICAgIC8qIFIyMDIgLSBMRE8xIExvdyBQb3dlciAqLworCTB4MDAxQiwgICAgIC8qIFIyMDMgLSBMRE8yIENvbnRyb2wgKi8KKwkweDAwMDAsICAgICAvKiBSMjA0IC0gTERPMiBUaW1lb3V0cyAqLworCTB4MDAxQywgICAgIC8qIFIyMDUgLSBMRE8yIExvdyBQb3dlciAqLworCTB4MDAxQiwgICAgIC8qIFIyMDYgLSBMRE8zIENvbnRyb2wgKi8KKwkweDAwMDAsICAgICAvKiBSMjA3IC0gTERPMyBUaW1lb3V0cyAqLworCTB4MDAxQywgICAgIC8qIFIyMDggLSBMRE8zIExvdyBQb3dlciAqLworCTB4MDAxQiwgICAgIC8qIFIyMDkgLSBMRE80IENvbnRyb2wgKi8KKwkweDAwMDAsICAgICAvKiBSMjEwIC0gTERPNCBUaW1lb3V0cyAqLworCTB4MDAxQywgICAgIC8qIFIyMTEgLSBMRE80IExvdyBQb3dlciAqLworCTB4MDAwMCwgICAgIC8qIFIyMTIgKi8KKwkweDAwMDAsICAgICAvKiBSMjEzICovCisJMHgwMDAwLCAgICAgLyogUjIxNCAqLworCTB4MDAwMCwgICAgIC8qIFIyMTUgLSBWQ0NfRkFVTFQgTWFza3MgKi8KKwkweDAwMUYsICAgICAvKiBSMjE2IC0gTWFpbiBCYW5kZ2FwIENvbnRyb2wgKi8KKwkweDAwMDAsICAgICAvKiBSMjE3IC0gT1NDIENvbnRyb2wgKi8KKwkweDkwMDAsICAgICAvKiBSMjE4IC0gUlRDIFRpY2sgQ29udHJvbCAqLworCTB4MDAwMCwgICAgIC8qIFIyMTkgKi8KKwkweDQwMDAsICAgICAvKiBSMjIwIC0gUkFNIEJJU1QgMSAqLworCTB4MDAwMCwgICAgIC8qIFIyMjEgKi8KKwkweDAwMDAsICAgICAvKiBSMjIyICovCisJMHgwMDAwLCAgICAgLyogUjIyMyAqLworCTB4MDAwMCwgICAgIC8qIFIyMjQgKi8KKwkweDAwMDAsICAgICAvKiBSMjI1IC0gRENEQy9MRE8gc3RhdHVzICovCisJMHgwMDAwLCAgICAgLyogUjIyNiAqLworCTB4MDAwMCwgICAgIC8qIFIyMjcgKi8KKwkweDAwMDAsICAgICAvKiBSMjI4ICovCisJMHgwMDAwLCAgICAgLyogUjIyOSAqLworCTB4RTAwMCwgICAgIC8qIFIyMzAgLSBHUElPIFBpbiBTdGF0dXMgKi8KKwkweDAwMDAsICAgICAvKiBSMjMxICovCisJMHgwMDAwLCAgICAgLyogUjIzMiAqLworCTB4MDAwMCwgICAgIC8qIFIyMzMgKi8KKwkweDAwMDAsICAgICAvKiBSMjM0ICovCisJMHgwMDAwLCAgICAgLyogUjIzNSAqLworCTB4MDAwMCwgICAgIC8qIFIyMzYgKi8KKwkweDAwMDAsICAgICAvKiBSMjM3ICovCisJMHgwMDAwLCAgICAgLyogUjIzOCAqLworCTB4MDAwMCwgICAgIC8qIFIyMzkgKi8KKwkweDAwMDAsICAgICAvKiBSMjQwICovCisJMHgwMDAwLCAgICAgLyogUjI0MSAqLworCTB4MDAwMCwgICAgIC8qIFIyNDIgKi8KKwkweDAwMDAsICAgICAvKiBSMjQzICovCisJMHgwMDAwLCAgICAgLyogUjI0NCAqLworCTB4MDAwMCwgICAgIC8qIFIyNDUgKi8KKwkweDAwMDAsICAgICAvKiBSMjQ2ICovCisJMHgwMDAwLCAgICAgLyogUjI0NyAqLworCTB4MDAwMCwgICAgIC8qIFIyNDggKi8KKwkweDAwMDAsICAgICAvKiBSMjQ5ICovCisJMHgwMDAwLCAgICAgLyogUjI1MCAqLworCTB4MDAwMCwgICAgIC8qIFIyNTEgKi8KKwkweDAwMDAsICAgICAvKiBSMjUyICovCisJMHgwMDAwLCAgICAgLyogUjI1MyAqLworCTB4MDAwMCwgICAgIC8qIFIyNTQgKi8KKwkweDAwMDAsICAgICAvKiBSMjU1ICovCit9OworI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfTUZEX1dNODM1MF9DT05GSUdfTU9ERV8xCisKKyN1bmRlZiBXTTgzNTBfSEFWRV9DT05GSUdfTU9ERQorI2RlZmluZSBXTTgzNTBfSEFWRV9DT05GSUdfTU9ERQorCitjb25zdCB1MTYgd204MzUwX21vZGUxX2RlZmF1bHRzW10gPSB7CisJMHgxN0ZGLCAgICAgLyogUjAgICAtIFJlc2V0L0lEICovCisJMHgxMDAwLCAgICAgLyogUjEgICAtIElEICovCisJMHgwMDAwLCAgICAgLyogUjIgKi8KKwkweDEwMDIsICAgICAvKiBSMyAgIC0gU3lzdGVtIENvbnRyb2wgMSAqLworCTB4MDAxNCwgICAgIC8qIFI0ICAgLSBTeXN0ZW0gQ29udHJvbCAyICovCisJMHgwMDAwLCAgICAgLyogUjUgICAtIFN5c3RlbSBIaWJlcm5hdGUgKi8KKwkweDhBMDAsICAgICAvKiBSNiAgIC0gSW50ZXJmYWNlIENvbnRyb2wgKi8KKwkweDAwMDAsICAgICAvKiBSNyAqLworCTB4ODAwMCwgICAgIC8qIFI4ICAgLSBQb3dlciBtZ210ICgxKSAqLworCTB4MDAwMCwgICAgIC8qIFI5ICAgLSBQb3dlciBtZ210ICgyKSAqLworCTB4MDAwMCwgICAgIC8qIFIxMCAgLSBQb3dlciBtZ210ICgzKSAqLworCTB4MjAwMCwgICAgIC8qIFIxMSAgLSBQb3dlciBtZ210ICg0KSAqLworCTB4MEUwMCwgICAgIC8qIFIxMiAgLSBQb3dlciBtZ210ICg1KSAqLworCTB4MDAwMCwgICAgIC8qIFIxMyAgLSBQb3dlciBtZ210ICg2KSAqLworCTB4MDAwMCwgICAgIC8qIFIxNCAgLSBQb3dlciBtZ210ICg3KSAqLworCTB4MDAwMCwgICAgIC8qIFIxNSAqLworCTB4MDAwMCwgICAgIC8qIFIxNiAgLSBSVEMgU2Vjb25kcy9NaW51dGVzICovCisJMHgwMTAwLCAgICAgLyogUjE3ICAtIFJUQyBIb3Vycy9EYXkgKi8KKwkweDAxMDEsICAgICAvKiBSMTggIC0gUlRDIERhdGUvTW9udGggKi8KKwkweDE0MDAsICAgICAvKiBSMTkgIC0gUlRDIFllYXIgKi8KKwkweDAwMDAsICAgICAvKiBSMjAgIC0gQWxhcm0gU2Vjb25kcy9NaW51dGVzICovCisJMHgwMDAwLCAgICAgLyogUjIxICAtIEFsYXJtIEhvdXJzL0RheSAqLworCTB4MDAwMCwgICAgIC8qIFIyMiAgLSBBbGFybSBEYXRlL01vbnRoICovCisJMHgwMzIwLCAgICAgLyogUjIzICAtIFJUQyBUaW1lIENvbnRyb2wgKi8KKwkweDAwMDAsICAgICAvKiBSMjQgIC0gU3lzdGVtIEludGVycnVwdHMgKi8KKwkweDAwMDAsICAgICAvKiBSMjUgIC0gSW50ZXJydXB0IFN0YXR1cyAxICovCisJMHgwMDAwLCAgICAgLyogUjI2ICAtIEludGVycnVwdCBTdGF0dXMgMiAqLworCTB4MDAwMCwgICAgIC8qIFIyNyAgLSBQb3dlciBVcCBJbnRlcnJ1cHQgU3RhdHVzICovCisJMHgwMDAwLCAgICAgLyogUjI4ICAtIFVuZGVyIFZvbHRhZ2UgSW50ZXJydXB0IHN0YXR1cyAqLworCTB4MDAwMCwgICAgIC8qIFIyOSAgLSBPdmVyIEN1cnJlbnQgSW50ZXJydXB0IHN0YXR1cyAqLworCTB4MDAwMCwgICAgIC8qIFIzMCAgLSBHUElPIEludGVycnVwdCBTdGF0dXMgKi8KKwkweDAwMDAsICAgICAvKiBSMzEgIC0gQ29tcGFyYXRvciBJbnRlcnJ1cHQgU3RhdHVzICovCisJMHgzRkZGLCAgICAgLyogUjMyICAtIFN5c3RlbSBJbnRlcnJ1cHRzIE1hc2sgKi8KKwkweDAwMDAsICAgICAvKiBSMzMgIC0gSW50ZXJydXB0IFN0YXR1cyAxIE1hc2sgKi8KKwkweDAwMDAsICAgICAvKiBSMzQgIC0gSW50ZXJydXB0IFN0YXR1cyAyIE1hc2sgKi8KKwkweDAwMDAsICAgICAvKiBSMzUgIC0gUG93ZXIgVXAgSW50ZXJydXB0IFN0YXR1cyBNYXNrICovCisJMHgwMDAwLCAgICAgLyogUjM2ICAtIFVuZGVyIFZvbHRhZ2UgSW50ZXJydXB0IHN0YXR1cyBNYXNrICovCisJMHgwMDAwLCAgICAgLyogUjM3ICAtIE92ZXIgQ3VycmVudCBJbnRlcnJ1cHQgc3RhdHVzIE1hc2sgKi8KKwkweDAwMDAsICAgICAvKiBSMzggIC0gR1BJTyBJbnRlcnJ1cHQgU3RhdHVzIE1hc2sgKi8KKwkweDAwMDAsICAgICAvKiBSMzkgIC0gQ29tcGFyYXRvciBJbnRlcnJ1cHQgU3RhdHVzIE1hc2sgKi8KKwkweDAwNDAsICAgICAvKiBSNDAgIC0gQ2xvY2sgQ29udHJvbCAxICovCisJMHgwMDAwLCAgICAgLyogUjQxICAtIENsb2NrIENvbnRyb2wgMiAqLworCTB4M0IwMCwgICAgIC8qIFI0MiAgLSBGTEwgQ29udHJvbCAxICovCisJMHg3MDg2LCAgICAgLyogUjQzICAtIEZMTCBDb250cm9sIDIgKi8KKwkweEMyMjYsICAgICAvKiBSNDQgIC0gRkxMIENvbnRyb2wgMyAqLworCTB4MDAwMCwgICAgIC8qIFI0NSAgLSBGTEwgQ29udHJvbCA0ICovCisJMHgwMDAwLCAgICAgLyogUjQ2ICovCisJMHgwMDAwLCAgICAgLyogUjQ3ICovCisJMHgwMDAwLCAgICAgLyogUjQ4ICAtIERBQyBDb250cm9sICovCisJMHgwMDAwLCAgICAgLyogUjQ5ICovCisJMHgwMEMwLCAgICAgLyogUjUwICAtIERBQyBEaWdpdGFsIFZvbHVtZSBMICovCisJMHgwMEMwLCAgICAgLyogUjUxICAtIERBQyBEaWdpdGFsIFZvbHVtZSBSICovCisJMHgwMDAwLCAgICAgLyogUjUyICovCisJMHgwMDQwLCAgICAgLyogUjUzICAtIERBQyBMUiBSYXRlICovCisJMHgwMDAwLCAgICAgLyogUjU0ICAtIERBQyBDbG9jayBDb250cm9sICovCisJMHgwMDAwLCAgICAgLyogUjU1ICovCisJMHgwMDAwLCAgICAgLyogUjU2ICovCisJMHgwMDAwLCAgICAgLyogUjU3ICovCisJMHg0MDAwLCAgICAgLyogUjU4ICAtIERBQyBNdXRlICovCisJMHgwMDAwLCAgICAgLyogUjU5ICAtIERBQyBNdXRlIFZvbHVtZSAqLworCTB4MDAwMCwgICAgIC8qIFI2MCAgLSBEQUMgU2lkZSAqLworCTB4MDAwMCwgICAgIC8qIFI2MSAqLworCTB4MDAwMCwgICAgIC8qIFI2MiAqLworCTB4MDAwMCwgICAgIC8qIFI2MyAqLworCTB4ODAwMCwgICAgIC8qIFI2NCAgLSBBREMgQ29udHJvbCAqLworCTB4MDAwMCwgICAgIC8qIFI2NSAqLworCTB4MDBDMCwgICAgIC8qIFI2NiAgLSBBREMgRGlnaXRhbCBWb2x1bWUgTCAqLworCTB4MDBDMCwgICAgIC8qIFI2NyAgLSBBREMgRGlnaXRhbCBWb2x1bWUgUiAqLworCTB4MDAwMCwgICAgIC8qIFI2OCAgLSBBREMgRGl2aWRlciAqLworCTB4MDAwMCwgICAgIC8qIFI2OSAqLworCTB4MDA0MCwgICAgIC8qIFI3MCAgLSBBREMgTFIgUmF0ZSAqLworCTB4MDAwMCwgICAgIC8qIFI3MSAqLworCTB4MDMwMywgICAgIC8qIFI3MiAgLSBJbnB1dCBDb250cm9sICovCisJMHgwMDAwLCAgICAgLyogUjczICAtIElOMyBJbnB1dCBDb250cm9sICovCisJMHgwMDAwLCAgICAgLyogUjc0ICAtIE1pYyBCaWFzIENvbnRyb2wgKi8KKwkweDAwMDAsICAgICAvKiBSNzUgKi8KKwkweDAwMDAsICAgICAvKiBSNzYgIC0gT3V0cHV0IENvbnRyb2wgKi8KKwkweDAwMDAsICAgICAvKiBSNzcgIC0gSmFjayBEZXRlY3QgKi8KKwkweDAwMDAsICAgICAvKiBSNzggIC0gQW50aSBQb3AgQ29udHJvbCAqLworCTB4MDAwMCwgICAgIC8qIFI3OSAqLworCTB4MDA0MCwgICAgIC8qIFI4MCAgLSBMZWZ0IElucHV0IFZvbHVtZSAqLworCTB4MDA0MCwgICAgIC8qIFI4MSAgLSBSaWdodCBJbnB1dCBWb2x1bWUgKi8KKwkweDAwMDAsICAgICAvKiBSODIgKi8KKwkweDAwMDAsICAgICAvKiBSODMgKi8KKwkweDAwMDAsICAgICAvKiBSODQgKi8KKwkweDAwMDAsICAgICAvKiBSODUgKi8KKwkweDAwMDAsICAgICAvKiBSODYgKi8KKwkweDAwMDAsICAgICAvKiBSODcgKi8KKwkweDA4MDAsICAgICAvKiBSODggIC0gTGVmdCBNaXhlciBDb250cm9sICovCisJMHgxMDAwLCAgICAgLyogUjg5ICAtIFJpZ2h0IE1peGVyIENvbnRyb2wgKi8KKwkweDAwMDAsICAgICAvKiBSOTAgKi8KKwkweDAwMDAsICAgICAvKiBSOTEgKi8KKwkweDAwMDAsICAgICAvKiBSOTIgIC0gT1VUMyBNaXhlciBDb250cm9sICovCisJMHgwMDAwLCAgICAgLyogUjkzICAtIE9VVDQgTWl4ZXIgQ29udHJvbCAqLworCTB4MDAwMCwgICAgIC8qIFI5NCAqLworCTB4MDAwMCwgICAgIC8qIFI5NSAqLworCTB4MDAwMCwgICAgIC8qIFI5NiAgLSBPdXRwdXQgTGVmdCBNaXhlciBWb2x1bWUgKi8KKwkweDAwMDAsICAgICAvKiBSOTcgIC0gT3V0cHV0IFJpZ2h0IE1peGVyIFZvbHVtZSAqLworCTB4MDAwMCwgICAgIC8qIFI5OCAgLSBJbnB1dCBNaXhlciBWb2x1bWUgTCAqLworCTB4MDAwMCwgICAgIC8qIFI5OSAgLSBJbnB1dCBNaXhlciBWb2x1bWUgUiAqLworCTB4MDAwMCwgICAgIC8qIFIxMDAgLSBJbnB1dCBNaXhlciBWb2x1bWUgKi8KKwkweDAwMDAsICAgICAvKiBSMTAxICovCisJMHgwMDAwLCAgICAgLyogUjEwMiAqLworCTB4MDAwMCwgICAgIC8qIFIxMDMgKi8KKwkweDAwRTQsICAgICAvKiBSMTA0IC0gTE9VVDEgVm9sdW1lICovCisJMHgwMEU0LCAgICAgLyogUjEwNSAtIFJPVVQxIFZvbHVtZSAqLworCTB4MDBFNCwgICAgIC8qIFIxMDYgLSBMT1VUMiBWb2x1bWUgKi8KKwkweDAyRTQsICAgICAvKiBSMTA3IC0gUk9VVDIgVm9sdW1lICovCisJMHgwMDAwLCAgICAgLyogUjEwOCAqLworCTB4MDAwMCwgICAgIC8qIFIxMDkgKi8KKwkweDAwMDAsICAgICAvKiBSMTEwICovCisJMHgwMDAwLCAgICAgLyogUjExMSAtIEJFRVAgVm9sdW1lICovCisJMHgwQTAwLCAgICAgLyogUjExMiAtIEFJIEZvcm1hdGluZyAqLworCTB4MDAwMCwgICAgIC8qIFIxMTMgLSBBREMgREFDIENPTVAgKi8KKwkweDAwMjAsICAgICAvKiBSMTE0IC0gQUkgQURDIENvbnRyb2wgKi8KKwkweDAwMjAsICAgICAvKiBSMTE1IC0gQUkgREFDIENvbnRyb2wgKi8KKwkweDAwMDAsICAgICAvKiBSMTE2IC0gQUlGIFRlc3QgKi8KKwkweDAwMDAsICAgICAvKiBSMTE3ICovCisJMHgwMDAwLCAgICAgLyogUjExOCAqLworCTB4MDAwMCwgICAgIC8qIFIxMTkgKi8KKwkweDAwMDAsICAgICAvKiBSMTIwICovCisJMHgwMDAwLCAgICAgLyogUjEyMSAqLworCTB4MDAwMCwgICAgIC8qIFIxMjIgKi8KKwkweDAwMDAsICAgICAvKiBSMTIzICovCisJMHgwMDAwLCAgICAgLyogUjEyNCAqLworCTB4MDAwMCwgICAgIC8qIFIxMjUgKi8KKwkweDAwMDAsICAgICAvKiBSMTI2ICovCisJMHgwMDAwLCAgICAgLyogUjEyNyAqLworCTB4MUZGRiwgICAgIC8qIFIxMjggLSBHUElPIERlYm91bmNlICovCisJMHgwMDAwLCAgICAgLyogUjEyOSAtIEdQSU8gUGluIHB1bGwgdXAgQ29udHJvbCAqLworCTB4MDNGQywgICAgIC8qIFIxMzAgLSBHUElPIFB1bGwgZG93biBDb250cm9sICovCisJMHgwMDAwLCAgICAgLyogUjEzMSAtIEdQSU8gSW50ZXJydXB0IE1vZGUgKi8KKwkweDAwMDAsICAgICAvKiBSMTMyICovCisJMHgwMDAwLCAgICAgLyogUjEzMyAtIEdQSU8gQ29udHJvbCAqLworCTB4MDBGQiwgICAgIC8qIFIxMzQgLSBHUElPIENvbmZpZ3VyYXRpb24gKGkvbykgKi8KKwkweDA0RkUsICAgICAvKiBSMTM1IC0gR1BJTyBQaW4gUG9sYXJpdHkgLyBUeXBlICovCisJMHgwMDAwLCAgICAgLyogUjEzNiAqLworCTB4MDAwMCwgICAgIC8qIFIxMzcgKi8KKwkweDAwMDAsICAgICAvKiBSMTM4ICovCisJMHgwMDAwLCAgICAgLyogUjEzOSAqLworCTB4MDMxMiwgICAgIC8qIFIxNDAgLSBHUElPIEZ1bmN0aW9uIFNlbGVjdCAxICovCisJMHgxMDAzLCAgICAgLyogUjE0MSAtIEdQSU8gRnVuY3Rpb24gU2VsZWN0IDIgKi8KKwkweDEzMzEsICAgICAvKiBSMTQyIC0gR1BJTyBGdW5jdGlvbiBTZWxlY3QgMyAqLworCTB4MDAwMywgICAgIC8qIFIxNDMgLSBHUElPIEZ1bmN0aW9uIFNlbGVjdCA0ICovCisJMHgwMDAwLCAgICAgLyogUjE0NCAtIERpZ2l0aXNlciBDb250cm9sICgxKSAqLworCTB4MDAwMiwgICAgIC8qIFIxNDUgLSBEaWdpdGlzZXIgQ29udHJvbCAoMikgKi8KKwkweDAwMDAsICAgICAvKiBSMTQ2ICovCisJMHgwMDAwLCAgICAgLyogUjE0NyAqLworCTB4MDAwMCwgICAgIC8qIFIxNDggKi8KKwkweDAwMDAsICAgICAvKiBSMTQ5ICovCisJMHgwMDAwLCAgICAgLyogUjE1MCAqLworCTB4MDAwMCwgICAgIC8qIFIxNTEgKi8KKwkweDcwMDAsICAgICAvKiBSMTUyIC0gQVVYMSBSZWFkYmFjayAqLworCTB4NzAwMCwgICAgIC8qIFIxNTMgLSBBVVgyIFJlYWRiYWNrICovCisJMHg3MDAwLCAgICAgLyogUjE1NCAtIEFVWDMgUmVhZGJhY2sgKi8KKwkweDcwMDAsICAgICAvKiBSMTU1IC0gQVVYNCBSZWFkYmFjayAqLworCTB4MDAwMCwgICAgIC8qIFIxNTYgLSBVU0IgVm9sdGFnZSBSZWFkYmFjayAqLworCTB4MDAwMCwgICAgIC8qIFIxNTcgLSBMSU5FIFZvbHRhZ2UgUmVhZGJhY2sgKi8KKwkweDAwMDAsICAgICAvKiBSMTU4IC0gQkFUVCBWb2x0YWdlIFJlYWRiYWNrICovCisJMHgwMDAwLCAgICAgLyogUjE1OSAtIENoaXAgVGVtcCBSZWFkYmFjayAqLworCTB4MDAwMCwgICAgIC8qIFIxNjAgKi8KKwkweDAwMDAsICAgICAvKiBSMTYxICovCisJMHgwMDAwLCAgICAgLyogUjE2MiAqLworCTB4MDAwMCwgICAgIC8qIFIxNjMgLSBHZW5lcmljIENvbXBhcmF0b3IgQ29udHJvbCAqLworCTB4MDAwMCwgICAgIC8qIFIxNjQgLSBHZW5lcmljIGNvbXBhcmF0b3IgMSAqLworCTB4MDAwMCwgICAgIC8qIFIxNjUgLSBHZW5lcmljIGNvbXBhcmF0b3IgMiAqLworCTB4MDAwMCwgICAgIC8qIFIxNjYgLSBHZW5lcmljIGNvbXBhcmF0b3IgMyAqLworCTB4MDAwMCwgICAgIC8qIFIxNjcgLSBHZW5lcmljIGNvbXBhcmF0b3IgNCAqLworCTB4QTAwRiwgICAgIC8qIFIxNjggLSBCYXR0ZXJ5IENoYXJnZXIgQ29udHJvbCAxICovCisJMHgwQjA2LCAgICAgLyogUjE2OSAtIEJhdHRlcnkgQ2hhcmdlciBDb250cm9sIDIgKi8KKwkweDAwMDAsICAgICAvKiBSMTcwIC0gQmF0dGVyeSBDaGFyZ2VyIENvbnRyb2wgMyAqLworCTB4MDAwMCwgICAgIC8qIFIxNzEgKi8KKwkweDAwMDAsICAgICAvKiBSMTcyIC0gQ3VycmVudCBTaW5rIERyaXZlciBBICovCisJMHgwMDAwLCAgICAgLyogUjE3MyAtIENTQSBGbGFzaCBjb250cm9sICovCisJMHgwMDAwLCAgICAgLyogUjE3NCAtIEN1cnJlbnQgU2luayBEcml2ZXIgQiAqLworCTB4MDAwMCwgICAgIC8qIFIxNzUgLSBDU0IgRmxhc2ggY29udHJvbCAqLworCTB4MDAwMCwgICAgIC8qIFIxNzYgLSBEQ0RDL0xETyByZXF1ZXN0ZWQgKi8KKwkweDAwMkQsICAgICAvKiBSMTc3IC0gRENEQyBBY3RpdmUgb3B0aW9ucyAqLworCTB4MDAwMCwgICAgIC8qIFIxNzggLSBEQ0RDIFNsZWVwIG9wdGlvbnMgKi8KKwkweDAwMjUsICAgICAvKiBSMTc5IC0gUG93ZXItY2hlY2sgY29tcGFyYXRvciAqLworCTB4MDA2MiwgICAgIC8qIFIxODAgLSBEQ0RDMSBDb250cm9sICovCisJMHgwNDAwLCAgICAgLyogUjE4MSAtIERDREMxIFRpbWVvdXRzICovCisJMHgxMDA2LCAgICAgLyogUjE4MiAtIERDREMxIExvdyBQb3dlciAqLworCTB4MDAxOCwgICAgIC8qIFIxODMgLSBEQ0RDMiBDb250cm9sICovCisJMHgwMDAwLCAgICAgLyogUjE4NCAtIERDREMyIFRpbWVvdXRzICovCisJMHgwMDAwLCAgICAgLyogUjE4NSAqLworCTB4MDAyNiwgICAgIC8qIFIxODYgLSBEQ0RDMyBDb250cm9sICovCisJMHgwNDAwLCAgICAgLyogUjE4NyAtIERDREMzIFRpbWVvdXRzICovCisJMHgwMDA2LCAgICAgLyogUjE4OCAtIERDREMzIExvdyBQb3dlciAqLworCTB4MDA2MiwgICAgIC8qIFIxODkgLSBEQ0RDNCBDb250cm9sICovCisJMHgwNDAwLCAgICAgLyogUjE5MCAtIERDREM0IFRpbWVvdXRzICovCisJMHgwMDA2LCAgICAgLyogUjE5MSAtIERDREM0IExvdyBQb3dlciAqLworCTB4MDAwOCwgICAgIC8qIFIxOTIgLSBEQ0RDNSBDb250cm9sICovCisJMHgwMDAwLCAgICAgLyogUjE5MyAtIERDREM1IFRpbWVvdXRzICovCisJMHgwMDAwLCAgICAgLyogUjE5NCAqLworCTB4MDAyNiwgICAgIC8qIFIxOTUgLSBEQ0RDNiBDb250cm9sICovCisJMHgwODAwLCAgICAgLyogUjE5NiAtIERDREM2IFRpbWVvdXRzICovCisJMHgwMDA2LCAgICAgLyogUjE5NyAtIERDREM2IExvdyBQb3dlciAqLworCTB4MDAwMCwgICAgIC8qIFIxOTggKi8KKwkweDAwMDMsICAgICAvKiBSMTk5IC0gTGltaXQgU3dpdGNoIENvbnRyb2wgKi8KKwkweDAwMDYsICAgICAvKiBSMjAwIC0gTERPMSBDb250cm9sICovCisJMHgwNDAwLCAgICAgLyogUjIwMSAtIExETzEgVGltZW91dHMgKi8KKwkweDAwMUMsICAgICAvKiBSMjAyIC0gTERPMSBMb3cgUG93ZXIgKi8KKwkweDAwMDYsICAgICAvKiBSMjAzIC0gTERPMiBDb250cm9sICovCisJMHgwNDAwLCAgICAgLyogUjIwNCAtIExETzIgVGltZW91dHMgKi8KKwkweDAwMUMsICAgICAvKiBSMjA1IC0gTERPMiBMb3cgUG93ZXIgKi8KKwkweDAwMUIsICAgICAvKiBSMjA2IC0gTERPMyBDb250cm9sICovCisJMHgwMDAwLCAgICAgLyogUjIwNyAtIExETzMgVGltZW91dHMgKi8KKwkweDAwMUMsICAgICAvKiBSMjA4IC0gTERPMyBMb3cgUG93ZXIgKi8KKwkweDAwMUIsICAgICAvKiBSMjA5IC0gTERPNCBDb250cm9sICovCisJMHgwMDAwLCAgICAgLyogUjIxMCAtIExETzQgVGltZW91dHMgKi8KKwkweDAwMUMsICAgICAvKiBSMjExIC0gTERPNCBMb3cgUG93ZXIgKi8KKwkweDAwMDAsICAgICAvKiBSMjEyICovCisJMHgwMDAwLCAgICAgLyogUjIxMyAqLworCTB4MDAwMCwgICAgIC8qIFIyMTQgKi8KKwkweDAwMDAsICAgICAvKiBSMjE1IC0gVkNDX0ZBVUxUIE1hc2tzICovCisJMHgwMDFGLCAgICAgLyogUjIxNiAtIE1haW4gQmFuZGdhcCBDb250cm9sICovCisJMHgwMDAwLCAgICAgLyogUjIxNyAtIE9TQyBDb250cm9sICovCisJMHg5MDAwLCAgICAgLyogUjIxOCAtIFJUQyBUaWNrIENvbnRyb2wgKi8KKwkweDAwMDAsICAgICAvKiBSMjE5ICovCisJMHg0MDAwLCAgICAgLyogUjIyMCAtIFJBTSBCSVNUIDEgKi8KKwkweDAwMDAsICAgICAvKiBSMjIxICovCisJMHgwMDAwLCAgICAgLyogUjIyMiAqLworCTB4MDAwMCwgICAgIC8qIFIyMjMgKi8KKwkweDAwMDAsICAgICAvKiBSMjI0ICovCisJMHgwMDAwLCAgICAgLyogUjIyNSAtIERDREMvTERPIHN0YXR1cyAqLworCTB4MDAwMCwgICAgIC8qIFIyMjYgKi8KKwkweDAwMDAsICAgICAvKiBSMjI3ICovCisJMHgwMDAwLCAgICAgLyogUjIyOCAqLworCTB4MDAwMCwgICAgIC8qIFIyMjkgKi8KKwkweEUwMDAsICAgICAvKiBSMjMwIC0gR1BJTyBQaW4gU3RhdHVzICovCisJMHgwMDAwLCAgICAgLyogUjIzMSAqLworCTB4MDAwMCwgICAgIC8qIFIyMzIgKi8KKwkweDAwMDAsICAgICAvKiBSMjMzICovCisJMHgwMDAwLCAgICAgLyogUjIzNCAqLworCTB4MDAwMCwgICAgIC8qIFIyMzUgKi8KKwkweDAwMDAsICAgICAvKiBSMjM2ICovCisJMHgwMDAwLCAgICAgLyogUjIzNyAqLworCTB4MDAwMCwgICAgIC8qIFIyMzggKi8KKwkweDAwMDAsICAgICAvKiBSMjM5ICovCisJMHgwMDAwLCAgICAgLyogUjI0MCAqLworCTB4MDAwMCwgICAgIC8qIFIyNDEgKi8KKwkweDAwMDAsICAgICAvKiBSMjQyICovCisJMHgwMDAwLCAgICAgLyogUjI0MyAqLworCTB4MDAwMCwgICAgIC8qIFIyNDQgKi8KKwkweDAwMDAsICAgICAvKiBSMjQ1ICovCisJMHgwMDAwLCAgICAgLyogUjI0NiAqLworCTB4MDAwMCwgICAgIC8qIFIyNDcgKi8KKwkweDAwMDAsICAgICAvKiBSMjQ4ICovCisJMHgwMDAwLCAgICAgLyogUjI0OSAqLworCTB4MDAwMCwgICAgIC8qIFIyNTAgKi8KKwkweDAwMDAsICAgICAvKiBSMjUxICovCisJMHgwMDAwLCAgICAgLyogUjI1MiAqLworCTB4MDAwMCwgICAgIC8qIFIyNTMgKi8KKwkweDAwMDAsICAgICAvKiBSMjU0ICovCisJMHgwMDAwLCAgICAgLyogUjI1NSAqLworfTsKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX01GRF9XTTgzNTBfQ09ORklHX01PREVfMgorCisjdW5kZWYgV004MzUwX0hBVkVfQ09ORklHX01PREUKKyNkZWZpbmUgV004MzUwX0hBVkVfQ09ORklHX01PREUKKworY29uc3QgdTE2IHdtODM1MF9tb2RlMl9kZWZhdWx0c1tdID0geworCTB4MTdGRiwgICAgIC8qIFIwICAgLSBSZXNldC9JRCAqLworCTB4MTAwMCwgICAgIC8qIFIxICAgLSBJRCAqLworCTB4MDAwMCwgICAgIC8qIFIyICovCisJMHgxMDAyLCAgICAgLyogUjMgICAtIFN5c3RlbSBDb250cm9sIDEgKi8KKwkweDAwMTQsICAgICAvKiBSNCAgIC0gU3lzdGVtIENvbnRyb2wgMiAqLworCTB4MDAwMCwgICAgIC8qIFI1ICAgLSBTeXN0ZW0gSGliZXJuYXRlICovCisJMHg4QTAwLCAgICAgLyogUjYgICAtIEludGVyZmFjZSBDb250cm9sICovCisJMHgwMDAwLCAgICAgLyogUjcgKi8KKwkweDgwMDAsICAgICAvKiBSOCAgIC0gUG93ZXIgbWdtdCAoMSkgKi8KKwkweDAwMDAsICAgICAvKiBSOSAgIC0gUG93ZXIgbWdtdCAoMikgKi8KKwkweDAwMDAsICAgICAvKiBSMTAgIC0gUG93ZXIgbWdtdCAoMykgKi8KKwkweDIwMDAsICAgICAvKiBSMTEgIC0gUG93ZXIgbWdtdCAoNCkgKi8KKwkweDBFMDAsICAgICAvKiBSMTIgIC0gUG93ZXIgbWdtdCAoNSkgKi8KKwkweDAwMDAsICAgICAvKiBSMTMgIC0gUG93ZXIgbWdtdCAoNikgKi8KKwkweDAwMDAsICAgICAvKiBSMTQgIC0gUG93ZXIgbWdtdCAoNykgKi8KKwkweDAwMDAsICAgICAvKiBSMTUgKi8KKwkweDAwMDAsICAgICAvKiBSMTYgIC0gUlRDIFNlY29uZHMvTWludXRlcyAqLworCTB4MDEwMCwgICAgIC8qIFIxNyAgLSBSVEMgSG91cnMvRGF5ICovCisJMHgwMTAxLCAgICAgLyogUjE4ICAtIFJUQyBEYXRlL01vbnRoICovCisJMHgxNDAwLCAgICAgLyogUjE5ICAtIFJUQyBZZWFyICovCisJMHgwMDAwLCAgICAgLyogUjIwICAtIEFsYXJtIFNlY29uZHMvTWludXRlcyAqLworCTB4MDAwMCwgICAgIC8qIFIyMSAgLSBBbGFybSBIb3Vycy9EYXkgKi8KKwkweDAwMDAsICAgICAvKiBSMjIgIC0gQWxhcm0gRGF0ZS9Nb250aCAqLworCTB4MDMyMCwgICAgIC8qIFIyMyAgLSBSVEMgVGltZSBDb250cm9sICovCisJMHgwMDAwLCAgICAgLyogUjI0ICAtIFN5c3RlbSBJbnRlcnJ1cHRzICovCisJMHgwMDAwLCAgICAgLyogUjI1ICAtIEludGVycnVwdCBTdGF0dXMgMSAqLworCTB4MDAwMCwgICAgIC8qIFIyNiAgLSBJbnRlcnJ1cHQgU3RhdHVzIDIgKi8KKwkweDAwMDAsICAgICAvKiBSMjcgIC0gUG93ZXIgVXAgSW50ZXJydXB0IFN0YXR1cyAqLworCTB4MDAwMCwgICAgIC8qIFIyOCAgLSBVbmRlciBWb2x0YWdlIEludGVycnVwdCBzdGF0dXMgKi8KKwkweDAwMDAsICAgICAvKiBSMjkgIC0gT3ZlciBDdXJyZW50IEludGVycnVwdCBzdGF0dXMgKi8KKwkweDAwMDAsICAgICAvKiBSMzAgIC0gR1BJTyBJbnRlcnJ1cHQgU3RhdHVzICovCisJMHgwMDAwLCAgICAgLyogUjMxICAtIENvbXBhcmF0b3IgSW50ZXJydXB0IFN0YXR1cyAqLworCTB4M0ZGRiwgICAgIC8qIFIzMiAgLSBTeXN0ZW0gSW50ZXJydXB0cyBNYXNrICovCisJMHgwMDAwLCAgICAgLyogUjMzICAtIEludGVycnVwdCBTdGF0dXMgMSBNYXNrICovCisJMHgwMDAwLCAgICAgLyogUjM0ICAtIEludGVycnVwdCBTdGF0dXMgMiBNYXNrICovCisJMHgwMDAwLCAgICAgLyogUjM1ICAtIFBvd2VyIFVwIEludGVycnVwdCBTdGF0dXMgTWFzayAqLworCTB4MDAwMCwgICAgIC8qIFIzNiAgLSBVbmRlciBWb2x0YWdlIEludGVycnVwdCBzdGF0dXMgTWFzayAqLworCTB4MDAwMCwgICAgIC8qIFIzNyAgLSBPdmVyIEN1cnJlbnQgSW50ZXJydXB0IHN0YXR1cyBNYXNrICovCisJMHgwMDAwLCAgICAgLyogUjM4ICAtIEdQSU8gSW50ZXJydXB0IFN0YXR1cyBNYXNrICovCisJMHgwMDAwLCAgICAgLyogUjM5ICAtIENvbXBhcmF0b3IgSW50ZXJydXB0IFN0YXR1cyBNYXNrICovCisJMHgwMDQwLCAgICAgLyogUjQwICAtIENsb2NrIENvbnRyb2wgMSAqLworCTB4MDAwMCwgICAgIC8qIFI0MSAgLSBDbG9jayBDb250cm9sIDIgKi8KKwkweDNCMDAsICAgICAvKiBSNDIgIC0gRkxMIENvbnRyb2wgMSAqLworCTB4NzA4NiwgICAgIC8qIFI0MyAgLSBGTEwgQ29udHJvbCAyICovCisJMHhDMjI2LCAgICAgLyogUjQ0ICAtIEZMTCBDb250cm9sIDMgKi8KKwkweDAwMDAsICAgICAvKiBSNDUgIC0gRkxMIENvbnRyb2wgNCAqLworCTB4MDAwMCwgICAgIC8qIFI0NiAqLworCTB4MDAwMCwgICAgIC8qIFI0NyAqLworCTB4MDAwMCwgICAgIC8qIFI0OCAgLSBEQUMgQ29udHJvbCAqLworCTB4MDAwMCwgICAgIC8qIFI0OSAqLworCTB4MDBDMCwgICAgIC8qIFI1MCAgLSBEQUMgRGlnaXRhbCBWb2x1bWUgTCAqLworCTB4MDBDMCwgICAgIC8qIFI1MSAgLSBEQUMgRGlnaXRhbCBWb2x1bWUgUiAqLworCTB4MDAwMCwgICAgIC8qIFI1MiAqLworCTB4MDA0MCwgICAgIC8qIFI1MyAgLSBEQUMgTFIgUmF0ZSAqLworCTB4MDAwMCwgICAgIC8qIFI1NCAgLSBEQUMgQ2xvY2sgQ29udHJvbCAqLworCTB4MDAwMCwgICAgIC8qIFI1NSAqLworCTB4MDAwMCwgICAgIC8qIFI1NiAqLworCTB4MDAwMCwgICAgIC8qIFI1NyAqLworCTB4NDAwMCwgICAgIC8qIFI1OCAgLSBEQUMgTXV0ZSAqLworCTB4MDAwMCwgICAgIC8qIFI1OSAgLSBEQUMgTXV0ZSBWb2x1bWUgKi8KKwkweDAwMDAsICAgICAvKiBSNjAgIC0gREFDIFNpZGUgKi8KKwkweDAwMDAsICAgICAvKiBSNjEgKi8KKwkweDAwMDAsICAgICAvKiBSNjIgKi8KKwkweDAwMDAsICAgICAvKiBSNjMgKi8KKwkweDgwMDAsICAgICAvKiBSNjQgIC0gQURDIENvbnRyb2wgKi8KKwkweDAwMDAsICAgICAvKiBSNjUgKi8KKwkweDAwQzAsICAgICAvKiBSNjYgIC0gQURDIERpZ2l0YWwgVm9sdW1lIEwgKi8KKwkweDAwQzAsICAgICAvKiBSNjcgIC0gQURDIERpZ2l0YWwgVm9sdW1lIFIgKi8KKwkweDAwMDAsICAgICAvKiBSNjggIC0gQURDIERpdmlkZXIgKi8KKwkweDAwMDAsICAgICAvKiBSNjkgKi8KKwkweDAwNDAsICAgICAvKiBSNzAgIC0gQURDIExSIFJhdGUgKi8KKwkweDAwMDAsICAgICAvKiBSNzEgKi8KKwkweDAzMDMsICAgICAvKiBSNzIgIC0gSW5wdXQgQ29udHJvbCAqLworCTB4MDAwMCwgICAgIC8qIFI3MyAgLSBJTjMgSW5wdXQgQ29udHJvbCAqLworCTB4MDAwMCwgICAgIC8qIFI3NCAgLSBNaWMgQmlhcyBDb250cm9sICovCisJMHgwMDAwLCAgICAgLyogUjc1ICovCisJMHgwMDAwLCAgICAgLyogUjc2ICAtIE91dHB1dCBDb250cm9sICovCisJMHgwMDAwLCAgICAgLyogUjc3ICAtIEphY2sgRGV0ZWN0ICovCisJMHgwMDAwLCAgICAgLyogUjc4ICAtIEFudGkgUG9wIENvbnRyb2wgKi8KKwkweDAwMDAsICAgICAvKiBSNzkgKi8KKwkweDAwNDAsICAgICAvKiBSODAgIC0gTGVmdCBJbnB1dCBWb2x1bWUgKi8KKwkweDAwNDAsICAgICAvKiBSODEgIC0gUmlnaHQgSW5wdXQgVm9sdW1lICovCisJMHgwMDAwLCAgICAgLyogUjgyICovCisJMHgwMDAwLCAgICAgLyogUjgzICovCisJMHgwMDAwLCAgICAgLyogUjg0ICovCisJMHgwMDAwLCAgICAgLyogUjg1ICovCisJMHgwMDAwLCAgICAgLyogUjg2ICovCisJMHgwMDAwLCAgICAgLyogUjg3ICovCisJMHgwODAwLCAgICAgLyogUjg4ICAtIExlZnQgTWl4ZXIgQ29udHJvbCAqLworCTB4MTAwMCwgICAgIC8qIFI4OSAgLSBSaWdodCBNaXhlciBDb250cm9sICovCisJMHgwMDAwLCAgICAgLyogUjkwICovCisJMHgwMDAwLCAgICAgLyogUjkxICovCisJMHgwMDAwLCAgICAgLyogUjkyICAtIE9VVDMgTWl4ZXIgQ29udHJvbCAqLworCTB4MDAwMCwgICAgIC8qIFI5MyAgLSBPVVQ0IE1peGVyIENvbnRyb2wgKi8KKwkweDAwMDAsICAgICAvKiBSOTQgKi8KKwkweDAwMDAsICAgICAvKiBSOTUgKi8KKwkweDAwMDAsICAgICAvKiBSOTYgIC0gT3V0cHV0IExlZnQgTWl4ZXIgVm9sdW1lICovCisJMHgwMDAwLCAgICAgLyogUjk3ICAtIE91dHB1dCBSaWdodCBNaXhlciBWb2x1bWUgKi8KKwkweDAwMDAsICAgICAvKiBSOTggIC0gSW5wdXQgTWl4ZXIgVm9sdW1lIEwgKi8KKwkweDAwMDAsICAgICAvKiBSOTkgIC0gSW5wdXQgTWl4ZXIgVm9sdW1lIFIgKi8KKwkweDAwMDAsICAgICAvKiBSMTAwIC0gSW5wdXQgTWl4ZXIgVm9sdW1lICovCisJMHgwMDAwLCAgICAgLyogUjEwMSAqLworCTB4MDAwMCwgICAgIC8qIFIxMDIgKi8KKwkweDAwMDAsICAgICAvKiBSMTAzICovCisJMHgwMEU0LCAgICAgLyogUjEwNCAtIExPVVQxIFZvbHVtZSAqLworCTB4MDBFNCwgICAgIC8qIFIxMDUgLSBST1VUMSBWb2x1bWUgKi8KKwkweDAwRTQsICAgICAvKiBSMTA2IC0gTE9VVDIgVm9sdW1lICovCisJMHgwMkU0LCAgICAgLyogUjEwNyAtIFJPVVQyIFZvbHVtZSAqLworCTB4MDAwMCwgICAgIC8qIFIxMDggKi8KKwkweDAwMDAsICAgICAvKiBSMTA5ICovCisJMHgwMDAwLCAgICAgLyogUjExMCAqLworCTB4MDAwMCwgICAgIC8qIFIxMTEgLSBCRUVQIFZvbHVtZSAqLworCTB4MEEwMCwgICAgIC8qIFIxMTIgLSBBSSBGb3JtYXRpbmcgKi8KKwkweDAwMDAsICAgICAvKiBSMTEzIC0gQURDIERBQyBDT01QICovCisJMHgwMDIwLCAgICAgLyogUjExNCAtIEFJIEFEQyBDb250cm9sICovCisJMHgwMDIwLCAgICAgLyogUjExNSAtIEFJIERBQyBDb250cm9sICovCisJMHgwMDAwLCAgICAgLyogUjExNiAtIEFJRiBUZXN0ICovCisJMHgwMDAwLCAgICAgLyogUjExNyAqLworCTB4MDAwMCwgICAgIC8qIFIxMTggKi8KKwkweDAwMDAsICAgICAvKiBSMTE5ICovCisJMHgwMDAwLCAgICAgLyogUjEyMCAqLworCTB4MDAwMCwgICAgIC8qIFIxMjEgKi8KKwkweDAwMDAsICAgICAvKiBSMTIyICovCisJMHgwMDAwLCAgICAgLyogUjEyMyAqLworCTB4MDAwMCwgICAgIC8qIFIxMjQgKi8KKwkweDAwMDAsICAgICAvKiBSMTI1ICovCisJMHgwMDAwLCAgICAgLyogUjEyNiAqLworCTB4MDAwMCwgICAgIC8qIFIxMjcgKi8KKwkweDFGRkYsICAgICAvKiBSMTI4IC0gR1BJTyBEZWJvdW5jZSAqLworCTB4MDAwMCwgICAgIC8qIFIxMjkgLSBHUElPIFBpbiBwdWxsIHVwIENvbnRyb2wgKi8KKwkweDAzRkMsICAgICAvKiBSMTMwIC0gR1BJTyBQdWxsIGRvd24gQ29udHJvbCAqLworCTB4MDAwMCwgICAgIC8qIFIxMzEgLSBHUElPIEludGVycnVwdCBNb2RlICovCisJMHgwMDAwLCAgICAgLyogUjEzMiAqLworCTB4MDAwMCwgICAgIC8qIFIxMzMgLSBHUElPIENvbnRyb2wgKi8KKwkweDA4RkIsICAgICAvKiBSMTM0IC0gR1BJTyBDb25maWd1cmF0aW9uIChpL28pICovCisJMHgwQ0ZFLCAgICAgLyogUjEzNSAtIEdQSU8gUGluIFBvbGFyaXR5IC8gVHlwZSAqLworCTB4MDAwMCwgICAgIC8qIFIxMzYgKi8KKwkweDAwMDAsICAgICAvKiBSMTM3ICovCisJMHgwMDAwLCAgICAgLyogUjEzOCAqLworCTB4MDAwMCwgICAgIC8qIFIxMzkgKi8KKwkweDAzMTIsICAgICAvKiBSMTQwIC0gR1BJTyBGdW5jdGlvbiBTZWxlY3QgMSAqLworCTB4MDAwMywgICAgIC8qIFIxNDEgLSBHUElPIEZ1bmN0aW9uIFNlbGVjdCAyICovCisJMHgyMzMxLCAgICAgLyogUjE0MiAtIEdQSU8gRnVuY3Rpb24gU2VsZWN0IDMgKi8KKwkweDAwMDMsICAgICAvKiBSMTQzIC0gR1BJTyBGdW5jdGlvbiBTZWxlY3QgNCAqLworCTB4MDAwMCwgICAgIC8qIFIxNDQgLSBEaWdpdGlzZXIgQ29udHJvbCAoMSkgKi8KKwkweDAwMDIsICAgICAvKiBSMTQ1IC0gRGlnaXRpc2VyIENvbnRyb2wgKDIpICovCisJMHgwMDAwLCAgICAgLyogUjE0NiAqLworCTB4MDAwMCwgICAgIC8qIFIxNDcgKi8KKwkweDAwMDAsICAgICAvKiBSMTQ4ICovCisJMHgwMDAwLCAgICAgLyogUjE0OSAqLworCTB4MDAwMCwgICAgIC8qIFIxNTAgKi8KKwkweDAwMDAsICAgICAvKiBSMTUxICovCisJMHg3MDAwLCAgICAgLyogUjE1MiAtIEFVWDEgUmVhZGJhY2sgKi8KKwkweDcwMDAsICAgICAvKiBSMTUzIC0gQVVYMiBSZWFkYmFjayAqLworCTB4NzAwMCwgICAgIC8qIFIxNTQgLSBBVVgzIFJlYWRiYWNrICovCisJMHg3MDAwLCAgICAgLyogUjE1NSAtIEFVWDQgUmVhZGJhY2sgKi8KKwkweDAwMDAsICAgICAvKiBSMTU2IC0gVVNCIFZvbHRhZ2UgUmVhZGJhY2sgKi8KKwkweDAwMDAsICAgICAvKiBSMTU3IC0gTElORSBWb2x0YWdlIFJlYWRiYWNrICovCisJMHgwMDAwLCAgICAgLyogUjE1OCAtIEJBVFQgVm9sdGFnZSBSZWFkYmFjayAqLworCTB4MDAwMCwgICAgIC8qIFIxNTkgLSBDaGlwIFRlbXAgUmVhZGJhY2sgKi8KKwkweDAwMDAsICAgICAvKiBSMTYwICovCisJMHgwMDAwLCAgICAgLyogUjE2MSAqLworCTB4MDAwMCwgICAgIC8qIFIxNjIgKi8KKwkweDAwMDAsICAgICAvKiBSMTYzIC0gR2VuZXJpYyBDb21wYXJhdG9yIENvbnRyb2wgKi8KKwkweDAwMDAsICAgICAvKiBSMTY0IC0gR2VuZXJpYyBjb21wYXJhdG9yIDEgKi8KKwkweDAwMDAsICAgICAvKiBSMTY1IC0gR2VuZXJpYyBjb21wYXJhdG9yIDIgKi8KKwkweDAwMDAsICAgICAvKiBSMTY2IC0gR2VuZXJpYyBjb21wYXJhdG9yIDMgKi8KKwkweDAwMDAsICAgICAvKiBSMTY3IC0gR2VuZXJpYyBjb21wYXJhdG9yIDQgKi8KKwkweEEwMEYsICAgICAvKiBSMTY4IC0gQmF0dGVyeSBDaGFyZ2VyIENvbnRyb2wgMSAqLworCTB4MEIwNiwgICAgIC8qIFIxNjkgLSBCYXR0ZXJ5IENoYXJnZXIgQ29udHJvbCAyICovCisJMHgwMDAwLCAgICAgLyogUjE3MCAtIEJhdHRlcnkgQ2hhcmdlciBDb250cm9sIDMgKi8KKwkweDAwMDAsICAgICAvKiBSMTcxICovCisJMHgwMDAwLCAgICAgLyogUjE3MiAtIEN1cnJlbnQgU2luayBEcml2ZXIgQSAqLworCTB4MDAwMCwgICAgIC8qIFIxNzMgLSBDU0EgRmxhc2ggY29udHJvbCAqLworCTB4MDAwMCwgICAgIC8qIFIxNzQgLSBDdXJyZW50IFNpbmsgRHJpdmVyIEIgKi8KKwkweDAwMDAsICAgICAvKiBSMTc1IC0gQ1NCIEZsYXNoIGNvbnRyb2wgKi8KKwkweDAwMDAsICAgICAvKiBSMTc2IC0gRENEQy9MRE8gcmVxdWVzdGVkICovCisJMHgwMDJELCAgICAgLyogUjE3NyAtIERDREMgQWN0aXZlIG9wdGlvbnMgKi8KKwkweDAwMDAsICAgICAvKiBSMTc4IC0gRENEQyBTbGVlcCBvcHRpb25zICovCisJMHgwMDI1LCAgICAgLyogUjE3OSAtIFBvd2VyLWNoZWNrIGNvbXBhcmF0b3IgKi8KKwkweDAwMEUsICAgICAvKiBSMTgwIC0gRENEQzEgQ29udHJvbCAqLworCTB4MDQwMCwgICAgIC8qIFIxODEgLSBEQ0RDMSBUaW1lb3V0cyAqLworCTB4MTAwNiwgICAgIC8qIFIxODIgLSBEQ0RDMSBMb3cgUG93ZXIgKi8KKwkweDAwMTgsICAgICAvKiBSMTgzIC0gRENEQzIgQ29udHJvbCAqLworCTB4MDAwMCwgICAgIC8qIFIxODQgLSBEQ0RDMiBUaW1lb3V0cyAqLworCTB4MDAwMCwgICAgIC8qIFIxODUgKi8KKwkweDAwMkUsICAgICAvKiBSMTg2IC0gRENEQzMgQ29udHJvbCAqLworCTB4MDgwMCwgICAgIC8qIFIxODcgLSBEQ0RDMyBUaW1lb3V0cyAqLworCTB4MDAwNiwgICAgIC8qIFIxODggLSBEQ0RDMyBMb3cgUG93ZXIgKi8KKwkweDAwMEUsICAgICAvKiBSMTg5IC0gRENEQzQgQ29udHJvbCAqLworCTB4MDgwMCwgICAgIC8qIFIxOTAgLSBEQ0RDNCBUaW1lb3V0cyAqLworCTB4MDAwNiwgICAgIC8qIFIxOTEgLSBEQ0RDNCBMb3cgUG93ZXIgKi8KKwkweDAwMDgsICAgICAvKiBSMTkyIC0gRENEQzUgQ29udHJvbCAqLworCTB4MDAwMCwgICAgIC8qIFIxOTMgLSBEQ0RDNSBUaW1lb3V0cyAqLworCTB4MDAwMCwgICAgIC8qIFIxOTQgKi8KKwkweDAwMjYsICAgICAvKiBSMTk1IC0gRENEQzYgQ29udHJvbCAqLworCTB4MEMwMCwgICAgIC8qIFIxOTYgLSBEQ0RDNiBUaW1lb3V0cyAqLworCTB4MDAwNiwgICAgIC8qIFIxOTcgLSBEQ0RDNiBMb3cgUG93ZXIgKi8KKwkweDAwMDAsICAgICAvKiBSMTk4ICovCisJMHgwMDAzLCAgICAgLyogUjE5OSAtIExpbWl0IFN3aXRjaCBDb250cm9sICovCisJMHgwMDFBLCAgICAgLyogUjIwMCAtIExETzEgQ29udHJvbCAqLworCTB4MDgwMCwgICAgIC8qIFIyMDEgLSBMRE8xIFRpbWVvdXRzICovCisJMHgwMDFDLCAgICAgLyogUjIwMiAtIExETzEgTG93IFBvd2VyICovCisJMHgwMDEwLCAgICAgLyogUjIwMyAtIExETzIgQ29udHJvbCAqLworCTB4MDgwMCwgICAgIC8qIFIyMDQgLSBMRE8yIFRpbWVvdXRzICovCisJMHgwMDFDLCAgICAgLyogUjIwNSAtIExETzIgTG93IFBvd2VyICovCisJMHgwMDBBLCAgICAgLyogUjIwNiAtIExETzMgQ29udHJvbCAqLworCTB4MEMwMCwgICAgIC8qIFIyMDcgLSBMRE8zIFRpbWVvdXRzICovCisJMHgwMDFDLCAgICAgLyogUjIwOCAtIExETzMgTG93IFBvd2VyICovCisJMHgwMDFBLCAgICAgLyogUjIwOSAtIExETzQgQ29udHJvbCAqLworCTB4MDgwMCwgICAgIC8qIFIyMTAgLSBMRE80IFRpbWVvdXRzICovCisJMHgwMDFDLCAgICAgLyogUjIxMSAtIExETzQgTG93IFBvd2VyICovCisJMHgwMDAwLCAgICAgLyogUjIxMiAqLworCTB4MDAwMCwgICAgIC8qIFIyMTMgKi8KKwkweDAwMDAsICAgICAvKiBSMjE0ICovCisJMHgwMDAwLCAgICAgLyogUjIxNSAtIFZDQ19GQVVMVCBNYXNrcyAqLworCTB4MDAxRiwgICAgIC8qIFIyMTYgLSBNYWluIEJhbmRnYXAgQ29udHJvbCAqLworCTB4MDAwMCwgICAgIC8qIFIyMTcgLSBPU0MgQ29udHJvbCAqLworCTB4OTAwMCwgICAgIC8qIFIyMTggLSBSVEMgVGljayBDb250cm9sICovCisJMHgwMDAwLCAgICAgLyogUjIxOSAqLworCTB4NDAwMCwgICAgIC8qIFIyMjAgLSBSQU0gQklTVCAxICovCisJMHgwMDAwLCAgICAgLyogUjIyMSAqLworCTB4MDAwMCwgICAgIC8qIFIyMjIgKi8KKwkweDAwMDAsICAgICAvKiBSMjIzICovCisJMHgwMDAwLCAgICAgLyogUjIyNCAqLworCTB4MDAwMCwgICAgIC8qIFIyMjUgLSBEQ0RDL0xETyBzdGF0dXMgKi8KKwkweDAwMDAsICAgICAvKiBSMjI2ICovCisJMHgwMDAwLCAgICAgLyogUjIyNyAqLworCTB4MDAwMCwgICAgIC8qIFIyMjggKi8KKwkweDAwMDAsICAgICAvKiBSMjI5ICovCisJMHhFMDAwLCAgICAgLyogUjIzMCAtIEdQSU8gUGluIFN0YXR1cyAqLworCTB4MDAwMCwgICAgIC8qIFIyMzEgKi8KKwkweDAwMDAsICAgICAvKiBSMjMyICovCisJMHgwMDAwLCAgICAgLyogUjIzMyAqLworCTB4MDAwMCwgICAgIC8qIFIyMzQgKi8KKwkweDAwMDAsICAgICAvKiBSMjM1ICovCisJMHgwMDAwLCAgICAgLyogUjIzNiAqLworCTB4MDAwMCwgICAgIC8qIFIyMzcgKi8KKwkweDAwMDAsICAgICAvKiBSMjM4ICovCisJMHgwMDAwLCAgICAgLyogUjIzOSAqLworCTB4MDAwMCwgICAgIC8qIFIyNDAgKi8KKwkweDAwMDAsICAgICAvKiBSMjQxICovCisJMHgwMDAwLCAgICAgLyogUjI0MiAqLworCTB4MDAwMCwgICAgIC8qIFIyNDMgKi8KKwkweDAwMDAsICAgICAvKiBSMjQ0ICovCisJMHgwMDAwLCAgICAgLyogUjI0NSAqLworCTB4MDAwMCwgICAgIC8qIFIyNDYgKi8KKwkweDAwMDAsICAgICAvKiBSMjQ3ICovCisJMHgwMDAwLCAgICAgLyogUjI0OCAqLworCTB4MDAwMCwgICAgIC8qIFIyNDkgKi8KKwkweDAwMDAsICAgICAvKiBSMjUwICovCisJMHgwMDAwLCAgICAgLyogUjI1MSAqLworCTB4MDAwMCwgICAgIC8qIFIyNTIgKi8KKwkweDAwMDAsICAgICAvKiBSMjUzICovCisJMHgwMDAwLCAgICAgLyogUjI1NCAqLworCTB4MDAwMCwgICAgIC8qIFIyNTUgKi8KK307CisjZW5kaWYKKworI2lmZGVmIENPTkZJR19NRkRfV004MzUwX0NPTkZJR19NT0RFXzMKKworI3VuZGVmIFdNODM1MF9IQVZFX0NPTkZJR19NT0RFCisjZGVmaW5lIFdNODM1MF9IQVZFX0NPTkZJR19NT0RFCisKK2NvbnN0IHUxNiB3bTgzNTBfbW9kZTNfZGVmYXVsdHNbXSA9IHsKKwkweDE3RkYsICAgICAvKiBSMCAgIC0gUmVzZXQvSUQgKi8KKwkweDEwMDAsICAgICAvKiBSMSAgIC0gSUQgKi8KKwkweDAwMDAsICAgICAvKiBSMiAqLworCTB4MTAwMCwgICAgIC8qIFIzICAgLSBTeXN0ZW0gQ29udHJvbCAxICovCisJMHgwMDA0LCAgICAgLyogUjQgICAtIFN5c3RlbSBDb250cm9sIDIgKi8KKwkweDAwMDAsICAgICAvKiBSNSAgIC0gU3lzdGVtIEhpYmVybmF0ZSAqLworCTB4OEEwMCwgICAgIC8qIFI2ICAgLSBJbnRlcmZhY2UgQ29udHJvbCAqLworCTB4MDAwMCwgICAgIC8qIFI3ICovCisJMHg4MDAwLCAgICAgLyogUjggICAtIFBvd2VyIG1nbXQgKDEpICovCisJMHgwMDAwLCAgICAgLyogUjkgICAtIFBvd2VyIG1nbXQgKDIpICovCisJMHgwMDAwLCAgICAgLyogUjEwICAtIFBvd2VyIG1nbXQgKDMpICovCisJMHgyMDAwLCAgICAgLyogUjExICAtIFBvd2VyIG1nbXQgKDQpICovCisJMHgwRTAwLCAgICAgLyogUjEyICAtIFBvd2VyIG1nbXQgKDUpICovCisJMHgwMDAwLCAgICAgLyogUjEzICAtIFBvd2VyIG1nbXQgKDYpICovCisJMHgwMDAwLCAgICAgLyogUjE0ICAtIFBvd2VyIG1nbXQgKDcpICovCisJMHgwMDAwLCAgICAgLyogUjE1ICovCisJMHgwMDAwLCAgICAgLyogUjE2ICAtIFJUQyBTZWNvbmRzL01pbnV0ZXMgKi8KKwkweDAxMDAsICAgICAvKiBSMTcgIC0gUlRDIEhvdXJzL0RheSAqLworCTB4MDEwMSwgICAgIC8qIFIxOCAgLSBSVEMgRGF0ZS9Nb250aCAqLworCTB4MTQwMCwgICAgIC8qIFIxOSAgLSBSVEMgWWVhciAqLworCTB4MDAwMCwgICAgIC8qIFIyMCAgLSBBbGFybSBTZWNvbmRzL01pbnV0ZXMgKi8KKwkweDAwMDAsICAgICAvKiBSMjEgIC0gQWxhcm0gSG91cnMvRGF5ICovCisJMHgwMDAwLCAgICAgLyogUjIyICAtIEFsYXJtIERhdGUvTW9udGggKi8KKwkweDAzMjAsICAgICAvKiBSMjMgIC0gUlRDIFRpbWUgQ29udHJvbCAqLworCTB4MDAwMCwgICAgIC8qIFIyNCAgLSBTeXN0ZW0gSW50ZXJydXB0cyAqLworCTB4MDAwMCwgICAgIC8qIFIyNSAgLSBJbnRlcnJ1cHQgU3RhdHVzIDEgKi8KKwkweDAwMDAsICAgICAvKiBSMjYgIC0gSW50ZXJydXB0IFN0YXR1cyAyICovCisJMHgwMDAwLCAgICAgLyogUjI3ICAtIFBvd2VyIFVwIEludGVycnVwdCBTdGF0dXMgKi8KKwkweDAwMDAsICAgICAvKiBSMjggIC0gVW5kZXIgVm9sdGFnZSBJbnRlcnJ1cHQgc3RhdHVzICovCisJMHgwMDAwLCAgICAgLyogUjI5ICAtIE92ZXIgQ3VycmVudCBJbnRlcnJ1cHQgc3RhdHVzICovCisJMHgwMDAwLCAgICAgLyogUjMwICAtIEdQSU8gSW50ZXJydXB0IFN0YXR1cyAqLworCTB4MDAwMCwgICAgIC8qIFIzMSAgLSBDb21wYXJhdG9yIEludGVycnVwdCBTdGF0dXMgKi8KKwkweDNGRkYsICAgICAvKiBSMzIgIC0gU3lzdGVtIEludGVycnVwdHMgTWFzayAqLworCTB4MDAwMCwgICAgIC8qIFIzMyAgLSBJbnRlcnJ1cHQgU3RhdHVzIDEgTWFzayAqLworCTB4MDAwMCwgICAgIC8qIFIzNCAgLSBJbnRlcnJ1cHQgU3RhdHVzIDIgTWFzayAqLworCTB4MDAwMCwgICAgIC8qIFIzNSAgLSBQb3dlciBVcCBJbnRlcnJ1cHQgU3RhdHVzIE1hc2sgKi8KKwkweDAwMDAsICAgICAvKiBSMzYgIC0gVW5kZXIgVm9sdGFnZSBJbnRlcnJ1cHQgc3RhdHVzIE1hc2sgKi8KKwkweDAwMDAsICAgICAvKiBSMzcgIC0gT3ZlciBDdXJyZW50IEludGVycnVwdCBzdGF0dXMgTWFzayAqLworCTB4MDAwMCwgICAgIC8qIFIzOCAgLSBHUElPIEludGVycnVwdCBTdGF0dXMgTWFzayAqLworCTB4MDAwMCwgICAgIC8qIFIzOSAgLSBDb21wYXJhdG9yIEludGVycnVwdCBTdGF0dXMgTWFzayAqLworCTB4MDA0MCwgICAgIC8qIFI0MCAgLSBDbG9jayBDb250cm9sIDEgKi8KKwkweDAwMDAsICAgICAvKiBSNDEgIC0gQ2xvY2sgQ29udHJvbCAyICovCisJMHgzQjAwLCAgICAgLyogUjQyICAtIEZMTCBDb250cm9sIDEgKi8KKwkweDcwODYsICAgICAvKiBSNDMgIC0gRkxMIENvbnRyb2wgMiAqLworCTB4QzIyNiwgICAgIC8qIFI0NCAgLSBGTEwgQ29udHJvbCAzICovCisJMHgwMDAwLCAgICAgLyogUjQ1ICAtIEZMTCBDb250cm9sIDQgKi8KKwkweDAwMDAsICAgICAvKiBSNDYgKi8KKwkweDAwMDAsICAgICAvKiBSNDcgKi8KKwkweDAwMDAsICAgICAvKiBSNDggIC0gREFDIENvbnRyb2wgKi8KKwkweDAwMDAsICAgICAvKiBSNDkgKi8KKwkweDAwQzAsICAgICAvKiBSNTAgIC0gREFDIERpZ2l0YWwgVm9sdW1lIEwgKi8KKwkweDAwQzAsICAgICAvKiBSNTEgIC0gREFDIERpZ2l0YWwgVm9sdW1lIFIgKi8KKwkweDAwMDAsICAgICAvKiBSNTIgKi8KKwkweDAwNDAsICAgICAvKiBSNTMgIC0gREFDIExSIFJhdGUgKi8KKwkweDAwMDAsICAgICAvKiBSNTQgIC0gREFDIENsb2NrIENvbnRyb2wgKi8KKwkweDAwMDAsICAgICAvKiBSNTUgKi8KKwkweDAwMDAsICAgICAvKiBSNTYgKi8KKwkweDAwMDAsICAgICAvKiBSNTcgKi8KKwkweDQwMDAsICAgICAvKiBSNTggIC0gREFDIE11dGUgKi8KKwkweDAwMDAsICAgICAvKiBSNTkgIC0gREFDIE11dGUgVm9sdW1lICovCisJMHgwMDAwLCAgICAgLyogUjYwICAtIERBQyBTaWRlICovCisJMHgwMDAwLCAgICAgLyogUjYxICovCisJMHgwMDAwLCAgICAgLyogUjYyICovCisJMHgwMDAwLCAgICAgLyogUjYzICovCisJMHg4MDAwLCAgICAgLyogUjY0ICAtIEFEQyBDb250cm9sICovCisJMHgwMDAwLCAgICAgLyogUjY1ICovCisJMHgwMEMwLCAgICAgLyogUjY2ICAtIEFEQyBEaWdpdGFsIFZvbHVtZSBMICovCisJMHgwMEMwLCAgICAgLyogUjY3ICAtIEFEQyBEaWdpdGFsIFZvbHVtZSBSICovCisJMHgwMDAwLCAgICAgLyogUjY4ICAtIEFEQyBEaXZpZGVyICovCisJMHgwMDAwLCAgICAgLyogUjY5ICovCisJMHgwMDQwLCAgICAgLyogUjcwICAtIEFEQyBMUiBSYXRlICovCisJMHgwMDAwLCAgICAgLyogUjcxICovCisJMHgwMzAzLCAgICAgLyogUjcyICAtIElucHV0IENvbnRyb2wgKi8KKwkweDAwMDAsICAgICAvKiBSNzMgIC0gSU4zIElucHV0IENvbnRyb2wgKi8KKwkweDAwMDAsICAgICAvKiBSNzQgIC0gTWljIEJpYXMgQ29udHJvbCAqLworCTB4MDAwMCwgICAgIC8qIFI3NSAqLworCTB4MDAwMCwgICAgIC8qIFI3NiAgLSBPdXRwdXQgQ29udHJvbCAqLworCTB4MDAwMCwgICAgIC8qIFI3NyAgLSBKYWNrIERldGVjdCAqLworCTB4MDAwMCwgICAgIC8qIFI3OCAgLSBBbnRpIFBvcCBDb250cm9sICovCisJMHgwMDAwLCAgICAgLyogUjc5ICovCisJMHgwMDQwLCAgICAgLyogUjgwICAtIExlZnQgSW5wdXQgVm9sdW1lICovCisJMHgwMDQwLCAgICAgLyogUjgxICAtIFJpZ2h0IElucHV0IFZvbHVtZSAqLworCTB4MDAwMCwgICAgIC8qIFI4MiAqLworCTB4MDAwMCwgICAgIC8qIFI4MyAqLworCTB4MDAwMCwgICAgIC8qIFI4NCAqLworCTB4MDAwMCwgICAgIC8qIFI4NSAqLworCTB4MDAwMCwgICAgIC8qIFI4NiAqLworCTB4MDAwMCwgICAgIC8qIFI4NyAqLworCTB4MDgwMCwgICAgIC8qIFI4OCAgLSBMZWZ0IE1peGVyIENvbnRyb2wgKi8KKwkweDEwMDAsICAgICAvKiBSODkgIC0gUmlnaHQgTWl4ZXIgQ29udHJvbCAqLworCTB4MDAwMCwgICAgIC8qIFI5MCAqLworCTB4MDAwMCwgICAgIC8qIFI5MSAqLworCTB4MDAwMCwgICAgIC8qIFI5MiAgLSBPVVQzIE1peGVyIENvbnRyb2wgKi8KKwkweDAwMDAsICAgICAvKiBSOTMgIC0gT1VUNCBNaXhlciBDb250cm9sICovCisJMHgwMDAwLCAgICAgLyogUjk0ICovCisJMHgwMDAwLCAgICAgLyogUjk1ICovCisJMHgwMDAwLCAgICAgLyogUjk2ICAtIE91dHB1dCBMZWZ0IE1peGVyIFZvbHVtZSAqLworCTB4MDAwMCwgICAgIC8qIFI5NyAgLSBPdXRwdXQgUmlnaHQgTWl4ZXIgVm9sdW1lICovCisJMHgwMDAwLCAgICAgLyogUjk4ICAtIElucHV0IE1peGVyIFZvbHVtZSBMICovCisJMHgwMDAwLCAgICAgLyogUjk5ICAtIElucHV0IE1peGVyIFZvbHVtZSBSICovCisJMHgwMDAwLCAgICAgLyogUjEwMCAtIElucHV0IE1peGVyIFZvbHVtZSAqLworCTB4MDAwMCwgICAgIC8qIFIxMDEgKi8KKwkweDAwMDAsICAgICAvKiBSMTAyICovCisJMHgwMDAwLCAgICAgLyogUjEwMyAqLworCTB4MDBFNCwgICAgIC8qIFIxMDQgLSBMT1VUMSBWb2x1bWUgKi8KKwkweDAwRTQsICAgICAvKiBSMTA1IC0gUk9VVDEgVm9sdW1lICovCisJMHgwMEU0LCAgICAgLyogUjEwNiAtIExPVVQyIFZvbHVtZSAqLworCTB4MDJFNCwgICAgIC8qIFIxMDcgLSBST1VUMiBWb2x1bWUgKi8KKwkweDAwMDAsICAgICAvKiBSMTA4ICovCisJMHgwMDAwLCAgICAgLyogUjEwOSAqLworCTB4MDAwMCwgICAgIC8qIFIxMTAgKi8KKwkweDAwMDAsICAgICAvKiBSMTExIC0gQkVFUCBWb2x1bWUgKi8KKwkweDBBMDAsICAgICAvKiBSMTEyIC0gQUkgRm9ybWF0aW5nICovCisJMHgwMDAwLCAgICAgLyogUjExMyAtIEFEQyBEQUMgQ09NUCAqLworCTB4MDAyMCwgICAgIC8qIFIxMTQgLSBBSSBBREMgQ29udHJvbCAqLworCTB4MDAyMCwgICAgIC8qIFIxMTUgLSBBSSBEQUMgQ29udHJvbCAqLworCTB4MDAwMCwgICAgIC8qIFIxMTYgLSBBSUYgVGVzdCAqLworCTB4MDAwMCwgICAgIC8qIFIxMTcgKi8KKwkweDAwMDAsICAgICAvKiBSMTE4ICovCisJMHgwMDAwLCAgICAgLyogUjExOSAqLworCTB4MDAwMCwgICAgIC8qIFIxMjAgKi8KKwkweDAwMDAsICAgICAvKiBSMTIxICovCisJMHgwMDAwLCAgICAgLyogUjEyMiAqLworCTB4MDAwMCwgICAgIC8qIFIxMjMgKi8KKwkweDAwMDAsICAgICAvKiBSMTI0ICovCisJMHgwMDAwLCAgICAgLyogUjEyNSAqLworCTB4MDAwMCwgICAgIC8qIFIxMjYgKi8KKwkweDAwMDAsICAgICAvKiBSMTI3ICovCisJMHgxRkZGLCAgICAgLyogUjEyOCAtIEdQSU8gRGVib3VuY2UgKi8KKwkweDAwMDAsICAgICAvKiBSMTI5IC0gR1BJTyBQaW4gcHVsbCB1cCBDb250cm9sICovCisJMHgwM0ZDLCAgICAgLyogUjEzMCAtIEdQSU8gUHVsbCBkb3duIENvbnRyb2wgKi8KKwkweDAwMDAsICAgICAvKiBSMTMxIC0gR1BJTyBJbnRlcnJ1cHQgTW9kZSAqLworCTB4MDAwMCwgICAgIC8qIFIxMzIgKi8KKwkweDAwMDAsICAgICAvKiBSMTMzIC0gR1BJTyBDb250cm9sICovCisJMHgwQTdCLCAgICAgLyogUjEzNCAtIEdQSU8gQ29uZmlndXJhdGlvbiAoaS9vKSAqLworCTB4MDZGRSwgICAgIC8qIFIxMzUgLSBHUElPIFBpbiBQb2xhcml0eSAvIFR5cGUgKi8KKwkweDAwMDAsICAgICAvKiBSMTM2ICovCisJMHgwMDAwLCAgICAgLyogUjEzNyAqLworCTB4MDAwMCwgICAgIC8qIFIxMzggKi8KKwkweDAwMDAsICAgICAvKiBSMTM5ICovCisJMHgxMzEyLCAgICAgLyogUjE0MCAtIEdQSU8gRnVuY3Rpb24gU2VsZWN0IDEgKi8KKwkweDEwMzAsICAgICAvKiBSMTQxIC0gR1BJTyBGdW5jdGlvbiBTZWxlY3QgMiAqLworCTB4MjIzMSwgICAgIC8qIFIxNDIgLSBHUElPIEZ1bmN0aW9uIFNlbGVjdCAzICovCisJMHgwMDAzLCAgICAgLyogUjE0MyAtIEdQSU8gRnVuY3Rpb24gU2VsZWN0IDQgKi8KKwkweDAwMDAsICAgICAvKiBSMTQ0IC0gRGlnaXRpc2VyIENvbnRyb2wgKDEpICovCisJMHgwMDAyLCAgICAgLyogUjE0NSAtIERpZ2l0aXNlciBDb250cm9sICgyKSAqLworCTB4MDAwMCwgICAgIC8qIFIxNDYgKi8KKwkweDAwMDAsICAgICAvKiBSMTQ3ICovCisJMHgwMDAwLCAgICAgLyogUjE0OCAqLworCTB4MDAwMCwgICAgIC8qIFIxNDkgKi8KKwkweDAwMDAsICAgICAvKiBSMTUwICovCisJMHgwMDAwLCAgICAgLyogUjE1MSAqLworCTB4NzAwMCwgICAgIC8qIFIxNTIgLSBBVVgxIFJlYWRiYWNrICovCisJMHg3MDAwLCAgICAgLyogUjE1MyAtIEFVWDIgUmVhZGJhY2sgKi8KKwkweDcwMDAsICAgICAvKiBSMTU0IC0gQVVYMyBSZWFkYmFjayAqLworCTB4NzAwMCwgICAgIC8qIFIxNTUgLSBBVVg0IFJlYWRiYWNrICovCisJMHgwMDAwLCAgICAgLyogUjE1NiAtIFVTQiBWb2x0YWdlIFJlYWRiYWNrICovCisJMHgwMDAwLCAgICAgLyogUjE1NyAtIExJTkUgVm9sdGFnZSBSZWFkYmFjayAqLworCTB4MDAwMCwgICAgIC8qIFIxNTggLSBCQVRUIFZvbHRhZ2UgUmVhZGJhY2sgKi8KKwkweDAwMDAsICAgICAvKiBSMTU5IC0gQ2hpcCBUZW1wIFJlYWRiYWNrICovCisJMHgwMDAwLCAgICAgLyogUjE2MCAqLworCTB4MDAwMCwgICAgIC8qIFIxNjEgKi8KKwkweDAwMDAsICAgICAvKiBSMTYyICovCisJMHgwMDAwLCAgICAgLyogUjE2MyAtIEdlbmVyaWMgQ29tcGFyYXRvciBDb250cm9sICovCisJMHgwMDAwLCAgICAgLyogUjE2NCAtIEdlbmVyaWMgY29tcGFyYXRvciAxICovCisJMHgwMDAwLCAgICAgLyogUjE2NSAtIEdlbmVyaWMgY29tcGFyYXRvciAyICovCisJMHgwMDAwLCAgICAgLyogUjE2NiAtIEdlbmVyaWMgY29tcGFyYXRvciAzICovCisJMHgwMDAwLCAgICAgLyogUjE2NyAtIEdlbmVyaWMgY29tcGFyYXRvciA0ICovCisJMHhBMDBGLCAgICAgLyogUjE2OCAtIEJhdHRlcnkgQ2hhcmdlciBDb250cm9sIDEgKi8KKwkweDBCMDYsICAgICAvKiBSMTY5IC0gQmF0dGVyeSBDaGFyZ2VyIENvbnRyb2wgMiAqLworCTB4MDAwMCwgICAgIC8qIFIxNzAgLSBCYXR0ZXJ5IENoYXJnZXIgQ29udHJvbCAzICovCisJMHgwMDAwLCAgICAgLyogUjE3MSAqLworCTB4MDAwMCwgICAgIC8qIFIxNzIgLSBDdXJyZW50IFNpbmsgRHJpdmVyIEEgKi8KKwkweDAwMDAsICAgICAvKiBSMTczIC0gQ1NBIEZsYXNoIGNvbnRyb2wgKi8KKwkweDAwMDAsICAgICAvKiBSMTc0IC0gQ3VycmVudCBTaW5rIERyaXZlciBCICovCisJMHgwMDAwLCAgICAgLyogUjE3NSAtIENTQiBGbGFzaCBjb250cm9sICovCisJMHgwMDAwLCAgICAgLyogUjE3NiAtIERDREMvTERPIHJlcXVlc3RlZCAqLworCTB4MDAyRCwgICAgIC8qIFIxNzcgLSBEQ0RDIEFjdGl2ZSBvcHRpb25zICovCisJMHgwMDAwLCAgICAgLyogUjE3OCAtIERDREMgU2xlZXAgb3B0aW9ucyAqLworCTB4MDAyNSwgICAgIC8qIFIxNzkgLSBQb3dlci1jaGVjayBjb21wYXJhdG9yICovCisJMHgwMDBFLCAgICAgLyogUjE4MCAtIERDREMxIENvbnRyb2wgKi8KKwkweDA0MDAsICAgICAvKiBSMTgxIC0gRENEQzEgVGltZW91dHMgKi8KKwkweDEwMDYsICAgICAvKiBSMTgyIC0gRENEQzEgTG93IFBvd2VyICovCisJMHgwMDE4LCAgICAgLyogUjE4MyAtIERDREMyIENvbnRyb2wgKi8KKwkweDAwMDAsICAgICAvKiBSMTg0IC0gRENEQzIgVGltZW91dHMgKi8KKwkweDAwMDAsICAgICAvKiBSMTg1ICovCisJMHgwMDBFLCAgICAgLyogUjE4NiAtIERDREMzIENvbnRyb2wgKi8KKwkweDA0MDAsICAgICAvKiBSMTg3IC0gRENEQzMgVGltZW91dHMgKi8KKwkweDAwMDYsICAgICAvKiBSMTg4IC0gRENEQzMgTG93IFBvd2VyICovCisJMHgwMDI2LCAgICAgLyogUjE4OSAtIERDREM0IENvbnRyb2wgKi8KKwkweDA0MDAsICAgICAvKiBSMTkwIC0gRENEQzQgVGltZW91dHMgKi8KKwkweDAwMDYsICAgICAvKiBSMTkxIC0gRENEQzQgTG93IFBvd2VyICovCisJMHgwMDA4LCAgICAgLyogUjE5MiAtIERDREM1IENvbnRyb2wgKi8KKwkweDAwMDAsICAgICAvKiBSMTkzIC0gRENEQzUgVGltZW91dHMgKi8KKwkweDAwMDAsICAgICAvKiBSMTk0ICovCisJMHgwMDI2LCAgICAgLyogUjE5NSAtIERDREM2IENvbnRyb2wgKi8KKwkweDA0MDAsICAgICAvKiBSMTk2IC0gRENEQzYgVGltZW91dHMgKi8KKwkweDAwMDYsICAgICAvKiBSMTk3IC0gRENEQzYgTG93IFBvd2VyICovCisJMHgwMDAwLCAgICAgLyogUjE5OCAqLworCTB4MDAwMywgICAgIC8qIFIxOTkgLSBMaW1pdCBTd2l0Y2ggQ29udHJvbCAqLworCTB4MDAxQywgICAgIC8qIFIyMDAgLSBMRE8xIENvbnRyb2wgKi8KKwkweDAwMDAsICAgICAvKiBSMjAxIC0gTERPMSBUaW1lb3V0cyAqLworCTB4MDAxQywgICAgIC8qIFIyMDIgLSBMRE8xIExvdyBQb3dlciAqLworCTB4MDAxQywgICAgIC8qIFIyMDMgLSBMRE8yIENvbnRyb2wgKi8KKwkweDA0MDAsICAgICAvKiBSMjA0IC0gTERPMiBUaW1lb3V0cyAqLworCTB4MDAxQywgICAgIC8qIFIyMDUgLSBMRE8yIExvdyBQb3dlciAqLworCTB4MDAxQywgICAgIC8qIFIyMDYgLSBMRE8zIENvbnRyb2wgKi8KKwkweDA0MDAsICAgICAvKiBSMjA3IC0gTERPMyBUaW1lb3V0cyAqLworCTB4MDAxQywgICAgIC8qIFIyMDggLSBMRE8zIExvdyBQb3dlciAqLworCTB4MDAxRiwgICAgIC8qIFIyMDkgLSBMRE80IENvbnRyb2wgKi8KKwkweDA0MDAsICAgICAvKiBSMjEwIC0gTERPNCBUaW1lb3V0cyAqLworCTB4MDAxQywgICAgIC8qIFIyMTEgLSBMRE80IExvdyBQb3dlciAqLworCTB4MDAwMCwgICAgIC8qIFIyMTIgKi8KKwkweDAwMDAsICAgICAvKiBSMjEzICovCisJMHgwMDAwLCAgICAgLyogUjIxNCAqLworCTB4MDAwMCwgICAgIC8qIFIyMTUgLSBWQ0NfRkFVTFQgTWFza3MgKi8KKwkweDAwMUYsICAgICAvKiBSMjE2IC0gTWFpbiBCYW5kZ2FwIENvbnRyb2wgKi8KKwkweDAwMDAsICAgICAvKiBSMjE3IC0gT1NDIENvbnRyb2wgKi8KKwkweDkwMDAsICAgICAvKiBSMjE4IC0gUlRDIFRpY2sgQ29udHJvbCAqLworCTB4MDAwMCwgICAgIC8qIFIyMTkgKi8KKwkweDQwMDAsICAgICAvKiBSMjIwIC0gUkFNIEJJU1QgMSAqLworCTB4MDAwMCwgICAgIC8qIFIyMjEgKi8KKwkweDAwMDAsICAgICAvKiBSMjIyICovCisJMHgwMDAwLCAgICAgLyogUjIyMyAqLworCTB4MDAwMCwgICAgIC8qIFIyMjQgKi8KKwkweDAwMDAsICAgICAvKiBSMjI1IC0gRENEQy9MRE8gc3RhdHVzICovCisJMHgwMDAwLCAgICAgLyogUjIyNiAqLworCTB4MDAwMCwgICAgIC8qIFIyMjcgKi8KKwkweDAwMDAsICAgICAvKiBSMjI4ICovCisJMHgwMDAwLCAgICAgLyogUjIyOSAqLworCTB4RTAwMCwgICAgIC8qIFIyMzAgLSBHUElPIFBpbiBTdGF0dXMgKi8KKwkweDAwMDAsICAgICAvKiBSMjMxICovCisJMHgwMDAwLCAgICAgLyogUjIzMiAqLworCTB4MDAwMCwgICAgIC8qIFIyMzMgKi8KKwkweDAwMDAsICAgICAvKiBSMjM0ICovCisJMHgwMDAwLCAgICAgLyogUjIzNSAqLworCTB4MDAwMCwgICAgIC8qIFIyMzYgKi8KKwkweDAwMDAsICAgICAvKiBSMjM3ICovCisJMHgwMDAwLCAgICAgLyogUjIzOCAqLworCTB4MDAwMCwgICAgIC8qIFIyMzkgKi8KKwkweDAwMDAsICAgICAvKiBSMjQwICovCisJMHgwMDAwLCAgICAgLyogUjI0MSAqLworCTB4MDAwMCwgICAgIC8qIFIyNDIgKi8KKwkweDAwMDAsICAgICAvKiBSMjQzICovCisJMHgwMDAwLCAgICAgLyogUjI0NCAqLworCTB4MDAwMCwgICAgIC8qIFIyNDUgKi8KKwkweDAwMDAsICAgICAvKiBSMjQ2ICovCisJMHgwMDAwLCAgICAgLyogUjI0NyAqLworCTB4MDAwMCwgICAgIC8qIFIyNDggKi8KKwkweDAwMDAsICAgICAvKiBSMjQ5ICovCisJMHgwMDAwLCAgICAgLyogUjI1MCAqLworCTB4MDAwMCwgICAgIC8qIFIyNTEgKi8KKwkweDAwMDAsICAgICAvKiBSMjUyICovCisJMHgwMDAwLCAgICAgLyogUjI1MyAqLworCTB4MDAwMCwgICAgIC8qIFIyNTQgKi8KKwkweDAwMDAsICAgICAvKiBSMjU1ICovCit9OworI2VuZGlmCisKKy8qIFRoZSByZWdpc3RlciBkZWZhdWx0cyBmb3IgdGhlIGNvbmZpZyBtb2RlIHVzZWQgbXVzdCBiZSBjb21waWxlZCBpbiBidXQKKyAqIGR1ZSB0byB0aGUgaW1wYWN0IG9uIGtlcm5lbCBzaXplIGl0IGlzIHBvc3NpYmxlIHRvIGRpc2FibGUKKyAqLworI2lmbmRlZiBXTTgzNTBfSEFWRV9DT05GSUdfTU9ERQorI3dhcm5pbmcgTm8gV004MzUwIGNvbmZpZyBtb2RlcyBzdXBwb3J0ZWQgLSBzZWxlY3QgYXQgbGVhc3Qgb25lIG9mIHRoZQorI3dhcm5pbmcgTUZEX1dNODM1MF9DT05GSUdfTU9ERV9uIG9wdGlvbnMgZnJvbSB0aGUgYm9hcmQgZHJpdmVyLgorI2VuZGlmCisKKy8qCisgKiBBY2Nlc3MgbWFza3MuCisgKi8KKworY29uc3Qgc3RydWN0IHdtODM1MF9yZWdfYWNjZXNzIHdtODM1MF9yZWdfaW9fbWFwW10gPSB7CisJLyogIHJlYWQgICAgd3JpdGUgdm9sYXRpbGUgKi8KKwl7IDB4RkZGRiwgMHhGRkZGLCAweEZGRkYgfSwgLyogUjAgICAtIFJlc2V0L0lEICovCisJeyAweDdDRkYsIDB4MEMwMCwgMHg3RkZGIH0sIC8qIFIxICAgLSBJRCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMiAqLworCXsgMHhCRTNCLCAweEJFM0IsIDB4ODAwMCB9LCAvKiBSMyAgIC0gU3lzdGVtIENvbnRyb2wgMSAqLworCXsgMHhGQ0Y3LCAweEZDRjcsIDB4RjgwMCB9LCAvKiBSNCAgIC0gU3lzdGVtIENvbnRyb2wgMiAqLworCXsgMHg4MEZGLCAweDgwRkYsIDB4ODAwMCB9LCAvKiBSNSAgIC0gU3lzdGVtIEhpYmVybmF0ZSAqLworCXsgMHhGQjBFLCAweEZCMEUsIDB4MDAwMCB9LCAvKiBSNiAgIC0gSW50ZXJmYWNlIENvbnRyb2wgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjcgKi8KKwl7IDB4RTUzNywgMHhFNTM3LCAweEZGRkYgfSwgLyogUjggICAtIFBvd2VyIG1nbXQgKDEpICovCisJeyAweDBGRjMsIDB4MEZGMywgMHhGRkZGIH0sIC8qIFI5ICAgLSBQb3dlciBtZ210ICgyKSAqLworCXsgMHgwMDhGLCAweDAwOEYsIDB4RkZGRiB9LCAvKiBSMTAgIC0gUG93ZXIgbWdtdCAoMykgKi8KKwl7IDB4NkQzQywgMHg2RDNDLCAweEZGRkYgfSwgLyogUjExICAtIFBvd2VyIG1nbXQgKDQpICovCisJeyAweDFGOEYsIDB4MUY4RiwgMHhGRkZGIH0sIC8qIFIxMiAgLSBQb3dlciBtZ210ICg1KSAqLworCXsgMHg4RjNGLCAweDhGM0YsIDB4RkZGRiB9LCAvKiBSMTMgIC0gUG93ZXIgbWdtdCAoNikgKi8KKwl7IDB4MDAwMywgMHgwMDAzLCAweEZGRkYgfSwgLyogUjE0ICAtIFBvd2VyIG1nbXQgKDcpICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNSAqLworCXsgMHg3RjdGLCAweDdGN0YsIDB4RkZGRiB9LCAvKiBSMTYgIC0gUlRDIFNlY29uZHMvTWludXRlcyAqLworCXsgMHgwNzNGLCAweDA3M0YsIDB4RkZGRiB9LCAvKiBSMTcgIC0gUlRDIEhvdXJzL0RheSAqLworCXsgMHgxRjNGLCAweDFGM0YsIDB4RkZGRiB9LCAvKiBSMTggIC0gUlRDIERhdGUvTW9udGggKi8KKwl7IDB4M0ZGRiwgMHgwMEZGLCAweEZGRkYgfSwgLyogUjE5ICAtIFJUQyBZZWFyICovCisJeyAweDdGN0YsIDB4N0Y3RiwgMHgwMDAwIH0sIC8qIFIyMCAgLSBBbGFybSBTZWNvbmRzL01pbnV0ZXMgKi8KKwl7IDB4MEYzRiwgMHgwRjNGLCAweDAwMDAgfSwgLyogUjIxICAtIEFsYXJtIEhvdXJzL0RheSAqLworCXsgMHgxRjNGLCAweDFGM0YsIDB4MDAwMCB9LCAvKiBSMjIgIC0gQWxhcm0gRGF0ZS9Nb250aCAqLworCXsgMHhFRjdGLCAweEVBN0YsIDB4RkZGRiB9LCAvKiBSMjMgIC0gUlRDIFRpbWUgQ29udHJvbCAqLworCXsgMHgzQkZGLCAweDAwMDAsIDB4RkZGRiB9LCAvKiBSMjQgIC0gU3lzdGVtIEludGVycnVwdHMgKi8KKwl7IDB4RkVFNywgMHgwMDAwLCAweEZGRkYgfSwgLyogUjI1ICAtIEludGVycnVwdCBTdGF0dXMgMSAqLworCXsgMHgzNUZGLCAweDAwMDAsIDB4RkZGRiB9LCAvKiBSMjYgIC0gSW50ZXJydXB0IFN0YXR1cyAyICovCisJeyAweDBGM0YsIDB4MDAwMCwgMHhGRkZGIH0sIC8qIFIyNyAgLSBQb3dlciBVcCBJbnRlcnJ1cHQgU3RhdHVzICovCisJeyAweDBGM0YsIDB4MDAwMCwgMHhGRkZGIH0sIC8qIFIyOCAgLSBVbmRlciBWb2x0YWdlIEludGVycnVwdCBzdGF0dXMgKi8KKwl7IDB4ODAwMCwgMHgwMDAwLCAweEZGRkYgfSwgLyogUjI5ICAtIE92ZXIgQ3VycmVudCBJbnRlcnJ1cHQgc3RhdHVzICovCisJeyAweDFGRkYsIDB4MDAwMCwgMHhGRkZGIH0sIC8qIFIzMCAgLSBHUElPIEludGVycnVwdCBTdGF0dXMgKi8KKwl7IDB4RUY3RiwgMHgwMDAwLCAweEZGRkYgfSwgLyogUjMxICAtIENvbXBhcmF0b3IgSW50ZXJydXB0IFN0YXR1cyAqLworCXsgMHgzRkZGLCAweDNGRkYsIDB4MDAwMCB9LCAvKiBSMzIgIC0gU3lzdGVtIEludGVycnVwdHMgTWFzayAqLworCXsgMHhGRUU3LCAweEZFRTcsIDB4MDAwMCB9LCAvKiBSMzMgIC0gSW50ZXJydXB0IFN0YXR1cyAxIE1hc2sgKi8KKwl7IDB4RjVGRiwgMHhGNUZGLCAweDAwMDAgfSwgLyogUjM0ICAtIEludGVycnVwdCBTdGF0dXMgMiBNYXNrICovCisJeyAweDBGM0YsIDB4MEYzRiwgMHgwMDAwIH0sIC8qIFIzNSAgLSBQb3dlciBVcCBJbnRlcnJ1cHQgU3RhdHVzIE1hc2sgKi8KKwl7IDB4MEYzRiwgMHgwRjNGLCAweDAwMDAgfSwgLyogUjM2ICAtIFVuZGVyIFZvbHRhZ2UgSW50IHN0YXR1cyBNYXNrICovCisJeyAweDgwMDAsIDB4ODAwMCwgMHgwMDAwIH0sIC8qIFIzNyAgLSBPdmVyIEN1cnJlbnQgSW50IHN0YXR1cyBNYXNrICovCisJeyAweDFGRkYsIDB4MUZGRiwgMHgwMDAwIH0sIC8qIFIzOCAgLSBHUElPIEludGVycnVwdCBTdGF0dXMgTWFzayAqLworCXsgMHhFRjdGLCAweEVGN0YsIDB4MDAwMCB9LCAvKiBSMzkgIC0gQ29tcGFyYXRvciBJbnRTdGF0dXMgTWFzayAqLworCXsgMHhDOUY3LCAweEM5RjcsIDB4RkZGRiB9LCAvKiBSNDAgIC0gQ2xvY2sgQ29udHJvbCAxICovCisJeyAweDgwMDEsIDB4ODAwMSwgMHgwMDAwIH0sIC8qIFI0MSAgLSBDbG9jayBDb250cm9sIDIgKi8KKwl7IDB4RkZGNywgMHhGRkY3LCAweEZGRkYgfSwgLyogUjQyICAtIEZMTCBDb250cm9sIDEgKi8KKwl7IDB4RkJGRiwgMHhGQkZGLCAweDAwMDAgfSwgLyogUjQzICAtIEZMTCBDb250cm9sIDIgKi8KKwl7IDB4RkZGRiwgMHhGRkZGLCAweDAwMDAgfSwgLyogUjQ0ICAtIEZMTCBDb250cm9sIDMgKi8KKwl7IDB4MDAzMywgMHgwMDMzLCAweDAwMDAgfSwgLyogUjQ1ICAtIEZMTCBDb250cm9sIDQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQ2ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI0NyAqLworCXsgMHgzMDMzLCAweDMwMzMsIDB4MDAwMCB9LCAvKiBSNDggIC0gREFDIENvbnRyb2wgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjQ5ICovCisJeyAweDgxRkYsIDB4ODFGRiwgMHhGRkZGIH0sIC8qIFI1MCAgLSBEQUMgRGlnaXRhbCBWb2x1bWUgTCAqLworCXsgMHg4MUZGLCAweDgxRkYsIDB4RkZGRiB9LCAvKiBSNTEgIC0gREFDIERpZ2l0YWwgVm9sdW1lIFIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjUyICovCisJeyAweDBGRkYsIDB4MEZGRiwgMHhGRkZGIH0sIC8qIFI1MyAgLSBEQUMgTFIgUmF0ZSAqLworCXsgMHgwMDE3LCAweDAwMTcsIDB4MDAwMCB9LCAvKiBSNTQgIC0gREFDIENsb2NrIENvbnRyb2wgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjU1ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI1NiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNTcgKi8KKwl7IDB4NDAwMCwgMHg0MDAwLCAweDAwMDAgfSwgLyogUjU4ICAtIERBQyBNdXRlICovCisJeyAweDcwMDAsIDB4NzAwMCwgMHgwMDAwIH0sIC8qIFI1OSAgLSBEQUMgTXV0ZSBWb2x1bWUgKi8KKwl7IDB4M0MwMCwgMHgzQzAwLCAweDAwMDAgfSwgLyogUjYwICAtIERBQyBTaWRlICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI2MSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNjIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjYzICovCisJeyAweDgzMDMsIDB4ODMwMywgMHhGRkZGIH0sIC8qIFI2NCAgLSBBREMgQ29udHJvbCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNjUgKi8KKwl7IDB4ODFGRiwgMHg4MUZGLCAweEZGRkYgfSwgLyogUjY2ICAtIEFEQyBEaWdpdGFsIFZvbHVtZSBMICovCisJeyAweDgxRkYsIDB4ODFGRiwgMHhGRkZGIH0sIC8qIFI2NyAgLSBBREMgRGlnaXRhbCBWb2x1bWUgUiAqLworCXsgMHgwRkZGLCAweDBGRkYsIDB4MDAwMCB9LCAvKiBSNjggIC0gQURDIERpdmlkZXIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjY5ICovCisJeyAweDBGRkYsIDB4MEZGRiwgMHhGRkZGIH0sIC8qIFI3MCAgLSBBREMgTFIgUmF0ZSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSNzEgKi8KKwl7IDB4MDcwNywgMHgwNzA3LCAweEZGRkYgfSwgLyogUjcyICAtIElucHV0IENvbnRyb2wgKi8KKwl7IDB4QzBDMCwgMHhDMEMwLCAweEZGRkYgfSwgLyogUjczICAtIElOMyBJbnB1dCBDb250cm9sICovCisJeyAweEMwOUYsIDB4QzA5RiwgMHhGRkZGIH0sIC8qIFI3NCAgLSBNaWMgQmlhcyBDb250cm9sICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3NSAqLworCXsgMHgwRjE1LCAweDBGMTUsIDB4RkZGRiB9LCAvKiBSNzYgIC0gT3V0cHV0IENvbnRyb2wgKi8KKwl7IDB4QzAwMCwgMHhDMDAwLCAweEZGRkYgfSwgLyogUjc3ICAtIEphY2sgRGV0ZWN0ICovCisJeyAweDAzRkYsIDB4MDNGRiwgMHgwMDAwIH0sIC8qIFI3OCAgLSBBbnRpIFBvcCBDb250cm9sICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI3OSAqLworCXsgMHhFMUZDLCAweEUxRkMsIDB4ODAwMCB9LCAvKiBSODAgIC0gTGVmdCBJbnB1dCBWb2x1bWUgKi8KKwl7IDB4RTFGQywgMHhFMUZDLCAweDgwMDAgfSwgLyogUjgxICAtIFJpZ2h0IElucHV0IFZvbHVtZSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSODIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjgzICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI4NCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSODUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjg2ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI4NyAqLworCXsgMHg5ODA3LCAweDk4MDcsIDB4RkZGRiB9LCAvKiBSODggIC0gTGVmdCBNaXhlciBDb250cm9sICovCisJeyAweDk4MEIsIDB4OTgwQiwgMHhGRkZGIH0sIC8qIFI4OSAgLSBSaWdodCBNaXhlciBDb250cm9sICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI5MCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSOTEgKi8KKwl7IDB4ODkwOSwgMHg4OTA5LCAweEZGRkYgfSwgLyogUjkyICAtIE9VVDMgTWl4ZXIgQ29udHJvbCAqLworCXsgMHg5RTA3LCAweDlFMDcsIDB4RkZGRiB9LCAvKiBSOTMgIC0gT1VUNCBNaXhlciBDb250cm9sICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFI5NCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSOTUgKi8KKwl7IDB4MEVFRSwgMHgwRUVFLCAweDAwMDAgfSwgLyogUjk2ICAtIE91dHB1dCBMZWZ0IE1peGVyIFZvbHVtZSAqLworCXsgMHhFMEVFLCAweEUwRUUsIDB4MDAwMCB9LCAvKiBSOTcgIC0gT3V0cHV0IFJpZ2h0IE1peGVyIFZvbHVtZSAqLworCXsgMHgwRTBGLCAweDBFMEYsIDB4MDAwMCB9LCAvKiBSOTggIC0gSW5wdXQgTWl4ZXIgVm9sdW1lIEwgKi8KKwl7IDB4RTBFMSwgMHhFMEUxLCAweDAwMDAgfSwgLyogUjk5ICAtIElucHV0IE1peGVyIFZvbHVtZSBSICovCisJeyAweDgwMEUsIDB4ODAwRSwgMHgwMDAwIH0sIC8qIFIxMDAgLSBJbnB1dCBNaXhlciBWb2x1bWUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEwMSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTAyICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMDMgKi8KKwl7IDB4RTFGQywgMHhFMUZDLCAweEZGRkYgfSwgLyogUjEwNCAtIExPVVQxIFZvbHVtZSAqLworCXsgMHhFMUZDLCAweEUxRkMsIDB4RkZGRiB9LCAvKiBSMTA1IC0gUk9VVDEgVm9sdW1lICovCisJeyAweEUxRkMsIDB4RTFGQywgMHhGRkZGIH0sIC8qIFIxMDYgLSBMT1VUMiBWb2x1bWUgKi8KKwl7IDB4RTdGQywgMHhFN0ZDLCAweEZGRkYgfSwgLyogUjEwNyAtIFJPVVQyIFZvbHVtZSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTA4ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMDkgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjExMCAqLworCXsgMHg4MEUwLCAweDgwRTAsIDB4RkZGRiB9LCAvKiBSMTExIC0gQkVFUCBWb2x1bWUgKi8KKwl7IDB4QkYwMCwgMHhCRjAwLCAweDAwMDAgfSwgLyogUjExMiAtIEFJIEZvcm1hdGluZyAqLworCXsgMHgwMEYxLCAweDAwRjEsIDB4MDAwMCB9LCAvKiBSMTEzIC0gQURDIERBQyBDT01QICovCisJeyAweDAwRjgsIDB4MDBGOCwgMHgwMDAwIH0sIC8qIFIxMTQgLSBBSSBBREMgQ29udHJvbCAqLworCXsgMHg0MEZCLCAweDQwRkIsIDB4MDAwMCB9LCAvKiBSMTE1IC0gQUkgREFDIENvbnRyb2wgKi8KKwl7IDB4N0MzMCwgMHg3QzMwLCAweDAwMDAgfSwgLyogUjExNiAtIEFJRiBUZXN0ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMTcgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjExOCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTE5ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMjAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyMSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTIyICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMjMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyNCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTI1ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMjYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEyNyAqLworCXsgMHgxRkZGLCAweDFGRkYsIDB4MDAwMCB9LCAvKiBSMTI4IC0gR1BJTyBEZWJvdW5jZSAqLworCXsgMHgxRkZGLCAweDFGRkYsIDB4MDAwMCB9LCAvKiBSMTI5IC0gR1BJTyBQaW4gcHVsbCB1cCBDb250cm9sICovCisJeyAweDFGRkYsIDB4MUZGRiwgMHgwMDAwIH0sIC8qIFIxMzAgLSBHUElPIFB1bGwgZG93biBDb250cm9sICovCisJeyAweDFGRkYsIDB4MUZGRiwgMHgwMDAwIH0sIC8qIFIxMzEgLSBHUElPIEludGVycnVwdCBNb2RlICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMzIgKi8KKwl7IDB4MDBDMCwgMHgwMEMwLCAweDAwMDAgfSwgLyogUjEzMyAtIEdQSU8gQ29udHJvbCAqLworCXsgMHgxRkZGLCAweDFGRkYsIDB4MDAwMCB9LCAvKiBSMTM0IC0gR1BJTyBDb25maWd1cmF0aW9uIChpL28pICovCisJeyAweDFGRkYsIDB4MUZGRiwgMHgwMDAwIH0sIC8qIFIxMzUgLSBHUElPIFBpbiBQb2xhcml0eSAvIFR5cGUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEzNiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTM3ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxMzggKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjEzOSAqLworCXsgMHhGRkZGLCAweEZGRkYsIDB4MDAwMCB9LCAvKiBSMTQwIC0gR1BJTyBGdW5jdGlvbiBTZWxlY3QgMSAqLworCXsgMHhGRkZGLCAweEZGRkYsIDB4MDAwMCB9LCAvKiBSMTQxIC0gR1BJTyBGdW5jdGlvbiBTZWxlY3QgMiAqLworCXsgMHhGRkZGLCAweEZGRkYsIDB4MDAwMCB9LCAvKiBSMTQyIC0gR1BJTyBGdW5jdGlvbiBTZWxlY3QgMyAqLworCXsgMHgwMDBGLCAweDAwMEYsIDB4MDAwMCB9LCAvKiBSMTQzIC0gR1BJTyBGdW5jdGlvbiBTZWxlY3QgNCAqLworCXsgMHhGMEZGLCAweEYwRkYsIDB4QTAwMCB9LCAvKiBSMTQ0IC0gRGlnaXRpc2VyIENvbnRyb2wgKDEpICovCisJeyAweDM3MDcsIDB4MzcwNywgMHgwMDAwIH0sIC8qIFIxNDUgLSBEaWdpdGlzZXIgQ29udHJvbCAoMikgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE0NiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTQ3ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNDggKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE0OSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTUwICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNTEgKi8KKwl7IDB4N0ZGRiwgMHg3MDAwLCAweEZGRkYgfSwgLyogUjE1MiAtIEFVWDEgUmVhZGJhY2sgKi8KKwl7IDB4N0ZGRiwgMHg3MDAwLCAweEZGRkYgfSwgLyogUjE1MyAtIEFVWDIgUmVhZGJhY2sgKi8KKwl7IDB4N0ZGRiwgMHg3MDAwLCAweEZGRkYgfSwgLyogUjE1NCAtIEFVWDMgUmVhZGJhY2sgKi8KKwl7IDB4N0ZGRiwgMHg3MDAwLCAweEZGRkYgfSwgLyogUjE1NSAtIEFVWDQgUmVhZGJhY2sgKi8KKwl7IDB4MEZGRiwgMHgwMDAwLCAweEZGRkYgfSwgLyogUjE1NiAtIFVTQiBWb2x0YWdlIFJlYWRiYWNrICovCisJeyAweDBGRkYsIDB4MDAwMCwgMHhGRkZGIH0sIC8qIFIxNTcgLSBMSU5FIFZvbHRhZ2UgUmVhZGJhY2sgKi8KKwl7IDB4MEZGRiwgMHgwMDAwLCAweEZGRkYgfSwgLyogUjE1OCAtIEJBVFQgVm9sdGFnZSBSZWFkYmFjayAqLworCXsgMHgwRkZGLCAweDAwMDAsIDB4RkZGRiB9LCAvKiBSMTU5IC0gQ2hpcCBUZW1wIFJlYWRiYWNrICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxNjAgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE2MSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMTYyICovCisJeyAweDAwMEYsIDB4MDAwRiwgMHgwMDAwIH0sIC8qIFIxNjMgLSBHZW5lcmljIENvbXBhcmF0b3IgQ29udHJvbCAqLworCXsgMHhGRkZGLCAweEZGRkYsIDB4MDAwMCB9LCAvKiBSMTY0IC0gR2VuZXJpYyBjb21wYXJhdG9yIDEgKi8KKwl7IDB4RkZGRiwgMHhGRkZGLCAweDAwMDAgfSwgLyogUjE2NSAtIEdlbmVyaWMgY29tcGFyYXRvciAyICovCisJeyAweEZGRkYsIDB4RkZGRiwgMHgwMDAwIH0sIC8qIFIxNjYgLSBHZW5lcmljIGNvbXBhcmF0b3IgMyAqLworCXsgMHhGRkZGLCAweEZGRkYsIDB4MDAwMCB9LCAvKiBSMTY3IC0gR2VuZXJpYyBjb21wYXJhdG9yIDQgKi8KKwl7IDB4QkZGRiwgMHhCRkZGLCAweDgwMDAgfSwgLyogUjE2OCAtIEJhdHRlcnkgQ2hhcmdlciBDb250cm9sIDEgKi8KKwl7IDB4RkZGRiwgMHg0RkZGLCAweEIwMDAgfSwgLyogUjE2OSAtIEJhdHRlcnkgQ2hhcmdlciBDb250cm9sIDIgKi8KKwl7IDB4MDA3RiwgMHgwMDdGLCAweDAwMDAgfSwgLyogUjE3MCAtIEJhdHRlcnkgQ2hhcmdlciBDb250cm9sIDMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE3MSAqLworCXsgMHg5MDNGLCAweDkwM0YsIDB4RkZGRiB9LCAvKiBSMTcyIC0gQ3VycmVudCBTaW5rIERyaXZlciBBICovCisJeyAweEUzMzMsIDB4RTMzMywgMHhGRkZGIH0sIC8qIFIxNzMgLSBDU0EgRmxhc2ggY29udHJvbCAqLworCXsgMHg5MDNGLCAweDkwM0YsIDB4RkZGRiB9LCAvKiBSMTc0IC0gQ3VycmVudCBTaW5rIERyaXZlciBCICovCisJeyAweEUzMzMsIDB4RTMzMywgMHhGRkZGIH0sIC8qIFIxNzUgLSBDU0IgRmxhc2ggY29udHJvbCAqLworCXsgMHg4RjNGLCAweDhGM0YsIDB4RkZGRiB9LCAvKiBSMTc2IC0gRENEQy9MRE8gcmVxdWVzdGVkICovCisJeyAweDMzMkQsIDB4MzMyRCwgMHgwMDAwIH0sIC8qIFIxNzcgLSBEQ0RDIEFjdGl2ZSBvcHRpb25zICovCisJeyAweDAwMkQsIDB4MDAyRCwgMHgwMDAwIH0sIC8qIFIxNzggLSBEQ0RDIFNsZWVwIG9wdGlvbnMgKi8KKwl7IDB4NTE3NywgMHg1MTc3LCAweDgwMDAgfSwgLyogUjE3OSAtIFBvd2VyLWNoZWNrIGNvbXBhcmF0b3IgKi8KKwl7IDB4MDQ3RiwgMHgwNDdGLCAweDAwMDAgfSwgLyogUjE4MCAtIERDREMxIENvbnRyb2wgKi8KKwl7IDB4RkZDMCwgMHhGRkMwLCAweDAwMDAgfSwgLyogUjE4MSAtIERDREMxIFRpbWVvdXRzICovCisJeyAweDczN0YsIDB4NzM3RiwgMHgwMDAwIH0sIC8qIFIxODIgLSBEQ0RDMSBMb3cgUG93ZXIgKi8KKwl7IDB4NTM1QiwgMHg1MzVCLCAweDAwMDAgfSwgLyogUjE4MyAtIERDREMyIENvbnRyb2wgKi8KKwl7IDB4RkZDMCwgMHhGRkMwLCAweDAwMDAgfSwgLyogUjE4NCAtIERDREMyIFRpbWVvdXRzICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxODUgKi8KKwl7IDB4MDQ3RiwgMHgwNDdGLCAweDAwMDAgfSwgLyogUjE4NiAtIERDREMzIENvbnRyb2wgKi8KKwl7IDB4RkZDMCwgMHhGRkMwLCAweDAwMDAgfSwgLyogUjE4NyAtIERDREMzIFRpbWVvdXRzICovCisJeyAweDczN0YsIDB4NzM3RiwgMHgwMDAwIH0sIC8qIFIxODggLSBEQ0RDMyBMb3cgUG93ZXIgKi8KKwl7IDB4MDQ3RiwgMHgwNDdGLCAweDAwMDAgfSwgLyogUjE4OSAtIERDREM0IENvbnRyb2wgKi8KKwl7IDB4RkZDMCwgMHhGRkMwLCAweDAwMDAgfSwgLyogUjE5MCAtIERDREM0IFRpbWVvdXRzICovCisJeyAweDczN0YsIDB4NzM3RiwgMHgwMDAwIH0sIC8qIFIxOTEgLSBEQ0RDNCBMb3cgUG93ZXIgKi8KKwl7IDB4NTM1QiwgMHg1MzVCLCAweDAwMDAgfSwgLyogUjE5MiAtIERDREM1IENvbnRyb2wgKi8KKwl7IDB4RkZDMCwgMHhGRkMwLCAweDAwMDAgfSwgLyogUjE5MyAtIERDREM1IFRpbWVvdXRzICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIxOTQgKi8KKwl7IDB4MDQ3RiwgMHgwNDdGLCAweDAwMDAgfSwgLyogUjE5NSAtIERDREM2IENvbnRyb2wgKi8KKwl7IDB4RkZDMCwgMHhGRkMwLCAweDAwMDAgfSwgLyogUjE5NiAtIERDREM2IFRpbWVvdXRzICovCisJeyAweDczN0YsIDB4NzM3RiwgMHgwMDAwIH0sIC8qIFIxOTcgLSBEQ0RDNiBMb3cgUG93ZXIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjE5OCAqLworCXsgMHhGRkQzLCAweEZGRDMsIDB4MDAwMCB9LCAvKiBSMTk5IC0gTGltaXQgU3dpdGNoIENvbnRyb2wgKi8KKwl7IDB4NDQxRiwgMHg0NDFGLCAweDAwMDAgfSwgLyogUjIwMCAtIExETzEgQ29udHJvbCAqLworCXsgMHhGRkMwLCAweEZGQzAsIDB4MDAwMCB9LCAvKiBSMjAxIC0gTERPMSBUaW1lb3V0cyAqLworCXsgMHgzMzFGLCAweDMzMUYsIDB4MDAwMCB9LCAvKiBSMjAyIC0gTERPMSBMb3cgUG93ZXIgKi8KKwl7IDB4NDQxRiwgMHg0NDFGLCAweDAwMDAgfSwgLyogUjIwMyAtIExETzIgQ29udHJvbCAqLworCXsgMHhGRkMwLCAweEZGQzAsIDB4MDAwMCB9LCAvKiBSMjA0IC0gTERPMiBUaW1lb3V0cyAqLworCXsgMHgzMzFGLCAweDMzMUYsIDB4MDAwMCB9LCAvKiBSMjA1IC0gTERPMiBMb3cgUG93ZXIgKi8KKwl7IDB4NDQxRiwgMHg0NDFGLCAweDAwMDAgfSwgLyogUjIwNiAtIExETzMgQ29udHJvbCAqLworCXsgMHhGRkMwLCAweEZGQzAsIDB4MDAwMCB9LCAvKiBSMjA3IC0gTERPMyBUaW1lb3V0cyAqLworCXsgMHgzMzFGLCAweDMzMUYsIDB4MDAwMCB9LCAvKiBSMjA4IC0gTERPMyBMb3cgUG93ZXIgKi8KKwl7IDB4NDQxRiwgMHg0NDFGLCAweDAwMDAgfSwgLyogUjIwOSAtIExETzQgQ29udHJvbCAqLworCXsgMHhGRkMwLCAweEZGQzAsIDB4MDAwMCB9LCAvKiBSMjEwIC0gTERPNCBUaW1lb3V0cyAqLworCXsgMHgzMzFGLCAweDMzMUYsIDB4MDAwMCB9LCAvKiBSMjExIC0gTERPNCBMb3cgUG93ZXIgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjIxMiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMjEzICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyMTQgKi8KKwl7IDB4OEYzRiwgMHg4RjNGLCAweDAwMDAgfSwgLyogUjIxNSAtIFZDQ19GQVVMVCBNYXNrcyAqLworCXsgMHhGRjNGLCAweEUwM0YsIDB4MDAwMCB9LCAvKiBSMjE2IC0gTWFpbiBCYW5kZ2FwIENvbnRyb2wgKi8KKwl7IDB4RUYyRiwgMHhFMDJGLCAweDAwMDAgfSwgLyogUjIxNyAtIE9TQyBDb250cm9sICovCisJeyAweEYzRkYsIDB4QjNGRiwgMHhjMDAwIH0sIC8qIFIyMTggLSBSVEMgVGljayBDb250cm9sICovCisJeyAweEZGRkYsIDB4RkZGRiwgMHhGRkZGIH0sIC8qIFIyMTkgKi8KKwl7IDB4MDlGRiwgMHgwMUZGLCAweDAwMDAgfSwgLyogUjIyMCAtIFJBTSBCSVNUIDEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjIyMSAqLworCXsgMHhGRkZGLCAweEZGRkYsIDB4RkZGRiB9LCAvKiBSMjIyICovCisJeyAweEZGRkYsIDB4RkZGRiwgMHhGRkZGIH0sIC8qIFIyMjMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjIyNCAqLworCXsgMHg4RjNGLCAweDAwMDAsIDB4RkZGRiB9LCAvKiBSMjI1IC0gRENEQy9MRE8gc3RhdHVzICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyMjYgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweEZGRkYgfSwgLyogUjIyNyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMjI4ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyMjkgKi8KKwl7IDB4RkZGRiwgMHgxRkZGLCAweEZGRkYgfSwgLyogUjIzMCAtIEdQSU8gUGluIFN0YXR1cyAqLworCXsgMHhGRkZGLCAweDFGRkYsIDB4RkZGRiB9LCAvKiBSMjMxICovCisJeyAweEZGRkYsIDB4MUZGRiwgMHhGRkZGIH0sIC8qIFIyMzIgKi8KKwl7IDB4RkZGRiwgMHgxRkZGLCAweEZGRkYgfSwgLyogUjIzMyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMjM0ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyMzUgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjIzNiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMjM3ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyMzggKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjIzOSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMjQwICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyNDEgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjI0MiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMjQzICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyNDQgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjI0NSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMjQ2ICovCisJeyAweDAwMDAsIDB4MDAwMCwgMHgwMDAwIH0sIC8qIFIyNDcgKi8KKwl7IDB4RkZGRiwgMHgwMDEwLCAweEZGRkYgfSwgLyogUjI0OCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMjQ5ICovCisJeyAweEZGRkYsIDB4MDAxMCwgMHhGRkZGIH0sIC8qIFIyNTAgKi8KKwl7IDB4RkZGRiwgMHgwMDEwLCAweEZGRkYgfSwgLyogUjI1MSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMjUyICovCisJeyAweEZGRkYsIDB4MDAxMCwgMHhGRkZGIH0sIC8qIFIyNTMgKi8KKwl7IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAgfSwgLyogUjI1NCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCB9LCAvKiBSMjU1ICovCit9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZmQvd204NDAwLWNvcmUuYyBiL2RyaXZlcnMvbWZkL3dtODQwMC1jb3JlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmEwY2VkYgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWZkL3dtODQwMC1jb3JlLmMKQEAgLTAsMCArMSw0NTUgQEAKKy8qCisgKiBDb3JlIGRyaXZlciBmb3IgV004NDAwLgorICoKKyAqIENvcHlyaWdodCAyMDA4IFdvbGZzb24gTWljcm9lbGVjdHJvbmljcyBQTEMuCisgKgorICogQXV0aG9yOiBNYXJrIEJyb3duIDxicm9vbmllQG9wZW5zb3VyY2Uud29sZnNvbm1pY3JvLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlCisgKiBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvYnVnLmg+CisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbWZkL3dtODQwMC1wcml2YXRlLmg+CisjaW5jbHVkZSA8bGludXgvbWZkL3dtODQwMC1hdWRpby5oPgorCitzdGF0aWMgc3RydWN0IHsKKwl1MTYgIHJlYWRhYmxlOyAgICAvKiBNYXNrIG9mIHJlYWRhYmxlIGJpdHMgKi8KKwl1MTYgIHdyaXRhYmxlOyAgICAvKiBNYXNrIG9mIHdyaXRhYmxlIGJpdHMgKi8KKwl1MTYgIHZvbDsgICAgICAgICAvKiBNYXNrIG9mIHZvbGF0aWxlIGJpdHMgKi8KKwlpbnQgIGlzX2NvZGVjOyAgICAvKiBSZWdpc3RlciBjb250cm9sbGVkIGJ5IGNvZGVjIHJlc2V0ICovCisJdTE2ICBkZWZhdWx0X3ZhbDsgLyogVmFsdWUgb24gcmVzZXQgKi8KK30gcmVnX2RhdGFbXSA9IHsKKwl7IDB4RkZGRiwgMHhGRkZGLCAweDAwMDAsIDAsIDB4NjE3MiB9LCAvKiBSMCAqLworCXsgMHg3MDAwLCAweDAwMDAsIDB4ODAwMCwgMCwgMHgwMDAwIH0sIC8qIFIxICovCisJeyAweEZGMTcsIDB4RkYxNywgMHgwMDAwLCAwLCAweDAwMDAgfSwgLyogUjIgKi8KKwl7IDB4RUJGMywgMHhFQkYzLCAweDAwMDAsIDEsIDB4NjAwMCB9LCAvKiBSMyAqLworCXsgMHgzQ0YzLCAweDNDRjMsIDB4MDAwMCwgMSwgMHgwMDAwIH0sIC8qIFI0ICAqLworCXsgMHhGMUY4LCAweEYxRjgsIDB4MDAwMCwgMSwgMHg0MDUwIH0sIC8qIFI1ICAqLworCXsgMHhGQzFGLCAweEZDMUYsIDB4MDAwMCwgMSwgMHg0MDAwIH0sIC8qIFI2ICAqLworCXsgMHhERkRFLCAweERGREUsIDB4MDAwMCwgMSwgMHgwMUM4IH0sIC8qIFI3ICAqLworCXsgMHhGQ0ZDLCAweEZDRkMsIDB4MDAwMCwgMSwgMHgwMDAwIH0sIC8qIFI4ICAqLworCXsgMHhFRkZGLCAweEVGRkYsIDB4MDAwMCwgMSwgMHgwMDQwIH0sIC8qIFI5ICAqLworCXsgMHhFRkZGLCAweEVGRkYsIDB4MDAwMCwgMSwgMHgwMDQwIH0sIC8qIFIxMCAqLworCXsgMHgyN0Y3LCAweDI3RjcsIDB4MDAwMCwgMSwgMHgwMDA0IH0sIC8qIFIxMSAqLworCXsgMHgwMUZGLCAweDAxRkYsIDB4MDAwMCwgMSwgMHgwMEMwIH0sIC8qIFIxMiAqLworCXsgMHgwMUZGLCAweDAxRkYsIDB4MDAwMCwgMSwgMHgwMEMwIH0sIC8qIFIxMyAqLworCXsgMHgxRkVGLCAweDFGRUYsIDB4MDAwMCwgMSwgMHgwMDAwIH0sIC8qIFIxNCAqLworCXsgMHgwMTYzLCAweDAxNjMsIDB4MDAwMCwgMSwgMHgwMTAwIH0sIC8qIFIxNSAqLworCXsgMHgwMUZGLCAweDAxRkYsIDB4MDAwMCwgMSwgMHgwMEMwIH0sIC8qIFIxNiAqLworCXsgMHgwMUZGLCAweDAxRkYsIDB4MDAwMCwgMSwgMHgwMEMwIH0sIC8qIFIxNyAqLworCXsgMHgxRkZGLCAweDBGRkYsIDB4MDAwMCwgMSwgMHgwMDAwIH0sIC8qIFIxOCAqLworCXsgMHhGRkZGLCAweEZGRkYsIDB4MDAwMCwgMSwgMHgxMDAwIH0sIC8qIFIxOSAqLworCXsgMHhGRkZGLCAweEZGRkYsIDB4MDAwMCwgMSwgMHgxMDEwIH0sIC8qIFIyMCAqLworCXsgMHhGRkZGLCAweEZGRkYsIDB4MDAwMCwgMSwgMHgxMDEwIH0sIC8qIFIyMSAqLworCXsgMHgwRkRELCAweDBGREQsIDB4MDAwMCwgMSwgMHg4MDAwIH0sIC8qIFIyMiAqLworCXsgMHgxRkZGLCAweDFGRkYsIDB4MDAwMCwgMSwgMHgwODAwIH0sIC8qIFIyMyAqLworCXsgMHgwMDAwLCAweDAxREYsIDB4MDAwMCwgMSwgMHgwMDhCIH0sIC8qIFIyNCAqLworCXsgMHgwMDAwLCAweDAxREYsIDB4MDAwMCwgMSwgMHgwMDhCIH0sIC8qIFIyNSAqLworCXsgMHgwMDAwLCAweDAxREYsIDB4MDAwMCwgMSwgMHgwMDhCIH0sIC8qIFIyNiAqLworCXsgMHgwMDAwLCAweDAxREYsIDB4MDAwMCwgMSwgMHgwMDhCIH0sIC8qIFIyNyAqLworCXsgMHgwMDAwLCAweDAxRkYsIDB4MDAwMCwgMSwgMHgwMDAwIH0sIC8qIFIyOCAqLworCXsgMHgwMDAwLCAweDAxRkYsIDB4MDAwMCwgMSwgMHgwMDAwIH0sIC8qIFIyOSAqLworCXsgMHgwMDAwLCAweDAwNzcsIDB4MDAwMCwgMSwgMHgwMDY2IH0sIC8qIFIzMCAqLworCXsgMHgwMDAwLCAweDAwMzMsIDB4MDAwMCwgMSwgMHgwMDIyIH0sIC8qIFIzMSAqLworCXsgMHgwMDAwLCAweDAxRkYsIDB4MDAwMCwgMSwgMHgwMDc5IH0sIC8qIFIzMiAqLworCXsgMHgwMDAwLCAweDAxRkYsIDB4MDAwMCwgMSwgMHgwMDc5IH0sIC8qIFIzMyAqLworCXsgMHgwMDAwLCAweDAwMDMsIDB4MDAwMCwgMSwgMHgwMDAzIH0sIC8qIFIzNCAqLworCXsgMHgwMDAwLCAweDAxRkYsIDB4MDAwMCwgMSwgMHgwMDAzIH0sIC8qIFIzNSAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMCwgMHgwMDAwIH0sIC8qIFIzNiAqLworCXsgMHgwMDAwLCAweDAwM0YsIDB4MDAwMCwgMSwgMHgwMTAwIH0sIC8qIFIzNyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMCwgMHgwMDAwIH0sIC8qIFIzOCAqLworCXsgMHgwMDAwLCAweDAwMEYsIDB4MDAwMCwgMCwgMHgwMDAwIH0sIC8qIFIzOSAqLworCXsgMHgwMDAwLCAweDAwRkYsIDB4MDAwMCwgMSwgMHgwMDAwIH0sIC8qIFI0MCAqLworCXsgMHgwMDAwLCAweDAxQjcsIDB4MDAwMCwgMSwgMHgwMDAwIH0sIC8qIFI0MSAqLworCXsgMHgwMDAwLCAweDAxQjcsIDB4MDAwMCwgMSwgMHgwMDAwIH0sIC8qIFI0MiAqLworCXsgMHgwMDAwLCAweDAxRkYsIDB4MDAwMCwgMSwgMHgwMDAwIH0sIC8qIFI0MyAqLworCXsgMHgwMDAwLCAweDAxRkYsIDB4MDAwMCwgMSwgMHgwMDAwIH0sIC8qIFI0NCAqLworCXsgMHgwMDAwLCAweDAwRkQsIDB4MDAwMCwgMSwgMHgwMDAwIH0sIC8qIFI0NSAqLworCXsgMHgwMDAwLCAweDAwRkQsIDB4MDAwMCwgMSwgMHgwMDAwIH0sIC8qIFI0NiAqLworCXsgMHgwMDAwLCAweDAxRkYsIDB4MDAwMCwgMSwgMHgwMDAwIH0sIC8qIFI0NyAqLworCXsgMHgwMDAwLCAweDAxRkYsIDB4MDAwMCwgMSwgMHgwMDAwIH0sIC8qIFI0OCAqLworCXsgMHgwMDAwLCAweDAxRkYsIDB4MDAwMCwgMSwgMHgwMDAwIH0sIC8qIFI0OSAqLworCXsgMHgwMDAwLCAweDAxRkYsIDB4MDAwMCwgMSwgMHgwMDAwIH0sIC8qIFI1MCAqLworCXsgMHgwMDAwLCAweDAxQjMsIDB4MDAwMCwgMSwgMHgwMTgwIH0sIC8qIFI1MSAqLworCXsgMHgwMDAwLCAweDAwNzcsIDB4MDAwMCwgMSwgMHgwMDAwIH0sIC8qIFI1MiAqLworCXsgMHgwMDAwLCAweDAwNzcsIDB4MDAwMCwgMSwgMHgwMDAwIH0sIC8qIFI1MyAqLworCXsgMHgwMDAwLCAweDAwRkYsIDB4MDAwMCwgMSwgMHgwMDAwIH0sIC8qIFI1NCAqLworCXsgMHgwMDAwLCAweDAwMDEsIDB4MDAwMCwgMSwgMHgwMDAwIH0sIC8qIFI1NSAqLworCXsgMHgwMDAwLCAweDAwM0YsIDB4MDAwMCwgMSwgMHgwMDAwIH0sIC8qIFI1NiAqLworCXsgMHgwMDAwLCAweDAwNEYsIDB4MDAwMCwgMSwgMHgwMDAwIH0sIC8qIFI1NyAqLworCXsgMHgwMDAwLCAweDAwRkQsIDB4MDAwMCwgMSwgMHgwMDAwIH0sIC8qIFI1OCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMCwgMHgwMDAwIH0sIC8qIFI1OSAqLworCXsgMHgxRkZGLCAweDFGRkYsIDB4MDAwMCwgMSwgMHgwMDAwIH0sIC8qIFI2MCAqLworCXsgMHhGRkZGLCAweEZGRkYsIDB4MDAwMCwgMSwgMHgwMDAwIH0sIC8qIFI2MSAqLworCXsgMHgwM0ZGLCAweDAzRkYsIDB4MDAwMCwgMSwgMHgwMDAwIH0sIC8qIFI2MiAqLworCXsgMHgwMDdGLCAweDAwN0YsIDB4MDAwMCwgMSwgMHgwMDAwIH0sIC8qIFI2MyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMCwgMHgwMDAwIH0sIC8qIFI2NCAqLworCXsgMHhERkZGLCAweERGRkYsIDB4MDAwMCwgMCwgMHgwMDAwIH0sIC8qIFI2NSAqLworCXsgMHhERkZGLCAweERGRkYsIDB4MDAwMCwgMCwgMHgwMDAwIH0sIC8qIFI2NiAqLworCXsgMHhERkZGLCAweERGRkYsIDB4MDAwMCwgMCwgMHgwMDAwIH0sIC8qIFI2NyAqLworCXsgMHhERkZGLCAweERGRkYsIDB4MDAwMCwgMCwgMHgwMDAwIH0sIC8qIFI2OCAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMCwgMHgwMDAwIH0sIC8qIFI2OSAqLworCXsgMHhGRkZGLCAweEZGRkYsIDB4MDAwMCwgMCwgMHg0NDAwIH0sIC8qIFI3MCAqLworCXsgMHgyM0ZGLCAweDIzRkYsIDB4MDAwMCwgMCwgMHgwMDAwIH0sIC8qIFI3MSAqLworCXsgMHhGRkZGLCAweEZGRkYsIDB4MDAwMCwgMCwgMHg0NDAwIH0sIC8qIFI3MiAqLworCXsgMHgyM0ZGLCAweDIzRkYsIDB4MDAwMCwgMCwgMHgwMDAwIH0sIC8qIFI3MyAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMCwgMHgwMDAwIH0sIC8qIFI3NCAqLworCXsgMHgwMDBFLCAweDAwMEUsIDB4MDAwMCwgMCwgMHgwMDA4IH0sIC8qIFI3NSAqLworCXsgMHhFMDBGLCAweEUwMEYsIDB4MDAwMCwgMCwgMHgwMDAwIH0sIC8qIFI3NiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMCwgMHgwMDAwIH0sIC8qIFI3NyAqLworCXsgMHgwM0MwLCAweDAzQzAsIDB4MDAwMCwgMCwgMHgwMkMwIH0sIC8qIFI3OCAqLworCXsgMHhGRkZGLCAweDAwMDAsIDB4ZmZmZiwgMCwgMHgwMDAwIH0sIC8qIFI3OSAqLworCXsgMHhGRkZGLCAweEZGRkYsIDB4MDAwMCwgMCwgMHgwMDAwIH0sIC8qIFI4MCAqLworCXsgMHhGRkZGLCAweDAwMDAsIDB4ZmZmZiwgMCwgMHgwMDAwIH0sIC8qIFI4MSAqLworCXsgMHgyQkZGLCAweDAwMDAsIDB4ZmZmZiwgMCwgMHgwMDAwIH0sIC8qIFI4MiAqLworCXsgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMCwgMHgwMDAwIH0sIC8qIFI4MyAqLworCXsgMHg4MEZGLCAweDgwRkYsIDB4MDAwMCwgMCwgMHgwMGZmIH0sIC8qIFI4NCAqLworfTsKKworc3RhdGljIGludCB3bTg0MDBfcmVhZChzdHJ1Y3Qgd204NDAwICp3bTg0MDAsIHU4IHJlZywgaW50IG51bV9yZWdzLCB1MTYgKmRlc3QpCit7CisJaW50IGksIHJldCA9IDA7CisKKwlCVUdfT04ocmVnICsgbnVtX3JlZ3MgLSAxID4gQVJSQVlfU0laRSh3bTg0MDAtPnJlZ19jYWNoZSkpOworCisJLyogSWYgdGhlcmUgYXJlIGFueSB2b2xhdGlsZSByZWFkcyB0aGVuIHJlYWQgYmFjayB0aGUgZW50aXJlIGJsb2NrICovCisJZm9yIChpID0gcmVnOyBpIDwgcmVnICsgbnVtX3JlZ3M7IGkrKykKKwkJaWYgKHJlZ19kYXRhW2ldLnZvbCkgeworCQkJcmV0ID0gd204NDAwLT5yZWFkX2Rldih3bTg0MDAtPmlvX2RhdGEsIHJlZywKKwkJCQkJICAgICAgIG51bV9yZWdzLCBkZXN0KTsKKwkJCWlmIChyZXQgIT0gMCkKKwkJCQlyZXR1cm4gcmV0OworCQkJZm9yIChpID0gMDsgaSA8IG51bV9yZWdzOyBpKyspCisJCQkJZGVzdFtpXSA9IGJlMTZfdG9fY3B1KGRlc3RbaV0pOworCisJCQlyZXR1cm4gMDsKKwkJfQorCisJLyogT3RoZXJ3aXNlIHVzZSB0aGUgY2FjaGUgKi8KKwltZW1jcHkoZGVzdCwgJndtODQwMC0+cmVnX2NhY2hlW3JlZ10sIG51bV9yZWdzICogc2l6ZW9mKHUxNikpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgd204NDAwX3dyaXRlKHN0cnVjdCB3bTg0MDAgKndtODQwMCwgdTggcmVnLCBpbnQgbnVtX3JlZ3MsCisJCQl1MTYgKnNyYykKK3sKKwlpbnQgcmV0LCBpOworCisJQlVHX09OKHJlZyArIG51bV9yZWdzIC0gMSA+IEFSUkFZX1NJWkUod204NDAwLT5yZWdfY2FjaGUpKTsKKworCWZvciAoaSA9IDA7IGkgPCBudW1fcmVnczsgaSsrKSB7CisJCUJVR19PTighcmVnX2RhdGFbcmVnICsgaV0ud3JpdGFibGUpOworCQl3bTg0MDAtPnJlZ19jYWNoZVtyZWcgKyBpXSA9IHNyY1tpXTsKKwkJc3JjW2ldID0gY3B1X3RvX2JlMTYoc3JjW2ldKTsKKwl9CisKKwkvKiBEbyB0aGUgYWN0dWFsIEkvTyAqLworCXJldCA9IHdtODQwMC0+d3JpdGVfZGV2KHdtODQwMC0+aW9fZGF0YSwgcmVnLCBudW1fcmVncywgc3JjKTsKKwlpZiAocmV0ICE9IDApCisJCXJldHVybiAtRUlPOworCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogd204NDAwX3JlZ19yZWFkIC0gU2luZ2xlIHJlZ2lzdGVyIHJlYWQKKyAqCisgKiBAd204NDAwOiBQb2ludGVyIHRvIHdtODQwMCBjb250cm9sIHN0cnVjdHVyZQorICogQHJlZzogICAgUmVnaXN0ZXIgdG8gcmVhZAorICoKKyAqIEByZXR1cm4gIFJlYWQgdmFsdWUKKyAqLwordTE2IHdtODQwMF9yZWdfcmVhZChzdHJ1Y3Qgd204NDAwICp3bTg0MDAsIHU4IHJlZykKK3sKKwl1MTYgdmFsOworCisJbXV0ZXhfbG9jaygmd204NDAwLT5pb19sb2NrKTsKKworCXdtODQwMF9yZWFkKHdtODQwMCwgcmVnLCAxLCAmdmFsKTsKKworCW11dGV4X3VubG9jaygmd204NDAwLT5pb19sb2NrKTsKKworCXJldHVybiB2YWw7Cit9CitFWFBPUlRfU1lNQk9MX0dQTCh3bTg0MDBfcmVnX3JlYWQpOworCitpbnQgd204NDAwX2Jsb2NrX3JlYWQoc3RydWN0IHdtODQwMCAqd204NDAwLCB1OCByZWcsIGludCBjb3VudCwgdTE2ICpkYXRhKQoreworCWludCByZXQ7CisKKwltdXRleF9sb2NrKCZ3bTg0MDAtPmlvX2xvY2spOworCisJcmV0ID0gd204NDAwX3JlYWQod204NDAwLCByZWcsIGNvdW50LCBkYXRhKTsKKworCW11dGV4X3VubG9jaygmd204NDAwLT5pb19sb2NrKTsKKworCXJldHVybiByZXQ7Cit9CitFWFBPUlRfU1lNQk9MX0dQTCh3bTg0MDBfYmxvY2tfcmVhZCk7CisKKy8qKgorICogd204NDAwX3NldF9iaXRzIC0gQml0bWFzayB3cml0ZQorICoKKyAqIEB3bTg0MDA6IFBvaW50ZXIgdG8gd204NDAwIGNvbnRyb2wgc3RydWN0dXJlCisgKiBAcmVnOiAgICBSZWdpc3RlciB0byBhY2Nlc3MKKyAqIEBtYXNrOiAgIE1hc2sgb2YgYml0cyB0byBjaGFuZ2UKKyAqIEB2YWw6ICAgIFZhbHVlIHRvIHNldCBmb3IgbWFza2VkIGJpdHMKKyAqLworaW50IHdtODQwMF9zZXRfYml0cyhzdHJ1Y3Qgd204NDAwICp3bTg0MDAsIHU4IHJlZywgdTE2IG1hc2ssIHUxNiB2YWwpCit7CisJdTE2IHRtcDsKKwlpbnQgcmV0OworCisJbXV0ZXhfbG9jaygmd204NDAwLT5pb19sb2NrKTsKKworCXJldCA9IHdtODQwMF9yZWFkKHdtODQwMCwgcmVnLCAxLCAmdG1wKTsKKwl0bXAgPSAodG1wICYgfm1hc2spIHwgdmFsOworCWlmIChyZXQgPT0gMCkKKwkJcmV0ID0gd204NDAwX3dyaXRlKHdtODQwMCwgcmVnLCAxLCAmdG1wKTsKKworCW11dGV4X3VubG9jaygmd204NDAwLT5pb19sb2NrKTsKKworCXJldHVybiByZXQ7Cit9CitFWFBPUlRfU1lNQk9MX0dQTCh3bTg0MDBfc2V0X2JpdHMpOworCisvKioKKyAqIHdtODQwMF9yZXNldF9jb2RlY19yZWdfY2FjaGUgLSBSZXNldCBjYWNoZWQgY29kZWMgcmVnaXN0ZXJzIHRvCisgKiB0aGVpciBkZWZhdWx0IHZhbHVlcy4KKyAqLwordm9pZCB3bTg0MDBfcmVzZXRfY29kZWNfcmVnX2NhY2hlKHN0cnVjdCB3bTg0MDAgKndtODQwMCkKK3sKKwlpbnQgaTsKKworCW11dGV4X2xvY2soJndtODQwMC0+aW9fbG9jayk7CisKKwkvKiBSZXNldCBhbGwgY29kZWMgcmVnaXN0ZXJzIHRvIHRoZWlyIGluaXRpYWwgdmFsdWUgKi8KKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh3bTg0MDAtPnJlZ19jYWNoZSk7IGkrKykKKwkJaWYgKHJlZ19kYXRhW2ldLmlzX2NvZGVjKQorCQkJd204NDAwLT5yZWdfY2FjaGVbaV0gPSByZWdfZGF0YVtpXS5kZWZhdWx0X3ZhbDsKKworCW11dGV4X3VubG9jaygmd204NDAwLT5pb19sb2NrKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHdtODQwMF9yZXNldF9jb2RlY19yZWdfY2FjaGUpOworCisvKgorICogd204NDAwX2luaXQgLSBHZW5lcmljIGluaXRpYWxpc2F0aW9uCisgKgorICogVGhlIFdNODQwMCBjYW4gYmUgY29uZmlndXJlZCBhcyBlaXRoZXIgYW4gSTJDIG9yIFNQSSBkZXZpY2UuICBQcm9iZQorICogZnVuY3Rpb25zIGZvciBlYWNoIGJ1cyBzZXQgdXAgdGhlIGFjY2Vzc29ycyB0aGVuIGNhbGwgaW50byB0aGlzIHRvCisgKiBzZXQgdXAgdGhlIGRldmljZSBpdHNlbGYuCisgKi8KK3N0YXRpYyBpbnQgd204NDAwX2luaXQoc3RydWN0IHdtODQwMCAqd204NDAwLAorCQkgICAgICAgc3RydWN0IHdtODQwMF9wbGF0Zm9ybV9kYXRhICpwZGF0YSkKK3sKKwl1MTYgcmVnOworCWludCByZXQsIGk7CisKKwltdXRleF9pbml0KCZ3bTg0MDAtPmlvX2xvY2spOworCisJd204NDAwLT5kZXYtPmRyaXZlcl9kYXRhID0gd204NDAwOworCisJLyogQ2hlY2sgdGhhdCB0aGlzIGlzIGFjdHVhbGx5IGEgV004NDAwICovCisJcmV0ID0gd204NDAwLT5yZWFkX2Rldih3bTg0MDAtPmlvX2RhdGEsIFdNODQwMF9SRVNFVF9JRCwgMSwgJnJlZyk7CisJaWYgKHJldCAhPSAwKSB7CisJCWRldl9lcnIod204NDAwLT5kZXYsICJDaGlwIElEIHJlZ2lzdGVyIHJlYWQgZmFpbGVkXG4iKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCWlmIChiZTE2X3RvX2NwdShyZWcpICE9IHJlZ19kYXRhW1dNODQwMF9SRVNFVF9JRF0uZGVmYXVsdF92YWwpIHsKKwkJZGV2X2Vycih3bTg0MDAtPmRldiwgIkRldmljZSBpcyBub3QgYSBXTTg0MDAsIElEIGlzICV4XG4iLAorCQkJYmUxNl90b19jcHUocmVnKSk7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCS8qIFdlIGRvbid0IGtub3cgd2hhdCBzdGF0ZSB0aGUgaGFyZHdhcmUgaXMgaW4gYW5kIHNpbmNlIHRoaXMKKwkgKiBpcyBhIFBNSUMgd2UgY2FuJ3QgcmVzZXQgaXQgc2FmZWx5IHNvIGluaXRpYWxpc2UgdGhlIHJlZ2lzdGVyCisJICogY2FjaGUgZnJvbSB0aGUgaGFyZHdhcmUuCisJICovCisJcmV0ID0gd204NDAwLT5yZWFkX2Rldih3bTg0MDAtPmlvX2RhdGEsIDAsCisJCQkgICAgICAgQVJSQVlfU0laRSh3bTg0MDAtPnJlZ19jYWNoZSksCisJCQkgICAgICAgd204NDAwLT5yZWdfY2FjaGUpOworCWlmIChyZXQgIT0gMCkgeworCQlkZXZfZXJyKHdtODQwMC0+ZGV2LCAiUmVnaXN0ZXIgY2FjaGUgcmVhZCBmYWlsZWRcbiIpOworCQlyZXR1cm4gLUVJTzsKKwl9CisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUod204NDAwLT5yZWdfY2FjaGUpOyBpKyspCisJCXdtODQwMC0+cmVnX2NhY2hlW2ldID0gYmUxNl90b19jcHUod204NDAwLT5yZWdfY2FjaGVbaV0pOworCisJLyogSWYgdGhlIGNvZGVjIGlzIGluIHJlc2V0IHVzZSBoYXJkIGNvZGVkIHZhbHVlcyAqLworCWlmICghKHdtODQwMC0+cmVnX2NhY2hlW1dNODQwMF9QT1dFUl9NQU5BR0VNRU5UXzFdICYgV004NDAwX0NPREVDX0VOQSkpCisJCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHdtODQwMC0+cmVnX2NhY2hlKTsgaSsrKQorCQkJaWYgKHJlZ19kYXRhW2ldLmlzX2NvZGVjKQorCQkJCXdtODQwMC0+cmVnX2NhY2hlW2ldID0gcmVnX2RhdGFbaV0uZGVmYXVsdF92YWw7CisKKwlyZXQgPSB3bTg0MDBfcmVhZCh3bTg0MDAsIFdNODQwMF9JRCwgMSwgJnJlZyk7CisJaWYgKHJldCAhPSAwKSB7CisJCWRldl9lcnIod204NDAwLT5kZXYsICJJRCByZWdpc3RlciByZWFkIGZhaWxlZDogJWRcbiIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCXJlZyA9IChyZWcgJiBXTTg0MDBfQ0hJUF9SRVZfTUFTSykgPj4gV004NDAwX0NISVBfUkVWX1NISUZUOworCWRldl9pbmZvKHdtODQwMC0+ZGV2LCAiV004NDAwIHJldmlzaW9uICV4XG4iLCByZWcpOworCisJaWYgKHBkYXRhICYmIHBkYXRhLT5wbGF0Zm9ybV9pbml0KSB7CisJCXJldCA9IHBkYXRhLT5wbGF0Zm9ybV9pbml0KHdtODQwMC0+ZGV2KTsKKwkJaWYgKHJldCAhPSAwKQorCQkJZGV2X2Vycih3bTg0MDAtPmRldiwgIlBsYXRmb3JtIGluaXQgZmFpbGVkOiAlZFxuIiwKKwkJCQlyZXQpOworCX0gZWxzZQorCQlkZXZfd2Fybih3bTg0MDAtPmRldiwgIk5vIHBsYXRmb3JtIGluaXRpYWxpc2F0aW9uIHN1cHBsaWVkXG4iKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIHdtODQwMF9yZWxlYXNlKHN0cnVjdCB3bTg0MDAgKndtODQwMCkKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHdtODQwMC0+cmVndWxhdG9ycyk7IGkrKykKKwkJaWYgKHdtODQwMC0+cmVndWxhdG9yc1tpXS5uYW1lKQorCQkJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIoJndtODQwMC0+cmVndWxhdG9yc1tpXSk7Cit9CisKKyNpZiBkZWZpbmVkKENPTkZJR19JMkMpIHx8IGRlZmluZWQoQ09ORklHX0kyQ19NT0RVTEUpCitzdGF0aWMgaW50IHdtODQwMF9pMmNfcmVhZCh2b2lkICppb19kYXRhLCBjaGFyIHJlZywgaW50IGNvdW50LCB1MTYgKmRlc3QpCit7CisJc3RydWN0IGkyY19jbGllbnQgKmkyYyA9IGlvX2RhdGE7CisJc3RydWN0IGkyY19tc2cgeGZlclsyXTsKKwlpbnQgcmV0OworCisJLyogV3JpdGUgcmVnaXN0ZXIgKi8KKwl4ZmVyWzBdLmFkZHIgPSBpMmMtPmFkZHI7CisJeGZlclswXS5mbGFncyA9IDA7CisJeGZlclswXS5sZW4gPSAxOworCXhmZXJbMF0uYnVmID0gJnJlZzsKKworCS8qIFJlYWQgZGF0YSAqLworCXhmZXJbMV0uYWRkciA9IGkyYy0+YWRkcjsKKwl4ZmVyWzFdLmZsYWdzID0gSTJDX01fUkQ7CisJeGZlclsxXS5sZW4gPSBjb3VudCAqIHNpemVvZih1MTYpOworCXhmZXJbMV0uYnVmID0gKHU4ICopZGVzdDsKKworCXJldCA9IGkyY190cmFuc2ZlcihpMmMtPmFkYXB0ZXIsIHhmZXIsIDIpOworCWlmIChyZXQgPT0gMikKKwkJcmV0ID0gMDsKKwllbHNlIGlmIChyZXQgPj0gMCkKKwkJcmV0ID0gLUVJTzsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgd204NDAwX2kyY193cml0ZSh2b2lkICppb19kYXRhLCBjaGFyIHJlZywgaW50IGNvdW50LCBjb25zdCB1MTYgKnNyYykKK3sKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqaTJjID0gaW9fZGF0YTsKKwl1OCAqbXNnOworCWludCByZXQ7CisKKwkvKiBXZSBhZGQgMSBieXRlIGZvciBkZXZpY2UgcmVnaXN0ZXIgLSBpZGVhbGx5IEkyQyB3b3VsZCBnYXRoZXIuICovCisJbXNnID0ga21hbGxvYygoY291bnQgKiBzaXplb2YodTE2KSkgKyAxLCBHRlBfS0VSTkVMKTsKKwlpZiAobXNnID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCisJbXNnWzBdID0gcmVnOworCW1lbWNweSgmbXNnWzFdLCBzcmMsIGNvdW50ICogc2l6ZW9mKHUxNikpOworCisJcmV0ID0gaTJjX21hc3Rlcl9zZW5kKGkyYywgbXNnLCAoY291bnQgKiBzaXplb2YodTE2KSkgKyAxKTsKKworCWlmIChyZXQgPT0gKGNvdW50ICogMikgKyAxKQorCQlyZXQgPSAwOworCWVsc2UgaWYgKHJldCA+PSAwKQorCQlyZXQgPSAtRUlPOworCisJa2ZyZWUobXNnKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgd204NDAwX2kyY19wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqaTJjLAorCQkJICAgIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCkKK3sKKwlzdHJ1Y3Qgd204NDAwICp3bTg0MDA7CisJaW50IHJldDsKKworCXdtODQwMCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB3bTg0MDApLCBHRlBfS0VSTkVMKTsKKwlpZiAod204NDAwID09IE5VTEwpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBlcnI7CisJfQorCisJd204NDAwLT5pb19kYXRhID0gaTJjOworCXdtODQwMC0+cmVhZF9kZXYgPSB3bTg0MDBfaTJjX3JlYWQ7CisJd204NDAwLT53cml0ZV9kZXYgPSB3bTg0MDBfaTJjX3dyaXRlOworCXdtODQwMC0+ZGV2ID0gJmkyYy0+ZGV2OworCWkyY19zZXRfY2xpZW50ZGF0YShpMmMsIHdtODQwMCk7CisKKwlyZXQgPSB3bTg0MDBfaW5pdCh3bTg0MDAsIGkyYy0+ZGV2LnBsYXRmb3JtX2RhdGEpOworCWlmIChyZXQgIT0gMCkKKwkJZ290byBzdHJ1Y3RfZXJyOworCisJcmV0dXJuIDA7CisKK3N0cnVjdF9lcnI6CisJaTJjX3NldF9jbGllbnRkYXRhKGkyYywgTlVMTCk7CisJa2ZyZWUod204NDAwKTsKK2VycjoKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHdtODQwMF9pMmNfcmVtb3ZlKHN0cnVjdCBpMmNfY2xpZW50ICppMmMpCit7CisJc3RydWN0IHdtODQwMCAqd204NDAwID0gaTJjX2dldF9jbGllbnRkYXRhKGkyYyk7CisKKwl3bTg0MDBfcmVsZWFzZSh3bTg0MDApOworCWkyY19zZXRfY2xpZW50ZGF0YShpMmMsIE5VTEwpOworCWtmcmVlKHdtODQwMCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkIHdtODQwMF9pMmNfaWRbXSA9IHsKKyAgICAgICB7ICJ3bTg0MDAiLCAwIH0sCisgICAgICAgeyB9Cit9OworTU9EVUxFX0RFVklDRV9UQUJMRShpMmMsIHdtODQwMF9pMmNfaWQpOworCitzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgd204NDAwX2kyY19kcml2ZXIgPSB7CisJLmRyaXZlciA9IHsKKwkJLm5hbWUgPSAiV004NDAwIiwKKwkJLm93bmVyID0gVEhJU19NT0RVTEUsCisJfSwKKwkucHJvYmUgICAgPSB3bTg0MDBfaTJjX3Byb2JlLAorCS5yZW1vdmUgICA9IHdtODQwMF9pMmNfcmVtb3ZlLAorCS5pZF90YWJsZSA9IHdtODQwMF9pMmNfaWQsCit9OworI2VuZGlmCisKK3N0YXRpYyBpbnQgX19pbml0IHdtODQwMF9tb2R1bGVfaW5pdCh2b2lkKQoreworCWludCByZXQgPSAtRU5PREVWOworCisjaWYgZGVmaW5lZChDT05GSUdfSTJDKSB8fCBkZWZpbmVkKENPTkZJR19JMkNfTU9EVUxFKQorCXJldCA9IGkyY19hZGRfZHJpdmVyKCZ3bTg0MDBfaTJjX2RyaXZlcik7CisJaWYgKHJldCAhPSAwKQorCQlwcl9lcnIoIkZhaWxlZCB0byByZWdpc3RlciBJMkMgZHJpdmVyOiAlZFxuIiwgcmV0KTsKKyNlbmRpZgorCisJcmV0dXJuIHJldDsKK30KK21vZHVsZV9pbml0KHdtODQwMF9tb2R1bGVfaW5pdCk7CisKK3N0YXRpYyB2b2lkIF9fZXhpdCB3bTg0MDBfbW9kdWxlX2V4aXQodm9pZCkKK3sKKyNpZiBkZWZpbmVkKENPTkZJR19JMkMpIHx8IGRlZmluZWQoQ09ORklHX0kyQ19NT0RVTEUpCisJaTJjX2RlbF9kcml2ZXIoJndtODQwMF9pMmNfZHJpdmVyKTsKKyNlbmRpZgorfQorbW9kdWxlX2V4aXQod204NDAwX21vZHVsZV9leGl0KTsKKworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0FVVEhPUigiTWFyayBCcm93biA8YnJvb25pZUBvcGVuc291cmNlLndvbGZzb25taWNyby5jb20+Iik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21pc2MvS2NvbmZpZyBiL2RyaXZlcnMvbWlzYy9LY29uZmlnCmluZGV4IGE3MjZmM2IuLmVmZDNhYTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWlzYy9LY29uZmlnCisrKyBiL2RyaXZlcnMvbWlzYy9LY29uZmlnCkBAIC0xNSw3ICsxNSw3IEBACiAKIGNvbmZpZyBBVE1FTF9QV00KIAl0cmlzdGF0ZSAiQXRtZWwgQVQzMi9BVDkxIFBXTSBzdXBwb3J0IgotCWRlcGVuZHMgb24gQVZSMzIgfHwgQVJDSF9BVDkxCisJZGVwZW5kcyBvbiBBVlIzMiB8fCBBUkNIX0FUOTFTQU05MjYzIHx8IEFSQ0hfQVQ5MVNBTTlSTCB8fCBBUkNIX0FUOTFDQVA5CiAJaGVscAogCSAgVGhpcyBvcHRpb24gZW5hYmxlcyBkZXZpY2UgZHJpdmVyIHN1cHBvcnQgZm9yIHRoZSBQV00gY2hhbm5lbHMKIAkgIG9uIGNlcnRhaW4gQXRtZWwgcHJjb2Vzc29ycy4gIFB1bHNlIFdpZHRoIE1vZHVsYXRpb24gaXMgdXNlZCBmb3IKQEAgLTQwOSw2ICs0MDksNyBAQAogCWRlcGVuZHMgb24gQkFDS0xJR0hUX0NMQVNTX0RFVklDRQogCWRlcGVuZHMgb24gSFdNT04KIAlkZXBlbmRzIG9uIEVYUEVSSU1FTlRBTAorCWRlcGVuZHMgb24gUkZLSUxMCiAJLS0taGVscC0tLQogCSAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgdGhlIEZuLUZ4IGtleXMgb24gRWVlIFBDIGxhcHRvcHMuCiAJICBJdCBhbHNvIGFkZHMgdGhlIGFiaWxpdHkgdG8gc3dpdGNoIGNhbWVyYS93bGFuIG9uL29mZi4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWlzYy9ocC13bWkuYyBiL2RyaXZlcnMvbWlzYy9ocC13bWkuYwppbmRleCA2ZDQwN2MyLi40YjdjMjRjIDEwMDY0NAotLS0gYS9kcml2ZXJzL21pc2MvaHAtd21pLmMKKysrIGIvZHJpdmVycy9taXNjL2hwLXdtaS5jCkBAIC04Miw2ICs4Miw3IEBACiAJe0tFX0tFWSwgMHgwMywgS0VZX0JSSUdIVE5FU1NET1dOfSwKIAl7S0VfS0VZLCAweDIwZTYsIEtFWV9QUk9HMX0sCiAJe0tFX0tFWSwgMHgyMTQyLCBLRVlfTUVESUF9LAorCXtLRV9LRVksIDB4MjEzYiwgS0VZX0lORk99LAogCXtLRV9LRVksIDB4MjMxYiwgS0VZX0hFTFB9LAogCXtLRV9FTkQsIDB9CiB9OwpAQCAtMzA5LDcgKzMxMCw3IEBACiAJcmV0dXJuIC1FSU5WQUw7CiB9CiAKLXZvaWQgaHBfd21pX25vdGlmeSh1MzIgdmFsdWUsIHZvaWQgKmNvbnRleHQpCitzdGF0aWMgdm9pZCBocF93bWlfbm90aWZ5KHUzMiB2YWx1ZSwgdm9pZCAqY29udGV4dCkKIHsKIAlzdHJ1Y3QgYWNwaV9idWZmZXIgcmVzcG9uc2UgPSB7IEFDUElfQUxMT0NBVEVfQlVGRkVSLCBOVUxMIH07CiAJc3RhdGljIHN0cnVjdCBrZXlfZW50cnkgKmtleTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWlzYy9waGFudG9tLmMgYi9kcml2ZXJzL21pc2MvcGhhbnRvbS5jCmluZGV4IGRhZjU4NTYuLmFiZGViZTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWlzYy9waGFudG9tLmMKKysrIGIvZHJpdmVycy9taXNjL3BoYW50b20uYwpAQCAtMzk5LDkgKzM5OSw5IEBACiAJCWdvdG8gZXJyX2lycTsKIAl9CiAKLQlpZiAoSVNfRVJSKGRldmljZV9jcmVhdGVfZHJ2ZGF0YShwaGFudG9tX2NsYXNzLCAmcGRldi0+ZGV2LAotCQkJCQkgTUtERVYocGhhbnRvbV9tYWpvciwgbWlub3IpLAotCQkJCQkgTlVMTCwgInBoYW50b20ldSIsIG1pbm9yKSkpCisJaWYgKElTX0VSUihkZXZpY2VfY3JlYXRlKHBoYW50b21fY2xhc3MsICZwZGV2LT5kZXYsCisJCQkJIE1LREVWKHBoYW50b21fbWFqb3IsIG1pbm9yKSwgTlVMTCwKKwkJCQkgInBoYW50b20ldSIsIG1pbm9yKSkpCiAJCWRldl9lcnIoJnBkZXYtPmRldiwgImNhbid0IGNyZWF0ZSBkZXZpY2VcbiIpOwogCiAJcGNpX3NldF9kcnZkYXRhKHBkZXYsIHBodCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21pc2Mvc2dpLWdydS9ncnUuaCBiL2RyaXZlcnMvbWlzYy9zZ2ktZ3J1L2dydS5oCmluZGV4IDQwZGY3Y2IuLmY5M2YwM2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWlzYy9zZ2ktZ3J1L2dydS5oCisrKyBiL2RyaXZlcnMvbWlzYy9zZ2ktZ3J1L2dydS5oCkBAIC0zMCw5ICszMCw5IEBACiAvKgogICogU2l6ZSB1c2VkIHRvIG1hcCBHUlUgR1NlZwogICovCi0jaWYgZGVmaW5lZCBDT05GSUdfSUE2NAorI2lmIGRlZmluZWQoQ09ORklHX0lBNjQpCiAjZGVmaW5lIEdSVV9HU0VHX1BBR0VTSVpFCSgyNTYgKiAxMDI0VUwpCi0jZWxpZiBkZWZpbmVkIENPTkZJR19YODZfNjQKKyNlbGlmIGRlZmluZWQoQ09ORklHX1g4Nl82NCkKICNkZWZpbmUgR1JVX0dTRUdfUEFHRVNJWkUJKDI1NiAqIDEwMjRVTCkJCS8qIFpaWiAyTUIgPz8/ICovCiAjZWxzZQogI2Vycm9yICJVbnN1cHBvcnRlZCBhcmNoaXRlY3R1cmUiCmRpZmYgLS1naXQgYS9kcml2ZXJzL21pc2Mvc2dpLWdydS9ncnVfaW5zdHJ1Y3Rpb25zLmggYi9kcml2ZXJzL21pc2Mvc2dpLWdydS9ncnVfaW5zdHJ1Y3Rpb25zLmgKaW5kZXggMGRjMzYyMi4uNDg3NjJlNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9taXNjL3NnaS1ncnUvZ3J1X2luc3RydWN0aW9ucy5oCisrKyBiL2RyaXZlcnMvbWlzYy9zZ2ktZ3J1L2dydV9pbnN0cnVjdGlvbnMuaApAQCAtMjYsNyArMjYsNyBAQAogICogQXJjaGl0ZWN0dXJlIGRlcGVuZGVudCBmdW5jdGlvbnMKICAqLwogCi0jaWYgZGVmaW5lZCBDT05GSUdfSUE2NAorI2lmIGRlZmluZWQoQ09ORklHX0lBNjQpCiAjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KICNpbmNsdWRlIDxhc20vaW50cmluc2ljcy5oPgogI2RlZmluZSBfX2ZsdXNoX2NhY2hlKHApCQlpYTY0X2ZjKHApCkBAIC0zNiw3ICszNiw3IEBACiAJCQliYXJyaWVyKCk7CQkJCQlcCiAJCQkqKCh2b2xhdGlsZSBpbnQgKikocCkpID0gdjsgLyogZm9yY2Ugc3QucmVsICovCVwKIAkJfSB3aGlsZSAoMCkKLSNlbGlmIGRlZmluZWQgQ09ORklHX1g4Nl82NAorI2VsaWYgZGVmaW5lZChDT05GSUdfWDg2XzY0KQogI2RlZmluZSBfX2ZsdXNoX2NhY2hlKHApCQljbGZsdXNoKHApCiAjZGVmaW5lIGdydV9vcmRlcmVkX3N0b3JlX2ludChwLHYpCQkJCQlcCiAJCWRvIHsJCQkJCQkJXApAQCAtMjk5LDYgKzI5OSw3IEBACiBzdGF0aWMgaW5saW5lIHZvaWQgZ3J1X3N0YXJ0X2luc3RydWN0aW9uKHN0cnVjdCBncnVfaW5zdHJ1Y3Rpb24gKmlucywgaW50IG9wMzIpCiB7CiAJZ3J1X29yZGVyZWRfc3RvcmVfaW50KGlucywgb3AzMik7CisJZ3J1X2ZsdXNoX2NhY2hlKGlucyk7CiB9CiAKIApAQCAtNjA0LDggKzYwNSw5IEBACiBzdGF0aWMgaW5saW5lIGludCBncnVfY2hlY2tfc3RhdHVzKHZvaWQgKmNiKQogewogCXN0cnVjdCBncnVfY29udHJvbF9ibG9ja19zdGF0dXMgKmNicyA9ICh2b2lkICopY2I7Ci0JaW50IHJldCA9IGNicy0+aXN0YXR1czsKKwlpbnQgcmV0OwogCisJcmV0ID0gY2JzLT5pc3RhdHVzOwogCWlmIChyZXQgPT0gQ0JTX0NBTExfT1MpCiAJCXJldCA9IGdydV9jaGVja19zdGF0dXNfcHJvYyhjYik7CiAJcmV0dXJuIHJldDsKQEAgLTYxNyw3ICs2MTksNyBAQAogc3RhdGljIGlubGluZSBpbnQgZ3J1X3dhaXQodm9pZCAqY2IpCiB7CiAJc3RydWN0IGdydV9jb250cm9sX2Jsb2NrX3N0YXR1cyAqY2JzID0gKHZvaWQgKiljYjsKLQlpbnQgcmV0ID0gY2JzLT5pc3RhdHVzOzsKKwlpbnQgcmV0ID0gY2JzLT5pc3RhdHVzOwogCiAJaWYgKHJldCAhPSBDQlNfSURMRSkKIAkJcmV0ID0gZ3J1X3dhaXRfcHJvYyhjYik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21pc2Mvc2dpLWdydS9ncnVmYXVsdC5jIGIvZHJpdmVycy9taXNjL3NnaS1ncnUvZ3J1ZmF1bHQuYwppbmRleCAzZDMzMDE1Li44YzM4OWQ2MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9taXNjL3NnaS1ncnUvZ3J1ZmF1bHQuYworKysgYi9kcml2ZXJzL21pc2Mvc2dpLWdydS9ncnVmYXVsdC5jCkBAIC0yMTQsMTIgKzIxNCwxNCBAQAogfQogCiAvKgotICoKICAqIGF0b21pY19wdGVfbG9va3VwCiAgKgogICogQ29udmVydCBhIHVzZXIgdmlydHVhbCBhZGRyZXNzIHRvIGEgcGh5c2ljYWwgYWRkcmVzcwogICogT25seSBzdXBwb3J0cyBJbnRlbCBsYXJnZSBwYWdlcyAoMk1CIG9ubHkpIG9uIHg4Nl82NC4KICAqCVpaWiAtIGh1Z2VwYWdlIHN1cHBvcnQgaXMgaW5jb21wbGV0ZQorICoKKyAqIE5PVEU6IG1tYXBfc2VtIGlzIGFscmVhZHkgaGVsZCBvbiBlbnRyeSB0byB0aGlzIGZ1bmN0aW9uLiBUaGlzCisgKiBndWFyYW50ZWVzIGV4aXN0ZW5jZSBvZiB0aGUgcGFnZSB0YWJsZXMuCiAgKi8KIHN0YXRpYyBpbnQgYXRvbWljX3B0ZV9sb29rdXAoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgdmFkZHIsCiAJaW50IHdyaXRlLCB1bnNpZ25lZCBsb25nICpwYWRkciwgaW50ICpwYWdlc2hpZnQpCkBAIC0yMjksOSArMjMxLDYgQEAKIAlwdWRfdCAqcHVkcDsKIAlwdGVfdCBwdGU7CiAKLQlXQVJOX09OKGlycXNfZGlzYWJsZWQoKSk7CQkvKiBaWlogZGVidWcgKi8KLQotCWxvY2FsX2lycV9kaXNhYmxlKCk7CiAJcGdkcCA9IHBnZF9vZmZzZXQodm1hLT52bV9tbSwgdmFkZHIpOwogCWlmICh1bmxpa2VseShwZ2Rfbm9uZSgqcGdkcCkpKQogCQlnb3RvIGVycjsKQEAgLTI1MCw4ICsyNDksNiBAQAogI2VuZGlmCiAJCXB0ZSA9ICpwdGVfb2Zmc2V0X2tlcm5lbChwbWRwLCB2YWRkcik7CiAKLQlsb2NhbF9pcnFfZW5hYmxlKCk7Ci0KIAlpZiAodW5saWtlbHkoIXB0ZV9wcmVzZW50KHB0ZSkgfHwKIAkJICAgICAod3JpdGUgJiYgKCFwdGVfd3JpdGUocHRlKSB8fCAhcHRlX2RpcnR5KHB0ZSkpKSkpCiAJCXJldHVybiAxOwpAQCAtMzI0LDYgKzMyMSw3IEBACiAJICogQXRvbWljIGxvb2t1cCBpcyBmYXN0ZXIgJiB1c3VhbGx5IHdvcmtzIGV2ZW4gaWYgY2FsbGVkIGluIG5vbi1hdG9taWMKIAkgKiBjb250ZXh0LgogCSAqLworCXJtYigpOwkvKiBNdXN0L2NoZWNrIG1zX3JhbmdlX2FjdGl2ZSBiZWZvcmUgbG9hZGluZyBQVEVzICovCiAJcmV0ID0gYXRvbWljX3B0ZV9sb29rdXAodm1hLCB2YWRkciwgd3JpdGUsICZwYWRkciwgJnBhZ2VzaGlmdCk7CiAJaWYgKHJldCkgewogCQlpZiAoIWNiKQpAQCAtNTQzLDYgKzU0MSw3IEBACiAJCXVjYm51bSA9IGdldF9jYl9udW1iZXIoKHZvaWQgKilleGNkZXQuY2IpOwogCQljYnJudW0gPSB0aHJlYWRfY2JyX251bWJlcihndHMsIHVjYm51bSk7CiAJCWNiZSA9IGdldF9jYmVfYnlfaW5kZXgoZ3RzLT50c19ncnUsIGNicm51bSk7CisJCXByZWZldGNodyhjYmUpOwkJLyogSGFybWxlc3Mgb24gaGFyZHdhcmUsIHJlcXVpcmVkIGZvciBlbXVsYXRvciAqLwogCQlleGNkZXQub3BjID0gY2JlLT5vcGNjcHk7CiAJCWV4Y2RldC5leG9wYyA9IGNiZS0+ZXhvcGNjcHk7CiAJCWV4Y2RldC5lY2F1c2UgPSBjYmUtPmVjYXVzZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWlzYy9zZ2ktZ3J1L2dydWZpbGUuYyBiL2RyaXZlcnMvbWlzYy9zZ2ktZ3J1L2dydWZpbGUuYwppbmRleCBkNjFjZWU3Li41YzAyN2I2IDEwMDY0NAotLS0gYS9kcml2ZXJzL21pc2Mvc2dpLWdydS9ncnVmaWxlLmMKKysrIGIvZHJpdmVycy9taXNjL3NnaS1ncnUvZ3J1ZmlsZS5jCkBAIC0xMTMsNyArMTEzLDcgQEAKIAkJcmV0dXJuIC1FUEVSTTsKIAogCWlmICh2bWEtPnZtX3N0YXJ0ICYgKEdSVV9HU0VHX1BBR0VTSVpFIC0gMSkgfHwKLQkJCXZtYS0+dm1fZW5kICYgKEdSVV9HU0VHX1BBR0VTSVpFIC0gMSkpCisJICAgIAkJCXZtYS0+dm1fZW5kICYgKEdSVV9HU0VHX1BBR0VTSVpFIC0gMSkpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJdm1hLT52bV9mbGFncyB8PQpAQCAtMzk4LDYgKzM5OCwxMiBAQAogCWlycSA9IGdldF9iYXNlX2lycSgpOwogCWZvciAoY2hpcCA9IDA7IGNoaXAgPCBHUlVfQ0hJUExFVFNfUEVSX0JMQURFOyBjaGlwKyspIHsKIAkJcmV0ID0gcmVxdWVzdF9pcnEoaXJxICsgY2hpcCwgZ3J1X2ludHIsIDAsIGlkLCBOVUxMKTsKKwkJLyogVE9ETzogZml4IGlycSBoYW5kbGluZyBvbiB4ODYuIEZvciBub3cgaWdub3JlIGZhaWx1cmVzIGJlY2F1c2UKKwkJICogaW50ZXJydXB0cyBhcmUgbm90IHJlcXVpcmVkICYgbm90IHlldCBmdWxseSBzdXBwb3J0ZWQgKi8KKwkJaWYgKHJldCkgeworCQkJcHJpbnRrKCIhISFXQVJOSU5HOiBHUlUgaWdub3JpbmcgcmVxdWVzdCBmYWlsdXJlISEhXG4iKTsKKwkJCXJldCA9IDA7CisJCX0KIAkJaWYgKHJldCkgewogCQkJcHJpbnRrKEtFUk5fRVJSICIlczogcmVxdWVzdF9pcnEgZmFpbGVkXG4iLAogCQkJICAgICAgIEdSVV9EUklWRVJfSURfU1RSKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWlzYy9zZ2ktZ3J1L2dydWhhbmRsZXMuaCBiL2RyaXZlcnMvbWlzYy9zZ2ktZ3J1L2dydWhhbmRsZXMuaAppbmRleCBkMTYwMzFkLi5iNjMwMThkIDEwMDY0NAotLS0gYS9kcml2ZXJzL21pc2Mvc2dpLWdydS9ncnVoYW5kbGVzLmgKKysrIGIvZHJpdmVycy9taXNjL3NnaS1ncnUvZ3J1aGFuZGxlcy5oCkBAIC05MSwxMiArOTEsNyBAQAogI2RlZmluZSBHU0VHUE9GRihoKSAJCSgoaCkgJiAoR1JVX1NJWkUgLSAxKSkKIAogLyogQ29udmVydCBhbiBhcmJpdHJhcnkgaGFuZGxlIGFkZHJlc3MgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgR1JVIHNlZ21lbnQgKi8KLSNpZm5kZWYgX19QTFVHSU5fXwogI2RlZmluZSBHUlVCQVNFKGgpCQkoKHZvaWQgKikoKHVuc2lnbmVkIGxvbmcpKGgpICYgfihHUlVfU0laRSAtIDEpKSkKLSNlbHNlCi1leHRlcm4gdm9pZCAqZ211X2dydWJhc2Uodm9pZCAqaCk7Ci0jZGVmaW5lIEdSVUJBU0UoaCkJCWdtdV9ncnViYXNlKGgpCi0jZW5kaWYKIAogLyogR2VuZXJhbCBhZGRyZXNzaW5nIG1hY3Jvcy4gKi8KIHN0YXRpYyBpbmxpbmUgdm9pZCAqZ2V0X2dzZWdfYmFzZV9hZGRyZXNzKHZvaWQgKmJhc2UsIGludCBjdHhudW0pCmRpZmYgLS1naXQgYS9kcml2ZXJzL21pc2Mvc2dpLWdydS9ncnVrc2VydmljZXMuYyBiL2RyaXZlcnMvbWlzYy9zZ2ktZ3J1L2dydWtzZXJ2aWNlcy5jCmluZGV4IGRmZDQ5YWYuLjg4MGM1NWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWlzYy9zZ2ktZ3J1L2dydWtzZXJ2aWNlcy5jCisrKyBiL2RyaXZlcnMvbWlzYy9zZ2ktZ3J1L2dydWtzZXJ2aWNlcy5jCkBAIC0xMjIsNiArMTIyLDcgQEAKIAlzdHJ1Y3QgZ3J1X2NvbnRyb2xfYmxvY2tfZXh0ZW5kZWQgKmNiZTsKIAogCWNiZSA9IGdldF9jYmUoR1JVQkFTRShjYiksIGdldF9jYl9udW1iZXIoY2IpKTsKKwlwcmVmZXRjaHcoY2JlKTsgICAgICAgICAvKiBIYXJtbGVzcyBvbiBoYXJkd2FyZSwgcmVxdWlyZWQgZm9yIGVtdWxhdG9yICovCiAJZXhjZGV0LT5vcGMgPSBjYmUtPm9wY2NweTsKIAlleGNkZXQtPmV4b3BjID0gY2JlLT5leG9wY2NweTsKIAlleGNkZXQtPmVjYXVzZSA9IGNiZS0+ZWNhdXNlOwpAQCAtNDY2LDcgKzQ2Nyw3IEBACiAJU1RBVChtZXNxX3NlbmQpOwogCUJVR19PTihieXRlcyA8IHNpemVvZihpbnQpIHx8IGJ5dGVzID4gMiAqIEdSVV9DQUNIRV9MSU5FX0JZVEVTKTsKIAotCWNsaW5lcyA9IChieXRlcyArIEdSVV9DQUNIRV9MSU5FX0JZVEVTIC0gMSkgLyBHUlVfQ0FDSEVfTElORV9CWVRFUzsKKwljbGluZXMgPSBESVZfUk9VTkRfVVAoYnl0ZXMsIEdSVV9DQUNIRV9MSU5FX0JZVEVTKTsKIAlpZiAoZ3J1X2dldF9jcHVfcmVzb3VyY2VzKGJ5dGVzLCAmY2IsICZkc3IpKQogCQlyZXR1cm4gTVFFX0JVR19OT19SRVNPVVJDRVM7CiAJbWVtY3B5KGRzciwgbWVzZywgYnl0ZXMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9taXNjL3NnaS1ncnUvZ3J1bWFpbi5jIGIvZHJpdmVycy9taXNjL3NnaS1ncnUvZ3J1bWFpbi5jCmluZGV4IDBlZWI4ZGQuLmUxMWUxYWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWlzYy9zZ2ktZ3J1L2dydW1haW4uYworKysgYi9kcml2ZXJzL21pc2Mvc2dpLWdydS9ncnVtYWluLmMKQEAgLTQzMiw3ICs0MzIsMjIgQEAKIAlyZXR1cm4gR1JVX0hBTkRMRV9CWVRFUzsKIH0KIAotLyogcmV3cml0ZSBpbiBhc3NlbWJseSAmIHVzZSBsb3RzIG9mIHByZWZldGNoICovCitzdGF0aWMgdm9pZCBncnVfcHJlZmV0Y2hfY29udGV4dCh2b2lkICpnc2VnLCB2b2lkICpjYiwgdm9pZCAqY2JlLCB1bnNpZ25lZCBsb25nIGNicm1hcCwKKwkJCQl1bnNpZ25lZCBsb25nIGxlbmd0aCkKK3sKKwlpbnQgaSwgc2NyOworCisJcHJlZmV0Y2hfZGF0YShnc2VnICsgR1JVX0RTX0JBU0UsIGxlbmd0aCAvIEdSVV9DQUNIRV9MSU5FX0JZVEVTLAorCQkgICAgICBHUlVfQ0FDSEVfTElORV9CWVRFUyk7CisKKwlmb3JfZWFjaF9jYnJfaW5fYWxsb2NhdGlvbl9tYXAoaSwgJmNicm1hcCwgc2NyKSB7CisJCXByZWZldGNoX2RhdGEoY2IsIDEsIEdSVV9DQUNIRV9MSU5FX0JZVEVTKTsKKwkJcHJlZmV0Y2hfZGF0YShjYmUgKyBpICogR1JVX0hBTkRMRV9TVFJJREUsIDEsCisJCQkgICAgICBHUlVfQ0FDSEVfTElORV9CWVRFUyk7CisJCWNiICs9IEdSVV9IQU5ETEVfU1RSSURFOworCX0KK30KKwogc3RhdGljIHZvaWQgZ3J1X2xvYWRfY29udGV4dF9kYXRhKHZvaWQgKnNhdmUsIHZvaWQgKmdydWJhc2UsIGludCBjdHhudW0sCiAJCQkJICB1bnNpZ25lZCBsb25nIGNicm1hcCwgdW5zaWduZWQgbG9uZyBkc3JtYXApCiB7CkBAIC00NDEsMjAgKzQ1NiwxMSBAQAogCWludCBpLCBzY3I7CiAKIAlnc2VnID0gZ3J1YmFzZSArIGN0eG51bSAqIEdSVV9HU0VHX1NUUklERTsKLQlsZW5ndGggPSBod2VpZ2h0NjQoZHNybWFwKSAqIEdSVV9EU1JfQVVfQllURVM7Ci0JcHJlZmV0Y2hfZGF0YShnc2VnICsgR1JVX0RTX0JBU0UsIGxlbmd0aCAvIEdSVV9DQUNIRV9MSU5FX0JZVEVTLAotCQkgICAgICBHUlVfQ0FDSEVfTElORV9CWVRFUyk7Ci0KIAljYiA9IGdzZWcgKyBHUlVfQ0JfQkFTRTsKIAljYmUgPSBncnViYXNlICsgR1JVX0NCRV9CQVNFOwotCWZvcl9lYWNoX2Nicl9pbl9hbGxvY2F0aW9uX21hcChpLCAmY2JybWFwLCBzY3IpIHsKLQkJcHJlZmV0Y2hfZGF0YShjYiwgMSwgR1JVX0NBQ0hFX0xJTkVfQllURVMpOwotCQlwcmVmZXRjaF9kYXRhKGNiZSArIGkgKiBHUlVfSEFORExFX1NUUklERSwgMSwKLQkJCSAgICAgIEdSVV9DQUNIRV9MSU5FX0JZVEVTKTsKLQkJY2IgKz0gR1JVX0hBTkRMRV9TVFJJREU7Ci0JfQorCWxlbmd0aCA9IGh3ZWlnaHQ2NChkc3JtYXApICogR1JVX0RTUl9BVV9CWVRFUzsKKwlncnVfcHJlZmV0Y2hfY29udGV4dChnc2VnLCBjYiwgY2JlLCBjYnJtYXAsIGxlbmd0aCk7CiAKLQljYiA9IGdzZWcgKyBHUlVfQ0JfQkFTRTsKIAlmb3JfZWFjaF9jYnJfaW5fYWxsb2NhdGlvbl9tYXAoaSwgJmNicm1hcCwgc2NyKSB7CiAJCXNhdmUgKz0gZ3J1X2NvcHlfaGFuZGxlKGNiLCBzYXZlKTsKIAkJc2F2ZSArPSBncnVfY29weV9oYW5kbGUoY2JlICsgaSAqIEdSVV9IQU5ETEVfU1RSSURFLCBzYXZlKTsKQEAgLTQ3MiwxNSArNDc4LDE2IEBACiAJaW50IGksIHNjcjsKIAogCWdzZWcgPSBncnViYXNlICsgY3R4bnVtICogR1JVX0dTRUdfU1RSSURFOwotCiAJY2IgPSBnc2VnICsgR1JVX0NCX0JBU0U7CiAJY2JlID0gZ3J1YmFzZSArIEdSVV9DQkVfQkFTRTsKKwlsZW5ndGggPSBod2VpZ2h0NjQoZHNybWFwKSAqIEdSVV9EU1JfQVVfQllURVM7CisJZ3J1X3ByZWZldGNoX2NvbnRleHQoZ3NlZywgY2IsIGNiZSwgY2JybWFwLCBsZW5ndGgpOworCiAJZm9yX2VhY2hfY2JyX2luX2FsbG9jYXRpb25fbWFwKGksICZjYnJtYXAsIHNjcikgewogCQlzYXZlICs9IGdydV9jb3B5X2hhbmRsZShzYXZlLCBjYik7CiAJCXNhdmUgKz0gZ3J1X2NvcHlfaGFuZGxlKHNhdmUsIGNiZSArIGkgKiBHUlVfSEFORExFX1NUUklERSk7CiAJCWNiICs9IEdSVV9IQU5ETEVfU1RSSURFOwogCX0KLQlsZW5ndGggPSBod2VpZ2h0NjQoZHNybWFwKSAqIEdSVV9EU1JfQVVfQllURVM7CiAJbWVtY3B5KHNhdmUsIGdzZWcgKyBHUlVfRFNfQkFTRSwgbGVuZ3RoKTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvY2FyZC9xdWV1ZS5jIGIvZHJpdmVycy9tbWMvY2FyZC9xdWV1ZS5jCmluZGV4IDQwNjk4OWUuLjdhNzJlNzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2NhcmQvcXVldWUuYworKysgYi9kcml2ZXJzL21tYy9jYXJkL3F1ZXVlLmMKQEAgLTEzMiw2ICsxMzIsNyBAQAogCiAJYmxrX3F1ZXVlX3ByZXBfcnEobXEtPnF1ZXVlLCBtbWNfcHJlcF9yZXF1ZXN0KTsKIAlibGtfcXVldWVfb3JkZXJlZChtcS0+cXVldWUsIFFVRVVFX09SREVSRURfRFJBSU4sIE5VTEwpOworCXF1ZXVlX2ZsYWdfc2V0X3VubG9ja2VkKFFVRVVFX0ZMQUdfTk9OUk9ULCBtcS0+cXVldWUpOwogCiAjaWZkZWYgQ09ORklHX01NQ19CTE9DS19CT1VOQ0UKIAlpZiAoaG9zdC0+bWF4X2h3X3NlZ3MgPT0gMSkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvaG9zdC9vbWFwLmMgYi9kcml2ZXJzL21tYy9ob3N0L29tYXAuYwppbmRleCBjMTYwMjg4Li4xYjlmYzNjIDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9ob3N0L29tYXAuYworKysgYi9kcml2ZXJzL21tYy9ob3N0L29tYXAuYwpAQCAtMTcyLDcgKzE3Miw3IEBACiAJc3RydWN0IG9tYXBfbW1jX3BsYXRmb3JtX2RhdGEgKnBkYXRhOwogfTsKIAotdm9pZCBtbWNfb21hcF9mY2xrX29mZmRlbGF5KHN0cnVjdCBtbWNfb21hcF9zbG90ICpzbG90KQorc3RhdGljIHZvaWQgbW1jX29tYXBfZmNsa19vZmZkZWxheShzdHJ1Y3QgbW1jX29tYXBfc2xvdCAqc2xvdCkKIHsKIAl1bnNpZ25lZCBsb25nIHRpY2tfbnM7CiAKQEAgLTE4Miw3ICsxODIsNyBAQAogCX0KIH0KIAotdm9pZCBtbWNfb21hcF9mY2xrX2VuYWJsZShzdHJ1Y3QgbW1jX29tYXBfaG9zdCAqaG9zdCwgdW5zaWduZWQgaW50IGVuYWJsZSkKK3N0YXRpYyB2b2lkIG1tY19vbWFwX2ZjbGtfZW5hYmxlKHN0cnVjdCBtbWNfb21hcF9ob3N0ICpob3N0LCB1bnNpZ25lZCBpbnQgZW5hYmxlKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKQEAgLTE0NTUsNyArMTQ1NSw5IEBACiAKIAlob3N0LT5pcnEgPSBpcnE7CiAJaG9zdC0+cGh5c19iYXNlID0gaG9zdC0+bWVtX3Jlcy0+c3RhcnQ7Ci0JaG9zdC0+dmlydF9iYXNlID0gKHZvaWQgX19pb21lbSAqKSBJT19BRERSRVNTKGhvc3QtPnBoeXNfYmFzZSk7CisJaG9zdC0+dmlydF9iYXNlID0gaW9yZW1hcChyZXMtPnN0YXJ0LCByZXMtPmVuZCAtIHJlcy0+c3RhcnQgKyAxKTsKKwlpZiAoIWhvc3QtPnZpcnRfYmFzZSkKKwkJZ290byBlcnJfaW9yZW1hcDsKIAogCWlmIChjcHVfaXNfb21hcDI0eHgoKSkgewogCQlob3N0LT5pY2xrID0gY2xrX2dldCgmcGRldi0+ZGV2LCAibW1jX2ljayIpOwpAQCAtMTUxMCw2ICsxNTEyLDggQEAKIAkJY2xrX3B1dChob3N0LT5pY2xrKTsKIAl9CiBlcnJfZnJlZV9tbWNfaG9zdDoKKwlpb3VubWFwKGhvc3QtPnZpcnRfYmFzZSk7CitlcnJfaW9yZW1hcDoKIAlrZnJlZShob3N0KTsKIGVycl9mcmVlX21lbV9yZWdpb246CiAJcmVsZWFzZV9tZW1fcmVnaW9uKHJlcy0+c3RhcnQsIHJlcy0+ZW5kIC0gcmVzLT5zdGFydCArIDEpOwpAQCAtMTUzNiw2ICsxNTQwLDcgQEAKIAlpZiAoaG9zdC0+ZmNsayAmJiAhSVNfRVJSKGhvc3QtPmZjbGspKQogCQljbGtfcHV0KGhvc3QtPmZjbGspOwogCisJaW91bm1hcChob3N0LT52aXJ0X2Jhc2UpOwogCXJlbGVhc2VfbWVtX3JlZ2lvbihwZGV2LT5yZXNvdXJjZVswXS5zdGFydCwKIAkJCSAgIHBkZXYtPnJlc291cmNlWzBdLmVuZCAtIHBkZXYtPnJlc291cmNlWzBdLnN0YXJ0ICsgMSk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2hvc3QvczNjbWNpLmMgYi9kcml2ZXJzL21tYy9ob3N0L3MzY21jaS5jCmluZGV4IGFlMTZkODQuLjNiMjA4NWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2hvc3QvczNjbWNpLmMKKysrIGIvZHJpdmVycy9tbWMvaG9zdC9zM2NtY2kuYwpAQCAtMyw2ICszLDkgQEAKICAqCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA0LTIwMDYgbWFpbnRlY2ggR21iSCwgVGhvbWFzIEtsZWZmZWwgPHRrQG1haW50ZWNoLmRlPgogICoKKyAqIEN1cnJlbnQgZHJpdmVyIG1haW50YWluZWQgYnkgQmVuIERvb2tzIGFuZCBTaW10ZWMgRWxlY3Ryb25pY3MKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDggU2ltdGVjIEVsZWN0cm9uaWNzIDxiZW4tbGludXhAZmx1ZmYub3JnPgorICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwogICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCkBAIC0xMyw2ICsxNiw3IEBACiAjaW5jbHVkZSA8bGludXgvY2xrLmg+CiAjaW5jbHVkZSA8bGludXgvbW1jL2hvc3QuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9jcHVmcmVxLmg+CiAjaW5jbHVkZSA8bGludXgvaXJxLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KIApAQCAtMzksOSArNDMsOSBAQAogCWRiZ19jb25mICA9ICgxIDw8IDgpLAogfTsKIAotc3RhdGljIGNvbnN0IGludCBkYmdtYXBfZXJyICAgPSBkYmdfZXJyIHwgZGJnX2ZhaWw7CitzdGF0aWMgY29uc3QgaW50IGRiZ21hcF9lcnIgICA9IGRiZ19mYWlsOwogc3RhdGljIGNvbnN0IGludCBkYmdtYXBfaW5mbyAgPSBkYmdfaW5mbyB8IGRiZ19jb25mOwotc3RhdGljIGNvbnN0IGludCBkYmdtYXBfZGVidWcgPSBkYmdfZGVidWc7CitzdGF0aWMgY29uc3QgaW50IGRiZ21hcF9kZWJ1ZyA9IGRiZ19lcnIgfCBkYmdfZGVidWc7CiAKICNkZWZpbmUgZGJnKGhvc3QsIGNoYW5uZWxzLCBhcmdzLi4uKQkJICBcCiAJZG8gewkJCQkJICBcCkBAIC0xODksNyArMTkzLDcgQEAKIH0KIAogc3RhdGljIGlubGluZSBpbnQgZ2V0X2RhdGFfYnVmZmVyKHN0cnVjdCBzM2NtY2lfaG9zdCAqaG9zdCwKLQkJCQkgIHUzMiAqd29yZHMsIHUzMiAqKnBvaW50ZXIpCisJCQkJICB1MzIgKmJ5dGVzLCB1MzIgKipwb2ludGVyKQogewogCXN0cnVjdCBzY2F0dGVybGlzdCAqc2c7CiAKQEAgLTIwNiw3ICsyMTAsNyBAQAogCX0KIAlzZyA9ICZob3N0LT5tcnEtPmRhdGEtPnNnW2hvc3QtPnBpb19zZ3B0cl07CiAKLQkqd29yZHMgPSBzZy0+bGVuZ3RoID4+IDI7CisJKmJ5dGVzID0gc2ctPmxlbmd0aDsKIAkqcG9pbnRlciA9IHNnX3ZpcnQoc2cpOwogCiAJaG9zdC0+cGlvX3NncHRyKys7CkBAIC0yMjIsNyArMjI2LDcgQEAKIAl1MzIgZmlmb3N0YXQgPSByZWFkbChob3N0LT5iYXNlICsgUzNDMjQxMF9TRElGU1RBKTsKIAogCWZpZm9zdGF0ICY9IFMzQzI0MTBfU0RJRlNUQV9DT1VOVE1BU0s7Ci0JcmV0dXJuIGZpZm9zdGF0ID4+IDI7CisJcmV0dXJuIGZpZm9zdGF0OwogfQogCiBzdGF0aWMgaW5saW5lIHUzMiBmaWZvX2ZyZWUoc3RydWN0IHMzY21jaV9ob3N0ICpob3N0KQpAQCAtMjMwLDEzICsyMzQsMTUgQEAKIAl1MzIgZmlmb3N0YXQgPSByZWFkbChob3N0LT5iYXNlICsgUzNDMjQxMF9TRElGU1RBKTsKIAogCWZpZm9zdGF0ICY9IFMzQzI0MTBfU0RJRlNUQV9DT1VOVE1BU0s7Ci0JcmV0dXJuICg2MyAtIGZpZm9zdGF0KSA+PiAyOworCXJldHVybiA2MyAtIGZpZm9zdGF0OwogfQogCiBzdGF0aWMgdm9pZCBkb19waW9fcmVhZChzdHJ1Y3QgczNjbWNpX2hvc3QgKmhvc3QpCiB7CiAJaW50IHJlczsKIAl1MzIgZmlmbzsKKwl1MzIgKnB0cjsKKwl1MzIgZmlmb193b3JkczsKIAl2b2lkIF9faW9tZW0gKmZyb21fcHRyOwogCiAJLyogd3JpdGUgcmVhbCBwcmVzY2FsZXIgdG8gaG9zdCwgaXQgbWlnaHQgYmUgc2V0IHNsb3cgdG8gZml4ICovCkBAIC0yNDUsOCArMjUxLDggQEAKIAlmcm9tX3B0ciA9IGhvc3QtPmJhc2UgKyBob3N0LT5zZGlkYXRhOwogCiAJd2hpbGUgKChmaWZvID0gZmlmb19jb3VudChob3N0KSkpIHsKLQkJaWYgKCFob3N0LT5waW9fd29yZHMpIHsKLQkJCXJlcyA9IGdldF9kYXRhX2J1ZmZlcihob3N0LCAmaG9zdC0+cGlvX3dvcmRzLAorCQlpZiAoIWhvc3QtPnBpb19ieXRlcykgeworCQkJcmVzID0gZ2V0X2RhdGFfYnVmZmVyKGhvc3QsICZob3N0LT5waW9fYnl0ZXMsCiAJCQkJCSAgICAgICZob3N0LT5waW9fcHRyKTsKIAkJCWlmIChyZXMpIHsKIAkJCQlob3N0LT5waW9fYWN0aXZlID0gWEZFUl9OT05FOwpAQCAtMjU5LDI2ICsyNjUsNDcgQEAKIAogCQkJZGJnKGhvc3QsIGRiZ19waW8sCiAJCQkgICAgInBpb19yZWFkKCk6IG5ldyB0YXJnZXQ6IFslaV1AWyVwXVxuIiwKLQkJCSAgICBob3N0LT5waW9fd29yZHMsIGhvc3QtPnBpb19wdHIpOworCQkJICAgIGhvc3QtPnBpb19ieXRlcywgaG9zdC0+cGlvX3B0cik7CiAJCX0KIAogCQlkYmcoaG9zdCwgZGJnX3BpbywKIAkJICAgICJwaW9fcmVhZCgpOiBmaWZvOlslMDJpXSBidWZmZXI6WyUwM2ldIGRjbnQ6WyUwOFhdXG4iLAotCQkgICAgZmlmbywgaG9zdC0+cGlvX3dvcmRzLAorCQkgICAgZmlmbywgaG9zdC0+cGlvX2J5dGVzLAogCQkgICAgcmVhZGwoaG9zdC0+YmFzZSArIFMzQzI0MTBfU0RJRENOVCkpOwogCi0JCWlmIChmaWZvID4gaG9zdC0+cGlvX3dvcmRzKQotCQkJZmlmbyA9IGhvc3QtPnBpb193b3JkczsKKwkJLyogSWYgd2UgaGF2ZSByZWFjaGVkIHRoZSBlbmQgb2YgdGhlIGJsb2NrLCB3ZSBjYW4KKwkJICogcmVhZCBhIHdvcmQgYW5kIGdldCAxIHRvIDMgYnl0ZXMuICBJZiB3ZSBpbiB0aGUKKwkJICogbWlkZGxlIG9mIHRoZSBibG9jaywgd2UgaGF2ZSB0byByZWFkIGZ1bGwgd29yZHMsCisJCSAqIG90aGVyd2lzZSB3ZSB3aWxsIHdyaXRlIGdhcmJhZ2UsIHNvIHJvdW5kIGRvd24gdG8KKwkJICogYW4gZXZlbiBtdWx0aXBsZSBvZiA0LiAqLworCQlpZiAoZmlmbyA+PSBob3N0LT5waW9fYnl0ZXMpCisJCQlmaWZvID0gaG9zdC0+cGlvX2J5dGVzOworCQllbHNlCisJCQlmaWZvIC09IGZpZm8gJiAzOwogCi0JCWhvc3QtPnBpb193b3JkcyAtPSBmaWZvOworCQlob3N0LT5waW9fYnl0ZXMgLT0gZmlmbzsKIAkJaG9zdC0+cGlvX2NvdW50ICs9IGZpZm87CiAKLQkJd2hpbGUgKGZpZm8tLSkKLQkJCSooaG9zdC0+cGlvX3B0cisrKSA9IHJlYWRsKGZyb21fcHRyKTsKKwkJZmlmb193b3JkcyA9IGZpZm8gPj4gMjsKKwkJcHRyID0gaG9zdC0+cGlvX3B0cjsKKwkJd2hpbGUgKGZpZm9fd29yZHMtLSkKKwkJCSpwdHIrKyA9IHJlYWRsKGZyb21fcHRyKTsKKwkJaG9zdC0+cGlvX3B0ciA9IHB0cjsKKworCQlpZiAoZmlmbyAmIDMpIHsKKwkJCXUzMiBuID0gZmlmbyAmIDM7CisJCQl1MzIgZGF0YSA9IHJlYWRsKGZyb21fcHRyKTsKKwkJCXU4ICpwID0gKHU4ICopaG9zdC0+cGlvX3B0cjsKKworCQkJd2hpbGUgKG4tLSkgeworCQkJCSpwKysgPSBkYXRhOworCQkJCWRhdGEgPj49IDg7CisJCQl9CisJCX0KIAl9CiAKLQlpZiAoIWhvc3QtPnBpb193b3JkcykgewotCQlyZXMgPSBnZXRfZGF0YV9idWZmZXIoaG9zdCwgJmhvc3QtPnBpb193b3JkcywgJmhvc3QtPnBpb19wdHIpOworCWlmICghaG9zdC0+cGlvX2J5dGVzKSB7CisJCXJlcyA9IGdldF9kYXRhX2J1ZmZlcihob3N0LCAmaG9zdC0+cGlvX2J5dGVzLCAmaG9zdC0+cGlvX3B0cik7CiAJCWlmIChyZXMpIHsKIAkJCWRiZyhob3N0LCBkYmdfcGlvLAogCQkJICAgICJwaW9fcmVhZCgpOiBjb21wbGV0ZSAobm8gbW9yZSBidWZmZXJzKS5cbiIpOwpAQCAtMjk4LDEyICszMjUsMTMgQEAKIAl2b2lkIF9faW9tZW0gKnRvX3B0cjsKIAlpbnQgcmVzOwogCXUzMiBmaWZvOworCXUzMiAqcHRyOwogCiAJdG9fcHRyID0gaG9zdC0+YmFzZSArIGhvc3QtPnNkaWRhdGE7CiAKIAl3aGlsZSAoKGZpZm8gPSBmaWZvX2ZyZWUoaG9zdCkpKSB7Ci0JCWlmICghaG9zdC0+cGlvX3dvcmRzKSB7Ci0JCQlyZXMgPSBnZXRfZGF0YV9idWZmZXIoaG9zdCwgJmhvc3QtPnBpb193b3JkcywKKwkJaWYgKCFob3N0LT5waW9fYnl0ZXMpIHsKKwkJCXJlcyA9IGdldF9kYXRhX2J1ZmZlcihob3N0LCAmaG9zdC0+cGlvX2J5dGVzLAogCQkJCQkJCSZob3N0LT5waW9fcHRyKTsKIAkJCWlmIChyZXMpIHsKIAkJCQlkYmcoaG9zdCwgZGJnX3BpbywKQEAgLTMxNSwxOCArMzQzLDI3IEBACiAKIAkJCWRiZyhob3N0LCBkYmdfcGlvLAogCQkJICAgICJwaW9fd3JpdGUoKTogbmV3IHNvdXJjZTogWyVpXUBbJXBdXG4iLAotCQkJICAgIGhvc3QtPnBpb193b3JkcywgaG9zdC0+cGlvX3B0cik7CisJCQkgICAgaG9zdC0+cGlvX2J5dGVzLCBob3N0LT5waW9fcHRyKTsKIAogCQl9CiAKLQkJaWYgKGZpZm8gPiBob3N0LT5waW9fd29yZHMpCi0JCQlmaWZvID0gaG9zdC0+cGlvX3dvcmRzOworCQkvKiBJZiB3ZSBoYXZlIHJlYWNoZWQgdGhlIGVuZCBvZiB0aGUgYmxvY2ssIHdlIGhhdmUgdG8KKwkJICogd3JpdGUgZXhhY3RseSB0aGUgcmVtYWluaW5nIG51bWJlciBvZiBieXRlcy4gIElmIHdlCisJCSAqIGluIHRoZSBtaWRkbGUgb2YgdGhlIGJsb2NrLCB3ZSBoYXZlIHRvIHdyaXRlIGZ1bGwKKwkJICogd29yZHMsIHNvIHJvdW5kIGRvd24gdG8gYW4gZXZlbiBtdWx0aXBsZSBvZiA0LiAqLworCQlpZiAoZmlmbyA+PSBob3N0LT5waW9fYnl0ZXMpCisJCQlmaWZvID0gaG9zdC0+cGlvX2J5dGVzOworCQllbHNlCisJCQlmaWZvIC09IGZpZm8gJiAzOwogCi0JCWhvc3QtPnBpb193b3JkcyAtPSBmaWZvOworCQlob3N0LT5waW9fYnl0ZXMgLT0gZmlmbzsKIAkJaG9zdC0+cGlvX2NvdW50ICs9IGZpZm87CiAKKwkJZmlmbyA9IChmaWZvICsgMykgPj4gMjsKKwkJcHRyID0gaG9zdC0+cGlvX3B0cjsKIAkJd2hpbGUgKGZpZm8tLSkKLQkJCXdyaXRlbCgqKGhvc3QtPnBpb19wdHIrKyksIHRvX3B0cik7CisJCQl3cml0ZWwoKnB0cisrLCB0b19wdHIpOworCQlob3N0LT5waW9fcHRyID0gcHRyOwogCX0KIAogCWVuYWJsZV9pbWFzayhob3N0LCBTM0MyNDEwX1NESUlNU0tfVFhGSUZPSEFMRik7CkBAIC0zNDksOSArMzg2LDkgQEAKIAkJY2xlYXJfaW1hc2soaG9zdCk7CiAJCWlmIChob3N0LT5waW9fYWN0aXZlICE9IFhGRVJfTk9ORSkgewogCQkJZGJnKGhvc3QsIGRiZ19lcnIsICJ1bmZpbmlzaGVkICVzICIKLQkJCSAgICAiLSBwaW9fY291bnQ6WyV1XSBwaW9fd29yZHM6WyV1XVxuIiwKKwkJCSAgICAiLSBwaW9fY291bnQ6WyV1XSBwaW9fYnl0ZXM6WyV1XVxuIiwKIAkJCSAgICAoaG9zdC0+cGlvX2FjdGl2ZSA9PSBYRkVSX1JFQUQpID8gInJlYWQiIDogIndyaXRlIiwKLQkJCSAgICBob3N0LT5waW9fY291bnQsIGhvc3QtPnBpb193b3Jkcyk7CisJCQkgICAgaG9zdC0+cGlvX2NvdW50LCBob3N0LT5waW9fYnl0ZXMpOwogCiAJCQlpZiAoaG9zdC0+bXJxLT5kYXRhKQogCQkJCWhvc3QtPm1ycS0+ZGF0YS0+ZXJyb3IgPSAtRUlOVkFMOwpAQCAtODEyLDExICs4NDksMTAgQEAKIAkJLyogV2UgY2Fubm90IGRlYWwgd2l0aCB1bmFsaWduZWQgYmxvY2tzIHdpdGggbW9yZSB0aGFuCiAJCSAqIG9uZSBibG9jayBiZWluZyB0cmFuc2ZlcmVkLiAqLwogCi0JCWlmIChkYXRhLT5ibG9ja3MgPiAxKQorCQlpZiAoZGF0YS0+YmxvY2tzID4gMSkgeworCQkJcHJfd2FybmluZygiJXM6IGNhbid0IGRvIG5vbi13b3JkIHNpemVkIGJsb2NrIHRyYW5zZmVycyAoYmxrc3ogJWQpXG4iLCBfX2Z1bmNfXywgZGF0YS0+Ymxrc3opOwogCQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQkJLyogTm8gc3VwcG9ydCB5ZXQgZm9yIG5vbi13b3JkIGJsb2NrIHRyYW5zZmVycy4gKi8KLQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KIAl9CiAKIAl3aGlsZSAocmVhZGwoaG9zdC0+YmFzZSArIFMzQzI0MTBfU0RJRFNUQSkgJgpAQCAtODk2LDcgKzkzMiw3IEBACiAJQlVHX09OKChkYXRhLT5mbGFncyAmIEJPVEhfRElSKSA9PSBCT1RIX0RJUik7CiAKIAlob3N0LT5waW9fc2dwdHIgPSAwOwotCWhvc3QtPnBpb193b3JkcyA9IDA7CisJaG9zdC0+cGlvX2J5dGVzID0gMDsKIAlob3N0LT5waW9fY291bnQgPSAwOwogCWhvc3QtPnBpb19hY3RpdmUgPSBydyA/IFhGRVJfV1JJVEUgOiBYRkVSX1JFQUQ7CiAKQEAgLTEwMzMsMTAgKzEwNjksMzMgQEAKIAkJczNjbWNpX3NlbmRfcmVxdWVzdChtbWMpOwogfQogCitzdGF0aWMgdm9pZCBzM2NtY2lfc2V0X2NsayhzdHJ1Y3QgczNjbWNpX2hvc3QgKmhvc3QsIHN0cnVjdCBtbWNfaW9zICppb3MpCit7CisJdTMyIG1jaV9wc2M7CisKKwkvKiBTZXQgY2xvY2sgKi8KKwlmb3IgKG1jaV9wc2MgPSAwOyBtY2lfcHNjIDwgMjU1OyBtY2lfcHNjKyspIHsKKwkJaG9zdC0+cmVhbF9yYXRlID0gaG9zdC0+Y2xrX3JhdGUgLyAoaG9zdC0+Y2xrX2RpdioobWNpX3BzYysxKSk7CisKKwkJaWYgKGhvc3QtPnJlYWxfcmF0ZSA8PSBpb3MtPmNsb2NrKQorCQkJYnJlYWs7CisJfQorCisJaWYgKG1jaV9wc2MgPiAyNTUpCisJCW1jaV9wc2MgPSAyNTU7CisKKwlob3N0LT5wcmVzY2FsZXIgPSBtY2lfcHNjOworCXdyaXRlbChob3N0LT5wcmVzY2FsZXIsIGhvc3QtPmJhc2UgKyBTM0MyNDEwX1NESVBSRSk7CisKKwkvKiBJZiByZXF1ZXN0ZWQgY2xvY2sgaXMgMCwgcmVhbF9yYXRlIHdpbGwgYmUgMCwgdG9vICovCisJaWYgKGlvcy0+Y2xvY2sgPT0gMCkKKwkJaG9zdC0+cmVhbF9yYXRlID0gMDsKK30KKwogc3RhdGljIHZvaWQgczNjbWNpX3NldF9pb3Moc3RydWN0IG1tY19ob3N0ICptbWMsIHN0cnVjdCBtbWNfaW9zICppb3MpCiB7CiAJc3RydWN0IHMzY21jaV9ob3N0ICpob3N0ID0gbW1jX3ByaXYobW1jKTsKLQl1MzIgbWNpX3BzYywgbWNpX2NvbjsKKwl1MzIgbWNpX2NvbjsKIAogCS8qIFNldCB0aGUgcG93ZXIgc3RhdGUgKi8KIApAQCAtMTA3NCwyMyArMTEzMyw3IEBACiAJCWJyZWFrOwogCX0KIAotCS8qIFNldCBjbG9jayAqLwotCWZvciAobWNpX3BzYyA9IDA7IG1jaV9wc2MgPCAyNTU7IG1jaV9wc2MrKykgewotCQlob3N0LT5yZWFsX3JhdGUgPSBob3N0LT5jbGtfcmF0ZSAvIChob3N0LT5jbGtfZGl2KihtY2lfcHNjKzEpKTsKLQotCQlpZiAoaG9zdC0+cmVhbF9yYXRlIDw9IGlvcy0+Y2xvY2spCi0JCQlicmVhazsKLQl9Ci0KLQlpZiAobWNpX3BzYyA+IDI1NSkKLQkJbWNpX3BzYyA9IDI1NTsKLQotCWhvc3QtPnByZXNjYWxlciA9IG1jaV9wc2M7Ci0Jd3JpdGVsKGhvc3QtPnByZXNjYWxlciwgaG9zdC0+YmFzZSArIFMzQzI0MTBfU0RJUFJFKTsKLQotCS8qIElmIHJlcXVlc3RlZCBjbG9jayBpcyAwLCByZWFsX3JhdGUgd2lsbCBiZSAwLCB0b28gKi8KLQlpZiAoaW9zLT5jbG9jayA9PSAwKQotCQlob3N0LT5yZWFsX3JhdGUgPSAwOworCXMzY21jaV9zZXRfY2xrKGhvc3QsIGlvcyk7CiAKIAkvKiBTZXQgQ0xPQ0tfRU5BQkxFICovCiAJaWYgKGlvcy0+Y2xvY2spCkBAIC0xMTQ4LDYgKzExOTEsNjEgQEAKIAkgKiBjaGVja3MuIEFueSB6ZXJvIGZpZWxkcyB0byBlbnN1cmUgcmVhb25hYmxlIGRlZmF1bHRzIGFyZSBwaWNrZWQuICovCiB9OwogCisjaWZkZWYgQ09ORklHX0NQVV9GUkVRCisKK3N0YXRpYyBpbnQgczNjbWNpX2NwdWZyZXFfdHJhbnNpdGlvbihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLAorCQkJCSAgICAgdW5zaWduZWQgbG9uZyB2YWwsIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IHMzY21jaV9ob3N0ICpob3N0OworCXN0cnVjdCBtbWNfaG9zdCAqbW1jOworCXVuc2lnbmVkIGxvbmcgbmV3Y2xrOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlob3N0ID0gY29udGFpbmVyX29mKG5iLCBzdHJ1Y3QgczNjbWNpX2hvc3QsIGZyZXFfdHJhbnNpdGlvbik7CisJbmV3Y2xrID0gY2xrX2dldF9yYXRlKGhvc3QtPmNsayk7CisJbW1jID0gaG9zdC0+bW1jOworCisJaWYgKCh2YWwgPT0gQ1BVRlJFUV9QUkVDSEFOR0UgJiYgbmV3Y2xrID4gaG9zdC0+Y2xrX3JhdGUpIHx8CisJICAgICh2YWwgPT0gQ1BVRlJFUV9QT1NUQ0hBTkdFICYmIG5ld2NsayA8IGhvc3QtPmNsa19yYXRlKSkgeworCQlzcGluX2xvY2tfaXJxc2F2ZSgmbW1jLT5sb2NrLCBmbGFncyk7CisKKwkJaG9zdC0+Y2xrX3JhdGUgPSBuZXdjbGs7CisKKwkJaWYgKG1tYy0+aW9zLnBvd2VyX21vZGUgIT0gTU1DX1BPV0VSX09GRiAmJgorCQkgICAgbW1jLT5pb3MuY2xvY2sgIT0gMCkKKwkJCXMzY21jaV9zZXRfY2xrKGhvc3QsICZtbWMtPmlvcyk7CisKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbW1jLT5sb2NrLCBmbGFncyk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHMzY21jaV9jcHVmcmVxX3JlZ2lzdGVyKHN0cnVjdCBzM2NtY2lfaG9zdCAqaG9zdCkKK3sKKwlob3N0LT5mcmVxX3RyYW5zaXRpb24ubm90aWZpZXJfY2FsbCA9IHMzY21jaV9jcHVmcmVxX3RyYW5zaXRpb247CisKKwlyZXR1cm4gY3B1ZnJlcV9yZWdpc3Rlcl9ub3RpZmllcigmaG9zdC0+ZnJlcV90cmFuc2l0aW9uLAorCQkJCQkgQ1BVRlJFUV9UUkFOU0lUSU9OX05PVElGSUVSKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHMzY21jaV9jcHVmcmVxX2RlcmVnaXN0ZXIoc3RydWN0IHMzY21jaV9ob3N0ICpob3N0KQoreworCWNwdWZyZXFfdW5yZWdpc3Rlcl9ub3RpZmllcigmaG9zdC0+ZnJlcV90cmFuc2l0aW9uLAorCQkJCSAgICBDUFVGUkVRX1RSQU5TSVRJT05fTk9USUZJRVIpOworfQorCisjZWxzZQorc3RhdGljIGlubGluZSBpbnQgczNjbWNpX2NwdWZyZXFfcmVnaXN0ZXIoc3RydWN0IHMzY21jaV9ob3N0ICpob3N0KQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgczNjbWNpX2NwdWZyZXFfZGVyZWdpc3RlcihzdHJ1Y3QgczNjbWNpX2hvc3QgKmhvc3QpCit7Cit9CisjZW5kaWYKKwogc3RhdGljIGludCBfX2RldmluaXQgczNjbWNpX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIGludCBpczI0NDApCiB7CiAJc3RydWN0IHMzY21jaV9ob3N0ICpob3N0OwpAQCAtMTI5OCwxMCArMTM5NiwxNiBAQAogCSAgICAoaG9zdC0+aXMyNDQwPyIyNDQwIjoiIiksCiAJICAgIGhvc3QtPmJhc2UsIGhvc3QtPmlycSwgaG9zdC0+aXJxX2NkLCBob3N0LT5kbWEpOwogCisJcmV0ID0gczNjbWNpX2NwdWZyZXFfcmVnaXN0ZXIoaG9zdCk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gcmVnaXN0ZXIgY3B1ZnJlcVxuIik7CisJCWdvdG8gZnJlZV9kbWFidWY7CisJfQorCiAJcmV0ID0gbW1jX2FkZF9ob3N0KG1tYyk7CiAJaWYgKHJldCkgewogCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gYWRkIG1tYyBob3N0LlxuIik7Ci0JCWdvdG8gZnJlZV9kbWFidWY7CisJCWdvdG8gZnJlZV9jcHVmcmVxOwogCX0KIAogCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIG1tYyk7CkBAIC0xMzA5LDYgKzE0MTMsOSBAQAogCiAJcmV0dXJuIDA7CiAKKyBmcmVlX2NwdWZyZXE6CisJczNjbWNpX2NwdWZyZXFfZGVyZWdpc3Rlcihob3N0KTsKKwogIGZyZWVfZG1hYnVmOgogCWNsa19kaXNhYmxlKGhvc3QtPmNsayk7CiAKQEAgLTEzNDIsNiArMTQ0OSw3IEBACiAJaWYgKGhvc3QtPmlycV9jZCA+PSAwKQogCQlmcmVlX2lycShob3N0LT5pcnFfY2QsIGhvc3QpOwogCisJczNjbWNpX2NwdWZyZXFfZGVyZWdpc3Rlcihob3N0KTsKIAltbWNfcmVtb3ZlX2hvc3QobW1jKTsKIAljbGtfZGlzYWJsZShob3N0LT5jbGspOwogfQpAQCAtMTQ1NSw3ICsxNTYzLDcgQEAKIAogTU9EVUxFX0RFU0NSSVBUSU9OKCJTYW1zdW5nIFMzQyBNTUMvU0QgQ2FyZCBJbnRlcmZhY2UgZHJpdmVyIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7Ci1NT0RVTEVfQVVUSE9SKCJUaG9tYXMgS2xlZmZlbCA8dGtAbWFpbnRlY2guZGU+Iik7CitNT0RVTEVfQVVUSE9SKCJUaG9tYXMgS2xlZmZlbCA8dGtAbWFpbnRlY2guZGU+LCBCZW4gRG9va3MgPGJlbi1saW51eEBmbHVmZi5vcmc+Iik7CiBNT0RVTEVfQUxJQVMoInBsYXRmb3JtOnMzYzI0MTAtc2RpIik7CiBNT0RVTEVfQUxJQVMoInBsYXRmb3JtOnMzYzI0MTItc2RpIik7CiBNT0RVTEVfQUxJQVMoInBsYXRmb3JtOnMzYzI0NDAtc2RpIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9ob3N0L3MzY21jaS5oIGIvZHJpdmVycy9tbWMvaG9zdC9zM2NtY2kuaAppbmRleCAzN2Q5YzYwLi5jYTFiYTNkIDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9ob3N0L3MzY21jaS5oCisrKyBiL2RyaXZlcnMvbW1jL2hvc3QvczNjbWNpLmgKQEAgLTUxLDcgKzUxLDcgQEAKIAlpbnQJCQlkbWFfY29tcGxldGU7CiAKIAl1MzIJCQlwaW9fc2dwdHI7Ci0JdTMyCQkJcGlvX3dvcmRzOworCXUzMgkJCXBpb19ieXRlczsKIAl1MzIJCQlwaW9fY291bnQ7CiAJdTMyCQkJKnBpb19wdHI7CiAjZGVmaW5lIFhGRVJfTk9ORSAwCkBAIC02Nyw0ICs2Nyw4IEBACiAKIAl1bnNpZ25lZCBpbnQJCWNjbnQsIGRjbnQ7CiAJc3RydWN0IHRhc2tsZXRfc3RydWN0CXBpb190YXNrbGV0OworCisjaWZkZWYgQ09ORklHX0NQVV9GUkVRCisJc3RydWN0IG5vdGlmaWVyX2Jsb2NrCWZyZXFfdHJhbnNpdGlvbjsKKyNlbmRpZgogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2hvc3Qvc2RoY2ktcGNpLmMgYi9kcml2ZXJzL21tYy9ob3N0L3NkaGNpLXBjaS5jCmluZGV4IDBhODRmMTAuLjliZDcwMjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2hvc3Qvc2RoY2ktcGNpLmMKKysrIGIvZHJpdmVycy9tbWMvaG9zdC9zZGhjaS1wY2kuYwpAQCAtMzI3LDcgKzMyNyw3IEBACiAKIAl7CiAJCS52ZW5kb3IgICAgICAgICA9IFBDSV9WRU5ET1JfSURfTUFSVkVMTCwKLQkJLmRldmljZSAgICAgICAgID0gUENJX0RFVklDRV9JRF9NQVJWRUxMX0NBRkVfU0QsCisJCS5kZXZpY2UgICAgICAgICA9IFBDSV9ERVZJQ0VfSURfTUFSVkVMTF84OEFMUDAxX1NELAogCQkuc3VidmVuZG9yICAgICAgPSBQQ0lfQU5ZX0lELAogCQkuc3ViZGV2aWNlICAgICAgPSBQQ0lfQU5ZX0lELAogCQkuZHJpdmVyX2RhdGEgICAgPSAoa2VybmVsX3Vsb25nX3QpJnNkaGNpX2NhZmUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9LY29uZmlnIGIvZHJpdmVycy9tdGQvS2NvbmZpZwppbmRleCAxNGYxMWY4Li5hOTBkNTBjIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9LY29uZmlnCisrKyBiL2RyaXZlcnMvbXRkL0tjb25maWcKQEAgLTE3Miw2ICsxNzIsMTEgQEAKIAkgIG1lbW9yeSBjaGlwcywgYW5kIGFsc28gdXNlIGlvY3RsKCkgdG8gb2J0YWluIGluZm9ybWF0aW9uIGFib3V0CiAJICB0aGUgZGV2aWNlLCBvciB0byBlcmFzZSBwYXJ0cyBvZiBpdC4KIAorY29uZmlnIEhBVkVfTVREX09UUAorCWJvb2wKKwloZWxwCisJICBFbmFibGUgYWNjZXNzIHRvIE9UUCByZWdpb25zIHVzaW5nIE1URF9DSEFSLgorCiBjb25maWcgTVREX0JMS0RFVlMKIAl0cmlzdGF0ZSAiQ29tbW9uIGludGVyZmFjZSB0byBibG9jayBsYXllciBmb3IgTVREICd0cmFuc2xhdGlvbiBsYXllcnMnIgogCWRlcGVuZHMgb24gQkxPQ0sKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL2NoaXBzL0tjb25maWcgYi9kcml2ZXJzL210ZC9jaGlwcy9LY29uZmlnCmluZGV4IDQ3OWQzMmIuLjk0MDgwOTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL2NoaXBzL0tjb25maWcKKysrIGIvZHJpdmVycy9tdGQvY2hpcHMvS2NvbmZpZwpAQCAtNiw2ICs2LDcgQEAKIGNvbmZpZyBNVERfQ0ZJCiAJdHJpc3RhdGUgIkRldGVjdCBmbGFzaCBjaGlwcyBieSBDb21tb24gRmxhc2ggSW50ZXJmYWNlIChDRkkpIHByb2JlIgogCXNlbGVjdCBNVERfR0VOX1BST0JFCisJc2VsZWN0IE1URF9DRklfVVRJTAogCWhlbHAKIAkgIFRoZSBDb21tb24gRmxhc2ggSW50ZXJmYWNlIHNwZWNpZmljYXRpb24gd2FzIGRldmVsb3BlZCBieSBJbnRlbCwKIAkgIEFNRCBhbmQgb3RoZXIgZmxhc2ggbWFudWZhY3R1cmVzIHRoYXQgcHJvdmlkZXMgYSB1bml2ZXJzYWwgbWV0aG9kCkBAIC0xNTQsNiArMTU1LDcgQEAKIGNvbmZpZyBNVERfT1RQCiAJYm9vbCAiUHJvdGVjdGlvbiBSZWdpc3RlcnMgYWthIG9uZS10aW1lIHByb2dyYW1tYWJsZSAoT1RQKSBiaXRzIgogCWRlcGVuZHMgb24gTVREX0NGSV9BRFZfT1BUSU9OUworCXNlbGVjdCBIQVZFX01URF9PVFAKIAlkZWZhdWx0IG4KIAloZWxwCiAJICBUaGlzIGVuYWJsZXMgc3VwcG9ydCBmb3IgcmVhZGluZywgd3JpdGluZyBhbmQgbG9ja2luZyBzbyBjYWxsZWQKQEAgLTE4Nyw3ICsxODksNyBAQAogCSAgU3RyYXRhRmxhc2ggYW5kIG90aGVyIHBhcnRzLgogCiBjb25maWcgTVREX0NGSV9BTURTVEQKLQl0cmlzdGF0ZSAiU3VwcG9ydCBmb3IgQU1EL0Z1aml0c3UgZmxhc2ggY2hpcHMiCisJdHJpc3RhdGUgIlN1cHBvcnQgZm9yIEFNRC9GdWppdHN1L1NwYW5zaW9uIGZsYXNoIGNoaXBzIgogCWRlcGVuZHMgb24gTVREX0dFTl9QUk9CRQogCXNlbGVjdCBNVERfQ0ZJX1VUSUwKIAloZWxwCmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9jaGlwcy9jZmlfY21kc2V0XzAwMDEuYyBiL2RyaXZlcnMvbXRkL2NoaXBzL2NmaV9jbWRzZXRfMDAwMS5jCmluZGV4IDVmMWI0NzIuLmM5M2E4YmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL2NoaXBzL2NmaV9jbWRzZXRfMDAwMS5jCisrKyBiL2RyaXZlcnMvbXRkL2NoaXBzL2NmaV9jbWRzZXRfMDAwMS5jCkBAIC00NzgsNiArNDc4LDI4IEBACiAJCWVsc2UKIAkJCWNmaS0+Y2hpcHNbaV0uZXJhc2VfdGltZSA9IDIwMDAwMDA7CiAKKwkJaWYgKGNmaS0+Y2ZpcS0+V29yZFdyaXRlVGltZW91dFR5cCAmJgorCQkgICAgY2ZpLT5jZmlxLT5Xb3JkV3JpdGVUaW1lb3V0TWF4KQorCQkJY2ZpLT5jaGlwc1tpXS53b3JkX3dyaXRlX3RpbWVfbWF4ID0KKwkJCQkxPDwoY2ZpLT5jZmlxLT5Xb3JkV3JpdGVUaW1lb3V0VHlwICsKKwkJCQkgICAgY2ZpLT5jZmlxLT5Xb3JkV3JpdGVUaW1lb3V0TWF4KTsKKwkJZWxzZQorCQkJY2ZpLT5jaGlwc1tpXS53b3JkX3dyaXRlX3RpbWVfbWF4ID0gNTAwMDAgKiA4OworCisJCWlmIChjZmktPmNmaXEtPkJ1ZldyaXRlVGltZW91dFR5cCAmJgorCQkgICAgY2ZpLT5jZmlxLT5CdWZXcml0ZVRpbWVvdXRNYXgpCisJCQljZmktPmNoaXBzW2ldLmJ1ZmZlcl93cml0ZV90aW1lX21heCA9CisJCQkJMTw8KGNmaS0+Y2ZpcS0+QnVmV3JpdGVUaW1lb3V0VHlwICsKKwkJCQkgICAgY2ZpLT5jZmlxLT5CdWZXcml0ZVRpbWVvdXRNYXgpOworCisJCWlmIChjZmktPmNmaXEtPkJsb2NrRXJhc2VUaW1lb3V0VHlwICYmCisJCSAgICBjZmktPmNmaXEtPkJsb2NrRXJhc2VUaW1lb3V0TWF4KQorCQkJY2ZpLT5jaGlwc1tpXS5lcmFzZV90aW1lX21heCA9CisJCQkJMTAwMDw8KGNmaS0+Y2ZpcS0+QmxvY2tFcmFzZVRpbWVvdXRUeXAgKworCQkJCSAgICAgICBjZmktPmNmaXEtPkJsb2NrRXJhc2VUaW1lb3V0TWF4KTsKKwkJZWxzZQorCQkJY2ZpLT5jaGlwc1tpXS5lcmFzZV90aW1lX21heCA9IDIwMDAwMDAgKiA4OworCiAJCWNmaS0+Y2hpcHNbaV0ucmVmX3BvaW50X2NvdW50ZXIgPSAwOwogCQlpbml0X3dhaXRxdWV1ZV9oZWFkKCYoY2ZpLT5jaGlwc1tpXS53cSkpOwogCX0KQEAgLTcwMyw2ICs3MjUsMTAgQEAKIAlzdHJ1Y3QgY2ZpX3ByaV9pbnRlbGV4dCAqY2ZpcCA9IGNmaS0+Y21kc2V0X3ByaXY7CiAJdW5zaWduZWQgbG9uZyB0aW1lbyA9IGppZmZpZXMgKyBIWjsKIAorCS8qIFByZXZlbnQgc2V0dGluZyBzdGF0ZSBGTF9TWU5DSU5HIGZvciBjaGlwIGluIHN1c3BlbmRlZCBzdGF0ZS4gKi8KKwlpZiAobW9kZSA9PSBGTF9TWU5DSU5HICYmIGNoaXAtPm9sZHN0YXRlICE9IEZMX1JFQURZKQorCQlnb3RvIHNsZWVwOworCiAJc3dpdGNoIChjaGlwLT5zdGF0ZSkgewogCiAJY2FzZSBGTF9TVEFUVVM6CkBAIC04MDgsOCArODM0LDkgQEAKIAlERUNMQVJFX1dBSVRRVUVVRSh3YWl0LCBjdXJyZW50KTsKIAogIHJldHJ5OgotCWlmIChjaGlwLT5wcml2ICYmIChtb2RlID09IEZMX1dSSVRJTkcgfHwgbW9kZSA9PSBGTF9FUkFTSU5HCi0JCQkgICB8fCBtb2RlID09IEZMX09UUF9XUklURSB8fCBtb2RlID09IEZMX1NIVVRET1dOKSkgeworCWlmIChjaGlwLT5wcml2ICYmCisJICAgIChtb2RlID09IEZMX1dSSVRJTkcgfHwgbW9kZSA9PSBGTF9FUkFTSU5HIHx8IG1vZGUgPT0gRkxfT1RQX1dSSVRFCisJICAgIHx8IG1vZGUgPT0gRkxfU0hVVERPV04pICYmIGNoaXAtPnN0YXRlICE9IEZMX1NZTkNJTkcpIHsKIAkJLyoKIAkJICogT0suIFdlIGhhdmUgcG9zc2liaWxpdHkgZm9yIGNvbnRlbnRpb24gb24gdGhlIHdyaXRlL2VyYXNlCiAJCSAqIG9wZXJhdGlvbnMgd2hpY2ggYXJlIGdsb2JhbCB0byB0aGUgcmVhbCBjaGlwIGFuZCBub3QgcGVyCkBAIC04NTksNiArODg2LDE0IEBACiAJCQkJcmV0dXJuIHJldDsKIAkJCX0KIAkJCXNwaW5fbG9jaygmc2hhcmVkLT5sb2NrKTsKKworCQkJLyogV2Ugc2hvdWxkIG5vdCBvd24gY2hpcCBpZiBpdCBpcyBhbHJlYWR5CisJCQkgKiBpbiBGTF9TWU5DSU5HIHN0YXRlLiBQdXQgY29udGVuZGVyIGFuZCByZXRyeS4gKi8KKwkJCWlmIChjaGlwLT5zdGF0ZSA9PSBGTF9TWU5DSU5HKSB7CisJCQkJcHV0X2NoaXAobWFwLCBjb250ZW5kZXIsIGNvbnRlbmRlci0+c3RhcnQpOworCQkJCXNwaW5fdW5sb2NrKGNvbnRlbmRlci0+bXV0ZXgpOworCQkJCWdvdG8gcmV0cnk7CisJCQl9CiAJCQlzcGluX3VubG9jayhjb250ZW5kZXItPm11dGV4KTsKIAkJfQogCkBAIC0xMDEyLDcgKzEwNDcsNyBAQAogCiBzdGF0aWMgaW50IF9feGlwcmFtIHhpcF93YWl0X2Zvcl9vcGVyYXRpb24oCiAJCXN0cnVjdCBtYXBfaW5mbyAqbWFwLCBzdHJ1Y3QgZmxjaGlwICpjaGlwLAotCQl1bnNpZ25lZCBsb25nIGFkciwgdW5zaWduZWQgaW50IGNoaXBfb3BfdGltZSApCisJCXVuc2lnbmVkIGxvbmcgYWRyLCB1bnNpZ25lZCBpbnQgY2hpcF9vcF90aW1lX21heCkKIHsKIAlzdHJ1Y3QgY2ZpX3ByaXZhdGUgKmNmaSA9IG1hcC0+ZmxkcnZfcHJpdjsKIAlzdHJ1Y3QgY2ZpX3ByaV9pbnRlbGV4dCAqY2ZpcCA9IGNmaS0+Y21kc2V0X3ByaXY7CkBAIC0xMDIxLDcgKzEwNTYsNyBAQAogCWZsc3RhdGVfdCBvbGRzdGF0ZSwgbmV3c3RhdGU7CiAKICAgICAgICAJc3RhcnQgPSB4aXBfY3VycnRpbWUoKTsKLQl1c2VjID0gY2hpcF9vcF90aW1lICogODsKKwl1c2VjID0gY2hpcF9vcF90aW1lX21heDsKIAlpZiAodXNlYyA9PSAwKQogCQl1c2VjID0gNTAwMDAwOwogCWRvbmUgPSAwOwpAQCAtMTEzMSw4ICsxMTY2LDggQEAKICNkZWZpbmUgWElQX0lOVkFMX0NBQ0hFRF9SQU5HRShtYXAsIGZyb20sIHNpemUpICBcCiAJSU5WQUxJREFURV9DQUNIRURfUkFOR0UobWFwLCBmcm9tLCBzaXplKQogCi0jZGVmaW5lIElOVkFMX0NBQ0hFX0FORF9XQUlUKG1hcCwgY2hpcCwgY21kX2FkciwgaW52YWxfYWRyLCBpbnZhbF9sZW4sIHVzZWMpIFwKLQl4aXBfd2FpdF9mb3Jfb3BlcmF0aW9uKG1hcCwgY2hpcCwgY21kX2FkciwgdXNlYykKKyNkZWZpbmUgSU5WQUxfQ0FDSEVfQU5EX1dBSVQobWFwLCBjaGlwLCBjbWRfYWRyLCBpbnZhbF9hZHIsIGludmFsX2xlbiwgdXNlYywgdXNlY19tYXgpIFwKKwl4aXBfd2FpdF9mb3Jfb3BlcmF0aW9uKG1hcCwgY2hpcCwgY21kX2FkciwgdXNlY19tYXgpCiAKICNlbHNlCiAKQEAgLTExNDQsNyArMTE3OSw3IEBACiBzdGF0aWMgaW50IGludmFsX2NhY2hlX2FuZF93YWl0X2Zvcl9vcGVyYXRpb24oCiAJCXN0cnVjdCBtYXBfaW5mbyAqbWFwLCBzdHJ1Y3QgZmxjaGlwICpjaGlwLAogCQl1bnNpZ25lZCBsb25nIGNtZF9hZHIsIHVuc2lnbmVkIGxvbmcgaW52YWxfYWRyLCBpbnQgaW52YWxfbGVuLAotCQl1bnNpZ25lZCBpbnQgY2hpcF9vcF90aW1lKQorCQl1bnNpZ25lZCBpbnQgY2hpcF9vcF90aW1lLCB1bnNpZ25lZCBpbnQgY2hpcF9vcF90aW1lX21heCkKIHsKIAlzdHJ1Y3QgY2ZpX3ByaXZhdGUgKmNmaSA9IG1hcC0+ZmxkcnZfcHJpdjsKIAltYXBfd29yZCBzdGF0dXMsIHN0YXR1c19PSyA9IENNRCgweDgwKTsKQEAgLTExNTYsOCArMTE5MSw3IEBACiAJCUlOVkFMSURBVEVfQ0FDSEVEX1JBTkdFKG1hcCwgaW52YWxfYWRyLCBpbnZhbF9sZW4pOwogCXNwaW5fbG9jayhjaGlwLT5tdXRleCk7CiAKLQkvKiBzZXQgb3VyIHRpbWVvdXQgdG8gOCB0aW1lcyB0aGUgZXhwZWN0ZWQgZGVsYXkgKi8KLQl0aW1lbyA9IGNoaXBfb3BfdGltZSAqIDg7CisJdGltZW8gPSBjaGlwX29wX3RpbWVfbWF4OwogCWlmICghdGltZW8pCiAJCXRpbWVvID0gNTAwMDAwOwogCXJlc2V0X3RpbWVvID0gdGltZW87CkBAIC0xMjE3LDggKzEyNTEsOCBAQAogCiAjZW5kaWYKIAotI2RlZmluZSBXQUlUX1RJTUVPVVQobWFwLCBjaGlwLCBhZHIsIHVkZWxheSkgXAotCUlOVkFMX0NBQ0hFX0FORF9XQUlUKG1hcCwgY2hpcCwgYWRyLCAwLCAwLCB1ZGVsYXkpOworI2RlZmluZSBXQUlUX1RJTUVPVVQobWFwLCBjaGlwLCBhZHIsIHVkZWxheSwgdWRlbGF5X21heCkgXAorCUlOVkFMX0NBQ0hFX0FORF9XQUlUKG1hcCwgY2hpcCwgYWRyLCAwLCAwLCB1ZGVsYXksIHVkZWxheV9tYXgpOwogCiAKIHN0YXRpYyBpbnQgZG9fcG9pbnRfb25lY2hpcCAoc3RydWN0IG1hcF9pbmZvICptYXAsIHN0cnVjdCBmbGNoaXAgKmNoaXAsIGxvZmZfdCBhZHIsIHNpemVfdCBsZW4pCkBAIC0xNDUyLDcgKzE0ODYsOCBAQAogCiAJcmV0ID0gSU5WQUxfQ0FDSEVfQU5EX1dBSVQobWFwLCBjaGlwLCBhZHIsCiAJCQkJICAgYWRyLCBtYXBfYmFua3dpZHRoKG1hcCksCi0JCQkJICAgY2hpcC0+d29yZF93cml0ZV90aW1lKTsKKwkJCQkgICBjaGlwLT53b3JkX3dyaXRlX3RpbWUsCisJCQkJICAgY2hpcC0+d29yZF93cml0ZV90aW1lX21heCk7CiAJaWYgKHJldCkgewogCQl4aXBfZW5hYmxlKG1hcCwgY2hpcCwgYWRyKTsKIAkJcHJpbnRrKEtFUk5fRVJSICIlczogd29yZCB3cml0ZSBlcnJvciAoc3RhdHVzIHRpbWVvdXQpXG4iLCBtYXAtPm5hbWUpOwpAQCAtMTYyMyw3ICsxNjU4LDcgQEAKIAogCWNoaXAtPnN0YXRlID0gRkxfV1JJVElOR19UT19CVUZGRVI7CiAJbWFwX3dyaXRlKG1hcCwgd3JpdGVfY21kLCBjbWRfYWRyKTsKLQlyZXQgPSBXQUlUX1RJTUVPVVQobWFwLCBjaGlwLCBjbWRfYWRyLCAwKTsKKwlyZXQgPSBXQUlUX1RJTUVPVVQobWFwLCBjaGlwLCBjbWRfYWRyLCAwLCAwKTsKIAlpZiAocmV0KSB7CiAJCS8qIEFyZ2guIE5vdCByZWFkeSBmb3Igd3JpdGUgdG8gYnVmZmVyICovCiAJCW1hcF93b3JkIFhzdGF0dXMgPSBtYXBfcmVhZChtYXAsIGNtZF9hZHIpOwpAQCAtMTY0MCw3ICsxNjc1LDcgQEAKIAogCS8qIEZpZ3VyZSBvdXQgdGhlIG51bWJlciBvZiB3b3JkcyB0byB3cml0ZSAqLwogCXdvcmRfZ2FwID0gKC1hZHIgJiAobWFwX2Jhbmt3aWR0aChtYXApLTEpKTsKLQl3b3JkcyA9IChsZW4gLSB3b3JkX2dhcCArIG1hcF9iYW5rd2lkdGgobWFwKSAtIDEpIC8gbWFwX2Jhbmt3aWR0aChtYXApOworCXdvcmRzID0gRElWX1JPVU5EX1VQKGxlbiAtIHdvcmRfZ2FwLCBtYXBfYmFua3dpZHRoKG1hcCkpOwogCWlmICghd29yZF9nYXApIHsKIAkJd29yZHMtLTsKIAl9IGVsc2UgewpAQCAtMTY5Miw3ICsxNzI3LDggQEAKIAogCXJldCA9IElOVkFMX0NBQ0hFX0FORF9XQUlUKG1hcCwgY2hpcCwgY21kX2FkciwKIAkJCQkgICBpbml0aWFsX2FkciwgaW5pdGlhbF9sZW4sCi0JCQkJICAgY2hpcC0+YnVmZmVyX3dyaXRlX3RpbWUpOworCQkJCSAgIGNoaXAtPmJ1ZmZlcl93cml0ZV90aW1lLAorCQkJCSAgIGNoaXAtPmJ1ZmZlcl93cml0ZV90aW1lX21heCk7CiAJaWYgKHJldCkgewogCQltYXBfd3JpdGUobWFwLCBDTUQoMHg3MCksIGNtZF9hZHIpOwogCQljaGlwLT5zdGF0ZSA9IEZMX1NUQVRVUzsKQEAgLTE4MjcsNyArMTg2Myw4IEBACiAKIAlyZXQgPSBJTlZBTF9DQUNIRV9BTkRfV0FJVChtYXAsIGNoaXAsIGFkciwKIAkJCQkgICBhZHIsIGxlbiwKLQkJCQkgICBjaGlwLT5lcmFzZV90aW1lKTsKKwkJCQkgICBjaGlwLT5lcmFzZV90aW1lLAorCQkJCSAgIGNoaXAtPmVyYXNlX3RpbWVfbWF4KTsKIAlpZiAocmV0KSB7CiAJCW1hcF93cml0ZShtYXAsIENNRCgweDcwKSwgYWRyKTsKIAkJY2hpcC0+c3RhdGUgPSBGTF9TVEFUVVM7CkBAIC0yMDA2LDcgKzIwNDMsNyBAQAogCSAqLwogCXVkZWxheSA9ICghZXh0cCB8fCAhKGV4dHAtPkZlYXR1cmVTdXBwb3J0ICYgKDEgPDwgNSkpKSA/IDEwMDAwMDAvSFogOiAwOwogCi0JcmV0ID0gV0FJVF9USU1FT1VUKG1hcCwgY2hpcCwgYWRyLCB1ZGVsYXkpOworCXJldCA9IFdBSVRfVElNRU9VVChtYXAsIGNoaXAsIGFkciwgdWRlbGF5LCB1ZGVsYXkgKiAxMDApOwogCWlmIChyZXQpIHsKIAkJbWFwX3dyaXRlKG1hcCwgQ01EKDB4NzApLCBhZHIpOwogCQljaGlwLT5zdGF0ZSA9IEZMX1NUQVRVUzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL2NoaXBzL2NmaV9jbWRzZXRfMDAwMi5jIGIvZHJpdmVycy9tdGQvY2hpcHMvY2ZpX2NtZHNldF8wMDAyLmMKaW5kZXggYTk3MmNjNi4uM2U2ZjVkOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvY2hpcHMvY2ZpX2NtZHNldF8wMDAyLmMKKysrIGIvZHJpdmVycy9tdGQvY2hpcHMvY2ZpX2NtZHNldF8wMDAyLmMKQEAgLTEzLDYgKzEzLDggQEAKICAqIFhJUCBzdXBwb3J0IGhvb2tzIGJ5IFZpdGFseSBXb29sIChiYXNlZCBvbiBjb2RlIGZvciBJbnRlbCBmbGFzaAogICogYnkgTmljb2xhcyBQaXRyZSkKICAqCisgKiAyNS8wOS8yMDA4IENocmlzdG9waGVyIE1vb3JlOiBUb3BCb3R0b20gZml4dXAgZm9yIG1hbnkgTWFjcm9uaXggd2l0aCBDRkkgVjEuMAorICoKICAqIE9jY2FzaW9uYWxseSBtYWludGFpbmVkIGJ5IFRoYXluZSBIYXJiYXVnaCB0aGFyYmF1Z2ggYXQgbG54aSBkb3QgY29tCiAgKgogICogVGhpcyBjb2RlIGlzIEdQTApAQCAtNDMsNiArNDUsNyBAQAogCiAjZGVmaW5lIE1BTlVGQUNUVVJFUl9BTUQJMHgwMDAxCiAjZGVmaW5lIE1BTlVGQUNUVVJFUl9BVE1FTAkweDAwMUYKKyNkZWZpbmUgTUFOVUZBQ1RVUkVSX01BQ1JPTklYCTB4MDBDMgogI2RlZmluZSBNQU5VRkFDVFVSRVJfU1NUCTB4MDBCRgogI2RlZmluZSBTU1Q0OUxGMDA0QgkgICAgICAgIDB4MDA2MAogI2RlZmluZSBTU1Q0OUxGMDQwQgkgICAgICAgIDB4MDA1MApAQCAtMTQ0LDEyICsxNDcsNDQgQEAKIAogCWlmICgoKG1ham9yIDw8IDgpIHwgbWlub3IpIDwgMHgzMTMxKSB7CiAJCS8qIENGSSB2ZXJzaW9uIDEuMCA9PiBkb24ndCB0cnVzdCBib290bG9jICovCisKKwkJREVCVUcoTVREX0RFQlVHX0xFVkVMMSwKKwkJCSIlczogSkVERUMgVmVuZG9yIElEIGlzIDB4JTAyWCBEZXZpY2UgSUQgaXMgMHglMDJYXG4iLAorCQkJbWFwLT5uYW1lLCBjZmktPm1mciwgY2ZpLT5pZCk7CisKKwkJLyogQUZBSUNTIGFsbCAyOUxWNDAwIHdpdGggYSBib3R0b20gYm9vdCBibG9jayBoYXZlIGEgZGV2aWNlIElECisJCSAqIG9mIDB4MjJCQSBpbiAxNi1iaXQgbW9kZSBhbmQgMHhCQSBpbiA4LWJpdCBtb2RlLgorCQkgKiBUaGVzZSB3ZXJlIGJhZGx5IGRldGVjdGVkIGFzIHRoZXkgaGF2ZSB0aGUgMHg4MCBiaXQgc2V0CisJCSAqIHNvIHRyZWF0IHRoZW0gYXMgYSBzcGVjaWFsIGNhc2UuCisJCSAqLworCQlpZiAoKChjZmktPmlkID09IDB4QkEpIHx8IChjZmktPmlkID09IDB4MjJCQSkpICYmCisKKwkJCS8qIE1hY3Jvbml4IGFkZGVkIENGSSB0byB0aGVpciAybmQgZ2VuZXJhdGlvbgorCQkJICogTVgyOUxWNDAwQyBCL1QgYnV0IEFGQUlDUyBubyBvdGhlciAyOUxWNDAwIChBTUQsCisJCQkgKiBGdWppdHN1LCBTcGFuc2lvbiwgRU9OLCBFU0kgYW5kIG9sZGVyIE1hY3Jvbml4KQorCQkJICogaGFzIENGSS4KKwkJCSAqCisJCQkgKiBUaGVyZWZvcmUgYWxzbyBjaGVjayB0aGUgbWFudWZhY3R1cmVyLgorCQkJICogVGhpcyByZWR1Y2VzIHRoZSByaXNrIG9mIGZhbHNlIGRldGVjdGlvbiBkdWUgdG8KKwkJCSAqIHRoZSA4LWJpdCBkZXZpY2UgSUQuCisJCQkgKi8KKwkJCShjZmktPm1mciA9PSBNQU5VRkFDVFVSRVJfTUFDUk9OSVgpKSB7CisJCQlERUJVRyhNVERfREVCVUdfTEVWRUwxLAorCQkJCSIlczogTWFjcm9uaXggTVgyOUxWNDAwQyB3aXRoIGJvdHRvbSBib290IGJsb2NrIgorCQkJCSIgZGV0ZWN0ZWRcbiIsIG1hcC0+bmFtZSk7CisJCQlleHRwLT5Ub3BCb3R0b20gPSAyOwkvKiBib3R0b20gYm9vdCAqLworCQl9IGVsc2UKIAkJaWYgKGNmaS0+aWQgJiAweDgwKSB7CiAJCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogSkVERUMgRGV2aWNlIElEIGlzIDB4JTAyWC4gQXNzdW1pbmcgYnJva2VuIENGSSB0YWJsZS5cbiIsIG1hcC0+bmFtZSwgY2ZpLT5pZCk7CiAJCQlleHRwLT5Ub3BCb3R0b20gPSAzOwkvKiB0b3AgYm9vdCAqLwogCQl9IGVsc2UgewogCQkJZXh0cC0+VG9wQm90dG9tID0gMjsJLyogYm90dG9tIGJvb3QgKi8KIAkJfQorCisJCURFQlVHKE1URF9ERUJVR19MRVZFTDEsCisJCQkiJXM6IEFNRCBDRkkgUFJJIFYlYy4lYyBoYXMgbm8gYm9vdCBibG9jayBmaWVsZDsiCisJCQkiIGRlZHVjZWQgJXMgZnJvbSBEZXZpY2UgSURcbiIsIG1hcC0+bmFtZSwgbWFqb3IsIG1pbm9yLAorCQkJZXh0cC0+VG9wQm90dG9tID09IDIgPyAiYm90dG9tIiA6ICJ0b3AiKTsKIAl9CiB9CiAjZW5kaWYKQEAgLTE3OCwxMCArMjEzLDE4IEBACiAJaWYgKGF0bWVsX3ByaS5GZWF0dXJlcyAmIDB4MDIpCiAJCWV4dHAtPkVyYXNlU3VzcGVuZCA9IDI7CiAKLQlpZiAoYXRtZWxfcHJpLkJvdHRvbUJvb3QpCi0JCWV4dHAtPlRvcEJvdHRvbSA9IDI7Ci0JZWxzZQotCQlleHRwLT5Ub3BCb3R0b20gPSAzOworCS8qIFNvbWUgY2hpcHMgZ290IGl0IGJhY2t3YXJkcy4uLiAqLworCWlmIChjZmktPmlkID09IEFUNDlCVjY0MTYpIHsKKwkJaWYgKGF0bWVsX3ByaS5Cb3R0b21Cb290KQorCQkJZXh0cC0+VG9wQm90dG9tID0gMzsKKwkJZWxzZQorCQkJZXh0cC0+VG9wQm90dG9tID0gMjsKKwl9IGVsc2UgeworCQlpZiAoYXRtZWxfcHJpLkJvdHRvbUJvb3QpCisJCQlleHRwLT5Ub3BCb3R0b20gPSAyOworCQllbHNlCisJCQlleHRwLT5Ub3BCb3R0b20gPSAzOworCX0KIAogCS8qIGJ1cnN0IHdyaXRlIG1vZGUgbm90IHN1cHBvcnRlZCAqLwogCWNmaS0+Y2ZpcS0+QnVmV3JpdGVUaW1lb3V0VHlwID0gMDsKQEAgLTI0Myw2ICsyODYsNyBAQAogCXsgQ0ZJX01GUl9BVE1FTCwgQ0ZJX0lEX0FOWSwgZml4dXBfY29udmVydF9hdG1lbF9wcmksIE5VTEwgfSwKICNpZmRlZiBBTURfQk9PVExPQ19CVUcKIAl7IENGSV9NRlJfQU1ELCBDRklfSURfQU5ZLCBmaXh1cF9hbWRfYm9vdGJsb2NrLCBOVUxMIH0sCisJeyBNQU5VRkFDVFVSRVJfTUFDUk9OSVgsIENGSV9JRF9BTlksIGZpeHVwX2FtZF9ib290YmxvY2ssIE5VTEwgfSwKICNlbmRpZgogCXsgQ0ZJX01GUl9BTUQsIDB4MDA1MCwgZml4dXBfdXNlX3NlY3NpLCBOVUxMLCB9LAogCXsgQ0ZJX01GUl9BTUQsIDB4MDA1MywgZml4dXBfdXNlX3NlY3NpLCBOVUxMLCB9LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvY2hpcHMvY2ZpX3Byb2JlLmMgYi9kcml2ZXJzL210ZC9jaGlwcy9jZmlfcHJvYmUuYwppbmRleCBjNDE4ZTkyLi5lNjNlNjc0IDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9jaGlwcy9jZmlfcHJvYmUuYworKysgYi9kcml2ZXJzL210ZC9jaGlwcy9jZmlfcHJvYmUuYwpAQCAtNDQsMTcgKzQ0LDE0IEBACiAKICNkZWZpbmUgeGlwX2VuYWJsZShiYXNlLCBtYXAsIGNmaSkgXAogZG8geyBcCi0JY2ZpX3NlbmRfZ2VuX2NtZCgweEYwLCAwLCBiYXNlLCBtYXAsIGNmaSwgY2ZpLT5kZXZpY2VfdHlwZSwgTlVMTCk7IFwKLQljZmlfc2VuZF9nZW5fY21kKDB4RkYsIDAsIGJhc2UsIG1hcCwgY2ZpLCBjZmktPmRldmljZV90eXBlLCBOVUxMKTsgXAorCWNmaV9xcnlfbW9kZV9vZmYoYmFzZSwgbWFwLCBjZmkpOwkJXAogCXhpcF9hbGxvd2VkKGJhc2UsIG1hcCk7IFwKIH0gd2hpbGUgKDApCiAKICNkZWZpbmUgeGlwX2Rpc2FibGVfcXJ5KGJhc2UsIG1hcCwgY2ZpKSBcCiBkbyB7IFwKIAl4aXBfZGlzYWJsZSgpOyBcCi0JY2ZpX3NlbmRfZ2VuX2NtZCgweEYwLCAwLCBiYXNlLCBtYXAsIGNmaSwgY2ZpLT5kZXZpY2VfdHlwZSwgTlVMTCk7IFwKLQljZmlfc2VuZF9nZW5fY21kKDB4RkYsIDAsIGJhc2UsIG1hcCwgY2ZpLCBjZmktPmRldmljZV90eXBlLCBOVUxMKTsgXAotCWNmaV9zZW5kX2dlbl9jbWQoMHg5OCwgMHg1NSwgYmFzZSwgbWFwLCBjZmksIGNmaS0+ZGV2aWNlX3R5cGUsIE5VTEwpOyBcCisJY2ZpX3FyeV9tb2RlX29uKGJhc2UsIG1hcCwgY2ZpKTsgXAogfSB3aGlsZSAoMCkKIAogI2Vsc2UKQEAgLTcwLDMyICs2Nyw2IEBACiAgICBpbjogaW50ZXJsZWF2ZSx0eXBlLG1vZGUKICAgIHJldDogdGFibGUgaW5kZXgsIDwwIGZvciBlcnJvcgogICovCi1zdGF0aWMgaW50IF9feGlwcmFtIHFyeV9wcmVzZW50KHN0cnVjdCBtYXBfaW5mbyAqbWFwLCBfX3UzMiBiYXNlLAotCQkJCXN0cnVjdCBjZmlfcHJpdmF0ZSAqY2ZpKQotewotCWludCBvc2YgPSBjZmktPmludGVybGVhdmUgKiBjZmktPmRldmljZV90eXBlOwkvLyBzY2FsZSBmYWN0b3IKLQltYXBfd29yZCB2YWxbM107Ci0JbWFwX3dvcmQgcXJ5WzNdOwotCi0JcXJ5WzBdID0gY2ZpX2J1aWxkX2NtZCgnUScsIG1hcCwgY2ZpKTsKLQlxcnlbMV0gPSBjZmlfYnVpbGRfY21kKCdSJywgbWFwLCBjZmkpOwotCXFyeVsyXSA9IGNmaV9idWlsZF9jbWQoJ1knLCBtYXAsIGNmaSk7Ci0KLQl2YWxbMF0gPSBtYXBfcmVhZChtYXAsIGJhc2UgKyBvc2YqMHgxMCk7Ci0JdmFsWzFdID0gbWFwX3JlYWQobWFwLCBiYXNlICsgb3NmKjB4MTEpOwotCXZhbFsyXSA9IG1hcF9yZWFkKG1hcCwgYmFzZSArIG9zZioweDEyKTsKLQotCWlmICghbWFwX3dvcmRfZXF1YWwobWFwLCBxcnlbMF0sIHZhbFswXSkpCi0JCXJldHVybiAwOwotCi0JaWYgKCFtYXBfd29yZF9lcXVhbChtYXAsIHFyeVsxXSwgdmFsWzFdKSkKLQkJcmV0dXJuIDA7Ci0KLQlpZiAoIW1hcF93b3JkX2VxdWFsKG1hcCwgcXJ5WzJdLCB2YWxbMl0pKQotCQlyZXR1cm4gMDsKLQotCXJldHVybiAxOyAJLy8gIlFSWSIgZm91bmQKLX0KIAogc3RhdGljIGludCBfX3hpcHJhbSBjZmlfcHJvYmVfY2hpcChzdHJ1Y3QgbWFwX2luZm8gKm1hcCwgX191MzIgYmFzZSwKIAkJCQkgICB1bnNpZ25lZCBsb25nICpjaGlwX21hcCwgc3RydWN0IGNmaV9wcml2YXRlICpjZmkpCkBAIC0xMTYsMTEgKzg3LDcgQEAKIAl9CiAKIAl4aXBfZGlzYWJsZSgpOwotCWNmaV9zZW5kX2dlbl9jbWQoMHhGMCwgMCwgYmFzZSwgbWFwLCBjZmksIGNmaS0+ZGV2aWNlX3R5cGUsIE5VTEwpOwotCWNmaV9zZW5kX2dlbl9jbWQoMHhGRiwgMCwgYmFzZSwgbWFwLCBjZmksIGNmaS0+ZGV2aWNlX3R5cGUsIE5VTEwpOwotCWNmaV9zZW5kX2dlbl9jbWQoMHg5OCwgMHg1NSwgYmFzZSwgbWFwLCBjZmksIGNmaS0+ZGV2aWNlX3R5cGUsIE5VTEwpOwotCi0JaWYgKCFxcnlfcHJlc2VudChtYXAsYmFzZSxjZmkpKSB7CisJaWYgKCFjZmlfcXJ5X21vZGVfb24oYmFzZSwgbWFwLCBjZmkpKSB7CiAJCXhpcF9lbmFibGUoYmFzZSwgbWFwLCBjZmkpOwogCQlyZXR1cm4gMDsKIAl9CkBAIC0xNDEsMTQgKzEwOCwxMyBAQAogIAkJc3RhcnQgPSBpIDw8IGNmaS0+Y2hpcHNoaWZ0OwogCQkvKiBUaGlzIGNoaXAgc2hvdWxkIGJlIGluIHJlYWQgbW9kZSBpZiBpdCdzIG9uZQogCQkgICB3ZSd2ZSBhbHJlYWR5IHRvdWNoZWQuICovCi0JCWlmIChxcnlfcHJlc2VudChtYXAsIHN0YXJ0LCBjZmkpKSB7CisJCWlmIChjZmlfcXJ5X3ByZXNlbnQobWFwLCBzdGFydCwgY2ZpKSkgewogCQkJLyogRWVwLiBUaGlzIGNoaXAgYWxzbyBoYWQgdGhlIFFSWSBtYXJrZXIuCiAJCQkgKiBJcyBpdCBhbiBhbGlhcyBmb3IgdGhlIG5ldyBvbmU/ICovCi0JCQljZmlfc2VuZF9nZW5fY21kKDB4RjAsIDAsIHN0YXJ0LCBtYXAsIGNmaSwgY2ZpLT5kZXZpY2VfdHlwZSwgTlVMTCk7Ci0JCQljZmlfc2VuZF9nZW5fY21kKDB4RkYsIDAsIHN0YXJ0LCBtYXAsIGNmaSwgY2ZpLT5kZXZpY2VfdHlwZSwgTlVMTCk7CisJCQljZmlfcXJ5X21vZGVfb2ZmKHN0YXJ0LCBtYXAsIGNmaSk7CiAKIAkJCS8qIElmIHRoZSBRUlkgbWFya2VyIGdvZXMgYXdheSwgaXQncyBhbiBhbGlhcyAqLwotCQkJaWYgKCFxcnlfcHJlc2VudChtYXAsIHN0YXJ0LCBjZmkpKSB7CisJCQlpZiAoIWNmaV9xcnlfcHJlc2VudChtYXAsIHN0YXJ0LCBjZmkpKSB7CiAJCQkJeGlwX2FsbG93ZWQoYmFzZSwgbWFwKTsKIAkJCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IEZvdW5kIGFuIGFsaWFzIGF0IDB4JXggZm9yIHRoZSBjaGlwIGF0IDB4JWx4XG4iLAogCQkJCSAgICAgICBtYXAtPm5hbWUsIGJhc2UsIHN0YXJ0KTsKQEAgLTE1OCwxMCArMTI0LDkgQEAKIAkJCSAqIHVuZm9ydHVuYXRlLiBTdGljayB0aGUgbmV3IGNoaXAgaW4gcmVhZCBtb2RlCiAJCQkgKiB0b28gYW5kIGlmIGl0J3MgdGhlIHNhbWUsIGFzc3VtZSBpdCdzIGFuIGFsaWFzLiAqLwogCQkJLyogRklYTUU6IFVzZSBvdGhlciBtb2RlcyB0byBkbyBhIHByb3BlciBjaGVjayAqLwotCQkJY2ZpX3NlbmRfZ2VuX2NtZCgweEYwLCAwLCBiYXNlLCBtYXAsIGNmaSwgY2ZpLT5kZXZpY2VfdHlwZSwgTlVMTCk7Ci0JCQljZmlfc2VuZF9nZW5fY21kKDB4RkYsIDAsIHN0YXJ0LCBtYXAsIGNmaSwgY2ZpLT5kZXZpY2VfdHlwZSwgTlVMTCk7CisJCQljZmlfcXJ5X21vZGVfb2ZmKGJhc2UsIG1hcCwgY2ZpKTsKIAotCQkJaWYgKHFyeV9wcmVzZW50KG1hcCwgYmFzZSwgY2ZpKSkgeworCQkJaWYgKGNmaV9xcnlfcHJlc2VudChtYXAsIGJhc2UsIGNmaSkpIHsKIAkJCQl4aXBfYWxsb3dlZChiYXNlLCBtYXApOwogCQkJCXByaW50ayhLRVJOX0RFQlVHICIlczogRm91bmQgYW4gYWxpYXMgYXQgMHgleCBmb3IgdGhlIGNoaXAgYXQgMHglbHhcbiIsCiAJCQkJICAgICAgIG1hcC0+bmFtZSwgYmFzZSwgc3RhcnQpOwpAQCAtMTc2LDggKzE0MSw3IEBACiAJY2ZpLT5udW1jaGlwcysrOwogCiAJLyogUHV0IGl0IGJhY2sgaW50byBSZWFkIE1vZGUgKi8KLQljZmlfc2VuZF9nZW5fY21kKDB4RjAsIDAsIGJhc2UsIG1hcCwgY2ZpLCBjZmktPmRldmljZV90eXBlLCBOVUxMKTsKLQljZmlfc2VuZF9nZW5fY21kKDB4RkYsIDAsIGJhc2UsIG1hcCwgY2ZpLCBjZmktPmRldmljZV90eXBlLCBOVUxMKTsKKwljZmlfcXJ5X21vZGVfb2ZmKGJhc2UsIG1hcCwgY2ZpKTsKIAl4aXBfYWxsb3dlZChiYXNlLCBtYXApOwogCiAJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IEZvdW5kICVkIHglZCBkZXZpY2VzIGF0IDB4JXggaW4gJWQtYml0IGJhbmtcbiIsCkBAIC0yMzcsOSArMjAxLDcgQEAKIAkJCSAgY2ZpX3JlYWRfcXVlcnkobWFwLCBiYXNlICsgMHhmICogb2ZzX2ZhY3Rvcik7CiAKIAkvKiBQdXQgaXQgYmFjayBpbnRvIFJlYWQgTW9kZSAqLwotCWNmaV9zZW5kX2dlbl9jbWQoMHhGMCwgMCwgYmFzZSwgbWFwLCBjZmksIGNmaS0+ZGV2aWNlX3R5cGUsIE5VTEwpOwotCS8qIC4uLiBldmVuIGlmIGl0J3MgYW4gSW50ZWwgY2hpcCAqLwotCWNmaV9zZW5kX2dlbl9jbWQoMHhGRiwgMCwgYmFzZSwgbWFwLCBjZmksIGNmaS0+ZGV2aWNlX3R5cGUsIE5VTEwpOworCWNmaV9xcnlfbW9kZV9vZmYoYmFzZSwgbWFwLCBjZmkpOwogCXhpcF9hbGxvd2VkKGJhc2UsIG1hcCk7CiAKIAkvKiBEbyBhbnkgbmVjZXNzYXJ5IGJ5dGVzd2FwcGluZyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvY2hpcHMvY2ZpX3V0aWwuYyBiL2RyaXZlcnMvbXRkL2NoaXBzL2NmaV91dGlsLmMKaW5kZXggMGVlNDU3MC4uMzRkNDBlMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvY2hpcHMvY2ZpX3V0aWwuYworKysgYi9kcml2ZXJzL210ZC9jaGlwcy9jZmlfdXRpbC5jCkBAIC0yNCw2ICsyNCw2NiBAQAogI2luY2x1ZGUgPGxpbnV4L210ZC9jZmkuaD4KICNpbmNsdWRlIDxsaW51eC9tdGQvY29tcGF0bWFjLmg+CiAKK2ludCBfX3hpcHJhbSBjZmlfcXJ5X3ByZXNlbnQoc3RydWN0IG1hcF9pbmZvICptYXAsIF9fdTMyIGJhc2UsCisJCQkgICAgIHN0cnVjdCBjZmlfcHJpdmF0ZSAqY2ZpKQoreworCWludCBvc2YgPSBjZmktPmludGVybGVhdmUgKiBjZmktPmRldmljZV90eXBlOwkvKiBzY2FsZSBmYWN0b3IgKi8KKwltYXBfd29yZCB2YWxbM107CisJbWFwX3dvcmQgcXJ5WzNdOworCisJcXJ5WzBdID0gY2ZpX2J1aWxkX2NtZCgnUScsIG1hcCwgY2ZpKTsKKwlxcnlbMV0gPSBjZmlfYnVpbGRfY21kKCdSJywgbWFwLCBjZmkpOworCXFyeVsyXSA9IGNmaV9idWlsZF9jbWQoJ1knLCBtYXAsIGNmaSk7CisKKwl2YWxbMF0gPSBtYXBfcmVhZChtYXAsIGJhc2UgKyBvc2YqMHgxMCk7CisJdmFsWzFdID0gbWFwX3JlYWQobWFwLCBiYXNlICsgb3NmKjB4MTEpOworCXZhbFsyXSA9IG1hcF9yZWFkKG1hcCwgYmFzZSArIG9zZioweDEyKTsKKworCWlmICghbWFwX3dvcmRfZXF1YWwobWFwLCBxcnlbMF0sIHZhbFswXSkpCisJCXJldHVybiAwOworCisJaWYgKCFtYXBfd29yZF9lcXVhbChtYXAsIHFyeVsxXSwgdmFsWzFdKSkKKwkJcmV0dXJuIDA7CisKKwlpZiAoIW1hcF93b3JkX2VxdWFsKG1hcCwgcXJ5WzJdLCB2YWxbMl0pKQorCQlyZXR1cm4gMDsKKworCXJldHVybiAxOyAJLyogIlFSWSIgZm91bmQgKi8KK30KK0VYUE9SVF9TWU1CT0xfR1BMKGNmaV9xcnlfcHJlc2VudCk7CisKK2ludCBfX3hpcHJhbSBjZmlfcXJ5X21vZGVfb24odWludDMyX3QgYmFzZSwgc3RydWN0IG1hcF9pbmZvICptYXAsCisJCQkgICAgIHN0cnVjdCBjZmlfcHJpdmF0ZSAqY2ZpKQoreworCWNmaV9zZW5kX2dlbl9jbWQoMHhGMCwgMCwgYmFzZSwgbWFwLCBjZmksIGNmaS0+ZGV2aWNlX3R5cGUsIE5VTEwpOworCWNmaV9zZW5kX2dlbl9jbWQoMHg5OCwgMHg1NSwgYmFzZSwgbWFwLCBjZmksIGNmaS0+ZGV2aWNlX3R5cGUsIE5VTEwpOworCWlmIChjZmlfcXJ5X3ByZXNlbnQobWFwLCBiYXNlLCBjZmkpKQorCQlyZXR1cm4gMTsKKwkvKiBRUlkgbm90IGZvdW5kIHByb2JhYmx5IHdlIGRlYWwgd2l0aCBzb21lIG9kZCBDRkkgY2hpcHMgKi8KKwkvKiBTb21lIHJldmlzaW9ucyBvZiBzb21lIG9sZCBJbnRlbCBjaGlwcz8gKi8KKwljZmlfc2VuZF9nZW5fY21kKDB4RjAsIDAsIGJhc2UsIG1hcCwgY2ZpLCBjZmktPmRldmljZV90eXBlLCBOVUxMKTsKKwljZmlfc2VuZF9nZW5fY21kKDB4RkYsIDAsIGJhc2UsIG1hcCwgY2ZpLCBjZmktPmRldmljZV90eXBlLCBOVUxMKTsKKwljZmlfc2VuZF9nZW5fY21kKDB4OTgsIDB4NTUsIGJhc2UsIG1hcCwgY2ZpLCBjZmktPmRldmljZV90eXBlLCBOVUxMKTsKKwlpZiAoY2ZpX3FyeV9wcmVzZW50KG1hcCwgYmFzZSwgY2ZpKSkKKwkJcmV0dXJuIDE7CisJLyogU1QgTTI5RFcgY2hpcHMgKi8KKwljZmlfc2VuZF9nZW5fY21kKDB4RjAsIDAsIGJhc2UsIG1hcCwgY2ZpLCBjZmktPmRldmljZV90eXBlLCBOVUxMKTsKKwljZmlfc2VuZF9nZW5fY21kKDB4OTgsIDB4NTU1LCBiYXNlLCBtYXAsIGNmaSwgY2ZpLT5kZXZpY2VfdHlwZSwgTlVMTCk7CisJaWYgKGNmaV9xcnlfcHJlc2VudChtYXAsIGJhc2UsIGNmaSkpCisJCXJldHVybiAxOworCS8qIFFSWSBub3QgZm91bmQgKi8KKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGNmaV9xcnlfbW9kZV9vbik7CisKK3ZvaWQgX194aXByYW0gY2ZpX3FyeV9tb2RlX29mZih1aW50MzJfdCBiYXNlLCBzdHJ1Y3QgbWFwX2luZm8gKm1hcCwKKwkJCSAgICAgICBzdHJ1Y3QgY2ZpX3ByaXZhdGUgKmNmaSkKK3sKKwljZmlfc2VuZF9nZW5fY21kKDB4RjAsIDAsIGJhc2UsIG1hcCwgY2ZpLCBjZmktPmRldmljZV90eXBlLCBOVUxMKTsKKwljZmlfc2VuZF9nZW5fY21kKDB4RkYsIDAsIGJhc2UsIG1hcCwgY2ZpLCBjZmktPmRldmljZV90eXBlLCBOVUxMKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGNmaV9xcnlfbW9kZV9vZmYpOworCiBzdHJ1Y3QgY2ZpX2V4dHF1ZXJ5ICoKIF9feGlwcmFtIGNmaV9yZWFkX3ByaShzdHJ1Y3QgbWFwX2luZm8gKm1hcCwgX191MTYgYWRyLCBfX3UxNiBzaXplLCBjb25zdCBjaGFyKiBuYW1lKQogewpAQCAtNDgsOCArMTA4LDcgQEAKICNlbmRpZgogCiAJLyogU3dpdGNoIGl0IGludG8gUXVlcnkgTW9kZSAqLwotCWNmaV9zZW5kX2dlbl9jbWQoMHg5OCwgMHg1NSwgYmFzZSwgbWFwLCBjZmksIGNmaS0+ZGV2aWNlX3R5cGUsIE5VTEwpOwotCisJY2ZpX3FyeV9tb2RlX29uKGJhc2UsIG1hcCwgY2ZpKTsKIAkvKiBSZWFkIGluIHRoZSBFeHRlbmRlZCBRdWVyeSBUYWJsZSAqLwogCWZvciAoaT0wOyBpPHNpemU7IGkrKykgewogCQkoKHVuc2lnbmVkIGNoYXIgKilleHRwKVtpXSA9CkBAIC01Nyw4ICsxMTYsNyBAQAogCX0KIAogCS8qIE1ha2Ugc3VyZSBpdCByZXR1cm5zIHRvIHJlYWQgbW9kZSAqLwotCWNmaV9zZW5kX2dlbl9jbWQoMHhmMCwgMCwgYmFzZSwgbWFwLCBjZmksIGNmaS0+ZGV2aWNlX3R5cGUsIE5VTEwpOwotCWNmaV9zZW5kX2dlbl9jbWQoMHhmZiwgMCwgYmFzZSwgbWFwLCBjZmksIGNmaS0+ZGV2aWNlX3R5cGUsIE5VTEwpOworCWNmaV9xcnlfbW9kZV9vZmYoYmFzZSwgbWFwLCBjZmkpOwogCiAjaWZkZWYgQ09ORklHX01URF9YSVAKIAkodm9pZCkgbWFwX3JlYWQobWFwLCBiYXNlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL2NoaXBzL2dlbl9wcm9iZS5jIGIvZHJpdmVycy9tdGQvY2hpcHMvZ2VuX3Byb2JlLmMKaW5kZXggZjA2MTg4NS4uZTJkYzk2NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvY2hpcHMvZ2VuX3Byb2JlLmMKKysrIGIvZHJpdmVycy9tdGQvY2hpcHMvZ2VuX3Byb2JlLmMKQEAgLTExMSw3ICsxMTEsNyBAQAogCQltYXhfY2hpcHMgPSAxOwogCX0KIAotCW1hcHNpemUgPSBzaXplb2YobG9uZykgKiAoIChtYXhfY2hpcHMgKyBCSVRTX1BFUl9MT05HLTEpIC8gQklUU19QRVJfTE9ORyApOworCW1hcHNpemUgPSBzaXplb2YobG9uZykgKiBESVZfUk9VTkRfVVAobWF4X2NoaXBzLCBCSVRTX1BFUl9MT05HKTsKIAljaGlwX21hcCA9IGt6YWxsb2MobWFwc2l6ZSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFjaGlwX21hcCkgewogCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczoga21hbGxvYyBmYWlsZWQgZm9yIENGSSBjaGlwIG1hcFxuIiwgbWFwLT5uYW1lKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL2NtZGxpbmVwYXJ0LmMgYi9kcml2ZXJzL210ZC9jbWRsaW5lcGFydC5jCmluZGV4IDcxYmMwN2YuLjUwYTM0MDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL2NtZGxpbmVwYXJ0LmMKKysrIGIvZHJpdmVycy9tdGQvY21kbGluZXBhcnQuYwpAQCAtNyw2ICs3LDcgQEAKICAqCiAgKiBtdGRwYXJ0cz08bXRkZGVmPls7PG10ZGRlZl0KICAqIDxtdGRkZWY+ICA6PSA8bXRkLWlkPjo8cGFydGRlZj5bLDxwYXJ0ZGVmPl0KKyAqICAgICAgICAgICAgICB3aGVyZSA8bXRkLWlkPiBpcyB0aGUgbmFtZSBmcm9tIHRoZSAiY2F0IC9wcm9jL210ZCIgY29tbWFuZAogICogPHBhcnRkZWY+IDo9IDxzaXplPltAb2Zmc2V0XVs8bmFtZT5dW3JvXVtsa10KICAqIDxtdGQtaWQ+ICA6PSB1bmlxdWUgbmFtZSB1c2VkIGluIG1hcHBpbmcgZHJpdmVyL2RldmljZSAobXRkLT5uYW1lKQogICogPHNpemU+ICAgIDo9IHN0YW5kYXJkIGxpbnV4IG1lbXNpemUgT1IgIi0iIHRvIGRlbm90ZSBhbGwgcmVtYWluaW5nIHNwYWNlCmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9kZXZpY2VzL0tjb25maWcgYi9kcml2ZXJzL210ZC9kZXZpY2VzL0tjb25maWcKaW5kZXggOWM2MTNmMC4uNmZkZTBhMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvZGV2aWNlcy9LY29uZmlnCisrKyBiL2RyaXZlcnMvbXRkL2RldmljZXMvS2NvbmZpZwpAQCAtNTksNiArNTksMjcgQEAKIAkgIFNvbWV0aW1lcyBEYXRhRmxhc2ggY2hpcHMgYXJlIHBhY2thZ2VkIGluc2lkZSBNTUMtZm9ybWF0CiAJICBjYXJkczsgYXQgdGhpcyB3cml0aW5nLCB0aGUgTU1DIHN0YWNrIHdvbid0IGhhbmRsZSB0aG9zZS4KIAorY29uZmlnIE1URF9EQVRBRkxBU0hfV1JJVEVfVkVSSUZZCisJYm9vbCAiVmVyaWZ5IERhdGFGbGFzaCBwYWdlIHdyaXRlcyIKKwlkZXBlbmRzIG9uIE1URF9EQVRBRkxBU0gKKwloZWxwCisJICBUaGlzIGFkZHMgYW4gZXh0cmEgY2hlY2sgd2hlbiBkYXRhIGlzIHdyaXR0ZW4gdG8gdGhlIGZsYXNoLgorCSAgSXQgbWF5IGhlbHAgaWYgeW91IGFyZSB2ZXJpZnlpbmcgY2hpcCBzZXR1cCAodGltaW5ncyBldGMpIG9uCisJICB5b3VyIGJvYXJkLiAgVGhlcmUgaXMgYSByYXJlIHBvc3NpYmlsaXR5IHRoYXQgZXZlbiB0aG91Z2ggdGhlCisJICBkZXZpY2UgdGhpbmtzIHRoZSB3cml0ZSB3YXMgc3VjY2Vzc2Z1bCwgYSBiaXQgY291bGQgaGF2ZSBiZWVuCisJICBmbGlwcGVkIGFjY2lkZW50YWxseSBkdWUgdG8gZGV2aWNlIHdlYXIgb3Igc29tZXRoaW5nIGVsc2UuCisKK2NvbmZpZyBNVERfREFUQUZMQVNIX09UUAorCWJvb2wgIkRhdGFGbGFzaCBPVFAgc3VwcG9ydCAoU2VjdXJpdHkgUmVnaXN0ZXIpIgorCWRlcGVuZHMgb24gTVREX0RBVEFGTEFTSAorCXNlbGVjdCBIQVZFX01URF9PVFAKKwloZWxwCisJICBOZXdlciBEYXRhRmxhc2ggY2hpcHMgKHJldmlzaW9ucyBDIGFuZCBEKSBzdXBwb3J0IDEyOCBieXRlcyBvZgorCSAgb25lLXRpbWUtcHJvZ3JhbW1hYmxlIChPVFApIGRhdGEuICBUaGUgZmlyc3QgaGFsZiBtYXkgYmUgd3JpdHRlbgorCSAgKG9uY2UpIHdpdGggdXAgdG8gNjQgYnl0ZXMgb2YgZGF0YSwgc3VjaCBhcyBhIHNlcmlhbCBudW1iZXIgb3IKKwkgIG90aGVyIGtleSBwcm9kdWN0IGRhdGEuICBUaGUgc2Vjb25kIGhhbGYgaXMgcHJvZ3JhbW1lZCB3aXRoIGEKKwkgIHVuaXF1ZS10by1lYWNoLWNoaXAgYml0IHBhdHRlcm4gYXQgdGhlIGZhY3RvcnkuCisKIGNvbmZpZyBNVERfTTI1UDgwCiAJdHJpc3RhdGUgIlN1cHBvcnQgbW9zdCBTUEkgRmxhc2ggY2hpcHMgKEFUMjZERiwgTTI1UCwgVzI1WCwgLi4uKSIKIAlkZXBlbmRzIG9uIFNQSV9NQVNURVIgJiYgRVhQRVJJTUVOVEFMCmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9kZXZpY2VzL20yNXA4MC5jIGIvZHJpdmVycy9tdGQvZGV2aWNlcy9tMjVwODAuYwppbmRleCBiMzVjMzMzLi43NmE3Njc1IDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9kZXZpY2VzL20yNXA4MC5jCisrKyBiL2RyaXZlcnMvbXRkL2RldmljZXMvbTI1cDgwLmMKQEAgLTM5LDYgKzM5LDcgQEAKICNkZWZpbmUJT1BDT0RFX1BQCQkweDAyCS8qIFBhZ2UgcHJvZ3JhbSAodXAgdG8gMjU2IGJ5dGVzKSAqLwogI2RlZmluZQlPUENPREVfQkVfNEsgCQkweDIwCS8qIEVyYXNlIDRLaUIgYmxvY2sgKi8KICNkZWZpbmUJT1BDT0RFX0JFXzMySwkJMHg1MgkvKiBFcmFzZSAzMktpQiBibG9jayAqLworI2RlZmluZQlPUENPREVfQkUJCTB4YzcJLyogRXJhc2Ugd2hvbGUgZmxhc2ggYmxvY2sgKi8KICNkZWZpbmUJT1BDT0RFX1NFCQkweGQ4CS8qIFNlY3RvciBlcmFzZSAodXN1YWxseSA2NEtpQikgKi8KICNkZWZpbmUJT1BDT0RFX1JESUQJCTB4OWYJLyogUmVhZCBKRURFQyBJRCAqLwogCkBAIC0xNjEsNiArMTYyLDMxIEBACiAJcmV0dXJuIDE7CiB9CiAKKy8qCisgKiBFcmFzZSB0aGUgd2hvbGUgZmxhc2ggbWVtb3J5CisgKgorICogUmV0dXJucyAwIGlmIHN1Y2Nlc3NmdWwsIG5vbi16ZXJvIG90aGVyd2lzZS4KKyAqLworc3RhdGljIGludCBlcmFzZV9ibG9jayhzdHJ1Y3QgbTI1cCAqZmxhc2gpCit7CisJREVCVUcoTVREX0RFQlVHX0xFVkVMMywgIiVzOiAlcyAlZEtpQlxuIiwKKwkJCWZsYXNoLT5zcGktPmRldi5idXNfaWQsIF9fZnVuY19fLAorCQkJZmxhc2gtPm10ZC5zaXplIC8gMTAyNCk7CisKKwkvKiBXYWl0IHVudGlsIGZpbmlzaGVkIHByZXZpb3VzIHdyaXRlIGNvbW1hbmQuICovCisJaWYgKHdhaXRfdGlsbF9yZWFkeShmbGFzaCkpCisJCXJldHVybiAxOworCisJLyogU2VuZCB3cml0ZSBlbmFibGUsIHRoZW4gZXJhc2UgY29tbWFuZHMuICovCisJd3JpdGVfZW5hYmxlKGZsYXNoKTsKKworCS8qIFNldCB1cCBjb21tYW5kIGJ1ZmZlci4gKi8KKwlmbGFzaC0+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+UENJX1JPTV9BRERSRVNTX0VOQUJMRTsKLQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKGRldiwgUENJX1JPTV9BRERSRVNTLCB2YWwpOworCXBjaV9kaXNhYmxlX3JvbShkZXYpOwogfQogCiBzdGF0aWMgdW5zaWduZWQgbG9uZwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbWFwcy9wY21jaWFtdGQuYyBiL2RyaXZlcnMvbXRkL21hcHMvcGNtY2lhbXRkLmMKaW5kZXggOTA5MjRmYi4uZDYwMGMyZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbWFwcy9wY21jaWFtdGQuYworKysgYi9kcml2ZXJzL210ZC9tYXBzL3BjbWNpYW10ZC5jCkBAIC0xMTgsNyArMTE4LDggQEAKIAkJREVCVUcoMiwgIlJlbWFwcGluZyB3aW5kb3cgZnJvbSAweCU4Ljh4IHRvIDB4JTguOHgiLAogCQkgICAgICBkZXYtPm9mZnNldCwgbXJxLkNhcmRPZmZzZXQpOwogCQltcnEuUGFnZSA9IDA7Ci0JCWlmKCAocmV0ID0gcGNtY2lhX21hcF9tZW1fcGFnZSh3aW4sICZtcnEpKSAhPSBDU19TVUNDRVNTKSB7CisJCXJldCA9IHBjbWNpYV9tYXBfbWVtX3BhZ2Uod2luLCAmbXJxKTsKKwkJaWYgKHJldCAhPSAwKSB7CiAJCQljc19lcnJvcihkZXYtPnBfZGV2LCBNYXBNZW1QYWdlLCByZXQpOwogCQkJcmV0dXJuIE5VTEw7CiAJCX0KQEAgLTMyNiw5ICszMjcsOCBAQAogCiAJREVCVUcoMiwgImRldiA9ICVwIG9uID0gJWQgdnBwID0gJWRcbiIsIGRldiwgb24sIGRldi0+dnBwKTsKIAlyZXQgPSBwY21jaWFfbW9kaWZ5X2NvbmZpZ3VyYXRpb24obGluaywgJm1vZCk7Ci0JaWYocmV0ICE9IENTX1NVQ0NFU1MpIHsKKwlpZiAocmV0ICE9IDApCiAJCWNzX2Vycm9yKGxpbmssIE1vZGlmeUNvbmZpZ3VyYXRpb24sIHJldCk7Ci0JfQogfQogCiAKQEAgLTM2OCwxNCArMzY4LDE0IEBACiAJdHVwbGUuRGVzaXJlZFR1cGxlID0gUkVUVVJOX0ZJUlNUX1RVUExFOwogCiAJcmMgPSBwY21jaWFfZ2V0X2ZpcnN0X3R1cGxlKGxpbmssICZ0dXBsZSk7Ci0Jd2hpbGUocmMgPT0gQ1NfU1VDQ0VTUykgeworCXdoaWxlIChyYyA9PSAwKSB7CiAJCXJjID0gcGNtY2lhX2dldF90dXBsZV9kYXRhKGxpbmssICZ0dXBsZSk7Ci0JCWlmKHJjICE9IENTX1NVQ0NFU1MpIHsKKwkJaWYgKHJjICE9IDApIHsKIAkJCWNzX2Vycm9yKGxpbmssIEdldFR1cGxlRGF0YSwgcmMpOwogCQkJYnJlYWs7CiAJCX0KLQkJcmMgPSBwY21jaWFfcGFyc2VfdHVwbGUobGluaywgJnR1cGxlLCAmcGFyc2UpOwotCQlpZihyYyAhPSBDU19TVUNDRVNTKSB7CisJCXJjID0gcGNtY2lhX3BhcnNlX3R1cGxlKCZ0dXBsZSwgJnBhcnNlKTsKKwkJaWYgKHJjICE9IDApIHsKIAkJCWNzX2Vycm9yKGxpbmssIFBhcnNlVHVwbGUsIHJjKTsKIAkJCWJyZWFrOwogCQl9CkBAIC00OTMsMTggKzQ5MywxMSBAQAogCWludCBsYXN0X3JldCA9IDAsIGxhc3RfZm4gPSAwOwogCWludCByZXQ7CiAJaW50IGk7Ci0JY29uZmlnX2luZm9fdCB0OwogCXN0YXRpYyBjaGFyICpwcm9iZXNbXSA9IHsgImplZGVjX3Byb2JlIiwgImNmaV9wcm9iZSIgfTsKIAlpbnQgbmV3X25hbWUgPSAwOwogCiAJREVCVUcoMywgImxpbms9MHglcCIsIGxpbmspOwogCi0JREVCVUcoMiwgIlZhbGlkYXRpbmcgQ0lTIik7Ci0JcmV0ID0gcGNtY2lhX3ZhbGlkYXRlX2NpcyhsaW5rLCBOVUxMKTsKLQlpZihyZXQgIT0gQ1NfU1VDQ0VTUykgewotCQljc19lcnJvcihsaW5rLCBHZXRUdXBsZURhdGEsIHJldCk7Ci0JfQotCiAJY2FyZF9zZXR0aW5ncyhkZXYsIGxpbmssICZuZXdfbmFtZSk7CiAKIAlkZXYtPnBjbWNpYV9tYXAucGh5cyA9IE5PX1hJUDsKQEAgLTU3MSwxMCArNTY0LDcgQEAKIAlkZXYtPnBjbWNpYV9tYXAubWFwX3ByaXZfMSA9ICh1bnNpZ25lZCBsb25nKWRldjsKIAlkZXYtPnBjbWNpYV9tYXAubWFwX3ByaXZfMiA9ICh1bnNpZ25lZCBsb25nKWxpbmstPndpbjsKIAotCURFQlVHKDIsICJHZXR0aW5nIGNvbmZpZ3VyYXRpb24iKTsKLQlDU19DSEVDSyhHZXRDb25maWd1cmF0aW9uSW5mbywgcGNtY2lhX2dldF9jb25maWd1cmF0aW9uX2luZm8obGluaywgJnQpKTsKLQlERUJVRygyLCAiVmNjID0gJWQgVnBwMSA9ICVkIFZwcDIgPSAlZCIsIHQuVmNjLCB0LlZwcDEsIHQuVnBwMik7Ci0JZGV2LT52cHAgPSAodnBwKSA/IHZwcCA6IHQuVnBwMTsKKwlkZXYtPnZwcCA9ICh2cHApID8gdnBwIDogbGluay0+c29ja2V0LnNvY2tldC5WcHA7CiAJbGluay0+Y29uZi5BdHRyaWJ1dGVzID0gMDsKIAlpZihzZXR2cHAgPT0gMikgewogCQlsaW5rLT5jb25mLlZwcCA9IGRldi0+dnBwOwpAQCAtNTgzLDE2ICs1NzMsMTAgQEAKIAl9CiAKIAlsaW5rLT5jb25mLkludFR5cGUgPSBJTlRfTUVNT1JZOwotCWxpbmstPmNvbmYuQ29uZmlnQmFzZSA9IHQuQ29uZmlnQmFzZTsKLQlsaW5rLT5jb25mLlN0YXR1cyA9IHQuU3RhdHVzOwotCWxpbmstPmNvbmYuUGluID0gdC5QaW47Ci0JbGluay0+Y29uZi5Db3B5ID0gdC5Db3B5OwotCWxpbmstPmNvbmYuRXh0U3RhdHVzID0gdC5FeHRTdGF0dXM7CiAJbGluay0+Y29uZi5Db25maWdJbmRleCA9IDA7Ci0JbGluay0+Y29uZi5QcmVzZW50ID0gdC5QcmVzZW50OwogCURFQlVHKDIsICJTZXR0aW5nIENvbmZpZ3VyYXRpb24iKTsKIAlyZXQgPSBwY21jaWFfcmVxdWVzdF9jb25maWd1cmF0aW9uKGxpbmssICZsaW5rLT5jb25mKTsKLQlpZihyZXQgIT0gQ1NfU1VDQ0VTUykgeworCWlmIChyZXQgIT0gMCkgewogCQljc19lcnJvcihsaW5rLCBSZXF1ZXN0Q29uZmlndXJhdGlvbiwgcmV0KTsKIAkJaWYgKGRldi0+d2luX2Jhc2UpIHsKIAkJCWlvdW5tYXAoZGV2LT53aW5fYmFzZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9tYXBzL3BoeXNtYXBfb2YuYyBiL2RyaXZlcnMvbXRkL21hcHMvcGh5c21hcF9vZi5jCmluZGV4IDQ5YWNkNDEuLjVmY2ZlYzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL21hcHMvcGh5c21hcF9vZi5jCisrKyBiL2RyaXZlcnMvbXRkL21hcHMvcGh5c21hcF9vZi5jCkBAIC0yMzAsOCArMjMwLDcgQEAKIAogI2lmZGVmIENPTkZJR19NVERfT0ZfUEFSVFMKIAlpZiAoZXJyID09IDApIHsKLQkJZXJyID0gb2ZfbXRkX3BhcnNlX3BhcnRpdGlvbnMoJmRldi0+ZGV2LCBpbmZvLT5tdGQsCi0JCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRwLCAmaW5mby0+cGFydHMpOworCQllcnIgPSBvZl9tdGRfcGFyc2VfcGFydGl0aW9ucygmZGV2LT5kZXYsIGRwLCAmaW5mby0+cGFydHMpOwogCQlpZiAoZXJyIDwgMCkKIAkJCXJldHVybiBlcnI7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbWFwcy93YWxudXQuYyBiL2RyaXZlcnMvbXRkL21hcHMvd2FsbnV0LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUyNDM0NzYuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9tdGQvbWFwcy93YWxudXQuYworKysgL2Rldi9udWxsCkBAIC0xLDEyMiArMCwwIEBACi0vKgotICogTWFwcGluZyBmb3IgV2FsbnV0IGZsYXNoCi0gKiAodXNlZCBlYm9ueS5jIGFzIGEgImZyYW1ld29yayIpCi0gKgotICogSGVpa2tpIExpbmRob2xtIDxob2xpbmRob0BpbmZyYWRlYWQub3JnPgotICoKLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKLSAqIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgIExpY2Vuc2UsIG9yIChhdCB5b3VyCi0gKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9tdGQvbXRkLmg+Ci0jaW5jbHVkZSA8bGludXgvbXRkL21hcC5oPgotI2luY2x1ZGUgPGxpbnV4L210ZC9wYXJ0aXRpb25zLmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+Ci0jaW5jbHVkZSA8YXNtL2libTR4eC5oPgotI2luY2x1ZGUgPHBsYXRmb3Jtcy80eHgvd2FsbnV0Lmg+Ci0KLS8qIHRoZXNlIHNob3VsZCBiZSBpbiBwbGF0Zm9ybXMvNHh4L3dhbG51dC5oID8gKi8KLSNkZWZpbmUgV0FMTlVUX0ZMQVNIX09OQkRfTih4KQkJKHggJiAweDAyKQotI2RlZmluZSBXQUxOVVRfRkxBU0hfU1JBTV9TRUwoeCkJKHggJiAweDAxKQotI2RlZmluZSBXQUxOVVRfRkxBU0hfTE9XCQkweEZGRjAwMDAwCi0jZGVmaW5lIFdBTE5VVF9GTEFTSF9ISUdICQkweEZGRjgwMDAwCi0jZGVmaW5lIFdBTE5VVF9GTEFTSF9TSVpFCQkweDgwMDAwCi0KLXN0YXRpYyBzdHJ1Y3QgbXRkX2luZm8gKmZsYXNoOwotCi1zdGF0aWMgc3RydWN0IG1hcF9pbmZvIHdhbG51dF9tYXAgPSB7Ci0JLm5hbWUgPQkJIldhbG51dCBmbGFzaCIsCi0JLnNpemUgPQkJV0FMTlVUX0ZMQVNIX1NJWkUsCi0JLmJhbmt3aWR0aCA9CTEsCi19OwotCi0vKiBBY3R1YWxseSwgT3BlbkJJT1MgaXMgdGhlIGxhc3QgMTI4IEtpQiBvZiB0aGUgZmxhc2ggLSBiZXR0ZXIKLSAqIHBhcnRpdGlvbmluZyBjb3VsZCBiZSBtYWRlICovCi1zdGF0aWMgc3RydWN0IG10ZF9wYXJ0aXRpb24gd2FsbnV0X3BhcnRpdGlvbnNbXSA9IHsKLQl7Ci0JCS5uYW1lID0gICAiT3BlbkJJT1MiLAotCQkub2Zmc2V0ID0gMHgwLAotCQkuc2l6ZSA9ICAgV0FMTlVUX0ZMQVNIX1NJWkUsCi0JCS8qLm1hc2tfZmxhZ3MgPSBNVERfV1JJVEVBQkxFLCAqLyAvKiBmb3JjZSByZWFkLW9ubHkgKi8KLQl9Ci19OwotCi1pbnQgX19pbml0IGluaXRfd2FsbnV0KHZvaWQpCi17Ci0JdTggZnBnYV9icmRzMTsKLQl2b2lkICpmcGdhX2JyZHMxX2FkcjsKLQl2b2lkICpmcGdhX3N0YXR1c19hZHI7Ci0JdW5zaWduZWQgbG9uZyBmbGFzaF9iYXNlOwotCi0JLyogdGhpcyBzaG91bGQgYWxyZWFkeSBiZSBtYXBwZWQgKHBsYXRmb3JtLzR4eC93YWxudXQuYykgKi8KLQlmcGdhX3N0YXR1c19hZHIgPSBpb3JlbWFwKFdBTE5VVF9GUEdBX0JBU0UsIDgpOwotCWlmICghZnBnYV9zdGF0dXNfYWRyKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCWZwZ2FfYnJkczFfYWRyID0gZnBnYV9zdGF0dXNfYWRyKzU7Ci0JZnBnYV9icmRzMSA9IHJlYWRiKGZwZ2FfYnJkczFfYWRyKTsKLQkvKiBpb3VubWFwKGZwZ2Ffc3RhdHVzX2Fkcik7ICovCi0KLQlpZiAoV0FMTlVUX0ZMQVNIX09OQkRfTihmcGdhX2JyZHMxKSkgewotCQlwcmludGsoIlRoZSBvbi1ib2FyZCBmbGFzaCBpcyBkaXNhYmxlZCAoVTc5IHN3IDUpISIpOwotCQlpb3VubWFwKGZwZ2Ffc3RhdHVzX2Fkcik7Ci0JCXJldHVybiAtRUlPOwotCX0KLQlpZiAoV0FMTlVUX0ZMQVNIX1NSQU1fU0VMKGZwZ2FfYnJkczEpKQotCQlmbGFzaF9iYXNlID0gV0FMTlVUX0ZMQVNIX0xPVzsKLQllbHNlCi0JCWZsYXNoX2Jhc2UgPSBXQUxOVVRfRkxBU0hfSElHSDsKLQotCXdhbG51dF9tYXAucGh5cyA9IGZsYXNoX2Jhc2U7Ci0Jd2FsbnV0X21hcC52aXJ0ID0KLQkJKHZvaWQgX19pb21lbSAqKWlvcmVtYXAoZmxhc2hfYmFzZSwgd2FsbnV0X21hcC5zaXplKTsKLQotCWlmICghd2FsbnV0X21hcC52aXJ0KSB7Ci0JCXByaW50aygiRmFpbGVkIHRvIGlvcmVtYXAgZmxhc2guXG4iKTsKLQkJaW91bm1hcChmcGdhX3N0YXR1c19hZHIpOwotCQlyZXR1cm4gLUVJTzsKLQl9Ci0KLQlzaW1wbGVfbWFwX2luaXQoJndhbG51dF9tYXApOwotCi0JZmxhc2ggPSBkb19tYXBfcHJvYmUoImplZGVjX3Byb2JlIiwgJndhbG51dF9tYXApOwotCWlmIChmbGFzaCkgewotCQlmbGFzaC0+b3duZXIgPSBUSElTX01PRFVMRTsKLQkJYWRkX210ZF9wYXJ0aXRpb25zKGZsYXNoLCB3YWxudXRfcGFydGl0aW9ucywKLQkJCQkJQVJSQVlfU0laRSh3YWxudXRfcGFydGl0aW9ucykpOwotCX0gZWxzZSB7Ci0JCXByaW50aygibWFwIHByb2JlIGZhaWxlZCBmb3IgZmxhc2hcbiIpOwotCQlpb3VubWFwKGZwZ2Ffc3RhdHVzX2Fkcik7Ci0JCXJldHVybiAtRU5YSU87Ci0JfQotCi0JaW91bm1hcChmcGdhX3N0YXR1c19hZHIpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBfX2V4aXQgY2xlYW51cF93YWxudXQodm9pZCkKLXsKLQlpZiAoZmxhc2gpIHsKLQkJZGVsX210ZF9wYXJ0aXRpb25zKGZsYXNoKTsKLQkJbWFwX2Rlc3Ryb3koZmxhc2gpOwotCX0KLQotCWlmICh3YWxudXRfbWFwLnZpcnQpIHsKLQkJaW91bm1hcCgodm9pZCAqKXdhbG51dF9tYXAudmlydCk7Ci0JCXdhbG51dF9tYXAudmlydCA9IDA7Ci0JfQotfQotCi1tb2R1bGVfaW5pdChpbml0X3dhbG51dCk7Ci1tb2R1bGVfZXhpdChjbGVhbnVwX3dhbG51dCk7Ci0KLU1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLU1PRFVMRV9BVVRIT1IoIkhlaWtraSBMaW5kaG9sbSA8aG9saW5kaG9AaW5mcmFkZWFkLm9yZz4iKTsKLU1PRFVMRV9ERVNDUklQVElPTigiTVREIG1hcCBhbmQgcGFydGl0aW9ucyBmb3IgSUJNIDQwNUdQIFdhbG51dCBib2FyZHMiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL210ZGNoYXIuYyBiL2RyaXZlcnMvbXRkL210ZGNoYXIuYwppbmRleCBlMDBkNDI0Li45NjM4NDBlIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9tdGRjaGFyLmMKKysrIGIvZHJpdmVycy9tdGQvbXRkY2hhci5jCkBAIC0yNiwxMyArMjYsMTEgQEAKIAlpZiAoIW10ZCkKIAkJcmV0dXJuOwogCi0JZGV2aWNlX2NyZWF0ZV9kcnZkYXRhKG10ZF9jbGFzcywgTlVMTCwKLQkJCSAgICAgIE1LREVWKE1URF9DSEFSX01BSk9SLCBtdGQtPmluZGV4KjIpLAotCQkJICAgICAgTlVMTCwgIm10ZCVkIiwgbXRkLT5pbmRleCk7CisJZGV2aWNlX2NyZWF0ZShtdGRfY2xhc3MsIE5VTEwsIE1LREVWKE1URF9DSEFSX01BSk9SLCBtdGQtPmluZGV4KjIpLAorCQkgICAgICBOVUxMLCAibXRkJWQiLCBtdGQtPmluZGV4KTsKIAotCWRldmljZV9jcmVhdGVfZHJ2ZGF0YShtdGRfY2xhc3MsIE5VTEwsCi0JCQkgICAgICBNS0RFVihNVERfQ0hBUl9NQUpPUiwgbXRkLT5pbmRleCoyKzEpLAotCQkJICAgICAgTlVMTCwgIm10ZCVkcm8iLCBtdGQtPmluZGV4KTsKKwlkZXZpY2VfY3JlYXRlKG10ZF9jbGFzcywgTlVMTCwgTUtERVYoTVREX0NIQVJfTUFKT1IsIG10ZC0+aW5kZXgqMisxKSwKKwkJICAgICAgTlVMTCwgIm10ZCVkcm8iLCBtdGQtPmluZGV4KTsKIH0KIAogc3RhdGljIHZvaWQgbXRkX25vdGlmeV9yZW1vdmUoc3RydWN0IG10ZF9pbmZvKiBtdGQpCkBAIC0zNTAsNyArMzQ4LDcgQEAKIAl3YWtlX3VwKCh3YWl0X3F1ZXVlX2hlYWRfdCAqKWluc3RyLT5wcml2KTsKIH0KIAotI2lmIGRlZmluZWQoQ09ORklHX01URF9PVFApIHx8IGRlZmluZWQoQ09ORklHX01URF9PTkVOQU5EX09UUCkKKyNpZmRlZiBDT05GSUdfSEFWRV9NVERfT1RQCiBzdGF0aWMgaW50IG90cF9zZWxlY3RfZmlsZW1vZGUoc3RydWN0IG10ZF9maWxlX2luZm8gKm1maSwgaW50IG1vZGUpCiB7CiAJc3RydWN0IG10ZF9pbmZvICptdGQgPSBtZmktPm10ZDsKQEAgLTY2Nyw3ICs2NjUsNyBAQAogCQlicmVhazsKIAl9CiAKLSNpZiBkZWZpbmVkKENPTkZJR19NVERfT1RQKSB8fCBkZWZpbmVkKENPTkZJR19NVERfT05FTkFORF9PVFApCisjaWZkZWYgQ09ORklHX0hBVkVfTVREX09UUAogCWNhc2UgT1RQU0VMRUNUOgogCXsKIAkJaW50IG1vZGU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9tdGRjb25jYXQuYyBiL2RyaXZlcnMvbXRkL210ZGNvbmNhdC5jCmluZGV4IDI5NzJhNWUuLjc4OTg0MmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL210ZGNvbmNhdC5jCisrKyBiL2RyaXZlcnMvbXRkL210ZGNvbmNhdC5jCkBAIC00NDQsNyArNDQ0LDcgQEAKIAkJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCWluc3RyLT5mYWlsX2FkZHIgPSAweGZmZmZmZmZmOworCWluc3RyLT5mYWlsX2FkZHIgPSBNVERfRkFJTF9BRERSX1VOS05PV047CiAKIAkvKiBtYWtlIGEgbG9jYWwgY29weSBvZiBpbnN0ciB0byBhdm9pZCBtb2RpZnlpbmcgdGhlIGNhbGxlcidzIHN0cnVjdCAqLwogCWVyYXNlID0ga21hbGxvYyhzaXplb2YgKHN0cnVjdCBlcmFzZV9pbmZvKSwgR0ZQX0tFUk5FTCk7CkBAIC00OTMsNyArNDkzLDcgQEAKIAkJCS8qIHNhbml0eSBjaGVjazogc2hvdWxkIG5ldmVyIGhhcHBlbiBzaW5jZQogCQkJICogYmxvY2sgYWxpZ25tZW50IGhhcyBiZWVuIGNoZWNrZWQgYWJvdmUgKi8KIAkJCUJVR19PTihlcnIgPT0gLUVJTlZBTCk7Ci0JCQlpZiAoZXJhc2UtPmZhaWxfYWRkciAhPSAweGZmZmZmZmZmKQorCQkJaWYgKGVyYXNlLT5mYWlsX2FkZHIgIT0gTVREX0ZBSUxfQUREUl9VTktOT1dOKQogCQkJCWluc3RyLT5mYWlsX2FkZHIgPSBlcmFzZS0+ZmFpbF9hZGRyICsgb2Zmc2V0OwogCQkJYnJlYWs7CiAJCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL210ZG9vcHMuYyBiL2RyaXZlcnMvbXRkL210ZG9vcHMuYwppbmRleCA1YTY4MGUxLi5hZWJiM2IyIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9tdGRvb3BzLmMKKysrIGIvZHJpdmVycy9tdGQvbXRkb29wcy5jCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvbXRkL210ZC5oPgogCisjZGVmaW5lIE1URE9PUFNfS0VSTk1TR19NQUdJQyAweDVkMDA1ZDAwCiAjZGVmaW5lIE9PUFNfUEFHRV9TSVpFIDQwOTYKIAogc3RhdGljIHN0cnVjdCBtdGRvb3BzX2NvbnRleHQgewpAQCAtOTksNyArMTAwLDcgQEAKIAlpbnQgcmV0OwogCiAJY3h0LT5uZXh0cGFnZSsrOwotCWlmIChjeHQtPm5leHRwYWdlID4gY3h0LT5vb3BzX3BhZ2VzKQorCWlmIChjeHQtPm5leHRwYWdlID49IGN4dC0+b29wc19wYWdlcykKIAkJY3h0LT5uZXh0cGFnZSA9IDA7CiAJY3h0LT5uZXh0Y291bnQrKzsKIAlpZiAoY3h0LT5uZXh0Y291bnQgPT0gMHhmZmZmZmZmZikKQEAgLTE0MSw3ICsxNDIsNyBAQAogCW1vZCA9IChjeHQtPm5leHRwYWdlICogT09QU19QQUdFX1NJWkUpICUgbXRkLT5lcmFzZXNpemU7CiAJaWYgKG1vZCAhPSAwKSB7CiAJCWN4dC0+bmV4dHBhZ2UgPSBjeHQtPm5leHRwYWdlICsgKChtdGQtPmVyYXNlc2l6ZSAtIG1vZCkgLyBPT1BTX1BBR0VfU0laRSk7Ci0JCWlmIChjeHQtPm5leHRwYWdlID4gY3h0LT5vb3BzX3BhZ2VzKQorCQlpZiAoY3h0LT5uZXh0cGFnZSA+PSBjeHQtPm9vcHNfcGFnZXMpCiAJCQljeHQtPm5leHRwYWdlID0gMDsKIAl9CiAKQEAgLTE1OCw3ICsxNTksNyBAQAogCQkJCWN4dC0+bmV4dHBhZ2UgKiBPT1BTX1BBR0VfU0laRSk7CiAJCWkrKzsKIAkJY3h0LT5uZXh0cGFnZSA9IGN4dC0+bmV4dHBhZ2UgKyAobXRkLT5lcmFzZXNpemUgLyBPT1BTX1BBR0VfU0laRSk7Ci0JCWlmIChjeHQtPm5leHRwYWdlID4gY3h0LT5vb3BzX3BhZ2VzKQorCQlpZiAoY3h0LT5uZXh0cGFnZSA+PSBjeHQtPm9vcHNfcGFnZXMpCiAJCQljeHQtPm5leHRwYWdlID0gMDsKIAkJaWYgKGkgPT0gKGN4dC0+b29wc19wYWdlcyAvIChtdGQtPmVyYXNlc2l6ZSAvIE9PUFNfUEFHRV9TSVpFKSkpIHsKIAkJCXByaW50ayhLRVJOX0VSUiAibXRkb29wczogQWxsIGJsb2NrcyBiYWQhXG4iKTsKQEAgLTIyNCw0MCArMjI1LDQwIEBACiB7CiAJc3RydWN0IG10ZF9pbmZvICptdGQgPSBjeHQtPm10ZDsKIAlpbnQgcmV0LCBwYWdlLCBtYXhwb3MgPSAwOwotCXUzMiBjb3VudCwgbWF4Y291bnQgPSAweGZmZmZmZmZmOworCXUzMiBjb3VudFsyXSwgbWF4Y291bnQgPSAweGZmZmZmZmZmOwogCXNpemVfdCByZXRsZW47CiAKIAlmb3IgKHBhZ2UgPSAwOyBwYWdlIDwgY3h0LT5vb3BzX3BhZ2VzOyBwYWdlKyspIHsKLQkJcmV0ID0gbXRkLT5yZWFkKG10ZCwgcGFnZSAqIE9PUFNfUEFHRV9TSVpFLCA0LCAmcmV0bGVuLCAodV9jaGFyICopICZjb3VudCk7Ci0JCWlmICgocmV0bGVuICE9IDQpIHx8ICgocmV0IDwgMCkgJiYgKHJldCAhPSAtRVVDTEVBTikpKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgIm10ZG9vcHM6IFJlYWQgZmFpbHVyZSBhdCAlZCAoJXRkIG9mIDQgcmVhZCkiCisJCXJldCA9IG10ZC0+cmVhZChtdGQsIHBhZ2UgKiBPT1BTX1BBR0VfU0laRSwgOCwgJnJldGxlbiwgKHVfY2hhciAqKSAmY291bnRbMF0pOworCQlpZiAoKHJldGxlbiAhPSA4KSB8fCAoKHJldCA8IDApICYmIChyZXQgIT0gLUVVQ0xFQU4pKSkgeworCQkJcHJpbnRrKEtFUk5fRVJSICJtdGRvb3BzOiBSZWFkIGZhaWx1cmUgYXQgJWQgKCV0ZCBvZiA4IHJlYWQpIgogCQkJCSIsIGVyciAlZC5cbiIsIHBhZ2UgKiBPT1BTX1BBR0VfU0laRSwgcmV0bGVuLCByZXQpOwogCQkJY29udGludWU7CiAJCX0KIAotCQlpZiAoY291bnQgPT0gMHhmZmZmZmZmZikKKwkJaWYgKGNvdW50WzFdICE9IE1URE9PUFNfS0VSTk1TR19NQUdJQykKKwkJCWNvbnRpbnVlOworCQlpZiAoY291bnRbMF0gPT0gMHhmZmZmZmZmZikKIAkJCWNvbnRpbnVlOwogCQlpZiAobWF4Y291bnQgPT0gMHhmZmZmZmZmZikgewotCQkJbWF4Y291bnQgPSBjb3VudDsKKwkJCW1heGNvdW50ID0gY291bnRbMF07CiAJCQltYXhwb3MgPSBwYWdlOwotCQl9IGVsc2UgaWYgKChjb3VudCA8IDB4NDAwMDAwMDApICYmIChtYXhjb3VudCA+IDB4YzAwMDAwMDApKSB7Ci0JCQltYXhjb3VudCA9IGNvdW50OworCQl9IGVsc2UgaWYgKChjb3VudFswXSA8IDB4NDAwMDAwMDApICYmIChtYXhjb3VudCA+IDB4YzAwMDAwMDApKSB7CisJCQltYXhjb3VudCA9IGNvdW50WzBdOwogCQkJbWF4cG9zID0gcGFnZTsKLQkJfSBlbHNlIGlmICgoY291bnQgPiBtYXhjb3VudCkgJiYgKGNvdW50IDwgMHhjMDAwMDAwMCkpIHsKLQkJCW1heGNvdW50ID0gY291bnQ7CisJCX0gZWxzZSBpZiAoKGNvdW50WzBdID4gbWF4Y291bnQpICYmIChjb3VudFswXSA8IDB4YzAwMDAwMDApKSB7CisJCQltYXhjb3VudCA9IGNvdW50WzBdOwogCQkJbWF4cG9zID0gcGFnZTsKLQkJfSBlbHNlIGlmICgoY291bnQgPiBtYXhjb3VudCkgJiYgKGNvdW50ID4gMHhjMDAwMDAwMCkKKwkJfSBlbHNlIGlmICgoY291bnRbMF0gPiBtYXhjb3VudCkgJiYgKGNvdW50WzBdID4gMHhjMDAwMDAwMCkKIAkJCQkJJiYgKG1heGNvdW50ID4gMHg4MDAwMDAwMCkpIHsKLQkJCW1heGNvdW50ID0gY291bnQ7CisJCQltYXhjb3VudCA9IGNvdW50WzBdOwogCQkJbWF4cG9zID0gcGFnZTsKIAkJfQogCX0KIAlpZiAobWF4Y291bnQgPT0gMHhmZmZmZmZmZikgewogCQljeHQtPm5leHRwYWdlID0gMDsKIAkJY3h0LT5uZXh0Y291bnQgPSAxOwotCQljeHQtPnJlYWR5ID0gMTsKLQkJcHJpbnRrKEtFUk5fREVCVUcgIm10ZG9vcHM6IFJlYWR5ICVkLCAlZCAoZmlyc3QgaW5pdClcbiIsCi0JCQkJY3h0LT5uZXh0cGFnZSwgY3h0LT5uZXh0Y291bnQpOworCQlzY2hlZHVsZV93b3JrKCZjeHQtPndvcmtfZXJhc2UpOwogCQlyZXR1cm47CiAJfQogCkBAIC0zNTgsOCArMzU5LDkgQEAKIAogCWlmIChjeHQtPndyaXRlY291bnQgPT0gMCkgewogCQl1MzIgKnN0YW1wID0gY3h0LT5vb3BzX2J1ZjsKLQkJKnN0YW1wID0gY3h0LT5uZXh0Y291bnQ7Ci0JCWN4dC0+d3JpdGVjb3VudCA9IDQ7CisJCSpzdGFtcCsrID0gY3h0LT5uZXh0Y291bnQ7CisJCSpzdGFtcCA9IE1URE9PUFNfS0VSTk1TR19NQUdJQzsKKwkJY3h0LT53cml0ZWNvdW50ID0gODsKIAl9CiAKIAlpZiAoKGNvdW50ICsgY3h0LT53cml0ZWNvdW50KSA+IE9PUFNfUEFHRV9TSVpFKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbXRkcGFydC5jIGIvZHJpdmVycy9tdGQvbXRkcGFydC5jCmluZGV4IGVkYjkwYjUuLjM3Mjg5MTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL210ZHBhcnQuYworKysgYi9kcml2ZXJzL210ZC9tdGRwYXJ0LmMKQEAgLTIxNCw3ICsyMTQsNyBAQAogCWluc3RyLT5hZGRyICs9IHBhcnQtPm9mZnNldDsKIAlyZXQgPSBwYXJ0LT5tYXN0ZXItPmVyYXNlKHBhcnQtPm1hc3RlciwgaW5zdHIpOwogCWlmIChyZXQpIHsKLQkJaWYgKGluc3RyLT5mYWlsX2FkZHIgIT0gMHhmZmZmZmZmZikKKwkJaWYgKGluc3RyLT5mYWlsX2FkZHIgIT0gTVREX0ZBSUxfQUREUl9VTktOT1dOKQogCQkJaW5zdHItPmZhaWxfYWRkciAtPSBwYXJ0LT5vZmZzZXQ7CiAJCWluc3RyLT5hZGRyIC09IHBhcnQtPm9mZnNldDsKIAl9CkBAIC0yMjYsNyArMjI2LDcgQEAKIAlpZiAoaW5zdHItPm10ZC0+ZXJhc2UgPT0gcGFydF9lcmFzZSkgewogCQlzdHJ1Y3QgbXRkX3BhcnQgKnBhcnQgPSBQQVJUKGluc3RyLT5tdGQpOwogCi0JCWlmIChpbnN0ci0+ZmFpbF9hZGRyICE9IDB4ZmZmZmZmZmYpCisJCWlmIChpbnN0ci0+ZmFpbF9hZGRyICE9IE1URF9GQUlMX0FERFJfVU5LTk9XTikKIAkJCWluc3RyLT5mYWlsX2FkZHIgLT0gcGFydC0+b2Zmc2V0OwogCQlpbnN0ci0+YWRkciAtPSBwYXJ0LT5vZmZzZXQ7CiAJfQpAQCAtNTY0LDEwICs1NjQsOCBAQAogCiAJZm9yICggOyByZXQgPD0gMCAmJiAqdHlwZXM7IHR5cGVzKyspIHsKIAkJcGFyc2VyID0gZ2V0X3BhcnRpdGlvbl9wYXJzZXIoKnR5cGVzKTsKLSNpZmRlZiBDT05GSUdfS01PRAogCQlpZiAoIXBhcnNlciAmJiAhcmVxdWVzdF9tb2R1bGUoIiVzIiwgKnR5cGVzKSkKIAkJCQlwYXJzZXIgPSBnZXRfcGFydGl0aW9uX3BhcnNlcigqdHlwZXMpOwotI2VuZGlmCiAJCWlmICghcGFyc2VyKSB7CiAJCQlwcmludGsoS0VSTl9OT1RJQ0UgIiVzIHBhcnRpdGlvbiBwYXJzaW5nIG5vdCBhdmFpbGFibGVcbiIsCiAJCQkgICAgICAgKnR5cGVzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL25hbmQvS2NvbmZpZyBiL2RyaXZlcnMvbXRkL25hbmQvS2NvbmZpZwppbmRleCA0MWYzNjFjLi4xYzJlOTQ1IDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9uYW5kL0tjb25maWcKKysrIGIvZHJpdmVycy9tdGQvbmFuZC9LY29uZmlnCkBAIC01Niw2ICs1NiwxMiBAQAogCWhlbHAKIAkgIFRoaXMgZW5hYmxlcyB0aGUgZHJpdmVyIGZvciB0aGUgaVBBUSBoMTkwMCBmbGFzaC4KIAorY29uZmlnIE1URF9OQU5EX0dQSU8KKwl0cmlzdGF0ZSAiR1BJTyBOQU5EIEZsYXNoIGRyaXZlciIKKwlkZXBlbmRzIG9uIEdFTkVSSUNfR1BJTyAmJiBBUk0KKwloZWxwCisJICBUaGlzIGVuYWJsZXMgYSBHUElPIGJhc2VkIE5BTkQgZmxhc2ggZHJpdmVyLgorCiBjb25maWcgTVREX05BTkRfU1BJQQogCXRyaXN0YXRlICJOQU5EIEZsYXNoIGRldmljZSBvbiBTUElBIGJvYXJkIgogCWRlcGVuZHMgb24gQVJDSF9QNzIwVApAQCAtNjgsMTIgKzc0LDYgQEAKIAloZWxwCiAJICBTdXBwb3J0IGZvciBOQU5EIGZsYXNoIG9uIEFtc3RyYWQgRTMgKERlbHRhKS4KIAotY29uZmlnIE1URF9OQU5EX1RPVE8KLQl0cmlzdGF0ZSAiTkFORCBGbGFzaCBkZXZpY2Ugb24gVE9UTyBib2FyZCIKLQlkZXBlbmRzIG9uIEFSQ0hfT01BUCAmJiBCUk9LRU4KLQloZWxwCi0JICBTdXBwb3J0IGZvciBOQU5EIGZsYXNoIG9uIFRleGFzIEluc3RydW1lbnRzIFRvdG8gcGxhdGZvcm0uCi0KIGNvbmZpZyBNVERfTkFORF9UUzcyNTAKIAl0cmlzdGF0ZSAiTkFORCBGbGFzaCBkZXZpY2Ugb24gVFMtNzI1MCBib2FyZCIKIAlkZXBlbmRzIG9uIE1BQ0hfVFM3MlhYCkBAIC0xNjMsMTMgKzE2Myw2IEBACiAJICBpbmNvcnJlY3QgRUNDIGdlbmVyYXRpb24sIGFuZCBpZiB1c2luZyB0aGVzZSwgdGhlIGRlZmF1bHQgb2YKIAkgIHNvZnR3YXJlIEVDQyBpcyBwcmVmZXJhYmxlLgogCi1jb25maWcgTVREX05BTkRfTkRGQwotCXRyaXN0YXRlICJOREZDIE5hbkQgRmxhc2ggQ29udHJvbGxlciIKLQlkZXBlbmRzIG9uIDR4eCAmJiAhUFBDX01FUkdFCi0Jc2VsZWN0IE1URF9OQU5EX0VDQ19TTUMKLQloZWxwCi0JIE5ERkMgTmFuZCBGbGFzaCBDb250cm9sbGVycyBhcmUgaW50ZWdyYXRlZCBpbiBJQk0vQU1DQydzIDR4eCBTb0NzCi0KIGNvbmZpZyBNVERfTkFORF9TM0MyNDEwX0NMS1NUT1AKIAlib29sICJTM0MyNDEwIE5BTkQgSURMRSBjbG9jayBzdG9wIgogCWRlcGVuZHMgb24gTVREX05BTkRfUzNDMjQxMApAQCAtMzQwLDYgKzMzMywxMyBAQAogCSAgVGhpcyBlbmFibGVzIHRoZSBkcml2ZXIgZm9yIHRoZSBOQU5EIGZsYXNoIGRldmljZSBmb3VuZCBvbgogCSAgUFhBM3h4IHByb2Nlc3NvcnMKIAorY29uZmlnIE1URF9OQU5EX1BYQTN4eF9CVUlMVElOCisJYm9vbCAiVXNlIGJ1aWx0aW4gZGVmaW5pdGlvbnMgZm9yIHNvbWUgTkFORCBjaGlwcyAoZGVwcmVjYXRlZCkiCisJZGVwZW5kcyBvbiBNVERfTkFORF9QWEEzeHgKKwloZWxwCisJICBUaGlzIGVuYWJsZXMgYnVpbHRpbiBkZWZpbml0aW9ucyBmb3Igc29tZSBOQU5EIGNoaXBzLiBUaGlzCisJICBpcyBkZXByZWNhdGVkIGluIGZhdm9yIG9mIHBsYXRmb3JtIHNwZWNpZmljIGRhdGEuCisKIGNvbmZpZyBNVERfTkFORF9DTV9YMjcwCiAJdHJpc3RhdGUgIlN1cHBvcnQgZm9yIE5BTkQgRmxhc2ggb24gQ00tWDI3MCBtb2R1bGVzIgogCWRlcGVuZHMgb24gTVREX05BTkQgJiYgTUFDSF9BUk1DT1JFCkBAIC00MDAsMTAgKzQwMCwyNCBAQAogCiBjb25maWcgTVREX05BTkRfRlNMX1VQTQogCXRyaXN0YXRlICJTdXBwb3J0IGZvciBOQU5EIG9uIEZyZWVzY2FsZSBVUE0iCi0JZGVwZW5kcyBvbiBNVERfTkFORCAmJiBPRl9HUElPICYmIChQUENfODN4eCB8fCBQUENfODV4eCkKKwlkZXBlbmRzIG9uIE1URF9OQU5EICYmIChQUENfODN4eCB8fCBQUENfODV4eCkKIAlzZWxlY3QgRlNMX0xCQwogCWhlbHAKIAkgIEVuYWJsZXMgc3VwcG9ydCBmb3IgTkFORCBGbGFzaCBjaGlwcyB3aXJlZCBvbnRvIEZyZWVzY2FsZSBQb3dlclBDCiAJICBwcm9jZXNzb3IgbG9jYWxidXMgd2l0aCBVc2VyLVByb2dyYW1tYWJsZSBNYWNoaW5lIHN1cHBvcnQuCiAKK2NvbmZpZyBNVERfTkFORF9NWEMKKwl0cmlzdGF0ZSAiTVhDIE5BTkQgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIEFSQ0hfTVgyCisJaGVscAorCSAgVGhpcyBlbmFibGVzIHRoZSBkcml2ZXIgZm9yIHRoZSBOQU5EIGZsYXNoIGNvbnRyb2xsZXIgb24gdGhlCisJICBNWEMgcHJvY2Vzc29ycy4KKworY29uZmlnIE1URF9OQU5EX1NIX0ZMQ1RMCisJdHJpc3RhdGUgIlN1cHBvcnQgZm9yIE5BTkQgb24gUmVuZXNhcyBTdXBlckggRkxDVEwiCisJZGVwZW5kcyBvbiBNVERfTkFORCAmJiBTVVBFUkggJiYgQ1BVX1NVQlRZUEVfU0g3NzIzCisJaGVscAorCSAgU2V2ZXJhbCBSZW5lc2FzIFN1cGVySCBDUFUgaGFzIEZMQ1RMLiBUaGlzIG9wdGlvbiBlbmFibGVzIHN1cHBvcnQKKwkgIGZvciBOQU5EIEZsYXNoIHVzaW5nIEZMQ1RMLiBUaGlzIGRyaXZlciBzdXBwb3J0IFNINzcyMy4KKwogZW5kaWYgIyBNVERfTkFORApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbmFuZC9NYWtlZmlsZSBiL2RyaXZlcnMvbXRkL25hbmQvTWFrZWZpbGUKaW5kZXggYjc4NmM1ZC4uYjY2MTU4NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbmFuZC9NYWtlZmlsZQorKysgYi9kcml2ZXJzL210ZC9uYW5kL01ha2VmaWxlCkBAIC04LDcgKzgsNiBAQAogb2JqLSQoQ09ORklHX01URF9OQU5EX0NBRkUpCQkrPSBjYWZlX25hbmQubwogb2JqLSQoQ09ORklHX01URF9OQU5EX1NQSUEpCQkrPSBzcGlhLm8KIG9iai0kKENPTkZJR19NVERfTkFORF9BTVNfREVMVEEpCSs9IGFtcy1kZWx0YS5vCi1vYmotJChDT05GSUdfTVREX05BTkRfVE9UTykJCSs9IHRvdG8ubwogb2JqLSQoQ09ORklHX01URF9OQU5EX0FVVENQVTEyKQkJKz0gYXV0Y3B1MTIubwogb2JqLSQoQ09ORklHX01URF9OQU5EX0VEQjczMTIpCQkrPSBlZGI3MzEyLm8KIG9iai0kKENPTkZJR19NVERfTkFORF9BVTE1NTApCQkrPSBhdTE1NTBuZC5vCkBAIC0yNCw2ICsyMyw3IEBACiBvYmotJChDT05GSUdfTVREX05BTkRfQ1M1NTNYKQkJKz0gY3M1NTN4X25hbmQubwogb2JqLSQoQ09ORklHX01URF9OQU5EX05ERkMpCQkrPSBuZGZjLm8KIG9iai0kKENPTkZJR19NVERfTkFORF9BVE1FTCkJCSs9IGF0bWVsX25hbmQubworb2JqLSQoQ09ORklHX01URF9OQU5EX0dQSU8pCQkrPSBncGlvLm8KIG9iai0kKENPTkZJR19NVERfTkFORF9DTV9YMjcwKQkJKz0gY214MjcwX25hbmQubwogb2JqLSQoQ09ORklHX01URF9OQU5EX0JBU0xFUl9FWENJVEUpCSs9IGV4Y2l0ZV9uYW5kZmxhc2gubwogb2JqLSQoQ09ORklHX01URF9OQU5EX1BYQTN4eCkJCSs9IHB4YTN4eF9uYW5kLm8KQEAgLTM0LDUgKzM0LDcgQEAKIG9iai0kKENPTkZJR19NVERfTkFORF9PUklPTikJCSs9IG9yaW9uX25hbmQubwogb2JqLSQoQ09ORklHX01URF9OQU5EX0ZTTF9FTEJDKQkJKz0gZnNsX2VsYmNfbmFuZC5vCiBvYmotJChDT05GSUdfTVREX05BTkRfRlNMX1VQTSkJCSs9IGZzbF91cG0ubworb2JqLSQoQ09ORklHX01URF9OQU5EX1NIX0ZMQ1RMKQkJKz0gc2hfZmxjdGwubworb2JqLSQoQ09ORklHX01URF9OQU5EX01YQykJCSs9IG14Y19uYW5kLm8KIAogbmFuZC1vYmpzIDo9IG5hbmRfYmFzZS5vIG5hbmRfYmJ0Lm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL25hbmQvYWxhdWRhLmMgYi9kcml2ZXJzL210ZC9uYW5kL2FsYXVkYS5jCmluZGV4IDI1NzkzN2MuLjk2MjM4MDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL25hbmQvYWxhdWRhLmMKKysrIGIvZHJpdmVycy9tdGQvbmFuZC9hbGF1ZGEuYwpAQCAtNjkxLDcgKzY5MSw3IEBACiAJYWxbMF0ucG9ydCA9IEFMQVVEQV9QT1JUX1hEOwogCWFsWzFdLnBvcnQgPSBBTEFVREFfUE9SVF9TTTsKIAotCWluZm8oImFsYXVkYSBwcm9iZWQiKTsKKwlkZXZfaW5mbygmaW50ZXJmYWNlLT5kZXYsICJhbGF1ZGEgcHJvYmVkXG4iKTsKIAlhbGF1ZGFfY2hlY2tfbWVkaWEoYWwpOwogCWFsYXVkYV9jaGVja19tZWRpYShhbCsxKTsKIApAQCAtNzE2LDcgKzcxNiw3IEBACiAJaWYgKGFsKQogCQlrcmVmX3B1dCgmYWwtPmtyZWYsIGFsYXVkYV9kZWxldGUpOwogCi0JaW5mbygiYWxhdWRhIGdvbmUiKTsKKwlkZXZfaW5mbygmaW50ZXJmYWNlLT5kZXYsICJhbGF1ZGEgZ29uZSIpOwogfQogCiBzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgYWxhdWRhX2RyaXZlciA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL25hbmQvYW1zLWRlbHRhLmMgYi9kcml2ZXJzL210ZC9uYW5kL2Ftcy1kZWx0YS5jCmluZGV4IDI2ZDQyOTguLjc4Mjk5NGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL25hbmQvYW1zLWRlbHRhLmMKKysrIGIvZHJpdmVycy9tdGQvbmFuZC9hbXMtZGVsdGEuYwpAQCAtMTQ1LDcgKzE0NSw3IEBACiAKIHN0YXRpYyBpbnQgYW1zX2RlbHRhX25hbmRfcmVhZHkoc3RydWN0IG10ZF9pbmZvICptdGQpCiB7Ci0JcmV0dXJuIG9tYXBfZ2V0X2dwaW9fZGF0YWluKEFNU19ERUxUQV9HUElPX1BJTl9OQU5EX1JCKTsKKwlyZXR1cm4gZ3Bpb19nZXRfdmFsdWUoQU1TX0RFTFRBX0dQSU9fUElOX05BTkRfUkIpOwogfQogCiAvKgpAQCAtMTg1LDcgKzE4NSw3IEBACiAJdGhpcy0+cmVhZF9idWYgPSBhbXNfZGVsdGFfcmVhZF9idWY7CiAJdGhpcy0+dmVyaWZ5X2J1ZiA9IGFtc19kZWx0YV92ZXJpZnlfYnVmOwogCXRoaXMtPmNtZF9jdHJsID0gYW1zX2RlbHRhX2h3Y29udHJvbDsKLQlpZiAoIW9tYXBfcmVxdWVzdF9ncGlvKEFNU19ERUxUQV9HUElPX1BJTl9OQU5EX1JCKSkgeworCWlmIChncGlvX3JlcXVlc3QoQU1TX0RFTFRBX0dQSU9fUElOX05BTkRfUkIsICJuYW5kX3JkeSIpID09IDApIHsKIAkJdGhpcy0+ZGV2X3JlYWR5ID0gYW1zX2RlbHRhX25hbmRfcmVhZHk7CiAJfSBlbHNlIHsKIAkJdGhpcy0+ZGV2X3JlYWR5ID0gTlVMTDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL25hbmQvYXRtZWxfbmFuZC5jIGIvZHJpdmVycy9tdGQvbmFuZC9hdG1lbF9uYW5kLmMKaW5kZXggMzM4N2UwZC4uYzk4YzE1NzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL25hbmQvYXRtZWxfbmFuZC5jCisrKyBiL2RyaXZlcnMvbXRkL25hbmQvYXRtZWxfbmFuZC5jCkBAIC0xNzQsNDggKzE3NCw2IEBACiB9CiAKIC8qCi0gKiB3cml0ZSBvb2IgZm9yIHNtYWxsIHBhZ2VzCi0gKi8KLXN0YXRpYyBpbnQgYXRtZWxfbmFuZF93cml0ZV9vb2JfNTEyKHN0cnVjdCBtdGRfaW5mbyAqbXRkLAotCQlzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwLCBpbnQgcGFnZSkKLXsKLQlpbnQgY2h1bmsgPSBjaGlwLT5lY2MuYnl0ZXMgKyBjaGlwLT5lY2MucHJlcGFkICsgY2hpcC0+ZWNjLnBvc3RwYWQ7Ci0JaW50IGVjY3NpemUgPSBjaGlwLT5lY2Muc2l6ZSwgbGVuZ3RoID0gbXRkLT5vb2JzaXplOwotCWludCBsZW4sIHBvcywgc3RhdHVzID0gMDsKLQljb25zdCB1aW50OF90ICpidWZwb2kgPSBjaGlwLT5vb2JfcG9pOwotCi0JcG9zID0gZWNjc2l6ZSArIGNodW5rOwotCi0JY2hpcC0+Y21kZnVuYyhtdGQsIE5BTkRfQ01EX1NFUUlOLCBwb3MsIHBhZ2UpOwotCWxlbiA9IG1pbl90KGludCwgbGVuZ3RoLCBjaHVuayk7Ci0JY2hpcC0+d3JpdGVfYnVmKG10ZCwgYnVmcG9pLCBsZW4pOwotCWJ1ZnBvaSArPSBsZW47Ci0JbGVuZ3RoIC09IGxlbjsKLQlpZiAobGVuZ3RoID4gMCkKLQkJY2hpcC0+d3JpdGVfYnVmKG10ZCwgYnVmcG9pLCBsZW5ndGgpOwotCi0JY2hpcC0+Y21kZnVuYyhtdGQsIE5BTkRfQ01EX1BBR0VQUk9HLCAtMSwgLTEpOwotCXN0YXR1cyA9IGNoaXAtPndhaXRmdW5jKG10ZCwgY2hpcCk7Ci0KLQlyZXR1cm4gc3RhdHVzICYgTkFORF9TVEFUVVNfRkFJTCA/IC1FSU8gOiAwOwotCi19Ci0KLS8qCi0gKiByZWFkIG9vYiBmb3Igc21hbGwgcGFnZXMKLSAqLwotc3RhdGljIGludCBhdG1lbF9uYW5kX3JlYWRfb29iXzUxMihzdHJ1Y3QgbXRkX2luZm8gKm10ZCwKLQkJc3RydWN0IG5hbmRfY2hpcCAqY2hpcCwJaW50IHBhZ2UsIGludCBzbmRjbWQpCi17Ci0JaWYgKHNuZGNtZCkgewotCQljaGlwLT5jbWRmdW5jKG10ZCwgTkFORF9DTURfUkVBRE9PQiwgMCwgcGFnZSk7Ci0JCXNuZGNtZCA9IDA7Ci0JfQotCWNoaXAtPnJlYWRfYnVmKG10ZCwgY2hpcC0+b29iX3BvaSwgbXRkLT5vb2JzaXplKTsKLQlyZXR1cm4gc25kY21kOwotfQotCi0vKgogICogQ2FsY3VsYXRlIEhXIEVDQwogICoKICAqIGZ1bmN0aW9uIGNhbGxlZCBhZnRlciBhIHdyaXRlCkBAIC0yMzUsMTQgKzE5MywxNCBAQAogCS8qIGdldCB0aGUgZmlyc3QgMiBFQ0MgYnl0ZXMgKi8KIAllY2NfdmFsdWUgPSBlY2NfcmVhZGwoaG9zdC0+ZWNjLCBQUik7CiAKLQllY2NfY29kZVtlY2Nwb3NbMF1dID0gZWNjX3ZhbHVlICYgMHhGRjsKLQllY2NfY29kZVtlY2Nwb3NbMV1dID0gKGVjY192YWx1ZSA+PiA4KSAmIDB4RkY7CisJZWNjX2NvZGVbMF0gPSBlY2NfdmFsdWUgJiAweEZGOworCWVjY19jb2RlWzFdID0gKGVjY192YWx1ZSA+PiA4KSAmIDB4RkY7CiAKIAkvKiBnZXQgdGhlIGxhc3QgMiBFQ0MgYnl0ZXMgKi8KIAllY2NfdmFsdWUgPSBlY2NfcmVhZGwoaG9zdC0+ZWNjLCBOUFIpICYgQVRNRUxfRUNDX05QQVJJVFk7CiAKLQllY2NfY29kZVtlY2Nwb3NbMl1dID0gZWNjX3ZhbHVlICYgMHhGRjsKLQllY2NfY29kZVtlY2Nwb3NbM11dID0gKGVjY192YWx1ZSA+PiA4KSAmIDB4RkY7CisJZWNjX2NvZGVbMl0gPSBlY2NfdmFsdWUgJiAweEZGOworCWVjY19jb2RlWzNdID0gKGVjY192YWx1ZSA+PiA4KSAmIDB4RkY7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTQ3NiwxNCArNDM0LDEyIEBACiAJCQlyZXMgPSAtRUlPOwogCQkJZ290byBlcnJfZWNjX2lvcmVtYXA7CiAJCX0KLQkJbmFuZF9jaGlwLT5lY2MubW9kZSA9IE5BTkRfRUNDX0hXX1NZTkRST01FOworCQluYW5kX2NoaXAtPmVjYy5tb2RlID0gTkFORF9FQ0NfSFc7CiAJCW5hbmRfY2hpcC0+ZWNjLmNhbGN1bGF0ZSA9IGF0bWVsX25hbmRfY2FsY3VsYXRlOwogCQluYW5kX2NoaXAtPmVjYy5jb3JyZWN0ID0gYXRtZWxfbmFuZF9jb3JyZWN0OwogCQluYW5kX2NoaXAtPmVjYy5od2N0bCA9IGF0bWVsX25hbmRfaHdjdGw7CiAJCW5hbmRfY2hpcC0+ZWNjLnJlYWRfcGFnZSA9IGF0bWVsX25hbmRfcmVhZF9wYWdlOwogCQluYW5kX2NoaXAtPmVjYy5ieXRlcyA9IDQ7Ci0JCW5hbmRfY2hpcC0+ZWNjLnByZXBhZCA9IDA7Ci0JCW5hbmRfY2hpcC0+ZWNjLnBvc3RwYWQgPSAwOwogCX0KIAogCW5hbmRfY2hpcC0+Y2hpcF9kZWxheSA9IDIwOwkJLyogMjB1cyBjb21tYW5kIGRlbGF5IHRpbWUgKi8KQEAgLTUxNCw3ICs0NzAsNyBAQAogCQlnb3RvIGVycl9zY2FuX2lkZW50OwogCX0KIAotCWlmIChuYW5kX2NoaXAtPmVjYy5tb2RlID09IE5BTkRfRUNDX0hXX1NZTkRST01FKSB7CisJaWYgKG5hbmRfY2hpcC0+ZWNjLm1vZGUgPT0gTkFORF9FQ0NfSFcpIHsKIAkJLyogRUNDIGlzIGNhbGN1bGF0ZWQgZm9yIHRoZSB3aG9sZSBwYWdlICgxIHN0ZXApICovCiAJCW5hbmRfY2hpcC0+ZWNjLnNpemUgPSBtdGQtPndyaXRlc2l6ZTsKIApAQCAtNTIyLDggKzQ3OCw2IEBACiAJCXN3aXRjaCAobXRkLT53cml0ZXNpemUpIHsKIAkJY2FzZSA1MTI6CiAJCQluYW5kX2NoaXAtPmVjYy5sYXlvdXQgPSAmYXRtZWxfb29iaW5mb19zbWFsbDsKLQkJCW5hbmRfY2hpcC0+ZWNjLnJlYWRfb29iID0gYXRtZWxfbmFuZF9yZWFkX29vYl81MTI7Ci0JCQluYW5kX2NoaXAtPmVjYy53cml0ZV9vb2IgPSBhdG1lbF9uYW5kX3dyaXRlX29vYl81MTI7CiAJCQllY2Nfd3JpdGVsKGhvc3QtPmVjYywgTVIsIEFUTUVMX0VDQ19QQUdFU0laRV81MjgpOwogCQkJYnJlYWs7CiAJCWNhc2UgMTAyNDoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL25hbmQvY2FmZV9uYW5kLmMgYi9kcml2ZXJzL210ZC9uYW5kL2NhZmVfbmFuZC5jCmluZGV4IDk1MzQ1ZDAuLmI4MDY0YmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL25hbmQvY2FmZV9uYW5kLmMKKysrIGIvZHJpdmVycy9tdGQvbmFuZC9jYWZlX25hbmQuYwpAQCAtMSw2ICsxLDkgQEAKIC8qCiAgKiBEcml2ZXIgZm9yIE9uZSBMYXB0b3AgUGVyIENoaWxkIOKAmENBRsOJ4oCZIGNvbnRyb2xsZXIsIGFrYSBNYXJ2ZWxsIDg4QUxQMDEKICAqCisgKiBUaGUgZGF0YSBzaGVldCBmb3IgdGhpcyBkZXZpY2UgY2FuIGJlIGZvdW5kIGF0OgorICogICAgaHR0cDovL3d3dy5tYXJ2ZWxsLmNvbS9wcm9kdWN0cy9wY2Nvbm4vODhBTFAwMS5qc3AKKyAqCiAgKiBDb3B5cmlnaHQgwqkgMjAwNiBSZWQgSGF0LCBJbmMuCiAgKiBDb3B5cmlnaHQgwqkgMjAwNiBEYXZpZCBXb29kaG91c2UgPGR3bXcyQGluZnJhZGVhZC5vcmc+CiAgKi8KQEAgLTg0Miw3ICs4NDUsOCBAQAogfQogCiBzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgY2FmZV9uYW5kX3RibFtdID0gewotCXsgMHgxMWFiLCAweDQxMDAsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQgfSwKKwl7IFBDSV9WRU5ET1JfSURfTUFSVkVMTCwgUENJX0RFVklDRV9JRF9NQVJWRUxMXzg4QUxQMDFfTkFORCwKKwkgIFBDSV9BTllfSUQsIFBDSV9BTllfSUQgfSwKIAl7IH0KIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL25hbmQvY3M1NTN4X25hbmQuYyBiL2RyaXZlcnMvbXRkL25hbmQvY3M1NTN4X25hbmQuYwppbmRleCAzMzcwYTgwLi45ZjFiNDUxIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9uYW5kL2NzNTUzeF9uYW5kLmMKKysrIGIvZHJpdmVycy9tdGQvbmFuZC9jczU1M3hfbmFuZC5jCkBAIC0yODksOCArMjg5LDEwIEBACiAJaW50IGk7CiAJdWludDY0X3QgdmFsOwogCisjaWZkZWYgQ09ORklHX01URF9QQVJUSVRJT05TCiAJaW50IG10ZF9wYXJ0c19uYiA9IDA7CiAJc3RydWN0IG10ZF9wYXJ0aXRpb24gKm10ZF9wYXJ0cyA9IE5VTEw7CisjZW5kaWYKIAogCS8qIElmIHRoZSBDUFUgaXNuJ3QgYSBHZW9kZSBHWCBvciBMWCwgYWJvcnQgKi8KIAlpZiAoIWlzX2dlb2RlKCkpCmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9uYW5kL2ZzbF9lbGJjX25hbmQuYyBiL2RyaXZlcnMvbXRkL25hbmQvZnNsX2VsYmNfbmFuZC5jCmluZGV4IDk4YWQzY2UuLjRhYTViZDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL25hbmQvZnNsX2VsYmNfbmFuZC5jCisrKyBiL2RyaXZlcnMvbXRkL25hbmQvZnNsX2VsYmNfbmFuZC5jCkBAIC05MTgsOCArOTE4LDcgQEAKIAogI2lmZGVmIENPTkZJR19NVERfT0ZfUEFSVFMKIAlpZiAocmV0ID09IDApIHsKLQkJcmV0ID0gb2ZfbXRkX3BhcnNlX3BhcnRpdGlvbnMocHJpdi0+ZGV2LCAmcHJpdi0+bXRkLAotCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlLCAmcGFydHMpOworCQlyZXQgPSBvZl9tdGRfcGFyc2VfcGFydGl0aW9ucyhwcml2LT5kZXYsIG5vZGUsICZwYXJ0cyk7CiAJCWlmIChyZXQgPCAwKQogCQkJZ290byBlcnI7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbmFuZC9mc2xfdXBtLmMgYi9kcml2ZXJzL210ZC9uYW5kL2ZzbF91cG0uYwppbmRleCAxZWJmZDg3Li4wMjRlM2ZmIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9uYW5kL2ZzbF91cG0uYworKysgYi9kcml2ZXJzL210ZC9uYW5kL2ZzbF91cG0uYwpAQCAtMTMsNiArMTMsNyBAQAogCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9tdGQvbmFuZC5oPgogI2luY2x1ZGUgPGxpbnV4L210ZC9uYW5kX2VjYy5oPgogI2luY2x1ZGUgPGxpbnV4L210ZC9wYXJ0aXRpb25zLmg+CkBAIC0zNiw4ICszNyw2IEBACiAJdWludDhfdCB1cG1fY21kX29mZnNldDsKIAl2b2lkIF9faW9tZW0gKmlvX2Jhc2U7CiAJaW50IHJuYl9ncGlvOwotCWNvbnN0IHVpbnQzMl90ICp3YWl0X3BhdHRlcm47Ci0JY29uc3QgdWludDMyX3QgKndhaXRfd3JpdGU7CiAJaW50IGNoaXBfZGVsYXk7CiB9OwogCkBAIC02MSwxMCArNjAsMTEgQEAKIAlpZiAoZnVuLT5ybmJfZ3BpbyA+PSAwKSB7CiAJCXdoaWxlICgtLWNudCAmJiAhZnVuX2NoaXBfcmVhZHkoJmZ1bi0+bXRkKSkKIAkJCWNwdV9yZWxheCgpOworCQlpZiAoIWNudCkKKwkJCWRldl9lcnIoZnVuLT5kZXYsICJ0aXJlZCB3YWl0aW5nIGZvciBSTkJcbiIpOworCX0gZWxzZSB7CisJCW5kZWxheSgxMDApOwogCX0KLQotCWlmICghY250KQotCQlkZXZfZXJyKGZ1bi0+ZGV2LCAidGlyZWQgd2FpdGluZyBmb3IgUk5CXG4iKTsKIH0KIAogc3RhdGljIHZvaWQgZnVuX2NtZF9jdHJsKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBpbnQgY21kLCB1bnNpZ25lZCBpbnQgY3RybCkKQEAgLTg5LDggKzg5LDcgQEAKIAogCWZzbF91cG1fcnVuX3BhdHRlcm4oJmZ1bi0+dXBtLCBmdW4tPmlvX2Jhc2UsIGNtZCk7CiAKLQlpZiAoZnVuLT53YWl0X3BhdHRlcm4pCi0JCWZ1bl93YWl0X3JuYihmdW4pOworCWZ1bl93YWl0X3JuYihmdW4pOwogfQogCiBzdGF0aWMgdWludDhfdCBmdW5fcmVhZF9ieXRlKHN0cnVjdCBtdGRfaW5mbyAqbXRkKQpAQCAtMTE2LDE0ICsxMTUsMTYgQEAKIAogCWZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgewogCQlvdXRfOChmdW4tPmNoaXAuSU9fQUREUl9XLCBidWZbaV0pOwotCQlpZiAoZnVuLT53YWl0X3dyaXRlKQotCQkJZnVuX3dhaXRfcm5iKGZ1bik7CisJCWZ1bl93YWl0X3JuYihmdW4pOwogCX0KIH0KIAotc3RhdGljIGludCBfX2RldmluaXQgZnVuX2NoaXBfaW5pdChzdHJ1Y3QgZnNsX3VwbV9uYW5kICpmdW4pCitzdGF0aWMgaW50IF9fZGV2aW5pdCBmdW5fY2hpcF9pbml0KHN0cnVjdCBmc2xfdXBtX25hbmQgKmZ1biwKKwkJCQkgICBjb25zdCBzdHJ1Y3QgZGV2aWNlX25vZGUgKnVwbV9ucCwKKwkJCQkgICBjb25zdCBzdHJ1Y3QgcmVzb3VyY2UgKmlvX3JlcykKIHsKIAlpbnQgcmV0OworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqZmxhc2hfbnA7CiAjaWZkZWYgQ09ORklHX01URF9QQVJUSVRJT05TCiAJc3RhdGljIGNvbnN0IGNoYXIgKnBhcnRfdHlwZXNbXSA9IHsgImNtZGxpbmVwYXJ0IiwgTlVMTCwgfTsKICNlbmRpZgpAQCAtMTQzLDE4ICsxNDQsMzcgQEAKIAlmdW4tPm10ZC5wcml2ID0gJmZ1bi0+Y2hpcDsKIAlmdW4tPm10ZC5vd25lciA9IFRISVNfTU9EVUxFOwogCisJZmxhc2hfbnAgPSBvZl9nZXRfbmV4dF9jaGlsZCh1cG1fbnAsIE5VTEwpOworCWlmICghZmxhc2hfbnApCisJCXJldHVybiAtRU5PREVWOworCisJZnVuLT5tdGQubmFtZSA9IGthc3ByaW50ZihHRlBfS0VSTkVMLCAiJXguJXMiLCBpb19yZXMtPnN0YXJ0LAorCQkJCSAgZmxhc2hfbnAtPm5hbWUpOworCWlmICghZnVuLT5tdGQubmFtZSkgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIGVycjsKKwl9CisKIAlyZXQgPSBuYW5kX3NjYW4oJmZ1bi0+bXRkLCAxKTsKIAlpZiAocmV0KQotCQlyZXR1cm4gcmV0OwotCi0JZnVuLT5tdGQubmFtZSA9IGZ1bi0+ZGV2LT5idXNfaWQ7CisJCWdvdG8gZXJyOwogCiAjaWZkZWYgQ09ORklHX01URF9QQVJUSVRJT05TCiAJcmV0ID0gcGFyc2VfbXRkX3BhcnRpdGlvbnMoJmZ1bi0+bXRkLCBwYXJ0X3R5cGVzLCAmZnVuLT5wYXJ0cywgMCk7Ci0JaWYgKHJldCA+IDApCi0JCXJldHVybiBhZGRfbXRkX3BhcnRpdGlvbnMoJmZ1bi0+bXRkLCBmdW4tPnBhcnRzLCByZXQpOworCisjaWZkZWYgQ09ORklHX01URF9PRl9QQVJUUworCWlmIChyZXQgPT0gMCkKKwkJcmV0ID0gb2ZfbXRkX3BhcnNlX3BhcnRpdGlvbnMoZnVuLT5kZXYsICZmdW4tPm10ZCwKKwkJCQkJICAgICAgZmxhc2hfbnAsICZmdW4tPnBhcnRzKTsKICNlbmRpZgotCXJldHVybiBhZGRfbXRkX2RldmljZSgmZnVuLT5tdGQpOworCWlmIChyZXQgPiAwKQorCQlyZXQgPSBhZGRfbXRkX3BhcnRpdGlvbnMoJmZ1bi0+bXRkLCBmdW4tPnBhcnRzLCByZXQpOworCWVsc2UKKyNlbmRpZgorCQlyZXQgPSBhZGRfbXRkX2RldmljZSgmZnVuLT5tdGQpOworZXJyOgorCW9mX25vZGVfcHV0KGZsYXNoX25wKTsKKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBmdW5fcHJvYmUoc3RydWN0IG9mX2RldmljZSAqb2ZkZXYsCkBAIC0yMTEsNiArMjMxLDEyIEBACiAJCWdvdG8gZXJyMjsKIAl9CiAKKwlwcm9wID0gb2ZfZ2V0X3Byb3BlcnR5KG9mZGV2LT5ub2RlLCAiY2hpcC1kZWxheSIsIE5VTEwpOworCWlmIChwcm9wKQorCQlmdW4tPmNoaXBfZGVsYXkgPSAqcHJvcDsKKwllbHNlCisJCWZ1bi0+Y2hpcF9kZWxheSA9IDUwOworCiAJZnVuLT5pb19iYXNlID0gZGV2bV9pb3JlbWFwX25vY2FjaGUoJm9mZGV2LT5kZXYsIGlvX3Jlcy5zdGFydCwKIAkJCQkJICBpb19yZXMuZW5kIC0gaW9fcmVzLnN0YXJ0ICsgMSk7CiAJaWYgKCFmdW4tPmlvX2Jhc2UpIHsKQEAgLTIyMCwxNyArMjQ2LDggQEAKIAogCWZ1bi0+ZGV2ID0gJm9mZGV2LT5kZXY7CiAJZnVuLT5sYXN0X2N0cmwgPSBOQU5EX0NMRTsKLQlmdW4tPndhaXRfcGF0dGVybiA9IG9mX2dldF9wcm9wZXJ0eShvZmRldi0+bm9kZSwgImZzbCx3YWl0LXBhdHRlcm4iLAotCQkJCQkgICAgTlVMTCk7Ci0JZnVuLT53YWl0X3dyaXRlID0gb2ZfZ2V0X3Byb3BlcnR5KG9mZGV2LT5ub2RlLCAiZnNsLHdhaXQtd3JpdGUiLCBOVUxMKTsKIAotCXByb3AgPSBvZl9nZXRfcHJvcGVydHkob2ZkZXYtPm5vZGUsICJjaGlwLWRlbGF5IiwgTlVMTCk7Ci0JaWYgKHByb3ApCi0JCWZ1bi0+Y2hpcF9kZWxheSA9ICpwcm9wOwotCWVsc2UKLQkJZnVuLT5jaGlwX2RlbGF5ID0gNTA7Ci0KLQlyZXQgPSBmdW5fY2hpcF9pbml0KGZ1bik7CisJcmV0ID0gZnVuX2NoaXBfaW5pdChmdW4sIG9mZGV2LT5ub2RlLCAmaW9fcmVzKTsKIAlpZiAocmV0KQogCQlnb3RvIGVycjI7CiAKQEAgLTI1MSw2ICsyNjgsNyBAQAogCXN0cnVjdCBmc2xfdXBtX25hbmQgKmZ1biA9IGRldl9nZXRfZHJ2ZGF0YSgmb2ZkZXYtPmRldik7CiAKIAluYW5kX3JlbGVhc2UoJmZ1bi0+bXRkKTsKKwlrZnJlZShmdW4tPm10ZC5uYW1lKTsKIAogCWlmIChmdW4tPnJuYl9ncGlvID49IDApCiAJCWdwaW9fZnJlZShmdW4tPnJuYl9ncGlvKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL25hbmQvZ3Bpby5jIGIvZHJpdmVycy9tdGQvbmFuZC9ncGlvLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGY5MDJlNwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbXRkL25hbmQvZ3Bpby5jCkBAIC0wLDAgKzEsMzc1IEBACisvKgorICogZHJpdmVycy9tdGQvbmFuZC9ncGlvLmMKKyAqCisgKiBVcGRhdGVkLCBhbmQgY29udmVydGVkIHRvIGdlbmVyaWMgR1BJTyBiYXNlZCBkcml2ZXIgYnkgUnVzc2VsbCBLaW5nLgorICoKKyAqIFdyaXR0ZW4gYnkgQmVuIERvb2tzIDxiZW5Ac2ltdGVjLmNvLnVrPgorICogICBCYXNlZCBvbiAyLjQgdmVyc2lvbiBieSBNYXJrIFdoaXR0YWtlcgorICoKKyAqIMKpIDIwMDQgU2ltdGVjIEVsZWN0cm9uaWNzCisgKgorICogRGV2aWNlIGRyaXZlciBmb3IgTkFORCBjb25uZWN0ZWQgdmlhIEdQSU8KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvbXRkLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL25hbmQuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvcGFydGl0aW9ucy5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9uYW5kLWdwaW8uaD4KKworc3RydWN0IGdwaW9tdGQgeworCXZvaWQgX19pb21lbQkJKmlvX3N5bmM7CisJc3RydWN0IG10ZF9pbmZvCQltdGRfaW5mbzsKKwlzdHJ1Y3QgbmFuZF9jaGlwCW5hbmRfY2hpcDsKKwlzdHJ1Y3QgZ3Bpb19uYW5kX3BsYXRkYXRhIHBsYXQ7Cit9OworCisjZGVmaW5lIGdwaW9fbmFuZF9nZXRwcml2KHgpIGNvbnRhaW5lcl9vZih4LCBzdHJ1Y3QgZ3Bpb210ZCwgbXRkX2luZm8pCisKKworI2lmZGVmIENPTkZJR19BUk0KKy8qIGdwaW9fbmFuZF9kb3N5bmMoKQorICoKKyAqIE1ha2Ugc3VyZSB0aGUgR1BJTyBzdGF0ZSBjaGFuZ2VzIG9jY3VyIGluLW9yZGVyIHdpdGggd3JpdGVzIHRvIE5BTkQKKyAqIG1lbW9yeSByZWdpb24uCisgKiBOZWVkZWQgb24gUFhBIGR1ZSB0byBidXMtcmVvcmRlcmluZyB3aXRoaW4gdGhlIFNvQyBpdHNlbGYgKHNlZSBzZWN0aW9uIG9uCisgKiBJL08gb3JkZXJpbmcgaW4gUFhBIG1hbnVhbCAoc2VjdGlvbiAyLjMsIHAzNSkKKyAqLworc3RhdGljIHZvaWQgZ3Bpb19uYW5kX2Rvc3luYyhzdHJ1Y3QgZ3Bpb210ZCAqZ3Bpb210ZCkKK3sKKwl1bnNpZ25lZCBsb25nIHRtcDsKKworCWlmIChncGlvbXRkLT5pb19zeW5jKSB7CisJCS8qCisJCSAqIExpbnV4IG1lbW9yeSBiYXJyaWVycyBkb24ndCBjYXRlciBmb3Igd2hhdCdzIHJlcXVpcmVkIGhlcmUuCisJCSAqIFdoYXQncyByZXF1aXJlZCBpcyB3aGF0J3MgaGVyZSAtIGEgcmVhZCBmcm9tIGEgc2VwYXJhdGUKKwkJICogcmVnaW9uIHdpdGggYSBkZXBlbmRlbmN5IG9uIHRoYXQgcmVhZC4KKwkJICovCisJCXRtcCA9IHJlYWRsKGdwaW9tdGQtPmlvX3N5bmMpOworCQlhc20gdm9sYXRpbGUoIm1vdiAlMSwgJTBcbiIgOiAiPXIiICh0bXApIDogInIiICh0bXApKTsKKwl9Cit9CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIGdwaW9fbmFuZF9kb3N5bmMoc3RydWN0IGdwaW9tdGQgKmdwaW9tdGQpIHt9CisjZW5kaWYKKworc3RhdGljIHZvaWQgZ3Bpb19uYW5kX2NtZF9jdHJsKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBpbnQgY21kLCB1bnNpZ25lZCBpbnQgY3RybCkKK3sKKwlzdHJ1Y3QgZ3Bpb210ZCAqZ3Bpb210ZCA9IGdwaW9fbmFuZF9nZXRwcml2KG10ZCk7CisKKwlncGlvX25hbmRfZG9zeW5jKGdwaW9tdGQpOworCisJaWYgKGN0cmwgJiBOQU5EX0NUUkxfQ0hBTkdFKSB7CisJCWdwaW9fc2V0X3ZhbHVlKGdwaW9tdGQtPnBsYXQuZ3Bpb19uY2UsICEoY3RybCAmIE5BTkRfTkNFKSk7CisJCWdwaW9fc2V0X3ZhbHVlKGdwaW9tdGQtPnBsYXQuZ3Bpb19jbGUsICEhKGN0cmwgJiBOQU5EX0NMRSkpOworCQlncGlvX3NldF92YWx1ZShncGlvbXRkLT5wbGF0LmdwaW9fYWxlLCAhIShjdHJsICYgTkFORF9BTEUpKTsKKwkJZ3Bpb19uYW5kX2Rvc3luYyhncGlvbXRkKTsKKwl9CisJaWYgKGNtZCA9PSBOQU5EX0NNRF9OT05FKQorCQlyZXR1cm47CisKKwl3cml0ZWIoY21kLCBncGlvbXRkLT5uYW5kX2NoaXAuSU9fQUREUl9XKTsKKwlncGlvX25hbmRfZG9zeW5jKGdwaW9tdGQpOworfQorCitzdGF0aWMgdm9pZCBncGlvX25hbmRfd3JpdGVidWYoc3RydWN0IG10ZF9pbmZvICptdGQsIGNvbnN0IHVfY2hhciAqYnVmLCBpbnQgbGVuKQoreworCXN0cnVjdCBuYW5kX2NoaXAgKnRoaXMgPSBtdGQtPnByaXY7CisKKwl3cml0ZXNiKHRoaXMtPklPX0FERFJfVywgYnVmLCBsZW4pOworfQorCitzdGF0aWMgdm9pZCBncGlvX25hbmRfcmVhZGJ1ZihzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgdV9jaGFyICpidWYsIGludCBsZW4pCit7CisJc3RydWN0IG5hbmRfY2hpcCAqdGhpcyA9IG10ZC0+cHJpdjsKKworCXJlYWRzYih0aGlzLT5JT19BRERSX1IsIGJ1ZiwgbGVuKTsKK30KKworc3RhdGljIGludCBncGlvX25hbmRfdmVyaWZ5YnVmKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBjb25zdCB1X2NoYXIgKmJ1ZiwgaW50IGxlbikKK3sKKwlzdHJ1Y3QgbmFuZF9jaGlwICp0aGlzID0gbXRkLT5wcml2OworCXVuc2lnbmVkIGNoYXIgcmVhZCwgKnAgPSAodW5zaWduZWQgY2hhciAqKSBidWY7CisJaW50IGksIGVyciA9IDA7CisKKwlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKKwkJcmVhZCA9IHJlYWRiKHRoaXMtPklPX0FERFJfUik7CisJCWlmIChyZWFkICE9IHBbaV0pIHsKKwkJCXByX2RlYnVnKCIlczogZXJyIGF0ICVkIChyZWFkICUwNHggdnMgJTA0eClcbiIsCisJCQkgICAgICAgX19mdW5jX18sIGksIHJlYWQsIHBbaV0pOworCQkJZXJyID0gLUVGQVVMVDsKKwkJfQorCX0KKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgdm9pZCBncGlvX25hbmRfd3JpdGVidWYxNihzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgY29uc3QgdV9jaGFyICpidWYsCisJCQkJIGludCBsZW4pCit7CisJc3RydWN0IG5hbmRfY2hpcCAqdGhpcyA9IG10ZC0+cHJpdjsKKworCWlmIChJU19BTElHTkVEKCh1bnNpZ25lZCBsb25nKWJ1ZiwgMikpIHsKKwkJd3JpdGVzdyh0aGlzLT5JT19BRERSX1csIGJ1ZiwgbGVuPj4xKTsKKwl9IGVsc2UgeworCQlpbnQgaTsKKwkJdW5zaWduZWQgc2hvcnQgKnB0ciA9ICh1bnNpZ25lZCBzaG9ydCAqKWJ1ZjsKKworCQlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpICs9IDIsIHB0cisrKQorCQkJd3JpdGV3KCpwdHIsIHRoaXMtPklPX0FERFJfVyk7CisJfQorfQorCitzdGF0aWMgdm9pZCBncGlvX25hbmRfcmVhZGJ1ZjE2KHN0cnVjdCBtdGRfaW5mbyAqbXRkLCB1X2NoYXIgKmJ1ZiwgaW50IGxlbikKK3sKKwlzdHJ1Y3QgbmFuZF9jaGlwICp0aGlzID0gbXRkLT5wcml2OworCisJaWYgKElTX0FMSUdORUQoKHVuc2lnbmVkIGxvbmcpYnVmLCAyKSkgeworCQlyZWFkc3codGhpcy0+SU9fQUREUl9SLCBidWYsIGxlbj4+MSk7CisJfSBlbHNlIHsKKwkJaW50IGk7CisJCXVuc2lnbmVkIHNob3J0ICpwdHIgPSAodW5zaWduZWQgc2hvcnQgKilidWY7CisKKwkJZm9yIChpID0gMDsgaSA8IGxlbjsgaSArPSAyLCBwdHIrKykKKwkJCSpwdHIgPSByZWFkdyh0aGlzLT5JT19BRERSX1IpOworCX0KK30KKworc3RhdGljIGludCBncGlvX25hbmRfdmVyaWZ5YnVmMTYoc3RydWN0IG10ZF9pbmZvICptdGQsIGNvbnN0IHVfY2hhciAqYnVmLAorCQkJCSBpbnQgbGVuKQoreworCXN0cnVjdCBuYW5kX2NoaXAgKnRoaXMgPSBtdGQtPnByaXY7CisJdW5zaWduZWQgc2hvcnQgcmVhZCwgKnAgPSAodW5zaWduZWQgc2hvcnQgKikgYnVmOworCWludCBpLCBlcnIgPSAwOworCWxlbiA+Pj0gMTsKKworCWZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgeworCQlyZWFkID0gcmVhZHcodGhpcy0+SU9fQUREUl9SKTsKKwkJaWYgKHJlYWQgIT0gcFtpXSkgeworCQkJcHJfZGVidWcoIiVzOiBlcnIgYXQgJWQgKHJlYWQgJTA0eCB2cyAlMDR4KVxuIiwKKwkJCSAgICAgICBfX2Z1bmNfXywgaSwgcmVhZCwgcFtpXSk7CisJCQllcnIgPSAtRUZBVUxUOworCQl9CisJfQorCXJldHVybiBlcnI7Cit9CisKKworc3RhdGljIGludCBncGlvX25hbmRfZGV2cmVhZHkoc3RydWN0IG10ZF9pbmZvICptdGQpCit7CisJc3RydWN0IGdwaW9tdGQgKmdwaW9tdGQgPSBncGlvX25hbmRfZ2V0cHJpdihtdGQpOworCXJldHVybiBncGlvX2dldF92YWx1ZShncGlvbXRkLT5wbGF0LmdwaW9fcmR5KTsKK30KKworc3RhdGljIGludCBfX2RldmV4aXQgZ3Bpb19uYW5kX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGdwaW9tdGQgKmdwaW9tdGQgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCByZXNvdXJjZSAqcmVzOworCisJbmFuZF9yZWxlYXNlKCZncGlvbXRkLT5tdGRfaW5mbyk7CisKKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UoZGV2LCBJT1JFU09VUkNFX01FTSwgMSk7CisJaW91bm1hcChncGlvbXRkLT5pb19zeW5jKTsKKwlpZiAocmVzKQorCQlyZWxlYXNlX21lbV9yZWdpb24ocmVzLT5zdGFydCwgcmVzLT5lbmQgLSByZXMtPnN0YXJ0ICsgMSk7CisKKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UoZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJaW91bm1hcChncGlvbXRkLT5uYW5kX2NoaXAuSU9fQUREUl9SKTsKKwlyZWxlYXNlX21lbV9yZWdpb24ocmVzLT5zdGFydCwgcmVzLT5lbmQgLSByZXMtPnN0YXJ0ICsgMSk7CisKKwlpZiAoZ3Bpb19pc192YWxpZChncGlvbXRkLT5wbGF0LmdwaW9fbndwKSkKKwkJZ3Bpb19zZXRfdmFsdWUoZ3Bpb210ZC0+cGxhdC5ncGlvX253cCwgMCk7CisJZ3Bpb19zZXRfdmFsdWUoZ3Bpb210ZC0+cGxhdC5ncGlvX25jZSwgMSk7CisKKwlncGlvX2ZyZWUoZ3Bpb210ZC0+cGxhdC5ncGlvX2NsZSk7CisJZ3Bpb19mcmVlKGdwaW9tdGQtPnBsYXQuZ3Bpb19hbGUpOworCWdwaW9fZnJlZShncGlvbXRkLT5wbGF0LmdwaW9fbmNlKTsKKwlpZiAoZ3Bpb19pc192YWxpZChncGlvbXRkLT5wbGF0LmdwaW9fbndwKSkKKwkJZ3Bpb19mcmVlKGdwaW9tdGQtPnBsYXQuZ3Bpb19ud3ApOworCWdwaW9fZnJlZShncGlvbXRkLT5wbGF0LmdwaW9fcmR5KTsKKworCWtmcmVlKGdwaW9tdGQpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIF9faW9tZW0gKnJlcXVlc3RfYW5kX3JlbWFwKHN0cnVjdCByZXNvdXJjZSAqcmVzLCBzaXplX3Qgc2l6ZSwKKwkJCQkJY29uc3QgY2hhciAqbmFtZSwgaW50ICplcnIpCit7CisJdm9pZCBfX2lvbWVtICpwdHI7CisKKwlpZiAoIXJlcXVlc3RfbWVtX3JlZ2lvbihyZXMtPnN0YXJ0LCByZXMtPmVuZCAtIHJlcy0+c3RhcnQgKyAxLCBuYW1lKSkgeworCQkqZXJyID0gLUVCVVNZOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlwdHIgPSBpb3JlbWFwKHJlcy0+c3RhcnQsIHNpemUpOworCWlmICghcHRyKSB7CisJCXJlbGVhc2VfbWVtX3JlZ2lvbihyZXMtPnN0YXJ0LCByZXMtPmVuZCAtIHJlcy0+c3RhcnQgKyAxKTsKKwkJKmVyciA9IC1FTk9NRU07CisJfQorCXJldHVybiBwdHI7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IGdwaW9fbmFuZF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGdwaW9tdGQgKmdwaW9tdGQ7CisJc3RydWN0IG5hbmRfY2hpcCAqdGhpczsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlczAsICpyZXMxOworCWludCByZXQ7CisKKwlpZiAoIWRldi0+ZGV2LnBsYXRmb3JtX2RhdGEpCisJCXJldHVybiAtRUlOVkFMOworCisJcmVzMCA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwlpZiAoIXJlczApCisJCXJldHVybiAtRUlOVkFMOworCisJZ3Bpb210ZCA9IGt6YWxsb2Moc2l6ZW9mKCpncGlvbXRkKSwgR0ZQX0tFUk5FTCk7CisJaWYgKGdwaW9tdGQgPT0gTlVMTCkgeworCQlkZXZfZXJyKCZkZXYtPmRldiwgImZhaWxlZCB0byBjcmVhdGUgTkFORCBNVERcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwl0aGlzID0gJmdwaW9tdGQtPm5hbmRfY2hpcDsKKwl0aGlzLT5JT19BRERSX1IgPSByZXF1ZXN0X2FuZF9yZW1hcChyZXMwLCAyLCAiTkFORCIsICZyZXQpOworCWlmICghdGhpcy0+SU9fQUREUl9SKSB7CisJCWRldl9lcnIoJmRldi0+ZGV2LCAidW5hYmxlIHRvIG1hcCBOQU5EXG4iKTsKKwkJZ290byBlcnJfbWFwOworCX0KKworCXJlczEgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UoZGV2LCBJT1JFU09VUkNFX01FTSwgMSk7CisJaWYgKHJlczEpIHsKKwkJZ3Bpb210ZC0+aW9fc3luYyA9IHJlcXVlc3RfYW5kX3JlbWFwKHJlczEsIDQsICJOQU5EIHN5bmMiLCAmcmV0KTsKKwkJaWYgKCFncGlvbXRkLT5pb19zeW5jKSB7CisJCQlkZXZfZXJyKCZkZXYtPmRldiwgInVuYWJsZSB0byBtYXAgc3luYyBOQU5EXG4iKTsKKwkJCWdvdG8gZXJyX3N5bmM7CisJCX0KKwl9CisKKwltZW1jcHkoJmdwaW9tdGQtPnBsYXQsIGRldi0+ZGV2LnBsYXRmb3JtX2RhdGEsIHNpemVvZihncGlvbXRkLT5wbGF0KSk7CisKKwlyZXQgPSBncGlvX3JlcXVlc3QoZ3Bpb210ZC0+cGxhdC5ncGlvX25jZSwgIk5BTkQgTkNFIik7CisJaWYgKHJldCkKKwkJZ290byBlcnJfbmNlOworCWdwaW9fZGlyZWN0aW9uX291dHB1dChncGlvbXRkLT5wbGF0LmdwaW9fbmNlLCAxKTsKKwlpZiAoZ3Bpb19pc192YWxpZChncGlvbXRkLT5wbGF0LmdwaW9fbndwKSkgeworCQlyZXQgPSBncGlvX3JlcXVlc3QoZ3Bpb210ZC0+cGxhdC5ncGlvX253cCwgIk5BTkQgTldQIik7CisJCWlmIChyZXQpCisJCQlnb3RvIGVycl9ud3A7CisJCWdwaW9fZGlyZWN0aW9uX291dHB1dChncGlvbXRkLT5wbGF0LmdwaW9fbndwLCAxKTsKKwl9CisJcmV0ID0gZ3Bpb19yZXF1ZXN0KGdwaW9tdGQtPnBsYXQuZ3Bpb19hbGUsICJOQU5EIEFMRSIpOworCWlmIChyZXQpCisJCWdvdG8gZXJyX2FsZTsKKwlncGlvX2RpcmVjdGlvbl9vdXRwdXQoZ3Bpb210ZC0+cGxhdC5ncGlvX2FsZSwgMCk7CisJcmV0ID0gZ3Bpb19yZXF1ZXN0KGdwaW9tdGQtPnBsYXQuZ3Bpb19jbGUsICJOQU5EIENMRSIpOworCWlmIChyZXQpCisJCWdvdG8gZXJyX2NsZTsKKwlncGlvX2RpcmVjdGlvbl9vdXRwdXQoZ3Bpb210ZC0+cGxhdC5ncGlvX2NsZSwgMCk7CisJcmV0ID0gZ3Bpb19yZXF1ZXN0KGdwaW9tdGQtPnBsYXQuZ3Bpb19yZHksICJOQU5EIFJEWSIpOworCWlmIChyZXQpCisJCWdvdG8gZXJyX3JkeTsKKwlncGlvX2RpcmVjdGlvbl9pbnB1dChncGlvbXRkLT5wbGF0LmdwaW9fcmR5KTsKKworCisJdGhpcy0+SU9fQUREUl9XICA9IHRoaXMtPklPX0FERFJfUjsKKwl0aGlzLT5lY2MubW9kZSAgID0gTkFORF9FQ0NfU09GVDsKKwl0aGlzLT5vcHRpb25zICAgID0gZ3Bpb210ZC0+cGxhdC5vcHRpb25zOworCXRoaXMtPmNoaXBfZGVsYXkgPSBncGlvbXRkLT5wbGF0LmNoaXBfZGVsYXk7CisKKwkvKiBpbnN0YWxsIG91ciByb3V0aW5lcyAqLworCXRoaXMtPmNtZF9jdHJsICAgPSBncGlvX25hbmRfY21kX2N0cmw7CisJdGhpcy0+ZGV2X3JlYWR5ICA9IGdwaW9fbmFuZF9kZXZyZWFkeTsKKworCWlmICh0aGlzLT5vcHRpb25zICYgTkFORF9CVVNXSURUSF8xNikgeworCQl0aGlzLT5yZWFkX2J1ZiAgID0gZ3Bpb19uYW5kX3JlYWRidWYxNjsKKwkJdGhpcy0+d3JpdGVfYnVmICA9IGdwaW9fbmFuZF93cml0ZWJ1ZjE2OworCQl0aGlzLT52ZXJpZnlfYnVmID0gZ3Bpb19uYW5kX3ZlcmlmeWJ1ZjE2OworCX0gZWxzZSB7CisJCXRoaXMtPnJlYWRfYnVmICAgPSBncGlvX25hbmRfcmVhZGJ1ZjsKKwkJdGhpcy0+d3JpdGVfYnVmICA9IGdwaW9fbmFuZF93cml0ZWJ1ZjsKKwkJdGhpcy0+dmVyaWZ5X2J1ZiA9IGdwaW9fbmFuZF92ZXJpZnlidWY7CisJfQorCisJLyogc2V0IHRoZSBtdGQgcHJpdmF0ZSBkYXRhIGZvciB0aGUgbmFuZCBkcml2ZXIgKi8KKwlncGlvbXRkLT5tdGRfaW5mby5wcml2ID0gdGhpczsKKwlncGlvbXRkLT5tdGRfaW5mby5vd25lciA9IFRISVNfTU9EVUxFOworCisJaWYgKG5hbmRfc2NhbigmZ3Bpb210ZC0+bXRkX2luZm8sIDEpKSB7CisJCWRldl9lcnIoJmRldi0+ZGV2LCAibm8gbmFuZCBjaGlwcyBmb3VuZD9cbiIpOworCQlyZXQgPSAtRU5YSU87CisJCWdvdG8gZXJyX3dwOworCX0KKworCWlmIChncGlvbXRkLT5wbGF0LmFkanVzdF9wYXJ0cykKKwkJZ3Bpb210ZC0+cGxhdC5hZGp1c3RfcGFydHMoJmdwaW9tdGQtPnBsYXQsCisJCQkJCSAgIGdwaW9tdGQtPm10ZF9pbmZvLnNpemUpOworCisJYWRkX210ZF9wYXJ0aXRpb25zKCZncGlvbXRkLT5tdGRfaW5mbywgZ3Bpb210ZC0+cGxhdC5wYXJ0cywKKwkJCSAgIGdwaW9tdGQtPnBsYXQubnVtX3BhcnRzKTsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShkZXYsIGdwaW9tdGQpOworCisJcmV0dXJuIDA7CisKK2Vycl93cDoKKwlpZiAoZ3Bpb19pc192YWxpZChncGlvbXRkLT5wbGF0LmdwaW9fbndwKSkKKwkJZ3Bpb19zZXRfdmFsdWUoZ3Bpb210ZC0+cGxhdC5ncGlvX253cCwgMCk7CisJZ3Bpb19mcmVlKGdwaW9tdGQtPnBsYXQuZ3Bpb19yZHkpOworZXJyX3JkeToKKwlncGlvX2ZyZWUoZ3Bpb210ZC0+cGxhdC5ncGlvX2NsZSk7CitlcnJfY2xlOgorCWdwaW9fZnJlZShncGlvbXRkLT5wbGF0LmdwaW9fYWxlKTsKK2Vycl9hbGU6CisJaWYgKGdwaW9faXNfdmFsaWQoZ3Bpb210ZC0+cGxhdC5ncGlvX253cCkpCisJCWdwaW9fZnJlZShncGlvbXRkLT5wbGF0LmdwaW9fbndwKTsKK2Vycl9ud3A6CisJZ3Bpb19mcmVlKGdwaW9tdGQtPnBsYXQuZ3Bpb19uY2UpOworZXJyX25jZToKKwlpb3VubWFwKGdwaW9tdGQtPmlvX3N5bmMpOworCWlmIChyZXMxKQorCQlyZWxlYXNlX21lbV9yZWdpb24ocmVzMS0+c3RhcnQsIHJlczEtPmVuZCAtIHJlczEtPnN0YXJ0ICsgMSk7CitlcnJfc3luYzoKKwlpb3VubWFwKGdwaW9tdGQtPm5hbmRfY2hpcC5JT19BRERSX1IpOworCXJlbGVhc2VfbWVtX3JlZ2lvbihyZXMwLT5zdGFydCwgcmVzMC0+ZW5kIC0gcmVzMC0+c3RhcnQgKyAxKTsKK2Vycl9tYXA6CisJa2ZyZWUoZ3Bpb210ZCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgZ3Bpb19uYW5kX2RyaXZlciA9IHsKKwkucHJvYmUJCT0gZ3Bpb19uYW5kX3Byb2JlLAorCS5yZW1vdmUJCT0gZ3Bpb19uYW5kX3JlbW92ZSwKKwkuZHJpdmVyCQk9IHsKKwkJLm5hbWUJPSAiZ3Bpby1uYW5kIiwKKwl9LAorfTsKKworc3RhdGljIGludCBfX2luaXQgZ3Bpb19uYW5kX2luaXQodm9pZCkKK3sKKwlwcmludGsoS0VSTl9JTkZPICJHUElPIE5BTkQgZHJpdmVyLCDCqSAyMDA0IFNpbXRlYyBFbGVjdHJvbmljc1xuIik7CisKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZncGlvX25hbmRfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGdwaW9fbmFuZF9leGl0KHZvaWQpCit7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJmdwaW9fbmFuZF9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChncGlvX25hbmRfaW5pdCk7Cittb2R1bGVfZXhpdChncGlvX25hbmRfZXhpdCk7CisKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9BVVRIT1IoIkJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiR1BJTyBOQU5EIERyaXZlciIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbmFuZC9teGNfbmFuZC5jIGIvZHJpdmVycy9tdGQvbmFuZC9teGNfbmFuZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxZmQ0ZjEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL210ZC9uYW5kL214Y19uYW5kLmMKQEAgLTAsMCArMSwxMDc3IEBACisvKgorICogQ29weXJpZ2h0IDIwMDQtMjAwNyBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IDIwMDggU2FzY2hhIEhhdWVyLCBrZXJuZWxAcGVuZ3V0cm9uaXguZGUKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIKKyAqIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwKKyAqIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9tdGQuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvbmFuZC5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9wYXJ0aXRpb25zLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKworI2luY2x1ZGUgPGFzbS9tYWNoL2ZsYXNoLmg+CisjaW5jbHVkZSA8bWFjaC9teGNfbmFuZC5oPgorCisjZGVmaW5lIERSSVZFUl9OQU1FICJteGNfbmFuZCIKKworLyogQWRkcmVzc2VzIGZvciBORkMgcmVnaXN0ZXJzICovCisjZGVmaW5lIE5GQ19CVUZfU0laRQkJMHhFMDAKKyNkZWZpbmUgTkZDX0JVRl9BRERSCQkweEUwNAorI2RlZmluZSBORkNfRkxBU0hfQUREUgkJMHhFMDYKKyNkZWZpbmUgTkZDX0ZMQVNIX0NNRAkJMHhFMDgKKyNkZWZpbmUgTkZDX0NPTkZJRwkJMHhFMEEKKyNkZWZpbmUgTkZDX0VDQ19TVEFUVVNfUkVTVUxUCTB4RTBDCisjZGVmaW5lIE5GQ19SU0xUTUFJTl9BUkVBCTB4RTBFCisjZGVmaW5lIE5GQ19SU0xUU1BBUkVfQVJFQQkweEUxMAorI2RlZmluZSBORkNfV1JQUk9UCQkweEUxMgorI2RlZmluZSBORkNfVU5MT0NLU1RBUlRfQkxLQUREUgkweEUxNAorI2RlZmluZSBORkNfVU5MT0NLRU5EX0JMS0FERFIJMHhFMTYKKyNkZWZpbmUgTkZDX05GX1dSUFJTVAkJMHhFMTgKKyNkZWZpbmUgTkZDX0NPTkZJRzEJCTB4RTFBCisjZGVmaW5lIE5GQ19DT05GSUcyCQkweEUxQworCisvKiBBZGRyZXNzZXMgZm9yIE5GQyBSQU0gQlVGRkVSIE1haW4gYXJlYSAwICovCisjZGVmaW5lIE1BSU5fQVJFQTAJCTB4MDAwCisjZGVmaW5lIE1BSU5fQVJFQTEJCTB4MjAwCisjZGVmaW5lIE1BSU5fQVJFQTIJCTB4NDAwCisjZGVmaW5lIE1BSU5fQVJFQTMJCTB4NjAwCisKKy8qIEFkZHJlc3NlcyBmb3IgTkZDIFNQQVJFIEJVRkZFUiBTcGFyZSBhcmVhIDAgKi8KKyNkZWZpbmUgU1BBUkVfQVJFQTAJCTB4ODAwCisjZGVmaW5lIFNQQVJFX0FSRUExCQkweDgxMAorI2RlZmluZSBTUEFSRV9BUkVBMgkJMHg4MjAKKyNkZWZpbmUgU1BBUkVfQVJFQTMJCTB4ODMwCisKKy8qIFNldCBJTlQgdG8gMCwgRkNNRCB0byAxLCByZXN0IHRvIDAgaW4gTkZDX0NPTkZJRzIgUmVnaXN0ZXIKKyAqIGZvciBDb21tYW5kIG9wZXJhdGlvbiAqLworI2RlZmluZSBORkNfQ01EICAgICAgICAgICAgMHgxCisKKy8qIFNldCBJTlQgdG8gMCwgRkFERCB0byAxLCByZXN0IHRvIDAgaW4gTkZDX0NPTkZJRzIgUmVnaXN0ZXIKKyAqIGZvciBBZGRyZXNzIG9wZXJhdGlvbiAqLworI2RlZmluZSBORkNfQUREUiAgICAgICAgICAgMHgyCisKKy8qIFNldCBJTlQgdG8gMCwgRkRJIHRvIDEsIHJlc3QgdG8gMCBpbiBORkNfQ09ORklHMiBSZWdpc3RlcgorICogZm9yIElucHV0IG9wZXJhdGlvbiAqLworI2RlZmluZSBORkNfSU5QVVQgICAgICAgICAgMHg0CisKKy8qIFNldCBJTlQgdG8gMCwgRkRPIHRvIDAwMSwgcmVzdCB0byAwIGluIE5GQ19DT05GSUcyIFJlZ2lzdGVyCisgKiBmb3IgRGF0YSBPdXRwdXQgb3BlcmF0aW9uICovCisjZGVmaW5lIE5GQ19PVVRQVVQgICAgICAgICAweDgKKworLyogU2V0IElOVCB0byAwLCBGRDAgdG8gMDEwLCByZXN0IHRvIDAgaW4gTkZDX0NPTkZJRzIgUmVnaXN0ZXIKKyAqIGZvciBSZWFkIElEIG9wZXJhdGlvbiAqLworI2RlZmluZSBORkNfSUQgICAgICAgICAgICAgMHgxMAorCisvKiBTZXQgSU5UIHRvIDAsIEZETyB0byAxMDAsIHJlc3QgdG8gMCBpbiBORkNfQ09ORklHMiBSZWdpc3RlcgorICogZm9yIFJlYWQgU3RhdHVzIG9wZXJhdGlvbiAqLworI2RlZmluZSBORkNfU1RBVFVTICAgICAgICAgMHgyMAorCisvKiBTZXQgSU5UIHRvIDEsIHJlc3QgdG8gMCBpbiBORkNfQ09ORklHMiBSZWdpc3RlciBmb3IgUmVhZAorICogU3RhdHVzIG9wZXJhdGlvbiAqLworI2RlZmluZSBORkNfSU5UICAgICAgICAgICAgMHg4MDAwCisKKyNkZWZpbmUgTkZDX1NQX0VOICAgICAgICAgICAoMSA8PCAyKQorI2RlZmluZSBORkNfRUNDX0VOICAgICAgICAgICgxIDw8IDMpCisjZGVmaW5lIE5GQ19JTlRfTVNLICAgICAgICAgKDEgPDwgNCkKKyNkZWZpbmUgTkZDX0JJRyAgICAgICAgICAgICAoMSA8PCA1KQorI2RlZmluZSBORkNfUlNUICAgICAgICAgICAgICgxIDw8IDYpCisjZGVmaW5lIE5GQ19DRSAgICAgICAgICAgICAgKDEgPDwgNykKKyNkZWZpbmUgTkZDX09ORV9DWUNMRSAgICAgICAoMSA8PCA4KQorCitzdHJ1Y3QgbXhjX25hbmRfaG9zdCB7CisJc3RydWN0IG10ZF9pbmZvCQltdGQ7CisJc3RydWN0IG5hbmRfY2hpcAluYW5kOworCXN0cnVjdCBtdGRfcGFydGl0aW9uCSpwYXJ0czsKKwlzdHJ1Y3QgZGV2aWNlCQkqZGV2OworCisJdm9pZCBfX2lvbWVtCQkqcmVnczsKKwlpbnQJCQlzcGFyZV9vbmx5OworCWludAkJCXN0YXR1c19yZXF1ZXN0OworCWludAkJCXBhZ2VzaXplXzJrOworCXVpbnQxNl90CQljb2xfYWRkcjsKKwlzdHJ1Y3QgY2xrCQkqY2xrOworCWludAkJCWNsa19hY3Q7CisJaW50CQkJaXJxOworCisJd2FpdF9xdWV1ZV9oZWFkX3QJaXJxX3dhaXRxOworfTsKKworLyogRGVmaW5lIGRlbGF5cyBpbiBtaWNyb3NlYyBmb3IgTkFORCBkZXZpY2Ugb3BlcmF0aW9ucyAqLworI2RlZmluZSBUUk9QX1VTX0RFTEFZICAgMjAwMAorLyogTWFjcm9zIHRvIGdldCBieXRlIGFuZCBiaXQgcG9zaXRpb25zIG9mIEVDQyAqLworI2RlZmluZSBDT0xQT1MoeCkgICgoeCkgPj4gMykKKyNkZWZpbmUgQklUUE9TKHgpICgoeCkgJiAweGYpCisKKy8qIERlZmluZSBzaW5nbGUgYml0IEVycm9yIHBvc2l0aW9ucyBpbiBNYWluICYgU3BhcmUgYXJlYSAqLworI2RlZmluZSBNQUlOX1NJTkdMRUJJVF9FUlJPUiAweDQKKyNkZWZpbmUgU1BBUkVfU0lOR0xFQklUX0VSUk9SIDB4MQorCisvKiBPT0IgcGxhY2VtZW50IGJsb2NrIGZvciB1c2Ugd2l0aCBoYXJkd2FyZSBlY2MgZ2VuZXJhdGlvbiAqLworc3RhdGljIHN0cnVjdCBuYW5kX2VjY2xheW91dCBuYW5kX2h3X2VjY29vYl84ID0geworCS5lY2NieXRlcyA9IDUsCisJLmVjY3BvcyA9IHs2LCA3LCA4LCA5LCAxMH0sCisJLm9vYmZyZWUgPSB7ezAsIDV9LCB7MTEsIDV9LCB9Cit9OworCitzdGF0aWMgc3RydWN0IG5hbmRfZWNjbGF5b3V0IG5hbmRfaHdfZWNjb29iXzE2ID0geworCS5lY2NieXRlcyA9IDUsCisJLmVjY3BvcyA9IHs2LCA3LCA4LCA5LCAxMH0sCisJLm9vYmZyZWUgPSB7ezAsIDZ9LCB7MTIsIDR9LCB9Cit9OworCisjaWZkZWYgQ09ORklHX01URF9QQVJUSVRJT05TCitzdGF0aWMgY29uc3QgY2hhciAqcGFydF9wcm9iZXNbXSA9IHsgIlJlZEJvb3QiLCAiY21kbGluZXBhcnQiLCBOVUxMIH07CisjZW5kaWYKKworc3RhdGljIGlycXJldHVybl90IG14Y19uZmNfaXJxKGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3sKKwlzdHJ1Y3QgbXhjX25hbmRfaG9zdCAqaG9zdCA9IGRldl9pZDsKKworCXVpbnQxNl90IHRtcDsKKworCXRtcCA9IHJlYWR3KGhvc3QtPnJlZ3MgKyBORkNfQ09ORklHMSk7CisJdG1wIHw9IE5GQ19JTlRfTVNLOyAvKiBEaXNhYmxlIGludGVycnVwdCAqLworCXdyaXRldyh0bXAsIGhvc3QtPnJlZ3MgKyBORkNfQ09ORklHMSk7CisKKwl3YWtlX3VwKCZob3N0LT5pcnFfd2FpdHEpOworCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCisvKiBUaGlzIGZ1bmN0aW9uIHBvbGxzIHRoZSBOQU5ERkMgdG8gd2FpdCBmb3IgdGhlIGJhc2ljIG9wZXJhdGlvbiB0bworICogY29tcGxldGUgYnkgY2hlY2tpbmcgdGhlIElOVCBiaXQgb2YgY29uZmlnMiByZWdpc3Rlci4KKyAqLworc3RhdGljIHZvaWQgd2FpdF9vcF9kb25lKHN0cnVjdCBteGNfbmFuZF9ob3N0ICpob3N0LCBpbnQgbWF4X3JldHJpZXMsCisJCQkJdWludDE2X3QgcGFyYW0sIGludCB1c2VpcnEpCit7CisJdWludDMyX3QgdG1wOworCisJaWYgKHVzZWlycSkgeworCQlpZiAoKHJlYWR3KGhvc3QtPnJlZ3MgKyBORkNfQ09ORklHMikgJiBORkNfSU5UKSA9PSAwKSB7CisKKwkJCXRtcCA9IHJlYWR3KGhvc3QtPnJlZ3MgKyBORkNfQ09ORklHMSk7CisJCQl0bXAgICY9IH5ORkNfSU5UX01TSzsJLyogRW5hYmxlIGludGVycnVwdCAqLworCQkJd3JpdGV3KHRtcCwgaG9zdC0+cmVncyArIE5GQ19DT05GSUcxKTsKKworCQkJd2FpdF9ldmVudChob3N0LT5pcnFfd2FpdHEsCisJCQkJcmVhZHcoaG9zdC0+cmVncyArIE5GQ19DT05GSUcyKSAmIE5GQ19JTlQpOworCisJCQl0bXAgPSByZWFkdyhob3N0LT5yZWdzICsgTkZDX0NPTkZJRzIpOworCQkJdG1wICAmPSB+TkZDX0lOVDsKKwkJCXdyaXRldyh0bXAsIGhvc3QtPnJlZ3MgKyBORkNfQ09ORklHMik7CisJCX0KKwl9IGVsc2UgeworCQl3aGlsZSAobWF4X3JldHJpZXMtLSA+IDApIHsKKwkJCWlmIChyZWFkdyhob3N0LT5yZWdzICsgTkZDX0NPTkZJRzIpICYgTkZDX0lOVCkgeworCQkJCXRtcCA9IHJlYWR3KGhvc3QtPnJlZ3MgKyBORkNfQ09ORklHMik7CisJCQkJdG1wICAmPSB+TkZDX0lOVDsKKwkJCQl3cml0ZXcodG1wLCBob3N0LT5yZWdzICsgTkZDX0NPTkZJRzIpOworCQkJCWJyZWFrOworCQkJfQorCQkJdWRlbGF5KDEpOworCQl9CisJCWlmIChtYXhfcmV0cmllcyA8PSAwKQorCQkJREVCVUcoTVREX0RFQlVHX0xFVkVMMCwgIiVzKCVkKTogSU5UIG5vdCBzZXRcbiIsCisJCQkgICAgICBfX2Z1bmNfXywgcGFyYW0pOworCX0KK30KKworLyogVGhpcyBmdW5jdGlvbiBpc3N1ZXMgdGhlIHNwZWNpZmllZCBjb21tYW5kIHRvIHRoZSBOQU5EIGRldmljZSBhbmQKKyAqIHdhaXRzIGZvciBjb21wbGV0aW9uLiAqLworc3RhdGljIHZvaWQgc2VuZF9jbWQoc3RydWN0IG14Y19uYW5kX2hvc3QgKmhvc3QsIHVpbnQxNl90IGNtZCwgaW50IHVzZWlycSkKK3sKKwlERUJVRyhNVERfREVCVUdfTEVWRUwzLCAic2VuZF9jbWQoaG9zdCwgMHgleCwgJWQpXG4iLCBjbWQsIHVzZWlycSk7CisKKwl3cml0ZXcoY21kLCBob3N0LT5yZWdzICsgTkZDX0ZMQVNIX0NNRCk7CisJd3JpdGV3KE5GQ19DTUQsIGhvc3QtPnJlZ3MgKyBORkNfQ09ORklHMik7CisKKwkvKiBXYWl0IGZvciBvcGVyYXRpb24gdG8gY29tcGxldGUgKi8KKwl3YWl0X29wX2RvbmUoaG9zdCwgVFJPUF9VU19ERUxBWSwgY21kLCB1c2VpcnEpOworfQorCisvKiBUaGlzIGZ1bmN0aW9uIHNlbmRzIGFuIGFkZHJlc3MgKG9yIHBhcnRpYWwgYWRkcmVzcykgdG8gdGhlCisgKiBOQU5EIGRldmljZS4gVGhlIGFkZHJlc3MgaXMgdXNlZCB0byBzZWxlY3QgdGhlIHNvdXJjZS9kZXN0aW5hdGlvbiBmb3IKKyAqIGEgTkFORCBjb21tYW5kLiAqLworc3RhdGljIHZvaWQgc2VuZF9hZGRyKHN0cnVjdCBteGNfbmFuZF9ob3N0ICpob3N0LCB1aW50MTZfdCBhZGRyLCBpbnQgaXNsYXN0KQoreworCURFQlVHKE1URF9ERUJVR19MRVZFTDMsICJzZW5kX2FkZHIoaG9zdCwgMHgleCAlZClcbiIsIGFkZHIsIGlzbGFzdCk7CisKKwl3cml0ZXcoYWRkciwgaG9zdC0+cmVncyArIE5GQ19GTEFTSF9BRERSKTsKKwl3cml0ZXcoTkZDX0FERFIsIGhvc3QtPnJlZ3MgKyBORkNfQ09ORklHMik7CisKKwkvKiBXYWl0IGZvciBvcGVyYXRpb24gdG8gY29tcGxldGUgKi8KKwl3YWl0X29wX2RvbmUoaG9zdCwgVFJPUF9VU19ERUxBWSwgYWRkciwgaXNsYXN0KTsKK30KKworLyogVGhpcyBmdW5jdGlvbiByZXF1ZXN0cyB0aGUgTkFOREZDIHRvIGluaXRhdGUgdGhlIHRyYW5zZmVyCisgKiBvZiBkYXRhIGN1cnJlbnRseSBpbiB0aGUgTkFOREZDIFJBTSBidWZmZXIgdG8gdGhlIE5BTkQgZGV2aWNlLiAqLworc3RhdGljIHZvaWQgc2VuZF9wcm9nX3BhZ2Uoc3RydWN0IG14Y19uYW5kX2hvc3QgKmhvc3QsIHVpbnQ4X3QgYnVmX2lkLAorCQkJaW50IHNwYXJlX29ubHkpCit7CisJREVCVUcoTVREX0RFQlVHX0xFVkVMMywgInNlbmRfcHJvZ19wYWdlICglZClcbiIsIHNwYXJlX29ubHkpOworCisJLyogTkFOREZDIGJ1ZmZlciAwIGlzIHVzZWQgZm9yIHBhZ2UgcmVhZC93cml0ZSAqLworCXdyaXRldyhidWZfaWQsIGhvc3QtPnJlZ3MgKyBORkNfQlVGX0FERFIpOworCisJLyogQ29uZmlndXJlIHNwYXJlIG9yIHBhZ2Urc3BhcmUgYWNjZXNzICovCisJaWYgKCFob3N0LT5wYWdlc2l6ZV8yaykgeworCQl1aW50MTZfdCBjb25maWcxID0gcmVhZHcoaG9zdC0+cmVncyArIE5GQ19DT05GSUcxKTsKKwkJaWYgKHNwYXJlX29ubHkpCisJCQljb25maWcxIHw9IE5GQ19TUF9FTjsKKwkJZWxzZQorCQkJY29uZmlnMSAmPSB+KE5GQ19TUF9FTik7CisJCXdyaXRldyhjb25maWcxLCBob3N0LT5yZWdzICsgTkZDX0NPTkZJRzEpOworCX0KKworCXdyaXRldyhORkNfSU5QVVQsIGhvc3QtPnJlZ3MgKyBORkNfQ09ORklHMik7CisKKwkvKiBXYWl0IGZvciBvcGVyYXRpb24gdG8gY29tcGxldGUgKi8KKwl3YWl0X29wX2RvbmUoaG9zdCwgVFJPUF9VU19ERUxBWSwgc3BhcmVfb25seSwgdHJ1ZSk7Cit9CisKKy8qIFJlcXVlc3RzIE5BTkRGQyB0byBpbml0YXRlZCB0aGUgdHJhbnNmZXIgb2YgZGF0YSBmcm9tIHRoZQorICogTkFORCBkZXZpY2UgaW50byBpbiB0aGUgTkFOREZDIHJhbSBidWZmZXIuICovCitzdGF0aWMgdm9pZCBzZW5kX3JlYWRfcGFnZShzdHJ1Y3QgbXhjX25hbmRfaG9zdCAqaG9zdCwgdWludDhfdCBidWZfaWQsCisJCWludCBzcGFyZV9vbmx5KQoreworCURFQlVHKE1URF9ERUJVR19MRVZFTDMsICJzZW5kX3JlYWRfcGFnZSAoJWQpXG4iLCBzcGFyZV9vbmx5KTsKKworCS8qIE5BTkRGQyBidWZmZXIgMCBpcyB1c2VkIGZvciBwYWdlIHJlYWQvd3JpdGUgKi8KKwl3cml0ZXcoYnVmX2lkLCBob3N0LT5yZWdzICsgTkZDX0JVRl9BRERSKTsKKworCS8qIENvbmZpZ3VyZSBzcGFyZSBvciBwYWdlK3NwYXJlIGFjY2VzcyAqLworCWlmICghaG9zdC0+cGFnZXNpemVfMmspIHsKKwkJdWludDMyX3QgY29uZmlnMSA9IHJlYWR3KGhvc3QtPnJlZ3MgKyBORkNfQ09ORklHMSk7CisJCWlmIChzcGFyZV9vbmx5KQorCQkJY29uZmlnMSB8PSBORkNfU1BfRU47CisJCWVsc2UKKwkJCWNvbmZpZzEgJj0gfk5GQ19TUF9FTjsKKwkJd3JpdGV3KGNvbmZpZzEsIGhvc3QtPnJlZ3MgKyBORkNfQ09ORklHMSk7CisJfQorCisJd3JpdGV3KE5GQ19PVVRQVVQsIGhvc3QtPnJlZ3MgKyBORkNfQ09ORklHMik7CisKKwkvKiBXYWl0IGZvciBvcGVyYXRpb24gdG8gY29tcGxldGUgKi8KKwl3YWl0X29wX2RvbmUoaG9zdCwgVFJPUF9VU19ERUxBWSwgc3BhcmVfb25seSwgdHJ1ZSk7Cit9CisKKy8qIFJlcXVlc3QgdGhlIE5BTkRGQyB0byBwZXJmb3JtIGEgcmVhZCBvZiB0aGUgTkFORCBkZXZpY2UgSUQuICovCitzdGF0aWMgdm9pZCBzZW5kX3JlYWRfaWQoc3RydWN0IG14Y19uYW5kX2hvc3QgKmhvc3QpCit7CisJc3RydWN0IG5hbmRfY2hpcCAqdGhpcyA9ICZob3N0LT5uYW5kOworCXVpbnQxNl90IHRtcDsKKworCS8qIE5BTkRGQyBidWZmZXIgMCBpcyB1c2VkIGZvciBkZXZpY2UgSUQgb3V0cHV0ICovCisJd3JpdGV3KDB4MCwgaG9zdC0+cmVncyArIE5GQ19CVUZfQUREUik7CisKKwkvKiBSZWFkIElEIGludG8gbWFpbiBidWZmZXIgKi8KKwl0bXAgPSByZWFkdyhob3N0LT5yZWdzICsgTkZDX0NPTkZJRzEpOworCXRtcCAmPSB+TkZDX1NQX0VOOworCXdyaXRldyh0bXAsIGhvc3QtPnJlZ3MgKyBORkNfQ09ORklHMSk7CisKKwl3cml0ZXcoTkZDX0lELCBob3N0LT5yZWdzICsgTkZDX0NPTkZJRzIpOworCisJLyogV2FpdCBmb3Igb3BlcmF0aW9uIHRvIGNvbXBsZXRlICovCisJd2FpdF9vcF9kb25lKGhvc3QsIFRST1BfVVNfREVMQVksIDAsIHRydWUpOworCisJaWYgKHRoaXMtPm9wdGlvbnMgJiBOQU5EX0JVU1dJRFRIXzE2KSB7CisJCXZvaWQgX19pb21lbSAqbWFpbl9idWYgPSBob3N0LT5yZWdzICsgTUFJTl9BUkVBMDsKKwkJLyogY29tcHJlc3MgdGhlIElEIGluZm8gKi8KKwkJd3JpdGViKHJlYWRiKG1haW5fYnVmICsgMiksIG1haW5fYnVmICsgMSk7CisJCXdyaXRlYihyZWFkYihtYWluX2J1ZiArIDQpLCBtYWluX2J1ZiArIDIpOworCQl3cml0ZWIocmVhZGIobWFpbl9idWYgKyA2KSwgbWFpbl9idWYgKyAzKTsKKwkJd3JpdGViKHJlYWRiKG1haW5fYnVmICsgOCksIG1haW5fYnVmICsgNCk7CisJCXdyaXRlYihyZWFkYihtYWluX2J1ZiArIDEwKSwgbWFpbl9idWYgKyA1KTsKKwl9Cit9CisKKy8qIFRoaXMgZnVuY3Rpb24gcmVxdWVzdHMgdGhlIE5BTkRGQyB0byBwZXJmb3JtIGEgcmVhZCBvZiB0aGUKKyAqIE5BTkQgZGV2aWNlIHN0YXR1cyBhbmQgcmV0dXJucyB0aGUgY3VycmVudCBzdGF0dXMuICovCitzdGF0aWMgdWludDE2X3QgZ2V0X2Rldl9zdGF0dXMoc3RydWN0IG14Y19uYW5kX2hvc3QgKmhvc3QpCit7CisJdm9pZCBfX2lvbWVtICptYWluX2J1ZiA9IGhvc3QtPnJlZ3MgKyBNQUlOX0FSRUExOworCXVpbnQzMl90IHN0b3JlOworCXVpbnQxNl90IHJldCwgdG1wOworCS8qIElzc3VlIHN0YXR1cyByZXF1ZXN0IHRvIE5BTkQgZGV2aWNlICovCisKKwkvKiBzdG9yZSB0aGUgbWFpbiBhcmVhMSBmaXJzdCB3b3JkLCBsYXRlciBkbyByZWNvdmVyeSAqLworCXN0b3JlID0gcmVhZGwobWFpbl9idWYpOworCS8qIE5BTkRGQyBidWZmZXIgMSBpcyB1c2VkIGZvciBkZXZpY2Ugc3RhdHVzIHRvIHByZXZlbnQKKwkgKiBjb3JydXB0aW9uIG9mIHJlYWQvd3JpdGUgYnVmZmVyIG9uIHN0YXR1cyByZXF1ZXN0cy4gKi8KKwl3cml0ZXcoMSwgaG9zdC0+cmVncyArIE5GQ19CVUZfQUREUik7CisKKwkvKiBSZWFkIHN0YXR1cyBpbnRvIG1haW4gYnVmZmVyICovCisJdG1wID0gcmVhZHcoaG9zdC0+cmVncyArIE5GQ19DT05GSUcxKTsKKwl0bXAgJj0gfk5GQ19TUF9FTjsKKwl3cml0ZXcodG1wLCBob3N0LT5yZWdzICsgTkZDX0NPTkZJRzEpOworCisJd3JpdGV3KE5GQ19TVEFUVVMsIGhvc3QtPnJlZ3MgKyBORkNfQ09ORklHMik7CisKKwkvKiBXYWl0IGZvciBvcGVyYXRpb24gdG8gY29tcGxldGUgKi8KKwl3YWl0X29wX2RvbmUoaG9zdCwgVFJPUF9VU19ERUxBWSwgMCwgdHJ1ZSk7CisKKwkvKiBTdGF0dXMgaXMgcGxhY2VkIGluIGZpcnN0IHdvcmQgb2YgbWFpbiBidWZmZXIgKi8KKwkvKiBnZXQgc3RhdHVzLCB0aGVuIHJlY292ZXJ5IGFyZWEgMSBkYXRhICovCisJcmV0ID0gcmVhZHcobWFpbl9idWYpOworCXdyaXRlbChzdG9yZSwgbWFpbl9idWYpOworCisJcmV0dXJuIHJldDsKK30KKworLyogVGhpcyBmdW5jdGlvbnMgaXMgdXNlZCBieSB1cHBlciBsYXllciB0byBjaGVja3MgaWYgZGV2aWNlIGlzIHJlYWR5ICovCitzdGF0aWMgaW50IG14Y19uYW5kX2Rldl9yZWFkeShzdHJ1Y3QgbXRkX2luZm8gKm10ZCkKK3sKKwkvKgorCSAqIE5GQyBoYW5kbGVzIFIvQiBpbnRlcm5hbGx5LiBUaGVyZWZvcmUsIHRoaXMgZnVuY3Rpb24KKwkgKiBhbHdheXMgcmV0dXJucyBzdGF0dXMgYXMgcmVhZHkuCisJICovCisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyB2b2lkIG14Y19uYW5kX2VuYWJsZV9od2VjYyhzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgaW50IG1vZGUpCit7CisJLyoKKwkgKiBJZiBIVyBFQ0MgaXMgZW5hYmxlZCwgd2UgdHVybiBpdCBvbiBkdXJpbmcgaW5pdC4gVGhlcmUgaXMKKwkgKiBubyBuZWVkIHRvIGVuYWJsZSBhZ2FpbiBoZXJlLgorCSAqLworfQorCitzdGF0aWMgaW50IG14Y19uYW5kX2NvcnJlY3RfZGF0YShzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgdV9jaGFyICpkYXQsCisJCQkJIHVfY2hhciAqcmVhZF9lY2MsIHVfY2hhciAqY2FsY19lY2MpCit7CisJc3RydWN0IG5hbmRfY2hpcCAqbmFuZF9jaGlwID0gbXRkLT5wcml2OworCXN0cnVjdCBteGNfbmFuZF9ob3N0ICpob3N0ID0gbmFuZF9jaGlwLT5wcml2OworCisJLyoKKwkgKiAxLUJpdCBlcnJvcnMgYXJlIGF1dG9tYXRpY2FsbHkgY29ycmVjdGVkIGluIEhXLiAgTm8gbmVlZCBmb3IKKwkgKiBhZGRpdGlvbmFsIGNvcnJlY3Rpb24uICAyLUJpdCBlcnJvcnMgY2Fubm90IGJlIGNvcnJlY3RlZCBieQorCSAqIEhXIEVDQywgc28gd2UgbmVlZCB0byByZXR1cm4gZmFpbHVyZQorCSAqLworCXVpbnQxNl90IGVjY19zdGF0dXMgPSByZWFkdyhob3N0LT5yZWdzICsgTkZDX0VDQ19TVEFUVVNfUkVTVUxUKTsKKworCWlmICgoKGVjY19zdGF0dXMgJiAweDMpID09IDIpIHx8ICgoZWNjX3N0YXR1cyA+PiAyKSA9PSAyKSkgeworCQlERUJVRyhNVERfREVCVUdfTEVWRUwwLAorCQkgICAgICAiTVhDX05BTkQ6IEhXRUNDIHVuY29ycmVjdGFibGUgMi1iaXQgRUNDIGVycm9yXG4iKTsKKwkJcmV0dXJuIC0xOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG14Y19uYW5kX2NhbGN1bGF0ZV9lY2Moc3RydWN0IG10ZF9pbmZvICptdGQsIGNvbnN0IHVfY2hhciAqZGF0LAorCQkJCSAgdV9jaGFyICplY2NfY29kZSkKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHVfY2hhciBteGNfbmFuZF9yZWFkX2J5dGUoc3RydWN0IG10ZF9pbmZvICptdGQpCit7CisJc3RydWN0IG5hbmRfY2hpcCAqbmFuZF9jaGlwID0gbXRkLT5wcml2OworCXN0cnVjdCBteGNfbmFuZF9ob3N0ICpob3N0ID0gbmFuZF9jaGlwLT5wcml2OworCXVpbnQ4X3QgcmV0ID0gMDsKKwl1aW50MTZfdCBjb2wsIHJkX3dvcmQ7CisJdWludDE2X3QgX19pb21lbSAqbWFpbl9idWYgPSBob3N0LT5yZWdzICsgTUFJTl9BUkVBMDsKKwl1aW50MTZfdCBfX2lvbWVtICpzcGFyZV9idWYgPSBob3N0LT5yZWdzICsgU1BBUkVfQVJFQTA7CisKKwkvKiBDaGVjayBmb3Igc3RhdHVzIHJlcXVlc3QgKi8KKwlpZiAoaG9zdC0+c3RhdHVzX3JlcXVlc3QpCisJCXJldHVybiBnZXRfZGV2X3N0YXR1cyhob3N0KSAmIDB4RkY7CisKKwkvKiBHZXQgY29sdW1uIGZvciAxNi1iaXQgYWNjZXNzICovCisJY29sID0gaG9zdC0+Y29sX2FkZHIgPj4gMTsKKworCS8qIElmIHdlIGFyZSBhY2Nlc3NpbmcgdGhlIHNwYXJlIHJlZ2lvbiAqLworCWlmIChob3N0LT5zcGFyZV9vbmx5KQorCQlyZF93b3JkID0gcmVhZHcoJnNwYXJlX2J1Zltjb2xdKTsKKwllbHNlCisJCXJkX3dvcmQgPSByZWFkdygmbWFpbl9idWZbY29sXSk7CisKKwkvKiBQaWNrIHVwcGVyL2xvd2VyIGJ5dGUgb2Ygd29yZCBmcm9tIFJBTSBidWZmZXIgKi8KKwlpZiAoaG9zdC0+Y29sX2FkZHIgJiAweDEpCisJCXJldCA9IChyZF93b3JkID4+IDgpICYgMHhGRjsKKwllbHNlCisJCXJldCA9IHJkX3dvcmQgJiAweEZGOworCisJLyogVXBkYXRlIHNhdmVkIGNvbHVtbiBhZGRyZXNzICovCisJaG9zdC0+Y29sX2FkZHIrKzsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB1aW50MTZfdCBteGNfbmFuZF9yZWFkX3dvcmQoc3RydWN0IG10ZF9pbmZvICptdGQpCit7CisJc3RydWN0IG5hbmRfY2hpcCAqbmFuZF9jaGlwID0gbXRkLT5wcml2OworCXN0cnVjdCBteGNfbmFuZF9ob3N0ICpob3N0ID0gbmFuZF9jaGlwLT5wcml2OworCXVpbnQxNl90IGNvbCwgcmRfd29yZCwgcmV0OworCXVpbnQxNl90IF9faW9tZW0gKnA7CisKKwlERUJVRyhNVERfREVCVUdfTEVWRUwzLAorCSAgICAgICJteGNfbmFuZF9yZWFkX3dvcmQoY29sID0gJWQpXG4iLCBob3N0LT5jb2xfYWRkcik7CisKKwljb2wgPSBob3N0LT5jb2xfYWRkcjsKKwkvKiBBZGp1c3Qgc2F2ZWQgY29sdW1uIGFkZHJlc3MgKi8KKwlpZiAoY29sIDwgbXRkLT53cml0ZXNpemUgJiYgaG9zdC0+c3BhcmVfb25seSkKKwkJY29sICs9IG10ZC0+d3JpdGVzaXplOworCisJaWYgKGNvbCA8IG10ZC0+d3JpdGVzaXplKQorCQlwID0gKGhvc3QtPnJlZ3MgKyBNQUlOX0FSRUEwKSArIChjb2wgPj4gMSk7CisJZWxzZQorCQlwID0gKGhvc3QtPnJlZ3MgKyBTUEFSRV9BUkVBMCkgKyAoKGNvbCAtIG10ZC0+d3JpdGVzaXplKSA+PiAxKTsKKworCWlmIChjb2wgJiAxKSB7CisJCXJkX3dvcmQgPSByZWFkdyhwKTsKKwkJcmV0ID0gKHJkX3dvcmQgPj4gOCkgJiAweGZmOworCQlyZF93b3JkID0gcmVhZHcoJnBbMV0pOworCQlyZXQgfD0gKHJkX3dvcmQgPDwgOCkgJiAweGZmMDA7CisKKwl9IGVsc2UKKwkJcmV0ID0gcmVhZHcocCk7CisKKwkvKiBVcGRhdGUgc2F2ZWQgY29sdW1uIGFkZHJlc3MgKi8KKwlob3N0LT5jb2xfYWRkciA9IGNvbCArIDI7CisKKwlyZXR1cm4gcmV0OworfQorCisvKiBXcml0ZSBkYXRhIG9mIGxlbmd0aCBsZW4gdG8gYnVmZmVyIGJ1Zi4gVGhlIGRhdGEgdG8gYmUKKyAqIHdyaXR0ZW4gb24gTkFORCBGbGFzaCBpcyBmaXJzdCBjb3BpZWQgdG8gUkFNYnVmZmVyLiBBZnRlciB0aGUgRGF0YSBJbnB1dAorICogT3BlcmF0aW9uIGJ5IHRoZSBORkMsIHRoZSBkYXRhIGlzIHdyaXR0ZW4gdG8gTkFORCBGbGFzaCAqLworc3RhdGljIHZvaWQgbXhjX25hbmRfd3JpdGVfYnVmKHN0cnVjdCBtdGRfaW5mbyAqbXRkLAorCQkJCWNvbnN0IHVfY2hhciAqYnVmLCBpbnQgbGVuKQoreworCXN0cnVjdCBuYW5kX2NoaXAgKm5hbmRfY2hpcCA9IG10ZC0+cHJpdjsKKwlzdHJ1Y3QgbXhjX25hbmRfaG9zdCAqaG9zdCA9IG5hbmRfY2hpcC0+cHJpdjsKKwlpbnQgbiwgY29sLCBpID0gMDsKKworCURFQlVHKE1URF9ERUJVR19MRVZFTDMsCisJICAgICAgIm14Y19uYW5kX3dyaXRlX2J1Zihjb2wgPSAlZCwgbGVuID0gJWQpXG4iLCBob3N0LT5jb2xfYWRkciwKKwkgICAgICBsZW4pOworCisJY29sID0gaG9zdC0+Y29sX2FkZHI7CisKKwkvKiBBZGp1c3Qgc2F2ZWQgY29sdW1uIGFkZHJlc3MgKi8KKwlpZiAoY29sIDwgbXRkLT53cml0ZXNpemUgJiYgaG9zdC0+c3BhcmVfb25seSkKKwkJY29sICs9IG10ZC0+d3JpdGVzaXplOworCisJbiA9IG10ZC0+d3JpdGVzaXplICsgbXRkLT5vb2JzaXplIC0gY29sOworCW4gPSBtaW4obGVuLCBuKTsKKworCURFQlVHKE1URF9ERUJVR19MRVZFTDMsCisJICAgICAgIiVzOiVkOiBjb2wgPSAlZCwgbiA9ICVkXG4iLCBfX2Z1bmNfXywgX19MSU5FX18sIGNvbCwgbik7CisKKwl3aGlsZSAobikgeworCQl2b2lkIF9faW9tZW0gKnA7CisKKwkJaWYgKGNvbCA8IG10ZC0+d3JpdGVzaXplKQorCQkJcCA9IGhvc3QtPnJlZ3MgKyBNQUlOX0FSRUEwICsgKGNvbCAmIH4zKTsKKwkJZWxzZQorCQkJcCA9IGhvc3QtPnJlZ3MgKyBTUEFSRV9BUkVBMCAtCisJCQkJCQltdGQtPndyaXRlc2l6ZSArIChjb2wgJiB+Myk7CisKKwkJREVCVUcoTVREX0RFQlVHX0xFVkVMMywgIiVzOiVkOiBwID0gJXBcbiIsIF9fZnVuY19fLAorCQkgICAgICBfX0xJTkVfXywgcCk7CisKKwkJaWYgKCgoY29sIHwgKGludCkmYnVmW2ldKSAmIDMpIHx8IG4gPCAxNikgeworCQkJdWludDMyX3QgZGF0YSA9IDA7CisKKwkJCWlmIChjb2wgJiAzIHx8IG4gPCA0KQorCQkJCWRhdGEgPSByZWFkbChwKTsKKworCQkJc3dpdGNoIChjb2wgJiAzKSB7CisJCQljYXNlIDA6CisJCQkJaWYgKG4pIHsKKwkJCQkJZGF0YSA9IChkYXRhICYgMHhmZmZmZmYwMCkgfAorCQkJCQkgICAgKGJ1ZltpKytdIDw8IDApOworCQkJCQluLS07CisJCQkJCWNvbCsrOworCQkJCX0KKwkJCWNhc2UgMToKKwkJCQlpZiAobikgeworCQkJCQlkYXRhID0gKGRhdGEgJiAweGZmZmYwMGZmKSB8CisJCQkJCSAgICAoYnVmW2krK10gPDwgOCk7CisJCQkJCW4tLTsKKwkJCQkJY29sKys7CisJCQkJfQorCQkJY2FzZSAyOgorCQkJCWlmIChuKSB7CisJCQkJCWRhdGEgPSAoZGF0YSAmIDB4ZmYwMGZmZmYpIHwKKwkJCQkJICAgIChidWZbaSsrXSA8PCAxNik7CisJCQkJCW4tLTsKKwkJCQkJY29sKys7CisJCQkJfQorCQkJY2FzZSAzOgorCQkJCWlmIChuKSB7CisJCQkJCWRhdGEgPSAoZGF0YSAmIDB4MDBmZmZmZmYpIHwKKwkJCQkJICAgIChidWZbaSsrXSA8PCAyNCk7CisJCQkJCW4tLTsKKwkJCQkJY29sKys7CisJCQkJfQorCQkJfQorCisJCQl3cml0ZWwoZGF0YSwgcCk7CisJCX0gZWxzZSB7CisJCQlpbnQgbSA9IG10ZC0+d3JpdGVzaXplIC0gY29sOworCisJCQlpZiAoY29sID49IG10ZC0+d3JpdGVzaXplKQorCQkJCW0gKz0gbXRkLT5vb2JzaXplOworCisJCQltID0gbWluKG4sIG0pICYgfjM7CisKKwkJCURFQlVHKE1URF9ERUJVR19MRVZFTDMsCisJCQkgICAgICAiJXM6JWQ6IG4gPSAlZCwgbSA9ICVkLCBpID0gJWQsIGNvbCA9ICVkXG4iLAorCQkJICAgICAgX19mdW5jX18sICBfX0xJTkVfXywgbiwgbSwgaSwgY29sKTsKKworCQkJbWVtY3B5KHAsICZidWZbaV0sIG0pOworCQkJY29sICs9IG07CisJCQlpICs9IG07CisJCQluIC09IG07CisJCX0KKwl9CisJLyogVXBkYXRlIHNhdmVkIGNvbHVtbiBhZGRyZXNzICovCisJaG9zdC0+Y29sX2FkZHIgPSBjb2w7Cit9CisKKy8qIFJlYWQgdGhlIGRhdGEgYnVmZmVyIGZyb20gdGhlIE5BTkQgRmxhc2guIFRvIHJlYWQgdGhlIGRhdGEgZnJvbSBOQU5ECisgKiBGbGFzaCBmaXJzdCB0aGUgZGF0YSBvdXRwdXQgY3ljbGUgaXMgaW5pdGlhdGVkIGJ5IHRoZSBORkMsIHdoaWNoIGNvcGllcworICogdGhlIGRhdGEgdG8gUkFNYnVmZmVyLiBUaGlzIGRhdGEgb2YgbGVuZ3RoIGxlbiBpcyB0aGVuIGNvcGllZCB0byBidWZmZXIgYnVmLgorICovCitzdGF0aWMgdm9pZCBteGNfbmFuZF9yZWFkX2J1ZihzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgdV9jaGFyICpidWYsIGludCBsZW4pCit7CisJc3RydWN0IG5hbmRfY2hpcCAqbmFuZF9jaGlwID0gbXRkLT5wcml2OworCXN0cnVjdCBteGNfbmFuZF9ob3N0ICpob3N0ID0gbmFuZF9jaGlwLT5wcml2OworCWludCBuLCBjb2wsIGkgPSAwOworCisJREVCVUcoTVREX0RFQlVHX0xFVkVMMywKKwkgICAgICAibXhjX25hbmRfcmVhZF9idWYoY29sID0gJWQsIGxlbiA9ICVkKVxuIiwgaG9zdC0+Y29sX2FkZHIsIGxlbik7CisKKwljb2wgPSBob3N0LT5jb2xfYWRkcjsKKworCS8qIEFkanVzdCBzYXZlZCBjb2x1bW4gYWRkcmVzcyAqLworCWlmIChjb2wgPCBtdGQtPndyaXRlc2l6ZSAmJiBob3N0LT5zcGFyZV9vbmx5KQorCQljb2wgKz0gbXRkLT53cml0ZXNpemU7CisKKwluID0gbXRkLT53cml0ZXNpemUgKyBtdGQtPm9vYnNpemUgLSBjb2w7CisJbiA9IG1pbihsZW4sIG4pOworCisJd2hpbGUgKG4pIHsKKwkJdm9pZCBfX2lvbWVtICpwOworCisJCWlmIChjb2wgPCBtdGQtPndyaXRlc2l6ZSkKKwkJCXAgPSBob3N0LT5yZWdzICsgTUFJTl9BUkVBMCArIChjb2wgJiB+Myk7CisJCWVsc2UKKwkJCXAgPSBob3N0LT5yZWdzICsgU1BBUkVfQVJFQTAgLQorCQkJCQltdGQtPndyaXRlc2l6ZSArIChjb2wgJiB+Myk7CisKKwkJaWYgKCgoY29sIHwgKGludCkmYnVmW2ldKSAmIDMpIHx8IG4gPCAxNikgeworCQkJdWludDMyX3QgZGF0YTsKKworCQkJZGF0YSA9IHJlYWRsKHApOworCQkJc3dpdGNoIChjb2wgJiAzKSB7CisJCQljYXNlIDA6CisJCQkJaWYgKG4pIHsKKwkJCQkJYnVmW2krK10gPSAodWludDhfdCkgKGRhdGEpOworCQkJCQluLS07CisJCQkJCWNvbCsrOworCQkJCX0KKwkJCWNhc2UgMToKKwkJCQlpZiAobikgeworCQkJCQlidWZbaSsrXSA9ICh1aW50OF90KSAoZGF0YSA+PiA4KTsKKwkJCQkJbi0tOworCQkJCQljb2wrKzsKKwkJCQl9CisJCQljYXNlIDI6CisJCQkJaWYgKG4pIHsKKwkJCQkJYnVmW2krK10gPSAodWludDhfdCkgKGRhdGEgPj4gMTYpOworCQkJCQluLS07CisJCQkJCWNvbCsrOworCQkJCX0KKwkJCWNhc2UgMzoKKwkJCQlpZiAobikgeworCQkJCQlidWZbaSsrXSA9ICh1aW50OF90KSAoZGF0YSA+PiAyNCk7CisJCQkJCW4tLTsKKwkJCQkJY29sKys7CisJCQkJfQorCQkJfQorCQl9IGVsc2UgeworCQkJaW50IG0gPSBtdGQtPndyaXRlc2l6ZSAtIGNvbDsKKworCQkJaWYgKGNvbCA+PSBtdGQtPndyaXRlc2l6ZSkKKwkJCQltICs9IG10ZC0+b29ic2l6ZTsKKworCQkJbSA9IG1pbihuLCBtKSAmIH4zOworCQkJbWVtY3B5KCZidWZbaV0sIHAsIG0pOworCQkJY29sICs9IG07CisJCQlpICs9IG07CisJCQluIC09IG07CisJCX0KKwl9CisJLyogVXBkYXRlIHNhdmVkIGNvbHVtbiBhZGRyZXNzICovCisJaG9zdC0+Y29sX2FkZHIgPSBjb2w7CisKK30KKworLyogVXNlZCBieSB0aGUgdXBwZXIgbGF5ZXIgdG8gdmVyaWZ5IHRoZSBkYXRhIGluIE5BTkQgRmxhc2gKKyAqIHdpdGggdGhlIGRhdGEgaW4gdGhlIGJ1Zi4gKi8KK3N0YXRpYyBpbnQgbXhjX25hbmRfdmVyaWZ5X2J1ZihzdHJ1Y3QgbXRkX2luZm8gKm10ZCwKKwkJCQljb25zdCB1X2NoYXIgKmJ1ZiwgaW50IGxlbikKK3sKKwlyZXR1cm4gLUVGQVVMVDsKK30KKworLyogVGhpcyBmdW5jdGlvbiBpcyB1c2VkIGJ5IHVwcGVyIGxheWVyIGZvciBzZWxlY3QgYW5kCisgKiBkZXNlbGVjdCBvZiB0aGUgTkFORCBjaGlwICovCitzdGF0aWMgdm9pZCBteGNfbmFuZF9zZWxlY3RfY2hpcChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgaW50IGNoaXApCit7CisJc3RydWN0IG5hbmRfY2hpcCAqbmFuZF9jaGlwID0gbXRkLT5wcml2OworCXN0cnVjdCBteGNfbmFuZF9ob3N0ICpob3N0ID0gbmFuZF9jaGlwLT5wcml2OworCisjaWZkZWYgQ09ORklHX01URF9OQU5EX01YQ19GT1JDRV9DRQorCWlmIChjaGlwID4gMCkgeworCQlERUJVRyhNVERfREVCVUdfTEVWRUwwLAorCQkgICAgICAiRVJST1I6ICBJbGxlZ2FsIGNoaXAgc2VsZWN0IChjaGlwID0gJWQpXG4iLCBjaGlwKTsKKwkJcmV0dXJuOworCX0KKworCWlmIChjaGlwID09IC0xKSB7CisJCXdyaXRldyhyZWFkdyhob3N0LT5yZWdzICsgTkZDX0NPTkZJRzEpICYgfk5GQ19DRSwKKwkJCQlob3N0LT5yZWdzICsgTkZDX0NPTkZJRzEpOworCQlyZXR1cm47CisJfQorCisJd3JpdGV3KHJlYWR3KGhvc3QtPnJlZ3MgKyBORkNfQ09ORklHMSkgfCBORkNfQ0UsCisJCQlob3N0LT5yZWdzICsgTkZDX0NPTkZJRzEpOworI2VuZGlmCisKKwlzd2l0Y2ggKGNoaXApIHsKKwljYXNlIC0xOgorCQkvKiBEaXNhYmxlIHRoZSBORkMgY2xvY2sgKi8KKwkJaWYgKGhvc3QtPmNsa19hY3QpIHsKKwkJCWNsa19kaXNhYmxlKGhvc3QtPmNsayk7CisJCQlob3N0LT5jbGtfYWN0ID0gMDsKKwkJfQorCQlicmVhazsKKwljYXNlIDA6CisJCS8qIEVuYWJsZSB0aGUgTkZDIGNsb2NrICovCisJCWlmICghaG9zdC0+Y2xrX2FjdCkgeworCQkJY2xrX2VuYWJsZShob3N0LT5jbGspOworCQkJaG9zdC0+Y2xrX2FjdCA9IDE7CisJCX0KKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9Cit9CisKKy8qIFVzZWQgYnkgdGhlIHVwcGVyIGxheWVyIHRvIHdyaXRlIGNvbW1hbmQgdG8gTkFORCBGbGFzaCBmb3IKKyAqIGRpZmZlcmVudCBvcGVyYXRpb25zIHRvIGJlIGNhcnJpZWQgb3V0IG9uIE5BTkQgRmxhc2ggKi8KK3N0YXRpYyB2b2lkIG14Y19uYW5kX2NvbW1hbmQoc3RydWN0IG10ZF9pbmZvICptdGQsIHVuc2lnbmVkIGNvbW1hbmQsCisJCQkJaW50IGNvbHVtbiwgaW50IHBhZ2VfYWRkcikKK3sKKwlzdHJ1Y3QgbmFuZF9jaGlwICpuYW5kX2NoaXAgPSBtdGQtPnByaXY7CisJc3RydWN0IG14Y19uYW5kX2hvc3QgKmhvc3QgPSBuYW5kX2NoaXAtPnByaXY7CisJaW50IHVzZWlycSA9IHRydWU7CisKKwlERUJVRyhNVERfREVCVUdfTEVWRUwzLAorCSAgICAgICJteGNfbmFuZF9jb21tYW5kIChjbWQgPSAweCV4LCBjb2wgPSAweCV4LCBwYWdlID0gMHgleClcbiIsCisJICAgICAgY29tbWFuZCwgY29sdW1uLCBwYWdlX2FkZHIpOworCisJLyogUmVzZXQgY29tbWFuZCBzdGF0ZSBpbmZvcm1hdGlvbiAqLworCWhvc3QtPnN0YXR1c19yZXF1ZXN0ID0gZmFsc2U7CisKKwkvKiBDb21tYW5kIHByZS1wcm9jZXNzaW5nIHN0ZXAgKi8KKwlzd2l0Y2ggKGNvbW1hbmQpIHsKKworCWNhc2UgTkFORF9DTURfU1RBVFVTOgorCQlob3N0LT5jb2xfYWRkciA9IDA7CisJCWhvc3QtPnN0YXR1c19yZXF1ZXN0ID0gdHJ1ZTsKKwkJYnJlYWs7CisKKwljYXNlIE5BTkRfQ01EX1JFQUQwOgorCQlob3N0LT5jb2xfYWRkciA9IGNvbHVtbjsKKwkJaG9zdC0+c3BhcmVfb25seSA9IGZhbHNlOworCQl1c2VpcnEgPSBmYWxzZTsKKwkJYnJlYWs7CisKKwljYXNlIE5BTkRfQ01EX1JFQURPT0I6CisJCWhvc3QtPmNvbF9hZGRyID0gY29sdW1uOworCQlob3N0LT5zcGFyZV9vbmx5ID0gdHJ1ZTsKKwkJdXNlaXJxID0gZmFsc2U7CisJCWlmIChob3N0LT5wYWdlc2l6ZV8yaykKKwkJCWNvbW1hbmQgPSBOQU5EX0NNRF9SRUFEMDsgLyogb25seSBSRUFEMCBpcyB2YWxpZCAqLworCQlicmVhazsKKworCWNhc2UgTkFORF9DTURfU0VRSU46CisJCWlmIChjb2x1bW4gPj0gbXRkLT53cml0ZXNpemUpIHsKKwkJCS8qCisJCQkgKiBGSVhNRTogYmVmb3JlIHNlbmQgU0VRSU4gY29tbWFuZCBmb3Igd3JpdGUgT09CLAorCQkJICogV2UgbXVzdCByZWFkIG9uZSBwYWdlIG91dC4KKwkJCSAqIEZvciBLOUYxR1hYIGhhcyBubyBSRUFEMSBjb21tYW5kIHRvIHNldCBjdXJyZW50IEhXCisJCQkgKiBwb2ludGVyIHRvIHNwYXJlIGFyZWEsIHdlIG11c3Qgd3JpdGUgdGhlIHdob2xlIHBhZ2UKKwkJCSAqIGluY2x1ZGluZyBPT0IgdG9nZXRoZXIuCisJCQkgKi8KKwkJCWlmIChob3N0LT5wYWdlc2l6ZV8yaykKKwkJCQkvKiBjYWxsIG91cnNlbGYgdG8gcmVhZCBhIHBhZ2UgKi8KKwkJCQlteGNfbmFuZF9jb21tYW5kKG10ZCwgTkFORF9DTURfUkVBRDAsIDAsCisJCQkJCQlwYWdlX2FkZHIpOworCisJCQlob3N0LT5jb2xfYWRkciA9IGNvbHVtbiAtIG10ZC0+d3JpdGVzaXplOworCQkJaG9zdC0+c3BhcmVfb25seSA9IHRydWU7CisKKwkJCS8qIFNldCBwcm9ncmFtIHBvaW50ZXIgdG8gc3BhcmUgcmVnaW9uICovCisJCQlpZiAoIWhvc3QtPnBhZ2VzaXplXzJrKQorCQkJCXNlbmRfY21kKGhvc3QsIE5BTkRfQ01EX1JFQURPT0IsIGZhbHNlKTsKKwkJfSBlbHNlIHsKKwkJCWhvc3QtPnNwYXJlX29ubHkgPSBmYWxzZTsKKwkJCWhvc3QtPmNvbF9hZGRyID0gY29sdW1uOworCisJCQkvKiBTZXQgcHJvZ3JhbSBwb2ludGVyIHRvIHBhZ2Ugc3RhcnQgKi8KKwkJCWlmICghaG9zdC0+cGFnZXNpemVfMmspCisJCQkJc2VuZF9jbWQoaG9zdCwgTkFORF9DTURfUkVBRDAsIGZhbHNlKTsKKwkJfQorCQl1c2VpcnEgPSBmYWxzZTsKKwkJYnJlYWs7CisKKwljYXNlIE5BTkRfQ01EX1BBR0VQUk9HOgorCQlzZW5kX3Byb2dfcGFnZShob3N0LCAwLCBob3N0LT5zcGFyZV9vbmx5KTsKKworCQlpZiAoaG9zdC0+cGFnZXNpemVfMmspIHsKKwkJCS8qIGRhdGEgaW4gNCBhcmVhcyBkYXRhcyAqLworCQkJc2VuZF9wcm9nX3BhZ2UoaG9zdCwgMSwgaG9zdC0+c3BhcmVfb25seSk7CisJCQlzZW5kX3Byb2dfcGFnZShob3N0LCAyLCBob3N0LT5zcGFyZV9vbmx5KTsKKwkJCXNlbmRfcHJvZ19wYWdlKGhvc3QsIDMsIGhvc3QtPnNwYXJlX29ubHkpOworCQl9CisKKwkJYnJlYWs7CisKKwljYXNlIE5BTkRfQ01EX0VSQVNFMToKKwkJdXNlaXJxID0gZmFsc2U7CisJCWJyZWFrOworCX0KKworCS8qIFdyaXRlIG91dCB0aGUgY29tbWFuZCB0byB0aGUgZGV2aWNlLiAqLworCXNlbmRfY21kKGhvc3QsIGNvbW1hbmQsIHVzZWlycSk7CisKKwkvKiBXcml0ZSBvdXQgY29sdW1uIGFkZHJlc3MsIGlmIG5lY2Vzc2FyeSAqLworCWlmIChjb2x1bW4gIT0gLTEpIHsKKwkJLyoKKwkJICogTVhDIE5BTkRGQyBjYW4gb25seSBwZXJmb3JtIGZ1bGwgcGFnZStzcGFyZSBvcgorCQkgKiBzcGFyZS1vbmx5IHJlYWQvd3JpdGUuICBXaGVuIHRoZSB1cHBlciBsYXllcnMKKwkJICogbGF5ZXJzIHBlcmZvcm0gYSByZWFkL3dyaXRlIGJ1ZiBvcGVyYXRpb24sCisJCSAqIHdlIHdpbGwgdXNlZCB0aGUgc2F2ZWQgY29sdW1uIGFkcmVzcyB0byBpbmRleCBpbnRvCisJCSAqIHRoZSBmdWxsIHBhZ2UuCisJCSAqLworCQlzZW5kX2FkZHIoaG9zdCwgMCwgcGFnZV9hZGRyID09IC0xKTsKKwkJaWYgKGhvc3QtPnBhZ2VzaXplXzJrKQorCQkJLyogYW5vdGhlciBjb2wgYWRkciBjeWNsZSBmb3IgMmsgcGFnZSAqLworCQkJc2VuZF9hZGRyKGhvc3QsIDAsIGZhbHNlKTsKKwl9CisKKwkvKiBXcml0ZSBvdXQgcGFnZSBhZGRyZXNzLCBpZiBuZWNlc3NhcnkgKi8KKwlpZiAocGFnZV9hZGRyICE9IC0xKSB7CisJCS8qIHBhZGRyXzAgLSBwX2FkZHJfNyAqLworCQlzZW5kX2FkZHIoaG9zdCwgKHBhZ2VfYWRkciAmIDB4ZmYpLCBmYWxzZSk7CisKKwkJaWYgKGhvc3QtPnBhZ2VzaXplXzJrKSB7CisJCQlzZW5kX2FkZHIoaG9zdCwgKHBhZ2VfYWRkciA+PiA4KSAmIDB4RkYsIGZhbHNlKTsKKwkJCWlmIChtdGQtPnNpemUgPj0gMHg0MDAwMDAwMCkKKwkJCQlzZW5kX2FkZHIoaG9zdCwgKHBhZ2VfYWRkciA+PiAxNikgJiAweGZmLCB0cnVlKTsKKwkJfSBlbHNlIHsKKwkJCS8qIE9uZSBtb3JlIGFkZHJlc3MgY3ljbGUgZm9yIGhpZ2hlciBkZW5zaXR5IGRldmljZXMgKi8KKwkJCWlmIChtdGQtPnNpemUgPj0gMHg0MDAwMDAwKSB7CisJCQkJLyogcGFkZHJfOCAtIHBhZGRyXzE1ICovCisJCQkJc2VuZF9hZGRyKGhvc3QsIChwYWdlX2FkZHIgPj4gOCkgJiAweGZmLCBmYWxzZSk7CisJCQkJc2VuZF9hZGRyKGhvc3QsIChwYWdlX2FkZHIgPj4gMTYpICYgMHhmZiwgdHJ1ZSk7CisJCQl9IGVsc2UKKwkJCQkvKiBwYWRkcl84IC0gcGFkZHJfMTUgKi8KKwkJCQlzZW5kX2FkZHIoaG9zdCwgKHBhZ2VfYWRkciA+PiA4KSAmIDB4ZmYsIHRydWUpOworCQl9CisJfQorCisJLyogQ29tbWFuZCBwb3N0LXByb2Nlc3Npbmcgc3RlcCAqLworCXN3aXRjaCAoY29tbWFuZCkgeworCisJY2FzZSBOQU5EX0NNRF9SRVNFVDoKKwkJYnJlYWs7CisKKwljYXNlIE5BTkRfQ01EX1JFQURPT0I6CisJY2FzZSBOQU5EX0NNRF9SRUFEMDoKKwkJaWYgKGhvc3QtPnBhZ2VzaXplXzJrKSB7CisJCQkvKiBzZW5kIHJlYWQgY29uZmlybSBjb21tYW5kICovCisJCQlzZW5kX2NtZChob3N0LCBOQU5EX0NNRF9SRUFEU1RBUlQsIHRydWUpOworCQkJLyogcmVhZCBmb3IgZWFjaCBBUkVBICovCisJCQlzZW5kX3JlYWRfcGFnZShob3N0LCAwLCBob3N0LT5zcGFyZV9vbmx5KTsKKwkJCXNlbmRfcmVhZF9wYWdlKGhvc3QsIDEsIGhvc3QtPnNwYXJlX29ubHkpOworCQkJc2VuZF9yZWFkX3BhZ2UoaG9zdCwgMiwgaG9zdC0+c3BhcmVfb25seSk7CisJCQlzZW5kX3JlYWRfcGFnZShob3N0LCAzLCBob3N0LT5zcGFyZV9vbmx5KTsKKwkJfSBlbHNlCisJCQlzZW5kX3JlYWRfcGFnZShob3N0LCAwLCBob3N0LT5zcGFyZV9vbmx5KTsKKwkJYnJlYWs7CisKKwljYXNlIE5BTkRfQ01EX1JFQURJRDoKKwkJc2VuZF9yZWFkX2lkKGhvc3QpOworCQlicmVhazsKKworCWNhc2UgTkFORF9DTURfUEFHRVBST0c6CisJCWJyZWFrOworCisJY2FzZSBOQU5EX0NNRF9TVEFUVVM6CisJCWJyZWFrOworCisJY2FzZSBOQU5EX0NNRF9FUkFTRTI6CisJCWJyZWFrOworCX0KK30KKworc3RhdGljIGludCBfX2luaXQgbXhjbmRfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgbmFuZF9jaGlwICp0aGlzOworCXN0cnVjdCBtdGRfaW5mbyAqbXRkOworCXN0cnVjdCBteGNfbmFuZF9wbGF0Zm9ybV9kYXRhICpwZGF0YSA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOworCXN0cnVjdCBteGNfbmFuZF9ob3N0ICpob3N0OworCXN0cnVjdCByZXNvdXJjZSAqcmVzOworCXVpbnQxNl90IHRtcDsKKwlpbnQgZXJyID0gMCwgbnJfcGFydHMgPSAwOworCisJLyogQWxsb2NhdGUgbWVtb3J5IGZvciBNVEQgZGV2aWNlIHN0cnVjdHVyZSBhbmQgcHJpdmF0ZSBkYXRhICovCisJaG9zdCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBteGNfbmFuZF9ob3N0KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFob3N0KQorCQlyZXR1cm4gLUVOT01FTTsKKworCWhvc3QtPmRldiA9ICZwZGV2LT5kZXY7CisJLyogc3RydWN0dXJlcyBtdXN0IGJlIGxpbmtlZCAqLworCXRoaXMgPSAmaG9zdC0+bmFuZDsKKwltdGQgPSAmaG9zdC0+bXRkOworCW10ZC0+cHJpdiA9IHRoaXM7CisJbXRkLT5vd25lciA9IFRISVNfTU9EVUxFOworCisJLyogNTAgdXMgY29tbWFuZCBkZWxheSB0aW1lICovCisJdGhpcy0+Y2hpcF9kZWxheSA9IDU7CisKKwl0aGlzLT5wcml2ID0gaG9zdDsKKwl0aGlzLT5kZXZfcmVhZHkgPSBteGNfbmFuZF9kZXZfcmVhZHk7CisJdGhpcy0+Y21kZnVuYyA9IG14Y19uYW5kX2NvbW1hbmQ7CisJdGhpcy0+c2VsZWN0X2NoaXAgPSBteGNfbmFuZF9zZWxlY3RfY2hpcDsKKwl0aGlzLT5yZWFkX2J5dGUgPSBteGNfbmFuZF9yZWFkX2J5dGU7CisJdGhpcy0+cmVhZF93b3JkID0gbXhjX25hbmRfcmVhZF93b3JkOworCXRoaXMtPndyaXRlX2J1ZiA9IG14Y19uYW5kX3dyaXRlX2J1ZjsKKwl0aGlzLT5yZWFkX2J1ZiA9IG14Y19uYW5kX3JlYWRfYnVmOworCXRoaXMtPnZlcmlmeV9idWYgPSBteGNfbmFuZF92ZXJpZnlfYnVmOworCisJaG9zdC0+Y2xrID0gY2xrX2dldCgmcGRldi0+ZGV2LCAibmZjX2NsayIpOworCWlmIChJU19FUlIoaG9zdC0+Y2xrKSkKKwkJZ290byBlY2xrOworCisJY2xrX2VuYWJsZShob3N0LT5jbGspOworCWhvc3QtPmNsa19hY3QgPSAxOworCisJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwlpZiAoIXJlcykgeworCQllcnIgPSAtRU5PREVWOworCQlnb3RvIGVyZXM7CisJfQorCisJaG9zdC0+cmVncyA9IGlvcmVtYXAocmVzLT5zdGFydCwgcmVzLT5lbmQgLSByZXMtPnN0YXJ0ICsgMSk7CisJaWYgKCFob3N0LT5yZWdzKSB7CisJCWVyciA9IC1FSU87CisJCWdvdG8gZXJlczsKKwl9CisKKwl0bXAgPSByZWFkdyhob3N0LT5yZWdzICsgTkZDX0NPTkZJRzEpOworCXRtcCB8PSBORkNfSU5UX01TSzsKKwl3cml0ZXcodG1wLCBob3N0LT5yZWdzICsgTkZDX0NPTkZJRzEpOworCisJaW5pdF93YWl0cXVldWVfaGVhZCgmaG9zdC0+aXJxX3dhaXRxKTsKKworCWhvc3QtPmlycSA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCk7CisKKwllcnIgPSByZXF1ZXN0X2lycShob3N0LT5pcnEsIG14Y19uZmNfaXJxLCAwLCAibXhjX25kIiwgaG9zdCk7CisJaWYgKGVycikKKwkJZ290byBlaXJxOworCisJaWYgKHBkYXRhLT5od19lY2MpIHsKKwkJdGhpcy0+ZWNjLmNhbGN1bGF0ZSA9IG14Y19uYW5kX2NhbGN1bGF0ZV9lY2M7CisJCXRoaXMtPmVjYy5od2N0bCA9IG14Y19uYW5kX2VuYWJsZV9od2VjYzsKKwkJdGhpcy0+ZWNjLmNvcnJlY3QgPSBteGNfbmFuZF9jb3JyZWN0X2RhdGE7CisJCXRoaXMtPmVjYy5tb2RlID0gTkFORF9FQ0NfSFc7CisJCXRoaXMtPmVjYy5zaXplID0gNTEyOworCQl0aGlzLT5lY2MuYnl0ZXMgPSAzOworCQl0aGlzLT5lY2MubGF5b3V0ID0gJm5hbmRfaHdfZWNjb29iXzg7CisJCXRtcCA9IHJlYWR3KGhvc3QtPnJlZ3MgKyBORkNfQ09ORklHMSk7CisJCXRtcCB8PSBORkNfRUNDX0VOOworCQl3cml0ZXcodG1wLCBob3N0LT5yZWdzICsgTkZDX0NPTkZJRzEpOworCX0gZWxzZSB7CisJCXRoaXMtPmVjYy5zaXplID0gNTEyOworCQl0aGlzLT5lY2MuYnl0ZXMgPSAzOworCQl0aGlzLT5lY2MubGF5b3V0ID0gJm5hbmRfaHdfZWNjb29iXzg7CisJCXRoaXMtPmVjYy5tb2RlID0gTkFORF9FQ0NfU09GVDsKKwkJdG1wID0gcmVhZHcoaG9zdC0+cmVncyArIE5GQ19DT05GSUcxKTsKKwkJdG1wICY9IH5ORkNfRUNDX0VOOworCQl3cml0ZXcodG1wLCBob3N0LT5yZWdzICsgTkZDX0NPTkZJRzEpOworCX0KKworCS8qIFJlc2V0IE5BTkQgKi8KKwl0aGlzLT5jbWRmdW5jKG10ZCwgTkFORF9DTURfUkVTRVQsIC0xLCAtMSk7CisKKwkvKiBwcmVzZXQgb3BlcmF0aW9uICovCisJLyogVW5sb2NrIHRoZSBpbnRlcm5hbCBSQU0gQnVmZmVyICovCisJd3JpdGV3KDB4MiwgaG9zdC0+cmVncyArIE5GQ19DT05GSUcpOworCisJLyogQmxvY2tzIHRvIGJlIHVubG9ja2VkICovCisJd3JpdGV3KDB4MCwgaG9zdC0+cmVncyArIE5GQ19VTkxPQ0tTVEFSVF9CTEtBRERSKTsKKwl3cml0ZXcoMHg0MDAwLCBob3N0LT5yZWdzICsgTkZDX1VOTE9DS0VORF9CTEtBRERSKTsKKworCS8qIFVubG9jayBCbG9jayBDb21tYW5kIGZvciBnaXZlbiBhZGRyZXNzIHJhbmdlICovCisJd3JpdGV3KDB4NCwgaG9zdC0+cmVncyArIE5GQ19XUlBST1QpOworCisJLyogTkFORCBidXMgd2lkdGggZGV0ZXJtaW5lcyBhY2Nlc3MgZnVudGlvbnMgdXNlZCBieSB1cHBlciBsYXllciAqLworCWlmIChwZGF0YS0+d2lkdGggPT0gMikgeworCQl0aGlzLT5vcHRpb25zIHw9IE5BTkRfQlVTV0lEVEhfMTY7CisJCXRoaXMtPmVjYy5sYXlvdXQgPSAmbmFuZF9od19lY2Nvb2JfMTY7CisJfQorCisJaG9zdC0+cGFnZXNpemVfMmsgPSAwOworCisJLyogU2NhbiB0byBmaW5kIGV4aXN0ZW5jZSBvZiB0aGUgZGV2aWNlICovCisJaWYgKG5hbmRfc2NhbihtdGQsIDEpKSB7CisJCURFQlVHKE1URF9ERUJVR19MRVZFTDAsCisJCSAgICAgICJNWENfTkQ6IFVuYWJsZSB0byBmaW5kIGFueSBOQU5EIGRldmljZS5cbiIpOworCQllcnIgPSAtRU5YSU87CisJCWdvdG8gZXNjYW47CisJfQorCisJLyogUmVnaXN0ZXIgdGhlIHBhcnRpdGlvbnMgKi8KKyNpZmRlZiBDT05GSUdfTVREX1BBUlRJVElPTlMKKwlucl9wYXJ0cyA9CisJICAgIHBhcnNlX210ZF9wYXJ0aXRpb25zKG10ZCwgcGFydF9wcm9iZXMsICZob3N0LT5wYXJ0cywgMCk7CisJaWYgKG5yX3BhcnRzID4gMCkKKwkJYWRkX210ZF9wYXJ0aXRpb25zKG10ZCwgaG9zdC0+cGFydHMsIG5yX3BhcnRzKTsKKwllbHNlCisjZW5kaWYKKwl7CisJCXByX2luZm8oIlJlZ2lzdGVyaW5nICVzIGFzIHdob2xlIGRldmljZVxuIiwgbXRkLT5uYW1lKTsKKwkJYWRkX210ZF9kZXZpY2UobXRkKTsKKwl9CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBob3N0KTsKKworCXJldHVybiAwOworCitlc2NhbjoKKwlmcmVlX2lycShob3N0LT5pcnEsIE5VTEwpOworZWlycToKKwlpb3VubWFwKGhvc3QtPnJlZ3MpOworZXJlczoKKwljbGtfcHV0KGhvc3QtPmNsayk7CitlY2xrOgorCWtmcmVlKGhvc3QpOworCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBfX2RldmV4aXQgbXhjbmRfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IG14Y19uYW5kX2hvc3QgKmhvc3QgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKworCWNsa19wdXQoaG9zdC0+Y2xrKTsKKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOworCisJbmFuZF9yZWxlYXNlKCZob3N0LT5tdGQpOworCWZyZWVfaXJxKGhvc3QtPmlycSwgTlVMTCk7CisJaW91bm1hcChob3N0LT5yZWdzKTsKKwlrZnJlZShob3N0KTsKKworCXJldHVybiAwOworfQorCisjaWZkZWYgQ09ORklHX1BNCitzdGF0aWMgaW50IG14Y25kX3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQoreworCXN0cnVjdCBtdGRfaW5mbyAqaW5mbyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCWludCByZXQgPSAwOworCisJREVCVUcoTVREX0RFQlVHX0xFVkVMMCwgIk1YQ19ORCA6IE5BTkQgc3VzcGVuZFxuIik7CisJaWYgKGluZm8pCisJCXJldCA9IGluZm8tPnN1c3BlbmQoaW5mbyk7CisKKwkvKiBEaXNhYmxlIHRoZSBORkMgY2xvY2sgKi8KKwljbGtfZGlzYWJsZShuZmNfY2xrKTsJLyogRklYTUUgKi8KKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgbXhjbmRfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IG10ZF9pbmZvICppbmZvID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJaW50IHJldCA9IDA7CisKKwlERUJVRyhNVERfREVCVUdfTEVWRUwwLCAiTVhDX05EIDogTkFORCByZXN1bWVcbiIpOworCS8qIEVuYWJsZSB0aGUgTkZDIGNsb2NrICovCisJY2xrX2VuYWJsZShuZmNfY2xrKTsJLyogRklYTUUgKi8KKworCWlmIChpbmZvKQorCQlpbmZvLT5yZXN1bWUoaW5mbyk7CisKKwlyZXR1cm4gcmV0OworfQorCisjZWxzZQorIyBkZWZpbmUgbXhjbmRfc3VzcGVuZCAgIE5VTEwKKyMgZGVmaW5lIG14Y25kX3Jlc3VtZSAgICBOVUxMCisjZW5kaWYJCQkJLyogQ09ORklHX1BNICovCisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG14Y25kX2RyaXZlciA9IHsKKwkuZHJpdmVyID0geworCQkgICAubmFtZSA9IERSSVZFUl9OQU1FLAorCQkgICB9LAorCS5yZW1vdmUgPSBfX2V4aXRfcChteGNuZF9yZW1vdmUpLAorCS5zdXNwZW5kID0gbXhjbmRfc3VzcGVuZCwKKwkucmVzdW1lID0gbXhjbmRfcmVzdW1lLAorfTsKKworc3RhdGljIGludCBfX2luaXQgbXhjX25kX2luaXQodm9pZCkKK3sKKwkvKiBSZWdpc3RlciB0aGUgZGV2aWNlIGRyaXZlciBzdHJ1Y3R1cmUuICovCisJcHJfaW5mbygiTVhDIE1URCBuYW5kIERyaXZlclxuIik7CisJaWYgKHBsYXRmb3JtX2RyaXZlcl9wcm9iZSgmbXhjbmRfZHJpdmVyLCBteGNuZF9wcm9iZSkgIT0gMCkgeworCQlwcmludGsoS0VSTl9FUlIgIkRyaXZlciByZWdpc3RlciBmYWlsZWQgZm9yIG14Y25kX2RyaXZlclxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgX19leGl0IG14Y19uZF9jbGVhbnVwKHZvaWQpCit7CisJLyogVW5yZWdpc3RlciB0aGUgZGV2aWNlIHN0cnVjdHVyZSAqLworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZteGNuZF9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChteGNfbmRfaW5pdCk7Cittb2R1bGVfZXhpdChteGNfbmRfY2xlYW51cCk7CisKK01PRFVMRV9BVVRIT1IoIkZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIk1YQyBOQU5EIE1URCBkcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL25hbmQvbmFuZF9iYXNlLmMgYi9kcml2ZXJzL210ZC9uYW5kL25hbmRfYmFzZS5jCmluZGV4IGQxMTI5YmEuLjBhOWM5Y2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL25hbmQvbmFuZF9iYXNlLmMKKysrIGIvZHJpdmVycy9tdGQvbmFuZC9uYW5kX2Jhc2UuYwpAQCAtODAxLDkgKzgwMSw5IEBACiAgKiBuYW5kX3JlYWRfc3VicGFnZSAtIFtSRVBMQUNBQkxFXSBzb2Z0d2FyZSBlY2MgYmFzZWQgc3ViLXBhZ2UgcmVhZCBmdW5jdGlvbgogICogQG10ZDoJbXRkIGluZm8gc3RydWN0dXJlCiAgKiBAY2hpcDoJbmFuZCBjaGlwIGluZm8gc3RydWN0dXJlCi0gKiBAZGF0YW9mcwlvZmZzZXQgb2YgcmVxdWVzdGVkIGRhdGEgd2l0aGluIHRoZSBwYWdlCi0gKiBAcmVhZGxlbglkYXRhIGxlbmd0aAotICogQGJ1ZjoJYnVmZmVyIHRvIHN0b3JlIHJlYWQgZGF0YQorICogQGRhdGFfb2ZmczoJb2Zmc2V0IG9mIHJlcXVlc3RlZCBkYXRhIHdpdGhpbiB0aGUgcGFnZQorICogQHJlYWRsZW46CWRhdGEgbGVuZ3RoCisgKiBAYnVmcG9pOglidWZmZXIgdG8gc3RvcmUgcmVhZCBkYXRhCiAgKi8KIHN0YXRpYyBpbnQgbmFuZF9yZWFkX3N1YnBhZ2Uoc3RydWN0IG10ZF9pbmZvICptdGQsIHN0cnVjdCBuYW5kX2NoaXAgKmNoaXAsIHVpbnQzMl90IGRhdGFfb2ZmcywgdWludDMyX3QgcmVhZGxlbiwgdWludDhfdCAqYnVmcG9pKQogewpAQCAtMjA0Miw3ICsyMDQyLDcgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JaW5zdHItPmZhaWxfYWRkciA9IDB4ZmZmZmZmZmY7CisJaW5zdHItPmZhaWxfYWRkciA9IE1URF9GQUlMX0FERFJfVU5LTk9XTjsKIAogCS8qIEdyYWIgdGhlIGxvY2sgYW5kIHNlZSBpZiB0aGUgZGV2aWNlIGlzIGF2YWlsYWJsZSAqLwogCW5hbmRfZ2V0X2RldmljZShjaGlwLCBtdGQsIEZMX0VSQVNJTkcpOwpAQCAtMjMxOCw2ICsyMzE4LDEyIEBACiAJLyogU2VsZWN0IHRoZSBkZXZpY2UgKi8KIAljaGlwLT5zZWxlY3RfY2hpcChtdGQsIDApOwogCisJLyoKKwkgKiBSZXNldCB0aGUgY2hpcCwgcmVxdWlyZWQgYnkgc29tZSBjaGlwcyAoZS5nLiBNaWNyb24gTVQyOUZ4R3h4eHh4KQorCSAqIGFmdGVyIHBvd2VyLXVwCisJICovCisJY2hpcC0+Y21kZnVuYyhtdGQsIE5BTkRfQ01EX1JFU0VULCAtMSwgLTEpOworCiAJLyogU2VuZCB0aGUgY29tbWFuZCBmb3IgcmVhZGluZyBkZXZpY2UgSUQgKi8KIAljaGlwLT5jbWRmdW5jKG10ZCwgTkFORF9DTURfUkVBRElELCAweDAwLCAtMSk7CiAKQEAgLTI0ODgsNiArMjQ5NCw4IEBACiAJLyogQ2hlY2sgZm9yIGEgY2hpcCBhcnJheSAqLwogCWZvciAoaSA9IDE7IGkgPCBtYXhjaGlwczsgaSsrKSB7CiAJCWNoaXAtPnNlbGVjdF9jaGlwKG10ZCwgaSk7CisJCS8qIFNlZSBjb21tZW50IGluIG5hbmRfZ2V0X2ZsYXNoX3R5cGUgZm9yIHJlc2V0ICovCisJCWNoaXAtPmNtZGZ1bmMobXRkLCBOQU5EX0NNRF9SRVNFVCwgLTEsIC0xKTsKIAkJLyogU2VuZCB0aGUgY29tbWFuZCBmb3IgcmVhZGluZyBkZXZpY2UgSUQgKi8KIAkJY2hpcC0+Y21kZnVuYyhtdGQsIE5BTkRfQ01EX1JFQURJRCwgMHgwMCwgLTEpOwogCQkvKiBSZWFkIG1hbnVmYWN0dXJlciBhbmQgZGV2aWNlIElEcyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbmFuZC9uYW5kX2VjYy5jIGIvZHJpdmVycy9tdGQvbmFuZC9uYW5kX2VjYy5jCmluZGV4IDkxOGE4MDYuLjg2ODE0N2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL25hbmQvbmFuZF9lY2MuYworKysgYi9kcml2ZXJzL210ZC9uYW5kL25hbmRfZWNjLmMKQEAgLTEsMTMgKzEsMTggQEAKIC8qCi0gKiBUaGlzIGZpbGUgY29udGFpbnMgYW4gRUNDIGFsZ29yaXRobSBmcm9tIFRvc2hpYmEgdGhhdCBkZXRlY3RzIGFuZAotICogY29ycmVjdHMgMSBiaXQgZXJyb3JzIGluIGEgMjU2IGJ5dGUgYmxvY2sgb2YgZGF0YS4KKyAqIFRoaXMgZmlsZSBjb250YWlucyBhbiBFQ0MgYWxnb3JpdGhtIHRoYXQgZGV0ZWN0cyBhbmQgY29ycmVjdHMgMSBiaXQKKyAqIGVycm9ycyBpbiBhIDI1NiBieXRlIGJsb2NrIG9mIGRhdGEuCiAgKgogICogZHJpdmVycy9tdGQvbmFuZC9uYW5kX2VjYy5jCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDAwLTIwMDQgU3RldmVuIEouIEhpbGwgKHNqaGlsbEByZWFsaXR5ZGlsdXRlZC5jb20pCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICBUb3NoaWJhIEFtZXJpY2EgRWxlY3Ryb25pY3MgQ29tcG9uZW50cywgSW5jLgorICogQ29weXJpZ2h0IMKpIDIwMDggS29uaW5rbGlqa2UgUGhpbGlwcyBFbGVjdHJvbmljcyBOVi4KKyAqICAgICAgICAgICAgICAgICAgQXV0aG9yOiBGcmFucyBNZXVsZW5icm9la3MKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgVGhvbWFzIEdsZWl4bmVyIDx0Z2x4QGxpbnV0cm9uaXguZGU+CisgKiBDb21wbGV0ZWx5IHJlcGxhY2VzIHRoZSBwcmV2aW91cyBFQ0MgaW1wbGVtZW50YXRpb24gd2hpY2ggd2FzIHdyaXR0ZW4gYnk6CisgKiAgIFN0ZXZlbiBKLiBIaWxsIChzamhpbGxAcmVhbGl0eWRpbHV0ZWQuY29tKQorICogICBUaG9tYXMgR2xlaXhuZXIgKHRnbHhAbGludXRyb25peC5kZSkKKyAqCisgKiBJbmZvcm1hdGlvbiBvbiBob3cgdGhpcyBhbGdvcml0aG0gd29ya3MgYW5kIGhvdyBpdCB3YXMgZGV2ZWxvcGVkCisgKiBjYW4gYmUgZm91bmQgaW4gRG9jdW1lbnRhdGlvbi9tdGQvbmFuZF9lY2MudHh0CiAgKgogICogVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKICAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQpAQCAtMjMsMTc0ICsyOCw0NzUgQEAKICAqIHdpdGggdGhpcyBmaWxlOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCiAgKiA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQS4KICAqCi0gKiBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCBpZiBvdGhlciBmaWxlcyBpbnN0YW50aWF0ZSB0ZW1wbGF0ZXMgb3IgdXNlCi0gKiBtYWNyb3Mgb3IgaW5saW5lIGZ1bmN0aW9ucyBmcm9tIHRoZXNlIGZpbGVzLCBvciB5b3UgY29tcGlsZSB0aGVzZQotICogZmlsZXMgYW5kIGxpbmsgdGhlbSB3aXRoIG90aGVyIHdvcmtzIHRvIHByb2R1Y2UgYSB3b3JrIGJhc2VkIG9uIHRoZXNlCi0gKiBmaWxlcywgdGhlc2UgZmlsZXMgZG8gbm90IGJ5IHRoZW1zZWx2ZXMgY2F1c2UgdGhlIHJlc3VsdGluZyB3b3JrIHRvIGJlCi0gKiBjb3ZlcmVkIGJ5IHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gSG93ZXZlciB0aGUgc291cmNlIGNvZGUgZm9yCi0gKiB0aGVzZSBmaWxlcyBtdXN0IHN0aWxsIGJlIG1hZGUgYXZhaWxhYmxlIGluIGFjY29yZGFuY2Ugd2l0aCBzZWN0aW9uICgzKQotICogb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgotICoKLSAqIFRoaXMgZXhjZXB0aW9uIGRvZXMgbm90IGludmFsaWRhdGUgYW55IG90aGVyIHJlYXNvbnMgd2h5IGEgd29yayBiYXNlZCBvbgotICogdGhpcyBmaWxlIG1pZ2h0IGJlIGNvdmVyZWQgYnkgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgogICovCiAKKy8qCisgKiBUaGUgU1RBTkRBTE9ORSBtYWNybyBpcyB1c2VmdWwgd2hlbiBydW5uaW5nIHRoZSBjb2RlIG91dHNpZGUgdGhlIGtlcm5lbAorICogZS5nLiB3aGVuIHJ1bm5pbmcgdGhlIGNvZGUgaW4gYSB0ZXN0YmVkIG9yIGEgYmVuY2htYXJrIHByb2dyYW0uCisgKiBXaGVuIFNUQU5EQUxPTkUgaXMgdXNlZCwgdGhlIG1vZHVsZSByZWxhdGVkIG1hY3JvcyBhcmUgY29tbWVudGVkIG91dAorICogYXMgd2VsbCBhcyB0aGUgbGludXggaW5jbHVkZSBmaWxlcy4KKyAqIEluc3RlYWQgYSBwcml2YXRlIGRlZmluaXRpb24gb2YgbXRkX2luZm8gaXMgZ2l2ZW4gdG8gc2F0aXNmeSB0aGUgY29tcGlsZXIKKyAqICh0aGUgY29kZSBkb2VzIG5vdCB1c2UgbXRkX2luZm8sIHNvIHRoZSBjb2RlIGRvZXMgbm90IGNhcmUpCisgKi8KKyNpZm5kZWYgU1RBTkRBTE9ORQogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL210ZC5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9uYW5kLmg+CiAjaW5jbHVkZSA8bGludXgvbXRkL25hbmRfZWNjLmg+CisjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgorI2Vsc2UKKyNpbmNsdWRlIDxzdGRpbnQuaD4KK3N0cnVjdCBtdGRfaW5mbzsKKyNkZWZpbmUgRVhQT1JUX1NZTUJPTCh4KSAgLyogeCAqLworCisjZGVmaW5lIE1PRFVMRV9MSUNFTlNFKHgpCS8qIHggKi8KKyNkZWZpbmUgTU9EVUxFX0FVVEhPUih4KQkvKiB4ICovCisjZGVmaW5lIE1PRFVMRV9ERVNDUklQVElPTih4KQkvKiB4ICovCisKKyNkZWZpbmUgcHJpbnRrIHByaW50ZgorI2RlZmluZSBLRVJOX0VSUgkJIiIKKyNlbmRpZgogCiAvKgotICogUHJlLWNhbGN1bGF0ZWQgMjU2LXdheSAxIGJ5dGUgY29sdW1uIHBhcml0eQorICogaW52cGFyaXR5IGlzIGEgMjU2IGJ5dGUgdGFibGUgdGhhdCBjb250YWlucyB0aGUgb2RkIHBhcml0eQorICogZm9yIGVhY2ggYnl0ZS4gU28gaWYgdGhlIG51bWJlciBvZiBiaXRzIGluIGEgYnl0ZSBpcyBldmVuLAorICogdGhlIGFycmF5IGVsZW1lbnQgaXMgMSwgYW5kIHdoZW4gdGhlIG51bWJlciBvZiBiaXRzIGlzIG9kZAorICogdGhlIGFycmF5IGVsZWVtbnQgaXMgMC4KICAqLwotc3RhdGljIGNvbnN0IHVfY2hhciBuYW5kX2VjY19wcmVjYWxjX3RhYmxlW10gPSB7Ci0JMHgwMCwgMHg1NSwgMHg1NiwgMHgwMywgMHg1OSwgMHgwYywgMHgwZiwgMHg1YSwgMHg1YSwgMHgwZiwgMHgwYywgMHg1OSwgMHgwMywgMHg1NiwgMHg1NSwgMHgwMCwKLQkweDY1LCAweDMwLCAweDMzLCAweDY2LCAweDNjLCAweDY5LCAweDZhLCAweDNmLCAweDNmLCAweDZhLCAweDY5LCAweDNjLCAweDY2LCAweDMzLCAweDMwLCAweDY1LAotCTB4NjYsIDB4MzMsIDB4MzAsIDB4NjUsIDB4M2YsIDB4NmEsIDB4NjksIDB4M2MsIDB4M2MsIDB4NjksIDB4NmEsIDB4M2YsIDB4NjUsIDB4MzAsIDB4MzMsIDB4NjYsCi0JMHgwMywgMHg1NiwgMHg1NSwgMHgwMCwgMHg1YSwgMHgwZiwgMHgwYywgMHg1OSwgMHg1OSwgMHgwYywgMHgwZiwgMHg1YSwgMHgwMCwgMHg1NSwgMHg1NiwgMHgwMywKLQkweDY5LCAweDNjLCAweDNmLCAweDZhLCAweDMwLCAweDY1LCAweDY2LCAweDMzLCAweDMzLCAweDY2LCAweDY1LCAweDMwLCAweDZhLCAweDNmLCAweDNjLCAweDY5LAotCTB4MGMsIDB4NTksIDB4NWEsIDB4MGYsIDB4NTUsIDB4MDAsIDB4MDMsIDB4NTYsIDB4NTYsIDB4MDMsIDB4MDAsIDB4NTUsIDB4MGYsIDB4NWEsIDB4NTksIDB4MGMsCi0JMHgwZiwgMHg1YSwgMHg1OSwgMHgwYywgMHg1NiwgMHgwMywgMHgwMCwgMHg1NSwgMHg1NSwgMHgwMCwgMHgwMywgMHg1NiwgMHgwYywgMHg1OSwgMHg1YSwgMHgwZiwKLQkweDZhLCAweDNmLCAweDNjLCAweDY5LCAweDMzLCAweDY2LCAweDY1LCAweDMwLCAweDMwLCAweDY1LCAweDY2LCAweDMzLCAweDY5LCAweDNjLCAweDNmLCAweDZhLAotCTB4NmEsIDB4M2YsIDB4M2MsIDB4NjksIDB4MzMsIDB4NjYsIDB4NjUsIDB4MzAsIDB4MzAsIDB4NjUsIDB4NjYsIDB4MzMsIDB4NjksIDB4M2MsIDB4M2YsIDB4NmEsCi0JMHgwZiwgMHg1YSwgMHg1OSwgMHgwYywgMHg1NiwgMHgwMywgMHgwMCwgMHg1NSwgMHg1NSwgMHgwMCwgMHgwMywgMHg1NiwgMHgwYywgMHg1OSwgMHg1YSwgMHgwZiwKLQkweDBjLCAweDU5LCAweDVhLCAweDBmLCAweDU1LCAweDAwLCAweDAzLCAweDU2LCAweDU2LCAweDAzLCAweDAwLCAweDU1LCAweDBmLCAweDVhLCAweDU5LCAweDBjLAotCTB4NjksIDB4M2MsIDB4M2YsIDB4NmEsIDB4MzAsIDB4NjUsIDB4NjYsIDB4MzMsIDB4MzMsIDB4NjYsIDB4NjUsIDB4MzAsIDB4NmEsIDB4M2YsIDB4M2MsIDB4NjksCi0JMHgwMywgMHg1NiwgMHg1NSwgMHgwMCwgMHg1YSwgMHgwZiwgMHgwYywgMHg1OSwgMHg1OSwgMHgwYywgMHgwZiwgMHg1YSwgMHgwMCwgMHg1NSwgMHg1NiwgMHgwMywKLQkweDY2LCAweDMzLCAweDMwLCAweDY1LCAweDNmLCAweDZhLCAweDY5LCAweDNjLCAweDNjLCAweDY5LCAweDZhLCAweDNmLCAweDY1LCAweDMwLCAweDMzLCAweDY2LAotCTB4NjUsIDB4MzAsIDB4MzMsIDB4NjYsIDB4M2MsIDB4NjksIDB4NmEsIDB4M2YsIDB4M2YsIDB4NmEsIDB4NjksIDB4M2MsIDB4NjYsIDB4MzMsIDB4MzAsIDB4NjUsCi0JMHgwMCwgMHg1NSwgMHg1NiwgMHgwMywgMHg1OSwgMHgwYywgMHgwZiwgMHg1YSwgMHg1YSwgMHgwZiwgMHgwYywgMHg1OSwgMHgwMywgMHg1NiwgMHg1NSwgMHgwMAorc3RhdGljIGNvbnN0IGNoYXIgaW52cGFyaXR5WzI1Nl0gPSB7CisJMSwgMCwgMCwgMSwgMCwgMSwgMSwgMCwgMCwgMSwgMSwgMCwgMSwgMCwgMCwgMSwKKwkwLCAxLCAxLCAwLCAxLCAwLCAwLCAxLCAxLCAwLCAwLCAxLCAwLCAxLCAxLCAwLAorCTAsIDEsIDEsIDAsIDEsIDAsIDAsIDEsIDEsIDAsIDAsIDEsIDAsIDEsIDEsIDAsCisJMSwgMCwgMCwgMSwgMCwgMSwgMSwgMCwgMCwgMSwgMSwgMCwgMSwgMCwgMCwgMSwKKwkwLCAxLCAxLCAwLCAxLCAwLCAwLCAxLCAxLCAwLCAwLCAxLCAwLCAxLCAxLCAwLAorCTEsIDAsIDAsIDEsIDAsIDEsIDEsIDAsIDAsIDEsIDEsIDAsIDEsIDAsIDAsIDEsCisJMSwgMCwgMCwgMSwgMCwgMSwgMSwgMCwgMCwgMSwgMSwgMCwgMSwgMCwgMCwgMSwKKwkwLCAxLCAxLCAwLCAxLCAwLCAwLCAxLCAxLCAwLCAwLCAxLCAwLCAxLCAxLCAwLAorCTAsIDEsIDEsIDAsIDEsIDAsIDAsIDEsIDEsIDAsIDAsIDEsIDAsIDEsIDEsIDAsCisJMSwgMCwgMCwgMSwgMCwgMSwgMSwgMCwgMCwgMSwgMSwgMCwgMSwgMCwgMCwgMSwKKwkxLCAwLCAwLCAxLCAwLCAxLCAxLCAwLCAwLCAxLCAxLCAwLCAxLCAwLCAwLCAxLAorCTAsIDEsIDEsIDAsIDEsIDAsIDAsIDEsIDEsIDAsIDAsIDEsIDAsIDEsIDEsIDAsCisJMSwgMCwgMCwgMSwgMCwgMSwgMSwgMCwgMCwgMSwgMSwgMCwgMSwgMCwgMCwgMSwKKwkwLCAxLCAxLCAwLCAxLCAwLCAwLCAxLCAxLCAwLCAwLCAxLCAwLCAxLCAxLCAwLAorCTAsIDEsIDEsIDAsIDEsIDAsIDAsIDEsIDEsIDAsIDAsIDEsIDAsIDEsIDEsIDAsCisJMSwgMCwgMCwgMSwgMCwgMSwgMSwgMCwgMCwgMSwgMSwgMCwgMSwgMCwgMCwgMQorfTsKKworLyoKKyAqIGJpdHNwZXJieXRlIGNvbnRhaW5zIHRoZSBudW1iZXIgb2YgYml0cyBwZXIgYnl0ZQorICogdGhpcyBpcyBvbmx5IHVzZWQgZm9yIHRlc3RpbmcgYW5kIHJlcGFpcmluZyBwYXJpdHkKKyAqIChhIHByZWNhbGN1bGF0ZWQgdmFsdWUgc2xpZ2h0bHkgaW1wcm92ZXMgcGVyZm9ybWFuY2UpCisgKi8KK3N0YXRpYyBjb25zdCBjaGFyIGJpdHNwZXJieXRlWzI1Nl0gPSB7CisJMCwgMSwgMSwgMiwgMSwgMiwgMiwgMywgMSwgMiwgMiwgMywgMiwgMywgMywgNCwKKwkxLCAyLCAyLCAzLCAyLCAzLCAzLCA0LCAyLCAzLCAzLCA0LCAzLCA0LCA0LCA1LAorCTEsIDIsIDIsIDMsIDIsIDMsIDMsIDQsIDIsIDMsIDMsIDQsIDMsIDQsIDQsIDUsCisJMiwgMywgMywgNCwgMywgNCwgNCwgNSwgMywgNCwgNCwgNSwgNCwgNSwgNSwgNiwKKwkxLCAyLCAyLCAzLCAyLCAzLCAzLCA0LCAyLCAzLCAzLCA0LCAzLCA0LCA0LCA1LAorCTIsIDMsIDMsIDQsIDMsIDQsIDQsIDUsIDMsIDQsIDQsIDUsIDQsIDUsIDUsIDYsCisJMiwgMywgMywgNCwgMywgNCwgNCwgNSwgMywgNCwgNCwgNSwgNCwgNSwgNSwgNiwKKwkzLCA0LCA0LCA1LCA0LCA1LCA1LCA2LCA0LCA1LCA1LCA2LCA1LCA2LCA2LCA3LAorCTEsIDIsIDIsIDMsIDIsIDMsIDMsIDQsIDIsIDMsIDMsIDQsIDMsIDQsIDQsIDUsCisJMiwgMywgMywgNCwgMywgNCwgNCwgNSwgMywgNCwgNCwgNSwgNCwgNSwgNSwgNiwKKwkyLCAzLCAzLCA0LCAzLCA0LCA0LCA1LCAzLCA0LCA0LCA1LCA0LCA1LCA1LCA2LAorCTMsIDQsIDQsIDUsIDQsIDUsIDUsIDYsIDQsIDUsIDUsIDYsIDUsIDYsIDYsIDcsCisJMiwgMywgMywgNCwgMywgNCwgNCwgNSwgMywgNCwgNCwgNSwgNCwgNSwgNSwgNiwKKwkzLCA0LCA0LCA1LCA0LCA1LCA1LCA2LCA0LCA1LCA1LCA2LCA1LCA2LCA2LCA3LAorCTMsIDQsIDQsIDUsIDQsIDUsIDUsIDYsIDQsIDUsIDUsIDYsIDUsIDYsIDYsIDcsCisJNCwgNSwgNSwgNiwgNSwgNiwgNiwgNywgNSwgNiwgNiwgNywgNiwgNywgNywgOCwKK307CisKKy8qCisgKiBhZGRyZXNzYml0cyBpcyBhIGxvb2t1cCB0YWJsZSB0byBmaWx0ZXIgb3V0IHRoZSBiaXRzIGZyb20gdGhlIHhvci1lZAorICogZWNjIGRhdGEgdGhhdCBpZGVudGlmeSB0aGUgZmF1bHR5IGxvY2F0aW9uLgorICogdGhpcyBpcyBvbmx5IHVzZWQgZm9yIHJlcGFpcmluZyBwYXJpdHkKKyAqIHNlZSB0aGUgY29tbWVudHMgaW4gbmFuZF9jb3JyZWN0X2RhdGEgZm9yIG1vcmUgZGV0YWlscworICovCitzdGF0aWMgY29uc3QgY2hhciBhZGRyZXNzYml0c1syNTZdID0geworCTB4MDAsIDB4MDAsIDB4MDEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDEsCisJMHgwMiwgMHgwMiwgMHgwMywgMHgwMywgMHgwMiwgMHgwMiwgMHgwMywgMHgwMywKKwkweDAwLCAweDAwLCAweDAxLCAweDAxLCAweDAwLCAweDAwLCAweDAxLCAweDAxLAorCTB4MDIsIDB4MDIsIDB4MDMsIDB4MDMsIDB4MDIsIDB4MDIsIDB4MDMsIDB4MDMsCisJMHgwNCwgMHgwNCwgMHgwNSwgMHgwNSwgMHgwNCwgMHgwNCwgMHgwNSwgMHgwNSwKKwkweDA2LCAweDA2LCAweDA3LCAweDA3LCAweDA2LCAweDA2LCAweDA3LCAweDA3LAorCTB4MDQsIDB4MDQsIDB4MDUsIDB4MDUsIDB4MDQsIDB4MDQsIDB4MDUsIDB4MDUsCisJMHgwNiwgMHgwNiwgMHgwNywgMHgwNywgMHgwNiwgMHgwNiwgMHgwNywgMHgwNywKKwkweDAwLCAweDAwLCAweDAxLCAweDAxLCAweDAwLCAweDAwLCAweDAxLCAweDAxLAorCTB4MDIsIDB4MDIsIDB4MDMsIDB4MDMsIDB4MDIsIDB4MDIsIDB4MDMsIDB4MDMsCisJMHgwMCwgMHgwMCwgMHgwMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMSwKKwkweDAyLCAweDAyLCAweDAzLCAweDAzLCAweDAyLCAweDAyLCAweDAzLCAweDAzLAorCTB4MDQsIDB4MDQsIDB4MDUsIDB4MDUsIDB4MDQsIDB4MDQsIDB4MDUsIDB4MDUsCisJMHgwNiwgMHgwNiwgMHgwNywgMHgwNywgMHgwNiwgMHgwNiwgMHgwNywgMHgwNywKKwkweDA0LCAweDA0LCAweDA1LCAweDA1LCAweDA0LCAweDA0LCAweDA1LCAweDA1LAorCTB4MDYsIDB4MDYsIDB4MDcsIDB4MDcsIDB4MDYsIDB4MDYsIDB4MDcsIDB4MDcsCisJMHgwOCwgMHgwOCwgMHgwOSwgMHgwOSwgMHgwOCwgMHgwOCwgMHgwOSwgMHgwOSwKKwkweDBhLCAweDBhLCAweDBiLCAweDBiLCAweDBhLCAweDBhLCAweDBiLCAweDBiLAorCTB4MDgsIDB4MDgsIDB4MDksIDB4MDksIDB4MDgsIDB4MDgsIDB4MDksIDB4MDksCisJMHgwYSwgMHgwYSwgMHgwYiwgMHgwYiwgMHgwYSwgMHgwYSwgMHgwYiwgMHgwYiwKKwkweDBjLCAweDBjLCAweDBkLCAweDBkLCAweDBjLCAweDBjLCAweDBkLCAweDBkLAorCTB4MGUsIDB4MGUsIDB4MGYsIDB4MGYsIDB4MGUsIDB4MGUsIDB4MGYsIDB4MGYsCisJMHgwYywgMHgwYywgMHgwZCwgMHgwZCwgMHgwYywgMHgwYywgMHgwZCwgMHgwZCwKKwkweDBlLCAweDBlLCAweDBmLCAweDBmLCAweDBlLCAweDBlLCAweDBmLCAweDBmLAorCTB4MDgsIDB4MDgsIDB4MDksIDB4MDksIDB4MDgsIDB4MDgsIDB4MDksIDB4MDksCisJMHgwYSwgMHgwYSwgMHgwYiwgMHgwYiwgMHgwYSwgMHgwYSwgMHgwYiwgMHgwYiwKKwkweDA4LCAweDA4LCAweDA5LCAweDA5LCAweDA4LCAweDA4LCAweDA5LCAweDA5LAorCTB4MGEsIDB4MGEsIDB4MGIsIDB4MGIsIDB4MGEsIDB4MGEsIDB4MGIsIDB4MGIsCisJMHgwYywgMHgwYywgMHgwZCwgMHgwZCwgMHgwYywgMHgwYywgMHgwZCwgMHgwZCwKKwkweDBlLCAweDBlLCAweDBmLCAweDBmLCAweDBlLCAweDBlLCAweDBmLCAweDBmLAorCTB4MGMsIDB4MGMsIDB4MGQsIDB4MGQsIDB4MGMsIDB4MGMsIDB4MGQsIDB4MGQsCisJMHgwZSwgMHgwZSwgMHgwZiwgMHgwZiwgMHgwZSwgMHgwZSwgMHgwZiwgMHgwZgogfTsKIAogLyoqCi0gKiBuYW5kX2NhbGN1bGF0ZV9lY2MgLSBbTkFORCBJbnRlcmZhY2VdIENhbGN1bGF0ZSAzLWJ5dGUgRUNDIGZvciAyNTYtYnl0ZSBibG9jaworICogbmFuZF9jYWxjdWxhdGVfZWNjIC0gW05BTkQgSW50ZXJmYWNlXSBDYWxjdWxhdGUgMy1ieXRlIEVDQyBmb3IgMjU2LzUxMi1ieXRlCisgKgkJCSBibG9jawogICogQG10ZDoJTVREIGJsb2NrIHN0cnVjdHVyZQotICogQGRhdDoJcmF3IGRhdGEKLSAqIEBlY2NfY29kZToJYnVmZmVyIGZvciBFQ0MKKyAqIEBidWY6CWlucHV0IGJ1ZmZlciB3aXRoIHJhdyBkYXRhCisgKiBAY29kZToJb3V0cHV0IGJ1ZmZlciB3aXRoIEVDQwogICovCi1pbnQgbmFuZF9jYWxjdWxhdGVfZWNjKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBjb25zdCB1X2NoYXIgKmRhdCwKLQkJICAgICAgIHVfY2hhciAqZWNjX2NvZGUpCitpbnQgbmFuZF9jYWxjdWxhdGVfZWNjKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsCisJCSAgICAgICB1bnNpZ25lZCBjaGFyICpjb2RlKQogewotCXVpbnQ4X3QgaWR4LCByZWcxLCByZWcyLCByZWczLCB0bXAxLCB0bXAyOwogCWludCBpOworCWNvbnN0IHVpbnQzMl90ICpicCA9ICh1aW50MzJfdCAqKWJ1ZjsKKwkvKiAyNTYgb3IgNTEyIGJ5dGVzL2VjYyAgKi8KKwljb25zdCB1aW50MzJfdCBlY2NzaXplX211bHQgPQorCQkJKCgoc3RydWN0IG5hbmRfY2hpcCAqKW10ZC0+cHJpdiktPmVjYy5zaXplKSA+PiA4OworCXVpbnQzMl90IGN1cjsJCS8qIGN1cnJlbnQgdmFsdWUgaW4gYnVmZmVyICovCisJLyogcnAwLi5ycDE1Li5ycDE3IGFyZSB0aGUgdmFyaW91cyBhY2N1bXVsYXRlZCBwYXJpdGllcyAocGVyIGJ5dGUpICovCisJdWludDMyX3QgcnAwLCBycDEsIHJwMiwgcnAzLCBycDQsIHJwNSwgcnA2LCBycDc7CisJdWludDMyX3QgcnA4LCBycDksIHJwMTAsIHJwMTEsIHJwMTIsIHJwMTMsIHJwMTQsIHJwMTUsIHJwMTY7CisJdWludDMyX3QgdW5pbml0aWFsaXplZF92YXIocnAxNyk7CS8qIHRvIG1ha2UgY29tcGlsZXIgaGFwcHkgKi8KKwl1aW50MzJfdCBwYXI7CQkvKiB0aGUgY3VtdWxhdGl2ZSBwYXJpdHkgZm9yIGFsbCBkYXRhICovCisJdWludDMyX3QgdG1wcGFyOwkvKiB0aGUgY3VtdWxhdGl2ZSBwYXJpdHkgZm9yIHRoaXMgaXRlcmF0aW9uOworCQkJCSAgIGZvciBycDEyLCBycDE0IGFuZCBycDE2IGF0IHRoZSBlbmQgb2YgdGhlCisJCQkJICAgbG9vcCAqLwogCi0JLyogSW5pdGlhbGl6ZSB2YXJpYWJsZXMgKi8KLQlyZWcxID0gcmVnMiA9IHJlZzMgPSAwOworCXBhciA9IDA7CisJcnA0ID0gMDsKKwlycDYgPSAwOworCXJwOCA9IDA7CisJcnAxMCA9IDA7CisJcnAxMiA9IDA7CisJcnAxNCA9IDA7CisJcnAxNiA9IDA7CiAKLQkvKiBCdWlsZCB1cCBjb2x1bW4gcGFyaXR5ICovCi0JZm9yKGkgPSAwOyBpIDwgMjU2OyBpKyspIHsKLQkJLyogR2V0IENQMCAtIENQNSBmcm9tIHRhYmxlICovCi0JCWlkeCA9IG5hbmRfZWNjX3ByZWNhbGNfdGFibGVbKmRhdCsrXTsKLQkJcmVnMSBePSAoaWR4ICYgMHgzZik7CisJLyoKKwkgKiBUaGUgbG9vcCBpcyB1bnJvbGxlZCBhIG51bWJlciBvZiB0aW1lczsKKwkgKiBUaGlzIGF2b2lkcyBpZiBzdGF0ZW1lbnRzIHRvIGRlY2lkZSBvbiB3aGljaCBycCB2YWx1ZSB0byB1cGRhdGUKKwkgKiBBbHNvIHdlIHByb2Nlc3MgdGhlIGRhdGEgYnkgbG9uZ3dvcmRzLgorCSAqIE5vdGU6IHBhc3NpbmcgdW5hbGlnbmVkIGRhdGEgbWlnaHQgZ2l2ZSBhIHBlcmZvcm1hbmNlIHBlbmFsdHkuCisJICogSXQgaXMgYXNzdW1lZCB0aGF0IHRoZSBidWZmZXJzIGFyZSBhbGlnbmVkLgorCSAqIHRtcHBhciBpcyB0aGUgY3VtdWxhdGl2ZSBzdW0gb2YgdGhpcyBpdGVyYXRpb24uCisJICogbmVlZGVkIGZvciBjYWxjdWxhdGluZyBycDEyLCBycDE0LCBycDE2IGFuZCBwYXIKKwkgKiBhbHNvIHVzZWQgYXMgYSBwZXJmb3JtYW5jZSBpbXByb3ZlbWVudCBmb3IgcnA2LCBycDggYW5kIHJwMTAKKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgZWNjc2l6ZV9tdWx0IDw8IDI7IGkrKykgeworCQljdXIgPSAqYnArKzsKKwkJdG1wcGFyID0gY3VyOworCQlycDQgXj0gY3VyOworCQljdXIgPSAqYnArKzsKKwkJdG1wcGFyIF49IGN1cjsKKwkJcnA2IF49IHRtcHBhcjsKKwkJY3VyID0gKmJwKys7CisJCXRtcHBhciBePSBjdXI7CisJCXJwNCBePSBjdXI7CisJCWN1ciA9ICpicCsrOworCQl0bXBwYXIgXj0gY3VyOworCQlycDggXj0gdG1wcGFyOwogCi0JCS8qIEFsbCBiaXQgWE9SID0gMSA/ICovCi0JCWlmIChpZHggJiAweDQwKSB7Ci0JCQlyZWczIF49ICh1aW50OF90KSBpOwotCQkJcmVnMiBePSB+KCh1aW50OF90KSBpKTsKLQkJfQorCQljdXIgPSAqYnArKzsKKwkJdG1wcGFyIF49IGN1cjsKKwkJcnA0IF49IGN1cjsKKwkJcnA2IF49IGN1cjsKKwkJY3VyID0gKmJwKys7CisJCXRtcHBhciBePSBjdXI7CisJCXJwNiBePSBjdXI7CisJCWN1ciA9ICpicCsrOworCQl0bXBwYXIgXj0gY3VyOworCQlycDQgXj0gY3VyOworCQljdXIgPSAqYnArKzsKKwkJdG1wcGFyIF49IGN1cjsKKwkJcnAxMCBePSB0bXBwYXI7CisKKwkJY3VyID0gKmJwKys7CisJCXRtcHBhciBePSBjdXI7CisJCXJwNCBePSBjdXI7CisJCXJwNiBePSBjdXI7CisJCXJwOCBePSBjdXI7CisJCWN1ciA9ICpicCsrOworCQl0bXBwYXIgXj0gY3VyOworCQlycDYgXj0gY3VyOworCQlycDggXj0gY3VyOworCQljdXIgPSAqYnArKzsKKwkJdG1wcGFyIF49IGN1cjsKKwkJcnA0IF49IGN1cjsKKwkJcnA4IF49IGN1cjsKKwkJY3VyID0gKmJwKys7CisJCXRtcHBhciBePSBjdXI7CisJCXJwOCBePSBjdXI7CisKKwkJY3VyID0gKmJwKys7CisJCXRtcHBhciBePSBjdXI7CisJCXJwNCBePSBjdXI7CisJCXJwNiBePSBjdXI7CisJCWN1ciA9ICpicCsrOworCQl0bXBwYXIgXj0gY3VyOworCQlycDYgXj0gY3VyOworCQljdXIgPSAqYnArKzsKKwkJdG1wcGFyIF49IGN1cjsKKwkJcnA0IF49IGN1cjsKKwkJY3VyID0gKmJwKys7CisJCXRtcHBhciBePSBjdXI7CisKKwkJcGFyIF49IHRtcHBhcjsKKwkJaWYgKChpICYgMHgxKSA9PSAwKQorCQkJcnAxMiBePSB0bXBwYXI7CisJCWlmICgoaSAmIDB4MikgPT0gMCkKKwkJCXJwMTQgXj0gdG1wcGFyOworCQlpZiAoZWNjc2l6ZV9tdWx0ID09IDIgJiYgKGkgJiAweDQpID09IDApCisJCQlycDE2IF49IHRtcHBhcjsKIAl9CiAKLQkvKiBDcmVhdGUgbm9uLWludmVydGVkIEVDQyBjb2RlIGZyb20gbGluZSBwYXJpdHkgKi8KLQl0bXAxICA9IChyZWczICYgMHg4MCkgPj4gMDsgLyogQjcgLT4gQjcgKi8KLQl0bXAxIHw9IChyZWcyICYgMHg4MCkgPj4gMTsgLyogQjcgLT4gQjYgKi8KLQl0bXAxIHw9IChyZWczICYgMHg0MCkgPj4gMTsgLyogQjYgLT4gQjUgKi8KLQl0bXAxIHw9IChyZWcyICYgMHg0MCkgPj4gMjsgLyogQjYgLT4gQjQgKi8KLQl0bXAxIHw9IChyZWczICYgMHgyMCkgPj4gMjsgLyogQjUgLT4gQjMgKi8KLQl0bXAxIHw9IChyZWcyICYgMHgyMCkgPj4gMzsgLyogQjUgLT4gQjIgKi8KLQl0bXAxIHw9IChyZWczICYgMHgxMCkgPj4gMzsgLyogQjQgLT4gQjEgKi8KLQl0bXAxIHw9IChyZWcyICYgMHgxMCkgPj4gNDsgLyogQjQgLT4gQjAgKi8KKwkvKgorCSAqIGhhbmRsZSB0aGUgZmFjdCB0aGF0IHdlIHVzZSBsb25nd29yZCBvcGVyYXRpb25zCisJICogd2UnbGwgYnJpbmcgcnA0Li5ycDE0Li5ycDE2IGJhY2sgdG8gc2luZ2xlIGJ5dGUgZW50aXRpZXMgYnkKKwkgKiBzaGlmdGluZyBhbmQgeG9yaW5nIGZpcnN0IGZvbGQgdGhlIHVwcGVyIGFuZCBsb3dlciAxNiBiaXRzLAorCSAqIHRoZW4gdGhlIHVwcGVyIGFuZCBsb3dlciA4IGJpdHMuCisJICovCisJcnA0IF49IChycDQgPj4gMTYpOworCXJwNCBePSAocnA0ID4+IDgpOworCXJwNCAmPSAweGZmOworCXJwNiBePSAocnA2ID4+IDE2KTsKKwlycDYgXj0gKHJwNiA+PiA4KTsKKwlycDYgJj0gMHhmZjsKKwlycDggXj0gKHJwOCA+PiAxNik7CisJcnA4IF49IChycDggPj4gOCk7CisJcnA4ICY9IDB4ZmY7CisJcnAxMCBePSAocnAxMCA+PiAxNik7CisJcnAxMCBePSAocnAxMCA+PiA4KTsKKwlycDEwICY9IDB4ZmY7CisJcnAxMiBePSAocnAxMiA+PiAxNik7CisJcnAxMiBePSAocnAxMiA+PiA4KTsKKwlycDEyICY9IDB4ZmY7CisJcnAxNCBePSAocnAxNCA+PiAxNik7CisJcnAxNCBePSAocnAxNCA+PiA4KTsKKwlycDE0ICY9IDB4ZmY7CisJaWYgKGVjY3NpemVfbXVsdCA9PSAyKSB7CisJCXJwMTYgXj0gKHJwMTYgPj4gMTYpOworCQlycDE2IF49IChycDE2ID4+IDgpOworCQlycDE2ICY9IDB4ZmY7CisJfQogCi0JdG1wMiAgPSAocmVnMyAmIDB4MDgpIDw8IDQ7IC8qIEIzIC0+IEI3ICovCi0JdG1wMiB8PSAocmVnMiAmIDB4MDgpIDw8IDM7IC8qIEIzIC0+IEI2ICovCi0JdG1wMiB8PSAocmVnMyAmIDB4MDQpIDw8IDM7IC8qIEIyIC0+IEI1ICovCi0JdG1wMiB8PSAocmVnMiAmIDB4MDQpIDw8IDI7IC8qIEIyIC0+IEI0ICovCi0JdG1wMiB8PSAocmVnMyAmIDB4MDIpIDw8IDI7IC8qIEIxIC0+IEIzICovCi0JdG1wMiB8PSAocmVnMiAmIDB4MDIpIDw8IDE7IC8qIEIxIC0+IEIyICovCi0JdG1wMiB8PSAocmVnMyAmIDB4MDEpIDw8IDE7IC8qIEIwIC0+IEIxICovCi0JdG1wMiB8PSAocmVnMiAmIDB4MDEpIDw8IDA7IC8qIEI3IC0+IEIwICovCi0KLQkvKiBDYWxjdWxhdGUgZmluYWwgRUNDIGNvZGUgKi8KLSNpZmRlZiBDT05GSUdfTVREX05BTkRfRUNDX1NNQwotCWVjY19jb2RlWzBdID0gfnRtcDI7Ci0JZWNjX2NvZGVbMV0gPSB+dG1wMTsKKwkvKgorCSAqIHdlIGFsc28gbmVlZCB0byBjYWxjdWxhdGUgdGhlIHJvdyBwYXJpdHkgZm9yIHJwMC4ucnAzCisJICogVGhpcyBpcyBwcmVzZW50IGluIHBhciwgYmVjYXVzZSBwYXIgaXMgbm93CisJICogcnAzIHJwMyBycDIgcnAyIGluIGxpdHRsZSBlbmRpYW4gYW5kCisJICogcnAyIHJwMiBycDMgcnAzIGluIGJpZyBlbmRpYW4KKwkgKiBhcyB3ZWxsIGFzCisJICogcnAxIHJwMCBycDEgcnAwIGluIGxpdHRsZSBlbmRpYW4gYW5kCisJICogcnAwIHJwMSBycDAgcnAxIGluIGJpZyBlbmRpYW4KKwkgKiBGaXJzdCBjYWxjdWxhdGUgcnAyIGFuZCBycDMKKwkgKi8KKyNpZmRlZiBfX0JJR19FTkRJQU4KKwlycDIgPSAocGFyID4+IDE2KTsKKwlycDIgXj0gKHJwMiA+PiA4KTsKKwlycDIgJj0gMHhmZjsKKwlycDMgPSBwYXIgJiAweGZmZmY7CisJcnAzIF49IChycDMgPj4gOCk7CisJcnAzICY9IDB4ZmY7CiAjZWxzZQotCWVjY19jb2RlWzBdID0gfnRtcDE7Ci0JZWNjX2NvZGVbMV0gPSB+dG1wMjsKKwlycDMgPSAocGFyID4+IDE2KTsKKwlycDMgXj0gKHJwMyA+PiA4KTsKKwlycDMgJj0gMHhmZjsKKwlycDIgPSBwYXIgJiAweGZmZmY7CisJcnAyIF49IChycDIgPj4gOCk7CisJcnAyICY9IDB4ZmY7CiAjZW5kaWYKLQllY2NfY29kZVsyXSA9ICgofnJlZzEpIDw8IDIpIHwgMHgwMzsKIAorCS8qIHJlZHVjZSBwYXIgdG8gMTYgYml0cyB0aGVuIGNhbGN1bGF0ZSBycDEgYW5kIHJwMCAqLworCXBhciBePSAocGFyID4+IDE2KTsKKyNpZmRlZiBfX0JJR19FTkRJQU4KKwlycDAgPSAocGFyID4+IDgpICYgMHhmZjsKKwlycDEgPSAocGFyICYgMHhmZik7CisjZWxzZQorCXJwMSA9IChwYXIgPj4gOCkgJiAweGZmOworCXJwMCA9IChwYXIgJiAweGZmKTsKKyNlbmRpZgorCisJLyogZmluYWxseSByZWR1Y2UgcGFyIHRvIDggYml0cyAqLworCXBhciBePSAocGFyID4+IDgpOworCXBhciAmPSAweGZmOworCisJLyoKKwkgKiBhbmQgY2FsY3VsYXRlIHJwNS4ucnAxNS4ucnAxNworCSAqIG5vdGUgdGhhdCBwYXIgPSBycDQgXiBycDUgYW5kIGR1ZSB0byB0aGUgY29tbXV0YXRpdmUgcHJvcGVydHkKKwkgKiBvZiB0aGUgXiBvcGVyYXRvciB3ZSBjYW4gc2F5OgorCSAqIHJwNSA9IChwYXIgXiBycDQpOworCSAqIFRoZSAmIDB4ZmYgc2VlbXMgc3VwZXJmbHVvdXMsIGJ1dCBiZW5jaG1hcmtpbmcgbGVhcm5lZCB0aGF0CisJICogbGVhdmluZyBpdCBvdXQgZ2l2ZXMgc2xpZ2h0bHkgd29yc2UgcmVzdWx0cy4gTm8gaWRlYSB3aHksIHByb2JhYmx5CisJICogaXQgaGFzIHRvIGRvIHdpdGggdGhlIHdheSB0aGUgcGlwZWxpbmUgaW4gcGVudGl1bSBpcyBvcmdhbml6ZWQuCisJICovCisJcnA1ID0gKHBhciBeIHJwNCkgJiAweGZmOworCXJwNyA9IChwYXIgXiBycDYpICYgMHhmZjsKKwlycDkgPSAocGFyIF4gcnA4KSAmIDB4ZmY7CisJcnAxMSA9IChwYXIgXiBycDEwKSAmIDB4ZmY7CisJcnAxMyA9IChwYXIgXiBycDEyKSAmIDB4ZmY7CisJcnAxNSA9IChwYXIgXiBycDE0KSAmIDB4ZmY7CisJaWYgKGVjY3NpemVfbXVsdCA9PSAyKQorCQlycDE3ID0gKHBhciBeIHJwMTYpICYgMHhmZjsKKworCS8qCisJICogRmluYWxseSBjYWxjdWxhdGUgdGhlIGVjYyBiaXRzLgorCSAqIEFnYWluIGhlcmUgaXQgbWlnaHQgc2VlbSB0aGF0IHRoZXJlIGFyZSBwZXJmb3JtYW5jZSBvcHRpbWlzYXRpb25zCisJICogcG9zc2libGUsIGJ1dCBiZW5jaG1hcmtzIHNob3dlZCB0aGF0IG9uIHRoZSBzeXN0ZW0gdGhpcyBpcyBkZXZlbG9wZWQKKwkgKiB0aGUgY29kZSBiZWxvdyBpcyB0aGUgZmFzdGVzdAorCSAqLworI2lmZGVmIENPTkZJR19NVERfTkFORF9FQ0NfU01DCisJY29kZVswXSA9CisJICAgIChpbnZwYXJpdHlbcnA3XSA8PCA3KSB8CisJICAgIChpbnZwYXJpdHlbcnA2XSA8PCA2KSB8CisJICAgIChpbnZwYXJpdHlbcnA1XSA8PCA1KSB8CisJICAgIChpbnZwYXJpdHlbcnA0XSA8PCA0KSB8CisJICAgIChpbnZwYXJpdHlbcnAzXSA8PCAzKSB8CisJICAgIChpbnZwYXJpdHlbcnAyXSA8PCAyKSB8CisJICAgIChpbnZwYXJpdHlbcnAxXSA8PCAxKSB8CisJICAgIChpbnZwYXJpdHlbcnAwXSk7CisJY29kZVsxXSA9CisJICAgIChpbnZwYXJpdHlbcnAxNV0gPDwgNykgfAorCSAgICAoaW52cGFyaXR5W3JwMTRdIDw8IDYpIHwKKwkgICAgKGludnBhcml0eVtycDEzXSA8PCA1KSB8CisJICAgIChpbnZwYXJpdHlbcnAxMl0gPDwgNCkgfAorCSAgICAoaW52cGFyaXR5W3JwMTFdIDw8IDMpIHwKKwkgICAgKGludnBhcml0eVtycDEwXSA8PCAyKSB8CisJICAgIChpbnZwYXJpdHlbcnA5XSA8PCAxKSAgfAorCSAgICAoaW52cGFyaXR5W3JwOF0pOworI2Vsc2UKKwljb2RlWzFdID0KKwkgICAgKGludnBhcml0eVtycDddIDw8IDcpIHwKKwkgICAgKGludnBhcml0eVtycDZdIDw8IDYpIHwKKwkgICAgKGludnBhcml0eVtycDVdIDw8IDUpIHwKKwkgICAgKGludnBhcml0eVtycDRdIDw8IDQpIHwKKwkgICAgKGludnBhcml0eVtycDNdIDw8IDMpIHwKKwkgICAgKGludnBhcml0eVtycDJdIDw8IDIpIHwKKwkgICAgKGludnBhcml0eVtycDFdIDw8IDEpIHwKKwkgICAgKGludnBhcml0eVtycDBdKTsKKwljb2RlWzBdID0KKwkgICAgKGludnBhcml0eVtycDE1XSA8PCA3KSB8CisJICAgIChpbnZwYXJpdHlbcnAxNF0gPDwgNikgfAorCSAgICAoaW52cGFyaXR5W3JwMTNdIDw8IDUpIHwKKwkgICAgKGludnBhcml0eVtycDEyXSA8PCA0KSB8CisJICAgIChpbnZwYXJpdHlbcnAxMV0gPDwgMykgfAorCSAgICAoaW52cGFyaXR5W3JwMTBdIDw8IDIpIHwKKwkgICAgKGludnBhcml0eVtycDldIDw8IDEpICB8CisJICAgIChpbnZwYXJpdHlbcnA4XSk7CisjZW5kaWYKKwlpZiAoZWNjc2l6ZV9tdWx0ID09IDEpCisJCWNvZGVbMl0gPQorCQkgICAgKGludnBhcml0eVtwYXIgJiAweGYwXSA8PCA3KSB8CisJCSAgICAoaW52cGFyaXR5W3BhciAmIDB4MGZdIDw8IDYpIHwKKwkJICAgIChpbnZwYXJpdHlbcGFyICYgMHhjY10gPDwgNSkgfAorCQkgICAgKGludnBhcml0eVtwYXIgJiAweDMzXSA8PCA0KSB8CisJCSAgICAoaW52cGFyaXR5W3BhciAmIDB4YWFdIDw8IDMpIHwKKwkJICAgIChpbnZwYXJpdHlbcGFyICYgMHg1NV0gPDwgMikgfAorCQkgICAgMzsKKwllbHNlCisJCWNvZGVbMl0gPQorCQkgICAgKGludnBhcml0eVtwYXIgJiAweGYwXSA8PCA3KSB8CisJCSAgICAoaW52cGFyaXR5W3BhciAmIDB4MGZdIDw8IDYpIHwKKwkJICAgIChpbnZwYXJpdHlbcGFyICYgMHhjY10gPDwgNSkgfAorCQkgICAgKGludnBhcml0eVtwYXIgJiAweDMzXSA8PCA0KSB8CisJCSAgICAoaW52cGFyaXR5W3BhciAmIDB4YWFdIDw8IDMpIHwKKwkJICAgIChpbnZwYXJpdHlbcGFyICYgMHg1NV0gPDwgMikgfAorCQkgICAgKGludnBhcml0eVtycDE3XSA8PCAxKSB8CisJCSAgICAoaW52cGFyaXR5W3JwMTZdIDw8IDApOwogCXJldHVybiAwOwogfQogRVhQT1JUX1NZTUJPTChuYW5kX2NhbGN1bGF0ZV9lY2MpOwogCi1zdGF0aWMgaW5saW5lIGludCBjb3VudGJpdHModWludDMyX3QgYnl0ZSkKLXsKLQlpbnQgcmVzID0gMDsKLQotCWZvciAoO2J5dGU7IGJ5dGUgPj49IDEpCi0JCXJlcyArPSBieXRlICYgMHgwMTsKLQlyZXR1cm4gcmVzOwotfQotCiAvKioKICAqIG5hbmRfY29ycmVjdF9kYXRhIC0gW05BTkQgSW50ZXJmYWNlXSBEZXRlY3QgYW5kIGNvcnJlY3QgYml0IGVycm9yKHMpCiAgKiBAbXRkOglNVEQgYmxvY2sgc3RydWN0dXJlCi0gKiBAZGF0OglyYXcgZGF0YSByZWFkIGZyb20gdGhlIGNoaXAKKyAqIEBidWY6CXJhdyBkYXRhIHJlYWQgZnJvbSB0aGUgY2hpcAogICogQHJlYWRfZWNjOglFQ0MgZnJvbSB0aGUgY2hpcAogICogQGNhbGNfZWNjOgl0aGUgRUNDIGNhbGN1bGF0ZWQgZnJvbSByYXcgZGF0YQogICoKLSAqIERldGVjdCBhbmQgY29ycmVjdCBhIDEgYml0IGVycm9yIGZvciAyNTYgYnl0ZSBibG9jaworICogRGV0ZWN0IGFuZCBjb3JyZWN0IGEgMSBiaXQgZXJyb3IgZm9yIDI1Ni81MTIgYnl0ZSBibG9jawogICovCi1pbnQgbmFuZF9jb3JyZWN0X2RhdGEoc3RydWN0IG10ZF9pbmZvICptdGQsIHVfY2hhciAqZGF0LAotCQkgICAgICB1X2NoYXIgKnJlYWRfZWNjLCB1X2NoYXIgKmNhbGNfZWNjKQoraW50IG5hbmRfY29ycmVjdF9kYXRhKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCB1bnNpZ25lZCBjaGFyICpidWYsCisJCSAgICAgIHVuc2lnbmVkIGNoYXIgKnJlYWRfZWNjLCB1bnNpZ25lZCBjaGFyICpjYWxjX2VjYykKIHsKLQl1aW50OF90IHMwLCBzMSwgczI7CisJdW5zaWduZWQgY2hhciBiMCwgYjEsIGIyOworCXVuc2lnbmVkIGNoYXIgYnl0ZV9hZGRyLCBiaXRfYWRkcjsKKwkvKiAyNTYgb3IgNTEyIGJ5dGVzL2VjYyAgKi8KKwljb25zdCB1aW50MzJfdCBlY2NzaXplX211bHQgPQorCQkJKCgoc3RydWN0IG5hbmRfY2hpcCAqKW10ZC0+cHJpdiktPmVjYy5zaXplKSA+PiA4OwogCisJLyoKKwkgKiBiMCB0byBiMiBpbmRpY2F0ZSB3aGljaCBiaXQgaXMgZmF1bHR5IChpZiBhbnkpCisJICogd2UgbWlnaHQgbmVlZCB0aGUgeG9yIHJlc3VsdCAgbW9yZSB0aGFuIG9uY2UsCisJICogc28ga2VlcCB0aGVtIGluIGEgbG9jYWwgdmFyCisJKi8KICNpZmRlZiBDT05GSUdfTVREX05BTkRfRUNDX1NNQwotCXMwID0gY2FsY19lY2NbMF0gXiByZWFkX2VjY1swXTsKLQlzMSA9IGNhbGNfZWNjWzFdIF4gcmVhZF9lY2NbMV07Ci0JczIgPSBjYWxjX2VjY1syXSBeIHJlYWRfZWNjWzJdOworCWIwID0gcmVhZF9lY2NbMF0gXiBjYWxjX2VjY1swXTsKKwliMSA9IHJlYWRfZWNjWzFdIF4gY2FsY19lY2NbMV07CiAjZWxzZQotCXMxID0gY2FsY19lY2NbMF0gXiByZWFkX2VjY1swXTsKLQlzMCA9IGNhbGNfZWNjWzFdIF4gcmVhZF9lY2NbMV07Ci0JczIgPSBjYWxjX2VjY1syXSBeIHJlYWRfZWNjWzJdOworCWIwID0gcmVhZF9lY2NbMV0gXiBjYWxjX2VjY1sxXTsKKwliMSA9IHJlYWRfZWNjWzBdIF4gY2FsY19lY2NbMF07CiAjZW5kaWYKLQlpZiAoKHMwIHwgczEgfCBzMikgPT0gMCkKLQkJcmV0dXJuIDA7CisJYjIgPSByZWFkX2VjY1syXSBeIGNhbGNfZWNjWzJdOwogCi0JLyogQ2hlY2sgZm9yIGEgc2luZ2xlIGJpdCBlcnJvciAqLwotCWlmKCAoKHMwIF4gKHMwID4+IDEpKSAmIDB4NTUpID09IDB4NTUgJiYKLQkgICAgKChzMSBeIChzMSA+PiAxKSkgJiAweDU1KSA9PSAweDU1ICYmCi0JICAgICgoczIgXiAoczIgPj4gMSkpICYgMHg1NCkgPT0gMHg1NCkgeworCS8qIGNoZWNrIGlmIHRoZXJlIGFyZSBhbnkgYml0ZmF1bHRzICovCiAKLQkJdWludDMyX3QgYnl0ZW9mZnMsIGJpdG51bTsKKwkvKiByZXBlYXRlZCBpZiBzdGF0ZW1lbnRzIGFyZSBzbGlnaHRseSBtb3JlIGVmZmljaWVudCB0aGFuIHN3aXRjaCAuLi4gKi8KKwkvKiBvcmRlcmVkIGluIG9yZGVyIG9mIGxpa2VsaWhvb2QgKi8KIAotCQlieXRlb2ZmcyA9IChzMSA8PCAwKSAmIDB4ODA7Ci0JCWJ5dGVvZmZzIHw9IChzMSA8PCAxKSAmIDB4NDA7Ci0JCWJ5dGVvZmZzIHw9IChzMSA8PCAyKSAmIDB4MjA7Ci0JCWJ5dGVvZmZzIHw9IChzMSA8PCAzKSAmIDB4MTA7CisJaWYgKChiMCB8IGIxIHwgYjIpID09IDApCisJCXJldHVybiAwOwkvKiBubyBlcnJvciAqLwogCi0JCWJ5dGVvZmZzIHw9IChzMCA+PiA0KSAmIDB4MDg7Ci0JCWJ5dGVvZmZzIHw9IChzMCA+PiAzKSAmIDB4MDQ7Ci0JCWJ5dGVvZmZzIHw9IChzMCA+PiAyKSAmIDB4MDI7Ci0JCWJ5dGVvZmZzIHw9IChzMCA+PiAxKSAmIDB4MDE7Ci0KLQkJYml0bnVtID0gKHMyID4+IDUpICYgMHgwNDsKLQkJYml0bnVtIHw9IChzMiA+PiA0KSAmIDB4MDI7Ci0JCWJpdG51bSB8PSAoczIgPj4gMykgJiAweDAxOwotCi0JCWRhdFtieXRlb2Zmc10gXj0gKDEgPDwgYml0bnVtKTsKLQorCWlmICgoKChiMCBeIChiMCA+PiAxKSkgJiAweDU1KSA9PSAweDU1KSAmJgorCSAgICAoKChiMSBeIChiMSA+PiAxKSkgJiAweDU1KSA9PSAweDU1KSAmJgorCSAgICAoKGVjY3NpemVfbXVsdCA9PSAxICYmICgoYjIgXiAoYjIgPj4gMSkpICYgMHg1NCkgPT0gMHg1NCkgfHwKKwkgICAgIChlY2NzaXplX211bHQgPT0gMiAmJiAoKGIyIF4gKGIyID4+IDEpKSAmIDB4NTUpID09IDB4NTUpKSkgeworCS8qIHNpbmdsZSBiaXQgZXJyb3IgKi8KKwkJLyoKKwkJICogcnAxNy9ycDE1LzEzLzExLzkvNy81LzMvMSBpbmRpY2F0ZSB3aGljaCBieXRlIGlzIHRoZSBmYXVsdHkKKwkJICogYnl0ZSwgY3AgNS8zLzEgaW5kaWNhdGUgdGhlIGZhdWx0eSBiaXQuCisJCSAqIEEgbG9va3VwIHRhYmxlIChjYWxsZWQgYWRkcmVzc2JpdHMpIGlzIHVzZWQgdG8gZmlsdGVyCisJCSAqIHRoZSBiaXRzIGZyb20gdGhlIGJ5dGUgdGhleSBhcmUgaW4uCisJCSAqIEEgbWFyZ2luYWwgb3B0aW1pc2F0aW9uIGlzIHBvc3NpYmxlIGJ5IGhhdmluZyB0aHJlZQorCQkgKiBkaWZmZXJlbnQgbG9va3VwIHRhYmxlcy4KKwkJICogT25lIGFzIHdlIGhhdmUgbm93IChmb3IgYjApLCBvbmUgZm9yIGIyCisJCSAqICh0aGF0IHdvdWxkIGF2b2lkIHRoZSA+PiAxKSwgYW5kIG9uZSBmb3IgYjEgKHdpdGggYWxsIHZhbHVlcworCQkgKiA8PCA0KS4gSG93ZXZlciBpdCB3YXMgZmVsdCB0aGF0IGludHJvZHVjaW5nIHR3byBtb3JlIHRhYmxlcworCQkgKiBoYXJkbHkganVzdGlmeSB0aGUgZ2Fpbi4KKwkJICoKKwkJICogVGhlIGIyIHNoaWZ0IGlzIHRoZXJlIHRvIGdldCByaWQgb2YgdGhlIGxvd2VzdCB0d28gYml0cy4KKwkJICogV2UgY291bGQgYWxzbyBkbyBhZGRyZXNzYml0c1tiMl0gPj4gMSBidXQgZm9yIHRoZQorCQkgKiBwZXJmb3JtYWNlIGl0IGRvZXMgbm90IG1ha2UgYW55IGRpZmZlcmVuY2UKKwkJICovCisJCWlmIChlY2NzaXplX211bHQgPT0gMSkKKwkJCWJ5dGVfYWRkciA9IChhZGRyZXNzYml0c1tiMV0gPDwgNCkgKyBhZGRyZXNzYml0c1tiMF07CisJCWVsc2UKKwkJCWJ5dGVfYWRkciA9IChhZGRyZXNzYml0c1tiMiAmIDB4M10gPDwgOCkgKworCQkJCSAgICAoYWRkcmVzc2JpdHNbYjFdIDw8IDQpICsgYWRkcmVzc2JpdHNbYjBdOworCQliaXRfYWRkciA9IGFkZHJlc3NiaXRzW2IyID4+IDJdOworCQkvKiBmbGlwIHRoZSBiaXQgKi8KKwkJYnVmW2J5dGVfYWRkcl0gXj0gKDEgPDwgYml0X2FkZHIpOwogCQlyZXR1cm4gMTsKKwogCX0KKwkvKiBjb3VudCBuciBvZiBiaXRzOyB1c2UgdGFibGUgbG9va3VwLCBmYXN0ZXIgdGhhbiBjYWxjdWxhdGluZyBpdCAqLworCWlmICgoYml0c3BlcmJ5dGVbYjBdICsgYml0c3BlcmJ5dGVbYjFdICsgYml0c3BlcmJ5dGVbYjJdKSA9PSAxKQorCQlyZXR1cm4gMTsJLyogZXJyb3IgaW4gZWNjIGRhdGE7IG5vIGFjdGlvbiBuZWVkZWQgKi8KIAotCWlmKGNvdW50Yml0cyhzMCB8ICgodWludDMyX3QpczEgPDwgOCkgfCAoKHVpbnQzMl90KXMyIDw8MTYpKSA9PSAxKQotCQlyZXR1cm4gMTsKLQotCXJldHVybiAtRUJBRE1TRzsKKwlwcmludGsoS0VSTl9FUlIgInVuY29ycmVjdGFibGUgZXJyb3IgOiAiKTsKKwlyZXR1cm4gLTE7CiB9CiBFWFBPUlRfU1lNQk9MKG5hbmRfY29ycmVjdF9kYXRhKTsKIAogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotTU9EVUxFX0FVVEhPUigiU3RldmVuIEouIEhpbGwgPHNqaGlsbEByZWFsaXR5ZGlsdXRlZC5jb20+Iik7CitNT0RVTEVfQVVUSE9SKCJGcmFucyBNZXVsZW5icm9la3MgPGZyYW5zbWV1bGVuYnJvZWtzQGdtYWlsLmNvbT4iKTsKIE1PRFVMRV9ERVNDUklQVElPTigiR2VuZXJpYyBOQU5EIEVDQyBzdXBwb3J0Iik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9uYW5kL25hbmRzaW0uYyBiL2RyaXZlcnMvbXRkL25hbmQvbmFuZHNpbS5jCmluZGV4IDU1NmU4MTMuLmFlN2M1NzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL25hbmQvbmFuZHNpbS5jCisrKyBiL2RyaXZlcnMvbXRkL25hbmQvbmFuZHNpbS5jCkBAIC0zOCw3ICszOCw2IEBACiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CiAjaW5jbHVkZSA8bGludXgvcmFuZG9tLmg+Ci0jaW5jbHVkZSA8YXNtL2RpdjY0Lmg+CiAKIC8qIERlZmF1bHQgc2ltdWxhdG9yIHBhcmFtZXRlcnMgdmFsdWVzICovCiAjaWYgIWRlZmluZWQoQ09ORklHX05BTkRTSU1fRklSU1RfSURfQllURSkgIHx8IFwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL25hbmQvcHhhM3h4X25hbmQuYyBiL2RyaXZlcnMvbXRkL25hbmQvcHhhM3h4X25hbmQuYwppbmRleCBhNjRhZDE1Li5jMGZhOWM5IDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9uYW5kL3B4YTN4eF9uYW5kLmMKKysrIGIvZHJpdmVycy9tdGQvbmFuZC9weGEzeHhfbmFuZC5jCkBAIC0xMTUsNTUgKzExNSwxMSBAQAogCVNUQVRFX1BJT19XUklUSU5HLAogfTsKIAotc3RydWN0IHB4YTN4eF9uYW5kX3RpbWluZyB7Ci0JdW5zaWduZWQgaW50CXRDSDsgIC8qIEVuYWJsZSBzaWduYWwgaG9sZCB0aW1lICovCi0JdW5zaWduZWQgaW50CXRDUzsgIC8qIEVuYWJsZSBzaWduYWwgc2V0dXAgdGltZSAqLwotCXVuc2lnbmVkIGludAl0V0g7ICAvKiBORF9uV0UgaGlnaCBkdXJhdGlvbiAqLwotCXVuc2lnbmVkIGludAl0V1A7ICAvKiBORF9uV0UgcHVsc2UgdGltZSAqLwotCXVuc2lnbmVkIGludAl0Ukg7ICAvKiBORF9uUkUgaGlnaCBkdXJhdGlvbiAqLwotCXVuc2lnbmVkIGludAl0UlA7ICAvKiBORF9uUkUgcHVsc2Ugd2lkdGggKi8KLQl1bnNpZ25lZCBpbnQJdFI7ICAgLyogTkRfbldFIGhpZ2ggdG8gTkRfblJFIGxvdyBmb3IgcmVhZCAqLwotCXVuc2lnbmVkIGludAl0V0hSOyAvKiBORF9uV0UgaGlnaCB0byBORF9uUkUgbG93IGZvciBzdGF0dXMgcmVhZCAqLwotCXVuc2lnbmVkIGludAl0QVI7ICAvKiBORF9BTEUgbG93IHRvIE5EX25SRSBsb3cgZGVsYXkgKi8KLX07Ci0KLXN0cnVjdCBweGEzeHhfbmFuZF9jbWRzZXQgewotCXVpbnQxNl90CXJlYWQxOwotCXVpbnQxNl90CXJlYWQyOwotCXVpbnQxNl90CXByb2dyYW07Ci0JdWludDE2X3QJcmVhZF9zdGF0dXM7Ci0JdWludDE2X3QJcmVhZF9pZDsKLQl1aW50MTZfdAllcmFzZTsKLQl1aW50MTZfdAlyZXNldDsKLQl1aW50MTZfdAlsb2NrOwotCXVpbnQxNl90CXVubG9jazsKLQl1aW50MTZfdAlsb2NrX3N0YXR1czsKLX07Ci0KLXN0cnVjdCBweGEzeHhfbmFuZF9mbGFzaCB7Ci0Jc3RydWN0IHB4YTN4eF9uYW5kX3RpbWluZyAqdGltaW5nOyAvKiBOQU5EIEZsYXNoIHRpbWluZyAqLwotCXN0cnVjdCBweGEzeHhfbmFuZF9jbWRzZXQgKmNtZHNldDsKLQotCXVpbnQzMl90IHBhZ2VfcGVyX2Jsb2NrOy8qIFBhZ2VzIHBlciBibG9jayAoUEdfUEVSX0JMSykgKi8KLQl1aW50MzJfdCBwYWdlX3NpemU7CS8qIFBhZ2Ugc2l6ZSBpbiBieXRlcyAoUEFHRV9TWikgKi8KLQl1aW50MzJfdCBmbGFzaF93aWR0aDsJLyogV2lkdGggb2YgRmxhc2ggbWVtb3J5IChEV0lEVEhfTSkgKi8KLQl1aW50MzJfdCBkZmNfd2lkdGg7CS8qIFdpZHRoIG9mIGZsYXNoIGNvbnRyb2xsZXIoRFdJRFRIX0MpICovCi0JdWludDMyX3QgbnVtX2Jsb2NrczsJLyogTnVtYmVyIG9mIHBoeXNpY2FsIGJsb2NrcyBpbiBGbGFzaCAqLwotCXVpbnQzMl90IGNoaXBfaWQ7Ci0KLQkvKiBOT1RFOiB0aGVzZSBhcmUgYXV0b21hdGljYWxseSBjYWxjdWxhdGVkLCBkbyBub3QgZGVmaW5lICovCi0Jc2l6ZV90CQlvb2Jfc2l6ZTsKLQlzaXplX3QJCXJlYWRfaWRfYnl0ZXM7Ci0KLQl1bnNpZ25lZCBpbnQJY29sX2FkZHJfY3ljbGVzOwotCXVuc2lnbmVkIGludAlyb3dfYWRkcl9jeWNsZXM7Ci19OwotCiBzdHJ1Y3QgcHhhM3h4X25hbmRfaW5mbyB7CiAJc3RydWN0IG5hbmRfY2hpcAluYW5kX2NoaXA7CiAKIAlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlCSAqcGRldjsKLQlzdHJ1Y3QgcHhhM3h4X25hbmRfZmxhc2ggKmZsYXNoX2luZm87CisJY29uc3Qgc3RydWN0IHB4YTN4eF9uYW5kX2ZsYXNoICpmbGFzaF9pbmZvOwogCiAJc3RydWN0IGNsawkJKmNsazsKIAl2b2lkIF9faW9tZW0JCSptbWlvX2Jhc2U7CkBAIC0yMDIsMTIgKzE1OCwyMCBAQAogCXVpbnQzMl90CQluZGNiMDsKIAl1aW50MzJfdAkJbmRjYjE7CiAJdWludDMyX3QJCW5kY2IyOworCisJLyogY2FsY3VsYXRlZCBmcm9tIHB4YTN4eF9uYW5kX2ZsYXNoIGRhdGEgKi8KKwlzaXplX3QJCW9vYl9zaXplOworCXNpemVfdAkJcmVhZF9pZF9ieXRlczsKKworCXVuc2lnbmVkIGludAljb2xfYWRkcl9jeWNsZXM7CisJdW5zaWduZWQgaW50CXJvd19hZGRyX2N5Y2xlczsKIH07CiAKIHN0YXRpYyBpbnQgdXNlX2RtYSA9IDE7CiBtb2R1bGVfcGFyYW0odXNlX2RtYSwgYm9vbCwgMDQ0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKHVzZV9kbWEsICJlbmFibGUgRE1BIGZvciBkYXRhIHRyYW5zZmVyaW5nIHRvL2Zyb20gTkFORCBIVyIpOwogCisjaWZkZWYgQ09ORklHX01URF9OQU5EX1BYQTN4eF9CVUlMVElOCiBzdGF0aWMgc3RydWN0IHB4YTN4eF9uYW5kX2NtZHNldCBzbWFsbHBhZ2VfY21kc2V0ID0gewogCS5yZWFkMQkJPSAweDAwMDAsCiAJLnJlYWQyCQk9IDB4MDA1MCwKQEAgLTI5MSwxMSArMjU1LDM1IEBACiAJLmNoaXBfaWQJPSAweGIxMmMsCiB9OwogCitzdGF0aWMgc3RydWN0IHB4YTN4eF9uYW5kX3RpbWluZyBzdG0yR2JYMTZfdGltaW5nID0geworCS50Q0ggPSAxMCwKKwkudENTID0gMzUsCisJLnRXSCA9IDE1LAorCS50V1AgPSAyNSwKKwkudFJIID0gMTUsCisJLnRSUCA9IDI1LAorCS50UiA9IDI1MDAwLAorCS50V0hSID0gNjAsCisJLnRBUiA9IDEwLAorfTsKKworc3RhdGljIHN0cnVjdCBweGEzeHhfbmFuZF9mbGFzaCBzdG0yR2JYMTYgPSB7CisJLnRpbWluZyA9ICZzdG0yR2JYMTZfdGltaW5nLAorCS5wYWdlX3Blcl9ibG9jayA9IDY0LAorCS5wYWdlX3NpemUgPSAyMDQ4LAorCS5mbGFzaF93aWR0aCA9IDE2LAorCS5kZmNfd2lkdGggPSAxNiwKKwkubnVtX2Jsb2NrcyA9IDIwNDgsCisJLmNoaXBfaWQgPSAweGJhMjAsCit9OworCiBzdGF0aWMgc3RydWN0IHB4YTN4eF9uYW5kX2ZsYXNoICpidWlsdGluX2ZsYXNoX3R5cGVzW10gPSB7CiAJJnNhbXN1bmc1MTJNYlgxNiwKIAkmbWljcm9uMUdiWDgsCiAJJm1pY3JvbjFHYlgxNiwKKwkmc3RtMkdiWDE2LAogfTsKKyNlbmRpZiAvKiBDT05GSUdfTVREX05BTkRfUFhBM3h4X0JVSUxUSU4gKi8KIAogI2RlZmluZSBORFRSMF90Q0goYykJKG1pbigoYyksIDcpIDw8IDE5KQogI2RlZmluZSBORFRSMF90Q1MoYykJKG1pbigoYyksIDcpIDw8IDE2KQpAQCAtMzEyLDcgKzMwMCw3IEBACiAjZGVmaW5lIG5zMmN5Y2xlKG5zLCBjbGspCShpbnQpKCgobnMpICogKGNsayAvIDEwMDAwMDApIC8gMTAwMCkgKyAxKQogCiBzdGF0aWMgdm9pZCBweGEzeHhfbmFuZF9zZXRfdGltaW5nKHN0cnVjdCBweGEzeHhfbmFuZF9pbmZvICppbmZvLAotCQkJCSAgIHN0cnVjdCBweGEzeHhfbmFuZF90aW1pbmcgKnQpCisJCQkJICAgY29uc3Qgc3RydWN0IHB4YTN4eF9uYW5kX3RpbWluZyAqdCkKIHsKIAl1bnNpZ25lZCBsb25nIG5hbmRfY2xrID0gY2xrX2dldF9yYXRlKGluZm8tPmNsayk7CiAJdWludDMyX3QgbmR0cjAsIG5kdHIxOwpAQCAtMzU0LDggKzM0Miw4IEBACiBzdGF0aWMgaW50IHByZXBhcmVfcmVhZF9wcm9nX2NtZChzdHJ1Y3QgcHhhM3h4X25hbmRfaW5mbyAqaW5mbywKIAkJCXVpbnQxNl90IGNtZCwgaW50IGNvbHVtbiwgaW50IHBhZ2VfYWRkcikKIHsKLQlzdHJ1Y3QgcHhhM3h4X25hbmRfZmxhc2ggKmYgPSBpbmZvLT5mbGFzaF9pbmZvOwotCXN0cnVjdCBweGEzeHhfbmFuZF9jbWRzZXQgKmNtZHNldCA9IGYtPmNtZHNldDsKKwljb25zdCBzdHJ1Y3QgcHhhM3h4X25hbmRfZmxhc2ggKmYgPSBpbmZvLT5mbGFzaF9pbmZvOworCWNvbnN0IHN0cnVjdCBweGEzeHhfbmFuZF9jbWRzZXQgKmNtZHNldCA9IGYtPmNtZHNldDsKIAogCS8qIGNhbGN1bGF0ZSBkYXRhIHNpemUgKi8KIAlzd2l0Y2ggKGYtPnBhZ2Vfc2l6ZSkgewpAQCAtMzczLDE0ICszNjEsMTQgQEAKIAlpbmZvLT5uZGNiMCA9IGNtZCB8ICgoY21kICYgMHhmZjAwKSA/IE5EQ0IwX0RCQyA6IDApOwogCWluZm8tPm5kY2IxID0gMDsKIAlpbmZvLT5uZGNiMiA9IDA7Ci0JaW5mby0+bmRjYjAgfD0gTkRDQjBfQUREUl9DWUMoZi0+cm93X2FkZHJfY3ljbGVzICsgZi0+Y29sX2FkZHJfY3ljbGVzKTsKKwlpbmZvLT5uZGNiMCB8PSBORENCMF9BRERSX0NZQyhpbmZvLT5yb3dfYWRkcl9jeWNsZXMgKyBpbmZvLT5jb2xfYWRkcl9jeWNsZXMpOwogCi0JaWYgKGYtPmNvbF9hZGRyX2N5Y2xlcyA9PSAyKSB7CisJaWYgKGluZm8tPmNvbF9hZGRyX2N5Y2xlcyA9PSAyKSB7CiAJCS8qIGxhcmdlIGJsb2NrLCAyIGN5Y2xlcyBmb3IgY29sdW1uIGFkZHJlc3MKIAkJICogcm93IGFkZHJlc3Mgc3RhcnRzIGZyb20gM3JkIGN5Y2xlCiAJCSAqLwogCQlpbmZvLT5uZGNiMSB8PSAocGFnZV9hZGRyIDw8IDE2KSB8IChjb2x1bW4gJiAweGZmZmYpOwotCQlpZiAoZi0+cm93X2FkZHJfY3ljbGVzID09IDMpCisJCWlmIChpbmZvLT5yb3dfYWRkcl9jeWNsZXMgPT0gMykKIAkJCWluZm8tPm5kY2IyID0gKHBhZ2VfYWRkciA+PiAxNikgJiAweGZmOwogCX0gZWxzZQogCQkvKiBzbWFsbCBibG9jaywgMSBjeWNsZXMgZm9yIGNvbHVtbiBhZGRyZXNzCkBAIC00MDYsNyArMzk0LDcgQEAKIAogc3RhdGljIGludCBwcmVwYXJlX290aGVyX2NtZChzdHJ1Y3QgcHhhM3h4X25hbmRfaW5mbyAqaW5mbywgdWludDE2X3QgY21kKQogewotCXN0cnVjdCBweGEzeHhfbmFuZF9jbWRzZXQgKmNtZHNldCA9IGluZm8tPmZsYXNoX2luZm8tPmNtZHNldDsKKwljb25zdCBzdHJ1Y3QgcHhhM3h4X25hbmRfY21kc2V0ICpjbWRzZXQgPSBpbmZvLT5mbGFzaF9pbmZvLT5jbWRzZXQ7CiAKIAlpbmZvLT5uZGNiMCA9IGNtZCB8ICgoY21kICYgMHhmZjAwKSA/IE5EQ0IwX0RCQyA6IDApOwogCWluZm8tPm5kY2IxID0gMDsKQEAgLTY0MSw4ICs2MjksOCBAQAogCQkJCWludCBjb2x1bW4sIGludCBwYWdlX2FkZHIpCiB7CiAJc3RydWN0IHB4YTN4eF9uYW5kX2luZm8gKmluZm8gPSBtdGQtPnByaXY7Ci0Jc3RydWN0IHB4YTN4eF9uYW5kX2ZsYXNoICpmbGFzaF9pbmZvID0gaW5mby0+Zmxhc2hfaW5mbzsKLQlzdHJ1Y3QgcHhhM3h4X25hbmRfY21kc2V0ICpjbWRzZXQgPSBmbGFzaF9pbmZvLT5jbWRzZXQ7CisJY29uc3Qgc3RydWN0IHB4YTN4eF9uYW5kX2ZsYXNoICpmbGFzaF9pbmZvID0gaW5mby0+Zmxhc2hfaW5mbzsKKwljb25zdCBzdHJ1Y3QgcHhhM3h4X25hbmRfY21kc2V0ICpjbWRzZXQgPSBmbGFzaF9pbmZvLT5jbWRzZXQ7CiAJaW50IHJldDsKIAogCWluZm8tPnVzZV9kbWEgPSAodXNlX2RtYSkgPyAxIDogMDsKQEAgLTcyMCw3ICs3MDgsNyBAQAogCQlpbmZvLT51c2VfZG1hID0gMDsJLyogZm9yY2UgUElPIHJlYWQgKi8KIAkJaW5mby0+YnVmX3N0YXJ0ID0gMDsKIAkJaW5mby0+YnVmX2NvdW50ID0gKGNvbW1hbmQgPT0gTkFORF9DTURfUkVBRElEKSA/Ci0JCQkJZmxhc2hfaW5mby0+cmVhZF9pZF9ieXRlcyA6IDE7CisJCQkJaW5mby0+cmVhZF9pZF9ieXRlcyA6IDE7CiAKIAkJaWYgKHByZXBhcmVfb3RoZXJfY21kKGluZm8sIChjb21tYW5kID09IE5BTkRfQ01EX1JFQURJRCkgPwogCQkJCWNtZHNldC0+cmVhZF9pZCA6IGNtZHNldC0+cmVhZF9zdGF0dXMpKQpAQCAtODYxLDggKzg0OSw4IEBACiAKIHN0YXRpYyBpbnQgX19yZWFkaWQoc3RydWN0IHB4YTN4eF9uYW5kX2luZm8gKmluZm8sIHVpbnQzMl90ICppZCkKIHsKLQlzdHJ1Y3QgcHhhM3h4X25hbmRfZmxhc2ggKmYgPSBpbmZvLT5mbGFzaF9pbmZvOwotCXN0cnVjdCBweGEzeHhfbmFuZF9jbWRzZXQgKmNtZHNldCA9IGYtPmNtZHNldDsKKwljb25zdCBzdHJ1Y3QgcHhhM3h4X25hbmRfZmxhc2ggKmYgPSBpbmZvLT5mbGFzaF9pbmZvOworCWNvbnN0IHN0cnVjdCBweGEzeHhfbmFuZF9jbWRzZXQgKmNtZHNldCA9IGYtPmNtZHNldDsKIAl1aW50MzJfdCBuZGNyOwogCXVpbnQ4X3QgIGlkX2J1ZmZbOF07CiAKQEAgLTg5MSw3ICs4NzksNyBAQAogfQogCiBzdGF0aWMgaW50IHB4YTN4eF9uYW5kX2NvbmZpZ19mbGFzaChzdHJ1Y3QgcHhhM3h4X25hbmRfaW5mbyAqaW5mbywKLQkJCQkgICAgc3RydWN0IHB4YTN4eF9uYW5kX2ZsYXNoICpmKQorCQkJCSAgICBjb25zdCBzdHJ1Y3QgcHhhM3h4X25hbmRfZmxhc2ggKmYpCiB7CiAJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IGluZm8tPnBkZXY7CiAJc3RydWN0IHB4YTN4eF9uYW5kX3BsYXRmb3JtX2RhdGEgKnBkYXRhID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CkBAIC05MDQsMjUgKzg5MiwyNSBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAogCS8qIGNhbGN1bGF0ZSBmbGFzaCBpbmZvcm1hdGlvbiAqLwotCWYtPm9vYl9zaXplID0gKGYtPnBhZ2Vfc2l6ZSA9PSAyMDQ4KSA/IDY0IDogMTY7Ci0JZi0+cmVhZF9pZF9ieXRlcyA9IChmLT5wYWdlX3NpemUgPT0gMjA0OCkgPyA0IDogMjsKKwlpbmZvLT5vb2Jfc2l6ZSA9IChmLT5wYWdlX3NpemUgPT0gMjA0OCkgPyA2NCA6IDE2OworCWluZm8tPnJlYWRfaWRfYnl0ZXMgPSAoZi0+cGFnZV9zaXplID09IDIwNDgpID8gNCA6IDI7CiAKIAkvKiBjYWxjdWxhdGUgYWRkcmVzc2luZyBpbmZvcm1hdGlvbiAqLwotCWYtPmNvbF9hZGRyX2N5Y2xlcyA9IChmLT5wYWdlX3NpemUgPT0gMjA0OCkgPyAyIDogMTsKKwlpbmZvLT5jb2xfYWRkcl9jeWNsZXMgPSAoZi0+cGFnZV9zaXplID09IDIwNDgpID8gMiA6IDE7CiAKIAlpZiAoZi0+bnVtX2Jsb2NrcyAqIGYtPnBhZ2VfcGVyX2Jsb2NrID4gNjU1MzYpCi0JCWYtPnJvd19hZGRyX2N5Y2xlcyA9IDM7CisJCWluZm8tPnJvd19hZGRyX2N5Y2xlcyA9IDM7CiAJZWxzZQotCQlmLT5yb3dfYWRkcl9jeWNsZXMgPSAyOworCQlpbmZvLT5yb3dfYWRkcl9jeWNsZXMgPSAyOwogCiAJbmRjciB8PSAocGRhdGEtPmVuYWJsZV9hcmJpdGVyKSA/IE5EQ1JfTkRfQVJCX0VOIDogMDsKLQluZGNyIHw9IChmLT5jb2xfYWRkcl9jeWNsZXMgPT0gMikgPyBORENSX1JBX1NUQVJUIDogMDsKKwluZGNyIHw9IChpbmZvLT5jb2xfYWRkcl9jeWNsZXMgPT0gMikgPyBORENSX1JBX1NUQVJUIDogMDsKIAluZGNyIHw9IChmLT5wYWdlX3Blcl9ibG9jayA9PSA2NCkgPyBORENSX1BHX1BFUl9CTEsgOiAwOwogCW5kY3IgfD0gKGYtPnBhZ2Vfc2l6ZSA9PSAyMDQ4KSA/IE5EQ1JfUEFHRV9TWiA6IDA7CiAJbmRjciB8PSAoZi0+Zmxhc2hfd2lkdGggPT0gMTYpID8gTkRDUl9EV0lEVEhfTSA6IDA7CiAJbmRjciB8PSAoZi0+ZGZjX3dpZHRoID09IDE2KSA/IE5EQ1JfRFdJRFRIX0MgOiAwOwogCi0JbmRjciB8PSBORENSX1JEX0lEX0NOVChmLT5yZWFkX2lkX2J5dGVzKTsKKwluZGNyIHw9IE5EQ1JfUkRfSURfQ05UKGluZm8tPnJlYWRfaWRfYnl0ZXMpOwogCW5kY3IgfD0gTkRDUl9TUEFSRV9FTjsgLyogZW5hYmxlIHNwYXJlIGJ5IGRlZmF1bHQgKi8KIAogCWluZm8tPnJlZ19uZGNyID0gbmRjcjsKQEAgLTkzMiwxMiArOTIwLDI3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgcHhhM3h4X25hbmRfZGV0ZWN0X2ZsYXNoKHN0cnVjdCBweGEzeHhfbmFuZF9pbmZvICppbmZvKQorc3RhdGljIGludCBweGEzeHhfbmFuZF9kZXRlY3RfZmxhc2goc3RydWN0IHB4YTN4eF9uYW5kX2luZm8gKmluZm8sCisJCQkJICAgIGNvbnN0IHN0cnVjdCBweGEzeHhfbmFuZF9wbGF0Zm9ybV9kYXRhICpwZGF0YSkKIHsKLQlzdHJ1Y3QgcHhhM3h4X25hbmRfZmxhc2ggKmY7Ci0JdWludDMyX3QgaWQ7CisJY29uc3Qgc3RydWN0IHB4YTN4eF9uYW5kX2ZsYXNoICpmOworCXVpbnQzMl90IGlkID0gLTE7CiAJaW50IGk7CiAKKwlmb3IgKGkgPSAwOyBpPHBkYXRhLT5udW1fZmxhc2g7ICsraSkgeworCQlmID0gcGRhdGEtPmZsYXNoICsgaTsKKworCQlpZiAocHhhM3h4X25hbmRfY29uZmlnX2ZsYXNoKGluZm8sIGYpKQorCQkJY29udGludWU7CisKKwkJaWYgKF9fcmVhZGlkKGluZm8sICZpZCkpCisJCQljb250aW51ZTsKKworCQlpZiAoaWQgPT0gZi0+Y2hpcF9pZCkKKwkJCXJldHVybiAwOworCX0KKworI2lmZGVmIENPTkZJR19NVERfTkFORF9QWEEzeHhfQlVJTFRJTgogCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGJ1aWx0aW5fZmxhc2hfdHlwZXMpOyBpKyspIHsKIAogCQlmID0gYnVpbHRpbl9mbGFzaF90eXBlc1tpXTsKQEAgLTk1MSw3ICs5NTQsMTEgQEAKIAkJaWYgKGlkID09IGYtPmNoaXBfaWQpCiAJCQlyZXR1cm4gMDsKIAl9CisjZW5kaWYKIAorCWRldl93YXJuKCZpbmZvLT5wZGV2LT5kZXYsCisJCSAiZmFpbGVkIHRvIGRldGVjdCBjb25maWd1cmVkIG5hbmQgZmxhc2g7IGZvdW5kICUwNHggaW5zdGVhZCBvZlxuIiwKKwkJIGlkKTsKIAlyZXR1cm4gLUVOT0RFVjsKIH0KIApAQCAtMTAxNCw3ICsxMDIxLDcgQEAKIHN0YXRpYyB2b2lkIHB4YTN4eF9uYW5kX2luaXRfbXRkKHN0cnVjdCBtdGRfaW5mbyAqbXRkLAogCQkJCSBzdHJ1Y3QgcHhhM3h4X25hbmRfaW5mbyAqaW5mbykKIHsKLQlzdHJ1Y3QgcHhhM3h4X25hbmRfZmxhc2ggKmYgPSBpbmZvLT5mbGFzaF9pbmZvOworCWNvbnN0IHN0cnVjdCBweGEzeHhfbmFuZF9mbGFzaCAqZiA9IGluZm8tPmZsYXNoX2luZm87CiAJc3RydWN0IG5hbmRfY2hpcCAqdGhpcyA9ICZpbmZvLT5uYW5kX2NoaXA7CiAKIAl0aGlzLT5vcHRpb25zID0gKGYtPmZsYXNoX3dpZHRoID09IDE2KSA/IE5BTkRfQlVTV0lEVEhfMTY6IDA7CkBAIC0xMTM1LDcgKzExNDIsNyBAQAogCQlnb3RvIGZhaWxfZnJlZV9idWY7CiAJfQogCi0JcmV0ID0gcHhhM3h4X25hbmRfZGV0ZWN0X2ZsYXNoKGluZm8pOworCXJldCA9IHB4YTN4eF9uYW5kX2RldGVjdF9mbGFzaChpbmZvLCBwZGF0YSk7CiAJaWYgKHJldCkgewogCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gZGV0ZWN0IGZsYXNoXG4iKTsKIAkJcmV0ID0gLUVOT0RFVjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL25hbmQvc2hfZmxjdGwuYyBiL2RyaXZlcnMvbXRkL25hbmQvc2hfZmxjdGwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MjFhY2IwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tdGQvbmFuZC9zaF9mbGN0bC5jCkBAIC0wLDAgKzEsODc4IEBACisvKgorICogU3VwZXJIIEZMQ1RMIG5hbmQgY29udHJvbGxlcgorICoKKyAqIENvcHlyaWdodCDCqSAyMDA4IFJlbmVzYXMgU29sdXRpb25zIENvcnAuCisgKiBDb3B5cmlnaHQgwqkgMjAwOCBBdG9tIENyZWF0ZSBFbmdpbmVlcmluZyBDby4sIEx0ZC4KKyAqCisgKiBCYXNlZCBvbiBmc2xfZWxiY19uYW5kLmMsIENvcHlyaWdodCDCqSAyMDA2LTIwMDcgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZS4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKworI2luY2x1ZGUgPGxpbnV4L210ZC9tdGQuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvbmFuZC5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9wYXJ0aXRpb25zLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL3NoX2ZsY3RsLmg+CisKK3N0YXRpYyBzdHJ1Y3QgbmFuZF9lY2NsYXlvdXQgZmxjdGxfNHNlY2Nfb29iXzE2ID0geworCS5lY2NieXRlcyA9IDEwLAorCS5lY2Nwb3MgPSB7MCwgMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOX0sCisJLm9vYmZyZWUgPSB7CisJCXsub2Zmc2V0ID0gMTIsCisJCS4gbGVuZ3RoID0gNH0gfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgbmFuZF9lY2NsYXlvdXQgZmxjdGxfNHNlY2Nfb29iXzY0ID0geworCS5lY2NieXRlcyA9IDEwLAorCS5lY2Nwb3MgPSB7NDgsIDQ5LCA1MCwgNTEsIDUyLCA1MywgNTQsIDU1LCA1NiwgNTd9LAorCS5vb2JmcmVlID0geworCQl7Lm9mZnNldCA9IDYwLAorCQkuIGxlbmd0aCA9IDR9IH0sCit9OworCitzdGF0aWMgdWludDhfdCBzY2FuX2ZmX3BhdHRlcm5bXSA9IHsgMHhmZiwgMHhmZiB9OworCitzdGF0aWMgc3RydWN0IG5hbmRfYmJ0X2Rlc2NyIGZsY3RsXzRzZWNjX3NtYWxscGFnZSA9IHsKKwkub3B0aW9ucyA9IE5BTkRfQkJUX1NDQU4yTkRQQUdFLAorCS5vZmZzID0gMTEsCisJLmxlbiA9IDEsCisJLnBhdHRlcm4gPSBzY2FuX2ZmX3BhdHRlcm4sCit9OworCitzdGF0aWMgc3RydWN0IG5hbmRfYmJ0X2Rlc2NyIGZsY3RsXzRzZWNjX2xhcmdlcGFnZSA9IHsKKwkub3B0aW9ucyA9IDAsCisJLm9mZnMgPSA1OCwKKwkubGVuID0gMiwKKwkucGF0dGVybiA9IHNjYW5fZmZfcGF0dGVybiwKK307CisKK3N0YXRpYyB2b2lkIGVtcHR5X2ZpZm8oc3RydWN0IHNoX2ZsY3RsICpmbGN0bCkKK3sKKwl3cml0ZWwoMHgwMDBjMDAwMCwgRkxJTlRETUFDUihmbGN0bCkpOwkvKiBGSUZPIENsZWFyICovCisJd3JpdGVsKDB4MDAwMDAwMDAsIEZMSU5URE1BQ1IoZmxjdGwpKTsJLyogQ2xlYXIgRXJyb3IgZmxhZ3MgKi8KK30KKworc3RhdGljIHZvaWQgc3RhcnRfdHJhbnNsYXRpb24oc3RydWN0IHNoX2ZsY3RsICpmbGN0bCkKK3sKKwl3cml0ZWIoVFJTVFJULCBGTFRSQ1IoZmxjdGwpKTsKK30KKworc3RhdGljIHZvaWQgd2FpdF9jb21wbGV0aW9uKHN0cnVjdCBzaF9mbGN0bCAqZmxjdGwpCit7CisJdWludDMyX3QgdGltZW91dCA9IExPT1BfVElNRU9VVF9NQVg7CisKKwl3aGlsZSAodGltZW91dC0tKSB7CisJCWlmIChyZWFkYihGTFRSQ1IoZmxjdGwpKSAmIFRSRU5EKSB7CisJCQl3cml0ZWIoMHgwLCBGTFRSQ1IoZmxjdGwpKTsKKwkJCXJldHVybjsKKwkJfQorCQl1ZGVsYXkoMSk7CisJfQorCisJcHJpbnRrKEtFUk5fRVJSICJ3YWl0X2NvbXBsZXRpb24oKTogVGltZW91dCBvY2N1cmVkIFxuIik7CisJd3JpdGViKDB4MCwgRkxUUkNSKGZsY3RsKSk7Cit9CisKK3N0YXRpYyB2b2lkIHNldF9hZGRyKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBpbnQgY29sdW1uLCBpbnQgcGFnZV9hZGRyKQoreworCXN0cnVjdCBzaF9mbGN0bCAqZmxjdGwgPSBtdGRfdG9fZmxjdGwobXRkKTsKKwl1aW50MzJfdCBhZGRyID0gMDsKKworCWlmIChjb2x1bW4gPT0gLTEpIHsKKwkJYWRkciA9IHBhZ2VfYWRkcjsJLyogRVJBU0UxICovCisJfSBlbHNlIGlmIChwYWdlX2FkZHIgIT0gLTEpIHsKKwkJLyogU0VRSU4sIFJFQUQwLCBldGMuLiAqLworCQlpZiAoZmxjdGwtPnBhZ2Vfc2l6ZSkgeworCQkJYWRkciA9IGNvbHVtbiAmIDB4MEZGRjsKKwkJCWFkZHIgfD0gKHBhZ2VfYWRkciAmIDB4ZmYpIDw8IDE2OworCQkJYWRkciB8PSAoKHBhZ2VfYWRkciA+PiA4KSAmIDB4ZmYpIDw8IDI0OworCQkJLyogYmlnIHRoYW4gMTI4TUIgKi8KKwkJCWlmIChmbGN0bC0+cndfQURSQ05UID09IEFEUkNOVDJfRSkgeworCQkJCXVpbnQzMl90IAlhZGRyMjsKKwkJCQlhZGRyMiA9IChwYWdlX2FkZHIgPj4gMTYpICYgMHhmZjsKKwkJCQl3cml0ZWwoYWRkcjIsIEZMQURSMihmbGN0bCkpOworCQkJfQorCQl9IGVsc2UgeworCQkJYWRkciA9IGNvbHVtbjsKKwkJCWFkZHIgfD0gKHBhZ2VfYWRkciAmIDB4ZmYpIDw8IDg7CisJCQlhZGRyIHw9ICgocGFnZV9hZGRyID4+IDgpICYgMHhmZikgPDwgMTY7CisJCQlhZGRyIHw9ICgocGFnZV9hZGRyID4+IDE2KSAmIDB4ZmYpIDw8IDI0OworCQl9CisJfQorCXdyaXRlbChhZGRyLCBGTEFEUihmbGN0bCkpOworfQorCitzdGF0aWMgdm9pZCB3YWl0X3JmaWZvX3JlYWR5KHN0cnVjdCBzaF9mbGN0bCAqZmxjdGwpCit7CisJdWludDMyX3QgdGltZW91dCA9IExPT1BfVElNRU9VVF9NQVg7CisKKwl3aGlsZSAodGltZW91dC0tKSB7CisJCXVpbnQzMl90IHZhbDsKKwkJLyogY2hlY2sgRklGTyAqLworCQl2YWwgPSByZWFkbChGTERUQ05UUihmbGN0bCkpID4+IDE2OworCQlpZiAodmFsICYgMHhGRikKKwkJCXJldHVybjsKKwkJdWRlbGF5KDEpOworCX0KKwlwcmludGsoS0VSTl9FUlIgIndhaXRfcmZpZm9fcmVhZHkoKTogVGltZW91dCBvY2N1cmVkIFxuIik7Cit9CisKK3N0YXRpYyB2b2lkIHdhaXRfd2ZpZm9fcmVhZHkoc3RydWN0IHNoX2ZsY3RsICpmbGN0bCkKK3sKKwl1aW50MzJfdCBsZW4sIHRpbWVvdXQgPSBMT09QX1RJTUVPVVRfTUFYOworCisJd2hpbGUgKHRpbWVvdXQtLSkgeworCQkvKiBjaGVjayBGSUZPICovCisJCWxlbiA9IChyZWFkbChGTERUQ05UUihmbGN0bCkpID4+IDE2KSAmIDB4RkY7CisJCWlmIChsZW4gPj0gNCkKKwkJCXJldHVybjsKKwkJdWRlbGF5KDEpOworCX0KKwlwcmludGsoS0VSTl9FUlIgIndhaXRfd2ZpZm9fcmVhZHkoKTogVGltZW91dCBvY2N1cmVkIFxuIik7Cit9CisKK3N0YXRpYyBpbnQgd2FpdF9yZWNmaWZvX3JlYWR5KHN0cnVjdCBzaF9mbGN0bCAqZmxjdGwpCit7CisJdWludDMyX3QgdGltZW91dCA9IExPT1BfVElNRU9VVF9NQVg7CisJaW50IGNoZWNrZWRbNF07CisJdm9pZCBfX2lvbWVtICplY2NfcmVnWzRdOworCWludCBpOworCXVpbnQzMl90IGRhdGEsIHNpemU7CisKKwltZW1zZXQoY2hlY2tlZCwgMCwgc2l6ZW9mKGNoZWNrZWQpKTsKKworCXdoaWxlICh0aW1lb3V0LS0pIHsKKwkJc2l6ZSA9IHJlYWRsKEZMRFRDTlRSKGZsY3RsKSkgPj4gMjQ7CisJCWlmIChzaXplICYgMHhGRikKKwkJCXJldHVybiAwOwkvKiBzdWNjZXNzICovCisKKwkJaWYgKHJlYWRsKEZMNEVDQ0NSKGZsY3RsKSkgJiBfNEVDQ0ZBKQorCQkJcmV0dXJuIDE7CS8qIGNhbid0IGNvcnJlY3QgKi8KKworCQl1ZGVsYXkoMSk7CisJCWlmICghKHJlYWRsKEZMNEVDQ0NSKGZsY3RsKSkgJiBfNEVDQ0VORCkpCisJCQljb250aW51ZTsKKworCQkvKiBzdGFydCBlcnJvciBjb3JyZWN0aW9uICovCisJCWVjY19yZWdbMF0gPSBGTDRFQ0NSRVNVTFQwKGZsY3RsKTsKKwkJZWNjX3JlZ1sxXSA9IEZMNEVDQ1JFU1VMVDEoZmxjdGwpOworCQllY2NfcmVnWzJdID0gRkw0RUNDUkVTVUxUMihmbGN0bCk7CisJCWVjY19yZWdbM10gPSBGTDRFQ0NSRVNVTFQzKGZsY3RsKTsKKworCQlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKSB7CisJCQlkYXRhID0gcmVhZGwoZWNjX3JlZ1tpXSk7CisJCQlpZiAoZGF0YSAhPSBJTklUX0ZMNEVDQ1JFU1VMVF9WQUwgJiYgIWNoZWNrZWRbaV0pIHsKKwkJCQl1aW50OF90IG9yZzsKKwkJCQlpbnQgaW5kZXg7CisKKwkJCQlpbmRleCA9IGRhdGEgPj4gMTY7CisJCQkJb3JnID0gZmxjdGwtPmRvbmVfYnVmZltpbmRleF07CisJCQkJZmxjdGwtPmRvbmVfYnVmZltpbmRleF0gPSBvcmcgXiAoZGF0YSAmIDB4RkYpOworCQkJCWNoZWNrZWRbaV0gPSAxOworCQkJfQorCQl9CisKKwkJd3JpdGVsKDAsIEZMNEVDQ0NSKGZsY3RsKSk7CisJfQorCisJcHJpbnRrKEtFUk5fRVJSICJ3YWl0X3JlY2ZpZm9fcmVhZHkoKTogVGltZW91dCBvY2N1cmVkIFxuIik7CisJcmV0dXJuIDE7CS8qIHRpbWVvdXQgKi8KK30KKworc3RhdGljIHZvaWQgd2FpdF93ZWNmaWZvX3JlYWR5KHN0cnVjdCBzaF9mbGN0bCAqZmxjdGwpCit7CisJdWludDMyX3QgdGltZW91dCA9IExPT1BfVElNRU9VVF9NQVg7CisJdWludDMyX3QgbGVuOworCisJd2hpbGUgKHRpbWVvdXQtLSkgeworCQkvKiBjaGVjayBGTEVDRklGTyAqLworCQlsZW4gPSAocmVhZGwoRkxEVENOVFIoZmxjdGwpKSA+PiAyNCkgJiAweEZGOworCQlpZiAobGVuID49IDQpCisJCQlyZXR1cm47CisJCXVkZWxheSgxKTsKKwl9CisJcHJpbnRrKEtFUk5fRVJSICJ3YWl0X3dlY2ZpZm9fcmVhZHkoKTogVGltZW91dCBvY2N1cmVkIFxuIik7Cit9CisKK3N0YXRpYyB2b2lkIHJlYWRfZGF0YXJlZyhzdHJ1Y3Qgc2hfZmxjdGwgKmZsY3RsLCBpbnQgb2Zmc2V0KQoreworCXVuc2lnbmVkIGxvbmcgZGF0YTsKKwl1bnNpZ25lZCBsb25nICpidWYgPSAodW5zaWduZWQgbG9uZyAqKSZmbGN0bC0+ZG9uZV9idWZmW29mZnNldF07CisKKwl3YWl0X2NvbXBsZXRpb24oZmxjdGwpOworCisJZGF0YSA9IHJlYWRsKEZMREFUQVIoZmxjdGwpKTsKKwkqYnVmID0gbGUzMl90b19jcHUoZGF0YSk7Cit9CisKK3N0YXRpYyB2b2lkIHJlYWRfZmlmb3JlZyhzdHJ1Y3Qgc2hfZmxjdGwgKmZsY3RsLCBpbnQgcmxlbiwgaW50IG9mZnNldCkKK3sKKwlpbnQgaSwgbGVuXzRhbGlnbjsKKwl1bnNpZ25lZCBsb25nICpidWYgPSAodW5zaWduZWQgbG9uZyAqKSZmbGN0bC0+ZG9uZV9idWZmW29mZnNldF07CisJdm9pZCAqZmlmb19hZGRyID0gKHZvaWQgKilGTERURklGTyhmbGN0bCk7CisKKwlsZW5fNGFsaWduID0gKHJsZW4gKyAzKSAvIDQ7CisKKwlmb3IgKGkgPSAwOyBpIDwgbGVuXzRhbGlnbjsgaSsrKSB7CisJCXdhaXRfcmZpZm9fcmVhZHkoZmxjdGwpOworCQlidWZbaV0gPSByZWFkbChmaWZvX2FkZHIpOworCQlidWZbaV0gPSBiZTMyX3RvX2NwdShidWZbaV0pOworCX0KK30KKworc3RhdGljIGludCByZWFkX2VjZmlmb3JlZyhzdHJ1Y3Qgc2hfZmxjdGwgKmZsY3RsLCB1aW50OF90ICpidWZmKQoreworCWludCBpOworCXVuc2lnbmVkIGxvbmcgKmVjY19idWYgPSAodW5zaWduZWQgbG9uZyAqKWJ1ZmY7CisJdm9pZCAqZmlmb19hZGRyID0gKHZvaWQgKilGTEVDRklGTyhmbGN0bCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7CisJCWlmICh3YWl0X3JlY2ZpZm9fcmVhZHkoZmxjdGwpKQorCQkJcmV0dXJuIDE7CisJCWVjY19idWZbaV0gPSByZWFkbChmaWZvX2FkZHIpOworCQllY2NfYnVmW2ldID0gYmUzMl90b19jcHUoZWNjX2J1ZltpXSk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHdyaXRlX2ZpZm9yZWcoc3RydWN0IHNoX2ZsY3RsICpmbGN0bCwgaW50IHJsZW4sIGludCBvZmZzZXQpCit7CisJaW50IGksIGxlbl80YWxpZ247CisJdW5zaWduZWQgbG9uZyAqZGF0YSA9ICh1bnNpZ25lZCBsb25nICopJmZsY3RsLT5kb25lX2J1ZmZbb2Zmc2V0XTsKKwl2b2lkICpmaWZvX2FkZHIgPSAodm9pZCAqKUZMRFRGSUZPKGZsY3RsKTsKKworCWxlbl80YWxpZ24gPSAocmxlbiArIDMpIC8gNDsKKwlmb3IgKGkgPSAwOyBpIDwgbGVuXzRhbGlnbjsgaSsrKSB7CisJCXdhaXRfd2ZpZm9fcmVhZHkoZmxjdGwpOworCQl3cml0ZWwoY3B1X3RvX2JlMzIoZGF0YVtpXSksIGZpZm9fYWRkcik7CisJfQorfQorCitzdGF0aWMgdm9pZCBzZXRfY21kX3JlZ3Moc3RydWN0IG10ZF9pbmZvICptdGQsIHVpbnQzMl90IGNtZCwgdWludDMyX3QgZmxjbWNkcl92YWwpCit7CisJc3RydWN0IHNoX2ZsY3RsICpmbGN0bCA9IG10ZF90b19mbGN0bChtdGQpOworCXVpbnQzMl90IGZsY21uY3JfdmFsID0gcmVhZGwoRkxDTU5DUihmbGN0bCkpOworCXVpbnQzMl90IGZsY21kY3JfdmFsLCBhZGRyX2xlbl9ieXRlcyA9IDA7CisKKwkvKiBTZXQgU05BTkQgYml0IGlmIHBhZ2Ugc2l6ZSBpcyAyMDQ4Ynl0ZSAqLworCWlmIChmbGN0bC0+cGFnZV9zaXplKQorCQlmbGNtbmNyX3ZhbCB8PSBTTkFORF9FOworCWVsc2UKKwkJZmxjbW5jcl92YWwgJj0gflNOQU5EX0U7CisKKwkvKiBkZWZhdWx0IEZMQ01EQ1IgdmFsICovCisJZmxjbWRjcl92YWwgPSBET0NNRDFfRSB8IERPQURSX0U7CisKKwkvKiBTZXQgZm9yIEZMQ01EQ1IgKi8KKwlzd2l0Y2ggKGNtZCkgeworCWNhc2UgTkFORF9DTURfRVJBU0UxOgorCQlhZGRyX2xlbl9ieXRlcyA9IGZsY3RsLT5lcmFzZV9BRFJDTlQ7CisJCWZsY21kY3JfdmFsIHw9IERPQ01EMl9FOworCQlicmVhazsKKwljYXNlIE5BTkRfQ01EX1JFQUQwOgorCWNhc2UgTkFORF9DTURfUkVBRE9PQjoKKwkJYWRkcl9sZW5fYnl0ZXMgPSBmbGN0bC0+cndfQURSQ05UOworCQlmbGNtZGNyX3ZhbCB8PSBDRFNSQ19FOworCQlicmVhazsKKwljYXNlIE5BTkRfQ01EX1NFUUlOOgorCQkvKiBUaGlzIGNhc2UgaXMgdGhhdCBjbWQgaXMgUkVBRDAgb3IgUkVBRDEgb3IgUkVBRDAwICovCisJCWZsY21kY3JfdmFsICY9IH5ET0FEUl9FOwkvKiBPTkxZIGV4ZWN1dGUgMXN0IGNtZCAqLworCQlicmVhazsKKwljYXNlIE5BTkRfQ01EX1BBR0VQUk9HOgorCQlhZGRyX2xlbl9ieXRlcyA9IGZsY3RsLT5yd19BRFJDTlQ7CisJCWZsY21kY3JfdmFsIHw9IERPQ01EMl9FIHwgQ0RTUkNfRSB8IFNFTFJXOworCQlicmVhazsKKwljYXNlIE5BTkRfQ01EX1JFQURJRDoKKwkJZmxjbW5jcl92YWwgJj0gflNOQU5EX0U7CisJCWFkZHJfbGVuX2J5dGVzID0gQURSQ05UXzE7CisJCWJyZWFrOworCWNhc2UgTkFORF9DTURfU1RBVFVTOgorCWNhc2UgTkFORF9DTURfUkVTRVQ6CisJCWZsY21uY3JfdmFsICY9IH5TTkFORF9FOworCQlmbGNtZGNyX3ZhbCAmPSB+KERPQURSX0UgfCBET1NSX0UpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisKKwkvKiBTZXQgYWRkcmVzcyBieXRlcyBwYXJhbWV0ZXIgKi8KKwlmbGNtZGNyX3ZhbCB8PSBhZGRyX2xlbl9ieXRlczsKKworCS8qIE5vdyBhY3R1YWxseSB3cml0ZSAqLworCXdyaXRlbChmbGNtbmNyX3ZhbCwgRkxDTU5DUihmbGN0bCkpOworCXdyaXRlbChmbGNtZGNyX3ZhbCwgRkxDTURDUihmbGN0bCkpOworCXdyaXRlbChmbGNtY2RyX3ZhbCwgRkxDTUNEUihmbGN0bCkpOworfQorCitzdGF0aWMgaW50IGZsY3RsX3JlYWRfcGFnZV9od2VjYyhzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgc3RydWN0IG5hbmRfY2hpcCAqY2hpcCwKKwkJCQl1aW50OF90ICpidWYpCit7CisJaW50IGksIGVjY3NpemUgPSBjaGlwLT5lY2Muc2l6ZTsKKwlpbnQgZWNjYnl0ZXMgPSBjaGlwLT5lY2MuYnl0ZXM7CisJaW50IGVjY3N0ZXBzID0gY2hpcC0+ZWNjLnN0ZXBzOworCXVpbnQ4X3QgKnAgPSBidWY7CisJc3RydWN0IHNoX2ZsY3RsICpmbGN0bCA9IG10ZF90b19mbGN0bChtdGQpOworCisJZm9yIChpID0gMDsgZWNjc3RlcHM7IGVjY3N0ZXBzLS0sIGkgKz0gZWNjYnl0ZXMsIHAgKz0gZWNjc2l6ZSkKKwkJY2hpcC0+cmVhZF9idWYobXRkLCBwLCBlY2NzaXplKTsKKworCWZvciAoaSA9IDA7IGVjY3N0ZXBzOyBlY2NzdGVwcy0tLCBpICs9IGVjY2J5dGVzLCBwICs9IGVjY3NpemUpIHsKKwkJaWYgKGZsY3RsLT5od2VjY19jYW50X2NvcnJlY3RbaV0pCisJCQltdGQtPmVjY19zdGF0cy5mYWlsZWQrKzsKKwkJZWxzZQorCQkJbXRkLT5lY2Nfc3RhdHMuY29ycmVjdGVkICs9IDA7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGZsY3RsX3dyaXRlX3BhZ2VfaHdlY2Moc3RydWN0IG10ZF9pbmZvICptdGQsIHN0cnVjdCBuYW5kX2NoaXAgKmNoaXAsCisJCQkJICAgY29uc3QgdWludDhfdCAqYnVmKQoreworCWludCBpLCBlY2NzaXplID0gY2hpcC0+ZWNjLnNpemU7CisJaW50IGVjY2J5dGVzID0gY2hpcC0+ZWNjLmJ5dGVzOworCWludCBlY2NzdGVwcyA9IGNoaXAtPmVjYy5zdGVwczsKKwljb25zdCB1aW50OF90ICpwID0gYnVmOworCisJZm9yIChpID0gMDsgZWNjc3RlcHM7IGVjY3N0ZXBzLS0sIGkgKz0gZWNjYnl0ZXMsIHAgKz0gZWNjc2l6ZSkKKwkJY2hpcC0+d3JpdGVfYnVmKG10ZCwgcCwgZWNjc2l6ZSk7Cit9CisKK3N0YXRpYyB2b2lkIGV4ZWNtZF9yZWFkX3BhZ2Vfc2VjdG9yKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBpbnQgcGFnZV9hZGRyKQoreworCXN0cnVjdCBzaF9mbGN0bCAqZmxjdGwgPSBtdGRfdG9fZmxjdGwobXRkKTsKKwlpbnQgc2VjdG9yLCBwYWdlX3NlY3RvcnM7CisKKwlpZiAoZmxjdGwtPnBhZ2Vfc2l6ZSkKKwkJcGFnZV9zZWN0b3JzID0gNDsKKwllbHNlCisJCXBhZ2Vfc2VjdG9ycyA9IDE7CisKKwl3cml0ZWwocmVhZGwoRkxDTU5DUihmbGN0bCkpIHwgQUNNX1NBQ0NFU19NT0RFIHwgXzRFQ0NDT1JSRUNULAorCQkgRkxDTU5DUihmbGN0bCkpOworCisJc2V0X2NtZF9yZWdzKG10ZCwgTkFORF9DTURfUkVBRDAsCisJCShOQU5EX0NNRF9SRUFEU1RBUlQgPDwgOCkgfCBOQU5EX0NNRF9SRUFEMCk7CisKKwlmb3IgKHNlY3RvciA9IDA7IHNlY3RvciA8IHBhZ2Vfc2VjdG9yczsgc2VjdG9yKyspIHsKKwkJaW50IHJldDsKKworCQllbXB0eV9maWZvKGZsY3RsKTsKKwkJd3JpdGVsKHJlYWRsKEZMQ01EQ1IoZmxjdGwpKSB8IDEsIEZMQ01EQ1IoZmxjdGwpKTsKKwkJd3JpdGVsKHBhZ2VfYWRkciA8PCAyIHwgc2VjdG9yLCBGTEFEUihmbGN0bCkpOworCisJCXN0YXJ0X3RyYW5zbGF0aW9uKGZsY3RsKTsKKwkJcmVhZF9maWZvcmVnKGZsY3RsLCA1MTIsIDUxMiAqIHNlY3Rvcik7CisKKwkJcmV0ID0gcmVhZF9lY2ZpZm9yZWcoZmxjdGwsCisJCQkmZmxjdGwtPmRvbmVfYnVmZlttdGQtPndyaXRlc2l6ZSArIDE2ICogc2VjdG9yXSk7CisKKwkJaWYgKHJldCkKKwkJCWZsY3RsLT5od2VjY19jYW50X2NvcnJlY3Rbc2VjdG9yXSA9IDE7CisKKwkJd3JpdGVsKDB4MCwgRkw0RUNDQ1IoZmxjdGwpKTsKKwkJd2FpdF9jb21wbGV0aW9uKGZsY3RsKTsKKwl9CisJd3JpdGVsKHJlYWRsKEZMQ01OQ1IoZmxjdGwpKSAmIH4oQUNNX1NBQ0NFU19NT0RFIHwgXzRFQ0NDT1JSRUNUKSwKKwkJCUZMQ01OQ1IoZmxjdGwpKTsKK30KKworc3RhdGljIHZvaWQgZXhlY21kX3JlYWRfb29iKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBpbnQgcGFnZV9hZGRyKQoreworCXN0cnVjdCBzaF9mbGN0bCAqZmxjdGwgPSBtdGRfdG9fZmxjdGwobXRkKTsKKworCXNldF9jbWRfcmVncyhtdGQsIE5BTkRfQ01EX1JFQUQwLAorCQkoTkFORF9DTURfUkVBRFNUQVJUIDw8IDgpIHwgTkFORF9DTURfUkVBRDApOworCisJZW1wdHlfZmlmbyhmbGN0bCk7CisJaWYgKGZsY3RsLT5wYWdlX3NpemUpIHsKKwkJaW50IGk7CisJCS8qIEluIGNhc2UgdGhhdCB0aGUgcGFnZSBzaXplIGlzIDJrICovCisJCWZvciAoaSA9IDA7IGkgPCAxNiAqIDM7IGkrKykKKwkJCWZsY3RsLT5kb25lX2J1ZmZbaV0gPSAweEZGOworCisJCXNldF9hZGRyKG10ZCwgMyAqIDUyOCArIDUxMiwgcGFnZV9hZGRyKTsKKwkJd3JpdGVsKDE2LCBGTERUQ05UUihmbGN0bCkpOworCisJCXN0YXJ0X3RyYW5zbGF0aW9uKGZsY3RsKTsKKwkJcmVhZF9maWZvcmVnKGZsY3RsLCAxNiwgMTYgKiAzKTsKKwkJd2FpdF9jb21wbGV0aW9uKGZsY3RsKTsKKwl9IGVsc2UgeworCQkvKiBJbiBjYXNlIHRoYXQgdGhlIHBhZ2Ugc2l6ZSBpcyA1MTJiICovCisJCXNldF9hZGRyKG10ZCwgNTEyLCBwYWdlX2FkZHIpOworCQl3cml0ZWwoMTYsIEZMRFRDTlRSKGZsY3RsKSk7CisKKwkJc3RhcnRfdHJhbnNsYXRpb24oZmxjdGwpOworCQlyZWFkX2ZpZm9yZWcoZmxjdGwsIDE2LCAwKTsKKwkJd2FpdF9jb21wbGV0aW9uKGZsY3RsKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGV4ZWNtZF93cml0ZV9wYWdlX3NlY3RvcihzdHJ1Y3QgbXRkX2luZm8gKm10ZCkKK3sKKwlzdHJ1Y3Qgc2hfZmxjdGwgKmZsY3RsID0gbXRkX3RvX2ZsY3RsKG10ZCk7CisJaW50IGksIHBhZ2VfYWRkciA9IGZsY3RsLT5zZXFpbl9wYWdlX2FkZHI7CisJaW50IHNlY3RvciwgcGFnZV9zZWN0b3JzOworCisJaWYgKGZsY3RsLT5wYWdlX3NpemUpCisJCXBhZ2Vfc2VjdG9ycyA9IDQ7CisJZWxzZQorCQlwYWdlX3NlY3RvcnMgPSAxOworCisJd3JpdGVsKHJlYWRsKEZMQ01OQ1IoZmxjdGwpKSB8IEFDTV9TQUNDRVNfTU9ERSwgRkxDTU5DUihmbGN0bCkpOworCisJc2V0X2NtZF9yZWdzKG10ZCwgTkFORF9DTURfUEFHRVBST0csCisJCQkoTkFORF9DTURfUEFHRVBST0cgPDwgOCkgfCBOQU5EX0NNRF9TRVFJTik7CisKKwlmb3IgKHNlY3RvciA9IDA7IHNlY3RvciA8IHBhZ2Vfc2VjdG9yczsgc2VjdG9yKyspIHsKKwkJZW1wdHlfZmlmbyhmbGN0bCk7CisJCXdyaXRlbChyZWFkbChGTENNRENSKGZsY3RsKSkgfCAxLCBGTENNRENSKGZsY3RsKSk7CisJCXdyaXRlbChwYWdlX2FkZHIgPDwgMiB8IHNlY3RvciwgRkxBRFIoZmxjdGwpKTsKKworCQlzdGFydF90cmFuc2xhdGlvbihmbGN0bCk7CisJCXdyaXRlX2ZpZm9yZWcoZmxjdGwsIDUxMiwgNTEyICogc2VjdG9yKTsKKworCQlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7CisJCQl3YWl0X3dlY2ZpZm9fcmVhZHkoZmxjdGwpOyAvKiB3YWl0IGZvciB3cml0ZSByZWFkeSAqLworCQkJd3JpdGVsKDB4RkZGRkZGRkYsIEZMRUNGSUZPKGZsY3RsKSk7CisJCX0KKwkJd2FpdF9jb21wbGV0aW9uKGZsY3RsKTsKKwl9CisKKwl3cml0ZWwocmVhZGwoRkxDTU5DUihmbGN0bCkpICYgfkFDTV9TQUNDRVNfTU9ERSwgRkxDTU5DUihmbGN0bCkpOworfQorCitzdGF0aWMgdm9pZCBleGVjbWRfd3JpdGVfb29iKHN0cnVjdCBtdGRfaW5mbyAqbXRkKQoreworCXN0cnVjdCBzaF9mbGN0bCAqZmxjdGwgPSBtdGRfdG9fZmxjdGwobXRkKTsKKwlpbnQgcGFnZV9hZGRyID0gZmxjdGwtPnNlcWluX3BhZ2VfYWRkcjsKKwlpbnQgc2VjdG9yLCBwYWdlX3NlY3RvcnM7CisKKwlpZiAoZmxjdGwtPnBhZ2Vfc2l6ZSkgeworCQlzZWN0b3IgPSAzOworCQlwYWdlX3NlY3RvcnMgPSA0OworCX0gZWxzZSB7CisJCXNlY3RvciA9IDA7CisJCXBhZ2Vfc2VjdG9ycyA9IDE7CisJfQorCisJc2V0X2NtZF9yZWdzKG10ZCwgTkFORF9DTURfUEFHRVBST0csCisJCQkoTkFORF9DTURfUEFHRVBST0cgPDwgOCkgfCBOQU5EX0NNRF9TRVFJTik7CisKKwlmb3IgKDsgc2VjdG9yIDwgcGFnZV9zZWN0b3JzOyBzZWN0b3IrKykgeworCQllbXB0eV9maWZvKGZsY3RsKTsKKwkJc2V0X2FkZHIobXRkLCBzZWN0b3IgKiA1MjggKyA1MTIsIHBhZ2VfYWRkcik7CisJCXdyaXRlbCgxNiwgRkxEVENOVFIoZmxjdGwpKTsJLyogc2V0IHJlYWQgc2l6ZSAqLworCisJCXN0YXJ0X3RyYW5zbGF0aW9uKGZsY3RsKTsKKwkJd3JpdGVfZmlmb3JlZyhmbGN0bCwgMTYsIDE2ICogc2VjdG9yKTsKKwkJd2FpdF9jb21wbGV0aW9uKGZsY3RsKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGZsY3RsX2NtZGZ1bmMoc3RydWN0IG10ZF9pbmZvICptdGQsIHVuc2lnbmVkIGludCBjb21tYW5kLAorCQkJaW50IGNvbHVtbiwgaW50IHBhZ2VfYWRkcikKK3sKKwlzdHJ1Y3Qgc2hfZmxjdGwgKmZsY3RsID0gbXRkX3RvX2ZsY3RsKG10ZCk7CisJdWludDMyX3QgcmVhZF9jbWQgPSAwOworCisJZmxjdGwtPnJlYWRfYnl0ZXMgPSAwOworCWlmIChjb21tYW5kICE9IE5BTkRfQ01EX1BBR0VQUk9HKQorCQlmbGN0bC0+aW5kZXggPSAwOworCisJc3dpdGNoIChjb21tYW5kKSB7CisJY2FzZSBOQU5EX0NNRF9SRUFEMToKKwljYXNlIE5BTkRfQ01EX1JFQUQwOgorCQlpZiAoZmxjdGwtPmh3ZWNjKSB7CisJCQkvKiByZWFkIHBhZ2Ugd2l0aCBod2VjYyAqLworCQkJZXhlY21kX3JlYWRfcGFnZV9zZWN0b3IobXRkLCBwYWdlX2FkZHIpOworCQkJYnJlYWs7CisJCX0KKwkJZW1wdHlfZmlmbyhmbGN0bCk7CisJCWlmIChmbGN0bC0+cGFnZV9zaXplKQorCQkJc2V0X2NtZF9yZWdzKG10ZCwgY29tbWFuZCwgKE5BTkRfQ01EX1JFQURTVEFSVCA8PCA4KQorCQkJCXwgY29tbWFuZCk7CisJCWVsc2UKKwkJCXNldF9jbWRfcmVncyhtdGQsIGNvbW1hbmQsIGNvbW1hbmQpOworCisJCXNldF9hZGRyKG10ZCwgMCwgcGFnZV9hZGRyKTsKKworCQlmbGN0bC0+cmVhZF9ieXRlcyA9IG10ZC0+d3JpdGVzaXplICsgbXRkLT5vb2JzaXplOworCQlmbGN0bC0+aW5kZXggKz0gY29sdW1uOworCQlnb3RvIHJlYWRfbm9ybWFsX2V4aXQ7CisKKwljYXNlIE5BTkRfQ01EX1JFQURPT0I6CisJCWlmIChmbGN0bC0+aHdlY2MpIHsKKwkJCS8qIHJlYWQgcGFnZSB3aXRoIGh3ZWNjICovCisJCQlleGVjbWRfcmVhZF9vb2IobXRkLCBwYWdlX2FkZHIpOworCQkJYnJlYWs7CisJCX0KKworCQllbXB0eV9maWZvKGZsY3RsKTsKKwkJaWYgKGZsY3RsLT5wYWdlX3NpemUpIHsKKwkJCXNldF9jbWRfcmVncyhtdGQsIGNvbW1hbmQsIChOQU5EX0NNRF9SRUFEU1RBUlQgPDwgOCkKKwkJCQl8IE5BTkRfQ01EX1JFQUQwKTsKKwkJCXNldF9hZGRyKG10ZCwgbXRkLT53cml0ZXNpemUsIHBhZ2VfYWRkcik7CisJCX0gZWxzZSB7CisJCQlzZXRfY21kX3JlZ3MobXRkLCBjb21tYW5kLCBjb21tYW5kKTsKKwkJCXNldF9hZGRyKG10ZCwgMCwgcGFnZV9hZGRyKTsKKwkJfQorCQlmbGN0bC0+cmVhZF9ieXRlcyA9IG10ZC0+b29ic2l6ZTsKKwkJZ290byByZWFkX25vcm1hbF9leGl0OworCisJY2FzZSBOQU5EX0NNRF9SRUFESUQ6CisJCWVtcHR5X2ZpZm8oZmxjdGwpOworCQlzZXRfY21kX3JlZ3MobXRkLCBjb21tYW5kLCBjb21tYW5kKTsKKwkJc2V0X2FkZHIobXRkLCAwLCAwKTsKKworCQlmbGN0bC0+cmVhZF9ieXRlcyA9IDQ7CisJCXdyaXRlbChmbGN0bC0+cmVhZF9ieXRlcywgRkxEVENOVFIoZmxjdGwpKTsgLyogc2V0IHJlYWQgc2l6ZSAqLworCQlzdGFydF90cmFuc2xhdGlvbihmbGN0bCk7CisJCXJlYWRfZGF0YXJlZyhmbGN0bCwgMCk7CS8qIHJlYWQgYW5kIGVuZCAqLworCQlicmVhazsKKworCWNhc2UgTkFORF9DTURfRVJBU0UxOgorCQlmbGN0bC0+ZXJhc2UxX3BhZ2VfYWRkciA9IHBhZ2VfYWRkcjsKKwkJYnJlYWs7CisKKwljYXNlIE5BTkRfQ01EX0VSQVNFMjoKKwkJc2V0X2NtZF9yZWdzKG10ZCwgTkFORF9DTURfRVJBU0UxLAorCQkJKGNvbW1hbmQgPDwgOCkgfCBOQU5EX0NNRF9FUkFTRTEpOworCQlzZXRfYWRkcihtdGQsIC0xLCBmbGN0bC0+ZXJhc2UxX3BhZ2VfYWRkcik7CisJCXN0YXJ0X3RyYW5zbGF0aW9uKGZsY3RsKTsKKwkJd2FpdF9jb21wbGV0aW9uKGZsY3RsKTsKKwkJYnJlYWs7CisKKwljYXNlIE5BTkRfQ01EX1NFUUlOOgorCQlpZiAoIWZsY3RsLT5wYWdlX3NpemUpIHsKKwkJCS8qIG91dHB1dCByZWFkIGNvbW1hbmQgKi8KKwkJCWlmIChjb2x1bW4gPj0gbXRkLT53cml0ZXNpemUpIHsKKwkJCQljb2x1bW4gLT0gbXRkLT53cml0ZXNpemU7CisJCQkJcmVhZF9jbWQgPSBOQU5EX0NNRF9SRUFET09COworCQkJfSBlbHNlIGlmIChjb2x1bW4gPCAyNTYpIHsKKwkJCQlyZWFkX2NtZCA9IE5BTkRfQ01EX1JFQUQwOworCQkJfSBlbHNlIHsKKwkJCQljb2x1bW4gLT0gMjU2OworCQkJCXJlYWRfY21kID0gTkFORF9DTURfUkVBRDE7CisJCQl9CisJCX0KKwkJZmxjdGwtPnNlcWluX2NvbHVtbiA9IGNvbHVtbjsKKwkJZmxjdGwtPnNlcWluX3BhZ2VfYWRkciA9IHBhZ2VfYWRkcjsKKwkJZmxjdGwtPnNlcWluX3JlYWRfY21kID0gcmVhZF9jbWQ7CisJCWJyZWFrOworCisJY2FzZSBOQU5EX0NNRF9QQUdFUFJPRzoKKwkJZW1wdHlfZmlmbyhmbGN0bCk7CisJCWlmICghZmxjdGwtPnBhZ2Vfc2l6ZSkgeworCQkJc2V0X2NtZF9yZWdzKG10ZCwgTkFORF9DTURfU0VRSU4sCisJCQkJCWZsY3RsLT5zZXFpbl9yZWFkX2NtZCk7CisJCQlzZXRfYWRkcihtdGQsIC0xLCAtMSk7CisJCQl3cml0ZWwoMCwgRkxEVENOVFIoZmxjdGwpKTsJLyogc2V0IDAgc2l6ZSAqLworCQkJc3RhcnRfdHJhbnNsYXRpb24oZmxjdGwpOworCQkJd2FpdF9jb21wbGV0aW9uKGZsY3RsKTsKKwkJfQorCQlpZiAoZmxjdGwtPmh3ZWNjKSB7CisJCQkvKiB3cml0ZSBwYWdlIHdpdGggaHdlY2MgKi8KKwkJCWlmIChmbGN0bC0+c2VxaW5fY29sdW1uID09IG10ZC0+d3JpdGVzaXplKQorCQkJCWV4ZWNtZF93cml0ZV9vb2IobXRkKTsKKwkJCWVsc2UgaWYgKCFmbGN0bC0+c2VxaW5fY29sdW1uKQorCQkJCWV4ZWNtZF93cml0ZV9wYWdlX3NlY3RvcihtdGQpOworCQkJZWxzZQorCQkJCXByaW50ayhLRVJOX0VSUiAiSW52YWxpZCBhZGRyZXNzICE/XG4iKTsKKwkJCWJyZWFrOworCQl9CisJCXNldF9jbWRfcmVncyhtdGQsIGNvbW1hbmQsIChjb21tYW5kIDw8IDgpIHwgTkFORF9DTURfU0VRSU4pOworCQlzZXRfYWRkcihtdGQsIGZsY3RsLT5zZXFpbl9jb2x1bW4sIGZsY3RsLT5zZXFpbl9wYWdlX2FkZHIpOworCQl3cml0ZWwoZmxjdGwtPmluZGV4LCBGTERUQ05UUihmbGN0bCkpOwkvKiBzZXQgd3JpdGUgc2l6ZSAqLworCQlzdGFydF90cmFuc2xhdGlvbihmbGN0bCk7CisJCXdyaXRlX2ZpZm9yZWcoZmxjdGwsIGZsY3RsLT5pbmRleCwgMCk7CisJCXdhaXRfY29tcGxldGlvbihmbGN0bCk7CisJCWJyZWFrOworCisJY2FzZSBOQU5EX0NNRF9TVEFUVVM6CisJCXNldF9jbWRfcmVncyhtdGQsIGNvbW1hbmQsIGNvbW1hbmQpOworCQlzZXRfYWRkcihtdGQsIC0xLCAtMSk7CisKKwkJZmxjdGwtPnJlYWRfYnl0ZXMgPSAxOworCQl3cml0ZWwoZmxjdGwtPnJlYWRfYnl0ZXMsIEZMRFRDTlRSKGZsY3RsKSk7IC8qIHNldCByZWFkIHNpemUgKi8KKwkJc3RhcnRfdHJhbnNsYXRpb24oZmxjdGwpOworCQlyZWFkX2RhdGFyZWcoZmxjdGwsIDApOyAvKiByZWFkIGFuZCBlbmQgKi8KKwkJYnJlYWs7CisKKwljYXNlIE5BTkRfQ01EX1JFU0VUOgorCQlzZXRfY21kX3JlZ3MobXRkLCBjb21tYW5kLCBjb21tYW5kKTsKKwkJc2V0X2FkZHIobXRkLCAtMSwgLTEpOworCisJCXdyaXRlbCgwLCBGTERUQ05UUihmbGN0bCkpOwkvKiBzZXQgMCBzaXplICovCisJCXN0YXJ0X3RyYW5zbGF0aW9uKGZsY3RsKTsKKwkJd2FpdF9jb21wbGV0aW9uKGZsY3RsKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisJcmV0dXJuOworCityZWFkX25vcm1hbF9leGl0OgorCXdyaXRlbChmbGN0bC0+cmVhZF9ieXRlcywgRkxEVENOVFIoZmxjdGwpKTsJLyogc2V0IHJlYWQgc2l6ZSAqLworCXN0YXJ0X3RyYW5zbGF0aW9uKGZsY3RsKTsKKwlyZWFkX2ZpZm9yZWcoZmxjdGwsIGZsY3RsLT5yZWFkX2J5dGVzLCAwKTsKKwl3YWl0X2NvbXBsZXRpb24oZmxjdGwpOworCXJldHVybjsKK30KKworc3RhdGljIHZvaWQgZmxjdGxfc2VsZWN0X2NoaXAoc3RydWN0IG10ZF9pbmZvICptdGQsIGludCBjaGlwbnIpCit7CisJc3RydWN0IHNoX2ZsY3RsICpmbGN0bCA9IG10ZF90b19mbGN0bChtdGQpOworCXVpbnQzMl90IGZsY21uY3JfdmFsID0gcmVhZGwoRkxDTU5DUihmbGN0bCkpOworCisJc3dpdGNoIChjaGlwbnIpIHsKKwljYXNlIC0xOgorCQlmbGNtbmNyX3ZhbCAmPSB+Q0UwX0VOQUJMRTsKKwkJd3JpdGVsKGZsY21uY3JfdmFsLCBGTENNTkNSKGZsY3RsKSk7CisJCWJyZWFrOworCWNhc2UgMDoKKwkJZmxjbW5jcl92YWwgfD0gQ0UwX0VOQUJMRTsKKwkJd3JpdGVsKGZsY21uY3JfdmFsLCBGTENNTkNSKGZsY3RsKSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCUJVRygpOworCX0KK30KKworc3RhdGljIHZvaWQgZmxjdGxfd3JpdGVfYnVmKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBjb25zdCB1aW50OF90ICpidWYsIGludCBsZW4pCit7CisJc3RydWN0IHNoX2ZsY3RsICpmbGN0bCA9IG10ZF90b19mbGN0bChtdGQpOworCWludCBpLCBpbmRleCA9IGZsY3RsLT5pbmRleDsKKworCWZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykKKwkJZmxjdGwtPmRvbmVfYnVmZltpbmRleCArIGldID0gYnVmW2ldOworCWZsY3RsLT5pbmRleCArPSBsZW47Cit9CisKK3N0YXRpYyB1aW50OF90IGZsY3RsX3JlYWRfYnl0ZShzdHJ1Y3QgbXRkX2luZm8gKm10ZCkKK3sKKwlzdHJ1Y3Qgc2hfZmxjdGwgKmZsY3RsID0gbXRkX3RvX2ZsY3RsKG10ZCk7CisJaW50IGluZGV4ID0gZmxjdGwtPmluZGV4OworCXVpbnQ4X3QgZGF0YTsKKworCWRhdGEgPSBmbGN0bC0+ZG9uZV9idWZmW2luZGV4XTsKKwlmbGN0bC0+aW5kZXgrKzsKKwlyZXR1cm4gZGF0YTsKK30KKworc3RhdGljIHZvaWQgZmxjdGxfcmVhZF9idWYoc3RydWN0IG10ZF9pbmZvICptdGQsIHVpbnQ4X3QgKmJ1ZiwgaW50IGxlbikKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykKKwkJYnVmW2ldID0gZmxjdGxfcmVhZF9ieXRlKG10ZCk7Cit9CisKK3N0YXRpYyBpbnQgZmxjdGxfdmVyaWZ5X2J1ZihzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgY29uc3QgdV9jaGFyICpidWYsIGludCBsZW4pCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspCisJCWlmIChidWZbaV0gIT0gZmxjdGxfcmVhZF9ieXRlKG10ZCkpCisJCQlyZXR1cm4gLUVGQVVMVDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgZmxjdGxfcmVnaXN0ZXJfaW5pdChzdHJ1Y3Qgc2hfZmxjdGwgKmZsY3RsLCB1bnNpZ25lZCBsb25nIHZhbCkKK3sKKwl3cml0ZWwodmFsLCBGTENNTkNSKGZsY3RsKSk7Cit9CisKK3N0YXRpYyBpbnQgZmxjdGxfY2hpcF9pbml0X3RhaWwoc3RydWN0IG10ZF9pbmZvICptdGQpCit7CisJc3RydWN0IHNoX2ZsY3RsICpmbGN0bCA9IG10ZF90b19mbGN0bChtdGQpOworCXN0cnVjdCBuYW5kX2NoaXAgKmNoaXAgPSAmZmxjdGwtPmNoaXA7CisKKwlpZiAobXRkLT53cml0ZXNpemUgPT0gNTEyKSB7CisJCWZsY3RsLT5wYWdlX3NpemUgPSAwOworCQlpZiAoY2hpcC0+Y2hpcHNpemUgPiAoMzIgPDwgMjApKSB7CisJCQkvKiBiaWcgdGhhbiAzMk1CICovCisJCQlmbGN0bC0+cndfQURSQ05UID0gQURSQ05UXzQ7CisJCQlmbGN0bC0+ZXJhc2VfQURSQ05UID0gQURSQ05UXzM7CisJCX0gZWxzZSBpZiAoY2hpcC0+Y2hpcHNpemUgPiAoMiA8PCAxNikpIHsKKwkJCS8qIGJpZyB0aGFuIDEyOEtCICovCisJCQlmbGN0bC0+cndfQURSQ05UID0gQURSQ05UXzM7CisJCQlmbGN0bC0+ZXJhc2VfQURSQ05UID0gQURSQ05UXzI7CisJCX0gZWxzZSB7CisJCQlmbGN0bC0+cndfQURSQ05UID0gQURSQ05UXzI7CisJCQlmbGN0bC0+ZXJhc2VfQURSQ05UID0gQURSQ05UXzE7CisJCX0KKwl9IGVsc2UgeworCQlmbGN0bC0+cGFnZV9zaXplID0gMTsKKwkJaWYgKGNoaXAtPmNoaXBzaXplID4gKDEyOCA8PCAyMCkpIHsKKwkJCS8qIGJpZyB0aGFuIDEyOE1CICovCisJCQlmbGN0bC0+cndfQURSQ05UID0gQURSQ05UMl9FOworCQkJZmxjdGwtPmVyYXNlX0FEUkNOVCA9IEFEUkNOVF8zOworCQl9IGVsc2UgaWYgKGNoaXAtPmNoaXBzaXplID4gKDggPDwgMTYpKSB7CisJCQkvKiBiaWcgdGhhbiA1MTJLQiAqLworCQkJZmxjdGwtPnJ3X0FEUkNOVCA9IEFEUkNOVF80OworCQkJZmxjdGwtPmVyYXNlX0FEUkNOVCA9IEFEUkNOVF8yOworCQl9IGVsc2UgeworCQkJZmxjdGwtPnJ3X0FEUkNOVCA9IEFEUkNOVF8zOworCQkJZmxjdGwtPmVyYXNlX0FEUkNOVCA9IEFEUkNOVF8xOworCQl9CisJfQorCisJaWYgKGZsY3RsLT5od2VjYykgeworCQlpZiAobXRkLT53cml0ZXNpemUgPT0gNTEyKSB7CisJCQljaGlwLT5lY2MubGF5b3V0ID0gJmZsY3RsXzRzZWNjX29vYl8xNjsKKwkJCWNoaXAtPmJhZGJsb2NrX3BhdHRlcm4gPSAmZmxjdGxfNHNlY2Nfc21hbGxwYWdlOworCQl9IGVsc2UgeworCQkJY2hpcC0+ZWNjLmxheW91dCA9ICZmbGN0bF80c2VjY19vb2JfNjQ7CisJCQljaGlwLT5iYWRibG9ja19wYXR0ZXJuID0gJmZsY3RsXzRzZWNjX2xhcmdlcGFnZTsKKwkJfQorCisJCWNoaXAtPmVjYy5zaXplID0gNTEyOworCQljaGlwLT5lY2MuYnl0ZXMgPSAxMDsKKwkJY2hpcC0+ZWNjLnJlYWRfcGFnZSA9IGZsY3RsX3JlYWRfcGFnZV9od2VjYzsKKwkJY2hpcC0+ZWNjLndyaXRlX3BhZ2UgPSBmbGN0bF93cml0ZV9wYWdlX2h3ZWNjOworCQljaGlwLT5lY2MubW9kZSA9IE5BTkRfRUNDX0hXOworCisJCS8qIDQgc3ltYm9scyBFQ0MgZW5hYmxlZCAqLworCQl3cml0ZWwocmVhZGwoRkxDTU5DUihmbGN0bCkpIHwgXzRFQ0NFTiB8IEVDQ1BPUzIgfCBFQ0NQT1NfMDIsCisJCQkJRkxDTU5DUihmbGN0bCkpOworCX0gZWxzZSB7CisJCWNoaXAtPmVjYy5tb2RlID0gTkFORF9FQ0NfU09GVDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBfX2luaXQgZmxjdGxfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKKwlzdHJ1Y3Qgc2hfZmxjdGwgKmZsY3RsOworCXN0cnVjdCBtdGRfaW5mbyAqZmxjdGxfbXRkOworCXN0cnVjdCBuYW5kX2NoaXAgKm5hbmQ7CisJc3RydWN0IHNoX2ZsY3RsX3BsYXRmb3JtX2RhdGEgKnBkYXRhOworCWludCByZXQ7CisKKwlwZGF0YSA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOworCWlmIChwZGF0YSA9PSBOVUxMKSB7CisJCXByaW50ayhLRVJOX0VSUiAic2hfZmxjdGwgcGxhdGZvcm1fZGF0YSBub3QgZm91bmQuXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJZmxjdGwgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgc2hfZmxjdGwpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWZsY3RsKSB7CisJCXByaW50ayhLRVJOX0VSUiAiVW5hYmxlIHRvIGFsbG9jYXRlIE5BTkQgTVREIGRldiBzdHJ1Y3R1cmUuXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwlpZiAoIXJlcykgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiByZXNvdXJjZSBub3QgZm91bmQuXG4iLCBfX2Z1bmNfXyk7CisJCXJldCA9IC1FTk9ERVY7CisJCWdvdG8gZXJyOworCX0KKworCWZsY3RsLT5yZWcgPSBpb3JlbWFwKHJlcy0+c3RhcnQsIHJlcy0+ZW5kIC0gcmVzLT5zdGFydCArIDEpOworCWlmIChmbGN0bC0+cmVnID09IE5VTEwpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogaW9yZW1hcCBlcnJvci5cbiIsIF9fZnVuY19fKTsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBlcnI7CisJfQorCisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgZmxjdGwpOworCWZsY3RsX210ZCA9ICZmbGN0bC0+bXRkOworCW5hbmQgPSAmZmxjdGwtPmNoaXA7CisJZmxjdGxfbXRkLT5wcml2ID0gbmFuZDsKKwlmbGN0bC0+aHdlY2MgPSBwZGF0YS0+aGFzX2h3ZWNjOworCisJZmxjdGxfcmVnaXN0ZXJfaW5pdChmbGN0bCwgcGRhdGEtPmZsY21uY3JfdmFsKTsKKworCW5hbmQtPm9wdGlvbnMgPSBOQU5EX05PX0FVVE9JTkNSOworCisJLyogU2V0IGFkZHJlc3Mgb2YgaGFyZHdhcmUgY29udHJvbCBmdW5jdGlvbiAqLworCS8qIDIwIHVzIGNvbW1hbmQgZGVsYXkgdGltZSAqLworCW5hbmQtPmNoaXBfZGVsYXkgPSAyMDsKKworCW5hbmQtPnJlYWRfYnl0ZSA9IGZsY3RsX3JlYWRfYnl0ZTsKKwluYW5kLT53cml0ZV9idWYgPSBmbGN0bF93cml0ZV9idWY7CisJbmFuZC0+cmVhZF9idWYgPSBmbGN0bF9yZWFkX2J1ZjsKKwluYW5kLT52ZXJpZnlfYnVmID0gZmxjdGxfdmVyaWZ5X2J1ZjsKKwluYW5kLT5zZWxlY3RfY2hpcCA9IGZsY3RsX3NlbGVjdF9jaGlwOworCW5hbmQtPmNtZGZ1bmMgPSBmbGN0bF9jbWRmdW5jOworCisJcmV0ID0gbmFuZF9zY2FuX2lkZW50KGZsY3RsX210ZCwgMSk7CisJaWYgKHJldCkKKwkJZ290byBlcnI7CisKKwlyZXQgPSBmbGN0bF9jaGlwX2luaXRfdGFpbChmbGN0bF9tdGQpOworCWlmIChyZXQpCisJCWdvdG8gZXJyOworCisJcmV0ID0gbmFuZF9zY2FuX3RhaWwoZmxjdGxfbXRkKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycjsKKworCWFkZF9tdGRfcGFydGl0aW9ucyhmbGN0bF9tdGQsIHBkYXRhLT5wYXJ0cywgcGRhdGEtPm5yX3BhcnRzKTsKKworCXJldHVybiAwOworCitlcnI6CisJa2ZyZWUoZmxjdGwpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgX19leGl0IGZsY3RsX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBzaF9mbGN0bCAqZmxjdGwgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKworCW5hbmRfcmVsZWFzZSgmZmxjdGwtPm10ZCk7CisJa2ZyZWUoZmxjdGwpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGZsY3RsX2RyaXZlciA9IHsKKwkucHJvYmUJCT0gZmxjdGxfcHJvYmUsCisJLnJlbW92ZQkJPSBmbGN0bF9yZW1vdmUsCisJLmRyaXZlciA9IHsKKwkJLm5hbWUJPSAic2hfZmxjdGwiLAorCQkub3duZXIJPSBUSElTX01PRFVMRSwKKwl9LAorfTsKKworc3RhdGljIGludCBfX2luaXQgZmxjdGxfbmFuZF9pbml0KHZvaWQpCit7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmZmxjdGxfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGZsY3RsX25hbmRfY2xlYW51cCh2b2lkKQoreworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZmbGN0bF9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChmbGN0bF9uYW5kX2luaXQpOworbW9kdWxlX2V4aXQoZmxjdGxfbmFuZF9jbGVhbnVwKTsKKworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0FVVEhPUigiWW9zaGloaXJvIFNoaW1vZGEiKTsKK01PRFVMRV9ERVNDUklQVElPTigiU3VwZXJIIEZMQ1RMIGRyaXZlciIpOworTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybTpzaF9mbGN0bCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbmFuZC90b3RvLmMgYi9kcml2ZXJzL210ZC9uYW5kL3RvdG8uYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmJmNDkyZS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL210ZC9uYW5kL3RvdG8uYworKysgL2Rldi9udWxsCkBAIC0xLDIwNiArMCwwIEBACi0vKgotICogIGRyaXZlcnMvbXRkL25hbmQvdG90by5jCi0gKgotICogIENvcHlyaWdodCAoYykgMjAwMyBUZXhhcyBJbnN0cnVtZW50cwotICoKLSAqICBEZXJpdmVkIGZyb20gZHJpdmVycy9tdGQvYXV0Y3B1MTIuYwotICoKLSAqICBDb3B5cmlnaHQgKGMpIDIwMDIgVGhvbWFzIEdsZWl4bmVyIDx0Z3hsQGxpbnV0cm9uaXguZGU+Ci0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqCi0gKiAgT3ZlcnZpZXc6Ci0gKiAgIFRoaXMgaXMgYSBkZXZpY2UgZHJpdmVyIGZvciB0aGUgTkFORCBmbGFzaCBkZXZpY2UgZm91bmQgb24gdGhlCi0gKiAgIFRJIGZpZG8gYm9hcmQuIEl0IHN1cHBvcnRzIDMyTWlCIGFuZCA2NE1pQiBjYXJkcwotICovCi0KLSNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Ci0jaW5jbHVkZSA8bGludXgvbXRkL210ZC5oPgotI2luY2x1ZGUgPGxpbnV4L210ZC9uYW5kLmg+Ci0jaW5jbHVkZSA8bGludXgvbXRkL3BhcnRpdGlvbnMuaD4KLSNpbmNsdWRlIDxhc20vaW8uaD4KLSNpbmNsdWRlIDxhc20vYXJjaC9oYXJkd2FyZS5oPgotI2luY2x1ZGUgPGFzbS9zaXplcy5oPgotI2luY2x1ZGUgPGFzbS9hcmNoL3RvdG8uaD4KLSNpbmNsdWRlIDxhc20vYXJjaC1vbWFwMTUxMC9oYXJkd2FyZS5oPgotI2luY2x1ZGUgPGFzbS9hcmNoL2dwaW8uaD4KLQotI2RlZmluZSBDT05GSUdfTkFORF9XT1JLQVJPVU5EIDEKLQotLyoKLSAqIE1URCBzdHJ1Y3R1cmUgZm9yIFRPVE8gYm9hcmQKLSAqLwotc3RhdGljIHN0cnVjdCBtdGRfaW5mbyAqdG90b19tdGQgPSBOVUxMOwotCi1zdGF0aWMgdW5zaWduZWQgbG9uZyB0b3RvX2lvX2Jhc2UgPSBPTUFQX0ZMQVNIXzFfQkFTRTsKLQotLyoKLSAqIERlZmluZSBwYXJ0aXRpb25zIGZvciBmbGFzaCBkZXZpY2VzCi0gKi8KLQotc3RhdGljIHN0cnVjdCBtdGRfcGFydGl0aW9uIHBhcnRpdGlvbl9pbmZvNjRNW10gPSB7Ci0JeyAubmFtZSA9CSJ0b3RvIGtlcm5lbCBwYXJ0aXRpb24gMSIsCi0JICAub2Zmc2V0ID0JMCwKLQkgIC5zaXplCT0JMiAqIFNaXzFNIH0sCi0JeyAubmFtZSA9CSJ0b3RvIGZpbGUgc3lzIHBhcnRpdGlvbiAyIiwKLQkgIC5vZmZzZXQgPQkyICogU1pfMU0sCi0JICAuc2l6ZSA9CTE0ICogU1pfMU0gfSwKLQl7IC5uYW1lID0JInRvdG8gdXNlciBwYXJ0aXRpb24gMyIsCi0JICAub2Zmc2V0ID0JMTYgKiBTWl8xTSwKLQkgIC5zaXplID0JMTYgKiBTWl8xTSB9LAotCXsgLm5hbWUgPQkidG90byBkZXZib2FyZCBleHRyYSBwYXJ0aXRpb24gNCIsCi0JICAub2Zmc2V0ID0JMzIgKiBTWl8xTSwKLQkgIC5zaXplID0JMzIgKiBTWl8xTSB9LAotfTsKLQotc3RhdGljIHN0cnVjdCBtdGRfcGFydGl0aW9uIHBhcnRpdGlvbl9pbmZvMzJNW10gPSB7Ci0JeyAubmFtZSA9CSJ0b3RvIGtlcm5lbCBwYXJ0aXRpb24gMSIsCi0JICAub2Zmc2V0ID0JMCwKLQkgIC5zaXplID0JMiAqIFNaXzFNIH0sCi0JeyAubmFtZSA9CSJ0b3RvIGZpbGUgc3lzIHBhcnRpdGlvbiAyIiwKLQkgIC5vZmZzZXQgPQkyICogU1pfMU0sCi0JICAuc2l6ZSA9CTE0ICogU1pfMU0gfSwKLQl7IC5uYW1lID0JInRvdG8gdXNlciBwYXJ0aXRpb24gMyIsCi0JICAub2Zmc2V0ID0JMTYgKiBTWl8xTSwKLQkgIC5zaXplID0JMTYgKiBTWl8xTSB9LAotfTsKLQotI2RlZmluZSBOVU1fUEFSVElUSU9OUzMyTSAzCi0jZGVmaW5lIE5VTV9QQVJUSVRJT05TNjRNIDQKLQotLyoKLSAqCWhhcmR3YXJlIHNwZWNpZmljIGFjY2VzcyB0byBjb250cm9sLWxpbmVzCi0gKgotICoJY3RybDoKLSAqCU5BTkRfTkNFOiBiaXQgMCAtPiBiaXQgMTQgKDB4NDAwMCkKLSAqCU5BTkRfQ0xFOiBiaXQgMSAtPiBiaXQgMTIgKDB4MTAwMCkKLSAqCU5BTkRfQUxFOiBiaXQgMiAtPiBiaXQgMSAgKDB4MDAwMikKLSAqLwotc3RhdGljIHZvaWQgdG90b19od2NvbnRyb2woc3RydWN0IG10ZF9pbmZvICptdGQsIGludCBjbWQsCi0JCQkgICB1bnNpZ25lZCBpbnQgY3RybCkKLXsKLQlzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwID0gbXRkLT5wcml2OwotCi0JaWYgKGN0cmwgJiBOQU5EX0NUUkxfQ0hBTkdFKSB7Ci0JCXVuc2lnbmVkIGxvbmcgYml0czsKLQotCQkvKiBob3BlZnVsbHkgZW5vdWdoIHRpbWUgZm9yIHRjIG1ha2UgcHJvY2VkaW5nIHdyaXRlIHRvIGNsZWFyICovCi0JCXVkZWxheSgxKTsKLQotCQliaXRzID0gKH5jdHJsICYgTkFORF9OQ0UpIDw8IDE0OwotCQliaXRzIHw9IChjdHJsICYgTkFORF9DTEUpIDw8IDEyOwotCQliaXRzIHw9IChjdHJsICYgTkFORF9BTEUpID4+IDE7Ci0KLSN3YXJuaW5nIFdpbGQgZ3Vlc3MgYXMgZ3Bpb3NldG91dCgpIGlzIG5vd2hlcmUgZGVmaW5lZCBpbiB0aGUga2VybmVsIHNvdXJjZSAtIHRnbHgKLQkJZ3Bpb3NldG91dCgweDUwMDIsIGJpdHMpOwotCi0jaWZkZWYgQ09ORklHX05BTkRfV09SS0FST1VORAotCQkvKiAic29tZSIgZGV2IGJvYXJkcyBidXN0ZWQsIGJsdWUgd2lyZWQgdG8gcnRzMiA6KCAqLwotCQlydHMyc2V0b3V0KDIsIChjdHJsICYgTkFORF9DTEUpIDw8IDEpOwotI2VuZGlmCi0JCS8qIGFsbG93IHRpbWUgdG8gZW5zdXJlIGdwaW8gc3RhdGUgdG8gb3ZlciB0YWtlIG1lbW9yeSB3cml0ZSAqLwotCQl1ZGVsYXkoMSk7Ci0JfQotCi0JaWYgKGNtZCAhPSBOQU5EX0NNRF9OT05FKQotCQl3cml0ZWIoY21kLCBjaGlwLT5JT19BRERSX1cpOwotfQotCi0vKgotICogTWFpbiBpbml0aWFsaXphdGlvbiByb3V0aW5lCi0gKi8KLXN0YXRpYyBpbnQgX19pbml0IHRvdG9faW5pdCh2b2lkKQotewotCXN0cnVjdCBuYW5kX2NoaXAgKnRoaXM7Ci0JaW50IGVyciA9IDA7Ci0KLQkvKiBBbGxvY2F0ZSBtZW1vcnkgZm9yIE1URCBkZXZpY2Ugc3RydWN0dXJlIGFuZCBwcml2YXRlIGRhdGEgKi8KLQl0b3RvX210ZCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBtdGRfaW5mbykgKyBzaXplb2Yoc3RydWN0IG5hbmRfY2hpcCksIEdGUF9LRVJORUwpOwotCWlmICghdG90b19tdGQpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiVW5hYmxlIHRvIGFsbG9jYXRlIHRvdG8gTkFORCBNVEQgZGV2aWNlIHN0cnVjdHVyZS5cbiIpOwotCQllcnIgPSAtRU5PTUVNOwotCQlnb3RvIG91dDsKLQl9Ci0KLQkvKiBHZXQgcG9pbnRlciB0byBwcml2YXRlIGRhdGEgKi8KLQl0aGlzID0gKHN0cnVjdCBuYW5kX2NoaXAgKikoJnRvdG9fbXRkWzFdKTsKLQotCS8qIEluaXRpYWxpemUgc3RydWN0dXJlcyAqLwotCW1lbXNldCh0b3RvX210ZCwgMCwgc2l6ZW9mKHN0cnVjdCBtdGRfaW5mbykpOwotCW1lbXNldCh0aGlzLCAwLCBzaXplb2Yoc3RydWN0IG5hbmRfY2hpcCkpOwotCi0JLyogTGluayB0aGUgcHJpdmF0ZSBkYXRhIHdpdGggdGhlIE1URCBzdHJ1Y3R1cmUgKi8KLQl0b3RvX210ZC0+cHJpdiA9IHRoaXM7Ci0JdG90b19tdGQtPm93bmVyID0gVEhJU19NT0RVTEU7Ci0KLQkvKiBTZXQgYWRkcmVzcyBvZiBOQU5EIElPIGxpbmVzICovCi0JdGhpcy0+SU9fQUREUl9SID0gdG90b19pb19iYXNlOwotCXRoaXMtPklPX0FERFJfVyA9IHRvdG9faW9fYmFzZTsKLQl0aGlzLT5jbWRfY3RybCA9IHRvdG9faHdjb250cm9sOwotCXRoaXMtPmRldl9yZWFkeSA9IE5VTEw7Ci0JLyogMjUgdXMgY29tbWFuZCBkZWxheSB0aW1lICovCi0JdGhpcy0+Y2hpcF9kZWxheSA9IDMwOwotCXRoaXMtPmVjYy5tb2RlID0gTkFORF9FQ0NfU09GVDsKLQotCS8qIFNjYW4gdG8gZmluZCBleGlzdGFuY2Ugb2YgdGhlIGRldmljZSAqLwotCWlmIChuYW5kX3NjYW4odG90b19tdGQsIDEpKSB7Ci0JCWVyciA9IC1FTlhJTzsKLQkJZ290byBvdXRfbXRkOwotCX0KLQotCS8qIFJlZ2lzdGVyIHRoZSBwYXJ0aXRpb25zICovCi0Jc3dpdGNoICh0b3RvX210ZC0+c2l6ZSkgewotCWNhc2UgU1pfNjRNOgotCQlhZGRfbXRkX3BhcnRpdGlvbnModG90b19tdGQsIHBhcnRpdGlvbl9pbmZvNjRNLCBOVU1fUEFSVElUSU9OUzY0TSk7Ci0JCWJyZWFrOwotCWNhc2UgU1pfMzJNOgotCQlhZGRfbXRkX3BhcnRpdGlvbnModG90b19tdGQsIHBhcnRpdGlvbl9pbmZvMzJNLCBOVU1fUEFSVElUSU9OUzMyTSk7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6ewotCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiVW5zdXBwb3J0ZWQgTmFuZCBkZXZpY2VcbiIpOwotCQkJZXJyID0gLUVOWElPOwotCQkJZ290byBvdXRfYnVmOwotCQl9Ci0JfQotCi0JZ3Bpb3Jlc2VydmUoTkFORF9NQVNLKTsJLyogY2xhaW0gb3VyIGdwaW9zICovCi0JYXJjaGZsYXNod3AoMCwgMCk7CS8qIG9wZW4gdXAgZmxhc2ggZm9yIHdyaXRpbmcgKi8KLQotCWdvdG8gb3V0OwotCi0gb3V0X210ZDoKLQlrZnJlZSh0b3RvX210ZCk7Ci0gb3V0OgotCXJldHVybiBlcnI7Ci19Ci0KLW1vZHVsZV9pbml0KHRvdG9faW5pdCk7Ci0KLS8qCi0gKiBDbGVhbiB1cCByb3V0aW5lCi0gKi8KLXN0YXRpYyB2b2lkIF9fZXhpdCB0b3RvX2NsZWFudXAodm9pZCkKLXsKLQkvKiBSZWxlYXNlIHJlc291cmNlcywgdW5yZWdpc3RlciBkZXZpY2UgKi8KLQluYW5kX3JlbGVhc2UodG90b19tdGQpOwotCi0JLyogRnJlZSB0aGUgTVREIGRldmljZSBzdHJ1Y3R1cmUgKi8KLQlrZnJlZSh0b3RvX210ZCk7Ci0KLQkvKiBzdG9wIGZsYXNoIHdyaXRlcyAqLwotCWFyY2hmbGFzaHdwKDAsIDEpOwotCi0JLyogcmVsZWFzZSBncGlvcyB0byBzeXN0ZW0gKi8KLQlncGlvcmVsZWFzZShOQU5EX01BU0spOwotfQotCi1tb2R1bGVfZXhpdCh0b3RvX2NsZWFudXApOwotCi1NT0RVTEVfTElDRU5TRSgiR1BMIik7Ci1NT0RVTEVfQVVUSE9SKCJSaWNoYXJkIFdvb2RydWZmIDxyLXdvb2RydWZmMkB0aS5jb20+Iik7Ci1NT0RVTEVfREVTQ1JJUFRJT04oIkdsdWUgbGF5ZXIgZm9yIE5BTkQgZmxhc2ggb24gdG90byBib2FyZCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvb2ZwYXJ0LmMgYi9kcml2ZXJzL210ZC9vZnBhcnQuYwppbmRleCA0ZjgwYzJmLi45ZTQ1YjNmIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9vZnBhcnQuYworKysgYi9kcml2ZXJzL210ZC9vZnBhcnQuYwpAQCAtMjAsNyArMjAsNiBAQAogI2luY2x1ZGUgPGxpbnV4L210ZC9wYXJ0aXRpb25zLmg+CiAKIGludCBfX2RldmluaXQgb2ZfbXRkX3BhcnNlX3BhcnRpdGlvbnMoc3RydWN0IGRldmljZSAqZGV2LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgbXRkX2luZm8gKm10ZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGRldmljZV9ub2RlICpub2RlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiAqKnBwYXJ0cykKIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL29uZW5hbmQvS2NvbmZpZyBiL2RyaXZlcnMvbXRkL29uZW5hbmQvS2NvbmZpZwppbmRleCBjYjQxY2JjLi43OWZhNzllIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9vbmVuYW5kL0tjb25maWcKKysrIGIvZHJpdmVycy9tdGQvb25lbmFuZC9LY29uZmlnCkBAIC0yNyw4ICsyNywxNiBAQAogCWhlbHAKIAkgIFN1cHBvcnQgZm9yIE9uZU5BTkQgZmxhc2ggdmlhIHBsYXRmb3JtIGRldmljZSBkcml2ZXIuCiAKK2NvbmZpZyBNVERfT05FTkFORF9PTUFQMgorCXRyaXN0YXRlICJPbmVOQU5EIG9uIE9NQVAyL09NQVAzIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBNVERfT05FTkFORCAmJiAoQVJDSF9PTUFQMiB8fCBBUkNIX09NQVAzKQorCWhlbHAKKwkgIFN1cHBvcnQgZm9yIGEgT25lTkFORCBmbGFzaCBkZXZpY2UgY29ubmVjdGVkIHRvIGFuIE9NQVAyL09NQVAzIENQVQorCSAgdmlhIHRoZSBHUE1DIG1lbW9yeSBjb250cm9sbGVyLgorCiBjb25maWcgTVREX09ORU5BTkRfT1RQCiAJYm9vbCAiT25lTkFORCBPVFAgU3VwcG9ydCIKKwlzZWxlY3QgSEFWRV9NVERfT1RQCiAJaGVscAogCSAgT25lIEJsb2NrIG9mIHRoZSBOQU5EIEZsYXNoIEFycmF5IG1lbW9yeSBpcyByZXNlcnZlZCBhcwogCSAgYSBPbmUtVGltZSBQcm9ncmFtbWFibGUgQmxvY2sgbWVtb3J5IGFyZWEuCmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9vbmVuYW5kL01ha2VmaWxlIGIvZHJpdmVycy9tdGQvb25lbmFuZC9NYWtlZmlsZQppbmRleCA0ZDJlYWNmLi42NGI2Y2M2IDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9vbmVuYW5kL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbXRkL29uZW5hbmQvTWFrZWZpbGUKQEAgLTcsNiArNyw3IEBACiAKICMgQm9hcmQgc3BlY2lmaWMuCiBvYmotJChDT05GSUdfTVREX09ORU5BTkRfR0VORVJJQykJKz0gZ2VuZXJpYy5vCitvYmotJChDT05GSUdfTVREX09ORU5BTkRfT01BUDIpCQkrPSBvbWFwMi5vCiAKICMgU2ltdWxhdG9yCiBvYmotJChDT05GSUdfTVREX09ORU5BTkRfU0lNKQkJKz0gb25lbmFuZF9zaW0ubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvb25lbmFuZC9vbWFwMi5jIGIvZHJpdmVycy9tdGQvb25lbmFuZC9vbWFwMi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgzODdlMDUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL210ZC9vbmVuYW5kL29tYXAyLmMKQEAgLTAsMCArMSw4MDIgQEAKKy8qCisgKiAgbGludXgvZHJpdmVycy9tdGQvb25lbmFuZC9vbWFwMi5jCisgKgorICogIE9uZU5BTkQgZHJpdmVyIGZvciBPTUFQMiAvIE9NQVAzCisgKgorICogIENvcHlyaWdodCDCqSAyMDA1LTIwMDYgTm9raWEgQ29ycG9yYXRpb24KKyAqCisgKiAgQXV0aG9yOiBKYXJra28gTGF2aW5lbiA8amFya2tvLmxhdmluZW5Abm9raWEuY29tPiBhbmQgSnVoYSBZcmrDtmzDpAorICogIElSUSBhbmQgRE1BIHN1cHBvcnQgd3JpdHRlbiBieSBUaW1vIFRlcmFzCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAqIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAorICogdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvbXRkLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL29uZW5hbmQuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvcGFydGl0aW9ucy5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisKKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9mbGFzaC5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL2dwbWMuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9vbmVuYW5kLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvZ3Bpby5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL2dwbWMuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9wbS5oPgorCisjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KKyNpbmNsdWRlIDxhc20vZG1hLW1hcHBpbmcuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9kbWEuaD4KKworI2luY2x1ZGUgPGFzbS9hcmNoL2JvYXJkLmg+CisKKyNkZWZpbmUgRFJJVkVSX05BTUUgIm9tYXAyLW9uZW5hbmQiCisKKyNkZWZpbmUgT05FTkFORF9JT19TSVpFCQlTWl8xMjhLCisjZGVmaW5lIE9ORU5BTkRfQlVGUkFNX1NJWkUJKDEwMjQgKiA1KQorCitzdHJ1Y3Qgb21hcDJfb25lbmFuZCB7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldjsKKwlpbnQgZ3BtY19jczsKKwl1bnNpZ25lZCBsb25nIHBoeXNfYmFzZTsKKwlpbnQgZ3Bpb19pcnE7CisJc3RydWN0IG10ZF9pbmZvIG10ZDsKKwlzdHJ1Y3QgbXRkX3BhcnRpdGlvbiAqcGFydHM7CisJc3RydWN0IG9uZW5hbmRfY2hpcCBvbmVuYW5kOworCXN0cnVjdCBjb21wbGV0aW9uIGlycV9kb25lOworCXN0cnVjdCBjb21wbGV0aW9uIGRtYV9kb25lOworCWludCBkbWFfY2hhbm5lbDsKKwlpbnQgZnJlcTsKKwlpbnQgKCpzZXR1cCkodm9pZCBfX2lvbWVtICpiYXNlLCBpbnQgZnJlcSk7Cit9OworCitzdGF0aWMgdm9pZCBvbWFwMl9vbmVuYW5kX2RtYV9jYihpbnQgbGNoLCB1MTYgY2hfc3RhdHVzLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBvbWFwMl9vbmVuYW5kICpjID0gZGF0YTsKKworCWNvbXBsZXRlKCZjLT5kbWFfZG9uZSk7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBvbWFwMl9vbmVuYW5kX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpCit7CisJc3RydWN0IG9tYXAyX29uZW5hbmQgKmMgPSBkZXZfaWQ7CisKKwljb21wbGV0ZSgmYy0+aXJxX2RvbmUpOworCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIHNob3J0IHJlYWRfcmVnKHN0cnVjdCBvbWFwMl9vbmVuYW5kICpjLCBpbnQgcmVnKQoreworCXJldHVybiByZWFkdyhjLT5vbmVuYW5kLmJhc2UgKyByZWcpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgd3JpdGVfcmVnKHN0cnVjdCBvbWFwMl9vbmVuYW5kICpjLCB1bnNpZ25lZCBzaG9ydCB2YWx1ZSwKKwkJCSAgICAgaW50IHJlZykKK3sKKwl3cml0ZXcodmFsdWUsIGMtPm9uZW5hbmQuYmFzZSArIHJlZyk7Cit9CisKK3N0YXRpYyB2b2lkIHdhaXRfZXJyKGNoYXIgKm1zZywgaW50IHN0YXRlLCB1bnNpZ25lZCBpbnQgY3RybCwgdW5zaWduZWQgaW50IGludHIpCit7CisJcHJpbnRrKEtFUk5fRVJSICJvbmVuYW5kX3dhaXQ6ICVzISBzdGF0ZSAlZCBjdHJsIDB4JTA0eCBpbnRyIDB4JTA0eFxuIiwKKwkgICAgICAgbXNnLCBzdGF0ZSwgY3RybCwgaW50cik7Cit9CisKK3N0YXRpYyB2b2lkIHdhaXRfd2FybihjaGFyICptc2csIGludCBzdGF0ZSwgdW5zaWduZWQgaW50IGN0cmwsCisJCSAgICAgIHVuc2lnbmVkIGludCBpbnRyKQoreworCXByaW50ayhLRVJOX1dBUk5JTkcgIm9uZW5hbmRfd2FpdDogJXMhIHN0YXRlICVkIGN0cmwgMHglMDR4ICIKKwkgICAgICAgImludHIgMHglMDR4XG4iLCBtc2csIHN0YXRlLCBjdHJsLCBpbnRyKTsKK30KKworc3RhdGljIGludCBvbWFwMl9vbmVuYW5kX3dhaXQoc3RydWN0IG10ZF9pbmZvICptdGQsIGludCBzdGF0ZSkKK3sKKwlzdHJ1Y3Qgb21hcDJfb25lbmFuZCAqYyA9IGNvbnRhaW5lcl9vZihtdGQsIHN0cnVjdCBvbWFwMl9vbmVuYW5kLCBtdGQpOworCXVuc2lnbmVkIGludCBpbnRyID0gMDsKKwl1bnNpZ25lZCBpbnQgY3RybDsKKwl1bnNpZ25lZCBsb25nIHRpbWVvdXQ7CisJdTMyIHN5c2NmZzsKKworCWlmIChzdGF0ZSA9PSBGTF9SRVNFVElORykgeworCQlpbnQgaTsKKworCQlmb3IgKGkgPSAwOyBpIDwgMjA7IGkrKykgeworCQkJdWRlbGF5KDEpOworCQkJaW50ciA9IHJlYWRfcmVnKGMsIE9ORU5BTkRfUkVHX0lOVEVSUlVQVCk7CisJCQlpZiAoaW50ciAmIE9ORU5BTkRfSU5UX01BU1RFUikKKwkJCQlicmVhazsKKwkJfQorCQljdHJsID0gcmVhZF9yZWcoYywgT05FTkFORF9SRUdfQ1RSTF9TVEFUVVMpOworCQlpZiAoY3RybCAmIE9ORU5BTkRfQ1RSTF9FUlJPUikgeworCQkJd2FpdF9lcnIoImNvbnRyb2xsZXIgZXJyb3IiLCBzdGF0ZSwgY3RybCwgaW50cik7CisJCQlyZXR1cm4gLUVJTzsKKwkJfQorCQlpZiAoIShpbnRyICYgT05FTkFORF9JTlRfUkVTRVQpKSB7CisJCQl3YWl0X2VycigidGltZW91dCIsIHN0YXRlLCBjdHJsLCBpbnRyKTsKKwkJCXJldHVybiAtRUlPOworCQl9CisJCXJldHVybiAwOworCX0KKworCWlmIChzdGF0ZSAhPSBGTF9SRUFESU5HKSB7CisJCWludCByZXN1bHQ7CisKKwkJLyogVHVybiBpbnRlcnJ1cHRzIG9uICovCisJCXN5c2NmZyA9IHJlYWRfcmVnKGMsIE9ORU5BTkRfUkVHX1NZU19DRkcxKTsKKwkJaWYgKCEoc3lzY2ZnICYgT05FTkFORF9TWVNfQ0ZHMV9JT0JFKSkgeworCQkJc3lzY2ZnIHw9IE9ORU5BTkRfU1lTX0NGRzFfSU9CRTsKKwkJCXdyaXRlX3JlZyhjLCBzeXNjZmcsIE9ORU5BTkRfUkVHX1NZU19DRkcxKTsKKwkJCWlmIChjcHVfaXNfb21hcDM0eHgoKSkKKwkJCQkvKiBBZGQgYSBkZWxheSB0byBsZXQgR1BJTyBzZXR0bGUgKi8KKwkJCQlzeXNjZmcgPSByZWFkX3JlZyhjLCBPTkVOQU5EX1JFR19TWVNfQ0ZHMSk7CisJCX0KKworCQlJTklUX0NPTVBMRVRJT04oYy0+aXJxX2RvbmUpOworCQlpZiAoYy0+Z3Bpb19pcnEpIHsKKwkJCXJlc3VsdCA9IG9tYXBfZ2V0X2dwaW9fZGF0YWluKGMtPmdwaW9faXJxKTsKKwkJCWlmIChyZXN1bHQgPT0gLTEpIHsKKwkJCQljdHJsID0gcmVhZF9yZWcoYywgT05FTkFORF9SRUdfQ1RSTF9TVEFUVVMpOworCQkJCWludHIgPSByZWFkX3JlZyhjLCBPTkVOQU5EX1JFR19JTlRFUlJVUFQpOworCQkJCXdhaXRfZXJyKCJncGlvIGVycm9yIiwgc3RhdGUsIGN0cmwsIGludHIpOworCQkJCXJldHVybiAtRUlPOworCQkJfQorCQl9IGVsc2UKKwkJCXJlc3VsdCA9IDA7CisJCWlmIChyZXN1bHQgPT0gMCkgeworCQkJaW50IHJldHJ5X2NudCA9IDA7CityZXRyeToKKwkJCXJlc3VsdCA9IHdhaXRfZm9yX2NvbXBsZXRpb25fdGltZW91dCgmYy0+aXJxX2RvbmUsCisJCQkJCQkgICAgbXNlY3NfdG9famlmZmllcygyMCkpOworCQkJaWYgKHJlc3VsdCA9PSAwKSB7CisJCQkJLyogVGltZW91dCBhZnRlciAyMG1zICovCisJCQkJY3RybCA9IHJlYWRfcmVnKGMsIE9ORU5BTkRfUkVHX0NUUkxfU1RBVFVTKTsKKwkJCQlpZiAoY3RybCAmIE9ORU5BTkRfQ1RSTF9PTkdPKSB7CisJCQkJCS8qCisJCQkJCSAqIFRoZSBvcGVyYXRpb24gc2VlbXMgdG8gYmUgc3RpbGwgZ29pbmcKKwkJCQkJICogc28gZ2l2ZSBpdCBzb21lIG1vcmUgdGltZS4KKwkJCQkJICovCisJCQkJCXJldHJ5X2NudCArPSAxOworCQkJCQlpZiAocmV0cnlfY250IDwgMykKKwkJCQkJCWdvdG8gcmV0cnk7CisJCQkJCWludHIgPSByZWFkX3JlZyhjLAorCQkJCQkJCU9ORU5BTkRfUkVHX0lOVEVSUlVQVCk7CisJCQkJCXdhaXRfZXJyKCJ0aW1lb3V0Iiwgc3RhdGUsIGN0cmwsIGludHIpOworCQkJCQlyZXR1cm4gLUVJTzsKKwkJCQl9CisJCQkJaW50ciA9IHJlYWRfcmVnKGMsIE9ORU5BTkRfUkVHX0lOVEVSUlVQVCk7CisJCQkJaWYgKChpbnRyICYgT05FTkFORF9JTlRfTUFTVEVSKSA9PSAwKQorCQkJCQl3YWl0X3dhcm4oInRpbWVvdXQiLCBzdGF0ZSwgY3RybCwgaW50cik7CisJCQl9CisJCX0KKwl9IGVsc2UgeworCQlpbnQgcmV0cnlfY250ID0gMDsKKworCQkvKiBUdXJuIGludGVycnVwdHMgb2ZmICovCisJCXN5c2NmZyA9IHJlYWRfcmVnKGMsIE9ORU5BTkRfUkVHX1NZU19DRkcxKTsKKwkJc3lzY2ZnICY9IH5PTkVOQU5EX1NZU19DRkcxX0lPQkU7CisJCXdyaXRlX3JlZyhjLCBzeXNjZmcsIE9ORU5BTkRfUkVHX1NZU19DRkcxKTsKKworCQl0aW1lb3V0ID0gamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoMjApOworCQl3aGlsZSAoMSkgeworCQkJaWYgKHRpbWVfYmVmb3JlKGppZmZpZXMsIHRpbWVvdXQpKSB7CisJCQkJaW50ciA9IHJlYWRfcmVnKGMsIE9ORU5BTkRfUkVHX0lOVEVSUlVQVCk7CisJCQkJaWYgKGludHIgJiBPTkVOQU5EX0lOVF9NQVNURVIpCisJCQkJCWJyZWFrOworCQkJfSBlbHNlIHsKKwkJCQkvKiBUaW1lb3V0IGFmdGVyIDIwbXMgKi8KKwkJCQljdHJsID0gcmVhZF9yZWcoYywgT05FTkFORF9SRUdfQ1RSTF9TVEFUVVMpOworCQkJCWlmIChjdHJsICYgT05FTkFORF9DVFJMX09OR08pIHsKKwkJCQkJLyoKKwkJCQkJICogVGhlIG9wZXJhdGlvbiBzZWVtcyB0byBiZSBzdGlsbCBnb2luZworCQkJCQkgKiBzbyBnaXZlIGl0IHNvbWUgbW9yZSB0aW1lLgorCQkJCQkgKi8KKwkJCQkJcmV0cnlfY250ICs9IDE7CisJCQkJCWlmIChyZXRyeV9jbnQgPCAzKSB7CisJCQkJCQl0aW1lb3V0ID0gamlmZmllcyArCisJCQkJCQkJICBtc2Vjc190b19qaWZmaWVzKDIwKTsKKwkJCQkJCWNvbnRpbnVlOworCQkJCQl9CisJCQkJfQorCQkJCWJyZWFrOworCQkJfQorCQl9CisJfQorCisJaW50ciA9IHJlYWRfcmVnKGMsIE9ORU5BTkRfUkVHX0lOVEVSUlVQVCk7CisJY3RybCA9IHJlYWRfcmVnKGMsIE9ORU5BTkRfUkVHX0NUUkxfU1RBVFVTKTsKKworCWlmIChpbnRyICYgT05FTkFORF9JTlRfUkVBRCkgeworCQlpbnQgZWNjID0gcmVhZF9yZWcoYywgT05FTkFORF9SRUdfRUNDX1NUQVRVUyk7CisKKwkJaWYgKGVjYykgeworCQkJdW5zaWduZWQgaW50IGFkZHIxLCBhZGRyODsKKworCQkJYWRkcjEgPSByZWFkX3JlZyhjLCBPTkVOQU5EX1JFR19TVEFSVF9BRERSRVNTMSk7CisJCQlhZGRyOCA9IHJlYWRfcmVnKGMsIE9ORU5BTkRfUkVHX1NUQVJUX0FERFJFU1M4KTsKKwkJCWlmIChlY2MgJiBPTkVOQU5EX0VDQ18yQklUX0FMTCkgeworCQkJCXByaW50ayhLRVJOX0VSUiAib25lbmFuZF93YWl0OiBFQ0MgZXJyb3IgPSAiCisJCQkJICAgICAgICIweCUwNHgsIGFkZHIxICUjeCwgYWRkcjggJSN4XG4iLAorCQkJCSAgICAgICBlY2MsIGFkZHIxLCBhZGRyOCk7CisJCQkJbXRkLT5lY2Nfc3RhdHMuZmFpbGVkKys7CisJCQkJcmV0dXJuIC1FQkFETVNHOworCQkJfSBlbHNlIGlmIChlY2MgJiBPTkVOQU5EX0VDQ18xQklUX0FMTCkgeworCQkJCXByaW50ayhLRVJOX05PVElDRSAib25lbmFuZF93YWl0OiBjb3JyZWN0YWJsZSAiCisJCQkJICAgICAgICJFQ0MgZXJyb3IgPSAweCUwNHgsIGFkZHIxICUjeCwgIgorCQkJCSAgICAgICAiYWRkcjggJSN4XG4iLCBlY2MsIGFkZHIxLCBhZGRyOCk7CisJCQkJbXRkLT5lY2Nfc3RhdHMuY29ycmVjdGVkKys7CisJCQl9CisJCX0KKwl9IGVsc2UgaWYgKHN0YXRlID09IEZMX1JFQURJTkcpIHsKKwkJd2FpdF9lcnIoInRpbWVvdXQiLCBzdGF0ZSwgY3RybCwgaW50cik7CisJCXJldHVybiAtRUlPOworCX0KKworCWlmIChjdHJsICYgT05FTkFORF9DVFJMX0VSUk9SKSB7CisJCXdhaXRfZXJyKCJjb250cm9sbGVyIGVycm9yIiwgc3RhdGUsIGN0cmwsIGludHIpOworCQlpZiAoY3RybCAmIE9ORU5BTkRfQ1RSTF9MT0NLKQorCQkJcHJpbnRrKEtFUk5fRVJSICJvbmVuYW5kX3dhaXQ6ICIKKwkJCQkJIkRldmljZSBpcyB3cml0ZSBwcm90ZWN0ZWQhISFcbiIpOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwlpZiAoY3RybCAmIDB4RkU5RikKKwkJd2FpdF93YXJuKCJ1bmV4cGVjdGVkIGNvbnRyb2xsZXIgc3RhdHVzIiwgc3RhdGUsIGN0cmwsIGludHIpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IG9tYXAyX29uZW5hbmRfYnVmZmVycmFtX29mZnNldChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgaW50IGFyZWEpCit7CisJc3RydWN0IG9uZW5hbmRfY2hpcCAqdGhpcyA9IG10ZC0+cHJpdjsKKworCWlmIChPTkVOQU5EX0NVUlJFTlRfQlVGRkVSUkFNKHRoaXMpKSB7CisJCWlmIChhcmVhID09IE9ORU5BTkRfREFUQVJBTSkKKwkJCXJldHVybiBtdGQtPndyaXRlc2l6ZTsKKwkJaWYgKGFyZWEgPT0gT05FTkFORF9TUEFSRVJBTSkKKwkJCXJldHVybiBtdGQtPm9vYnNpemU7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKyNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAzKSB8fCBkZWZpbmVkKE1VTFRJX09NQVAyKQorCitzdGF0aWMgaW50IG9tYXAzX29uZW5hbmRfcmVhZF9idWZmZXJyYW0oc3RydWN0IG10ZF9pbmZvICptdGQsIGludCBhcmVhLAorCQkJCQl1bnNpZ25lZCBjaGFyICpidWZmZXIsIGludCBvZmZzZXQsCisJCQkJCXNpemVfdCBjb3VudCkKK3sKKwlzdHJ1Y3Qgb21hcDJfb25lbmFuZCAqYyA9IGNvbnRhaW5lcl9vZihtdGQsIHN0cnVjdCBvbWFwMl9vbmVuYW5kLCBtdGQpOworCXN0cnVjdCBvbmVuYW5kX2NoaXAgKnRoaXMgPSBtdGQtPnByaXY7CisJZG1hX2FkZHJfdCBkbWFfc3JjLCBkbWFfZHN0OworCWludCBicmFtX29mZnNldDsKKwl1bnNpZ25lZCBsb25nIHRpbWVvdXQ7CisJdm9pZCAqYnVmID0gKHZvaWQgKilidWZmZXI7CisJc2l6ZV90IHh0cmE7CisJdm9sYXRpbGUgdW5zaWduZWQgKmRvbmU7CisKKwlicmFtX29mZnNldCA9IG9tYXAyX29uZW5hbmRfYnVmZmVycmFtX29mZnNldChtdGQsIGFyZWEpICsgYXJlYSArIG9mZnNldDsKKwlpZiAoYnJhbV9vZmZzZXQgJiAzIHx8IChzaXplX3QpYnVmICYgMyB8fCBjb3VudCA8IDM4NCkKKwkJZ290byBvdXRfY29weTsKKworCWlmIChidWYgPj0gaGlnaF9tZW1vcnkpIHsKKwkJc3RydWN0IHBhZ2UgKnAxOworCisJCWlmICgoKHNpemVfdClidWYgJiBQQUdFX01BU0spICE9CisJCSAgICAoKHNpemVfdCkoYnVmICsgY291bnQgLSAxKSAmIFBBR0VfTUFTSykpCisJCQlnb3RvIG91dF9jb3B5OworCQlwMSA9IHZtYWxsb2NfdG9fcGFnZShidWYpOworCQlpZiAoIXAxKQorCQkJZ290byBvdXRfY29weTsKKwkJYnVmID0gcGFnZV9hZGRyZXNzKHAxKSArICgoc2l6ZV90KWJ1ZiAmIH5QQUdFX01BU0spOworCX0KKworCXh0cmEgPSBjb3VudCAmIDM7CisJaWYgKHh0cmEpIHsKKwkJY291bnQgLT0geHRyYTsKKwkJbWVtY3B5KGJ1ZiArIGNvdW50LCB0aGlzLT5iYXNlICsgYnJhbV9vZmZzZXQgKyBjb3VudCwgeHRyYSk7CisJfQorCisJZG1hX3NyYyA9IGMtPnBoeXNfYmFzZSArIGJyYW1fb2Zmc2V0OworCWRtYV9kc3QgPSBkbWFfbWFwX3NpbmdsZSgmYy0+cGRldi0+ZGV2LCBidWYsIGNvdW50LCBETUFfRlJPTV9ERVZJQ0UpOworCWlmIChkbWFfbWFwcGluZ19lcnJvcigmYy0+cGRldi0+ZGV2LCBkbWFfZHN0KSkgeworCQlkZXZfZXJyKCZjLT5wZGV2LT5kZXYsCisJCQkiQ291bGRuJ3QgRE1BIG1hcCBhICVkIGJ5dGUgYnVmZmVyXG4iLAorCQkJY291bnQpOworCQlnb3RvIG91dF9jb3B5OworCX0KKworCW9tYXBfc2V0X2RtYV90cmFuc2Zlcl9wYXJhbXMoYy0+ZG1hX2NoYW5uZWwsIE9NQVBfRE1BX0RBVEFfVFlQRV9TMzIsCisJCQkJICAgICBjb3VudCA+PiAyLCAxLCAwLCAwLCAwKTsKKwlvbWFwX3NldF9kbWFfc3JjX3BhcmFtcyhjLT5kbWFfY2hhbm5lbCwgMCwgT01BUF9ETUFfQU1PREVfUE9TVF9JTkMsCisJCQkJZG1hX3NyYywgMCwgMCk7CisJb21hcF9zZXRfZG1hX2Rlc3RfcGFyYW1zKGMtPmRtYV9jaGFubmVsLCAwLCBPTUFQX0RNQV9BTU9ERV9QT1NUX0lOQywKKwkJCQkgZG1hX2RzdCwgMCwgMCk7CisKKwlJTklUX0NPTVBMRVRJT04oYy0+ZG1hX2RvbmUpOworCW9tYXBfc3RhcnRfZG1hKGMtPmRtYV9jaGFubmVsKTsKKworCXRpbWVvdXQgPSBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcygyMCk7CisJZG9uZSA9ICZjLT5kbWFfZG9uZS5kb25lOworCXdoaWxlICh0aW1lX2JlZm9yZShqaWZmaWVzLCB0aW1lb3V0KSkKKwkJaWYgKCpkb25lKQorCQkJYnJlYWs7CisKKwlkbWFfdW5tYXBfc2luZ2xlKCZjLT5wZGV2LT5kZXYsIGRtYV9kc3QsIGNvdW50LCBETUFfRlJPTV9ERVZJQ0UpOworCisJaWYgKCEqZG9uZSkgeworCQlkZXZfZXJyKCZjLT5wZGV2LT5kZXYsICJ0aW1lb3V0IHdhaXRpbmcgZm9yIERNQVxuIik7CisJCWdvdG8gb3V0X2NvcHk7CisJfQorCisJcmV0dXJuIDA7CisKK291dF9jb3B5OgorCW1lbWNweShidWYsIHRoaXMtPmJhc2UgKyBicmFtX29mZnNldCwgY291bnQpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG9tYXAzX29uZW5hbmRfd3JpdGVfYnVmZmVycmFtKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBpbnQgYXJlYSwKKwkJCQkJIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZmZlciwKKwkJCQkJIGludCBvZmZzZXQsIHNpemVfdCBjb3VudCkKK3sKKwlzdHJ1Y3Qgb21hcDJfb25lbmFuZCAqYyA9IGNvbnRhaW5lcl9vZihtdGQsIHN0cnVjdCBvbWFwMl9vbmVuYW5kLCBtdGQpOworCXN0cnVjdCBvbmVuYW5kX2NoaXAgKnRoaXMgPSBtdGQtPnByaXY7CisJZG1hX2FkZHJfdCBkbWFfc3JjLCBkbWFfZHN0OworCWludCBicmFtX29mZnNldDsKKwl1bnNpZ25lZCBsb25nIHRpbWVvdXQ7CisJdm9pZCAqYnVmID0gKHZvaWQgKilidWZmZXI7CisJdm9sYXRpbGUgdW5zaWduZWQgKmRvbmU7CisKKwlicmFtX29mZnNldCA9IG9tYXAyX29uZW5hbmRfYnVmZmVycmFtX29mZnNldChtdGQsIGFyZWEpICsgYXJlYSArIG9mZnNldDsKKwlpZiAoYnJhbV9vZmZzZXQgJiAzIHx8IChzaXplX3QpYnVmICYgMyB8fCBjb3VudCA8IDM4NCkKKwkJZ290byBvdXRfY29weTsKKworCS8qIHBhbmljX3dyaXRlKCkgbWF5IGJlIGluIGFuIGludGVycnVwdCBjb250ZXh0ICovCisJaWYgKGluX2ludGVycnVwdCgpKQorCQlnb3RvIG91dF9jb3B5OworCisJaWYgKGJ1ZiA+PSBoaWdoX21lbW9yeSkgeworCQlzdHJ1Y3QgcGFnZSAqcDE7CisKKwkJaWYgKCgoc2l6ZV90KWJ1ZiAmIFBBR0VfTUFTSykgIT0KKwkJICAgICgoc2l6ZV90KShidWYgKyBjb3VudCAtIDEpICYgUEFHRV9NQVNLKSkKKwkJCWdvdG8gb3V0X2NvcHk7CisJCXAxID0gdm1hbGxvY190b19wYWdlKGJ1Zik7CisJCWlmICghcDEpCisJCQlnb3RvIG91dF9jb3B5OworCQlidWYgPSBwYWdlX2FkZHJlc3MocDEpICsgKChzaXplX3QpYnVmICYgflBBR0VfTUFTSyk7CisJfQorCisJZG1hX3NyYyA9IGRtYV9tYXBfc2luZ2xlKCZjLT5wZGV2LT5kZXYsIGJ1ZiwgY291bnQsIERNQV9UT19ERVZJQ0UpOworCWRtYV9kc3QgPSBjLT5waHlzX2Jhc2UgKyBicmFtX29mZnNldDsKKwlpZiAoZG1hX21hcHBpbmdfZXJyb3IoJmMtPnBkZXYtPmRldiwgZG1hX2RzdCkpIHsKKwkJZGV2X2VycigmYy0+cGRldi0+ZGV2LAorCQkJIkNvdWxkbid0IERNQSBtYXAgYSAlZCBieXRlIGJ1ZmZlclxuIiwKKwkJCWNvdW50KTsKKwkJcmV0dXJuIC0xOworCX0KKworCW9tYXBfc2V0X2RtYV90cmFuc2Zlcl9wYXJhbXMoYy0+ZG1hX2NoYW5uZWwsIE9NQVBfRE1BX0RBVEFfVFlQRV9TMzIsCisJCQkJICAgICBjb3VudCA+PiAyLCAxLCAwLCAwLCAwKTsKKwlvbWFwX3NldF9kbWFfc3JjX3BhcmFtcyhjLT5kbWFfY2hhbm5lbCwgMCwgT01BUF9ETUFfQU1PREVfUE9TVF9JTkMsCisJCQkJZG1hX3NyYywgMCwgMCk7CisJb21hcF9zZXRfZG1hX2Rlc3RfcGFyYW1zKGMtPmRtYV9jaGFubmVsLCAwLCBPTUFQX0RNQV9BTU9ERV9QT1NUX0lOQywKKwkJCQkgZG1hX2RzdCwgMCwgMCk7CisKKwlJTklUX0NPTVBMRVRJT04oYy0+ZG1hX2RvbmUpOworCW9tYXBfc3RhcnRfZG1hKGMtPmRtYV9jaGFubmVsKTsKKworCXRpbWVvdXQgPSBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcygyMCk7CisJZG9uZSA9ICZjLT5kbWFfZG9uZS5kb25lOworCXdoaWxlICh0aW1lX2JlZm9yZShqaWZmaWVzLCB0aW1lb3V0KSkKKwkJaWYgKCpkb25lKQorCQkJYnJlYWs7CisKKwlkbWFfdW5tYXBfc2luZ2xlKCZjLT5wZGV2LT5kZXYsIGRtYV9kc3QsIGNvdW50LCBETUFfVE9fREVWSUNFKTsKKworCWlmICghKmRvbmUpIHsKKwkJZGV2X2VycigmYy0+cGRldi0+ZGV2LCAidGltZW91dCB3YWl0aW5nIGZvciBETUFcbiIpOworCQlnb3RvIG91dF9jb3B5OworCX0KKworCXJldHVybiAwOworCitvdXRfY29weToKKwltZW1jcHkodGhpcy0+YmFzZSArIGJyYW1fb2Zmc2V0LCBidWYsIGNvdW50KTsKKwlyZXR1cm4gMDsKK30KKworI2Vsc2UKKworaW50IG9tYXAzX29uZW5hbmRfcmVhZF9idWZmZXJyYW0oc3RydWN0IG10ZF9pbmZvICptdGQsIGludCBhcmVhLAorCQkJCSB1bnNpZ25lZCBjaGFyICpidWZmZXIsIGludCBvZmZzZXQsCisJCQkJIHNpemVfdCBjb3VudCk7CisKK2ludCBvbWFwM19vbmVuYW5kX3dyaXRlX2J1ZmZlcnJhbShzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgaW50IGFyZWEsCisJCQkJICBjb25zdCB1bnNpZ25lZCBjaGFyICpidWZmZXIsCisJCQkJICBpbnQgb2Zmc2V0LCBzaXplX3QgY291bnQpOworCisjZW5kaWYKKworI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDIpIHx8IGRlZmluZWQoTVVMVElfT01BUDIpCisKK3N0YXRpYyBpbnQgb21hcDJfb25lbmFuZF9yZWFkX2J1ZmZlcnJhbShzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgaW50IGFyZWEsCisJCQkJCXVuc2lnbmVkIGNoYXIgKmJ1ZmZlciwgaW50IG9mZnNldCwKKwkJCQkJc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCBvbWFwMl9vbmVuYW5kICpjID0gY29udGFpbmVyX29mKG10ZCwgc3RydWN0IG9tYXAyX29uZW5hbmQsIG10ZCk7CisJc3RydWN0IG9uZW5hbmRfY2hpcCAqdGhpcyA9IG10ZC0+cHJpdjsKKwlkbWFfYWRkcl90IGRtYV9zcmMsIGRtYV9kc3Q7CisJaW50IGJyYW1fb2Zmc2V0OworCisJYnJhbV9vZmZzZXQgPSBvbWFwMl9vbmVuYW5kX2J1ZmZlcnJhbV9vZmZzZXQobXRkLCBhcmVhKSArIGFyZWEgKyBvZmZzZXQ7CisJLyogRE1BIGlzIG5vdCB1c2VkLiAgUmV2aXNpdCBQTSByZXF1aXJlbWVudHMgYmVmb3JlIGVuYWJsaW5nIGl0LiAqLworCWlmICgxIHx8IChjLT5kbWFfY2hhbm5lbCA8IDApIHx8CisJICAgICgodm9pZCAqKSBidWZmZXIgPj0gKHZvaWQgKikgaGlnaF9tZW1vcnkpIHx8IChicmFtX29mZnNldCAmIDMpIHx8CisJICAgICgoKHVuc2lnbmVkIGludCkgYnVmZmVyKSAmIDMpIHx8IChjb3VudCA8IDEwMjQpIHx8IChjb3VudCAmIDMpKSB7CisJCW1lbWNweShidWZmZXIsIChfX2ZvcmNlIHZvaWQgKikodGhpcy0+YmFzZSArIGJyYW1fb2Zmc2V0KSwKKwkJICAgICAgIGNvdW50KTsKKwkJcmV0dXJuIDA7CisJfQorCisJZG1hX3NyYyA9IGMtPnBoeXNfYmFzZSArIGJyYW1fb2Zmc2V0OworCWRtYV9kc3QgPSBkbWFfbWFwX3NpbmdsZSgmYy0+cGRldi0+ZGV2LCBidWZmZXIsIGNvdW50LAorCQkJCSBETUFfRlJPTV9ERVZJQ0UpOworCWlmIChkbWFfbWFwcGluZ19lcnJvcigmYy0+cGRldi0+ZGV2LCBkbWFfZHN0KSkgeworCQlkZXZfZXJyKCZjLT5wZGV2LT5kZXYsCisJCQkiQ291bGRuJ3QgRE1BIG1hcCBhICVkIGJ5dGUgYnVmZmVyXG4iLAorCQkJY291bnQpOworCQlyZXR1cm4gLTE7CisJfQorCisJb21hcF9zZXRfZG1hX3RyYW5zZmVyX3BhcmFtcyhjLT5kbWFfY2hhbm5lbCwgT01BUF9ETUFfREFUQV9UWVBFX1MzMiwKKwkJCQkgICAgIGNvdW50IC8gNCwgMSwgMCwgMCwgMCk7CisJb21hcF9zZXRfZG1hX3NyY19wYXJhbXMoYy0+ZG1hX2NoYW5uZWwsIDAsIE9NQVBfRE1BX0FNT0RFX1BPU1RfSU5DLAorCQkJCWRtYV9zcmMsIDAsIDApOworCW9tYXBfc2V0X2RtYV9kZXN0X3BhcmFtcyhjLT5kbWFfY2hhbm5lbCwgMCwgT01BUF9ETUFfQU1PREVfUE9TVF9JTkMsCisJCQkJIGRtYV9kc3QsIDAsIDApOworCisJSU5JVF9DT01QTEVUSU9OKGMtPmRtYV9kb25lKTsKKwlvbWFwX3N0YXJ0X2RtYShjLT5kbWFfY2hhbm5lbCk7CisJd2FpdF9mb3JfY29tcGxldGlvbigmYy0+ZG1hX2RvbmUpOworCisJZG1hX3VubWFwX3NpbmdsZSgmYy0+cGRldi0+ZGV2LCBkbWFfZHN0LCBjb3VudCwgRE1BX0ZST01fREVWSUNFKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG9tYXAyX29uZW5hbmRfd3JpdGVfYnVmZmVycmFtKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBpbnQgYXJlYSwKKwkJCQkJIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZmZlciwKKwkJCQkJIGludCBvZmZzZXQsIHNpemVfdCBjb3VudCkKK3sKKwlzdHJ1Y3Qgb21hcDJfb25lbmFuZCAqYyA9IGNvbnRhaW5lcl9vZihtdGQsIHN0cnVjdCBvbWFwMl9vbmVuYW5kLCBtdGQpOworCXN0cnVjdCBvbmVuYW5kX2NoaXAgKnRoaXMgPSBtdGQtPnByaXY7CisJZG1hX2FkZHJfdCBkbWFfc3JjLCBkbWFfZHN0OworCWludCBicmFtX29mZnNldDsKKworCWJyYW1fb2Zmc2V0ID0gb21hcDJfb25lbmFuZF9idWZmZXJyYW1fb2Zmc2V0KG10ZCwgYXJlYSkgKyBhcmVhICsgb2Zmc2V0OworCS8qIERNQSBpcyBub3QgdXNlZC4gIFJldmlzaXQgUE0gcmVxdWlyZW1lbnRzIGJlZm9yZSBlbmFibGluZyBpdC4gKi8KKwlpZiAoMSB8fCAoYy0+ZG1hX2NoYW5uZWwgPCAwKSB8fAorCSAgICAoKHZvaWQgKikgYnVmZmVyID49ICh2b2lkICopIGhpZ2hfbWVtb3J5KSB8fCAoYnJhbV9vZmZzZXQgJiAzKSB8fAorCSAgICAoKCh1bnNpZ25lZCBpbnQpIGJ1ZmZlcikgJiAzKSB8fCAoY291bnQgPCAxMDI0KSB8fCAoY291bnQgJiAzKSkgeworCQltZW1jcHkoKF9fZm9yY2Ugdm9pZCAqKSh0aGlzLT5iYXNlICsgYnJhbV9vZmZzZXQpLCBidWZmZXIsCisJCSAgICAgICBjb3VudCk7CisJCXJldHVybiAwOworCX0KKworCWRtYV9zcmMgPSBkbWFfbWFwX3NpbmdsZSgmYy0+cGRldi0+ZGV2LCAodm9pZCAqKSBidWZmZXIsIGNvdW50LAorCQkJCSBETUFfVE9fREVWSUNFKTsKKwlkbWFfZHN0ID0gYy0+cGh5c19iYXNlICsgYnJhbV9vZmZzZXQ7CisJaWYgKGRtYV9tYXBwaW5nX2Vycm9yKCZjLT5wZGV2LT5kZXYsIGRtYV9kc3QpKSB7CisJCWRldl9lcnIoJmMtPnBkZXYtPmRldiwKKwkJCSJDb3VsZG4ndCBETUEgbWFwIGEgJWQgYnl0ZSBidWZmZXJcbiIsCisJCQljb3VudCk7CisJCXJldHVybiAtMTsKKwl9CisKKwlvbWFwX3NldF9kbWFfdHJhbnNmZXJfcGFyYW1zKGMtPmRtYV9jaGFubmVsLCBPTUFQX0RNQV9EQVRBX1RZUEVfUzE2LAorCQkJCSAgICAgY291bnQgLyAyLCAxLCAwLCAwLCAwKTsKKwlvbWFwX3NldF9kbWFfc3JjX3BhcmFtcyhjLT5kbWFfY2hhbm5lbCwgMCwgT01BUF9ETUFfQU1PREVfUE9TVF9JTkMsCisJCQkJZG1hX3NyYywgMCwgMCk7CisJb21hcF9zZXRfZG1hX2Rlc3RfcGFyYW1zKGMtPmRtYV9jaGFubmVsLCAwLCBPTUFQX0RNQV9BTU9ERV9QT1NUX0lOQywKKwkJCQkgZG1hX2RzdCwgMCwgMCk7CisKKwlJTklUX0NPTVBMRVRJT04oYy0+ZG1hX2RvbmUpOworCW9tYXBfc3RhcnRfZG1hKGMtPmRtYV9jaGFubmVsKTsKKwl3YWl0X2Zvcl9jb21wbGV0aW9uKCZjLT5kbWFfZG9uZSk7CisKKwlkbWFfdW5tYXBfc2luZ2xlKCZjLT5wZGV2LT5kZXYsIGRtYV9kc3QsIGNvdW50LCBETUFfVE9fREVWSUNFKTsKKworCXJldHVybiAwOworfQorCisjZWxzZQorCitpbnQgb21hcDJfb25lbmFuZF9yZWFkX2J1ZmZlcnJhbShzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgaW50IGFyZWEsCisJCQkJIHVuc2lnbmVkIGNoYXIgKmJ1ZmZlciwgaW50IG9mZnNldCwKKwkJCQkgc2l6ZV90IGNvdW50KTsKKworaW50IG9tYXAyX29uZW5hbmRfd3JpdGVfYnVmZmVycmFtKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBpbnQgYXJlYSwKKwkJCQkgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZmZlciwKKwkJCQkgIGludCBvZmZzZXQsIHNpemVfdCBjb3VudCk7CisKKyNlbmRpZgorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBvbWFwMl9vbmVuYW5kX2RyaXZlcjsKKworc3RhdGljIGludCBfX2FkanVzdF90aW1pbmcoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkYXRhKQoreworCWludCByZXQgPSAwOworCXN0cnVjdCBvbWFwMl9vbmVuYW5kICpjOworCisJYyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCisJQlVHX09OKGMtPnNldHVwID09IE5VTEwpOworCisJLyogRE1BIGlzIG5vdCBpbiB1c2Ugc28gdGhpcyBpcyBhbGwgdGhhdCBpcyBuZWVkZWQgKi8KKwkvKiBSZXZpc2l0IGZvciBPTUFQMyEgKi8KKwlyZXQgPSBjLT5zZXR1cChjLT5vbmVuYW5kLmJhc2UsIGMtPmZyZXEpOworCisJcmV0dXJuIHJldDsKK30KKworaW50IG9tYXAyX29uZW5hbmRfcmVwaGFzZSh2b2lkKQoreworCXJldHVybiBkcml2ZXJfZm9yX2VhY2hfZGV2aWNlKCZvbWFwMl9vbmVuYW5kX2RyaXZlci5kcml2ZXIsIE5VTEwsCisJCQkJICAgICAgTlVMTCwgX19hZGp1c3RfdGltaW5nKTsKK30KKworc3RhdGljIHZvaWQgX19kZXZleGl0IG9tYXAyX29uZW5hbmRfc2h1dGRvd24oc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3Qgb21hcDJfb25lbmFuZCAqYyA9IGRldl9nZXRfZHJ2ZGF0YSgmcGRldi0+ZGV2KTsKKworCS8qIFdpdGggY2VydGFpbiBjb250ZW50IGluIHRoZSBidWZmZXIgUkFNLCB0aGUgT01BUCBib290IFJPTSBjb2RlCisJICogY2FuIHJlY29nbml6ZSB0aGUgZmxhc2ggY2hpcCBpbmNvcnJlY3RseS4gWmVybyBpdCBvdXQgYmVmb3JlCisJICogc29mdCByZXNldC4KKwkgKi8KKwltZW1zZXQoKF9fZm9yY2Ugdm9pZCAqKWMtPm9uZW5hbmQuYmFzZSwgMCwgT05FTkFORF9CVUZSQU1fU0laRSk7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IG9tYXAyX29uZW5hbmRfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3Qgb21hcF9vbmVuYW5kX3BsYXRmb3JtX2RhdGEgKnBkYXRhOworCXN0cnVjdCBvbWFwMl9vbmVuYW5kICpjOworCWludCByOworCisJcGRhdGEgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKKwlpZiAocGRhdGEgPT0gTlVMTCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJwbGF0Zm9ybSBkYXRhIG1pc3NpbmdcbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwljID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IG9tYXAyX29uZW5hbmQpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWMpCisJCXJldHVybiAtRU5PTUVNOworCisJaW5pdF9jb21wbGV0aW9uKCZjLT5pcnFfZG9uZSk7CisJaW5pdF9jb21wbGV0aW9uKCZjLT5kbWFfZG9uZSk7CisJYy0+Z3BtY19jcyA9IHBkYXRhLT5jczsKKwljLT5ncGlvX2lycSA9IHBkYXRhLT5ncGlvX2lycTsKKwljLT5kbWFfY2hhbm5lbCA9IHBkYXRhLT5kbWFfY2hhbm5lbDsKKwlpZiAoYy0+ZG1hX2NoYW5uZWwgPCAwKSB7CisJCS8qIGlmIC0xLCBkb24ndCB1c2UgRE1BICovCisJCWMtPmdwaW9faXJxID0gMDsKKwl9CisKKwlyID0gZ3BtY19jc19yZXF1ZXN0KGMtPmdwbWNfY3MsIE9ORU5BTkRfSU9fU0laRSwgJmMtPnBoeXNfYmFzZSk7CisJaWYgKHIgPCAwKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIkNhbm5vdCByZXF1ZXN0IEdQTUMgQ1NcbiIpOworCQlnb3RvIGVycl9rZnJlZTsKKwl9CisKKwlpZiAocmVxdWVzdF9tZW1fcmVnaW9uKGMtPnBoeXNfYmFzZSwgT05FTkFORF9JT19TSVpFLAorCQkJICAgICAgIHBkZXYtPmRldi5kcml2ZXItPm5hbWUpID09IE5VTEwpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiQ2Fubm90IHJlc2VydmUgbWVtb3J5IHJlZ2lvbiBhdCAweCUwOGx4LCAiCisJCQkic2l6ZTogMHgleFxuIiwJYy0+cGh5c19iYXNlLCBPTkVOQU5EX0lPX1NJWkUpOworCQlyID0gLUVCVVNZOworCQlnb3RvIGVycl9mcmVlX2NzOworCX0KKwljLT5vbmVuYW5kLmJhc2UgPSBpb3JlbWFwKGMtPnBoeXNfYmFzZSwgT05FTkFORF9JT19TSVpFKTsKKwlpZiAoYy0+b25lbmFuZC5iYXNlID09IE5VTEwpIHsKKwkJciA9IC1FTk9NRU07CisJCWdvdG8gZXJyX3JlbGVhc2VfbWVtX3JlZ2lvbjsKKwl9CisKKwlpZiAocGRhdGEtPm9uZW5hbmRfc2V0dXAgIT0gTlVMTCkgeworCQlyID0gcGRhdGEtPm9uZW5hbmRfc2V0dXAoYy0+b25lbmFuZC5iYXNlLCBjLT5mcmVxKTsKKwkJaWYgKHIgPCAwKSB7CisJCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJPbmVuYW5kIHBsYXRmb3JtIHNldHVwIGZhaWxlZDogIgorCQkJCSIlZFxuIiwgcik7CisJCQlnb3RvIGVycl9pb3VubWFwOworCQl9CisJCWMtPnNldHVwID0gcGRhdGEtPm9uZW5hbmRfc2V0dXA7CisJfQorCisJaWYgKGMtPmdwaW9faXJxKSB7CisJCWlmICgociA9IG9tYXBfcmVxdWVzdF9ncGlvKGMtPmdwaW9faXJxKSkgPCAwKSB7CisJCQlkZXZfZXJyKCZwZGV2LT5kZXYsICAiRmFpbGVkIHRvIHJlcXVlc3QgR1BJTyVkIGZvciAiCisJCQkJIk9uZU5BTkRcbiIsIGMtPmdwaW9faXJxKTsKKwkJCWdvdG8gZXJyX2lvdW5tYXA7CisJfQorCW9tYXBfc2V0X2dwaW9fZGlyZWN0aW9uKGMtPmdwaW9faXJxLCAxKTsKKworCWlmICgociA9IHJlcXVlc3RfaXJxKE9NQVBfR1BJT19JUlEoYy0+Z3Bpb19pcnEpLAorCQkJICAgICBvbWFwMl9vbmVuYW5kX2ludGVycnVwdCwgSVJRRl9UUklHR0VSX1JJU0lORywKKwkJCSAgICAgcGRldi0+ZGV2LmRyaXZlci0+bmFtZSwgYykpIDwgMCkKKwkJZ290byBlcnJfcmVsZWFzZV9ncGlvOworCX0KKworCWlmIChjLT5kbWFfY2hhbm5lbCA+PSAwKSB7CisJCXIgPSBvbWFwX3JlcXVlc3RfZG1hKDAsIHBkZXYtPmRldi5kcml2ZXItPm5hbWUsCisJCQkJICAgICBvbWFwMl9vbmVuYW5kX2RtYV9jYiwgKHZvaWQgKikgYywKKwkJCQkgICAgICZjLT5kbWFfY2hhbm5lbCk7CisJCWlmIChyID09IDApIHsKKwkJCW9tYXBfc2V0X2RtYV93cml0ZV9tb2RlKGMtPmRtYV9jaGFubmVsLAorCQkJCQkJT01BUF9ETUFfV1JJVEVfTk9OX1BPU1RFRCk7CisJCQlvbWFwX3NldF9kbWFfc3JjX2RhdGFfcGFjayhjLT5kbWFfY2hhbm5lbCwgMSk7CisJCQlvbWFwX3NldF9kbWFfc3JjX2J1cnN0X21vZGUoYy0+ZG1hX2NoYW5uZWwsCisJCQkJCQkgICAgT01BUF9ETUFfREFUQV9CVVJTVF84KTsKKwkJCW9tYXBfc2V0X2RtYV9kZXN0X2RhdGFfcGFjayhjLT5kbWFfY2hhbm5lbCwgMSk7CisJCQlvbWFwX3NldF9kbWFfZGVzdF9idXJzdF9tb2RlKGMtPmRtYV9jaGFubmVsLAorCQkJCQkJICAgICBPTUFQX0RNQV9EQVRBX0JVUlNUXzgpOworCQl9IGVsc2UgeworCQkJZGV2X2luZm8oJnBkZXYtPmRldiwKKwkJCQkgImZhaWxlZCB0byBhbGxvY2F0ZSBETUEgZm9yIE9uZU5BTkQsICIKKwkJCQkgInVzaW5nIFBJTyBpbnN0ZWFkXG4iKTsKKwkJCWMtPmRtYV9jaGFubmVsID0gLTE7CisJCX0KKwl9CisKKwlkZXZfaW5mbygmcGRldi0+ZGV2LCAiaW5pdGlhbGl6aW5nIG9uIENTJWQsIHBoeXMgYmFzZSAweCUwOGx4LCB2aXJ0dWFsICIKKwkJICJiYXNlICVwXG4iLCBjLT5ncG1jX2NzLCBjLT5waHlzX2Jhc2UsCisJCSBjLT5vbmVuYW5kLmJhc2UpOworCisJYy0+cGRldiA9IHBkZXY7CisJYy0+bXRkLm5hbWUgPSBwZGV2LT5kZXYuYnVzX2lkOworCWMtPm10ZC5wcml2ID0gJmMtPm9uZW5hbmQ7CisJYy0+bXRkLm93bmVyID0gVEhJU19NT0RVTEU7CisKKwlpZiAoYy0+ZG1hX2NoYW5uZWwgPj0gMCkgeworCQlzdHJ1Y3Qgb25lbmFuZF9jaGlwICp0aGlzID0gJmMtPm9uZW5hbmQ7CisKKwkJdGhpcy0+d2FpdCA9IG9tYXAyX29uZW5hbmRfd2FpdDsKKwkJaWYgKGNwdV9pc19vbWFwMzR4eCgpKSB7CisJCQl0aGlzLT5yZWFkX2J1ZmZlcnJhbSA9IG9tYXAzX29uZW5hbmRfcmVhZF9idWZmZXJyYW07CisJCQl0aGlzLT53cml0ZV9idWZmZXJyYW0gPSBvbWFwM19vbmVuYW5kX3dyaXRlX2J1ZmZlcnJhbTsKKwkJfSBlbHNlIHsKKwkJCXRoaXMtPnJlYWRfYnVmZmVycmFtID0gb21hcDJfb25lbmFuZF9yZWFkX2J1ZmZlcnJhbTsKKwkJCXRoaXMtPndyaXRlX2J1ZmZlcnJhbSA9IG9tYXAyX29uZW5hbmRfd3JpdGVfYnVmZmVycmFtOworCQl9CisJfQorCisJaWYgKChyID0gb25lbmFuZF9zY2FuKCZjLT5tdGQsIDEpKSA8IDApCisJCWdvdG8gZXJyX3JlbGVhc2VfZG1hOworCisJc3dpdGNoICgoYy0+b25lbmFuZC52ZXJzaW9uX2lkID4+IDQpICYgMHhmKSB7CisJY2FzZSAwOgorCQljLT5mcmVxID0gNDA7CisJCWJyZWFrOworCWNhc2UgMToKKwkJYy0+ZnJlcSA9IDU0OworCQlicmVhazsKKwljYXNlIDI6CisJCWMtPmZyZXEgPSA2NjsKKwkJYnJlYWs7CisJY2FzZSAzOgorCQljLT5mcmVxID0gODM7CisJCWJyZWFrOworCX0KKworI2lmZGVmIENPTkZJR19NVERfUEFSVElUSU9OUworCWlmIChwZGF0YS0+cGFydHMgIT0gTlVMTCkKKwkJciA9IGFkZF9tdGRfcGFydGl0aW9ucygmYy0+bXRkLCBwZGF0YS0+cGFydHMsCisJCQkJICAgICAgIHBkYXRhLT5ucl9wYXJ0cyk7CisJZWxzZQorI2VuZGlmCisJCXIgPSBhZGRfbXRkX2RldmljZSgmYy0+bXRkKTsKKwlpZiAociA8IDApCisJCWdvdG8gZXJyX3JlbGVhc2Vfb25lbmFuZDsKKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGMpOworCisJcmV0dXJuIDA7CisKK2Vycl9yZWxlYXNlX29uZW5hbmQ6CisJb25lbmFuZF9yZWxlYXNlKCZjLT5tdGQpOworZXJyX3JlbGVhc2VfZG1hOgorCWlmIChjLT5kbWFfY2hhbm5lbCAhPSAtMSkKKwkJb21hcF9mcmVlX2RtYShjLT5kbWFfY2hhbm5lbCk7CisJaWYgKGMtPmdwaW9faXJxKQorCQlmcmVlX2lycShPTUFQX0dQSU9fSVJRKGMtPmdwaW9faXJxKSwgYyk7CitlcnJfcmVsZWFzZV9ncGlvOgorCWlmIChjLT5ncGlvX2lycSkKKwkJb21hcF9mcmVlX2dwaW8oYy0+Z3Bpb19pcnEpOworZXJyX2lvdW5tYXA6CisJaW91bm1hcChjLT5vbmVuYW5kLmJhc2UpOworZXJyX3JlbGVhc2VfbWVtX3JlZ2lvbjoKKwlyZWxlYXNlX21lbV9yZWdpb24oYy0+cGh5c19iYXNlLCBPTkVOQU5EX0lPX1NJWkUpOworZXJyX2ZyZWVfY3M6CisJZ3BtY19jc19mcmVlKGMtPmdwbWNfY3MpOworZXJyX2tmcmVlOgorCWtmcmVlKGMpOworCisJcmV0dXJuIHI7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZleGl0IG9tYXAyX29uZW5hbmRfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IG9tYXAyX29uZW5hbmQgKmMgPSBkZXZfZ2V0X2RydmRhdGEoJnBkZXYtPmRldik7CisKKwlCVUdfT04oYyA9PSBOVUxMKTsKKworI2lmZGVmIENPTkZJR19NVERfUEFSVElUSU9OUworCWlmIChjLT5wYXJ0cykKKwkJZGVsX210ZF9wYXJ0aXRpb25zKCZjLT5tdGQpOworCWVsc2UKKwkJZGVsX210ZF9kZXZpY2UoJmMtPm10ZCk7CisjZWxzZQorCWRlbF9tdGRfZGV2aWNlKCZjLT5tdGQpOworI2VuZGlmCisKKwlvbmVuYW5kX3JlbGVhc2UoJmMtPm10ZCk7CisJaWYgKGMtPmRtYV9jaGFubmVsICE9IC0xKQorCQlvbWFwX2ZyZWVfZG1hKGMtPmRtYV9jaGFubmVsKTsKKwlvbWFwMl9vbmVuYW5kX3NodXRkb3duKHBkZXYpOworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOworCWlmIChjLT5ncGlvX2lycSkgeworCQlmcmVlX2lycShPTUFQX0dQSU9fSVJRKGMtPmdwaW9faXJxKSwgYyk7CisJCW9tYXBfZnJlZV9ncGlvKGMtPmdwaW9faXJxKTsKKwl9CisJaW91bm1hcChjLT5vbmVuYW5kLmJhc2UpOworCXJlbGVhc2VfbWVtX3JlZ2lvbihjLT5waHlzX2Jhc2UsIE9ORU5BTkRfSU9fU0laRSk7CisJa2ZyZWUoYyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgb21hcDJfb25lbmFuZF9kcml2ZXIgPSB7CisJLnByb2JlCQk9IG9tYXAyX29uZW5hbmRfcHJvYmUsCisJLnJlbW92ZQkJPSBvbWFwMl9vbmVuYW5kX3JlbW92ZSwKKwkuc2h1dGRvd24JPSBvbWFwMl9vbmVuYW5kX3NodXRkb3duLAorCS5kcml2ZXIJCT0geworCQkubmFtZQk9IERSSVZFUl9OQU1FLAorCQkub3duZXIgID0gVEhJU19NT0RVTEUsCisJfSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IG9tYXAyX29uZW5hbmRfaW5pdCh2b2lkKQoreworCXByaW50ayhLRVJOX0lORk8gIk9uZU5BTkQgZHJpdmVyIGluaXRpYWxpemluZ1xuIik7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3Rlcigmb21hcDJfb25lbmFuZF9kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgb21hcDJfb25lbmFuZF9leGl0KHZvaWQpCit7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJm9tYXAyX29uZW5hbmRfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQob21hcDJfb25lbmFuZF9pbml0KTsKK21vZHVsZV9leGl0KG9tYXAyX29uZW5hbmRfZXhpdCk7CisKK01PRFVMRV9BTElBUyhEUklWRVJfTkFNRSk7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQVVUSE9SKCJKYXJra28gTGF2aW5lbiA8amFya2tvLmxhdmluZW5Abm9raWEuY29tPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJHbHVlIGxheWVyIGZvciBPbmVOQU5EIGZsYXNoIG9uIE9NQVAyIC8gT01BUDMiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL29uZW5hbmQvb25lbmFuZF9iYXNlLmMgYi9kcml2ZXJzL210ZC9vbmVuYW5kL29uZW5hbmRfYmFzZS5jCmluZGV4IDkyNmNmM2EuLjkwZWQzMTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL29uZW5hbmQvb25lbmFuZF9iYXNlLmMKKysrIGIvZHJpdmVycy9tdGQvb25lbmFuZC9vbmVuYW5kX2Jhc2UuYwpAQCAtMTc5NCw3ICsxNzk0LDcgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JaW5zdHItPmZhaWxfYWRkciA9IDB4ZmZmZmZmZmY7CisJaW5zdHItPmZhaWxfYWRkciA9IE1URF9GQUlMX0FERFJfVU5LTk9XTjsKIAogCS8qIEdyYWIgdGhlIGxvY2sgYW5kIHNlZSBpZiB0aGUgZGV2aWNlIGlzIGF2YWlsYWJsZSAqLwogCW9uZW5hbmRfZ2V0X2RldmljZShtdGQsIEZMX0VSQVNJTkcpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvc3NmZGMuYyBiL2RyaXZlcnMvbXRkL3NzZmRjLmMKaW5kZXggYTVmM2Q2MC4uMzNhNWQ2ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvc3NmZGMuYworKysgYi9kcml2ZXJzL210ZC9zc2ZkYy5jCkBAIC0zMjEsOCArMzIxLDcgQEAKIAlERUJVRyhNVERfREVCVUdfTEVWRUwxLAogCQkiU1NGRENfUk86IGNpc19ibG9jaz0lZCxlcmFzZV9zaXplPSVkLG1hcF9sZW49JWQsbl96b25lcz0lZFxuIiwKIAkJc3NmZGMtPmNpc19ibG9jaywgc3NmZGMtPmVyYXNlX3NpemUsIHNzZmRjLT5tYXBfbGVuLAotCQkoc3NmZGMtPm1hcF9sZW4gKyBNQVhfUEhZU19CTEtfUEVSX1pPTkUgLSAxKSAvCi0JCU1BWF9QSFlTX0JMS19QRVJfWk9ORSk7CisJCURJVl9ST1VORF9VUChzc2ZkYy0+bWFwX2xlbiwgTUFYX1BIWVNfQkxLX1BFUl9aT05FKSk7CiAKIAkvKiBTZXQgZ2VvbWV0cnkgKi8KIAlzc2ZkYy0+aGVhZHMgPSAxNjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL3ViaS9jZGV2LmMgYi9kcml2ZXJzL210ZC91YmkvY2Rldi5jCmluZGV4IDAzYzc1OWIuLmIzMGEwYjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL3ViaS9jZGV2LmMKKysrIGIvZHJpdmVycy9tdGQvdWJpL2NkZXYuYwpAQCAtMTA0LDEyICsxMDQsOSBAQAogCXN0cnVjdCB1Ymlfdm9sdW1lX2Rlc2MgKmRlc2M7CiAJaW50IHZvbF9pZCA9IGltaW5vcihpbm9kZSkgLSAxLCBtb2RlLCB1YmlfbnVtOwogCi0JbG9ja19rZXJuZWwoKTsKIAl1YmlfbnVtID0gdWJpX21ham9yMm51bShpbWFqb3IoaW5vZGUpKTsKLQlpZiAodWJpX251bSA8IDApIHsKLQkJdW5sb2NrX2tlcm5lbCgpOworCWlmICh1YmlfbnVtIDwgMCkKIAkJcmV0dXJuIHViaV9udW07Ci0JfQogCiAJaWYgKGZpbGUtPmZfbW9kZSAmIEZNT0RFX1dSSVRFKQogCQltb2RlID0gVUJJX1JFQURXUklURTsKQEAgLTExOSw3ICsxMTYsNiBAQAogCWRiZ19nZW4oIm9wZW4gdm9sdW1lICVkLCBtb2RlICVkIiwgdm9sX2lkLCBtb2RlKTsKIAogCWRlc2MgPSB1Ymlfb3Blbl92b2x1bWUodWJpX251bSwgdm9sX2lkLCBtb2RlKTsKLQl1bmxvY2tfa2VybmVsKCk7CiAJaWYgKElTX0VSUihkZXNjKSkKIAkJcmV0dXJuIFBUUl9FUlIoZGVzYyk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL3ViaS9zY2FuLmMgYi9kcml2ZXJzL210ZC91Ymkvc2Nhbi5jCmluZGV4IDk2N2JiNDQuLjRmMmRhYTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL3ViaS9zY2FuLmMKKysrIGIvZHJpdmVycy9tdGQvdWJpL3NjYW4uYwpAQCAtMzg3LDcgKzM4Nyw3IEBACiAJCXBudW0sIHZvbF9pZCwgbG51bSwgZWMsIHNxbnVtLCBiaXRmbGlwcyk7CiAKIAlzdiA9IGFkZF92b2x1bWUoc2ksIHZvbF9pZCwgcG51bSwgdmlkX2hkcik7Ci0JaWYgKElTX0VSUihzdikgPCAwKQorCWlmIChJU19FUlIoc3YpKQogCQlyZXR1cm4gUFRSX0VSUihzdik7CiAKIAlpZiAoc2ktPm1heF9zcW51bSA8IHNxbnVtKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvdWJpL3Z0YmwuYyBiL2RyaXZlcnMvbXRkL3ViaS92dGJsLmMKaW5kZXggMjE3ZDBlMS4uMzMzYzg5NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvdWJpL3Z0YmwuYworKysgYi9kcml2ZXJzL210ZC91YmkvdnRibC5jCkBAIC0yNDQsOCArMjQ0LDggQEAKIAkJfQogCiAJCWlmIChyZXNlcnZlZF9wZWJzID4gdWJpLT5nb29kX3BlYl9jb3VudCkgewotCQkJZGJnX2VycigidG9vIGxhcmdlIHJlc2VydmVkX3BlYnMsIGdvb2QgUEVCcyAlZCIsCi0JCQkJdWJpLT5nb29kX3BlYl9jb3VudCk7CisJCQlkYmdfZXJyKCJ0b28gbGFyZ2UgcmVzZXJ2ZWRfcGVicyAlZCwgZ29vZCBQRUJzICVkIiwKKwkJCQlyZXNlcnZlZF9wZWJzLCB1YmktPmdvb2RfcGViX2NvdW50KTsKIAkJCWVyciA9IDk7CiAJCQlnb3RvIGJhZDsKIAkJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvM2M1MDEuYyBiL2RyaXZlcnMvbmV0LzNjNTAxLmMKaW5kZXggNWJhNGJhYi4uN2QxNWU3YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvM2M1MDEuYworKysgYi9kcml2ZXJzL25ldC8zYzUwMS5jCkBAIC0xNyw3ICsxNyw3IEBACiAJQW5uYXBvbGlzIE1EIDIxNDAzCiAKICAgICBGaXhlZCAoYWdhaW4hKSB0aGUgbWlzc2luZyBpbnRlcnJ1cHQgbG9ja2luZyBvbiBUWC9SWCBzaGlmdGluZy4KLQlBbGFuIENveCA8QWxhbi5Db3hAbGludXgub3JnPgorCUFsYW4gQ294IDxhbGFuQGx4b3JndWsudWt1dS5vcmcudWs+CiAKICAgICBSZW1vdmVkIGNhbGxzIHRvIGluaXRfZXRoZXJkZXYgc2luY2UgdGhleSBhcmUgbm8gbG9uZ2VyIG5lZWRlZCwgYW5kCiAgICAgY2xlYW5lZCB1cCBtb2R1bGFyaXphdGlvbiBqdXN0IGEgYml0LiBUaGUgZHJpdmVyIHN0aWxsIGFsbG93cyBvbmx5CkBAIC0yOSwxNiArMjksMTYgQEAKICAgICB0aGUgYm9hcmQuIE5vdyBnZXR0aW5nIDE1MEsvc2Vjb25kIEZUUCB3aXRoIGEgM2M1MDEgY2FyZC4gU3RpbGwgcGxheWluZwogICAgIHdpdGggYSBUWC1UWCBvcHRpbWlzYXRpb24gdG8gc2VlIGlmIHdlIGNhbiB0b3VjaCAxODAtMjAwSy9zZWNvbmQgYXMgc2VlbXMKICAgICB0aGVvcmV0aWNhbGx5IG1heGltdW0uCi0JCTE5OTUwNDAyIEFsYW4gQ294IDxBbGFuLkNveEBsaW51eC5vcmc+CisJCTE5OTUwNDAyIEFsYW4gQ294IDxhbGFuQGx4b3JndWsudWt1dS5vcmcudWs+CiAKICAgICBDbGVhbmVkIHVwIGZvciAyLjMueCBiZWNhdXNlIHdlIGJyb2tlIFNNUCBub3cuCi0JCTIwMDAwMjA4IEFsYW4gQ294IDxhbGFuQHJlZGhhdC5jb20+CisJCTIwMDAwMjA4IEFsYW4gQ294IDxhbGFuQGx4b3JndWsudWt1dS5vcmcudWs+CiAKICAgICBDaGVjayB1cCBwYXNzIGZvciAyLjUuIE5vdGhpbmcgc2lnbmlmaWNhbnQgY2hhbmdlZAotCQkyMDAyMTAwOSBBbGFuIENveCA8YWxhbkByZWRoYXQuY29tPgorCQkyMDAyMTAwOSBBbGFuIENveCA8YWxhbkBseG9yZ3VrLnVrdXUub3JnLnVrPgogCiAgICAgRml4ZWQgemVybyBmaWxsIGNvcm5lciBjYXNlCi0JCTIwMDMwMTA0IEFsYW4gQ294IDxhbGFuQHJlZGhhdC5jb20+CisJCTIwMDMwMTA0IEFsYW4gQ294IDxhbGFuQGx4b3JndWsudWt1dS5vcmcudWs+CiAKIAogICAgRm9yIHRoZSBhdm9pZGFuY2Ugb2YgZG91YnQgdGhlICJwcmVmZXJyZWQgZm9ybSIgb2YgdGhpcyBjb2RlIGlzIG9uZSB3aGljaApAQCAtMTA0LDcgKzEwNCw3IEBACiAKIAogc3RhdGljIGNvbnN0IGNoYXIgdmVyc2lvbltdID0KLQlEUlZfTkFNRSAiLmM6ICIgRFJWX1ZFUlNJT04gIiBBbGFuIENveCAoYWxhbkByZWRoYXQuY29tKS5cbiI7CisJRFJWX05BTUUgIi5jOiAiIERSVl9WRVJTSU9OICIgQWxhbiBDb3ggKGFsYW5AbHhvcmd1ay51a3V1Lm9yZy51aykuXG4iOwogCiAvKgogICoJQnJhaW5kYW1hZ2UgcmVtYWluaW5nOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvM2M1MDkuYyBiL2RyaXZlcnMvbmV0LzNjNTA5LmMKaW5kZXggYjlkMDk3Yy4uM2E3YmM1MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvM2M1MDkuYworKysgYi9kcml2ZXJzL25ldC8zYzUwOS5jCkBAIC00MCw3ICs0MCw3IEBACiAJCXYxLjE0IDEwLzE1Lzk3IEF2b2lkZWQgd2FpdGluZy4uZGlzY2FyZCBtZXNzYWdlIGZvciBmYXN0IG1hY2hpbmVzIC1kamIKIAkJdjEuMTUgMS8zMS85OCBGYXN0ZXIgcmVjb3ZlcnkgZm9yIFR4IGVycm9ycy4gLWRqYgogCQl2MS4xNiAyLzMvOTggRGlmZmVyZW50IElEIHBvcnQgaGFuZGxpbmcgdG8gYXZvaWQgc291bmQgY2FyZHMuIC1kamIKLQkJdjEuMTggMTJNYXIyMDAxIEFuZHJldyBNb3J0b24gPGFuZHJld21AdW93LmVkdS5hdT4KKwkJdjEuMTggMTJNYXIyMDAxIEFuZHJldyBNb3J0b24KIAkJCS0gQXZvaWQgYm9ndXMgZGV0ZWN0IG9mIDNjNTkwJ3MgKEFuZHJ6ZWogS3J6eXN6dG9mb3dpY3opCiAJCQktIFJldmlld2VkIGFnYWluc3QgMS4xOCBmcm9tIHNjeWxkLmNvbQogCQl2MS4xOGEgMTdOb3YyMDAxIEplZmYgR2FyemlrIDxqZ2FyemlrQHBvYm94LmNvbT4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0LzNjNTE1LmMgYi9kcml2ZXJzL25ldC8zYzUxNS5jCmluZGV4IGU0ZTMyNDEuLmEwZjhiNmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0LzNjNTE1LmMKKysrIGIvZHJpdmVycy9uZXQvM2M1MTUuYwpAQCAtMTgsNyArMTgsNyBAQAogCiAJMjAwMS8xMS8xNyAtIEFkZGVkIGV0aHRvb2wgc3VwcG9ydCAoamdhcnppaykKIAotCTIwMDIvMTAvMjggLSBMb2NraW5nIHVwZGF0ZXMgZm9yIDIuNSAoYWxhbkByZWRoYXQuY29tKQorCTIwMDIvMTAvMjggLSBMb2NraW5nIHVwZGF0ZXMgZm9yIDIuNSAoYWxhbkBseG9yZ3VrLnVrdXUub3JnLnVrKQogCiAqLwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC8zYzU5eC5jIGIvZHJpdmVycy9uZXQvM2M1OXguYwppbmRleCA0OTFlZTE2Li45YmEyOTVkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC8zYzU5eC5jCisrKyBiL2RyaXZlcnMvbmV0LzNjNTl4LmMKQEAgLTkwLDcgKzkwLDcgQEAKICNpbmNsdWRlIDxsaW51eC9laXNhLmg+CiAjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CiAjaW5jbHVkZSA8bGludXgvamlmZmllcy5oPgotI2luY2x1ZGUgPGFzbS9pcnEuaD4JCQkvKiBGb3IgTlJfSVJRUyBvbmx5LiAqLworI2luY2x1ZGUgPGFzbS9pcnEuaD4JCQkvKiBGb3IgbnJfaXJxcyBvbmx5LiAqLwogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAKQEAgLTEyMjEsNyArMTIyMSw3IEBACiAJaWYgKHByaW50X2luZm8pCiAJCXByaW50aygiLCBJUlEgJWRcbiIsIGRldi0+aXJxKTsKIAkvKiBUZWxsIHRoZW0gYWJvdXQgYW4gaW52YWxpZCBJUlEuICovCi0JaWYgKGRldi0+aXJxIDw9IDAgfHwgZGV2LT5pcnEgPj0gTlJfSVJRUykKKwlpZiAoZGV2LT5pcnEgPD0gMCB8fCBkZXYtPmlycSA+PSBucl9pcnFzKQogCQlwcmludGsoS0VSTl9XQVJOSU5HICIgKioqIFdhcm5pbmc6IElSUSAlZCBpcyB1bmxpa2VseSB0byB3b3JrISAqKipcbiIsCiAJCQkgICBkZXYtPmlycSk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L0tjb25maWcgYi9kcml2ZXJzL25ldC9LY29uZmlnCmluZGV4IGU5ZDUyOTQuLmFkMzAxYWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L0tjb25maWcKKysrIGIvZHJpdmVycy9uZXQvS2NvbmZpZwpAQCAtMjQwMCw3ICsyNDAwLDcgQEAKIAkgIHdpbGwgYmUgY2FsbGVkIGVoZWEuCiAKIGNvbmZpZyBFTklDCi0JdHJpc3RhdGUgIkUsIHRoZSBDaXNjbyAxMEcgRXRoZXJuZXQgTklDIgorCXRyaXN0YXRlICJDaXNjbyAxMEcgRXRoZXJuZXQgTklDIHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBQQ0kgJiYgSU5FVAogCXNlbGVjdCBJTkVUX0xSTwogCWhlbHAKQEAgLTI0MTAsNyArMjQxMCw2IEBACiAJdHJpc3RhdGUgIkludGVsKFIpIDEwR2JFIFBDSSBFeHByZXNzIGFkYXB0ZXJzIHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBQQ0kgJiYgSU5FVAogCXNlbGVjdCBJTkVUX0xSTwotCXNlbGVjdCBJTlRFTF9JT0FURE1BCiAJLS0taGVscC0tLQogCSAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgSW50ZWwoUikgMTBHYkUgUENJIEV4cHJlc3MgZmFtaWx5IG9mCiAJICBhZGFwdGVycy4gIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIGhvdyB0byBpZGVudGlmeSB5b3VyIGFkYXB0ZXIsIGdvCkBAIC0yNDI2LDYgKzI0MjUsMTEgQEAKIAkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuIFRoZSBtb2R1bGUKIAkgIHdpbGwgYmUgY2FsbGVkIGl4Z2JlLgogCitjb25maWcgSVhHQkVfRENBCisJYm9vbAorCWRlZmF1bHQgeQorCWRlcGVuZHMgb24gSVhHQkUgJiYgRENBICYmICEoSVhHQkU9eSAmJiBEQ0E9bSkKKwogY29uZmlnIElYR0IKIAl0cmlzdGF0ZSAiSW50ZWwoUikgUFJPLzEwR2JFIHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBQQ0kKQEAgLTI0NjIsNyArMjQ2Niw2IEBACiAJc2VsZWN0IEZXX0xPQURFUgogCXNlbGVjdCBDUkMzMgogCXNlbGVjdCBJTkVUX0xSTwotCXNlbGVjdCBJTlRFTF9JT0FURE1BCiAJLS0taGVscC0tLQogCSAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgTXlyaWNvbSBNeXJpLTEwRyBEdWFsIFByb3RvY29sIGludGVyZmFjZSBpbgogCSAgRXRoZXJuZXQgbW9kZS4gSWYgdGhlIGVlcHJvbSBvbiB5b3VyIGJvYXJkIGlzIG5vdCByZWNlbnQgZW5vdWdoLApAQCAtMjQ3NCw2ICsyNDc3LDExIEBACiAJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiBUaGUgbW9kdWxlCiAJICB3aWxsIGJlIGNhbGxlZCBteXJpMTBnZS4KIAorY29uZmlnIE1ZUkkxMEdFX0RDQQorCWJvb2wKKwlkZWZhdWx0IHkKKwlkZXBlbmRzIG9uIE1ZUkkxMEdFICYmIERDQSAmJiAhKE1ZUkkxMEdFPXkgJiYgRENBPW0pCisKIGNvbmZpZyBORVRYRU5fTklDCiAJdHJpc3RhdGUgIk5ldFhlbiBNdWx0aSBwb3J0ICgxLzEwKSBHaWdhYml0IEV0aGVybmV0IE5JQyIKIAlkZXBlbmRzIG9uIFBDSQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYXBwbGV0YWxrL2NvcHMuYyBiL2RyaXZlcnMvbmV0L2FwcGxldGFsay9jb3BzLmMKaW5kZXggYTBiNGM4NS4uNzM1ZmM5NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYXBwbGV0YWxrL2NvcHMuYworKysgYi9kcml2ZXJzL25ldC9hcHBsZXRhbGsvY29wcy5jCkBAIC00LDcgKzQsNyBAQAogICogICAgICAtIEpheSBTY2h1bGlzdCA8anNjaGxzdEBzYW1iYS5vcmc+CiAgKgogICoJV2l0aCBtb3JlIHRoYW4gYSBsaXR0bGUgaGVscCBmcm9tOwotICoJLSBBbGFuIENveCA8QWxhbi5Db3hAbGludXgub3JnPiAKKyAqCS0gQWxhbiBDb3ggPGFsYW5AbHhvcmd1ay51a3V1Lm9yZy51az4KICAqCiAgKiAgICAgIERlcml2ZWQgZnJvbToKICAqICAgICAgLSBza2VsZXRvbi5jOiBBIG5ldHdvcmsgZHJpdmVyIG91dGxpbmUgZm9yIGxpbnV4LgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYXUxMDAwX2V0aC5jIGIvZHJpdmVycy9uZXQvYXUxMDAwX2V0aC5jCmluZGV4IDdiOTIyMDEuLjAxOWIxM2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2F1MTAwMF9ldGguYworKysgYi9kcml2ZXJzL25ldC9hdTEwMDBfZXRoLmMKQEAgLTk0LDggKzk0LDggQEAKIHN0YXRpYyB2b2lkIGF1MTAwMF90eF90aW1lb3V0KHN0cnVjdCBuZXRfZGV2aWNlICopOwogc3RhdGljIHZvaWQgc2V0X3J4X21vZGUoc3RydWN0IG5ldF9kZXZpY2UgKik7CiBzdGF0aWMgaW50IGF1MTAwMF9pb2N0bChzdHJ1Y3QgbmV0X2RldmljZSAqLCBzdHJ1Y3QgaWZyZXEgKiwgaW50KTsKLXN0YXRpYyBpbnQgbWRpb19yZWFkKHN0cnVjdCBuZXRfZGV2aWNlICosIGludCwgaW50KTsKLXN0YXRpYyB2b2lkIG1kaW9fd3JpdGUoc3RydWN0IG5ldF9kZXZpY2UgKiwgaW50LCBpbnQsIHUxNik7CitzdGF0aWMgaW50IGF1MTAwMF9tZGlvX3JlYWQoc3RydWN0IG5ldF9kZXZpY2UgKiwgaW50LCBpbnQpOworc3RhdGljIHZvaWQgYXUxMDAwX21kaW9fd3JpdGUoc3RydWN0IG5ldF9kZXZpY2UgKiwgaW50LCBpbnQsIHUxNik7CiBzdGF0aWMgdm9pZCBhdTEwMDBfYWRqdXN0X2xpbmsoc3RydWN0IG5ldF9kZXZpY2UgKik7CiBzdGF0aWMgdm9pZCBlbmFibGVfbWFjKHN0cnVjdCBuZXRfZGV2aWNlICosIGludCk7CiAKQEAgLTE5MSw3ICsxOTEsNyBAQAogLyoKICAqIE1JSSBvcGVyYXRpb25zCiAgKi8KLXN0YXRpYyBpbnQgbWRpb19yZWFkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBwaHlfYWRkciwgaW50IHJlZykKK3N0YXRpYyBpbnQgYXUxMDAwX21kaW9fcmVhZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgcGh5X2FkZHIsIGludCByZWcpCiB7CiAJc3RydWN0IGF1MTAwMF9wcml2YXRlICphdXAgPSAoc3RydWN0IGF1MTAwMF9wcml2YXRlICopIGRldi0+cHJpdjsKIAl2b2xhdGlsZSB1MzIgKmNvbnN0IG1paV9jb250cm9sX3JlZyA9ICZhdXAtPm1hYy0+bWlpX2NvbnRyb2w7CkBAIC0yMjUsNyArMjI1LDggQEAKIAlyZXR1cm4gKGludCkqbWlpX2RhdGFfcmVnOwogfQogCi1zdGF0aWMgdm9pZCBtZGlvX3dyaXRlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBwaHlfYWRkciwgaW50IHJlZywgdTE2IHZhbHVlKQorc3RhdGljIHZvaWQgYXUxMDAwX21kaW9fd3JpdGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IHBoeV9hZGRyLAorCQkJICAgICAgaW50IHJlZywgdTE2IHZhbHVlKQogewogCXN0cnVjdCBhdTEwMDBfcHJpdmF0ZSAqYXVwID0gKHN0cnVjdCBhdTEwMDBfcHJpdmF0ZSAqKSBkZXYtPnByaXY7CiAJdm9sYXRpbGUgdTMyICpjb25zdCBtaWlfY29udHJvbF9yZWcgPSAmYXVwLT5tYWMtPm1paV9jb250cm9sOwpAQCAtMjQ5LDcgKzI1MCw3IEBACiAJKm1paV9jb250cm9sX3JlZyA9IG1paV9jb250cm9sOwogfQogCi1zdGF0aWMgaW50IG1kaW9idXNfcmVhZChzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcGh5X2FkZHIsIGludCByZWdudW0pCitzdGF0aWMgaW50IGF1MTAwMF9tZGlvYnVzX3JlYWQoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBoeV9hZGRyLCBpbnQgcmVnbnVtKQogewogCS8qIFdBUk5JTkc6IGJ1cy0+cGh5X21hcFtwaHlfYWRkcl0uYXR0YWNoZWRfZGV2ID09IGRldiBkb2VzCiAJICogX05PVF8gaG9sZCAoZS5nLiB3aGVuIFBIWSBpcyBhY2Nlc3NlZCB0aHJvdWdoIG90aGVyIE1BQydzIE1JSSBidXMpICovCkBAIC0yNTcsMjEgKzI1OCwyMSBAQAogCiAJZW5hYmxlX21hYyhkZXYsIDApOyAvKiBtYWtlIHN1cmUgdGhlIE1BQyBhc3NvY2lhdGVkIHdpdGggdGhpcwogCQkJICAgICAqIG1paV9idXMgaXMgZW5hYmxlZCAqLwotCXJldHVybiBtZGlvX3JlYWQoZGV2LCBwaHlfYWRkciwgcmVnbnVtKTsKKwlyZXR1cm4gYXUxMDAwX21kaW9fcmVhZChkZXYsIHBoeV9hZGRyLCByZWdudW0pOwogfQogCi1zdGF0aWMgaW50IG1kaW9idXNfd3JpdGUoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBoeV9hZGRyLCBpbnQgcmVnbnVtLAotCQkJIHUxNiB2YWx1ZSkKK3N0YXRpYyBpbnQgYXUxMDAwX21kaW9idXNfd3JpdGUoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBoeV9hZGRyLCBpbnQgcmVnbnVtLAorCQkJCXUxNiB2YWx1ZSkKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqY29uc3QgZGV2ID0gYnVzLT5wcml2OwogCiAJZW5hYmxlX21hYyhkZXYsIDApOyAvKiBtYWtlIHN1cmUgdGhlIE1BQyBhc3NvY2lhdGVkIHdpdGggdGhpcwogCQkJICAgICAqIG1paV9idXMgaXMgZW5hYmxlZCAqLwotCW1kaW9fd3JpdGUoZGV2LCBwaHlfYWRkciwgcmVnbnVtLCB2YWx1ZSk7CisJYXUxMDAwX21kaW9fd3JpdGUoZGV2LCBwaHlfYWRkciwgcmVnbnVtLCB2YWx1ZSk7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgbWRpb2J1c19yZXNldChzdHJ1Y3QgbWlpX2J1cyAqYnVzKQorc3RhdGljIGludCBhdTEwMDBfbWRpb2J1c19yZXNldChzdHJ1Y3QgbWlpX2J1cyAqYnVzKQogewogCXN0cnVjdCBuZXRfZGV2aWNlICpjb25zdCBkZXYgPSBidXMtPnByaXY7CiAKQEAgLTcwMyw5ICs3MDQsOSBAQAogCQlnb3RvIGVycl9vdXQ7CiAKIAlhdXAtPm1paV9idXMtPnByaXYgPSBkZXY7Ci0JYXVwLT5taWlfYnVzLT5yZWFkID0gbWRpb2J1c19yZWFkOwotCWF1cC0+bWlpX2J1cy0+d3JpdGUgPSBtZGlvYnVzX3dyaXRlOwotCWF1cC0+bWlpX2J1cy0+cmVzZXQgPSBtZGlvYnVzX3Jlc2V0OworCWF1cC0+bWlpX2J1cy0+cmVhZCA9IGF1MTAwMF9tZGlvYnVzX3JlYWQ7CisJYXVwLT5taWlfYnVzLT53cml0ZSA9IGF1MTAwMF9tZGlvYnVzX3dyaXRlOworCWF1cC0+bWlpX2J1cy0+cmVzZXQgPSBhdTEwMDBfbWRpb2J1c19yZXNldDsKIAlhdXAtPm1paV9idXMtPm5hbWUgPSAiYXUxMDAwX2V0aF9taWkiOwogCXNucHJpbnRmKGF1cC0+bWlpX2J1cy0+aWQsIE1JSV9CVVNfSURfU0laRSwgIiV4IiwgYXVwLT5tYWNfaWQpOwogCWF1cC0+bWlpX2J1cy0+aXJxID0ga21hbGxvYyhzaXplb2YoaW50KSpQSFlfTUFYX0FERFIsIEdGUF9LRVJORUwpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYmZpbl9tYWMuYyBiL2RyaXZlcnMvbmV0L2JmaW5fbWFjLmMKaW5kZXggYTBkNDFjNS4uYjQ1OGQ2MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYmZpbl9tYWMuYworKysgYi9kcml2ZXJzL25ldC9iZmluX21hYy5jCkBAIC0yNTMsNyArMjUzLDcgQEAKICAqIE1JSSBvcGVyYXRpb25zCiAgKi8KIC8qIFdhaXQgdW50aWwgdGhlIHByZXZpb3VzIE1EQy9NRElPIHRyYW5zYWN0aW9uIGhhcyBjb21wbGV0ZWQgKi8KLXN0YXRpYyB2b2lkIG1kaW9fcG9sbCh2b2lkKQorc3RhdGljIHZvaWQgYmZpbl9tZGlvX3BvbGwodm9pZCkKIHsKIAlpbnQgdGltZW91dF9jbnQgPSBNQVhfVElNRU9VVF9DTlQ7CiAKQEAgLTI2OSwyNSArMjY5LDI1IEBACiB9CiAKIC8qIFJlYWQgYW4gb2ZmLWNoaXAgcmVnaXN0ZXIgaW4gYSBQSFkgdGhyb3VnaCB0aGUgTURDL01ESU8gcG9ydCAqLwotc3RhdGljIGludCBtZGlvYnVzX3JlYWQoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBoeV9hZGRyLCBpbnQgcmVnbnVtKQorc3RhdGljIGludCBiZmluX21kaW9idXNfcmVhZChzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcGh5X2FkZHIsIGludCByZWdudW0pCiB7Ci0JbWRpb19wb2xsKCk7CisJYmZpbl9tZGlvX3BvbGwoKTsKIAogCS8qIHJlYWQgbW9kZSAqLwogCWJmaW5fd3JpdGVfRU1BQ19TVEFBREQoU0VUX1BIWUFEKCh1MTYpIHBoeV9hZGRyKSB8CiAJCQkJU0VUX1JFR0FEKCh1MTYpIHJlZ251bSkgfAogCQkJCVNUQUJVU1kpOwogCi0JbWRpb19wb2xsKCk7CisJYmZpbl9tZGlvX3BvbGwoKTsKIAogCXJldHVybiAoaW50KSBiZmluX3JlYWRfRU1BQ19TVEFEQVQoKTsKIH0KIAogLyogV3JpdGUgYW4gb2ZmLWNoaXAgcmVnaXN0ZXIgaW4gYSBQSFkgdGhyb3VnaCB0aGUgTURDL01ESU8gcG9ydCAqLwotc3RhdGljIGludCBtZGlvYnVzX3dyaXRlKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwaHlfYWRkciwgaW50IHJlZ251bSwKLQkJCSB1MTYgdmFsdWUpCitzdGF0aWMgaW50IGJmaW5fbWRpb2J1c193cml0ZShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcGh5X2FkZHIsIGludCByZWdudW0sCisJCQkgICAgICB1MTYgdmFsdWUpCiB7Ci0JbWRpb19wb2xsKCk7CisJYmZpbl9tZGlvX3BvbGwoKTsKIAogCWJmaW5fd3JpdGVfRU1BQ19TVEFEQVQoKHUzMikgdmFsdWUpOwogCkBAIC0yOTcsMTIgKzI5NywxMiBAQAogCQkJCVNUQU9QIHwKIAkJCQlTVEFCVVNZKTsKIAotCW1kaW9fcG9sbCgpOworCWJmaW5fbWRpb19wb2xsKCk7CiAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBtZGlvYnVzX3Jlc2V0KHN0cnVjdCBtaWlfYnVzICpidXMpCitzdGF0aWMgaW50IGJmaW5fbWRpb2J1c19yZXNldChzdHJ1Y3QgbWlpX2J1cyAqYnVzKQogewogCXJldHVybiAwOwogfQpAQCAtODE4LDcgKzgxOCw3IEBACiAJYmZpbl93cml0ZV9ETUExX0NPTkZJRyhyeF9saXN0X2hlYWQtPmRlc2NfYS5jb25maWcpOwogCiAJLyogV2FpdCBNSUkgZG9uZSAqLwotCW1kaW9fcG9sbCgpOworCWJmaW5fbWRpb19wb2xsKCk7CiAKIAkvKiBXZSBlbmFibGUgb25seSBSWCBoZXJlICovCiAJLyogQVNUUCAgIDogRW5hYmxlIEF1dG9tYXRpYyBQYWQgU3RyaXBwaW5nCkBAIC0xMDYzLDkgKzEwNjMsOSBAQAogCQlnb3RvIG91dF9lcnJfbWRpb2J1c19hbGxvYzsKIAogCWxwLT5taWlfYnVzLT5wcml2ID0gbmRldjsKLQlscC0+bWlpX2J1cy0+cmVhZCA9IG1kaW9idXNfcmVhZDsKLQlscC0+bWlpX2J1cy0+d3JpdGUgPSBtZGlvYnVzX3dyaXRlOwotCWxwLT5taWlfYnVzLT5yZXNldCA9IG1kaW9idXNfcmVzZXQ7CisJbHAtPm1paV9idXMtPnJlYWQgPSBiZmluX21kaW9idXNfcmVhZDsKKwlscC0+bWlpX2J1cy0+d3JpdGUgPSBiZmluX21kaW9idXNfd3JpdGU7CisJbHAtPm1paV9idXMtPnJlc2V0ID0gYmZpbl9tZGlvYnVzX3Jlc2V0OwogCWxwLT5taWlfYnVzLT5uYW1lID0gImJmaW5fbWFjX21kaW8iOwogCXNucHJpbnRmKGxwLT5taWlfYnVzLT5pZCwgTUlJX0JVU19JRF9TSVpFLCAiMCIpOwogCWxwLT5taWlfYnVzLT5pcnEgPSBrbWFsbG9jKHNpemVvZihpbnQpKlBIWV9NQVhfQUREUiwgR0ZQX0tFUk5FTCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jczg5eDAuYyBiL2RyaXZlcnMvbmV0L2NzODl4MC5jCmluZGV4IGEyOGRlODEuLjcxMDc2MjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2NzODl4MC5jCisrKyBiL2RyaXZlcnMvbmV0L2NzODl4MC5jCkBAIC0zNiw4ICszNiw3IEBACiAKICAgQWxhbiBDb3ggICAgICAgICAgOiBSZW1vdmVkIDEuMiBzdXBwb3J0LCBhZGRlZCAyLjEgZXh0cmEgY291bnRlcnMuCiAKLSAgQW5kcmV3IE1vcnRvbiAgICAgOiBhbmRyZXdtQHVvdy5lZHUuYXUKLSAgICAgICAgICAgICAgICAgICAgOiBLZXJuZWwgMi4zLjQ4CisgIEFuZHJldyBNb3J0b24gICAgIDogS2VybmVsIDIuMy40OAogICAgICAgICAgICAgICAgICAgICA6IEhhbmRsZSBrbWFsbG9jKCkgZmFpbHVyZXMKICAgICAgICAgICAgICAgICAgICAgOiBPdGhlciByZXNvdXJjZSBhbGxvY2F0aW9uIGZpeGVzCiAgICAgICAgICAgICAgICAgICAgIDogQWRkIFNNUCBsb2NrcwpAQCAtNDksNyArNDgsNyBAQAogICAgICAgICAgICAgICAgICAgICA6IEZpeGVkIGFuIG91dC1vZi1tZW0gYnVnIGluIGRtYV9yeCgpCiAgICAgICAgICAgICAgICAgICAgIDogVXBkYXRlZCBEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvY3M4OXgwLnR4dAogCi0gIEFuZHJldyBNb3J0b24gICAgIDogYW5kcmV3bUB1b3cuZWR1LmF1IC8gS2VybmVsIDIuMy45OS1wcmUxCisgIEFuZHJldyBNb3J0b24gICAgIDogS2VybmVsIDIuMy45OS1wcmUxCiAgICAgICAgICAgICAgICAgICAgIDogVXNlIHNrYl9yZXNlcnZlIHRvIGxvbmd3b3JkIGFsaWduIElQIGhlYWRlciAodHdvIHBsYWNlcykKICAgICAgICAgICAgICAgICAgICAgOiBSZW1vdmUgYSBkZWxheSBsb29wIGZyb20gZG1hX3J4KCkKICAgICAgICAgICAgICAgICAgICAgOiBSZXBsYWNlICcxMDAnIHdpdGggSFoKQEAgLTU3LDExICs1NiwxMSBAQAogICAgICAgICAgICAgICAgICAgICA6IEFkZGVkICdjczg5eDBfZG1hPU4nIGtlcm5lbCBib290IG9wdGlvbgogICAgICAgICAgICAgICAgICAgICA6IENvcnJlY3RseSBpbml0aWFsaXNlIGxwLT5sb2NrIGluIG5vbi1tb2R1bGUgY29tcGlsZQogCi0gIEFuZHJldyBNb3J0b24gICAgIDogYW5kcmV3bUB1b3cuZWR1LmF1IC8gS2VybmVsIDIuMy45OS1wcmU0LTEKKyAgQW5kcmV3IE1vcnRvbiAgICAgOiBLZXJuZWwgMi4zLjk5LXByZTQtMQogICAgICAgICAgICAgICAgICAgICA6IE1PRF9JTkMvREVDIHJhY2UgZml4IChzZWUKICAgICAgICAgICAgICAgICAgICAgOiBodHRwOi8vd3d3LnV3c2cuaW5kaWFuYS5lZHUvaHlwZXJtYWlsL2xpbnV4L2tlcm5lbC8wMDAzLjMvMTUzMi5odG1sKQogCi0gIEFuZHJldyBNb3J0b24gICAgIDogYW5kcmV3bUB1b3cuZWR1LmF1IC8gS2VybmVsIDIuNC4wLXRlc3Q3LXByZTIKKyAgQW5kcmV3IE1vcnRvbiAgICAgOiBLZXJuZWwgMi40LjAtdGVzdDctcHJlMgogICAgICAgICAgICAgICAgICAgICA6IEVuaGFuY2VkIEVFUFJPTSBzdXBwb3J0IHRvIGNvdmVyIG1vcmUgZGV2aWNlcywKICAgICAgICAgICAgICAgICAgICAgOiAgIGFic3RyYWN0ZWQgSVJRIG1hcHBpbmcgdG8gc3VwcG9ydCBDT05GSUdfQVJDSF9DTFBTNzUwMCBhcmNoCiAgICAgICAgICAgICAgICAgICAgIDogICAoSmFzb24gR3VudGhvcnBlIDxqZ2dAdWFsYmVydGEuY2E+KQpAQCAtMTU2LDcgKzE1NSw3IEBACiAjaW5jbHVkZSAiY3M4OXgwLmgiCiAKIHN0YXRpYyBjaGFyIHZlcnNpb25bXSBfX2luaXRkYXRhID0KLSJjczg5eDAuYzogdjIuNC4zLXByZTEgUnVzc2VsbCBOZWxzb24gPG5lbHNvbkBjcnlud3IuY29tPiwgQW5kcmV3IE1vcnRvbiA8YW5kcmV3bUB1b3cuZWR1LmF1PlxuIjsKKyJjczg5eDAuYzogdjIuNC4zLXByZTEgUnVzc2VsbCBOZWxzb24gPG5lbHNvbkBjcnlud3IuY29tPiwgQW5kcmV3IE1vcnRvblxuIjsKIAogI2RlZmluZSBEUlZfTkFNRSAiY3M4OXgwIgogCkBAIC0xODc3LDcgKzE4NzYsNyBAQAogTU9EVUxFX1BBUk1fREVTQyh1c2VfZG1hICwgIihpZ25vcmVkKSIpOwogI2VuZGlmCiAKLU1PRFVMRV9BVVRIT1IoIk1pa2UgQ3J1c2UsIFJ1c3N3bGwgTmVsc29uIDxuZWxzb25AY3J5bndyLmNvbT4sIEFuZHJldyBNb3J0b24gPGFuZHJld21AdW93LmVkdS5hdT4iKTsKK01PRFVMRV9BVVRIT1IoIk1pa2UgQ3J1c2UsIFJ1c3N3bGwgTmVsc29uIDxuZWxzb25AY3J5bndyLmNvbT4sIEFuZHJldyBNb3J0b24iKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jeGdiMy9hZGFwdGVyLmggYi9kcml2ZXJzL25ldC9jeGdiMy9hZGFwdGVyLmgKaW5kZXggNDU1ZWY1Mi4uYmM4ZTI0MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY3hnYjMvYWRhcHRlci5oCisrKyBiL2RyaXZlcnMvbmV0L2N4Z2IzL2FkYXB0ZXIuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDMtMjAwNyBDaGVsc2lvLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMDMtMjAwOCBDaGVsc2lvLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBhdmFpbGFibGUgdG8geW91IHVuZGVyIGEgY2hvaWNlIG9mIG9uZSBvZiB0d28KICAqIGxpY2Vuc2VzLiAgWW91IG1heSBjaG9vc2UgdG8gYmUgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2N4Z2IzL2FlbDEwMDIuYyBiL2RyaXZlcnMvbmV0L2N4Z2IzL2FlbDEwMDIuYwppbmRleCA3NDRmYWMwLi41YzNjMDVkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9jeGdiMy9hZWwxMDAyLmMKKysrIGIvZHJpdmVycy9uZXQvY3hnYjMvYWVsMTAwMi5jCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA3IENoZWxzaW8sIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA4IENoZWxzaW8sIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGF2YWlsYWJsZSB0byB5b3UgdW5kZXIgYSBjaG9pY2Ugb2Ygb25lIG9mIHR3bwogICogbGljZW5zZXMuICBZb3UgbWF5IGNob29zZSB0byBiZSBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY3hnYjMvY29tbW9uLmggYi9kcml2ZXJzL25ldC9jeGdiMy9jb21tb24uaAppbmRleCA1OTNmYjY0Li5lMzEyZDMxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9jeGdiMy9jb21tb24uaAorKysgYi9kcml2ZXJzL25ldC9jeGdiMy9jb21tb24uaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwNyBDaGVsc2lvLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOCBDaGVsc2lvLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBhdmFpbGFibGUgdG8geW91IHVuZGVyIGEgY2hvaWNlIG9mIG9uZSBvZiB0d28KICAqIGxpY2Vuc2VzLiAgWW91IG1heSBjaG9vc2UgdG8gYmUgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2N4Z2IzL2N4Z2IzX2N0bF9kZWZzLmggYi9kcml2ZXJzL25ldC9jeGdiMy9jeGdiM19jdGxfZGVmcy5oCmluZGV4IDZhZDkyNDAuLjFkOGQ0NmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2N4Z2IzL2N4Z2IzX2N0bF9kZWZzLmgKKysrIGIvZHJpdmVycy9uZXQvY3hnYjMvY3hnYjNfY3RsX2RlZnMuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDMtMjAwNyBDaGVsc2lvLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMDMtMjAwOCBDaGVsc2lvLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBhdmFpbGFibGUgdG8geW91IHVuZGVyIGEgY2hvaWNlIG9mIG9uZSBvZiB0d28KICAqIGxpY2Vuc2VzLiAgWW91IG1heSBjaG9vc2UgdG8gYmUgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2N4Z2IzL2N4Z2IzX2RlZnMuaCBiL2RyaXZlcnMvbmV0L2N4Z2IzL2N4Z2IzX2RlZnMuaAppbmRleCA0NWU5MjE2Li40N2U1Mzc2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9jeGdiMy9jeGdiM19kZWZzLmgKKysrIGIvZHJpdmVycy9uZXQvY3hnYjMvY3hnYjNfZGVmcy5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoYykgMjAwNi0yMDA3IENoZWxzaW8sIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAwNi0yMDA4IENoZWxzaW8sIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGF2YWlsYWJsZSB0byB5b3UgdW5kZXIgYSBjaG9pY2Ugb2Ygb25lIG9mIHR3bwogICogbGljZW5zZXMuICBZb3UgbWF5IGNob29zZSB0byBiZSBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY3hnYjMvY3hnYjNfaW9jdGwuaCBiL2RyaXZlcnMvbmV0L2N4Z2IzL2N4Z2IzX2lvY3RsLmgKaW5kZXggM2U4ZDVmYS4uYjE5ZTQzNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY3hnYjMvY3hnYjNfaW9jdGwuaAorKysgYi9kcml2ZXJzL25ldC9jeGdiMy9jeGdiM19pb2N0bC5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoYykgMjAwMy0yMDA3IENoZWxzaW8sIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAwMy0yMDA4IENoZWxzaW8sIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGF2YWlsYWJsZSB0byB5b3UgdW5kZXIgYSBjaG9pY2Ugb2Ygb25lIG9mIHR3bwogICogbGljZW5zZXMuICBZb3UgbWF5IGNob29zZSB0byBiZSBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY3hnYjMvY3hnYjNfbWFpbi5jIGIvZHJpdmVycy9uZXQvY3hnYjMvY3hnYjNfbWFpbi5jCmluZGV4IGYzMTk4NWQuLjFhY2U0MWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2N4Z2IzL2N4Z2IzX21haW4uYworKysgYi9kcml2ZXJzL25ldC9jeGdiMy9jeGdiM19tYWluLmMKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChjKSAyMDAzLTIwMDcgQ2hlbHNpbywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDAzLTIwMDggQ2hlbHNpbywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgYXZhaWxhYmxlIHRvIHlvdSB1bmRlciBhIGNob2ljZSBvZiBvbmUgb2YgdHdvCiAgKiBsaWNlbnNlcy4gIFlvdSBtYXkgY2hvb3NlIHRvIGJlIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jeGdiMy9jeGdiM19vZmZsb2FkLmMgYi9kcml2ZXJzL25ldC9jeGdiMy9jeGdiM19vZmZsb2FkLmMKaW5kZXggMGY2ZmQ2My4uMjY1YWE4YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY3hnYjMvY3hnYjNfb2ZmbG9hZC5jCisrKyBiL2RyaXZlcnMvbmV0L2N4Z2IzL2N4Z2IzX29mZmxvYWQuYwpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYtMjAwNyBDaGVsc2lvLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYtMjAwOCBDaGVsc2lvLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBhdmFpbGFibGUgdG8geW91IHVuZGVyIGEgY2hvaWNlIG9mIG9uZSBvZiB0d28KICAqIGxpY2Vuc2VzLiAgWW91IG1heSBjaG9vc2UgdG8gYmUgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2N4Z2IzL2N4Z2IzX29mZmxvYWQuaCBiL2RyaXZlcnMvbmV0L2N4Z2IzL2N4Z2IzX29mZmxvYWQuaAppbmRleCA3YTM3OTEzLi5kNTE0ZTUwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9jeGdiMy9jeGdiM19vZmZsb2FkLmgKKysrIGIvZHJpdmVycy9uZXQvY3hnYjMvY3hnYjNfb2ZmbG9hZC5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoYykgMjAwNi0yMDA3IENoZWxzaW8sIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAwNi0yMDA4IENoZWxzaW8sIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGF2YWlsYWJsZSB0byB5b3UgdW5kZXIgYSBjaG9pY2Ugb2Ygb25lIG9mIHR3bwogICogbGljZW5zZXMuICBZb3UgbWF5IGNob29zZSB0byBiZSBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY3hnYjMvZmlybXdhcmVfZXhwb3J0cy5oIGIvZHJpdmVycy9uZXQvY3hnYjMvZmlybXdhcmVfZXhwb3J0cy5oCmluZGV4IGI3NWRkZDguLjBkOWIwZTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2N4Z2IzL2Zpcm13YXJlX2V4cG9ydHMuaAorKysgYi9kcml2ZXJzL25ldC9jeGdiMy9maXJtd2FyZV9leHBvcnRzLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChjKSAyMDA0LTIwMDcgQ2hlbHNpbywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDA0LTIwMDggQ2hlbHNpbywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgYXZhaWxhYmxlIHRvIHlvdSB1bmRlciBhIGNob2ljZSBvZiBvbmUgb2YgdHdvCiAgKiBsaWNlbnNlcy4gIFlvdSBtYXkgY2hvb3NlIHRvIGJlIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jeGdiMy9sMnQuYyBiL2RyaXZlcnMvbmV0L2N4Z2IzL2wydC5jCmluZGV4IGIyYzUzMTQuLjQ0MDdhYzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2N4Z2IzL2wydC5jCisrKyBiL2RyaXZlcnMvbmV0L2N4Z2IzL2wydC5jCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoYykgMjAwMy0yMDA3IENoZWxzaW8sIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAwMy0yMDA4IENoZWxzaW8sIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGF2YWlsYWJsZSB0byB5b3UgdW5kZXIgYSBjaG9pY2Ugb2Ygb25lIG9mIHR3bwogICogbGljZW5zZXMuICBZb3UgbWF5IGNob29zZSB0byBiZSBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY3hnYjMvbDJ0LmggYi9kcml2ZXJzL25ldC9jeGdiMy9sMnQuaAppbmRleCA0MmNlNjVmLi5mZDNlYjA3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9jeGdiMy9sMnQuaAorKysgYi9kcml2ZXJzL25ldC9jeGdiMy9sMnQuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDMtMjAwNyBDaGVsc2lvLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMDMtMjAwOCBDaGVsc2lvLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBhdmFpbGFibGUgdG8geW91IHVuZGVyIGEgY2hvaWNlIG9mIG9uZSBvZiB0d28KICAqIGxpY2Vuc2VzLiAgWW91IG1heSBjaG9vc2UgdG8gYmUgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2N4Z2IzL21jNS5jIGIvZHJpdmVycy9uZXQvY3hnYjMvbWM1LmMKaW5kZXggNGM0ZDZlOC4uM2I1NTE3YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY3hnYjMvbWM1LmMKKysrIGIvZHJpdmVycy9uZXQvY3hnYjMvbWM1LmMKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChjKSAyMDAzLTIwMDcgQ2hlbHNpbywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDAzLTIwMDggQ2hlbHNpbywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgYXZhaWxhYmxlIHRvIHlvdSB1bmRlciBhIGNob2ljZSBvZiBvbmUgb2YgdHdvCiAgKiBsaWNlbnNlcy4gIFlvdSBtYXkgY2hvb3NlIHRvIGJlIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jeGdiMy9zZ2UuYyBiL2RyaXZlcnMvbmV0L2N4Z2IzL3NnZS5jCmluZGV4IDg3OTE5NDEuLmM2NDgwYmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2N4Z2IzL3NnZS5jCisrKyBiL2RyaXZlcnMvbmV0L2N4Z2IzL3NnZS5jCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA3IENoZWxzaW8sIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA4IENoZWxzaW8sIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGF2YWlsYWJsZSB0byB5b3UgdW5kZXIgYSBjaG9pY2Ugb2Ygb25lIG9mIHR3bwogICogbGljZW5zZXMuICBZb3UgbWF5IGNob29zZSB0byBiZSBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY3hnYjMvdDNfY3BsLmggYi9kcml2ZXJzL25ldC9jeGdiMy90M19jcGwuaAppbmRleCA5MTc5NzBlLi44NTJjMzk5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9jeGdiMy90M19jcGwuaAorKysgYi9kcml2ZXJzL25ldC9jeGdiMy90M19jcGwuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQtMjAwNyBDaGVsc2lvLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMDQtMjAwOCBDaGVsc2lvLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBhdmFpbGFibGUgdG8geW91IHVuZGVyIGEgY2hvaWNlIG9mIG9uZSBvZiB0d28KICAqIGxpY2Vuc2VzLiAgWW91IG1heSBjaG9vc2UgdG8gYmUgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2N4Z2IzL3QzX2h3LmMgYi9kcml2ZXJzL25ldC9jeGdiMy90M19ody5jCmluZGV4IDRkYTViMDkuLjk2OGY2NGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2N4Z2IzL3QzX2h3LmMKKysrIGIvZHJpdmVycy9uZXQvY3hnYjMvdDNfaHcuYwpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDMtMjAwNyBDaGVsc2lvLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMDMtMjAwOCBDaGVsc2lvLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBhdmFpbGFibGUgdG8geW91IHVuZGVyIGEgY2hvaWNlIG9mIG9uZSBvZiB0d28KICAqIGxpY2Vuc2VzLiAgWW91IG1heSBjaG9vc2UgdG8gYmUgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2N4Z2IzL3QzY2Rldi5oIGIvZHJpdmVycy9uZXQvY3hnYjMvdDNjZGV2LmgKaW5kZXggMGEyMWNmYi4uYmU1NWU5YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY3hnYjMvdDNjZGV2LmgKKysrIGIvZHJpdmVycy9uZXQvY3hnYjMvdDNjZGV2LmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMDcgQ2hlbHNpbyBDb21tdW5pY2F0aW9ucy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAwOCBDaGVsc2lvIENvbW11bmljYXRpb25zLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGF2YWlsYWJsZSB0byB5b3UgdW5kZXIgYSBjaG9pY2Ugb2Ygb25lIG9mIHR3bwogICogbGljZW5zZXMuICBZb3UgbWF5IGNob29zZSB0byBiZSBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY3hnYjMvdmVyc2lvbi5oIGIvZHJpdmVycy9uZXQvY3hnYjMvdmVyc2lvbi5oCmluZGV4IDI5ZGI3MTEuLmJiODY5OGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2N4Z2IzL3ZlcnNpb24uaAorKysgYi9kcml2ZXJzL25ldC9jeGdiMy92ZXJzaW9uLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChjKSAyMDAzLTIwMDcgQ2hlbHNpbywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDAzLTIwMDggQ2hlbHNpbywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgYXZhaWxhYmxlIHRvIHlvdSB1bmRlciBhIGNob2ljZSBvZiBvbmUgb2YgdHdvCiAgKiBsaWNlbnNlcy4gIFlvdSBtYXkgY2hvb3NlIHRvIGJlIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCkBAIC0zNSw3ICszNSw3IEBACiAjZGVmaW5lIERSVl9ERVNDICJDaGVsc2lvIFQzIE5ldHdvcmsgRHJpdmVyIgogI2RlZmluZSBEUlZfTkFNRSAiY3hnYjMiCiAvKiBEcml2ZXIgdmVyc2lvbiAqLwotI2RlZmluZSBEUlZfVkVSU0lPTiAiMS4wLWtvIgorI2RlZmluZSBEUlZfVkVSU0lPTiAiMS4xLjAta28iCiAKIC8qIEZpcm13YXJlIHZlcnNpb24gKi8KICNkZWZpbmUgRldfVkVSU0lPTl9NQUpPUiA3CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jeGdiMy92c2M4MjExLmMgYi9kcml2ZXJzL25ldC9jeGdiMy92c2M4MjExLmMKaW5kZXggMzA2YzJkYy4uMzNmOTU2YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY3hnYjMvdnNjODIxMS5jCisrKyBiL2RyaXZlcnMvbmV0L2N4Z2IzL3ZzYzgyMTEuYwpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwNyBDaGVsc2lvLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOCBDaGVsc2lvLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBhdmFpbGFibGUgdG8geW91IHVuZGVyIGEgY2hvaWNlIG9mIG9uZSBvZiB0d28KICAqIGxpY2Vuc2VzLiAgWW91IG1heSBjaG9vc2UgdG8gYmUgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2N4Z2IzL3hnbWFjLmMgYi9kcml2ZXJzL25ldC9jeGdiMy94Z21hYy5jCmluZGV4IGZmZGMwYTEuLjlkNzc4NjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2N4Z2IzL3hnbWFjLmMKKysrIGIvZHJpdmVycy9uZXQvY3hnYjMveGdtYWMuYwpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwNyBDaGVsc2lvLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOCBDaGVsc2lvLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBhdmFpbGFibGUgdG8geW91IHVuZGVyIGEgY2hvaWNlIG9mIG9uZSBvZiB0d28KICAqIGxpY2Vuc2VzLiAgWW91IG1heSBjaG9vc2UgdG8gYmUgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2VleHByZXNzLmMgYi9kcml2ZXJzL25ldC9lZXhwcmVzcy5jCmluZGV4IDc5NWM1OTQuLmI3NTFjMWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2VleHByZXNzLmMKKysrIGIvZHJpdmVycy9uZXQvZWV4cHJlc3MuYwpAQCAtOCw3ICs4LDcgQEAKICAqCiAgKiBNYW55IG1vZGlmaWNhdGlvbnMsIGFuZCBjdXJyZW50bHkgbWFpbnRhaW5lZCwgYnkKICAqICBQaGlsaXAgQmx1bmRlbGwgPHBoaWxiQGdudS5vcmc+Ci0gKiBBZGRlZCB0aGUgQ29tcGFxIExURSAgQWxhbiBDb3ggPGFsYW5AcmVkaGF0LmNvbT4KKyAqIEFkZGVkIHRoZSBDb21wYXEgTFRFICBBbGFuIENveCA8YWxhbkBseG9yZ3VrLnVrdXUub3JnLnVrPgogICogQWRkZWQgTUNBIHN1cHBvcnQgQWRhbSBGcml0emxlcgogICoKICAqIE5vdGUgLSB0aGlzIGRyaXZlciBpcyBleHBlcmltZW50YWwgc3RpbGwgLSBpdCBoYXMgcHJvYmxlbXMgb24gZmFzdGVyCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9lbmljL2VuaWNfbWFpbi5jIGIvZHJpdmVycy9uZXQvZW5pYy9lbmljX21haW4uYwppbmRleCBmM2E0N2E4Li4xODBlOTY4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9lbmljL2VuaWNfbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L2VuaWMvZW5pY19tYWluLmMKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9pcC5oPgogI2luY2x1ZGUgPGxpbnV4L2lwdjYuaD4KICNpbmNsdWRlIDxsaW51eC90Y3AuaD4KKyNpbmNsdWRlIDxuZXQvaXA2X2NoZWNrc3VtLmg+CiAKICNpbmNsdWRlICJjcV9lbmV0X2Rlc2MuaCIKICNpbmNsdWRlICJ2bmljX2Rldi5oIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaGFtcmFkaW8vYmF5Y29tX3Nlcl9mZHguYyBiL2RyaXZlcnMvbmV0L2hhbXJhZGlvL2JheWNvbV9zZXJfZmR4LmMKaW5kZXggMTdhYzY5Ny4uYjZhODE2ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaGFtcmFkaW8vYmF5Y29tX3Nlcl9mZHguYworKysgYi9kcml2ZXJzL25ldC9oYW1yYWRpby9iYXljb21fc2VyX2ZkeC5jCkBAIC00MTYsMTAgKzQxNiwxMCBAQAogCWlmICghZGV2IHx8ICFiYykKIAkJcmV0dXJuIC1FTlhJTzsKIAlpZiAoIWRldi0+YmFzZV9hZGRyIHx8IGRldi0+YmFzZV9hZGRyID4gMHhmZmZmLVNFUjEyX0VYVEVOVCB8fAotCSAgICBkZXYtPmlycSA8IDIgfHwgZGV2LT5pcnEgPiBOUl9JUlFTKSB7CisJICAgIGRldi0+aXJxIDwgMiB8fCBkZXYtPmlycSA+IG5yX2lycXMpIHsKIAkJcHJpbnRrKEtFUk5fSU5GTyAiYmF5Y29tX3Nlcl9mZHg6IGludmFsaWQgcG9ydG51bWJlciAobWF4ICV1KSAiCiAJCQkJIm9yIGlycSAoMiA8PSBpcnEgPD0gJWQpXG4iLAotCQkJCTB4ZmZmZi1TRVIxMl9FWFRFTlQsIE5SX0lSUVMpOworCQkJCTB4ZmZmZi1TRVIxMl9FWFRFTlQsIG5yX2lycXMpOwogCQlyZXR1cm4gLUVOWElPOwogCX0KIAlpZiAoYmMtPmJhdWQgPCAzMDAgfHwgYmMtPmJhdWQgPiA0ODAwKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9oYW1yYWRpby9zY2MuYyBiL2RyaXZlcnMvbmV0L2hhbXJhZGlvL3NjYy5jCmluZGV4IDQ1YWU5ZDEuLmMxN2UzOWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2hhbXJhZGlvL3NjYy5jCisrKyBiL2RyaXZlcnMvbmV0L2hhbXJhZGlvL3NjYy5jCkBAIC0xNDY1LDcgKzE0NjUsNyBAQAogCXByaW50ayhLRVJOX0lORk8gIkluaXQgWjg1MzAgZHJpdmVyOiAldSBjaGFubmVscywgSVJRIiwgTmNoaXBzKjIpOwogCQogCWZsYWc9IiAiOwotCWZvciAoayA9IDA7IGsgPCBOUl9JUlFTOyBrKyspCisJZm9yIChrID0gMDsgayA8IG5yX2lycXM7IGsrKykKIAkJaWYgKEl2ZWNba10udXNlZCkgCiAJCXsKIAkJCXByaW50aygiJXMlZCIsIGZsYWcsIGspOwpAQCAtMTcyOCw3ICsxNzI4LDcgQEAKIAogCQkJaWYgKGh3Y2ZnLmlycSA9PSAyKSBod2NmZy5pcnEgPSA5OwogCi0JCQlpZiAoaHdjZmcuaXJxIDwgMCB8fCBod2NmZy5pcnEgPj0gTlJfSVJRUykKKwkJCWlmIChod2NmZy5pcnEgPCAwIHx8IGh3Y2ZnLmlycSA+PSBucl9pcnFzKQogCQkJCXJldHVybiAtRUlOVkFMOwogCQkJCQogCQkJaWYgKCFJdmVjW2h3Y2ZnLmlycV0udXNlZCAmJiBod2NmZy5pcnEpCkBAIC0yMTQ4LDcgKzIxNDgsNyBAQAogCQl9CiAJCQogCS8qIFRvIHVubG9hZCB0aGUgcG9ydCBtdXN0IGJlIGNsb3NlZCBzbyBubyByZWFsIElSUSBwZW5kaW5nICovCi0JZm9yIChrPTA7IGsgPCBOUl9JUlFTIDsgaysrKQorCWZvciAoayA9IDA7IGsgPCBucl9pcnFzIDsgaysrKQogCQlpZiAoSXZlY1trXS51c2VkKSBmcmVlX2lycShrLCBOVUxMKTsKIAkJCiAJbG9jYWxfaXJxX2VuYWJsZSgpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaWJtX25ld2VtYWMvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L2libV9uZXdlbWFjL0tjb25maWcKaW5kZXggYmNlYzczMi4uNzhhMTYyOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaWJtX25ld2VtYWMvS2NvbmZpZworKysgYi9kcml2ZXJzL25ldC9pYm1fbmV3ZW1hYy9LY29uZmlnCkBAIC02MiwzICs2MiwxNSBAQAogY29uZmlnIElCTV9ORVdfRU1BQ19FTUFDNAogCWJvb2wKIAlkZWZhdWx0IG4KKworY29uZmlnIElCTV9ORVdfRU1BQ19OT19GTE9XX0NUUkwKKwlib29sCisJZGVmYXVsdCBuCisKK2NvbmZpZyBJQk1fTkVXX0VNQUNfTUFMX0NMUl9JQ0lOVFNUQVQKKwlib29sCisJZGVmYXVsdCBuCisKK2NvbmZpZyBJQk1fTkVXX0VNQUNfTUFMX0NPTU1PTl9FUlIKKwlib29sCisJZGVmYXVsdCBuCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pYm1fbmV3ZW1hYy9jb3JlLmMgYi9kcml2ZXJzL25ldC9pYm1fbmV3ZW1hYy9jb3JlLmMKaW5kZXggNThkZmQzMi4uZWZjZjIxYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaWJtX25ld2VtYWMvY29yZS5jCisrKyBiL2RyaXZlcnMvbmV0L2libV9uZXdlbWFjL2NvcmUuYwpAQCAtMjAyLDEzICsyMDIsMTUgQEAKIHsKIAlyZXR1cm4gIHBoeV9tb2RlID09IFBIWV9NT0RFX0dNSUkgfHwKIAkJcGh5X21vZGUgPT0gUEhZX01PREVfUkdNSUkgfHwKKwkJcGh5X21vZGUgPT0gUEhZX01PREVfU0dNSUkgfHwKIAkJcGh5X21vZGUgPT0gUEhZX01PREVfVEJJIHx8CiAJCXBoeV9tb2RlID09IFBIWV9NT0RFX1JUQkk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50IGVtYWNfcGh5X2dwY3MoaW50IHBoeV9tb2RlKQogewotCXJldHVybiAgcGh5X21vZGUgPT0gUEhZX01PREVfVEJJIHx8CisJcmV0dXJuICBwaHlfbW9kZSA9PSBQSFlfTU9ERV9TR01JSSB8fAorCQlwaHlfbW9kZSA9PSBQSFlfTU9ERV9UQkkgfHwKIAkJcGh5X21vZGUgPT0gUEhZX01PREVfUlRCSTsKIH0KIApAQCAtNTYyLDggKzU2NCw5IEBACiAJc3dpdGNoIChkZXYtPnBoeS5zcGVlZCkgewogCWNhc2UgU1BFRURfMTAwMDoKIAkJaWYgKGVtYWNfcGh5X2dwY3MoZGV2LT5waHkubW9kZSkpIHsKLQkJCW1yMSB8PSBFTUFDX01SMV9NRl8xMDAwR1BDUyB8Ci0JCQkJRU1BQ19NUjFfTUZfSVBQQShkZXYtPnBoeS5hZGRyZXNzKTsKKwkJCW1yMSB8PSBFTUFDX01SMV9NRl8xMDAwR1BDUyB8IEVNQUNfTVIxX01GX0lQUEEoCisJCQkJKGRldi0+cGh5LmdwY3NfYWRkcmVzcyAhPSAweGZmZmZmZmZmKSA/CisJCQkJIGRldi0+cGh5LmdwY3NfYWRkcmVzcyA6IGRldi0+cGh5LmFkZHJlc3MpOwogCiAJCQkvKiBQdXQgc29tZSBhcmJpdHJhcnkgT1VJLCBNYW51ZiAmIFJldiBJRHMgc28gd2UgY2FuCiAJCQkgKiBpZGVudGlmeSB0aGlzIEdQQ1MgUEhZIGxhdGVyLgpAQCAtNjc1LDggKzY3OCwxMiBAQAogCW91dF9iZTMyKCZwLT5pc2VyLCAgcik7CiAKIAkvKiBXZSBuZWVkIHRvIHRha2UgR1BDUyBQSFkgb3V0IG9mIGlzb2xhdGUgbW9kZSBhZnRlciBFTUFDIHJlc2V0ICovCi0JaWYgKGVtYWNfcGh5X2dwY3MoZGV2LT5waHkubW9kZSkpCi0JCWVtYWNfbWlpX3Jlc2V0X3BoeSgmZGV2LT5waHkpOworCWlmIChlbWFjX3BoeV9ncGNzKGRldi0+cGh5Lm1vZGUpKSB7CisJCWlmIChkZXYtPnBoeS5ncGNzX2FkZHJlc3MgIT0gMHhmZmZmZmZmZikKKwkJCWVtYWNfbWlpX3Jlc2V0X2dwY3MoJmRldi0+cGh5KTsKKwkJZWxzZQorCQkJZW1hY19taWlfcmVzZXRfcGh5KCZkZXYtPnBoeSk7CisJfQogCiAJcmV0dXJuIDA7CiB9CkBAIC04ODEsNyArODg4LDkgQEAKIAlzdHJ1Y3QgZW1hY19pbnN0YW5jZSAqZGV2ID0gbmV0ZGV2X3ByaXYobmRldik7CiAJaW50IHJlczsKIAotCXJlcyA9IF9fZW1hY19tZGlvX3JlYWQoZGV2LT5tZGlvX2luc3RhbmNlID8gZGV2LT5tZGlvX2luc3RhbmNlIDogZGV2LAorCXJlcyA9IF9fZW1hY19tZGlvX3JlYWQoKGRldi0+bWRpb19pbnN0YW5jZSAmJgorCQkJCWRldi0+cGh5LmdwY3NfYWRkcmVzcyAhPSBpZCkgPworCQkJCWRldi0+bWRpb19pbnN0YW5jZSA6IGRldiwKIAkJCSAgICAgICAodTgpIGlkLCAodTgpIHJlZyk7CiAJcmV0dXJuIHJlczsKIH0KQEAgLTg5MCw3ICs4OTksOSBAQAogewogCXN0cnVjdCBlbWFjX2luc3RhbmNlICpkZXYgPSBuZXRkZXZfcHJpdihuZGV2KTsKIAotCV9fZW1hY19tZGlvX3dyaXRlKGRldi0+bWRpb19pbnN0YW5jZSA/IGRldi0+bWRpb19pbnN0YW5jZSA6IGRldiwKKwlfX2VtYWNfbWRpb193cml0ZSgoZGV2LT5tZGlvX2luc3RhbmNlICYmCisJCQkgICBkZXYtPnBoeS5ncGNzX2FkZHJlc3MgIT0gaWQpID8KKwkJCSAgIGRldi0+bWRpb19pbnN0YW5jZSA6IGRldiwKIAkJCSAgKHU4KSBpZCwgKHU4KSByZWcsICh1MTYpIHZhbCk7CiB9CiAKQEAgLTIzODIsNyArMjM5MywxMSBAQAogCQkgKiBYWFggSSBwcm9iYWJseSBzaG91bGQgbW92ZSB0aGVzZSBzZXR0aW5ncyB0byB0aGUgZGV2IHRyZWUKIAkJICovCiAJCWRldi0+cGh5LmFkZHJlc3MgPSAtMTsKLQkJZGV2LT5waHkuZmVhdHVyZXMgPSBTVVBQT1JURURfMTAwYmFzZVRfRnVsbCB8IFNVUFBPUlRFRF9NSUk7CisJCWRldi0+cGh5LmZlYXR1cmVzID0gU1VQUE9SVEVEX01JSTsKKwkJaWYgKGVtYWNfcGh5X3N1cHBvcnRzX2dpZ2UoZGV2LT5waHlfbW9kZSkpCisJCQlkZXYtPnBoeS5mZWF0dXJlcyB8PSBTVVBQT1JURURfMTAwMGJhc2VUX0Z1bGw7CisJCWVsc2UKKwkJCWRldi0+cGh5LmZlYXR1cmVzIHw9IFNVUFBPUlRFRF8xMDBiYXNlVF9GdWxsOwogCQlkZXYtPnBoeS5wYXVzZSA9IDE7CiAKIAkJcmV0dXJuIDA7CkBAIC0yNDIxLDcgKzI0MzYsOSBAQAogCQkgKiBOb3RlIHRoYXQgdGhlIGJ1c3lfcGh5X21hcCBpcyBjdXJyZW50bHkgZ2xvYmFsCiAJCSAqIHdoaWxlIGl0IHNob3VsZCBwcm9iYWJseSBiZSBwZXItQVNJQy4uLgogCQkgKi8KLQkJZGV2LT5waHkuYWRkcmVzcyA9IGRldi0+Y2VsbF9pbmRleDsKKwkJZGV2LT5waHkuZ3Bjc19hZGRyZXNzID0gZGV2LT5ncGNzX2FkZHJlc3M7CisJCWlmIChkZXYtPnBoeS5ncGNzX2FkZHJlc3MgPT0gMHhmZmZmZmZmZikKKwkJCWRldi0+cGh5LmFkZHJlc3MgPSBkZXYtPmNlbGxfaW5kZXg7CiAJfQogCiAJZW1hY19jb25maWd1cmUoZGV2KTsKQEAgLTI1MzEsNiArMjU0OCw4IEBACiAJCWRldi0+cGh5X2FkZHJlc3MgPSAweGZmZmZmZmZmOwogCWlmIChlbWFjX3JlYWRfdWludF9wcm9wKG5wLCAicGh5LW1hcCIsICZkZXYtPnBoeV9tYXAsIDApKQogCQlkZXYtPnBoeV9tYXAgPSAweGZmZmZmZmZmOworCWlmIChlbWFjX3JlYWRfdWludF9wcm9wKG5wLCAiZ3Bjcy1hZGRyZXNzIiwgJmRldi0+Z3Bjc19hZGRyZXNzLCAwKSkKKwkJZGV2LT5ncGNzX2FkZHJlc3MgPSAweGZmZmZmZmZmOwogCWlmIChlbWFjX3JlYWRfdWludF9wcm9wKG5wLT5wYXJlbnQsICJjbG9jay1mcmVxdWVuY3kiLCAmZGV2LT5vcGJfYnVzX2ZyZXEsIDEpKQogCQlyZXR1cm4gLUVOWElPOwogCWlmIChlbWFjX3JlYWRfdWludF9wcm9wKG5wLCAidGFoLWRldmljZSIsICZkZXYtPnRhaF9waCwgMCkpCkBAIC0yNTg1LDYgKzI2MDQsOCBAQAogCQlpZiAob2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUobnAsICJpYm0sZW1hYy00NDBlcCIpIHx8CiAJCSAgICBvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShucCwgImlibSxlbWFjLTQ0MGdyIikpCiAJCQlkZXYtPmZlYXR1cmVzIHw9IEVNQUNfRlRSXzQ0MEVQX1BIWV9DTEtfRklYOworCQlpZiAob2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUobnAsICJpYm0sZW1hYy00MDVleiIpKQorCQkJZGV2LT5mZWF0dXJlcyB8PSBFTUFDX0ZUUl9OT19GTE9XX0NPTlRST0xfNDB4OwogCX0KIAogCS8qIEZpeHVwIHNvbWUgZmVhdHVyZSBiaXRzIGJhc2VkIG9uIHRoZSBkZXZpY2UgdHJlZSAqLwpAQCAtMjg0Miw2ICsyODYzLDkgQEAKIAkgICAgICAgbmRldi0+ZGV2X2FkZHJbMF0sIG5kZXYtPmRldl9hZGRyWzFdLCBuZGV2LT5kZXZfYWRkclsyXSwKIAkgICAgICAgbmRldi0+ZGV2X2FkZHJbM10sIG5kZXYtPmRldl9hZGRyWzRdLCBuZGV2LT5kZXZfYWRkcls1XSk7CiAKKwlpZiAoZGV2LT5waHlfbW9kZSA9PSBQSFlfTU9ERV9TR01JSSkKKwkJcHJpbnRrKEtFUk5fTk9USUNFICIlczogaW4gU0dNSUkgbW9kZVxuIiwgbmRldi0+bmFtZSk7CisKIAlpZiAoZGV2LT5waHkuYWRkcmVzcyA+PSAwKQogCQlwcmludGsoIiVzOiBmb3VuZCAlcyBQSFkgKDB4JTAyeClcbiIsIG5kZXYtPm5hbWUsCiAJCSAgICAgICBkZXYtPnBoeS5kZWYtPm5hbWUsIGRldi0+cGh5LmFkZHJlc3MpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaWJtX25ld2VtYWMvY29yZS5oIGIvZHJpdmVycy9uZXQvaWJtX25ld2VtYWMvY29yZS5oCmluZGV4IDVjYTcwZTUuLjE4ZDU2YzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2libV9uZXdlbWFjL2NvcmUuaAorKysgYi9kcml2ZXJzL25ldC9pYm1fbmV3ZW1hYy9jb3JlLmgKQEAgLTE5MCw2ICsxOTAsOSBAQAogCXN0cnVjdCBkZWxheWVkX3dvcmsJCWxpbmtfd29yazsKIAlpbnQJCQkJbGlua19wb2xsaW5nOwogCisJLyogR1BDUyBQSFkgaW5mb3MgKi8KKwl1MzIJCQkJZ3Bjc19hZGRyZXNzOworCiAJLyogU2hhcmVkIE1ESU8gaWYgYW55ICovCiAJdTMyCQkJCW1kaW9fcGg7CiAJc3RydWN0IG9mX2RldmljZQkJKm1kaW9fZGV2OwpAQCAtMzQ1LDYgKzM0OCw5IEBACiAjaWZkZWYgQ09ORklHX0lCTV9ORVdfRU1BQ19SR01JSQogCSAgICBFTUFDX0ZUUl9IQVNfUkdNSUkJfAogI2VuZGlmCisjaWZkZWYgQ09ORklHX0lCTV9ORVdfRU1BQ19OT19GTE9XX0NUUkwKKwkgICAgRU1BQ19GVFJfTk9fRkxPV19DT05UUk9MXzQweCB8CisjZW5kaWYKIAlFTUFDX0ZUUl80NjBFWF9QSFlfQ0xLX0ZJWCB8CiAJRU1BQ19GVFJfNDQwRVBfUEhZX0NMS19GSVgsCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaWJtX25ld2VtYWMvbWFsLmMgYi9kcml2ZXJzL25ldC9pYm1fbmV3ZW1hYy9tYWwuYwppbmRleCAxMGMyNjdiLi4xODM5ZDNmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pYm1fbmV3ZW1hYy9tYWwuYworKysgYi9kcml2ZXJzL25ldC9pYm1fbmV3ZW1hYy9tYWwuYwpAQCAtMjgsNiArMjgsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAKICNpbmNsdWRlICJjb3JlLmgiCisjaW5jbHVkZSA8YXNtL2Rjci1yZWdzLmg+CiAKIHN0YXRpYyBpbnQgbWFsX2NvdW50OwogCkBAIC0yNzksNiArMjgwLDEwIEBACiAJbWFsX3NjaGVkdWxlX3BvbGwobWFsKTsKIAlzZXRfbWFsX2Rjcm4obWFsLCBNQUxfVFhFT0JJU1IsIHIpOwogCisJaWYgKG1hbF9oYXNfZmVhdHVyZShtYWwsIE1BTF9GVFJfQ0xFQVJfSUNJTlRTVEFUKSkKKwkJbXRkY3JpKFNEUjAsIERDUk5fU0RSX0lDSU5UU1RBVCwKKwkJCQkobWZkY3JpKFNEUjAsIERDUk5fU0RSX0lDSU5UU1RBVCkgfCBJQ0lOVFNUQVRfSUNUWCkpOworCiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQogCkBAIC0yOTMsNiArMjk4LDEwIEBACiAJbWFsX3NjaGVkdWxlX3BvbGwobWFsKTsKIAlzZXRfbWFsX2Rjcm4obWFsLCBNQUxfUlhFT0JJU1IsIHIpOwogCisJaWYgKG1hbF9oYXNfZmVhdHVyZShtYWwsIE1BTF9GVFJfQ0xFQVJfSUNJTlRTVEFUKSkKKwkJbXRkY3JpKFNEUjAsIERDUk5fU0RSX0lDSU5UU1RBVCwKKwkJCQkobWZkY3JpKFNEUjAsIERDUk5fU0RSX0lDSU5UU1RBVCkgfCBJQ0lOVFNUQVRfSUNSWCkpOworCiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQogCkBAIC0zMzYsNiArMzQ1LDI1IEBACiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQogCitzdGF0aWMgaXJxcmV0dXJuX3QgbWFsX2ludChpbnQgaXJxLCB2b2lkICpkZXZfaW5zdGFuY2UpCit7CisJc3RydWN0IG1hbF9pbnN0YW5jZSAqbWFsID0gZGV2X2luc3RhbmNlOworCXUzMiBlc3IgPSBnZXRfbWFsX2Rjcm4obWFsLCBNQUxfRVNSKTsKKworCWlmIChlc3IgJiBNQUxfRVNSX0VWQikgeworCQkvKiBkZXNjcmlwdG9yIGVycm9yICovCisJCWlmIChlc3IgJiBNQUxfRVNSX0RFKSB7CisJCQlpZiAoZXNyICYgTUFMX0VTUl9DSURUKQorCQkJCXJldHVybiBtYWxfcnhkZShpcnEsIGRldl9pbnN0YW5jZSk7CisJCQllbHNlCisJCQkJcmV0dXJuIG1hbF90eGRlKGlycSwgZGV2X2luc3RhbmNlKTsKKwkJfSBlbHNlIHsgLyogU0VSUiAqLworCQkJcmV0dXJuIG1hbF9zZXJyKGlycSwgZGV2X2luc3RhbmNlKTsKKwkJfQorCX0KKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKIHZvaWQgbWFsX3BvbGxfZGlzYWJsZShzdHJ1Y3QgbWFsX2luc3RhbmNlICptYWwsIHN0cnVjdCBtYWxfY29tbWFjICpjb21tYWMpCiB7CiAJLyogU3BpbmxvY2stdHlwZSBzZW1hbnRpY3M6IG9ubHkgb25lIGNhbGxlciBkaXNhYmxlIHBvbGwgYXQgYSB0aW1lICovCkBAIC00OTMsNiArNTIxLDggQEAKIAl1bnNpZ25lZCBpbnQgZGNyX2Jhc2U7CiAJY29uc3QgdTMyICpwcm9wOwogCXUzMiBjZmc7CisJdW5zaWduZWQgbG9uZyBpcnFmbGFnczsKKwlpcnFfaGFuZGxlcl90IGhkbHJfc2VyciwgaGRscl90eGRlLCBoZGxyX3J4ZGU7CiAKIAltYWwgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgbWFsX2luc3RhbmNlKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFtYWwpIHsKQEAgLTU0MiwxMSArNTcyLDIxIEBACiAJCWdvdG8gZmFpbDsKIAl9CiAKKwlpZiAob2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUob2ZkZXYtPm5vZGUsICJpYm0sbWNtYWwtNDA1ZXoiKSkKKwkJbWFsLT5mZWF0dXJlcyB8PSAoTUFMX0ZUUl9DTEVBUl9JQ0lOVFNUQVQgfAorCQkJCU1BTF9GVFJfQ09NTU9OX0VSUl9JTlQpOworCiAJbWFsLT50eGVvYl9pcnEgPSBpcnFfb2ZfcGFyc2VfYW5kX21hcChvZmRldi0+bm9kZSwgMCk7CiAJbWFsLT5yeGVvYl9pcnEgPSBpcnFfb2ZfcGFyc2VfYW5kX21hcChvZmRldi0+bm9kZSwgMSk7CiAJbWFsLT5zZXJyX2lycSA9IGlycV9vZl9wYXJzZV9hbmRfbWFwKG9mZGV2LT5ub2RlLCAyKTsKLQltYWwtPnR4ZGVfaXJxID0gaXJxX29mX3BhcnNlX2FuZF9tYXAob2ZkZXYtPm5vZGUsIDMpOwotCW1hbC0+cnhkZV9pcnEgPSBpcnFfb2ZfcGFyc2VfYW5kX21hcChvZmRldi0+bm9kZSwgNCk7CisKKwlpZiAobWFsX2hhc19mZWF0dXJlKG1hbCwgTUFMX0ZUUl9DT01NT05fRVJSX0lOVCkpIHsKKwkJbWFsLT50eGRlX2lycSA9IG1hbC0+cnhkZV9pcnEgPSBtYWwtPnNlcnJfaXJxOworCX0gZWxzZSB7CisJCW1hbC0+dHhkZV9pcnEgPSBpcnFfb2ZfcGFyc2VfYW5kX21hcChvZmRldi0+bm9kZSwgMyk7CisJCW1hbC0+cnhkZV9pcnEgPSBpcnFfb2ZfcGFyc2VfYW5kX21hcChvZmRldi0+bm9kZSwgNCk7CisJfQorCiAJaWYgKG1hbC0+dHhlb2JfaXJxID09IE5PX0lSUSB8fCBtYWwtPnJ4ZW9iX2lycSA9PSBOT19JUlEgfHwKIAkgICAgbWFsLT5zZXJyX2lycSA9PSBOT19JUlEgfHwgbWFsLT50eGRlX2lycSA9PSBOT19JUlEgfHwKIAkgICAgbWFsLT5yeGRlX2lycSA9PSBOT19JUlEpIHsKQEAgLTYwOCwxNiArNjQ4LDI2IEBACiAJCQkgICAgIHNpemVvZihzdHJ1Y3QgbWFsX2Rlc2NyaXB0b3IpICoKIAkJCSAgICAgbWFsX3J4X2JkX29mZnNldChtYWwsIGkpKTsKIAotCWVyciA9IHJlcXVlc3RfaXJxKG1hbC0+c2Vycl9pcnEsIG1hbF9zZXJyLCAwLCAiTUFMIFNFUlIiLCBtYWwpOworCWlmIChtYWxfaGFzX2ZlYXR1cmUobWFsLCBNQUxfRlRSX0NPTU1PTl9FUlJfSU5UKSkgeworCQlpcnFmbGFncyA9IElSUUZfU0hBUkVEOworCQloZGxyX3NlcnIgPSBoZGxyX3R4ZGUgPSBoZGxyX3J4ZGUgPSBtYWxfaW50OworCX0gZWxzZSB7CisJCWlycWZsYWdzID0gMDsKKwkJaGRscl9zZXJyID0gbWFsX3NlcnI7CisJCWhkbHJfdHhkZSA9IG1hbF90eGRlOworCQloZGxyX3J4ZGUgPSBtYWxfcnhkZTsKKwl9CisKKwllcnIgPSByZXF1ZXN0X2lycShtYWwtPnNlcnJfaXJxLCBoZGxyX3NlcnIsIGlycWZsYWdzLCAiTUFMIFNFUlIiLCBtYWwpOwogCWlmIChlcnIpCiAJCWdvdG8gZmFpbDI7Ci0JZXJyID0gcmVxdWVzdF9pcnEobWFsLT50eGRlX2lycSwgbWFsX3R4ZGUsIDAsICJNQUwgVFggREUiLCBtYWwpOworCWVyciA9IHJlcXVlc3RfaXJxKG1hbC0+dHhkZV9pcnEsIGhkbHJfdHhkZSwgaXJxZmxhZ3MsICJNQUwgVFggREUiLCBtYWwpOwogCWlmIChlcnIpCiAJCWdvdG8gZmFpbDM7CiAJZXJyID0gcmVxdWVzdF9pcnEobWFsLT50eGVvYl9pcnEsIG1hbF90eGVvYiwgMCwgIk1BTCBUWCBFT0IiLCBtYWwpOwogCWlmIChlcnIpCiAJCWdvdG8gZmFpbDQ7Ci0JZXJyID0gcmVxdWVzdF9pcnEobWFsLT5yeGRlX2lycSwgbWFsX3J4ZGUsIDAsICJNQUwgUlggREUiLCBtYWwpOworCWVyciA9IHJlcXVlc3RfaXJxKG1hbC0+cnhkZV9pcnEsIGhkbHJfcnhkZSwgaXJxZmxhZ3MsICJNQUwgUlggREUiLCBtYWwpOwogCWlmIChlcnIpCiAJCWdvdG8gZmFpbDU7CiAJZXJyID0gcmVxdWVzdF9pcnEobWFsLT5yeGVvYl9pcnEsIG1hbF9yeGVvYiwgMCwgIk1BTCBSWCBFT0IiLCBtYWwpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaWJtX25ld2VtYWMvbWFsLmggYi9kcml2ZXJzL25ldC9pYm1fbmV3ZW1hYy9tYWwuaAppbmRleCA3MTdkYzM4Li4yZjBhODczIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pYm1fbmV3ZW1hYy9tYWwuaAorKysgYi9kcml2ZXJzL25ldC9pYm1fbmV3ZW1hYy9tYWwuaApAQCAtMjEzLDYgKzIxMyw4IEBACiAJc3RydWN0IG9mX2RldmljZQkqb2ZkZXY7CiAJaW50CQkJaW5kZXg7CiAJc3BpbmxvY2tfdAkJbG9jazsKKworCXVuc2lnbmVkIGludCBmZWF0dXJlczsKIH07CiAKIHN0YXRpYyBpbmxpbmUgdTMyIGdldF9tYWxfZGNybihzdHJ1Y3QgbWFsX2luc3RhbmNlICptYWwsIGludCByZWcpCkBAIC0yMjUsNiArMjI3LDM4IEBACiAJZGNyX3dyaXRlKG1hbC0+ZGNyX2hvc3QsIHJlZywgdmFsKTsKIH0KIAorLyogRmVhdHVyZXMgb2YgdmFyaW91cyBNQUwgaW1wbGVtZW50YXRpb25zICovCisKKy8qIFNldCBpZiB5b3UgaGF2ZSBpbnRlcnJ1cHQgY29hbGVzY2luZyBhbmQgeW91IGhhdmUgdG8gY2xlYXIgdGhlIFNEUgorICogcmVnaXN0ZXIgZm9yIFRYRU9CIGFuZCBSWEVPQiBpbnRlcnJ1cHRzIHRvIHdvcmsKKyAqLworI2RlZmluZSBNQUxfRlRSX0NMRUFSX0lDSU5UU1RBVAkweDAwMDAwMDAxCisKKy8qIFNldCBpZiB5b3VyIE1BTCBoYXMgU0VSUiwgVFhERSwgYW5kIFJYREUgT1InZCBpbnRvIGEgc2luZ2xlIFVJQworICogaW50ZXJydXB0CisgKi8KKyNkZWZpbmUgTUFMX0ZUUl9DT01NT05fRVJSX0lOVAkweDAwMDAwMDAyCisKK2VudW0geworCU1BTF9GVFJTX0FMV0FZUyA9IDAsCisKKwlNQUxfRlRSU19QT1NTSUJMRSA9CisjaWZkZWYgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ0xSX0lDSU5UU1RBVAorCQlNQUxfRlRSX0NMRUFSX0lDSU5UU1RBVCB8CisjZW5kaWYKKyNpZmRlZiBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DT01NT05fRVJSCisJCU1BTF9GVFJfQ09NTU9OX0VSUl9JTlQgfAorI2VuZGlmCisJCTAsCit9OworCitzdGF0aWMgaW5saW5lIGludCBtYWxfaGFzX2ZlYXR1cmUoc3RydWN0IG1hbF9pbnN0YW5jZSAqZGV2LAorCQl1bnNpZ25lZCBsb25nIGZlYXR1cmUpCit7CisJcmV0dXJuIChNQUxfRlRSU19BTFdBWVMgJiBmZWF0dXJlKSB8fAorCQkoTUFMX0ZUUlNfUE9TU0lCTEUgJiBkZXYtPmZlYXR1cmVzICYgZmVhdHVyZSk7Cit9CisKIC8qIFJlZ2lzdGVyIE1BTCBkZXZpY2VzICovCiBpbnQgbWFsX2luaXQodm9pZCk7CiB2b2lkIG1hbF9leGl0KHZvaWQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaWJtX25ld2VtYWMvcGh5LmMgYi9kcml2ZXJzL25ldC9pYm1fbmV3ZW1hYy9waHkuYwppbmRleCA5MTY0YWJiLi5jNDBjZDhkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pYm1fbmV3ZW1hYy9waHkuYworKysgYi9kcml2ZXJzL25ldC9pYm1fbmV3ZW1hYy9waHkuYwpAQCAtMzgsNiArMzgsMTYgQEAKIAlwaHktPm1kaW9fd3JpdGUocGh5LT5kZXYsIHBoeS0+YWRkcmVzcywgcmVnLCB2YWwpOwogfQogCitzdGF0aWMgaW5saW5lIGludCBncGNzX3BoeV9yZWFkKHN0cnVjdCBtaWlfcGh5ICpwaHksIGludCByZWcpCit7CisJcmV0dXJuIHBoeS0+bWRpb19yZWFkKHBoeS0+ZGV2LCBwaHktPmdwY3NfYWRkcmVzcywgcmVnKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGdwY3NfcGh5X3dyaXRlKHN0cnVjdCBtaWlfcGh5ICpwaHksIGludCByZWcsIGludCB2YWwpCit7CisJcGh5LT5tZGlvX3dyaXRlKHBoeS0+ZGV2LCBwaHktPmdwY3NfYWRkcmVzcywgcmVnLCB2YWwpOworfQorCiBpbnQgZW1hY19taWlfcmVzZXRfcGh5KHN0cnVjdCBtaWlfcGh5ICpwaHkpCiB7CiAJaW50IHZhbDsKQEAgLTYyLDYgKzcyLDM3IEBACiAJcmV0dXJuIGxpbWl0IDw9IDA7CiB9CiAKK2ludCBlbWFjX21paV9yZXNldF9ncGNzKHN0cnVjdCBtaWlfcGh5ICpwaHkpCit7CisJaW50IHZhbDsKKwlpbnQgbGltaXQgPSAxMDAwMDsKKworCXZhbCA9IGdwY3NfcGh5X3JlYWQocGh5LCBNSUlfQk1DUik7CisJdmFsICY9IH4oQk1DUl9JU09MQVRFIHwgQk1DUl9BTkVOQUJMRSk7CisJdmFsIHw9IEJNQ1JfUkVTRVQ7CisJZ3Bjc19waHlfd3JpdGUocGh5LCBNSUlfQk1DUiwgdmFsKTsKKworCXVkZWxheSgzMDApOworCisJd2hpbGUgKGxpbWl0LS0pIHsKKwkJdmFsID0gZ3Bjc19waHlfcmVhZChwaHksIE1JSV9CTUNSKTsKKwkJaWYgKHZhbCA+PSAwICYmICh2YWwgJiBCTUNSX1JFU0VUKSA9PSAwKQorCQkJYnJlYWs7CisJCXVkZWxheSgxMCk7CisJfQorCWlmICgodmFsICYgQk1DUl9JU09MQVRFKSAmJiBsaW1pdCA+IDApCisJCWdwY3NfcGh5X3dyaXRlKHBoeSwgTUlJX0JNQ1IsIHZhbCAmIH5CTUNSX0lTT0xBVEUpOworCisJaWYgKGxpbWl0ID4gMCAmJiBwaHktPm1vZGUgPT0gUEhZX01PREVfU0dNSUkpIHsKKwkJLyogQ29uZmlndXJlIEdQQ1MgaW50ZXJmYWNlIHRvIHJlY29tbWVuZGVkIHNldHRpbmcgZm9yIFNHTUlJICovCisJCWdwY3NfcGh5X3dyaXRlKHBoeSwgMHgwNCwgMHg4MTIwKTsgLyogQXN5bVBhdXNlLCBGRFggKi8KKwkJZ3Bjc19waHlfd3JpdGUocGh5LCAweDA3LCAweDI4MDEpOyAvKiBtc2dfcGcsIHRvZ2dsZSAqLworCQlncGNzX3BoeV93cml0ZShwaHksIDB4MDAsIDB4MDE0MCk7IC8qIDFHYnBzLCBGRFggICAgICovCisJfQorCisJcmV0dXJuIGxpbWl0IDw9IDA7Cit9CisKIHN0YXRpYyBpbnQgZ2VubWlpX3NldHVwX2FuZWcoc3RydWN0IG1paV9waHkgKnBoeSwgdTMyIGFkdmVydGlzZSkKIHsKIAlpbnQgY3RsLCBhZHY7CkBAIC0zMzIsNiArMzczLDMzIEBACiAJcmV0dXJuICAwOwogfQogCitzdGF0aWMgaW50IG04OGUxMTEyX2luaXQoc3RydWN0IG1paV9waHkgKnBoeSkKK3sKKwkvKgorCSAqIE1hcnZlbGwgODhFMTExMiBQSFkgbmVlZHMgdG8gaGF2ZSB0aGUgU0dNSUkgTUFDCisJICogaW50ZXJhY2UgKHBhZ2UgMikgcHJvcGVybHkgY29uZmlndXJlZCB0bworCSAqIGNvbW11bmljYXRlIHdpdGggdGhlIDQ2MEVYL0dUIEdQQ1MgaW50ZXJmYWNlLgorCSAqLworCisJdTE2IHJlZ19zaG9ydDsKKworCXByX2RlYnVnKCIlczogTWFydmVsbCA4OEUxMTEyIEV0aGVybmV0XG4iLCBfX2Z1bmNfXyk7CisKKwkvKiBTZXQgYWNjZXNzIHRvIFBhZ2UgMiAqLworCXBoeV93cml0ZShwaHksIDB4MTYsIDB4MDAwMik7CisKKwlwaHlfd3JpdGUocGh5LCAweDAwLCAweDAwNDApOyAvKiAxR2JwcyAqLworCXJlZ19zaG9ydCA9ICh1MTYpKHBoeV9yZWFkKHBoeSwgMHgxYSkpOworCXJlZ19zaG9ydCB8PSAweDgwMDA7IC8qIGJ5cGFzcyBBdXRvLU5lZ290aWF0aW9uICovCisJcGh5X3dyaXRlKHBoeSwgMHgxYSwgcmVnX3Nob3J0KTsKKwllbWFjX21paV9yZXNldF9waHkocGh5KTsgLyogcmVzZXQgTUFDIGludGVyZmFjZSAqLworCisJLyogUmVzZXQgYWNjZXNzIHRvIFBhZ2UgMCAqLworCXBoeV93cml0ZShwaHksIDB4MTYsIDB4MDAwMCk7CisKKwlyZXR1cm4gIDA7Cit9CisKIHN0YXRpYyBpbnQgZXQxMDExY19pbml0KHN0cnVjdCBtaWlfcGh5ICpwaHkpCiB7CiAJdTE2IHJlZ19zaG9ydDsKQEAgLTM4NCwxMSArNDUyLDI3IEBACiAJLm9wcwkJPSAmbTg4ZTExMTFfcGh5X29wcywKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgbWlpX3BoeV9vcHMgbTg4ZTExMTJfcGh5X29wcyA9IHsKKwkuaW5pdAkJPSBtODhlMTExMl9pbml0LAorCS5zZXR1cF9hbmVnCT0gZ2VubWlpX3NldHVwX2FuZWcsCisJLnNldHVwX2ZvcmNlZAk9IGdlbm1paV9zZXR1cF9mb3JjZWQsCisJLnBvbGxfbGluawk9IGdlbm1paV9wb2xsX2xpbmssCisJLnJlYWRfbGluawk9IGdlbm1paV9yZWFkX2xpbmsKK307CisKK3N0YXRpYyBzdHJ1Y3QgbWlpX3BoeV9kZWYgbTg4ZTExMTJfcGh5X2RlZiA9IHsKKwkucGh5X2lkCQk9IDB4MDE0MTBDOTAsCisJLnBoeV9pZF9tYXNrCT0gMHgwZmZmZmZmMCwKKwkubmFtZQkJPSAiTWFydmVsbCA4OEUxMTEyIEV0aGVybmV0IiwKKwkub3BzCQk9ICZtODhlMTExMl9waHlfb3BzLAorfTsKKwogc3RhdGljIHN0cnVjdCBtaWlfcGh5X2RlZiAqbWlpX3BoeV90YWJsZVtdID0gewogCSZldDEwMTFjX3BoeV9kZWYsCiAJJmNpczgyMDFfcGh5X2RlZiwKIAkmYmNtNTI0OF9waHlfZGVmLAogCSZtODhlMTExMV9waHlfZGVmLAorCSZtODhlMTExMl9waHlfZGVmLAogCSZnZW5taWlfcGh5X2RlZiwKIAlOVUxMCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaWJtX25ld2VtYWMvcGh5LmggYi9kcml2ZXJzL25ldC9pYm1fbmV3ZW1hYy9waHkuaAppbmRleCAxYjY1YzgxLi41ZDJiZjRjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pYm1fbmV3ZW1hYy9waHkuaAorKysgYi9kcml2ZXJzL25ldC9pYm1fbmV3ZW1hYy9waHkuaApAQCAtNTcsNiArNTcsNyBAQAogCQkJCSAgIG9yIGRldGVybWluZWQgYXV0b21hdGljYWx5ICovCiAJaW50IGFkZHJlc3M7CQkvKiBQSFkgYWRkcmVzcyAqLwogCWludCBtb2RlOwkJLyogUEhZIG1vZGUgKi8KKwlpbnQgZ3Bjc19hZGRyZXNzOwkvKiBHUENTIFBIWSBhZGRyZXNzICovCiAKIAkvKiAxOiBhdXRvbmVnIGVuYWJsZWQsIDA6IGRpc2FibGVkICovCiAJaW50IGF1dG9uZWc7CkBAIC04MSw1ICs4Miw2IEBACiAgKi8KIGludCBlbWFjX21paV9waHlfcHJvYmUoc3RydWN0IG1paV9waHkgKnBoeSwgaW50IGFkZHJlc3MpOwogaW50IGVtYWNfbWlpX3Jlc2V0X3BoeShzdHJ1Y3QgbWlpX3BoeSAqcGh5KTsKK2ludCBlbWFjX21paV9yZXNldF9ncGNzKHN0cnVjdCBtaWlfcGh5ICpwaHkpOwogCiAjZW5kaWYgLyogX19JQk1fTkVXRU1BQ19QSFlfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaWJtbGFuYS5jIGIvZHJpdmVycy9uZXQvaWJtbGFuYS5jCmluZGV4IDk1ZTM0NjQuLmYwMjc2NDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2libWxhbmEuYworKysgYi9kcml2ZXJzL25ldC9pYm1sYW5hLmMKQEAgLTcxLDcgKzcxLDcgQEAKICAgSnVuZSAxc3QsIDIwMDAKIAljb3JyZWN0ZWQgdmVyc2lvbiBjb2RlcywgYWRkZWQgc3VwcG9ydCBmb3IgdGhlIGxhdGVzdCAyLjMgY2hhbmdlcwogICBPY3QgMjh0aCwgMjAwMgotICAJY2xlYW5lZCB1cCBmb3IgdGhlIDIuNSB0cmVlIDxhbGFuQHJlZGhhdC5jb20+CisJY2xlYW5lZCB1cCBmb3IgdGhlIDIuNSB0cmVlIDxhbGFuQGx4b3JndWsudWt1dS5vcmcudWs+CiAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pcmRhL2tpbmdzdW4tc2lyLmMgYi9kcml2ZXJzL25ldC9pcmRhL2tpbmdzdW4tc2lyLmMKaW5kZXggNzNmZTgzYi4uZTE0MjlmYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXJkYS9raW5nc3VuLXNpci5jCisrKyBiL2RyaXZlcnMvbmV0L2lyZGEva2luZ3N1bi1zaXIuYwpAQCAtNTQwLDcgKzU0MCw4IEBACiAJaWYgKHJldCAhPSAwKQogCQlnb3RvIGZyZWVfbWVtOwogCi0JaW5mbygiSXJEQTogUmVnaXN0ZXJlZCBLaW5nU3VuL0RvblNoaW5lIGRldmljZSAlcyIsIG5ldC0+bmFtZSk7CisJZGV2X2luZm8oJm5ldC0+ZGV2LCAiSXJEQTogUmVnaXN0ZXJlZCBLaW5nU3VuL0RvblNoaW5lIGRldmljZSAlc1xuIiwKKwkJIG5ldC0+bmFtZSk7CiAKIAl1c2Jfc2V0X2ludGZkYXRhKGludGYsIGtpbmdzdW4pOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pcmRhL2tzOTU5LXNpci5jIGIvZHJpdmVycy9uZXQvaXJkYS9rczk1OS1zaXIuYwppbmRleCA4YzI1N2E1Li4yNDgyZDYxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pcmRhL2tzOTU5LXNpci5jCisrKyBiL2RyaXZlcnMvbmV0L2lyZGEva3M5NTktc2lyLmMKQEAgLTgwMSw3ICs4MDEsOCBAQAogCWlmIChyZXQgIT0gMCkKIAkJZ290byBmcmVlX21lbTsKIAotCWluZm8oIklyREE6IFJlZ2lzdGVyZWQgS2luZ1N1biBLUy05NTkgZGV2aWNlICVzIiwgbmV0LT5uYW1lKTsKKwlkZXZfaW5mbygmbmV0LT5kZXYsICJJckRBOiBSZWdpc3RlcmVkIEtpbmdTdW4gS1MtOTU5IGRldmljZSAlc1xuIiwKKwkJIG5ldC0+bmFtZSk7CiAKIAl1c2Jfc2V0X2ludGZkYXRhKGludGYsIGtpbmdzdW4pOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pcmRhL2tzZGF6emxlLXNpci5jIGIvZHJpdmVycy9uZXQvaXJkYS9rc2RhenpsZS1zaXIuYwppbmRleCBkMDFhMjg1Li4xZTBkZTkzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pcmRhL2tzZGF6emxlLXNpci5jCisrKyBiL2RyaXZlcnMvbmV0L2lyZGEva3NkYXp6bGUtc2lyLmMKQEAgLTcwNSw3ICs3MDUsOCBAQAogCWlmIChyZXQgIT0gMCkKIAkJZ290byBmcmVlX21lbTsKIAotCWluZm8oIklyREE6IFJlZ2lzdGVyZWQgS2luZ1N1bi9EYXp6bGUgZGV2aWNlICVzIiwgbmV0LT5uYW1lKTsKKwlkZXZfaW5mbygmbmV0LT5kZXYsICJJckRBOiBSZWdpc3RlcmVkIEtpbmdTdW4vRGF6emxlIGRldmljZSAlc1xuIiwKKwkJIG5ldC0+bmFtZSk7CiAKIAl1c2Jfc2V0X2ludGZkYXRhKGludGYsIGtpbmdzdW4pOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pcmRhL3Npcl9kb25nbGUuYyBiL2RyaXZlcnMvbmV0L2lyZGEvc2lyX2RvbmdsZS5jCmluZGV4IDM2MDMwMjQuLjJhOTkzMGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lyZGEvc2lyX2RvbmdsZS5jCisrKyBiL2RyaXZlcnMvbmV0L2lyZGEvc2lyX2RvbmdsZS5jCkBAIC02Nyw5ICs2Nyw3IEBACiAJY29uc3Qgc3RydWN0IGRvbmdsZV9kcml2ZXIgKmRydiA9IE5VTEw7CiAJaW50IGVyciA9IC1FSU5WQUw7CiAKLSNpZmRlZiBDT05GSUdfS01PRAogCXJlcXVlc3RfbW9kdWxlKCJpcmRhLWRvbmdsZS0lZCIsIHR5cGUpOwotI2VuZGlmCiAKIAlpZiAoZGV2LT5kb25nbGVfZHJ2ICE9IE5VTEwpCiAJCXJldHVybiAtRUJVU1k7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pcmRhL3N0aXI0MjAwLmMgYi9kcml2ZXJzL25ldC9pcmRhL3N0aXI0MjAwLmMKaW5kZXggMDUxOTYzNy4uMzU3NTgwNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXJkYS9zdGlyNDIwMC5jCisrKyBiL2RyaXZlcnMvbmV0L2lyZGEvc3RpcjQyMDAuYwpAQCAtNTA2LDcgKzUwNiw3IEBACiAJCQlnb3RvIGZvdW5kOwogCX0KIAotCXdhcm4oIiVzOiBpbnZhbGlkIHNwZWVkICVkIiwgc3Rpci0+bmV0ZGV2LT5uYW1lLCBzcGVlZCk7CisJZGV2X3dhcm4oJnN0aXItPm5ldGRldi0+ZGV2LCAiaW52YWxpZCBzcGVlZCAlZFxuIiwgc3BlZWQpOwogCXJldHVybiAtRUlOVkFMOwogCiAgZm91bmQ6CkBAIC01OTgsOCArNTk4LDggQEAKIAkJZXJyID0gcmVhZF9yZWcoc3RpciwgUkVHX0ZJRk9DVEwsIHN0aXItPmZpZm9fc3RhdHVzLCAKIAkJCQkgICBGSUZPX1JFR1NfU0laRSk7CiAJCWlmICh1bmxpa2VseShlcnIgIT0gRklGT19SRUdTX1NJWkUpKSB7Ci0JCQl3YXJuKCIlczogRklGTyByZWdpc3RlciByZWFkIGVycm9yOiAlZCIsIAotCQkJICAgICBzdGlyLT5uZXRkZXYtPm5hbWUsIGVycik7CisJCQlkZXZfd2Fybigmc3Rpci0+bmV0ZGV2LT5kZXYsCisJCQkJICJGSUZPIHJlZ2lzdGVyIHJlYWQgZXJyb3I6ICVkXG4iLCBlcnIpOwogCiAJCQlyZXR1cm4gZXJyOwogCQl9CkBAIC03ODMsOCArNzgzLDkgQEAKIAogCQkJaWYgKHVubGlrZWx5KHJlY2VpdmVfc3RhcnQoc3RpcikpKSB7CiAJCQkJaWYgKG5ldF9yYXRlbGltaXQoKSkKLQkJCQkJaW5mbygiJXM6IHJlY2VpdmUgdXNiIHN1Ym1pdCBmYWlsZWQiLAotCQkJCQkgICAgIHN0aXItPm5ldGRldi0+bmFtZSk7CisJCQkJCWRldl9pbmZvKCZkZXYtPmRldiwKKwkJCQkJCSAiJXM6IHJlY2VpdmUgdXNiIHN1Ym1pdCBmYWlsZWRcbiIsCisJCQkJCQkgc3Rpci0+bmV0ZGV2LT5uYW1lKTsKIAkJCQlzdGlyLT5yZWNlaXZpbmcgPSAwOwogCQkJCW1zbGVlcCgxMCk7CiAJCQkJY29udGludWU7CkBAIC04MzYsOCArODM3LDggQEAKIAogCS8qIGluIGNhc2Ugb2YgZXJyb3IsIHRoZSBrZXJuZWwgdGhyZWFkIHdpbGwgcmVzdGFydCB1cyAqLwogCWlmIChlcnIpIHsKLQkJd2FybigiJXM6IHVzYiByZWNlaXZlIHN1Ym1pdCBlcnJvcjogJWQiLAotCQkJc3Rpci0+bmV0ZGV2LT5uYW1lLCBlcnIpOworCQlkZXZfd2Fybigmc3Rpci0+bmV0ZGV2LT5kZXYsICJ1c2IgcmVjZWl2ZSBzdWJtaXQgZXJyb3I6ICVkXG4iLAorCQkJIGVycik7CiAJCXN0aXItPnJlY2VpdmluZyA9IDA7CiAJCXdha2VfdXBfcHJvY2VzcyhzdGlyLT50aHJlYWQpOwogCX0KQEAgLTEwNzMsNyArMTA3NCw4IEBACiAJaWYgKHJldCAhPSAwKQogCQlnb3RvIGVycl9vdXQyOwogCi0JaW5mbygiSXJEQTogUmVnaXN0ZXJlZCBTaWdtYVRlbCBkZXZpY2UgJXMiLCBuZXQtPm5hbWUpOworCWRldl9pbmZvKCZpbnRmLT5kZXYsICJJckRBOiBSZWdpc3RlcmVkIFNpZ21hVGVsIGRldmljZSAlc1xuIiwKKwkJIG5ldC0+bmFtZSk7CiAKIAl1c2Jfc2V0X2ludGZkYXRhKGludGYsIHN0aXIpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9peGdiZS9peGdiZS5oIGIvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmUuaAppbmRleCAyMTk4Yjc3Li5lMTE2ZDM0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9peGdiZS9peGdiZS5oCisrKyBiL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlLmgKQEAgLTM2LDcgKzM2LDcgQEAKICNpbmNsdWRlICJpeGdiZV90eXBlLmgiCiAjaW5jbHVkZSAiaXhnYmVfY29tbW9uLmgiCiAKLSNpZiBkZWZpbmVkKENPTkZJR19EQ0EpIHx8IGRlZmluZWQoQ09ORklHX0RDQV9NT0RVTEUpCisjaWZkZWYgQ09ORklHX0lYR0JFX0RDQQogI2luY2x1ZGUgPGxpbnV4L2RjYS5oPgogI2VuZGlmCiAKQEAgLTEzNiw3ICsxMzYsNyBAQAogCQkgICAgICAqIG9mZnNldCBhc3NvY2lhdGVkIHdpdGggdGhpcyByaW5nLCB3aGljaCBpcyBkaWZmZXJlbnQKIAkJICAgICAgKiBmb3IgRENFIGFuZCBSU1MgbW9kZXMgKi8KIAotI2lmIGRlZmluZWQoQ09ORklHX0RDQSkgfHwgZGVmaW5lZChDT05GSUdfRENBX01PRFVMRSkKKyNpZmRlZiBDT05GSUdfSVhHQkVfRENBCiAJLyogY3B1IGZvciB0eCBxdWV1ZSAqLwogCWludCBjcHU7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX21haW4uYyBiL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX21haW4uYwppbmRleCBjYTE3YWY0Li43NTQ4ZmI3MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX21haW4uYwpAQCAtODAsNyArODAsNyBAQAogfTsKIE1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBpeGdiZV9wY2lfdGJsKTsKIAotI2lmIGRlZmluZWQoQ09ORklHX0RDQSkgfHwgZGVmaW5lZChDT05GSUdfRENBX01PRFVMRSkKKyNpZmRlZiBDT05GSUdfSVhHQkVfRENBCiBzdGF0aWMgaW50IGl4Z2JlX25vdGlmeV9kY2Eoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICosIHVuc2lnbmVkIGxvbmcgZXZlbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqcCk7CiBzdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIGRjYV9ub3RpZmllciA9IHsKQEAgLTI5Niw3ICsyOTYsNyBAQAogCXJldHVybiAodG90YWxfcGFja2V0cyA/IHRydWUgOiBmYWxzZSk7CiB9CiAKLSNpZiBkZWZpbmVkKENPTkZJR19EQ0EpIHx8IGRlZmluZWQoQ09ORklHX0RDQV9NT0RVTEUpCisjaWZkZWYgQ09ORklHX0lYR0JFX0RDQQogc3RhdGljIHZvaWQgaXhnYmVfdXBkYXRlX3J4X2RjYShzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGl4Z2JlX3JpbmcgKnJ4X3JpbmcpCiB7CkBAIC0zODMsNyArMzgzLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotI2VuZGlmIC8qIENPTkZJR19EQ0Egb3IgQ09ORklHX0RDQV9NT0RVTEUgKi8KKyNlbmRpZiAvKiBDT05GSUdfSVhHQkVfRENBICovCiAvKioKICAqIGl4Z2JlX3JlY2VpdmVfc2tiIC0gU2VuZCBhIGNvbXBsZXRlZCBwYWNrZXQgdXAgdGhlIHN0YWNrCiAgKiBAYWRhcHRlcjogYm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmUKQEAgLTk0Nyw3ICs5NDcsNyBAQAogCXJfaWR4ID0gZmluZF9maXJzdF9iaXQocV92ZWN0b3ItPnR4cl9pZHgsIGFkYXB0ZXItPm51bV90eF9xdWV1ZXMpOwogCWZvciAoaSA9IDA7IGkgPCBxX3ZlY3Rvci0+dHhyX2NvdW50OyBpKyspIHsKIAkJdHhfcmluZyA9ICYoYWRhcHRlci0+dHhfcmluZ1tyX2lkeF0pOwotI2lmIGRlZmluZWQoQ09ORklHX0RDQSkgfHwgZGVmaW5lZChDT05GSUdfRENBX01PRFVMRSkKKyNpZmRlZiBDT05GSUdfSVhHQkVfRENBCiAJCWlmIChhZGFwdGVyLT5mbGFncyAmIElYR0JFX0ZMQUdfRENBX0VOQUJMRUQpCiAJCQlpeGdiZV91cGRhdGVfdHhfZGNhKGFkYXB0ZXIsIHR4X3JpbmcpOwogI2VuZGlmCkBAIC0xMDIyLDcgKzEwMjIsNyBAQAogCiAJcl9pZHggPSBmaW5kX2ZpcnN0X2JpdChxX3ZlY3Rvci0+cnhyX2lkeCwgYWRhcHRlci0+bnVtX3J4X3F1ZXVlcyk7CiAJcnhfcmluZyA9ICYoYWRhcHRlci0+cnhfcmluZ1tyX2lkeF0pOwotI2lmIGRlZmluZWQoQ09ORklHX0RDQSkgfHwgZGVmaW5lZChDT05GSUdfRENBX01PRFVMRSkKKyNpZmRlZiBDT05GSUdfSVhHQkVfRENBCiAJaWYgKGFkYXB0ZXItPmZsYWdzICYgSVhHQkVfRkxBR19EQ0FfRU5BQkxFRCkKIAkJaXhnYmVfdXBkYXRlX3J4X2RjYShhZGFwdGVyLCByeF9yaW5nKTsKICNlbmRpZgpAQCAtMTA2Niw3ICsxMDY2LDcgQEAKIAlyX2lkeCA9IGZpbmRfZmlyc3RfYml0KHFfdmVjdG9yLT5yeHJfaWR4LCBhZGFwdGVyLT5udW1fcnhfcXVldWVzKTsKIAlmb3IgKGkgPSAwOyBpIDwgcV92ZWN0b3ItPnJ4cl9jb3VudDsgaSsrKSB7CiAJCXJ4X3JpbmcgPSAmKGFkYXB0ZXItPnJ4X3Jpbmdbcl9pZHhdKTsKLSNpZiBkZWZpbmVkKENPTkZJR19EQ0EpIHx8IGRlZmluZWQoQ09ORklHX0RDQV9NT0RVTEUpCisjaWZkZWYgQ09ORklHX0lYR0JFX0RDQQogCQlpZiAoYWRhcHRlci0+ZmxhZ3MgJiBJWEdCRV9GTEFHX0RDQV9FTkFCTEVEKQogCQkJaXhnYmVfdXBkYXRlX3J4X2RjYShhZGFwdGVyLCByeF9yaW5nKTsKICNlbmRpZgpAQCAtMjE1NSw3ICsyMTU1LDcgQEAKIAogCW5ldGlmX2NhcnJpZXJfb2ZmKG5ldGRldik7CiAKLSNpZiBkZWZpbmVkKENPTkZJR19EQ0EpIHx8IGRlZmluZWQoQ09ORklHX0RDQV9NT0RVTEUpCisjaWZkZWYgQ09ORklHX0lYR0JFX0RDQQogCWlmIChhZGFwdGVyLT5mbGFncyAmIElYR0JFX0ZMQUdfRENBX0VOQUJMRUQpIHsKIAkJYWRhcHRlci0+ZmxhZ3MgJj0gfklYR0JFX0ZMQUdfRENBX0VOQUJMRUQ7CiAJCWRjYV9yZW1vdmVfcmVxdWVzdGVyKCZhZGFwdGVyLT5wZGV2LT5kZXYpOwpAQCAtMjE2Nyw3ICsyMTY3LDcgQEAKIAlpeGdiZV9jbGVhbl9hbGxfdHhfcmluZ3MoYWRhcHRlcik7CiAJaXhnYmVfY2xlYW5fYWxsX3J4X3JpbmdzKGFkYXB0ZXIpOwogCi0jaWYgZGVmaW5lZChDT05GSUdfRENBKSB8fCBkZWZpbmVkKENPTkZJR19EQ0FfTU9EVUxFKQorI2lmZGVmIENPTkZJR19JWEdCRV9EQ0EKIAkvKiBzaW5jZSB3ZSByZXNldCB0aGUgaGFyZHdhcmUgRENBIHNldHRpbmdzIHdlcmUgY2xlYXJlZCAqLwogCWlmIChkY2FfYWRkX3JlcXVlc3RlcigmYWRhcHRlci0+cGRldi0+ZGV2KSA9PSAwKSB7CiAJCWFkYXB0ZXItPmZsYWdzIHw9IElYR0JFX0ZMQUdfRENBX0VOQUJMRUQ7CkBAIC0yMTkzLDcgKzIxOTMsNyBAQAogCXN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyID0gcV92ZWN0b3ItPmFkYXB0ZXI7CiAJaW50IHR4X2NsZWFuZWQsIHdvcmtfZG9uZSA9IDA7CiAKLSNpZiBkZWZpbmVkKENPTkZJR19EQ0EpIHx8IGRlZmluZWQoQ09ORklHX0RDQV9NT0RVTEUpCisjaWZkZWYgQ09ORklHX0lYR0JFX0RDQQogCWlmIChhZGFwdGVyLT5mbGFncyAmIElYR0JFX0ZMQUdfRENBX0VOQUJMRUQpIHsKIAkJaXhnYmVfdXBkYXRlX3R4X2RjYShhZGFwdGVyLCBhZGFwdGVyLT50eF9yaW5nKTsKIAkJaXhnYmVfdXBkYXRlX3J4X2RjYShhZGFwdGVyLCBhZGFwdGVyLT5yeF9yaW5nKTsKQEAgLTM5MjIsNyArMzkyMiw3IEBACiAJaWYgKGVycikKIAkJZ290byBlcnJfcmVnaXN0ZXI7CiAKLSNpZiBkZWZpbmVkKENPTkZJR19EQ0EpIHx8IGRlZmluZWQoQ09ORklHX0RDQV9NT0RVTEUpCisjaWZkZWYgQ09ORklHX0lYR0JFX0RDQQogCWlmIChkY2FfYWRkX3JlcXVlc3RlcigmcGRldi0+ZGV2KSA9PSAwKSB7CiAJCWFkYXB0ZXItPmZsYWdzIHw9IElYR0JFX0ZMQUdfRENBX0VOQUJMRUQ7CiAJCS8qIGFsd2F5cyB1c2UgQ0IyIG1vZGUsIGRpZmZlcmVuY2UgaXMgbWFza2VkCkBAIC0zOTcyLDcgKzM5NzIsNyBAQAogCiAJZmx1c2hfc2NoZWR1bGVkX3dvcmsoKTsKIAotI2lmIGRlZmluZWQoQ09ORklHX0RDQSkgfHwgZGVmaW5lZChDT05GSUdfRENBX01PRFVMRSkKKyNpZmRlZiBDT05GSUdfSVhHQkVfRENBCiAJaWYgKGFkYXB0ZXItPmZsYWdzICYgSVhHQkVfRkxBR19EQ0FfRU5BQkxFRCkgewogCQlhZGFwdGVyLT5mbGFncyAmPSB+SVhHQkVfRkxBR19EQ0FfRU5BQkxFRDsKIAkJZGNhX3JlbW92ZV9yZXF1ZXN0ZXIoJnBkZXYtPmRldik7CkBAIC00MTA1LDEwICs0MTA1LDEwIEBACiAKIAlwcmludGsoS0VSTl9JTkZPICIlczogJXNcbiIsIGl4Z2JlX2RyaXZlcl9uYW1lLCBpeGdiZV9jb3B5cmlnaHQpOwogCi0jaWYgZGVmaW5lZChDT05GSUdfRENBKSB8fCBkZWZpbmVkKENPTkZJR19EQ0FfTU9EVUxFKQorI2lmZGVmIENPTkZJR19JWEdCRV9EQ0EKIAlkY2FfcmVnaXN0ZXJfbm90aWZ5KCZkY2Ffbm90aWZpZXIpOwotCiAjZW5kaWYKKwogCXJldCA9IHBjaV9yZWdpc3Rlcl9kcml2ZXIoJml4Z2JlX2RyaXZlcik7CiAJcmV0dXJuIHJldDsKIH0KQEAgLTQxMjMsMTMgKzQxMjMsMTMgQEAKICAqKi8KIHN0YXRpYyB2b2lkIF9fZXhpdCBpeGdiZV9leGl0X21vZHVsZSh2b2lkKQogewotI2lmIGRlZmluZWQoQ09ORklHX0RDQSkgfHwgZGVmaW5lZChDT05GSUdfRENBX01PRFVMRSkKKyNpZmRlZiBDT05GSUdfSVhHQkVfRENBCiAJZGNhX3VucmVnaXN0ZXJfbm90aWZ5KCZkY2Ffbm90aWZpZXIpOwogI2VuZGlmCiAJcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZpeGdiZV9kcml2ZXIpOwogfQogCi0jaWYgZGVmaW5lZChDT05GSUdfRENBKSB8fCBkZWZpbmVkKENPTkZJR19EQ0FfTU9EVUxFKQorI2lmZGVmIENPTkZJR19JWEdCRV9EQ0EKIHN0YXRpYyBpbnQgaXhnYmVfbm90aWZ5X2RjYShzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLCB1bnNpZ25lZCBsb25nIGV2ZW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnApCiB7CkBAIC00MTQwLDcgKzQxNDAsNyBAQAogCiAJcmV0dXJuIHJldF92YWwgPyBOT1RJRllfQkFEIDogTk9USUZZX0RPTkU7CiB9Ci0jZW5kaWYgLyogQ09ORklHX0RDQSBvciBDT05GSUdfRENBX01PRFVMRSAqLworI2VuZGlmIC8qIENPTkZJR19JWEdCRV9EQ0EgKi8KIAogbW9kdWxlX2V4aXQoaXhnYmVfZXhpdF9tb2R1bGUpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9qbWUuYyBiL2RyaXZlcnMvbmV0L2ptZS5jCmluZGV4IDVmOWExMzEuLjgxYzZjZGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2ptZS5jCisrKyBiL2RyaXZlcnMvbmV0L2ptZS5jCkBAIC0yMSw3ICsyMSw2IEBACiAgKgogICovCiAKLSNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CkBAIC0zOCw2ICszNyw3IEBACiAjaW5jbHVkZSA8bGludXgvdGNwLmg+CiAjaW5jbHVkZSA8bGludXgvdWRwLmg+CiAjaW5jbHVkZSA8bGludXgvaWZfdmxhbi5oPgorI2luY2x1ZGUgPG5ldC9pcDZfY2hlY2tzdW0uaD4KICNpbmNsdWRlICJqbWUuaCIKIAogc3RhdGljIGludCBmb3JjZV9wc2V1ZG9ocCA9IC0xOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbWFjbWFjZS5jIGIvZHJpdmVycy9uZXQvbWFjbWFjZS5jCmluZGV4IDUxYWQzNzYuLjg1NTg3YTY2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9tYWNtYWNlLmMKKysrIGIvZHJpdmVycy9uZXQvbWFjbWFjZS5jCkBAIC05LDcgKzksNyBAQAogICoJMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICAqCiAgKglDb3B5cmlnaHQgKEMpIDE5OTYgUGF1bCBNYWNrZXJyYXMuCi0gKglDb3B5cmlnaHQgKEMpIDE5OTggQWxhbiBDb3ggPGFsYW5AcmVkaGF0LmNvbT4KKyAqCUNvcHlyaWdodCAoQykgMTk5OCBBbGFuIENveCA8YWxhbkBseG9yZ3VrLnVrdXUub3JnLnVrPgogICoKICAqCU1vZGlmaWVkIGhlYXZpbHkgYnkgSm9zaHVhIE0uIFRob21wc29uIGJhc2VkIG9uIERhdmUgSHVhbmcncyBOZXRCU0QgZHJpdmVyCiAgKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbXlyaTEwZ2UvbXlyaTEwZ2UuYyBiL2RyaXZlcnMvbmV0L215cmkxMGdlL215cmkxMGdlLmMKaW5kZXggNmRjZTkwMS4uYTlhZWJhZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbXlyaTEwZ2UvbXlyaTEwZ2UuYworKysgYi9kcml2ZXJzL25ldC9teXJpMTBnZS9teXJpMTBnZS5jCkBAIC0xODgsNyArMTg4LDcgQEAKIAlkbWFfYWRkcl90IGZ3X3N0YXRzX2J1czsKIAlpbnQgd2F0Y2hkb2dfdHhfZG9uZTsKIAlpbnQgd2F0Y2hkb2dfdHhfcmVxOwotI2lmIChkZWZpbmVkIENPTkZJR19EQ0EpIHx8IChkZWZpbmVkIENPTkZJR19EQ0FfTU9EVUxFKQorI2lmZGVmIENPTkZJR19NWVJJMTBHRV9EQ0EKIAlpbnQgY2FjaGVkX2RjYV90YWc7CiAJaW50IGNwdTsKIAlfX2JlMzIgX19pb21lbSAqZGNhX3RhZzsKQEAgLTIyMCw3ICsyMjAsNyBAQAogCWludCBtc2lfZW5hYmxlZDsKIAlpbnQgbXNpeF9lbmFibGVkOwogCXN0cnVjdCBtc2l4X2VudHJ5ICptc2l4X3ZlY3RvcnM7Ci0jaWYgKGRlZmluZWQgQ09ORklHX0RDQSkgfHwgKGRlZmluZWQgQ09ORklHX0RDQV9NT0RVTEUpCisjaWZkZWYgQ09ORklHX01ZUkkxMEdFX0RDQQogCWludCBkY2FfZW5hYmxlZDsKICNlbmRpZgogCXUzMiBsaW5rX3N0YXRlOwpAQCAtOTAyLDcgKzkwMiw3IEBACiAJc3RydWN0IG15cmkxMGdlX3NsaWNlX3N0YXRlICpzczsKIAlpbnQgaSwgc3RhdHVzOwogCXNpemVfdCBieXRlczsKLSNpZiAoZGVmaW5lZCBDT05GSUdfRENBKSB8fCAoZGVmaW5lZCBDT05GSUdfRENBX01PRFVMRSkKKyNpZmRlZiBDT05GSUdfTVlSSTEwR0VfRENBCiAJdW5zaWduZWQgbG9uZyBkY2FfdGFnX29mZjsKICNlbmRpZgogCkBAIC0xMDEyLDcgKzEwMTIsNyBAQAogCX0KIAlwdXRfYmUzMihodG9ubChtZ3AtPmludHJfY29hbF9kZWxheSksIG1ncC0+aW50cl9jb2FsX2RlbGF5X3B0cik7CiAKLSNpZiAoZGVmaW5lZCBDT05GSUdfRENBKSB8fCAoZGVmaW5lZCBDT05GSUdfRENBX01PRFVMRSkKKyNpZmRlZiBDT05GSUdfTVlSSTEwR0VfRENBCiAJc3RhdHVzID0gbXlyaTEwZ2Vfc2VuZF9jbWQobWdwLCBNWEdFRldfQ01EX0dFVF9EQ0FfT0ZGU0VULCAmY21kLCAwKTsKIAlkY2FfdGFnX29mZiA9IGNtZC5kYXRhMDsKIAlmb3IgKGkgPSAwOyBpIDwgbWdwLT5udW1fc2xpY2VzOyBpKyspIHsKQEAgLTEwNTEsNyArMTA1MSw3IEBACiAJcmV0dXJuIHN0YXR1czsKIH0KIAotI2lmIChkZWZpbmVkIENPTkZJR19EQ0EpIHx8IChkZWZpbmVkIENPTkZJR19EQ0FfTU9EVUxFKQorI2lmZGVmIENPTkZJR19NWVJJMTBHRV9EQ0EKIHN0YXRpYyB2b2lkCiBteXJpMTBnZV93cml0ZV9kY2Eoc3RydWN0IG15cmkxMGdlX3NsaWNlX3N0YXRlICpzcywgaW50IGNwdSwgaW50IHRhZykKIHsKQEAgLTE1MDUsNyArMTUwNSw3IEBACiAJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IHNzLT5tZ3AtPmRldjsKIAlpbnQgd29ya19kb25lOwogCi0jaWYgKGRlZmluZWQgQ09ORklHX0RDQSkgfHwgKGRlZmluZWQgQ09ORklHX0RDQV9NT0RVTEUpCisjaWZkZWYgQ09ORklHX01ZUkkxMEdFX0RDQQogCWlmIChzcy0+bWdwLT5kY2FfZW5hYmxlZCkKIAkJbXlyaTEwZ2VfdXBkYXRlX2RjYShzcyk7CiAjZW5kaWYKQEAgLTE3MzYsNyArMTczNiw3IEBACiAJInR4X2JvdW5kYXJ5IiwgIldDIiwgImlycSIsICJNU0kiLCAiTVNJWCIsCiAJInJlYWRfZG1hX2J3X01CcyIsICJ3cml0ZV9kbWFfYndfTUJzIiwgInJlYWRfd3JpdGVfZG1hX2J3X01CcyIsCiAJInNlcmlhbF9udW1iZXIiLCAid2F0Y2hkb2dfcmVzZXRzIiwKLSNpZiAoZGVmaW5lZCBDT05GSUdfRENBKSB8fCAoZGVmaW5lZCBDT05GSUdfRENBX01PRFVMRSkKKyNpZmRlZiBDT05GSUdfTVlSSTEwR0VfRENBCiAJImRjYV9jYXBhYmxlX2Zpcm13YXJlIiwgImRjYV9kZXZpY2VfcHJlc2VudCIsCiAjZW5kaWYKIAkibGlua19jaGFuZ2VzIiwgImxpbmtfdXAiLCAiZHJvcHBlZF9saW5rX292ZXJmbG93IiwKQEAgLTE4MTUsNyArMTgxNSw3IEBACiAJZGF0YVtpKytdID0gKHVuc2lnbmVkIGludCltZ3AtPnJlYWRfd3JpdGVfZG1hOwogCWRhdGFbaSsrXSA9ICh1bnNpZ25lZCBpbnQpbWdwLT5zZXJpYWxfbnVtYmVyOwogCWRhdGFbaSsrXSA9ICh1bnNpZ25lZCBpbnQpbWdwLT53YXRjaGRvZ19yZXNldHM7Ci0jaWYgKGRlZmluZWQgQ09ORklHX0RDQSkgfHwgKGRlZmluZWQgQ09ORklHX0RDQV9NT0RVTEUpCisjaWZkZWYgQ09ORklHX01ZUkkxMEdFX0RDQQogCWRhdGFbaSsrXSA9ICh1bnNpZ25lZCBpbnQpKG1ncC0+c3NbMF0uZGNhX3RhZyAhPSBOVUxMKTsKIAlkYXRhW2krK10gPSAodW5zaWduZWQgaW50KShtZ3AtPmRjYV9lbmFibGVkKTsKICNlbmRpZgpAQCAtMzg0NCw3ICszODQ0LDcgQEAKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHJlc2V0XG4iKTsKIAkJZ290byBhYm9ydF93aXRoX3NsaWNlczsKIAl9Ci0jaWYgKGRlZmluZWQgQ09ORklHX0RDQSkgfHwgKGRlZmluZWQgQ09ORklHX0RDQV9NT0RVTEUpCisjaWZkZWYgQ09ORklHX01ZUkkxMEdFX0RDQQogCW15cmkxMGdlX3NldHVwX2RjYShtZ3ApOwogI2VuZGlmCiAJcGNpX3NldF9kcnZkYXRhKHBkZXYsIG1ncCk7CkBAIC0zOTQ4LDcgKzM5NDgsNyBAQAogCW5ldGRldiA9IG1ncC0+ZGV2OwogCXVucmVnaXN0ZXJfbmV0ZGV2KG5ldGRldik7CiAKLSNpZiAoZGVmaW5lZCBDT05GSUdfRENBKSB8fCAoZGVmaW5lZCBDT05GSUdfRENBX01PRFVMRSkKKyNpZmRlZiBDT05GSUdfTVlSSTEwR0VfRENBCiAJbXlyaTEwZ2VfdGVhcmRvd25fZGNhKG1ncCk7CiAjZW5kaWYKIAlteXJpMTBnZV9kdW1teV9yZG1hKG1ncCwgMCk7CkBAIC0zOTkzLDcgKzM5OTMsNyBAQAogI2VuZGlmCiB9OwogCi0jaWYgKGRlZmluZWQgQ09ORklHX0RDQSkgfHwgKGRlZmluZWQgQ09ORklHX0RDQV9NT0RVTEUpCisjaWZkZWYgQ09ORklHX01ZUkkxMEdFX0RDQQogc3RhdGljIGludAogbXlyaTEwZ2Vfbm90aWZ5X2RjYShzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLCB1bnNpZ25lZCBsb25nIGV2ZW50LCB2b2lkICpwKQogewpAQCAtNDAyNCw3ICs0MDI0LDcgQEAKIAkJICAgICAgIG15cmkxMGdlX2RyaXZlci5uYW1lLCBteXJpMTBnZV9yc3NfaGFzaCk7CiAJCW15cmkxMGdlX3Jzc19oYXNoID0gTVhHRUZXX1JTU19IQVNIX1RZUEVfU1JDX1BPUlQ7CiAJfQotI2lmIChkZWZpbmVkIENPTkZJR19EQ0EpIHx8IChkZWZpbmVkIENPTkZJR19EQ0FfTU9EVUxFKQorI2lmZGVmIENPTkZJR19NWVJJMTBHRV9EQ0EKIAlkY2FfcmVnaXN0ZXJfbm90aWZ5KCZteXJpMTBnZV9kY2Ffbm90aWZpZXIpOwogI2VuZGlmCiAJaWYgKG15cmkxMGdlX21heF9zbGljZXMgPiBNWVJJMTBHRV9NQVhfU0xJQ0VTKQpAQCAtNDAzNyw3ICs0MDM3LDcgQEAKIAogc3RhdGljIF9fZXhpdCB2b2lkIG15cmkxMGdlX2NsZWFudXBfbW9kdWxlKHZvaWQpCiB7Ci0jaWYgKGRlZmluZWQgQ09ORklHX0RDQSkgfHwgKGRlZmluZWQgQ09ORklHX0RDQV9NT0RVTEUpCisjaWZkZWYgQ09ORklHX01ZUkkxMEdFX0RDQQogCWRjYV91bnJlZ2lzdGVyX25vdGlmeSgmbXlyaTEwZ2VfZGNhX25vdGlmaWVyKTsKICNlbmRpZgogCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmbXlyaTEwZ2VfZHJpdmVyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BjbWNpYS8zYzU3NF9jcy5jIGIvZHJpdmVycy9uZXQvcGNtY2lhLzNjNTc0X2NzLmMKaW5kZXggNzExMmZkNS4uMDhjNGRkOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcGNtY2lhLzNjNTc0X2NzLmMKKysrIGIvZHJpdmVycy9uZXQvcGNtY2lhLzNjNTc0X2NzLmMKQEAgLTM1NSw5ICszNTUsMTAgQEAKIAlmb3IgKGkgPSBqID0gMDsgaiA8IDB4NDAwOyBqICs9IDB4MjApIHsKIAkJbGluay0+aW8uQmFzZVBvcnQxID0gaiBeIDB4MzAwOwogCQlpID0gcGNtY2lhX3JlcXVlc3RfaW8obGluaywgJmxpbmstPmlvKTsKLQkJaWYgKGkgPT0gQ1NfU1VDQ0VTUykgYnJlYWs7CisJCWlmIChpID09IDApCisJCQlicmVhazsKIAl9Ci0JaWYgKGkgIT0gQ1NfU1VDQ0VTUykgeworCWlmIChpICE9IDApIHsKIAkJY3NfZXJyb3IobGluaywgUmVxdWVzdElPLCBpKTsKIAkJZ290byBmYWlsZWQ7CiAJfQpAQCAtMzc3LDcgKzM3OCw3IEBACiAJdHVwbGUuVHVwbGVEYXRhTWF4ID0gNjQ7CiAJdHVwbGUuVHVwbGVPZmZzZXQgPSAwOwogCXR1cGxlLkRlc2lyZWRUdXBsZSA9IDB4ODg7Ci0JaWYgKHBjbWNpYV9nZXRfZmlyc3RfdHVwbGUobGluaywgJnR1cGxlKSA9PSBDU19TVUNDRVNTKSB7CisJaWYgKHBjbWNpYV9nZXRfZmlyc3RfdHVwbGUobGluaywgJnR1cGxlKSA9PSAwKSB7CiAJCXBjbWNpYV9nZXRfdHVwbGVfZGF0YShsaW5rLCAmdHVwbGUpOwogCQlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKQogCQkJcGh5c19hZGRyW2ldID0gaHRvbnMobGUxNl90b19jcHUoYnVmW2ldKSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wY21jaWEvM2M1ODlfY3MuYyBiL2RyaXZlcnMvbmV0L3BjbWNpYS8zYzU4OV9jcy5jCmluZGV4IDU0OWE2NDUuLmMyMzVjZGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BjbWNpYS8zYzU4OV9jcy5jCisrKyBiL2RyaXZlcnMvbmV0L3BjbWNpYS8zYzU4OV9jcy5jCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgaW5jb3Jwb3JhdGVkIGhlcmVpbiBieSByZWZlcmVuY2UuCiAgICAgRG9uYWxkIEJlY2tlciBtYXkgYmUgcmVhY2hlZCBhdCBiZWNrZXJAc2N5bGQuY29tCiAgICAgCi0gICAgVXBkYXRlZCBmb3IgMi41LnggYnkgQWxhbiBDb3ggPGFsYW5AcmVkaGF0LmNvbT4KKyAgICBVcGRhdGVkIGZvciAyLjUueCBieSBBbGFuIENveCA8YWxhbkBseG9yZ3VrLnVrdXUub3JnLnVrPgogCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIApAQCAtMjc4LDkgKzI3OCwxMCBAQAogCWlmIChtdWx0aSAmJiAoaiAmIDB4ODApKSBjb250aW51ZTsKIAlsaW5rLT5pby5CYXNlUG9ydDEgPSBqIF4gMHgzMDA7CiAJaSA9IHBjbWNpYV9yZXF1ZXN0X2lvKGxpbmssICZsaW5rLT5pbyk7Ci0JaWYgKGkgPT0gQ1NfU1VDQ0VTUykgYnJlYWs7CisJaWYgKGkgPT0gMCkKKwkJYnJlYWs7CiAgICAgfQotICAgIGlmIChpICE9IENTX1NVQ0NFU1MpIHsKKyAgICBpZiAoaSAhPSAwKSB7CiAJY3NfZXJyb3IobGluaywgUmVxdWVzdElPLCBpKTsKIAlnb3RvIGZhaWxlZDsKICAgICB9CkBAIC0yOTUsNyArMjk2LDcgQEAKICAgICAvKiBUaGUgM2M1ODkgaGFzIGFuIGV4dHJhIEVFUFJPTSBmb3IgY29uZmlndXJhdGlvbiBpbmZvLCBpbmNsdWRpbmcKICAgICAgICB0aGUgaGFyZHdhcmUgYWRkcmVzcy4gIFRoZSAzYzU2MiBwdXRzIHRoZSBhZGRyZXNzIGluIHRoZSBDSVMuICovCiAgICAgdHVwbGUuRGVzaXJlZFR1cGxlID0gMHg4ODsKLSAgICBpZiAocGNtY2lhX2dldF9maXJzdF90dXBsZShsaW5rLCAmdHVwbGUpID09IENTX1NVQ0NFU1MpIHsKKyAgICBpZiAocGNtY2lhX2dldF9maXJzdF90dXBsZShsaW5rLCAmdHVwbGUpID09IDApIHsKIAlwY21jaWFfZ2V0X3R1cGxlX2RhdGEobGluaywgJnR1cGxlKTsKIAlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKQogCSAgICBwaHlzX2FkZHJbaV0gPSBodG9ucyhsZTE2X3RvX2NwdShidWZbaV0pKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BjbWNpYS9LY29uZmlnIGIvZHJpdmVycy9uZXQvcGNtY2lhL0tjb25maWcKaW5kZXggZThmNTVkOC4uOWI4Zjc5MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcGNtY2lhL0tjb25maWcKKysrIGIvZHJpdmVycy9uZXQvcGNtY2lhL0tjb25maWcKQEAgLTExMSw3ICsxMTEsNyBAQAogCiBjb25maWcgUENNQ0lBX0lCTVRSCiAJdHJpc3RhdGUgIklCTSBQQ01DSUEgdG9rZW5yaW5nIGFkYXB0ZXIgc3VwcG9ydCIKLQlkZXBlbmRzIG9uIElCTVRSIT15ICYmIFRSICYmICE2NEJJVAorCWRlcGVuZHMgb24gSUJNVFIhPXkgJiYgVFIKIAloZWxwCiAJICBTYXkgWSBoZXJlIGlmIHlvdSBpbnRlbmQgdG8gYXR0YWNoIHRoaXMgdHlwZSBvZiBUb2tlbiBSaW5nIFBDTUNJQQogCSAgY2FyZCB0byB5b3VyIGNvbXB1dGVyLiBZb3UgdGhlbiBhbHNvIG5lZWQgdG8gc2F5IFkgdG8gIlRva2VuIFJpbmcKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BjbWNpYS9heG5ldF9jcy5jIGIvZHJpdmVycy9uZXQvcGNtY2lhL2F4bmV0X2NzLmMKaW5kZXggNTJiZjExYi4uYjM3YTQ5OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcGNtY2lhL2F4bmV0X2NzLmMKKysrIGIvZHJpdmVycy9uZXQvcGNtY2lhL2F4bmV0X2NzLmMKQEAgLTI2Miw3ICsyNjIsNyBAQAogCWlmIChsaW5rLT5pby5OdW1Qb3J0czIgPiAwKSB7CiAJICAgIC8qIGZvciBtYXN0ZXIvc2xhdmUgbXVsdGlmdW5jdGlvbiBjYXJkcyAqLwogCSAgICBsaW5rLT5pby5BdHRyaWJ1dGVzMiA9IElPX0RBVEFfUEFUSF9XSURUSF84OwotCSAgICBsaW5rLT5pcnEuQXR0cmlidXRlcyA9IAorCSAgICBsaW5rLT5pcnEuQXR0cmlidXRlcyA9CiAJCUlSUV9UWVBFX0RZTkFNSUNfU0hBUklOR3xJUlFfRklSU1RfU0hBUkVEOwogCX0KICAgICB9IGVsc2UgewpAQCAtMjc2LDcgKzI3Niw4IEBACiAJICAgIGxpbmstPmlvLkJhc2VQb3J0MSA9IGogXiAweDMwMDsKIAkgICAgbGluay0+aW8uQmFzZVBvcnQyID0gKGogXiAweDMwMCkgKyAweDEwOwogCSAgICByZXQgPSBwY21jaWFfcmVxdWVzdF9pbyhsaW5rLCAmbGluay0+aW8pOwotCSAgICBpZiAocmV0ID09IENTX1NVQ0NFU1MpIHJldHVybiByZXQ7CisJICAgIGlmIChyZXQgPT0gMCkKKwkJICAgIHJldHVybiByZXQ7CiAJfQogCXJldHVybiByZXQ7CiAgICAgfSBlbHNlIHsKQEAgLTI4NCw1OSArMjg1LDUwIEBACiAgICAgfQogfQogCitzdGF0aWMgaW50IGF4bmV0X2NvbmZpZ2NoZWNrKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldiwKKwkJCSAgICAgY2lzdHBsX2NmdGFibGVfZW50cnlfdCAqY2ZnLAorCQkJICAgICBjaXN0cGxfY2Z0YWJsZV9lbnRyeV90ICpkZmx0LAorCQkJICAgICB1bnNpZ25lZCBpbnQgdmNjLAorCQkJICAgICB2b2lkICpwcml2X2RhdGEpCit7CisJaW50IGk7CisJY2lzdHBsX2lvX3QgKmlvID0gJmNmZy0+aW87CisKKwlpZiAoY2ZnLT5pbmRleCA9PSAwIHx8IGNmZy0+aW8ubndpbiA9PSAwKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCXBfZGV2LT5jb25mLkNvbmZpZ0luZGV4ID0gMHgwNTsKKwkvKiBGb3IgbXVsdGlmdW5jdGlvbiBjYXJkcywgYnkgY29udmVudGlvbiwgd2UgY29uZmlndXJlIHRoZQorCSAgIG5ldHdvcmsgZnVuY3Rpb24gd2l0aCB3aW5kb3cgMCwgYW5kIHNlcmlhbCB3aXRoIHdpbmRvdyAxICovCisJaWYgKGlvLT5ud2luID4gMSkgeworCQlpID0gKGlvLT53aW5bMV0ubGVuID4gaW8tPndpblswXS5sZW4pOworCQlwX2Rldi0+aW8uQmFzZVBvcnQyID0gaW8tPndpblsxLWldLmJhc2U7CisJCXBfZGV2LT5pby5OdW1Qb3J0czIgPSBpby0+d2luWzEtaV0ubGVuOworCX0gZWxzZSB7CisJCWkgPSBwX2Rldi0+aW8uTnVtUG9ydHMyID0gMDsKKwl9CisJcF9kZXYtPmlvLkJhc2VQb3J0MSA9IGlvLT53aW5baV0uYmFzZTsKKwlwX2Rldi0+aW8uTnVtUG9ydHMxID0gaW8tPndpbltpXS5sZW47CisJcF9kZXYtPmlvLklPQWRkckxpbmVzID0gaW8tPmZsYWdzICYgQ0lTVFBMX0lPX0xJTkVTX01BU0s7CisJaWYgKHBfZGV2LT5pby5OdW1Qb3J0czEgKyBwX2Rldi0+aW8uTnVtUG9ydHMyID49IDMyKQorCQlyZXR1cm4gdHJ5X2lvX3BvcnQocF9kZXYpOworCisJcmV0dXJuIC1FTk9ERVY7Cit9CisKIHN0YXRpYyBpbnQgYXhuZXRfY29uZmlnKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQogewogICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBsaW5rLT5wcml2OwogICAgIGF4bmV0X2Rldl90ICppbmZvID0gUFJJVihkZXYpOwotICAgIHR1cGxlX3QgdHVwbGU7Ci0gICAgY2lzcGFyc2VfdCBwYXJzZTsKICAgICBpbnQgaSwgaiwgbGFzdF9yZXQsIGxhc3RfZm47Ci0gICAgdV9zaG9ydCBidWZbNjRdOwogICAgIERFQ0xBUkVfTUFDX0JVRihtYWMpOwogCiAgICAgREVCVUcoMCwgImF4bmV0X2NvbmZpZygweCVwKVxuIiwgbGluayk7CiAKLSAgICB0dXBsZS5BdHRyaWJ1dGVzID0gMDsKLSAgICB0dXBsZS5UdXBsZURhdGEgPSAoY2lzZGF0YV90ICopYnVmOwotICAgIHR1cGxlLlR1cGxlRGF0YU1heCA9IHNpemVvZihidWYpOwotICAgIHR1cGxlLlR1cGxlT2Zmc2V0ID0gMDsKLQogICAgIC8qIGRvbid0IHRydXN0IHRoZSBDSVMgb24gdGhpczsgTGlua3N5cyBnb3QgaXQgd3JvbmcgKi8KICAgICBsaW5rLT5jb25mLlByZXNlbnQgPSAweDYzOwotCi0gICAgdHVwbGUuRGVzaXJlZFR1cGxlID0gQ0lTVFBMX0NGVEFCTEVfRU5UUlk7Ci0gICAgdHVwbGUuQXR0cmlidXRlcyA9IDA7Ci0gICAgQ1NfQ0hFQ0soR2V0Rmlyc3RUdXBsZSwgcGNtY2lhX2dldF9maXJzdF90dXBsZShsaW5rLCAmdHVwbGUpKTsKLSAgICB3aGlsZSAobGFzdF9yZXQgPT0gQ1NfU1VDQ0VTUykgewotCWNpc3RwbF9jZnRhYmxlX2VudHJ5X3QgKmNmZyA9ICYocGFyc2UuY2Z0YWJsZV9lbnRyeSk7Ci0JY2lzdHBsX2lvX3QgKmlvID0gJihwYXJzZS5jZnRhYmxlX2VudHJ5LmlvKTsKLQkKLQlpZiAocGNtY2lhX2dldF90dXBsZV9kYXRhKGxpbmssICZ0dXBsZSkgIT0gMCB8fAotCQlwY21jaWFfcGFyc2VfdHVwbGUobGluaywgJnR1cGxlLCAmcGFyc2UpICE9IDAgfHwKLQkJY2ZnLT5pbmRleCA9PSAwIHx8IGNmZy0+aW8ubndpbiA9PSAwKQotCSAgICBnb3RvIG5leHRfZW50cnk7Ci0JCi0JbGluay0+Y29uZi5Db25maWdJbmRleCA9IDB4MDU7Ci0JLyogRm9yIG11bHRpZnVuY3Rpb24gY2FyZHMsIGJ5IGNvbnZlbnRpb24sIHdlIGNvbmZpZ3VyZSB0aGUKLQkgICBuZXR3b3JrIGZ1bmN0aW9uIHdpdGggd2luZG93IDAsIGFuZCBzZXJpYWwgd2l0aCB3aW5kb3cgMSAqLwotCWlmIChpby0+bndpbiA+IDEpIHsKLQkgICAgaSA9IChpby0+d2luWzFdLmxlbiA+IGlvLT53aW5bMF0ubGVuKTsKLQkgICAgbGluay0+aW8uQmFzZVBvcnQyID0gaW8tPndpblsxLWldLmJhc2U7Ci0JICAgIGxpbmstPmlvLk51bVBvcnRzMiA9IGlvLT53aW5bMS1pXS5sZW47Ci0JfSBlbHNlIHsKLQkgICAgaSA9IGxpbmstPmlvLk51bVBvcnRzMiA9IDA7Ci0JfQotCWxpbmstPmlvLkJhc2VQb3J0MSA9IGlvLT53aW5baV0uYmFzZTsKLQlsaW5rLT5pby5OdW1Qb3J0czEgPSBpby0+d2luW2ldLmxlbjsKLQlsaW5rLT5pby5JT0FkZHJMaW5lcyA9IGlvLT5mbGFncyAmIENJU1RQTF9JT19MSU5FU19NQVNLOwotCWlmIChsaW5rLT5pby5OdW1Qb3J0czEgKyBsaW5rLT5pby5OdW1Qb3J0czIgPj0gMzIpIHsKLQkgICAgbGFzdF9yZXQgPSB0cnlfaW9fcG9ydChsaW5rKTsKLQkgICAgaWYgKGxhc3RfcmV0ID09IENTX1NVQ0NFU1MpIGJyZWFrOwotCX0KLSAgICBuZXh0X2VudHJ5OgotCWxhc3RfcmV0ID0gcGNtY2lhX2dldF9uZXh0X3R1cGxlKGxpbmssICZ0dXBsZSk7Ci0gICAgfQotICAgIGlmIChsYXN0X3JldCAhPSBDU19TVUNDRVNTKSB7CisgICAgbGFzdF9yZXQgPSBwY21jaWFfbG9vcF9jb25maWcobGluaywgYXhuZXRfY29uZmlnY2hlY2ssIE5VTEwpOworICAgIGlmIChsYXN0X3JldCAhPSAwKSB7CiAJY3NfZXJyb3IobGluaywgUmVxdWVzdElPLCBsYXN0X3JldCk7CiAJZ290byBmYWlsZWQ7CiAgICAgfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGNtY2lhL2NvbTIwMDIwX2NzLmMgYi9kcml2ZXJzL25ldC9wY21jaWEvY29tMjAwMjBfY3MuYwppbmRleCBlYTk0MTRjNC4uODMxMDkwYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcGNtY2lhL2NvbTIwMDIwX2NzLmMKKysrIGIvZHJpdmVycy9uZXQvcGNtY2lhL2NvbTIwMDIwX2NzLmMKQEAgLTI2MCwyMSArMjYwLDIxIEBACiAgICAgREVCVUcoMCwgImNvbTIwMDIwX2NvbmZpZygweCVwKVxuIiwgbGluayk7CiAKICAgICBERUJVRygxLCJhcmNuZXQ6IGJhc2Vwb3J0MSBpcyAlWGhcbiIsIGxpbmstPmlvLkJhc2VQb3J0MSk7Ci0gICAgaSA9ICFDU19TVUNDRVNTOworICAgIGkgPSAtRU5PREVWOwogICAgIGlmICghbGluay0+aW8uQmFzZVBvcnQxKQogICAgIHsKIAlmb3IgKGlvYWRkciA9IDB4MTAwOyBpb2FkZHIgPCAweDQwMDsgaW9hZGRyICs9IDB4MTApCiAJewogCSAgICBsaW5rLT5pby5CYXNlUG9ydDEgPSBpb2FkZHI7CiAJICAgIGkgPSBwY21jaWFfcmVxdWVzdF9pbyhsaW5rLCAmbGluay0+aW8pOwotCSAgICBpZiAoaSA9PSBDU19TVUNDRVNTKQorCSAgICBpZiAoaSA9PSAwKQogCQlicmVhazsKIAl9CiAgICAgfQogICAgIGVsc2UKIAlpID0gcGNtY2lhX3JlcXVlc3RfaW8obGluaywgJmxpbmstPmlvKTsKICAgICAKLSAgICBpZiAoaSAhPSBDU19TVUNDRVNTKQorICAgIGlmIChpICE9IDApCiAgICAgewogCURFQlVHKDEsImFyY25ldDogcmVxdWVzdElPIGZhaWxlZCB0b3RhbGx5IVxuIik7CiAJZ290byBmYWlsZWQ7CkBAIC0yODcsNyArMjg3LDcgQEAKIAkgICBsaW5rLT5pcnEuQXNzaWduZWRJUlEsCiAJICAgbGluay0+aXJxLklSUUluZm8xLCBsaW5rLT5pcnEuSVJRSW5mbzIpOwogICAgIGkgPSBwY21jaWFfcmVxdWVzdF9pcnEobGluaywgJmxpbmstPmlycSk7Ci0gICAgaWYgKGkgIT0gQ1NfU1VDQ0VTUykKKyAgICBpZiAoaSAhPSAwKQogICAgIHsKIAlERUJVRygxLCJhcmNuZXQ6IHJlcXVlc3RJUlEgZmFpbGVkIHRvdGFsbHkhXG4iKTsKIAlnb3RvIGZhaWxlZDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BjbWNpYS9mbXZqMTh4X2NzLmMgYi9kcml2ZXJzL25ldC9wY21jaWEvZm12ajE4eF9jcy5jCmluZGV4IGE1NTBjOWIuLjY5ZDkxNmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BjbWNpYS9mbXZqMTh4X2NzLmMKKysrIGIvZHJpdmVycy9uZXQvcGNtY2lhL2ZtdmoxOHhfY3MuYwpAQCAtMzA5LDcgKzMwOSw4IEBACiAJICAgIHByaW50ayhLRVJOX05PVElDRSAiZm12ajE4eF9jczogb3V0IG9mIHJlc291cmNlIGZvciBzZXJpYWxcbiIpOwogCX0KIAlyZXQgPSBwY21jaWFfcmVxdWVzdF9pbyhsaW5rLCAmbGluay0+aW8pOwotCWlmIChyZXQgPT0gQ1NfU1VDQ0VTUykgcmV0dXJuIHJldDsKKwlpZiAocmV0ID09IDApCisJCXJldHVybiByZXQ7CiAgICAgfQogICAgIHJldHVybiByZXQ7CiB9CkBAIC0zMjUsNyArMzI2LDcgQEAKICAgICBmb3IgKGlvYWRkciA9IDB4MzAwOyBpb2FkZHIgPCAweDNlMDsgaW9hZGRyICs9IDB4MjApIHsKIAlsaW5rLT5pby5CYXNlUG9ydDEgPSBpb2FkZHI7CiAJcmV0ID0gcGNtY2lhX3JlcXVlc3RfaW8obGluaywgJmxpbmstPmlvKTsKLQlpZiAocmV0ID09IENTX1NVQ0NFU1MpIHsKKwlpZiAocmV0ID09IDApIHsKIAkgICAgLyogY2FsY3VsYXRlIENvbmZpZ0luZGV4IHZhbHVlICovCiAJICAgIGxpbmstPmNvbmYuQ29uZmlnSW5kZXggPSAKIAkJKChsaW5rLT5pby5CYXNlUG9ydDEgJiAweDBmMCkgPj4gMykgfCAweDIyOwpAQCAtMzU2LDEyICszNTcsMTIgQEAKICAgICB0dXBsZS5UdXBsZU9mZnNldCA9IDA7CiAgICAgdHVwbGUuRGVzaXJlZFR1cGxlID0gQ0lTVFBMX0ZVTkNFOwogICAgIHR1cGxlLlR1cGxlT2Zmc2V0ID0gMDsKLSAgICBpZiAocGNtY2lhX2dldF9maXJzdF90dXBsZShsaW5rLCAmdHVwbGUpID09IENTX1NVQ0NFU1MpIHsKKyAgICBpZiAocGNtY2lhX2dldF9maXJzdF90dXBsZShsaW5rLCAmdHVwbGUpID09IDApIHsKIAkvKiBZZXMsIEkgaGF2ZSBDSVNUUExfRlVOQ0UuIExldCdzIGNoZWNrIENJU1RQTF9NQU5GSUQgKi8KIAl0dXBsZS5EZXNpcmVkVHVwbGUgPSBDSVNUUExfQ0ZUQUJMRV9FTlRSWTsKIAlDU19DSEVDSyhHZXRGaXJzdFR1cGxlLCBwY21jaWFfZ2V0X2ZpcnN0X3R1cGxlKGxpbmssICZ0dXBsZSkpOwogCUNTX0NIRUNLKEdldFR1cGxlRGF0YSwgcGNtY2lhX2dldF90dXBsZV9kYXRhKGxpbmssICZ0dXBsZSkpOwotCUNTX0NIRUNLKFBhcnNlVHVwbGUsIHBjbWNpYV9wYXJzZV90dXBsZShsaW5rLCAmdHVwbGUsICZwYXJzZSkpOworCUNTX0NIRUNLKFBhcnNlVHVwbGUsIHBjbWNpYV9wYXJzZV90dXBsZSgmdHVwbGUsICZwYXJzZSkpOwogCWxpbmstPmNvbmYuQ29uZmlnSW5kZXggPSBwYXJzZS5jZnRhYmxlX2VudHJ5LmluZGV4OwogCXN3aXRjaCAobGluay0+bWFuZl9pZCkgewogCWNhc2UgTUFORklEX1RESzoKQEAgLTQzMCwxMCArNDMxLDEwIEBACiAgICAgCWxpbmstPmlycS5BdHRyaWJ1dGVzID0KIAkJSVJRX1RZUEVfRFlOQU1JQ19TSEFSSU5HfElSUV9GSVJTVF9TSEFSRUR8SVJRX0hBTkRMRV9QUkVTRU5UOwogCXJldCA9IG1mY190cnlfaW9fcG9ydChsaW5rKTsKLQlpZiAocmV0ICE9IENTX1NVQ0NFU1MpIGdvdG8gY3NfZmFpbGVkOworCWlmIChyZXQgIT0gMCkgZ290byBjc19mYWlsZWQ7CiAgICAgfSBlbHNlIGlmIChjYXJkdHlwZSA9PSBVTkdFUk1BTk4pIHsKIAlyZXQgPSB1bmdlcm1hbm5fdHJ5X2lvX3BvcnQobGluayk7Ci0JaWYgKHJldCAhPSBDU19TVUNDRVNTKSBnb3RvIGNzX2ZhaWxlZDsKKwlpZiAocmV0ICE9IDApIGdvdG8gY3NfZmFpbGVkOwogICAgIH0gZWxzZSB7IAogCUNTX0NIRUNLKFJlcXVlc3RJTywgcGNtY2lhX3JlcXVlc3RfaW8obGluaywgJmxpbmstPmlvKSk7CiAgICAgfQpAQCAtNTY1LDcgKzU2Niw3IEBACiAgICAgcmVxLkJhc2UgPSAwOyByZXEuU2l6ZSA9IDA7CiAgICAgcmVxLkFjY2Vzc1NwZWVkID0gMDsKICAgICBpID0gcGNtY2lhX3JlcXVlc3Rfd2luZG93KCZsaW5rLCAmcmVxLCAmbGluay0+d2luKTsKLSAgICBpZiAoaSAhPSBDU19TVUNDRVNTKSB7CisgICAgaWYgKGkgIT0gMCkgewogCWNzX2Vycm9yKGxpbmssIFJlcXVlc3RXaW5kb3csIGkpOwogCXJldHVybiAtMTsKICAgICB9CkBAIC01OTksNyArNjAwLDcgQEAKIAogICAgIGlvdW5tYXAoYmFzZSk7CiAgICAgaiA9IHBjbWNpYV9yZWxlYXNlX3dpbmRvdyhsaW5rLT53aW4pOwotICAgIGlmIChqICE9IENTX1NVQ0NFU1MpCisgICAgaWYgKGogIT0gMCkKIAljc19lcnJvcihsaW5rLCBSZWxlYXNlV2luZG93LCBqKTsKICAgICByZXR1cm4gKGkgIT0gMHgyMDApID8gMCA6IC0xOwogCkBAIC02MjAsNyArNjIxLDcgQEAKICAgICByZXEuQmFzZSA9IDA7IHJlcS5TaXplID0gMDsKICAgICByZXEuQWNjZXNzU3BlZWQgPSAwOwogICAgIGkgPSBwY21jaWFfcmVxdWVzdF93aW5kb3coJmxpbmssICZyZXEsICZsaW5rLT53aW4pOwotICAgIGlmIChpICE9IENTX1NVQ0NFU1MpIHsKKyAgICBpZiAoaSAhPSAwKSB7CiAJY3NfZXJyb3IobGluaywgUmVxdWVzdFdpbmRvdywgaSk7CiAJcmV0dXJuIC0xOwogICAgIH0KQEAgLTY0Miw3ICs2NDMsNyBAQAogCiAgICAgaW91bm1hcChiYXNlKTsKICAgICBqID0gcGNtY2lhX3JlbGVhc2Vfd2luZG93KGxpbmstPndpbik7Ci0gICAgaWYgKGogIT0gQ1NfU1VDQ0VTUykKKyAgICBpZiAoaiAhPSAwKQogCWNzX2Vycm9yKGxpbmssIFJlbGVhc2VXaW5kb3csIGopOwogICAgIHJldHVybiAwOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wY21jaWEvaWJtdHJfY3MuYyBiL2RyaXZlcnMvbmV0L3BjbWNpYS9pYm10cl9jcy5jCmluZGV4IDRlYWZhNGYuLmNmM2NjYTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BjbWNpYS9pYm10cl9jcy5jCisrKyBiL2RyaXZlcnMvbmV0L3BjbWNpYS9pYm10cl9jcy5jCkBAIC0yMzgsNyArMjM4LDcgQEAKICAgICAvKiBUcnkgUFJJTUFSWSBjYXJkIGF0IDB4QTIwLTB4QTIzICovCiAgICAgbGluay0+aW8uQmFzZVBvcnQxID0gMHhBMjA7CiAgICAgaSA9IHBjbWNpYV9yZXF1ZXN0X2lvKGxpbmssICZsaW5rLT5pbyk7Ci0gICAgaWYgKGkgIT0gQ1NfU1VDQ0VTUykgeworICAgIGlmIChpICE9IDApIHsKIAkvKiBDb3VsZG4ndCBnZXQgMHhBMjAtMHhBMjMuICBUcnkgQUxURVJOQVRFIGF0IDB4QTI0LTB4QTI3LiAqLwogCWxpbmstPmlvLkJhc2VQb3J0MSA9IDB4QTI0OwogCUNTX0NIRUNLKFJlcXVlc3RJTywgcGNtY2lhX3JlcXVlc3RfaW8obGluaywgJmxpbmstPmlvKSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wY21jaWEvbm1jbGFuX2NzLmMgYi9kcml2ZXJzL25ldC9wY21jaWEvbm1jbGFuX2NzLmMKaW5kZXggY2ZjYmVhOS4uNDQ4Y2Q0MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcGNtY2lhL25tY2xhbl9jcy5jCisrKyBiL2RyaXZlcnMvbmV0L3BjbWNpYS9ubWNsYW5fY3MuYwpAQCAtNjksNyArNjksNyBAQAogSGlzdG9yeQogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogTG9nOiBubWNsYW5fY3MuYyx2Ci0gKiAyLjUuNzUtYWMxIDIwMDMvMDcvMTEgQWxhbiBDb3ggPGFsYW5AcmVkaGF0LmNvbT4KKyAqIDIuNS43NS1hYzEgMjAwMy8wNy8xMSBBbGFuIENveCA8YWxhbkBseG9yZ3VrLnVrdXUub3JnLnVrPgogICogRml4ZWQgaGFuZyBvbiBjYXJkIGVqZWN0IGFzIHdlIHByb2JlIGl0CiAgKiBDbGVhbmVkIHVwIHRvIHVzZSBuZXcgc3R5bGUgbG9ja2luZy4KICAqCkBAIC05MjUsNyArOTI1LDcgQEAKICAgcHJpbnRrKEtFUk5fTk9USUNFICIlczogdHJhbnNtaXQgdGltZWQgb3V0IC0tICIsIGRldi0+bmFtZSk7CiAjaWYgUkVTRVRfT05fVElNRU9VVAogICBwcmludGsoInJlc2V0dGluZyBjYXJkXG4iKTsKLSAgcGNtY2lhX3Jlc2V0X2NhcmQobGluaywgTlVMTCk7CisgIHBjbWNpYV9yZXNldF9jYXJkKGxpbmstPnNvY2tldCk7CiAjZWxzZSAvKiAjaWYgUkVTRVRfT05fVElNRU9VVCAqLwogICBwcmludGsoIk5PVCByZXNldHRpbmcgY2FyZFxuIik7CiAjZW5kaWYgLyogI2lmIFJFU0VUX09OX1RJTUVPVVQgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BjbWNpYS9wY25ldF9jcy5jIGIvZHJpdmVycy9uZXQvcGNtY2lhL3BjbmV0X2NzLmMKaW5kZXggZWJjMWFlNi4uZTQwZDYzMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcGNtY2lhL3BjbmV0X2NzLmMKKysrIGIvZHJpdmVycy9uZXQvcGNtY2lhL3BjbmV0X2NzLmMKQEAgLTMxMCw3ICszMTAsNyBAQAogICAgIHJlcS5CYXNlID0gMDsgcmVxLlNpemUgPSAwOwogICAgIHJlcS5BY2Nlc3NTcGVlZCA9IDA7CiAgICAgaSA9IHBjbWNpYV9yZXF1ZXN0X3dpbmRvdygmbGluaywgJnJlcSwgJmxpbmstPndpbik7Ci0gICAgaWYgKGkgIT0gQ1NfU1VDQ0VTUykgeworICAgIGlmIChpICE9IDApIHsKIAljc19lcnJvcihsaW5rLCBSZXF1ZXN0V2luZG93LCBpKTsKIAlyZXR1cm4gTlVMTDsKICAgICB9CkBAIC0zMzMsNyArMzMzLDcgQEAKIAogICAgIGlvdW5tYXAodmlydCk7CiAgICAgaiA9IHBjbWNpYV9yZWxlYXNlX3dpbmRvdyhsaW5rLT53aW4pOwotICAgIGlmIChqICE9IENTX1NVQ0NFU1MpCisgICAgaWYgKGogIT0gMCkKIAljc19lcnJvcihsaW5rLCBSZWxlYXNlV2luZG93LCBqKTsKICAgICByZXR1cm4gKGkgPCBOUl9JTkZPKSA/IGh3X2luZm8raSA6IE5VTEw7CiB9IC8qIGdldF9od2luZm8gKi8KQEAgLTUwNCw3ICs1MDQsOCBAQAogCSAgICBsaW5rLT5pby5CYXNlUG9ydDEgPSBqIF4gMHgzMDA7CiAJICAgIGxpbmstPmlvLkJhc2VQb3J0MiA9IChqIF4gMHgzMDApICsgMHgxMDsKIAkgICAgcmV0ID0gcGNtY2lhX3JlcXVlc3RfaW8obGluaywgJmxpbmstPmlvKTsKLQkgICAgaWYgKHJldCA9PSBDU19TVUNDRVNTKSByZXR1cm4gcmV0OworCSAgICBpZiAocmV0ID09IDApCisJCSAgICByZXR1cm4gcmV0OwogCX0KIAlyZXR1cm4gcmV0OwogICAgIH0gZWxzZSB7CkBAIC01MTIsNTggKzUxMyw1MyBAQAogICAgIH0KIH0KIAorc3RhdGljIGludCBwY25ldF9jb25mY2hlY2soc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2LAorCQkJICAgY2lzdHBsX2NmdGFibGVfZW50cnlfdCAqY2ZnLAorCQkJICAgY2lzdHBsX2NmdGFibGVfZW50cnlfdCAqZGZsdCwKKwkJCSAgIHVuc2lnbmVkIGludCB2Y2MsCisJCQkgICB2b2lkICpwcml2X2RhdGEpCit7CisJaW50ICpoYXNfc2htZW0gPSBwcml2X2RhdGE7CisJaW50IGk7CisJY2lzdHBsX2lvX3QgKmlvID0gJmNmZy0+aW87CisKKwlpZiAoY2ZnLT5pbmRleCA9PSAwIHx8IGNmZy0+aW8ubndpbiA9PSAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCS8qIEZvciBtdWx0aWZ1bmN0aW9uIGNhcmRzLCBieSBjb252ZW50aW9uLCB3ZSBjb25maWd1cmUgdGhlCisJICAgbmV0d29yayBmdW5jdGlvbiB3aXRoIHdpbmRvdyAwLCBhbmQgc2VyaWFsIHdpdGggd2luZG93IDEgKi8KKwlpZiAoaW8tPm53aW4gPiAxKSB7CisJCWkgPSAoaW8tPndpblsxXS5sZW4gPiBpby0+d2luWzBdLmxlbik7CisJCXBfZGV2LT5pby5CYXNlUG9ydDIgPSBpby0+d2luWzEtaV0uYmFzZTsKKwkJcF9kZXYtPmlvLk51bVBvcnRzMiA9IGlvLT53aW5bMS1pXS5sZW47CisJfSBlbHNlIHsKKwkJaSA9IHBfZGV2LT5pby5OdW1Qb3J0czIgPSAwOworCX0KKworCSpoYXNfc2htZW0gPSAoKGNmZy0+bWVtLm53aW4gPT0gMSkgJiYKKwkJICAgICAgKGNmZy0+bWVtLndpblswXS5sZW4gPj0gMHg0MDAwKSk7CisJcF9kZXYtPmlvLkJhc2VQb3J0MSA9IGlvLT53aW5baV0uYmFzZTsKKwlwX2Rldi0+aW8uTnVtUG9ydHMxID0gaW8tPndpbltpXS5sZW47CisJcF9kZXYtPmlvLklPQWRkckxpbmVzID0gaW8tPmZsYWdzICYgQ0lTVFBMX0lPX0xJTkVTX01BU0s7CisJaWYgKHBfZGV2LT5pby5OdW1Qb3J0czEgKyBwX2Rldi0+aW8uTnVtUG9ydHMyID49IDMyKQorCQlyZXR1cm4gdHJ5X2lvX3BvcnQocF9kZXYpOworCisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbnQgcGNuZXRfY29uZmlnKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQogewogICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBsaW5rLT5wcml2OwogICAgIHBjbmV0X2Rldl90ICppbmZvID0gUFJJVihkZXYpOwotICAgIHR1cGxlX3QgdHVwbGU7Ci0gICAgY2lzcGFyc2VfdCBwYXJzZTsKLSAgICBpbnQgaSwgbGFzdF9yZXQsIGxhc3RfZm4sIHN0YXJ0X3BnLCBzdG9wX3BnLCBjbV9vZmZzZXQ7CisgICAgaW50IGxhc3RfcmV0LCBsYXN0X2ZuLCBzdGFydF9wZywgc3RvcF9wZywgY21fb2Zmc2V0OwogICAgIGludCBoYXNfc2htZW0gPSAwOwotICAgIHVfc2hvcnQgYnVmWzY0XTsKICAgICBod19pbmZvX3QgKmxvY2FsX2h3X2luZm87CiAgICAgREVDTEFSRV9NQUNfQlVGKG1hYyk7CiAKICAgICBERUJVRygwLCAicGNuZXRfY29uZmlnKDB4JXApXG4iLCBsaW5rKTsKIAotICAgIHR1cGxlLlR1cGxlRGF0YSA9IChjaXNkYXRhX3QgKilidWY7Ci0gICAgdHVwbGUuVHVwbGVEYXRhTWF4ID0gc2l6ZW9mKGJ1Zik7Ci0gICAgdHVwbGUuVHVwbGVPZmZzZXQgPSAwOwotICAgIHR1cGxlLkRlc2lyZWRUdXBsZSA9IENJU1RQTF9DRlRBQkxFX0VOVFJZOwotICAgIHR1cGxlLkF0dHJpYnV0ZXMgPSAwOwotICAgIENTX0NIRUNLKEdldEZpcnN0VHVwbGUsIHBjbWNpYV9nZXRfZmlyc3RfdHVwbGUobGluaywgJnR1cGxlKSk7Ci0gICAgd2hpbGUgKGxhc3RfcmV0ID09IENTX1NVQ0NFU1MpIHsKLQljaXN0cGxfY2Z0YWJsZV9lbnRyeV90ICpjZmcgPSAmKHBhcnNlLmNmdGFibGVfZW50cnkpOwotCWNpc3RwbF9pb190ICppbyA9ICYocGFyc2UuY2Z0YWJsZV9lbnRyeS5pbyk7Ci0KLQlpZiAocGNtY2lhX2dldF90dXBsZV9kYXRhKGxpbmssICZ0dXBsZSkgIT0gMCB8fAotCQkJcGNtY2lhX3BhcnNlX3R1cGxlKGxpbmssICZ0dXBsZSwgJnBhcnNlKSAhPSAwIHx8Ci0JCQljZmctPmluZGV4ID09IDAgfHwgY2ZnLT5pby5ud2luID09IDApCi0JCWdvdG8gbmV4dF9lbnRyeTsKLQotCWxpbmstPmNvbmYuQ29uZmlnSW5kZXggPSBjZmctPmluZGV4OwotCS8qIEZvciBtdWx0aWZ1bmN0aW9uIGNhcmRzLCBieSBjb252ZW50aW9uLCB3ZSBjb25maWd1cmUgdGhlCi0JICAgbmV0d29yayBmdW5jdGlvbiB3aXRoIHdpbmRvdyAwLCBhbmQgc2VyaWFsIHdpdGggd2luZG93IDEgKi8KLQlpZiAoaW8tPm53aW4gPiAxKSB7Ci0JICAgIGkgPSAoaW8tPndpblsxXS5sZW4gPiBpby0+d2luWzBdLmxlbik7Ci0JICAgIGxpbmstPmlvLkJhc2VQb3J0MiA9IGlvLT53aW5bMS1pXS5iYXNlOwotCSAgICBsaW5rLT5pby5OdW1Qb3J0czIgPSBpby0+d2luWzEtaV0ubGVuOwotCX0gZWxzZSB7Ci0JICAgIGkgPSBsaW5rLT5pby5OdW1Qb3J0czIgPSAwOwotCX0KLQloYXNfc2htZW0gPSAoKGNmZy0+bWVtLm53aW4gPT0gMSkgJiYKLQkJICAgICAoY2ZnLT5tZW0ud2luWzBdLmxlbiA+PSAweDQwMDApKTsKLQlsaW5rLT5pby5CYXNlUG9ydDEgPSBpby0+d2luW2ldLmJhc2U7Ci0JbGluay0+aW8uTnVtUG9ydHMxID0gaW8tPndpbltpXS5sZW47Ci0JbGluay0+aW8uSU9BZGRyTGluZXMgPSBpby0+ZmxhZ3MgJiBDSVNUUExfSU9fTElORVNfTUFTSzsKLQlpZiAobGluay0+aW8uTnVtUG9ydHMxICsgbGluay0+aW8uTnVtUG9ydHMyID49IDMyKSB7Ci0JICAgIGxhc3RfcmV0ID0gdHJ5X2lvX3BvcnQobGluayk7Ci0JICAgIGlmIChsYXN0X3JldCA9PSBDU19TVUNDRVNTKSBicmVhazsKLQl9Ci0gICAgbmV4dF9lbnRyeToKLQlsYXN0X3JldCA9IHBjbWNpYV9nZXRfbmV4dF90dXBsZShsaW5rLCAmdHVwbGUpOwotICAgIH0KLSAgICBpZiAobGFzdF9yZXQgIT0gQ1NfU1VDQ0VTUykgeworICAgIGxhc3RfcmV0ID0gcGNtY2lhX2xvb3BfY29uZmlnKGxpbmssIHBjbmV0X2NvbmZjaGVjaywgJmhhc19zaG1lbSk7CisgICAgaWYgKGxhc3RfcmV0KSB7CiAJY3NfZXJyb3IobGluaywgUmVxdWVzdElPLCBsYXN0X3JldCk7CiAJZ290byBmYWlsZWQ7CiAgICAgfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGNtY2lhL3NtYzkxYzkyX2NzLmMgYi9kcml2ZXJzL25ldC9wY21jaWEvc21jOTFjOTJfY3MuYwppbmRleCAyNTBlYjE5Li5jNzRkNjY1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9wY21jaWEvc21jOTFjOTJfY3MuYworKysgYi9kcml2ZXJzL25ldC9wY21jaWEvc21jOTFjOTJfY3MuYwpAQCAtNDA5LDEwICs0MDksMTMgQEAKIHsKIAlpbnQgaTsKIAotCWlmICgoaSA9IHBjbWNpYV9nZXRfZmlyc3RfdHVwbGUoaGFuZGxlLCB0dXBsZSkpICE9IENTX1NVQ0NFU1MgfHwKLQkJCShpID0gcGNtY2lhX2dldF90dXBsZV9kYXRhKGhhbmRsZSwgdHVwbGUpKSAhPSBDU19TVUNDRVNTKQorCWkgPSBwY21jaWFfZ2V0X2ZpcnN0X3R1cGxlKGhhbmRsZSwgdHVwbGUpOworCWlmIChpICE9IDApCiAJCXJldHVybiBpOwotCXJldHVybiBwY21jaWFfcGFyc2VfdHVwbGUoaGFuZGxlLCB0dXBsZSwgcGFyc2UpOworCWkgPSBwY21jaWFfZ2V0X3R1cGxlX2RhdGEoaGFuZGxlLCB0dXBsZSk7CisJaWYgKGkgIT0gMCkKKwkJcmV0dXJuIGk7CisJcmV0dXJuIHBjbWNpYV9wYXJzZV90dXBsZSh0dXBsZSwgcGFyc2UpOwogfQogCiBzdGF0aWMgaW50IG5leHRfdHVwbGUoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmhhbmRsZSwgdHVwbGVfdCAqdHVwbGUsCkBAIC00MjAsMTAgKzQyMywxMCBAQAogewogCWludCBpOwogCi0JaWYgKChpID0gcGNtY2lhX2dldF9uZXh0X3R1cGxlKGhhbmRsZSwgdHVwbGUpKSAhPSBDU19TVUNDRVNTIHx8Ci0JCQkoaSA9IHBjbWNpYV9nZXRfdHVwbGVfZGF0YShoYW5kbGUsIHR1cGxlKSkgIT0gQ1NfU1VDQ0VTUykKKwlpZiAoKGkgPSBwY21jaWFfZ2V0X25leHRfdHVwbGUoaGFuZGxlLCB0dXBsZSkpICE9IDAgfHwKKwkJCShpID0gcGNtY2lhX2dldF90dXBsZV9kYXRhKGhhbmRsZSwgdHVwbGUpKSAhPSAwKQogCQlyZXR1cm4gaTsKLQlyZXR1cm4gcGNtY2lhX3BhcnNlX3R1cGxlKGhhbmRsZSwgdHVwbGUsIHBhcnNlKTsKKwlyZXR1cm4gcGNtY2lhX3BhcnNlX3R1cGxlKHR1cGxlLCBwYXJzZSk7CiB9CiAKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpAQCAtNDU5LDI3ICs0NjIsMzYgQEAKICAgICByZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBtaHpfbWZjX2NvbmZpZ19jaGVjayhzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYsCisJCQkJY2lzdHBsX2NmdGFibGVfZW50cnlfdCAqY2YsCisJCQkJY2lzdHBsX2NmdGFibGVfZW50cnlfdCAqZGZsdCwKKwkJCQl1bnNpZ25lZCBpbnQgdmNjLAorCQkJCXZvaWQgKnByaXZfZGF0YSkKK3sKKwlpbnQgazsKKwlwX2Rldi0+aW8uQmFzZVBvcnQyID0gY2YtPmlvLndpblswXS5iYXNlOworCWZvciAoayA9IDA7IGsgPCAweDQwMDsgayArPSAweDEwKSB7CisJCWlmIChrICYgMHg4MCkKKwkJCWNvbnRpbnVlOworCQlwX2Rldi0+aW8uQmFzZVBvcnQxID0gayBeIDB4MzAwOworCQlpZiAoIXBjbWNpYV9yZXF1ZXN0X2lvKHBfZGV2LCAmcF9kZXYtPmlvKSkKKwkJCXJldHVybiAwOworCX0KKwlyZXR1cm4gLUVOT0RFVjsKK30KKwogc3RhdGljIGludCBtaHpfbWZjX2NvbmZpZyhzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gbGluay0+cHJpdjsKICAgICBzdHJ1Y3Qgc21jX3ByaXZhdGUgKnNtYyA9IG5ldGRldl9wcml2KGRldik7CiAgICAgc3RydWN0IHNtY19jZmdfbWVtICpjZmdfbWVtOwotICAgIHR1cGxlX3QgKnR1cGxlOwotICAgIGNpc3BhcnNlX3QgKnBhcnNlOwotICAgIGNpc3RwbF9jZnRhYmxlX2VudHJ5X3QgKmNmOwotICAgIHVfY2hhciAqYnVmOwogICAgIHdpbl9yZXFfdCByZXE7CiAgICAgbWVtcmVxX3QgbWVtOwotICAgIGludCBpLCBrOworICAgIGludCBpOwogCiAgICAgY2ZnX21lbSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBzbWNfY2ZnX21lbSksIEdGUF9LRVJORUwpOwogICAgIGlmICghY2ZnX21lbSkKLSAgICAgICAgcmV0dXJuIENTX09VVF9PRl9SRVNPVVJDRTsKLQotICAgIHR1cGxlID0gJmNmZ19tZW0tPnR1cGxlOwotICAgIHBhcnNlID0gJmNmZ19tZW0tPnBhcnNlOwotICAgIGNmID0gJnBhcnNlLT5jZnRhYmxlX2VudHJ5OwotICAgIGJ1ZiA9IGNmZ19tZW0tPmJ1ZjsKKwkgICAgcmV0dXJuIC1FTk9NRU07CiAKICAgICBsaW5rLT5jb25mLkF0dHJpYnV0ZXMgfD0gQ09ORl9FTkFCTEVfU1BLUjsKICAgICBsaW5rLT5jb25mLlN0YXR1cyA9IENDU1JfQVVESU9fRU5BOwpAQCAtNDg5LDI3ICs1MDEsOSBAQAogICAgIGxpbmstPmlvLkF0dHJpYnV0ZXMyID0gSU9fREFUQV9QQVRIX1dJRFRIXzg7CiAgICAgbGluay0+aW8uTnVtUG9ydHMyID0gODsKIAotICAgIHR1cGxlLT5BdHRyaWJ1dGVzID0gdHVwbGUtPlR1cGxlT2Zmc2V0ID0gMDsKLSAgICB0dXBsZS0+VHVwbGVEYXRhID0gKGNpc2RhdGFfdCAqKWJ1ZjsKLSAgICB0dXBsZS0+VHVwbGVEYXRhTWF4ID0gMjU1OwotICAgIHR1cGxlLT5EZXNpcmVkVHVwbGUgPSBDSVNUUExfQ0ZUQUJMRV9FTlRSWTsKLQotICAgIGkgPSBmaXJzdF90dXBsZShsaW5rLCB0dXBsZSwgcGFyc2UpOwogICAgIC8qIFRoZSBNZWdhaGVydHogY29tYm8gY2FyZHMgaGF2ZSBtb2RlbS1saWtlIENJUyBlbnRyaWVzLCBzbwogICAgICAgIHdlIGhhdmUgdG8gZXhwbGljaXRseSB0cnkgYSBidW5jaCBvZiBwb3J0IGNvbWJpbmF0aW9ucy4gKi8KLSAgICB3aGlsZSAoaSA9PSBDU19TVUNDRVNTKSB7Ci0JbGluay0+Y29uZi5Db25maWdJbmRleCA9IGNmLT5pbmRleDsKLQlsaW5rLT5pby5CYXNlUG9ydDIgPSBjZi0+aW8ud2luWzBdLmJhc2U7Ci0JZm9yIChrID0gMDsgayA8IDB4NDAwOyBrICs9IDB4MTApIHsKLQkgICAgaWYgKGsgJiAweDgwKSBjb250aW51ZTsKLQkgICAgbGluay0+aW8uQmFzZVBvcnQxID0gayBeIDB4MzAwOwotCSAgICBpID0gcGNtY2lhX3JlcXVlc3RfaW8obGluaywgJmxpbmstPmlvKTsKLQkgICAgaWYgKGkgPT0gQ1NfU1VDQ0VTUykgYnJlYWs7Ci0JfQotCWlmIChpID09IENTX1NVQ0NFU1MpIGJyZWFrOwotCWkgPSBuZXh0X3R1cGxlKGxpbmssIHR1cGxlLCBwYXJzZSk7Ci0gICAgfQotICAgIGlmIChpICE9IENTX1NVQ0NFU1MpCisgICAgaWYgKHBjbWNpYV9sb29wX2NvbmZpZyhsaW5rLCBtaHpfbWZjX2NvbmZpZ19jaGVjaywgTlVMTCkpCiAJZ290byBmcmVlX2NmZ19tZW07CiAgICAgZGV2LT5iYXNlX2FkZHIgPSBsaW5rLT5pby5CYXNlUG9ydDE7CiAKQEAgLTUxOCw3ICs1MTIsNyBAQAogICAgIHJlcS5CYXNlID0gcmVxLlNpemUgPSAwOwogICAgIHJlcS5BY2Nlc3NTcGVlZCA9IDA7CiAgICAgaSA9IHBjbWNpYV9yZXF1ZXN0X3dpbmRvdygmbGluaywgJnJlcSwgJmxpbmstPndpbik7Ci0gICAgaWYgKGkgIT0gQ1NfU1VDQ0VTUykKKyAgICBpZiAoaSAhPSAwKQogCWdvdG8gZnJlZV9jZmdfbWVtOwogICAgIHNtYy0+YmFzZSA9IGlvcmVtYXAocmVxLkJhc2UsIHJlcS5TaXplKTsKICAgICBtZW0uQ2FyZE9mZnNldCA9IG1lbS5QYWdlID0gMDsKQEAgLTUyNiwxNCArNTIwLDE0IEBACiAJbWVtLkNhcmRPZmZzZXQgPSBsaW5rLT5jb25mLkNvbmZpZ0Jhc2U7CiAgICAgaSA9IHBjbWNpYV9tYXBfbWVtX3BhZ2UobGluay0+d2luLCAmbWVtKTsKIAotICAgIGlmICgoaSA9PSBDU19TVUNDRVNTKQorICAgIGlmICgoaSA9PSAwKQogCSYmIChzbWMtPm1hbmZpZCA9PSBNQU5GSURfTUVHQUhFUlRaKQogCSYmIChzbWMtPmNhcmRpZCA9PSBQUk9ESURfTUVHQUhFUlRaX0VNMzI4OCkpCiAJbWh6XzMyODhfcG93ZXIobGluayk7CiAKIGZyZWVfY2ZnX21lbToKICAgICBrZnJlZShjZmdfbWVtKTsKLSAgICByZXR1cm4gaTsKKyAgICByZXR1cm4gLUVOT0RFVjsKIH0KIAogc3RhdGljIGludCBtaHpfc2V0dXAoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCkBAIC01NjAsMTIgKzU1NCwxMiBAQAogICAgIC8qIFJlYWQgdGhlIHN0YXRpb24gYWRkcmVzcyBmcm9tIHRoZSBDSVMuICBJdCBpcyBzdG9yZWQgYXMgdGhlIGxhc3QKICAgICAgICAoZm91cnRoKSBzdHJpbmcgaW4gdGhlIFZlcnNpb24gMSBWZXJzaW9uL0lEIHR1cGxlLiAqLwogICAgIHR1cGxlLT5EZXNpcmVkVHVwbGUgPSBDSVNUUExfVkVSU18xOwotICAgIGlmIChmaXJzdF90dXBsZShsaW5rLCB0dXBsZSwgcGFyc2UpICE9IENTX1NVQ0NFU1MpIHsKKyAgICBpZiAoZmlyc3RfdHVwbGUobGluaywgdHVwbGUsIHBhcnNlKSAhPSAwKSB7CiAJcmMgPSAtMTsKIAlnb3RvIGZyZWVfY2ZnX21lbTsKICAgICB9CiAgICAgLyogVWdoIC0tIHRoZSBFTTExNDQgY2FyZCBoYXMgdHdvIFZFUlNfMSB0dXBsZXMhPyEgKi8KLSAgICBpZiAobmV4dF90dXBsZShsaW5rLCB0dXBsZSwgcGFyc2UpICE9IENTX1NVQ0NFU1MpCisgICAgaWYgKG5leHRfdHVwbGUobGluaywgdHVwbGUsIHBhcnNlKSAhPSAwKQogCWZpcnN0X3R1cGxlKGxpbmssIHR1cGxlLCBwYXJzZSk7CiAgICAgaWYgKHBhcnNlLT52ZXJzaW9uXzEubnMgPiAzKSB7CiAJc3RhdGlvbl9hZGRyID0gcGFyc2UtPnZlcnNpb25fMS5zdHIgKyBwYXJzZS0+dmVyc2lvbl8xLm9mc1szXTsKQEAgLTU3NywxMSArNTcxLDExIEBACiAKICAgICAvKiBBbm90aGVyIHBvc3NpYmlsaXR5OiBmb3IgdGhlIEVNMzI4OCwgaW4gYSBzcGVjaWFsIHR1cGxlICovCiAgICAgdHVwbGUtPkRlc2lyZWRUdXBsZSA9IDB4ODE7Ci0gICAgaWYgKHBjbWNpYV9nZXRfZmlyc3RfdHVwbGUobGluaywgdHVwbGUpICE9IENTX1NVQ0NFU1MpIHsKKyAgICBpZiAocGNtY2lhX2dldF9maXJzdF90dXBsZShsaW5rLCB0dXBsZSkgIT0gMCkgewogCXJjID0gLTE7CiAJZ290byBmcmVlX2NmZ19tZW07CiAgICAgfQotICAgIGlmIChwY21jaWFfZ2V0X3R1cGxlX2RhdGEobGluaywgdHVwbGUpICE9IENTX1NVQ0NFU1MpIHsKKyAgICBpZiAocGNtY2lhX2dldF90dXBsZV9kYXRhKGxpbmssIHR1cGxlKSAhPSAwKSB7CiAJcmMgPSAtMTsKIAlnb3RvIGZyZWVfY2ZnX21lbTsKICAgICB9CkBAIC02NjAsNDYgKzY1NCwyNyBAQAogCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIAorc3RhdGljIGludCBzbWNfY29uZmlnY2hlY2soc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2LAorCQkJICAgY2lzdHBsX2NmdGFibGVfZW50cnlfdCAqY2YsCisJCQkgICBjaXN0cGxfY2Z0YWJsZV9lbnRyeV90ICpkZmx0LAorCQkJICAgdW5zaWduZWQgaW50IHZjYywKKwkJCSAgIHZvaWQgKnByaXZfZGF0YSkKK3sKKwlwX2Rldi0+aW8uQmFzZVBvcnQxID0gY2YtPmlvLndpblswXS5iYXNlOworCXBfZGV2LT5pby5JT0FkZHJMaW5lcyA9IGNmLT5pby5mbGFncyAmIENJU1RQTF9JT19MSU5FU19NQVNLOworCXJldHVybiBwY21jaWFfcmVxdWVzdF9pbyhwX2RldiwgJnBfZGV2LT5pbyk7Cit9CisKIHN0YXRpYyBpbnQgc21jX2NvbmZpZyhzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gbGluay0+cHJpdjsKLSAgICBzdHJ1Y3Qgc21jX2NmZ19tZW0gKmNmZ19tZW07Ci0gICAgdHVwbGVfdCAqdHVwbGU7Ci0gICAgY2lzcGFyc2VfdCAqcGFyc2U7Ci0gICAgY2lzdHBsX2NmdGFibGVfZW50cnlfdCAqY2Y7Ci0gICAgdV9jaGFyICpidWY7CiAgICAgaW50IGk7CiAKLSAgICBjZmdfbWVtID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHNtY19jZmdfbWVtKSwgR0ZQX0tFUk5FTCk7Ci0gICAgaWYgKCFjZmdfbWVtKQotCXJldHVybiBDU19PVVRfT0ZfUkVTT1VSQ0U7Ci0KLSAgICB0dXBsZSA9ICZjZmdfbWVtLT50dXBsZTsKLSAgICBwYXJzZSA9ICZjZmdfbWVtLT5wYXJzZTsKLSAgICBjZiA9ICZwYXJzZS0+Y2Z0YWJsZV9lbnRyeTsKLSAgICBidWYgPSBjZmdfbWVtLT5idWY7Ci0KLSAgICB0dXBsZS0+QXR0cmlidXRlcyA9IHR1cGxlLT5UdXBsZU9mZnNldCA9IDA7Ci0gICAgdHVwbGUtPlR1cGxlRGF0YSA9IChjaXNkYXRhX3QgKilidWY7Ci0gICAgdHVwbGUtPlR1cGxlRGF0YU1heCA9IDI1NTsKLSAgICB0dXBsZS0+RGVzaXJlZFR1cGxlID0gQ0lTVFBMX0NGVEFCTEVfRU5UUlk7Ci0KICAgICBsaW5rLT5pby5OdW1Qb3J0czEgPSAxNjsKLSAgICBpID0gZmlyc3RfdHVwbGUobGluaywgdHVwbGUsIHBhcnNlKTsKLSAgICB3aGlsZSAoaSAhPSBDU19OT19NT1JFX0lURU1TKSB7Ci0JaWYgKGkgPT0gQ1NfU1VDQ0VTUykgewotCSAgICBsaW5rLT5jb25mLkNvbmZpZ0luZGV4ID0gY2YtPmluZGV4OwotCSAgICBsaW5rLT5pby5CYXNlUG9ydDEgPSBjZi0+aW8ud2luWzBdLmJhc2U7Ci0JICAgIGxpbmstPmlvLklPQWRkckxpbmVzID0gY2YtPmlvLmZsYWdzICYgQ0lTVFBMX0lPX0xJTkVTX01BU0s7Ci0JICAgIGkgPSBwY21jaWFfcmVxdWVzdF9pbyhsaW5rLCAmbGluay0+aW8pOwotCSAgICBpZiAoaSA9PSBDU19TVUNDRVNTKSBicmVhazsKLQl9Ci0JaSA9IG5leHRfdHVwbGUobGluaywgdHVwbGUsIHBhcnNlKTsKLSAgICB9Ci0gICAgaWYgKGkgPT0gQ1NfU1VDQ0VTUykKLQlkZXYtPmJhc2VfYWRkciA9IGxpbmstPmlvLkJhc2VQb3J0MTsKKyAgICBpID0gcGNtY2lhX2xvb3BfY29uZmlnKGxpbmssIHNtY19jb25maWdjaGVjaywgTlVMTCk7CisgICAgaWYgKCFpKQorCSAgICBkZXYtPmJhc2VfYWRkciA9IGxpbmstPmlvLkJhc2VQb3J0MTsKIAotICAgIGtmcmVlKGNmZ19tZW0pOwogICAgIHJldHVybiBpOwogfQogCkBAIC03MTUsNyArNjkwLDcgQEAKIAogICAgIGNmZ19tZW0gPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3Qgc21jX2NmZ19tZW0pLCBHRlBfS0VSTkVMKTsKICAgICBpZiAoIWNmZ19tZW0pCi0JcmV0dXJuIENTX09VVF9PRl9SRVNPVVJDRTsKKwkgICAgcmV0dXJuIC1FTk9NRU07CiAKICAgICB0dXBsZSA9ICZjZmdfbWVtLT50dXBsZTsKICAgICBwYXJzZSA9ICZjZmdfbWVtLT5wYXJzZTsKQEAgLTcyOCwxMiArNzAzLDEyIEBACiAgICAgLyogQ2hlY2sgZm9yIGEgTEFOIGZ1bmN0aW9uIGV4dGVuc2lvbiB0dXBsZSAqLwogICAgIHR1cGxlLT5EZXNpcmVkVHVwbGUgPSBDSVNUUExfRlVOQ0U7CiAgICAgaSA9IGZpcnN0X3R1cGxlKGxpbmssIHR1cGxlLCBwYXJzZSk7Ci0gICAgd2hpbGUgKGkgPT0gQ1NfU1VDQ0VTUykgeworICAgIHdoaWxlIChpID09IDApIHsKIAlpZiAocGFyc2UtPmZ1bmNlLnR5cGUgPT0gQ0lTVFBMX0ZVTkNFX0xBTl9OT0RFX0lEKQogCSAgICBicmVhazsKIAlpID0gbmV4dF90dXBsZShsaW5rLCB0dXBsZSwgcGFyc2UpOwogICAgIH0KLSAgICBpZiAoaSA9PSBDU19TVUNDRVNTKSB7CisgICAgaWYgKGkgPT0gMCkgewogCW5vZGVfaWQgPSAoY2lzdHBsX2xhbl9ub2RlX2lkX3QgKilwYXJzZS0+ZnVuY2UuZGF0YTsKIAlpZiAobm9kZV9pZC0+bmIgPT0gNikgewogCSAgICBmb3IgKGkgPSAwOyBpIDwgNjsgaSsrKQpAQCAtNzgwLDkgKzc1NSwxMCBAQAogICAgIGZvciAoaSA9IGogPSAwOyBqIDwgNDsgaisrKSB7CiAJbGluay0+aW8uQmFzZVBvcnQyID0gY29tW2pdOwogCWkgPSBwY21jaWFfcmVxdWVzdF9pbyhsaW5rLCAmbGluay0+aW8pOwotCWlmIChpID09IENTX1NVQ0NFU1MpIGJyZWFrOworCWlmIChpID09IDApCisJCWJyZWFrOwogICAgIH0KLSAgICBpZiAoaSAhPSBDU19TVUNDRVNTKSB7CisgICAgaWYgKGkgIT0gMCkgewogCS8qIEZhbGxiYWNrOiB0dXJuIG9mZiBoYXJkIGRlY29kZSAqLwogCWxpbmstPmNvbmYuQ29uZmlnSW5kZXggPSAweDAzOwogCWxpbmstPmlvLk51bVBvcnRzMiA9IDA7CkBAIC04MTUsMTMgKzc5MSwxMyBAQAogICAgIC8qIFJlYWQgdGhlIHN0YXRpb24gYWRkcmVzcyBmcm9tIHR1cGxlIDB4OTAsIHN1YnR1cGxlIDB4MDQgKi8KICAgICB0dXBsZS0+RGVzaXJlZFR1cGxlID0gMHg5MDsKICAgICBpID0gcGNtY2lhX2dldF9maXJzdF90dXBsZShsaW5rLCB0dXBsZSk7Ci0gICAgd2hpbGUgKGkgPT0gQ1NfU1VDQ0VTUykgeworICAgIHdoaWxlIChpID09IDApIHsKIAlpID0gcGNtY2lhX2dldF90dXBsZV9kYXRhKGxpbmssIHR1cGxlKTsKLQlpZiAoKGkgIT0gQ1NfU1VDQ0VTUykgfHwgKGJ1ZlswXSA9PSAweDA0KSkKKwlpZiAoKGkgIT0gMCkgfHwgKGJ1ZlswXSA9PSAweDA0KSkKIAkgICAgYnJlYWs7CiAJaSA9IHBjbWNpYV9nZXRfbmV4dF90dXBsZShsaW5rLCB0dXBsZSk7CiAgICAgfQotICAgIGlmIChpICE9IENTX1NVQ0NFU1MpIHsKKyAgICBpZiAoaSAhPSAwKSB7CiAJcmMgPSAtMTsKIAlnb3RvIGZyZWVfY2ZnX21lbTsKICAgICB9CkBAIC05NTksOCArOTM1LDExIEBACiAKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogCi0jZGVmaW5lIENTX0VYSVRfVEVTVChyZXQsIHN2YywgbGFiZWwpIFwKLWlmIChyZXQgIT0gQ1NfU1VDQ0VTUykgeyBjc19lcnJvcihsaW5rLCBzdmMsIHJldCk7IGdvdG8gbGFiZWw7IH0KKyNkZWZpbmUgQ1NfRVhJVF9URVNUKHJldCwgc3ZjLCBsYWJlbCkJXAoraWYgKHJldCAhPSAwKSB7CQkJCVwKKwljc19lcnJvcihsaW5rLCBzdmMsIHJldCk7CVwKKwlnb3RvIGxhYmVsOyAJCQlcCit9CiAKIHN0YXRpYyBpbnQgc21jOTFjOTJfY29uZmlnKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQogewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGNtY2lhL3hpcmMycHNfY3MuYyBiL2RyaXZlcnMvbmV0L3BjbWNpYS94aXJjMnBzX2NzLmMKaW5kZXggYzMzYTNkNS4uZTFmZDU4NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcGNtY2lhL3hpcmMycHNfY3MuYworKysgYi9kcml2ZXJzL25ldC9wY21jaWEveGlyYzJwc19jcy5jCkBAIC0zNzcsNyArMzc3LDcgQEAKIAogCWlmICgoZXJyID0gcGNtY2lhX2dldF9maXJzdF90dXBsZShoYW5kbGUsIHR1cGxlKSkgPT0gMCAmJgogCQkJKGVyciA9IHBjbWNpYV9nZXRfdHVwbGVfZGF0YShoYW5kbGUsIHR1cGxlKSkgPT0gMCkKLQkJZXJyID0gcGNtY2lhX3BhcnNlX3R1cGxlKGhhbmRsZSwgdHVwbGUsIHBhcnNlKTsKKwkJZXJyID0gcGNtY2lhX3BhcnNlX3R1cGxlKHR1cGxlLCBwYXJzZSk7CiAJcmV0dXJuIGVycjsKIH0KIApAQCAtMzg4LDcgKzM4OCw3IEBACiAKIAlpZiAoKGVyciA9IHBjbWNpYV9nZXRfbmV4dF90dXBsZShoYW5kbGUsIHR1cGxlKSkgPT0gMCAmJgogCQkJKGVyciA9IHBjbWNpYV9nZXRfdHVwbGVfZGF0YShoYW5kbGUsIHR1cGxlKSkgPT0gMCkKLQkJZXJyID0gcGNtY2lhX3BhcnNlX3R1cGxlKGhhbmRsZSwgdHVwbGUsIHBhcnNlKTsKKwkJZXJyID0gcGNtY2lhX3BhcnNlX3R1cGxlKHR1cGxlLCBwYXJzZSk7CiAJcmV0dXJuIGVycjsKIH0KIApAQCAtNzE1LDYgKzcxNSw0NyBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50Cit4aXJjMnBzX2NvbmZpZ19tb2RlbShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYsCisJCSAgICAgY2lzdHBsX2NmdGFibGVfZW50cnlfdCAqY2YsCisJCSAgICAgY2lzdHBsX2NmdGFibGVfZW50cnlfdCAqZGZsdCwKKwkJICAgICB1bnNpZ25lZCBpbnQgdmNjLAorCQkgICAgIHZvaWQgKnByaXZfZGF0YSkKK3sKKwl1bnNpZ25lZCBpbnQgaW9hZGRyOworCisJaWYgKGNmLT5pby5ud2luID4gMCAgJiYgIChjZi0+aW8ud2luWzBdLmJhc2UgJiAweGYpID09IDgpIHsKKwkJZm9yIChpb2FkZHIgPSAweDMwMDsgaW9hZGRyIDwgMHg0MDA7IGlvYWRkciArPSAweDEwKSB7CisJCQlwX2Rldi0+aW8uQmFzZVBvcnQyID0gY2YtPmlvLndpblswXS5iYXNlOworCQkJcF9kZXYtPmlvLkJhc2VQb3J0MSA9IGlvYWRkcjsKKwkJCWlmICghcGNtY2lhX3JlcXVlc3RfaW8ocF9kZXYsICZwX2Rldi0+aW8pKQorCQkJCXJldHVybiAwOworCQl9CisJfQorCXJldHVybiAtRU5PREVWOworfQorCitzdGF0aWMgaW50Cit4aXJjMnBzX2NvbmZpZ19jaGVjayhzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYsCisJCSAgICAgY2lzdHBsX2NmdGFibGVfZW50cnlfdCAqY2YsCisJCSAgICAgY2lzdHBsX2NmdGFibGVfZW50cnlfdCAqZGZsdCwKKwkJICAgICB1bnNpZ25lZCBpbnQgdmNjLAorCQkgICAgIHZvaWQgKnByaXZfZGF0YSkKK3sKKwlpbnQgKnBhc3MgPSBwcml2X2RhdGE7CisKKwlpZiAoY2YtPmlvLm53aW4gPiAwICYmIChjZi0+aW8ud2luWzBdLmJhc2UgJiAweGYpID09IDgpIHsKKwkJcF9kZXYtPmlvLkJhc2VQb3J0MiA9IGNmLT5pby53aW5bMF0uYmFzZTsKKwkJcF9kZXYtPmlvLkJhc2VQb3J0MSA9IHBfZGV2LT5pby5CYXNlUG9ydDIKKwkJCSsgKCpwYXNzID8gKGNmLT5pbmRleCAmIDB4MjAgPyAtMjQ6OCkKKwkJCSAgIDogKGNmLT5pbmRleCAmIDB4MjAgPyAgIDg6LTI0KSk7CisJCWlmICghcGNtY2lhX3JlcXVlc3RfaW8ocF9kZXYsICZwX2Rldi0+aW8pKQorCQkJcmV0dXJuIDA7CisJfQorCXJldHVybiAtRU5PREVWOworCit9CisKIC8qKioqKioqKioqKioqKioqCiAgKiB4aXJjMnBzX2NvbmZpZygpIGlzIHNjaGVkdWxlZCB0byBydW4gYWZ0ZXIgYSBDQVJEX0lOU0VSVElPTiBldmVudAogICogaXMgcmVjZWl2ZWQsIHRvIGNvbmZpZ3VyZSB0aGUgUENNQ0lBIHNvY2tldCwgYW5kIHRvIG1ha2UgdGhlCkBAIC03MjUsMTMgKzc2NiwxMiBAQAogewogICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBsaW5rLT5wcml2OwogICAgIGxvY2FsX2luZm9fdCAqbG9jYWwgPSBuZXRkZXZfcHJpdihkZXYpOworICAgIHVuc2lnbmVkIGludCBpb2FkZHI7CiAgICAgdHVwbGVfdCB0dXBsZTsKICAgICBjaXNwYXJzZV90IHBhcnNlOwotICAgIHVuc2lnbmVkIGludCBpb2FkZHI7CiAgICAgaW50IGVyciwgaTsKICAgICB1X2NoYXIgYnVmWzY0XTsKICAgICBjaXN0cGxfbGFuX25vZGVfaWRfdCAqbm9kZV9pZCA9IChjaXN0cGxfbGFuX25vZGVfaWRfdCopcGFyc2UuZnVuY2UuZGF0YTsKLSAgICBjaXN0cGxfY2Z0YWJsZV9lbnRyeV90ICpjZiA9ICZwYXJzZS5jZnRhYmxlX2VudHJ5OwogICAgIERFQ0xBUkVfTUFDX0JVRihtYWMpOwogCiAgICAgbG9jYWwtPmRpbmdvX2NjciA9IE5VTEw7CkBAIC04NDYsMTkgKzg4Niw4IEBACiAJICAgIC8qIFRha2UgdGhlIE1vZGVtIElPIHBvcnQgZnJvbSB0aGUgQ0lTIGFuZCBzY2FuIGZvciBhIGZyZWUKIAkgICAgICogRXRoZXJuZXQgcG9ydCAqLwogCSAgICBsaW5rLT5pby5OdW1Qb3J0czEgPSAxNjsgLyogbm8gTWFrbyBzdHVmZiBhbnltb3JlICovCi0JICAgIHR1cGxlLkRlc2lyZWRUdXBsZSA9IENJU1RQTF9DRlRBQkxFX0VOVFJZOwotCSAgICBmb3IgKGVyciA9IGZpcnN0X3R1cGxlKGxpbmssICZ0dXBsZSwgJnBhcnNlKTsgIWVycjsKLQkJCQkgZXJyID0gbmV4dF90dXBsZShsaW5rLCAmdHVwbGUsICZwYXJzZSkpIHsKLQkJaWYgKGNmLT5pby5ud2luID4gMCAgJiYgIChjZi0+aW8ud2luWzBdLmJhc2UgJiAweGYpID09IDgpIHsKLQkJICAgIGZvciAoaW9hZGRyID0gMHgzMDA7IGlvYWRkciA8IDB4NDAwOyBpb2FkZHIgKz0gMHgxMCkgewotCQkJbGluay0+Y29uZi5Db25maWdJbmRleCA9IGNmLT5pbmRleCA7Ci0JCQlsaW5rLT5pby5CYXNlUG9ydDIgPSBjZi0+aW8ud2luWzBdLmJhc2U7Ci0JCQlsaW5rLT5pby5CYXNlUG9ydDEgPSBpb2FkZHI7Ci0JCQlpZiAoIShlcnI9cGNtY2lhX3JlcXVlc3RfaW8obGluaywgJmxpbmstPmlvKSkpCi0JCQkgICAgZ290byBwb3J0X2ZvdW5kOwotCQkgICAgfQotCQl9Ci0JICAgIH0KKwkgICAgaWYgKCFwY21jaWFfbG9vcF9jb25maWcobGluaywgeGlyYzJwc19jb25maWdfbW9kZW0sIE5VTEwpKQorCQkgICAgZ290byBwb3J0X2ZvdW5kOwogCX0gZWxzZSB7CiAJICAgIGxpbmstPmlvLk51bVBvcnRzMSA9IDE4OwogCSAgICAvKiBXZSBkbyAyIHBhc3NlcyBoZXJlOiBUaGUgZmlyc3Qgb25lIHVzZXMgdGhlIHJlZ3VsYXIgbWFwcGluZyBhbmQKQEAgLTg2NiwyMSArODk1LDkgQEAKIAkgICAgICogbWlycm9yZWQgZXZlcnkgMzIgYnl0ZXMuIEFjdHVhbGx5IHdlIHVzZSBhIG1pcnJvcmVkIHBvcnQgZm9yCiAJICAgICAqIHRoZSBNYWtvIGlmIChvbiB0aGUgZmlyc3QgcGFzcykgdGhlIENPUiBiaXQgNSBpcyBzZXQuCiAJICAgICAqLwotCSAgICBmb3IgKHBhc3M9MDsgcGFzcyA8IDI7IHBhc3MrKykgewotCQl0dXBsZS5EZXNpcmVkVHVwbGUgPSBDSVNUUExfQ0ZUQUJMRV9FTlRSWTsKLQkJZm9yIChlcnIgPSBmaXJzdF90dXBsZShsaW5rLCAmdHVwbGUsICZwYXJzZSk7ICFlcnI7Ci0JCQkJICAgICBlcnIgPSBuZXh0X3R1cGxlKGxpbmssICZ0dXBsZSwgJnBhcnNlKSl7Ci0JCSAgICBpZiAoY2YtPmlvLm53aW4gPiAwICAmJiAgKGNmLT5pby53aW5bMF0uYmFzZSAmIDB4ZikgPT0gOCl7Ci0JCQlsaW5rLT5jb25mLkNvbmZpZ0luZGV4ID0gY2YtPmluZGV4IDsKLQkJCWxpbmstPmlvLkJhc2VQb3J0MiA9IGNmLT5pby53aW5bMF0uYmFzZTsKLQkJCWxpbmstPmlvLkJhc2VQb3J0MSA9IGxpbmstPmlvLkJhc2VQb3J0MgotCQkJCSAgICArIChwYXNzID8gKGNmLT5pbmRleCAmIDB4MjAgPyAtMjQ6OCkKLQkJCQkJICAgIDogKGNmLT5pbmRleCAmIDB4MjAgPyAgIDg6LTI0KSk7Ci0JCQlpZiAoIShlcnI9cGNtY2lhX3JlcXVlc3RfaW8obGluaywgJmxpbmstPmlvKSkpCisJICAgIGZvciAocGFzcz0wOyBwYXNzIDwgMjsgcGFzcysrKQorCQkgICAgaWYgKCFwY21jaWFfbG9vcF9jb25maWcobGluaywgeGlyYzJwc19jb25maWdfY2hlY2ssICZwYXNzKSkKIAkJCSAgICBnb3RvIHBvcnRfZm91bmQ7Ci0JCSAgICB9Ci0JCX0KLQkgICAgfQogCSAgICAvKiBpZiBzcGVjaWFsIG9wdGlvbjoKIAkgICAgICogdHJ5IHRvIGNvbmZpZ3VyZSBhcyBFdGhlcm5ldCBvbmx5LgogCSAgICAgKiAuLi4uICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvbWRpb19idXMuYyBiL2RyaXZlcnMvbmV0L3BoeS9tZGlvX2J1cy5jCmluZGV4IDY2NzFlMmQuLmQwZWQxZWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BoeS9tZGlvX2J1cy5jCisrKyBiL2RyaXZlcnMvbmV0L3BoeS9tZGlvX2J1cy5jCkBAIC01NSw2ICs1NSw3IEBACiAKIC8qKgogICogbWRpb2J1c19yZWxlYXNlIC0gbWlpX2J1cyBkZXZpY2UgcmVsZWFzZSBjYWxsYmFjaworICogQGQ6IHRoZSB0YXJnZXQgc3RydWN0IGRldmljZSB0aGF0IGNvbnRhaW5zIHRoZSBtaWlfYnVzCiAgKgogICogRGVzY3JpcHRpb246IGNhbGxlZCB3aGVuIHRoZSBsYXN0IHJlZmVyZW5jZSB0byBhbiBtaWlfYnVzIGlzCiAgKiBkcm9wcGVkLCB0byBmcmVlIHRoZSB1bmRlcmx5aW5nIG1lbW9yeS4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMgYi9kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jCmluZGV4IDE3MTYyNzQuLmUxMWIwM2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMKKysrIGIvZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYwpAQCAtMzA5LDExICszMDksNiBAQAogfQogRVhQT1JUX1NZTUJPTChwaHlfZGlzY29ubmVjdCk7CiAKLXN0YXRpYyBpbnQgcGh5X2NvbXBhcmVfaWQoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkYXRhKQotewotCXJldHVybiBzdHJjbXAoKGNoYXIgKilkYXRhLCBkZXYtPmJ1c19pZCkgPyAwIDogMTsKLX0KLQogLyoqCiAgKiBwaHlfYXR0YWNoIC0gYXR0YWNoIGEgbmV0d29yayBkZXZpY2UgdG8gYSBwYXJ0aWN1bGFyIFBIWSBkZXZpY2UKICAqIEBkZXY6IG5ldHdvcmsgZGV2aWNlIHRvIGF0dGFjaApAQCAtMzM3LDggKzMzMiw3IEBACiAKIAkvKiBTZWFyY2ggdGhlIGxpc3Qgb2YgUEhZIGRldmljZXMgb24gdGhlIG1kaW8gYnVzIGZvciB0aGUKIAkgKiBQSFkgd2l0aCB0aGUgcmVxdWVzdGVkIG5hbWUgKi8KLQlkID0gYnVzX2ZpbmRfZGV2aWNlKGJ1cywgTlVMTCwgKHZvaWQgKilidXNfaWQsIHBoeV9jb21wYXJlX2lkKTsKLQorCWQgPSBidXNfZmluZF9kZXZpY2VfYnlfbmFtZShidXMsIE5VTEwsIGJ1c19pZCk7CiAJaWYgKGQpIHsKIAkJcGh5ZGV2ID0gdG9fcGh5X2RldmljZShkKTsKIAl9IGVsc2UgewpAQCAtNTU3LDYgKzU1MSw3IEBACiAKIAlyZXR1cm4gY3RsOwogfQorRVhQT1JUX1NZTUJPTChnZW5waHlfcmVzdGFydF9hbmVnKTsKIAogCiAvKioKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BwcF9nZW5lcmljLmMgYi9kcml2ZXJzL25ldC9wcHBfZ2VuZXJpYy5jCmluZGV4IDBjYTBmY2IuLjdlODU3ZTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BwcF9nZW5lcmljLmMKKysrIGIvZHJpdmVycy9uZXQvcHBwX2dlbmVyaWMuYwpAQCAtODY2LDggKzg2Niw4IEBACiAJCQllcnIgPSBQVFJfRVJSKHBwcF9jbGFzcyk7CiAJCQlnb3RvIG91dF9jaHJkZXY7CiAJCX0KLQkJZGV2aWNlX2NyZWF0ZV9kcnZkYXRhKHBwcF9jbGFzcywgTlVMTCwgTUtERVYoUFBQX01BSk9SLCAwKSwKLQkJCQkgICAgICBOVUxMLCAicHBwIik7CisJCWRldmljZV9jcmVhdGUocHBwX2NsYXNzLCBOVUxMLCBNS0RFVihQUFBfTUFKT1IsIDApLCBOVUxMLAorCQkJICAgICAgInBwcCIpOwogCX0KIAogb3V0OgpAQCAtMjEyNywxMyArMjEyNyw5IEBACiAJICAgIHx8IGNjcF9vcHRpb25bMV0gPCAyIHx8IGNjcF9vcHRpb25bMV0gPiBkYXRhLmxlbmd0aCkKIAkJZ290byBvdXQ7CiAKLQljcCA9IGZpbmRfY29tcHJlc3NvcihjY3Bfb3B0aW9uWzBdKTsKLSNpZmRlZiBDT05GSUdfS01PRAotCWlmICghY3ApIHsKLQkJcmVxdWVzdF9tb2R1bGUoInBwcC1jb21wcmVzcy0lZCIsIGNjcF9vcHRpb25bMF0pOwotCQljcCA9IGZpbmRfY29tcHJlc3NvcihjY3Bfb3B0aW9uWzBdKTsKLQl9Ci0jZW5kaWYgLyogQ09ORklHX0tNT0QgKi8KKwljcCA9IHRyeV90aGVuX3JlcXVlc3RfbW9kdWxlKAorCQlmaW5kX2NvbXByZXNzb3IoY2NwX29wdGlvblswXSksCisJCSJwcHAtY29tcHJlc3MtJWQiLCBjY3Bfb3B0aW9uWzBdKTsKIAlpZiAoIWNwKQogCQlnb3RvIG91dDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcHBwb3guYyBiL2RyaXZlcnMvbmV0L3BwcG94LmMKaW5kZXggYzY4OThjMS4uMDNhZWNjOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcHBwb3guYworKysgYi9kcml2ZXJzL25ldC9wcHBveC5jCkBAIC0xMTUsMTMgKzExNSw4IEBACiAJCWdvdG8gb3V0OwogCiAJcmMgPSAtRVBST1RPTk9TVVBQT1JUOwotI2lmZGVmIENPTkZJR19LTU9ECi0JaWYgKCFwcHBveF9wcm90b3NbcHJvdG9jb2xdKSB7Ci0JCWNoYXIgYnVmZmVyWzMyXTsKLQkJc3ByaW50ZihidWZmZXIsICJwcHBveC1wcm90by0lZCIsIHByb3RvY29sKTsKLQkJcmVxdWVzdF9tb2R1bGUoYnVmZmVyKTsKLQl9Ci0jZW5kaWYKKwlpZiAoIXBwcG94X3Byb3Rvc1twcm90b2NvbF0pCisJCXJlcXVlc3RfbW9kdWxlKCJwcHBveC1wcm90by0lZCIsIHByb3RvY29sKTsKIAlpZiAoIXBwcG94X3Byb3Rvc1twcm90b2NvbF0gfHwKIAkgICAgIXRyeV9tb2R1bGVfZ2V0KHBwcG94X3Byb3Rvc1twcm90b2NvbF0tPm93bmVyKSkKIAkJZ290byBvdXQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9xbGdlL3FsZ2UuaCBiL2RyaXZlcnMvbmV0L3FsZ2UvcWxnZS5oCmluZGV4IGMzN2VhNDMuLjM4MTE2ZjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3FsZ2UvcWxnZS5oCisrKyBiL2RyaXZlcnMvbmV0L3FsZ2UvcWxnZS5oCkBAIC01OCw3ICs1OCw3IEBACiAgKi8KICNpZiAoUEFHRV9TSElGVCA9PSAxMikgfHwgKFBBR0VfU0hJRlQgPT0gMTMpCS8qIDRrICYgOGsgcGFnZXMgKi8KICNkZWZpbmUgVFhfREVTQ19QRVJfT0FMICgoTUFYX1NLQl9GUkFHUyAtIFRYX0RFU0NfUEVSX0lPQ0IpICsgMikKLSNlbGlmIChQQUdFX1NISUZUID09IDE2KQkvKiA2NGsgcGFnZXMgKi8KKyNlbHNlIC8qIGFsbCBvdGhlciBwYWdlIHNpemVzICovCiAjZGVmaW5lIFRYX0RFU0NfUEVSX09BTCAwCiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcWxnZS9xbGdlX2V0aHRvb2wuYyBiL2RyaXZlcnMvbmV0L3FsZ2UvcWxnZV9ldGh0b29sLmMKaW5kZXggNjQ1N2Y4Yy4uYjYyZmJkNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcWxnZS9xbGdlX2V0aHRvb2wuYworKysgYi9kcml2ZXJzL25ldC9xbGdlL3FsZ2VfZXRodG9vbC5jCkBAIC0yOSw3ICsyOSw2IEBACiAjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CiAjaW5jbHVkZSA8bGludXgvcnRuZXRsaW5rLmg+CiAjaW5jbHVkZSA8bGludXgvaWZfdmxhbi5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcWxnZS9xbGdlX21haW4uYyBiL2RyaXZlcnMvbmV0L3FsZ2UvcWxnZV9tYWluLmMKaW5kZXggM2FmODIyYi4uNGIyY2FhNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcWxnZS9xbGdlX21haW4uYworKysgYi9kcml2ZXJzL25ldC9xbGdlL3FsZ2VfbWFpbi5jCkBAIC0zNiwxMCArMzYsMTAgQEAKICNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KICNpbmNsdWRlIDxsaW51eC9ydG5ldGxpbmsuaD4KICNpbmNsdWRlIDxsaW51eC9pZl92bGFuLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CisjaW5jbHVkZSA8bmV0L2lwNl9jaGVja3N1bS5oPgogCiAjaW5jbHVkZSAicWxnZS5oIgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9yODE2OS5jIGIvZHJpdmVycy9uZXQvcjgxNjkuYwppbmRleCBiZGFlMmM1Li5jODIxZGEyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9yODE2OS5jCisrKyBiL2RyaXZlcnMvbmV0L3I4MTY5LmMKQEAgLTIxNTQsNiArMjE1NCw4IEBACiAKIAlzcGluX2xvY2tfaW5pdCgmdHAtPmxvY2spOwogCisJdHAtPm1taW9fYWRkciA9IGlvYWRkcjsKKwogCXJ0bF9pbml0X21hY19hZGRyZXNzKHRwLCBpb2FkZHIpOwogCiAJLyogR2V0IE1BQyBhZGRyZXNzICovCkBAIC0yMTg2LDcgKzIxODgsNiBAQAogI2VuZGlmCiAKIAl0cC0+aW50cl9tYXNrID0gMHhmZmZmOwotCXRwLT5tbWlvX2FkZHIgPSBpb2FkZHI7CiAJdHAtPmFsaWduID0gY2ZnLT5hbGlnbjsKIAl0cC0+aHdfc3RhcnQgPSBjZmctPmh3X3N0YXJ0OwogCXRwLT5pbnRyX2V2ZW50ID0gY2ZnLT5pbnRyX2V2ZW50OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2hfZXRoLmMgYi9kcml2ZXJzL25ldC9zaF9ldGguYwppbmRleCBiMzlkMWNjLi5hMjRiYjY4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zaF9ldGguYworKysgYi9kcml2ZXJzL25ldC9zaF9ldGguYwpAQCAtMTIwNSwxMSArMTIwNSwxMiBAQAogCQlkZXZubyA9IDA7CiAKIAluZGV2LT5kbWEgPSAtMTsKLQluZGV2LT5pcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApOwotCWlmIChuZGV2LT5pcnEgPCAwKSB7CisJcmV0ID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKTsKKwlpZiAocmV0IDwgMCkgewogCQlyZXQgPSAtRU5PREVWOwogCQlnb3RvIG91dF9yZWxlYXNlOwogCX0KKwluZGV2LT5pcnEgPSByZXQ7CiAKIAlTRVRfTkVUREVWX0RFVihuZGV2LCAmcGRldi0+ZGV2KTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2t5Mi5jIGIvZHJpdmVycy9uZXQvc2t5Mi5jCmluZGV4IDM4MDViOTMuLjM4MTNkMTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NreTIuYworKysgYi9kcml2ZXJzL25ldC9za3kyLmMKQEAgLTMwMzQsNyArMzAzNCw4IEBACiAJc3RydWN0IHNreTJfcG9ydCAqc2t5MiA9IG5ldGRldl9wcml2KGRldik7CiAJc3RydWN0IHNreTJfaHcgKmh3ID0gc2t5Mi0+aHc7CiAKLQlpZiAod29sLT53b2xvcHRzICYgfnNreTJfd29sX3N1cHBvcnRlZChza3kyLT5odykpCisJaWYgKCh3b2wtPndvbG9wdHMgJiB+c2t5Ml93b2xfc3VwcG9ydGVkKHNreTItPmh3KSkKKwkgICAgfHwgIWRldmljZV9jYW5fd2FrZXVwKCZody0+cGRldi0+ZGV2KSkKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCiAJc2t5Mi0+d29sID0gd29sLT53b2xvcHRzOwpAQCAtMzA0NSw2ICszMDQ2LDggQEAKIAkJc2t5Ml93cml0ZTMyKGh3LCBCMF9DVFNULCBza3kyLT53b2wKIAkJCSAgICAgPyBZMl9IV19XT0xfT04gOiBZMl9IV19XT0xfT0ZGKTsKIAorCWRldmljZV9zZXRfd2FrZXVwX2VuYWJsZSgmaHctPnBkZXYtPmRldiwgc2t5Mi0+d29sKTsKKwogCWlmICghbmV0aWZfcnVubmluZyhkZXYpKQogCQlza3kyX3dvbF9pbml0KHNreTIpOwogCXJldHVybiAwOwpAQCAtNDE3OSwxOCArNDE4Miw2IEBACiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIGludCBfX2RldmluaXQgcGNpX3dha2VfZW5hYmxlZChzdHJ1Y3QgcGNpX2RldiAqZGV2KQotewotCWludCBwbSAgPSBwY2lfZmluZF9jYXBhYmlsaXR5KGRldiwgUENJX0NBUF9JRF9QTSk7Ci0JdTE2IHZhbHVlOwotCi0JaWYgKCFwbSkKLQkJcmV0dXJuIDA7Ci0JaWYgKHBjaV9yZWFkX2NvbmZpZ193b3JkKGRldiwgcG0gKyBQQ0lfUE1fQ1RSTCwgJnZhbHVlKSkKLQkJcmV0dXJuIDA7Ci0JcmV0dXJuIHZhbHVlICYgUENJX1BNX0NUUkxfUE1FX0VOQUJMRTsKLX0KLQogLyoKICAqIFJlYWQgYW5kIHBhcnNlIHRoZSBmaXJzdCBwYXJ0IG9mIFZpdGFsIFByb2R1Y3QgRGF0YQogICovCkBAIC00MzE0LDcgKzQzMDUsNyBAQAogCQl9CiAJfQogCi0Jd29sX2RlZmF1bHQgPSBwY2lfd2FrZV9lbmFibGVkKHBkZXYpID8gV0FLRV9NQUdJQyA6IDA7CisJd29sX2RlZmF1bHQgPSBkZXZpY2VfbWF5X3dha2V1cCgmcGRldi0+ZGV2KSA/IFdBS0VfTUFHSUMgOiAwOwogCiAJZXJyID0gLUVOT01FTTsKIAlodyA9IGt6YWxsb2Moc2l6ZW9mKCpodyksIEdGUF9LRVJORUwpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc21jOTExeC5jIGIvZHJpdmVycy9uZXQvc21jOTExeC5jCmluZGV4IDNkMTlkMDAuLjhhYTc0NjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NtYzkxMXguYworKysgYi9kcml2ZXJzL25ldC9zbWM5MTF4LmMKQEAgLTY4NSw4ICs2ODUsMTAgQEAKIAkgKiBQSFkjMSB0byBQSFkjMzEsIGFuZCB0aGVuIFBIWSMwIGxhc3QuCiAJICovCiAJc3dpdGNoKGxwLT52ZXJzaW9uKSB7Ci0JCWNhc2UgMHgxMTU6Ci0JCWNhc2UgMHgxMTc6CisJCWNhc2UgQ0hJUF85MTE1OgorCQljYXNlIENISVBfOTExNzoKKwkJY2FzZSBDSElQXzkyMTU6CisJCWNhc2UgQ0hJUF85MjE3OgogCQkJY2ZnID0gU01DX0dFVF9IV19DRkcobHApOwogCQkJaWYgKGNmZyAmIEhXX0NGR19FWFRfUEhZX0RFVF8pIHsKIAkJCQljZmcgJj0gfkhXX0NGR19QSFlfQ0xLX1NFTF87CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zbWM5MTF4LmggYi9kcml2ZXJzL25ldC9zbWM5MTF4LmgKaW5kZXggMmFiZmMyOC4uYmY2MjQwZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc21jOTExeC5oCisrKyBiL2RyaXZlcnMvbmV0L3NtYzkxMXguaApAQCAtNjY2LDEwICs2NjYsMTMgQEAKICNkZWZpbmUgTEFOOTExWF9JTlRFUk5BTF9QSFlfSUQJCSgweDAwMDdDMDAwKQogCiAvKiBDaGlwIElEIHZhbHVlcyAqLwotI2RlZmluZSBDSElQXzkxMTUJMHgxMTUKLSNkZWZpbmUgQ0hJUF85MTE2CTB4MTE2Ci0jZGVmaW5lIENISVBfOTExNwkweDExNwotI2RlZmluZSBDSElQXzkxMTgJMHgxMTgKKyNkZWZpbmUgQ0hJUF85MTE1CTB4MDExNQorI2RlZmluZSBDSElQXzkxMTYJMHgwMTE2CisjZGVmaW5lIENISVBfOTExNwkweDAxMTcKKyNkZWZpbmUgQ0hJUF85MTE4CTB4MDExOAorI2RlZmluZSBDSElQXzkyMTUJMHgxMTVBCisjZGVmaW5lIENISVBfOTIxNwkweDExN0EKKyNkZWZpbmUgQ0hJUF85MjE4CTB4MTE4QQogCiBzdHJ1Y3QgY2hpcF9pZCB7CiAJdTE2IGlkOwpAQCAtNjgxLDYgKzY4NCw5IEBACiAJeyBDSElQXzkxMTYsICJMQU45MTE2IiB9LAogCXsgQ0hJUF85MTE3LCAiTEFOOTExNyIgfSwKIAl7IENISVBfOTExOCwgIkxBTjkxMTgiIH0sCisJeyBDSElQXzkyMTUsICJMQU45MjE1IiB9LAorCXsgQ0hJUF85MjE3LCAiTEFOOTIxNyIgfSwKKwl7IENISVBfOTIxOCwgIkxBTjkyMTgiIH0sCiAJeyAwLCBOVUxMIH0sCiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90YzM1ODE1LmMgYi9kcml2ZXJzL25ldC90YzM1ODE1LmMKaW5kZXggNDk4MGIxMi4uZGYyMGNhZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdGMzNTgxNS5jCisrKyBiL2RyaXZlcnMvbmV0L3RjMzU4MTUuYwpAQCAtNzk2LDcgKzc5Niw3IEBACiAJbWRpb2J1c191bnJlZ2lzdGVyKGxwLT5taWlfYnVzKTsKIGVycl9vdXRfZnJlZV9tZGlvX2lycToKIAlrZnJlZShscC0+bWlpX2J1cy0+aXJxKTsKLWVycl9vdXRfZnJlZV9taWlfYnVzOworZXJyX291dF9mcmVlX21paV9idXM6CiAJbWRpb2J1c19mcmVlKGxwLT5taWlfYnVzKTsKIGVycl9vdXQ6CiAJcmV0dXJuIGVycjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3RsYW4uYyBiL2RyaXZlcnMvbmV0L3RsYW4uYwppbmRleCBlYzg3MWY2Li5jNDFkNjg3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC90bGFuLmMKKysrIGIvZHJpdmVycy9uZXQvdGxhbi5jCkBAIC0yOSw3ICsyOSw4IEBACiAgKgogICoJVGlncmFuIEFpdmF6aWFuIDx0aWdyYW5Ac2NvLmNvbT46CVRMYW5fUGNpUHJvYmUoKSBub3cgdXNlcwogICoJCQkJCQluZXcgUENJIEJJT1MgaW50ZXJmYWNlLgotICoJQWxhbiBDb3gJPGFsYW5AcmVkaGF0LmNvbT46CUZpeGVkIHRoZSBvdXQgb2YgbWVtb3J5CisgKglBbGFuIENveAk8YWxhbkBseG9yZ3VrLnVrdXUub3JnLnVrPjoKKyAqCQkJCQkJRml4ZWQgdGhlIG91dCBvZiBtZW1vcnkKICAqCQkJCQkJaGFuZGxpbmcuCiAgKgogICoJVG9yYmVuIE1hdGhpYXNlbiA8dG9yYmVuLm1hdGhpYXNlbkBjb21wYXEuY29tPiBOZXcgTWFpbnRhaW5lciEKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3Rva2VucmluZy9zbWN0ci5jIGIvZHJpdmVycy9uZXQvdG9rZW5yaW5nL3NtY3RyLmMKaW5kZXggZmE3M2U2ZS4uZWQ1MGQyOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdG9rZW5yaW5nL3NtY3RyLmMKKysrIGIvZHJpdmVycy9uZXQvdG9rZW5yaW5nL3NtY3RyLmMKQEAgLTI1LDcgKzI1LDcgQEAKICAqICBUbyBkbzoKICAqICAgIDEuIE11bHRpY2FzdCBzdXBwb3J0LgogICoKLSAqICBJbml0aWFsIDIuNSBjbGVhbnVwIEFsYW4gQ294IDxhbGFuQHJlZGhhdC5jb20+ICAyMDAyLzEwLzI4CisgKiAgSW5pdGlhbCAyLjUgY2xlYW51cCBBbGFuIENveCA8YWxhbkBseG9yZ3VrLnVrdXUub3JnLnVrPiAgMjAwMi8xMC8yOAogICovCiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3R1bGlwL2RlMjEwNHguYyBiL2RyaXZlcnMvbmV0L3R1bGlwL2RlMjEwNHguYwppbmRleCBmNTRjNDUwLi4xMjRkNWQ2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC90dWxpcC9kZTIxMDR4LmMKKysrIGIvZHJpdmVycy9uZXQvdHVsaXAvZGUyMTA0eC5jCkBAIC0xNjg4LDYgKzE2ODgsNyBAQAogCXVuc2lnbmVkIGk7CiAKIAlkdzMyIChST01DbWQsIDApOwkvKiBSZXNldCB0aGUgcG9pbnRlciB3aXRoIGEgZHVtbXkgd3JpdGUuICovCisJdWRlbGF5KDUpOwogCiAJZm9yIChpID0gMDsgaSA8IDY7IGkrKykgewogCQlpbnQgdmFsdWUsIGJvZ3VzY250ID0gMTAwMDAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdHVsaXAvZG1mZS5jIGIvZHJpdmVycy9uZXQvdHVsaXAvZG1mZS5jCmluZGV4IDY1NjIwMDQuLjhlNDZhNTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3R1bGlwL2RtZmUuYworKysgYi9kcml2ZXJzL25ldC90dWxpcC9kbWZlLmMKQEAgLTIzLDcgKzIzLDcgQEAKICAgICBNYXJjZWxvIFRvc2F0dGkgPG1hcmNlbG9AY29uZWN0aXZhLmNvbS5icj4gOgogICAgIE1hZGUgaXQgY29tcGlsZSBpbiAyLjMgKGRldmljZSB0byBuZXRfZGV2aWNlKQogCi0gICAgQWxhbiBDb3ggPGFsYW5AcmVkaGF0LmNvbT4gOgorICAgIEFsYW4gQ294IDxhbGFuQGx4b3JndWsudWt1dS5vcmcudWs+IDoKICAgICBDbGVhbmVkIHVwIGZvciBrZXJuZWwgbWVyZ2UuCiAgICAgUmVtb3ZlZCB0aGUgYmFjayBjb21wYXRpYmlsaXR5IHN1cHBvcnQKICAgICBSZWZvcm1hdHRlZCwgZml4aW5nIHNwZWxsaW5nIGV0YyBhcyBJIHdlbnQKQEAgLTQ5LDcgKzQ5LDcgQEAKICAgICBzdXBwb3J0LiAgVXBkYXRlZCBQQ0kgcmVzb3VyY2UgYWxsb2NhdGlvbi4gIERvIG5vdAogICAgIGZvcmdldCB0byB1bm1hcCBQQ0kgbWFwcGVkIHNrYnMuCiAKLSAgICBBbGFuIENveCA8YWxhbkByZWRoYXQuY29tPgorICAgIEFsYW4gQ294IDxhbGFuQGx4b3JndWsudWt1dS5vcmcudWs+CiAgICAgQWRkZWQgbmV3IFBDSSBpZGVudGlmaWVycyBwcm92aWRlZCBieSBDbGVhciBaaGFuZyBhdCBBTGkKICAgICBmb3IgdGhlaXIgMTU2MyBldGhlcm5ldCBkZXZpY2UuCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3VzYi9jYXRjLmMgYi9kcml2ZXJzL25ldC91c2IvY2F0Yy5jCmluZGV4IDIyYzE3YmIuLjQ2NmE4OWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3VzYi9jYXRjLmMKKysrIGIvZHJpdmVycy9uZXQvdXNiL2NhdGMuYwpAQCAtNDU2LDcgKzQ1Niw3IEBACiB7CiAJc3RydWN0IGNhdGMgKmNhdGMgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwogCi0Jd2FybigiVHJhbnNtaXQgdGltZWQgb3V0LiIpOworCWRldl93YXJuKCZuZXRkZXYtPmRldiwgIlRyYW5zbWl0IHRpbWVkIG91dC5cbiIpOwogCXVzYl91bmxpbmtfdXJiKGNhdGMtPnR4X3VyYik7CiB9CiAKQEAgLTg0Nyw3ICs4NDcsOCBAQAogCQkJZGJnKCI2NGsgTWVtb3J5XG4iKTsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgotCQkJd2FybigiQ291bGRuJ3QgZGV0ZWN0IG1lbW9yeSBzaXplLCBhc3N1bWluZyAzMmsiKTsKKwkJCWRldl93YXJuKCZpbnRmLT5kZXYsCisJCQkJICJDb3VsZG4ndCBkZXRlY3QgbWVtb3J5IHNpemUsIGFzc3VtaW5nIDMya1xuIik7CiAJCWNhc2UgMHg4NzY1NDMyMToKIAkJCWNhdGNfc2V0X3JlZyhjYXRjLCBUeEJ1ZkNvdW50LCA0KTsKIAkJCWNhdGNfc2V0X3JlZyhjYXRjLCBSeEJ1ZkNvdW50LCAxNik7CkBAIC05NTMsNyArOTU0LDggQEAKIHsKIAlpbnQgcmVzdWx0ID0gdXNiX3JlZ2lzdGVyKCZjYXRjX2RyaXZlcik7CiAJaWYgKHJlc3VsdCA9PSAwKQotCQlpbmZvKERSSVZFUl9WRVJTSU9OICIgIiBEUklWRVJfREVTQyk7CisJCXByaW50ayhLRVJOX0lORk8gS0JVSUxEX01PRE5BTUUgIjogIiBEUklWRVJfVkVSU0lPTiAiOiIKKwkJICAgICAgIERSSVZFUl9ERVNDICJcbiIpOwogCXJldHVybiByZXN1bHQ7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3VzYi9rYXdldGguYyBiL2RyaXZlcnMvbmV0L3VzYi9rYXdldGguYwppbmRleCBkNjgyOWRiLi5mZGJmM2JlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC91c2Iva2F3ZXRoLmMKKysrIGIvZHJpdmVycy9uZXQvdXNiL2thd2V0aC5jCkBAIC04MzIsNyArODMyLDcgQEAKIAogCWlmKChyZXMgPSB1c2Jfc3VibWl0X3VyYihrYXdldGgtPnR4X3VyYiwgR0ZQX0FUT01JQykpKQogCXsKLQkJd2Fybigia2F3ZXRoIGZhaWxlZCB0eF91cmIgJWQiLCByZXMpOworCQlkZXZfd2FybigmbmV0LT5kZXYsICJrYXdldGggZmFpbGVkIHR4X3VyYiAlZFxuIiwgcmVzKTsKIHNraXA6CiAJCWthd2V0aC0+c3RhdHMudHhfZXJyb3JzKys7CiAKQEAgLTkyNCw3ICs5MjQsNyBAQAogewogCXN0cnVjdCBrYXdldGhfZGV2aWNlICprYXdldGggPSBuZXRkZXZfcHJpdihuZXQpOwogCi0Jd2FybigiJXM6IFR4IHRpbWVkIG91dC4gUmVzZXR0aW5nLiIsIG5ldC0+bmFtZSk7CisJZGV2X3dhcm4oJm5ldC0+ZGV2LCAiJXM6IFR4IHRpbWVkIG91dC4gUmVzZXR0aW5nLlxuIiwgbmV0LT5uYW1lKTsKIAlrYXdldGgtPnN0YXRzLnR4X2Vycm9ycysrOwogCW5ldC0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOwogCkBAIC0xMDE2LDEwICsxMDE2LDEwIEBACiAJICovCiAKIAlpZiAobGUxNl90b19jcHUoZGV2LT5kZXNjcmlwdG9yLmJjZERldmljZSkgPj4gOCkgewotCQlpbmZvKCJGaXJtd2FyZSBwcmVzZW50IGluIGRldmljZS4iKTsKKwkJZGV2X2luZm8oJmludGYtPmRldiwgIkZpcm13YXJlIHByZXNlbnQgaW4gZGV2aWNlLlxuIik7CiAJfSBlbHNlIHsKIAkJLyogRG93bmxvYWQgdGhlIGZpcm13YXJlICovCi0JCWluZm8oIkRvd25sb2FkaW5nIGZpcm13YXJlLi4uIik7CisJCWRldl9pbmZvKCZpbnRmLT5kZXYsICJEb3dubG9hZGluZyBmaXJtd2FyZS4uLlxuIik7CiAJCWthd2V0aC0+ZmlybXdhcmVfYnVmID0gKF9fdTggKilfX2dldF9mcmVlX3BhZ2UoR0ZQX0tFUk5FTCk7CiAJCWlmICgocmVzdWx0ID0ga2F3ZXRoX2Rvd25sb2FkX2Zpcm13YXJlKGthd2V0aCwKIAkJCQkJCSAgICAgICJrYXdldGgvbmV3X2NvZGUuYmluIiwKQEAgLTEwNjEsNyArMTA2MSw3IEBACiAJCX0KIAogCQkvKiBEZXZpY2Ugd2lsbCBub3cgZGlzYXBwZWFyIGZvciBhIG1vbWVudC4uLiAgKi8KLQkJaW5mbygiRmlybXdhcmUgbG9hZGVkLiAgSSdsbCBiZSBiYWNrLi4uIik7CisJCWRldl9pbmZvKCZpbnRmLT5kZXYsICJGaXJtd2FyZSBsb2FkZWQuICBJJ2xsIGJlIGJhY2suLi5cbiIpOwogZXJyX2Z3OgogCQlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpa2F3ZXRoLT5maXJtd2FyZV9idWYpOwogCQlmcmVlX25ldGRldihuZXRkZXYpOwpAQCAtMTA3NSwxMCArMTA3NSwxMCBAQAogCQlnb3RvIGVycl9mcmVlX25ldGRldjsKIAl9CiAKLQlpbmZvKCJTdGF0aXN0aWNzIGNvbGxlY3Rpb246ICV4Iiwga2F3ZXRoLT5jb25maWd1cmF0aW9uLnN0YXRpc3RpY3NfbWFzayk7Ci0JaW5mbygiTXVsdGljYXN0IGZpbHRlciBsaW1pdDogJXgiLCBrYXdldGgtPmNvbmZpZ3VyYXRpb24ubWF4X211bHRpY2FzdF9maWx0ZXJzICYgKCgxIDw8IDE1KSAtIDEpKTsKLQlpbmZvKCJNVFU6ICVkIiwgbGUxNl90b19jcHUoa2F3ZXRoLT5jb25maWd1cmF0aW9uLnNlZ21lbnRfc2l6ZSkpOwotCWluZm8oIlJlYWQgTUFDIGFkZHJlc3MgJTIuMng6JTIuMng6JTIuMng6JTIuMng6JTIuMng6JTIuMngiLAorCWRldl9pbmZvKCZpbnRmLT5kZXYsICJTdGF0aXN0aWNzIGNvbGxlY3Rpb246ICV4XG4iLCBrYXdldGgtPmNvbmZpZ3VyYXRpb24uc3RhdGlzdGljc19tYXNrKTsKKwlkZXZfaW5mbygmaW50Zi0+ZGV2LCAiTXVsdGljYXN0IGZpbHRlciBsaW1pdDogJXhcbiIsIGthd2V0aC0+Y29uZmlndXJhdGlvbi5tYXhfbXVsdGljYXN0X2ZpbHRlcnMgJiAoKDEgPDwgMTUpIC0gMSkpOworCWRldl9pbmZvKCZpbnRmLT5kZXYsICJNVFU6ICVkXG4iLCBsZTE2X3RvX2NwdShrYXdldGgtPmNvbmZpZ3VyYXRpb24uc2VnbWVudF9zaXplKSk7CisJZGV2X2luZm8oJmludGYtPmRldiwgIlJlYWQgTUFDIGFkZHJlc3MgJTIuMng6JTIuMng6JTIuMng6JTIuMng6JTIuMng6JTIuMnhcbiIsCiAJCSAoaW50KWthd2V0aC0+Y29uZmlndXJhdGlvbi5od19hZGRyWzBdLAogCQkgKGludClrYXdldGgtPmNvbmZpZ3VyYXRpb24uaHdfYWRkclsxXSwKIAkJIChpbnQpa2F3ZXRoLT5jb25maWd1cmF0aW9uLmh3X2FkZHJbMl0sCkBAIC0xMTc0LDcgKzExNzQsOCBAQAogCQlnb3RvIGVycl9pbnRmZGF0YTsKIAl9CiAKLQlpbmZvKCJrYXdldGggaW50ZXJmYWNlIGNyZWF0ZWQgYXQgJXMiLCBrYXdldGgtPm5ldC0+bmFtZSk7CisJZGV2X2luZm8oJmludGYtPmRldiwgImthd2V0aCBpbnRlcmZhY2UgY3JlYXRlZCBhdCAlc1xuIiwKKwkJIGthd2V0aC0+bmV0LT5uYW1lKTsKIAogCWRiZygiS2F3ZXRoIHByb2JlIHJldHVybmluZy4iKTsKIApAQCAtMTIwNSwxMSArMTIwNiwxMSBAQAogCXN0cnVjdCBrYXdldGhfZGV2aWNlICprYXdldGggPSB1c2JfZ2V0X2ludGZkYXRhKGludGYpOwogCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXY7CiAKLQlpbmZvKCJVbnJlZ2lzdGVyaW5nIik7CisJZGV2X2luZm8oJmludGYtPmRldiwgIlVucmVnaXN0ZXJpbmdcbiIpOwogCiAJdXNiX3NldF9pbnRmZGF0YShpbnRmLCBOVUxMKTsKIAlpZiAoIWthd2V0aCkgewotCQl3YXJuKCJ1bnJlZ2lzdGVyaW5nIG5vbi1leGlzdGFudCBkZXZpY2UiKTsKKwkJZGV2X3dhcm4oJmludGYtPmRldiwgInVucmVnaXN0ZXJpbmcgbm9uLWV4aXN0YW50IGRldmljZVxuIik7CiAJCXJldHVybjsKIAl9CiAJbmV0ZGV2ID0ga2F3ZXRoLT5uZXQ7CkBAIC0xMjY5LDcgKzEyNzAsNyBAQAogCiAJaWYgKCF3YWl0X2V2ZW50X3RpbWVvdXQoYXdkLndxaCwgYXdkLmRvbmUsIHRpbWVvdXQpKSB7CiAgICAgICAgICAgICAgICAgLy8gdGltZW91dAotICAgICAgICAgICAgICAgIHdhcm4oInVzYl9jb250cm9sL2J1bGtfbXNnOiB0aW1lb3V0Iik7CisgICAgICAgICAgICAgICAgZGV2X3dhcm4oJnVyYi0+ZGV2LT5kZXYsICJ1c2JfY29udHJvbC9idWxrX21zZzogdGltZW91dFxuIik7CiAgICAgICAgICAgICAgICAgdXNiX2tpbGxfdXJiKHVyYik7ICAvLyByZW1vdmUgdXJiIHNhZmVseQogICAgICAgICAgICAgICAgIHN0YXR1cyA9IC1FVElNRURPVVQ7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3VzYi9ydGw4MTUwLmMgYi9kcml2ZXJzL25ldC91c2IvcnRsODE1MC5jCmluZGV4IGRmNTZhNTEuLjYxMzM0MDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3VzYi9ydGw4MTUwLmMKKysrIGIvZHJpdmVycy9uZXQvdXNiL3J0bDgxNTAuYwpAQCAtMjIxLDcgKzIyMSw3IEBACiAJY2FzZSAtRU5PRU5UOgogCQlicmVhazsKIAlkZWZhdWx0OgotCQl3YXJuKCJjdHJsIHVyYiBzdGF0dXMgJWQiLCB1cmItPnN0YXR1cyk7CisJCWRldl93YXJuKCZ1cmItPmRldi0+ZGV2LCAiY3RybCB1cmIgc3RhdHVzICVkXG4iLCB1cmItPnN0YXR1cyk7CiAJfQogCWRldiA9IHVyYi0+Y29udGV4dDsKIAljbGVhcl9iaXQoUlhfUkVHX1NFVCwgJmRldi0+ZmxhZ3MpOwpAQCAtNDQxLDEwICs0NDEsMTAgQEAKIAljYXNlIC1FTk9FTlQ6CiAJCXJldHVybjsJLyogdGhlIHVyYiBpcyBpbiB1bmxpbmsgc3RhdGUgKi8KIAljYXNlIC1FVElNRToKLQkJd2FybigibWF5IGJlIHJlc2V0IGlzIG5lZWRlZD8uLiIpOworCQlkZXZfd2FybigmdXJiLT5kZXYtPmRldiwgIm1heSBiZSByZXNldCBpcyBuZWVkZWQ/Li5cbiIpOwogCQlnb3RvIGdvb247CiAJZGVmYXVsdDoKLQkJd2FybigiUnggc3RhdHVzICVkIiwgdXJiLT5zdGF0dXMpOworCQlkZXZfd2FybigmdXJiLT5kZXYtPmRldiwgIlJ4IHN0YXR1cyAlZFxuIiwgdXJiLT5zdGF0dXMpOwogCQlnb3RvIGdvb247CiAJfQogCkBAIC01MzgsNyArNTM4LDggQEAKIAlpZiAoIW5ldGlmX2RldmljZV9wcmVzZW50KGRldi0+bmV0ZGV2KSkKIAkJcmV0dXJuOwogCWlmICh1cmItPnN0YXR1cykKLQkJaW5mbygiJXM6IFR4IHN0YXR1cyAlZCIsIGRldi0+bmV0ZGV2LT5uYW1lLCB1cmItPnN0YXR1cyk7CisJCWRldl9pbmZvKCZ1cmItPmRldi0+ZGV2LCAiJXM6IFR4IHN0YXR1cyAlZFxuIiwKKwkJCSBkZXYtPm5ldGRldi0+bmFtZSwgdXJiLT5zdGF0dXMpOwogCWRldi0+bmV0ZGV2LT50cmFuc19zdGFydCA9IGppZmZpZXM7CiAJbmV0aWZfd2FrZV9xdWV1ZShkZXYtPm5ldGRldik7CiB9CkBAIC01NjEsNyArNTYyLDggQEAKIAkJcmV0dXJuOwogCS8qIC1FUElQRTogIHNob3VsZCBjbGVhciB0aGUgaGFsdCAqLwogCWRlZmF1bHQ6Ci0JCWluZm8oIiVzOiBpbnRyIHN0YXR1cyAlZCIsIGRldi0+bmV0ZGV2LT5uYW1lLCB1cmItPnN0YXR1cyk7CisJCWRldl9pbmZvKCZ1cmItPmRldi0+ZGV2LCAiJXM6IGludHIgc3RhdHVzICVkXG4iLAorCQkJIGRldi0+bmV0ZGV2LT5uYW1lLCB1cmItPnN0YXR1cyk7CiAJCWdvdG8gcmVzdWJtaXQ7CiAJfQogCkBAIC02NjUsNyArNjY3LDcgQEAKIAl1OCBjciwgdGNyLCByY3IsIG1zcjsKIAogCWlmICghcnRsODE1MF9yZXNldChkZXYpKSB7Ci0JCXdhcm4oIiVzIC0gZGV2aWNlIHJlc2V0IGZhaWxlZCIsIF9fRlVOQ1RJT05fXyk7CisJCWRldl93YXJuKCZkZXYtPnVkZXYtPmRldiwgImRldmljZSByZXNldCBmYWlsZWRcbiIpOwogCX0KIAkvKiBSQ1IgYml0Nz0xIGF0dGFjaCBSeCBpbmZvIGF0IHRoZSBlbmQ7ICA9MCBIVyBDUkMgKHdoaWNoIGlzIGJyb2tlbikgKi8KIAlyY3IgPSAweDllOwpAQCAtNjk5LDcgKzcwMSw3IEBACiBzdGF0aWMgdm9pZCBydGw4MTUwX3R4X3RpbWVvdXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKIHsKIAlydGw4MTUwX3QgKmRldiA9IG5ldGRldl9wcml2KG5ldGRldik7Ci0Jd2FybigiJXM6IFR4IHRpbWVvdXQuIiwgbmV0ZGV2LT5uYW1lKTsKKwlkZXZfd2FybigmbmV0ZGV2LT5kZXYsICJUeCB0aW1lb3V0LlxuIik7CiAJdXNiX3VubGlua191cmIoZGV2LT50eF91cmIpOwogCWRldi0+c3RhdHMudHhfZXJyb3JzKys7CiB9CkBAIC03MTAsMTIgKzcxMiwxMiBAQAogCW5ldGlmX3N0b3BfcXVldWUobmV0ZGV2KTsKIAlpZiAobmV0ZGV2LT5mbGFncyAmIElGRl9QUk9NSVNDKSB7CiAJCWRldi0+cnhfY3JlZyB8PSBjcHVfdG9fbGUxNigweDAwMDEpOwotCQlpbmZvKCIlczogcHJvbWlzY3VvdXMgbW9kZSIsIG5ldGRldi0+bmFtZSk7CisJCWRldl9pbmZvKCZuZXRkZXYtPmRldiwgIiVzOiBwcm9taXNjdW91cyBtb2RlXG4iLCBuZXRkZXYtPm5hbWUpOwogCX0gZWxzZSBpZiAobmV0ZGV2LT5tY19jb3VudCB8fAogCQkgICAobmV0ZGV2LT5mbGFncyAmIElGRl9BTExNVUxUSSkpIHsKIAkJZGV2LT5yeF9jcmVnICY9IGNwdV90b19sZTE2KDB4ZmZmZSk7CiAJCWRldi0+cnhfY3JlZyB8PSBjcHVfdG9fbGUxNigweDAwMDIpOwotCQlpbmZvKCIlczogYWxsbXVsdGkgc2V0IiwgbmV0ZGV2LT5uYW1lKTsKKwkJZGV2X2luZm8oJm5ldGRldi0+ZGV2LCAiJXM6IGFsbG11bHRpIHNldFxuIiwgbmV0ZGV2LT5uYW1lKTsKIAl9IGVsc2UgewogCQkvKiB+UlhfTVVMVElDQVNULCB+UlhfUFJPTUlTQ1VPVVMgKi8KIAkJZGV2LT5yeF9jcmVnICY9IGNwdV90b19sZTE2KDB4MDBmYyk7CkBAIC03NDAsNyArNzQyLDcgQEAKIAkJaWYgKHJlcyA9PSAtRU5PREVWKQogCQkJbmV0aWZfZGV2aWNlX2RldGFjaChkZXYtPm5ldGRldik7CiAJCWVsc2UgewotCQkJd2FybigiZmFpbGVkIHR4X3VyYiAlZFxuIiwgcmVzKTsKKwkJCWRldl93YXJuKCZuZXRkZXYtPmRldiwgImZhaWxlZCB0eF91cmIgJWRcbiIsIHJlcyk7CiAJCQlkZXYtPnN0YXRzLnR4X2Vycm9ycysrOwogCQkJbmV0aWZfc3RhcnRfcXVldWUobmV0ZGV2KTsKIAkJfQpAQCAtNzgzLDcgKzc4NSw3IEBACiAJaWYgKChyZXMgPSB1c2Jfc3VibWl0X3VyYihkZXYtPnJ4X3VyYiwgR0ZQX0tFUk5FTCkpKSB7CiAJCWlmIChyZXMgPT0gLUVOT0RFVikKIAkJCW5ldGlmX2RldmljZV9kZXRhY2goZGV2LT5uZXRkZXYpOwotCQl3YXJuKCIlczogcnhfdXJiIHN1Ym1pdCBmYWlsZWQ6ICVkIiwgX19GVU5DVElPTl9fLCByZXMpOworCQlkZXZfd2FybigmbmV0ZGV2LT5kZXYsICJyeF91cmIgc3VibWl0IGZhaWxlZDogJWRcbiIsIHJlcyk7CiAJCXJldHVybiByZXM7CiAJfQogCXVzYl9maWxsX2ludF91cmIoZGV2LT5pbnRyX3VyYiwgZGV2LT51ZGV2LCB1c2JfcmN2aW50cGlwZShkZXYtPnVkZXYsIDMpLApAQCAtNzkyLDcgKzc5NCw3IEBACiAJaWYgKChyZXMgPSB1c2Jfc3VibWl0X3VyYihkZXYtPmludHJfdXJiLCBHRlBfS0VSTkVMKSkpIHsKIAkJaWYgKHJlcyA9PSAtRU5PREVWKQogCQkJbmV0aWZfZGV2aWNlX2RldGFjaChkZXYtPm5ldGRldik7Ci0JCXdhcm4oIiVzOiBpbnRyX3VyYiBzdWJtaXQgZmFpbGVkOiAlZCIsIF9fRlVOQ1RJT05fXywgcmVzKTsKKwkJZGV2X3dhcm4oJm5ldGRldi0+ZGV2LCAiaW50cl91cmIgc3VibWl0IGZhaWxlZDogJWRcbiIsIHJlcyk7CiAJCXVzYl9raWxsX3VyYihkZXYtPnJ4X3VyYik7CiAJCXJldHVybiByZXM7CiAJfQpAQCAtOTQ3LDcgKzk0OSw3IEBACiAJCWdvdG8gb3V0MjsKIAl9CiAKLQlpbmZvKCIlczogcnRsODE1MCBpcyBkZXRlY3RlZCIsIG5ldGRldi0+bmFtZSk7CisJZGV2X2luZm8oJmludGYtPmRldiwgIiVzOiBydGw4MTUwIGlzIGRldGVjdGVkXG4iLCBuZXRkZXYtPm5hbWUpOwogCiAJcmV0dXJuIDA7CiAKQEAgLTk4NCw3ICs5ODYsOCBAQAogCiBzdGF0aWMgaW50IF9faW5pdCB1c2JfcnRsODE1MF9pbml0KHZvaWQpCiB7Ci0JaW5mbyhEUklWRVJfREVTQyAiICIgRFJJVkVSX1ZFUlNJT04pOworCXByaW50ayhLRVJOX0lORk8gS0JVSUxEX01PRE5BTUUgIjogIiBEUklWRVJfVkVSU0lPTiAiOiIKKwkgICAgICAgRFJJVkVSX0RFU0MgIlxuIik7CiAJcmV0dXJuIHVzYl9yZWdpc3RlcigmcnRsODE1MF9kcml2ZXIpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC92aWEtdmVsb2NpdHkuYyBiL2RyaXZlcnMvbmV0L3ZpYS12ZWxvY2l0eS5jCmluZGV4IGFkMjBmOTYuLjJkY2VkMzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3ZpYS12ZWxvY2l0eS5jCisrKyBiL2RyaXZlcnMvbmV0L3ZpYS12ZWxvY2l0eS5jCkBAIC0xMiw3ICsxMiw3IEBACiAgKglTY2F0dGVyIGdhdGhlcgogICoJTW9yZSB0ZXN0aW5nCiAgKgotICogVGhlIGNoYW5nZXMgYXJlIChjKSBDb3B5cmlnaHQgMjAwNCwgUmVkIEhhdCBJbmMuIDxhbGFuQHJlZGhhdC5jb20+CisgKiBUaGUgY2hhbmdlcyBhcmUgKGMpIENvcHlyaWdodCAyMDA0LCBSZWQgSGF0IEluYy4gPGFsYW5AbHhvcmd1ay51a3V1Lm9yZy51az4KICAqIEFkZGl0aW9uYWwgZml4ZXMgYW5kIGNsZWFuIHVwOiBGcmFuY29pcyBSb21pZXUKICAqCiAgKiBUaGlzIHNvdXJjZSBoYXMgbm90IGJlZW4gdmVyaWZpZWQgZm9yIHVzZSBpbiBzYWZldHkgY3JpdGljYWwgc3lzdGVtcy4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dhbi9LY29uZmlnIGIvZHJpdmVycy9uZXQvd2FuL0tjb25maWcKaW5kZXggMmFlMmVjNC4uMjFlZmQ5OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2FuL0tjb25maWcKKysrIGIvZHJpdmVycy9uZXQvd2FuL0tjb25maWcKQEAgLTIwNSw3ICsyMDUsNyBAQAogCiBjb25maWcgUEMzMDAKIAl0cmlzdGF0ZSAiQ3ljbGFkZXMtUEMzMDAgc3VwcG9ydCAoUlMtMjMyL1YuMzUsIFguMjEsIFQxL0UxIGJvYXJkcykiCi0JZGVwZW5kcyBvbiBIRExDICYmIFBDSQorCWRlcGVuZHMgb24gSERMQyAmJiBQQ0kgJiYgQlJPS0VOCiAJLS0taGVscC0tLQogCSAgRHJpdmVyIGZvciB0aGUgQ3ljbGFkZXMtUEMzMDAgc3luY2hyb25vdXMgY29tbXVuaWNhdGlvbiBib2FyZHMuCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dhbi9jb3NhLmMgYi9kcml2ZXJzL25ldC93YW4vY29zYS5jCmluZGV4IGYxNDA1MTUuLjdmOTdmOGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dhbi9jb3NhLmMKKysrIGIvZHJpdmVycy9uZXQvd2FuL2Nvc2EuYwpAQCAtMzg4LDggKzM4OCw4IEBACiAJCWdvdG8gb3V0X2NocmRldjsKIAl9CiAJZm9yIChpID0gMDsgaSA8IG5yX2NhcmRzOyBpKyspCi0JCWRldmljZV9jcmVhdGVfZHJ2ZGF0YShjb3NhX2NsYXNzLCBOVUxMLCBNS0RFVihjb3NhX21ham9yLCBpKSwKLQkJCQkgICAgICBOVUxMLCAiY29zYSVkIiwgaSk7CisJCWRldmljZV9jcmVhdGUoY29zYV9jbGFzcywgTlVMTCwgTUtERVYoY29zYV9tYWpvciwgaSksIE5VTEwsCisJCQkgICAgICAiY29zYSVkIiwgaSk7CiAJZXJyID0gMDsKIAlnb3RvIG91dDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2FuL2xtYy9sbWNfbWFpbi5jIGIvZHJpdmVycy9uZXQvd2FuL2xtYy9sbWNfbWFpbi5jCmluZGV4IGY4MDY0MGYuLmQ3YmI2M2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dhbi9sbWMvbG1jX21haW4uYworKysgYi9kcml2ZXJzL25ldC93YW4vbG1jL2xtY19tYWluLmMKQEAgLTEyMiw3ICsxMjIsNiBAQAogICAgICAqIE1vc3QgZnVuY3Rpb25zIG1lc3Mgd2l0aCB0aGUgc3RydWN0dXJlCiAgICAgICogRGlzYWJsZSBpbnRlcnJ1cHRzIHdoaWxlIHdlIGRvIHRoZSBwb2xsaW5nCiAgICAgICovCi0gICAgc3Bpbl9sb2NrX2lycXNhdmUoJnNjLT5sbWNfbG9jaywgZmxhZ3MpOwogCiAgICAgc3dpdGNoIChjbWQpIHsKICAgICAgICAgLyoKQEAgLTE1Miw2ICsxNTEsNyBAQAogCQlicmVhazsKIAl9CiAKKwlzcGluX2xvY2tfaXJxc2F2ZSgmc2MtPmxtY19sb2NrLCBmbGFncyk7CiAgICAgICAgIHNjLT5sbWNfbWVkaWEtPnNldF9zdGF0dXMgKHNjLCAmY3RsKTsKIAogICAgICAgICBpZihjdGwuY3JjX2xlbmd0aCAhPSBzYy0+aWN0bC5jcmNfbGVuZ3RoKSB7CkBAIC0xNjEsNiArMTYxLDcgQEAKIAkgICAgZWxzZQogCQlzYy0+VHhEZXNjcmlwdENvbnRyb2xJbml0ICY9IH5MTUNfVERFU19BRERfQ1JDX0RJU0FCTEU7CiAgICAgICAgIH0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzYy0+bG1jX2xvY2ssIGZsYWdzKTsKIAogICAgICAgICByZXQgPSAwOwogICAgICAgICBicmVhazsKQEAgLTE4NywxNSArMTg4LDE4IEBACiAJCWJyZWFrOwkJCQkvKiBubyBjaGFuZ2UgKi8KICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAorCSAgICBzcGluX2xvY2tfaXJxc2F2ZSgmc2MtPmxtY19sb2NrLCBmbGFncyk7CiAgICAgICAgICAgICBsbWNfcHJvdG9fY2xvc2Uoc2MpOwogCiAgICAgICAgICAgICBzYy0+aWZfdHlwZSA9IG5ld190eXBlOwogICAgICAgICAgICAgbG1jX3Byb3RvX2F0dGFjaChzYyk7CiAJICAgIHJldCA9IGxtY19wcm90b19vcGVuKHNjKTsKKwkgICAgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2MtPmxtY19sb2NrLCBmbGFncyk7CiAJICAgIGJyZWFrOwogCX0KIAogICAgIGNhc2UgTE1DSU9DR0VUWElORk86IC8qZm9sZDAxKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSgmc2MtPmxtY19sb2NrLCBmbGFncyk7CiAgICAgICAgIHNjLT5sbWNfeGluZm8uTWFnaWMwID0gMHhCRUVGQ0FGRTsKIAogICAgICAgICBzYy0+bG1jX3hpbmZvLlBjaUNhcmRUeXBlID0gc2MtPmxtY19jYXJkdHlwZTsKQEAgLTIwOCw2ICsyMTIsNyBAQAogICAgICAgICBzYy0+bG1jX3hpbmZvLk1heEZyYW1lU2l6ZSA9IExNQ19QS1RfQlVGX1NaOwogICAgICAgICBzYy0+bG1jX3hpbmZvLmxpbmtfc3RhdHVzID0gc2MtPmxtY19tZWRpYS0+Z2V0X2xpbmtfc3RhdHVzIChzYyk7CiAgICAgICAgIHNjLT5sbWNfeGluZm8ubWlpX3JlZzE2ID0gbG1jX21paV9yZWFkcmVnIChzYywgMCwgMTYpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNjLT5sbWNfbG9jaywgZmxhZ3MpOwogCiAgICAgICAgIHNjLT5sbWNfeGluZm8uTWFnaWMxID0gMHhERUFEQkVFRjsKIApAQCAtMjIwLDYgKzIyNSw3IEBACiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBMTUNJT0NHRVRMTUNTVEFUUzoKKwkgICAgc3Bpbl9sb2NrX2lycXNhdmUoJnNjLT5sbWNfbG9jaywgZmxhZ3MpOwogCSAgICBpZiAoc2MtPmxtY19jYXJkdHlwZSA9PSBMTUNfQ0FSRFRZUEVfVDEpIHsKIAkJICAgIGxtY19taWlfd3JpdGVyZWcoc2MsIDAsIDE3LCBUMUZSQU1FUl9GRVJSX0xTQik7CiAJCSAgICBzYy0+ZXh0cmFfc3RhdHMuZnJhbWluZ0JpdEVycm9yQ291bnQgKz0KQEAgLTI0Myw2ICsyNDksNyBAQAogCQkgICAgc2MtPmV4dHJhX3N0YXRzLnNldmVyZWx5RXJyb3JlZEZyYW1lQ291bnQgKz0KIAkJCSAgICByZWdWYWwgJiBUMUZSQU1FUl9TRUZfTUFTSzsKIAkgICAgfQorCSAgICBzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzYy0+bG1jX2xvY2ssIGZsYWdzKTsKIAkgICAgaWYgKGNvcHlfdG9fdXNlcihpZnItPmlmcl9kYXRhLCAmc2MtPmxtY19kZXZpY2UtPnN0YXRzLAogCQkJICAgICBzaXplb2Yoc2MtPmxtY19kZXZpY2UtPnN0YXRzKSkgfHwKIAkJY29weV90b191c2VyKGlmci0+aWZyX2RhdGEgKyBzaXplb2Yoc2MtPmxtY19kZXZpY2UtPnN0YXRzKSwKQEAgLTI1OCwxMiArMjY1LDE0IEBACiAJCSAgICBicmVhazsKIAkgICAgfQogCisJICAgIHNwaW5fbG9ja19pcnFzYXZlKCZzYy0+bG1jX2xvY2ssIGZsYWdzKTsKIAkgICAgbWVtc2V0KCZzYy0+bG1jX2RldmljZS0+c3RhdHMsIDAsIHNpemVvZihzYy0+bG1jX2RldmljZS0+c3RhdHMpKTsKIAkgICAgbWVtc2V0KCZzYy0+ZXh0cmFfc3RhdHMsIDAsIHNpemVvZihzYy0+ZXh0cmFfc3RhdHMpKTsKIAkgICAgc2MtPmV4dHJhX3N0YXRzLmNoZWNrID0gU1RBVENIRUNLOwogCSAgICBzYy0+ZXh0cmFfc3RhdHMudmVyc2lvbl9zaXplID0gKERSSVZFUl9WRVJTSU9OIDw8IDE2KSArCiAJCSAgICBzaXplb2Yoc2MtPmxtY19kZXZpY2UtPnN0YXRzKSArIHNpemVvZihzYy0+ZXh0cmFfc3RhdHMpOwogCSAgICBzYy0+ZXh0cmFfc3RhdHMubG1jX2NhcmR0eXBlID0gc2MtPmxtY19jYXJkdHlwZTsKKwkgICAgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2MtPmxtY19sb2NrLCBmbGFncyk7CiAJICAgIHJldCA9IDA7CiAJICAgIGJyZWFrOwogCkBAIC0yODIsOCArMjkxLDEwIEBACiAJCXJldCA9IC1FRkFVTFQ7CiAJCWJyZWFrOwogCX0KKwlzcGluX2xvY2tfaXJxc2F2ZSgmc2MtPmxtY19sb2NrLCBmbGFncyk7CiAgICAgICAgIHNjLT5sbWNfbWVkaWEtPnNldF9jaXJjdWl0X3R5cGUoc2MsIGN0bC5jaXJjdWl0X3R5cGUpOwogICAgICAgICBzYy0+aWN0bC5jaXJjdWl0X3R5cGUgPSBjdGwuY2lyY3VpdF90eXBlOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNjLT5sbWNfbG9jaywgZmxhZ3MpOwogICAgICAgICByZXQgPSAwOwogCiAgICAgICAgIGJyZWFrOwpAQCAtMjk0LDEyICszMDUsMTQgQEAKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKKwlzcGluX2xvY2tfaXJxc2F2ZSgmc2MtPmxtY19sb2NrLCBmbGFncyk7CiAgICAgICAgIC8qIFJlc2V0IGRyaXZlciBhbmQgYnJpbmcgYmFjayB0byBjdXJyZW50IHN0YXRlICovCiAgICAgICAgIHByaW50ayAoIiBSRUcxNiBiZWZvcmUgcmVzZXQgKyUwNHhcbiIsIGxtY19taWlfcmVhZHJlZyAoc2MsIDAsIDE2KSk7CiAgICAgICAgIGxtY19ydW5uaW5nX3Jlc2V0IChkZXYpOwogICAgICAgICBwcmludGsgKCIgUkVHMTYgYWZ0ZXIgcmVzZXQgKyUwNHhcbiIsIGxtY19taWlfcmVhZHJlZyAoc2MsIDAsIDE2KSk7CiAKICAgICAgICAgTE1DX0VWRU5UX0xPRyhMTUNfRVZFTlRfRk9SQ0VEUkVTRVQsIExNQ19DU1JfUkVBRCAoc2MsIGNzcl9zdGF0dXMpLCBsbWNfbWlpX3JlYWRyZWcgKHNjLCAwLCAxNikpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNjLT5sbWNfbG9jaywgZmxhZ3MpOwogCiAgICAgICAgIHJldCA9IDA7CiAgICAgICAgIGJyZWFrOwpAQCAtMzM4LDE0ICszNTEsMTUgQEAKICAgICAgICAgICAgICAqLwogICAgICAgICAgICAgbmV0aWZfc3RvcF9xdWV1ZShkZXYpOwogCi0JaWYgKGNvcHlfZnJvbV91c2VyKCZ4YywgaWZyLT5pZnJfZGF0YSwgc2l6ZW9mKHN0cnVjdCBsbWNfeGlsaW54X2NvbnRyb2wpKSkgeworCSAgICBpZiAoY29weV9mcm9tX3VzZXIoJnhjLCBpZnItPmlmcl9kYXRhLCBzaXplb2Yoc3RydWN0IGxtY194aWxpbnhfY29udHJvbCkpKSB7CiAJCXJldCA9IC1FRkFVTFQ7CiAJCWJyZWFrOwotCX0KKwkgICAgfQogICAgICAgICAgICAgc3dpdGNoKHhjLmNvbW1hbmQpewogICAgICAgICAgICAgY2FzZSBsbWNfeGlsaW54X3Jlc2V0OiAvKmZvbGQwMiovCiAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICB1MTYgbWlpOworCQkgICAgc3Bpbl9sb2NrX2lycXNhdmUoJnNjLT5sbWNfbG9jaywgZmxhZ3MpOwogICAgICAgICAgICAgICAgICAgICBtaWkgPSBsbWNfbWlpX3JlYWRyZWcgKHNjLCAwLCAxNik7CiAKICAgICAgICAgICAgICAgICAgICAgLyoKQEAgLTQwNCw2ICs0MTgsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxtY19sZWRfb2ZmKHNjLCBMTUNfRFMzX0xFRDIpOwogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9CisJCSAgICBzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzYy0+bG1jX2xvY2ssIGZsYWdzKTsKICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIAogCkBAIC00MTYsNiArNDMxLDcgQEAKICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIHUxNiBtaWk7CiAgICAgICAgICAgICAgICAgICAgIGludCB0aW1lb3V0ID0gNTAwMDAwOworCQkgICAgc3Bpbl9sb2NrX2lycXNhdmUoJnNjLT5sbWNfbG9jaywgZmxhZ3MpOwogICAgICAgICAgICAgICAgICAgICBtaWkgPSBsbWNfbWlpX3JlYWRyZWcgKHNjLCAwLCAxNik7CiAKICAgICAgICAgICAgICAgICAgICAgLyoKQEAgLTQ1MSwxMyArNDY3LDE0IEBACiAgICAgICAgICAgICAgICAgICAgICAqLwogICAgICAgICAgICAgICAgICAgICB3aGlsZSggKExNQ19DU1JfUkVBRChzYywgY3NyX2dwKSAmIExNQ19HRVBfSU5JVCkgPT0gMCAmJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgKHRpbWVvdXQtLSA+IDApKQotICAgICAgICAgICAgICAgICAgICAgICAgOworICAgICAgICAgICAgICAgICAgICAgICAgY3B1X3JlbGF4KCk7CiAKIAogICAgICAgICAgICAgICAgICAgICAvKgogICAgICAgICAgICAgICAgICAgICAgKiBzdG9wIGRyaXZpbmcgWGlsaW54LXJlbGF0ZWQgc2lnbmFscwogICAgICAgICAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgICAgICAgICAgbG1jX2dwaW9fbWtpbnB1dChzYywgMHhmZik7CisJCSAgICBzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzYy0+bG1jX2xvY2ssIGZsYWdzKTsKIAogICAgICAgICAgICAgICAgICAgICByZXQgPSAweDA7CiAgICAgICAgICAgICAgICAgICAgIApAQCAtNDkzLDYgKzUxMCw3IEBACiAKICAgICAgICAgICAgICAgICAgICAgcHJpbnRrKCIlczogU3RhcnRpbmcgbG9hZCBvZiBkYXRhIExlbjogJWQgYXQgMHglcCA9PSAweCVwXG4iLCBkZXYtPm5hbWUsIHhjLmxlbiwgeGMuZGF0YSwgZGF0YSk7CiAKKwkJICAgIHNwaW5fbG9ja19pcnFzYXZlKCZzYy0+bG1jX2xvY2ssIGZsYWdzKTsKICAgICAgICAgICAgICAgICAgICAgbG1jX2dwaW9fbWtpbnB1dChzYywgMHhmZik7CiAKICAgICAgICAgICAgICAgICAgICAgLyoKQEAgLTU0NSw3ICs1NjMsNyBAQAogICAgICAgICAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgICAgICAgICAgd2hpbGUoIChMTUNfQ1NSX1JFQUQoc2MsIGNzcl9ncCkgJiBMTUNfR0VQX0lOSVQpID09IDAgJiYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICh0aW1lb3V0LS0gPiAwKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNwdV9yZWxheCgpOwogCiAgICAgICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX0RFQlVHICIlczogV2FpdGVkICVkIGZvciB0aGUgWGlsaW54IHRvIGNsZWFyIGl0J3MgbWVtb3J5XG4iLCBkZXYtPm5hbWUsIDUwMDAwMC10aW1lb3V0KTsKIApAQCAtNTg4LDYgKzYwNiw3IEBACiAKICAgICAgICAgICAgICAgICAgICAgc2MtPmxtY19taWlyZWcxNiAmPSB+TE1DX01JSTE2X0ZJRk9fUkVTRVQ7CiAgICAgICAgICAgICAgICAgICAgIGxtY19taWlfd3JpdGVyZWcoc2MsIDAsIDE2LCBzYy0+bG1jX21paXJlZzE2KTsKKwkJICAgIHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNjLT5sbWNfbG9jaywgZmxhZ3MpOwogCiAgICAgICAgICAgICAgICAgICAgIGtmcmVlKGRhdGEpOwogICAgICAgICAgICAgICAgICAgICAKQEAgLTYxMSw4ICs2MzAsNiBAQAogICAgICAgICBicmVhazsKICAgICB9CiAKLSAgICBzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzYy0+bG1jX2xvY2ssIGZsYWdzKTsgLypmb2xkMDEqLwotCiAgICAgbG1jX3RyYWNlKGRldiwgImxtY19pb2N0bCBvdXQiKTsKIAogICAgIHJldHVybiByZXQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93YW4vc2JuaS5jIGIvZHJpdmVycy9uZXQvd2FuL3NibmkuYwppbmRleCBmOTcyZmVmLi5lZTUxYjZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93YW4vc2JuaS5jCisrKyBiL2RyaXZlcnMvbmV0L3dhbi9zYm5pLmMKQEAgLTMxOCw3ICszMTgsNyBAQAogCQkJCWNvbnRpbnVlOwogCQl9CiAKLQkJaWYoIHBjaV9pcnFfbGluZSA8PSAwICB8fCAgcGNpX2lycV9saW5lID49IE5SX0lSUVMgKQorCQlpZiAocGNpX2lycV9saW5lIDw9IDAgfHwgcGNpX2lycV9saW5lID49IG5yX2lycXMpCiAJCQlwcmludGsoIEtFUk5fV0FSTklORyAiICBXQVJOSU5HOiBUaGUgUENJIEJJT1MgYXNzaWduZWQgIgogCQkJCSJ0aGlzIFBDSSBjYXJkIHRvIElSUSAlZCwgd2hpY2ggaXMgdW5saWtlbHkgIgogCQkJCSJ0byB3b3JrIS5cbiIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dhbi96ODUyMzAuYyBiL2RyaXZlcnMvbmV0L3dhbi96ODUyMzAuYwppbmRleCAyNDNiZDhkLi5jY2Q5Y2QzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93YW4vejg1MjMwLmMKKysrIGIvZHJpdmVycy9uZXQvd2FuL3o4NTIzMC5jCkBAIC0xOCw3ICsxOCw4IEBACiAgKglETUEgbm93IHVzZXMgZ2V0X2ZyZWVfcGFnZSBhcyBrbWFsbG9jIGJ1ZmZlcnMgbWF5IHNwYW4gYSA2NEsgCiAgKglib3VuZGFyeS4KICAqCi0gKglNb2RpZmllZCBmb3IgU01QIHNhZmV0eSBhbmQgU01QIGxvY2tpbmcgYnkgQWxhbiBDb3ggPGFsYW5AcmVkaGF0LmNvbT4KKyAqCU1vZGlmaWVkIGZvciBTTVAgc2FmZXR5IGFuZCBTTVAgbG9ja2luZyBieSBBbGFuIENveAorICoJCQkJCTxhbGFuQGx4b3JndWsudWt1dS5vcmcudWs+CiAgKgogICoJUGVyZm9ybWFuY2UKICAqCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93YW4vejg1MjMwLmggYi9kcml2ZXJzL25ldC93YW4vejg1MjMwLmgKaW5kZXggNGYzNzIzOS4uODViM2U3OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2FuL3o4NTIzMC5oCisrKyBiL2RyaXZlcnMvbmV0L3dhbi96ODUyMzAuaApAQCAtMiw3ICsyLDcgQEAKICAqCURlc2NyaXB0aW9uIG9mIFo4NTMwIFo4NUMzMCBhbmQgWjg1MjMwIGNvbW11bmljYXRpb25zIGNoaXBzCiAgKgogICogQ29weXJpZ2h0IChDKSAxOTk1IERhdmlkIFMuIE1pbGxlciAoZGF2ZW1AY2FpcC5ydXRnZXJzLmVkdSkKLSAqIENvcHlyaWdodCAoQykgMTk5OCBBbGFuIENveCA8YWxhbkByZWRoYXQuY29tPgorICogQ29weXJpZ2h0IChDKSAxOTk4IEFsYW4gQ294IDxhbGFuQGx4b3JndWsudWt1dS5vcmcudWs+CiAgKi8KIAogI2lmbmRlZiBfWjg1MzBfSApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYWlyb19jcy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYWlyb19jcy5jCmluZGV4IGZkNzJlNDIuLjI3Njk2YzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Fpcm9fY3MuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9haXJvX2NzLmMKQEAgLTIwNiwxMjYgKzIwNiwxMjMgQEAKICNkZWZpbmUgQ1NfQ0hFQ0soZm4sIHJldCkgXAogZG8geyBsYXN0X2ZuID0gKGZuKTsgaWYgKChsYXN0X3JldCA9IChyZXQpKSAhPSAwKSBnb3RvIGNzX2ZhaWxlZDsgfSB3aGlsZSAoMCkKIAorc3RhdGljIGludCBhaXJvX2NzX2NvbmZpZ19jaGVjayhzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYsCisJCQkJY2lzdHBsX2NmdGFibGVfZW50cnlfdCAqY2ZnLAorCQkJCWNpc3RwbF9jZnRhYmxlX2VudHJ5X3QgKmRmbHQsCisJCQkJdW5zaWduZWQgaW50IHZjYywKKwkJCQl2b2lkICpwcml2X2RhdGEpCit7CisJd2luX3JlcV90ICpyZXEgPSBwcml2X2RhdGE7CisKKwlpZiAoY2ZnLT5pbmRleCA9PSAwKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCS8qIERvZXMgdGhpcyBjYXJkIG5lZWQgYXVkaW8gb3V0cHV0PyAqLworCWlmIChjZmctPmZsYWdzICYgQ0lTVFBMX0NGVEFCTEVfQVVESU8pIHsKKwkJcF9kZXYtPmNvbmYuQXR0cmlidXRlcyB8PSBDT05GX0VOQUJMRV9TUEtSOworCQlwX2Rldi0+Y29uZi5TdGF0dXMgPSBDQ1NSX0FVRElPX0VOQTsKKwl9CisKKwkvKiBVc2UgcG93ZXIgc2V0dGluZ3MgZm9yIFZjYyBhbmQgVnBwIGlmIHByZXNlbnQgKi8KKwkvKiAgTm90ZSB0aGF0IHRoZSBDSVMgdmFsdWVzIG5lZWQgdG8gYmUgcmVzY2FsZWQgKi8KKwlpZiAoY2ZnLT52cHAxLnByZXNlbnQgJiAoMTw8Q0lTVFBMX1BPV0VSX1ZOT00pKQorCQlwX2Rldi0+Y29uZi5WcHAgPSBjZmctPnZwcDEucGFyYW1bQ0lTVFBMX1BPV0VSX1ZOT01dLzEwMDAwOworCWVsc2UgaWYgKGRmbHQtPnZwcDEucHJlc2VudCAmICgxPDxDSVNUUExfUE9XRVJfVk5PTSkpCisJCXBfZGV2LT5jb25mLlZwcCA9IGRmbHQtPnZwcDEucGFyYW1bQ0lTVFBMX1BPV0VSX1ZOT01dLzEwMDAwOworCisJLyogRG8gd2UgbmVlZCB0byBhbGxvY2F0ZSBhbiBpbnRlcnJ1cHQ/ICovCisJaWYgKGNmZy0+aXJxLklSUUluZm8xIHx8IGRmbHQtPmlycS5JUlFJbmZvMSkKKwkJcF9kZXYtPmNvbmYuQXR0cmlidXRlcyB8PSBDT05GX0VOQUJMRV9JUlE7CisKKwkvKiBJTyB3aW5kb3cgc2V0dGluZ3MgKi8KKwlwX2Rldi0+aW8uTnVtUG9ydHMxID0gcF9kZXYtPmlvLk51bVBvcnRzMiA9IDA7CisJaWYgKChjZmctPmlvLm53aW4gPiAwKSB8fCAoZGZsdC0+aW8ubndpbiA+IDApKSB7CisJCWNpc3RwbF9pb190ICppbyA9IChjZmctPmlvLm53aW4pID8gJmNmZy0+aW8gOiAmZGZsdC0+aW87CisJCXBfZGV2LT5pby5BdHRyaWJ1dGVzMSA9IElPX0RBVEFfUEFUSF9XSURUSF9BVVRPOworCQlpZiAoIShpby0+ZmxhZ3MgJiBDSVNUUExfSU9fOEJJVCkpCisJCQlwX2Rldi0+aW8uQXR0cmlidXRlczEgPSBJT19EQVRBX1BBVEhfV0lEVEhfMTY7CisJCWlmICghKGlvLT5mbGFncyAmIENJU1RQTF9JT18xNkJJVCkpCisJCQlwX2Rldi0+aW8uQXR0cmlidXRlczEgPSBJT19EQVRBX1BBVEhfV0lEVEhfODsKKwkJcF9kZXYtPmlvLkJhc2VQb3J0MSA9IGlvLT53aW5bMF0uYmFzZTsKKwkJcF9kZXYtPmlvLk51bVBvcnRzMSA9IGlvLT53aW5bMF0ubGVuOworCQlpZiAoaW8tPm53aW4gPiAxKSB7CisJCQlwX2Rldi0+aW8uQXR0cmlidXRlczIgPSBwX2Rldi0+aW8uQXR0cmlidXRlczE7CisJCQlwX2Rldi0+aW8uQmFzZVBvcnQyID0gaW8tPndpblsxXS5iYXNlOworCQkJcF9kZXYtPmlvLk51bVBvcnRzMiA9IGlvLT53aW5bMV0ubGVuOworCQl9CisJfQorCisJLyogVGhpcyByZXNlcnZlcyBJTyBzcGFjZSBidXQgZG9lc24ndCBhY3R1YWxseSBlbmFibGUgaXQgKi8KKwlpZiAocGNtY2lhX3JlcXVlc3RfaW8ocF9kZXYsICZwX2Rldi0+aW8pICE9IDApCisJCXJldHVybiAtRU5PREVWOworCisJLyoKKwkgIE5vdyBzZXQgdXAgYSBjb21tb24gbWVtb3J5IHdpbmRvdywgaWYgbmVlZGVkLiAgVGhlcmUgaXMgcm9vbQorCSAgaW4gdGhlIHN0cnVjdCBwY21jaWFfZGV2aWNlIHN0cnVjdHVyZSBmb3Igb25lIG1lbW9yeSB3aW5kb3cgaGFuZGxlLAorCSAgYnV0IGlmIHRoZSBiYXNlIGFkZHJlc3NlcyBuZWVkIHRvIGJlIHNhdmVkLCBvciBpZiBtdWx0aXBsZQorCSAgd2luZG93cyBhcmUgbmVlZGVkLCB0aGUgaW5mbyBzaG91bGQgZ28gaW4gdGhlIHByaXZhdGUgZGF0YQorCSAgc3RydWN0dXJlIGZvciB0aGlzIGRldmljZS4KKworCSAgTm90ZSB0aGF0IHRoZSBtZW1vcnkgd2luZG93IGJhc2UgaXMgYSBwaHlzaWNhbCBhZGRyZXNzLCBhbmQKKwkgIG5lZWRzIHRvIGJlIG1hcHBlZCB0byB2aXJ0dWFsIHNwYWNlIHdpdGggaW9yZW1hcCgpIGJlZm9yZSBpdAorCSAgaXMgdXNlZC4KKwkqLworCWlmICgoY2ZnLT5tZW0ubndpbiA+IDApIHx8IChkZmx0LT5tZW0ubndpbiA+IDApKSB7CisJCWNpc3RwbF9tZW1fdCAqbWVtID0gKGNmZy0+bWVtLm53aW4pID8gJmNmZy0+bWVtIDogJmRmbHQtPm1lbTsKKwkJbWVtcmVxX3QgbWFwOworCQlyZXEtPkF0dHJpYnV0ZXMgPSBXSU5fREFUQV9XSURUSF8xNnxXSU5fTUVNT1JZX1RZUEVfQ007CisJCXJlcS0+QmFzZSA9IG1lbS0+d2luWzBdLmhvc3RfYWRkcjsKKwkJcmVxLT5TaXplID0gbWVtLT53aW5bMF0ubGVuOworCQlyZXEtPkFjY2Vzc1NwZWVkID0gMDsKKwkJaWYgKHBjbWNpYV9yZXF1ZXN0X3dpbmRvdygmcF9kZXYsIHJlcSwgJnBfZGV2LT53aW4pICE9IDApCisJCQlyZXR1cm4gLUVOT0RFVjsKKwkJbWFwLlBhZ2UgPSAwOworCQltYXAuQ2FyZE9mZnNldCA9IG1lbS0+d2luWzBdLmNhcmRfYWRkcjsKKwkJaWYgKHBjbWNpYV9tYXBfbWVtX3BhZ2UocF9kZXYtPndpbiwgJm1hcCkgIT0gMCkKKwkJCXJldHVybiAtRU5PREVWOworCX0KKwkvKiBJZiB3ZSBnb3QgdGhpcyBmYXIsIHdlJ3JlIGNvb2whICovCisJcmV0dXJuIDA7Cit9CisKKwogc3RhdGljIGludCBhaXJvX2NvbmZpZyhzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKLQl0dXBsZV90IHR1cGxlOwotCWNpc3BhcnNlX3QgcGFyc2U7CiAJbG9jYWxfaW5mb190ICpkZXY7CisJd2luX3JlcV90ICpyZXE7CiAJaW50IGxhc3RfZm4sIGxhc3RfcmV0OwotCXVfY2hhciBidWZbNjRdOwotCXdpbl9yZXFfdCByZXE7Ci0JbWVtcmVxX3QgbWFwOwogCiAJZGV2ID0gbGluay0+cHJpdjsKIAogCURFQlVHKDAsICJhaXJvX2NvbmZpZygweCVwKVxuIiwgbGluayk7CiAKKwlyZXEgPSBremFsbG9jKHNpemVvZih3aW5fcmVxX3QpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXJlcSkKKwkJcmV0dXJuIC1FTk9NRU07CisKIAkvKgotCSAgSW4gdGhpcyBsb29wLCB3ZSBzY2FuIHRoZSBDSVMgZm9yIGNvbmZpZ3VyYXRpb24gdGFibGUgZW50cmllcywKLQkgIGVhY2ggb2Ygd2hpY2ggZGVzY3JpYmVzIGEgdmFsaWQgY2FyZCBjb25maWd1cmF0aW9uLCBpbmNsdWRpbmcKLQkgIHZvbHRhZ2UsIElPIHdpbmRvdywgbWVtb3J5IHdpbmRvdywgYW5kIGludGVycnVwdCBzZXR0aW5ncy4KLQkgIAotCSAgV2UgbWFrZSBubyBhc3N1bXB0aW9ucyBhYm91dCB0aGUgY2FyZCB0byBiZSBjb25maWd1cmVkOiB3ZSB1c2UKLQkgIGp1c3QgdGhlIGluZm9ybWF0aW9uIGF2YWlsYWJsZSBpbiB0aGUgQ0lTLiAgSW4gYW4gaWRlYWwgd29ybGQsCi0JICB0aGlzIHdvdWxkIHdvcmsgZm9yIGFueSBQQ01DSUEgY2FyZCwgYnV0IGl0IHJlcXVpcmVzIGEgY29tcGxldGUKLQkgIGFuZCBhY2N1cmF0ZSBDSVMuICBJbiBwcmFjdGljZSwgYSBkcml2ZXIgdXN1YWxseSAia25vd3MiIG1vc3Qgb2YKLQkgIHRoZXNlIHRoaW5ncyB3aXRob3V0IGNvbnN1bHRpbmcgdGhlIENJUywgYW5kIG1vc3QgY2xpZW50IGRyaXZlcnMKLQkgIHdpbGwgb25seSB1c2UgdGhlIENJUyB0byBmaWxsIGluIGltcGxlbWVudGF0aW9uLWRlZmluZWQgZGV0YWlscy4KKwkgKiBJbiB0aGlzIGxvb3AsIHdlIHNjYW4gdGhlIENJUyBmb3IgY29uZmlndXJhdGlvbiB0YWJsZQorCSAqIGVudHJpZXMsIGVhY2ggb2Ygd2hpY2ggZGVzY3JpYmVzIGEgdmFsaWQgY2FyZAorCSAqIGNvbmZpZ3VyYXRpb24sIGluY2x1ZGluZyB2b2x0YWdlLCBJTyB3aW5kb3csIG1lbW9yeSB3aW5kb3csCisJICogYW5kIGludGVycnVwdCBzZXR0aW5ncy4KKwkgKgorCSAqIFdlIG1ha2Ugbm8gYXNzdW1wdGlvbnMgYWJvdXQgdGhlIGNhcmQgdG8gYmUgY29uZmlndXJlZDogd2UKKwkgKiB1c2UganVzdCB0aGUgaW5mb3JtYXRpb24gYXZhaWxhYmxlIGluIHRoZSBDSVMuICBJbiBhbiBpZGVhbAorCSAqIHdvcmxkLCB0aGlzIHdvdWxkIHdvcmsgZm9yIGFueSBQQ01DSUEgY2FyZCwgYnV0IGl0IHJlcXVpcmVzCisJICogYSBjb21wbGV0ZSBhbmQgYWNjdXJhdGUgQ0lTLiAgSW4gcHJhY3RpY2UsIGEgZHJpdmVyIHVzdWFsbHkKKwkgKiAia25vd3MiIG1vc3Qgb2YgdGhlc2UgdGhpbmdzIHdpdGhvdXQgY29uc3VsdGluZyB0aGUgQ0lTLAorCSAqIGFuZCBtb3N0IGNsaWVudCBkcml2ZXJzIHdpbGwgb25seSB1c2UgdGhlIENJUyB0byBmaWxsIGluCisJICogaW1wbGVtZW50YXRpb24tZGVmaW5lZCBkZXRhaWxzLgorCSAqLworCWxhc3RfcmV0ID0gcGNtY2lhX2xvb3BfY29uZmlnKGxpbmssIGFpcm9fY3NfY29uZmlnX2NoZWNrLCByZXEpOworCWlmIChsYXN0X3JldCkKKwkJZ290byBmYWlsZWQ7CisKKwkvKgorCSAgQWxsb2NhdGUgYW4gaW50ZXJydXB0IGxpbmUuICBOb3RlIHRoYXQgdGhpcyBkb2VzIG5vdCBhc3NpZ24gYQorCSAgaGFuZGxlciB0byB0aGUgaW50ZXJydXB0LCB1bmxlc3MgdGhlICdIYW5kbGVyJyBtZW1iZXIgb2YgdGhlCisJICBpcnEgc3RydWN0dXJlIGlzIGluaXRpYWxpemVkLgogCSovCi0JdHVwbGUuQXR0cmlidXRlcyA9IDA7Ci0JdHVwbGUuVHVwbGVEYXRhID0gYnVmOwotCXR1cGxlLlR1cGxlRGF0YU1heCA9IHNpemVvZihidWYpOwotCXR1cGxlLlR1cGxlT2Zmc2V0ID0gMDsKLQl0dXBsZS5EZXNpcmVkVHVwbGUgPSBDSVNUUExfQ0ZUQUJMRV9FTlRSWTsKLQlDU19DSEVDSyhHZXRGaXJzdFR1cGxlLCBwY21jaWFfZ2V0X2ZpcnN0X3R1cGxlKGxpbmssICZ0dXBsZSkpOwotCXdoaWxlICgxKSB7Ci0JCWNpc3RwbF9jZnRhYmxlX2VudHJ5X3QgZGZsdCA9IHsgMCB9OwotCQljaXN0cGxfY2Z0YWJsZV9lbnRyeV90ICpjZmcgPSAmKHBhcnNlLmNmdGFibGVfZW50cnkpOwotCQlpZiAocGNtY2lhX2dldF90dXBsZV9kYXRhKGxpbmssICZ0dXBsZSkgIT0gMCB8fAotCQkJCXBjbWNpYV9wYXJzZV90dXBsZShsaW5rLCAmdHVwbGUsICZwYXJzZSkgIT0gMCkKLQkJCWdvdG8gbmV4dF9lbnRyeTsKLQkJCi0JCWlmIChjZmctPmZsYWdzICYgQ0lTVFBMX0NGVEFCTEVfREVGQVVMVCkgZGZsdCA9ICpjZmc7Ci0JCWlmIChjZmctPmluZGV4ID09IDApIGdvdG8gbmV4dF9lbnRyeTsKLQkJbGluay0+Y29uZi5Db25maWdJbmRleCA9IGNmZy0+aW5kZXg7Ci0JCQotCQkvKiBEb2VzIHRoaXMgY2FyZCBuZWVkIGF1ZGlvIG91dHB1dD8gKi8KLQkJaWYgKGNmZy0+ZmxhZ3MgJiBDSVNUUExfQ0ZUQUJMRV9BVURJTykgewotCQkJbGluay0+Y29uZi5BdHRyaWJ1dGVzIHw9IENPTkZfRU5BQkxFX1NQS1I7Ci0JCQlsaW5rLT5jb25mLlN0YXR1cyA9IENDU1JfQVVESU9fRU5BOwotCQl9Ci0JCQotCQkvKiBVc2UgcG93ZXIgc2V0dGluZ3MgZm9yIFZjYyBhbmQgVnBwIGlmIHByZXNlbnQgKi8KLQkJLyogIE5vdGUgdGhhdCB0aGUgQ0lTIHZhbHVlcyBuZWVkIHRvIGJlIHJlc2NhbGVkICovCi0JCWlmIChjZmctPnZwcDEucHJlc2VudCAmICgxPDxDSVNUUExfUE9XRVJfVk5PTSkpCi0JCQlsaW5rLT5jb25mLlZwcCA9Ci0JCQkJY2ZnLT52cHAxLnBhcmFtW0NJU1RQTF9QT1dFUl9WTk9NXS8xMDAwMDsKLQkJZWxzZSBpZiAoZGZsdC52cHAxLnByZXNlbnQgJiAoMTw8Q0lTVFBMX1BPV0VSX1ZOT00pKQotCQkJbGluay0+Y29uZi5WcHAgPQotCQkJCWRmbHQudnBwMS5wYXJhbVtDSVNUUExfUE9XRVJfVk5PTV0vMTAwMDA7Ci0JCQotCQkvKiBEbyB3ZSBuZWVkIHRvIGFsbG9jYXRlIGFuIGludGVycnVwdD8gKi8KLQkJaWYgKGNmZy0+aXJxLklSUUluZm8xIHx8IGRmbHQuaXJxLklSUUluZm8xKQotCQkJbGluay0+Y29uZi5BdHRyaWJ1dGVzIHw9IENPTkZfRU5BQkxFX0lSUTsKLQkJCi0JCS8qIElPIHdpbmRvdyBzZXR0aW5ncyAqLwotCQlsaW5rLT5pby5OdW1Qb3J0czEgPSBsaW5rLT5pby5OdW1Qb3J0czIgPSAwOwotCQlpZiAoKGNmZy0+aW8ubndpbiA+IDApIHx8IChkZmx0LmlvLm53aW4gPiAwKSkgewotCQkJY2lzdHBsX2lvX3QgKmlvID0gKGNmZy0+aW8ubndpbikgPyAmY2ZnLT5pbyA6ICZkZmx0LmlvOwotCQkJbGluay0+aW8uQXR0cmlidXRlczEgPSBJT19EQVRBX1BBVEhfV0lEVEhfQVVUTzsKLQkJCWlmICghKGlvLT5mbGFncyAmIENJU1RQTF9JT184QklUKSkKLQkJCQlsaW5rLT5pby5BdHRyaWJ1dGVzMSA9IElPX0RBVEFfUEFUSF9XSURUSF8xNjsKLQkJCWlmICghKGlvLT5mbGFncyAmIENJU1RQTF9JT18xNkJJVCkpCi0JCQkJbGluay0+aW8uQXR0cmlidXRlczEgPSBJT19EQVRBX1BBVEhfV0lEVEhfODsKLQkJCWxpbmstPmlvLkJhc2VQb3J0MSA9IGlvLT53aW5bMF0uYmFzZTsKLQkJCWxpbmstPmlvLk51bVBvcnRzMSA9IGlvLT53aW5bMF0ubGVuOwotCQkJaWYgKGlvLT5ud2luID4gMSkgewotCQkJCWxpbmstPmlvLkF0dHJpYnV0ZXMyID0gbGluay0+aW8uQXR0cmlidXRlczE7Ci0JCQkJbGluay0+aW8uQmFzZVBvcnQyID0gaW8tPndpblsxXS5iYXNlOwotCQkJCWxpbmstPmlvLk51bVBvcnRzMiA9IGlvLT53aW5bMV0ubGVuOwotCQkJfQotCQl9Ci0JCQotCQkvKiBUaGlzIHJlc2VydmVzIElPIHNwYWNlIGJ1dCBkb2Vzbid0IGFjdHVhbGx5IGVuYWJsZSBpdCAqLwotCQlpZiAocGNtY2lhX3JlcXVlc3RfaW8obGluaywgJmxpbmstPmlvKSAhPSAwKQotCQkJZ290byBuZXh0X2VudHJ5OwotCQkKLQkJLyoKLQkJICBOb3cgc2V0IHVwIGEgY29tbW9uIG1lbW9yeSB3aW5kb3csIGlmIG5lZWRlZC4gIFRoZXJlIGlzIHJvb20KLQkJICBpbiB0aGUgc3RydWN0IHBjbWNpYV9kZXZpY2Ugc3RydWN0dXJlIGZvciBvbmUgbWVtb3J5IHdpbmRvdyBoYW5kbGUsCi0JCSAgYnV0IGlmIHRoZSBiYXNlIGFkZHJlc3NlcyBuZWVkIHRvIGJlIHNhdmVkLCBvciBpZiBtdWx0aXBsZQotCQkgIHdpbmRvd3MgYXJlIG5lZWRlZCwgdGhlIGluZm8gc2hvdWxkIGdvIGluIHRoZSBwcml2YXRlIGRhdGEKLQkJICBzdHJ1Y3R1cmUgZm9yIHRoaXMgZGV2aWNlLgotCQkgIAotCQkgIE5vdGUgdGhhdCB0aGUgbWVtb3J5IHdpbmRvdyBiYXNlIGlzIGEgcGh5c2ljYWwgYWRkcmVzcywgYW5kCi0JCSAgbmVlZHMgdG8gYmUgbWFwcGVkIHRvIHZpcnR1YWwgc3BhY2Ugd2l0aCBpb3JlbWFwKCkgYmVmb3JlIGl0Ci0JCSAgaXMgdXNlZC4KLQkJKi8KLQkJaWYgKChjZmctPm1lbS5ud2luID4gMCkgfHwgKGRmbHQubWVtLm53aW4gPiAwKSkgewotCQkJY2lzdHBsX21lbV90ICptZW0gPQotCQkJCShjZmctPm1lbS5ud2luKSA/ICZjZmctPm1lbSA6ICZkZmx0Lm1lbTsKLQkJCXJlcS5BdHRyaWJ1dGVzID0gV0lOX0RBVEFfV0lEVEhfMTZ8V0lOX01FTU9SWV9UWVBFX0NNOwotCQkJcmVxLkJhc2UgPSBtZW0tPndpblswXS5ob3N0X2FkZHI7Ci0JCQlyZXEuU2l6ZSA9IG1lbS0+d2luWzBdLmxlbjsKLQkJCXJlcS5BY2Nlc3NTcGVlZCA9IDA7Ci0JCQlpZiAocGNtY2lhX3JlcXVlc3Rfd2luZG93KCZsaW5rLCAmcmVxLCAmbGluay0+d2luKSAhPSAwKQotCQkJCWdvdG8gbmV4dF9lbnRyeTsKLQkJCW1hcC5QYWdlID0gMDsgbWFwLkNhcmRPZmZzZXQgPSBtZW0tPndpblswXS5jYXJkX2FkZHI7Ci0JCQlpZiAocGNtY2lhX21hcF9tZW1fcGFnZShsaW5rLT53aW4sICZtYXApICE9IDApCi0JCQkJZ290byBuZXh0X2VudHJ5OwotCQl9Ci0JCS8qIElmIHdlIGdvdCB0aGlzIGZhciwgd2UncmUgY29vbCEgKi8KLQkJYnJlYWs7Ci0JCQotCW5leHRfZW50cnk6Ci0JCUNTX0NIRUNLKEdldE5leHRUdXBsZSwgcGNtY2lhX2dldF9uZXh0X3R1cGxlKGxpbmssICZ0dXBsZSkpOwotCX0KLQkKLSAgICAvKgotICAgICAgQWxsb2NhdGUgYW4gaW50ZXJydXB0IGxpbmUuICBOb3RlIHRoYXQgdGhpcyBkb2VzIG5vdCBhc3NpZ24gYQotICAgICAgaGFuZGxlciB0byB0aGUgaW50ZXJydXB0LCB1bmxlc3MgdGhlICdIYW5kbGVyJyBtZW1iZXIgb2YgdGhlCi0gICAgICBpcnEgc3RydWN0dXJlIGlzIGluaXRpYWxpemVkLgotICAgICovCiAJaWYgKGxpbmstPmNvbmYuQXR0cmlidXRlcyAmIENPTkZfRU5BQkxFX0lSUSkKIAkJQ1NfQ0hFQ0soUmVxdWVzdElSUSwgcGNtY2lhX3JlcXVlc3RfaXJxKGxpbmssICZsaW5rLT5pcnEpKTsKIAkKQEAgLTM2MiwxNCArMzU5LDE3IEBACiAJCXByaW50aygiICYgMHglMDR4LTB4JTA0eCIsIGxpbmstPmlvLkJhc2VQb3J0MiwKIAkJICAgICAgIGxpbmstPmlvLkJhc2VQb3J0MitsaW5rLT5pby5OdW1Qb3J0czItMSk7CiAJaWYgKGxpbmstPndpbikKLQkJcHJpbnRrKCIsIG1lbSAweCUwNmx4LTB4JTA2bHgiLCByZXEuQmFzZSwKLQkJICAgICAgIHJlcS5CYXNlK3JlcS5TaXplLTEpOworCQlwcmludGsoIiwgbWVtIDB4JTA2bHgtMHglMDZseCIsIHJlcS0+QmFzZSwKKwkJICAgICAgIHJlcS0+QmFzZStyZXEtPlNpemUtMSk7CiAJcHJpbnRrKCJcbiIpOworCWtmcmVlKHJlcSk7CiAJcmV0dXJuIDA7CiAKICBjc19mYWlsZWQ6CiAJY3NfZXJyb3IobGluaywgbGFzdF9mbiwgbGFzdF9yZXQpOworIGZhaWxlZDoKIAlhaXJvX3JlbGVhc2UobGluayk7CisJa2ZyZWUocmVxKTsKIAlyZXR1cm4gLUVOT0RFVjsKIH0gLyogYWlyb19jb25maWcgKi8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoOWsvbWFpbi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoOWsvbWFpbi5jCmluZGV4IDc0NzI2OTkuLmYwNWY1ODQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDlrL21haW4uYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg5ay9tYWluLmMKQEAgLTE2NDAsNiArMTY0MCwxMSBAQAogCXJldHVybiByZXQ7CiB9CiAKK3N0YXRpYyBpbnQgYXRoOWtfbm9fZnJhZ21lbnRhdGlvbihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTMyIHZhbHVlKQoreworCXJldHVybiAtRU9QTk9UU1VQUDsKK30KKwogc3RhdGljIHN0cnVjdCBpZWVlODAyMTFfb3BzIGF0aDlrX29wcyA9IHsKIAkudHggCQkgICAgPSBhdGg5a190eCwKIAkuc3RhcnQgCQkgICAgPSBhdGg5a19zdGFydCwKQEAgLTE2NjQsNyArMTY2OSw4IEBACiAJLmdldF90c2YgCSAgICA9IGF0aDlrX2dldF90c2YsCiAJLnJlc2V0X3RzZiAJICAgID0gYXRoOWtfcmVzZXRfdHNmLAogCS50eF9sYXN0X2JlYWNvbiAgICAgPSBOVUxMLAotCS5hbXBkdV9hY3Rpb24gICAgICAgPSBhdGg5a19hbXBkdV9hY3Rpb24KKwkuYW1wZHVfYWN0aW9uICAgICAgID0gYXRoOWtfYW1wZHVfYWN0aW9uLAorCS5zZXRfZnJhZ190aHJlc2hvbGQgPSBhdGg5a19ub19mcmFnbWVudGF0aW9uLAogfTsKIAogc3RhdGljIGludCBhdGhfcGNpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdG1lbF9jcy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRtZWxfY3MuYwppbmRleCBkMjM4OGU4Li43NzQwNjI0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdG1lbF9jcy5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0bWVsX2NzLmMKQEAgLTIyNCwxMyArMjI0LDU4IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgYXRtZWxfY29uZmlnX2NoZWNrKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldiwKKwkJCSAgICAgIGNpc3RwbF9jZnRhYmxlX2VudHJ5X3QgKmNmZywKKwkJCSAgICAgIGNpc3RwbF9jZnRhYmxlX2VudHJ5X3QgKmRmbHQsCisJCQkgICAgICB1bnNpZ25lZCBpbnQgdmNjLAorCQkJICAgICAgdm9pZCAqcHJpdl9kYXRhKQoreworCWlmIChjZmctPmluZGV4ID09IDApCisJCXJldHVybiAtRU5PREVWOworCisJLyogRG9lcyB0aGlzIGNhcmQgbmVlZCBhdWRpbyBvdXRwdXQ/ICovCisJaWYgKGNmZy0+ZmxhZ3MgJiBDSVNUUExfQ0ZUQUJMRV9BVURJTykgeworCQlwX2Rldi0+Y29uZi5BdHRyaWJ1dGVzIHw9IENPTkZfRU5BQkxFX1NQS1I7CisJCXBfZGV2LT5jb25mLlN0YXR1cyA9IENDU1JfQVVESU9fRU5BOworCX0KKworCS8qIFVzZSBwb3dlciBzZXR0aW5ncyBmb3IgVmNjIGFuZCBWcHAgaWYgcHJlc2VudCAqLworCS8qICBOb3RlIHRoYXQgdGhlIENJUyB2YWx1ZXMgbmVlZCB0byBiZSByZXNjYWxlZCAqLworCWlmIChjZmctPnZwcDEucHJlc2VudCAmICgxPDxDSVNUUExfUE9XRVJfVk5PTSkpCisJCXBfZGV2LT5jb25mLlZwcCA9IGNmZy0+dnBwMS5wYXJhbVtDSVNUUExfUE9XRVJfVk5PTV0vMTAwMDA7CisJZWxzZSBpZiAoZGZsdC0+dnBwMS5wcmVzZW50ICYgKDE8PENJU1RQTF9QT1dFUl9WTk9NKSkKKwkJcF9kZXYtPmNvbmYuVnBwID0gZGZsdC0+dnBwMS5wYXJhbVtDSVNUUExfUE9XRVJfVk5PTV0vMTAwMDA7CisKKwkvKiBEbyB3ZSBuZWVkIHRvIGFsbG9jYXRlIGFuIGludGVycnVwdD8gKi8KKwlpZiAoY2ZnLT5pcnEuSVJRSW5mbzEgfHwgZGZsdC0+aXJxLklSUUluZm8xKQorCQlwX2Rldi0+Y29uZi5BdHRyaWJ1dGVzIHw9IENPTkZfRU5BQkxFX0lSUTsKKworCS8qIElPIHdpbmRvdyBzZXR0aW5ncyAqLworCXBfZGV2LT5pby5OdW1Qb3J0czEgPSBwX2Rldi0+aW8uTnVtUG9ydHMyID0gMDsKKwlpZiAoKGNmZy0+aW8ubndpbiA+IDApIHx8IChkZmx0LT5pby5ud2luID4gMCkpIHsKKwkJY2lzdHBsX2lvX3QgKmlvID0gKGNmZy0+aW8ubndpbikgPyAmY2ZnLT5pbyA6ICZkZmx0LT5pbzsKKwkJcF9kZXYtPmlvLkF0dHJpYnV0ZXMxID0gSU9fREFUQV9QQVRIX1dJRFRIX0FVVE87CisJCWlmICghKGlvLT5mbGFncyAmIENJU1RQTF9JT184QklUKSkKKwkJCXBfZGV2LT5pby5BdHRyaWJ1dGVzMSA9IElPX0RBVEFfUEFUSF9XSURUSF8xNjsKKwkJaWYgKCEoaW8tPmZsYWdzICYgQ0lTVFBMX0lPXzE2QklUKSkKKwkJCXBfZGV2LT5pby5BdHRyaWJ1dGVzMSA9IElPX0RBVEFfUEFUSF9XSURUSF84OworCQlwX2Rldi0+aW8uQmFzZVBvcnQxID0gaW8tPndpblswXS5iYXNlOworCQlwX2Rldi0+aW8uTnVtUG9ydHMxID0gaW8tPndpblswXS5sZW47CisJCWlmIChpby0+bndpbiA+IDEpIHsKKwkJCXBfZGV2LT5pby5BdHRyaWJ1dGVzMiA9IHBfZGV2LT5pby5BdHRyaWJ1dGVzMTsKKwkJCXBfZGV2LT5pby5CYXNlUG9ydDIgPSBpby0+d2luWzFdLmJhc2U7CisJCQlwX2Rldi0+aW8uTnVtUG9ydHMyID0gaW8tPndpblsxXS5sZW47CisJCX0KKwl9CisKKwkvKiBUaGlzIHJlc2VydmVzIElPIHNwYWNlIGJ1dCBkb2Vzbid0IGFjdHVhbGx5IGVuYWJsZSBpdCAqLworCXJldHVybiBwY21jaWFfcmVxdWVzdF9pbyhwX2RldiwgJnBfZGV2LT5pbyk7Cit9CisKIHN0YXRpYyBpbnQgYXRtZWxfY29uZmlnKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQogewotCXR1cGxlX3QgdHVwbGU7Ci0JY2lzcGFyc2VfdCBwYXJzZTsKIAlsb2NhbF9pbmZvX3QgKmRldjsKIAlpbnQgbGFzdF9mbiwgbGFzdF9yZXQ7Ci0JdV9jaGFyIGJ1Zls2NF07CiAJc3RydWN0IHBjbWNpYV9kZXZpY2VfaWQgKmRpZDsKIAogCWRldiA9IGxpbmstPnByaXY7CkBAIC0yMzgsMTEgKzI4Myw2IEBACiAKIAlERUJVRygwLCAiYXRtZWxfY29uZmlnKDB4JXApXG4iLCBsaW5rKTsKIAotCXR1cGxlLkF0dHJpYnV0ZXMgPSAwOwotCXR1cGxlLlR1cGxlRGF0YSA9IGJ1ZjsKLQl0dXBsZS5UdXBsZURhdGFNYXggPSBzaXplb2YoYnVmKTsKLQl0dXBsZS5UdXBsZU9mZnNldCA9IDA7Ci0KIAkvKgogCSAgSW4gdGhpcyBsb29wLCB3ZSBzY2FuIHRoZSBDSVMgZm9yIGNvbmZpZ3VyYXRpb24gdGFibGUgZW50cmllcywKIAkgIGVhY2ggb2Ygd2hpY2ggZGVzY3JpYmVzIGEgdmFsaWQgY2FyZCBjb25maWd1cmF0aW9uLCBpbmNsdWRpbmcKQEAgLTI1NSw2NiArMjk1LDggQEAKIAkgIHRoZXNlIHRoaW5ncyB3aXRob3V0IGNvbnN1bHRpbmcgdGhlIENJUywgYW5kIG1vc3QgY2xpZW50IGRyaXZlcnMKIAkgIHdpbGwgb25seSB1c2UgdGhlIENJUyB0byBmaWxsIGluIGltcGxlbWVudGF0aW9uLWRlZmluZWQgZGV0YWlscy4KIAkqLwotCXR1cGxlLkRlc2lyZWRUdXBsZSA9IENJU1RQTF9DRlRBQkxFX0VOVFJZOwotCUNTX0NIRUNLKEdldEZpcnN0VHVwbGUsIHBjbWNpYV9nZXRfZmlyc3RfdHVwbGUobGluaywgJnR1cGxlKSk7Ci0Jd2hpbGUgKDEpIHsKLQkJY2lzdHBsX2NmdGFibGVfZW50cnlfdCBkZmx0ID0geyAwIH07Ci0JCWNpc3RwbF9jZnRhYmxlX2VudHJ5X3QgKmNmZyA9ICYocGFyc2UuY2Z0YWJsZV9lbnRyeSk7Ci0JCWlmIChwY21jaWFfZ2V0X3R1cGxlX2RhdGEobGluaywgJnR1cGxlKSAhPSAwIHx8Ci0JCQkJcGNtY2lhX3BhcnNlX3R1cGxlKGxpbmssICZ0dXBsZSwgJnBhcnNlKSAhPSAwKQotCQkJZ290byBuZXh0X2VudHJ5OwotCi0JCWlmIChjZmctPmZsYWdzICYgQ0lTVFBMX0NGVEFCTEVfREVGQVVMVCkgZGZsdCA9ICpjZmc7Ci0JCWlmIChjZmctPmluZGV4ID09IDApIGdvdG8gbmV4dF9lbnRyeTsKLQkJbGluay0+Y29uZi5Db25maWdJbmRleCA9IGNmZy0+aW5kZXg7Ci0KLQkJLyogRG9lcyB0aGlzIGNhcmQgbmVlZCBhdWRpbyBvdXRwdXQ/ICovCi0JCWlmIChjZmctPmZsYWdzICYgQ0lTVFBMX0NGVEFCTEVfQVVESU8pIHsKLQkJCWxpbmstPmNvbmYuQXR0cmlidXRlcyB8PSBDT05GX0VOQUJMRV9TUEtSOwotCQkJbGluay0+Y29uZi5TdGF0dXMgPSBDQ1NSX0FVRElPX0VOQTsKLQkJfQotCi0JCS8qIFVzZSBwb3dlciBzZXR0aW5ncyBmb3IgVmNjIGFuZCBWcHAgaWYgcHJlc2VudCAqLwotCQkvKiAgTm90ZSB0aGF0IHRoZSBDSVMgdmFsdWVzIG5lZWQgdG8gYmUgcmVzY2FsZWQgKi8KLQkJaWYgKGNmZy0+dnBwMS5wcmVzZW50ICYgKDE8PENJU1RQTF9QT1dFUl9WTk9NKSkKLQkJCWxpbmstPmNvbmYuVnBwID0KLQkJCQljZmctPnZwcDEucGFyYW1bQ0lTVFBMX1BPV0VSX1ZOT01dLzEwMDAwOwotCQllbHNlIGlmIChkZmx0LnZwcDEucHJlc2VudCAmICgxPDxDSVNUUExfUE9XRVJfVk5PTSkpCi0JCQlsaW5rLT5jb25mLlZwcCA9Ci0JCQkJZGZsdC52cHAxLnBhcmFtW0NJU1RQTF9QT1dFUl9WTk9NXS8xMDAwMDsKLQotCQkvKiBEbyB3ZSBuZWVkIHRvIGFsbG9jYXRlIGFuIGludGVycnVwdD8gKi8KLQkJaWYgKGNmZy0+aXJxLklSUUluZm8xIHx8IGRmbHQuaXJxLklSUUluZm8xKQotCQkJbGluay0+Y29uZi5BdHRyaWJ1dGVzIHw9IENPTkZfRU5BQkxFX0lSUTsKLQotCQkvKiBJTyB3aW5kb3cgc2V0dGluZ3MgKi8KLQkJbGluay0+aW8uTnVtUG9ydHMxID0gbGluay0+aW8uTnVtUG9ydHMyID0gMDsKLQkJaWYgKChjZmctPmlvLm53aW4gPiAwKSB8fCAoZGZsdC5pby5ud2luID4gMCkpIHsKLQkJCWNpc3RwbF9pb190ICppbyA9IChjZmctPmlvLm53aW4pID8gJmNmZy0+aW8gOiAmZGZsdC5pbzsKLQkJCWxpbmstPmlvLkF0dHJpYnV0ZXMxID0gSU9fREFUQV9QQVRIX1dJRFRIX0FVVE87Ci0JCQlpZiAoIShpby0+ZmxhZ3MgJiBDSVNUUExfSU9fOEJJVCkpCi0JCQkJbGluay0+aW8uQXR0cmlidXRlczEgPSBJT19EQVRBX1BBVEhfV0lEVEhfMTY7Ci0JCQlpZiAoIShpby0+ZmxhZ3MgJiBDSVNUUExfSU9fMTZCSVQpKQotCQkJCWxpbmstPmlvLkF0dHJpYnV0ZXMxID0gSU9fREFUQV9QQVRIX1dJRFRIXzg7Ci0JCQlsaW5rLT5pby5CYXNlUG9ydDEgPSBpby0+d2luWzBdLmJhc2U7Ci0JCQlsaW5rLT5pby5OdW1Qb3J0czEgPSBpby0+d2luWzBdLmxlbjsKLQkJCWlmIChpby0+bndpbiA+IDEpIHsKLQkJCQlsaW5rLT5pby5BdHRyaWJ1dGVzMiA9IGxpbmstPmlvLkF0dHJpYnV0ZXMxOwotCQkJCWxpbmstPmlvLkJhc2VQb3J0MiA9IGlvLT53aW5bMV0uYmFzZTsKLQkJCQlsaW5rLT5pby5OdW1Qb3J0czIgPSBpby0+d2luWzFdLmxlbjsKLQkJCX0KLQkJfQotCi0JCS8qIFRoaXMgcmVzZXJ2ZXMgSU8gc3BhY2UgYnV0IGRvZXNuJ3QgYWN0dWFsbHkgZW5hYmxlIGl0ICovCi0JCWlmIChwY21jaWFfcmVxdWVzdF9pbyhsaW5rLCAmbGluay0+aW8pICE9IDApCi0JCQlnb3RvIG5leHRfZW50cnk7Ci0KLQkJLyogSWYgd2UgZ290IHRoaXMgZmFyLCB3ZSdyZSBjb29sISAqLwotCQlicmVhazsKLQotCW5leHRfZW50cnk6Ci0JCUNTX0NIRUNLKEdldE5leHRUdXBsZSwgcGNtY2lhX2dldF9uZXh0X3R1cGxlKGxpbmssICZ0dXBsZSkpOwotCX0KKwlpZiAocGNtY2lhX2xvb3BfY29uZmlnKGxpbmssIGF0bWVsX2NvbmZpZ19jaGVjaywgTlVMTCkpCisJCWdvdG8gZmFpbGVkOwogCiAJLyoKIAkgIEFsbG9jYXRlIGFuIGludGVycnVwdCBsaW5lLiAgTm90ZSB0aGF0IHRoaXMgZG9lcyBub3QgYXNzaWduIGEKQEAgLTM2MCw2ICszNDIsNyBAQAogCiAgY3NfZmFpbGVkOgogCWNzX2Vycm9yKGxpbmssIGxhc3RfZm4sIGxhc3RfcmV0KTsKKyBmYWlsZWQ6CiAJYXRtZWxfcmVsZWFzZShsaW5rKTsKIAlyZXR1cm4gLUVOT0RFVjsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9wY21jaWEuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9wY21jaWEuYwppbmRleCBiOGFhMTYzLi4zY2ZjMzAzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvcGNtY2lhLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL3BjbWNpYS5jCkBAIC04MiwxMyArODIsMTMgQEAKIAl0dXBsZS5UdXBsZU9mZnNldCA9IDA7CiAKIAlyZXMgPSBwY21jaWFfZ2V0X2ZpcnN0X3R1cGxlKGRldiwgJnR1cGxlKTsKLQlpZiAocmVzICE9IENTX1NVQ0NFU1MpCisJaWYgKHJlcyAhPSAwKQogCQlnb3RvIGVycl9rZnJlZV9zc2I7CiAJcmVzID0gcGNtY2lhX2dldF90dXBsZV9kYXRhKGRldiwgJnR1cGxlKTsKLQlpZiAocmVzICE9IENTX1NVQ0NFU1MpCisJaWYgKHJlcyAhPSAwKQogCQlnb3RvIGVycl9rZnJlZV9zc2I7Ci0JcmVzID0gcGNtY2lhX3BhcnNlX3R1cGxlKGRldiwgJnR1cGxlLCAmcGFyc2UpOwotCWlmIChyZXMgIT0gQ1NfU1VDQ0VTUykKKwlyZXMgPSBwY21jaWFfcGFyc2VfdHVwbGUoJnR1cGxlLCAmcGFyc2UpOworCWlmIChyZXMgIT0gMCkKIAkJZ290byBlcnJfa2ZyZWVfc3NiOwogCiAJZGV2LT5jb25mLkNvbmZpZ0Jhc2UgPSBwYXJzZS5jb25maWcuYmFzZTsKQEAgLTEwNywxMyArMTA3LDEzIEBACiAJd2luLlNpemUgPSBTU0JfQ09SRV9TSVpFOwogCXdpbi5BY2Nlc3NTcGVlZCA9IDI1MDsKIAlyZXMgPSBwY21jaWFfcmVxdWVzdF93aW5kb3coJmRldiwgJndpbiwgJmRldi0+d2luKTsKLQlpZiAocmVzICE9IENTX1NVQ0NFU1MpCisJaWYgKHJlcyAhPSAwKQogCQlnb3RvIGVycl9rZnJlZV9zc2I7CiAKIAltZW0uQ2FyZE9mZnNldCA9IDA7CiAJbWVtLlBhZ2UgPSAwOwogCXJlcyA9IHBjbWNpYV9tYXBfbWVtX3BhZ2UoZGV2LT53aW4sICZtZW0pOwotCWlmIChyZXMgIT0gQ1NfU1VDQ0VTUykKKwlpZiAocmVzICE9IDApCiAJCWdvdG8gZXJyX2Rpc2FibGU7CiAKIAlkZXYtPmlycS5BdHRyaWJ1dGVzID0gSVJRX1RZUEVfRFlOQU1JQ19TSEFSSU5HOwpAQCAtMTIxLDExICsxMjEsMTEgQEAKIAlkZXYtPmlycS5IYW5kbGVyID0gTlVMTDsgLyogVGhlIGhhbmRsZXIgaXMgcmVnaXN0ZXJlZCBsYXRlci4gKi8KIAlkZXYtPmlycS5JbnN0YW5jZSA9IE5VTEw7CiAJcmVzID0gcGNtY2lhX3JlcXVlc3RfaXJxKGRldiwgJmRldi0+aXJxKTsKLQlpZiAocmVzICE9IENTX1NVQ0NFU1MpCisJaWYgKHJlcyAhPSAwKQogCQlnb3RvIGVycl9kaXNhYmxlOwogCiAJcmVzID0gcGNtY2lhX3JlcXVlc3RfY29uZmlndXJhdGlvbihkZXYsICZkZXYtPmNvbmYpOwotCWlmIChyZXMgIT0gQ1NfU1VDQ0VTUykKKwlpZiAocmVzICE9IDApCiAJCWdvdG8gZXJyX2Rpc2FibGU7CiAKIAllcnIgPSBzc2JfYnVzX3BjbWNpYWJ1c19yZWdpc3Rlcihzc2IsIGRldiwgd2luLkJhc2UpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaG9zdGFwL2hvc3RhcF9jcy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaG9zdGFwL2hvc3RhcF9jcy5jCmluZGV4IDNiNGU1NWMuLjYzMzc0MDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hvc3RhcC9ob3N0YXBfY3MuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvaG9zdGFwX2NzLmMKQEAgLTIzNCw3ICsyMzQsNyBAQAogCXJlZy5WYWx1ZSA9IGh3X3ByaXYtPmxpbmstPmlvLkJhc2VQb3J0MSAmIDB4MDBmZjsKIAlyZXMgPSBwY21jaWFfYWNjZXNzX2NvbmZpZ3VyYXRpb25fcmVnaXN0ZXIoaHdfcHJpdi0+bGluaywKIAkJCQkJCSAgICZyZWcpOwotCWlmIChyZXMgIT0gQ1NfU1VDQ0VTUykgeworCWlmIChyZXMgIT0gMCkgewogCQlwcmludGsoS0VSTl9ERUJVRyAiUHJpc20zIFNhbkRpc2sgLSBmYWlsZWQgdG8gc2V0IEkvTyBiYXNlIDAgLSIKIAkJICAgICAgICIgcmVzPSVkXG4iLCByZXMpOwogCX0KQEAgLTI0Niw3ICsyNDYsNyBAQAogCXJlZy5WYWx1ZSA9IChod19wcml2LT5saW5rLT5pby5CYXNlUG9ydDEgJiAweGZmMDApID4+IDg7CiAJcmVzID0gcGNtY2lhX2FjY2Vzc19jb25maWd1cmF0aW9uX3JlZ2lzdGVyKGh3X3ByaXYtPmxpbmssCiAJCQkJCQkgICAmcmVnKTsKLQlpZiAocmVzICE9IENTX1NVQ0NFU1MpIHsKKwlpZiAocmVzICE9IDApIHsKIAkJcHJpbnRrKEtFUk5fREVCVUcgIlByaXNtMyBTYW5EaXNrIC0gZmFpbGVkIHRvIHNldCBJL08gYmFzZSAxIC0iCiAJCSAgICAgICAiIHJlcz0lZFxuIiwgcmVzKTsKIAl9CkBAIC0zMDUsNyArMzA1LDcgQEAKIAl0dXBsZS5EZXNpcmVkVHVwbGUgPSBDSVNUUExfTE9OR0xJTktfTUZDOwogCWlmIChwY21jaWFfZ2V0X2ZpcnN0X3R1cGxlKGh3X3ByaXYtPmxpbmssICZ0dXBsZSkgfHwKIAkgICAgcGNtY2lhX2dldF90dXBsZV9kYXRhKGh3X3ByaXYtPmxpbmssICZ0dXBsZSkgfHwKLQkgICAgcGNtY2lhX3BhcnNlX3R1cGxlKGh3X3ByaXYtPmxpbmssICZ0dXBsZSwgcGFyc2UpIHx8CisJICAgIHBjbWNpYV9wYXJzZV90dXBsZSgmdHVwbGUsIHBhcnNlKSB8fAogCQlwYXJzZS0+bG9uZ2xpbmtfbWZjLm5mbiA8IDIpIHsKIAkJLyogTm8gbXVsdGktZnVuY3Rpb24gbGlua3MgZm91bmQgKi8KIAkJcmV0ID0gLUVOT0RFVjsKQEAgLTMyMiw3ICszMjIsNyBAQAogCXJlZy5WYWx1ZSA9IENPUl9TT0ZUX1JFU0VUOwogCXJlcyA9IHBjbWNpYV9hY2Nlc3NfY29uZmlndXJhdGlvbl9yZWdpc3Rlcihod19wcml2LT5saW5rLAogCQkJCQkJICAgJnJlZyk7Ci0JaWYgKHJlcyAhPSBDU19TVUNDRVNTKSB7CisJaWYgKHJlcyAhPSAwKSB7CiAJCXByaW50ayhLRVJOX0RFQlVHICIlczogU2FuRGlzayAtIENPUiBzcmVzZXQgZmFpbGVkICglZClcbiIsCiAJCSAgICAgICBkZXYtPm5hbWUsIHJlcyk7CiAJCWdvdG8gZG9uZTsKQEAgLTMzOSw3ICszMzksNyBAQAogCXJlZy5WYWx1ZSA9IENPUl9MRVZFTF9SRVEgfCAweDggfCBDT1JfQUREUl9ERUNPREUgfCBDT1JfRlVOQ19FTkE7CiAJcmVzID0gcGNtY2lhX2FjY2Vzc19jb25maWd1cmF0aW9uX3JlZ2lzdGVyKGh3X3ByaXYtPmxpbmssCiAJCQkJCQkgICAmcmVnKTsKLQlpZiAocmVzICE9IENTX1NVQ0NFU1MpIHsKKwlpZiAocmVzICE9IDApIHsKIAkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBTYW5EaXNrIC0gQ09SIHNyZXNldCBmYWlsZWQgKCVkKVxuIiwKIAkJICAgICAgIGRldi0+bmFtZSwgcmVzKTsKIAkJZ290byBkb25lOwpAQCAtMzc0LDcgKzM3NCw3IEBACiAJcmVnLlZhbHVlID0gMDsKIAlyZXMgPSBwY21jaWFfYWNjZXNzX2NvbmZpZ3VyYXRpb25fcmVnaXN0ZXIoaHdfcHJpdi0+bGluaywKIAkJCQkJCSAgICZyZWcpOwotCWlmIChyZXMgIT0gQ1NfU1VDQ0VTUykgeworCWlmIChyZXMgIT0gMCkgewogCQlwcmludGsoS0VSTl9ERUJVRyAicHJpc20yX3BjY2FyZF9jb3Jfc3Jlc2V0IGZhaWxlZCAxICglZClcbiIsCiAJCSAgICAgICByZXMpOwogCQlyZXR1cm47CkBAIC0zODYsNyArMzg2LDcgQEAKIAlyZWcuVmFsdWUgfD0gQ09SX1NPRlRfUkVTRVQ7CiAJcmVzID0gcGNtY2lhX2FjY2Vzc19jb25maWd1cmF0aW9uX3JlZ2lzdGVyKGh3X3ByaXYtPmxpbmssCiAJCQkJCQkgICAmcmVnKTsKLQlpZiAocmVzICE9IENTX1NVQ0NFU1MpIHsKKwlpZiAocmVzICE9IDApIHsKIAkJcHJpbnRrKEtFUk5fREVCVUcgInByaXNtMl9wY2NhcmRfY29yX3NyZXNldCBmYWlsZWQgMiAoJWQpXG4iLAogCQkgICAgICAgcmVzKTsKIAkJcmV0dXJuOwpAQCAtMzk5LDcgKzM5OSw3IEBACiAJCXJlZy5WYWx1ZSB8PSBDT1JfSVJFUV9FTkE7CiAJcmVzID0gcGNtY2lhX2FjY2Vzc19jb25maWd1cmF0aW9uX3JlZ2lzdGVyKGh3X3ByaXYtPmxpbmssCiAJCQkJCQkgICAmcmVnKTsKLQlpZiAocmVzICE9IENTX1NVQ0NFU1MpIHsKKwlpZiAocmVzICE9IDApIHsKIAkJcHJpbnRrKEtFUk5fREVCVUcgInByaXNtMl9wY2NhcmRfY29yX3NyZXNldCBmYWlsZWQgMyAoJWQpXG4iLAogCQkgICAgICAgcmVzKTsKIAkJcmV0dXJuOwpAQCAtNDMzLDcgKzQzMyw3IEBACiAJcmVnLlZhbHVlID0gMDsKIAlyZXMgPSBwY21jaWFfYWNjZXNzX2NvbmZpZ3VyYXRpb25fcmVnaXN0ZXIoaHdfcHJpdi0+bGluaywKIAkJCQkJCSAgICZyZWcpOwotCWlmIChyZXMgIT0gQ1NfU1VDQ0VTUykgeworCWlmIChyZXMgIT0gMCkgewogCQlwcmludGsoS0VSTl9ERUJVRyAicHJpc20yX3BjY2FyZF9nZW5lc2lzX3NyZXNldCBmYWlsZWQgMSAiCiAJCSAgICAgICAiKCVkKVxuIiwgcmVzKTsKIAkJcmV0dXJuOwpAQCAtNDQ2LDcgKzQ0Niw3IEBACiAJcmVnLlZhbHVlIHw9IENPUl9TT0ZUX1JFU0VUOwogCXJlcyA9IHBjbWNpYV9hY2Nlc3NfY29uZmlndXJhdGlvbl9yZWdpc3Rlcihod19wcml2LT5saW5rLAogCQkJCQkJICAgJnJlZyk7Ci0JaWYgKHJlcyAhPSBDU19TVUNDRVNTKSB7CisJaWYgKHJlcyAhPSAwKSB7CiAJCXByaW50ayhLRVJOX0RFQlVHICJwcmlzbTJfcGNjYXJkX2dlbmVzaXNfc3Jlc2V0IGZhaWxlZCAyICIKIAkJICAgICAgICIoJWQpXG4iLCByZXMpOwogCQlyZXR1cm47CkBAIC00NjAsNyArNDYwLDcgQEAKIAlyZWcuT2Zmc2V0ID0gQ0lTUkVHX0NDU1I7CiAJcmVzID0gcGNtY2lhX2FjY2Vzc19jb25maWd1cmF0aW9uX3JlZ2lzdGVyKGh3X3ByaXYtPmxpbmssCiAJCQkJCQkgICAmcmVnKTsKLQlpZiAocmVzICE9IENTX1NVQ0NFU1MpIHsKKwlpZiAocmVzICE9IDApIHsKIAkJcHJpbnRrKEtFUk5fREVCVUcgInByaXNtMl9wY2NhcmRfZ2VuZXNpc19zcmVzZXQgZmFpbGVkIDMgIgogCQkgICAgICAgIiglZClcbiIsIHJlcyk7CiAJCXJldHVybjsKQEAgLTQ3Miw3ICs0NzIsNyBAQAogCXJlZy5WYWx1ZSA9IG9sZF9jb3IgJiB+Q09SX1NPRlRfUkVTRVQ7CiAJcmVzID0gcGNtY2lhX2FjY2Vzc19jb25maWd1cmF0aW9uX3JlZ2lzdGVyKGh3X3ByaXYtPmxpbmssCiAJCQkJCQkgICAmcmVnKTsKLQlpZiAocmVzICE9IENTX1NVQ0NFU1MpIHsKKwlpZiAocmVzICE9IDApIHsKIAkJcHJpbnRrKEtFUk5fREVCVUcgInByaXNtMl9wY2NhcmRfZ2VuZXNpc19zcmVzZXQgZmFpbGVkIDQgIgogCQkgICAgICAgIiglZClcbiIsIHJlcyk7CiAJCXJldHVybjsKQEAgLTUzMiwxNDUgKzUzMiwxMTggQEAKICNkZWZpbmUgQ1NfQ0hFQ0soZm4sIHJldCkgXAogZG8geyBsYXN0X2ZuID0gKGZuKTsgaWYgKChsYXN0X3JldCA9IChyZXQpKSAhPSAwKSBnb3RvIGNzX2ZhaWxlZDsgfSB3aGlsZSAoMCkKIAotI2RlZmluZSBDRkdfQ0hFQ0syKGZuLCByZXRmKSBcCi1kbyB7IGludCBfcmV0ID0gKHJldGYpOyBcCi1pZiAoX3JldCAhPSAwKSB7IFwKLQlQREVCVUcoREVCVUdfRVhUUkEsICJDYXJkU2VydmljZXMoIiAjZm4gIikgcmV0dXJuZWQgJWRcbiIsIF9yZXQpOyBcCi0JY3NfZXJyb3IobGluaywgZm4sIF9yZXQpOyBcCi0JZ290byBuZXh0X2VudHJ5OyBcCi19IFwKLX0gd2hpbGUgKDApCi0KIAogLyogcnVuIGFmdGVyIGEgQ0FSRF9JTlNFUlRJT04gZXZlbnQgaXMgcmVjZWl2ZWQgdG8gY29uZmlndXJlIHRoZSBQQ01DSUEKICAqIHNvY2tldCBhbmQgbWFrZSB0aGUgZGV2aWNlIGF2YWlsYWJsZSB0byB0aGUgc3lzdGVtICovCisKK3N0YXRpYyBpbnQgcHJpc20yX2NvbmZpZ19jaGVjayhzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYsCisJCQkgICAgICAgY2lzdHBsX2NmdGFibGVfZW50cnlfdCAqY2ZnLAorCQkJICAgICAgIGNpc3RwbF9jZnRhYmxlX2VudHJ5X3QgKmRmbHQsCisJCQkgICAgICAgdW5zaWduZWQgaW50IHZjYywKKwkJCSAgICAgICB2b2lkICpwcml2X2RhdGEpCit7CisJaWYgKGNmZy0+aW5kZXggPT0gMCkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlQREVCVUcoREVCVUdfRVhUUkEsICJDaGVja2luZyBDRlRBQkxFX0VOVFJZIDB4JTAyWCAiCisJICAgICAgICIoZGVmYXVsdCAweCUwMlgpXG4iLCBjZmctPmluZGV4LCBkZmx0LT5pbmRleCk7CisKKwkvKiBEb2VzIHRoaXMgY2FyZCBuZWVkIGF1ZGlvIG91dHB1dD8gKi8KKwlpZiAoY2ZnLT5mbGFncyAmIENJU1RQTF9DRlRBQkxFX0FVRElPKSB7CisJCXBfZGV2LT5jb25mLkF0dHJpYnV0ZXMgfD0gQ09ORl9FTkFCTEVfU1BLUjsKKwkJcF9kZXYtPmNvbmYuU3RhdHVzID0gQ0NTUl9BVURJT19FTkE7CisJfQorCisJLyogVXNlIHBvd2VyIHNldHRpbmdzIGZvciBWY2MgYW5kIFZwcCBpZiBwcmVzZW50ICovCisJLyogIE5vdGUgdGhhdCB0aGUgQ0lTIHZhbHVlcyBuZWVkIHRvIGJlIHJlc2NhbGVkICovCisJaWYgKGNmZy0+dmNjLnByZXNlbnQgJiAoMSA8PCBDSVNUUExfUE9XRVJfVk5PTSkpIHsKKwkJaWYgKHZjYyAhPSBjZmctPnZjYy5wYXJhbVtDSVNUUExfUE9XRVJfVk5PTV0gLworCQkgICAgMTAwMDAgJiYgIWlnbm9yZV9jaXNfdmNjKSB7CisJCQlQREVCVUcoREVCVUdfRVhUUkEsICIgIFZjYyBtaXNtYXRjaCAtIHNraXBwaW5nIgorCQkJICAgICAgICIgdGhpcyBlbnRyeVxuIik7CisJCQlyZXR1cm4gLUVOT0RFVjsKKwkJfQorCX0gZWxzZSBpZiAoZGZsdC0+dmNjLnByZXNlbnQgJiAoMSA8PCBDSVNUUExfUE9XRVJfVk5PTSkpIHsKKwkJaWYgKHZjYyAhPSBkZmx0LT52Y2MucGFyYW1bQ0lTVFBMX1BPV0VSX1ZOT01dIC8KKwkJICAgIDEwMDAwICYmICFpZ25vcmVfY2lzX3ZjYykgeworCQkJUERFQlVHKERFQlVHX0VYVFJBLCAiICBWY2MgKGRlZmF1bHQpIG1pc21hdGNoICIKKwkJCSAgICAgICAiLSBza2lwcGluZyB0aGlzIGVudHJ5XG4iKTsKKwkJCXJldHVybiAtRU5PREVWOworCQl9CisJfQorCisJaWYgKGNmZy0+dnBwMS5wcmVzZW50ICYgKDEgPDwgQ0lTVFBMX1BPV0VSX1ZOT00pKQorCQlwX2Rldi0+Y29uZi5WcHAgPSBjZmctPnZwcDEucGFyYW1bQ0lTVFBMX1BPV0VSX1ZOT01dIC8gMTAwMDA7CisJZWxzZSBpZiAoZGZsdC0+dnBwMS5wcmVzZW50ICYgKDEgPDwgQ0lTVFBMX1BPV0VSX1ZOT00pKQorCQlwX2Rldi0+Y29uZi5WcHAgPSBkZmx0LT52cHAxLnBhcmFtW0NJU1RQTF9QT1dFUl9WTk9NXSAvIDEwMDAwOworCisJLyogRG8gd2UgbmVlZCB0byBhbGxvY2F0ZSBhbiBpbnRlcnJ1cHQ/ICovCisJaWYgKGNmZy0+aXJxLklSUUluZm8xIHx8IGRmbHQtPmlycS5JUlFJbmZvMSkKKwkJcF9kZXYtPmNvbmYuQXR0cmlidXRlcyB8PSBDT05GX0VOQUJMRV9JUlE7CisJZWxzZSBpZiAoIShwX2Rldi0+Y29uZi5BdHRyaWJ1dGVzICYgQ09ORl9FTkFCTEVfSVJRKSkgeworCQkvKiBBdCBsZWFzdCBDb21wYXEgV0wyMDAgZG9lcyBub3QgaGF2ZSBJUlFJbmZvMSBzZXQsCisJCSAqIGJ1dCBpdCBkb2VzIG5vdCB3b3JrIHdpdGhvdXQgaW50ZXJydXB0cy4uICovCisJCXByaW50ayhLRVJOX1dBUk5JTkcgIkNvbmZpZyBoYXMgbm8gSVJRIGluZm8sIGJ1dCB0cnlpbmcgdG8gIgorCQkgICAgICAgImVuYWJsZSBJUlEgYW55d2F5Li5cbiIpOworCQlwX2Rldi0+Y29uZi5BdHRyaWJ1dGVzIHw9IENPTkZfRU5BQkxFX0lSUTsKKwl9CisKKwkvKiBJTyB3aW5kb3cgc2V0dGluZ3MgKi8KKwlQREVCVUcoREVCVUdfRVhUUkEsICJJTyB3aW5kb3cgc2V0dGluZ3M6IGNmZy0+aW8ubndpbj0lZCAiCisJICAgICAgICJkZmx0LT5pby5ud2luPSVkXG4iLAorCSAgICAgICBjZmctPmlvLm53aW4sIGRmbHQtPmlvLm53aW4pOworCXBfZGV2LT5pby5OdW1Qb3J0czEgPSBwX2Rldi0+aW8uTnVtUG9ydHMyID0gMDsKKwlpZiAoKGNmZy0+aW8ubndpbiA+IDApIHx8IChkZmx0LT5pby5ud2luID4gMCkpIHsKKwkJY2lzdHBsX2lvX3QgKmlvID0gKGNmZy0+aW8ubndpbikgPyAmY2ZnLT5pbyA6ICZkZmx0LT5pbzsKKwkJcF9kZXYtPmlvLkF0dHJpYnV0ZXMxID0gSU9fREFUQV9QQVRIX1dJRFRIX0FVVE87CisJCVBERUJVRyhERUJVR19FWFRSQSwgImlvLT5mbGFncyA9IDB4JTA0WCwgIgorCQkgICAgICAgImlvLmJhc2U9MHglMDR4LCBsZW49JWRcbiIsIGlvLT5mbGFncywKKwkJICAgICAgIGlvLT53aW5bMF0uYmFzZSwgaW8tPndpblswXS5sZW4pOworCQlpZiAoIShpby0+ZmxhZ3MgJiBDSVNUUExfSU9fOEJJVCkpCisJCQlwX2Rldi0+aW8uQXR0cmlidXRlczEgPSBJT19EQVRBX1BBVEhfV0lEVEhfMTY7CisJCWlmICghKGlvLT5mbGFncyAmIENJU1RQTF9JT18xNkJJVCkpCisJCQlwX2Rldi0+aW8uQXR0cmlidXRlczEgPSBJT19EQVRBX1BBVEhfV0lEVEhfODsKKwkJcF9kZXYtPmlvLklPQWRkckxpbmVzID0gaW8tPmZsYWdzICYKKwkJCUNJU1RQTF9JT19MSU5FU19NQVNLOworCQlwX2Rldi0+aW8uQmFzZVBvcnQxID0gaW8tPndpblswXS5iYXNlOworCQlwX2Rldi0+aW8uTnVtUG9ydHMxID0gaW8tPndpblswXS5sZW47CisJCWlmIChpby0+bndpbiA+IDEpIHsKKwkJCXBfZGV2LT5pby5BdHRyaWJ1dGVzMiA9IHBfZGV2LT5pby5BdHRyaWJ1dGVzMTsKKwkJCXBfZGV2LT5pby5CYXNlUG9ydDIgPSBpby0+d2luWzFdLmJhc2U7CisJCQlwX2Rldi0+aW8uTnVtUG9ydHMyID0gaW8tPndpblsxXS5sZW47CisJCX0KKwl9CisKKwkvKiBUaGlzIHJlc2VydmVzIElPIHNwYWNlIGJ1dCBkb2Vzbid0IGFjdHVhbGx5IGVuYWJsZSBpdCAqLworCXJldHVybiBwY21jaWFfcmVxdWVzdF9pbyhwX2RldiwgJnBfZGV2LT5pbyk7Cit9CisKIHN0YXRpYyBpbnQgcHJpc20yX2NvbmZpZyhzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwogCXN0cnVjdCBob3N0YXBfaW50ZXJmYWNlICppZmFjZTsKIAlsb2NhbF9pbmZvX3QgKmxvY2FsOwogCWludCByZXQgPSAxOwotCXR1cGxlX3QgdHVwbGU7Ci0JY2lzcGFyc2VfdCAqcGFyc2U7CiAJaW50IGxhc3RfZm4sIGxhc3RfcmV0OwotCXVfY2hhciBidWZbNjRdOwotCWNvbmZpZ19pbmZvX3QgY29uZjsKLQljaXN0cGxfY2Z0YWJsZV9lbnRyeV90IGRmbHQgPSB7IDAgfTsKIAlzdHJ1Y3QgaG9zdGFwX2NzX3ByaXYgKmh3X3ByaXY7CiAKIAlQREVCVUcoREVCVUdfRkxPVywgInByaXNtMl9jb25maWcoKVxuIik7CiAKLQlwYXJzZSA9IGttYWxsb2Moc2l6ZW9mKGNpc3BhcnNlX3QpLCBHRlBfS0VSTkVMKTsKIAlod19wcml2ID0ga3phbGxvYyhzaXplb2YoKmh3X3ByaXYpLCBHRlBfS0VSTkVMKTsKLQlpZiAocGFyc2UgPT0gTlVMTCB8fCBod19wcml2ID09IE5VTEwpIHsKKwlpZiAoaHdfcHJpdiA9PSBOVUxMKSB7CiAJCXJldCA9IC1FTk9NRU07CiAJCWdvdG8gZmFpbGVkOwogCX0KIAotCXR1cGxlLkF0dHJpYnV0ZXMgPSAwOwotCXR1cGxlLlR1cGxlRGF0YSA9IGJ1ZjsKLQl0dXBsZS5UdXBsZURhdGFNYXggPSBzaXplb2YoYnVmKTsKLQl0dXBsZS5UdXBsZU9mZnNldCA9IDA7Ci0KLQlDU19DSEVDSyhHZXRDb25maWd1cmF0aW9uSW5mbywKLQkJIHBjbWNpYV9nZXRfY29uZmlndXJhdGlvbl9pbmZvKGxpbmssICZjb25mKSk7Ci0KIAkvKiBMb29rIGZvciBhbiBhcHByb3ByaWF0ZSBjb25maWd1cmF0aW9uIHRhYmxlIGVudHJ5IGluIHRoZSBDSVMgKi8KLQl0dXBsZS5EZXNpcmVkVHVwbGUgPSBDSVNUUExfQ0ZUQUJMRV9FTlRSWTsKLQlDU19DSEVDSyhHZXRGaXJzdFR1cGxlLCBwY21jaWFfZ2V0X2ZpcnN0X3R1cGxlKGxpbmssICZ0dXBsZSkpOwotCWZvciAoOzspIHsKLQkJY2lzdHBsX2NmdGFibGVfZW50cnlfdCAqY2ZnID0gJihwYXJzZS0+Y2Z0YWJsZV9lbnRyeSk7Ci0JCUNGR19DSEVDSzIoR2V0VHVwbGVEYXRhLAotCQkJICAgcGNtY2lhX2dldF90dXBsZV9kYXRhKGxpbmssICZ0dXBsZSkpOwotCQlDRkdfQ0hFQ0syKFBhcnNlVHVwbGUsCi0JCQkgICBwY21jaWFfcGFyc2VfdHVwbGUobGluaywgJnR1cGxlLCBwYXJzZSkpOwotCi0JCWlmIChjZmctPmZsYWdzICYgQ0lTVFBMX0NGVEFCTEVfREVGQVVMVCkKLQkJCWRmbHQgPSAqY2ZnOwotCQlpZiAoY2ZnLT5pbmRleCA9PSAwKQotCQkJZ290byBuZXh0X2VudHJ5OwotCQlsaW5rLT5jb25mLkNvbmZpZ0luZGV4ID0gY2ZnLT5pbmRleDsKLQkJUERFQlVHKERFQlVHX0VYVFJBLCAiQ2hlY2tpbmcgQ0ZUQUJMRV9FTlRSWSAweCUwMlggIgotCQkgICAgICAgIihkZWZhdWx0IDB4JTAyWClcbiIsIGNmZy0+aW5kZXgsIGRmbHQuaW5kZXgpOwotCi0JCS8qIERvZXMgdGhpcyBjYXJkIG5lZWQgYXVkaW8gb3V0cHV0PyAqLwotCQlpZiAoY2ZnLT5mbGFncyAmIENJU1RQTF9DRlRBQkxFX0FVRElPKSB7Ci0JCQlsaW5rLT5jb25mLkF0dHJpYnV0ZXMgfD0gQ09ORl9FTkFCTEVfU1BLUjsKLQkJCWxpbmstPmNvbmYuU3RhdHVzID0gQ0NTUl9BVURJT19FTkE7Ci0JCX0KLQotCQkvKiBVc2UgcG93ZXIgc2V0dGluZ3MgZm9yIFZjYyBhbmQgVnBwIGlmIHByZXNlbnQgKi8KLQkJLyogIE5vdGUgdGhhdCB0aGUgQ0lTIHZhbHVlcyBuZWVkIHRvIGJlIHJlc2NhbGVkICovCi0JCWlmIChjZmctPnZjYy5wcmVzZW50ICYgKDEgPDwgQ0lTVFBMX1BPV0VSX1ZOT00pKSB7Ci0JCQlpZiAoY29uZi5WY2MgIT0gY2ZnLT52Y2MucGFyYW1bQ0lTVFBMX1BPV0VSX1ZOT01dIC8KLQkJCSAgICAxMDAwMCAmJiAhaWdub3JlX2Npc192Y2MpIHsKLQkJCQlQREVCVUcoREVCVUdfRVhUUkEsICIgIFZjYyBtaXNtYXRjaCAtIHNraXBwaW5nIgotCQkJCSAgICAgICAiIHRoaXMgZW50cnlcbiIpOwotCQkJCWdvdG8gbmV4dF9lbnRyeTsKLQkJCX0KLQkJfSBlbHNlIGlmIChkZmx0LnZjYy5wcmVzZW50ICYgKDEgPDwgQ0lTVFBMX1BPV0VSX1ZOT00pKSB7Ci0JCQlpZiAoY29uZi5WY2MgIT0gZGZsdC52Y2MucGFyYW1bQ0lTVFBMX1BPV0VSX1ZOT01dIC8KLQkJCSAgICAxMDAwMCAmJiAhaWdub3JlX2Npc192Y2MpIHsKLQkJCQlQREVCVUcoREVCVUdfRVhUUkEsICIgIFZjYyAoZGVmYXVsdCkgbWlzbWF0Y2ggIgotCQkJCSAgICAgICAiLSBza2lwcGluZyB0aGlzIGVudHJ5XG4iKTsKLQkJCQlnb3RvIG5leHRfZW50cnk7Ci0JCQl9Ci0JCX0KLQotCQlpZiAoY2ZnLT52cHAxLnByZXNlbnQgJiAoMSA8PCBDSVNUUExfUE9XRVJfVk5PTSkpCi0JCQlsaW5rLT5jb25mLlZwcCA9Ci0JCQkJY2ZnLT52cHAxLnBhcmFtW0NJU1RQTF9QT1dFUl9WTk9NXSAvIDEwMDAwOwotCQllbHNlIGlmIChkZmx0LnZwcDEucHJlc2VudCAmICgxIDw8IENJU1RQTF9QT1dFUl9WTk9NKSkKLQkJCWxpbmstPmNvbmYuVnBwID0KLQkJCQlkZmx0LnZwcDEucGFyYW1bQ0lTVFBMX1BPV0VSX1ZOT01dIC8gMTAwMDA7Ci0KLQkJLyogRG8gd2UgbmVlZCB0byBhbGxvY2F0ZSBhbiBpbnRlcnJ1cHQ/ICovCi0JCWlmIChjZmctPmlycS5JUlFJbmZvMSB8fCBkZmx0LmlycS5JUlFJbmZvMSkKLQkJCWxpbmstPmNvbmYuQXR0cmlidXRlcyB8PSBDT05GX0VOQUJMRV9JUlE7Ci0JCWVsc2UgaWYgKCEobGluay0+Y29uZi5BdHRyaWJ1dGVzICYgQ09ORl9FTkFCTEVfSVJRKSkgewotCQkJLyogQXQgbGVhc3QgQ29tcGFxIFdMMjAwIGRvZXMgbm90IGhhdmUgSVJRSW5mbzEgc2V0LAotCQkJICogYnV0IGl0IGRvZXMgbm90IHdvcmsgd2l0aG91dCBpbnRlcnJ1cHRzLi4gKi8KLQkJCXByaW50aygiQ29uZmlnIGhhcyBubyBJUlEgaW5mbywgYnV0IHRyeWluZyB0byBlbmFibGUgIgotCQkJICAgICAgICJJUlEgYW55d2F5Li5cbiIpOwotCQkJbGluay0+Y29uZi5BdHRyaWJ1dGVzIHw9IENPTkZfRU5BQkxFX0lSUTsKLQkJfQotCi0JCS8qIElPIHdpbmRvdyBzZXR0aW5ncyAqLwotCQlQREVCVUcoREVCVUdfRVhUUkEsICJJTyB3aW5kb3cgc2V0dGluZ3M6IGNmZy0+aW8ubndpbj0lZCAiCi0JCSAgICAgICAiZGZsdC5pby5ud2luPSVkXG4iLAotCQkgICAgICAgY2ZnLT5pby5ud2luLCBkZmx0LmlvLm53aW4pOwotCQlsaW5rLT5pby5OdW1Qb3J0czEgPSBsaW5rLT5pby5OdW1Qb3J0czIgPSAwOwotCQlpZiAoKGNmZy0+aW8ubndpbiA+IDApIHx8IChkZmx0LmlvLm53aW4gPiAwKSkgewotCQkJY2lzdHBsX2lvX3QgKmlvID0gKGNmZy0+aW8ubndpbikgPyAmY2ZnLT5pbyA6ICZkZmx0LmlvOwotCQkJbGluay0+aW8uQXR0cmlidXRlczEgPSBJT19EQVRBX1BBVEhfV0lEVEhfQVVUTzsKLQkJCVBERUJVRyhERUJVR19FWFRSQSwgImlvLT5mbGFncyA9IDB4JTA0WCwgIgotCQkJICAgICAgICJpby5iYXNlPTB4JTA0eCwgbGVuPSVkXG4iLCBpby0+ZmxhZ3MsCi0JCQkgICAgICAgaW8tPndpblswXS5iYXNlLCBpby0+d2luWzBdLmxlbik7Ci0JCQlpZiAoIShpby0+ZmxhZ3MgJiBDSVNUUExfSU9fOEJJVCkpCi0JCQkJbGluay0+aW8uQXR0cmlidXRlczEgPSBJT19EQVRBX1BBVEhfV0lEVEhfMTY7Ci0JCQlpZiAoIShpby0+ZmxhZ3MgJiBDSVNUUExfSU9fMTZCSVQpKQotCQkJCWxpbmstPmlvLkF0dHJpYnV0ZXMxID0gSU9fREFUQV9QQVRIX1dJRFRIXzg7Ci0JCQlsaW5rLT5pby5JT0FkZHJMaW5lcyA9IGlvLT5mbGFncyAmCi0JCQkJQ0lTVFBMX0lPX0xJTkVTX01BU0s7Ci0JCQlsaW5rLT5pby5CYXNlUG9ydDEgPSBpby0+d2luWzBdLmJhc2U7Ci0JCQlsaW5rLT5pby5OdW1Qb3J0czEgPSBpby0+d2luWzBdLmxlbjsKLQkJCWlmIChpby0+bndpbiA+IDEpIHsKLQkJCQlsaW5rLT5pby5BdHRyaWJ1dGVzMiA9IGxpbmstPmlvLkF0dHJpYnV0ZXMxOwotCQkJCWxpbmstPmlvLkJhc2VQb3J0MiA9IGlvLT53aW5bMV0uYmFzZTsKLQkJCQlsaW5rLT5pby5OdW1Qb3J0czIgPSBpby0+d2luWzFdLmxlbjsKLQkJCX0KLQkJfQotCi0JCS8qIFRoaXMgcmVzZXJ2ZXMgSU8gc3BhY2UgYnV0IGRvZXNuJ3QgYWN0dWFsbHkgZW5hYmxlIGl0ICovCi0JCUNGR19DSEVDSzIoUmVxdWVzdElPLAotCQkJICAgcGNtY2lhX3JlcXVlc3RfaW8obGluaywgJmxpbmstPmlvKSk7Ci0KLQkJLyogVGhpcyBjb25maWd1cmF0aW9uIHRhYmxlIGVudHJ5IGlzIE9LICovCi0JCWJyZWFrOwotCi0JbmV4dF9lbnRyeToKLQkJQ1NfQ0hFQ0soR2V0TmV4dFR1cGxlLAotCQkJIHBjbWNpYV9nZXRfbmV4dF90dXBsZShsaW5rLCAmdHVwbGUpKTsKKwlsYXN0X3JldCA9IHBjbWNpYV9sb29wX2NvbmZpZyhsaW5rLCBwcmlzbTJfY29uZmlnX2NoZWNrLCBOVUxMKTsKKwlpZiAobGFzdF9yZXQpIHsKKwkJaWYgKCFpZ25vcmVfY2lzX3ZjYykKKwkJCXByaW50ayhLRVJOX0VSUiAiR2V0TmV4dFR1cGxlKCk6IE5vIG1hdGNoaW5nICIKKwkJCSAgICAgICAiQ0lTIGNvbmZpZ3VyYXRpb24uICBNYXliZSB5b3UgbmVlZCB0aGUgIgorCQkJICAgICAgICJpZ25vcmVfY2lzX3ZjYz0xIHBhcmFtZXRlci5cbiIpOworCQljc19lcnJvcihsaW5rLCBSZXF1ZXN0SU8sIGxhc3RfcmV0KTsKKwkJZ290byBmYWlsZWQ7CiAJfQogCiAJLyogTmVlZCB0byBhbGxvY2F0ZSBuZXRfZGV2aWNlIGJlZm9yZSByZXF1ZXN0aW5nIElSUSBoYW5kbGVyICovCkBAIC03MzgsMTQgKzcxMSwxMiBAQAogCQlpZiAocmV0ID09IDAgJiYgbG9jYWwtPmRkZXYpCiAJCQlzdHJjcHkoaHdfcHJpdi0+bm9kZS5kZXZfbmFtZSwgbG9jYWwtPmRkZXYtPm5hbWUpOwogCX0KLQlrZnJlZShwYXJzZSk7CiAJcmV0dXJuIHJldDsKIAogIGNzX2ZhaWxlZDoKIAljc19lcnJvcihsaW5rLCBsYXN0X2ZuLCBsYXN0X3JldCk7CiAKICBmYWlsZWQ6Ci0Ja2ZyZWUocGFyc2UpOwogCWtmcmVlKGh3X3ByaXYpOwogCXByaXNtMl9yZWxlYXNlKCh1X2xvbmcpbGluayk7CiAJcmV0dXJuIHJldDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTUwMDAuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTUwMDAuYwppbmRleCBmNjAwM2U3Li41MTU1YjhhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC01MDAwLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtNTAwMC5jCkBAIC04MzMsMTIgKzgzMywxMiBAQAogCXN3aXRjaCAocHJpdi0+aHdfcmV2ICYgQ1NSX0hXX1JFVl9UWVBFX01TSykgewogCWNhc2UgQ1NSX0hXX1JFVl9UWVBFXzUxMDA6CiAJY2FzZSBDU1JfSFdfUkVWX1RZUEVfNTMwMDoKLQkJLyogNVgwMCB3YW50cyBpbiBDZWxzaXVzICovCisJY2FzZSBDU1JfSFdfUkVWX1RZUEVfNTM1MDoKKwkJLyogNVgwMCBhbmQgNTM1MCB3YW50cyBpbiBDZWxzaXVzICovCiAJCXByaXYtPmh3X3BhcmFtcy5jdF9raWxsX3RocmVzaG9sZCA9IENUX0tJTExfVEhSRVNIT0xEOwogCQlicmVhazsKIAljYXNlIENTUl9IV19SRVZfVFlQRV81MTUwOgotCWNhc2UgQ1NSX0hXX1JFVl9UWVBFXzUzNTA6Ci0JCS8qIDVYNTAgd2FudHMgaW4gS2VsdmluICovCisJCS8qIDUxNTAgd2FudHMgaW4gS2VsdmluICovCiAJCXByaXYtPmh3X3BhcmFtcy5jdF9raWxsX3RocmVzaG9sZCA9CiAJCQkJQ0VMU0lVU19UT19LRUxWSU4oQ1RfS0lMTF9USFJFU0hPTEQpOwogCQlicmVhazsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWFnbi1ycy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtYWduLXJzLmMKaW5kZXggOTM5NDRkZS4uZTJhNThlNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtYWduLXJzLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtYWduLXJzLmMKQEAgLTI0MjIsNyArMjQyMiw3IEBACiAJCQl2b2lkICpwcml2X3N0YSkKIHsKIAlzdHJ1Y3QgaXdsX2xxX3N0YSAqbHFfc3RhID0gcHJpdl9zdGE7Ci0Jc3RydWN0IGl3bF9wcml2ICpwcml2ID0gcHJpdl9yOworCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiBfX21heWJlX3VudXNlZCA9IHByaXZfcjsKIAogCUlXTF9ERUJVR19SQVRFKCJlbnRlclxuIik7CiAJa2ZyZWUobHFfc3RhKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2NtZC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvY21kLmMKaW5kZXggYTkxMmZiNi4uMjk3Njk2ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvY21kLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvY21kLmMKQEAgLTgyMyw3ICs4MjMsOSBAQAogaW50IGxic19zZXRfY2hhbm5lbChzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYsIHU4IGNoYW5uZWwpCiB7CiAJc3RydWN0IGNtZF9kc184MDJfMTFfcmZfY2hhbm5lbCBjbWQ7CisjaWZkZWYgREVCVUcKIAl1OCBvbGRfY2hhbm5lbCA9IHByaXYtPmN1cmJzc3BhcmFtcy5jaGFubmVsOworI2VuZGlmCiAJaW50IHJldCA9IDA7CiAKIAlsYnNfZGViX2VudGVyKExCU19ERUJfQ01EKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2lmX2NzLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9pZl9jcy5jCmluZGV4IGUzNTA1YzEuLjg0MmEwOGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2lmX2NzLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvaWZfY3MuYwpAQCAtNzkxLDcgKzc5MSw3IEBACiAJdHVwbGUuRGVzaXJlZFR1cGxlID0gQ0lTVFBMX0NGVEFCTEVfRU5UUlk7CiAJaWYgKChyZXQgPSBwY21jaWFfZ2V0X2ZpcnN0X3R1cGxlKHBfZGV2LCAmdHVwbGUpKSAhPSAwIHx8CiAJICAgIChyZXQgPSBwY21jaWFfZ2V0X3R1cGxlX2RhdGEocF9kZXYsICZ0dXBsZSkpICE9IDAgfHwKLQkgICAgKHJldCA9IHBjbWNpYV9wYXJzZV90dXBsZShwX2RldiwgJnR1cGxlLCAmcGFyc2UpKSAhPSAwKQorCSAgICAocmV0ID0gcGNtY2lhX3BhcnNlX3R1cGxlKCZ0dXBsZSwgJnBhcnNlKSkgIT0gMCkKIAl7CiAJCWxic19wcl9lcnIoImVycm9yIGluIHBjbWNpYV9nZXRfZmlyc3RfdHVwbGUgZXRjXG4iKTsKIAkJZ290byBvdXQxOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFjODAyMTFfaHdzaW0uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21hYzgwMjExX2h3c2ltLmMKaW5kZXggYzllNGE0My4uMWEwMTllOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFjODAyMTFfaHdzaW0uYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tYWM4MDIxMV9od3NpbS5jCkBAIC01MzMsMTEgKzUzMywxMSBAQAogCQlkYXRhID0gaHctPnByaXY7CiAJCWRhdGEtPmh3ID0gaHc7CiAKLQkJZGF0YS0+ZGV2ID0gZGV2aWNlX2NyZWF0ZV9kcnZkYXRhKGh3c2ltX2NsYXNzLCBOVUxMLCAwLCBodywKLQkJCQkJCSJod3NpbSVkIiwgaSk7CisJCWRhdGEtPmRldiA9IGRldmljZV9jcmVhdGUoaHdzaW1fY2xhc3MsIE5VTEwsIDAsIGh3LAorCQkJCQkgICJod3NpbSVkIiwgaSk7CiAJCWlmIChJU19FUlIoZGF0YS0+ZGV2KSkgewogCQkJcHJpbnRrKEtFUk5fREVCVUcKLQkJCSAgICAgICAibWFjODAyMTFfaHdzaW06IGRldmljZV9jcmVhdGVfZHJ2ZGF0YSAiCisJCQkgICAgICAgIm1hYzgwMjExX2h3c2ltOiBkZXZpY2VfY3JlYXRlICIKIAkJCSAgICAgICAiZmFpbGVkICglbGQpXG4iLCBQVFJfRVJSKGRhdGEtPmRldikpOwogCQkJZXJyID0gLUVOT01FTTsKIAkJCWdvdG8gZmFpbGVkX2RydmRhdGE7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9uZXR3YXZlX2NzLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9uZXR3YXZlX2NzLmMKaW5kZXggMjViYWU3OS4uYTY3MGYzNmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL25ldHdhdmVfY3MuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9uZXR3YXZlX2NzLmMKQEAgLTc0OSw5ICs3NDksMTAgQEAKICAgICBmb3IgKGkgPSBqID0gMHgwOyBqIDwgMHg0MDA7IGogKz0gMHgyMCkgewogCWxpbmstPmlvLkJhc2VQb3J0MSA9IGogXiAweDMwMDsKIAlpID0gcGNtY2lhX3JlcXVlc3RfaW8obGluaywgJmxpbmstPmlvKTsKLQlpZiAoaSA9PSBDU19TVUNDRVNTKSBicmVhazsKKwlpZiAoaSA9PSAwKQorCQlicmVhazsKICAgICB9Ci0gICAgaWYgKGkgIT0gQ1NfU1VDQ0VTUykgeworICAgIGlmIChpICE9IDApIHsKIAljc19lcnJvcihsaW5rLCBSZXF1ZXN0SU8sIGkpOwogCWdvdG8gZmFpbGVkOwogICAgIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY29fY3MuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY29fY3MuYwppbmRleCA5ZWFhMjUyLi42ZmNmMmJkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvX2NzLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jb19jcy5jCkBAIC04MCw3ICs4MCw3IEBACiAJLyogV2UgbmVlZCBhdG9taWMgb3BzIGhlcmUsIGJlY2F1c2Ugd2UncmUgbm90IGhvbGRpbmcgdGhlIGxvY2sgKi8KIAlzZXRfYml0KDAsICZjYXJkLT5oYXJkX3Jlc2V0X2luX3Byb2dyZXNzKTsKIAotCWVyciA9IHBjbWNpYV9yZXNldF9jYXJkKGxpbmssIE5VTEwpOworCWVyciA9IHBjbWNpYV9yZXNldF9jYXJkKGxpbmstPnNvY2tldCk7CiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIApAQCAtMTY1LDYgKzE2NSw3MCBAQAogCQlsYXN0X2ZuID0gKGZuKTsgaWYgKChsYXN0X3JldCA9IChyZXQpKSAhPSAwKSBnb3RvIGNzX2ZhaWxlZDsgXAogCX0gd2hpbGUgKDApCiAKK3N0YXRpYyBpbnQgb3Jpbm9jb19jc19jb25maWdfY2hlY2soc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2LAorCQkJCSAgIGNpc3RwbF9jZnRhYmxlX2VudHJ5X3QgKmNmZywKKwkJCQkgICBjaXN0cGxfY2Z0YWJsZV9lbnRyeV90ICpkZmx0LAorCQkJCSAgIHVuc2lnbmVkIGludCB2Y2MsCisJCQkJICAgdm9pZCAqcHJpdl9kYXRhKQoreworCWlmIChjZmctPmluZGV4ID09IDApCisJCWdvdG8gbmV4dF9lbnRyeTsKKworCS8qIFVzZSBwb3dlciBzZXR0aW5ncyBmb3IgVmNjIGFuZCBWcHAgaWYgcHJlc2VudCAqLworCS8qIE5vdGUgdGhhdCB0aGUgQ0lTIHZhbHVlcyBuZWVkIHRvIGJlIHJlc2NhbGVkICovCisJaWYgKGNmZy0+dmNjLnByZXNlbnQgJiAoMSA8PCBDSVNUUExfUE9XRVJfVk5PTSkpIHsKKwkJaWYgKHZjYyAhPSBjZmctPnZjYy5wYXJhbVtDSVNUUExfUE9XRVJfVk5PTV0gLyAxMDAwMCkgeworCQkJREVCVUcoMiwgInNwZWN0cnVtX2NzX2NvbmZpZzogVmNjIG1pc21hdGNoICh2Y2MgPSAlZCwgQ0lTID0gJWQpXG4iLCAgdmNjLCBjZmctPnZjYy5wYXJhbVtDSVNUUExfUE9XRVJfVk5PTV0gLyAxMDAwMCk7CisJCQlpZiAoIWlnbm9yZV9jaXNfdmNjKQorCQkJCWdvdG8gbmV4dF9lbnRyeTsKKwkJfQorCX0gZWxzZSBpZiAoZGZsdC0+dmNjLnByZXNlbnQgJiAoMSA8PCBDSVNUUExfUE9XRVJfVk5PTSkpIHsKKwkJaWYgKHZjYyAhPSBkZmx0LT52Y2MucGFyYW1bQ0lTVFBMX1BPV0VSX1ZOT01dIC8gMTAwMDApIHsKKwkJCURFQlVHKDIsICJzcGVjdHJ1bV9jc19jb25maWc6IFZjYyBtaXNtYXRjaCAodmNjID0gJWQsIENJUyA9ICVkKVxuIiwgIHZjYywgZGZsdC0+dmNjLnBhcmFtW0NJU1RQTF9QT1dFUl9WTk9NXSAvIDEwMDAwKTsKKwkJCWlmICghaWdub3JlX2Npc192Y2MpCisJCQkJZ290byBuZXh0X2VudHJ5OworCQl9CisJfQorCisJaWYgKGNmZy0+dnBwMS5wcmVzZW50ICYgKDEgPDwgQ0lTVFBMX1BPV0VSX1ZOT00pKQorCQlwX2Rldi0+Y29uZi5WcHAgPQorCQkJY2ZnLT52cHAxLnBhcmFtW0NJU1RQTF9QT1dFUl9WTk9NXSAvIDEwMDAwOworCWVsc2UgaWYgKGRmbHQtPnZwcDEucHJlc2VudCAmICgxIDw8IENJU1RQTF9QT1dFUl9WTk9NKSkKKwkJcF9kZXYtPmNvbmYuVnBwID0KKwkJCWRmbHQtPnZwcDEucGFyYW1bQ0lTVFBMX1BPV0VSX1ZOT01dIC8gMTAwMDA7CisKKwkvKiBEbyB3ZSBuZWVkIHRvIGFsbG9jYXRlIGFuIGludGVycnVwdD8gKi8KKwlwX2Rldi0+Y29uZi5BdHRyaWJ1dGVzIHw9IENPTkZfRU5BQkxFX0lSUTsKKworCS8qIElPIHdpbmRvdyBzZXR0aW5ncyAqLworCXBfZGV2LT5pby5OdW1Qb3J0czEgPSBwX2Rldi0+aW8uTnVtUG9ydHMyID0gMDsKKwlpZiAoKGNmZy0+aW8ubndpbiA+IDApIHx8IChkZmx0LT5pby5ud2luID4gMCkpIHsKKwkJY2lzdHBsX2lvX3QgKmlvID0gKGNmZy0+aW8ubndpbikgPyAmY2ZnLT5pbyA6ICZkZmx0LT5pbzsKKwkJcF9kZXYtPmlvLkF0dHJpYnV0ZXMxID0gSU9fREFUQV9QQVRIX1dJRFRIX0FVVE87CisJCWlmICghKGlvLT5mbGFncyAmIENJU1RQTF9JT184QklUKSkKKwkJCXBfZGV2LT5pby5BdHRyaWJ1dGVzMSA9IElPX0RBVEFfUEFUSF9XSURUSF8xNjsKKwkJaWYgKCEoaW8tPmZsYWdzICYgQ0lTVFBMX0lPXzE2QklUKSkKKwkJCXBfZGV2LT5pby5BdHRyaWJ1dGVzMSA9IElPX0RBVEFfUEFUSF9XSURUSF84OworCQlwX2Rldi0+aW8uSU9BZGRyTGluZXMgPSBpby0+ZmxhZ3MgJiBDSVNUUExfSU9fTElORVNfTUFTSzsKKwkJcF9kZXYtPmlvLkJhc2VQb3J0MSA9IGlvLT53aW5bMF0uYmFzZTsKKwkJcF9kZXYtPmlvLk51bVBvcnRzMSA9IGlvLT53aW5bMF0ubGVuOworCQlpZiAoaW8tPm53aW4gPiAxKSB7CisJCQlwX2Rldi0+aW8uQXR0cmlidXRlczIgPSBwX2Rldi0+aW8uQXR0cmlidXRlczE7CisJCQlwX2Rldi0+aW8uQmFzZVBvcnQyID0gaW8tPndpblsxXS5iYXNlOworCQkJcF9kZXYtPmlvLk51bVBvcnRzMiA9IGlvLT53aW5bMV0ubGVuOworCQl9CisKKwkJLyogVGhpcyByZXNlcnZlcyBJTyBzcGFjZSBidXQgZG9lc24ndCBhY3R1YWxseSBlbmFibGUgaXQgKi8KKwkJaWYgKHBjbWNpYV9yZXF1ZXN0X2lvKHBfZGV2LCAmcF9kZXYtPmlvKSAhPSAwKQorCQkJZ290byBuZXh0X2VudHJ5OworCX0KKwlyZXR1cm4gMDsKKworbmV4dF9lbnRyeToKKwlwY21jaWFfZGlzYWJsZV9kZXZpY2UocF9kZXYpOworCXJldHVybiAtRU5PREVWOworfTsKKwogc3RhdGljIGludAogb3Jpbm9jb19jc19jb25maWcoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCiB7CkBAIC0xNzMsMTYgKzIzNyw4IEBACiAJc3RydWN0IG9yaW5vY29fcGNjYXJkICpjYXJkID0gcHJpdi0+Y2FyZDsKIAloZXJtZXNfdCAqaHcgPSAmcHJpdi0+aHc7CiAJaW50IGxhc3RfZm4sIGxhc3RfcmV0OwotCXVfY2hhciBidWZbNjRdOwotCWNvbmZpZ19pbmZvX3QgY29uZjsKLQl0dXBsZV90IHR1cGxlOwotCWNpc3BhcnNlX3QgcGFyc2U7CiAJdm9pZCBfX2lvbWVtICptZW07CiAKLQkvKiBMb29rIHVwIHRoZSBjdXJyZW50IFZjYyAqLwotCUNTX0NIRUNLKEdldENvbmZpZ3VyYXRpb25JbmZvLAotCQkgcGNtY2lhX2dldF9jb25maWd1cmF0aW9uX2luZm8obGluaywgJmNvbmYpKTsKLQogCS8qCiAJICogSW4gdGhpcyBsb29wLCB3ZSBzY2FuIHRoZSBDSVMgZm9yIGNvbmZpZ3VyYXRpb24gdGFibGUKIAkgKiBlbnRyaWVzLCBlYWNoIG9mIHdoaWNoIGRlc2NyaWJlcyBhIHZhbGlkIGNhcmQKQEAgLTE5Nyw5NCArMjUzLDE0IEBACiAJICogYW5kIG1vc3QgY2xpZW50IGRyaXZlcnMgd2lsbCBvbmx5IHVzZSB0aGUgQ0lTIHRvIGZpbGwgaW4KIAkgKiBpbXBsZW1lbnRhdGlvbi1kZWZpbmVkIGRldGFpbHMuCiAJICovCi0JdHVwbGUuQXR0cmlidXRlcyA9IDA7Ci0JdHVwbGUuVHVwbGVEYXRhID0gYnVmOwotCXR1cGxlLlR1cGxlRGF0YU1heCA9IHNpemVvZihidWYpOwotCXR1cGxlLlR1cGxlT2Zmc2V0ID0gMDsKLQl0dXBsZS5EZXNpcmVkVHVwbGUgPSBDSVNUUExfQ0ZUQUJMRV9FTlRSWTsKLQlDU19DSEVDSyhHZXRGaXJzdFR1cGxlLCBwY21jaWFfZ2V0X2ZpcnN0X3R1cGxlKGxpbmssICZ0dXBsZSkpOwotCXdoaWxlICgxKSB7Ci0JCWNpc3RwbF9jZnRhYmxlX2VudHJ5X3QgKmNmZyA9ICYocGFyc2UuY2Z0YWJsZV9lbnRyeSk7Ci0JCWNpc3RwbF9jZnRhYmxlX2VudHJ5X3QgZGZsdCA9IHsgLmluZGV4ID0gMCB9OwotCi0JCWlmICggKHBjbWNpYV9nZXRfdHVwbGVfZGF0YShsaW5rLCAmdHVwbGUpICE9IDApCi0JCSAgICB8fCAocGNtY2lhX3BhcnNlX3R1cGxlKGxpbmssICZ0dXBsZSwgJnBhcnNlKSAhPSAwKSkKLQkJCWdvdG8gbmV4dF9lbnRyeTsKLQotCQlpZiAoY2ZnLT5mbGFncyAmIENJU1RQTF9DRlRBQkxFX0RFRkFVTFQpCi0JCQlkZmx0ID0gKmNmZzsKLQkJaWYgKGNmZy0+aW5kZXggPT0gMCkKLQkJCWdvdG8gbmV4dF9lbnRyeTsKLQkJbGluay0+Y29uZi5Db25maWdJbmRleCA9IGNmZy0+aW5kZXg7Ci0KLQkJLyogVXNlIHBvd2VyIHNldHRpbmdzIGZvciBWY2MgYW5kIFZwcCBpZiBwcmVzZW50ICovCi0JCS8qIE5vdGUgdGhhdCB0aGUgQ0lTIHZhbHVlcyBuZWVkIHRvIGJlIHJlc2NhbGVkICovCi0JCWlmIChjZmctPnZjYy5wcmVzZW50ICYgKDEgPDwgQ0lTVFBMX1BPV0VSX1ZOT00pKSB7Ci0JCQlpZiAoY29uZi5WY2MgIT0gY2ZnLT52Y2MucGFyYW1bQ0lTVFBMX1BPV0VSX1ZOT01dIC8gMTAwMDApIHsKLQkJCQlERUJVRygyLCAib3Jpbm9jb19jc19jb25maWc6IFZjYyBtaXNtYXRjaCAoY29uZi5WY2MgPSAlZCwgY2ZnIENJUyA9ICVkKVxuIiwgIGNvbmYuVmNjLCBjZmctPnZjYy5wYXJhbVtDSVNUUExfUE9XRVJfVk5PTV0gLyAxMDAwMCk7Ci0JCQkJaWYgKCFpZ25vcmVfY2lzX3ZjYykKLQkJCQkJZ290byBuZXh0X2VudHJ5OwotCQkJfQotCQl9IGVsc2UgaWYgKGRmbHQudmNjLnByZXNlbnQgJiAoMSA8PCBDSVNUUExfUE9XRVJfVk5PTSkpIHsKLQkJCWlmIChjb25mLlZjYyAhPSBkZmx0LnZjYy5wYXJhbVtDSVNUUExfUE9XRVJfVk5PTV0gLyAxMDAwMCkgewotCQkJCURFQlVHKDIsICJvcmlub2NvX2NzX2NvbmZpZzogVmNjIG1pc21hdGNoIChjb25mLlZjYyA9ICVkLCBkZmx0IENJUyA9ICVkKVxuIiwgIGNvbmYuVmNjLCBkZmx0LnZjYy5wYXJhbVtDSVNUUExfUE9XRVJfVk5PTV0gLyAxMDAwMCk7Ci0JCQkJaWYoIWlnbm9yZV9jaXNfdmNjKQotCQkJCQlnb3RvIG5leHRfZW50cnk7Ci0JCQl9Ci0JCX0KLQotCQlpZiAoY2ZnLT52cHAxLnByZXNlbnQgJiAoMSA8PCBDSVNUUExfUE9XRVJfVk5PTSkpCi0JCQlsaW5rLT5jb25mLlZwcCA9Ci0JCQkgICAgY2ZnLT52cHAxLnBhcmFtW0NJU1RQTF9QT1dFUl9WTk9NXSAvIDEwMDAwOwotCQllbHNlIGlmIChkZmx0LnZwcDEucHJlc2VudCAmICgxIDw8IENJU1RQTF9QT1dFUl9WTk9NKSkKLQkJCWxpbmstPmNvbmYuVnBwID0KLQkJCSAgICBkZmx0LnZwcDEucGFyYW1bQ0lTVFBMX1BPV0VSX1ZOT01dIC8gMTAwMDA7Ci0JCQotCQkvKiBEbyB3ZSBuZWVkIHRvIGFsbG9jYXRlIGFuIGludGVycnVwdD8gKi8KLQkJbGluay0+Y29uZi5BdHRyaWJ1dGVzIHw9IENPTkZfRU5BQkxFX0lSUTsKLQotCQkvKiBJTyB3aW5kb3cgc2V0dGluZ3MgKi8KLQkJbGluay0+aW8uTnVtUG9ydHMxID0gbGluay0+aW8uTnVtUG9ydHMyID0gMDsKLQkJaWYgKChjZmctPmlvLm53aW4gPiAwKSB8fCAoZGZsdC5pby5ud2luID4gMCkpIHsKLQkJCWNpc3RwbF9pb190ICppbyA9Ci0JCQkgICAgKGNmZy0+aW8ubndpbikgPyAmY2ZnLT5pbyA6ICZkZmx0LmlvOwotCQkJbGluay0+aW8uQXR0cmlidXRlczEgPSBJT19EQVRBX1BBVEhfV0lEVEhfQVVUTzsKLQkJCWlmICghKGlvLT5mbGFncyAmIENJU1RQTF9JT184QklUKSkKLQkJCQlsaW5rLT5pby5BdHRyaWJ1dGVzMSA9Ci0JCQkJICAgIElPX0RBVEFfUEFUSF9XSURUSF8xNjsKLQkJCWlmICghKGlvLT5mbGFncyAmIENJU1RQTF9JT18xNkJJVCkpCi0JCQkJbGluay0+aW8uQXR0cmlidXRlczEgPQotCQkJCSAgICBJT19EQVRBX1BBVEhfV0lEVEhfODsKLQkJCWxpbmstPmlvLklPQWRkckxpbmVzID0KLQkJCSAgICBpby0+ZmxhZ3MgJiBDSVNUUExfSU9fTElORVNfTUFTSzsKLQkJCWxpbmstPmlvLkJhc2VQb3J0MSA9IGlvLT53aW5bMF0uYmFzZTsKLQkJCWxpbmstPmlvLk51bVBvcnRzMSA9IGlvLT53aW5bMF0ubGVuOwotCQkJaWYgKGlvLT5ud2luID4gMSkgewotCQkJCWxpbmstPmlvLkF0dHJpYnV0ZXMyID0KLQkJCQkgICAgbGluay0+aW8uQXR0cmlidXRlczE7Ci0JCQkJbGluay0+aW8uQmFzZVBvcnQyID0gaW8tPndpblsxXS5iYXNlOwotCQkJCWxpbmstPmlvLk51bVBvcnRzMiA9IGlvLT53aW5bMV0ubGVuOwotCQkJfQotCi0JCQkvKiBUaGlzIHJlc2VydmVzIElPIHNwYWNlIGJ1dCBkb2Vzbid0IGFjdHVhbGx5IGVuYWJsZSBpdCAqLwotCQkJaWYgKHBjbWNpYV9yZXF1ZXN0X2lvKGxpbmssICZsaW5rLT5pbykgIT0gMCkKLQkJCQlnb3RvIG5leHRfZW50cnk7Ci0JCX0KLQotCi0JCS8qIElmIHdlIGdvdCB0aGlzIGZhciwgd2UncmUgY29vbCEgKi8KLQotCQlicmVhazsKLQkJCi0JbmV4dF9lbnRyeToKLQkJcGNtY2lhX2Rpc2FibGVfZGV2aWNlKGxpbmspOwotCQlsYXN0X3JldCA9IHBjbWNpYV9nZXRfbmV4dF90dXBsZShsaW5rLCAmdHVwbGUpOwotCQlpZiAobGFzdF9yZXQgID09IENTX05PX01PUkVfSVRFTVMpIHsKKwlsYXN0X3JldCA9IHBjbWNpYV9sb29wX2NvbmZpZyhsaW5rLCBvcmlub2NvX2NzX2NvbmZpZ19jaGVjaywgTlVMTCk7CisJaWYgKGxhc3RfcmV0KSB7CisJCWlmICghaWdub3JlX2Npc192Y2MpCiAJCQlwcmludGsoS0VSTl9FUlIgUEZYICJHZXROZXh0VHVwbGUoKTogTm8gbWF0Y2hpbmcgIgogCQkJICAgICAgICJDSVMgY29uZmlndXJhdGlvbi4gIE1heWJlIHlvdSBuZWVkIHRoZSAiCiAJCQkgICAgICAgImlnbm9yZV9jaXNfdmNjPTEgcGFyYW1ldGVyLlxuIik7Ci0JCQlnb3RvIGNzX2ZhaWxlZDsKLQkJfQorCQljc19lcnJvcihsaW5rLCBSZXF1ZXN0SU8sIGxhc3RfcmV0KTsKKwkJZ290byBmYWlsZWQ7CiAJfQogCiAJLyoKQEAgLTMzNSw3ICszMTEsNiBAQAogCSAgICAgICAiMHglMDR4LTB4JTA0eFxuIiwgZGV2LT5uYW1lLCBkZXYtPmRldi5wYXJlbnQtPmJ1c19pZCwKIAkgICAgICAgbGluay0+aXJxLkFzc2lnbmVkSVJRLCBsaW5rLT5pby5CYXNlUG9ydDEsCiAJICAgICAgIGxpbmstPmlvLkJhc2VQb3J0MSArIGxpbmstPmlvLk51bVBvcnRzMSAtIDEpOwotCiAJcmV0dXJuIDA7CiAKICBjc19mYWlsZWQ6CkBAIC00MDMsNiArMzc4LDcgQEAKIAlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlzdHJ1Y3Qgb3Jpbm9jb19wY2NhcmQgKmNhcmQgPSBwcml2LT5jYXJkOwogCWludCBlcnIgPSAwOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlpZiAoISB0ZXN0X2JpdCgwLCAmY2FyZC0+aGFyZF9yZXNldF9pbl9wcm9ncmVzcykpIHsKIAkJZXJyID0gb3Jpbm9jb19yZWluaXRfZmlybXdhcmUoZGV2KTsKQEAgLTQxMiw3ICszODgsNyBAQAogCQkJcmV0dXJuIC1FSU87CiAJCX0KIAotCQlzcGluX2xvY2soJnByaXYtPmxvY2spOworCQlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwogCiAJCW5ldGlmX2RldmljZV9hdHRhY2goZGV2KTsKIAkJcHJpdi0+aHdfdW5hdmFpbGFibGUtLTsKQEAgLTQyNCw3ICs0MDAsNyBAQAogCQkJCSAgICAgICBkZXYtPm5hbWUsIGVycik7CiAJCX0KIAotCQlzcGluX3VubG9jaygmcHJpdi0+bG9jayk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKIAl9CiAKIAlyZXR1cm4gZXJyOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcDU0L3A1NGNvbW1vbi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcDU0L3A1NGNvbW1vbi5jCmluZGV4IDE5OTRhYTEuLjExN2M3ZDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3A1NC9wNTRjb21tb24uYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9wNTQvcDU0Y29tbW9uLmMKQEAgLTQ3OSw3ICs0NzksNiBAQAogCXByaW50ayhLRVJOX0VSUiAicDU0OiBlZXByb20gcGFyc2UgZmFpbGVkIVxuIik7CiAJcmV0dXJuIGVycjsKIH0KLUVYUE9SVF9TWU1CT0xfR1BMKHA1NF9wYXJzZV9lZXByb20pOwogCiBzdGF0aWMgaW50IHA1NF9yc3NpX3RvX2RibShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsIGludCByc3NpKQogewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcDU0L3A1NHVzYi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcDU0L3A1NHVzYi5jCmluZGV4IDE5MTJmNWUuLjc1ZDc0OWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3A1NC9wNTR1c2IuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9wNTQvcDU0dXNiLmMKQEAgLTM5LDYgKzM5LDcgQEAKIAl7VVNCX0RFVklDRSgweDA4NDYsIDB4NDIwMCl9LAkvKiBOZXRnZWFyIFdHMTIxICovCiAJe1VTQl9ERVZJQ0UoMHgwODQ2LCAweDQyMTApfSwJLyogTmV0Z2VhciBXRzEyMSB0aGUgc2Vjb25kID8gKi8KIAl7VVNCX0RFVklDRSgweDA4NDYsIDB4NDIyMCl9LAkvKiBOZXRnZWFyIFdHMTExICovCisJe1VTQl9ERVZJQ0UoMHgwOWFhLCAweDEwMDApfSwJLyogU3Bpbm5ha2VyIFByb3RvIGJvYXJkICovCiAJe1VTQl9ERVZJQ0UoMHgwY2RlLCAweDAwMDYpfSwJLyogTWVkaW9uIDQwOTAwLCBSb3BlciBFdXJvcGUgKi8KIAl7VVNCX0RFVklDRSgweDEyNGEsIDB4NDAyMyl9LAkvKiBTaHV0dGxlIFBOMTUsIEFpcnZhc3QgV00xNjhnLCBJT0dlYXIgR1dVNTEzICovCiAJe1VTQl9ERVZJQ0UoMHgxOTE1LCAweDIyMzQpfSwJLyogTGlua3N5cyBXVVNCNTRHIE9FTSAqLwpAQCAtNjMsOCArNjQsOCBAQAogCXtVU0JfREVWSUNFKDB4MGNkZSwgMHgwMDA2KX0sICAgLyogTWVkaW9uIE1ENDA5MDAgKi8KIAl7VVNCX0RFVklDRSgweDBjZGUsIDB4MDAwOCl9LAkvKiBTYWdlbSBYRzcwM0EgKi8KIAl7VVNCX0RFVklDRSgweDBkOGUsIDB4Mzc2Mil9LAkvKiBETGluayBEV0wtRzEyMCBDb2hpYmEgKi8KLQl7VVNCX0RFVklDRSgweDA5YWEsIDB4MTAwMCl9LAkvKiBTcGlubmFrZXIgUHJvdG8gYm9hcmQgKi8KIAl7VVNCX0RFVklDRSgweDEyNGEsIDB4NDAyNSl9LAkvKiBJT0dlYXIgR1dVNTEzIChHVzM4ODdJSyBjaGlwKSAqLworCXtVU0JfREVWSUNFKDB4MTI2MCwgMHhlZTIyKX0sCS8qIFNNQyAyODYyVy1HIHZlcnNpb24gMiAqLwogCXtVU0JfREVWSUNFKDB4MTNiMSwgMHgwMDBhKX0sCS8qIExpbmtzeXMgV1VTQjU0RyB2ZXIgMiAqLwogCXtVU0JfREVWSUNFKDB4MTNCMSwgMHgwMDBDKX0sCS8qIExpbmtzeXMgV1VTQjU0QUcgKi8KIAl7VVNCX0RFVklDRSgweDE0MzUsIDB4MDQyNyl9LAkvKiBJbnZlbnRlbCBVUjA1NEcgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JheV9jcy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmF5X2NzLmMKaW5kZXggNDRkYTBkMS4uMTQwNGE1NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmF5X2NzLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmF5X2NzLmMKQEAgLTc5OCw5ICs3OTgsOSBAQAogICAgIGlvdW5tYXAobG9jYWwtPmFtZW0pOwogICAgIC8qIERvIGJvdGhlciBjaGVja2luZyB0byBzZWUgaWYgdGhlc2Ugc3VjY2VlZCBvciBub3QgKi8KICAgICBpID0gcGNtY2lhX3JlbGVhc2Vfd2luZG93KGxvY2FsLT5hbWVtX2hhbmRsZSk7Ci0gICAgaWYgKCBpICE9IENTX1NVQ0NFU1MgKSBERUJVRygwLCJSZWxlYXNlV2luZG93KGxvY2FsLT5hbWVtKSByZXQgPSAleFxuIixpKTsKKyAgICBpZiAoIGkgIT0gMCApIERFQlVHKDAsIlJlbGVhc2VXaW5kb3cobG9jYWwtPmFtZW0pIHJldCA9ICV4XG4iLGkpOwogICAgIGkgPSBwY21jaWFfcmVsZWFzZV93aW5kb3cobG9jYWwtPnJtZW1faGFuZGxlKTsKLSAgICBpZiAoIGkgIT0gQ1NfU1VDQ0VTUyApIERFQlVHKDAsIlJlbGVhc2VXaW5kb3cobG9jYWwtPnJtZW0pIHJldCA9ICV4XG4iLGkpOworICAgIGlmICggaSAhPSAwICkgREVCVUcoMCwiUmVsZWFzZVdpbmRvdyhsb2NhbC0+cm1lbSkgcmV0ID0gJXhcbiIsaSk7CiAgICAgcGNtY2lhX2Rpc2FibGVfZGV2aWNlKGxpbmspOwogCiAgICAgREVCVUcoMiwicmF5X3JlbGVhc2UgZW5kaW5nXG4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBxdWV1ZS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMHF1ZXVlLmMKaW5kZXggMTY3NmFjNC4uNDUxZDQxMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMHF1ZXVlLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMHF1ZXVlLmMKQEAgLTM3NCw3ICszNzQsNyBAQAogCXN0cnVjdCBxdWV1ZV9lbnRyeSAqZW50cnkgPSBydDJ4MDBxdWV1ZV9nZXRfZW50cnkocXVldWUsIFFfSU5ERVgpOwogCXN0cnVjdCB0eGVudHJ5X2Rlc2MgdHhkZXNjOwogCXN0cnVjdCBza2JfZnJhbWVfZGVzYyAqc2tiZGVzYzsKLQl1bnNpZ25lZCBpbnQgaXZfbGVuOworCXVuc2lnbmVkIGludCBpdl9sZW4gPSAwOwogCiAJaWYgKHVubGlrZWx5KHJ0MngwMHF1ZXVlX2Z1bGwocXVldWUpKSkKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC0zOTUsNiArMzk1LDkgQEAKIAllbnRyeS0+c2tiID0gc2tiOwogCXJ0MngwMHF1ZXVlX2NyZWF0ZV90eF9kZXNjcmlwdG9yKGVudHJ5LCAmdHhkZXNjKTsKIAorCWlmIChJRUVFODAyMTFfU0tCX0NCKHNrYiktPmNvbnRyb2wuaHdfa2V5ICE9IE5VTEwpCisJCWl2X2xlbiA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKS0+Y29udHJvbC5od19rZXktPml2X2xlbjsKKwogCS8qCiAJICogQWxsIGluZm9ybWF0aW9uIGlzIHJldHJlaXZlZCBmcm9tIHRoZSBza2ItPmNiIGFycmF5LAogCSAqIG5vdyB3ZSBzaG91bGQgY2xhaW0gb3duZXJzaGlwIG9mIHRoZSBkcml2ZXIgcGFydCBvZiB0aGF0CkBAIC00MTAsOSArNDEzLDcgQEAKIAkgKiB0aGUgZnJhbWUgc28gd2UgY2FuIHByb3ZpZGUgaXQgdG8gdGhlIGRyaXZlciBzZXBlcmF0ZWx5LgogCSAqLwogCWlmICh0ZXN0X2JpdChFTlRSWV9UWERfRU5DUllQVCwgJnR4ZGVzYy5mbGFncykgJiYKLQkgICAgIXRlc3RfYml0KEVOVFJZX1RYRF9FTkNSWVBUX0lWLCAmdHhkZXNjLmZsYWdzKSAmJgotCQkoSUVFRTgwMjExX1NLQl9DQihza2IpLT5jb250cm9sLmh3X2tleSAhPSBOVUxMKSkgewotCQlpdl9sZW4gPSBJRUVFODAyMTFfU0tCX0NCKHNrYiktPmNvbnRyb2wuaHdfa2V5LT5pdl9sZW47CisJICAgICF0ZXN0X2JpdChFTlRSWV9UWERfRU5DUllQVF9JViwgJnR4ZGVzYy5mbGFncykpIHsKIAkJcnQyeDAwY3J5cHRvX3R4X3JlbW92ZV9pdihza2IsIGl2X2xlbik7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGw4MTg3X2Rldi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsODE4N19kZXYuYwppbmRleCBlOTkwMjYxLi40MzFlM2M3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGw4MTg3X2Rldi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bDgxODdfZGV2LmMKQEAgLTMzLDEwICszMywxMyBAQAogc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIHJ0bDgxODdfdGFibGVbXSBfX2RldmluaXRkYXRhID0gewogCS8qIEFzdXMgKi8KIAl7VVNCX0RFVklDRSgweDBiMDUsIDB4MTcxZCksIC5kcml2ZXJfaW5mbyA9IERFVklDRV9SVEw4MTg3fSwKKwkvKiBCZWxraW4gKi8KKwl7VVNCX0RFVklDRSgweDA1MGQsIDB4NzA1ZSksIC5kcml2ZXJfaW5mbyA9IERFVklDRV9SVEw4MTg3Qn0sCiAJLyogUmVhbHRlayAqLwogCXtVU0JfREVWSUNFKDB4MGJkYSwgMHg4MTg3KSwgLmRyaXZlcl9pbmZvID0gREVWSUNFX1JUTDgxODd9LAogCXtVU0JfREVWSUNFKDB4MGJkYSwgMHg4MTg5KSwgLmRyaXZlcl9pbmZvID0gREVWSUNFX1JUTDgxODdCfSwKIAl7VVNCX0RFVklDRSgweDBiZGEsIDB4ODE5NyksIC5kcml2ZXJfaW5mbyA9IERFVklDRV9SVEw4MTg3Qn0sCisJe1VTQl9ERVZJQ0UoMHgwYmRhLCAweDgxOTgpLCAuZHJpdmVyX2luZm8gPSBERVZJQ0VfUlRMODE4N0J9LAogCS8qIE5ldGdlYXIgKi8KIAl7VVNCX0RFVklDRSgweDA4NDYsIDB4NjEwMCksIC5kcml2ZXJfaW5mbyA9IERFVklDRV9SVEw4MTg3fSwKIAl7VVNCX0RFVklDRSgweDA4NDYsIDB4NmEwMCksIC5kcml2ZXJfaW5mbyA9IERFVklDRV9SVEw4MTg3fSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3NwZWN0cnVtX2NzLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9zcGVjdHJ1bV9jcy5jCmluZGV4IDY3YjI2ZDMuLjg1Mjc4OWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3NwZWN0cnVtX2NzLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvc3BlY3RydW1fY3MuYwpAQCAtMjM1LDYgKzIzNSw3MCBAQAogICogZGV2aWNlIGF2YWlsYWJsZSB0byB0aGUgc3lzdGVtLgogICovCiAKK3N0YXRpYyBpbnQgc3BlY3RydW1fY3NfY29uZmlnX2NoZWNrKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldiwKKwkJCQkgICAgY2lzdHBsX2NmdGFibGVfZW50cnlfdCAqY2ZnLAorCQkJCSAgICBjaXN0cGxfY2Z0YWJsZV9lbnRyeV90ICpkZmx0LAorCQkJCSAgICB1bnNpZ25lZCBpbnQgdmNjLAorCQkJCSAgICB2b2lkICpwcml2X2RhdGEpCit7CisJaWYgKGNmZy0+aW5kZXggPT0gMCkKKwkJZ290byBuZXh0X2VudHJ5OworCisJLyogVXNlIHBvd2VyIHNldHRpbmdzIGZvciBWY2MgYW5kIFZwcCBpZiBwcmVzZW50ICovCisJLyogTm90ZSB0aGF0IHRoZSBDSVMgdmFsdWVzIG5lZWQgdG8gYmUgcmVzY2FsZWQgKi8KKwlpZiAoY2ZnLT52Y2MucHJlc2VudCAmICgxIDw8IENJU1RQTF9QT1dFUl9WTk9NKSkgeworCQlpZiAodmNjICE9IGNmZy0+dmNjLnBhcmFtW0NJU1RQTF9QT1dFUl9WTk9NXSAvIDEwMDAwKSB7CisJCQlERUJVRygyLCAic3BlY3RydW1fY3NfY29uZmlnOiBWY2MgbWlzbWF0Y2ggKHZjYyA9ICVkLCBDSVMgPSAlZClcbiIsICB2Y2MsIGNmZy0+dmNjLnBhcmFtW0NJU1RQTF9QT1dFUl9WTk9NXSAvIDEwMDAwKTsKKwkJCWlmICghaWdub3JlX2Npc192Y2MpCisJCQkJZ290byBuZXh0X2VudHJ5OworCQl9CisJfSBlbHNlIGlmIChkZmx0LT52Y2MucHJlc2VudCAmICgxIDw8IENJU1RQTF9QT1dFUl9WTk9NKSkgeworCQlpZiAodmNjICE9IGRmbHQtPnZjYy5wYXJhbVtDSVNUUExfUE9XRVJfVk5PTV0gLyAxMDAwMCkgeworCQkJREVCVUcoMiwgInNwZWN0cnVtX2NzX2NvbmZpZzogVmNjIG1pc21hdGNoICh2Y2MgPSAlZCwgQ0lTID0gJWQpXG4iLCAgdmNjLCBkZmx0LT52Y2MucGFyYW1bQ0lTVFBMX1BPV0VSX1ZOT01dIC8gMTAwMDApOworCQkJaWYgKCFpZ25vcmVfY2lzX3ZjYykKKwkJCQlnb3RvIG5leHRfZW50cnk7CisJCX0KKwl9CisKKwlpZiAoY2ZnLT52cHAxLnByZXNlbnQgJiAoMSA8PCBDSVNUUExfUE9XRVJfVk5PTSkpCisJCXBfZGV2LT5jb25mLlZwcCA9CisJCQljZmctPnZwcDEucGFyYW1bQ0lTVFBMX1BPV0VSX1ZOT01dIC8gMTAwMDA7CisJZWxzZSBpZiAoZGZsdC0+dnBwMS5wcmVzZW50ICYgKDEgPDwgQ0lTVFBMX1BPV0VSX1ZOT00pKQorCQlwX2Rldi0+Y29uZi5WcHAgPQorCQkJZGZsdC0+dnBwMS5wYXJhbVtDSVNUUExfUE9XRVJfVk5PTV0gLyAxMDAwMDsKKworCS8qIERvIHdlIG5lZWQgdG8gYWxsb2NhdGUgYW4gaW50ZXJydXB0PyAqLworCXBfZGV2LT5jb25mLkF0dHJpYnV0ZXMgfD0gQ09ORl9FTkFCTEVfSVJROworCisJLyogSU8gd2luZG93IHNldHRpbmdzICovCisJcF9kZXYtPmlvLk51bVBvcnRzMSA9IHBfZGV2LT5pby5OdW1Qb3J0czIgPSAwOworCWlmICgoY2ZnLT5pby5ud2luID4gMCkgfHwgKGRmbHQtPmlvLm53aW4gPiAwKSkgeworCQljaXN0cGxfaW9fdCAqaW8gPSAoY2ZnLT5pby5ud2luKSA/ICZjZmctPmlvIDogJmRmbHQtPmlvOworCQlwX2Rldi0+aW8uQXR0cmlidXRlczEgPSBJT19EQVRBX1BBVEhfV0lEVEhfQVVUTzsKKwkJaWYgKCEoaW8tPmZsYWdzICYgQ0lTVFBMX0lPXzhCSVQpKQorCQkJcF9kZXYtPmlvLkF0dHJpYnV0ZXMxID0gSU9fREFUQV9QQVRIX1dJRFRIXzE2OworCQlpZiAoIShpby0+ZmxhZ3MgJiBDSVNUUExfSU9fMTZCSVQpKQorCQkJcF9kZXYtPmlvLkF0dHJpYnV0ZXMxID0gSU9fREFUQV9QQVRIX1dJRFRIXzg7CisJCXBfZGV2LT5pby5JT0FkZHJMaW5lcyA9IGlvLT5mbGFncyAmIENJU1RQTF9JT19MSU5FU19NQVNLOworCQlwX2Rldi0+aW8uQmFzZVBvcnQxID0gaW8tPndpblswXS5iYXNlOworCQlwX2Rldi0+aW8uTnVtUG9ydHMxID0gaW8tPndpblswXS5sZW47CisJCWlmIChpby0+bndpbiA+IDEpIHsKKwkJCXBfZGV2LT5pby5BdHRyaWJ1dGVzMiA9IHBfZGV2LT5pby5BdHRyaWJ1dGVzMTsKKwkJCXBfZGV2LT5pby5CYXNlUG9ydDIgPSBpby0+d2luWzFdLmJhc2U7CisJCQlwX2Rldi0+aW8uTnVtUG9ydHMyID0gaW8tPndpblsxXS5sZW47CisJCX0KKworCQkvKiBUaGlzIHJlc2VydmVzIElPIHNwYWNlIGJ1dCBkb2Vzbid0IGFjdHVhbGx5IGVuYWJsZSBpdCAqLworCQlpZiAocGNtY2lhX3JlcXVlc3RfaW8ocF9kZXYsICZwX2Rldi0+aW8pICE9IDApCisJCQlnb3RvIG5leHRfZW50cnk7CisJfQorCXJldHVybiAwOworCituZXh0X2VudHJ5OgorCXBjbWNpYV9kaXNhYmxlX2RldmljZShwX2Rldik7CisJcmV0dXJuIC1FTk9ERVY7Cit9OworCiBzdGF0aWMgaW50CiBzcGVjdHJ1bV9jc19jb25maWcoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCiB7CkBAIC0yNDMsMTYgKzMwNyw4IEBACiAJc3RydWN0IG9yaW5vY29fcGNjYXJkICpjYXJkID0gcHJpdi0+Y2FyZDsKIAloZXJtZXNfdCAqaHcgPSAmcHJpdi0+aHc7CiAJaW50IGxhc3RfZm4sIGxhc3RfcmV0OwotCXVfY2hhciBidWZbNjRdOwotCWNvbmZpZ19pbmZvX3QgY29uZjsKLQl0dXBsZV90IHR1cGxlOwotCWNpc3BhcnNlX3QgcGFyc2U7CiAJdm9pZCBfX2lvbWVtICptZW07CiAKLQkvKiBMb29rIHVwIHRoZSBjdXJyZW50IFZjYyAqLwotCUNTX0NIRUNLKEdldENvbmZpZ3VyYXRpb25JbmZvLAotCQkgcGNtY2lhX2dldF9jb25maWd1cmF0aW9uX2luZm8obGluaywgJmNvbmYpKTsKLQogCS8qCiAJICogSW4gdGhpcyBsb29wLCB3ZSBzY2FuIHRoZSBDSVMgZm9yIGNvbmZpZ3VyYXRpb24gdGFibGUKIAkgKiBlbnRyaWVzLCBlYWNoIG9mIHdoaWNoIGRlc2NyaWJlcyBhIHZhbGlkIGNhcmQKQEAgLTI2Nyw5NCArMzIzLDE0IEBACiAJICogYW5kIG1vc3QgY2xpZW50IGRyaXZlcnMgd2lsbCBvbmx5IHVzZSB0aGUgQ0lTIHRvIGZpbGwgaW4KIAkgKiBpbXBsZW1lbnRhdGlvbi1kZWZpbmVkIGRldGFpbHMuCiAJICovCi0JdHVwbGUuRGVzaXJlZFR1cGxlID0gQ0lTVFBMX0NGVEFCTEVfRU5UUlk7Ci0JdHVwbGUuQXR0cmlidXRlcyA9IDA7Ci0JdHVwbGUuVHVwbGVEYXRhID0gYnVmOwotCXR1cGxlLlR1cGxlRGF0YU1heCA9IHNpemVvZihidWYpOwotCXR1cGxlLlR1cGxlT2Zmc2V0ID0gMDsKLQlDU19DSEVDSyhHZXRGaXJzdFR1cGxlLCBwY21jaWFfZ2V0X2ZpcnN0X3R1cGxlKGxpbmssICZ0dXBsZSkpOwotCXdoaWxlICgxKSB7Ci0JCWNpc3RwbF9jZnRhYmxlX2VudHJ5X3QgKmNmZyA9ICYocGFyc2UuY2Z0YWJsZV9lbnRyeSk7Ci0JCWNpc3RwbF9jZnRhYmxlX2VudHJ5X3QgZGZsdCA9IHsgLmluZGV4ID0gMCB9OwotCi0JCWlmICggKHBjbWNpYV9nZXRfdHVwbGVfZGF0YShsaW5rLCAmdHVwbGUpICE9IDApCi0JCSAgICB8fCAocGNtY2lhX3BhcnNlX3R1cGxlKGxpbmssICZ0dXBsZSwgJnBhcnNlKSAhPSAwKSkKLQkJCWdvdG8gbmV4dF9lbnRyeTsKLQotCQlpZiAoY2ZnLT5mbGFncyAmIENJU1RQTF9DRlRBQkxFX0RFRkFVTFQpCi0JCQlkZmx0ID0gKmNmZzsKLQkJaWYgKGNmZy0+aW5kZXggPT0gMCkKLQkJCWdvdG8gbmV4dF9lbnRyeTsKLQkJbGluay0+Y29uZi5Db25maWdJbmRleCA9IGNmZy0+aW5kZXg7Ci0KLQkJLyogVXNlIHBvd2VyIHNldHRpbmdzIGZvciBWY2MgYW5kIFZwcCBpZiBwcmVzZW50ICovCi0JCS8qIE5vdGUgdGhhdCB0aGUgQ0lTIHZhbHVlcyBuZWVkIHRvIGJlIHJlc2NhbGVkICovCi0JCWlmIChjZmctPnZjYy5wcmVzZW50ICYgKDEgPDwgQ0lTVFBMX1BPV0VSX1ZOT00pKSB7Ci0JCQlpZiAoY29uZi5WY2MgIT0gY2ZnLT52Y2MucGFyYW1bQ0lTVFBMX1BPV0VSX1ZOT01dIC8gMTAwMDApIHsKLQkJCQlERUJVRygyLCAic3BlY3RydW1fY3NfY29uZmlnOiBWY2MgbWlzbWF0Y2ggKGNvbmYuVmNjID0gJWQsIENJUyA9ICVkKVxuIiwgIGNvbmYuVmNjLCBjZmctPnZjYy5wYXJhbVtDSVNUUExfUE9XRVJfVk5PTV0gLyAxMDAwMCk7Ci0JCQkJaWYgKCFpZ25vcmVfY2lzX3ZjYykKLQkJCQkJZ290byBuZXh0X2VudHJ5OwotCQkJfQotCQl9IGVsc2UgaWYgKGRmbHQudmNjLnByZXNlbnQgJiAoMSA8PCBDSVNUUExfUE9XRVJfVk5PTSkpIHsKLQkJCWlmIChjb25mLlZjYyAhPSBkZmx0LnZjYy5wYXJhbVtDSVNUUExfUE9XRVJfVk5PTV0gLyAxMDAwMCkgewotCQkJCURFQlVHKDIsICJzcGVjdHJ1bV9jc19jb25maWc6IFZjYyBtaXNtYXRjaCAoY29uZi5WY2MgPSAlZCwgQ0lTID0gJWQpXG4iLCAgY29uZi5WY2MsIGRmbHQudmNjLnBhcmFtW0NJU1RQTF9QT1dFUl9WTk9NXSAvIDEwMDAwKTsKLQkJCQlpZighaWdub3JlX2Npc192Y2MpCi0JCQkJCWdvdG8gbmV4dF9lbnRyeTsKLQkJCX0KLQkJfQotCi0JCWlmIChjZmctPnZwcDEucHJlc2VudCAmICgxIDw8IENJU1RQTF9QT1dFUl9WTk9NKSkKLQkJCWxpbmstPmNvbmYuVnBwID0KLQkJCSAgICBjZmctPnZwcDEucGFyYW1bQ0lTVFBMX1BPV0VSX1ZOT01dIC8gMTAwMDA7Ci0JCWVsc2UgaWYgKGRmbHQudnBwMS5wcmVzZW50ICYgKDEgPDwgQ0lTVFBMX1BPV0VSX1ZOT00pKQotCQkJbGluay0+Y29uZi5WcHAgPQotCQkJICAgIGRmbHQudnBwMS5wYXJhbVtDSVNUUExfUE9XRVJfVk5PTV0gLyAxMDAwMDsKLQkJCi0JCS8qIERvIHdlIG5lZWQgdG8gYWxsb2NhdGUgYW4gaW50ZXJydXB0PyAqLwotCQlsaW5rLT5jb25mLkF0dHJpYnV0ZXMgfD0gQ09ORl9FTkFCTEVfSVJROwotCi0JCS8qIElPIHdpbmRvdyBzZXR0aW5ncyAqLwotCQlsaW5rLT5pby5OdW1Qb3J0czEgPSBsaW5rLT5pby5OdW1Qb3J0czIgPSAwOwotCQlpZiAoKGNmZy0+aW8ubndpbiA+IDApIHx8IChkZmx0LmlvLm53aW4gPiAwKSkgewotCQkJY2lzdHBsX2lvX3QgKmlvID0KLQkJCSAgICAoY2ZnLT5pby5ud2luKSA/ICZjZmctPmlvIDogJmRmbHQuaW87Ci0JCQlsaW5rLT5pby5BdHRyaWJ1dGVzMSA9IElPX0RBVEFfUEFUSF9XSURUSF9BVVRPOwotCQkJaWYgKCEoaW8tPmZsYWdzICYgQ0lTVFBMX0lPXzhCSVQpKQotCQkJCWxpbmstPmlvLkF0dHJpYnV0ZXMxID0KLQkJCQkgICAgSU9fREFUQV9QQVRIX1dJRFRIXzE2OwotCQkJaWYgKCEoaW8tPmZsYWdzICYgQ0lTVFBMX0lPXzE2QklUKSkKLQkJCQlsaW5rLT5pby5BdHRyaWJ1dGVzMSA9Ci0JCQkJICAgIElPX0RBVEFfUEFUSF9XSURUSF84OwotCQkJbGluay0+aW8uSU9BZGRyTGluZXMgPQotCQkJICAgIGlvLT5mbGFncyAmIENJU1RQTF9JT19MSU5FU19NQVNLOwotCQkJbGluay0+aW8uQmFzZVBvcnQxID0gaW8tPndpblswXS5iYXNlOwotCQkJbGluay0+aW8uTnVtUG9ydHMxID0gaW8tPndpblswXS5sZW47Ci0JCQlpZiAoaW8tPm53aW4gPiAxKSB7Ci0JCQkJbGluay0+aW8uQXR0cmlidXRlczIgPQotCQkJCSAgICBsaW5rLT5pby5BdHRyaWJ1dGVzMTsKLQkJCQlsaW5rLT5pby5CYXNlUG9ydDIgPSBpby0+d2luWzFdLmJhc2U7Ci0JCQkJbGluay0+aW8uTnVtUG9ydHMyID0gaW8tPndpblsxXS5sZW47Ci0JCQl9Ci0KLQkJCS8qIFRoaXMgcmVzZXJ2ZXMgSU8gc3BhY2UgYnV0IGRvZXNuJ3QgYWN0dWFsbHkgZW5hYmxlIGl0ICovCi0JCQlpZiAocGNtY2lhX3JlcXVlc3RfaW8obGluaywgJmxpbmstPmlvKSAhPSAwKQotCQkJCWdvdG8gbmV4dF9lbnRyeTsKLQkJfQotCi0KLQkJLyogSWYgd2UgZ290IHRoaXMgZmFyLCB3ZSdyZSBjb29sISAqLwotCi0JCWJyZWFrOwotCQkKLQluZXh0X2VudHJ5OgotCQlwY21jaWFfZGlzYWJsZV9kZXZpY2UobGluayk7Ci0JCWxhc3RfcmV0ID0gcGNtY2lhX2dldF9uZXh0X3R1cGxlKGxpbmssICZ0dXBsZSk7Ci0JCWlmIChsYXN0X3JldCAgPT0gQ1NfTk9fTU9SRV9JVEVNUykgeworCWxhc3RfcmV0ID0gcGNtY2lhX2xvb3BfY29uZmlnKGxpbmssIHNwZWN0cnVtX2NzX2NvbmZpZ19jaGVjaywgTlVMTCk7CisJaWYgKGxhc3RfcmV0KSB7CisJCWlmICghaWdub3JlX2Npc192Y2MpCiAJCQlwcmludGsoS0VSTl9FUlIgUEZYICJHZXROZXh0VHVwbGUoKTogTm8gbWF0Y2hpbmcgIgogCQkJICAgICAgICJDSVMgY29uZmlndXJhdGlvbi4gIE1heWJlIHlvdSBuZWVkIHRoZSAiCiAJCQkgICAgICAgImlnbm9yZV9jaXNfdmNjPTEgcGFyYW1ldGVyLlxuIik7Ci0JCQlnb3RvIGNzX2ZhaWxlZDsKLQkJfQorCQljc19lcnJvcihsaW5rLCBSZXF1ZXN0SU8sIGxhc3RfcmV0KTsKKwkJZ290byBmYWlsZWQ7CiAJfQogCiAJLyoKQEAgLTQ1MCwxMCArNDI2LDExIEBACiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGxpbmstPnByaXY7CiAJc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgZXJyID0gMDsKIAogCS8qIE1hcmsgdGhlIGRldmljZSBhcyBzdG9wcGVkLCB0byBibG9jayBJTyB1bnRpbCBsYXRlciAqLwotCXNwaW5fbG9jaygmcHJpdi0+bG9jayk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKIAogCWVyciA9IF9fb3Jpbm9jb19kb3duKGRldik7CiAJaWYgKGVycikKQEAgLTQ2Myw3ICs0NDAsNyBAQAogCW5ldGlmX2RldmljZV9kZXRhY2goZGV2KTsKIAlwcml2LT5od191bmF2YWlsYWJsZSsrOwogCi0Jc3Bpbl91bmxvY2soJnByaXYtPmxvY2spOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKIAogCXJldHVybiBlcnI7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy93YXZlbGFuLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93YXZlbGFuLmMKaW5kZXggMTM2MjIwYi4uZTkzOWE3MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2F2ZWxhbi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dhdmVsYW4uYwpAQCAtNDM4Nyw3ICs0Mzg3LDcgQEAKICAqCiAgKiBUaGFua3MgZ28gYWxzbyB0bzoKICAqCUphbWVzIEFzaHRvbiAoamFhMTAxQHN5c2VuZy5hbnUuZWR1LmF1KSwKLSAqCUFsYW4gQ294IChhbGFuQHJlZGhhdC5jb20pLAorICoJQWxhbiBDb3ggKGFsYW5AbHhvcmd1ay51a3V1Lm9yZy51ayksCiAgKglBbGxhbiBDcmVpZ2h0b24gKGFsbGFuY0Bjcy51c3lkLmVkdS5hdSksCiAgKglNYXR0aGV3IEdlaWVyIChtYXR0aGV3QGNzLnVzeWQuZWR1LmF1KSwKICAqCVJlbW8gZGkgR2lvdmFubmkgKHJlbW9AY3MudXN5ZC5lZHUuYXUpLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2F2ZWxhbi5wLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy93YXZlbGFuLnAuaAppbmRleCBiMzNhYzQ3Li40NGQzMWJiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy93YXZlbGFuLnAuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93YXZlbGFuLnAuaApAQCAtMTg2LDcgKzE4Niw3IEBACiAgKgogICogVGhhbmtzIGdvIGFsc28gdG86CiAgKglKYW1lcyBBc2h0b24gPGphYTEwMUBzeXNlbmcuYW51LmVkdS5hdT4sCi0gKglBbGFuIENveCA8YWxhbkByZWRoYXQuY29tPiwKKyAqCUFsYW4gQ294IDxhbGFuQGx4b3JndWsudWt1dS5vcmcudWs+LAogICoJQWxsYW4gQ3JlaWdodG9uIDxhbGxhbmNAY3MudXN5ZC5lZHUuYXU+LAogICoJTWF0dGhldyBHZWllciA8bWF0dGhld0Bjcy51c3lkLmVkdS5hdT4sCiAgKglSZW1vIGRpIEdpb3Zhbm5pIDxyZW1vQGNzLnVzeWQuZWR1LmF1PiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dhdmVsYW5fY3MuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dhdmVsYW5fY3MuYwppbmRleCBiNWRlMzhhLi5lMTI0YjFkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy93YXZlbGFuX2NzLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2F2ZWxhbl9jcy5jCkBAIC0zNzAyLDcgKzM3MDIsNyBAQAogI2VuZGlmCiAKICAgaSA9IHBjbWNpYV9hY2Nlc3NfY29uZmlndXJhdGlvbl9yZWdpc3RlcihsaW5rLCAmcmVnKTsKLSAgaWYoaSAhPSBDU19TVUNDRVNTKQorICBpZiAoaSAhPSAwKQogICAgIHsKICAgICAgIGNzX2Vycm9yKGxpbmssIEFjY2Vzc0NvbmZpZ3VyYXRpb25SZWdpc3RlciwgaSk7CiAgICAgICByZXR1cm4gRkFMU0U7CkBAIC0zNzE2LDcgKzM3MTYsNyBAQAogICByZWcuQWN0aW9uID0gQ1NfV1JJVEU7CiAgIHJlZy5WYWx1ZSA9IHJlZy5WYWx1ZSB8IENPUl9TV19SRVNFVDsKICAgaSA9IHBjbWNpYV9hY2Nlc3NfY29uZmlndXJhdGlvbl9yZWdpc3RlcihsaW5rLCAmcmVnKTsKLSAgaWYoaSAhPSBDU19TVUNDRVNTKQorICBpZiAoaSAhPSAwKQogICAgIHsKICAgICAgIGNzX2Vycm9yKGxpbmssIEFjY2Vzc0NvbmZpZ3VyYXRpb25SZWdpc3RlciwgaSk7CiAgICAgICByZXR1cm4gRkFMU0U7CkBAIC0zNzI1LDcgKzM3MjUsNyBAQAogICByZWcuQWN0aW9uID0gQ1NfV1JJVEU7CiAgIHJlZy5WYWx1ZSA9IENPUl9MRVZFTF9JUlEgfCBDT1JfQ09ORklHOwogICBpID0gcGNtY2lhX2FjY2Vzc19jb25maWd1cmF0aW9uX3JlZ2lzdGVyKGxpbmssICZyZWcpOwotICBpZihpICE9IENTX1NVQ0NFU1MpCisgIGlmIChpICE9IDApCiAgICAgewogICAgICAgY3NfZXJyb3IobGluaywgQWNjZXNzQ29uZmlndXJhdGlvblJlZ2lzdGVyLCBpKTsKICAgICAgIHJldHVybiBGQUxTRTsKQEAgLTM5MDMsNyArMzkwMyw3IEBACiAgIGRvCiAgICAgewogICAgICAgaSA9IHBjbWNpYV9yZXF1ZXN0X2lvKGxpbmssICZsaW5rLT5pbyk7Ci0gICAgICBpZihpICE9IENTX1NVQ0NFU1MpCisgICAgICBpZiAoaSAhPSAwKQogCXsKIAkgIGNzX2Vycm9yKGxpbmssIFJlcXVlc3RJTywgaSk7CiAJICBicmVhazsKQEAgLTM5MTQsNyArMzkxNCw3IEBACiAgICAgICAgKiBhY3R1YWxseSBhc3NpZ24gYSBoYW5kbGVyIHRvIHRoZSBpbnRlcnJ1cHQuCiAgICAgICAgKi8KICAgICAgIGkgPSBwY21jaWFfcmVxdWVzdF9pcnEobGluaywgJmxpbmstPmlycSk7Ci0gICAgICBpZihpICE9IENTX1NVQ0NFU1MpCisgICAgICBpZiAoaSAhPSAwKQogCXsKIAkgIGNzX2Vycm9yKGxpbmssIFJlcXVlc3RJUlEsIGkpOwogCSAgYnJlYWs7CkBAIC0zOTI2LDcgKzM5MjYsNyBAQAogICAgICAgICovCiAgICAgICBsaW5rLT5jb25mLkNvbmZpZ0luZGV4ID0gMTsKICAgICAgIGkgPSBwY21jaWFfcmVxdWVzdF9jb25maWd1cmF0aW9uKGxpbmssICZsaW5rLT5jb25mKTsKLSAgICAgIGlmKGkgIT0gQ1NfU1VDQ0VTUykKKyAgICAgIGlmIChpICE9IDApCiAJewogCSAgY3NfZXJyb3IobGluaywgUmVxdWVzdENvbmZpZ3VyYXRpb24sIGkpOwogCSAgYnJlYWs7CkBAIC0zOTQyLDcgKzM5NDIsNyBAQAogICAgICAgcmVxLkJhc2UgPSByZXEuU2l6ZSA9IDA7CiAgICAgICByZXEuQWNjZXNzU3BlZWQgPSBtZW1fc3BlZWQ7CiAgICAgICBpID0gcGNtY2lhX3JlcXVlc3Rfd2luZG93KCZsaW5rLCAmcmVxLCAmbGluay0+d2luKTsKLSAgICAgIGlmKGkgIT0gQ1NfU1VDQ0VTUykKKyAgICAgIGlmIChpICE9IDApCiAJewogCSAgY3NfZXJyb3IobGluaywgUmVxdWVzdFdpbmRvdywgaSk7CiAJICBicmVhazsKQEAgLTM5NTQsNyArMzk1NCw3IEBACiAKICAgICAgIG1lbS5DYXJkT2Zmc2V0ID0gMDsgbWVtLlBhZ2UgPSAwOwogICAgICAgaSA9IHBjbWNpYV9tYXBfbWVtX3BhZ2UobGluay0+d2luLCAmbWVtKTsKLSAgICAgIGlmKGkgIT0gQ1NfU1VDQ0VTUykKKyAgICAgIGlmIChpICE9IDApCiAJewogCSAgY3NfZXJyb3IobGluaywgTWFwTWVtUGFnZSwgaSk7CiAJICBicmVhazsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMzUwMV9jcy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wzNTAxX2NzLmMKaW5kZXggNzRhNWFkMi4uNjg3ODljNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wzNTAxX2NzLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wzNTAxX2NzLmMKQEAgLTE5NzcsMTAgKzE5NzcsMTAgQEAKIAkJbGluay0+aW8uQmFzZVBvcnQxID0gajsKIAkJbGluay0+aW8uQmFzZVBvcnQyID0gbGluay0+aW8uQmFzZVBvcnQxICsgMHgxMDsKIAkJaSA9IHBjbWNpYV9yZXF1ZXN0X2lvKGxpbmssICZsaW5rLT5pbyk7Ci0JCWlmIChpID09IENTX1NVQ0NFU1MpCisJCWlmIChpID09IDApCiAJCQlicmVhazsKIAl9Ci0JaWYgKGkgIT0gQ1NfU1VDQ0VTUykgeworCWlmIChpICE9IDApIHsKIAkJY3NfZXJyb3IobGluaywgUmVxdWVzdElPLCBpKTsKIAkJZ290byBmYWlsZWQ7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQveGVuLW5ldGZyb250LmMgYi9kcml2ZXJzL25ldC94ZW4tbmV0ZnJvbnQuYwppbmRleCAzYzNkZDQwLi5jNjk0OGQ4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC94ZW4tbmV0ZnJvbnQuYworKysgYi9kcml2ZXJzL25ldC94ZW4tbmV0ZnJvbnQuYwpAQCAtMjM5LDExICsyMzksMTQgQEAKIAkgKi8KIAliYXRjaF90YXJnZXQgPSBucC0+cnhfdGFyZ2V0IC0gKHJlcV9wcm9kIC0gbnAtPnJ4LnJzcF9jb25zKTsKIAlmb3IgKGkgPSBza2JfcXVldWVfbGVuKCZucC0+cnhfYmF0Y2gpOyBpIDwgYmF0Y2hfdGFyZ2V0OyBpKyspIHsKLQkJc2tiID0gX19uZXRkZXZfYWxsb2Nfc2tiKGRldiwgUlhfQ09QWV9USFJFU0hPTEQsCisJCXNrYiA9IF9fbmV0ZGV2X2FsbG9jX3NrYihkZXYsIFJYX0NPUFlfVEhSRVNIT0xEICsgTkVUX0lQX0FMSUdOLAogCQkJCQkgR0ZQX0FUT01JQyB8IF9fR0ZQX05PV0FSTik7CiAJCWlmICh1bmxpa2VseSghc2tiKSkKIAkJCWdvdG8gbm9fc2tiOwogCisJCS8qIEFsaWduIGlwIGhlYWRlciB0byBhIDE2IGJ5dGVzIGJvdW5kYXJ5ICovCisJCXNrYl9yZXNlcnZlKHNrYiwgTkVUX0lQX0FMSUdOKTsKKwogCQlwYWdlID0gYWxsb2NfcGFnZShHRlBfQVRPTUlDIHwgX19HRlBfTk9XQVJOKTsKIAkJaWYgKCFwYWdlKSB7CiAJCQlrZnJlZV9za2Ioc2tiKTsKQEAgLTQ3MSw3ICs0NzQsNyBAQAogCXVuc2lnbmVkIGludCBvZmZzZXQgPSBvZmZzZXRfaW5fcGFnZShkYXRhKTsKIAl1bnNpZ25lZCBpbnQgbGVuID0gc2tiX2hlYWRsZW4oc2tiKTsKIAotCWZyYWdzICs9IChvZmZzZXQgKyBsZW4gKyBQQUdFX1NJWkUgLSAxKSAvIFBBR0VfU0laRTsKKwlmcmFncyArPSBESVZfUk9VTkRfVVAob2Zmc2V0ICsgbGVuLCBQQUdFX1NJWkUpOwogCWlmICh1bmxpa2VseShmcmFncyA+IE1BWF9TS0JfRlJBR1MgKyAxKSkgewogCQlwcmludGsoS0VSTl9BTEVSVCAieGVubmV0OiBza2IgcmlkZXMgdGhlIHJvY2tldDogJWQgZnJhZ3NcbiIsCiAJCSAgICAgICBmcmFncyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL251YnVzL251YnVzLmMgYi9kcml2ZXJzL251YnVzL251YnVzLmMKaW5kZXggMmYwNDdlNS4uZjVmNzU4NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9udWJ1cy9udWJ1cy5jCisrKyBiL2RyaXZlcnMvbnVidXMvbnVidXMuYwpAQCAtMTI2LDcgKzEyNiw3IEBACiAJewogCQl3aGlsZShub3RfdXNlZnVsKHAsbWFwKSkKIAkJCXArKzsKLQkJCXArKzsKKwkJcCsrOwogCQlsZW4tLTsKIAl9CiAJKnB0ciA9IHA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL29mL2Jhc2UuYyBiL2RyaXZlcnMvb2YvYmFzZS5jCmluZGV4IGFkOGFjMWEuLjdjNzllOTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvb2YvYmFzZS5jCisrKyBiL2RyaXZlcnMvb2YvYmFzZS5jCkBAIC00MTAsNyArNDEwLDcgQEAKIAljaGFyICptb2RhbGlhczsKIH07CiBzdGF0aWMgc3RydWN0IG9mX21vZGFsaWFzX3RhYmxlIG9mX21vZGFsaWFzX3RhYmxlW10gPSB7Ci0JLyogRW1wdHkgZm9yIG5vdzsgYWRkIGVudHJpZXMgYXMgbmVlZGVkICovCisJeyAiZnNsLG1jdS1tcGM4MzQ5ZW1pdHgiLCAibWN1LW1wYzgzNDllbWl0eCIgfSwKIH07CiAKIC8qKgpAQCAtNDIwLDEzICs0MjAsMTIgQEAKICAqIEBsZW46CUxlbmd0aCBvZiBtb2RhbGlhcyB2YWx1ZQogICoKICAqIEJhc2VkIG9uIHRoZSB2YWx1ZSBvZiB0aGUgY29tcGF0aWJsZSBwcm9wZXJ0eSwgdGhpcyByb3V0aW5lIHdpbGwgZGV0ZXJtaW5lCi0gKiBhbiBhcHByb3ByaWF0ZSBtb2RhbGlhcyB2YWx1ZSBmb3IgYSBwYXJ0aWN1bGFyIGRldmljZSB0cmVlIG5vZGUuICBUaHJlZQotICogc2VwYXJhdGUgbWV0aG9kcyBhcmUgdXNlZCB0byBkZXJpdmUgYSBtb2RhbGlhcyB2YWx1ZS4KKyAqIGFuIGFwcHJvcHJpYXRlIG1vZGFsaWFzIHZhbHVlIGZvciBhIHBhcnRpY3VsYXIgZGV2aWNlIHRyZWUgbm9kZS4gIFR3bworICogc2VwYXJhdGUgbWV0aG9kcyBhcmUgYXR0ZW1wdGVkIHRvIGRlcml2ZSBhIG1vZGFsaWFzIHZhbHVlLgogICoKICAqIEZpcnN0IG1ldGhvZCBpcyB0byBsb29rdXAgdGhlIGNvbXBhdGlibGUgdmFsdWUgaW4gb2ZfbW9kYWxpYXNfdGFibGUuCi0gKiBTZWNvbmQgaXMgdG8gbG9vayBmb3IgYSAibGludXgsPG1vZGFsaWFzPiIgZW50cnkgaW4gdGhlIGNvbXBhdGlibGUgbGlzdAotICogYW5kIHVzZWQgdGhhdCBmb3IgbW9kYWxpYXMuICBUaGlyZCBpcyB0byBzdHJpcCBvZmYgdGhlIG1hbnVmYWN0dXJlcgotICogcHJlZml4IGZyb20gdGhlIGZpcnN0IGNvbXBhdGlibGUgZW50cnkgYW5kIHVzZSB0aGUgcmVtYWluZGVyIGFzIG1vZGFsaWFzCisgKiBTZWNvbmQgaXMgdG8gc3RyaXAgb2ZmIHRoZSBtYW51ZmFjdHVyZXIgcHJlZml4IGZyb20gdGhlIGZpcnN0CisgKiBjb21wYXRpYmxlIGVudHJ5IGFuZCB1c2UgdGhlIHJlbWFpbmRlciBhcyBtb2RhbGlhcwogICoKICAqIFRoaXMgcm91dGluZSByZXR1cm5zIDAgb24gc3VjY2VzcwogICovCkBAIC00NDksMjEgKzQ0OCw3IEBACiAJaWYgKCFjb21wYXRpYmxlKQogCQlyZXR1cm4gLUVOT0RFVjsKIAotCS8qIDIuIHNlYXJjaCBmb3IgbGludXgsPG1vZGFsaWFzPiBlbnRyeSAqLwotCXAgPSBjb21wYXRpYmxlOwotCXdoaWxlIChjcGxlbiA+IDApIHsKLQkJaWYgKCFzdHJuY21wKHAsICJsaW51eCwiLCA2KSkgewotCQkJcCArPSA2OwotCQkJc3RybGNweShtb2RhbGlhcywgcCwgbGVuKTsKLQkJCXJldHVybiAwOwotCQl9Ci0KLQkJaSA9IHN0cmxlbihwKSArIDE7Ci0JCXAgKz0gaTsKLQkJY3BsZW4gLT0gaTsKLQl9Ci0KLQkvKiAzLiB0YWtlIGZpcnN0IGNvbXBhdGlibGUgZW50cnkgYW5kIHN0cmlwIG1hbnVmYWN0dXJlciAqLworCS8qIDIuIHRha2UgZmlyc3QgY29tcGF0aWJsZSBlbnRyeSBhbmQgc3RyaXAgbWFudWZhY3R1cmVyICovCiAJcCA9IHN0cmNocihjb21wYXRpYmxlLCAnLCcpOwogCWlmICghcCkKIAkJcmV0dXJuIC1FTk9ERVY7CkBAIC00NzMsMyArNDU4LDExMiBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwob2ZfbW9kYWxpYXNfbm9kZSk7CiAKKy8qKgorICogb2ZfcGFyc2VfcGhhbmRsZXNfd2l0aF9hcmdzIC0gRmluZCBhIG5vZGUgcG9pbnRlZCBieSBwaGFuZGxlIGluIGEgbGlzdAorICogQG5wOgkJcG9pbnRlciB0byBhIGRldmljZSB0cmVlIG5vZGUgY29udGFpbmluZyBhIGxpc3QKKyAqIEBsaXN0X25hbWU6CXByb3BlcnR5IG5hbWUgdGhhdCBjb250YWlucyBhIGxpc3QKKyAqIEBjZWxsc19uYW1lOglwcm9wZXJ0eSBuYW1lIHRoYXQgc3BlY2lmaWVzIHBoYW5kbGVzJyBhcmd1bWVudHMgY291bnQKKyAqIEBpbmRleDoJaW5kZXggb2YgYSBwaGFuZGxlIHRvIHBhcnNlIG91dAorICogQG91dF9ub2RlOglwb2ludGVyIHRvIGRldmljZV9ub2RlIHN0cnVjdCBwb2ludGVyICh3aWxsIGJlIGZpbGxlZCkKKyAqIEBvdXRfYXJnczoJcG9pbnRlciB0byBhcmd1bWVudHMgcG9pbnRlciAod2lsbCBiZSBmaWxsZWQpCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyB1c2VmdWwgdG8gcGFyc2UgbGlzdHMgb2YgcGhhbmRsZXMgYW5kIHRoZWlyIGFyZ3VtZW50cy4KKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzIGFuZCBmaWxscyBvdXRfbm9kZSBhbmQgb3V0X2FyZ3MsIG9uIGVycm9yIHJldHVybnMKKyAqIGFwcHJvcHJpYXRlIGVycm5vIHZhbHVlLgorICoKKyAqIEV4YW1wbGU6CisgKgorICogcGhhbmRsZTE6IG5vZGUxIHsKKyAqIAkjbGlzdC1jZWxscyA9IDwyPjsKKyAqIH0KKyAqCisgKiBwaGFuZGxlMjogbm9kZTIgeworICogCSNsaXN0LWNlbGxzID0gPDE+OworICogfQorICoKKyAqIG5vZGUzIHsKKyAqIAlsaXN0ID0gPCZwaGFuZGxlMSAxIDIgJnBoYW5kbGUyIDM+OworICogfQorICoKKyAqIFRvIGdldCBhIGRldmljZV9ub2RlIG9mIHRoZSBgbm9kZTInIG5vZGUgeW91IG1heSBjYWxsIHRoaXM6CisgKiBvZl9wYXJzZV9waGFuZGxlc193aXRoX2FyZ3Mobm9kZTMsICJsaXN0IiwgIiNsaXN0LWNlbGxzIiwgMiwgJm5vZGUyLCAmYXJncyk7CisgKi8KK2ludCBvZl9wYXJzZV9waGFuZGxlc193aXRoX2FyZ3Moc3RydWN0IGRldmljZV9ub2RlICpucCwgY29uc3QgY2hhciAqbGlzdF9uYW1lLAorCQkJCWNvbnN0IGNoYXIgKmNlbGxzX25hbWUsIGludCBpbmRleCwKKwkJCQlzdHJ1Y3QgZGV2aWNlX25vZGUgKipvdXRfbm9kZSwKKwkJCQljb25zdCB2b2lkICoqb3V0X2FyZ3MpCit7CisJaW50IHJldCA9IC1FSU5WQUw7CisJY29uc3QgdTMyICpsaXN0OworCWNvbnN0IHUzMiAqbGlzdF9lbmQ7CisJaW50IHNpemU7CisJaW50IGN1cl9pbmRleCA9IDA7CisJc3RydWN0IGRldmljZV9ub2RlICpub2RlID0gTlVMTDsKKwljb25zdCB2b2lkICphcmdzOworCisJbGlzdCA9IG9mX2dldF9wcm9wZXJ0eShucCwgbGlzdF9uYW1lLCAmc2l6ZSk7CisJaWYgKCFsaXN0KSB7CisJCXJldCA9IC1FTk9FTlQ7CisJCWdvdG8gZXJyMDsKKwl9CisJbGlzdF9lbmQgPSBsaXN0ICsgc2l6ZSAvIHNpemVvZigqbGlzdCk7CisKKwl3aGlsZSAobGlzdCA8IGxpc3RfZW5kKSB7CisJCWNvbnN0IHUzMiAqY2VsbHM7CisJCWNvbnN0IHBoYW5kbGUgKnBoYW5kbGU7CisKKwkJcGhhbmRsZSA9IGxpc3Q7CisJCWFyZ3MgPSBsaXN0ICsgMTsKKworCQkvKiBvbmUgY2VsbCBob2xlIGluIHRoZSBsaXN0ID0gPD47ICovCisJCWlmICghKnBoYW5kbGUpIHsKKwkJCWxpc3QrKzsKKwkJCWdvdG8gbmV4dDsKKwkJfQorCisJCW5vZGUgPSBvZl9maW5kX25vZGVfYnlfcGhhbmRsZSgqcGhhbmRsZSk7CisJCWlmICghbm9kZSkgeworCQkJcHJfZGVidWcoIiVzOiBjb3VsZCBub3QgZmluZCBwaGFuZGxlXG4iLAorCQkJCSBucC0+ZnVsbF9uYW1lKTsKKwkJCWdvdG8gZXJyMDsKKwkJfQorCisJCWNlbGxzID0gb2ZfZ2V0X3Byb3BlcnR5KG5vZGUsIGNlbGxzX25hbWUsICZzaXplKTsKKwkJaWYgKCFjZWxscyB8fCBzaXplICE9IHNpemVvZigqY2VsbHMpKSB7CisJCQlwcl9kZWJ1ZygiJXM6IGNvdWxkIG5vdCBnZXQgJXMgZm9yICVzXG4iLAorCQkJCSBucC0+ZnVsbF9uYW1lLCBjZWxsc19uYW1lLCBub2RlLT5mdWxsX25hbWUpOworCQkJZ290byBlcnIxOworCQl9CisKKwkJLyogTmV4dCBwaGFuZGxlIGlzIGF0IG9mZnNldCBvZiBvbmUgcGhhbmRsZSBjZWxsICsgI2NlbGxzICovCisJCWxpc3QgKz0gMSArICpjZWxsczsKKwkJaWYgKGxpc3QgPiBsaXN0X2VuZCkgeworCQkJcHJfZGVidWcoIiVzOiBpbnN1ZmZpY2llbnQgYXJndW1lbnRzIGxlbmd0aFxuIiwKKwkJCQkgbnAtPmZ1bGxfbmFtZSk7CisJCQlnb3RvIGVycjE7CisJCX0KK25leHQ6CisJCWlmIChjdXJfaW5kZXggPT0gaW5kZXgpCisJCQlicmVhazsKKworCQlvZl9ub2RlX3B1dChub2RlKTsKKwkJbm9kZSA9IE5VTEw7CisJCWN1cl9pbmRleCsrOworCX0KKworCWlmICghbm9kZSkgeworCQlyZXQgPSAtRU5PRU5UOworCQlnb3RvIGVycjA7CisJfQorCisJKm91dF9ub2RlID0gbm9kZTsKKwkqb3V0X2FyZ3MgPSBhcmdzOworCisJcmV0dXJuIDA7CitlcnIxOgorCW9mX25vZGVfcHV0KG5vZGUpOworZXJyMDoKKwlwcl9kZWJ1ZygiJXMgZmFpbGVkIHdpdGggc3RhdHVzICVkXG4iLCBfX2Z1bmNfXywgcmV0KTsKKwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTChvZl9wYXJzZV9waGFuZGxlc193aXRoX2FyZ3MpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9vZi9ncGlvLmMgYi9kcml2ZXJzL29mL2dwaW8uYwppbmRleCAxYzljYWI4Li43Y2Q3MzAxIDEwMDY0NAotLS0gYS9kcml2ZXJzL29mL2dwaW8uYworKysgYi9kcml2ZXJzL29mL2dwaW8uYwpAQCAtMjgsNzggKzI4LDM1IEBACiAgKi8KIGludCBvZl9nZXRfZ3BpbyhzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLCBpbnQgaW5kZXgpCiB7Ci0JaW50IHJldCA9IC1FSU5WQUw7CisJaW50IHJldDsKIAlzdHJ1Y3QgZGV2aWNlX25vZGUgKmdjOwogCXN0cnVjdCBvZl9ncGlvX2NoaXAgKm9mX2djID0gTlVMTDsKIAlpbnQgc2l6ZTsKLQljb25zdCB1MzIgKmdwaW9zOwotCXUzMiBucl9jZWxsczsKLQlpbnQgaTsKIAljb25zdCB2b2lkICpncGlvX3NwZWM7CiAJY29uc3QgdTMyICpncGlvX2NlbGxzOwotCWludCBncGlvX2luZGV4ID0gMDsKIAotCWdwaW9zID0gb2ZfZ2V0X3Byb3BlcnR5KG5wLCAiZ3Bpb3MiLCAmc2l6ZSk7Ci0JaWYgKCFncGlvcykgewotCQlyZXQgPSAtRU5PRU5UOworCXJldCA9IG9mX3BhcnNlX3BoYW5kbGVzX3dpdGhfYXJncyhucCwgImdwaW9zIiwgIiNncGlvLWNlbGxzIiwgaW5kZXgsCisJCQkJCSAgJmdjLCAmZ3Bpb19zcGVjKTsKKwlpZiAocmV0KSB7CisJCXByX2RlYnVnKCIlczogY2FuJ3QgcGFyc2UgZ3Bpb3MgcHJvcGVydHlcbiIsIF9fZnVuY19fKTsKIAkJZ290byBlcnIwOwogCX0KLQlucl9jZWxscyA9IHNpemUgLyBzaXplb2YodTMyKTsKIAotCWZvciAoaSA9IDA7IGkgPCBucl9jZWxsczsgZ3Bpb19pbmRleCsrKSB7Ci0JCWNvbnN0IHBoYW5kbGUgKmdwaW9fcGhhbmRsZTsKLQotCQlncGlvX3BoYW5kbGUgPSBncGlvcyArIGk7Ci0JCWdwaW9fc3BlYyA9IGdwaW9fcGhhbmRsZSArIDE7Ci0KLQkJLyogb25lIGNlbGwgaG9sZSBpbiB0aGUgZ3Bpb3MgPSA8PjsgKi8KLQkJaWYgKCEqZ3Bpb19waGFuZGxlKSB7Ci0JCQlpZiAoZ3Bpb19pbmRleCA9PSBpbmRleCkKLQkJCQlyZXR1cm4gLUVOT0VOVDsKLQkJCWkrKzsKLQkJCWNvbnRpbnVlOwotCQl9Ci0KLQkJZ2MgPSBvZl9maW5kX25vZGVfYnlfcGhhbmRsZSgqZ3Bpb19waGFuZGxlKTsKLQkJaWYgKCFnYykgewotCQkJcHJfZGVidWcoIiVzOiBjb3VsZCBub3QgZmluZCBwaGFuZGxlIGZvciBncGlvc1xuIiwKLQkJCQkgbnAtPmZ1bGxfbmFtZSk7Ci0JCQlnb3RvIGVycjA7Ci0JCX0KLQotCQlvZl9nYyA9IGdjLT5kYXRhOwotCQlpZiAoIW9mX2djKSB7Ci0JCQlwcl9kZWJ1ZygiJXM6IGdwaW8gY29udHJvbGxlciAlcyBpc24ndCByZWdpc3RlcmVkXG4iLAotCQkJCSBucC0+ZnVsbF9uYW1lLCBnYy0+ZnVsbF9uYW1lKTsKLQkJCWdvdG8gZXJyMTsKLQkJfQotCi0JCWdwaW9fY2VsbHMgPSBvZl9nZXRfcHJvcGVydHkoZ2MsICIjZ3Bpby1jZWxscyIsICZzaXplKTsKLQkJaWYgKCFncGlvX2NlbGxzIHx8IHNpemUgIT0gc2l6ZW9mKCpncGlvX2NlbGxzKSB8fAotCQkJCSpncGlvX2NlbGxzICE9IG9mX2djLT5ncGlvX2NlbGxzKSB7Ci0JCQlwcl9kZWJ1ZygiJXM6IHdyb25nICNncGlvLWNlbGxzIGZvciAlc1xuIiwKLQkJCQkgbnAtPmZ1bGxfbmFtZSwgZ2MtPmZ1bGxfbmFtZSk7Ci0JCQlnb3RvIGVycjE7Ci0JCX0KLQotCQkvKiBOZXh0IHBoYW5kbGUgaXMgYXQgcGhhbmRsZSBjZWxscyArICNncGlvLWNlbGxzICovCi0JCWkgKz0gc2l6ZW9mKCpncGlvX3BoYW5kbGUpIC8gc2l6ZW9mKHUzMikgKyAqZ3Bpb19jZWxsczsKLQkJaWYgKGkgPj0gbnJfY2VsbHMgKyAxKSB7Ci0JCQlwcl9kZWJ1ZygiJXM6IGluc3VmZmljaWVudCBncGlvLXNwZWMgbGVuZ3RoXG4iLAotCQkJCSBucC0+ZnVsbF9uYW1lKTsKLQkJCWdvdG8gZXJyMTsKLQkJfQotCi0JCWlmIChncGlvX2luZGV4ID09IGluZGV4KQotCQkJYnJlYWs7Ci0KLQkJb2ZfZ2MgPSBOVUxMOwotCQlvZl9ub2RlX3B1dChnYyk7Ci0JfQotCisJb2ZfZ2MgPSBnYy0+ZGF0YTsKIAlpZiAoIW9mX2djKSB7Ci0JCXJldCA9IC1FTk9FTlQ7Ci0JCWdvdG8gZXJyMDsKKwkJcHJfZGVidWcoIiVzOiBncGlvIGNvbnRyb2xsZXIgJXMgaXNuJ3QgcmVnaXN0ZXJlZFxuIiwKKwkJCSBucC0+ZnVsbF9uYW1lLCBnYy0+ZnVsbF9uYW1lKTsKKwkJcmV0ID0gLUVOT0RFVjsKKwkJZ290byBlcnIxOworCX0KKworCWdwaW9fY2VsbHMgPSBvZl9nZXRfcHJvcGVydHkoZ2MsICIjZ3Bpby1jZWxscyIsICZzaXplKTsKKwlpZiAoIWdwaW9fY2VsbHMgfHwgc2l6ZSAhPSBzaXplb2YoKmdwaW9fY2VsbHMpIHx8CisJCQkqZ3Bpb19jZWxscyAhPSBvZl9nYy0+Z3Bpb19jZWxscykgeworCQlwcl9kZWJ1ZygiJXM6IHdyb25nICNncGlvLWNlbGxzIGZvciAlc1xuIiwKKwkJCSBucC0+ZnVsbF9uYW1lLCBnYy0+ZnVsbF9uYW1lKTsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBlcnIxOwogCX0KIAogCXJldCA9IG9mX2djLT54bGF0ZShvZl9nYywgbnAsIGdwaW9fc3BlYyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL29wcm9maWxlL2J1ZmZlcl9zeW5jLmMgYi9kcml2ZXJzL29wcm9maWxlL2J1ZmZlcl9zeW5jLmMKaW5kZXggOTMwNGM0NS4uZWQ5ODIyNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9vcHJvZmlsZS9idWZmZXJfc3luYy5jCisrKyBiL2RyaXZlcnMvb3Byb2ZpbGUvYnVmZmVyX3N5bmMuYwpAQCAtNSw2ICs1LDcgQEAKICAqIEByZW1hcmsgUmVhZCB0aGUgZmlsZSBDT1BZSU5HCiAgKgogICogQGF1dGhvciBKb2huIExldm9uIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KKyAqIEBhdXRob3IgQmFycnkgS2FzaW5kb3JmCiAgKgogICogVGhpcyBpcyB0aGUgY29yZSBvZiB0aGUgYnVmZmVyIG1hbmFnZW1lbnQuIEVhY2gKICAqIENQVSBidWZmZXIgaXMgcHJvY2Vzc2VkIGFuZCBlbnRlcmVkIGludG8gdGhlCkBAIC0zMyw3ICszNCw3IEBACiAjaW5jbHVkZSAiZXZlbnRfYnVmZmVyLmgiCiAjaW5jbHVkZSAiY3B1X2J1ZmZlci5oIgogI2luY2x1ZGUgImJ1ZmZlcl9zeW5jLmgiCi0gCisKIHN0YXRpYyBMSVNUX0hFQUQoZHlpbmdfdGFza3MpOwogc3RhdGljIExJU1RfSEVBRChkZWFkX3Rhc2tzKTsKIHN0YXRpYyBjcHVtYXNrX3QgbWFya2VkX2NwdXMgPSBDUFVfTUFTS19OT05FOwpAQCAtNDgsMTAgKzQ5LDExIEBACiAgKiBDYW4gYmUgaW52b2tlZCBmcm9tIHNvZnRpcnEgdmlhIFJDVSBjYWxsYmFjayBkdWUgdG8KICAqIGNhbGxfcmN1KCkgb2YgdGhlIHRhc2sgc3RydWN0LCBoZW5jZSB0aGUgX2lycXNhdmUuCiAgKi8KLXN0YXRpYyBpbnQgdGFza19mcmVlX25vdGlmeShzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKiBzZWxmLCB1bnNpZ25lZCBsb25nIHZhbCwgdm9pZCAqIGRhdGEpCitzdGF0aWMgaW50Cit0YXNrX2ZyZWVfbm90aWZ5KHN0cnVjdCBub3RpZmllcl9ibG9jayAqc2VsZiwgdW5zaWduZWQgbG9uZyB2YWwsIHZvaWQgKmRhdGEpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKiB0YXNrID0gZGF0YTsKKwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2sgPSBkYXRhOwogCXNwaW5fbG9ja19pcnFzYXZlKCZ0YXNrX21vcnR1YXJ5LCBmbGFncyk7CiAJbGlzdF9hZGQoJnRhc2stPnRhc2tzLCAmZHlpbmdfdGFza3MpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnRhc2tfbW9ydHVhcnksIGZsYWdzKTsKQEAgLTYyLDEzICs2NCwxNCBAQAogLyogVGhlIHRhc2sgaXMgb24gaXRzIHdheSBvdXQuIEEgc3luYyBvZiB0aGUgYnVmZmVyIG1lYW5zIHdlIGNhbiBjYXRjaAogICogYW55IHJlbWFpbmluZyBzYW1wbGVzIGZvciB0aGlzIHRhc2suCiAgKi8KLXN0YXRpYyBpbnQgdGFza19leGl0X25vdGlmeShzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKiBzZWxmLCB1bnNpZ25lZCBsb25nIHZhbCwgdm9pZCAqIGRhdGEpCitzdGF0aWMgaW50Cit0YXNrX2V4aXRfbm90aWZ5KHN0cnVjdCBub3RpZmllcl9ibG9jayAqc2VsZiwgdW5zaWduZWQgbG9uZyB2YWwsIHZvaWQgKmRhdGEpCiB7CiAJLyogVG8gYXZvaWQgbGF0ZW5jeSBwcm9ibGVtcywgd2Ugb25seSBwcm9jZXNzIHRoZSBjdXJyZW50IENQVSwKIAkgKiBob3BpbmcgdGhhdCBtb3N0IHNhbXBsZXMgZm9yIHRoZSB0YXNrIGFyZSBvbiB0aGlzIENQVQogCSAqLwogCXN5bmNfYnVmZmVyKHJhd19zbXBfcHJvY2Vzc29yX2lkKCkpOwotICAJcmV0dXJuIDA7CisJcmV0dXJuIDA7CiB9CiAKIApAQCAtNzcsMTEgKzgwLDEyIEBACiAgKiB3ZSBkb24ndCBsb3NlIGFueS4gVGhpcyBkb2VzIG5vdCBoYXZlIHRvIGJlIGV4YWN0LCBpdCdzIGEgUW9JIGlzc3VlCiAgKiBvbmx5LgogICovCi1zdGF0aWMgaW50IG11bm1hcF9ub3RpZnkoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICogc2VsZiwgdW5zaWduZWQgbG9uZyB2YWwsIHZvaWQgKiBkYXRhKQorc3RhdGljIGludAorbXVubWFwX25vdGlmeShzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnNlbGYsIHVuc2lnbmVkIGxvbmcgdmFsLCB2b2lkICpkYXRhKQogewogCXVuc2lnbmVkIGxvbmcgYWRkciA9ICh1bnNpZ25lZCBsb25nKWRhdGE7Ci0Jc3RydWN0IG1tX3N0cnVjdCAqIG1tID0gY3VycmVudC0+bW07Ci0Jc3RydWN0IHZtX2FyZWFfc3RydWN0ICogbXBudDsKKwlzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IGN1cnJlbnQtPm1tOworCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqbXBudDsKIAogCWRvd25fcmVhZCgmbW0tPm1tYXBfc2VtKTsKIApAQCAtOTksMTEgKzEwMywxMiBAQAogCXJldHVybiAwOwogfQogCi0gCisKIC8qIFdlIG5lZWQgdG8gYmUgdG9sZCBhYm91dCBuZXcgbW9kdWxlcyBzbyB3ZSBkb24ndCBhdHRyaWJ1dGUgdG8gYSBwcmV2aW91c2x5CiAgKiBsb2FkZWQgbW9kdWxlLCBvciBkcm9wIHRoZSBzYW1wbGVzIG9uIHRoZSBmbG9vci4KICAqLwotc3RhdGljIGludCBtb2R1bGVfbG9hZF9ub3RpZnkoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICogc2VsZiwgdW5zaWduZWQgbG9uZyB2YWwsIHZvaWQgKiBkYXRhKQorc3RhdGljIGludAorbW9kdWxlX2xvYWRfbm90aWZ5KHN0cnVjdCBub3RpZmllcl9ibG9jayAqc2VsZiwgdW5zaWduZWQgbG9uZyB2YWwsIHZvaWQgKmRhdGEpCiB7CiAjaWZkZWYgQ09ORklHX01PRFVMRVMKIAlpZiAodmFsICE9IE1PRFVMRV9TVEFURV9DT01JTkcpCkBAIC0xMTgsNyArMTIzLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotIAorCiBzdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIHRhc2tfZnJlZV9uYiA9IHsKIAkubm90aWZpZXJfY2FsbAk9IHRhc2tfZnJlZV9ub3RpZnksCiB9OwpAQCAtMTM1LDcgKzE0MCw3IEBACiAJLm5vdGlmaWVyX2NhbGwgPSBtb2R1bGVfbG9hZF9ub3RpZnksCiB9OwogCi0gCisKIHN0YXRpYyB2b2lkIGVuZF9zeW5jKHZvaWQpCiB7CiAJZW5kX2NwdV93b3JrKCk7CkBAIC0yMDgsMTQgKzIxMywxNCBAQAogICogbm90IHN0cmljdGx5IG5lY2Vzc2FyeSBidXQgYWxsb3dzIG9wcm9maWxlIHRvIGFzc29jaWF0ZQogICogc2hhcmVkLWxpYnJhcnkgc2FtcGxlcyB3aXRoIHBhcnRpY3VsYXIgYXBwbGljYXRpb25zCiAgKi8KLXN0YXRpYyB1bnNpZ25lZCBsb25nIGdldF9leGVjX2Rjb29raWUoc3RydWN0IG1tX3N0cnVjdCAqIG1tKQorc3RhdGljIHVuc2lnbmVkIGxvbmcgZ2V0X2V4ZWNfZGNvb2tpZShzdHJ1Y3QgbW1fc3RydWN0ICptbSkKIHsKIAl1bnNpZ25lZCBsb25nIGNvb2tpZSA9IE5PX0NPT0tJRTsKLQlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKiB2bWE7Ci0gCisJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7CisKIAlpZiAoIW1tKQogCQlnb3RvIG91dDsKLSAKKwogCWZvciAodm1hID0gbW0tPm1tYXA7IHZtYTsgdm1hID0gdm1hLT52bV9uZXh0KSB7CiAJCWlmICghdm1hLT52bV9maWxlKQogCQkJY29udGludWU7CkBAIC0yMzUsMTMgKzI0MCwxNCBAQAogICogc3VyZSB0byBkbyB0aGlzIGxvb2t1cCBiZWZvcmUgYSBtbS0+bW1hcCBtb2RpZmljYXRpb24gaGFwcGVucyBzbwogICogd2UgZG9uJ3QgbG9zZSB0cmFjay4KICAqLwotc3RhdGljIHVuc2lnbmVkIGxvbmcgbG9va3VwX2Rjb29raWUoc3RydWN0IG1tX3N0cnVjdCAqIG1tLCB1bnNpZ25lZCBsb25nIGFkZHIsIG9mZl90ICogb2Zmc2V0KQorc3RhdGljIHVuc2lnbmVkIGxvbmcKK2xvb2t1cF9kY29va2llKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsIG9mZl90ICpvZmZzZXQpCiB7CiAJdW5zaWduZWQgbG9uZyBjb29raWUgPSBOT19DT09LSUU7Ci0Jc3RydWN0IHZtX2FyZWFfc3RydWN0ICogdm1hOworCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hOwogCiAJZm9yICh2bWEgPSBmaW5kX3ZtYShtbSwgYWRkcik7IHZtYTsgdm1hID0gdm1hLT52bV9uZXh0KSB7Ci0gCisKIAkJaWYgKGFkZHIgPCB2bWEtPnZtX3N0YXJ0IHx8IGFkZHIgPj0gdm1hLT52bV9lbmQpCiAJCQljb250aW51ZTsKIApAQCAtMjYzLDkgKzI2OSwyMCBAQAogCXJldHVybiBjb29raWU7CiB9CiAKK3N0YXRpYyB2b2lkIGluY3JlbWVudF90YWlsKHN0cnVjdCBvcHJvZmlsZV9jcHVfYnVmZmVyICpiKQoreworCXVuc2lnbmVkIGxvbmcgbmV3X3RhaWwgPSBiLT50YWlsX3BvcyArIDE7CisKKwlybWIoKTsJLyogYmUgc3VyZSBmaWZvIHBvaW50ZXJzIGFyZSBzeW5jaHJvbWl6ZWQgKi8KKworCWlmIChuZXdfdGFpbCA8IGItPmJ1ZmZlcl9zaXplKQorCQliLT50YWlsX3BvcyA9IG5ld190YWlsOworCWVsc2UKKwkJYi0+dGFpbF9wb3MgPSAwOworfQogCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBsYXN0X2Nvb2tpZSA9IElOVkFMSURfQ09PS0lFOwotIAorCiBzdGF0aWMgdm9pZCBhZGRfY3B1X3N3aXRjaChpbnQgaSkKIHsKIAlhZGRfZXZlbnRfZW50cnkoRVNDQVBFX0NPREUpOwpAQCAtMjc4LDE2ICsyOTUsMTYgQEAKIHsKIAlhZGRfZXZlbnRfZW50cnkoRVNDQVBFX0NPREUpOwogCWlmIChpbl9rZXJuZWwpCi0JCWFkZF9ldmVudF9lbnRyeShLRVJORUxfRU5URVJfU1dJVENIX0NPREUpOyAKKwkJYWRkX2V2ZW50X2VudHJ5KEtFUk5FTF9FTlRFUl9TV0lUQ0hfQ09ERSk7CiAJZWxzZQotCQlhZGRfZXZlbnRfZW50cnkoS0VSTkVMX0VYSVRfU1dJVENIX0NPREUpOyAKKwkJYWRkX2V2ZW50X2VudHJ5KEtFUk5FTF9FWElUX1NXSVRDSF9DT0RFKTsKIH0KLSAKKwogc3RhdGljIHZvaWQKLWFkZF91c2VyX2N0eF9zd2l0Y2goc3RydWN0IHRhc2tfc3RydWN0IGNvbnN0ICogdGFzaywgdW5zaWduZWQgbG9uZyBjb29raWUpCithZGRfdXNlcl9jdHhfc3dpdGNoKHN0cnVjdCB0YXNrX3N0cnVjdCBjb25zdCAqdGFzaywgdW5zaWduZWQgbG9uZyBjb29raWUpCiB7CiAJYWRkX2V2ZW50X2VudHJ5KEVTQ0FQRV9DT0RFKTsKLQlhZGRfZXZlbnRfZW50cnkoQ1RYX1NXSVRDSF9DT0RFKTsgCisJYWRkX2V2ZW50X2VudHJ5KENUWF9TV0lUQ0hfQ09ERSk7CiAJYWRkX2V2ZW50X2VudHJ5KHRhc2stPnBpZCk7CiAJYWRkX2V2ZW50X2VudHJ5KGNvb2tpZSk7CiAJLyogQW5vdGhlciBjb2RlIGZvciBkYWVtb24gYmFjay1jb21wYXQgKi8KQEAgLTI5Niw3ICszMTMsNyBAQAogCWFkZF9ldmVudF9lbnRyeSh0YXNrLT50Z2lkKTsKIH0KIAotIAorCiBzdGF0aWMgdm9pZCBhZGRfY29va2llX3N3aXRjaCh1bnNpZ25lZCBsb25nIGNvb2tpZSkKIHsKIAlhZGRfZXZlbnRfZW50cnkoRVNDQVBFX0NPREUpOwpAQCAtMzA0LDEzICszMjEsNzggQEAKIAlhZGRfZXZlbnRfZW50cnkoY29va2llKTsKIH0KIAotIAorCiBzdGF0aWMgdm9pZCBhZGRfdHJhY2VfYmVnaW4odm9pZCkKIHsKIAlhZGRfZXZlbnRfZW50cnkoRVNDQVBFX0NPREUpOwogCWFkZF9ldmVudF9lbnRyeShUUkFDRV9CRUdJTl9DT0RFKTsKIH0KIAorI2lmZGVmIENPTkZJR19PUFJPRklMRV9JQlMKKworI2RlZmluZSBJQlNfRkVUQ0hfQ09ERV9TSVpFCTIKKyNkZWZpbmUgSUJTX09QX0NPREVfU0laRQk1CisjZGVmaW5lIElCU19FSVAob2Zmc2V0KQkJCQlcCisJKCgoc3RydWN0IG9wX3NhbXBsZSAqKSZjcHVfYnVmLT5idWZmZXJbKG9mZnNldCldKS0+ZWlwKQorI2RlZmluZSBJQlNfRVZFTlQob2Zmc2V0KQkJCQlcCisJKCgoc3RydWN0IG9wX3NhbXBsZSAqKSZjcHVfYnVmLT5idWZmZXJbKG9mZnNldCldKS0+ZXZlbnQpCisKKy8qCisgKiBBZGQgSUJTIGZldGNoIGFuZCBvcCBlbnRyaWVzIHRvIGV2ZW50IGJ1ZmZlcgorICovCitzdGF0aWMgdm9pZCBhZGRfaWJzX2JlZ2luKHN0cnVjdCBvcHJvZmlsZV9jcHVfYnVmZmVyICpjcHVfYnVmLCBpbnQgY29kZSwKKwlpbnQgaW5fa2VybmVsLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSkKK3sKKwl1bnNpZ25lZCBsb25nIHJpcDsKKwlpbnQgaSwgY291bnQ7CisJdW5zaWduZWQgbG9uZyBpYnNfY29va2llID0gMDsKKwlvZmZfdCBvZmZzZXQ7CisKKwlpbmNyZW1lbnRfdGFpbChjcHVfYnVmKTsJLyogbW92ZSB0byBSSVAgZW50cnkgKi8KKworCXJpcCA9IElCU19FSVAoY3B1X2J1Zi0+dGFpbF9wb3MpOworCisjaWZkZWYgX19MUDY0X18KKwlyaXAgKz0gSUJTX0VWRU5UKGNwdV9idWYtPnRhaWxfcG9zKSA8PCAzMjsKKyNlbmRpZgorCisJaWYgKG1tKSB7CisJCWlic19jb29raWUgPSBsb29rdXBfZGNvb2tpZShtbSwgcmlwLCAmb2Zmc2V0KTsKKworCQlpZiAoaWJzX2Nvb2tpZSA9PSBOT19DT09LSUUpCisJCQlvZmZzZXQgPSByaXA7CisJCWlmIChpYnNfY29va2llID09IElOVkFMSURfQ09PS0lFKSB7CisJCQlhdG9taWNfaW5jKCZvcHJvZmlsZV9zdGF0cy5zYW1wbGVfbG9zdF9ub19tYXBwaW5nKTsKKwkJCW9mZnNldCA9IHJpcDsKKwkJfQorCQlpZiAoaWJzX2Nvb2tpZSAhPSBsYXN0X2Nvb2tpZSkgeworCQkJYWRkX2Nvb2tpZV9zd2l0Y2goaWJzX2Nvb2tpZSk7CisJCQlsYXN0X2Nvb2tpZSA9IGlic19jb29raWU7CisJCX0KKwl9IGVsc2UKKwkJb2Zmc2V0ID0gcmlwOworCisJYWRkX2V2ZW50X2VudHJ5KEVTQ0FQRV9DT0RFKTsKKwlhZGRfZXZlbnRfZW50cnkoY29kZSk7CisJYWRkX2V2ZW50X2VudHJ5KG9mZnNldCk7CS8qIE9mZnNldCBmcm9tIERjb29raWUgKi8KKworCS8qIHdlIHNlbmQgdGhlIERjb29raWUgb2Zmc2V0LCBidXQgc2VuZCB0aGUgcmF3IExpbmVhciBBZGQgYWxzbyovCisJYWRkX2V2ZW50X2VudHJ5KElCU19FSVAoY3B1X2J1Zi0+dGFpbF9wb3MpKTsKKwlhZGRfZXZlbnRfZW50cnkoSUJTX0VWRU5UKGNwdV9idWYtPnRhaWxfcG9zKSk7CisKKwlpZiAoY29kZSA9PSBJQlNfRkVUQ0hfQ09ERSkKKwkJY291bnQgPSBJQlNfRkVUQ0hfQ09ERV9TSVpFOwkvKklCUyBGRVRDSCBpcyAyIGludDY0cyovCisJZWxzZQorCQljb3VudCA9IElCU19PUF9DT0RFX1NJWkU7CS8qSUJTIE9QIGlzIDUgaW50NjRzKi8KKworCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CisJCWluY3JlbWVudF90YWlsKGNwdV9idWYpOworCQlhZGRfZXZlbnRfZW50cnkoSUJTX0VJUChjcHVfYnVmLT50YWlsX3BvcykpOworCQlhZGRfZXZlbnRfZW50cnkoSUJTX0VWRU5UKGNwdV9idWYtPnRhaWxfcG9zKSk7CisJfQorfQorCisjZW5kaWYKIAogc3RhdGljIHZvaWQgYWRkX3NhbXBsZV9lbnRyeSh1bnNpZ25lZCBsb25nIG9mZnNldCwgdW5zaWduZWQgbG9uZyBldmVudCkKIHsKQEAgLTMxOSwxMyArNDAxLDEzIEBACiB9CiAKIAotc3RhdGljIGludCBhZGRfdXNfc2FtcGxlKHN0cnVjdCBtbV9zdHJ1Y3QgKiBtbSwgc3RydWN0IG9wX3NhbXBsZSAqIHMpCitzdGF0aWMgaW50IGFkZF91c19zYW1wbGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHN0cnVjdCBvcF9zYW1wbGUgKnMpCiB7CiAJdW5zaWduZWQgbG9uZyBjb29raWU7CiAJb2ZmX3Qgb2Zmc2V0OwotIAotIAljb29raWUgPSBsb29rdXBfZGNvb2tpZShtbSwgcy0+ZWlwLCAmb2Zmc2V0KTsKLSAKKworCWNvb2tpZSA9IGxvb2t1cF9kY29va2llKG1tLCBzLT5laXAsICZvZmZzZXQpOworCiAJaWYgKGNvb2tpZSA9PSBJTlZBTElEX0NPT0tJRSkgewogCQlhdG9taWNfaW5jKCZvcHJvZmlsZV9zdGF0cy5zYW1wbGVfbG9zdF9ub19tYXBwaW5nKTsKIAkJcmV0dXJuIDA7CkBAIC0zNDEsMTMgKzQyMywxMyBAQAogCXJldHVybiAxOwogfQogCi0gCisKIC8qIEFkZCBhIHNhbXBsZSB0byB0aGUgZ2xvYmFsIGV2ZW50IGJ1ZmZlci4gSWYgcG9zc2libGUgdGhlCiAgKiBzYW1wbGUgaXMgY29udmVydGVkIGludG8gYSBwZXJzaXN0ZW50IGRlbnRyeS9vZmZzZXQgcGFpcgogICogZm9yIGxhdGVyIGxvb2t1cCBmcm9tIHVzZXJzcGFjZS4KICAqLwogc3RhdGljIGludAotYWRkX3NhbXBsZShzdHJ1Y3QgbW1fc3RydWN0ICogbW0sIHN0cnVjdCBvcF9zYW1wbGUgKiBzLCBpbnQgaW5fa2VybmVsKQorYWRkX3NhbXBsZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgc3RydWN0IG9wX3NhbXBsZSAqcywgaW50IGluX2tlcm5lbCkKIHsKIAlpZiAoaW5fa2VybmVsKSB7CiAJCWFkZF9zYW1wbGVfZW50cnkocy0+ZWlwLCBzLT5ldmVudCk7CkBAIC0zNTksOSArNDQxLDkgQEAKIAl9CiAJcmV0dXJuIDA7CiB9Ci0gCiAKLXN0YXRpYyB2b2lkIHJlbGVhc2VfbW0oc3RydWN0IG1tX3N0cnVjdCAqIG1tKQorCitzdGF0aWMgdm9pZCByZWxlYXNlX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQogewogCWlmICghbW0pCiAJCXJldHVybjsKQEAgLTM3MCw5ICs0NTIsOSBAQAogfQogCiAKLXN0YXRpYyBzdHJ1Y3QgbW1fc3RydWN0ICogdGFrZV90YXNrc19tbShzdHJ1Y3QgdGFza19zdHJ1Y3QgKiB0YXNrKQorc3RhdGljIHN0cnVjdCBtbV9zdHJ1Y3QgKnRha2VfdGFza3NfbW0oc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKQogewotCXN0cnVjdCBtbV9zdHJ1Y3QgKiBtbSA9IGdldF90YXNrX21tKHRhc2spOworCXN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gZ2V0X3Rhc2tfbW0odGFzayk7CiAJaWYgKG1tKQogCQlkb3duX3JlYWQoJm1tLT5tbWFwX3NlbSk7CiAJcmV0dXJuIG1tOwpAQCAtMzgzLDEwICs0NjUsMTAgQEAKIHsKIAlyZXR1cm4gdmFsID09IEVTQ0FQRV9DT0RFOwogfQotIAorCiAKIC8qICJhY3F1aXJlIiBhcyBtYW55IGNwdSBidWZmZXIgc2xvdHMgYXMgd2UgY2FuICovCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBnZXRfc2xvdHMoc3RydWN0IG9wcm9maWxlX2NwdV9idWZmZXIgKiBiKQorc3RhdGljIHVuc2lnbmVkIGxvbmcgZ2V0X3Nsb3RzKHN0cnVjdCBvcHJvZmlsZV9jcHVfYnVmZmVyICpiKQogewogCXVuc2lnbmVkIGxvbmcgaGVhZCA9IGItPmhlYWRfcG9zOwogCXVuc2lnbmVkIGxvbmcgdGFpbCA9IGItPnRhaWxfcG9zOwpAQCAtNDEyLDE5ICs0OTQsNiBAQAogfQogCiAKLXN0YXRpYyB2b2lkIGluY3JlbWVudF90YWlsKHN0cnVjdCBvcHJvZmlsZV9jcHVfYnVmZmVyICogYikKLXsKLQl1bnNpZ25lZCBsb25nIG5ld190YWlsID0gYi0+dGFpbF9wb3MgKyAxOwotCi0Jcm1iKCk7Ci0KLQlpZiAobmV3X3RhaWwgPCBiLT5idWZmZXJfc2l6ZSkKLQkJYi0+dGFpbF9wb3MgPSBuZXdfdGFpbDsKLQllbHNlCi0JCWItPnRhaWxfcG9zID0gMDsKLX0KLQotCiAvKiBNb3ZlIHRhc2tzIGFsb25nIHRvd2FyZHMgZGVhdGguIEFueSB0YXNrcyBvbiBkZWFkX3Rhc2tzCiAgKiB3aWxsIGRlZmluaXRlbHkgaGF2ZSBubyByZW1haW5pbmcgcmVmZXJlbmNlcyBpbiBhbnkKICAqIENQVSBidWZmZXJzIGF0IHRoaXMgcG9pbnQsIGJlY2F1c2Ugd2UgdXNlIHR3byBsaXN0cywKQEAgLTQzNSw4ICs1MDQsOCBAQAogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJTElTVF9IRUFEKGxvY2FsX2RlYWRfdGFza3MpOwotCXN0cnVjdCB0YXNrX3N0cnVjdCAqIHRhc2s7Ci0Jc3RydWN0IHRhc2tfc3RydWN0ICogdHRhc2s7CisJc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrOworCXN0cnVjdCB0YXNrX3N0cnVjdCAqdHRhc2s7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmdGFza19tb3J0dWFyeSwgZmxhZ3MpOwogCkBAIC00OTMsNyArNTYyLDcgQEAKIHsKIAlzdHJ1Y3Qgb3Byb2ZpbGVfY3B1X2J1ZmZlciAqY3B1X2J1ZiA9ICZwZXJfY3B1KGNwdV9idWZmZXIsIGNwdSk7CiAJc3RydWN0IG1tX3N0cnVjdCAqbW0gPSBOVUxMOwotCXN0cnVjdCB0YXNrX3N0cnVjdCAqIG5ldzsKKwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKm5ldzsKIAl1bnNpZ25lZCBsb25nIGNvb2tpZSA9IDA7CiAJaW50IGluX2tlcm5lbCA9IDE7CiAJdW5zaWduZWQgaW50IGk7CkBAIC01MDEsNyArNTcwLDcgQEAKIAl1bnNpZ25lZCBsb25nIGF2YWlsYWJsZTsKIAogCW11dGV4X2xvY2soJmJ1ZmZlcl9tdXRleCk7Ci0gCisKIAlhZGRfY3B1X3N3aXRjaChjcHUpOwogCiAJLyogUmVtZW1iZXIsIG9ubHkgd2UgY2FuIG1vZGlmeSB0YWlsX3BvcyAqLwpAQCAtNTA5LDggKzU3OCw4IEBACiAJYXZhaWxhYmxlID0gZ2V0X3Nsb3RzKGNwdV9idWYpOwogCiAJZm9yIChpID0gMDsgaSA8IGF2YWlsYWJsZTsgKytpKSB7Ci0JCXN0cnVjdCBvcF9zYW1wbGUgKiBzID0gJmNwdV9idWYtPmJ1ZmZlcltjcHVfYnVmLT50YWlsX3Bvc107Ci0gCisJCXN0cnVjdCBvcF9zYW1wbGUgKnMgPSAmY3B1X2J1Zi0+YnVmZmVyW2NwdV9idWYtPnRhaWxfcG9zXTsKKwogCQlpZiAoaXNfY29kZShzLT5laXApKSB7CiAJCQlpZiAocy0+ZXZlbnQgPD0gQ1BVX0lTX0tFUk5FTCkgewogCQkJCS8qIGtlcm5lbC91c2Vyc3BhY2Ugc3dpdGNoICovCkBAIC01MjEsOCArNTkwLDE4IEBACiAJCQl9IGVsc2UgaWYgKHMtPmV2ZW50ID09IENQVV9UUkFDRV9CRUdJTikgewogCQkJCXN0YXRlID0gc2JfYnRfc3RhcnQ7CiAJCQkJYWRkX3RyYWNlX2JlZ2luKCk7CisjaWZkZWYgQ09ORklHX09QUk9GSUxFX0lCUworCQkJfSBlbHNlIGlmIChzLT5ldmVudCA9PSBJQlNfRkVUQ0hfQkVHSU4pIHsKKwkJCQlzdGF0ZSA9IHNiX2J0X3N0YXJ0OworCQkJCWFkZF9pYnNfYmVnaW4oY3B1X2J1ZiwKKwkJCQkJSUJTX0ZFVENIX0NPREUsIGluX2tlcm5lbCwgbW0pOworCQkJfSBlbHNlIGlmIChzLT5ldmVudCA9PSBJQlNfT1BfQkVHSU4pIHsKKwkJCQlzdGF0ZSA9IHNiX2J0X3N0YXJ0OworCQkJCWFkZF9pYnNfYmVnaW4oY3B1X2J1ZiwKKwkJCQkJSUJTX09QX0NPREUsIGluX2tlcm5lbCwgbW0pOworI2VuZGlmCiAJCQl9IGVsc2UgewotCQkJCXN0cnVjdCBtbV9zdHJ1Y3QgKiBvbGRtbSA9IG1tOworCQkJCXN0cnVjdCBtbV9zdHJ1Y3QgKm9sZG1tID0gbW07CiAKIAkJCQkvKiB1c2Vyc3BhY2UgY29udGV4dCBzd2l0Y2ggKi8KIAkJCQluZXcgPSAoc3RydWN0IHRhc2tfc3RydWN0ICopcy0+ZXZlbnQ7CkBAIC01MzMsMTMgKzYxMiwxMSBAQAogCQkJCQljb29raWUgPSBnZXRfZXhlY19kY29va2llKG1tKTsKIAkJCQlhZGRfdXNlcl9jdHhfc3dpdGNoKG5ldywgY29va2llKTsKIAkJCX0KLQkJfSBlbHNlIHsKLQkJCWlmIChzdGF0ZSA+PSBzYl9idF9zdGFydCAmJgotCQkJICAgICFhZGRfc2FtcGxlKG1tLCBzLCBpbl9rZXJuZWwpKSB7Ci0JCQkJaWYgKHN0YXRlID09IHNiX2J0X3N0YXJ0KSB7Ci0JCQkJCXN0YXRlID0gc2JfYnRfaWdub3JlOwotCQkJCQlhdG9taWNfaW5jKCZvcHJvZmlsZV9zdGF0cy5idF9sb3N0X25vX21hcHBpbmcpOwotCQkJCX0KKwkJfSBlbHNlIGlmIChzdGF0ZSA+PSBzYl9idF9zdGFydCAmJgorCQkJICAgIWFkZF9zYW1wbGUobW0sIHMsIGluX2tlcm5lbCkpIHsKKwkJCWlmIChzdGF0ZSA9PSBzYl9idF9zdGFydCkgeworCQkJCXN0YXRlID0gc2JfYnRfaWdub3JlOworCQkJCWF0b21pY19pbmMoJm9wcm9maWxlX3N0YXRzLmJ0X2xvc3Rfbm9fbWFwcGluZyk7CiAJCQl9CiAJCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9vcHJvZmlsZS9jcHVfYnVmZmVyLmMgYi9kcml2ZXJzL29wcm9maWxlL2NwdV9idWZmZXIuYwppbmRleCA3YmE3OGU2Li5lMWJkNWE5IDEwMDY0NAotLS0gYS9kcml2ZXJzL29wcm9maWxlL2NwdV9idWZmZXIuYworKysgYi9kcml2ZXJzL29wcm9maWxlL2NwdV9idWZmZXIuYwpAQCAtNSw2ICs1LDcgQEAKICAqIEByZW1hcmsgUmVhZCB0aGUgZmlsZSBDT1BZSU5HCiAgKgogICogQGF1dGhvciBKb2huIExldm9uIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4KKyAqIEBhdXRob3IgQmFycnkgS2FzaW5kb3JmIDxiYXJyeS5rYXNpbmRvcmZAYW1kLmNvbT4KICAqCiAgKiBFYWNoIENQVSBoYXMgYSBsb2NhbCBidWZmZXIgdGhhdCBzdG9yZXMgUEMgdmFsdWUvZXZlbnQKICAqIHBhaXJzLiBXZSBhbHNvIGxvZyBjb250ZXh0IHN3aXRjaGVzIHdoZW4gd2Ugbm90aWNlIHRoZW0uCkBAIC0yMDksNyArMjEwLDcgQEAKIAlyZXR1cm4gMTsKIH0KIAotc3RhdGljIGludCBvcHJvZmlsZV9iZWdpbl90cmFjZShzdHJ1Y3Qgb3Byb2ZpbGVfY3B1X2J1ZmZlciAqIGNwdV9idWYpCitzdGF0aWMgaW50IG9wcm9maWxlX2JlZ2luX3RyYWNlKHN0cnVjdCBvcHJvZmlsZV9jcHVfYnVmZmVyICpjcHVfYnVmKQogewogCWlmIChucl9hdmFpbGFibGVfc2xvdHMoY3B1X2J1ZikgPCA0KSB7CiAJCWNwdV9idWYtPnNhbXBsZV9sb3N0X292ZXJmbG93Kys7CkBAIC0yNTQsNiArMjU1LDc1IEBACiAJb3Byb2ZpbGVfYWRkX2V4dF9zYW1wbGUocGMsIHJlZ3MsIGV2ZW50LCBpc19rZXJuZWwpOwogfQogCisjaWZkZWYgQ09ORklHX09QUk9GSUxFX0lCUworCisjZGVmaW5lIE1BWF9JQlNfU0FNUExFX1NJWkUJMTQKK3N0YXRpYyBpbnQgbG9nX2lic19zYW1wbGUoc3RydWN0IG9wcm9maWxlX2NwdV9idWZmZXIgKmNwdV9idWYsCisJdW5zaWduZWQgbG9uZyBwYywgaW50IGlzX2tlcm5lbCwgdW5zaWduZWQgIGludCAqaWJzLCBpbnQgaWJzX2NvZGUpCit7CisJc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrOworCisJY3B1X2J1Zi0+c2FtcGxlX3JlY2VpdmVkKys7CisKKwlpZiAobnJfYXZhaWxhYmxlX3Nsb3RzKGNwdV9idWYpIDwgTUFYX0lCU19TQU1QTEVfU0laRSkgeworCQljcHVfYnVmLT5zYW1wbGVfbG9zdF9vdmVyZmxvdysrOworCQlyZXR1cm4gMDsKKwl9CisKKwlpc19rZXJuZWwgPSAhIWlzX2tlcm5lbDsKKworCS8qIG5vdGljZSBhIHN3aXRjaCBmcm9tIHVzZXItPmtlcm5lbCBvciB2aWNlIHZlcnNhICovCisJaWYgKGNwdV9idWYtPmxhc3RfaXNfa2VybmVsICE9IGlzX2tlcm5lbCkgeworCQljcHVfYnVmLT5sYXN0X2lzX2tlcm5lbCA9IGlzX2tlcm5lbDsKKwkJYWRkX2NvZGUoY3B1X2J1ZiwgaXNfa2VybmVsKTsKKwl9CisKKwkvKiBub3RpY2UgYSB0YXNrIHN3aXRjaCAqLworCWlmICghaXNfa2VybmVsKSB7CisJCXRhc2sgPSBjdXJyZW50OworCisJCWlmIChjcHVfYnVmLT5sYXN0X3Rhc2sgIT0gdGFzaykgeworCQkJY3B1X2J1Zi0+bGFzdF90YXNrID0gdGFzazsKKwkJCWFkZF9jb2RlKGNwdV9idWYsICh1bnNpZ25lZCBsb25nKXRhc2spOworCQl9CisJfQorCisJYWRkX2NvZGUoY3B1X2J1ZiwgaWJzX2NvZGUpOworCWFkZF9zYW1wbGUoY3B1X2J1ZiwgaWJzWzBdLCBpYnNbMV0pOworCWFkZF9zYW1wbGUoY3B1X2J1ZiwgaWJzWzJdLCBpYnNbM10pOworCWFkZF9zYW1wbGUoY3B1X2J1ZiwgaWJzWzRdLCBpYnNbNV0pOworCisJaWYgKGlic19jb2RlID09IElCU19PUF9CRUdJTikgeworCWFkZF9zYW1wbGUoY3B1X2J1ZiwgaWJzWzZdLCBpYnNbN10pOworCWFkZF9zYW1wbGUoY3B1X2J1ZiwgaWJzWzhdLCBpYnNbOV0pOworCWFkZF9zYW1wbGUoY3B1X2J1ZiwgaWJzWzEwXSwgaWJzWzExXSk7CisJfQorCisJcmV0dXJuIDE7Cit9CisKK3ZvaWQgb3Byb2ZpbGVfYWRkX2lic19zYW1wbGUoc3RydWN0IHB0X3JlZ3MgKmNvbnN0IHJlZ3MsCisJCQkJdW5zaWduZWQgaW50ICogY29uc3QgaWJzX3NhbXBsZSwgdTggY29kZSkKK3sKKwlpbnQgaXNfa2VybmVsID0gIXVzZXJfbW9kZShyZWdzKTsKKwl1bnNpZ25lZCBsb25nIHBjID0gcHJvZmlsZV9wYyhyZWdzKTsKKworCXN0cnVjdCBvcHJvZmlsZV9jcHVfYnVmZmVyICpjcHVfYnVmID0KKwkJCSAmcGVyX2NwdShjcHVfYnVmZmVyLCBzbXBfcHJvY2Vzc29yX2lkKCkpOworCisJaWYgKCFiYWNrdHJhY2VfZGVwdGgpIHsKKwkJbG9nX2lic19zYW1wbGUoY3B1X2J1ZiwgcGMsIGlzX2tlcm5lbCwgaWJzX3NhbXBsZSwgY29kZSk7CisJCXJldHVybjsKKwl9CisKKwkvKiBpZiBsb2dfc2FtcGxlKCkgZmFpbHMgd2UgY2FuJ3QgYmFja3RyYWNlIHNpbmNlIHdlIGxvc3QgdGhlIHNvdXJjZQorCSogb2YgdGhpcyBldmVudCAqLworCWlmIChsb2dfaWJzX3NhbXBsZShjcHVfYnVmLCBwYywgaXNfa2VybmVsLCBpYnNfc2FtcGxlLCBjb2RlKSkKKwkJb3Byb2ZpbGVfb3BzLmJhY2t0cmFjZShyZWdzLCBiYWNrdHJhY2VfZGVwdGgpOworfQorCisjZW5kaWYKKwogdm9pZCBvcHJvZmlsZV9hZGRfcGModW5zaWduZWQgbG9uZyBwYywgaW50IGlzX2tlcm5lbCwgdW5zaWduZWQgbG9uZyBldmVudCkKIHsKIAlzdHJ1Y3Qgb3Byb2ZpbGVfY3B1X2J1ZmZlciAqY3B1X2J1ZiA9ICZfX2dldF9jcHVfdmFyKGNwdV9idWZmZXIpOwpAQCAtMjk2LDcgKzM2Niw3IEBACiAJc3RydWN0IG9wcm9maWxlX2NwdV9idWZmZXIgKiBiID0KIAkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBvcHJvZmlsZV9jcHVfYnVmZmVyLCB3b3JrLndvcmspOwogCWlmIChiLT5jcHUgIT0gc21wX3Byb2Nlc3Nvcl9pZCgpKSB7Ci0JCXByaW50aygiV1Egb24gQ1BVJWQsIHByZWZlciBDUFUlZFxuIiwKKwkJcHJpbnRrKEtFUk5fREVCVUcgIldRIG9uIENQVSVkLCBwcmVmZXIgQ1BVJWRcbiIsCiAJCSAgICAgICBzbXBfcHJvY2Vzc29yX2lkKCksIGItPmNwdSk7CiAJfQogCXN5bmNfYnVmZmVyKGItPmNwdSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL29wcm9maWxlL2NwdV9idWZmZXIuaCBiL2RyaXZlcnMvb3Byb2ZpbGUvY3B1X2J1ZmZlci5oCmluZGV4IGMzZTM2NmIuLjljNDRkMDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvb3Byb2ZpbGUvY3B1X2J1ZmZlci5oCisrKyBiL2RyaXZlcnMvb3Byb2ZpbGUvY3B1X2J1ZmZlci5oCkBAIC01NSw1ICs1NSw3IEBACiAvKiB0cmFuc2llbnQgZXZlbnRzIGZvciB0aGUgQ1BVIGJ1ZmZlciAtPiBldmVudCBidWZmZXIgKi8KICNkZWZpbmUgQ1BVX0lTX0tFUk5FTCAxCiAjZGVmaW5lIENQVV9UUkFDRV9CRUdJTiAyCisjZGVmaW5lIElCU19GRVRDSF9CRUdJTiAzCisjZGVmaW5lIElCU19PUF9CRUdJTiAgICA0CiAKICNlbmRpZiAvKiBPUFJPRklMRV9DUFVfQlVGRkVSX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGFyaXNjL2Rpbm8uYyBiL2RyaXZlcnMvcGFyaXNjL2Rpbm8uYwppbmRleCBmZDU2MTI4Li4zYmM1NGIzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BhcmlzYy9kaW5vLmMKKysrIGIvZHJpdmVycy9wYXJpc2MvZGluby5jCkBAIC0yOTgsNyArMjk4LDggQEAKIAogc3RhdGljIHZvaWQgZGlub19kaXNhYmxlX2lycSh1bnNpZ25lZCBpbnQgaXJxKQogewotCXN0cnVjdCBkaW5vX2RldmljZSAqZGlub19kZXYgPSBpcnFfZGVzY1tpcnFdLmNoaXBfZGF0YTsKKwlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MgPSBpcnFfdG9fZGVzYyhpcnEpOworCXN0cnVjdCBkaW5vX2RldmljZSAqZGlub19kZXYgPSBkZXNjLT5jaGlwX2RhdGE7CiAJaW50IGxvY2FsX2lycSA9IGdzY19maW5kX2xvY2FsX2lycShpcnEsIGRpbm9fZGV2LT5nbG9iYWxfaXJxLCBESU5PX0xPQ0FMX0lSUVMpOwogCiAJREJHKEtFUk5fV0FSTklORyAiJXMoMHglcCwgJWQpXG4iLCBfX2Z1bmNfXywgZGlub19kZXYsIGlycSk7CkBAIC0zMTAsNyArMzExLDggQEAKIAogc3RhdGljIHZvaWQgZGlub19lbmFibGVfaXJxKHVuc2lnbmVkIGludCBpcnEpCiB7Ci0Jc3RydWN0IGRpbm9fZGV2aWNlICpkaW5vX2RldiA9IGlycV9kZXNjW2lycV0uY2hpcF9kYXRhOworCXN0cnVjdCBpcnFfZGVzYyAqZGVzYyA9IGlycV90b19kZXNjKGlycSk7CisJc3RydWN0IGRpbm9fZGV2aWNlICpkaW5vX2RldiA9IGRlc2MtPmNoaXBfZGF0YTsKIAlpbnQgbG9jYWxfaXJxID0gZ3NjX2ZpbmRfbG9jYWxfaXJxKGlycSwgZGlub19kZXYtPmdsb2JhbF9pcnEsIERJTk9fTE9DQUxfSVJRUyk7CiAJdTMyIHRtcDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wYXJpc2MvZWlzYS5jIGIvZHJpdmVycy9wYXJpc2MvZWlzYS5jCmluZGV4IDc3MWNlZjUuLjc4OTFkYjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGFyaXNjL2Vpc2EuYworKysgYi9kcml2ZXJzL3BhcmlzYy9laXNhLmMKQEAgLTM0NiwxMCArMzQ2LDEwIEBACiAJfQogCQogCS8qIFJlc2VydmUgSVJRMiAqLwotCWlycV9kZXNjWzJdLmFjdGlvbiA9ICZpcnEyX2FjdGlvbjsKKwlpcnFfdG9fZGVzYygyKS0+YWN0aW9uID0gJmlycTJfYWN0aW9uOwogCQogCWZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKSB7Ci0JCWlycV9kZXNjW2ldLmNoaXAgPSAmZWlzYV9pbnRlcnJ1cHRfdHlwZTsKKwkJaXJxX3RvX2Rlc2MoaSktPmNoaXAgPSAmZWlzYV9pbnRlcnJ1cHRfdHlwZTsKIAl9CiAJCiAJRUlTQV9idXMgPSAxOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wYXJpc2MvZ3NjLmMgYi9kcml2ZXJzL3BhcmlzYy9nc2MuYwppbmRleCBmN2QwODhiLi5lNzZkYjllIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BhcmlzYy9nc2MuYworKysgYi9kcml2ZXJzL3BhcmlzYy9nc2MuYwpAQCAtMTA4LDcgKzEwOCw4IEBACiAKIHN0YXRpYyB2b2lkIGdzY19hc2ljX2Rpc2FibGVfaXJxKHVuc2lnbmVkIGludCBpcnEpCiB7Ci0Jc3RydWN0IGdzY19hc2ljICppcnFfZGV2ID0gaXJxX2Rlc2NbaXJxXS5jaGlwX2RhdGE7CisJc3RydWN0IGlycV9kZXNjICpkZXNjID0gaXJxX3RvX2Rlc2MoaXJxKTsKKwlzdHJ1Y3QgZ3NjX2FzaWMgKmlycV9kZXYgPSBkZXNjLT5jaGlwX2RhdGE7CiAJaW50IGxvY2FsX2lycSA9IGdzY19maW5kX2xvY2FsX2lycShpcnEsIGlycV9kZXYtPmdsb2JhbF9pcnEsIDMyKTsKIAl1MzIgaW1yOwogCkBAIC0xMjMsNyArMTI0LDggQEAKIAogc3RhdGljIHZvaWQgZ3NjX2FzaWNfZW5hYmxlX2lycSh1bnNpZ25lZCBpbnQgaXJxKQogewotCXN0cnVjdCBnc2NfYXNpYyAqaXJxX2RldiA9IGlycV9kZXNjW2lycV0uY2hpcF9kYXRhOworCXN0cnVjdCBpcnFfZGVzYyAqZGVzYyA9IGlycV90b19kZXNjKGlycSk7CisJc3RydWN0IGdzY19hc2ljICppcnFfZGV2ID0gZGVzYy0+Y2hpcF9kYXRhOwogCWludCBsb2NhbF9pcnEgPSBnc2NfZmluZF9sb2NhbF9pcnEoaXJxLCBpcnFfZGV2LT5nbG9iYWxfaXJxLCAzMik7CiAJdTMyIGltcjsKIApAQCAtMTU5LDEyICsxNjEsMTQgQEAKIGludCBnc2NfYXNzaWduX2lycShzdHJ1Y3QgaHdfaW50ZXJydXB0X3R5cGUgKnR5cGUsIHZvaWQgKmRhdGEpCiB7CiAJc3RhdGljIGludCBpcnEgPSBHU0NfSVJRX0JBU0U7CisJc3RydWN0IGlycV9kZXNjICpkZXNjOwogCiAJaWYgKGlycSA+IEdTQ19JUlFfTUFYKQogCQlyZXR1cm4gTk9fSVJROwogCi0JaXJxX2Rlc2NbaXJxXS5jaGlwID0gdHlwZTsKLQlpcnFfZGVzY1tpcnFdLmNoaXBfZGF0YSA9IGRhdGE7CisJZGVzYyA9IGlycV90b19kZXNjKGlycSk7CisJZGVzYy0+Y2hpcCA9IHR5cGU7CisJZGVzYy0+Y2hpcF9kYXRhID0gZGF0YTsKIAlyZXR1cm4gaXJxKys7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGFyaXNjL2lvc2FwaWMuYyBiL2RyaXZlcnMvcGFyaXNjL2lvc2FwaWMuYwppbmRleCA2ZmIzZjc5Li43YmVmZmNhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BhcmlzYy9pb3NhcGljLmMKKysrIGIvZHJpdmVycy9wYXJpc2MvaW9zYXBpYy5jCkBAIC02MTksNyArNjE5LDkgQEAKIAogc3RhdGljIHN0cnVjdCB2ZWN0b3JfaW5mbyAqaW9zYXBpY19nZXRfdmVjdG9yKHVuc2lnbmVkIGludCBpcnEpCiB7Ci0JcmV0dXJuIGlycV9kZXNjW2lycV0uY2hpcF9kYXRhOworCXN0cnVjdCBpcnFfZGVzYyAqZGVzYyA9IGlycV90b19kZXNjKGlycSk7CisKKwlyZXR1cm4gZGVzYy0+Y2hpcF9kYXRhOwogfQogCiBzdGF0aWMgdm9pZCBpb3NhcGljX2Rpc2FibGVfaXJxKHVuc2lnbmVkIGludCBpcnEpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BhcmlzYy9zdXBlcmlvLmMgYi9kcml2ZXJzL3BhcmlzYy9zdXBlcmlvLmMKaW5kZXggMWU4ZDJkMS4uMWU5M2M4MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9wYXJpc2Mvc3VwZXJpby5jCisrKyBiL2RyaXZlcnMvcGFyaXNjL3N1cGVyaW8uYwpAQCAtMzYzLDcgKzM2Myw5IEBACiAjZW5kaWYKIAogCWZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKSB7Ci0JCWlycV9kZXNjW2ldLmNoaXAgPSAmc3VwZXJpb19pbnRlcnJ1cHRfdHlwZTsKKwkJc3RydWN0IGlycV9kZXNjICpkZXNjID0gaXJxX3RvX2Rlc2MoaSk7CisKKwkJZGVzYy0+Y2hpcCA9ICZzdXBlcmlvX2ludGVycnVwdF90eXBlOwogCX0KIAogCS8qCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BhcnBvcnQvQ2hhbmdlTG9nIGIvZHJpdmVycy9wYXJwb3J0L0NoYW5nZUxvZwppbmRleCBkYjcxN2MxLi44NTY1YmJiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BhcnBvcnQvQ2hhbmdlTG9nCisrKyBiL2RyaXZlcnMvcGFycG9ydC9DaGFuZ2VMb2cKQEAgLTMxMSw3ICszMTEsNyBAQAogCSogaWVlZTEyODRfb3BzLmMgKHBhcnBvcnRfaWVlZTEyODRfcmVhZF9uaWJibGUpOiBSZXNldCBuQXV0b0ZkCiAJb24gdGltZW91dC4gIE1hdGNoZXMgMi4yLnggYmVoYXZpb3VyLgogCi0yMDAxLTAzLTAyICBBbmRyZXcgTW9ydG9uIDxhbmRyZXdtQHVvdy5lZHUuYXU+CisyMDAxLTAzLTAyICBBbmRyZXcgTW9ydG9uCiAKIAkqIHBhcnBvcnRfcGMuYyAocmVnaXN0ZXJlZF9wYXJwb3J0KTogTmV3IHN0YXRpYyB2YXJpYWJsZS4KIAkocGFycG9ydF9wY19maW5kX3BvcnRzKTogU2V0IGl0IHdoZW4gd2UgcmVnaXN0ZXIgUENJIGRyaXZlci4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGFycG9ydC9pZWVlMTI4NC5jIGIvZHJpdmVycy9wYXJwb3J0L2llZWUxMjg0LmMKaW5kZXggZTk3MDU5NC4uYWMyYTgwNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wYXJwb3J0L2llZWUxMjg0LmMKKysrIGIvZHJpdmVycy9wYXJwb3J0L2llZWUxMjg0LmMKQEAgLTEsNCArMSw0IEBACi0vKiAkSWQ6IHBhcnBvcnRfaWVlZTEyODQuYyx2IDEuNCAxOTk3LzEwLzE5IDIxOjM3OjIxIHBoaWxpcCBFeHAgJAorLyoKICAqIElFRUUtMTI4NCBpbXBsZW1lbnRhdGlvbiBmb3IgcGFycG9ydC4KICAqCiAgKiBBdXRob3JzOiBQaGlsIEJsdW5kZWxsIDxwaGlsYkBnbnUub3JnPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wYXJwb3J0L3BhcnBvcnRfY3MuYyBiL2RyaXZlcnMvcGFycG9ydC9wYXJwb3J0X2NzLmMKaW5kZXggMDBlMWQ5Ni4uYjE4OTllOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wYXJwb3J0L3BhcnBvcnRfY3MuYworKysgYi9kcml2ZXJzL3BhcnBvcnQvcGFycG9ydF9jcy5jCkBAIC0xNDksNTIgKzE0OSw0NCBAQAogI2RlZmluZSBDU19DSEVDSyhmbiwgcmV0KSBcCiBkbyB7IGxhc3RfZm4gPSAoZm4pOyBpZiAoKGxhc3RfcmV0ID0gKHJldCkpICE9IDApIGdvdG8gY3NfZmFpbGVkOyB9IHdoaWxlICgwKQogCitzdGF0aWMgaW50IHBhcnBvcnRfY29uZmlnX2NoZWNrKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldiwKKwkJCQljaXN0cGxfY2Z0YWJsZV9lbnRyeV90ICpjZmcsCisJCQkJY2lzdHBsX2NmdGFibGVfZW50cnlfdCAqZGZsdCwKKwkJCQl1bnNpZ25lZCBpbnQgdmNjLAorCQkJCXZvaWQgKnByaXZfZGF0YSkKK3sKKwlpZiAoKGNmZy0+aW8ubndpbiA+IDApIHx8IChkZmx0LT5pby5ud2luID4gMCkpIHsKKwkJY2lzdHBsX2lvX3QgKmlvID0gKGNmZy0+aW8ubndpbikgPyAmY2ZnLT5pbyA6ICZkZmx0LT5pbzsKKwkJaWYgKGVwcF9tb2RlKQorCQkJcF9kZXYtPmNvbmYuQ29uZmlnSW5kZXggfD0gRk9SQ0VfRVBQX01PREU7CisJCXBfZGV2LT5pby5CYXNlUG9ydDEgPSBpby0+d2luWzBdLmJhc2U7CisJCXBfZGV2LT5pby5OdW1Qb3J0czEgPSBpby0+d2luWzBdLmxlbjsKKwkJcF9kZXYtPmlvLklPQWRkckxpbmVzID0gaW8tPmZsYWdzICYgQ0lTVFBMX0lPX0xJTkVTX01BU0s7CisJCWlmIChpby0+bndpbiA9PSAyKSB7CisJCQlwX2Rldi0+aW8uQmFzZVBvcnQyID0gaW8tPndpblsxXS5iYXNlOworCQkJcF9kZXYtPmlvLk51bVBvcnRzMiA9IGlvLT53aW5bMV0ubGVuOworCQl9CisJCWlmIChwY21jaWFfcmVxdWVzdF9pbyhwX2RldiwgJnBfZGV2LT5pbykgIT0gMCkKKwkJCXJldHVybiAtRU5PREVWOworCQlyZXR1cm4gMDsKKwl9CisJcmV0dXJuIC1FTk9ERVY7Cit9CisKIHN0YXRpYyBpbnQgcGFycG9ydF9jb25maWcoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCiB7CiAgICAgcGFycG9ydF9pbmZvX3QgKmluZm8gPSBsaW5rLT5wcml2OwotICAgIHR1cGxlX3QgdHVwbGU7Ci0gICAgdV9zaG9ydCBidWZbMTI4XTsKLSAgICBjaXNwYXJzZV90IHBhcnNlOwotICAgIGNpc3RwbF9jZnRhYmxlX2VudHJ5X3QgKmNmZyA9ICZwYXJzZS5jZnRhYmxlX2VudHJ5OwotICAgIGNpc3RwbF9jZnRhYmxlX2VudHJ5X3QgZGZsdCA9IHsgMCB9OwogICAgIHN0cnVjdCBwYXJwb3J0ICpwOwogICAgIGludCBsYXN0X3JldCwgbGFzdF9mbjsKLSAgICAKLSAgICBERUJVRygwLCAicGFycG9ydF9jb25maWcoMHglcClcbiIsIGxpbmspOwotICAgIAotICAgIHR1cGxlLlR1cGxlRGF0YSA9IChjaXNkYXRhX3QgKilidWY7Ci0gICAgdHVwbGUuVHVwbGVPZmZzZXQgPSAwOyB0dXBsZS5UdXBsZURhdGFNYXggPSAyNTU7Ci0gICAgdHVwbGUuRGVzaXJlZFR1cGxlID0gQ0lTVFBMX0NGVEFCTEVfRU5UUlk7Ci0gICAgdHVwbGUuQXR0cmlidXRlcyA9IDA7Ci0gICAgQ1NfQ0hFQ0soR2V0Rmlyc3RUdXBsZSwgcGNtY2lhX2dldF9maXJzdF90dXBsZShsaW5rLCAmdHVwbGUpKTsKLSAgICB3aGlsZSAoMSkgewotCWlmIChwY21jaWFfZ2V0X3R1cGxlX2RhdGEobGluaywgJnR1cGxlKSAhPSAwIHx8Ci0JCXBjbWNpYV9wYXJzZV90dXBsZShsaW5rLCAmdHVwbGUsICZwYXJzZSkgIT0gMCkKLQkgICAgZ290byBuZXh0X2VudHJ5OwogCi0JaWYgKChjZmctPmlvLm53aW4gPiAwKSB8fCAoZGZsdC5pby5ud2luID4gMCkpIHsKLQkgICAgY2lzdHBsX2lvX3QgKmlvID0gKGNmZy0+aW8ubndpbikgPyAmY2ZnLT5pbyA6ICZkZmx0LmlvOwotCSAgICBsaW5rLT5jb25mLkNvbmZpZ0luZGV4ID0gY2ZnLT5pbmRleDsKLQkgICAgaWYgKGVwcF9tb2RlKQotCQlsaW5rLT5jb25mLkNvbmZpZ0luZGV4IHw9IEZPUkNFX0VQUF9NT0RFOwotCSAgICBsaW5rLT5pby5CYXNlUG9ydDEgPSBpby0+d2luWzBdLmJhc2U7Ci0JICAgIGxpbmstPmlvLk51bVBvcnRzMSA9IGlvLT53aW5bMF0ubGVuOwotCSAgICBsaW5rLT5pby5JT0FkZHJMaW5lcyA9IGlvLT5mbGFncyAmIENJU1RQTF9JT19MSU5FU19NQVNLOwotCSAgICBpZiAoaW8tPm53aW4gPT0gMikgewotCQlsaW5rLT5pby5CYXNlUG9ydDIgPSBpby0+d2luWzFdLmJhc2U7Ci0JCWxpbmstPmlvLk51bVBvcnRzMiA9IGlvLT53aW5bMV0ubGVuOwotCSAgICB9Ci0JICAgIGlmIChwY21jaWFfcmVxdWVzdF9pbyhsaW5rLCAmbGluay0+aW8pICE9IDApCi0JCWdvdG8gbmV4dF9lbnRyeTsKLQkgICAgLyogSWYgd2UndmUgZ290IHRoaXMgZmFyLCB3ZSdyZSBkb25lICovCi0JICAgIGJyZWFrOwotCX0KLQkKLSAgICBuZXh0X2VudHJ5OgotCWlmIChjZmctPmZsYWdzICYgQ0lTVFBMX0NGVEFCTEVfREVGQVVMVCkgZGZsdCA9ICpjZmc7Ci0JQ1NfQ0hFQ0soR2V0TmV4dFR1cGxlLCBwY21jaWFfZ2V0X25leHRfdHVwbGUobGluaywgJnR1cGxlKSk7CisgICAgREVCVUcoMCwgInBhcnBvcnRfY29uZmlnKDB4JXApXG4iLCBsaW5rKTsKKworICAgIGxhc3RfcmV0ID0gcGNtY2lhX2xvb3BfY29uZmlnKGxpbmssIHBhcnBvcnRfY29uZmlnX2NoZWNrLCBOVUxMKTsKKyAgICBpZiAobGFzdF9yZXQpIHsKKwkgICAgY3NfZXJyb3IobGluaywgUmVxdWVzdElPLCBsYXN0X3JldCk7CisJICAgIGdvdG8gZmFpbGVkOwogICAgIH0KLSAgICAKKwogICAgIENTX0NIRUNLKFJlcXVlc3RJUlEsIHBjbWNpYV9yZXF1ZXN0X2lycShsaW5rLCAmbGluay0+aXJxKSk7CiAgICAgQ1NfQ0hFQ0soUmVxdWVzdENvbmZpZ3VyYXRpb24sIHBjbWNpYV9yZXF1ZXN0X2NvbmZpZ3VyYXRpb24obGluaywgJmxpbmstPmNvbmYpKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wYXJwb3J0L3Byb2JlLmMgYi9kcml2ZXJzL3BhcnBvcnQvcHJvYmUuYwppbmRleCBjZDU2NWJiLi4wZjY1NTA3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BhcnBvcnQvcHJvYmUuYworKysgYi9kcml2ZXJzL3BhcnBvcnQvcHJvYmUuYwpAQCAtMSw0ICsxLDQgQEAKLS8qICRJZDogcGFycG9ydF9wcm9iZS5jLHYgMS4xIDE5OTkvMDcvMDMgMDg6NTY6MTcgZGF2ZW0gRXhwICQKKy8qCiAgKiBQYXJhbGxlbCBwb3J0IGRldmljZSBwcm9iaW5nIGNvZGUKICAqCiAgKiBBdXRob3JzOiAgICBDYXJzdGVuIEdyb3NzLCBjYXJzdGVuQHNvbC53b2huaGVpbS51bmktdWxtLmRlCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BhcnBvcnQvc2hhcmUuYyBiL2RyaXZlcnMvcGFycG9ydC9zaGFyZS5jCmluZGV4IGE4YTYyYmIuLjBlYmNhNDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGFycG9ydC9zaGFyZS5jCisrKyBiL2RyaXZlcnMvcGFycG9ydC9zaGFyZS5jCkBAIC0xLDQgKzEsNCBAQAotLyogJElkOiBwYXJwb3J0X3NoYXJlLmMsdiAxLjE1IDE5OTgvMDEvMTEgMTI6MDY6MTcgcGhpbGlwIEV4cCAkCisvKgogICogUGFyYWxsZWwtcG9ydCByZXNvdXJjZSBtYW5hZ2VyIGNvZGUuCiAgKiAKICAqIEF1dGhvcnM6IERhdmlkIENhbXBiZWxsIDxjYW1wYmVsbEB0aXJpYW4uY2hlLmN1cnRpbi5lZHUuYXU+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9kbWFyLmMgYi9kcml2ZXJzL3BjaS9kbWFyLmMKaW5kZXggYmQyYzAxNi4uOGIyOWMzMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvZG1hci5jCisrKyBiL2RyaXZlcnMvcGNpL2RtYXIuYwpAQCAtMjgsOSArMjgsOSBAQAogCiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CiAjaW5jbHVkZSA8bGludXgvZG1hci5oPgorI2luY2x1ZGUgPGxpbnV4L2lvdmEuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlbC1pb21tdS5oPgogI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+Ci0jaW5jbHVkZSAiaW92YS5oIgotI2luY2x1ZGUgImludGVsLWlvbW11LmgiCiAKICN1bmRlZiBQUkVGSVgKICNkZWZpbmUgUFJFRklYICJETUFSOiIKQEAgLTE5Myw3ICsxOTMsNyBAQAogewogCXN0cnVjdCBhY3BpX2RtYXJfaGFyZHdhcmVfdW5pdCAqZHJoZDsKIAlzdGF0aWMgaW50IGluY2x1ZGVfYWxsOwotCWludCByZXQ7CisJaW50IHJldCA9IDA7CiAKIAlkcmhkID0gKHN0cnVjdCBhY3BpX2RtYXJfaGFyZHdhcmVfdW5pdCAqKSBkbWFydS0+aGRyOwogCkBAIC0yMTIsNyArMjEyLDcgQEAKIAkJaW5jbHVkZV9hbGwgPSAxOwogCX0KIAotCWlmIChyZXQgfHwgKGRtYXJ1LT5kZXZpY2VzX2NudCA9PSAwICYmICFkbWFydS0+aW5jbHVkZV9hbGwpKSB7CisJaWYgKHJldCkgewogCQlsaXN0X2RlbCgmZG1hcnUtPmxpc3QpOwogCQlrZnJlZShkbWFydSk7CiAJfQpAQCAtMjg5LDYgKzI4OSwyNCBAQAogCX0KIH0KIAorLyoqCisgKiBkbWFyX3RhYmxlX2RldGVjdCAtIGNoZWNrcyB0byBzZWUgaWYgdGhlIHBsYXRmb3JtIHN1cHBvcnRzIERNQVIgZGV2aWNlcworICovCitzdGF0aWMgaW50IF9faW5pdCBkbWFyX3RhYmxlX2RldGVjdCh2b2lkKQoreworCWFjcGlfc3RhdHVzIHN0YXR1cyA9IEFFX09LOworCisJLyogaWYgd2UgY291bGQgZmluZCBETUFSIHRhYmxlLCB0aGVuIHRoZXJlIGFyZSBETUFSIGRldmljZXMgKi8KKwlzdGF0dXMgPSBhY3BpX2dldF90YWJsZShBQ1BJX1NJR19ETUFSLCAwLAorCQkJCShzdHJ1Y3QgYWNwaV90YWJsZV9oZWFkZXIgKiopJmRtYXJfdGJsKTsKKworCWlmIChBQ1BJX1NVQ0NFU1Moc3RhdHVzKSAmJiAhZG1hcl90YmwpIHsKKwkJcHJpbnRrIChLRVJOX1dBUk5JTkcgUFJFRklYICJVbmFibGUgdG8gbWFwIERNQVJcbiIpOworCQlzdGF0dXMgPSBBRV9OT1RfRk9VTkQ7CisJfQorCisJcmV0dXJuIChBQ1BJX1NVQ0NFU1Moc3RhdHVzKSA/IDEgOiAwKTsKK30KIAogLyoqCiAgKiBwYXJzZV9kbWFyX3RhYmxlIC0gcGFyc2VzIHRoZSBETUEgcmVwb3J0aW5nIHRhYmxlCkBAIC0zMDAsNiArMzE4LDEyIEBACiAJc3RydWN0IGFjcGlfZG1hcl9oZWFkZXIgKmVudHJ5X2hlYWRlcjsKIAlpbnQgcmV0ID0gMDsKIAorCS8qCisJICogRG8gaXQgYWdhaW4sIGVhcmxpZXIgZG1hcl90YmwgbWFwcGluZyBjb3VsZCBiZSBtYXBwZWQgd2l0aAorCSAqIGZpeGVkIG1hcC4KKwkgKi8KKwlkbWFyX3RhYmxlX2RldGVjdCgpOworCiAJZG1hciA9IChzdHJ1Y3QgYWNwaV90YWJsZV9kbWFyICopZG1hcl90Ymw7CiAJaWYgKCFkbWFyKQogCQlyZXR1cm4gLUVOT0RFVjsKQEAgLTM3MywxMCArMzk3LDEwIEBACiAKIGludCBfX2luaXQgZG1hcl9kZXZfc2NvcGVfaW5pdCh2b2lkKQogewotCXN0cnVjdCBkbWFyX2RyaGRfdW5pdCAqZHJoZDsKKwlzdHJ1Y3QgZG1hcl9kcmhkX3VuaXQgKmRyaGQsICpkcmhkX247CiAJaW50IHJldCA9IC1FTk9ERVY7CiAKLQlmb3JfZWFjaF9kcmhkX3VuaXQoZHJoZCkgeworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShkcmhkLCBkcmhkX24sICZkbWFyX2RyaGRfdW5pdHMsIGxpc3QpIHsKIAkJcmV0ID0gZG1hcl9wYXJzZV9kZXYoZHJoZCk7CiAJCWlmIChyZXQpCiAJCQlyZXR1cm4gcmV0OwpAQCAtMzg0LDggKzQwOCw4IEBACiAKICNpZmRlZiBDT05GSUdfRE1BUgogCXsKLQkJc3RydWN0IGRtYXJfcm1ycl91bml0ICpybXJyOwotCQlmb3JfZWFjaF9ybXJyX3VuaXRzKHJtcnIpIHsKKwkJc3RydWN0IGRtYXJfcm1ycl91bml0ICpybXJyLCAqcm1ycl9uOworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocm1yciwgcm1ycl9uLCAmZG1hcl9ybXJyX3VuaXRzLCBsaXN0KSB7CiAJCQlyZXQgPSBybXJyX3BhcnNlX2RldihybXJyKTsKIAkJCWlmIChyZXQpCiAJCQkJcmV0dXJuIHJldDsKQEAgLTQzMCwzMCArNDU0LDExIEBACiAJcmV0dXJuIDA7CiB9CiAKLS8qKgotICogZWFybHlfZG1hcl9kZXRlY3QgLSBjaGVja3MgdG8gc2VlIGlmIHRoZSBwbGF0Zm9ybSBzdXBwb3J0cyBETUFSIGRldmljZXMKLSAqLwotaW50IF9faW5pdCBlYXJseV9kbWFyX2RldGVjdCh2b2lkKQotewotCWFjcGlfc3RhdHVzIHN0YXR1cyA9IEFFX09LOwotCi0JLyogaWYgd2UgY291bGQgZmluZCBETUFSIHRhYmxlLCB0aGVuIHRoZXJlIGFyZSBETUFSIGRldmljZXMgKi8KLQlzdGF0dXMgPSBhY3BpX2dldF90YWJsZShBQ1BJX1NJR19ETUFSLCAwLAotCQkJCShzdHJ1Y3QgYWNwaV90YWJsZV9oZWFkZXIgKiopJmRtYXJfdGJsKTsKLQotCWlmIChBQ1BJX1NVQ0NFU1Moc3RhdHVzKSAmJiAhZG1hcl90YmwpIHsKLQkJcHJpbnRrIChLRVJOX1dBUk5JTkcgUFJFRklYICJVbmFibGUgdG8gbWFwIERNQVJcbiIpOwotCQlzdGF0dXMgPSBBRV9OT1RfRk9VTkQ7Ci0JfQotCi0JcmV0dXJuIChBQ1BJX1NVQ0NFU1Moc3RhdHVzKSA/IDEgOiAwKTsKLX0KLQogdm9pZCBfX2luaXQgZGV0ZWN0X2ludGVsX2lvbW11KHZvaWQpCiB7CiAJaW50IHJldDsKIAotCXJldCA9IGVhcmx5X2RtYXJfZGV0ZWN0KCk7CisJcmV0ID0gZG1hcl90YWJsZV9kZXRlY3QoKTsKIAogI2lmZGVmIENPTkZJR19ETUFSCiAJewpAQCAtNDc5LDE0ICs0ODQsMTYgQEAKIAkJCSAgICAgICAiIHgyYXBpYyBzdXBwb3J0XG4iKTsKIAogCQkJZG1hcl9kaXNhYmxlZCA9IDE7Ci0JCQlyZXR1cm47CisJCQlnb3RvIGVuZDsKIAkJfQogCiAJCWlmIChyZXQgJiYgIW5vX2lvbW11ICYmICFpb21tdV9kZXRlY3RlZCAmJiAhc3dpb3RsYiAmJgogCQkgICAgIWRtYXJfZGlzYWJsZWQpCiAJCQlpb21tdV9kZXRlY3RlZCA9IDE7CiAJfQorZW5kOgogI2VuZGlmCisJZG1hcl90YmwgPSBOVUxMOwogfQogCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvaWJtcGhwX2ViZGEuYyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvaWJtcGhwX2ViZGEuYwppbmRleCA4NDY3ZDAyLi43ZDI3NjMxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9ob3RwbHVnL2libXBocF9lYmRhLmMKKysrIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9pYm1waHBfZWJkYS5jCkBAIC0yNzYsNyArMjc2LDcgQEAKIAlpb3VubWFwIChpb19tZW0pOwogCWRlYnVnICgicmV0dXJuZWQgZWJkYSBzZWdtZW50OiAleFxuIiwgZWJkYV9zZWcpOwogCQotCWlvX21lbSA9IGlvcmVtYXAgKGViZGFfc2VnPDw0LCA2NTAwMCk7CisJaW9fbWVtID0gaW9yZW1hcChlYmRhX3NlZzw8NCwgMTAyNCk7CiAJaWYgKCFpb19tZW0gKQogCQlyZXR1cm4gLUVOT01FTTsKIAluZXh0X29mZnNldCA9IDB4MTgwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvaG90cGx1Zy9ycGFwaHBfc2xvdC5jIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9ycGFwaHBfc2xvdC5jCmluZGV4IDliNzE0ZWEuLjUwODg0NTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvcnBhcGhwX3Nsb3QuYworKysgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL3JwYXBocF9zbG90LmMKQEAgLTE0Nyw5ICsxNDcsNSBAQAogCWxpc3RfYWRkKCZzbG90LT5ycGFwaHBfc2xvdF9saXN0LCAmcnBhcGhwX3Nsb3RfaGVhZCk7CiAJaW5mbygiU2xvdCBbJXNdIHJlZ2lzdGVyZWRcbiIsIHNsb3QtPm5hbWUpOwogCXJldHVybiAwOwotCi1zeXNmc19mYWlsOgotCXBjaV9ocF9kZXJlZ2lzdGVyKHBocF9zbG90KTsKLQlyZXR1cm4gcmV0dmFsOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9odGlycS5jIGIvZHJpdmVycy9wY2kvaHRpcnEuYwppbmRleCAyNzljOTQwLi5iZjdkNmNlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9odGlycS5jCisrKyBiL2RyaXZlcnMvcGNpL2h0aXJxLmMKQEAgLTEyNiw3ICsxMjYsOCBAQAogCWNmZy0+bXNnLmFkZHJlc3NfaGkgPSAweGZmZmZmZmZmOwogCiAJaXJxID0gY3JlYXRlX2lycSgpOwotCWlmIChpcnEgPCAwKSB7CisKKwlpZiAoaXJxIDw9IDApIHsKIAkJa2ZyZWUoY2ZnKTsKIAkJcmV0dXJuIC1FQlVTWTsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9pbnRlbC1pb21tdS5jIGIvZHJpdmVycy9wY2kvaW50ZWwtaW9tbXUuYwppbmRleCAzODlmZGQ2Li44YjUxZTEwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9pbnRlbC1pb21tdS5jCisrKyBiL2RyaXZlcnMvcGNpL2ludGVsLWlvbW11LmMKQEAgLTMzLDggKzMzLDggQEAKICNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgogI2luY2x1ZGUgPGxpbnV4L21lbXBvb2wuaD4KICNpbmNsdWRlIDxsaW51eC90aW1lci5oPgotI2luY2x1ZGUgImlvdmEuaCIKLSNpbmNsdWRlICJpbnRlbC1pb21tdS5oIgorI2luY2x1ZGUgPGxpbnV4L2lvdmEuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlbC1pb21tdS5oPgogI2luY2x1ZGUgPGFzbS9wcm90by5oPiAvKiBmb3JjZV9pb21tdSBpbiB0aGlzIGhlYWRlciBpbiB4ODYtNjQqLwogI2luY2x1ZGUgPGFzbS9jYWNoZWZsdXNoLmg+CiAjaW5jbHVkZSA8YXNtL2lvbW11Lmg+CkBAIC0xNTYsNyArMTU2LDcgQEAKIAlyZXR1cm4gaW9tbXVfa21lbV9jYWNoZV9hbGxvYyhpb21tdV9kb21haW5fY2FjaGUpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgZnJlZV9kb21haW5fbWVtKHZvaWQgKnZhZGRyKQorc3RhdGljIHZvaWQgZnJlZV9kb21haW5fbWVtKHZvaWQgKnZhZGRyKQogewogCWttZW1fY2FjaGVfZnJlZShpb21tdV9kb21haW5fY2FjaGUsIHZhZGRyKTsKIH0KQEAgLTU2Myw3ICs1NjMsNyBAQAogCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9tbXUtPnJlZ2lzdGVyX2xvY2ssIGZsYWcpOwogCi0JLyogZmx1c2ggY29udGV4dCBlbnRyeSB3aWxsIGltcGxpY3RseSBmbHVzaCB3cml0ZSBidWZmZXIgKi8KKwkvKiBmbHVzaCBjb250ZXh0IGVudHJ5IHdpbGwgaW1wbGljaXRseSBmbHVzaCB3cml0ZSBidWZmZXIgKi8KIAlyZXR1cm4gMDsKIH0KIApAQCAtNjU2LDcgKzY1Niw3IEBACiAJaWYgKERNQV9UTEJfSUFJRyh2YWwpICE9IERNQV9UTEJfSUlSRyh0eXBlKSkKIAkJcHJfZGVidWcoIklPTU1VOiB0bGIgZmx1c2ggcmVxdWVzdCAlTHgsIGFjdHVhbCAlTHhcbiIsCiAJCQlETUFfVExCX0lJUkcodHlwZSksIERNQV9UTEJfSUFJRyh2YWwpKTsKLQkvKiBmbHVzaCBjb250ZXh0IGVudHJ5IHdpbGwgaW1wbGljdGx5IGZsdXNoIHdyaXRlIGJ1ZmZlciAqLworCS8qIGZsdXNoIGlvdGxiIGVudHJ5IHdpbGwgaW1wbGljaXRseSBmbHVzaCB3cml0ZSBidWZmZXIgKi8KIAlyZXR1cm4gMDsKIH0KIApAQCAtMTM0MSw3ICsxMzQxLDcgQEAKICAqIGZpbmRfZG9tYWluCiAgKiBOb3RlOiB3ZSB1c2Ugc3RydWN0IHBjaV9kZXYtPmRldi5hcmNoZGF0YS5pb21tdSBzdG9yZXMgdGhlIGluZm8KICAqLwotc3RydWN0IGRtYXJfZG9tYWluICoKK3N0YXRpYyBzdHJ1Y3QgZG1hcl9kb21haW4gKgogZmluZF9kb21haW4oc3RydWN0IHBjaV9kZXYgKnBkZXYpCiB7CiAJc3RydWN0IGRldmljZV9kb21haW5faW5mbyAqaW5mbzsKQEAgLTIzMTgsMyArMjMxOCwxMTEgQEAKIAlyZXR1cm4gMDsKIH0KIAordm9pZCBpbnRlbF9pb21tdV9kb21haW5fZXhpdChzdHJ1Y3QgZG1hcl9kb21haW4gKmRvbWFpbikKK3sKKwl1NjQgZW5kOworCisJLyogRG9tYWluIDAgaXMgcmVzZXJ2ZWQsIHNvIGRvbnQgcHJvY2VzcyBpdCAqLworCWlmICghZG9tYWluKQorCQlyZXR1cm47CisKKwllbmQgPSBET01BSU5fTUFYX0FERFIoZG9tYWluLT5nYXcpOworCWVuZCA9IGVuZCAmICh+UEFHRV9NQVNLXzRLKTsKKworCS8qIGNsZWFyIHB0ZXMgKi8KKwlkbWFfcHRlX2NsZWFyX3JhbmdlKGRvbWFpbiwgMCwgZW5kKTsKKworCS8qIGZyZWUgcGFnZSB0YWJsZXMgKi8KKwlkbWFfcHRlX2ZyZWVfcGFnZXRhYmxlKGRvbWFpbiwgMCwgZW5kKTsKKworCWlvbW11X2ZyZWVfZG9tYWluKGRvbWFpbik7CisJZnJlZV9kb21haW5fbWVtKGRvbWFpbik7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChpbnRlbF9pb21tdV9kb21haW5fZXhpdCk7CisKK3N0cnVjdCBkbWFyX2RvbWFpbiAqaW50ZWxfaW9tbXVfZG9tYWluX2FsbG9jKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQoreworCXN0cnVjdCBkbWFyX2RyaGRfdW5pdCAqZHJoZDsKKwlzdHJ1Y3QgZG1hcl9kb21haW4gKmRvbWFpbjsKKwlzdHJ1Y3QgaW50ZWxfaW9tbXUgKmlvbW11OworCisJZHJoZCA9IGRtYXJfZmluZF9tYXRjaGVkX2RyaGRfdW5pdChwZGV2KTsKKwlpZiAoIWRyaGQpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJpbnRlbF9pb21tdV9kb21haW5fYWxsb2M6IGRyaGQgPT0gTlVMTFxuIik7CisJCXJldHVybiBOVUxMOworCX0KKworCWlvbW11ID0gZHJoZC0+aW9tbXU7CisJaWYgKCFpb21tdSkgeworCQlwcmludGsoS0VSTl9FUlIKKwkJCSJpbnRlbF9pb21tdV9kb21haW5fYWxsb2M6IGlvbW11ID09IE5VTExcbiIpOworCQlyZXR1cm4gTlVMTDsKKwl9CisJZG9tYWluID0gaW9tbXVfYWxsb2NfZG9tYWluKGlvbW11KTsKKwlpZiAoIWRvbWFpbikgeworCQlwcmludGsoS0VSTl9FUlIKKwkJCSJpbnRlbF9pb21tdV9kb21haW5fYWxsb2M6IGRvbWFpbiA9PSBOVUxMXG4iKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCWlmIChkb21haW5faW5pdChkb21haW4sIERFRkFVTFRfRE9NQUlOX0FERFJFU1NfV0lEVEgpKSB7CisJCXByaW50ayhLRVJOX0VSUgorCQkJImludGVsX2lvbW11X2RvbWFpbl9hbGxvYzogZG9tYWluX2luaXQoKSBmYWlsZWRcbiIpOworCQlpbnRlbF9pb21tdV9kb21haW5fZXhpdChkb21haW4pOworCQlyZXR1cm4gTlVMTDsKKwl9CisJcmV0dXJuIGRvbWFpbjsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGludGVsX2lvbW11X2RvbWFpbl9hbGxvYyk7CisKK2ludCBpbnRlbF9pb21tdV9jb250ZXh0X21hcHBpbmcoCisJc3RydWN0IGRtYXJfZG9tYWluICpkb21haW4sIHN0cnVjdCBwY2lfZGV2ICpwZGV2KQoreworCWludCByYzsKKwlyYyA9IGRvbWFpbl9jb250ZXh0X21hcHBpbmcoZG9tYWluLCBwZGV2KTsKKwlyZXR1cm4gcmM7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChpbnRlbF9pb21tdV9jb250ZXh0X21hcHBpbmcpOworCitpbnQgaW50ZWxfaW9tbXVfcGFnZV9tYXBwaW5nKAorCXN0cnVjdCBkbWFyX2RvbWFpbiAqZG9tYWluLCBkbWFfYWRkcl90IGlvdmEsCisJdTY0IGhwYSwgc2l6ZV90IHNpemUsIGludCBwcm90KQoreworCWludCByYzsKKwlyYyA9IGRvbWFpbl9wYWdlX21hcHBpbmcoZG9tYWluLCBpb3ZhLCBocGEsIHNpemUsIHByb3QpOworCXJldHVybiByYzsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGludGVsX2lvbW11X3BhZ2VfbWFwcGluZyk7CisKK3ZvaWQgaW50ZWxfaW9tbXVfZGV0YWNoX2RldihzdHJ1Y3QgZG1hcl9kb21haW4gKmRvbWFpbiwgdTggYnVzLCB1OCBkZXZmbikKK3sKKwlkZXRhY2hfZG9tYWluX2Zvcl9kZXYoZG9tYWluLCBidXMsIGRldmZuKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGludGVsX2lvbW11X2RldGFjaF9kZXYpOworCitzdHJ1Y3QgZG1hcl9kb21haW4gKgoraW50ZWxfaW9tbXVfZmluZF9kb21haW4oc3RydWN0IHBjaV9kZXYgKnBkZXYpCit7CisJcmV0dXJuIGZpbmRfZG9tYWluKHBkZXYpOworfQorRVhQT1JUX1NZTUJPTF9HUEwoaW50ZWxfaW9tbXVfZmluZF9kb21haW4pOworCitpbnQgaW50ZWxfaW9tbXVfZm91bmQodm9pZCkKK3sKKwlyZXR1cm4gZ19udW1fb2ZfaW9tbXVzOworfQorRVhQT1JUX1NZTUJPTF9HUEwoaW50ZWxfaW9tbXVfZm91bmQpOworCit1NjQgaW50ZWxfaW9tbXVfaW92YV90b19wZm4oc3RydWN0IGRtYXJfZG9tYWluICpkb21haW4sIHU2NCBpb3ZhKQoreworCXN0cnVjdCBkbWFfcHRlICpwdGU7CisJdTY0IHBmbjsKKworCXBmbiA9IDA7CisJcHRlID0gYWRkcl90b19kbWFfcHRlKGRvbWFpbiwgaW92YSk7CisKKwlpZiAocHRlKQorCQlwZm4gPSBkbWFfcHRlX2FkZHIoKnB0ZSk7CisKKwlyZXR1cm4gcGZuID4+IFBBR0VfU0hJRlRfNEs7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChpbnRlbF9pb21tdV9pb3ZhX3RvX3Bmbik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9pbnRlbC1pb21tdS5oIGIvZHJpdmVycy9wY2kvaW50ZWwtaW9tbXUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjE0MmMwMS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3BjaS9pbnRlbC1pb21tdS5oCisrKyAvZGV2L251bGwKQEAgLTEsMzA3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYsIEludGVsIENvcnBvcmF0aW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0Ci0gKiB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAotICogdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCi0gKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKLSAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKLSAqIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCi0gKiB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlCi0gKiBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQS4KLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAwOCBJbnRlbCBDb3Jwb3JhdGlvbgotICogQXV0aG9yOiBBc2hvayBSYWogPGFzaG9rLnJhakBpbnRlbC5jb20+Ci0gKiBBdXRob3I6IEFuaWwgUyBLZXNoYXZhbXVydGh5IDxhbmlsLnMua2VzaGF2YW11cnRoeUBpbnRlbC5jb20+Ci0gKi8KLQotI2lmbmRlZiBfSU5URUxfSU9NTVVfSF8KLSNkZWZpbmUgX0lOVEVMX0lPTU1VX0hfCi0KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGxpbnV4L21zaS5oPgotI2luY2x1ZGUgPGxpbnV4L3N5c2Rldi5oPgotI2luY2x1ZGUgImlvdmEuaCIKLSNpbmNsdWRlIDxsaW51eC9pby5oPgotI2luY2x1ZGUgPGFzbS9jYWNoZWZsdXNoLmg+Ci0jaW5jbHVkZSAiZG1hX3JlbWFwcGluZy5oIgotCi0vKgotICogSW50ZWwgSU9NTVUgcmVnaXN0ZXIgc3BlY2lmaWNhdGlvbiBwZXIgdmVyc2lvbiAxLjAgcHVibGljIHNwZWMuCi0gKi8KLQotI2RlZmluZQlETUFSX1ZFUl9SRUcJMHgwCS8qIEFyY2ggdmVyc2lvbiBzdXBwb3J0ZWQgYnkgdGhpcyBJT01NVSAqLwotI2RlZmluZQlETUFSX0NBUF9SRUcJMHg4CS8qIEhhcmR3YXJlIHN1cHBvcnRlZCBjYXBhYmlsaXRpZXMgKi8KLSNkZWZpbmUJRE1BUl9FQ0FQX1JFRwkweDEwCS8qIEV4dGVuZGVkIGNhcGFiaWxpdGllcyBzdXBwb3J0ZWQgKi8KLSNkZWZpbmUJRE1BUl9HQ01EX1JFRwkweDE4CS8qIEdsb2JhbCBjb21tYW5kIHJlZ2lzdGVyICovCi0jZGVmaW5lCURNQVJfR1NUU19SRUcJMHgxYwkvKiBHbG9iYWwgc3RhdHVzIHJlZ2lzdGVyICovCi0jZGVmaW5lCURNQVJfUlRBRERSX1JFRwkweDIwCS8qIFJvb3QgZW50cnkgdGFibGUgKi8KLSNkZWZpbmUJRE1BUl9DQ01EX1JFRwkweDI4CS8qIENvbnRleHQgY29tbWFuZCByZWcgKi8KLSNkZWZpbmUJRE1BUl9GU1RTX1JFRwkweDM0CS8qIEZhdWx0IFN0YXR1cyByZWdpc3RlciAqLwotI2RlZmluZQlETUFSX0ZFQ1RMX1JFRwkweDM4CS8qIEZhdWx0IGNvbnRyb2wgcmVnaXN0ZXIgKi8KLSNkZWZpbmUJRE1BUl9GRURBVEFfUkVHCTB4M2MJLyogRmF1bHQgZXZlbnQgaW50ZXJydXB0IGRhdGEgcmVnaXN0ZXIgKi8KLSNkZWZpbmUJRE1BUl9GRUFERFJfUkVHCTB4NDAJLyogRmF1bHQgZXZlbnQgaW50ZXJydXB0IGFkZHIgcmVnaXN0ZXIgKi8KLSNkZWZpbmUJRE1BUl9GRVVBRERSX1JFRyAweDQ0CS8qIFVwcGVyIGFkZHJlc3MgcmVnaXN0ZXIgKi8KLSNkZWZpbmUJRE1BUl9BRkxPR19SRUcJMHg1OAkvKiBBZHZhbmNlZCBGYXVsdCBjb250cm9sICovCi0jZGVmaW5lCURNQVJfUE1FTl9SRUcJMHg2NAkvKiBFbmFibGUgUHJvdGVjdGVkIE1lbW9yeSBSZWdpb24gKi8KLSNkZWZpbmUJRE1BUl9QTE1CQVNFX1JFRyAweDY4CS8qIFBNUlIgTG93IGFkZHIgKi8KLSNkZWZpbmUJRE1BUl9QTE1MSU1JVF9SRUcgMHg2YwkvKiBQTVJSIGxvdyBsaW1pdCAqLwotI2RlZmluZQlETUFSX1BITUJBU0VfUkVHIDB4NzAJLyogcG1yciBoaWdoIGJhc2UgYWRkciAqLwotI2RlZmluZQlETUFSX1BITUxJTUlUX1JFRyAweDc4CS8qIHBtcnIgaGlnaCBsaW1pdCAqLwotI2RlZmluZSBETUFSX0lRSF9SRUcJMHg4MAkvKiBJbnZhbGlkYXRpb24gcXVldWUgaGVhZCByZWdpc3RlciAqLwotI2RlZmluZSBETUFSX0lRVF9SRUcJMHg4OAkvKiBJbnZhbGlkYXRpb24gcXVldWUgdGFpbCByZWdpc3RlciAqLwotI2RlZmluZSBETUFSX0lRQV9SRUcJMHg5MAkvKiBJbnZhbGlkYXRpb24gcXVldWUgYWRkciByZWdpc3RlciAqLwotI2RlZmluZSBETUFSX0lDU19SRUcJMHg5OAkvKiBJbnZhbGlkYXRpb24gY29tcGxldGUgc3RhdHVzIHJlZ2lzdGVyICovCi0jZGVmaW5lIERNQVJfSVJUQV9SRUcJMHhiOCAgICAvKiBJbnRlcnJ1cHQgcmVtYXBwaW5nIHRhYmxlIGFkZHIgcmVnaXN0ZXIgKi8KLQotI2RlZmluZSBPRkZTRVRfU1RSSURFCQkoOSkKLS8qCi0jZGVmaW5lIGRtYXJfcmVhZGwoZG1hciwgcmVnKSByZWFkbChkbWFyICsgcmVnKQotI2RlZmluZSBkbWFyX3JlYWRxKGRtYXIsIHJlZykgKHsgXAotCQl1MzIgbG8sIGhpOyBcCi0JCWxvID0gcmVhZGwoZG1hciArIHJlZyk7IFwKLQkJaGkgPSByZWFkbChkbWFyICsgcmVnICsgNCk7IFwKLQkJKCgodTY0KSBoaSkgPDwgMzIpICsgbG87IH0pCi0qLwotc3RhdGljIGlubGluZSB1NjQgZG1hcl9yZWFkcSh2b2lkIF9faW9tZW0gKmFkZHIpCi17Ci0JdTMyIGxvLCBoaTsKLQlsbyA9IHJlYWRsKGFkZHIpOwotCWhpID0gcmVhZGwoYWRkciArIDQpOwotCXJldHVybiAoKCh1NjQpIGhpKSA8PCAzMikgKyBsbzsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGRtYXJfd3JpdGVxKHZvaWQgX19pb21lbSAqYWRkciwgdTY0IHZhbCkKLXsKLQl3cml0ZWwoKHUzMil2YWwsIGFkZHIpOwotCXdyaXRlbCgodTMyKSh2YWwgPj4gMzIpLCBhZGRyICsgNCk7Ci19Ci0KLSNkZWZpbmUgRE1BUl9WRVJfTUFKT1IodikJCSgoKHYpICYgMHhmMCkgPj4gNCkKLSNkZWZpbmUgRE1BUl9WRVJfTUlOT1IodikJCSgodikgJiAweDBmKQotCi0vKgotICogRGVjb2RpbmcgQ2FwYWJpbGl0eSBSZWdpc3RlcgotICovCi0jZGVmaW5lIGNhcF9yZWFkX2RyYWluKGMpCSgoKGMpID4+IDU1KSAmIDEpCi0jZGVmaW5lIGNhcF93cml0ZV9kcmFpbihjKQkoKChjKSA+PiA1NCkgJiAxKQotI2RlZmluZSBjYXBfbWF4X2FtYXNrX3ZhbChjKQkoKChjKSA+PiA0OCkgJiAweDNmKQotI2RlZmluZSBjYXBfbnVtX2ZhdWx0X3JlZ3MoYykJKCgoKGMpID4+IDQwKSAmIDB4ZmYpICsgMSkKLSNkZWZpbmUgY2FwX3Bnc2VsX2ludihjKQkoKChjKSA+PiAzOSkgJiAxKQotCi0jZGVmaW5lIGNhcF9zdXBlcl9wYWdlX3ZhbChjKQkoKChjKSA+PiAzNCkgJiAweGYpCi0jZGVmaW5lIGNhcF9zdXBlcl9vZmZzZXQoYykJKCgoZmluZF9maXJzdF9iaXQoJmNhcF9zdXBlcl9wYWdlX3ZhbChjKSwgNCkpIFwKLQkJCQkJKiBPRkZTRVRfU1RSSURFKSArIDIxKQotCi0jZGVmaW5lIGNhcF9mYXVsdF9yZWdfb2Zmc2V0KGMpCSgoKChjKSA+PiAyNCkgJiAweDNmZikgKiAxNikKLSNkZWZpbmUgY2FwX21heF9mYXVsdF9yZWdfb2Zmc2V0KGMpIFwKLQkoY2FwX2ZhdWx0X3JlZ19vZmZzZXQoYykgKyBjYXBfbnVtX2ZhdWx0X3JlZ3MoYykgKiAxNikKLQotI2RlZmluZSBjYXBfemxyKGMpCQkoKChjKSA+PiAyMikgJiAxKQotI2RlZmluZSBjYXBfaXNvY2goYykJCSgoKGMpID4+IDIzKSAmIDEpCi0jZGVmaW5lIGNhcF9tZ2F3KGMpCQkoKCgoYykgPj4gMTYpICYgMHgzZikgKyAxKQotI2RlZmluZSBjYXBfc2FnYXcoYykJCSgoKGMpID4+IDgpICYgMHgxZikKLSNkZWZpbmUgY2FwX2NhY2hpbmdfbW9kZShjKQkoKChjKSA+PiA3KSAmIDEpCi0jZGVmaW5lIGNhcF9waG1yKGMpCQkoKChjKSA+PiA2KSAmIDEpCi0jZGVmaW5lIGNhcF9wbG1yKGMpCQkoKChjKSA+PiA1KSAmIDEpCi0jZGVmaW5lIGNhcF9yd2JmKGMpCQkoKChjKSA+PiA0KSAmIDEpCi0jZGVmaW5lIGNhcF9hZmwoYykJCSgoKGMpID4+IDMpICYgMSkKLSNkZWZpbmUgY2FwX25kb21zKGMpCQkoKCh1bnNpZ25lZCBsb25nKTEpIDw8ICg0ICsgMiAqICgoYykgJiAweDcpKSkKLS8qCi0gKiBFeHRlbmRlZCBDYXBhYmlsaXR5IFJlZ2lzdGVyCi0gKi8KLQotI2RlZmluZSBlY2FwX25pb3RsYl9pdW5pdHMoZSkJKCgoKGUpID4+IDI0KSAmIDB4ZmYpICsgMSkKLSNkZWZpbmUgZWNhcF9pb3RsYl9vZmZzZXQoZSkgCSgoKChlKSA+PiA4KSAmIDB4M2ZmKSAqIDE2KQotI2RlZmluZSBlY2FwX21heF9pb3RsYl9vZmZzZXQoZSkgXAotCShlY2FwX2lvdGxiX29mZnNldChlKSArIGVjYXBfbmlvdGxiX2l1bml0cyhlKSAqIDE2KQotI2RlZmluZSBlY2FwX2NvaGVyZW50KGUpCSgoZSkgJiAweDEpCi0jZGVmaW5lIGVjYXBfcWlzKGUpCQkoKGUpICYgMHgyKQotI2RlZmluZSBlY2FwX2VpbV9zdXBwb3J0KGUpCSgoZSA+PiA0KSAmIDB4MSkKLSNkZWZpbmUgZWNhcF9pcl9zdXBwb3J0KGUpCSgoZSA+PiAzKSAmIDB4MSkKLSNkZWZpbmUgZWNhcF9tYXhfaGFuZGxlX21hc2soZSkgKChlID4+IDIwKSAmIDB4ZikKLQotCi0vKiBJT1RMQl9SRUcgKi8KLSNkZWZpbmUgRE1BX1RMQl9HTE9CQUxfRkxVU0ggKCgodTY0KTEpIDw8IDYwKQotI2RlZmluZSBETUFfVExCX0RTSV9GTFVTSCAoKCh1NjQpMikgPDwgNjApCi0jZGVmaW5lIERNQV9UTEJfUFNJX0ZMVVNIICgoKHU2NCkzKSA8PCA2MCkKLSNkZWZpbmUgRE1BX1RMQl9JSVJHKHR5cGUpICgodHlwZSA+PiA2MCkgJiA3KQotI2RlZmluZSBETUFfVExCX0lBSUcodmFsKSAoKCh2YWwpID4+IDU3KSAmIDcpCi0jZGVmaW5lIERNQV9UTEJfUkVBRF9EUkFJTiAoKCh1NjQpMSkgPDwgNDkpCi0jZGVmaW5lIERNQV9UTEJfV1JJVEVfRFJBSU4gKCgodTY0KTEpIDw8IDQ4KQotI2RlZmluZSBETUFfVExCX0RJRChpZCkJKCgodTY0KSgoaWQpICYgMHhmZmZmKSkgPDwgMzIpCi0jZGVmaW5lIERNQV9UTEJfSVZUICgoKHU2NCkxKSA8PCA2MykKLSNkZWZpbmUgRE1BX1RMQl9JSF9OT05MRUFGICgoKHU2NCkxKSA8PCA2KQotI2RlZmluZSBETUFfVExCX01BWF9TSVpFICgweDNmKQotCi0vKiBJTlZBTElEX0RFU0MgKi8KLSNkZWZpbmUgRE1BX0lEX1RMQl9HTE9CQUxfRkxVU0gJKCgodTY0KTEpIDw8IDMpCi0jZGVmaW5lIERNQV9JRF9UTEJfRFNJX0ZMVVNICSgoKHU2NCkyKSA8PCAzKQotI2RlZmluZSBETUFfSURfVExCX1BTSV9GTFVTSAkoKCh1NjQpMykgPDwgMykKLSNkZWZpbmUgRE1BX0lEX1RMQl9SRUFEX0RSQUlOCSgoKHU2NCkxKSA8PCA3KQotI2RlZmluZSBETUFfSURfVExCX1dSSVRFX0RSQUlOCSgoKHU2NCkxKSA8PCA2KQotI2RlZmluZSBETUFfSURfVExCX0RJRChpZCkJKCgodTY0KSgoaWQgJiAweGZmZmYpIDw8IDE2KSkpCi0jZGVmaW5lIERNQV9JRF9UTEJfSUhfTk9OTEVBRgkoKCh1NjQpMSkgPDwgNikKLSNkZWZpbmUgRE1BX0lEX1RMQl9BRERSKGFkZHIpCShhZGRyKQotI2RlZmluZSBETUFfSURfVExCX0FERFJfTUFTSyhtYXNrKQkobWFzaykKLQotLyogUE1FTl9SRUcgKi8KLSNkZWZpbmUgRE1BX1BNRU5fRVBNICgoKHUzMikxKTw8MzEpCi0jZGVmaW5lIERNQV9QTUVOX1BSUyAoKCh1MzIpMSk8PDApCi0KLS8qIEdDTURfUkVHICovCi0jZGVmaW5lIERNQV9HQ01EX1RFICgoKHUzMikxKSA8PCAzMSkKLSNkZWZpbmUgRE1BX0dDTURfU1JUUCAoKCh1MzIpMSkgPDwgMzApCi0jZGVmaW5lIERNQV9HQ01EX1NGTCAoKCh1MzIpMSkgPDwgMjkpCi0jZGVmaW5lIERNQV9HQ01EX0VBRkwgKCgodTMyKTEpIDw8IDI4KQotI2RlZmluZSBETUFfR0NNRF9XQkYgKCgodTMyKTEpIDw8IDI3KQotI2RlZmluZSBETUFfR0NNRF9RSUUgKCgodTMyKTEpIDw8IDI2KQotI2RlZmluZSBETUFfR0NNRF9TSVJUUCAoKCh1MzIpMSkgPDwgMjQpCi0jZGVmaW5lIERNQV9HQ01EX0lSRSAoKCh1MzIpIDEpIDw8IDI1KQotCi0vKiBHU1RTX1JFRyAqLwotI2RlZmluZSBETUFfR1NUU19URVMgKCgodTMyKTEpIDw8IDMxKQotI2RlZmluZSBETUFfR1NUU19SVFBTICgoKHUzMikxKSA8PCAzMCkKLSNkZWZpbmUgRE1BX0dTVFNfRkxTICgoKHUzMikxKSA8PCAyOSkKLSNkZWZpbmUgRE1BX0dTVFNfQUZMUyAoKCh1MzIpMSkgPDwgMjgpCi0jZGVmaW5lIERNQV9HU1RTX1dCRlMgKCgodTMyKTEpIDw8IDI3KQotI2RlZmluZSBETUFfR1NUU19RSUVTICgoKHUzMikxKSA8PCAyNikKLSNkZWZpbmUgRE1BX0dTVFNfSVJUUFMgKCgodTMyKTEpIDw8IDI0KQotI2RlZmluZSBETUFfR1NUU19JUkVTICgoKHUzMikxKSA8PCAyNSkKLQotLyogQ0NNRF9SRUcgKi8KLSNkZWZpbmUgRE1BX0NDTURfSUNDICgoKHU2NCkxKSA8PCA2MykKLSNkZWZpbmUgRE1BX0NDTURfR0xPQkFMX0lOVkwgKCgodTY0KTEpIDw8IDYxKQotI2RlZmluZSBETUFfQ0NNRF9ET01BSU5fSU5WTCAoKCh1NjQpMikgPDwgNjEpCi0jZGVmaW5lIERNQV9DQ01EX0RFVklDRV9JTlZMICgoKHU2NCkzKSA8PCA2MSkKLSNkZWZpbmUgRE1BX0NDTURfRk0obSkgKCgodTY0KSgobSkgJiAweDMpKSA8PCAzMikKLSNkZWZpbmUgRE1BX0NDTURfTUFTS19OT0JJVCAwCi0jZGVmaW5lIERNQV9DQ01EX01BU0tfMUJJVCAxCi0jZGVmaW5lIERNQV9DQ01EX01BU0tfMkJJVCAyCi0jZGVmaW5lIERNQV9DQ01EX01BU0tfM0JJVCAzCi0jZGVmaW5lIERNQV9DQ01EX1NJRChzKSAoKCh1NjQpKChzKSAmIDB4ZmZmZikpIDw8IDE2KQotI2RlZmluZSBETUFfQ0NNRF9ESUQoZCkgKCh1NjQpKChkKSAmIDB4ZmZmZikpCi0KLS8qIEZFQ1RMX1JFRyAqLwotI2RlZmluZSBETUFfRkVDVExfSU0gKCgodTMyKTEpIDw8IDMxKQotCi0vKiBGU1RTX1JFRyAqLwotI2RlZmluZSBETUFfRlNUU19QUEYgKCh1MzIpMikKLSNkZWZpbmUgRE1BX0ZTVFNfUEZPICgodTMyKTEpCi0jZGVmaW5lIGRtYV9mc3RzX2ZhdWx0X3JlY29yZF9pbmRleChzKSAoKChzKSA+PiA4KSAmIDB4ZmYpCi0KLS8qIEZSQ0RfUkVHLCAzMiBiaXRzIGFjY2VzcyAqLwotI2RlZmluZSBETUFfRlJDRF9GICgoKHUzMikxKSA8PCAzMSkKLSNkZWZpbmUgZG1hX2ZyY2RfdHlwZShkKSAoKGQgPj4gMzApICYgMSkKLSNkZWZpbmUgZG1hX2ZyY2RfZmF1bHRfcmVhc29uKGMpIChjICYgMHhmZikKLSNkZWZpbmUgZG1hX2ZyY2Rfc291cmNlX2lkKGMpIChjICYgMHhmZmZmKQotI2RlZmluZSBkbWFfZnJjZF9wYWdlX2FkZHIoZCkgKGQgJiAoKCh1NjQpLTEpIDw8IDEyKSkgLyogbG93IDY0IGJpdCAqLwotCi0jZGVmaW5lIERNQVJfT1BFUkFUSU9OX1RJTUVPVVQgKChjeWNsZXNfdCkgdHNjX2toeioxMCoxMDAwKSAvKiAxMHNlYyAqLwotCi0jZGVmaW5lIElPTU1VX1dBSVRfT1AoaW9tbXUsIG9mZnNldCwgb3AsIGNvbmQsIHN0cykgXAote1wKLQljeWNsZXNfdCBzdGFydF90aW1lID0gZ2V0X2N5Y2xlcygpO1wKLQl3aGlsZSAoMSkge1wKLQkJc3RzID0gb3AgKGlvbW11LT5yZWcgKyBvZmZzZXQpO1wKLQkJaWYgKGNvbmQpXAotCQkJYnJlYWs7XAotCQlpZiAoRE1BUl9PUEVSQVRJT05fVElNRU9VVCA8IChnZXRfY3ljbGVzKCkgLSBzdGFydF90aW1lKSlcCi0JCQlwYW5pYygiRE1BUiBoYXJkd2FyZSBpcyBtYWxmdW5jdGlvbmluZ1xuIik7XAotCQljcHVfcmVsYXgoKTtcCi0JfVwKLX0KLQotI2RlZmluZSBRSV9MRU5HVEgJMjU2CS8qIHF1ZXVlIGxlbmd0aCAqLwotCi1lbnVtIHsKLQlRSV9GUkVFLAotCVFJX0lOX1VTRSwKLQlRSV9ET05FCi19OwotCi0jZGVmaW5lIFFJX0NDX1RZUEUJCTB4MQotI2RlZmluZSBRSV9JT1RMQl9UWVBFCQkweDIKLSNkZWZpbmUgUUlfRElPVExCX1RZUEUJCTB4MwotI2RlZmluZSBRSV9JRUNfVFlQRQkJMHg0Ci0jZGVmaW5lIFFJX0lXRF9UWVBFCQkweDUKLQotI2RlZmluZSBRSV9JRUNfU0VMRUNUSVZFCSgoKHU2NCkxKSA8PCA0KQotI2RlZmluZSBRSV9JRUNfSUlERVgoaWR4KQkoKCh1NjQpKGlkeCAmIDB4ZmZmZikgPDwgMzIpKQotI2RlZmluZSBRSV9JRUNfSU0obSkJCSgoKHU2NCkobSAmIDB4MWYpIDw8IDI3KSkKLQotI2RlZmluZSBRSV9JV0RfU1RBVFVTX0RBVEEoZCkJKCgodTY0KWQpIDw8IDMyKQotI2RlZmluZSBRSV9JV0RfU1RBVFVTX1dSSVRFCSgoKHU2NCkxKSA8PCA1KQotCi1zdHJ1Y3QgcWlfZGVzYyB7Ci0JdTY0IGxvdywgaGlnaDsKLX07Ci0KLXN0cnVjdCBxX2ludmFsIHsKLQlzcGlubG9ja190ICAgICAgcV9sb2NrOwotCXN0cnVjdCBxaV9kZXNjICAqZGVzYzsgICAgICAgICAgLyogaW52YWxpZGF0aW9uIHF1ZXVlICovCi0JaW50ICAgICAgICAgICAgICpkZXNjX3N0YXR1czsgICAvKiBkZXNjIHN0YXR1cyAqLwotCWludCAgICAgICAgICAgICBmcmVlX2hlYWQ7ICAgICAgLyogZmlyc3QgZnJlZSBlbnRyeSAqLwotCWludCAgICAgICAgICAgICBmcmVlX3RhaWw7ICAgICAgLyogbGFzdCBmcmVlIGVudHJ5ICovCi0JaW50ICAgICAgICAgICAgIGZyZWVfY250OwotfTsKLQotI2lmZGVmIENPTkZJR19JTlRSX1JFTUFQCi0vKiAxTUIgLSBtYXhpbXVtIHBvc3NpYmxlIGludGVycnVwdCByZW1hcHBpbmcgdGFibGUgc2l6ZSAqLwotI2RlZmluZSBJTlRSX1JFTUFQX1BBR0VfT1JERVIJOAotI2RlZmluZSBJTlRSX1JFTUFQX1RBQkxFX1JFR19TSVpFCTB4ZgotCi0jZGVmaW5lIElOVFJfUkVNQVBfVEFCTEVfRU5UUklFUwk2NTUzNgotCi1zdHJ1Y3QgaXJfdGFibGUgewotCXN0cnVjdCBpcnRlICpiYXNlOwotfTsKLSNlbmRpZgotCi1zdHJ1Y3QgaW50ZWxfaW9tbXUgewotCXZvaWQgX19pb21lbQkqcmVnOyAvKiBQb2ludGVyIHRvIGhhcmR3YXJlIHJlZ3MsIHZpcnR1YWwgYWRkciAqLwotCXU2NAkJY2FwOwotCXU2NAkJZWNhcDsKLQlpbnQJCXNlZzsKLQl1MzIJCWdjbWQ7IC8qIEhvbGRzIFRFLCBFQUZMLiBEb24ndCBuZWVkIFNSVFAsIFNGTCwgV0JGICovCi0Jc3BpbmxvY2tfdAlyZWdpc3Rlcl9sb2NrOyAvKiBwcm90ZWN0IHJlZ2lzdGVyIGhhbmRsaW5nICovCi0JaW50CQlzZXFfaWQ7CS8qIHNlcXVlbmNlIGlkIG9mIHRoZSBpb21tdSAqLwotCi0jaWZkZWYgQ09ORklHX0RNQVIKLQl1bnNpZ25lZCBsb25nIAkqZG9tYWluX2lkczsgLyogYml0bWFwIG9mIGRvbWFpbnMgKi8KLQlzdHJ1Y3QgZG1hcl9kb21haW4gKipkb21haW5zOyAvKiBwdHIgdG8gZG9tYWlucyAqLwotCXNwaW5sb2NrX3QJbG9jazsgLyogcHJvdGVjdCBjb250ZXh0LCBkb21haW4gaWRzICovCi0Jc3RydWN0IHJvb3RfZW50cnkgKnJvb3RfZW50cnk7IC8qIHZpcnR1YWwgYWRkcmVzcyAqLwotCi0JdW5zaWduZWQgaW50IGlycTsKLQl1bnNpZ25lZCBjaGFyIG5hbWVbN107ICAgIC8qIERldmljZSBOYW1lICovCi0Jc3RydWN0IG1zaV9tc2cgc2F2ZWRfbXNnOwotCXN0cnVjdCBzeXNfZGV2aWNlIHN5c2RldjsKLSNlbmRpZgotCXN0cnVjdCBxX2ludmFsICAqcWk7ICAgICAgICAgICAgLyogUXVldWVkIGludmFsaWRhdGlvbiBpbmZvICovCi0jaWZkZWYgQ09ORklHX0lOVFJfUkVNQVAKLQlzdHJ1Y3QgaXJfdGFibGUgKmlyX3RhYmxlOwkvKiBJbnRlcnJ1cHQgcmVtYXBwaW5nIGluZm8gKi8KLSNlbmRpZgotfTsKLQotc3RhdGljIGlubGluZSB2b2lkIF9faW9tbXVfZmx1c2hfY2FjaGUoCi0Jc3RydWN0IGludGVsX2lvbW11ICppb21tdSwgdm9pZCAqYWRkciwgaW50IHNpemUpCi17Ci0JaWYgKCFlY2FwX2NvaGVyZW50KGlvbW11LT5lY2FwKSkKLQkJY2xmbHVzaF9jYWNoZV9yYW5nZShhZGRyLCBzaXplKTsKLX0KLQotZXh0ZXJuIHN0cnVjdCBkbWFyX2RyaGRfdW5pdCAqIGRtYXJfZmluZF9tYXRjaGVkX2RyaGRfdW5pdChzdHJ1Y3QgcGNpX2RldiAqZGV2KTsKLQotZXh0ZXJuIGludCBhbGxvY19pb21tdShzdHJ1Y3QgZG1hcl9kcmhkX3VuaXQgKmRyaGQpOwotZXh0ZXJuIHZvaWQgZnJlZV9pb21tdShzdHJ1Y3QgaW50ZWxfaW9tbXUgKmlvbW11KTsKLWV4dGVybiBpbnQgZG1hcl9lbmFibGVfcWkoc3RydWN0IGludGVsX2lvbW11ICppb21tdSk7Ci1leHRlcm4gdm9pZCBxaV9nbG9iYWxfaWVjKHN0cnVjdCBpbnRlbF9pb21tdSAqaW9tbXUpOwotCi1leHRlcm4gdm9pZCBxaV9zdWJtaXRfc3luYyhzdHJ1Y3QgcWlfZGVzYyAqZGVzYywgc3RydWN0IGludGVsX2lvbW11ICppb21tdSk7Ci0jZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2ludHJfcmVtYXBwaW5nLmMgYi9kcml2ZXJzL3BjaS9pbnRyX3JlbWFwcGluZy5jCmluZGV4IGJiNjQyY2MuLjJkZTVhMzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL2ludHJfcmVtYXBwaW5nLmMKKysrIGIvZHJpdmVycy9wY2kvaW50cl9yZW1hcHBpbmcuYwpAQCAtMSw1MSArMSw3NSBAQAorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L2RtYXIuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L2ppZmZpZXMuaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KICNpbmNsdWRlIDxsaW51eC9pcnEuaD4KICNpbmNsdWRlIDxhc20vaW9fYXBpYy5oPgotI2luY2x1ZGUgImludGVsLWlvbW11LmgiCisjaW5jbHVkZSA8bGludXgvaW50ZWwtaW9tbXUuaD4KICNpbmNsdWRlICJpbnRyX3JlbWFwcGluZy5oIgogCiBzdGF0aWMgc3RydWN0IGlvYXBpY19zY29wZSBpcl9pb2FwaWNbTUFYX0lPX0FQSUNTXTsKIHN0YXRpYyBpbnQgaXJfaW9hcGljX251bTsKIGludCBpbnRyX3JlbWFwcGluZ19lbmFibGVkOwogCi1zdGF0aWMgc3RydWN0IHsKK3N0cnVjdCBpcnFfMl9pb21tdSB7CiAJc3RydWN0IGludGVsX2lvbW11ICppb21tdTsKIAl1MTYgaXJ0ZV9pbmRleDsKIAl1MTYgc3ViX2hhbmRsZTsKIAl1OCAgaXJ0ZV9tYXNrOwotfSBpcnFfMl9pb21tdVtOUl9JUlFTXTsKK307CisKK3N0YXRpYyBzdHJ1Y3QgaXJxXzJfaW9tbXUgaXJxXzJfaW9tbXVYW05SX0lSUVNdOworCitzdGF0aWMgc3RydWN0IGlycV8yX2lvbW11ICppcnFfMl9pb21tdSh1bnNpZ25lZCBpbnQgaXJxKQoreworCXJldHVybiAoaXJxIDwgbnJfaXJxcykgPyBpcnFfMl9pb21tdVggKyBpcnEgOiBOVUxMOworfQorCitzdGF0aWMgc3RydWN0IGlycV8yX2lvbW11ICppcnFfMl9pb21tdV9hbGxvYyh1bnNpZ25lZCBpbnQgaXJxKQoreworCXJldHVybiBpcnFfMl9pb21tdShpcnEpOworfQogCiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGlycV8yX2lyX2xvY2spOwogCitzdGF0aWMgc3RydWN0IGlycV8yX2lvbW11ICp2YWxpZF9pcnFfMl9pb21tdSh1bnNpZ25lZCBpbnQgaXJxKQoreworCXN0cnVjdCBpcnFfMl9pb21tdSAqaXJxX2lvbW11OworCisJaXJxX2lvbW11ID0gaXJxXzJfaW9tbXUoaXJxKTsKKworCWlmICghaXJxX2lvbW11KQorCQlyZXR1cm4gTlVMTDsKKworCWlmICghaXJxX2lvbW11LT5pb21tdSkKKwkJcmV0dXJuIE5VTEw7CisKKwlyZXR1cm4gaXJxX2lvbW11OworfQorCiBpbnQgaXJxX3JlbWFwcGVkKGludCBpcnEpCiB7Ci0JaWYgKGlycSA+IE5SX0lSUVMpCi0JCXJldHVybiAwOwotCi0JaWYgKCFpcnFfMl9pb21tdVtpcnFdLmlvbW11KQotCQlyZXR1cm4gMDsKLQotCXJldHVybiAxOworCXJldHVybiB2YWxpZF9pcnFfMl9pb21tdShpcnEpICE9IE5VTEw7CiB9CiAKIGludCBnZXRfaXJ0ZShpbnQgaXJxLCBzdHJ1Y3QgaXJ0ZSAqZW50cnkpCiB7CiAJaW50IGluZGV4OworCXN0cnVjdCBpcnFfMl9pb21tdSAqaXJxX2lvbW11OwogCi0JaWYgKCFlbnRyeSB8fCBpcnEgPiBOUl9JUlFTKQorCWlmICghZW50cnkpCiAJCXJldHVybiAtMTsKIAogCXNwaW5fbG9jaygmaXJxXzJfaXJfbG9jayk7Ci0JaWYgKCFpcnFfMl9pb21tdVtpcnFdLmlvbW11KSB7CisJaXJxX2lvbW11ID0gdmFsaWRfaXJxXzJfaW9tbXUoaXJxKTsKKwlpZiAoIWlycV9pb21tdSkgewogCQlzcGluX3VubG9jaygmaXJxXzJfaXJfbG9jayk7CiAJCXJldHVybiAtMTsKIAl9CiAKLQlpbmRleCA9IGlycV8yX2lvbW11W2lycV0uaXJ0ZV9pbmRleCArIGlycV8yX2lvbW11W2lycV0uc3ViX2hhbmRsZTsKLQkqZW50cnkgPSAqKGlycV8yX2lvbW11W2lycV0uaW9tbXUtPmlyX3RhYmxlLT5iYXNlICsgaW5kZXgpOworCWluZGV4ID0gaXJxX2lvbW11LT5pcnRlX2luZGV4ICsgaXJxX2lvbW11LT5zdWJfaGFuZGxlOworCSplbnRyeSA9ICooaXJxX2lvbW11LT5pb21tdS0+aXJfdGFibGUtPmJhc2UgKyBpbmRleCk7CiAKIAlzcGluX3VubG9jaygmaXJxXzJfaXJfbG9jayk7CiAJcmV0dXJuIDA7CkBAIC01NCw2ICs3OCw3IEBACiBpbnQgYWxsb2NfaXJ0ZShzdHJ1Y3QgaW50ZWxfaW9tbXUgKmlvbW11LCBpbnQgaXJxLCB1MTYgY291bnQpCiB7CiAJc3RydWN0IGlyX3RhYmxlICp0YWJsZSA9IGlvbW11LT5pcl90YWJsZTsKKwlzdHJ1Y3QgaXJxXzJfaW9tbXUgKmlycV9pb21tdTsKIAl1MTYgaW5kZXgsIHN0YXJ0X2luZGV4OwogCXVuc2lnbmVkIGludCBtYXNrID0gMDsKIAlpbnQgaTsKQEAgLTYxLDYgKzg2LDEwIEBACiAJaWYgKCFjb3VudCkKIAkJcmV0dXJuIC0xOwogCisJLyogcHJvdGVjdCBpcnFfMl9pb21tdV9hbGxvYyBsYXRlciAqLworCWlmIChpcnEgPj0gbnJfaXJxcykKKwkJcmV0dXJuIC0xOworCiAJLyoKIAkgKiBzdGFydCB0aGUgSVJURSBzZWFyY2ggZnJvbSBpbmRleCAwLgogCSAqLwpAQCAtMTAwLDEwICsxMjksMTEgQEAKIAlmb3IgKGkgPSBpbmRleDsgaSA8IGluZGV4ICsgY291bnQ7IGkrKykKIAkJdGFibGUtPmJhc2VbaV0ucHJlc2VudCA9IDE7CiAKLQlpcnFfMl9pb21tdVtpcnFdLmlvbW11ID0gaW9tbXU7Ci0JaXJxXzJfaW9tbXVbaXJxXS5pcnRlX2luZGV4ID0gIGluZGV4OwotCWlycV8yX2lvbW11W2lycV0uc3ViX2hhbmRsZSA9IDA7Ci0JaXJxXzJfaW9tbXVbaXJxXS5pcnRlX21hc2sgPSBtYXNrOworCWlycV9pb21tdSA9IGlycV8yX2lvbW11X2FsbG9jKGlycSk7CisJaXJxX2lvbW11LT5pb21tdSA9IGlvbW11OworCWlycV9pb21tdS0+aXJ0ZV9pbmRleCA9ICBpbmRleDsKKwlpcnFfaW9tbXUtPnN1Yl9oYW5kbGUgPSAwOworCWlycV9pb21tdS0+aXJ0ZV9tYXNrID0gbWFzazsKIAogCXNwaW5fdW5sb2NrKCZpcnFfMl9pcl9sb2NrKTsKIApAQCAtMTI0LDMxICsxNTQsMzMgQEAKIGludCBtYXBfaXJxX3RvX2lydGVfaGFuZGxlKGludCBpcnEsIHUxNiAqc3ViX2hhbmRsZSkKIHsKIAlpbnQgaW5kZXg7CisJc3RydWN0IGlycV8yX2lvbW11ICppcnFfaW9tbXU7CiAKIAlzcGluX2xvY2soJmlycV8yX2lyX2xvY2spOwotCWlmIChpcnEgPj0gTlJfSVJRUyB8fCAhaXJxXzJfaW9tbXVbaXJxXS5pb21tdSkgeworCWlycV9pb21tdSA9IHZhbGlkX2lycV8yX2lvbW11KGlycSk7CisJaWYgKCFpcnFfaW9tbXUpIHsKIAkJc3Bpbl91bmxvY2soJmlycV8yX2lyX2xvY2spOwogCQlyZXR1cm4gLTE7CiAJfQogCi0JKnN1Yl9oYW5kbGUgPSBpcnFfMl9pb21tdVtpcnFdLnN1Yl9oYW5kbGU7Ci0JaW5kZXggPSBpcnFfMl9pb21tdVtpcnFdLmlydGVfaW5kZXg7CisJKnN1Yl9oYW5kbGUgPSBpcnFfaW9tbXUtPnN1Yl9oYW5kbGU7CisJaW5kZXggPSBpcnFfaW9tbXUtPmlydGVfaW5kZXg7CiAJc3Bpbl91bmxvY2soJmlycV8yX2lyX2xvY2spOwogCXJldHVybiBpbmRleDsKIH0KIAogaW50IHNldF9pcnRlX2lycShpbnQgaXJxLCBzdHJ1Y3QgaW50ZWxfaW9tbXUgKmlvbW11LCB1MTYgaW5kZXgsIHUxNiBzdWJoYW5kbGUpCiB7Ci0Jc3Bpbl9sb2NrKCZpcnFfMl9pcl9sb2NrKTsKLQlpZiAoaXJxID49IE5SX0lSUVMgfHwgaXJxXzJfaW9tbXVbaXJxXS5pb21tdSkgewotCQlzcGluX3VubG9jaygmaXJxXzJfaXJfbG9jayk7Ci0JCXJldHVybiAtMTsKLQl9CisJc3RydWN0IGlycV8yX2lvbW11ICppcnFfaW9tbXU7CiAKLQlpcnFfMl9pb21tdVtpcnFdLmlvbW11ID0gaW9tbXU7Ci0JaXJxXzJfaW9tbXVbaXJxXS5pcnRlX2luZGV4ID0gaW5kZXg7Ci0JaXJxXzJfaW9tbXVbaXJxXS5zdWJfaGFuZGxlID0gc3ViaGFuZGxlOwotCWlycV8yX2lvbW11W2lycV0uaXJ0ZV9tYXNrID0gMDsKKwlzcGluX2xvY2soJmlycV8yX2lyX2xvY2spOworCisJaXJxX2lvbW11ID0gaXJxXzJfaW9tbXVfYWxsb2MoaXJxKTsKKworCWlycV9pb21tdS0+aW9tbXUgPSBpb21tdTsKKwlpcnFfaW9tbXUtPmlydGVfaW5kZXggPSBpbmRleDsKKwlpcnFfaW9tbXUtPnN1Yl9oYW5kbGUgPSBzdWJoYW5kbGU7CisJaXJxX2lvbW11LT5pcnRlX21hc2sgPSAwOwogCiAJc3Bpbl91bmxvY2soJmlycV8yX2lyX2xvY2spOwogCkBAIC0xNTcsMTYgKzE4OSwxOSBAQAogCiBpbnQgY2xlYXJfaXJ0ZV9pcnEoaW50IGlycSwgc3RydWN0IGludGVsX2lvbW11ICppb21tdSwgdTE2IGluZGV4KQogeworCXN0cnVjdCBpcnFfMl9pb21tdSAqaXJxX2lvbW11OworCiAJc3Bpbl9sb2NrKCZpcnFfMl9pcl9sb2NrKTsKLQlpZiAoaXJxID49IE5SX0lSUVMgfHwgIWlycV8yX2lvbW11W2lycV0uaW9tbXUpIHsKKwlpcnFfaW9tbXUgPSB2YWxpZF9pcnFfMl9pb21tdShpcnEpOworCWlmICghaXJxX2lvbW11KSB7CiAJCXNwaW5fdW5sb2NrKCZpcnFfMl9pcl9sb2NrKTsKIAkJcmV0dXJuIC0xOwogCX0KIAotCWlycV8yX2lvbW11W2lycV0uaW9tbXUgPSBOVUxMOwotCWlycV8yX2lvbW11W2lycV0uaXJ0ZV9pbmRleCA9IDA7Ci0JaXJxXzJfaW9tbXVbaXJxXS5zdWJfaGFuZGxlID0gMDsKLQlpcnFfMl9pb21tdVtpcnFdLmlydGVfbWFzayA9IDA7CisJaXJxX2lvbW11LT5pb21tdSA9IE5VTEw7CisJaXJxX2lvbW11LT5pcnRlX2luZGV4ID0gMDsKKwlpcnFfaW9tbXUtPnN1Yl9oYW5kbGUgPSAwOworCWlycV8yX2lvbW11KGlycSktPmlydGVfbWFzayA9IDA7CiAKIAlzcGluX3VubG9jaygmaXJxXzJfaXJfbG9jayk7CiAKQEAgLTE3OCwxNiArMjEzLDE4IEBACiAJaW50IGluZGV4OwogCXN0cnVjdCBpcnRlICppcnRlOwogCXN0cnVjdCBpbnRlbF9pb21tdSAqaW9tbXU7CisJc3RydWN0IGlycV8yX2lvbW11ICppcnFfaW9tbXU7CiAKIAlzcGluX2xvY2soJmlycV8yX2lyX2xvY2spOwotCWlmIChpcnEgPj0gTlJfSVJRUyB8fCAhaXJxXzJfaW9tbXVbaXJxXS5pb21tdSkgeworCWlycV9pb21tdSA9IHZhbGlkX2lycV8yX2lvbW11KGlycSk7CisJaWYgKCFpcnFfaW9tbXUpIHsKIAkJc3Bpbl91bmxvY2soJmlycV8yX2lyX2xvY2spOwogCQlyZXR1cm4gLTE7CiAJfQogCi0JaW9tbXUgPSBpcnFfMl9pb21tdVtpcnFdLmlvbW11OworCWlvbW11ID0gaXJxX2lvbW11LT5pb21tdTsKIAotCWluZGV4ID0gaXJxXzJfaW9tbXVbaXJxXS5pcnRlX2luZGV4ICsgaXJxXzJfaW9tbXVbaXJxXS5zdWJfaGFuZGxlOworCWluZGV4ID0gaXJxX2lvbW11LT5pcnRlX2luZGV4ICsgaXJxX2lvbW11LT5zdWJfaGFuZGxlOwogCWlydGUgPSAmaW9tbXUtPmlyX3RhYmxlLT5iYXNlW2luZGV4XTsKIAogCXNldF82NGJpdCgodW5zaWduZWQgbG9uZyAqKWlydGUsIGlydGVfbW9kaWZpZWQtPmxvdyB8ICgxIDw8IDEpKTsKQEAgLTIwMywxOCArMjQwLDIwIEBACiB7CiAJaW50IGluZGV4OwogCXN0cnVjdCBpbnRlbF9pb21tdSAqaW9tbXU7CisJc3RydWN0IGlycV8yX2lvbW11ICppcnFfaW9tbXU7CiAKIAlzcGluX2xvY2soJmlycV8yX2lyX2xvY2spOwotCWlmIChpcnEgPj0gTlJfSVJRUyB8fCAhaXJxXzJfaW9tbXVbaXJxXS5pb21tdSkgeworCWlycV9pb21tdSA9IHZhbGlkX2lycV8yX2lvbW11KGlycSk7CisJaWYgKCFpcnFfaW9tbXUpIHsKIAkJc3Bpbl91bmxvY2soJmlycV8yX2lyX2xvY2spOwogCQlyZXR1cm4gLTE7CiAJfQogCi0JaW9tbXUgPSBpcnFfMl9pb21tdVtpcnFdLmlvbW11OworCWlvbW11ID0gaXJxX2lvbW11LT5pb21tdTsKIAotCWluZGV4ID0gaXJxXzJfaW9tbXVbaXJxXS5pcnRlX2luZGV4ICsgaXJxXzJfaW9tbXVbaXJxXS5zdWJfaGFuZGxlOworCWluZGV4ID0gaXJxX2lvbW11LT5pcnRlX2luZGV4ICsgaXJxX2lvbW11LT5zdWJfaGFuZGxlOwogCi0JcWlfZmx1c2hfaWVjKGlvbW11LCBpbmRleCwgaXJxXzJfaW9tbXVbaXJxXS5pcnRlX21hc2spOworCXFpX2ZsdXNoX2llYyhpb21tdSwgaW5kZXgsIGlycV9pb21tdS0+aXJ0ZV9tYXNrKTsKIAlzcGluX3VubG9jaygmaXJxXzJfaXJfbG9jayk7CiAKIAlyZXR1cm4gMDsKQEAgLTI0NiwyOCArMjg1LDMwIEBACiAJaW50IGluZGV4LCBpOwogCXN0cnVjdCBpcnRlICppcnRlOwogCXN0cnVjdCBpbnRlbF9pb21tdSAqaW9tbXU7CisJc3RydWN0IGlycV8yX2lvbW11ICppcnFfaW9tbXU7CiAKIAlzcGluX2xvY2soJmlycV8yX2lyX2xvY2spOwotCWlmIChpcnEgPj0gTlJfSVJRUyB8fCAhaXJxXzJfaW9tbXVbaXJxXS5pb21tdSkgeworCWlycV9pb21tdSA9IHZhbGlkX2lycV8yX2lvbW11KGlycSk7CisJaWYgKCFpcnFfaW9tbXUpIHsKIAkJc3Bpbl91bmxvY2soJmlycV8yX2lyX2xvY2spOwogCQlyZXR1cm4gLTE7CiAJfQogCi0JaW9tbXUgPSBpcnFfMl9pb21tdVtpcnFdLmlvbW11OworCWlvbW11ID0gaXJxX2lvbW11LT5pb21tdTsKIAotCWluZGV4ID0gaXJxXzJfaW9tbXVbaXJxXS5pcnRlX2luZGV4ICsgaXJxXzJfaW9tbXVbaXJxXS5zdWJfaGFuZGxlOworCWluZGV4ID0gaXJxX2lvbW11LT5pcnRlX2luZGV4ICsgaXJxX2lvbW11LT5zdWJfaGFuZGxlOwogCWlydGUgPSAmaW9tbXUtPmlyX3RhYmxlLT5iYXNlW2luZGV4XTsKIAotCWlmICghaXJxXzJfaW9tbXVbaXJxXS5zdWJfaGFuZGxlKSB7Ci0JCWZvciAoaSA9IDA7IGkgPCAoMSA8PCBpcnFfMl9pb21tdVtpcnFdLmlydGVfbWFzayk7IGkrKykKKwlpZiAoIWlycV9pb21tdS0+c3ViX2hhbmRsZSkgeworCQlmb3IgKGkgPSAwOyBpIDwgKDEgPDwgaXJxX2lvbW11LT5pcnRlX21hc2spOyBpKyspCiAJCQlzZXRfNjRiaXQoKHVuc2lnbmVkIGxvbmcgKilpcnRlLCAwKTsKLQkJcWlfZmx1c2hfaWVjKGlvbW11LCBpbmRleCwgaXJxXzJfaW9tbXVbaXJxXS5pcnRlX21hc2spOworCQlxaV9mbHVzaF9pZWMoaW9tbXUsIGluZGV4LCBpcnFfaW9tbXUtPmlydGVfbWFzayk7CiAJfQogCi0JaXJxXzJfaW9tbXVbaXJxXS5pb21tdSA9IE5VTEw7Ci0JaXJxXzJfaW9tbXVbaXJxXS5pcnRlX2luZGV4ID0gMDsKLQlpcnFfMl9pb21tdVtpcnFdLnN1Yl9oYW5kbGUgPSAwOwotCWlycV8yX2lvbW11W2lycV0uaXJ0ZV9tYXNrID0gMDsKKwlpcnFfaW9tbXUtPmlvbW11ID0gTlVMTDsKKwlpcnFfaW9tbXUtPmlydGVfaW5kZXggPSAwOworCWlycV9pb21tdS0+c3ViX2hhbmRsZSA9IDA7CisJaXJxX2lvbW11LT5pcnRlX21hc2sgPSAwOwogCiAJc3Bpbl91bmxvY2soJmlycV8yX2lyX2xvY2spOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9pbnRyX3JlbWFwcGluZy5oIGIvZHJpdmVycy9wY2kvaW50cl9yZW1hcHBpbmcuaAppbmRleCAwNWYyNjM1Li5jYTQ4ZjBkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9pbnRyX3JlbWFwcGluZy5oCisrKyBiL2RyaXZlcnMvcGNpL2ludHJfcmVtYXBwaW5nLmgKQEAgLTEsNCArMSw0IEBACi0jaW5jbHVkZSAiaW50ZWwtaW9tbXUuaCIKKyNpbmNsdWRlIDxsaW51eC9pbnRlbC1pb21tdS5oPgogCiBzdHJ1Y3QgaW9hcGljX3Njb3BlIHsKIAlzdHJ1Y3QgaW50ZWxfaW9tbXUgKmlvbW11OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvaW92YS5jIGIvZHJpdmVycy9wY2kvaW92YS5jCmluZGV4IDNlZjRhYzAuLjIyODcxMTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL2lvdmEuYworKysgYi9kcml2ZXJzL3BjaS9pb3ZhLmMKQEAgLTcsNyArNyw3IEBACiAgKiBBdXRob3I6IEFuaWwgUyBLZXNoYXZhbXVydGh5IDxhbmlsLnMua2VzaGF2YW11cnRoeUBpbnRlbC5jb20+CiAgKi8KIAotI2luY2x1ZGUgImlvdmEuaCIKKyNpbmNsdWRlIDxsaW51eC9pb3ZhLmg+CiAKIHZvaWQKIGluaXRfaW92YV9kb21haW4oc3RydWN0IGlvdmFfZG9tYWluICppb3ZhZCwgdW5zaWduZWQgbG9uZyBwZm5fMzJiaXQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9wY2kuYyBiL2RyaXZlcnMvcGNpL3BjaS5jCmluZGV4IGM5ODg0YmIuLmRiZTlmMzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL3BjaS5jCisrKyBiL2RyaXZlcnMvcGNpL3BjaS5jCkBAIC0xMzU4LDExICsxMzU4LDEwIEBACiAJcmV0dXJuIDA7CiAKIGVycl9vdXQ6Ci0JZGV2X3dhcm4oJnBkZXYtPmRldiwgIkJBUiAlZDogY2FuJ3QgcmVzZXJ2ZSAlcyByZWdpb24gWyUjbGx4LSUjbGx4XVxuIiwKKwlkZXZfd2FybigmcGRldi0+ZGV2LCAiQkFSICVkOiBjYW4ndCByZXNlcnZlICVzIHJlZ2lvbiAlcFJcbiIsCiAJCSBiYXIsCiAJCSBwY2lfcmVzb3VyY2VfZmxhZ3MocGRldiwgYmFyKSAmIElPUkVTT1VSQ0VfSU8gPyAiSS9PIiA6ICJtZW0iLAotCQkgKHVuc2lnbmVkIGxvbmcgbG9uZylwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgYmFyKSwKLQkJICh1bnNpZ25lZCBsb25nIGxvbmcpcGNpX3Jlc291cmNlX2VuZChwZGV2LCBiYXIpKTsKKwkJICZwZGV2LT5yZXNvdXJjZVtiYXJdKTsKIAlyZXR1cm4gLUVCVVNZOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9wcm9iZS5jIGIvZHJpdmVycy9wY2kvcHJvYmUuYwppbmRleCAzNjY5OGU1N2IuLmQzZGI4YjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL3Byb2JlLmMKKysrIGIvZHJpdmVycy9wY2kvcHJvYmUuYwpAQCAtMzA0LDkgKzMwNCw4IEBACiAJCX0gZWxzZSB7CiAJCQlyZXMtPnN0YXJ0ID0gbDY0OwogCQkJcmVzLT5lbmQgPSBsNjQgKyBzejY0OwotCQkJcHJpbnRrKEtFUk5fREVCVUcgIlBDSTogJXMgcmVnICV4IDY0Yml0IG1taW86IFslbGx4LCAlbGx4XVxuIiwKLQkJCQlwY2lfbmFtZShkZXYpLCBwb3MsICh1bnNpZ25lZCBsb25nIGxvbmcpcmVzLT5zdGFydCwKLQkJCQkodW5zaWduZWQgbG9uZyBsb25nKXJlcy0+ZW5kKTsKKwkJCXByaW50ayhLRVJOX0RFQlVHICJQQ0k6ICVzIHJlZyAleCA2NGJpdCBtbWlvOiAlcFJcbiIsCisJCQkJcGNpX25hbWUoZGV2KSwgcG9zLCByZXMpOwogCQl9CiAJfSBlbHNlIHsKIAkJc3ogPSBwY2lfc2l6ZShsLCBzeiwgbWFzayk7CkBAIC0zMTYsOSArMzE1LDEwIEBACiAKIAkJcmVzLT5zdGFydCA9IGw7CiAJCXJlcy0+ZW5kID0gbCArIHN6OwotCQlwcmludGsoS0VSTl9ERUJVRyAiUENJOiAlcyByZWcgJXggJXM6IFslbGx4LCAlbGx4XVxuIiwgcGNpX25hbWUoZGV2KSwKLQkJCXBvcywgKHJlcy0+ZmxhZ3MgJiBJT1JFU09VUkNFX0lPKSA/ICJpbyBwb3J0IjoiMzJiaXQgbW1pbyIsCi0JCQkodW5zaWduZWQgbG9uZyBsb25nKXJlcy0+c3RhcnQsICh1bnNpZ25lZCBsb25nIGxvbmcpcmVzLT5lbmQpOworCQlwcmludGsoS0VSTl9ERUJVRyAiUENJOiAlcyByZWcgJXggJXM6ICVwUlxuIiwKKwkJICAgICAgIHBjaV9uYW1lKGRldiksIHBvcywKKwkJICAgICAgIChyZXMtPmZsYWdzICYgSU9SRVNPVVJDRV9JTykgPyAiaW8gcG9ydCI6IjMyYml0IG1taW8iLAorCQkgICAgICAgcmVzKTsKIAl9CiAKICBvdXQ6CkBAIC0zODksOSArMzg5LDggQEAKIAkJCXJlcy0+c3RhcnQgPSBiYXNlOwogCQlpZiAoIXJlcy0+ZW5kKQogCQkJcmVzLT5lbmQgPSBsaW1pdCArIDB4ZmZmOwotCQlwcmludGsoS0VSTl9ERUJVRyAiUENJOiBicmlkZ2UgJXMgaW8gcG9ydDogWyVsbHgsICVsbHhdXG4iLAotCQkJcGNpX25hbWUoZGV2KSwgKHVuc2lnbmVkIGxvbmcgbG9uZykgcmVzLT5zdGFydCwKLQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpIHJlcy0+ZW5kKTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIlBDSTogYnJpZGdlICVzIGlvIHBvcnQ6ICVwUlxuIiwKKwkJICAgICAgIHBjaV9uYW1lKGRldiksIHJlcyk7CiAJfQogCiAJcmVzID0gY2hpbGQtPnJlc291cmNlWzFdOwpAQCAtNDAzLDkgKzQwMiw4IEBACiAJCXJlcy0+ZmxhZ3MgPSAobWVtX2Jhc2VfbG8gJiBQQ0lfTUVNT1JZX1JBTkdFX1RZUEVfTUFTSykgfCBJT1JFU09VUkNFX01FTTsKIAkJcmVzLT5zdGFydCA9IGJhc2U7CiAJCXJlcy0+ZW5kID0gbGltaXQgKyAweGZmZmZmOwotCQlwcmludGsoS0VSTl9ERUJVRyAiUENJOiBicmlkZ2UgJXMgMzJiaXQgbW1pbzogWyVsbHgsICVsbHhdXG4iLAotCQkJcGNpX25hbWUoZGV2KSwgKHVuc2lnbmVkIGxvbmcgbG9uZykgcmVzLT5zdGFydCwKLQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpIHJlcy0+ZW5kKTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIlBDSTogYnJpZGdlICVzIDMyYml0IG1taW86ICVwUlxuIiwKKwkJICAgICAgIHBjaV9uYW1lKGRldiksIHJlcyk7CiAJfQogCiAJcmVzID0gY2hpbGQtPnJlc291cmNlWzJdOwpAQCAtNDQxLDkgKzQzOSw5IEBACiAJCXJlcy0+ZmxhZ3MgPSAobWVtX2Jhc2VfbG8gJiBQQ0lfTUVNT1JZX1JBTkdFX1RZUEVfTUFTSykgfCBJT1JFU09VUkNFX01FTSB8IElPUkVTT1VSQ0VfUFJFRkVUQ0g7CiAJCXJlcy0+c3RhcnQgPSBiYXNlOwogCQlyZXMtPmVuZCA9IGxpbWl0ICsgMHhmZmZmZjsKLQkJcHJpbnRrKEtFUk5fREVCVUcgIlBDSTogYnJpZGdlICVzICVzYml0IG1taW8gcHJlZjogWyVsbHgsICVsbHhdXG4iLAotCQkJcGNpX25hbWUoZGV2KSwgKHJlcy0+ZmxhZ3MgJiBQQ0lfUFJFRl9SQU5HRV9UWVBFXzY0KSA/ICI2NCIgOiAiMzIiLAotCQkJKHVuc2lnbmVkIGxvbmcgbG9uZykgcmVzLT5zdGFydCwgKHVuc2lnbmVkIGxvbmcgbG9uZykgcmVzLT5lbmQpOworCQlwcmludGsoS0VSTl9ERUJVRyAiUENJOiBicmlkZ2UgJXMgJXNiaXQgbW1pbyBwcmVmOiAlcFJcbiIsCisJCSAgICAgICBwY2lfbmFtZShkZXYpLAorCQkgICAgICAgKHJlcy0+ZmxhZ3MgJiBQQ0lfUFJFRl9SQU5HRV9UWVBFXzY0KSA/ICI2NCI6IjMyIiwgcmVzKTsKIAl9CiB9CiAKQEAgLTEyMzcsOCArMTIzNSwxMSBAQAogRVhQT1JUX1NZTUJPTF9HUEwocGNpX3NjYW5fY2hpbGRfYnVzKTsKICNlbmRpZgogCi1zdGF0aWMgaW50IF9faW5pdCBwY2lfc29ydF9iZl9jbXAoY29uc3Qgc3RydWN0IHBjaV9kZXYgKmEsIGNvbnN0IHN0cnVjdCBwY2lfZGV2ICpiKQorc3RhdGljIGludCBfX2luaXQgcGNpX3NvcnRfYmZfY21wKGNvbnN0IHN0cnVjdCBkZXZpY2UgKmRfYSwgY29uc3Qgc3RydWN0IGRldmljZSAqZF9iKQogeworCWNvbnN0IHN0cnVjdCBwY2lfZGV2ICphID0gdG9fcGNpX2RldihkX2EpOworCWNvbnN0IHN0cnVjdCBwY2lfZGV2ICpiID0gdG9fcGNpX2RldihkX2IpOworCiAJaWYgICAgICAocGNpX2RvbWFpbl9ucihhLT5idXMpIDwgcGNpX2RvbWFpbl9ucihiLT5idXMpKSByZXR1cm4gLTE7CiAJZWxzZSBpZiAocGNpX2RvbWFpbl9ucihhLT5idXMpID4gcGNpX2RvbWFpbl9ucihiLT5idXMpKSByZXR1cm4gIDE7CiAKQEAgLTEyNTEsNTAgKzEyNTIsNyBAQAogCXJldHVybiAwOwogfQogCi0vKgotICogWWVzLCB0aGlzIGZvcmNhYmx5IGJyZWFrcyB0aGUga2xpc3QgYWJzdHJhY3Rpb24gdGVtcG9yYXJpbHkuICBJdAotICoganVzdCB3YW50cyB0byBzb3J0IHRoZSBrbGlzdCwgbm90IGNoYW5nZSByZWZlcmVuY2UgY291bnRzIGFuZAotICogdGFrZS9kcm9wIGxvY2tzIHJhcGlkbHkgaW4gdGhlIHByb2Nlc3MuICBJdCBkb2VzIGFsbCB0aGlzIHdoaWxlCi0gKiBob2xkaW5nIHRoZSBsb2NrIGZvciB0aGUgbGlzdCwgc28gb2JqZWN0cyBjYW4ndCBvdGhlcndpc2UgYmUKLSAqIGFkZGVkL3JlbW92ZWQgd2hpbGUgd2UncmUgc3dpenpsaW5nLgotICovCi1zdGF0aWMgdm9pZCBfX2luaXQgcGNpX2luc2VydGlvbl9zb3J0X2tsaXN0KHN0cnVjdCBwY2lfZGV2ICphLCBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0KQotewotCXN0cnVjdCBsaXN0X2hlYWQgKnBvczsKLQlzdHJ1Y3Qga2xpc3Rfbm9kZSAqbjsKLQlzdHJ1Y3QgZGV2aWNlICpkZXY7Ci0Jc3RydWN0IHBjaV9kZXYgKmI7Ci0KLQlsaXN0X2Zvcl9lYWNoKHBvcywgbGlzdCkgewotCQluID0gY29udGFpbmVyX29mKHBvcywgc3RydWN0IGtsaXN0X25vZGUsIG5fbm9kZSk7Ci0JCWRldiA9IGNvbnRhaW5lcl9vZihuLCBzdHJ1Y3QgZGV2aWNlLCBrbm9kZV9idXMpOwotCQliID0gdG9fcGNpX2RldihkZXYpOwotCQlpZiAocGNpX3NvcnRfYmZfY21wKGEsIGIpIDw9IDApIHsKLQkJCWxpc3RfbW92ZV90YWlsKCZhLT5kZXYua25vZGVfYnVzLm5fbm9kZSwgJmItPmRldi5rbm9kZV9idXMubl9ub2RlKTsKLQkJCXJldHVybjsKLQkJfQotCX0KLQlsaXN0X21vdmVfdGFpbCgmYS0+ZGV2Lmtub2RlX2J1cy5uX25vZGUsIGxpc3QpOwotfQotCiB2b2lkIF9faW5pdCBwY2lfc29ydF9icmVhZHRoZmlyc3Qodm9pZCkKIHsKLQlMSVNUX0hFQUQoc29ydGVkX2RldmljZXMpOwotCXN0cnVjdCBsaXN0X2hlYWQgKnBvcywgKnRtcDsKLQlzdHJ1Y3Qga2xpc3Rfbm9kZSAqbjsKLQlzdHJ1Y3QgZGV2aWNlICpkZXY7Ci0Jc3RydWN0IHBjaV9kZXYgKnBkZXY7Ci0Jc3RydWN0IGtsaXN0ICpkZXZpY2Vfa2xpc3Q7Ci0KLQlkZXZpY2Vfa2xpc3QgPSBidXNfZ2V0X2RldmljZV9rbGlzdCgmcGNpX2J1c190eXBlKTsKLQotCXNwaW5fbG9jaygmZGV2aWNlX2tsaXN0LT5rX2xvY2spOwotCWxpc3RfZm9yX2VhY2hfc2FmZShwb3MsIHRtcCwgJmRldmljZV9rbGlzdC0+a19saXN0KSB7Ci0JCW4gPSBjb250YWluZXJfb2YocG9zLCBzdHJ1Y3Qga2xpc3Rfbm9kZSwgbl9ub2RlKTsKLQkJZGV2ID0gY29udGFpbmVyX29mKG4sIHN0cnVjdCBkZXZpY2UsIGtub2RlX2J1cyk7Ci0JCXBkZXYgPSB0b19wY2lfZGV2KGRldik7Ci0JCXBjaV9pbnNlcnRpb25fc29ydF9rbGlzdChwZGV2LCAmc29ydGVkX2RldmljZXMpOwotCX0KLQlsaXN0X3NwbGljZSgmc29ydGVkX2RldmljZXMsICZkZXZpY2Vfa2xpc3QtPmtfbGlzdCk7Ci0Jc3Bpbl91bmxvY2soJmRldmljZV9rbGlzdC0+a19sb2NrKTsKKwlidXNfc29ydF9icmVhZHRoZmlyc3QoJnBjaV9idXNfdHlwZSwgJnBjaV9zb3J0X2JmX2NtcCk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9xdWlya3MuYyBiL2RyaXZlcnMvcGNpL3F1aXJrcy5jCmluZGV4IDkyMzZlN2YuLmU4NzJhYzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL3F1aXJrcy5jCisrKyBiL2RyaXZlcnMvcGNpL3F1aXJrcy5jCkBAIC0xNTYxLDggKzE1NjEsNyBAQAogCQlpZiAoKGYtPnZlbmRvciA9PSBkZXYtPnZlbmRvciB8fCBmLT52ZW5kb3IgPT0gKHUxNikgUENJX0FOWV9JRCkgJiYKICAJCSAgICAoZi0+ZGV2aWNlID09IGRldi0+ZGV2aWNlIHx8IGYtPmRldmljZSA9PSAodTE2KSBQQ0lfQU5ZX0lEKSkgewogI2lmZGVmIERFQlVHCi0JCQlkZXZfZGJnKCZkZXYtPmRldiwgImNhbGxpbmcgIik7Ci0JCQlwcmludF9mbl9kZXNjcmlwdG9yX3N5bWJvbCgiJXNcbiIsIGYtPmhvb2spOworCQkJZGV2X2RiZygmZGV2LT5kZXYsICJjYWxsaW5nICVwRlxuIiwgZi0+aG9vayk7CiAjZW5kaWYKIAkJCWYtPmhvb2soZGV2KTsKIAkJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvcm9tLmMgYi9kcml2ZXJzL3BjaS9yb20uYwppbmRleCBiZDVjMGUwLi4xZjVmNjE0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9yb20uYworKysgYi9kcml2ZXJzL3BjaS9yb20uYwpAQCAtMjEsNyArMjEsNyBAQAogICogYmV0d2VlbiB0aGUgUk9NIGFuZCBvdGhlciByZXNvdXJjZXMsIHNvIGVuYWJsaW5nIGl0IG1heSBkaXNhYmxlIGFjY2VzcwogICogdG8gTU1JTyByZWdpc3RlcnMgb3Igb3RoZXIgY2FyZCBtZW1vcnkuCiAgKi8KLXN0YXRpYyBpbnQgcGNpX2VuYWJsZV9yb20oc3RydWN0IHBjaV9kZXYgKnBkZXYpCitpbnQgcGNpX2VuYWJsZV9yb20oc3RydWN0IHBjaV9kZXYgKnBkZXYpCiB7CiAJc3RydWN0IHJlc291cmNlICpyZXMgPSBwZGV2LT5yZXNvdXJjZSArIFBDSV9ST01fUkVTT1VSQ0U7CiAJc3RydWN0IHBjaV9idXNfcmVnaW9uIHJlZ2lvbjsKQEAgLTQ1LDcgKzQ1LDcgQEAKICAqIERpc2FibGUgUk9NIGRlY29kaW5nIG9uIGEgUENJIGRldmljZSBieSB0dXJuaW5nIG9mZiB0aGUgbGFzdCBiaXQgaW4gdGhlCiAgKiBST00gQkFSLgogICovCi1zdGF0aWMgdm9pZCBwY2lfZGlzYWJsZV9yb20oc3RydWN0IHBjaV9kZXYgKnBkZXYpCit2b2lkIHBjaV9kaXNhYmxlX3JvbShzdHJ1Y3QgcGNpX2RldiAqcGRldikKIHsKIAl1MzIgcm9tX2FkZHI7CiAJcGNpX3JlYWRfY29uZmlnX2R3b3JkKHBkZXYsIHBkZXYtPnJvbV9iYXNlX3JlZywgJnJvbV9hZGRyKTsKQEAgLTI2MCwzICsyNjAsNSBAQAogCiBFWFBPUlRfU1lNQk9MKHBjaV9tYXBfcm9tKTsKIEVYUE9SVF9TWU1CT0wocGNpX3VubWFwX3JvbSk7CitFWFBPUlRfU1lNQk9MX0dQTChwY2lfZW5hYmxlX3JvbSk7CitFWFBPUlRfU1lNQk9MX0dQTChwY2lfZGlzYWJsZV9yb20pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvc2V0dXAtYnVzLmMgYi9kcml2ZXJzL3BjaS9zZXR1cC1idXMuYwppbmRleCAzYWJiZmFkLi40NzFhNDI5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9zZXR1cC1idXMuYworKysgYi9kcml2ZXJzL3BjaS9zZXR1cC1idXMuYwpAQCAtMzU2LDEwICszNTYsNyBAQAogCQkJb3JkZXIgPSBfX2ZmcyhhbGlnbikgLSAyMDsKIAkJCWlmIChvcmRlciA+IDExKSB7CiAJCQkJZGV2X3dhcm4oJmRldi0+ZGV2LCAiQkFSICVkIGJhZCBhbGlnbm1lbnQgJWxseDogIgotCQkJCSAgICAgICAiJSMwMTZsbHgtJSMwMTZsbHhcbiIsIGksCi0JCQkJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpYWxpZ24sCi0JCQkJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpci0+c3RhcnQsCi0JCQkJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpci0+ZW5kKTsKKwkJCQkJICIlcFJcbiIsIGksICh1bnNpZ25lZCBsb25nIGxvbmcpYWxpZ24sIHIpOwogCQkJCXItPmZsYWdzID0gMDsKIAkJCQljb250aW51ZTsKIAkJCX0KQEAgLTM3OCwxMSArMzc1LDEwIEBACiAJYWxpZ24gPSAwOwogCW1pbl9hbGlnbiA9IDA7CiAJZm9yIChvcmRlciA9IDA7IG9yZGVyIDw9IG1heF9vcmRlcjsgb3JkZXIrKykgewotI2lmZGVmIENPTkZJR19SRVNPVVJDRVNfNjRCSVQKLQkJcmVzb3VyY2Vfc2l6ZV90IGFsaWduMSA9IDFVTEwgPDwgKG9yZGVyICsgMjApOwotI2Vsc2UKLQkJcmVzb3VyY2Vfc2l6ZV90IGFsaWduMSA9IDFVIDw8IChvcmRlciArIDIwKTsKLSNlbmRpZgorCQlyZXNvdXJjZV9zaXplX3QgYWxpZ24xID0gMTsKKworCQlhbGlnbjEgPDw9IChvcmRlciArIDIwKTsKKwogCQlpZiAoIWFsaWduKQogCQkJbWluX2FsaWduID0gYWxpZ24xOwogCQllbHNlIGlmIChBTElHTihhbGlnbiArIG1pbl9hbGlnbiwgbWluX2FsaWduKSA8IGFsaWduMSkKQEAgLTU0MCwxMSArNTM2LDkgQEAKICAgICAgICAgICAgICAgICBpZiAoIXJlcykKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0JCXByaW50ayhLRVJOX0lORk8gImJ1czogJTAyeCBpbmRleCAleCAlczogWyVsbHgsICVsbHhdXG4iLAotCQkJYnVzLT5udW1iZXIsIGksCi0JCQkocmVzLT5mbGFncyAmIElPUkVTT1VSQ0VfSU8pID8gImlvIHBvcnQiIDogIm1taW8iLAotCQkJKHVuc2lnbmVkIGxvbmcgbG9uZykgcmVzLT5zdGFydCwKLQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpIHJlcy0+ZW5kKTsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiYnVzOiAlMDJ4IGluZGV4ICV4ICVzOiAlcFJcbiIsCisJCSAgICAgICBidXMtPm51bWJlciwgaSwKKwkJICAgICAgIChyZXMtPmZsYWdzICYgSU9SRVNPVVJDRV9JTykgPyAiaW8gcG9ydCIgOiAibW1pbyIsIHJlcyk7CiAgICAgICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvc2V0dXAtcmVzLmMgYi9kcml2ZXJzL3BjaS9zZXR1cC1yZXMuYwppbmRleCAxYTVmYzgzLi5kNGI1YzY5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9zZXR1cC1yZXMuYworKysgYi9kcml2ZXJzL3BjaS9zZXR1cC1yZXMuYwpAQCAtNDksMTAgKzQ5LDggQEAKIAogCXBjaWJpb3NfcmVzb3VyY2VfdG9fYnVzKGRldiwgJnJlZ2lvbiwgcmVzKTsKIAotCWRldl9kYmcoJmRldi0+ZGV2LCAiQkFSICVkOiBnb3QgcmVzIFslI2xseC0lI2xseF0gYnVzIFslI2xseC0lI2xseF0gIgotCQkiZmxhZ3MgJSNseFxuIiwgcmVzbm8sCi0JCSAodW5zaWduZWQgbG9uZyBsb25nKXJlcy0+c3RhcnQsCi0JCSAodW5zaWduZWQgbG9uZyBsb25nKXJlcy0+ZW5kLAorCWRldl9kYmcoJmRldi0+ZGV2LCAiQkFSICVkOiBnb3QgcmVzICVwUiBidXMgWyUjbGx4LSUjbGx4XSAiCisJCSJmbGFncyAlI2x4XG4iLCByZXNubywgcmVzLAogCQkgKHVuc2lnbmVkIGxvbmcgbG9uZylyZWdpb24uc3RhcnQsCiAJCSAodW5zaWduZWQgbG9uZyBsb25nKXJlZ2lvbi5lbmQsCiAJCSAodW5zaWduZWQgbG9uZylyZXMtPmZsYWdzKTsKQEAgLTExNCwxMyArMTEyLDExIEBACiAJCWVyciA9IGluc2VydF9yZXNvdXJjZShyb290LCByZXMpOwogCiAJaWYgKGVycikgewotCQlkZXZfZXJyKCZkZXYtPmRldiwgIkJBUiAlZDogJXMgb2YgJXMgWyUjbGx4LSUjbGx4XVxuIiwKKwkJZGV2X2VycigmZGV2LT5kZXYsICJCQVIgJWQ6ICVzIG9mICVzICVwUlxuIiwKIAkJCXJlc291cmNlLAogCQkJcm9vdCA/ICJhZGRyZXNzIHNwYWNlIGNvbGxpc2lvbiBvbiIgOgogCQkJCSJubyBwYXJlbnQgZm91bmQgZm9yIiwKLQkJCWR0eXBlLAotCQkJKHVuc2lnbmVkIGxvbmcgbG9uZylyZXMtPnN0YXJ0LAotCQkJKHVuc2lnbmVkIGxvbmcgbG9uZylyZXMtPmVuZCk7CisJCQlkdHlwZSwgcmVzKTsKIAl9CiAKIAlyZXR1cm4gZXJyOwpAQCAtMTM5LDkgKzEzNSw4IEBACiAJYWxpZ24gPSByZXNvdXJjZV9hbGlnbm1lbnQocmVzKTsKIAlpZiAoIWFsaWduKSB7CiAJCWRldl9lcnIoJmRldi0+ZGV2LCAiQkFSICVkOiBjYW4ndCBhbGxvY2F0ZSByZXNvdXJjZSAoYm9ndXMgIgotCQkJImFsaWdubWVudCkgWyUjbGx4LSUjbGx4XSBmbGFncyAlI2x4XG4iLAotCQkJcmVzbm8sICh1bnNpZ25lZCBsb25nIGxvbmcpcmVzLT5zdGFydCwKLQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpcmVzLT5lbmQsIHJlcy0+ZmxhZ3MpOworCQkJImFsaWdubWVudCkgJXBSIGZsYWdzICUjbHhcbiIsCisJCQlyZXNubywgcmVzLCByZXMtPmZsYWdzKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCkBAIC0xNjIsMTEgKzE1Nyw4IEBACiAJfQogCiAJaWYgKHJldCkgewotCQlkZXZfZXJyKCZkZXYtPmRldiwgIkJBUiAlZDogY2FuJ3QgYWxsb2NhdGUgJXMgcmVzb3VyY2UgIgotCQkJIlslI2xseC0lI2xseF1cbiIsIHJlc25vLAotCQkJcmVzLT5mbGFncyAmIElPUkVTT1VSQ0VfSU8gPyAiSS9PIiA6ICJtZW0iLAotCQkJKHVuc2lnbmVkIGxvbmcgbG9uZylyZXMtPnN0YXJ0LAotCQkJKHVuc2lnbmVkIGxvbmcgbG9uZylyZXMtPmVuZCk7CisJCWRldl9lcnIoJmRldi0+ZGV2LCAiQkFSICVkOiBjYW4ndCBhbGxvY2F0ZSAlcyByZXNvdXJjZSAlcFJcbiIsCisJCQlyZXNubywgcmVzLT5mbGFncyAmIElPUkVTT1VSQ0VfSU8gPyAiSS9PIiA6ICJtZW0iLCByZXMpOwogCX0gZWxzZSB7CiAJCXJlcy0+ZmxhZ3MgJj0gfklPUkVTT1VSQ0VfU1RBUlRBTElHTjsKIAkJaWYgKHJlc25vIDwgUENJX0JSSURHRV9SRVNPVVJDRVMpCkBAIC0yMDIsMTEgKzE5NCw4IEBACiAJfQogCiAJaWYgKHJldCkgewotCQlkZXZfZXJyKCZkZXYtPmRldiwgIkJBUiAlZDogY2FuJ3QgYWxsb2NhdGUgJXMgcmVzb3VyY2UgIgotCQkJIlslI2xseC0lI2xseFxuXSIsIHJlc25vLAotCQkJcmVzLT5mbGFncyAmIElPUkVTT1VSQ0VfSU8gPyAiSS9PIiA6ICJtZW0iLAotCQkJKHVuc2lnbmVkIGxvbmcgbG9uZylyZXMtPnN0YXJ0LAotCQkJKHVuc2lnbmVkIGxvbmcgbG9uZylyZXMtPmVuZCk7CisJCWRldl9lcnIoJmRldi0+ZGV2LCAiQkFSICVkOiBjYW4ndCBhbGxvY2F0ZSAlcyByZXNvdXJjZSAlcFJcbiIsCisJCQlyZXNubywgcmVzLT5mbGFncyAmIElPUkVTT1VSQ0VfSU8gPyAiSS9PIiA6ICJtZW0iLCByZXMpOwogCX0gZWxzZSBpZiAocmVzbm8gPCBQQ0lfQlJJREdFX1JFU09VUkNFUykgewogCQlwY2lfdXBkYXRlX3Jlc291cmNlKGRldiwgcmVzLCByZXNubyk7CiAJfQpAQCAtMjM3LDkgKzIyNiw4IEBACiAJCXJfYWxpZ24gPSByZXNvdXJjZV9hbGlnbm1lbnQocik7CiAJCWlmICghcl9hbGlnbikgewogCQkJZGV2X3dhcm4oJmRldi0+ZGV2LCAiQkFSICVkOiBib2d1cyBhbGlnbm1lbnQgIgotCQkJCSJbJSNsbHgtJSNsbHhdIGZsYWdzICUjbHhcbiIsCi0JCQkJaSwgKHVuc2lnbmVkIGxvbmcgbG9uZylyLT5zdGFydCwKLQkJCQkodW5zaWduZWQgbG9uZyBsb25nKXItPmVuZCwgci0+ZmxhZ3MpOworCQkJCSIlcFIgZmxhZ3MgJSNseFxuIiwKKwkJCQlpLCByLCByLT5mbGFncyk7CiAJCQljb250aW51ZTsKIAkJfQogCQlmb3IgKGxpc3QgPSBoZWFkOyA7IGxpc3QgPSBsaXN0LT5uZXh0KSB7CkBAIC0yODcsOSArMjc1LDcgQEAKIAogCQlpZiAoIXItPnBhcmVudCkgewogCQkJZGV2X2VycigmZGV2LT5kZXYsICJkZXZpY2Ugbm90IGF2YWlsYWJsZSBiZWNhdXNlIG9mICIKLQkJCQkiQkFSICVkIFslI2xseC0lI2xseF0gY29sbGlzaW9uc1xuIiwgaSwKLQkJCQkodW5zaWduZWQgbG9uZyBsb25nKSByLT5zdGFydCwKLQkJCQkodW5zaWduZWQgbG9uZyBsb25nKSByLT5lbmQpOworCQkJCSJCQVIgJWQgJXBSIGNvbGxpc2lvbnNcbiIsIGksIHIpOwogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvTWFrZWZpbGUgYi9kcml2ZXJzL3BjbWNpYS9NYWtlZmlsZQppbmRleCBhODc5MDJkLi5iNDZjNjBiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9NYWtlZmlsZQorKysgYi9kcml2ZXJzL3BjbWNpYS9NYWtlZmlsZQpAQCAtMiwxMCArMiw2IEBACiAjIE1ha2VmaWxlIGZvciB0aGUga2VybmVsIHBjbWNpYSBzdWJzeXN0ZW0gKGMvbyBEYXZpZCBIaW5kcykKICMKIAotaWZlcSAoJChDT05GSUdfUENNQ0lBX0RFQlVHKSx5KQotRVhUUkFfQ0ZMQUdTICs9IC1EREVCVUcKLWVuZGlmCi0KIHBjbWNpYV9jb3JlLXkJCQkJCSs9IGNzLm8gY2lzdHBsLm8gcnNyY19tZ3IubyBzb2NrZXRfc3lzZnMubwogcGNtY2lhX2NvcmUtJChDT05GSUdfQ0FSREJVUykJCQkrPSBjYXJkYnVzLm8KIG9iai0kKENPTkZJR19QQ0NBUkQpCQkJCSs9IHBjbWNpYV9jb3JlLm8KQEAgLTY4LDEwICs2NCwxMSBAQAogc2ExMTAwX2NzLSQoQ09ORklHX1NBMTEwMF9TSU1QQUQpCQkrPSBzYTExMDBfc2ltcGFkLm8KIAogcHhhMnh4X2x1YmJvY2tfY3MteQkJCQkrPSBweGEyeHhfbHViYm9jay5vIHNhMTExMV9nZW5lcmljLm8KK3B4YTJ4eF9jbV94Mnh4X2NzLXkJCQkJKz0gcHhhMnh4X2NtX3gyeHgubyBweGEyeHhfY21feDI1NS5vIHB4YTJ4eF9jbV94MjcwLm8KIHB4YTJ4eC1vYmotJChDT05GSUdfQVJDSF9MVUJCT0NLKQkJKz0gcHhhMnh4X2x1YmJvY2tfY3MubwogcHhhMnh4LW9iai0kKENPTkZJR19NQUNIX01BSU5TVE9ORSkJCSs9IHB4YTJ4eF9tYWluc3RvbmUubwogcHhhMnh4LW9iai0kKENPTkZJR19QWEFfU0hBUlBTTCkJCSs9IHB4YTJ4eF9zaGFycHNsLm8KLXB4YTJ4eC1vYmotJChDT05GSUdfTUFDSF9BUk1DT1JFKQkJKz0gcHhhMnh4X2NtX3gyeHgubyBweGEyeHhfY21feDI1NS5vIHB4YTJ4eF9jbV94MjcwLm8KK3B4YTJ4eC1vYmotJChDT05GSUdfTUFDSF9BUk1DT1JFKQkJKz0gcHhhMnh4X2NtX3gyeHhfY3MubwogcHhhMnh4LW9iai0kKENPTkZJR19BUkNIX1ZJUEVSKQkJCSs9IHB4YTJ4eF92aXBlci5vCiBweGEyeHgtb2JqLSQoQ09ORklHX1RSSVpFUFNfUENNQ0lBKQkJKz0gcHhhMnh4X3RyaXplcHMubwogcHhhMnh4LW9iai0kKENPTkZJR19NQUNIX1BBTE1UWCkJCSs9IHB4YTJ4eF9wYWxtdHgubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvYXQ5MV9jZi5jIGIvZHJpdmVycy9wY21jaWEvYXQ5MV9jZi5jCmluZGV4IGEwZmZiOGUuLjllMTE0MGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL2F0OTFfY2YuYworKysgYi9kcml2ZXJzL3BjbWNpYS9hdDkxX2NmLmMKQEAgLTI3Myw3ICsyNzMsNyBAQAogCQkJZ290byBmYWlsMGQ7CiAJCWNmLT5zb2NrZXQucGNpX2lycSA9IGJvYXJkLT5pcnFfcGluOwogCX0gZWxzZQotCQljZi0+c29ja2V0LnBjaV9pcnEgPSBOUl9JUlFTICsgMTsKKwkJY2YtPnNvY2tldC5wY2lfaXJxID0gbnJfaXJxcyArIDE7CiAKIAkvKiBwY21jaWEgbGF5ZXIgb25seSByZW1hcHMgInJlYWwiIG1lbW9yeSBub3QgaW9zcGFjZSAqLwogCWNmLT5zb2NrZXQuaW9fb2Zmc2V0ID0gKHVuc2lnbmVkIGxvbmcpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9hdTEwMDBfZ2VuZXJpYy5jIGIvZHJpdmVycy9wY21jaWEvYXUxMDAwX2dlbmVyaWMuYwppbmRleCA3NWU4Zjg1Li5mYzFkZTQ2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9hdTEwMDBfZ2VuZXJpYy5jCisrKyBiL2RyaXZlcnMvcGNtY2lhL2F1MTAwMF9nZW5lcmljLmMKQEAgLTI5Miw3ICsyOTIsNyBAQAogCQlza3QtPnNwZF9pb1ttYXAtPm1hcF0gPSBzcGVlZDsKIAl9CiAKLQltYXAtPnN0YXJ0PShpb2FkZHJfdCkodTMyKXNrdC0+dmlydF9pbzsKKwltYXAtPnN0YXJ0PSh1bnNpZ25lZCBpbnQpKHUzMilza3QtPnZpcnRfaW87CiAJbWFwLT5zdG9wPW1hcC0+c3RhcnQrTUFQX1NJWkU7CiAJcmV0dXJuIDA7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL2F1MTAwMF9nZW5lcmljLmggYi9kcml2ZXJzL3BjbWNpYS9hdTEwMDBfZ2VuZXJpYy5oCmluZGV4IGE1M2VmNTkuLjEzYTRmYmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL2F1MTAwMF9nZW5lcmljLmgKKysrIGIvZHJpdmVycy9wY21jaWEvYXUxMDAwX2dlbmVyaWMuaApAQCAtMTE2LDcgKzExNiw3IEBACiAJc3RydWN0IHJlc291cmNlCQlyZXNfYXR0cjsKIAogCXZvaWQgKiAgICAgICAgICAgICAgICAgCXZpcnRfaW87Ci0JaW9hZGRyX3QgICAgICAgICAgICAgIAlwaHlzX2lvOworCXVuc2lnbmVkIGludAkJcGh5c19pbzsKIAl1bnNpZ25lZCBpbnQgICAgICAgICAgIAlwaHlzX2F0dHI7CiAJdW5zaWduZWQgaW50ICAgICAgICAgICAJcGh5c19tZW07CiAJdW5zaWduZWQgc2hvcnQgICAgICAgIAlzcGVlZF9pbywgc3BlZWRfYXR0ciwgc3BlZWRfbWVtOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvYXUxMDAwX3BiMXgwMC5jIGIvZHJpdmVycy9wY21jaWEvYXUxMDAwX3BiMXgwMC5jCmluZGV4IGFhMWNkNGQuLmQ2YjRiZDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL2F1MTAwMF9wYjF4MDAuYworKysgYi9kcml2ZXJzL3BjbWNpYS9hdTEwMDBfcGIxeDAwLmMKQEAgLTM3LDcgKzM3LDYgQEAKICNpbmNsdWRlIDxwY21jaWEvc3MuaD4KICNpbmNsdWRlIDxwY21jaWEvY2lzdHBsLmg+CiAjaW5jbHVkZSA8cGNtY2lhL2J1c19vcHMuaD4KLSNpbmNsdWRlICJjc19pbnRlcm5hbC5oIgogCiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL2lycS5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvYXUxMDAwX3h4czE1MDAuYyBiL2RyaXZlcnMvcGNtY2lhL2F1MTAwMF94eHMxNTAwLmMKaW5kZXggOGE5YjE4Yy4uOTYyNzM5MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvYXUxMDAwX3h4czE1MDAuYworKysgYi9kcml2ZXJzL3BjbWNpYS9hdTEwMDBfeHhzMTUwMC5jCkBAIC00MSw3ICs0MSw2IEBACiAjaW5jbHVkZSA8cGNtY2lhL3NzLmg+CiAjaW5jbHVkZSA8cGNtY2lhL2Npc3RwbC5oPgogI2luY2x1ZGUgPHBjbWNpYS9idXNfb3BzLmg+Ci0jaW5jbHVkZSAiY3NfaW50ZXJuYWwuaCIKIAogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9pcnEuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL2NhcmRidXMuYyBiL2RyaXZlcnMvcGNtY2lhL2NhcmRidXMuYwppbmRleCA5MTFjYTBlLi5kYjc3ZTFmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9jYXJkYnVzLmMKKysrIGIvZHJpdmVycy9wY21jaWEvY2FyZGJ1cy5jCkBAIC0yMzgsNyArMjM4LDcgQEAKIAlwY2lfYnVzX2FkZF9kZXZpY2VzKGJ1cyk7CiAKIAlzLT5pcnEuQXNzaWduZWRJUlEgPSBzLT5wY2lfaXJxOwotCXJldHVybiBDU19TVUNDRVNTOworCXJldHVybiAwOwogfQogCiB2b2lkIGNiX2ZyZWUoc3RydWN0IHBjbWNpYV9zb2NrZXQgKiBzKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvY2lzdHBsLmMgYi9kcml2ZXJzL3BjbWNpYS9jaXN0cGwuYwppbmRleCA2NTEyOWI1Li5kY2NlOWY1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9jaXN0cGwuYworKysgYi9kcml2ZXJzL3BjbWNpYS9jaXN0cGwuYwpAQCAtOTIsNyArOTIsOCBAQAogCWlmICghKHMtPmZlYXR1cmVzICYgU1NfQ0FQX1NUQVRJQ19NQVApICYmIChtZW0tPnJlcyA9PSBOVUxMKSkgewogCQltZW0tPnJlcyA9IHBjbWNpYV9maW5kX21lbV9yZWdpb24oMCwgcy0+bWFwX3NpemUsIHMtPm1hcF9zaXplLCAwLCBzKTsKIAkJaWYgKG1lbS0+cmVzID09IE5VTEwpIHsKLQkJCXByaW50ayhLRVJOX05PVElDRSAiY3M6IHVuYWJsZSB0byBtYXAgY2FyZCBtZW1vcnkhXG4iKTsKKwkJCWRldl9wcmludGsoS0VSTl9OT1RJQ0UsICZzLT5kZXYsCisJCQkJICAgImNzOiB1bmFibGUgdG8gbWFwIGNhcmQgbWVtb3J5IVxuIik7CiAJCQlyZXR1cm4gTlVMTDsKIAkJfQogCQlzLT5jaXNfdmlydCA9IE5VTEw7CkBAIC0yNjUsMTMgKzI2NiwxMyBAQAogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAKIHN0YXRpYyB2b2lkIHJlYWRfY2lzX2NhY2hlKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzLCBpbnQgYXR0ciwgdV9pbnQgYWRkciwKLQkJCSAgIHVfaW50IGxlbiwgdm9pZCAqcHRyKQorCQkJICAgc2l6ZV90IGxlbiwgdm9pZCAqcHRyKQogewogICAgIHN0cnVjdCBjaXNfY2FjaGVfZW50cnkgKmNpczsKICAgICBpbnQgcmV0OwogCiAgICAgaWYgKHMtPmZha2VfY2lzKSB7Ci0JaWYgKHMtPmZha2VfY2lzX2xlbiA+IGFkZHIrbGVuKQorCWlmIChzLT5mYWtlX2Npc19sZW4gPj0gYWRkcitsZW4pCiAJICAgIG1lbWNweShwdHIsIHMtPmZha2VfY2lzK2FkZHIsIGxlbik7CiAJZWxzZQogCSAgICBtZW1zZXQocHRyLCAweGZmLCBsZW4pOwpAQCAtMzUxLDcgKzM1Miw5IEBACiAKIAlidWYgPSBrbWFsbG9jKDI1NiwgR0ZQX0tFUk5FTCk7CiAJaWYgKGJ1ZiA9PSBOVUxMKQotCQlyZXR1cm4gLTE7CisJCWRldl9wcmludGsoS0VSTl9XQVJOSU5HLCAmcy0+ZGV2LAorCQkJICAgIm5vIG1lbW9yeSBmb3IgdmVyaWZ5aW5nIENJU1xuIik7CisJCXJldHVybiAtRU5PTUVNOwogCWxpc3RfZm9yX2VhY2hfZW50cnkoY2lzLCAmcy0+Y2lzX2NhY2hlLCBub2RlKSB7CiAJCWludCBsZW4gPSBjaXMtPmxlbjsKIApAQCAtMzgwLDE4ICszODMsMjIgQEAKICAgICAKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogCi1pbnQgcGNtY2lhX3JlcGxhY2VfY2lzKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzLCBjaXNkdW1wX3QgKmNpcykKK2ludCBwY21jaWFfcmVwbGFjZV9jaXMoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMsCisJCSAgICAgICBjb25zdCB1OCAqZGF0YSwgY29uc3Qgc2l6ZV90IGxlbikKIHsKLSAgICBrZnJlZShzLT5mYWtlX2Npcyk7Ci0gICAgcy0+ZmFrZV9jaXMgPSBOVUxMOwotICAgIGlmIChjaXMtPkxlbmd0aCA+IENJU1RQTF9NQVhfQ0lTX1NJWkUpCi0JcmV0dXJuIENTX0JBRF9TSVpFOwotICAgIHMtPmZha2VfY2lzID0ga21hbGxvYyhjaXMtPkxlbmd0aCwgR0ZQX0tFUk5FTCk7Ci0gICAgaWYgKHMtPmZha2VfY2lzID09IE5VTEwpCi0JcmV0dXJuIENTX09VVF9PRl9SRVNPVVJDRTsKLSAgICBzLT5mYWtlX2Npc19sZW4gPSBjaXMtPkxlbmd0aDsKLSAgICBtZW1jcHkocy0+ZmFrZV9jaXMsIGNpcy0+RGF0YSwgY2lzLT5MZW5ndGgpOwotICAgIHJldHVybiBDU19TVUNDRVNTOworCWlmIChsZW4gPiBDSVNUUExfTUFYX0NJU19TSVpFKSB7CisJCWRldl9wcmludGsoS0VSTl9XQVJOSU5HLCAmcy0+ZGV2LCAicmVwbGFjZW1lbnQgQ0lTIHRvbyBiaWdcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJa2ZyZWUocy0+ZmFrZV9jaXMpOworCXMtPmZha2VfY2lzID0ga21hbGxvYyhsZW4sIEdGUF9LRVJORUwpOworCWlmIChzLT5mYWtlX2NpcyA9PSBOVUxMKSB7CisJCWRldl9wcmludGsoS0VSTl9XQVJOSU5HLCAmcy0+ZGV2LCAibm8gbWVtb3J5IHRvIHJlcGxhY2UgQ0lTXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCXMtPmZha2VfY2lzX2xlbiA9IGxlbjsKKwltZW1jcHkocy0+ZmFrZV9jaXMsIGRhdGEsIGxlbik7CisJcmV0dXJuIDA7CiB9CiBFWFBPUlRfU1lNQk9MKHBjbWNpYV9yZXBsYWNlX2Npcyk7CiAKQEAgLTQxOCw5ICs0MjUsOSBAQAogaW50IHBjY2FyZF9nZXRfZmlyc3RfdHVwbGUoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMsIHVuc2lnbmVkIGludCBmdW5jdGlvbiwgdHVwbGVfdCAqdHVwbGUpCiB7CiAgICAgaWYgKCFzKQotCXJldHVybiBDU19CQURfSEFORExFOworCXJldHVybiAtRUlOVkFMOwogICAgIGlmICghKHMtPnN0YXRlICYgU09DS0VUX1BSRVNFTlQpKQotCXJldHVybiBDU19OT19DQVJEOworCXJldHVybiAtRU5PREVWOwogICAgIHR1cGxlLT5UdXBsZUxpbmsgPSB0dXBsZS0+RmxhZ3MgPSAwOwogI2lmZGVmIENPTkZJR19DQVJEQlVTCiAgICAgaWYgKHMtPnN0YXRlICYgU09DS0VUX0NBUkRCVVMpIHsKQEAgLTQ0MCwxMCArNDQ3LDEwIEBACiAJISh0dXBsZS0+QXR0cmlidXRlcyAmIFRVUExFX1JFVFVSTl9DT01NT04pKSB7CiAJY2lzZGF0YV90IHJlcSA9IHR1cGxlLT5EZXNpcmVkVHVwbGU7CiAJdHVwbGUtPkRlc2lyZWRUdXBsZSA9IENJU1RQTF9MT05HTElOS19NRkM7Ci0JaWYgKHBjY2FyZF9nZXRfbmV4dF90dXBsZShzLCBmdW5jdGlvbiwgdHVwbGUpID09IENTX1NVQ0NFU1MpIHsKKwlpZiAocGNjYXJkX2dldF9uZXh0X3R1cGxlKHMsIGZ1bmN0aW9uLCB0dXBsZSkgPT0gMCkgewogCSAgICB0dXBsZS0+RGVzaXJlZFR1cGxlID0gQ0lTVFBMX0xJTktUQVJHRVQ7Ci0JICAgIGlmIChwY2NhcmRfZ2V0X25leHRfdHVwbGUocywgZnVuY3Rpb24sIHR1cGxlKSAhPSBDU19TVUNDRVNTKQotCQlyZXR1cm4gQ1NfTk9fTU9SRV9JVEVNUzsKKwkgICAgaWYgKHBjY2FyZF9nZXRfbmV4dF90dXBsZShzLCBmdW5jdGlvbiwgdHVwbGUpICE9IDApCisJCXJldHVybiAtRU5PU1BDOwogCX0gZWxzZQogCSAgICB0dXBsZS0+Q0lTT2Zmc2V0ID0gdHVwbGUtPlR1cGxlTGluayA9IDA7CiAJdHVwbGUtPkRlc2lyZWRUdXBsZSA9IHJlcTsKQEAgLTQ5OCw5ICs1MDUsOSBAQAogICAgIGludCBvZnMsIGksIGF0dHI7CiAKICAgICBpZiAoIXMpCi0JcmV0dXJuIENTX0JBRF9IQU5ETEU7CisJcmV0dXJuIC1FSU5WQUw7CiAgICAgaWYgKCEocy0+c3RhdGUgJiBTT0NLRVRfUFJFU0VOVCkpCi0JcmV0dXJuIENTX05PX0NBUkQ7CisJcmV0dXJuIC1FTk9ERVY7CiAKICAgICBsaW5rWzFdID0gdHVwbGUtPlR1cGxlTGluazsKICAgICBvZnMgPSB0dXBsZS0+Q0lTT2Zmc2V0ICsgdHVwbGUtPlR1cGxlTGluazsKQEAgLTUxOSw3ICs1MjYsNyBAQAogCS8qIEVuZCBvZiBjaGFpbj8gIEZvbGxvdyBsb25nIGxpbmsgaWYgcG9zc2libGUgKi8KIAlpZiAobGlua1swXSA9PSBDSVNUUExfRU5EKSB7CiAJICAgIGlmICgob2ZzID0gZm9sbG93X2xpbmsocywgdHVwbGUpKSA8IDApCi0JCXJldHVybiBDU19OT19NT1JFX0lURU1TOworCQlyZXR1cm4gLUVOT1NQQzsKIAkgICAgYXR0ciA9IFNQQUNFKHR1cGxlLT5GbGFncyk7CiAJICAgIHJlYWRfY2lzX2NhY2hlKHMsIGF0dHIsIG9mcywgMiwgbGluayk7CiAJfQpAQCAtNTc3LDEzICs1ODQsMTMgQEAKICAgICB9CiAgICAgaWYgKGkgPT0gTUFYX1RVUExFUykgewogCWNzX2RiZyhzLCAxLCAiY3M6IG92ZXJydW4gaW4gcGNtY2lhX2dldF9uZXh0X3R1cGxlXG4iKTsKLQlyZXR1cm4gQ1NfTk9fTU9SRV9JVEVNUzsKKwlyZXR1cm4gLUVOT1NQQzsKICAgICB9CiAgICAgCiAgICAgdHVwbGUtPlR1cGxlQ29kZSA9IGxpbmtbMF07CiAgICAgdHVwbGUtPlR1cGxlTGluayA9IGxpbmtbMV07CiAgICAgdHVwbGUtPkNJU09mZnNldCA9IG9mcyArIDI7Ci0gICAgcmV0dXJuIENTX1NVQ0NFU1M7CisgICAgcmV0dXJuIDA7CiB9CiBFWFBPUlRfU1lNQk9MKHBjY2FyZF9nZXRfbmV4dF90dXBsZSk7CiAKQEAgLTU5NiwxOCArNjAzLDE4IEBACiAgICAgdV9pbnQgbGVuOwogCiAgICAgaWYgKCFzKQotCXJldHVybiBDU19CQURfSEFORExFOworCXJldHVybiAtRUlOVkFMOwogCiAgICAgaWYgKHR1cGxlLT5UdXBsZUxpbmsgPCB0dXBsZS0+VHVwbGVPZmZzZXQpCi0JcmV0dXJuIENTX05PX01PUkVfSVRFTVM7CisJcmV0dXJuIC1FTk9TUEM7CiAgICAgbGVuID0gdHVwbGUtPlR1cGxlTGluayAtIHR1cGxlLT5UdXBsZU9mZnNldDsKICAgICB0dXBsZS0+VHVwbGVEYXRhTGVuID0gdHVwbGUtPlR1cGxlTGluazsKICAgICBpZiAobGVuID09IDApCi0JcmV0dXJuIENTX1NVQ0NFU1M7CisJcmV0dXJuIDA7CiAgICAgcmVhZF9jaXNfY2FjaGUocywgU1BBQ0UodHVwbGUtPkZsYWdzKSwKIAkJICAgdHVwbGUtPkNJU09mZnNldCArIHR1cGxlLT5UdXBsZU9mZnNldCwKIAkJICAgX01JTihsZW4sIHR1cGxlLT5UdXBsZURhdGFNYXgpLCB0dXBsZS0+VHVwbGVEYXRhKTsKLSAgICByZXR1cm4gQ1NfU1VDQ0VTUzsKKyAgICByZXR1cm4gMDsKIH0KIEVYUE9SVF9TWU1CT0wocGNjYXJkX2dldF90dXBsZV9kYXRhKTsKIApAQCAtNjQwLDI1ICs2NDcsMzEgQEAKIAljYXNlIDM6IGRldmljZS0+ZGV2W2ldLnNwZWVkID0gMTUwOyBicmVhazsKIAljYXNlIDQ6IGRldmljZS0+ZGV2W2ldLnNwZWVkID0gMTAwOyBicmVhazsKIAljYXNlIDc6Ci0JICAgIGlmICgrK3AgPT0gcSkgcmV0dXJuIENTX0JBRF9UVVBMRTsKKwkgICAgaWYgKCsrcCA9PSBxKQorCQkgICAgcmV0dXJuIC1FSU5WQUw7CiAJICAgIGRldmljZS0+ZGV2W2ldLnNwZWVkID0gU1BFRURfQ1ZUKCpwKTsKIAkgICAgd2hpbGUgKCpwICYgMHg4MCkKLQkJaWYgKCsrcCA9PSBxKSByZXR1cm4gQ1NfQkFEX1RVUExFOworCQlpZiAoKytwID09IHEpCisJCQlyZXR1cm4gLUVJTlZBTDsKIAkgICAgYnJlYWs7CiAJZGVmYXVsdDoKLQkgICAgcmV0dXJuIENTX0JBRF9UVVBMRTsKKwkgICAgcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JaWYgKCsrcCA9PSBxKSByZXR1cm4gQ1NfQkFEX1RVUExFOwotCWlmICgqcCA9PSAweGZmKSBicmVhazsKKwlpZiAoKytwID09IHEpCisJCXJldHVybiAtRUlOVkFMOworCWlmICgqcCA9PSAweGZmKQorCQlicmVhazsKIAlzY2FsZSA9ICpwICYgNzsKLQlpZiAoc2NhbGUgPT0gNykgcmV0dXJuIENTX0JBRF9UVVBMRTsKKwlpZiAoc2NhbGUgPT0gNykKKwkJcmV0dXJuIC1FSU5WQUw7CiAJZGV2aWNlLT5kZXZbaV0uc2l6ZSA9ICgoKnAgPj4gMykgKyAxKSAqICg1MTIgPDwgKHNjYWxlKjIpKTsKIAlkZXZpY2UtPm5kZXYrKzsKLQlpZiAoKytwID09IHEpIGJyZWFrOworCWlmICgrK3AgPT0gcSkKKwkJYnJlYWs7CiAgICAgfQogICAgIAotICAgIHJldHVybiBDU19TVUNDRVNTOworICAgIHJldHVybiAwOwogfQogCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KQEAgLTY2NywxMiArNjgwLDEyIEBACiB7CiAgICAgdV9jaGFyICpwOwogICAgIGlmICh0dXBsZS0+VHVwbGVEYXRhTGVuIDwgNSkKLQlyZXR1cm4gQ1NfQkFEX1RVUExFOworCXJldHVybiAtRUlOVkFMOwogICAgIHAgPSAodV9jaGFyICopIHR1cGxlLT5UdXBsZURhdGE7CiAgICAgY3N1bS0+YWRkciA9IHR1cGxlLT5DSVNPZmZzZXQgKyBnZXRfdW5hbGlnbmVkX2xlMTYocCkgLSAyOwogICAgIGNzdW0tPmxlbiA9IGdldF91bmFsaWduZWRfbGUxNihwICsgMik7CiAgICAgY3N1bS0+c3VtID0gKihwICsgNCk7Ci0gICAgcmV0dXJuIENTX1NVQ0NFU1M7CisgICAgcmV0dXJuIDA7CiB9CiAKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwpAQCAtNjgwLDkgKzY5Myw5IEBACiBzdGF0aWMgaW50IHBhcnNlX2xvbmdsaW5rKHR1cGxlX3QgKnR1cGxlLCBjaXN0cGxfbG9uZ2xpbmtfdCAqbGluaykKIHsKICAgICBpZiAodHVwbGUtPlR1cGxlRGF0YUxlbiA8IDQpCi0JcmV0dXJuIENTX0JBRF9UVVBMRTsKKwlyZXR1cm4gLUVJTlZBTDsKICAgICBsaW5rLT5hZGRyID0gZ2V0X3VuYWxpZ25lZF9sZTMyKHR1cGxlLT5UdXBsZURhdGEpOwotICAgIHJldHVybiBDU19TVUNDRVNTOworICAgIHJldHVybiAwOwogfQogCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KQEAgLTY5NywxMyArNzEwLDEzIEBACiAgICAgCiAgICAgbGluay0+bmZuID0gKnA7IHArKzsKICAgICBpZiAodHVwbGUtPlR1cGxlRGF0YUxlbiA8PSBsaW5rLT5uZm4qNSkKLQlyZXR1cm4gQ1NfQkFEX1RVUExFOworCXJldHVybiAtRUlOVkFMOwogICAgIGZvciAoaSA9IDA7IGkgPCBsaW5rLT5uZm47IGkrKykgewogCWxpbmstPmZuW2ldLnNwYWNlID0gKnA7IHArKzsKIAlsaW5rLT5mbltpXS5hZGRyID0gZ2V0X3VuYWxpZ25lZF9sZTMyKHApOwogCXAgKz0gNDsKICAgICB9Ci0gICAgcmV0dXJuIENTX1NVQ0NFU1M7CisgICAgcmV0dXJuIDA7CiB9CiAKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwpAQCAtNzEzLDI0ICs3MjYsMjcgQEAKIHsKICAgICBpbnQgaSwgaiwgbnM7CiAKLSAgICBpZiAocCA9PSBxKSByZXR1cm4gQ1NfQkFEX1RVUExFOworICAgIGlmIChwID09IHEpCisJICAgIHJldHVybiAtRUlOVkFMOwogICAgIG5zID0gMDsgaiA9IDA7CiAgICAgZm9yIChpID0gMDsgaSA8IG1heDsgaSsrKSB7Ci0JaWYgKCpwID09IDB4ZmYpIGJyZWFrOworCWlmICgqcCA9PSAweGZmKQorCQlicmVhazsKIAlvZnNbaV0gPSBqOwogCW5zKys7CiAJZm9yICg7OykgewogCSAgICBzW2orK10gPSAoKnAgPT0gMHhmZikgPyAnXDAnIDogKnA7CiAJICAgIGlmICgoKnAgPT0gJ1wwJykgfHwgKCpwID09IDB4ZmYpKSBicmVhazsKLQkgICAgaWYgKCsrcCA9PSBxKSByZXR1cm4gQ1NfQkFEX1RVUExFOworCSAgICBpZiAoKytwID09IHEpCisJCSAgICByZXR1cm4gLUVJTlZBTDsKIAl9CiAJaWYgKCgqcCA9PSAweGZmKSB8fCAoKytwID09IHEpKSBicmVhazsKICAgICB9CiAgICAgaWYgKGZvdW5kKSB7CiAJKmZvdW5kID0gbnM7Ci0JcmV0dXJuIENTX1NVQ0NFU1M7CisJcmV0dXJuIDA7CiAgICAgfSBlbHNlIHsKLQlyZXR1cm4gKG5zID09IG1heCkgPyBDU19TVUNDRVNTIDogQ1NfQkFEX1RVUExFOworCXJldHVybiAobnMgPT0gbWF4KSA/IDAgOiAtRUlOVkFMOwogICAgIH0KIH0KIApAQCAtNzQ1LDcgKzc2MSw4IEBACiAgICAgCiAgICAgdmVyc18xLT5tYWpvciA9ICpwOyBwKys7CiAgICAgdmVyc18xLT5taW5vciA9ICpwOyBwKys7Ci0gICAgaWYgKHAgPj0gcSkgcmV0dXJuIENTX0JBRF9UVVBMRTsKKyAgICBpZiAocCA+PSBxKQorCSAgICByZXR1cm4gLUVJTlZBTDsKIAogICAgIHJldHVybiBwYXJzZV9zdHJpbmdzKHAsIHEsIENJU1RQTF9WRVJTXzFfTUFYX1BST0RfU1RSSU5HUywKIAkJCSB2ZXJzXzEtPnN0ciwgdmVyc18xLT5vZnMsICZ2ZXJzXzEtPm5zKTsKQEAgLTc4MSw3ICs3OTgsNyBAQAogCXAgKz0gMjsKICAgICB9CiAgICAgamVkZWMtPm5pZCA9IG5pZDsKLSAgICByZXR1cm4gQ1NfU1VDQ0VTUzsKKyAgICByZXR1cm4gMDsKIH0KIAogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCkBAIC03ODksMTAgKzgwNiwxMCBAQAogc3RhdGljIGludCBwYXJzZV9tYW5maWQodHVwbGVfdCAqdHVwbGUsIGNpc3RwbF9tYW5maWRfdCAqbSkKIHsKICAgICBpZiAodHVwbGUtPlR1cGxlRGF0YUxlbiA8IDQpCi0JcmV0dXJuIENTX0JBRF9UVVBMRTsKKwlyZXR1cm4gLUVJTlZBTDsKICAgICBtLT5tYW5mID0gZ2V0X3VuYWxpZ25lZF9sZTE2KHR1cGxlLT5UdXBsZURhdGEpOwogICAgIG0tPmNhcmQgPSBnZXRfdW5hbGlnbmVkX2xlMTYodHVwbGUtPlR1cGxlRGF0YSArIDIpOwotICAgIHJldHVybiBDU19TVUNDRVNTOworICAgIHJldHVybiAwOwogfQogCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KQEAgLTgwMSwxMSArODE4LDExIEBACiB7CiAgICAgdV9jaGFyICpwOwogICAgIGlmICh0dXBsZS0+VHVwbGVEYXRhTGVuIDwgMikKLQlyZXR1cm4gQ1NfQkFEX1RVUExFOworCXJldHVybiAtRUlOVkFMOwogICAgIHAgPSAodV9jaGFyICopdHVwbGUtPlR1cGxlRGF0YTsKICAgICBmLT5mdW5jID0gcFswXTsKICAgICBmLT5zeXNpbml0ID0gcFsxXTsKLSAgICByZXR1cm4gQ1NfU1VDQ0VTUzsKKyAgICByZXR1cm4gMDsKIH0KIAogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCkBAIC04MTUsMTIgKzgzMiwxMiBAQAogICAgIHVfY2hhciAqcDsKICAgICBpbnQgaTsKICAgICBpZiAodHVwbGUtPlR1cGxlRGF0YUxlbiA8IDEpCi0JcmV0dXJuIENTX0JBRF9UVVBMRTsKKwlyZXR1cm4gLUVJTlZBTDsKICAgICBwID0gKHVfY2hhciAqKXR1cGxlLT5UdXBsZURhdGE7CiAgICAgZi0+dHlwZSA9IHBbMF07CiAgICAgZm9yIChpID0gMTsgaSA8IHR1cGxlLT5UdXBsZURhdGFMZW47IGkrKykKIAlmLT5kYXRhW2ktMV0gPSBwW2ldOwotICAgIHJldHVybiBDU19TVUNDRVNTOworICAgIHJldHVybiAwOwogfQogCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KQEAgLTgzNCw3ICs4NTEsNyBAQAogICAgIHJhc3ogPSAqcCAmIDB4MDM7CiAgICAgcm1zeiA9ICgqcCAmIDB4M2MpID4+IDI7CiAgICAgaWYgKHR1cGxlLT5UdXBsZURhdGFMZW4gPCByYXN6K3Jtc3orNCkKLQlyZXR1cm4gQ1NfQkFEX1RVUExFOworCXJldHVybiAtRUlOVkFMOwogICAgIGNvbmZpZy0+bGFzdF9pZHggPSAqKCsrcCk7CiAgICAgcCsrOwogICAgIGNvbmZpZy0+YmFzZSA9IDA7CkBAIC04NDYsNyArODYzLDcgQEAKICAgICBmb3IgKGkgPSAwOyBpIDw9IHJtc3o7IGkrKykKIAljb25maWctPnJtYXNrW2k+PjJdICs9IHBbaV0gPDwgKDgqKGklNCkpOwogICAgIGNvbmZpZy0+c3VidHVwbGVzID0gdHVwbGUtPlR1cGxlRGF0YUxlbiAtIChyYXN6K3Jtc3orNCk7Ci0gICAgcmV0dXJuIENTX1NVQ0NFU1M7CisgICAgcmV0dXJuIDA7CiB9CiAKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpAQCAtMTAwMiwxMCArMTAxOSwxMiBAQAogCiBzdGF0aWMgdV9jaGFyICpwYXJzZV9pcnEodV9jaGFyICpwLCB1X2NoYXIgKnEsIGNpc3RwbF9pcnFfdCAqaXJxKQogewotICAgIGlmIChwID09IHEpIHJldHVybiBOVUxMOworICAgIGlmIChwID09IHEpCisJICAgIHJldHVybiBOVUxMOwogICAgIGlycS0+SVJRSW5mbzEgPSAqcDsgcCsrOwogICAgIGlmIChpcnEtPklSUUluZm8xICYgSVJRX0lORk8yX1ZBTElEKSB7Ci0JaWYgKHArMiA+IHEpIHJldHVybiBOVUxMOworCWlmIChwKzIgPiBxKQorCQlyZXR1cm4gTlVMTDsKIAlpcnEtPklSUUluZm8yID0gKHBbMV08PDgpICsgcFswXTsKIAlwICs9IDI7CiAgICAgfQpAQCAtMTAyNiw3ICsxMDQ1LDggQEAKICAgICBpZiAoKnAgJiAweDQwKQogCWVudHJ5LT5mbGFncyB8PSBDSVNUUExfQ0ZUQUJMRV9ERUZBVUxUOwogICAgIGlmICgqcCAmIDB4ODApIHsKLQlpZiAoKytwID09IHEpIHJldHVybiBDU19CQURfVFVQTEU7CisJaWYgKCsrcCA9PSBxKQorCQlyZXR1cm4gLUVJTlZBTDsKIAlpZiAoKnAgJiAweDEwKQogCSAgICBlbnRyeS0+ZmxhZ3MgfD0gQ0lTVFBMX0NGVEFCTEVfQlZEUzsKIAlpZiAoKnAgJiAweDIwKQpAQCAtMTA0MCwzMCArMTA2MCwzNSBAQAogCWVudHJ5LT5pbnRlcmZhY2UgPSAwOwogCiAgICAgLyogUHJvY2VzcyBvcHRpb25hbCBmZWF0dXJlcyAqLwotICAgIGlmICgrK3AgPT0gcSkgcmV0dXJuIENTX0JBRF9UVVBMRTsKKyAgICBpZiAoKytwID09IHEpCisJICAgIHJldHVybiAtRUlOVkFMOwogICAgIGZlYXR1cmVzID0gKnA7IHArKzsKIAogICAgIC8qIFBvd2VyIG9wdGlvbnMgKi8KICAgICBpZiAoKGZlYXR1cmVzICYgMykgPiAwKSB7CiAJcCA9IHBhcnNlX3Bvd2VyKHAsIHEsICZlbnRyeS0+dmNjKTsKLQlpZiAocCA9PSBOVUxMKSByZXR1cm4gQ1NfQkFEX1RVUExFOworCWlmIChwID09IE5VTEwpCisJCXJldHVybiAtRUlOVkFMOwogICAgIH0gZWxzZQogCWVudHJ5LT52Y2MucHJlc2VudCA9IDA7CiAgICAgaWYgKChmZWF0dXJlcyAmIDMpID4gMSkgewogCXAgPSBwYXJzZV9wb3dlcihwLCBxLCAmZW50cnktPnZwcDEpOwotCWlmIChwID09IE5VTEwpIHJldHVybiBDU19CQURfVFVQTEU7CisJaWYgKHAgPT0gTlVMTCkKKwkJcmV0dXJuIC1FSU5WQUw7CiAgICAgfSBlbHNlCiAJZW50cnktPnZwcDEucHJlc2VudCA9IDA7CiAgICAgaWYgKChmZWF0dXJlcyAmIDMpID4gMikgewogCXAgPSBwYXJzZV9wb3dlcihwLCBxLCAmZW50cnktPnZwcDIpOwotCWlmIChwID09IE5VTEwpIHJldHVybiBDU19CQURfVFVQTEU7CisJaWYgKHAgPT0gTlVMTCkKKwkJcmV0dXJuIC1FSU5WQUw7CiAgICAgfSBlbHNlCiAJZW50cnktPnZwcDIucHJlc2VudCA9IDA7CiAKICAgICAvKiBUaW1pbmcgb3B0aW9ucyAqLwogICAgIGlmIChmZWF0dXJlcyAmIDB4MDQpIHsKIAlwID0gcGFyc2VfdGltaW5nKHAsIHEsICZlbnRyeS0+dGltaW5nKTsKLQlpZiAocCA9PSBOVUxMKSByZXR1cm4gQ1NfQkFEX1RVUExFOworCWlmIChwID09IE5VTEwpCisJCXJldHVybiAtRUlOVkFMOwogICAgIH0gZWxzZSB7CiAJZW50cnktPnRpbWluZy53YWl0ID0gMDsKIAllbnRyeS0+dGltaW5nLnJlYWR5ID0gMDsKQEAgLTEwNzMsMTQgKzEwOTgsMTYgQEAKICAgICAvKiBJL08gd2luZG93IG9wdGlvbnMgKi8KICAgICBpZiAoZmVhdHVyZXMgJiAweDA4KSB7CiAJcCA9IHBhcnNlX2lvKHAsIHEsICZlbnRyeS0+aW8pOwotCWlmIChwID09IE5VTEwpIHJldHVybiBDU19CQURfVFVQTEU7CisJaWYgKHAgPT0gTlVMTCkKKwkJcmV0dXJuIC1FSU5WQUw7CiAgICAgfSBlbHNlCiAJZW50cnktPmlvLm53aW4gPSAwOwogICAgIAogICAgIC8qIEludGVycnVwdCBvcHRpb25zICovCiAgICAgaWYgKGZlYXR1cmVzICYgMHgxMCkgewogCXAgPSBwYXJzZV9pcnEocCwgcSwgJmVudHJ5LT5pcnEpOwotCWlmIChwID09IE5VTEwpIHJldHVybiBDU19CQURfVFVQTEU7CisJaWYgKHAgPT0gTlVMTCkKKwkJcmV0dXJuIC1FSU5WQUw7CiAgICAgfSBlbHNlCiAJZW50cnktPmlycS5JUlFJbmZvMSA9IDA7CiAKQEAgLTEwOTQsNyArMTEyMSw4IEBACiAJZW50cnktPm1lbS53aW5bMF0uY2FyZF9hZGRyID0gMDsKIAllbnRyeS0+bWVtLndpblswXS5ob3N0X2FkZHIgPSAwOwogCXAgKz0gMjsKLQlpZiAocCA+IHEpIHJldHVybiBDU19CQURfVFVQTEU7CisJaWYgKHAgPiBxKQorCQlyZXR1cm4gLUVJTlZBTDsKIAlicmVhazsKICAgICBjYXNlIDB4NDA6CiAJZW50cnktPm1lbS5ud2luID0gMTsKQEAgLTExMDIsMjYgKzExMzAsMzAgQEAKIAllbnRyeS0+bWVtLndpblswXS5jYXJkX2FkZHIgPSBnZXRfdW5hbGlnbmVkX2xlMTYocCArIDIpIDw8IDg7CiAJZW50cnktPm1lbS53aW5bMF0uaG9zdF9hZGRyID0gMDsKIAlwICs9IDQ7Ci0JaWYgKHAgPiBxKSByZXR1cm4gQ1NfQkFEX1RVUExFOworCWlmIChwID4gcSkKKwkJcmV0dXJuIC1FSU5WQUw7CiAJYnJlYWs7CiAgICAgY2FzZSAweDYwOgogCXAgPSBwYXJzZV9tZW0ocCwgcSwgJmVudHJ5LT5tZW0pOwotCWlmIChwID09IE5VTEwpIHJldHVybiBDU19CQURfVFVQTEU7CisJaWYgKHAgPT0gTlVMTCkKKwkJcmV0dXJuIC1FSU5WQUw7CiAJYnJlYWs7CiAgICAgfQogCiAgICAgLyogTWlzYyBmZWF0dXJlcyAqLwogICAgIGlmIChmZWF0dXJlcyAmIDB4ODApIHsKLQlpZiAocCA9PSBxKSByZXR1cm4gQ1NfQkFEX1RVUExFOworCWlmIChwID09IHEpCisJCXJldHVybiAtRUlOVkFMOwogCWVudHJ5LT5mbGFncyB8PSAoKnAgPDwgOCk7CiAJd2hpbGUgKCpwICYgMHg4MCkKLQkgICAgaWYgKCsrcCA9PSBxKSByZXR1cm4gQ1NfQkFEX1RVUExFOworCSAgICBpZiAoKytwID09IHEpCisJCSAgICByZXR1cm4gLUVJTlZBTDsKIAlwKys7CiAgICAgfQogCiAgICAgZW50cnktPnN1YnR1cGxlcyA9IHEtcDsKICAgICAKLSAgICByZXR1cm4gQ1NfU1VDQ0VTUzsKKyAgICByZXR1cm4gMDsKIH0KIAogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCkBAIC0xMTMyLDEyICsxMTY0LDEyIEBACiB7CiAgICAgdV9jaGFyICpwOwogICAgIGlmICh0dXBsZS0+VHVwbGVEYXRhTGVuIDwgNikKLQlyZXR1cm4gQ1NfQkFEX1RVUExFOworCXJldHVybiAtRUlOVkFMOwogICAgIHAgPSAodV9jaGFyICopdHVwbGUtPlR1cGxlRGF0YTsKICAgICBiYXItPmF0dHIgPSAqcDsKICAgICBwICs9IDI7CiAgICAgYmFyLT5zaXplID0gZ2V0X3VuYWxpZ25lZF9sZTMyKHApOwotICAgIHJldHVybiBDU19TVUNDRVNTOworICAgIHJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IHBhcnNlX2NvbmZpZ19jYih0dXBsZV90ICp0dXBsZSwgY2lzdHBsX2NvbmZpZ190ICpjb25maWcpCkBAIC0xMTQ2LDEyICsxMTc4LDEyIEBACiAgICAgCiAgICAgcCA9ICh1X2NoYXIgKil0dXBsZS0+VHVwbGVEYXRhOwogICAgIGlmICgoKnAgIT0gMykgfHwgKHR1cGxlLT5UdXBsZURhdGFMZW4gPCA2KSkKLQlyZXR1cm4gQ1NfQkFEX1RVUExFOworCXJldHVybiAtRUlOVkFMOwogICAgIGNvbmZpZy0+bGFzdF9pZHggPSAqKCsrcCk7CiAgICAgcCsrOwogICAgIGNvbmZpZy0+YmFzZSA9IGdldF91bmFsaWduZWRfbGUzMihwKTsKICAgICBjb25maWctPnN1YnR1cGxlcyA9IHR1cGxlLT5UdXBsZURhdGFMZW4gLSA2OwotICAgIHJldHVybiBDU19TVUNDRVNTOworICAgIHJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IHBhcnNlX2NmdGFibGVfZW50cnlfY2IodHVwbGVfdCAqdHVwbGUsCkBAIC0xMTY3LDI5ICsxMTk5LDM0IEBACiAJZW50cnktPmZsYWdzIHw9IENJU1RQTF9DRlRBQkxFX0RFRkFVTFQ7CiAKICAgICAvKiBQcm9jZXNzIG9wdGlvbmFsIGZlYXR1cmVzICovCi0gICAgaWYgKCsrcCA9PSBxKSByZXR1cm4gQ1NfQkFEX1RVUExFOworICAgIGlmICgrK3AgPT0gcSkKKwkgICAgcmV0dXJuIC1FSU5WQUw7CiAgICAgZmVhdHVyZXMgPSAqcDsgcCsrOwogCiAgICAgLyogUG93ZXIgb3B0aW9ucyAqLwogICAgIGlmICgoZmVhdHVyZXMgJiAzKSA+IDApIHsKIAlwID0gcGFyc2VfcG93ZXIocCwgcSwgJmVudHJ5LT52Y2MpOwotCWlmIChwID09IE5VTEwpIHJldHVybiBDU19CQURfVFVQTEU7CisJaWYgKHAgPT0gTlVMTCkKKwkJcmV0dXJuIC1FSU5WQUw7CiAgICAgfSBlbHNlCiAJZW50cnktPnZjYy5wcmVzZW50ID0gMDsKICAgICBpZiAoKGZlYXR1cmVzICYgMykgPiAxKSB7CiAJcCA9IHBhcnNlX3Bvd2VyKHAsIHEsICZlbnRyeS0+dnBwMSk7Ci0JaWYgKHAgPT0gTlVMTCkgcmV0dXJuIENTX0JBRF9UVVBMRTsKKwlpZiAocCA9PSBOVUxMKQorCQlyZXR1cm4gLUVJTlZBTDsKICAgICB9IGVsc2UKIAllbnRyeS0+dnBwMS5wcmVzZW50ID0gMDsKICAgICBpZiAoKGZlYXR1cmVzICYgMykgPiAyKSB7CiAJcCA9IHBhcnNlX3Bvd2VyKHAsIHEsICZlbnRyeS0+dnBwMik7Ci0JaWYgKHAgPT0gTlVMTCkgcmV0dXJuIENTX0JBRF9UVVBMRTsKKwlpZiAocCA9PSBOVUxMKQorCQlyZXR1cm4gLUVJTlZBTDsKICAgICB9IGVsc2UKIAllbnRyeS0+dnBwMi5wcmVzZW50ID0gMDsKIAogICAgIC8qIEkvTyB3aW5kb3cgb3B0aW9ucyAqLwogICAgIGlmIChmZWF0dXJlcyAmIDB4MDgpIHsKLQlpZiAocCA9PSBxKSByZXR1cm4gQ1NfQkFEX1RVUExFOworCWlmIChwID09IHEpCisJCXJldHVybiAtRUlOVkFMOwogCWVudHJ5LT5pbyA9ICpwOyBwKys7CiAgICAgfSBlbHNlCiAJZW50cnktPmlvID0gMDsKQEAgLTExOTcsMzIgKzEyMzQsMzcgQEAKICAgICAvKiBJbnRlcnJ1cHQgb3B0aW9ucyAqLwogICAgIGlmIChmZWF0dXJlcyAmIDB4MTApIHsKIAlwID0gcGFyc2VfaXJxKHAsIHEsICZlbnRyeS0+aXJxKTsKLQlpZiAocCA9PSBOVUxMKSByZXR1cm4gQ1NfQkFEX1RVUExFOworCWlmIChwID09IE5VTEwpCisJCXJldHVybiAtRUlOVkFMOwogICAgIH0gZWxzZQogCWVudHJ5LT5pcnEuSVJRSW5mbzEgPSAwOwogCiAgICAgaWYgKGZlYXR1cmVzICYgMHgyMCkgewotCWlmIChwID09IHEpIHJldHVybiBDU19CQURfVFVQTEU7CisJaWYgKHAgPT0gcSkKKwkJcmV0dXJuIC1FSU5WQUw7CiAJZW50cnktPm1lbSA9ICpwOyBwKys7CiAgICAgfSBlbHNlCiAJZW50cnktPm1lbSA9IDA7CiAKICAgICAvKiBNaXNjIGZlYXR1cmVzICovCiAgICAgaWYgKGZlYXR1cmVzICYgMHg4MCkgewotCWlmIChwID09IHEpIHJldHVybiBDU19CQURfVFVQTEU7CisJaWYgKHAgPT0gcSkKKwkJcmV0dXJuIC1FSU5WQUw7CiAJZW50cnktPmZsYWdzIHw9ICgqcCA8PCA4KTsKIAlpZiAoKnAgJiAweDgwKSB7Ci0JICAgIGlmICgrK3AgPT0gcSkgcmV0dXJuIENTX0JBRF9UVVBMRTsKKwkgICAgaWYgKCsrcCA9PSBxKQorCQkgICAgcmV0dXJuIC1FSU5WQUw7CiAJICAgIGVudHJ5LT5mbGFncyB8PSAoKnAgPDwgMTYpOwogCX0KIAl3aGlsZSAoKnAgJiAweDgwKQotCSAgICBpZiAoKytwID09IHEpIHJldHVybiBDU19CQURfVFVQTEU7CisJICAgIGlmICgrK3AgPT0gcSkKKwkJICAgIHJldHVybiAtRUlOVkFMOwogCXArKzsKICAgICB9CiAKICAgICBlbnRyeS0+c3VidHVwbGVzID0gcS1wOwogICAgIAotICAgIHJldHVybiBDU19TVUNDRVNTOworICAgIHJldHVybiAwOwogfQogCiAjZW5kaWYKQEAgLTEyNDgsNyArMTI5MCw3IEBACiAJcCArPSA2OwogICAgIH0KICAgICBnZW8tPm5nZW8gPSBuOwotICAgIHJldHVybiBDU19TVUNDRVNTOworICAgIHJldHVybiAwOwogfQogCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KQEAgLTEyNTgsNyArMTMwMCw3IEBACiAgICAgdV9jaGFyICpwLCAqcTsKIAogICAgIGlmICh0dXBsZS0+VHVwbGVEYXRhTGVuIDwgMTApCi0JcmV0dXJuIENTX0JBRF9UVVBMRTsKKwlyZXR1cm4gLUVJTlZBTDsKICAgICAKICAgICBwID0gdHVwbGUtPlR1cGxlRGF0YTsKICAgICBxID0gcCArIHR1cGxlLT5UdXBsZURhdGFMZW47CkBAIC0xMjgyLDE1ICsxMzI0LDE4IEBACiAgICAgCiAgICAgcCA9IHR1cGxlLT5UdXBsZURhdGE7CiAgICAgcSA9IHAgKyB0dXBsZS0+VHVwbGVEYXRhTGVuOwotICAgIGlmIChwID09IHEpIHJldHVybiBDU19CQURfVFVQTEU7CisgICAgaWYgKHAgPT0gcSkKKwkgICAgcmV0dXJuIC1FSU5WQUw7CiAgICAgb3JnLT5kYXRhX29yZyA9ICpwOwotICAgIGlmICgrK3AgPT0gcSkgcmV0dXJuIENTX0JBRF9UVVBMRTsKKyAgICBpZiAoKytwID09IHEpCisJICAgIHJldHVybiAtRUlOVkFMOwogICAgIGZvciAoaSA9IDA7IGkgPCAzMDsgaSsrKSB7CiAJb3JnLT5kZXNjW2ldID0gKnA7CiAJaWYgKCpwID09ICdcMCcpIGJyZWFrOwotCWlmICgrK3AgPT0gcSkgcmV0dXJuIENTX0JBRF9UVVBMRTsKKwlpZiAoKytwID09IHEpCisJCXJldHVybiAtRUlOVkFMOwogICAgIH0KLSAgICByZXR1cm4gQ1NfU1VDQ0VTUzsKKyAgICByZXR1cm4gMDsKIH0KIAogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCkBAIC0xMzAwLDcgKzEzNDUsNyBAQAogICAgIHVfY2hhciAqcDsKIAogICAgIGlmICh0dXBsZS0+VHVwbGVEYXRhTGVuIDwgMTApCi0JcmV0dXJuIENTX0JBRF9UVVBMRTsKKwlyZXR1cm4gLUVJTlZBTDsKIAogICAgIHAgPSB0dXBsZS0+VHVwbGVEYXRhOwogCkBAIC0xMzA5LDE3ICsxMzU0LDE3IEBACiAgICAgZm10LT5vZmZzZXQgPSBnZXRfdW5hbGlnbmVkX2xlMzIocCArIDIpOwogICAgIGZtdC0+bGVuZ3RoID0gZ2V0X3VuYWxpZ25lZF9sZTMyKHAgKyA2KTsKIAotICAgIHJldHVybiBDU19TVUNDRVNTOworICAgIHJldHVybiAwOwogfQogCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIAotaW50IHBjY2FyZF9wYXJzZV90dXBsZSh0dXBsZV90ICp0dXBsZSwgY2lzcGFyc2VfdCAqcGFyc2UpCitpbnQgcGNtY2lhX3BhcnNlX3R1cGxlKHR1cGxlX3QgKnR1cGxlLCBjaXNwYXJzZV90ICpwYXJzZSkKIHsKLSAgICBpbnQgcmV0ID0gQ1NfU1VDQ0VTUzsKKyAgICBpbnQgcmV0ID0gMDsKICAgICAKICAgICBpZiAodHVwbGUtPlR1cGxlRGF0YUxlbiA+IHR1cGxlLT5UdXBsZURhdGFNYXgpCi0JcmV0dXJuIENTX0JBRF9UVVBMRTsKKwlyZXR1cm4gLUVJTlZBTDsKICAgICBzd2l0Y2ggKHR1cGxlLT5UdXBsZUNvZGUpIHsKICAgICBjYXNlIENJU1RQTF9ERVZJQ0U6CiAgICAgY2FzZSBDSVNUUExfREVWSUNFX0E6CkBAIC0xMzg3LDE1ICsxNDMyLDE3IEBACiAJYnJlYWs7CiAgICAgY2FzZSBDSVNUUExfTk9fTElOSzoKICAgICBjYXNlIENJU1RQTF9MSU5LVEFSR0VUOgotCXJldCA9IENTX1NVQ0NFU1M7CisJcmV0ID0gMDsKIAlicmVhazsKICAgICBkZWZhdWx0OgotCXJldCA9IENTX1VOU1VQUE9SVEVEX0ZVTkNUSU9OOworCXJldCA9IC1FSU5WQUw7CiAJYnJlYWs7CiAgICAgfQorICAgIGlmIChyZXQpCisJICAgIF9fY3NfZGJnKDAsICJwYXJzZV90dXBsZSBmYWlsZWQgJWRcbiIsIHJldCk7CiAgICAgcmV0dXJuIHJldDsKIH0KLUVYUE9SVF9TWU1CT0wocGNjYXJkX3BhcnNlX3R1cGxlKTsKK0VYUE9SVF9TWU1CT0wocGNtY2lhX3BhcnNlX3R1cGxlKTsKIAogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKQEAgLTE0MTAsMTggKzE0NTcsMjIgQEAKICAgICBpbnQgcmV0OwogCiAgICAgYnVmID0ga21hbGxvYygyNTYsIEdGUF9LRVJORUwpOwotICAgIGlmIChidWYgPT0gTlVMTCkKLQlyZXR1cm4gQ1NfT1VUX09GX1JFU09VUkNFOworICAgIGlmIChidWYgPT0gTlVMTCkgeworCSAgICBkZXZfcHJpbnRrKEtFUk5fV0FSTklORywgJnMtPmRldiwgIm5vIG1lbW9yeSB0byByZWFkIHR1cGxlXG4iKTsKKwkgICAgcmV0dXJuIC1FTk9NRU07CisgICAgfQogICAgIHR1cGxlLkRlc2lyZWRUdXBsZSA9IGNvZGU7CiAgICAgdHVwbGUuQXR0cmlidXRlcyA9IFRVUExFX1JFVFVSTl9DT01NT047CiAgICAgcmV0ID0gcGNjYXJkX2dldF9maXJzdF90dXBsZShzLCBmdW5jdGlvbiwgJnR1cGxlKTsKLSAgICBpZiAocmV0ICE9IENTX1NVQ0NFU1MpIGdvdG8gZG9uZTsKKyAgICBpZiAocmV0ICE9IDApCisJICAgIGdvdG8gZG9uZTsKICAgICB0dXBsZS5UdXBsZURhdGEgPSBidWY7CiAgICAgdHVwbGUuVHVwbGVPZmZzZXQgPSAwOwogICAgIHR1cGxlLlR1cGxlRGF0YU1heCA9IDI1NTsKICAgICByZXQgPSBwY2NhcmRfZ2V0X3R1cGxlX2RhdGEocywgJnR1cGxlKTsKLSAgICBpZiAocmV0ICE9IENTX1NVQ0NFU1MpIGdvdG8gZG9uZTsKLSAgICByZXQgPSBwY2NhcmRfcGFyc2VfdHVwbGUoJnR1cGxlLCBwYXJzZSk7CisgICAgaWYgKHJldCAhPSAwKQorCSAgICBnb3RvIGRvbmU7CisgICAgcmV0ID0gcGNtY2lhX3BhcnNlX3R1cGxlKCZ0dXBsZSwgcGFyc2UpOwogZG9uZToKICAgICBrZnJlZShidWYpOwogICAgIHJldHVybiByZXQ7CkBAIC0xNDQ2LDM3ICsxNDk3LDQwIEBACiAgICAgaW50IHJldCwgcmVzZXJ2ZWQsIGRldl9vayA9IDAsIGlkZW50X29rID0gMDsKIAogICAgIGlmICghcykKLQlyZXR1cm4gQ1NfQkFEX0hBTkRMRTsKKwlyZXR1cm4gLUVJTlZBTDsKIAogICAgIHR1cGxlID0ga21hbGxvYyhzaXplb2YoKnR1cGxlKSwgR0ZQX0tFUk5FTCk7Ci0gICAgaWYgKHR1cGxlID09IE5VTEwpCi0JcmV0dXJuIENTX09VVF9PRl9SRVNPVVJDRTsKKyAgICBpZiAodHVwbGUgPT0gTlVMTCkgeworCSAgICBkZXZfcHJpbnRrKEtFUk5fV0FSTklORywgJnMtPmRldiwgIm5vIG1lbW9yeSB0byB2YWxpZGF0ZSBDSVNcbiIpOworCSAgICByZXR1cm4gLUVOT01FTTsKKyAgICB9CiAgICAgcCA9IGttYWxsb2Moc2l6ZW9mKCpwKSwgR0ZQX0tFUk5FTCk7CiAgICAgaWYgKHAgPT0gTlVMTCkgewotCWtmcmVlKHR1cGxlKTsKLQlyZXR1cm4gQ1NfT1VUX09GX1JFU09VUkNFOworCSAgICBrZnJlZSh0dXBsZSk7CisJICAgIGRldl9wcmludGsoS0VSTl9XQVJOSU5HLCAmcy0+ZGV2LCAibm8gbWVtb3J5IHRvIHZhbGlkYXRlIENJU1xuIik7CisJICAgIHJldHVybiAtRU5PTUVNOwogICAgIH0KIAogICAgIGNvdW50ID0gcmVzZXJ2ZWQgPSAwOwogICAgIHR1cGxlLT5EZXNpcmVkVHVwbGUgPSBSRVRVUk5fRklSU1RfVFVQTEU7CiAgICAgdHVwbGUtPkF0dHJpYnV0ZXMgPSBUVVBMRV9SRVRVUk5fQ09NTU9OOwogICAgIHJldCA9IHBjY2FyZF9nZXRfZmlyc3RfdHVwbGUocywgZnVuY3Rpb24sIHR1cGxlKTsKLSAgICBpZiAocmV0ICE9IENTX1NVQ0NFU1MpCisgICAgaWYgKHJldCAhPSAwKQogCWdvdG8gZG9uZTsKIAogICAgIC8qIEZpcnN0IHR1cGxlIHNob3VsZCBiZSBERVZJQ0U7IHdlIHNob3VsZCByZWFsbHkgaGF2ZSBlaXRoZXIgdGhhdAogICAgICAgIG9yIGEgQ0ZUQUJMRV9FTlRSWSBvZiBzb21lIHNvcnQgKi8KICAgICBpZiAoKHR1cGxlLT5UdXBsZUNvZGUgPT0gQ0lTVFBMX0RFVklDRSkgfHwKLQkocGNjYXJkX3JlYWRfdHVwbGUocywgZnVuY3Rpb24sIENJU1RQTF9DRlRBQkxFX0VOVFJZLCBwKSA9PSBDU19TVUNDRVNTKSB8fAotCShwY2NhcmRfcmVhZF90dXBsZShzLCBmdW5jdGlvbiwgQ0lTVFBMX0NGVEFCTEVfRU5UUllfQ0IsIHApID09IENTX1NVQ0NFU1MpKQorCShwY2NhcmRfcmVhZF90dXBsZShzLCBmdW5jdGlvbiwgQ0lTVFBMX0NGVEFCTEVfRU5UUlksIHApID09IDApIHx8CisJKHBjY2FyZF9yZWFkX3R1cGxlKHMsIGZ1bmN0aW9uLCBDSVNUUExfQ0ZUQUJMRV9FTlRSWV9DQiwgcCkgPT0gMCkpCiAJZGV2X29rKys7CiAKICAgICAvKiBBbGwgY2FyZHMgc2hvdWxkIGhhdmUgYSBNQU5GSUQgdHVwbGUsIGFuZC9vciBhIFZFUlNfMSBvciBWRVJTXzIKICAgICAgICB0dXBsZSwgZm9yIGNhcmQgaWRlbnRpZmljYXRpb24uICBDZXJ0YWluIG9sZCBELUxpbmsgYW5kIExpbmtzeXMKICAgICAgICBjYXJkcyBoYXZlIG9ubHkgYSBicm9rZW4gVkVSU18yIHR1cGxlOyBoZW5jZSB0aGUgYm9ndXMgdGVzdC4gKi8KLSAgICBpZiAoKHBjY2FyZF9yZWFkX3R1cGxlKHMsIGZ1bmN0aW9uLCBDSVNUUExfTUFORklELCBwKSA9PSBDU19TVUNDRVNTKSB8fAotCShwY2NhcmRfcmVhZF90dXBsZShzLCBmdW5jdGlvbiwgQ0lTVFBMX1ZFUlNfMSwgcCkgPT0gQ1NfU1VDQ0VTUykgfHwKLQkocGNjYXJkX3JlYWRfdHVwbGUocywgZnVuY3Rpb24sIENJU1RQTF9WRVJTXzIsIHApICE9IENTX05PX01PUkVfSVRFTVMpKQorICAgIGlmICgocGNjYXJkX3JlYWRfdHVwbGUocywgZnVuY3Rpb24sIENJU1RQTF9NQU5GSUQsIHApID09IDApIHx8CisJKHBjY2FyZF9yZWFkX3R1cGxlKHMsIGZ1bmN0aW9uLCBDSVNUUExfVkVSU18xLCBwKSA9PSAwKSB8fAorCShwY2NhcmRfcmVhZF90dXBsZShzLCBmdW5jdGlvbiwgQ0lTVFBMX1ZFUlNfMiwgcCkgIT0gLUVOT1NQQykpCiAJaWRlbnRfb2srKzsKIAogICAgIGlmICghZGV2X29rICYmICFpZGVudF9vaykKQEAgLTE0ODQsNyArMTUzOCw4IEBACiAKICAgICBmb3IgKGNvdW50ID0gMTsgY291bnQgPCBNQVhfVFVQTEVTOyBjb3VudCsrKSB7CiAJcmV0ID0gcGNjYXJkX2dldF9uZXh0X3R1cGxlKHMsIGZ1bmN0aW9uLCB0dXBsZSk7Ci0JaWYgKHJldCAhPSBDU19TVUNDRVNTKSBicmVhazsKKwlpZiAocmV0ICE9IDApCisJCWJyZWFrOwogCWlmICgoKHR1cGxlLT5UdXBsZUNvZGUgPiAweDIzKSAmJiAodHVwbGUtPlR1cGxlQ29kZSA8IDB4NDApKSB8fAogCSAgICAoKHR1cGxlLT5UdXBsZUNvZGUgPiAweDQ3KSAmJiAodHVwbGUtPlR1cGxlQ29kZSA8IDB4ODApKSB8fAogCSAgICAoKHR1cGxlLT5UdXBsZUNvZGUgPiAweDkwKSAmJiAodHVwbGUtPlR1cGxlQ29kZSA8IDB4ZmYpKSkKQEAgLTE0OTksNiArMTU1NCw2IEBACiAJICAgICppbmZvID0gY291bnQ7CiAgICAga2ZyZWUodHVwbGUpOwogICAgIGtmcmVlKHApOwotICAgIHJldHVybiBDU19TVUNDRVNTOworICAgIHJldHVybiAwOwogfQogRVhQT1JUX1NZTUJPTChwY2NhcmRfdmFsaWRhdGVfY2lzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL2NzLmMgYi9kcml2ZXJzL3BjbWNpYS9jcy5jCmluZGV4IGQxMjA3MzkuLmM2OGM1ZDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL2NzLmMKKysrIGIvZHJpdmVycy9wY21jaWEvY3MuYwpAQCAtNjEsNyArNjEsNyBAQAogLyogQWNjZXNzIHNwZWVkIGZvciBhdHRyaWJ1dGUgbWVtb3J5IHdpbmRvd3MgKi8KIElOVF9NT0RVTEVfUEFSTShjaXNfc3BlZWQsCTMwMCk7CQkvKiBucyAqLwogCi0jaWZkZWYgREVCVUcKKyNpZmRlZiBDT05GSUdfUENNQ0lBX0RFQlVHCiBzdGF0aWMgaW50IHBjX2RlYnVnOwogCiBtb2R1bGVfcGFyYW0ocGNfZGVidWcsIGludCwgMDY0NCk7CkBAIC0yNDcsNyArMjQ3LDggQEAKIAogCXdhaXRfZm9yX2NvbXBsZXRpb24oJnNvY2tldC0+dGhyZWFkX2RvbmUpOwogCWlmICghc29ja2V0LT50aHJlYWQpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiUENNQ0lBOiB3YXJuaW5nOiBzb2NrZXQgdGhyZWFkIGZvciBzb2NrZXQgJXAgZGlkIG5vdCBzdGFydFxuIiwgc29ja2V0KTsKKwkJZGV2X3ByaW50ayhLRVJOX1dBUk5JTkcsICZzb2NrZXQtPmRldiwKKwkJCSAgICJQQ01DSUE6IHdhcm5pbmc6IHNvY2tldCB0aHJlYWQgZGlkIG5vdCBzdGFydFxuIik7CiAJCXJldHVybiAtRUlPOwogCX0KIApAQCAtMzY2LDE2ICszNjcsMTYgQEAKIAkJc2t0LT5vcHMtPmdldF9zdGF0dXMoc2t0LCAmc3RhdHVzKTsKIAogCQlpZiAoIShzdGF0dXMgJiBTU19ERVRFQ1QpKQotCQkJcmV0dXJuIENTX05PX0NBUkQ7CisJCQlyZXR1cm4gLUVOT0RFVjsKIAogCQlpZiAoc3RhdHVzICYgU1NfUkVBRFkpCi0JCQlyZXR1cm4gQ1NfU1VDQ0VTUzsKKwkJCXJldHVybiAwOwogCiAJCW1zbGVlcCh1bnJlc2V0X2NoZWNrICogMTApOwogCX0KIAogCWNzX2Vycihza3QsICJ0aW1lIG91dCBhZnRlciByZXNldC5cbiIpOwotCXJldHVybiBDU19HRU5FUkFMX0ZBSUxVUkU7CisJcmV0dXJuIC1FVElNRURPVVQ7CiB9CiAKIC8qCkBAIC00MTIsNyArNDEzLDggQEAKIAogCXMtPm9wcy0+Z2V0X3N0YXR1cyhzLCAmc3RhdHVzKTsKIAlpZiAoc3RhdHVzICYgU1NfUE9XRVJPTikgewotCQlwcmludGsoS0VSTl9FUlIgIlBDTUNJQTogc29ja2V0ICVwOiAqKiogREFOR0VSICoqKiB1bmFibGUgdG8gcmVtb3ZlIHNvY2tldCBwb3dlclxuIiwgcyk7CisJCWRldl9wcmludGsoS0VSTl9FUlIsICZzLT5kZXYsCisJCQkgICAiKioqIERBTkdFUiAqKiogdW5hYmxlIHRvIHJlbW92ZSBzb2NrZXQgcG93ZXJcbiIpOwogCX0KIAogCWNzX3NvY2tldF9wdXQocyk7CkBAIC00MjYsMTQgKzQyOCwxNCBAQAogCiAJc2t0LT5vcHMtPmdldF9zdGF0dXMoc2t0LCAmc3RhdHVzKTsKIAlpZiAoIShzdGF0dXMgJiBTU19ERVRFQ1QpKQotCQlyZXR1cm4gQ1NfTk9fQ0FSRDsKKwkJcmV0dXJuIC1FTk9ERVY7CiAKIAltc2xlZXAoaW5pdGlhbF9kZWxheSAqIDEwKTsKIAogCWZvciAoaSA9IDA7IGkgPCAxMDA7IGkrKykgewogCQlza3QtPm9wcy0+Z2V0X3N0YXR1cyhza3QsICZzdGF0dXMpOwogCQlpZiAoIShzdGF0dXMgJiBTU19ERVRFQ1QpKQotCQkJcmV0dXJuIENTX05PX0NBUkQ7CisJCQlyZXR1cm4gLUVOT0RFVjsKIAogCQlpZiAoIShzdGF0dXMgJiBTU19QRU5ESU5HKSkKIAkJCWJyZWFrOwpAQCAtNDQzLDEzICs0NDUsMTMgQEAKIAogCWlmIChzdGF0dXMgJiBTU19QRU5ESU5HKSB7CiAJCWNzX2Vycihza3QsICJ2b2x0YWdlIGludGVycm9nYXRpb24gdGltZWQgb3V0LlxuIik7Ci0JCXJldHVybiBDU19HRU5FUkFMX0ZBSUxVUkU7CisJCXJldHVybiAtRVRJTUVET1VUOwogCX0KIAogCWlmIChzdGF0dXMgJiBTU19DQVJEQlVTKSB7CiAJCWlmICghKHNrdC0+ZmVhdHVyZXMgJiBTU19DQVBfQ0FSREJVUykpIHsKIAkJCWNzX2Vycihza3QsICJjYXJkYnVzIGNhcmRzIGFyZSBub3Qgc3VwcG9ydGVkLlxuIik7Ci0JCQlyZXR1cm4gQ1NfQkFEX1RZUEU7CisJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCQlza3QtPnN0YXRlIHw9IFNPQ0tFVF9DQVJEQlVTOwogCX0KQEAgLTQ2Myw3ICs0NjUsNyBAQAogCQlza3QtPnNvY2tldC5WY2MgPSBza3QtPnNvY2tldC5WcHAgPSA1MDsKIAllbHNlIHsKIAkJY3NfZXJyKHNrdCwgInVuc3VwcG9ydGVkIHZvbHRhZ2Uga2V5LlxuIik7Ci0JCXJldHVybiBDU19CQURfVFlQRTsKKwkJcmV0dXJuIC1FSU87CiAJfQogCiAJaWYgKHNrdC0+cG93ZXJfaG9vaykKQEAgLTQ4MCw3ICs0ODIsNyBAQAogCXNrdC0+b3BzLT5nZXRfc3RhdHVzKHNrdCwgJnN0YXR1cyk7CiAJaWYgKCEoc3RhdHVzICYgU1NfUE9XRVJPTikpIHsKIAkJY3NfZXJyKHNrdCwgInVuYWJsZSB0byBhcHBseSBwb3dlci5cbiIpOwotCQlyZXR1cm4gQ1NfQkFEX1RZUEU7CisJCXJldHVybiAtRUlPOwogCX0KIAogCXN0YXR1cyA9IHNvY2tldF9yZXNldChza3QpOwpAQCAtNTAyLDE1ICs1MDQsMTYgQEAKIAljc19kYmcoc2t0LCA0LCAiaW5zZXJ0XG4iKTsKIAogCWlmICghY3Nfc29ja2V0X2dldChza3QpKQotCQlyZXR1cm4gQ1NfTk9fQ0FSRDsKKwkJcmV0dXJuIC1FTk9ERVY7CiAKIAlyZXQgPSBzb2NrZXRfc2V0dXAoc2t0LCBzZXR1cF9kZWxheSk7Ci0JaWYgKHJldCA9PSBDU19TVUNDRVNTKSB7CisJaWYgKHJldCA9PSAwKSB7CiAJCXNrdC0+c3RhdGUgfD0gU09DS0VUX1BSRVNFTlQ7CiAKLQkJcHJpbnRrKEtFUk5fTk9USUNFICJwY2NhcmQ6ICVzIGNhcmQgaW5zZXJ0ZWQgaW50byBzbG90ICVkXG4iLAotCQkgICAgICAgKHNrdC0+c3RhdGUgJiBTT0NLRVRfQ0FSREJVUykgPyAiQ2FyZEJ1cyIgOiAiUENNQ0lBIiwKLQkJICAgICAgIHNrdC0+c29jayk7CisJCWRldl9wcmludGsoS0VSTl9OT1RJQ0UsICZza3QtPmRldiwKKwkJCSAgICJwY2NhcmQ6ICVzIGNhcmQgaW5zZXJ0ZWQgaW50byBzbG90ICVkXG4iLAorCQkJICAgKHNrdC0+c3RhdGUgJiBTT0NLRVRfQ0FSREJVUykgPyAiQ2FyZEJ1cyIgOiAiUENNQ0lBIiwKKwkJCSAgIHNrdC0+c29jayk7CiAKICNpZmRlZiBDT05GSUdfQ0FSREJVUwogCQlpZiAoc2t0LT5zdGF0ZSAmIFNPQ0tFVF9DQVJEQlVTKSB7CkBAIC01MzEsNyArNTM0LDcgQEAKIHN0YXRpYyBpbnQgc29ja2V0X3N1c3BlbmQoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnNrdCkKIHsKIAlpZiAoc2t0LT5zdGF0ZSAmIFNPQ0tFVF9TVVNQRU5EKQotCQlyZXR1cm4gQ1NfSU5fVVNFOworCQlyZXR1cm4gLUVCVVNZOwogCiAJc2VuZF9ldmVudChza3QsIENTX0VWRU5UX1BNX1NVU1BFTkQsIENTX0VWRU5UX1BSSV9MT1cpOwogCXNrdC0+c29ja2V0ID0gZGVhZF9zb2NrZXQ7CkBAIC01NDAsNyArNTQzLDcgQEAKIAkJc2t0LT5vcHMtPnN1c3BlbmQoc2t0KTsKIAlza3QtPnN0YXRlIHw9IFNPQ0tFVF9TVVNQRU5EOwogCi0JcmV0dXJuIENTX1NVQ0NFU1M7CisJcmV0dXJuIDA7CiB9CiAKIC8qCkBAIC01NTMsNyArNTU2LDcgQEAKIAlpbnQgcmV0OwogCiAJaWYgKCEoc2t0LT5zdGF0ZSAmIFNPQ0tFVF9TVVNQRU5EKSkKLQkJcmV0dXJuIENTX0lOX1VTRTsKKwkJcmV0dXJuIC1FQlVTWTsKIAogCXNrdC0+c29ja2V0ID0gZGVhZF9zb2NrZXQ7CiAJc2t0LT5vcHMtPmluaXQoc2t0KTsKQEAgLTU2NSw3ICs1NjgsNyBAQAogCX0KIAogCXJldCA9IHNvY2tldF9zZXR1cChza3QsIHJlc3VtZV9kZWxheSk7Ci0JaWYgKHJldCA9PSBDU19TVUNDRVNTKSB7CisJaWYgKHJldCA9PSAwKSB7CiAJCS8qCiAJCSAqIEZJWE1FOiBuZWVkIGEgYmV0dGVyIGNoZWNrIGhlcmUgZm9yIGNhcmRidXMgY2FyZHMuCiAJCSAqLwpAQCAtNTkwLDEyICs1OTMsMTMgQEAKIAogCXNrdC0+c3RhdGUgJj0gflNPQ0tFVF9TVVNQRU5EOwogCi0JcmV0dXJuIENTX1NVQ0NFU1M7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB2b2lkIHNvY2tldF9yZW1vdmUoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnNrdCkKIHsKLQlwcmludGsoS0VSTl9OT1RJQ0UgInBjY2FyZDogY2FyZCBlamVjdGVkIGZyb20gc2xvdCAlZFxuIiwgc2t0LT5zb2NrKTsKKwlkZXZfcHJpbnRrKEtFUk5fTk9USUNFLCAmc2t0LT5kZXYsCisJCSAgICJwY2NhcmQ6IGNhcmQgZWplY3RlZCBmcm9tIHNsb3QgJWRcbiIsIHNrdC0+c29jayk7CiAJc29ja2V0X3NodXRkb3duKHNrdCk7CiB9CiAKQEAgLTY0MSw4ICs2NDUsOCBAQAogCS8qIHJlZ2lzdGVyIHdpdGggdGhlIGRldmljZSBjb3JlICovCiAJcmV0ID0gZGV2aWNlX3JlZ2lzdGVyKCZza3QtPmRldik7CiAJaWYgKHJldCkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJQQ01DSUE6IHVuYWJsZSB0byByZWdpc3RlciBzb2NrZXQgMHglcFxuIiwKLQkJCXNrdCk7CisJCWRldl9wcmludGsoS0VSTl9XQVJOSU5HLCAmc2t0LT5kZXYsCisJCQkgICAiUENNQ0lBOiB1bmFibGUgdG8gcmVnaXN0ZXIgc29ja2V0XG4iKTsKIAkJc2t0LT50aHJlYWQgPSBOVUxMOwogCQljb21wbGV0ZSgmc2t0LT50aHJlYWRfZG9uZSk7CiAJCXJldHVybiAwOwpAQCAtNzQ4LDcgKzc1Miw3IEBACiAgKiBDSVMgcmVnaXN0ZXIuCiAgKi8KIAotaW50IHBjY2FyZF9yZXNldF9jYXJkKHN0cnVjdCBwY21jaWFfc29ja2V0ICpza3QpCitpbnQgcGNtY2lhX3Jlc2V0X2NhcmQoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnNrdCkKIHsKIAlpbnQgcmV0OwogCkBAIC03NTcsMTUgKzc2MSwxNSBAQAogCW11dGV4X2xvY2soJnNrdC0+c2t0X211dGV4KTsKIAlkbyB7CiAJCWlmICghKHNrdC0+c3RhdGUgJiBTT0NLRVRfUFJFU0VOVCkpIHsKLQkJCXJldCA9IENTX05PX0NBUkQ7CisJCQlyZXQgPSAtRU5PREVWOwogCQkJYnJlYWs7CiAJCX0KIAkJaWYgKHNrdC0+c3RhdGUgJiBTT0NLRVRfU1VTUEVORCkgewotCQkJcmV0ID0gQ1NfSU5fVVNFOworCQkJcmV0ID0gLUVCVVNZOwogCQkJYnJlYWs7CiAJCX0KIAkJaWYgKHNrdC0+c3RhdGUgJiBTT0NLRVRfQ0FSREJVUykgewotCQkJcmV0ID0gQ1NfVU5TVVBQT1JURURfRlVOQ1RJT047CisJCQlyZXQgPSAtRVBFUk07CiAJCQlicmVhazsKIAkJfQogCkBAIC03NzQsMjAgKzc3OCwyMCBAQAogCQkJc2VuZF9ldmVudChza3QsIENTX0VWRU5UX1JFU0VUX1BIWVNJQ0FMLCBDU19FVkVOVF9QUklfTE9XKTsKIAkJCWlmIChza3QtPmNhbGxiYWNrKQogCQkJCXNrdC0+Y2FsbGJhY2stPnN1c3BlbmQoc2t0KTsKLQkJCWlmIChzb2NrZXRfcmVzZXQoc2t0KSA9PSBDU19TVUNDRVNTKSB7CisJCQlpZiAoc29ja2V0X3Jlc2V0KHNrdCkgPT0gMCkgewogCQkJCXNlbmRfZXZlbnQoc2t0LCBDU19FVkVOVF9DQVJEX1JFU0VULCBDU19FVkVOVF9QUklfTE9XKTsKIAkJCQlpZiAoc2t0LT5jYWxsYmFjaykKIAkJCQkJc2t0LT5jYWxsYmFjay0+cmVzdW1lKHNrdCk7CiAJCQl9CiAJCX0KIAotCQlyZXQgPSBDU19TVUNDRVNTOworCQlyZXQgPSAwOwogCX0gd2hpbGUgKDApOwogCW11dGV4X3VubG9jaygmc2t0LT5za3RfbXV0ZXgpOwogCiAJcmV0dXJuIHJldDsKIH0gLyogcmVzZXRfY2FyZCAqLwotRVhQT1JUX1NZTUJPTChwY2NhcmRfcmVzZXRfY2FyZCk7CitFWFBPUlRfU1lNQk9MKHBjbWNpYV9yZXNldF9jYXJkKTsKIAogCiAvKiBUaGVzZSBzaHV0IGRvd24gb3Igd2FrZSB1cCBhIHNvY2tldC4gIFRoZXkgYXJlIHNvcnQgb2YgdXNlcgpAQCAtODAyLDExICs4MDYsMTEgQEAKIAltdXRleF9sb2NrKCZza3QtPnNrdF9tdXRleCk7CiAJZG8gewogCQlpZiAoIShza3QtPnN0YXRlICYgU09DS0VUX1BSRVNFTlQpKSB7Ci0JCQlyZXQgPSBDU19OT19DQVJEOworCQkJcmV0ID0gLUVOT0RFVjsKIAkJCWJyZWFrOwogCQl9CiAJCWlmIChza3QtPnN0YXRlICYgU09DS0VUX0NBUkRCVVMpIHsKLQkJCXJldCA9IENTX1VOU1VQUE9SVEVEX0ZVTkNUSU9OOworCQkJcmV0ID0gLUVQRVJNOwogCQkJYnJlYWs7CiAJCX0KIAkJaWYgKHNrdC0+Y2FsbGJhY2spIHsKQEAgLTgzMiwxMSArODM2LDExIEBACiAJbXV0ZXhfbG9jaygmc2t0LT5za3RfbXV0ZXgpOwogCWRvIHsKIAkJaWYgKCEoc2t0LT5zdGF0ZSAmIFNPQ0tFVF9QUkVTRU5UKSkgewotCQkJcmV0ID0gQ1NfTk9fQ0FSRDsKKwkJCXJldCA9IC1FTk9ERVY7CiAJCQlicmVhazsKIAkJfQogCQlpZiAoc2t0LT5zdGF0ZSAmIFNPQ0tFVF9DQVJEQlVTKSB7Ci0JCQlyZXQgPSBDU19VTlNVUFBPUlRFRF9GVU5DVElPTjsKKwkJCXJldCA9IC1FUEVSTTsKIAkJCWJyZWFrOwogCQl9CiAJCXJldCA9IHNvY2tldF9yZXN1bWUoc2t0KTsKQEAgLTg5Miw3ICs4OTYsNyBAQAogCQkJcmV0ID0gLUVCVVNZOwogCQkJYnJlYWs7CiAJCX0KLQkJaWYgKHNvY2tldF9pbnNlcnQoc2t0KSA9PSBDU19OT19DQVJEKSB7CisJCWlmIChzb2NrZXRfaW5zZXJ0KHNrdCkgPT0gLUVOT0RFVikgewogCQkJcmV0ID0gLUVOT0RFVjsKIAkJCWJyZWFrOwogCQl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9jc19pbnRlcm5hbC5oIGIvZHJpdmVycy9wY21jaWEvY3NfaW50ZXJuYWwuaAppbmRleCA2M2RjMWEyLi43OTYxNWU2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9jc19pbnRlcm5hbC5oCisrKyBiL2RyaXZlcnMvcGNtY2lhL2NzX2ludGVybmFsLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogY3NfaW50ZXJuYWwuaAorICogY3NfaW50ZXJuYWwuaCAtLSBkZWZpbml0aW9ucyBpbnRlcm5hbCB0byB0aGUgUENNQ0lBIGNvcmUgbW9kdWxlcwogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwpAQCAtMTAsNiArMTAsMTIgQEAKICAqIGFyZSBDb3B5cmlnaHQgKEMpIDE5OTkgRGF2aWQgQS4gSGluZHMuICBBbGwgUmlnaHRzIFJlc2VydmVkLgogICoKICAqIChDKSAxOTk5CQlEYXZpZCBBLiBIaW5kcworICogKEMpIDIwMDMgLSAyMDA4CURvbWluaWsgQnJvZG93c2tpCisgKgorICoKKyAqIFRoaXMgZmlsZSBjb250YWlucyBkZWZpbml0aW9ucyBfb25seV8gbmVlZGVkIGJ5IHRoZSBQQ01DSUEgY29yZSBtb2R1bGVzLgorICogSXQgbXVzdCBub3QgYmUgaW5jbHVkZWQgYnkgUENNQ0lBIHNvY2tldCBkcml2ZXJzIG9yIGJ5IFBDTUNJQSBkZXZpY2UKKyAqIGRyaXZlcnMuCiAgKi8KIAogI2lmbmRlZiBfTElOVVhfQ1NfSU5URVJOQUxfSApAQCAtMTgsMjkgKzI0LDI0IEBACiAjaW5jbHVkZSA8bGludXgva3JlZi5oPgogCiAvKiBGbGFncyBpbiBjbGllbnQgc3RhdGUgKi8KLSNkZWZpbmUgQ0xJRU5UX0NPTkZJR19MT0NLRUQJMHgwMDAxCi0jZGVmaW5lIENMSUVOVF9JUlFfUkVRCQkweDAwMDIKLSNkZWZpbmUgQ0xJRU5UX0lPX1JFUQkJMHgwMDA0Ci0jZGVmaW5lIENMSUVOVF9VTkJPVU5ECQkweDAwMDgKLSNkZWZpbmUgQ0xJRU5UX1NUQUxFCQkweDAwMTAKICNkZWZpbmUgQ0xJRU5UX1dJTl9SRVEoaSkJKDB4MTw8KGkpKQotI2RlZmluZSBDTElFTlRfQ0FSREJVUwkJMHg4MDAwCiAKIC8qIEVhY2ggY2FyZCBmdW5jdGlvbiBnZXRzIG9uZSBvZiB0aGVzZSBndXlzICovCiB0eXBlZGVmIHN0cnVjdCBjb25maWdfdCB7CiAJc3RydWN0IGtyZWYJcmVmOwotICAgIHVfaW50CQlzdGF0ZTsKLSAgICB1X2ludAkJQXR0cmlidXRlczsKLSAgICB1X2ludAkJSW50VHlwZTsKLSAgICB1X2ludAkJQ29uZmlnQmFzZTsKLSAgICB1X2NoYXIJCVN0YXR1cywgUGluLCBDb3B5LCBPcHRpb24sIEV4dFN0YXR1czsKLSAgICB1X2ludAkJQ2FyZFZhbHVlczsKLSAgICBpb19yZXFfdAkJaW87Ci0gICAgc3RydWN0IHsKLQl1X2ludAkJQXR0cmlidXRlczsKLSAgICB9IGlycTsKKwl1bnNpZ25lZCBpbnQJc3RhdGU7CisJdW5zaWduZWQgaW50CUF0dHJpYnV0ZXM7CisJdW5zaWduZWQgaW50CUludFR5cGU7CisJdW5zaWduZWQgaW50CUNvbmZpZ0Jhc2U7CisJdW5zaWduZWQgY2hhcglTdGF0dXMsIFBpbiwgQ29weSwgT3B0aW9uLCBFeHRTdGF0dXM7CisJdW5zaWduZWQgaW50CUNhcmRWYWx1ZXM7CisJaW9fcmVxX3QJaW87CisJc3RydWN0IHsKKwkJdV9pbnQJQXR0cmlidXRlczsKKwl9IGlycTsKIH0gY29uZmlnX3Q7CiAKKwogc3RydWN0IGNpc19jYWNoZV9lbnRyeSB7CiAJc3RydWN0IGxpc3RfaGVhZAlub2RlOwogCXVuc2lnbmVkIGludAkJYWRkcjsKQEAgLTQ5LDYgKzUwLDMwIEBACiAJdW5zaWduZWQgY2hhcgkJY2FjaGVbMF07CiB9OwogCitzdHJ1Y3QgcGNjYXJkX3Jlc291cmNlX29wcyB7CisJaW50CSgqdmFsaWRhdGVfbWVtKQkJKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzKTsKKwlpbnQJKCphZGp1c3RfaW9fcmVnaW9uKQkoc3RydWN0IHJlc291cmNlICpyZXMsCisJCQkJCSB1bnNpZ25lZCBsb25nIHJfc3RhcnQsCisJCQkJCSB1bnNpZ25lZCBsb25nIHJfZW5kLAorCQkJCQkgc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMpOworCXN0cnVjdCByZXNvdXJjZSogKCpmaW5kX2lvKQkodW5zaWduZWQgbG9uZyBiYXNlLCBpbnQgbnVtLAorCQkJCQkgdW5zaWduZWQgbG9uZyBhbGlnbiwKKwkJCQkJIHN0cnVjdCBwY21jaWFfc29ja2V0ICpzKTsKKwlzdHJ1Y3QgcmVzb3VyY2UqICgqZmluZF9tZW0pCSh1bnNpZ25lZCBsb25nIGJhc2UsIHVuc2lnbmVkIGxvbmcgbnVtLAorCQkJCQkgdW5zaWduZWQgbG9uZyBhbGlnbiwgaW50IGxvdywKKwkJCQkJIHN0cnVjdCBwY21jaWFfc29ja2V0ICpzKTsKKwlpbnQJKCphZGRfaW8pCQkoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMsCisJCQkJCSB1bnNpZ25lZCBpbnQgYWN0aW9uLAorCQkJCQkgdW5zaWduZWQgbG9uZyByX3N0YXJ0LAorCQkJCQkgdW5zaWduZWQgbG9uZyByX2VuZCk7CisJaW50CSgqYWRkX21lbSkJCShzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcywKKwkJCQkJIHVuc2lnbmVkIGludCBhY3Rpb24sCisJCQkJCSB1bnNpZ25lZCBsb25nIHJfc3RhcnQsCisJCQkJCSB1bnNpZ25lZCBsb25nIHJfZW5kKTsKKwlpbnQJKCppbml0KQkJCShzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcyk7CisJdm9pZAkoKmV4aXQpCQkJKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzKTsKK307CisKIC8qIEZsYWdzIGluIGNvbmZpZyBzdGF0ZSAqLwogI2RlZmluZSBDT05GSUdfTE9DS0VECQkweDAxCiAjZGVmaW5lIENPTkZJR19JUlFfUkVRCQkweDAyCkBAIC01OSw3ICs4NCw2IEBACiAjZGVmaW5lIFNPQ0tFVF9JTlVTRQkJMHgwMDEwCiAjZGVmaW5lIFNPQ0tFVF9TVVNQRU5ECQkweDAwODAKICNkZWZpbmUgU09DS0VUX1dJTl9SRVEoaSkJKDB4MDEwMDw8KGkpKQotI2RlZmluZSBTT0NLRVRfUkVHSU9OX0lORk8JMHg0MDAwCiAjZGVmaW5lIFNPQ0tFVF9DQVJEQlVTCQkweDgwMDAKICNkZWZpbmUgU09DS0VUX0NBUkRCVVNfQ09ORklHCTB4MTAwMDAKIApAQCAtODMsNjkgKzEwNywxNTMgQEAKIAl9CiB9CiAKLS8qIEluIGNhcmRidXMuYyAqLwotaW50IGNiX2FsbG9jKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzKTsKLXZvaWQgY2JfZnJlZShzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcyk7Ci1pbnQgcmVhZF9jYl9tZW0oc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMsIGludCBzcGFjZSwgdV9pbnQgYWRkciwgdV9pbnQgbGVuLCB2b2lkICpwdHIpOworI2lmZGVmIENPTkZJR19QQ01DSUFfREVCVUcKK2V4dGVybiBpbnQgY3NfZGVidWdfbGV2ZWwoaW50KTsKIAotLyogSW4gY2lzdHBsLmMgKi8KLWludCBwY21jaWFfcmVhZF9jaXNfbWVtKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzLCBpbnQgYXR0ciwKLQkJIHVfaW50IGFkZHIsIHVfaW50IGxlbiwgdm9pZCAqcHRyKTsKLXZvaWQgcGNtY2lhX3dyaXRlX2Npc19tZW0oc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMsIGludCBhdHRyLAotCQkgICB1X2ludCBhZGRyLCB1X2ludCBsZW4sIHZvaWQgKnB0cik7Ci12b2lkIHJlbGVhc2VfY2lzX21lbShzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcyk7Ci12b2lkIGRlc3Ryb3lfY2lzX2NhY2hlKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzKTsKKyNkZWZpbmUgY3NfZGJnKHNrdCwgbHZsLCBmbXQsIGFyZy4uLikgZG8gewkJXAorCWlmIChjc19kZWJ1Z19sZXZlbChsdmwpKQkJCVwKKwkJZGV2X3ByaW50ayhLRVJOX0RFQlVHLCAmc2t0LT5kZXYsCVwKKwkJICJjczogIiBmbXQsICMjIGFyZyk7CQkJXAorfSB3aGlsZSAoMCkKKyNkZWZpbmUgX19jc19kYmcobHZsLCBmbXQsIGFyZy4uLikgZG8gewkJCVwKKwlpZiAoY3NfZGVidWdfbGV2ZWwobHZsKSkJCQlcCisJCXByaW50ayhLRVJOX0RFQlVHIAkJCVwKKwkJICJjczogIiBmbXQsICMjIGFyZyk7CQkJXAorfSB3aGlsZSAoMCkKKworI2Vsc2UKKyNkZWZpbmUgY3NfZGJnKHNrdCwgbHZsLCBmbXQsIGFyZy4uLikgZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSBfX2NzX2RiZyhsdmwsIGZtdCwgYXJnLi4uKSBkbyB7IH0gd2hpbGUgKDApCisjZW5kaWYKKworI2RlZmluZSBjc19lcnIoc2t0LCBmbXQsIGFyZy4uLikgXAorCWRldl9wcmludGsoS0VSTl9FUlIsICZza3QtPmRldiwgImNzOiAiIGZtdCwgIyMgYXJnKQorCisKKy8qCisgKiBTdHVmZiBpbnRlcm5hbCB0byBtb2R1bGUgInBjbWNpYV9jb3JlIjoKKyAqLworCisvKiBjaXN0cGwuYyAqLwogaW50IHZlcmlmeV9jaXNfY2FjaGUoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMpOwotaW50IHBjY2FyZF9yZWFkX3R1cGxlKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzLCB1bnNpZ25lZCBpbnQgZnVuY3Rpb24sIGNpc2RhdGFfdCBjb2RlLCB2b2lkICpwYXJzZSk7CiAKLS8qIEluIHJzcmNfbWdyICovCi1pbnQgcGNtY2lhX3ZhbGlkYXRlX21lbShzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcyk7Ci1zdHJ1Y3QgcmVzb3VyY2UgKnBjbWNpYV9maW5kX2lvX3JlZ2lvbih1bnNpZ25lZCBsb25nIGJhc2UsIGludCBudW0sIHVuc2lnbmVkIGxvbmcgYWxpZ24sCi0JCSAgIHN0cnVjdCBwY21jaWFfc29ja2V0ICpzKTsKLWludCBwY21jaWFfYWRqdXN0X2lvX3JlZ2lvbihzdHJ1Y3QgcmVzb3VyY2UgKnJlcywgdW5zaWduZWQgbG9uZyByX3N0YXJ0LAotCQkgICAgIHVuc2lnbmVkIGxvbmcgcl9lbmQsIHN0cnVjdCBwY21jaWFfc29ja2V0ICpzKTsKLXN0cnVjdCByZXNvdXJjZSAqcGNtY2lhX2ZpbmRfbWVtX3JlZ2lvbih1X2xvbmcgYmFzZSwgdV9sb25nIG51bSwgdV9sb25nIGFsaWduLAotCQkgICAgaW50IGxvdywgc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMpOworLyogcnNyY19tZ3IuYyAqLwogdm9pZCByZWxlYXNlX3Jlc291cmNlX2RiKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzKTsKIAotLyogSW4gc29ja2V0X3N5c2ZzLmMgKi8KKy8qIHNvY2tldF9zeXNmcy5jICovCiBleHRlcm4gaW50IHBjY2FyZF9zeXNmc19hZGRfc29ja2V0KHN0cnVjdCBkZXZpY2UgKmRldik7CiBleHRlcm4gdm9pZCBwY2NhcmRfc3lzZnNfcmVtb3ZlX3NvY2tldChzdHJ1Y3QgZGV2aWNlICpkZXYpOwogCi0vKiBJbiBjcy5jICovCi1leHRlcm4gc3RydWN0IHJ3X3NlbWFwaG9yZSBwY21jaWFfc29ja2V0X2xpc3RfcndzZW07Ci1leHRlcm4gc3RydWN0IGxpc3RfaGVhZCBwY21jaWFfc29ja2V0X2xpc3Q7Ci1pbnQgcGNtY2lhX2dldF93aW5kb3coc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMsIHdpbmRvd19oYW5kbGVfdCAqaGFuZGxlLCBpbnQgaWR4LCB3aW5fcmVxX3QgKnJlcSk7Ci1pbnQgcGNjYXJkX2dldF9jb25maWd1cmF0aW9uX2luZm8oc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMsIHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldiwgY29uZmlnX2luZm9fdCAqY29uZmlnKTsKLWludCBwY2NhcmRfcmVzZXRfY2FyZChzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqc2t0KTsKKy8qIGNhcmRidXMuYyAqLworaW50IGNiX2FsbG9jKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzKTsKK3ZvaWQgY2JfZnJlZShzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcyk7CitpbnQgcmVhZF9jYl9tZW0oc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMsIGludCBzcGFjZSwgdV9pbnQgYWRkciwgdV9pbnQgbGVuLAorCQl2b2lkICpwdHIpOwogCiAKKworLyoKKyAqIFN0dWZmIGV4cG9ydGVkIGJ5IG1vZHVsZSAicGNtY2lhX2NvcmUiIHRvIG1vZHVsZSAicGNtY2lhIgorICovCisKIHN0cnVjdCBwY21jaWFfY2FsbGJhY2t7CiAJc3RydWN0IG1vZHVsZQkqb3duZXI7Ci0JaW50CQkoKmV2ZW50KSAoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMsIGV2ZW50X3QgZXZlbnQsIGludCBwcmlvcml0eSk7CisJaW50CQkoKmV2ZW50KSAoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMsCisJCQkJICBldmVudF90IGV2ZW50LCBpbnQgcHJpb3JpdHkpOwogCXZvaWQJCSgqcmVxdWVyeSkgKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzLCBpbnQgbmV3X2Npcyk7CiAJaW50CQkoKnN1c3BlbmQpIChzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcyk7CiAJaW50CQkoKnJlc3VtZSkgKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzKTsKIH07CiAKKy8qIGNzLmMgKi8KK2V4dGVybiBzdHJ1Y3Qgcndfc2VtYXBob3JlIHBjbWNpYV9zb2NrZXRfbGlzdF9yd3NlbTsKK2V4dGVybiBzdHJ1Y3QgbGlzdF9oZWFkIHBjbWNpYV9zb2NrZXRfbGlzdDsKK2V4dGVybiBzdHJ1Y3QgY2xhc3MgcGNtY2lhX3NvY2tldF9jbGFzczsKKworaW50IHBjbWNpYV9nZXRfd2luZG93KHN0cnVjdCBwY21jaWFfc29ja2V0ICpzLAorCQkgICAgICB3aW5kb3dfaGFuZGxlX3QgKmhhbmRsZSwKKwkJICAgICAgaW50IGlkeCwKKwkJICAgICAgd2luX3JlcV90ICpyZXEpOwogaW50IHBjY2FyZF9yZWdpc3Rlcl9wY21jaWEoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMsIHN0cnVjdCBwY21jaWFfY2FsbGJhY2sgKmMpOworc3RydWN0IHBjbWNpYV9zb2NrZXQgKnBjbWNpYV9nZXRfc29ja2V0X2J5X25yKHVuc2lnbmVkIGludCBucik7CiAKLSNkZWZpbmUgY3Nfc29ja2V0X25hbWUoc2t0KQkoKHNrdCktPmRldi5idXNfaWQpCitpbnQgcGNtY2lhX3N1c3BlbmRfY2FyZChzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqc2t0KTsKK2ludCBwY21jaWFfcmVzdW1lX2NhcmQoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnNrdCk7CiAKLSNpZmRlZiBERUJVRwotZXh0ZXJuIGludCBjc19kZWJ1Z19sZXZlbChpbnQpOworaW50IHBjbWNpYV9lamVjdF9jYXJkKHN0cnVjdCBwY21jaWFfc29ja2V0ICpza3QpOworaW50IHBjbWNpYV9pbnNlcnRfY2FyZChzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqc2t0KTsKIAotI2RlZmluZSBjc19kYmcoc2t0LCBsdmwsIGZtdCwgYXJnLi4uKSBkbyB7CQlcCi0JaWYgKGNzX2RlYnVnX2xldmVsKGx2bCkpCQkJXAotCQlwcmludGsoS0VSTl9ERUJVRyAiY3M6ICVzOiAiIGZtdCwgCVwKLQkJICAgICAgIGNzX3NvY2tldF9uYW1lKHNrdCkgLCAjIyBhcmcpOwlcCi19IHdoaWxlICgwKQorc3RydWN0IHBjbWNpYV9zb2NrZXQgKnBjbWNpYV9nZXRfc29ja2V0KHN0cnVjdCBwY21jaWFfc29ja2V0ICpza3QpOwordm9pZCBwY21jaWFfcHV0X3NvY2tldChzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqc2t0KTsKIAotI2Vsc2UKLSNkZWZpbmUgY3NfZGJnKHNrdCwgbHZsLCBmbXQsIGFyZy4uLikgZG8geyB9IHdoaWxlICgwKQotI2VuZGlmCisvKiBjaXN0cGwuYyAqLworaW50IHBjbWNpYV9yZWFkX2Npc19tZW0oc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMsIGludCBhdHRyLAorCQkJdV9pbnQgYWRkciwgdV9pbnQgbGVuLCB2b2lkICpwdHIpOwordm9pZCBwY21jaWFfd3JpdGVfY2lzX21lbShzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcywgaW50IGF0dHIsCisJCQkgIHVfaW50IGFkZHIsIHVfaW50IGxlbiwgdm9pZCAqcHRyKTsKK3ZvaWQgcmVsZWFzZV9jaXNfbWVtKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzKTsKK3ZvaWQgZGVzdHJveV9jaXNfY2FjaGUoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMpOworaW50IHBjY2FyZF9yZWFkX3R1cGxlKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzLCB1bnNpZ25lZCBpbnQgZnVuY3Rpb24sCisJCSAgICAgIGNpc2RhdGFfdCBjb2RlLCB2b2lkICpwYXJzZSk7CitpbnQgcGNtY2lhX3JlcGxhY2VfY2lzKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzLAorCQkgICAgICAgY29uc3QgdTggKmRhdGEsIGNvbnN0IHNpemVfdCBsZW4pOworaW50IHBjY2FyZF92YWxpZGF0ZV9jaXMoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMsIHVuc2lnbmVkIGludCBmdW5jdGlvbiwKKwkJCXVuc2lnbmVkIGludCAqY291bnQpOwogCi0jZGVmaW5lIGNzX2Vycihza3QsIGZtdCwgYXJnLi4uKSBcCi0JcHJpbnRrKEtFUk5fRVJSICJjczogJXM6ICIgZm10LCAoc2t0KS0+ZGV2LmJ1c19pZCAsICMjIGFyZykKKy8qIHJzcmNfbWdyLmMgKi8KK2ludCBwY21jaWFfdmFsaWRhdGVfbWVtKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzKTsKK3N0cnVjdCByZXNvdXJjZSAqcGNtY2lhX2ZpbmRfaW9fcmVnaW9uKHVuc2lnbmVkIGxvbmcgYmFzZSwKKwkJCQkgICAgICAgaW50IG51bSwKKwkJCQkgICAgICAgdW5zaWduZWQgbG9uZyBhbGlnbiwKKwkJCQkgICAgICAgc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMpOworaW50IHBjbWNpYV9hZGp1c3RfaW9fcmVnaW9uKHN0cnVjdCByZXNvdXJjZSAqcmVzLAorCQkJICAgIHVuc2lnbmVkIGxvbmcgcl9zdGFydCwKKwkJCSAgICB1bnNpZ25lZCBsb25nIHJfZW5kLAorCQkJICAgIHN0cnVjdCBwY21jaWFfc29ja2V0ICpzKTsKK3N0cnVjdCByZXNvdXJjZSAqcGNtY2lhX2ZpbmRfbWVtX3JlZ2lvbih1X2xvbmcgYmFzZSwKKwkJCQkJdV9sb25nIG51bSwKKwkJCQkJdV9sb25nIGFsaWduLAorCQkJCQlpbnQgbG93LAorCQkJCQlzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcyk7CisKKy8qCisgKiBTdHVmZiBpbnRlcm5hbCB0byBtb2R1bGUgInBjbWNpYSIuCisgKi8KKy8qIGRzLmMgKi8KK2V4dGVybiBzdHJ1Y3QgYnVzX3R5cGUgcGNtY2lhX2J1c190eXBlOworCisvKiBwY21jaWFfcmVzb3VyY2UuYyAqLworZXh0ZXJuIGludCBwY21jaWFfcmVsZWFzZV9jb25maWd1cmF0aW9uKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2Rldik7CisKKyNpZmRlZiBDT05GSUdfUENNQ0lBX0lPQ1RMCisvKiBkcy5jICovCitleHRlcm4gc3BpbmxvY2tfdCBwY21jaWFfZGV2X2xpc3RfbG9jazsKKworZXh0ZXJuIHN0cnVjdCBwY21jaWFfZGV2aWNlICpwY21jaWFfZ2V0X2RldihzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYpOworZXh0ZXJuIHZvaWQgcGNtY2lhX3B1dF9kZXYoc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2KTsKKworc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBjbWNpYV9kZXZpY2VfYWRkKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzLAorCQkJCQl1bnNpZ25lZCBpbnQgZnVuY3Rpb24pOworCisvKiBwY21jaWFfaW9jdGwuYyAqLworZXh0ZXJuIHZvaWQgX19pbml0IHBjbWNpYV9zZXR1cF9pb2N0bCh2b2lkKTsKK2V4dGVybiB2b2lkIF9fZXhpdCBwY21jaWFfY2xlYW51cF9pb2N0bCh2b2lkKTsKK2V4dGVybiB2b2lkIGhhbmRsZV9ldmVudChzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcywgZXZlbnRfdCBldmVudCk7CitleHRlcm4gaW50IGhhbmRsZV9yZXF1ZXN0KHN0cnVjdCBwY21jaWFfc29ja2V0ICpzLCBldmVudF90IGV2ZW50KTsKKworI2Vsc2UgLyogQ09ORklHX1BDTUNJQV9JT0NUTCAqLworCitzdGF0aWMgaW5saW5lIHZvaWQgX19pbml0IHBjbWNpYV9zZXR1cF9pb2N0bCh2b2lkKSB7IHJldHVybjsgfQorc3RhdGljIGlubGluZSB2b2lkIF9fZXhpdCBwY21jaWFfY2xlYW51cF9pb2N0bCh2b2lkKSB7IHJldHVybjsgfQorc3RhdGljIGlubGluZSB2b2lkIGhhbmRsZV9ldmVudChzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcywgZXZlbnRfdCBldmVudCkKK3sKKwlyZXR1cm47Cit9CitzdGF0aWMgaW5saW5lIGludCBoYW5kbGVfcmVxdWVzdChzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcywgZXZlbnRfdCBldmVudCkKK3sKKwlyZXR1cm4gMDsKK30KKworI2VuZGlmIC8qIENPTkZJR19QQ01DSUFfSU9DVEwgKi8KIAogI2VuZGlmIC8qIF9MSU5VWF9DU19JTlRFUk5BTF9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9kcy5jIGIvZHJpdmVycy9wY21jaWEvZHMuYwppbmRleCAzNGM4M2QzLi43OTU2NjAyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9kcy5jCisrKyBiL2RyaXZlcnMvcGNtY2lhL2RzLmMKQEAgLTMyLDcgKzMyLDYgQEAKICNpbmNsdWRlIDxwY21jaWEvc3MuaD4KIAogI2luY2x1ZGUgImNzX2ludGVybmFsLmgiCi0jaW5jbHVkZSAiZHNfaW50ZXJuYWwuaCIKIAogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAKQEAgLTQyLDE3ICs0MSwyMiBAQAogTU9EVUxFX0RFU0NSSVBUSU9OKCJQQ01DSUEgRHJpdmVyIFNlcnZpY2VzIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKLSNpZmRlZiBERUJVRworI2lmZGVmIENPTkZJR19QQ01DSUFfREVCVUcKIGludCBkc19wY19kZWJ1ZzsKIAogbW9kdWxlX3BhcmFtX25hbWVkKHBjX2RlYnVnLCBkc19wY19kZWJ1ZywgaW50LCAwNjQ0KTsKIAogI2RlZmluZSBkc19kYmcobHZsLCBmbXQsIGFyZy4uLikgZG8gewkJCQlcCi0JaWYgKGRzX3BjX2RlYnVnID4gKGx2bCkpCQkJCQlcCisJaWYgKGRzX3BjX2RlYnVnID4gKGx2bCkpCQkJCVwKIAkJcHJpbnRrKEtFUk5fREVCVUcgImRzOiAiIGZtdCAsICMjIGFyZyk7CQlcCiB9IHdoaWxlICgwKQorI2RlZmluZSBkc19kZXZfZGJnKGx2bCwgZGV2LCBmbXQsIGFyZy4uLikgZG8gewkJCQlcCisJaWYgKGRzX3BjX2RlYnVnID4gKGx2bCkpCQkJCQlcCisJCWRldl9wcmludGsoS0VSTl9ERUJVRywgZGV2LCAiZHM6ICIgZm10ICwgIyMgYXJnKTsJXAorfSB3aGlsZSAoMCkKICNlbHNlCiAjZGVmaW5lIGRzX2RiZyhsdmwsIGZtdCwgYXJnLi4uKSBkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIGRzX2Rldl9kYmcobHZsLCBkZXYsIGZtdCwgYXJnLi4uKSBkbyB7IH0gd2hpbGUgKDApCiAjZW5kaWYKIAogc3BpbmxvY2tfdCBwY21jaWFfZGV2X2xpc3RfbG9jazsKQEAgLTY0LDQyICs2OCwxOSBAQAogLyogU3RyaW5nIHRhYmxlcyBmb3IgZXJyb3IgbWVzc2FnZXMgKi8KIAogdHlwZWRlZiBzdHJ1Y3QgbG9va3VwX3QgewotICAgIGludCBrZXk7Ci0gICAgY2hhciAqbXNnOworICAgIGNvbnN0IGludCBrZXk7CisgICAgY29uc3QgY2hhciAqbXNnOwogfSBsb29rdXBfdDsKIAogc3RhdGljIGNvbnN0IGxvb2t1cF90IGVycm9yX3RhYmxlW10gPSB7Ci0gICAgeyBDU19TVUNDRVNTLAkJIk9wZXJhdGlvbiBzdWNjZWVkZWQiIH0sCi0gICAgeyBDU19CQURfQURBUFRFUiwJCSJCYWQgYWRhcHRlciIgfSwKLSAgICB7IENTX0JBRF9BVFRSSUJVVEUsIAkiQmFkIGF0dHJpYnV0ZSIsIH0sCi0gICAgeyBDU19CQURfQkFTRSwJCSJCYWQgYmFzZSBhZGRyZXNzIiB9LAotICAgIHsgQ1NfQkFEX0VEQywJCSJCYWQgRURDIiB9LAotICAgIHsgQ1NfQkFEX0lSUSwJCSJCYWQgSVJRIiB9LAotICAgIHsgQ1NfQkFEX09GRlNFVCwJCSJCYWQgb2Zmc2V0IiB9LAotICAgIHsgQ1NfQkFEX1BBR0UsCQkiQmFkIHBhZ2UgbnVtYmVyIiB9LAotICAgIHsgQ1NfUkVBRF9GQUlMVVJFLAkJIlJlYWQgZmFpbHVyZSIgfSwKLSAgICB7IENTX0JBRF9TSVpFLAkJIkJhZCBzaXplIiB9LAotICAgIHsgQ1NfQkFEX1NPQ0tFVCwJCSJCYWQgc29ja2V0IiB9LAotICAgIHsgQ1NfQkFEX1RZUEUsCQkiQmFkIHR5cGUiIH0sCi0gICAgeyBDU19CQURfVkNDLAkJIkJhZCBWY2MiIH0sCi0gICAgeyBDU19CQURfVlBQLAkJIkJhZCBWcHAiIH0sCi0gICAgeyBDU19CQURfV0lORE9XLAkJIkJhZCB3aW5kb3ciIH0sCi0gICAgeyBDU19XUklURV9GQUlMVVJFLAkJIldyaXRlIGZhaWx1cmUiIH0sCi0gICAgeyBDU19OT19DQVJELAkJIk5vIGNhcmQgcHJlc2VudCIgfSwKLSAgICB7IENTX1VOU1VQUE9SVEVEX0ZVTkNUSU9OLAkiVXN1cHBvcnRlZCBmdW5jdGlvbiIgfSwKLSAgICB7IENTX1VOU1VQUE9SVEVEX01PREUsCSJVbnN1cHBvcnRlZCBtb2RlIiB9LAotICAgIHsgQ1NfQkFEX1NQRUVELAkJIkJhZCBzcGVlZCIgfSwKLSAgICB7IENTX0JVU1ksCQkJIlJlc291cmNlIGJ1c3kiIH0sCi0gICAgeyBDU19HRU5FUkFMX0ZBSUxVUkUsCSJHZW5lcmFsIGZhaWx1cmUiIH0sCi0gICAgeyBDU19XUklURV9QUk9URUNURUQsCSJXcml0ZSBwcm90ZWN0ZWQiIH0sCi0gICAgeyBDU19CQURfQVJHX0xFTkdUSCwJIkJhZCBhcmd1bWVudCBsZW5ndGgiIH0sCi0gICAgeyBDU19CQURfQVJHUywJCSJCYWQgYXJndW1lbnRzIiB9LAotICAgIHsgQ1NfQ09ORklHVVJBVElPTl9MT0NLRUQsCSJDb25maWd1cmF0aW9uIGxvY2tlZCIgfSwKLSAgICB7IENTX0lOX1VTRSwJCSJSZXNvdXJjZSBpbiB1c2UiIH0sCi0gICAgeyBDU19OT19NT1JFX0lURU1TLAkJIk5vIG1vcmUgaXRlbXMiIH0sCi0gICAgeyBDU19PVVRfT0ZfUkVTT1VSQ0UsCSJPdXQgb2YgcmVzb3VyY2UiIH0sCi0gICAgeyBDU19CQURfSEFORExFLAkJIkJhZCBoYW5kbGUiIH0sCi0gICAgeyBDU19CQURfVFVQTEUsCQkiQmFkIENJUyB0dXBsZSIgfQorICAgIHsgMCwJCQkiT3BlcmF0aW9uIHN1Y2NlZWRlZCIgfSwKKyAgICB7IC1FSU8sCQkJIklucHV0L091dHB1dCBlcnJvciIgfSwKKyAgICB7IC1FTk9ERVYsCQkJIk5vIGNhcmQgcHJlc2VudCIgfSwKKyAgICB7IC1FSU5WQUwsCQkJIkJhZCBwYXJhbWV0ZXIiIH0sCisgICAgeyAtRUFDQ0VTLAkJCSJDb25maWd1cmF0aW9uIGxvY2tlZCIgfSwKKyAgICB7IC1FQlVTWSwJCQkiUmVzb3VyY2UgaW4gdXNlIiB9LAorICAgIHsgLUVOT1NQQywJCQkiTm8gbW9yZSBpdGVtcyIgfSwKKyAgICB7IC1FTk9NRU0sCQkJIk91dCBvZiByZXNvdXJjZSIgfSwKIH07CiAKIApAQCAtMTU1LDQ2ICsxMzYsMzIgQEAKICAgICB7IFJlcGxhY2VDSVMsCQkJIlJlcGxhY2VDSVMiIH0KIH07CiAKLQotc3RhdGljIGludCBwY21jaWFfcmVwb3J0X2Vycm9yKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldiwgZXJyb3JfaW5mb190ICplcnIpCitjb25zdCBjaGFyICpwY21jaWFfZXJyb3JfZnVuYyhpbnQgZnVuYykKIHsKIAlpbnQgaTsKLQljaGFyICpzZXJ2OwotCi0JaWYgKCFwX2RldikKLQkJcHJpbnRrKEtFUk5fTk9USUNFKTsKLQllbHNlCi0JCXByaW50ayhLRVJOX05PVElDRSAiJXM6ICIsIHBfZGV2LT5kZXYuYnVzX2lkKTsKIAogCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHNlcnZpY2VfdGFibGUpOyBpKyspCi0JCWlmIChzZXJ2aWNlX3RhYmxlW2ldLmtleSA9PSBlcnItPmZ1bmMpCi0JCQlicmVhazsKLQlpZiAoaSA8IEFSUkFZX1NJWkUoc2VydmljZV90YWJsZSkpCi0JCXNlcnYgPSBzZXJ2aWNlX3RhYmxlW2ldLm1zZzsKLQllbHNlCi0JCXNlcnYgPSAiVW5rbm93biBzZXJ2aWNlIG51bWJlciI7CisJCWlmIChzZXJ2aWNlX3RhYmxlW2ldLmtleSA9PSBmdW5jKQorCQkJcmV0dXJuIHNlcnZpY2VfdGFibGVbaV0ubXNnOworCisJcmV0dXJuICJVbmtub3duIHNlcnZpY2UgbnVtYmVyIjsKK30KK0VYUE9SVF9TWU1CT0wocGNtY2lhX2Vycm9yX2Z1bmMpOworCitjb25zdCBjaGFyICpwY21jaWFfZXJyb3JfcmV0KGludCByZXQpCit7CisJaW50IGk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShlcnJvcl90YWJsZSk7IGkrKykKLQkJaWYgKGVycm9yX3RhYmxlW2ldLmtleSA9PSBlcnItPnJldGNvZGUpCi0JCQlicmVhazsKLQlpZiAoaSA8IEFSUkFZX1NJWkUoZXJyb3JfdGFibGUpKQotCQlwcmludGsoIiVzOiAlc1xuIiwgc2VydiwgZXJyb3JfdGFibGVbaV0ubXNnKTsKLQllbHNlCi0JCXByaW50aygiJXM6IFVua25vd24gZXJyb3IgY29kZSAlI3hcbiIsIHNlcnYsIGVyci0+cmV0Y29kZSk7CisJCWlmIChlcnJvcl90YWJsZVtpXS5rZXkgPT0gcmV0KQorCQkJcmV0dXJuIGVycm9yX3RhYmxlW2ldLm1zZzsKIAotCXJldHVybiBDU19TVUNDRVNTOwotfSAvKiByZXBvcnRfZXJyb3IgKi8KLQotLyogZW5kIG9mIGNvZGUgd2hpY2ggd2FzIGluIGNzLmMgYmVmb3JlICovCisJcmV0dXJuICJ1bmtub3duIjsKK30KK0VYUE9SVF9TWU1CT0wocGNtY2lhX2Vycm9yX3JldCk7CiAKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAKLXZvaWQgY3NfZXJyb3Ioc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2LCBpbnQgZnVuYywgaW50IHJldCkKLXsKLQllcnJvcl9pbmZvX3QgZXJyID0geyBmdW5jLCByZXQgfTsKLQlwY21jaWFfcmVwb3J0X2Vycm9yKHBfZGV2LCAmZXJyKTsKLX0KLUVYUE9SVF9TWU1CT0woY3NfZXJyb3IpOwogCiAKIHN0YXRpYyB2b2lkIHBjbWNpYV9jaGVja19kcml2ZXIoc3RydWN0IHBjbWNpYV9kcml2ZXIgKnBfZHJ2KQpAQCAtMzkxLDcgKzM1OCw3IEBACiBzdGF0aWMgdm9pZCBwY21jaWFfcmVsZWFzZV9kZXYoc3RydWN0IGRldmljZSAqZGV2KQogewogCXN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldiA9IHRvX3BjbWNpYV9kZXYoZGV2KTsKLQlkc19kYmcoMSwgInJlbGVhc2luZyBkZXZpY2UgJXNcbiIsIHBfZGV2LT5kZXYuYnVzX2lkKTsKKwlkc19kZXZfZGJnKDEsIGRldiwgInJlbGVhc2luZyBkZXZpY2VcbiIpOwogCXBjbWNpYV9wdXRfc29ja2V0KHBfZGV2LT5zb2NrZXQpOwogCWtmcmVlKHBfZGV2LT5kZXZuYW1lKTsKIAlrcmVmX3B1dCgmcF9kZXYtPmZ1bmN0aW9uX2NvbmZpZy0+cmVmLCBwY21jaWFfcmVsZWFzZV9mdW5jdGlvbik7CkBAIC00MDEsNyArMzY4LDcgQEAKIHN0YXRpYyB2b2lkIHBjbWNpYV9hZGRfZGV2aWNlX2xhdGVyKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzLCBpbnQgbWZjKQogewogCWlmICghcy0+cGNtY2lhX3N0YXRlLmRldmljZV9hZGRfcGVuZGluZykgewotCQlkc19kYmcoMSwgInNjaGVkdWxpbmcgdG8gYWRkICVzIHNlY29uZGFyeSIKKwkJZHNfZGV2X2RiZygxLCAmcy0+ZGV2LCAic2NoZWR1bGluZyB0byBhZGQgJXMgc2Vjb25kYXJ5IgogCQkgICAgICAgIiBkZXZpY2UgdG8gJWRcbiIsIG1mYyA/ICJtZmMiIDogInBmYyIsIHMtPnNvY2spOwogCQlzLT5wY21jaWFfc3RhdGUuZGV2aWNlX2FkZF9wZW5kaW5nID0gMTsKIAkJcy0+cGNtY2lhX3N0YXRlLm1mY19wZmMgPSBtZmM7CkBAIC00MzksOCArNDA2LDcgQEAKIAkgKi8KIAlkaWQgPSBwX2Rldi0+ZGV2LmRyaXZlcl9kYXRhOwogCi0JZHNfZGJnKDEsICJ0cnlpbmcgdG8gYmluZCAlcyB0byAlc1xuIiwgcF9kZXYtPmRldi5idXNfaWQsCi0JICAgICAgIHBfZHJ2LT5kcnYubmFtZSk7CisJZHNfZGV2X2RiZygxLCBkZXYsICJ0cnlpbmcgdG8gYmluZCB0byAlc1xuIiwgcF9kcnYtPmRydi5uYW1lKTsKIAogCWlmICgoIXBfZHJ2LT5wcm9iZSkgfHwgKCFwX2Rldi0+ZnVuY3Rpb25fY29uZmlnKSB8fAogCSAgICAoIXRyeV9tb2R1bGVfZ2V0KHBfZHJ2LT5vd25lcikpKSB7CkBAIC00NTUsMTUgKzQyMSwxNiBAQAogCQlwX2Rldi0+Y29uZi5Db25maWdCYXNlID0gY2lzX2NvbmZpZy5iYXNlOwogCQlwX2Rldi0+Y29uZi5QcmVzZW50ID0gY2lzX2NvbmZpZy5ybWFza1swXTsKIAl9IGVsc2UgewotCQlwcmludGsoS0VSTl9JTkZPICJwY21jaWE6IGNvdWxkIG5vdCBwYXJzZSBiYXNlIGFuZCBybWFzazAgb2YgQ0lTXG4iKTsKKwkJZGV2X3ByaW50ayhLRVJOX0lORk8sIGRldiwKKwkJCSAgICJwY21jaWE6IGNvdWxkIG5vdCBwYXJzZSBiYXNlIGFuZCBybWFzazAgb2YgQ0lTXG4iKTsKIAkJcF9kZXYtPmNvbmYuQ29uZmlnQmFzZSA9IDA7CiAJCXBfZGV2LT5jb25mLlByZXNlbnQgPSAwOwogCX0KIAogCXJldCA9IHBfZHJ2LT5wcm9iZShwX2Rldik7CiAJaWYgKHJldCkgewotCQlkc19kYmcoMSwgImJpbmRpbmcgJXMgdG8gJXMgZmFpbGVkIHdpdGggJWRcbiIsCi0JCSAgICAgICBwX2Rldi0+ZGV2LmJ1c19pZCwgcF9kcnYtPmRydi5uYW1lLCByZXQpOworCQlkc19kZXZfZGJnKDEsIGRldiwgImJpbmRpbmcgdG8gJXMgZmFpbGVkIHdpdGggJWRcbiIsCisJCQkgICBwX2Rydi0+ZHJ2Lm5hbWUsIHJldCk7CiAJCWdvdG8gcHV0X21vZHVsZTsKIAl9CiAKQEAgLTQ5MCw4ICs0NTcsOSBAQAogCXN0cnVjdCBwY21jaWFfZGV2aWNlCSp0bXA7CiAJdW5zaWduZWQgbG9uZwkJZmxhZ3M7CiAKLQlkc19kYmcoMiwgInBjbWNpYV9jYXJkX3JlbW92ZSglZCkgJXNcbiIsIHMtPnNvY2ssCi0JICAgICAgIGxlZnRvdmVyID8gbGVmdG92ZXItPmRldm5hbWUgOiAiIik7CisJZHNfZGV2X2RiZygyLCBsZWZ0b3ZlciA/ICZsZWZ0b3Zlci0+ZGV2IDogJnMtPmRldiwKKwkJICAgInBjbWNpYV9jYXJkX3JlbW92ZSglZCkgJXNcbiIsIHMtPnNvY2ssCisJCSAgIGxlZnRvdmVyID8gbGVmdG92ZXItPmRldm5hbWUgOiAiIik7CiAKIAlpZiAoIWxlZnRvdmVyKQogCQlzLT5kZXZpY2VfY291bnQgPSAwOwpAQCAtNTA4LDcgKzQ3Niw3IEBACiAJCXBfZGV2LT5fcmVtb3ZlZD0xOwogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwY21jaWFfZGV2X2xpc3RfbG9jaywgZmxhZ3MpOwogCi0JCWRzX2RiZygyLCAidW5yZWdpc3RlcmluZyBkZXZpY2UgJXNcbiIsIHBfZGV2LT5kZXYuYnVzX2lkKTsKKwkJZHNfZGV2X2RiZygyLCAmcF9kZXYtPmRldiwgInVucmVnaXN0ZXJpbmcgZGV2aWNlXG4iKTsKIAkJZGV2aWNlX3VucmVnaXN0ZXIoJnBfZGV2LT5kZXYpOwogCX0KIApAQCAtNTI1LDcgKzQ5Myw3IEBACiAJcF9kZXYgPSB0b19wY21jaWFfZGV2KGRldik7CiAJcF9kcnYgPSB0b19wY21jaWFfZHJ2KGRldi0+ZHJpdmVyKTsKIAotCWRzX2RiZygxLCAicmVtb3ZpbmcgZGV2aWNlICVzXG4iLCBwX2Rldi0+ZGV2LmJ1c19pZCk7CisJZHNfZGV2X2RiZygxLCBkZXYsICJyZW1vdmluZyBkZXZpY2VcbiIpOwogCiAJLyogSWYgd2UncmUgcmVtb3ZpbmcgdGhlIHByaW1hcnkgbW9kdWxlIGRyaXZpbmcgYQogCSAqIHBzZXVkbyBtdWx0aS1mdW5jdGlvbiBjYXJkLCB3ZSBuZWVkIHRvIHVuYmluZApAQCAtNTQ4LDEzICs1MTYsMTUgQEAKIAogCS8qIGNoZWNrIGZvciBwcm9wZXIgdW5sb2FkaW5nICovCiAJaWYgKHBfZGV2LT5faXJxIHx8IHBfZGV2LT5faW8gfHwgcF9kZXYtPl9sb2NrZWQpCi0JCXByaW50ayhLRVJOX0lORk8gInBjbWNpYTogZHJpdmVyICVzIGRpZCBub3QgcmVsZWFzZSBjb25maWcgcHJvcGVybHlcbiIsCi0JCSAgICAgICBwX2Rydi0+ZHJ2Lm5hbWUpOworCQlkZXZfcHJpbnRrKEtFUk5fSU5GTywgZGV2LAorCQkJInBjbWNpYTogZHJpdmVyICVzIGRpZCBub3QgcmVsZWFzZSBjb25maWcgcHJvcGVybHlcbiIsCisJCQlwX2Rydi0+ZHJ2Lm5hbWUpOwogCiAJZm9yIChpID0gMDsgaSA8IE1BWF9XSU47IGkrKykKIAkJaWYgKHBfZGV2LT5fd2luICYgQ0xJRU5UX1dJTl9SRVEoaSkpCi0JCQlwcmludGsoS0VSTl9JTkZPICJwY21jaWE6IGRyaXZlciAlcyBkaWQgbm90IHJlbGVhc2Ugd2luZG93cyBwcm9wZXJseVxuIiwKLQkJCSAgICAgICBwX2Rydi0+ZHJ2Lm5hbWUpOworCQkJZGV2X3ByaW50ayhLRVJOX0lORk8sIGRldiwKKwkJCSAgInBjbWNpYTogZHJpdmVyICVzIGRpZCBub3QgcmVsZWFzZSB3aW5kb3cgcHJvcGVybHlcbiIsCisJCQkgICBwX2Rydi0+ZHJ2Lm5hbWUpOwogCiAJLyogcmVmZXJlbmNlcyBmcm9tIHBjbWNpYV9wcm9iZV9kZXZpY2UgKi8KIAlwY21jaWFfcHV0X2RldihwX2Rldik7CkBAIC02MDMsOCArNTczLDkgQEAKIAkJfQogCQlpZiAoIXBjY2FyZF9yZWFkX3R1cGxlKHBfZGV2LT5zb2NrZXQsIHBfZGV2LT5mdW5jLAogCQkJCSAgICAgIENJU1RQTF9ERVZJQ0VfR0VPLCBkZXZnZW8pKSB7Ci0JCQlkc19kYmcoMCwgIm1lbSBkZXZpY2UgZ2VvbWV0cnkgcHJvYmFibHkgbWVhbnMgIgotCQkJICAgICAgICJGVU5DSURfTUVNT1JZXG4iKTsKKwkJCWRzX2Rldl9kYmcoMCwgJnBfZGV2LT5kZXYsCisJCQkJICAgIm1lbSBkZXZpY2UgZ2VvbWV0cnkgcHJvYmFibHkgbWVhbnMgIgorCQkJCSAgICJGVU5DSURfTUVNT1JZXG4iKTsKIAkJCXBfZGV2LT5mdW5jX2lkID0gQ0lTVFBMX0ZVTkNJRF9NRU1PUlk7CiAJCQlwX2Rldi0+aGFzX2Z1bmNfaWQgPSAxOwogCQl9CkBAIC02ODUsNyArNjU2LDcgQEAKIAlpZiAoIXBfZGV2LT5kZXZuYW1lKQogCQlnb3RvIGVycl9mcmVlOwogCXNwcmludGYgKHBfZGV2LT5kZXZuYW1lLCAicGNtY2lhJXMiLCBwX2Rldi0+ZGV2LmJ1c19pZCk7Ci0JZHNfZGJnKDMsICJkZXZuYW1lIGlzICVzXG4iLCBwX2Rldi0+ZGV2bmFtZSk7CisJZHNfZGV2X2RiZygzLCAmcF9kZXYtPmRldiwgImRldm5hbWUgaXMgJXNcbiIsIHBfZGV2LT5kZXZuYW1lKTsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZwY21jaWFfZGV2X2xpc3RfbG9jaywgZmxhZ3MpOwogCkBAIC03MDYsNyArNjc3LDcgQEAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwY21jaWFfZGV2X2xpc3RfbG9jaywgZmxhZ3MpOwogCiAJaWYgKCFwX2Rldi0+ZnVuY3Rpb25fY29uZmlnKSB7Ci0JCWRzX2RiZygzLCAiY3JlYXRpbmcgY29uZmlnX3QgZm9yICVzXG4iLCBwX2Rldi0+ZGV2LmJ1c19pZCk7CisJCWRzX2Rldl9kYmcoMywgJnBfZGV2LT5kZXYsICJjcmVhdGluZyBjb25maWdfdFxuIik7CiAJCXBfZGV2LT5mdW5jdGlvbl9jb25maWcgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgY29uZmlnX3QpLAogCQkJCQkJIEdGUF9LRVJORUwpOwogCQlpZiAoIXBfZGV2LT5mdW5jdGlvbl9jb25maWcpCkBAIC03MTQsOCArNjg1LDkgQEAKIAkJa3JlZl9pbml0KCZwX2Rldi0+ZnVuY3Rpb25fY29uZmlnLT5yZWYpOwogCX0KIAotCXByaW50ayhLRVJOX05PVElDRSAicGNtY2lhOiByZWdpc3RlcmluZyBuZXcgZGV2aWNlICVzXG4iLAotCSAgICAgICBwX2Rldi0+ZGV2bmFtZSk7CisJZGV2X3ByaW50ayhLRVJOX05PVElDRSwgJnBfZGV2LT5kZXYsCisJCSAgICJwY21jaWE6IHJlZ2lzdGVyaW5nIG5ldyBkZXZpY2UgJXNcbiIsCisJCSAgIHBfZGV2LT5kZXZuYW1lKTsKIAogCXBjbWNpYV9kZXZpY2VfcXVlcnkocF9kZXYpOwogCkBAIC03NTAsMTkgKzcyMiwyMCBAQAogCWludCByZXQgPSAwOwogCiAJaWYgKCEocy0+cmVzb3VyY2Vfc2V0dXBfZG9uZSkpIHsKLQkJZHNfZGJnKDMsICJubyByZXNvdXJjZXMgYXZhaWxhYmxlLCBkZWxheWluZyBjYXJkX2FkZFxuIik7CisJCWRzX2Rldl9kYmcoMywgJnMtPmRldiwKKwkJCSAgICJubyByZXNvdXJjZXMgYXZhaWxhYmxlLCBkZWxheWluZyBjYXJkX2FkZFxuIik7CiAJCXJldHVybiAtRUFHQUlOOyAvKiB0cnkgYWdhaW4sIGJ1dCBsYXRlci4uLiAqLwogCX0KIAogCWlmIChwY21jaWFfdmFsaWRhdGVfbWVtKHMpKSB7Ci0JCWRzX2RiZygzLCAidmFsaWRhdGluZyBtZW0gcmVzb3VyY2VzIGZhaWxlZCwgIgorCQlkc19kZXZfZGJnKDMsICZzLT5kZXYsICJ2YWxpZGF0aW5nIG1lbSByZXNvdXJjZXMgZmFpbGVkLCAiCiAJCSAgICAgICAiZGVsYXlpbmcgY2FyZF9hZGRcbiIpOwogCQlyZXR1cm4gLUVBR0FJTjsgLyogdHJ5IGFnYWluLCBidXQgbGF0ZXIuLi4gKi8KIAl9CiAKIAlyZXQgPSBwY2NhcmRfdmFsaWRhdGVfY2lzKHMsIEJJTkRfRk5fQUxMLCAmbm9fY2hhaW5zKTsKIAlpZiAocmV0IHx8ICFub19jaGFpbnMpIHsKLQkJZHNfZGJnKDAsICJpbnZhbGlkIENJUyBvciBpbnZhbGlkIHJlc291cmNlc1xuIik7CisJCWRzX2Rldl9kYmcoMCwgJnMtPmRldiwgImludmFsaWQgQ0lTIG9yIGludmFsaWQgcmVzb3VyY2VzXG4iKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCkBAIC03ODMsNyArNzU2LDcgQEAKIHsKIAlzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcyA9CiAJCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgcGNtY2lhX3NvY2tldCwgZGV2aWNlX2FkZCk7Ci0JZHNfZGJnKDEsICJhZGRpbmcgYWRkaXRpb25hbCBkZXZpY2UgdG8gJWRcbiIsIHMtPnNvY2spOworCWRzX2Rldl9kYmcoMSwgJnMtPmRldiwgImFkZGluZyBhZGRpdGlvbmFsIGRldmljZSB0byAlZFxuIiwgcy0+c29jayk7CiAJcGNtY2lhX2RldmljZV9hZGQocywgcy0+cGNtY2lhX3N0YXRlLm1mY19wZmMpOwogCXMtPnBjbWNpYV9zdGF0ZS5kZXZpY2VfYWRkX3BlbmRpbmcgPSAwOwogCXMtPnBjbWNpYV9zdGF0ZS5tZmNfcGZjID0gMDsKQEAgLTc5Myw4ICs3NjYsNyBAQAogewogCXN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldiA9IHRvX3BjbWNpYV9kZXYoZGV2KTsKIAlpZiAoIXBfZGV2LT5kZXYuZHJpdmVyKSB7Ci0JCWRzX2RiZygxLCAidXBkYXRlIGRldmljZSBpbmZvcm1hdGlvbiBmb3IgJXNcbiIsCi0JCSAgICAgICBwX2Rldi0+ZGV2LmJ1c19pZCk7CisJCWRzX2Rldl9kYmcoMSwgZGV2LCAidXBkYXRlIGRldmljZSBpbmZvcm1hdGlvblxuIik7CiAJCXBjbWNpYV9kZXZpY2VfcXVlcnkocF9kZXYpOwogCX0KIApAQCAtODA4LDcgKzc4MCw3IEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCS8qIG11c3QgYmUgY2FsbGVkIHdpdGggc2t0X211dGV4IGhlbGQgKi8KLQlkc19kYmcoMCwgInJlLXNjYW5uaW5nIHNvY2tldCAlZFxuIiwgc2t0LT5zb2NrKTsKKwlkc19kZXZfZGJnKDAsICZza3QtPmRldiwgInJlLXNjYW5uaW5nIHNvY2tldCAlZFxuIiwgc2t0LT5zb2NrKTsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZwY21jaWFfZGV2X2xpc3RfbG9jaywgZmxhZ3MpOwogCWlmIChsaXN0X2VtcHR5KCZza3QtPmRldmljZXNfbGlzdCkpCkBAIC04NTksMTcgKzgzMSwxNyBAQAogCWludCByZXQgPSAtRU5PTUVNOwogCWludCBub19mdW5jczsKIAlpbnQgb2xkX2Z1bmNzOwotCWNpc2R1bXBfdCAqY2lzOwogCWNpc3RwbF9sb25nbGlua19tZmNfdCBtZmM7CiAKIAlpZiAoIWZpbGVuYW1lKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWRzX2RiZygxLCAidHJ5aW5nIHRvIGxvYWQgQ0lTIGZpbGUgJXNcbiIsIGZpbGVuYW1lKTsKKwlkc19kZXZfZGJnKDEsICZkZXYtPmRldiwgInRyeWluZyB0byBsb2FkIENJUyBmaWxlICVzXG4iLCBmaWxlbmFtZSk7CiAKIAlpZiAoc3RybGVuKGZpbGVuYW1lKSA+IChGSVJNV0FSRV9OQU1FX01BWCAtIDEpKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgInBjbWNpYTogQ0lTIGZpbGVuYW1lIGlzIHRvbyBsb25nIFslc11cbiIsCi0JCQlmaWxlbmFtZSk7CisJCWRldl9wcmludGsoS0VSTl9XQVJOSU5HLCAmZGV2LT5kZXYsCisJCQkgICAicGNtY2lhOiBDSVMgZmlsZW5hbWUgaXMgdG9vIGxvbmcgWyVzXVxuIiwKKwkJCSAgIGZpbGVuYW1lKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCkBAIC04NzgsMjMgKzg1MCwxNiBAQAogCWlmIChyZXF1ZXN0X2Zpcm13YXJlKCZmdywgcGF0aCwgJmRldi0+ZGV2KSA9PSAwKSB7CiAJCWlmIChmdy0+c2l6ZSA+PSBDSVNUUExfTUFYX0NJU19TSVpFKSB7CiAJCQlyZXQgPSAtRUlOVkFMOwotCQkJcHJpbnRrKEtFUk5fRVJSICJwY21jaWE6IENJUyBvdmVycmlkZSBpcyB0b28gYmlnXG4iKTsKKwkJCWRldl9wcmludGsoS0VSTl9FUlIsICZkZXYtPmRldiwKKwkJCQkgICAicGNtY2lhOiBDSVMgb3ZlcnJpZGUgaXMgdG9vIGJpZ1xuIik7CiAJCQlnb3RvIHJlbGVhc2U7CiAJCX0KIAotCQljaXMgPSBremFsbG9jKHNpemVvZihjaXNkdW1wX3QpLCBHRlBfS0VSTkVMKTsKLQkJaWYgKCFjaXMpIHsKLQkJCXJldCA9IC1FTk9NRU07Ci0JCQlnb3RvIHJlbGVhc2U7Ci0JCX0KLQotCQljaXMtPkxlbmd0aCA9IGZ3LT5zaXplICsgMTsKLQkJbWVtY3B5KGNpcy0+RGF0YSwgZnctPmRhdGEsIGZ3LT5zaXplKTsKLQotCQlpZiAoIXBjbWNpYV9yZXBsYWNlX2NpcyhzLCBjaXMpKQorCQlpZiAoIXBjbWNpYV9yZXBsYWNlX2NpcyhzLCBmdy0+ZGF0YSwgZnctPnNpemUpKQogCQkJcmV0ID0gMDsKIAkJZWxzZSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgInBjbWNpYTogQ0lTIG92ZXJyaWRlIGZhaWxlZFxuIik7CisJCQlkZXZfcHJpbnRrKEtFUk5fRVJSLCAmZGV2LT5kZXYsCisJCQkJICAgInBjbWNpYTogQ0lTIG92ZXJyaWRlIGZhaWxlZFxuIik7CiAJCQlnb3RvIHJlbGVhc2U7CiAJCX0KIApAQCAtOTk4LDE0ICs5NjMsMTQgQEAKIAkJICogYWZ0ZXIgaXQgaGFzIHJlLWNoZWNrZWQgdGhhdCB0aGVyZSBpcyBubyBwb3NzaWJsZSBtb2R1bGUKIAkJICogd2l0aCBhIHByb2RfaWQvbWFuZl9pZC9jYXJkX2lkIG1hdGNoLgogCQkgKi8KLQkJZHNfZGJnKDAsICJza2lwcGluZyBGVU5DX0lEIG1hdGNoIGZvciAlcyB1bnRpbCB1c2Vyc3BhY2UgIgotCQkgICAgICAgImludGVyYWN0aW9uXG4iLCBkZXYtPmRldi5idXNfaWQpOworCQlkc19kZXZfZGJnKDAsICZkZXYtPmRldiwKKwkJCSJza2lwcGluZyBGVU5DX0lEIG1hdGNoIHVudGlsIHVzZXJzcGFjZSBpbnRlcmFjdGlvblxuIik7CiAJCWlmICghZGV2LT5hbGxvd19mdW5jX2lkX21hdGNoKQogCQkJcmV0dXJuIDA7CiAJfQogCiAJaWYgKGRpZC0+bWF0Y2hfZmxhZ3MgJiBQQ01DSUFfREVWX0lEX01BVENIX0ZBS0VfQ0lTKSB7Ci0JCWRzX2RiZygwLCAiZGV2aWNlICVzIG5lZWRzIGEgZmFrZSBDSVNcbiIsIGRldi0+ZGV2LmJ1c19pZCk7CisJCWRzX2Rldl9kYmcoMCwgJmRldi0+ZGV2LCAiZGV2aWNlIG5lZWRzIGEgZmFrZSBDSVNcbiIpOwogCQlpZiAoIWRldi0+c29ja2V0LT5mYWtlX2NpcykKIAkJCXBjbWNpYV9sb2FkX2Zpcm13YXJlKGRldiwgZGlkLT5jaXNmaWxlKTsKIApAQCAtMTAzNywxMSArMTAwMiw5IEBACiAJLyogbWF0Y2ggZHluYW1pYyBkZXZpY2VzIGZpcnN0ICovCiAJc3Bpbl9sb2NrKCZwX2Rydi0+ZHluaWRzLmxvY2spOwogCWxpc3RfZm9yX2VhY2hfZW50cnkoZHluaWQsICZwX2Rydi0+ZHluaWRzLmxpc3QsIG5vZGUpIHsKLQkJZHNfZGJnKDMsICJ0cnlpbmcgdG8gbWF0Y2ggJXMgdG8gJXNcbiIsIGRldi0+YnVzX2lkLAotCQkgICAgICAgZHJ2LT5uYW1lKTsKKwkJZHNfZGV2X2RiZygzLCBkZXYsICJ0cnlpbmcgdG8gbWF0Y2ggdG8gJXNcbiIsIGRydi0+bmFtZSk7CiAJCWlmIChwY21jaWFfZGV2bWF0Y2gocF9kZXYsICZkeW5pZC0+aWQpKSB7Ci0JCQlkc19kYmcoMCwgIm1hdGNoZWQgJXMgdG8gJXNcbiIsIGRldi0+YnVzX2lkLAotCQkJICAgICAgIGRydi0+bmFtZSk7CisJCQlkc19kZXZfZGJnKDAsIGRldiwgIm1hdGNoZWQgdG8gJXNcbiIsIGRydi0+bmFtZSk7CiAJCQlzcGluX3VubG9jaygmcF9kcnYtPmR5bmlkcy5sb2NrKTsKIAkJCXJldHVybiAxOwogCQl9CkBAIC0xMDUxLDE4ICsxMDE0LDE1IEBACiAjaWZkZWYgQ09ORklHX1BDTUNJQV9JT0NUTAogCS8qIG1hdGNoaW5nIGJ5IGNhcmRtZ3IgKi8KIAlpZiAocF9kZXYtPmNhcmRtZ3IgPT0gcF9kcnYpIHsKLQkJZHNfZGJnKDAsICJjYXJkbWdyIG1hdGNoZWQgJXMgdG8gJXNcbiIsIGRldi0+YnVzX2lkLAotCQkgICAgICAgZHJ2LT5uYW1lKTsKKwkJZHNfZGV2X2RiZygwLCBkZXYsICJjYXJkbWdyIG1hdGNoZWQgdG8gJXNcbiIsIGRydi0+bmFtZSk7CiAJCXJldHVybiAxOwogCX0KICNlbmRpZgogCiAJd2hpbGUgKGRpZCAmJiBkaWQtPm1hdGNoX2ZsYWdzKSB7Ci0JCWRzX2RiZygzLCAidHJ5aW5nIHRvIG1hdGNoICVzIHRvICVzXG4iLCBkZXYtPmJ1c19pZCwKLQkJICAgICAgIGRydi0+bmFtZSk7CisJCWRzX2Rldl9kYmcoMywgZGV2LCAidHJ5aW5nIHRvIG1hdGNoIHRvICVzXG4iLCBkcnYtPm5hbWUpOwogCQlpZiAocGNtY2lhX2Rldm1hdGNoKHBfZGV2LCBkaWQpKSB7Ci0JCQlkc19kYmcoMCwgIm1hdGNoZWQgJXMgdG8gJXNcbiIsIGRldi0+YnVzX2lkLAotCQkJICAgICAgIGRydi0+bmFtZSk7CisJCQlkc19kZXZfZGJnKDAsIGRldiwgIm1hdGNoZWQgdG8gJXNcbiIsIGRydi0+bmFtZSk7CiAJCQlyZXR1cm4gMTsKIAkJfQogCQlkaWQrKzsKQEAgLTEyNjgsNyArMTIyOCw3IEBACiAJaWYgKHBfZGV2LT5zdXNwZW5kZWQpCiAJCXJldHVybiAwOwogCi0JZHNfZGJnKDIsICJzdXNwZW5kaW5nICVzXG4iLCBkZXYtPmJ1c19pZCk7CisJZHNfZGV2X2RiZygyLCBkZXYsICJzdXNwZW5kaW5nXG4iKTsKIAogCWlmIChkZXYtPmRyaXZlcikKIAkJcF9kcnYgPSB0b19wY21jaWFfZHJ2KGRldi0+ZHJpdmVyKTsKQEAgLTEyNzksMTUgKzEyMzksMTYgQEAKIAlpZiAocF9kcnYtPnN1c3BlbmQpIHsKIAkJcmV0ID0gcF9kcnYtPnN1c3BlbmQocF9kZXYpOwogCQlpZiAocmV0KSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgInBjbWNpYTogZGV2aWNlICVzIChkcml2ZXIgJXMpIGRpZCAiCi0JCQkgICAgICAgIm5vdCB3YW50IHRvIGdvIHRvIHNsZWVwICglZClcbiIsCi0JCQkgICAgICAgcF9kZXYtPmRldm5hbWUsIHBfZHJ2LT5kcnYubmFtZSwgcmV0KTsKKwkJCWRldl9wcmludGsoS0VSTl9FUlIsIGRldiwKKwkJCQkgICAicGNtY2lhOiBkZXZpY2UgJXMgKGRyaXZlciAlcykgZGlkICIKKwkJCQkgICAibm90IHdhbnQgdG8gZ28gdG8gc2xlZXAgKCVkKVxuIiwKKwkJCQkgICBwX2Rldi0+ZGV2bmFtZSwgcF9kcnYtPmRydi5uYW1lLCByZXQpOwogCQkJZ290byBvdXQ7CiAJCX0KIAl9CiAKIAlpZiAocF9kZXYtPmRldmljZV9ubyA9PSBwX2Rldi0+ZnVuYykgewotCQlkc19kYmcoMiwgInJlbGVhc2luZyBjb25maWd1cmF0aW9uIGZvciAlc1xuIiwgZGV2LT5idXNfaWQpOworCQlkc19kZXZfZGJnKDIsIGRldiwgInJlbGVhc2luZyBjb25maWd1cmF0aW9uXG4iKTsKIAkJcGNtY2lhX3JlbGVhc2VfY29uZmlndXJhdGlvbihwX2Rldik7CiAJfQogCkBAIC0xMzA3LDcgKzEyNjgsNyBAQAogCWlmICghcF9kZXYtPnN1c3BlbmRlZCkKIAkJcmV0dXJuIDA7CiAKLQlkc19kYmcoMiwgInJlc3VtaW5nICVzXG4iLCBkZXYtPmJ1c19pZCk7CisJZHNfZGV2X2RiZygyLCBkZXYsICJyZXN1bWluZ1xuIik7CiAKIAlpZiAoZGV2LT5kcml2ZXIpCiAJCXBfZHJ2ID0gdG9fcGNtY2lhX2RydihkZXYtPmRyaXZlcik7CkBAIC0xMzE2LDcgKzEyNzcsNyBAQAogCQlnb3RvIG91dDsKIAogCWlmIChwX2Rldi0+ZGV2aWNlX25vID09IHBfZGV2LT5mdW5jKSB7Ci0JCWRzX2RiZygyLCAicmVxdWVzdGluZyBjb25maWd1cmF0aW9uIGZvciAlc1xuIiwgZGV2LT5idXNfaWQpOworCQlkc19kZXZfZGJnKDIsIGRldiwgInJlcXVlc3RpbmcgY29uZmlndXJhdGlvblxuIik7CiAJCXJldCA9IHBjbWNpYV9yZXF1ZXN0X2NvbmZpZ3VyYXRpb24ocF9kZXYsICZwX2Rldi0+Y29uZik7CiAJCWlmIChyZXQpCiAJCQlnb3RvIG91dDsKQEAgLTEzNTgsMTQgKzEzMTksMTQgQEAKIAogc3RhdGljIGludCBwY21jaWFfYnVzX3Jlc3VtZShzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqc2t0KQogewotCWRzX2RiZygyLCAicmVzdW1pbmcgc29ja2V0ICVkXG4iLCBza3QtPnNvY2spOworCWRzX2Rldl9kYmcoMiwgJnNrdC0+ZGV2LCAicmVzdW1pbmcgc29ja2V0ICVkXG4iLCBza3QtPnNvY2spOwogCWJ1c19mb3JfZWFjaF9kZXYoJnBjbWNpYV9idXNfdHlwZSwgTlVMTCwgc2t0LCBwY21jaWFfYnVzX3Jlc3VtZV9jYWxsYmFjayk7CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgcGNtY2lhX2J1c19zdXNwZW5kKHN0cnVjdCBwY21jaWFfc29ja2V0ICpza3QpCiB7Ci0JZHNfZGJnKDIsICJzdXNwZW5kaW5nIHNvY2tldCAlZFxuIiwgc2t0LT5zb2NrKTsKKwlkc19kZXZfZGJnKDIsICZza3QtPmRldiwgInN1c3BlbmRpbmcgc29ja2V0ICVkXG4iLCBza3QtPnNvY2spOwogCWlmIChidXNfZm9yX2VhY2hfZGV2KCZwY21jaWFfYnVzX3R5cGUsIE5VTEwsIHNrdCwKIAkJCSAgICAgcGNtY2lhX2J1c19zdXNwZW5kX2NhbGxiYWNrKSkgewogCQlwY21jaWFfYnVzX3Jlc3VtZShza3QpOwpAQCAtMTM5MSwxMyArMTM1MiwxNCBAQAogCXN0cnVjdCBwY21jaWFfc29ja2V0ICpzID0gcGNtY2lhX2dldF9zb2NrZXQoc2t0KTsKIAogCWlmICghcykgewotCQlwcmludGsoS0VSTl9FUlIgIlBDTUNJQSBvYnRhaW5pbmcgcmVmZXJlbmNlIHRvIHNvY2tldCAlcCAiIFwKLQkJCSJmYWlsZWQsIGV2ZW50IDB4JXggbG9zdCFcbiIsIHNrdCwgZXZlbnQpOworCQlkZXZfcHJpbnRrKEtFUk5fRVJSLCAmc2t0LT5kZXYsCisJCQkgICAiUENNQ0lBIG9idGFpbmluZyByZWZlcmVuY2UgdG8gc29ja2V0ICIJXAorCQkJICAgImZhaWxlZCwgZXZlbnQgMHgleCBsb3N0IVxuIiwgZXZlbnQpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKLQlkc19kYmcoMSwgImRzX2V2ZW50KDB4JTA2eCwgJWQsIDB4JXApXG4iLAotCSAgICAgICBldmVudCwgcHJpb3JpdHksIHNrdCk7CisJZHNfZGV2X2RiZygxLCAmc2t0LT5kZXYsICJkc19ldmVudCgweCUwNngsICVkLCAweCVwKVxuIiwKKwkJICAgZXZlbnQsIHByaW9yaXR5LCBza3QpOwogCiAJc3dpdGNoIChldmVudCkgewogCWNhc2UgQ1NfRVZFTlRfQ0FSRF9SRU1PVkFMOgpAQCAtMTQ3Miw3ICsxNDM0LDggQEAKIAogCXNvY2tldCA9IHBjbWNpYV9nZXRfc29ja2V0KHNvY2tldCk7CiAJaWYgKCFzb2NrZXQpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJQQ01DSUEgb2J0YWluaW5nIHJlZmVyZW5jZSB0byBzb2NrZXQgJXAgZmFpbGVkXG4iLCBzb2NrZXQpOworCQlkZXZfcHJpbnRrKEtFUk5fRVJSLCBkZXYsCisJCQkgICAiUENNQ0lBIG9idGFpbmluZyByZWZlcmVuY2UgdG8gc29ja2V0IGZhaWxlZFxuIik7CiAJCXJldHVybiAtRU5PREVWOwogCX0KIApAQCAtMTQ5Miw3ICsxNDU1LDcgQEAKIAogCXJldCA9IHBjY2FyZF9yZWdpc3Rlcl9wY21jaWEoc29ja2V0LCAmcGNtY2lhX2J1c19jYWxsYmFjayk7CiAJaWYgKHJldCkgewotCQlwcmludGsoS0VSTl9FUlIgIlBDTUNJQSByZWdpc3RyYXRpb24gUENDYXJkIGNvcmUgZmFpbGVkIGZvciBzb2NrZXQgJXBcbiIsIHNvY2tldCk7CisJCWRldl9wcmludGsoS0VSTl9FUlIsIGRldiwgIlBDTUNJQSByZWdpc3RyYXRpb24gZmFpbGVkXG4iKTsKIAkJcGNtY2lhX3B1dF9zb2NrZXQoc29ja2V0KTsKIAkJcmV0dXJuIChyZXQpOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL2RzX2ludGVybmFsLmggYi9kcml2ZXJzL3BjbWNpYS9kc19pbnRlcm5hbC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYTJiMjVlLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvcGNtY2lhL2RzX2ludGVybmFsLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyMyArMCwwIEBACi0vKiBkc19pbnRlcm5hbC5oIC0gaW50ZXJuYWwgaGVhZGVyIGZvciAxNi1iaXQgUENNQ0lBIGRldmljZXMgbWFuYWdlbWVudCAqLwotCi1leHRlcm4gc3BpbmxvY2tfdCBwY21jaWFfZGV2X2xpc3RfbG9jazsKLWV4dGVybiBzdHJ1Y3QgYnVzX3R5cGUgcGNtY2lhX2J1c190eXBlOwotCi1leHRlcm4gc3RydWN0IHBjbWNpYV9kZXZpY2UgKiBwY21jaWFfZ2V0X2RldihzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYpOwotZXh0ZXJuIHZvaWQgcGNtY2lhX3B1dF9kZXYoc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2KTsKLQotc3RydWN0IHBjbWNpYV9kZXZpY2UgKiBwY21jaWFfZGV2aWNlX2FkZChzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcywgdW5zaWduZWQgaW50IGZ1bmN0aW9uKTsKLQotZXh0ZXJuIGludCBwY21jaWFfcmVsZWFzZV9jb25maWd1cmF0aW9uKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2Rldik7Ci0KLSNpZmRlZiBDT05GSUdfUENNQ0lBX0lPQ1RMCi1leHRlcm4gdm9pZCBfX2luaXQgcGNtY2lhX3NldHVwX2lvY3RsKHZvaWQpOwotZXh0ZXJuIHZvaWQgX19leGl0IHBjbWNpYV9jbGVhbnVwX2lvY3RsKHZvaWQpOwotZXh0ZXJuIHZvaWQgaGFuZGxlX2V2ZW50KHN0cnVjdCBwY21jaWFfc29ja2V0ICpzLCBldmVudF90IGV2ZW50KTsKLWV4dGVybiBpbnQgaGFuZGxlX3JlcXVlc3Qoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMsIGV2ZW50X3QgZXZlbnQpOwotI2Vsc2UKLXN0YXRpYyBpbmxpbmUgdm9pZCBfX2luaXQgcGNtY2lhX3NldHVwX2lvY3RsKHZvaWQpIHsgcmV0dXJuOyB9Ci1zdGF0aWMgaW5saW5lIHZvaWQgX19leGl0IHBjbWNpYV9jbGVhbnVwX2lvY3RsKHZvaWQpIHsgcmV0dXJuOyB9Ci1zdGF0aWMgaW5saW5lIHZvaWQgaGFuZGxlX2V2ZW50KHN0cnVjdCBwY21jaWFfc29ja2V0ICpzLCBldmVudF90IGV2ZW50KSB7IHJldHVybjsgfQotc3RhdGljIGlubGluZSBpbnQgaGFuZGxlX3JlcXVlc3Qoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMsIGV2ZW50X3QgZXZlbnQpIHsgcmV0dXJuIENTX1NVQ0NFU1M7IH0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvaGQ2NDQ2NV9zcy5jIGIvZHJpdmVycy9wY21jaWEvaGQ2NDQ2NV9zcy5jCmluZGV4IGZiMmJjMWYuLjllZjY5Y2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL2hkNjQ0NjVfc3MuYworKysgYi9kcml2ZXJzL3BjbWNpYS9oZDY0NDY1X3NzLmMKQEAgLTQ2LDcgKzQ2LDYgQEAKICNpbmNsdWRlIDxwY21jaWEvY2lzdHBsLmg+CiAjaW5jbHVkZSA8cGNtY2lhL2RzLmg+CiAjaW5jbHVkZSA8cGNtY2lhL3NzLmg+Ci0jaW5jbHVkZSAiY3NfaW50ZXJuYWwuaCIKIAogI2RlZmluZSBNT0ROQU1FICJoZDY0NDY1X3NzIgogCkBAIC0yMzQsMTUgKzIzMywxOCBAQAogICovCiBzdGF0aWMgdm9pZCBoc19tYXBfaXJxKGhzX3NvY2tldF90ICpzcCwgdW5zaWduZWQgaW50IGlycSkKIHsKKwlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2M7CisKICAgICAJRFBSSU5USygiaHNfbWFwX2lycShzb2NrPSVkIGlycT0lZClcbiIsIHNwLT5udW1iZXIsIGlycSk7CiAJCiAJaWYgKGlycSA+PSBIU19OVU1fTUFQUEVEX0lSUVMpCiAJICAgIHJldHVybjsKIAorCWRlc2MgPSBpcnFfdG9fZGVzYyhpcnEpOwogICAgIAloc19tYXBwZWRfaXJxW2lycV0uc29jayA9IHNwOwogCS8qIGluc2VydCBvdXJzZWx2ZXMgYXMgdGhlIGlycSBjb250cm9sbGVyICovCi0JaHNfbWFwcGVkX2lycVtpcnFdLm9sZF9oYW5kbGVyID0gaXJxX2Rlc2NbaXJxXS5jaGlwOwotCWlycV9kZXNjW2lycV0uY2hpcCA9ICZoZDY0NDY1X3NzX2lycV90eXBlOworCWhzX21hcHBlZF9pcnFbaXJxXS5vbGRfaGFuZGxlciA9IGRlc2MtPmNoaXA7CisJZGVzYy0+Y2hpcCA9ICZoZDY0NDY1X3NzX2lycV90eXBlOwogfQogCiAKQEAgLTI1MSwxMyArMjUzLDE2IEBACiAgKi8KIHN0YXRpYyB2b2lkIGhzX3VubWFwX2lycShoc19zb2NrZXRfdCAqc3AsIHVuc2lnbmVkIGludCBpcnEpCiB7CisJc3RydWN0IGlycV9kZXNjICpkZXNjOworCiAgICAgCURQUklOVEsoImhzX3VubWFwX2lycShzb2NrPSVkIGlycT0lZClcbiIsIHNwLT5udW1iZXIsIGlycSk7CiAJCiAJaWYgKGlycSA+PSBIU19OVU1fTUFQUEVEX0lSUVMpCiAJICAgIHJldHVybjsKIAkJCisJZGVzYyA9IGlycV90b19kZXNjKGlycSk7CiAJLyogcmVzdG9yZSB0aGUgb3JpZ2luYWwgaXJxIGNvbnRyb2xsZXIgKi8KLQlpcnFfZGVzY1tpcnFdLmNoaXAgPSBoc19tYXBwZWRfaXJxW2lycV0ub2xkX2hhbmRsZXI7CisJZGVzYy0+Y2hpcCA9IGhzX21hcHBlZF9pcnFbaXJxXS5vbGRfaGFuZGxlcjsKIH0KIAogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvaTgyMzY1LmMgYi9kcml2ZXJzL3BjbWNpYS9pODIzNjUuYwppbmRleCA2OGY2YjI3Li43MTY1M2FiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9pODIzNjUuYworKysgYi9kcml2ZXJzL3BjbWNpYS9pODIzNjUuYwpAQCAtNjMsNyArNjMsNyBAQAogI2luY2x1ZGUgInZnNDY4LmgiCiAjaW5jbHVkZSAicmljb2guaCIKIAotI2lmZGVmIERFQlVHCisjaWZkZWYgQ09ORklHX1BDTUNJQV9ERUJVRwogc3RhdGljIGNvbnN0IGNoYXIgdmVyc2lvbltdID0KICJpODIzNjUuYyAxLjI2NSAxOTk5LzExLzEwIDE4OjM2OjIxIChEYXZpZCBIaW5kcykiOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9tMzJyX2NmYy5jIGIvZHJpdmVycy9wY21jaWEvbTMycl9jZmMuYwppbmRleCAzNjE2ZGEyLi4yYWI0ZjIyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9tMzJyX2NmYy5jCisrKyBiL2RyaXZlcnMvcGNtY2lhL20zMnJfY2ZjLmMKQEAgLTM4LDcgKzM4LDcgQEAKIAogI2luY2x1ZGUgIm0zMnJfY2ZjLmgiCiAKLSNpZmRlZiBERUJVRworI2lmZGVmIENPTkZJR19QQ01DSUFfREVCVUcKIHN0YXRpYyBpbnQgbTMycl9jZmNfZGVidWc7CiBtb2R1bGVfcGFyYW0obTMycl9jZmNfZGVidWcsIGludCwgMDY0NCk7CiAjZGVmaW5lIGRlYnVnKGx2bCwgZm10LCBhcmcuLi4pIGRvIHsJCQkJXApAQCAtNTA1LDcgKzUwNSw3IEBACiAJCXBjY19zZXQoc29jaywodW5zaWduZWQgaW50KVBMRF9DRkJVRkNSLDEpOwogCX0KIAotI2lmZGVmIERFQlVHCisjaWZkZWYgQ09ORklHX1BDTUNJQV9ERUJVRwogCWlmKHN0YXRlLT5mbGFncyAmIFNTX0lPQ0FSRCl7CiAJCWRlYnVnKDMsICI6SU9DQVJEIik7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvbTMycl9wY2MuYyBiL2RyaXZlcnMvcGNtY2lhL20zMnJfcGNjLmMKaW5kZXggMmI0MmI3MS4uMmYxMDhjMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvbTMycl9wY2MuYworKysgYi9kcml2ZXJzL3BjbWNpYS9tMzJyX3BjYy5jCkBAIC00NSw3ICs0NSw3IEBACiAKICNkZWZpbmUgUENDX0RFQlVHX0RCRVgKIAotI2lmZGVmIERFQlVHCisjaWZkZWYgQ09ORklHX1BDTUNJQV9ERUJVRwogc3RhdGljIGludCBtMzJyX3BjY19kZWJ1ZzsKIG1vZHVsZV9wYXJhbShtMzJyX3BjY19kZWJ1ZywgaW50LCAwNjQ0KTsKICNkZWZpbmUgZGVidWcobHZsLCBmbXQsIGFyZy4uLikgZG8gewkJCQlcCkBAIC00NjAsNyArNDYwLDcgQEAKIAogCXBjY19zZXQoc29jayxQQ0NTSUdDUixyZWcpOwogCi0jaWZkZWYgREVCVUcKKyNpZmRlZiBDT05GSUdfUENNQ0lBX0RFQlVHCiAJaWYoc3RhdGUtPmZsYWdzICYgU1NfSU9DQVJEKXsKIAkJZGVidWcoMywgIjpJT0NBUkQiKTsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9tOHh4X3BjbWNpYS5jIGIvZHJpdmVycy9wY21jaWEvbTh4eF9wY21jaWEuYwppbmRleCBmZjY2NjA0Li5kMWFkMDk2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9tOHh4X3BjbWNpYS5jCisrKyBiL2RyaXZlcnMvcGNtY2lhL204eHhfcGNtY2lhLmMKQEAgLTY0LDggKzY0LDggQEAKICNpbmNsdWRlIDxwY21jaWEvY3MuaD4KICNpbmNsdWRlIDxwY21jaWEvc3MuaD4KIAotI2lmZGVmIFBDTUNJQV9ERUJVRwotc3RhdGljIGludCBwY19kZWJ1ZyA9IFBDTUNJQV9ERUJVRzsKKyNpZmRlZiBDT05GSUdfUENNQ0lBX0RFQlVHCitzdGF0aWMgaW50IHBjX2RlYnVnOwogbW9kdWxlX3BhcmFtKHBjX2RlYnVnLCBpbnQsIDApOwogI2RlZmluZSBkcHJpbnRrKGFyZ3MuLi4pIHByaW50ayhLRVJOX0RFQlVHICJtOHh4X3BjbWNpYTogIiBhcmdzKTsKICNlbHNlCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9vMm1pY3JvLmggYi9kcml2ZXJzL3BjbWNpYS9vMm1pY3JvLmgKaW5kZXggYTIzNGNlMTkuLjU1NTQwMTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL28ybWljcm8uaAorKysgYi9kcml2ZXJzL3BjbWNpYS9vMm1pY3JvLmgKQEAgLTE0MCw3ICsxNDAsOCBAQAogCQlhID0gY29uZmlnX3JlYWRiKHNvY2tldCwgTzJfUkVTRVJWRUQxKTsKIAkJYiA9IGNvbmZpZ19yZWFkYihzb2NrZXQsIE8yX1JFU0VSVkVEMik7CiAKLQkJcHJpbnRrKEtFUk5fSU5GTyAiWWVudGEgTzI6IHJlcyBhdCAweDk0LzB4RDQ6ICUwMngvJTAyeFxuIiwgYSwgYik7CisJCWRldl9wcmludGsoS0VSTl9JTkZPLCAmc29ja2V0LT5kZXYtPmRldiwKKwkJCSAgICJPMjogcmVzIGF0IDB4OTQvMHhENDogJTAyeC8lMDJ4XG4iLCBhLCBiKTsKIAogCQlzd2l0Y2ggKHNvY2tldC0+ZGV2LT5kZXZpY2UpIHsKIAkJLyoKQEAgLTE1Myw3ICsxNTQsOSBAQAogCQljYXNlIFBDSV9ERVZJQ0VfSURfTzJfNjgxMjoKIAkJY2FzZSBQQ0lfREVWSUNFX0lEX08yXzY4MzI6CiAJCWNhc2UgUENJX0RFVklDRV9JRF9PMl82ODM2OgotCQkJcHJpbnRrKEtFUk5fSU5GTyAiWWVudGEgTzI6IG9sZCBicmlkZ2UsIGRpc2FibGluZyByZWFkIHByZWZldGNoL3dyaXRlIGJ1cnN0XG4iKTsKKwkJCWRldl9wcmludGsoS0VSTl9JTkZPLCAmc29ja2V0LT5kZXYtPmRldiwKKwkJCQkgICAiWWVudGEgTzI6IG9sZCBicmlkZ2UsIGRpc2FibGluZyByZWFkICIKKwkJCQkgICAicHJlZmV0Y2gvd3JpdGUgYnVyc3RcbiIpOwogCQkJY29uZmlnX3dyaXRlYihzb2NrZXQsIE8yX1JFU0VSVkVEMSwKIAkJCSAgICAgICAgICAgICAgYSAmIH4oTzJfUkVTX1JFQURfUFJFRkVUQ0ggfCBPMl9SRVNfV1JJVEVfQlVSU1QpKTsKIAkJCWNvbmZpZ193cml0ZWIoc29ja2V0LCBPMl9SRVNFUlZFRDIsCkBAIC0xNjEsNyArMTY0LDggQEAKIAkJCWJyZWFrOwogCiAJCWRlZmF1bHQ6Ci0JCQlwcmludGsoS0VSTl9JTkZPICJZZW50YSBPMjogZW5hYmxpbmcgcmVhZCBwcmVmZXRjaC93cml0ZSBidXJzdFxuIik7CisJCQlkZXZfcHJpbnRrKEtFUk5fSU5GTyAsICZzb2NrZXQtPmRldi0+ZGV2LAorCQkJCSAgICJPMjogZW5hYmxpbmcgcmVhZCBwcmVmZXRjaC93cml0ZSBidXJzdFxuIik7CiAJCQljb25maWdfd3JpdGViKHNvY2tldCwgTzJfUkVTRVJWRUQxLAogCQkJICAgICAgICAgICAgICBhIHwgTzJfUkVTX1JFQURfUFJFRkVUQ0ggfCBPMl9SRVNfV1JJVEVfQlVSU1QpOwogCQkJY29uZmlnX3dyaXRlYihzb2NrZXQsIE8yX1JFU0VSVkVEMiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL3BjbWNpYV9pb2N0bC5jIGIvZHJpdmVycy9wY21jaWEvcGNtY2lhX2lvY3RsLmMKaW5kZXggNDE5Zjk3Zi4uMTcwM2IyMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvcGNtY2lhX2lvY3RsLmMKKysrIGIvZHJpdmVycy9wY21jaWEvcGNtY2lhX2lvY3RsLmMKQEAgLTM4LDcgKzM4LDYgQEAKICNpbmNsdWRlIDxwY21jaWEvc3MuaD4KIAogI2luY2x1ZGUgImNzX2ludGVybmFsLmgiCi0jaW5jbHVkZSAiZHNfaW50ZXJuYWwuaCIKIAogc3RhdGljIGludCBtYWpvcl9kZXYgPSAtMTsKIApAQCAtNTgsNyArNTcsNyBAQAogfSB1c2VyX2luZm9fdDsKIAogCi0jaWZkZWYgREVCVUcKKyNpZmRlZiBDT05GSUdfUENNQ0lBX0RFQlVHCiBleHRlcm4gaW50IGRzX3BjX2RlYnVnOwogCiAjZGVmaW5lIGRzX2RiZyhsdmwsIGZtdCwgYXJnLi4uKSBkbyB7CQlcCkBAIC0xNDksNyArMTQ4LDcgQEAKIAogCWlycSA9IGFkai0+cmVzb3VyY2UuaXJxLklSUTsKIAlpZiAoKGlycSA8IDApIHx8IChpcnEgPiAxNSkpCi0JCXJldHVybiBDU19CQURfSVJROworCQlyZXR1cm4gLUVJTlZBTDsKIAogCWlmIChhZGotPkFjdGlvbiAhPSBSRU1PVkVfTUFOQUdFRF9SRVNPVVJDRSkKIAkJcmV0dXJuIDA7CkBAIC0xNjcsNyArMTY2LDcgQEAKICNlbHNlCiAKIHN0YXRpYyBpbmxpbmUgaW50IGFkanVzdF9pcnEoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMsIGFkanVzdF90ICphZGopIHsKLQlyZXR1cm4gQ1NfU1VDQ0VTUzsKKwlyZXR1cm4gMDsKIH0KIAogI2VuZGlmCkBAIC0xNzUsNyArMTc0LDcgQEAKIHN0YXRpYyBpbnQgcGNtY2lhX2FkanVzdF9yZXNvdXJjZV9pbmZvKGFkanVzdF90ICphZGopCiB7CiAJc3RydWN0IHBjbWNpYV9zb2NrZXQgKnM7Ci0JaW50IHJldCA9IENTX1VOU1VQUE9SVEVEX0ZVTkNUSU9OOworCWludCByZXQgPSAtRU5PU1lTOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlkb3duX3JlYWQoJnBjbWNpYV9zb2NrZXRfbGlzdF9yd3NlbSk7CkBAIC0yNDgsNyArMjQ3LDcgQEAKIAlpZiAocy0+c3RhdGUgJiBTT0NLRVRfU1VTUEVORCkKIAkJc3RhdHVzLT5DYXJkU3RhdGUgfD0gQ1NfRVZFTlRfUE1fU1VTUEVORDsKIAlpZiAoIShzLT5zdGF0ZSAmIFNPQ0tFVF9QUkVTRU5UKSkKLQkJcmV0dXJuIENTX05PX0NBUkQ7CisJCXJldHVybiAtRU5PREVWOwogCiAJYyA9IChwX2RldikgPyBwX2Rldi0+ZnVuY3Rpb25fY29uZmlnIDogTlVMTDsKIApAQCAtMjc0LDcgKzI3Myw3IEBACiAJCQlzdGF0dXMtPkNhcmRTdGF0ZSB8PQogCQkJCShyZWcgJiBFU1JfUkVRX0FUVE4pID8gQ1NfRVZFTlRfUkVRVUVTVF9BVFRFTlRJT04gOiAwOwogCQl9Ci0JCXJldHVybiBDU19TVUNDRVNTOworCQlyZXR1cm4gMDsKIAl9CiAJc3RhdHVzLT5DYXJkU3RhdGUgfD0KIAkJKHZhbCAmIFNTX1dSUFJPVCkgPyBDU19FVkVOVF9XUklURV9QUk9URUNUIDogMDsKQEAgLTI4NCw5ICsyODMsODEgQEAKIAkJKHZhbCAmIFNTX0JBVFdBUk4pID8gQ1NfRVZFTlRfQkFUVEVSWV9MT1cgOiAwOwogCXN0YXR1cy0+Q2FyZFN0YXRlIHw9CiAJCSh2YWwgJiBTU19SRUFEWSkgPyBDU19FVkVOVF9SRUFEWV9DSEFOR0UgOiAwOwotCXJldHVybiBDU19TVUNDRVNTOworCXJldHVybiAwOwogfSAvKiBwY2NhcmRfZ2V0X3N0YXR1cyAqLwogCitpbnQgcGNjYXJkX2dldF9jb25maWd1cmF0aW9uX2luZm8oc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMsCisJCQkJICBzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYsCisJCQkJICBjb25maWdfaW5mb190ICpjb25maWcpCit7CisJY29uZmlnX3QgKmM7CisKKwlpZiAoIShzLT5zdGF0ZSAmIFNPQ0tFVF9QUkVTRU5UKSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKworI2lmZGVmIENPTkZJR19DQVJEQlVTCisJaWYgKHMtPnN0YXRlICYgU09DS0VUX0NBUkRCVVMpIHsKKwkJbWVtc2V0KGNvbmZpZywgMCwgc2l6ZW9mKGNvbmZpZ19pbmZvX3QpKTsKKwkJY29uZmlnLT5WY2MgPSBzLT5zb2NrZXQuVmNjOworCQljb25maWctPlZwcDEgPSBjb25maWctPlZwcDIgPSBzLT5zb2NrZXQuVnBwOworCQljb25maWctPk9wdGlvbiA9IHMtPmNiX2Rldi0+c3Vib3JkaW5hdGUtPm51bWJlcjsKKwkJaWYgKHMtPnN0YXRlICYgU09DS0VUX0NBUkRCVVNfQ09ORklHKSB7CisJCQljb25maWctPkF0dHJpYnV0ZXMgPSBDT05GX1ZBTElEX0NMSUVOVDsKKwkJCWNvbmZpZy0+SW50VHlwZSA9IElOVF9DQVJEQlVTOworCQkJY29uZmlnLT5Bc3NpZ25lZElSUSA9IHMtPmlycS5Bc3NpZ25lZElSUTsKKwkJCWlmIChjb25maWctPkFzc2lnbmVkSVJRKQorCQkJCWNvbmZpZy0+QXR0cmlidXRlcyB8PSBDT05GX0VOQUJMRV9JUlE7CisJCQlpZiAocy0+aW9bMF0ucmVzKSB7CisJCQkJY29uZmlnLT5CYXNlUG9ydDEgPSBzLT5pb1swXS5yZXMtPnN0YXJ0OworCQkJCWNvbmZpZy0+TnVtUG9ydHMxID0gcy0+aW9bMF0ucmVzLT5lbmQgLQorCQkJCQljb25maWctPkJhc2VQb3J0MSArIDE7CisJCQl9CisJCX0KKwkJcmV0dXJuIDA7CisJfQorI2VuZGlmCisKKwlpZiAocF9kZXYpIHsKKwkJYyA9IHBfZGV2LT5mdW5jdGlvbl9jb25maWc7CisJCWNvbmZpZy0+RnVuY3Rpb24gPSBwX2Rldi0+ZnVuYzsKKwl9IGVsc2UgeworCQljID0gTlVMTDsKKwkJY29uZmlnLT5GdW5jdGlvbiA9IDA7CisJfQorCisJaWYgKChjID09IE5VTEwpIHx8ICEoYy0+c3RhdGUgJiBDT05GSUdfTE9DS0VEKSkgeworCQljb25maWctPkF0dHJpYnV0ZXMgPSAwOworCQljb25maWctPlZjYyA9IHMtPnNvY2tldC5WY2M7CisJCWNvbmZpZy0+VnBwMSA9IGNvbmZpZy0+VnBwMiA9IHMtPnNvY2tldC5WcHA7CisJCXJldHVybiAwOworCX0KKworCWNvbmZpZy0+QXR0cmlidXRlcyA9IGMtPkF0dHJpYnV0ZXMgfCBDT05GX1ZBTElEX0NMSUVOVDsKKwljb25maWctPlZjYyA9IHMtPnNvY2tldC5WY2M7CisJY29uZmlnLT5WcHAxID0gY29uZmlnLT5WcHAyID0gcy0+c29ja2V0LlZwcDsKKwljb25maWctPkludFR5cGUgPSBjLT5JbnRUeXBlOworCWNvbmZpZy0+Q29uZmlnQmFzZSA9IGMtPkNvbmZpZ0Jhc2U7CisJY29uZmlnLT5TdGF0dXMgPSBjLT5TdGF0dXM7CisJY29uZmlnLT5QaW4gPSBjLT5QaW47CisJY29uZmlnLT5Db3B5ID0gYy0+Q29weTsKKwljb25maWctPk9wdGlvbiA9IGMtPk9wdGlvbjsKKwljb25maWctPkV4dFN0YXR1cyA9IGMtPkV4dFN0YXR1czsKKwljb25maWctPlByZXNlbnQgPSBjb25maWctPkNhcmRWYWx1ZXMgPSBjLT5DYXJkVmFsdWVzOworCWNvbmZpZy0+SVJRQXR0cmlidXRlcyA9IGMtPmlycS5BdHRyaWJ1dGVzOworCWNvbmZpZy0+QXNzaWduZWRJUlEgPSBzLT5pcnEuQXNzaWduZWRJUlE7CisJY29uZmlnLT5CYXNlUG9ydDEgPSBjLT5pby5CYXNlUG9ydDE7CisJY29uZmlnLT5OdW1Qb3J0czEgPSBjLT5pby5OdW1Qb3J0czE7CisJY29uZmlnLT5BdHRyaWJ1dGVzMSA9IGMtPmlvLkF0dHJpYnV0ZXMxOworCWNvbmZpZy0+QmFzZVBvcnQyID0gYy0+aW8uQmFzZVBvcnQyOworCWNvbmZpZy0+TnVtUG9ydHMyID0gYy0+aW8uTnVtUG9ydHMyOworCWNvbmZpZy0+QXR0cmlidXRlczIgPSBjLT5pby5BdHRyaWJ1dGVzMjsKKwljb25maWctPklPQWRkckxpbmVzID0gYy0+aW8uSU9BZGRyTGluZXM7CisKKwlyZXR1cm4gMDsKK30gLyogcGNjYXJkX2dldF9jb25maWd1cmF0aW9uX2luZm8gKi8KKworCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIAogICAgIFRoZXNlIG1hbmFnZSBhIHJpbmcgYnVmZmVyIG9mIGV2ZW50cyBwZW5kaW5nIGZvciBvbmUgdXNlciBwcm9jZXNzCkBAIC03NjQsNyArODM1LDcgQEAKICAgICBjYXNlIERTX0dFVF9DT05GSUdVUkFUSU9OX0lORk86CiAJaWYgKGJ1Zi0+Y29uZmlnLkZ1bmN0aW9uICYmCiAJICAgKGJ1Zi0+Y29uZmlnLkZ1bmN0aW9uID49IHMtPmZ1bmN0aW9ucykpCi0JICAgIHJldCA9IENTX0JBRF9BUkdTOworCSAgICByZXQgPSAtRUlOVkFMOwogCWVsc2UgewogCSAgICBzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYgPSBnZXRfcGNtY2lhX2RldmljZShzLCBidWYtPmNvbmZpZy5GdW5jdGlvbik7CiAJICAgIHJldCA9IHBjY2FyZF9nZXRfY29uZmlndXJhdGlvbl9pbmZvKHMsIHBfZGV2LCAmYnVmLT5jb25maWcpOwpAQCAtNzg3LDE1ICs4NTgsMTUgQEAKIAlicmVhazsKICAgICBjYXNlIERTX1BBUlNFX1RVUExFOgogCWJ1Zi0+dHVwbGUuVHVwbGVEYXRhID0gYnVmLT50dXBsZV9wYXJzZS5kYXRhOwotCXJldCA9IHBjY2FyZF9wYXJzZV90dXBsZSgmYnVmLT50dXBsZSwgJmJ1Zi0+dHVwbGVfcGFyc2UucGFyc2UpOworCXJldCA9IHBjbWNpYV9wYXJzZV90dXBsZSgmYnVmLT50dXBsZSwgJmJ1Zi0+dHVwbGVfcGFyc2UucGFyc2UpOwogCWJyZWFrOwogICAgIGNhc2UgRFNfUkVTRVRfQ0FSRDoKLQlyZXQgPSBwY2NhcmRfcmVzZXRfY2FyZChzKTsKKwlyZXQgPSBwY21jaWFfcmVzZXRfY2FyZChzKTsKIAlicmVhazsKICAgICBjYXNlIERTX0dFVF9TVEFUVVM6CiAJICAgIGlmIChidWYtPnN0YXR1cy5GdW5jdGlvbiAmJgogCQkoYnVmLT5zdGF0dXMuRnVuY3Rpb24gPj0gcy0+ZnVuY3Rpb25zKSkKLQkJICAgIHJldCA9IENTX0JBRF9BUkdTOworCQkgICAgcmV0ID0gLUVJTlZBTDsKIAkgICAgZWxzZSB7CiAJCSAgICBzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYgPSBnZXRfcGNtY2lhX2RldmljZShzLCBidWYtPnN0YXR1cy5GdW5jdGlvbik7CiAJCSAgICByZXQgPSBwY2NhcmRfZ2V0X3N0YXR1cyhzLCBwX2RldiwgJmJ1Zi0+c3RhdHVzKTsKQEAgLTgyNiw3ICs4OTcsNyBAQAogCSAgICBnb3RvIGZyZWVfb3V0OwogCX0KIAotCXJldCA9IENTX0JBRF9BUkdTOworCXJldCA9IC1FSU5WQUw7CiAKIAlpZiAoIShidWYtPmNvbmZfcmVnLkZ1bmN0aW9uICYmCiAJICAgICAoYnVmLT5jb25mX3JlZy5GdW5jdGlvbiA+PSBzLT5mdW5jdGlvbnMpKSkgewpAQCAtODY3LDcgKzkzOCw3IEBACiAJCQkgICAmYnVmLT53aW5faW5mby5tYXApOwogCWJyZWFrOwogICAgIGNhc2UgRFNfUkVQTEFDRV9DSVM6Ci0JcmV0ID0gcGNtY2lhX3JlcGxhY2VfY2lzKHMsICZidWYtPmNpc2R1bXApOworCXJldCA9IHBjbWNpYV9yZXBsYWNlX2NpcyhzLCBidWYtPmNpc2R1bXAuRGF0YSwgYnVmLT5jaXNkdW1wLkxlbmd0aCk7CiAJYnJlYWs7CiAgICAgY2FzZSBEU19CSU5EX1JFUVVFU1Q6CiAJaWYgKCFjYXBhYmxlKENBUF9TWVNfQURNSU4pKSB7CkBAIC04ODksMjIgKzk2MCwxOSBAQAogCWVyciA9IC1FSU5WQUw7CiAgICAgfQogCi0gICAgaWYgKChlcnIgPT0gMCkgJiYgKHJldCAhPSBDU19TVUNDRVNTKSkgeworICAgIGlmICgoZXJyID09IDApICYmIChyZXQgIT0gMCkpIHsKIAlkc19kYmcoMiwgImRzX2lvY3RsOiByZXQgPSAlZFxuIiwgcmV0KTsKIAlzd2l0Y2ggKHJldCkgewotCWNhc2UgQ1NfQkFEX1NPQ0tFVDogY2FzZSBDU19OT19DQVJEOgotCSAgICBlcnIgPSAtRU5PREVWOyBicmVhazsKLQljYXNlIENTX0JBRF9BUkdTOiBjYXNlIENTX0JBRF9BVFRSSUJVVEU6IGNhc2UgQ1NfQkFEX0lSUToKLQljYXNlIENTX0JBRF9UVVBMRToKLQkgICAgZXJyID0gLUVJTlZBTDsgYnJlYWs7Ci0JY2FzZSBDU19JTl9VU0U6Ci0JICAgIGVyciA9IC1FQlVTWTsgYnJlYWs7Ci0JY2FzZSBDU19PVVRfT0ZfUkVTT1VSQ0U6CisJY2FzZSAtRU5PREVWOgorCWNhc2UgLUVJTlZBTDoKKwljYXNlIC1FQlVTWToKKwljYXNlIC1FTk9TWVM6CisJICAgIGVyciA9IHJldDsKKwkgICAgYnJlYWs7CisJY2FzZSAtRU5PTUVNOgogCSAgICBlcnIgPSAtRU5PU1BDOyBicmVhazsKLQljYXNlIENTX05PX01PUkVfSVRFTVM6CisJY2FzZSAtRU5PU1BDOgogCSAgICBlcnIgPSAtRU5PREFUQTsgYnJlYWs7Ci0JY2FzZSBDU19VTlNVUFBPUlRFRF9GVU5DVElPTjoKLQkgICAgZXJyID0gLUVOT1NZUzsgYnJlYWs7CiAJZGVmYXVsdDoKIAkgICAgZXJyID0gLUVJTzsgYnJlYWs7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvcGNtY2lhX3Jlc291cmNlLmMgYi9kcml2ZXJzL3BjbWNpYS9wY21jaWFfcmVzb3VyY2UuYwppbmRleCA0ODg0YTE4Li5hZmVhMmIyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9wY21jaWFfcmVzb3VyY2UuYworKysgYi9kcml2ZXJzL3BjbWNpYS9wY21jaWFfcmVzb3VyY2UuYwpAQCAtMjksNyArMjksNiBAQAogI2luY2x1ZGUgPHBjbWNpYS9kcy5oPgogCiAjaW5jbHVkZSAiY3NfaW50ZXJuYWwuaCIKLSNpbmNsdWRlICJkc19pbnRlcm5hbC5oIgogCiAKIC8qIEFjY2VzcyBzcGVlZCBmb3IgSU8gd2luZG93cyAqLwpAQCAtNDQsMTYgKzQzLDE3IEBACiAjZW5kaWYKIAogCi0jaWZkZWYgREVCVUcKKyNpZmRlZiBDT05GSUdfUENNQ0lBX0RFQlVHCiBleHRlcm4gaW50IGRzX3BjX2RlYnVnOwogCiAjZGVmaW5lIGRzX2RiZyhza3QsIGx2bCwgZm10LCBhcmcuLi4pIGRvIHsJCQlcCiAJaWYgKGRzX3BjX2RlYnVnID49IGx2bCkJCQkJCVwKLQkJcHJpbnRrKEtFUk5fREVCVUcgInBjbWNpYV9yZXNvdXJjZTogJXM6ICIgZm10LAlcCi0JCQljc19zb2NrZXRfbmFtZShza3QpICwgIyMgYXJnKTsJCVwKKwkJZGV2X3ByaW50ayhLRVJOX0RFQlVHLCAmc2t0LT5kZXYsCQlcCisJCQkgICAicGNtY2lhX3Jlc291cmNlOiAiIGZtdCwJCVwKKwkJCSAgICMjIGFyZyk7CQkJCVwKIH0gd2hpbGUgKDApCiAjZWxzZQotI2RlZmluZSBkc19kYmcobHZsLCBmbXQsIGFyZy4uLikgZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSBkc19kYmcoc2t0LCBsdmwsIGZtdCwgYXJnLi4uKSBkbyB7IH0gd2hpbGUgKDApCiAjZW5kaWYKIAogCkBAIC0xNjgsMTMgKzE2OCwxMyBAQAogCXVfY2hhciB2YWw7CiAKIAlpZiAoIXBfZGV2IHx8ICFwX2Rldi0+ZnVuY3Rpb25fY29uZmlnKQotCQlyZXR1cm4gQ1NfTk9fQ0FSRDsKKwkJcmV0dXJuIC1FSU5WQUw7CiAKIAlzID0gcF9kZXYtPnNvY2tldDsKIAljID0gcF9kZXYtPmZ1bmN0aW9uX2NvbmZpZzsKIAogCWlmICghKGMtPnN0YXRlICYgQ09ORklHX0xPQ0tFRCkpCi0JCXJldHVybiBDU19DT05GSUdVUkFUSU9OX0xPQ0tFRDsKKwkJcmV0dXJuIC1FQUNDRVM7CiAKIAlhZGRyID0gKGMtPkNvbmZpZ0Jhc2UgKyByZWctPk9mZnNldCkgPj4gMTsKIApAQCAtMTg4LDkzICsxODgsMTQgQEAKIAkJcGNtY2lhX3dyaXRlX2Npc19tZW0ocywgMSwgYWRkciwgMSwgJnZhbCk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCXJldHVybiBDU19CQURfQVJHUzsKKwkJcmV0dXJuIC1FSU5WQUw7CiAJCWJyZWFrOwogCX0KLQlyZXR1cm4gQ1NfU1VDQ0VTUzsKKwlyZXR1cm4gMDsKIH0gLyogcGNtY2lhX2FjY2Vzc19jb25maWd1cmF0aW9uX3JlZ2lzdGVyICovCiBFWFBPUlRfU1lNQk9MKHBjbWNpYV9hY2Nlc3NfY29uZmlndXJhdGlvbl9yZWdpc3Rlcik7CiAKIAotaW50IHBjY2FyZF9nZXRfY29uZmlndXJhdGlvbl9pbmZvKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzLAotCQkJCSAgc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2LAotCQkJCSAgY29uZmlnX2luZm9fdCAqY29uZmlnKQotewotCWNvbmZpZ190ICpjOwotCi0JaWYgKCEocy0+c3RhdGUgJiBTT0NLRVRfUFJFU0VOVCkpCi0JCXJldHVybiBDU19OT19DQVJEOwotCi0KLSNpZmRlZiBDT05GSUdfQ0FSREJVUwotCWlmIChzLT5zdGF0ZSAmIFNPQ0tFVF9DQVJEQlVTKSB7Ci0JCW1lbXNldChjb25maWcsIDAsIHNpemVvZihjb25maWdfaW5mb190KSk7Ci0JCWNvbmZpZy0+VmNjID0gcy0+c29ja2V0LlZjYzsKLQkJY29uZmlnLT5WcHAxID0gY29uZmlnLT5WcHAyID0gcy0+c29ja2V0LlZwcDsKLQkJY29uZmlnLT5PcHRpb24gPSBzLT5jYl9kZXYtPnN1Ym9yZGluYXRlLT5udW1iZXI7Ci0JCWlmIChzLT5zdGF0ZSAmIFNPQ0tFVF9DQVJEQlVTX0NPTkZJRykgewotCQkJY29uZmlnLT5BdHRyaWJ1dGVzID0gQ09ORl9WQUxJRF9DTElFTlQ7Ci0JCQljb25maWctPkludFR5cGUgPSBJTlRfQ0FSREJVUzsKLQkJCWNvbmZpZy0+QXNzaWduZWRJUlEgPSBzLT5pcnEuQXNzaWduZWRJUlE7Ci0JCQlpZiAoY29uZmlnLT5Bc3NpZ25lZElSUSkKLQkJCQljb25maWctPkF0dHJpYnV0ZXMgfD0gQ09ORl9FTkFCTEVfSVJROwotCQkJaWYgKHMtPmlvWzBdLnJlcykgewotCQkJCWNvbmZpZy0+QmFzZVBvcnQxID0gcy0+aW9bMF0ucmVzLT5zdGFydDsKLQkJCQljb25maWctPk51bVBvcnRzMSA9IHMtPmlvWzBdLnJlcy0+ZW5kIC0gY29uZmlnLT5CYXNlUG9ydDEgKyAxOwotCQkJfQotCQl9Ci0JCXJldHVybiBDU19TVUNDRVNTOwotCX0KLSNlbmRpZgotCi0JaWYgKHBfZGV2KSB7Ci0JCWMgPSBwX2Rldi0+ZnVuY3Rpb25fY29uZmlnOwotCQljb25maWctPkZ1bmN0aW9uID0gcF9kZXYtPmZ1bmM7Ci0JfSBlbHNlIHsKLQkJYyA9IE5VTEw7Ci0JCWNvbmZpZy0+RnVuY3Rpb24gPSAwOwotCX0KLQotCWlmICgoYyA9PSBOVUxMKSB8fCAhKGMtPnN0YXRlICYgQ09ORklHX0xPQ0tFRCkpIHsKLQkJY29uZmlnLT5BdHRyaWJ1dGVzID0gMDsKLQkJY29uZmlnLT5WY2MgPSBzLT5zb2NrZXQuVmNjOwotCQljb25maWctPlZwcDEgPSBjb25maWctPlZwcDIgPSBzLT5zb2NrZXQuVnBwOwotCQlyZXR1cm4gQ1NfU1VDQ0VTUzsKLQl9Ci0KLQljb25maWctPkF0dHJpYnV0ZXMgPSBjLT5BdHRyaWJ1dGVzIHwgQ09ORl9WQUxJRF9DTElFTlQ7Ci0JY29uZmlnLT5WY2MgPSBzLT5zb2NrZXQuVmNjOwotCWNvbmZpZy0+VnBwMSA9IGNvbmZpZy0+VnBwMiA9IHMtPnNvY2tldC5WcHA7Ci0JY29uZmlnLT5JbnRUeXBlID0gYy0+SW50VHlwZTsKLQljb25maWctPkNvbmZpZ0Jhc2UgPSBjLT5Db25maWdCYXNlOwotCWNvbmZpZy0+U3RhdHVzID0gYy0+U3RhdHVzOwotCWNvbmZpZy0+UGluID0gYy0+UGluOwotCWNvbmZpZy0+Q29weSA9IGMtPkNvcHk7Ci0JY29uZmlnLT5PcHRpb24gPSBjLT5PcHRpb247Ci0JY29uZmlnLT5FeHRTdGF0dXMgPSBjLT5FeHRTdGF0dXM7Ci0JY29uZmlnLT5QcmVzZW50ID0gY29uZmlnLT5DYXJkVmFsdWVzID0gYy0+Q2FyZFZhbHVlczsKLQljb25maWctPklSUUF0dHJpYnV0ZXMgPSBjLT5pcnEuQXR0cmlidXRlczsKLQljb25maWctPkFzc2lnbmVkSVJRID0gcy0+aXJxLkFzc2lnbmVkSVJROwotCWNvbmZpZy0+QmFzZVBvcnQxID0gYy0+aW8uQmFzZVBvcnQxOwotCWNvbmZpZy0+TnVtUG9ydHMxID0gYy0+aW8uTnVtUG9ydHMxOwotCWNvbmZpZy0+QXR0cmlidXRlczEgPSBjLT5pby5BdHRyaWJ1dGVzMTsKLQljb25maWctPkJhc2VQb3J0MiA9IGMtPmlvLkJhc2VQb3J0MjsKLQljb25maWctPk51bVBvcnRzMiA9IGMtPmlvLk51bVBvcnRzMjsKLQljb25maWctPkF0dHJpYnV0ZXMyID0gYy0+aW8uQXR0cmlidXRlczI7Ci0JY29uZmlnLT5JT0FkZHJMaW5lcyA9IGMtPmlvLklPQWRkckxpbmVzOwotCi0JcmV0dXJuIENTX1NVQ0NFU1M7Ci19IC8qIHBjY2FyZF9nZXRfY29uZmlndXJhdGlvbl9pbmZvICovCi0KLWludCBwY21jaWFfZ2V0X2NvbmZpZ3VyYXRpb25faW5mbyhzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYsCi0JCQkJICBjb25maWdfaW5mb190ICpjb25maWcpCi17Ci0JcmV0dXJuIHBjY2FyZF9nZXRfY29uZmlndXJhdGlvbl9pbmZvKHBfZGV2LT5zb2NrZXQsIHBfZGV2LAotCQkJCQkgICAgIGNvbmZpZyk7Ci19Ci1FWFBPUlRfU1lNQk9MKHBjbWNpYV9nZXRfY29uZmlndXJhdGlvbl9pbmZvKTsKLQotCiAvKiogcGNtY2lhX2dldF93aW5kb3cKICAqLwogaW50IHBjbWNpYV9nZXRfd2luZG93KHN0cnVjdCBwY21jaWFfc29ja2V0ICpzLCB3aW5kb3dfaGFuZGxlX3QgKmhhbmRsZSwKQEAgLTI4NCwxMiArMjA1LDEyIEBACiAJaW50IHc7CiAKIAlpZiAoIXMgfHwgIShzLT5zdGF0ZSAmIFNPQ0tFVF9QUkVTRU5UKSkKLQkJcmV0dXJuIENTX05PX0NBUkQ7CisJCXJldHVybiAtRU5PREVWOwogCWZvciAodyA9IGlkeDsgdyA8IE1BWF9XSU47IHcrKykKIAkJaWYgKHMtPnN0YXRlICYgU09DS0VUX1dJTl9SRVEodykpCiAJCQlicmVhazsKIAlpZiAodyA9PSBNQVhfV0lOKQotCQlyZXR1cm4gQ1NfTk9fTU9SRV9JVEVNUzsKKwkJcmV0dXJuIC1FSU5WQUw7CiAJd2luID0gJnMtPndpblt3XTsKIAlyZXEtPkJhc2UgPSB3aW4tPmN0bC5yZXMtPnN0YXJ0OwogCXJlcS0+U2l6ZSA9IHdpbi0+Y3RsLnJlcy0+ZW5kIC0gd2luLT5jdGwucmVzLT5zdGFydCArIDE7CkBAIC0zMDQsNyArMjI1LDcgQEAKIAlpZiAod2luLT5jdGwuZmxhZ3MgJiBNQVBfVVNFX1dBSVQpCiAJCXJlcS0+QXR0cmlidXRlcyB8PSBXSU5fVVNFX1dBSVQ7CiAJKmhhbmRsZSA9IHdpbjsKLQlyZXR1cm4gQ1NfU1VDQ0VTUzsKKwlyZXR1cm4gMDsKIH0gLyogcGNtY2lhX2dldF93aW5kb3cgKi8KIEVYUE9SVF9TWU1CT0wocGNtY2lhX2dldF93aW5kb3cpOwogCkBAIC0zMTYsMTAgKzIzNywxMCBAQAogaW50IHBjbWNpYV9nZXRfbWVtX3BhZ2Uod2luZG93X2hhbmRsZV90IHdpbiwgbWVtcmVxX3QgKnJlcSkKIHsKIAlpZiAoKHdpbiA9PSBOVUxMKSB8fCAod2luLT5tYWdpYyAhPSBXSU5ET1dfTUFHSUMpKQotCQlyZXR1cm4gQ1NfQkFEX0hBTkRMRTsKKwkJcmV0dXJuIC1FSU5WQUw7CiAJcmVxLT5QYWdlID0gMDsKIAlyZXEtPkNhcmRPZmZzZXQgPSB3aW4tPmN0bC5jYXJkX3N0YXJ0OwotCXJldHVybiBDU19TVUNDRVNTOworCXJldHVybiAwOwogfSAvKiBwY21jaWFfZ2V0X21lbV9wYWdlICovCiBFWFBPUlRfU1lNQk9MKHBjbWNpYV9nZXRfbWVtX3BhZ2UpOwogCkBAIC0zMjgsMTQgKzI0OSwxOCBAQAogewogCXN0cnVjdCBwY21jaWFfc29ja2V0ICpzOwogCWlmICgod2luID09IE5VTEwpIHx8ICh3aW4tPm1hZ2ljICE9IFdJTkRPV19NQUdJQykpCi0JCXJldHVybiBDU19CQURfSEFORExFOwotCWlmIChyZXEtPlBhZ2UgIT0gMCkKLQkJcmV0dXJuIENTX0JBRF9QQUdFOworCQlyZXR1cm4gLUVJTlZBTDsKIAlzID0gd2luLT5zb2NrOworCWlmIChyZXEtPlBhZ2UgIT0gMCkgeworCQlkc19kYmcocywgMCwgImZhaWx1cmU6IHJlcXVlc3RlZCBwYWdlIGlzIHplcm9cbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CiAJd2luLT5jdGwuY2FyZF9zdGFydCA9IHJlcS0+Q2FyZE9mZnNldDsKLQlpZiAocy0+b3BzLT5zZXRfbWVtX21hcChzLCAmd2luLT5jdGwpICE9IDApCi0JCXJldHVybiBDU19CQURfT0ZGU0VUOwotCXJldHVybiBDU19TVUNDRVNTOworCWlmIChzLT5vcHMtPnNldF9tZW1fbWFwKHMsICZ3aW4tPmN0bCkgIT0gMCkgeworCQlkc19kYmcocywgMCwgImZhaWxlZCB0byBzZXRfbWVtX21hcFxuIik7CisJCXJldHVybiAtRUlPOworCX0KKwlyZXR1cm4gMDsKIH0gLyogcGNtY2lhX21hcF9tZW1fcGFnZSAqLwogRVhQT1JUX1NZTUJPTChwY21jaWFfbWFwX21lbV9wYWdlKTsKIApAQCAtMzU0LDkgKzI3OSw5IEBACiAJYyA9IHBfZGV2LT5mdW5jdGlvbl9jb25maWc7CiAKIAlpZiAoIShzLT5zdGF0ZSAmIFNPQ0tFVF9QUkVTRU5UKSkKLQkJcmV0dXJuIENTX05PX0NBUkQ7CisJCXJldHVybiAtRU5PREVWOwogCWlmICghKGMtPnN0YXRlICYgQ09ORklHX0xPQ0tFRCkpCi0JCXJldHVybiBDU19DT05GSUdVUkFUSU9OX0xPQ0tFRDsKKwkJcmV0dXJuIC1FQUNDRVM7CiAKIAlpZiAobW9kLT5BdHRyaWJ1dGVzICYgQ09ORl9JUlFfQ0hBTkdFX1ZBTElEKSB7CiAJCWlmIChtb2QtPkF0dHJpYnV0ZXMgJiBDT05GX0VOQUJMRV9JUlEpIHsKQEAgLTM2OSwyMCArMjk0LDI4IEBACiAJCXMtPm9wcy0+c2V0X3NvY2tldChzLCAmcy0+c29ja2V0KTsKIAl9CiAKLQlpZiAobW9kLT5BdHRyaWJ1dGVzICYgQ09ORl9WQ0NfQ0hBTkdFX1ZBTElEKQotCQlyZXR1cm4gQ1NfQkFEX1ZDQzsKKwlpZiAobW9kLT5BdHRyaWJ1dGVzICYgQ09ORl9WQ0NfQ0hBTkdFX1ZBTElEKSB7CisJCWRzX2RiZyhzLCAwLCAiY2hhbmdpbmcgVmNjIGlzIG5vdCBhbGxvd2VkIGF0IHRoaXMgdGltZVxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KIAogCS8qIFdlIG9ubHkgYWxsb3cgY2hhbmdpbmcgVnBwMSBhbmQgVnBwMiB0byB0aGUgc2FtZSB2YWx1ZSAqLwogCWlmICgobW9kLT5BdHRyaWJ1dGVzICYgQ09ORl9WUFAxX0NIQU5HRV9WQUxJRCkgJiYKIAkgICAgKG1vZC0+QXR0cmlidXRlcyAmIENPTkZfVlBQMl9DSEFOR0VfVkFMSUQpKSB7CiAJCWlmIChtb2QtPlZwcDEgIT0gbW9kLT5WcHAyKQotCQkJcmV0dXJuIENTX0JBRF9WUFA7CisJCQlkc19kYmcocywgMCwgIlZwcDEgYW5kIFZwcDIgbXVzdCBiZSB0aGUgc2FtZVxuIik7CisJCQlyZXR1cm4gLUVJTlZBTDsKIAkJcy0+c29ja2V0LlZwcCA9IG1vZC0+VnBwMTsKLQkJaWYgKHMtPm9wcy0+c2V0X3NvY2tldChzLCAmcy0+c29ja2V0KSkKLQkJCXJldHVybiBDU19CQURfVlBQOworCQlpZiAocy0+b3BzLT5zZXRfc29ja2V0KHMsICZzLT5zb2NrZXQpKSB7CisJCQlkZXZfcHJpbnRrKEtFUk5fV0FSTklORywgJnMtPmRldiwKKwkJCQkgICAiVW5hYmxlIHRvIHNldCBWUFBcbiIpOworCQkJcmV0dXJuIC1FSU87CisJCX0KIAl9IGVsc2UgaWYgKChtb2QtPkF0dHJpYnV0ZXMgJiBDT05GX1ZQUDFfQ0hBTkdFX1ZBTElEKSB8fAotCQkgICAobW9kLT5BdHRyaWJ1dGVzICYgQ09ORl9WUFAyX0NIQU5HRV9WQUxJRCkpCi0JCXJldHVybiBDU19CQURfVlBQOworCQkgICAobW9kLT5BdHRyaWJ1dGVzICYgQ09ORl9WUFAyX0NIQU5HRV9WQUxJRCkpIHsKKwkJZHNfZGJnKHMsIDAsICJjaGFuZ2luZyBWY2MgaXMgbm90IGFsbG93ZWQgYXQgdGhpcyB0aW1lXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQogCiAJaWYgKG1vZC0+QXR0cmlidXRlcyAmIENPTkZfSU9fQ0hBTkdFX1dJRFRIKSB7CiAJCXBjY2FyZF9pb19tYXAgaW9fb2ZmID0geyAwLCAwLCAwLCAwLCAxIH07CkBAIC00MDYsNyArMzM5LDcgQEAKIAkJfQogCX0KIAotCXJldHVybiBDU19TVUNDRVNTOworCXJldHVybiAwOwogfSAvKiBtb2RpZnlfY29uZmlndXJhdGlvbiAqLwogRVhQT1JUX1NZTUJPTChwY21jaWFfbW9kaWZ5X2NvbmZpZ3VyYXRpb24pOwogCkBAIC00NDEsNyArMzc0LDcgQEAKIAkJCX0KIAl9CiAKLQlyZXR1cm4gQ1NfU1VDQ0VTUzsKKwlyZXR1cm4gMDsKIH0gLyogcGNtY2lhX3JlbGVhc2VfY29uZmlndXJhdGlvbiAqLwogCiAKQEAgLTQ1OSw3ICszOTIsNyBAQAogCWNvbmZpZ190ICpjID0gcF9kZXYtPmZ1bmN0aW9uX2NvbmZpZzsKIAogCWlmICghcF9kZXYtPl9pbyApCi0JCXJldHVybiBDU19CQURfSEFORExFOworCQlyZXR1cm4gLUVJTlZBTDsKIAogCXBfZGV2LT5faW8gPSAwOwogCkBAIC00NjcsNyArNDAwLDcgQEAKIAkgICAgKGMtPmlvLk51bVBvcnRzMSAhPSByZXEtPk51bVBvcnRzMSkgfHwKIAkgICAgKGMtPmlvLkJhc2VQb3J0MiAhPSByZXEtPkJhc2VQb3J0MikgfHwKIAkgICAgKGMtPmlvLk51bVBvcnRzMiAhPSByZXEtPk51bVBvcnRzMikpCi0JCXJldHVybiBDU19CQURfQVJHUzsKKwkJcmV0dXJuIC1FSU5WQUw7CiAKIAljLT5zdGF0ZSAmPSB+Q09ORklHX0lPX1JFUTsKIApAQCAtNDc1LDcgKzQwOCw3IEBACiAJaWYgKHJlcS0+TnVtUG9ydHMyKQogCQlyZWxlYXNlX2lvX3NwYWNlKHMsIHJlcS0+QmFzZVBvcnQyLCByZXEtPk51bVBvcnRzMik7CiAKLQlyZXR1cm4gQ1NfU1VDQ0VTUzsKKwlyZXR1cm4gMDsKIH0gLyogcGNtY2lhX3JlbGVhc2VfaW8gKi8KIAogCkBAIC00ODUsMTUgKzQxOCwxOSBAQAogCWNvbmZpZ190ICpjPSBwX2Rldi0+ZnVuY3Rpb25fY29uZmlnOwogCiAJaWYgKCFwX2Rldi0+X2lycSkKLQkJcmV0dXJuIENTX0JBRF9IQU5ETEU7CisJCXJldHVybiAtRUlOVkFMOwogCXBfZGV2LT5faXJxID0gMDsKIAogCWlmIChjLT5zdGF0ZSAmIENPTkZJR19MT0NLRUQpCi0JCXJldHVybiBDU19DT05GSUdVUkFUSU9OX0xPQ0tFRDsKLQlpZiAoYy0+aXJxLkF0dHJpYnV0ZXMgIT0gcmVxLT5BdHRyaWJ1dGVzKQotCQlyZXR1cm4gQ1NfQkFEX0FUVFJJQlVURTsKLQlpZiAocy0+aXJxLkFzc2lnbmVkSVJRICE9IHJlcS0+QXNzaWduZWRJUlEpCi0JCXJldHVybiBDU19CQURfSVJROworCQlyZXR1cm4gLUVBQ0NFUzsKKwlpZiAoYy0+aXJxLkF0dHJpYnV0ZXMgIT0gcmVxLT5BdHRyaWJ1dGVzKSB7CisJCWRzX2RiZyhzLCAwLCAiSVJRIGF0dHJpYnV0ZXMgbXVzdCBtYXRjaCBhc3NpZ25lZCBvbmVzXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCWlmIChzLT5pcnEuQXNzaWduZWRJUlEgIT0gcmVxLT5Bc3NpZ25lZElSUSkgeworCQlkc19kYmcocywgMCwgIklSUSBtdXN0IG1hdGNoIGFzc2lnbmVkIG9uZVxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KIAlpZiAoLS1zLT5pcnEuQ29uZmlnID09IDApIHsKIAkJYy0+c3RhdGUgJj0gfkNPTkZJR19JUlFfUkVROwogCQlzLT5pcnEuQXNzaWduZWRJUlEgPSAwOwpAQCAtNTA3LDcgKzQ0NCw3IEBACiAJcGNtY2lhX3VzZWRfaXJxW3JlcS0+QXNzaWduZWRJUlFdLS07CiAjZW5kaWYKIAotCXJldHVybiBDU19TVUNDRVNTOworCXJldHVybiAwOwogfSAvKiBwY21jaWFfcmVsZWFzZV9pcnEgKi8KIAogCkBAIC01MTYsMTAgKzQ1MywxMCBAQAogCXN0cnVjdCBwY21jaWFfc29ja2V0ICpzOwogCiAJaWYgKCh3aW4gPT0gTlVMTCkgfHwgKHdpbi0+bWFnaWMgIT0gV0lORE9XX01BR0lDKSkKLQkJcmV0dXJuIENTX0JBRF9IQU5ETEU7CisJCXJldHVybiAtRUlOVkFMOwogCXMgPSB3aW4tPnNvY2s7CiAJaWYgKCEod2luLT5oYW5kbGUtPl93aW4gJiBDTElFTlRfV0lOX1JFUSh3aW4tPmluZGV4KSkpCi0JCXJldHVybiBDU19CQURfSEFORExFOworCQlyZXR1cm4gLUVJTlZBTDsKIAogCS8qIFNodXQgZG93biBtZW1vcnkgd2luZG93ICovCiAJd2luLT5jdGwuZmxhZ3MgJj0gfk1BUF9BQ1RJVkU7CkBAIC01MzYsNyArNDczLDcgQEAKIAogCXdpbi0+bWFnaWMgPSAwOwogCi0JcmV0dXJuIENTX1NVQ0NFU1M7CisJcmV0dXJuIDA7CiB9IC8qIHBjbWNpYV9yZWxlYXNlX3dpbmRvdyAqLwogRVhQT1JUX1NZTUJPTChwY21jaWFfcmVsZWFzZV93aW5kb3cpOwogCkBAIC01NTEsMTggKzQ4OCwyMyBAQAogCXBjY2FyZF9pb19tYXAgaW9tYXA7CiAKIAlpZiAoIShzLT5zdGF0ZSAmIFNPQ0tFVF9QUkVTRU5UKSkKLQkJcmV0dXJuIENTX05PX0NBUkQ7CisJCXJldHVybiAtRU5PREVWOzsKIAotCWlmIChyZXEtPkludFR5cGUgJiBJTlRfQ0FSREJVUykKLQkJcmV0dXJuIENTX1VOU1VQUE9SVEVEX01PREU7CisJaWYgKHJlcS0+SW50VHlwZSAmIElOVF9DQVJEQlVTKSB7CisJCWRzX2RiZyhwX2Rldi0+c29ja2V0LCAwLCAiSW50VHlwZSBtYXkgbm90IGJlIElOVF9DQVJEQlVTXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQogCWMgPSBwX2Rldi0+ZnVuY3Rpb25fY29uZmlnOwogCWlmIChjLT5zdGF0ZSAmIENPTkZJR19MT0NLRUQpCi0JCXJldHVybiBDU19DT05GSUdVUkFUSU9OX0xPQ0tFRDsKKwkJcmV0dXJuIC1FQUNDRVM7CiAKIAkvKiBEbyBwb3dlciBjb250cm9sLiAgV2UgZG9uJ3QgYWxsb3cgY2hhbmdlcyBpbiBWY2MuICovCiAJcy0+c29ja2V0LlZwcCA9IHJlcS0+VnBwOwotCWlmIChzLT5vcHMtPnNldF9zb2NrZXQocywgJnMtPnNvY2tldCkpCi0JCXJldHVybiBDU19CQURfVlBQOworCWlmIChzLT5vcHMtPnNldF9zb2NrZXQocywgJnMtPnNvY2tldCkpIHsKKwkJZGV2X3ByaW50ayhLRVJOX1dBUk5JTkcsICZzLT5kZXYsCisJCQkgICAiVW5hYmxlIHRvIHNldCBzb2NrZXQgc3RhdGVcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CiAKIAkvKiBQaWNrIG1lbW9yeSBvciBJL08gY2FyZCwgRE1BIG1vZGUsIGludGVycnVwdCAqLwogCWMtPkludFR5cGUgPSByZXEtPkludFR5cGU7CkBAIC02NTEsNyArNTkzLDcgQEAKIAogCWMtPnN0YXRlIHw9IENPTkZJR19MT0NLRUQ7CiAJcF9kZXYtPl9sb2NrZWQgPSAxOwotCXJldHVybiBDU19TVUNDRVNTOworCXJldHVybiAwOwogfSAvKiBwY21jaWFfcmVxdWVzdF9jb25maWd1cmF0aW9uICovCiBFWFBPUlRfU1lNQk9MKHBjbWNpYV9yZXF1ZXN0X2NvbmZpZ3VyYXRpb24pOwogCkBAIC02NjcsMzcgKzYwOSw0OCBAQAogCWNvbmZpZ190ICpjOwogCiAJaWYgKCEocy0+c3RhdGUgJiBTT0NLRVRfUFJFU0VOVCkpCi0JCXJldHVybiBDU19OT19DQVJEOworCQlyZXR1cm4gLUVOT0RFVjsKIAogCWlmICghcmVxKQotCQlyZXR1cm4gQ1NfVU5TVVBQT1JURURfTU9ERTsKKwkJcmV0dXJuIC1FSU5WQUw7CiAJYyA9IHBfZGV2LT5mdW5jdGlvbl9jb25maWc7CiAJaWYgKGMtPnN0YXRlICYgQ09ORklHX0xPQ0tFRCkKLQkJcmV0dXJuIENTX0NPTkZJR1VSQVRJT05fTE9DS0VEOwotCWlmIChjLT5zdGF0ZSAmIENPTkZJR19JT19SRVEpCi0JCXJldHVybiBDU19JTl9VU0U7Ci0JaWYgKHJlcS0+QXR0cmlidXRlczEgJiAoSU9fU0hBUkVEIHwgSU9fRk9SQ0VfQUxJQVNfQUNDRVNTKSkKLQkJcmV0dXJuIENTX0JBRF9BVFRSSUJVVEU7CisJCXJldHVybiAtRUFDQ0VTOworCWlmIChjLT5zdGF0ZSAmIENPTkZJR19JT19SRVEpIHsKKwkJZHNfZGJnKHMsIDAsICJJTyBhbHJlYWR5IGNvbmZpZ3VyZWRcbiIpOworCQlyZXR1cm4gLUVCVVNZOworCX0KKwlpZiAocmVxLT5BdHRyaWJ1dGVzMSAmIChJT19TSEFSRUQgfCBJT19GT1JDRV9BTElBU19BQ0NFU1MpKSB7CisJCWRzX2RiZyhzLCAwLCAiYmFkIGF0dHJpYnV0ZSBzZXR0aW5nIGZvciBJTyByZWdpb24gMVxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KIAlpZiAoKHJlcS0+TnVtUG9ydHMyID4gMCkgJiYKLQkgICAgKHJlcS0+QXR0cmlidXRlczIgJiAoSU9fU0hBUkVEIHwgSU9fRk9SQ0VfQUxJQVNfQUNDRVNTKSkpCi0JCXJldHVybiBDU19CQURfQVRUUklCVVRFOworCSAgICAocmVxLT5BdHRyaWJ1dGVzMiAmIChJT19TSEFSRUQgfCBJT19GT1JDRV9BTElBU19BQ0NFU1MpKSkgeworCQlkc19kYmcocywgMCwgImJhZCBhdHRyaWJ1dGUgc2V0dGluZyBmb3IgSU8gcmVnaW9uIDJcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CiAKKwlkc19kYmcocywgMSwgInRyeWluZyB0byBhbGxvY2F0ZSByZXNvdXJjZSAxXG4iKTsKIAlpZiAoYWxsb2NfaW9fc3BhY2UocywgcmVxLT5BdHRyaWJ1dGVzMSwgJnJlcS0+QmFzZVBvcnQxLAotCQkJICAgcmVxLT5OdW1Qb3J0czEsIHJlcS0+SU9BZGRyTGluZXMpKQotCQlyZXR1cm4gQ1NfSU5fVVNFOworCQkJICAgcmVxLT5OdW1Qb3J0czEsIHJlcS0+SU9BZGRyTGluZXMpKSB7CisJCWRzX2RiZyhzLCAwLCAiYWxsb2NhdGlvbiBvZiByZXNvdXJjZSAxIGZhaWxlZFxuIik7CisJCXJldHVybiAtRUJVU1k7CisJfQogCiAJaWYgKHJlcS0+TnVtUG9ydHMyKSB7CisJCWRzX2RiZyhzLCAxLCAidHJ5aW5nIHRvIGFsbG9jYXRlIHJlc291cmNlIDJcbiIpOwogCQlpZiAoYWxsb2NfaW9fc3BhY2UocywgcmVxLT5BdHRyaWJ1dGVzMiwgJnJlcS0+QmFzZVBvcnQyLAogCQkJCSAgIHJlcS0+TnVtUG9ydHMyLCByZXEtPklPQWRkckxpbmVzKSkgeworCQkJZHNfZGJnKHMsIDAsICJhbGxvY2F0aW9uIG9mIHJlc291cmNlIDIgZmFpbGVkXG4iKTsKIAkJCXJlbGVhc2VfaW9fc3BhY2UocywgcmVxLT5CYXNlUG9ydDEsIHJlcS0+TnVtUG9ydHMxKTsKLQkJCXJldHVybiBDU19JTl9VU0U7CisJCQlyZXR1cm4gLUVCVVNZOwogCQl9CiAJfQogCiAJYy0+aW8gPSAqcmVxOwogCWMtPnN0YXRlIHw9IENPTkZJR19JT19SRVE7CiAJcF9kZXYtPl9pbyA9IDE7Ci0JcmV0dXJuIENTX1NVQ0NFU1M7CisJcmV0dXJuIDA7CiB9IC8qIHBjbWNpYV9yZXF1ZXN0X2lvICovCiBFWFBPUlRfU1lNQk9MKHBjbWNpYV9yZXF1ZXN0X2lvKTsKIApAQCAtNzIzLDE2ICs2NzYsMTggQEAKIHsKIAlzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcyA9IHBfZGV2LT5zb2NrZXQ7CiAJY29uZmlnX3QgKmM7Ci0JaW50IHJldCA9IENTX0lOX1VTRSwgaXJxID0gMDsKKwlpbnQgcmV0ID0gLUVJTlZBTCwgaXJxID0gMDsKIAlpbnQgdHlwZTsKIAogCWlmICghKHMtPnN0YXRlICYgU09DS0VUX1BSRVNFTlQpKQotCQlyZXR1cm4gQ1NfTk9fQ0FSRDsKKwkJcmV0dXJuIC1FTk9ERVY7CiAJYyA9IHBfZGV2LT5mdW5jdGlvbl9jb25maWc7CiAJaWYgKGMtPnN0YXRlICYgQ09ORklHX0xPQ0tFRCkKLQkJcmV0dXJuIENTX0NPTkZJR1VSQVRJT05fTE9DS0VEOwotCWlmIChjLT5zdGF0ZSAmIENPTkZJR19JUlFfUkVRKQotCQlyZXR1cm4gQ1NfSU5fVVNFOworCQlyZXR1cm4gLUVBQ0NFUzsKKwlpZiAoYy0+c3RhdGUgJiBDT05GSUdfSVJRX1JFUSkgeworCQlkc19kYmcocywgMCwgIklSUSBhbHJlYWR5IGNvbmZpZ3VyZWRcbiIpOworCQlyZXR1cm4gLUVCVVNZOworCX0KIAogCS8qIERlY2lkZSB3aGF0IHR5cGUgb2YgaW50ZXJydXB0IHdlIGFyZSByZWdpc3RlcmluZyAqLwogCXR5cGUgPSAwOwpAQCAtNzk1LDE1ICs3NTAsMTkgQEAKIAl9CiAKIAlpZiAocmV0ICYmIChyZXEtPkF0dHJpYnV0ZXMgJiBJUlFfSEFORExFX1BSRVNFTlQpKSB7Ci0JCWlmIChyZXF1ZXN0X2lycShpcnEsIHJlcS0+SGFuZGxlciwgdHlwZSwgIHBfZGV2LT5kZXZuYW1lLCByZXEtPkluc3RhbmNlKSkKLQkJCXJldHVybiBDU19JTl9VU0U7CisJCXJldCA9IHJlcXVlc3RfaXJxKGlycSwgcmVxLT5IYW5kbGVyLCB0eXBlLAorCQkJCSAgcF9kZXYtPmRldm5hbWUsIHJlcS0+SW5zdGFuY2UpOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKIAl9CiAKIAkvKiBNYWtlIHN1cmUgdGhlIGZhY3QgdGhlIHJlcXVlc3QgdHlwZSB3YXMgb3ZlcnJpZGRlbiBpcyBwYXNzZWQgYmFjayAqLwogCWlmICh0eXBlID09IElSUUZfU0hBUkVEICYmICEocmVxLT5BdHRyaWJ1dGVzICYgSVJRX1RZUEVfRFlOQU1JQ19TSEFSSU5HKSkgewogCQlyZXEtPkF0dHJpYnV0ZXMgfD0gSVJRX1RZUEVfRFlOQU1JQ19TSEFSSU5HOwotCQlwcmludGsoS0VSTl9XQVJOSU5HICJwY21jaWE6IHJlcXVlc3QgZm9yIGV4Y2x1c2l2ZSBJUlEgY291bGQgbm90IGJlIGZ1bGZpbGxlZC5cbiIpOwotCQlwcmludGsoS0VSTl9XQVJOSU5HICJwY21jaWE6IHRoZSBkcml2ZXIgbmVlZHMgdXBkYXRpbmcgdG8gc3VwcG9ydGVkIHNoYXJlZCBJUlEgbGluZXMuXG4iKTsKKwkJZGV2X3ByaW50ayhLRVJOX1dBUk5JTkcsICZwX2Rldi0+ZGV2LCAicGNtY2lhOiAiCisJCQkicmVxdWVzdCBmb3IgZXhjbHVzaXZlIElSUSBjb3VsZCBub3QgYmUgZnVsZmlsbGVkLlxuIik7CisJCWRldl9wcmludGsoS0VSTl9XQVJOSU5HLCAmcF9kZXYtPmRldiwgInBjbWNpYTogdGhlIGRyaXZlciAiCisJCQkibmVlZHMgdXBkYXRpbmcgdG8gc3VwcG9ydGVkIHNoYXJlZCBJUlEgbGluZXMuXG4iKTsKIAl9CiAJYy0+aXJxLkF0dHJpYnV0ZXMgPSByZXEtPkF0dHJpYnV0ZXM7CiAJcy0+aXJxLkFzc2lnbmVkSVJRID0gcmVxLT5Bc3NpZ25lZElSUSA9IGlycTsKQEAgLTgxNiw3ICs3NzUsNyBAQAogCXBjbWNpYV91c2VkX2lycVtpcnFdKys7CiAjZW5kaWYKIAotCXJldHVybiBDU19TVUNDRVNTOworCXJldHVybiAwOwogfSAvKiBwY21jaWFfcmVxdWVzdF9pcnEgKi8KIEVYUE9SVF9TWU1CT0wocGNtY2lhX3JlcXVlc3RfaXJxKTsKIApAQCAtODM0LDkgKzc5MywxMSBAQAogCWludCB3OwogCiAJaWYgKCEocy0+c3RhdGUgJiBTT0NLRVRfUFJFU0VOVCkpCi0JCXJldHVybiBDU19OT19DQVJEOwotCWlmIChyZXEtPkF0dHJpYnV0ZXMgJiAoV0lOX1BBR0VEIHwgV0lOX1NIQVJFRCkpCi0JCXJldHVybiBDU19CQURfQVRUUklCVVRFOworCQlyZXR1cm4gLUVOT0RFVjsKKwlpZiAocmVxLT5BdHRyaWJ1dGVzICYgKFdJTl9QQUdFRCB8IFdJTl9TSEFSRUQpKSB7CisJCWRzX2RiZyhzLCAwLCAiYmFkIGF0dHJpYnV0ZSBzZXR0aW5nIGZvciBpb21lbSByZWdpb25cbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CiAKIAkvKiBXaW5kb3cgc2l6ZSBkZWZhdWx0cyB0byBzbWFsbGVzdCBhdmFpbGFibGUgKi8KIAlpZiAocmVxLT5TaXplID09IDApCkBAIC04NDQsMTkgKzgwNSwyNSBAQAogCWFsaWduID0gKCgocy0+ZmVhdHVyZXMgJiBTU19DQVBfTUVNX0FMSUdOKSB8fAogCQkgIChyZXEtPkF0dHJpYnV0ZXMgJiBXSU5fU1RSSUNUX0FMSUdOKSkgPwogCQkgcmVxLT5TaXplIDogcy0+bWFwX3NpemUpOwotCWlmIChyZXEtPlNpemUgJiAocy0+bWFwX3NpemUtMSkpCi0JCXJldHVybiBDU19CQURfU0laRTsKKwlpZiAocmVxLT5TaXplICYgKHMtPm1hcF9zaXplLTEpKSB7CisJCWRzX2RiZyhzLCAwLCAiaW52YWxpZCBtYXAgc2l6ZVxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KIAlpZiAoKHJlcS0+QmFzZSAmJiAocy0+ZmVhdHVyZXMgJiBTU19DQVBfU1RBVElDX01BUCkpIHx8Ci0JICAgIChyZXEtPkJhc2UgJiAoYWxpZ24tMSkpKQotCQlyZXR1cm4gQ1NfQkFEX0JBU0U7CisJICAgIChyZXEtPkJhc2UgJiAoYWxpZ24tMSkpKSB7CisJCWRzX2RiZyhzLCAwLCAiaW52YWxpZCBiYXNlIGFkZHJlc3NcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CiAJaWYgKHJlcS0+QmFzZSkKIAkJYWxpZ24gPSAwOwogCiAJLyogQWxsb2NhdGUgc3lzdGVtIG1lbW9yeSB3aW5kb3cgKi8KIAlmb3IgKHcgPSAwOyB3IDwgTUFYX1dJTjsgdysrKQogCQlpZiAoIShzLT5zdGF0ZSAmIFNPQ0tFVF9XSU5fUkVRKHcpKSkgYnJlYWs7Ci0JaWYgKHcgPT0gTUFYX1dJTikKLQkJcmV0dXJuIENTX09VVF9PRl9SRVNPVVJDRTsKKwlpZiAodyA9PSBNQVhfV0lOKSB7CisJCWRzX2RiZyhzLCAwLCAiYWxsIHdpbmRvd3MgYXJlIHVzZWQgYWxyZWFkeVxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KIAogCXdpbiA9ICZzLT53aW5bd107CiAJd2luLT5tYWdpYyA9IFdJTkRPV19NQUdJQzsKQEAgLTg2Nyw4ICs4MzQsMTAgQEAKIAlpZiAoIShzLT5mZWF0dXJlcyAmIFNTX0NBUF9TVEFUSUNfTUFQKSkgewogCQl3aW4tPmN0bC5yZXMgPSBwY21jaWFfZmluZF9tZW1fcmVnaW9uKHJlcS0+QmFzZSwgcmVxLT5TaXplLCBhbGlnbiwKIAkJCQkJCSAgICAgIChyZXEtPkF0dHJpYnV0ZXMgJiBXSU5fTUFQX0JFTE9XXzFNQiksIHMpOwotCQlpZiAoIXdpbi0+Y3RsLnJlcykKLQkJCXJldHVybiBDU19JTl9VU0U7CisJCWlmICghd2luLT5jdGwucmVzKSB7CisJCQlkc19kYmcocywgMCwgImFsbG9jYXRpbmcgbWVtIHJlZ2lvbiBmYWlsZWRcbiIpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KIAl9CiAJKCpwX2RldiktPl93aW4gfD0gQ0xJRU5UX1dJTl9SRVEodyk7CiAKQEAgLTg4NSw4ICs4NTQsMTAgQEAKIAlpZiAocmVxLT5BdHRyaWJ1dGVzICYgV0lOX1VTRV9XQUlUKQogCQl3aW4tPmN0bC5mbGFncyB8PSBNQVBfVVNFX1dBSVQ7CiAJd2luLT5jdGwuY2FyZF9zdGFydCA9IDA7Ci0JaWYgKHMtPm9wcy0+c2V0X21lbV9tYXAocywgJndpbi0+Y3RsKSAhPSAwKQotCQlyZXR1cm4gQ1NfQkFEX0FSR1M7CisJaWYgKHMtPm9wcy0+c2V0X21lbV9tYXAocywgJndpbi0+Y3RsKSAhPSAwKSB7CisJCWRzX2RiZyhzLCAwLCAiZmFpbGVkIHRvIHNldCBtZW1vcnkgbWFwcGluZ1xuIik7CisJCXJldHVybiAtRUlPOworCX0KIAlzLT5zdGF0ZSB8PSBTT0NLRVRfV0lOX1JFUSh3KTsKIAogCS8qIFJldHVybiB3aW5kb3cgaGFuZGxlICovCkBAIC04OTcsNyArODY4LDcgQEAKIAl9CiAJKndoID0gd2luOwogCi0JcmV0dXJuIENTX1NVQ0NFU1M7CisJcmV0dXJuIDA7CiB9IC8qIHBjbWNpYV9yZXF1ZXN0X3dpbmRvdyAqLwogRVhQT1JUX1NZTUJPTChwY21jaWFfcmVxdWVzdF93aW5kb3cpOwogCkBAIC05MDksMyArODgwLDc5IEBACiAJCXBjbWNpYV9yZWxlYXNlX3dpbmRvdyhwX2Rldi0+d2luKTsKIH0KIEVYUE9SVF9TWU1CT0wocGNtY2lhX2Rpc2FibGVfZGV2aWNlKTsKKworCitzdHJ1Y3QgcGNtY2lhX2NmZ19tZW0geworCXR1cGxlX3QgdHVwbGU7CisJY2lzcGFyc2VfdCBwYXJzZTsKKwl1OCBidWZbMjU2XTsKKwljaXN0cGxfY2Z0YWJsZV9lbnRyeV90IGRmbHQ7Cit9OworCisvKioKKyAqIHBjbWNpYV9sb29wX2NvbmZpZygpIC0gbG9vcCBvdmVyIGNvbmZpZ3VyYXRpb24gb3B0aW9ucworICogQHBfZGV2Ogl0aGUgc3RydWN0IHBjbWNpYV9kZXZpY2Ugd2hpY2ggd2UgbmVlZCB0byBsb29wIGZvci4KKyAqIEBjb25mX2NoZWNrOglmdW5jdGlvbiB0byBjYWxsIGZvciBlYWNoIGNvbmZpZ3VyYXRpb24gb3B0aW9uLgorICoJCUl0IGdldHMgcGFzc2VkIHRoZSBzdHJ1Y3QgcGNtY2lhX2RldmljZSwgdGhlIENJUyBkYXRhCisgKgkJZGVzY3JpYmluZyB0aGUgY29uZmlndXJhdGlvbiBvcHRpb24sIGFuZCBwcml2YXRlIGRhdGEKKyAqCQliZWluZyBwYXNzZWQgdG8gcGNtY2lhX2xvb3BfY29uZmlnKCkKKyAqIEBwcml2X2RhdGE6CXByaXZhdGUgZGF0YSB0byBiZSBwYXNzZWQgdG8gdGhlIGNvbmZfY2hlY2sgZnVuY3Rpb24uCisgKgorICogcGNtY2lhX2xvb3BfY29uZmlnKCkgbG9vcHMgb3ZlciBhbGwgY29uZmlndXJhdGlvbiBvcHRpb25zLCBhbmQgY2FsbHMKKyAqIHRoZSBkcml2ZXItc3BlY2lmaWMgY29uZl9jaGVjaygpIGZvciBlYWNoIG9uZSwgY2hlY2tpbmcgd2hldGhlcgorICogaXQgaXMgYSB2YWxpZCBvbmUuCisgKi8KK2ludCBwY21jaWFfbG9vcF9jb25maWcoc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2LAorCQkgICAgICAgaW50CSgqY29uZl9jaGVjaykJKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldiwKKwkJCQkJCSBjaXN0cGxfY2Z0YWJsZV9lbnRyeV90ICpjZmcsCisJCQkJCQkgY2lzdHBsX2NmdGFibGVfZW50cnlfdCAqZGZsdCwKKwkJCQkJCSB1bnNpZ25lZCBpbnQgdmNjLAorCQkJCQkJIHZvaWQgKnByaXZfZGF0YSksCisJCSAgICAgICB2b2lkICpwcml2X2RhdGEpCit7CisJc3RydWN0IHBjbWNpYV9jZmdfbWVtICpjZmdfbWVtOworCisJdHVwbGVfdCAqdHVwbGU7CisJaW50IHJldCA9IC1FTk9ERVY7CisJdW5zaWduZWQgaW50IHZjYzsKKworCWNmZ19tZW0gPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgcGNtY2lhX2NmZ19tZW0pLCBHRlBfS0VSTkVMKTsKKwlpZiAoY2ZnX21lbSA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCS8qIGdldCB0aGUgY3VycmVudCBWY2Mgc2V0dGluZyAqLworCXZjYyA9IHBfZGV2LT5zb2NrZXQtPnNvY2tldC5WY2M7CisKKwl0dXBsZSA9ICZjZmdfbWVtLT50dXBsZTsKKwl0dXBsZS0+VHVwbGVEYXRhID0gY2ZnX21lbS0+YnVmOworCXR1cGxlLT5UdXBsZURhdGFNYXggPSAyNTU7CisJdHVwbGUtPlR1cGxlT2Zmc2V0ID0gMDsKKwl0dXBsZS0+RGVzaXJlZFR1cGxlID0gQ0lTVFBMX0NGVEFCTEVfRU5UUlk7CisJdHVwbGUtPkF0dHJpYnV0ZXMgPSAwOworCisJcmV0ID0gcGNtY2lhX2dldF9maXJzdF90dXBsZShwX2RldiwgdHVwbGUpOworCXdoaWxlICghcmV0KSB7CisJCWNpc3RwbF9jZnRhYmxlX2VudHJ5X3QgKmNmZyA9ICZjZmdfbWVtLT5wYXJzZS5jZnRhYmxlX2VudHJ5OworCisJCWlmIChwY21jaWFfZ2V0X3R1cGxlX2RhdGEocF9kZXYsIHR1cGxlKSkKKwkJCWdvdG8gbmV4dF9lbnRyeTsKKworCQlpZiAocGNtY2lhX3BhcnNlX3R1cGxlKHR1cGxlLCAmY2ZnX21lbS0+cGFyc2UpKQorCQkJZ290byBuZXh0X2VudHJ5OworCisJCS8qIGRlZmF1bHQgdmFsdWVzICovCisJCXBfZGV2LT5jb25mLkNvbmZpZ0luZGV4ID0gY2ZnLT5pbmRleDsKKwkJaWYgKGNmZy0+ZmxhZ3MgJiBDSVNUUExfQ0ZUQUJMRV9ERUZBVUxUKQorCQkJY2ZnX21lbS0+ZGZsdCA9ICpjZmc7CisKKwkJcmV0ID0gY29uZl9jaGVjayhwX2RldiwgY2ZnLCAmY2ZnX21lbS0+ZGZsdCwgdmNjLCBwcml2X2RhdGEpOworCQlpZiAoIXJldCkKKwkJCWJyZWFrOworCituZXh0X2VudHJ5OgorCQlyZXQgPSBwY21jaWFfZ2V0X25leHRfdHVwbGUocF9kZXYsIHR1cGxlKTsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTChwY21jaWFfbG9vcF9jb25maWcpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvcHhhMnh4X2Jhc2UuYyBiL2RyaXZlcnMvcGNtY2lhL3B4YTJ4eF9iYXNlLmMKaW5kZXggMTNmMWUwZi4uYmI5ZGRiOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvcHhhMnh4X2Jhc2UuYworKysgYi9kcml2ZXJzL3BjbWNpYS9weGEyeHhfYmFzZS5jCkBAIC0zNiw3ICszNiw2IEBACiAjaW5jbHVkZSA8cGNtY2lhL3NzLmg+CiAjaW5jbHVkZSA8cGNtY2lhL2Npc3RwbC5oPgogCi0jaW5jbHVkZSAiY3NfaW50ZXJuYWwuaCIKICNpbmNsdWRlICJzb2NfY29tbW9uLmgiCiAjaW5jbHVkZSAicHhhMnh4X2Jhc2UuaCIKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvcnNyY19ub25zdGF0aWMuYyBiL2RyaXZlcnMvcGNtY2lhL3JzcmNfbm9uc3RhdGljLmMKaW5kZXggMjAzZTU3OS4uMTdmNGVjZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvcnNyY19ub25zdGF0aWMuYworKysgYi9kcml2ZXJzL3BjbWNpYS9yc3JjX25vbnN0YXRpYy5jCkBAIC0xMjIsMTkgKzEyMiwyMiBAQAogCiBzdGF0aWMgaW50IGFkZF9pbnRlcnZhbChzdHJ1Y3QgcmVzb3VyY2VfbWFwICptYXAsIHVfbG9uZyBiYXNlLCB1X2xvbmcgbnVtKQogewotICAgIHN0cnVjdCByZXNvdXJjZV9tYXAgKnAsICpxOworCXN0cnVjdCByZXNvdXJjZV9tYXAgKnAsICpxOwogCi0gICAgZm9yIChwID0gbWFwOyA7IHAgPSBwLT5uZXh0KSB7Ci0JaWYgKChwICE9IG1hcCkgJiYgKHAtPmJhc2UrcC0+bnVtLTEgPj0gYmFzZSkpCi0JICAgIHJldHVybiAtMTsKLQlpZiAoKHAtPm5leHQgPT0gbWFwKSB8fCAocC0+bmV4dC0+YmFzZSA+IGJhc2UrbnVtLTEpKQotCSAgICBicmVhazsKLSAgICB9Ci0gICAgcSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCByZXNvdXJjZV9tYXApLCBHRlBfS0VSTkVMKTsKLSAgICBpZiAoIXEpIHJldHVybiBDU19PVVRfT0ZfUkVTT1VSQ0U7Ci0gICAgcS0+YmFzZSA9IGJhc2U7IHEtPm51bSA9IG51bTsKLSAgICBxLT5uZXh0ID0gcC0+bmV4dDsgcC0+bmV4dCA9IHE7Ci0gICAgcmV0dXJuIENTX1NVQ0NFU1M7CisJZm9yIChwID0gbWFwOyA7IHAgPSBwLT5uZXh0KSB7CisJCWlmICgocCAhPSBtYXApICYmIChwLT5iYXNlK3AtPm51bS0xID49IGJhc2UpKQorCQkJcmV0dXJuIC0xOworCQlpZiAoKHAtPm5leHQgPT0gbWFwKSB8fCAocC0+bmV4dC0+YmFzZSA+IGJhc2UrbnVtLTEpKQorCQkJYnJlYWs7CisJfQorCXEgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgcmVzb3VyY2VfbWFwKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFxKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIm91dCBvZiBtZW1vcnkgdG8gdXBkYXRlIHJlc291cmNlc1xuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwlxLT5iYXNlID0gYmFzZTsgcS0+bnVtID0gbnVtOworCXEtPm5leHQgPSBwLT5uZXh0OyBwLT5uZXh0ID0gcTsKKwlyZXR1cm4gMDsKIH0KIAogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCkBAIC0xNjYsNyArMTY5LDEwIEBACiAJICAgIH0gZWxzZSB7CiAJCS8qIFNwbGl0IHRoZSBibG9jayBpbnRvIHR3byBwaWVjZXMgKi8KIAkJcCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCByZXNvdXJjZV9tYXApLCBHRlBfS0VSTkVMKTsKLQkJaWYgKCFwKSByZXR1cm4gQ1NfT1VUX09GX1JFU09VUkNFOworCQlpZiAoIXApIHsKKwkJICAgIHByaW50ayhLRVJOX1dBUk5JTkcgIm91dCBvZiBtZW1vcnkgdG8gdXBkYXRlIHJlc291cmNlc1xuIik7CisJCSAgICByZXR1cm4gLUVOT01FTTsKKwkJfQogCQlwLT5iYXNlID0gYmFzZStudW07CiAJCXAtPm51bSA9IHEtPmJhc2UrcS0+bnVtIC0gcC0+YmFzZTsKIAkJcS0+bnVtID0gYmFzZSAtIHEtPmJhc2U7CkBAIC0xNzQsNyArMTgwLDcgQEAKIAkgICAgfQogCX0KICAgICB9Ci0gICAgcmV0dXJuIENTX1NVQ0NFU1M7CisgICAgcmV0dXJuIDA7CiB9CiAKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpAQCAtMTk0LDEzICsyMDAsMTQgQEAKICAgICBpbnQgYW55OwogICAgIHVfY2hhciAqYiwgaG9sZSwgbW9zdDsKIAotICAgIHByaW50ayhLRVJOX0lORk8gImNzOiBJTyBwb3J0IHByb2JlICUjeC0lI3g6IiwKLQkgICBiYXNlLCBiYXNlK251bS0xKTsKKyAgICBkZXZfcHJpbnRrKEtFUk5fSU5GTywgJnMtPmRldiwgImNzOiBJTyBwb3J0IHByb2JlICUjeC0lI3g6IiwKKwkgICAgICAgYmFzZSwgYmFzZStudW0tMSk7CiAKICAgICAvKiBGaXJzdCwgd2hhdCBkb2VzIGEgZmxvYXRpbmcgcG9ydCBsb29rIGxpa2U/ICovCiAgICAgYiA9IGt6YWxsb2MoMjU2LCBHRlBfS0VSTkVMKTsKICAgICBpZiAoIWIpIHsKLSAgICAgICAgICAgIHByaW50ayhLRVJOX0VSUiAiZG9faW9fcHJvYmU6IHVuYWJsZSB0byBrbWFsbG9jIDI1NiBieXRlcyIpOworCSAgICBkZXZfcHJpbnRrKEtFUk5fRVJSLCAmcy0+ZGV2LAorCQkgICAiZG9faW9fcHJvYmU6IHVuYWJsZSB0byBrbWFsbG9jIDI1NiBieXRlcyIpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBmb3IgKGkgPSBiYXNlLCBtb3N0ID0gMDsgaSA8IGJhc2UrbnVtOyBpICs9IDgpIHsKQEAgLTM2Niw4ICszNzMsOCBAQAogICAgIHN0cnVjdCBzb2NrZXRfZGF0YSAqc19kYXRhID0gcy0+cmVzb3VyY2VfZGF0YTsKICAgICB1X2xvbmcgaSwgaiwgYmFkLCBmYWlsLCBzdGVwOwogCi0gICAgcHJpbnRrKEtFUk5fSU5GTyAiY3M6IG1lbW9yeSBwcm9iZSAweCUwNmx4LTB4JTA2bHg6IiwKLQkgICBiYXNlLCBiYXNlK251bS0xKTsKKyAgICBkZXZfcHJpbnRrKEtFUk5fSU5GTywgJnMtPmRldiwgImNzOiBtZW1vcnkgcHJvYmUgMHglMDZseC0weCUwNmx4OiIsCisJICAgICAgIGJhc2UsIGJhc2UrbnVtLTEpOwogICAgIGJhZCA9IGZhaWwgPSAwOwogICAgIHN0ZXAgPSAobnVtIDwgMHgyMDAwMCkgPyAweDIwMDAgOiAoKG51bT4+NCkgJiB+MHgxZmZmKTsKICAgICAvKiBkb24ndCBhbGxvdyB0b28gbGFyZ2Ugc3RlcHMgKi8KQEAgLTQzMSw4ICs0MzgsOCBAQAogCWlmIChwcm9iZV9tYXNrICYgTUVNX1BST0JFX0hJR0gpIHsKIAkJaWYgKGludl9wcm9iZShzX2RhdGEtPm1lbV9kYi5uZXh0LCBzKSA+IDApCiAJCQlyZXR1cm4gMDsKLQkJcHJpbnRrKEtFUk5fTk9USUNFICJjczogd2FybmluZzogbm8gaGlnaCBtZW1vcnkgc3BhY2UgIgotCQkgICAgICAgImF2YWlsYWJsZSFcbiIpOworCQlkZXZfcHJpbnRrKEtFUk5fTk9USUNFLCAmcy0+ZGV2LAorCQkJICAgImNzOiB3YXJuaW5nOiBubyBoaWdoIG1lbW9yeSBzcGFjZSBhdmFpbGFibGUhXG4iKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCkBAIC03OTQsMTAgKzgwMSwxMSBAQAogCQlpZiAocmVzLT5mbGFncyAmIElPUkVTT1VSQ0VfSU8pIHsKIAkJCWlmIChyZXMgPT0gJmlvcG9ydF9yZXNvdXJjZSkKIAkJCQljb250aW51ZTsKLQkJCXByaW50ayhLRVJOX0lORk8gInBjbWNpYTogcGFyZW50IFBDSSBicmlkZ2UgSS9PICIKLQkJCQkid2luZG93OiAweCVsbHggLSAweCVsbHhcbiIsCi0JCQkJKHVuc2lnbmVkIGxvbmcgbG9uZylyZXMtPnN0YXJ0LAotCQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpcmVzLT5lbmQpOworCQkJZGV2X3ByaW50ayhLRVJOX0lORk8sICZzLT5jYl9kZXYtPmRldiwKKwkJCQkgICAicGNtY2lhOiBwYXJlbnQgUENJIGJyaWRnZSBJL08gIgorCQkJCSAgICJ3aW5kb3c6IDB4JWxseCAtIDB4JWxseFxuIiwKKwkJCQkgICAodW5zaWduZWQgbG9uZyBsb25nKXJlcy0+c3RhcnQsCisJCQkJICAgKHVuc2lnbmVkIGxvbmcgbG9uZylyZXMtPmVuZCk7CiAJCQlpZiAoIWFkanVzdF9pbyhzLCBBRERfTUFOQUdFRF9SRVNPVVJDRSwgcmVzLT5zdGFydCwgcmVzLT5lbmQpKQogCQkJCWRvbmUgfD0gSU9SRVNPVVJDRV9JTzsKIApAQCAtODA2LDEwICs4MTQsMTEgQEAKIAkJaWYgKHJlcy0+ZmxhZ3MgJiBJT1JFU09VUkNFX01FTSkgewogCQkJaWYgKHJlcyA9PSAmaW9tZW1fcmVzb3VyY2UpCiAJCQkJY29udGludWU7Ci0JCQlwcmludGsoS0VSTl9JTkZPICJwY21jaWE6IHBhcmVudCBQQ0kgYnJpZGdlIE1lbW9yeSAiCi0JCQkJIndpbmRvdzogMHglbGx4IC0gMHglbGx4XG4iLAotCQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpcmVzLT5zdGFydCwKLQkJCQkodW5zaWduZWQgbG9uZyBsb25nKXJlcy0+ZW5kKTsKKwkJCWRldl9wcmludGsoS0VSTl9JTkZPLCAmcy0+Y2JfZGV2LT5kZXYsCisJCQkJICAgInBjbWNpYTogcGFyZW50IFBDSSBicmlkZ2UgTWVtb3J5ICIKKwkJCQkgICAid2luZG93OiAweCVsbHggLSAweCVsbHhcbiIsCisJCQkJICAgKHVuc2lnbmVkIGxvbmcgbG9uZylyZXMtPnN0YXJ0LAorCQkJCSAgICh1bnNpZ25lZCBsb25nIGxvbmcpcmVzLT5lbmQpOwogCQkJaWYgKCFhZGp1c3RfbWVtb3J5KHMsIEFERF9NQU5BR0VEX1JFU09VUkNFLCByZXMtPnN0YXJ0LCByZXMtPmVuZCkpCiAJCQkJZG9uZSB8PSBJT1JFU09VUkNFX01FTTsKIAkJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvc29jX2NvbW1vbi5jIGIvZHJpdmVycy9wY21jaWEvc29jX2NvbW1vbi5jCmluZGV4IGRhMzk3MjEuLmY0OWFjNjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL3NvY19jb21tb24uYworKysgYi9kcml2ZXJzL3BjbWNpYS9zb2NfY29tbW9uLmMKQEAgLTU0LDcgKzU0LDcgQEAKICNpbmNsdWRlIDxtYWNoL3B4YS1yZWdzLmg+CiAjZW5kaWYKIAotI2lmZGVmIERFQlVHCisjaWZkZWYgQ09ORklHX1BDTUNJQV9ERUJVRwogCiBzdGF0aWMgaW50IHBjX2RlYnVnOwogbW9kdWxlX3BhcmFtKHBjX2RlYnVnLCBpbnQsIDA2NDQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvc29jX2NvbW1vbi5oIGIvZHJpdmVycy9wY21jaWEvc29jX2NvbW1vbi5oCmluZGV4IDkxZWY2YTAuLjM4YzY3MzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL3NvY19jb21tb24uaAorKysgYi9kcml2ZXJzL3BjbWNpYS9zb2NfY29tbW9uLmgKQEAgLTE1LDcgKzE1LDYgQEAKICNpbmNsdWRlIDxwY21jaWEvY3MuaD4KICNpbmNsdWRlIDxwY21jaWEvc3MuaD4KICNpbmNsdWRlIDxwY21jaWEvY2lzdHBsLmg+Ci0jaW5jbHVkZSAiY3NfaW50ZXJuYWwuaCIKIAogCiBzdHJ1Y3QgZGV2aWNlOwpAQCAtMTM3LDcgKzEzNiw3IEBACiBleHRlcm4gaW50IHNvY19jb21tb25fZHJ2X3BjbWNpYV9yZW1vdmUoc3RydWN0IGRldmljZSAqZGV2KTsKIAogCi0jaWZkZWYgREVCVUcKKyNpZmRlZiBDT05GSUdfUENNQ0lBX0RFQlVHCiAKIGV4dGVybiB2b2lkIHNvY19wY21jaWFfZGVidWcoc3RydWN0IHNvY19wY21jaWFfc29ja2V0ICpza3QsIGNvbnN0IGNoYXIgKmZ1bmMsCiAJCQkgICAgIGludCBsdmwsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL3NvY2tldF9zeXNmcy5jIGIvZHJpdmVycy9wY21jaWEvc29ja2V0X3N5c2ZzLmMKaW5kZXggMDA2YTI5ZS4uZmY5YTNiYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvc29ja2V0X3N5c2ZzLmMKKysrIGIvZHJpdmVycy9wY21jaWEvc29ja2V0X3N5c2ZzLmMKQEAgLTMxNiwyNyArMzE2LDE4IEBACiAJCQkJY2hhciAqYnVmLCBsb2ZmX3Qgb2ZmLCBzaXplX3QgY291bnQpCiB7CiAJc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMgPSB0b19zb2NrZXQoY29udGFpbmVyX29mKGtvYmosIHN0cnVjdCBkZXZpY2UsIGtvYmopKTsKLQljaXNkdW1wX3QgKmNpczsKIAlpbnQgZXJyb3I7CiAKIAlpZiAob2ZmKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWlmIChjb3VudCA+PSAweDIwMCkKKwlpZiAoY291bnQgPj0gQ0lTVFBMX01BWF9DSVNfU0laRSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlpZiAoIShzLT5zdGF0ZSAmIFNPQ0tFVF9QUkVTRU5UKSkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKLQljaXMgPSBremFsbG9jKHNpemVvZihjaXNkdW1wX3QpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWNpcykKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQljaXMtPkxlbmd0aCA9IGNvdW50ICsgMTsKLQltZW1jcHkoY2lzLT5EYXRhLCBidWYsIGNvdW50KTsKLQotCWVycm9yID0gcGNtY2lhX3JlcGxhY2VfY2lzKHMsIGNpcyk7Ci0Ja2ZyZWUoY2lzKTsKKwllcnJvciA9IHBjbWNpYV9yZXBsYWNlX2NpcyhzLCBidWYsIGNvdW50KTsKIAlpZiAoZXJyb3IpCiAJCXJldHVybiAtRUlPOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS90Y2ljLmMgYi9kcml2ZXJzL3BjbWNpYS90Y2ljLmMKaW5kZXggNTc5MmJkNS4uMmE2MTNlOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvdGNpYy5jCisrKyBiL2RyaXZlcnMvcGNtY2lhL3RjaWMuYwpAQCAtNTUsNyArNTUsNyBAQAogI2luY2x1ZGUgPHBjbWNpYS9zcy5oPgogI2luY2x1ZGUgInRjaWMuaCIKIAotI2lmZGVmIERFQlVHCisjaWZkZWYgQ09ORklHX1BDTUNJQV9ERUJVRwogc3RhdGljIGludCBwY19kZWJ1ZzsKIAogbW9kdWxlX3BhcmFtKHBjX2RlYnVnLCBpbnQsIDA2NDQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvdGkxMTN4LmggYi9kcml2ZXJzL3BjbWNpYS90aTExM3guaAppbmRleCAxMjlkYjdiLi5hYWE3MDIyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS90aTExM3guaAorKysgYi9kcml2ZXJzL3BjbWNpYS90aTExM3guaApAQCAtMzM5LDggKzMzOSw4IEBACiAKIAltZnVuYyA9IG1mdW5jX29sZCA9IGNvbmZpZ19yZWFkbChzb2NrZXQsIFRJMTIyWF9NRlVOQyk7CiAJZGV2Y3RsID0gY29uZmlnX3JlYWRiKHNvY2tldCwgVEkxMTNYX0RFVklDRV9DT05UUk9MKTsKLQlwcmludGsoS0VSTl9JTkZPICJZZW50YSBUSTogc29ja2V0ICVzLCBtZnVuYyAweCUwOHgsIGRldmN0bCAweCUwMnhcbiIsCi0JICAgICAgIHBjaV9uYW1lKHNvY2tldC0+ZGV2KSwgbWZ1bmMsIGRldmN0bCk7CisJZGV2X3ByaW50ayhLRVJOX0lORk8sICZzb2NrZXQtPmRldi0+ZGV2LAorCQkgICAiVEk6IG1mdW5jIDB4JTA4eCwgZGV2Y3RsIDB4JTAyeFxuIiwgbWZ1bmMsIGRldmN0bCk7CiAKIAkvKiBtYWtlIHN1cmUgUENJIGludGVycnVwdHMgYXJlIGVuYWJsZWQgYmVmb3JlIHByb2JpbmcgKi8KIAl0aV9pbml0KHNvY2tldCk7CkBAIC0zNTQsOCArMzU0LDggQEAKIAkgKiBXZSdyZSBoZXJlIHdoaWNoIG1lYW5zIFBDSSBpbnRlcnJ1cHRzIGFyZSBfbm90XyBkZWxpdmVyZWQuIHRyeSB0bwogCSAqIGZpbmQgdGhlIHJpZ2h0IHNldHRpbmcgKGFsbCBzZXJpYWwgb3IgcGFyYWxsZWwpCiAJICovCi0JcHJpbnRrKEtFUk5fSU5GTyAiWWVudGEgVEk6IHNvY2tldCAlcyBwcm9iaW5nIFBDSSBpbnRlcnJ1cHQgZmFpbGVkLCB0cnlpbmcgdG8gZml4XG4iLAotCSAgICAgICBwY2lfbmFtZShzb2NrZXQtPmRldikpOworCWRldl9wcmludGsoS0VSTl9JTkZPLCAmc29ja2V0LT5kZXYtPmRldiwKKwkJICAgIlRJOiBwcm9iaW5nIFBDSSBpbnRlcnJ1cHQgZmFpbGVkLCB0cnlpbmcgdG8gZml4XG4iKTsKIAogCS8qIGZvciBzZXJpYWwgUENJIG1ha2Ugc3VyZSBNRlVOQzMgaXMgc2V0IHRvIElSUVNFUiAqLwogCWlmICgoZGV2Y3RsICYgVEkxMTNYX0RDUl9JTU9ERV9NQVNLKSA9PSBUSTEyWFhfRENSX0lNT0RFX0FMTF9TRVJJQUwpIHsKQEAgLTM3OSw4ICszNzksOCBAQAogCiAJCQkJcGNpX2lycV9zdGF0dXMgPSB5ZW50YV9wcm9iZV9jYl9pcnEoc29ja2V0KTsKIAkJCQlpZiAocGNpX2lycV9zdGF0dXMgPT0gMSkgewotCQkJCQlwcmludGsoS0VSTl9JTkZPICJZZW50YSBUSTogc29ja2V0ICVzIGFsbC1zZXJpYWwgaW50ZXJydXB0cyBva1xuIiwKLQkJCQkJICAgICAgIHBjaV9uYW1lKHNvY2tldC0+ZGV2KSk7CisJCQkJCWRldl9wcmludGsoS0VSTl9JTkZPLCAmc29ja2V0LT5kZXYtPmRldiwKKwkJCQkJICAgICJUSTogYWxsLXNlcmlhbCBpbnRlcnJ1cHRzIG9rXG4iKTsKIAkJCQkJbWZ1bmNfb2xkID0gbWZ1bmM7CiAJCQkJCWdvdG8gb3V0OwogCQkJCX0KQEAgLTM5NSw4ICszOTUsOCBAQAogCQl9CiAKIAkJLyogc2VyaWFsIFBDSSBpbnRlcnJ1cHRzIG5vdCB3b3JraW5nIGZhbGwgYmFjayB0byBwYXJhbGxlbCAqLwotCQlwcmludGsoS0VSTl9JTkZPICJZZW50YSBUSTogc29ja2V0ICVzIGZhbGxpbmcgYmFjayB0byBwYXJhbGxlbCBQQ0kgaW50ZXJydXB0c1xuIiwKLQkJICAgICAgIHBjaV9uYW1lKHNvY2tldC0+ZGV2KSk7CisJCWRldl9wcmludGsoS0VSTl9JTkZPLCAmc29ja2V0LT5kZXYtPmRldiwKKwkJCSAgICJUSTogZmFsbGluZyBiYWNrIHRvIHBhcmFsbGVsIFBDSSBpbnRlcnJ1cHRzXG4iKTsKIAkJZGV2Y3RsICY9IH5USTExM1hfRENSX0lNT0RFX01BU0s7CiAJCWRldmN0bCB8PSBUSTExM1hfRENSX0lNT0RFX1NFUklBTDsgLyogc2VyaWFsIElTQSBjb3VsZCBiZSByaWdodCAqLwogCQljb25maWdfd3JpdGViKHNvY2tldCwgVEkxMTNYX0RFVklDRV9DT05UUk9MLCBkZXZjdGwpOwpAQCAtNDI3LDggKzQyNyw4IEBACiAJcGNpX2lycV9zdGF0dXMgPSB5ZW50YV9wcm9iZV9jYl9pcnEoc29ja2V0KTsKIAlpZiAocGNpX2lycV9zdGF0dXMgPT0gMSkgewogCQltZnVuY19vbGQgPSBtZnVuYzsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiWWVudGEgVEk6IHNvY2tldCAlcyBwYXJhbGxlbCBQQ0kgaW50ZXJydXB0cyBva1xuIiwKLQkJICAgICAgIHBjaV9uYW1lKHNvY2tldC0+ZGV2KSk7CisJCWRldl9wcmludGsoS0VSTl9JTkZPLCAmc29ja2V0LT5kZXYtPmRldiwKKwkJCSAgICJUSTogcGFyYWxsZWwgUENJIGludGVycnVwdHMgb2tcbiIpOwogCX0gZWxzZSB7CiAJCS8qIG5vdCB3b3JraW5nLCBiYWNrIHRvIG9sZCB2YWx1ZSAqLwogCQltZnVuYyA9IG1mdW5jX29sZDsKQEAgLTQ0MCw4ICs0NDAsOSBAQAogb3V0OgogCWlmIChwY2lfaXJxX3N0YXR1cyA8IDEpIHsKIAkJc29ja2V0LT5jYl9pcnEgPSAwOwotCQlwcmludGsoS0VSTl9JTkZPICJZZW50YSBUSTogc29ja2V0ICVzIG5vIFBDSSBpbnRlcnJ1cHRzLiBGaXNoLiBQbGVhc2UgcmVwb3J0LlxuIiwKLQkJICAgICAgIHBjaV9uYW1lKHNvY2tldC0+ZGV2KSk7CisJCWRldl9wcmludGsoS0VSTl9JTkZPLCAmc29ja2V0LT5kZXYtPmRldiwKKwkJCSAgICJZZW50YSBUSTogbm8gUENJIGludGVycnVwdHMuIEZpc2guICIKKwkJCSAgICJQbGVhc2UgcmVwb3J0LlxuIik7CiAJfQogfQogCkBAIC01MTMsOCArNTE0LDkgQEAKIAogCW1mdW5jID0gbWZ1bmNfb2xkID0gY29uZmlnX3JlYWRsKHNvY2tldCwgVEkxMjJYX01GVU5DKTsKIAlkZXZjdGwgPSBjb25maWdfcmVhZGIoc29ja2V0LCBUSTExM1hfREVWSUNFX0NPTlRST0wpOwotCXByaW50ayhLRVJOX0lORk8gIlllbnRhIFRJOiBzb2NrZXQgJXMsIG1mdW5jIDB4JTA4eCwgZGV2Y3RsIDB4JTAyeFxuIiwKLQkgICAgICAgcGNpX25hbWUoc29ja2V0LT5kZXYpLCBtZnVuYywgZGV2Y3RsKTsKKwlkZXZfcHJpbnRrKEtFUk5fSU5GTywgJnNvY2tldC0+ZGV2LT5kZXYsCisJCSAgICJUSTogbWZ1bmMgMHglMDh4LCBkZXZjdGwgMHglMDJ4XG4iLAorCQkgICBtZnVuYywgZGV2Y3RsKTsKIAogCS8qIGlmIElSUXMgYXJlIGNvbmZpZ3VyZWQgYXMgdGllZCwgYWxpZ24gaXJxIG9mIGZ1bmMxIHdpdGggZnVuYzAgKi8KIAlzeXNjdGwgPSBjb25maWdfcmVhZGwoc29ja2V0LCBUSTExM1hfU1lTVEVNX0NPTlRST0wpOwpAQCAtNTMzLDkgKzUzNSw4IEBACiAJICogV2UncmUgaGVyZSB3aGljaCBtZWFucyBQQ0kgaW50ZXJydXB0cyBhcmUgX25vdF8gZGVsaXZlcmVkLiB0cnkgdG8KIAkgKiBmaW5kIHRoZSByaWdodCBzZXR0aW5nCiAJICovCi0JcHJpbnRrKEtFUk5fSU5GTyAiWWVudGEgVEk6IHNvY2tldCAlcyBwcm9iaW5nIFBDSSBpbnRlcnJ1cHQgZmFpbGVkLCB0cnlpbmcgdG8gZml4XG4iLAotCSAgICAgICBwY2lfbmFtZShzb2NrZXQtPmRldikpOwotCisJZGV2X3ByaW50ayhLRVJOX0lORk8sICZzb2NrZXQtPmRldi0+ZGV2LAorCQkgICAiVEk6IHByb2JpbmcgUENJIGludGVycnVwdCBmYWlsZWQsIHRyeWluZyB0byBmaXhcbiIpOwogCiAJLyogaWYgYWxsIHNlcmlhbDogc2V0IElOVFJUSUUsIHByb2JlIGFnYWluICovCiAJaWYgKChkZXZjdGwgJiBUSTExM1hfRENSX0lNT0RFX01BU0spID09IFRJMTJYWF9EQ1JfSU1PREVfQUxMX1NFUklBTCkgewpAQCAtNTQ0LDggKzU0NSw4IEBACiAJCWlmICh0aTEyeHhfdGllX2ludGVycnVwdHMoc29ja2V0LCAmb2xkX2lycSkpIHsKIAkJCXBjaV9pcnFfc3RhdHVzID0geWVudGFfcHJvYmVfY2JfaXJxKHNvY2tldCk7CiAJCQlpZiAocGNpX2lycV9zdGF0dXMgPT0gMSkgewotCQkJCXByaW50ayhLRVJOX0lORk8gIlllbnRhIFRJOiBzb2NrZXQgJXMgYWxsLXNlcmlhbCBpbnRlcnJ1cHRzLCB0aWVkIG9rXG4iLAotCQkJCSAgICAgICBwY2lfbmFtZShzb2NrZXQtPmRldikpOworCQkJCWRldl9wcmludGsoS0VSTl9JTkZPLCAmc29ja2V0LT5kZXYtPmRldiwKKwkJCQkJIlRJOiBhbGwtc2VyaWFsIGludGVycnVwdHMsIHRpZWQgb2tcbiIpOwogCQkJCWdvdG8gb3V0OwogCQkJfQogCkBAIC01ODIsOCArNTgzLDggQEAKIAogCQkJcGNpX2lycV9zdGF0dXMgPSB5ZW50YV9wcm9iZV9jYl9pcnEoc29ja2V0KTsKIAkJCWlmIChwY2lfaXJxX3N0YXR1cyA9PSAxKSB7Ci0JCQkJcHJpbnRrKEtFUk5fSU5GTyAiWWVudGEgVEk6IHNvY2tldCAlcyBwYXJhbGxlbCBQQ0kgaW50ZXJydXB0cyBva1xuIiwKLQkJCQkgICAgICAgcGNpX25hbWUoc29ja2V0LT5kZXYpKTsKKwkJCQlkZXZfcHJpbnRrKEtFUk5fSU5GTywgJnNvY2tldC0+ZGV2LT5kZXYsCisJCQkJCSAgICJUSTogcGFyYWxsZWwgUENJIGludGVycnVwdHMgb2tcbiIpOwogCQkJCWdvdG8gb3V0OwogCQkJfQogCkBAIC01OTMsMTMgKzU5NCwxMyBAQAogCQkJaWYgKHBjaV9pcnFfc3RhdHVzID09IC0xKQogCQkJCWdvdG8gb3V0OwogCQl9Ci0JCQorCiAJCS8qIHN0aWxsIG5vdGhpbmc6IHNldCBJTlRSVElFICovCiAJCWlmICh0aTEyeHhfdGllX2ludGVycnVwdHMoc29ja2V0LCAmb2xkX2lycSkpIHsKIAkJCXBjaV9pcnFfc3RhdHVzID0geWVudGFfcHJvYmVfY2JfaXJxKHNvY2tldCk7CiAJCQlpZiAocGNpX2lycV9zdGF0dXMgPT0gMSkgewotCQkJCXByaW50ayhLRVJOX0lORk8gIlllbnRhIFRJOiBzb2NrZXQgJXMgcGFyYWxsZWwgUENJIGludGVycnVwdHMsIHRpZWQgb2tcbiIsCi0JCQkJICAgICAgIHBjaV9uYW1lKHNvY2tldC0+ZGV2KSk7CisJCQkJZGV2X3ByaW50ayhLRVJOX0lORk8sICZzb2NrZXQtPmRldi0+ZGV2LAorCQkJCSAgICAiVEk6IHBhcmFsbGVsIFBDSSBpbnRlcnJ1cHRzLCB0aWVkIG9rXG4iKTsKIAkJCQlnb3RvIG91dDsKIAkJCX0KIApAQCAtNjEwLDggKzYxMSw4IEBACiBvdXQ6CiAJaWYgKHBjaV9pcnFfc3RhdHVzIDwgMSkgewogCQlzb2NrZXQtPmNiX2lycSA9IDA7Ci0JCXByaW50ayhLRVJOX0lORk8gIlllbnRhIFRJOiBzb2NrZXQgJXMgbm8gUENJIGludGVycnVwdHMuIEZpc2guIFBsZWFzZSByZXBvcnQuXG4iLAotCQkgICAgICAgcGNpX25hbWUoc29ja2V0LT5kZXYpKTsKKwkJZGV2X3ByaW50ayhLRVJOX0lORk8sICZzb2NrZXQtPmRldi0+ZGV2LAorCQkJICAgIlRJOiBubyBQQ0kgaW50ZXJydXB0cy4gRmlzaC4gUGxlYXNlIHJlcG9ydC5cbiIpOwogCX0KIH0KIApAQCAtODE1LDExICs4MTYsMTMgQEAKIAkvKiBtYWtlIHN1cmUgdGhhdCBtZW1vcnkgYnVyc3QgaXMgYWN0aXZlICovCiAJdmFsX29yaWcgPSB2YWwgPSBjb25maWdfcmVhZGwoc29ja2V0LCBUSTExM1hfU1lTVEVNX0NPTlRST0wpOwogCWlmIChkaXNhYmxlX2Nsa3J1biAmJiBQQ0lfRlVOQyhzb2NrZXQtPmRldi0+ZGV2Zm4pID09IDApIHsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiWWVudGE6IERpc2FibGluZyBDTEtSVU4gZmVhdHVyZVxuIik7CisJCWRldl9wcmludGsoS0VSTl9JTkZPLCAmc29ja2V0LT5kZXYtPmRldiwKKwkJCSAgICJEaXNhYmxpbmcgQ0xLUlVOIGZlYXR1cmVcbiIpOwogCQl2YWwgfD0gVEkxMTNYX1NDUl9LRUVQQ0xLOwogCX0KIAlpZiAoISh2YWwgJiBUSTEyMlhfU0NSX01SQlVSU1RVUCkpIHsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiWWVudGE6IEVuYWJsaW5nIGJ1cnN0IG1lbW9yeSByZWFkIHRyYW5zYWN0aW9uc1xuIik7CisJCWRldl9wcmludGsoS0VSTl9JTkZPLCAmc29ja2V0LT5kZXYtPmRldiwKKwkJCSAgICJFbmFibGluZyBidXJzdCBtZW1vcnkgcmVhZCB0cmFuc2FjdGlvbnNcbiIpOwogCQl2YWwgfD0gVEkxMjJYX1NDUl9NUkJVUlNUVVA7CiAJfQogCWlmICh2YWxfb3JpZyAhPSB2YWwpCkBAIC04MzAsMTAgKzgzMywxMiBAQAogCSAqIENTQyBpbnRlcnJ1cHRzIHRvIFBDSSByYXRoZXIgdGhhbiBJTlRWQUwuCiAJICovCiAJdmFsID0gY29uZmlnX3JlYWRiKHNvY2tldCwgVEkxMjUwX0RJQUdOT1NUSUMpOwotCXByaW50ayhLRVJOX0lORk8gIlllbnRhOiBVc2luZyAlcyB0byByb3V0ZSBDU0MgaW50ZXJydXB0cyB0byBQQ0lcbiIsCi0JCSh2YWwgJiBUSTEyNTBfRElBR19QQ0lfQ1NDKSA/ICJDU0NJTlQiIDogIklOVFZBTCIpOwotCXByaW50ayhLRVJOX0lORk8gIlllbnRhOiBSb3V0aW5nIENhcmRCdXMgaW50ZXJydXB0cyB0byAlc1xuIiwKLQkJKHZhbCAmIFRJMTI1MF9ESUFHX1BDSV9JUkVRKSA/ICJQQ0kiIDogIklTQSIpOworCWRldl9wcmludGsoS0VSTl9JTkZPLCAmc29ja2V0LT5kZXYtPmRldiwKKwkJICAgIlVzaW5nICVzIHRvIHJvdXRlIENTQyBpbnRlcnJ1cHRzIHRvIFBDSVxuIiwKKwkJICAgKHZhbCAmIFRJMTI1MF9ESUFHX1BDSV9DU0MpID8gIkNTQ0lOVCIgOiAiSU5UVkFMIik7CisJZGV2X3ByaW50ayhLRVJOX0lORk8sICZzb2NrZXQtPmRldi0+ZGV2LAorCQkgICAiUm91dGluZyBDYXJkQnVzIGludGVycnVwdHMgdG8gJXNcbiIsCisJCSAgICh2YWwgJiBUSTEyNTBfRElBR19QQ0lfSVJFUSkgPyAiUENJIiA6ICJJU0EiKTsKIAogCS8qIGRvIGlycXJvdXRpbmcsIGRlcGVuZGluZyBvbiBmdW5jdGlvbiAqLwogCWlmIChQQ0lfRlVOQyhzb2NrZXQtPmRldi0+ZGV2Zm4pID09IDApCkBAIC04NTgsOCArODYzLDkgQEAKIAkJZGlhZyB8PSBUSTEyNTBfRElBR19QQ0lfQ1NDIHwgVEkxMjUwX0RJQUdfUENJX0lSRVE7CiAKIAlpZiAoZGlhZyAhPSBvbGQpIHsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiWWVudGE6IGFkanVzdGluZyBkaWFnbm9zdGljOiAlMDJ4IC0+ICUwMnhcbiIsCi0JCQlvbGQsIGRpYWcpOworCQlkZXZfcHJpbnRrKEtFUk5fSU5GTywgJnNvY2tldC0+ZGV2LT5kZXYsCisJCQkgICAiYWRqdXN0aW5nIGRpYWdub3N0aWM6ICUwMnggLT4gJTAyeFxuIiwKKwkJCSAgIG9sZCwgZGlhZyk7CiAJCWNvbmZpZ193cml0ZWIoc29ja2V0LCBUSTEyNTBfRElBR05PU1RJQywgZGlhZyk7CiAJfQogCkBAIC05MjQsNyArOTMwLDkgQEAKIAkJLyogZGVmYXVsdCB0byBjbGVhciBUTFRFbmFibGUgYml0LCBvbGQgYmVoYXZpb3VyICovCiAJCXRlc3RfYzkgJj0gfkVORV9URVNUX0M5X1RMVEVOQUJMRTsKIAotCXByaW50ayhLRVJOX0lORk8gInllbnRhIEVuRTogY2hhbmluZyB0ZXN0cmVnaXN0ZXIgMHhDOSwgJTAyeCAtPiAlMDJ4XG4iLCBvbGRfYzksIHRlc3RfYzkpOworCWRldl9wcmludGsoS0VSTl9JTkZPLCAmc29ja2V0LT5kZXYtPmRldiwKKwkJICAgIkVuRTogY2hhbmluZyB0ZXN0cmVnaXN0ZXIgMHhDOSwgJTAyeCAtPiAlMDJ4XG4iLAorCQkgICBvbGRfYzksIHRlc3RfYzkpOwogCWNvbmZpZ193cml0ZWIoc29ja2V0LCBFTkVfVEVTVF9DOSwgdGVzdF9jOSk7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL3ZyYzQxNzFfY2FyZC5jIGIvZHJpdmVycy9wY21jaWEvdnJjNDE3MV9jYXJkLmMKaW5kZXggZWVlMmYxYy4uYjJjNDEyNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvdnJjNDE3MV9jYXJkLmMKKysrIGIvZHJpdmVycy9wY21jaWEvdnJjNDE3MV9jYXJkLmMKQEAgLTYzOSw3ICs2MzksNyBAQAogCQlpbnQgaXJxOwogCQlvcHRpb25zICs9IDQ7CiAJCWlycSA9IHNpbXBsZV9zdHJ0b3VsKG9wdGlvbnMsICZvcHRpb25zLCAwKTsKLQkJaWYgKGlycSA+PSAwICYmIGlycSA8IE5SX0lSUVMpCisJCWlmIChpcnEgPj0gMCAmJiBpcnEgPCBucl9pcnFzKQogCQkJdnJjNDE3MV9pcnEgPSBpcnE7CiAKIAkJaWYgKCpvcHRpb25zICE9ICcsJykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL3llbnRhX3NvY2tldC5jIGIvZHJpdmVycy9wY21jaWEveWVudGFfc29ja2V0LmMKaW5kZXggMGFiMWZiNi4uM2VjZDdjOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEveWVudGFfc29ja2V0LmMKKysrIGIvZHJpdmVycy9wY21jaWEveWVudGFfc29ja2V0LmMKQEAgLTM4LDExICszOCw3IEBACiBtb2R1bGVfcGFyYW0ocHdyX2lycXNfb2ZmLCBib29sLCAwNjQ0KTsKIE1PRFVMRV9QQVJNX0RFU0MocHdyX2lycXNfb2ZmLCAiRm9yY2UgSVJRcyBvZmYgZHVyaW5nIHBvd2VyLW9uIG9mIHNsb3QuIFVzZSBvbmx5IHdoZW4gc2VlaW5nIElSUSBzdG9ybXMhIik7CiAKLSNpZiAwCi0jZGVmaW5lIGRlYnVnKHgsYXJncy4uLikgcHJpbnRrKEtFUk5fREVCVUcgIiVzOiAiIHgsIF9fZnVuY19fICwgIyNhcmdzKQotI2Vsc2UKLSNkZWZpbmUgZGVidWcoeCxhcmdzLi4uKQotI2VuZGlmCisjZGVmaW5lIGRlYnVnKHgsIHMsIGFyZ3MuLi4pIGRldl9kYmcoJnMtPmRldi0+ZGV2LCB4LCAjI2FyZ3MpCiAKIC8qIERvbid0IGFzay4uICovCiAjZGVmaW5lIHRvX2N5Y2xlcyhucykJKChucykvMTIwKQpAQCAtNjksMTMgKzY1LDEzIEBACiBzdGF0aWMgaW5saW5lIHUzMiBjYl9yZWFkbChzdHJ1Y3QgeWVudGFfc29ja2V0ICpzb2NrZXQsIHVuc2lnbmVkIHJlZykKIHsKIAl1MzIgdmFsID0gcmVhZGwoc29ja2V0LT5iYXNlICsgcmVnKTsKLQlkZWJ1ZygiJXAgJTA0eCAlMDh4XG4iLCBzb2NrZXQsIHJlZywgdmFsKTsKKwlkZWJ1ZygiJTA0eCAlMDh4XG4iLCBzb2NrZXQsIHJlZywgdmFsKTsKIAlyZXR1cm4gdmFsOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgY2Jfd3JpdGVsKHN0cnVjdCB5ZW50YV9zb2NrZXQgKnNvY2tldCwgdW5zaWduZWQgcmVnLCB1MzIgdmFsKQogewotCWRlYnVnKCIlcCAlMDR4ICUwOHhcbiIsIHNvY2tldCwgcmVnLCB2YWwpOworCWRlYnVnKCIlMDR4ICUwOHhcbiIsIHNvY2tldCwgcmVnLCB2YWwpOwogCXdyaXRlbCh2YWwsIHNvY2tldC0+YmFzZSArIHJlZyk7CiAJcmVhZGwoc29ja2V0LT5iYXNlICsgcmVnKTsgLyogYXZvaWQgcHJvYmxlbXMgd2l0aCBQQ0kgd3JpdGUgcG9zdGluZyAqLwogfQpAQCAtODQsNyArODAsNyBAQAogewogCXU4IHZhbDsKIAlwY2lfcmVhZF9jb25maWdfYnl0ZShzb2NrZXQtPmRldiwgb2Zmc2V0LCAmdmFsKTsKLQlkZWJ1ZygiJXAgJTA0eCAlMDJ4XG4iLCBzb2NrZXQsIG9mZnNldCwgdmFsKTsKKwlkZWJ1ZygiJTA0eCAlMDJ4XG4iLCBzb2NrZXQsIG9mZnNldCwgdmFsKTsKIAlyZXR1cm4gdmFsOwogfQogCkBAIC05Miw3ICs4OCw3IEBACiB7CiAJdTE2IHZhbDsKIAlwY2lfcmVhZF9jb25maWdfd29yZChzb2NrZXQtPmRldiwgb2Zmc2V0LCAmdmFsKTsKLQlkZWJ1ZygiJXAgJTA0eCAlMDR4XG4iLCBzb2NrZXQsIG9mZnNldCwgdmFsKTsKKwlkZWJ1ZygiJTA0eCAlMDR4XG4iLCBzb2NrZXQsIG9mZnNldCwgdmFsKTsKIAlyZXR1cm4gdmFsOwogfQogCkBAIC0xMDAsMzIgKzk2LDMyIEBACiB7CiAJdTMyIHZhbDsKIAlwY2lfcmVhZF9jb25maWdfZHdvcmQoc29ja2V0LT5kZXYsIG9mZnNldCwgJnZhbCk7Ci0JZGVidWcoIiVwICUwNHggJTA4eFxuIiwgc29ja2V0LCBvZmZzZXQsIHZhbCk7CisJZGVidWcoIiUwNHggJTA4eFxuIiwgc29ja2V0LCBvZmZzZXQsIHZhbCk7CiAJcmV0dXJuIHZhbDsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIGNvbmZpZ193cml0ZWIoc3RydWN0IHllbnRhX3NvY2tldCAqc29ja2V0LCB1bnNpZ25lZCBvZmZzZXQsIHU4IHZhbCkKIHsKLQlkZWJ1ZygiJXAgJTA0eCAlMDJ4XG4iLCBzb2NrZXQsIG9mZnNldCwgdmFsKTsKKwlkZWJ1ZygiJTA0eCAlMDJ4XG4iLCBzb2NrZXQsIG9mZnNldCwgdmFsKTsKIAlwY2lfd3JpdGVfY29uZmlnX2J5dGUoc29ja2V0LT5kZXYsIG9mZnNldCwgdmFsKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIGNvbmZpZ193cml0ZXcoc3RydWN0IHllbnRhX3NvY2tldCAqc29ja2V0LCB1bnNpZ25lZCBvZmZzZXQsIHUxNiB2YWwpCiB7Ci0JZGVidWcoIiVwICUwNHggJTA0eFxuIiwgc29ja2V0LCBvZmZzZXQsIHZhbCk7CisJZGVidWcoIiUwNHggJTA0eFxuIiwgc29ja2V0LCBvZmZzZXQsIHZhbCk7CiAJcGNpX3dyaXRlX2NvbmZpZ193b3JkKHNvY2tldC0+ZGV2LCBvZmZzZXQsIHZhbCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBjb25maWdfd3JpdGVsKHN0cnVjdCB5ZW50YV9zb2NrZXQgKnNvY2tldCwgdW5zaWduZWQgb2Zmc2V0LCB1MzIgdmFsKQogewotCWRlYnVnKCIlcCAlMDR4ICUwOHhcbiIsIHNvY2tldCwgb2Zmc2V0LCB2YWwpOworCWRlYnVnKCIlMDR4ICUwOHhcbiIsIHNvY2tldCwgb2Zmc2V0LCB2YWwpOwogCXBjaV93cml0ZV9jb25maWdfZHdvcmQoc29ja2V0LT5kZXYsIG9mZnNldCwgdmFsKTsKIH0KIAogc3RhdGljIGlubGluZSB1OCBleGNhX3JlYWRiKHN0cnVjdCB5ZW50YV9zb2NrZXQgKnNvY2tldCwgdW5zaWduZWQgcmVnKQogewogCXU4IHZhbCA9IHJlYWRiKHNvY2tldC0+YmFzZSArIDB4ODAwICsgcmVnKTsKLQlkZWJ1ZygiJXAgJTA0eCAlMDJ4XG4iLCBzb2NrZXQsIHJlZywgdmFsKTsKKwlkZWJ1ZygiJTA0eCAlMDJ4XG4iLCBzb2NrZXQsIHJlZywgdmFsKTsKIAlyZXR1cm4gdmFsOwogfQogCkBAIC0xMzQsMjAgKzEzMCwyMCBAQAogCXUxNiB2YWw7CiAJdmFsID0gcmVhZGIoc29ja2V0LT5iYXNlICsgMHg4MDAgKyByZWcpOwogCXZhbCB8PSByZWFkYihzb2NrZXQtPmJhc2UgKyAweDgwMCArIHJlZyArIDEpIDw8IDg7Ci0JZGVidWcoIiVwICUwNHggJTA0eFxuIiwgc29ja2V0LCByZWcsIHZhbCk7CisJZGVidWcoIiUwNHggJTA0eFxuIiwgc29ja2V0LCByZWcsIHZhbCk7CiAJcmV0dXJuIHZhbDsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIGV4Y2Ffd3JpdGViKHN0cnVjdCB5ZW50YV9zb2NrZXQgKnNvY2tldCwgdW5zaWduZWQgcmVnLCB1OCB2YWwpCiB7Ci0JZGVidWcoIiVwICUwNHggJTAyeFxuIiwgc29ja2V0LCByZWcsIHZhbCk7CisJZGVidWcoIiUwNHggJTAyeFxuIiwgc29ja2V0LCByZWcsIHZhbCk7CiAJd3JpdGViKHZhbCwgc29ja2V0LT5iYXNlICsgMHg4MDAgKyByZWcpOwogCXJlYWRiKHNvY2tldC0+YmFzZSArIDB4ODAwICsgcmVnKTsgLyogUENJIHdyaXRlIHBvc3RpbmcuLi4gKi8KIH0KIAogc3RhdGljIHZvaWQgZXhjYV93cml0ZXcoc3RydWN0IHllbnRhX3NvY2tldCAqc29ja2V0LCB1bnNpZ25lZCByZWcsIHUxNiB2YWwpCiB7Ci0JZGVidWcoIiVwICUwNHggJTA0eFxuIiwgc29ja2V0LCByZWcsIHZhbCk7CisJZGVidWcoIiUwNHggJTA0eFxuIiwgc29ja2V0LCByZWcsIHZhbCk7CiAJd3JpdGViKHZhbCwgc29ja2V0LT5iYXNlICsgMHg4MDAgKyByZWcpOwogCXdyaXRlYih2YWwgPj4gOCwgc29ja2V0LT5iYXNlICsgMHg4MDAgKyByZWcgKyAxKTsKIApAQCAtMjA3LDcgKzIwMyw3IEBACiAKIAogCWlmIChzdGF0ZSAmIENCX0NCQ0FSRCkgewotCQl2YWwgfD0gU1NfQ0FSREJVUzsJCisJCXZhbCB8PSBTU19DQVJEQlVTOwogCQl2YWwgfD0gKHN0YXRlICYgQ0JfQ0FSRFNUUykgPyBTU19TVFNDSEcgOiAwOwogCQl2YWwgfD0gKHN0YXRlICYgKENCX0NERVRFQ1QxIHwgQ0JfQ0RFVEVDVDIpKSA/IDAgOiBTU19ERVRFQ1Q7CiAJCXZhbCB8PSAoc3RhdGUgJiBDQl9QV1JDWUNMRSkgPyBTU19QT1dFUk9OIHwgU1NfUkVBRFkgOiAwOwpAQCAtNjUwLDggKzY0NiwxMCBAQAogCQlyb290ID0gcGNpX2ZpbmRfcGFyZW50X3Jlc291cmNlKHNvY2tldC0+ZGV2LCByZXMpOwogCQlpZiAocm9vdCAmJiAocmVxdWVzdF9yZXNvdXJjZShyb290LCByZXMpID09IDApKQogCQkJcmV0dXJuIDA7Ci0JCXByaW50ayhLRVJOX0lORk8gInllbnRhICVzOiBQcmVhc3NpZ25lZCByZXNvdXJjZSAlZCBidXN5IG9yIG5vdCBhdmFpbGFibGUsIHJlY29uZmlndXJpbmcuLi5cbiIsCi0JCQkJcGNpX25hbWUoc29ja2V0LT5kZXYpLCBucik7CisJCWRldl9wcmludGsoS0VSTl9JTkZPLCAmc29ja2V0LT5kZXYtPmRldiwKKwkJCSAgICJQcmVhc3NpZ25lZCByZXNvdXJjZSAlZCBidXN5IG9yIG5vdCBhdmFpbGFibGUsICIKKwkJCSAgICJyZWNvbmZpZ3VyaW5nLi4uXG4iLAorCQkJICAgbnIpOwogCX0KIAogCWlmICh0eXBlICYgSU9SRVNPVVJDRV9JTykgewpAQCAtNjc0LDggKzY3Miw5IEBACiAJCQlyZXR1cm4gMTsKIAl9CiAKLQlwcmludGsoS0VSTl9JTkZPICJ5ZW50YSAlczogbm8gcmVzb3VyY2Ugb2YgdHlwZSAleCBhdmFpbGFibGUsIHRyeWluZyB0byBjb250aW51ZS4uLlxuIiwKLQkgICAgICAgcGNpX25hbWUoc29ja2V0LT5kZXYpLCB0eXBlKTsKKwlkZXZfcHJpbnRrKEtFUk5fSU5GTywgJnNvY2tldC0+ZGV2LT5kZXYsCisJCSAgICJubyByZXNvdXJjZSBvZiB0eXBlICV4IGF2YWlsYWJsZSwgdHJ5aW5nIHRvIGNvbnRpbnVlLi4uXG4iLAorCQkgICB0eXBlKTsKIAlyZXMtPnN0YXJ0ID0gcmVzLT5lbmQgPSByZXMtPmZsYWdzID0gMDsKIAlyZXR1cm4gMDsKIH0KQEAgLTkyMyw3ICs5MjIsOCBAQAogCXNvY2tldC0+cHJvYmVfc3RhdHVzID0gMDsKIAogCWlmIChyZXF1ZXN0X2lycShzb2NrZXQtPmNiX2lycSwgeWVudGFfcHJvYmVfaGFuZGxlciwgSVJRRl9TSEFSRUQsICJ5ZW50YSIsIHNvY2tldCkpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiWWVudGE6IHJlcXVlc3RfaXJxKCkgaW4geWVudGFfcHJvYmVfY2JfaXJxKCkgZmFpbGVkIVxuIik7CisJCWRldl9wcmludGsoS0VSTl9XQVJOSU5HLCAmc29ja2V0LT5kZXYtPmRldiwKKwkJCSAgICJyZXF1ZXN0X2lycSgpIGluIHllbnRhX3Byb2JlX2NiX2lycSgpIGZhaWxlZCFcbiIpOwogCQlyZXR1cm4gLTE7CiAJfQogCkBAIC05NjAsOCArOTYwLDkgQEAKIAllbHNlCiAJCXNvY2tldC0+c29ja2V0LmlycV9tYXNrID0gMDsKIAotCXByaW50ayhLRVJOX0lORk8gIlllbnRhOiBJU0EgSVJRIG1hc2sgMHglMDR4LCBQQ0kgaXJxICVkXG4iLAotCSAgICAgICBzb2NrZXQtPnNvY2tldC5pcnFfbWFzaywgc29ja2V0LT5jYl9pcnEpOworCWRldl9wcmludGsoS0VSTl9JTkZPLCAmc29ja2V0LT5kZXYtPmRldiwKKwkJICAgIklTQSBJUlEgbWFzayAweCUwNHgsIFBDSSBpcnEgJWRcbiIsCisJCSAgIHNvY2tldC0+c29ja2V0LmlycV9tYXNrLCBzb2NrZXQtPmNiX2lycSk7CiB9CiAKIC8qCkBAIC0xMDUxLDggKzEwNTIsOSBAQAogCiAJLyogU2hvdyB0aGF0IHRoZSB3YW50ZWQgc3Vib3JkaW5hdGUgbnVtYmVyIGlzIG5vdCBwb3NzaWJsZTogKi8KIAlpZiAoY2FyZGJ1c19icmlkZ2UtPnN1Ym9yZGluYXRlID4gdXBwZXJfbGltaXQpCi0JCXByaW50ayhLRVJOX1dBUk5JTkcgIlllbnRhOiBVcHBlciBsaW1pdCBmb3IgZml4aW5nIHRoaXMgIgotCQkJImJyaWRnZSdzIHBhcmVudCBicmlkZ2U6ICMlMDJ4XG4iLCB1cHBlcl9saW1pdCk7CisJCWRldl9wcmludGsoS0VSTl9XQVJOSU5HLCAmY2FyZGJ1c19icmlkZ2UtPmRldiwKKwkJCSAgICJVcHBlciBsaW1pdCBmb3IgZml4aW5nIHRoaXMgIgorCQkJICAgImJyaWRnZSdzIHBhcmVudCBicmlkZ2U6ICMlMDJ4XG4iLCB1cHBlcl9saW1pdCk7CiAKIAkvKiBJZiB3ZSBoYXZlIHJvb20gdG8gaW5jcmVhc2UgdGhlIGJyaWRnZSdzIHN1Ym9yZGluYXRlIG51bWJlciwgKi8KIAlpZiAoYnJpZGdlX3RvX2ZpeC0+c3Vib3JkaW5hdGUgPCB1cHBlcl9saW1pdCkgewpAQCAtMTA2MSwxMCArMTA2MywxMSBAQAogCQl1bnNpZ25lZCBjaGFyIHN1Ym9yZGluYXRlX3RvX2Fzc2lnbiA9CiAJCQltaW4oY2FyZGJ1c19icmlkZ2UtPnN1Ym9yZGluYXRlLCB1cHBlcl9saW1pdCk7CiAKLQkJcHJpbnRrKEtFUk5fSU5GTyAiWWVudGE6IFJhaXNpbmcgc3Vib3JkaW5hdGUgYnVzIyBvZiBwYXJlbnQgIgotCQkJImJ1cyAoIyUwMngpIGZyb20gIyUwMnggdG8gIyUwMnhcbiIsCi0JCQlicmlkZ2VfdG9fZml4LT5udW1iZXIsCi0JCQlicmlkZ2VfdG9fZml4LT5zdWJvcmRpbmF0ZSwgc3Vib3JkaW5hdGVfdG9fYXNzaWduKTsKKwkJZGV2X3ByaW50ayhLRVJOX0lORk8sICZicmlkZ2VfdG9fZml4LT5kZXYsCisJCQkgICAiUmFpc2luZyBzdWJvcmRpbmF0ZSBidXMjIG9mIHBhcmVudCAiCisJCQkgICAiYnVzICgjJTAyeCkgZnJvbSAjJTAyeCB0byAjJTAyeFxuIiwKKwkJCSAgIGJyaWRnZV90b19maXgtPm51bWJlciwKKwkJCSAgIGJyaWRnZV90b19maXgtPnN1Ym9yZGluYXRlLCBzdWJvcmRpbmF0ZV90b19hc3NpZ24pOwogCiAJCS8qIFNhdmUgdGhlIG5ldyBzdWJvcmRpbmF0ZSBpbiB0aGUgYnVzIHN0cnVjdCBvZiB0aGUgYnJpZGdlICovCiAJCWJyaWRnZV90b19maXgtPnN1Ym9yZGluYXRlID0gc3Vib3JkaW5hdGVfdG9fYXNzaWduOwpAQCAtMTA5MSw4ICsxMDk0LDggQEAKIAkgKiBCYWlsIG91dCBpZiBzby4KIAkgKi8KIAlpZiAoIWRldi0+c3Vib3JkaW5hdGUpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJZZW50YTogbm8gYnVzIGFzc29jaWF0ZWQgd2l0aCAlcyEgIgotCQkJIih0cnkgJ3BjaT1hc3NpZ24tYnVzc2VzJylcbiIsIHBjaV9uYW1lKGRldikpOworCQlkZXZfcHJpbnRrKEtFUk5fRVJSLCAmZGV2LT5kZXYsICJubyBidXMgYXNzb2NpYXRlZCEgIgorCQkJICAgIih0cnkgJ3BjaT1hc3NpZ24tYnVzc2VzJylcbiIpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKQEAgLTExMjcsNyArMTEzMCw3IEBACiAJCWdvdG8gZGlzYWJsZTsKIAogCWlmICghcGNpX3Jlc291cmNlX3N0YXJ0KGRldiwgMCkpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJObyBjYXJkYnVzIHJlc291cmNlIVxuIik7CisJCWRldl9wcmludGsoS0VSTl9FUlIsICZkZXYtPmRldiwgIk5vIGNhcmRidXMgcmVzb3VyY2UhXG4iKTsKIAkJcmV0ID0gLUVOT0RFVjsKIAkJZ290byByZWxlYXNlOwogCX0KQEAgLTExNDYsOCArMTE0OSw4IEBACiAJICogcmVwb3J0IHRoZSBzdWJzeXN0ZW0gdmVuZG9yIGFuZCBkZXZpY2UgZm9yIGhlbHAgZGVidWdnaW5nCiAJICogdGhlIGlycSBzdHVmZi4uLgogCSAqLwotCXByaW50ayhLRVJOX0lORk8gIlllbnRhOiBDYXJkQnVzIGJyaWRnZSBmb3VuZCBhdCAlcyBbJTA0eDolMDR4XVxuIiwKLQkJcGNpX25hbWUoZGV2KSwgZGV2LT5zdWJzeXN0ZW1fdmVuZG9yLCBkZXYtPnN1YnN5c3RlbV9kZXZpY2UpOworCWRldl9wcmludGsoS0VSTl9JTkZPLCAmZGV2LT5kZXYsICJDYXJkQnVzIGJyaWRnZSBmb3VuZCBbJTA0eDolMDR4XVxuIiwKKwkJICAgZGV2LT5zdWJzeXN0ZW1fdmVuZG9yLCBkZXYtPnN1YnN5c3RlbV9kZXZpY2UpOwogCiAJeWVudGFfY29uZmlnX2luaXQoc29ja2V0KTsKIApAQCAtMTE3OSw4ICsxMTgyLDEyIEBACiAJCXNvY2tldC0+cG9sbF90aW1lci5kYXRhID0gKHVuc2lnbmVkIGxvbmcpc29ja2V0OwogCQlzb2NrZXQtPnBvbGxfdGltZXIuZXhwaXJlcyA9IGppZmZpZXMgKyBIWjsKIAkJYWRkX3RpbWVyKCZzb2NrZXQtPnBvbGxfdGltZXIpOwotCQlwcmludGsoS0VSTl9JTkZPICJZZW50YTogbm8gUENJIElSUSwgQ2FyZEJ1cyBzdXBwb3J0IGRpc2FibGVkIGZvciB0aGlzIHNvY2tldC5cbiIKLQkJICAgICAgIEtFUk5fSU5GTyAiWWVudGE6IGNoZWNrIHlvdXIgQklPUyBDYXJkQnVzLCBCSU9TIElSUSBvciBBQ1BJIHNldHRpbmdzLlxuIik7CisJCWRldl9wcmludGsoS0VSTl9JTkZPLCAmZGV2LT5kZXYsCisJCQkgICAibm8gUENJIElSUSwgQ2FyZEJ1cyBzdXBwb3J0IGRpc2FibGVkIGZvciB0aGlzICIKKwkJCSAgICJzb2NrZXQuXG4iKTsKKwkJZGV2X3ByaW50ayhLRVJOX0lORk8sICZkZXYtPmRldiwKKwkJCSAgICJjaGVjayB5b3VyIEJJT1MgQ2FyZEJ1cywgQklPUyBJUlEgb3IgQUNQSSAiCisJCQkgICAic2V0dGluZ3MuXG4iKTsKIAl9IGVsc2UgewogCQlzb2NrZXQtPnNvY2tldC5mZWF0dXJlcyB8PSBTU19DQVBfQ0FSREJVUzsKIAl9CkBAIC0xMTg4LDcgKzExOTUsOCBAQAogCS8qIEZpZ3VyZSBvdXQgd2hhdCB0aGUgZGFuZyB0aGluZyBjYW4gZG8gZm9yIHRoZSBQQ01DSUEgbGF5ZXIuLi4gKi8KIAl5ZW50YV9pbnRlcnJvZ2F0ZShzb2NrZXQpOwogCXllbnRhX2dldF9zb2NrZXRfY2FwYWJpbGl0aWVzKHNvY2tldCwgaXNhX2ludGVycnVwdHMpOwotCXByaW50ayhLRVJOX0lORk8gIlNvY2tldCBzdGF0dXM6ICUwOHhcbiIsIGNiX3JlYWRsKHNvY2tldCwgQ0JfU09DS0VUX1NUQVRFKSk7CisJZGV2X3ByaW50ayhLRVJOX0lORk8sICZkZXYtPmRldiwKKwkJICAgIlNvY2tldCBzdGF0dXM6ICUwOHhcbiIsIGNiX3JlYWRsKHNvY2tldCwgQ0JfU09DS0VUX1NUQVRFKSk7CiAKIAl5ZW50YV9maXh1cF9wYXJlbnRfYnJpZGdlKGRldi0+c3Vib3JkaW5hdGUpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BucC9iYXNlLmggYi9kcml2ZXJzL3BucC9iYXNlLmgKaW5kZXggOWZkN2JiOS4uM2I4YjlkMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9wbnAvYmFzZS5oCisrKyBiL2RyaXZlcnMvcG5wL2Jhc2UuaApAQCAtNCw2ICs0LDcgQEAKICAqLwogCiBleHRlcm4gc3BpbmxvY2tfdCBwbnBfbG9jazsKK2V4dGVybiBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSBwbnBfaW50ZXJmYWNlX2F0dHJzW107CiB2b2lkICpwbnBfYWxsb2MobG9uZyBzaXplKTsKIAogaW50IHBucF9yZWdpc3Rlcl9wcm90b2NvbChzdHJ1Y3QgcG5wX3Byb3RvY29sICpwcm90b2NvbCk7CkBAIC0xNiw3ICsxNyw2IEBACiAKIGludCBwbnBfYWRkX2RldmljZShzdHJ1Y3QgcG5wX2RldiAqZGV2KTsKIHN0cnVjdCBwbnBfaWQgKnBucF9hZGRfaWQoc3RydWN0IHBucF9kZXYgKmRldiwgY2hhciAqaWQpOwotaW50IHBucF9pbnRlcmZhY2VfYXR0YWNoX2RldmljZShzdHJ1Y3QgcG5wX2RldiAqZGV2KTsKIAogaW50IHBucF9hZGRfY2FyZChzdHJ1Y3QgcG5wX2NhcmQgKmNhcmQpOwogdm9pZCBwbnBfcmVtb3ZlX2NhcmQoc3RydWN0IHBucF9jYXJkICpjYXJkKTsKQEAgLTE0Nyw3ICsxNDcsNyBAQAogdm9pZCBkYmdfcG5wX3Nob3dfcmVzb3VyY2VzKHN0cnVjdCBwbnBfZGV2ICpkZXYsIGNoYXIgKmRlc2MpOwogCiB2b2lkIHBucF9mcmVlX3Jlc291cmNlcyhzdHJ1Y3QgcG5wX2RldiAqZGV2KTsKLWludCBwbnBfcmVzb3VyY2VfdHlwZShzdHJ1Y3QgcmVzb3VyY2UgKnJlcyk7Cit1bnNpZ25lZCBsb25nIHBucF9yZXNvdXJjZV90eXBlKHN0cnVjdCByZXNvdXJjZSAqcmVzKTsKIAogc3RydWN0IHBucF9yZXNvdXJjZSB7CiAJc3RydWN0IGxpc3RfaGVhZCBsaXN0OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wbnAvY29yZS5jIGIvZHJpdmVycy9wbnAvY29yZS5jCmluZGV4IGE0MTE1ODIuLjgxN2ZlNjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcG5wL2NvcmUuYworKysgYi9kcml2ZXJzL3BucC9jb3JlLmMKQEAgLTE1OSwyMSArMTU5LDEzIEBACiAKIGludCBfX3BucF9hZGRfZGV2aWNlKHN0cnVjdCBwbnBfZGV2ICpkZXYpCiB7Ci0JaW50IHJldDsKLQogCXBucF9maXh1cF9kZXZpY2UoZGV2KTsKIAlkZXYtPnN0YXR1cyA9IFBOUF9SRUFEWTsKIAlzcGluX2xvY2soJnBucF9sb2NrKTsKIAlsaXN0X2FkZF90YWlsKCZkZXYtPmdsb2JhbF9saXN0LCAmcG5wX2dsb2JhbCk7CiAJbGlzdF9hZGRfdGFpbCgmZGV2LT5wcm90b2NvbF9saXN0LCAmZGV2LT5wcm90b2NvbC0+ZGV2aWNlcyk7CiAJc3Bpbl91bmxvY2soJnBucF9sb2NrKTsKLQotCXJldCA9IGRldmljZV9yZWdpc3RlcigmZGV2LT5kZXYpOwotCWlmIChyZXQpCi0JCXJldHVybiByZXQ7Ci0KLQlwbnBfaW50ZXJmYWNlX2F0dGFjaF9kZXZpY2UoZGV2KTsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gZGV2aWNlX3JlZ2lzdGVyKCZkZXYtPmRldik7CiB9CiAKIC8qCkBAIC0yMTgsNyArMjEwLDYgQEAKIAogc3RhdGljIGludCBfX2luaXQgcG5wX2luaXQodm9pZCkKIHsKLQlwcmludGsoS0VSTl9JTkZPICJMaW51eCBQbHVnIGFuZCBQbGF5IFN1cHBvcnQgdjAuOTcgKGMpIEFkYW0gQmVsYXlcbiIpOwogCXJldHVybiBidXNfcmVnaXN0ZXIoJnBucF9idXNfdHlwZSk7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcG5wL2RyaXZlci5jIGIvZHJpdmVycy9wbnAvZHJpdmVyLmMKaW5kZXggZDNmODY5ZS4uZTNmN2U4OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wbnAvZHJpdmVyLmMKKysrIGIvZHJpdmVycy9wbnAvZHJpdmVyLmMKQEAgLTIwNiw2ICsyMDYsNyBAQAogCS5yZW1vdmUgID0gcG5wX2RldmljZV9yZW1vdmUsCiAJLnN1c3BlbmQgPSBwbnBfYnVzX3N1c3BlbmQsCiAJLnJlc3VtZSAgPSBwbnBfYnVzX3Jlc3VtZSwKKwkuZGV2X2F0dHJzID0gcG5wX2ludGVyZmFjZV9hdHRycywKIH07CiAKIGludCBwbnBfcmVnaXN0ZXJfZHJpdmVyKHN0cnVjdCBwbnBfZHJpdmVyICpkcnYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BucC9pbnRlcmZhY2UuYyBiL2RyaXZlcnMvcG5wL2ludGVyZmFjZS5jCmluZGV4IGE4NzZlY2YuLjQ3OGE0YTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcG5wL2ludGVyZmFjZS5jCisrKyBiL2RyaXZlcnMvcG5wL2ludGVyZmFjZS5jCkBAIC0yNDMsOCArMjQzLDYgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgREVWSUNFX0FUVFIob3B0aW9ucywgU19JUlVHTywgcG5wX3Nob3dfb3B0aW9ucywgTlVMTCk7Ci0KIHN0YXRpYyBzc2l6ZV90IHBucF9zaG93X2N1cnJlbnRfcmVzb3VyY2VzKHN0cnVjdCBkZXZpY2UgKmRtZGV2LAogCQkJCQkgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAogCQkJCQkgIGNoYXIgKmJ1ZikKQEAgLTQyMCw5ICs0MTgsNiBAQAogCXJldHVybiBjb3VudDsKIH0KIAotc3RhdGljIERFVklDRV9BVFRSKHJlc291cmNlcywgU19JUlVHTyB8IFNfSVdVU1IsCi0JCSAgIHBucF9zaG93X2N1cnJlbnRfcmVzb3VyY2VzLCBwbnBfc2V0X2N1cnJlbnRfcmVzb3VyY2VzKTsKLQogc3RhdGljIHNzaXplX3QgcG5wX3Nob3dfY3VycmVudF9pZHMoc3RydWN0IGRldmljZSAqZG1kZXYsCiAJCQkJICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCiB7CkBAIC00MzcsMjcgKzQzMiwxMSBAQAogCXJldHVybiAoc3RyIC0gYnVmKTsKIH0KIAotc3RhdGljIERFVklDRV9BVFRSKGlkLCBTX0lSVUdPLCBwbnBfc2hvd19jdXJyZW50X2lkcywgTlVMTCk7Ci0KLWludCBwbnBfaW50ZXJmYWNlX2F0dGFjaF9kZXZpY2Uoc3RydWN0IHBucF9kZXYgKmRldikKLXsKLQlpbnQgcmMgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoJmRldi0+ZGV2LCAmZGV2X2F0dHJfb3B0aW9ucyk7Ci0KLQlpZiAocmMpCi0JCWdvdG8gZXJyOwotCXJjID0gZGV2aWNlX2NyZWF0ZV9maWxlKCZkZXYtPmRldiwgJmRldl9hdHRyX3Jlc291cmNlcyk7Ci0JaWYgKHJjKQotCQlnb3RvIGVycl9vcHQ7Ci0JcmMgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoJmRldi0+ZGV2LCAmZGV2X2F0dHJfaWQpOwotCWlmIChyYykKLQkJZ290byBlcnJfcmVzOwotCi0JcmV0dXJuIDA7Ci0KLWVycl9yZXM6Ci0JZGV2aWNlX3JlbW92ZV9maWxlKCZkZXYtPmRldiwgJmRldl9hdHRyX3Jlc291cmNlcyk7Ci1lcnJfb3B0OgotCWRldmljZV9yZW1vdmVfZmlsZSgmZGV2LT5kZXYsICZkZXZfYXR0cl9vcHRpb25zKTsKLWVycjoKLQlyZXR1cm4gcmM7Ci19CitzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSBwbnBfaW50ZXJmYWNlX2F0dHJzW10gPSB7CisJX19BVFRSKHJlc291cmNlcywgU19JUlVHTyB8IFNfSVdVU1IsCisJCSAgIHBucF9zaG93X2N1cnJlbnRfcmVzb3VyY2VzLAorCQkgICBwbnBfc2V0X2N1cnJlbnRfcmVzb3VyY2VzKSwKKwlfX0FUVFIob3B0aW9ucywgU19JUlVHTywgcG5wX3Nob3dfb3B0aW9ucywgTlVMTCksCisJX19BVFRSKGlkLCBTX0lSVUdPLCBwbnBfc2hvd19jdXJyZW50X2lkcywgTlVMTCksCisJX19BVFRSX05VTEwsCit9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wbnAvaXNhcG5wL2NvcmUuYyBiL2RyaXZlcnMvcG5wL2lzYXBucC9jb3JlLmMKaW5kZXggMTAxYTgzNS4uNDY0NTVmYmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcG5wL2lzYXBucC9jb3JlLmMKKysrIGIvZHJpdmVycy9wbnAvaXNhcG5wL2NvcmUuYwpAQCAtMTAxMiw3ICsxMDEyLDcgQEAKIAkJcHJpbnRrKEtFUk5fSU5GTyAiaXNhcG5wOiBJU0EgUGx1ZyAmIFBsYXkgc3VwcG9ydCBkaXNhYmxlZFxuIik7CiAJCXJldHVybiAwOwogCX0KLSNpZmRlZiBDT05GSUdfUFBDX01FUkdFCisjaWZkZWYgQ09ORklHX1BQQwogCWlmIChjaGVja19sZWdhY3lfaW9wb3J0KF9QSURYUikgfHwgY2hlY2tfbGVnYWN5X2lvcG9ydChfUE5QV1JQKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcG5wL3BucGJpb3MvY29yZS5jIGIvZHJpdmVycy9wbnAvcG5wYmlvcy9jb3JlLmMKaW5kZXggNjYyZGZjZGQuLjJiZmUxMzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcG5wL3BucGJpb3MvY29yZS5jCisrKyBiL2RyaXZlcnMvcG5wL3BucGJpb3MvY29yZS5jCkBAIC01MTksNyArNTE5LDcgQEAKIHsKIAlpbnQgcmV0OwogCi0jaWYgZGVmaW5lZChDT05GSUdfUFBDX01FUkdFKQorI2lmIGRlZmluZWQoQ09ORklHX1BQQykKIAlpZiAoY2hlY2tfbGVnYWN5X2lvcG9ydChQTlBCSU9TX0JBU0UpKQogCQlyZXR1cm4gLUVOT0RFVjsKICNlbmRpZgpAQCAtNTc3LDcgKzU3Nyw3IEBACiB7CiAJc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrOwogCi0jaWYgZGVmaW5lZChDT05GSUdfUFBDX01FUkdFKQorI2lmIGRlZmluZWQoQ09ORklHX1BQQykKIAlpZiAoY2hlY2tfbGVnYWN5X2lvcG9ydChQTlBCSU9TX0JBU0UpKQogCQlyZXR1cm4gMDsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wbnAvcXVpcmtzLmMgYi9kcml2ZXJzL3BucC9xdWlya3MuYwppbmRleCAwYmRmOWI4Li5jMTQ0YmQ1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BucC9xdWlya3MuYworKysgYi9kcml2ZXJzL3BucC9xdWlya3MuYwpAQCAtMjQ1LDcgKzI0NSw3IEBACiAJICovCiAJZm9yX2VhY2hfcGNpX2RldihwZGV2KSB7CiAJCWZvciAoaSA9IDA7IGkgPCBERVZJQ0VfQ09VTlRfUkVTT1VSQ0U7IGkrKykgewotCQkJdW5zaWduZWQgaW50IHR5cGU7CisJCQl1bnNpZ25lZCBsb25nIHR5cGU7CiAKIAkJCXR5cGUgPSBwY2lfcmVzb3VyY2VfZmxhZ3MocGRldiwgaSkgJgogCQkJCQkoSU9SRVNPVVJDRV9JTyB8IElPUkVTT1VSQ0VfTUVNKTsKQEAgLTMzOCw4ICszMzgsNyBAQAogCQlpZiAoIWNvbXBhcmVfcG5wX2lkKGRldi0+aWQsIGYtPmlkKSkKIAkJCWNvbnRpbnVlOwogI2lmZGVmIERFQlVHCi0JCWRldl9kYmcoJmRldi0+ZGV2LCAiJXM6IGNhbGxpbmcgIiwgZi0+aWQpOwotCQlwcmludF9mbl9kZXNjcmlwdG9yX3N5bWJvbCgiJXNcbiIsIGYtPnF1aXJrX2Z1bmN0aW9uKTsKKwkJZGV2X2RiZygmZGV2LT5kZXYsICIlczogY2FsbGluZyAlcEZcbiIsIGYtPmlkLCBmLT5xdWlya19mdW5jdGlvbik7CiAjZW5kaWYKIAkJZi0+cXVpcmtfZnVuY3Rpb24oZGV2KTsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BucC9yZXNvdXJjZS5jIGIvZHJpdmVycy9wbnAvcmVzb3VyY2UuYwppbmRleCA0Y2ZlM2ExLi5kYmFlMjNhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BucC9yZXNvdXJjZS5jCisrKyBiL2RyaXZlcnMvcG5wL3Jlc291cmNlLmMKQEAgLTQ2NywxNCArNDY3LDE0IEBACiAjZW5kaWYKIH0KIAotaW50IHBucF9yZXNvdXJjZV90eXBlKHN0cnVjdCByZXNvdXJjZSAqcmVzKQordW5zaWduZWQgbG9uZyBwbnBfcmVzb3VyY2VfdHlwZShzdHJ1Y3QgcmVzb3VyY2UgKnJlcykKIHsKIAlyZXR1cm4gcmVzLT5mbGFncyAmIChJT1JFU09VUkNFX0lPICB8IElPUkVTT1VSQ0VfTUVNIHwKIAkJCSAgICAgSU9SRVNPVVJDRV9JUlEgfCBJT1JFU09VUkNFX0RNQSk7CiB9CiAKIHN0cnVjdCByZXNvdXJjZSAqcG5wX2dldF9yZXNvdXJjZShzdHJ1Y3QgcG5wX2RldiAqZGV2LAotCQkJCSAgdW5zaWduZWQgaW50IHR5cGUsIHVuc2lnbmVkIGludCBudW0pCisJCQkJICB1bnNpZ25lZCBsb25nIHR5cGUsIHVuc2lnbmVkIGludCBudW0pCiB7CiAJc3RydWN0IHBucF9yZXNvdXJjZSAqcG5wX3JlczsKIAlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcG93ZXIvS2NvbmZpZyBiL2RyaXZlcnMvcG93ZXIvS2NvbmZpZwppbmRleCA2M2JiNTc5Li44ZTBjMmI0NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9wb3dlci9LY29uZmlnCisrKyBiL2RyaXZlcnMvcG93ZXIvS2NvbmZpZwpAQCAtNTEsNyArNTEsNyBAQAogCiBjb25maWcgQkFUVEVSWV9UT1NBCiAJdHJpc3RhdGUgIlNoYXJwIFNMLTYwMDAgKHRvc2EpIGJhdHRlcnkiCi0JZGVwZW5kcyBvbiBNQUNIX1RPU0EgJiYgTUZEX1RDNjM5M1hCCisJZGVwZW5kcyBvbiBNQUNIX1RPU0EgJiYgTUZEX1RDNjM5M1hCICYmIFRPVUNIU0NSRUVOX1dNOTdYWAogCWhlbHAKIAkgIFNheSBZIHRvIGVuYWJsZSBzdXBwb3J0IGZvciB0aGUgYmF0dGVyeSBvbiB0aGUgU2hhcnAgWmF1cnVzCiAJICBTTC02MDAwICh0b3NhKSBtb2RlbHMuCkBAIC02Miw0ICs2MiwxMCBAQAogCWhlbHAKIAkgIFNheSBZIHRvIGVuYWJsZSBzdXBwb3J0IGZvciBiYXR0ZXJ5IG1lYXN1cmVkIGJ5IFdNOTd4eCBhdXggcG9ydC4KIAorY29uZmlnIEJBVFRFUllfQlEyN3gwMAorCXRyaXN0YXRlICJCUTI3MjAwIGJhdHRlcnkgZHJpdmVyIgorCWRlcGVuZHMgb24gSTJDCisJaGVscAorCSAgU2F5IFkgaGVyZSB0byBlbmFibGUgc3VwcG9ydCBmb3IgYmF0dGVyaWVzIHdpdGggQlEyNzIwMChJMkMpIGNoaXAuCisKIGVuZGlmICMgUE9XRVJfU1VQUExZCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Bvd2VyL01ha2VmaWxlIGIvZHJpdmVycy9wb3dlci9NYWtlZmlsZQppbmRleCA0ZTIwMDI2Li5lOGYxZWNlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Bvd2VyL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvcG93ZXIvTWFrZWZpbGUKQEAgLTIxLDQgKzIxLDUgQEAKIG9iai0kKENPTkZJR19CQVRURVJZX1BNVSkJKz0gcG11X2JhdHRlcnkubwogb2JqLSQoQ09ORklHX0JBVFRFUllfT0xQQykJKz0gb2xwY19iYXR0ZXJ5Lm8KIG9iai0kKENPTkZJR19CQVRURVJZX1RPU0EpCSs9IHRvc2FfYmF0dGVyeS5vCi1vYmotJChDT05GSUdfQkFUVEVSWV9XTTk3WFgpCSs9IHdtOTd4eF9iYXR0ZXJ5Lm8KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCitvYmotJChDT05GSUdfQkFUVEVSWV9XTTk3WFgpCSs9IHdtOTd4eF9iYXR0ZXJ5Lm8KK29iai0kKENPTkZJR19CQVRURVJZX0JRMjd4MDApCSs9IGJxMjd4MDBfYmF0dGVyeS5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Bvd2VyL2JxMjd4MDBfYmF0dGVyeS5jIGIvZHJpdmVycy9wb3dlci9icTI3eDAwX2JhdHRlcnkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYzA1NmZjYwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvcG93ZXIvYnEyN3gwMF9iYXR0ZXJ5LmMKQEAgLTAsMCArMSwzODEgQEAKKy8qCisgKiBCUTI3eDAwIGJhdHRlcnkgZHJpdmVyCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFJvZG9sZm8gR2lvbWV0dGkgPGdpb21ldHRpQGxpbnV4Lml0PgorICogQ29weXJpZ2h0IChDKSAyMDA4IEV1cm90ZWNoIFMucC5BLiA8aW5mb0BldXJvdGVjaC5pdD4KKyAqCisgKiBCYXNlZCBvbiBhIHByZXZpb3VzIHdvcmsgYnkgQ29weXJpZ2h0IChDKSAyMDA4IFRleGFzIEluc3RydW1lbnRzLCBJbmMuCisgKgorICogVGhpcyBwYWNrYWdlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUSElTIFBBQ0tBR0UgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBXSVRIT1VUIEFOWSBFWFBSRVNTIE9SCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVElCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorICoKKyAqLworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BhcmFtLmg+CisjaW5jbHVkZSA8bGludXgvamlmZmllcy5oPgorI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvcG93ZXJfc3VwcGx5Lmg+CisjaW5jbHVkZSA8bGludXgvaWRyLmg+CisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8YXNtL3VuYWxpZ25lZC5oPgorCisjZGVmaW5lIERSSVZFUl9WRVJTSU9OCQkJIjEuMC4wIgorCisjZGVmaW5lIEJRMjd4MDBfUkVHX1RFTVAJCTB4MDYKKyNkZWZpbmUgQlEyN3gwMF9SRUdfVk9MVAkJMHgwOAorI2RlZmluZSBCUTI3eDAwX1JFR19SU09DCQkweDBCIC8qIFJlbGF0aXZlIFN0YXRlLW9mLUNoYXJnZSAqLworI2RlZmluZSBCUTI3eDAwX1JFR19BSQkJCTB4MTQKKyNkZWZpbmUgQlEyN3gwMF9SRUdfRkxBR1MJCTB4MEEKKworLyogSWYgdGhlIHN5c3RlbSBoYXMgc2V2ZXJhbCBiYXR0ZXJpZXMgd2UgbmVlZCBhIGRpZmZlcmVudCBuYW1lIGZvciBlYWNoCisgKiBvZiB0aGVtLi4uCisgKi8KK3N0YXRpYyBERUZJTkVfSURSKGJhdHRlcnlfaWQpOworc3RhdGljIERFRklORV9NVVRFWChiYXR0ZXJ5X211dGV4KTsKKworc3RydWN0IGJxMjd4MDBfZGV2aWNlX2luZm87CitzdHJ1Y3QgYnEyN3gwMF9hY2Nlc3NfbWV0aG9kcyB7CisJaW50ICgqcmVhZCkodTggcmVnLCBpbnQgKnJ0X3ZhbHVlLCBpbnQgYl9zaW5nbGUsCisJCXN0cnVjdCBicTI3eDAwX2RldmljZV9pbmZvICpkaSk7Cit9OworCitzdHJ1Y3QgYnEyN3gwMF9kZXZpY2VfaW5mbyB7CisJc3RydWN0IGRldmljZSAJCSpkZXY7CisJaW50CQkJaWQ7CisJaW50CQkJdm9sdGFnZV91VjsKKwlpbnQJCQljdXJyZW50X3VBOworCWludAkJCXRlbXBfQzsKKwlpbnQJCQljaGFyZ2VfcnNvYzsKKwlzdHJ1Y3QgYnEyN3gwMF9hY2Nlc3NfbWV0aG9kcwkqYnVzOworCXN0cnVjdCBwb3dlcl9zdXBwbHkJYmF0OworCisJc3RydWN0IGkyY19jbGllbnQJKmNsaWVudDsKK307CisKK3N0YXRpYyBlbnVtIHBvd2VyX3N1cHBseV9wcm9wZXJ0eSBicTI3eDAwX2JhdHRlcnlfcHJvcHNbXSA9IHsKKwlQT1dFUl9TVVBQTFlfUFJPUF9QUkVTRU5ULAorCVBPV0VSX1NVUFBMWV9QUk9QX1ZPTFRBR0VfTk9XLAorCVBPV0VSX1NVUFBMWV9QUk9QX0NVUlJFTlRfTk9XLAorCVBPV0VSX1NVUFBMWV9QUk9QX0NBUEFDSVRZLAorCVBPV0VSX1NVUFBMWV9QUk9QX1RFTVAsCit9OworCisvKgorICogQ29tbW9uIGNvZGUgZm9yIEJRMjd4MDAgZGV2aWNlcworICovCisKK3N0YXRpYyBpbnQgYnEyN3gwMF9yZWFkKHU4IHJlZywgaW50ICpydF92YWx1ZSwgaW50IGJfc2luZ2xlLAorCQkJc3RydWN0IGJxMjd4MDBfZGV2aWNlX2luZm8gKmRpKQoreworCWludCByZXQ7CisKKwlyZXQgPSBkaS0+YnVzLT5yZWFkKHJlZywgcnRfdmFsdWUsIGJfc2luZ2xlLCBkaSk7CisJKnJ0X3ZhbHVlID0gYmUxNl90b19jcHUoKnJ0X3ZhbHVlKTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBSZXR1cm4gdGhlIGJhdHRlcnkgdGVtcGVyYXR1cmUgaW4gQ2VsY2l1cyBkZWdyZWVzCisgKiBPciA8IDAgaWYgc29tZXRoaW5nIGZhaWxzLgorICovCitzdGF0aWMgaW50IGJxMjd4MDBfYmF0dGVyeV90ZW1wZXJhdHVyZShzdHJ1Y3QgYnEyN3gwMF9kZXZpY2VfaW5mbyAqZGkpCit7CisJaW50IHJldDsKKwlpbnQgdGVtcCA9IDA7CisKKwlyZXQgPSBicTI3eDAwX3JlYWQoQlEyN3gwMF9SRUdfVEVNUCwgJnRlbXAsIDAsIGRpKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoZGktPmRldiwgImVycm9yIHJlYWRpbmcgdGVtcGVyYXR1cmVcbiIpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJldHVybiAodGVtcCA+PiAyKSAtIDI3MzsKK30KKworLyoKKyAqIFJldHVybiB0aGUgYmF0dGVyeSBWb2x0YWdlIGluIG1pbGl2b2x0cworICogT3IgPCAwIGlmIHNvbWV0aGluZyBmYWlscy4KKyAqLworc3RhdGljIGludCBicTI3eDAwX2JhdHRlcnlfdm9sdGFnZShzdHJ1Y3QgYnEyN3gwMF9kZXZpY2VfaW5mbyAqZGkpCit7CisJaW50IHJldDsKKwlpbnQgdm9sdCA9IDA7CisKKwlyZXQgPSBicTI3eDAwX3JlYWQoQlEyN3gwMF9SRUdfVk9MVCwgJnZvbHQsIDAsIGRpKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoZGktPmRldiwgImVycm9yIHJlYWRpbmcgdm9sdGFnZVxuIik7CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0dXJuIHZvbHQ7Cit9CisKKy8qCisgKiBSZXR1cm4gdGhlIGJhdHRlcnkgYXZlcmFnZSBjdXJyZW50CisgKiBOb3RlIHRoYXQgY3VycmVudCBjYW4gYmUgbmVnYXRpdmUgc2lnbmVkIGFzIHdlbGwKKyAqIE9yIDAgaWYgc29tZXRoaW5nIGZhaWxzLgorICovCitzdGF0aWMgaW50IGJxMjd4MDBfYmF0dGVyeV9jdXJyZW50KHN0cnVjdCBicTI3eDAwX2RldmljZV9pbmZvICpkaSkKK3sKKwlpbnQgcmV0OworCWludCBjdXJyID0gMDsKKwlpbnQgZmxhZ3MgPSAwOworCisJcmV0ID0gYnEyN3gwMF9yZWFkKEJRMjd4MDBfUkVHX0FJLCAmY3VyciwgMCwgZGkpOworCWlmIChyZXQpIHsKKwkJZGV2X2VycihkaS0+ZGV2LCAiZXJyb3IgcmVhZGluZyBjdXJyZW50XG4iKTsKKwkJcmV0dXJuIDA7CisJfQorCXJldCA9IGJxMjd4MDBfcmVhZChCUTI3eDAwX1JFR19GTEFHUywgJmZsYWdzLCAwLCBkaSk7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2VycihkaS0+ZGV2LCAiZXJyb3IgcmVhZGluZyBmbGFnc1xuIik7CisJCXJldHVybiAwOworCX0KKwlpZiAoKGZsYWdzICYgKDEgPDwgNykpICE9IDApIHsKKwkJZGV2X2RiZyhkaS0+ZGV2LCAibmVnYXRpdmUgY3VycmVudCFcbiIpOworCQlyZXR1cm4gLWN1cnI7CisJfQorCXJldHVybiBjdXJyOworfQorCisvKgorICogUmV0dXJuIHRoZSBiYXR0ZXJ5IFJlbGF0aXZlIFN0YXRlLW9mLUNoYXJnZQorICogT3IgPCAwIGlmIHNvbWV0aGluZyBmYWlscy4KKyAqLworc3RhdGljIGludCBicTI3eDAwX2JhdHRlcnlfcnNvYyhzdHJ1Y3QgYnEyN3gwMF9kZXZpY2VfaW5mbyAqZGkpCit7CisJaW50IHJldDsKKwlpbnQgcnNvYyA9IDA7CisKKwlyZXQgPSBicTI3eDAwX3JlYWQoQlEyN3gwMF9SRUdfUlNPQywgJnJzb2MsIDEsIGRpKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoZGktPmRldiwgImVycm9yIHJlYWRpbmcgcmVsYXRpdmUgU3RhdGUtb2YtQ2hhcmdlXG4iKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXR1cm4gcnNvYyA+PiA4OworfQorCisjZGVmaW5lIHRvX2JxMjd4MDBfZGV2aWNlX2luZm8oeCkgY29udGFpbmVyX29mKCh4KSwgXAorCQkJCXN0cnVjdCBicTI3eDAwX2RldmljZV9pbmZvLCBiYXQpOworCitzdGF0aWMgaW50IGJxMjd4MDBfYmF0dGVyeV9nZXRfcHJvcGVydHkoc3RydWN0IHBvd2VyX3N1cHBseSAqcHN5LAorCQkJCQllbnVtIHBvd2VyX3N1cHBseV9wcm9wZXJ0eSBwc3AsCisJCQkJCXVuaW9uIHBvd2VyX3N1cHBseV9wcm9wdmFsICp2YWwpCit7CisJc3RydWN0IGJxMjd4MDBfZGV2aWNlX2luZm8gKmRpID0gdG9fYnEyN3gwMF9kZXZpY2VfaW5mbyhwc3kpOworCisJc3dpdGNoIChwc3ApIHsKKwljYXNlIFBPV0VSX1NVUFBMWV9QUk9QX1ZPTFRBR0VfTk9XOgorCWNhc2UgUE9XRVJfU1VQUExZX1BST1BfUFJFU0VOVDoKKwkJdmFsLT5pbnR2YWwgPSBicTI3eDAwX2JhdHRlcnlfdm9sdGFnZShkaSk7CisJCWlmIChwc3AgPT0gUE9XRVJfU1VQUExZX1BST1BfUFJFU0VOVCkKKwkJCXZhbC0+aW50dmFsID0gdmFsLT5pbnR2YWwgPD0gMCA/IDAgOiAxOworCQlicmVhazsKKwljYXNlIFBPV0VSX1NVUFBMWV9QUk9QX0NVUlJFTlRfTk9XOgorCQl2YWwtPmludHZhbCA9IGJxMjd4MDBfYmF0dGVyeV9jdXJyZW50KGRpKTsKKwkJYnJlYWs7CisJY2FzZSBQT1dFUl9TVVBQTFlfUFJPUF9DQVBBQ0lUWToKKwkJdmFsLT5pbnR2YWwgPSBicTI3eDAwX2JhdHRlcnlfcnNvYyhkaSk7CisJCWJyZWFrOworCWNhc2UgUE9XRVJfU1VQUExZX1BST1BfVEVNUDoKKwkJdmFsLT5pbnR2YWwgPSBicTI3eDAwX2JhdHRlcnlfdGVtcGVyYXR1cmUoZGkpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgYnEyN3gwMF9wb3dlcnN1cHBseV9pbml0KHN0cnVjdCBicTI3eDAwX2RldmljZV9pbmZvICpkaSkKK3sKKwlkaS0+YmF0LnR5cGUgPSBQT1dFUl9TVVBQTFlfVFlQRV9CQVRURVJZOworCWRpLT5iYXQucHJvcGVydGllcyA9IGJxMjd4MDBfYmF0dGVyeV9wcm9wczsKKwlkaS0+YmF0Lm51bV9wcm9wZXJ0aWVzID0gQVJSQVlfU0laRShicTI3eDAwX2JhdHRlcnlfcHJvcHMpOworCWRpLT5iYXQuZ2V0X3Byb3BlcnR5ID0gYnEyN3gwMF9iYXR0ZXJ5X2dldF9wcm9wZXJ0eTsKKwlkaS0+YmF0LmV4dGVybmFsX3Bvd2VyX2NoYW5nZWQgPSBOVUxMOworfQorCisvKgorICogQlEyNzIwMCBzcGVjaWZpYyBjb2RlCisgKi8KKworc3RhdGljIGludCBicTI3MjAwX3JlYWQodTggcmVnLCBpbnQgKnJ0X3ZhbHVlLCBpbnQgYl9zaW5nbGUsCisJCQlzdHJ1Y3QgYnEyN3gwMF9kZXZpY2VfaW5mbyAqZGkpCit7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IGRpLT5jbGllbnQ7CisJc3RydWN0IGkyY19tc2cgbXNnWzFdOworCXVuc2lnbmVkIGNoYXIgZGF0YVsyXTsKKwlpbnQgZXJyOworCisJaWYgKCFjbGllbnQtPmFkYXB0ZXIpCisJCXJldHVybiAtRU5PREVWOworCisJbXNnLT5hZGRyID0gY2xpZW50LT5hZGRyOworCW1zZy0+ZmxhZ3MgPSAwOworCW1zZy0+bGVuID0gMTsKKwltc2ctPmJ1ZiA9IGRhdGE7CisKKwlkYXRhWzBdID0gcmVnOworCWVyciA9IGkyY190cmFuc2ZlcihjbGllbnQtPmFkYXB0ZXIsIG1zZywgMSk7CisKKwlpZiAoZXJyID49IDApIHsKKwkJaWYgKCFiX3NpbmdsZSkKKwkJCW1zZy0+bGVuID0gMjsKKwkJZWxzZQorCQkJbXNnLT5sZW4gPSAxOworCisJCW1zZy0+ZmxhZ3MgPSBJMkNfTV9SRDsKKwkJZXJyID0gaTJjX3RyYW5zZmVyKGNsaWVudC0+YWRhcHRlciwgbXNnLCAxKTsKKwkJaWYgKGVyciA+PSAwKSB7CisJCQlpZiAoIWJfc2luZ2xlKQorCQkJCSpydF92YWx1ZSA9IGdldF91bmFsaWduZWRfYmUxNihkYXRhKTsKKwkJCWVsc2UKKwkJCQkqcnRfdmFsdWUgPSBkYXRhWzBdOworCisJCQlyZXR1cm4gMDsKKwkJfQorCX0KKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IGJxMjcyMDBfYmF0dGVyeV9wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAorCQkJCSBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpCit7CisJY2hhciAqbmFtZTsKKwlzdHJ1Y3QgYnEyN3gwMF9kZXZpY2VfaW5mbyAqZGk7CisJc3RydWN0IGJxMjd4MDBfYWNjZXNzX21ldGhvZHMgKmJ1czsKKwlpbnQgbnVtOworCWludCByZXR2YWwgPSAwOworCisJLyogR2V0IG5ldyBJRCBmb3IgdGhlIG5ldyBiYXR0ZXJ5IGRldmljZSAqLworCXJldHZhbCA9IGlkcl9wcmVfZ2V0KCZiYXR0ZXJ5X2lkLCBHRlBfS0VSTkVMKTsKKwlpZiAocmV0dmFsID09IDApCisJCXJldHVybiAtRU5PTUVNOworCW11dGV4X2xvY2soJmJhdHRlcnlfbXV0ZXgpOworCXJldHZhbCA9IGlkcl9nZXRfbmV3KCZiYXR0ZXJ5X2lkLCBjbGllbnQsICZudW0pOworCW11dGV4X3VubG9jaygmYmF0dGVyeV9tdXRleCk7CisJaWYgKHJldHZhbCA8IDApCisJCXJldHVybiByZXR2YWw7CisKKwluYW1lID0ga2FzcHJpbnRmKEdGUF9LRVJORUwsICJicTI3MjAwLSVkIiwgbnVtKTsKKwlpZiAoIW5hbWUpIHsKKwkJZGV2X2VycigmY2xpZW50LT5kZXYsICJmYWlsZWQgdG8gYWxsb2NhdGUgZGV2aWNlIG5hbWVcbiIpOworCQlyZXR2YWwgPSAtRU5PTUVNOworCQlnb3RvIGJhdHRfZmFpbGVkXzE7CisJfQorCisJZGkgPSBremFsbG9jKHNpemVvZigqZGkpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWRpKSB7CisJCWRldl9lcnIoJmNsaWVudC0+ZGV2LCAiZmFpbGVkIHRvIGFsbG9jYXRlIGRldmljZSBpbmZvIGRhdGFcbiIpOworCQlyZXR2YWwgPSAtRU5PTUVNOworCQlnb3RvIGJhdHRfZmFpbGVkXzI7CisJfQorCWRpLT5pZCA9IG51bTsKKworCWJ1cyA9IGt6YWxsb2Moc2l6ZW9mKCpidXMpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWJ1cykgeworCQlkZXZfZXJyKCZjbGllbnQtPmRldiwgImZhaWxlZCB0byBhbGxvY2F0ZSBhY2Nlc3MgbWV0aG9kICIKKwkJCQkJImRhdGFcbiIpOworCQlyZXR2YWwgPSAtRU5PTUVNOworCQlnb3RvIGJhdHRfZmFpbGVkXzM7CisJfQorCisJaTJjX3NldF9jbGllbnRkYXRhKGNsaWVudCwgZGkpOworCWRpLT5kZXYgPSAmY2xpZW50LT5kZXY7CisJZGktPmJhdC5uYW1lID0gbmFtZTsKKwlidXMtPnJlYWQgPSAmYnEyNzIwMF9yZWFkOworCWRpLT5idXMgPSBidXM7CisJZGktPmNsaWVudCA9IGNsaWVudDsKKworCWJxMjd4MDBfcG93ZXJzdXBwbHlfaW5pdChkaSk7CisKKwlyZXR2YWwgPSBwb3dlcl9zdXBwbHlfcmVnaXN0ZXIoJmNsaWVudC0+ZGV2LCAmZGktPmJhdCk7CisJaWYgKHJldHZhbCkgeworCQlkZXZfZXJyKCZjbGllbnQtPmRldiwgImZhaWxlZCB0byByZWdpc3RlciBiYXR0ZXJ5XG4iKTsKKwkJZ290byBiYXR0X2ZhaWxlZF80OworCX0KKworCWRldl9pbmZvKCZjbGllbnQtPmRldiwgInN1cHBvcnQgdmVyLiAlcyBlbmFibGVkXG4iLCBEUklWRVJfVkVSU0lPTik7CisKKwlyZXR1cm4gMDsKKworYmF0dF9mYWlsZWRfNDoKKwlrZnJlZShidXMpOworYmF0dF9mYWlsZWRfMzoKKwlrZnJlZShkaSk7CitiYXR0X2ZhaWxlZF8yOgorCWtmcmVlKG5hbWUpOworYmF0dF9mYWlsZWRfMToKKwltdXRleF9sb2NrKCZiYXR0ZXJ5X211dGV4KTsKKwlpZHJfcmVtb3ZlKCZiYXR0ZXJ5X2lkLCBudW0pOworCW11dGV4X3VubG9jaygmYmF0dGVyeV9tdXRleCk7CisKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgaW50IGJxMjcyMDBfYmF0dGVyeV9yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKK3sKKwlzdHJ1Y3QgYnEyN3gwMF9kZXZpY2VfaW5mbyAqZGkgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKworCXBvd2VyX3N1cHBseV91bnJlZ2lzdGVyKCZkaS0+YmF0KTsKKworCWtmcmVlKGRpLT5iYXQubmFtZSk7CisKKwltdXRleF9sb2NrKCZiYXR0ZXJ5X211dGV4KTsKKwlpZHJfcmVtb3ZlKCZiYXR0ZXJ5X2lkLCBkaS0+aWQpOworCW11dGV4X3VubG9jaygmYmF0dGVyeV9tdXRleCk7CisKKwlrZnJlZShkaSk7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIE1vZHVsZSBzdHVmZgorICovCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCBicTI3MjAwX2lkW10gPSB7CisJeyAiYnEyNzIwMCIsIDAgfSwKKwl7fSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBicTI3MjAwX2JhdHRlcnlfZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCS5uYW1lID0gImJxMjcyMDAtYmF0dGVyeSIsCisJfSwKKwkucHJvYmUgPSBicTI3MjAwX2JhdHRlcnlfcHJvYmUsCisJLnJlbW92ZSA9IGJxMjcyMDBfYmF0dGVyeV9yZW1vdmUsCisJLmlkX3RhYmxlID0gYnEyNzIwMF9pZCwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGJxMjd4MDBfYmF0dGVyeV9pbml0KHZvaWQpCit7CisJaW50IHJldDsKKworCXJldCA9IGkyY19hZGRfZHJpdmVyKCZicTI3MjAwX2JhdHRlcnlfZHJpdmVyKTsKKwlpZiAocmV0KQorCQlwcmludGsoS0VSTl9FUlIgIlVuYWJsZSB0byByZWdpc3RlciBCUTI3MjAwIGRyaXZlclxuIik7CisKKwlyZXR1cm4gcmV0OworfQorbW9kdWxlX2luaXQoYnEyN3gwMF9iYXR0ZXJ5X2luaXQpOworCitzdGF0aWMgdm9pZCBfX2V4aXQgYnEyN3gwMF9iYXR0ZXJ5X2V4aXQodm9pZCkKK3sKKwlpMmNfZGVsX2RyaXZlcigmYnEyNzIwMF9iYXR0ZXJ5X2RyaXZlcik7Cit9Cittb2R1bGVfZXhpdChicTI3eDAwX2JhdHRlcnlfZXhpdCk7CisKK01PRFVMRV9BVVRIT1IoIlJvZG9sZm8gR2lvbWV0dGkgPGdpb21ldHRpQGxpbnV4Lml0PiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJCUTI3eDAwIGJhdHRlcnkgbW9uaXRvciBkcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcG93ZXIvb2xwY19iYXR0ZXJ5LmMgYi9kcml2ZXJzL3Bvd2VyL29scGNfYmF0dGVyeS5jCmluZGV4IDMyNTcwYWYuLjVmYmNhMjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcG93ZXIvb2xwY19iYXR0ZXJ5LmMKKysrIGIvZHJpdmVycy9wb3dlci9vbHBjX2JhdHRlcnkuYwpAQCAtMjA1LDkgKzIwNSw5IEBACiAJCQkJIHVuaW9uIHBvd2VyX3N1cHBseV9wcm9wdmFsICp2YWwpCiB7CiAJaW50IHJldCA9IDA7Ci0JaW50MTZfdCBlY193b3JkOworCV9fYmUxNiBlY193b3JkOwogCXVpbnQ4X3QgZWNfYnl0ZTsKLQl1aW50NjRfdCBzZXJfYnVmOworCV9fYmU2NCBzZXJfYnVmOwogCiAJcmV0ID0gb2xwY19lY19jbWQoRUNfQkFUX1NUQVRVUywgTlVMTCwgMCwgJmVjX2J5dGUsIDEpOwogCWlmIChyZXQpCkBAIC0yNTcsMTYgKzI1NywxNCBAQAogCQlpZiAocmV0KQogCQkJcmV0dXJuIHJldDsKIAotCQllY193b3JkID0gYmUxNl90b19jcHUoZWNfd29yZCk7Ci0JCXZhbC0+aW50dmFsID0gZWNfd29yZCAqIDk3NjBMIC8gMzI7CisJCXZhbC0+aW50dmFsID0gKGludCliZTE2X3RvX2NwdShlY193b3JkKSAqIDk3NjBMIC8gMzI7CiAJCWJyZWFrOwogCWNhc2UgUE9XRVJfU1VQUExZX1BST1BfQ1VSUkVOVF9BVkc6CiAJCXJldCA9IG9scGNfZWNfY21kKEVDX0JBVF9DVVJSRU5ULCBOVUxMLCAwLCAodm9pZCAqKSZlY193b3JkLCAyKTsKIAkJaWYgKHJldCkKIAkJCXJldHVybiByZXQ7CiAKLQkJZWNfd29yZCA9IGJlMTZfdG9fY3B1KGVjX3dvcmQpOwotCQl2YWwtPmludHZhbCA9IGVjX3dvcmQgKiAxNTYyNUwgLyAxMjA7CisJCXZhbC0+aW50dmFsID0gKGludCliZTE2X3RvX2NwdShlY193b3JkKSAqIDE1NjI1TCAvIDEyMDsKIAkJYnJlYWs7CiAJY2FzZSBQT1dFUl9TVVBQTFlfUFJPUF9DQVBBQ0lUWToKIAkJcmV0ID0gb2xwY19lY19jbWQoRUNfQkFUX1NPQywgTlVMTCwgMCwgJmVjX2J5dGUsIDEpOwpAQCAtMjc4LDI0ICsyNzYsMjIgQEAKIAkJcmV0ID0gb2xwY19lY19jbWQoRUNfQkFUX1RFTVAsIE5VTEwsIDAsICh2b2lkICopJmVjX3dvcmQsIDIpOwogCQlpZiAocmV0KQogCQkJcmV0dXJuIHJldDsKLQkJZWNfd29yZCA9IGJlMTZfdG9fY3B1KGVjX3dvcmQpOwotCQl2YWwtPmludHZhbCA9IGVjX3dvcmQgKiAxMDAgLyAyNTY7CisKKwkJdmFsLT5pbnR2YWwgPSAoaW50KWJlMTZfdG9fY3B1KGVjX3dvcmQpICogMTAwIC8gMjU2OwogCQlicmVhazsKIAljYXNlIFBPV0VSX1NVUFBMWV9QUk9QX1RFTVBfQU1CSUVOVDoKIAkJcmV0ID0gb2xwY19lY19jbWQoRUNfQU1CX1RFTVAsIE5VTEwsIDAsICh2b2lkICopJmVjX3dvcmQsIDIpOwogCQlpZiAocmV0KQogCQkJcmV0dXJuIHJldDsKIAotCQllY193b3JkID0gYmUxNl90b19jcHUoZWNfd29yZCk7Ci0JCXZhbC0+aW50dmFsID0gZWNfd29yZCAqIDEwMCAvIDI1NjsKKwkJdmFsLT5pbnR2YWwgPSAoaW50KWJlMTZfdG9fY3B1KGVjX3dvcmQpICogMTAwIC8gMjU2OwogCQlicmVhazsKIAljYXNlIFBPV0VSX1NVUFBMWV9QUk9QX0NIQVJHRV9DT1VOVEVSOgogCQlyZXQgPSBvbHBjX2VjX2NtZChFQ19CQVRfQUNSLCBOVUxMLCAwLCAodm9pZCAqKSZlY193b3JkLCAyKTsKIAkJaWYgKHJldCkKIAkJCXJldHVybiByZXQ7CiAKLQkJZWNfd29yZCA9IGJlMTZfdG9fY3B1KGVjX3dvcmQpOwotCQl2YWwtPmludHZhbCA9IGVjX3dvcmQgKiA2MjUwIC8gMTU7CisJCXZhbC0+aW50dmFsID0gKGludCliZTE2X3RvX2NwdShlY193b3JkKSAqIDYyNTAgLyAxNTsKIAkJYnJlYWs7CiAJY2FzZSBQT1dFUl9TVVBQTFlfUFJPUF9TRVJJQUxfTlVNQkVSOgogCQlyZXQgPSBvbHBjX2VjX2NtZChFQ19CQVRfU0VSSUFMLCBOVUxMLCAwLCAodm9pZCAqKSZzZXJfYnVmLCA4KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcG93ZXIvcGRhX3Bvd2VyLmMgYi9kcml2ZXJzL3Bvd2VyL3BkYV9wb3dlci5jCmluZGV4IDA0NzFlYzcuLmQzMGJiNzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcG93ZXIvcGRhX3Bvd2VyLmMKKysrIGIvZHJpdmVycy9wb3dlci9wZGFfcG93ZXIuYwpAQCAtMzM0LDEzICszMzQsMTYgQEAKIH0KIAogI2lmZGVmIENPTkZJR19QTQorc3RhdGljIGludCBhY193YWtldXBfZW5hYmxlZDsKK3N0YXRpYyBpbnQgdXNiX3dha2V1cF9lbmFibGVkOworCiBzdGF0aWMgaW50IHBkYV9wb3dlcl9zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKIAlpZiAoZGV2aWNlX21heV93YWtldXAoJnBkZXYtPmRldikpIHsKIAkJaWYgKGFjX2lycSkKLQkJCWVuYWJsZV9pcnFfd2FrZShhY19pcnEtPnN0YXJ0KTsKKwkJCWFjX3dha2V1cF9lbmFibGVkID0gIWVuYWJsZV9pcnFfd2FrZShhY19pcnEtPnN0YXJ0KTsKIAkJaWYgKHVzYl9pcnEpCi0JCQllbmFibGVfaXJxX3dha2UodXNiX2lycS0+c3RhcnQpOworCQkJdXNiX3dha2V1cF9lbmFibGVkID0gIWVuYWJsZV9pcnFfd2FrZSh1c2JfaXJxLT5zdGFydCk7CiAJfQogCiAJcmV0dXJuIDA7CkBAIC0zNDksOSArMzUyLDkgQEAKIHN0YXRpYyBpbnQgcGRhX3Bvd2VyX3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCWlmIChkZXZpY2VfbWF5X3dha2V1cCgmcGRldi0+ZGV2KSkgewotCQlpZiAodXNiX2lycSkKKwkJaWYgKHVzYl9pcnEgJiYgdXNiX3dha2V1cF9lbmFibGVkKQogCQkJZGlzYWJsZV9pcnFfd2FrZSh1c2JfaXJxLT5zdGFydCk7Ci0JCWlmIChhY19pcnEpCisJCWlmIChhY19pcnEgJiYgYWNfd2FrZXVwX2VuYWJsZWQpCiAJCQlkaXNhYmxlX2lycV93YWtlKGFjX2lycS0+c3RhcnQpOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wb3dlci9wb3dlcl9zdXBwbHlfY29yZS5jIGIvZHJpdmVycy9wb3dlci9wb3dlcl9zdXBwbHlfY29yZS5jCmluZGV4IGNiMWNjYjQuLjU1MjAwNDA0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Bvd2VyL3Bvd2VyX3N1cHBseV9jb3JlLmMKKysrIGIvZHJpdmVycy9wb3dlci9wb3dlcl9zdXBwbHlfY29yZS5jCkBAIC04NywxMiArODcsMzYgQEAKIAlyZXR1cm4gZXJyb3I7CiB9CiAKK3N0YXRpYyBpbnQgX19wb3dlcl9zdXBwbHlfaXNfc3lzdGVtX3N1cHBsaWVkKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZGF0YSkKK3sKKwl1bmlvbiBwb3dlcl9zdXBwbHlfcHJvcHZhbCByZXQgPSB7MCx9OworCXN0cnVjdCBwb3dlcl9zdXBwbHkgKnBzeSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCisJaWYgKHBzeS0+dHlwZSAhPSBQT1dFUl9TVVBQTFlfVFlQRV9CQVRURVJZKSB7CisJCWlmIChwc3ktPmdldF9wcm9wZXJ0eShwc3ksIFBPV0VSX1NVUFBMWV9QUk9QX09OTElORSwgJnJldCkpCisJCQlyZXR1cm4gMDsKKwkJaWYgKHJldC5pbnR2YWwpCisJCQlyZXR1cm4gcmV0LmludHZhbDsKKwl9CisJcmV0dXJuIDA7Cit9CisKK2ludCBwb3dlcl9zdXBwbHlfaXNfc3lzdGVtX3N1cHBsaWVkKHZvaWQpCit7CisJaW50IGVycm9yOworCisJZXJyb3IgPSBjbGFzc19mb3JfZWFjaF9kZXZpY2UocG93ZXJfc3VwcGx5X2NsYXNzLCBOVUxMLCBOVUxMLAorCQkJCSAgICAgIF9fcG93ZXJfc3VwcGx5X2lzX3N5c3RlbV9zdXBwbGllZCk7CisKKwlyZXR1cm4gZXJyb3I7Cit9CisKIGludCBwb3dlcl9zdXBwbHlfcmVnaXN0ZXIoc3RydWN0IGRldmljZSAqcGFyZW50LCBzdHJ1Y3QgcG93ZXJfc3VwcGx5ICpwc3kpCiB7CiAJaW50IHJjID0gMDsKIAotCXBzeS0+ZGV2ID0gZGV2aWNlX2NyZWF0ZV9kcnZkYXRhKHBvd2VyX3N1cHBseV9jbGFzcywgcGFyZW50LCAwLAotCQkJCQkgcHN5LCAiJXMiLCBwc3ktPm5hbWUpOworCXBzeS0+ZGV2ID0gZGV2aWNlX2NyZWF0ZShwb3dlcl9zdXBwbHlfY2xhc3MsIHBhcmVudCwgMCwgcHN5LAorCQkJCSAiJXMiLCBwc3ktPm5hbWUpOwogCWlmIChJU19FUlIocHN5LT5kZXYpKSB7CiAJCXJjID0gUFRSX0VSUihwc3ktPmRldik7CiAJCWdvdG8gZGV2X2NyZWF0ZV9mYWlsZWQ7CkBAIC0xNDgsNiArMTcyLDcgQEAKIAogRVhQT1JUX1NZTUJPTF9HUEwocG93ZXJfc3VwcGx5X2NoYW5nZWQpOwogRVhQT1JUX1NZTUJPTF9HUEwocG93ZXJfc3VwcGx5X2FtX2lfc3VwcGxpZWQpOworRVhQT1JUX1NZTUJPTF9HUEwocG93ZXJfc3VwcGx5X2lzX3N5c3RlbV9zdXBwbGllZCk7CiBFWFBPUlRfU1lNQk9MX0dQTChwb3dlcl9zdXBwbHlfcmVnaXN0ZXIpOwogRVhQT1JUX1NZTUJPTF9HUEwocG93ZXJfc3VwcGx5X3VucmVnaXN0ZXIpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Bvd2VyL3Bvd2VyX3N1cHBseV9zeXNmcy5jIGIvZHJpdmVycy9wb3dlci9wb3dlcl9zdXBwbHlfc3lzZnMuYwppbmRleCBmZTJhZWIxLi4yM2FlODQ2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Bvd2VyL3Bvd2VyX3N1cHBseV9zeXNmcy5jCisrKyBiL2RyaXZlcnMvcG93ZXIvcG93ZXJfc3VwcGx5X3N5c2ZzLmMKQEAgLTMwLDcgKzMwLDcgQEAKIAogI2RlZmluZSBQT1dFUl9TVVBQTFlfQVRUUihfbmFtZSkJCQkJCVwKIHsJCQkJCQkJCQlcCi0JLmF0dHIgPSB7IC5uYW1lID0gI19uYW1lLCAubW9kZSA9IDA0NDQsIC5vd25lciA9IFRISVNfTU9EVUxFIH0sCVwKKwkuYXR0ciA9IHsgLm5hbWUgPSAjX25hbWUsIC5tb2RlID0gMDQ0NCB9LAlcCiAJLnNob3cgPSBwb3dlcl9zdXBwbHlfc2hvd19wcm9wZXJ0eSwJCQkJXAogCS5zdG9yZSA9IE5VTEwsCQkJCQkJCVwKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcHMzL3BzM2F2LmMgYi9kcml2ZXJzL3BzMy9wczNhdi5jCmluZGV4IDZmMmY5MGUuLjA2ODQ4YjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcHMzL3BzM2F2LmMKKysrIGIvZHJpdmVycy9wczMvcHMzYXYuYwpAQCAtOTE1LDYgKzkxNSwyMiBAQAogCiBFWFBPUlRfU1lNQk9MX0dQTChwczNhdl92aWRlb19tdXRlKTsKIAorLyogbXV0ZSBhbmFsb2cgb3V0cHV0IG9ubHkgKi8KK2ludCBwczNhdl9hdWRpb19tdXRlX2FuYWxvZyhpbnQgbXV0ZSkKK3sKKwlpbnQgaSwgcmVzOworCisJZm9yIChpID0gMDsgaSA8IHBzM2F2LT5hdl9od19jb25mLm51bV9vZl9hdm11bHRpOyBpKyspIHsKKwkJcmVzID0gcHMzYXZfY21kX2F2X2F1ZGlvX211dGUoMSwKKwkJCSZwczNhdi0+YXZfcG9ydFtpICsgcHMzYXYtPmF2X2h3X2NvbmYubnVtX29mX2hkbWldLAorCQkJbXV0ZSk7CisJCWlmIChyZXMgPCAwKQorCQkJcmV0dXJuIC0xOworCX0KKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHBzM2F2X2F1ZGlvX211dGVfYW5hbG9nKTsKKwogaW50IHBzM2F2X2F1ZGlvX211dGUoaW50IG11dGUpCiB7CiAJcmV0dXJuIHBzM2F2X3NldF9hdWRpb19tdXRlKG11dGUgPyBQUzNBVl9DTURfTVVURV9PTgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wczMvcHMzYXZfY21kLmMgYi9kcml2ZXJzL3BzMy9wczNhdl9jbWQuYwppbmRleCA3Zjg4MGMyLi4xMWViNTAzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BzMy9wczNhdl9jbWQuYworKysgYi9kcml2ZXJzL3BzMy9wczNhdl9jbWQuYwpAQCAtNjYwLDkgKzY2MCwxMCBAQAogfQogCiAvKiBkZWZhdWx0IGNzIHZhbCAqLwotc3RhdGljIGNvbnN0IHU4IHBzM2F2X21vZGVfY3NfaW5mb1tdID0gewordTggcHMzYXZfbW9kZV9jc19pbmZvW10gPSB7CiAJMHgwMCwgMHgwOSwgMHgwMCwgMHgwMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMAogfTsKK0VYUE9SVF9TWU1CT0xfR1BMKHBzM2F2X21vZGVfY3NfaW5mbyk7CiAKICNkZWZpbmUgQ1NfNDQJMHgwMAogI2RlZmluZSBDU180OAkweDAyCkBAIC02NzcsNyArNjc4LDcgQEAKIAkJCSAgICAgIHUzMiBjaCwgdTMyIGZzLCB1MzIgd29yZF9iaXRzLCB1MzIgZm9ybWF0LAogCQkJICAgICAgdTMyIHNvdXJjZSkKIHsKLQlpbnQgc3BkaWZfdGhyb3VnaCwgc3BkaWZfYml0c3RyZWFtOworCWludCBzcGRpZl90aHJvdWdoOwogCWludCBpOwogCiAJaWYgKCEoY2ggfCBmcyB8IGZvcm1hdCB8IHdvcmRfYml0cyB8IHNvdXJjZSkpIHsKQEAgLTY4Nyw3ICs2ODgsNiBAQAogCQlmb3JtYXQgPSBQUzNBVl9DTURfQVVESU9fRk9STUFUX1BDTTsKIAkJc291cmNlID0gUFMzQVZfQ01EX0FVRElPX1NPVVJDRV9TRVJJQUw7CiAJfQotCXNwZGlmX3Rocm91Z2ggPSBzcGRpZl9iaXRzdHJlYW0gPSAwOwkvKiBYWFggbm90IHN1cHBvcnRlZCAqLwogCiAJLyogYXVkaW8gbW9kZSAqLwogCW1lbXNldChhdWRpbywgMCwgc2l6ZW9mKCphdWRpbykpOwpAQCAtNzc3LDE2ICs3NzcsMTcgQEAKIAkJYnJlYWs7CiAJfQogCisJLyogbm9uLWF1ZGlvIGJpdCAqLworCXNwZGlmX3Rocm91Z2ggPSBhdWRpby0+YXVkaW9fY3NfaW5mb1swXSAmIDB4MDI7CisKIAkvKiBwYXNzIHRocm91Z2ggc2V0dGluZyAqLwogCWlmIChzcGRpZl90aHJvdWdoICYmCiAJICAgIChhdnBvcnQgPT0gUFMzQVZfQ01EX0FWUE9SVF9TUERJRl8wIHx8Ci0JICAgICBhdnBvcnQgPT0gUFMzQVZfQ01EX0FWUE9SVF9TUERJRl8xKSkgeworCSAgICAgYXZwb3J0ID09IFBTM0FWX0NNRF9BVlBPUlRfU1BESUZfMSB8fAorCSAgICAgYXZwb3J0ID09IFBTM0FWX0NNRF9BVlBPUlRfSERNSV8wIHx8CisJICAgICBhdnBvcnQgPT0gUFMzQVZfQ01EX0FWUE9SVF9IRE1JXzEpKSB7CiAJCWF1ZGlvLT5hdWRpb193b3JkX2JpdHMgPSBQUzNBVl9DTURfQVVESU9fV09SRF9CSVRTXzE2OwotCQlhdWRpby0+YXVkaW9fc291cmNlID0gUFMzQVZfQ01EX0FVRElPX1NPVVJDRV9TUERJRjsKLQkJaWYgKHNwZGlmX2JpdHN0cmVhbSkgewotCQkJYXVkaW8tPmF1ZGlvX2Zvcm1hdCA9IFBTM0FWX0NNRF9BVURJT19GT1JNQVRfQklUU1RSRUFNOwotCQkJYXVkaW8tPmF1ZGlvX2NzX2luZm9bMF0gfD0gQ1NfQklUOwotCQl9CisJCWF1ZGlvLT5hdWRpb19mb3JtYXQgPSBQUzNBVl9DTURfQVVESU9fRk9STUFUX0JJVFNUUkVBTTsKIAl9CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcmVndWxhdG9yL0tjb25maWcgYi9kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnCmluZGV4IGE2NTYxMjguLjRkYWRhNmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcmVndWxhdG9yL0tjb25maWcKKysrIGIvZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZwpAQCAtNTYsNCArNTYsMjggQEAKIAkgIGNoYXJnaW5nIHNlbGVjdCBiZXR3ZWVuIDEwMCBtQSBhbmQgNTAwIG1BIGNoYXJnaW5nIGN1cnJlbnQKIAkgIGxpbWl0LgogCitjb25maWcgUkVHVUxBVE9SX1dNODM1MAorCXRyaXN0YXRlICJXb2xmc29uIE1pY3JvZWxlY3Ryb25jaXMgV004MzUwIEF1ZGlvUGx1cyBQTUlDIgorCWRlcGVuZHMgb24gTUZEX1dNODM1MAorCXNlbGVjdCBSRUdVTEFUT1IKKwloZWxwCisJICBUaGlzIGRyaXZlciBwcm92aWRlcyBzdXBwb3J0IGZvciB0aGUgdm9sdGFnZSBhbmQgY3VycmVudCByZWd1bGF0b3JzCisgICAgICAgICAgb2YgdGhlIFdNODM1MCBBdWRpb1BsdXMgUE1JQy4KKworY29uZmlnIFJFR1VMQVRPUl9XTTg0MDAKKwl0cmlzdGF0ZSAiV29sZnNvbiBNaWNyb2VsZWN0cm9uY2lzIFdNODQwMCBBdWRpb1BsdXMgUE1JQyIKKwlkZXBlbmRzIG9uIE1GRF9XTTg0MDAKKwlzZWxlY3QgUkVHVUxBVE9SCisJaGVscAorCSAgVGhpcyBkcml2ZXIgcHJvdmlkZXMgc3VwcG9ydCBmb3IgdGhlIHZvbHRhZ2UgcmVndWxhdG9ycyBvZiB0aGUKKwkgIFdNODQwMCBBdWRpb1BsdXMgUE1JQy4KKworY29uZmlnIFJFR1VMQVRPUl9EQTkwM1gKKwl0cmlzdGF0ZSAiU3VwcG9ydCByZWd1bGF0b3JzIG9uIERpYWxvZyBTZW1pY29uZHVjdG9yIERBOTAzMC9EQTkwMzQgUE1JQyIKKwlkZXBlbmRzIG9uIFBNSUNfREE5MDNYCisJc2VsZWN0IFJFR1VMQVRPUgorCWhlbHAKKwkgIFNheSB5IGhlcmUgdG8gc3VwcG9ydCB0aGUgQlVDS3MgYW5kIExET3MgcmVndWxhdG9ycyBmb3VuZCBvbgorCSAgRGlhbG9nIFNlbWljb25kdWN0b3IgREE5MDMwL0RBOTAzNCBQTUlDLgorCiBlbmRtZW51CmRpZmYgLS1naXQgYS9kcml2ZXJzL3JlZ3VsYXRvci9NYWtlZmlsZSBiL2RyaXZlcnMvcmVndWxhdG9yL01ha2VmaWxlCmluZGV4IGFjMmM2NGUuLjI1NGQ0MGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcmVndWxhdG9yL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvcmVndWxhdG9yL01ha2VmaWxlCkBAIC04LDUgKzgsOCBAQAogb2JqLSQoQ09ORklHX1JFR1VMQVRPUl9WSVJUVUFMX0NPTlNVTUVSKSArPSB2aXJ0dWFsLm8KIAogb2JqLSQoQ09ORklHX1JFR1VMQVRPUl9CUTI0MDIyKSArPSBicTI0MDIyLm8KK29iai0kKENPTkZJR19SRUdVTEFUT1JfV004MzUwKSArPSB3bTgzNTAtcmVndWxhdG9yLm8KK29iai0kKENPTkZJR19SRUdVTEFUT1JfV004NDAwKSArPSB3bTg0MDAtcmVndWxhdG9yLm8KK29iai0kKENPTkZJR19SRUdVTEFUT1JfREE5MDNYKQkrPSBkYTkwM3gubwogCiBjY2ZsYWdzLSQoQ09ORklHX1JFR1VMQVRPUl9ERUJVRykgKz0gLURERUJVRwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9yZWd1bGF0b3IvYnEyNDAyMi5jIGIvZHJpdmVycy9yZWd1bGF0b3IvYnEyNDAyMi5jCmluZGV4IDI2MzY5OWQuLjM2NjU2NWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcmVndWxhdG9yL2JxMjQwMjIuYworKysgYi9kcml2ZXJzL3JlZ3VsYXRvci9icTI0MDIyLmMKQEAgLTE4LDEzICsxOCwxMyBAQAogI2luY2x1ZGUgPGxpbnV4L3JlZ3VsYXRvci9icTI0MDIyLmg+CiAjaW5jbHVkZSA8bGludXgvcmVndWxhdG9yL2RyaXZlci5oPgogCisKIHN0YXRpYyBpbnQgYnEyNDAyMl9zZXRfY3VycmVudF9saW1pdChzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldiwKIAkJCQkJaW50IG1pbl91QSwgaW50IG1heF91QSkKIHsKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gcmRldl9nZXRfZHJ2ZGF0YShyZGV2KTsKLQlzdHJ1Y3QgYnEyNDAyMl9tYWNoX2luZm8gKnBkYXRhID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJc3RydWN0IGJxMjQwMjJfbWFjaF9pbmZvICpwZGF0YSA9IHJkZXZfZ2V0X2RydmRhdGEocmRldik7CiAKLQlkZXZfZGJnKCZwZGV2LT5kZXYsICJzZXR0aW5nIGN1cnJlbnQgbGltaXQgdG8gJXMgbUFcbiIsCisJZGV2X2RiZyhyZGV2X2dldF9kZXYocmRldiksICJzZXR0aW5nIGN1cnJlbnQgbGltaXQgdG8gJXMgbUFcbiIsCiAJCW1heF91QSA+PSA1MDAwMDAgPyAiNTAwIiA6ICIxMDAiKTsKIAogCS8qIFJFVklTSVQ6IG1heWJlIHJldHVybiBlcnJvciBpZiBtaW5fdUEgIT0gMCA/ICovCkBAIC0zNCwxOCArMzQsMTYgQEAKIAogc3RhdGljIGludCBicTI0MDIyX2dldF9jdXJyZW50X2xpbWl0KHN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2KQogewotCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSByZGV2X2dldF9kcnZkYXRhKHJkZXYpOwotCXN0cnVjdCBicTI0MDIyX21hY2hfaW5mbyAqcGRhdGEgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKKwlzdHJ1Y3QgYnEyNDAyMl9tYWNoX2luZm8gKnBkYXRhID0gcmRldl9nZXRfZHJ2ZGF0YShyZGV2KTsKIAogCXJldHVybiBncGlvX2dldF92YWx1ZShwZGF0YS0+Z3Bpb19pc2V0MikgPyA1MDAwMDAgOiAxMDAwMDA7CiB9CiAKIHN0YXRpYyBpbnQgYnEyNDAyMl9lbmFibGUoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYpCiB7Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHJkZXZfZ2V0X2RydmRhdGEocmRldik7Ci0Jc3RydWN0IGJxMjQwMjJfbWFjaF9pbmZvICpwZGF0YSA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOworCXN0cnVjdCBicTI0MDIyX21hY2hfaW5mbyAqcGRhdGEgPSByZGV2X2dldF9kcnZkYXRhKHJkZXYpOwogCi0JZGV2X2RiZygmcGRldi0+ZGV2LCAiZW5hYmxpbmcgY2hhcmdlclxuIik7CisJZGV2X2RiZyhyZGV2X2dldF9kZXYocmRldiksICJlbmFibGluZyBjaGFyZ2VyXG4iKTsKIAogCWdwaW9fc2V0X3ZhbHVlKHBkYXRhLT5ncGlvX25jZSwgMCk7CiAJcmV0dXJuIDA7CkBAIC01MywxMCArNTEsOSBAQAogCiBzdGF0aWMgaW50IGJxMjQwMjJfZGlzYWJsZShzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldikKIHsKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gcmRldl9nZXRfZHJ2ZGF0YShyZGV2KTsKLQlzdHJ1Y3QgYnEyNDAyMl9tYWNoX2luZm8gKnBkYXRhID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJc3RydWN0IGJxMjQwMjJfbWFjaF9pbmZvICpwZGF0YSA9IHJkZXZfZ2V0X2RydmRhdGEocmRldik7CiAKLQlkZXZfZGJnKCZwZGV2LT5kZXYsICJkaXNhYmxpbmcgY2hhcmdlclxuIik7CisJZGV2X2RiZyhyZGV2X2dldF9kZXYocmRldiksICJkaXNhYmxpbmcgY2hhcmdlclxuIik7CiAKIAlncGlvX3NldF92YWx1ZShwZGF0YS0+Z3Bpb19uY2UsIDEpOwogCXJldHVybiAwOwpAQCAtMTA4LDcgKzEwNSw3IEBACiAJcmV0ID0gZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KHBkYXRhLT5ncGlvX2lzZXQyLCAwKTsKIAlyZXQgPSBncGlvX2RpcmVjdGlvbl9vdXRwdXQocGRhdGEtPmdwaW9fbmNlLCAxKTsKIAotCWJxMjQwMjIgPSByZWd1bGF0b3JfcmVnaXN0ZXIoJmJxMjQwMjJfZGVzYywgcGRldik7CisJYnEyNDAyMiA9IHJlZ3VsYXRvcl9yZWdpc3RlcigmYnEyNDAyMl9kZXNjLCAmcGRldi0+ZGV2LCBwZGF0YSk7CiAJaWYgKElTX0VSUihicTI0MDIyKSkgewogCQlkZXZfZGJnKCZwZGV2LT5kZXYsICJjb3VsZG4ndCByZWdpc3RlciByZWd1bGF0b3JcbiIpOwogCQlyZXQgPSBQVFJfRVJSKGJxMjQwMjIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9yZWd1bGF0b3IvY29yZS5jIGIvZHJpdmVycy9yZWd1bGF0b3IvY29yZS5jCmluZGV4IDljNzk4NjIuLjAyYTc3NDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcmVndWxhdG9yL2NvcmUuYworKysgYi9kcml2ZXJzL3JlZ3VsYXRvci9jb3JlLmMKQEAgLTIsOCArMiw5IEBACiAgKiBjb3JlLmMgIC0tICBWb2x0YWdlL0N1cnJlbnQgUmVndWxhdG9yIGZyYW1ld29yay4KICAqCiAgKiBDb3B5cmlnaHQgMjAwNywgMjAwOCBXb2xmc29uIE1pY3JvZWxlY3Ryb25pY3MgUExDLgorICogQ29weXJpZ2h0IDIwMDggU2xpbUxvZ2ljIEx0ZC4KICAqCi0gKiBBdXRob3I6IExpYW0gR2lyZHdvb2QgPGxpYW0uZ2lyZHdvb2RAd29sZnNvbm1pY3JvLmNvbT4KKyAqIEF1dGhvcjogTGlhbSBHaXJkd29vZCA8bHJnQHNsaW1sb2dpYy5jby51az4KICAqCiAgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CiAgKiAgdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCkBAIC02NCwxNCArNjUsOSBAQAogCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKIAlzdHJ1Y3QgZGV2aWNlICpkZXY7CiAJY29uc3QgY2hhciAqc3VwcGx5OwotCWNvbnN0IGNoYXIgKnJlZ3VsYXRvcjsKKwlzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmVndWxhdG9yOwogfTsKIAotc3RhdGljIGlubGluZSBzdHJ1Y3QgcmVndWxhdG9yX2RldiAqdG9fcmRldihzdHJ1Y3QgZGV2aWNlICpkKQotewotCXJldHVybiBjb250YWluZXJfb2YoZCwgc3RydWN0IHJlZ3VsYXRvcl9kZXYsIGRldik7Ci19Ci0KIC8qCiAgKiBzdHJ1Y3QgcmVndWxhdG9yCiAgKgpAQCAtMjI3LDcgKzIyMyw3IEBACiBzdGF0aWMgc3NpemVfdCByZWd1bGF0b3JfdVZfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCiAJCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKIHsKLQlzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldiA9IHRvX3JkZXYoZGV2KTsKKwlzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwogCXNzaXplX3QgcmV0OwogCiAJbXV0ZXhfbG9jaygmcmRldi0+bXV0ZXgpOwpAQCAtMjQwLDE1ICsyMzYsMzEgQEAKIHN0YXRpYyBzc2l6ZV90IHJlZ3VsYXRvcl91QV9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKIAkJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQogewotCXN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2ID0gdG9fcmRldihkZXYpOworCXN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CiAKIAlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgX3JlZ3VsYXRvcl9nZXRfY3VycmVudF9saW1pdChyZGV2KSk7CiB9CiAKK3N0YXRpYyBzc2l6ZV90IHJlZ3VsYXRvcl9uYW1lX3Nob3coc3RydWN0IGRldmljZSAqZGV2LAorCQkJICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCXN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJY29uc3QgY2hhciAqbmFtZTsKKworCWlmIChyZGV2LT5jb25zdHJhaW50cy0+bmFtZSkKKwkJbmFtZSA9IHJkZXYtPmNvbnN0cmFpbnRzLT5uYW1lOworCWVsc2UgaWYgKHJkZXYtPmRlc2MtPm5hbWUpCisJCW5hbWUgPSByZGV2LT5kZXNjLT5uYW1lOworCWVsc2UKKwkJbmFtZSA9ICIiOworCisJcmV0dXJuIHNwcmludGYoYnVmLCAiJXNcbiIsIG5hbWUpOworfQorCiBzdGF0aWMgc3NpemVfdCByZWd1bGF0b3Jfb3Btb2RlX3Nob3coc3RydWN0IGRldmljZSAqZGV2LAogCQkJCSAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQogewotCXN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2ID0gdG9fcmRldihkZXYpOworCXN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CiAJaW50IG1vZGUgPSBfcmVndWxhdG9yX2dldF9tb2RlKHJkZXYpOwogCiAJc3dpdGNoIChtb2RlKSB7CkBAIC0yNjcsNyArMjc5LDcgQEAKIHN0YXRpYyBzc2l6ZV90IHJlZ3VsYXRvcl9zdGF0ZV9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKIAkJCQkgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQogewotCXN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2ID0gdG9fcmRldihkZXYpOworCXN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CiAJaW50IHN0YXRlID0gX3JlZ3VsYXRvcl9pc19lbmFibGVkKHJkZXYpOwogCiAJaWYgKHN0YXRlID4gMCkKQEAgLTI4MSw3ICsyOTMsNyBAQAogc3RhdGljIHNzaXplX3QgcmVndWxhdG9yX21pbl91QV9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKIAkJCQkgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKIHsKLQlzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldiA9IHRvX3JkZXYoZGV2KTsKKwlzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwogCiAJaWYgKCFyZGV2LT5jb25zdHJhaW50cykKIAkJcmV0dXJuIHNwcmludGYoYnVmLCAiY29uc3RyYWludCBub3QgZGVmaW5lZFxuIik7CkBAIC0yOTIsNyArMzA0LDcgQEAKIHN0YXRpYyBzc2l6ZV90IHJlZ3VsYXRvcl9tYXhfdUFfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCiAJCQkJICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCiB7Ci0Jc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYgPSB0b19yZGV2KGRldik7CisJc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKIAogCWlmICghcmRldi0+Y29uc3RyYWludHMpCiAJCXJldHVybiBzcHJpbnRmKGJ1ZiwgImNvbnN0cmFpbnQgbm90IGRlZmluZWRcbiIpOwpAQCAtMzAzLDcgKzMxNSw3IEBACiBzdGF0aWMgc3NpemVfdCByZWd1bGF0b3JfbWluX3VWX3Nob3coc3RydWN0IGRldmljZSAqZGV2LAogCQkJCSAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQogewotCXN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2ID0gdG9fcmRldihkZXYpOworCXN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CiAKIAlpZiAoIXJkZXYtPmNvbnN0cmFpbnRzKQogCQlyZXR1cm4gc3ByaW50ZihidWYsICJjb25zdHJhaW50IG5vdCBkZWZpbmVkXG4iKTsKQEAgLTMxNCw3ICszMjYsNyBAQAogc3RhdGljIHNzaXplX3QgcmVndWxhdG9yX21heF91Vl9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKIAkJCQkgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKIHsKLQlzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldiA9IHRvX3JkZXYoZGV2KTsKKwlzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwogCiAJaWYgKCFyZGV2LT5jb25zdHJhaW50cykKIAkJcmV0dXJuIHNwcmludGYoYnVmLCAiY29uc3RyYWludCBub3QgZGVmaW5lZFxuIik7CkBAIC0zMjUsNyArMzM3LDcgQEAKIHN0YXRpYyBzc2l6ZV90IHJlZ3VsYXRvcl90b3RhbF91QV9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKIAkJCQkgICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQogewotCXN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2ID0gdG9fcmRldihkZXYpOworCXN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CiAJc3RydWN0IHJlZ3VsYXRvciAqcmVndWxhdG9yOwogCWludCB1QSA9IDA7CiAKQEAgLTMzOSwxNCArMzUxLDE0IEBACiBzdGF0aWMgc3NpemVfdCByZWd1bGF0b3JfbnVtX3VzZXJzX3Nob3coc3RydWN0IGRldmljZSAqZGV2LAogCQkJCSAgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCiB7Ci0Jc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYgPSB0b19yZGV2KGRldik7CisJc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKIAlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgcmRldi0+dXNlX2NvdW50KTsKIH0KIAogc3RhdGljIHNzaXplX3QgcmVndWxhdG9yX3R5cGVfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCiAJCQkJICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQogewotCXN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2ID0gdG9fcmRldihkZXYpOworCXN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CiAKIAlzd2l0Y2ggKHJkZXYtPmRlc2MtPnR5cGUpIHsKIAljYXNlIFJFR1VMQVRPUl9WT0xUQUdFOgpAQCAtMzYwLDcgKzM3Miw3IEBACiBzdGF0aWMgc3NpemVfdCByZWd1bGF0b3Jfc3VzcGVuZF9tZW1fdVZfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCiAJCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKIHsKLQlzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldiA9IHRvX3JkZXYoZGV2KTsKKwlzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwogCiAJaWYgKCFyZGV2LT5jb25zdHJhaW50cykKIAkJcmV0dXJuIHNwcmludGYoYnVmLCAibm90IGRlZmluZWRcbiIpOwpAQCAtMzcwLDcgKzM4Miw3IEBACiBzdGF0aWMgc3NpemVfdCByZWd1bGF0b3Jfc3VzcGVuZF9kaXNrX3VWX3Nob3coc3RydWN0IGRldmljZSAqZGV2LAogCQkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCiB7Ci0Jc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYgPSB0b19yZGV2KGRldik7CisJc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKIAogCWlmICghcmRldi0+Y29uc3RyYWludHMpCiAJCXJldHVybiBzcHJpbnRmKGJ1ZiwgIm5vdCBkZWZpbmVkXG4iKTsKQEAgLTM4MCw3ICszOTIsNyBAQAogc3RhdGljIHNzaXplX3QgcmVndWxhdG9yX3N1c3BlbmRfc3RhbmRieV91Vl9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKIAkJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQogewotCXN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2ID0gdG9fcmRldihkZXYpOworCXN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CiAKIAlpZiAoIXJkZXYtPmNvbnN0cmFpbnRzKQogCQlyZXR1cm4gc3ByaW50ZihidWYsICJub3QgZGVmaW5lZFxuIik7CkBAIC00MDYsNyArNDE4LDcgQEAKIHN0YXRpYyBzc2l6ZV90IHJlZ3VsYXRvcl9zdXNwZW5kX21lbV9tb2RlX3Nob3coc3RydWN0IGRldmljZSAqZGV2LAogCQkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCiB7Ci0Jc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYgPSB0b19yZGV2KGRldik7CisJc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKIAogCWlmICghcmRldi0+Y29uc3RyYWludHMpCiAJCXJldHVybiBzcHJpbnRmKGJ1ZiwgIm5vdCBkZWZpbmVkXG4iKTsKQEAgLTQxNyw3ICs0MjksNyBAQAogc3RhdGljIHNzaXplX3QgcmVndWxhdG9yX3N1c3BlbmRfZGlza19tb2RlX3Nob3coc3RydWN0IGRldmljZSAqZGV2LAogCQkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCiB7Ci0Jc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYgPSB0b19yZGV2KGRldik7CisJc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKIAogCWlmICghcmRldi0+Y29uc3RyYWludHMpCiAJCXJldHVybiBzcHJpbnRmKGJ1ZiwgIm5vdCBkZWZpbmVkXG4iKTsKQEAgLTQyOCw3ICs0NDAsNyBAQAogc3RhdGljIHNzaXplX3QgcmVndWxhdG9yX3N1c3BlbmRfc3RhbmRieV9tb2RlX3Nob3coc3RydWN0IGRldmljZSAqZGV2LAogCQkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCiB7Ci0Jc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYgPSB0b19yZGV2KGRldik7CisJc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKIAogCWlmICghcmRldi0+Y29uc3RyYWludHMpCiAJCXJldHVybiBzcHJpbnRmKGJ1ZiwgIm5vdCBkZWZpbmVkXG4iKTsKQEAgLTQzOSw3ICs0NTEsNyBAQAogc3RhdGljIHNzaXplX3QgcmVndWxhdG9yX3N1c3BlbmRfbWVtX3N0YXRlX3Nob3coc3RydWN0IGRldmljZSAqZGV2LAogCQkJCSAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCiB7Ci0Jc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYgPSB0b19yZGV2KGRldik7CisJc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKIAogCWlmICghcmRldi0+Y29uc3RyYWludHMpCiAJCXJldHVybiBzcHJpbnRmKGJ1ZiwgIm5vdCBkZWZpbmVkXG4iKTsKQEAgLTQ1Myw3ICs0NjUsNyBAQAogc3RhdGljIHNzaXplX3QgcmVndWxhdG9yX3N1c3BlbmRfZGlza19zdGF0ZV9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKIAkJCQkgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQogewotCXN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2ID0gdG9fcmRldihkZXYpOworCXN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CiAKIAlpZiAoIXJkZXYtPmNvbnN0cmFpbnRzKQogCQlyZXR1cm4gc3ByaW50ZihidWYsICJub3QgZGVmaW5lZFxuIik7CkBAIC00NjcsNyArNDc5LDcgQEAKIHN0YXRpYyBzc2l6ZV90IHJlZ3VsYXRvcl9zdXNwZW5kX3N0YW5kYnlfc3RhdGVfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCiAJCQkJICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKIHsKLQlzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldiA9IHRvX3JkZXYoZGV2KTsKKwlzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwogCiAJaWYgKCFyZGV2LT5jb25zdHJhaW50cykKIAkJcmV0dXJuIHNwcmludGYoYnVmLCAibm90IGRlZmluZWRcbiIpOwpAQCAtNDc3LDcgKzQ4OSw5IEBACiAJZWxzZQogCQlyZXR1cm4gc3ByaW50ZihidWYsICJkaXNhYmxlZFxuIik7CiB9CisKIHN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSByZWd1bGF0b3JfZGV2X2F0dHJzW10gPSB7CisJX19BVFRSKG5hbWUsIDA0NDQsIHJlZ3VsYXRvcl9uYW1lX3Nob3csIE5VTEwpLAogCV9fQVRUUihtaWNyb3ZvbHRzLCAwNDQ0LCByZWd1bGF0b3JfdVZfc2hvdywgTlVMTCksCiAJX19BVFRSKG1pY3JvYW1wcywgMDQ0NCwgcmVndWxhdG9yX3VBX3Nob3csIE5VTEwpLAogCV9fQVRUUihvcG1vZGUsIDA0NDQsIHJlZ3VsYXRvcl9vcG1vZGVfc2hvdywgTlVMTCksCkBAIC01MTIsNyArNTI2LDcgQEAKIAogc3RhdGljIHZvaWQgcmVndWxhdG9yX2Rldl9yZWxlYXNlKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldiA9IHRvX3JkZXYoZGV2KTsKKwlzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwogCWtmcmVlKHJkZXYpOwogfQogCkBAIC01NjksOCArNTgzLDExIEBACiAKIAkvKiBlbmFibGUgJiBkaXNhYmxlIGFyZSBtYW5kYXRvcnkgZm9yIHN1c3BlbmQgY29udHJvbCAqLwogCWlmICghcmRldi0+ZGVzYy0+b3BzLT5zZXRfc3VzcGVuZF9lbmFibGUgfHwKLQkJIXJkZXYtPmRlc2MtPm9wcy0+c2V0X3N1c3BlbmRfZGlzYWJsZSkKKwkJIXJkZXYtPmRlc2MtPm9wcy0+c2V0X3N1c3BlbmRfZGlzYWJsZSkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBubyB3YXkgdG8gc2V0IHN1c3BlbmQgc3RhdGVcbiIsCisJCQlfX2Z1bmNfXyk7CiAJCXJldHVybiAtRUlOVkFMOworCX0KIAogCWlmIChyc3RhdGUtPmVuYWJsZWQpCiAJCXJldCA9IHJkZXYtPmRlc2MtPm9wcy0+c2V0X3N1c3BlbmRfZW5hYmxlKHJkZXYpOwpAQCAtNjU2LDYgKzY3MywxNTUgQEAKIAlwcmludGsoS0VSTl9JTkZPICJyZWd1bGF0b3I6ICVzOiAlc1xuIiwgcmRldi0+ZGVzYy0+bmFtZSwgYnVmKTsKIH0KIAorLyoqCisgKiBzZXRfbWFjaGluZV9jb25zdHJhaW50cyAtIHNldHMgcmVndWxhdG9yIGNvbnN0cmFpbnRzCisgKiBAcmVndWxhdG9yOiByZWd1bGF0b3Igc291cmNlCisgKgorICogQWxsb3dzIHBsYXRmb3JtIGluaXRpYWxpc2F0aW9uIGNvZGUgdG8gZGVmaW5lIGFuZCBjb25zdHJhaW4KKyAqIHJlZ3VsYXRvciBjaXJjdWl0cyBlLmcuIHZhbGlkIHZvbHRhZ2UvY3VycmVudCByYW5nZXMsIGV0Yy4gIE5PVEU6CisgKiBDb25zdHJhaW50cyAqbXVzdCogYmUgc2V0IGJ5IHBsYXRmb3JtIGNvZGUgaW4gb3JkZXIgZm9yIHNvbWUKKyAqIHJlZ3VsYXRvciBvcGVyYXRpb25zIHRvIHByb2NlZWQgaS5lLiBzZXRfdm9sdGFnZSwgc2V0X2N1cnJlbnRfbGltaXQsCisgKiBzZXRfbW9kZS4KKyAqLworc3RhdGljIGludCBzZXRfbWFjaGluZV9jb25zdHJhaW50cyhzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldiwKKwlzdHJ1Y3QgcmVndWxhdGlvbl9jb25zdHJhaW50cyAqY29uc3RyYWludHMpCit7CisJaW50IHJldCA9IDA7CisJY29uc3QgY2hhciAqbmFtZTsKKwlzdHJ1Y3QgcmVndWxhdG9yX29wcyAqb3BzID0gcmRldi0+ZGVzYy0+b3BzOworCisJaWYgKGNvbnN0cmFpbnRzLT5uYW1lKQorCQluYW1lID0gY29uc3RyYWludHMtPm5hbWU7CisJZWxzZSBpZiAocmRldi0+ZGVzYy0+bmFtZSkKKwkJbmFtZSA9IHJkZXYtPmRlc2MtPm5hbWU7CisJZWxzZQorCQluYW1lID0gInJlZ3VsYXRvciI7CisKKwlyZGV2LT5jb25zdHJhaW50cyA9IGNvbnN0cmFpbnRzOworCisJLyogZG8gd2UgbmVlZCB0byBhcHBseSB0aGUgY29uc3RyYWludCB2b2x0YWdlICovCisJaWYgKHJkZXYtPmNvbnN0cmFpbnRzLT5hcHBseV91ViAmJgorCQlyZGV2LT5jb25zdHJhaW50cy0+bWluX3VWID09IHJkZXYtPmNvbnN0cmFpbnRzLT5tYXhfdVYgJiYKKwkJb3BzLT5zZXRfdm9sdGFnZSkgeworCQlyZXQgPSBvcHMtPnNldF92b2x0YWdlKHJkZXYsCisJCQlyZGV2LT5jb25zdHJhaW50cy0+bWluX3VWLCByZGV2LT5jb25zdHJhaW50cy0+bWF4X3VWKTsKKwkJCWlmIChyZXQgPCAwKSB7CisJCQkJcHJpbnRrKEtFUk5fRVJSICIlczogZmFpbGVkIHRvIGFwcGx5ICVkdVYgY29uc3RyYWludCB0byAlc1xuIiwKKwkJCQkgICAgICAgX19mdW5jX18sCisJCQkJICAgICAgIHJkZXYtPmNvbnN0cmFpbnRzLT5taW5fdVYsIG5hbWUpOworCQkJCXJkZXYtPmNvbnN0cmFpbnRzID0gTlVMTDsKKwkJCQlnb3RvIG91dDsKKwkJCX0KKwl9CisKKwkvKiBhcmUgd2UgZW5hYmxlZCBhdCBib290IHRpbWUgYnkgZmlybXdhcmUgLyBib290bG9hZGVyICovCisJaWYgKHJkZXYtPmNvbnN0cmFpbnRzLT5ib290X29uKQorCQlyZGV2LT51c2VfY291bnQgPSAxOworCisJLyogZG8gd2UgbmVlZCB0byBzZXR1cCBvdXIgc3VzcGVuZCBzdGF0ZSAqLworCWlmIChjb25zdHJhaW50cy0+aW5pdGlhbF9zdGF0ZSkgeworCQlyZXQgPSBzdXNwZW5kX3ByZXBhcmUocmRldiwgY29uc3RyYWludHMtPmluaXRpYWxfc3RhdGUpOworCQlpZiAocmV0IDwgMCkgeworCQkJcHJpbnRrKEtFUk5fRVJSICIlczogZmFpbGVkIHRvIHNldCBzdXNwZW5kIHN0YXRlIGZvciAlc1xuIiwKKwkJCSAgICAgICBfX2Z1bmNfXywgbmFtZSk7CisJCQlyZGV2LT5jb25zdHJhaW50cyA9IE5VTEw7CisJCQlnb3RvIG91dDsKKwkJfQorCX0KKworCS8qIGlmIGFsd2F5c19vbiBpcyBzZXQgdGhlbiB0dXJuIHRoZSByZWd1bGF0b3Igb24gaWYgaXQncyBub3QKKwkgKiBhbHJlYWR5IG9uLiAqLworCWlmIChjb25zdHJhaW50cy0+YWx3YXlzX29uICYmIG9wcy0+ZW5hYmxlICYmCisJICAgICgob3BzLT5pc19lbmFibGVkICYmICFvcHMtPmlzX2VuYWJsZWQocmRldikpIHx8CisJICAgICAoIW9wcy0+aXNfZW5hYmxlZCAmJiAhY29uc3RyYWludHMtPmJvb3Rfb24pKSkgeworCQlyZXQgPSBvcHMtPmVuYWJsZShyZGV2KTsKKwkJaWYgKHJldCA8IDApIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiJXM6IGZhaWxlZCB0byBlbmFibGUgJXNcbiIsCisJCQkgICAgICAgX19mdW5jX18sIG5hbWUpOworCQkJcmRldi0+Y29uc3RyYWludHMgPSBOVUxMOworCQkJZ290byBvdXQ7CisJCX0KKwl9CisKKwlwcmludF9jb25zdHJhaW50cyhyZGV2KTsKK291dDoKKwlyZXR1cm4gcmV0OworfQorCisvKioKKyAqIHNldF9zdXBwbHkgLSBzZXQgcmVndWxhdG9yIHN1cHBseSByZWd1bGF0b3IKKyAqIEByZWd1bGF0b3I6IHJlZ3VsYXRvciBuYW1lCisgKiBAc3VwcGx5OiBzdXBwbHkgcmVndWxhdG9yIG5hbWUKKyAqCisgKiBDYWxsZWQgYnkgcGxhdGZvcm0gaW5pdGlhbGlzYXRpb24gY29kZSB0byBzZXQgdGhlIHN1cHBseSByZWd1bGF0b3IgZm9yIHRoaXMKKyAqIHJlZ3VsYXRvci4gVGhpcyBlbnN1cmVzIHRoYXQgYSByZWd1bGF0b3JzIHN1cHBseSB3aWxsIGFsc28gYmUgZW5hYmxlZCBieSB0aGUKKyAqIGNvcmUgaWYgaXQncyBjaGlsZCBpcyBlbmFibGVkLgorICovCitzdGF0aWMgaW50IHNldF9zdXBwbHkoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYsCisJc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnN1cHBseV9yZGV2KQoreworCWludCBlcnI7CisKKwllcnIgPSBzeXNmc19jcmVhdGVfbGluaygmcmRldi0+ZGV2LmtvYmosICZzdXBwbHlfcmRldi0+ZGV2LmtvYmosCisJCQkJInN1cHBseSIpOworCWlmIChlcnIpIHsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCSAgICAgICAiJXM6IGNvdWxkIG5vdCBhZGQgZGV2aWNlIGxpbmsgJXMgZXJyICVkXG4iLAorCQkgICAgICAgX19mdW5jX18sIHN1cHBseV9yZGV2LT5kZXYua29iai5uYW1lLCBlcnIpOworCQkgICAgICAgZ290byBvdXQ7CisJfQorCXJkZXYtPnN1cHBseSA9IHN1cHBseV9yZGV2OworCWxpc3RfYWRkKCZyZGV2LT5zbGlzdCwgJnN1cHBseV9yZGV2LT5zdXBwbHlfbGlzdCk7CitvdXQ6CisJcmV0dXJuIGVycjsKK30KKworLyoqCisgKiBzZXRfY29uc3VtZXJfZGV2aWNlX3N1cHBseTogQmluZCBhIHJlZ3VsYXRvciB0byBhIHN5bWJvbGljIHN1cHBseQorICogQHJlZ3VsYXRvcjogcmVndWxhdG9yIHNvdXJjZQorICogQGRldjogICAgICAgZGV2aWNlIHRoZSBzdXBwbHkgYXBwbGllcyB0bworICogQHN1cHBseTogICAgc3ltYm9saWMgbmFtZSBmb3Igc3VwcGx5CisgKgorICogQWxsb3dzIHBsYXRmb3JtIGluaXRpYWxpc2F0aW9uIGNvZGUgdG8gbWFwIHBoeXNpY2FsIHJlZ3VsYXRvcgorICogc291cmNlcyB0byBzeW1ib2xpYyBuYW1lcyBmb3Igc3VwcGxpZXMgZm9yIHVzZSBieSBkZXZpY2VzLiAgRGV2aWNlcworICogc2hvdWxkIHVzZSB0aGVzZSBzeW1ib2xpYyBuYW1lcyB0byByZXF1ZXN0IHJlZ3VsYXRvcnMsIGF2b2lkaW5nIHRoZQorICogbmVlZCB0byBwcm92aWRlIGJvYXJkLXNwZWNpZmljIHJlZ3VsYXRvciBuYW1lcyBhcyBwbGF0Zm9ybSBkYXRhLgorICovCitzdGF0aWMgaW50IHNldF9jb25zdW1lcl9kZXZpY2Vfc3VwcGx5KHN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2LAorCXN0cnVjdCBkZXZpY2UgKmNvbnN1bWVyX2RldiwgY29uc3QgY2hhciAqc3VwcGx5KQoreworCXN0cnVjdCByZWd1bGF0b3JfbWFwICpub2RlOworCisJaWYgKHN1cHBseSA9PSBOVUxMKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCW5vZGUgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgcmVndWxhdG9yX21hcCksIEdGUF9LRVJORUwpOworCWlmIChub2RlID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCisJbm9kZS0+cmVndWxhdG9yID0gcmRldjsKKwlub2RlLT5kZXYgPSBjb25zdW1lcl9kZXY7CisJbm9kZS0+c3VwcGx5ID0gc3VwcGx5OworCisJbGlzdF9hZGQoJm5vZGUtPmxpc3QsICZyZWd1bGF0b3JfbWFwX2xpc3QpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCB1bnNldF9jb25zdW1lcl9kZXZpY2Vfc3VwcGx5KHN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2LAorCXN0cnVjdCBkZXZpY2UgKmNvbnN1bWVyX2RldikKK3sKKwlzdHJ1Y3QgcmVndWxhdG9yX21hcCAqbm9kZSwgKm47CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUobm9kZSwgbiwgJnJlZ3VsYXRvcl9tYXBfbGlzdCwgbGlzdCkgeworCQlpZiAocmRldiA9PSBub2RlLT5yZWd1bGF0b3IgJiYKKwkJCWNvbnN1bWVyX2RldiA9PSBub2RlLT5kZXYpIHsKKwkJCWxpc3RfZGVsKCZub2RlLT5saXN0KTsKKwkJCWtmcmVlKG5vZGUpOworCQkJcmV0dXJuOworCQl9CisJfQorfQorCiAjZGVmaW5lIFJFR19TVFJfU0laRQkzMgogCiBzdGF0aWMgc3RydWN0IHJlZ3VsYXRvciAqY3JlYXRlX3JlZ3VsYXRvcihzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldiwKQEAgLTc0Niw3ICs5MTIsNiBAQAogCXN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2OwogCXN0cnVjdCByZWd1bGF0b3JfbWFwICptYXA7CiAJc3RydWN0IHJlZ3VsYXRvciAqcmVndWxhdG9yID0gRVJSX1BUUigtRU5PREVWKTsKLQljb25zdCBjaGFyICpzdXBwbHkgPSBpZDsKIAogCWlmIChpZCA9PSBOVUxMKSB7CiAJCXByaW50ayhLRVJOX0VSUiAicmVndWxhdG9yOiBnZXQoKSB3aXRoIG5vIGlkZW50aWZpZXJcbiIpOwpAQCAtNzU4LDE1ICs5MjMsOSBAQAogCWxpc3RfZm9yX2VhY2hfZW50cnkobWFwLCAmcmVndWxhdG9yX21hcF9saXN0LCBsaXN0KSB7CiAJCWlmIChkZXYgPT0gbWFwLT5kZXYgJiYKIAkJICAgIHN0cmNtcChtYXAtPnN1cHBseSwgaWQpID09IDApIHsKLQkJCXN1cHBseSA9IG1hcC0+cmVndWxhdG9yOwotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHJkZXYsICZyZWd1bGF0b3JfbGlzdCwgbGlzdCkgewotCQlpZiAoc3RyY21wKHN1cHBseSwgcmRldi0+ZGVzYy0+bmFtZSkgPT0gMCAmJgotCQkgICAgdHJ5X21vZHVsZV9nZXQocmRldi0+b3duZXIpKQorCQkJcmRldiA9IG1hcC0+cmVndWxhdG9yOwogCQkJZ290byBmb3VuZDsKKwkJfQogCX0KIAlwcmludGsoS0VSTl9FUlIgInJlZ3VsYXRvcjogVW5hYmxlIHRvIGdldCByZXF1ZXN0ZWQgcmVndWxhdG9yOiAlc1xuIiwKIAkgICAgICAgaWQpOwpAQCAtNzc0LDEyICs5MzMsMTYgQEAKIAlyZXR1cm4gcmVndWxhdG9yOwogCiBmb3VuZDoKKwlpZiAoIXRyeV9tb2R1bGVfZ2V0KHJkZXYtPm93bmVyKSkKKwkJZ290byBvdXQ7CisKIAlyZWd1bGF0b3IgPSBjcmVhdGVfcmVndWxhdG9yKHJkZXYsIGRldiwgaWQpOwogCWlmIChyZWd1bGF0b3IgPT0gTlVMTCkgewogCQlyZWd1bGF0b3IgPSBFUlJfUFRSKC1FTk9NRU0pOwogCQltb2R1bGVfcHV0KHJkZXYtPm93bmVyKTsKIAl9CiAKK291dDoKIAltdXRleF91bmxvY2soJnJlZ3VsYXRvcl9saXN0X211dGV4KTsKIAlyZXR1cm4gcmVndWxhdG9yOwogfQpAQCAtMTU1OSwxMSArMTcyMiwxMiBAQAogICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MuCiAgKi8KIHN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZWd1bGF0b3JfcmVnaXN0ZXIoc3RydWN0IHJlZ3VsYXRvcl9kZXNjICpyZWd1bGF0b3JfZGVzYywKLQkJCQkJICB2b2lkICpyZWdfZGF0YSkKKwlzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRyaXZlcl9kYXRhKQogewogCXN0YXRpYyBhdG9taWNfdCByZWd1bGF0b3Jfbm8gPSBBVE9NSUNfSU5JVCgwKTsKIAlzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldjsKLQlpbnQgcmV0OworCXN0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhICppbml0X2RhdGEgPSBkZXYtPnBsYXRmb3JtX2RhdGE7CisJaW50IHJldCwgaTsKIAogCWlmIChyZWd1bGF0b3JfZGVzYyA9PSBOVUxMKQogCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKQEAgLTE1NzUsNiArMTczOSw5IEBACiAJICAgICFyZWd1bGF0b3JfZGVzYy0+dHlwZSA9PSBSRUdVTEFUT1JfQ1VSUkVOVCkKIAkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CiAKKwlpZiAoIWluaXRfZGF0YSkKKwkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CisKIAlyZGV2ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHJlZ3VsYXRvcl9kZXYpLCBHRlBfS0VSTkVMKTsKIAlpZiAocmRldiA9PSBOVUxMKQogCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKQEAgLTE1ODIsNyArMTc0OSw3IEBACiAJbXV0ZXhfbG9jaygmcmVndWxhdG9yX2xpc3RfbXV0ZXgpOwogCiAJbXV0ZXhfaW5pdCgmcmRldi0+bXV0ZXgpOwotCXJkZXYtPnJlZ19kYXRhID0gcmVnX2RhdGE7CisJcmRldi0+cmVnX2RhdGEgPSBkcml2ZXJfZGF0YTsKIAlyZGV2LT5vd25lciA9IHJlZ3VsYXRvcl9kZXNjLT5vd25lcjsKIAlyZGV2LT5kZXNjID0gcmVndWxhdG9yX2Rlc2M7CiAJSU5JVF9MSVNUX0hFQUQoJnJkZXYtPmNvbnN1bWVyX2xpc3QpOwpAQCAtMTU5MSwyMCArMTc1OCw2OCBAQAogCUlOSVRfTElTVF9IRUFEKCZyZGV2LT5zbGlzdCk7CiAJQkxPQ0tJTkdfSU5JVF9OT1RJRklFUl9IRUFEKCZyZGV2LT5ub3RpZmllcik7CiAKLQlyZGV2LT5kZXYuY2xhc3MgPSAmcmVndWxhdG9yX2NsYXNzOwotCWRldmljZV9pbml0aWFsaXplKCZyZGV2LT5kZXYpOwotCXNucHJpbnRmKHJkZXYtPmRldi5idXNfaWQsIHNpemVvZihyZGV2LT5kZXYuYnVzX2lkKSwKLQkJICJyZWd1bGF0b3JfJWxkXyVzIiwKLQkJICh1bnNpZ25lZCBsb25nKWF0b21pY19pbmNfcmV0dXJuKCZyZWd1bGF0b3Jfbm8pIC0gMSwKLQkJIHJlZ3VsYXRvcl9kZXNjLT5uYW1lKTsKKwkvKiBwcmVmb3JtIGFueSByZWd1bGF0b3Igc3BlY2lmaWMgaW5pdCAqLworCWlmIChpbml0X2RhdGEtPnJlZ3VsYXRvcl9pbml0KSB7CisJCXJldCA9IGluaXRfZGF0YS0+cmVndWxhdG9yX2luaXQocmRldi0+cmVnX2RhdGEpOworCQlpZiAocmV0IDwgMCkgeworCQkJa2ZyZWUocmRldik7CisJCQlyZGV2ID0gRVJSX1BUUihyZXQpOworCQkJZ290byBvdXQ7CisJCX0KKwl9CiAKLQlyZXQgPSBkZXZpY2VfYWRkKCZyZGV2LT5kZXYpOwotCWlmIChyZXQgPT0gMCkKLQkJbGlzdF9hZGQoJnJkZXYtPmxpc3QsICZyZWd1bGF0b3JfbGlzdCk7Ci0JZWxzZSB7CisJLyogc2V0IHJlZ3VsYXRvciBjb25zdHJhaW50cyAqLworCXJldCA9IHNldF9tYWNoaW5lX2NvbnN0cmFpbnRzKHJkZXYsICZpbml0X2RhdGEtPmNvbnN0cmFpbnRzKTsKKwlpZiAocmV0IDwgMCkgewogCQlrZnJlZShyZGV2KTsKIAkJcmRldiA9IEVSUl9QVFIocmV0KTsKKwkJZ290byBvdXQ7CiAJfQorCisJLyogcmVnaXN0ZXIgd2l0aCBzeXNmcyAqLworCXJkZXYtPmRldi5jbGFzcyA9ICZyZWd1bGF0b3JfY2xhc3M7CisJcmRldi0+ZGV2LnBhcmVudCA9IGRldjsKKwlzbnByaW50ZihyZGV2LT5kZXYuYnVzX2lkLCBzaXplb2YocmRldi0+ZGV2LmJ1c19pZCksCisJCSAicmVndWxhdG9yLiVkIiwgYXRvbWljX2luY19yZXR1cm4oJnJlZ3VsYXRvcl9ubykgLSAxKTsKKwlyZXQgPSBkZXZpY2VfcmVnaXN0ZXIoJnJkZXYtPmRldik7CisJaWYgKHJldCAhPSAwKSB7CisJCWtmcmVlKHJkZXYpOworCQlyZGV2ID0gRVJSX1BUUihyZXQpOworCQlnb3RvIG91dDsKKwl9CisKKwlkZXZfc2V0X2RydmRhdGEoJnJkZXYtPmRldiwgcmRldik7CisKKwkvKiBzZXQgc3VwcGx5IHJlZ3VsYXRvciBpZiBpdCBleGlzdHMgKi8KKwlpZiAoaW5pdF9kYXRhLT5zdXBwbHlfcmVndWxhdG9yX2RldikgeworCQlyZXQgPSBzZXRfc3VwcGx5KHJkZXYsCisJCQlkZXZfZ2V0X2RydmRhdGEoaW5pdF9kYXRhLT5zdXBwbHlfcmVndWxhdG9yX2RldikpOworCQlpZiAocmV0IDwgMCkgeworCQkJZGV2aWNlX3VucmVnaXN0ZXIoJnJkZXYtPmRldik7CisJCQlrZnJlZShyZGV2KTsKKwkJCXJkZXYgPSBFUlJfUFRSKHJldCk7CisJCQlnb3RvIG91dDsKKwkJfQorCX0KKworCS8qIGFkZCBjb25zdW1lcnMgZGV2aWNlcyAqLworCWZvciAoaSA9IDA7IGkgPCBpbml0X2RhdGEtPm51bV9jb25zdW1lcl9zdXBwbGllczsgaSsrKSB7CisJCXJldCA9IHNldF9jb25zdW1lcl9kZXZpY2Vfc3VwcGx5KHJkZXYsCisJCQlpbml0X2RhdGEtPmNvbnN1bWVyX3N1cHBsaWVzW2ldLmRldiwKKwkJCWluaXRfZGF0YS0+Y29uc3VtZXJfc3VwcGxpZXNbaV0uc3VwcGx5KTsKKwkJaWYgKHJldCA8IDApIHsKKwkJCWZvciAoLS1pOyBpID49IDA7IGktLSkKKwkJCQl1bnNldF9jb25zdW1lcl9kZXZpY2Vfc3VwcGx5KHJkZXYsCisJCQkJCWluaXRfZGF0YS0+Y29uc3VtZXJfc3VwcGxpZXNbaV0uZGV2KTsKKwkJCWRldmljZV91bnJlZ2lzdGVyKCZyZGV2LT5kZXYpOworCQkJa2ZyZWUocmRldik7CisJCQlyZGV2ID0gRVJSX1BUUihyZXQpOworCQkJZ290byBvdXQ7CisJCX0KKwl9CisKKwlsaXN0X2FkZCgmcmRldi0+bGlzdCwgJnJlZ3VsYXRvcl9saXN0KTsKK291dDoKIAltdXRleF91bmxvY2soJnJlZ3VsYXRvcl9saXN0X211dGV4KTsKIAlyZXR1cm4gcmRldjsKIH0KQEAgLTE2MzEsMTg3ICsxODQ2LDYgQEAKIEVYUE9SVF9TWU1CT0xfR1BMKHJlZ3VsYXRvcl91bnJlZ2lzdGVyKTsKIAogLyoqCi0gKiByZWd1bGF0b3Jfc2V0X3N1cHBseSAtIHNldCByZWd1bGF0b3Igc3VwcGx5IHJlZ3VsYXRvcgotICogQHJlZ3VsYXRvcjogcmVndWxhdG9yIG5hbWUKLSAqIEBzdXBwbHk6IHN1cHBseSByZWd1bGF0b3IgbmFtZQotICoKLSAqIENhbGxlZCBieSBwbGF0Zm9ybSBpbml0aWFsaXNhdGlvbiBjb2RlIHRvIHNldCB0aGUgc3VwcGx5IHJlZ3VsYXRvciBmb3IgdGhpcwotICogcmVndWxhdG9yLiBUaGlzIGVuc3VyZXMgdGhhdCBhIHJlZ3VsYXRvcnMgc3VwcGx5IHdpbGwgYWxzbyBiZSBlbmFibGVkIGJ5IHRoZQotICogY29yZSBpZiBpdCdzIGNoaWxkIGlzIGVuYWJsZWQuCi0gKi8KLWludCByZWd1bGF0b3Jfc2V0X3N1cHBseShjb25zdCBjaGFyICpyZWd1bGF0b3IsIGNvbnN0IGNoYXIgKnN1cHBseSkKLXsKLQlzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldiwgKnN1cHBseV9yZGV2OwotCWludCBlcnI7Ci0KLQlpZiAocmVndWxhdG9yID09IE5VTEwgfHwgc3VwcGx5ID09IE5VTEwpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JbXV0ZXhfbG9jaygmcmVndWxhdG9yX2xpc3RfbXV0ZXgpOwotCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShyZGV2LCAmcmVndWxhdG9yX2xpc3QsIGxpc3QpIHsKLQkJaWYgKCFzdHJjbXAocmRldi0+ZGVzYy0+bmFtZSwgcmVndWxhdG9yKSkKLQkJCWdvdG8gZm91bmRfcmVndWxhdG9yOwotCX0KLQltdXRleF91bmxvY2soJnJlZ3VsYXRvcl9saXN0X211dGV4KTsKLQlyZXR1cm4gLUVOT0RFVjsKLQotZm91bmRfcmVndWxhdG9yOgotCWxpc3RfZm9yX2VhY2hfZW50cnkoc3VwcGx5X3JkZXYsICZyZWd1bGF0b3JfbGlzdCwgbGlzdCkgewotCQlpZiAoIXN0cmNtcChzdXBwbHlfcmRldi0+ZGVzYy0+bmFtZSwgc3VwcGx5KSkKLQkJCWdvdG8gZm91bmRfc3VwcGx5OwotCX0KLQltdXRleF91bmxvY2soJnJlZ3VsYXRvcl9saXN0X211dGV4KTsKLQlyZXR1cm4gLUVOT0RFVjsKLQotZm91bmRfc3VwcGx5OgotCWVyciA9IHN5c2ZzX2NyZWF0ZV9saW5rKCZyZGV2LT5kZXYua29iaiwgJnN1cHBseV9yZGV2LT5kZXYua29iaiwKLQkJCQkic3VwcGx5Iik7Ci0JaWYgKGVycikgewotCQlwcmludGsoS0VSTl9FUlIKLQkJICAgICAgICIlczogY291bGQgbm90IGFkZCBkZXZpY2UgbGluayAlcyBlcnIgJWRcbiIsCi0JCSAgICAgICBfX2Z1bmNfXywgc3VwcGx5X3JkZXYtPmRldi5rb2JqLm5hbWUsIGVycik7Ci0JCSAgICAgICBnb3RvIG91dDsKLQl9Ci0JcmRldi0+c3VwcGx5ID0gc3VwcGx5X3JkZXY7Ci0JbGlzdF9hZGQoJnJkZXYtPnNsaXN0LCAmc3VwcGx5X3JkZXYtPnN1cHBseV9saXN0KTsKLW91dDoKLQltdXRleF91bmxvY2soJnJlZ3VsYXRvcl9saXN0X211dGV4KTsKLQlyZXR1cm4gZXJyOwotfQotRVhQT1JUX1NZTUJPTF9HUEwocmVndWxhdG9yX3NldF9zdXBwbHkpOwotCi0vKioKLSAqIHJlZ3VsYXRvcl9nZXRfc3VwcGx5IC0gZ2V0IHJlZ3VsYXRvciBzdXBwbHkgcmVndWxhdG9yCi0gKiBAcmVndWxhdG9yOiByZWd1bGF0b3IgbmFtZQotICoKLSAqIFJldHVybnMgdGhlIHN1cHBseSBzdXBwbHkgcmVndWxhdG9yIG5hbWUgb3IgTlVMTCBpZiBubyBzdXBwbHkgcmVndWxhdG9yCi0gKiBleGlzdHMgKGkuZSB0aGUgcmVndWxhdG9yIGlzIHN1cHBsaWVkIGRpcmVjdGx5IGZyb20gVVNCLCBMaW5lLCBCYXR0ZXJ5LCBldGMpCi0gKi8KLWNvbnN0IGNoYXIgKnJlZ3VsYXRvcl9nZXRfc3VwcGx5KGNvbnN0IGNoYXIgKnJlZ3VsYXRvcikKLXsKLQlzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldjsKLQotCWlmIChyZWd1bGF0b3IgPT0gTlVMTCkKLQkJcmV0dXJuIE5VTEw7Ci0KLQltdXRleF9sb2NrKCZyZWd1bGF0b3JfbGlzdF9tdXRleCk7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeShyZGV2LCAmcmVndWxhdG9yX2xpc3QsIGxpc3QpIHsKLQkJaWYgKCFzdHJjbXAocmRldi0+ZGVzYy0+bmFtZSwgcmVndWxhdG9yKSkKLQkJCWdvdG8gZm91bmQ7Ci0JfQotCW11dGV4X3VubG9jaygmcmVndWxhdG9yX2xpc3RfbXV0ZXgpOwotCXJldHVybiBOVUxMOwotCi1mb3VuZDoKLQltdXRleF91bmxvY2soJnJlZ3VsYXRvcl9saXN0X211dGV4KTsKLQlpZiAocmRldi0+c3VwcGx5KQotCQlyZXR1cm4gcmRldi0+c3VwcGx5LT5kZXNjLT5uYW1lOwotCWVsc2UKLQkJcmV0dXJuIE5VTEw7Ci19Ci1FWFBPUlRfU1lNQk9MX0dQTChyZWd1bGF0b3JfZ2V0X3N1cHBseSk7Ci0KLS8qKgotICogcmVndWxhdG9yX3NldF9tYWNoaW5lX2NvbnN0cmFpbnRzIC0gc2V0cyByZWd1bGF0b3IgY29uc3RyYWludHMKLSAqIEByZWd1bGF0b3I6IHJlZ3VsYXRvciBzb3VyY2UKLSAqCi0gKiBBbGxvd3MgcGxhdGZvcm0gaW5pdGlhbGlzYXRpb24gY29kZSB0byBkZWZpbmUgYW5kIGNvbnN0cmFpbgotICogcmVndWxhdG9yIGNpcmN1aXRzIGUuZy4gdmFsaWQgdm9sdGFnZS9jdXJyZW50IHJhbmdlcywgZXRjLiAgTk9URToKLSAqIENvbnN0cmFpbnRzICptdXN0KiBiZSBzZXQgYnkgcGxhdGZvcm0gY29kZSBpbiBvcmRlciBmb3Igc29tZQotICogcmVndWxhdG9yIG9wZXJhdGlvbnMgdG8gcHJvY2VlZCBpLmUuIHNldF92b2x0YWdlLCBzZXRfY3VycmVudF9saW1pdCwKLSAqIHNldF9tb2RlLgotICovCi1pbnQgcmVndWxhdG9yX3NldF9tYWNoaW5lX2NvbnN0cmFpbnRzKGNvbnN0IGNoYXIgKnJlZ3VsYXRvcl9uYW1lLAotCXN0cnVjdCByZWd1bGF0aW9uX2NvbnN0cmFpbnRzICpjb25zdHJhaW50cykKLXsKLQlzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldjsKLQlpbnQgcmV0ID0gMDsKLQotCWlmIChyZWd1bGF0b3JfbmFtZSA9PSBOVUxMKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCW11dGV4X2xvY2soJnJlZ3VsYXRvcl9saXN0X211dGV4KTsKLQotCWxpc3RfZm9yX2VhY2hfZW50cnkocmRldiwgJnJlZ3VsYXRvcl9saXN0LCBsaXN0KSB7Ci0JCWlmICghc3RyY21wKHJlZ3VsYXRvcl9uYW1lLCByZGV2LT5kZXNjLT5uYW1lKSkKLQkJCWdvdG8gZm91bmQ7Ci0JfQotCXJldCA9IC1FTk9ERVY7Ci0JZ290byBvdXQ7Ci0KLWZvdW5kOgotCW11dGV4X2xvY2soJnJkZXYtPm11dGV4KTsKLQlyZGV2LT5jb25zdHJhaW50cyA9IGNvbnN0cmFpbnRzOwotCi0JLyogZG8gd2UgbmVlZCB0byBhcHBseSB0aGUgY29uc3RyYWludCB2b2x0YWdlICovCi0JaWYgKHJkZXYtPmNvbnN0cmFpbnRzLT5hcHBseV91ViAmJgotCQlyZGV2LT5jb25zdHJhaW50cy0+bWluX3VWID09IHJkZXYtPmNvbnN0cmFpbnRzLT5tYXhfdVYgJiYKLQkJcmRldi0+ZGVzYy0+b3BzLT5zZXRfdm9sdGFnZSkgewotCQlyZXQgPSByZGV2LT5kZXNjLT5vcHMtPnNldF92b2x0YWdlKHJkZXYsCi0JCQlyZGV2LT5jb25zdHJhaW50cy0+bWluX3VWLCByZGV2LT5jb25zdHJhaW50cy0+bWF4X3VWKTsKLQkJCWlmIChyZXQgPCAwKSB7Ci0JCQkJcHJpbnRrKEtFUk5fRVJSICIlczogZmFpbGVkIHRvIGFwcGx5ICVkdVYiCi0JCQkJCSIgY29uc3RyYWludFxuIiwgX19mdW5jX18sCi0JCQkJCXJkZXYtPmNvbnN0cmFpbnRzLT5taW5fdVYpOwotCQkJCXJkZXYtPmNvbnN0cmFpbnRzID0gTlVMTDsKLQkJCQlnb3RvIG91dDsKLQkJCX0KLQl9Ci0KLQkvKiBhcmUgd2UgZW5hYmxlZCBhdCBib290IHRpbWUgYnkgZmlybXdhcmUgLyBib290bG9hZGVyICovCi0JaWYgKHJkZXYtPmNvbnN0cmFpbnRzLT5ib290X29uKQotCQlyZGV2LT51c2VfY291bnQgPSAxOwotCi0JLyogZG8gd2UgbmVlZCB0byBzZXR1cCBvdXIgc3VzcGVuZCBzdGF0ZSAqLwotCWlmIChjb25zdHJhaW50cy0+aW5pdGlhbF9zdGF0ZSkKLQkJcmV0ID0gc3VzcGVuZF9wcmVwYXJlKHJkZXYsIGNvbnN0cmFpbnRzLT5pbml0aWFsX3N0YXRlKTsKLQotCXByaW50X2NvbnN0cmFpbnRzKHJkZXYpOwotCW11dGV4X3VubG9jaygmcmRldi0+bXV0ZXgpOwotCi1vdXQ6Ci0JbXV0ZXhfdW5sb2NrKCZyZWd1bGF0b3JfbGlzdF9tdXRleCk7Ci0JcmV0dXJuIHJldDsKLX0KLUVYUE9SVF9TWU1CT0xfR1BMKHJlZ3VsYXRvcl9zZXRfbWFjaGluZV9jb25zdHJhaW50cyk7Ci0KLQotLyoqCi0gKiByZWd1bGF0b3Jfc2V0X2RldmljZV9zdXBwbHk6IEJpbmQgYSByZWd1bGF0b3IgdG8gYSBzeW1ib2xpYyBzdXBwbHkKLSAqIEByZWd1bGF0b3I6IHJlZ3VsYXRvciBzb3VyY2UKLSAqIEBkZXY6ICAgICAgIGRldmljZSB0aGUgc3VwcGx5IGFwcGxpZXMgdG8KLSAqIEBzdXBwbHk6ICAgIHN5bWJvbGljIG5hbWUgZm9yIHN1cHBseQotICoKLSAqIEFsbG93cyBwbGF0Zm9ybSBpbml0aWFsaXNhdGlvbiBjb2RlIHRvIG1hcCBwaHlzaWNhbCByZWd1bGF0b3IKLSAqIHNvdXJjZXMgdG8gc3ltYm9saWMgbmFtZXMgZm9yIHN1cHBsaWVzIGZvciB1c2UgYnkgZGV2aWNlcy4gIERldmljZXMKLSAqIHNob3VsZCB1c2UgdGhlc2Ugc3ltYm9saWMgbmFtZXMgdG8gcmVxdWVzdCByZWd1bGF0b3JzLCBhdm9pZGluZyB0aGUKLSAqIG5lZWQgdG8gcHJvdmlkZSBib2FyZC1zcGVjaWZpYyByZWd1bGF0b3IgbmFtZXMgYXMgcGxhdGZvcm0gZGF0YS4KLSAqLwotaW50IHJlZ3VsYXRvcl9zZXRfZGV2aWNlX3N1cHBseShjb25zdCBjaGFyICpyZWd1bGF0b3IsIHN0cnVjdCBkZXZpY2UgKmRldiwKLQkJCQljb25zdCBjaGFyICpzdXBwbHkpCi17Ci0Jc3RydWN0IHJlZ3VsYXRvcl9tYXAgKm5vZGU7Ci0KLQlpZiAocmVndWxhdG9yID09IE5VTEwgfHwgc3VwcGx5ID09IE5VTEwpCi0JCXJldHVybiAtRUlOVkFMOwotCi0Jbm9kZSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCByZWd1bGF0b3JfbWFwKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKG5vZGUgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQlub2RlLT5yZWd1bGF0b3IgPSByZWd1bGF0b3I7Ci0Jbm9kZS0+ZGV2ID0gZGV2OwotCW5vZGUtPnN1cHBseSA9IHN1cHBseTsKLQotCW11dGV4X2xvY2soJnJlZ3VsYXRvcl9saXN0X211dGV4KTsKLQlsaXN0X2FkZCgmbm9kZS0+bGlzdCwgJnJlZ3VsYXRvcl9tYXBfbGlzdCk7Ci0JbXV0ZXhfdW5sb2NrKCZyZWd1bGF0b3JfbGlzdF9tdXRleCk7Ci0JcmV0dXJuIDA7Ci19Ci1FWFBPUlRfU1lNQk9MX0dQTChyZWd1bGF0b3Jfc2V0X2RldmljZV9zdXBwbHkpOwotCi0vKioKICAqIHJlZ3VsYXRvcl9zdXNwZW5kX3ByZXBhcmU6IHByZXBhcmUgcmVndWxhdG9ycyBmb3Igc3lzdGVtIHdpZGUgc3VzcGVuZAogICogQHN0YXRlOiBzeXN0ZW0gc3VzcGVuZCBzdGF0ZQogICoKQEAgLTE4OTMsNiArMTkyNywxOCBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwocmRldl9nZXRfaWQpOwogCitzdHJ1Y3QgZGV2aWNlICpyZGV2X2dldF9kZXYoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYpCit7CisJcmV0dXJuICZyZGV2LT5kZXY7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChyZGV2X2dldF9kZXYpOworCit2b2lkICpyZWd1bGF0b3JfZ2V0X2luaXRfZHJ2ZGF0YShzdHJ1Y3QgcmVndWxhdG9yX2luaXRfZGF0YSAqcmVnX2luaXRfZGF0YSkKK3sKKwlyZXR1cm4gcmVnX2luaXRfZGF0YS0+ZHJpdmVyX2RhdGE7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChyZWd1bGF0b3JfZ2V0X2luaXRfZHJ2ZGF0YSk7CisKIHN0YXRpYyBpbnQgX19pbml0IHJlZ3VsYXRvcl9pbml0KHZvaWQpCiB7CiAJcHJpbnRrKEtFUk5fSU5GTyAicmVndWxhdG9yOiBjb3JlIHZlcnNpb24gJXNcbiIsIFJFR1VMQVRPUl9WRVJTSU9OKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcmVndWxhdG9yL2RhOTAzeC5jIGIvZHJpdmVycy9yZWd1bGF0b3IvZGE5MDN4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzY4OGUzMwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvcmVndWxhdG9yL2RhOTAzeC5jCkBAIC0wLDAgKzEsNTEzIEBACisvKgorICogUmVndWxhdG9ycyBkcml2ZXIgZm9yIERpYWxvZyBTZW1pY29uZHVjdG9yIERBOTAzeAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDA4IE1hcnZlbGwgSW50ZXJuYXRpb25hbCBMdGQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQ29tcHVsYWIgTHRkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9yZWd1bGF0b3IvZHJpdmVyLmg+CisjaW5jbHVkZSA8bGludXgvcmVndWxhdG9yL21hY2hpbmUuaD4KKyNpbmNsdWRlIDxsaW51eC9tZmQvZGE5MDN4Lmg+CisKKy8qIERBOTAzMCBSZWdpc3RlcnMgKi8KKyNkZWZpbmUgREE5MDMwX0lOVkFMCQkoLTEpCisjZGVmaW5lIERBOTAzMF9MRE8xMDExCQkoMHgxMCkKKyNkZWZpbmUgREE5MDMwX0xETzE1CQkoMHgxMSkKKyNkZWZpbmUgREE5MDMwX0xETzE0MTYJCSgweDEyKQorI2RlZmluZSBEQTkwMzBfTERPMTgxOQkJKDB4MTMpCisjZGVmaW5lIERBOTAzMF9MRE8xNwkJKDB4MTQpCisjZGVmaW5lIERBOTAzMF9CVUNLMkRWTTEJKDB4MTUpCisjZGVmaW5lIERBOTAzMF9CVUNLMkRWTTIJKDB4MTYpCisjZGVmaW5lIERBOTAzMF9SQ1RMMTEJCSgweDE3KQorI2RlZmluZSBEQTkwMzBfUkNUTDIxCQkoMHgxOCkKKyNkZWZpbmUgREE5MDMwX0xETzEJCSgweDkwKQorI2RlZmluZSBEQTkwMzBfTERPMjMJCSgweDkxKQorI2RlZmluZSBEQTkwMzBfTERPNDUJCSgweDkyKQorI2RlZmluZSBEQTkwMzBfTERPNgkJKDB4OTMpCisjZGVmaW5lIERBOTAzMF9MRE83OAkJKDB4OTQpCisjZGVmaW5lIERBOTAzMF9MRE85MTIJCSgweDk1KQorI2RlZmluZSBEQTkwMzBfQlVDSwkJKDB4OTYpCisjZGVmaW5lIERBOTAzMF9SQ1RMMTIJCSgweDk3KQorI2RlZmluZSBEQTkwMzBfUkNUTDIyCQkoMHg5OCkKKyNkZWZpbmUgREE5MDMwX0xET19VTkxPQ0sJKDB4YTApCisjZGVmaW5lIERBOTAzMF9MRE9fVU5MT0NLX01BU0sJKDB4ZTApCisjZGVmaW5lIERBOTAzNF9PVkVSMQkJKDB4MTApCisKKy8qIERBOTAzNCBSZWdpc3RlcnMgKi8KKyNkZWZpbmUgREE5MDM0X0lOVkFMCQkoLTEpCisjZGVmaW5lIERBOTAzNF9PVkVSMgkJKDB4MTEpCisjZGVmaW5lIERBOTAzNF9PVkVSMwkJKDB4MTIpCisjZGVmaW5lIERBOTAzNF9MRE82NDMJCSgweDEzKQorI2RlZmluZSBEQTkwMzRfTERPOTg3CQkoMHgxNCkKKyNkZWZpbmUgREE5MDM0X0xETzExMTAJCSgweDE1KQorI2RlZmluZSBEQTkwMzRfTERPMTMxMgkJKDB4MTYpCisjZGVmaW5lIERBOTAzNF9MRE8xNTE0CQkoMHgxNykKKyNkZWZpbmUgREE5MDM0X1ZDQzEJCSgweDIwKQorI2RlZmluZSBEQTkwMzRfQURUVjEJCSgweDIzKQorI2RlZmluZSBEQTkwMzRfQURUVjIJCSgweDI0KQorI2RlZmluZSBEQTkwMzRfQVZSQwkJKDB4MjUpCisjZGVmaW5lIERBOTAzNF9DRFRWMQkJKDB4MjYpCisjZGVmaW5lIERBOTAzNF9DRFRWMgkJKDB4MjcpCisjZGVmaW5lIERBOTAzNF9DVlJDCQkoMHgyOCkKKyNkZWZpbmUgREE5MDM0X1NEVFYxCQkoMHgyOSkKKyNkZWZpbmUgREE5MDM0X1NEVFYyCQkoMHgyYSkKKyNkZWZpbmUgREE5MDM0X1NWUkMJCSgweDJiKQorI2RlZmluZSBEQTkwMzRfTURUVjEJCSgweDMyKQorI2RlZmluZSBEQTkwMzRfTURUVjIJCSgweDMzKQorI2RlZmluZSBEQTkwMzRfTVZSQwkJKDB4MzQpCisKK3N0cnVjdCBkYTkwM3hfcmVndWxhdG9yX2luZm8geworCXN0cnVjdCByZWd1bGF0b3JfZGVzYyBkZXNjOworCisJaW50CW1pbl91VjsKKwlpbnQJbWF4X3VWOworCWludAlzdGVwX3VWOworCWludAl2b2xfcmVnOworCWludAl2b2xfc2hpZnQ7CisJaW50CXZvbF9uYml0czsKKwlpbnQJdXBkYXRlX3JlZzsKKwlpbnQJdXBkYXRlX2JpdDsKKwlpbnQJZW5hYmxlX3JlZzsKKwlpbnQJZW5hYmxlX2JpdDsKK307CisKK3N0YXRpYyBpbmxpbmUgaW50IGNoZWNrX3JhbmdlKHN0cnVjdCBkYTkwM3hfcmVndWxhdG9yX2luZm8gKmluZm8sCisJCQkJaW50IG1pbl91ViwgaW50IG1heF91VikKK3sKKwlpZiAobWluX3VWIDwgaW5mby0+bWluX3VWIHx8IG1pbl91ViA+IGluZm8tPm1heF91VikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXR1cm4gMDsKK30KKworLyogREE5MDMwL0RBOTAzNCBjb21tb24gb3BlcmF0aW9ucyAqLworc3RhdGljIGludCBkYTkwM3hfc2V0X2xkb192b2x0YWdlKHN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2LAorCQkJCSAgaW50IG1pbl91ViwgaW50IG1heF91VikKK3sKKwlzdHJ1Y3QgZGE5MDN4X3JlZ3VsYXRvcl9pbmZvICppbmZvID0gcmRldl9nZXRfZHJ2ZGF0YShyZGV2KTsKKwlzdHJ1Y3QgZGV2aWNlICpkYTkwMzRfZGV2ID0gcmRldl9nZXRfZGV2KHJkZXYpLT5wYXJlbnQ7CisJdWludDhfdCB2YWwsIG1hc2s7CisKKwlpZiAoY2hlY2tfcmFuZ2UoaW5mbywgbWluX3VWLCBtYXhfdVYpKSB7CisJCXByX2VycigiaW52YWxpZCB2b2x0YWdlIHJhbmdlICglZCwgJWQpIHVWIiwgbWluX3VWLCBtYXhfdVYpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwl2YWwgPSAobWluX3VWIC0gaW5mby0+bWluX3VWICsgaW5mby0+c3RlcF91ViAtIDEpIC8gaW5mby0+c3RlcF91VjsKKwl2YWwgPDw9IGluZm8tPnZvbF9zaGlmdDsKKwltYXNrID0gKCgxIDw8IGluZm8tPnZvbF9uYml0cykgLSAxKSAgPDwgaW5mby0+dm9sX3NoaWZ0OworCisJcmV0dXJuIGRhOTAzeF91cGRhdGUoZGE5MDM0X2RldiwgaW5mby0+dm9sX3JlZywgdmFsLCBtYXNrKTsKK30KKworc3RhdGljIGludCBkYTkwM3hfZ2V0X3ZvbHRhZ2Uoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYpCit7CisJc3RydWN0IGRhOTAzeF9yZWd1bGF0b3JfaW5mbyAqaW5mbyA9IHJkZXZfZ2V0X2RydmRhdGEocmRldik7CisJc3RydWN0IGRldmljZSAqZGE5MDM0X2RldiA9IHJkZXZfZ2V0X2RldihyZGV2KS0+cGFyZW50OworCXVpbnQ4X3QgdmFsLCBtYXNrOworCWludCByZXQ7CisKKwlyZXQgPSBkYTkwM3hfcmVhZChkYTkwMzRfZGV2LCBpbmZvLT52b2xfcmVnLCAmdmFsKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJbWFzayA9ICgoMSA8PCBpbmZvLT52b2xfbmJpdHMpIC0gMSkgIDw8IGluZm8tPnZvbF9zaGlmdDsKKwl2YWwgPSAodmFsICYgbWFzaykgPj4gaW5mby0+dm9sX3NoaWZ0OworCisJcmV0dXJuIGluZm8tPm1pbl91ViArIGluZm8tPnN0ZXBfdVYgKiB2YWw7Cit9CisKK3N0YXRpYyBpbnQgZGE5MDN4X2VuYWJsZShzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldikKK3sKKwlzdHJ1Y3QgZGE5MDN4X3JlZ3VsYXRvcl9pbmZvICppbmZvID0gcmRldl9nZXRfZHJ2ZGF0YShyZGV2KTsKKwlzdHJ1Y3QgZGV2aWNlICpkYTkwMzRfZGV2ID0gcmRldl9nZXRfZGV2KHJkZXYpLT5wYXJlbnQ7CisKKwlyZXR1cm4gZGE5MDN4X3NldF9iaXRzKGRhOTAzNF9kZXYsIGluZm8tPmVuYWJsZV9yZWcsCisJCQkJCTEgPDwgaW5mby0+ZW5hYmxlX2JpdCk7Cit9CisKK3N0YXRpYyBpbnQgZGE5MDN4X2Rpc2FibGUoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYpCit7CisJc3RydWN0IGRhOTAzeF9yZWd1bGF0b3JfaW5mbyAqaW5mbyA9IHJkZXZfZ2V0X2RydmRhdGEocmRldik7CisJc3RydWN0IGRldmljZSAqZGE5MDM0X2RldiA9IHJkZXZfZ2V0X2RldihyZGV2KS0+cGFyZW50OworCisJcmV0dXJuIGRhOTAzeF9jbHJfYml0cyhkYTkwMzRfZGV2LCBpbmZvLT5lbmFibGVfcmVnLAorCQkJCQkxIDw8IGluZm8tPmVuYWJsZV9iaXQpOworfQorCitzdGF0aWMgaW50IGRhOTAzeF9pc19lbmFibGVkKHN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2KQoreworCXN0cnVjdCBkYTkwM3hfcmVndWxhdG9yX2luZm8gKmluZm8gPSByZGV2X2dldF9kcnZkYXRhKHJkZXYpOworCXN0cnVjdCBkZXZpY2UgKmRhOTAzNF9kZXYgPSByZGV2X2dldF9kZXYocmRldiktPnBhcmVudDsKKwl1aW50OF90IHJlZ192YWw7CisJaW50IHJldDsKKworCXJldCA9IGRhOTAzeF9yZWFkKGRhOTAzNF9kZXYsIGluZm8tPmVuYWJsZV9yZWcsICZyZWdfdmFsKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJcmV0dXJuIHJlZ192YWwgJiAoMSA8PCBpbmZvLT5lbmFibGVfYml0KTsKK30KKworLyogREE5MDMwIHNwZWNpZmljIG9wZXJhdGlvbnMgKi8KK3N0YXRpYyBpbnQgZGE5MDMwX3NldF9sZG8xXzE1X3ZvbHRhZ2Uoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYsCisJCQkJICAgICAgIGludCBtaW5fdVYsIGludCBtYXhfdVYpCit7CisJc3RydWN0IGRhOTAzeF9yZWd1bGF0b3JfaW5mbyAqaW5mbyA9IHJkZXZfZ2V0X2RydmRhdGEocmRldik7CisJc3RydWN0IGRldmljZSAqZGE5MDN4X2RldiA9IHJkZXZfZ2V0X2RldihyZGV2KS0+cGFyZW50OworCXVpbnQ4X3QgdmFsLCBtYXNrOworCWludCByZXQ7CisKKwlpZiAoY2hlY2tfcmFuZ2UoaW5mbywgbWluX3VWLCBtYXhfdVYpKSB7CisJCXByX2VycigiaW52YWxpZCB2b2x0YWdlIHJhbmdlICglZCwgJWQpIHVWIiwgbWluX3VWLCBtYXhfdVYpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwl2YWwgPSAobWluX3VWIC0gaW5mby0+bWluX3VWICsgaW5mby0+c3RlcF91ViAtIDEpIC8gaW5mby0+c3RlcF91VjsKKwl2YWwgPDw9IGluZm8tPnZvbF9zaGlmdDsKKwltYXNrID0gKCgxIDw8IGluZm8tPnZvbF9uYml0cykgLSAxKSAgPDwgaW5mby0+dm9sX3NoaWZ0OworCXZhbCB8PSBEQTkwMzBfTERPX1VOTE9DSzsgLyogaGF2ZSB0byBzZXQgVU5MT0NLIGJpdHMgKi8KKwltYXNrIHw9IERBOTAzMF9MRE9fVU5MT0NLX01BU0s7CisKKwkvKiB3cml0ZSB0d2ljZSAqLworCXJldCA9IGRhOTAzeF91cGRhdGUoZGE5MDN4X2RldiwgaW5mby0+dm9sX3JlZywgdmFsLCBtYXNrKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJcmV0dXJuIGRhOTAzeF91cGRhdGUoZGE5MDN4X2RldiwgaW5mby0+dm9sX3JlZywgdmFsLCBtYXNrKTsKK30KKworc3RhdGljIGludCBkYTkwMzBfc2V0X2xkbzE0X3ZvbHRhZ2Uoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYsCisJCQkJICBpbnQgbWluX3VWLCBpbnQgbWF4X3VWKQoreworCXN0cnVjdCBkYTkwM3hfcmVndWxhdG9yX2luZm8gKmluZm8gPSByZGV2X2dldF9kcnZkYXRhKHJkZXYpOworCXN0cnVjdCBkZXZpY2UgKmRhOTAzeF9kZXYgPSByZGV2X2dldF9kZXYocmRldiktPnBhcmVudDsKKwl1aW50OF90IHZhbCwgbWFzazsKKwlpbnQgdGhyZXNoOworCisJaWYgKGNoZWNrX3JhbmdlKGluZm8sIG1pbl91ViwgbWF4X3VWKSkgeworCQlwcl9lcnIoImludmFsaWQgdm9sdGFnZSByYW5nZSAoJWQsICVkKSB1ViIsIG1pbl91ViwgbWF4X3VWKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJdGhyZXNoID0gKGluZm8tPm1heF91ViArIGluZm8tPm1pbl91VikgLyAyOworCWlmIChtaW5fdVYgPCB0aHJlc2gpIHsKKwkJdmFsID0gKHRocmVzaCAtIG1pbl91ViArIGluZm8tPnN0ZXBfdVYgLSAxKSAvIGluZm8tPnN0ZXBfdVY7CisJCXZhbCB8PSAweDQ7CisJfSBlbHNlIHsKKwkJdmFsID0gKG1pbl91ViAtIHRocmVzaCArIGluZm8tPnN0ZXBfdVYgLSAxKSAvIGluZm8tPnN0ZXBfdVY7CisJfQorCisJdmFsIDw8PSBpbmZvLT52b2xfc2hpZnQ7CisJbWFzayA9ICgoMSA8PCBpbmZvLT52b2xfbmJpdHMpIC0gMSkgIDw8IGluZm8tPnZvbF9zaGlmdDsKKworCXJldHVybiBkYTkwM3hfdXBkYXRlKGRhOTAzeF9kZXYsIGluZm8tPnZvbF9yZWcsIHZhbCwgbWFzayk7Cit9CisKK3N0YXRpYyBpbnQgZGE5MDMwX2dldF9sZG8xNF92b2x0YWdlKHN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2KQoreworCXN0cnVjdCBkYTkwM3hfcmVndWxhdG9yX2luZm8gKmluZm8gPSByZGV2X2dldF9kcnZkYXRhKHJkZXYpOworCXN0cnVjdCBkZXZpY2UgKmRhOTAzeF9kZXYgPSByZGV2X2dldF9kZXYocmRldiktPnBhcmVudDsKKwl1aW50OF90IHZhbCwgbWFzazsKKwlpbnQgcmV0OworCisJcmV0ID0gZGE5MDN4X3JlYWQoZGE5MDN4X2RldiwgaW5mby0+dm9sX3JlZywgJnZhbCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCW1hc2sgPSAoKDEgPDwgaW5mby0+dm9sX25iaXRzKSAtIDEpICA8PCBpbmZvLT52b2xfc2hpZnQ7CisJdmFsID0gKHZhbCAmIG1hc2spID4+IGluZm8tPnZvbF9zaGlmdDsKKworCWlmICh2YWwgJiAweDQpCisJCXJldHVybiBpbmZvLT5taW5fdVYgKyBpbmZvLT5zdGVwX3VWICogKDMgLSAodmFsICYgfjB4NCkpOworCWVsc2UKKwkJcmV0dXJuIChpbmZvLT5tYXhfdVYgKyBpbmZvLT5taW5fdVYpIC8gMiArCisJCQlpbmZvLT5zdGVwX3VWICogKHZhbCAmIH4weDQpOworfQorCisvKiBEQTkwMzQgc3BlY2lmaWMgb3BlcmF0aW9ucyAqLworc3RhdGljIGludCBkYTkwMzRfc2V0X2R2Y192b2x0YWdlKHN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2LAorCQkJCSAgaW50IG1pbl91ViwgaW50IG1heF91VikKK3sKKwlzdHJ1Y3QgZGE5MDN4X3JlZ3VsYXRvcl9pbmZvICppbmZvID0gcmRldl9nZXRfZHJ2ZGF0YShyZGV2KTsKKwlzdHJ1Y3QgZGV2aWNlICpkYTkwMzRfZGV2ID0gcmRldl9nZXRfZGV2KHJkZXYpLT5wYXJlbnQ7CisJdWludDhfdCB2YWwsIG1hc2s7CisJaW50IHJldDsKKworCWlmIChjaGVja19yYW5nZShpbmZvLCBtaW5fdVYsIG1heF91VikpIHsKKwkJcHJfZXJyKCJpbnZhbGlkIHZvbHRhZ2UgcmFuZ2UgKCVkLCAlZCkgdVYiLCBtaW5fdVYsIG1heF91Vik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXZhbCA9IChtaW5fdVYgLSBpbmZvLT5taW5fdVYgKyBpbmZvLT5zdGVwX3VWIC0gMSkgLyBpbmZvLT5zdGVwX3VWOworCXZhbCA8PD0gaW5mby0+dm9sX3NoaWZ0OworCW1hc2sgPSAoKDEgPDwgaW5mby0+dm9sX25iaXRzKSAtIDEpICA8PCBpbmZvLT52b2xfc2hpZnQ7CisKKwlyZXQgPSBkYTkwM3hfdXBkYXRlKGRhOTAzNF9kZXYsIGluZm8tPnZvbF9yZWcsIHZhbCwgbWFzayk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXJldCA9IGRhOTAzeF9zZXRfYml0cyhkYTkwMzRfZGV2LCBpbmZvLT51cGRhdGVfcmVnLAorCQkJCQkxIDw8IGluZm8tPnVwZGF0ZV9iaXQpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgZGE5MDM0X3NldF9sZG8xMl92b2x0YWdlKHN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2LAorCQkJCSAgICBpbnQgbWluX3VWLCBpbnQgbWF4X3VWKQoreworCXN0cnVjdCBkYTkwM3hfcmVndWxhdG9yX2luZm8gKmluZm8gPSByZGV2X2dldF9kcnZkYXRhKHJkZXYpOworCXN0cnVjdCBkZXZpY2UgKmRhOTAzNF9kZXYgPSByZGV2X2dldF9kZXYocmRldiktPnBhcmVudDsKKwl1aW50OF90IHZhbCwgbWFzazsKKworCWlmIChjaGVja19yYW5nZShpbmZvLCBtaW5fdVYsIG1heF91VikpIHsKKwkJcHJfZXJyKCJpbnZhbGlkIHZvbHRhZ2UgcmFuZ2UgKCVkLCAlZCkgdVYiLCBtaW5fdVYsIG1heF91Vik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXZhbCA9IChtaW5fdVYgLSBpbmZvLT5taW5fdVYgKyBpbmZvLT5zdGVwX3VWIC0gMSkgLyBpbmZvLT5zdGVwX3VWOworCXZhbCA9ICh2YWwgPiA3IHx8IHZhbCA8IDIwKSA/IDggOiB2YWwgLSAxMjsKKwl2YWwgPDw9IGluZm8tPnZvbF9zaGlmdDsKKwltYXNrID0gKCgxIDw8IGluZm8tPnZvbF9uYml0cykgLSAxKSAgPDwgaW5mby0+dm9sX3NoaWZ0OworCisJcmV0dXJuIGRhOTAzeF91cGRhdGUoZGE5MDM0X2RldiwgaW5mby0+dm9sX3JlZywgdmFsLCBtYXNrKTsKK30KKworc3RhdGljIGludCBkYTkwMzRfZ2V0X2xkbzEyX3ZvbHRhZ2Uoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYpCit7CisJc3RydWN0IGRhOTAzeF9yZWd1bGF0b3JfaW5mbyAqaW5mbyA9IHJkZXZfZ2V0X2RydmRhdGEocmRldik7CisJc3RydWN0IGRldmljZSAqZGE5MDM0X2RldiA9IHJkZXZfZ2V0X2RldihyZGV2KS0+cGFyZW50OworCXVpbnQ4X3QgdmFsLCBtYXNrOworCWludCByZXQ7CisKKwlyZXQgPSBkYTkwM3hfcmVhZChkYTkwMzRfZGV2LCBpbmZvLT52b2xfcmVnLCAmdmFsKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJbWFzayA9ICgoMSA8PCBpbmZvLT52b2xfbmJpdHMpIC0gMSkgIDw8IGluZm8tPnZvbF9zaGlmdDsKKwl2YWwgPSAodmFsICYgbWFzaykgPj4gaW5mby0+dm9sX3NoaWZ0OworCisJaWYgKHZhbCA+PSA4KQorCQlyZXR1cm4gMjcwMDAwMCArIGluZm8tPnN0ZXBfdVYgKiAodmFsIC0gOCk7CisKKwlyZXR1cm4gaW5mby0+bWluX3VWICsgaW5mby0+c3RlcF91ViAqIHZhbDsKK30KKworc3RhdGljIHN0cnVjdCByZWd1bGF0b3Jfb3BzIGRhOTAzeF9yZWd1bGF0b3JfbGRvX29wcyA9IHsKKwkuc2V0X3ZvbHRhZ2UJPSBkYTkwM3hfc2V0X2xkb192b2x0YWdlLAorCS5nZXRfdm9sdGFnZQk9IGRhOTAzeF9nZXRfdm9sdGFnZSwKKwkuZW5hYmxlCQk9IGRhOTAzeF9lbmFibGUsCisJLmRpc2FibGUJPSBkYTkwM3hfZGlzYWJsZSwKKwkuaXNfZW5hYmxlZAk9IGRhOTAzeF9pc19lbmFibGVkLAorfTsKKworLyogTk9URTogdGhpcyBpcyBkZWRpY2F0ZWQgZm9yIHRoZSBpbnNhbmUgREE5MDMwIExETzE0ICovCitzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9vcHMgZGE5MDMwX3JlZ3VsYXRvcl9sZG8xNF9vcHMgPSB7CisJLnNldF92b2x0YWdlCT0gZGE5MDMwX3NldF9sZG8xNF92b2x0YWdlLAorCS5nZXRfdm9sdGFnZQk9IGRhOTAzMF9nZXRfbGRvMTRfdm9sdGFnZSwKKwkuZW5hYmxlCQk9IGRhOTAzeF9lbmFibGUsCisJLmRpc2FibGUJPSBkYTkwM3hfZGlzYWJsZSwKKwkuaXNfZW5hYmxlZAk9IGRhOTAzeF9pc19lbmFibGVkLAorfTsKKworLyogTk9URTogdGhpcyBpcyBkZWRpY2F0ZWQgZm9yIHRoZSBEQTkwMzAgTERPMSBhbmQgTERPMTUgdGhhdCBoYXZlIGxvY2tzICAqLworc3RhdGljIHN0cnVjdCByZWd1bGF0b3Jfb3BzIGRhOTAzMF9yZWd1bGF0b3JfbGRvMV8xNV9vcHMgPSB7CisJLnNldF92b2x0YWdlCT0gZGE5MDMwX3NldF9sZG8xXzE1X3ZvbHRhZ2UsCisJLmdldF92b2x0YWdlCT0gZGE5MDN4X2dldF92b2x0YWdlLAorCS5lbmFibGUJCT0gZGE5MDN4X2VuYWJsZSwKKwkuZGlzYWJsZQk9IGRhOTAzeF9kaXNhYmxlLAorCS5pc19lbmFibGVkCT0gZGE5MDN4X2lzX2VuYWJsZWQsCit9OworCitzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9vcHMgZGE5MDM0X3JlZ3VsYXRvcl9kdmNfb3BzID0geworCS5zZXRfdm9sdGFnZQk9IGRhOTAzNF9zZXRfZHZjX3ZvbHRhZ2UsCisJLmdldF92b2x0YWdlCT0gZGE5MDN4X2dldF92b2x0YWdlLAorCS5lbmFibGUJCT0gZGE5MDN4X2VuYWJsZSwKKwkuZGlzYWJsZQk9IGRhOTAzeF9kaXNhYmxlLAorCS5pc19lbmFibGVkCT0gZGE5MDN4X2lzX2VuYWJsZWQsCit9OworCisvKiBOT1RFOiB0aGlzIGlzIGRlZGljYXRlZCBmb3IgdGhlIGluc2FuZSBMRE8xMiAqLworc3RhdGljIHN0cnVjdCByZWd1bGF0b3Jfb3BzIGRhOTAzNF9yZWd1bGF0b3JfbGRvMTJfb3BzID0geworCS5zZXRfdm9sdGFnZQk9IGRhOTAzNF9zZXRfbGRvMTJfdm9sdGFnZSwKKwkuZ2V0X3ZvbHRhZ2UJPSBkYTkwMzRfZ2V0X2xkbzEyX3ZvbHRhZ2UsCisJLmVuYWJsZQkJPSBkYTkwM3hfZW5hYmxlLAorCS5kaXNhYmxlCT0gZGE5MDN4X2Rpc2FibGUsCisJLmlzX2VuYWJsZWQJPSBkYTkwM3hfaXNfZW5hYmxlZCwKK307CisKKyNkZWZpbmUgREE5MDN4X0xETyhfcG1pYywgX2lkLCBtaW4sIG1heCwgc3RlcCwgdnJlZywgc2hpZnQsIG5iaXRzLCBlcmVnLCBlYml0KQlcCit7CQkJCQkJCQkJXAorCS5kZXNjCT0gewkJCQkJCQlcCisJCS5uYW1lCT0gIkxETyIgI19pZCwJCQkJCVwKKwkJLm9wcwk9ICZkYTkwM3hfcmVndWxhdG9yX2xkb19vcHMsCQkJXAorCQkudHlwZQk9IFJFR1VMQVRPUl9WT0xUQUdFLAkJCQlcCisJCS5pZAk9IF9wbWljIyNfSURfTERPIyNfaWQsCQkJCVwKKwkJLm93bmVyCT0gVEhJU19NT0RVTEUsCQkJCQlcCisJfSwJCQkJCQkJCVwKKwkubWluX3VWCQk9IChtaW4pICogMTAwMCwJCQkJCVwKKwkubWF4X3VWCQk9IChtYXgpICogMTAwMCwJCQkJCVwKKwkuc3RlcF91Vgk9IChzdGVwKSAqIDEwMDAsCQkJCVwKKwkudm9sX3JlZwk9IF9wbWljIyNfIyN2cmVnLAkJCQlcCisJLnZvbF9zaGlmdAk9IChzaGlmdCksCQkJCQlcCisJLnZvbF9uYml0cwk9IChuYml0cyksCQkJCQlcCisJLmVuYWJsZV9yZWcJPSBfcG1pYyMjXyMjZXJlZywJCQkJXAorCS5lbmFibGVfYml0CT0gKGViaXQpLAkJCQkJXAorfQorCisjZGVmaW5lIERBOTAzNF9EVkMoX2lkLCBtaW4sIG1heCwgc3RlcCwgdnJlZywgbmJpdHMsIHVyZWcsIHViaXQsIGVyZWcsIGViaXQpIFwKK3sJCQkJCQkJCQlcCisJLmRlc2MJPSB7CQkJCQkJCVwKKwkJLm5hbWUJPSAjX2lkLAkJCQkJCVwKKwkJLm9wcwk9ICZkYTkwMzRfcmVndWxhdG9yX2R2Y19vcHMsCQkJXAorCQkudHlwZQk9IFJFR1VMQVRPUl9WT0xUQUdFLAkJCQlcCisJCS5pZAk9IERBOTAzNF9JRF8jI19pZCwJCQkJXAorCQkub3duZXIJPSBUSElTX01PRFVMRSwJCQkJCVwKKwl9LAkJCQkJCQkJXAorCS5taW5fdVYJCT0gKG1pbikgKiAxMDAwLAkJCQkJXAorCS5tYXhfdVYJCT0gKG1heCkgKiAxMDAwLAkJCQkJXAorCS5zdGVwX3VWCT0gKHN0ZXApICogMTAwMCwJCQkJXAorCS52b2xfcmVnCT0gREE5MDM0XyMjdnJlZywJCQkJXAorCS52b2xfc2hpZnQJPSAoMCksCQkJCQkJXAorCS52b2xfbmJpdHMJPSAobmJpdHMpLAkJCQkJXAorCS51cGRhdGVfcmVnCT0gREE5MDM0XyMjdXJlZywJCQkJXAorCS51cGRhdGVfYml0CT0gKHViaXQpLAkJCQkJXAorCS5lbmFibGVfcmVnCT0gREE5MDM0XyMjZXJlZywJCQkJXAorCS5lbmFibGVfYml0CT0gKGViaXQpLAkJCQkJXAorfQorCisjZGVmaW5lIERBOTAzNF9MRE8oX2lkLCBtaW4sIG1heCwgc3RlcCwgdnJlZywgc2hpZnQsIG5iaXRzLCBlcmVnLCBlYml0KQlcCisJREE5MDN4X0xETyhEQTkwMzQsIF9pZCwgbWluLCBtYXgsIHN0ZXAsIHZyZWcsIHNoaWZ0LCBuYml0cywgZXJlZywgZWJpdCkKKworI2RlZmluZSBEQTkwMzBfTERPKF9pZCwgbWluLCBtYXgsIHN0ZXAsIHZyZWcsIHNoaWZ0LCBuYml0cywgZXJlZywgZWJpdCkJXAorCURBOTAzeF9MRE8oREE5MDMwLCBfaWQsIG1pbiwgbWF4LCBzdGVwLCB2cmVnLCBzaGlmdCwgbmJpdHMsIGVyZWcsIGViaXQpCisKK3N0YXRpYyBzdHJ1Y3QgZGE5MDN4X3JlZ3VsYXRvcl9pbmZvIGRhOTAzeF9yZWd1bGF0b3JfaW5mb1tdID0geworCS8qIERBOTAzMCAqLworCURBOTAzMF9MRE8oIDEsIDEyMDAsIDMyMDAsIDEwMCwgICAgTERPMSwgMCwgNSwgUkNUTDEyLCAxKSwKKwlEQTkwMzBfTERPKCAyLCAxODAwLCAzMjAwLCAxMDAsICAgTERPMjMsIDAsIDQsIFJDVEwxMiwgMiksCisJREE5MDMwX0xETyggMywgMTgwMCwgMzIwMCwgMTAwLCAgIExETzIzLCA0LCA0LCBSQ1RMMTIsIDMpLAorCURBOTAzMF9MRE8oIDQsIDE4MDAsIDMyMDAsIDEwMCwgICBMRE80NSwgMCwgNCwgUkNUTDEyLCA0KSwKKwlEQTkwMzBfTERPKCA1LCAxODAwLCAzMjAwLCAxMDAsICAgTERPNDUsIDQsIDQsIFJDVEwxMiwgNSksCisJREE5MDMwX0xETyggNiwgMTgwMCwgMzIwMCwgMTAwLCAgICBMRE82LCAwLCA0LCBSQ1RMMTIsIDYpLAorCURBOTAzMF9MRE8oIDcsIDE4MDAsIDMyMDAsIDEwMCwgICBMRE83OCwgMCwgNCwgUkNUTDEyLCA3KSwKKwlEQTkwMzBfTERPKCA4LCAxODAwLCAzMjAwLCAxMDAsICAgTERPNzgsIDQsIDQsIFJDVEwyMiwgMCksCisJREE5MDMwX0xETyggOSwgMTgwMCwgMzIwMCwgMTAwLCAgTERPOTEyLCAwLCA0LCBSQ1RMMjIsIDEpLAorCURBOTAzMF9MRE8oMTAsIDE4MDAsIDMyMDAsIDEwMCwgTERPMTAxMSwgMCwgNCwgUkNUTDIyLCAyKSwKKwlEQTkwMzBfTERPKDExLCAxODAwLCAzMjAwLCAxMDAsIExETzEwMTEsIDQsIDQsIFJDVEwyMiwgMyksCisJREE5MDMwX0xETygxMiwgMTgwMCwgMzIwMCwgMTAwLCAgTERPOTEyLCA0LCA0LCBSQ1RMMjIsIDQpLAorCURBOTAzMF9MRE8oMTQsIDI3NjAsIDI5NDAsICAzMCwgTERPMTQxNiwgMCwgMywgUkNUTDExLCA0KSwKKwlEQTkwMzBfTERPKDE1LCAxMTAwLCAyNjUwLCAgNTAsCSAgTERPMTUsIDAsIDUsIFJDVEwxMSwgNSksCisJREE5MDMwX0xETygxNiwgMTEwMCwgMjY1MCwgIDUwLCBMRE8xNDE2LCAzLCA1LCBSQ1RMMTEsIDYpLAorCURBOTAzMF9MRE8oMTcsIDE4MDAsIDMyMDAsIDEwMCwgICBMRE8xNywgMCwgNCwgUkNUTDExLCA3KSwKKwlEQTkwMzBfTERPKDE4LCAxODAwLCAzMjAwLCAxMDAsIExETzE4MTksIDAsIDQsIFJDVEwyMSwgMiksCisJREE5MDMwX0xETygxOSwgMTgwMCwgMzIwMCwgMTAwLCBMRE8xODE5LCA0LCA0LCBSQ1RMMjEsIDEpLAorCURBOTAzMF9MRE8oMTMsIDIxMDAsIDIxMDAsIDAsIElOVkFMLCAwLCAwLCBSQ1RMMTEsIDMpLCAvKiBmaXhlZCBAMi4xViAqLworCisJLyogREE5MDM0ICovCisJREE5MDM0X0RWQyhCVUNLMSwgNzI1LCAxNTAwLCAyNSwgQURUVjEsIDUsIFZDQzEsIDAsIE9WRVIxLCAwKSwKKwlEQTkwMzRfRFZDKEJVQ0syLCA3MjUsIDE1MDAsIDI1LCBDRFRWMSwgNSwgVkNDMSwgMiwgT1ZFUjEsIDEpLAorCURBOTAzNF9EVkMoTERPMiwgIDcyNSwgMTUwMCwgMjUsIFNEVFYxLCA1LCBWQ0MxLCA0LCBPVkVSMSwgMiksCisJREE5MDM0X0RWQyhMRE8xLCAxNzAwLCAyMDc1LCAyNSwgTURUVjEsIDQsIFZDQzEsIDYsIE9WRVIzLCA0KSwKKworCURBOTAzNF9MRE8oIDMsIDE4MDAsIDMzMDAsIDEwMCwgIExETzY0MywgMCwgNCwgT1ZFUjMsIDUpLAorCURBOTAzNF9MRE8oIDQsIDE4MDAsIDI5MDAsMTEwMCwgIExETzY0MywgNCwgMSwgT1ZFUjMsIDYpLAorCURBOTAzNF9MRE8oIDYsIDI1MDAsIDI4NTAsICA1MCwgIExETzY0MywgNSwgMywgT1ZFUjIsIDApLAorCURBOTAzNF9MRE8oIDcsIDI3MDAsIDMwNTAsICA1MCwgIExETzk4NywgMCwgMywgT1ZFUjIsIDEpLAorCURBOTAzNF9MRE8oIDgsIDI3MDAsIDI4NTAsICA1MCwgIExETzk4NywgMywgMiwgT1ZFUjIsIDIpLAorCURBOTAzNF9MRE8oIDksIDI3MDAsIDMwNTAsICA1MCwgIExETzk4NywgNSwgMywgT1ZFUjIsIDMpLAorCURBOTAzNF9MRE8oMTAsIDI3MDAsIDMwNTAsICA1MCwgTERPMTExMCwgMCwgMywgT1ZFUjIsIDQpLAorCURBOTAzNF9MRE8oMTEsIDE4MDAsIDMzMDAsIDEwMCwgTERPMTExMCwgNCwgNCwgT1ZFUjIsIDUpLAorCURBOTAzNF9MRE8oMTIsIDE3MDAsIDMwNTAsICA1MCwgTERPMTMxMiwgMCwgNCwgT1ZFUjMsIDYpLAorCURBOTAzNF9MRE8oMTMsIDE4MDAsIDMzMDAsIDEwMCwgTERPMTMxMiwgNCwgNCwgT1ZFUjIsIDcpLAorCURBOTAzNF9MRE8oMTQsIDE4MDAsIDMzMDAsIDEwMCwgTERPMTUxNCwgMCwgNCwgT1ZFUjMsIDApLAorCURBOTAzNF9MRE8oMTUsIDE4MDAsIDMzMDAsIDEwMCwgTERPMTUxNCwgNCwgNCwgT1ZFUjMsIDEpLAorCURBOTAzNF9MRE8oNSwgMzEwMCwgMzEwMCwgMCwgSU5WQUwsIDAsIDAsIE9WRVIzLCA3KSwgLyogZml4ZWQgQDMuMVYgKi8KK307CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGRhOTAzeF9yZWd1bGF0b3JfaW5mbyAqZmluZF9yZWd1bGF0b3JfaW5mbyhpbnQgaWQpCit7CisJc3RydWN0IGRhOTAzeF9yZWd1bGF0b3JfaW5mbyAqcmk7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShkYTkwM3hfcmVndWxhdG9yX2luZm8pOyBpKyspIHsKKwkJcmkgPSAmZGE5MDN4X3JlZ3VsYXRvcl9pbmZvW2ldOworCQlpZiAocmktPmRlc2MuaWQgPT0gaWQpCisJCQlyZXR1cm4gcmk7CisJfQorCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgaW50IF9fZGV2aW5pdCBkYTkwM3hfcmVndWxhdG9yX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IGRhOTAzeF9yZWd1bGF0b3JfaW5mbyAqcmkgPSBOVUxMOworCXN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2OworCisJcmkgPSBmaW5kX3JlZ3VsYXRvcl9pbmZvKHBkZXYtPmlkKTsKKwlpZiAocmkgPT0gTlVMTCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJpbnZhbGlkIHJlZ3VsYXRvciBJRCBzcGVjaWZpZWRcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKiBXb3JrYXJvdW5kIGZvciB0aGUgd2VpcmQgTERPMTIgdm9sdGFnZSBzZXR0aW5nICovCisJaWYgKHJpLT5kZXNjLmlkID09IERBOTAzNF9JRF9MRE8xMikKKwkJcmktPmRlc2Mub3BzID0gJmRhOTAzNF9yZWd1bGF0b3JfbGRvMTJfb3BzOworCisJaWYgKHJpLT5kZXNjLmlkID09IERBOTAzMF9JRF9MRE8xNCkKKwkJcmktPmRlc2Mub3BzID0gJmRhOTAzMF9yZWd1bGF0b3JfbGRvMTRfb3BzOworCisJaWYgKHJpLT5kZXNjLmlkID09IERBOTAzMF9JRF9MRE8xIHx8IHJpLT5kZXNjLmlkID09IERBOTAzMF9JRF9MRE8xNSkKKwkJcmktPmRlc2Mub3BzID0gJmRhOTAzMF9yZWd1bGF0b3JfbGRvMV8xNV9vcHM7CisKKwlyZGV2ID0gcmVndWxhdG9yX3JlZ2lzdGVyKCZyaS0+ZGVzYywgcGRldi0+ZGV2LnBhcmVudCwgcmkpOworCWlmIChJU19FUlIocmRldikpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIHJlZ2lzdGVyIHJlZ3VsYXRvciAlc1xuIiwKKwkJCQlyaS0+ZGVzYy5uYW1lKTsKKwkJcmV0dXJuIFBUUl9FUlIocmRldik7CisJfQorCisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgcmRldik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZleGl0IGRhOTAzeF9yZWd1bGF0b3JfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKworCXJlZ3VsYXRvcl91bnJlZ2lzdGVyKHJkZXYpOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBkYTkwM3hfcmVndWxhdG9yX2RyaXZlciA9IHsKKwkuZHJpdmVyCT0geworCQkubmFtZQk9ICJkYTkwM3gtcmVndWxhdG9yIiwKKwkJLm93bmVyCT0gVEhJU19NT0RVTEUsCisJfSwKKwkucHJvYmUJCT0gZGE5MDN4X3JlZ3VsYXRvcl9wcm9iZSwKKwkucmVtb3ZlCQk9IGRhOTAzeF9yZWd1bGF0b3JfcmVtb3ZlLAorfTsKKworc3RhdGljIGludCBfX2luaXQgZGE5MDN4X3JlZ3VsYXRvcl9pbml0KHZvaWQpCit7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmZGE5MDN4X3JlZ3VsYXRvcl9kcml2ZXIpOworfQorbW9kdWxlX2luaXQoZGE5MDN4X3JlZ3VsYXRvcl9pbml0KTsKKworc3RhdGljIHZvaWQgX19leGl0IGRhOTAzeF9yZWd1bGF0b3JfZXhpdCh2b2lkKQoreworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZkYTkwM3hfcmVndWxhdG9yX2RyaXZlcik7Cit9Cittb2R1bGVfZXhpdChkYTkwM3hfcmVndWxhdG9yX2V4aXQpOworCitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQVVUSE9SKCJFcmljIE1pYW8gPGVyaWMubWlhb0BtYXJ2ZWxsLmNvbT4iCisJICAgICAgIk1pa2UgUmFwb3BvcnQgPG1pa2VAY29tcHVsYWIuY28uaWw+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIlJlZ3VsYXRvciBEcml2ZXIgZm9yIERpYWxvZyBTZW1pY29uZHVjdG9yIERBOTAzWCBQTUlDIik7CitNT0RVTEVfQUxJQVMoInBsYXRmb3JtOmRhOTAzeC1yZWd1bGF0b3IiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcmVndWxhdG9yL3dtODM1MC1yZWd1bGF0b3IuYyBiL2RyaXZlcnMvcmVndWxhdG9yL3dtODM1MC1yZWd1bGF0b3IuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZjQ0YjE3Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9yZWd1bGF0b3Ivd204MzUwLXJlZ3VsYXRvci5jCkBAIC0wLDAgKzEsMTQzMSBAQAorLyoKKyAqIHdtODM1MC5jICAtLSAgVm9sdGFnZSBhbmQgY3VycmVudCByZWd1bGF0aW9uIGZvciB0aGUgV29sZnNvbiBXTTgzNTAgUE1JQworICoKKyAqIENvcHlyaWdodCAyMDA3LCAyMDA4IFdvbGZzb24gTWljcm9lbGVjdHJvbmljcyBQTEMuCisgKgorICogQXV0aG9yOiBMaWFtIEdpcmR3b29kCisgKiAgICAgICAgIGxpbnV4QHdvbGZzb25taWNyby5jb20KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiAgdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgKiAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bGludXgvbWZkL3dtODM1MC9jb3JlLmg+CisjaW5jbHVkZSA8bGludXgvbWZkL3dtODM1MC9wbWljLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvcmVndWxhdG9yL2RyaXZlci5oPgorI2luY2x1ZGUgPGxpbnV4L3JlZ3VsYXRvci9tYWNoaW5lLmg+CisKKy8qIE1pY3JvYW1wcyAqLworc3RhdGljIGNvbnN0IGludCBpc2lua19jdXJbXSA9IHsKKwk0LAorCTUsCisJNiwKKwk3LAorCTgsCisJMTAsCisJMTEsCisJMTQsCisJMTYsCisJMTksCisJMjMsCisJMjcsCisJMzIsCisJMzksCisJNDYsCisJNTQsCisJNjUsCisJNzcsCisJOTIsCisJMTA5LAorCTEzMCwKKwkxNTQsCisJMTgzLAorCTIxOCwKKwkyNTksCisJMzA4LAorCTM2NywKKwk0MzYsCisJNTE4LAorCTYxNiwKKwk3MzMsCisJODcyLAorCTEwMzcsCisJMTIzMywKKwkxNDY2LAorCTE3NDQsCisJMjA3MywKKwkyNDY2LAorCTI5MzMsCisJMzQ4NywKKwk0MTQ3LAorCTQ5MzIsCisJNTg2NSwKKwk2OTc1LAorCTgyOTQsCisJOTg2NCwKKwkxMTczMCwKKwkxMzk0OSwKKwkxNjU4OSwKKwkxOTcyOCwKKwkyMzQ2MCwKKwkyNzg5OSwKKwkzMzE3OCwKKwkzOTQ1NSwKKwk0NjkyMCwKKwk1NTc5OCwKKwk2NjM1NSwKKwk3ODkxMCwKKwk5Mzg0MCwKKwkxMTE1OTYsCisJMTMyNzEwLAorCTE1NzgyMCwKKwkxODc2ODEsCisJMjIzMTkxCit9OworCitzdGF0aWMgaW50IGdldF9pc2lua192YWwoaW50IG1pbl91QSwgaW50IG1heF91QSwgdTE2ICpzZXR0aW5nKQoreworCWludCBpOworCisJZm9yIChpID0gQVJSQVlfU0laRShpc2lua19jdXIpIC0gMTsgaSA+PSAwOyBpLS0pIHsKKwkJaWYgKG1pbl91QSA8PSBpc2lua19jdXJbaV0gJiYgbWF4X3VBID49IGlzaW5rX2N1cltpXSkgeworCQkJKnNldHRpbmcgPSBpOworCQkJcmV0dXJuIDA7CisJCX0KKwl9CisJcmV0dXJuIC1FSU5WQUw7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHdtODM1MF9sZG9fdmFsX3RvX212b2x0cyh1bnNpZ25lZCBpbnQgdmFsKQoreworCWlmICh2YWwgPCAxNikKKwkJcmV0dXJuICh2YWwgKiA1MCkgKyA5MDA7CisJZWxzZQorCQlyZXR1cm4gKCh2YWwgLSAxNikgKiAxMDApICsgMTgwMDsKKworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCB3bTgzNTBfbGRvX212b2x0c190b192YWwoaW50IG1WKQoreworCWlmIChtViA8IDE4MDApCisJCXJldHVybiAobVYgLSA5MDApIC8gNTA7CisJZWxzZQorCQlyZXR1cm4gKChtViAtIDE4MDApIC8gMTAwKSArIDE2OworfQorCitzdGF0aWMgaW5saW5lIGludCB3bTgzNTBfZGNkY192YWxfdG9fbXZvbHRzKHVuc2lnbmVkIGludCB2YWwpCit7CisJcmV0dXJuICh2YWwgKiAyNSkgKyA4NTA7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHdtODM1MF9kY2RjX212b2x0c190b192YWwoaW50IG1WKQoreworCXJldHVybiAobVYgLSA4NTApIC8gMjU7Cit9CisKK3N0YXRpYyBpbnQgd204MzUwX2lzaW5rX3NldF9jdXJyZW50KHN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2LCBpbnQgbWluX3VBLAorCWludCBtYXhfdUEpCit7CisJc3RydWN0IHdtODM1MCAqd204MzUwID0gcmRldl9nZXRfZHJ2ZGF0YShyZGV2KTsKKwlpbnQgaXNpbmsgPSByZGV2X2dldF9pZChyZGV2KTsKKwl1MTYgdmFsLCBzZXR0aW5nOworCWludCByZXQ7CisKKwlyZXQgPSBnZXRfaXNpbmtfdmFsKG1pbl91QSwgbWF4X3VBLCAmc2V0dGluZyk7CisJaWYgKHJldCAhPSAwKQorCQlyZXR1cm4gcmV0OworCisJc3dpdGNoIChpc2luaykgeworCWNhc2UgV004MzUwX0lTSU5LX0E6CisJCXZhbCA9IHdtODM1MF9yZWdfcmVhZCh3bTgzNTAsIFdNODM1MF9DVVJSRU5UX1NJTktfRFJJVkVSX0EpICYKKwkJICAgIH5XTTgzNTBfQ1MxX0lTRUxfTUFTSzsKKwkJd204MzUwX3JlZ193cml0ZSh3bTgzNTAsIFdNODM1MF9DVVJSRU5UX1NJTktfRFJJVkVSX0EsCisJCQkJIHZhbCB8IHNldHRpbmcpOworCQlicmVhazsKKwljYXNlIFdNODM1MF9JU0lOS19COgorCQl2YWwgPSB3bTgzNTBfcmVnX3JlYWQod204MzUwLCBXTTgzNTBfQ1VSUkVOVF9TSU5LX0RSSVZFUl9CKSAmCisJCSAgICB+V004MzUwX0NTMV9JU0VMX01BU0s7CisJCXdtODM1MF9yZWdfd3JpdGUod204MzUwLCBXTTgzNTBfQ1VSUkVOVF9TSU5LX0RSSVZFUl9CLAorCQkJCSB2YWwgfCBzZXR0aW5nKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgd204MzUwX2lzaW5rX2dldF9jdXJyZW50KHN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2KQoreworCXN0cnVjdCB3bTgzNTAgKndtODM1MCA9IHJkZXZfZ2V0X2RydmRhdGEocmRldik7CisJaW50IGlzaW5rID0gcmRldl9nZXRfaWQocmRldik7CisJdTE2IHZhbDsKKworCXN3aXRjaCAoaXNpbmspIHsKKwljYXNlIFdNODM1MF9JU0lOS19BOgorCQl2YWwgPSB3bTgzNTBfcmVnX3JlYWQod204MzUwLCBXTTgzNTBfQ1VSUkVOVF9TSU5LX0RSSVZFUl9BKSAmCisJCSAgICBXTTgzNTBfQ1MxX0lTRUxfTUFTSzsKKwkJYnJlYWs7CisJY2FzZSBXTTgzNTBfSVNJTktfQjoKKwkJdmFsID0gd204MzUwX3JlZ19yZWFkKHdtODM1MCwgV004MzUwX0NVUlJFTlRfU0lOS19EUklWRVJfQikgJgorCQkgICAgV004MzUwX0NTMV9JU0VMX01BU0s7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAwOworCX0KKworCXJldHVybiAoaXNpbmtfY3VyW3ZhbF0gKyA1MCkgLyAxMDA7Cit9CisKKy8qIHR1cm4gb24gSVNJTksgZm9sbG93ZWQgYnkgRENEQyAqLworc3RhdGljIGludCB3bTgzNTBfaXNpbmtfZW5hYmxlKHN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2KQoreworCXN0cnVjdCB3bTgzNTAgKndtODM1MCA9IHJkZXZfZ2V0X2RydmRhdGEocmRldik7CisJaW50IGlzaW5rID0gcmRldl9nZXRfaWQocmRldik7CisKKwlzd2l0Y2ggKGlzaW5rKSB7CisJY2FzZSBXTTgzNTBfSVNJTktfQToKKwkJc3dpdGNoICh3bTgzNTAtPnBtaWMuaXNpbmtfQV9kY2RjKSB7CisJCWNhc2UgV004MzUwX0RDRENfMjoKKwkJY2FzZSBXTTgzNTBfRENEQ181OgorCQkJd204MzUwX3NldF9iaXRzKHdtODM1MCwgV004MzUwX1BPV0VSX01HTVRfNywKKwkJCQkJV004MzUwX0NTMV9FTkEpOworCQkJd204MzUwX3NldF9iaXRzKHdtODM1MCwgV004MzUwX0NTQV9GTEFTSF9DT05UUk9MLAorCQkJCQlXTTgzNTBfQ1MxX0RSSVZFKTsKKwkJCXdtODM1MF9zZXRfYml0cyh3bTgzNTAsIFdNODM1MF9EQ0RDX0xET19SRVFVRVNURUQsCisJCQkJCTEgPDwgKHdtODM1MC0+cG1pYy5pc2lua19BX2RjZGMgLQorCQkJCQkgICAgICBXTTgzNTBfRENEQ18xKSk7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJCWJyZWFrOworCWNhc2UgV004MzUwX0lTSU5LX0I6CisJCXN3aXRjaCAod204MzUwLT5wbWljLmlzaW5rX0JfZGNkYykgeworCQljYXNlIFdNODM1MF9EQ0RDXzI6CisJCWNhc2UgV004MzUwX0RDRENfNToKKwkJCXdtODM1MF9zZXRfYml0cyh3bTgzNTAsIFdNODM1MF9QT1dFUl9NR01UXzcsCisJCQkJCVdNODM1MF9DUzJfRU5BKTsKKwkJCXdtODM1MF9zZXRfYml0cyh3bTgzNTAsIFdNODM1MF9DU0JfRkxBU0hfQ09OVFJPTCwKKwkJCQkJV004MzUwX0NTMl9EUklWRSk7CisJCQl3bTgzNTBfc2V0X2JpdHMod204MzUwLCBXTTgzNTBfRENEQ19MRE9fUkVRVUVTVEVELAorCQkJCQkxIDw8ICh3bTgzNTAtPnBtaWMuaXNpbmtfQl9kY2RjIC0KKwkJCQkJICAgICAgV004MzUwX0RDRENfMSkpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgd204MzUwX2lzaW5rX2Rpc2FibGUoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYpCit7CisJc3RydWN0IHdtODM1MCAqd204MzUwID0gcmRldl9nZXRfZHJ2ZGF0YShyZGV2KTsKKwlpbnQgaXNpbmsgPSByZGV2X2dldF9pZChyZGV2KTsKKworCXN3aXRjaCAoaXNpbmspIHsKKwljYXNlIFdNODM1MF9JU0lOS19BOgorCQlzd2l0Y2ggKHdtODM1MC0+cG1pYy5pc2lua19BX2RjZGMpIHsKKwkJY2FzZSBXTTgzNTBfRENEQ18yOgorCQljYXNlIFdNODM1MF9EQ0RDXzU6CisJCQl3bTgzNTBfY2xlYXJfYml0cyh3bTgzNTAsIFdNODM1MF9EQ0RDX0xET19SRVFVRVNURUQsCisJCQkJCSAgMSA8PCAod204MzUwLT5wbWljLmlzaW5rX0FfZGNkYyAtCisJCQkJCQlXTTgzNTBfRENEQ18xKSk7CisJCQl3bTgzNTBfY2xlYXJfYml0cyh3bTgzNTAsIFdNODM1MF9QT1dFUl9NR01UXzcsCisJCQkJCSAgV004MzUwX0NTMV9FTkEpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCQlicmVhazsKKwljYXNlIFdNODM1MF9JU0lOS19COgorCQlzd2l0Y2ggKHdtODM1MC0+cG1pYy5pc2lua19CX2RjZGMpIHsKKwkJY2FzZSBXTTgzNTBfRENEQ18yOgorCQljYXNlIFdNODM1MF9EQ0RDXzU6CisJCQl3bTgzNTBfY2xlYXJfYml0cyh3bTgzNTAsIFdNODM1MF9EQ0RDX0xET19SRVFVRVNURUQsCisJCQkJCSAgMSA8PCAod204MzUwLT5wbWljLmlzaW5rX0JfZGNkYyAtCisJCQkJCQlXTTgzNTBfRENEQ18xKSk7CisJCQl3bTgzNTBfY2xlYXJfYml0cyh3bTgzNTAsIFdNODM1MF9QT1dFUl9NR01UXzcsCisJCQkJCSAgV004MzUwX0NTMl9FTkEpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgd204MzUwX2lzaW5rX2lzX2VuYWJsZWQoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYpCit7CisJc3RydWN0IHdtODM1MCAqd204MzUwID0gcmRldl9nZXRfZHJ2ZGF0YShyZGV2KTsKKwlpbnQgaXNpbmsgPSByZGV2X2dldF9pZChyZGV2KTsKKworCXN3aXRjaCAoaXNpbmspIHsKKwljYXNlIFdNODM1MF9JU0lOS19BOgorCQlyZXR1cm4gd204MzUwX3JlZ19yZWFkKHdtODM1MCwgV004MzUwX0NVUlJFTlRfU0lOS19EUklWRVJfQSkgJgorCQkgICAgMHg4MDAwOworCWNhc2UgV004MzUwX0lTSU5LX0I6CisJCXJldHVybiB3bTgzNTBfcmVnX3JlYWQod204MzUwLCBXTTgzNTBfQ1VSUkVOVF9TSU5LX0RSSVZFUl9CKSAmCisJCSAgICAweDgwMDA7CisJfQorCXJldHVybiAtRUlOVkFMOworfQorCitpbnQgd204MzUwX2lzaW5rX3NldF9mbGFzaChzdHJ1Y3Qgd204MzUwICp3bTgzNTAsIGludCBpc2luaywgdTE2IG1vZGUsCisJCQkgICB1MTYgdHJpZ2dlciwgdTE2IGR1cmF0aW9uLCB1MTYgb25fcmFtcCwgdTE2IG9mZl9yYW1wLAorCQkJICAgdTE2IGRyaXZlKQoreworCXN3aXRjaCAoaXNpbmspIHsKKwljYXNlIFdNODM1MF9JU0lOS19BOgorCQl3bTgzNTBfcmVnX3dyaXRlKHdtODM1MCwgV004MzUwX0NTQV9GTEFTSF9DT05UUk9MLAorCQkJCSAobW9kZSA/IFdNODM1MF9DUzFfRkxBU0hfTU9ERSA6IDApIHwKKwkJCQkgKHRyaWdnZXIgPyBXTTgzNTBfQ1MxX1RSSUdTUkMgOiAwKSB8CisJCQkJIGR1cmF0aW9uIHwgb25fcmFtcCB8IG9mZl9yYW1wIHwgZHJpdmUpOworCQlicmVhazsKKwljYXNlIFdNODM1MF9JU0lOS19COgorCQl3bTgzNTBfcmVnX3dyaXRlKHdtODM1MCwgV004MzUwX0NTQl9GTEFTSF9DT05UUk9MLAorCQkJCSAobW9kZSA/IFdNODM1MF9DUzJfRkxBU0hfTU9ERSA6IDApIHwKKwkJCQkgKHRyaWdnZXIgPyBXTTgzNTBfQ1MyX1RSSUdTUkMgOiAwKSB8CisJCQkJIGR1cmF0aW9uIHwgb25fcmFtcCB8IG9mZl9yYW1wIHwgZHJpdmUpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MX0dQTCh3bTgzNTBfaXNpbmtfc2V0X2ZsYXNoKTsKKworc3RhdGljIGludCB3bTgzNTBfZGNkY19zZXRfdm9sdGFnZShzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldiwgaW50IG1pbl91ViwKKwlpbnQgbWF4X3VWKQoreworCXN0cnVjdCB3bTgzNTAgKndtODM1MCA9IHJkZXZfZ2V0X2RydmRhdGEocmRldik7CisJaW50IHZvbHRfcmVnLCBkY2RjID0gcmRldl9nZXRfaWQocmRldiksIG1WLAorCQltaW5fbVYgPSBtaW5fdVYgLyAxMDAwLCBtYXhfbVYgPSBtYXhfdVYgLyAxMDAwOworCXUxNiB2YWw7CisKKwlpZiAobWluX21WIDwgODUwIHx8IG1pbl9tViA+IDQwMjUpCisJCXJldHVybiAtRUlOVkFMOworCWlmIChtYXhfbVYgPCA4NTAgfHwgbWF4X21WID4gNDAyNSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKiBzdGVwIHNpemUgaXMgMjVtViAqLworCW1WID0gKG1pbl9tViAtIDgyNikgLyAyNTsKKwlpZiAod204MzUwX2RjZGNfdmFsX3RvX212b2x0cyhtVikgPiBtYXhfbVYpCisJCXJldHVybiAtRUlOVkFMOworCUJVR19PTih3bTgzNTBfZGNkY192YWxfdG9fbXZvbHRzKG1WKSA8IG1pbl9tVik7CisKKwlzd2l0Y2ggKGRjZGMpIHsKKwljYXNlIFdNODM1MF9EQ0RDXzE6CisJCXZvbHRfcmVnID0gV004MzUwX0RDREMxX0NPTlRST0w7CisJCWJyZWFrOworCWNhc2UgV004MzUwX0RDRENfMzoKKwkJdm9sdF9yZWcgPSBXTTgzNTBfRENEQzNfQ09OVFJPTDsKKwkJYnJlYWs7CisJY2FzZSBXTTgzNTBfRENEQ180OgorCQl2b2x0X3JlZyA9IFdNODM1MF9EQ0RDNF9DT05UUk9MOworCQlicmVhazsKKwljYXNlIFdNODM1MF9EQ0RDXzY6CisJCXZvbHRfcmVnID0gV004MzUwX0RDREM2X0NPTlRST0w7CisJCWJyZWFrOworCWNhc2UgV004MzUwX0RDRENfMjoKKwljYXNlIFdNODM1MF9EQ0RDXzU6CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogYWxsIERDRENzIGhhdmUgc2FtZSBtViBiaXRzICovCisJdmFsID0gd204MzUwX3JlZ19yZWFkKHdtODM1MCwgdm9sdF9yZWcpICYgfldNODM1MF9EQzFfVlNFTF9NQVNLOworCXdtODM1MF9yZWdfd3JpdGUod204MzUwLCB2b2x0X3JlZywgdmFsIHwgbVYpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHdtODM1MF9kY2RjX2dldF92b2x0YWdlKHN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2KQoreworCXN0cnVjdCB3bTgzNTAgKndtODM1MCA9IHJkZXZfZ2V0X2RydmRhdGEocmRldik7CisJaW50IHZvbHRfcmVnLCBkY2RjID0gcmRldl9nZXRfaWQocmRldik7CisJdTE2IHZhbDsKKworCXN3aXRjaCAoZGNkYykgeworCWNhc2UgV004MzUwX0RDRENfMToKKwkJdm9sdF9yZWcgPSBXTTgzNTBfRENEQzFfQ09OVFJPTDsKKwkJYnJlYWs7CisJY2FzZSBXTTgzNTBfRENEQ18zOgorCQl2b2x0X3JlZyA9IFdNODM1MF9EQ0RDM19DT05UUk9MOworCQlicmVhazsKKwljYXNlIFdNODM1MF9EQ0RDXzQ6CisJCXZvbHRfcmVnID0gV004MzUwX0RDREM0X0NPTlRST0w7CisJCWJyZWFrOworCWNhc2UgV004MzUwX0RDRENfNjoKKwkJdm9sdF9yZWcgPSBXTTgzNTBfRENEQzZfQ09OVFJPTDsKKwkJYnJlYWs7CisJY2FzZSBXTTgzNTBfRENEQ18yOgorCWNhc2UgV004MzUwX0RDRENfNToKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKiBhbGwgRENEQ3MgaGF2ZSBzYW1lIG1WIGJpdHMgKi8KKwl2YWwgPSB3bTgzNTBfcmVnX3JlYWQod204MzUwLCB2b2x0X3JlZykgJiBXTTgzNTBfREMxX1ZTRUxfTUFTSzsKKwlyZXR1cm4gd204MzUwX2RjZGNfdmFsX3RvX212b2x0cyh2YWwpICogMTAwMDsKK30KKworc3RhdGljIGludCB3bTgzNTBfZGNkY19zZXRfc3VzcGVuZF92b2x0YWdlKHN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2LCBpbnQgdVYpCit7CisJc3RydWN0IHdtODM1MCAqd204MzUwID0gcmRldl9nZXRfZHJ2ZGF0YShyZGV2KTsKKwlpbnQgdm9sdF9yZWcsIG1WID0gdVYgLyAxMDAwLCBkY2RjID0gcmRldl9nZXRfaWQocmRldik7CisJdTE2IHZhbDsKKworCWRldl9kYmcod204MzUwLT5kZXYsICIlcyAlZCBtViAlZFxuIiwgX19mdW5jX18sIGRjZGMsIG1WKTsKKworCWlmIChtViAmJiAobVYgPCA4NTAgfHwgbVYgPiA0MDI1KSkgeworCQlkZXZfZXJyKHdtODM1MC0+ZGV2LAorCQkJIkRDREMlZCBzdXNwZW5kIHZvbHRhZ2UgJWQgbVYgb3V0IG9mIHJhbmdlXG4iLAorCQkJZGNkYywgbVYpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJaWYgKG1WID09IDApCisJCW1WID0gODUwOworCisJc3dpdGNoIChkY2RjKSB7CisJY2FzZSBXTTgzNTBfRENEQ18xOgorCQl2b2x0X3JlZyA9IFdNODM1MF9EQ0RDMV9MT1dfUE9XRVI7CisJCWJyZWFrOworCWNhc2UgV004MzUwX0RDRENfMzoKKwkJdm9sdF9yZWcgPSBXTTgzNTBfRENEQzNfTE9XX1BPV0VSOworCQlicmVhazsKKwljYXNlIFdNODM1MF9EQ0RDXzQ6CisJCXZvbHRfcmVnID0gV004MzUwX0RDREM0X0xPV19QT1dFUjsKKwkJYnJlYWs7CisJY2FzZSBXTTgzNTBfRENEQ182OgorCQl2b2x0X3JlZyA9IFdNODM1MF9EQ0RDNl9MT1dfUE9XRVI7CisJCWJyZWFrOworCWNhc2UgV004MzUwX0RDRENfMjoKKwljYXNlIFdNODM1MF9EQ0RDXzU6CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogYWxsIERDRENzIGhhdmUgc2FtZSBtViBiaXRzICovCisJdmFsID0gd204MzUwX3JlZ19yZWFkKHdtODM1MCwgdm9sdF9yZWcpICYgfldNODM1MF9EQzFfVlNFTF9NQVNLOworCXdtODM1MF9yZWdfd3JpdGUod204MzUwLCB2b2x0X3JlZywKKwkJCSB2YWwgfCB3bTgzNTBfZGNkY19tdm9sdHNfdG9fdmFsKG1WKSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgd204MzUwX2RjZGNfc2V0X3N1c3BlbmRfZW5hYmxlKHN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2KQoreworCXN0cnVjdCB3bTgzNTAgKndtODM1MCA9IHJkZXZfZ2V0X2RydmRhdGEocmRldik7CisJaW50IGRjZGMgPSByZGV2X2dldF9pZChyZGV2KTsKKwl1MTYgdmFsOworCisJc3dpdGNoIChkY2RjKSB7CisJY2FzZSBXTTgzNTBfRENEQ18xOgorCQl2YWwgPSB3bTgzNTBfcmVnX3JlYWQod204MzUwLCBXTTgzNTBfRENEQzFfTE9XX1BPV0VSKQorCQkJJiB+V004MzUwX0RDRENfSElCX01PREVfTUFTSzsKKwkJd204MzUwX3JlZ193cml0ZSh3bTgzNTAsIFdNODM1MF9EQ0RDMV9MT1dfUE9XRVIsCisJCQl3bTgzNTAtPnBtaWMuZGNkYzFfaGliX21vZGUpOworCQlicmVhazsKKwljYXNlIFdNODM1MF9EQ0RDXzM6CisJCXZhbCA9IHdtODM1MF9yZWdfcmVhZCh3bTgzNTAsIFdNODM1MF9EQ0RDM19MT1dfUE9XRVIpCisJCQkmIH5XTTgzNTBfRENEQ19ISUJfTU9ERV9NQVNLOworCQl3bTgzNTBfcmVnX3dyaXRlKHdtODM1MCwgV004MzUwX0RDREMzX0xPV19QT1dFUiwKKwkJCXdtODM1MC0+cG1pYy5kY2RjM19oaWJfbW9kZSk7CisJCWJyZWFrOworCWNhc2UgV004MzUwX0RDRENfNDoKKwkJdmFsID0gd204MzUwX3JlZ19yZWFkKHdtODM1MCwgV004MzUwX0RDREM0X0xPV19QT1dFUikKKwkJCSYgfldNODM1MF9EQ0RDX0hJQl9NT0RFX01BU0s7CisJCXdtODM1MF9yZWdfd3JpdGUod204MzUwLCBXTTgzNTBfRENEQzRfTE9XX1BPV0VSLAorCQkJd204MzUwLT5wbWljLmRjZGM0X2hpYl9tb2RlKTsKKwkJYnJlYWs7CisJY2FzZSBXTTgzNTBfRENEQ182OgorCQl2YWwgPSB3bTgzNTBfcmVnX3JlYWQod204MzUwLCBXTTgzNTBfRENEQzZfTE9XX1BPV0VSKQorCQkJJiB+V004MzUwX0RDRENfSElCX01PREVfTUFTSzsKKwkJd204MzUwX3JlZ193cml0ZSh3bTgzNTAsIFdNODM1MF9EQ0RDNl9MT1dfUE9XRVIsCisJCQl3bTgzNTAtPnBtaWMuZGNkYzZfaGliX21vZGUpOworCQlicmVhazsKKwljYXNlIFdNODM1MF9EQ0RDXzI6CisJY2FzZSBXTTgzNTBfRENEQ181OgorCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHdtODM1MF9kY2RjX3NldF9zdXNwZW5kX2Rpc2FibGUoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYpCit7CisJc3RydWN0IHdtODM1MCAqd204MzUwID0gcmRldl9nZXRfZHJ2ZGF0YShyZGV2KTsKKwlpbnQgZGNkYyA9IHJkZXZfZ2V0X2lkKHJkZXYpOworCXUxNiB2YWw7CisKKwlzd2l0Y2ggKGRjZGMpIHsKKwljYXNlIFdNODM1MF9EQ0RDXzE6CisJCXZhbCA9IHdtODM1MF9yZWdfcmVhZCh3bTgzNTAsIFdNODM1MF9EQ0RDMV9MT1dfUE9XRVIpOworCQl3bTgzNTAtPnBtaWMuZGNkYzFfaGliX21vZGUgPSB2YWwgJiBXTTgzNTBfRENEQ19ISUJfTU9ERV9NQVNLOworCQl3bTgzNTBfcmVnX3dyaXRlKHdtODM1MCwgV004MzUwX0RDREMxX0xPV19QT1dFUiwKKwkJCVdNODM1MF9EQ0RDX0hJQl9NT0RFX0RJUyk7CisJCWJyZWFrOworCWNhc2UgV004MzUwX0RDRENfMzoKKwkJdmFsID0gd204MzUwX3JlZ19yZWFkKHdtODM1MCwgV004MzUwX0RDREMzX0xPV19QT1dFUik7CisJCXdtODM1MC0+cG1pYy5kY2RjM19oaWJfbW9kZSA9IHZhbCAmIFdNODM1MF9EQ0RDX0hJQl9NT0RFX01BU0s7CisJCXdtODM1MF9yZWdfd3JpdGUod204MzUwLCBXTTgzNTBfRENEQzNfTE9XX1BPV0VSLAorCQkJV004MzUwX0RDRENfSElCX01PREVfRElTKTsKKwkJYnJlYWs7CisJY2FzZSBXTTgzNTBfRENEQ180OgorCQl2YWwgPSB3bTgzNTBfcmVnX3JlYWQod204MzUwLCBXTTgzNTBfRENEQzRfTE9XX1BPV0VSKTsKKwkJd204MzUwLT5wbWljLmRjZGM0X2hpYl9tb2RlID0gdmFsICYgV004MzUwX0RDRENfSElCX01PREVfTUFTSzsKKwkJd204MzUwX3JlZ193cml0ZSh3bTgzNTAsIFdNODM1MF9EQ0RDNF9MT1dfUE9XRVIsCisJCQlXTTgzNTBfRENEQ19ISUJfTU9ERV9ESVMpOworCQlicmVhazsKKwljYXNlIFdNODM1MF9EQ0RDXzY6CisJCXZhbCA9IHdtODM1MF9yZWdfcmVhZCh3bTgzNTAsIFdNODM1MF9EQ0RDNl9MT1dfUE9XRVIpOworCQl3bTgzNTAtPnBtaWMuZGNkYzZfaGliX21vZGUgPSB2YWwgJiBXTTgzNTBfRENEQ19ISUJfTU9ERV9NQVNLOworCQl3bTgzNTBfcmVnX3dyaXRlKHdtODM1MCwgV004MzUwX0RDREM2X0xPV19QT1dFUiwKKwkJCVdNODM1MF9EQ0RDX0hJQl9NT0RFX0RJUyk7CisJCWJyZWFrOworCWNhc2UgV004MzUwX0RDRENfMjoKKwljYXNlIFdNODM1MF9EQ0RDXzU6CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgd204MzUwX2RjZGMyNV9zZXRfc3VzcGVuZF9lbmFibGUoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYpCit7CisJc3RydWN0IHdtODM1MCAqd204MzUwID0gcmRldl9nZXRfZHJ2ZGF0YShyZGV2KTsKKwlpbnQgZGNkYyA9IHJkZXZfZ2V0X2lkKHJkZXYpOworCXUxNiB2YWw7CisKKwlzd2l0Y2ggKGRjZGMpIHsKKwljYXNlIFdNODM1MF9EQ0RDXzI6CisJCXZhbCA9IHdtODM1MF9yZWdfcmVhZCh3bTgzNTAsIFdNODM1MF9EQ0RDMl9DT05UUk9MKQorCQkgICAgJiB+V004MzUwX0RDMl9ISUJfTU9ERV9NQVNLOworCQl3bTgzNTBfcmVnX3dyaXRlKHdtODM1MCwgV004MzUwX0RDREMyX0NPTlRST0wsIHZhbCB8CisJCQkJIFdNODM1MF9EQzJfSElCX01PREVfQUNUSVZFKTsKKwkJYnJlYWs7CisJY2FzZSBXTTgzNTBfRENEQ181OgorCQl2YWwgPSB3bTgzNTBfcmVnX3JlYWQod204MzUwLCBXTTgzNTBfRENEQzVfQ09OVFJPTCkKKwkJICAgICYgfldNODM1MF9EQzJfSElCX01PREVfTUFTSzsKKwkJd204MzUwX3JlZ193cml0ZSh3bTgzNTAsIFdNODM1MF9EQ0RDNV9DT05UUk9MLCB2YWwgfAorCQkJCSBXTTgzNTBfREM1X0hJQl9NT0RFX0FDVElWRSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB3bTgzNTBfZGNkYzI1X3NldF9zdXNwZW5kX2Rpc2FibGUoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYpCit7CisJc3RydWN0IHdtODM1MCAqd204MzUwID0gcmRldl9nZXRfZHJ2ZGF0YShyZGV2KTsKKwlpbnQgZGNkYyA9IHJkZXZfZ2V0X2lkKHJkZXYpOworCXUxNiB2YWw7CisKKwlzd2l0Y2ggKGRjZGMpIHsKKwljYXNlIFdNODM1MF9EQ0RDXzI6CisJCXZhbCA9IHdtODM1MF9yZWdfcmVhZCh3bTgzNTAsIFdNODM1MF9EQ0RDMl9DT05UUk9MKQorCQkgICAgJiB+V004MzUwX0RDMl9ISUJfTU9ERV9NQVNLOworCQl3bTgzNTBfcmVnX3dyaXRlKHdtODM1MCwgV004MzUwX0RDREMyX0NPTlRST0wsIHZhbCB8CisJCQkJIFdNODM1MF9EQzJfSElCX01PREVfRElTQUJMRSk7CisJCWJyZWFrOworCWNhc2UgV004MzUwX0RDRENfNToKKwkJdmFsID0gd204MzUwX3JlZ19yZWFkKHdtODM1MCwgV004MzUwX0RDREM1X0NPTlRST0wpCisJCSAgICAmIH5XTTgzNTBfREMyX0hJQl9NT0RFX01BU0s7CisJCXdtODM1MF9yZWdfd3JpdGUod204MzUwLCBXTTgzNTBfRENEQzVfQ09OVFJPTCwgdmFsIHwKKwkJCQkgV004MzUwX0RDMl9ISUJfTU9ERV9ESVNBQkxFKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHdtODM1MF9kY2RjX3NldF9zdXNwZW5kX21vZGUoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYsCisJdW5zaWduZWQgaW50IG1vZGUpCit7CisJc3RydWN0IHdtODM1MCAqd204MzUwID0gcmRldl9nZXRfZHJ2ZGF0YShyZGV2KTsKKwlpbnQgZGNkYyA9IHJkZXZfZ2V0X2lkKHJkZXYpOworCXUxNiAqaGliX21vZGU7CisKKwlzd2l0Y2ggKGRjZGMpIHsKKwljYXNlIFdNODM1MF9EQ0RDXzE6CisJCWhpYl9tb2RlID0gJndtODM1MC0+cG1pYy5kY2RjMV9oaWJfbW9kZTsKKwkJYnJlYWs7CisJY2FzZSBXTTgzNTBfRENEQ18zOgorCQloaWJfbW9kZSA9ICZ3bTgzNTAtPnBtaWMuZGNkYzNfaGliX21vZGU7CisJCWJyZWFrOworCWNhc2UgV004MzUwX0RDRENfNDoKKwkJaGliX21vZGUgPSAmd204MzUwLT5wbWljLmRjZGM0X2hpYl9tb2RlOworCQlicmVhazsKKwljYXNlIFdNODM1MF9EQ0RDXzY6CisJCWhpYl9tb2RlID0gJndtODM1MC0+cG1pYy5kY2RjNl9oaWJfbW9kZTsKKwkJYnJlYWs7CisJY2FzZSBXTTgzNTBfRENEQ18yOgorCWNhc2UgV004MzUwX0RDRENfNToKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlzd2l0Y2ggKG1vZGUpIHsKKwljYXNlIFJFR1VMQVRPUl9NT0RFX05PUk1BTDoKKwkJKmhpYl9tb2RlID0gV004MzUwX0RDRENfSElCX01PREVfSU1BR0U7CisJCWJyZWFrOworCWNhc2UgUkVHVUxBVE9SX01PREVfSURMRToKKwkJKmhpYl9tb2RlID0gV004MzUwX0RDRENfSElCX01PREVfU1RBTkRCWTsKKwkJYnJlYWs7CisJY2FzZSBSRUdVTEFUT1JfTU9ERV9TVEFOREJZOgorCQkqaGliX21vZGUgPSBXTTgzNTBfRENEQ19ISUJfTU9ERV9MRE9fSU07CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHdtODM1MF9sZG9fc2V0X3N1c3BlbmRfdm9sdGFnZShzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldiwgaW50IHVWKQoreworCXN0cnVjdCB3bTgzNTAgKndtODM1MCA9IHJkZXZfZ2V0X2RydmRhdGEocmRldik7CisJaW50IHZvbHRfcmVnLCBtViA9IHVWIC8gMTAwMCwgbGRvID0gcmRldl9nZXRfaWQocmRldik7CisJdTE2IHZhbDsKKworCWRldl9kYmcod204MzUwLT5kZXYsICIlcyAlZCBtViAlZFxuIiwgX19mdW5jX18sIGxkbywgbVYpOworCisJaWYgKG1WIDwgOTAwIHx8IG1WID4gMzMwMCkgeworCQlkZXZfZXJyKHdtODM1MC0+ZGV2LCAiTERPJWQgdm9sdGFnZSAlZCBtViBvdXQgb2YgcmFuZ2VcbiIsCisJCQlsZG8sIG1WKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJc3dpdGNoIChsZG8pIHsKKwljYXNlIFdNODM1MF9MRE9fMToKKwkJdm9sdF9yZWcgPSBXTTgzNTBfTERPMV9MT1dfUE9XRVI7CisJCWJyZWFrOworCWNhc2UgV004MzUwX0xET18yOgorCQl2b2x0X3JlZyA9IFdNODM1MF9MRE8yX0xPV19QT1dFUjsKKwkJYnJlYWs7CisJY2FzZSBXTTgzNTBfTERPXzM6CisJCXZvbHRfcmVnID0gV004MzUwX0xETzNfTE9XX1BPV0VSOworCQlicmVhazsKKwljYXNlIFdNODM1MF9MRE9fNDoKKwkJdm9sdF9yZWcgPSBXTTgzNTBfTERPNF9MT1dfUE9XRVI7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qIGFsbCBMRE9zIGhhdmUgc2FtZSBtViBiaXRzICovCisJdmFsID0gd204MzUwX3JlZ19yZWFkKHdtODM1MCwgdm9sdF9yZWcpICYgfldNODM1MF9MRE8xX1ZTRUxfTUFTSzsKKwl3bTgzNTBfcmVnX3dyaXRlKHdtODM1MCwgdm9sdF9yZWcsCisJCQkgdmFsIHwgd204MzUwX2xkb19tdm9sdHNfdG9fdmFsKG1WKSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgd204MzUwX2xkb19zZXRfc3VzcGVuZF9lbmFibGUoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYpCit7CisJc3RydWN0IHdtODM1MCAqd204MzUwID0gcmRldl9nZXRfZHJ2ZGF0YShyZGV2KTsKKwlpbnQgdm9sdF9yZWcsIGxkbyA9IHJkZXZfZ2V0X2lkKHJkZXYpOworCXUxNiB2YWw7CisKKwlzd2l0Y2ggKGxkbykgeworCWNhc2UgV004MzUwX0xET18xOgorCQl2b2x0X3JlZyA9IFdNODM1MF9MRE8xX0xPV19QT1dFUjsKKwkJYnJlYWs7CisJY2FzZSBXTTgzNTBfTERPXzI6CisJCXZvbHRfcmVnID0gV004MzUwX0xETzJfTE9XX1BPV0VSOworCQlicmVhazsKKwljYXNlIFdNODM1MF9MRE9fMzoKKwkJdm9sdF9yZWcgPSBXTTgzNTBfTERPM19MT1dfUE9XRVI7CisJCWJyZWFrOworCWNhc2UgV004MzUwX0xET180OgorCQl2b2x0X3JlZyA9IFdNODM1MF9MRE80X0xPV19QT1dFUjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogYWxsIExET3MgaGF2ZSBzYW1lIG1WIGJpdHMgKi8KKwl2YWwgPSB3bTgzNTBfcmVnX3JlYWQod204MzUwLCB2b2x0X3JlZykgJiB+V004MzUwX0xETzFfSElCX01PREVfTUFTSzsKKwl3bTgzNTBfcmVnX3dyaXRlKHdtODM1MCwgdm9sdF9yZWcsIHZhbCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgd204MzUwX2xkb19zZXRfc3VzcGVuZF9kaXNhYmxlKHN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2KQoreworCXN0cnVjdCB3bTgzNTAgKndtODM1MCA9IHJkZXZfZ2V0X2RydmRhdGEocmRldik7CisJaW50IHZvbHRfcmVnLCBsZG8gPSByZGV2X2dldF9pZChyZGV2KTsKKwl1MTYgdmFsOworCisJc3dpdGNoIChsZG8pIHsKKwljYXNlIFdNODM1MF9MRE9fMToKKwkJdm9sdF9yZWcgPSBXTTgzNTBfTERPMV9MT1dfUE9XRVI7CisJCWJyZWFrOworCWNhc2UgV004MzUwX0xET18yOgorCQl2b2x0X3JlZyA9IFdNODM1MF9MRE8yX0xPV19QT1dFUjsKKwkJYnJlYWs7CisJY2FzZSBXTTgzNTBfTERPXzM6CisJCXZvbHRfcmVnID0gV004MzUwX0xETzNfTE9XX1BPV0VSOworCQlicmVhazsKKwljYXNlIFdNODM1MF9MRE9fNDoKKwkJdm9sdF9yZWcgPSBXTTgzNTBfTERPNF9MT1dfUE9XRVI7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qIGFsbCBMRE9zIGhhdmUgc2FtZSBtViBiaXRzICovCisJdmFsID0gd204MzUwX3JlZ19yZWFkKHdtODM1MCwgdm9sdF9yZWcpICYgfldNODM1MF9MRE8xX0hJQl9NT0RFX01BU0s7CisJd204MzUwX3JlZ193cml0ZSh3bTgzNTAsIHZvbHRfcmVnLCBXTTgzNTBfTERPMV9ISUJfTU9ERV9ESVMpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHdtODM1MF9sZG9fc2V0X3ZvbHRhZ2Uoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYsIGludCBtaW5fdVYsCisJaW50IG1heF91VikKK3sKKwlzdHJ1Y3Qgd204MzUwICp3bTgzNTAgPSByZGV2X2dldF9kcnZkYXRhKHJkZXYpOworCWludCB2b2x0X3JlZywgbGRvID0gcmRldl9nZXRfaWQocmRldiksIG1WLCBtaW5fbVYgPSBtaW5fdVYgLyAxMDAwLAorCQltYXhfbVYgPSBtYXhfdVYgLyAxMDAwOworCXUxNiB2YWw7CisKKwlpZiAobWluX21WIDwgOTAwIHx8IG1pbl9tViA+IDMzMDApCisJCXJldHVybiAtRUlOVkFMOworCWlmIChtYXhfbVYgPCA5MDAgfHwgbWF4X21WID4gMzMwMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAobWluX21WIDwgMTgwMCkgeworCQkvKiBzdGVwIHNpemUgaXMgNTBtViA8IDE4MDBtViAqLworCQltViA9IChtaW5fbVYgLSA4NTEpIC8gNTA7CisJCWlmICh3bTgzNTBfbGRvX3ZhbF90b19tdm9sdHMobVYpID4gbWF4X21WKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCUJVR19PTih3bTgzNTBfbGRvX3ZhbF90b19tdm9sdHMobVYpIDwgbWluX21WKTsKKwl9IGVsc2UgeworCQkvKiBzdGVwIHNpemUgaXMgMTAwbVYgPiAxODAwbVYgKi8KKwkJbVYgPSAoKG1pbl9tViAtIDE3MDEpIC8gMTAwKSArIDE2OworCQlpZiAod204MzUwX2xkb192YWxfdG9fbXZvbHRzKG1WKSA+IG1heF9tVikKKwkJCXJldHVybiAtRUlOVkFMOworCQlCVUdfT04od204MzUwX2xkb192YWxfdG9fbXZvbHRzKG1WKSA8IG1pbl9tVik7CisJfQorCisJc3dpdGNoIChsZG8pIHsKKwljYXNlIFdNODM1MF9MRE9fMToKKwkJdm9sdF9yZWcgPSBXTTgzNTBfTERPMV9DT05UUk9MOworCQlicmVhazsKKwljYXNlIFdNODM1MF9MRE9fMjoKKwkJdm9sdF9yZWcgPSBXTTgzNTBfTERPMl9DT05UUk9MOworCQlicmVhazsKKwljYXNlIFdNODM1MF9MRE9fMzoKKwkJdm9sdF9yZWcgPSBXTTgzNTBfTERPM19DT05UUk9MOworCQlicmVhazsKKwljYXNlIFdNODM1MF9MRE9fNDoKKwkJdm9sdF9yZWcgPSBXTTgzNTBfTERPNF9DT05UUk9MOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKiBhbGwgTERPcyBoYXZlIHNhbWUgbVYgYml0cyAqLworCXZhbCA9IHdtODM1MF9yZWdfcmVhZCh3bTgzNTAsIHZvbHRfcmVnKSAmIH5XTTgzNTBfTERPMV9WU0VMX01BU0s7CisJd204MzUwX3JlZ193cml0ZSh3bTgzNTAsIHZvbHRfcmVnLCB2YWwgfCBtVik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgd204MzUwX2xkb19nZXRfdm9sdGFnZShzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldikKK3sKKwlzdHJ1Y3Qgd204MzUwICp3bTgzNTAgPSByZGV2X2dldF9kcnZkYXRhKHJkZXYpOworCWludCB2b2x0X3JlZywgbGRvID0gcmRldl9nZXRfaWQocmRldik7CisJdTE2IHZhbDsKKworCXN3aXRjaCAobGRvKSB7CisJY2FzZSBXTTgzNTBfTERPXzE6CisJCXZvbHRfcmVnID0gV004MzUwX0xETzFfQ09OVFJPTDsKKwkJYnJlYWs7CisJY2FzZSBXTTgzNTBfTERPXzI6CisJCXZvbHRfcmVnID0gV004MzUwX0xETzJfQ09OVFJPTDsKKwkJYnJlYWs7CisJY2FzZSBXTTgzNTBfTERPXzM6CisJCXZvbHRfcmVnID0gV004MzUwX0xETzNfQ09OVFJPTDsKKwkJYnJlYWs7CisJY2FzZSBXTTgzNTBfTERPXzQ6CisJCXZvbHRfcmVnID0gV004MzUwX0xETzRfQ09OVFJPTDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogYWxsIExET3MgaGF2ZSBzYW1lIG1WIGJpdHMgKi8KKwl2YWwgPSB3bTgzNTBfcmVnX3JlYWQod204MzUwLCB2b2x0X3JlZykgJiBXTTgzNTBfTERPMV9WU0VMX01BU0s7CisJcmV0dXJuIHdtODM1MF9sZG9fdmFsX3RvX212b2x0cyh2YWwpICogMTAwMDsKK30KKworaW50IHdtODM1MF9kY2RjX3NldF9zbG90KHN0cnVjdCB3bTgzNTAgKndtODM1MCwgaW50IGRjZGMsIHUxNiBzdGFydCwKKwkJCSB1MTYgc3RvcCwgdTE2IGZhdWx0KQoreworCWludCBzbG90X3JlZzsKKwl1MTYgdmFsOworCisJZGV2X2RiZyh3bTgzNTAtPmRldiwgIiVzICVkIHN0YXJ0ICVkIHN0b3AgJWRcbiIsCisJCV9fZnVuY19fLCBkY2RjLCBzdGFydCwgc3RvcCk7CisKKwkvKiBzbG90IHZhbGlkID8gKi8KKwlpZiAoc3RhcnQgPiAxNSB8fCBzdG9wID4gMTUpCisJCXJldHVybiAtRUlOVkFMOworCisJc3dpdGNoIChkY2RjKSB7CisJY2FzZSBXTTgzNTBfRENEQ18xOgorCQlzbG90X3JlZyA9IFdNODM1MF9EQ0RDMV9USU1FT1VUUzsKKwkJYnJlYWs7CisJY2FzZSBXTTgzNTBfRENEQ18yOgorCQlzbG90X3JlZyA9IFdNODM1MF9EQ0RDMl9USU1FT1VUUzsKKwkJYnJlYWs7CisJY2FzZSBXTTgzNTBfRENEQ18zOgorCQlzbG90X3JlZyA9IFdNODM1MF9EQ0RDM19USU1FT1VUUzsKKwkJYnJlYWs7CisJY2FzZSBXTTgzNTBfRENEQ180OgorCQlzbG90X3JlZyA9IFdNODM1MF9EQ0RDNF9USU1FT1VUUzsKKwkJYnJlYWs7CisJY2FzZSBXTTgzNTBfRENEQ181OgorCQlzbG90X3JlZyA9IFdNODM1MF9EQ0RDNV9USU1FT1VUUzsKKwkJYnJlYWs7CisJY2FzZSBXTTgzNTBfRENEQ182OgorCQlzbG90X3JlZyA9IFdNODM1MF9EQ0RDNl9USU1FT1VUUzsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJdmFsID0gd204MzUwX3JlZ19yZWFkKHdtODM1MCwgc2xvdF9yZWcpICYKKwkgICAgfihXTTgzNTBfREMxX0VOU0xPVF9NQVNLIHwgV004MzUwX0RDMV9TRFNMT1RfTUFTSyB8CisJICAgICAgV004MzUwX0RDMV9FUlJBQ1RfTUFTSyk7CisJd204MzUwX3JlZ193cml0ZSh3bTgzNTAsIHNsb3RfcmVnLAorCQkJIHZhbCB8IChzdGFydCA8PCBXTTgzNTBfREMxX0VOU0xPVF9TSElGVCkgfAorCQkJIChzdG9wIDw8IFdNODM1MF9EQzFfU0RTTE9UX1NISUZUKSB8CisJCQkgKGZhdWx0IDw8IFdNODM1MF9EQzFfRVJSQUNUX1NISUZUKSk7CisKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHdtODM1MF9kY2RjX3NldF9zbG90KTsKKworaW50IHdtODM1MF9sZG9fc2V0X3Nsb3Qoc3RydWN0IHdtODM1MCAqd204MzUwLCBpbnQgbGRvLCB1MTYgc3RhcnQsIHUxNiBzdG9wKQoreworCWludCBzbG90X3JlZzsKKwl1MTYgdmFsOworCisJZGV2X2RiZyh3bTgzNTAtPmRldiwgIiVzICVkIHN0YXJ0ICVkIHN0b3AgJWRcbiIsCisJCV9fZnVuY19fLCBsZG8sIHN0YXJ0LCBzdG9wKTsKKworCS8qIHNsb3QgdmFsaWQgPyAqLworCWlmIChzdGFydCA+IDE1IHx8IHN0b3AgPiAxNSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlzd2l0Y2ggKGxkbykgeworCWNhc2UgV004MzUwX0xET18xOgorCQlzbG90X3JlZyA9IFdNODM1MF9MRE8xX1RJTUVPVVRTOworCQlicmVhazsKKwljYXNlIFdNODM1MF9MRE9fMjoKKwkJc2xvdF9yZWcgPSBXTTgzNTBfTERPMl9USU1FT1VUUzsKKwkJYnJlYWs7CisJY2FzZSBXTTgzNTBfTERPXzM6CisJCXNsb3RfcmVnID0gV004MzUwX0xETzNfVElNRU9VVFM7CisJCWJyZWFrOworCWNhc2UgV004MzUwX0xET180OgorCQlzbG90X3JlZyA9IFdNODM1MF9MRE80X1RJTUVPVVRTOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwl2YWwgPSB3bTgzNTBfcmVnX3JlYWQod204MzUwLCBzbG90X3JlZykgJiB+V004MzUwX0xETzFfU0RTTE9UX01BU0s7CisJd204MzUwX3JlZ193cml0ZSh3bTgzNTAsIHNsb3RfcmVnLCB2YWwgfCAoKHN0YXJ0IDw8IDEwKSB8IChzdG9wIDw8IDYpKSk7CisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MX0dQTCh3bTgzNTBfbGRvX3NldF9zbG90KTsKKworaW50IHdtODM1MF9kY2RjMjVfc2V0X21vZGUoc3RydWN0IHdtODM1MCAqd204MzUwLCBpbnQgZGNkYywgdTE2IG1vZGUsCisJCQkgICB1MTYgaWxpbSwgdTE2IHJhbXAsIHUxNiBmZWVkYmFjaykKK3sKKwl1MTYgdmFsOworCisJZGV2X2RiZyh3bTgzNTAtPmRldiwgIiVzICVkIG1vZGU6ICVzICVzXG4iLCBfX2Z1bmNfXywgZGNkYywKKwkJbW9kZSA/ICJub3JtYWwiIDogImJvb3N0IiwgaWxpbSA/ICJsb3ciIDogIm5vcm1hbCIpOworCisJc3dpdGNoIChkY2RjKSB7CisJY2FzZSBXTTgzNTBfRENEQ18yOgorCQl2YWwgPSB3bTgzNTBfcmVnX3JlYWQod204MzUwLCBXTTgzNTBfRENEQzJfQ09OVFJPTCkKKwkJICAgICYgfihXTTgzNTBfREMyX01PREVfTUFTSyB8IFdNODM1MF9EQzJfSUxJTV9NQVNLIHwKKwkJCVdNODM1MF9EQzJfUk1QX01BU0sgfCBXTTgzNTBfREMyX0ZCU1JDX01BU0spOworCQl3bTgzNTBfcmVnX3dyaXRlKHdtODM1MCwgV004MzUwX0RDREMyX0NPTlRST0wsIHZhbCB8CisJCQkJIChtb2RlIDw8IFdNODM1MF9EQzJfTU9ERV9TSElGVCkgfAorCQkJCSAoaWxpbSA8PCBXTTgzNTBfREMyX0lMSU1fU0hJRlQpIHwKKwkJCQkgKHJhbXAgPDwgV004MzUwX0RDMl9STVBfU0hJRlQpIHwKKwkJCQkgKGZlZWRiYWNrIDw8IFdNODM1MF9EQzJfRkJTUkNfU0hJRlQpKTsKKwkJYnJlYWs7CisJY2FzZSBXTTgzNTBfRENEQ181OgorCQl2YWwgPSB3bTgzNTBfcmVnX3JlYWQod204MzUwLCBXTTgzNTBfRENEQzVfQ09OVFJPTCkKKwkJICAgICYgfihXTTgzNTBfREM1X01PREVfTUFTSyB8IFdNODM1MF9EQzVfSUxJTV9NQVNLIHwKKwkJCVdNODM1MF9EQzVfUk1QX01BU0sgfCBXTTgzNTBfREM1X0ZCU1JDX01BU0spOworCQl3bTgzNTBfcmVnX3dyaXRlKHdtODM1MCwgV004MzUwX0RDREM1X0NPTlRST0wsIHZhbCB8CisJCQkJIChtb2RlIDw8IFdNODM1MF9EQzVfTU9ERV9TSElGVCkgfAorCQkJCSAoaWxpbSA8PCBXTTgzNTBfREM1X0lMSU1fU0hJRlQpIHwKKwkJCQkgKHJhbXAgPDwgV004MzUwX0RDNV9STVBfU0hJRlQpIHwKKwkJCQkgKGZlZWRiYWNrIDw8IFdNODM1MF9EQzVfRkJTUkNfU0hJRlQpKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MX0dQTCh3bTgzNTBfZGNkYzI1X3NldF9tb2RlKTsKKworc3RhdGljIGludCB3bTgzNTBfZGNkY19lbmFibGUoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYpCit7CisJc3RydWN0IHdtODM1MCAqd204MzUwID0gcmRldl9nZXRfZHJ2ZGF0YShyZGV2KTsKKwlpbnQgZGNkYyA9IHJkZXZfZ2V0X2lkKHJkZXYpOworCXUxNiBzaGlmdDsKKworCWlmIChkY2RjIDwgV004MzUwX0RDRENfMSB8fCBkY2RjID4gV004MzUwX0RDRENfNikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlzaGlmdCA9IGRjZGMgLSBXTTgzNTBfRENEQ18xOworCXdtODM1MF9zZXRfYml0cyh3bTgzNTAsIFdNODM1MF9EQ0RDX0xET19SRVFVRVNURUQsIDEgPDwgc2hpZnQpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHdtODM1MF9kY2RjX2Rpc2FibGUoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYpCit7CisJc3RydWN0IHdtODM1MCAqd204MzUwID0gcmRldl9nZXRfZHJ2ZGF0YShyZGV2KTsKKwlpbnQgZGNkYyA9IHJkZXZfZ2V0X2lkKHJkZXYpOworCXUxNiBzaGlmdDsKKworCWlmIChkY2RjIDwgV004MzUwX0RDRENfMSB8fCBkY2RjID4gV004MzUwX0RDRENfNikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlzaGlmdCA9IGRjZGMgLSBXTTgzNTBfRENEQ18xOworCXdtODM1MF9jbGVhcl9iaXRzKHdtODM1MCwgV004MzUwX0RDRENfTERPX1JFUVVFU1RFRCwgMSA8PCBzaGlmdCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB3bTgzNTBfbGRvX2VuYWJsZShzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldikKK3sKKwlzdHJ1Y3Qgd204MzUwICp3bTgzNTAgPSByZGV2X2dldF9kcnZkYXRhKHJkZXYpOworCWludCBsZG8gPSByZGV2X2dldF9pZChyZGV2KTsKKwl1MTYgc2hpZnQ7CisKKwlpZiAobGRvIDwgV004MzUwX0xET18xIHx8IGxkbyA+IFdNODM1MF9MRE9fNCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlzaGlmdCA9IChsZG8gLSBXTTgzNTBfTERPXzEpICsgODsKKwl3bTgzNTBfc2V0X2JpdHMod204MzUwLCBXTTgzNTBfRENEQ19MRE9fUkVRVUVTVEVELCAxIDw8IHNoaWZ0KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB3bTgzNTBfbGRvX2Rpc2FibGUoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYpCit7CisJc3RydWN0IHdtODM1MCAqd204MzUwID0gcmRldl9nZXRfZHJ2ZGF0YShyZGV2KTsKKwlpbnQgbGRvID0gcmRldl9nZXRfaWQocmRldik7CisJdTE2IHNoaWZ0OworCisJaWYgKGxkbyA8IFdNODM1MF9MRE9fMSB8fCBsZG8gPiBXTTgzNTBfTERPXzQpCisJCXJldHVybiAtRUlOVkFMOworCisJc2hpZnQgPSAobGRvIC0gV004MzUwX0xET18xKSArIDg7CisJd204MzUwX2NsZWFyX2JpdHMod204MzUwLCBXTTgzNTBfRENEQ19MRE9fUkVRVUVTVEVELCAxIDw8IHNoaWZ0KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBmb3JjZV9jb250aW51b3VzX2VuYWJsZShzdHJ1Y3Qgd204MzUwICp3bTgzNTAsIGludCBkY2RjLCBpbnQgZW5hYmxlKQoreworCWludCByZWcgPSAwLCByZXQ7CisKKwlzd2l0Y2ggKGRjZGMpIHsKKwljYXNlIFdNODM1MF9EQ0RDXzE6CisJCXJlZyA9IFdNODM1MF9EQ0RDMV9GT1JDRV9QV007CisJCWJyZWFrOworCWNhc2UgV004MzUwX0RDRENfMzoKKwkJcmVnID0gV004MzUwX0RDREMzX0ZPUkNFX1BXTTsKKwkJYnJlYWs7CisJY2FzZSBXTTgzNTBfRENEQ180OgorCQlyZWcgPSBXTTgzNTBfRENEQzRfRk9SQ0VfUFdNOworCQlicmVhazsKKwljYXNlIFdNODM1MF9EQ0RDXzY6CisJCXJlZyA9IFdNODM1MF9EQ0RDNl9GT1JDRV9QV007CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmIChlbmFibGUpCisJCXJldCA9IHdtODM1MF9zZXRfYml0cyh3bTgzNTAsIHJlZywKKwkJCVdNODM1MF9EQ0RDMV9GT1JDRV9QV01fRU5BKTsKKwllbHNlCisJCXJldCA9IHdtODM1MF9jbGVhcl9iaXRzKHdtODM1MCwgcmVnLAorCQkJV004MzUwX0RDREMxX0ZPUkNFX1BXTV9FTkEpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgd204MzUwX2RjZGNfc2V0X21vZGUoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYsIHVuc2lnbmVkIGludCBtb2RlKQoreworCXN0cnVjdCB3bTgzNTAgKndtODM1MCA9IHJkZXZfZ2V0X2RydmRhdGEocmRldik7CisJaW50IGRjZGMgPSByZGV2X2dldF9pZChyZGV2KTsKKwl1MTYgdmFsOworCisJaWYgKGRjZGMgPCBXTTgzNTBfRENEQ18xIHx8IGRjZGMgPiBXTTgzNTBfRENEQ182KQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChkY2RjID09IFdNODM1MF9EQ0RDXzIgfHwgZGNkYyA9PSBXTTgzNTBfRENEQ181KQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXZhbCA9IDEgPDwgKGRjZGMgLSBXTTgzNTBfRENEQ18xKTsKKworCXN3aXRjaCAobW9kZSkgeworCWNhc2UgUkVHVUxBVE9SX01PREVfRkFTVDoKKwkJLyogZm9yY2UgY29udGludW91cyBtb2RlICovCisJCXdtODM1MF9zZXRfYml0cyh3bTgzNTAsIFdNODM1MF9EQ0RDX0FDVElWRV9PUFRJT05TLCB2YWwpOworCQl3bTgzNTBfY2xlYXJfYml0cyh3bTgzNTAsIFdNODM1MF9EQ0RDX1NMRUVQX09QVElPTlMsIHZhbCk7CisJCWZvcmNlX2NvbnRpbnVvdXNfZW5hYmxlKHdtODM1MCwgZGNkYywgMSk7CisJCWJyZWFrOworCWNhc2UgUkVHVUxBVE9SX01PREVfTk9STUFMOgorCQkvKiBhY3RpdmUgLyBwdWxzZSBza2lwcGluZyAqLworCQl3bTgzNTBfc2V0X2JpdHMod204MzUwLCBXTTgzNTBfRENEQ19BQ1RJVkVfT1BUSU9OUywgdmFsKTsKKwkJd204MzUwX2NsZWFyX2JpdHMod204MzUwLCBXTTgzNTBfRENEQ19TTEVFUF9PUFRJT05TLCB2YWwpOworCQlmb3JjZV9jb250aW51b3VzX2VuYWJsZSh3bTgzNTAsIGRjZGMsIDApOworCQlicmVhazsKKwljYXNlIFJFR1VMQVRPUl9NT0RFX0lETEU6CisJCS8qIHN0YW5kYnkgbW9kZSAqLworCQlmb3JjZV9jb250aW51b3VzX2VuYWJsZSh3bTgzNTAsIGRjZGMsIDApOworCQl3bTgzNTBfY2xlYXJfYml0cyh3bTgzNTAsIFdNODM1MF9EQ0RDX1NMRUVQX09QVElPTlMsIHZhbCk7CisJCXdtODM1MF9jbGVhcl9iaXRzKHdtODM1MCwgV004MzUwX0RDRENfQUNUSVZFX09QVElPTlMsIHZhbCk7CisJCWJyZWFrOworCWNhc2UgUkVHVUxBVE9SX01PREVfU1RBTkRCWToKKwkJLyogTERPIG1vZGUgKi8KKwkJZm9yY2VfY29udGludW91c19lbmFibGUod204MzUwLCBkY2RjLCAwKTsKKwkJd204MzUwX3NldF9iaXRzKHdtODM1MCwgV004MzUwX0RDRENfU0xFRVBfT1BUSU9OUywgdmFsKTsKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgd204MzUwX2RjZGNfZ2V0X21vZGUoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYpCit7CisJc3RydWN0IHdtODM1MCAqd204MzUwID0gcmRldl9nZXRfZHJ2ZGF0YShyZGV2KTsKKwlpbnQgZGNkYyA9IHJkZXZfZ2V0X2lkKHJkZXYpOworCXUxNiBtYXNrLCBzbGVlcCwgYWN0aXZlLCBmb3JjZTsKKwlpbnQgbW9kZSA9IFJFR1VMQVRPUl9NT0RFX05PUk1BTDsKKworCWlmIChkY2RjIDwgV004MzUwX0RDRENfMSB8fCBkY2RjID4gV004MzUwX0RDRENfNikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoZGNkYyA9PSBXTTgzNTBfRENEQ18yIHx8IGRjZGMgPT0gV004MzUwX0RDRENfNSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwltYXNrID0gMSA8PCAoZGNkYyAtIFdNODM1MF9EQ0RDXzEpOworCWFjdGl2ZSA9IHdtODM1MF9yZWdfcmVhZCh3bTgzNTAsIFdNODM1MF9EQ0RDX0FDVElWRV9PUFRJT05TKSAmIG1hc2s7CisJc2xlZXAgPSB3bTgzNTBfcmVnX3JlYWQod204MzUwLCBXTTgzNTBfRENEQ19TTEVFUF9PUFRJT05TKSAmIG1hc2s7CisJZm9yY2UgPSB3bTgzNTBfcmVnX3JlYWQod204MzUwLCBXTTgzNTBfRENEQzFfRk9SQ0VfUFdNKQorCSAgICAmIFdNODM1MF9EQ0RDMV9GT1JDRV9QV01fRU5BOworCWRldl9kYmcod204MzUwLT5kZXYsICJtYXNrICV4IGFjdGl2ZSAleCBzbGVlcCAleCBmb3JjZSAleCIsCisJCW1hc2ssIGFjdGl2ZSwgc2xlZXAsIGZvcmNlKTsKKworCWlmIChhY3RpdmUgJiYgIXNsZWVwKSB7CisJCWlmIChmb3JjZSkKKwkJCW1vZGUgPSBSRUdVTEFUT1JfTU9ERV9GQVNUOworCQllbHNlCisJCQltb2RlID0gUkVHVUxBVE9SX01PREVfTk9STUFMOworCX0gZWxzZSBpZiAoIWFjdGl2ZSAmJiAhc2xlZXApCisJCW1vZGUgPSBSRUdVTEFUT1JfTU9ERV9JRExFOworCWVsc2UgaWYgKCFzbGVlcCkKKwkJbW9kZSA9IFJFR1VMQVRPUl9NT0RFX1NUQU5EQlk7CisKKwlyZXR1cm4gbW9kZTsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCB3bTgzNTBfbGRvX2dldF9tb2RlKHN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2KQoreworCXJldHVybiBSRUdVTEFUT1JfTU9ERV9OT1JNQUw7Cit9CisKK3N0cnVjdCB3bTgzNTBfZGNkY19lZmZpY2llbmN5IHsKKwlpbnQgdUFfbG9hZF9taW47CisJaW50IHVBX2xvYWRfbWF4OworCXVuc2lnbmVkIGludCBtb2RlOworfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB3bTgzNTBfZGNkY19lZmZpY2llbmN5IGRjZGMxXzZfZWZmaWNpZW5jeVtdID0geworCXswLCAxMDAwMCwgUkVHVUxBVE9SX01PREVfU1RBTkRCWX0sICAgICAgIC8qIDAgLSAxMG1BIC0gTERPICovCisJezEwMDAwLCAxMDAwMDAsIFJFR1VMQVRPUl9NT0RFX0lETEV9LCAgICAgLyogMTBtQSAtIDEwMG1BIC0gU3RhbmRieSAqLworCXsxMDAwMDAsIDEwMDAwMDAsIFJFR1VMQVRPUl9NT0RFX05PUk1BTH0sIC8qID4gMTAwbUEgLSBBY3RpdmUgKi8KKwl7LTEsIC0xLCBSRUdVTEFUT1JfTU9ERV9OT1JNQUx9LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB3bTgzNTBfZGNkY19lZmZpY2llbmN5IGRjZGMzXzRfZWZmaWNpZW5jeVtdID0geworCXswLCAxMDAwMCwgUkVHVUxBVE9SX01PREVfU1RBTkRCWX0sICAgICAgLyogMCAtIDEwbUEgLSBMRE8gKi8KKwl7MTAwMDAsIDEwMDAwMCwgUkVHVUxBVE9SX01PREVfSURMRX0sICAgIC8qIDEwbUEgLSAxMDBtQSAtIFN0YW5kYnkgKi8KKwl7MTAwMDAwLCA4MDAwMDAsIFJFR1VMQVRPUl9NT0RFX05PUk1BTH0sIC8qID4gMTAwbUEgLSBBY3RpdmUgKi8KKwl7LTEsIC0xLCBSRUdVTEFUT1JfTU9ERV9OT1JNQUx9LAorfTsKKworc3RhdGljIHVuc2lnbmVkIGludCBnZXRfbW9kZShpbnQgdUEsIGNvbnN0IHN0cnVjdCB3bTgzNTBfZGNkY19lZmZpY2llbmN5ICplZmYpCit7CisJaW50IGkgPSAwOworCisJd2hpbGUgKGVmZltpXS51QV9sb2FkX21pbiAhPSAtMSkgeworCQlpZiAodUEgPj0gZWZmW2ldLnVBX2xvYWRfbWluICYmIHVBIDw9IGVmZltpXS51QV9sb2FkX21heCkKKwkJCXJldHVybiBlZmZbaV0ubW9kZTsKKwl9CisJcmV0dXJuIFJFR1VMQVRPUl9NT0RFX05PUk1BTDsKK30KKworLyogUXVlcnkgdGhlIHJlZ3VsYXRvciBmb3IgaXQncyBtb3N0IGVmZmljaWVudCBtb2RlIEAgdVYsdUEKKyAqIFdNODM1MCByZWd1bGF0b3IgZWZmaWNpZW5jeSBpcyBwcmV0dHkgc2ltaWxhciBvdmVyCisgKiBkaWZmZXJlbnQgaW5wdXQgYW5kIG91dHB1dCB1Vi4KKyAqLworc3RhdGljIHVuc2lnbmVkIGludCB3bTgzNTBfZGNkY19nZXRfb3B0aW11bV9tb2RlKHN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2LAorCQkJCQkJIGludCBpbnB1dF91ViwgaW50IG91dHB1dF91ViwKKwkJCQkJCSBpbnQgb3V0cHV0X3VBKQoreworCWludCBkY2RjID0gcmRldl9nZXRfaWQocmRldiksIG1vZGU7CisKKwlzd2l0Y2ggKGRjZGMpIHsKKwljYXNlIFdNODM1MF9EQ0RDXzE6CisJY2FzZSBXTTgzNTBfRENEQ182OgorCQltb2RlID0gZ2V0X21vZGUob3V0cHV0X3VBLCBkY2RjMV82X2VmZmljaWVuY3kpOworCQlicmVhazsKKwljYXNlIFdNODM1MF9EQ0RDXzM6CisJY2FzZSBXTTgzNTBfRENEQ180OgorCQltb2RlID0gZ2V0X21vZGUob3V0cHV0X3VBLCBkY2RjM180X2VmZmljaWVuY3kpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQltb2RlID0gUkVHVUxBVE9SX01PREVfTk9STUFMOworCQlicmVhazsKKwl9CisJcmV0dXJuIG1vZGU7Cit9CisKK3N0YXRpYyBpbnQgd204MzUwX2RjZGNfaXNfZW5hYmxlZChzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldikKK3sKKwlzdHJ1Y3Qgd204MzUwICp3bTgzNTAgPSByZGV2X2dldF9kcnZkYXRhKHJkZXYpOworCWludCBkY2RjID0gcmRldl9nZXRfaWQocmRldiksIHNoaWZ0OworCisJaWYgKGRjZGMgPCBXTTgzNTBfRENEQ18xIHx8IGRjZGMgPiBXTTgzNTBfRENEQ182KQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXNoaWZ0ID0gZGNkYyAtIFdNODM1MF9EQ0RDXzE7CisJcmV0dXJuIHdtODM1MF9yZWdfcmVhZCh3bTgzNTAsIFdNODM1MF9EQ0RDX0xET19SRVFVRVNURUQpCisJICAgICYgKDEgPDwgc2hpZnQpOworfQorCitzdGF0aWMgaW50IHdtODM1MF9sZG9faXNfZW5hYmxlZChzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldikKK3sKKwlzdHJ1Y3Qgd204MzUwICp3bTgzNTAgPSByZGV2X2dldF9kcnZkYXRhKHJkZXYpOworCWludCBsZG8gPSByZGV2X2dldF9pZChyZGV2KSwgc2hpZnQ7CisKKwlpZiAobGRvIDwgV004MzUwX0xET18xIHx8IGxkbyA+IFdNODM1MF9MRE9fNCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlzaGlmdCA9IChsZG8gLSBXTTgzNTBfTERPXzEpICsgODsKKwlyZXR1cm4gd204MzUwX3JlZ19yZWFkKHdtODM1MCwgV004MzUwX0RDRENfTERPX1JFUVVFU1RFRCkKKwkgICAgJiAoMSA8PCBzaGlmdCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX29wcyB3bTgzNTBfZGNkY19vcHMgPSB7CisJLnNldF92b2x0YWdlID0gd204MzUwX2RjZGNfc2V0X3ZvbHRhZ2UsCisJLmdldF92b2x0YWdlID0gd204MzUwX2RjZGNfZ2V0X3ZvbHRhZ2UsCisJLmVuYWJsZSA9IHdtODM1MF9kY2RjX2VuYWJsZSwKKwkuZGlzYWJsZSA9IHdtODM1MF9kY2RjX2Rpc2FibGUsCisJLmdldF9tb2RlID0gd204MzUwX2RjZGNfZ2V0X21vZGUsCisJLnNldF9tb2RlID0gd204MzUwX2RjZGNfc2V0X21vZGUsCisJLmdldF9vcHRpbXVtX21vZGUgPSB3bTgzNTBfZGNkY19nZXRfb3B0aW11bV9tb2RlLAorCS5pc19lbmFibGVkID0gd204MzUwX2RjZGNfaXNfZW5hYmxlZCwKKwkuc2V0X3N1c3BlbmRfdm9sdGFnZSA9IHdtODM1MF9kY2RjX3NldF9zdXNwZW5kX3ZvbHRhZ2UsCisJLnNldF9zdXNwZW5kX2VuYWJsZSA9IHdtODM1MF9kY2RjX3NldF9zdXNwZW5kX2VuYWJsZSwKKwkuc2V0X3N1c3BlbmRfZGlzYWJsZSA9IHdtODM1MF9kY2RjX3NldF9zdXNwZW5kX2Rpc2FibGUsCisJLnNldF9zdXNwZW5kX21vZGUgPSB3bTgzNTBfZGNkY19zZXRfc3VzcGVuZF9tb2RlLAorfTsKKworc3RhdGljIHN0cnVjdCByZWd1bGF0b3Jfb3BzIHdtODM1MF9kY2RjMl81X29wcyA9IHsKKwkuZW5hYmxlID0gd204MzUwX2RjZGNfZW5hYmxlLAorCS5kaXNhYmxlID0gd204MzUwX2RjZGNfZGlzYWJsZSwKKwkuaXNfZW5hYmxlZCA9IHdtODM1MF9kY2RjX2lzX2VuYWJsZWQsCisJLnNldF9zdXNwZW5kX2VuYWJsZSA9IHdtODM1MF9kY2RjMjVfc2V0X3N1c3BlbmRfZW5hYmxlLAorCS5zZXRfc3VzcGVuZF9kaXNhYmxlID0gd204MzUwX2RjZGMyNV9zZXRfc3VzcGVuZF9kaXNhYmxlLAorfTsKKworc3RhdGljIHN0cnVjdCByZWd1bGF0b3Jfb3BzIHdtODM1MF9sZG9fb3BzID0geworCS5zZXRfdm9sdGFnZSA9IHdtODM1MF9sZG9fc2V0X3ZvbHRhZ2UsCisJLmdldF92b2x0YWdlID0gd204MzUwX2xkb19nZXRfdm9sdGFnZSwKKwkuZW5hYmxlID0gd204MzUwX2xkb19lbmFibGUsCisJLmRpc2FibGUgPSB3bTgzNTBfbGRvX2Rpc2FibGUsCisJLmlzX2VuYWJsZWQgPSB3bTgzNTBfbGRvX2lzX2VuYWJsZWQsCisJLmdldF9tb2RlID0gd204MzUwX2xkb19nZXRfbW9kZSwKKwkuc2V0X3N1c3BlbmRfdm9sdGFnZSA9IHdtODM1MF9sZG9fc2V0X3N1c3BlbmRfdm9sdGFnZSwKKwkuc2V0X3N1c3BlbmRfZW5hYmxlID0gd204MzUwX2xkb19zZXRfc3VzcGVuZF9lbmFibGUsCisJLnNldF9zdXNwZW5kX2Rpc2FibGUgPSB3bTgzNTBfbGRvX3NldF9zdXNwZW5kX2Rpc2FibGUsCit9OworCitzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9vcHMgd204MzUwX2lzaW5rX29wcyA9IHsKKwkuc2V0X2N1cnJlbnRfbGltaXQgPSB3bTgzNTBfaXNpbmtfc2V0X2N1cnJlbnQsCisJLmdldF9jdXJyZW50X2xpbWl0ID0gd204MzUwX2lzaW5rX2dldF9jdXJyZW50LAorCS5lbmFibGUgPSB3bTgzNTBfaXNpbmtfZW5hYmxlLAorCS5kaXNhYmxlID0gd204MzUwX2lzaW5rX2Rpc2FibGUsCisJLmlzX2VuYWJsZWQgPSB3bTgzNTBfaXNpbmtfaXNfZW5hYmxlZCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2Rlc2Mgd204MzUwX3JlZ1tOVU1fV004MzUwX1JFR1VMQVRPUlNdID0geworCXsKKwkJLm5hbWUgPSAiRENEQzEiLAorCQkuaWQgPSBXTTgzNTBfRENEQ18xLAorCQkub3BzID0gJndtODM1MF9kY2RjX29wcywKKwkJLmlycSA9IFdNODM1MF9JUlFfVVZfREMxLAorCQkudHlwZSA9IFJFR1VMQVRPUl9WT0xUQUdFLAorCQkub3duZXIgPSBUSElTX01PRFVMRSwKKwl9LAorCXsKKwkJLm5hbWUgPSAiRENEQzIiLAorCQkuaWQgPSBXTTgzNTBfRENEQ18yLAorCQkub3BzID0gJndtODM1MF9kY2RjMl81X29wcywKKwkJLmlycSA9IFdNODM1MF9JUlFfVVZfREMyLAorCQkudHlwZSA9IFJFR1VMQVRPUl9WT0xUQUdFLAorCQkub3duZXIgPSBUSElTX01PRFVMRSwKKwl9LAorCXsKKwkJLm5hbWUgPSAiRENEQzMiLAorCQkuaWQgPSBXTTgzNTBfRENEQ18zLAorCQkub3BzID0gJndtODM1MF9kY2RjX29wcywKKwkJLmlycSA9IFdNODM1MF9JUlFfVVZfREMzLAorCQkudHlwZSA9IFJFR1VMQVRPUl9WT0xUQUdFLAorCQkub3duZXIgPSBUSElTX01PRFVMRSwKKwl9LAorCXsKKwkJLm5hbWUgPSAiRENEQzQiLAorCQkuaWQgPSBXTTgzNTBfRENEQ180LAorCQkub3BzID0gJndtODM1MF9kY2RjX29wcywKKwkJLmlycSA9IFdNODM1MF9JUlFfVVZfREM0LAorCQkudHlwZSA9IFJFR1VMQVRPUl9WT0xUQUdFLAorCQkub3duZXIgPSBUSElTX01PRFVMRSwKKwl9LAorCXsKKwkJLm5hbWUgPSAiRENEQzUiLAorCQkuaWQgPSBXTTgzNTBfRENEQ181LAorCQkub3BzID0gJndtODM1MF9kY2RjMl81X29wcywKKwkJLmlycSA9IFdNODM1MF9JUlFfVVZfREM1LAorCQkudHlwZSA9IFJFR1VMQVRPUl9WT0xUQUdFLAorCQkub3duZXIgPSBUSElTX01PRFVMRSwKKwkgfSwKKwl7CisJCS5uYW1lID0gIkRDREM2IiwKKwkJLmlkID0gV004MzUwX0RDRENfNiwKKwkJLm9wcyA9ICZ3bTgzNTBfZGNkY19vcHMsCisJCS5pcnEgPSBXTTgzNTBfSVJRX1VWX0RDNiwKKwkJLnR5cGUgPSBSRUdVTEFUT1JfVk9MVEFHRSwKKwkJLm93bmVyID0gVEhJU19NT0RVTEUsCisJfSwKKwl7CisJCS5uYW1lID0gIkxETzEiLAorCQkuaWQgPSBXTTgzNTBfTERPXzEsCisJCS5vcHMgPSAmd204MzUwX2xkb19vcHMsCisJCS5pcnEgPSBXTTgzNTBfSVJRX1VWX0xETzEsCisJCS50eXBlID0gUkVHVUxBVE9SX1ZPTFRBR0UsCisJCS5vd25lciA9IFRISVNfTU9EVUxFLAorCX0sCisJeworCQkubmFtZSA9ICJMRE8yIiwKKwkJLmlkID0gV004MzUwX0xET18yLAorCQkub3BzID0gJndtODM1MF9sZG9fb3BzLAorCQkuaXJxID0gV004MzUwX0lSUV9VVl9MRE8yLAorCQkudHlwZSA9IFJFR1VMQVRPUl9WT0xUQUdFLAorCQkub3duZXIgPSBUSElTX01PRFVMRSwKKwl9LAorCXsKKwkJLm5hbWUgPSAiTERPMyIsCisJCS5pZCA9IFdNODM1MF9MRE9fMywKKwkJLm9wcyA9ICZ3bTgzNTBfbGRvX29wcywKKwkJLmlycSA9IFdNODM1MF9JUlFfVVZfTERPMywKKwkJLnR5cGUgPSBSRUdVTEFUT1JfVk9MVEFHRSwKKwkJLm93bmVyID0gVEhJU19NT0RVTEUsCisJfSwKKwl7CisJCS5uYW1lID0gIkxETzQiLAorCQkuaWQgPSBXTTgzNTBfTERPXzQsCisJCS5vcHMgPSAmd204MzUwX2xkb19vcHMsCisJCS5pcnEgPSBXTTgzNTBfSVJRX1VWX0xETzQsCisJCS50eXBlID0gUkVHVUxBVE9SX1ZPTFRBR0UsCisJCS5vd25lciA9IFRISVNfTU9EVUxFLAorCX0sCisJeworCQkubmFtZSA9ICJJU0lOS0EiLAorCQkuaWQgPSBXTTgzNTBfSVNJTktfQSwKKwkJLm9wcyA9ICZ3bTgzNTBfaXNpbmtfb3BzLAorCQkuaXJxID0gV004MzUwX0lSUV9DUzEsCisJCS50eXBlID0gUkVHVUxBVE9SX0NVUlJFTlQsCisJCS5vd25lciA9IFRISVNfTU9EVUxFLAorCSB9LAorCXsKKwkJLm5hbWUgPSAiSVNJTktCIiwKKwkJLmlkID0gV004MzUwX0lTSU5LX0IsCisJCS5vcHMgPSAmd204MzUwX2lzaW5rX29wcywKKwkJLmlycSA9IFdNODM1MF9JUlFfQ1MyLAorCQkudHlwZSA9IFJFR1VMQVRPUl9DVVJSRU5ULAorCQkub3duZXIgPSBUSElTX01PRFVMRSwKKwkgfSwKK307CisKK3N0YXRpYyB2b2lkIHBtaWNfdXZfaGFuZGxlcihzdHJ1Y3Qgd204MzUwICp3bTgzNTAsIGludCBpcnEsIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYgPSAoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKilkYXRhOworCisJaWYgKGlycSA9PSBXTTgzNTBfSVJRX0NTMSB8fCBpcnEgPT0gV004MzUwX0lSUV9DUzIpCisJCXJlZ3VsYXRvcl9ub3RpZmllcl9jYWxsX2NoYWluKHJkZXYsCisJCQkJCSAgICAgIFJFR1VMQVRPUl9FVkVOVF9SRUdVTEFUSU9OX09VVCwKKwkJCQkJICAgICAgd204MzUwKTsKKwllbHNlCisJCXJlZ3VsYXRvcl9ub3RpZmllcl9jYWxsX2NoYWluKHJkZXYsCisJCQkJCSAgICAgIFJFR1VMQVRPUl9FVkVOVF9VTkRFUl9WT0xUQUdFLAorCQkJCQkgICAgICB3bTgzNTApOworfQorCitzdGF0aWMgaW50IHdtODM1MF9yZWd1bGF0b3JfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3Qgd204MzUwICp3bTgzNTAgPSBkZXZfZ2V0X2RydmRhdGEoJnBkZXYtPmRldik7CisJc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXY7CisJaW50IHJldDsKKwl1MTYgdmFsOworCisJaWYgKHBkZXYtPmlkIDwgV004MzUwX0RDRENfMSB8fCBwZGV2LT5pZCA+IFdNODM1MF9JU0lOS19CKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCS8qIGRvIGFueSByZWd1bGF0aW9yIHNwZWNpZmljIGluaXQgKi8KKwlzd2l0Y2ggKHBkZXYtPmlkKSB7CisJY2FzZSBXTTgzNTBfRENEQ18xOgorCQl2YWwgPSB3bTgzNTBfcmVnX3JlYWQod204MzUwLCBXTTgzNTBfRENEQzFfTE9XX1BPV0VSKTsKKwkJd204MzUwLT5wbWljLmRjZGMxX2hpYl9tb2RlID0gdmFsICYgV004MzUwX0RDRENfSElCX01PREVfTUFTSzsKKwkJYnJlYWs7CisJY2FzZSBXTTgzNTBfRENEQ18zOgorCQl2YWwgPSB3bTgzNTBfcmVnX3JlYWQod204MzUwLCBXTTgzNTBfRENEQzNfTE9XX1BPV0VSKTsKKwkJd204MzUwLT5wbWljLmRjZGMzX2hpYl9tb2RlID0gdmFsICYgV004MzUwX0RDRENfSElCX01PREVfTUFTSzsKKwkJYnJlYWs7CisJY2FzZSBXTTgzNTBfRENEQ180OgorCQl2YWwgPSB3bTgzNTBfcmVnX3JlYWQod204MzUwLCBXTTgzNTBfRENEQzRfTE9XX1BPV0VSKTsKKwkJd204MzUwLT5wbWljLmRjZGM0X2hpYl9tb2RlID0gdmFsICYgV004MzUwX0RDRENfSElCX01PREVfTUFTSzsKKwkJYnJlYWs7CisJY2FzZSBXTTgzNTBfRENEQ182OgorCQl2YWwgPSB3bTgzNTBfcmVnX3JlYWQod204MzUwLCBXTTgzNTBfRENEQzZfTE9XX1BPV0VSKTsKKwkJd204MzUwLT5wbWljLmRjZGM2X2hpYl9tb2RlID0gdmFsICYgV004MzUwX0RDRENfSElCX01PREVfTUFTSzsKKwkJYnJlYWs7CisJfQorCisKKwkvKiByZWdpc3RlciByZWd1bGF0b3IgKi8KKwlyZGV2ID0gcmVndWxhdG9yX3JlZ2lzdGVyKCZ3bTgzNTBfcmVnW3BkZXYtPmlkXSwgJnBkZXYtPmRldiwKKwkJCQkgIGRldl9nZXRfZHJ2ZGF0YSgmcGRldi0+ZGV2KSk7CisJaWYgKElTX0VSUihyZGV2KSkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gcmVnaXN0ZXIgJXNcbiIsCisJCQl3bTgzNTBfcmVnW3BkZXYtPmlkXS5uYW1lKTsKKwkJcmV0dXJuIFBUUl9FUlIocmRldik7CisJfQorCisJLyogcmVnaXN0ZXIgcmVndWxhdG9yIElSUSAqLworCXJldCA9IHdtODM1MF9yZWdpc3Rlcl9pcnEod204MzUwLCB3bTgzNTBfcmVnW3BkZXYtPmlkXS5pcnEsCisJCQkJICBwbWljX3V2X2hhbmRsZXIsIHJkZXYpOworCWlmIChyZXQgPCAwKSB7CisJCXJlZ3VsYXRvcl91bnJlZ2lzdGVyKHJkZXYpOworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gcmVnaXN0ZXIgcmVndWxhdG9yICVzIElSUVxuIiwKKwkJCXdtODM1MF9yZWdbcGRldi0+aWRdLm5hbWUpOworCQlyZXR1cm4gcmV0OworCX0KKworCXdtODM1MF91bm1hc2tfaXJxKHdtODM1MCwgd204MzUwX3JlZ1twZGV2LT5pZF0uaXJxKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHdtODM1MF9yZWd1bGF0b3JfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3Qgd204MzUwICp3bTgzNTAgPSByZGV2X2dldF9kcnZkYXRhKHJkZXYpOworCisJd204MzUwX21hc2tfaXJxKHdtODM1MCwgd204MzUwX3JlZ1twZGV2LT5pZF0uaXJxKTsKKwl3bTgzNTBfZnJlZV9pcnEod204MzUwLCB3bTgzNTBfcmVnW3BkZXYtPmlkXS5pcnEpOworCisJcmVndWxhdG9yX3VucmVnaXN0ZXIocmRldik7CisKKwlyZXR1cm4gMDsKK30KKworaW50IHdtODM1MF9yZWdpc3Rlcl9yZWd1bGF0b3Ioc3RydWN0IHdtODM1MCAqd204MzUwLCBpbnQgcmVnLAorCQkJICAgICAgc3RydWN0IHJlZ3VsYXRvcl9pbml0X2RhdGEgKmluaXRkYXRhKQoreworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXY7CisJaW50IHJldDsKKworCWlmICh3bTgzNTAtPnBtaWMucGRldltyZWddKQorCQlyZXR1cm4gLUVCVVNZOworCisJcGRldiA9IHBsYXRmb3JtX2RldmljZV9hbGxvYygid204MzUwLXJlZ3VsYXRvciIsIHJlZyk7CisJaWYgKCFwZGV2KQorCQlyZXR1cm4gLUVOT01FTTsKKworCXdtODM1MC0+cG1pYy5wZGV2W3JlZ10gPSBwZGV2OworCisJaW5pdGRhdGEtPmRyaXZlcl9kYXRhID0gd204MzUwOworCisJcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGEgPSBpbml0ZGF0YTsKKwlwZGV2LT5kZXYucGFyZW50ID0gd204MzUwLT5kZXY7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgd204MzUwKTsKKworCXJldCA9IHBsYXRmb3JtX2RldmljZV9hZGQocGRldik7CisKKwlpZiAocmV0ICE9IDApIHsKKwkJZGV2X2Vycih3bTgzNTAtPmRldiwgIkZhaWxlZCB0byByZWdpc3RlciByZWd1bGF0b3IgJWQ6ICVkXG4iLAorCQkJcmVnLCByZXQpOworCQlwbGF0Zm9ybV9kZXZpY2VfZGVsKHBkZXYpOworCQl3bTgzNTAtPnBtaWMucGRldltyZWddID0gTlVMTDsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTF9HUEwod204MzUwX3JlZ2lzdGVyX3JlZ3VsYXRvcik7CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHdtODM1MF9yZWd1bGF0b3JfZHJpdmVyID0geworCS5wcm9iZSA9IHdtODM1MF9yZWd1bGF0b3JfcHJvYmUsCisJLnJlbW92ZSA9IHdtODM1MF9yZWd1bGF0b3JfcmVtb3ZlLAorCS5kcml2ZXIJCT0geworCQkubmFtZQk9ICJ3bTgzNTAtcmVndWxhdG9yIiwKKwl9LAorfTsKKworc3RhdGljIGludCBfX2luaXQgd204MzUwX3JlZ3VsYXRvcl9pbml0KHZvaWQpCit7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3Rlcigmd204MzUwX3JlZ3VsYXRvcl9kcml2ZXIpOworfQorc3Vic3lzX2luaXRjYWxsKHdtODM1MF9yZWd1bGF0b3JfaW5pdCk7CisKK3N0YXRpYyB2b2lkIF9fZXhpdCB3bTgzNTBfcmVndWxhdG9yX2V4aXQodm9pZCkKK3sKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3Rlcigmd204MzUwX3JlZ3VsYXRvcl9kcml2ZXIpOworfQorbW9kdWxlX2V4aXQod204MzUwX3JlZ3VsYXRvcl9leGl0KTsKKworLyogTW9kdWxlIGluZm9ybWF0aW9uICovCitNT0RVTEVfQVVUSE9SKCJMaWFtIEdpcmR3b29kIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIldNODM1MCB2b2x0YWdlIGFuZCBjdXJyZW50IHJlZ3VsYXRvciBkcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcmVndWxhdG9yL3dtODQwMC1yZWd1bGF0b3IuYyBiL2RyaXZlcnMvcmVndWxhdG9yL3dtODQwMC1yZWd1bGF0b3IuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OGIzNzJlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9yZWd1bGF0b3Ivd204NDAwLXJlZ3VsYXRvci5jCkBAIC0wLDAgKzEsMzY4IEBACisvKgorICogUmVndWxhdG9yIHN1cHBvcnQgZm9yIFdNODQwMAorICoKKyAqIENvcHlyaWdodCAyMDA4IFdvbGZzb24gTWljcm9lbGVjdHJvbmljcyBQTEMuCisgKgorICogQXV0aG9yOiBNYXJrIEJyb3duIDxicm9vbmllQG9wZW5zb3VyY2Uud29sZnNvbm1pY3JvLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlCisgKiBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvYnVnLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvcmVndWxhdG9yL2RyaXZlci5oPgorI2luY2x1ZGUgPGxpbnV4L21mZC93bTg0MDAtcHJpdmF0ZS5oPgorCitzdGF0aWMgaW50IHdtODQwMF9sZG9faXNfZW5hYmxlZChzdHJ1Y3QgcmVndWxhdG9yX2RldiAqZGV2KQoreworCXN0cnVjdCB3bTg0MDAgKndtODQwMCA9IHJkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwl1MTYgdmFsOworCisJdmFsID0gd204NDAwX3JlZ19yZWFkKHdtODQwMCwgV004NDAwX0xETzFfQ09OVFJPTCArIHJkZXZfZ2V0X2lkKGRldikpOworCXJldHVybiAodmFsICYgV004NDAwX0xETzFfRU5BKSAhPSAwOworfQorCitzdGF0aWMgaW50IHdtODQwMF9sZG9fZW5hYmxlKHN0cnVjdCByZWd1bGF0b3JfZGV2ICpkZXYpCit7CisJc3RydWN0IHdtODQwMCAqd204NDAwID0gcmRldl9nZXRfZHJ2ZGF0YShkZXYpOworCisJcmV0dXJuIHdtODQwMF9zZXRfYml0cyh3bTg0MDAsIFdNODQwMF9MRE8xX0NPTlRST0wgKyByZGV2X2dldF9pZChkZXYpLAorCQkJICAgICAgIFdNODQwMF9MRE8xX0VOQSwgV004NDAwX0xETzFfRU5BKTsKK30KKworc3RhdGljIGludCB3bTg0MDBfbGRvX2Rpc2FibGUoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKmRldikKK3sKKwlzdHJ1Y3Qgd204NDAwICp3bTg0MDAgPSByZGV2X2dldF9kcnZkYXRhKGRldik7CisKKwlyZXR1cm4gd204NDAwX3NldF9iaXRzKHdtODQwMCwgV004NDAwX0xETzFfQ09OVFJPTCArIHJkZXZfZ2V0X2lkKGRldiksCisJCQkgICAgICAgV004NDAwX0xETzFfRU5BLCAwKTsKK30KKworc3RhdGljIGludCB3bTg0MDBfbGRvX2dldF92b2x0YWdlKHN0cnVjdCByZWd1bGF0b3JfZGV2ICpkZXYpCit7CisJc3RydWN0IHdtODQwMCAqd204NDAwID0gcmRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXUxNiB2YWw7CisKKwl2YWwgPSB3bTg0MDBfcmVnX3JlYWQod204NDAwLCBXTTg0MDBfTERPMV9DT05UUk9MICsgcmRldl9nZXRfaWQoZGV2KSk7CisJdmFsICY9IFdNODQwMF9MRE8xX1ZTRUxfTUFTSzsKKworCWlmICh2YWwgPCAxNSkKKwkJcmV0dXJuIDkwMDAwMCArICh2YWwgKiA1MDAwMCk7CisJZWxzZQorCQlyZXR1cm4gMTYwMDAwMCArICgodmFsIC0gMTQpICogMTAwMDAwKTsKK30KKworc3RhdGljIGludCB3bTg0MDBfbGRvX3NldF92b2x0YWdlKHN0cnVjdCByZWd1bGF0b3JfZGV2ICpkZXYsCisJCQkJICBpbnQgbWluX3VWLCBpbnQgbWF4X3VWKQoreworCXN0cnVjdCB3bTg0MDAgKndtODQwMCA9IHJkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwl1MTYgdmFsOworCisJaWYgKG1pbl91ViA8IDkwMDAwMCB8fCBtaW5fdVYgPiAzMzAwMDAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChtaW5fdVYgPCAxNzAwMDAwKSB7CisJCS8qIFN0ZXBzIG9mIDUwbVYgZnJvbSA5MDBtVjsgICovCisJCXZhbCA9IChtaW5fdVYgLSA4NTAwMDEpIC8gNTAwMDA7CisKKwkJaWYgKCh2YWwgKiA1MDAwMCkgKyA5MDAwMDAgPiBtYXhfdVYpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJQlVHX09OKCh2YWwgKiA1MDAwMCkgKyA5MDAwMDAgPCBtaW5fdVYpOworCX0gZWxzZSB7CisJCS8qIFN0ZXBzIG9mIDEwMG1WIGZyb20gMTcwMG1WICovCisJCXZhbCA9ICgobWluX3VWIC0gMTYwMDAwMSkgLyAxMDAwMDApOworCisJCWlmICgodmFsICogMTAwMDAwKSArIDE3MDAwMDAgPiBtYXhfdVYpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJQlVHX09OKCh2YWwgKiAxMDAwMDApICsgMTcwMDAwMCA8IG1pbl91Vik7CisKKwkJdmFsICs9IDB4ZjsKKwl9CisKKwlyZXR1cm4gd204NDAwX3NldF9iaXRzKHdtODQwMCwgV004NDAwX0xETzFfQ09OVFJPTCArIHJkZXZfZ2V0X2lkKGRldiksCisJCQkgICAgICAgV004NDAwX0xETzFfVlNFTF9NQVNLLCB2YWwpOworfQorCitzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9vcHMgd204NDAwX2xkb19vcHMgPSB7CisJLmlzX2VuYWJsZWQgPSB3bTg0MDBfbGRvX2lzX2VuYWJsZWQsCisJLmVuYWJsZSA9IHdtODQwMF9sZG9fZW5hYmxlLAorCS5kaXNhYmxlID0gd204NDAwX2xkb19kaXNhYmxlLAorCS5nZXRfdm9sdGFnZSA9IHdtODQwMF9sZG9fZ2V0X3ZvbHRhZ2UsCisJLnNldF92b2x0YWdlID0gd204NDAwX2xkb19zZXRfdm9sdGFnZSwKK307CisKK3N0YXRpYyBpbnQgd204NDAwX2RjZGNfaXNfZW5hYmxlZChzdHJ1Y3QgcmVndWxhdG9yX2RldiAqZGV2KQoreworCXN0cnVjdCB3bTg0MDAgKndtODQwMCA9IHJkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlpbnQgb2Zmc2V0ID0gKHJkZXZfZ2V0X2lkKGRldikgLSBXTTg0MDBfRENEQzEpICogMjsKKwl1MTYgdmFsOworCisJdmFsID0gd204NDAwX3JlZ19yZWFkKHdtODQwMCwgV004NDAwX0RDREMxX0NPTlRST0xfMSArIG9mZnNldCk7CisJcmV0dXJuICh2YWwgJiBXTTg0MDBfREMxX0VOQSkgIT0gMDsKK30KKworc3RhdGljIGludCB3bTg0MDBfZGNkY19lbmFibGUoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKmRldikKK3sKKwlzdHJ1Y3Qgd204NDAwICp3bTg0MDAgPSByZGV2X2dldF9kcnZkYXRhKGRldik7CisJaW50IG9mZnNldCA9IChyZGV2X2dldF9pZChkZXYpIC0gV004NDAwX0RDREMxKSAqIDI7CisKKwlyZXR1cm4gd204NDAwX3NldF9iaXRzKHdtODQwMCwgV004NDAwX0RDREMxX0NPTlRST0xfMSArIG9mZnNldCwKKwkJCSAgICAgICBXTTg0MDBfREMxX0VOQSwgV004NDAwX0RDMV9FTkEpOworfQorCitzdGF0aWMgaW50IHdtODQwMF9kY2RjX2Rpc2FibGUoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKmRldikKK3sKKwlzdHJ1Y3Qgd204NDAwICp3bTg0MDAgPSByZGV2X2dldF9kcnZkYXRhKGRldik7CisJaW50IG9mZnNldCA9IChyZGV2X2dldF9pZChkZXYpIC0gV004NDAwX0RDREMxKSAqIDI7CisKKwlyZXR1cm4gd204NDAwX3NldF9iaXRzKHdtODQwMCwgV004NDAwX0RDREMxX0NPTlRST0xfMSArIG9mZnNldCwKKwkJCSAgICAgICBXTTg0MDBfREMxX0VOQSwgMCk7Cit9CisKK3N0YXRpYyBpbnQgd204NDAwX2RjZGNfZ2V0X3ZvbHRhZ2Uoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKmRldikKK3sKKwlzdHJ1Y3Qgd204NDAwICp3bTg0MDAgPSByZGV2X2dldF9kcnZkYXRhKGRldik7CisJdTE2IHZhbDsKKwlpbnQgb2Zmc2V0ID0gKHJkZXZfZ2V0X2lkKGRldikgLSBXTTg0MDBfRENEQzEpICogMjsKKworCXZhbCA9IHdtODQwMF9yZWdfcmVhZCh3bTg0MDAsIFdNODQwMF9EQ0RDMV9DT05UUk9MXzEgKyBvZmZzZXQpOworCXZhbCAmPSBXTTg0MDBfREMxX1ZTRUxfTUFTSzsKKworCXJldHVybiA4NTAwMDAgKyAoMjUwMDAgKiB2YWwpOworfQorCitzdGF0aWMgaW50IHdtODQwMF9kY2RjX3NldF92b2x0YWdlKHN0cnVjdCByZWd1bGF0b3JfZGV2ICpkZXYsCisJCQkJICBpbnQgbWluX3VWLCBpbnQgbWF4X3VWKQoreworCXN0cnVjdCB3bTg0MDAgKndtODQwMCA9IHJkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwl1MTYgdmFsOworCWludCBvZmZzZXQgPSAocmRldl9nZXRfaWQoZGV2KSAtIFdNODQwMF9EQ0RDMSkgKiAyOworCisJaWYgKG1pbl91ViA8IDg1MDAwMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwl2YWwgPSAobWluX3VWIC0gODI1MDAxKSAvIDI1MDAwOworCisJaWYgKDg1MDAwMCArICgyNTAwMCAqIHZhbCkgPiBtYXhfdVYpCisJCXJldHVybiAtRUlOVkFMOworCUJVR19PTig4NTAwMDAgKyAoMjUwMDAgKiB2YWwpIDwgbWluX3VWKTsKKworCXJldHVybiB3bTg0MDBfc2V0X2JpdHMod204NDAwLCBXTTg0MDBfRENEQzFfQ09OVFJPTF8xICsgb2Zmc2V0LAorCQkJICAgICAgIFdNODQwMF9EQzFfVlNFTF9NQVNLLCB2YWwpOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IHdtODQwMF9kY2RjX2dldF9tb2RlKHN0cnVjdCByZWd1bGF0b3JfZGV2ICpkZXYpCit7CisJc3RydWN0IHdtODQwMCAqd204NDAwID0gcmRldl9nZXRfZHJ2ZGF0YShkZXYpOworCWludCBvZmZzZXQgPSAocmRldl9nZXRfaWQoZGV2KSAtIFdNODQwMF9EQ0RDMSkgKiAyOworCXUxNiBkYXRhWzJdOworCWludCByZXQ7CisKKwlyZXQgPSB3bTg0MDBfYmxvY2tfcmVhZCh3bTg0MDAsIFdNODQwMF9EQ0RDMV9DT05UUk9MXzEgKyBvZmZzZXQsIDIsCisJCQkJZGF0YSk7CisJaWYgKHJldCAhPSAwKQorCQlyZXR1cm4gMDsKKworCS8qIERhdGFzaGVldDogaGliZXJuYXRlICovCisJaWYgKGRhdGFbMF0gJiBXTTg0MDBfREMxX1NMRUVQKQorCQlyZXR1cm4gUkVHVUxBVE9SX01PREVfU1RBTkRCWTsKKworCS8qIERhdGFzaGVldDogc3RhbmRieSAqLworCWlmICghKGRhdGFbMF0gJiBXTTg0MDBfREMxX0FDVElWRSkpCisJCXJldHVybiBSRUdVTEFUT1JfTU9ERV9JRExFOworCisJLyogRGF0YXNoZWV0OiBhY3RpdmUgd2l0aCBvciB3aXRob3V0IGZvcmNlIFBXTSAqLworCWlmIChkYXRhWzFdICYgV004NDAwX0RDMV9GUkNfUFdNKQorCQlyZXR1cm4gUkVHVUxBVE9SX01PREVfRkFTVDsKKwllbHNlCisJCXJldHVybiBSRUdVTEFUT1JfTU9ERV9OT1JNQUw7Cit9CisKK3N0YXRpYyBpbnQgd204NDAwX2RjZGNfc2V0X21vZGUoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKmRldiwgdW5zaWduZWQgaW50IG1vZGUpCit7CisJc3RydWN0IHdtODQwMCAqd204NDAwID0gcmRldl9nZXRfZHJ2ZGF0YShkZXYpOworCWludCBvZmZzZXQgPSAocmRldl9nZXRfaWQoZGV2KSAtIFdNODQwMF9EQ0RDMSkgKiAyOworCWludCByZXQ7CisKKwlzd2l0Y2ggKG1vZGUpIHsKKwljYXNlIFJFR1VMQVRPUl9NT0RFX0ZBU1Q6CisJCS8qIERhdGFzaGVldDogYWN0aXZlIHdpdGggZm9yY2UgUFdNICovCisJCXJldCA9IHdtODQwMF9zZXRfYml0cyh3bTg0MDAsIFdNODQwMF9EQ0RDMV9DT05UUk9MXzIgKyBvZmZzZXQsCisJCQkJICAgICAgV004NDAwX0RDMV9GUkNfUFdNLCBXTTg0MDBfREMxX0ZSQ19QV00pOworCQlpZiAocmV0ICE9IDApCisJCQlyZXR1cm4gcmV0OworCisJCXJldHVybiB3bTg0MDBfc2V0X2JpdHMod204NDAwLCBXTTg0MDBfRENEQzFfQ09OVFJPTF8xICsgb2Zmc2V0LAorCQkJCSAgICAgICBXTTg0MDBfREMxX0FDVElWRSB8IFdNODQwMF9EQzFfU0xFRVAsCisJCQkJICAgICAgIFdNODQwMF9EQzFfQUNUSVZFKTsKKworCWNhc2UgUkVHVUxBVE9SX01PREVfTk9STUFMOgorCQkvKiBEYXRhc2hlZXQ6IGFjdGl2ZSAqLworCQlyZXQgPSB3bTg0MDBfc2V0X2JpdHMod204NDAwLCBXTTg0MDBfRENEQzFfQ09OVFJPTF8yICsgb2Zmc2V0LAorCQkJCSAgICAgIFdNODQwMF9EQzFfRlJDX1BXTSwgMCk7CisJCWlmIChyZXQgIT0gMCkKKwkJCXJldHVybiByZXQ7CisKKwkJcmV0dXJuIHdtODQwMF9zZXRfYml0cyh3bTg0MDAsIFdNODQwMF9EQ0RDMV9DT05UUk9MXzEgKyBvZmZzZXQsCisJCQkJICAgICAgIFdNODQwMF9EQzFfQUNUSVZFIHwgV004NDAwX0RDMV9TTEVFUCwKKwkJCQkgICAgICAgV004NDAwX0RDMV9BQ1RJVkUpOworCisJY2FzZSBSRUdVTEFUT1JfTU9ERV9JRExFOgorCQkvKiBEYXRhc2hlZXQ6IHN0YW5kYnkgKi8KKwkJcmV0ID0gd204NDAwX3NldF9iaXRzKHdtODQwMCwgV004NDAwX0RDREMxX0NPTlRST0xfMSArIG9mZnNldCwKKwkJCQkgICAgICBXTTg0MDBfREMxX0FDVElWRSwgMCk7CisJCWlmIChyZXQgIT0gMCkKKwkJCXJldHVybiByZXQ7CisJCXJldHVybiB3bTg0MDBfc2V0X2JpdHMod204NDAwLCBXTTg0MDBfRENEQzFfQ09OVFJPTF8xICsgb2Zmc2V0LAorCQkJCSAgICAgICBXTTg0MDBfREMxX1NMRUVQLCAwKTsKKworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KK30KKworc3RhdGljIHVuc2lnbmVkIGludCB3bTg0MDBfZGNkY19nZXRfb3B0aW11bV9tb2RlKHN0cnVjdCByZWd1bGF0b3JfZGV2ICpkZXYsCisJCQkJCQkgaW50IGlucHV0X3VWLCBpbnQgb3V0cHV0X3VWLAorCQkJCQkJIGludCBsb2FkX3VBKQoreworCXJldHVybiBSRUdVTEFUT1JfTU9ERV9OT1JNQUw7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX29wcyB3bTg0MDBfZGNkY19vcHMgPSB7CisJLmlzX2VuYWJsZWQgPSB3bTg0MDBfZGNkY19pc19lbmFibGVkLAorCS5lbmFibGUgPSB3bTg0MDBfZGNkY19lbmFibGUsCisJLmRpc2FibGUgPSB3bTg0MDBfZGNkY19kaXNhYmxlLAorCS5nZXRfdm9sdGFnZSA9IHdtODQwMF9kY2RjX2dldF92b2x0YWdlLAorCS5zZXRfdm9sdGFnZSA9IHdtODQwMF9kY2RjX3NldF92b2x0YWdlLAorCS5nZXRfbW9kZSA9IHdtODQwMF9kY2RjX2dldF9tb2RlLAorCS5zZXRfbW9kZSA9IHdtODQwMF9kY2RjX3NldF9tb2RlLAorCS5nZXRfb3B0aW11bV9tb2RlID0gd204NDAwX2RjZGNfZ2V0X29wdGltdW1fbW9kZSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2Rlc2MgcmVndWxhdG9yc1tdID0geworCXsKKwkJLm5hbWUgPSAiTERPMSIsCisJCS5pZCA9IFdNODQwMF9MRE8xLAorCQkub3BzID0gJndtODQwMF9sZG9fb3BzLAorCQkudHlwZSA9IFJFR1VMQVRPUl9WT0xUQUdFLAorCQkub3duZXIgPSBUSElTX01PRFVMRSwKKwl9LAorCXsKKwkJLm5hbWUgPSAiTERPMiIsCisJCS5pZCA9IFdNODQwMF9MRE8yLAorCQkub3BzID0gJndtODQwMF9sZG9fb3BzLAorCQkudHlwZSA9IFJFR1VMQVRPUl9WT0xUQUdFLAorCQkub3duZXIgPSBUSElTX01PRFVMRSwKKwl9LAorCXsKKwkJLm5hbWUgPSAiTERPMyIsCisJCS5pZCA9IFdNODQwMF9MRE8zLAorCQkub3BzID0gJndtODQwMF9sZG9fb3BzLAorCQkudHlwZSA9IFJFR1VMQVRPUl9WT0xUQUdFLAorCQkub3duZXIgPSBUSElTX01PRFVMRSwKKwl9LAorCXsKKwkJLm5hbWUgPSAiTERPNCIsCisJCS5pZCA9IFdNODQwMF9MRE80LAorCQkub3BzID0gJndtODQwMF9sZG9fb3BzLAorCQkudHlwZSA9IFJFR1VMQVRPUl9WT0xUQUdFLAorCQkub3duZXIgPSBUSElTX01PRFVMRSwKKwl9LAorCXsKKwkJLm5hbWUgPSAiRENEQzEiLAorCQkuaWQgPSBXTTg0MDBfRENEQzEsCisJCS5vcHMgPSAmd204NDAwX2RjZGNfb3BzLAorCQkudHlwZSA9IFJFR1VMQVRPUl9WT0xUQUdFLAorCQkub3duZXIgPSBUSElTX01PRFVMRSwKKwl9LAorCXsKKwkJLm5hbWUgPSAiRENEQzIiLAorCQkuaWQgPSBXTTg0MDBfRENEQzIsCisJCS5vcHMgPSAmd204NDAwX2RjZGNfb3BzLAorCQkudHlwZSA9IFJFR1VMQVRPUl9WT0xUQUdFLAorCQkub3duZXIgPSBUSElTX01PRFVMRSwKKwl9LAorfTsKKworc3RhdGljIGludCBfX2luaXQgd204NDAwX3JlZ3VsYXRvcl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2OworCisJcmRldiA9IHJlZ3VsYXRvcl9yZWdpc3RlcigmcmVndWxhdG9yc1twZGV2LT5pZF0sICZwZGV2LT5kZXYsCisJCXBkZXYtPmRldi5kcml2ZXJfZGF0YSk7CisKKwlpZiAoSVNfRVJSKHJkZXYpKQorCQlyZXR1cm4gUFRSX0VSUihyZGV2KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IF9fZGV2ZXhpdCB3bTg0MDBfcmVndWxhdG9yX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisKKwlyZWd1bGF0b3JfdW5yZWdpc3RlcihyZGV2KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciB3bTg0MDBfcmVndWxhdG9yX2RyaXZlciA9IHsKKwkuZHJpdmVyID0geworCQkubmFtZSA9ICJ3bTg0MDAtcmVndWxhdG9yIiwKKwl9LAorCS5wcm9iZSA9IHdtODQwMF9yZWd1bGF0b3JfcHJvYmUsCisJLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKHdtODQwMF9yZWd1bGF0b3JfcmVtb3ZlKSwKK307CisKKy8qKgorICogd204NDAwX3JlZ2lzdGVyX3JlZ3VsYXRvciAtIGVuYWJsZSBzb2Z0d2FyZSBjb250cm9sIG9mIGEgV004NDAwIHJlZ3VsYXRvcgorICoKKyAqIFRoaXMgZnVuY3Rpb24gZW5hYmxlcyBzb2Z0d2FyZSBjb250cm9sIG9mIGEgV004NDAwIHJlZ3VsYXRvciB2aWEKKyAqIHRoZSByZWd1bGF0b3IgQVBJLiAgSXQgaXMgaW50ZW5kZWQgdG8gYmUgY2FsbGVkIGZyb20gdGhlCisgKiBwbGF0Zm9ybV9pbml0KCkgY2FsbGJhY2sgb2YgdGhlIFdNODQwMCBNRkQgZHJpdmVyLgorICoKKyAqIEBwYXJhbSBkZXYgICAgICBUaGUgV004NDAwIGRldmljZSB0byBvcGVyYXRlIG9uLgorICogQHBhcmFtIHJlZyAgICAgIFRoZSByZWd1bGF0b3IgdG8gY29udHJvbC4KKyAqIEBwYXJhbSBpbml0ZGF0YSBSZWd1bGF0b3IgaW5pdGRhdGEgZm9yIHRoZSByZWd1bGF0b3IuCisgKi8KK2ludCB3bTg0MDBfcmVnaXN0ZXJfcmVndWxhdG9yKHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IHJlZywKKwkJCSAgICAgIHN0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhICppbml0ZGF0YSkKK3sKKwlzdHJ1Y3Qgd204NDAwICp3bTg0MDAgPSBkZXYtPmRyaXZlcl9kYXRhOworCisJaWYgKHdtODQwMC0+cmVndWxhdG9yc1tyZWddLm5hbWUpCisJCXJldHVybiAtRUJVU1k7CisKKwlpbml0ZGF0YS0+ZHJpdmVyX2RhdGEgPSB3bTg0MDA7CisKKwl3bTg0MDAtPnJlZ3VsYXRvcnNbcmVnXS5uYW1lID0gIndtODQwMC1yZWd1bGF0b3IiOworCXdtODQwMC0+cmVndWxhdG9yc1tyZWddLmlkID0gcmVnOworCXdtODQwMC0+cmVndWxhdG9yc1tyZWddLmRldi5wYXJlbnQgPSBkZXY7CisJd204NDAwLT5yZWd1bGF0b3JzW3JlZ10uZGV2LmRyaXZlcl9kYXRhID0gd204NDAwOworCXdtODQwMC0+cmVndWxhdG9yc1tyZWddLmRldi5wbGF0Zm9ybV9kYXRhID0gaW5pdGRhdGE7CisKKwlyZXR1cm4gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZ3bTg0MDAtPnJlZ3VsYXRvcnNbcmVnXSk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTCh3bTg0MDBfcmVnaXN0ZXJfcmVndWxhdG9yKTsKKworc3RhdGljIGludCBfX2luaXQgd204NDAwX3JlZ3VsYXRvcl9pbml0KHZvaWQpCit7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3Rlcigmd204NDAwX3JlZ3VsYXRvcl9kcml2ZXIpOworfQorbW9kdWxlX2luaXQod204NDAwX3JlZ3VsYXRvcl9pbml0KTsKKworc3RhdGljIHZvaWQgX19leGl0IHdtODQwMF9yZWd1bGF0b3JfZXhpdCh2b2lkKQoreworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZ3bTg0MDBfcmVndWxhdG9yX2RyaXZlcik7Cit9Cittb2R1bGVfZXhpdCh3bTg0MDBfcmVndWxhdG9yX2V4aXQpOworCitNT0RVTEVfQVVUSE9SKCJNYXJrIEJyb3duIDxicm9vbmllQG9wZW5zb3VyY2Uud29sZnNvbm1pY3JvLmNvbT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiV004NDAwIHJlZ3VsYXRvciBkcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9BTElBUygicGxhdGZvcm06d204NDAwLXJlZ3VsYXRvciIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvS2NvbmZpZyBiL2RyaXZlcnMvcnRjL0tjb25maWcKaW5kZXggYjU3ZmJhNS4uZjY2MGVmMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvS2NvbmZpZworKysgYi9kcml2ZXJzL3J0Yy9LY29uZmlnCkBAIC0yMjAsMjIgKzIyMCwyMiBAQAogCSAgd2lsbCBiZSBjYWxsZWQgcnRjLXBjZjg1ODMuCiAKIGNvbmZpZyBSVENfRFJWX000MVQ4MAotCXRyaXN0YXRlICJTVCBNNDFUODAvODEvODIvODMvODQvODUvODciCisJdHJpc3RhdGUgIlNUIE00MVQ2NS9NNDFUODAvODEvODIvODMvODQvODUvODciCiAJaGVscAotCSAgSWYgeW91IHNheSBZIGhlcmUgeW91IHdpbGwgZ2V0IHN1cHBvcnQgZm9yIHRoZQotCSAgU1QgTTQxVDgwIFJUQyBjaGlwcyBzZXJpZXMuIEN1cnJlbnRseSBmb2xsb3dpbmcgY2hpcHMgYXJlCi0JICBzdXBwb3J0ZWQ6IE00MVQ4MCwgTTQxVDgxLCBNNDFUODIsIE00MVQ4MywgTTQxU1Q4NCwgTTQxU1Q4NQotCSAgYW5kIE00MVNUODcuCisJICBJZiB5b3Ugc2F5IFkgaGVyZSB5b3Ugd2lsbCBnZXQgc3VwcG9ydCBmb3IgdGhlIFNUIE00MVQ2MAorCSAgYW5kIE00MVQ4MCBSVEMgY2hpcHMgc2VyaWVzLiBDdXJyZW50bHksIHRoZSBmb2xsb3dpbmcgY2hpcHMgYXJlCisJICBzdXBwb3J0ZWQ6IE00MVQ2NSwgTTQxVDgwLCBNNDFUODEsIE00MVQ4MiwgTTQxVDgzLCBNNDFTVDg0LAorCSAgTTQxU1Q4NSwgYW5kIE00MVNUODcuCiAKIAkgIFRoaXMgZHJpdmVyIGNhbiBhbHNvIGJlIGJ1aWx0IGFzIGEgbW9kdWxlLiBJZiBzbywgdGhlIG1vZHVsZQogCSAgd2lsbCBiZSBjYWxsZWQgcnRjLW00MXQ4MC4KIAogY29uZmlnIFJUQ19EUlZfTTQxVDgwX1dEVAotCWJvb2wgIlNUIE00MVQ4MCBzZXJpZXMgUlRDIHdhdGNoZG9nIHRpbWVyIgorCWJvb2wgIlNUIE00MVQ2NS9NNDFUODAgc2VyaWVzIFJUQyB3YXRjaGRvZyB0aW1lciIKIAlkZXBlbmRzIG9uIFJUQ19EUlZfTTQxVDgwCiAJaGVscAogCSAgSWYgeW91IHNheSBZIGhlcmUgeW91IHdpbGwgZ2V0IHN1cHBvcnQgZm9yIHRoZQotCSAgd2F0Y2hkb2cgdGltZXIgaW4gU1QgTTQxVDgwIFJUQyBjaGlwcyBzZXJpZXMuCisJICB3YXRjaGRvZyB0aW1lciBpbiB0aGUgU1QgTTQxVDYwIGFuZCBNNDFUODAgUlRDIGNoaXBzIHNlcmllcy4KIAogY29uZmlnIFJUQ19EUlZfVFdMOTIzMzAKIAlib29sZWFuICJUSSBUV0w5MjMzMC9NZW5lbGF1cyIKQEAgLTMxOSw2ICszMTksMTUgQEAKIAkgIFRoaXMgZHJpdmVyIGNhbiBhbHNvIGJlIGJ1aWx0IGFzIGEgbW9kdWxlLiBJZiBzbywgdGhlIG1vZHVsZQogCSAgd2lsbCBiZSBjYWxsZWQgcnRjLXJzNWMzNDguCiAKK2NvbmZpZyBSVENfRFJWX0RTMzIzNAorCXRyaXN0YXRlICJNYXhpbS9EYWxsYXMgRFMzMjM0IgorCWhlbHAKKwkgIElmIHlvdSBzYXkgeWVzIGhlcmUgeW91IGdldCBzdXBwb3J0IGZvciB0aGUKKwkgIE1heGltL0RhbGxhcyBEUzMyMzQgU1BJIFJUQyBjaGlwLgorCisJICBUaGlzIGRyaXZlciBjYW4gYWxzbyBiZSBidWlsdCBhcyBhIG1vZHVsZS4gSWYgc28sIHRoZSBtb2R1bGUKKwkgIHdpbGwgYmUgY2FsbGVkIHJ0Yy1kczMyMzQuCisKIGVuZGlmICMgU1BJX01BU1RFUgogCiBjb21tZW50ICJQbGF0Zm9ybSBSVEMgZHJpdmVycyIKQEAgLTM1Miw2ICszNjEsMTEgQEAKIAloZWxwCiAJICBJZiB5b3Ugc2F5IHllcyBoZXJlIHlvdSBnZXQgc3VwcG9ydCBmb3IgdGhlIERhbGxhcyBEUzEyMTYgUlRDIGNoaXBzLgogCitjb25maWcgUlRDX0RSVl9EUzEyODYKKwl0cmlzdGF0ZSAiRGFsbGFzIERTMTI4NiIKKwloZWxwCisJICBJZiB5b3Ugc2F5IHllcyBoZXJlIHlvdSBnZXQgc3VwcG9ydCBmb3IgdGhlIERhbGxhcyBEUzEyODYgUlRDIGNoaXBzLgorCiBjb25maWcgUlRDX0RSVl9EUzEzMDIKIAl0cmlzdGF0ZSAiRGFsbGFzIERTMTMwMiIKIAlkZXBlbmRzIG9uIFNIX1NFQ1VSRUVER0U1NDEwCkBAIC00MDUsNiArNDE5LDE1IEBACiAJICBUaGlzIGRyaXZlciBjYW4gYWxzbyBiZSBidWlsdCBhcyBhIG1vZHVsZS4gSWYgc28sIHRoZSBtb2R1bGUKIAkgIHdpbGwgYmUgY2FsbGVkIHJ0Yy1tNDh0ODYuCiAKK2NvbmZpZyBSVENfRFJWX000OFQzNQorCXRyaXN0YXRlICJTVCBNNDhUMzUiCisJaGVscAorCSAgSWYgeW91IHNheSBZIGhlcmUgeW91IHdpbGwgZ2V0IHN1cHBvcnQgZm9yIHRoZQorCSAgU1QgTTQ4VDM1IFJUQyBjaGlwLgorCisJICBUaGlzIGRyaXZlciBjYW4gYWxzbyBiZSBidWlsdCBhcyBhIG1vZHVsZSwgaWYgc28sIHRoZSBtb2R1bGUKKwkgIHdpbGwgYmUgY2FsbGVkICJydGMtbTQ4dDM1Ii4KKwogY29uZmlnIFJUQ19EUlZfTTQ4VDU5CiAJdHJpc3RhdGUgIlNUIE00OFQ1OS9NNDhUMDgvTTQ4VDAyIgogCWhlbHAKQEAgLTU4OSw3ICs2MTIsNyBAQAogCiBjb25maWcgUlRDX0RSVl9QUEMKICAgICAgICB0cmlzdGF0ZSAiUG93ZXJQQyBtYWNoaW5lIGRlcGVuZGVudCBSVEMgc3VwcG9ydCIKLSAgICAgICBkZXBlbmRzIG9uIFBQQ19NRVJHRQorICAgICAgIGRlcGVuZHMgb24gUFBDCiAgICAgICAgaGVscAogCSBUaGUgUG93ZXJQQyBrZXJuZWwgaGFzIG1hY2hpbmUtc3BlY2lmaWMgZnVuY3Rpb25zIGZvciBhY2Nlc3NpbmcKIAkgdGhlIFJUQy4gVGhpcyBleHBvc2VzIHRoYXQgZnVuY3Rpb25hbGl0eSB0aHJvdWdoIHRoZSBnZW5lcmljIFJUQwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvTWFrZWZpbGUgYi9kcml2ZXJzL3J0Yy9NYWtlZmlsZQppbmRleCAxMGY0MWY4Li5kMDU5MjhiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9NYWtlZmlsZQorKysgYi9kcml2ZXJzL3J0Yy9NYWtlZmlsZQpAQCAtMjMsNiArMjMsNyBAQAogb2JqLSQoQ09ORklHX1JUQ19EUlZfQkZJTikJKz0gcnRjLWJmaW4ubwogb2JqLSQoQ09ORklHX1JUQ19EUlZfQ01PUykJKz0gcnRjLWNtb3Mubwogb2JqLSQoQ09ORklHX1JUQ19EUlZfRFMxMjE2KQkrPSBydGMtZHMxMjE2Lm8KK29iai0kKENPTkZJR19SVENfRFJWX0RTMTI4NikJKz0gcnRjLWRzMTI4Ni5vCiBvYmotJChDT05GSUdfUlRDX0RSVl9EUzEzMDIpCSs9IHJ0Yy1kczEzMDIubwogb2JqLSQoQ09ORklHX1JUQ19EUlZfRFMxMzA1KQkrPSBydGMtZHMxMzA1Lm8KIG9iai0kKENPTkZJR19SVENfRFJWX0RTMTMwNykJKz0gcnRjLWRzMTMwNy5vCkBAIC0zMSwxMSArMzIsMTMgQEAKIG9iai0kKENPTkZJR19SVENfRFJWX0RTMTU1MykJKz0gcnRjLWRzMTU1My5vCiBvYmotJChDT05GSUdfUlRDX0RSVl9EUzE2NzIpCSs9IHJ0Yy1kczE2NzIubwogb2JqLSQoQ09ORklHX1JUQ19EUlZfRFMxNzQyKQkrPSBydGMtZHMxNzQyLm8KK29iai0kKENPTkZJR19SVENfRFJWX0RTMzIzNCkJKz0gcnRjLWRzMzIzNC5vCiBvYmotJChDT05GSUdfUlRDX0RSVl9FUDkzWFgpCSs9IHJ0Yy1lcDkzeHgubwogb2JqLSQoQ09ORklHX1JUQ19EUlZfRk0zMTMwKQkrPSBydGMtZm0zMTMwLm8KIG9iai0kKENPTkZJR19SVENfRFJWX0lTTDEyMDgpCSs9IHJ0Yy1pc2wxMjA4Lm8KIG9iai0kKENPTkZJR19SVENfRFJWX000MVQ4MCkJKz0gcnRjLW00MXQ4MC5vCiBvYmotJChDT05GSUdfUlRDX0RSVl9NNDFUOTQpCSs9IHJ0Yy1tNDF0OTQubworb2JqLSQoQ09ORklHX1JUQ19EUlZfTTQ4VDM1KQkrPSBydGMtbTQ4dDM1Lm8KIG9iai0kKENPTkZJR19SVENfRFJWX000OFQ1OSkJKz0gcnRjLW00OHQ1OS5vCiBvYmotJChDT05GSUdfUlRDX0RSVl9NNDhUODYpCSs9IHJ0Yy1tNDh0ODYubwogb2JqLSQoQ09ORklHX1JUQ19EUlZfQlE0ODAyKQkrPSBydGMtYnE0ODAyLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy1hdDkxcm05MjAwLmMgYi9kcml2ZXJzL3J0Yy9ydGMtYXQ5MXJtOTIwMC5jCmluZGV4IDRlODg4Y2MuLmI1YmY5MzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL3J0Yy1hdDkxcm05MjAwLmMKKysrIGIvZHJpdmVycy9ydGMvcnRjLWF0OTFybTkyMDAuYwpAQCAtMjksMTAgKzI5LDEwIEBACiAjaW5jbHVkZSA8bGludXgvY29tcGxldGlvbi5oPgogCiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKwogI2luY2x1ZGUgPG1hY2gvYXQ5MV9ydGMuaD4KIAogCi0jZGVmaW5lIEFUOTFfUlRDX0ZSRVEJCTEKICNkZWZpbmUgQVQ5MV9SVENfRVBPQ0gJCTE5MDBVTAkvKiBqdXN0IGxpa2UgYXJjaC9hcm0vY29tbW9uL3J0Y3RpbWUuYyAqLwogCiBzdGF0aWMgREVDTEFSRV9DT01QTEVUSU9OKGF0OTFfcnRjX3VwZGF0ZWQpOwpAQCAtNTMsMjEgKzUzLDIxIEBACiAJfSB3aGlsZSAoKHRpbWUgIT0gYXQ5MV9zeXNfcmVhZCh0aW1lcmVnKSkgfHwKIAkJCShkYXRlICE9IGF0OTFfc3lzX3JlYWQoY2FscmVnKSkpOwogCi0JdG0tPnRtX3NlYyAgPSBCQ0QyQklOKCh0aW1lICYgQVQ5MV9SVENfU0VDKSA+PiAwKTsKLQl0bS0+dG1fbWluICA9IEJDRDJCSU4oKHRpbWUgJiBBVDkxX1JUQ19NSU4pID4+IDgpOwotCXRtLT50bV9ob3VyID0gQkNEMkJJTigodGltZSAmIEFUOTFfUlRDX0hPVVIpID4+IDE2KTsKKwl0bS0+dG1fc2VjICA9IGJjZDJiaW4oKHRpbWUgJiBBVDkxX1JUQ19TRUMpID4+IDApOworCXRtLT50bV9taW4gID0gYmNkMmJpbigodGltZSAmIEFUOTFfUlRDX01JTikgPj4gOCk7CisJdG0tPnRtX2hvdXIgPSBiY2QyYmluKCh0aW1lICYgQVQ5MV9SVENfSE9VUikgPj4gMTYpOwogCiAJLyoKIAkgKiBUaGUgQ2FsZW5kYXIgQWxhcm0gcmVnaXN0ZXIgZG9lcyBub3QgaGF2ZSBhIGZpZWxkIGZvcgogCSAqIHRoZSB5ZWFyIC0gc28gdGhlc2Ugd2lsbCByZXR1cm4gYW4gaW52YWxpZCB2YWx1ZS4gIFdoZW4gYW4KIAkgKiBhbGFybSBpcyBzZXQsIGF0OTFfYWxhcm1feWVhciB3aWxsZSBzdG9yZSB0aGUgY3VycmVudCB5ZWFyLgogCSAqLwotCXRtLT50bV95ZWFyICA9IEJDRDJCSU4oZGF0ZSAmIEFUOTFfUlRDX0NFTlQpICogMTAwOwkvKiBjZW50dXJ5ICovCi0JdG0tPnRtX3llYXIgKz0gQkNEMkJJTigoZGF0ZSAmIEFUOTFfUlRDX1lFQVIpID4+IDgpOwkvKiB5ZWFyICovCisJdG0tPnRtX3llYXIgID0gYmNkMmJpbihkYXRlICYgQVQ5MV9SVENfQ0VOVCkgKiAxMDA7CS8qIGNlbnR1cnkgKi8KKwl0bS0+dG1feWVhciArPSBiY2QyYmluKChkYXRlICYgQVQ5MV9SVENfWUVBUikgPj4gOCk7CS8qIHllYXIgKi8KIAotCXRtLT50bV93ZGF5ID0gQkNEMkJJTigoZGF0ZSAmIEFUOTFfUlRDX0RBWSkgPj4gMjEpIC0gMTsJLyogZGF5IG9mIHRoZSB3ZWVrIFswLTZdLCBTdW5kYXk9MCAqLwotCXRtLT50bV9tb24gID0gQkNEMkJJTigoZGF0ZSAmIEFUOTFfUlRDX01PTlRIKSA+PiAxNikgLSAxOwotCXRtLT50bV9tZGF5ID0gQkNEMkJJTigoZGF0ZSAmIEFUOTFfUlRDX0RBVEUpID4+IDI0KTsKKwl0bS0+dG1fd2RheSA9IGJjZDJiaW4oKGRhdGUgJiBBVDkxX1JUQ19EQVkpID4+IDIxKSAtIDE7CS8qIGRheSBvZiB0aGUgd2VlayBbMC02XSwgU3VuZGF5PTAgKi8KKwl0bS0+dG1fbW9uICA9IGJjZDJiaW4oKGRhdGUgJiBBVDkxX1JUQ19NT05USCkgPj4gMTYpIC0gMTsKKwl0bS0+dG1fbWRheSA9IGJjZDJiaW4oKGRhdGUgJiBBVDkxX1JUQ19EQVRFKSA+PiAyNCk7CiB9CiAKIC8qCkBAIC0xMDYsMTYgKzEwNiwxNiBAQAogCWF0OTFfc3lzX3dyaXRlKEFUOTFfUlRDX0lEUiwgQVQ5MV9SVENfQUNLVVBEKTsKIAogCWF0OTFfc3lzX3dyaXRlKEFUOTFfUlRDX1RJTVIsCi0JCQkgIEJJTjJCQ0QodG0tPnRtX3NlYykgPDwgMAotCQkJfCBCSU4yQkNEKHRtLT50bV9taW4pIDw8IDgKLQkJCXwgQklOMkJDRCh0bS0+dG1faG91cikgPDwgMTYpOworCQkJICBiaW4yYmNkKHRtLT50bV9zZWMpIDw8IDAKKwkJCXwgYmluMmJjZCh0bS0+dG1fbWluKSA8PCA4CisJCQl8IGJpbjJiY2QodG0tPnRtX2hvdXIpIDw8IDE2KTsKIAogCWF0OTFfc3lzX3dyaXRlKEFUOTFfUlRDX0NBTFIsCi0JCQkgIEJJTjJCQ0QoKHRtLT50bV95ZWFyICsgMTkwMCkgLyAxMDApCS8qIGNlbnR1cnkgKi8KLQkJCXwgQklOMkJDRCh0bS0+dG1feWVhciAlIDEwMCkgPDwgOAkvKiB5ZWFyICovCi0JCQl8IEJJTjJCQ0QodG0tPnRtX21vbiArIDEpIDw8IDE2CQkvKiB0bV9tb24gc3RhcnRzIGF0IHplcm8gKi8KLQkJCXwgQklOMkJDRCh0bS0+dG1fd2RheSArIDEpIDw8IDIxCS8qIGRheSBvZiB0aGUgd2VlayBbMC02XSwgU3VuZGF5PTAgKi8KLQkJCXwgQklOMkJDRCh0bS0+dG1fbWRheSkgPDwgMjQpOworCQkJICBiaW4yYmNkKCh0bS0+dG1feWVhciArIDE5MDApIC8gMTAwKQkvKiBjZW50dXJ5ICovCisJCQl8IGJpbjJiY2QodG0tPnRtX3llYXIgJSAxMDApIDw8IDgJLyogeWVhciAqLworCQkJfCBiaW4yYmNkKHRtLT50bV9tb24gKyAxKSA8PCAxNgkJLyogdG1fbW9uIHN0YXJ0cyBhdCB6ZXJvICovCisJCQl8IGJpbjJiY2QodG0tPnRtX3dkYXkgKyAxKSA8PCAyMQkvKiBkYXkgb2YgdGhlIHdlZWsgWzAtNl0sIFN1bmRheT0wICovCisJCQl8IGJpbjJiY2QodG0tPnRtX21kYXkpIDw8IDI0KTsKIAogCS8qIFJlc3RhcnQgVGltZS9DYWxlbmRhciAqLwogCWNyID0gYXQ5MV9zeXNfcmVhZChBVDkxX1JUQ19DUik7CkBAIC0xNjIsMTMgKzE2MiwxMyBAQAogCiAJYXQ5MV9zeXNfd3JpdGUoQVQ5MV9SVENfSURSLCBBVDkxX1JUQ19BTEFSTSk7CiAJYXQ5MV9zeXNfd3JpdGUoQVQ5MV9SVENfVElNQUxSLAotCQkgIEJJTjJCQ0QodG0udG1fc2VjKSA8PCAwCi0JCXwgQklOMkJDRCh0bS50bV9taW4pIDw8IDgKLQkJfCBCSU4yQkNEKHRtLnRtX2hvdXIpIDw8IDE2CisJCSAgYmluMmJjZCh0bS50bV9zZWMpIDw8IDAKKwkJfCBiaW4yYmNkKHRtLnRtX21pbikgPDwgOAorCQl8IGJpbjJiY2QodG0udG1faG91cikgPDwgMTYKIAkJfCBBVDkxX1JUQ19IT1VSRU4gfCBBVDkxX1JUQ19NSU5FTiB8IEFUOTFfUlRDX1NFQ0VOKTsKIAlhdDkxX3N5c193cml0ZShBVDkxX1JUQ19DQUxBTFIsCi0JCSAgQklOMkJDRCh0bS50bV9tb24gKyAxKSA8PCAxNgkJLyogdG1fbW9uIHN0YXJ0cyBhdCB6ZXJvICovCi0JCXwgQklOMkJDRCh0bS50bV9tZGF5KSA8PCAyNAorCQkgIGJpbjJiY2QodG0udG1fbW9uICsgMSkgPDwgMTYJCS8qIHRtX21vbiBzdGFydHMgYXQgemVybyAqLworCQl8IGJpbjJiY2QodG0udG1fbWRheSkgPDwgMjQKIAkJfCBBVDkxX1JUQ19EQVRFRU4gfCBBVDkxX1JUQ19NVEhFTik7CiAKIAlpZiAoYWxybS0+ZW5hYmxlZCkgewpAQCAtMjI4LDggKzIyOCw2IEBACiAJCQkoaW1yICYgQVQ5MV9SVENfQUNLVVBEKSA/ICJ5ZXMiIDogIm5vIik7CiAJc2VxX3ByaW50ZihzZXEsICJwZXJpb2RpY19JUlFcdDogJXNcbiIsCiAJCQkoaW1yICYgQVQ5MV9SVENfU0VDRVYpID8gInllcyIgOiAibm8iKTsKLQlzZXFfcHJpbnRmKHNlcSwgInBlcmlvZGljX2ZyZXFcdDogJWxkXG4iLAotCQkJKHVuc2lnbmVkIGxvbmcpIEFUOTFfUlRDX0ZSRVEpOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtYnE0ODAyLmMgYi9kcml2ZXJzL3J0Yy9ydGMtYnE0ODAyLmMKaW5kZXggMTg5YTAxOC4uZDAwYTI3NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvcnRjLWJxNDgwMi5jCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy1icTQ4MDIuYwpAQCAtNzEsMTQgKzcxLDE0IEBACiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwLT5sb2NrLCBmbGFncyk7CiAKLQlCQ0RfVE9fQklOKHRtLT50bV9zZWMpOwotCUJDRF9UT19CSU4odG0tPnRtX21pbik7Ci0JQkNEX1RPX0JJTih0bS0+dG1faG91cik7Ci0JQkNEX1RPX0JJTih0bS0+dG1fbWRheSk7Ci0JQkNEX1RPX0JJTih0bS0+dG1fbW9uKTsKLQlCQ0RfVE9fQklOKHRtLT50bV95ZWFyKTsKLQlCQ0RfVE9fQklOKHRtLT50bV93ZGF5KTsKLQlCQ0RfVE9fQklOKGNlbnR1cnkpOworCXRtLT50bV9zZWMgPSBiY2QyYmluKHRtLT50bV9zZWMpOworCXRtLT50bV9taW4gPSBiY2QyYmluKHRtLT50bV9taW4pOworCXRtLT50bV9ob3VyID0gYmNkMmJpbih0bS0+dG1faG91cik7CisJdG0tPnRtX21kYXkgPSBiY2QyYmluKHRtLT50bV9tZGF5KTsKKwl0bS0+dG1fbW9uID0gYmNkMmJpbih0bS0+dG1fbW9uKTsKKwl0bS0+dG1feWVhciA9IGJjZDJiaW4odG0tPnRtX3llYXIpOworCXRtLT50bV93ZGF5ID0gYmNkMmJpbih0bS0+dG1fd2RheSk7CisJY2VudHVyeSA9IGJjZDJiaW4oY2VudHVyeSk7CiAKIAl0bS0+dG1feWVhciArPSAoY2VudHVyeSAqIDEwMCk7CiAJdG0tPnRtX3llYXIgLT0gMTkwMDsKQEAgLTEwNiwxMyArMTA2LDEzIEBACiAJbWluID0gdG0tPnRtX21pbjsKIAlzZWMgPSB0bS0+dG1fc2VjOwogCi0JQklOX1RPX0JDRChzZWMpOwotCUJJTl9UT19CQ0QobWluKTsKLQlCSU5fVE9fQkNEKGhycyk7Ci0JQklOX1RPX0JDRChkYXkpOwotCUJJTl9UT19CQ0QobW9uKTsKLQlCSU5fVE9fQkNEKHlycyk7Ci0JQklOX1RPX0JDRChjZW50dXJ5KTsKKwlzZWMgPSBiaW4yYmNkKHNlYyk7CisJbWluID0gYmluMmJjZChtaW4pOworCWhycyA9IGJpbjJiY2QoaHJzKTsKKwlkYXkgPSBiaW4yYmNkKGRheSk7CisJbW9uID0gYmluMmJjZChtb24pOworCXlycyA9IGJpbjJiY2QoeXJzKTsKKwljZW50dXJ5ID0gYmluMmJjZChjZW50dXJ5KTsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZwLT5sb2NrLCBmbGFncyk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy1jbW9zLmMgYi9kcml2ZXJzL3J0Yy9ydGMtY21vcy5jCmluZGV4IGIyM2FmMGMuLjU1NDkyMzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL3J0Yy1jbW9zLmMKKysrIGIvZHJpdmVycy9ydGMvcnRjLWNtb3MuYwpAQCAtMTQzLDYgKzE0Myw0MyBAQAogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCisjaWZkZWYgUlRDX1BPUlQKKworLyogTW9zdCBuZXdlciB4ODYgc3lzdGVtcyBoYXZlIHR3byByZWdpc3RlciBiYW5rcywgdGhlIGZpcnN0IHVzZWQKKyAqIGZvciBSVEMgYW5kIE5WUkFNIGFuZCB0aGUgc2Vjb25kIG9ubHkgZm9yIE5WUkFNLiAgQ2FsbGVyIG11c3QKKyAqIG93biBydGNfbG9jayAuLi4gYW5kIHdlIHdvbid0IHdvcnJ5IGFib3V0IGFjY2VzcyBkdXJpbmcgTk1JLgorICovCisjZGVmaW5lIGNhbl9iYW5rMgl0cnVlCisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgY2hhciBjbW9zX3JlYWRfYmFuazIodW5zaWduZWQgY2hhciBhZGRyKQoreworCW91dGIoYWRkciwgUlRDX1BPUlQoMikpOworCXJldHVybiBpbmIoUlRDX1BPUlQoMykpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgY21vc193cml0ZV9iYW5rMih1bnNpZ25lZCBjaGFyIHZhbCwgdW5zaWduZWQgY2hhciBhZGRyKQoreworCW91dGIoYWRkciwgUlRDX1BPUlQoMikpOworCW91dGIodmFsLCBSVENfUE9SVCgyKSk7Cit9CisKKyNlbHNlCisKKyNkZWZpbmUgY2FuX2JhbmsyCWZhbHNlCisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgY2hhciBjbW9zX3JlYWRfYmFuazIodW5zaWduZWQgY2hhciBhZGRyKQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgY21vc193cml0ZV9iYW5rMih1bnNpZ25lZCBjaGFyIHZhbCwgdW5zaWduZWQgY2hhciBhZGRyKQoreworfQorCisjZW5kaWYKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKwogc3RhdGljIGludCBjbW9zX3JlYWRfdGltZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBydGNfdGltZSAqdCkKIHsKIAkvKiBSRVZJU0lUOiAgaWYgdGhlIGNsb2NrIGhhcyBhICJjZW50dXJ5IiByZWdpc3RlciwgdXNlCkBAIC0yMDMsMjYgKzI0MCwyNiBAQAogCS8qIFJFVklTSVQgdGhpcyBhc3N1bWVzIFBDIHN0eWxlIHVzYWdlOiAgYWx3YXlzIEJDRCAqLwogCiAJaWYgKCgodW5zaWduZWQpdC0+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+c2l6ZSAtIG9mZjsKIApAQCAtNTIwLDE1ICs1NjgsMjAgQEAKIAkgKiBoZXJlLiAgSWYgdXNlcnNwYWNlIGlzIHNtYXJ0IGVub3VnaCB0byBrbm93IHdoYXQgZmllbGRzIG9mCiAJICogTlZSQU0gdG8gdXBkYXRlLCB1cGRhdGluZyBjaGVja3N1bXMgaXMgYWxzbyBwYXJ0IG9mIGl0cyBqb2IuCiAJICovCisJb2ZmICs9IE5WUkFNX09GRlNFVDsKIAlzcGluX2xvY2tfaXJxKCZydGNfbG9jayk7Ci0JZm9yIChyZXR2YWwgPSAwLCBvZmYgKz0gTlZSQU1fT0ZGU0VUOyBjb3VudC0tOyByZXR2YWwrKywgb2ZmKyspIHsKKwlmb3IgKHJldHZhbCA9IDA7IGNvdW50OyBjb3VudC0tLCBvZmYrKywgcmV0dmFsKyspIHsKIAkJLyogZG9uJ3QgdHJhc2ggUlRDIHJlZ2lzdGVycyAqLwogCQlpZiAob2ZmID09IGNtb3MtPmRheV9hbHJtCiAJCQkJfHwgb2ZmID09IGNtb3MtPm1vbl9hbHJtCiAJCQkJfHwgb2ZmID09IGNtb3MtPmNlbnR1cnkpCiAJCQlidWYrKzsKLQkJZWxzZQorCQllbHNlIGlmIChvZmYgPCAxMjgpCiAJCQlDTU9TX1dSSVRFKCpidWYrKywgb2ZmKTsKKwkJZWxzZSBpZiAoY2FuX2JhbmsyKQorCQkJY21vc193cml0ZV9iYW5rMigqYnVmKyssIG9mZik7CisJCWVsc2UKKwkJCWJyZWFrOwogCX0KIAlzcGluX3VubG9ja19pcnEoJnJ0Y19sb2NrKTsKIApAQCAtNTM5LDcgKzU5Miw2IEBACiAJLmF0dHIgPSB7CiAJCS5uYW1lCT0gIm52cmFtIiwKIAkJLm1vZGUJPSBTX0lSVUdPIHwgU19JV1VTUiwKLQkJLm93bmVyCT0gVEhJU19NT0RVTEUsCiAJfSwKIAogCS5yZWFkCT0gY21vc19udnJhbV9yZWFkLApAQCAtNjMxLDggKzY4Myw4IEBACiAKIAkvKiBIZXVyaXN0aWMgdG8gZGVkdWNlIE5WUkFNIHNpemUgLi4uIGRvIHdoYXQgdGhlIGxlZ2FjeSBOVlJBTQogCSAqIGRyaXZlciBkaWQsIGJ1dCBkb24ndCByZWplY3QgdW5rbm93biBjb25maWdzLiAgIE9sZCBoYXJkd2FyZQotCSAqIHdvbid0IGFkZHJlc3MgMTI4IGJ5dGVzLCBhbmQgZm9yIG5vdyB3ZSBpZ25vcmUgdGhlIHdheSBuZXdlcgotCSAqIGNoaXBzIGNhbiBhZGRyZXNzIDI1NiBieXRlcyAodXNpbmcgdHdvIG1vcmUgaS9vIHBvcnRzKS4KKwkgKiB3b24ndCBhZGRyZXNzIDEyOCBieXRlcy4gIE5ld2VyIGNoaXBzIGhhdmUgbXVsdGlwbGUgYmFua3MsCisJICogdGhvdWdoIHRoZXkgbWF5IG5vdCBiZSBsaXN0ZWQgaW4gb25lIEkvTyByZXNvdXJjZS4KIAkgKi8KICNpZglkZWZpbmVkKENPTkZJR19BVEFSSSkKIAlhZGRyZXNzX3NwYWNlID0gNjQ7CkBAIC02NDIsNiArNjk0LDggQEAKICN3YXJuaW5nIEFzc3VtaW5nIDEyOCBieXRlcyBvZiBSVEMrTlZSQU0gYWRkcmVzcyBzcGFjZSwgbm90IDY0IGJ5dGVzLgogCWFkZHJlc3Nfc3BhY2UgPSAxMjg7CiAjZW5kaWYKKwlpZiAoY2FuX2JhbmsyICYmIHBvcnRzLT5lbmQgPiAocG9ydHMtPnN0YXJ0ICsgMSkpCisJCWFkZHJlc3Nfc3BhY2UgPSAyNTY7CiAKIAkvKiBGb3IgQUNQSSBzeXN0ZW1zIGV4dGVuc2lvbiBpbmZvIGNvbWVzIGZyb20gdGhlIEZBRFQuICBPbiBvdGhlcnMsCiAJICogYm9hcmQgc3BlY2lmaWMgc2V0dXAgcHJvdmlkZXMgaXQgYXMgYXBwcm9wcmlhdGUuICBTeXN0ZW1zIHdoZXJlCkBAIC03NDAsNyArNzk0LDcgQEAKIAkJZ290byBjbGVhbnVwMjsKIAl9CiAKLQlwcl9pbmZvKCIlczogYWxhcm1zIHVwIHRvIG9uZSAlcyVzJXNcbiIsCisJcHJfaW5mbygiJXM6IGFsYXJtcyB1cCB0byBvbmUgJXMlcywgJXpkIGJ5dGVzIG52cmFtLCAlcyBpcnFzXG4iLAogCQkJY21vc19ydGMucnRjLT5kZXYuYnVzX2lkLAogCQkJaXNfdmFsaWRfaXJxKHJ0Y19pcnEpCiAJCQkJPyAgKGNtb3NfcnRjLm1vbl9hbHJtCkBAIC03NDksNiArODAzLDcgQEAKIAkJCQkJCT8gIm1vbnRoIiA6ICJkYXkiKSkKIAkJCQk6ICJubyIsCiAJCQljbW9zX3J0Yy5jZW50dXJ5ID8gIiwgeTNrIiA6ICIiLAorCQkJbnZyYW0uc2l6ZSwKIAkJCWlzX2hwZXRfZW5hYmxlZCgpID8gIiwgaHBldCBpcnFzIiA6ICIiKTsKIAogCXJldHVybiAwOwpAQCAtOTEzLDYgKzk2OCw5MiBAQAogICogcHJlZGF0ZSBldmVuIFBOUEJJT1Mgc2hvdWxkIHNldCB1cCBwbGF0Zm9ybV9idXMgZGV2aWNlcy4KICAqLwogCisjaWZkZWYJQ09ORklHX0FDUEkKKworI2luY2x1ZGUgPGxpbnV4L2FjcGkuaD4KKworI2lmZGVmCUNPTkZJR19QTQorc3RhdGljIHUzMiBydGNfaGFuZGxlcih2b2lkICpjb250ZXh0KQoreworCWFjcGlfY2xlYXJfZXZlbnQoQUNQSV9FVkVOVF9SVEMpOworCWFjcGlfZGlzYWJsZV9ldmVudChBQ1BJX0VWRU5UX1JUQywgMCk7CisJcmV0dXJuIEFDUElfSU5URVJSVVBUX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBydGNfd2FrZV9zZXR1cCh2b2lkKQoreworCWFjcGlfaW5zdGFsbF9maXhlZF9ldmVudF9oYW5kbGVyKEFDUElfRVZFTlRfUlRDLCBydGNfaGFuZGxlciwgTlVMTCk7CisJLyoKKwkgKiBBZnRlciB0aGUgUlRDIGhhbmRsZXIgaXMgaW5zdGFsbGVkLCB0aGUgRml4ZWRfUlRDIGV2ZW50IHNob3VsZAorCSAqIGJlIGRpc2FibGVkLiBPbmx5IHdoZW4gdGhlIFJUQyBhbGFybSBpcyBzZXQgd2lsbCBpdCBiZSBlbmFibGVkLgorCSAqLworCWFjcGlfY2xlYXJfZXZlbnQoQUNQSV9FVkVOVF9SVEMpOworCWFjcGlfZGlzYWJsZV9ldmVudChBQ1BJX0VWRU5UX1JUQywgMCk7Cit9CisKK3N0YXRpYyB2b2lkIHJ0Y193YWtlX29uKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlhY3BpX2NsZWFyX2V2ZW50KEFDUElfRVZFTlRfUlRDKTsKKwlhY3BpX2VuYWJsZV9ldmVudChBQ1BJX0VWRU5UX1JUQywgMCk7Cit9CisKK3N0YXRpYyB2b2lkIHJ0Y193YWtlX29mZihzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJYWNwaV9kaXNhYmxlX2V2ZW50KEFDUElfRVZFTlRfUlRDLCAwKTsKK30KKyNlbHNlCisjZGVmaW5lIHJ0Y193YWtlX3NldHVwKCkJZG97fXdoaWxlKDApCisjZGVmaW5lIHJ0Y193YWtlX29uCQlOVUxMCisjZGVmaW5lIHJ0Y193YWtlX29mZgkJTlVMTAorI2VuZGlmCisKKy8qIEV2ZXJ5IEFDUEkgcGxhdGZvcm0gaGFzIGEgbWMxNDY4MTggY29tcGF0aWJsZSAiY21vcyBydGMiLiAgSGVyZSB3ZSBmaW5kCisgKiBpdHMgZGV2aWNlIG5vZGUgYW5kIHBhc3MgZXh0cmEgY29uZmlnIGRhdGEuICBUaGlzIGhlbHBzIGl0cyBkcml2ZXIgdXNlCisgKiBjYXBhYmlsaXRpZXMgdGhhdCB0aGUgbm93LW9ic29sZXRlIG1jMTQ2ODE4IGRpZG4ndCBoYXZlLCBhbmQgaW5mb3JtcyBpdAorICogdGhhdCB0aGlzIGJvYXJkJ3MgUlRDIGlzIHdha2V1cC1jYXBhYmxlIChwZXIgQUNQSSBzcGVjKS4KKyAqLworc3RhdGljIHN0cnVjdCBjbW9zX3J0Y19ib2FyZF9pbmZvIGFjcGlfcnRjX2luZm87CisKK3N0YXRpYyB2b2lkIF9fZGV2aW5pdAorY21vc193YWtlX3NldHVwKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlpZiAoYWNwaV9kaXNhYmxlZCkKKwkJcmV0dXJuOworCisJcnRjX3dha2Vfc2V0dXAoKTsKKwlhY3BpX3J0Y19pbmZvLndha2Vfb24gPSBydGNfd2FrZV9vbjsKKwlhY3BpX3J0Y19pbmZvLndha2Vfb2ZmID0gcnRjX3dha2Vfb2ZmOworCisJLyogd29ya2Fyb3VuZCBidWcgaW4gc29tZSBBQ1BJIHRhYmxlcyAqLworCWlmIChhY3BpX2dibF9GQURULm1vbnRoX2FsYXJtICYmICFhY3BpX2dibF9GQURULmRheV9hbGFybSkgeworCQlkZXZfZGJnKGRldiwgImJvZ3VzIEZBRFQgbW9udGhfYWxhcm0gKCVkKVxuIiwKKwkJCWFjcGlfZ2JsX0ZBRFQubW9udGhfYWxhcm0pOworCQlhY3BpX2dibF9GQURULm1vbnRoX2FsYXJtID0gMDsKKwl9CisKKwlhY3BpX3J0Y19pbmZvLnJ0Y19kYXlfYWxhcm0gPSBhY3BpX2dibF9GQURULmRheV9hbGFybTsKKwlhY3BpX3J0Y19pbmZvLnJ0Y19tb25fYWxhcm0gPSBhY3BpX2dibF9GQURULm1vbnRoX2FsYXJtOworCWFjcGlfcnRjX2luZm8ucnRjX2NlbnR1cnkgPSBhY3BpX2dibF9GQURULmNlbnR1cnk7CisKKwkvKiBOT1RFOiAgUzRfUlRDX1dBS0UgaXMgTk9UIGN1cnJlbnRseSB1c2VmdWwgdG8gTGludXggKi8KKwlpZiAoYWNwaV9nYmxfRkFEVC5mbGFncyAmIEFDUElfRkFEVF9TNF9SVENfV0FLRSkKKwkJZGV2X2luZm8oZGV2LCAiUlRDIGNhbiB3YWtlIGZyb20gUzRcbiIpOworCisJZGV2LT5wbGF0Zm9ybV9kYXRhID0gJmFjcGlfcnRjX2luZm87CisKKwkvKiBSVEMgYWx3YXlzIHdha2VzIGZyb20gUzEvUzIvUzMsIGFuZCBvZnRlbiBTNC9TVEQgKi8KKwlkZXZpY2VfaW5pdF93YWtldXAoZGV2LCAxKTsKK30KKworI2Vsc2UKKworc3RhdGljIHZvaWQgX19kZXZpbml0CitjbW9zX3dha2Vfc2V0dXAoc3RydWN0IGRldmljZSAqZGV2KQoreworfQorCisjZW5kaWYKKwogI2lmZGVmCUNPTkZJR19QTlAKIAogI2luY2x1ZGUgPGxpbnV4L3BucC5oPgpAQCAtOTIwLDYgKzEwNjEsOCBAQAogc3RhdGljIGludCBfX2RldmluaXQKIGNtb3NfcG5wX3Byb2JlKHN0cnVjdCBwbnBfZGV2ICpwbnAsIGNvbnN0IHN0cnVjdCBwbnBfZGV2aWNlX2lkICppZCkKIHsKKwljbW9zX3dha2Vfc2V0dXAoJnBucC0+ZGV2KTsKKwogCWlmIChwbnBfcG9ydF9zdGFydChwbnAsMCkgPT0gMHg3MCAmJiAhcG5wX2lycV92YWxpZChwbnAsMCkpCiAJCS8qIFNvbWUgbWFjaGluZXMgY29udGFpbiBhIFBOUCBlbnRyeSBmb3IgdGhlIFJUQywgYnV0CiAJCSAqIGRvbid0IGRlZmluZSB0aGUgSVJRLiBJdCBzaG91bGQgYWx3YXlzIGJlIHNhZmUgdG8KQEAgLTk5Nyw2ICsxMTQwLDcgQEAKIAogc3RhdGljIGludCBfX2luaXQgY21vc19wbGF0Zm9ybV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogeworCWNtb3Nfd2FrZV9zZXR1cCgmcGRldi0+ZGV2KTsKIAlyZXR1cm4gY21vc19kb19wcm9iZSgmcGRldi0+ZGV2LAogCQkJcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfSU8sIDApLAogCQkJcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKSk7CkBAIC0xMDMxLDI5ICsxMTc1LDMyIEBACiAKIHN0YXRpYyBpbnQgX19pbml0IGNtb3NfaW5pdCh2b2lkKQogeworCWludCByZXR2YWwgPSAwOworCiAjaWZkZWYJQ09ORklHX1BOUAotCWlmIChwbnBfcGxhdGZvcm1fZGV2aWNlcykKLQkJcmV0dXJuIHBucF9yZWdpc3Rlcl9kcml2ZXIoJmNtb3NfcG5wX2RyaXZlcik7Ci0JZWxzZQotCQlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3Byb2JlKCZjbW9zX3BsYXRmb3JtX2RyaXZlciwKLQkJCWNtb3NfcGxhdGZvcm1fcHJvYmUpOwotI2Vsc2UKLQlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3Byb2JlKCZjbW9zX3BsYXRmb3JtX2RyaXZlciwKLQkJCWNtb3NfcGxhdGZvcm1fcHJvYmUpOwotI2VuZGlmIC8qIENPTkZJR19QTlAgKi8KKwlwbnBfcmVnaXN0ZXJfZHJpdmVyKCZjbW9zX3BucF9kcml2ZXIpOworI2VuZGlmCisKKwlpZiAoIWNtb3NfcnRjLmRldikKKwkJcmV0dmFsID0gcGxhdGZvcm1fZHJpdmVyX3Byb2JlKCZjbW9zX3BsYXRmb3JtX2RyaXZlciwKKwkJCQkJICAgICAgIGNtb3NfcGxhdGZvcm1fcHJvYmUpOworCisJaWYgKHJldHZhbCA9PSAwKQorCQlyZXR1cm4gMDsKKworI2lmZGVmCUNPTkZJR19QTlAKKwlwbnBfdW5yZWdpc3Rlcl9kcml2ZXIoJmNtb3NfcG5wX2RyaXZlcik7CisjZW5kaWYKKwlyZXR1cm4gcmV0dmFsOwogfQogbW9kdWxlX2luaXQoY21vc19pbml0KTsKIAogc3RhdGljIHZvaWQgX19leGl0IGNtb3NfZXhpdCh2b2lkKQogewogI2lmZGVmCUNPTkZJR19QTlAKLQlpZiAocG5wX3BsYXRmb3JtX2RldmljZXMpCi0JCXBucF91bnJlZ2lzdGVyX2RyaXZlcigmY21vc19wbnBfZHJpdmVyKTsKLQllbHNlCi0JCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZjbW9zX3BsYXRmb3JtX2RyaXZlcik7Ci0jZWxzZQorCXBucF91bnJlZ2lzdGVyX2RyaXZlcigmY21vc19wbnBfZHJpdmVyKTsKKyNlbmRpZgogCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZjbW9zX3BsYXRmb3JtX2RyaXZlcik7Ci0jZW5kaWYgLyogQ09ORklHX1BOUCAqLwogfQogbW9kdWxlX2V4aXQoY21vc19leGl0KTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLWRldi5jIGIvZHJpdmVycy9ydGMvcnRjLWRldi5jCmluZGV4IDUyZTI3NDMuLjA3OWU5ZWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL3J0Yy1kZXYuYworKysgYi9kcml2ZXJzL3J0Yy9ydGMtZGV2LmMKQEAgLTQzMiw5ICs0MzIsMTUgQEAKIHsKIAlzdHJ1Y3QgcnRjX2RldmljZSAqcnRjID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwogCi0jaWZkZWYgQ09ORklHX1JUQ19JTlRGX0RFVl9VSUVfRU1VTAotCWNsZWFyX3VpZShydGMpOwotI2VuZGlmCisJLyogV2Ugc2h1dCBkb3duIHRoZSByZXBlYXRpbmcgSVJRcyB0aGF0IHVzZXJzcGFjZSBlbmFibGVkLAorCSAqIHNpbmNlIG5vdGhpbmcgaXMgbGlzdGVuaW5nIHRvIHRoZW0uCisJICogIC0gVXBkYXRlIChVSUUpIC4uLiBjdXJyZW50bHkgb25seSBtYW5hZ2VkIHRocm91Z2ggaW9jdGxzCisJICogIC0gUGVyaW9kaWMgKFBJRSkgLi4uIGFsc28gdXNlZCB0aHJvdWdoIHJ0Y18qKCkgaW50ZXJmYWNlIGNhbGxzCisJICoKKwkgKiBMZWF2ZSB0aGUgYWxhcm0gYWxvbmU7IGl0IG1heSBiZSBzZXQgdG8gdHJpZ2dlciBhIHN5c3RlbSB3YWtldXAKKwkgKiBsYXRlciwgb3IgYmUgdXNlZCBieSBrZXJuZWwgY29kZSwgYW5kIGlzIGEgb25lLXNob3QgZXZlbnQgYW55d2F5LgorCSAqLworCXJ0Y19kZXZfaW9jdGwoZmlsZSwgUlRDX1VJRV9PRkYsIDApOwogCXJ0Y19pcnFfc2V0X3N0YXRlKHJ0YywgTlVMTCwgMCk7CiAKIAlpZiAocnRjLT5vcHMtPnJlbGVhc2UpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtZHMxMjE2LmMgYi9kcml2ZXJzL3J0Yy9ydGMtZHMxMjE2LmMKaW5kZXggMGIxNzc3MC4uOWEyMzRhNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvcnRjLWRzMTIxNi5jCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy1kczEyMTYuYwpAQCAtODYsMTkgKzg2LDE5IEBACiAJZHMxMjE2X3N3aXRjaF9kc190b19jbG9jayhwcml2LT5pb2FkZHIpOwogCWRzMTIxNl9yZWFkKHByaXYtPmlvYWRkciwgKHU4ICopJnJlZ3MpOwogCi0JdG0tPnRtX3NlYyA9IEJDRDJCSU4ocmVncy5zZWMpOwotCXRtLT50bV9taW4gPSBCQ0QyQklOKHJlZ3MubWluKTsKKwl0bS0+dG1fc2VjID0gYmNkMmJpbihyZWdzLnNlYyk7CisJdG0tPnRtX21pbiA9IGJjZDJiaW4ocmVncy5taW4pOwogCWlmIChyZWdzLmhvdXIgJiBEUzEyMTZfSE9VUl8xMjI0KSB7CiAJCS8qIEFNL1BNIG1vZGUgKi8KLQkJdG0tPnRtX2hvdXIgPSBCQ0QyQklOKHJlZ3MuaG91ciAmIDB4MWYpOworCQl0bS0+dG1faG91ciA9IGJjZDJiaW4ocmVncy5ob3VyICYgMHgxZik7CiAJCWlmIChyZWdzLmhvdXIgJiBEUzEyMTZfSE9VUl9BTVBNKQogCQkJdG0tPnRtX2hvdXIgKz0gMTI7CiAJfSBlbHNlCi0JCXRtLT50bV9ob3VyID0gQkNEMkJJTihyZWdzLmhvdXIgJiAweDNmKTsKKwkJdG0tPnRtX2hvdXIgPSBiY2QyYmluKHJlZ3MuaG91ciAmIDB4M2YpOwogCXRtLT50bV93ZGF5ID0gKHJlZ3Mud2RheSAmIDcpIC0gMTsKLQl0bS0+dG1fbWRheSA9IEJDRDJCSU4ocmVncy5tZGF5ICYgMHgzZik7Ci0JdG0tPnRtX21vbiA9IEJDRDJCSU4ocmVncy5tb250aCAmIDB4MWYpOwotCXRtLT50bV95ZWFyID0gQkNEMkJJTihyZWdzLnllYXIpOworCXRtLT50bV9tZGF5ID0gYmNkMmJpbihyZWdzLm1kYXkgJiAweDNmKTsKKwl0bS0+dG1fbW9uID0gYmNkMmJpbihyZWdzLm1vbnRoICYgMHgxZik7CisJdG0tPnRtX3llYXIgPSBiY2QyYmluKHJlZ3MueWVhcik7CiAJaWYgKHRtLT50bV95ZWFyIDwgNzApCiAJCXRtLT50bV95ZWFyICs9IDEwMDsKIAlyZXR1cm4gMDsKQEAgLTExNCwxOSArMTE0LDE5IEBACiAJZHMxMjE2X3JlYWQocHJpdi0+aW9hZGRyLCAodTggKikmcmVncyk7CiAKIAlyZWdzLnRzZWMgPSAwOyAvKiBjbGVhciAwLjEgYW5kIDAuMDEgc2Vjb25kcyAqLwotCXJlZ3Muc2VjID0gQklOMkJDRCh0bS0+dG1fc2VjKTsKLQlyZWdzLm1pbiA9IEJJTjJCQ0QodG0tPnRtX21pbik7CisJcmVncy5zZWMgPSBiaW4yYmNkKHRtLT50bV9zZWMpOworCXJlZ3MubWluID0gYmluMmJjZCh0bS0+dG1fbWluKTsKIAlyZWdzLmhvdXIgJj0gRFMxMjE2X0hPVVJfMTIyNDsKIAlpZiAocmVncy5ob3VyICYmIHRtLT50bV9ob3VyID4gMTIpIHsKIAkJcmVncy5ob3VyIHw9IERTMTIxNl9IT1VSX0FNUE07CiAJCXRtLT50bV9ob3VyIC09IDEyOwogCX0KLQlyZWdzLmhvdXIgfD0gQklOMkJDRCh0bS0+dG1faG91cik7CisJcmVncy5ob3VyIHw9IGJpbjJiY2QodG0tPnRtX2hvdXIpOwogCXJlZ3Mud2RheSAmPSB+NzsKIAlyZWdzLndkYXkgfD0gdG0tPnRtX3dkYXk7Ci0JcmVncy5tZGF5ID0gQklOMkJDRCh0bS0+dG1fbWRheSk7Ci0JcmVncy5tb250aCA9IEJJTjJCQ0QodG0tPnRtX21vbik7Ci0JcmVncy55ZWFyID0gQklOMkJDRCh0bS0+dG1feWVhciAlIDEwMCk7CisJcmVncy5tZGF5ID0gYmluMmJjZCh0bS0+dG1fbWRheSk7CisJcmVncy5tb250aCA9IGJpbjJiY2QodG0tPnRtX21vbik7CisJcmVncy55ZWFyID0gYmluMmJjZCh0bS0+dG1feWVhciAlIDEwMCk7CiAKIAlkczEyMTZfc3dpdGNoX2RzX3RvX2Nsb2NrKHByaXYtPmlvYWRkcik7CiAJZHMxMjE2X3dyaXRlKHByaXYtPmlvYWRkciwgKHU4ICopJnJlZ3MpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLWRzMTI4Ni5jIGIvZHJpdmVycy9ydGMvcnRjLWRzMTI4Ni5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRmY2IxNmIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3J0Yy9ydGMtZHMxMjg2LmMKQEAgLTAsMCArMSw0MTAgQEAKKy8qCisgKiBEUzEyODYgUmVhbCBUaW1lIENsb2NrIGludGVyZmFjZSBmb3IgTGludXgKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTgsIDE5OTksIDIwMDAgUmFsZiBCYWVjaGxlCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhvbWFzIEJvZ2VuZG9lcmZlcgorICoKKyAqIEJhc2VkIG9uIGNvZGUgd3JpdHRlbiBieSBQYXVsIEdvcnRtYWtlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9ydGMuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9iY2QuaD4KKyNpbmNsdWRlIDxsaW51eC9kczEyODYuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorCisjZGVmaW5lIERSVl9WRVJTSU9OCQkiMS4wIgorCitzdHJ1Y3QgZHMxMjg2X3ByaXYgeworCXN0cnVjdCBydGNfZGV2aWNlICpydGM7CisJdTMyIF9faW9tZW0gKnJ0Y3JlZ3M7CisJc2l6ZV90IHNpemU7CisJdW5zaWduZWQgbG9uZyBiYXNlYWRkcjsKKwlzcGlubG9ja190IGxvY2s7Cit9OworCitzdGF0aWMgaW5saW5lIHU4IGRzMTI4Nl9ydGNfcmVhZChzdHJ1Y3QgZHMxMjg2X3ByaXYgKnByaXYsIGludCByZWcpCit7CisJcmV0dXJuIF9fcmF3X3JlYWRsKCZwcml2LT5ydGNyZWdzW3JlZ10pICYgMHhmZjsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGRzMTI4Nl9ydGNfd3JpdGUoc3RydWN0IGRzMTI4Nl9wcml2ICpwcml2LCB1OCBkYXRhLCBpbnQgcmVnKQoreworCV9fcmF3X3dyaXRlbChkYXRhLCAmcHJpdi0+cnRjcmVnc1tyZWddKTsKK30KKworI2lmZGVmIENPTkZJR19SVENfSU5URl9ERVYKKworc3RhdGljIGludCBkczEyODZfaW9jdGwoc3RydWN0IGRldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKK3sKKwlzdHJ1Y3QgZHMxMjg2X3ByaXYgKnByaXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVuc2lnbmVkIGNoYXIgdmFsOworCisJc3dpdGNoIChjbWQpIHsKKwljYXNlIFJUQ19BSUVfT0ZGOgorCQkvKiBNYXNrIGFsYXJtIGludC4gZW5hYi4gYml0CSovCisJCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJCXZhbCA9IGRzMTI4Nl9ydGNfcmVhZChwcml2LCBSVENfQ01EKTsKKwkJdmFsIHw9ICBSVENfVERNOworCQlkczEyODZfcnRjX3dyaXRlKHByaXYsIHZhbCwgUlRDX0NNRCk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwkJYnJlYWs7CisJY2FzZSBSVENfQUlFX09OOgorCQkvKiBBbGxvdyBhbGFybSBpbnRlcnJ1cHRzLgkqLworCQlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCQl2YWwgPSBkczEyODZfcnRjX3JlYWQocHJpdiwgUlRDX0NNRCk7CisJCXZhbCAmPSAgflJUQ19URE07CisJCWRzMTI4Nl9ydGNfd3JpdGUocHJpdiwgdmFsLCBSVENfQ01EKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCQlicmVhazsKKwljYXNlIFJUQ19XSUVfT0ZGOgorCQkvKiBNYXNrIHdhdGNoZG9nIGludC4gZW5hYi4gYml0CSovCisJCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJCXZhbCA9IGRzMTI4Nl9ydGNfcmVhZChwcml2LCBSVENfQ01EKTsKKwkJdmFsIHw9IFJUQ19XQU07CisJCWRzMTI4Nl9ydGNfd3JpdGUocHJpdiwgdmFsLCBSVENfQ01EKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCQlicmVhazsKKwljYXNlIFJUQ19XSUVfT046CisJCS8qIEFsbG93IHdhdGNoZG9nIGludGVycnVwdHMuCSovCisJCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJCXZhbCA9IGRzMTI4Nl9ydGNfcmVhZChwcml2LCBSVENfQ01EKTsKKwkJdmFsICY9IH5SVENfV0FNOworCQlkczEyODZfcnRjX3dyaXRlKHByaXYsIHZhbCwgUlRDX0NNRCk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FTk9JT0NUTENNRDsKKwl9CisJcmV0dXJuIDA7Cit9CisKKyNlbHNlCisjZGVmaW5lIGRzMTI4Nl9pb2N0bCAgICBOVUxMCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19QUk9DX0ZTCisKK3N0YXRpYyBpbnQgZHMxMjg2X3Byb2Moc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSkKK3sKKwlzdHJ1Y3QgZHMxMjg2X3ByaXYgKnByaXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwl1bnNpZ25lZCBjaGFyIG1vbnRoLCBjbWQsIGFtb2RlOworCWNvbnN0IGNoYXIgKnM7CisKKwltb250aCA9IGRzMTI4Nl9ydGNfcmVhZChwcml2LCBSVENfTU9OVEgpOworCXNlcV9wcmludGYoc2VxLAorCQkgICAib3NjaWxsYXRvclx0OiAlc1xuIgorCQkgICAic3F1YXJlX3dhdmVcdDogJXNcbiIsCisJCSAgIChtb250aCAmIFJUQ19FT1NDKSA/ICJkaXNhYmxlZCIgOiAiZW5hYmxlZCIsCisJCSAgIChtb250aCAmIFJUQ19FU1FXKSA/ICJkaXNhYmxlZCIgOiAiZW5hYmxlZCIpOworCisJYW1vZGUgPSAoKGRzMTI4Nl9ydGNfcmVhZChwcml2LCBSVENfTUlOVVRFU19BTEFSTSkgJiAweDgwKSA+PiA1KSB8CisJCSgoZHMxMjg2X3J0Y19yZWFkKHByaXYsIFJUQ19IT1VSU19BTEFSTSkgJiAweDgwKSA+PiA2KSB8CisJCSgoZHMxMjg2X3J0Y19yZWFkKHByaXYsIFJUQ19EQVlfQUxBUk0pICYgMHg4MCkgPj4gNyk7CisJc3dpdGNoIChhbW9kZSkgeworCWNhc2UgNzoKKwkJcyA9ICJlYWNoIG1pbnV0ZSI7CisJCWJyZWFrOworCWNhc2UgMzoKKwkJcyA9ICJtaW51dGVzIG1hdGNoIjsKKwkJYnJlYWs7CisJY2FzZSAxOgorCQlzID0gImhvdXJzIGFuZCBtaW51dGVzIG1hdGNoIjsKKwkJYnJlYWs7CisJY2FzZSAwOgorCQlzID0gImRheXMsIGhvdXJzIGFuZCBtaW51dGVzIG1hdGNoIjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcyA9ICJpbnZhbGlkIjsKKwkJYnJlYWs7CisJfQorCXNlcV9wcmludGYoc2VxLCAiYWxhcm1fbW9kZVx0OiAlc1xuIiwgcyk7CisKKwljbWQgPSBkczEyODZfcnRjX3JlYWQocHJpdiwgUlRDX0NNRCk7CisJc2VxX3ByaW50ZihzZXEsCisJCSAgICJhbGFybV9lbmFibGVcdDogJXNcbiIKKwkJICAgIndkb2dfYWxhcm1cdDogJXNcbiIKKwkJICAgImFsYXJtX21hc2tcdDogJXNcbiIKKwkJICAgIndkb2dfYWxhcm1fbWFza1x0OiAlc1xuIgorCQkgICAiaW50ZXJydXB0X21vZGVcdDogJXNcbiIKKwkJICAgIklOVEJfbW9kZVx0OiAlc19hY3RpdmVcbiIKKwkJICAgImludGVycnVwdF9waW5zXHQ6ICVzXG4iLAorCQkgICAoY21kICYgUlRDX1RERikgPyAieWVzIiA6ICJubyIsCisJCSAgIChjbWQgJiBSVENfV0FGKSA/ICJ5ZXMiIDogIm5vIiwKKwkJICAgKGNtZCAmIFJUQ19URE0pID8gImRpc2FibGVkIiA6ICJlbmFibGVkIiwKKwkJICAgKGNtZCAmIFJUQ19XQU0pID8gImRpc2FibGVkIiA6ICJlbmFibGVkIiwKKwkJICAgKGNtZCAmIFJUQ19QVV9MVkwpID8gInB1bHNlIiA6ICJsZXZlbCIsCisJCSAgIChjbWQgJiBSVENfSUJIX0xPKSA/ICJsb3ciIDogImhpZ2giLAorCQkgICAoY21kICYgUlRDX0lQU1cpID8gInVuc3dhcHBlZCIgOiAic3dhcHBlZCIpOworCXJldHVybiAwOworfQorCisjZWxzZQorI2RlZmluZSBkczEyODZfcHJvYyAgICAgTlVMTAorI2VuZGlmCisKK3N0YXRpYyBpbnQgZHMxMjg2X3JlYWRfdGltZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBydGNfdGltZSAqdG0pCit7CisJc3RydWN0IGRzMTI4Nl9wcml2ICpwcml2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJdW5zaWduZWQgY2hhciBzYXZlX2NvbnRyb2w7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1bnNpZ25lZCBsb25nIHVpcF93YXRjaGRvZyA9IGppZmZpZXM7CisKKwkvKgorCSAqIHJlYWQgUlRDIG9uY2UgYW55IHVwZGF0ZSBpbiBwcm9ncmVzcyBpcyBkb25lLiBUaGUgdXBkYXRlCisJICogY2FuIHRha2UganVzdCBvdmVyIDJtcy4gV2Ugd2FpdCAxMCB0byAyMG1zLiBUaGVyZSBpcyBubyBuZWVkIHRvCisJICogdG8gcG9sbC13YWl0ICh1cCB0byAxcyAtIGVlY2NjaCkgZm9yIHRoZSBmYWxsaW5nIGVkZ2Ugb2YgUlRDX1VJUC4KKwkgKiBJZiB5b3UgbmVlZCB0byBrbm93ICpleGFjdGx5KiB3aGVuIGEgc2Vjb25kIGhhcyBzdGFydGVkLCBlbmFibGUKKwkgKiBwZXJpb2RpYyB1cGRhdGUgY29tcGxldGUgaW50ZXJydXB0cywgKHZpYSBpb2N0bCkgYW5kIHRoZW4KKwkgKiBpbW1lZGlhdGVseSByZWFkIC9kZXYvcnRjIHdoaWNoIHdpbGwgYmxvY2sgdW50aWwgeW91IGdldCB0aGUgSVJRLgorCSAqIE9uY2UgdGhlIHJlYWQgY2xlYXJzLCByZWFkIHRoZSBSVEMgdGltZSAoYWdhaW4gdmlhIGlvY3RsKS4gRWFzeS4KKwkgKi8KKworCWlmIChkczEyODZfcnRjX3JlYWQocHJpdiwgUlRDX0NNRCkgJiBSVENfVEUpCisJCXdoaWxlICh0aW1lX2JlZm9yZShqaWZmaWVzLCB1aXBfd2F0Y2hkb2cgKyAyKkhaLzEwMCkpCisJCQliYXJyaWVyKCk7CisKKwkvKgorCSAqIE9ubHkgdGhlIHZhbHVlcyB0aGF0IHdlIHJlYWQgZnJvbSB0aGUgUlRDIGFyZSBzZXQuIFdlIGxlYXZlCisJICogdG1fd2RheSwgdG1feWRheSBhbmQgdG1faXNkc3QgdW50b3VjaGVkLiBFdmVuIHRob3VnaCB0aGUKKwkgKiBSVEMgaGFzIFJUQ19EQVlfT0ZfV0VFSywgd2UgaWdub3JlIGl0LCBhcyBpdCBpcyBvbmx5IHVwZGF0ZWQKKwkgKiBieSB0aGUgUlRDIHdoZW4gaW5pdGlhbGx5IHNldCB0byBhIG5vbi16ZXJvIHZhbHVlLgorCSAqLworCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJc2F2ZV9jb250cm9sID0gZHMxMjg2X3J0Y19yZWFkKHByaXYsIFJUQ19DTUQpOworCWRzMTI4Nl9ydGNfd3JpdGUocHJpdiwgKHNhdmVfY29udHJvbHxSVENfVEUpLCBSVENfQ01EKTsKKworCXRtLT50bV9zZWMgPSBkczEyODZfcnRjX3JlYWQocHJpdiwgUlRDX1NFQ09ORFMpOworCXRtLT50bV9taW4gPSBkczEyODZfcnRjX3JlYWQocHJpdiwgUlRDX01JTlVURVMpOworCXRtLT50bV9ob3VyID0gZHMxMjg2X3J0Y19yZWFkKHByaXYsIFJUQ19IT1VSUykgJiAweDNmOworCXRtLT50bV9tZGF5ID0gZHMxMjg2X3J0Y19yZWFkKHByaXYsIFJUQ19EQVRFKTsKKwl0bS0+dG1fbW9uID0gZHMxMjg2X3J0Y19yZWFkKHByaXYsIFJUQ19NT05USCkgJiAweDFmOworCXRtLT50bV95ZWFyID0gZHMxMjg2X3J0Y19yZWFkKHByaXYsIFJUQ19ZRUFSKTsKKworCWRzMTI4Nl9ydGNfd3JpdGUocHJpdiwgc2F2ZV9jb250cm9sLCBSVENfQ01EKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CisKKwl0bS0+dG1fc2VjID0gYmNkMmJpbih0bS0+dG1fc2VjKTsKKwl0bS0+dG1fbWluID0gYmNkMmJpbih0bS0+dG1fbWluKTsKKwl0bS0+dG1faG91ciA9IGJjZDJiaW4odG0tPnRtX2hvdXIpOworCXRtLT50bV9tZGF5ID0gYmNkMmJpbih0bS0+dG1fbWRheSk7CisJdG0tPnRtX21vbiA9IGJjZDJiaW4odG0tPnRtX21vbik7CisJdG0tPnRtX3llYXIgPSBiY2QyYmluKHRtLT50bV95ZWFyKTsKKworCS8qCisJICogQWNjb3VudCBmb3IgZGlmZmVyZW5jZXMgYmV0d2VlbiBob3cgdGhlIFJUQyB1c2VzIHRoZSB2YWx1ZXMKKwkgKiBhbmQgaG93IHRoZXkgYXJlIGRlZmluZWQgaW4gYSBzdHJ1Y3QgcnRjX3RpbWU7CisJICovCisJaWYgKHRtLT50bV95ZWFyIDwgNDUpCisJCXRtLT50bV95ZWFyICs9IDMwOworCXRtLT50bV95ZWFyICs9IDQwOworCWlmICh0bS0+dG1feWVhciA8IDcwKQorCQl0bS0+dG1feWVhciArPSAxMDA7CisKKwl0bS0+dG1fbW9uLS07CisKKwlyZXR1cm4gcnRjX3ZhbGlkX3RtKHRtKTsKK30KKworc3RhdGljIGludCBkczEyODZfc2V0X3RpbWUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgcnRjX3RpbWUgKnRtKQoreworCXN0cnVjdCBkczEyODZfcHJpdiAqcHJpdiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXVuc2lnbmVkIGNoYXIgbW9uLCBkYXksIGhycywgbWluLCBzZWM7CisJdW5zaWduZWQgY2hhciBzYXZlX2NvbnRyb2w7CisJdW5zaWduZWQgaW50IHlyczsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJeXJzID0gdG0tPnRtX3llYXIgKyAxOTAwOworCW1vbiA9IHRtLT50bV9tb24gKyAxOyAgIC8qIHRtX21vbiBzdGFydHMgYXQgemVybyAqLworCWRheSA9IHRtLT50bV9tZGF5OworCWhycyA9IHRtLT50bV9ob3VyOworCW1pbiA9IHRtLT50bV9taW47CisJc2VjID0gdG0tPnRtX3NlYzsKKworCWlmICh5cnMgPCAxOTcwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXlycyAtPSAxOTQwOworCWlmICh5cnMgPiAyNTUpICAgIC8qIFRoZXkgYXJlIHVuc2lnbmVkICovCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKHlycyA+PSAxMDApCisJCXlycyAtPSAxMDA7CisKKwlzZWMgPSBiaW4yYmNkKHNlYyk7CisJbWluID0gYmluMmJjZChtaW4pOworCWhycyA9IGJpbjJiY2QoaHJzKTsKKwlkYXkgPSBiaW4yYmNkKGRheSk7CisJbW9uID0gYmluMmJjZChtb24pOworCXlycyA9IGJpbjJiY2QoeXJzKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJc2F2ZV9jb250cm9sID0gZHMxMjg2X3J0Y19yZWFkKHByaXYsIFJUQ19DTUQpOworCWRzMTI4Nl9ydGNfd3JpdGUocHJpdiwgKHNhdmVfY29udHJvbHxSVENfVEUpLCBSVENfQ01EKTsKKworCWRzMTI4Nl9ydGNfd3JpdGUocHJpdiwgeXJzLCBSVENfWUVBUik7CisJZHMxMjg2X3J0Y193cml0ZShwcml2LCBtb24sIFJUQ19NT05USCk7CisJZHMxMjg2X3J0Y193cml0ZShwcml2LCBkYXksIFJUQ19EQVRFKTsKKwlkczEyODZfcnRjX3dyaXRlKHByaXYsIGhycywgUlRDX0hPVVJTKTsKKwlkczEyODZfcnRjX3dyaXRlKHByaXYsIG1pbiwgUlRDX01JTlVURVMpOworCWRzMTI4Nl9ydGNfd3JpdGUocHJpdiwgc2VjLCBSVENfU0VDT05EUyk7CisJZHMxMjg2X3J0Y193cml0ZShwcml2LCAwLCBSVENfSFVORFJFRFRIX1NFQ09ORCk7CisKKwlkczEyODZfcnRjX3dyaXRlKHByaXYsIHNhdmVfY29udHJvbCwgUlRDX0NNRCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGRzMTI4Nl9yZWFkX2FsYXJtKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHJ0Y193a2Fscm0gKmFsbSkKK3sKKwlzdHJ1Y3QgZHMxMjg2X3ByaXYgKnByaXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwl1bnNpZ25lZCBjaGFyIGNtZDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJLyoKKwkgKiBPbmx5IHRoZSB2YWx1ZXMgdGhhdCB3ZSByZWFkIGZyb20gdGhlIFJUQyBhcmUgc2V0LiBUaGF0CisJICogbWVhbnMgb25seSB0bV93ZGF5LCB0bV9ob3VyLCB0bV9taW4uCisJICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwlhbG0tPnRpbWUudG1fbWluID0gZHMxMjg2X3J0Y19yZWFkKHByaXYsIFJUQ19NSU5VVEVTX0FMQVJNKSAmIDB4N2Y7CisJYWxtLT50aW1lLnRtX2hvdXIgPSBkczEyODZfcnRjX3JlYWQocHJpdiwgUlRDX0hPVVJTX0FMQVJNKSAgJiAweDFmOworCWFsbS0+dGltZS50bV93ZGF5ID0gZHMxMjg2X3J0Y19yZWFkKHByaXYsIFJUQ19EQVlfQUxBUk0pICAgICYgMHgwNzsKKwljbWQgPSBkczEyODZfcnRjX3JlYWQocHJpdiwgUlRDX0NNRCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCisJYWxtLT50aW1lLnRtX21pbiA9IGJjZDJiaW4oYWxtLT50aW1lLnRtX21pbik7CisJYWxtLT50aW1lLnRtX2hvdXIgPSBiY2QyYmluKGFsbS0+dGltZS50bV9ob3VyKTsKKwlhbG0tPnRpbWUudG1fc2VjID0gMDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBkczEyODZfc2V0X2FsYXJtKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHJ0Y193a2Fscm0gKmFsbSkKK3sKKwlzdHJ1Y3QgZHMxMjg2X3ByaXYgKnByaXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwl1bnNpZ25lZCBjaGFyIGhycywgbWluLCBzZWM7CisKKwlocnMgPSBhbG0tPnRpbWUudG1faG91cjsKKwltaW4gPSBhbG0tPnRpbWUudG1fbWluOworCXNlYyA9IGFsbS0+dGltZS50bV9zZWM7CisKKwlpZiAoaHJzID49IDI0KQorCQlocnMgPSAweGZmOworCisJaWYgKG1pbiA+PSA2MCkKKwkJbWluID0gMHhmZjsKKworCWlmIChzZWMgIT0gMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwltaW4gPSBiaW4yYmNkKG1pbik7CisJaHJzID0gYmluMmJjZChocnMpOworCisJc3Bpbl9sb2NrKCZwcml2LT5sb2NrKTsKKwlkczEyODZfcnRjX3dyaXRlKHByaXYsIGhycywgUlRDX0hPVVJTX0FMQVJNKTsKKwlkczEyODZfcnRjX3dyaXRlKHByaXYsIG1pbiwgUlRDX01JTlVURVNfQUxBUk0pOworCXNwaW5fdW5sb2NrKCZwcml2LT5sb2NrKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHJ0Y19jbGFzc19vcHMgZHMxMjg2X29wcyA9IHsKKwkuaW9jdGwgICAJPSBkczEyODZfaW9jdGwsCisJLnByb2MgICAJPSBkczEyODZfcHJvYywKKwkucmVhZF90aW1lCT0gZHMxMjg2X3JlYWRfdGltZSwKKwkuc2V0X3RpbWUJPSBkczEyODZfc2V0X3RpbWUsCisJLnJlYWRfYWxhcm0JPSBkczEyODZfcmVhZF9hbGFybSwKKwkuc2V0X2FsYXJtCT0gZHMxMjg2X3NldF9hbGFybSwKK307CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IGRzMTI4Nl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBydGNfZGV2aWNlICpydGM7CisJc3RydWN0IHJlc291cmNlICpyZXM7CisJc3RydWN0IGRzMTI4Nl9wcml2ICpwcml2OworCWludCByZXQgPSAwOworCisJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwlpZiAoIXJlcykKKwkJcmV0dXJuIC1FTk9ERVY7CisJcHJpdiA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBkczEyODZfcHJpdiksIEdGUF9LRVJORUwpOworCWlmICghcHJpdikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlwcml2LT5zaXplID0gcmVzLT5lbmQgLSByZXMtPnN0YXJ0ICsgMTsKKwlpZiAoIXJlcXVlc3RfbWVtX3JlZ2lvbihyZXMtPnN0YXJ0LCBwcml2LT5zaXplLCBwZGV2LT5uYW1lKSkgeworCQlyZXQgPSAtRUJVU1k7CisJCWdvdG8gb3V0OworCX0KKwlwcml2LT5iYXNlYWRkciA9IHJlcy0+c3RhcnQ7CisJcHJpdi0+cnRjcmVncyA9IGlvcmVtYXAocHJpdi0+YmFzZWFkZHIsIHByaXYtPnNpemUpOworCWlmICghcHJpdi0+cnRjcmVncykgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKKwl9CisJc3Bpbl9sb2NrX2luaXQoJnByaXYtPmxvY2spOworCXJ0YyA9IHJ0Y19kZXZpY2VfcmVnaXN0ZXIoImRzMTI4NiIsICZwZGV2LT5kZXYsCisJCQkJICAmZHMxMjg2X29wcywgVEhJU19NT0RVTEUpOworCWlmIChJU19FUlIocnRjKSkgeworCQlyZXQgPSBQVFJfRVJSKHJ0Yyk7CisJCWdvdG8gb3V0OworCX0KKwlwcml2LT5ydGMgPSBydGM7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgcHJpdik7CisJcmV0dXJuIDA7CisKK291dDoKKwlpZiAocHJpdi0+cnRjKQorCQlydGNfZGV2aWNlX3VucmVnaXN0ZXIocHJpdi0+cnRjKTsKKwlpZiAocHJpdi0+cnRjcmVncykKKwkJaW91bm1hcChwcml2LT5ydGNyZWdzKTsKKwlpZiAocHJpdi0+YmFzZWFkZHIpCisJCXJlbGVhc2VfbWVtX3JlZ2lvbihwcml2LT5iYXNlYWRkciwgcHJpdi0+c2l6ZSk7CisJa2ZyZWUocHJpdik7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBfX2RldmV4aXQgZHMxMjg2X3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBkczEyODZfcHJpdiAqcHJpdiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCisJcnRjX2RldmljZV91bnJlZ2lzdGVyKHByaXYtPnJ0Yyk7CisJaW91bm1hcChwcml2LT5ydGNyZWdzKTsKKwlyZWxlYXNlX21lbV9yZWdpb24ocHJpdi0+YmFzZWFkZHIsIHByaXYtPnNpemUpOworCWtmcmVlKHByaXYpOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBkczEyODZfcGxhdGZvcm1fZHJpdmVyID0geworCS5kcml2ZXIJCT0geworCQkubmFtZQk9ICJydGMtZHMxMjg2IiwKKwkJLm93bmVyCT0gVEhJU19NT0RVTEUsCisJfSwKKwkucHJvYmUJCT0gZHMxMjg2X3Byb2JlLAorCS5yZW1vdmUJCT0gX19kZXZleGl0X3AoZHMxMjg2X3JlbW92ZSksCit9OworCitzdGF0aWMgaW50IF9faW5pdCBkczEyODZfaW5pdCh2b2lkKQoreworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJmRzMTI4Nl9wbGF0Zm9ybV9kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgZHMxMjg2X2V4aXQodm9pZCkKK3sKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmZHMxMjg2X3BsYXRmb3JtX2RyaXZlcik7Cit9CisKK01PRFVMRV9BVVRIT1IoIlRob21hcyBCb2dlbmRvZXJmZXIgPHRzYm9nZW5kQGFscGhhLmZyYW5rZW4uZGU+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkRTMTI4NiBSVEMgZHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfVkVSU0lPTihEUlZfVkVSU0lPTik7CitNT0RVTEVfQUxJQVMoInBsYXRmb3JtOnJ0Yy1kczEyODYiKTsKKworbW9kdWxlX2luaXQoZHMxMjg2X2luaXQpOworbW9kdWxlX2V4aXQoZHMxMjg2X2V4aXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLWRzMTMwMi5jIGIvZHJpdmVycy9ydGMvcnRjLWRzMTMwMi5jCmluZGV4IGI5Mzk3ODEuLjE4NDU1NjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL3J0Yy1kczEzMDIuYworKysgYi9kcml2ZXJzL3J0Yy9ydGMtZHMxMzAyLmMKQEAgLTQwLDcgKzQwLDcgQEAKICNkZWZpbmUJUlRDX1NDTEsJMHgwNDAwCiAKICNpZmRlZiBDT05GSUdfU0hfU0VDVVJFRURHRTU0MTAKLSNpbmNsdWRlIDxhc20vc25hcGdlYXIuaD4KKyNpbmNsdWRlIDxtYWNoL3NuYXBnZWFyLmg+CiAjZGVmaW5lIHNldF9kcCh4KQlTRUNVUkVFREdFX1dSSVRFX0lPUE9SVCh4LCAweDFjMDApCiAjZGVmaW5lIGdldF9kcCgpCVNFQ1VSRUVER0VfUkVBRF9JT1BPUlQoKQogI2Vsc2UKQEAgLTEwNywxMyArMTA3LDEzIEBACiAKIAlzcGluX2xvY2tfaXJxKCZydGMtPmxvY2spOwogCi0JdG0tPnRtX3NlYwk9IEJDRDJCSU4oZHMxMzAyX3JlYWRieXRlKFJUQ19BRERSX1NFQykpOwotCXRtLT50bV9taW4JPSBCQ0QyQklOKGRzMTMwMl9yZWFkYnl0ZShSVENfQUREUl9NSU4pKTsKLQl0bS0+dG1faG91cgk9IEJDRDJCSU4oZHMxMzAyX3JlYWRieXRlKFJUQ19BRERSX0hPVVIpKTsKLQl0bS0+dG1fd2RheQk9IEJDRDJCSU4oZHMxMzAyX3JlYWRieXRlKFJUQ19BRERSX0RBWSkpOwotCXRtLT50bV9tZGF5CT0gQkNEMkJJTihkczEzMDJfcmVhZGJ5dGUoUlRDX0FERFJfREFURSkpOwotCXRtLT50bV9tb24JPSBCQ0QyQklOKGRzMTMwMl9yZWFkYnl0ZShSVENfQUREUl9NT04pKSAtIDE7Ci0JdG0tPnRtX3llYXIJPSBCQ0QyQklOKGRzMTMwMl9yZWFkYnl0ZShSVENfQUREUl9ZRUFSKSk7CisJdG0tPnRtX3NlYwk9IGJjZDJiaW4oZHMxMzAyX3JlYWRieXRlKFJUQ19BRERSX1NFQykpOworCXRtLT50bV9taW4JPSBiY2QyYmluKGRzMTMwMl9yZWFkYnl0ZShSVENfQUREUl9NSU4pKTsKKwl0bS0+dG1faG91cgk9IGJjZDJiaW4oZHMxMzAyX3JlYWRieXRlKFJUQ19BRERSX0hPVVIpKTsKKwl0bS0+dG1fd2RheQk9IGJjZDJiaW4oZHMxMzAyX3JlYWRieXRlKFJUQ19BRERSX0RBWSkpOworCXRtLT50bV9tZGF5CT0gYmNkMmJpbihkczEzMDJfcmVhZGJ5dGUoUlRDX0FERFJfREFURSkpOworCXRtLT50bV9tb24JPSBiY2QyYmluKGRzMTMwMl9yZWFkYnl0ZShSVENfQUREUl9NT04pKSAtIDE7CisJdG0tPnRtX3llYXIJPSBiY2QyYmluKGRzMTMwMl9yZWFkYnl0ZShSVENfQUREUl9ZRUFSKSk7CiAKIAlpZiAodG0tPnRtX3llYXIgPCA3MCkKIAkJdG0tPnRtX3llYXIgKz0gMTAwOwpAQCAtMTQxLDEzICsxNDEsMTMgQEAKIAkvKiBTdG9wIFJUQyAqLwogCWRzMTMwMl93cml0ZWJ5dGUoUlRDX0FERFJfU0VDLCBkczEzMDJfcmVhZGJ5dGUoUlRDX0FERFJfU0VDKSB8IDB4ODApOwogCi0JZHMxMzAyX3dyaXRlYnl0ZShSVENfQUREUl9TRUMsIEJJTjJCQ0QodG0tPnRtX3NlYykpOwotCWRzMTMwMl93cml0ZWJ5dGUoUlRDX0FERFJfTUlOLCBCSU4yQkNEKHRtLT50bV9taW4pKTsKLQlkczEzMDJfd3JpdGVieXRlKFJUQ19BRERSX0hPVVIsIEJJTjJCQ0QodG0tPnRtX2hvdXIpKTsKLQlkczEzMDJfd3JpdGVieXRlKFJUQ19BRERSX0RBWSwgQklOMkJDRCh0bS0+dG1fd2RheSkpOwotCWRzMTMwMl93cml0ZWJ5dGUoUlRDX0FERFJfREFURSwgQklOMkJDRCh0bS0+dG1fbWRheSkpOwotCWRzMTMwMl93cml0ZWJ5dGUoUlRDX0FERFJfTU9OLCBCSU4yQkNEKHRtLT50bV9tb24gKyAxKSk7Ci0JZHMxMzAyX3dyaXRlYnl0ZShSVENfQUREUl9ZRUFSLCBCSU4yQkNEKHRtLT50bV95ZWFyICUgMTAwKSk7CisJZHMxMzAyX3dyaXRlYnl0ZShSVENfQUREUl9TRUMsIGJpbjJiY2QodG0tPnRtX3NlYykpOworCWRzMTMwMl93cml0ZWJ5dGUoUlRDX0FERFJfTUlOLCBiaW4yYmNkKHRtLT50bV9taW4pKTsKKwlkczEzMDJfd3JpdGVieXRlKFJUQ19BRERSX0hPVVIsIGJpbjJiY2QodG0tPnRtX2hvdXIpKTsKKwlkczEzMDJfd3JpdGVieXRlKFJUQ19BRERSX0RBWSwgYmluMmJjZCh0bS0+dG1fd2RheSkpOworCWRzMTMwMl93cml0ZWJ5dGUoUlRDX0FERFJfREFURSwgYmluMmJjZCh0bS0+dG1fbWRheSkpOworCWRzMTMwMl93cml0ZWJ5dGUoUlRDX0FERFJfTU9OLCBiaW4yYmNkKHRtLT50bV9tb24gKyAxKSk7CisJZHMxMzAyX3dyaXRlYnl0ZShSVENfQUREUl9ZRUFSLCBiaW4yYmNkKHRtLT50bV95ZWFyICUgMTAwKSk7CiAKIAkvKiBTdGFydCBSVEMgKi8KIAlkczEzMDJfd3JpdGVieXRlKFJUQ19BRERSX1NFQywgZHMxMzAyX3JlYWRieXRlKFJUQ19BRERSX1NFQykgJiB+MHg4MCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtZHMxMzA1LmMgYi9kcml2ZXJzL3J0Yy9ydGMtZHMxMzA1LmMKaW5kZXggYjkxZDAyYS4uZmMzNzJkZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvcnRjLWRzMTMwNS5jCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy1kczEzMDUuYwpAQCAtMTE0LDEwICsxMTQsMTAgQEAKIAkJCWhvdXIgPSAxMjsKIAkJCWJjZCAmPSB+RFMxMzA1X0hSX1BNOwogCQl9Ci0JCWhvdXIgKz0gQkNEMkJJTihiY2QpOworCQlob3VyICs9IGJjZDJiaW4oYmNkKTsKIAkJcmV0dXJuIGhvdXIgLSAxOwogCX0KLQlyZXR1cm4gQkNEMkJJTihiY2QpOworCXJldHVybiBiY2QyYmluKGJjZCk7CiB9CiAKIHN0YXRpYyB1OCBob3VyMmJjZChib29sIGhyMTIsIGludCBob3VyKQpAQCAtMTI1LDExICsxMjUsMTEgQEAKIAlpZiAoaHIxMikgewogCQlob3VyKys7CiAJCWlmIChob3VyIDw9IDEyKQotCQkJcmV0dXJuIERTMTMwNV9IUl8xMiB8IEJJTjJCQ0QoaG91cik7CisJCQlyZXR1cm4gRFMxMzA1X0hSXzEyIHwgYmluMmJjZChob3VyKTsKIAkJaG91ciAtPSAxMjsKLQkJcmV0dXJuIERTMTMwNV9IUl8xMiB8IERTMTMwNV9IUl9QTSB8IEJJTjJCQ0QoaG91cik7CisJCXJldHVybiBEUzEzMDVfSFJfMTIgfCBEUzEzMDVfSFJfUE0gfCBiaW4yYmNkKGhvdXIpOwogCX0KLQlyZXR1cm4gQklOMkJDRChob3VyKTsKKwlyZXR1cm4gYmluMmJjZChob3VyKTsKIH0KIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KQEAgLTIwNiwxMyArMjA2LDEzIEBACiAJCWJ1Zls0XSwgYnVmWzVdLCBidWZbNl0pOwogCiAJLyogRGVjb2RlIHRoZSByZWdpc3RlcnMgKi8KLQl0aW1lLT50bV9zZWMgPSBCQ0QyQklOKGJ1ZltEUzEzMDVfU0VDXSk7Ci0JdGltZS0+dG1fbWluID0gQkNEMkJJTihidWZbRFMxMzA1X01JTl0pOworCXRpbWUtPnRtX3NlYyA9IGJjZDJiaW4oYnVmW0RTMTMwNV9TRUNdKTsKKwl0aW1lLT50bV9taW4gPSBiY2QyYmluKGJ1ZltEUzEzMDVfTUlOXSk7CiAJdGltZS0+dG1faG91ciA9IGJjZDJob3VyKGJ1ZltEUzEzMDVfSE9VUl0pOwogCXRpbWUtPnRtX3dkYXkgPSBidWZbRFMxMzA1X1dEQVldIC0gMTsKLQl0aW1lLT50bV9tZGF5ID0gQkNEMkJJTihidWZbRFMxMzA1X01EQVldKTsKLQl0aW1lLT50bV9tb24gPSBCQ0QyQklOKGJ1ZltEUzEzMDVfTU9OXSkgLSAxOwotCXRpbWUtPnRtX3llYXIgPSBCQ0QyQklOKGJ1ZltEUzEzMDVfWUVBUl0pICsgMTAwOworCXRpbWUtPnRtX21kYXkgPSBiY2QyYmluKGJ1ZltEUzEzMDVfTURBWV0pOworCXRpbWUtPnRtX21vbiA9IGJjZDJiaW4oYnVmW0RTMTMwNV9NT05dKSAtIDE7CisJdGltZS0+dG1feWVhciA9IGJjZDJiaW4oYnVmW0RTMTMwNV9ZRUFSXSkgKyAxMDA7CiAKIAlkZXZfdmRiZyhkZXYsICIlcyBzZWNzPSVkLCBtaW5zPSVkLCAiCiAJCSJob3Vycz0lZCwgbWRheT0lZCwgbW9uPSVkLCB5ZWFyPSVkLCB3ZGF5PSVkXG4iLApAQCAtMjM5LDEzICsyMzksMTMgQEAKIAkvKiBXcml0ZSByZWdpc3RlcnMgc3RhcnRpbmcgYXQgdGhlIGZpcnN0IHRpbWUvZGF0ZSBhZGRyZXNzLiAqLwogCSpicCsrID0gRFMxMzA1X1dSSVRFIHwgRFMxMzA1X1NFQzsKIAotCSpicCsrID0gQklOMkJDRCh0aW1lLT50bV9zZWMpOwotCSpicCsrID0gQklOMkJDRCh0aW1lLT50bV9taW4pOworCSpicCsrID0gYmluMmJjZCh0aW1lLT50bV9zZWMpOworCSpicCsrID0gYmluMmJjZCh0aW1lLT50bV9taW4pOwogCSpicCsrID0gaG91cjJiY2QoZHMxMzA1LT5ocjEyLCB0aW1lLT50bV9ob3VyKTsKIAkqYnArKyA9ICh0aW1lLT50bV93ZGF5IDwgNykgPyAodGltZS0+dG1fd2RheSArIDEpIDogMTsKLQkqYnArKyA9IEJJTjJCQ0QodGltZS0+dG1fbWRheSk7Ci0JKmJwKysgPSBCSU4yQkNEKHRpbWUtPnRtX21vbiArIDEpOwotCSpicCsrID0gQklOMkJDRCh0aW1lLT50bV95ZWFyIC0gMTAwKTsKKwkqYnArKyA9IGJpbjJiY2QodGltZS0+dG1fbWRheSk7CisJKmJwKysgPSBiaW4yYmNkKHRpbWUtPnRtX21vbiArIDEpOworCSpicCsrID0gYmluMmJjZCh0aW1lLT50bV95ZWFyIC0gMTAwKTsKIAogCWRldl9kYmcoZGV2LCAiJXM6ICUwMnggJTAyeCAlMDJ4LCAlMDJ4ICUwMnggJTAyeCAlMDJ4XG4iLAogCQkid3JpdGUiLCBidWZbMV0sIGJ1ZlsyXSwgYnVmWzNdLApAQCAtMzI5LDggKzMyOSw4IEBACiAJICogZmlsbCBpbiB0aGUgcmVzdCAuLi4gYW5kIGFsc28gaGFuZGxlIHJvbGxvdmVyIHRvIHRvbW9ycm93IHdoZW4KIAkgKiB0aGF0J3MgbmVlZGVkLgogCSAqLwotCWFsbS0+dGltZS50bV9zZWMgPSBCQ0QyQklOKGJ1ZltEUzEzMDVfU0VDXSk7Ci0JYWxtLT50aW1lLnRtX21pbiA9IEJDRDJCSU4oYnVmW0RTMTMwNV9NSU5dKTsKKwlhbG0tPnRpbWUudG1fc2VjID0gYmNkMmJpbihidWZbRFMxMzA1X1NFQ10pOworCWFsbS0+dGltZS50bV9taW4gPSBiY2QyYmluKGJ1ZltEUzEzMDVfTUlOXSk7CiAJYWxtLT50aW1lLnRtX2hvdXIgPSBiY2QyaG91cihidWZbRFMxMzA1X0hPVVJdKTsKIAlhbG0tPnRpbWUudG1fbWRheSA9IC0xOwogCWFsbS0+dGltZS50bV9tb24gPSAtMTsKQEAgLTM4Nyw4ICszODcsOCBAQAogCiAJLyogd3JpdGUgYWxhcm0gKi8KIAlidWZbMF0gPSBEUzEzMDVfV1JJVEUgfCBEUzEzMDVfQUxNMChEUzEzMDVfU0VDKTsKLQlidWZbMSArIERTMTMwNV9TRUNdID0gQklOMkJDRChhbG0tPnRpbWUudG1fc2VjKTsKLQlidWZbMSArIERTMTMwNV9NSU5dID0gQklOMkJDRChhbG0tPnRpbWUudG1fbWluKTsKKwlidWZbMSArIERTMTMwNV9TRUNdID0gYmluMmJjZChhbG0tPnRpbWUudG1fc2VjKTsKKwlidWZbMSArIERTMTMwNV9NSU5dID0gYmluMmJjZChhbG0tPnRpbWUudG1fbWluKTsKIAlidWZbMSArIERTMTMwNV9IT1VSXSA9IGhvdXIyYmNkKGRzMTMwNS0+aHIxMiwgYWxtLT50aW1lLnRtX2hvdXIpOwogCWJ1ZlsxICsgRFMxMzA1X1dEQVldID0gRFMxMzA1X0FMTV9ESVNBQkxFOwogCkBAIC02MDYsNyArNjA2LDYgQEAKIHN0YXRpYyBzdHJ1Y3QgYmluX2F0dHJpYnV0ZSBudnJhbSA9IHsKIAkuYXR0ci5uYW1lCT0gIm52cmFtIiwKIAkuYXR0ci5tb2RlCT0gU19JUlVHTyB8IFNfSVdVU1IsCi0JLmF0dHIub3duZXIJPSBUSElTX01PRFVMRSwKIAkucmVhZAkJPSBkczEzMDVfbnZyYW1fcmVhZCwKIAkud3JpdGUJCT0gZHMxMzA1X252cmFtX3dyaXRlLAogCS5zaXplCQk9IERTMTMwNV9OVlJBTV9MRU4sCmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtZHMxMzA3LmMgYi9kcml2ZXJzL3J0Yy9ydGMtZHMxMzA3LmMKaW5kZXggYmJmOTdlNi4uMTYyMzMwYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvcnRjLWRzMTMwNy5jCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy1kczEzMDcuYwpAQCAtMjMsMTAgKzIzLDYgQEAKICAqIHRvIGhhdmUgc2V0IHRoZSBjaGlwIHVwIGFzIGEgY2xvY2sgKHR1cm5pbmcgb24gdGhlIG9zY2lsbGF0b3IgYW5kCiAgKiBzZXR0aW5nIHRoZSBkYXRlIGFuZCB0aW1lKSwgTGludXggY2FuIGlnbm9yZSB0aGUgbm9uLWNsb2NrIGZlYXR1cmVzLgogICogVGhhdCdzIGEgbmF0dXJhbCBqb2IgZm9yIGEgZmFjdG9yeSBvciByZXBhaXIgYmVuY2guCi0gKgotICogVGhpcyBpcyBjdXJyZW50bHkgYSBzaW1wbGUgbm8tYWxhcm1zIGRyaXZlci4gIElmIHlvdXIgYm9hcmQgaGFzIHRoZQotICogYWxhcm0gaXJxIHdpcmVkIHVwIG9uIGEgZHMxMzM3IG9yIGRzMTMzOSwgYW5kIHlvdSB3YW50IHRvIHVzZSB0aGF0LAotICogdGhlbiBsb29rIGF0IHRoZSBydGMtcnM1YzM3MiBkcml2ZXIgZm9yIGNvZGUgdG8gc3RlYWwuLi4KICAqLwogZW51bSBkc190eXBlIHsKIAlkc18xMzA3LApAQCAtNjcsNiArNjMsNyBAQAogIwlkZWZpbmUgRFMxMzA3X0JJVF9SUzAJCTB4MDEKICNkZWZpbmUgRFMxMzM3X1JFR19DT05UUk9MCTB4MGUKICMJZGVmaW5lIERTMTMzN19CSVRfbkVPU0MJCTB4ODAKKyMJZGVmaW5lIERTMTMzOV9CSVRfQkJTUUkJCTB4MjAKICMJZGVmaW5lIERTMTMzN19CSVRfUlMyCQkweDEwCiAjCWRlZmluZSBEUzEzMzdfQklUX1JTMQkJMHgwOAogIwlkZWZpbmUgRFMxMzM3X0JJVF9JTlRDTgkJMHgwNApAQCAtODMsMTkgKzgwLDIyIEBACiAjCWRlZmluZSBEUzEzMzdfQklUX09TRgkJMHg4MAogIwlkZWZpbmUgRFMxMzM3X0JJVF9BMkkJCTB4MDIKICMJZGVmaW5lIERTMTMzN19CSVRfQTFJCQkweDAxCisjZGVmaW5lIERTMTMzOV9SRUdfQUxBUk0xX1NFQ1MJMHgwNwogI2RlZmluZSBEUzEzMzlfUkVHX1RSSUNLTEUJMHgxMAogCiAKIAogc3RydWN0IGRzMTMwNyB7CiAJdTgJCQlyZWdfYWRkcjsKLQlib29sCQkJaGFzX252cmFtOwotCXU4CQkJcmVnc1s4XTsKKwl1OAkJCXJlZ3NbMTFdOwogCWVudW0gZHNfdHlwZQkJdHlwZTsKKwl1bnNpZ25lZCBsb25nCQlmbGFnczsKKyNkZWZpbmUgSEFTX05WUkFNCTAJCS8qIGJpdCAwID09IHN5c2ZzIGZpbGUgYWN0aXZlICovCisjZGVmaW5lIEhBU19BTEFSTQkxCQkvKiBiaXQgMSA9PSBpcnEgY2xhaW1lZCAqLwogCXN0cnVjdCBpMmNfbXNnCQltc2dbMl07CiAJc3RydWN0IGkyY19jbGllbnQJKmNsaWVudDsKLQlzdHJ1Y3QgaTJjX2NsaWVudAlkZXY7CiAJc3RydWN0IHJ0Y19kZXZpY2UJKnJ0YzsKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QJd29yazsKIH07CiAKIHN0cnVjdCBjaGlwX2Rlc2MgewpAQCAtMTMyLDEyICsxMzIsNzkgQEAKIH07CiBNT0RVTEVfREVWSUNFX1RBQkxFKGkyYywgZHMxMzA3X2lkKTsKIAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyoKKyAqIFRoZSBJUlEgbG9naWMgaW5jbHVkZXMgYSAicmVhbCIgaGFuZGxlciBydW5uaW5nIGluIElSUSBjb250ZXh0IGp1c3QKKyAqIGxvbmcgZW5vdWdoIHRvIHNjaGVkdWxlIHRoaXMgd29ya3F1ZXVlIGVudHJ5LiAgIFdlIG5lZWQgYSB0YXNrIGNvbnRleHQKKyAqIHRvIHRhbGsgdG8gdGhlIFJUQywgc2luY2UgSTJDIEkvTyBjYWxscyByZXF1aXJlIHRoYXQ7IGFuZCBkaXNhYmxlIHRoZQorICogSVJRIHVudGlsIHdlIGNsZWFyIGl0cyBzdGF0dXMgb24gdGhlIGNoaXAsIHNvIHRoYXQgdGhpcyBoYW5kbGVyIGNhbgorICogd29yayB3aXRoIGFueSB0eXBlIG9mIHRyaWdnZXJpbmcgKG5vdCBqdXN0IGZhbGxpbmcgZWRnZSkuCisgKgorICogVGhlIGRzMTMzNyBhbmQgZHMxMzM5IGJvdGggaGF2ZSB0d28gYWxhcm1zLCBidXQgd2Ugb25seSB1c2UgdGhlIGZpcnN0CisgKiBvbmUgKHdpdGggYSAic2Vjb25kcyIgZmllbGQpLiAgRm9yIGRzMTMzNyB3ZSBleHBlY3QgbklOVEEgaXMgb3VyIGFsYXJtCisgKiBzaWduYWw7IGRzMTMzOSBjaGlwcyBoYXZlIG9ubHkgb25lIGFsYXJtIHNpZ25hbC4KKyAqLworc3RhdGljIHZvaWQgZHMxMzA3X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCBkczEzMDcJCSpkczEzMDc7CisJc3RydWN0IGkyY19jbGllbnQJKmNsaWVudDsKKwlzdHJ1Y3QgbXV0ZXgJCSpsb2NrOworCWludAkJCXN0YXQsIGNvbnRyb2w7CisKKwlkczEzMDcgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGRzMTMwNywgd29yayk7CisJY2xpZW50ID0gZHMxMzA3LT5jbGllbnQ7CisJbG9jayA9ICZkczEzMDctPnJ0Yy0+b3BzX2xvY2s7CisKKwltdXRleF9sb2NrKGxvY2spOworCXN0YXQgPSBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LCBEUzEzMzdfUkVHX1NUQVRVUyk7CisJaWYgKHN0YXQgPCAwKQorCQlnb3RvIG91dDsKKworCWlmIChzdGF0ICYgRFMxMzM3X0JJVF9BMUkpIHsKKwkJc3RhdCAmPSB+RFMxMzM3X0JJVF9BMUk7CisJCWkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCBEUzEzMzdfUkVHX1NUQVRVUywgc3RhdCk7CisKKwkJY29udHJvbCA9IGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsIERTMTMzN19SRUdfQ09OVFJPTCk7CisJCWlmIChjb250cm9sIDwgMCkKKwkJCWdvdG8gb3V0OworCisJCWNvbnRyb2wgJj0gfkRTMTMzN19CSVRfQTFJRTsKKwkJaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsIERTMTMzN19SRUdfQ09OVFJPTCwgY29udHJvbCk7CisKKwkJLyogcnRjX3VwZGF0ZV9pcnEoKSBhc3N1bWVzIHRoYXQgaXQgaXMgY2FsbGVkCisJCSAqIGZyb20gSVJRLWRpc2FibGVkIGNvbnRleHQuCisJCSAqLworCQlsb2NhbF9pcnFfZGlzYWJsZSgpOworCQlydGNfdXBkYXRlX2lycShkczEzMDctPnJ0YywgMSwgUlRDX0FGIHwgUlRDX0lSUUYpOworCQlsb2NhbF9pcnFfZW5hYmxlKCk7CisJfQorCitvdXQ6CisJaWYgKHRlc3RfYml0KEhBU19BTEFSTSwgJmRzMTMwNy0+ZmxhZ3MpKQorCQllbmFibGVfaXJxKGNsaWVudC0+aXJxKTsKKwltdXRleF91bmxvY2sobG9jayk7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBkczEzMDdfaXJxKGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3sKKwlzdHJ1Y3QgaTJjX2NsaWVudAkqY2xpZW50ID0gZGV2X2lkOworCXN0cnVjdCBkczEzMDcJCSpkczEzMDcgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKworCWRpc2FibGVfaXJxX25vc3luYyhpcnEpOworCXNjaGVkdWxlX3dvcmsoJmRzMTMwNy0+d29yayk7CisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCiBzdGF0aWMgaW50IGRzMTMwN19nZXRfdGltZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBydGNfdGltZSAqdCkKIHsKIAlzdHJ1Y3QgZHMxMzA3CSpkczEzMDcgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKIAlpbnQJCXRtcDsKIAogCS8qIHJlYWQgdGhlIFJUQyBkYXRlIGFuZCB0aW1lIHJlZ2lzdGVycyBhbGwgYXQgb25jZSAqLworCWRzMTMwNy0+cmVnX2FkZHIgPSAwOwogCWRzMTMwNy0+bXNnWzFdLmZsYWdzID0gSTJDX01fUkQ7CiAJZHMxMzA3LT5tc2dbMV0ubGVuID0gNzsKIApAQCAtMTU1LDE3ICsyMjIsMTcgQEAKIAkJCWRzMTMwNy0+cmVnc1s0XSwgZHMxMzA3LT5yZWdzWzVdLAogCQkJZHMxMzA3LT5yZWdzWzZdKTsKIAotCXQtPnRtX3NlYyA9IEJDRDJCSU4oZHMxMzA3LT5yZWdzW0RTMTMwN19SRUdfU0VDU10gJiAweDdmKTsKLQl0LT50bV9taW4gPSBCQ0QyQklOKGRzMTMwNy0+cmVnc1tEUzEzMDdfUkVHX01JTl0gJiAweDdmKTsKKwl0LT50bV9zZWMgPSBiY2QyYmluKGRzMTMwNy0+cmVnc1tEUzEzMDdfUkVHX1NFQ1NdICYgMHg3Zik7CisJdC0+dG1fbWluID0gYmNkMmJpbihkczEzMDctPnJlZ3NbRFMxMzA3X1JFR19NSU5dICYgMHg3Zik7CiAJdG1wID0gZHMxMzA3LT5yZWdzW0RTMTMwN19SRUdfSE9VUl0gJiAweDNmOwotCXQtPnRtX2hvdXIgPSBCQ0QyQklOKHRtcCk7Ci0JdC0+dG1fd2RheSA9IEJDRDJCSU4oZHMxMzA3LT5yZWdzW0RTMTMwN19SRUdfV0RBWV0gJiAweDA3KSAtIDE7Ci0JdC0+dG1fbWRheSA9IEJDRDJCSU4oZHMxMzA3LT5yZWdzW0RTMTMwN19SRUdfTURBWV0gJiAweDNmKTsKKwl0LT50bV9ob3VyID0gYmNkMmJpbih0bXApOworCXQtPnRtX3dkYXkgPSBiY2QyYmluKGRzMTMwNy0+cmVnc1tEUzEzMDdfUkVHX1dEQVldICYgMHgwNykgLSAxOworCXQtPnRtX21kYXkgPSBiY2QyYmluKGRzMTMwNy0+cmVnc1tEUzEzMDdfUkVHX01EQVldICYgMHgzZik7CiAJdG1wID0gZHMxMzA3LT5yZWdzW0RTMTMwN19SRUdfTU9OVEhdICYgMHgxZjsKLQl0LT50bV9tb24gPSBCQ0QyQklOKHRtcCkgLSAxOworCXQtPnRtX21vbiA9IGJjZDJiaW4odG1wKSAtIDE7CiAKIAkvKiBhc3N1bWUgMjBZWSBub3QgMTlZWSwgYW5kIGlnbm9yZSBEUzEzMzdfQklUX0NFTlRVUlkgKi8KLQl0LT50bV95ZWFyID0gQkNEMkJJTihkczEzMDctPnJlZ3NbRFMxMzA3X1JFR19ZRUFSXSkgKyAxMDA7CisJdC0+dG1feWVhciA9IGJjZDJiaW4oZHMxMzA3LT5yZWdzW0RTMTMwN19SRUdfWUVBUl0pICsgMTAwOwogCiAJZGV2X2RiZyhkZXYsICIlcyBzZWNzPSVkLCBtaW5zPSVkLCAiCiAJCSJob3Vycz0lZCwgbWRheT0lZCwgbW9uPSVkLCB5ZWFyPSVkLCB3ZGF5PSVkXG4iLApAQCAtMTkxLDE2ICsyNTgsMTYgQEAKIAkJdC0+dG1fbW9uLCB0LT50bV95ZWFyLCB0LT50bV93ZGF5KTsKIAogCSpidWYrKyA9IDA7CQkvKiBmaXJzdCByZWdpc3RlciBhZGRyICovCi0JYnVmW0RTMTMwN19SRUdfU0VDU10gPSBCSU4yQkNEKHQtPnRtX3NlYyk7Ci0JYnVmW0RTMTMwN19SRUdfTUlOXSA9IEJJTjJCQ0QodC0+dG1fbWluKTsKLQlidWZbRFMxMzA3X1JFR19IT1VSXSA9IEJJTjJCQ0QodC0+dG1faG91cik7Ci0JYnVmW0RTMTMwN19SRUdfV0RBWV0gPSBCSU4yQkNEKHQtPnRtX3dkYXkgKyAxKTsKLQlidWZbRFMxMzA3X1JFR19NREFZXSA9IEJJTjJCQ0QodC0+dG1fbWRheSk7Ci0JYnVmW0RTMTMwN19SRUdfTU9OVEhdID0gQklOMkJDRCh0LT50bV9tb24gKyAxKTsKKwlidWZbRFMxMzA3X1JFR19TRUNTXSA9IGJpbjJiY2QodC0+dG1fc2VjKTsKKwlidWZbRFMxMzA3X1JFR19NSU5dID0gYmluMmJjZCh0LT50bV9taW4pOworCWJ1ZltEUzEzMDdfUkVHX0hPVVJdID0gYmluMmJjZCh0LT50bV9ob3VyKTsKKwlidWZbRFMxMzA3X1JFR19XREFZXSA9IGJpbjJiY2QodC0+dG1fd2RheSArIDEpOworCWJ1ZltEUzEzMDdfUkVHX01EQVldID0gYmluMmJjZCh0LT50bV9tZGF5KTsKKwlidWZbRFMxMzA3X1JFR19NT05USF0gPSBiaW4yYmNkKHQtPnRtX21vbiArIDEpOwogCiAJLyogYXNzdW1lIDIwWVkgbm90IDE5WVkgKi8KIAl0bXAgPSB0LT50bV95ZWFyIC0gMTAwOwotCWJ1ZltEUzEzMDdfUkVHX1lFQVJdID0gQklOMkJDRCh0bXApOworCWJ1ZltEUzEzMDdfUkVHX1lFQVJdID0gYmluMmJjZCh0bXApOwogCiAJc3dpdGNoIChkczEzMDctPnR5cGUpIHsKIAljYXNlIGRzXzEzMzc6CkBAIC0yMzEsOSArMjk4LDE4NiBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IGRzMTMwN19yZWFkX2FsYXJtKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHJ0Y193a2Fscm0gKnQpCit7CisJc3RydWN0IGkyY19jbGllbnQgICAgICAgKmNsaWVudCA9IHRvX2kyY19jbGllbnQoZGV2KTsKKwlzdHJ1Y3QgZHMxMzA3CQkqZHMxMzA3ID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisJaW50CQkJcmV0OworCisJaWYgKCF0ZXN0X2JpdChIQVNfQUxBUk0sICZkczEzMDctPmZsYWdzKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKiByZWFkIGFsbCBBTEFSTTEsIEFMQVJNMiwgYW5kIHN0YXR1cyByZWdpc3RlcnMgYXQgb25jZSAqLworCWRzMTMwNy0+cmVnX2FkZHIgPSBEUzEzMzlfUkVHX0FMQVJNMV9TRUNTOworCWRzMTMwNy0+bXNnWzFdLmZsYWdzID0gSTJDX01fUkQ7CisJZHMxMzA3LT5tc2dbMV0ubGVuID0gOTsKKworCXJldCA9IGkyY190cmFuc2Zlcih0b19pMmNfYWRhcHRlcihjbGllbnQtPmRldi5wYXJlbnQpLAorCQkJZHMxMzA3LT5tc2csIDIpOworCWlmIChyZXQgIT0gMikgeworCQlkZXZfZXJyKGRldiwgIiVzIGVycm9yICVkXG4iLCAiYWxhcm0gcmVhZCIsIHJldCk7CisJCXJldHVybiAtRUlPOworCX0KKworCWRldl9kYmcoZGV2LCAiJXM6ICUwMnggJTAyeCAlMDJ4ICUwMngsICUwMnggJTAyeCAlMDJ4LCAlMDJ4ICUwMnhcbiIsCisJCQkiYWxhcm0gcmVhZCIsCisJCQlkczEzMDctPnJlZ3NbMF0sIGRzMTMwNy0+cmVnc1sxXSwKKwkJCWRzMTMwNy0+cmVnc1syXSwgZHMxMzA3LT5yZWdzWzNdLAorCQkJZHMxMzA3LT5yZWdzWzRdLCBkczEzMDctPnJlZ3NbNV0sCisJCQlkczEzMDctPnJlZ3NbNl0sIGRzMTMwNy0+cmVnc1s3XSwKKwkJCWRzMTMwNy0+cmVnc1s4XSk7CisKKwkvKiByZXBvcnQgYWxhcm0gdGltZSAoQUxBUk0xKTsgYXNzdW1lIDI0IGhvdXIgYW5kIGRheS1vZi1tb250aCBtb2RlcywKKwkgKiBhbmQgdGhhdCBhbGwgZm91ciBmaWVsZHMgYXJlIGNoZWNrZWQgbWF0Y2hlcworCSAqLworCXQtPnRpbWUudG1fc2VjID0gYmNkMmJpbihkczEzMDctPnJlZ3NbMF0gJiAweDdmKTsKKwl0LT50aW1lLnRtX21pbiA9IGJjZDJiaW4oZHMxMzA3LT5yZWdzWzFdICYgMHg3Zik7CisJdC0+dGltZS50bV9ob3VyID0gYmNkMmJpbihkczEzMDctPnJlZ3NbMl0gJiAweDNmKTsKKwl0LT50aW1lLnRtX21kYXkgPSBiY2QyYmluKGRzMTMwNy0+cmVnc1szXSAmIDB4M2YpOworCXQtPnRpbWUudG1fbW9uID0gLTE7CisJdC0+dGltZS50bV95ZWFyID0gLTE7CisJdC0+dGltZS50bV93ZGF5ID0gLTE7CisJdC0+dGltZS50bV95ZGF5ID0gLTE7CisJdC0+dGltZS50bV9pc2RzdCA9IC0xOworCisJLyogLi4uIGFuZCBzdGF0dXMgKi8KKwl0LT5lbmFibGVkID0gISEoZHMxMzA3LT5yZWdzWzddICYgRFMxMzM3X0JJVF9BMUlFKTsKKwl0LT5wZW5kaW5nID0gISEoZHMxMzA3LT5yZWdzWzhdICYgRFMxMzM3X0JJVF9BMUkpOworCisJZGV2X2RiZyhkZXYsICIlcyBzZWNzPSVkLCBtaW5zPSVkLCAiCisJCSJob3Vycz0lZCwgbWRheT0lZCwgZW5hYmxlZD0lZCwgcGVuZGluZz0lZFxuIiwKKwkJImFsYXJtIHJlYWQiLCB0LT50aW1lLnRtX3NlYywgdC0+dGltZS50bV9taW4sCisJCXQtPnRpbWUudG1faG91ciwgdC0+dGltZS50bV9tZGF5LAorCQl0LT5lbmFibGVkLCB0LT5wZW5kaW5nKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGRzMTMwN19zZXRfYWxhcm0oc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgcnRjX3drYWxybSAqdCkKK3sKKwlzdHJ1Y3QgaTJjX2NsaWVudCAgICAgICAqY2xpZW50ID0gdG9faTJjX2NsaWVudChkZXYpOworCXN0cnVjdCBkczEzMDcJCSpkczEzMDcgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKwl1bnNpZ25lZCBjaGFyCQkqYnVmID0gZHMxMzA3LT5yZWdzOworCXU4CQkJY29udHJvbCwgc3RhdHVzOworCWludAkJCXJldDsKKworCWlmICghdGVzdF9iaXQoSEFTX0FMQVJNLCAmZHMxMzA3LT5mbGFncykpCisJCXJldHVybiAtRUlOVkFMOworCisJZGV2X2RiZyhkZXYsICIlcyBzZWNzPSVkLCBtaW5zPSVkLCAiCisJCSJob3Vycz0lZCwgbWRheT0lZCwgZW5hYmxlZD0lZCwgcGVuZGluZz0lZFxuIiwKKwkJImFsYXJtIHNldCIsIHQtPnRpbWUudG1fc2VjLCB0LT50aW1lLnRtX21pbiwKKwkJdC0+dGltZS50bV9ob3VyLCB0LT50aW1lLnRtX21kYXksCisJCXQtPmVuYWJsZWQsIHQtPnBlbmRpbmcpOworCisJLyogcmVhZCBjdXJyZW50IHN0YXR1cyBvZiBib3RoIGFsYXJtcyBhbmQgdGhlIGNoaXAgKi8KKwlkczEzMDctPnJlZ19hZGRyID0gRFMxMzM5X1JFR19BTEFSTTFfU0VDUzsKKwlkczEzMDctPm1zZ1sxXS5mbGFncyA9IEkyQ19NX1JEOworCWRzMTMwNy0+bXNnWzFdLmxlbiA9IDk7CisKKwlyZXQgPSBpMmNfdHJhbnNmZXIodG9faTJjX2FkYXB0ZXIoY2xpZW50LT5kZXYucGFyZW50KSwKKwkJCWRzMTMwNy0+bXNnLCAyKTsKKwlpZiAocmV0ICE9IDIpIHsKKwkJZGV2X2VycihkZXYsICIlcyBlcnJvciAlZFxuIiwgImFsYXJtIHdyaXRlIiwgcmV0KTsKKwkJcmV0dXJuIC1FSU87CisJfQorCWNvbnRyb2wgPSBkczEzMDctPnJlZ3NbN107CisJc3RhdHVzID0gZHMxMzA3LT5yZWdzWzhdOworCisJZGV2X2RiZyhkZXYsICIlczogJTAyeCAlMDJ4ICUwMnggJTAyeCwgJTAyeCAlMDJ4ICUwMngsICUwMnggJTAyeFxuIiwKKwkJCSJhbGFybSBzZXQgKG9sZCBzdGF0dXMpIiwKKwkJCWRzMTMwNy0+cmVnc1swXSwgZHMxMzA3LT5yZWdzWzFdLAorCQkJZHMxMzA3LT5yZWdzWzJdLCBkczEzMDctPnJlZ3NbM10sCisJCQlkczEzMDctPnJlZ3NbNF0sIGRzMTMwNy0+cmVnc1s1XSwKKwkJCWRzMTMwNy0+cmVnc1s2XSwgY29udHJvbCwgc3RhdHVzKTsKKworCS8qIHNldCBBTEFSTTEsIHVzaW5nIDI0IGhvdXIgYW5kIGRheS1vZi1tb250aCBtb2RlcyAqLworCSpidWYrKyA9IERTMTMzOV9SRUdfQUxBUk0xX1NFQ1M7CS8qIGZpcnN0IHJlZ2lzdGVyIGFkZHIgKi8KKwlidWZbMF0gPSBiaW4yYmNkKHQtPnRpbWUudG1fc2VjKTsKKwlidWZbMV0gPSBiaW4yYmNkKHQtPnRpbWUudG1fbWluKTsKKwlidWZbMl0gPSBiaW4yYmNkKHQtPnRpbWUudG1faG91cik7CisJYnVmWzNdID0gYmluMmJjZCh0LT50aW1lLnRtX21kYXkpOworCisJLyogc2V0IEFMQVJNMiB0byBub24tZ2FyYmFnZSAqLworCWJ1Zls0XSA9IDA7CisJYnVmWzVdID0gMDsKKwlidWZbNl0gPSAwOworCisJLyogb3B0aW9uYWxseSBlbmFibGUgQUxBUk0xICovCisJYnVmWzddID0gY29udHJvbCAmIH4oRFMxMzM3X0JJVF9BMUlFIHwgRFMxMzM3X0JJVF9BMklFKTsKKwlpZiAodC0+ZW5hYmxlZCkgeworCQlkZXZfZGJnKGRldiwgImFsYXJtIElSUSBhcm1lZFxuIik7CisJCWJ1Zls3XSB8PSBEUzEzMzdfQklUX0ExSUU7CS8qIG9ubHkgQUxBUk0xIGlzIHVzZWQgKi8KKwl9CisJYnVmWzhdID0gc3RhdHVzICYgfihEUzEzMzdfQklUX0ExSSB8IERTMTMzN19CSVRfQTJJKTsKKworCWRzMTMwNy0+bXNnWzFdLmZsYWdzID0gMDsKKwlkczEzMDctPm1zZ1sxXS5sZW4gPSAxMDsKKworCXJldCA9IGkyY190cmFuc2Zlcih0b19pMmNfYWRhcHRlcihjbGllbnQtPmRldi5wYXJlbnQpLAorCQkJJmRzMTMwNy0+bXNnWzFdLCAxKTsKKwlpZiAocmV0ICE9IDEpIHsKKwkJZGV2X2VycihkZXYsICJjYW4ndCBzZXQgYWxhcm0gdGltZVxuIik7CisJCXJldHVybiAtRUlPOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGRzMTMwN19pb2N0bChzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQoreworCXN0cnVjdCBpMmNfY2xpZW50CSpjbGllbnQgPSB0b19pMmNfY2xpZW50KGRldik7CisJc3RydWN0IGRzMTMwNwkJKmRzMTMwNyA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCWludAkJCXJldDsKKworCXN3aXRjaCAoY21kKSB7CisJY2FzZSBSVENfQUlFX09GRjoKKwkJaWYgKCF0ZXN0X2JpdChIQVNfQUxBUk0sICZkczEzMDctPmZsYWdzKSkKKwkJCXJldHVybiAtRU5PVFRZOworCisJCXJldCA9IGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsIERTMTMzN19SRUdfQ09OVFJPTCk7CisJCWlmIChyZXQgPCAwKQorCQkJcmV0dXJuIHJldDsKKworCQlyZXQgJj0gfkRTMTMzN19CSVRfQTFJRTsKKworCQlyZXQgPSBpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwKKwkJCQkJCURTMTMzN19SRUdfQ09OVFJPTCwgcmV0KTsKKwkJaWYgKHJldCA8IDApCisJCQlyZXR1cm4gcmV0OworCisJCWJyZWFrOworCisJY2FzZSBSVENfQUlFX09OOgorCQlpZiAoIXRlc3RfYml0KEhBU19BTEFSTSwgJmRzMTMwNy0+ZmxhZ3MpKQorCQkJcmV0dXJuIC1FTk9UVFk7CisKKwkJcmV0ID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwgRFMxMzM3X1JFR19DT05UUk9MKTsKKwkJaWYgKHJldCA8IDApCisJCQlyZXR1cm4gcmV0OworCisJCXJldCB8PSBEUzEzMzdfQklUX0ExSUU7CisKKwkJcmV0ID0gaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsCisJCQkJCQlEUzEzMzdfUkVHX0NPTlRST0wsIHJldCk7CisJCWlmIChyZXQgPCAwKQorCQkJcmV0dXJuIHJldDsKKworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCXJldHVybiAtRU5PSU9DVExDTUQ7CisJfQorCisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcnRjX2NsYXNzX29wcyBkczEzeHhfcnRjX29wcyA9IHsKIAkucmVhZF90aW1lCT0gZHMxMzA3X2dldF90aW1lLAogCS5zZXRfdGltZQk9IGRzMTMwN19zZXRfdGltZSwKKwkucmVhZF9hbGFybQk9IGRzMTMwN19yZWFkX2FsYXJtLAorCS5zZXRfYWxhcm0JPSBkczEzMDdfc2V0X2FsYXJtLAorCS5pb2N0bAkJPSBkczEzMDdfaW9jdGwsCiB9OwogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwpAQCAtMzA3LDcgKzU1MSw2IEBACiAJLmF0dHIgPSB7CiAJCS5uYW1lCT0gIm52cmFtIiwKIAkJLm1vZGUJPSBTX0lSVUdPIHwgU19JV1VTUiwKLQkJLm93bmVyCT0gVEhJU19NT0RVTEUsCiAJfSwKIAogCS5yZWFkCT0gZHMxMzA3X252cmFtX3JlYWQsCkBAIC0zMjcsNiArNTcwLDcgQEAKIAlpbnQJCQl0bXA7CiAJY29uc3Qgc3RydWN0IGNoaXBfZGVzYwkqY2hpcCA9ICZjaGlwc1tpZC0+ZHJpdmVyX2RhdGFdOwogCXN0cnVjdCBpMmNfYWRhcHRlcgkqYWRhcHRlciA9IHRvX2kyY19hZGFwdGVyKGNsaWVudC0+ZGV2LnBhcmVudCk7CisJaW50CQkJd2FudF9pcnEgPSBmYWxzZTsKIAogCWlmICghaTJjX2NoZWNrX2Z1bmN0aW9uYWxpdHkoYWRhcHRlciwKIAkJCUkyQ19GVU5DX0kyQyB8IEkyQ19GVU5DX1NNQlVTX1dSSVRFX0JZVEVfREFUQSkpCkBAIC0zNTMsNiArNTk3LDEyIEBACiAJc3dpdGNoIChkczEzMDctPnR5cGUpIHsKIAljYXNlIGRzXzEzMzc6CiAJY2FzZSBkc18xMzM5OgorCQkvKiBoYXMgSVJRPyAqLworCQlpZiAoZHMxMzA3LT5jbGllbnQtPmlycSA+IDAgJiYgY2hpcC0+YWxhcm0pIHsKKwkJCUlOSVRfV09SSygmZHMxMzA3LT53b3JrLCBkczEzMDdfd29yayk7CisJCQl3YW50X2lycSA9IHRydWU7CisJCX0KKwogCQlkczEzMDctPnJlZ19hZGRyID0gRFMxMzM3X1JFR19DT05UUk9MOwogCQlkczEzMDctPm1zZ1sxXS5sZW4gPSAyOwogCkBAIC0zNjksOCArNjE5LDIwIEBACiAKIAkJLyogb3NjaWxsYXRvciBvZmY/ICB0dXJuIGl0IG9uLCBzbyBjbG9jayBjYW4gdGljay4gKi8KIAkJaWYgKGRzMTMwNy0+cmVnc1swXSAmIERTMTMzN19CSVRfbkVPU0MpCi0JCQlpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgRFMxMzM3X1JFR19DT05UUk9MLAotCQkJCWRzMTMwNy0+cmVnc1swXSAmIH5EUzEzMzdfQklUX25FT1NDKTsKKwkJCWRzMTMwNy0+cmVnc1swXSAmPSB+RFMxMzM3X0JJVF9uRU9TQzsKKworCQkvKiBVc2luZyBJUlE/ICBEaXNhYmxlIHRoZSBzcXVhcmUgd2F2ZSBhbmQgYm90aCBhbGFybXMuCisJCSAqIEZvciBkczEzMzksIGJlIHN1cmUgYWxhcm1zIGNhbiB0cmlnZ2VyIHdoZW4gd2UncmUKKwkJICogcnVubmluZyBvbiBWYmFja3VwIChCQlNRSSk7IHdlIGFzc3VtZSBkczEzMzcgd2lsbAorCQkgKiBpZ25vcmUgdGhhdCBiaXQKKwkJICovCisJCWlmICh3YW50X2lycSkgeworCQkJZHMxMzA3LT5yZWdzWzBdIHw9IERTMTMzN19CSVRfSU5UQ04gfCBEUzEzMzlfQklUX0JCU1FJOworCQkJZHMxMzA3LT5yZWdzWzBdICY9IH4oRFMxMzM3X0JJVF9BMklFIHwgRFMxMzM3X0JJVF9BMUlFKTsKKwkJfQorCisJCWkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCBEUzEzMzdfUkVHX0NPTlRST0wsCisJCQkJCQkJZHMxMzA3LT5yZWdzWzBdKTsKIAogCQkvKiBvc2NpbGxhdG9yIGZhdWx0PyAgY2xlYXIgZmxhZywgYW5kIHdhcm4gKi8KIAkJaWYgKGRzMTMwNy0+cmVnc1sxXSAmIERTMTMzN19CSVRfT1NGKSB7CkBAIC00NDYsMTggKzcwOCwxOCBAQAogCX0KIAogCXRtcCA9IGRzMTMwNy0+cmVnc1tEUzEzMDdfUkVHX1NFQ1NdOwotCXRtcCA9IEJDRDJCSU4odG1wICYgMHg3Zik7CisJdG1wID0gYmNkMmJpbih0bXAgJiAweDdmKTsKIAlpZiAodG1wID4gNjApCiAJCWdvdG8gZXhpdF9iYWQ7Ci0JdG1wID0gQkNEMkJJTihkczEzMDctPnJlZ3NbRFMxMzA3X1JFR19NSU5dICYgMHg3Zik7CisJdG1wID0gYmNkMmJpbihkczEzMDctPnJlZ3NbRFMxMzA3X1JFR19NSU5dICYgMHg3Zik7CiAJaWYgKHRtcCA+IDYwKQogCQlnb3RvIGV4aXRfYmFkOwogCi0JdG1wID0gQkNEMkJJTihkczEzMDctPnJlZ3NbRFMxMzA3X1JFR19NREFZXSAmIDB4M2YpOworCXRtcCA9IGJjZDJiaW4oZHMxMzA3LT5yZWdzW0RTMTMwN19SRUdfTURBWV0gJiAweDNmKTsKIAlpZiAodG1wID09IDAgfHwgdG1wID4gMzEpCiAJCWdvdG8gZXhpdF9iYWQ7CiAKLQl0bXAgPSBCQ0QyQklOKGRzMTMwNy0+cmVnc1tEUzEzMDdfUkVHX01PTlRIXSAmIDB4MWYpOworCXRtcCA9IGJjZDJiaW4oZHMxMzA3LT5yZWdzW0RTMTMwN19SRUdfTU9OVEhdICYgMHgxZik7CiAJaWYgKHRtcCA9PSAwIHx8IHRtcCA+IDEyKQogCQlnb3RvIGV4aXRfYmFkOwogCkBAIC00NzYsMTQgKzczOCwxNCBAQAogCQkvKiBCZSBzdXJlIHdlJ3JlIGluIDI0IGhvdXIgbW9kZS4gIE11bHRpLW1hc3RlciBzeXN0ZW1zCiAJCSAqIHRha2Ugbm90ZS4uLgogCQkgKi8KLQkJdG1wID0gQkNEMkJJTih0bXAgJiAweDFmKTsKKwkJdG1wID0gYmNkMmJpbih0bXAgJiAweDFmKTsKIAkJaWYgKHRtcCA9PSAxMikKIAkJCXRtcCA9IDA7CiAJCWlmIChkczEzMDctPnJlZ3NbRFMxMzA3X1JFR19IT1VSXSAmIERTMTMwN19CSVRfUE0pCiAJCQl0bXAgKz0gMTI7CiAJCWkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LAogCQkJCURTMTMwN19SRUdfSE9VUiwKLQkJCQlCSU4yQkNEKHRtcCkpOworCQkJCWJpbjJiY2QodG1wKSk7CiAJfQogCiAJZHMxMzA3LT5ydGMgPSBydGNfZGV2aWNlX3JlZ2lzdGVyKGNsaWVudC0+bmFtZSwgJmNsaWVudC0+ZGV2LApAQCAtNDk1LDEwICs3NTcsMjIgQEAKIAkJZ290byBleGl0X2ZyZWU7CiAJfQogCisJaWYgKHdhbnRfaXJxKSB7CisJCWVyciA9IHJlcXVlc3RfaXJxKGNsaWVudC0+aXJxLCBkczEzMDdfaXJxLCAwLAorCQkJICBkczEzMDctPnJ0Yy0+bmFtZSwgY2xpZW50KTsKKwkJaWYgKGVycikgeworCQkJZGV2X2VycigmY2xpZW50LT5kZXYsCisJCQkJInVuYWJsZSB0byByZXF1ZXN0IElSUSFcbiIpOworCQkJZ290byBleGl0X2lycTsKKwkJfQorCQlzZXRfYml0KEhBU19BTEFSTSwgJmRzMTMwNy0+ZmxhZ3MpOworCQlkZXZfZGJnKCZjbGllbnQtPmRldiwgImdvdCBJUlEgJWRcbiIsIGNsaWVudC0+aXJxKTsKKwl9CisKIAlpZiAoY2hpcC0+bnZyYW01NikgewogCQllcnIgPSBzeXNmc19jcmVhdGVfYmluX2ZpbGUoJmNsaWVudC0+ZGV2LmtvYmosICZudnJhbSk7CiAJCWlmIChlcnIgPT0gMCkgewotCQkJZHMxMzA3LT5oYXNfbnZyYW0gPSB0cnVlOworCQkJc2V0X2JpdChIQVNfTlZSQU0sICZkczEzMDctPmZsYWdzKTsKIAkJCWRldl9pbmZvKCZjbGllbnQtPmRldiwgIjU2IGJ5dGVzIG52cmFtXG4iKTsKIAkJfQogCX0KQEAgLTUxMiw3ICs3ODYsOSBAQAogCQkJZHMxMzA3LT5yZWdzWzJdLCBkczEzMDctPnJlZ3NbM10sCiAJCQlkczEzMDctPnJlZ3NbNF0sIGRzMTMwNy0+cmVnc1s1XSwKIAkJCWRzMTMwNy0+cmVnc1s2XSk7Ci0KK2V4aXRfaXJxOgorCWlmIChkczEzMDctPnJ0YykKKwkJcnRjX2RldmljZV91bnJlZ2lzdGVyKGRzMTMwNy0+cnRjKTsKIGV4aXRfZnJlZToKIAlrZnJlZShkczEzMDcpOwogCXJldHVybiBlcnI7CkBAIC01MjAsOSArNzk2LDE0IEBACiAKIHN0YXRpYyBpbnQgX19kZXZleGl0IGRzMTMwN19yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKIHsKLQlzdHJ1Y3QgZHMxMzA3CSpkczEzMDcgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKwlzdHJ1Y3QgZHMxMzA3CQkqZHMxMzA3ID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CiAKLQlpZiAoZHMxMzA3LT5oYXNfbnZyYW0pCisJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChIQVNfQUxBUk0sICZkczEzMDctPmZsYWdzKSkgeworCQlmcmVlX2lycShjbGllbnQtPmlycSwgY2xpZW50KTsKKwkJY2FuY2VsX3dvcmtfc3luYygmZHMxMzA3LT53b3JrKTsKKwl9CisKKwlpZiAodGVzdF9hbmRfY2xlYXJfYml0KEhBU19OVlJBTSwgJmRzMTMwNy0+ZmxhZ3MpKQogCQlzeXNmc19yZW1vdmVfYmluX2ZpbGUoJmNsaWVudC0+ZGV2LmtvYmosICZudnJhbSk7CiAKIAlydGNfZGV2aWNlX3VucmVnaXN0ZXIoZHMxMzA3LT5ydGMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLWRzMTM3NC5jIGIvZHJpdmVycy9ydGMvcnRjLWRzMTM3NC5jCmluZGV4IGExNTA0MTguLmE1YjBmYzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL3J0Yy1kczEzNzQuYworKysgYi9kcml2ZXJzL3J0Yy9ydGMtZHMxMzc0LmMKQEAgLTQyOSwxMiArNDI5LDMzIEBACiAJcmV0dXJuIDA7CiB9CiAKKyNpZmRlZiBDT05GSUdfUE0KK3N0YXRpYyBpbnQgZHMxMzc0X3N1c3BlbmQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgcG1fbWVzc2FnZV90IHN0YXRlKQoreworCWlmIChjbGllbnQtPmlycSA+PSAwICYmIGRldmljZV9tYXlfd2FrZXVwKCZjbGllbnQtPmRldikpCisJCWVuYWJsZV9pcnFfd2FrZShjbGllbnQtPmlycSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZHMxMzc0X3Jlc3VtZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQoreworCWlmIChjbGllbnQtPmlycSA+PSAwICYmIGRldmljZV9tYXlfd2FrZXVwKCZjbGllbnQtPmRldikpCisJCWRpc2FibGVfaXJxX3dha2UoY2xpZW50LT5pcnEpOworCXJldHVybiAwOworfQorI2Vsc2UKKyNkZWZpbmUgZHMxMzc0X3N1c3BlbmQJTlVMTAorI2RlZmluZSBkczEzNzRfcmVzdW1lCU5VTEwKKyNlbmRpZgorCiBzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgZHMxMzc0X2RyaXZlciA9IHsKIAkuZHJpdmVyID0gewogCQkubmFtZSA9ICJydGMtZHMxMzc0IiwKIAkJLm93bmVyID0gVEhJU19NT0RVTEUsCiAJfSwKIAkucHJvYmUgPSBkczEzNzRfcHJvYmUsCisJLnN1c3BlbmQgPSBkczEzNzRfc3VzcGVuZCwKKwkucmVzdW1lID0gZHMxMzc0X3Jlc3VtZSwKIAkucmVtb3ZlID0gX19kZXZleGl0X3AoZHMxMzc0X3JlbW92ZSksCiAJLmlkX3RhYmxlID0gZHMxMzc0X2lkLAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy1kczE1MTEuYyBiL2RyaXZlcnMvcnRjL3J0Yy1kczE1MTEuYwppbmRleCAwZjBkMjdkLi4yNWNhYWRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtZHMxNTExLmMKKysrIGIvZHJpdmVycy9ydGMvcnRjLWRzMTUxMS5jCkBAIC0xNTMsOCArMTUzLDggQEAKIAkvKgogCSAqIHNldCB0aGUgd2RvZyB2YWx1ZXMgaW4gdGhlIHdkb2cgcmVnaXN0ZXJzCiAJICovCi0JcnRjX3dyaXRlKEJJTjJCQ0QoZGVjaXNlY29uZHMgJSAxMDApLCBEUzE1MTFfV0RfTVNFQyk7Ci0JcnRjX3dyaXRlKEJJTjJCQ0QoZGVjaXNlY29uZHMgLyAxMDApLCBEUzE1MTFfV0RfU0VDKTsKKwlydGNfd3JpdGUoYmluMmJjZChkZWNpc2Vjb25kcyAlIDEwMCksIERTMTUxMV9XRF9NU0VDKTsKKwlydGNfd3JpdGUoYmluMmJjZChkZWNpc2Vjb25kcyAvIDEwMCksIERTMTUxMV9XRF9TRUMpOwogCS8qCiAJICogc2V0IHdkb2cgZW5hYmxlIGFuZCB3ZG9nICdzdGVlcmluZycgYml0IHRvIGlzc3VlIGEgcmVzZXQKIAkgKi8KQEAgLTIyMCwxMyArMjIwLDEzIEBACiAJLyoKIAkgKiBlYWNoIHJlZ2lzdGVyIGlzIGEgZGlmZmVyZW50IG51bWJlciBvZiB2YWxpZCBiaXRzCiAJICovCi0Jc2VjID0gQklOMkJDRChzZWMpICYgMHg3ZjsKLQltaW4gPSBCSU4yQkNEKG1pbikgJiAweDdmOwotCWhycyA9IEJJTjJCQ0QoaHJzKSAmIDB4M2Y7Ci0JZGF5ID0gQklOMkJDRChkYXkpICYgMHgzZjsKLQltb24gPSBCSU4yQkNEKG1vbikgJiAweDFmOwotCXlycyA9IEJJTjJCQ0QoeXJzKSAmIDB4ZmY7Ci0JY2VuID0gQklOMkJDRChjZW4pICYgMHhmZjsKKwlzZWMgPSBiaW4yYmNkKHNlYykgJiAweDdmOworCW1pbiA9IGJpbjJiY2QobWluKSAmIDB4N2Y7CisJaHJzID0gYmluMmJjZChocnMpICYgMHgzZjsKKwlkYXkgPSBiaW4yYmNkKGRheSkgJiAweDNmOworCW1vbiA9IGJpbjJiY2QobW9uKSAmIDB4MWY7CisJeXJzID0gYmluMmJjZCh5cnMpICYgMHhmZjsKKwljZW4gPSBiaW4yYmNkKGNlbikgJiAweGZmOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmRzMTUxMV9sb2NrLCBmbGFncyk7CiAJcnRjX2Rpc2FibGVfdXBkYXRlKCk7CkBAIC0yNjQsMTQgKzI2NCwxNCBAQAogCXJ0Y19lbmFibGVfdXBkYXRlKCk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZHMxNTExX2xvY2ssIGZsYWdzKTsKIAotCXJ0Y190bS0+dG1fc2VjID0gQkNEMkJJTihydGNfdG0tPnRtX3NlYyk7Ci0JcnRjX3RtLT50bV9taW4gPSBCQ0QyQklOKHJ0Y190bS0+dG1fbWluKTsKLQlydGNfdG0tPnRtX2hvdXIgPSBCQ0QyQklOKHJ0Y190bS0+dG1faG91cik7Ci0JcnRjX3RtLT50bV9tZGF5ID0gQkNEMkJJTihydGNfdG0tPnRtX21kYXkpOwotCXJ0Y190bS0+dG1fd2RheSA9IEJDRDJCSU4ocnRjX3RtLT50bV93ZGF5KTsKLQlydGNfdG0tPnRtX21vbiA9IEJDRDJCSU4ocnRjX3RtLT50bV9tb24pOwotCXJ0Y190bS0+dG1feWVhciA9IEJDRDJCSU4ocnRjX3RtLT50bV95ZWFyKTsKLQljZW50dXJ5ID0gQkNEMkJJTihjZW50dXJ5KSAqIDEwMDsKKwlydGNfdG0tPnRtX3NlYyA9IGJjZDJiaW4ocnRjX3RtLT50bV9zZWMpOworCXJ0Y190bS0+dG1fbWluID0gYmNkMmJpbihydGNfdG0tPnRtX21pbik7CisJcnRjX3RtLT50bV9ob3VyID0gYmNkMmJpbihydGNfdG0tPnRtX2hvdXIpOworCXJ0Y190bS0+dG1fbWRheSA9IGJjZDJiaW4ocnRjX3RtLT50bV9tZGF5KTsKKwlydGNfdG0tPnRtX3dkYXkgPSBiY2QyYmluKHJ0Y190bS0+dG1fd2RheSk7CisJcnRjX3RtLT50bV9tb24gPSBiY2QyYmluKHJ0Y190bS0+dG1fbW9uKTsKKwlydGNfdG0tPnRtX3llYXIgPSBiY2QyYmluKHJ0Y190bS0+dG1feWVhcik7CisJY2VudHVyeSA9IGJjZDJiaW4oY2VudHVyeSkgKiAxMDA7CiAKIAkvKgogCSAqIEFjY291bnQgZm9yIGRpZmZlcmVuY2VzIGJldHdlZW4gaG93IHRoZSBSVEMgdXNlcyB0aGUgdmFsdWVzCkBAIC0zMDQsMTYgKzMwNCwxNiBAQAogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnBkYXRhLT5ydGMtPmlycV9sb2NrLCBmbGFncyk7CiAJcnRjX3dyaXRlKHBkYXRhLT5hbHJtX21kYXkgPCAwIHx8IChwZGF0YS0+aXJxZW4gJiBSVENfVUYpID8KLQkgICAgICAgMHg4MCA6IEJJTjJCQ0QocGRhdGEtPmFscm1fbWRheSkgJiAweDNmLAorCSAgICAgICAweDgwIDogYmluMmJjZChwZGF0YS0+YWxybV9tZGF5KSAmIDB4M2YsCiAJICAgICAgIFJUQ19BTEFSTV9EQVRFKTsKIAlydGNfd3JpdGUocGRhdGEtPmFscm1faG91ciA8IDAgfHwgKHBkYXRhLT5pcnFlbiAmIFJUQ19VRikgPwotCSAgICAgICAweDgwIDogQklOMkJDRChwZGF0YS0+YWxybV9ob3VyKSAmIDB4M2YsCisJICAgICAgIDB4ODAgOiBiaW4yYmNkKHBkYXRhLT5hbHJtX2hvdXIpICYgMHgzZiwKIAkgICAgICAgUlRDX0FMQVJNX0hPVVIpOwogCXJ0Y193cml0ZShwZGF0YS0+YWxybV9taW4gPCAwIHx8IChwZGF0YS0+aXJxZW4gJiBSVENfVUYpID8KLQkgICAgICAgMHg4MCA6IEJJTjJCQ0QocGRhdGEtPmFscm1fbWluKSAmIDB4N2YsCisJICAgICAgIDB4ODAgOiBiaW4yYmNkKHBkYXRhLT5hbHJtX21pbikgJiAweDdmLAogCSAgICAgICBSVENfQUxBUk1fTUlOKTsKIAlydGNfd3JpdGUocGRhdGEtPmFscm1fc2VjIDwgMCB8fCAocGRhdGEtPmlycWVuICYgUlRDX1VGKSA/Ci0JICAgICAgIDB4ODAgOiBCSU4yQkNEKHBkYXRhLT5hbHJtX3NlYykgJiAweDdmLAorCSAgICAgICAweDgwIDogYmluMmJjZChwZGF0YS0+YWxybV9zZWMpICYgMHg3ZiwKIAkgICAgICAgUlRDX0FMQVJNX1NFQyk7CiAJcnRjX3dyaXRlKHJ0Y19yZWFkKFJUQ19DTUQpIHwgKHBkYXRhLT5pcnFlbiA/IFJUQ19USUUgOiAwKSwgUlRDX0NNRCk7CiAJcnRjX3JlYWQoUlRDX0NNRDEpOwkvKiBjbGVhciBpbnRlcnJ1cHRzICovCkBAIC0zNzksMTggKzM3OSw2IEBACiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQogCi0gc3RhdGljIHZvaWQKLWRzMTUxMV9ydGNfcmVsZWFzZShzdHJ1Y3QgZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOwotCXN0cnVjdCBydGNfcGxhdF9kYXRhICpwZGF0YSA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwotCi0JaWYgKHBkYXRhLT5pcnEgPj0gMCkgewotCQlwZGF0YS0+aXJxZW4gPSAwOwotCQlkczE1MTFfcnRjX3VwZGF0ZV9hbGFybShwZGF0YSk7Ci0JfQotfQotCiAgc3RhdGljIGludAogZHMxNTExX3J0Y19pb2N0bChzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQogewpAQCAtNDI4LDcgKzQxNiw2IEBACiAJLnNldF90aW1lCT0gZHMxNTExX3J0Y19zZXRfdGltZSwKIAkucmVhZF9hbGFybQk9IGRzMTUxMV9ydGNfcmVhZF9hbGFybSwKIAkuc2V0X2FsYXJtCT0gZHMxNTExX3J0Y19zZXRfYWxhcm0sCi0JLnJlbGVhc2UJPSBkczE1MTFfcnRjX3JlbGVhc2UsCiAJLmlvY3RsCQk9IGRzMTUxMV9ydGNfaW9jdGwsCiB9OwogCkBAIC00OTQsNyArNDgxLDYgQEAKIAkuYXR0ciA9IHsKIAkJLm5hbWUgPSAibnZyYW0iLAogCQkubW9kZSA9IFNfSVJVR08gfCBTX0lXVUdPLAotCQkub3duZXIgPSBUSElTX01PRFVMRSwKIAl9LAogCS5zaXplID0gRFMxNTExX1JBTV9NQVgsCiAJLnJlYWQgPSBkczE1MTFfbnZyYW1fcmVhZCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy1kczE1NTMuYyBiL2RyaXZlcnMvcnRjL3J0Yy1kczE1NTMuYwppbmRleCBhMTlmMTE0Li5iOTQ3NWNkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtZHMxNTUzLmMKKysrIGIvZHJpdmVycy9ydGMvcnRjLWRzMTU1My5jCkBAIC03OCwxNyArNzgsMTcgQEAKIAl2b2lkIF9faW9tZW0gKmlvYWRkciA9IHBkYXRhLT5pb2FkZHI7CiAJdTggY2VudHVyeTsKIAotCWNlbnR1cnkgPSBCSU4yQkNEKCh0bS0+dG1feWVhciArIDE5MDApIC8gMTAwKTsKKwljZW50dXJ5ID0gYmluMmJjZCgodG0tPnRtX3llYXIgKyAxOTAwKSAvIDEwMCk7CiAKIAl3cml0ZWIoUlRDX1dSSVRFLCBwZGF0YS0+aW9hZGRyICsgUlRDX0NPTlRST0wpOwogCi0Jd3JpdGViKEJJTjJCQ0QodG0tPnRtX3llYXIgJSAxMDApLCBpb2FkZHIgKyBSVENfWUVBUik7Ci0Jd3JpdGViKEJJTjJCQ0QodG0tPnRtX21vbiArIDEpLCBpb2FkZHIgKyBSVENfTU9OVEgpOwotCXdyaXRlYihCSU4yQkNEKHRtLT50bV93ZGF5KSAmIFJUQ19EQVlfTUFTSywgaW9hZGRyICsgUlRDX0RBWSk7Ci0Jd3JpdGViKEJJTjJCQ0QodG0tPnRtX21kYXkpLCBpb2FkZHIgKyBSVENfREFURSk7Ci0Jd3JpdGViKEJJTjJCQ0QodG0tPnRtX2hvdXIpLCBpb2FkZHIgKyBSVENfSE9VUlMpOwotCXdyaXRlYihCSU4yQkNEKHRtLT50bV9taW4pLCBpb2FkZHIgKyBSVENfTUlOVVRFUyk7Ci0Jd3JpdGViKEJJTjJCQ0QodG0tPnRtX3NlYykgJiBSVENfU0VDT05EU19NQVNLLCBpb2FkZHIgKyBSVENfU0VDT05EUyk7CisJd3JpdGViKGJpbjJiY2QodG0tPnRtX3llYXIgJSAxMDApLCBpb2FkZHIgKyBSVENfWUVBUik7CisJd3JpdGViKGJpbjJiY2QodG0tPnRtX21vbiArIDEpLCBpb2FkZHIgKyBSVENfTU9OVEgpOworCXdyaXRlYihiaW4yYmNkKHRtLT50bV93ZGF5KSAmIFJUQ19EQVlfTUFTSywgaW9hZGRyICsgUlRDX0RBWSk7CisJd3JpdGViKGJpbjJiY2QodG0tPnRtX21kYXkpLCBpb2FkZHIgKyBSVENfREFURSk7CisJd3JpdGViKGJpbjJiY2QodG0tPnRtX2hvdXIpLCBpb2FkZHIgKyBSVENfSE9VUlMpOworCXdyaXRlYihiaW4yYmNkKHRtLT50bV9taW4pLCBpb2FkZHIgKyBSVENfTUlOVVRFUyk7CisJd3JpdGViKGJpbjJiY2QodG0tPnRtX3NlYykgJiBSVENfU0VDT05EU19NQVNLLCBpb2FkZHIgKyBSVENfU0VDT05EUyk7CiAKIAkvKiBSVENfQ0VOVFVSWSBhbmQgUlRDX0NPTlRST0wgc2hhcmUgc2FtZSByZWdpc3RlciAqLwogCXdyaXRlYihSVENfV1JJVEUgfCAoY2VudHVyeSAmIFJUQ19DRU5UVVJZX01BU0spLCBpb2FkZHIgKyBSVENfQ0VOVFVSWSk7CkBAIC0xMTgsMTQgKzExOCwxNCBAQAogCXllYXIgPSByZWFkYihpb2FkZHIgKyBSVENfWUVBUik7CiAJY2VudHVyeSA9IHJlYWRiKGlvYWRkciArIFJUQ19DRU5UVVJZKSAmIFJUQ19DRU5UVVJZX01BU0s7CiAJd3JpdGViKDAsIGlvYWRkciArIFJUQ19DT05UUk9MKTsKLQl0bS0+dG1fc2VjID0gQkNEMkJJTihzZWNvbmQpOwotCXRtLT50bV9taW4gPSBCQ0QyQklOKG1pbnV0ZSk7Ci0JdG0tPnRtX2hvdXIgPSBCQ0QyQklOKGhvdXIpOwotCXRtLT50bV9tZGF5ID0gQkNEMkJJTihkYXkpOwotCXRtLT50bV93ZGF5ID0gQkNEMkJJTih3ZWVrKTsKLQl0bS0+dG1fbW9uID0gQkNEMkJJTihtb250aCkgLSAxOworCXRtLT50bV9zZWMgPSBiY2QyYmluKHNlY29uZCk7CisJdG0tPnRtX21pbiA9IGJjZDJiaW4obWludXRlKTsKKwl0bS0+dG1faG91ciA9IGJjZDJiaW4oaG91cik7CisJdG0tPnRtX21kYXkgPSBiY2QyYmluKGRheSk7CisJdG0tPnRtX3dkYXkgPSBiY2QyYmluKHdlZWspOworCXRtLT50bV9tb24gPSBiY2QyYmluKG1vbnRoKSAtIDE7CiAJLyogeWVhciBpcyAxOTAwICsgdG0tPnRtX3llYXIgKi8KLQl0bS0+dG1feWVhciA9IEJDRDJCSU4oeWVhcikgKyBCQ0QyQklOKGNlbnR1cnkpICogMTAwIC0gMTkwMDsKKwl0bS0+dG1feWVhciA9IGJjZDJiaW4oeWVhcikgKyBiY2QyYmluKGNlbnR1cnkpICogMTAwIC0gMTkwMDsKIAogCWlmIChydGNfdmFsaWRfdG0odG0pIDwgMCkgewogCQlkZXZfZXJyKGRldiwgInJldHJpZXZlZCBkYXRlL3RpbWUgaXMgbm90IHZhbGlkLlxuIik7CkBAIC0xNDEsMTYgKzE0MSwxNiBAQAogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnBkYXRhLT5ydGMtPmlycV9sb2NrLCBmbGFncyk7CiAJd3JpdGViKHBkYXRhLT5hbHJtX21kYXkgPCAwIHx8IChwZGF0YS0+aXJxZW4gJiBSVENfVUYpID8KLQkgICAgICAgMHg4MCA6IEJJTjJCQ0QocGRhdGEtPmFscm1fbWRheSksCisJICAgICAgIDB4ODAgOiBiaW4yYmNkKHBkYXRhLT5hbHJtX21kYXkpLAogCSAgICAgICBpb2FkZHIgKyBSVENfREFURV9BTEFSTSk7CiAJd3JpdGViKHBkYXRhLT5hbHJtX2hvdXIgPCAwIHx8IChwZGF0YS0+aXJxZW4gJiBSVENfVUYpID8KLQkgICAgICAgMHg4MCA6IEJJTjJCQ0QocGRhdGEtPmFscm1faG91ciksCisJICAgICAgIDB4ODAgOiBiaW4yYmNkKHBkYXRhLT5hbHJtX2hvdXIpLAogCSAgICAgICBpb2FkZHIgKyBSVENfSE9VUlNfQUxBUk0pOwogCXdyaXRlYihwZGF0YS0+YWxybV9taW4gPCAwIHx8IChwZGF0YS0+aXJxZW4gJiBSVENfVUYpID8KLQkgICAgICAgMHg4MCA6IEJJTjJCQ0QocGRhdGEtPmFscm1fbWluKSwKKwkgICAgICAgMHg4MCA6IGJpbjJiY2QocGRhdGEtPmFscm1fbWluKSwKIAkgICAgICAgaW9hZGRyICsgUlRDX01JTlVURVNfQUxBUk0pOwogCXdyaXRlYihwZGF0YS0+YWxybV9zZWMgPCAwIHx8IChwZGF0YS0+aXJxZW4gJiBSVENfVUYpID8KLQkgICAgICAgMHg4MCA6IEJJTjJCQ0QocGRhdGEtPmFscm1fc2VjKSwKKwkgICAgICAgMHg4MCA6IGJpbjJiY2QocGRhdGEtPmFscm1fc2VjKSwKIAkgICAgICAgaW9hZGRyICsgUlRDX1NFQ09ORFNfQUxBUk0pOwogCXdyaXRlYihwZGF0YS0+aXJxZW4gPyBSVENfSU5UU19BRSA6IDAsIGlvYWRkciArIFJUQ19JTlRFUlJVUFRTKTsKIAlyZWFkYihpb2FkZHIgKyBSVENfRkxBR1MpOwkvKiBjbGVhciBpbnRlcnJ1cHRzICovCkBAIC0yMDcsMTcgKzIwNyw2IEBACiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQogCi1zdGF0aWMgdm9pZCBkczE1NTNfcnRjX3JlbGVhc2Uoc3RydWN0IGRldmljZSAqZGV2KQotewotCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKLQlzdHJ1Y3QgcnRjX3BsYXRfZGF0YSAqcGRhdGEgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKLQotCWlmIChwZGF0YS0+aXJxID49IDApIHsKLQkJcGRhdGEtPmlycWVuID0gMDsKLQkJZHMxNTUzX3J0Y191cGRhdGVfYWxhcm0ocGRhdGEpOwotCX0KLX0KLQogc3RhdGljIGludCBkczE1NTNfcnRjX2lvY3RsKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IGNtZCwKIAkJCSAgICB1bnNpZ25lZCBsb25nIGFyZykKIHsKQEAgLTI1NCw3ICsyNDMsNiBAQAogCS5zZXRfdGltZQk9IGRzMTU1M19ydGNfc2V0X3RpbWUsCiAJLnJlYWRfYWxhcm0JPSBkczE1NTNfcnRjX3JlYWRfYWxhcm0sCiAJLnNldF9hbGFybQk9IGRzMTU1M19ydGNfc2V0X2FsYXJtLAotCS5yZWxlYXNlCT0gZHMxNTUzX3J0Y19yZWxlYXNlLAogCS5pb2N0bAkJPSBkczE1NTNfcnRjX2lvY3RsLAogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLWRzMTY3Mi5jIGIvZHJpdmVycy9ydGMvcnRjLWRzMTY3Mi5jCmluZGV4IDZmYTQ1NTYuLjM0MWQ3YTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL3J0Yy1kczE2NzIuYworKysgYi9kcml2ZXJzL3J0Yy9ydGMtZHMxNjcyLmMKQEAgLTksMTcgKzksMTAgQEAKICAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9pMmMuaD4KICNpbmNsdWRlIDxsaW51eC9ydGMuaD4KIAotI2RlZmluZSBEUlZfVkVSU0lPTiAiMC4zIgotCi0vKiBBZGRyZXNzZXMgdG8gc2Nhbjogbm9uZS4gVGhpcyBjaGlwIGNhbm5vdCBiZSBkZXRlY3RlZC4gKi8KLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBzaG9ydCBub3JtYWxfaTJjW10gPSB7IEkyQ19DTElFTlRfRU5EIH07Ci0KLS8qIEluc21vZCBwYXJhbWV0ZXJzICovCi1JMkNfQ0xJRU5UX0lOU01PRDsKKyNkZWZpbmUgRFJWX1ZFUlNJT04gIjAuNCIKIAogLyogUmVnaXN0ZXJzICovCiAKQEAgLTI5LDggKzIyLDcgQEAKIAogI2RlZmluZSBEUzE2NzJfUkVHX0NPTlRST0xfRU9TQwkweDgwCiAKLS8qIFByb3RvdHlwZXMgKi8KLXN0YXRpYyBpbnQgZHMxNjcyX3Byb2JlKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlciwgaW50IGFkZHJlc3MsIGludCBraW5kKTsKK3N0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBkczE2NzJfZHJpdmVyOwogCiAvKgogICogSW4gdGhlIHJvdXRpbmVzIHRoYXQgZGVhbCBkaXJlY3RseSB3aXRoIHRoZSBkczE2NzIgaGFyZHdhcmUsIHdlIHVzZQpAQCAtNDQsOCArMzYsOCBAQAogCXVuc2lnbmVkIGNoYXIgYnVmWzRdOwogCiAJc3RydWN0IGkyY19tc2cgbXNnc1tdID0gewotCQl7IGNsaWVudC0+YWRkciwgMCwgMSwgJmFkZHIgfSwJCS8qIHNldHVwIHJlYWQgcHRyICovCi0JCXsgY2xpZW50LT5hZGRyLCBJMkNfTV9SRCwgNCwgYnVmIH0sCS8qIHJlYWQgZGF0ZSAqLworCQl7Y2xpZW50LT5hZGRyLCAwLCAxLCAmYWRkcn0sCS8qIHNldHVwIHJlYWQgcHRyICovCisJCXtjbGllbnQtPmFkZHIsIEkyQ19NX1JELCA0LCBidWZ9LAkvKiByZWFkIGRhdGUgKi8KIAl9OwogCiAJLyogcmVhZCBkYXRlIHJlZ2lzdGVycyAqLwpAQCAtODAsNyArNzIsNyBAQAogCWJ1ZlsyXSA9IChzZWNzICYgMHgwMDAwRkYwMCkgPj4gODsKIAlidWZbM10gPSAoc2VjcyAmIDB4MDBGRjAwMDApID4+IDE2OwogCWJ1Zls0XSA9IChzZWNzICYgMHhGRjAwMDAwMCkgPj4gMjQ7Ci0JYnVmWzVdID0gMDsJLyogc2V0IGNvbnRyb2wgcmVnIHRvIGVuYWJsZSBjb3VudGluZyAqLworCWJ1Zls1XSA9IDA7CQkvKiBzZXQgY29udHJvbCByZWcgdG8gZW5hYmxlIGNvdW50aW5nICovCiAKIAl4ZmVyID0gaTJjX21hc3Rlcl9zZW5kKGNsaWVudCwgYnVmLCA2KTsKIAlpZiAoeGZlciAhPSA2KSB7CkBAIC0xMjcsOCArMTE5LDggQEAKIAl1bnNpZ25lZCBjaGFyIGFkZHIgPSBEUzE2NzJfUkVHX0NPTlRST0w7CiAKIAlzdHJ1Y3QgaTJjX21zZyBtc2dzW10gPSB7Ci0JCXsgY2xpZW50LT5hZGRyLCAwLCAxLCAmYWRkciB9LAkJLyogc2V0dXAgcmVhZCBwdHIgKi8KLQkJeyBjbGllbnQtPmFkZHIsIEkyQ19NX1JELCAxLCBzdGF0dXMgfSwJLyogcmVhZCBjb250cm9sICovCisJCXtjbGllbnQtPmFkZHIsIDAsIDEsICZhZGRyfSwJLyogc2V0dXAgcmVhZCBwdHIgKi8KKwkJe2NsaWVudC0+YWRkciwgSTJDX01fUkQsIDEsIHN0YXR1c30sCS8qIHJlYWQgY29udHJvbCAqLwogCX07CiAKIAkvKiByZWFkIGNvbnRyb2wgcmVnaXN0ZXIgKi8KQEAgLTE0MSw3ICsxMzMsOCBAQAogfQogCiAvKiBmb2xsb3dpbmcgYXJlIHRoZSBzeXNmcyBjYWxsYmFjayBmdW5jdGlvbnMgKi8KLXN0YXRpYyBzc2l6ZV90IHNob3dfY29udHJvbChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCitzdGF0aWMgc3NpemVfdCBzaG93X2NvbnRyb2woc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCSAgICBjaGFyICpidWYpCiB7CiAJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQoZGV2KTsKIAl1OCBjb250cm9sOwpAQCAtMTUyLDg1ICsxNDUsNDYgQEAKIAkJcmV0dXJuIGVycjsKIAogCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVzXG4iLCAoY29udHJvbCAmIERTMTY3Ml9SRUdfQ09OVFJPTF9FT1NDKQotCQkJCQk/ICJkaXNhYmxlZCIgOiAiZW5hYmxlZCIpOworCQkgICAgICAgPyAiZGlzYWJsZWQiIDogImVuYWJsZWQiKTsKIH0KKwogc3RhdGljIERFVklDRV9BVFRSKGNvbnRyb2wsIFNfSVJVR08sIHNob3dfY29udHJvbCwgTlVMTCk7CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcnRjX2NsYXNzX29wcyBkczE2NzJfcnRjX29wcyA9IHsKLQkucmVhZF90aW1lCT0gZHMxNjcyX3J0Y19yZWFkX3RpbWUsCi0JLnNldF90aW1lCT0gZHMxNjcyX3J0Y19zZXRfdGltZSwKLQkuc2V0X21tc3MJPSBkczE2NzJfcnRjX3NldF9tbXNzLAorCS5yZWFkX3RpbWUgPSBkczE2NzJfcnRjX3JlYWRfdGltZSwKKwkuc2V0X3RpbWUgPSBkczE2NzJfcnRjX3NldF90aW1lLAorCS5zZXRfbW1zcyA9IGRzMTY3Ml9ydGNfc2V0X21tc3MsCiB9OwogCi1zdGF0aWMgaW50IGRzMTY3Ml9hdHRhY2goc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyKQorc3RhdGljIGludCBkczE2NzJfcmVtb3ZlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCiB7Ci0JcmV0dXJuIGkyY19wcm9iZShhZGFwdGVyLCAmYWRkcl9kYXRhLCBkczE2NzJfcHJvYmUpOwotfQotCi1zdGF0aWMgaW50IGRzMTY3Ml9kZXRhY2goc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKLXsKLQlpbnQgZXJyOwogCXN0cnVjdCBydGNfZGV2aWNlICpydGMgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKIAotIAlpZiAocnRjKQorCWlmIChydGMpCiAJCXJ0Y19kZXZpY2VfdW5yZWdpc3RlcihydGMpOwogCi0JaWYgKChlcnIgPSBpMmNfZGV0YWNoX2NsaWVudChjbGllbnQpKSkKLQkJcmV0dXJuIGVycjsKLQotCWtmcmVlKGNsaWVudCk7Ci0KIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIGRzMTY3Ml9kcml2ZXIgPSB7Ci0JLmRyaXZlcgkJPSB7Ci0JCS5uYW1lCT0gImRzMTY3MiIsCi0JfSwKLQkuaWQJCT0gSTJDX0RSSVZFUklEX0RTMTY3MiwKLQkuYXR0YWNoX2FkYXB0ZXIgPSAmZHMxNjcyX2F0dGFjaCwKLQkuZGV0YWNoX2NsaWVudAk9ICZkczE2NzJfZGV0YWNoLAotfTsKLQotc3RhdGljIGludCBkczE2NzJfcHJvYmUoc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyLCBpbnQgYWRkcmVzcywgaW50IGtpbmQpCitzdGF0aWMgaW50IGRzMTY3Ml9wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAorCQkJY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKQogewogCWludCBlcnIgPSAwOwogCXU4IGNvbnRyb2w7Ci0Jc3RydWN0IGkyY19jbGllbnQgKmNsaWVudDsKIAlzdHJ1Y3QgcnRjX2RldmljZSAqcnRjOwogCi0JZGV2X2RiZygmYWRhcHRlci0+ZGV2LCAiJXNcbiIsIF9fZnVuY19fKTsKKwlkZXZfZGJnKCZjbGllbnQtPmRldiwgIiVzXG4iLCBfX2Z1bmNfXyk7CiAKLQlpZiAoIWkyY19jaGVja19mdW5jdGlvbmFsaXR5KGFkYXB0ZXIsIEkyQ19GVU5DX0kyQykpIHsKLQkJZXJyID0gLUVOT0RFVjsKLQkJZ290byBleGl0OwotCX0KLQotCWlmICghKGNsaWVudCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBpMmNfY2xpZW50KSwgR0ZQX0tFUk5FTCkpKSB7Ci0JCWVyciA9IC1FTk9NRU07Ci0JCWdvdG8gZXhpdDsKLQl9Ci0KLQkvKiBJMkMgY2xpZW50ICovCi0JY2xpZW50LT5hZGRyID0gYWRkcmVzczsKLQljbGllbnQtPmRyaXZlciA9ICZkczE2NzJfZHJpdmVyOwotCWNsaWVudC0+YWRhcHRlcgk9IGFkYXB0ZXI7Ci0KLQlzdHJsY3B5KGNsaWVudC0+bmFtZSwgZHMxNjcyX2RyaXZlci5kcml2ZXIubmFtZSwgSTJDX05BTUVfU0laRSk7Ci0KLQkvKiBJbmZvcm0gdGhlIGkyYyBsYXllciAqLwotCWlmICgoZXJyID0gaTJjX2F0dGFjaF9jbGllbnQoY2xpZW50KSkpCi0JCWdvdG8gZXhpdF9rZnJlZTsKKwlpZiAoIWkyY19jaGVja19mdW5jdGlvbmFsaXR5KGNsaWVudC0+YWRhcHRlciwgSTJDX0ZVTkNfSTJDKSkKKwkJcmV0dXJuIC1FTk9ERVY7CiAKIAlkZXZfaW5mbygmY2xpZW50LT5kZXYsICJjaGlwIGZvdW5kLCBkcml2ZXIgdmVyc2lvbiAiIERSVl9WRVJTSU9OICJcbiIpOwogCiAJcnRjID0gcnRjX2RldmljZV9yZWdpc3RlcihkczE2NzJfZHJpdmVyLmRyaXZlci5uYW1lLCAmY2xpZW50LT5kZXYsCi0JCQkJJmRzMTY3Ml9ydGNfb3BzLCBUSElTX01PRFVMRSk7CisJCQkJICAmZHMxNjcyX3J0Y19vcHMsIFRISVNfTU9EVUxFKTsKIAotCWlmIChJU19FUlIocnRjKSkgewotCQllcnIgPSBQVFJfRVJSKHJ0Yyk7Ci0JCWdvdG8gZXhpdF9kZXRhY2g7Ci0JfQorCWlmIChJU19FUlIocnRjKSkKKwkJcmV0dXJuIFBUUl9FUlIocnRjKTsKIAogCWkyY19zZXRfY2xpZW50ZGF0YShjbGllbnQsIHJ0Yyk7CiAKQEAgLTI0MSw3ICsxOTUsNyBAQAogCiAJaWYgKGNvbnRyb2wgJiBEUzE2NzJfUkVHX0NPTlRST0xfRU9TQykKIAkJZGV2X3dhcm4oJmNsaWVudC0+ZGV2LCAiT3NjaWxsYXRvciBub3QgZW5hYmxlZC4gIgotCQkJCQkiU2V0IHRpbWUgdG8gZW5hYmxlLlxuIik7CisJCQkgIlNldCB0aW1lIHRvIGVuYWJsZS5cbiIpOwogCiAJLyogUmVnaXN0ZXIgc3lzZnMgaG9va3MgKi8KIAllcnIgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoJmNsaWVudC0+ZGV2LCAmZGV2X2F0dHJfY29udHJvbCk7CkBAIC0yNTAsMTkgKzIwNCwxOSBAQAogCiAJcmV0dXJuIDA7CiAKLWV4aXRfZGV2cmVnOgorIGV4aXRfZGV2cmVnOgogCXJ0Y19kZXZpY2VfdW5yZWdpc3RlcihydGMpOwotCi1leGl0X2RldGFjaDoKLQlpMmNfZGV0YWNoX2NsaWVudChjbGllbnQpOwotCi1leGl0X2tmcmVlOgotCWtmcmVlKGNsaWVudCk7Ci0KLWV4aXQ6CiAJcmV0dXJuIGVycjsKIH0KIAorc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIGRzMTY3Ml9kcml2ZXIgPSB7CisJLmRyaXZlciA9IHsKKwkJICAgLm5hbWUgPSAicnRjLWRzMTY3MiIsCisJCSAgIH0sCisJLnByb2JlID0gJmRzMTY3Ml9wcm9iZSwKKwkucmVtb3ZlID0gJmRzMTY3Ml9yZW1vdmUsCit9OworCiBzdGF0aWMgaW50IF9faW5pdCBkczE2NzJfaW5pdCh2b2lkKQogewogCXJldHVybiBpMmNfYWRkX2RyaXZlcigmZHMxNjcyX2RyaXZlcik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtZHMxNzQyLmMgYi9kcml2ZXJzL3J0Yy9ydGMtZHMxNzQyLmMKaW5kZXggMjRkMzVlZGUuLjhiYzg1MDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL3J0Yy1kczE3NDIuYworKysgYi9kcml2ZXJzL3J0Yy9ydGMtZHMxNzQyLmMKQEAgLTY2LDE3ICs2NiwxNyBAQAogCXZvaWQgX19pb21lbSAqaW9hZGRyID0gcGRhdGEtPmlvYWRkcl9ydGM7CiAJdTggY2VudHVyeTsKIAotCWNlbnR1cnkgPSBCSU4yQkNEKCh0bS0+dG1feWVhciArIDE5MDApIC8gMTAwKTsKKwljZW50dXJ5ID0gYmluMmJjZCgodG0tPnRtX3llYXIgKyAxOTAwKSAvIDEwMCk7CiAKIAl3cml0ZWIoUlRDX1dSSVRFLCBpb2FkZHIgKyBSVENfQ09OVFJPTCk7CiAKLQl3cml0ZWIoQklOMkJDRCh0bS0+dG1feWVhciAlIDEwMCksIGlvYWRkciArIFJUQ19ZRUFSKTsKLQl3cml0ZWIoQklOMkJDRCh0bS0+dG1fbW9uICsgMSksIGlvYWRkciArIFJUQ19NT05USCk7Ci0Jd3JpdGViKEJJTjJCQ0QodG0tPnRtX3dkYXkpICYgUlRDX0RBWV9NQVNLLCBpb2FkZHIgKyBSVENfREFZKTsKLQl3cml0ZWIoQklOMkJDRCh0bS0+dG1fbWRheSksIGlvYWRkciArIFJUQ19EQVRFKTsKLQl3cml0ZWIoQklOMkJDRCh0bS0+dG1faG91ciksIGlvYWRkciArIFJUQ19IT1VSUyk7Ci0Jd3JpdGViKEJJTjJCQ0QodG0tPnRtX21pbiksIGlvYWRkciArIFJUQ19NSU5VVEVTKTsKLQl3cml0ZWIoQklOMkJDRCh0bS0+dG1fc2VjKSAmIFJUQ19TRUNPTkRTX01BU0ssIGlvYWRkciArIFJUQ19TRUNPTkRTKTsKKwl3cml0ZWIoYmluMmJjZCh0bS0+dG1feWVhciAlIDEwMCksIGlvYWRkciArIFJUQ19ZRUFSKTsKKwl3cml0ZWIoYmluMmJjZCh0bS0+dG1fbW9uICsgMSksIGlvYWRkciArIFJUQ19NT05USCk7CisJd3JpdGViKGJpbjJiY2QodG0tPnRtX3dkYXkpICYgUlRDX0RBWV9NQVNLLCBpb2FkZHIgKyBSVENfREFZKTsKKwl3cml0ZWIoYmluMmJjZCh0bS0+dG1fbWRheSksIGlvYWRkciArIFJUQ19EQVRFKTsKKwl3cml0ZWIoYmluMmJjZCh0bS0+dG1faG91ciksIGlvYWRkciArIFJUQ19IT1VSUyk7CisJd3JpdGViKGJpbjJiY2QodG0tPnRtX21pbiksIGlvYWRkciArIFJUQ19NSU5VVEVTKTsKKwl3cml0ZWIoYmluMmJjZCh0bS0+dG1fc2VjKSAmIFJUQ19TRUNPTkRTX01BU0ssIGlvYWRkciArIFJUQ19TRUNPTkRTKTsKIAogCS8qIFJUQ19DRU5UVVJZIGFuZCBSVENfQ09OVFJPTCBzaGFyZSBzYW1lIHJlZ2lzdGVyICovCiAJd3JpdGViKFJUQ19XUklURSB8IChjZW50dXJ5ICYgUlRDX0NFTlRVUllfTUFTSyksIGlvYWRkciArIFJUQ19DRU5UVVJZKTsKQEAgLTEwNiwxNCArMTA2LDE0IEBACiAJeWVhciA9IHJlYWRiKGlvYWRkciArIFJUQ19ZRUFSKTsKIAljZW50dXJ5ID0gcmVhZGIoaW9hZGRyICsgUlRDX0NFTlRVUlkpICYgUlRDX0NFTlRVUllfTUFTSzsKIAl3cml0ZWIoMCwgaW9hZGRyICsgUlRDX0NPTlRST0wpOwotCXRtLT50bV9zZWMgPSBCQ0QyQklOKHNlY29uZCk7Ci0JdG0tPnRtX21pbiA9IEJDRDJCSU4obWludXRlKTsKLQl0bS0+dG1faG91ciA9IEJDRDJCSU4oaG91cik7Ci0JdG0tPnRtX21kYXkgPSBCQ0QyQklOKGRheSk7Ci0JdG0tPnRtX3dkYXkgPSBCQ0QyQklOKHdlZWspOwotCXRtLT50bV9tb24gPSBCQ0QyQklOKG1vbnRoKSAtIDE7CisJdG0tPnRtX3NlYyA9IGJjZDJiaW4oc2Vjb25kKTsKKwl0bS0+dG1fbWluID0gYmNkMmJpbihtaW51dGUpOworCXRtLT50bV9ob3VyID0gYmNkMmJpbihob3VyKTsKKwl0bS0+dG1fbWRheSA9IGJjZDJiaW4oZGF5KTsKKwl0bS0+dG1fd2RheSA9IGJjZDJiaW4od2Vlayk7CisJdG0tPnRtX21vbiA9IGJjZDJiaW4obW9udGgpIC0gMTsKIAkvKiB5ZWFyIGlzIDE5MDAgKyB0bS0+dG1feWVhciAqLwotCXRtLT50bV95ZWFyID0gQkNEMkJJTih5ZWFyKSArIEJDRDJCSU4oY2VudHVyeSkgKiAxMDAgLSAxOTAwOworCXRtLT50bV95ZWFyID0gYmNkMmJpbih5ZWFyKSArIGJjZDJiaW4oY2VudHVyeSkgKiAxMDAgLSAxOTAwOwogCiAJaWYgKHJ0Y192YWxpZF90bSh0bSkgPCAwKSB7CiAJCWRldl9lcnIoZGV2LCAicmV0cmlldmVkIGRhdGUvdGltZSBpcyBub3QgdmFsaWQuXG4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy1kczMyMzQuYyBiL2RyaXZlcnMvcnRjL3J0Yy1kczMyMzQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zN2QxMzFkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ydGMvcnRjLWRzMzIzNC5jCkBAIC0wLDAgKzEsMjkwIEBACisvKiBkcml2ZXJzL3J0Yy9ydGMtZHMzMjM0LmMKKyAqCisgKiBEcml2ZXIgZm9yIERhbGxhcyBTZW1pY29uZHVjdG9yIChEUzMyMzQpIFNQSSBSVEMgd2l0aCBJbnRlZ3JhdGVkIENyeXN0YWwKKyAqIGFuZCBTUkFNLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBNSU1PTWF4IFdpcmVsZXNzIEx0ZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIENoYW5nZWxvZzoKKyAqCisgKiAwNy1NYXktMjAwODogRGVubmlzIEFiZXJpbGxhIDxkZW56enpob21lQHlhaG9vLmNvbT4KKyAqCQktIENyZWF0ZWQgYmFzZWQgb24gdGhlIG1heDY5MDIgY29kZS4gT25seSBpbXBsZW1lbnRzIHRoZQorICoJCSAgZGF0ZS90aW1lIGtlZXBpbmcgZnVuY3Rpb25zOyBubyBTUkFNIHlldC4KKyAqLworCisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvcnRjLmg+CisjaW5jbHVkZSA8bGludXgvc3BpL3NwaS5oPgorI2luY2x1ZGUgPGxpbnV4L2JjZC5oPgorCisjZGVmaW5lIERTMzIzNF9SRUdfU0VDT05EUwkweDAwCisjZGVmaW5lIERTMzIzNF9SRUdfTUlOVVRFUwkweDAxCisjZGVmaW5lIERTMzIzNF9SRUdfSE9VUlMJMHgwMgorI2RlZmluZSBEUzMyMzRfUkVHX0RBWQkJMHgwMworI2RlZmluZSBEUzMyMzRfUkVHX0RBVEUJCTB4MDQKKyNkZWZpbmUgRFMzMjM0X1JFR19NT05USAkweDA1CisjZGVmaW5lIERTMzIzNF9SRUdfWUVBUgkJMHgwNgorI2RlZmluZSBEUzMyMzRfUkVHX0NFTlRVUlkJKDEgPDwgNykgLyogQml0IDcgb2YgdGhlIE1vbnRoIHJlZ2lzdGVyICovCisKKyNkZWZpbmUgRFMzMjM0X1JFR19DT05UUk9MCTB4MEUKKyNkZWZpbmUgRFMzMjM0X1JFR19DT05UX1NUQVQJMHgwRgorCisjdW5kZWYgRFMzMjM0X0RFQlVHCisKK3N0cnVjdCBkczMyMzQgeworCXN0cnVjdCBydGNfZGV2aWNlICpydGM7CisJdTggYnVmWzhdOyAvKiBCdXJzdCByZWFkOiBhZGRyICsgNyByZWdzICovCisJdTggdHhfYnVmWzJdOworCXU4IHJ4X2J1ZlsyXTsKK307CisKK3N0YXRpYyB2b2lkIGRzMzIzNF9zZXRfcmVnKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgY2hhciBhZGRyZXNzLAorCQkJCXVuc2lnbmVkIGNoYXIgZGF0YSkKK3sKKwlzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpID0gdG9fc3BpX2RldmljZShkZXYpOworCXVuc2lnbmVkIGNoYXIgYnVmWzJdOworCisJLyogTVNCIG11c3QgYmUgJzEnIHRvIGluZGljYXRlIHdyaXRlICovCisJYnVmWzBdID0gYWRkcmVzcyB8IDB4ODA7CisJYnVmWzFdID0gZGF0YTsKKworCXNwaV93cml0ZShzcGksIGJ1ZiwgMik7Cit9CisKK3N0YXRpYyBpbnQgZHMzMjM0X2dldF9yZWcoc3RydWN0IGRldmljZSAqZGV2LCB1bnNpZ25lZCBjaGFyIGFkZHJlc3MsCisJCQkJdW5zaWduZWQgY2hhciAqZGF0YSkKK3sKKwlzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpID0gdG9fc3BpX2RldmljZShkZXYpOworCXN0cnVjdCBkczMyMzQgKmNoaXAgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3Qgc3BpX21lc3NhZ2UgbWVzc2FnZTsKKwlzdHJ1Y3Qgc3BpX3RyYW5zZmVyIHhmZXI7CisJaW50IHN0YXR1czsKKworCWlmICghZGF0YSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKiBCdWlsZCBvdXIgc3BpIG1lc3NhZ2UgKi8KKwlzcGlfbWVzc2FnZV9pbml0KCZtZXNzYWdlKTsKKwltZW1zZXQoJnhmZXIsIDAsIHNpemVvZih4ZmVyKSk7CisKKwkvKiBBZGRyZXNzICsgZHVtbXkgdHggYnl0ZSAqLworCXhmZXIubGVuID0gMjsKKwl4ZmVyLnR4X2J1ZiA9IGNoaXAtPnR4X2J1ZjsKKwl4ZmVyLnJ4X2J1ZiA9IGNoaXAtPnJ4X2J1ZjsKKworCWNoaXAtPnR4X2J1ZlswXSA9IGFkZHJlc3M7CisJY2hpcC0+dHhfYnVmWzFdID0gMHhmZjsKKworCXNwaV9tZXNzYWdlX2FkZF90YWlsKCZ4ZmVyLCAmbWVzc2FnZSk7CisKKwkvKiBkbyB0aGUgaS9vICovCisJc3RhdHVzID0gc3BpX3N5bmMoc3BpLCAmbWVzc2FnZSk7CisJaWYgKHN0YXR1cyA9PSAwKQorCQlzdGF0dXMgPSBtZXNzYWdlLnN0YXR1czsKKwllbHNlCisJCXJldHVybiBzdGF0dXM7CisKKwkqZGF0YSA9IGNoaXAtPnJ4X2J1ZlsxXTsKKworCXJldHVybiBzdGF0dXM7Cit9CisKK3N0YXRpYyBpbnQgZHMzMjM0X2dldF9kYXRldGltZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBydGNfdGltZSAqZHQpCit7CisJc3RydWN0IHNwaV9kZXZpY2UgKnNwaSA9IHRvX3NwaV9kZXZpY2UoZGV2KTsKKwlzdHJ1Y3QgZHMzMjM0ICpjaGlwID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IHNwaV9tZXNzYWdlIG1lc3NhZ2U7CisJc3RydWN0IHNwaV90cmFuc2ZlciB4ZmVyOworCWludCBzdGF0dXM7CisKKwkvKiBidWlsZCB0aGUgbWVzc2FnZSAqLworCXNwaV9tZXNzYWdlX2luaXQoJm1lc3NhZ2UpOworCW1lbXNldCgmeGZlciwgMCwgc2l6ZW9mKHhmZXIpKTsKKwl4ZmVyLmxlbiA9IDEgKyA3OwkvKiBBZGRyICsgNyByZWdpc3RlcnMgKi8KKwl4ZmVyLnR4X2J1ZiA9IGNoaXAtPmJ1ZjsKKwl4ZmVyLnJ4X2J1ZiA9IGNoaXAtPmJ1ZjsKKwljaGlwLT5idWZbMF0gPSAweDAwOwkvKiBTdGFydCBhZGRyZXNzICovCisJc3BpX21lc3NhZ2VfYWRkX3RhaWwoJnhmZXIsICZtZXNzYWdlKTsKKworCS8qIGRvIHRoZSBpL28gKi8KKwlzdGF0dXMgPSBzcGlfc3luYyhzcGksICZtZXNzYWdlKTsKKwlpZiAoc3RhdHVzID09IDApCisJCXN0YXR1cyA9IG1lc3NhZ2Uuc3RhdHVzOworCWVsc2UKKwkJcmV0dXJuIHN0YXR1czsKKworCS8qIFNlY29uZHMsIE1pbnV0ZXMsIEhvdXJzLCBEYXksIERhdGUsIE1vbnRoLCBZZWFyICovCisJZHQtPnRtX3NlYwk9IGJjZDJiaW4oY2hpcC0+YnVmWzFdKTsKKwlkdC0+dG1fbWluCT0gYmNkMmJpbihjaGlwLT5idWZbMl0pOworCWR0LT50bV9ob3VyCT0gYmNkMmJpbihjaGlwLT5idWZbM10gJiAweDNmKTsKKwlkdC0+dG1fd2RheQk9IGJjZDJiaW4oY2hpcC0+YnVmWzRdKSAtIDE7IC8qIDAgPSBTdW4gKi8KKwlkdC0+dG1fbWRheQk9IGJjZDJiaW4oY2hpcC0+YnVmWzVdKTsKKwlkdC0+dG1fbW9uCT0gYmNkMmJpbihjaGlwLT5idWZbNl0gJiAweDFmKSAtIDE7IC8qIDAgPSBKYW4gKi8KKwlkdC0+dG1feWVhciAJPSBiY2QyYmluKGNoaXAtPmJ1Zls3XSAmIDB4ZmYpICsgMTAwOyAvKiBBc3N1bWUgMjBZWSAqLworCisjaWZkZWYgRFMzMjM0X0RFQlVHCisJZGV2X2RiZyhkZXYsICJcbiVzIDogUmVhZCBSVEMgdmFsdWVzXG4iLCBfX2Z1bmNfXyk7CisJZGV2X2RiZyhkZXYsICJ0bV9ob3VyOiAlaVxuIiwgZHQtPnRtX2hvdXIpOworCWRldl9kYmcoZGV2LCAidG1fbWluIDogJWlcbiIsIGR0LT50bV9taW4pOworCWRldl9kYmcoZGV2LCAidG1fc2VjIDogJWlcbiIsIGR0LT50bV9zZWMpOworCWRldl9kYmcoZGV2LCAidG1fd2RheTogJWlcbiIsIGR0LT50bV93ZGF5KTsKKwlkZXZfZGJnKGRldiwgInRtX21kYXk6ICVpXG4iLCBkdC0+dG1fbWRheSk7CisJZGV2X2RiZyhkZXYsICJ0bV9tb24gOiAlaVxuIiwgZHQtPnRtX21vbik7CisJZGV2X2RiZyhkZXYsICJ0bV95ZWFyOiAlaVxuIiwgZHQtPnRtX3llYXIpOworI2VuZGlmCisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBkczMyMzRfc2V0X2RhdGV0aW1lKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHJ0Y190aW1lICpkdCkKK3sKKyNpZmRlZiBEUzMyMzRfREVCVUcKKwlkZXZfZGJnKGRldiwgIlxuJXMgOiBTZXR0aW5nIFJUQyB2YWx1ZXNcbiIsIF9fZnVuY19fKTsKKwlkZXZfZGJnKGRldiwgInRtX3NlYyA6ICVpXG4iLCBkdC0+dG1fc2VjKTsKKwlkZXZfZGJnKGRldiwgInRtX21pbiA6ICVpXG4iLCBkdC0+dG1fbWluKTsKKwlkZXZfZGJnKGRldiwgInRtX2hvdXI6ICVpXG4iLCBkdC0+dG1faG91cik7CisJZGV2X2RiZyhkZXYsICJ0bV93ZGF5OiAlaVxuIiwgZHQtPnRtX3dkYXkpOworCWRldl9kYmcoZGV2LCAidG1fbWRheTogJWlcbiIsIGR0LT50bV9tZGF5KTsKKwlkZXZfZGJnKGRldiwgInRtX21vbiA6ICVpXG4iLCBkdC0+dG1fbW9uKTsKKwlkZXZfZGJnKGRldiwgInRtX3llYXI6ICVpXG4iLCBkdC0+dG1feWVhcik7CisjZW5kaWYKKworCWRzMzIzNF9zZXRfcmVnKGRldiwgRFMzMjM0X1JFR19TRUNPTkRTLCBiaW4yYmNkKGR0LT50bV9zZWMpKTsKKwlkczMyMzRfc2V0X3JlZyhkZXYsIERTMzIzNF9SRUdfTUlOVVRFUywgYmluMmJjZChkdC0+dG1fbWluKSk7CisJZHMzMjM0X3NldF9yZWcoZGV2LCBEUzMyMzRfUkVHX0hPVVJTLCBiaW4yYmNkKGR0LT50bV9ob3VyKSAmIDB4M2YpOworCisJLyogMCA9IFN1biAqLworCWRzMzIzNF9zZXRfcmVnKGRldiwgRFMzMjM0X1JFR19EQVksIGJpbjJiY2QoZHQtPnRtX3dkYXkgKyAxKSk7CisJZHMzMjM0X3NldF9yZWcoZGV2LCBEUzMyMzRfUkVHX0RBVEUsIGJpbjJiY2QoZHQtPnRtX21kYXkpKTsKKworCS8qIDAgPSBKYW4gKi8KKwlkczMyMzRfc2V0X3JlZyhkZXYsIERTMzIzNF9SRUdfTU9OVEgsIGJpbjJiY2QoZHQtPnRtX21vbiArIDEpKTsKKworCS8qIEFzc3VtZSAyMFlZIGFsdGhvdWdoIHdlIGp1c3Qgd2FudCB0byBtYWtlIHN1cmUgbm90IHRvIGdvIG5lZ2F0aXZlLiAqLworCWlmIChkdC0+dG1feWVhciA+IDEwMCkKKwkJZHQtPnRtX3llYXIgLT0gMTAwOworCisJZHMzMjM0X3NldF9yZWcoZGV2LCBEUzMyMzRfUkVHX1lFQVIsIGJpbjJiY2QoZHQtPnRtX3llYXIpKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGRzMzIzNF9yZWFkX3RpbWUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgcnRjX3RpbWUgKnRtKQoreworCXJldHVybiBkczMyMzRfZ2V0X2RhdGV0aW1lKGRldiwgdG0pOworfQorCitzdGF0aWMgaW50IGRzMzIzNF9zZXRfdGltZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBydGNfdGltZSAqdG0pCit7CisJcmV0dXJuIGRzMzIzNF9zZXRfZGF0ZXRpbWUoZGV2LCB0bSk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcnRjX2NsYXNzX29wcyBkczMyMzRfcnRjX29wcyA9IHsKKwkucmVhZF90aW1lCT0gZHMzMjM0X3JlYWRfdGltZSwKKwkuc2V0X3RpbWUJPSBkczMyMzRfc2V0X3RpbWUsCit9OworCitzdGF0aWMgaW50IGRzMzIzNF9wcm9iZShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKQoreworCXN0cnVjdCBydGNfZGV2aWNlICpydGM7CisJdW5zaWduZWQgY2hhciB0bXA7CisJc3RydWN0IGRzMzIzNCAqY2hpcDsKKwlpbnQgcmVzOworCisJcnRjID0gcnRjX2RldmljZV9yZWdpc3RlcigiZHMzMjM0IiwKKwkJCQkmc3BpLT5kZXYsICZkczMyMzRfcnRjX29wcywgVEhJU19NT0RVTEUpOworCWlmIChJU19FUlIocnRjKSkKKwkJcmV0dXJuIFBUUl9FUlIocnRjKTsKKworCXNwaS0+bW9kZSA9IFNQSV9NT0RFXzM7CisJc3BpLT5iaXRzX3Blcl93b3JkID0gODsKKwlzcGlfc2V0dXAoc3BpKTsKKworCWNoaXAgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgZHMzMjM0KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFjaGlwKSB7CisJCXJ0Y19kZXZpY2VfdW5yZWdpc3RlcihydGMpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJY2hpcC0+cnRjID0gcnRjOworCWRldl9zZXRfZHJ2ZGF0YSgmc3BpLT5kZXYsIGNoaXApOworCisJcmVzID0gZHMzMjM0X2dldF9yZWcoJnNwaS0+ZGV2LCBEUzMyMzRfUkVHX1NFQ09ORFMsICZ0bXApOworCWlmIChyZXMpIHsKKwkJcnRjX2RldmljZV91bnJlZ2lzdGVyKHJ0Yyk7CisJCXJldHVybiByZXM7CisJfQorCisJLyogQ29udHJvbCBzZXR0aW5ncworCSAqCisJICogQ09OVFJPTF9SRUcKKwkgKiBCSVQgNwk2CTUJNAkzCTIJMQkwCisJICogICAgIEVPU0MJQkJTUVcJQ09OVglSUzIJUlMxCUlOVENOCUEySUUJQTFJRQorCSAqCisJICogICAgIDAJMAkwCTEJMQkxCTAJMAorCSAqCisJICogQ09OVFJPTF9TVEFUX1JFRworCSAqIEJJVCA3CTYJNQk0CTMJMgkxCTAKKwkgKiAgICAgT1NGCUJCMzJrSHoJQ1JBVEUxCUNSQVRFMAlFTjMya0h6CUJTWQlBMkYJQTFGCisJICoKKwkgKiAgICAgMQkwCTAJMAkxCTAJMAkwCisJICovCisJZHMzMjM0X2dldF9yZWcoJnNwaS0+ZGV2LCBEUzMyMzRfUkVHX0NPTlRST0wsICZ0bXApOworCWRzMzIzNF9zZXRfcmVnKCZzcGktPmRldiwgRFMzMjM0X1JFR19DT05UUk9MLCB0bXAgJiAweDFjKTsKKworCWRzMzIzNF9nZXRfcmVnKCZzcGktPmRldiwgRFMzMjM0X1JFR19DT05UX1NUQVQsICZ0bXApOworCWRzMzIzNF9zZXRfcmVnKCZzcGktPmRldiwgRFMzMjM0X1JFR19DT05UX1NUQVQsIHRtcCAmIDB4ODgpOworCisJLyogUHJpbnQgb3VyIHNldHRpbmdzICovCisJZHMzMjM0X2dldF9yZWcoJnNwaS0+ZGV2LCBEUzMyMzRfUkVHX0NPTlRST0wsICZ0bXApOworCWRldl9pbmZvKCZzcGktPmRldiwgIkNvbnRyb2wgUmVnOiAweCUwMnhcbiIsIHRtcCk7CisKKwlkczMyMzRfZ2V0X3JlZygmc3BpLT5kZXYsIERTMzIzNF9SRUdfQ09OVF9TVEFULCAmdG1wKTsKKwlkZXZfaW5mbygmc3BpLT5kZXYsICJDdHJsL1N0YXQgUmVnOiAweCUwMnhcbiIsIHRtcCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBfX2V4aXQgZHMzMjM0X3JlbW92ZShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKQoreworCXN0cnVjdCBkczMyMzQgKmNoaXAgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShzcGkpOworCXN0cnVjdCBydGNfZGV2aWNlICpydGMgPSBjaGlwLT5ydGM7CisKKwlpZiAocnRjKQorCQlydGNfZGV2aWNlX3VucmVnaXN0ZXIocnRjKTsKKworCWtmcmVlKGNoaXApOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc3BpX2RyaXZlciBkczMyMzRfZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCS5uYW1lCSA9ICJkczMyMzQiLAorCQkuYnVzCT0gJnNwaV9idXNfdHlwZSwKKwkJLm93bmVyCT0gVEhJU19NT0RVTEUsCisJfSwKKwkucHJvYmUJID0gZHMzMjM0X3Byb2JlLAorCS5yZW1vdmUgPSBfX2RldmV4aXRfcChkczMyMzRfcmVtb3ZlKSwKK307CisKK3N0YXRpYyBfX2luaXQgaW50IGRzMzIzNF9pbml0KHZvaWQpCit7CisJcHJpbnRrKEtFUk5fSU5GTyAiRFMzMjM0IFNQSSBSVEMgRHJpdmVyXG4iKTsKKwlyZXR1cm4gc3BpX3JlZ2lzdGVyX2RyaXZlcigmZHMzMjM0X2RyaXZlcik7Cit9Cittb2R1bGVfaW5pdChkczMyMzRfaW5pdCk7CisKK3N0YXRpYyBfX2V4aXQgdm9pZCBkczMyMzRfZXhpdCh2b2lkKQoreworCXNwaV91bnJlZ2lzdGVyX2RyaXZlcigmZHMzMjM0X2RyaXZlcik7Cit9Cittb2R1bGVfZXhpdChkczMyMzRfZXhpdCk7CisKK01PRFVMRV9ERVNDUklQVElPTigiRFMzMjM0IFNQSSBSVEMgZHJpdmVyIik7CitNT0RVTEVfQVVUSE9SKCJEZW5uaXMgQWJlcmlsbGEgPGRlbnp6emhvbWVAeWFob28uY29tPiIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLWZtMzEzMC5jIGIvZHJpdmVycy9ydGMvcnRjLWZtMzEzMC5jCmluZGV4IGFiZmRmY2IuLjNhN2JlMTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL3J0Yy1mbTMxMzAuYworKysgYi9kcml2ZXJzL3J0Yy9ydGMtZm0zMTMwLmMKQEAgLTEzMSwxNyArMTMxLDE3IEBACiAJCQlmbTMxMzAtPnJlZ3NbMHhjXSwgZm0zMTMwLT5yZWdzWzB4ZF0sCiAJCQlmbTMxMzAtPnJlZ3NbMHhlXSk7CiAKLQl0LT50bV9zZWMgPSBCQ0QyQklOKGZtMzEzMC0+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+dG1feWVhciAtIDEwMCk7CiAKLQlyZWdzW0lTTDEyMDhfUkVHX0RXXSA9IEJJTjJCQ0QodG0tPnRtX3dkYXkgJiA3KTsKKwlyZWdzW0lTTDEyMDhfUkVHX0RXXSA9IGJpbjJiY2QodG0tPnRtX3dkYXkgJiA3KTsKIAogCXNyID0gaXNsMTIwOF9pMmNfZ2V0X3NyKGNsaWVudCk7CiAJaWYgKHNyIDwgMCkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLW00MXQ4MC5jIGIvZHJpdmVycy9ydGMvcnRjLW00MXQ4MC5jCmluZGV4IDI0YmMxNjguLjg5M2Y3ZGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL3J0Yy1tNDF0ODAuYworKysgYi9kcml2ZXJzL3J0Yy9ydGMtbTQxdDgwLmMKQEAgLTU2LDIxICs1NiwyNyBAQAogI2RlZmluZSBNNDFUODBfQUxIT1VSX0hUCSgxIDw8IDYpCS8qIEhUOiBIYWx0IFVwZGF0ZSBCaXQgKi8KICNkZWZpbmUgTTQxVDgwX0ZMQUdTX0FGCQkoMSA8PCA2KQkvKiBBRjogQWxhcm0gRmxhZyBCaXQgKi8KICNkZWZpbmUgTTQxVDgwX0ZMQUdTX0JBVFRfTE9XCSgxIDw8IDQpCS8qIEJMOiBCYXR0ZXJ5IExvdyBCaXQgKi8KKyNkZWZpbmUgTTQxVDgwX1dBVENIRE9HX1JCMgkoMSA8PCA3KQkvKiBSQjogV2F0Y2hkb2cgcmVzb2x1dGlvbiAqLworI2RlZmluZSBNNDFUODBfV0FUQ0hET0dfUkIxCSgxIDw8IDEpCS8qIFJCOiBXYXRjaGRvZyByZXNvbHV0aW9uICovCisjZGVmaW5lIE00MVQ4MF9XQVRDSERPR19SQjAJKDEgPDwgMCkJLyogUkI6IFdhdGNoZG9nIHJlc29sdXRpb24gKi8KIAotI2RlZmluZSBNNDFUODBfRkVBVFVSRV9IVAkoMSA8PCAwKQotI2RlZmluZSBNNDFUODBfRkVBVFVSRV9CTAkoMSA8PCAxKQorI2RlZmluZSBNNDFUODBfRkVBVFVSRV9IVAkoMSA8PCAwKQkvKiBIYWx0IGZlYXR1cmUgKi8KKyNkZWZpbmUgTTQxVDgwX0ZFQVRVUkVfQkwJKDEgPDwgMSkJLyogQmF0dGVyeSBsb3cgaW5kaWNhdG9yICovCisjZGVmaW5lIE00MVQ4MF9GRUFUVVJFX1NRCSgxIDw8IDIpCS8qIFNxdWFyZXdhdmUgZmVhdHVyZSAqLworI2RlZmluZSBNNDFUODBfRkVBVFVSRV9XRAkoMSA8PCAzKQkvKiBFeHRyYSB3YXRjaGRvZyByZXNvbHV0aW9uICovCiAKICNkZWZpbmUgRFJWX1ZFUlNJT04gIjAuMDUiCiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCBtNDF0ODBfaWRbXSA9IHsKLQl7ICJtNDF0ODAiLCAwIH0sCi0JeyAibTQxdDgxIiwgTTQxVDgwX0ZFQVRVUkVfSFQgfSwKLQl7ICJtNDF0ODFzIiwgTTQxVDgwX0ZFQVRVUkVfSFQgfCBNNDFUODBfRkVBVFVSRV9CTCB9LAotCXsgIm00MXQ4MiIsIE00MVQ4MF9GRUFUVVJFX0hUIHwgTTQxVDgwX0ZFQVRVUkVfQkwgfSwKLQl7ICJtNDF0ODMiLCBNNDFUODBfRkVBVFVSRV9IVCB8IE00MVQ4MF9GRUFUVVJFX0JMIH0sCi0JeyAibTQxc3Q4NCIsIE00MVQ4MF9GRUFUVVJFX0hUIHwgTTQxVDgwX0ZFQVRVUkVfQkwgfSwKLQl7ICJtNDFzdDg1IiwgTTQxVDgwX0ZFQVRVUkVfSFQgfCBNNDFUODBfRkVBVFVSRV9CTCB9LAotCXsgIm00MXN0ODciLCBNNDFUODBfRkVBVFVSRV9IVCB8IE00MVQ4MF9GRUFUVVJFX0JMIH0sCisJeyAibTQxdDY1IiwgTTQxVDgwX0ZFQVRVUkVfSFQgfCBNNDFUODBfRkVBVFVSRV9XRCB9LAorCXsgIm00MXQ4MCIsIE00MVQ4MF9GRUFUVVJFX1NRIH0sCisJeyAibTQxdDgxIiwgTTQxVDgwX0ZFQVRVUkVfSFQgfCBNNDFUODBfRkVBVFVSRV9TUX0sCisJeyAibTQxdDgxcyIsIE00MVQ4MF9GRUFUVVJFX0hUIHwgTTQxVDgwX0ZFQVRVUkVfQkwgfCBNNDFUODBfRkVBVFVSRV9TUSB9LAorCXsgIm00MXQ4MiIsIE00MVQ4MF9GRUFUVVJFX0hUIHwgTTQxVDgwX0ZFQVRVUkVfQkwgfCBNNDFUODBfRkVBVFVSRV9TUSB9LAorCXsgIm00MXQ4MyIsIE00MVQ4MF9GRUFUVVJFX0hUIHwgTTQxVDgwX0ZFQVRVUkVfQkwgfCBNNDFUODBfRkVBVFVSRV9TUSB9LAorCXsgIm00MXN0ODQiLCBNNDFUODBfRkVBVFVSRV9IVCB8IE00MVQ4MF9GRUFUVVJFX0JMIHwgTTQxVDgwX0ZFQVRVUkVfU1EgfSwKKwl7ICJtNDFzdDg1IiwgTTQxVDgwX0ZFQVRVUkVfSFQgfCBNNDFUODBfRkVBVFVSRV9CTCB8IE00MVQ4MF9GRUFUVVJFX1NRIH0sCisJeyAibTQxc3Q4NyIsIE00MVQ4MF9GRUFUVVJFX0hUIHwgTTQxVDgwX0ZFQVRVUkVfQkwgfCBNNDFUODBfRkVBVFVSRV9TUSB9LAogCXsgfQogfTsKIE1PRFVMRV9ERVZJQ0VfVEFCTEUoaTJjLCBtNDF0ODBfaWQpOwpAQCAtMTA0LDE1ICsxMTAsMTUgQEAKIAkJcmV0dXJuIC1FSU87CiAJfQogCi0JdG0tPnRtX3NlYyA9IEJDRDJCSU4oYnVmW000MVQ4MF9SRUdfU0VDXSAmIDB4N2YpOwotCXRtLT50bV9taW4gPSBCQ0QyQklOKGJ1ZltNNDFUODBfUkVHX01JTl0gJiAweDdmKTsKLQl0bS0+dG1faG91ciA9IEJDRDJCSU4oYnVmW000MVQ4MF9SRUdfSE9VUl0gJiAweDNmKTsKLQl0bS0+dG1fbWRheSA9IEJDRDJCSU4oYnVmW000MVQ4MF9SRUdfREFZXSAmIDB4M2YpOworCXRtLT50bV9zZWMgPSBiY2QyYmluKGJ1ZltNNDFUODBfUkVHX1NFQ10gJiAweDdmKTsKKwl0bS0+dG1fbWluID0gYmNkMmJpbihidWZbTTQxVDgwX1JFR19NSU5dICYgMHg3Zik7CisJdG0tPnRtX2hvdXIgPSBiY2QyYmluKGJ1ZltNNDFUODBfUkVHX0hPVVJdICYgMHgzZik7CisJdG0tPnRtX21kYXkgPSBiY2QyYmluKGJ1ZltNNDFUODBfUkVHX0RBWV0gJiAweDNmKTsKIAl0bS0+dG1fd2RheSA9IGJ1ZltNNDFUODBfUkVHX1dEQVldICYgMHgwNzsKLQl0bS0+dG1fbW9uID0gQkNEMkJJTihidWZbTTQxVDgwX1JFR19NT05dICYgMHgxZikgLSAxOworCXRtLT50bV9tb24gPSBiY2QyYmluKGJ1ZltNNDFUODBfUkVHX01PTl0gJiAweDFmKSAtIDE7CiAKIAkvKiBhc3N1bWUgMjBZWSBub3QgMTlZWSwgYW5kIGlnbm9yZSB0aGUgQ2VudHVyeSBCaXQgKi8KLQl0bS0+dG1feWVhciA9IEJDRDJCSU4oYnVmW000MVQ4MF9SRUdfWUVBUl0pICsgMTAwOworCXRtLT50bV95ZWFyID0gYmNkMmJpbihidWZbTTQxVDgwX1JFR19ZRUFSXSkgKyAxMDA7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTE1NSwxOSArMTYxLDE5IEBACiAJLyogTWVyZ2UgdGltZS1kYXRhIGFuZCByZWdpc3RlciBmbGFncyBpbnRvIGJ1ZlswLi43XSAqLwogCWJ1ZltNNDFUODBfUkVHX1NTRUNdID0gMDsKIAlidWZbTTQxVDgwX1JFR19TRUNdID0KLQkJQklOMkJDRCh0bS0+dG1fc2VjKSB8IChidWZbTTQxVDgwX1JFR19TRUNdICYgfjB4N2YpOworCQliaW4yYmNkKHRtLT50bV9zZWMpIHwgKGJ1ZltNNDFUODBfUkVHX1NFQ10gJiB+MHg3Zik7CiAJYnVmW000MVQ4MF9SRUdfTUlOXSA9Ci0JCUJJTjJCQ0QodG0tPnRtX21pbikgfCAoYnVmW000MVQ4MF9SRUdfTUlOXSAmIH4weDdmKTsKKwkJYmluMmJjZCh0bS0+dG1fbWluKSB8IChidWZbTTQxVDgwX1JFR19NSU5dICYgfjB4N2YpOwogCWJ1ZltNNDFUODBfUkVHX0hPVVJdID0KLQkJQklOMkJDRCh0bS0+dG1faG91cikgfCAoYnVmW000MVQ4MF9SRUdfSE9VUl0gJiB+MHgzZikgOworCQliaW4yYmNkKHRtLT50bV9ob3VyKSB8IChidWZbTTQxVDgwX1JFR19IT1VSXSAmIH4weDNmKSA7CiAJYnVmW000MVQ4MF9SRUdfV0RBWV0gPQogCQkodG0tPnRtX3dkYXkgJiAweDA3KSB8IChidWZbTTQxVDgwX1JFR19XREFZXSAmIH4weDA3KTsKIAlidWZbTTQxVDgwX1JFR19EQVldID0KLQkJQklOMkJDRCh0bS0+dG1fbWRheSkgfCAoYnVmW000MVQ4MF9SRUdfREFZXSAmIH4weDNmKTsKKwkJYmluMmJjZCh0bS0+dG1fbWRheSkgfCAoYnVmW000MVQ4MF9SRUdfREFZXSAmIH4weDNmKTsKIAlidWZbTTQxVDgwX1JFR19NT05dID0KLQkJQklOMkJDRCh0bS0+dG1fbW9uICsgMSkgfCAoYnVmW000MVQ4MF9SRUdfTU9OXSAmIH4weDFmKTsKKwkJYmluMmJjZCh0bS0+dG1fbW9uICsgMSkgfCAoYnVmW000MVQ4MF9SRUdfTU9OXSAmIH4weDFmKTsKIAkvKiBhc3N1bWUgMjBZWSBub3QgMTlZWSAqLwotCWJ1ZltNNDFUODBfUkVHX1lFQVJdID0gQklOMkJDRCh0bS0+dG1feWVhciAlIDEwMCk7CisJYnVmW000MVQ4MF9SRUdfWUVBUl0gPSBiaW4yYmNkKHRtLT50bV95ZWFyICUgMTAwKTsKIAogCWlmIChpMmNfdHJhbnNmZXIoY2xpZW50LT5hZGFwdGVyLCBtc2dzLCAxKSAhPSAxKSB7CiAJCWRldl9lcnIoJmNsaWVudC0+ZGV2LCAid3JpdGUgZXJyb3JcbiIpOwpAQCAtMjgyLDE1ICsyODgsMTUgQEAKIAogCXdidWZbMF0gPSBNNDFUODBfUkVHX0FMQVJNX01PTjsgLyogb2Zmc2V0IGludG8gcnRjJ3MgcmVncyAqLwogCXJlZ1tNNDFUODBfUkVHX0FMQVJNX1NFQ10gfD0gdC0+dGltZS50bV9zZWMgPj0gMCA/Ci0JCUJJTjJCQ0QodC0+dGltZS50bV9zZWMpIDogMHg4MDsKKwkJYmluMmJjZCh0LT50aW1lLnRtX3NlYykgOiAweDgwOwogCXJlZ1tNNDFUODBfUkVHX0FMQVJNX01JTl0gfD0gdC0+dGltZS50bV9taW4gPj0gMCA/Ci0JCUJJTjJCQ0QodC0+dGltZS50bV9taW4pIDogMHg4MDsKKwkJYmluMmJjZCh0LT50aW1lLnRtX21pbikgOiAweDgwOwogCXJlZ1tNNDFUODBfUkVHX0FMQVJNX0hPVVJdIHw9IHQtPnRpbWUudG1faG91ciA+PSAwID8KLQkJQklOMkJDRCh0LT50aW1lLnRtX2hvdXIpIDogMHg4MDsKKwkJYmluMmJjZCh0LT50aW1lLnRtX2hvdXIpIDogMHg4MDsKIAlyZWdbTTQxVDgwX1JFR19BTEFSTV9EQVldIHw9IHQtPnRpbWUudG1fbWRheSA+PSAwID8KLQkJQklOMkJDRCh0LT50aW1lLnRtX21kYXkpIDogMHg4MDsKKwkJYmluMmJjZCh0LT50aW1lLnRtX21kYXkpIDogMHg4MDsKIAlpZiAodC0+dGltZS50bV9tb24gPj0gMCkKLQkJcmVnW000MVQ4MF9SRUdfQUxBUk1fTU9OXSB8PSBCSU4yQkNEKHQtPnRpbWUudG1fbW9uICsgMSk7CisJCXJlZ1tNNDFUODBfUkVHX0FMQVJNX01PTl0gfD0gYmluMmJjZCh0LT50aW1lLnRtX21vbiArIDEpOwogCWVsc2UKIAkJcmVnW000MVQ4MF9SRUdfQUxBUk1fREFZXSB8PSAweDQwOwogCkBAIC0zNDEsMTUgKzM0NywxNSBAQAogCXQtPnRpbWUudG1fbWRheSA9IC0xOwogCXQtPnRpbWUudG1fbW9uID0gLTE7CiAJaWYgKCEocmVnW000MVQ4MF9SRUdfQUxBUk1fU0VDXSAmIDB4ODApKQotCQl0LT50aW1lLnRtX3NlYyA9IEJDRDJCSU4ocmVnW000MVQ4MF9SRUdfQUxBUk1fU0VDXSAmIDB4N2YpOworCQl0LT50aW1lLnRtX3NlYyA9IGJjZDJiaW4ocmVnW000MVQ4MF9SRUdfQUxBUk1fU0VDXSAmIDB4N2YpOwogCWlmICghKHJlZ1tNNDFUODBfUkVHX0FMQVJNX01JTl0gJiAweDgwKSkKLQkJdC0+dGltZS50bV9taW4gPSBCQ0QyQklOKHJlZ1tNNDFUODBfUkVHX0FMQVJNX01JTl0gJiAweDdmKTsKKwkJdC0+dGltZS50bV9taW4gPSBiY2QyYmluKHJlZ1tNNDFUODBfUkVHX0FMQVJNX01JTl0gJiAweDdmKTsKIAlpZiAoIShyZWdbTTQxVDgwX1JFR19BTEFSTV9IT1VSXSAmIDB4ODApKQotCQl0LT50aW1lLnRtX2hvdXIgPSBCQ0QyQklOKHJlZ1tNNDFUODBfUkVHX0FMQVJNX0hPVVJdICYgMHgzZik7CisJCXQtPnRpbWUudG1faG91ciA9IGJjZDJiaW4ocmVnW000MVQ4MF9SRUdfQUxBUk1fSE9VUl0gJiAweDNmKTsKIAlpZiAoIShyZWdbTTQxVDgwX1JFR19BTEFSTV9EQVldICYgMHg4MCkpCi0JCXQtPnRpbWUudG1fbWRheSA9IEJDRDJCSU4ocmVnW000MVQ4MF9SRUdfQUxBUk1fREFZXSAmIDB4M2YpOworCQl0LT50aW1lLnRtX21kYXkgPSBiY2QyYmluKHJlZ1tNNDFUODBfUkVHX0FMQVJNX0RBWV0gJiAweDNmKTsKIAlpZiAoIShyZWdbTTQxVDgwX1JFR19BTEFSTV9EQVldICYgMHg0MCkpCi0JCXQtPnRpbWUudG1fbW9uID0gQkNEMkJJTihyZWdbTTQxVDgwX1JFR19BTEFSTV9NT05dICYgMHgxZikgLSAxOworCQl0LT50aW1lLnRtX21vbiA9IGJjZDJiaW4ocmVnW000MVQ4MF9SRUdfQUxBUk1fTU9OXSAmIDB4MWYpIC0gMTsKIAl0LT50aW1lLnRtX3llYXIgPSAtMTsKIAl0LT50aW1lLnRtX3dkYXkgPSAtMTsKIAl0LT50aW1lLnRtX3lkYXkgPSAtMTsKQEAgLTM4Niw4ICszOTIsMTIgQEAKIAkJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQogewogCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB0b19pMmNfY2xpZW50KGRldik7CisJc3RydWN0IG00MXQ4MF9kYXRhICpjbGllbnRkYXRhID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CiAJaW50IHZhbDsKIAorCWlmICghKGNsaWVudGRhdGEtPmZlYXR1cmVzICYgTTQxVDgwX0ZFQVRVUkVfU1EpKQorCQlyZXR1cm4gLUVJTlZBTDsKKwogCXZhbCA9IGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsIE00MVQ4MF9SRUdfU1FXKTsKIAlpZiAodmFsIDwgMCkKIAkJcmV0dXJuIC1FSU87CkBAIC00MDgsOSArNDE4LDEzIEBACiAJCQkJY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCiB7CiAJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQoZGV2KTsKKwlzdHJ1Y3QgbTQxdDgwX2RhdGEgKmNsaWVudGRhdGEgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKIAlpbnQgYWxtb24sIHNxdzsKIAlpbnQgdmFsID0gc2ltcGxlX3N0cnRvdWwoYnVmLCBOVUxMLCAwKTsKIAorCWlmICghKGNsaWVudGRhdGEtPmZlYXR1cmVzICYgTTQxVDgwX0ZFQVRVUkVfU1EpKQorCQlyZXR1cm4gLUVJTlZBTDsKKwogCWlmICh2YWwpIHsKIAkJaWYgKCFpc19wb3dlcl9vZl8yKHZhbCkpCiAJCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTQ5OSw2ICs1MTMsOCBAQAogCQkJLmJ1Zgk9IGkyY19kYXRhLAogCQl9LAogCX07CisJc3RydWN0IG00MXQ4MF9kYXRhICpjbGllbnRkYXRhID0gaTJjX2dldF9jbGllbnRkYXRhKHNhdmVfY2xpZW50KTsKKwogCWkyY19kYXRhWzBdID0gMHgwOTsJCS8qIHdhdGNoZG9nIHJlZ2lzdGVyICovCiAKIAlpZiAod2R0X21hcmdpbiA+IDMxKQpAQCAtNTA5LDYgKzUyNSwxMyBAQAogCQkgKi8KIAkJaTJjX2RhdGFbMV0gPSB3ZHRfbWFyZ2luPDwyIHwgMHg4MjsKIAorCS8qCisJICogTTQxVDY1IGhhcyB0aHJlZSBiaXRzIGZvciB3YXRjaGRvZyByZXNvbHV0aW9uLiAgRG9uJ3Qgc2V0IGJpdCA3LCBhcworCSAqIHRoYXQgd291bGQgYmUgYW4gaW52YWxpZCByZXNvbHV0aW9uLgorCSAqLworCWlmIChjbGllbnRkYXRhLT5mZWF0dXJlcyAmIE00MVQ4MF9GRUFUVVJFX1dEKQorCQlpMmNfZGF0YVsxXSAmPSB+TTQxVDgwX1dBVENIRE9HX1JCMjsKKwogCWkyY190cmFuc2ZlcihzYXZlX2NsaWVudC0+YWRhcHRlciwgbXNnczEsIDEpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtbTQxdDk0LmMgYi9kcml2ZXJzL3J0Yy9ydGMtbTQxdDk0LmMKaW5kZXggOWIxOTQ5OS4uYzNhMThjNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvcnRjLW00MXQ5NC5jCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy1tNDF0OTQuYwpAQCAtNDEsMTcgKzQxLDE3IEBACiAJCXRtLT50bV9tb24sIHRtLT50bV95ZWFyLCB0bS0+dG1fd2RheSk7CiAKIAlidWZbMF0gPSAweDgwIHwgTTQxVDk0X1JFR19TRUNPTkRTOyAvKiB3cml0ZSB0aW1lICsgZGF0ZSAqLwotCWJ1ZltNNDFUOTRfUkVHX1NFQ09ORFNdID0gQklOMkJDRCh0bS0+dG1fc2VjKTsKLQlidWZbTTQxVDk0X1JFR19NSU5VVEVTXSA9IEJJTjJCQ0QodG0tPnRtX21pbik7Ci0JYnVmW000MVQ5NF9SRUdfSE9VUlNdICAgPSBCSU4yQkNEKHRtLT50bV9ob3VyKTsKLQlidWZbTTQxVDk0X1JFR19XREFZXSAgICA9IEJJTjJCQ0QodG0tPnRtX3dkYXkgKyAxKTsKLQlidWZbTTQxVDk0X1JFR19EQVldICAgICA9IEJJTjJCQ0QodG0tPnRtX21kYXkpOwotCWJ1ZltNNDFUOTRfUkVHX01PTlRIXSAgID0gQklOMkJDRCh0bS0+dG1fbW9uICsgMSk7CisJYnVmW000MVQ5NF9SRUdfU0VDT05EU10gPSBiaW4yYmNkKHRtLT50bV9zZWMpOworCWJ1ZltNNDFUOTRfUkVHX01JTlVURVNdID0gYmluMmJjZCh0bS0+dG1fbWluKTsKKwlidWZbTTQxVDk0X1JFR19IT1VSU10gICA9IGJpbjJiY2QodG0tPnRtX2hvdXIpOworCWJ1ZltNNDFUOTRfUkVHX1dEQVldICAgID0gYmluMmJjZCh0bS0+dG1fd2RheSArIDEpOworCWJ1ZltNNDFUOTRfUkVHX0RBWV0gICAgID0gYmluMmJjZCh0bS0+dG1fbWRheSk7CisJYnVmW000MVQ5NF9SRUdfTU9OVEhdICAgPSBiaW4yYmNkKHRtLT50bV9tb24gKyAxKTsKIAogCWJ1ZltNNDFUOTRfUkVHX0hPVVJTXSB8PSBNNDFUOTRfQklUX0NFQjsKIAlpZiAodG0tPnRtX3llYXIgPj0gMTAwKQogCQlidWZbTTQxVDk0X1JFR19IT1VSU10gfD0gTTQxVDk0X0JJVF9DQjsKLQlidWZbTTQxVDk0X1JFR19ZRUFSXSA9IEJJTjJCQ0QodG0tPnRtX3llYXIgJSAxMDApOworCWJ1ZltNNDFUOTRfUkVHX1lFQVJdID0gYmluMmJjZCh0bS0+dG1feWVhciAlIDEwMCk7CiAKIAlyZXR1cm4gc3BpX3dyaXRlKHNwaSwgYnVmLCA4KTsKIH0KQEAgLTgyLDE0ICs4MiwxNCBAQAogCQlzcGlfd3JpdGUoc3BpLCBidWYsIDIpOwogCX0KIAotCXRtLT50bV9zZWMgID0gQkNEMkJJTihzcGlfdzhyOChzcGksIE00MVQ5NF9SRUdfU0VDT05EUykpOwotCXRtLT50bV9taW4gID0gQkNEMkJJTihzcGlfdzhyOChzcGksIE00MVQ5NF9SRUdfTUlOVVRFUykpOworCXRtLT50bV9zZWMgID0gYmNkMmJpbihzcGlfdzhyOChzcGksIE00MVQ5NF9SRUdfU0VDT05EUykpOworCXRtLT50bV9taW4gID0gYmNkMmJpbihzcGlfdzhyOChzcGksIE00MVQ5NF9SRUdfTUlOVVRFUykpOwogCWhvdXIgPSBzcGlfdzhyOChzcGksIE00MVQ5NF9SRUdfSE9VUlMpOwotCXRtLT50bV9ob3VyID0gQkNEMkJJTihob3VyICYgMHgzZik7Ci0JdG0tPnRtX3dkYXkgPSBCQ0QyQklOKHNwaV93OHI4KHNwaSwgTTQxVDk0X1JFR19XREFZKSkgLSAxOwotCXRtLT50bV9tZGF5ID0gQkNEMkJJTihzcGlfdzhyOChzcGksIE00MVQ5NF9SRUdfREFZKSk7Ci0JdG0tPnRtX21vbiAgPSBCQ0QyQklOKHNwaV93OHI4KHNwaSwgTTQxVDk0X1JFR19NT05USCkpIC0gMTsKLQl0bS0+dG1feWVhciA9IEJDRDJCSU4oc3BpX3c4cjgoc3BpLCBNNDFUOTRfUkVHX1lFQVIpKTsKKwl0bS0+dG1faG91ciA9IGJjZDJiaW4oaG91ciAmIDB4M2YpOworCXRtLT50bV93ZGF5ID0gYmNkMmJpbihzcGlfdzhyOChzcGksIE00MVQ5NF9SRUdfV0RBWSkpIC0gMTsKKwl0bS0+dG1fbWRheSA9IGJjZDJiaW4oc3BpX3c4cjgoc3BpLCBNNDFUOTRfUkVHX0RBWSkpOworCXRtLT50bV9tb24gID0gYmNkMmJpbihzcGlfdzhyOChzcGksIE00MVQ5NF9SRUdfTU9OVEgpKSAtIDE7CisJdG0tPnRtX3llYXIgPSBiY2QyYmluKHNwaV93OHI4KHNwaSwgTTQxVDk0X1JFR19ZRUFSKSk7CiAJaWYgKChob3VyICYgTTQxVDk0X0JJVF9DQikgfHwgIShob3VyICYgTTQxVDk0X0JJVF9DRUIpKQogCQl0bS0+dG1feWVhciArPSAxMDA7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy1tNDh0MzUuYyBiL2RyaXZlcnMvcnRjL3J0Yy1tNDh0MzUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYjIxOTc1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ydGMvcnRjLW00OHQzNS5jCkBAIC0wLDAgKzEsMjM1IEBACisvKgorICogRHJpdmVyIGZvciB0aGUgU0dTLVRob21zb24gTTQ4VDM1IFRpbWVrZWVwZXIgUkFNIGNoaXAKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgU2lsaWNvbiBHcmFwaGljcywgSW5jLgorICogV3JpdHRlbiBieSBVbGYgQ2FybHNzb24gKHVsZmNAZW5nci5zZ2kuY29tKQorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUaG9tYXMgQm9nZW5kb2VyZmVyCisgKgorICogQmFzZWQgb24gY29kZSB3cml0dGVuIGJ5IFBhdWwgR29ydG1ha2VyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3J0Yy5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2JjZC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisKKyNkZWZpbmUgRFJWX1ZFUlNJT04JCSIxLjAiCisKK3N0cnVjdCBtNDh0MzVfcnRjIHsKKwl1OAlwYWRbMHg3ZmY4XTsgICAgLyogc3RhcnRzIGF0IDB4N2ZmOCAqLworCXU4CWNvbnRyb2w7CisJdTgJc2VjOworCXU4CW1pbjsKKwl1OAlob3VyOworCXU4CWRheTsKKwl1OAlkYXRlOworCXU4CW1vbnRoOworCXU4CXllYXI7Cit9OworCisjZGVmaW5lIE00OFQzNV9SVENfU0VUCQkweDgwCisjZGVmaW5lIE00OFQzNV9SVENfUkVBRAkJMHg0MAorCitzdHJ1Y3QgbTQ4dDM1X3ByaXYgeworCXN0cnVjdCBydGNfZGV2aWNlICpydGM7CisJc3RydWN0IG00OHQzNV9ydGMgX19pb21lbSAqcmVnOworCXNpemVfdCBzaXplOworCXVuc2lnbmVkIGxvbmcgYmFzZWFkZHI7CisJc3BpbmxvY2tfdCBsb2NrOworfTsKKworc3RhdGljIGludCBtNDh0MzVfcmVhZF90aW1lKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHJ0Y190aW1lICp0bSkKK3sKKwlzdHJ1Y3QgbTQ4dDM1X3ByaXYgKnByaXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwl1OCBjb250cm9sOworCisJLyoKKwkgKiBPbmx5IHRoZSB2YWx1ZXMgdGhhdCB3ZSByZWFkIGZyb20gdGhlIFJUQyBhcmUgc2V0LiBXZSBsZWF2ZQorCSAqIHRtX3dkYXksIHRtX3lkYXkgYW5kIHRtX2lzZHN0IHVudG91Y2hlZC4gRXZlbiB0aG91Z2ggdGhlCisJICogUlRDIGhhcyBSVENfREFZX09GX1dFRUssIHdlIGlnbm9yZSBpdCwgYXMgaXQgaXMgb25seSB1cGRhdGVkCisJICogYnkgdGhlIFJUQyB3aGVuIGluaXRpYWxseSBzZXQgdG8gYSBub24temVybyB2YWx1ZS4KKwkgKi8KKwlzcGluX2xvY2tfaXJxKCZwcml2LT5sb2NrKTsKKwljb250cm9sID0gcmVhZGIoJnByaXYtPnJlZy0+Y29udHJvbCk7CisJd3JpdGViKGNvbnRyb2wgfCBNNDhUMzVfUlRDX1JFQUQsICZwcml2LT5yZWctPmNvbnRyb2wpOworCXRtLT50bV9zZWMgPSByZWFkYigmcHJpdi0+cmVnLT5zZWMpOworCXRtLT50bV9taW4gPSByZWFkYigmcHJpdi0+cmVnLT5taW4pOworCXRtLT50bV9ob3VyID0gcmVhZGIoJnByaXYtPnJlZy0+aG91cik7CisJdG0tPnRtX21kYXkgPSByZWFkYigmcHJpdi0+cmVnLT5kYXRlKTsKKwl0bS0+dG1fbW9uID0gcmVhZGIoJnByaXYtPnJlZy0+bW9udGgpOworCXRtLT50bV95ZWFyID0gcmVhZGIoJnByaXYtPnJlZy0+eWVhcik7CisJd3JpdGViKGNvbnRyb2wsICZwcml2LT5yZWctPmNvbnRyb2wpOworCXNwaW5fdW5sb2NrX2lycSgmcHJpdi0+bG9jayk7CisKKwl0bS0+dG1fc2VjID0gYmNkMmJpbih0bS0+dG1fc2VjKTsKKwl0bS0+dG1fbWluID0gYmNkMmJpbih0bS0+dG1fbWluKTsKKwl0bS0+dG1faG91ciA9IGJjZDJiaW4odG0tPnRtX2hvdXIpOworCXRtLT50bV9tZGF5ID0gYmNkMmJpbih0bS0+dG1fbWRheSk7CisJdG0tPnRtX21vbiA9IGJjZDJiaW4odG0tPnRtX21vbik7CisJdG0tPnRtX3llYXIgPSBiY2QyYmluKHRtLT50bV95ZWFyKTsKKworCS8qCisJICogQWNjb3VudCBmb3IgZGlmZmVyZW5jZXMgYmV0d2VlbiBob3cgdGhlIFJUQyB1c2VzIHRoZSB2YWx1ZXMKKwkgKiBhbmQgaG93IHRoZXkgYXJlIGRlZmluZWQgaW4gYSBzdHJ1Y3QgcnRjX3RpbWU7CisJICovCisJdG0tPnRtX3llYXIgKz0gNzA7CisJaWYgKHRtLT50bV95ZWFyIDw9IDY5KQorCQl0bS0+dG1feWVhciArPSAxMDA7CisKKwl0bS0+dG1fbW9uLS07CisJcmV0dXJuIHJ0Y192YWxpZF90bSh0bSk7Cit9CisKK3N0YXRpYyBpbnQgbTQ4dDM1X3NldF90aW1lKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHJ0Y190aW1lICp0bSkKK3sKKwlzdHJ1Y3QgbTQ4dDM1X3ByaXYgKnByaXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwl1bnNpZ25lZCBjaGFyIG1vbiwgZGF5LCBocnMsIG1pbiwgc2VjOworCXVuc2lnbmVkIGludCB5cnM7CisJdTggY29udHJvbDsKKworCXlycyA9IHRtLT50bV95ZWFyICsgMTkwMDsKKwltb24gPSB0bS0+dG1fbW9uICsgMTsgICAvKiB0bV9tb24gc3RhcnRzIGF0IHplcm8gKi8KKwlkYXkgPSB0bS0+dG1fbWRheTsKKwlocnMgPSB0bS0+dG1faG91cjsKKwltaW4gPSB0bS0+dG1fbWluOworCXNlYyA9IHRtLT50bV9zZWM7CisKKwlpZiAoeXJzIDwgMTk3MCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwl5cnMgLT0gMTk3MDsKKwlpZiAoeXJzID4gMjU1KSAgICAvKiBUaGV5IGFyZSB1bnNpZ25lZCAqLworCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmICh5cnMgPiAxNjkpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKHlycyA+PSAxMDApCisJCXlycyAtPSAxMDA7CisKKwlzZWMgPSBiaW4yYmNkKHNlYyk7CisJbWluID0gYmluMmJjZChtaW4pOworCWhycyA9IGJpbjJiY2QoaHJzKTsKKwlkYXkgPSBiaW4yYmNkKGRheSk7CisJbW9uID0gYmluMmJjZChtb24pOworCXlycyA9IGJpbjJiY2QoeXJzKTsKKworCXNwaW5fbG9ja19pcnEoJnByaXYtPmxvY2spOworCWNvbnRyb2wgPSByZWFkYigmcHJpdi0+cmVnLT5jb250cm9sKTsKKwl3cml0ZWIoY29udHJvbCB8IE00OFQzNV9SVENfU0VULCAmcHJpdi0+cmVnLT5jb250cm9sKTsKKwl3cml0ZWIoeXJzLCAmcHJpdi0+cmVnLT55ZWFyKTsKKwl3cml0ZWIobW9uLCAmcHJpdi0+cmVnLT5tb250aCk7CisJd3JpdGViKGRheSwgJnByaXYtPnJlZy0+ZGF0ZSk7CisJd3JpdGViKGhycywgJnByaXYtPnJlZy0+aG91cik7CisJd3JpdGViKG1pbiwgJnByaXYtPnJlZy0+bWluKTsKKwl3cml0ZWIoc2VjLCAmcHJpdi0+cmVnLT5zZWMpOworCXdyaXRlYihjb250cm9sLCAmcHJpdi0+cmVnLT5jb250cm9sKTsKKwlzcGluX3VubG9ja19pcnEoJnByaXYtPmxvY2spOworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHJ0Y19jbGFzc19vcHMgbTQ4dDM1X29wcyA9IHsKKwkucmVhZF90aW1lCT0gbTQ4dDM1X3JlYWRfdGltZSwKKwkuc2V0X3RpbWUJPSBtNDh0MzVfc2V0X3RpbWUsCit9OworCitzdGF0aWMgaW50IF9fZGV2aW5pdCBtNDh0MzVfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgcnRjX2RldmljZSAqcnRjOworCXN0cnVjdCByZXNvdXJjZSAqcmVzOworCXN0cnVjdCBtNDh0MzVfcHJpdiAqcHJpdjsKKwlpbnQgcmV0ID0gMDsKKworCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJaWYgKCFyZXMpCisJCXJldHVybiAtRU5PREVWOworCXByaXYgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgbTQ4dDM1X3ByaXYpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXByaXYpCisJCXJldHVybiAtRU5PTUVNOworCisJcHJpdi0+c2l6ZSA9IHJlcy0+ZW5kIC0gcmVzLT5zdGFydCArIDE7CisJLyoKKwkgKiBrbHVkZ2U6IHJlbW92ZSB0aGUgI2lmbmRlZiBhZnRlciBpb2MzIHJlc291cmNlCisJICogY29uZmxpY3RzIGFyZSByZXNvbHZlZAorCSAqLworI2lmbmRlZiBDT05GSUdfU0dJX0lQMjcKKwlpZiAoIXJlcXVlc3RfbWVtX3JlZ2lvbihyZXMtPnN0YXJ0LCBwcml2LT5zaXplLCBwZGV2LT5uYW1lKSkgeworCQlyZXQgPSAtRUJVU1k7CisJCWdvdG8gb3V0OworCX0KKyNlbmRpZgorCXByaXYtPmJhc2VhZGRyID0gcmVzLT5zdGFydDsKKwlwcml2LT5yZWcgPSBpb3JlbWFwKHByaXYtPmJhc2VhZGRyLCBwcml2LT5zaXplKTsKKwlpZiAoIXByaXYtPnJlZykgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKKwl9CisJc3Bpbl9sb2NrX2luaXQoJnByaXYtPmxvY2spOworCXJ0YyA9IHJ0Y19kZXZpY2VfcmVnaXN0ZXIoIm00OHQzNSIsICZwZGV2LT5kZXYsCisJCQkJICAmbTQ4dDM1X29wcywgVEhJU19NT0RVTEUpOworCWlmIChJU19FUlIocnRjKSkgeworCQlyZXQgPSBQVFJfRVJSKHJ0Yyk7CisJCWdvdG8gb3V0OworCX0KKwlwcml2LT5ydGMgPSBydGM7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgcHJpdik7CisJcmV0dXJuIDA7CisKK291dDoKKwlpZiAocHJpdi0+cnRjKQorCQlydGNfZGV2aWNlX3VucmVnaXN0ZXIocHJpdi0+cnRjKTsKKwlpZiAocHJpdi0+cmVnKQorCQlpb3VubWFwKHByaXYtPnJlZyk7CisJaWYgKHByaXYtPmJhc2VhZGRyKQorCQlyZWxlYXNlX21lbV9yZWdpb24ocHJpdi0+YmFzZWFkZHIsIHByaXYtPnNpemUpOworCWtmcmVlKHByaXYpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZleGl0IG00OHQzNV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgbTQ4dDM1X3ByaXYgKnByaXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKworCXJ0Y19kZXZpY2VfdW5yZWdpc3Rlcihwcml2LT5ydGMpOworCWlvdW5tYXAocHJpdi0+cmVnKTsKKyNpZm5kZWYgQ09ORklHX1NHSV9JUDI3CisJcmVsZWFzZV9tZW1fcmVnaW9uKHByaXYtPmJhc2VhZGRyLCBwcml2LT5zaXplKTsKKyNlbmRpZgorCWtmcmVlKHByaXYpOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBtNDh0MzVfcGxhdGZvcm1fZHJpdmVyID0geworCS5kcml2ZXIJCT0geworCQkubmFtZQk9ICJydGMtbTQ4dDM1IiwKKwkJLm93bmVyCT0gVEhJU19NT0RVTEUsCisJfSwKKwkucHJvYmUJCT0gbTQ4dDM1X3Byb2JlLAorCS5yZW1vdmUJCT0gX19kZXZleGl0X3AobTQ4dDM1X3JlbW92ZSksCit9OworCitzdGF0aWMgaW50IF9faW5pdCBtNDh0MzVfaW5pdCh2b2lkKQoreworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJm00OHQzNV9wbGF0Zm9ybV9kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgbTQ4dDM1X2V4aXQodm9pZCkKK3sKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmbTQ4dDM1X3BsYXRmb3JtX2RyaXZlcik7Cit9CisKK01PRFVMRV9BVVRIT1IoIlRob21hcyBCb2dlbmRvZXJmZXIgPHRzYm9nZW5kQGFscGhhLmZyYW5rZW4uZGU+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIk00OFQzNSBSVEMgZHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfVkVSU0lPTihEUlZfVkVSU0lPTik7CitNT0RVTEVfQUxJQVMoInBsYXRmb3JtOnJ0Yy1tNDh0MzUiKTsKKworbW9kdWxlX2luaXQobTQ4dDM1X2luaXQpOworbW9kdWxlX2V4aXQobTQ4dDM1X2V4aXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLW00OHQ1OS5jIGIvZHJpdmVycy9ydGMvcnRjLW00OHQ1OS5jCmluZGV4IGNlNGVmZjYuLjA0YjYzZGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL3J0Yy1tNDh0NTkuYworKysgYi9kcml2ZXJzL3J0Yy9ydGMtbTQ4dDU5LmMKQEAgLTc2LDEwICs3NiwxMCBAQAogCS8qIElzc3VlIHRoZSBSRUFEIGNvbW1hbmQgKi8KIAlNNDhUNTlfU0VUX0JJVFMoTTQ4VDU5X0NOVExfUkVBRCwgTTQ4VDU5X0NOVEwpOwogCi0JdG0tPnRtX3llYXIJPSBCQ0QyQklOKE00OFQ1OV9SRUFEKE00OFQ1OV9ZRUFSKSk7CisJdG0tPnRtX3llYXIJPSBiY2QyYmluKE00OFQ1OV9SRUFEKE00OFQ1OV9ZRUFSKSk7CiAJLyogdG1fbW9uIGlzIDAtMTEgKi8KLQl0bS0+dG1fbW9uCT0gQkNEMkJJTihNNDhUNTlfUkVBRChNNDhUNTlfTU9OVEgpKSAtIDE7Ci0JdG0tPnRtX21kYXkJPSBCQ0QyQklOKE00OFQ1OV9SRUFEKE00OFQ1OV9NREFZKSk7CisJdG0tPnRtX21vbgk9IGJjZDJiaW4oTTQ4VDU5X1JFQUQoTTQ4VDU5X01PTlRIKSkgLSAxOworCXRtLT50bV9tZGF5CT0gYmNkMmJpbihNNDhUNTlfUkVBRChNNDhUNTlfTURBWSkpOwogCiAJdmFsID0gTTQ4VDU5X1JFQUQoTTQ4VDU5X1dEQVkpOwogCWlmICgocGRhdGEtPnR5cGUgPT0gTTQ4VDU5UlRDX1RZUEVfTTQ4VDU5KSAmJgpAQCAtODgsMTAgKzg4LDEwIEBACiAJCXRtLT50bV95ZWFyICs9IDEwMDsJLyogb25lIGNlbnR1cnkgKi8KIAl9CiAKLQl0bS0+dG1fd2RheQk9IEJDRDJCSU4odmFsICYgMHgwNyk7Ci0JdG0tPnRtX2hvdXIJPSBCQ0QyQklOKE00OFQ1OV9SRUFEKE00OFQ1OV9IT1VSKSAmIDB4M0YpOwotCXRtLT50bV9taW4JPSBCQ0QyQklOKE00OFQ1OV9SRUFEKE00OFQ1OV9NSU4pICYgMHg3Rik7Ci0JdG0tPnRtX3NlYwk9IEJDRDJCSU4oTTQ4VDU5X1JFQUQoTTQ4VDU5X1NFQykgJiAweDdGKTsKKwl0bS0+dG1fd2RheQk9IGJjZDJiaW4odmFsICYgMHgwNyk7CisJdG0tPnRtX2hvdXIJPSBiY2QyYmluKE00OFQ1OV9SRUFEKE00OFQ1OV9IT1VSKSAmIDB4M0YpOworCXRtLT50bV9taW4JPSBiY2QyYmluKE00OFQ1OV9SRUFEKE00OFQ1OV9NSU4pICYgMHg3Rik7CisJdG0tPnRtX3NlYwk9IGJjZDJiaW4oTTQ4VDU5X1JFQUQoTTQ4VDU5X1NFQykgJiAweDdGKTsKIAogCS8qIENsZWFyIHRoZSBSRUFEIGJpdCAqLwogCU00OFQ1OV9DTEVBUl9CSVRTKE00OFQ1OV9DTlRMX1JFQUQsIE00OFQ1OV9DTlRMKTsKQEAgLTExOSwxNyArMTE5LDE3IEBACiAJLyogSXNzdWUgdGhlIFdSSVRFIGNvbW1hbmQgKi8KIAlNNDhUNTlfU0VUX0JJVFMoTTQ4VDU5X0NOVExfV1JJVEUsIE00OFQ1OV9DTlRMKTsKIAotCU00OFQ1OV9XUklURSgoQklOMkJDRCh0bS0+dG1fc2VjKSAmIDB4N0YpLCBNNDhUNTlfU0VDKTsKLQlNNDhUNTlfV1JJVEUoKEJJTjJCQ0QodG0tPnRtX21pbikgJiAweDdGKSwgTTQ4VDU5X01JTik7Ci0JTTQ4VDU5X1dSSVRFKChCSU4yQkNEKHRtLT50bV9ob3VyKSAmIDB4M0YpLCBNNDhUNTlfSE9VUik7Ci0JTTQ4VDU5X1dSSVRFKChCSU4yQkNEKHRtLT50bV9tZGF5KSAmIDB4M0YpLCBNNDhUNTlfTURBWSk7CisJTTQ4VDU5X1dSSVRFKChiaW4yYmNkKHRtLT50bV9zZWMpICYgMHg3RiksIE00OFQ1OV9TRUMpOworCU00OFQ1OV9XUklURSgoYmluMmJjZCh0bS0+dG1fbWluKSAmIDB4N0YpLCBNNDhUNTlfTUlOKTsKKwlNNDhUNTlfV1JJVEUoKGJpbjJiY2QodG0tPnRtX2hvdXIpICYgMHgzRiksIE00OFQ1OV9IT1VSKTsKKwlNNDhUNTlfV1JJVEUoKGJpbjJiY2QodG0tPnRtX21kYXkpICYgMHgzRiksIE00OFQ1OV9NREFZKTsKIAkvKiB0bV9tb24gaXMgMC0xMSAqLwotCU00OFQ1OV9XUklURSgoQklOMkJDRCh0bS0+dG1fbW9uICsgMSkgJiAweDFGKSwgTTQ4VDU5X01PTlRIKTsKLQlNNDhUNTlfV1JJVEUoQklOMkJDRCh0bS0+dG1feWVhciAlIDEwMCksIE00OFQ1OV9ZRUFSKTsKKwlNNDhUNTlfV1JJVEUoKGJpbjJiY2QodG0tPnRtX21vbiArIDEpICYgMHgxRiksIE00OFQ1OV9NT05USCk7CisJTTQ4VDU5X1dSSVRFKGJpbjJiY2QodG0tPnRtX3llYXIgJSAxMDApLCBNNDhUNTlfWUVBUik7CiAKIAlpZiAocGRhdGEtPnR5cGUgPT0gTTQ4VDU5UlRDX1RZUEVfTTQ4VDU5ICYmICh0bS0+dG1feWVhciAvIDEwMCkpCiAJCXZhbCA9IChNNDhUNTlfV0RBWV9DRUIgfCBNNDhUNTlfV0RBWV9DQik7Ci0JdmFsIHw9IChCSU4yQkNEKHRtLT50bV93ZGF5KSAmIDB4MDcpOworCXZhbCB8PSAoYmluMmJjZCh0bS0+dG1fd2RheSkgJiAweDA3KTsKIAlNNDhUNTlfV1JJVEUodmFsLCBNNDhUNTlfV0RBWSk7CiAKIAkvKiBDbGVhciB0aGUgV1JJVEUgYml0ICovCkBAIC0xNTgsMTggKzE1OCwxOCBAQAogCS8qIElzc3VlIHRoZSBSRUFEIGNvbW1hbmQgKi8KIAlNNDhUNTlfU0VUX0JJVFMoTTQ4VDU5X0NOVExfUkVBRCwgTTQ4VDU5X0NOVEwpOwogCi0JdG0tPnRtX3llYXIgPSBCQ0QyQklOKE00OFQ1OV9SRUFEKE00OFQ1OV9ZRUFSKSk7CisJdG0tPnRtX3llYXIgPSBiY2QyYmluKE00OFQ1OV9SRUFEKE00OFQ1OV9ZRUFSKSk7CiAJLyogdG1fbW9uIGlzIDAtMTEgKi8KLQl0bS0+dG1fbW9uID0gQkNEMkJJTihNNDhUNTlfUkVBRChNNDhUNTlfTU9OVEgpKSAtIDE7CisJdG0tPnRtX21vbiA9IGJjZDJiaW4oTTQ4VDU5X1JFQUQoTTQ4VDU5X01PTlRIKSkgLSAxOwogCiAJdmFsID0gTTQ4VDU5X1JFQUQoTTQ4VDU5X1dEQVkpOwogCWlmICgodmFsICYgTTQ4VDU5X1dEQVlfQ0VCKSAmJiAodmFsICYgTTQ4VDU5X1dEQVlfQ0IpKQogCQl0bS0+dG1feWVhciArPSAxMDA7CS8qIG9uZSBjZW50dXJ5ICovCiAKLQl0bS0+dG1fbWRheSA9IEJDRDJCSU4oTTQ4VDU5X1JFQUQoTTQ4VDU5X0FMQVJNX0RBVEUpKTsKLQl0bS0+dG1faG91ciA9IEJDRDJCSU4oTTQ4VDU5X1JFQUQoTTQ4VDU5X0FMQVJNX0hPVVIpKTsKLQl0bS0+dG1fbWluID0gQkNEMkJJTihNNDhUNTlfUkVBRChNNDhUNTlfQUxBUk1fTUlOKSk7Ci0JdG0tPnRtX3NlYyA9IEJDRDJCSU4oTTQ4VDU5X1JFQUQoTTQ4VDU5X0FMQVJNX1NFQykpOworCXRtLT50bV9tZGF5ID0gYmNkMmJpbihNNDhUNTlfUkVBRChNNDhUNTlfQUxBUk1fREFURSkpOworCXRtLT50bV9ob3VyID0gYmNkMmJpbihNNDhUNTlfUkVBRChNNDhUNTlfQUxBUk1fSE9VUikpOworCXRtLT50bV9taW4gPSBiY2QyYmluKE00OFQ1OV9SRUFEKE00OFQ1OV9BTEFSTV9NSU4pKTsKKwl0bS0+dG1fc2VjID0gYmNkMmJpbihNNDhUNTlfUkVBRChNNDhUNTlfQUxBUk1fU0VDKSk7CiAKIAkvKiBDbGVhciB0aGUgUkVBRCBiaXQgKi8KIAlNNDhUNTlfQ0xFQVJfQklUUyhNNDhUNTlfQ05UTF9SRUFELCBNNDhUNTlfQ05UTCk7CkBAIC0yMDEsMTggKzIwMSwxOCBAQAogCSAqIDB4ZmYgbWVhbnMgImFsd2F5cyBtYXRjaCIKIAkgKi8KIAltZGF5ID0gdG0tPnRtX21kYXk7Ci0JbWRheSA9IChtZGF5ID49IDEgJiYgbWRheSA8PSAzMSkgPyBCSU4yQkNEKG1kYXkpIDogMHhmZjsKKwltZGF5ID0gKG1kYXkgPj0gMSAmJiBtZGF5IDw9IDMxKSA/IGJpbjJiY2QobWRheSkgOiAweGZmOwogCWlmIChtZGF5ID09IDB4ZmYpCiAJCW1kYXkgPSBNNDhUNTlfUkVBRChNNDhUNTlfTURBWSk7CiAKIAlob3VyID0gdG0tPnRtX2hvdXI7Ci0JaG91ciA9IChob3VyIDwgMjQpID8gQklOMkJDRChob3VyKSA6IDB4MDA7CisJaG91ciA9IChob3VyIDwgMjQpID8gYmluMmJjZChob3VyKSA6IDB4MDA7CiAKIAltaW4gPSB0bS0+dG1fbWluOwotCW1pbiA9IChtaW4gPCA2MCkgPyBCSU4yQkNEKG1pbikgOiAweDAwOworCW1pbiA9IChtaW4gPCA2MCkgPyBiaW4yYmNkKG1pbikgOiAweDAwOwogCiAJc2VjID0gdG0tPnRtX3NlYzsKLQlzZWMgPSAoc2VjIDwgNjApID8gQklOMkJDRChzZWMpIDogMHgwMDsKKwlzZWMgPSAoc2VjIDwgNjApID8gYmluMmJjZChzZWMpIDogMHgwMDsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZtNDh0NTktPmxvY2ssIGZsYWdzKTsKIAkvKiBJc3N1ZSB0aGUgV1JJVEUgY29tbWFuZCAqLwpAQCAtMzYwLDcgKzM2MCw2IEBACiAJLmF0dHIgPSB7CiAJCS5uYW1lID0gIm52cmFtIiwKIAkJLm1vZGUgPSBTX0lSVUdPIHwgU19JV1VTUiwKLQkJLm93bmVyID0gVEhJU19NT0RVTEUsCiAJfSwKIAkucmVhZCA9IG00OHQ1OV9udnJhbV9yZWFkLAogCS53cml0ZSA9IG00OHQ1OV9udnJhbV93cml0ZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy1tNDh0ODYuYyBiL2RyaXZlcnMvcnRjL3J0Yy1tNDh0ODYuYwppbmRleCAzZjdmOTlhLi43YzA0NWNmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtbTQ4dDg2LmMKKysrIGIvZHJpdmVycy9ydGMvcnRjLW00OHQ4Ni5jCkBAIC02MiwxNCArNjIsMTQgQEAKIAkJdG0tPnRtX3dkYXkJPSBvcHMtPnJlYWRieXRlKE00OFQ4Nl9SRUdfRE9XKTsKIAl9IGVsc2UgewogCQkvKiBiY2QgbW9kZSAqLwotCQl0bS0+dG1fc2VjCT0gQkNEMkJJTihvcHMtPnJlYWRieXRlKE00OFQ4Nl9SRUdfU0VDKSk7Ci0JCXRtLT50bV9taW4JPSBCQ0QyQklOKG9wcy0+cmVhZGJ5dGUoTTQ4VDg2X1JFR19NSU4pKTsKLQkJdG0tPnRtX2hvdXIJPSBCQ0QyQklOKG9wcy0+cmVhZGJ5dGUoTTQ4VDg2X1JFR19IT1VSKSAmIDB4M0YpOwotCQl0bS0+dG1fbWRheQk9IEJDRDJCSU4ob3BzLT5yZWFkYnl0ZShNNDhUODZfUkVHX0RPTSkpOworCQl0bS0+dG1fc2VjCT0gYmNkMmJpbihvcHMtPnJlYWRieXRlKE00OFQ4Nl9SRUdfU0VDKSk7CisJCXRtLT50bV9taW4JPSBiY2QyYmluKG9wcy0+cmVhZGJ5dGUoTTQ4VDg2X1JFR19NSU4pKTsKKwkJdG0tPnRtX2hvdXIJPSBiY2QyYmluKG9wcy0+cmVhZGJ5dGUoTTQ4VDg2X1JFR19IT1VSKSAmIDB4M0YpOworCQl0bS0+dG1fbWRheQk9IGJjZDJiaW4ob3BzLT5yZWFkYnl0ZShNNDhUODZfUkVHX0RPTSkpOwogCQkvKiB0bV9tb24gaXMgMC0xMSAqLwotCQl0bS0+dG1fbW9uCT0gQkNEMkJJTihvcHMtPnJlYWRieXRlKE00OFQ4Nl9SRUdfTU9OVEgpKSAtIDE7Ci0JCXRtLT50bV95ZWFyCT0gQkNEMkJJTihvcHMtPnJlYWRieXRlKE00OFQ4Nl9SRUdfWUVBUikpICsgMTAwOwotCQl0bS0+dG1fd2RheQk9IEJDRDJCSU4ob3BzLT5yZWFkYnl0ZShNNDhUODZfUkVHX0RPVykpOworCQl0bS0+dG1fbW9uCT0gYmNkMmJpbihvcHMtPnJlYWRieXRlKE00OFQ4Nl9SRUdfTU9OVEgpKSAtIDE7CisJCXRtLT50bV95ZWFyCT0gYmNkMmJpbihvcHMtPnJlYWRieXRlKE00OFQ4Nl9SRUdfWUVBUikpICsgMTAwOworCQl0bS0+dG1fd2RheQk9IGJjZDJiaW4ob3BzLT5yZWFkYnl0ZShNNDhUODZfUkVHX0RPVykpOwogCX0KIAogCS8qIGNvcnJlY3QgdGhlIGhvdXIgaWYgdGhlIGNsb2NrIGlzIGluIDEyaCBtb2RlICovCkBAIC0xMDMsMTMgKzEwMywxMyBAQAogCQlvcHMtPndyaXRlYnl0ZSh0bS0+dG1fd2RheSwgTTQ4VDg2X1JFR19ET1cpOwogCX0gZWxzZSB7CiAJCS8qIGJjZCBtb2RlICovCi0JCW9wcy0+d3JpdGVieXRlKEJJTjJCQ0QodG0tPnRtX3NlYyksIE00OFQ4Nl9SRUdfU0VDKTsKLQkJb3BzLT53cml0ZWJ5dGUoQklOMkJDRCh0bS0+dG1fbWluKSwgTTQ4VDg2X1JFR19NSU4pOwotCQlvcHMtPndyaXRlYnl0ZShCSU4yQkNEKHRtLT50bV9ob3VyKSwgTTQ4VDg2X1JFR19IT1VSKTsKLQkJb3BzLT53cml0ZWJ5dGUoQklOMkJDRCh0bS0+dG1fbWRheSksIE00OFQ4Nl9SRUdfRE9NKTsKLQkJb3BzLT53cml0ZWJ5dGUoQklOMkJDRCh0bS0+dG1fbW9uICsgMSksIE00OFQ4Nl9SRUdfTU9OVEgpOwotCQlvcHMtPndyaXRlYnl0ZShCSU4yQkNEKHRtLT50bV95ZWFyICUgMTAwKSwgTTQ4VDg2X1JFR19ZRUFSKTsKLQkJb3BzLT53cml0ZWJ5dGUoQklOMkJDRCh0bS0+dG1fd2RheSksIE00OFQ4Nl9SRUdfRE9XKTsKKwkJb3BzLT53cml0ZWJ5dGUoYmluMmJjZCh0bS0+dG1fc2VjKSwgTTQ4VDg2X1JFR19TRUMpOworCQlvcHMtPndyaXRlYnl0ZShiaW4yYmNkKHRtLT50bV9taW4pLCBNNDhUODZfUkVHX01JTik7CisJCW9wcy0+d3JpdGVieXRlKGJpbjJiY2QodG0tPnRtX2hvdXIpLCBNNDhUODZfUkVHX0hPVVIpOworCQlvcHMtPndyaXRlYnl0ZShiaW4yYmNkKHRtLT50bV9tZGF5KSwgTTQ4VDg2X1JFR19ET00pOworCQlvcHMtPndyaXRlYnl0ZShiaW4yYmNkKHRtLT50bV9tb24gKyAxKSwgTTQ4VDg2X1JFR19NT05USCk7CisJCW9wcy0+d3JpdGVieXRlKGJpbjJiY2QodG0tPnRtX3llYXIgJSAxMDApLCBNNDhUODZfUkVHX1lFQVIpOworCQlvcHMtPndyaXRlYnl0ZShiaW4yYmNkKHRtLT50bV93ZGF5KSwgTTQ4VDg2X1JFR19ET1cpOwogCX0KIAogCS8qIHVwZGF0ZSBlbmRlZCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLW1heDY5MDAuYyBiL2RyaXZlcnMvcnRjL3J0Yy1tYXg2OTAwLmMKaW5kZXggZGVkM2MwYS4uODA3ODI3OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvcnRjLW1heDY5MDAuYworKysgYi9kcml2ZXJzL3J0Yy9ydGMtbWF4NjkwMC5jCkBAIC0xNywxOSArMTcsMTggQEAKICNpbmNsdWRlIDxsaW51eC9ydGMuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogCi0jZGVmaW5lIERSVl9OQU1FICJtYXg2OTAwIgotI2RlZmluZSBEUlZfVkVSU0lPTiAiMC4xIgorI2RlZmluZSBEUlZfVkVSU0lPTiAiMC4yIgogCiAvKgogICogcmVnaXN0ZXIgaW5kaWNlcwogICovCi0jZGVmaW5lIE1BWDY5MDBfUkVHX1NDCQkJMAkvKiBzZWNvbmRzCTAwLTU5ICovCi0jZGVmaW5lIE1BWDY5MDBfUkVHX01OCQkJMQkvKiBtaW51dGVzCTAwLTU5ICovCi0jZGVmaW5lIE1BWDY5MDBfUkVHX0hSCQkJMgkvKiBob3VycwkwMC0yMyAqLwotI2RlZmluZSBNQVg2OTAwX1JFR19EVAkJCTMJLyogZGF5IG9mIG1vbnRoCTAwLTMxICovCi0jZGVmaW5lIE1BWDY5MDBfUkVHX01PCQkJNAkvKiBtb250aAkwMS0xMiAqLwotI2RlZmluZSBNQVg2OTAwX1JFR19EVwkJCTUJLyogZGF5IG9mIHdlZWsJIDEtNyAgKi8KLSNkZWZpbmUgTUFYNjkwMF9SRUdfWVIJCQk2CS8qIHllYXIJCTAwLTk5ICovCisjZGVmaW5lIE1BWDY5MDBfUkVHX1NDCQkJMAkvKiBzZWNvbmRzICAgICAgMDAtNTkgKi8KKyNkZWZpbmUgTUFYNjkwMF9SRUdfTU4JCQkxCS8qIG1pbnV0ZXMgICAgICAwMC01OSAqLworI2RlZmluZSBNQVg2OTAwX1JFR19IUgkJCTIJLyogaG91cnMgICAgICAgIDAwLTIzICovCisjZGVmaW5lIE1BWDY5MDBfUkVHX0RUCQkJMwkvKiBkYXkgb2YgbW9udGggMDAtMzEgKi8KKyNkZWZpbmUgTUFYNjkwMF9SRUdfTU8JCQk0CS8qIG1vbnRoICAgICAgICAwMS0xMiAqLworI2RlZmluZSBNQVg2OTAwX1JFR19EVwkJCTUJLyogZGF5IG9mIHdlZWsgICAxLTcgICovCisjZGVmaW5lIE1BWDY5MDBfUkVHX1lSCQkJNgkvKiB5ZWFyICAgICAgICAgMDAtOTkgKi8KICNkZWZpbmUgTUFYNjkwMF9SRUdfQ1QJCQk3CS8qIGNvbnRyb2wgKi8KIAkJCQkJCS8qIHJlZ2lzdGVyIDggaXMgdW5kb2N1bWVudGVkICovCiAjZGVmaW5lIE1BWDY5MDBfUkVHX0NFTlRVUlkJCTkJLyogY2VudHVyeSAqLwpAQCAtMzksNyArMzgsNiBAQAogCiAjZGVmaW5lIE1BWDY5MDBfUkVHX0NUX1dQCQkoMSA8PCA3KQkvKiBXcml0ZSBQcm90ZWN0ICovCiAKLQogLyoKICAqIHJlZ2lzdGVyIHJlYWQvd3JpdGUgY29tbWFuZHMKICAqLwpAQCAtNTIsMTYgKzUwLDcgQEAKIAogI2RlZmluZSBNQVg2OTAwX0lETEVfVElNRV9BRlRFUl9XUklURQkzCS8qIHNwZWNpZmljYXRpb24gc2F5cyAyLjUgbVMgKi8KIAotI2RlZmluZSBNQVg2OTAwX0kyQ19BRERSCQkweGEwCi0KLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBzaG9ydCBub3JtYWxfaTJjW10gPSB7Ci0JTUFYNjkwMF9JMkNfQUREUiA+PiAxLAotCUkyQ19DTElFTlRfRU5ECi19OwotCi1JMkNfQ0xJRU5UX0lOU01PRDsJCQkvKiBkZWZpbmVzIGFkZHJfZGF0YSAqLwotCi1zdGF0aWMgaW50IG1heDY5MDBfcHJvYmUoc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyLCBpbnQgYWRkciwgaW50IGtpbmQpOworc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIG1heDY5MDBfZHJpdmVyOwogCiBzdGF0aWMgaW50IG1heDY5MDBfaTJjX3JlYWRfcmVncyhzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1OCAqYnVmKQogewpAQCAtNjksMzYgKzU4LDM1IEBACiAJdTggcmVnX2NlbnR1cnlfcmVhZFsxXSA9IHsgTUFYNjkwMF9SRUdfQ0VOVFVSWV9SRUFEIH07CiAJc3RydWN0IGkyY19tc2cgbXNnc1s0XSA9IHsKIAkJewotCQkJLmFkZHIJPSBjbGllbnQtPmFkZHIsCi0JCQkuZmxhZ3MJPSAwLCAvKiB3cml0ZSAqLwotCQkJLmxlbgk9IHNpemVvZihyZWdfYnVyc3RfcmVhZCksCi0JCQkuYnVmCT0gcmVnX2J1cnN0X3JlYWQKLQkJfSwKKwkJIC5hZGRyID0gY2xpZW50LT5hZGRyLAorCQkgLmZsYWdzID0gMCwJLyogd3JpdGUgKi8KKwkJIC5sZW4gPSBzaXplb2YocmVnX2J1cnN0X3JlYWQpLAorCQkgLmJ1ZiA9IHJlZ19idXJzdF9yZWFkfQorCQksCiAJCXsKLQkJCS5hZGRyCT0gY2xpZW50LT5hZGRyLAotCQkJLmZsYWdzCT0gSTJDX01fUkQsCi0JCQkubGVuCT0gTUFYNjkwMF9CVVJTVF9MRU4sCi0JCQkuYnVmCT0gYnVmCi0JCX0sCisJCSAuYWRkciA9IGNsaWVudC0+YWRkciwKKwkJIC5mbGFncyA9IEkyQ19NX1JELAorCQkgLmxlbiA9IE1BWDY5MDBfQlVSU1RfTEVOLAorCQkgLmJ1ZiA9IGJ1Zn0KKwkJLAogCQl7Ci0JCQkuYWRkcgk9IGNsaWVudC0+YWRkciwKLQkJCS5mbGFncwk9IDAsIC8qIHdyaXRlICovCi0JCQkubGVuCT0gc2l6ZW9mKHJlZ19jZW50dXJ5X3JlYWQpLAotCQkJLmJ1Zgk9IHJlZ19jZW50dXJ5X3JlYWQKLQkJfSwKKwkJIC5hZGRyID0gY2xpZW50LT5hZGRyLAorCQkgLmZsYWdzID0gMCwJLyogd3JpdGUgKi8KKwkJIC5sZW4gPSBzaXplb2YocmVnX2NlbnR1cnlfcmVhZCksCisJCSAuYnVmID0gcmVnX2NlbnR1cnlfcmVhZH0KKwkJLAogCQl7Ci0JCQkuYWRkcgk9IGNsaWVudC0+YWRkciwKLQkJCS5mbGFncwk9IEkyQ19NX1JELAotCQkJLmxlbgk9IHNpemVvZihidWZbTUFYNjkwMF9SRUdfQ0VOVFVSWV0pLAotCQkJLmJ1Zgk9ICZidWZbTUFYNjkwMF9SRUdfQ0VOVFVSWV0KLQkJfQorCQkgLmFkZHIgPSBjbGllbnQtPmFkZHIsCisJCSAuZmxhZ3MgPSBJMkNfTV9SRCwKKwkJIC5sZW4gPSBzaXplb2YoYnVmW01BWDY5MDBfUkVHX0NFTlRVUlldKSwKKwkJIC5idWYgPSAmYnVmW01BWDY5MDBfUkVHX0NFTlRVUlldCisJCSB9CiAJfTsKIAlpbnQgcmM7CiAKIAlyYyA9IGkyY190cmFuc2ZlcihjbGllbnQtPmFkYXB0ZXIsIG1zZ3MsIEFSUkFZX1NJWkUobXNncykpOwogCWlmIChyYyAhPSBBUlJBWV9TSVpFKG1zZ3MpKSB7Ci0JCWRldl9lcnIoJmNsaWVudC0+ZGV2LCAiJXM6IHJlZ2lzdGVyIHJlYWQgZmFpbGVkXG4iLAotCQkJX19mdW5jX18pOworCQlkZXZfZXJyKCZjbGllbnQtPmRldiwgIiVzOiByZWdpc3RlciByZWFkIGZhaWxlZFxuIiwgX19mdW5jX18pOwogCQlyZXR1cm4gLUVJTzsKIAl9CiAJcmV0dXJuIDA7CkBAIC0xMDksMjAgKzk3LDE4IEBACiAJdTggaTJjX2NlbnR1cnlfYnVmWzEgKyAxXSA9IHsgTUFYNjkwMF9SRUdfQ0VOVFVSWV9XUklURSB9OwogCXN0cnVjdCBpMmNfbXNnIGNlbnR1cnlfbXNnc1sxXSA9IHsKIAkJewotCQkJLmFkZHIJPSBjbGllbnQtPmFkZHIsCi0JCQkuZmxhZ3MJPSAwLCAvKiB3cml0ZSAqLwotCQkJLmxlbgk9IHNpemVvZihpMmNfY2VudHVyeV9idWYpLAotCQkJLmJ1Zgk9IGkyY19jZW50dXJ5X2J1ZgotCQl9CisJCSAuYWRkciA9IGNsaWVudC0+YWRkciwKKwkJIC5mbGFncyA9IDAsCS8qIHdyaXRlICovCisJCSAubGVuID0gc2l6ZW9mKGkyY19jZW50dXJ5X2J1ZiksCisJCSAuYnVmID0gaTJjX2NlbnR1cnlfYnVmfQogCX07CiAJdTggaTJjX2J1cnN0X2J1ZltNQVg2OTAwX0JVUlNUX0xFTiArIDFdID0geyBNQVg2OTAwX1JFR19CVVJTVF9XUklURSB9OwogCXN0cnVjdCBpMmNfbXNnIGJ1cnN0X21zZ3NbMV0gPSB7CiAJCXsKLQkJCS5hZGRyCT0gY2xpZW50LT5hZGRyLAotCQkJLmZsYWdzCT0gMCwgLyogd3JpdGUgKi8KLQkJCS5sZW4JPSBzaXplb2YoaTJjX2J1cnN0X2J1ZiksCi0JCQkuYnVmCT0gaTJjX2J1cnN0X2J1ZgotCQl9CisJCSAuYWRkciA9IGNsaWVudC0+YWRkciwKKwkJIC5mbGFncyA9IDAsCS8qIHdyaXRlICovCisJCSAubGVuID0gc2l6ZW9mKGkyY19idXJzdF9idWYpLAorCQkgLmJ1ZiA9IGkyY19idXJzdF9idWZ9CiAJfTsKIAlpbnQgcmM7CiAKQEAgLTEzMywxMCArMTE5LDEyIEBACiAJICogYml0IGFzIHBhcnQgb2YgdGhlIGJ1cnN0IHdyaXRlLgogCSAqLwogCWkyY19jZW50dXJ5X2J1ZlsxXSA9IGJ1ZltNQVg2OTAwX1JFR19DRU5UVVJZXTsKKwogCXJjID0gaTJjX3RyYW5zZmVyKGNsaWVudC0+YWRhcHRlciwgY2VudHVyeV9tc2dzLAogCQkJICBBUlJBWV9TSVpFKGNlbnR1cnlfbXNncykpOwogCWlmIChyYyAhPSBBUlJBWV9TSVpFKGNlbnR1cnlfbXNncykpCiAJCWdvdG8gd3JpdGVfZmFpbGVkOworCiAJbXNsZWVwKE1BWDY5MDBfSURMRV9USU1FX0FGVEVSX1dSSVRFKTsKIAogCW1lbWNweSgmaTJjX2J1cnN0X2J1ZlsxXSwgYnVmLCBNQVg2OTAwX0JVUlNUX0xFTik7CkBAIC0xNDgsNDUgKzEzNiwxMSBAQAogCiAJcmV0dXJuIDA7CiAKLXdyaXRlX2ZhaWxlZDoKLQlkZXZfZXJyKCZjbGllbnQtPmRldiwgIiVzOiByZWdpc3RlciB3cml0ZSBmYWlsZWRcbiIsCi0JCV9fZnVuY19fKTsKKyB3cml0ZV9mYWlsZWQ6CisJZGV2X2VycigmY2xpZW50LT5kZXYsICIlczogcmVnaXN0ZXIgd3JpdGUgZmFpbGVkXG4iLCBfX2Z1bmNfXyk7CiAJcmV0dXJuIC1FSU87CiB9CiAKLXN0YXRpYyBpbnQgbWF4NjkwMF9pMmNfdmFsaWRhdGVfY2xpZW50KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCi17Ci0JdTggcmVnc1tNQVg2OTAwX1JFR19MRU5dOwotCXU4IHplcm9fbWFza1tdID0gewotCQkweDgwLAkvKiBzZWNvbmRzICovCi0JCTB4ODAsCS8qIG1pbnV0ZXMgKi8KLQkJMHg0MCwJLyogaG91cnMgKi8KLQkJMHhjMCwJLyogZGF5IG9mIG1vbnRoICovCi0JCTB4ZTAsCS8qIG1vbnRoICovCi0JCTB4ZjgsCS8qIGRheSBvZiB3ZWVrICovCi0JCTB4MDAsCS8qIHllYXIgKi8KLQkJMHg3ZiwJLyogY29udHJvbCAqLwotCX07Ci0JaW50IGk7Ci0JaW50IHJjOwotCWludCByZXNlcnZlZDsKLQotCXJlc2VydmVkID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwgTUFYNjkwMF9SRUdfUkVTRVJWRURfUkVBRCk7Ci0JaWYgKHJlc2VydmVkICE9IDB4MDcpCi0JCXJldHVybiAtRU5PREVWOwotCi0JcmMgPSBtYXg2OTAwX2kyY19yZWFkX3JlZ3MoY2xpZW50LCByZWdzKTsKLQlpZiAocmMgPCAwKQotCQlyZXR1cm4gcmM7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh6ZXJvX21hc2spOyArK2kpIHsKLQkJaWYgKHJlZ3NbaV0gJiB6ZXJvX21hc2tbaV0pCi0JCQlyZXR1cm4gLUVOT0RFVjsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIGludCBtYXg2OTAwX2kyY19yZWFkX3RpbWUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgc3RydWN0IHJ0Y190aW1lICp0bSkKIHsKIAlpbnQgcmM7CkBAIC0xOTYsMTQgKzE1MCwxNCBAQAogCWlmIChyYyA8IDApCiAJCXJldHVybiByYzsKIAotCXRtLT50bV9zZWMgPSBCQ0QyQklOKHJlZ3NbTUFYNjkwMF9SRUdfU0NdKTsKLQl0bS0+dG1fbWluID0gQkNEMkJJTihyZWdzW01BWDY5MDBfUkVHX01OXSk7Ci0JdG0tPnRtX2hvdXIgPSBCQ0QyQklOKHJlZ3NbTUFYNjkwMF9SRUdfSFJdICYgMHgzZik7Ci0JdG0tPnRtX21kYXkgPSBCQ0QyQklOKHJlZ3NbTUFYNjkwMF9SRUdfRFRdKTsKLQl0bS0+dG1fbW9uID0gQkNEMkJJTihyZWdzW01BWDY5MDBfUkVHX01PXSkgLSAxOwotCXRtLT50bV95ZWFyID0gQkNEMkJJTihyZWdzW01BWDY5MDBfUkVHX1lSXSkgKwotCQkgICAgICBCQ0QyQklOKHJlZ3NbTUFYNjkwMF9SRUdfQ0VOVFVSWV0pICogMTAwIC0gMTkwMDsKLQl0bS0+dG1fd2RheSA9IEJDRDJCSU4ocmVnc1tNQVg2OTAwX1JFR19EV10pOworCXRtLT50bV9zZWMgPSBiY2QyYmluKHJlZ3NbTUFYNjkwMF9SRUdfU0NdKTsKKwl0bS0+dG1fbWluID0gYmNkMmJpbihyZWdzW01BWDY5MDBfUkVHX01OXSk7CisJdG0tPnRtX2hvdXIgPSBiY2QyYmluKHJlZ3NbTUFYNjkwMF9SRUdfSFJdICYgMHgzZik7CisJdG0tPnRtX21kYXkgPSBiY2QyYmluKHJlZ3NbTUFYNjkwMF9SRUdfRFRdKTsKKwl0bS0+dG1fbW9uID0gYmNkMmJpbihyZWdzW01BWDY5MDBfUkVHX01PXSkgLSAxOworCXRtLT50bV95ZWFyID0gYmNkMmJpbihyZWdzW01BWDY5MDBfUkVHX1lSXSkgKworCQkgICAgICBiY2QyYmluKHJlZ3NbTUFYNjkwMF9SRUdfQ0VOVFVSWV0pICogMTAwIC0gMTkwMDsKKwl0bS0+dG1fd2RheSA9IGJjZDJiaW4ocmVnc1tNQVg2OTAwX1JFR19EV10pOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0yMTEsNyArMTY1LDcgQEAKIHN0YXRpYyBpbnQgbWF4NjkwMF9pMmNfY2xlYXJfd3JpdGVfcHJvdGVjdChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQogewogCWludCByYzsKLQlyYyA9IGkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEgKGNsaWVudCwgTUFYNjkwMF9SRUdfQ09OVFJPTF9XUklURSwgMCk7CisJcmMgPSBpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgTUFYNjkwMF9SRUdfQ09OVFJPTF9XUklURSwgMCk7CiAJaWYgKHJjIDwgMCkgewogCQlkZXZfZXJyKCZjbGllbnQtPmRldiwgIiVzOiBjb250cm9sIHJlZ2lzdGVyIHdyaXRlIGZhaWxlZFxuIiwKIAkJCV9fZnVuY19fKTsKQEAgLTIyMCw4ICsxNzQsOCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IG1heDY5MDBfaTJjX3NldF90aW1lKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCi0JCQkJc3RydWN0IHJ0Y190aW1lIGNvbnN0ICp0bSkKK3N0YXRpYyBpbnQKK21heDY5MDBfaTJjX3NldF90aW1lKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHN0cnVjdCBydGNfdGltZSBjb25zdCAqdG0pCiB7CiAJdTggcmVnc1tNQVg2OTAwX1JFR19MRU5dOwogCWludCByYzsKQEAgLTIzMCwxNCArMTg0LDE0IEBACiAJaWYgKHJjIDwgMCkKIAkJcmV0dXJuIHJjOwogCi0JcmVnc1tNQVg2OTAwX1JFR19TQ10gPSBCSU4yQkNEKHRtLT50bV9zZWMpOwotCXJlZ3NbTUFYNjkwMF9SRUdfTU5dID0gQklOMkJDRCh0bS0+dG1fbWluKTsKLQlyZWdzW01BWDY5MDBfUkVHX0hSXSA9IEJJTjJCQ0QodG0tPnRtX2hvdXIpOwotCXJlZ3NbTUFYNjkwMF9SRUdfRFRdID0gQklOMkJDRCh0bS0+dG1fbWRheSk7Ci0JcmVnc1tNQVg2OTAwX1JFR19NT10gPSBCSU4yQkNEKHRtLT50bV9tb24gKyAxKTsKLQlyZWdzW01BWDY5MDBfUkVHX0RXXSA9IEJJTjJCQ0QodG0tPnRtX3dkYXkpOwotCXJlZ3NbTUFYNjkwMF9SRUdfWVJdID0gQklOMkJDRCh0bS0+dG1feWVhciAlIDEwMCk7Ci0JcmVnc1tNQVg2OTAwX1JFR19DRU5UVVJZXSA9IEJJTjJCQ0QoKHRtLT50bV95ZWFyICsgMTkwMCkgLyAxMDApOworCXJlZ3NbTUFYNjkwMF9SRUdfU0NdID0gYmluMmJjZCh0bS0+dG1fc2VjKTsKKwlyZWdzW01BWDY5MDBfUkVHX01OXSA9IGJpbjJiY2QodG0tPnRtX21pbik7CisJcmVnc1tNQVg2OTAwX1JFR19IUl0gPSBiaW4yYmNkKHRtLT50bV9ob3VyKTsKKwlyZWdzW01BWDY5MDBfUkVHX0RUXSA9IGJpbjJiY2QodG0tPnRtX21kYXkpOworCXJlZ3NbTUFYNjkwMF9SRUdfTU9dID0gYmluMmJjZCh0bS0+dG1fbW9uICsgMSk7CisJcmVnc1tNQVg2OTAwX1JFR19EV10gPSBiaW4yYmNkKHRtLT50bV93ZGF5KTsKKwlyZWdzW01BWDY5MDBfUkVHX1lSXSA9IGJpbjJiY2QodG0tPnRtX3llYXIgJSAxMDApOworCXJlZ3NbTUFYNjkwMF9SRUdfQ0VOVFVSWV0gPSBiaW4yYmNkKCh0bS0+dG1feWVhciArIDE5MDApIC8gMTAwKTsKIAkvKiBzZXQgd3JpdGUgcHJvdGVjdCAqLwogCXJlZ3NbTUFYNjkwMF9SRUdfQ1RdID0gTUFYNjkwMF9SRUdfQ1RfV1A7CiAKQEAgLTI1OCw4OSArMjEyLDQ5IEBACiAJcmV0dXJuIG1heDY5MDBfaTJjX3NldF90aW1lKHRvX2kyY19jbGllbnQoZGV2KSwgdG0pOwogfQogCi1zdGF0aWMgaW50IG1heDY5MDBfYXR0YWNoX2FkYXB0ZXIoc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyKQorc3RhdGljIGludCBtYXg2OTAwX3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQogewotCXJldHVybiBpMmNfcHJvYmUoYWRhcHRlciwgJmFkZHJfZGF0YSwgbWF4NjkwMF9wcm9iZSk7Ci19Ci0KLXN0YXRpYyBpbnQgbWF4NjkwMF9kZXRhY2hfY2xpZW50KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCi17Ci0Jc3RydWN0IHJ0Y19kZXZpY2UgKmNvbnN0IHJ0YyA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCXN0cnVjdCBydGNfZGV2aWNlICpydGMgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKIAogCWlmIChydGMpCiAJCXJ0Y19kZXZpY2VfdW5yZWdpc3RlcihydGMpOwogCi0JcmV0dXJuIGkyY19kZXRhY2hfY2xpZW50KGNsaWVudCk7CisJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBtYXg2OTAwX2RyaXZlciA9IHsKLQkuZHJpdmVyCQk9IHsKLQkJLm5hbWUJPSBEUlZfTkFNRSwKLQl9LAotCS5pZAkJPSBJMkNfRFJJVkVSSURfTUFYNjkwMCwKLQkuYXR0YWNoX2FkYXB0ZXIgPSBtYXg2OTAwX2F0dGFjaF9hZGFwdGVyLAotCS5kZXRhY2hfY2xpZW50CT0gbWF4NjkwMF9kZXRhY2hfY2xpZW50LAotfTsKLQogc3RhdGljIGNvbnN0IHN0cnVjdCBydGNfY2xhc3Nfb3BzIG1heDY5MDBfcnRjX29wcyA9IHsKLQkucmVhZF90aW1lCT0gbWF4NjkwMF9ydGNfcmVhZF90aW1lLAotCS5zZXRfdGltZQk9IG1heDY5MDBfcnRjX3NldF90aW1lLAorCS5yZWFkX3RpbWUgPSBtYXg2OTAwX3J0Y19yZWFkX3RpbWUsCisJLnNldF90aW1lID0gbWF4NjkwMF9ydGNfc2V0X3RpbWUsCiB9OwogCi1zdGF0aWMgaW50IG1heDY5MDBfcHJvYmUoc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyLCBpbnQgYWRkciwgaW50IGtpbmQpCitzdGF0aWMgaW50CittYXg2OTAwX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCkKIHsKLQlpbnQgcmMgPSAwOwotCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSBOVUxMOwotCXN0cnVjdCBydGNfZGV2aWNlICpydGMgPSBOVUxMOworCXN0cnVjdCBydGNfZGV2aWNlICpydGM7CiAKLQlpZiAoIWkyY19jaGVja19mdW5jdGlvbmFsaXR5KGFkYXB0ZXIsIEkyQ19GVU5DX0kyQykpIHsKLQkJcmMgPSAtRU5PREVWOwotCQlnb3RvIGZhaWxvdXQ7Ci0JfQorCWlmICghaTJjX2NoZWNrX2Z1bmN0aW9uYWxpdHkoY2xpZW50LT5hZGFwdGVyLCBJMkNfRlVOQ19JMkMpKQorCQlyZXR1cm4gLUVOT0RFVjsKIAotCWNsaWVudCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBpMmNfY2xpZW50KSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKGNsaWVudCA9PSBOVUxMKSB7Ci0JCXJjID0gLUVOT01FTTsKLQkJZ290byBmYWlsb3V0OwotCX0KLQotCWNsaWVudC0+YWRkciA9IGFkZHI7Ci0JY2xpZW50LT5hZGFwdGVyID0gYWRhcHRlcjsKLQljbGllbnQtPmRyaXZlciA9ICZtYXg2OTAwX2RyaXZlcjsKLQlzdHJsY3B5KGNsaWVudC0+bmFtZSwgRFJWX05BTUUsIEkyQ19OQU1FX1NJWkUpOwotCi0JaWYgKGtpbmQgPCAwKSB7Ci0JCXJjID0gbWF4NjkwMF9pMmNfdmFsaWRhdGVfY2xpZW50KGNsaWVudCk7Ci0JCWlmIChyYyA8IDApCi0JCQlnb3RvIGZhaWxvdXQ7Ci0JfQotCi0JcmMgPSBpMmNfYXR0YWNoX2NsaWVudChjbGllbnQpOwotCWlmIChyYyA8IDApCi0JCWdvdG8gZmFpbG91dDsKLQotCWRldl9pbmZvKCZjbGllbnQtPmRldiwKLQkJICJjaGlwIGZvdW5kLCBkcml2ZXIgdmVyc2lvbiAiIERSVl9WRVJTSU9OICJcbiIpOworCWRldl9pbmZvKCZjbGllbnQtPmRldiwgImNoaXAgZm91bmQsIGRyaXZlciB2ZXJzaW9uICIgRFJWX1ZFUlNJT04gIlxuIik7CiAKIAlydGMgPSBydGNfZGV2aWNlX3JlZ2lzdGVyKG1heDY5MDBfZHJpdmVyLmRyaXZlci5uYW1lLAotCQkJCSAgJmNsaWVudC0+ZGV2LAotCQkJCSAgJm1heDY5MDBfcnRjX29wcywgVEhJU19NT0RVTEUpOwotCWlmIChJU19FUlIocnRjKSkgewotCQlyYyA9IFBUUl9FUlIocnRjKTsKLQkJZ290byBmYWlsb3V0X2RldGFjaDsKLQl9CisJCQkJICAmY2xpZW50LT5kZXYsICZtYXg2OTAwX3J0Y19vcHMsIFRISVNfTU9EVUxFKTsKKwlpZiAoSVNfRVJSKHJ0YykpCisJCXJldHVybiBQVFJfRVJSKHJ0Yyk7CiAKIAlpMmNfc2V0X2NsaWVudGRhdGEoY2xpZW50LCBydGMpOwogCiAJcmV0dXJuIDA7Ci0KLWZhaWxvdXRfZGV0YWNoOgotCWkyY19kZXRhY2hfY2xpZW50KGNsaWVudCk7Ci1mYWlsb3V0OgotCWtmcmVlKGNsaWVudCk7Ci0JcmV0dXJuIHJjOwogfQogCitzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgbWF4NjkwMF9kcml2ZXIgPSB7CisJLmRyaXZlciA9IHsKKwkJICAgLm5hbWUgPSAicnRjLW1heDY5MDAiLAorCQkgICB9LAorCS5wcm9iZSA9IG1heDY5MDBfcHJvYmUsCisJLnJlbW92ZSA9IG1heDY5MDBfcmVtb3ZlLAorfTsKKwogc3RhdGljIGludCBfX2luaXQgbWF4NjkwMF9pbml0KHZvaWQpCiB7CiAJcmV0dXJuIGkyY19hZGRfZHJpdmVyKCZtYXg2OTAwX2RyaXZlcik7CkBAIC0zNTIsNiArMjY2LDcgQEAKIH0KIAogTU9EVUxFX0RFU0NSSVBUSU9OKCJNYXhpbSBNQVg2OTAwIFJUQyBkcml2ZXIiKTsKK01PRFVMRV9BVVRIT1IoIkRhbGUgRmFybnN3b3J0aCA8ZGFsZUBmYXJuc3dvcnRoLm9yZz4iKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIE1PRFVMRV9WRVJTSU9OKERSVl9WRVJTSU9OKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLW1heDY5MDIuYyBiL2RyaXZlcnMvcnRjL3J0Yy1tYXg2OTAyLmMKaW5kZXggNzhiMjU1MS4uMmY2NTA3ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvcnRjLW1heDY5MDIuYworKysgYi9kcml2ZXJzL3J0Yy9ydGMtbWF4NjkwMi5jCkBAIC0xMjQsMTUgKzEyNCwxNSBAQAogCiAJLyogVGhlIGNoaXAgc2VuZHMgZGF0YSBpbiB0aGlzIG9yZGVyOgogCSAqIFNlY29uZHMsIE1pbnV0ZXMsIEhvdXJzLCBEYXRlLCBNb250aCwgRGF5LCBZZWFyICovCi0JZHQtPnRtX3NlYwk9IEJDRDJCSU4oY2hpcC0+YnVmWzFdKTsKLQlkdC0+dG1fbWluCT0gQkNEMkJJTihjaGlwLT5idWZbMl0pOwotCWR0LT50bV9ob3VyCT0gQkNEMkJJTihjaGlwLT5idWZbM10pOwotCWR0LT50bV9tZGF5CT0gQkNEMkJJTihjaGlwLT5idWZbNF0pOwotCWR0LT50bV9tb24JPSBCQ0QyQklOKGNoaXAtPmJ1Zls1XSkgLSAxOwotCWR0LT50bV93ZGF5CT0gQkNEMkJJTihjaGlwLT5idWZbNl0pOwotCWR0LT50bV95ZWFyID0gQkNEMkJJTihjaGlwLT5idWZbN10pOworCWR0LT50bV9zZWMJPSBiY2QyYmluKGNoaXAtPmJ1ZlsxXSk7CisJZHQtPnRtX21pbgk9IGJjZDJiaW4oY2hpcC0+YnVmWzJdKTsKKwlkdC0+dG1faG91cgk9IGJjZDJiaW4oY2hpcC0+YnVmWzNdKTsKKwlkdC0+dG1fbWRheQk9IGJjZDJiaW4oY2hpcC0+YnVmWzRdKTsKKwlkdC0+dG1fbW9uCT0gYmNkMmJpbihjaGlwLT5idWZbNV0pIC0gMTsKKwlkdC0+dG1fd2RheQk9IGJjZDJiaW4oY2hpcC0+YnVmWzZdKTsKKwlkdC0+dG1feWVhciA9IGJjZDJiaW4oY2hpcC0+YnVmWzddKTsKIAotCWNlbnR1cnkgPSBCQ0QyQklOKHRtcCkgKiAxMDA7CisJY2VudHVyeSA9IGJjZDJiaW4odG1wKSAqIDEwMDsKIAogCWR0LT50bV95ZWFyICs9IGNlbnR1cnk7CiAJZHQtPnRtX3llYXIgLT0gMTkwMDsKQEAgLTE2OCwxNSArMTY4LDE1IEBACiAJLyogUmVtb3ZlIHdyaXRlIHByb3RlY3Rpb24gKi8KIAltYXg2OTAyX3NldF9yZWcoZGV2LCAweEYsIDApOwogCi0JbWF4NjkwMl9zZXRfcmVnKGRldiwgMHgwMSwgQklOMkJDRChkdC0+dG1fc2VjKSk7Ci0JbWF4NjkwMl9zZXRfcmVnKGRldiwgMHgwMywgQklOMkJDRChkdC0+dG1fbWluKSk7Ci0JbWF4NjkwMl9zZXRfcmVnKGRldiwgMHgwNSwgQklOMkJDRChkdC0+dG1faG91cikpOworCW1heDY5MDJfc2V0X3JlZyhkZXYsIDB4MDEsIGJpbjJiY2QoZHQtPnRtX3NlYykpOworCW1heDY5MDJfc2V0X3JlZyhkZXYsIDB4MDMsIGJpbjJiY2QoZHQtPnRtX21pbikpOworCW1heDY5MDJfc2V0X3JlZyhkZXYsIDB4MDUsIGJpbjJiY2QoZHQtPnRtX2hvdXIpKTsKIAotCW1heDY5MDJfc2V0X3JlZyhkZXYsIDB4MDcsIEJJTjJCQ0QoZHQtPnRtX21kYXkpKTsKLQltYXg2OTAyX3NldF9yZWcoZGV2LCAweDA5LCBCSU4yQkNEKGR0LT50bV9tb24rMSkpOwotCW1heDY5MDJfc2V0X3JlZyhkZXYsIDB4MEIsIEJJTjJCQ0QoZHQtPnRtX3dkYXkpKTsKLQltYXg2OTAyX3NldF9yZWcoZGV2LCAweDBELCBCSU4yQkNEKGR0LT50bV95ZWFyJTEwMCkpOwotCW1heDY5MDJfc2V0X3JlZyhkZXYsIDB4MTMsIEJJTjJCQ0QoZHQtPnRtX3llYXIvMTAwKSk7CisJbWF4NjkwMl9zZXRfcmVnKGRldiwgMHgwNywgYmluMmJjZChkdC0+dG1fbWRheSkpOworCW1heDY5MDJfc2V0X3JlZyhkZXYsIDB4MDksIGJpbjJiY2QoZHQtPnRtX21vbisxKSk7CisJbWF4NjkwMl9zZXRfcmVnKGRldiwgMHgwQiwgYmluMmJjZChkdC0+dG1fd2RheSkpOworCW1heDY5MDJfc2V0X3JlZyhkZXYsIDB4MEQsIGJpbjJiY2QoZHQtPnRtX3llYXIlMTAwKSk7CisJbWF4NjkwMl9zZXRfcmVnKGRldiwgMHgxMywgYmluMmJjZChkdC0+dG1feWVhci8xMDApKTsKIAogCS8qIENvbXB1bGFiIHVzZWQgYSBkZWxheSBoZXJlLiBIb3dldmVyLCB0aGUgZGF0YXNoZWV0CiAJICogZG9lcyBub3QgbWVudGlvbiBhIGRlbGF5IGJlaW5nIHJlcXVpcmVkIGFueXdoZXJlLi4uICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtb21hcC5jIGIvZHJpdmVycy9ydGMvcnRjLW9tYXAuYwppbmRleCA4ODc2NjA1ZC4uMmNiZWIwNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvcnRjLW9tYXAuYworKysgYi9kcml2ZXJzL3J0Yy9ydGMtb21hcC5jCkBAIC0xODYsMzAgKzE4NiwzMCBAQAogCWlmIChydGNfdmFsaWRfdG0odG0pICE9IDApCiAJCXJldHVybiAtRUlOVkFMOwogCi0JdG0tPnRtX3NlYyA9IEJJTjJCQ0QodG0tPnRtX3NlYyk7Ci0JdG0tPnRtX21pbiA9IEJJTjJCQ0QodG0tPnRtX21pbik7Ci0JdG0tPnRtX2hvdXIgPSBCSU4yQkNEKHRtLT50bV9ob3VyKTsKLQl0bS0+dG1fbWRheSA9IEJJTjJCQ0QodG0tPnRtX21kYXkpOworCXRtLT50bV9zZWMgPSBiaW4yYmNkKHRtLT50bV9zZWMpOworCXRtLT50bV9taW4gPSBiaW4yYmNkKHRtLT50bV9taW4pOworCXRtLT50bV9ob3VyID0gYmluMmJjZCh0bS0+dG1faG91cik7CisJdG0tPnRtX21kYXkgPSBiaW4yYmNkKHRtLT50bV9tZGF5KTsKIAotCXRtLT50bV9tb24gPSBCSU4yQkNEKHRtLT50bV9tb24gKyAxKTsKKwl0bS0+dG1fbW9uID0gYmluMmJjZCh0bS0+dG1fbW9uICsgMSk7CiAKIAkvKiBlcG9jaCA9PSAxOTAwICovCiAJaWYgKHRtLT50bV95ZWFyIDwgMTAwIHx8IHRtLT50bV95ZWFyID4gMTk5KQogCQlyZXR1cm4gLUVJTlZBTDsKLQl0bS0+dG1feWVhciA9IEJJTjJCQ0QodG0tPnRtX3llYXIgLSAxMDApOworCXRtLT50bV95ZWFyID0gYmluMmJjZCh0bS0+dG1feWVhciAtIDEwMCk7CiAKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHZvaWQgYmNkMnRtKHN0cnVjdCBydGNfdGltZSAqdG0pCiB7Ci0JdG0tPnRtX3NlYyA9IEJDRDJCSU4odG0tPnRtX3NlYyk7Ci0JdG0tPnRtX21pbiA9IEJDRDJCSU4odG0tPnRtX21pbik7Ci0JdG0tPnRtX2hvdXIgPSBCQ0QyQklOKHRtLT50bV9ob3VyKTsKLQl0bS0+dG1fbWRheSA9IEJDRDJCSU4odG0tPnRtX21kYXkpOwotCXRtLT50bV9tb24gPSBCQ0QyQklOKHRtLT50bV9tb24pIC0gMTsKKwl0bS0+dG1fc2VjID0gYmNkMmJpbih0bS0+dG1fc2VjKTsKKwl0bS0+dG1fbWluID0gYmNkMmJpbih0bS0+dG1fbWluKTsKKwl0bS0+dG1faG91ciA9IGJjZDJiaW4odG0tPnRtX2hvdXIpOworCXRtLT50bV9tZGF5ID0gYmNkMmJpbih0bS0+dG1fbWRheSk7CisJdG0tPnRtX21vbiA9IGJjZDJiaW4odG0tPnRtX21vbikgLSAxOwogCS8qIGVwb2NoID09IDE5MDAgKi8KLQl0bS0+dG1feWVhciA9IEJDRDJCSU4odG0tPnRtX3llYXIpICsgMTAwOworCXRtLT50bV95ZWFyID0gYmNkMmJpbih0bS0+dG1feWVhcikgKyAxMDA7CiB9CiAKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLXBjZjg1NjMuYyBiL2RyaXZlcnMvcnRjL3J0Yy1wY2Y4NTYzLmMKaW5kZXggNzQ4YTUwMi4uYjcyNTkxMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvcnRjLXBjZjg1NjMuYworKysgYi9kcml2ZXJzL3J0Yy9ydGMtcGNmODU2My5jCkBAIC05NywxMyArOTcsMTMgQEAKIAkJYnVmWzhdKTsKIAogCi0JdG0tPnRtX3NlYyA9IEJDRDJCSU4oYnVmW1BDRjg1NjNfUkVHX1NDXSAmIDB4N0YpOwotCXRtLT50bV9taW4gPSBCQ0QyQklOKGJ1ZltQQ0Y4NTYzX1JFR19NTl0gJiAweDdGKTsKLQl0bS0+dG1faG91ciA9IEJDRDJCSU4oYnVmW1BDRjg1NjNfUkVHX0hSXSAmIDB4M0YpOyAvKiBydGMgaHIgMC0yMyAqLwotCXRtLT50bV9tZGF5ID0gQkNEMkJJTihidWZbUENGODU2M19SRUdfRE1dICYgMHgzRik7CisJdG0tPnRtX3NlYyA9IGJjZDJiaW4oYnVmW1BDRjg1NjNfUkVHX1NDXSAmIDB4N0YpOworCXRtLT50bV9taW4gPSBiY2QyYmluKGJ1ZltQQ0Y4NTYzX1JFR19NTl0gJiAweDdGKTsKKwl0bS0+dG1faG91ciA9IGJjZDJiaW4oYnVmW1BDRjg1NjNfUkVHX0hSXSAmIDB4M0YpOyAvKiBydGMgaHIgMC0yMyAqLworCXRtLT50bV9tZGF5ID0gYmNkMmJpbihidWZbUENGODU2M19SRUdfRE1dICYgMHgzRik7CiAJdG0tPnRtX3dkYXkgPSBidWZbUENGODU2M19SRUdfRFddICYgMHgwNzsKLQl0bS0+dG1fbW9uID0gQkNEMkJJTihidWZbUENGODU2M19SRUdfTU9dICYgMHgxRikgLSAxOyAvKiBydGMgbW4gMS0xMiAqLwotCXRtLT50bV95ZWFyID0gQkNEMkJJTihidWZbUENGODU2M19SRUdfWVJdKTsKKwl0bS0+dG1fbW9uID0gYmNkMmJpbihidWZbUENGODU2M19SRUdfTU9dICYgMHgxRikgLSAxOyAvKiBydGMgbW4gMS0xMiAqLworCXRtLT50bV95ZWFyID0gYmNkMmJpbihidWZbUENGODU2M19SRUdfWVJdKTsKIAlpZiAodG0tPnRtX3llYXIgPCA3MCkKIAkJdG0tPnRtX3llYXIgKz0gMTAwOwkvKiBhc3N1bWUgd2UgYXJlIGluIDE5NzAuLi4yMDY5ICovCiAJLyogZGV0ZWN0IHRoZSBwb2xhcml0eSBoZXVyaXN0aWNhbGx5LiBzZWUgbm90ZSBhYm92ZS4gKi8KQEAgLTEzOCwxNyArMTM4LDE3IEBACiAJCXRtLT50bV9tZGF5LCB0bS0+dG1fbW9uLCB0bS0+dG1feWVhciwgdG0tPnRtX3dkYXkpOwogCiAJLyogaG91cnMsIG1pbnV0ZXMgYW5kIHNlY29uZHMgKi8KLQlidWZbUENGODU2M19SRUdfU0NdID0gQklOMkJDRCh0bS0+dG1fc2VjKTsKLQlidWZbUENGODU2M19SRUdfTU5dID0gQklOMkJDRCh0bS0+dG1fbWluKTsKLQlidWZbUENGODU2M19SRUdfSFJdID0gQklOMkJDRCh0bS0+dG1faG91cik7CisJYnVmW1BDRjg1NjNfUkVHX1NDXSA9IGJpbjJiY2QodG0tPnRtX3NlYyk7CisJYnVmW1BDRjg1NjNfUkVHX01OXSA9IGJpbjJiY2QodG0tPnRtX21pbik7CisJYnVmW1BDRjg1NjNfUkVHX0hSXSA9IGJpbjJiY2QodG0tPnRtX2hvdXIpOwogCi0JYnVmW1BDRjg1NjNfUkVHX0RNXSA9IEJJTjJCQ0QodG0tPnRtX21kYXkpOworCWJ1ZltQQ0Y4NTYzX1JFR19ETV0gPSBiaW4yYmNkKHRtLT50bV9tZGF5KTsKIAogCS8qIG1vbnRoLCAxIC0gMTIgKi8KLQlidWZbUENGODU2M19SRUdfTU9dID0gQklOMkJDRCh0bS0+dG1fbW9uICsgMSk7CisJYnVmW1BDRjg1NjNfUkVHX01PXSA9IGJpbjJiY2QodG0tPnRtX21vbiArIDEpOwogCiAJLyogeWVhciBhbmQgY2VudHVyeSAqLwotCWJ1ZltQQ0Y4NTYzX1JFR19ZUl0gPSBCSU4yQkNEKHRtLT50bV95ZWFyICUgMTAwKTsKKwlidWZbUENGODU2M19SRUdfWVJdID0gYmluMmJjZCh0bS0+dG1feWVhciAlIDEwMCk7CiAJaWYgKHBjZjg1NjMtPmNfcG9sYXJpdHkgPyAodG0tPnRtX3llYXIgPj0gMTAwKSA6ICh0bS0+dG1feWVhciA8IDEwMCkpCiAJCWJ1ZltQQ0Y4NTYzX1JFR19NT10gfD0gUENGODU2M19NT19DOwogCkBAIC0xNzksNTggKzE3OSw2IEBACiAJdW5zaWduZWQgY2hhciBtYXg7CiB9OwogCi1zdGF0aWMgaW50IHBjZjg1NjNfdmFsaWRhdGVfY2xpZW50KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCi17Ci0JaW50IGk7Ci0KLQlzdGF0aWMgY29uc3Qgc3RydWN0IHBjZjg1NjNfbGltaXQgcGF0dGVybltdID0gewotCQkvKiByZWdpc3RlciwgbWFzaywgbWluLCBtYXggKi8KLQkJeyBQQ0Y4NTYzX1JFR19TQywJMHg3RiwJMCwJNTkJfSwKLQkJeyBQQ0Y4NTYzX1JFR19NTiwJMHg3RiwJMCwJNTkJfSwKLQkJeyBQQ0Y4NTYzX1JFR19IUiwJMHgzRiwJMCwJMjMJfSwKLQkJeyBQQ0Y4NTYzX1JFR19ETSwJMHgzRiwJMCwJMzEJfSwKLQkJeyBQQ0Y4NTYzX1JFR19NTywJMHgxRiwJMCwJMTIJfSwKLQl9OwotCi0JLyogY2hlY2sgbGltaXRzIChvbmx5IHJlZ2lzdGVycyB3aXRoIGJjZCB2YWx1ZXMpICovCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocGF0dGVybik7IGkrKykgewotCQlpbnQgeGZlcjsKLQkJdW5zaWduZWQgY2hhciB2YWx1ZTsKLQkJdW5zaWduZWQgY2hhciBidWYgPSBwYXR0ZXJuW2ldLnJlZzsKLQotCQlzdHJ1Y3QgaTJjX21zZyBtc2dzW10gPSB7Ci0JCQl7IGNsaWVudC0+YWRkciwgMCwgMSwgJmJ1ZiB9LAotCQkJeyBjbGllbnQtPmFkZHIsIEkyQ19NX1JELCAxLCAmYnVmIH0sCi0JCX07Ci0KLQkJeGZlciA9IGkyY190cmFuc2ZlcihjbGllbnQtPmFkYXB0ZXIsIG1zZ3MsIEFSUkFZX1NJWkUobXNncykpOwotCi0JCWlmICh4ZmVyICE9IEFSUkFZX1NJWkUobXNncykpIHsKLQkJCWRldl9lcnIoJmNsaWVudC0+ZGV2LAotCQkJCSIlczogY291bGQgbm90IHJlYWQgcmVnaXN0ZXIgMHglMDJYXG4iLAotCQkJCV9fZnVuY19fLCBwYXR0ZXJuW2ldLnJlZyk7Ci0KLQkJCXJldHVybiAtRUlPOwotCQl9Ci0KLQkJdmFsdWUgPSBCQ0QyQklOKGJ1ZiAmIHBhdHRlcm5baV0ubWFzayk7Ci0KLQkJaWYgKHZhbHVlID4gcGF0dGVybltpXS5tYXggfHwKLQkJCXZhbHVlIDwgcGF0dGVybltpXS5taW4pIHsKLQkJCWRldl9kYmcoJmNsaWVudC0+ZGV2LAotCQkJCSIlczogcGF0dGVybj0lZCwgcmVnPSV4LCBtYXNrPTB4JTAyeCwgbWluPSVkLCAiCi0JCQkJIm1heD0lZCwgdmFsdWU9JWQsIHJhdz0weCUwMlhcbiIsCi0JCQkJX19mdW5jX18sIGksIHBhdHRlcm5baV0ucmVnLCBwYXR0ZXJuW2ldLm1hc2ssCi0JCQkJcGF0dGVybltpXS5taW4sIHBhdHRlcm5baV0ubWF4LAotCQkJCXZhbHVlLCBidWYpOwotCi0JCQlyZXR1cm4gLUVOT0RFVjsKLQkJfQotCX0KLQotCXJldHVybiAwOwotfQotCiBzdGF0aWMgaW50IHBjZjg1NjNfcnRjX3JlYWRfdGltZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBydGNfdGltZSAqdG0pCiB7CiAJcmV0dXJuIHBjZjg1NjNfZ2V0X2RhdGV0aW1lKHRvX2kyY19jbGllbnQoZGV2KSwgdG0pOwpAQCAtMjYyLDEyICsyMTAsNiBAQAogCWlmICghcGNmODU2MykKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQkvKiBWZXJpZnkgdGhlIGNoaXAgaXMgcmVhbGx5IGFuIFBDRjg1NjMgKi8KLQlpZiAocGNmODU2M192YWxpZGF0ZV9jbGllbnQoY2xpZW50KSA8IDApIHsKLQkJZXJyID0gLUVOT0RFVjsKLQkJZ290byBleGl0X2tmcmVlOwotCX0KLQogCWRldl9pbmZvKCZjbGllbnQtPmRldiwgImNoaXAgZm91bmQsIGRyaXZlciB2ZXJzaW9uICIgRFJWX1ZFUlNJT04gIlxuIik7CiAKIAlwY2Y4NTYzLT5ydGMgPSBydGNfZGV2aWNlX3JlZ2lzdGVyKHBjZjg1NjNfZHJpdmVyLmRyaXZlci5uYW1lLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLXBjZjg1ODMuYyBiL2RyaXZlcnMvcnRjL3J0Yy1wY2Y4NTgzLmMKaW5kZXggZDM4OGM2Ni4uN2QzM2NkYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvcnRjLXBjZjg1ODMuYworKysgYi9kcml2ZXJzL3J0Yy9ydGMtcGNmODU4My5jCkBAIC03NiwxMSArNzYsMTEgQEAKIAkJYnVmWzRdICY9IDB4M2Y7CiAJCWJ1Zls1XSAmPSAweDFmOwogCi0JCWR0LT50bV9zZWMgPSBCQ0QyQklOKGJ1ZlsxXSk7Ci0JCWR0LT50bV9taW4gPSBCQ0QyQklOKGJ1ZlsyXSk7Ci0JCWR0LT50bV9ob3VyID0gQkNEMkJJTihidWZbM10pOwotCQlkdC0+dG1fbWRheSA9IEJDRDJCSU4oYnVmWzRdKTsKLQkJZHQtPnRtX21vbiA9IEJDRDJCSU4oYnVmWzVdKSAtIDE7CisJCWR0LT50bV9zZWMgPSBiY2QyYmluKGJ1ZlsxXSk7CisJCWR0LT50bV9taW4gPSBiY2QyYmluKGJ1ZlsyXSk7CisJCWR0LT50bV9ob3VyID0gYmNkMmJpbihidWZbM10pOworCQlkdC0+dG1fbWRheSA9IGJjZDJiaW4oYnVmWzRdKTsKKwkJZHQtPnRtX21vbiA9IGJjZDJiaW4oYnVmWzVdKSAtIDE7CiAJfQogCiAJcmV0dXJuIHJldCA9PSAyID8gMCA6IC1FSU87CkBAIC05NCwxNCArOTQsMTQgQEAKIAlidWZbMF0gPSAwOwogCWJ1ZlsxXSA9IGdldF9jdHJsKGNsaWVudCkgfCAweDgwOwogCWJ1ZlsyXSA9IDA7Ci0JYnVmWzNdID0gQklOMkJDRChkdC0+dG1fc2VjKTsKLQlidWZbNF0gPSBCSU4yQkNEKGR0LT50bV9taW4pOwotCWJ1Zls1XSA9IEJJTjJCQ0QoZHQtPnRtX2hvdXIpOworCWJ1ZlszXSA9IGJpbjJiY2QoZHQtPnRtX3NlYyk7CisJYnVmWzRdID0gYmluMmJjZChkdC0+dG1fbWluKTsKKwlidWZbNV0gPSBiaW4yYmNkKGR0LT50bV9ob3VyKTsKIAogCWlmIChkYXRldG9vKSB7CiAJCWxlbiA9IDg7Ci0JCWJ1Zls2XSA9IEJJTjJCQ0QoZHQtPnRtX21kYXkpIHwgKGR0LT50bV95ZWFyIDw8IDYpOwotCQlidWZbN10gPSBCSU4yQkNEKGR0LT50bV9tb24gKyAxKSAgfCAoZHQtPnRtX3dkYXkgPDwgNSk7CisJCWJ1Zls2XSA9IGJpbjJiY2QoZHQtPnRtX21kYXkpIHwgKGR0LT50bV95ZWFyIDw8IDYpOworCQlidWZbN10gPSBiaW4yYmNkKGR0LT50bV9tb24gKyAxKSAgfCAoZHQtPnRtX3dkYXkgPDwgNSk7CiAJfQogCiAJcmV0ID0gaTJjX21hc3Rlcl9zZW5kKGNsaWVudCwgKGNoYXIgKilidWYsIGxlbik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtcGwwMzAuYyBiL2RyaXZlcnMvcnRjL3J0Yy1wbDAzMC5jCmluZGV4IDg0NDhlZWIuLjgyNjE1MzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL3J0Yy1wbDAzMC5jCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy1wbDAzMC5jCkBAIC0zNCwxNSArMzQsNiBAQAogCXJldHVybiBJUlFfSEFORExFRDsKIH0KIAotc3RhdGljIGludCBwbDAzMF9vcGVuKHN0cnVjdCBkZXZpY2UgKmRldikKLXsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgcGwwMzBfcmVsZWFzZShzdHJ1Y3QgZGV2aWNlICpkZXYpCi17Ci19Ci0KIHN0YXRpYyBpbnQgcGwwMzBfaW9jdGwoc3RydWN0IGRldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKIHsKIAlyZXR1cm4gLUVOT0lPQ1RMQ01EOwpAQCAtMTA0LDggKzk1LDYgQEAKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBydGNfY2xhc3Nfb3BzIHBsMDMwX29wcyA9IHsKLQkub3BlbgkJPSBwbDAzMF9vcGVuLAotCS5yZWxlYXNlCT0gcGwwMzBfcmVsZWFzZSwKIAkuaW9jdGwJCT0gcGwwMzBfaW9jdGwsCiAJLnJlYWRfdGltZQk9IHBsMDMwX3JlYWRfdGltZSwKIAkuc2V0X3RpbWUJPSBwbDAzMF9zZXRfdGltZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy1wbDAzMS5jIGIvZHJpdmVycy9ydGMvcnRjLXBsMDMxLmMKaW5kZXggMDhiNDYxMC4uMzMzZWVjNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvcnRjLXBsMDMxLmMKKysrIGIvZHJpdmVycy9ydGMvcnRjLXBsMDMxLmMKQEAgLTQ1LDE4ICs0NSw2IEBACiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQogCi1zdGF0aWMgaW50IHBsMDMxX29wZW4oc3RydWN0IGRldmljZSAqZGV2KQotewotCS8qCi0JICogV2UgcmVxdWVzdCBJUlEgaW4gcGwwMzFfcHJvYmUsIHNvIG5vdGhpbmcgdG8gZG8gaGVyZS4uLgotCSAqLwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBwbDAzMV9yZWxlYXNlKHN0cnVjdCBkZXZpY2UgKmRldikKLXsKLX0KLQogc3RhdGljIGludCBwbDAzMV9pb2N0bChzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQogewogCXN0cnVjdCBwbDAzMV9sb2NhbCAqbGRhdGEgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKQEAgLTExOCw4ICsxMDYsNiBAQAogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHJ0Y19jbGFzc19vcHMgcGwwMzFfb3BzID0gewotCS5vcGVuID0gcGwwMzFfb3BlbiwKLQkucmVsZWFzZSA9IHBsMDMxX3JlbGVhc2UsCiAJLmlvY3RsID0gcGwwMzFfaW9jdGwsCiAJLnJlYWRfdGltZSA9IHBsMDMxX3JlYWRfdGltZSwKIAkuc2V0X3RpbWUgPSBwbDAzMV9zZXRfdGltZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy1yOTcwMS5jIGIvZHJpdmVycy9ydGMvcnRjLXI5NzAxLmMKaW5kZXggMzk1OTg1Yi4uNDIwMjhmMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvcnRjLXI5NzAxLmMKKysrIGIvZHJpdmVycy9ydGMvcnRjLXI5NzAxLmMKQEAgLTgwLDEzICs4MCwxMyBAQAogCiAJbWVtc2V0KGR0LCAwLCBzaXplb2YoKmR0KSk7CiAKLQlkdC0+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+dG1feWVhciA9IGJjZDJiaW4ocnhidWZbUlM1QzM0OF9SRUdfWUVBUl0pICsKIAkJKChyeGJ1ZltSUzVDMzQ4X1JFR19NT05USF0gJiBSUzVDMzQ4X0JJVF9ZMkspID8gMTAwIDogMCk7CiAKIAlpZiAocnRjX3ZhbGlkX3RtKHRtKSA8IDApIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy1yczVjMzcyLmMgYi9kcml2ZXJzL3J0Yy9ydGMtcnM1YzM3Mi5jCmluZGV4IDU2Y2FmNmIuLjJmMmM2OGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL3J0Yy1yczVjMzcyLmMKKysrIGIvZHJpdmVycy9ydGMvcnRjLXJzNWMzNzIuYwpAQCAtMSw4ICsxLDkgQEAKIC8qCi0gKiBBbiBJMkMgZHJpdmVyIGZvciBSaWNvaCBSUzVDMzcyIGFuZCBSVjVDMzhbNjddIFJUQ3MKKyAqIEFuIEkyQyBkcml2ZXIgZm9yIFJpY29oIFJTNUMzNzIsIFIyMDI1Uy9EIGFuZCBSVjVDMzhbNjddIFJUQ3MKICAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDUgUGF2ZWwgTWlyb25jaGlrIDxwbWlyb25jaGlrQG9wdGlmYWNpby5uZXQ+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYgVG93ZXIgVGVjaG5vbG9naWVzCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggUGF1bCBNdW5kdAogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwpAQCAtMTMsNyArMTQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3J0Yy5oPgogI2luY2x1ZGUgPGxpbnV4L2JjZC5oPgogCi0jZGVmaW5lIERSVl9WRVJTSU9OICIwLjUiCisjZGVmaW5lIERSVl9WRVJTSU9OICIwLjYiCiAKIAogLyoKQEAgLTUxLDcgKzUyLDggQEAKICMJZGVmaW5lIFJTNUNfQ1RSTDFfQ1Q0CQkoNCA8PCAwKQkvKiAxIEh6IGxldmVsIGlycSAqLwogI2RlZmluZSBSUzVDX1JFR19DVFJMMgkJMTUKICMJZGVmaW5lIFJTNUMzNzJfQ1RSTDJfMjQJCSgxIDw8IDUpCi0jCWRlZmluZSBSUzVDX0NUUkwyX1hTVFAJCSgxIDw8IDQpCisjCWRlZmluZSBSMjAyNV9DVFJMMl9YU1QJCSgxIDw8IDUpCisjCWRlZmluZSBSUzVDX0NUUkwyX1hTVFAJCSgxIDw8IDQpCS8qIG9ubHkgaWYgIVIyMDI1Uy9EICovCiAjCWRlZmluZSBSUzVDX0NUUkwyX0NURkcJCSgxIDw8IDIpCiAjCWRlZmluZSBSUzVDX0NUUkwyX0FBRkcJCSgxIDw8IDEpCS8qIG9yIFdBRkcgKi8KICMJZGVmaW5lIFJTNUNfQ1RSTDJfQkFGRwkJKDEgPDwgMCkJLyogb3IgREFGRyAqLwpAQCAtNjMsNiArNjUsNyBAQAogCiBlbnVtIHJ0Y190eXBlIHsKIAlydGNfdW5kZWYgPSAwLAorCXJ0Y19yMjAyNXNkLAogCXJ0Y19yczVjMzcyYSwKIAlydGNfcnM1YzM3MmIsCiAJcnRjX3J2NWMzODYsCkBAIC03MCw2ICs3Myw3IEBACiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgcnM1YzM3Ml9pZFtdID0geworCXsgInIyMDI1c2QiLCBydGNfcjIwMjVzZCB9LAogCXsgInJzNWMzNzJhIiwgcnRjX3JzNWMzNzJhIH0sCiAJeyAicnM1YzM3MmIiLCBydGNfcnM1YzM3MmIgfSwKIAl7ICJydjVjMzg2IiwgcnRjX3J2NWMzODYgfSwKQEAgLTg5LDYgKzkzLDcgQEAKIAllbnVtIHJ0Y190eXBlCQl0eXBlOwogCXVuc2lnbmVkCQl0aW1lMjQ6MTsKIAl1bnNpZ25lZAkJaGFzX2lycToxOworCXVuc2lnbmVkCQlzbWJ1czoxOwogCWNoYXIJCQlidWZbMTddOwogCWNoYXIJCQkqcmVnczsKIH07CkBAIC0xMDYsMTAgKzExMSwyNSBAQAogCSAqCiAJICogVGhlIGZpcnN0IG1ldGhvZCBkb2Vzbid0IHdvcmsgd2l0aCB0aGUgaW9wM3h4IGFkYXB0ZXIgZHJpdmVyLCBvbiBhdAogCSAqIGxlYXN0IDgwMjE5IGNoaXBzOyB0aGlzIHdvcmtzIGFyb3VuZCB0aGF0IGJ1Zy4KKwkgKgorCSAqIFRoZSB0aGlyZCBtZXRob2Qgb24gdGhlIG90aGVyIGhhbmQgZG9lc24ndCB3b3JrIGZvciB0aGUgU01CdXMtb25seQorCSAqIGNvbmZpZ3VyYXRpb25zLCBzbyB3ZSB1c2UgdGhlIHRoZSBmaXJzdCBtZXRob2QgdGhlcmUsIHN0cmlwcGluZyBvZmYKKwkgKiB0aGUgZXh0cmEgcmVnaXN0ZXIgaW4gdGhlIHByb2Nlc3MuCiAJICovCi0JaWYgKChpMmNfdHJhbnNmZXIoY2xpZW50LT5hZGFwdGVyLCBtc2dzLCAxKSkgIT0gMSkgewotCQlkZXZfd2FybigmY2xpZW50LT5kZXYsICJjYW4ndCByZWFkIHJlZ2lzdGVyc1xuIik7Ci0JCXJldHVybiAtRUlPOworCWlmIChyczVjLT5zbWJ1cykgeworCQlpbnQgYWRkciA9IFJTNUNfQUREUihSUzVDMzcyX1JFR19TRUNTKTsKKwkJaW50IHNpemUgPSBzaXplb2YocnM1Yy0+YnVmKSAtIDE7CisKKwkJaWYgKGkyY19zbWJ1c19yZWFkX2kyY19ibG9ja19kYXRhKGNsaWVudCwgYWRkciwgc2l6ZSwKKwkJCQkJCSAgcnM1Yy0+YnVmICsgMSkgIT0gc2l6ZSkgeworCQkJZGV2X3dhcm4oJmNsaWVudC0+ZGV2LCAiY2FuJ3QgcmVhZCByZWdpc3RlcnNcbiIpOworCQkJcmV0dXJuIC1FSU87CisJCX0KKwl9IGVsc2UgeworCQlpZiAoKGkyY190cmFuc2ZlcihjbGllbnQtPmFkYXB0ZXIsIG1zZ3MsIDEpKSAhPSAxKSB7CisJCQlkZXZfd2FybigmY2xpZW50LT5kZXYsICJjYW4ndCByZWFkIHJlZ2lzdGVyc1xuIik7CisJCQlyZXR1cm4gLUVJTzsKKwkJfQogCX0KIAogCWRldl9kYmcoJmNsaWVudC0+ZGV2LApAQCAtMTI4LDkgKzE0OCw5IEBACiAJdW5zaWduZWQJaG91cjsKIAogCWlmIChyczVjLT50aW1lMjQpCi0JCXJldHVybiBCQ0QyQklOKHJlZyAmIDB4M2YpOworCQlyZXR1cm4gYmNkMmJpbihyZWcgJiAweDNmKTsKIAotCWhvdXIgPSBCQ0QyQklOKHJlZyAmIDB4MWYpOworCWhvdXIgPSBiY2QyYmluKHJlZyAmIDB4MWYpOwogCWlmIChob3VyID09IDEyKQogCQlob3VyID0gMDsKIAlpZiAocmVnICYgMHgyMCkKQEAgLTE0MSwxNSArMTYxLDE1IEBACiBzdGF0aWMgdW5zaWduZWQgcnM1Y19ocjJyZWcoc3RydWN0IHJzNWMzNzIgKnJzNWMsIHVuc2lnbmVkIGhvdXIpCiB7CiAJaWYgKHJzNWMtPnRpbWUyNCkKLQkJcmV0dXJuIEJJTjJCQ0QoaG91cik7CisJCXJldHVybiBiaW4yYmNkKGhvdXIpOwogCiAJaWYgKGhvdXIgPiAxMikKLQkJcmV0dXJuIDB4MjAgfCBCSU4yQkNEKGhvdXIgLSAxMik7CisJCXJldHVybiAweDIwIHwgYmluMmJjZChob3VyIC0gMTIpOwogCWlmIChob3VyID09IDEyKQotCQlyZXR1cm4gMHgyMCB8IEJJTjJCQ0QoMTIpOworCQlyZXR1cm4gMHgyMCB8IGJpbjJiY2QoMTIpOwogCWlmIChob3VyID09IDApCi0JCXJldHVybiBCSU4yQkNEKDEyKTsKLQlyZXR1cm4gQklOMkJDRChob3VyKTsKKwkJcmV0dXJuIGJpbjJiY2QoMTIpOworCXJldHVybiBiaW4yYmNkKGhvdXIpOwogfQogCiBzdGF0aWMgaW50IHJzNWMzNzJfZ2V0X2RhdGV0aW1lKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHN0cnVjdCBydGNfdGltZSAqdG0pCkBAIC0xNjAsMTggKzE4MCwxOCBAQAogCWlmIChzdGF0dXMgPCAwKQogCQlyZXR1cm4gc3RhdHVzOwogCi0JdG0tPnRtX3NlYyA9IEJDRDJCSU4ocnM1Yy0+cmVnc1tSUzVDMzcyX1JFR19TRUNTXSAmIDB4N2YpOwotCXRtLT50bV9taW4gPSBCQ0QyQklOKHJzNWMtPnJlZ3NbUlM1QzM3Ml9SRUdfTUlOU10gJiAweDdmKTsKKwl0bS0+dG1fc2VjID0gYmNkMmJpbihyczVjLT5yZWdzW1JTNUMzNzJfUkVHX1NFQ1NdICYgMHg3Zik7CisJdG0tPnRtX21pbiA9IGJjZDJiaW4ocnM1Yy0+cmVnc1tSUzVDMzcyX1JFR19NSU5TXSAmIDB4N2YpOwogCXRtLT50bV9ob3VyID0gcnM1Y19yZWcyaHIocnM1YywgcnM1Yy0+cmVnc1tSUzVDMzcyX1JFR19IT1VSU10pOwogCi0JdG0tPnRtX3dkYXkgPSBCQ0QyQklOKHJzNWMtPnJlZ3NbUlM1QzM3Ml9SRUdfV0RBWV0gJiAweDA3KTsKLQl0bS0+dG1fbWRheSA9IEJDRDJCSU4ocnM1Yy0+cmVnc1tSUzVDMzcyX1JFR19EQVldICYgMHgzZik7CisJdG0tPnRtX3dkYXkgPSBiY2QyYmluKHJzNWMtPnJlZ3NbUlM1QzM3Ml9SRUdfV0RBWV0gJiAweDA3KTsKKwl0bS0+dG1fbWRheSA9IGJjZDJiaW4ocnM1Yy0+cmVnc1tSUzVDMzcyX1JFR19EQVldICYgMHgzZik7CiAKIAkvKiB0bS0+dG1fbW9uIGlzIHplcm8tYmFzZWQgKi8KLQl0bS0+dG1fbW9uID0gQkNEMkJJTihyczVjLT5yZWdzW1JTNUMzNzJfUkVHX01PTlRIXSAmIDB4MWYpIC0gMTsKKwl0bS0+dG1fbW9uID0gYmNkMmJpbihyczVjLT5yZWdzW1JTNUMzNzJfUkVHX01PTlRIXSAmIDB4MWYpIC0gMTsKIAogCS8qIHllYXIgaXMgMTkwMCArIHRtLT50bV95ZWFyICovCi0JdG0tPnRtX3llYXIgPSBCQ0QyQklOKHJzNWMtPnJlZ3NbUlM1QzM3Ml9SRUdfWUVBUl0pICsgMTAwOworCXRtLT50bV95ZWFyID0gYmNkMmJpbihyczVjLT5yZWdzW1JTNUMzNzJfUkVHX1lFQVJdKSArIDEwMDsKIAogCWRldl9kYmcoJmNsaWVudC0+ZGV2LCAiJXM6IHRtIGlzIHNlY3M9JWQsIG1pbnM9JWQsIGhvdXJzPSVkLCAiCiAJCSJtZGF5PSVkLCBtb249JWQsIHllYXI9JWQsIHdkYXk9JWRcbiIsCkBAIC0xODcsNiArMjA3LDcgQEAKIHsKIAlzdHJ1Y3QgcnM1YzM3MgkqcnM1YyA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwogCXVuc2lnbmVkIGNoYXIJYnVmWzhdOworCWludAkJYWRkcjsKIAogCWRldl9kYmcoJmNsaWVudC0+ZGV2LCAiJXM6IHRtIGlzIHNlY3M9JWQsIG1pbnM9JWQsIGhvdXJzPSVkICIKIAkJIm1kYXk9JWQsIG1vbj0lZCwgeWVhcj0lZCwgd2RheT0lZFxuIiwKQEAgLTE5NCwxNiArMjE1LDE2IEBACiAJCXRtLT50bV9zZWMsIHRtLT50bV9taW4sIHRtLT50bV9ob3VyLAogCQl0bS0+dG1fbWRheSwgdG0tPnRtX21vbiwgdG0tPnRtX3llYXIsIHRtLT50bV93ZGF5KTsKIAotCWJ1ZlswXSA9IFJTNUNfQUREUihSUzVDMzcyX1JFR19TRUNTKTsKLQlidWZbMV0gPSBCSU4yQkNEKHRtLT50bV9zZWMpOwotCWJ1ZlsyXSA9IEJJTjJCQ0QodG0tPnRtX21pbik7Ci0JYnVmWzNdID0gcnM1Y19ocjJyZWcocnM1YywgdG0tPnRtX2hvdXIpOwotCWJ1Zls0XSA9IEJJTjJCQ0QodG0tPnRtX3dkYXkpOwotCWJ1Zls1XSA9IEJJTjJCQ0QodG0tPnRtX21kYXkpOwotCWJ1Zls2XSA9IEJJTjJCQ0QodG0tPnRtX21vbiArIDEpOwotCWJ1Zls3XSA9IEJJTjJCQ0QodG0tPnRtX3llYXIgLSAxMDApOworCWFkZHIgICA9IFJTNUNfQUREUihSUzVDMzcyX1JFR19TRUNTKTsKKwlidWZbMF0gPSBiaW4yYmNkKHRtLT50bV9zZWMpOworCWJ1ZlsxXSA9IGJpbjJiY2QodG0tPnRtX21pbik7CisJYnVmWzJdID0gcnM1Y19ocjJyZWcocnM1YywgdG0tPnRtX2hvdXIpOworCWJ1ZlszXSA9IGJpbjJiY2QodG0tPnRtX3dkYXkpOworCWJ1Zls0XSA9IGJpbjJiY2QodG0tPnRtX21kYXkpOworCWJ1Zls1XSA9IGJpbjJiY2QodG0tPnRtX21vbiArIDEpOworCWJ1Zls2XSA9IGJpbjJiY2QodG0tPnRtX3llYXIgLSAxMDApOwogCi0JaWYgKChpMmNfbWFzdGVyX3NlbmQoY2xpZW50LCBidWYsIDgpKSAhPSA4KSB7CisJaWYgKGkyY19zbWJ1c193cml0ZV9pMmNfYmxvY2tfZGF0YShjbGllbnQsIGFkZHIsIHNpemVvZihidWYpLCBidWYpIDwgMCkgewogCQlkZXZfZXJyKCZjbGllbnQtPmRldiwgIiVzOiB3cml0ZSBlcnJvclxuIiwgX19mdW5jX18pOwogCQlyZXR1cm4gLUVJTzsKIAl9CkBAIC0yNjYsMTYgKzI4NywxNiBAQAogewogCXN0cnVjdCBpMmNfY2xpZW50CSpjbGllbnQgPSB0b19pMmNfY2xpZW50KGRldik7CiAJc3RydWN0IHJzNWMzNzIJCSpyczVjID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7Ci0JdW5zaWduZWQgY2hhcgkJYnVmWzJdOwotCWludAkJCXN0YXR1czsKKwl1bnNpZ25lZCBjaGFyCQlidWY7CisJaW50CQkJc3RhdHVzLCBhZGRyOwogCi0JYnVmWzFdID0gcnM1Yy0+cmVnc1tSUzVDX1JFR19DVFJMMV07CisJYnVmID0gcnM1Yy0+cmVnc1tSUzVDX1JFR19DVFJMMV07CiAJc3dpdGNoIChjbWQpIHsKIAljYXNlIFJUQ19VSUVfT0ZGOgogCWNhc2UgUlRDX1VJRV9PTjoKIAkJLyogc29tZSAzMjdhIG1vZGVzIHVzZSBhIGRpZmZlcmVudCBJUlEgcGluIGZvciAxSHogaXJxcyAqLwogCQlpZiAocnM1Yy0+dHlwZSA9PSBydGNfcnM1YzM3MmEKLQkJCQkmJiAoYnVmWzFdICYgUlM1QzM3MkFfQ1RSTDFfU0wxKSkKKwkJCQkmJiAoYnVmICYgUlM1QzM3MkFfQ1RSTDFfU0wxKSkKIAkJCXJldHVybiAtRU5PSU9DVExDTUQ7CiAJY2FzZSBSVENfQUlFX09GRjoKIAljYXNlIFJUQ19BSUVfT046CkBAIC0yOTMsMjggKzMxNCwzMCBAQAogCWlmIChzdGF0dXMgPCAwKQogCQlyZXR1cm4gc3RhdHVzOwogCi0JYnVmWzBdID0gUlM1Q19BRERSKFJTNUNfUkVHX0NUUkwxKTsKKwlhZGRyID0gUlM1Q19BRERSKFJTNUNfUkVHX0NUUkwxKTsKIAlzd2l0Y2ggKGNtZCkgewogCWNhc2UgUlRDX0FJRV9PRkY6CS8qIGFsYXJtIG9mZiAqLwotCQlidWZbMV0gJj0gflJTNUNfQ1RSTDFfQUFMRTsKKwkJYnVmICY9IH5SUzVDX0NUUkwxX0FBTEU7CiAJCWJyZWFrOwogCWNhc2UgUlRDX0FJRV9PTjoJLyogYWxhcm0gb24gKi8KLQkJYnVmWzFdIHw9IFJTNUNfQ1RSTDFfQUFMRTsKKwkJYnVmIHw9IFJTNUNfQ1RSTDFfQUFMRTsKIAkJYnJlYWs7CiAJY2FzZSBSVENfVUlFX09GRjoJLyogdXBkYXRlIG9mZiAqLwotCQlidWZbMV0gJj0gflJTNUNfQ1RSTDFfQ1RfTUFTSzsKKwkJYnVmICY9IH5SUzVDX0NUUkwxX0NUX01BU0s7CiAJCWJyZWFrOwogCWNhc2UgUlRDX1VJRV9PTjoJLyogdXBkYXRlIG9uICovCi0JCWJ1ZlsxXSAmPSB+UlM1Q19DVFJMMV9DVF9NQVNLOwotCQlidWZbMV0gfD0gUlM1Q19DVFJMMV9DVDQ7CisJCWJ1ZiAmPSB+UlM1Q19DVFJMMV9DVF9NQVNLOworCQlidWYgfD0gUlM1Q19DVFJMMV9DVDQ7CiAJCWJyZWFrOwogCX0KLQlpZiAoKGkyY19tYXN0ZXJfc2VuZChjbGllbnQsIGJ1ZiwgMikpICE9IDIpIHsKKworCWlmIChpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgYWRkciwgYnVmKSA8IDApIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IGNhbid0IHVwZGF0ZSBhbGFybVxuIiwKIAkJCXJzNWMtPnJ0Yy0+bmFtZSk7CiAJCXN0YXR1cyA9IC1FSU87CiAJfSBlbHNlCi0JCXJzNWMtPnJlZ3NbUlM1Q19SRUdfQ1RSTDFdID0gYnVmWzFdOworCQlyczVjLT5yZWdzW1JTNUNfUkVHX0NUUkwxXSA9IGJ1ZjsKKwogCXJldHVybiBzdGF0dXM7CiB9CiAKQEAgLTM0NCw3ICszNjcsNyBAQAogCiAJLyogcmVwb3J0IGFsYXJtIHRpbWUgKi8KIAl0LT50aW1lLnRtX3NlYyA9IDA7Ci0JdC0+dGltZS50bV9taW4gPSBCQ0QyQklOKHJzNWMtPnJlZ3NbUlM1Q19SRUdfQUxBUk1fQV9NSU5dICYgMHg3Zik7CisJdC0+dGltZS50bV9taW4gPSBiY2QyYmluKHJzNWMtPnJlZ3NbUlM1Q19SRUdfQUxBUk1fQV9NSU5dICYgMHg3Zik7CiAJdC0+dGltZS50bV9ob3VyID0gcnM1Y19yZWcyaHIocnM1YywgcnM1Yy0+cmVnc1tSUzVDX1JFR19BTEFSTV9BX0hPVVJTXSk7CiAJdC0+dGltZS50bV9tZGF5ID0gLTE7CiAJdC0+dGltZS50bV9tb24gPSAtMTsKQEAgLTM2NCw4ICszODcsOCBAQAogewogCXN0cnVjdCBpMmNfY2xpZW50CSpjbGllbnQgPSB0b19pMmNfY2xpZW50KGRldik7CiAJc3RydWN0IHJzNWMzNzIJCSpyczVjID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7Ci0JaW50CQkJc3RhdHVzOwotCXVuc2lnbmVkIGNoYXIJCWJ1Zls0XTsKKwlpbnQJCQlzdGF0dXMsIGFkZHIsIGk7CisJdW5zaWduZWQgY2hhcgkJYnVmWzNdOwogCiAJLyogb25seSBoYW5kbGUgdXAgdG8gMjQgaG91cnMgaW4gdGhlIGZ1dHVyZSwgbGlrZSBSVENfQUxNX1NFVCAqLwogCWlmICh0LT50aW1lLnRtX21kYXkgIT0gLTEKQEAgLTM4MCwzMyArNDAzLDM2IEBACiAJaWYgKHN0YXR1cyA8IDApCiAJCXJldHVybiBzdGF0dXM7CiAJaWYgKHJzNWMtPnJlZ3NbUlM1Q19SRUdfQ1RSTDFdICYgUlM1Q19DVFJMMV9BQUxFKSB7Ci0JCWJ1ZlswXSA9IFJTNUNfQUREUihSUzVDX1JFR19DVFJMMSk7Ci0JCWJ1ZlsxXSA9IHJzNWMtPnJlZ3NbUlM1Q19SRUdfQ1RSTDFdICYgflJTNUNfQ1RSTDFfQUFMRTsKLQkJaWYgKGkyY19tYXN0ZXJfc2VuZChjbGllbnQsIGJ1ZiwgMikgIT0gMikgeworCQlhZGRyID0gUlM1Q19BRERSKFJTNUNfUkVHX0NUUkwxKTsKKwkJYnVmWzBdID0gcnM1Yy0+cmVnc1tSUzVDX1JFR19DVFJMMV0gJiB+UlM1Q19DVFJMMV9BQUxFOworCQlpZiAoaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsIGFkZHIsIGJ1ZlswXSkgPCAwKSB7CiAJCQlwcl9kZWJ1ZygiJXM6IGNhbid0IGRpc2FibGUgYWxhcm1cbiIsIHJzNWMtPnJ0Yy0+bmFtZSk7CiAJCQlyZXR1cm4gLUVJTzsKIAkJfQotCQlyczVjLT5yZWdzW1JTNUNfUkVHX0NUUkwxXSA9IGJ1ZlsxXTsKKwkJcnM1Yy0+cmVnc1tSUzVDX1JFR19DVFJMMV0gPSBidWZbMF07CiAJfQogCiAJLyogc2V0IGFsYXJtICovCi0JYnVmWzBdID0gUlM1Q19BRERSKFJTNUNfUkVHX0FMQVJNX0FfTUlOKTsKLQlidWZbMV0gPSBCSU4yQkNEKHQtPnRpbWUudG1fbWluKTsKLQlidWZbMl0gPSByczVjX2hyMnJlZyhyczVjLCB0LT50aW1lLnRtX2hvdXIpOwotCWJ1ZlszXSA9IDB4N2Y7CS8qIGFueS9hbGwgZGF5cyAqLwotCWlmICgoaTJjX21hc3Rlcl9zZW5kKGNsaWVudCwgYnVmLCA0KSkgIT0gNCkgewotCQlwcl9kZWJ1ZygiJXM6IGNhbid0IHNldCBhbGFybSB0aW1lXG4iLCByczVjLT5ydGMtPm5hbWUpOwotCQlyZXR1cm4gLUVJTzsKKwlidWZbMF0gPSBiaW4yYmNkKHQtPnRpbWUudG1fbWluKTsKKwlidWZbMV0gPSByczVjX2hyMnJlZyhyczVjLCB0LT50aW1lLnRtX2hvdXIpOworCWJ1ZlsyXSA9IDB4N2Y7CS8qIGFueS9hbGwgZGF5cyAqLworCisJZm9yIChpID0gMDsgaSA8IHNpemVvZihidWYpOyBpKyspIHsKKwkJYWRkciA9IFJTNUNfQUREUihSUzVDX1JFR19BTEFSTV9BX01JTiArIGkpOworCQlpZiAoaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsIGFkZHIsIGJ1ZltpXSkgPCAwKSB7CisJCQlwcl9kZWJ1ZygiJXM6IGNhbid0IHNldCBhbGFybSB0aW1lXG4iLCByczVjLT5ydGMtPm5hbWUpOworCQkJcmV0dXJuIC1FSU87CisJCX0KIAl9CiAKIAkvKiAuLi4gYW5kIG1heWJlIGVuYWJsZSBpdHMgaXJxICovCiAJaWYgKHQtPmVuYWJsZWQpIHsKLQkJYnVmWzBdID0gUlM1Q19BRERSKFJTNUNfUkVHX0NUUkwxKTsKLQkJYnVmWzFdID0gcnM1Yy0+cmVnc1tSUzVDX1JFR19DVFJMMV0gfCBSUzVDX0NUUkwxX0FBTEU7Ci0JCWlmICgoaTJjX21hc3Rlcl9zZW5kKGNsaWVudCwgYnVmLCAyKSkgIT0gMikKKwkJYWRkciA9IFJTNUNfQUREUihSUzVDX1JFR19DVFJMMSk7CisJCWJ1ZlswXSA9IHJzNWMtPnJlZ3NbUlM1Q19SRUdfQ1RSTDFdIHwgUlM1Q19DVFJMMV9BQUxFOworCQlpZiAoaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsIGFkZHIsIGJ1ZlswXSkgPCAwKQogCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IGNhbid0IGVuYWJsZSBhbGFybVxuIiwKIAkJCQlyczVjLT5ydGMtPm5hbWUpOwotCQlyczVjLT5yZWdzW1JTNUNfUkVHX0NUUkwxXSA9IGJ1ZlsxXTsKKwkJcnM1Yy0+cmVnc1tSUzVDX1JFR19DVFJMMV0gPSBidWZbMF07CiAJfQogCiAJcmV0dXJuIDA7CkBAIC01MDMsMTggKzUyOSw4MSBAQAogCiBzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgcnM1YzM3Ml9kcml2ZXI7CiAKK3N0YXRpYyBpbnQgcnM1Y19vc2NpbGxhdG9yX3NldHVwKHN0cnVjdCByczVjMzcyICpyczVjMzcyKQoreworCXVuc2lnbmVkIGNoYXIgYnVmWzJdOworCWludCBhZGRyLCBpLCByZXQgPSAwOworCisJaWYgKHJzNWMzNzItPnR5cGUgPT0gcnRjX3IyMDI1c2QpIHsKKwkJaWYgKCEocnM1YzM3Mi0+cmVnc1tSUzVDX1JFR19DVFJMMl0gJiBSMjAyNV9DVFJMMl9YU1QpKQorCQkJcmV0dXJuIHJldDsKKwkJcnM1YzM3Mi0+cmVnc1tSUzVDX1JFR19DVFJMMl0gJj0gflIyMDI1X0NUUkwyX1hTVDsKKwl9IGVsc2UgeworCQlpZiAoIShyczVjMzcyLT5yZWdzW1JTNUNfUkVHX0NUUkwyXSAmIFJTNUNfQ1RSTDJfWFNUUCkpCisJCQlyZXR1cm4gcmV0OworCQlyczVjMzcyLT5yZWdzW1JTNUNfUkVHX0NUUkwyXSAmPSB+UlM1Q19DVFJMMl9YU1RQOworCX0KKworCWFkZHIgICA9IFJTNUNfQUREUihSUzVDX1JFR19DVFJMMSk7CisJYnVmWzBdID0gcnM1YzM3Mi0+cmVnc1tSUzVDX1JFR19DVFJMMV07CisJYnVmWzFdID0gcnM1YzM3Mi0+cmVnc1tSUzVDX1JFR19DVFJMMl07CisKKwkvKiB1c2UgMjRociBtb2RlICovCisJc3dpdGNoIChyczVjMzcyLT50eXBlKSB7CisJY2FzZSBydGNfcnM1YzM3MmE6CisJY2FzZSBydGNfcnM1YzM3MmI6CisJCWJ1ZlsxXSB8PSBSUzVDMzcyX0NUUkwyXzI0OworCQlyczVjMzcyLT50aW1lMjQgPSAxOworCQlicmVhazsKKwljYXNlIHJ0Y19yMjAyNXNkOgorCWNhc2UgcnRjX3J2NWMzODY6CisJY2FzZSBydGNfcnY1YzM4N2E6CisJCWJ1ZlswXSB8PSBSVjVDMzg3X0NUUkwxXzI0OworCQlyczVjMzcyLT50aW1lMjQgPSAxOworCQlicmVhazsKKwlkZWZhdWx0OgorCQkvKiBpbXBvc3NpYmxlICovCisJCWJyZWFrOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBzaXplb2YoYnVmKTsgaSsrKSB7CisJCWFkZHIgPSBSUzVDX0FERFIoUlM1Q19SRUdfQ1RSTDEgKyBpKTsKKwkJcmV0ID0gaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShyczVjMzcyLT5jbGllbnQsIGFkZHIsIGJ1ZltpXSk7CisJCWlmICh1bmxpa2VseShyZXQgPCAwKSkKKwkJCXJldHVybiByZXQ7CisJfQorCisJcnM1YzM3Mi0+cmVnc1tSUzVDX1JFR19DVFJMMV0gPSBidWZbMF07CisJcnM1YzM3Mi0+cmVnc1tSUzVDX1JFR19DVFJMMl0gPSBidWZbMV07CisKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGludCByczVjMzcyX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCiAJCQkgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKQogewogCWludCBlcnIgPSAwOworCWludCBzbWJ1c19tb2RlID0gMDsKIAlzdHJ1Y3QgcnM1YzM3MiAqcnM1YzM3MjsKIAlzdHJ1Y3QgcnRjX3RpbWUgdG07CiAKIAlkZXZfZGJnKCZjbGllbnQtPmRldiwgIiVzXG4iLCBfX2Z1bmNfXyk7CiAKLQlpZiAoIWkyY19jaGVja19mdW5jdGlvbmFsaXR5KGNsaWVudC0+YWRhcHRlciwgSTJDX0ZVTkNfSTJDKSkgewotCQllcnIgPSAtRU5PREVWOwotCQlnb3RvIGV4aXQ7CisJaWYgKCFpMmNfY2hlY2tfZnVuY3Rpb25hbGl0eShjbGllbnQtPmFkYXB0ZXIsIEkyQ19GVU5DX0kyQyB8CisJCQlJMkNfRlVOQ19TTUJVU19CWVRFX0RBVEEgfCBJMkNfRlVOQ19TTUJVU19JMkNfQkxPQ0spKSB7CisJCS8qCisJCSAqIElmIHdlIGRvbid0IGhhdmUgYW55IG1hc3RlciBtb2RlIGFkYXB0ZXIsIHRyeSBicmVha2luZworCQkgKiBpdCBkb3duIGluIHRvIHRoZSBiYXJlc3Qgb2YgY2FwYWJpbGl0aWVzLgorCQkgKi8KKwkJaWYgKGkyY19jaGVja19mdW5jdGlvbmFsaXR5KGNsaWVudC0+YWRhcHRlciwKKwkJCQlJMkNfRlVOQ19TTUJVU19CWVRFX0RBVEEgfAorCQkJCUkyQ19GVU5DX1NNQlVTX0kyQ19CTE9DSykpCisJCQlzbWJ1c19tb2RlID0gMTsKKwkJZWxzZSB7CisJCQkvKiBTdGlsbCBubyBnb29kLCBnaXZlIHVwICovCisJCQllcnIgPSAtRU5PREVWOworCQkJZ290byBleGl0OworCQl9CiAJfQogCiAJaWYgKCEocnM1YzM3MiA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCByczVjMzcyKSwgR0ZQX0tFUk5FTCkpKSB7CkBAIC01MjgsNiArNjE3LDcgQEAKIAogCS8qIHdlIHJlYWQgcmVnaXN0ZXJzIDB4MGYgdGhlbiAweDAwLTB4MGY7IHNraXAgdGhlIGZpcnN0IG9uZSAqLwogCXJzNWMzNzItPnJlZ3MgPSAmcnM1YzM3Mi0+YnVmWzFdOworCXJzNWMzNzItPnNtYnVzID0gc21idXNfbW9kZTsKIAogCWVyciA9IHJzNWNfZ2V0X3JlZ3MocnM1YzM3Mik7CiAJaWYgKGVyciA8IDApCkBAIC01NDMsNiArNjMzLDcgQEAKIAkJaWYgKHJzNWMzNzItPnJlZ3NbUlM1Q19SRUdfQ1RSTDJdICYgUlM1QzM3Ml9DVFJMMl8yNCkKIAkJCXJzNWMzNzItPnRpbWUyNCA9IDE7CiAJCWJyZWFrOworCWNhc2UgcnRjX3IyMDI1c2Q6CiAJY2FzZSBydGNfcnY1YzM4NjoKIAljYXNlIHJ0Y19ydjVjMzg3YToKIAkJaWYgKHJzNWMzNzItPnJlZ3NbUlM1Q19SRUdfQ1RSTDFdICYgUlY1QzM4N19DVFJMMV8yNCkKQEAgLTU1OCwzOSArNjQ5LDE0IEBACiAKIAkvKiBpZiB0aGUgb3NjaWxsYXRvciBsb3N0IHBvd2VyIGFuZCBubyBvdGhlciBzb2Z0d2FyZSAobGlrZQogCSAqIHRoZSBib290bG9hZGVyKSBzZXQgaXQgdXAsIGRvIGl0IGhlcmUuCisJICoKKwkgKiBUaGUgUjIwMjVTL0QgZG9lcyB0aGlzIGEgbGl0dGxlIGRpZmZlcmVudGx5IHRoYW4gdGhlIG90aGVyCisJICogcGFydHMsIHNvIHdlIHNwZWNpYWwgY2FzZSB0aGF0Li4KIAkgKi8KLQlpZiAocnM1YzM3Mi0+cmVnc1tSUzVDX1JFR19DVFJMMl0gJiBSUzVDX0NUUkwyX1hTVFApIHsKLQkJdW5zaWduZWQgY2hhciBidWZbM107Ci0KLQkJcnM1YzM3Mi0+cmVnc1tSUzVDX1JFR19DVFJMMl0gJj0gflJTNUNfQ1RSTDJfWFNUUDsKLQotCQlidWZbMF0gPSBSUzVDX0FERFIoUlM1Q19SRUdfQ1RSTDEpOwotCQlidWZbMV0gPSByczVjMzcyLT5yZWdzW1JTNUNfUkVHX0NUUkwxXTsKLQkJYnVmWzJdID0gcnM1YzM3Mi0+cmVnc1tSUzVDX1JFR19DVFJMMl07Ci0KLQkJLyogdXNlIDI0aHIgbW9kZSAqLwotCQlzd2l0Y2ggKHJzNWMzNzItPnR5cGUpIHsKLQkJY2FzZSBydGNfcnM1YzM3MmE6Ci0JCWNhc2UgcnRjX3JzNWMzNzJiOgotCQkJYnVmWzJdIHw9IFJTNUMzNzJfQ1RSTDJfMjQ7Ci0JCQlyczVjMzcyLT50aW1lMjQgPSAxOwotCQkJYnJlYWs7Ci0JCWNhc2UgcnRjX3J2NWMzODY6Ci0JCWNhc2UgcnRjX3J2NWMzODdhOgotCQkJYnVmWzFdIHw9IFJWNUMzODdfQ1RSTDFfMjQ7Ci0JCQlyczVjMzcyLT50aW1lMjQgPSAxOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQkvKiBpbXBvc3NpYmxlICovCi0JCQlicmVhazsKLQkJfQotCi0JCWlmICgoaTJjX21hc3Rlcl9zZW5kKGNsaWVudCwgYnVmLCAzKSkgIT0gMykgewotCQkJZGV2X2VycigmY2xpZW50LT5kZXYsICJzZXR1cCBlcnJvclxuIik7Ci0JCQlnb3RvIGV4aXRfa2ZyZWU7Ci0JCX0KLQkJcnM1YzM3Mi0+cmVnc1tSUzVDX1JFR19DVFJMMV0gPSBidWZbMV07Ci0JCXJzNWMzNzItPnJlZ3NbUlM1Q19SRUdfQ1RSTDJdID0gYnVmWzJdOworCWVyciA9IHJzNWNfb3NjaWxsYXRvcl9zZXR1cChyczVjMzcyKTsKKwlpZiAodW5saWtlbHkoZXJyIDwgMCkpIHsKKwkJZGV2X2VycigmY2xpZW50LT5kZXYsICJzZXR1cCBlcnJvclxuIik7CisJCWdvdG8gZXhpdF9rZnJlZTsKIAl9CiAKIAlpZiAocnM1YzM3Ml9nZXRfZGF0ZXRpbWUoY2xpZW50LCAmdG0pIDwgMCkKQEAgLTU5OCw2ICs2NjQsNyBAQAogCiAJZGV2X2luZm8oJmNsaWVudC0+ZGV2LCAiJXMgZm91bmQsICVzLCBkcml2ZXIgdmVyc2lvbiAiIERSVl9WRVJTSU9OICJcbiIsCiAJCQkoeyBjaGFyICpzOyBzd2l0Y2ggKHJzNWMzNzItPnR5cGUpIHsKKwkJCWNhc2UgcnRjX3IyMDI1c2Q6CXMgPSAicjIwMjVzZCI7IGJyZWFrOwogCQkJY2FzZSBydGNfcnM1YzM3MmE6CXMgPSAicnM1YzM3MmEiOyBicmVhazsKIAkJCWNhc2UgcnRjX3JzNWMzNzJiOglzID0gInJzNWMzNzJiIjsgYnJlYWs7CiAJCQljYXNlIHJ0Y19ydjVjMzg2OglzID0gInJ2NWMzODYiOyBicmVhazsKQEAgLTY2Nyw3ICs3MzQsOCBAQAogCiBNT0RVTEVfQVVUSE9SKAogCQkiUGF2ZWwgTWlyb25jaGlrIDxwbWlyb25jaGlrQG9wdGlmYWNpby5uZXQ+LCAiCi0JCSJBbGVzc2FuZHJvIFp1bW1vIDxhLnp1bW1vQHRvd2VydGVjaC5pdD4iKTsKKwkJIkFsZXNzYW5kcm8gWnVtbW8gPGEuenVtbW9AdG93ZXJ0ZWNoLml0PiwgIgorCQkiUGF1bCBNdW5kdCA8bGV0aGFsQGxpbnV4LXNoLm9yZz4iKTsKIE1PRFVMRV9ERVNDUklQVElPTigiUmljb2ggUlM1QzM3MiBSVEMgZHJpdmVyIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiBNT0RVTEVfVkVSU0lPTihEUlZfVkVSU0lPTik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtczM1MzkwYS5jIGIvZHJpdmVycy9ydGMvcnRjLXMzNTM5MGEuYwppbmRleCBhNmZhMWYyLi5kZWY0ZDM5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtczM1MzkwYS5jCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy1zMzUzOTBhLmMKQEAgLTEwNCwxMiArMTA0LDEyIEBACiBzdGF0aWMgY2hhciBzMzUzOTBhX2hyMnJlZyhzdHJ1Y3QgczM1MzkwYSAqczM1MzkwYSwgaW50IGhvdXIpCiB7CiAJaWYgKHMzNTM5MGEtPnR3ZW50eWZvdXJob3VyKQotCQlyZXR1cm4gQklOMkJDRChob3VyKTsKKwkJcmV0dXJuIGJpbjJiY2QoaG91cik7CiAKIAlpZiAoaG91ciA8IDEyKQotCQlyZXR1cm4gQklOMkJDRChob3VyKTsKKwkJcmV0dXJuIGJpbjJiY2QoaG91cik7CiAKLQlyZXR1cm4gMHg0MCB8IEJJTjJCQ0QoaG91ciAtIDEyKTsKKwlyZXR1cm4gMHg0MCB8IGJpbjJiY2QoaG91ciAtIDEyKTsKIH0KIAogc3RhdGljIGludCBzMzUzOTBhX3JlZzJocihzdHJ1Y3QgczM1MzkwYSAqczM1MzkwYSwgY2hhciByZWcpCkBAIC0xMTcsOSArMTE3LDkgQEAKIAl1bnNpZ25lZCBob3VyOwogCiAJaWYgKHMzNTM5MGEtPnR3ZW50eWZvdXJob3VyKQotCQlyZXR1cm4gQkNEMkJJTihyZWcgJiAweDNmKTsKKwkJcmV0dXJuIGJjZDJiaW4ocmVnICYgMHgzZik7CiAKLQlob3VyID0gQkNEMkJJTihyZWcgJiAweDNmKTsKKwlob3VyID0gYmNkMmJpbihyZWcgJiAweDNmKTsKIAlpZiAocmVnICYgMHg0MCkKIAkJaG91ciArPSAxMjsKIApAQCAtMTM3LDEzICsxMzcsMTMgQEAKIAkJdG0tPnRtX21pbiwgdG0tPnRtX2hvdXIsIHRtLT50bV9tZGF5LCB0bS0+dG1fbW9uLCB0bS0+dG1feWVhciwKIAkJdG0tPnRtX3dkYXkpOwogCi0JYnVmW1MzNTM5MEFfQllURV9ZRUFSXSA9IEJJTjJCQ0QodG0tPnRtX3llYXIgLSAxMDApOwotCWJ1ZltTMzUzOTBBX0JZVEVfTU9OVEhdID0gQklOMkJDRCh0bS0+dG1fbW9uICsgMSk7Ci0JYnVmW1MzNTM5MEFfQllURV9EQVldID0gQklOMkJDRCh0bS0+dG1fbWRheSk7Ci0JYnVmW1MzNTM5MEFfQllURV9XREFZXSA9IEJJTjJCQ0QodG0tPnRtX3dkYXkpOworCWJ1ZltTMzUzOTBBX0JZVEVfWUVBUl0gPSBiaW4yYmNkKHRtLT50bV95ZWFyIC0gMTAwKTsKKwlidWZbUzM1MzkwQV9CWVRFX01PTlRIXSA9IGJpbjJiY2QodG0tPnRtX21vbiArIDEpOworCWJ1ZltTMzUzOTBBX0JZVEVfREFZXSA9IGJpbjJiY2QodG0tPnRtX21kYXkpOworCWJ1ZltTMzUzOTBBX0JZVEVfV0RBWV0gPSBiaW4yYmNkKHRtLT50bV93ZGF5KTsKIAlidWZbUzM1MzkwQV9CWVRFX0hPVVJTXSA9IHMzNTM5MGFfaHIycmVnKHMzNTM5MGEsIHRtLT50bV9ob3VyKTsKLQlidWZbUzM1MzkwQV9CWVRFX01JTlNdID0gQklOMkJDRCh0bS0+dG1fbWluKTsKLQlidWZbUzM1MzkwQV9CWVRFX1NFQ1NdID0gQklOMkJDRCh0bS0+dG1fc2VjKTsKKwlidWZbUzM1MzkwQV9CWVRFX01JTlNdID0gYmluMmJjZCh0bS0+dG1fbWluKTsKKwlidWZbUzM1MzkwQV9CWVRFX1NFQ1NdID0gYmluMmJjZCh0bS0+dG1fc2VjKTsKIAogCS8qIFRoaXMgY2hpcCBleHBlY3RzIHRoZSBiaXRzIG9mIGVhY2ggYnl0ZSB0byBiZSBpbiByZXZlcnNlIG9yZGVyICovCiAJZm9yIChpID0gMDsgaSA8IDc7ICsraSkKQEAgLTE2OCwxMyArMTY4LDEzIEBACiAJZm9yIChpID0gMDsgaSA8IDc7ICsraSkKIAkJYnVmW2ldID0gYml0cmV2OChidWZbaV0pOwogCi0JdG0tPnRtX3NlYyA9IEJDRDJCSU4oYnVmW1MzNTM5MEFfQllURV9TRUNTXSk7Ci0JdG0tPnRtX21pbiA9IEJDRDJCSU4oYnVmW1MzNTM5MEFfQllURV9NSU5TXSk7CisJdG0tPnRtX3NlYyA9IGJjZDJiaW4oYnVmW1MzNTM5MEFfQllURV9TRUNTXSk7CisJdG0tPnRtX21pbiA9IGJjZDJiaW4oYnVmW1MzNTM5MEFfQllURV9NSU5TXSk7CiAJdG0tPnRtX2hvdXIgPSBzMzUzOTBhX3JlZzJocihzMzUzOTBhLCBidWZbUzM1MzkwQV9CWVRFX0hPVVJTXSk7Ci0JdG0tPnRtX3dkYXkgPSBCQ0QyQklOKGJ1ZltTMzUzOTBBX0JZVEVfV0RBWV0pOwotCXRtLT50bV9tZGF5ID0gQkNEMkJJTihidWZbUzM1MzkwQV9CWVRFX0RBWV0pOwotCXRtLT50bV9tb24gPSBCQ0QyQklOKGJ1ZltTMzUzOTBBX0JZVEVfTU9OVEhdKSAtIDE7Ci0JdG0tPnRtX3llYXIgPSBCQ0QyQklOKGJ1ZltTMzUzOTBBX0JZVEVfWUVBUl0pICsgMTAwOworCXRtLT50bV93ZGF5ID0gYmNkMmJpbihidWZbUzM1MzkwQV9CWVRFX1dEQVldKTsKKwl0bS0+dG1fbWRheSA9IGJjZDJiaW4oYnVmW1MzNTM5MEFfQllURV9EQVldKTsKKwl0bS0+dG1fbW9uID0gYmNkMmJpbihidWZbUzM1MzkwQV9CWVRFX01PTlRIXSkgLSAxOworCXRtLT50bV95ZWFyID0gYmNkMmJpbihidWZbUzM1MzkwQV9CWVRFX1lFQVJdKSArIDEwMDsKIAogCWRldl9kYmcoJmNsaWVudC0+ZGV2LCAiJXM6IHRtIGlzIHNlY3M9JWQsIG1pbnM9JWQsIGhvdXJzPSVkLCBtZGF5PSVkLCAiCiAJCSJtb249JWQsIHllYXI9JWQsIHdkYXk9JWRcbiIsIF9fZnVuY19fLCB0bS0+dG1fc2VjLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLXMzYy5jIGIvZHJpdmVycy9ydGMvcnRjLXMzYy5jCmluZGV4IGU3ZDE5YjYuLjkxMGJjNzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL3J0Yy1zM2MuYworKysgYi9kcml2ZXJzL3J0Yy9ydGMtczNjLmMKQEAgLTEzNCwxMiArMTM0LDEyIEBACiAJCSBydGNfdG0tPnRtX3llYXIsIHJ0Y190bS0+dG1fbW9uLCBydGNfdG0tPnRtX21kYXksCiAJCSBydGNfdG0tPnRtX2hvdXIsIHJ0Y190bS0+dG1fbWluLCBydGNfdG0tPnRtX3NlYyk7CiAKLQlCQ0RfVE9fQklOKHJ0Y190bS0+dG1fc2VjKTsKLQlCQ0RfVE9fQklOKHJ0Y190bS0+dG1fbWluKTsKLQlCQ0RfVE9fQklOKHJ0Y190bS0+dG1faG91cik7Ci0JQkNEX1RPX0JJTihydGNfdG0tPnRtX21kYXkpOwotCUJDRF9UT19CSU4ocnRjX3RtLT50bV9tb24pOwotCUJDRF9UT19CSU4ocnRjX3RtLT50bV95ZWFyKTsKKwlydGNfdG0tPnRtX3NlYyA9IGJjZDJiaW4ocnRjX3RtLT50bV9zZWMpOworCXJ0Y190bS0+dG1fbWluID0gYmNkMmJpbihydGNfdG0tPnRtX21pbik7CisJcnRjX3RtLT50bV9ob3VyID0gYmNkMmJpbihydGNfdG0tPnRtX2hvdXIpOworCXJ0Y190bS0+dG1fbWRheSA9IGJjZDJiaW4ocnRjX3RtLT50bV9tZGF5KTsKKwlydGNfdG0tPnRtX21vbiA9IGJjZDJiaW4ocnRjX3RtLT50bV9tb24pOworCXJ0Y190bS0+dG1feWVhciA9IGJjZDJiaW4ocnRjX3RtLT50bV95ZWFyKTsKIAogCXJ0Y190bS0+dG1feWVhciArPSAxMDA7CiAJcnRjX3RtLT50bV9tb24gLT0gMTsKQEAgLTE2MywxMiArMTYzLDEyIEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCXdyaXRlYihCSU4yQkNEKHRtLT50bV9zZWMpLCAgYmFzZSArIFMzQzI0MTBfUlRDU0VDKTsKLQl3cml0ZWIoQklOMkJDRCh0bS0+dG1fbWluKSwgIGJhc2UgKyBTM0MyNDEwX1JUQ01JTik7Ci0Jd3JpdGViKEJJTjJCQ0QodG0tPnRtX2hvdXIpLCBiYXNlICsgUzNDMjQxMF9SVENIT1VSKTsKLQl3cml0ZWIoQklOMkJDRCh0bS0+dG1fbWRheSksIGJhc2UgKyBTM0MyNDEwX1JUQ0RBVEUpOwotCXdyaXRlYihCSU4yQkNEKHRtLT50bV9tb24gKyAxKSwgYmFzZSArIFMzQzI0MTBfUlRDTU9OKTsKLQl3cml0ZWIoQklOMkJDRCh5ZWFyKSwgYmFzZSArIFMzQzI0MTBfUlRDWUVBUik7CisJd3JpdGViKGJpbjJiY2QodG0tPnRtX3NlYyksICBiYXNlICsgUzNDMjQxMF9SVENTRUMpOworCXdyaXRlYihiaW4yYmNkKHRtLT50bV9taW4pLCAgYmFzZSArIFMzQzI0MTBfUlRDTUlOKTsKKwl3cml0ZWIoYmluMmJjZCh0bS0+dG1faG91ciksIGJhc2UgKyBTM0MyNDEwX1JUQ0hPVVIpOworCXdyaXRlYihiaW4yYmNkKHRtLT50bV9tZGF5KSwgYmFzZSArIFMzQzI0MTBfUlRDREFURSk7CisJd3JpdGViKGJpbjJiY2QodG0tPnRtX21vbiArIDEpLCBiYXNlICsgUzNDMjQxMF9SVENNT04pOworCXdyaXRlYihiaW4yYmNkKHllYXIpLCBiYXNlICsgUzNDMjQxMF9SVENZRUFSKTsKIAogCXJldHVybiAwOwogfQpAQCAtMTk5LDM0ICsxOTksMzQgQEAKIAkvKiBkZWNvZGUgdGhlIGFsYXJtIGVuYWJsZSBmaWVsZCAqLwogCiAJaWYgKGFsbV9lbiAmIFMzQzI0MTBfUlRDQUxNX1NFQ0VOKQotCQlCQ0RfVE9fQklOKGFsbV90bS0+dG1fc2VjKTsKKwkJYWxtX3RtLT50bV9zZWMgPSBiY2QyYmluKGFsbV90bS0+dG1fc2VjKTsKIAllbHNlCiAJCWFsbV90bS0+dG1fc2VjID0gMHhmZjsKIAogCWlmIChhbG1fZW4gJiBTM0MyNDEwX1JUQ0FMTV9NSU5FTikKLQkJQkNEX1RPX0JJTihhbG1fdG0tPnRtX21pbik7CisJCWFsbV90bS0+dG1fbWluID0gYmNkMmJpbihhbG1fdG0tPnRtX21pbik7CiAJZWxzZQogCQlhbG1fdG0tPnRtX21pbiA9IDB4ZmY7CiAKIAlpZiAoYWxtX2VuICYgUzNDMjQxMF9SVENBTE1fSE9VUkVOKQotCQlCQ0RfVE9fQklOKGFsbV90bS0+dG1faG91cik7CisJCWFsbV90bS0+dG1faG91ciA9IGJjZDJiaW4oYWxtX3RtLT50bV9ob3VyKTsKIAllbHNlCiAJCWFsbV90bS0+dG1faG91ciA9IDB4ZmY7CiAKIAlpZiAoYWxtX2VuICYgUzNDMjQxMF9SVENBTE1fREFZRU4pCi0JCUJDRF9UT19CSU4oYWxtX3RtLT50bV9tZGF5KTsKKwkJYWxtX3RtLT50bV9tZGF5ID0gYmNkMmJpbihhbG1fdG0tPnRtX21kYXkpOwogCWVsc2UKIAkJYWxtX3RtLT50bV9tZGF5ID0gMHhmZjsKIAogCWlmIChhbG1fZW4gJiBTM0MyNDEwX1JUQ0FMTV9NT05FTikgewotCQlCQ0RfVE9fQklOKGFsbV90bS0+dG1fbW9uKTsKKwkJYWxtX3RtLT50bV9tb24gPSBiY2QyYmluKGFsbV90bS0+dG1fbW9uKTsKIAkJYWxtX3RtLT50bV9tb24gLT0gMTsKIAl9IGVsc2UgewogCQlhbG1fdG0tPnRtX21vbiA9IDB4ZmY7CiAJfQogCiAJaWYgKGFsbV9lbiAmIFMzQzI0MTBfUlRDQUxNX1lFQVJFTikKLQkJQkNEX1RPX0JJTihhbG1fdG0tPnRtX3llYXIpOworCQlhbG1fdG0tPnRtX3llYXIgPSBiY2QyYmluKGFsbV90bS0+dG1feWVhcik7CiAJZWxzZQogCQlhbG1fdG0tPnRtX3llYXIgPSAweGZmZmY7CiAKQEAgLTI1MCwxNyArMjUwLDE3IEBACiAKIAlpZiAodG0tPnRtX3NlYyA8IDYwICYmIHRtLT50bV9zZWMgPj0gMCkgewogCQlhbHJtX2VuIHw9IFMzQzI0MTBfUlRDQUxNX1NFQ0VOOwotCQl3cml0ZWIoQklOMkJDRCh0bS0+dG1fc2VjKSwgYmFzZSArIFMzQzI0MTBfQUxNU0VDKTsKKwkJd3JpdGViKGJpbjJiY2QodG0tPnRtX3NlYyksIGJhc2UgKyBTM0MyNDEwX0FMTVNFQyk7CiAJfQogCiAJaWYgKHRtLT50bV9taW4gPCA2MCAmJiB0bS0+dG1fbWluID49IDApIHsKIAkJYWxybV9lbiB8PSBTM0MyNDEwX1JUQ0FMTV9NSU5FTjsKLQkJd3JpdGViKEJJTjJCQ0QodG0tPnRtX21pbiksIGJhc2UgKyBTM0MyNDEwX0FMTU1JTik7CisJCXdyaXRlYihiaW4yYmNkKHRtLT50bV9taW4pLCBiYXNlICsgUzNDMjQxMF9BTE1NSU4pOwogCX0KIAogCWlmICh0bS0+dG1faG91ciA8IDI0ICYmIHRtLT50bV9ob3VyID49IDApIHsKIAkJYWxybV9lbiB8PSBTM0MyNDEwX1JUQ0FMTV9IT1VSRU47Ci0JCXdyaXRlYihCSU4yQkNEKHRtLT50bV9ob3VyKSwgYmFzZSArIFMzQzI0MTBfQUxNSE9VUik7CisJCXdyaXRlYihiaW4yYmNkKHRtLT50bV9ob3VyKSwgYmFzZSArIFMzQzI0MTBfQUxNSE9VUik7CiAJfQogCiAJcHJfZGVidWcoInNldHRpbmcgUzNDMjQxMF9SVENBTE0gdG8gJTA4eFxuIiwgYWxybV9lbik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtc2guYyBiL2RyaXZlcnMvcnRjL3J0Yy1zaC5jCmluZGV4IDFmODhlOWUuLmFhZjlkNmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL3J0Yy1zaC5jCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy1zaC5jCkBAIC0yNTcsMTIgKzI1Nyw2IEBACiAJc3Bpbl91bmxvY2tfaXJxKCZydGMtPmxvY2spOwogfQogCi1zdGF0aWMgdm9pZCBzaF9ydGNfcmVsZWFzZShzdHJ1Y3QgZGV2aWNlICpkZXYpCi17Ci0Jc2hfcnRjX3NldHBpZShkZXYsIDApOwotCXNoX3J0Y19zZXRhaWUoZGV2LCAwKTsKLX0KLQogc3RhdGljIGludCBzaF9ydGNfcHJvYyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBzZXFfZmlsZSAqc2VxKQogewogCXN0cnVjdCBzaF9ydGMgKnJ0YyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwpAQCAtMzMwLDIzICszMjQsMjMgQEAKIAogCQlzZWMxMjggPSByZWFkYihydGMtPnJlZ2Jhc2UgKyBSNjRDTlQpOwogCi0JCXRtLT50bV9zZWMJPSBCQ0QyQklOKHJlYWRiKHJ0Yy0+cmVnYmFzZSArIFJTRUNDTlQpKTsKLQkJdG0tPnRtX21pbgk9IEJDRDJCSU4ocmVhZGIocnRjLT5yZWdiYXNlICsgUk1JTkNOVCkpOwotCQl0bS0+dG1faG91cgk9IEJDRDJCSU4ocmVhZGIocnRjLT5yZWdiYXNlICsgUkhSQ05UKSk7Ci0JCXRtLT50bV93ZGF5CT0gQkNEMkJJTihyZWFkYihydGMtPnJlZ2Jhc2UgKyBSV0tDTlQpKTsKLQkJdG0tPnRtX21kYXkJPSBCQ0QyQklOKHJlYWRiKHJ0Yy0+cmVnYmFzZSArIFJEQVlDTlQpKTsKLQkJdG0tPnRtX21vbgk9IEJDRDJCSU4ocmVhZGIocnRjLT5yZWdiYXNlICsgUk1PTkNOVCkpIC0gMTsKKwkJdG0tPnRtX3NlYwk9IGJjZDJiaW4ocmVhZGIocnRjLT5yZWdiYXNlICsgUlNFQ0NOVCkpOworCQl0bS0+dG1fbWluCT0gYmNkMmJpbihyZWFkYihydGMtPnJlZ2Jhc2UgKyBSTUlOQ05UKSk7CisJCXRtLT50bV9ob3VyCT0gYmNkMmJpbihyZWFkYihydGMtPnJlZ2Jhc2UgKyBSSFJDTlQpKTsKKwkJdG0tPnRtX3dkYXkJPSBiY2QyYmluKHJlYWRiKHJ0Yy0+cmVnYmFzZSArIFJXS0NOVCkpOworCQl0bS0+dG1fbWRheQk9IGJjZDJiaW4ocmVhZGIocnRjLT5yZWdiYXNlICsgUkRBWUNOVCkpOworCQl0bS0+dG1fbW9uCT0gYmNkMmJpbihyZWFkYihydGMtPnJlZ2Jhc2UgKyBSTU9OQ05UKSkgLSAxOwogCiAJCWlmIChydGMtPmNhcGFiaWxpdGllcyAmIFJUQ19DQVBfNF9ESUdJVF9ZRUFSKSB7CiAJCQl5ciAgPSByZWFkdyhydGMtPnJlZ2Jhc2UgKyBSWVJDTlQpOwotCQkJeXIxMDAgPSBCQ0QyQklOKHlyID4+IDgpOworCQkJeXIxMDAgPSBiY2QyYmluKHlyID4+IDgpOwogCQkJeXIgJj0gMHhmZjsKIAkJfSBlbHNlIHsKIAkJCXlyICA9IHJlYWRiKHJ0Yy0+cmVnYmFzZSArIFJZUkNOVCk7Ci0JCQl5cjEwMCA9IEJDRDJCSU4oKHlyID09IDB4OTkpID8gMHgxOSA6IDB4MjApOworCQkJeXIxMDAgPSBiY2QyYmluKCh5ciA9PSAweDk5KSA/IDB4MTkgOiAweDIwKTsKIAkJfQogCi0JCXRtLT50bV95ZWFyID0gKHlyMTAwICogMTAwICsgQkNEMkJJTih5cikpIC0gMTkwMDsKKwkJdG0tPnRtX3llYXIgPSAoeXIxMDAgKiAxMDAgKyBiY2QyYmluKHlyKSkgLSAxOTAwOwogCiAJCXNlYzIgPSByZWFkYihydGMtPnJlZ2Jhc2UgKyBSNjRDTlQpOwogCQljZl9iaXQgPSByZWFkYihydGMtPnJlZ2Jhc2UgKyBSQ1IxKSAmIFJDUjFfQ0Y7CkBAIC0zODgsMjAgKzM4MiwyMCBAQAogCXRtcCAmPSB+UkNSMl9TVEFSVDsKIAl3cml0ZWIodG1wLCBydGMtPnJlZ2Jhc2UgKyBSQ1IyKTsKIAotCXdyaXRlYihCSU4yQkNEKHRtLT50bV9zZWMpLCAgcnRjLT5yZWdiYXNlICsgUlNFQ0NOVCk7Ci0Jd3JpdGViKEJJTjJCQ0QodG0tPnRtX21pbiksICBydGMtPnJlZ2Jhc2UgKyBSTUlOQ05UKTsKLQl3cml0ZWIoQklOMkJDRCh0bS0+dG1faG91ciksIHJ0Yy0+cmVnYmFzZSArIFJIUkNOVCk7Ci0Jd3JpdGViKEJJTjJCQ0QodG0tPnRtX3dkYXkpLCBydGMtPnJlZ2Jhc2UgKyBSV0tDTlQpOwotCXdyaXRlYihCSU4yQkNEKHRtLT50bV9tZGF5KSwgcnRjLT5yZWdiYXNlICsgUkRBWUNOVCk7Ci0Jd3JpdGViKEJJTjJCQ0QodG0tPnRtX21vbiArIDEpLCBydGMtPnJlZ2Jhc2UgKyBSTU9OQ05UKTsKKwl3cml0ZWIoYmluMmJjZCh0bS0+dG1fc2VjKSwgIHJ0Yy0+cmVnYmFzZSArIFJTRUNDTlQpOworCXdyaXRlYihiaW4yYmNkKHRtLT50bV9taW4pLCAgcnRjLT5yZWdiYXNlICsgUk1JTkNOVCk7CisJd3JpdGViKGJpbjJiY2QodG0tPnRtX2hvdXIpLCBydGMtPnJlZ2Jhc2UgKyBSSFJDTlQpOworCXdyaXRlYihiaW4yYmNkKHRtLT50bV93ZGF5KSwgcnRjLT5yZWdiYXNlICsgUldLQ05UKTsKKwl3cml0ZWIoYmluMmJjZCh0bS0+dG1fbWRheSksIHJ0Yy0+cmVnYmFzZSArIFJEQVlDTlQpOworCXdyaXRlYihiaW4yYmNkKHRtLT50bV9tb24gKyAxKSwgcnRjLT5yZWdiYXNlICsgUk1PTkNOVCk7CiAKIAlpZiAocnRjLT5jYXBhYmlsaXRpZXMgJiBSVENfQ0FQXzRfRElHSVRfWUVBUikgewotCQl5ZWFyID0gKEJJTjJCQ0QoKHRtLT50bV95ZWFyICsgMTkwMCkgLyAxMDApIDw8IDgpIHwKLQkJCUJJTjJCQ0QodG0tPnRtX3llYXIgJSAxMDApOworCQl5ZWFyID0gKGJpbjJiY2QoKHRtLT50bV95ZWFyICsgMTkwMCkgLyAxMDApIDw8IDgpIHwKKwkJCWJpbjJiY2QodG0tPnRtX3llYXIgJSAxMDApOwogCQl3cml0ZXcoeWVhciwgcnRjLT5yZWdiYXNlICsgUllSQ05UKTsKIAl9IGVsc2UgewogCQl5ZWFyID0gdG0tPnRtX3llYXIgJSAxMDA7Ci0JCXdyaXRlYihCSU4yQkNEKHllYXIpLCBydGMtPnJlZ2Jhc2UgKyBSWVJDTlQpOworCQl3cml0ZWIoYmluMmJjZCh5ZWFyKSwgcnRjLT5yZWdiYXNlICsgUllSQ05UKTsKIAl9CiAKIAkvKiBTdGFydCBSVEMgKi8KQEAgLTQyMyw3ICs0MTcsNyBAQAogCWJ5dGUgPSByZWFkYihydGMtPnJlZ2Jhc2UgKyByZWdfb2ZmKTsKIAlpZiAoYnl0ZSAmIEFSX0VOQikgewogCQlieXRlICY9IH5BUl9FTkI7CS8qIHN0cmlwIHRoZSBlbmFibGUgYml0ICovCi0JCXZhbHVlID0gQkNEMkJJTihieXRlKTsKKwkJdmFsdWUgPSBiY2QyYmluKGJ5dGUpOwogCX0KIAogCXJldHVybiB2YWx1ZTsKQEAgLTQ2MSw3ICs0NTUsNyBAQAogCWlmICh2YWx1ZSA8IDApCiAJCXdyaXRlYigwLCBydGMtPnJlZ2Jhc2UgKyByZWdfb2ZmKTsKIAllbHNlCi0JCXdyaXRlYihCSU4yQkNEKHZhbHVlKSB8IEFSX0VOQiwgIHJ0Yy0+cmVnYmFzZSArIHJlZ19vZmYpOworCQl3cml0ZWIoYmluMmJjZCh2YWx1ZSkgfCBBUl9FTkIsICBydGMtPnJlZ2Jhc2UgKyByZWdfb2ZmKTsKIH0KIAogc3RhdGljIGludCBzaF9ydGNfY2hlY2tfYWxhcm0oc3RydWN0IHJ0Y190aW1lICp0bSkKQEAgLTU1OSw3ICs1NTMsNiBAQAogfQogCiBzdGF0aWMgc3RydWN0IHJ0Y19jbGFzc19vcHMgc2hfcnRjX29wcyA9IHsKLQkucmVsZWFzZQk9IHNoX3J0Y19yZWxlYXNlLAogCS5pb2N0bAkJPSBzaF9ydGNfaW9jdGwsCiAJLnJlYWRfdGltZQk9IHNoX3J0Y19yZWFkX3RpbWUsCiAJLnNldF90aW1lCT0gc2hfcnRjX3NldF90aW1lLApAQCAtNTc1LDcgKzU2OCw3IEBACiAJc3RydWN0IHNoX3J0YyAqcnRjOwogCXN0cnVjdCByZXNvdXJjZSAqcmVzOwogCXVuc2lnbmVkIGludCB0bXA7Ci0JaW50IHJldCA9IC1FTk9FTlQ7CisJaW50IHJldDsKIAogCXJ0YyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBzaF9ydGMpLCBHRlBfS0VSTkVMKTsKIAlpZiAodW5saWtlbHkoIXJ0YykpCkBAIC01ODQsMjYgKzU3NywzMyBAQAogCXNwaW5fbG9ja19pbml0KCZydGMtPmxvY2spOwogCiAJLyogZ2V0IHBlcmlvZGljL2NhcnJ5L2FsYXJtIGlycXMgKi8KLQlydGMtPnBlcmlvZGljX2lycSA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCk7Ci0JaWYgKHVubGlrZWx5KHJ0Yy0+cGVyaW9kaWNfaXJxIDwgMCkpIHsKKwlyZXQgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApOworCWlmICh1bmxpa2VseShyZXQgPCAwKSkgeworCQlyZXQgPSAtRU5PRU5UOwogCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJObyBJUlEgZm9yIHBlcmlvZFxuIik7CiAJCWdvdG8gZXJyX2JhZHJlczsKIAl9CisJcnRjLT5wZXJpb2RpY19pcnEgPSByZXQ7CiAKLQlydGMtPmNhcnJ5X2lycSA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMSk7Ci0JaWYgKHVubGlrZWx5KHJ0Yy0+Y2FycnlfaXJxIDwgMCkpIHsKKwlyZXQgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDEpOworCWlmICh1bmxpa2VseShyZXQgPCAwKSkgeworCQlyZXQgPSAtRU5PRU5UOwogCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJObyBJUlEgZm9yIGNhcnJ5XG4iKTsKIAkJZ290byBlcnJfYmFkcmVzOwogCX0KKwlydGMtPmNhcnJ5X2lycSA9IHJldDsKIAotCXJ0Yy0+YWxhcm1faXJxID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAyKTsKLQlpZiAodW5saWtlbHkocnRjLT5hbGFybV9pcnEgPCAwKSkgeworCXJldCA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMik7CisJaWYgKHVubGlrZWx5KHJldCA8IDApKSB7CisJCXJldCA9IC1FTk9FTlQ7CiAJCWRldl9lcnIoJnBkZXYtPmRldiwgIk5vIElSUSBmb3IgYWxhcm1cbiIpOwogCQlnb3RvIGVycl9iYWRyZXM7CiAJfQorCXJ0Yy0+YWxhcm1faXJxID0gcmV0OwogCiAJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfSU8sIDApOwogCWlmICh1bmxpa2VseShyZXMgPT0gTlVMTCkpIHsKKwkJcmV0ID0gLUVOT0VOVDsKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAiTm8gSU8gcmVzb3VyY2VcbiIpOwogCQlnb3RvIGVycl9iYWRyZXM7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLXN0azE3dGE4LmMgYi9kcml2ZXJzL3J0Yy9ydGMtc3RrMTd0YTguYwppbmRleCAzMWQzYzhjLi5mNGNkNDZlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtc3RrMTd0YTguYworKysgYi9kcml2ZXJzL3J0Yy9ydGMtc3RrMTd0YTguYwpAQCAtODIsMTQgKzgyLDE0IEBACiAJZmxhZ3MgPSByZWFkYihwZGF0YS0+aW9hZGRyICsgUlRDX0ZMQUdTKTsKIAl3cml0ZWIoZmxhZ3MgfCBSVENfV1JJVEUsIHBkYXRhLT5pb2FkZHIgKyBSVENfRkxBR1MpOwogCi0Jd3JpdGViKEJJTjJCQ0QodG0tPnRtX3llYXIgJSAxMDApLCBpb2FkZHIgKyBSVENfWUVBUik7Ci0Jd3JpdGViKEJJTjJCQ0QodG0tPnRtX21vbiArIDEpLCBpb2FkZHIgKyBSVENfTU9OVEgpOwotCXdyaXRlYihCSU4yQkNEKHRtLT50bV93ZGF5KSAmIFJUQ19EQVlfTUFTSywgaW9hZGRyICsgUlRDX0RBWSk7Ci0Jd3JpdGViKEJJTjJCQ0QodG0tPnRtX21kYXkpLCBpb2FkZHIgKyBSVENfREFURSk7Ci0Jd3JpdGViKEJJTjJCQ0QodG0tPnRtX2hvdXIpLCBpb2FkZHIgKyBSVENfSE9VUlMpOwotCXdyaXRlYihCSU4yQkNEKHRtLT50bV9taW4pLCBpb2FkZHIgKyBSVENfTUlOVVRFUyk7Ci0Jd3JpdGViKEJJTjJCQ0QodG0tPnRtX3NlYykgJiBSVENfU0VDT05EU19NQVNLLCBpb2FkZHIgKyBSVENfU0VDT05EUyk7Ci0Jd3JpdGViKEJJTjJCQ0QoKHRtLT50bV95ZWFyICsgMTkwMCkgLyAxMDApLCBpb2FkZHIgKyBSVENfQ0VOVFVSWSk7CisJd3JpdGViKGJpbjJiY2QodG0tPnRtX3llYXIgJSAxMDApLCBpb2FkZHIgKyBSVENfWUVBUik7CisJd3JpdGViKGJpbjJiY2QodG0tPnRtX21vbiArIDEpLCBpb2FkZHIgKyBSVENfTU9OVEgpOworCXdyaXRlYihiaW4yYmNkKHRtLT50bV93ZGF5KSAmIFJUQ19EQVlfTUFTSywgaW9hZGRyICsgUlRDX0RBWSk7CisJd3JpdGViKGJpbjJiY2QodG0tPnRtX21kYXkpLCBpb2FkZHIgKyBSVENfREFURSk7CisJd3JpdGViKGJpbjJiY2QodG0tPnRtX2hvdXIpLCBpb2FkZHIgKyBSVENfSE9VUlMpOworCXdyaXRlYihiaW4yYmNkKHRtLT50bV9taW4pLCBpb2FkZHIgKyBSVENfTUlOVVRFUyk7CisJd3JpdGViKGJpbjJiY2QodG0tPnRtX3NlYykgJiBSVENfU0VDT05EU19NQVNLLCBpb2FkZHIgKyBSVENfU0VDT05EUyk7CisJd3JpdGViKGJpbjJiY2QoKHRtLT50bV95ZWFyICsgMTkwMCkgLyAxMDApLCBpb2FkZHIgKyBSVENfQ0VOVFVSWSk7CiAKIAl3cml0ZWIoZmxhZ3MgJiB+UlRDX1dSSVRFLCBwZGF0YS0+aW9hZGRyICsgUlRDX0ZMQUdTKTsKIAlyZXR1cm4gMDsKQEAgLTEyMCwxNCArMTIwLDE0IEBACiAJeWVhciA9IHJlYWRiKGlvYWRkciArIFJUQ19ZRUFSKTsKIAljZW50dXJ5ID0gcmVhZGIoaW9hZGRyICsgUlRDX0NFTlRVUlkpOwogCXdyaXRlYihmbGFncyAmIH5SVENfUkVBRCwgaW9hZGRyICsgUlRDX0ZMQUdTKTsKLQl0bS0+dG1fc2VjID0gQkNEMkJJTihzZWNvbmQpOwotCXRtLT50bV9taW4gPSBCQ0QyQklOKG1pbnV0ZSk7Ci0JdG0tPnRtX2hvdXIgPSBCQ0QyQklOKGhvdXIpOwotCXRtLT50bV9tZGF5ID0gQkNEMkJJTihkYXkpOwotCXRtLT50bV93ZGF5ID0gQkNEMkJJTih3ZWVrKTsKLQl0bS0+dG1fbW9uID0gQkNEMkJJTihtb250aCkgLSAxOworCXRtLT50bV9zZWMgPSBiY2QyYmluKHNlY29uZCk7CisJdG0tPnRtX21pbiA9IGJjZDJiaW4obWludXRlKTsKKwl0bS0+dG1faG91ciA9IGJjZDJiaW4oaG91cik7CisJdG0tPnRtX21kYXkgPSBiY2QyYmluKGRheSk7CisJdG0tPnRtX3dkYXkgPSBiY2QyYmluKHdlZWspOworCXRtLT50bV9tb24gPSBiY2QyYmluKG1vbnRoKSAtIDE7CiAJLyogeWVhciBpcyAxOTAwICsgdG0tPnRtX3llYXIgKi8KLQl0bS0+dG1feWVhciA9IEJDRDJCSU4oeWVhcikgKyBCQ0QyQklOKGNlbnR1cnkpICogMTAwIC0gMTkwMDsKKwl0bS0+dG1feWVhciA9IGJjZDJiaW4oeWVhcikgKyBiY2QyYmluKGNlbnR1cnkpICogMTAwIC0gMTkwMDsKIAogCWlmIChydGNfdmFsaWRfdG0odG0pIDwgMCkgewogCQlkZXZfZXJyKGRldiwgInJldHJpZXZlZCBkYXRlL3RpbWUgaXMgbm90IHZhbGlkLlxuIik7CkBAIC0xNDgsMTYgKzE0OCwxNiBAQAogCXdyaXRlYihmbGFncyB8IFJUQ19XUklURSwgaW9hZGRyICsgUlRDX0ZMQUdTKTsKIAogCXdyaXRlYihwZGF0YS0+YWxybV9tZGF5IDwgMCB8fCAocGRhdGEtPmlycWVuICYgUlRDX1VGKSA/Ci0JICAgICAgIDB4ODAgOiBCSU4yQkNEKHBkYXRhLT5hbHJtX21kYXkpLAorCSAgICAgICAweDgwIDogYmluMmJjZChwZGF0YS0+YWxybV9tZGF5KSwKIAkgICAgICAgaW9hZGRyICsgUlRDX0RBVEVfQUxBUk0pOwogCXdyaXRlYihwZGF0YS0+YWxybV9ob3VyIDwgMCB8fCAocGRhdGEtPmlycWVuICYgUlRDX1VGKSA/Ci0JICAgICAgIDB4ODAgOiBCSU4yQkNEKHBkYXRhLT5hbHJtX2hvdXIpLAorCSAgICAgICAweDgwIDogYmluMmJjZChwZGF0YS0+YWxybV9ob3VyKSwKIAkgICAgICAgaW9hZGRyICsgUlRDX0hPVVJTX0FMQVJNKTsKIAl3cml0ZWIocGRhdGEtPmFscm1fbWluIDwgMCB8fCAocGRhdGEtPmlycWVuICYgUlRDX1VGKSA/Ci0JICAgICAgIDB4ODAgOiBCSU4yQkNEKHBkYXRhLT5hbHJtX21pbiksCisJICAgICAgIDB4ODAgOiBiaW4yYmNkKHBkYXRhLT5hbHJtX21pbiksCiAJICAgICAgIGlvYWRkciArIFJUQ19NSU5VVEVTX0FMQVJNKTsKIAl3cml0ZWIocGRhdGEtPmFscm1fc2VjIDwgMCB8fCAocGRhdGEtPmlycWVuICYgUlRDX1VGKSA/Ci0JICAgICAgIDB4ODAgOiBCSU4yQkNEKHBkYXRhLT5hbHJtX3NlYyksCisJICAgICAgIDB4ODAgOiBiaW4yYmNkKHBkYXRhLT5hbHJtX3NlYyksCiAJICAgICAgIGlvYWRkciArIFJUQ19TRUNPTkRTX0FMQVJNKTsKIAl3cml0ZWIocGRhdGEtPmlycWVuID8gUlRDX0lOVFNfQUlFIDogMCwgaW9hZGRyICsgUlRDX0lOVEVSUlVQVFMpOwogCXJlYWRiKGlvYWRkciArIFJUQ19GTEFHUyk7CS8qIGNsZWFyIGludGVycnVwdHMgKi8KQEAgLTIxNSwxNyArMjE1LDYgQEAKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CiAKLXN0YXRpYyB2b2lkIHN0azE3dGE4X3J0Y19yZWxlYXNlKHN0cnVjdCBkZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7Ci0Jc3RydWN0IHJ0Y19wbGF0X2RhdGEgKnBkYXRhID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7Ci0KLQlpZiAocGRhdGEtPmlycSA+PSAwKSB7Ci0JCXBkYXRhLT5pcnFlbiA9IDA7Ci0JCXN0azE3dGE4X3J0Y191cGRhdGVfYWxhcm0ocGRhdGEpOwotCX0KLX0KLQogc3RhdGljIGludCBzdGsxN3RhOF9ydGNfaW9jdGwoc3RydWN0IGRldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgY21kLAogCQkJICAgIHVuc2lnbmVkIGxvbmcgYXJnKQogewpAQCAtMjU0LDcgKzI0Myw2IEBACiAJLnNldF90aW1lCT0gc3RrMTd0YThfcnRjX3NldF90aW1lLAogCS5yZWFkX2FsYXJtCT0gc3RrMTd0YThfcnRjX3JlYWRfYWxhcm0sCiAJLnNldF9hbGFybQk9IHN0azE3dGE4X3J0Y19zZXRfYWxhcm0sCi0JLnJlbGVhc2UJPSBzdGsxN3RhOF9ydGNfcmVsZWFzZSwKIAkuaW9jdGwJCT0gc3RrMTd0YThfcnRjX2lvY3RsLAogfTsKIApAQCAtMjkyLDcgKzI4MCw2IEBACiAJLmF0dHIgPSB7CiAJCS5uYW1lID0gIm52cmFtIiwKIAkJLm1vZGUgPSBTX0lSVUdPIHwgU19JV1VTUiwKLQkJLm93bmVyID0gVEhJU19NT0RVTEUsCiAJfSwKIAkuc2l6ZSA9IFJUQ19PRkZTRVQsCiAJLnJlYWQgPSBzdGsxN3RhOF9udnJhbV9yZWFkLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLXYzMDIwLmMgYi9kcml2ZXJzL3J0Yy9ydGMtdjMwMjAuYwppbmRleCAxMDAyNWQ4Li4xNGQ0ZjAzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtdjMwMjAuYworKysgYi9kcml2ZXJzL3J0Yy9ydGMtdjMwMjAuYwpAQCAtOTIsMTkgKzkyLDE5IEBACiAKIAkvKiAuLi5hbmQgdGhlbiByZWFkIGNvbnN0YW50IHZhbHVlcy4gKi8KIAl0bXAgPSB2MzAyMF9nZXRfcmVnKGNoaXAsIFYzMDIwX1NFQ09ORFMpOwotCWR0LT50bV9zZWMJPSBCQ0QyQklOKHRtcCk7CisJZHQtPnRtX3NlYwk9IGJjZDJiaW4odG1wKTsKIAl0bXAgPSB2MzAyMF9nZXRfcmVnKGNoaXAsIFYzMDIwX01JTlVURVMpOwotCWR0LT50bV9taW4JPSBCQ0QyQklOKHRtcCk7CisJZHQtPnRtX21pbgk9IGJjZDJiaW4odG1wKTsKIAl0bXAgPSB2MzAyMF9nZXRfcmVnKGNoaXAsIFYzMDIwX0hPVVJTKTsKLQlkdC0+dG1faG91cgk9IEJDRDJCSU4odG1wKTsKKwlkdC0+dG1faG91cgk9IGJjZDJiaW4odG1wKTsKIAl0bXAgPSB2MzAyMF9nZXRfcmVnKGNoaXAsIFYzMDIwX01PTlRIX0RBWSk7Ci0JZHQtPnRtX21kYXkJPSBCQ0QyQklOKHRtcCk7CisJZHQtPnRtX21kYXkJPSBiY2QyYmluKHRtcCk7CiAJdG1wID0gdjMwMjBfZ2V0X3JlZyhjaGlwLCBWMzAyMF9NT05USCk7Ci0JZHQtPnRtX21vbiAgICA9IEJDRDJCSU4odG1wKSAtIDE7CisJZHQtPnRtX21vbiAgICA9IGJjZDJiaW4odG1wKSAtIDE7CiAJdG1wID0gdjMwMjBfZ2V0X3JlZyhjaGlwLCBWMzAyMF9XRUVLX0RBWSk7Ci0JZHQtPnRtX3dkYXkJPSBCQ0QyQklOKHRtcCk7CisJZHQtPnRtX3dkYXkJPSBiY2QyYmluKHRtcCk7CiAJdG1wID0gdjMwMjBfZ2V0X3JlZyhjaGlwLCBWMzAyMF9ZRUFSKTsKLQlkdC0+dG1feWVhciA9IEJDRDJCSU4odG1wKSsxMDA7CisJZHQtPnRtX3llYXIgPSBiY2QyYmluKHRtcCkrMTAwOwogCiAjaWZkZWYgREVCVUcKIAlwcmludGsoIlxuJXMgOiBSZWFkIFJUQyB2YWx1ZXNcbiIsX19mdW5jX18pOwpAQCAtMTM2LDEzICsxMzYsMTMgQEAKICNlbmRpZgogCiAJLyogV3JpdGUgYWxsIHRoZSB2YWx1ZXMgdG8gcmFtLi4uICovCi0JdjMwMjBfc2V0X3JlZyhjaGlwLCBWMzAyMF9TRUNPTkRTLCAJQklOMkJDRChkdC0+dG1fc2VjKSk7Ci0JdjMwMjBfc2V0X3JlZyhjaGlwLCBWMzAyMF9NSU5VVEVTLCAJQklOMkJDRChkdC0+dG1fbWluKSk7Ci0JdjMwMjBfc2V0X3JlZyhjaGlwLCBWMzAyMF9IT1VSUywgCUJJTjJCQ0QoZHQtPnRtX2hvdXIpKTsKLQl2MzAyMF9zZXRfcmVnKGNoaXAsIFYzMDIwX01PTlRIX0RBWSwJQklOMkJDRChkdC0+dG1fbWRheSkpOwotCXYzMDIwX3NldF9yZWcoY2hpcCwgVjMwMjBfTU9OVEgsICAgICBCSU4yQkNEKGR0LT50bV9tb24gKyAxKSk7Ci0JdjMwMjBfc2V0X3JlZyhjaGlwLCBWMzAyMF9XRUVLX0RBWSwgCUJJTjJCQ0QoZHQtPnRtX3dkYXkpKTsKLQl2MzAyMF9zZXRfcmVnKGNoaXAsIFYzMDIwX1lFQVIsIAlCSU4yQkNEKGR0LT50bV95ZWFyICUgMTAwKSk7CisJdjMwMjBfc2V0X3JlZyhjaGlwLCBWMzAyMF9TRUNPTkRTLCAJYmluMmJjZChkdC0+dG1fc2VjKSk7CisJdjMwMjBfc2V0X3JlZyhjaGlwLCBWMzAyMF9NSU5VVEVTLCAJYmluMmJjZChkdC0+dG1fbWluKSk7CisJdjMwMjBfc2V0X3JlZyhjaGlwLCBWMzAyMF9IT1VSUywgCWJpbjJiY2QoZHQtPnRtX2hvdXIpKTsKKwl2MzAyMF9zZXRfcmVnKGNoaXAsIFYzMDIwX01PTlRIX0RBWSwJYmluMmJjZChkdC0+dG1fbWRheSkpOworCXYzMDIwX3NldF9yZWcoY2hpcCwgVjMwMjBfTU9OVEgsICAgICBiaW4yYmNkKGR0LT50bV9tb24gKyAxKSk7CisJdjMwMjBfc2V0X3JlZyhjaGlwLCBWMzAyMF9XRUVLX0RBWSwgCWJpbjJiY2QoZHQtPnRtX3dkYXkpKTsKKwl2MzAyMF9zZXRfcmVnKGNoaXAsIFYzMDIwX1lFQVIsIAliaW4yYmNkKGR0LT50bV95ZWFyICUgMTAwKSk7CiAKIAkvKiAuLi5hbmQgc2V0IHRoZSBjbG9jay4gKi8KIAl2MzAyMF9zZXRfcmVnKGNoaXAsIFYzMDIwX0NNRF9SQU0yQ0xPQ0ssIDApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLXZyNDF4eC5jIGIvZHJpdmVycy9ydGMvcnRjLXZyNDF4eC5jCmluZGV4IDg4NGI2MzUuLjgzNGRjYzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL3J0Yy12cjQxeHguYworKysgYi9kcml2ZXJzL3J0Yy9ydGMtdnI0MXh4LmMKQEAgLTM2MCw3ICszNjAsNyBAQAogCXNwaW5fdW5sb2NrX2lycSgmcnRjX2xvY2spOwogCiAJYWllX2lycSA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCk7Ci0JaWYgKGFpZV9pcnEgPCAwIHx8IGFpZV9pcnEgPj0gTlJfSVJRUykgeworCWlmIChhaWVfaXJxIDwgMCB8fCBhaWVfaXJxID49IG5yX2lycXMpIHsKIAkJcmV0dmFsID0gLUVCVVNZOwogCQlnb3RvIGVycl9kZXZpY2VfdW5yZWdpc3RlcjsKIAl9CkBAIC0zNzEsNyArMzcxLDcgQEAKIAkJZ290byBlcnJfZGV2aWNlX3VucmVnaXN0ZXI7CiAKIAlwaWVfaXJxID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAxKTsKLQlpZiAocGllX2lycSA8IDAgfHwgcGllX2lycSA+PSBOUl9JUlFTKQorCWlmIChwaWVfaXJxIDwgMCB8fCBwaWVfaXJxID49IG5yX2lycXMpCiAJCWdvdG8gZXJyX2ZyZWVfaXJxOwogCiAJcmV0dmFsID0gcmVxdWVzdF9pcnEocGllX2lycSwgcnRjbG9uZzFfaW50ZXJydXB0LCBJUlFGX0RJU0FCTEVELApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLXgxMjA1LmMgYi9kcml2ZXJzL3J0Yy9ydGMteDEyMDUuYwppbmRleCA3ZGNmYmExLi4zMTBjMTA3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMteDEyMDUuYworKysgYi9kcml2ZXJzL3J0Yy9ydGMteDEyMDUuYwpAQCAtMTE4LDEzICsxMTgsMTMgQEAKIAkJZm9yIChpID0gMDsgaSA8PSA0OyBpKyspCiAJCQlidWZbaV0gJj0gMHg3RjsKIAotCXRtLT50bV9zZWMgPSBCQ0QyQklOKGJ1ZltDQ1JfU0VDXSk7Ci0JdG0tPnRtX21pbiA9IEJDRDJCSU4oYnVmW0NDUl9NSU5dKTsKLQl0bS0+dG1faG91ciA9IEJDRDJCSU4oYnVmW0NDUl9IT1VSXSAmIDB4M0YpOyAvKiBociBpcyAwLTIzICovCi0JdG0tPnRtX21kYXkgPSBCQ0QyQklOKGJ1ZltDQ1JfTURBWV0pOwotCXRtLT50bV9tb24gPSBCQ0QyQklOKGJ1ZltDQ1JfTU9OVEhdKSAtIDE7IC8qIG1vbiBpcyAwLTExICovCi0JdG0tPnRtX3llYXIgPSBCQ0QyQklOKGJ1ZltDQ1JfWUVBUl0pCi0JCQkrIChCQ0QyQklOKGJ1ZltDQ1JfWTJLXSkgKiAxMDApIC0gMTkwMDsKKwl0bS0+dG1fc2VjID0gYmNkMmJpbihidWZbQ0NSX1NFQ10pOworCXRtLT50bV9taW4gPSBiY2QyYmluKGJ1ZltDQ1JfTUlOXSk7CisJdG0tPnRtX2hvdXIgPSBiY2QyYmluKGJ1ZltDQ1JfSE9VUl0gJiAweDNGKTsgLyogaHIgaXMgMC0yMyAqLworCXRtLT50bV9tZGF5ID0gYmNkMmJpbihidWZbQ0NSX01EQVldKTsKKwl0bS0+dG1fbW9uID0gYmNkMmJpbihidWZbQ0NSX01PTlRIXSkgLSAxOyAvKiBtb24gaXMgMC0xMSAqLworCXRtLT50bV95ZWFyID0gYmNkMmJpbihidWZbQ0NSX1lFQVJdKQorCQkJKyAoYmNkMmJpbihidWZbQ0NSX1kyS10pICogMTAwKSAtIDE5MDA7CiAJdG0tPnRtX3dkYXkgPSBidWZbQ0NSX1dEQVldOwogCiAJZGV2X2RiZygmY2xpZW50LT5kZXYsICIlczogdG0gaXMgc2Vjcz0lZCwgbWlucz0lZCwgaG91cnM9JWQsICIKQEAgLTE3NCwxMSArMTc0LDExIEBACiAJCV9fZnVuY19fLAogCQl0bS0+dG1fc2VjLCB0bS0+dG1fbWluLCB0bS0+dG1faG91cik7CiAKLQlidWZbQ0NSX1NFQ10gPSBCSU4yQkNEKHRtLT50bV9zZWMpOwotCWJ1ZltDQ1JfTUlOXSA9IEJJTjJCQ0QodG0tPnRtX21pbik7CisJYnVmW0NDUl9TRUNdID0gYmluMmJjZCh0bS0+dG1fc2VjKTsKKwlidWZbQ0NSX01JTl0gPSBiaW4yYmNkKHRtLT50bV9taW4pOwogCiAJLyogc2V0IGhvdXIgYW5kIDI0aHIgYml0ICovCi0JYnVmW0NDUl9IT1VSXSA9IEJJTjJCQ0QodG0tPnRtX2hvdXIpIHwgWDEyMDVfSFJfTUlMOworCWJ1ZltDQ1JfSE9VUl0gPSBiaW4yYmNkKHRtLT50bV9ob3VyKSB8IFgxMjA1X0hSX01JTDsKIAogCS8qIHNob3VsZCB3ZSBhbHNvIHNldCB0aGUgZGF0ZT8gKi8KIAlpZiAoZGF0ZXRvbykgewpAQCAtMTg3LDE1ICsxODcsMTUgQEAKIAkJCV9fZnVuY19fLAogCQkJdG0tPnRtX21kYXksIHRtLT50bV9tb24sIHRtLT50bV95ZWFyLCB0bS0+dG1fd2RheSk7CiAKLQkJYnVmW0NDUl9NREFZXSA9IEJJTjJCQ0QodG0tPnRtX21kYXkpOworCQlidWZbQ0NSX01EQVldID0gYmluMmJjZCh0bS0+dG1fbWRheSk7CiAKIAkJLyogbW9udGgsIDEgLSAxMiAqLwotCQlidWZbQ0NSX01PTlRIXSA9IEJJTjJCQ0QodG0tPnRtX21vbiArIDEpOworCQlidWZbQ0NSX01PTlRIXSA9IGJpbjJiY2QodG0tPnRtX21vbiArIDEpOwogCiAJCS8qIHllYXIsIHNpbmNlIHRoZSBydGMgZXBvY2gqLwotCQlidWZbQ0NSX1lFQVJdID0gQklOMkJDRCh0bS0+dG1feWVhciAlIDEwMCk7CisJCWJ1ZltDQ1JfWUVBUl0gPSBiaW4yYmNkKHRtLT50bV95ZWFyICUgMTAwKTsKIAkJYnVmW0NDUl9XREFZXSA9IHRtLT50bV93ZGF5ICYgMHgwNzsKLQkJYnVmW0NDUl9ZMktdID0gQklOMkJDRCh0bS0+dG1feWVhciAvIDEwMCk7CisJCWJ1ZltDQ1JfWTJLXSA9IGJpbjJiY2QodG0tPnRtX3llYXIgLyAxMDApOwogCX0KIAogCS8qIElmIHdyaXRpbmcgYWxhcm0gcmVnaXN0ZXJzLCBzZXQgY29tcGFyZSBiaXRzIG9uIHJlZ2lzdGVycyAwLTQgKi8KQEAgLTQzNyw3ICs0MzcsNyBAQAogCQkJcmV0dXJuIC1FSU87CiAJCX0KIAotCQl2YWx1ZSA9IEJDRDJCSU4ocmVnICYgcHJvYmVfbGltaXRzX3BhdHRlcm5baV0ubWFzayk7CisJCXZhbHVlID0gYmNkMmJpbihyZWcgJiBwcm9iZV9saW1pdHNfcGF0dGVybltpXS5tYXNrKTsKIAogCQlpZiAodmFsdWUgPiBwcm9iZV9saW1pdHNfcGF0dGVybltpXS5tYXggfHwKIAkJCXZhbHVlIDwgcHJvYmVfbGltaXRzX3BhdHRlcm5baV0ubWluKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9kaWFnLmMgYi9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9kaWFnLmMKaW5kZXggODVmY2I0My4uNzg0NDQ2MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZGlhZy5jCisrKyBiL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2RpYWcuYwpAQCAtNTQ0LDcgKzU0NCw3IEBACiAJfQogCWNxci0+cmV0cmllcyA9IERJQUdfTUFYX1JFVFJJRVM7CiAJY3FyLT5idWlsZGNsayA9IGdldF9jbG9jaygpOwotCWlmIChyZXEtPmNtZF9mbGFncyAmIFJFUV9GQUlMRkFTVCkKKwlpZiAoYmxrX25vcmV0cnlfcmVxdWVzdChyZXEpKQogCQlzZXRfYml0KERBU0RfQ1FSX0ZMQUdTX0ZBSUxGQVNULCAmY3FyLT5mbGFncyk7CiAJY3FyLT5zdGFydGRldiA9IG1lbWRldjsKIAljcXItPm1lbWRldiA9IG1lbWRldjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2Vja2QuYyBiL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2Vja2QuYwppbmRleCA0OWY5ZDIyLi4yZTYwZDVmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9lY2tkLmMKKysrIGIvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZWNrZC5jCkBAIC0xNzAwLDcgKzE3MDAsNyBAQAogCQkJcmVjaWQrKzsKIAkJfQogCX0KLQlpZiAocmVxLT5jbWRfZmxhZ3MgJiBSRVFfRkFJTEZBU1QpCisJaWYgKGJsa19ub3JldHJ5X3JlcXVlc3QocmVxKSkKIAkJc2V0X2JpdChEQVNEX0NRUl9GTEFHU19GQUlMRkFTVCwgJmNxci0+ZmxhZ3MpOwogCWNxci0+c3RhcnRkZXYgPSBzdGFydGRldjsKIAljcXItPm1lbWRldiA9IHN0YXJ0ZGV2OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZmJhLmMgYi9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9mYmEuYwppbmRleCA5M2Q5YjY0Li43ZDQ0MmFlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9mYmEuYworKysgYi9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9mYmEuYwpAQCAtMzU1LDcgKzM1NSw3IEBACiAJCQlyZWNpZCsrOwogCQl9CiAJfQotCWlmIChyZXEtPmNtZF9mbGFncyAmIFJFUV9GQUlMRkFTVCkKKwlpZiAoYmxrX25vcmV0cnlfcmVxdWVzdChyZXEpKQogCQlzZXRfYml0KERBU0RfQ1FSX0ZMQUdTX0ZBSUxGQVNULCAmY3FyLT5mbGFncyk7CiAJY3FyLT5zdGFydGRldiA9IG1lbWRldjsKIAljcXItPm1lbWRldiA9IG1lbWRldjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaGFyL2ZzMzI3MC5jIGIvZHJpdmVycy9zMzkwL2NoYXIvZnMzMjcwLmMKaW5kZXggZDE4ZTZkMi4uNDA3NTljMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2NoYXIvZnMzMjcwLmMKKysrIGIvZHJpdmVycy9zMzkwL2NoYXIvZnMzMjcwLmMKQEAgLTQxOCwyNSArNDE4LDIyIEBACiB7CiAJc3RydWN0IGZzMzI3MCAqZnA7CiAJc3RydWN0IGlkYWxfYnVmZmVyICppYjsKLQlpbnQgbWlub3IsIHJjOworCWludCBtaW5vciwgcmMgPSAwOwogCiAJaWYgKGltYWpvcihmaWxwLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlKSAhPSBJQk1fRlMzMjcwX01BSk9SKQogCQlyZXR1cm4gLUVOT0RFVjsKLQlsb2NrX2tlcm5lbCgpOwogCW1pbm9yID0gaW1pbm9yKGZpbHAtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUpOwogCS8qIENoZWNrIGZvciBtaW5vciAwIG11bHRpcGxleGVyLiAqLwogCWlmIChtaW5vciA9PSAwKSB7Ci0JCXN0cnVjdCB0dHlfc3RydWN0ICp0dHk7Ci0JCW11dGV4X2xvY2soJnR0eV9tdXRleCk7Ci0JCXR0eSA9IGdldF9jdXJyZW50X3R0eSgpOworCQlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5ID0gZ2V0X2N1cnJlbnRfdHR5KCk7CiAJCWlmICghdHR5IHx8IHR0eS0+ZHJpdmVyLT5tYWpvciAhPSBJQk1fVFRZMzI3MF9NQUpPUikgewotCQkJbXV0ZXhfdW5sb2NrKCZ0dHlfbXV0ZXgpOwotCQkJcmMgPSAtRU5PREVWOwotCQkJZ290byBvdXQ7CisJCQl0dHlfa3JlZl9wdXQodHR5KTsKKwkJCXJldHVybiAtRU5PREVWOwogCQl9CiAJCW1pbm9yID0gdHR5LT5pbmRleCArIFJBVzMyNzBfRklSU1RNSU5PUjsKLQkJbXV0ZXhfdW5sb2NrKCZ0dHlfbXV0ZXgpOworCQl0dHlfa3JlZl9wdXQodHR5KTsKIAl9CisJbG9ja19rZXJuZWwoKTsKIAkvKiBDaGVjayBpZiBzb21lIG90aGVyIHByb2dyYW0gaXMgYWxyZWFkeSB1c2luZyBmdWxsc2NyZWVuIG1vZGUuICovCiAJZnAgPSAoc3RydWN0IGZzMzI3MCAqKSByYXczMjcwX2ZpbmRfdmlldygmZnMzMjcwX2ZuLCBtaW5vcik7CiAJaWYgKCFJU19FUlIoZnApKSB7CkBAIC00NzgsNyArNDc1LDcgQEAKIAlmaWxwLT5wcml2YXRlX2RhdGEgPSBmcDsKIG91dDoKIAl1bmxvY2tfa2VybmVsKCk7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIHJjOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2NoYXIvcmF3MzI3MC5jIGIvZHJpdmVycy9zMzkwL2NoYXIvcmF3MzI3MC5jCmluZGV4IDE3OTJiMmMuLjBiMTVjZjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaGFyL3JhdzMyNzAuYworKysgYi9kcml2ZXJzL3MzOTAvY2hhci9yYXczMjcwLmMKQEAgLTExNjgsMTkgKzExNjgsMTcgQEAKIAlpZiAocmMpCiAJCWdvdG8gb3V0OwogCi0JcnAtPmNsdHR5ZGV2ID0gZGV2aWNlX2NyZWF0ZV9kcnZkYXRhKGNsYXNzMzI3MCwgJnJwLT5jZGV2LT5kZXYsCi0JCQkJCSAgICAgTUtERVYoSUJNX1RUWTMyNzBfTUFKT1IsIHJwLT5taW5vciksCi0JCQkJCSAgICAgTlVMTCwKLQkJCQkJICAgICAidHR5JXMiLCBkZXZfbmFtZSgmcnAtPmNkZXYtPmRldikpOworCXJwLT5jbHR0eWRldiA9IGRldmljZV9jcmVhdGUoY2xhc3MzMjcwLCAmcnAtPmNkZXYtPmRldiwKKwkJCQkgICAgIE1LREVWKElCTV9UVFkzMjcwX01BSk9SLCBycC0+bWlub3IpLCBOVUxMLAorCQkJCSAgICAgInR0eSVzIiwgZGV2X25hbWUoJnJwLT5jZGV2LT5kZXYpKTsKIAlpZiAoSVNfRVJSKHJwLT5jbHR0eWRldikpIHsKIAkJcmMgPSBQVFJfRVJSKHJwLT5jbHR0eWRldik7CiAJCWdvdG8gb3V0X3R0eWRldjsKIAl9CiAKLQlycC0+Y2x0dWJkZXYgPSBkZXZpY2VfY3JlYXRlX2RydmRhdGEoY2xhc3MzMjcwLCAmcnAtPmNkZXYtPmRldiwKLQkJCQkJICAgICBNS0RFVihJQk1fRlMzMjcwX01BSk9SLCBycC0+bWlub3IpLAotCQkJCQkgICAgIE5VTEwsCi0JCQkJCSAgICAgInR1YiVzIiwgZGV2X25hbWUoJnJwLT5jZGV2LT5kZXYpKTsKKwlycC0+Y2x0dWJkZXYgPSBkZXZpY2VfY3JlYXRlKGNsYXNzMzI3MCwgJnJwLT5jZGV2LT5kZXYsCisJCQkJICAgICBNS0RFVihJQk1fRlMzMjcwX01BSk9SLCBycC0+bWlub3IpLCBOVUxMLAorCQkJCSAgICAgInR1YiVzIiwgZGV2X25hbWUoJnJwLT5jZGV2LT5kZXYpKTsKIAlpZiAoIUlTX0VSUihycC0+Y2x0dWJkZXYpKQogCQlnb3RvIG91dDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2NoYXIvdGFwZV9jbGFzcy5jIGIvZHJpdmVycy9zMzkwL2NoYXIvdGFwZV9jbGFzcy5jCmluZGV4IDEyYzJhNWEuLmRkYzkxNGNjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2hhci90YXBlX2NsYXNzLmMKKysrIGIvZHJpdmVycy9zMzkwL2NoYXIvdGFwZV9jbGFzcy5jCkBAIC02OSw5ICs2OSw5IEBACiAJaWYgKHJjKQogCQlnb3RvIGZhaWxfd2l0aF9jZGV2OwogCi0JdGNkLT5jbGFzc19kZXZpY2UgPSBkZXZpY2VfY3JlYXRlX2RydmRhdGEodGFwZV9jbGFzcywgZGV2aWNlLAotCQkJCQkJICB0Y2QtPmNoYXJfZGV2aWNlLT5kZXYsCi0JCQkJCQkgIE5VTEwsICIlcyIsIHRjZC0+ZGV2aWNlX25hbWUpOworCXRjZC0+Y2xhc3NfZGV2aWNlID0gZGV2aWNlX2NyZWF0ZSh0YXBlX2NsYXNzLCBkZXZpY2UsCisJCQkJCSAgdGNkLT5jaGFyX2RldmljZS0+ZGV2LCBOVUxMLAorCQkJCQkgICIlcyIsIHRjZC0+ZGV2aWNlX25hbWUpOwogCXJjID0gSVNfRVJSKHRjZC0+Y2xhc3NfZGV2aWNlKSA/IFBUUl9FUlIodGNkLT5jbGFzc19kZXZpY2UpIDogMDsKIAlpZiAocmMpCiAJCWdvdG8gZmFpbF93aXRoX2NkZXY7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2hhci92bWxvZ3Jkci5jIGIvZHJpdmVycy9zMzkwL2NoYXIvdm1sb2dyZHIuYwppbmRleCA0MjE3M2NjLi4yNDc2MjcyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2hhci92bWxvZ3Jkci5jCisrKyBiL2RyaXZlcnMvczM5MC9jaGFyL3ZtbG9ncmRyLmMKQEAgLTc0NywxMCArNzQ3LDEwIEBACiAJCWRldmljZV91bnJlZ2lzdGVyKGRldik7CiAJCXJldHVybiByZXQ7CiAJfQotCXByaXYtPmNsYXNzX2RldmljZSA9IGRldmljZV9jcmVhdGVfZHJ2ZGF0YSh2bWxvZ3Jkcl9jbGFzcywgZGV2LAotCQkJCQkJICAgTUtERVYodm1sb2dyZHJfbWFqb3IsCi0JCQkJCQkJIHByaXYtPm1pbm9yX251bSksCi0JCQkJCQkgICBwcml2LCAiJXMiLCBkZXZfbmFtZShkZXYpKTsKKwlwcml2LT5jbGFzc19kZXZpY2UgPSBkZXZpY2VfY3JlYXRlKHZtbG9ncmRyX2NsYXNzLCBkZXYsCisJCQkJCSAgIE1LREVWKHZtbG9ncmRyX21ham9yLAorCQkJCQkJIHByaXYtPm1pbm9yX251bSksCisJCQkJCSAgIHByaXYsICIlcyIsIGRldl9uYW1lKGRldikpOwogCWlmIChJU19FUlIocHJpdi0+Y2xhc3NfZGV2aWNlKSkgewogCQlyZXQgPSBQVFJfRVJSKHByaXYtPmNsYXNzX2RldmljZSk7CiAJCXByaXYtPmNsYXNzX2RldmljZT1OVUxMOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2NoYXIvdm11ci5jIGIvZHJpdmVycy9zMzkwL2NoYXIvdm11ci5jCmluZGV4IDZmZGZhNWQuLjkwMjBlYmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaGFyL3ZtdXIuYworKysgYi9kcml2ZXJzL3MzOTAvY2hhci92bXVyLmMKQEAgLTg5Niw5ICs4OTYsOCBAQAogCQlnb3RvIGZhaWxfZnJlZV9jZGV2OwogCX0KIAotCXVyZC0+ZGV2aWNlID0gZGV2aWNlX2NyZWF0ZV9kcnZkYXRhKHZtdXJfY2xhc3MsIE5VTEwsCi0JCQkJCSAgICB1cmQtPmNoYXJfZGV2aWNlLT5kZXYsIE5VTEwsCi0JCQkJCSAgICAiJXMiLCBub2RlX2lkKTsKKwl1cmQtPmRldmljZSA9IGRldmljZV9jcmVhdGUodm11cl9jbGFzcywgTlVMTCwgdXJkLT5jaGFyX2RldmljZS0+ZGV2LAorCQkJCSAgICBOVUxMLCAiJXMiLCBub2RlX2lkKTsKIAlpZiAoSVNfRVJSKHVyZC0+ZGV2aWNlKSkgewogCQlyYyA9IFBUUl9FUlIodXJkLT5kZXZpY2UpOwogCQlUUkFDRSgidXJfc2V0X29ubGluZTogZGV2aWNlX2NyZWF0ZSByYz0lZFxuIiwgcmMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL25ldC9jbGF3LmMgYi9kcml2ZXJzL3MzOTAvbmV0L2NsYXcuYwppbmRleCA4ZjgzZmM5Li5mNWU2MTg1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvbmV0L2NsYXcuYworKysgYi9kcml2ZXJzL3MzOTAvbmV0L2NsYXcuYwpAQCAtMjkxMyw3ICsyOTEzLDcgQEAKIAlpZiAocmV0ICE9IDApIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORwogCQkJImNsYXc6IGNjd19kZXZpY2Vfc2V0X29ubGluZSAlcyBXUklURSBmYWlsZWQgIgotCQkgICAgICAgIndpdGggcmV0ID0gJWRcbiIsIGRldl9uYW1lKCZjZ2Rldi0+Y2RldltXUklURV0tPmRldikKKwkJICAgICAgICJ3aXRoIHJldCA9ICVkXG4iLCBkZXZfbmFtZSgmY2dkZXYtPmNkZXZbV1JJVEVdLT5kZXYpLAogCQkgICAgICAgcmV0KTsKIAkJZ290byBvdXQ7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL25ldC9jdGNtX21wYy5jIGIvZHJpdmVycy9zMzkwL25ldC9jdGNtX21wYy5jCmluZGV4IGNiZTQ3MDQuLjE5ZjVkNWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9uZXQvY3RjbV9tcGMuYworKysgYi9kcml2ZXJzL3MzOTAvbmV0L2N0Y21fbXBjLmMKQEAgLTE2NzMsNyArMTY3Myw3IEBACiAKIGRvbmU6CiAJaWYgKHJjKSB7Ci0JCWN0Y21fcHJfaW5mbygiY3RjbXBjCSAgIDogICVzKCkgZmFpbGVkXG4iLCBfX0ZVTkNUSU9OX18pOworCQljdGNtX3ByX2luZm8oImN0Y21wYwkgICA6ICAlcygpIGZhaWxlZFxuIiwgX19mdW5jX18pOwogCQlwcml2LT54aWQtPnhpZDJfZmxhZzIgPSAweDQwOwogCQlncnAtPnNhdmVkX3hpZDItPnhpZDJfZmxhZzIgPSAweDQwOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZGVmLmggYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2RlZi5oCmluZGV4IDhhMTMwNzEuLjljZTRjNzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZGVmLmgKKysrIGIvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9kZWYuaApAQCAtNTgzLDYgKzU4Myw4IEBACiAJdW5zaWduZWQgbG9uZyBsb25nICAgICBpc3N1ZWQ7ICAgICAgICAgLyogcmVxdWVzdCBzZW50IHRpbWUgKFNUQ0spICovCiAJc3RydWN0IHpmY3BfdW5pdCAgICAgICAqdW5pdDsKIAl2b2lkCQkJKCpoYW5kbGVyKShzdHJ1Y3QgemZjcF9mc2ZfcmVxICopOworCXUxNgkJCXFkaW9fb3V0Yl91c2FnZTsvKiB1c2FnZSBvZiBvdXRib3VuZCBxdWV1ZSAqLworCXUxNgkJCXFkaW9faW5iX3VzYWdlOwkvKiB1c2FnZSBvZiBpbmJvdW5kIHF1ZXVlICovCiB9OwogCiAvKiBkcml2ZXIgZGF0YSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9mc2YuYyBiL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZnNmLmMKaW5kZXggNzM5MzU2YS4uNWFlMWQ0OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9mc2YuYworKysgYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2ZzZi5jCkBAIC02LDYgKzYsNyBAQAogICogQ29weXJpZ2h0IElCTSBDb3Jwb3JhdGlvbiAyMDAyLCAyMDA4CiAgKi8KIAorI2luY2x1ZGUgPGxpbnV4L2Jsa3RyYWNlX2FwaS5oPgogI2luY2x1ZGUgInpmY3BfZXh0LmgiCiAKIHN0YXRpYyB2b2lkIHpmY3BfZnNmX3JlcXVlc3RfdGltZW91dF9oYW5kbGVyKHVuc2lnbmVkIGxvbmcgZGF0YSkKQEAgLTc3Nyw2ICs3NzgsNyBAQAogCWxpc3RfYWRkX3RhaWwoJnJlcS0+bGlzdCwgJmFkYXB0ZXItPnJlcV9saXN0W2lkeF0pOwogCXNwaW5fdW5sb2NrKCZhZGFwdGVyLT5yZXFfbGlzdF9sb2NrKTsKIAorCXJlcS0+cWRpb19vdXRiX3VzYWdlID0gYXRvbWljX3JlYWQoJnJlcV9xLT5jb3VudCk7CiAJcmVxLT5pc3N1ZWQgPSBnZXRfY2xvY2soKTsKIAlpZiAoemZjcF9xZGlvX3NlbmQocmVxKSkgewogCQkvKiBRdWV1ZXMgYXJlIGRvd24uLi4uLiAqLwpAQCAtMjA4Miw2ICsyMDg0LDM2IEBACiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdW5pdC0+bGF0ZW5jaWVzLmxvY2ssIGZsYWdzKTsKIH0KIAorI2lmZGVmIENPTkZJR19CTEtfREVWX0lPX1RSQUNFCitzdGF0aWMgdm9pZCB6ZmNwX2ZzZl90cmFjZV9sYXRlbmN5KHN0cnVjdCB6ZmNwX2ZzZl9yZXEgKmZzZl9yZXEpCit7CisJc3RydWN0IGZzZl9xdWFsX2xhdGVuY3lfaW5mbyAqbGF0X2luZjsKKwlzdHJ1Y3Qgc2NzaV9jbW5kICpzY3NpX2NtbmQgPSAoc3RydWN0IHNjc2lfY21uZCAqKWZzZl9yZXEtPmRhdGE7CisJc3RydWN0IHJlcXVlc3QgKnJlcSA9IHNjc2lfY21uZC0+cmVxdWVzdDsKKwlzdHJ1Y3QgemZjcF9ibGtfZHJ2X2RhdGEgdHJhY2U7CisJaW50IHRpY2tzID0gZnNmX3JlcS0+YWRhcHRlci0+dGltZXJfdGlja3M7CisKKwl0cmFjZS5mbGFncyA9IDA7CisJdHJhY2UubWFnaWMgPSBaRkNQX0JMS19EUlZfREFUQV9NQUdJQzsKKwlpZiAoZnNmX3JlcS0+YWRhcHRlci0+YWRhcHRlcl9mZWF0dXJlcyAmIEZTRl9GRUFUVVJFX01FQVNVUkVNRU5UX0RBVEEpIHsKKwkJdHJhY2UuZmxhZ3MgfD0gWkZDUF9CTEtfTEFUX1ZBTElEOworCQlsYXRfaW5mID0gJmZzZl9yZXEtPnF0Y2ItPnByZWZpeC5wcm90X3N0YXR1c19xdWFsLmxhdGVuY3lfaW5mbzsKKwkJdHJhY2UuY2hhbm5lbF9sYXQgPSBsYXRfaW5mLT5jaGFubmVsX2xhdCAqIHRpY2tzOworCQl0cmFjZS5mYWJyaWNfbGF0ID0gbGF0X2luZi0+ZmFicmljX2xhdCAqIHRpY2tzOworCX0KKwlpZiAoZnNmX3JlcS0+c3RhdHVzICYgWkZDUF9TVEFUVVNfRlNGUkVRX0VSUk9SKQorCQl0cmFjZS5mbGFncyB8PSBaRkNQX0JMS19SRVFfRVJST1I7CisJdHJhY2UuaW5iX3VzYWdlID0gZnNmX3JlcS0+cWRpb19pbmJfdXNhZ2U7CisJdHJhY2Uub3V0Yl91c2FnZSA9IGZzZl9yZXEtPnFkaW9fb3V0Yl91c2FnZTsKKworCWJsa19hZGRfZHJpdmVyX2RhdGEocmVxLT5xLCByZXEsICZ0cmFjZSwgc2l6ZW9mKHRyYWNlKSk7Cit9CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIHpmY3BfZnNmX3RyYWNlX2xhdGVuY3koc3RydWN0IHpmY3BfZnNmX3JlcSAqZnNmX3JlcSkKK3sKK30KKyNlbmRpZgorCiBzdGF0aWMgdm9pZCB6ZmNwX2ZzZl9zZW5kX2ZjcF9jb21tYW5kX3Rhc2tfaGFuZGxlcihzdHJ1Y3QgemZjcF9mc2ZfcmVxICpyZXEpCiB7CiAJc3RydWN0IHNjc2lfY21uZCAqc2NwbnQgPSByZXEtPmRhdGE7CkBAIC0yMTE0LDYgKzIxNDYsOCBAQAogCWlmIChyZXEtPmFkYXB0ZXItPmFkYXB0ZXJfZmVhdHVyZXMgJiBGU0ZfRkVBVFVSRV9NRUFTVVJFTUVOVF9EQVRBKQogCQl6ZmNwX2ZzZl9yZXFfbGF0ZW5jeShyZXEpOwogCisJemZjcF9mc2ZfdHJhY2VfbGF0ZW5jeShyZXEpOworCiAJaWYgKHVubGlrZWx5KGZjcF9yc3BfaXUtPnZhbGlkaXR5LmJpdHMuZmNwX3JzcF9sZW5fdmFsaWQpKSB7CiAJCWlmIChmY3BfcnNwX2luZm9bM10gPT0gUlNQX0NPREVfR09PRCkKIAkJCXNldF9ob3N0X2J5dGUoc2NwbnQsIERJRF9PSyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2ZzZi5oIGIvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9mc2YuaAppbmRleCBmZDNhODg3Li5mYTJhMzE3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2ZzZi5oCisrKyBiL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZnNmLmgKQEAgLTQzOSw0ICs0MzksMTYgQEAKIAl1OCBsb2dbRlNGX1FUQ0JfTE9HX1NJWkVdOwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKK3N0cnVjdCB6ZmNwX2Jsa19kcnZfZGF0YSB7CisjZGVmaW5lIFpGQ1BfQkxLX0RSVl9EQVRBX01BR0lDCQkJMHgxCisJdTMyIG1hZ2ljOworI2RlZmluZSBaRkNQX0JMS19MQVRfVkFMSUQJCQkweDEKKyNkZWZpbmUgWkZDUF9CTEtfUkVRX0VSUk9SCQkJMHgyCisJdTE2IGZsYWdzOworCXU4IGluYl91c2FnZTsKKwl1OCBvdXRiX3VzYWdlOworCXU2NCBjaGFubmVsX2xhdDsKKwl1NjQgZmFicmljX2xhdDsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCiAjZW5kaWYJCQkJLyogRlNGX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfcWRpby5jIGIvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9xZGlvLmMKaW5kZXggM2UwNTA4MC4uNjY0NzUyZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9xZGlvLmMKKysrIGIvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9xZGlvLmMKQEAgLTExNSw2ICsxMTUsNyBAQAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFkYXB0ZXItPnJlcV9saXN0X2xvY2ssIGZsYWdzKTsKIAogCWZzZl9yZXEtPnNiYWxfcmVzcG9uc2UgPSBzYmFsX2lkeDsKKwlmc2ZfcmVxLT5xZGlvX2luYl91c2FnZSA9IGF0b21pY19yZWFkKCZhZGFwdGVyLT5yZXNwX3EuY291bnQpOwogCXpmY3BfZnNmX3JlcV9jb21wbGV0ZShmc2ZfcmVxKTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL0tjb25maWcgYi9kcml2ZXJzL3Njc2kvS2NvbmZpZwppbmRleCBkM2IyMTFhLi40MDNlY2FkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvS2NvbmZpZworKysgYi9kcml2ZXJzL3Njc2kvS2NvbmZpZwpAQCAtMTY0MCw2ICsxNjQwLDcgQEAKIAl0cmlzdGF0ZSAiQXRhcmkgbmF0aXZlIFNDU0kgc3VwcG9ydCIKIAlkZXBlbmRzIG9uIEFUQVJJICYmIFNDU0kKIAlzZWxlY3QgU0NTSV9TUElfQVRUUlMKKwlzZWxlY3QgTlZSQU0KIAktLS1oZWxwLS0tCiAJICBJZiB5b3UgaGF2ZSBhbiBBdGFyaSB3aXRoIGJ1aWx0LWluIE5DUjUzODAgU0NTSSBjb250cm9sbGVyIChUVCwKIAkgIEZhbGNvbiwgLi4uKSBzYXkgWSB0byBnZXQgaXQgc3VwcG9ydGVkLiBPZiBjb3Vyc2UgYWxzbywgaWYgeW91IGhhdmUKQEAgLTE2NzAsMTQgKzE2NzEsNiBAQAogCSAgYm9vdCBwcm9jZXNzIGZyYWN0aW9uYWxseSBsb25nZXIgYnV0IG1heSBhc3Npc3QgcmVjb3ZlcnkgZnJvbSBlcnJvcnMKIAkgIHRoYXQgbGVhdmUgdGhlIGRldmljZXMgd2l0aCBTQ1NJIG9wZXJhdGlvbnMgcGFydHdheSBjb21wbGV0ZWQuCiAKLWNvbmZpZyBUVF9ETUFfRU1VTAotCWJvb2wgIkhhZGVzIFNDU0kgRE1BIGVtdWxhdG9yIgotCWRlcGVuZHMgb24gQVRBUklfU0NTSSAmJiBIQURFUwotCWhlbHAKLQkgIFRoaXMgb3B0aW9uIGVuYWJsZXMgY29kZSB3aGljaCBlbXVsYXRlcyB0aGUgVFQgU0NTSSBETUEgY2hpcCBvbiB0aGUKLQkgIEhhZGVzLiBUaGlzIGluY3JlYXNlcyB0aGUgU0NTSSB0cmFuc2ZlciByYXRlcyBhdCBsZWFzdCB0ZW4gdGltZXMKLQkgIGNvbXBhcmVkIHRvIFBJTyB0cmFuc2ZlcnMuCi0KIGNvbmZpZyBNQUNfU0NTSQogCWJvb2wgIk1hY2ludG9zaCBOQ1I1MzgwIFNDU0kiCiAJZGVwZW5kcyBvbiBNQUMgJiYgU0NTST15CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYWhhMTUyeC5jIGIvZHJpdmVycy9zY3NpL2FoYTE1MnguYwppbmRleCBiNWE4NjhkLi4xZTU0NzhhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYWhhMTUyeC5jCisrKyBiL2RyaXZlcnMvc2NzaS9haGExNTJ4LmMKQEAgLTMzNyw3ICszMzcsNyBAQAogI2Vsc2UKICNkZWZpbmUgSVJRX01JTiA5CiAjaWYgZGVmaW5lZChfX1BQQykKLSNkZWZpbmUgSVJRX01BWCAoTlJfSVJRUy0xKQorI2RlZmluZSBJUlFfTUFYIChucl9pcnFzLTEpCiAjZWxzZQogI2RlZmluZSBJUlFfTUFYIDEyCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9hcmNtc3IvYXJjbXNyX2F0dHIuYyBiL2RyaXZlcnMvc2NzaS9hcmNtc3IvYXJjbXNyX2F0dHIuYwppbmRleCA2OWY4MzQ2Li41ODc3ZjI5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYXJjbXNyL2FyY21zcl9hdHRyLmMKKysrIGIvZHJpdmVycy9zY3NpL2FyY21zci9hcmNtc3JfYXR0ci5jCkBAIC0xODksNyArMTg5LDYgQEAKIAkuYXR0ciA9IHsKIAkJLm5hbWUgPSAibXVfcmVhZCIsCiAJCS5tb2RlID0gU19JUlVTUiAsCi0JCS5vd25lciA9IFRISVNfTU9EVUxFLAogCX0sCiAJLnNpemUgPSAxMDMyLAogCS5yZWFkID0gYXJjbXNyX3N5c2ZzX2lvcF9tZXNzYWdlX3JlYWQsCkBAIC0xOTksNyArMTk4LDYgQEAKIAkuYXR0ciA9IHsKIAkJLm5hbWUgPSAibXVfd3JpdGUiLAogCQkubW9kZSA9IFNfSVdVU1IsCi0JCS5vd25lciA9IFRISVNfTU9EVUxFLAogCX0sCiAJLnNpemUgPSAxMDMyLAogCS53cml0ZSA9IGFyY21zcl9zeXNmc19pb3BfbWVzc2FnZV93cml0ZSwKQEAgLTIwOSw3ICsyMDcsNiBAQAogCS5hdHRyID0gewogCQkubmFtZSA9ICJtdV9jbGVhciIsCiAJCS5tb2RlID0gU19JV1VTUiwKLQkJLm93bmVyID0gVEhJU19NT0RVTEUsCiAJfSwKIAkuc2l6ZSA9IDEsCiAJLndyaXRlID0gYXJjbXNyX3N5c2ZzX2lvcF9tZXNzYWdlX2NsZWFyLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2F0YXJpX2RtYV9lbXVsLmMgYi9kcml2ZXJzL3Njc2kvYXRhcmlfZG1hX2VtdWwuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2RjNzEwZS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3Njc2kvYXRhcmlfZG1hX2VtdWwuYworKysgL2Rldi9udWxsCkBAIC0xLDQ2OCArMCwwIEBACi0vKgotICogYXRhcmlfZG1hX2VtdWwuYyAtLSBUVCBTQ1NJIERNQSBlbXVsYXRvciBmb3IgdGhlIEhhZGVzLgotICoKLSAqIENvcHlyaWdodCAxOTk3IFdvdXQgS2xhcmVuIDxXLktsYXJlbkBpbnRlci5ubC5uZXQ+Ci0gKgotICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCi0gKiBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFRoaXMgY29kZSB3YXMgd3JpdHRlbiB1c2luZyB0aGUgSGFkZXMgVE9TIHNvdXJjZSBjb2RlIGFzIGEKLSAqIHJlZmVyZW5jZS4gVGhpcyBzb3VyY2UgY29kZSBjYW4gYmUgZm91bmQgb24gdGhlIGhvbWUgcGFnZQotICogb2YgTWVkdXNhIENvbXB1dGVyIFN5c3RlbXMuCi0gKgotICogVmVyc2lvbiAwLjEsIDE5OTctMDktMjQuCi0gKiAKLSAqIFRoaXMgY29kZSBzaG91bGQgYmUgY29uc2lkZXJlZCBleHBlcmltZW50YWwuIEl0IGhhcyBvbmx5IGJlZW4KLSAqIHRlc3RlZCBvbiBhIEhhZGVzIHdpdGggYSA2ODA2MC4gSXQgbWlnaHQgbm90IHdvcmsgb24gYSBIYWRlcwotICogd2l0aCBhIDY4MDQwLiBNYWtlIGJhY2t1cHMgb2YgeW91ciBoYXJkIGRyaXZlcyBiZWZvcmUgdXNpbmcKLSAqIHRoaXMgY29kZS4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KLSNpbmNsdWRlIDxhc20vdGhyZWFkX2luZm8uaD4KLSNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgotCi0jZGVmaW5lIGhhZGVzX2RtYV9jdHJsCQkoKih1bnNpZ25lZCBjaGFyICopIDB4ZmZmZjg3MTcpCi0jZGVmaW5lIGhhZGVzX3BzZG1fcmVnCQkoKih1bnNpZ25lZCBjaGFyICopIDB4ZmZmZjg3NDEpCi0KLSNkZWZpbmUgVFJBTlNGRVJfU0laRQkJMTYKLQotc3RydWN0IG02ODA0MF9mcmFtZSB7Ci0JdW5zaWduZWQgbG9uZyAgZWZmYWRkcjsgIC8qIGVmZmVjdGl2ZSBhZGRyZXNzICovCi0JdW5zaWduZWQgc2hvcnQgc3N3OyAgICAgIC8qIHNwZWNpYWwgc3RhdHVzIHdvcmQgKi8KLQl1bnNpZ25lZCBzaG9ydCB3YjNzOyAgICAgLyogd3JpdGUgYmFjayAzIHN0YXR1cyAqLwotCXVuc2lnbmVkIHNob3J0IHdiMnM7ICAgICAvKiB3cml0ZSBiYWNrIDIgc3RhdHVzICovCi0JdW5zaWduZWQgc2hvcnQgd2IxczsgICAgIC8qIHdyaXRlIGJhY2sgMSBzdGF0dXMgKi8KLQl1bnNpZ25lZCBsb25nICBmYWRkcjsgICAgLyogZmF1bHQgYWRkcmVzcyAqLwotCXVuc2lnbmVkIGxvbmcgIHdiM2E7ICAgICAvKiB3cml0ZSBiYWNrIDMgYWRkcmVzcyAqLwotCXVuc2lnbmVkIGxvbmcgIHdiM2Q7ICAgICAvKiB3cml0ZSBiYWNrIDMgZGF0YSAqLwotCXVuc2lnbmVkIGxvbmcgIHdiMmE7ICAgICAvKiB3cml0ZSBiYWNrIDIgYWRkcmVzcyAqLwotCXVuc2lnbmVkIGxvbmcgIHdiMmQ7ICAgICAvKiB3cml0ZSBiYWNrIDIgZGF0YSAqLwotCXVuc2lnbmVkIGxvbmcgIHdiMWE7ICAgICAvKiB3cml0ZSBiYWNrIDEgYWRkcmVzcyAqLwotCXVuc2lnbmVkIGxvbmcgIHdiMWRwZDA7ICAvKiB3cml0ZSBiYWNrIDEgZGF0YS9wdXNoIGRhdGEgMCovCi0JdW5zaWduZWQgbG9uZyAgcGQxOyAgICAgIC8qIHB1c2ggZGF0YSAxKi8KLQl1bnNpZ25lZCBsb25nICBwZDI7ICAgICAgLyogcHVzaCBkYXRhIDIqLwotCXVuc2lnbmVkIGxvbmcgIHBkMzsgICAgICAvKiBwdXNoIGRhdGEgMyovCi19OwotCi1zdGF0aWMgdm9pZCB3cml0ZWJhY2sgKHVuc2lnbmVkIHNob3J0IHdicywgdW5zaWduZWQgbG9uZyB3YmEsCi0JCSAgICAgICB1bnNpZ25lZCBsb25nIHdiZCwgdm9pZCAqb2xkX2J1c2VycikKLXsKLQltbV9zZWdtZW50X3QgZnMgPSBnZXRfZnMoKTsKLQlzdGF0aWMgdm9pZCAqc2F2ZV9idXNlcnI7Ci0KLQlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoIm1vdmVjLmwJJSV2YnIsJSVhMFxuXHQiCi0JCQkgICAgICAibW92ZS5sCSUwLDgoJSVhMClcblx0IgotCQkJICAgICAgOgotCQkJICAgICAgOiAiciIgKCYmYnVzX2Vycm9yKQotCQkJICAgICAgOiAiYTAiICk7Ci0KLQlzYXZlX2J1c2VyciA9IG9sZF9idXNlcnI7Ci0KLQlzZXRfZnMgKE1BS0VfTU1fU0VHKHdicyAmIFdCVE1fMDQwKSk7Ci0KLQlzd2l0Y2ggKHdicyAmIFdCU0laXzA0MCkgewotCSAgICBjYXNlIEJBX1NJWkVfQllURToKLQkJcHV0X3VzZXIgKHdiZCAmIDB4ZmYsIChjaGFyICopd2JhKTsKLQkJYnJlYWs7Ci0JICAgIGNhc2UgQkFfU0laRV9XT1JEOgotCQlwdXRfdXNlciAod2JkICYgMHhmZmZmLCAoc2hvcnQgKil3YmEpOwotCQlicmVhazsKLQkgICAgY2FzZSBCQV9TSVpFX0xPTkc6Ci0JCXB1dF91c2VyICh3YmQsIChpbnQgKil3YmEpOwotCQlicmVhazsKLQl9Ci0KLQlzZXRfZnMgKGZzKTsKLQlyZXR1cm47Ci0KLWJ1c19lcnJvcjoKLQlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoImNtcC5sCSUwLDIoJSVzcClcblx0IgotCQkJICAgICAgImJjcy5zCS5qdW1wX29sZFxuXHQiCi0JCQkgICAgICAiY21wLmwJJTEsMiglJXNwKVxuXHQiCi0JCQkgICAgICAiYmxzLnMJLnJlc3RvcmVfb2xkXG4iCi0JCQkiLmp1bXBfb2xkOlxuXHQiCi0JCQkgICAgICAibW92ZS5sCSUyLC0oJSVzcClcblx0IgotCQkJICAgICAgInJ0c1xuIgotCQkJIi5yZXN0b3JlX29sZDpcblx0IgotCQkJICAgICAgIm1vdmUubAklJWEwLC0oJSVzcClcblx0IgotCQkJICAgICAgIm1vdmVjLmwJJSV2YnIsJSVhMFxuXHQiCi0JCQkgICAgICAibW92ZS5sCSUyLDgoJSVhMClcblx0IgotCQkJICAgICAgIm1vdmUubAkoJSVzcCkrLCUlYTBcblx0IgotCQkJICAgICAgInJ0ZVxuXHQiCi0JCQkgICAgICA6Ci0JCQkgICAgICA6ICJpIiAod3JpdGViYWNrKSwgImkiICgmJmJ1c19lcnJvciksCi0JCQkgICAgICAgICJtIiAoc2F2ZV9idXNlcnIpICk7Ci19Ci0KLS8qCi0gKiBzdGF0aWMgaW5saW5lIHZvaWQgc2V0X3Jlc3RkYXRhX3JlZyh1bnNpZ25lZCBjaGFyICpjdXJfYWRkcikKLSAqCi0gKiBTZXQgdGhlIHJlc3QgZGF0YSByZWdpc3RlciBpZiBuZWNlc3NhcnkuCi0gKi8KLQotc3RhdGljIGlubGluZSB2b2lkIHNldF9yZXN0ZGF0YV9yZWcodW5zaWduZWQgY2hhciAqY3VyX2FkZHIpCi17Ci0JaWYgKCgobG9uZykgY3VyX2FkZHIgJiB+MykgIT0gMCkKLQkJdHRfc2NzaV9kbWEuZG1hX3Jlc3RkYXRhID0KLQkJCSooKHVuc2lnbmVkIGxvbmcgKikgKChsb25nKSBjdXJfYWRkciAmIH4zKSk7Ci19Ci0KLS8qCi0gKiB2b2lkIGhhZGVzX2RtYV9lbXVsYXRvcihpbnQgaXJxLCB2b2lkICpkdW1teSkKLSAqIAotICogVGhpcyBjb2RlIGVtdWxhdGVzIFRUIFNDU0kgRE1BIG9uIHRoZSBIYWRlcy4KLSAqIAotICogTm90ZSB0aGUgZm9sbG93aW5nOgotICogCi0gKiAxLiBXaGVuIHRoZXJlIGlzIG5vIGJ5dGUgYXZhaWxhYmxlIHRvIHJlYWQgZnJvbSB0aGUgU0NTSSBidXMsIG9yCi0gKiAgICB3aGVuIGEgYnl0ZSBjYW5ub3QgeWV0IGJldCB3cml0dGVuIHRvIHRoZSBTQ1NJIGJ1cywgYSBidXMKLSAqICAgIGVycm9yIG9jY3VycyB3aGVuIHJlYWRpbmcgb3Igd3JpdGluZyB0aGUgcHNldWRvIERNQSBkYXRhCi0gKiAgICByZWdpc3RlciAoaGFkZXNfcHNkbV9yZWcpLiBXZSBoYXZlIHRvIGNhdGNoIHRoaXMgYnVzIGVycm9yCi0gKiAgICBhbmQgdHJ5IGFnYWluIHRvIHJlYWQgb3Igd3JpdGUgdGhlIGJ5dGUuIElmIGFmdGVyIHNldmVyYWwgdHJpZXMKLSAqICAgIHdlIHN0aWxsIGdldCBhIGJ1cyBlcnJvciwgdGhlIGludGVycnVwdCBoYW5kbGVyIGlzIGxlZnQuIFdoZW4KLSAqICAgIHRoZSBieXRlIGNhbiBiZSByZWFkIG9yIHdyaXR0ZW4sIHRoZSBpbnRlcnJ1cHQgaGFuZGxlciBpcwotICogICAgY2FsbGVkIGFnYWluLgotICogCi0gKiAyLiBUaGUgU0NTSSBpbnRlcnJ1cHQgbXVzdCBiZSBkaXNhYmxlZCBpbiB0aGlzIGludGVycnVwdCBoYW5kbGVyLgotICogCi0gKiAzLiBJZiB3ZSBzZXQgdGhlIEVPUCBzaWduYWwsIHRoZSBTQ1NJIGNvbnRyb2xsZXIgc3RpbGwgZXhwZWN0cyBvbmUKLSAqICAgIGJ5dGUgdG8gYmUgcmVhZCBvciB3cml0dGVuLiBUaGVyZWZvcmUgdGhlIGxhc3QgYnl0ZSBpcyB0cmFuc2ZlcnJlZAotICogICAgc2VwYXJhdGVseSwgYWZ0ZXIgc2V0dGluZyB0aGUgRU9QIHNpZ25hbC4KLSAqIAotICogNC4gV2hlbiB0aGlzIGZ1bmN0aW9uIGlzIGxlZnQsIHRoZSBhZGRyZXNzIHBvaW50ZXIgKHN0YXJ0X2FkZHIpIGlzCi0gKiAgICBjb252ZXJ0ZWQgdG8gYSBwaHlzaWNhbCBhZGRyZXNzLiBCZWNhdXNlIGl0IHBvaW50cyBvbmUgYnl0ZQotICogICAgZnVydGhlciB0aGFuIHRoZSBsYXN0IHRyYW5zZmVycmVkIGJ5dGUsIGl0IGNhbiBwb2ludCBvdXRzaWRlIHRoZQotICogICAgY3VycmVudCBwYWdlLiBJZiB2aXJ0X3RvX3BoeXMoKSBpcyBjYWxsZWQgd2l0aCB0aGlzIGFkZHJlc3Mgd2UKLSAqICAgIG1pZ2h0IGdldCBhbiBhY2Nlc3MgZXJyb3IuIFRoZXJlZm9yZSB2aXJ0X3RvX3BoeXMoKSBpcyBjYWxsZWQgd2l0aAotICogICAgc3RhcnRfYWRkciAtIDEgaWYgdGhlIGNvdW50IGhhcyByZWFjaGVkIHplcm8uIFRoZSByZXN1bHQgaXMKLSAqICAgIGluY3JlYXNlZCB3aXRoIG9uZS4KLSAqLwotCi1zdGF0aWMgaXJxcmV0dXJuX3QgaGFkZXNfZG1hX2VtdWxhdG9yKGludCBpcnEsIHZvaWQgKmR1bW15KQotewotCXVuc2lnbmVkIGxvbmcgZG1hX2Jhc2U7Ci0JcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyBkbWFfY250IGFzbSAoImQzIik7Ci0Jc3RhdGljIGxvbmcgc2F2ZV9idXNlcnI7Ci0JcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyBzYXZlX3NwIGFzbSAoImQ0Iik7Ci0JcmVnaXN0ZXIgaW50IHRyaWVzIGFzbSAoImQ1Iik7Ci0JcmVnaXN0ZXIgdW5zaWduZWQgY2hhciAqc3RhcnRfYWRkciBhc20gKCJhMyIpLCAqZW5kX2FkZHIgYXNtICgiYTQiKTsKLQlyZWdpc3RlciB1bnNpZ25lZCBjaGFyICplZmZfYWRkcjsKLQlyZWdpc3RlciB1bnNpZ25lZCBjaGFyICpwc2RtX3JlZzsKLQl1bnNpZ25lZCBsb25nIHJlbTsKLQotCWF0YXJpX2Rpc2FibGVfaXJxKElSUV9UVF9NRlBfU0NTSSk7Ci0KLQkvKgotCSAqIFJlYWQgdGhlIGRtYSBhZGRyZXNzIGFuZCBjb3VudCByZWdpc3RlcnMuCi0JICovCi0KLQlkbWFfYmFzZSA9IFNDU0lfRE1BX1JFQURfUChkbWFfYWRkcik7Ci0JZG1hX2NudCA9IFNDU0lfRE1BX1JFQURfUChkbWFfY250KTsKLQotCS8qCi0JICogQ2hlY2sgaWYgRE1BIGlzIHN0aWxsIGVuYWJsZWQuCi0JICovCi0KLQlpZiAoKHR0X3Njc2lfZG1hLmRtYV9jdHJsICYgMikgPT0gMCkKLQl7Ci0JCWF0YXJpX2VuYWJsZV9pcnEoSVJRX1RUX01GUF9TQ1NJKTsKLQkJcmV0dXJuIElSUV9IQU5ETEVEOwotCX0KLQotCWlmIChkbWFfY250ID09IDApCi0JewotCQlwcmludGsoS0VSTl9OT1RJQ0UgIkRNQSBlbXVsYXRpb246IGNvdW50IGlzIHplcm8uXG4iKTsKLQkJdHRfc2NzaV9kbWEuZG1hX2N0cmwgJj0gMHhmZDsJLyogRE1BIHJlYWR5LiAqLwotCQlhdGFyaV9lbmFibGVfaXJxKElSUV9UVF9NRlBfU0NTSSk7Ci0JCXJldHVybiBJUlFfSEFORExFRDsKLQl9Ci0KLQkvKgotCSAqIEluc3RhbGwgbmV3IGJ1cyBlcnJvciByb3V0aW5lLgotCSAqLwotCi0JX19hc21fXyBfX3ZvbGF0aWxlX18gKCJtb3ZlYy5sCSUldmJyLCUlYTBcblx0IgotCQkJICAgICAgIm1vdmUubAk4KCUlYTApLCUwXG5cdCIKLQkJCSAgICAgICJtb3ZlLmwJJTEsOCglJWEwKVxuXHQiCi0JCQkgICAgICA6ICI9JnIiIChzYXZlX2J1c2VycikKLQkJCSAgICAgIDogInIiICgmJnNjc2lfYnVzX2Vycm9yKQotCQkJICAgICAgOiAiYTAiICk7Ci0KLQloYWRlc19kbWFfY3RybCAmPSAweGZjOwkJLyogQnVzIGVycm9yIGFuZCBFT1Agb2ZmLiAqLwotCi0JLyoKLQkgKiBTYXZlIHRoZSBzdGFjayBwb2ludGVyLgotCSAqLwotCi0JX19hc21fXyBfX3ZvbGF0aWxlX18gKCJtb3ZlLmwJJSVzcCwlMFxuXHQiCi0JCQkgICAgICA6ICI9JnIiIChzYXZlX3NwKSApOwotCi0JdHJpZXMgPSAxMDA7CQkJLyogTWF4aW11bSBudW1iZXIgb2YgYnVzIGVycm9ycy4gKi8KLQlzdGFydF9hZGRyID0gcGh5c190b192aXJ0KGRtYV9iYXNlKTsKLQllbmRfYWRkciA9IHN0YXJ0X2FkZHIgKyBkbWFfY250OwotCi1zY3NpX2xvb3A6Ci0JZG1hX2NudC0tOwotCXJlbSA9IGRtYV9jbnQgJiAoVFJBTlNGRVJfU0laRSAtIDEpOwotCWRtYV9jbnQgJj0gfihUUkFOU0ZFUl9TSVpFIC0gMSk7Ci0JcHNkbV9yZWcgPSAmaGFkZXNfcHNkbV9yZWc7Ci0KLQlpZiAodHRfc2NzaV9kbWEuZG1hX2N0cmwgJiAxKQkvKiBSZWFkIG9yIHdyaXRlPyAqLwotCXsKLQkJLyoKLQkJICogU0NTSSB3cml0ZS4gQWJvcnQgd2hlbiBjb3VudCBpcyB6ZXJvLgotCQkgKi8KLQotCQlzd2l0Y2ggKHJlbSkKLQkJewotCQljYXNlIDA6Ci0JCQl3aGlsZSAoZG1hX2NudCA+IDApCi0JCQl7Ci0JCQkJZG1hX2NudCAtPSBUUkFOU0ZFUl9TSVpFOwotCi0JCQkJKnBzZG1fcmVnID0gKnN0YXJ0X2FkZHIrKzsKLQkJY2FzZSAxNToKLQkJCQkqcHNkbV9yZWcgPSAqc3RhcnRfYWRkcisrOwotCQljYXNlIDE0OgotCQkJCSpwc2RtX3JlZyA9ICpzdGFydF9hZGRyKys7Ci0JCWNhc2UgMTM6Ci0JCQkJKnBzZG1fcmVnID0gKnN0YXJ0X2FkZHIrKzsKLQkJY2FzZSAxMjoKLQkJCQkqcHNkbV9yZWcgPSAqc3RhcnRfYWRkcisrOwotCQljYXNlIDExOgotCQkJCSpwc2RtX3JlZyA9ICpzdGFydF9hZGRyKys7Ci0JCWNhc2UgMTA6Ci0JCQkJKnBzZG1fcmVnID0gKnN0YXJ0X2FkZHIrKzsKLQkJY2FzZSA5OgotCQkJCSpwc2RtX3JlZyA9ICpzdGFydF9hZGRyKys7Ci0JCWNhc2UgODoKLQkJCQkqcHNkbV9yZWcgPSAqc3RhcnRfYWRkcisrOwotCQljYXNlIDc6Ci0JCQkJKnBzZG1fcmVnID0gKnN0YXJ0X2FkZHIrKzsKLQkJY2FzZSA2OgotCQkJCSpwc2RtX3JlZyA9ICpzdGFydF9hZGRyKys7Ci0JCWNhc2UgNToKLQkJCQkqcHNkbV9yZWcgPSAqc3RhcnRfYWRkcisrOwotCQljYXNlIDQ6Ci0JCQkJKnBzZG1fcmVnID0gKnN0YXJ0X2FkZHIrKzsKLQkJY2FzZSAzOgotCQkJCSpwc2RtX3JlZyA9ICpzdGFydF9hZGRyKys7Ci0JCWNhc2UgMjoKLQkJCQkqcHNkbV9yZWcgPSAqc3RhcnRfYWRkcisrOwotCQljYXNlIDE6Ci0JCQkJKnBzZG1fcmVnID0gKnN0YXJ0X2FkZHIrKzsKLQkJCX0KLQkJfQotCi0JCWhhZGVzX2RtYV9jdHJsIHw9IDE7CS8qIFNldCBFT1AuICovCi0JCXVkZWxheSgxMCk7Ci0JCSpwc2RtX3JlZyA9ICpzdGFydF9hZGRyKys7CS8qIER1bW15IGJ5dGUuICovCi0JCXR0X3Njc2lfZG1hLmRtYV9jdHJsICY9IDB4ZmQ7CS8qIERNQSByZWFkeS4gKi8KLQl9Ci0JZWxzZQotCXsKLQkJLyoKLQkJICogU0NTSSByZWFkLiBBYm9ydCB3aGVuIGNvdW50IGlzIHplcm8uCi0JCSAqLwotCi0JCXN3aXRjaCAocmVtKQotCQl7Ci0JCWNhc2UgMDoKLQkJCXdoaWxlIChkbWFfY250ID4gMCkKLQkJCXsKLQkJCQlkbWFfY250IC09IFRSQU5TRkVSX1NJWkU7Ci0KLQkJCQkqc3RhcnRfYWRkcisrID0gKnBzZG1fcmVnOwotCQljYXNlIDE1OgotCQkJCSpzdGFydF9hZGRyKysgPSAqcHNkbV9yZWc7Ci0JCWNhc2UgMTQ6Ci0JCQkJKnN0YXJ0X2FkZHIrKyA9ICpwc2RtX3JlZzsKLQkJY2FzZSAxMzoKLQkJCQkqc3RhcnRfYWRkcisrID0gKnBzZG1fcmVnOwotCQljYXNlIDEyOgotCQkJCSpzdGFydF9hZGRyKysgPSAqcHNkbV9yZWc7Ci0JCWNhc2UgMTE6Ci0JCQkJKnN0YXJ0X2FkZHIrKyA9ICpwc2RtX3JlZzsKLQkJY2FzZSAxMDoKLQkJCQkqc3RhcnRfYWRkcisrID0gKnBzZG1fcmVnOwotCQljYXNlIDk6Ci0JCQkJKnN0YXJ0X2FkZHIrKyA9ICpwc2RtX3JlZzsKLQkJY2FzZSA4OgotCQkJCSpzdGFydF9hZGRyKysgPSAqcHNkbV9yZWc7Ci0JCWNhc2UgNzoKLQkJCQkqc3RhcnRfYWRkcisrID0gKnBzZG1fcmVnOwotCQljYXNlIDY6Ci0JCQkJKnN0YXJ0X2FkZHIrKyA9ICpwc2RtX3JlZzsKLQkJY2FzZSA1OgotCQkJCSpzdGFydF9hZGRyKysgPSAqcHNkbV9yZWc7Ci0JCWNhc2UgNDoKLQkJCQkqc3RhcnRfYWRkcisrID0gKnBzZG1fcmVnOwotCQljYXNlIDM6Ci0JCQkJKnN0YXJ0X2FkZHIrKyA9ICpwc2RtX3JlZzsKLQkJY2FzZSAyOgotCQkJCSpzdGFydF9hZGRyKysgPSAqcHNkbV9yZWc7Ci0JCWNhc2UgMToKLQkJCQkqc3RhcnRfYWRkcisrID0gKnBzZG1fcmVnOwotCQkJfQotCQl9Ci0KLQkJaGFkZXNfZG1hX2N0cmwgfD0gMTsJLyogU2V0IEVPUC4gKi8KLQkJdWRlbGF5KDEwKTsKLQkJKnN0YXJ0X2FkZHIrKyA9ICpwc2RtX3JlZzsKLQkJdHRfc2NzaV9kbWEuZG1hX2N0cmwgJj0gMHhmZDsJLyogRE1BIHJlYWR5LiAqLwotCi0JCXNldF9yZXN0ZGF0YV9yZWcoc3RhcnRfYWRkcik7Ci0JfQotCi0JaWYgKHN0YXJ0X2FkZHIgIT0gZW5kX2FkZHIpCi0JCXByaW50ayhLRVJOX0NSSVQgIkRNQSBlbXVsYXRpb246IEZBVEFMOiBDb3VudCBpcyBub3QgemVybyBhdCBlbmQgb2YgdHJhbnNmZXIuXG4iKTsKLQotCWRtYV9jbnQgPSBlbmRfYWRkciAtIHN0YXJ0X2FkZHI7Ci0KLXNjc2lfZW5kOgotCWRtYV9iYXNlID0gKGRtYV9jbnQgPT0gMCkgPyB2aXJ0X3RvX3BoeXMoc3RhcnRfYWRkciAtIDEpICsgMSA6ICAKLQkJCQkgICAgdmlydF90b19waHlzKHN0YXJ0X2FkZHIpOwotCi0JU0NTSV9ETUFfV1JJVEVfUChkbWFfYWRkciwgZG1hX2Jhc2UpOwotCVNDU0lfRE1BX1dSSVRFX1AoZG1hX2NudCwgZG1hX2NudCk7Ci0KLQkvKgotCSAqIFJlc3RvcmUgb2xkIGJ1cyBlcnJvciByb3V0aW5lLgotCSAqLwotCi0JX19hc21fXyBfX3ZvbGF0aWxlX18gKCJtb3ZlYy5sCSUldmJyLCUlYTBcblx0IgotCQkJICAgICAgIm1vdmUubAklMCw4KCUlYTApXG5cdCIKLQkJCSAgICAgIDoKLQkJCSAgICAgIDogInIiIChzYXZlX2J1c2VycikKLQkJCSAgICAgIDogImEwIiApOwotCi0JYXRhcmlfZW5hYmxlX2lycShJUlFfVFRfTUZQX1NDU0kpOwotCi0JcmV0dXJuIElSUV9IQU5ETEVEOwotCi1zY3NpX2J1c19lcnJvcjoKLQkvKgotCSAqIEZpcnN0IGNoZWNrIGlmIHRoZSBidXMgZXJyb3IgaXMgY2F1c2VkIGJ5IG91ciBjb2RlLgotCSAqIElmIG5vdCwgY2FsbCB0aGUgb3JpZ2luYWwgaGFuZGxlci4KLQkgKi8KLQotCV9fYXNtX18gX192b2xhdGlsZV9fICgiY21wLmwJJTAsMiglJXNwKVxuXHQiCi0JCQkgICAgICAiYmNzLnMJLm9sZF92ZWN0b3Jcblx0IgotCQkJICAgICAgImNtcC5sCSUxLDIoJSVzcClcblx0IgotCQkJICAgICAgImJscy5zCS5zY3NpX2J1c2VyclxuIgotCQkJIi5vbGRfdmVjdG9yOlxuXHQiCi0JCQkgICAgICAibW92ZS5sCSUyLC0oJSVzcClcblx0IgotCQkJICAgICAgInJ0c1xuIgotCQkJIi5zY3NpX2J1c2Vycjpcblx0IgotCQkJICAgICAgOgotCQkJICAgICAgOiAiaSIgKCYmc2NzaV9sb29wKSwgImkiICgmJnNjc2lfZW5kKSwKLQkJCSAgICAgICAgIm0iIChzYXZlX2J1c2VycikgKTsKLQotCWlmIChDUFVfSVNfMDYwKQotCXsKLQkJLyoKLQkJICogR2V0IGVmZmVjdGl2ZSBhZGRyZXNzIGFuZCByZXN0b3JlIHRoZSBzdGFjay4KLQkJICovCi0KLQkJX19hc21fXyBfX3ZvbGF0aWxlX18gKCJtb3ZlLmwJOCglJXNwKSwlMFxuXHQiCi0JCQkJICAgICAgIm1vdmUubAklMSwlJXNwXG5cdCIKLQkJCQkgICAgICA6ICI9YSYiIChlZmZfYWRkcikKLQkJCQkgICAgICA6ICJyIiAoc2F2ZV9zcCkgKTsKLQl9Ci0JZWxzZQotCXsKLQkJcmVnaXN0ZXIgc3RydWN0IG02ODA0MF9mcmFtZSAqZnJhbWU7Ci0KLQkJX19hc21fXyBfX3ZvbGF0aWxlX18gKCJsZWEJOCglJXNwKSwlMFxuXHQiCi0JCQkJICAgICAgOiAiPWEmIiAoZnJhbWUpICk7Ci0KLQkJaWYgKHR0X3Njc2lfZG1hLmRtYV9jdHJsICYgMSkKLQkJewotCQkJLyoKLQkJCSAqIEJ1cyBlcnJvciB3aGlsZSB3cml0aW5nLgotCQkJICovCi0KLQkJCWlmIChmcmFtZS0+d2IzcyAmIFdCVl8wNDApCi0JCQl7Ci0JCQkJaWYgKGZyYW1lLT53YjNhID09IChsb25nKSAmaGFkZXNfcHNkbV9yZWcpCi0JCQkJCXN0YXJ0X2FkZHItLTsKLQkJCQllbHNlCi0JCQkJCXdyaXRlYmFjayhmcmFtZS0+d2IzcywgZnJhbWUtPndiM2EsCi0JCQkJCQkgIGZyYW1lLT53YjNkLCAmJnNjc2lfYnVzX2Vycm9yKTsKLQkJCX0KLQotCQkJaWYgKGZyYW1lLT53YjJzICYgV0JWXzA0MCkKLQkJCXsKLQkJCQlpZiAoZnJhbWUtPndiMmEgPT0gKGxvbmcpICZoYWRlc19wc2RtX3JlZykKLQkJCQkJc3RhcnRfYWRkci0tOwotCQkJCWVsc2UKLQkJCQkJd3JpdGViYWNrKGZyYW1lLT53YjJzLCBmcmFtZS0+d2IyYSwKLQkJCQkJCSAgZnJhbWUtPndiMmQsICYmc2NzaV9idXNfZXJyb3IpOwotCQkJfQotCi0JCQlpZiAoZnJhbWUtPndiMXMgJiBXQlZfMDQwKQotCQkJewotCQkJCWlmIChmcmFtZS0+d2IxYSA9PSAobG9uZykgJmhhZGVzX3BzZG1fcmVnKQotCQkJCQlzdGFydF9hZGRyLS07Ci0JCQl9Ci0JCX0KLQkJZWxzZQotCQl7Ci0JCQkvKgotCQkJICogQnVzIGVycm9yIHdoaWxlIHJlYWRpbmcuCi0JCQkgKi8KLQotCQkJaWYgKGZyYW1lLT53YjNzICYgV0JWXzA0MCkKLQkJCQl3cml0ZWJhY2soZnJhbWUtPndiM3MsIGZyYW1lLT53YjNhLAotCQkJCQkgIGZyYW1lLT53YjNkLCAmJnNjc2lfYnVzX2Vycm9yKTsKLQkJfQotCi0JCWVmZl9hZGRyID0gKHVuc2lnbmVkIGNoYXIgKikgZnJhbWUtPmZhZGRyOwotCi0JCV9fYXNtX18gX192b2xhdGlsZV9fICgibW92ZS5sCSUwLCUlc3Bcblx0IgotCQkJCSAgICAgIDoKLQkJCQkgICAgICA6ICJyIiAoc2F2ZV9zcCkgKTsKLQl9Ci0KLQlkbWFfY250ID0gZW5kX2FkZHIgLSBzdGFydF9hZGRyOwotCi0JaWYgKGVmZl9hZGRyID09ICZoYWRlc19wc2RtX3JlZykKLQl7Ci0JCS8qCi0JCSAqIEJ1cyBlcnJvciBvY2N1cnJlZCB3aGlsZSByZWFkaW5nIHRoZSBwc2V1ZG8KLQkJICogRE1BIHJlZ2lzdGVyLiBUaW1lIG91dC4KLQkJICovCi0KLQkJdHJpZXMtLTsKLQotCQlpZiAodHJpZXMgPD0gMCkKLQkJewotCQkJaWYgKCh0dF9zY3NpX2RtYS5kbWFfY3RybCAmIDEpID09IDApCS8qIFJlYWQgb3Igd3JpdGU/ICovCi0JCQkJc2V0X3Jlc3RkYXRhX3JlZyhzdGFydF9hZGRyKTsKLQotCQkJaWYgKGRtYV9jbnQgPD0gMSkKLQkJCQlwcmludGsoS0VSTl9DUklUICJETUEgZW11bGF0aW9uOiBGYXRhbCAiCi0JCQkJICAgICAgICJlcnJvciB3aGlsZSAlcyB0aGUgbGFzdCBieXRlLlxuIiwKLQkJCQkgICAgICAgKHR0X3Njc2lfZG1hLmRtYV9jdHJsICYgMSkKLQkJCQkgICAgICAgPyAid3JpdGluZyIgOiAicmVhZGluZyIpOwotCi0JCQlnb3RvIHNjc2lfZW5kOwotCQl9Ci0JCWVsc2UKLQkJCWdvdG8gc2NzaV9sb29wOwotCX0KLQllbHNlCi0JewotCQkvKgotCQkgKiBCdXMgZXJyb3IgZHVyaW5nIHBzZXVkbyBETUEgdHJhbnNmZXIuCi0JCSAqIFRlcm1pbmF0ZSB0aGUgRE1BIHRyYW5zZmVyLgotCQkgKi8KLQotCQloYWRlc19kbWFfY3RybCB8PSAzOwkvKiBTZXQgRU9QIGFuZCBidXMgZXJyb3IuICovCi0JCWlmICgodHRfc2NzaV9kbWEuZG1hX2N0cmwgJiAxKSA9PSAwKQkvKiBSZWFkIG9yIHdyaXRlPyAqLwotCQkJc2V0X3Jlc3RkYXRhX3JlZyhzdGFydF9hZGRyKTsKLQkJZ290byBzY3NpX2VuZDsKLQl9Ci19CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYXRhcmlfc2NzaS5jIGIvZHJpdmVycy9zY3NpL2F0YXJpX3Njc2kuYwppbmRleCBmNTczMmQ4Li4yMWZlMDdmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYXRhcmlfc2NzaS5jCisrKyBiL2RyaXZlcnMvc2NzaS9hdGFyaV9zY3NpLmMKQEAgLTI0OSwxMCArMjQ5LDYgQEAKIG1vZHVsZV9wYXJhbShzZXR1cF9ob3N0aWQsIGludCwgMCk7CiAKIAotI2lmIGRlZmluZWQoQ09ORklHX1RUX0RNQV9FTVVMKQotI2luY2x1ZGUgImF0YXJpX2RtYV9lbXVsLmMiCi0jZW5kaWYKLQogI2lmIGRlZmluZWQoUkVBTF9ETUEpCiAKIHN0YXRpYyBpbnQgc2NzaV9kbWFfaXNfaWdub3JlZF9idXNlcnIodW5zaWduZWQgY2hhciBkbWFfc3RhdCkKQEAgLTY5NSwyMSArNjkxLDggQEAKICNpZmRlZiBSRUFMX0RNQQogCQl0dF9zY3NpX2RtYS5kbWFfY3RybCA9IDA7CiAJCWF0YXJpX2RtYV9yZXNpZHVhbCA9IDA7Ci0jaWZkZWYgQ09ORklHX1RUX0RNQV9FTVVMCi0JCWlmIChNQUNIX0lTX0hBREVTKSB7Ci0JCQlpZiAocmVxdWVzdF9pcnEoSVJRX0FVVE9fMiwgaGFkZXNfZG1hX2VtdWxhdG9yLAotCQkJCQkgSVJRX1RZUEVfUFJJTywgIkhhZGVzIERNQSBlbXVsYXRvciIsCi0JCQkJCSBoYWRlc19kbWFfZW11bGF0b3IpKSB7Ci0JCQkJcHJpbnRrKEtFUk5fRVJSICJhdGFyaV9zY3NpX2RldGVjdDogY2Fubm90IGFsbG9jYXRlIGlycSAlZCwgYWJvcnRpbmcgKE1BQ0hfSVNfSEFERVMpIixJUlFfQVVUT18yKTsKLQkJCQlmcmVlX2lycShJUlFfVFRfTUZQX1NDU0ksIGluc3RhbmNlKTsKLQkJCQlzY3NpX3VucmVnaXN0ZXIoYXRhcmlfc2NzaV9ob3N0KTsKLQkJCQlhdGFyaV9zdHJhbV9mcmVlKGF0YXJpX2RtYV9idWZmZXIpOwotCQkJCWF0YXJpX2RtYV9idWZmZXIgPSAwOwotCQkJCXJldHVybiAwOwotCQkJfQotCQl9Ci0jZW5kaWYKLQkJaWYgKE1BQ0hfSVNfTUVEVVNBIHx8IE1BQ0hfSVNfSEFERVMpIHsKKworCQlpZiAoTUFDSF9JU19NRURVU0EpIHsKIAkJCS8qIFdoaWxlIHRoZSByZWFkIG92ZXJydW5zIChkZXNjcmliZWQgYnkgRHJldyBFY2toYXJkdCBpbgogCQkJICogTkNSNTM4MC5jKSBuZXZlciBoYXBwZW5lZCBvbiBUVHMsIHRoZXkgZG8gaW4gZmFjdCBvbiB0aGUgTWVkdXNhCiAJCQkgKiAoVGhpcyB3YXMgdGhlIGNhdXNlIHdoeSBTQ1NJIGRpZG4ndCB3b3JrIHJpZ2h0IGZvciBzbyBsb25nCkBAIC0xMDA3LDExICs5OTAsNyBAQAogCQkJCQlTY3NpX0NtbmQgKmNtZCwgaW50IHdyaXRlX2ZsYWcpCiB7CiAJdW5zaWduZWQgbG9uZwlwb3NzaWJsZV9sZW4sIGxpbWl0OwotI2lmbmRlZiBDT05GSUdfVFRfRE1BX0VNVUwKLQlpZiAoTUFDSF9JU19IQURFUykKLQkJLyogSGFkZXMgaGFzIG5vIFNDU0kgRE1BIGF0IGFsbCA6LSggQWx3YXlzIGZvcmNlIHVzZSBvZiBQSU8gKi8KLQkJcmV0dXJuIDA7Ci0jZW5kaWYKKwogCWlmIChJU19BX1RUKCkpCiAJCS8qIFRUIFNDU0kgRE1BIGNhbiB0cmFuc2ZlciBhcmJpdHJhcnkgI2J5dGVzICovCiAJCXJldHVybiB3YW50ZWRfbGVuOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2NoLmMgYi9kcml2ZXJzL3Njc2kvY2guYwppbmRleCAzYzI1N2ZlLi44OGVjZjk0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvY2guYworKysgYi9kcml2ZXJzL3Njc2kvY2guYwpAQCAtOTE0LDkgKzkxNCw5IEBACiAJY2gtPm1pbm9yID0gbWlub3I7CiAJc3ByaW50ZihjaC0+bmFtZSwiY2glZCIsY2gtPm1pbm9yKTsKIAotCWNsYXNzX2RldiA9IGRldmljZV9jcmVhdGVfZHJ2ZGF0YShjaF9zeXNmc19jbGFzcywgZGV2LAotCQkJCQkgIE1LREVWKFNDU0lfQ0hBTkdFUl9NQUpPUiwgY2gtPm1pbm9yKSwKLQkJCQkJICBjaCwgInMlcyIsIGNoLT5uYW1lKTsKKwljbGFzc19kZXYgPSBkZXZpY2VfY3JlYXRlKGNoX3N5c2ZzX2NsYXNzLCBkZXYsCisJCQkJICBNS0RFVihTQ1NJX0NIQU5HRVJfTUFKT1IsIGNoLT5taW5vciksIGNoLAorCQkJCSAgInMlcyIsIGNoLT5uYW1lKTsKIAlpZiAoSVNfRVJSKGNsYXNzX2RldikpIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiY2glZDogZGV2aWNlX2NyZWF0ZSBmYWlsZWRcbiIsCiAJCSAgICAgICBjaC0+bWlub3IpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2NvbnN0YW50cy5jIGIvZHJpdmVycy9zY3NpL2NvbnN0YW50cy5jCmluZGV4IDk3ODVkNzMuLjQwMDNkZWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9jb25zdGFudHMuYworKysgYi9kcml2ZXJzL3Njc2kvY29uc3RhbnRzLmMKQEAgLTEzNjQsNyArMTM2NCw4IEBACiBzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGhvc3RieXRlX3RhYmxlW109ewogIkRJRF9PSyIsICJESURfTk9fQ09OTkVDVCIsICJESURfQlVTX0JVU1kiLCAiRElEX1RJTUVfT1VUIiwgIkRJRF9CQURfVEFSR0VUIiwKICJESURfQUJPUlQiLCAiRElEX1BBUklUWSIsICJESURfRVJST1IiLCAiRElEX1JFU0VUIiwgIkRJRF9CQURfSU5UUiIsCi0iRElEX1BBU1NUSFJPVUdIIiwgIkRJRF9TT0ZUX0VSUk9SIiwgIkRJRF9JTU1fUkVUUlkiLCAiRElEX1JFUVVFVUUifTsKKyJESURfUEFTU1RIUk9VR0giLCAiRElEX1NPRlRfRVJST1IiLCAiRElEX0lNTV9SRVRSWSIsICJESURfUkVRVUVVRSIsCisiRElEX1RSQU5TUE9SVF9ESVNSVVBURUQiLCAiRElEX1RSQU5TUE9SVF9GQUlMRkFTVCIgfTsKICNkZWZpbmUgTlVNX0hPU1RCWVRFX1NUUlMgQVJSQVlfU0laRShob3N0Ynl0ZV90YWJsZSkKIAogc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBkcml2ZXJieXRlX3RhYmxlW109ewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2RldmljZV9oYW5kbGVyL3Njc2lfZGhfYWx1YS5jIGIvZHJpdmVycy9zY3NpL2RldmljZV9oYW5kbGVyL3Njc2lfZGhfYWx1YS5jCmluZGV4IDcwOGU0NzUuLmUzNTZiNDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9kZXZpY2VfaGFuZGxlci9zY3NpX2RoX2FsdWEuYworKysgYi9kcml2ZXJzL3Njc2kvZGV2aWNlX2hhbmRsZXIvc2NzaV9kaF9hbHVhLmMKQEAgLTEwOSw3ICsxMDksOCBAQAogCX0KIAogCXJxLT5jbWRfdHlwZSA9IFJFUV9UWVBFX0JMT0NLX1BDOwotCXJxLT5jbWRfZmxhZ3MgfD0gUkVRX0ZBSUxGQVNUIHwgUkVRX05PTUVSR0U7CisJcnEtPmNtZF9mbGFncyB8PSBSRVFfRkFJTEZBU1RfREVWIHwgUkVRX0ZBSUxGQVNUX1RSQU5TUE9SVCB8CisJCQkgUkVRX0ZBSUxGQVNUX0RSSVZFUjsKIAlycS0+cmV0cmllcyA9IEFMVUFfRkFJTE9WRVJfUkVUUklFUzsKIAlycS0+dGltZW91dCA9IEFMVUFfRkFJTE9WRVJfVElNRU9VVDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2RldmljZV9oYW5kbGVyL3Njc2lfZGhfZW1jLmMgYi9kcml2ZXJzL3Njc2kvZGV2aWNlX2hhbmRsZXIvc2NzaV9kaF9lbWMuYwppbmRleCA4ZjQ1NTcwLi4wZTU3MmQyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvZGV2aWNlX2hhbmRsZXIvc2NzaV9kaF9lbWMuYworKysgYi9kcml2ZXJzL3Njc2kvZGV2aWNlX2hhbmRsZXIvc2NzaV9kaF9lbWMuYwpAQCAtMzAzLDcgKzMwMyw4IEBACiAKIAlycS0+Y21kWzRdID0gbGVuOwogCXJxLT5jbWRfdHlwZSA9IFJFUV9UWVBFX0JMT0NLX1BDOwotCXJxLT5jbWRfZmxhZ3MgfD0gUkVRX0ZBSUxGQVNUOworCXJxLT5jbWRfZmxhZ3MgfD0gUkVRX0ZBSUxGQVNUX0RFViB8IFJFUV9GQUlMRkFTVF9UUkFOU1BPUlQgfAorCQkJIFJFUV9GQUlMRkFTVF9EUklWRVI7CiAJcnEtPnRpbWVvdXQgPSBDTEFSSUlPTl9USU1FT1VUOwogCXJxLT5yZXRyaWVzID0gQ0xBUklJT05fUkVUUklFUzsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2RldmljZV9oYW5kbGVyL3Njc2lfZGhfaHBfc3cuYyBiL2RyaXZlcnMvc2NzaS9kZXZpY2VfaGFuZGxlci9zY3NpX2RoX2hwX3N3LmMKaW5kZXggNWU5M2M4OC4uOWFlYzRjYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2RldmljZV9oYW5kbGVyL3Njc2lfZGhfaHBfc3cuYworKysgYi9kcml2ZXJzL3Njc2kvZGV2aWNlX2hhbmRsZXIvc2NzaV9kaF9ocF9zdy5jCkBAIC0xMTIsNyArMTEyLDggQEAKIAkJcmV0dXJuIFNDU0lfREhfUkVTX1RFTVBfVU5BVkFJTDsKIAogCXJlcS0+Y21kX3R5cGUgPSBSRVFfVFlQRV9CTE9DS19QQzsKLQlyZXEtPmNtZF9mbGFncyB8PSBSRVFfRkFJTEZBU1Q7CisJcmVxLT5jbWRfZmxhZ3MgfD0gUkVRX0ZBSUxGQVNUX0RFViB8IFJFUV9GQUlMRkFTVF9UUkFOU1BPUlQgfAorCQkJICBSRVFfRkFJTEZBU1RfRFJJVkVSOwogCXJlcS0+Y21kX2xlbiA9IENPTU1BTkRfU0laRShURVNUX1VOSVRfUkVBRFkpOwogCXJlcS0+Y21kWzBdID0gVEVTVF9VTklUX1JFQURZOwogCXJlcS0+dGltZW91dCA9IEhQX1NXX1RJTUVPVVQ7CkBAIC0yMDQsNyArMjA1LDggQEAKIAkJcmV0dXJuIFNDU0lfREhfUkVTX1RFTVBfVU5BVkFJTDsKIAogCXJlcS0+Y21kX3R5cGUgPSBSRVFfVFlQRV9CTE9DS19QQzsKLQlyZXEtPmNtZF9mbGFncyB8PSBSRVFfRkFJTEZBU1Q7CisJcmVxLT5jbWRfZmxhZ3MgfD0gUkVRX0ZBSUxGQVNUX0RFViB8IFJFUV9GQUlMRkFTVF9UUkFOU1BPUlQgfAorCQkJICBSRVFfRkFJTEZBU1RfRFJJVkVSOwogCXJlcS0+Y21kX2xlbiA9IENPTU1BTkRfU0laRShTVEFSVF9TVE9QKTsKIAlyZXEtPmNtZFswXSA9IFNUQVJUX1NUT1A7CiAJcmVxLT5jbWRbNF0gPSAxOwkvKiBTdGFydCBzcGluIGN5Y2xlICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvZGV2aWNlX2hhbmRsZXIvc2NzaV9kaF9yZGFjLmMgYi9kcml2ZXJzL3Njc2kvZGV2aWNlX2hhbmRsZXIvc2NzaV9kaF9yZGFjLmMKaW5kZXggNTBiZjk1Zi4uYTQzYzNlZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2RldmljZV9oYW5kbGVyL3Njc2lfZGhfcmRhYy5jCisrKyBiL2RyaXZlcnMvc2NzaS9kZXZpY2VfaGFuZGxlci9zY3NpX2RoX3JkYWMuYwpAQCAtMjI2LDcgKzIyNiw4IEBACiAJfQogCiAJcnEtPmNtZF90eXBlID0gUkVRX1RZUEVfQkxPQ0tfUEM7Ci0JcnEtPmNtZF9mbGFncyB8PSBSRVFfRkFJTEZBU1QgfCBSRVFfTk9NRVJHRTsKKwlycS0+Y21kX2ZsYWdzIHw9IFJFUV9GQUlMRkFTVF9ERVYgfCBSRVFfRkFJTEZBU1RfVFJBTlNQT1JUIHwKKwkJCSBSRVFfRkFJTEZBU1RfRFJJVkVSOwogCXJxLT5yZXRyaWVzID0gUkRBQ19SRVRSSUVTOwogCXJxLT50aW1lb3V0ID0gUkRBQ19USU1FT1VUOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvZHB0X2kyby5jIGIvZHJpdmVycy9zY3NpL2RwdF9pMm8uYwppbmRleCAxZmUwOTAxLi44YWJhNGZkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvZHB0X2kyby5jCisrKyBiL2RyaXZlcnMvc2NzaS9kcHRfaTJvLmMKQEAgLTI3MSw3ICsyNzEsNyBAQAogCQlwSGJhLT5pbml0aWFsaXplZCA9IFRSVUU7CiAJCXBIYmEtPnN0YXRlICY9IH5EUFRJX1NUQVRFX1JFU0VUOwogCQlpZiAoYWRwdF9zeXNmc19jbGFzcykgewotCQkJc3RydWN0IGRldmljZSAqZGV2ID0gZGV2aWNlX2NyZWF0ZV9kcnZkYXRhKGFkcHRfc3lzZnNfY2xhc3MsCisJCQlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBkZXZpY2VfY3JlYXRlKGFkcHRfc3lzZnNfY2xhc3MsCiAJCQkJTlVMTCwgTUtERVYoRFBUSV9JMk9fTUFKT1IsIHBIYmEtPnVuaXQpLCBOVUxMLAogCQkJCSJkcHRpJWQiLCBwSGJhLT51bml0KTsKIAkJCWlmIChJU19FUlIoZGV2KSkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2libXZzY3NpL2libXZmYy5jIGIvZHJpdmVycy9zY3NpL2libXZzY3NpL2libXZmYy5jCmluZGV4IDRlMGI3YzguLjc2NTA3MDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9pYm12c2NzaS9pYm12ZmMuYworKysgYi9kcml2ZXJzL3Njc2kvaWJtdnNjc2kvaWJtdmZjLmMKQEAgLTIwMzEsOCArMjAzMSw2IEBACiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoc2hvc3QtPmhvc3RfbG9jaywgZmxhZ3MpOwogCX0gZWxzZQogCQlpYm12ZmNfaXNzdWVfZmNfaG9zdF9saXAoc2hvc3QpOwotCi0Jc2NzaV90YXJnZXRfdW5ibG9jaygmcnBvcnQtPmRldik7CiAJTEVBVkU7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9pZGUtc2NzaS5jIGIvZHJpdmVycy9zY3NpL2lkZS1zY3NpLmMKaW5kZXggOTAyMTJhYy4uYWZjOTZlOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2lkZS1zY3NpLmMKKysrIGIvZHJpdmVycy9zY3NpL2lkZS1zY3NpLmMKQEAgLTgyLDcgKzgyLDYgQEAKIAlzdHJ1Y3QgZ2VuZGlzawkJKmRpc2s7CiAJc3RydWN0IFNjc2lfSG9zdAkqaG9zdDsKIAotCXN0cnVjdCBpZGVfYXRhcGlfcGMgKnBjOwkJLyogQ3VycmVudCBwYWNrZXQgY29tbWFuZCAqLwogCXVuc2lnbmVkIGxvbmcgdHJhbnNmb3JtOwkJLyogU0NTSSBjbWQgdHJhbnNsYXRpb24gbGF5ZXIgKi8KIAl1bnNpZ25lZCBsb25nIGxvZzsJCQkvKiBsb2cgZmxhZ3MgKi8KIH0gaWRlc2NzaV9zY3NpX3Q7CkBAIC0xMzcsMTAgKzEzNiwxMCBAQAogCiBzdGF0aWMgaW50IGlkZXNjc2lfZW5kX3JlcXVlc3QoaWRlX2RyaXZlX3QgKiwgaW50LCBpbnQpOwogCi1zdGF0aWMgdm9pZCBpZGVfc2NzaV9jYWxsYmFjayhpZGVfZHJpdmVfdCAqZHJpdmUpCitzdGF0aWMgdm9pZCBpZGVfc2NzaV9jYWxsYmFjayhpZGVfZHJpdmVfdCAqZHJpdmUsIGludCBkc2MpCiB7CiAJaWRlc2NzaV9zY3NpX3QgKnNjc2kgPSBkcml2ZV90b19pZGVzY3NpKGRyaXZlKTsKLQlzdHJ1Y3QgaWRlX2F0YXBpX3BjICpwYyA9IHNjc2ktPnBjOworCXN0cnVjdCBpZGVfYXRhcGlfcGMgKnBjID0gZHJpdmUtPnBjOwogCiAJaWYgKHBjLT5mbGFncyAmIFBDX0ZMQUdfVElNRURPVVQpCiAJCWRlYnVnX2xvZygiJXM6IGdvdCB0aW1lZCBvdXQgcGFja2V0ICVsdSBhdCAlbHVcbiIsIF9fZnVuY19fLApAQCAtMjY3LDQ5ICsyNjYsMTAgQEAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKGhvc3QtPmhvc3RfbG9jaywgZmxhZ3MpOwogCWtmcmVlKHBjKTsKIAlibGtfcHV0X3JlcXVlc3QocnEpOwotCXNjc2ktPnBjID0gTlVMTDsKKwlkcml2ZS0+cGMgPSBOVUxMOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgZ2V0X3RpbWVvdXQoc3RydWN0IGlkZV9hdGFwaV9wYyAqcGMpCi17Ci0JcmV0dXJuIG1heF90KHVuc2lnbmVkIGxvbmcsIFdBSVRfQ01ELCBwYy0+dGltZW91dCAtIGppZmZpZXMpOwotfQotCi1zdGF0aWMgaW50IGlkZXNjc2lfZXhwaXJ5KGlkZV9kcml2ZV90ICpkcml2ZSkKLXsKLQlpZGVzY3NpX3Njc2lfdCAqc2NzaSA9IGRyaXZlX3RvX2lkZXNjc2koZHJpdmUpOwotCXN0cnVjdCBpZGVfYXRhcGlfcGMgICAqcGMgICA9IHNjc2ktPnBjOwotCi0JZGVidWdfbG9nKCIlcyBjYWxsZWQgZm9yICVsdSBhdCAlbHVcbiIsIF9fZnVuY19fLAotCQkgIHBjLT5zY3NpX2NtZC0+c2VyaWFsX251bWJlciwgamlmZmllcyk7Ci0KLQlwYy0+ZmxhZ3MgfD0gUENfRkxBR19USU1FRE9VVDsKLQotCXJldHVybiAwOwkJCQkJLyogd2UgZG8gbm90IHdhbnQgdGhlIGlkZSBzdWJzeXN0ZW0gdG8gcmV0cnkgKi8KLX0KLQotLyoKLSAqCU91ciBpbnRlcnJ1cHQgaGFuZGxlci4KLSAqLwotc3RhdGljIGlkZV9zdGFydHN0b3BfdCBpZGVzY3NpX3BjX2ludHIgKGlkZV9kcml2ZV90ICpkcml2ZSkKLXsKLQlpZGVzY3NpX3Njc2lfdCAqc2NzaSA9IGRyaXZlX3RvX2lkZXNjc2koZHJpdmUpOwotCXN0cnVjdCBpZGVfYXRhcGlfcGMgKnBjID0gc2NzaS0+cGM7Ci0KLQlyZXR1cm4gaWRlX3BjX2ludHIoZHJpdmUsIHBjLCBpZGVzY3NpX3BjX2ludHIsIGdldF90aW1lb3V0KHBjKSwKLQkJCSAgIGlkZXNjc2lfZXhwaXJ5LCBOVUxMLCBOVUxMLCBOVUxMLAotCQkJICAgaWRlX2lvX2J1ZmZlcnMpOwotfQotCi1zdGF0aWMgaWRlX3N0YXJ0c3RvcF90IGlkZXNjc2lfdHJhbnNmZXJfcGMoaWRlX2RyaXZlX3QgKmRyaXZlKQotewotCWlkZXNjc2lfc2NzaV90ICpzY3NpID0gZHJpdmVfdG9faWRlc2NzaShkcml2ZSk7Ci0KLQlyZXR1cm4gaWRlX3RyYW5zZmVyX3BjKGRyaXZlLCBzY3NpLT5wYywgaWRlc2NzaV9wY19pbnRyLAotCQkJICAgICAgIGdldF90aW1lb3V0KHNjc2ktPnBjKSwgaWRlc2NzaV9leHBpcnkpOwotfQotCiBzdGF0aWMgaW5saW5lIGludCBpZGVzY3NpX3NldF9kaXJlY3Rpb24oc3RydWN0IGlkZV9hdGFwaV9wYyAqcGMpCiB7CiAJc3dpdGNoIChwYy0+Y1swXSkgewpAQCAtMzUyLDEzICszMTIsMTAgQEAKIHN0YXRpYyBpZGVfc3RhcnRzdG9wX3QgaWRlc2NzaV9pc3N1ZV9wYyhpZGVfZHJpdmVfdCAqZHJpdmUsCiAJCXN0cnVjdCBpZGVfYXRhcGlfcGMgKnBjKQogewotCWlkZXNjc2lfc2NzaV90ICpzY3NpID0gZHJpdmVfdG9faWRlc2NzaShkcml2ZSk7Ci0KIAkvKiBTZXQgdGhlIGN1cnJlbnQgcGFja2V0IGNvbW1hbmQgKi8KLQlzY3NpLT5wYyA9IHBjOworCWRyaXZlLT5wYyA9IHBjOwogCi0JcmV0dXJuIGlkZV9pc3N1ZV9wYyhkcml2ZSwgcGMsIGlkZXNjc2lfdHJhbnNmZXJfcGMsCi0JCQkgICAgZ2V0X3RpbWVvdXQocGMpLCBpZGVzY3NpX2V4cGlyeSk7CisJcmV0dXJuIGlkZV9pc3N1ZV9wYyhkcml2ZSwgaWRlX3Njc2lfZ2V0X3RpbWVvdXQocGMpLCBpZGVfc2NzaV9leHBpcnkpOwogfQogCiAvKgpAQCAtMzc0LDcgKzMzMSw4IEBACiAJaWYgKGJsa19zZW5zZV9yZXF1ZXN0KHJxKSB8fCBibGtfc3BlY2lhbF9yZXF1ZXN0KHJxKSkgewogCQlzdHJ1Y3QgaWRlX2F0YXBpX3BjICpwYyA9IChzdHJ1Y3QgaWRlX2F0YXBpX3BjICopcnEtPnNwZWNpYWw7CiAKLQkJaWYgKGRyaXZlLT51c2luZ19kbWEgJiYgIWlkZXNjc2lfbWFwX3NnKGRyaXZlLCBwYykpCisJCWlmICgoZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19VU0lOR19ETUEpICYmCisJCSAgICBpZGVzY3NpX21hcF9zZyhkcml2ZSwgcGMpID09IDApCiAJCQlwYy0+ZmxhZ3MgfD0gUENfRkxBR19ETUFfT0s7CiAKIAkJcmV0dXJuIGlkZXNjc2lfaXNzdWVfcGMoZHJpdmUsIHBjKTsKQEAgLTM4NSw2ICszNDMsMTEgQEAKIH0KIAogI2lmZGVmIENPTkZJR19JREVfUFJPQ19GUworc3RhdGljIGlkZV9wcm9jX2VudHJ5X3QgaWRlc2NzaV9wcm9jW10gPSB7CisJeyAiY2FwYWNpdHkiLCBTX0lGUkVHfFNfSVJVR08sIHByb2NfaWRlX3JlYWRfY2FwYWNpdHksIE5VTEwgfSwKKwl7IE5VTEwsIDAsIE5VTEwsIE5VTEwgfQorfTsKKwogI2RlZmluZSBpZGVfc2NzaV9kZXZzZXRfZ2V0KG5hbWUsIGZpZWxkKSBcCiBzdGF0aWMgaW50IGdldF8jI25hbWUoaWRlX2RyaXZlX3QgKmRyaXZlKSBcCiB7IFwKQEAgLTQyMCw2ICszODMsMTYgQEAKIAlJREVfUFJPQ19ERVZTRVQodHJhbnNmb3JtLCAwLAkgMyksCiAJeyAwIH0sCiB9OworCitzdGF0aWMgaWRlX3Byb2NfZW50cnlfdCAqaWRlX3Njc2lfcHJvY19lbnRyaWVzKGlkZV9kcml2ZV90ICpkcml2ZSkKK3sKKwlyZXR1cm4gaWRlc2NzaV9wcm9jOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGlkZV9wcm9jX2RldnNldCAqaWRlX3Njc2lfcHJvY19kZXZzZXRzKGlkZV9kcml2ZV90ICpkcml2ZSkKK3sKKwlyZXR1cm4gaWRlc2NzaV9zZXR0aW5nczsKK30KICNlbmRpZgogCiAvKgpAQCAtNDI3LDE0ICs0MDAsMTQgQEAKICAqLwogc3RhdGljIHZvaWQgaWRlc2NzaV9zZXR1cCAoaWRlX2RyaXZlX3QgKmRyaXZlLCBpZGVzY3NpX3Njc2lfdCAqc2NzaSkKIHsKLQlpZiAoKGRyaXZlLT5pZFtBVEFfSURfQ09ORklHXSAmIDB4MDA2MCkgPT0gMHgyMCkKLQkJc2V0X2JpdChJREVfQUZMQUdfRFJRX0lOVEVSUlVQVCwgJmRyaXZlLT5hdGFwaV9mbGFncyk7CiAJY2xlYXJfYml0KElERVNDU0lfU0dfVFJBTlNGT1JNLCAmc2NzaS0+dHJhbnNmb3JtKTsKICNpZiBJREVTQ1NJX0RFQlVHX0xPRwogCXNldF9iaXQoSURFU0NTSV9MT0dfQ01ELCAmc2NzaS0+bG9nKTsKICNlbmRpZiAvKiBJREVTQ1NJX0RFQlVHX0xPRyAqLwogCi0JZHJpdmUtPnBjX2NhbGxiYWNrID0gaWRlX3Njc2lfY2FsbGJhY2s7CisJZHJpdmUtPnBjX2NhbGxiYWNrCSA9IGlkZV9zY3NpX2NhbGxiYWNrOworCWRyaXZlLT5wY191cGRhdGVfYnVmZmVycyA9IE5VTEw7CisJZHJpdmUtPnBjX2lvX2J1ZmZlcnMJID0gaWRlX2lvX2J1ZmZlcnM7CiAKIAlpZGVfcHJvY19yZWdpc3Rlcl9kcml2ZXIoZHJpdmUsIHNjc2ktPmRyaXZlcik7CiB9CkBAIC00NTYsMTggKzQyOSwxMSBAQAogCiAJaWRlX3Njc2lfcHV0KHNjc2kpOwogCi0JZHJpdmUtPnNjc2kgPSAwOworCWRyaXZlLT5kZXZfZmxhZ3MgJj0gfklERV9ERkxBR19TQ1NJOwogfQogCiBzdGF0aWMgaW50IGlkZV9zY3NpX3Byb2JlKGlkZV9kcml2ZV90ICopOwogCi0jaWZkZWYgQ09ORklHX0lERV9QUk9DX0ZTCi1zdGF0aWMgaWRlX3Byb2NfZW50cnlfdCBpZGVzY3NpX3Byb2NbXSA9IHsKLQl7ICJjYXBhY2l0eSIsIFNfSUZSRUd8U19JUlVHTywgcHJvY19pZGVfcmVhZF9jYXBhY2l0eSwgTlVMTCB9LAotCXsgTlVMTCwgMCwgTlVMTCwgTlVMTCB9Ci19OwotI2VuZGlmCi0KIHN0YXRpYyBpZGVfZHJpdmVyX3QgaWRlc2NzaV9kcml2ZXIgPSB7CiAJLmdlbl9kcml2ZXIgPSB7CiAJCS5vd25lcgkJPSBUSElTX01PRFVMRSwKQEAgLTQ3NywxMyArNDQzLDEyIEBACiAJLnByb2JlCQkJPSBpZGVfc2NzaV9wcm9iZSwKIAkucmVtb3ZlCQkJPSBpZGVfc2NzaV9yZW1vdmUsCiAJLnZlcnNpb24JCT0gSURFU0NTSV9WRVJTSU9OLAotCS5tZWRpYQkJCT0gaWRlX3Njc2ksCiAJLmRvX3JlcXVlc3QJCT0gaWRlc2NzaV9kb19yZXF1ZXN0LAogCS5lbmRfcmVxdWVzdAkJPSBpZGVzY3NpX2VuZF9yZXF1ZXN0LAogCS5lcnJvciAgICAgICAgICAgICAgICAgID0gaWRlc2NzaV9hdGFwaV9lcnJvciwKICNpZmRlZiBDT05GSUdfSURFX1BST0NfRlMKLQkucHJvYwkJCT0gaWRlc2NzaV9wcm9jLAotCS5zZXR0aW5ncwkJPSBpZGVzY3NpX3NldHRpbmdzLAorCS5wcm9jX2VudHJpZXMJCT0gaWRlX3Njc2lfcHJvY19lbnRyaWVzLAorCS5wcm9jX2RldnNldHMJCT0gaWRlX3Njc2lfcHJvY19kZXZzZXRzLAogI2VuZGlmCiB9OwogCkBAIC02MjIsNiArNTg3LDggQEAKIAlpbnQJCWJ1c3k7CiAJaW50ICAgICAgICAgICAgIHJldCAgID0gRkFJTEVEOwogCisJc3RydWN0IGlkZV9hdGFwaV9wYyAqcGM7CisKIAkvKiBJbiBpZGVzY3NpX2VoX2Fib3J0IHdlIHRyeSB0byBnZW50bHkgcHJ5IG91ciBjb21tYW5kIGZyb20gdGhlIGlkZSBzdWJzeXN0ZW0gKi8KIAogCWlmICh0ZXN0X2JpdChJREVTQ1NJX0xPR19DTUQsICZzY3NpLT5sb2cpKQpAQCAtNjQyLDI2ICs2MDksMjcgQEAKIAlzcGluX2xvY2tfaXJxKCZpZGVfbG9jayk7CiAKIAkvKiBJZiB0aGVyZSBpcyBubyBwYyBydW5uaW5nIHdlJ3JlIGRvbmUgKG91ciBpbnRlcnJ1cHQgdG9vayBjYXJlIG9mIGl0KSAqLwotCWlmICghc2NzaS0+cGMpIHsKKwlwYyA9IGRyaXZlLT5wYzsKKwlpZiAocGMgPT0gTlVMTCkgewogCQlyZXQgPSBTVUNDRVNTOwogCQlnb3RvIGlkZV91bmxvY2s7CiAJfQogCiAJLyogSXQncyBzb21ld2hlcmUgaW4gZmxpZ2h0LiBEb2VzIGlkZSBzdWJzeXN0ZW0gYWdyZWU/ICovCi0JaWYgKHNjc2ktPnBjLT5zY3NpX2NtZC0+c2VyaWFsX251bWJlciA9PSBjbWQtPnNlcmlhbF9udW1iZXIgJiYgIWJ1c3kgJiYKLQkgICAgZWx2X3F1ZXVlX2VtcHR5KGRyaXZlLT5xdWV1ZSkgJiYgSFdHUk9VUChkcml2ZSktPnJxICE9IHNjc2ktPnBjLT5ycSkgeworCWlmIChwYy0+c2NzaV9jbWQtPnNlcmlhbF9udW1iZXIgPT0gY21kLT5zZXJpYWxfbnVtYmVyICYmICFidXN5ICYmCisJICAgIGVsdl9xdWV1ZV9lbXB0eShkcml2ZS0+cXVldWUpICYmIEhXR1JPVVAoZHJpdmUpLT5ycSAhPSBwYy0+cnEpIHsKIAkJLyoKIAkJICogRklYTUUgLSBub3Qgc3VyZSB0aGlzIGNvbmRpdGlvbiBjYW4gZXZlciBvY2N1cgogCQkgKi8KIAkJcHJpbnRrIChLRVJOX0VSUiAiaWRlLXNjc2k6IGNtZCBhYm9ydGVkIVxuIik7CiAKLQkJaWYgKGJsa19zZW5zZV9yZXF1ZXN0KHNjc2ktPnBjLT5ycSkpCi0JCQlrZnJlZShzY3NpLT5wYy0+YnVmKTsKKwkJaWYgKGJsa19zZW5zZV9yZXF1ZXN0KHBjLT5ycSkpCisJCQlrZnJlZShwYy0+YnVmKTsKIAkJLyogd2UgbmVlZCB0byBjYWxsIGJsa19wdXRfcmVxdWVzdCB0d2ljZS4gKi8KLQkJYmxrX3B1dF9yZXF1ZXN0KHNjc2ktPnBjLT5ycSk7Ci0JCWJsa19wdXRfcmVxdWVzdChzY3NpLT5wYy0+cnEpOwotCQlrZnJlZShzY3NpLT5wYyk7Ci0JCXNjc2ktPnBjID0gTlVMTDsKKwkJYmxrX3B1dF9yZXF1ZXN0KHBjLT5ycSk7CisJCWJsa19wdXRfcmVxdWVzdChwYy0+cnEpOworCQlrZnJlZShwYyk7CisJCWRyaXZlLT5wYyA9IE5VTEw7CiAKIAkJcmV0ID0gU1VDQ0VTUzsKIAl9CkBAIC02ODMsNiArNjUxLDggQEAKIAlpbnQgICAgICAgICAgICAgcmVhZHkgPSAwOwogCWludCAgICAgICAgICAgICByZXQgICA9IFNVQ0NFU1M7CiAKKwlzdHJ1Y3QgaWRlX2F0YXBpX3BjICpwYzsKKwogCS8qIEluIGlkZXNjc2lfZWhfcmVzZXQgd2UgZm9yY2VmdWxseSByZW1vdmUgdGhlIGNvbW1hbmQgZnJvbSB0aGUgaWRlIHN1YnN5c3RlbSBhbmQgcmVzZXQgdGhlIGRldmljZS4gKi8KIAogCWlmICh0ZXN0X2JpdChJREVTQ1NJX0xPR19DTUQsICZzY3NpLT5sb2cpKQpAQCAtNjk3LDcgKzY2Nyw5IEBACiAJc3Bpbl9sb2NrX2lycShjbWQtPmRldmljZS0+aG9zdC0+aG9zdF9sb2NrKTsKIAlzcGluX2xvY2soJmlkZV9sb2NrKTsKIAotCWlmICghc2NzaS0+cGMgfHwgKHJlcSA9IHNjc2ktPnBjLT5ycSkgIT0gSFdHUk9VUChkcml2ZSktPnJxIHx8ICFIV0dST1VQKGRyaXZlKS0+aGFuZGxlcikgeworCXBjID0gZHJpdmUtPnBjOworCisJaWYgKHBjID09IE5VTEwgfHwgKHJlcSA9IHBjLT5ycSkgIT0gSFdHUk9VUChkcml2ZSktPnJxIHx8ICFIV0dST1VQKGRyaXZlKS0+aGFuZGxlcikgewogCQlwcmludGsgKEtFUk5fV0FSTklORyAiaWRlLXNjc2k6IE5vIGFjdGl2ZSByZXF1ZXN0IGluIGlkZXNjc2lfZWhfcmVzZXRcbiIpOwogCQlzcGluX3VubG9jaygmaWRlX2xvY2spOwogCQlzcGluX3VubG9ja19pcnEoY21kLT5kZXZpY2UtPmhvc3QtPmhvc3RfbG9jayk7CkBAIC03MDgsOSArNjgwLDkgQEAKIAlpZiAoX19ibGtfZW5kX3JlcXVlc3QocmVxLCAtRUlPLCAwKSkKIAkJQlVHKCk7CiAJaWYgKGJsa19zZW5zZV9yZXF1ZXN0KHJlcSkpCi0JCWtmcmVlKHNjc2ktPnBjLT5idWYpOwotCWtmcmVlKHNjc2ktPnBjKTsKLQlzY3NpLT5wYyA9IE5VTEw7CisJCWtmcmVlKHBjLT5idWYpOworCWtmcmVlKHBjKTsKKwlkcml2ZS0+cGMgPSBOVUxMOwogCWJsa19wdXRfcmVxdWVzdChyZXEpOwogCiAJLyogbm93IG51a2UgdGhlIGRyaXZlIHF1ZXVlICovCkBAIC04MDEsNyArNzczLDcgQEAKIAkgICAgIShob3N0ID0gc2NzaV9ob3N0X2FsbG9jKCZpZGVzY3NpX3RlbXBsYXRlLHNpemVvZihpZGVzY3NpX3Njc2lfdCkpKSkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKLQlkcml2ZS0+c2NzaSA9IDE7CisJZHJpdmUtPmRldl9mbGFncyB8PSBJREVfREZMQUdfU0NTSTsKIAogCWcgPSBhbGxvY19kaXNrKDEgPDwgUEFSVE5fQklUUyk7CiAJaWYgKCFnKQpAQCAtODQyLDcgKzgxNCw3IEBACiAKIAlwdXRfZGlzayhnKTsKIG91dF9ob3N0X3B1dDoKLQlkcml2ZS0+c2NzaSA9IDA7CisJZHJpdmUtPmRldl9mbGFncyAmPSB+SURFX0RGTEFHX1NDU0k7CiAJc2NzaV9ob3N0X3B1dChob3N0KTsKIAlyZXR1cm4gZXJyOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2lzY3NpX3RjcC5jIGIvZHJpdmVycy9zY3NpL2lzY3NpX3RjcC5jCmluZGV4IDJhMmYwMDkuLmVkNmM1NGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9pc2NzaV90Y3AuYworKysgYi9kcml2ZXJzL3Njc2kvaXNjc2lfdGNwLmMKQEAgLTUyMywyMiArNTIzLDIwIEBACiB9CiAKIC8qKgotICogaXNjc2lfZGF0YV9yc3AgLSBTQ1NJIERhdGEtSW4gUmVzcG9uc2UgcHJvY2Vzc2luZworICogaXNjc2lfZGF0YV9pbiAtIFNDU0kgRGF0YS1JbiBSZXNwb25zZSBwcm9jZXNzaW5nCiAgKiBAY29ubjogaXNjc2kgY29ubmVjdGlvbgogICogQHRhc2s6IHNjc2kgY29tbWFuZCB0YXNrCiAgKiovCiBzdGF0aWMgaW50Ci1pc2NzaV9kYXRhX3JzcChzdHJ1Y3QgaXNjc2lfY29ubiAqY29ubiwgc3RydWN0IGlzY3NpX3Rhc2sgKnRhc2spCitpc2NzaV9kYXRhX2luKHN0cnVjdCBpc2NzaV9jb25uICpjb25uLCBzdHJ1Y3QgaXNjc2lfdGFzayAqdGFzaykKIHsKIAlzdHJ1Y3QgaXNjc2lfdGNwX2Nvbm4gKnRjcF9jb25uID0gY29ubi0+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+bGF0X2RhdGEgPSBOVUxMOworCX0KK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfdnBvcnQuaCBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfdnBvcnQuaAppbmRleCA5NmM0NDUzLi45MDgyODM0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX3Zwb3J0LmgKKysrIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY192cG9ydC5oCkBAIC0xMTIsNCArMTEyLDggQEAKIHZvaWQgbHBmY192cG9ydF9zZXRfc3RhdGUoc3RydWN0IGxwZmNfdnBvcnQgKnZwb3J0LAogCQkJICBlbnVtIGZjX3Zwb3J0X3N0YXRlIG5ld19zdGF0ZSk7CiAKK3ZvaWQgbHBmY192cG9ydF9yZXNldF9zdGF0X2RhdGEoc3RydWN0IGxwZmNfdnBvcnQgKik7Cit2b2lkIGxwZmNfYWxsb2NfYnVja2V0KHN0cnVjdCBscGZjX3Zwb3J0ICopOwordm9pZCBscGZjX2ZyZWVfYnVja2V0KHN0cnVjdCBscGZjX3Zwb3J0ICopOworCiAjZW5kaWYgLyogSF9MUEZDX1ZQT1JUICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvb3NzdC5jIGIvZHJpdmVycy9zY3NpL29zc3QuYwppbmRleCAxYzc5Zjk3Li4wZWE3OGQ5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvb3NzdC5jCisrKyBiL2RyaXZlcnMvc2NzaS9vc3N0LmMKQEAgLTU3MDgsNyArNTcwOCw4IEBACiAJc3RydWN0IGRldmljZSAqb3NzdF9tZW1iZXI7CiAJaW50IGVycjsKIAotCW9zc3RfbWVtYmVyID0gZGV2aWNlX2NyZWF0ZV9kcnZkYXRhKG9zc3Rfc3lzZnNfY2xhc3MsIGRldmljZSwgZGV2LCBTVHAsICIlcyIsIG5hbWUpOworCW9zc3RfbWVtYmVyID0gZGV2aWNlX2NyZWF0ZShvc3N0X3N5c2ZzX2NsYXNzLCBkZXZpY2UsIGRldiwgU1RwLAorCQkJCSAgICAiJXMiLCBuYW1lKTsKIAlpZiAoSVNfRVJSKG9zc3RfbWVtYmVyKSkgewogCQlwcmludGsoS0VSTl9XQVJOSU5HICJvc3N0IDpXOiBVbmFibGUgdG8gYWRkIHN5c2ZzIGNsYXNzIG1lbWJlciAlc1xuIiwgbmFtZSk7CiAJCXJldHVybiBQVFJfRVJSKG9zc3RfbWVtYmVyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9wY21jaWEvYWhhMTUyeF9zdHViLmMgYi9kcml2ZXJzL3Njc2kvcGNtY2lhL2FoYTE1Mnhfc3R1Yi5jCmluZGV4IDJkZDBkYzkuLjE2NWZmODggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9wY21jaWEvYWhhMTUyeF9zdHViLmMKKysrIGIvZHJpdmVycy9zY3NpL3BjbWNpYS9haGExNTJ4X3N0dWIuYwpAQCAtMTQwLDQ0ICsxNDAsNDEgQEAKICNkZWZpbmUgQ1NfQ0hFQ0soZm4sIHJldCkgXAogZG8geyBsYXN0X2ZuID0gKGZuKTsgaWYgKChsYXN0X3JldCA9IChyZXQpKSAhPSAwKSBnb3RvIGNzX2ZhaWxlZDsgfSB3aGlsZSAoMCkKIAorc3RhdGljIGludCBhaGExNTJ4X2NvbmZpZ19jaGVjayhzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYsCisJCQkJY2lzdHBsX2NmdGFibGVfZW50cnlfdCAqY2ZnLAorCQkJCWNpc3RwbF9jZnRhYmxlX2VudHJ5X3QgKmRmbHQsCisJCQkJdW5zaWduZWQgaW50IHZjYywKKwkJCQl2b2lkICpwcml2X2RhdGEpCit7CisJLyogRm9yIE5ldyBNZWRpYSBUJkosIGxvb2sgZm9yIGEgU0NTSSB3aW5kb3cgKi8KKwlpZiAoY2ZnLT5pby53aW5bMF0ubGVuID49IDB4MjApCisJCXBfZGV2LT5pby5CYXNlUG9ydDEgPSBjZmctPmlvLndpblswXS5iYXNlOworCWVsc2UgaWYgKChjZmctPmlvLm53aW4gPiAxKSAmJgorCQkgKGNmZy0+aW8ud2luWzFdLmxlbiA+PSAweDIwKSkKKwkJcF9kZXYtPmlvLkJhc2VQb3J0MSA9IGNmZy0+aW8ud2luWzFdLmJhc2U7CisJaWYgKChjZmctPmlvLm53aW4gPiAwKSAmJgorCSAgICAocF9kZXYtPmlvLkJhc2VQb3J0MSA8IDB4ZmZmZikpIHsKKwkJaWYgKCFwY21jaWFfcmVxdWVzdF9pbyhwX2RldiwgJnBfZGV2LT5pbykpCisJCQlyZXR1cm4gMDsKKwl9CisJcmV0dXJuIC1FSU5WQUw7Cit9CisKIHN0YXRpYyBpbnQgYWhhMTUyeF9jb25maWdfY3Moc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCiB7CiAgICAgc2NzaV9pbmZvX3QgKmluZm8gPSBsaW5rLT5wcml2OwogICAgIHN0cnVjdCBhaGExNTJ4X3NldHVwIHM7Ci0gICAgdHVwbGVfdCB0dXBsZTsKLSAgICBjaXNwYXJzZV90IHBhcnNlOwotICAgIGludCBpLCBsYXN0X3JldCwgbGFzdF9mbjsKLSAgICB1X2NoYXIgdHVwbGVfZGF0YVs2NF07CisgICAgaW50IGxhc3RfcmV0LCBsYXN0X2ZuOwogICAgIHN0cnVjdCBTY3NpX0hvc3QgKmhvc3Q7Ci0gICAgCisKICAgICBERUJVRygwLCAiYWhhMTUyeF9jb25maWcoMHglcClcbiIsIGxpbmspOwogCi0gICAgdHVwbGUuVHVwbGVEYXRhID0gdHVwbGVfZGF0YTsKLSAgICB0dXBsZS5UdXBsZURhdGFNYXggPSA2NDsKLSAgICB0dXBsZS5UdXBsZU9mZnNldCA9IDA7Ci0gICAgdHVwbGUuRGVzaXJlZFR1cGxlID0gQ0lTVFBMX0NGVEFCTEVfRU5UUlk7Ci0gICAgdHVwbGUuQXR0cmlidXRlcyA9IDA7Ci0gICAgQ1NfQ0hFQ0soR2V0Rmlyc3RUdXBsZSwgcGNtY2lhX2dldF9maXJzdF90dXBsZShsaW5rLCAmdHVwbGUpKTsKLSAgICB3aGlsZSAoMSkgewotCWlmIChwY21jaWFfZ2V0X3R1cGxlX2RhdGEobGluaywgJnR1cGxlKSAhPSAwIHx8Ci0JCXBjbWNpYV9wYXJzZV90dXBsZShsaW5rLCAmdHVwbGUsICZwYXJzZSkgIT0gMCkKLQkgICAgZ290byBuZXh0X2VudHJ5OwotCS8qIEZvciBOZXcgTWVkaWEgVCZKLCBsb29rIGZvciBhIFNDU0kgd2luZG93ICovCi0JaWYgKHBhcnNlLmNmdGFibGVfZW50cnkuaW8ud2luWzBdLmxlbiA+PSAweDIwKQotCSAgICBsaW5rLT5pby5CYXNlUG9ydDEgPSBwYXJzZS5jZnRhYmxlX2VudHJ5LmlvLndpblswXS5iYXNlOwotCWVsc2UgaWYgKChwYXJzZS5jZnRhYmxlX2VudHJ5LmlvLm53aW4gPiAxKSAmJgotCQkgKHBhcnNlLmNmdGFibGVfZW50cnkuaW8ud2luWzFdLmxlbiA+PSAweDIwKSkKLQkgICAgbGluay0+aW8uQmFzZVBvcnQxID0gcGFyc2UuY2Z0YWJsZV9lbnRyeS5pby53aW5bMV0uYmFzZTsKLQlpZiAoKHBhcnNlLmNmdGFibGVfZW50cnkuaW8ubndpbiA+IDApICYmCi0JICAgIChsaW5rLT5pby5CYXNlUG9ydDEgPCAweGZmZmYpKSB7Ci0JICAgIGxpbmstPmNvbmYuQ29uZmlnSW5kZXggPSBwYXJzZS5jZnRhYmxlX2VudHJ5LmluZGV4OwotCSAgICBpID0gcGNtY2lhX3JlcXVlc3RfaW8obGluaywgJmxpbmstPmlvKTsKLQkgICAgaWYgKGkgPT0gQ1NfU1VDQ0VTUykgYnJlYWs7Ci0JfQotICAgIG5leHRfZW50cnk6Ci0JQ1NfQ0hFQ0soR2V0TmV4dFR1cGxlLCBwY21jaWFfZ2V0X25leHRfdHVwbGUobGluaywgJnR1cGxlKSk7CisgICAgbGFzdF9yZXQgPSBwY21jaWFfbG9vcF9jb25maWcobGluaywgYWhhMTUyeF9jb25maWdfY2hlY2ssIE5VTEwpOworICAgIGlmIChsYXN0X3JldCkgeworCWNzX2Vycm9yKGxpbmssIFJlcXVlc3RJTywgbGFzdF9yZXQpOworCWdvdG8gZmFpbGVkOwogICAgIH0KLSAgICAKKwogICAgIENTX0NIRUNLKFJlcXVlc3RJUlEsIHBjbWNpYV9yZXF1ZXN0X2lycShsaW5rLCAmbGluay0+aXJxKSk7CiAgICAgQ1NfQ0hFQ0soUmVxdWVzdENvbmZpZ3VyYXRpb24sIHBjbWNpYV9yZXF1ZXN0X2NvbmZpZ3VyYXRpb24obGluaywgJmxpbmstPmNvbmYpKTsKICAgICAKQEAgLTIwOCw2ICsyMDUsNyBAQAogCiBjc19mYWlsZWQ6CiAgICAgY3NfZXJyb3IobGluaywgbGFzdF9mbiwgbGFzdF9yZXQpOworZmFpbGVkOgogICAgIGFoYTE1MnhfcmVsZWFzZV9jcyhsaW5rKTsKICAgICByZXR1cm4gLUVOT0RFVjsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9wY21jaWEvZmRvbWFpbl9zdHViLmMgYi9kcml2ZXJzL3Njc2kvcGNtY2lhL2Zkb21haW5fc3R1Yi5jCmluZGV4IGQ4Yjk5MzUuLjA2MjU0ZjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9wY21jaWEvZmRvbWFpbl9zdHViLmMKKysrIGIvZHJpdmVycy9zY3NpL3BjbWNpYS9mZG9tYWluX3N0dWIuYwpAQCAtMTIzLDM0ICsxMjMsMzAgQEAKICNkZWZpbmUgQ1NfQ0hFQ0soZm4sIHJldCkgXAogZG8geyBsYXN0X2ZuID0gKGZuKTsgaWYgKChsYXN0X3JldCA9IChyZXQpKSAhPSAwKSBnb3RvIGNzX2ZhaWxlZDsgfSB3aGlsZSAoMCkKIAorc3RhdGljIGludCBmZG9tYWluX2NvbmZpZ19jaGVjayhzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYsCisJCQkJY2lzdHBsX2NmdGFibGVfZW50cnlfdCAqY2ZnLAorCQkJCWNpc3RwbF9jZnRhYmxlX2VudHJ5X3QgKmRmbHQsCisJCQkJdW5zaWduZWQgaW50IHZjYywKKwkJCQl2b2lkICpwcml2X2RhdGEpCit7CisJcF9kZXYtPmlvLkJhc2VQb3J0MSA9IGNmZy0+aW8ud2luWzBdLmJhc2U7CisJcmV0dXJuIHBjbWNpYV9yZXF1ZXN0X2lvKHBfZGV2LCAmcF9kZXYtPmlvKTsKK30KKworCiBzdGF0aWMgaW50IGZkb21haW5fY29uZmlnKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQogewogICAgIHNjc2lfaW5mb190ICppbmZvID0gbGluay0+cHJpdjsKLSAgICB0dXBsZV90IHR1cGxlOwotICAgIGNpc3BhcnNlX3QgcGFyc2U7Ci0gICAgaW50IGksIGxhc3RfcmV0LCBsYXN0X2ZuOwotICAgIHVfY2hhciB0dXBsZV9kYXRhWzY0XTsKKyAgICBpbnQgbGFzdF9yZXQsIGxhc3RfZm47CiAgICAgY2hhciBzdHJbMjJdOwogICAgIHN0cnVjdCBTY3NpX0hvc3QgKmhvc3Q7CiAKICAgICBERUJVRygwLCAiZmRvbWFpbl9jb25maWcoMHglcClcbiIsIGxpbmspOwogCi0gICAgdHVwbGUuVHVwbGVEYXRhID0gdHVwbGVfZGF0YTsKLSAgICB0dXBsZS5UdXBsZURhdGFNYXggPSA2NDsKLSAgICB0dXBsZS5UdXBsZU9mZnNldCA9IDA7Ci0KLSAgICB0dXBsZS5EZXNpcmVkVHVwbGUgPSBDSVNUUExfQ0ZUQUJMRV9FTlRSWTsKLSAgICBDU19DSEVDSyhHZXRGaXJzdFR1cGxlLCBwY21jaWFfZ2V0X2ZpcnN0X3R1cGxlKGxpbmssICZ0dXBsZSkpOwotICAgIHdoaWxlICgxKSB7Ci0JaWYgKHBjbWNpYV9nZXRfdHVwbGVfZGF0YShsaW5rLCAmdHVwbGUpICE9IDAgfHwKLQkJcGNtY2lhX3BhcnNlX3R1cGxlKGxpbmssICZ0dXBsZSwgJnBhcnNlKSAhPSAwKQotCSAgICBnb3RvIG5leHRfZW50cnk7Ci0JbGluay0+Y29uZi5Db25maWdJbmRleCA9IHBhcnNlLmNmdGFibGVfZW50cnkuaW5kZXg7Ci0JbGluay0+aW8uQmFzZVBvcnQxID0gcGFyc2UuY2Z0YWJsZV9lbnRyeS5pby53aW5bMF0uYmFzZTsKLQlpID0gcGNtY2lhX3JlcXVlc3RfaW8obGluaywgJmxpbmstPmlvKTsKLQlpZiAoaSA9PSBDU19TVUNDRVNTKSBicmVhazsKLSAgICBuZXh0X2VudHJ5OgotCUNTX0NIRUNLKEdldE5leHRUdXBsZSwgcGNtY2lhX2dldF9uZXh0X3R1cGxlKGxpbmssICZ0dXBsZSkpOworICAgIGxhc3RfcmV0ID0gcGNtY2lhX2xvb3BfY29uZmlnKGxpbmssIGZkb21haW5fY29uZmlnX2NoZWNrLCBOVUxMKTsKKyAgICBpZiAobGFzdF9yZXQpIHsKKwkgICAgY3NfZXJyb3IobGluaywgUmVxdWVzdElPLCBsYXN0X3JldCk7CisJICAgIGdvdG8gZmFpbGVkOwogICAgIH0KIAogICAgIENTX0NIRUNLKFJlcXVlc3RJUlEsIHBjbWNpYV9yZXF1ZXN0X2lycShsaW5rLCAmbGluay0+aXJxKSk7CkBAIC0xODEsNiArMTc3LDcgQEAKIAogY3NfZmFpbGVkOgogICAgIGNzX2Vycm9yKGxpbmssIGxhc3RfZm4sIGxhc3RfcmV0KTsKK2ZhaWxlZDoKICAgICBmZG9tYWluX3JlbGVhc2UobGluayk7CiAgICAgcmV0dXJuIC1FTk9ERVY7CiB9IC8qIGZkb21haW5fY29uZmlnICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcGNtY2lhL25zcF9jcy5jIGIvZHJpdmVycy9zY3NpL3BjbWNpYS9uc3BfY3MuYwppbmRleCAyNGU2Y2I4My4uMTFhNjFlYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3BjbWNpYS9uc3BfY3MuYworKysgYi9kcml2ZXJzL3Njc2kvcGNtY2lhL25zcF9jcy5jCkBAIC0xNjA2LDEzMyArMTYwNiwxMjkgQEAKICAgICBpcyByZWNlaXZlZCwgdG8gY29uZmlndXJlIHRoZSBQQ01DSUEgc29ja2V0LCBhbmQgdG8gbWFrZSB0aGUKICAgICBldGhlcm5ldCBkZXZpY2UgYXZhaWxhYmxlIHRvIHRoZSBzeXN0ZW0uCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLSNkZWZpbmUgQ1NfQ0hFQ0soZm4sIHJldCkgXAotZG8geyBsYXN0X2ZuID0gKGZuKTsgaWYgKChsYXN0X3JldCA9IChyZXQpKSAhPSAwKSBnb3RvIGNzX2ZhaWxlZDsgfSB3aGlsZSAoMCkKLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworCitzdHJ1Y3QgbnNwX2NzX2NvbmZpZ2RhdGEgeworCW5zcF9od19kYXRhCQkqZGF0YTsKKwl3aW5fcmVxX3QJCXJlcTsKK307CisKK3N0YXRpYyBpbnQgbnNwX2NzX2NvbmZpZ19jaGVjayhzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYsCisJCQkgICAgICAgY2lzdHBsX2NmdGFibGVfZW50cnlfdCAqY2ZnLAorCQkJICAgICAgIGNpc3RwbF9jZnRhYmxlX2VudHJ5X3QgKmRmbHQsCisJCQkgICAgICAgdW5zaWduZWQgaW50IHZjYywKKwkJCSAgICAgICB2b2lkICpwcml2X2RhdGEpCit7CisJc3RydWN0IG5zcF9jc19jb25maWdkYXRhICpjZmdfbWVtID0gcHJpdl9kYXRhOworCisJaWYgKGNmZy0+aW5kZXggPT0gMCkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwkvKiBEb2VzIHRoaXMgY2FyZCBuZWVkIGF1ZGlvIG91dHB1dD8gKi8KKwlpZiAoY2ZnLT5mbGFncyAmIENJU1RQTF9DRlRBQkxFX0FVRElPKSB7CisJCXBfZGV2LT5jb25mLkF0dHJpYnV0ZXMgfD0gQ09ORl9FTkFCTEVfU1BLUjsKKwkJcF9kZXYtPmNvbmYuU3RhdHVzID0gQ0NTUl9BVURJT19FTkE7CisJfQorCisJLyogVXNlIHBvd2VyIHNldHRpbmdzIGZvciBWY2MgYW5kIFZwcCBpZiBwcmVzZW50ICovCisJLyogIE5vdGUgdGhhdCB0aGUgQ0lTIHZhbHVlcyBuZWVkIHRvIGJlIHJlc2NhbGVkICovCisJaWYgKGNmZy0+dmNjLnByZXNlbnQgJiAoMTw8Q0lTVFBMX1BPV0VSX1ZOT00pKSB7CisJCWlmICh2Y2MgIT0gY2ZnLT52Y2MucGFyYW1bQ0lTVFBMX1BPV0VSX1ZOT01dLzEwMDAwKQorCQkJcmV0dXJuIC1FTk9ERVY7CisJCWVsc2UgaWYgKGRmbHQtPnZjYy5wcmVzZW50ICYgKDE8PENJU1RQTF9QT1dFUl9WTk9NKSkgeworCQkJaWYgKHZjYyAhPSBkZmx0LT52Y2MucGFyYW1bQ0lTVFBMX1BPV0VSX1ZOT01dLzEwMDAwKQorCQkJCXJldHVybiAtRU5PREVWOworCQl9CisKKwkJaWYgKGNmZy0+dnBwMS5wcmVzZW50ICYgKDEgPDwgQ0lTVFBMX1BPV0VSX1ZOT00pKSB7CisJCQlwX2Rldi0+Y29uZi5WcHAgPQorCQkJCWNmZy0+dnBwMS5wYXJhbVtDSVNUUExfUE9XRVJfVk5PTV0gLyAxMDAwMDsKKwkJfSBlbHNlIGlmIChkZmx0LT52cHAxLnByZXNlbnQgJiAoMSA8PCBDSVNUUExfUE9XRVJfVk5PTSkpIHsKKwkJCXBfZGV2LT5jb25mLlZwcCA9CisJCQkJZGZsdC0+dnBwMS5wYXJhbVtDSVNUUExfUE9XRVJfVk5PTV0gLyAxMDAwMDsKKwkJfQorCisJCS8qIERvIHdlIG5lZWQgdG8gYWxsb2NhdGUgYW4gaW50ZXJydXB0PyAqLworCQlpZiAoY2ZnLT5pcnEuSVJRSW5mbzEgfHwgZGZsdC0+aXJxLklSUUluZm8xKQorCQkJcF9kZXYtPmNvbmYuQXR0cmlidXRlcyB8PSBDT05GX0VOQUJMRV9JUlE7CisKKwkJLyogSU8gd2luZG93IHNldHRpbmdzICovCisJCXBfZGV2LT5pby5OdW1Qb3J0czEgPSBwX2Rldi0+aW8uTnVtUG9ydHMyID0gMDsKKwkJaWYgKChjZmctPmlvLm53aW4gPiAwKSB8fCAoZGZsdC0+aW8ubndpbiA+IDApKSB7CisJCQljaXN0cGxfaW9fdCAqaW8gPSAoY2ZnLT5pby5ud2luKSA/ICZjZmctPmlvIDogJmRmbHQtPmlvOworCQkJcF9kZXYtPmlvLkF0dHJpYnV0ZXMxID0gSU9fREFUQV9QQVRIX1dJRFRIX0FVVE87CisJCQlpZiAoIShpby0+ZmxhZ3MgJiBDSVNUUExfSU9fOEJJVCkpCisJCQkJcF9kZXYtPmlvLkF0dHJpYnV0ZXMxID0gSU9fREFUQV9QQVRIX1dJRFRIXzE2OworCQkJaWYgKCEoaW8tPmZsYWdzICYgQ0lTVFBMX0lPXzE2QklUKSkKKwkJCQlwX2Rldi0+aW8uQXR0cmlidXRlczEgPSBJT19EQVRBX1BBVEhfV0lEVEhfODsKKwkJCXBfZGV2LT5pby5JT0FkZHJMaW5lcyA9IGlvLT5mbGFncyAmIENJU1RQTF9JT19MSU5FU19NQVNLOworCQkJcF9kZXYtPmlvLkJhc2VQb3J0MSA9IGlvLT53aW5bMF0uYmFzZTsKKwkJCXBfZGV2LT5pby5OdW1Qb3J0czEgPSBpby0+d2luWzBdLmxlbjsKKwkJCWlmIChpby0+bndpbiA+IDEpIHsKKwkJCQlwX2Rldi0+aW8uQXR0cmlidXRlczIgPSBwX2Rldi0+aW8uQXR0cmlidXRlczE7CisJCQkJcF9kZXYtPmlvLkJhc2VQb3J0MiA9IGlvLT53aW5bMV0uYmFzZTsKKwkJCQlwX2Rldi0+aW8uTnVtUG9ydHMyID0gaW8tPndpblsxXS5sZW47CisJCQl9CisJCQkvKiBUaGlzIHJlc2VydmVzIElPIHNwYWNlIGJ1dCBkb2Vzbid0IGFjdHVhbGx5IGVuYWJsZSBpdCAqLworCQkJaWYgKHBjbWNpYV9yZXF1ZXN0X2lvKHBfZGV2LCAmcF9kZXYtPmlvKSAhPSAwKQorCQkJCWdvdG8gbmV4dF9lbnRyeTsKKwkJfQorCisJCWlmICgoY2ZnLT5tZW0ubndpbiA+IDApIHx8IChkZmx0LT5tZW0ubndpbiA+IDApKSB7CisJCQltZW1yZXFfdAltYXA7CisJCQljaXN0cGxfbWVtX3QJKm1lbSA9CisJCQkJKGNmZy0+bWVtLm53aW4pID8gJmNmZy0+bWVtIDogJmRmbHQtPm1lbTsKKwkJCWNmZ19tZW0tPnJlcS5BdHRyaWJ1dGVzID0gV0lOX0RBVEFfV0lEVEhfMTZ8V0lOX01FTU9SWV9UWVBFX0NNOworCQkJY2ZnX21lbS0+cmVxLkF0dHJpYnV0ZXMgfD0gV0lOX0VOQUJMRTsKKwkJCWNmZ19tZW0tPnJlcS5CYXNlID0gbWVtLT53aW5bMF0uaG9zdF9hZGRyOworCQkJY2ZnX21lbS0+cmVxLlNpemUgPSBtZW0tPndpblswXS5sZW47CisJCQlpZiAoY2ZnX21lbS0+cmVxLlNpemUgPCAweDEwMDApCisJCQkJY2ZnX21lbS0+cmVxLlNpemUgPSAweDEwMDA7CisJCQljZmdfbWVtLT5yZXEuQWNjZXNzU3BlZWQgPSAwOworCQkJaWYgKHBjbWNpYV9yZXF1ZXN0X3dpbmRvdygmcF9kZXYsICZjZmdfbWVtLT5yZXEsICZwX2Rldi0+d2luKSAhPSAwKQorCQkJCWdvdG8gbmV4dF9lbnRyeTsKKwkJCW1hcC5QYWdlID0gMDsgbWFwLkNhcmRPZmZzZXQgPSBtZW0tPndpblswXS5jYXJkX2FkZHI7CisJCQlpZiAocGNtY2lhX21hcF9tZW1fcGFnZShwX2Rldi0+d2luLCAmbWFwKSAhPSAwKQorCQkJCWdvdG8gbmV4dF9lbnRyeTsKKworCQkJY2ZnX21lbS0+ZGF0YS0+TW1pb0FkZHJlc3MgPSAodW5zaWduZWQgbG9uZykgaW9yZW1hcF9ub2NhY2hlKGNmZ19tZW0tPnJlcS5CYXNlLCBjZmdfbWVtLT5yZXEuU2l6ZSk7CisJCQljZmdfbWVtLT5kYXRhLT5NbWlvTGVuZ3RoICA9IGNmZ19tZW0tPnJlcS5TaXplOworCQl9CisJCS8qIElmIHdlIGdvdCB0aGlzIGZhciwgd2UncmUgY29vbCEgKi8KKwkJcmV0dXJuIDA7CisJfQorCituZXh0X2VudHJ5OgorCW5zcF9kYmcoTlNQX0RFQlVHX0lOSVQsICJuZXh0Iik7CisJcGNtY2lhX2Rpc2FibGVfZGV2aWNlKHBfZGV2KTsKKwlyZXR1cm4gLUVOT0RFVjsKK30KKwogc3RhdGljIGludCBuc3BfY3NfY29uZmlnKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQogewogCWludAkJICByZXQ7CiAJc2NzaV9pbmZvX3QJICppbmZvCSA9IGxpbmstPnByaXY7Ci0JdHVwbGVfdAkJICB0dXBsZTsKLQljaXNwYXJzZV90CSAgcGFyc2U7Ci0JaW50CQkgIGxhc3RfcmV0LCBsYXN0X2ZuOwotCXVuc2lnbmVkIGNoYXIJICB0dXBsZV9kYXRhWzY0XTsKLQljb25maWdfaW5mb190CSAgY29uZjsKLQl3aW5fcmVxX3QgICAgICAgICByZXE7Ci0JbWVtcmVxX3QgICAgICAgICAgbWFwOwotCWNpc3RwbF9jZnRhYmxlX2VudHJ5X3QgZGZsdCA9IHsgMCB9OworCXN0cnVjdCBuc3BfY3NfY29uZmlnZGF0YSAqY2ZnX21lbTsKIAlzdHJ1Y3QgU2NzaV9Ib3N0ICpob3N0OwogCW5zcF9od19kYXRhICAgICAgKmRhdGEgPSAmbnNwX2RhdGFfYmFzZTsKIAogCW5zcF9kYmcoTlNQX0RFQlVHX0lOSVQsICJpbiIpOwogCi0JdHVwbGUuQXR0cmlidXRlcyAgICAgID0gMDsKLQl0dXBsZS5UdXBsZURhdGEJICAgICAgPSB0dXBsZV9kYXRhOwotCXR1cGxlLlR1cGxlRGF0YU1heCAgICA9IHNpemVvZih0dXBsZV9kYXRhKTsKLQl0dXBsZS5UdXBsZU9mZnNldCAgICAgPSAwOworCWNmZ19tZW0gPSBremFsbG9jKHNpemVvZihjZmdfbWVtKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFjZmdfbWVtKQorCQlyZXR1cm4gLUVOT01FTTsKKwljZmdfbWVtLT5kYXRhID0gZGF0YTsKIAotCS8qIExvb2sgdXAgdGhlIGN1cnJlbnQgVmNjICovCi0JQ1NfQ0hFQ0soR2V0Q29uZmlndXJhdGlvbkluZm8sIHBjbWNpYV9nZXRfY29uZmlndXJhdGlvbl9pbmZvKGxpbmssICZjb25mKSk7Ci0KLQl0dXBsZS5EZXNpcmVkVHVwbGUgPSBDSVNUUExfQ0ZUQUJMRV9FTlRSWTsKLQlDU19DSEVDSyhHZXRGaXJzdFR1cGxlLCBwY21jaWFfZ2V0X2ZpcnN0X3R1cGxlKGxpbmssICZ0dXBsZSkpOwotCXdoaWxlICgxKSB7Ci0JCWNpc3RwbF9jZnRhYmxlX2VudHJ5X3QgKmNmZyA9ICYocGFyc2UuY2Z0YWJsZV9lbnRyeSk7Ci0KLQkJaWYgKHBjbWNpYV9nZXRfdHVwbGVfZGF0YShsaW5rLCAmdHVwbGUpICE9IDAgfHwKLQkJCQlwY21jaWFfcGFyc2VfdHVwbGUobGluaywgJnR1cGxlLCAmcGFyc2UpICE9IDApCi0JCQlnb3RvIG5leHRfZW50cnk7Ci0KLQkJaWYgKGNmZy0+ZmxhZ3MgJiBDSVNUUExfQ0ZUQUJMRV9ERUZBVUxUKSB7IGRmbHQgPSAqY2ZnOyB9Ci0JCWlmIChjZmctPmluZGV4ID09IDApIHsgZ290byBuZXh0X2VudHJ5OyB9Ci0JCWxpbmstPmNvbmYuQ29uZmlnSW5kZXggPSBjZmctPmluZGV4OwotCi0JCS8qIERvZXMgdGhpcyBjYXJkIG5lZWQgYXVkaW8gb3V0cHV0PyAqLwotCQlpZiAoY2ZnLT5mbGFncyAmIENJU1RQTF9DRlRBQkxFX0FVRElPKSB7Ci0JCQlsaW5rLT5jb25mLkF0dHJpYnV0ZXMgfD0gQ09ORl9FTkFCTEVfU1BLUjsKLQkJCWxpbmstPmNvbmYuU3RhdHVzID0gQ0NTUl9BVURJT19FTkE7Ci0JCX0KLQotCQkvKiBVc2UgcG93ZXIgc2V0dGluZ3MgZm9yIFZjYyBhbmQgVnBwIGlmIHByZXNlbnQgKi8KLQkJLyogIE5vdGUgdGhhdCB0aGUgQ0lTIHZhbHVlcyBuZWVkIHRvIGJlIHJlc2NhbGVkICovCi0JCWlmIChjZmctPnZjYy5wcmVzZW50ICYgKDE8PENJU1RQTF9QT1dFUl9WTk9NKSkgewotCQkJaWYgKGNvbmYuVmNjICE9IGNmZy0+dmNjLnBhcmFtW0NJU1RQTF9QT1dFUl9WTk9NXS8xMDAwMCkgewotCQkJCWdvdG8gbmV4dF9lbnRyeTsKLQkJCX0KLQkJfSBlbHNlIGlmIChkZmx0LnZjYy5wcmVzZW50ICYgKDE8PENJU1RQTF9QT1dFUl9WTk9NKSkgewotCQkJaWYgKGNvbmYuVmNjICE9IGRmbHQudmNjLnBhcmFtW0NJU1RQTF9QT1dFUl9WTk9NXS8xMDAwMCkgewotCQkJCWdvdG8gbmV4dF9lbnRyeTsKLQkJCX0KLQkJfQotCi0JCWlmIChjZmctPnZwcDEucHJlc2VudCAmICgxIDw8IENJU1RQTF9QT1dFUl9WTk9NKSkgewotCQkJbGluay0+Y29uZi5WcHAgPQotCQkJCWNmZy0+dnBwMS5wYXJhbVtDSVNUUExfUE9XRVJfVk5PTV0gLyAxMDAwMDsKLQkJfSBlbHNlIGlmIChkZmx0LnZwcDEucHJlc2VudCAmICgxIDw8IENJU1RQTF9QT1dFUl9WTk9NKSkgewotCQkJbGluay0+Y29uZi5WcHAgPQotCQkJCWRmbHQudnBwMS5wYXJhbVtDSVNUUExfUE9XRVJfVk5PTV0gLyAxMDAwMDsKLQkJfQotCi0JCS8qIERvIHdlIG5lZWQgdG8gYWxsb2NhdGUgYW4gaW50ZXJydXB0PyAqLwotCQlpZiAoY2ZnLT5pcnEuSVJRSW5mbzEgfHwgZGZsdC5pcnEuSVJRSW5mbzEpIHsKLQkJCWxpbmstPmNvbmYuQXR0cmlidXRlcyB8PSBDT05GX0VOQUJMRV9JUlE7Ci0JCX0KLQotCQkvKiBJTyB3aW5kb3cgc2V0dGluZ3MgKi8KLQkJbGluay0+aW8uTnVtUG9ydHMxID0gbGluay0+aW8uTnVtUG9ydHMyID0gMDsKLQkJaWYgKChjZmctPmlvLm53aW4gPiAwKSB8fCAoZGZsdC5pby5ud2luID4gMCkpIHsKLQkJCWNpc3RwbF9pb190ICppbyA9IChjZmctPmlvLm53aW4pID8gJmNmZy0+aW8gOiAmZGZsdC5pbzsKLQkJCWxpbmstPmlvLkF0dHJpYnV0ZXMxID0gSU9fREFUQV9QQVRIX1dJRFRIX0FVVE87Ci0JCQlpZiAoIShpby0+ZmxhZ3MgJiBDSVNUUExfSU9fOEJJVCkpCi0JCQkJbGluay0+aW8uQXR0cmlidXRlczEgPSBJT19EQVRBX1BBVEhfV0lEVEhfMTY7Ci0JCQlpZiAoIShpby0+ZmxhZ3MgJiBDSVNUUExfSU9fMTZCSVQpKQotCQkJCWxpbmstPmlvLkF0dHJpYnV0ZXMxID0gSU9fREFUQV9QQVRIX1dJRFRIXzg7Ci0JCQlsaW5rLT5pby5JT0FkZHJMaW5lcyA9IGlvLT5mbGFncyAmIENJU1RQTF9JT19MSU5FU19NQVNLOwotCQkJbGluay0+aW8uQmFzZVBvcnQxID0gaW8tPndpblswXS5iYXNlOwotCQkJbGluay0+aW8uTnVtUG9ydHMxID0gaW8tPndpblswXS5sZW47Ci0JCQlpZiAoaW8tPm53aW4gPiAxKSB7Ci0JCQkJbGluay0+aW8uQXR0cmlidXRlczIgPSBsaW5rLT5pby5BdHRyaWJ1dGVzMTsKLQkJCQlsaW5rLT5pby5CYXNlUG9ydDIgPSBpby0+d2luWzFdLmJhc2U7Ci0JCQkJbGluay0+aW8uTnVtUG9ydHMyID0gaW8tPndpblsxXS5sZW47Ci0JCQl9Ci0JCQkvKiBUaGlzIHJlc2VydmVzIElPIHNwYWNlIGJ1dCBkb2Vzbid0IGFjdHVhbGx5IGVuYWJsZSBpdCAqLwotCQkJaWYgKHBjbWNpYV9yZXF1ZXN0X2lvKGxpbmssICZsaW5rLT5pbykgIT0gMCkKLQkJCQlnb3RvIG5leHRfZW50cnk7Ci0JCX0KLQotCQlpZiAoKGNmZy0+bWVtLm53aW4gPiAwKSB8fCAoZGZsdC5tZW0ubndpbiA+IDApKSB7Ci0JCQljaXN0cGxfbWVtX3QgKm1lbSA9Ci0JCQkJKGNmZy0+bWVtLm53aW4pID8gJmNmZy0+bWVtIDogJmRmbHQubWVtOwotCQkJcmVxLkF0dHJpYnV0ZXMgPSBXSU5fREFUQV9XSURUSF8xNnxXSU5fTUVNT1JZX1RZUEVfQ007Ci0JCQlyZXEuQXR0cmlidXRlcyB8PSBXSU5fRU5BQkxFOwotCQkJcmVxLkJhc2UgPSBtZW0tPndpblswXS5ob3N0X2FkZHI7Ci0JCQlyZXEuU2l6ZSA9IG1lbS0+d2luWzBdLmxlbjsKLQkJCWlmIChyZXEuU2l6ZSA8IDB4MTAwMCkgewotCQkJCXJlcS5TaXplID0gMHgxMDAwOwotCQkJfQotCQkJcmVxLkFjY2Vzc1NwZWVkID0gMDsKLQkJCWlmIChwY21jaWFfcmVxdWVzdF93aW5kb3coJmxpbmssICZyZXEsICZsaW5rLT53aW4pICE9IDApCi0JCQkJZ290byBuZXh0X2VudHJ5OwotCQkJbWFwLlBhZ2UgPSAwOyBtYXAuQ2FyZE9mZnNldCA9IG1lbS0+d2luWzBdLmNhcmRfYWRkcjsKLQkJCWlmIChwY21jaWFfbWFwX21lbV9wYWdlKGxpbmstPndpbiwgJm1hcCkgIT0gMCkKLQkJCQlnb3RvIG5leHRfZW50cnk7Ci0KLQkJCWRhdGEtPk1taW9BZGRyZXNzID0gKHVuc2lnbmVkIGxvbmcpaW9yZW1hcF9ub2NhY2hlKHJlcS5CYXNlLCByZXEuU2l6ZSk7Ci0JCQlkYXRhLT5NbWlvTGVuZ3RoICA9IHJlcS5TaXplOwotCQl9Ci0JCS8qIElmIHdlIGdvdCB0aGlzIGZhciwgd2UncmUgY29vbCEgKi8KLQkJYnJlYWs7Ci0KLQluZXh0X2VudHJ5OgotCQluc3BfZGJnKE5TUF9ERUJVR19JTklULCAibmV4dCIpOwotCQlwY21jaWFfZGlzYWJsZV9kZXZpY2UobGluayk7Ci0JCUNTX0NIRUNLKEdldE5leHRUdXBsZSwgcGNtY2lhX2dldF9uZXh0X3R1cGxlKGxpbmssICZ0dXBsZSkpOwotCX0KKwlyZXQgPSBwY21jaWFfbG9vcF9jb25maWcobGluaywgbnNwX2NzX2NvbmZpZ19jaGVjaywgY2ZnX21lbSk7CisJCWdvdG8gY3NfZmFpbGVkOwogCiAJaWYgKGxpbmstPmNvbmYuQXR0cmlidXRlcyAmIENPTkZfRU5BQkxFX0lSUSkgewotCQlDU19DSEVDSyhSZXF1ZXN0SVJRLCBwY21jaWFfcmVxdWVzdF9pcnEobGluaywgJmxpbmstPmlycSkpOworCQlpZiAocGNtY2lhX3JlcXVlc3RfaXJxKGxpbmssICZsaW5rLT5pcnEpKQorCQkJZ290byBjc19mYWlsZWQ7CiAJfQotCUNTX0NIRUNLKFJlcXVlc3RDb25maWd1cmF0aW9uLCBwY21jaWFfcmVxdWVzdF9jb25maWd1cmF0aW9uKGxpbmssICZsaW5rLT5jb25mKSk7CisKKwlyZXQgPSBwY21jaWFfcmVxdWVzdF9jb25maWd1cmF0aW9uKGxpbmssICZsaW5rLT5jb25mKTsKKwlpZiAocmV0KQorCQlnb3RvIGNzX2ZhaWxlZDsKIAogCWlmIChmcmVlX3BvcnRzKSB7CiAJCWlmIChsaW5rLT5pby5CYXNlUG9ydDEpIHsKQEAgLTE3OTAsMjAgKzE3ODYsMjAgQEAKIAkJcHJpbnRrKCIgJiAweCUwNHgtMHglMDR4IiwgbGluay0+aW8uQmFzZVBvcnQyLAogCQkgICAgICAgbGluay0+aW8uQmFzZVBvcnQyK2xpbmstPmlvLk51bVBvcnRzMi0xKTsKIAlpZiAobGluay0+d2luKQotCQlwcmludGsoIiwgbWVtIDB4JTA2bHgtMHglMDZseCIsIHJlcS5CYXNlLAotCQkgICAgICAgcmVxLkJhc2UrcmVxLlNpemUtMSk7CisJCXByaW50aygiLCBtZW0gMHglMDZseC0weCUwNmx4IiwgY2ZnX21lbS0+cmVxLkJhc2UsCisJCSAgICAgICBjZmdfbWVtLT5yZXEuQmFzZStjZmdfbWVtLT5yZXEuU2l6ZS0xKTsKIAlwcmludGsoIlxuIik7CiAKKwlrZnJlZShjZmdfbWVtKTsKIAlyZXR1cm4gMDsKIAogIGNzX2ZhaWxlZDoKIAluc3BfZGJnKE5TUF9ERUJVR19JTklULCAiY29uZmlnIGZhaWwiKTsKLQljc19lcnJvcihsaW5rLCBsYXN0X2ZuLCBsYXN0X3JldCk7CiAJbnNwX2NzX3JlbGVhc2UobGluayk7CisJa2ZyZWUoY2ZnX21lbSk7CiAKIAlyZXR1cm4gLUVOT0RFVjsKIH0gLyogbnNwX2NzX2NvbmZpZyAqLwotI3VuZGVmIENTX0NIRUNLCiAKIAogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcGNtY2lhL3Fsb2dpY19zdHViLmMgYi9kcml2ZXJzL3Njc2kvcGNtY2lhL3Fsb2dpY19zdHViLmMKaW5kZXggNjdjNWE1OC4uMjBjM2U1ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3BjbWNpYS9xbG9naWNfc3R1Yi5jCisrKyBiL2RyaXZlcnMvc2NzaS9wY21jaWEvcWxvZ2ljX3N0dWIuYwpAQCAtMTk1LDM5ICsxOTUsMzMgQEAKICNkZWZpbmUgQ1NfQ0hFQ0soZm4sIHJldCkgXAogZG8geyBsYXN0X2ZuID0gKGZuKTsgaWYgKChsYXN0X3JldCA9IChyZXQpKSAhPSAwKSBnb3RvIGNzX2ZhaWxlZDsgfSB3aGlsZSAoMCkKIAorc3RhdGljIGludCBxbG9naWNfY29uZmlnX2NoZWNrKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldiwKKwkJCSAgICAgICBjaXN0cGxfY2Z0YWJsZV9lbnRyeV90ICpjZmcsCisJCQkgICAgICAgY2lzdHBsX2NmdGFibGVfZW50cnlfdCAqZGZsdCwKKwkJCSAgICAgICB1bnNpZ25lZCBpbnQgdmNjLAorCQkJICAgICAgIHZvaWQgKnByaXZfZGF0YSkKK3sKKwlwX2Rldi0+aW8uQmFzZVBvcnQxID0gY2ZnLT5pby53aW5bMF0uYmFzZTsKKwlwX2Rldi0+aW8uTnVtUG9ydHMxID0gY2ZnLT5pby53aW5bMF0ubGVuOworCisJaWYgKHBfZGV2LT5pby5CYXNlUG9ydDEgPT0gMCkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlyZXR1cm4gcGNtY2lhX3JlcXVlc3RfaW8ocF9kZXYsICZwX2Rldi0+aW8pOworfQorCiBzdGF0aWMgaW50IHFsb2dpY19jb25maWcoc3RydWN0IHBjbWNpYV9kZXZpY2UgKiBsaW5rKQogewogCXNjc2lfaW5mb190ICppbmZvID0gbGluay0+cHJpdjsKLQl0dXBsZV90IHR1cGxlOwotCWNpc3BhcnNlX3QgcGFyc2U7Ci0JaW50IGksIGxhc3RfcmV0LCBsYXN0X2ZuOwotCXVuc2lnbmVkIHNob3J0IHR1cGxlX2RhdGFbMzJdOworCWludCBsYXN0X3JldCwgbGFzdF9mbjsKIAlzdHJ1Y3QgU2NzaV9Ib3N0ICpob3N0OwogCiAJREVCVUcoMCwgInFsb2dpY19jb25maWcoMHglcClcbiIsIGxpbmspOwogCi0JaW5mby0+bWFuZl9pZCA9IGxpbmstPm1hbmZfaWQ7Ci0KLQl0dXBsZS5UdXBsZURhdGEgPSAoY2lzZGF0YV90ICopIHR1cGxlX2RhdGE7Ci0JdHVwbGUuVHVwbGVEYXRhTWF4ID0gNjQ7Ci0JdHVwbGUuVHVwbGVPZmZzZXQgPSAwOwotCi0JdHVwbGUuRGVzaXJlZFR1cGxlID0gQ0lTVFBMX0NGVEFCTEVfRU5UUlk7Ci0JQ1NfQ0hFQ0soR2V0Rmlyc3RUdXBsZSwgcGNtY2lhX2dldF9maXJzdF90dXBsZShsaW5rLCAmdHVwbGUpKTsKLQl3aGlsZSAoMSkgewotCQlpZiAocGNtY2lhX2dldF90dXBsZV9kYXRhKGxpbmssICZ0dXBsZSkgIT0gMCB8fAotCQkJCXBjbWNpYV9wYXJzZV90dXBsZShsaW5rLCAmdHVwbGUsICZwYXJzZSkgIT0gMCkKLQkJCWdvdG8gbmV4dF9lbnRyeTsKLQkJbGluay0+Y29uZi5Db25maWdJbmRleCA9IHBhcnNlLmNmdGFibGVfZW50cnkuaW5kZXg7Ci0JCWxpbmstPmlvLkJhc2VQb3J0MSA9IHBhcnNlLmNmdGFibGVfZW50cnkuaW8ud2luWzBdLmJhc2U7Ci0JCWxpbmstPmlvLk51bVBvcnRzMSA9IHBhcnNlLmNmdGFibGVfZW50cnkuaW8ud2luWzBdLmxlbjsKLQkJaWYgKGxpbmstPmlvLkJhc2VQb3J0MSAhPSAwKSB7Ci0JCQlpID0gcGNtY2lhX3JlcXVlc3RfaW8obGluaywgJmxpbmstPmlvKTsKLQkJCWlmIChpID09IENTX1NVQ0NFU1MpCi0JCQkJYnJlYWs7Ci0JCX0KLQkgICAgICBuZXh0X2VudHJ5OgotCQlDU19DSEVDSyhHZXROZXh0VHVwbGUsIHBjbWNpYV9nZXRfbmV4dF90dXBsZShsaW5rLCAmdHVwbGUpKTsKKwlsYXN0X3JldCA9IHBjbWNpYV9sb29wX2NvbmZpZyhsaW5rLCBxbG9naWNfY29uZmlnX2NoZWNrLCBOVUxMKTsKKwlpZiAobGFzdF9yZXQpIHsKKwkJY3NfZXJyb3IobGluaywgUmVxdWVzdElPLCBsYXN0X3JldCk7CisJCWdvdG8gZmFpbGVkOwogCX0KIAogCUNTX0NIRUNLKFJlcXVlc3RJUlEsIHBjbWNpYV9yZXF1ZXN0X2lycShsaW5rLCAmbGluay0+aXJxKSk7CkBAIC0yNjIsNiArMjU2LDcgQEAKIGNzX2ZhaWxlZDoKIAljc19lcnJvcihsaW5rLCBsYXN0X2ZuLCBsYXN0X3JldCk7CiAJcGNtY2lhX2Rpc2FibGVfZGV2aWNlKGxpbmspOworZmFpbGVkOgogCXJldHVybiAtRU5PREVWOwogCiB9CQkJCS8qIHFsb2dpY19jb25maWcgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9wY21jaWEvc3ltNTNjNTAwX2NzLmMgYi9kcml2ZXJzL3Njc2kvcGNtY2lhL3N5bTUzYzUwMF9jcy5jCmluZGV4IDBiZTIzMmIuLmIzMzBjMTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9wY21jaWEvc3ltNTNjNTAwX2NzLmMKKysrIGIvZHJpdmVycy9zY3NpL3BjbWNpYS9zeW01M2M1MDBfY3MuYwpAQCAtNzAwLDE1ICs3MDAsMjcgQEAKICNkZWZpbmUgQ1NfQ0hFQ0soZm4sIHJldCkgXAogZG8geyBsYXN0X2ZuID0gKGZuKTsgaWYgKChsYXN0X3JldCA9IChyZXQpKSAhPSAwKSBnb3RvIGNzX2ZhaWxlZDsgfSB3aGlsZSAoMCkKIAorc3RhdGljIGludCBTWU01M0M1MDBfY29uZmlnX2NoZWNrKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldiwKKwkJCQkgIGNpc3RwbF9jZnRhYmxlX2VudHJ5X3QgKmNmZywKKwkJCQkgIGNpc3RwbF9jZnRhYmxlX2VudHJ5X3QgKmRmbHQsCisJCQkJICB1bnNpZ25lZCBpbnQgdmNjLAorCQkJCSAgdm9pZCAqcHJpdl9kYXRhKQoreworCXBfZGV2LT5pby5CYXNlUG9ydDEgPSBjZmctPmlvLndpblswXS5iYXNlOworCXBfZGV2LT5pby5OdW1Qb3J0czEgPSBjZmctPmlvLndpblswXS5sZW47CisKKwlpZiAocF9kZXYtPmlvLkJhc2VQb3J0MSA9PSAwKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCXJldHVybiBwY21jaWFfcmVxdWVzdF9pbyhwX2RldiwgJnBfZGV2LT5pbyk7Cit9CisKIHN0YXRpYyBpbnQKIFNZTTUzQzUwMF9jb25maWcoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCiB7CiAJc3RydWN0IHNjc2lfaW5mb190ICppbmZvID0gbGluay0+cHJpdjsKLQl0dXBsZV90IHR1cGxlOwotCWNpc3BhcnNlX3QgcGFyc2U7Ci0JaW50IGksIGxhc3RfcmV0LCBsYXN0X2ZuOworCWludCBsYXN0X3JldCwgbGFzdF9mbjsKIAlpbnQgaXJxX2xldmVsLCBwb3J0X2Jhc2U7Ci0JdW5zaWduZWQgc2hvcnQgdHVwbGVfZGF0YVszMl07CiAJc3RydWN0IFNjc2lfSG9zdCAqaG9zdDsKIAlzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlICp0cG50ID0gJnN5bTUzYzUwMF9kcml2ZXJfdGVtcGxhdGU7CiAJc3RydWN0IHN5bTUzYzUwMF9kYXRhICpkYXRhOwpAQCAtNzE3LDI3ICs3MjksMTAgQEAKIAogCWluZm8tPm1hbmZfaWQgPSBsaW5rLT5tYW5mX2lkOwogCi0JdHVwbGUuVHVwbGVEYXRhID0gKGNpc2RhdGFfdCAqKXR1cGxlX2RhdGE7Ci0JdHVwbGUuVHVwbGVEYXRhTWF4ID0gNjQ7Ci0JdHVwbGUuVHVwbGVPZmZzZXQgPSAwOwotCi0JdHVwbGUuRGVzaXJlZFR1cGxlID0gQ0lTVFBMX0NGVEFCTEVfRU5UUlk7Ci0JQ1NfQ0hFQ0soR2V0Rmlyc3RUdXBsZSwgcGNtY2lhX2dldF9maXJzdF90dXBsZShsaW5rLCAmdHVwbGUpKTsKLQl3aGlsZSAoMSkgewotCQlpZiAocGNtY2lhX2dldF90dXBsZV9kYXRhKGxpbmssICZ0dXBsZSkgIT0gMCB8fAotCQkgICAgcGNtY2lhX3BhcnNlX3R1cGxlKGxpbmssICZ0dXBsZSwgJnBhcnNlKSAhPSAwKQotCQkJZ290byBuZXh0X2VudHJ5OwotCQlsaW5rLT5jb25mLkNvbmZpZ0luZGV4ID0gcGFyc2UuY2Z0YWJsZV9lbnRyeS5pbmRleDsKLQkJbGluay0+aW8uQmFzZVBvcnQxID0gcGFyc2UuY2Z0YWJsZV9lbnRyeS5pby53aW5bMF0uYmFzZTsKLQkJbGluay0+aW8uTnVtUG9ydHMxID0gcGFyc2UuY2Z0YWJsZV9lbnRyeS5pby53aW5bMF0ubGVuOwotCi0JCWlmIChsaW5rLT5pby5CYXNlUG9ydDEgIT0gMCkgewotCQkJaSA9IHBjbWNpYV9yZXF1ZXN0X2lvKGxpbmssICZsaW5rLT5pbyk7Ci0JCQlpZiAoaSA9PSBDU19TVUNDRVNTKQotCQkJCWJyZWFrOwotCQl9Ci1uZXh0X2VudHJ5OgotCQlDU19DSEVDSyhHZXROZXh0VHVwbGUsIHBjbWNpYV9nZXRfbmV4dF90dXBsZShsaW5rLCAmdHVwbGUpKTsKKwlsYXN0X3JldCA9IHBjbWNpYV9sb29wX2NvbmZpZyhsaW5rLCBTWU01M0M1MDBfY29uZmlnX2NoZWNrLCBOVUxMKTsKKwlpZiAobGFzdF9yZXQpIHsKKwkJY3NfZXJyb3IobGluaywgUmVxdWVzdElPLCBsYXN0X3JldCk7CisJCWdvdG8gZmFpbGVkOwogCX0KIAogCUNTX0NIRUNLKFJlcXVlc3RJUlEsIHBjbWNpYV9yZXF1ZXN0X2lycShsaW5rLCAmbGluay0+aXJxKSk7CkBAIC04MzEsNiArODI2LDcgQEAKIAogY3NfZmFpbGVkOgogCWNzX2Vycm9yKGxpbmssIGxhc3RfZm4sIGxhc3RfcmV0KTsKK2ZhaWxlZDoKIAlTWU01M0M1MDBfcmVsZWFzZShsaW5rKTsKIAlyZXR1cm4gLUVOT0RFVjsKIH0gLyogU1lNNTNDNTAwX2NvbmZpZyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2F0dHIuYyBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9hdHRyLmMKaW5kZXggMGRkZmU3MS4uZWQ3MzE5NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2F0dHIuYworKysgYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfYXR0ci5jCkBAIC0xMDA2LDcgKzEwMDYsNiBAQAogCX0KIAogCXFsYTJ4MDBfYWJvcnRfZmNwb3J0X2NtZHMoZmNwb3J0KTsKLQlzY3NpX3RhcmdldF91bmJsb2NrKCZycG9ydC0+ZGV2KTsKIH0KIAogc3RhdGljIGludApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2RlZi5oIGIvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2RlZi5oCmluZGV4IDgzYzgxOTIuLmYyNWY0MWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9kZWYuaAorKysgYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfZGVmLmgKQEAgLTIxMDgsNyArMjEwOCw3IEBACiAKIHN0cnVjdCBxbGFfbXNpeF9lbnRyeSB7CiAJaW50IGhhdmVfaXJxOwotCXVpbnQxNl90IG1zaXhfdmVjdG9yOworCXVpbnQzMl90IG1zaXhfdmVjdG9yOwogCXVpbnQxNl90IG1zaXhfZW50cnk7CiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfaXNyLmMgYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfaXNyLmMKaW5kZXggZmM0YmZhNy4uYTc2ZWZkOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2lzci5jCisrKyBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9pc3IuYwpAQCAtMTE4Nyw3ICsxMTg3LDEyIEBACiAJCSAgICBjcC0+c2VyaWFsX251bWJlciwgY29tcF9zdGF0dXMsCiAJCSAgICBhdG9taWNfcmVhZCgmZmNwb3J0LT5zdGF0ZSkpKTsKIAotCQljcC0+cmVzdWx0ID0gRElEX0JVU19CVVNZIDw8IDE2OworCQkvKgorCQkgKiBXZSBhcmUgZ29pbmcgdG8gaGF2ZSB0aGUgZmMgY2xhc3MgYmxvY2sgdGhlIHJwb3J0CisJCSAqIHdoaWxlIHdlIHRyeSB0byByZWNvdmVyIHNvIGluc3RydWN0IHRoZSBtaWQgbGF5ZXIKKwkJICogdG8gcmVxdWV1ZSB1bnRpbCB0aGUgY2xhc3MgZGVjaWRlcyBob3cgdG8gaGFuZGxlIHRoaXMuCisJCSAqLworCQljcC0+cmVzdWx0ID0gRElEX1RSQU5TUE9SVF9ESVNSVVBURUQgPDwgMTY7CiAJCWlmIChhdG9taWNfcmVhZCgmZmNwb3J0LT5zdGF0ZSkgPT0gRkNTX09OTElORSkKIAkJCXFsYTJ4MDBfbWFya19kZXZpY2VfbG9zdChmY3BvcnQtPmhhLCBmY3BvcnQsIDEsIDEpOwogCQlicmVhazsKQEAgLTEyMTQsNyArMTIxOSwxMiBAQAogCQlicmVhazsKIAogCWNhc2UgQ1NfVElNRU9VVDoKLQkJY3AtPnJlc3VsdCA9IERJRF9CVVNfQlVTWSA8PCAxNjsKKwkJLyoKKwkJICogV2UgYXJlIGdvaW5nIHRvIGhhdmUgdGhlIGZjIGNsYXNzIGJsb2NrIHRoZSBycG9ydAorCQkgKiB3aGlsZSB3ZSB0cnkgdG8gcmVjb3ZlciBzbyBpbnN0cnVjdCB0aGUgbWlkIGxheWVyCisJCSAqIHRvIHJlcXVldWUgdW50aWwgdGhlIGNsYXNzIGRlY2lkZXMgaG93IHRvIGhhbmRsZSB0aGlzLgorCQkgKi8KKwkJY3AtPnJlc3VsdCA9IERJRF9UUkFOU1BPUlRfRElTUlVQVEVEIDw8IDE2OwogCiAJCWlmIChJU19GV0kyX0NBUEFCTEUoaGEpKSB7CiAJCQlERUJVRzIocHJpbnRrKEtFUk5fSU5GTwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX29zLmMgYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfb3MuYwppbmRleCAzNDMzNDQxLi4yYWVkNDcyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfb3MuYworKysgYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfb3MuYwpAQCAtMzk0LDEwICszOTQsOCBAQAogCX0KIAogCS8qIENsb3NlIHdpbmRvdyBvbiBmY3BvcnQvcnBvcnQgc3RhdGUtdHJhbnNpdGlvbmluZy4gKi8KLQlpZiAoZmNwb3J0LT5kcnBvcnQpIHsKLQkJY21kLT5yZXN1bHQgPSBESURfSU1NX1JFVFJZIDw8IDE2OwotCQlnb3RvIHFjX2ZhaWxfY29tbWFuZDsKLQl9CisJaWYgKGZjcG9ydC0+ZHJwb3J0KQorCQlnb3RvIHFjX3RhcmdldF9idXN5OwogCiAJaWYgKGF0b21pY19yZWFkKCZmY3BvcnQtPnN0YXRlKSAhPSBGQ1NfT05MSU5FKSB7CiAJCWlmIChhdG9taWNfcmVhZCgmZmNwb3J0LT5zdGF0ZSkgPT0gRkNTX0RFVklDRV9ERUFEIHx8CkBAIC00MDUsNyArNDAzLDcgQEAKIAkJCWNtZC0+cmVzdWx0ID0gRElEX05PX0NPTk5FQ1QgPDwgMTY7CiAJCQlnb3RvIHFjX2ZhaWxfY29tbWFuZDsKIAkJfQotCQlnb3RvIHFjX2hvc3RfYnVzeTsKKwkJZ290byBxY190YXJnZXRfYnVzeTsKIAl9CiAKIAlzcGluX3VubG9ja19pcnEoaGEtPmhvc3QtPmhvc3RfbG9jayk7CkBAIC00MjgsMTAgKzQyNiwxMSBAQAogCiBxY19ob3N0X2J1c3lfbG9jazoKIAlzcGluX2xvY2tfaXJxKGhhLT5ob3N0LT5ob3N0X2xvY2spOwotCi1xY19ob3N0X2J1c3k6CiAJcmV0dXJuIFNDU0lfTUxRVUVVRV9IT1NUX0JVU1k7CiAKK3FjX3RhcmdldF9idXN5OgorCXJldHVybiBTQ1NJX01MUVVFVUVfVEFSR0VUX0JVU1k7CisKIHFjX2ZhaWxfY29tbWFuZDoKIAlkb25lKGNtZCk7CiAKQEAgLTQ2MSwxMCArNDYwLDggQEAKIAl9CiAKIAkvKiBDbG9zZSB3aW5kb3cgb24gZmNwb3J0L3Jwb3J0IHN0YXRlLXRyYW5zaXRpb25pbmcuICovCi0JaWYgKGZjcG9ydC0+ZHJwb3J0KSB7Ci0JCWNtZC0+cmVzdWx0ID0gRElEX0lNTV9SRVRSWSA8PCAxNjsKLQkJZ290byBxYzI0X2ZhaWxfY29tbWFuZDsKLQl9CisJaWYgKGZjcG9ydC0+ZHJwb3J0KQorCQlnb3RvIHFjMjRfdGFyZ2V0X2J1c3k7CiAKIAlpZiAoYXRvbWljX3JlYWQoJmZjcG9ydC0+c3RhdGUpICE9IEZDU19PTkxJTkUpIHsKIAkJaWYgKGF0b21pY19yZWFkKCZmY3BvcnQtPnN0YXRlKSA9PSBGQ1NfREVWSUNFX0RFQUQgfHwKQEAgLTQ3Miw3ICs0NjksNyBAQAogCQkJY21kLT5yZXN1bHQgPSBESURfTk9fQ09OTkVDVCA8PCAxNjsKIAkJCWdvdG8gcWMyNF9mYWlsX2NvbW1hbmQ7CiAJCX0KLQkJZ290byBxYzI0X2hvc3RfYnVzeTsKKwkJZ290byBxYzI0X3RhcmdldF9idXN5OwogCX0KIAogCXNwaW5fdW5sb2NrX2lycShoYS0+aG9zdC0+aG9zdF9sb2NrKTsKQEAgLTQ5NSwxMCArNDkyLDExIEBACiAKIHFjMjRfaG9zdF9idXN5X2xvY2s6CiAJc3Bpbl9sb2NrX2lycShoYS0+aG9zdC0+aG9zdF9sb2NrKTsKLQotcWMyNF9ob3N0X2J1c3k6CiAJcmV0dXJuIFNDU0lfTUxRVUVVRV9IT1NUX0JVU1k7CiAKK3FjMjRfdGFyZ2V0X2J1c3k6CisJcmV0dXJuIFNDU0lfTUxRVUVVRV9UQVJHRVRfQlVTWTsKKwogcWMyNF9mYWlsX2NvbW1hbmQ6CiAJZG9uZShjbWQpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcWxhNHh4eC9xbDRfaXNyLmMgYi9kcml2ZXJzL3Njc2kvcWxhNHh4eC9xbDRfaXNyLmMKaW5kZXggYTkxYTU3Yy4uNzk5MTIwZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3FsYTR4eHgvcWw0X2lzci5jCisrKyBiL2RyaXZlcnMvc2NzaS9xbGE0eHh4L3FsNF9pc3IuYwpAQCAtMTM5LDcgKzEzOSw3IEBACiAJCQkgICAgICBoYS0+aG9zdF9ubywgY21kLT5kZXZpY2UtPmNoYW5uZWwsCiAJCQkgICAgICBjbWQtPmRldmljZS0+aWQsIGNtZC0+ZGV2aWNlLT5sdW4pKTsKIAotCQljbWQtPnJlc3VsdCA9IERJRF9CVVNfQlVTWSA8PCAxNjsKKwkJY21kLT5yZXN1bHQgPSBESURfVFJBTlNQT1JUX0RJU1JVUFRFRCA8PCAxNjsKIAogCQkvKgogCQkgKiBNYXJrIGRldmljZSBtaXNzaW5nIHNvIHRoYXQgd2Ugd29uJ3QgY29udGludWUgdG8gc2VuZApAQCAtMjQzLDcgKzI0Myw3IEBACiAJCWlmIChhdG9taWNfcmVhZCgmZGRiX2VudHJ5LT5zdGF0ZSkgPT0gRERCX1NUQVRFX09OTElORSkKIAkJCXFsYTR4eHhfbWFya19kZXZpY2VfbWlzc2luZyhoYSwgZGRiX2VudHJ5KTsKIAotCQljbWQtPnJlc3VsdCA9IERJRF9CVVNfQlVTWSA8PCAxNjsKKwkJY21kLT5yZXN1bHQgPSBESURfVFJBTlNQT1JUX0RJU1JVUFRFRCA8PCAxNjsKIAkJYnJlYWs7CiAKIAljYXNlIFNDU19RVUVVRV9GVUxMOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3FsYTR4eHgvcWw0X29zLmMgYi9kcml2ZXJzL3Njc2kvcWxhNHh4eC9xbDRfb3MuYwppbmRleCBkZTgyNzlhLi5kYjdlYTNiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvcWxhNHh4eC9xbDRfb3MuYworKysgYi9kcml2ZXJzL3Njc2kvcWxhNHh4eC9xbDRfb3MuYwpAQCAtMzUzLDcgKzM1Myw3IEBACiAJCSAgICAgIGhhLT5ob3N0X25vLCBkZGJfZW50cnktPmJ1cywgZGRiX2VudHJ5LT50YXJnZXQsCiAJCSAgICAgIGRkYl9lbnRyeS0+ZndfZGRiX2luZGV4KSk7CiAJaXNjc2lfYmxvY2tfc2Vzc2lvbihkZGJfZW50cnktPnNlc3MpOwotCWlzY3NpX2Nvbm5fZXJyb3IoZGRiX2VudHJ5LT5jb25uLCBJU0NTSV9FUlJfQ09OTl9GQUlMRUQpOworCWlzY3NpX2Nvbm5fZXJyb3JfZXZlbnQoZGRiX2VudHJ5LT5jb25uLCBJU0NTSV9FUlJfQ09OTl9GQUlMRUQpOwogfQogCiBzdGF0aWMgc3RydWN0IHNyYiogcWxhNHh4eF9nZXRfbmV3X3NyYihzdHJ1Y3Qgc2NzaV9xbGFfaG9zdCAqaGEsCkBAIC00MzksNyArNDM5LDcgQEAKIAkJCWNtZC0+cmVzdWx0ID0gRElEX05PX0NPTk5FQ1QgPDwgMTY7CiAJCQlnb3RvIHFjX2ZhaWxfY29tbWFuZDsKIAkJfQotCQlnb3RvIHFjX2hvc3RfYnVzeTsKKwkJcmV0dXJuIFNDU0lfTUxRVUVVRV9UQVJHRVRfQlVTWTsKIAl9CiAKIAlpZiAodGVzdF9iaXQoRFBDX1JFU0VUX0hBX0lOVFIsICZoYS0+ZHBjX2ZsYWdzKSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zY3NpLmMgYi9kcml2ZXJzL3Njc2kvc2NzaS5jCmluZGV4IDJhYzNjYjIuLmY4Yjc5ZDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zY3NpLmMKKysrIGIvZHJpdmVycy9zY3NpL3Njc2kuYwpAQCAtNzU0LDggKzc1NCwxMiBAQAogCX0KIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKGhvc3QtPmhvc3RfbG9jaywgZmxhZ3MpOwogCWlmIChydG4pIHsKLQkJc2NzaV9xdWV1ZV9pbnNlcnQoY21kLCAocnRuID09IFNDU0lfTUxRVUVVRV9ERVZJQ0VfQlVTWSkgPwotCQkJCQkJcnRuIDogU0NTSV9NTFFVRVVFX0hPU1RfQlVTWSk7CisJCWlmIChydG4gIT0gU0NTSV9NTFFVRVVFX0RFVklDRV9CVVNZICYmCisJCSAgICBydG4gIT0gU0NTSV9NTFFVRVVFX1RBUkdFVF9CVVNZKQorCQkJcnRuID0gU0NTSV9NTFFVRVVFX0hPU1RfQlVTWTsKKworCQlzY3NpX3F1ZXVlX2luc2VydChjbWQsIHJ0bik7CisKIAkJU0NTSV9MT0dfTUxRVUVVRSgzLAogCQkgICAgcHJpbnRrKCJxdWV1ZWNvbW1hbmQgOiByZXF1ZXN0IHJlamVjdGVkXG4iKSk7CiAJfQpAQCAtODAwLDYgKzgwNCw3IEBACiB2b2lkIHNjc2lfZmluaXNoX2NvbW1hbmQoc3RydWN0IHNjc2lfY21uZCAqY21kKQogewogCXN0cnVjdCBzY3NpX2RldmljZSAqc2RldiA9IGNtZC0+ZGV2aWNlOworCXN0cnVjdCBzY3NpX3RhcmdldCAqc3RhcmdldCA9IHNjc2lfdGFyZ2V0KHNkZXYpOwogCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0ID0gc2Rldi0+aG9zdDsKIAlzdHJ1Y3Qgc2NzaV9kcml2ZXIgKmRydjsKIAl1bnNpZ25lZCBpbnQgZ29vZF9ieXRlczsKQEAgLTgxNSw2ICs4MjAsNyBAQAogCSAqIFhYWChoY2gpOiBXaGF0IGFib3V0IGxvY2tpbmc/CiAgICAgICAgICAqLwogICAgICAgICBzaG9zdC0+aG9zdF9ibG9ja2VkID0gMDsKKwlzdGFyZ2V0LT50YXJnZXRfYmxvY2tlZCA9IDA7CiAgICAgICAgIHNkZXYtPmRldmljZV9ibG9ja2VkID0gMDsKIAogCS8qCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2NzaV9lcnJvci5jIGIvZHJpdmVycy9zY3NpL3Njc2lfZXJyb3IuYwppbmRleCBmZWNlZmEwLi45NGVkMjYyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2NzaV9lcnJvci5jCisrKyBiL2RyaXZlcnMvc2NzaS9zY3NpX2Vycm9yLmMKQEAgLTEwNjUsMTAgKzEwNjUsMTAgQEAKIAkJCQlzdHJ1Y3QgbGlzdF9oZWFkICpkb25lX3EpCiB7CiAJc3RydWN0IHNjc2lfY21uZCAqc2NtZCwgKnRndHJfc2NtZCwgKm5leHQ7Ci0JdW5zaWduZWQgaW50IGlkOworCXVuc2lnbmVkIGludCBpZCA9IDA7CiAJaW50IHJ0bjsKIAotCWZvciAoaWQgPSAwOyBpZCA8PSBzaG9zdC0+bWF4X2lkOyBpZCsrKSB7CisJZG8gewogCQl0Z3RyX3NjbWQgPSBOVUxMOwogCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHNjbWQsIHdvcmtfcSwgZWhfZW50cnkpIHsKIAkJCWlmIChpZCA9PSBzY21kX2lkKHNjbWQpKSB7CkBAIC0xMDc2LDggKzEwNzYsMTggQEAKIAkJCQlicmVhazsKIAkJCX0KIAkJfQorCQlpZiAoIXRndHJfc2NtZCkgeworCQkJLyogbm90IG9uZSBleGFjdGx5IGVxdWFsOyBmaW5kIHRoZSBuZXh0IGhpZ2hlc3QgKi8KKwkJCWxpc3RfZm9yX2VhY2hfZW50cnkoc2NtZCwgd29ya19xLCBlaF9lbnRyeSkgeworCQkJCWlmIChzY21kX2lkKHNjbWQpID4gaWQgJiYKKwkJCQkgICAgKCF0Z3RyX3NjbWQgfHwKKwkJCQkgICAgIHNjbWRfaWQodGd0cl9zY21kKSA+IHNjbWRfaWQoc2NtZCkpKQorCQkJCQkJdGd0cl9zY21kID0gc2NtZDsKKwkJCX0KKwkJfQogCQlpZiAoIXRndHJfc2NtZCkKLQkJCWNvbnRpbnVlOworCQkJLyogbm8gbW9yZSBjb21tYW5kcywgdGhhdCdzIGl0ICovCisJCQlicmVhazsKIAogCQlTQ1NJX0xPR19FUlJPUl9SRUNPVkVSWSgzLCBwcmludGsoIiVzOiBTZW5kaW5nIHRhcmdldCByZXNldCAiCiAJCQkJCQkgICJ0byB0YXJnZXQgJWRcbiIsCkBAIC0xMDk2LDcgKzExMDYsOCBAQAogCQkJCQkJCSAgIiBmYWlsZWQgdGFyZ2V0OiAiCiAJCQkJCQkJICAiJWRcbiIsCiAJCQkJCQkJICBjdXJyZW50LT5jb21tLCBpZCkpOwotCX0KKwkJaWQrKzsKKwl9IHdoaWxlKGlkICE9IDApOwogCiAJcmV0dXJuIGxpc3RfZW1wdHkod29ya19xKTsKIH0KQEAgLTEyMTksNiArMTIzMCw0MCBAQAogfQogCiAvKioKKyAqIHNjc2lfbm9yZXRyeV9jbWQgLSBkZXRlcm1pbnRlIGlmIGNvbW1hbmQgc2hvdWxkIGJlIGZhaWxlZCBmYXN0CisgKiBAc2NtZDoJU0NTSSBjbWQgdG8gZXhhbWluZS4KKyAqLworaW50IHNjc2lfbm9yZXRyeV9jbWQoc3RydWN0IHNjc2lfY21uZCAqc2NtZCkKK3sKKwlzd2l0Y2ggKGhvc3RfYnl0ZShzY21kLT5yZXN1bHQpKSB7CisJY2FzZSBESURfT0s6CisJCWJyZWFrOworCWNhc2UgRElEX0JVU19CVVNZOgorCQlyZXR1cm4gYmxrX2ZhaWxmYXN0X3RyYW5zcG9ydChzY21kLT5yZXF1ZXN0KTsKKwljYXNlIERJRF9QQVJJVFk6CisJCXJldHVybiBibGtfZmFpbGZhc3RfZGV2KHNjbWQtPnJlcXVlc3QpOworCWNhc2UgRElEX0VSUk9SOgorCQlpZiAobXNnX2J5dGUoc2NtZC0+cmVzdWx0KSA9PSBDT01NQU5EX0NPTVBMRVRFICYmCisJCSAgICBzdGF0dXNfYnl0ZShzY21kLT5yZXN1bHQpID09IFJFU0VSVkFUSU9OX0NPTkZMSUNUKQorCQkJcmV0dXJuIDA7CisJCS8qIGZhbGwgdGhyb3VnaCAqLworCWNhc2UgRElEX1NPRlRfRVJST1I6CisJCXJldHVybiBibGtfZmFpbGZhc3RfZHJpdmVyKHNjbWQtPnJlcXVlc3QpOworCX0KKworCXN3aXRjaCAoc3RhdHVzX2J5dGUoc2NtZC0+cmVzdWx0KSkgeworCWNhc2UgQ0hFQ0tfQ09ORElUSU9OOgorCQkvKgorCQkgKiBhc3N1bWUgY2FsbGVyIGhhcyBjaGVja2VkIHNlbnNlIGFuZCBkZXRlcm1pbnRlZAorCQkgKiB0aGUgY2hlY2sgY29uZGl0aW9uIHdhcyByZXRyeWFibGUuCisJCSAqLworCQlyZXR1cm4gYmxrX2ZhaWxmYXN0X2RldihzY21kLT5yZXF1ZXN0KTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoqCiAgKiBzY3NpX2RlY2lkZV9kaXNwb3NpdGlvbiAtIERpc3Bvc2l0aW9uIGEgY21kIG9uIHJldHVybiBmcm9tIExMRC4KICAqIEBzY21kOglTQ1NJIGNtZCB0byBleGFtaW5lLgogICoKQEAgLTEyOTAsNyArMTMzNSwyMCBAQAogCiAJY2FzZSBESURfUkVRVUVVRToKIAkJcmV0dXJuIEFERF9UT19NTFFVRVVFOwotCisJY2FzZSBESURfVFJBTlNQT1JUX0RJU1JVUFRFRDoKKwkJLyoKKwkJICogTExEL3RyYW5zcG9ydCB3YXMgZGlzcnVwdGVkIGR1cmluZyBwcm9jZXNzaW5nIG9mIHRoZSBJTy4KKwkJICogVGhlIHRyYW5zcG9ydCBjbGFzcyBpcyBub3cgYmxvY2tlZC9ibG9ja2luZywKKwkJICogYW5kIHRoZSB0cmFuc3BvcnQgd2lsbCBkZWNpZGUgd2hhdCB0byBkbyB3aXRoIHRoZSBJTworCQkgKiBiYXNlZCBvbiBpdHMgdGltZXJzIGFuZCByZWNvdmVyeSBjYXBhYmxpbGl0aWVzLgorCQkgKi8KKwkJcmV0dXJuIEFERF9UT19NTFFVRVVFOworCWNhc2UgRElEX1RSQU5TUE9SVF9GQUlMRkFTVDoKKwkJLyoKKwkJICogVGhlIHRyYW5zcG9ydCBkZWNpZGVkIHRvIGZhaWxmYXN0IHRoZSBJTyAobW9zdCBsaWtlbHkKKwkJICogdGhlIGZhc3QgaW8gZmFpbCB0bW8gZmlyZWQpLCBzbyBzZW5kIElPIGRpcmVjdGx5IHVwd2FyZHMuCisJCSAqLworCQlyZXR1cm4gU1VDQ0VTUzsKIAljYXNlIERJRF9FUlJPUjoKIAkJaWYgKG1zZ19ieXRlKHNjbWQtPnJlc3VsdCkgPT0gQ09NTUFORF9DT01QTEVURSAmJgogCQkgICAgc3RhdHVzX2J5dGUoc2NtZC0+cmVzdWx0KSA9PSBSRVNFUlZBVElPTl9DT05GTElDVCkKQEAgLTEzODMsNyArMTQ0MSw3IEBACiAJICogZXZlbiBpZiB0aGUgcmVxdWVzdCBpcyBtYXJrZWQgZmFzdCBmYWlsLCB3ZSBzdGlsbCByZXF1ZXVlCiAJICogZm9yIHF1ZXVlIGNvbmdlc3Rpb24gY29uZGl0aW9ucyAoUVVFVUVfRlVMTCBvciBCVVNZKSAqLwogCWlmICgoKytzY21kLT5yZXRyaWVzKSA8PSBzY21kLT5hbGxvd2VkCi0JICAgICYmICFibGtfbm9yZXRyeV9yZXF1ZXN0KHNjbWQtPnJlcXVlc3QpKSB7CisJICAgICYmICFzY3NpX25vcmV0cnlfY21kKHNjbWQpKSB7CiAJCXJldHVybiBORUVEU19SRVRSWTsKIAl9IGVsc2UgewogCQkvKgpAQCAtMTUwOCw3ICsxNTY2LDcgQEAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoc2NtZCwgbmV4dCwgZG9uZV9xLCBlaF9lbnRyeSkgewogCQlsaXN0X2RlbF9pbml0KCZzY21kLT5laF9lbnRyeSk7CiAJCWlmIChzY3NpX2RldmljZV9vbmxpbmUoc2NtZC0+ZGV2aWNlKSAmJgotCQkgICAgIWJsa19ub3JldHJ5X3JlcXVlc3Qoc2NtZC0+cmVxdWVzdCkgJiYKKwkJICAgICFzY3NpX25vcmV0cnlfY21kKHNjbWQpICYmCiAJCSAgICAoKytzY21kLT5yZXRyaWVzIDw9IHNjbWQtPmFsbG93ZWQpKSB7CiAJCQlTQ1NJX0xPR19FUlJPUl9SRUNPVkVSWSgzLCBwcmludGsoIiVzOiBmbHVzaCIKIAkJCQkJCQkgICIgcmV0cnkgY21kOiAlcFxuIiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zY3NpX2xpYi5jIGIvZHJpdmVycy9zY3NpL3Njc2lfbGliLmMKaW5kZXggOThlZTU1Yy4uZTVhOTUyNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3Njc2lfbGliLmMKKysrIGIvZHJpdmVycy9zY3NpL3Njc2lfbGliLmMKQEAgLTExNCw2ICsxMTQsNyBAQAogewogCXN0cnVjdCBTY3NpX0hvc3QgKmhvc3QgPSBjbWQtPmRldmljZS0+aG9zdDsKIAlzdHJ1Y3Qgc2NzaV9kZXZpY2UgKmRldmljZSA9IGNtZC0+ZGV2aWNlOworCXN0cnVjdCBzY3NpX3RhcmdldCAqc3RhcmdldCA9IHNjc2lfdGFyZ2V0KGRldmljZSk7CiAJc3RydWN0IHJlcXVlc3RfcXVldWUgKnEgPSBkZXZpY2UtPnJlcXVlc3RfcXVldWU7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIApAQCAtMTMzLDEwICsxMzQsMTcgQEAKIAkgKiBpZiBhIGNvbW1hbmQgaXMgcmVxdWV1ZWQgd2l0aCBubyBvdGhlciBjb21tYW5kcyBvdXRzdGFuZGluZwogCSAqIGVpdGhlciBmb3IgdGhlIGRldmljZSBvciBmb3IgdGhlIGhvc3QuCiAJICovCi0JaWYgKHJlYXNvbiA9PSBTQ1NJX01MUVVFVUVfSE9TVF9CVVNZKQorCXN3aXRjaCAocmVhc29uKSB7CisJY2FzZSBTQ1NJX01MUVVFVUVfSE9TVF9CVVNZOgogCQlob3N0LT5ob3N0X2Jsb2NrZWQgPSBob3N0LT5tYXhfaG9zdF9ibG9ja2VkOwotCWVsc2UgaWYgKHJlYXNvbiA9PSBTQ1NJX01MUVVFVUVfREVWSUNFX0JVU1kpCisJCWJyZWFrOworCWNhc2UgU0NTSV9NTFFVRVVFX0RFVklDRV9CVVNZOgogCQlkZXZpY2UtPmRldmljZV9ibG9ja2VkID0gZGV2aWNlLT5tYXhfZGV2aWNlX2Jsb2NrZWQ7CisJCWJyZWFrOworCWNhc2UgU0NTSV9NTFFVRVVFX1RBUkdFVF9CVVNZOgorCQlzdGFyZ2V0LT50YXJnZXRfYmxvY2tlZCA9IHN0YXJnZXQtPm1heF90YXJnZXRfYmxvY2tlZDsKKwkJYnJlYWs7CisJfQogCiAJLyoKIAkgKiBEZWNyZW1lbnQgdGhlIGNvdW50ZXJzLCBzaW5jZSB0aGVzZSBjb21tYW5kcyBhcmUgbm8gbG9uZ2VyCkBAIC00NjAsMTAgKzQ2OCwxMiBAQAogdm9pZCBzY3NpX2RldmljZV91bmJ1c3koc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2KQogewogCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0ID0gc2Rldi0+aG9zdDsKKwlzdHJ1Y3Qgc2NzaV90YXJnZXQgKnN0YXJnZXQgPSBzY3NpX3RhcmdldChzZGV2KTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoc2hvc3QtPmhvc3RfbG9jaywgZmxhZ3MpOwogCXNob3N0LT5ob3N0X2J1c3ktLTsKKwlzdGFyZ2V0LT50YXJnZXRfYnVzeS0tOwogCWlmICh1bmxpa2VseShzY3NpX2hvc3RfaW5fcmVjb3Zlcnkoc2hvc3QpICYmCiAJCSAgICAgKHNob3N0LT5ob3N0X2ZhaWxlZCB8fCBzaG9zdC0+aG9zdF9laF9zY2hlZHVsZWQpKSkKIAkJc2NzaV9laF93YWtldXAoc2hvc3QpOwpAQCAtNTE5LDYgKzUyOSwxMyBAQAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoc2hvc3QtPmhvc3RfbG9jaywgZmxhZ3MpOwogfQogCitzdGF0aWMgaW5saW5lIGludCBzY3NpX3RhcmdldF9pc19idXN5KHN0cnVjdCBzY3NpX3RhcmdldCAqc3RhcmdldCkKK3sKKwlyZXR1cm4gKChzdGFyZ2V0LT5jYW5fcXVldWUgPiAwICYmCisJCSBzdGFyZ2V0LT50YXJnZXRfYnVzeSA+PSBzdGFyZ2V0LT5jYW5fcXVldWUpIHx8CisJCSBzdGFyZ2V0LT50YXJnZXRfYmxvY2tlZCk7Cit9CisKIC8qCiAgKiBGdW5jdGlvbjoJc2NzaV9ydW5fcXVldWUoKQogICoKQEAgLTUzMyw3ICs1NTAsNyBAQAogICovCiBzdGF0aWMgdm9pZCBzY3NpX3J1bl9xdWV1ZShzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSkKIHsKLQlzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYgPSBxLT5xdWV1ZWRhdGE7CisJc3RydWN0IHNjc2lfZGV2aWNlICpzdGFydmVkX2hlYWQgPSBOVUxMLCAqc2RldiA9IHEtPnF1ZXVlZGF0YTsKIAlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCA9IHNkZXYtPmhvc3Q7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIApAQCAtNTYwLDYgKzU3NywyMSBAQAogCQkgKi8KIAkJc2RldiA9IGxpc3RfZW50cnkoc2hvc3QtPnN0YXJ2ZWRfbGlzdC5uZXh0LAogCQkJCQkgIHN0cnVjdCBzY3NpX2RldmljZSwgc3RhcnZlZF9lbnRyeSk7CisJCS8qCisJCSAqIFRoZSAqcXVldWVfcmVhZHkgZnVuY3Rpb25zIGNhbiBhZGQgYSBkZXZpY2UgYmFjayBvbnRvIHRoZQorCQkgKiBzdGFydmVkIGxpc3QncyB0YWlsLCBzbyB3ZSBtdXN0IGNoZWNrIGZvciBhIGluZmluaXRlIGxvb3AuCisJCSAqLworCQlpZiAoc2RldiA9PSBzdGFydmVkX2hlYWQpCisJCQlicmVhazsKKwkJaWYgKCFzdGFydmVkX2hlYWQpCisJCQlzdGFydmVkX2hlYWQgPSBzZGV2OworCisJCWlmIChzY3NpX3RhcmdldF9pc19idXN5KHNjc2lfdGFyZ2V0KHNkZXYpKSkgeworCQkJbGlzdF9tb3ZlX3RhaWwoJnNkZXYtPnN0YXJ2ZWRfZW50cnksCisJCQkJICAgICAgICZzaG9zdC0+c3RhcnZlZF9saXN0KTsKKwkJCWNvbnRpbnVlOworCQl9CisKIAkJbGlzdF9kZWxfaW5pdCgmc2Rldi0+c3RhcnZlZF9lbnRyeSk7CiAJCXNwaW5fdW5sb2NrKHNob3N0LT5ob3N0X2xvY2spOwogCkBAIC01NzUsMTMgKzYwNyw2IEBACiAJCXNwaW5fdW5sb2NrKHNkZXYtPnJlcXVlc3RfcXVldWUtPnF1ZXVlX2xvY2spOwogCiAJCXNwaW5fbG9jayhzaG9zdC0+aG9zdF9sb2NrKTsKLQkJaWYgKHVubGlrZWx5KCFsaXN0X2VtcHR5KCZzZGV2LT5zdGFydmVkX2VudHJ5KSkpCi0JCQkvKgotCQkJICogc2RldiBsb3N0IGEgcmFjZSwgYW5kIHdhcyBwdXQgYmFjayBvbiB0aGUKLQkJCSAqIHN0YXJ2ZWQgbGlzdC4gVGhpcyBpcyB1bmxpa2VseSBidXQgd2l0aG91dCB0aGlzCi0JCQkgKiBpbiB0aGVvcnkgd2UgY291bGQgbG9vcCBmb3JldmVyLgotCQkJICovCi0JCQlicmVhazsKIAl9CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShzaG9zdC0+aG9zdF9sb2NrLCBmbGFncyk7CiAKQEAgLTY4MSw3ICs3MDYsNyBAQAogCQkJbGVmdG92ZXIgPSByZXEtPmRhdGFfbGVuOwogCiAJCS8qIGtpbGwgcmVtYWluZGVyIGlmIG5vIHJldHJ5cyAqLwotCQlpZiAoZXJyb3IgJiYgYmxrX25vcmV0cnlfcmVxdWVzdChyZXEpKQorCQlpZiAoZXJyb3IgJiYgc2NzaV9ub3JldHJ5X2NtZChjbWQpKQogCQkJYmxrX2VuZF9yZXF1ZXN0KHJlcSwgZXJyb3IsIGxlZnRvdmVyKTsKIAkJZWxzZSB7CiAJCQlpZiAocmVxdWV1ZSkgewpAQCAtMTM0NCw2ICsxMzY5LDUyIEBACiAJcmV0dXJuIDE7CiB9CiAKKworLyoKKyAqIHNjc2lfdGFyZ2V0X3F1ZXVlX3JlYWR5OiBjaGVja3MgaWYgdGhlcmUgd2UgY2FuIHNlbmQgY29tbWFuZHMgdG8gdGFyZ2V0CisgKiBAc2Rldjogc2NzaSBkZXZpY2Ugb24gc3RhcmdldCB0byBjaGVjay4KKyAqCisgKiBDYWxsZWQgd2l0aCB0aGUgaG9zdCBsb2NrIGhlbGQuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IHNjc2lfdGFyZ2V0X3F1ZXVlX3JlYWR5KHN0cnVjdCBTY3NpX0hvc3QgKnNob3N0LAorCQkJCQkgICBzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYpCit7CisJc3RydWN0IHNjc2lfdGFyZ2V0ICpzdGFyZ2V0ID0gc2NzaV90YXJnZXQoc2Rldik7CisKKwlpZiAoc3RhcmdldC0+c2luZ2xlX2x1bikgeworCQlpZiAoc3RhcmdldC0+c3RhcmdldF9zZGV2X3VzZXIgJiYKKwkJICAgIHN0YXJnZXQtPnN0YXJnZXRfc2Rldl91c2VyICE9IHNkZXYpCisJCQlyZXR1cm4gMDsKKwkJc3RhcmdldC0+c3RhcmdldF9zZGV2X3VzZXIgPSBzZGV2OworCX0KKworCWlmIChzdGFyZ2V0LT50YXJnZXRfYnVzeSA9PSAwICYmIHN0YXJnZXQtPnRhcmdldF9ibG9ja2VkKSB7CisJCS8qCisJCSAqIHVuYmxvY2sgYWZ0ZXIgdGFyZ2V0X2Jsb2NrZWQgaXRlcmF0ZXMgdG8gemVybworCQkgKi8KKwkJaWYgKC0tc3RhcmdldC0+dGFyZ2V0X2Jsb2NrZWQgPT0gMCkgeworCQkJU0NTSV9MT0dfTUxRVUVVRSgzLCBzdGFyZ2V0X3ByaW50ayhLRVJOX0lORk8sIHN0YXJnZXQsCisJCQkJCSAidW5ibG9ja2luZyB0YXJnZXQgYXQgemVybyBkZXB0aFxuIikpOworCQl9IGVsc2UgeworCQkJYmxrX3BsdWdfZGV2aWNlKHNkZXYtPnJlcXVlc3RfcXVldWUpOworCQkJcmV0dXJuIDA7CisJCX0KKwl9CisKKwlpZiAoc2NzaV90YXJnZXRfaXNfYnVzeShzdGFyZ2V0KSkgeworCQlpZiAobGlzdF9lbXB0eSgmc2Rldi0+c3RhcnZlZF9lbnRyeSkpIHsKKwkJCWxpc3RfYWRkX3RhaWwoJnNkZXYtPnN0YXJ2ZWRfZW50cnksCisJCQkJICAgICAgJnNob3N0LT5zdGFydmVkX2xpc3QpOworCQkJcmV0dXJuIDA7CisJCX0KKwl9CisKKwkvKiBXZSdyZSBPSyB0byBwcm9jZXNzIHRoZSBjb21tYW5kLCBzbyB3ZSBjYW4ndCBiZSBzdGFydmVkICovCisJaWYgKCFsaXN0X2VtcHR5KCZzZGV2LT5zdGFydmVkX2VudHJ5KSkKKwkJbGlzdF9kZWxfaW5pdCgmc2Rldi0+c3RhcnZlZF9lbnRyeSk7CisJcmV0dXJuIDE7Cit9CisKIC8qCiAgKiBzY3NpX2hvc3RfcXVldWVfcmVhZHk6IGlmIHdlIGNhbiBzZW5kIHJlcXVlc3RzIHRvIHNob3N0LCByZXR1cm4gMSBlbHNlCiAgKiByZXR1cm4gMC4gV2UgbXVzdCBlbmQgdXAgcnVubmluZyB0aGUgcXVldWUgYWdhaW4gd2hlbmV2ZXIgMCBpcwpAQCAtMTM5MCw2ICsxNDYxLDcgQEAKIHsKIAlzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQgPSByZXEtPnNwZWNpYWw7CiAJc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2ID0gY21kLT5kZXZpY2U7CisJc3RydWN0IHNjc2lfdGFyZ2V0ICpzdGFyZ2V0ID0gc2NzaV90YXJnZXQoc2Rldik7CiAJc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QgPSBzZGV2LT5ob3N0OwogCiAJYmxrZGV2X2RlcXVldWVfcmVxdWVzdChyZXEpOwpAQCAtMTQxMyw2ICsxNDg1LDcgQEAKIAlzcGluX3VubG9jayhzZGV2LT5yZXF1ZXN0X3F1ZXVlLT5xdWV1ZV9sb2NrKTsKIAlzcGluX2xvY2soc2hvc3QtPmhvc3RfbG9jayk7CiAJc2hvc3QtPmhvc3RfYnVzeSsrOworCXN0YXJnZXQtPnRhcmdldF9idXN5Kys7CiAJc3Bpbl91bmxvY2soc2hvc3QtPmhvc3RfbG9jayk7CiAJc3Bpbl9sb2NrKHNkZXYtPnJlcXVlc3RfcXVldWUtPnF1ZXVlX2xvY2spOwogCkBAIC0xNTUwLDE0ICsxNjIzLDEzIEBACiAJCQlnb3RvIG5vdF9yZWFkeTsKIAkJfQogCisJCWlmICghc2NzaV90YXJnZXRfcXVldWVfcmVhZHkoc2hvc3QsIHNkZXYpKQorCQkJZ290byBub3RfcmVhZHk7CisKIAkJaWYgKCFzY3NpX2hvc3RfcXVldWVfcmVhZHkocSwgc2hvc3QsIHNkZXYpKQogCQkJZ290byBub3RfcmVhZHk7Ci0JCWlmIChzY3NpX3RhcmdldChzZGV2KS0+c2luZ2xlX2x1bikgewotCQkJaWYgKHNjc2lfdGFyZ2V0KHNkZXYpLT5zdGFyZ2V0X3NkZXZfdXNlciAmJgotCQkJICAgIHNjc2lfdGFyZ2V0KHNkZXYpLT5zdGFyZ2V0X3NkZXZfdXNlciAhPSBzZGV2KQotCQkJCWdvdG8gbm90X3JlYWR5OwotCQkJc2NzaV90YXJnZXQoc2RldiktPnN0YXJnZXRfc2Rldl91c2VyID0gc2RldjsKLQkJfQorCisJCXNjc2lfdGFyZ2V0KHNkZXYpLT50YXJnZXRfYnVzeSsrOwogCQlzaG9zdC0+aG9zdF9idXN5Kys7CiAKIAkJLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zY3NpX3ByaXYuaCBiL2RyaXZlcnMvc2NzaS9zY3NpX3ByaXYuaAppbmRleCA2Y2RkZDVkLi5lMTg1MDkwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2NzaV9wcml2LmgKKysrIGIvZHJpdmVycy9zY3NpL3Njc2lfcHJpdi5oCkBAIC01OSw2ICs1OSw3IEBACiAJCQlzdHJ1Y3QgbGlzdF9oZWFkICpkb25lX3EpOwogaW50IHNjc2lfZWhfZ2V0X3NlbnNlKHN0cnVjdCBsaXN0X2hlYWQgKndvcmtfcSwKIAkJICAgICAgc3RydWN0IGxpc3RfaGVhZCAqZG9uZV9xKTsKK2ludCBzY3NpX25vcmV0cnlfY21kKHN0cnVjdCBzY3NpX2NtbmQgKnNjbWQpOwogCiAvKiBzY3NpX2xpYi5jICovCiBleHRlcm4gaW50IHNjc2lfbWF5YmVfdW5ibG9ja19ob3N0KHN0cnVjdCBzY3NpX2RldmljZSAqc2Rldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2NzaV9zY2FuLmMgYi9kcml2ZXJzL3Njc2kvc2NzaV9zY2FuLmMKaW5kZXggMzM0ODYyZS4uYjE0ZGMwMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3Njc2lfc2Nhbi5jCisrKyBiL2RyaXZlcnMvc2NzaS9zY3NpX3NjYW4uYwpAQCAtNDE5LDYgKzQxOSw3IEBACiAJZGV2LT50eXBlID0gJnNjc2lfdGFyZ2V0X3R5cGU7CiAJc3RhcmdldC0+aWQgPSBpZDsKIAlzdGFyZ2V0LT5jaGFubmVsID0gY2hhbm5lbDsKKwlzdGFyZ2V0LT5jYW5fcXVldWUgPSAwOwogCUlOSVRfTElTVF9IRUFEKCZzdGFyZ2V0LT5zaWJsaW5ncyk7CiAJSU5JVF9MSVNUX0hFQUQoJnN0YXJnZXQtPmRldmljZXMpOwogCXN0YXJnZXQtPnN0YXRlID0gU1RBUkdFVF9DUkVBVEVEOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3Njc2lfdHJhbnNwb3J0X2ZjLmMgYi9kcml2ZXJzL3Njc2kvc2NzaV90cmFuc3BvcnRfZmMuYwppbmRleCBkNWY3NjUzLi4xZTcxYWJmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2NzaV90cmFuc3BvcnRfZmMuYworKysgYi9kcml2ZXJzL3Njc2kvc2NzaV90cmFuc3BvcnRfZmMuYwpAQCAtMjEzMyw4ICsyMTMzLDcgQEAKIAlTRVRVUF9QUklWQVRFX1JQT1JUX0FUVFJJQlVURV9SRChyb2xlcyk7CiAJU0VUVVBfUFJJVkFURV9SUE9SVF9BVFRSSUJVVEVfUkQocG9ydF9zdGF0ZSk7CiAJU0VUVVBfUFJJVkFURV9SUE9SVF9BVFRSSUJVVEVfUkQoc2NzaV90YXJnZXRfaWQpOwotCWlmIChmdC0+dGVybWluYXRlX3Jwb3J0X2lvKQotCQlTRVRVUF9QUklWQVRFX1JQT1JUX0FUVFJJQlVURV9SVyhmYXN0X2lvX2ZhaWxfdG1vKTsKKwlTRVRVUF9QUklWQVRFX1JQT1JUX0FUVFJJQlVURV9SVyhmYXN0X2lvX2ZhaWxfdG1vKTsKIAogCUJVR19PTihjb3VudCA+IEZDX1JQT1JUX05VTV9BVFRSUyk7CiAKQEAgLTIzMjgsNiArMjMyNywyMiBAQAogfQogRVhQT1JUX1NZTUJPTChmY19yZW1vdmVfaG9zdCk7CiAKK3N0YXRpYyB2b2lkIGZjX3Rlcm1pbmF0ZV9ycG9ydF9pbyhzdHJ1Y3QgZmNfcnBvcnQgKnJwb3J0KQoreworCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0ID0gcnBvcnRfdG9fc2hvc3QocnBvcnQpOworCXN0cnVjdCBmY19pbnRlcm5hbCAqaSA9IHRvX2ZjX2ludGVybmFsKHNob3N0LT50cmFuc3BvcnR0KTsKKworCS8qIEludm9sdmUgdGhlIExMREQgaWYgcG9zc2libGUgdG8gdGVybWluYXRlIGFsbCBpbyBvbiB0aGUgcnBvcnQuICovCisJaWYgKGktPmYtPnRlcm1pbmF0ZV9ycG9ydF9pbykKKwkJaS0+Zi0+dGVybWluYXRlX3Jwb3J0X2lvKHJwb3J0KTsKKworCS8qCisJICogbXVzdCB1bmJsb2NrIHRvIGZsdXNoIHF1ZXVlZCBJTy4gVGhlIGNhbGxlciB3aWxsIGhhdmUgc2V0CisJICogdGhlIHBvcnRfc3RhdGUgb3IgZmxhZ3MsIHNvIHRoYXQgZmNfcmVtb3RlX3BvcnRfY2hrcmVhZHkgd2lsbAorCSAqIGZhaWwgSU8uCisJICovCisJc2NzaV90YXJnZXRfdW5ibG9jaygmcnBvcnQtPmRldik7Cit9CiAKIC8qKgogICogZmNfc3RhcmdldF9kZWxldGUgLSBjYWxsZWQgdG8gZGVsZXRlIHRoZSBzY3NpIGRlY2VuZGVudHMgb2YgYW4gcnBvcnQKQEAgLTIzNDAsMTMgKzIzNTUsOCBAQAogewogCXN0cnVjdCBmY19ycG9ydCAqcnBvcnQgPQogCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IGZjX3Jwb3J0LCBzdGd0X2RlbGV0ZV93b3JrKTsKLQlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCA9IHJwb3J0X3RvX3Nob3N0KHJwb3J0KTsKLQlzdHJ1Y3QgZmNfaW50ZXJuYWwgKmkgPSB0b19mY19pbnRlcm5hbChzaG9zdC0+dHJhbnNwb3J0dCk7CiAKLQkvKiBJbnZvbHZlIHRoZSBMTEREIGlmIHBvc3NpYmxlIHRvIHRlcm1pbmF0ZSBhbGwgaW8gb24gdGhlIHJwb3J0LiAqLwotCWlmIChpLT5mLT50ZXJtaW5hdGVfcnBvcnRfaW8pCi0JCWktPmYtPnRlcm1pbmF0ZV9ycG9ydF9pbyhycG9ydCk7Ci0KKwlmY190ZXJtaW5hdGVfcnBvcnRfaW8ocnBvcnQpOwogCXNjc2lfcmVtb3ZlX3RhcmdldCgmcnBvcnQtPmRldik7CiB9CiAKQEAgLTIzNzIsMTAgKzIzODIsNyBAQAogCWlmIChycG9ydC0+ZmxhZ3MgJiBGQ19SUE9SVF9TQ0FOX1BFTkRJTkcpCiAJCXNjc2lfZmx1c2hfd29yayhzaG9zdCk7CiAKLQkvKiBpbnZvbHZlIHRoZSBMTEREIHRvIHRlcm1pbmF0ZSBhbGwgcGVuZGluZyBpL28gKi8KLQlpZiAoaS0+Zi0+dGVybWluYXRlX3Jwb3J0X2lvKQotCQlpLT5mLT50ZXJtaW5hdGVfcnBvcnRfaW8ocnBvcnQpOwotCisJZmNfdGVybWluYXRlX3Jwb3J0X2lvKHJwb3J0KTsKIAkvKgogCSAqIENhbmNlbCBhbnkgb3V0c3RhbmRpbmcgdGltZXJzLiBUaGVzZSBzaG91bGQgcmVhbGx5IGV4aXN0CiAJICogb25seSB3aGVuIHJtbW9kJ2luZyB0aGUgTExERCBhbmQgd2UncmUgYXNraW5nIGZvcgpAQCAtMjYzOSw3ICsyNjQ2LDggQEAKIAogCQkJCXNwaW5fbG9ja19pcnFzYXZlKHNob3N0LT5ob3N0X2xvY2ssIGZsYWdzKTsKIAotCQkJCXJwb3J0LT5mbGFncyAmPSB+RkNfUlBPUlRfREVWTE9TU19QRU5ESU5HOworCQkJCXJwb3J0LT5mbGFncyAmPSB+KEZDX1JQT1JUX0ZBU1RfRkFJTF9USU1FRE9VVCB8CisJCQkJCQkgIEZDX1JQT1JUX0RFVkxPU1NfUEVORElORyk7CiAKIAkJCQkvKiBpZiB0YXJnZXQsIGluaXRpYXRlIGEgc2NhbiAqLwogCQkJCWlmIChycG9ydC0+c2NzaV90YXJnZXRfaWQgIT0gLTEpIHsKQEAgLTI3MDIsNiArMjcxMCw3IEBACiAJCQlycG9ydC0+cG9ydF9pZCA9IGlkcy0+cG9ydF9pZDsKIAkJCXJwb3J0LT5yb2xlcyA9IGlkcy0+cm9sZXM7CiAJCQlycG9ydC0+cG9ydF9zdGF0ZSA9IEZDX1BPUlRTVEFURV9PTkxJTkU7CisJCQlycG9ydC0+ZmxhZ3MgJj0gfkZDX1JQT1JUX0ZBU1RfRkFJTF9USU1FRE9VVDsKIAogCQkJaWYgKGZjaS0+Zi0+ZGRfZmNycG9ydF9zaXplKQogCQkJCW1lbXNldChycG9ydC0+ZGRfZGF0YSwgMCwKQEAgLTI3ODQsNyArMjc5Myw2IEBACiBmY19yZW1vdGVfcG9ydF9kZWxldGUoc3RydWN0IGZjX3Jwb3J0ICAqcnBvcnQpCiB7CiAJc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QgPSBycG9ydF90b19zaG9zdChycG9ydCk7Ci0Jc3RydWN0IGZjX2ludGVybmFsICppID0gdG9fZmNfaW50ZXJuYWwoc2hvc3QtPnRyYW5zcG9ydHQpOwogCWludCB0aW1lb3V0ID0gcnBvcnQtPmRldl9sb3NzX3RtbzsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCkBAIC0yODMwLDcgKzI4MzgsNyBAQAogCiAJLyogc2VlIGlmIHdlIG5lZWQgdG8ga2lsbCBpbyBmYXN0ZXIgdGhhbiB3YWl0aW5nIGZvciBkZXZpY2UgbG9zcyAqLwogCWlmICgocnBvcnQtPmZhc3RfaW9fZmFpbF90bW8gIT0gLTEpICYmCi0JICAgIChycG9ydC0+ZmFzdF9pb19mYWlsX3RtbyA8IHRpbWVvdXQpICYmIChpLT5mLT50ZXJtaW5hdGVfcnBvcnRfaW8pKQorCSAgICAocnBvcnQtPmZhc3RfaW9fZmFpbF90bW8gPCB0aW1lb3V0KSkKIAkJZmNfcXVldWVfZGV2bG9zc193b3JrKHNob3N0LCAmcnBvcnQtPmZhaWxfaW9fd29yaywKIAkJCQkJcnBvcnQtPmZhc3RfaW9fZmFpbF90bW8gKiBIWik7CiAKQEAgLTI5MDYsNyArMjkxNCw4IEBACiAJCQlmY19mbHVzaF9kZXZsb3NzKHNob3N0KTsKIAogCQlzcGluX2xvY2tfaXJxc2F2ZShzaG9zdC0+aG9zdF9sb2NrLCBmbGFncyk7Ci0JCXJwb3J0LT5mbGFncyAmPSB+RkNfUlBPUlRfREVWTE9TU19QRU5ESU5HOworCQlycG9ydC0+ZmxhZ3MgJj0gfihGQ19SUE9SVF9GQVNUX0ZBSUxfVElNRURPVVQgfAorCQkJCSAgRkNfUlBPUlRfREVWTE9TU19QRU5ESU5HKTsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShzaG9zdC0+aG9zdF9sb2NrLCBmbGFncyk7CiAKIAkJLyogZW5zdXJlIGFueSBzdGd0IGRlbGV0ZSBmdW5jdGlvbnMgYXJlIGRvbmUgKi8KQEAgLTMwMDEsNiArMzAxMCw3IEBACiAJcnBvcnQtPnN1cHBvcnRlZF9jbGFzc2VzID0gRkNfQ09TX1VOU1BFQ0lGSUVEOwogCXJwb3J0LT5yb2xlcyA9IEZDX1BPUlRfUk9MRV9VTktOT1dOOwogCXJwb3J0LT5wb3J0X3N0YXRlID0gRkNfUE9SVFNUQVRFX05PVFBSRVNFTlQ7CisJcnBvcnQtPmZsYWdzICY9IH5GQ19SUE9SVF9GQVNUX0ZBSUxfVElNRURPVVQ7CiAKIAkvKiByZW1vdmUgdGhlIGlkZW50aWZpZXJzIHRoYXQgYXJlbid0IHVzZWQgaW4gdGhlIGNvbnNpc3RpbmcgYmluZGluZyAqLwogCXN3aXRjaCAoZmNfaG9zdC0+dGd0aWRfYmluZF90eXBlKSB7CkBAIC0zMDQzLDEzICszMDUzLDEyIEBACiB7CiAJc3RydWN0IGZjX3Jwb3J0ICpycG9ydCA9CiAJCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgZmNfcnBvcnQsIGZhaWxfaW9fd29yay53b3JrKTsKLQlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCA9IHJwb3J0X3RvX3Nob3N0KHJwb3J0KTsKLQlzdHJ1Y3QgZmNfaW50ZXJuYWwgKmkgPSB0b19mY19pbnRlcm5hbChzaG9zdC0+dHJhbnNwb3J0dCk7CiAKIAlpZiAocnBvcnQtPnBvcnRfc3RhdGUgIT0gRkNfUE9SVFNUQVRFX0JMT0NLRUQpCiAJCXJldHVybjsKIAotCWktPmYtPnRlcm1pbmF0ZV9ycG9ydF9pbyhycG9ydCk7CisJcnBvcnQtPmZsYWdzIHw9IEZDX1JQT1JUX0ZBU1RfRkFJTF9USU1FRE9VVDsKKwlmY190ZXJtaW5hdGVfcnBvcnRfaW8ocnBvcnQpOwogfQogCiAvKioKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zY3NpX3RyYW5zcG9ydF9pc2NzaS5jIGIvZHJpdmVycy9zY3NpL3Njc2lfdHJhbnNwb3J0X2lzY3NpLmMKaW5kZXggMGNlNWY3Yy4uNGE4MDNlYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3Njc2lfdHJhbnNwb3J0X2lzY3NpLmMKKysrIGIvZHJpdmVycy9zY3NpL3Njc2lfdHJhbnNwb3J0X2lzY3NpLmMKQEAgLTEzOCw3ICsxMzgsNyBAQAogc2hvd19lcF9oYW5kbGUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQogewogCXN0cnVjdCBpc2NzaV9lbmRwb2ludCAqZXAgPSBpc2NzaV9kZXZfdG9fZW5kcG9pbnQoZGV2KTsKLQlyZXR1cm4gc3ByaW50ZihidWYsICIldVxuIiwgZXAtPmlkKTsKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlbGx1XG4iLCAodW5zaWduZWQgbG9uZyBsb25nKSBlcC0+aWQpOwogfQogc3RhdGljIElTQ1NJX0FUVFIoZXAsIGhhbmRsZSwgU19JUlVHTywgc2hvd19lcF9oYW5kbGUsIE5VTEwpOwogCkBAIC0xNTYsNyArMTU2LDcgQEAKIHN0YXRpYyBpbnQgaXNjc2lfbWF0Y2hfZXBpZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEpCiB7CiAJc3RydWN0IGlzY3NpX2VuZHBvaW50ICplcCA9IGlzY3NpX2Rldl90b19lbmRwb2ludChkZXYpOwotCXVuc2lnbmVkIGludCAqZXBpZCA9ICh1bnNpZ25lZCBpbnQgKikgZGF0YTsKKwl1aW50NjRfdCAqZXBpZCA9ICh1aW50NjRfdCAqKSBkYXRhOwogCiAJcmV0dXJuICplcGlkID09IGVwLT5pZDsKIH0KQEAgLTE2Niw3ICsxNjYsNyBAQAogewogCXN0cnVjdCBkZXZpY2UgKmRldjsKIAlzdHJ1Y3QgaXNjc2lfZW5kcG9pbnQgKmVwOwotCXVuc2lnbmVkIGludCBpZDsKKwl1aW50NjRfdCBpZDsKIAlpbnQgZXJyOwogCiAJZm9yIChpZCA9IDE7IGlkIDwgSVNDU0lfTUFYX0VQSUQ7IGlkKyspIHsKQEAgLTE4Nyw3ICsxODcsOCBAQAogCiAJZXAtPmlkID0gaWQ7CiAJZXAtPmRldi5jbGFzcyA9ICZpc2NzaV9lbmRwb2ludF9jbGFzczsKLQlzbnByaW50ZihlcC0+ZGV2LmJ1c19pZCwgQlVTX0lEX1NJWkUsICJlcC0ldSIsIGlkKTsKKwlzbnByaW50ZihlcC0+ZGV2LmJ1c19pZCwgQlVTX0lEX1NJWkUsICJlcC0lbGx1IiwKKwkJICh1bnNpZ25lZCBsb25nIGxvbmcpIGlkKTsKIAllcnIgPSBkZXZpY2VfcmVnaXN0ZXIoJmVwLT5kZXYpOwogICAgICAgICBpZiAoZXJyKQogICAgICAgICAgICAgICAgIGdvdG8gZnJlZV9lcDsKQEAgLTM3NCwxMCArMzc1LDEwIEBACiAJCWVyciA9IDA7CiAJCWJyZWFrOwogCWNhc2UgSVNDU0lfU0VTU0lPTl9GQUlMRUQ6Ci0JCWVyciA9IERJRF9JTU1fUkVUUlkgPDwgMTY7CisJCWVyciA9IERJRF9UUkFOU1BPUlRfRElTUlVQVEVEIDw8IDE2OwogCQlicmVhazsKIAljYXNlIElTQ1NJX1NFU1NJT05fRlJFRToKLQkJZXJyID0gRElEX05PX0NPTk5FQ1QgPDwgMTY7CisJCWVyciA9IERJRF9UUkFOU1BPUlRfRkFJTEZBU1QgPDwgMTY7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCWVyciA9IERJRF9OT19DT05ORUNUIDw8IDE2OwpAQCAtMTAxMCw3ICsxMDExLDcgQEAKIAogCXNrYiA9IGFsbG9jX3NrYihsZW4sIEdGUF9BVE9NSUMpOwogCWlmICghc2tiKSB7Ci0JCWlzY3NpX2Nvbm5fZXJyb3IoY29ubiwgSVNDU0lfRVJSX0NPTk5fRkFJTEVEKTsKKwkJaXNjc2lfY29ubl9lcnJvcl9ldmVudChjb25uLCBJU0NTSV9FUlJfQ09OTl9GQUlMRUQpOwogCQlpc2NzaV9jbHNfY29ubl9wcmludGsoS0VSTl9FUlIsIGNvbm4sICJjYW4gbm90IGRlbGl2ZXIgIgogCQkJCSAgICAgICJjb250cm9sIFBEVTogT09NXG4iKTsKIAkJcmV0dXJuIC1FTk9NRU07CkBAIC0xMDMxLDcgKzEwMzIsNyBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwoaXNjc2lfcmVjdl9wZHUpOwogCi12b2lkIGlzY3NpX2Nvbm5fZXJyb3Ioc3RydWN0IGlzY3NpX2Nsc19jb25uICpjb25uLCBlbnVtIGlzY3NpX2VyciBlcnJvcikKK3ZvaWQgaXNjc2lfY29ubl9lcnJvcl9ldmVudChzdHJ1Y3QgaXNjc2lfY2xzX2Nvbm4gKmNvbm4sIGVudW0gaXNjc2lfZXJyIGVycm9yKQogewogCXN0cnVjdCBubG1zZ2hkcgkqbmxoOwogCXN0cnVjdCBza19idWZmCSpza2I7CkBAIC0xMDYzLDcgKzEwNjQsNyBAQAogCWlzY3NpX2Nsc19jb25uX3ByaW50ayhLRVJOX0lORk8sIGNvbm4sICJkZXRlY3RlZCBjb25uIGVycm9yICglZClcbiIsCiAJCQkgICAgICBlcnJvcik7CiB9Ci1FWFBPUlRfU1lNQk9MX0dQTChpc2NzaV9jb25uX2Vycm9yKTsKK0VYUE9SVF9TWU1CT0xfR1BMKGlzY3NpX2Nvbm5fZXJyb3JfZXZlbnQpOwogCiBzdGF0aWMgaW50CiBpc2NzaV9pZl9zZW5kX3JlcGx5KGludCBwaWQsIGludCBzZXEsIGludCB0eXBlLCBpbnQgZG9uZSwgaW50IG11bHRpLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3Njc2lfdHJhbnNwb3J0X3NwaS5jIGIvZHJpdmVycy9zY3NpL3Njc2lfdHJhbnNwb3J0X3NwaS5jCmluZGV4IGIyOTM2MGUuLjdjMmQyODkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zY3NpX3RyYW5zcG9ydF9zcGkuYworKysgYi9kcml2ZXJzL3Njc2kvc2NzaV90cmFuc3BvcnRfc3BpLmMKQEAgLTEwOSw3ICsxMDksOSBAQAogCWZvcihpID0gMDsgaSA8IERWX1JFVFJJRVM7IGkrKykgewogCQlyZXN1bHQgPSBzY3NpX2V4ZWN1dGUoc2RldiwgY21kLCBkaXIsIGJ1ZmZlciwgYnVmZmxlbiwKIAkJCQkgICAgICBzZW5zZSwgRFZfVElNRU9VVCwgLyogcmV0cmllcyAqLyAxLAotCQkJCSAgICAgIFJFUV9GQUlMRkFTVCk7CisJCQkJICAgICAgUkVRX0ZBSUxGQVNUX0RFViB8CisJCQkJICAgICAgUkVRX0ZBSUxGQVNUX1RSQU5TUE9SVCB8CisJCQkJICAgICAgUkVRX0ZBSUxGQVNUX0RSSVZFUik7CiAJCWlmIChyZXN1bHQgJiBEUklWRVJfU0VOU0UpIHsKIAkJCXN0cnVjdCBzY3NpX3NlbnNlX2hkciBzc2hkcl90bXA7CiAJCQlpZiAoIXNzaGRyKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3NkLmMgYi9kcml2ZXJzL3Njc2kvc2QuYwppbmRleCBhN2I1M2JlLi43YzRkMmU2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2QuYworKysgYi9kcml2ZXJzL3Njc2kvc2QuYwpAQCAtMzg0LDcgKzM4NCw3IEBACiAJc2VjdG9yX3QgYmxvY2sgPSBycS0+c2VjdG9yOwogCXNlY3Rvcl90IHRocmVzaG9sZDsKIAl1bnNpZ25lZCBpbnQgdGhpc19jb3VudCA9IHJxLT5ucl9zZWN0b3JzOwotCWludCByZXQ7CisJaW50IHJldCwgaG9zdF9kaWY7CiAKIAlpZiAocnEtPmNtZF90eXBlID09IFJFUV9UWVBFX0JMT0NLX1BDKSB7CiAJCXJldCA9IHNjc2lfc2V0dXBfYmxrX3BjX2NtbmQoc2RwLCBycSk7CkBAIC01MTUsNyArNTE1LDggQEAKIAkJCQkJcnEtPm5yX3NlY3RvcnMpKTsKIAogCS8qIFNldCBSRFBST1RFQ1QvV1JQUk9URUNUIGlmIGRpc2sgaXMgZm9ybWF0dGVkIHdpdGggRElGICovCi0JaWYgKHNjc2lfaG9zdF9kaWZfY2FwYWJsZShzZHAtPmhvc3QsIHNka3AtPnByb3RlY3Rpb25fdHlwZSkpCisJaG9zdF9kaWYgPSBzY3NpX2hvc3RfZGlmX2NhcGFibGUoc2RwLT5ob3N0LCBzZGtwLT5wcm90ZWN0aW9uX3R5cGUpOworCWlmIChob3N0X2RpZikKIAkJU0NwbnQtPmNtbmRbMV0gPSAxIDw8IDU7CiAJZWxzZQogCQlTQ3BudC0+Y21uZFsxXSA9IDA7CkBAIC01NzMsOCArNTc0LDkgQEAKIAlTQ3BudC0+c2RiLmxlbmd0aCA9IHRoaXNfY291bnQgKiBzZHAtPnNlY3Rvcl9zaXplOwogCiAJLyogSWYgRElGIG9yIERJWCBpcyBlbmFibGVkLCB0ZWxsIEhCQSBob3cgdG8gaGFuZGxlIHJlcXVlc3QgKi8KLQlpZiAoc2RrcC0+cHJvdGVjdGlvbl90eXBlIHx8IHNjc2lfcHJvdF9zZ19jb3VudChTQ3BudCkpCi0JCXNkX2RpZl9vcChTQ3BudCwgc2RrcC0+cHJvdGVjdGlvbl90eXBlLCBzY3NpX3Byb3Rfc2dfY291bnQoU0NwbnQpKTsKKwlpZiAoaG9zdF9kaWYgfHwgc2NzaV9wcm90X3NnX2NvdW50KFNDcG50KSkKKwkJc2RfZGlmX29wKFNDcG50LCBob3N0X2RpZiwgc2NzaV9wcm90X3NnX2NvdW50KFNDcG50KSwKKwkJCSAgc2RrcC0+cHJvdGVjdGlvbl90eXBlKTsKIAogCS8qCiAJICogV2Ugc2hvdWxkbid0IGRpc2Nvbm5lY3QgaW4gdGhlIG1pZGRsZSBvZiBhIHNlY3Rvciwgc28gd2l0aCBhIGR1bWIKQEAgLTEyNTIsMTQgKzEyNTQsMTIgQEAKIAllbHNlCiAJCXR5cGUgPSAoKGJ1ZmZlclsxMl0gPj4gMSkgJiA3KSArIDE7IC8qIFBfVFlQRSAwID0gVHlwZSAxICovCiAKKwlzZGtwLT5wcm90ZWN0aW9uX3R5cGUgPSB0eXBlOworCiAJc3dpdGNoICh0eXBlKSB7CiAJY2FzZSBTRF9ESUZfVFlQRTBfUFJPVEVDVElPTjoKLQkJc2RrcC0+cHJvdGVjdGlvbl90eXBlID0gMDsKLQkJYnJlYWs7Ci0KIAljYXNlIFNEX0RJRl9UWVBFMV9QUk9URUNUSU9OOgogCWNhc2UgU0RfRElGX1RZUEUzX1BST1RFQ1RJT046Ci0JCXNka3AtPnByb3RlY3Rpb25fdHlwZSA9IHR5cGU7CiAJCWJyZWFrOwogCiAJY2FzZSBTRF9ESUZfVFlQRTJfUFJPVEVDVElPTjoKQEAgLTEyNzcsNyArMTI3Nyw2IEBACiAJcmV0dXJuOwogCiBkaXNhYmxlOgotCXNka3AtPnByb3RlY3Rpb25fdHlwZSA9IDA7CiAJc2RrcC0+Y2FwYWNpdHkgPSAwOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2QuaCBiL2RyaXZlcnMvc2NzaS9zZC5oCmluZGV4IDk1YjlmMDYuLjc1NjM4ZTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zZC5oCisrKyBiL2RyaXZlcnMvc2NzaS9zZC5oCkBAIC05NywxOSArOTcsMjggQEAKICAgICAgICBfX2JlMzIgcmVmX3RhZzsJCS8qIFRhcmdldCBMQkEgb3IgaW5kaXJlY3QgTEJBICovCiB9OwogCi0jaWYgZGVmaW5lZChDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkpCisjaWZkZWYgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZCiAKLWV4dGVybiB2b2lkIHNkX2RpZl9vcChzdHJ1Y3Qgc2NzaV9jbW5kICosIHVuc2lnbmVkIGludCwgdW5zaWduZWQgaW50KTsKK2V4dGVybiB2b2lkIHNkX2RpZl9vcChzdHJ1Y3Qgc2NzaV9jbW5kICosIHVuc2lnbmVkIGludCwgdW5zaWduZWQgaW50LCB1bnNpZ25lZCBpbnQpOwogZXh0ZXJuIHZvaWQgc2RfZGlmX2NvbmZpZ19ob3N0KHN0cnVjdCBzY3NpX2Rpc2sgKik7CiBleHRlcm4gaW50IHNkX2RpZl9wcmVwYXJlKHN0cnVjdCByZXF1ZXN0ICpycSwgc2VjdG9yX3QsIHVuc2lnbmVkIGludCk7CiBleHRlcm4gdm9pZCBzZF9kaWZfY29tcGxldGUoc3RydWN0IHNjc2lfY21uZCAqLCB1bnNpZ25lZCBpbnQpOwogCiAjZWxzZSAvKiBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgKi8KIAotI2RlZmluZSBzZF9kaWZfb3AoYSwgYiwgYykJCQlkbyB7IH0gd2hpbGUgKDApCi0jZGVmaW5lIHNkX2RpZl9jb25maWdfaG9zdChhKQkJCWRvIHsgfSB3aGlsZSAoMCkKLSNkZWZpbmUgc2RfZGlmX3ByZXBhcmUoYSwgYiwgYykJCQkoMCkKLSNkZWZpbmUgc2RfZGlmX2NvbXBsZXRlKGEsIGIpCQkJKDApCitzdGF0aWMgaW5saW5lIHZvaWQgc2RfZGlmX29wKHN0cnVjdCBzY3NpX2NtbmQgKmNtZCwgdW5zaWduZWQgaW50IGEsIHVuc2lnbmVkIGludCBiLCB1bnNpZ25lZCBpbnQgYykKK3sKK30KK3N0YXRpYyBpbmxpbmUgdm9pZCBzZF9kaWZfY29uZmlnX2hvc3Qoc3RydWN0IHNjc2lfZGlzayAqZGlzaykKK3sKK30KK3N0YXRpYyBpbmxpbmUgaW50IHNkX2RpZl9wcmVwYXJlKHN0cnVjdCByZXF1ZXN0ICpycSwgc2VjdG9yX3QgcywgdW5zaWduZWQgaW50IGEpCit7CisJcmV0dXJuIDA7Cit9CitzdGF0aWMgaW5saW5lIHZvaWQgc2RfZGlmX2NvbXBsZXRlKHN0cnVjdCBzY3NpX2NtbmQgKmNtZCwgdW5zaWduZWQgaW50IGEpCit7Cit9CiAKICNlbmRpZiAvKiBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgKi8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3NkX2RpZi5jIGIvZHJpdmVycy9zY3NpL3NkX2RpZi5jCmluZGV4IDRkMTdmM2QuLjNlYmIxZjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zZF9kaWYuYworKysgYi9kcml2ZXJzL3Njc2kvc2RfZGlmLmMKQEAgLTMxMSwyNiArMzExLDI3IEBACiAJc3RydWN0IHNjc2lfZGV2aWNlICpzZHAgPSBzZGtwLT5kZXZpY2U7CiAJc3RydWN0IGdlbmRpc2sgKmRpc2sgPSBzZGtwLT5kaXNrOwogCXU4IHR5cGUgPSBzZGtwLT5wcm90ZWN0aW9uX3R5cGU7CisJaW50IGRpZiwgZGl4OwogCi0JLyogSWYgdGhpcyBIQkEgZG9lc24ndCBzdXBwb3J0IERJWCwgcmVzb3J0IHRvIG5vcm1hbCBJL08gb3IgRElGICovCi0JaWYgKHNjc2lfaG9zdF9kaXhfY2FwYWJsZShzZHAtPmhvc3QsIHR5cGUpID09IDApIHsKKwlkaWYgPSBzY3NpX2hvc3RfZGlmX2NhcGFibGUoc2RwLT5ob3N0LCB0eXBlKTsKKwlkaXggPSBzY3NpX2hvc3RfZGl4X2NhcGFibGUoc2RwLT5ob3N0LCB0eXBlKTsKIAotCQlpZiAodHlwZSA9PSBTRF9ESUZfVFlQRTBfUFJPVEVDVElPTikKLQkJCXJldHVybjsKLQotCQlpZiAoc2NzaV9ob3N0X2RpZl9jYXBhYmxlKHNkcC0+aG9zdCwgdHlwZSkgPT0gMCkgewotCQkJc2RfcHJpbnRrKEtFUk5fSU5GTywgc2RrcCwgIlR5cGUgJWQgcHJvdGVjdGlvbiAiIFwKLQkJCQkgICJ1bnN1cHBvcnRlZCBieSBIQkEuIERpc2FibGluZyBESUYuXG4iLCB0eXBlKTsKLQkJCXNka3AtPnByb3RlY3Rpb25fdHlwZSA9IDA7Ci0JCQlyZXR1cm47Ci0JCX0KLQotCQlzZF9wcmludGsoS0VSTl9JTkZPLCBzZGtwLCAiRW5hYmxpbmcgRElGIFR5cGUgJWQgcHJvdGVjdGlvblxuIiwKLQkJCSAgdHlwZSk7Ci0KLQkJcmV0dXJuOworCWlmICghZGl4ICYmIHNjc2lfaG9zdF9kaXhfY2FwYWJsZShzZHAtPmhvc3QsIDApKSB7CisJCWRpZiA9IDA7IGRpeCA9IDE7CiAJfQogCisJaWYgKHR5cGUpIHsKKwkJaWYgKGRpZikKKwkJCXNkX3ByaW50ayhLRVJOX05PVElDRSwgc2RrcCwKKwkJCQkgICJFbmFibGluZyBESUYgVHlwZSAlZCBwcm90ZWN0aW9uXG4iLCB0eXBlKTsKKwkJZWxzZQorCQkJc2RfcHJpbnRrKEtFUk5fTk9USUNFLCBzZGtwLAorCQkJCSAgIkRpc2FibGluZyBESUYgVHlwZSAlZCBwcm90ZWN0aW9uXG4iLCB0eXBlKTsKKwl9CisKKwlpZiAoIWRpeCkKKwkJcmV0dXJuOworCiAJLyogRW5hYmxlIERNQSBvZiBwcm90ZWN0aW9uIGluZm9ybWF0aW9uICovCiAJaWYgKHNjc2lfaG9zdF9nZXRfZ3VhcmQoc2RrcC0+ZGV2aWNlLT5ob3N0KSAmIFNIT1NUX0RJWF9HVUFSRF9JUCkKIAkJaWYgKHR5cGUgPT0gU0RfRElGX1RZUEUzX1BST1RFQ1RJT04pCkBAIC0zNDMsMTcgKzM0NCwxNyBAQAogCQllbHNlCiAJCQlibGtfaW50ZWdyaXR5X3JlZ2lzdGVyKGRpc2ssICZkaWZfdHlwZTFfaW50ZWdyaXR5X2NyYyk7CiAKLQlzZF9wcmludGsoS0VSTl9JTkZPLCBzZGtwLAotCQkgICJFbmFibGluZyAlcyBpbnRlZ3JpdHkgcHJvdGVjdGlvblxuIiwgZGlzay0+aW50ZWdyaXR5LT5uYW1lKTsKKwlzZF9wcmludGsoS0VSTl9OT1RJQ0UsIHNka3AsCisJCSAgIkVuYWJsaW5nIERJWCAlcyBwcm90ZWN0aW9uXG4iLCBkaXNrLT5pbnRlZ3JpdHktPm5hbWUpOwogCiAJLyogU2lnbmFsIHRvIGJsb2NrIGxheWVyIHRoYXQgd2Ugc3VwcG9ydCBzZWN0b3IgdGFnZ2luZyAqLwotCWlmICh0eXBlICYmIHNka3AtPkFUTykgeworCWlmIChkaWYgJiYgdHlwZSAmJiBzZGtwLT5BVE8pIHsKIAkJaWYgKHR5cGUgPT0gU0RfRElGX1RZUEUzX1BST1RFQ1RJT04pCiAJCQlkaXNrLT5pbnRlZ3JpdHktPnRhZ19zaXplID0gc2l6ZW9mKHUxNikgKyBzaXplb2YodTMyKTsKIAkJZWxzZQogCQkJZGlzay0+aW50ZWdyaXR5LT50YWdfc2l6ZSA9IHNpemVvZih1MTYpOwogCi0JCXNkX3ByaW50ayhLRVJOX0lORk8sIHNka3AsICJESUYgYXBwbGljYXRpb24gdGFnIHNpemUgJXVcbiIsCisJCXNkX3ByaW50ayhLRVJOX05PVElDRSwgc2RrcCwgIkRJRiBhcHBsaWNhdGlvbiB0YWcgc2l6ZSAldVxuIiwKIAkJCSAgZGlzay0+aW50ZWdyaXR5LT50YWdfc2l6ZSk7CiAJfQogfQpAQCAtMzYxLDcgKzM2Miw3IEBACiAvKgogICogRElGIERNQSBvcGVyYXRpb24gbWFnaWMgZGVjb2RlciByaW5nLgogICovCi12b2lkIHNkX2RpZl9vcChzdHJ1Y3Qgc2NzaV9jbW5kICpzY21kLCB1bnNpZ25lZCBpbnQgZGlmLCB1bnNpZ25lZCBpbnQgZGl4KQordm9pZCBzZF9kaWZfb3Aoc3RydWN0IHNjc2lfY21uZCAqc2NtZCwgdW5zaWduZWQgaW50IGRpZiwgdW5zaWduZWQgaW50IGRpeCwgdW5zaWduZWQgaW50IHR5cGUpCiB7CiAJaW50IGNzdW1fY29udmVydCwgcHJvdF9vcDsKIApAQCAtNDA2LDcgKzQwNyw4IEBACiAJfQogCiAJc2NzaV9zZXRfcHJvdF9vcChzY21kLCBwcm90X29wKTsKLQlzY3NpX3NldF9wcm90X3R5cGUoc2NtZCwgZGlmKTsKKwlpZiAoZGlmKQorCQlzY3NpX3NldF9wcm90X3R5cGUoc2NtZCwgdHlwZSk7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2cuYyBiL2RyaXZlcnMvc2NzaS9zZy5jCmluZGV4IGJhOWI5YmIuLjkzYmQ1OWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zZy5jCisrKyBiL2RyaXZlcnMvc2NzaS9zZy5jCkBAIC0xNDUwLDEyICsxNDUwLDEwIEBACiAJaWYgKHNnX3N5c2ZzX3ZhbGlkKSB7CiAJCXN0cnVjdCBkZXZpY2UgKnNnX2NsYXNzX21lbWJlcjsKIAotCQlzZ19jbGFzc19tZW1iZXIgPSBkZXZpY2VfY3JlYXRlX2RydmRhdGEoc2dfc3lzZnNfY2xhc3MsCi0JCQkJCQkJY2xfZGV2LT5wYXJlbnQsCi0JCQkJCQkJTUtERVYoU0NTSV9HRU5FUklDX01BSk9SLAotCQkJCQkJCSAgICAgIHNkcC0+aW5kZXgpLAotCQkJCQkJCXNkcCwKLQkJCQkJCQkiJXMiLCBkaXNrLT5kaXNrX25hbWUpOworCQlzZ19jbGFzc19tZW1iZXIgPSBkZXZpY2VfY3JlYXRlKHNnX3N5c2ZzX2NsYXNzLCBjbF9kZXYtPnBhcmVudCwKKwkJCQkJCU1LREVWKFNDU0lfR0VORVJJQ19NQUpPUiwKKwkJCQkJCSAgICAgIHNkcC0+aW5kZXgpLAorCQkJCQkJc2RwLCAiJXMiLCBkaXNrLT5kaXNrX25hbWUpOwogCQlpZiAoSVNfRVJSKHNnX2NsYXNzX21lbWJlcikpIHsKIAkJCXByaW50ayhLRVJOX0VSUiAic2dfYWRkOiAiCiAJCQkgICAgICAgImRldmljZV9jcmVhdGUgZmFpbGVkXG4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zcl92ZW5kb3IuYyBiL2RyaXZlcnMvc2NzaS9zcl92ZW5kb3IuYwppbmRleCA0ZWIzZGE5Li40YWQzZTAxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc3JfdmVuZG9yLmMKKysrIGIvZHJpdmVycy9zY3NpL3NyX3ZlbmRvci5jCkBAIC0yMjMsOSArMjIzLDkgQEAKIAkJCQlub19tdWx0aSA9IDE7CiAJCQkJYnJlYWs7CiAJCQl9Ci0JCQltaW4gPSBCQ0QyQklOKGJ1ZmZlclsxNV0pOwotCQkJc2VjID0gQkNEMkJJTihidWZmZXJbMTZdKTsKLQkJCWZyYW1lID0gQkNEMkJJTihidWZmZXJbMTddKTsKKwkJCW1pbiA9IGJjZDJiaW4oYnVmZmVyWzE1XSk7CisJCQlzZWMgPSBiY2QyYmluKGJ1ZmZlclsxNl0pOworCQkJZnJhbWUgPSBiY2QyYmluKGJ1ZmZlclsxN10pOwogCQkJc2VjdG9yID0gbWluICogQ0RfU0VDUyAqIENEX0ZSQU1FUyArIHNlYyAqIENEX0ZSQU1FUyArIGZyYW1lOwogCQkJYnJlYWs7CiAJCX0KQEAgLTI1Miw5ICsyNTIsOSBAQAogCQkJfQogCQkJaWYgKHJjICE9IDApCiAJCQkJYnJlYWs7Ci0JCQltaW4gPSBCQ0QyQklOKGJ1ZmZlclsxXSk7Ci0JCQlzZWMgPSBCQ0QyQklOKGJ1ZmZlclsyXSk7Ci0JCQlmcmFtZSA9IEJDRDJCSU4oYnVmZmVyWzNdKTsKKwkJCW1pbiA9IGJjZDJiaW4oYnVmZmVyWzFdKTsKKwkJCXNlYyA9IGJjZDJiaW4oYnVmZmVyWzJdKTsKKwkJCWZyYW1lID0gYmNkMmJpbihidWZmZXJbM10pOwogCQkJc2VjdG9yID0gbWluICogQ0RfU0VDUyAqIENEX0ZSQU1FUyArIHNlYyAqIENEX0ZSQU1FUyArIGZyYW1lOwogCQkJaWYgKHNlY3RvcikKIAkJCQlzZWN0b3IgLT0gQ0RfTVNGX09GRlNFVDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zdC5jIGIvZHJpdmVycy9zY3NpL3N0LmMKaW5kZXggYzJiYjUzZTMuLjVjMjhkMDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zdC5jCisrKyBiL2RyaXZlcnMvc2NzaS9zdC5jCkBAIC00NDI4LDEzICs0NDI4LDEwIEBACiAJCXNucHJpbnRmKG5hbWUsIDEwLCAiJXMlcyVzIiwgcmV3ID8gIm4iIDogIiIsCiAJCQkgU1RwLT5kaXNrLT5kaXNrX25hbWUsIHN0X2Zvcm1hdHNbaV0pOwogCQlzdF9jbGFzc19tZW1iZXIgPQotCQkJZGV2aWNlX2NyZWF0ZV9kcnZkYXRhKHN0X3N5c2ZzX2NsYXNzLAotCQkJCQkgICAgICAmU1RwLT5kZXZpY2UtPnNkZXZfZ2VuZGV2LAotCQkJCQkgICAgICBNS0RFVihTQ1NJX1RBUEVfTUFKT1IsCi0JCQkJCQkgICAgVEFQRV9NSU5PUihkZXZfbnVtLAotCQkJCQkJCSAgICAgIG1vZGUsIHJldykpLAotCQkJCQkgICAgICAmU1RwLT5tb2Rlc1ttb2RlXSwKLQkJCQkJICAgICAgIiVzIiwgbmFtZSk7CisJCQlkZXZpY2VfY3JlYXRlKHN0X3N5c2ZzX2NsYXNzLCAmU1RwLT5kZXZpY2UtPnNkZXZfZ2VuZGV2LAorCQkJCSAgICAgIE1LREVWKFNDU0lfVEFQRV9NQUpPUiwKKwkJCQkJICAgIFRBUEVfTUlOT1IoZGV2X251bSwgbW9kZSwgcmV3KSksCisJCQkJICAgICAgJlNUcC0+bW9kZXNbbW9kZV0sICIlcyIsIG5hbWUpOwogCQlpZiAoSVNfRVJSKHN0X2NsYXNzX21lbWJlcikpIHsKIAkJCXByaW50ayhLRVJOX1dBUk5JTkcgInN0JWQ6IGRldmljZV9jcmVhdGUgZmFpbGVkXG4iLAogCQkJICAgICAgIGRldl9udW0pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvNjgzMjhzZXJpYWwuYyBiL2RyaXZlcnMvc2VyaWFsLzY4MzI4c2VyaWFsLmMKaW5kZXggMzgxYjEyYS4uZDkzNWIyZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvNjgzMjhzZXJpYWwuYworKysgYi9kcml2ZXJzL3NlcmlhbC82ODMyOHNlcmlhbC5jCkBAIC02Niw3ICs2Niw2IEBACiAjZW5kaWYKIAogc3RhdGljIHN0cnVjdCBtNjhrX3NlcmlhbCBtNjhrX3NvZnRbTlJfUE9SVFNdOwotc3RydWN0IG02OGtfc2VyaWFsICpJUlFfcG9ydHNbTlJfSVJRU107CiAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgdWFydF9pcnFzW05SX1BPUlRTXSA9IFVBUlRfSVJRX0RFRk5TOwogCkBAIC0zNzUsMTUgKzM3NCwxMSBAQAogICovCiBpcnFyZXR1cm5fdCByc19pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKQogewotCXN0cnVjdCBtNjhrX3NlcmlhbCAqIGluZm87CisJc3RydWN0IG02OGtfc2VyaWFsICppbmZvID0gZGV2X2lkOwogCW02ODMyOF91YXJ0ICp1YXJ0OwogCXVuc2lnbmVkIHNob3J0IHJ4OwogCXVuc2lnbmVkIHNob3J0IHR4OwogCi0JaW5mbyA9IElSUV9wb3J0c1tpcnFdOwotCWlmKCFpbmZvKQotCSAgICByZXR1cm4gSVJRX05PTkU7Ci0KIAl1YXJ0ID0gJnVhcnRfYWRkcltpbmZvLT5saW5lXTsKIAlyeCA9IHVhcnQtPnVyeC53OwogCkBAIC0xMzgzLDggKzEzNzgsNiBAQAogCQkgICBpbmZvLT5wb3J0LCBpbmZvLT5pcnEpOwogCSAgICBwcmludGsoIiBpcyBhIGJ1aWx0aW4gTUM2ODMyOCBVQVJUXG4iKTsKIAkgICAgCi0JICAgIElSUV9wb3J0c1tpbmZvLT5pcnFdID0gaW5mbzsJLyogd2FzdGUgb2Ygc3BhY2UgKi8KLQogI2lmZGVmIENPTkZJR19NNjhWWjMyOAogCQlpZiAoaSA+IDAgKQogCQkJUEpTRUwgJj0gMHhDRjsgIC8qIFBTVyBlbmFibGUgc2Vjb25kIHBvcnQgb3V0cHV0ICovCkBAIC0xMzkzLDcgKzEzODYsNyBAQAogCSAgICBpZiAocmVxdWVzdF9pcnEodWFydF9pcnFzW2ldLAogCQkJICAgIHJzX2ludGVycnVwdCwKIAkJCSAgICBJUlFGX0RJU0FCTEVELAotCQkJICAgICJNNjgzMjhfVUFSVCIsIE5VTEwpKQorCQkJICAgICJNNjgzMjhfVUFSVCIsIGluZm8pKQogICAgICAgICAgICAgICAgIHBhbmljKCJVbmFibGUgdG8gYXR0YWNoIDY4MzI4IHNlcmlhbCBpbnRlcnJ1cHRcbiIpOwogCX0KIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC84MjUwLmMgYi9kcml2ZXJzL3NlcmlhbC84MjUwLmMKaW5kZXggOWNjYzU2My4uMzAzMjcyYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvODI1MC5jCisrKyBiL2RyaXZlcnMvc2VyaWFsLzgyNTAuYwpAQCAtNDQsNiArNDQsMTAgQEAKIAogI2luY2x1ZGUgIjgyNTAuaCIKIAorI2lmZGVmIENPTkZJR19TUEFSQworI2luY2x1ZGUgInN1bmNvcmUuaCIKKyNlbmRpZgorCiAvKgogICogQ29uZmlndXJhdGlvbjoKICAqICAgc2hhcmVfaXJxcyAtIHdoZXRoZXIgd2UgcGFzcyBJUlFGX1NIQVJFRCB0byByZXF1ZXN0X2lycSgpLiAgVGhpcyBvcHRpb24KQEAgLTUzLDYgKzU3LDEzIEBACiAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgbnJfdWFydHMgPSBDT05GSUdfU0VSSUFMXzgyNTBfUlVOVElNRV9VQVJUUzsKIAorc3RhdGljIHN0cnVjdCB1YXJ0X2RyaXZlciBzZXJpYWw4MjUwX3JlZzsKKworc3RhdGljIGludCBzZXJpYWxfaW5kZXgoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKK3sKKwlyZXR1cm4gKHNlcmlhbDgyNTBfcmVnLm1pbm9yIC0gNjQpICsgcG9ydC0+bGluZTsKK30KKwogLyoKICAqIERlYnVnZ2luZy4KICAqLwpAQCAtMTQ1LDExICsxNTYsMTUgQEAKIH07CiAKIHN0cnVjdCBpcnFfaW5mbyB7Ci0Jc3BpbmxvY2tfdAkJbG9jazsKKwlzdHJ1Y3QJCQlobGlzdF9ub2RlIG5vZGU7CisJaW50CQkJaXJxOworCXNwaW5sb2NrX3QJCWxvY2s7CS8qIFByb3RlY3RzIGxpc3Qgbm90IHRoZSBoYXNoICovCiAJc3RydWN0IGxpc3RfaGVhZAkqaGVhZDsKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgaXJxX2luZm8gaXJxX2xpc3RzW05SX0lSUVNdOworI2RlZmluZSBOUl9JUlFfSEFTSAkJMzIJLyogQ2FuIGJlIGFkanVzdGVkIGxhdGVyICovCitzdGF0aWMgc3RydWN0IGhsaXN0X2hlYWQgaXJxX2xpc3RzW05SX0lSUV9IQVNIXTsKK3N0YXRpYyBERUZJTkVfTVVURVgoaGFzaF9tdXRleCk7CS8qIFVzZWQgdG8gd2FsayB0aGUgaGFzaCAqLwogCiAvKgogICogSGVyZSB3ZSBkZWZpbmUgdGhlIGRlZmF1bHQgeG1pdCBmaWZvIHNpemUgdXNlZCBmb3IgZWFjaCB0eXBlIG9mIFVBUlQuCkBAIC01MzYsNyArNTUxLDcgQEAKIC8qCiAgKiBGSUZPIHN1cHBvcnQuCiAgKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBzZXJpYWw4MjUwX2NsZWFyX2ZpZm9zKHN0cnVjdCB1YXJ0XzgyNTBfcG9ydCAqcCkKK3N0YXRpYyB2b2lkIHNlcmlhbDgyNTBfY2xlYXJfZmlmb3Moc3RydWN0IHVhcnRfODI1MF9wb3J0ICpwKQogewogCWlmIChwLT5jYXBhYmlsaXRpZXMgJiBVQVJUX0NBUF9GSUZPKSB7CiAJCXNlcmlhbF9vdXRwKHAsIFVBUlRfRkNSLCBVQVJUX0ZDUl9FTkFCTEVfRklGTyk7CkBAIC01NTEsNyArNTY2LDcgQEAKICAqIGNhcGFiaWxpdHkiIGJpdCBlbmFibGVkLiAgTm90ZSB0aGF0IG9uIFhSMTZDODUwcywgd2UgbmVlZCB0bwogICogcmVzZXQgTENSIHRvIHdyaXRlIHRvIElFUi4KICAqLwotc3RhdGljIGlubGluZSB2b2lkIHNlcmlhbDgyNTBfc2V0X3NsZWVwKHN0cnVjdCB1YXJ0XzgyNTBfcG9ydCAqcCwgaW50IHNsZWVwKQorc3RhdGljIHZvaWQgc2VyaWFsODI1MF9zZXRfc2xlZXAoc3RydWN0IHVhcnRfODI1MF9wb3J0ICpwLCBpbnQgc2xlZXApCiB7CiAJaWYgKHAtPmNhcGFiaWxpdGllcyAmIFVBUlRfQ0FQX1NMRUVQKSB7CiAJCWlmIChwLT5jYXBhYmlsaXRpZXMgJiBVQVJUX0NBUF9FRlIpIHsKQEAgLTk5Myw3ICsxMDA4LDcgQEAKIAkJcmV0dXJuOwogCiAJREVCVUdfQVVUT0NPTkYoInR0eVMlZDogYXV0b2NvbmYgKDB4JTA0eCwgMHglcCk6ICIsCi0JCQl1cC0+cG9ydC5saW5lLCB1cC0+cG9ydC5pb2Jhc2UsIHVwLT5wb3J0Lm1lbWJhc2UpOworCQkgICAgICAgc2VyaWFsX2luZGV4KCZ1cC0+cG9ydCksIHVwLT5wb3J0LmlvYmFzZSwgdXAtPnBvcnQubWVtYmFzZSk7CiAKIAkvKgogCSAqIFdlIHJlYWxseSBkbyBuZWVkIGdsb2JhbCBJUlFzIGRpc2FibGVkIGhlcmUgLSB3ZSdyZSBnb2luZyB0bwpAQCAtMTEyOCw4ICsxMTQzLDggQEAKIAlpZiAodXAtPmNhcGFiaWxpdGllcyAhPSB1YXJ0X2NvbmZpZ1t1cC0+cG9ydC50eXBlXS5mbGFncykgewogCQlwcmludGsoS0VSTl9XQVJOSU5HCiAJCSAgICAgICAidHR5UyVkOiBkZXRlY3RlZCBjYXBzICUwOHggc2hvdWxkIGJlICUwOHhcbiIsCi0JCQl1cC0+cG9ydC5saW5lLCB1cC0+Y2FwYWJpbGl0aWVzLAotCQkJdWFydF9jb25maWdbdXAtPnBvcnQudHlwZV0uZmxhZ3MpOworCQkgICAgICAgc2VyaWFsX2luZGV4KCZ1cC0+cG9ydCksIHVwLT5jYXBhYmlsaXRpZXMsCisJCSAgICAgICB1YXJ0X2NvbmZpZ1t1cC0+cG9ydC50eXBlXS5mbGFncyk7CiAJfQogCiAJdXAtPnBvcnQuZmlmb3NpemUgPSB1YXJ0X2NvbmZpZ1t1cC0+cG9ydC50eXBlXS5maWZvX3NpemU7CkBAIC0xNDI0LDggKzE0MzksNyBAQAogLyoKICAqIFRoaXMgaGFuZGxlcyB0aGUgaW50ZXJydXB0IGZyb20gb25lIHBvcnQuCiAgKi8KLXN0YXRpYyBpbmxpbmUgdm9pZAotc2VyaWFsODI1MF9oYW5kbGVfcG9ydChzdHJ1Y3QgdWFydF84MjUwX3BvcnQgKnVwKQorc3RhdGljIHZvaWQgc2VyaWFsODI1MF9oYW5kbGVfcG9ydChzdHJ1Y3QgdWFydF84MjUwX3BvcnQgKnVwKQogewogCXVuc2lnbmVkIGludCBzdGF0dXM7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKQEAgLTE1MzUsMTUgKzE1NDksNDMgQEAKIAkJQlVHX09OKGktPmhlYWQgIT0gJnVwLT5saXN0KTsKIAkJaS0+aGVhZCA9IE5VTEw7CiAJfQotCiAJc3Bpbl91bmxvY2tfaXJxKCZpLT5sb2NrKTsKKwkvKiBMaXN0IGVtcHR5IHNvIHRocm93IGF3YXkgdGhlIGhhc2ggbm9kZSAqLworCWlmIChpLT5oZWFkID09IE5VTEwpIHsKKwkJaGxpc3RfZGVsKCZpLT5ub2RlKTsKKwkJa2ZyZWUoaSk7CisJfQogfQogCiBzdGF0aWMgaW50IHNlcmlhbF9saW5rX2lycV9jaGFpbihzdHJ1Y3QgdWFydF84MjUwX3BvcnQgKnVwKQogewotCXN0cnVjdCBpcnFfaW5mbyAqaSA9IGlycV9saXN0cyArIHVwLT5wb3J0LmlycTsKKwlzdHJ1Y3QgaGxpc3RfaGVhZCAqaDsKKwlzdHJ1Y3QgaGxpc3Rfbm9kZSAqbjsKKwlzdHJ1Y3QgaXJxX2luZm8gKmk7CiAJaW50IHJldCwgaXJxX2ZsYWdzID0gdXAtPnBvcnQuZmxhZ3MgJiBVUEZfU0hBUkVfSVJRID8gSVJRRl9TSEFSRUQgOiAwOwogCisJbXV0ZXhfbG9jaygmaGFzaF9tdXRleCk7CisKKwloID0gJmlycV9saXN0c1t1cC0+cG9ydC5pcnEgJSBOUl9JUlFfSEFTSF07CisKKwlobGlzdF9mb3JfZWFjaChuLCBoKSB7CisJCWkgPSBobGlzdF9lbnRyeShuLCBzdHJ1Y3QgaXJxX2luZm8sIG5vZGUpOworCQlpZiAoaS0+aXJxID09IHVwLT5wb3J0LmlycSkKKwkJCWJyZWFrOworCX0KKworCWlmIChuID09IE5VTEwpIHsKKwkJaSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBpcnFfaW5mbyksIEdGUF9LRVJORUwpOworCQlpZiAoaSA9PSBOVUxMKSB7CisJCQltdXRleF91bmxvY2soJmhhc2hfbXV0ZXgpOworCQkJcmV0dXJuIC1FTk9NRU07CisJCX0KKwkJc3Bpbl9sb2NrX2luaXQoJmktPmxvY2spOworCQlpLT5pcnEgPSB1cC0+cG9ydC5pcnE7CisJCWhsaXN0X2FkZF9oZWFkKCZpLT5ub2RlLCBoKTsKKwl9CisJbXV0ZXhfdW5sb2NrKCZoYXNoX211dGV4KTsKKwogCXNwaW5fbG9ja19pcnEoJmktPmxvY2spOwogCiAJaWYgKGktPmhlYWQpIHsKQEAgLTE1NjcsMTQgKzE2MDksMjggQEAKIAogc3RhdGljIHZvaWQgc2VyaWFsX3VubGlua19pcnFfY2hhaW4oc3RydWN0IHVhcnRfODI1MF9wb3J0ICp1cCkKIHsKLQlzdHJ1Y3QgaXJxX2luZm8gKmkgPSBpcnFfbGlzdHMgKyB1cC0+cG9ydC5pcnE7CisJc3RydWN0IGlycV9pbmZvICppOworCXN0cnVjdCBobGlzdF9ub2RlICpuOworCXN0cnVjdCBobGlzdF9oZWFkICpoOwogCisJbXV0ZXhfbG9jaygmaGFzaF9tdXRleCk7CisKKwloID0gJmlycV9saXN0c1t1cC0+cG9ydC5pcnEgJSBOUl9JUlFfSEFTSF07CisKKwlobGlzdF9mb3JfZWFjaChuLCBoKSB7CisJCWkgPSBobGlzdF9lbnRyeShuLCBzdHJ1Y3QgaXJxX2luZm8sIG5vZGUpOworCQlpZiAoaS0+aXJxID09IHVwLT5wb3J0LmlycSkKKwkJCWJyZWFrOworCX0KKworCUJVR19PTihuID09IE5VTEwpOwogCUJVR19PTihpLT5oZWFkID09IE5VTEwpOwogCiAJaWYgKGxpc3RfZW1wdHkoaS0+aGVhZCkpCiAJCWZyZWVfaXJxKHVwLT5wb3J0LmlycSwgaSk7CiAKIAlzZXJpYWxfZG9fdW5saW5rKGksIHVwKTsKKwltdXRleF91bmxvY2soJmhhc2hfbXV0ZXgpOwogfQogCiAvKiBCYXNlIHRpbWVyIGludGVydmFsIGZvciBwb2xsaW5nICovCkBAIC0xNzE5LDcgKzE3NzUsNyBAQAogLyoKICAqCVdhaXQgZm9yIHRyYW5zbWl0dGVyICYgaG9sZGluZyByZWdpc3RlciB0byBlbXB0eQogICovCi1zdGF0aWMgaW5saW5lIHZvaWQgd2FpdF9mb3JfeG1pdHIoc3RydWN0IHVhcnRfODI1MF9wb3J0ICp1cCwgaW50IGJpdHMpCitzdGF0aWMgdm9pZCB3YWl0X2Zvcl94bWl0cihzdHJ1Y3QgdWFydF84MjUwX3BvcnQgKnVwLCBpbnQgYml0cykKIHsKIAl1bnNpZ25lZCBpbnQgc3RhdHVzLCB0bW91dCA9IDEwMDAwOwogCkBAIC0xODU0LDcgKzE5MTAsOCBAQAogCSAqLwogCWlmICghKHVwLT5wb3J0LmZsYWdzICYgVVBGX0JVR0dZX1VBUlQpICYmCiAJICAgIChzZXJpYWxfaW5wKHVwLCBVQVJUX0xTUikgPT0gMHhmZikpIHsKLQkJcHJpbnRrKCJ0dHlTJWQ6IExTUiBzYWZldHkgY2hlY2sgZW5nYWdlZCFcbiIsIHVwLT5wb3J0LmxpbmUpOworCQlwcmludGsoS0VSTl9JTkZPICJ0dHlTJWQ6IExTUiBzYWZldHkgY2hlY2sgZW5nYWdlZCFcbiIsCisJCSAgICAgICBzZXJpYWxfaW5kZXgoJnVwLT5wb3J0KSk7CiAJCXJldHVybiAtRU5PREVWOwogCX0KIApAQCAtMTkwOSw3ICsxOTY2LDggQEAKIAkJICovCiAJCWlmICghKGlpcjEgJiBVQVJUX0lJUl9OT19JTlQpICYmIChpaXIgJiBVQVJUX0lJUl9OT19JTlQpKSB7CiAJCQl1cC0+YnVncyB8PSBVQVJUX0JVR19USFJFOwotCQkJcHJfZGVidWcoInR0eVMlZCAtIHVzaW5nIGJhY2t1cCB0aW1lclxuIiwgcG9ydC0+bGluZSk7CisJCQlwcl9kZWJ1ZygidHR5UyVkIC0gdXNpbmcgYmFja3VwIHRpbWVyXG4iLAorCQkJCSBzZXJpYWxfaW5kZXgocG9ydCkpOwogCQl9CiAJfQogCkBAIC0xOTY5LDcgKzIwMjcsNyBAQAogCQlpZiAoISh1cC0+YnVncyAmIFVBUlRfQlVHX1RYRU4pKSB7CiAJCQl1cC0+YnVncyB8PSBVQVJUX0JVR19UWEVOOwogCQkJcHJfZGVidWcoInR0eVMlZCAtIGVuYWJsaW5nIGJhZCB0eCBzdGF0dXMgd29ya2Fyb3VuZHNcbiIsCi0JCQkJIHBvcnQtPmxpbmUpOworCQkJCSBzZXJpYWxfaW5kZXgocG9ydCkpOwogCQl9CiAJfSBlbHNlIHsKIAkJdXAtPmJ1Z3MgJj0gflVBUlRfQlVHX1RYRU47CkBAIC0yMjExLDkgKzIyNjksOSBAQAogCQlzZXJpYWxfb3V0cCh1cCwgVUFSVF9FRlIsIGVmcik7CiAJfQogCi0jaWZkZWYgQ09ORklHX0FSQ0hfT01BUDE1WFgKKyNpZmRlZiBDT05GSUdfQVJDSF9PTUFQCiAJLyogV29ya2Fyb3VuZCB0byBlbmFibGUgMTE1MjAwIGJhdWQgb24gT01BUDE1MTAgaW50ZXJuYWwgcG9ydHMgKi8KLQlpZiAoY3B1X2lzX29tYXAxNTEwKCkgJiYgaXNfb21hcF9wb3J0KCh1bnNpZ25lZCBpbnQpdXAtPnBvcnQubWVtYmFzZSkpIHsKKwlpZiAoY3B1X2lzX29tYXAxNTEwKCkgJiYgaXNfb21hcF9wb3J0KHVwKSkgewogCQlpZiAoYmF1ZCA9PSAxMTUyMDApIHsKIAkJCXF1b3QgPSAxOwogCQkJc2VyaWFsX291dCh1cCwgVUFSVF9PTUFQX09TQ18xMk1fU0VMLCAxKTsKQEAgLTIyNjYsMTggKzIzMjQsMjcgQEAKIAkJcC0+cG0ocG9ydCwgc3RhdGUsIG9sZHN0YXRlKTsKIH0KIAorc3RhdGljIHVuc2lnbmVkIGludCBzZXJpYWw4MjUwX3BvcnRfc2l6ZShzdHJ1Y3QgdWFydF84MjUwX3BvcnQgKnB0KQoreworCWlmIChwdC0+cG9ydC5pb3R5cGUgPT0gVVBJT19BVSkKKwkJcmV0dXJuIDB4MTAwMDAwOworI2lmZGVmIENPTkZJR19BUkNIX09NQVAKKwlpZiAoaXNfb21hcF9wb3J0KHB0KSkKKwkJcmV0dXJuIDB4MTYgPDwgcHQtPnBvcnQucmVnc2hpZnQ7CisjZW5kaWYKKwlyZXR1cm4gOCA8PCBwdC0+cG9ydC5yZWdzaGlmdDsKK30KKwogLyoKICAqIFJlc291cmNlIGhhbmRsaW5nLgogICovCiBzdGF0aWMgaW50IHNlcmlhbDgyNTBfcmVxdWVzdF9zdGRfcmVzb3VyY2Uoc3RydWN0IHVhcnRfODI1MF9wb3J0ICp1cCkKIHsKLQl1bnNpZ25lZCBpbnQgc2l6ZSA9IDggPDwgdXAtPnBvcnQucmVnc2hpZnQ7CisJdW5zaWduZWQgaW50IHNpemUgPSBzZXJpYWw4MjUwX3BvcnRfc2l6ZSh1cCk7CiAJaW50IHJldCA9IDA7CiAKIAlzd2l0Y2ggKHVwLT5wb3J0LmlvdHlwZSkgewogCWNhc2UgVVBJT19BVToKLQkJc2l6ZSA9IDB4MTAwMDAwOwotCQkvKiBmYWxsIHRocnUgKi8KIAljYXNlIFVQSU9fVFNJOgogCWNhc2UgVVBJT19NRU0zMjoKIAljYXNlIFVQSU9fTUVNOgpAQCAtMjMxMSwxMiArMjM3OCwxMCBAQAogCiBzdGF0aWMgdm9pZCBzZXJpYWw4MjUwX3JlbGVhc2Vfc3RkX3Jlc291cmNlKHN0cnVjdCB1YXJ0XzgyNTBfcG9ydCAqdXApCiB7Ci0JdW5zaWduZWQgaW50IHNpemUgPSA4IDw8IHVwLT5wb3J0LnJlZ3NoaWZ0OworCXVuc2lnbmVkIGludCBzaXplID0gc2VyaWFsODI1MF9wb3J0X3NpemUodXApOwogCiAJc3dpdGNoICh1cC0+cG9ydC5pb3R5cGUpIHsKIAljYXNlIFVQSU9fQVU6Ci0JCXNpemUgPSAweDEwMDAwMDsKLQkJLyogZmFsbCB0aHJ1ICovCiAJY2FzZSBVUElPX1RTSToKIAljYXNlIFVQSU9fTUVNMzI6CiAJY2FzZSBVUElPX01FTToKQEAgLTI0MjgsNyArMjQ5Myw3IEBACiBzdGF0aWMgaW50CiBzZXJpYWw4MjUwX3ZlcmlmeV9wb3J0KHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQsIHN0cnVjdCBzZXJpYWxfc3RydWN0ICpzZXIpCiB7Ci0JaWYgKHNlci0+aXJxID49IE5SX0lSUVMgfHwgc2VyLT5pcnEgPCAwIHx8CisJaWYgKHNlci0+aXJxID49IG5yX2lycXMgfHwgc2VyLT5pcnEgPCAwIHx8CiAJICAgIHNlci0+YmF1ZF9iYXNlIDwgOTYwMCB8fCBzZXItPnR5cGUgPCBQT1JUX1VOS05PV04gfHwKIAkgICAgc2VyLT50eXBlID49IEFSUkFZX1NJWkUodWFydF9jb25maWcpIHx8IHNlci0+dHlwZSA9PSBQT1JUX0NJUlJVUyB8fAogCSAgICBzZXItPnR5cGUgPT0gUE9SVF9TVEFSVEVDSCkKQEAgLTI2MzAsNyArMjY5NSw2IEBACiAJcmV0dXJuIHNlcmlhbDgyNTBfZmluZF9wb3J0X2Zvcl9lYXJseWNvbigpOwogfQogCi1zdGF0aWMgc3RydWN0IHVhcnRfZHJpdmVyIHNlcmlhbDgyNTBfcmVnOwogc3RhdGljIHN0cnVjdCBjb25zb2xlIHNlcmlhbDgyNTBfY29uc29sZSA9IHsKIAkubmFtZQkJPSAidHR5UyIsCiAJLndyaXRlCQk9IHNlcmlhbDgyNTBfY29uc29sZV93cml0ZSwKQEAgLTI2NzcsNyArMjc0MSw2IEBACiAJLmRldl9uYW1lCQk9ICJ0dHlTIiwKIAkubWFqb3IJCQk9IFRUWV9NQUpPUiwKIAkubWlub3IJCQk9IDY0LAotCS5ucgkJCT0gVUFSVF9OUiwKIAkuY29ucwkJCT0gU0VSSUFMODI1MF9DT05TT0xFLAogfTsKIApAQCAtMjk1MCw3ICszMDEzLDcgQEAKIAogc3RhdGljIGludCBfX2luaXQgc2VyaWFsODI1MF9pbml0KHZvaWQpCiB7Ci0JaW50IHJldCwgaTsKKwlpbnQgcmV0OwogCiAJaWYgKG5yX3VhcnRzID4gVUFSVF9OUikKIAkJbnJfdWFydHMgPSBVQVJUX05SOwpAQCAtMjk1OSwxMCArMzAyMiwxMiBAQAogCQkiJWQgcG9ydHMsIElSUSBzaGFyaW5nICVzYWJsZWRcbiIsIG5yX3VhcnRzLAogCQlzaGFyZV9pcnFzID8gImVuIiA6ICJkaXMiKTsKIAotCWZvciAoaSA9IDA7IGkgPCBOUl9JUlFTOyBpKyspCi0JCXNwaW5fbG9ja19pbml0KCZpcnFfbGlzdHNbaV0ubG9jayk7Ci0KKyNpZmRlZiBDT05GSUdfU1BBUkMKKwlyZXQgPSBzdW5zZXJpYWxfcmVnaXN0ZXJfbWlub3JzKCZzZXJpYWw4MjUwX3JlZywgVUFSVF9OUik7CisjZWxzZQorCXNlcmlhbDgyNTBfcmVnLm5yID0gVUFSVF9OUjsKIAlyZXQgPSB1YXJ0X3JlZ2lzdGVyX2RyaXZlcigmc2VyaWFsODI1MF9yZWcpOworI2VuZGlmCiAJaWYgKHJldCkKIAkJZ290byBvdXQ7CiAKQEAgLTI5ODQsMTEgKzMwNDksMTUgQEAKIAkJZ290byBvdXQ7CiAKIAlwbGF0Zm9ybV9kZXZpY2VfZGVsKHNlcmlhbDgyNTBfaXNhX2RldnMpOwotIHB1dF9kZXY6CitwdXRfZGV2OgogCXBsYXRmb3JtX2RldmljZV9wdXQoc2VyaWFsODI1MF9pc2FfZGV2cyk7Ci0gdW5yZWdfdWFydF9kcnY6Cit1bnJlZ191YXJ0X2RydjoKKyNpZmRlZiBDT05GSUdfU1BBUkMKKwlzdW5zZXJpYWxfdW5yZWdpc3Rlcl9taW5vcnMoJnNlcmlhbDgyNTBfcmVnLCBVQVJUX05SKTsKKyNlbHNlCiAJdWFydF91bnJlZ2lzdGVyX2RyaXZlcigmc2VyaWFsODI1MF9yZWcpOwotIG91dDoKKyNlbmRpZgorb3V0OgogCXJldHVybiByZXQ7CiB9CiAKQEAgLTMwMDYsNyArMzA3NSwxMSBAQAogCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZzZXJpYWw4MjUwX2lzYV9kcml2ZXIpOwogCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKGlzYV9kZXYpOwogCisjaWZkZWYgQ09ORklHX1NQQVJDCisJc3Vuc2VyaWFsX3VucmVnaXN0ZXJfbWlub3JzKCZzZXJpYWw4MjUwX3JlZywgVUFSVF9OUik7CisjZWxzZQogCXVhcnRfdW5yZWdpc3Rlcl9kcml2ZXIoJnNlcmlhbDgyNTBfcmVnKTsKKyNlbmRpZgogfQogCiBtb2R1bGVfaW5pdChzZXJpYWw4MjUwX2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvODI1MF9nc2MuYyBiL2RyaXZlcnMvc2VyaWFsLzgyNTBfZ3NjLmMKaW5kZXggMDQxNmFkMy4uNDE4YjRmZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvODI1MF9nc2MuYworKysgYi9kcml2ZXJzL3NlcmlhbC84MjUwX2dzYy5jCkBAIC0xMTEsNyArMTExLDcgQEAKIAkucHJvYmUJCT0gc2VyaWFsX2luaXRfY2hpcCwKIH07CiAKLWludCBfX2luaXQgcHJvYmVfc2VyaWFsX2dzYyh2b2lkKQorc3RhdGljIGludCBfX2luaXQgcHJvYmVfc2VyaWFsX2dzYyh2b2lkKQogewogCXJlZ2lzdGVyX3BhcmlzY19kcml2ZXIoJmxhc2lfZHJpdmVyKTsKIAlyZWdpc3Rlcl9wYXJpc2NfZHJpdmVyKCZzZXJpYWxfZHJpdmVyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsLzgyNTBfcGNpLmMgYi9kcml2ZXJzL3NlcmlhbC84MjUwX3BjaS5jCmluZGV4IGMyZjIzOTMuLmMwMTRmZmIxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC84MjUwX3BjaS5jCisrKyBiL2RyaXZlcnMvc2VyaWFsLzgyNTBfcGNpLmMKQEAgLTIwNDEsOSArMjA0MSw5IEBACiAJCSAqIFRoZSBkZXZpY2UgbWF5IGhhdmUgYmVlbiBkaXNhYmxlZC4gIFJlLWVuYWJsZSBpdC4KIAkJICovCiAJCWVyciA9IHBjaV9lbmFibGVfZGV2aWNlKGRldik7CisJCS8qIEZJWE1FOiBXZSBjYW5ub3Qgc2ltcGx5IGVycm9yIG91dCBoZXJlICovCiAJCWlmIChlcnIpCi0JCQlyZXR1cm4gZXJyOwotCisJCQlwcmludGsoS0VSTl9FUlIgInBjaXNlcmlhbDogVW5hYmxlIHRvIHJlLWVuYWJsZSBwb3J0cywgdHJ5aW5nIHRvIGNvbnRpbnVlLlxuIik7CiAJCXBjaXNlcmlhbF9yZXN1bWVfcG9ydHMocHJpdik7CiAJfQogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvS2NvbmZpZyBiL2RyaXZlcnMvc2VyaWFsL0tjb25maWcKaW5kZXggNzdjYjM0Mi4uZGI3ODNiNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvS2NvbmZpZworKysgYi9kcml2ZXJzL3NlcmlhbC9LY29uZmlnCkBAIC05LDcgKzksNiBAQAogIyBUaGUgbmV3IDgyNTAvMTY1NTAgc2VyaWFsIGRyaXZlcnMKIGNvbmZpZyBTRVJJQUxfODI1MAogCXRyaXN0YXRlICI4MjUwLzE2NTUwIGFuZCBjb21wYXRpYmxlIHNlcmlhbCBzdXBwb3J0IgotCWRlcGVuZHMgb24gKEJST0tFTiB8fCAhU1BBUkMpCiAJc2VsZWN0IFNFUklBTF9DT1JFCiAJLS0taGVscC0tLQogCSAgVGhpcyBzZWxlY3RzIHdoZXRoZXIgeW91IHdhbnQgdG8gaW5jbHVkZSB0aGUgZHJpdmVyIGZvciB0aGUgc3RhbmRhcmQKQEAgLTk5NCwyNCArOTkzLDEyIEBACiAJYm9vbCAiU3VwcG9ydCBSVFMvQ1RTIG9uIDY4MzI4IHNlcmlhbCBwb3J0IgogCWRlcGVuZHMgb24gU0VSSUFMXzY4MzI4CiAKLWNvbmZpZyBTRVJJQUxfQ09MREZJUkUKLQlib29sICJDb2xkRmlyZSBzZXJpYWwgc3VwcG9ydCAoREVQUkVDQVRFRCkiCi0JZGVwZW5kcyBvbiBDT0xERklSRQotCWhlbHAKLQkgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIHRoZSBidWlsdC1pbiBzZXJpYWwgcG9ydHMgb2YgdGhlIE1vdG9yb2xhIENvbGRGaXJlCi0JICBmYW1pbHkgb2YgQ1BVcy4KLQkgIFRoaXMgZHJpdmVyIGlzIGRlcHJlY2F0ZWQgYmVjYXVzZSBpdCBzdXBwb3J0cyBvbmx5IHRoZSBvbGQgaW50ZXJmYWNlCi0JICBmb3Igc2VyaWFsIGRyaXZlcnMgYW5kIGZlYXR1cmVzIGxpa2UgbWFnaWMga2V5cyBhcmUgbm90IHdvcmtpbmcuCi0JICBQbGVhc2Ugc3dpdGNoIHRvIHRoZSBuZXcgc3R5bGUgZHJpdmVyIGJlY2F1c2UgdGhpcyBkcml2ZXIgd2lsbCBiZQotCSAgcmVtb3ZlZCBzb29uLgotCiBjb25maWcgU0VSSUFMX01DRgotCWJvb2wgIkNvbGRmaXJlIHNlcmlhbCBzdXBwb3J0IChuZXcgc3R5bGUgZHJpdmVyKSIKKwlib29sICJDb2xkZmlyZSBzZXJpYWwgc3VwcG9ydCIKIAlkZXBlbmRzIG9uIENPTERGSVJFCiAJc2VsZWN0IFNFUklBTF9DT1JFCiAJaGVscAotCSAgVGhpcyBuZXcgc2VyaWFsIGRyaXZlciBzdXBwb3J0cyB0aGUgRnJlZXNjYWxlIENvbGRmaXJlIHNlcmlhbCBwb3J0cwotCSAgdXNpbmcgdGhlIG5ldyBzZXJpYWwgZHJpdmVyIHN1YnN5c3RlbS4KKwkgIFRoaXMgc2VyaWFsIGRyaXZlciBzdXBwb3J0cyB0aGUgRnJlZXNjYWxlIENvbGRmaXJlIHNlcmlhbCBwb3J0cy4KIAogY29uZmlnIFNFUklBTF9NQ0ZfQkFVRFJBVEUKIAlpbnQgIkRlZmF1bHQgYmF1ZHJhdGUgZm9yIENvbGRmaXJlIHNlcmlhbCBwb3J0cyIKQEAgLTExMzYsNDIgKzExMjMsNiBAQAogCSAgeW91ciBib290IGxvYWRlciAobGlsbyBvciBsb2FkbGluKSBhYm91dCBob3cgdG8gcGFzcyBvcHRpb25zIHRvIHRoZQogCSAga2VybmVsIGF0IGJvb3QgdGltZS4pCiAKLWNvbmZpZyBTRVJJQUxfQ1BNX1NDQzEKLQlib29sICJTdXBwb3J0IGZvciBTQ0MxIHNlcmlhbCBwb3J0IgotCWRlcGVuZHMgb24gU0VSSUFMX0NQTT15Ci0JaGVscAotCSAgU2VsZWN0IHRoaXMgb3B0aW9uIHRvIHVzZSBTQ0MxIGFzIGEgc2VyaWFsIHBvcnQKLQotY29uZmlnIFNFUklBTF9DUE1fU0NDMgotCWJvb2wgIlN1cHBvcnQgZm9yIFNDQzIgc2VyaWFsIHBvcnQiCi0JZGVwZW5kcyBvbiBTRVJJQUxfQ1BNPXkKLQloZWxwCi0JICBTZWxlY3QgdGhpcyBvcHRpb24gdG8gdXNlIFNDQzIgYXMgYSBzZXJpYWwgcG9ydAotCi1jb25maWcgU0VSSUFMX0NQTV9TQ0MzCi0JYm9vbCAiU3VwcG9ydCBmb3IgU0NDMyBzZXJpYWwgcG9ydCIKLQlkZXBlbmRzIG9uIFNFUklBTF9DUE09eQotCWhlbHAKLQkgIFNlbGVjdCB0aGlzIG9wdGlvbiB0byB1c2UgU0NDMyBhcyBhIHNlcmlhbCBwb3J0Ci0KLWNvbmZpZyBTRVJJQUxfQ1BNX1NDQzQKLQlib29sICJTdXBwb3J0IGZvciBTQ0M0IHNlcmlhbCBwb3J0IgotCWRlcGVuZHMgb24gU0VSSUFMX0NQTT15Ci0JaGVscAotCSAgU2VsZWN0IHRoaXMgb3B0aW9uIHRvIHVzZSBTQ0M0IGFzIGEgc2VyaWFsIHBvcnQKLQotY29uZmlnIFNFUklBTF9DUE1fU01DMQotCWJvb2wgIlN1cHBvcnQgZm9yIFNNQzEgc2VyaWFsIHBvcnQiCi0JZGVwZW5kcyBvbiBTRVJJQUxfQ1BNPXkKLQloZWxwCi0JICBTZWxlY3QgdGhpcyBvcHRpb24gdG8gdXNlIFNNQzEgYXMgYSBzZXJpYWwgcG9ydAotCi1jb25maWcgU0VSSUFMX0NQTV9TTUMyCi0JYm9vbCAiU3VwcG9ydCBmb3IgU01DMiBzZXJpYWwgcG9ydCIKLQlkZXBlbmRzIG9uIFNFUklBTF9DUE09eQotCWhlbHAKLQkgIFNlbGVjdCB0aGlzIG9wdGlvbiB0byB1c2UgU01DMiBhcyBhIHNlcmlhbCBwb3J0Ci0KIGNvbmZpZyBTRVJJQUxfU0dJX0wxX0NPTlNPTEUKIAlib29sICJTR0kgQWx0aXggTDEgc2VyaWFsIGNvbnNvbGUgc3VwcG9ydCIKIAlkZXBlbmRzIG9uIElBNjRfR0VORVJJQyB8fCBJQTY0X1NHSV9TTjIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL01ha2VmaWxlIGIvZHJpdmVycy9zZXJpYWwvTWFrZWZpbGUKaW5kZXggN2U3MzgzZS4uMGMxN2M4ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9zZXJpYWwvTWFrZWZpbGUKQEAgLTQsNiArNCwxNiBAQAogCiBvYmotJChDT05GSUdfU0VSSUFMX0NPUkUpICs9IHNlcmlhbF9jb3JlLm8KIG9iai0kKENPTkZJR19TRVJJQUxfMjEyODUpICs9IDIxMjg1Lm8KKworIyBUaGVzZSBTcGFyYyBkcml2ZXJzIGhhdmUgdG8gYXBwZWFyIGJlZm9yZSBvdGhlcnMgc3VjaCBhcyA4MjUwCisjIHdoaWNoIHNoYXJlIHR0eVN4IG1pbm9yIG5vZGUgc3BhY2UuICBPdGhlcndpc2UgY29uc29sZSBkZXZpY2UKKyMgbmFtZXMgY2hhbmdlIGFuZCBvdGhlciB1bnBsZXNhbnRyaWVzLgorb2JqLSQoQ09ORklHX1NFUklBTF9TVU5DT1JFKSArPSBzdW5jb3JlLm8KK29iai0kKENPTkZJR19TRVJJQUxfU1VOSFYpICs9IHN1bmh2Lm8KK29iai0kKENPTkZJR19TRVJJQUxfU1VOWklMT0cpICs9IHN1bnppbG9nLm8KK29iai0kKENPTkZJR19TRVJJQUxfU1VOU1UpICs9IHN1bnN1Lm8KK29iai0kKENPTkZJR19TRVJJQUxfU1VOU0FCKSArPSBzdW5zYWIubworCiBvYmotJChDT05GSUdfU0VSSUFMXzgyNTApICs9IDgyNTAubwogb2JqLSQoQ09ORklHX1NFUklBTF84MjUwX1BOUCkgKz0gODI1MF9wbnAubwogb2JqLSQoQ09ORklHX1NFUklBTF84MjUwX0dTQykgKz0gODI1MF9nc2MubwpAQCAtMzEsMTYgKzQxLDEwIEBACiBvYmotJChDT05GSUdfU0VSSUFMX1MzQzI0MTApICs9IHMzYzI0MTAubwogb2JqLSQoQ09ORklHX1NFUklBTF9TM0MyNDEyKSArPSBzM2MyNDEyLm8KIG9iai0kKENPTkZJR19TRVJJQUxfUzNDMjQ0MCkgKz0gczNjMjQ0MC5vCi1vYmotJChDT05GSUdfU0VSSUFMX1NVTkNPUkUpICs9IHN1bmNvcmUubwotb2JqLSQoQ09ORklHX1NFUklBTF9TVU5IVikgKz0gc3VuaHYubwotb2JqLSQoQ09ORklHX1NFUklBTF9TVU5aSUxPRykgKz0gc3Vuemlsb2cubwogb2JqLSQoQ09ORklHX1NFUklBTF9JUDIyX1pJTE9HKSArPSBpcDIyemlsb2cubwotb2JqLSQoQ09ORklHX1NFUklBTF9TVU5TVSkgKz0gc3Vuc3Uubwotb2JqLSQoQ09ORklHX1NFUklBTF9TVU5TQUIpICs9IHN1bnNhYi5vCiBvYmotJChDT05GSUdfU0VSSUFMX01VWCkgKz0gbXV4Lm8KIG9iai0kKENPTkZJR19TRVJJQUxfNjgzMjgpICs9IDY4MzI4c2VyaWFsLm8KIG9iai0kKENPTkZJR19TRVJJQUxfNjgzNjApICs9IDY4MzYwc2VyaWFsLm8KLW9iai0kKENPTkZJR19TRVJJQUxfQ09MREZJUkUpICs9IG1jZnNlcmlhbC5vCiBvYmotJChDT05GSUdfU0VSSUFMX01DRikgKz0gbWNmLm8KIG9iai0kKENPTkZJR19TRVJJQUxfUE1BQ1pJTE9HKSArPSBwbWFjX3ppbG9nLm8KIG9iai0kKENPTkZJR19TRVJJQUxfTEg3QTQwWCkgKz0gc2VyaWFsX2xoN2E0MHgubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvYW1iYS1wbDAxMC5jIGIvZHJpdmVycy9zZXJpYWwvYW1iYS1wbDAxMC5jCmluZGV4IDkwYjU2YzIuLjcxNTYyNjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL2FtYmEtcGwwMTAuYworKysgYi9kcml2ZXJzL3NlcmlhbC9hbWJhLXBsMDEwLmMKQEAgLTUxMiw3ICs1MTIsNyBAQAogCWludCByZXQgPSAwOwogCWlmIChzZXItPnR5cGUgIT0gUE9SVF9VTktOT1dOICYmIHNlci0+dHlwZSAhPSBQT1JUX0FNQkEpCiAJCXJldCA9IC1FSU5WQUw7Ci0JaWYgKHNlci0+aXJxIDwgMCB8fCBzZXItPmlycSA+PSBOUl9JUlFTKQorCWlmIChzZXItPmlycSA8IDAgfHwgc2VyLT5pcnEgPj0gbnJfaXJxcykKIAkJcmV0ID0gLUVJTlZBTDsKIAlpZiAoc2VyLT5iYXVkX2Jhc2UgPCA5NjAwKQogCQlyZXQgPSAtRUlOVkFMOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvYW1iYS1wbDAxMS5jIGIvZHJpdmVycy9zZXJpYWwvYW1iYS1wbDAxMS5jCmluZGV4IDlkMDhmMjcuLmI3MTgwMDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL2FtYmEtcGwwMTEuYworKysgYi9kcml2ZXJzL3NlcmlhbC9hbWJhLXBsMDExLmMKQEAgLTU3Miw3ICs1NzIsNyBAQAogCWludCByZXQgPSAwOwogCWlmIChzZXItPnR5cGUgIT0gUE9SVF9VTktOT1dOICYmIHNlci0+dHlwZSAhPSBQT1JUX0FNQkEpCiAJCXJldCA9IC1FSU5WQUw7Ci0JaWYgKHNlci0+aXJxIDwgMCB8fCBzZXItPmlycSA+PSBOUl9JUlFTKQorCWlmIChzZXItPmlycSA8IDAgfHwgc2VyLT5pcnEgPj0gbnJfaXJxcykKIAkJcmV0ID0gLUVJTlZBTDsKIAlpZiAoc2VyLT5iYXVkX2Jhc2UgPCA5NjAwKQogCQlyZXQgPSAtRUlOVkFMOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvYmZpbl81eHguYyBiL2RyaXZlcnMvc2VyaWFsL2JmaW5fNXh4LmMKaW5kZXggNGEwZDMwYi4uNTY5ZjBlMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvYmZpbl81eHguYworKysgYi9kcml2ZXJzL3NlcmlhbC9iZmluXzV4eC5jCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqIEJsYWNrZmluIE9uLUNoaXAgU2VyaWFsIERyaXZlcgogICoKLSAqIENvcHlyaWdodCAyMDA2LTIwMDcgQW5hbG9nIERldmljZXMgSW5jLgorICogQ29weXJpZ2h0IDIwMDYtMjAwOCBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgogICogRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCiAgKgpAQCAtNDIsNiArNDIsOSBAQAogI2RlZmluZSBCRklOX1NFUklBTF9NQUpPUgkyMDQKICNkZWZpbmUgQkZJTl9TRVJJQUxfTUlOT1IJNjQKIAorc3RhdGljIHN0cnVjdCBiZmluX3NlcmlhbF9wb3J0IGJmaW5fc2VyaWFsX3BvcnRzW0JGSU5fVUFSVF9OUl9QT1JUU107CitzdGF0aWMgaW50IG5yX2FjdGl2ZV9wb3J0cyA9IEFSUkFZX1NJWkUoYmZpbl9zZXJpYWxfcmVzb3VyY2UpOworCiAvKgogICogU2V0dXAgZm9yIGNvbnNvbGUuIEFyZ3VtZW50IGNvbWVzIGZyb20gdGhlIG1lbnVjb25maWcKICAqLwpAQCAtMTI2LDEzICsxMjksMTMgQEAKIHZvaWQga2dkYl9wdXRfZGVidWdfY2hhcihpbnQgY2hyKQogewogCXN0cnVjdCBiZmluX3NlcmlhbF9wb3J0ICp1YXJ0OwotCQorCiAJaWYgKENPTkZJR19LR0RCX1VBUlRfUE9SVCA8IDAKIAkJfHwgQ09ORklHX0tHREJfVUFSVF9QT1JUID49IEJGSU5fVUFSVF9OUl9QT1JUUykKIAkJdWFydCA9ICZiZmluX3NlcmlhbF9wb3J0c1swXTsKIAllbHNlCiAJCXVhcnQgPSAmYmZpbl9zZXJpYWxfcG9ydHNbQ09ORklHX0tHREJfVUFSVF9QT1JUXTsKLQkKKwogCXdoaWxlICghKFVBUlRfR0VUX0xTUih1YXJ0KSAmIFRIUkUpKSB7CiAJCVNTWU5DKCk7CiAJfQpAQCAtMTUyLDcgKzE1NSw3IEBACiAJCXVhcnQgPSAmYmZpbl9zZXJpYWxfcG9ydHNbMF07CiAJZWxzZQogCQl1YXJ0ID0gJmJmaW5fc2VyaWFsX3BvcnRzW0NPTkZJR19LR0RCX1VBUlRfUE9SVF07Ci0JCisKIAl3aGlsZSghKFVBUlRfR0VUX0xTUih1YXJ0KSAmIERSKSkgewogCQlTU1lOQygpOwogCX0KQEAgLTI5OCw3ICszMDEsMTEgQEAKIAliZmluX3NlcmlhbF9tY3RybF9jaGVjayh1YXJ0KTsKIAogCWlmICh1YXJ0X2NpcmNfZW1wdHkoeG1pdCkgfHwgdWFydF90eF9zdG9wcGVkKCZ1YXJ0LT5wb3J0KSkgewotCQliZmluX3NlcmlhbF9zdG9wX3R4KCZ1YXJ0LT5wb3J0KTsKKyNpZmRlZiBDT05GSUdfQkY1NHgKKwkJLyogQ2xlYXIgVEZJIGJpdCAqLworCQlVQVJUX1BVVF9MU1IodWFydCwgVEZJKTsKKyNlbmRpZgorCQlVQVJUX0NMRUFSX0lFUih1YXJ0LCBFVEJFSSk7CiAJCXJldHVybjsKIAl9CiAKQEAgLTMxNyw5ICszMjQsNiBAQAogCiAJaWYgKHVhcnRfY2lyY19jaGFyc19wZW5kaW5nKHhtaXQpIDwgV0FLRVVQX0NIQVJTKQogCQl1YXJ0X3dyaXRlX3dha2V1cCgmdWFydC0+cG9ydCk7Ci0KLQlpZiAodWFydF9jaXJjX2VtcHR5KHhtaXQpKQotCQliZmluX3NlcmlhbF9zdG9wX3R4KCZ1YXJ0LT5wb3J0KTsKIH0KIAogc3RhdGljIGlycXJldHVybl90IGJmaW5fc2VyaWFsX3J4X2ludChpbnQgaXJxLCB2b2lkICpkZXZfaWQpCkBAIC02NDUsNiArNjQ5LDQyIEBACiAJCWZyZWVfaXJxKHVhcnQtPnBvcnQuaXJxLCB1YXJ0KTsKIAkJcmV0dXJuIC1FQlVTWTsKIAl9CisKKyMgaWZkZWYgQ09ORklHX0JGNTR4CisJeworCQl1bnNpZ25lZCB1YXJ0X2RtYV9jaF9yeCwgdWFydF9kbWFfY2hfdHg7CisKKwkJc3dpdGNoICh1YXJ0LT5wb3J0LmlycSkgeworCQljYXNlIElSUV9VQVJUM19SWDoKKwkJCXVhcnRfZG1hX2NoX3J4ID0gQ0hfVUFSVDNfUlg7CisJCQl1YXJ0X2RtYV9jaF90eCA9IENIX1VBUlQzX1RYOworCQkJYnJlYWs7CisJCWNhc2UgSVJRX1VBUlQyX1JYOgorCQkJdWFydF9kbWFfY2hfcnggPSBDSF9VQVJUMl9SWDsKKwkJCXVhcnRfZG1hX2NoX3R4ID0gQ0hfVUFSVDJfVFg7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXVhcnRfZG1hX2NoX3J4ID0gdWFydF9kbWFfY2hfdHggPSAwOworCQkJYnJlYWs7CisJCX07CisKKwkJaWYgKHVhcnRfZG1hX2NoX3J4ICYmCisJCQlyZXF1ZXN0X2RtYSh1YXJ0X2RtYV9jaF9yeCwgIkJGSU5fVUFSVF9SWCIpIDwgMCkgeworCQkJcHJpbnRrKEtFUk5fTk9USUNFIkZhaWwgdG8gYXR0YWNoIFVBUlQgaW50ZXJydXB0XG4iKTsKKwkJCWZyZWVfaXJxKHVhcnQtPnBvcnQuaXJxLCB1YXJ0KTsKKwkJCWZyZWVfaXJxKHVhcnQtPnBvcnQuaXJxICsgMSwgdWFydCk7CisJCQlyZXR1cm4gLUVCVVNZOworCQl9CisJCWlmICh1YXJ0X2RtYV9jaF90eCAmJgorCQkJcmVxdWVzdF9kbWEodWFydF9kbWFfY2hfdHgsICJCRklOX1VBUlRfVFgiKSA8IDApIHsKKwkJCXByaW50ayhLRVJOX05PVElDRSAiRmFpbCB0byBhdHRhY2ggVUFSVCBpbnRlcnJ1cHRcbiIpOworCQkJZnJlZV9kbWEodWFydF9kbWFfY2hfcngpOworCQkJZnJlZV9pcnEodWFydC0+cG9ydC5pcnEsIHVhcnQpOworCQkJZnJlZV9pcnEodWFydC0+cG9ydC5pcnEgKyAxLCB1YXJ0KTsKKwkJCXJldHVybiAtRUJVU1k7CisJCX0KKwl9CisjIGVuZGlmCiAjZW5kaWYKIAlVQVJUX1NFVF9JRVIodWFydCwgRVJCRkkpOwogCXJldHVybiAwOwpAQCAtNjYyLDYgKzcwMiwyMCBAQAogCWRlbF90aW1lcigmKHVhcnQtPnJ4X2RtYV90aW1lcikpOwogCWRtYV9mcmVlX2NvaGVyZW50KE5VTEwsIFBBR0VfU0laRSwgdWFydC0+cnhfZG1hX2J1Zi5idWYsIDApOwogI2Vsc2UKKyNpZmRlZiBDT05GSUdfQkY1NHgKKwlzd2l0Y2ggKHVhcnQtPnBvcnQuaXJxKSB7CisJY2FzZSBJUlFfVUFSVDNfUlg6CisJCWZyZWVfZG1hKENIX1VBUlQzX1JYKTsKKwkJZnJlZV9kbWEoQ0hfVUFSVDNfVFgpOworCQlicmVhazsKKwljYXNlIElSUV9VQVJUMl9SWDoKKwkJZnJlZV9kbWEoQ0hfVUFSVDJfUlgpOworCQlmcmVlX2RtYShDSF9VQVJUMl9UWCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX07CisjZW5kaWYKICNpZmRlZglDT05GSUdfS0dEQl9VQVJUCiAJaWYgKHVhcnQtPnBvcnQubGluZSAhPSBDT05GSUdfS0dEQl9VQVJUX1BPUlQpCiAjZW5kaWYKQEAgLTc1Nyw2ICs4MTEsOSBAQAogCXZhbCB8PSBVQ0VOOwogCVVBUlRfUFVUX0dDVEwodWFydCwgdmFsKTsKIAorCS8qIFBvcnQgc3BlZWQgY2hhbmdlZCwgdXBkYXRlIHRoZSBwZXItcG9ydCB0aW1lb3V0LiAqLworCXVhcnRfdXBkYXRlX3RpbWVvdXQocG9ydCwgdGVybWlvcy0+Y19jZmxhZywgYmF1ZCk7CisKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ1YXJ0LT5wb3J0LmxvY2ssIGZsYWdzKTsKIH0KIApAQCAtODU5LDggKzkxNiw5IEBACiAJCXJldHVybjsKIAlmaXJzdCA9IDA7CiAKLQlmb3IgKGkgPSAwOyBpIDwgbnJfcG9ydHM7IGkrKykgeworCWZvciAoaSA9IDA7IGkgPCBucl9hY3RpdmVfcG9ydHM7IGkrKykgewogCQliZmluX3NlcmlhbF9wb3J0c1tpXS5wb3J0LnVhcnRjbGsgICA9IGdldF9zY2xrKCk7CisJCWJmaW5fc2VyaWFsX3BvcnRzW2ldLnBvcnQuZmlmb3NpemUgID0gQkZJTl9VQVJUX1RYX0ZJRk9fU0laRTsKIAkJYmZpbl9zZXJpYWxfcG9ydHNbaV0ucG9ydC5vcHMgICAgICAgPSAmYmZpbl9zZXJpYWxfcG9wczsKIAkJYmZpbl9zZXJpYWxfcG9ydHNbaV0ucG9ydC5saW5lICAgICAgPSBpOwogCQliZmluX3NlcmlhbF9wb3J0c1tpXS5wb3J0LmlvdHlwZSAgICA9IFVQSU9fTUVNOwpAQCAtOTYxLDcgKzEwMTksNyBAQAogCSAqIGlmIHNvLCBzZWFyY2ggZm9yIHRoZSBmaXJzdCBhdmFpbGFibGUgcG9ydCB0aGF0IGRvZXMgaGF2ZQogCSAqIGNvbnNvbGUgc3VwcG9ydC4KIAkgKi8KLQlpZiAoY28tPmluZGV4ID09IC0xIHx8IGNvLT5pbmRleCA+PSBucl9wb3J0cykKKwlpZiAoY28tPmluZGV4ID09IC0xIHx8IGNvLT5pbmRleCA+PSBucl9hY3RpdmVfcG9ydHMpCiAJCWNvLT5pbmRleCA9IDA7CiAJdWFydCA9ICZiZmluX3NlcmlhbF9wb3J0c1tjby0+aW5kZXhdOwogCkBAIC0xMDU2LDcgKzExMTQsNyBAQAogCX0KIH0KIAotc3RhdGljIHN0cnVjdCBfX2luaXQgY29uc29sZSBiZmluX2Vhcmx5X3NlcmlhbF9jb25zb2xlID0geworc3RhdGljIHN0cnVjdCBfX2luaXRkYXRhIGNvbnNvbGUgYmZpbl9lYXJseV9zZXJpYWxfY29uc29sZSA9IHsKIAkubmFtZSA9ICJlYXJseV9CRnVhcnQiLAogCS53cml0ZSA9IGVhcmx5X3NlcmlhbF93cml0ZSwKIAkuZGV2aWNlID0gdWFydF9jb25zb2xlX2RldmljZSwKQEAgLTEwNzIsNyArMTEzMCw3IEBACiAJc3RydWN0IGJmaW5fc2VyaWFsX3BvcnQgKnVhcnQ7CiAJc3RydWN0IGt0ZXJtaW9zIHQ7CiAKLQlpZiAocG9ydCA9PSAtMSB8fCBwb3J0ID49IG5yX3BvcnRzKQorCWlmIChwb3J0ID09IC0xIHx8IHBvcnQgPj0gbnJfYWN0aXZlX3BvcnRzKQogCQlwb3J0ID0gMDsKIAliZmluX3NlcmlhbF9pbml0X3BvcnRzKCk7CiAJYmZpbl9lYXJseV9zZXJpYWxfY29uc29sZS5pbmRleCA9IHBvcnQ7CkBAIC0xMTAwLDIwICsxMTU4LDI2IEBACiAKIHN0YXRpYyBpbnQgYmZpbl9zZXJpYWxfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKLQlzdHJ1Y3QgYmZpbl9zZXJpYWxfcG9ydCAqdWFydCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CisJaW50IGk7CiAKLQlpZiAodWFydCkKLQkJdWFydF9zdXNwZW5kX3BvcnQoJmJmaW5fc2VyaWFsX3JlZywgJnVhcnQtPnBvcnQpOworCWZvciAoaSA9IDA7IGkgPCBucl9hY3RpdmVfcG9ydHM7IGkrKykgeworCQlpZiAoYmZpbl9zZXJpYWxfcG9ydHNbaV0ucG9ydC5kZXYgIT0gJmRldi0+ZGV2KQorCQkJY29udGludWU7CisJCXVhcnRfc3VzcGVuZF9wb3J0KCZiZmluX3NlcmlhbF9yZWcsICZiZmluX3NlcmlhbF9wb3J0c1tpXS5wb3J0KTsKKwl9CiAKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBiZmluX3NlcmlhbF9yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewotCXN0cnVjdCBiZmluX3NlcmlhbF9wb3J0ICp1YXJ0ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKKwlpbnQgaTsKIAotCWlmICh1YXJ0KQotCQl1YXJ0X3Jlc3VtZV9wb3J0KCZiZmluX3NlcmlhbF9yZWcsICZ1YXJ0LT5wb3J0KTsKKwlmb3IgKGkgPSAwOyBpIDwgbnJfYWN0aXZlX3BvcnRzOyBpKyspIHsKKwkJaWYgKGJmaW5fc2VyaWFsX3BvcnRzW2ldLnBvcnQuZGV2ICE9ICZkZXYtPmRldikKKwkJCWNvbnRpbnVlOworCQl1YXJ0X3Jlc3VtZV9wb3J0KCZiZmluX3NlcmlhbF9yZWcsICZiZmluX3NlcmlhbF9wb3J0c1tpXS5wb3J0KTsKKwl9CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTExMjgsMzIgKzExOTIsMzEgQEAKIAkJCWJyZWFrOwogCiAJaWYgKGkgPCBkZXYtPm51bV9yZXNvdXJjZXMpIHsKLQkJZm9yIChpID0gMDsgaSA8IG5yX3BvcnRzOyBpKyssIHJlcysrKSB7CisJCWZvciAoaSA9IDA7IGkgPCBucl9hY3RpdmVfcG9ydHM7IGkrKywgcmVzKyspIHsKIAkJCWlmIChiZmluX3NlcmlhbF9wb3J0c1tpXS5wb3J0Lm1hcGJhc2UgIT0gcmVzLT5zdGFydCkKIAkJCQljb250aW51ZTsKIAkJCWJmaW5fc2VyaWFsX3BvcnRzW2ldLnBvcnQuZGV2ID0gJmRldi0+ZGV2OwogCQkJdWFydF9hZGRfb25lX3BvcnQoJmJmaW5fc2VyaWFsX3JlZywgJmJmaW5fc2VyaWFsX3BvcnRzW2ldLnBvcnQpOwotCQkJcGxhdGZvcm1fc2V0X2RydmRhdGEoZGV2LCAmYmZpbl9zZXJpYWxfcG9ydHNbaV0pOwogCQl9CiAJfQogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgYmZpbl9zZXJpYWxfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCitzdGF0aWMgaW50IGJmaW5fc2VyaWFsX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IGJmaW5fc2VyaWFsX3BvcnQgKnVhcnQgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlpbnQgaTsKIAotCisJZm9yIChpID0gMDsgaSA8IG5yX2FjdGl2ZV9wb3J0czsgaSsrKSB7CisJCWlmIChiZmluX3NlcmlhbF9wb3J0c1tpXS5wb3J0LmRldiAhPSAmZGV2LT5kZXYpCisJCQljb250aW51ZTsKKwkJdWFydF9yZW1vdmVfb25lX3BvcnQoJmJmaW5fc2VyaWFsX3JlZywgJmJmaW5fc2VyaWFsX3BvcnRzW2ldLnBvcnQpOworCQliZmluX3NlcmlhbF9wb3J0c1tpXS5wb3J0LmRldiA9IE5VTEw7CiAjaWZkZWYgQ09ORklHX1NFUklBTF9CRklOX0NUU1JUUwotCWdwaW9fZnJlZSh1YXJ0LT5jdHNfcGluKTsKLQlncGlvX2ZyZWUodWFydC0+cnRzX3Bpbik7CisJCWdwaW9fZnJlZShiZmluX3NlcmlhbF9wb3J0c1tpXS5jdHNfcGluKTsKKwkJZ3Bpb19mcmVlKGJmaW5fc2VyaWFsX3BvcnRzW2ldLnJ0c19waW4pOwogI2VuZGlmCi0KLQlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKLQotCWlmICh1YXJ0KQotCQl1YXJ0X3JlbW92ZV9vbmVfcG9ydCgmYmZpbl9zZXJpYWxfcmVnLCAmdWFydC0+cG9ydCk7CisJfQogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9jcG1fdWFydC9jcG1fdWFydF9jb3JlLmMgYi9kcml2ZXJzL3NlcmlhbC9jcG1fdWFydC9jcG1fdWFydF9jb3JlLmMKaW5kZXggMjVlZmNhNS4uYmRlNGI0YjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL2NwbV91YXJ0L2NwbV91YXJ0X2NvcmUuYworKysgYi9kcml2ZXJzL3NlcmlhbC9jcG1fdWFydC9jcG1fdWFydF9jb3JlLmMKQEAgLTYyMyw3ICs2MjMsNyBAQAogCiAJaWYgKHNlci0+dHlwZSAhPSBQT1JUX1VOS05PV04gJiYgc2VyLT50eXBlICE9IFBPUlRfQ1BNKQogCQlyZXQgPSAtRUlOVkFMOwotCWlmIChzZXItPmlycSA8IDAgfHwgc2VyLT5pcnEgPj0gTlJfSVJRUykKKwlpZiAoc2VyLT5pcnEgPCAwIHx8IHNlci0+aXJxID49IG5yX2lycXMpCiAJCXJldCA9IC1FSU5WQUw7CiAJaWYgKHNlci0+YmF1ZF9iYXNlIDwgOTYwMCkKIAkJcmV0ID0gLUVJTlZBTDsKQEAgLTEzMzMsNiArMTMzMyw5IEBACiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIAorCS8qIGluaXRpYWxpemUgdGhlIGRldmljZSBwb2ludGVyIGZvciB0aGUgcG9ydCAqLworCXBpbmZvLT5wb3J0LmRldiA9ICZvZmRldi0+ZGV2OworCiAJcmV0dXJuIHVhcnRfYWRkX29uZV9wb3J0KCZjcG1fcmVnLCAmcGluZm8tPnBvcnQpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9jcG1fdWFydC9jcG1fdWFydF9jcG0xLmMgYi9kcml2ZXJzL3NlcmlhbC9jcG1fdWFydC9jcG1fdWFydF9jcG0xLmMKaW5kZXggMGYwYWZmMC4uMWI5NGM1NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvY3BtX3VhcnQvY3BtX3VhcnRfY3BtMS5jCisrKyBiL2RyaXZlcnMvc2VyaWFsL2NwbV91YXJ0L2NwbV91YXJ0X2NwbTEuYwpAQCAtMTAwLDcgKzEwMCw3IEBACiAJCW1lbV9hZGRyID0gKHU4ICopIGNwbV9kcHJhbV9hZGRyKGNwbV9kcGFsbG9jKG1lbXN6LCA4KSk7CiAJCWRtYV9hZGRyID0gKHUzMiljcG1fZHByYW1fcGh5cyhtZW1fYWRkcik7CiAJfSBlbHNlCi0JCW1lbV9hZGRyID0gZG1hX2FsbG9jX2NvaGVyZW50KE5VTEwsIG1lbXN6LCAmZG1hX2FkZHIsCisJCW1lbV9hZGRyID0gZG1hX2FsbG9jX2NvaGVyZW50KHBpbmZvLT5wb3J0LmRldiwgbWVtc3osICZkbWFfYWRkciwKIAkJCQkJICAgICAgR0ZQX0tFUk5FTCk7CiAKIAlpZiAobWVtX2FkZHIgPT0gTlVMTCkgewpAQCAtMTI3LDggKzEyNyw4IEBACiAKIHZvaWQgY3BtX3VhcnRfZnJlZWJ1ZihzdHJ1Y3QgdWFydF9jcG1fcG9ydCAqcGluZm8pCiB7Ci0JZG1hX2ZyZWVfY29oZXJlbnQoTlVMTCwgTDFfQ0FDSEVfQUxJR04ocGluZm8tPnJ4X25yZmlmb3MgKgotCQkJCQkgICAgICAgcGluZm8tPnJ4X2ZpZm9zaXplKSArCisJZG1hX2ZyZWVfY29oZXJlbnQocGluZm8tPnBvcnQuZGV2LCBMMV9DQUNIRV9BTElHTihwaW5mby0+cnhfbnJmaWZvcyAqCisJCQkJCQkJICBwaW5mby0+cnhfZmlmb3NpemUpICsKIAkJCSAgTDFfQ0FDSEVfQUxJR04ocGluZm8tPnR4X25yZmlmb3MgKgogCQkJCQkgcGluZm8tPnR4X2ZpZm9zaXplKSwgcGluZm8tPm1lbV9hZGRyLAogCQkJICBwaW5mby0+ZG1hX2FkZHIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvY3BtX3VhcnQvY3BtX3VhcnRfY3BtMi5jIGIvZHJpdmVycy9zZXJpYWwvY3BtX3VhcnQvY3BtX3VhcnRfY3BtMi5jCmluZGV4IGI4ZGI0ZDMuLjE0MWMwYTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL2NwbV91YXJ0L2NwbV91YXJ0X2NwbTIuYworKysgYi9kcml2ZXJzL3NlcmlhbC9jcG1fdWFydC9jcG1fdWFydF9jcG0yLmMKQEAgLTEzNiw3ICsxMzYsNyBAQAogCQlkbWFfYWRkciA9IHZpcnRfdG9fYnVzKG1lbV9hZGRyKTsKIAl9CiAJZWxzZQotCQltZW1fYWRkciA9IGRtYV9hbGxvY19jb2hlcmVudChOVUxMLCBtZW1zeiwgJmRtYV9hZGRyLAorCQltZW1fYWRkciA9IGRtYV9hbGxvY19jb2hlcmVudChwaW5mby0+cG9ydC5kZXYsIG1lbXN6LCAmZG1hX2FkZHIsCiAJCQkJCSAgICAgIEdGUF9LRVJORUwpOwogCiAJaWYgKG1lbV9hZGRyID09IE5VTEwpIHsKQEAgLTE2Myw4ICsxNjMsOCBAQAogCiB2b2lkIGNwbV91YXJ0X2ZyZWVidWYoc3RydWN0IHVhcnRfY3BtX3BvcnQgKnBpbmZvKQogewotCWRtYV9mcmVlX2NvaGVyZW50KE5VTEwsIEwxX0NBQ0hFX0FMSUdOKHBpbmZvLT5yeF9ucmZpZm9zICoKLQkJCQkJICAgICAgIHBpbmZvLT5yeF9maWZvc2l6ZSkgKworCWRtYV9mcmVlX2NvaGVyZW50KHBpbmZvLT5wb3J0LmRldiwgTDFfQ0FDSEVfQUxJR04ocGluZm8tPnJ4X25yZmlmb3MgKgorCQkJCQkJCSAgcGluZm8tPnJ4X2ZpZm9zaXplKSArCiAJCQkgIEwxX0NBQ0hFX0FMSUdOKHBpbmZvLT50eF9ucmZpZm9zICoKIAkJCQkJIHBpbmZvLT50eF9maWZvc2l6ZSksICh2b2lkIF9fZm9yY2UgKilwaW5mby0+bWVtX2FkZHIsCiAJCQkgIHBpbmZvLT5kbWFfYWRkcik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9jcmlzdjEwLmMgYi9kcml2ZXJzL3NlcmlhbC9jcmlzdjEwLmMKaW5kZXggYmY5NGE3Ny4uMjExYzIxNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvY3Jpc3YxMC5jCisrKyBiL2RyaXZlcnMvc2VyaWFsL2NyaXN2MTAuYwpAQCAtNDU3LDcgKzQ1Nyw2IEBACiAjZGVmaW5lIE5SX1BPUlRTIChzaXplb2YocnNfdGFibGUpL3NpemVvZihzdHJ1Y3QgZTEwMF9zZXJpYWwpKQogCiBzdGF0aWMgc3RydWN0IGt0ZXJtaW9zICpzZXJpYWxfdGVybWlvc1tOUl9QT1JUU107Ci1zdGF0aWMgc3RydWN0IGt0ZXJtaW9zICpzZXJpYWxfdGVybWlvc19sb2NrZWRbTlJfUE9SVFNdOwogI2lmZGVmIENPTkZJR19FVFJBWF9TRVJJQUxfRkFTVF9USU1FUgogc3RhdGljIHN0cnVjdCBmYXN0X3RpbWVyIGZhc3RfdGltZXJzW05SX1BPUlRTXTsKICNlbmRpZgpAQCAtNDQxOSw2ICs0NDE4LDcgQEAKIAkJCXJzNDg1X3BhX2JpdCkpIHsKIAkJcHJpbnRrKEtFUk5fQ1JJVCAiRVRSQVgxMDBMWCBzZXJpYWw6IENvdWxkIG5vdCBhbGxvY2F0ZSAiCiAJCQkiUlM0ODUgcGluXG4iKTsKKwkJcHV0X3R0eV9kcml2ZXIoZHJpdmVyKTsKIAkJcmV0dXJuIC1FQlVTWTsKIAl9CiAjZW5kaWYKQEAgLTQ0MjcsNiArNDQyNyw3IEBACiAJCQlyczQ4NV9wb3J0X2dfYml0KSkgewogCQlwcmludGsoS0VSTl9DUklUICJFVFJBWDEwMExYIHNlcmlhbDogQ291bGQgbm90IGFsbG9jYXRlICIKIAkJCSJSUzQ4NSBwaW5cbiIpOworCQlwdXRfdHR5X2RyaXZlcihkcml2ZXIpOwogCQlyZXR1cm4gLUVCVVNZOwogCX0KICNlbmRpZgpAQCAtNDQ0Niw4ICs0NDQ3LDYgQEAKIAlkcml2ZXItPmluaXRfdGVybWlvcy5jX2lzcGVlZCA9IDExNTIwMDsKIAlkcml2ZXItPmluaXRfdGVybWlvcy5jX29zcGVlZCA9IDExNTIwMDsKIAlkcml2ZXItPmZsYWdzID0gVFRZX0RSSVZFUl9SRUFMX1JBVyB8IFRUWV9EUklWRVJfRFlOQU1JQ19ERVY7Ci0JZHJpdmVyLT50ZXJtaW9zID0gc2VyaWFsX3Rlcm1pb3M7Ci0JZHJpdmVyLT50ZXJtaW9zX2xvY2tlZCA9IHNlcmlhbF90ZXJtaW9zX2xvY2tlZDsKIAogCXR0eV9zZXRfb3BlcmF0aW9ucyhkcml2ZXIsICZyc19vcHMpOwogICAgICAgICBzZXJpYWxfZHJpdmVyID0gZHJpdmVyOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvbTMycl9zaW8uYyBiL2RyaXZlcnMvc2VyaWFsL20zMnJfc2lvLmMKaW5kZXggMjNkMDMwNS4uNjExYzk3YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvbTMycl9zaW8uYworKysgYi9kcml2ZXJzL3NlcmlhbC9tMzJyX3Npby5jCkBAIC05MjIsNyArOTIyLDcgQEAKIHN0YXRpYyBpbnQKIG0zMnJfc2lvX3ZlcmlmeV9wb3J0KHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQsIHN0cnVjdCBzZXJpYWxfc3RydWN0ICpzZXIpCiB7Ci0JaWYgKHNlci0+aXJxID49IE5SX0lSUVMgfHwgc2VyLT5pcnEgPCAwIHx8CisJaWYgKHNlci0+aXJxID49IG5yX2lycXMgfHwgc2VyLT5pcnEgPCAwIHx8CiAJICAgIHNlci0+YmF1ZF9iYXNlIDwgOTYwMCB8fCBzZXItPnR5cGUgPCBQT1JUX1VOS05PV04gfHwKIAkgICAgc2VyLT50eXBlID49IEFSUkFZX1NJWkUodWFydF9jb25maWcpKQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTExNjIsNyArMTE2Miw3IEBACiAKIAlwcmludGsoS0VSTl9JTkZPICJTZXJpYWw6IE0zMlIgU0lPIGRyaXZlclxuIik7CiAKLQlmb3IgKGkgPSAwOyBpIDwgTlJfSVJRUzsgaSsrKQorCWZvciAoaSA9IDA7IGkgPCBucl9pcnFzOyBpKyspCiAJCXNwaW5fbG9ja19pbml0KCZpcnFfbGlzdHNbaV0ubG9jayk7CiAKIAlyZXQgPSB1YXJ0X3JlZ2lzdGVyX2RyaXZlcigmbTMycl9zaW9fcmVnKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL21jZnNlcmlhbC5jIGIvZHJpdmVycy9zZXJpYWwvbWNmc2VyaWFsLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZiZTM4MzUuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zZXJpYWwvbWNmc2VyaWFsLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxOTY1ICswLDAgQEAKLSN3YXJuaW5nIFRoaXMgZHJpdmVyIGlzIGRlcHJlY2F0ZWQuIENoZWNrIEtjb25maWcgZm9yIGRldGFpbHMuCi0vKgotICogbWNmc2VyaWFsLmMgLS0gc2VyaWFsIGRyaXZlciBmb3IgQ29sZEZpcmUgaW50ZXJuYWwgVUFSVFMuCi0gKgotICogQ29weXJpZ2h0IChDKSAxOTk5LTIwMDMgR3JlZyBVbmdlcmVyIDxnZXJnQHNuYXBnZWFyLmNvbT4KLSAqIENvcHlyaWdodCAoYykgMjAwMC0yMDAxIExpbmVvLCBJbmMuIDx3d3cubGluZW8uY29tPiAKLSAqIENvcHlyaWdodCAoQykgMjAwMS0yMDAyIFNuYXBHZWFyIEluYy4gPHd3dy5zbmFwZ2Vhci5jb20+IAotICoKLSAqIEJhc2VkIG9uIGNvZGUgZnJvbSA2ODMzMnNlcmlhbC5jIHdoaWNoIHdhczoKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTUgRGF2aWQgUy4gTWlsbGVyIChkYXZlbUBjYWlwLnJ1dGdlcnMuZWR1KQotICogQ29weXJpZ2h0IChDKSAxOTk4IFRTSEcKLSAqIENvcHlyaWdodCAoYykgMTk5OSBSdC1Db250cm9sIEluYy4gPGplZmZAdWNsaW51eC5vcmc+Ci0gKgotICogQ2hhbmdlczoKLSAqIDA4LzA3LzIwMDMgICAgRGFuaWVsZSBCZWxsdWNjaSA8YmVsbHVjZGFAdGlzY2FsaS5pdD4KLSAqICAgICAgICAgICAgICAgc29tZSBjbGVhbnVwcyBpbiBtY2Zyc193cml0ZS4KLSAqCi0gKi8KLSAKLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgotI2luY2x1ZGUgPGxpbnV4L3NpZ25hbC5oPgotI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+Ci0jaW5jbHVkZSA8bGludXgvdGltZXIuaD4KLSNpbmNsdWRlIDxsaW51eC93YWl0Lmg+Ci0jaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Ci0jaW5jbHVkZSA8bGludXgvdHR5Lmg+Ci0jaW5jbHVkZSA8bGludXgvdHR5X2ZsaXAuaD4KLSNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KLSNpbmNsdWRlIDxsaW51eC9mY250bC5oPgotI2luY2x1ZGUgPGxpbnV4L21tLmg+Ci0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvc2VyaWFsLmg+Ci0jaW5jbHVkZSA8bGludXgvc2VyaWFsUC5oPgotI2luY2x1ZGUgPGxpbnV4L2NvbnNvbGUuaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvYml0b3BzLmg+Ci0jaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KLQotI2luY2x1ZGUgPGFzbS9pby5oPgotI2luY2x1ZGUgPGFzbS9pcnEuaD4KLSNpbmNsdWRlIDxhc20vc3lzdGVtLmg+Ci0jaW5jbHVkZSA8YXNtL2RlbGF5Lmg+Ci0jaW5jbHVkZSA8YXNtL2NvbGRmaXJlLmg+Ci0jaW5jbHVkZSA8YXNtL21jZnNpbS5oPgotI2luY2x1ZGUgPGFzbS9tY2Z1YXJ0Lmg+Ci0jaW5jbHVkZSA8YXNtL25ldHRlbC5oPgotI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+Ci0jaW5jbHVkZSAibWNmc2VyaWFsLmgiCi0KLXN0cnVjdCB0aW1lcl9saXN0IG1jZnJzX3RpbWVyX3N0cnVjdDsKLQotLyoKLSAqCURlZmF1bHQgY29uc29sZSBiYXVkIHJhdGUsICB3ZSB1c2UgdGhpcyBhcyB0aGUgZGVmYXVsdAotICoJZm9yIGFsbCBwb3J0cyBzbyBpbml0IGNhbiBqdXN0IG9wZW4gL2Rldi9jb25zb2xlIGFuZAotICoJa2VlcCBnb2luZy4gIFBlcmhhcHMgb25lIGRheSB0aGUgY2ZsYWcgc2V0dGluZ3MgZm9yIHRoZQotICoJY29uc29sZSBjYW4gYmUgdXNlZCBpbnN0ZWFkLgotICovCi0jaWYgZGVmaW5lZChDT05GSUdfSFdfRkVJVEgpCi0jZGVmaW5lCUNPTlNPTEVfQkFVRF9SQVRFCTM4NDAwCi0jZGVmaW5lCURFRkFVTFRfQ0JBVUQJCUIzODQwMAotI2VsaWYgZGVmaW5lZChDT05GSUdfTU9ENTI3MikgfHwgZGVmaW5lZChDT05GSUdfTTUyMDhFVkIpIHx8IFwKLSAgICAgIGRlZmluZWQoQ09ORklHX001MzI5RVZCKSB8fCBkZWZpbmVkKENPTkZJR19HSUxCQVJDTykKLSNkZWZpbmUgQ09OU09MRV9CQVVEX1JBVEUgCTExNTIwMAotI2RlZmluZSBERUZBVUxUX0NCQVVECQlCMTE1MjAwCi0jZWxpZiBkZWZpbmVkKENPTkZJR19BUk5FV1NIKSB8fCBkZWZpbmVkKENPTkZJR19GUkVFU0NBTEUpIHx8IFwKLSAgICAgIGRlZmluZWQoQ09ORklHX3NlblRlYykgfHwgZGVmaW5lZChDT05GSUdfU05FSEEpIHx8IGRlZmluZWQoQ09ORklHX0FWTkVUKQotI2RlZmluZQlDT05TT0xFX0JBVURfUkFURQkxOTIwMAotI2RlZmluZQlERUZBVUxUX0NCQVVECQlCMTkyMDAKLSNlbmRpZgotCi0jaWZuZGVmIENPTlNPTEVfQkFVRF9SQVRFCi0jZGVmaW5lCUNPTlNPTEVfQkFVRF9SQVRFCTk2MDAKLSNkZWZpbmUJREVGQVVMVF9DQkFVRAkJQjk2MDAKLSNlbmRpZgotCi1pbnQgbWNmcnNfY29uc29sZV9pbml0ZWQgPSAwOwotaW50IG1jZnJzX2NvbnNvbGVfcG9ydCA9IC0xOwotaW50IG1jZnJzX2NvbnNvbGVfYmF1ZCA9IENPTlNPTEVfQkFVRF9SQVRFOwotaW50IG1jZnJzX2NvbnNvbGVfY2JhdWQgPSBERUZBVUxUX0NCQVVEOwotCi0vKgotICoJRHJpdmVyIGRhdGEgc3RydWN0dXJlcy4KLSAqLwotc3RhdGljIHN0cnVjdCB0dHlfZHJpdmVyICptY2Zyc19zZXJpYWxfZHJpdmVyOwotCi0vKiBudW1iZXIgb2YgY2hhcmFjdGVycyBsZWZ0IGluIHhtaXQgYnVmZmVyIGJlZm9yZSB3ZSBhc2sgZm9yIG1vcmUgKi8KLSNkZWZpbmUgV0FLRVVQX0NIQVJTIDI1NgotCi0vKiBEZWJ1Z2dpbmcuLi4KLSAqLwotI3VuZGVmIFNFUklBTF9ERUJVR19PUEVOCi0jdW5kZWYgU0VSSUFMX0RFQlVHX0ZMT1cKLQotI2lmIGRlZmluZWQoQ09ORklHX001MjN4KSB8fCBkZWZpbmVkKENPTkZJR19NNTI3eCkgfHwgZGVmaW5lZChDT05GSUdfTTUyOHgpIHx8IFwKLSAgICBkZWZpbmVkKENPTkZJR19NNTIweCkgfHwgZGVmaW5lZChDT05GSUdfTTUzMngpCi0jZGVmaW5lCUlSUUJBU0UJKE1DRklOVF9WRUNCQVNFK01DRklOVF9VQVJUMCkKLSNlbHNlCi0jZGVmaW5lCUlSUUJBU0UJNzMKLSNlbmRpZgotCi0vKgotICoJQ29uZmlndXJhdGlvbiB0YWJsZSwgVUFSVHMgdG8gbG9vayBmb3IgYXQgc3RhcnR1cC4KLSAqLwotc3RhdGljIHN0cnVjdCBtY2Zfc2VyaWFsIG1jZnJzX3RhYmxlW10gPSB7Ci0JeyAgLyogdHR5UzAgKi8KLQkJLm1hZ2ljID0gMCwKLQkJLmFkZHIgPSAodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSAoTUNGX01CQVIrTUNGVUFSVF9CQVNFMSksCi0JCS5pcnEgPSBJUlFCQVNFLAotCQkuZmxhZ3MgPSBBU1lOQ19CT09UX0FVVE9DT05GLAotCX0sCi0jaWZkZWYgTUNGVUFSVF9CQVNFMgotCXsgIC8qIHR0eVMxICovCi0JCS5tYWdpYyA9IDAsCi0JCS5hZGRyID0gKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikgKE1DRl9NQkFSK01DRlVBUlRfQkFTRTIpLAotCQkuaXJxID0gSVJRQkFTRSsxLAotCQkuZmxhZ3MgPSBBU1lOQ19CT09UX0FVVE9DT05GLAotCX0sCi0jZW5kaWYKLSNpZmRlZiBNQ0ZVQVJUX0JBU0UzCi0JeyAgLyogdHR5UzIgKi8KLQkJLm1hZ2ljID0gMCwKLQkJLmFkZHIgPSAodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSAoTUNGX01CQVIrTUNGVUFSVF9CQVNFMyksCi0JCS5pcnEgPSBJUlFCQVNFKzIsCi0JCS5mbGFncyA9IEFTWU5DX0JPT1RfQVVUT0NPTkYsCi0JfSwKLSNlbmRpZgotI2lmZGVmIE1DRlVBUlRfQkFTRTQKLQl7ICAvKiB0dHlTMyAqLwotCQkubWFnaWMgPSAwLAotCQkuYWRkciA9ICh2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopIChNQ0ZfTUJBUitNQ0ZVQVJUX0JBU0U0KSwKLQkJLmlycSA9IElSUUJBU0UrMywKLQkJLmZsYWdzID0gQVNZTkNfQk9PVF9BVVRPQ09ORiwKLQl9LAotI2VuZGlmCi19OwotCi0KLSNkZWZpbmUJTlJfUE9SVFMJKHNpemVvZihtY2Zyc190YWJsZSkgLyBzaXplb2Yoc3RydWN0IG1jZl9zZXJpYWwpKQotCi0vKgotICogVGhpcyBpcyB1c2VkIHRvIGZpZ3VyZSBvdXQgdGhlIGRpdmlzb3Igc3BlZWRzIGFuZCB0aGUgdGltZW91dHMuCi0gKi8KLXN0YXRpYyBpbnQgbWNmcnNfYmF1ZF90YWJsZVtdID0gewotCTAsIDUwLCA3NSwgMTEwLCAxMzQsIDE1MCwgMjAwLCAzMDAsIDYwMCwgMTIwMCwgMTgwMCwgMjQwMCwgNDgwMCwKLQk5NjAwLCAxOTIwMCwgMzg0MDAsIDU3NjAwLCAxMTUyMDAsIDIzMDQwMCwgNDYwODAwLCAwCi19OwotI2RlZmluZSBNQ0ZSU19CQVVEX1RBQkxFX1NJWkUgXAotCQkJKHNpemVvZihtY2Zyc19iYXVkX3RhYmxlKS9zaXplb2YobWNmcnNfYmF1ZF90YWJsZVswXSkpCi0KLQotI2lmZGVmIENPTkZJR19NQUdJQ19TWVNSUQotLyoKLSAqCU1hZ2ljIHN5c3RlbSByZXF1ZXN0IGtleXMuIFVzZWQgZm9yIGRlYnVnZ2luZy4uLgotICovCi1leHRlcm4gaW50CW1hZ2ljX3N5c3JxX2tleShpbnQgY2gpOwotI2VuZGlmCi0KLQotLyoKLSAqCUZvcndhcmUgZGVjbGFyYXRpb25zLi4uCi0gKi8KLXN0YXRpYyB2b2lkCW1jZnJzX2NoYW5nZV9zcGVlZChzdHJ1Y3QgbWNmX3NlcmlhbCAqaW5mbyk7Ci1zdGF0aWMgdm9pZAltY2Zyc193YWl0X3VudGlsX3NlbnQoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgaW50IHRpbWVvdXQpOwotCi0KLXN0YXRpYyBpbmxpbmUgaW50IHNlcmlhbF9wYXJhbm9pYV9jaGVjayhzdHJ1Y3QgbWNmX3NlcmlhbCAqaW5mbywKLQkJCQkJY2hhciAqbmFtZSwgY29uc3QgY2hhciAqcm91dGluZSkKLXsKLSNpZmRlZiBTRVJJQUxfUEFSQU5PSUFfQ0hFQ0sKLQlzdGF0aWMgY29uc3QgY2hhciBiYWRtYWdpY1tdID0KLQkJIk1DRlJTKHdhcm5pbmcpOiBiYWQgbWFnaWMgbnVtYmVyIGZvciBzZXJpYWwgc3RydWN0ICVzIGluICVzXG4iOwotCXN0YXRpYyBjb25zdCBjaGFyIGJhZGluZm9bXSA9Ci0JCSJNQ0ZSUyh3YXJuaW5nKTogbnVsbCBtY2Zfc2VyaWFsIGZvciAlcyBpbiAlc1xuIjsKLQotCWlmICghaW5mbykgewotCQlwcmludGsoYmFkaW5mbywgbmFtZSwgcm91dGluZSk7Ci0JCXJldHVybiAxOwotCX0KLQlpZiAoaW5mby0+bWFnaWMgIT0gU0VSSUFMX01BR0lDKSB7Ci0JCXByaW50ayhiYWRtYWdpYywgbmFtZSwgcm91dGluZSk7Ci0JCXJldHVybiAxOwotCX0KLSNlbmRpZgotCXJldHVybiAwOwotfQotCi0vKgotICoJU2V0cyBvciBjbGVhcnMgRFRSIGFuZCBSVFMgb24gdGhlIHJlcXVlc3RlZCBsaW5lLgotICovCi1zdGF0aWMgdm9pZCBtY2Zyc19zZXRzaWduYWxzKHN0cnVjdCBtY2Zfc2VyaWFsICppbmZvLCBpbnQgZHRyLCBpbnQgcnRzKQotewotCXZvbGF0aWxlIHVuc2lnbmVkIGNoYXIJKnVhcnRwOwotCXVuc2lnbmVkIGxvbmcJCWZsYWdzOwotCQotI2lmIDAKLQlwcmludGsoIiVzKCVkKTogbWNmcnNfc2V0c2lnbmFscyhpbmZvPSV4LGR0cj0lZCxydHM9JWQpXG4iLAotCQlfX0ZJTEVfXywgX19MSU5FX18sIGluZm8sIGR0ciwgcnRzKTsKLSNlbmRpZgotCi0JbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCWlmIChkdHIgPj0gMCkgewotI2lmZGVmIE1DRlBQX0RUUjAKLQkJaWYgKGluZm8tPmxpbmUpCi0JCQltY2Zfc2V0cHBkYXRhKE1DRlBQX0RUUjEsIChkdHIgPyAwIDogTUNGUFBfRFRSMSkpOwotCQllbHNlCi0JCQltY2Zfc2V0cHBkYXRhKE1DRlBQX0RUUjAsIChkdHIgPyAwIDogTUNGUFBfRFRSMCkpOwotI2VuZGlmCi0JfQotCWlmIChydHMgPj0gMCkgewotCQl1YXJ0cCA9IGluZm8tPmFkZHI7Ci0JCWlmIChydHMpIHsKLQkJCWluZm8tPnNpZ3MgfD0gVElPQ01fUlRTOwotCQkJdWFydHBbTUNGVUFSVF9VT1AxXSA9IE1DRlVBUlRfVU9QX1JUUzsKLQkJfSBlbHNlIHsKLQkJCWluZm8tPnNpZ3MgJj0gflRJT0NNX1JUUzsKLQkJCXVhcnRwW01DRlVBUlRfVU9QMF0gPSBNQ0ZVQVJUX1VPUF9SVFM7Ci0JCX0KLQl9Ci0JbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwotCXJldHVybjsKLX0KLQotLyoKLSAqCUdldHMgdmFsdWVzIG9mIHNlcmlhbCBzaWduYWxzLgotICovCi1zdGF0aWMgaW50IG1jZnJzX2dldHNpZ25hbHMoc3RydWN0IG1jZl9zZXJpYWwgKmluZm8pCi17Ci0Jdm9sYXRpbGUgdW5zaWduZWQgY2hhcgkqdWFydHA7Ci0JdW5zaWduZWQgbG9uZwkJZmxhZ3M7Ci0JaW50CQkJc2lnczsKLSNpZiBkZWZpbmVkKENPTkZJR19ORVR0ZWwpICYmIGRlZmluZWQoQ09ORklHX001MzA3KQotCXVuc2lnbmVkIHNob3J0CQlwcGRhdGE7Ci0jZW5kaWYKLQotI2lmIDAKLQlwcmludGsoIiVzKCVkKTogbWNmcnNfZ2V0c2lnbmFscyhpbmZvPSV4KVxuIiwgX19GSUxFX18sIF9fTElORV9fKTsKLSNlbmRpZgotCi0JbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCXVhcnRwID0gaW5mby0+YWRkcjsKLQlzaWdzID0gKHVhcnRwW01DRlVBUlRfVUlQUl0gJiBNQ0ZVQVJUX1VJUFJfQ1RTKSA/IDAgOiBUSU9DTV9DVFM7Ci0Jc2lncyB8PSAoaW5mby0+c2lncyAmIFRJT0NNX1JUUyk7Ci0KLSNpZmRlZiBNQ0ZQUF9EQ0QwCi17Ci0JdW5zaWduZWQgaW50IHBwZGF0YTsKLQlwcGRhdGEgPSBtY2ZfZ2V0cHBkYXRhKCk7Ci0JaWYgKGluZm8tPmxpbmUgPT0gMCkgewotCQlzaWdzIHw9IChwcGRhdGEgJiBNQ0ZQUF9EQ0QwKSA/IDAgOiBUSU9DTV9DRDsKLQkJc2lncyB8PSAocHBkYXRhICYgTUNGUFBfRFRSMCkgPyAwIDogVElPQ01fRFRSOwotCX0gZWxzZSBpZiAoaW5mby0+bGluZSA9PSAxKSB7Ci0JCXNpZ3MgfD0gKHBwZGF0YSAmIE1DRlBQX0RDRDEpID8gMCA6IFRJT0NNX0NEOwotCQlzaWdzIHw9IChwcGRhdGEgJiBNQ0ZQUF9EVFIxKSA/IDAgOiBUSU9DTV9EVFI7Ci0JfQotfQotI2VuZGlmCi0KLQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Ci0JcmV0dXJuKHNpZ3MpOwotfQotCi0vKgotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBtY2Zyc19zdG9wKCkgYW5kIG1jZnJzX3N0YXJ0KCkKLSAqCi0gKiBUaGlzIHJvdXRpbmVzIGFyZSBjYWxsZWQgYmVmb3JlIHNldHRpbmcgb3IgcmVzZXR0aW5nIHR0eS0+c3RvcHBlZC4KLSAqIFRoZXkgZW5hYmxlIG9yIGRpc2FibGUgdHJhbnNtaXR0ZXIgaW50ZXJydXB0cywgYXMgbmVjZXNzYXJ5LgotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKi8KLXN0YXRpYyB2b2lkIG1jZnJzX3N0b3Aoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKLXsKLQl2b2xhdGlsZSB1bnNpZ25lZCBjaGFyCSp1YXJ0cDsKLQlzdHJ1Y3QgbWNmX3NlcmlhbAkqaW5mbyA9IChzdHJ1Y3QgbWNmX3NlcmlhbCAqKXR0eS0+ZHJpdmVyX2RhdGE7Ci0JdW5zaWduZWQgbG9uZwkJZmxhZ3M7Ci0KLQlpZiAoc2VyaWFsX3BhcmFub2lhX2NoZWNrKGluZm8sIHR0eS0+bmFtZSwgIm1jZnJzX3N0b3AiKSkKLQkJcmV0dXJuOwotCQotCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQl1YXJ0cCA9IGluZm8tPmFkZHI7Ci0JaW5mby0+aW1yICY9IH5NQ0ZVQVJUX1VJUl9UWFJFQURZOwotCXVhcnRwW01DRlVBUlRfVUlNUl0gPSBpbmZvLT5pbXI7Ci0JbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwotfQotCi1zdGF0aWMgdm9pZCBtY2Zyc19zdGFydChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQotewotCXZvbGF0aWxlIHVuc2lnbmVkIGNoYXIJKnVhcnRwOwotCXN0cnVjdCBtY2Zfc2VyaWFsCSppbmZvID0gKHN0cnVjdCBtY2Zfc2VyaWFsICopdHR5LT5kcml2ZXJfZGF0YTsKLQl1bnNpZ25lZCBsb25nCQlmbGFnczsKLQkKLQlpZiAoc2VyaWFsX3BhcmFub2lhX2NoZWNrKGluZm8sIHR0eS0+bmFtZSwgIm1jZnJzX3N0YXJ0IikpCi0JCXJldHVybjsKLQotCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQlpZiAoaW5mby0+eG1pdF9jbnQgJiYgaW5mby0+eG1pdF9idWYpIHsKLQkJdWFydHAgPSBpbmZvLT5hZGRyOwotCQlpbmZvLT5pbXIgfD0gTUNGVUFSVF9VSVJfVFhSRUFEWTsKLQkJdWFydHBbTUNGVUFSVF9VSU1SXSA9IGluZm8tPmltcjsKLQl9Ci0JbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwotfQotCi0vKgotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICoKLSAqIEhlcmUgc3RhcnRzIHRoZSBpbnRlcnJ1cHQgaGFuZGxpbmcgcm91dGluZXMuICBBbGwgb2YgdGhlIGZvbGxvd2luZwotICogc3Vicm91dGluZXMgYXJlIGRlY2xhcmVkIGFzIGlubGluZSBhbmQgYXJlIGZvbGRlZCBpbnRvCi0gKiBtY2Zyc19pbnRlcnJ1cHQoKS4gIFRoZXkgd2VyZSBzZXBhcmF0ZWQgb3V0IGZvciByZWFkYWJpbGl0eSdzIHNha2UuCi0gKgotICogTm90ZTogbWNmcnNfaW50ZXJydXB0KCkgaXMgYSAiZmFzdCIgaW50ZXJydXB0LCB3aGljaCBtZWFucyB0aGF0IGl0Ci0gKiBydW5zIHdpdGggaW50ZXJydXB0cyB0dXJuZWQgb2ZmLiAgUGVvcGxlIHdobyBtYXkgd2FudCB0byBtb2RpZnkKLSAqIG1jZnJzX2ludGVycnVwdCgpIHNob3VsZCB0cnkgdG8ga2VlcCB0aGUgaW50ZXJydXB0IGhhbmRsZXIgYXMgZmFzdCBhcwotICogcG9zc2libGUuICBBZnRlciB5b3UgYXJlIGRvbmUgbWFraW5nIG1vZGlmaWNhdGlvbnMsIGl0IGlzIG5vdCBhIGJhZAotICogaWRlYSB0byBkbzoKLSAqIAotICogZ2NjIC1TIC1ES0VSTkVMIC1XYWxsIC1Xc3RyaWN0LXByb3RvdHlwZXMgLU82IC1mb21pdC1mcmFtZS1wb2ludGVyIHNlcmlhbC5jCi0gKgotICogYW5kIGxvb2sgYXQgdGhlIHJlc3VsdGluZyBhc3NlbWJsZSBjb2RlIGluIHNlcmlhbC5zLgotICoKLSAqIAkJCQktIFRlZCBUcydvICh0eXRzb0BtaXQuZWR1KSwgNy1NYXItOTMKLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKi8KLQotc3RhdGljIGlubGluZSB2b2lkIHJlY2VpdmVfY2hhcnMoc3RydWN0IG1jZl9zZXJpYWwgKmluZm8pCi17Ci0Jdm9sYXRpbGUgdW5zaWduZWQgY2hhcgkqdWFydHA7Ci0Jc3RydWN0IHR0eV9zdHJ1Y3QJKnR0eSA9IGluZm8tPnBvcnQudHR5OwotCXVuc2lnbmVkIGNoYXIJCXN0YXR1cywgY2gsIGZsYWc7Ci0KLQlpZiAoIXR0eSkKLQkJcmV0dXJuOwotCi0JdWFydHAgPSBpbmZvLT5hZGRyOwotCi0Jd2hpbGUgKChzdGF0dXMgPSB1YXJ0cFtNQ0ZVQVJUX1VTUl0pICYgTUNGVUFSVF9VU1JfUlhSRUFEWSkgewotCQljaCA9IHVhcnRwW01DRlVBUlRfVVJCXTsKLQkJaW5mby0+c3RhdHMucngrKzsKLQotI2lmZGVmIENPTkZJR19NQUdJQ19TWVNSUQotCQlpZiAobWNmcnNfY29uc29sZV9pbml0ZWQgJiYgKGluZm8tPmxpbmUgPT0gbWNmcnNfY29uc29sZV9wb3J0KSkgewotCQkJaWYgKG1hZ2ljX3N5c3JxX2tleShjaCkpCi0JCQkJY29udGludWU7Ci0JCX0KLSNlbmRpZgotCi0JCWZsYWcgPSBUVFlfTk9STUFMOwotCQlpZiAoc3RhdHVzICYgTUNGVUFSVF9VU1JfUlhFUlIpIHsKLQkJCXVhcnRwW01DRlVBUlRfVUNSXSA9IE1DRlVBUlRfVUNSX0NNRFJFU0VURVJSOwotCQkJaWYgKHN0YXR1cyAmIE1DRlVBUlRfVVNSX1JYQlJFQUspIHsKLQkJCQlpbmZvLT5zdGF0cy5yeGJyZWFrKys7Ci0JCQkJZmxhZyA9IFRUWV9CUkVBSzsKLQkJCX0gZWxzZSBpZiAoc3RhdHVzICYgTUNGVUFSVF9VU1JfUlhQQVJJVFkpIHsKLQkJCQlpbmZvLT5zdGF0cy5yeHBhcml0eSsrOwotCQkJCWZsYWcgPSBUVFlfUEFSSVRZOwotCQkJfSBlbHNlIGlmIChzdGF0dXMgJiBNQ0ZVQVJUX1VTUl9SWE9WRVJSVU4pIHsKLQkJCQlpbmZvLT5zdGF0cy5yeG92ZXJydW4rKzsKLQkJCQlmbGFnID0gVFRZX09WRVJSVU47Ci0JCQl9IGVsc2UgaWYgKHN0YXR1cyAmIE1DRlVBUlRfVVNSX1JYRlJBTUlORykgewotCQkJCWluZm8tPnN0YXRzLnJ4ZnJhbWluZysrOwotCQkJCWZsYWcgPSBUVFlfRlJBTUU7Ci0JCQl9Ci0JCX0KLQkJdHR5X2luc2VydF9mbGlwX2NoYXIodHR5LCBjaCwgZmxhZyk7Ci0JfQotCXR0eV9zY2hlZHVsZV9mbGlwKHR0eSk7Ci0JcmV0dXJuOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgdHJhbnNtaXRfY2hhcnMoc3RydWN0IG1jZl9zZXJpYWwgKmluZm8pCi17Ci0Jdm9sYXRpbGUgdW5zaWduZWQgY2hhcgkqdWFydHA7Ci0KLQl1YXJ0cCA9IGluZm8tPmFkZHI7Ci0KLQlpZiAoaW5mby0+eF9jaGFyKSB7Ci0JCS8qIFNlbmQgc3BlY2lhbCBjaGFyIC0gcHJvYmFibHkgZmxvdyBjb250cm9sICovCi0JCXVhcnRwW01DRlVBUlRfVVRCXSA9IGluZm8tPnhfY2hhcjsKLQkJaW5mby0+eF9jaGFyID0gMDsKLQkJaW5mby0+c3RhdHMudHgrKzsKLQl9Ci0KLQlpZiAoKGluZm8tPnhtaXRfY250IDw9IDApIHx8IGluZm8tPnBvcnQudHR5LT5zdG9wcGVkKSB7Ci0JCWluZm8tPmltciAmPSB+TUNGVUFSVF9VSVJfVFhSRUFEWTsKLQkJdWFydHBbTUNGVUFSVF9VSU1SXSA9IGluZm8tPmltcjsKLQkJcmV0dXJuOwotCX0KLQotCXdoaWxlICh1YXJ0cFtNQ0ZVQVJUX1VTUl0gJiBNQ0ZVQVJUX1VTUl9UWFJFQURZKSB7Ci0JCXVhcnRwW01DRlVBUlRfVVRCXSA9IGluZm8tPnhtaXRfYnVmW2luZm8tPnhtaXRfdGFpbCsrXTsKLQkJaW5mby0+eG1pdF90YWlsID0gaW5mby0+eG1pdF90YWlsICYgKFNFUklBTF9YTUlUX1NJWkUtMSk7Ci0JCWluZm8tPnN0YXRzLnR4Kys7Ci0JCWlmICgtLWluZm8tPnhtaXRfY250IDw9IDApCi0JCQlicmVhazsKLQl9Ci0KLQlpZiAoaW5mby0+eG1pdF9jbnQgPCBXQUtFVVBfQ0hBUlMpCi0JCXNjaGVkdWxlX3dvcmsoJmluZm8tPnRxdWV1ZSk7Ci0JcmV0dXJuOwotfQotCi0vKgotICogVGhpcyBpcyB0aGUgc2VyaWFsIGRyaXZlcidzIGdlbmVyaWMgaW50ZXJydXB0IHJvdXRpbmUKLSAqLwotaXJxcmV0dXJuX3QgbWNmcnNfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCkKLXsKLQlzdHJ1Y3QgbWNmX3NlcmlhbAkqaW5mbzsKLQl1bnNpZ25lZCBjaGFyCQlpc3I7Ci0KLQlpbmZvID0gJm1jZnJzX3RhYmxlWyhpcnEgLSBJUlFCQVNFKV07Ci0JaXNyID0gaW5mby0+YWRkcltNQ0ZVQVJUX1VJU1JdICYgaW5mby0+aW1yOwotCi0JaWYgKGlzciAmIE1DRlVBUlRfVUlSX1JYUkVBRFkpCi0JCXJlY2VpdmVfY2hhcnMoaW5mbyk7Ci0JaWYgKGlzciAmIE1DRlVBUlRfVUlSX1RYUkVBRFkpCi0JCXRyYW5zbWl0X2NoYXJzKGluZm8pOwotCXJldHVybiBJUlFfSEFORExFRDsKLX0KLQotLyoKLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIEhlcmUgZW5kcyB0aGUgc2VyaWFsIGludGVycnVwdCByb3V0aW5lcy4KLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqLwotCi1zdGF0aWMgdm9pZCBtY2Zyc19vZmZpbnRyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKLXsKLQlzdHJ1Y3QgbWNmX3NlcmlhbCAqaW5mbyA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgbWNmX3NlcmlhbCwgdHF1ZXVlKTsKLQlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5ID0gaW5mby0+cG9ydC50dHk7Ci0JCi0JaWYgKHR0eSkKLQkJdHR5X3dha2V1cCh0dHkpOwotfQotCi0KLS8qCi0gKglDaGFuZ2Ugb2Ygc3RhdGUgb24gYSBEQ0QgbGluZS4KLSAqLwotdm9pZCBtY2Zyc19tb2RlbV9jaGFuZ2Uoc3RydWN0IG1jZl9zZXJpYWwgKmluZm8sIGludCBkY2QpCi17Ci0JaWYgKGluZm8tPmNvdW50ID09IDApCi0JCXJldHVybjsKLQotCWlmIChpbmZvLT5mbGFncyAmIEFTWU5DX0NIRUNLX0NEKSB7Ci0JCWlmIChkY2QpCi0JCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJmluZm8tPm9wZW5fd2FpdCk7Ci0JCWVsc2UgCi0JCQlzY2hlZHVsZV93b3JrKCZpbmZvLT50cXVldWVfaGFuZ3VwKTsKLQl9Ci19Ci0KLQotI2lmZGVmIE1DRlBQX0RDRDAKLQotdW5zaWduZWQgc2hvcnQJbWNmcnNfcHBzdGF0dXM7Ci0KLS8qCi0gKiBUaGlzIHN1YnJvdXRpbmUgaXMgY2FsbGVkIHdoZW4gdGhlIFJTX1RJTUVSIGdvZXMgb2ZmLiBJdCBpcyB1c2VkCi0gKiB0byBtb25pdG9yIHRoZSBzdGF0ZSBvZiB0aGUgRENEIGxpbmVzIC0gc2luY2UgdGhleSBoYXZlIG5vIGVkZ2UKLSAqIHNlbnNvcnMgYW5kIGludGVycnVwdCBnZW5lcmF0b3JzLgotICovCi1zdGF0aWMgdm9pZCBtY2Zyc190aW1lcih2b2lkKQotewotCXVuc2lnbmVkIGludAlwcHN0YXR1cywgZGNkdmFsLCBpOwotCi0JcHBzdGF0dXMgPSBtY2ZfZ2V0cHBkYXRhKCkgJiAoTUNGUFBfRENEMCB8IE1DRlBQX0RDRDEpOwotCi0JaWYgKHBwc3RhdHVzICE9IG1jZnJzX3Bwc3RhdHVzKSB7Ci0JCWZvciAoaSA9IDA7IChpIDwgMik7IGkrKykgewotCQkJZGNkdmFsID0gKGkgPyBNQ0ZQUF9EQ0QxIDogTUNGUFBfRENEMCk7Ci0JCQlpZiAoKHBwc3RhdHVzICYgZGNkdmFsKSAhPSAobWNmcnNfcHBzdGF0dXMgJiBkY2R2YWwpKSB7Ci0JCQkJbWNmcnNfbW9kZW1fY2hhbmdlKCZtY2Zyc190YWJsZVtpXSwKLQkJCQkJKChwcHN0YXR1cyAmIGRjZHZhbCkgPyAwIDogMSkpOwotCQkJfQotCQl9Ci0JfQotCW1jZnJzX3Bwc3RhdHVzID0gcHBzdGF0dXM7Ci0KLQkvKiBSZS1hcm0gdGltZXIgKi8KLQltY2Zyc190aW1lcl9zdHJ1Y3QuZXhwaXJlcyA9IGppZmZpZXMgKyBIWi8yNTsKLQlhZGRfdGltZXIoJm1jZnJzX3RpbWVyX3N0cnVjdCk7Ci19Ci0KLSNlbmRpZgkvKiBNQ0ZQUF9EQ0QwICovCi0KLQotLyoKLSAqIFRoaXMgcm91dGluZSBpcyBjYWxsZWQgZnJvbSB0aGUgc2NoZWR1bGVyIHRxdWV1ZSB3aGVuIHRoZSBpbnRlcnJ1cHQKLSAqIHJvdXRpbmUgaGFzIHNpZ25hbGxlZCB0aGF0IGEgaGFuZ3VwIGhhcyBvY2N1cnJlZC4gVGhlIHBhdGggb2YKLSAqIGhhbmd1cCBwcm9jZXNzaW5nIGlzOgotICoKLSAqIAlzZXJpYWwgaW50ZXJydXB0IHJvdXRpbmUgLT4gKHNjaGVkdWxlciB0cXVldWUpIC0+Ci0gKiAJZG9fc2VyaWFsX2hhbmd1cCgpIC0+IHR0eS0+aGFuZ3VwKCkgLT4gbWNmcnNfaGFuZ3VwKCkKLSAqIAotICovCi1zdGF0aWMgdm9pZCBkb19zZXJpYWxfaGFuZ3VwKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKLXsKLQlzdHJ1Y3QgbWNmX3NlcmlhbCAqaW5mbyA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgbWNmX3NlcmlhbCwgdHF1ZXVlX2hhbmd1cCk7Ci0Jc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSA9IGluZm8tPnBvcnQudHR5OwotCQotCWlmICh0dHkpCi0JCXR0eV9oYW5ndXAodHR5KTsKLX0KLQotc3RhdGljIGludCBzdGFydHVwKHN0cnVjdCBtY2Zfc2VyaWFsICogaW5mbykKLXsKLQl2b2xhdGlsZSB1bnNpZ25lZCBjaGFyCSp1YXJ0cDsKLQl1bnNpZ25lZCBsb25nCQlmbGFnczsKLQkKLQlpZiAoaW5mby0+ZmxhZ3MgJiBBU1lOQ19JTklUSUFMSVpFRCkKLQkJcmV0dXJuIDA7Ci0KLQlpZiAoIWluZm8tPnhtaXRfYnVmKSB7Ci0JCWluZm8tPnhtaXRfYnVmID0gKHVuc2lnbmVkIGNoYXIgKikgX19nZXRfZnJlZV9wYWdlKEdGUF9LRVJORUwpOwotCQlpZiAoIWluZm8tPnhtaXRfYnVmKQotCQkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCi0JbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCi0jaWZkZWYgU0VSSUFMX0RFQlVHX09QRU4KLQlwcmludGsoInN0YXJ0aW5nIHVwIHR0eVMlZCAoaXJxICVkKS4uLlxuIiwgaW5mby0+bGluZSwgaW5mby0+aXJxKTsKLSNlbmRpZgotCi0JLyoKLQkgKglSZXNldCBVQVJULCBnZXQgaXQgaW50byBrbm93biBzdGF0ZS4uLgotCSAqLwotCXVhcnRwID0gaW5mby0+YWRkcjsKLQl1YXJ0cFtNQ0ZVQVJUX1VDUl0gPSBNQ0ZVQVJUX1VDUl9DTURSRVNFVFJYOyAgLyogcmVzZXQgUlggKi8KLQl1YXJ0cFtNQ0ZVQVJUX1VDUl0gPSBNQ0ZVQVJUX1VDUl9DTURSRVNFVFRYOyAgLyogcmVzZXQgVFggKi8KLQltY2Zyc19zZXRzaWduYWxzKGluZm8sIDEsIDEpOwotCi0JaWYgKGluZm8tPnBvcnQudHR5KQotCQljbGVhcl9iaXQoVFRZX0lPX0VSUk9SLCAmaW5mby0+cG9ydC50dHktPmZsYWdzKTsKLQlpbmZvLT54bWl0X2NudCA9IGluZm8tPnhtaXRfaGVhZCA9IGluZm8tPnhtaXRfdGFpbCA9IDA7Ci0KLQkvKgotCSAqIGFuZCBzZXQgdGhlIHNwZWVkIG9mIHRoZSBzZXJpYWwgcG9ydAotCSAqLwotCW1jZnJzX2NoYW5nZV9zcGVlZChpbmZvKTsKLQotCS8qCi0JICogTGFzdGx5IGVuYWJsZSB0aGUgVUFSVCB0cmFuc21pdHRlciBhbmQgcmVjZWl2ZXIsIGFuZAotCSAqIGludGVycnVwdCBlbmFibGVzLgotCSAqLwotCWluZm8tPmltciA9IE1DRlVBUlRfVUlSX1JYUkVBRFk7Ci0JdWFydHBbTUNGVUFSVF9VQ1JdID0gTUNGVUFSVF9VQ1JfUlhFTkFCTEUgfCBNQ0ZVQVJUX1VDUl9UWEVOQUJMRTsKLQl1YXJ0cFtNQ0ZVQVJUX1VJTVJdID0gaW5mby0+aW1yOwotCi0JaW5mby0+ZmxhZ3MgfD0gQVNZTkNfSU5JVElBTElaRUQ7Ci0JbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwotCXJldHVybiAwOwotfQotCi0vKgotICogVGhpcyByb3V0aW5lIHdpbGwgc2h1dGRvd24gYSBzZXJpYWwgcG9ydDsgaW50ZXJydXB0cyBhcmUgZGlzYWJsZWQsIGFuZAotICogRFRSIGlzIGRyb3BwZWQgaWYgdGhlIGhhbmd1cCBvbiBjbG9zZSB0ZXJtaW8gZmxhZyBpcyBvbi4KLSAqLwotc3RhdGljIHZvaWQgc2h1dGRvd24oc3RydWN0IG1jZl9zZXJpYWwgKiBpbmZvKQotewotCXZvbGF0aWxlIHVuc2lnbmVkIGNoYXIJKnVhcnRwOwotCXVuc2lnbmVkIGxvbmcJCWZsYWdzOwotCi0JaWYgKCEoaW5mby0+ZmxhZ3MgJiBBU1lOQ19JTklUSUFMSVpFRCkpCi0JCXJldHVybjsKLQotI2lmZGVmIFNFUklBTF9ERUJVR19PUEVOCi0JcHJpbnRrKCJTaHV0dGluZyBkb3duIHNlcmlhbCBwb3J0ICVkIChpcnEgJWQpLi4uLlxuIiwgaW5mby0+bGluZSwKLQkgICAgICAgaW5mby0+aXJxKTsKLSNlbmRpZgotCQotCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQotCXVhcnRwID0gaW5mby0+YWRkcjsKLQl1YXJ0cFtNQ0ZVQVJUX1VJTVJdID0gMDsgIC8qIG1hc2sgYWxsIGludGVycnVwdHMgKi8KLQl1YXJ0cFtNQ0ZVQVJUX1VDUl0gPSBNQ0ZVQVJUX1VDUl9DTURSRVNFVFJYOyAgLyogcmVzZXQgUlggKi8KLQl1YXJ0cFtNQ0ZVQVJUX1VDUl0gPSBNQ0ZVQVJUX1VDUl9DTURSRVNFVFRYOyAgLyogcmVzZXQgVFggKi8KLQotCWlmICghaW5mby0+cG9ydC50dHkgfHwgKGluZm8tPnBvcnQudHR5LT50ZXJtaW9zLT5jX2NmbGFnICYgSFVQQ0wpKQotCQltY2Zyc19zZXRzaWduYWxzKGluZm8sIDAsIDApOwotCi0JaWYgKGluZm8tPnhtaXRfYnVmKSB7Ci0JCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZykgaW5mby0+eG1pdF9idWYpOwotCQlpbmZvLT54bWl0X2J1ZiA9IDA7Ci0JfQotCi0JaWYgKGluZm8tPnBvcnQudHR5KQotCQlzZXRfYml0KFRUWV9JT19FUlJPUiwgJmluZm8tPnBvcnQudHR5LT5mbGFncyk7Ci0JCi0JaW5mby0+ZmxhZ3MgJj0gfkFTWU5DX0lOSVRJQUxJWkVEOwotCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLX0KLQotCi0vKgotICogVGhpcyByb3V0aW5lIGlzIGNhbGxlZCB0byBzZXQgdGhlIFVBUlQgZGl2aXNvciByZWdpc3RlcnMgdG8gbWF0Y2gKLSAqIHRoZSBzcGVjaWZpZWQgYmF1ZCByYXRlIGZvciBhIHNlcmlhbCBwb3J0LgotICovCi1zdGF0aWMgdm9pZCBtY2Zyc19jaGFuZ2Vfc3BlZWQoc3RydWN0IG1jZl9zZXJpYWwgKmluZm8pCi17Ci0Jdm9sYXRpbGUgdW5zaWduZWQgY2hhcgkqdWFydHA7Ci0JdW5zaWduZWQgaW50CQliYXVkY2xrLCBjZmxhZzsKLQl1bnNpZ25lZCBsb25nCQlmbGFnczsKLQl1bnNpZ25lZCBjaGFyCQltcjEsIG1yMjsKLQlpbnQJCQlpOwotI2lmZGVmCUNPTkZJR19NNTI3MgotCXVuc2lnbmVkIGludAkJZnJhY3Rpb247Ci0jZW5kaWYKLQotCWlmICghaW5mby0+cG9ydC50dHkgfHwgIWluZm8tPnBvcnQudHR5LT50ZXJtaW9zKQotCQlyZXR1cm47Ci0JY2ZsYWcgPSBpbmZvLT5wb3J0LnR0eS0+dGVybWlvcy0+Y19jZmxhZzsKLQlpZiAoaW5mby0+YWRkciA9PSAwKQotCQlyZXR1cm47Ci0KLSNpZiAwCi0JcHJpbnRrKCIlcyglZCk6IG1jZnJzX2NoYW5nZV9zcGVlZCgpXG4iLCBfX0ZJTEVfXywgX19MSU5FX18pOwotI2VuZGlmCi0KLQlpID0gY2ZsYWcgJiBDQkFVRDsKLQlpZiAoaSAmIENCQVVERVgpIHsKLQkJaSAmPSB+Q0JBVURFWDsKLQkJaWYgKGkgPCAxIHx8IGkgPiA0KQotCQkJaW5mby0+cG9ydC50dHktPnRlcm1pb3MtPmNfY2ZsYWcgJj0gfkNCQVVERVg7Ci0JCWVsc2UKLQkJCWkgKz0gMTU7Ci0JfQotCWlmIChpID09IDApIHsKLQkJbWNmcnNfc2V0c2lnbmFscyhpbmZvLCAwLCAtMSk7Ci0JCXJldHVybjsKLQl9Ci0KLQkvKiBjb21wdXRlIHRoZSBiYXVkcmF0ZSBjbG9jayAqLwotI2lmZGVmCUNPTkZJR19NNTI3MgotCS8qCi0JICogRm9yIHRoZSBNQ0Y1MjcyLCBhbHNvIGNvbXB1dGUgdGhlIGJhdWRyYXRlIGZyYWN0aW9uLgotCSAqLwotCWJhdWRjbGsgPSAoTUNGX0JVU0NMSyAvIG1jZnJzX2JhdWRfdGFibGVbaV0pIC8gMzI7Ci0JZnJhY3Rpb24gPSBNQ0ZfQlVTQ0xLIC0gKGJhdWRjbGsgKiAzMiAqIG1jZnJzX2JhdWRfdGFibGVbaV0pOwotCWZyYWN0aW9uICo9IDE2OwotCWZyYWN0aW9uIC89ICgzMiAqIG1jZnJzX2JhdWRfdGFibGVbaV0pOwotI2Vsc2UKLQliYXVkY2xrID0gKChNQ0ZfQlVTQ0xLIC8gbWNmcnNfYmF1ZF90YWJsZVtpXSkgKyAxNikgLyAzMjsKLSNlbmRpZgotCi0JaW5mby0+YmF1ZCA9IG1jZnJzX2JhdWRfdGFibGVbaV07Ci0KLQltcjEgPSBNQ0ZVQVJUX01SMV9SWElSUVJEWSB8IE1DRlVBUlRfTVIxX1JYRVJSQ0hBUjsKLQltcjIgPSAwOwotCi0Jc3dpdGNoIChjZmxhZyAmIENTSVpFKSB7Ci0JY2FzZSBDUzU6CW1yMSB8PSBNQ0ZVQVJUX01SMV9DUzU7IGJyZWFrOwotCWNhc2UgQ1M2OgltcjEgfD0gTUNGVUFSVF9NUjFfQ1M2OyBicmVhazsKLQljYXNlIENTNzoJbXIxIHw9IE1DRlVBUlRfTVIxX0NTNzsgYnJlYWs7Ci0JY2FzZSBDUzg6Ci0JZGVmYXVsdDoJbXIxIHw9IE1DRlVBUlRfTVIxX0NTODsgYnJlYWs7Ci0JfQotCi0JaWYgKGNmbGFnICYgUEFSRU5CKSB7Ci0JCWlmIChjZmxhZyAmIENNU1BBUikgewotCQkJaWYgKGNmbGFnICYgUEFST0REKQotCQkJCW1yMSB8PSBNQ0ZVQVJUX01SMV9QQVJJVFlNQVJLOwotCQkJZWxzZQotCQkJCW1yMSB8PSBNQ0ZVQVJUX01SMV9QQVJJVFlTUEFDRTsKLQkJfSBlbHNlIHsKLQkJCWlmIChjZmxhZyAmIFBBUk9ERCkKLQkJCQltcjEgfD0gTUNGVUFSVF9NUjFfUEFSSVRZT0REOwotCQkJZWxzZQotCQkJCW1yMSB8PSBNQ0ZVQVJUX01SMV9QQVJJVFlFVkVOOwotCQl9Ci0JfSBlbHNlIHsKLQkJbXIxIHw9IE1DRlVBUlRfTVIxX1BBUklUWU5PTkU7Ci0JfQotCi0JaWYgKGNmbGFnICYgQ1NUT1BCKQotCQltcjIgfD0gTUNGVUFSVF9NUjJfU1RPUDI7Ci0JZWxzZQotCQltcjIgfD0gTUNGVUFSVF9NUjJfU1RPUDE7Ci0KLQlpZiAoY2ZsYWcgJiBDUlRTQ1RTKSB7Ci0JCW1yMSB8PSBNQ0ZVQVJUX01SMV9SWFJUUzsKLQkJbXIyIHw9IE1DRlVBUlRfTVIyX1RYQ1RTOwotCX0KLQotCWlmIChjZmxhZyAmIENMT0NBTCkKLQkJaW5mby0+ZmxhZ3MgJj0gfkFTWU5DX0NIRUNLX0NEOwotCWVsc2UKLQkJaW5mby0+ZmxhZ3MgfD0gQVNZTkNfQ0hFQ0tfQ0Q7Ci0KLQl1YXJ0cCA9IGluZm8tPmFkZHI7Ci0KLQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0jaWYgMAotCXByaW50aygiJXMoJWQpOiBtcjE9JXggbXIyPSV4IGJhdWRjbGs9JXhcbiIsIF9fRklMRV9fLCBfX0xJTkVfXywKLQkJbXIxLCBtcjIsIGJhdWRjbGspOwotI2VuZGlmCi0JLyoKLQkgIE5vdGU6IHBnIDEyLTE2IG9mIE1DRjUyMDZlIFVzZXIncyBNYW51YWwgc3RhdGVzIHRoYXQgYQotCSAgc29mdHdhcmUgcmVzZXQgc2hvdWxkIGJlIHBlcmZvcm1lZCBwcmlvciB0byBjaGFuZ2luZwotCSAgVU1SMSwyLCBVQ1NSLCBVQUNSLCBiaXQgNwotCSovCi0JdWFydHBbTUNGVUFSVF9VQ1JdID0gTUNGVUFSVF9VQ1JfQ01EUkVTRVRSWDsgICAgLyogcmVzZXQgUlggKi8KLQl1YXJ0cFtNQ0ZVQVJUX1VDUl0gPSBNQ0ZVQVJUX1VDUl9DTURSRVNFVFRYOyAgICAvKiByZXNldCBUWCAqLwotCXVhcnRwW01DRlVBUlRfVUNSXSA9IE1DRlVBUlRfVUNSX0NNRFJFU0VUTVJQVFI7CS8qIHJlc2V0IE1SIHBvaW50ZXIgKi8KLQl1YXJ0cFtNQ0ZVQVJUX1VNUl0gPSBtcjE7Ci0JdWFydHBbTUNGVUFSVF9VTVJdID0gbXIyOwotCXVhcnRwW01DRlVBUlRfVUJHMV0gPSAoYmF1ZGNsayAmIDB4ZmYwMCkgPj4gODsJLyogc2V0IG1zYiBieXRlICovCi0JdWFydHBbTUNGVUFSVF9VQkcyXSA9IChiYXVkY2xrICYgMHhmZik7CQkvKiBzZXQgbHNiIGJ5dGUgKi8KLSNpZmRlZglDT05GSUdfTTUyNzIKLQl1YXJ0cFtNQ0ZVQVJUX1VGUERdID0gKGZyYWN0aW9uICYgMHhmKTsJCS8qIHNldCBmcmFjdGlvbiAqLwotI2VuZGlmCi0JdWFydHBbTUNGVUFSVF9VQ1NSXSA9IE1DRlVBUlRfVUNTUl9SWENMS1RJTUVSIHwgTUNGVUFSVF9VQ1NSX1RYQ0xLVElNRVI7Ci0JdWFydHBbTUNGVUFSVF9VQ1JdID0gTUNGVUFSVF9VQ1JfUlhFTkFCTEUgfCBNQ0ZVQVJUX1VDUl9UWEVOQUJMRTsKLQltY2Zyc19zZXRzaWduYWxzKGluZm8sIDEsIC0xKTsKLQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Ci0JcmV0dXJuOwotfQotCi1zdGF0aWMgdm9pZCBtY2Zyc19mbHVzaF9jaGFycyhzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQotewotCXZvbGF0aWxlIHVuc2lnbmVkIGNoYXIJKnVhcnRwOwotCXN0cnVjdCBtY2Zfc2VyaWFsCSppbmZvID0gKHN0cnVjdCBtY2Zfc2VyaWFsICopdHR5LT5kcml2ZXJfZGF0YTsKLQl1bnNpZ25lZCBsb25nCQlmbGFnczsKLQotCWlmIChzZXJpYWxfcGFyYW5vaWFfY2hlY2soaW5mbywgdHR5LT5uYW1lLCAibWNmcnNfZmx1c2hfY2hhcnMiKSkKLQkJcmV0dXJuOwotCi0JdWFydHAgPSAodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSBpbmZvLT5hZGRyOwotCi0JLyoKLQkgKiByZS1lbmFibGUgcmVjZWl2ZXIgaW50ZXJydXB0Ci0JICovCi0JbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCWlmICgoIShpbmZvLT5pbXIgJiBNQ0ZVQVJUX1VJUl9SWFJFQURZKSkgJiYKLQkgICAgKGluZm8tPmZsYWdzICYgQVNZTkNfSU5JVElBTElaRUQpICkgewotCQlpbmZvLT5pbXIgfD0gTUNGVUFSVF9VSVJfUlhSRUFEWTsKLQkJdWFydHBbTUNGVUFSVF9VSU1SXSA9IGluZm8tPmltcjsKLQl9Ci0JbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwotCi0JaWYgKGluZm8tPnhtaXRfY250IDw9IDAgfHwgdHR5LT5zdG9wcGVkIHx8IHR0eS0+aHdfc3RvcHBlZCB8fAotCSAgICAhaW5mby0+eG1pdF9idWYpCi0JCXJldHVybjsKLQotCS8qIEVuYWJsZSB0cmFuc21pdHRlciAqLwotCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQlpbmZvLT5pbXIgfD0gTUNGVUFSVF9VSVJfVFhSRUFEWTsKLQl1YXJ0cFtNQ0ZVQVJUX1VJTVJdID0gaW5mby0+aW1yOwotCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLX0KLQotc3RhdGljIGludCBtY2Zyc193cml0ZShzdHJ1Y3QgdHR5X3N0cnVjdCAqIHR0eSwKLQkJICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiwgaW50IGNvdW50KQotewotCXZvbGF0aWxlIHVuc2lnbmVkIGNoYXIJKnVhcnRwOwotCXN0cnVjdCBtY2Zfc2VyaWFsCSppbmZvID0gKHN0cnVjdCBtY2Zfc2VyaWFsICopdHR5LT5kcml2ZXJfZGF0YTsKLQl1bnNpZ25lZCBsb25nCQlmbGFnczsKLQlpbnQJCQljLCB0b3RhbCA9IDA7Ci0KLSNpZiAwCi0JcHJpbnRrKCIlcyglZCk6IG1jZnJzX3dyaXRlKHR0eT0leCxidWY9JXgsY291bnQ9JWQpXG4iLAotCQlfX0ZJTEVfXywgX19MSU5FX18sIChpbnQpdHR5LCAoaW50KWJ1ZiwgY291bnQpOwotI2VuZGlmCi0KLQlpZiAoc2VyaWFsX3BhcmFub2lhX2NoZWNrKGluZm8sIHR0eS0+bmFtZSwgIm1jZnJzX3dyaXRlIikpCi0JCXJldHVybiAwOwotCi0JaWYgKCF0dHkgfHwgIWluZm8tPnhtaXRfYnVmKQotCQlyZXR1cm4gMDsKLQkKLQlsb2NhbF9zYXZlX2ZsYWdzKGZsYWdzKTsKLQl3aGlsZSAoMSkgewotCQlsb2NhbF9pcnFfZGlzYWJsZSgpOwkJCi0JCWMgPSBtaW4oY291bnQsIChpbnQpIG1pbigoKGludClTRVJJQUxfWE1JVF9TSVpFKSAtIGluZm8tPnhtaXRfY250IC0gMSwKLQkJCSgoaW50KVNFUklBTF9YTUlUX1NJWkUpIC0gaW5mby0+eG1pdF9oZWFkKSk7Ci0JCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLQotCQlpZiAoYyA8PSAwKQotCQkJYnJlYWs7Ci0KLQkJbWVtY3B5KGluZm8tPnhtaXRfYnVmICsgaW5mby0+eG1pdF9oZWFkLCBidWYsIGMpOwotCi0JCWxvY2FsX2lycV9kaXNhYmxlKCk7Ci0JCWluZm8tPnhtaXRfaGVhZCA9IChpbmZvLT54bWl0X2hlYWQgKyBjKSAmIChTRVJJQUxfWE1JVF9TSVpFLTEpOwotCQlpbmZvLT54bWl0X2NudCArPSBjOwotCQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Ci0KLQkJYnVmICs9IGM7Ci0JCWNvdW50IC09IGM7Ci0JCXRvdGFsICs9IGM7Ci0JfQotCi0JbG9jYWxfaXJxX2Rpc2FibGUoKTsKLQl1YXJ0cCA9IGluZm8tPmFkZHI7Ci0JaW5mby0+aW1yIHw9IE1DRlVBUlRfVUlSX1RYUkVBRFk7Ci0JdWFydHBbTUNGVUFSVF9VSU1SXSA9IGluZm8tPmltcjsKLQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Ci0KLQlyZXR1cm4gdG90YWw7Ci19Ci0KLXN0YXRpYyBpbnQgbWNmcnNfd3JpdGVfcm9vbShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQotewotCXN0cnVjdCBtY2Zfc2VyaWFsICppbmZvID0gKHN0cnVjdCBtY2Zfc2VyaWFsICopdHR5LT5kcml2ZXJfZGF0YTsKLQlpbnQJcmV0OwotCi0JaWYgKHNlcmlhbF9wYXJhbm9pYV9jaGVjayhpbmZvLCB0dHktPm5hbWUsICJtY2Zyc193cml0ZV9yb29tIikpCi0JCXJldHVybiAwOwotCXJldCA9IFNFUklBTF9YTUlUX1NJWkUgLSBpbmZvLT54bWl0X2NudCAtIDE7Ci0JaWYgKHJldCA8IDApCi0JCXJldCA9IDA7Ci0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGludCBtY2Zyc19jaGFyc19pbl9idWZmZXIoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKLXsKLQlzdHJ1Y3QgbWNmX3NlcmlhbCAqaW5mbyA9IChzdHJ1Y3QgbWNmX3NlcmlhbCAqKXR0eS0+ZHJpdmVyX2RhdGE7Ci0KLQlpZiAoc2VyaWFsX3BhcmFub2lhX2NoZWNrKGluZm8sIHR0eS0+bmFtZSwgIm1jZnJzX2NoYXJzX2luX2J1ZmZlciIpKQotCQlyZXR1cm4gMDsKLQlyZXR1cm4gaW5mby0+eG1pdF9jbnQ7Ci19Ci0KLXN0YXRpYyB2b2lkIG1jZnJzX2ZsdXNoX2J1ZmZlcihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQotewotCXN0cnVjdCBtY2Zfc2VyaWFsCSppbmZvID0gKHN0cnVjdCBtY2Zfc2VyaWFsICopdHR5LT5kcml2ZXJfZGF0YTsKLQl1bnNpZ25lZCBsb25nCQlmbGFnczsKLQotCWlmIChzZXJpYWxfcGFyYW5vaWFfY2hlY2soaW5mbywgdHR5LT5uYW1lLCAibWNmcnNfZmx1c2hfYnVmZmVyIikpCi0JCXJldHVybjsKLQotCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQlpbmZvLT54bWl0X2NudCA9IGluZm8tPnhtaXRfaGVhZCA9IGluZm8tPnhtaXRfdGFpbCA9IDA7Ci0JbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwotCi0JdHR5X3dha2V1cCh0dHkpOwotfQotCi0vKgotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBtY2Zyc190aHJvdHRsZSgpCi0gKiAKLSAqIFRoaXMgcm91dGluZSBpcyBjYWxsZWQgYnkgdGhlIHVwcGVyLWxheWVyIHR0eSBsYXllciB0byBzaWduYWwgdGhhdAotICogaW5jb21pbmcgY2hhcmFjdGVycyBzaG91bGQgYmUgdGhyb3R0bGVkLgotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKi8KLXN0YXRpYyB2b2lkIG1jZnJzX3Rocm90dGxlKHN0cnVjdCB0dHlfc3RydWN0ICogdHR5KQotewotCXN0cnVjdCBtY2Zfc2VyaWFsICppbmZvID0gKHN0cnVjdCBtY2Zfc2VyaWFsICopdHR5LT5kcml2ZXJfZGF0YTsKLSNpZmRlZiBTRVJJQUxfREVCVUdfVEhST1RUTEUKLQljaGFyCWJ1Zls2NF07Ci0JCi0JcHJpbnRrKCJ0aHJvdHRsZSAlczogJWQuLi4uXG4iLCB0dHlfbmFtZSh0dHksIGJ1ZiksCi0JICAgICAgIHR0eS0+bGRpc2MuY2hhcnNfaW5fYnVmZmVyKHR0eSkpOwotI2VuZGlmCi0KLQlpZiAoc2VyaWFsX3BhcmFub2lhX2NoZWNrKGluZm8sIHR0eS0+bmFtZSwgIm1jZnJzX3Rocm90dGxlIikpCi0JCXJldHVybjsKLQkKLQlpZiAoSV9JWE9GRih0dHkpKQotCQlpbmZvLT54X2NoYXIgPSBTVE9QX0NIQVIodHR5KTsKLQotCS8qIFR1cm4gb2ZmIFJUUyBsaW5lIChkbyB0aGlzIGF0b21pYykgKi8KLX0KLQotc3RhdGljIHZvaWQgbWNmcnNfdW50aHJvdHRsZShzdHJ1Y3QgdHR5X3N0cnVjdCAqIHR0eSkKLXsKLQlzdHJ1Y3QgbWNmX3NlcmlhbCAqaW5mbyA9IChzdHJ1Y3QgbWNmX3NlcmlhbCAqKXR0eS0+ZHJpdmVyX2RhdGE7Ci0jaWZkZWYgU0VSSUFMX0RFQlVHX1RIUk9UVExFCi0JY2hhcglidWZbNjRdOwotCQotCXByaW50aygidW50aHJvdHRsZSAlczogJWQuLi4uXG4iLCB0dHlfbmFtZSh0dHksIGJ1ZiksCi0JICAgICAgIHR0eS0+bGRpc2MuY2hhcnNfaW5fYnVmZmVyKHR0eSkpOwotI2VuZGlmCi0KLQlpZiAoc2VyaWFsX3BhcmFub2lhX2NoZWNrKGluZm8sIHR0eS0+bmFtZSwgIm1jZnJzX3VudGhyb3R0bGUiKSkKLQkJcmV0dXJuOwotCQotCWlmIChJX0lYT0ZGKHR0eSkpIHsKLQkJaWYgKGluZm8tPnhfY2hhcikKLQkJCWluZm8tPnhfY2hhciA9IDA7Ci0JCWVsc2UKLQkJCWluZm8tPnhfY2hhciA9IFNUQVJUX0NIQVIodHR5KTsKLQl9Ci0KLQkvKiBBc3NlcnQgUlRTIGxpbmUgKGRvIHRoaXMgYXRvbWljKSAqLwotfQotCi0vKgotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBtY2Zyc19pb2N0bCgpIGFuZCBmcmllbmRzCi0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqLwotCi1zdGF0aWMgaW50IGdldF9zZXJpYWxfaW5mbyhzdHJ1Y3QgbWNmX3NlcmlhbCAqIGluZm8sCi0JCQkgICBzdHJ1Y3Qgc2VyaWFsX3N0cnVjdCAqIHJldGluZm8pCi17Ci0Jc3RydWN0IHNlcmlhbF9zdHJ1Y3QgdG1wOwotICAKLQlpZiAoIXJldGluZm8pCi0JCXJldHVybiAtRUZBVUxUOwotCW1lbXNldCgmdG1wLCAwLCBzaXplb2YodG1wKSk7Ci0JdG1wLnR5cGUgPSBpbmZvLT50eXBlOwotCXRtcC5saW5lID0gaW5mby0+bGluZTsKLQl0bXAucG9ydCA9ICh1bnNpZ25lZCBpbnQpIGluZm8tPmFkZHI7Ci0JdG1wLmlycSA9IGluZm8tPmlycTsKLQl0bXAuZmxhZ3MgPSBpbmZvLT5mbGFnczsKLQl0bXAuYmF1ZF9iYXNlID0gaW5mby0+YmF1ZF9iYXNlOwotCXRtcC5jbG9zZV9kZWxheSA9IGluZm8tPmNsb3NlX2RlbGF5OwotCXRtcC5jbG9zaW5nX3dhaXQgPSBpbmZvLT5jbG9zaW5nX3dhaXQ7Ci0JdG1wLmN1c3RvbV9kaXZpc29yID0gaW5mby0+Y3VzdG9tX2Rpdmlzb3I7Ci0JcmV0dXJuIGNvcHlfdG9fdXNlcihyZXRpbmZvLCZ0bXAsc2l6ZW9mKCpyZXRpbmZvKSkgPyAtRUZBVUxUIDogMDsKLX0KLQotc3RhdGljIGludCBzZXRfc2VyaWFsX2luZm8oc3RydWN0IG1jZl9zZXJpYWwgKiBpbmZvLAotCQkJICAgc3RydWN0IHNlcmlhbF9zdHJ1Y3QgKiBuZXdfaW5mbykKLXsKLQlzdHJ1Y3Qgc2VyaWFsX3N0cnVjdCBuZXdfc2VyaWFsOwotCXN0cnVjdCBtY2Zfc2VyaWFsIG9sZF9pbmZvOwotCWludCAJcmV0dmFsID0gMDsKLQotCWlmICghbmV3X2luZm8pCi0JCXJldHVybiAtRUZBVUxUOwotCWlmIChjb3B5X2Zyb21fdXNlcigmbmV3X3NlcmlhbCxuZXdfaW5mbyxzaXplb2YobmV3X3NlcmlhbCkpKQotCQlyZXR1cm4gLUVGQVVMVDsKLQlvbGRfaW5mbyA9ICppbmZvOwotCi0JaWYgKCFjYXBhYmxlKENBUF9TWVNfQURNSU4pKSB7Ci0JCWlmICgobmV3X3NlcmlhbC5iYXVkX2Jhc2UgIT0gaW5mby0+YmF1ZF9iYXNlKSB8fAotCQkgICAgKG5ld19zZXJpYWwudHlwZSAhPSBpbmZvLT50eXBlKSB8fAotCQkgICAgKG5ld19zZXJpYWwuY2xvc2VfZGVsYXkgIT0gaW5mby0+Y2xvc2VfZGVsYXkpIHx8Ci0JCSAgICAoKG5ld19zZXJpYWwuZmxhZ3MgJiB+QVNZTkNfVVNSX01BU0spICE9Ci0JCSAgICAgKGluZm8tPmZsYWdzICYgfkFTWU5DX1VTUl9NQVNLKSkpCi0JCQlyZXR1cm4gLUVQRVJNOwotCQlpbmZvLT5mbGFncyA9ICgoaW5mby0+ZmxhZ3MgJiB+QVNZTkNfVVNSX01BU0spIHwKLQkJCSAgICAgICAobmV3X3NlcmlhbC5mbGFncyAmIEFTWU5DX1VTUl9NQVNLKSk7Ci0JCWluZm8tPmN1c3RvbV9kaXZpc29yID0gbmV3X3NlcmlhbC5jdXN0b21fZGl2aXNvcjsKLQkJZ290byBjaGVja19hbmRfZXhpdDsKLQl9Ci0KLQlpZiAoaW5mby0+Y291bnQgPiAxKQotCQlyZXR1cm4gLUVCVVNZOwotCi0JLyoKLQkgKiBPSywgcGFzdCB0aGlzIHBvaW50LCBhbGwgdGhlIGVycm9yIGNoZWNraW5nIGhhcyBiZWVuIGRvbmUuCi0JICogQXQgdGhpcyBwb2ludCwgd2Ugc3RhcnQgbWFraW5nIGNoYW5nZXMuLi4uLgotCSAqLwotCi0JaW5mby0+YmF1ZF9iYXNlID0gbmV3X3NlcmlhbC5iYXVkX2Jhc2U7Ci0JaW5mby0+ZmxhZ3MgPSAoKGluZm8tPmZsYWdzICYgfkFTWU5DX0ZMQUdTKSB8Ci0JCQkobmV3X3NlcmlhbC5mbGFncyAmIEFTWU5DX0ZMQUdTKSk7Ci0JaW5mby0+dHlwZSA9IG5ld19zZXJpYWwudHlwZTsKLQlpbmZvLT5jbG9zZV9kZWxheSA9IG5ld19zZXJpYWwuY2xvc2VfZGVsYXk7Ci0JaW5mby0+Y2xvc2luZ193YWl0ID0gbmV3X3NlcmlhbC5jbG9zaW5nX3dhaXQ7Ci0KLWNoZWNrX2FuZF9leGl0OgotCXJldHZhbCA9IHN0YXJ0dXAoaW5mbyk7Ci0JcmV0dXJuIHJldHZhbDsKLX0KLQotLyoKLSAqIGdldF9sc3JfaW5mbyAtIGdldCBsaW5lIHN0YXR1cyByZWdpc3RlciBpbmZvCi0gKgotICogUHVycG9zZTogTGV0IHVzZXIgY2FsbCBpb2N0bCgpIHRvIGdldCBpbmZvIHdoZW4gdGhlIFVBUlQgcGh5c2ljYWxseQotICogCSAgICBpcyBlbXB0aWVkLiAgT24gYnVzIHR5cGVzIGxpa2UgUlM0ODUsIHRoZSB0cmFuc21pdHRlciBtdXN0Ci0gKiAJICAgIHJlbGVhc2UgdGhlIGJ1cyBhZnRlciB0cmFuc21pdHRpbmcuIFRoaXMgbXVzdCBiZSBkb25lIHdoZW4KLSAqIAkgICAgdGhlIHRyYW5zbWl0IHNoaWZ0IHJlZ2lzdGVyIGlzIGVtcHR5LCBub3QgYmUgZG9uZSB3aGVuIHRoZQotICogCSAgICB0cmFuc21pdCBob2xkaW5nIHJlZ2lzdGVyIGlzIGVtcHR5LiAgVGhpcyBmdW5jdGlvbmFsaXR5Ci0gKiAJICAgIGFsbG93cyBhbiBSUzQ4NSBkcml2ZXIgdG8gYmUgd3JpdHRlbiBpbiB1c2VyIHNwYWNlLiAKLSAqLwotc3RhdGljIGludCBnZXRfbHNyX2luZm8oc3RydWN0IG1jZl9zZXJpYWwgKiBpbmZvLCB1bnNpZ25lZCBpbnQgKnZhbHVlKQotewotCXZvbGF0aWxlIHVuc2lnbmVkIGNoYXIJKnVhcnRwOwotCXVuc2lnbmVkIGxvbmcJCWZsYWdzOwotCXVuc2lnbmVkIGNoYXIJCXN0YXR1czsKLQotCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQl1YXJ0cCA9IGluZm8tPmFkZHI7Ci0Jc3RhdHVzID0gKHVhcnRwW01DRlVBUlRfVVNSXSAmIE1DRlVBUlRfVVNSX1RYRU1QVFkpID8gVElPQ1NFUl9URU1UIDogMDsKLQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Ci0KLQlyZXR1cm4gcHV0X3VzZXIoc3RhdHVzLHZhbHVlKTsKLX0KLQotLyoKLSAqIFRoaXMgcm91dGluZSBzZW5kcyBhIGJyZWFrIGNoYXJhY3RlciBvdXQgdGhlIHNlcmlhbCBwb3J0LgotICovCi1zdGF0aWMgdm9pZCBzZW5kX2JyZWFrKAlzdHJ1Y3QgbWNmX3NlcmlhbCAqIGluZm8sIGludCBkdXJhdGlvbikKLXsKLQl2b2xhdGlsZSB1bnNpZ25lZCBjaGFyCSp1YXJ0cDsKLQl1bnNpZ25lZCBsb25nCQlmbGFnczsKLQotCWlmICghaW5mby0+YWRkcikKLQkJcmV0dXJuOwotCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7Ci0JdWFydHAgPSBpbmZvLT5hZGRyOwotCi0JbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCXVhcnRwW01DRlVBUlRfVUNSXSA9IE1DRlVBUlRfVUNSX0NNREJSRUFLU1RBUlQ7Ci0Jc2NoZWR1bGVfdGltZW91dChkdXJhdGlvbik7Ci0JdWFydHBbTUNGVUFSVF9VQ1JdID0gTUNGVUFSVF9VQ1JfQ01EQlJFQUtTVE9QOwotCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLX0KLQotc3RhdGljIGludCBtY2Zyc190aW9jbWdldChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAqZmlsZSkKLXsKLQlzdHJ1Y3QgbWNmX3NlcmlhbCAqIGluZm8gPSAoc3RydWN0IG1jZl9zZXJpYWwgKil0dHktPmRyaXZlcl9kYXRhOwotCi0JaWYgKHNlcmlhbF9wYXJhbm9pYV9jaGVjayhpbmZvLCB0dHktPm5hbWUsICJtY2Zyc19pb2N0bCIpKQotCQlyZXR1cm4gLUVOT0RFVjsKLQlpZiAodHR5LT5mbGFncyAmICgxIDw8IFRUWV9JT19FUlJPUikpCi0JCXJldHVybiAtRUlPOwotCi0JcmV0dXJuIG1jZnJzX2dldHNpZ25hbHMoaW5mbyk7Ci19Ci0KLXN0YXRpYyBpbnQgbWNmcnNfdGlvY21zZXQoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKmZpbGUsCi0JCQkgIHVuc2lnbmVkIGludCBzZXQsIHVuc2lnbmVkIGludCBjbGVhcikKLXsKLQlzdHJ1Y3QgbWNmX3NlcmlhbCAqIGluZm8gPSAoc3RydWN0IG1jZl9zZXJpYWwgKil0dHktPmRyaXZlcl9kYXRhOwotCWludCBydHMgPSAtMSwgZHRyID0gLTE7Ci0KLQlpZiAoc2VyaWFsX3BhcmFub2lhX2NoZWNrKGluZm8sIHR0eS0+bmFtZSwgIm1jZnJzX2lvY3RsIikpCi0JCXJldHVybiAtRU5PREVWOwotCWlmICh0dHktPmZsYWdzICYgKDEgPDwgVFRZX0lPX0VSUk9SKSkKLQkJcmV0dXJuIC1FSU87Ci0KLQlpZiAoc2V0ICYgVElPQ01fUlRTKQotCQlydHMgPSAxOwotCWlmIChzZXQgJiBUSU9DTV9EVFIpCi0JCWR0ciA9IDE7Ci0JaWYgKGNsZWFyICYgVElPQ01fUlRTKQotCQlydHMgPSAwOwotCWlmIChjbGVhciAmIFRJT0NNX0RUUikKLQkJZHRyID0gMDsKLQotCW1jZnJzX3NldHNpZ25hbHMoaW5mbywgZHRyLCBydHMpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgbWNmcnNfaW9jdGwoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKiBmaWxlLAotCQkgICAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCi17Ci0Jc3RydWN0IG1jZl9zZXJpYWwgKiBpbmZvID0gKHN0cnVjdCBtY2Zfc2VyaWFsICopdHR5LT5kcml2ZXJfZGF0YTsKLQlpbnQgcmV0dmFsLCBlcnJvcjsKLQotCWlmIChzZXJpYWxfcGFyYW5vaWFfY2hlY2soaW5mbywgdHR5LT5uYW1lLCAibWNmcnNfaW9jdGwiKSkKLQkJcmV0dXJuIC1FTk9ERVY7Ci0KLQlpZiAoKGNtZCAhPSBUSU9DR1NFUklBTCkgJiYgKGNtZCAhPSBUSU9DU1NFUklBTCkgJiYKLQkgICAgKGNtZCAhPSBUSU9DU0VSQ09ORklHKSAmJiAoY21kICE9IFRJT0NTRVJHV0lMRCkgICYmCi0JICAgIChjbWQgIT0gVElPQ1NFUlNXSUxEKSAmJiAoY21kICE9IFRJT0NTRVJHU1RSVUNUKSkgewotCQlpZiAodHR5LT5mbGFncyAmICgxIDw8IFRUWV9JT19FUlJPUikpCi0JCSAgICByZXR1cm4gLUVJTzsKLQl9Ci0JCi0Jc3dpdGNoIChjbWQpIHsKLQkJY2FzZSBUQ1NCUks6CS8qIFNWSUQgdmVyc2lvbjogbm9uLXplcm8gYXJnIC0tPiBubyBicmVhayAqLwotCQkJcmV0dmFsID0gdHR5X2NoZWNrX2NoYW5nZSh0dHkpOwotCQkJaWYgKHJldHZhbCkKLQkJCQlyZXR1cm4gcmV0dmFsOwotCQkJdHR5X3dhaXRfdW50aWxfc2VudCh0dHksIDApOwotCQkJaWYgKCFhcmcpCi0JCQkJc2VuZF9icmVhayhpbmZvLCBIWi80KTsJLyogMS80IHNlY29uZCAqLwotCQkJcmV0dXJuIDA7Ci0JCWNhc2UgVENTQlJLUDoJLyogc3VwcG9ydCBmb3IgUE9TSVggdGNzZW5kYnJlYWsoKSAqLwotCQkJcmV0dmFsID0gdHR5X2NoZWNrX2NoYW5nZSh0dHkpOwotCQkJaWYgKHJldHZhbCkKLQkJCQlyZXR1cm4gcmV0dmFsOwotCQkJdHR5X3dhaXRfdW50aWxfc2VudCh0dHksIDApOwotCQkJc2VuZF9icmVhayhpbmZvLCBhcmcgPyBhcmcqKEhaLzEwKSA6IEhaLzQpOwotCQkJcmV0dXJuIDA7Ci0JCWNhc2UgVElPQ0dTRVJJQUw6Ci0JCQlpZiAoYWNjZXNzX29rKFZFUklGWV9XUklURSwgKHZvaWQgKikgYXJnLAotCQkJCQkJc2l6ZW9mKHN0cnVjdCBzZXJpYWxfc3RydWN0KSkpCi0JCQkJcmV0dXJuIGdldF9zZXJpYWxfaW5mbyhpbmZvLAotCQkJCQkgICAgICAgKHN0cnVjdCBzZXJpYWxfc3RydWN0ICopIGFyZyk7Ci0JCQlyZXR1cm4gLUVGQVVMVDsKLQkJY2FzZSBUSU9DU1NFUklBTDoKLQkJCXJldHVybiBzZXRfc2VyaWFsX2luZm8oaW5mbywKLQkJCQkJICAgICAgIChzdHJ1Y3Qgc2VyaWFsX3N0cnVjdCAqKSBhcmcpOwotCQljYXNlIFRJT0NTRVJHRVRMU1I6IC8qIEdldCBsaW5lIHN0YXR1cyByZWdpc3RlciAqLwotCQkJaWYgKGFjY2Vzc19vayhWRVJJRllfV1JJVEUsICh2b2lkICopIGFyZywKLQkJCQkJCXNpemVvZih1bnNpZ25lZCBpbnQpKSkKLQkJCQlyZXR1cm4gZ2V0X2xzcl9pbmZvKGluZm8sICh1bnNpZ25lZCBpbnQgKikgYXJnKTsKLQkJCXJldHVybiAtRUZBVUxUOwotCQljYXNlIFRJT0NTRVJHU1RSVUNUOgotCQkJZXJyb3IgPSBjb3B5X3RvX3VzZXIoKHN0cnVjdCBtY2Zfc2VyaWFsICopIGFyZywKLQkJCQkgICAgaW5mbywgc2l6ZW9mKHN0cnVjdCBtY2Zfc2VyaWFsKSk7Ci0JCQlpZiAoZXJyb3IpCi0JCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCQlyZXR1cm4gMDsKLQkJCQotI2lmZGVmIFRJT0NTRVQ0MjIKLQkJY2FzZSBUSU9DU0VUNDIyOiB7Ci0JCQl1bnNpZ25lZCBpbnQgdmFsOwotCQkJZ2V0X3VzZXIodmFsLCAodW5zaWduZWQgaW50ICopIGFyZyk7Ci0JCQltY2Zfc2V0cGEoTUNGUFBfUEExMSwgKHZhbCA/IDAgOiBNQ0ZQUF9QQTExKSk7Ci0JCQlicmVhazsKLQkJfQotCQljYXNlIFRJT0NHRVQ0MjI6IHsKLQkJCXVuc2lnbmVkIGludCB2YWw7Ci0JCQl2YWwgPSAobWNmX2dldHBhKCkgJiBNQ0ZQUF9QQTExKSA/IDAgOiAxOwotCQkJcHV0X3VzZXIodmFsLCAodW5zaWduZWQgaW50ICopIGFyZyk7Ci0JCQlicmVhazsKLQkJfQotI2VuZGlmCi0KLQkJZGVmYXVsdDoKLQkJCXJldHVybiAtRU5PSU9DVExDTUQ7Ci0JCX0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgbWNmcnNfc2V0X3Rlcm1pb3Moc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGt0ZXJtaW9zICpvbGRfdGVybWlvcykKLXsKLQlzdHJ1Y3QgbWNmX3NlcmlhbCAqaW5mbyA9IChzdHJ1Y3QgbWNmX3NlcmlhbCAqKXR0eS0+ZHJpdmVyX2RhdGE7Ci0KLQlpZiAodHR5LT50ZXJtaW9zLT5jX2NmbGFnID09IG9sZF90ZXJtaW9zLT5jX2NmbGFnKQotCQlyZXR1cm47Ci0KLQltY2Zyc19jaGFuZ2Vfc3BlZWQoaW5mbyk7Ci0KLQlpZiAoKG9sZF90ZXJtaW9zLT5jX2NmbGFnICYgQ1JUU0NUUykgJiYKLQkgICAgISh0dHktPnRlcm1pb3MtPmNfY2ZsYWcgJiBDUlRTQ1RTKSkgewotCQl0dHktPmh3X3N0b3BwZWQgPSAwOwotCQltY2Zyc19zZXRzaWduYWxzKGluZm8sIC0xLCAxKTsKLSNpZiAwCi0JCW1jZnJzX3N0YXJ0KHR0eSk7Ci0jZW5kaWYKLQl9Ci19Ci0KLS8qCi0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIG1jZnJzX2Nsb3NlKCkKLSAqIAotICogVGhpcyByb3V0aW5lIGlzIGNhbGxlZCB3aGVuIHRoZSBzZXJpYWwgcG9ydCBnZXRzIGNsb3NlZC4gIEZpcnN0LCB3ZQotICogd2FpdCBmb3IgdGhlIGxhc3QgcmVtYWluaW5nIGRhdGEgdG8gYmUgc2VudC4gIFRoZW4sIHdlIHVubGluayBpdHMKLSAqIFMgc3RydWN0dXJlIGZyb20gdGhlIGludGVycnVwdCBjaGFpbiBpZiBuZWNlc3NhcnksIGFuZCB3ZSBmcmVlCi0gKiB0aGF0IElSUSBpZiBub3RoaW5nIGlzIGxlZnQgaW4gdGhlIGNoYWluLgotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKi8KLXN0YXRpYyB2b2lkIG1jZnJzX2Nsb3NlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICogZmlscCkKLXsKLQl2b2xhdGlsZSB1bnNpZ25lZCBjaGFyCSp1YXJ0cDsKLQlzdHJ1Y3QgbWNmX3NlcmlhbAkqaW5mbyA9IChzdHJ1Y3QgbWNmX3NlcmlhbCAqKXR0eS0+ZHJpdmVyX2RhdGE7Ci0JdW5zaWduZWQgbG9uZwkJZmxhZ3M7Ci0KLQlpZiAoIWluZm8gfHwgc2VyaWFsX3BhcmFub2lhX2NoZWNrKGluZm8sIHR0eS0+bmFtZSwgIm1jZnJzX2Nsb3NlIikpCi0JCXJldHVybjsKLQkKLQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0JCi0JaWYgKHR0eV9odW5nX3VwX3AoZmlscCkpIHsKLQkJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwotCQlyZXR1cm47Ci0JfQotCQotI2lmZGVmIFNFUklBTF9ERUJVR19PUEVOCi0JcHJpbnRrKCJtY2Zyc19jbG9zZSB0dHlTJWQsIGNvdW50ID0gJWRcbiIsIGluZm8tPmxpbmUsIGluZm8tPmNvdW50KTsKLSNlbmRpZgotCWlmICgodHR5LT5jb3VudCA9PSAxKSAmJiAoaW5mby0+Y291bnQgIT0gMSkpIHsKLQkJLyoKLQkJICogVWgsIG9oLiAgdHR5LT5jb3VudCBpcyAxLCB3aGljaCBtZWFucyB0aGF0IHRoZSB0dHkKLQkJICogc3RydWN0dXJlIHdpbGwgYmUgZnJlZWQuICBJbmZvLT5jb3VudCBzaG91bGQgYWx3YXlzCi0JCSAqIGJlIG9uZSBpbiB0aGVzZSBjb25kaXRpb25zLiAgSWYgaXQncyBncmVhdGVyIHRoYW4KLQkJICogb25lLCB3ZSd2ZSBnb3QgcmVhbCBwcm9ibGVtcywgc2luY2UgaXQgbWVhbnMgdGhlCi0JCSAqIHNlcmlhbCBwb3J0IHdvbid0IGJlIHNodXRkb3duLgotCQkgKi8KLQkJcHJpbnRrKCJNQ0ZSUzogYmFkIHNlcmlhbCBwb3J0IGNvdW50OyB0dHktPmNvdW50IGlzIDEsICIKLQkJICAgICAgICJpbmZvLT5jb3VudCBpcyAlZFxuIiwgaW5mby0+Y291bnQpOwotCQlpbmZvLT5jb3VudCA9IDE7Ci0JfQotCWlmICgtLWluZm8tPmNvdW50IDwgMCkgewotCQlwcmludGsoIk1DRlJTOiBiYWQgc2VyaWFsIHBvcnQgY291bnQgZm9yIHR0eVMlZDogJWRcbiIsCi0JCSAgICAgICBpbmZvLT5saW5lLCBpbmZvLT5jb3VudCk7Ci0JCWluZm8tPmNvdW50ID0gMDsKLQl9Ci0JaWYgKGluZm8tPmNvdW50KSB7Ci0JCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLQkJcmV0dXJuOwotCX0KLQlpbmZvLT5mbGFncyB8PSBBU1lOQ19DTE9TSU5HOwotCi0JLyoKLQkgKiBOb3cgd2Ugd2FpdCBmb3IgdGhlIHRyYW5zbWl0IGJ1ZmZlciB0byBjbGVhcjsgYW5kIHdlIG5vdGlmeSAKLQkgKiB0aGUgbGluZSBkaXNjaXBsaW5lIHRvIG9ubHkgcHJvY2VzcyBYT04vWE9GRiBjaGFyYWN0ZXJzLgotCSAqLwotCXR0eS0+Y2xvc2luZyA9IDE7Ci0JaWYgKGluZm8tPmNsb3Npbmdfd2FpdCAhPSBBU1lOQ19DTE9TSU5HX1dBSVRfTk9ORSkKLQkJdHR5X3dhaXRfdW50aWxfc2VudCh0dHksIGluZm8tPmNsb3Npbmdfd2FpdCk7Ci0KLQkvKgotCSAqIEF0IHRoaXMgcG9pbnQgd2Ugc3RvcCBhY2NlcHRpbmcgaW5wdXQuICBUbyBkbyB0aGlzLCB3ZQotCSAqIGRpc2FibGUgdGhlIHJlY2VpdmUgbGluZSBzdGF0dXMgaW50ZXJydXB0cywgYW5kIHRlbGwgdGhlCi0JICogaW50ZXJydXB0IGRyaXZlciB0byBzdG9wIGNoZWNraW5nIHRoZSBkYXRhIHJlYWR5IGJpdCBpbiB0aGUKLQkgKiBsaW5lIHN0YXR1cyByZWdpc3Rlci4KLQkgKi8KLQlpbmZvLT5pbXIgJj0gfk1DRlVBUlRfVUlSX1JYUkVBRFk7Ci0JdWFydHAgPSBpbmZvLT5hZGRyOwotCXVhcnRwW01DRlVBUlRfVUlNUl0gPSBpbmZvLT5pbXI7Ci0KLSNpZiAwCi0JLyogRklYTUU6IGRvIHdlIG5lZWQgdG8ga2VlcCB0aGlzIGVuYWJsZWQgZm9yIGNvbnNvbGU/PyAqLwotCWlmIChtY2Zyc19jb25zb2xlX2luaXRlZCAmJiAobWNmcnNfY29uc29sZV9wb3J0ID09IGluZm8tPmxpbmUpKSB7Ci0JCS8qIERvIG5vdCBkaXNhYmxlIHRoZSBVQVJUICovIDsKLQl9IGVsc2UKLSNlbmRpZgotCXNodXRkb3duKGluZm8pOwotCW1jZnJzX2ZsdXNoX2J1ZmZlcih0dHkpOwotCXR0eV9sZGlzY19mbHVzaCh0dHkpOwotCQotCXR0eS0+Y2xvc2luZyA9IDA7Ci0JaW5mby0+ZXZlbnQgPSAwOwotCWluZm8tPnBvcnQudHR5ID0gTlVMTDsKLSNpZiAwCQotCWlmICh0dHktPmxkaXNjLm51bSAhPSBsZGlzY3NbTl9UVFldLm51bSkgewotCQlpZiAodHR5LT5sZGlzYy5jbG9zZSkKLQkJCSh0dHktPmxkaXNjLmNsb3NlKSh0dHkpOwotCQl0dHktPmxkaXNjID0gbGRpc2NzW05fVFRZXTsKLQkJdHR5LT50ZXJtaW9zLT5jX2xpbmUgPSBOX1RUWTsKLQkJaWYgKHR0eS0+bGRpc2Mub3BlbikKLQkJCSh0dHktPmxkaXNjLm9wZW4pKHR0eSk7Ci0JfQotI2VuZGlmCQotCWlmIChpbmZvLT5ibG9ja2VkX29wZW4pIHsKLQkJaWYgKGluZm8tPmNsb3NlX2RlbGF5KSB7Ci0JCQltc2xlZXBfaW50ZXJydXB0aWJsZShqaWZmaWVzX3RvX21zZWNzKGluZm8tPmNsb3NlX2RlbGF5KSk7Ci0JCX0KLQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZpbmZvLT5vcGVuX3dhaXQpOwotCX0KLQlpbmZvLT5mbGFncyAmPSB+KEFTWU5DX05PUk1BTF9BQ1RJVkV8QVNZTkNfQ0xPU0lORyk7Ci0Jd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZpbmZvLT5jbG9zZV93YWl0KTsKLQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Ci19Ci0KLS8qCi0gKiBtY2Zyc193YWl0X3VudGlsX3NlbnQoKSAtLS0gd2FpdCB1bnRpbCB0aGUgdHJhbnNtaXR0ZXIgaXMgZW1wdHkKLSAqLwotc3RhdGljIHZvaWQKLW1jZnJzX3dhaXRfdW50aWxfc2VudChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBpbnQgdGltZW91dCkKLXsKLSNpZmRlZglDT05GSUdfTTUyNzIKLSNkZWZpbmUJTUNGNTI3Ml9GSUZPX1NJWkUJMjUJCS8qIGZpZm8gc2l6ZSArIHNoaWZ0IHJlZyAqLwotCi0Jc3RydWN0IG1jZl9zZXJpYWwgKiBpbmZvID0gKHN0cnVjdCBtY2Zfc2VyaWFsICopdHR5LT5kcml2ZXJfZGF0YTsKLQl2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICp1YXJ0cDsKLQl1bnNpZ25lZCBsb25nIG9yaWdfamlmZmllcywgZmlmb190aW1lLCBjaGFyX3RpbWUsIGZpZm9fY250OwotCi0JaWYgKHNlcmlhbF9wYXJhbm9pYV9jaGVjayhpbmZvLCB0dHktPm5hbWUsICJtY2Zyc193YWl0X3VudGlsX3NlbnQiKSkKLQkJcmV0dXJuOwotCi0Jb3JpZ19qaWZmaWVzID0gamlmZmllczsKLQotCS8qCi0JICogU2V0IHRoZSBjaGVjayBpbnRlcnZhbCB0byBiZSAxLzUgb2YgdGhlIGFwcHJveGltYXRlIHRpbWUKLQkgKiB0byBzZW5kIHRoZSBlbnRpcmUgZmlmbywgYW5kIG1ha2UgaXQgYXQgbGVhc3QgMS4gIFRoZSBjaGVjawotCSAqIGludGVydmFsIHNob3VsZCBhbHNvIGJlIGxlc3MgdGhhbiB0aGUgdGltZW91dC4KLQkgKgotCSAqIE5vdGU6IHdlIGhhdmUgdG8gdXNlIHByZXR0eSB0aWdodCB0aW1pbmdzIGhlcmUgdG8gc2F0aXNmeQotCSAqIHRoZSBOSVNULVBDVFMuCi0JICovCi0JbG9ja19rZXJuZWwoKTsKLQotCWZpZm9fdGltZSA9IChNQ0Y1MjcyX0ZJRk9fU0laRSAqIEhaICogMTApIC8gaW5mby0+YmF1ZDsKLQljaGFyX3RpbWUgPSBmaWZvX3RpbWUgLyA1OwotCWlmIChjaGFyX3RpbWUgPT0gMCkKLQkJY2hhcl90aW1lID0gMTsKLQlpZiAodGltZW91dCAmJiB0aW1lb3V0IDwgY2hhcl90aW1lKQotCQljaGFyX3RpbWUgPSB0aW1lb3V0OwotCi0JLyoKLQkgKiBDbGFtcCB0aGUgdGltZW91dCBwZXJpb2QgYXQgMiAqIHRoZSB0aW1lIHRvIGVtcHR5IHRoZQotCSAqIGZpZm8uICBKdXN0IHRvIGJlIHNhZmUsIHNldCB0aGUgbWluaW11bSBhdCAuNSBzZWNvbmRzLgotCSAqLwotCWZpZm9fdGltZSAqPSAyOwotCWlmIChmaWZvX3RpbWUgPCAoSFovMikpCi0JCWZpZm9fdGltZSA9IEhaLzI7Ci0JaWYgKCF0aW1lb3V0IHx8IHRpbWVvdXQgPiBmaWZvX3RpbWUpCi0JCXRpbWVvdXQgPSBmaWZvX3RpbWU7Ci0KLQkvKgotCSAqIEFjY291bnQgZm9yIHRoZSBudW1iZXIgb2YgYnl0ZXMgaW4gdGhlIFVBUlQKLQkgKiB0cmFuc21pdHRlciBGSUZPIHBsdXMgYW55IGJ5dGUgYmVpbmcgc2hpZnRlZCBvdXQuCi0JICovCi0JdWFydHAgPSAodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSBpbmZvLT5hZGRyOwotCWZvciAoOzspIHsKLQkJZmlmb19jbnQgPSAodWFydHBbTUNGVUFSVF9VVEZdICYgTUNGVUFSVF9VVEZfVFhCKTsKLQkJaWYgKCh1YXJ0cFtNQ0ZVQVJUX1VTUl0gJiAoTUNGVUFSVF9VU1JfVFhSRUFEWXwKLQkJCQlNQ0ZVQVJUX1VTUl9UWEVNUFRZKSkgPT0KLQkJCU1DRlVBUlRfVVNSX1RYUkVBRFkpCi0JCQlmaWZvX2NudCsrOwotCQlpZiAoZmlmb19jbnQgPT0gMCkKLQkJCWJyZWFrOwotCQltc2xlZXBfaW50ZXJydXB0aWJsZShqaWZmaWVzX3RvX21zZWNzKGNoYXJfdGltZSkpOwotCQlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpCi0JCQlicmVhazsKLQkJaWYgKHRpbWVvdXQgJiYgdGltZV9hZnRlcihqaWZmaWVzLCBvcmlnX2ppZmZpZXMgKyB0aW1lb3V0KSkKLQkJCWJyZWFrOwotCX0KLQl1bmxvY2tfa2VybmVsKCk7Ci0jZWxzZQotCS8qCi0JICogRm9yIHRoZSBvdGhlciBjb2xkZmlyZSBtb2RlbHMsIGFzc3VtZSBhbGwgZGF0YSBoYXMgYmVlbiBzZW50Ci0JICovCi0jZW5kaWYKLX0KLQotLyoKLSAqIG1jZnJzX2hhbmd1cCgpIC0tLSBjYWxsZWQgYnkgdHR5X2hhbmd1cCgpIHdoZW4gYSBoYW5ndXAgaXMgc2lnbmFsZWQuCi0gKi8KLXZvaWQgbWNmcnNfaGFuZ3VwKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCi17Ci0Jc3RydWN0IG1jZl9zZXJpYWwgKiBpbmZvID0gKHN0cnVjdCBtY2Zfc2VyaWFsICopdHR5LT5kcml2ZXJfZGF0YTsKLQkKLQlpZiAoc2VyaWFsX3BhcmFub2lhX2NoZWNrKGluZm8sIHR0eS0+bmFtZSwgIm1jZnJzX2hhbmd1cCIpKQotCQlyZXR1cm47Ci0JCi0JbWNmcnNfZmx1c2hfYnVmZmVyKHR0eSk7Ci0Jc2h1dGRvd24oaW5mbyk7Ci0JaW5mby0+ZXZlbnQgPSAwOwotCWluZm8tPmNvdW50ID0gMDsKLQlpbmZvLT5mbGFncyAmPSB+QVNZTkNfTk9STUFMX0FDVElWRTsKLQlpbmZvLT5wb3J0LnR0eSA9IE5VTEw7Ci0Jd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZpbmZvLT5vcGVuX3dhaXQpOwotfQotCi0vKgotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBtY2Zyc19vcGVuKCkgYW5kIGZyaWVuZHMKLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICovCi1zdGF0aWMgaW50IGJsb2NrX3RpbF9yZWFkeShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAqIGZpbHAsCi0JCQkgICBzdHJ1Y3QgbWNmX3NlcmlhbCAqaW5mbykKLXsKLQlERUNMQVJFX1dBSVRRVUVVRSh3YWl0LCBjdXJyZW50KTsKLQlpbnQJcmV0dmFsOwotCWludAlkb19jbG9jYWwgPSAwOwotCi0JLyoKLQkgKiBJZiB0aGUgZGV2aWNlIGlzIGluIHRoZSBtaWRkbGUgb2YgYmVpbmcgY2xvc2VkLCB0aGVuIGJsb2NrCi0JICogdW50aWwgaXQncyBkb25lLCBhbmQgdGhlbiB0cnkgYWdhaW4uCi0JICovCi0JaWYgKGluZm8tPmZsYWdzICYgQVNZTkNfQ0xPU0lORykgewotCQlpbnRlcnJ1cHRpYmxlX3NsZWVwX29uKCZpbmZvLT5jbG9zZV93YWl0KTsKLSNpZmRlZiBTRVJJQUxfRE9fUkVTVEFSVAotCQlpZiAoaW5mby0+ZmxhZ3MgJiBBU1lOQ19IVVBfTk9USUZZKQotCQkJcmV0dXJuIC1FQUdBSU47Ci0JCWVsc2UKLQkJCXJldHVybiAtRVJFU1RBUlRTWVM7Ci0jZWxzZQotCQlyZXR1cm4gLUVBR0FJTjsKLSNlbmRpZgotCX0KLQkKLQkvKgotCSAqIElmIG5vbi1ibG9ja2luZyBtb2RlIGlzIHNldCwgb3IgdGhlIHBvcnQgaXMgbm90IGVuYWJsZWQsCi0JICogdGhlbiBtYWtlIHRoZSBjaGVjayB1cCBmcm9udCBhbmQgdGhlbiBleGl0LgotCSAqLwotCWlmICgoZmlscC0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spIHx8Ci0JICAgICh0dHktPmZsYWdzICYgKDEgPDwgVFRZX0lPX0VSUk9SKSkpIHsKLQkJaW5mby0+ZmxhZ3MgfD0gQVNZTkNfTk9STUFMX0FDVElWRTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JaWYgKHR0eS0+dGVybWlvcy0+Y19jZmxhZyAmIENMT0NBTCkKLQkJZG9fY2xvY2FsID0gMTsKLQotCS8qCi0JICogQmxvY2sgd2FpdGluZyBmb3IgdGhlIGNhcnJpZXIgZGV0ZWN0IGFuZCB0aGUgbGluZSB0byBiZWNvbWUKLQkgKiBmcmVlIChpLmUuLCBub3QgaW4gdXNlIGJ5IHRoZSBjYWxsb3V0KS4gIFdoaWxlIHdlIGFyZSBpbgotCSAqIHRoaXMgbG9vcCwgaW5mby0+Y291bnQgaXMgZHJvcHBlZCBieSBvbmUsIHNvIHRoYXQKLQkgKiBtY2Zyc19jbG9zZSgpIGtub3dzIHdoZW4gdG8gZnJlZSB0aGluZ3MuICBXZSByZXN0b3JlIGl0IHVwb24KLQkgKiBleGl0LCBlaXRoZXIgbm9ybWFsIG9yIGFibm9ybWFsLgotCSAqLwotCXJldHZhbCA9IDA7Ci0JYWRkX3dhaXRfcXVldWUoJmluZm8tPm9wZW5fd2FpdCwgJndhaXQpOwotI2lmZGVmIFNFUklBTF9ERUJVR19PUEVOCi0JcHJpbnRrKCJibG9ja190aWxfcmVhZHkgYmVmb3JlIGJsb2NrOiB0dHlTJWQsIGNvdW50ID0gJWRcbiIsCi0JICAgICAgIGluZm8tPmxpbmUsIGluZm8tPmNvdW50KTsKLSNlbmRpZgotCWluZm8tPmNvdW50LS07Ci0JaW5mby0+YmxvY2tlZF9vcGVuKys7Ci0Jd2hpbGUgKDEpIHsKLQkJbG9jYWxfaXJxX2Rpc2FibGUoKTsKLQkJbWNmcnNfc2V0c2lnbmFscyhpbmZvLCAxLCAxKTsKLQkJbG9jYWxfaXJxX2VuYWJsZSgpOwotCQljdXJyZW50LT5zdGF0ZSA9IFRBU0tfSU5URVJSVVBUSUJMRTsKLQkJaWYgKHR0eV9odW5nX3VwX3AoZmlscCkgfHwKLQkJICAgICEoaW5mby0+ZmxhZ3MgJiBBU1lOQ19JTklUSUFMSVpFRCkpIHsKLSNpZmRlZiBTRVJJQUxfRE9fUkVTVEFSVAotCQkJaWYgKGluZm8tPmZsYWdzICYgQVNZTkNfSFVQX05PVElGWSkKLQkJCQlyZXR2YWwgPSAtRUFHQUlOOwotCQkJZWxzZQotCQkJCXJldHZhbCA9IC1FUkVTVEFSVFNZUzsJCi0jZWxzZQotCQkJcmV0dmFsID0gLUVBR0FJTjsKLSNlbmRpZgotCQkJYnJlYWs7Ci0JCX0KLQkJaWYgKCEoaW5mby0+ZmxhZ3MgJiBBU1lOQ19DTE9TSU5HKSAmJgotCQkgICAgKGRvX2Nsb2NhbCB8fCAobWNmcnNfZ2V0c2lnbmFscyhpbmZvKSAmIFRJT0NNX0NEKSkpCi0JCQlicmVhazsKLQkJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSB7Ci0JCQlyZXR2YWwgPSAtRVJFU1RBUlRTWVM7Ci0JCQlicmVhazsKLQkJfQotI2lmZGVmIFNFUklBTF9ERUJVR19PUEVOCi0JCXByaW50aygiYmxvY2tfdGlsX3JlYWR5IGJsb2NraW5nOiB0dHlTJWQsIGNvdW50ID0gJWRcbiIsCi0JCSAgICAgICBpbmZvLT5saW5lLCBpbmZvLT5jb3VudCk7Ci0jZW5kaWYKLQkJc2NoZWR1bGUoKTsKLQl9Ci0JY3VycmVudC0+c3RhdGUgPSBUQVNLX1JVTk5JTkc7Ci0JcmVtb3ZlX3dhaXRfcXVldWUoJmluZm8tPm9wZW5fd2FpdCwgJndhaXQpOwotCWlmICghdHR5X2h1bmdfdXBfcChmaWxwKSkKLQkJaW5mby0+Y291bnQrKzsKLQlpbmZvLT5ibG9ja2VkX29wZW4tLTsKLSNpZmRlZiBTRVJJQUxfREVCVUdfT1BFTgotCXByaW50aygiYmxvY2tfdGlsX3JlYWR5IGFmdGVyIGJsb2NraW5nOiB0dHlTJWQsIGNvdW50ID0gJWRcbiIsCi0JICAgICAgIGluZm8tPmxpbmUsIGluZm8tPmNvdW50KTsKLSNlbmRpZgotCWlmIChyZXR2YWwpCi0JCXJldHVybiByZXR2YWw7Ci0JaW5mby0+ZmxhZ3MgfD0gQVNZTkNfTk9STUFMX0FDVElWRTsKLQlyZXR1cm4gMDsKLX0JCi0KLS8qCi0gKiBUaGlzIHJvdXRpbmUgaXMgY2FsbGVkIHdoZW5ldmVyIGEgc2VyaWFsIHBvcnQgaXMgb3BlbmVkLiBJdAotICogZW5hYmxlcyBpbnRlcnJ1cHRzIGZvciBhIHNlcmlhbCBwb3J0LCBsaW5raW5nIGluIGl0cyBzdHJ1Y3R1cmUgaW50bwotICogdGhlIElSUSBjaGFpbi4gICBJdCBhbHNvIHBlcmZvcm1zIHRoZSBzZXJpYWwtc3BlY2lmaWMKLSAqIGluaXRpYWxpemF0aW9uIGZvciB0aGUgdHR5IHN0cnVjdHVyZS4KLSAqLwotaW50IG1jZnJzX29wZW4oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKiBmaWxwKQotewotCXN0cnVjdCBtY2Zfc2VyaWFsCSppbmZvOwotCWludCAJCQlyZXR2YWwsIGxpbmU7Ci0KLQlsaW5lID0gdHR5LT5pbmRleDsKLQlpZiAoKGxpbmUgPCAwKSB8fCAobGluZSA+PSBOUl9QT1JUUykpCi0JCXJldHVybiAtRU5PREVWOwotCWluZm8gPSBtY2Zyc190YWJsZSArIGxpbmU7Ci0JaWYgKHNlcmlhbF9wYXJhbm9pYV9jaGVjayhpbmZvLCB0dHktPm5hbWUsICJtY2Zyc19vcGVuIikpCi0JCXJldHVybiAtRU5PREVWOwotI2lmZGVmIFNFUklBTF9ERUJVR19PUEVOCi0JcHJpbnRrKCJtY2Zyc19vcGVuICVzLCBjb3VudCA9ICVkXG4iLCB0dHktPm5hbWUsIGluZm8tPmNvdW50KTsKLSNlbmRpZgotCWluZm8tPmNvdW50Kys7Ci0JdHR5LT5kcml2ZXJfZGF0YSA9IGluZm87Ci0JaW5mby0+cG9ydC50dHkgPSB0dHk7Ci0KLQkvKgotCSAqIFN0YXJ0IHVwIHNlcmlhbCBwb3J0Ci0JICovCi0JcmV0dmFsID0gc3RhcnR1cChpbmZvKTsKLQlpZiAocmV0dmFsKQotCQlyZXR1cm4gcmV0dmFsOwotCi0JcmV0dmFsID0gYmxvY2tfdGlsX3JlYWR5KHR0eSwgZmlscCwgaW5mbyk7Ci0JaWYgKHJldHZhbCkgewotI2lmZGVmIFNFUklBTF9ERUJVR19PUEVOCi0JCXByaW50aygibWNmcnNfb3BlbiByZXR1cm5pbmcgYWZ0ZXIgYmxvY2tfdGlsX3JlYWR5IHdpdGggJWRcbiIsCi0JCSAgICAgICByZXR2YWwpOwotI2VuZGlmCi0JCXJldHVybiByZXR2YWw7Ci0JfQotCi0jaWZkZWYgU0VSSUFMX0RFQlVHX09QRU4KLQlwcmludGsoIm1jZnJzX29wZW4gJXMgc3VjY2Vzc2Z1bC4uLlxuIiwgdHR5LT5uYW1lKTsKLSNlbmRpZgotCXJldHVybiAwOwotfQotCi0vKgotICoJQmFzZWQgb24gdGhlIGxpbmUgbnVtYmVyIHNldCB1cCB0aGUgaW50ZXJuYWwgaW50ZXJydXB0IHN0dWZmLgotICovCi1zdGF0aWMgdm9pZCBtY2Zyc19pcnFpbml0KHN0cnVjdCBtY2Zfc2VyaWFsICppbmZvKQotewotI2lmIGRlZmluZWQoQ09ORklHX001MjcyKQotCXZvbGF0aWxlIHVuc2lnbmVkIGxvbmcJKmljcnA7Ci0Jdm9sYXRpbGUgdW5zaWduZWQgbG9uZwkqcG9ydHA7Ci0Jdm9sYXRpbGUgdW5zaWduZWQgY2hhcgkqdWFydHA7Ci0KLQl1YXJ0cCA9IGluZm8tPmFkZHI7Ci0JaWNycCA9ICh2b2xhdGlsZSB1bnNpZ25lZCBsb25nICopIChNQ0ZfTUJBUiArIE1DRlNJTV9JQ1IyKTsKLQotCXN3aXRjaCAoaW5mby0+bGluZSkgewotCWNhc2UgMDoKLQkJKmljcnAgPSAweGUwMDAwMDAwOwotCQlicmVhazsKLQljYXNlIDE6Ci0JCSppY3JwID0gMHgwZTAwMDAwMDsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJcHJpbnRrKCJNQ0ZSUzogZG9uJ3Qga25vdyBob3cgdG8gaGFuZGxlIFVBUlQgJWQgaW50ZXJydXB0P1xuIiwKLQkJCWluZm8tPmxpbmUpOwotCQlyZXR1cm47Ci0JfQotCi0JLyogRW5hYmxlIHRoZSBvdXRwdXQgbGluZXMgZm9yIHRoZSBzZXJpYWwgcG9ydHMgKi8KLQlwb3J0cCA9ICh2b2xhdGlsZSB1bnNpZ25lZCBsb25nICopIChNQ0ZfTUJBUiArIE1DRlNJTV9QQkNOVCk7Ci0JKnBvcnRwID0gKCpwb3J0cCAmIH4weDAwMDAwMGZmKSB8IDB4MDAwMDAwNTU7Ci0JcG9ydHAgPSAodm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqKSAoTUNGX01CQVIgKyBNQ0ZTSU1fUERDTlQpOwotCSpwb3J0cCA9ICgqcG9ydHAgJiB+MHgwMDAwMDNmYykgfCAweDAwMDAwMmE4OwotI2VsaWYgZGVmaW5lZChDT05GSUdfTTUyM3gpIHx8IGRlZmluZWQoQ09ORklHX001Mjd4KSB8fCBkZWZpbmVkKENPTkZJR19NNTI4eCkKLQl2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICppY3JwLCAqdWFydHA7Ci0Jdm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqaW1ycDsKLQotCXVhcnRwID0gaW5mby0+YWRkcjsKLQotCWljcnAgPSAodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSAoTUNGX01CQVIgKyBNQ0ZJQ01fSU5UQzAgKwotCQlNQ0ZJTlRDX0lDUjAgKyBNQ0ZJTlRfVUFSVDAgKyBpbmZvLT5saW5lKTsKLQkqaWNycCA9IDB4MzAgKyBpbmZvLT5saW5lOyAvKiBsZXZlbCA2LCBsaW5lIGJhc2VkIHByaW9yaXR5ICovCi0KLQlpbXJwID0gKHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKikgKE1DRl9NQkFSICsgTUNGSUNNX0lOVEMwICsKLQkJTUNGSU5UQ19JTVJMKTsKLQkqaW1ycCAmPSB+KCgxIDw8IChpbmZvLT5pcnEgLSBNQ0ZJTlRfVkVDQkFTRSkpIHwgMSk7Ci0jaWYgZGVmaW5lZChDT05GSUdfTTUyN3gpCi0JewotCQkvKgotCQkgKiBFeHRlcm5hbCBQaW4gTWFzayBTZXR0aW5nICYgRW5hYmxlIEV4dGVybmFsIFBpbiBmb3IgSW50ZXJmYWNlCi0JCSAqIG1yY2Jpc0BhbGljZXBvc3RhLml0Ci0gICAgICAgIAkgKi8KLQkJdTE2ICpzZXJwaW5fZW5hYmxlX21hc2s7Ci0JCXNlcnBpbl9lbmFibGVfbWFzayA9ICh1MTYgKikgKE1DRl9JUFNCQVIgKyBNQ0ZfR1BJT19QQVJfVUFSVCk7Ci0JCWlmIChpbmZvLT5saW5lID09IDApCi0JCQkqc2VycGluX2VuYWJsZV9tYXNrIHw9IFVBUlQwX0VOQUJMRV9NQVNLOwotCQllbHNlIGlmIChpbmZvLT5saW5lID09IDEpCi0JCQkqc2VycGluX2VuYWJsZV9tYXNrIHw9IFVBUlQxX0VOQUJMRV9NQVNLOwotCQllbHNlIGlmIChpbmZvLT5saW5lID09IDIpCi0JCQkqc2VycGluX2VuYWJsZV9tYXNrIHw9IFVBUlQyX0VOQUJMRV9NQVNLOwotCX0KLSNlbmRpZgotI2lmIGRlZmluZWQoQ09ORklHX001Mjh4KQotCS8qIG1ha2Ugc3VyZSBQVUFQQVIgaXMgc2V0IGZvciBVQVJUMCBhbmQgVUFSVDEgKi8KLQlpZiAoaW5mby0+bGluZSA8IDIpIHsKLQkJdm9sYXRpbGUgdW5zaWduZWQgY2hhciAqcG9ydHAgPSAodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSAoTUNGX01CQVIgKyBNQ0Y1MjgyX0dQSU9fUFVBUEFSKTsKLQkJKnBvcnRwIHw9ICgweDAzIDw8IChpbmZvLT5saW5lICogMikpOwotCX0KLSNlbmRpZgotI2VsaWYgZGVmaW5lZChDT05GSUdfTTUyMHgpCi0Jdm9sYXRpbGUgdW5zaWduZWQgY2hhciAqaWNycCwgKnVhcnRwOwotCXZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKmltcnA7Ci0KLQl1YXJ0cCA9IGluZm8tPmFkZHI7Ci0KLQlpY3JwID0gKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikgKE1DRl9NQkFSICsgTUNGSUNNX0lOVEMwICsKLQkJTUNGSU5UQ19JQ1IwICsgTUNGSU5UX1VBUlQwICsgaW5mby0+bGluZSk7Ci0JKmljcnAgPSAweDAzOwotCi0JaW1ycCA9ICh2b2xhdGlsZSB1bnNpZ25lZCBsb25nICopIChNQ0ZfTUJBUiArIE1DRklDTV9JTlRDMCArCi0JCU1DRklOVENfSU1STCk7Ci0JKmltcnAgJj0gfigoMSA8PCAoaW5mby0+aXJxIC0gTUNGSU5UX1ZFQ0JBU0UpKSB8IDEpOwotCWlmIChpbmZvLT5saW5lIDwgMikgewotCQl1bnNpZ25lZCBzaG9ydCAqdWFydF9wYXI7Ci0JCXVhcnRfcGFyID0gKHVuc2lnbmVkIHNob3J0ICopKE1DRl9JUFNCQVIgKyBNQ0ZfR1BJT19QQVJfVUFSVCk7Ci0JCWlmIChpbmZvLT5saW5lID09IDApCi0JCQkqdWFydF9wYXIgfD0gIE1DRl9HUElPX1BBUl9VQVJUX1BBUl9VVFhEMAotCQkJCSAgfCBNQ0ZfR1BJT19QQVJfVUFSVF9QQVJfVVJYRDA7Ci0JCWVsc2UgaWYgKGluZm8tPmxpbmUgPT0gMSkKLQkJCSp1YXJ0X3BhciB8PSAgTUNGX0dQSU9fUEFSX1VBUlRfUEFSX1VUWEQxCi0JCQkJICB8IE1DRl9HUElPX1BBUl9VQVJUX1BBUl9VUlhEMTsKLQkJfSBlbHNlIGlmIChpbmZvLT5saW5lID09IDIpIHsKLQkJCXVuc2lnbmVkIGNoYXIgKmZlY2kyY19wYXI7Ci0JCQlmZWNpMmNfcGFyID0gKHVuc2lnbmVkIGNoYXIgKikoTUNGX0lQU0JBUiArICBNQ0ZfR1BJT19QQVJfRkVDSTJDKTsKLQkJCSpmZWNpMmNfcGFyICY9IH4weDBGOwotCQkJKmZlY2kyY19wYXIgfD0gIE1DRl9HUElPX1BBUl9GRUNJMkNfUEFSX1NDTF9VVFhEMgotCQkJCSAgICB8IE1DRl9HUElPX1BBUl9GRUNJMkNfUEFSX1NEQV9VUlhEMjsKLQkJfQotI2VsaWYgZGVmaW5lZChDT05GSUdfTTUzMngpCi0Jdm9sYXRpbGUgdW5zaWduZWQgY2hhciAqdWFydHA7Ci0JdWFydHAgPSBpbmZvLT5hZGRyOwotCXN3aXRjaCAoaW5mby0+bGluZSkgewotCWNhc2UgMDoKLQkJTUNGX0lOVEMwX0lDUjI2ID0gMHgzOwotCQlNQ0ZfSU5UQzBfQ0lNUiA9IDI2OwotCQkvKiBHUElPIGluaXRpYWxpemF0aW9uICovCi0JCU1DRl9HUElPX1BBUl9VQVJUIHw9IDB4MDAwRjsKLQkJYnJlYWs7Ci0JY2FzZSAxOgotCQlNQ0ZfSU5UQzBfSUNSMjcgPSAweDM7Ci0JCU1DRl9JTlRDMF9DSU1SID0gMjc7Ci0JCS8qIEdQSU8gaW5pdGlhbGl6YXRpb24gKi8KLQkJTUNGX0dQSU9fUEFSX1VBUlQgfD0gMHgwRkYwOwotCQlicmVhazsKLQljYXNlIDI6Ci0JCU1DRl9JTlRDMF9JQ1IyOCA9IDB4MzsKLQkJTUNGX0lOVEMwX0NJTVIgPSAyODsKLQkJLyogR1BJT3MgYWxzbyBtdXN0IGJlIGluaXRhbGl6ZWQsIGRlcGVuZHMgb24gYm9hcmQgKi8KLQkJYnJlYWs7Ci0JfQotI2Vsc2UKLQl2b2xhdGlsZSB1bnNpZ25lZCBjaGFyCSppY3JwLCAqdWFydHA7Ci0KLQlzd2l0Y2ggKGluZm8tPmxpbmUpIHsKLQljYXNlIDA6Ci0JCWljcnAgPSAodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSAoTUNGX01CQVIgKyBNQ0ZTSU1fVUFSVDFJQ1IpOwotCQkqaWNycCA9IC8qTUNGU0lNX0lDUl9BVVRPVkVDIHwqLyBNQ0ZTSU1fSUNSX0xFVkVMNiB8Ci0JCQlNQ0ZTSU1fSUNSX1BSSTE7Ci0JCW1jZl9zZXRpbXIobWNmX2dldGltcigpICYgfk1DRlNJTV9JTVJfVUFSVDEpOwotCQlicmVhazsKLQljYXNlIDE6Ci0JCWljcnAgPSAodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSAoTUNGX01CQVIgKyBNQ0ZTSU1fVUFSVDJJQ1IpOwotCQkqaWNycCA9IC8qTUNGU0lNX0lDUl9BVVRPVkVDIHwqLyBNQ0ZTSU1fSUNSX0xFVkVMNiB8Ci0JCQlNQ0ZTSU1fSUNSX1BSSTI7Ci0JCW1jZl9zZXRpbXIobWNmX2dldGltcigpICYgfk1DRlNJTV9JTVJfVUFSVDIpOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlwcmludGsoIk1DRlJTOiBkb24ndCBrbm93IGhvdyB0byBoYW5kbGUgVUFSVCAlZCBpbnRlcnJ1cHQ/XG4iLAotCQkJaW5mby0+bGluZSk7Ci0JCXJldHVybjsKLQl9Ci0KLQl1YXJ0cCA9IGluZm8tPmFkZHI7Ci0JdWFydHBbTUNGVUFSVF9VSVZSXSA9IGluZm8tPmlycTsKLSNlbmRpZgotCi0JLyogQ2xlYXIgbWFzaywgc28gbm8gc3VycHJpc2UgaW50ZXJydXB0cy4gKi8KLQl1YXJ0cFtNQ0ZVQVJUX1VJTVJdID0gMDsKLQotCWlmIChyZXF1ZXN0X2lycShpbmZvLT5pcnEsIG1jZnJzX2ludGVycnVwdCwgSVJRRl9ESVNBQkxFRCwKLQkgICAgIkNvbGRGaXJlIFVBUlQiLCBOVUxMKSkgewotCQlwcmludGsoIk1DRlJTOiBVbmFibGUgdG8gYXR0YWNoIENvbGRGaXJlIFVBUlQgJWQgaW50ZXJydXB0ICIKLQkJCSJ2ZWN0b3I9JWRcbiIsIGluZm8tPmxpbmUsIGluZm8tPmlycSk7Ci0JfQotCi0JcmV0dXJuOwotfQotCi0KLWNoYXIgKm1jZnJzX2RyaXZlcm5hbWUgPSAiQ29sZEZpcmUgaW50ZXJuYWwgVUFSVCBzZXJpYWwgZHJpdmVyIHZlcnNpb24gMS4wMFxuIjsKLQotCi0vKgotICogU2VyaWFsIHN0YXRzIHJlcG9ydGluZy4uLgotICovCi1pbnQgbWNmcnNfcmVhZHByb2MoY2hhciAqcGFnZSwgY2hhciAqKnN0YXJ0LCBvZmZfdCBvZmYsIGludCBjb3VudCwKLQkJICAgICAgICAgaW50ICplb2YsIHZvaWQgKmRhdGEpCi17Ci0Jc3RydWN0IG1jZl9zZXJpYWwJKmluZm87Ci0JY2hhcgkJCXN0clsyMF07Ci0JaW50CQkJbGVuLCBzaWdzLCBpOwotCi0JbGVuID0gc3ByaW50ZihwYWdlLCBtY2Zyc19kcml2ZXJuYW1lKTsKLQlmb3IgKGkgPSAwOyAoaSA8IE5SX1BPUlRTKTsgaSsrKSB7Ci0JCWluZm8gPSAmbWNmcnNfdGFibGVbaV07Ci0JCWxlbiArPSBzcHJpbnRmKChwYWdlICsgbGVuKSwgIiVkOiBwb3J0OiV4IGlycT0lZCBiYXVkOiVkICIsCi0JCQlpLCAodW5zaWduZWQgaW50KSBpbmZvLT5hZGRyLCBpbmZvLT5pcnEsIGluZm8tPmJhdWQpOwotCQlpZiAoaW5mby0+c3RhdHMucnggfHwgaW5mby0+c3RhdHMudHgpCi0JCQlsZW4gKz0gc3ByaW50ZigocGFnZSArIGxlbiksICJ0eDolZCByeDolZCAiLAotCQkJaW5mby0+c3RhdHMudHgsIGluZm8tPnN0YXRzLnJ4KTsKLQkJaWYgKGluZm8tPnN0YXRzLnJ4ZnJhbWluZykKLQkJCWxlbiArPSBzcHJpbnRmKChwYWdlICsgbGVuKSwgImZlOiVkICIsCi0JCQlpbmZvLT5zdGF0cy5yeGZyYW1pbmcpOwotCQlpZiAoaW5mby0+c3RhdHMucnhwYXJpdHkpCi0JCQlsZW4gKz0gc3ByaW50ZigocGFnZSArIGxlbiksICJwZTolZCAiLAotCQkJaW5mby0+c3RhdHMucnhwYXJpdHkpOwotCQlpZiAoaW5mby0+c3RhdHMucnhicmVhaykKLQkJCWxlbiArPSBzcHJpbnRmKChwYWdlICsgbGVuKSwgImJyazolZCAiLAotCQkJaW5mby0+c3RhdHMucnhicmVhayk7Ci0JCWlmIChpbmZvLT5zdGF0cy5yeG92ZXJydW4pCi0JCQlsZW4gKz0gc3ByaW50ZigocGFnZSArIGxlbiksICJvZTolZCAiLAotCQkJaW5mby0+c3RhdHMucnhvdmVycnVuKTsKLQotCQlzdHJbMF0gPSBzdHJbMV0gPSAwOwotCQlpZiAoKHNpZ3MgPSBtY2Zyc19nZXRzaWduYWxzKGluZm8pKSkgewotCQkJaWYgKHNpZ3MgJiBUSU9DTV9SVFMpCi0JCQkJc3RyY2F0KHN0ciwgInxSVFMiKTsKLQkJCWlmIChzaWdzICYgVElPQ01fQ1RTKQotCQkJCXN0cmNhdChzdHIsICJ8Q1RTIik7Ci0JCQlpZiAoc2lncyAmIFRJT0NNX0RUUikKLQkJCQlzdHJjYXQoc3RyLCAifERUUiIpOwotCQkJaWYgKHNpZ3MgJiBUSU9DTV9DRCkKLQkJCQlzdHJjYXQoc3RyLCAifENEIik7Ci0JCX0KLQotCQlsZW4gKz0gc3ByaW50ZigocGFnZSArIGxlbiksICIlc1xuIiwgJnN0clsxXSk7Ci0JfQotCi0JcmV0dXJuKGxlbik7Ci19Ci0KLQotLyogRmluYWxseSwgcm91dGluZXMgdXNlZCB0byBpbml0aWFsaXplIHRoZSBzZXJpYWwgZHJpdmVyLiAqLwotCi1zdGF0aWMgdm9pZCBzaG93X3NlcmlhbF92ZXJzaW9uKHZvaWQpCi17Ci0JcHJpbnRrKG1jZnJzX2RyaXZlcm5hbWUpOwotfQotCi1zdGF0aWMgY29uc3Qgc3RydWN0IHR0eV9vcGVyYXRpb25zIG1jZnJzX29wcyA9IHsKLQkub3BlbiA9IG1jZnJzX29wZW4sCi0JLmNsb3NlID0gbWNmcnNfY2xvc2UsCi0JLndyaXRlID0gbWNmcnNfd3JpdGUsCi0JLmZsdXNoX2NoYXJzID0gbWNmcnNfZmx1c2hfY2hhcnMsCi0JLndyaXRlX3Jvb20gPSBtY2Zyc193cml0ZV9yb29tLAotCS5jaGFyc19pbl9idWZmZXIgPSBtY2Zyc19jaGFyc19pbl9idWZmZXIsCi0JLmZsdXNoX2J1ZmZlciA9IG1jZnJzX2ZsdXNoX2J1ZmZlciwKLQkuaW9jdGwgPSBtY2Zyc19pb2N0bCwKLQkudGhyb3R0bGUgPSBtY2Zyc190aHJvdHRsZSwKLQkudW50aHJvdHRsZSA9IG1jZnJzX3VudGhyb3R0bGUsCi0JLnNldF90ZXJtaW9zID0gbWNmcnNfc2V0X3Rlcm1pb3MsCi0JLnN0b3AgPSBtY2Zyc19zdG9wLAotCS5zdGFydCA9IG1jZnJzX3N0YXJ0LAotCS5oYW5ndXAgPSBtY2Zyc19oYW5ndXAsCi0JLnJlYWRfcHJvYyA9IG1jZnJzX3JlYWRwcm9jLAotCS53YWl0X3VudGlsX3NlbnQgPSBtY2Zyc193YWl0X3VudGlsX3NlbnQsCi0gCS50aW9jbWdldCA9IG1jZnJzX3Rpb2NtZ2V0LAotCS50aW9jbXNldCA9IG1jZnJzX3Rpb2Ntc2V0LAotfTsKLQotLyogbWNmcnNfaW5pdCBpbml0cyB0aGUgZHJpdmVyICovCi1zdGF0aWMgaW50IF9faW5pdAotbWNmcnNfaW5pdCh2b2lkKQotewotCXN0cnVjdCBtY2Zfc2VyaWFsCSppbmZvOwotCXVuc2lnbmVkIGxvbmcJCWZsYWdzOwotCWludAkJCWk7Ci0KLQkvKiBTZXR1cCBiYXNlIGhhbmRsZXIsIGFuZCB0aW1lciB0YWJsZS4gKi8KLSNpZmRlZiBNQ0ZQUF9EQ0QwCi0JaW5pdF90aW1lcigmbWNmcnNfdGltZXJfc3RydWN0KTsKLQltY2Zyc190aW1lcl9zdHJ1Y3QuZnVuY3Rpb24gPSBtY2Zyc190aW1lcjsKLQltY2Zyc190aW1lcl9zdHJ1Y3QuZGF0YSA9IDA7Ci0JbWNmcnNfdGltZXJfc3RydWN0LmV4cGlyZXMgPSBqaWZmaWVzICsgSFovMjU7Ci0JYWRkX3RpbWVyKCZtY2Zyc190aW1lcl9zdHJ1Y3QpOwotCW1jZnJzX3Bwc3RhdHVzID0gbWNmX2dldHBwZGF0YSgpICYgKE1DRlBQX0RDRDAgfCBNQ0ZQUF9EQ0QxKTsKLSNlbmRpZgotCW1jZnJzX3NlcmlhbF9kcml2ZXIgPSBhbGxvY190dHlfZHJpdmVyKE5SX1BPUlRTKTsKLQlpZiAoIW1jZnJzX3NlcmlhbF9kcml2ZXIpCi0JCXJldHVybiAtRU5PTUVNOwotCi0Jc2hvd19zZXJpYWxfdmVyc2lvbigpOwotCi0JLyogSW5pdGlhbGl6ZSB0aGUgdHR5X2RyaXZlciBzdHJ1Y3R1cmUgKi8KLQltY2Zyc19zZXJpYWxfZHJpdmVyLT5vd25lciA9IFRISVNfTU9EVUxFOwotCW1jZnJzX3NlcmlhbF9kcml2ZXItPm5hbWUgPSAidHR5UyI7Ci0JbWNmcnNfc2VyaWFsX2RyaXZlci0+ZHJpdmVyX25hbWUgPSAibWNmc2VyaWFsIjsKLQltY2Zyc19zZXJpYWxfZHJpdmVyLT5tYWpvciA9IFRUWV9NQUpPUjsKLQltY2Zyc19zZXJpYWxfZHJpdmVyLT5taW5vcl9zdGFydCA9IDY0OwotCW1jZnJzX3NlcmlhbF9kcml2ZXItPnR5cGUgPSBUVFlfRFJJVkVSX1RZUEVfU0VSSUFMOwotCW1jZnJzX3NlcmlhbF9kcml2ZXItPnN1YnR5cGUgPSBTRVJJQUxfVFlQRV9OT1JNQUw7Ci0JbWNmcnNfc2VyaWFsX2RyaXZlci0+aW5pdF90ZXJtaW9zID0gdHR5X3N0ZF90ZXJtaW9zOwotCi0JbWNmcnNfc2VyaWFsX2RyaXZlci0+aW5pdF90ZXJtaW9zLmNfY2ZsYWcgPQotCQltY2Zyc19jb25zb2xlX2NiYXVkIHwgQ1M4IHwgQ1JFQUQgfCBIVVBDTCB8IENMT0NBTDsKLQltY2Zyc19zZXJpYWxfZHJpdmVyLT5mbGFncyA9IFRUWV9EUklWRVJfUkVBTF9SQVc7Ci0KLQl0dHlfc2V0X29wZXJhdGlvbnMobWNmcnNfc2VyaWFsX2RyaXZlciwgJm1jZnJzX29wcyk7Ci0KLQlpZiAodHR5X3JlZ2lzdGVyX2RyaXZlcihtY2Zyc19zZXJpYWxfZHJpdmVyKSkgewotCQlwcmludGsoIk1DRlJTOiBDb3VsZG4ndCByZWdpc3RlciBzZXJpYWwgZHJpdmVyXG4iKTsKLQkJcHV0X3R0eV9kcml2ZXIobWNmcnNfc2VyaWFsX2RyaXZlcik7Ci0JCXJldHVybigtRUJVU1kpOwotCX0KLQotCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQotCS8qCi0JICoJQ29uZmlndXJlIGFsbCB0aGUgYXR0YWNoZWQgc2VyaWFsIHBvcnRzLgotCSAqLwotCWZvciAoaSA9IDAsIGluZm8gPSBtY2Zyc190YWJsZTsgKGkgPCBOUl9QT1JUUyk7IGkrKywgaW5mbysrKSB7Ci0JCWluZm8tPm1hZ2ljID0gU0VSSUFMX01BR0lDOwotCQlpbmZvLT5saW5lID0gaTsKLQkJaW5mby0+cG9ydC50dHkgPSBOVUxMOwotCQlpbmZvLT5jdXN0b21fZGl2aXNvciA9IDE2OwotCQlpbmZvLT5jbG9zZV9kZWxheSA9IDUwOwotCQlpbmZvLT5jbG9zaW5nX3dhaXQgPSAzMDAwOwotCQlpbmZvLT54X2NoYXIgPSAwOwotCQlpbmZvLT5ldmVudCA9IDA7Ci0JCWluZm8tPmNvdW50ID0gMDsKLQkJaW5mby0+YmxvY2tlZF9vcGVuID0gMDsKLQkJSU5JVF9XT1JLKCZpbmZvLT50cXVldWUsIG1jZnJzX29mZmludHIpOwotCQlJTklUX1dPUksoJmluZm8tPnRxdWV1ZV9oYW5ndXAsIGRvX3NlcmlhbF9oYW5ndXApOwotCQlpbml0X3dhaXRxdWV1ZV9oZWFkKCZpbmZvLT5vcGVuX3dhaXQpOwotCQlpbml0X3dhaXRxdWV1ZV9oZWFkKCZpbmZvLT5jbG9zZV93YWl0KTsKLQotCQlpbmZvLT5pbXIgPSAwOwotCQltY2Zyc19zZXRzaWduYWxzKGluZm8sIDAsIDApOwotCQltY2Zyc19pcnFpbml0KGluZm8pOwotCi0JCXByaW50aygidHR5UyVkIGF0IDB4JTA0eCAoaXJxID0gJWQpIiwgaW5mby0+bGluZSwKLQkJCSh1bnNpZ25lZCBpbnQpIGluZm8tPmFkZHIsIGluZm8tPmlycSk7Ci0JCXByaW50aygiIGlzIGEgYnVpbHRpbiBDb2xkRmlyZSBVQVJUXG4iKTsKLQl9Ci0KLQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Ci0JcmV0dXJuIDA7Ci19Ci0KLW1vZHVsZV9pbml0KG1jZnJzX2luaXQpOwotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICBTZXJpYWwgQ29uc29sZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qCi0gKglRdWljayBhbmQgZGlydHkgVUFSVCBpbml0aWFsaXphdGlvbiwgZm9yIGNvbnNvbGUgb3V0cHV0LgotICovCi0KLXZvaWQgbWNmcnNfaW5pdF9jb25zb2xlKHZvaWQpCi17Ci0Jdm9sYXRpbGUgdW5zaWduZWQgY2hhcgkqdWFydHA7Ci0JdW5zaWduZWQgaW50CQljbGs7Ci0KLQkvKgotCSAqCVJlc2V0IFVBUlQsIGdldCBpdCBpbnRvIGtub3duIHN0YXRlLi4uCi0JICovCi0JdWFydHAgPSAodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSAoTUNGX01CQVIgKwotCQkobWNmcnNfY29uc29sZV9wb3J0ID8gTUNGVUFSVF9CQVNFMiA6IE1DRlVBUlRfQkFTRTEpKTsKLQotCXVhcnRwW01DRlVBUlRfVUNSXSA9IE1DRlVBUlRfVUNSX0NNRFJFU0VUUlg7ICAvKiByZXNldCBSWCAqLwotCXVhcnRwW01DRlVBUlRfVUNSXSA9IE1DRlVBUlRfVUNSX0NNRFJFU0VUVFg7ICAvKiByZXNldCBUWCAqLwotCXVhcnRwW01DRlVBUlRfVUNSXSA9IE1DRlVBUlRfVUNSX0NNRFJFU0VUTVJQVFI7ICAvKiByZXNldCBNUiBwb2ludGVyICovCi0KLQkvKgotCSAqIFNldCBwb3J0IGZvciBkZWZpbmVkIGJhdWQgLCA4IGRhdGEgYml0cywgMSBzdG9wIGJpdCwgbm8gcGFyaXR5LgotCSAqLwotCXVhcnRwW01DRlVBUlRfVU1SXSA9IE1DRlVBUlRfTVIxX1BBUklUWU5PTkUgfCBNQ0ZVQVJUX01SMV9DUzg7Ci0JdWFydHBbTUNGVUFSVF9VTVJdID0gTUNGVUFSVF9NUjJfU1RPUDE7Ci0KLSNpZmRlZglDT05GSUdfTTUyNzIKLXsKLQkvKgotCSAqIEZvciB0aGUgTUNGNTI3MiwgYWxzbyBjb21wdXRlIHRoZSBiYXVkcmF0ZSBmcmFjdGlvbi4KLQkgKi8KLQlpbnQgZnJhY3Rpb24gPSBNQ0ZfQlVTQ0xLIC0gKGNsayAqIDMyICogbWNmcnNfY29uc29sZV9iYXVkKTsKLQlmcmFjdGlvbiAqPSAxNjsKLQlmcmFjdGlvbiAvPSAoMzIgKiBtY2Zyc19jb25zb2xlX2JhdWQpOwotCXVhcnRwW01DRlVBUlRfVUZQRF0gPSAoZnJhY3Rpb24gJiAweGYpOwkJLyogc2V0IGZyYWN0aW9uICovCi0JY2xrID0gKE1DRl9CVVNDTEsgLyBtY2Zyc19jb25zb2xlX2JhdWQpIC8gMzI7Ci19Ci0jZWxzZQotCWNsayA9ICgoTUNGX0JVU0NMSyAvIG1jZnJzX2NvbnNvbGVfYmF1ZCkgKyAxNikgLyAzMjsgLyogc2V0IGJhdWQgKi8KLSNlbmRpZgotCi0JdWFydHBbTUNGVUFSVF9VQkcxXSA9IChjbGsgJiAweGZmMDApID4+IDg7ICAvKiBzZXQgbXNiIGJhdWQgKi8KLQl1YXJ0cFtNQ0ZVQVJUX1VCRzJdID0gKGNsayAmIDB4ZmYpOyAgLyogc2V0IGxzYiBiYXVkICovCi0JdWFydHBbTUNGVUFSVF9VQ1NSXSA9IE1DRlVBUlRfVUNTUl9SWENMS1RJTUVSIHwgTUNGVUFSVF9VQ1NSX1RYQ0xLVElNRVI7Ci0JdWFydHBbTUNGVUFSVF9VQ1JdID0gTUNGVUFSVF9VQ1JfUlhFTkFCTEUgfCBNQ0ZVQVJUX1VDUl9UWEVOQUJMRTsKLQotCW1jZnJzX2NvbnNvbGVfaW5pdGVkKys7Ci0JcmV0dXJuOwotfQotCi0KLS8qCi0gKglTZXR1cCBmb3IgY29uc29sZS4gQXJndW1lbnQgY29tZXMgZnJvbSB0aGUgYm9vdCBjb21tYW5kIGxpbmUuCi0gKi8KLQotaW50IG1jZnJzX2NvbnNvbGVfc2V0dXAoc3RydWN0IGNvbnNvbGUgKmNwLCBjaGFyICphcmcpCi17Ci0JaW50CQlpLCBuID0gQ09OU09MRV9CQVVEX1JBVEU7Ci0KLQlpZiAoIWNwKQotCQlyZXR1cm4oLTEpOwotCi0JaWYgKCFzdHJuY21wKGNwLT5uYW1lLCAidHR5UyIsIDQpKQotCQltY2Zyc19jb25zb2xlX3BvcnQgPSBjcC0+aW5kZXg7Ci0JZWxzZSBpZiAoIXN0cm5jbXAoY3AtPm5hbWUsICJjdWEiLCAzKSkKLQkJbWNmcnNfY29uc29sZV9wb3J0ID0gY3AtPmluZGV4OwotCWVsc2UKLQkJcmV0dXJuKC0xKTsKLQotCWlmIChhcmcpCi0JCW4gPSBzaW1wbGVfc3RydG91bChhcmcsTlVMTCwwKTsKLQlmb3IgKGkgPSAwOyBpIDwgTUNGUlNfQkFVRF9UQUJMRV9TSVpFOyBpKyspCi0JCWlmIChtY2Zyc19iYXVkX3RhYmxlW2ldID09IG4pCi0JCQlicmVhazsKLQlpZiAoaSA8IE1DRlJTX0JBVURfVEFCTEVfU0laRSkgewotCQltY2Zyc19jb25zb2xlX2JhdWQgPSBuOwotCQltY2Zyc19jb25zb2xlX2NiYXVkID0gMDsKLQkJaWYgKGkgPiAxNSkgewotCQkJbWNmcnNfY29uc29sZV9jYmF1ZCB8PSBDQkFVREVYOwotCQkJaSAtPSAxNTsKLQkJfQotCQltY2Zyc19jb25zb2xlX2NiYXVkIHw9IGk7Ci0JfQotCW1jZnJzX2luaXRfY29uc29sZSgpOyAvKiBtYWtlIHN1cmUgYmF1ZCByYXRlIGNoYW5nZXMgKi8KLQlyZXR1cm4oMCk7Ci19Ci0KLQotc3RhdGljIHN0cnVjdCB0dHlfZHJpdmVyICptY2Zyc19jb25zb2xlX2RldmljZShzdHJ1Y3QgY29uc29sZSAqYywgaW50ICppbmRleCkKLXsKLQkqaW5kZXggPSBjLT5pbmRleDsKLQlyZXR1cm4gbWNmcnNfc2VyaWFsX2RyaXZlcjsKLX0KLQotCi0vKgotICoJT3V0cHV0IGEgc2luZ2xlIGNoYXJhY3RlciwgdXNpbmcgVUFSVCBwb2xsZWQgbW9kZS4KLSAqCVRoaXMgaXMgdXNlZCBmb3IgY29uc29sZSBvdXRwdXQuCi0gKi8KLQotaW50IG1jZnJzX3B1dF9jaGFyKGNoYXIgY2gpCi17Ci0Jdm9sYXRpbGUgdW5zaWduZWQgY2hhcgkqdWFydHA7Ci0JdW5zaWduZWQgbG9uZwkJZmxhZ3M7Ci0JaW50CQkJaTsKLQotCXVhcnRwID0gKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikgKE1DRl9NQkFSICsKLQkJKG1jZnJzX2NvbnNvbGVfcG9ydCA/IE1DRlVBUlRfQkFTRTIgOiBNQ0ZVQVJUX0JBU0UxKSk7Ci0KLQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0JZm9yIChpID0gMDsgKGkgPCAweDEwMDAwKTsgaSsrKSB7Ci0JCWlmICh1YXJ0cFtNQ0ZVQVJUX1VTUl0gJiBNQ0ZVQVJUX1VTUl9UWFJFQURZKQotCQkJYnJlYWs7Ci0JfQotCWlmIChpIDwgMHgxMDAwMCkgewotCQl1YXJ0cFtNQ0ZVQVJUX1VUQl0gPSBjaDsKLQkJZm9yIChpID0gMDsgKGkgPCAweDEwMDAwKTsgaSsrKQotCQkJaWYgKHVhcnRwW01DRlVBUlRfVVNSXSAmIE1DRlVBUlRfVVNSX1RYRU1QVFkpCi0JCQkJYnJlYWs7Ci0JfQotCWlmIChpID49IDB4MTAwMDApCi0JCW1jZnJzX2luaXRfY29uc29sZSgpOyAvKiB0cnkgYW5kIGdldCBpdCBiYWNrICovCi0JbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwotCi0JcmV0dXJuIDE7Ci19Ci0KLQotLyoKLSAqIHJzX2NvbnNvbGVfd3JpdGUgaXMgcmVnaXN0ZXJlZCBmb3IgcHJpbnRrIG91dHB1dC4KLSAqLwotCi12b2lkIG1jZnJzX2NvbnNvbGVfd3JpdGUoc3RydWN0IGNvbnNvbGUgKmNwLCBjb25zdCBjaGFyICpwLCB1bnNpZ25lZCBsZW4pCi17Ci0JaWYgKCFtY2Zyc19jb25zb2xlX2luaXRlZCkKLQkJbWNmcnNfaW5pdF9jb25zb2xlKCk7Ci0Jd2hpbGUgKGxlbi0tID4gMCkgewotCQlpZiAoKnAgPT0gJ1xuJykKLQkJCW1jZnJzX3B1dF9jaGFyKCdccicpOwotCQltY2Zyc19wdXRfY2hhcigqcCsrKTsKLQl9Ci19Ci0KLS8qCi0gKiBkZWNsYXJlIG91ciBjb25zb2xlcwotICovCi0KLXN0cnVjdCBjb25zb2xlIG1jZnJzX2NvbnNvbGUgPSB7Ci0JLm5hbWUJCT0gInR0eVMiLAotCS53cml0ZQkJPSBtY2Zyc19jb25zb2xlX3dyaXRlLAotCS5kZXZpY2UJCT0gbWNmcnNfY29uc29sZV9kZXZpY2UsCi0JLnNldHVwCQk9IG1jZnJzX2NvbnNvbGVfc2V0dXAsCi0JLmZsYWdzCQk9IENPTl9QUklOVEJVRkZFUiwKLQkuaW5kZXgJCT0gLTEsCi19OwotCi1zdGF0aWMgaW50IF9faW5pdCBtY2Zyc19jb25zb2xlX2luaXQodm9pZCkKLXsKLQlyZWdpc3Rlcl9jb25zb2xlKCZtY2Zyc19jb25zb2xlKTsKLQlyZXR1cm4gMDsKLX0KLQotY29uc29sZV9pbml0Y2FsbChtY2Zyc19jb25zb2xlX2luaXQpOwotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL21jZnNlcmlhbC5oIGIvZHJpdmVycy9zZXJpYWwvbWNmc2VyaWFsLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU2NDIwZTIuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zZXJpYWwvbWNmc2VyaWFsLmgKKysrIC9kZXYvbnVsbApAQCAtMSw3NCArMCwwIEBACi0vKgotICogbWNmc2VyaWFsLmMgLS0gc2VyaWFsIGRyaXZlciBmb3IgQ29sZEZpcmUgaW50ZXJuYWwgVUFSVFMuCi0gKgotICogQ29weXJpZ2h0IChjKSAxOTk5IEdyZWcgVW5nZXJlciA8Z2VyZ0BzbmFwZ2Vhci5jb20+Ci0gKiBDb3B5cmlnaHQgKGMpIDIwMDAtMjAwMSBMaW5lbywgSW5jLiA8d3d3LmxpbmVvLmNvbT4KLSAqIENvcHlyaWdodCAoYykgMjAwMiBTbmFwR2VhciBJbmMuLCA8d3d3LnNuYXBnZWFyLmNvbT4KLSAqCi0gKiBCYXNlZCBvbiBjb2RlIGZyb20gNjgzMzJzZXJpYWwuYyB3aGljaCB3YXM6Ci0gKgotICogQ29weXJpZ2h0IChDKSAxOTk1IERhdmlkIFMuIE1pbGxlciAoZGF2ZW1AY2FpcC5ydXRnZXJzLmVkdSkKLSAqIENvcHlyaWdodCAoQykgMTk5OCBUU0hHCi0gKiBDb3B5cmlnaHQgKGMpIDE5OTkgUnQtQ29udHJvbCBJbmMuIDxqZWZmQHVjbGludXgub3JnPgotICovIAotI2lmbmRlZiBfTUNGX1NFUklBTF9ICi0jZGVmaW5lIF9NQ0ZfU0VSSUFMX0gKLQotI2luY2x1ZGUgPGxpbnV4L3NlcmlhbC5oPgotCi0jaWZkZWYgX19LRVJORUxfXwotCi0vKgotICoJRGVmaW5lIGEgbG9jYWwgc2VyaWFsIHN0YXRzIHN0cnVjdHVyZS4KLSAqLwotCi1zdHJ1Y3QgbWNmX3N0YXRzIHsKLQl1bnNpZ25lZCBpbnQJcng7Ci0JdW5zaWduZWQgaW50CXR4OwotCXVuc2lnbmVkIGludAlyeGJyZWFrOwotCXVuc2lnbmVkIGludAlyeGZyYW1pbmc7Ci0JdW5zaWduZWQgaW50CXJ4cGFyaXR5OwotCXVuc2lnbmVkIGludAlyeG92ZXJydW47Ci19OwotCi0KLS8qCi0gKiBUaGlzIGlzIG91ciBpbnRlcm5hbCBzdHJ1Y3R1cmUgZm9yIGVhY2ggc2VyaWFsIHBvcnQncyBzdGF0ZS4KLSAqIEVhY2ggc2VyaWFsIHBvcnQgaGFzIG9uZSBvZiB0aGVzZSBzdHJ1Y3R1cmVzIGFzc29jaWF0ZWQgd2l0aCBpdC4KLSAqLwotCi1zdHJ1Y3QgbWNmX3NlcmlhbCB7Ci0JaW50CQkJbWFnaWM7Ci0Jdm9sYXRpbGUgdW5zaWduZWQgY2hhcgkqYWRkcjsJCS8qIFVBUlQgbWVtb3J5IGFkZHJlc3MgKi8KLQlpbnQJCQlpcnE7Ci0JaW50CQkJZmxhZ3M7IAkJLyogZGVmaW5lZCBpbiB0dHkuaCAqLwotCWludAkJCXR5cGU7IAkJLyogVUFSVCB0eXBlICovCi0Jc3RydWN0IHR0eV9zdHJ1Y3QgCSp0dHk7Ci0JdW5zaWduZWQgY2hhcgkJaW1yOwkJLyogU29mdHdhcmUgaW1yIHJlZ2lzdGVyICovCi0JdW5zaWduZWQgaW50CQliYXVkOwotCWludAkJCXNpZ3M7Ci0JaW50CQkJY3VzdG9tX2Rpdmlzb3I7Ci0JaW50CQkJeF9jaGFyOwkvKiB4b24veG9mZiBjaGFyYWN0ZXIgKi8KLQlpbnQJCQliYXVkX2Jhc2U7Ci0JaW50CQkJY2xvc2VfZGVsYXk7Ci0JdW5zaWduZWQgc2hvcnQJCWNsb3Npbmdfd2FpdDsKLQl1bnNpZ25lZCBzaG9ydAkJY2xvc2luZ193YWl0MjsKLQl1bnNpZ25lZCBsb25nCQlldmVudDsKLQlpbnQJCQlsaW5lOwotCWludAkJCWNvdW50OwkgICAgLyogIyBvZiBmZCBvbiBkZXZpY2UgKi8KLQlpbnQJCQlibG9ja2VkX29wZW47IC8qICMgb2YgYmxvY2tlZCBvcGVucyAqLwotCXVuc2lnbmVkIGNoYXIgCQkqeG1pdF9idWY7Ci0JaW50CQkJeG1pdF9oZWFkOwotCWludAkJCXhtaXRfdGFpbDsKLQlpbnQJCQl4bWl0X2NudDsKLQlzdHJ1Y3QgbWNmX3N0YXRzCXN0YXRzOwotCXN0cnVjdCB3b3JrX3N0cnVjdAl0cXVldWU7Ci0Jc3RydWN0IHdvcmtfc3RydWN0CXRxdWV1ZV9oYW5ndXA7Ci0Jd2FpdF9xdWV1ZV9oZWFkX3QJb3Blbl93YWl0OwotCXdhaXRfcXVldWVfaGVhZF90CWNsb3NlX3dhaXQ7Ci0KLX07Ci0KLSNlbmRpZiAvKiBfX0tFUk5FTF9fICovCi0KLSNlbmRpZiAvKiBfTUNGX1NFUklBTF9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9tcGM1Mnh4X3VhcnQuYyBiL2RyaXZlcnMvc2VyaWFsL21wYzUyeHhfdWFydC5jCmluZGV4IDM2MTI2MDcuLjYxMTdkM2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL21wYzUyeHhfdWFydC5jCisrKyBiL2RyaXZlcnMvc2VyaWFsL21wYzUyeHhfdWFydC5jCkBAIC03MiwxMyArNzIsOCBAQAogI2luY2x1ZGUgPGxpbnV4L2NvbnNvbGUuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+Ci0KLSNpZiBkZWZpbmVkKENPTkZJR19QUENfTUVSR0UpCiAjaW5jbHVkZSA8bGludXgvb2YuaD4KICNpbmNsdWRlIDxsaW51eC9vZl9wbGF0Zm9ybS5oPgotI2Vsc2UKLSNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KLSNlbmRpZgogCiAjaW5jbHVkZSA8YXNtL21wYzUyeHguaD4KICNpbmNsdWRlIDxhc20vbXBjNTEyeC5oPgpAQCAtMTA3LDEyICsxMDIsMTEgQEAKIAkgKiAgICAgICAgaXQncyBjbGVhcmVkLCB0aGVuIGEgbWVtc2V0KC4uLiwwLC4uLikgc2hvdWxkIGJlIGFkZGVkIHRvCiAJICogICAgICAgIHRoZSBjb25zb2xlX2luaXQKIAkgKi8KLSNpZiBkZWZpbmVkKENPTkZJR19QUENfTUVSR0UpCisKIC8qIGxvb2t1cCB0YWJsZSBmb3IgbWF0Y2hpbmcgZGV2aWNlIG5vZGVzIHRvIGluZGV4IG51bWJlcnMgKi8KIHN0YXRpYyBzdHJ1Y3QgZGV2aWNlX25vZGUgKm1wYzUyeHhfdWFydF9ub2Rlc1tNUEM1Mnh4X1BTQ19NQVhOVU1dOwogCiBzdGF0aWMgdm9pZCBtcGM1Mnh4X3VhcnRfb2ZfZW51bWVyYXRlKHZvaWQpOwotI2VuZGlmCiAKIAogI2RlZmluZSBQU0MocG9ydCkgKChzdHJ1Y3QgbXBjNTJ4eF9wc2MgX19pb21lbSAqKSgocG9ydCktPm1lbWJhc2UpKQpAQCAtMjU1LDE3ICsyNDksMTIgQEAKIC8qIFNlYXJjaCBmb3IgYnVzLWZyZXF1ZW5jeSBwcm9wZXJ0eSBpbiB0aGlzIG5vZGUgb3IgYSBwYXJlbnQgKi8KIHN0YXRpYyB1bnNpZ25lZCBsb25nIG1wYzUyeHhfZ2V0dWFydGNsayh2b2lkICpwKQogewotI2lmIGRlZmluZWQoQ09ORklHX1BQQ19NRVJHRSkKIAkvKgogCSAqIDUyMDAgVUFSVHMgaGF2ZSBhIC8gMzIgcHJlc2NhbGVyCiAJICogYnV0IHRoZSBnZW5lcmljIHNlcmlhbCBjb2RlIGFzc3VtZXMgMTYKIAkgKiBzbyByZXR1cm4gaXBiIGZyZXEgLyAyCiAJICovCiAJcmV0dXJuIG1wYzUyeHhfZmluZF9pcGJfZnJlcShwKSAvIDI7Ci0jZWxzZQotCXByX2RlYnVnKCJ1bmV4cGVjdGVkIGNhbGwgdG8gbXBjNTJ4eF9nZXR1YXJ0Y2xrIHdpdGggYXJjaC9wcGNcbiIpOwotCXJldHVybiBOVUxMOwotI2VuZGlmCiB9CiAKIHN0YXRpYyBzdHJ1Y3QgcHNjX29wcyBtcGM1Mnh4X3BzY19vcHMgPSB7CkBAIC04ODYsMTAgKzg3NSw2IEBACiAKIAkvKiBDVHtVLEx9UiBhcmUgd3JpdGUtb25seSAhICovCiAJKmJhdWQgPSBDT05GSUdfU0VSSUFMX01QQzUyeHhfQ09OU09MRV9CQVVEOwotI2lmICFkZWZpbmVkKENPTkZJR19QUENfTUVSR0UpCi0JaWYgKF9fcmVzLmJpX2JhdWRyYXRlKQotCQkqYmF1ZCA9IF9fcmVzLmJpX2JhdWRyYXRlOwotI2VuZGlmCiAKIAkvKiBQYXJzZSB0aGVtICovCiAJc3dpdGNoIChtcjEgJiBNUEM1Mnh4X1BTQ19NT0RFX0JJVFNfTUFTSykgewpAQCAtOTQ2LDQyICs5MzEsNiBAQAogCXBzY19vcHMtPmN3X3Jlc3RvcmVfaW50cyhwb3J0KTsKIH0KIAotI2lmICFkZWZpbmVkKENPTkZJR19QUENfTUVSR0UpCi1zdGF0aWMgaW50IF9faW5pdAotbXBjNTJ4eF9jb25zb2xlX3NldHVwKHN0cnVjdCBjb25zb2xlICpjbywgY2hhciAqb3B0aW9ucykKLXsKLQlzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0ID0gJm1wYzUyeHhfdWFydF9wb3J0c1tjby0+aW5kZXhdOwotCi0JaW50IGJhdWQgPSBDT05GSUdfU0VSSUFMX01QQzUyeHhfQ09OU09MRV9CQVVEOwotCWludCBiaXRzID0gODsKLQlpbnQgcGFyaXR5ID0gJ24nOwotCWludCBmbG93ID0gJ24nOwotCi0JaWYgKGNvLT5pbmRleCA8IDAgfHwgY28tPmluZGV4ID49IE1QQzUyeHhfUFNDX01BWE5VTSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQkvKiBCYXNpYyBwb3J0IGluaXQuIE5lZWRlZCBzaW5jZSB3ZSB1c2Ugc29tZSB1YXJ0Xz8/PyBmdW5jIGJlZm9yZQotCSAqIHJlYWwgaW5pdCBmb3IgZWFybHkgYWNjZXNzICovCi0Jc3Bpbl9sb2NrX2luaXQoJnBvcnQtPmxvY2spOwotCXBvcnQtPnVhcnRjbGsJPSBfX3Jlcy5iaV9pcGJmcmVxIC8gMjsgLyogTG9vayBhdCBDVExSIGRvYyAqLwotCXBvcnQtPm9wcwk9ICZtcGM1Mnh4X3VhcnRfb3BzOwotCXBvcnQtPm1hcGJhc2UJPSBNUEM1Mnh4X1BBKE1QQzUyeHhfUFNDeF9PRkZTRVQoY28tPmluZGV4KzEpKTsKLQotCS8qIFdlIGlvcmVtYXAgb3Vyc2VsZiAqLwotCXBvcnQtPm1lbWJhc2UgPSBpb3JlbWFwKHBvcnQtPm1hcGJhc2UsIE1QQzUyeHhfUFNDX1NJWkUpOwotCWlmIChwb3J0LT5tZW1iYXNlID09IE5VTEwpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JLyogU2V0dXAgdGhlIHBvcnQgcGFyYW1ldGVycyBhY2NvZGluZyB0byBvcHRpb25zICovCi0JaWYgKG9wdGlvbnMpCi0JCXVhcnRfcGFyc2Vfb3B0aW9ucyhvcHRpb25zLCAmYmF1ZCwgJnBhcml0eSwgJmJpdHMsICZmbG93KTsKLQllbHNlCi0JCW1wYzUyeHhfY29uc29sZV9nZXRfb3B0aW9ucyhwb3J0LCAmYmF1ZCwgJnBhcml0eSwgJmJpdHMsICZmbG93KTsKLQotCXJldHVybiB1YXJ0X3NldF9vcHRpb25zKHBvcnQsIGNvLCBiYXVkLCBwYXJpdHksIGJpdHMsIGZsb3cpOwotfQotCi0jZWxzZQogCiBzdGF0aWMgaW50IF9faW5pdAogbXBjNTJ4eF9jb25zb2xlX3NldHVwKHN0cnVjdCBjb25zb2xlICpjbywgY2hhciAqb3B0aW9ucykKQEAgLTEwNTMsNyArMTAwMiw2IEBACiAKIAlyZXR1cm4gdWFydF9zZXRfb3B0aW9ucyhwb3J0LCBjbywgYmF1ZCwgcGFyaXR5LCBiaXRzLCBmbG93KTsKIH0KLSNlbmRpZiAvKiBkZWZpbmVkKENPTkZJR19QUENfTUVSR0UpICovCiAKIAogc3RhdGljIHN0cnVjdCB1YXJ0X2RyaXZlciBtcGM1Mnh4X3VhcnRfZHJpdmVyOwpAQCAtMTA3Miw5ICsxMDIwLDcgQEAKIHN0YXRpYyBpbnQgX19pbml0CiBtcGM1Mnh4X2NvbnNvbGVfaW5pdCh2b2lkKQogewotI2lmIGRlZmluZWQoQ09ORklHX1BQQ19NRVJHRSkKIAltcGM1Mnh4X3VhcnRfb2ZfZW51bWVyYXRlKCk7Ci0jZW5kaWYKIAlyZWdpc3Rlcl9jb25zb2xlKCZtcGM1Mnh4X2NvbnNvbGUpOwogCXJldHVybiAwOwogfQpAQCAtMTEwMCwxMTUgKzEwNDYsNiBAQAogCS5jb25zCQk9IE1QQzUyeHhfUFNDX0NPTlNPTEUsCiB9OwogCi0KLSNpZiAhZGVmaW5lZChDT05GSUdfUFBDX01FUkdFKQotLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi0vKiBQbGF0Zm9ybSBEcml2ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwotCi1zdGF0aWMgaW50IF9fZGV2aW5pdAotbXBjNTJ4eF91YXJ0X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgcmVzb3VyY2UgKnJlcyA9IGRldi0+cmVzb3VyY2U7Ci0KLQlzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0ID0gTlVMTDsKLQlpbnQgaSwgaWR4LCByZXQ7Ci0KLQkvKiBDaGVjayB2YWxpZGl0eSAmIHByZXNlbmNlICovCi0JaWR4ID0gZGV2LT5pZDsKLQlpZiAoaWR4IDwgMCB8fCBpZHggPj0gTVBDNTJ4eF9QU0NfTUFYTlVNKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWlmICghbXBjNTJ4eF9tYXRjaF9wc2NfZnVuY3Rpb24oaWR4LCAidWFydCIpKQotCQlyZXR1cm4gLUVOT0RFVjsKLQotCS8qIEluaXQgdGhlIHBvcnQgc3RydWN0dXJlICovCi0JcG9ydCA9ICZtcGM1Mnh4X3VhcnRfcG9ydHNbaWR4XTsKLQotCXNwaW5fbG9ja19pbml0KCZwb3J0LT5sb2NrKTsKLQlwb3J0LT51YXJ0Y2xrCT0gX19yZXMuYmlfaXBiZnJlcSAvIDI7IC8qIExvb2sgYXQgQ1RMUiBkb2MgKi8KLQlwb3J0LT5maWZvc2l6ZQk9IDUxMjsKLQlwb3J0LT5pb3R5cGUJPSBVUElPX01FTTsKLQlwb3J0LT5mbGFncwk9IFVQRl9CT09UX0FVVE9DT05GIHwKLQkJCSAgKHVhcnRfY29uc29sZShwb3J0KSA/IDAgOiBVUEZfSU9SRU1BUCk7Ci0JcG9ydC0+bGluZQk9IGlkeDsKLQlwb3J0LT5vcHMJPSAmbXBjNTJ4eF91YXJ0X29wczsKLQlwb3J0LT5kZXYJPSAmZGV2LT5kZXY7Ci0KLQkvKiBTZWFyY2ggZm9yIElSUSBhbmQgbWFwYmFzZSAqLwotCWZvciAoaSA9IDAgOyBpIDwgZGV2LT5udW1fcmVzb3VyY2VzIDsgaSsrLCByZXMrKykgewotCQlpZiAocmVzLT5mbGFncyAmIElPUkVTT1VSQ0VfTUVNKQotCQkJcG9ydC0+bWFwYmFzZSA9IHJlcy0+c3RhcnQ7Ci0JCWVsc2UgaWYgKHJlcy0+ZmxhZ3MgJiBJT1JFU09VUkNFX0lSUSkKLQkJCXBvcnQtPmlycSA9IHJlcy0+c3RhcnQ7Ci0JfQotCWlmICghcG9ydC0+aXJxIHx8ICFwb3J0LT5tYXBiYXNlKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCS8qIEFkZCB0aGUgcG9ydCB0byB0aGUgdWFydCBzdWItc3lzdGVtICovCi0JcmV0ID0gdWFydF9hZGRfb25lX3BvcnQoJm1wYzUyeHhfdWFydF9kcml2ZXIsIHBvcnQpOwotCWlmICghcmV0KQotCQlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShkZXYsICh2b2lkICopcG9ydCk7Ci0KLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgaW50Ci1tcGM1Mnh4X3VhcnRfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0ID0gKHN0cnVjdCB1YXJ0X3BvcnQgKikgcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKLQotCXBsYXRmb3JtX3NldF9kcnZkYXRhKGRldiwgTlVMTCk7Ci0KLQlpZiAocG9ydCkKLQkJdWFydF9yZW1vdmVfb25lX3BvcnQoJm1wYzUyeHhfdWFydF9kcml2ZXIsIHBvcnQpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLSNpZmRlZiBDT05GSUdfUE0KLXN0YXRpYyBpbnQKLW1wYzUyeHhfdWFydF9zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQotewotCXN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQgPSAoc3RydWN0IHVhcnRfcG9ydCAqKSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOwotCi0JaWYgKHBvcnQpCi0JCXVhcnRfc3VzcGVuZF9wb3J0KCZtcGM1Mnh4X3VhcnRfZHJpdmVyLCBwb3J0KTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50Ci1tcGM1Mnh4X3VhcnRfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0ID0gKHN0cnVjdCB1YXJ0X3BvcnQgKikgcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKLQotCWlmIChwb3J0KQotCQl1YXJ0X3Jlc3VtZV9wb3J0KCZtcGM1Mnh4X3VhcnRfZHJpdmVyLCBwb3J0KTsKLQotCXJldHVybiAwOwotfQotI2VuZGlmCi0KLS8qIHdvcmsgd2l0aCBob3RwbHVnIGFuZCBjb2xkcGx1ZyAqLwotTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybTptcGM1Mnh4LXBzYyIpOwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBtcGM1Mnh4X3VhcnRfcGxhdGZvcm1fZHJpdmVyID0gewotCS5wcm9iZQkJPSBtcGM1Mnh4X3VhcnRfcHJvYmUsCi0JLnJlbW92ZQkJPSBtcGM1Mnh4X3VhcnRfcmVtb3ZlLAotI2lmZGVmIENPTkZJR19QTQotCS5zdXNwZW5kCT0gbXBjNTJ4eF91YXJ0X3N1c3BlbmQsCi0JLnJlc3VtZQkJPSBtcGM1Mnh4X3VhcnRfcmVzdW1lLAotI2VuZGlmCi0JLmRyaXZlcgkJPSB7Ci0JCS5vd25lcgk9IFRISVNfTU9EVUxFLAotCQkubmFtZQk9ICJtcGM1Mnh4LXBzYyIsCi0JfSwKLX07Ci0jZW5kaWYgLyogIWRlZmluZWQoQ09ORklHX1BQQ19NRVJHRSkgKi8KLQotCi0jaWYgZGVmaW5lZChDT05GSUdfUFBDX01FUkdFKQogLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCiAvKiBPRiBQbGF0Zm9ybSBEcml2ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwpAQCAtMTQwMiw3ICsxMjM5LDYgQEAKIAkJLm5hbWUJPSAibXBjNTJ4eC1wc2MtdWFydCIsCiAJfSwKIH07Ci0jZW5kaWYgLyogZGVmaW5lZChDT05GSUdfUFBDX01FUkdFKSAqLwogCiAKIC8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwpAQCAtMTQyMyw3ICsxMjU5LDYgQEAKIAkJcmV0dXJuIHJldDsKIAl9CiAKLSNpZiBkZWZpbmVkKENPTkZJR19QUENfTUVSR0UpCiAJbXBjNTJ4eF91YXJ0X29mX2VudW1lcmF0ZSgpOwogCiAJcmV0ID0gb2ZfcmVnaXN0ZXJfcGxhdGZvcm1fZHJpdmVyKCZtcGM1Mnh4X3VhcnRfb2ZfZHJpdmVyKTsKQEAgLTE0MzMsMTYgKzEyNjgsNiBAQAogCQl1YXJ0X3VucmVnaXN0ZXJfZHJpdmVyKCZtcGM1Mnh4X3VhcnRfZHJpdmVyKTsKIAkJcmV0dXJuIHJldDsKIAl9Ci0jZWxzZQotCXBzY19vcHMgPSAmbXBjNTJ4eF9wc2Nfb3BzOwotCXJldCA9IHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmbXBjNTJ4eF91YXJ0X3BsYXRmb3JtX2RyaXZlcik7Ci0JaWYgKHJldCkgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIgZmFpbGVkICglaSlcbiIsCi0JCSAgICAgICBfX0ZJTEVfXywgcmV0KTsKLQkJdWFydF91bnJlZ2lzdGVyX2RyaXZlcigmbXBjNTJ4eF91YXJ0X2RyaXZlcik7Ci0JCXJldHVybiByZXQ7Ci0JfQotI2VuZGlmCiAKIAlyZXR1cm4gMDsKIH0KQEAgLTE0NTAsMTEgKzEyNzUsNyBAQAogc3RhdGljIHZvaWQgX19leGl0CiBtcGM1Mnh4X3VhcnRfZXhpdCh2b2lkKQogewotI2lmIGRlZmluZWQoQ09ORklHX1BQQ19NRVJHRSkKIAlvZl91bnJlZ2lzdGVyX3BsYXRmb3JtX2RyaXZlcigmbXBjNTJ4eF91YXJ0X29mX2RyaXZlcik7Ci0jZWxzZQotCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZtcGM1Mnh4X3VhcnRfcGxhdGZvcm1fZHJpdmVyKTsKLSNlbmRpZgogCXVhcnRfdW5yZWdpc3Rlcl9kcml2ZXIoJm1wYzUyeHhfdWFydF9kcml2ZXIpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9zM2MyNDAwLmMgYi9kcml2ZXJzL3NlcmlhbC9zM2MyNDAwLmMKaW5kZXggYzhiNDI2Ni4uNDg3M2YyOTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL3MzYzI0MDAuYworKysgYi9kcml2ZXJzL3NlcmlhbC9zM2MyNDAwLmMKQEAgLTE5LDcgKzE5LDcgQEAKIAogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KIAotI2luY2x1ZGUgPGFzbS9wbGF0LXMzYy9yZWdzLXNlcmlhbC5oPgorI2luY2x1ZGUgPHBsYXQvcmVncy1zZXJpYWwuaD4KICNpbmNsdWRlIDxtYWNoL3JlZ3MtZ3Bpby5oPgogCiAjaW5jbHVkZSAic2Ftc3VuZy5oIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvczNjMjQxMC5jIGIvZHJpdmVycy9zZXJpYWwvczNjMjQxMC5jCmluZGV4IDQwYTI1MzEuLjg3YzE4MmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL3MzYzI0MTAuYworKysgYi9kcml2ZXJzL3NlcmlhbC9zM2MyNDEwLmMKQEAgLTIxLDcgKzIxLDcgQEAKICNpbmNsdWRlIDxhc20vaXJxLmg+CiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgogCi0jaW5jbHVkZSA8YXNtL3BsYXQtczNjL3JlZ3Mtc2VyaWFsLmg+CisjaW5jbHVkZSA8cGxhdC9yZWdzLXNlcmlhbC5oPgogI2luY2x1ZGUgPG1hY2gvcmVncy1ncGlvLmg+CiAKICNpbmNsdWRlICJzYW1zdW5nLmgiCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9zM2MyNDEyLmMgYi9kcml2ZXJzL3NlcmlhbC9zM2MyNDEyLmMKaW5kZXggZDAxNzAzMS4uZmQwMTdiMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvczNjMjQxMi5jCisrKyBiL2RyaXZlcnMvc2VyaWFsL3MzYzI0MTIuYwpAQCAtMjEsNyArMjEsNyBAQAogI2luY2x1ZGUgPGFzbS9pcnEuaD4KICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CiAKLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MvcmVncy1zZXJpYWwuaD4KKyNpbmNsdWRlIDxwbGF0L3JlZ3Mtc2VyaWFsLmg+CiAjaW5jbHVkZSA8bWFjaC9yZWdzLWdwaW8uaD4KIAogI2luY2x1ZGUgInNhbXN1bmcuaCIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL3MzYzI0NDAuYyBiL2RyaXZlcnMvc2VyaWFsL3MzYzI0NDAuYwppbmRleCBkNGEyYjE3Li4zMTdkMjM5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9zM2MyNDQwLmMKKysrIGIvZHJpdmVycy9zZXJpYWwvczNjMjQ0MC5jCkBAIC0yMSw3ICsyMSw3IEBACiAjaW5jbHVkZSA8YXNtL2lycS5oPgogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KIAotI2luY2x1ZGUgPGFzbS9wbGF0LXMzYy9yZWdzLXNlcmlhbC5oPgorI2luY2x1ZGUgPHBsYXQvcmVncy1zZXJpYWwuaD4KICNpbmNsdWRlIDxtYWNoL3JlZ3MtZ3Bpby5oPgogCiAjaW5jbHVkZSAic2Ftc3VuZy5oIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvc2Ftc3VuZy5jIGIvZHJpdmVycy9zZXJpYWwvc2Ftc3VuZy5jCmluZGV4IDVhODhiM2Y5Li4xZTIxOWQzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9zYW1zdW5nLmMKKysrIGIvZHJpdmVycy9zZXJpYWwvc2Ftc3VuZy5jCkBAIC00Nyw3ICs0Nyw3IEBACiAKICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CiAKLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MvcmVncy1zZXJpYWwuaD4KKyNpbmNsdWRlIDxwbGF0L3JlZ3Mtc2VyaWFsLmg+CiAjaW5jbHVkZSA8bWFjaC9yZWdzLWdwaW8uaD4KIAogI2luY2x1ZGUgInNhbXN1bmcuaCIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL3NlcmlhbF9jb3JlLmMgYi9kcml2ZXJzL3NlcmlhbC9zZXJpYWxfY29yZS5jCmluZGV4IGY5NzdjOTguLjg3NDc4NmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL3NlcmlhbF9jb3JlLmMKKysrIGIvZHJpdmVycy9zZXJpYWwvc2VyaWFsX2NvcmUuYwpAQCAtNzQxLDcgKzc0MSw3IEBACiAJaWYgKHBvcnQtPm9wcy0+dmVyaWZ5X3BvcnQpCiAJCXJldHZhbCA9IHBvcnQtPm9wcy0+dmVyaWZ5X3BvcnQocG9ydCwgJm5ld19zZXJpYWwpOwogCi0JaWYgKChuZXdfc2VyaWFsLmlycSA+PSBOUl9JUlFTKSB8fCAobmV3X3NlcmlhbC5pcnEgPCAwKSB8fAorCWlmICgobmV3X3NlcmlhbC5pcnEgPj0gbnJfaXJxcykgfHwgKG5ld19zZXJpYWwuaXJxIDwgMCkgfHwKIAkgICAgKG5ld19zZXJpYWwuYmF1ZF9iYXNlIDwgOTYwMCkpCiAJCXJldHZhbCA9IC1FSU5WQUw7CiAKQEAgLTIwNTEsNyArMjA1MSw4IEBACiAJCQkJCSJ0cmFuc21pdHRlclxuIiwKIAkJCSAgICAgICBwb3J0LT5kZXYgPyBwb3J0LT5kZXYtPmJ1c19pZCA6ICIiLAogCQkJICAgICAgIHBvcnQtPmRldiA/ICI6ICIgOiAiIiwKLQkJCSAgICAgICBkcnYtPmRldl9uYW1lLCBwb3J0LT5saW5lKTsKKwkJCSAgICAgICBkcnYtPmRldl9uYW1lLAorCQkJICAgICAgIGRydi0+dHR5X2RyaXZlci0+bmFtZV9iYXNlICsgcG9ydC0+bGluZSk7CiAKIAkJb3BzLT5zaHV0ZG93bihwb3J0KTsKIAl9CkBAIC0yMTU0LDEyICsyMTU1LDExIEBACiAKIAlzd2l0Y2ggKHBvcnQtPmlvdHlwZSkgewogCWNhc2UgVVBJT19QT1JUOgotCQlzbnByaW50ZihhZGRyZXNzLCBzaXplb2YoYWRkcmVzcyksCi0JCQkgIkkvTyAweCV4IiwgcG9ydC0+aW9iYXNlKTsKKwkJc25wcmludGYoYWRkcmVzcywgc2l6ZW9mKGFkZHJlc3MpLCAiSS9PIDB4JWx4IiwgcG9ydC0+aW9iYXNlKTsKIAkJYnJlYWs7CiAJY2FzZSBVUElPX0hVQjY6CiAJCXNucHJpbnRmKGFkZHJlc3MsIHNpemVvZihhZGRyZXNzKSwKLQkJCSAiSS9PIDB4JXggb2Zmc2V0IDB4JXgiLCBwb3J0LT5pb2Jhc2UsIHBvcnQtPmh1YjYpOworCQkJICJJL08gMHglbHggb2Zmc2V0IDB4JXgiLCBwb3J0LT5pb2Jhc2UsIHBvcnQtPmh1YjYpOwogCQlicmVhazsKIAljYXNlIFVQSU9fTUVNOgogCWNhc2UgVVBJT19NRU0zMjoKQEAgLTIxNzcsNyArMjE3Nyw5IEBACiAJcHJpbnRrKEtFUk5fSU5GTyAiJXMlcyVzJWQgYXQgJXMgKGlycSA9ICVkKSBpcyBhICVzXG4iLAogCSAgICAgICBwb3J0LT5kZXYgPyBwb3J0LT5kZXYtPmJ1c19pZCA6ICIiLAogCSAgICAgICBwb3J0LT5kZXYgPyAiOiAiIDogIiIsCi0JICAgICAgIGRydi0+ZGV2X25hbWUsIHBvcnQtPmxpbmUsIGFkZHJlc3MsIHBvcnQtPmlycSwgdWFydF90eXBlKHBvcnQpKTsKKwkgICAgICAgZHJ2LT5kZXZfbmFtZSwKKwkgICAgICAgZHJ2LT50dHlfZHJpdmVyLT5uYW1lX2Jhc2UgKyBwb3J0LT5saW5lLAorCSAgICAgICBhZGRyZXNzLCBwb3J0LT5pcnEsIHVhcnRfdHlwZShwb3J0KSk7CiB9CiAKIHN0YXRpYyB2b2lkCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9zZXJpYWxfY3MuYyBiL2RyaXZlcnMvc2VyaWFsL3NlcmlhbF9jcy5jCmluZGV4IDE2NGQyYTQuLjc1NDZhYTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL3NlcmlhbF9jcy5jCisrKyBiL2RyaXZlcnMvc2VyaWFsL3NlcmlhbF9jcy5jCkBAIC00MzEsMTMxICs0MzEsMTAzIEBACiB7CiAJaW50IGk7CiAJaSA9IHBjbWNpYV9nZXRfZmlyc3RfdHVwbGUoaGFuZGxlLCB0dXBsZSk7Ci0JaWYgKGkgIT0gQ1NfU1VDQ0VTUykKLQkJcmV0dXJuIENTX05PX01PUkVfSVRFTVM7Ci0JaSA9IHBjbWNpYV9nZXRfdHVwbGVfZGF0YShoYW5kbGUsIHR1cGxlKTsKLQlpZiAoaSAhPSBDU19TVUNDRVNTKQorCWlmIChpICE9IDApCiAJCXJldHVybiBpOwotCXJldHVybiBwY21jaWFfcGFyc2VfdHVwbGUoaGFuZGxlLCB0dXBsZSwgcGFyc2UpOwotfQotCi1zdGF0aWMgaW50Ci1uZXh0X3R1cGxlKHN0cnVjdCBwY21jaWFfZGV2aWNlICpoYW5kbGUsIHR1cGxlX3QgKiB0dXBsZSwgY2lzcGFyc2VfdCAqIHBhcnNlKQotewotCWludCBpOwotCWkgPSBwY21jaWFfZ2V0X25leHRfdHVwbGUoaGFuZGxlLCB0dXBsZSk7Ci0JaWYgKGkgIT0gQ1NfU1VDQ0VTUykKLQkJcmV0dXJuIENTX05PX01PUkVfSVRFTVM7CiAJaSA9IHBjbWNpYV9nZXRfdHVwbGVfZGF0YShoYW5kbGUsIHR1cGxlKTsKLQlpZiAoaSAhPSBDU19TVUNDRVNTKQorCWlmIChpICE9IDApCiAJCXJldHVybiBpOwotCXJldHVybiBwY21jaWFfcGFyc2VfdHVwbGUoaGFuZGxlLCB0dXBsZSwgcGFyc2UpOworCXJldHVybiBwY21jaWFfcGFyc2VfdHVwbGUodHVwbGUsIHBhcnNlKTsKIH0KIAogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAKLXN0YXRpYyBpbnQgc2ltcGxlX2NvbmZpZyhzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKK3N0YXRpYyBpbnQgc2ltcGxlX2NvbmZpZ19jaGVjayhzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYsCisJCQkgICAgICAgY2lzdHBsX2NmdGFibGVfZW50cnlfdCAqY2YsCisJCQkgICAgICAgY2lzdHBsX2NmdGFibGVfZW50cnlfdCAqZGZsdCwKKwkJCSAgICAgICB1bnNpZ25lZCBpbnQgdmNjLAorCQkJICAgICAgIHZvaWQgKnByaXZfZGF0YSkKK3sKKwlzdGF0aWMgY29uc3QgaW50IHNpemVfdGFibGVbMl0gPSB7IDgsIDE2IH07CisJaW50ICp0cnkgPSBwcml2X2RhdGE7CisKKwlpZiAoY2YtPnZwcDEucHJlc2VudCAmICgxIDw8IENJU1RQTF9QT1dFUl9WTk9NKSkKKwkJcF9kZXYtPmNvbmYuVnBwID0KKwkJCWNmLT52cHAxLnBhcmFtW0NJU1RQTF9QT1dFUl9WTk9NXSAvIDEwMDAwOworCisJaWYgKChjZi0+aW8ubndpbiA+IDApICYmIChjZi0+aW8ud2luWzBdLmxlbiA9PSBzaXplX3RhYmxlWygqdHJ5ID4+IDEpXSkKKwkgICAgJiYgKGNmLT5pby53aW5bMF0uYmFzZSAhPSAwKSkgeworCQlwX2Rldi0+aW8uQmFzZVBvcnQxID0gY2YtPmlvLndpblswXS5iYXNlOworCQlwX2Rldi0+aW8uSU9BZGRyTGluZXMgPSAoKCp0cnkgJiAweDEpID09IDApID8KKwkJCTE2IDogY2YtPmlvLmZsYWdzICYgQ0lTVFBMX0lPX0xJTkVTX01BU0s7CisJCWlmICghcGNtY2lhX3JlcXVlc3RfaW8ocF9kZXYsICZwX2Rldi0+aW8pKQorCQkJcmV0dXJuIDA7CisJfQorCXJldHVybiAtRUlOVkFMOworfQorCitzdGF0aWMgaW50IHNpbXBsZV9jb25maWdfY2hlY2tfbm90cGlja3koc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2LAorCQkJCQljaXN0cGxfY2Z0YWJsZV9lbnRyeV90ICpjZiwKKwkJCQkJY2lzdHBsX2NmdGFibGVfZW50cnlfdCAqZGZsdCwKKwkJCQkJdW5zaWduZWQgaW50IHZjYywKKwkJCQkJdm9pZCAqcHJpdl9kYXRhKQogewogCXN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgYmFzZVs1XSA9IHsgMHgzZjgsIDB4MmY4LCAweDNlOCwgMHgyZTgsIDB4MCB9OwotCXN0YXRpYyBjb25zdCBpbnQgc2l6ZV90YWJsZVsyXSA9IHsgOCwgMTYgfTsKKwlpbnQgajsKKworCWlmICgoY2YtPmlvLm53aW4gPiAwKSAmJiAoKGNmLT5pby5mbGFncyAmIENJU1RQTF9JT19MSU5FU19NQVNLKSA8PSAzKSkgeworCQlmb3IgKGogPSAwOyBqIDwgNTsgaisrKSB7CisJCQlwX2Rldi0+aW8uQmFzZVBvcnQxID0gYmFzZVtqXTsKKwkJCXBfZGV2LT5pby5JT0FkZHJMaW5lcyA9IGJhc2Vbal0gPyAxNiA6IDM7CisJCQlpZiAoIXBjbWNpYV9yZXF1ZXN0X2lvKHBfZGV2LCAmcF9kZXYtPmlvKSkKKwkJCQlyZXR1cm4gMDsKKwkJfQorCX0KKwlyZXR1cm4gLUVOT0RFVjsKK30KKworc3RhdGljIGludCBzaW1wbGVfY29uZmlnKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQorewogCXN0cnVjdCBzZXJpYWxfaW5mbyAqaW5mbyA9IGxpbmstPnByaXY7Ci0Jc3RydWN0IHNlcmlhbF9jZmdfbWVtICpjZmdfbWVtOwotCXR1cGxlX3QgKnR1cGxlOwotCXVfY2hhciAqYnVmOwotCWNpc3BhcnNlX3QgKnBhcnNlOwotCWNpc3RwbF9jZnRhYmxlX2VudHJ5X3QgKmNmOwotCWNvbmZpZ19pbmZvX3QgY29uZmlnOwotCWludCBpLCBqLCB0cnk7Ci0JaW50IHM7Ci0KLQljZmdfbWVtID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHNlcmlhbF9jZmdfbWVtKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFjZmdfbWVtKQotCQlyZXR1cm4gLTE7Ci0KLQl0dXBsZSA9ICZjZmdfbWVtLT50dXBsZTsKLQlwYXJzZSA9ICZjZmdfbWVtLT5wYXJzZTsKLQljZiA9ICZwYXJzZS0+Y2Z0YWJsZV9lbnRyeTsKLQlidWYgPSBjZmdfbWVtLT5idWY7CisJaW50IGkgPSAtRU5PREVWLCB0cnk7CiAKIAkvKiBJZiB0aGUgY2FyZCBpcyBhbHJlYWR5IGNvbmZpZ3VyZWQsIGxvb2sgdXAgdGhlIHBvcnQgYW5kIGlycSAqLwotCWkgPSBwY21jaWFfZ2V0X2NvbmZpZ3VyYXRpb25faW5mbyhsaW5rLCAmY29uZmlnKTsKLQlpZiAoKGkgPT0gQ1NfU1VDQ0VTUykgJiYgKGNvbmZpZy5BdHRyaWJ1dGVzICYgQ09ORl9WQUxJRF9DTElFTlQpKSB7CisJaWYgKGxpbmstPmZ1bmN0aW9uX2NvbmZpZykgewogCQl1bnNpZ25lZCBpbnQgcG9ydCA9IDA7Ci0JCWlmICgoY29uZmlnLkJhc2VQb3J0MiAhPSAwKSAmJiAoY29uZmlnLk51bVBvcnRzMiA9PSA4KSkgewotCQkJcG9ydCA9IGNvbmZpZy5CYXNlUG9ydDI7CisJCWlmICgobGluay0+aW8uQmFzZVBvcnQyICE9IDApICYmCisJCSAgICAobGluay0+aW8uTnVtUG9ydHMyID09IDgpKSB7CisJCQlwb3J0ID0gbGluay0+aW8uQmFzZVBvcnQyOwogCQkJaW5mby0+c2xhdmUgPSAxOwogCQl9IGVsc2UgaWYgKChpbmZvLT5tYW5maWQgPT0gTUFORklEX09TSVRFQ0gpICYmCi0JCQkgICAoY29uZmlnLk51bVBvcnRzMSA9PSAweDQwKSkgewotCQkJcG9ydCA9IGNvbmZpZy5CYXNlUG9ydDEgKyAweDI4OworCQkJICAgKGxpbmstPmlvLk51bVBvcnRzMSA9PSAweDQwKSkgeworCQkJcG9ydCA9IGxpbmstPmlvLkJhc2VQb3J0MSArIDB4Mjg7CiAJCQlpbmZvLT5zbGF2ZSA9IDE7CiAJCX0KIAkJaWYgKGluZm8tPnNsYXZlKSB7Ci0JCQlrZnJlZShjZmdfbWVtKTsKLQkJCXJldHVybiBzZXR1cF9zZXJpYWwobGluaywgaW5mbywgcG9ydCwgY29uZmlnLkFzc2lnbmVkSVJRKTsKKwkJCXJldHVybiBzZXR1cF9zZXJpYWwobGluaywgaW5mbywgcG9ydCwKKwkJCQkJICAgIGxpbmstPmlycS5Bc3NpZ25lZElSUSk7CiAJCX0KIAl9CiAKLQkvKiBGaXJzdCBwYXNzOiBsb29rIGZvciBhIGNvbmZpZyBlbnRyeSB0aGF0IGxvb2tzIG5vcm1hbC4gKi8KLQl0dXBsZS0+VHVwbGVEYXRhID0gKGNpc2RhdGFfdCAqKSBidWY7Ci0JdHVwbGUtPlR1cGxlT2Zmc2V0ID0gMDsKLQl0dXBsZS0+VHVwbGVEYXRhTWF4ID0gMjU1OwotCXR1cGxlLT5BdHRyaWJ1dGVzID0gMDsKLQl0dXBsZS0+RGVzaXJlZFR1cGxlID0gQ0lTVFBMX0NGVEFCTEVfRU5UUlk7Ci0JLyogVHdvIHRyaWVzOiB3aXRob3V0IElPIGFsaWFzZXMsIHRoZW4gd2l0aCBhbGlhc2VzICovCi0JZm9yIChzID0gMDsgcyA8IDI7IHMrKykgewotCQlmb3IgKHRyeSA9IDA7IHRyeSA8IDI7IHRyeSsrKSB7Ci0JCQlpID0gZmlyc3RfdHVwbGUobGluaywgdHVwbGUsIHBhcnNlKTsKLQkJCXdoaWxlIChpICE9IENTX05PX01PUkVfSVRFTVMpIHsKLQkJCQlpZiAoaSAhPSBDU19TVUNDRVNTKQotCQkJCQlnb3RvIG5leHRfZW50cnk7Ci0JCQkJaWYgKGNmLT52cHAxLnByZXNlbnQgJiAoMSA8PCBDSVNUUExfUE9XRVJfVk5PTSkpCi0JCQkJCWxpbmstPmNvbmYuVnBwID0KLQkJCQkJICAgIGNmLT52cHAxLnBhcmFtW0NJU1RQTF9QT1dFUl9WTk9NXSAvIDEwMDAwOwotCQkJCWlmICgoY2YtPmlvLm53aW4gPiAwKSAmJiAoY2YtPmlvLndpblswXS5sZW4gPT0gc2l6ZV90YWJsZVtzXSkgJiYKLQkJCQkJICAgIChjZi0+aW8ud2luWzBdLmJhc2UgIT0gMCkpIHsKLQkJCQkJbGluay0+Y29uZi5Db25maWdJbmRleCA9IGNmLT5pbmRleDsKLQkJCQkJbGluay0+aW8uQmFzZVBvcnQxID0gY2YtPmlvLndpblswXS5iYXNlOwotCQkJCQlsaW5rLT5pby5JT0FkZHJMaW5lcyA9ICh0cnkgPT0gMCkgPwotCQkJCQkgICAgMTYgOiBjZi0+aW8uZmxhZ3MgJiBDSVNUUExfSU9fTElORVNfTUFTSzsKLQkJCQkJaSA9IHBjbWNpYV9yZXF1ZXN0X2lvKGxpbmssICZsaW5rLT5pbyk7Ci0JCQkJCWlmIChpID09IENTX1NVQ0NFU1MpCi0JCQkJCQlnb3RvIGZvdW5kX3BvcnQ7Ci0JCQkJfQotbmV4dF9lbnRyeToKLQkJCQlpID0gbmV4dF90dXBsZShsaW5rLCB0dXBsZSwgcGFyc2UpOwotCQkJfQotCQl9Ci0JfQorCS8qIEZpcnN0IHBhc3M6IGxvb2sgZm9yIGEgY29uZmlnIGVudHJ5IHRoYXQgbG9va3Mgbm9ybWFsLgorCSAqIFR3byB0cmllczogd2l0aG91dCBJTyBhbGlhc2VzLCB0aGVuIHdpdGggYWxpYXNlcyAqLworCWZvciAodHJ5ID0gMDsgdHJ5IDwgNDsgdHJ5KyspCisJCWlmICghcGNtY2lhX2xvb3BfY29uZmlnKGxpbmssIHNpbXBsZV9jb25maWdfY2hlY2ssICZ0cnkpKQorCQkJZ290byBmb3VuZF9wb3J0OworCiAJLyogU2Vjb25kIHBhc3M6IHRyeSB0byBmaW5kIGFuIGVudHJ5IHRoYXQgaXNuJ3QgcGlja3kgYWJvdXQKIAkgICBpdHMgYmFzZSBhZGRyZXNzLCB0aGVuIHRyeSB0byBncmFiIGFueSBzdGFuZGFyZCBzZXJpYWwgcG9ydAogCSAgIGFkZHJlc3MsIGFuZCBmaW5hbGx5IHRyeSB0byBnZXQgYW55IGZyZWUgcG9ydC4gKi8KLQlpID0gZmlyc3RfdHVwbGUobGluaywgdHVwbGUsIHBhcnNlKTsKLQl3aGlsZSAoaSAhPSBDU19OT19NT1JFX0lURU1TKSB7Ci0JCWlmICgoaSA9PSBDU19TVUNDRVNTKSAmJiAoY2YtPmlvLm53aW4gPiAwKSAmJgotCQkgICAgKChjZi0+aW8uZmxhZ3MgJiBDSVNUUExfSU9fTElORVNfTUFTSykgPD0gMykpIHsKLQkJCWxpbmstPmNvbmYuQ29uZmlnSW5kZXggPSBjZi0+aW5kZXg7Ci0JCQlmb3IgKGogPSAwOyBqIDwgNTsgaisrKSB7Ci0JCQkJbGluay0+aW8uQmFzZVBvcnQxID0gYmFzZVtqXTsKLQkJCQlsaW5rLT5pby5JT0FkZHJMaW5lcyA9IGJhc2Vbal0gPyAxNiA6IDM7Ci0JCQkJaSA9IHBjbWNpYV9yZXF1ZXN0X2lvKGxpbmssICZsaW5rLT5pbyk7Ci0JCQkJaWYgKGkgPT0gQ1NfU1VDQ0VTUykKLQkJCQkJZ290byBmb3VuZF9wb3J0OwotCQkJfQotCQl9Ci0JCWkgPSBuZXh0X3R1cGxlKGxpbmssIHR1cGxlLCBwYXJzZSk7Ci0JfQorCWlmICghcGNtY2lhX2xvb3BfY29uZmlnKGxpbmssIHNpbXBsZV9jb25maWdfY2hlY2tfbm90cGlja3ksIE5VTEwpKQorCQlnb3RvIGZvdW5kX3BvcnQ7CiAKLSAgICAgIGZvdW5kX3BvcnQ6Ci0JaWYgKGkgIT0gQ1NfU1VDQ0VTUykgewotCQlwcmludGsoS0VSTl9OT1RJQ0UKLQkJICAgICAgICJzZXJpYWxfY3M6IG5vIHVzYWJsZSBwb3J0IHJhbmdlIGZvdW5kLCBnaXZpbmcgdXBcbiIpOwotCQljc19lcnJvcihsaW5rLCBSZXF1ZXN0SU8sIGkpOwotCQlrZnJlZShjZmdfbWVtKTsKLQkJcmV0dXJuIC0xOwotCX0KKwlwcmludGsoS0VSTl9OT1RJQ0UKKwkgICAgICAgInNlcmlhbF9jczogbm8gdXNhYmxlIHBvcnQgcmFuZ2UgZm91bmQsIGdpdmluZyB1cFxuIik7CisJY3NfZXJyb3IobGluaywgUmVxdWVzdElPLCBpKTsKKwlyZXR1cm4gLTE7CiAKK2ZvdW5kX3BvcnQ6CiAJaSA9IHBjbWNpYV9yZXF1ZXN0X2lycShsaW5rLCAmbGluay0+aXJxKTsKLQlpZiAoaSAhPSBDU19TVUNDRVNTKSB7CisJaWYgKGkgIT0gMCkgewogCQljc19lcnJvcihsaW5rLCBSZXF1ZXN0SVJRLCBpKTsKIAkJbGluay0+aXJxLkFzc2lnbmVkSVJRID0gMDsKIAl9CkBAIC01NjksODggKzU0MSw3NiBAQAogCQlpbmZvLT5xdWlyay0+Y29uZmlnKGxpbmspOwogCiAJaSA9IHBjbWNpYV9yZXF1ZXN0X2NvbmZpZ3VyYXRpb24obGluaywgJmxpbmstPmNvbmYpOwotCWlmIChpICE9IENTX1NVQ0NFU1MpIHsKKwlpZiAoaSAhPSAwKSB7CiAJCWNzX2Vycm9yKGxpbmssIFJlcXVlc3RDb25maWd1cmF0aW9uLCBpKTsKLQkJa2ZyZWUoY2ZnX21lbSk7CiAJCXJldHVybiAtMTsKIAl9Ci0Ja2ZyZWUoY2ZnX21lbSk7CiAJcmV0dXJuIHNldHVwX3NlcmlhbChsaW5rLCBpbmZvLCBsaW5rLT5pby5CYXNlUG9ydDEsIGxpbmstPmlycS5Bc3NpZ25lZElSUSk7CiB9CiAKLXN0YXRpYyBpbnQgbXVsdGlfY29uZmlnKHN0cnVjdCBwY21jaWFfZGV2aWNlICogbGluaykKK3N0YXRpYyBpbnQgbXVsdGlfY29uZmlnX2NoZWNrKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldiwKKwkJCSAgICAgIGNpc3RwbF9jZnRhYmxlX2VudHJ5X3QgKmNmLAorCQkJICAgICAgY2lzdHBsX2NmdGFibGVfZW50cnlfdCAqZGZsdCwKKwkJCSAgICAgIHVuc2lnbmVkIGludCB2Y2MsCisJCQkgICAgICB2b2lkICpwcml2X2RhdGEpCit7CisJaW50ICpiYXNlMiA9IHByaXZfZGF0YTsKKworCS8qIFRoZSBxdWFkIHBvcnQgY2FyZHMgaGF2ZSBiYWQgQ0lTJ3MsIHNvIGp1c3QgbG9vayBmb3IgYQorCSAgIHdpbmRvdyBsYXJnZXIgdGhhbiA4IHBvcnRzIGFuZCBhc3N1bWUgaXQgd2lsbCBiZSByaWdodCAqLworCWlmICgoY2YtPmlvLm53aW4gPT0gMSkgJiYgKGNmLT5pby53aW5bMF0ubGVuID4gOCkpIHsKKwkJcF9kZXYtPmlvLkJhc2VQb3J0MSA9IGNmLT5pby53aW5bMF0uYmFzZTsKKwkJcF9kZXYtPmlvLklPQWRkckxpbmVzID0gY2YtPmlvLmZsYWdzICYgQ0lTVFBMX0lPX0xJTkVTX01BU0s7CisJCWlmICghcGNtY2lhX3JlcXVlc3RfaW8ocF9kZXYsICZwX2Rldi0+aW8pKSB7CisJCQkqYmFzZTIgPSBwX2Rldi0+aW8uQmFzZVBvcnQxICsgODsKKwkJCXJldHVybiAwOworCQl9CisJfQorCXJldHVybiAtRU5PREVWOworfQorCitzdGF0aWMgaW50IG11bHRpX2NvbmZpZ19jaGVja19ub3RwaWNreShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYsCisJCQkJICAgICAgIGNpc3RwbF9jZnRhYmxlX2VudHJ5X3QgKmNmLAorCQkJCSAgICAgICBjaXN0cGxfY2Z0YWJsZV9lbnRyeV90ICpkZmx0LAorCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgdmNjLAorCQkJCSAgICAgICB2b2lkICpwcml2X2RhdGEpCit7CisJaW50ICpiYXNlMiA9IHByaXZfZGF0YTsKKworCWlmIChjZi0+aW8ubndpbiA9PSAyKSB7CisJCXBfZGV2LT5pby5CYXNlUG9ydDEgPSBjZi0+aW8ud2luWzBdLmJhc2U7CisJCXBfZGV2LT5pby5CYXNlUG9ydDIgPSBjZi0+aW8ud2luWzFdLmJhc2U7CisJCXBfZGV2LT5pby5JT0FkZHJMaW5lcyA9IGNmLT5pby5mbGFncyAmIENJU1RQTF9JT19MSU5FU19NQVNLOworCQlpZiAoIXBjbWNpYV9yZXF1ZXN0X2lvKHBfZGV2LCAmcF9kZXYtPmlvKSkgeworCQkJKmJhc2UyID0gcF9kZXYtPmlvLkJhc2VQb3J0MjsKKwkJCXJldHVybiAwOworCQl9CisJfQorCXJldHVybiAtRU5PREVWOworfQorCitzdGF0aWMgaW50IG11bHRpX2NvbmZpZyhzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKIAlzdHJ1Y3Qgc2VyaWFsX2luZm8gKmluZm8gPSBsaW5rLT5wcml2OwotCXN0cnVjdCBzZXJpYWxfY2ZnX21lbSAqY2ZnX21lbTsKLQl0dXBsZV90ICp0dXBsZTsKLQl1X2NoYXIgKmJ1ZjsKLQljaXNwYXJzZV90ICpwYXJzZTsKLQljaXN0cGxfY2Z0YWJsZV9lbnRyeV90ICpjZjsKLQlpbnQgaSwgcmMsIGJhc2UyID0gMDsKLQotCWNmZ19tZW0gPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3Qgc2VyaWFsX2NmZ19tZW0pLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWNmZ19tZW0pCi0JCXJldHVybiAtMTsKLQl0dXBsZSA9ICZjZmdfbWVtLT50dXBsZTsKLQlwYXJzZSA9ICZjZmdfbWVtLT5wYXJzZTsKLQljZiA9ICZwYXJzZS0+Y2Z0YWJsZV9lbnRyeTsKLQlidWYgPSBjZmdfbWVtLT5idWY7Ci0KLQl0dXBsZS0+VHVwbGVEYXRhID0gKGNpc2RhdGFfdCAqKSBidWY7Ci0JdHVwbGUtPlR1cGxlT2Zmc2V0ID0gMDsKLQl0dXBsZS0+VHVwbGVEYXRhTWF4ID0gMjU1OwotCXR1cGxlLT5BdHRyaWJ1dGVzID0gMDsKLQl0dXBsZS0+RGVzaXJlZFR1cGxlID0gQ0lTVFBMX0NGVEFCTEVfRU5UUlk7CisJaW50IGksIGJhc2UyID0gMDsKIAogCS8qIEZpcnN0LCBsb29rIGZvciBhIGdlbmVyaWMgZnVsbC1zaXplZCB3aW5kb3cgKi8KIAlsaW5rLT5pby5OdW1Qb3J0czEgPSBpbmZvLT5tdWx0aSAqIDg7Ci0JaSA9IGZpcnN0X3R1cGxlKGxpbmssIHR1cGxlLCBwYXJzZSk7Ci0Jd2hpbGUgKGkgIT0gQ1NfTk9fTU9SRV9JVEVNUykgewotCQkvKiBUaGUgcXVhZCBwb3J0IGNhcmRzIGhhdmUgYmFkIENJUydzLCBzbyBqdXN0IGxvb2sgZm9yIGEKLQkJICAgd2luZG93IGxhcmdlciB0aGFuIDggcG9ydHMgYW5kIGFzc3VtZSBpdCB3aWxsIGJlIHJpZ2h0ICovCi0JCWlmICgoaSA9PSBDU19TVUNDRVNTKSAmJiAoY2YtPmlvLm53aW4gPT0gMSkgJiYKLQkJICAgIChjZi0+aW8ud2luWzBdLmxlbiA+IDgpKSB7Ci0JCQlsaW5rLT5jb25mLkNvbmZpZ0luZGV4ID0gY2YtPmluZGV4OwotCQkJbGluay0+aW8uQmFzZVBvcnQxID0gY2YtPmlvLndpblswXS5iYXNlOwotCQkJbGluay0+aW8uSU9BZGRyTGluZXMgPQotCQkJICAgIGNmLT5pby5mbGFncyAmIENJU1RQTF9JT19MSU5FU19NQVNLOwotCQkJaSA9IHBjbWNpYV9yZXF1ZXN0X2lvKGxpbmssICZsaW5rLT5pbyk7Ci0JCQliYXNlMiA9IGxpbmstPmlvLkJhc2VQb3J0MSArIDg7Ci0JCQlpZiAoaSA9PSBDU19TVUNDRVNTKQotCQkJCWJyZWFrOwotCQl9Ci0JCWkgPSBuZXh0X3R1cGxlKGxpbmssIHR1cGxlLCBwYXJzZSk7Ci0JfQotCi0JLyogSWYgdGhhdCBkaWRuJ3Qgd29yaywgbG9vayBmb3IgdHdvIHdpbmRvd3MgKi8KLQlpZiAoaSAhPSBDU19TVUNDRVNTKSB7CisJaWYgKHBjbWNpYV9sb29wX2NvbmZpZyhsaW5rLCBtdWx0aV9jb25maWdfY2hlY2ssICZiYXNlMikpIHsKKwkJLyogSWYgdGhhdCBkaWRuJ3Qgd29yaywgbG9vayBmb3IgdHdvIHdpbmRvd3MgKi8KIAkJbGluay0+aW8uTnVtUG9ydHMxID0gbGluay0+aW8uTnVtUG9ydHMyID0gODsKIAkJaW5mby0+bXVsdGkgPSAyOwotCQlpID0gZmlyc3RfdHVwbGUobGluaywgdHVwbGUsIHBhcnNlKTsKLQkJd2hpbGUgKGkgIT0gQ1NfTk9fTU9SRV9JVEVNUykgewotCQkJaWYgKChpID09IENTX1NVQ0NFU1MpICYmIChjZi0+aW8ubndpbiA9PSAyKSkgewotCQkJCWxpbmstPmNvbmYuQ29uZmlnSW5kZXggPSBjZi0+aW5kZXg7Ci0JCQkJbGluay0+aW8uQmFzZVBvcnQxID0gY2YtPmlvLndpblswXS5iYXNlOwotCQkJCWxpbmstPmlvLkJhc2VQb3J0MiA9IGNmLT5pby53aW5bMV0uYmFzZTsKLQkJCQlsaW5rLT5pby5JT0FkZHJMaW5lcyA9Ci0JCQkJICAgIGNmLT5pby5mbGFncyAmIENJU1RQTF9JT19MSU5FU19NQVNLOwotCQkJCWkgPSBwY21jaWFfcmVxdWVzdF9pbyhsaW5rLCAmbGluay0+aW8pOwotCQkJCWJhc2UyID0gbGluay0+aW8uQmFzZVBvcnQyOwotCQkJCWlmIChpID09IENTX1NVQ0NFU1MpCi0JCQkJCWJyZWFrOwotCQkJfQotCQkJaSA9IG5leHRfdHVwbGUobGluaywgdHVwbGUsIHBhcnNlKTsKKwkJaWYgKHBjbWNpYV9sb29wX2NvbmZpZyhsaW5rLCBtdWx0aV9jb25maWdfY2hlY2tfbm90cGlja3ksCisJCQkJICAgICAgICZiYXNlMikpIHsKKwkJCXByaW50ayhLRVJOX05PVElDRSAic2VyaWFsX2NzOiBubyB1c2FibGUgcG9ydCByYW5nZSIKKwkJCSAgICAgICAiZm91bmQsIGdpdmluZyB1cFxuIik7CisJCQlyZXR1cm4gLUVOT0RFVjsKIAkJfQogCX0KIAotCWlmIChpICE9IENTX1NVQ0NFU1MpIHsKLQkJY3NfZXJyb3IobGluaywgUmVxdWVzdElPLCBpKTsKLQkJcmMgPSAtMTsKLQkJZ290byBmcmVlX2NmZ19tZW07Ci0JfQotCiAJaSA9IHBjbWNpYV9yZXF1ZXN0X2lycShsaW5rLCAmbGluay0+aXJxKTsKLQlpZiAoaSAhPSBDU19TVUNDRVNTKSB7CisJaWYgKGkgIT0gMCkgeworCQkvKiBGSVhNRTogY29tbWVudCBkb2VzIG5vdCBmaXQsIGVycm9yIGhhbmRsaW5nIGRvZXMgbm90IGZpdCAqLwogCQlwcmludGsoS0VSTl9OT1RJQ0UKIAkJICAgICAgICJzZXJpYWxfY3M6IG5vIHVzYWJsZSBwb3J0IHJhbmdlIGZvdW5kLCBnaXZpbmcgdXBcbiIpOwogCQljc19lcnJvcihsaW5rLCBSZXF1ZXN0SVJRLCBpKTsKQEAgLTY2NCwxMCArNjI0LDkgQEAKIAkJaW5mby0+cXVpcmstPmNvbmZpZyhsaW5rKTsKIAogCWkgPSBwY21jaWFfcmVxdWVzdF9jb25maWd1cmF0aW9uKGxpbmssICZsaW5rLT5jb25mKTsKLQlpZiAoaSAhPSBDU19TVUNDRVNTKSB7CisJaWYgKGkgIT0gMCkgewogCQljc19lcnJvcihsaW5rLCBSZXF1ZXN0Q29uZmlndXJhdGlvbiwgaSk7Ci0JCXJjID0gLTE7Ci0JCWdvdG8gZnJlZV9jZmdfbWVtOworCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKIAkvKiBUaGUgT3hmb3JkIFNlbWljb25kdWN0b3IgT1hDRjk1MCBjYXJkcyBhcmUgaW4gZmFjdCBzaW5nbGUtcG9ydDoKQEAgLTY3OCw3ICs2MzcsOCBAQAogCQkJCWluZm8tPnByb2RpZCA9PSBQUk9ESURfUE9TU0lPX0dDQykpIHsKIAkJaW50IGVycjsKIAotCQlpZiAoY2YtPmluZGV4ID09IDEgfHwgY2YtPmluZGV4ID09IDMpIHsKKwkJaWYgKGxpbmstPmNvbmYuQ29uZmlnSW5kZXggPT0gMSB8fAorCQkgICAgbGluay0+Y29uZi5Db25maWdJbmRleCA9PSAzKSB7CiAJCQllcnIgPSBzZXR1cF9zZXJpYWwobGluaywgaW5mbywgYmFzZTIsCiAJCQkJCWxpbmstPmlycS5Bc3NpZ25lZElSUSk7CiAJCQliYXNlMiA9IGxpbmstPmlvLkJhc2VQb3J0MTsKQEAgLTY5NSwxOCArNjU1LDE0IEBACiAJCWlmIChpbmZvLT5xdWlyayAmJiBpbmZvLT5xdWlyay0+d2FrZXVwKQogCQkJaW5mby0+cXVpcmstPndha2V1cChsaW5rKTsKIAotCQlyYyA9IDA7Ci0JCWdvdG8gZnJlZV9jZmdfbWVtOworCQlyZXR1cm4gMDsKIAl9CiAKIAlzZXR1cF9zZXJpYWwobGluaywgaW5mbywgbGluay0+aW8uQmFzZVBvcnQxLCBsaW5rLT5pcnEuQXNzaWduZWRJUlEpOwogCWZvciAoaSA9IDA7IGkgPCBpbmZvLT5tdWx0aSAtIDE7IGkrKykKIAkJc2V0dXBfc2VyaWFsKGxpbmssIGluZm8sIGJhc2UyICsgKDggKiBpKSwKIAkJCQlsaW5rLT5pcnEuQXNzaWduZWRJUlEpOwotCXJjID0gMDsKLWZyZWVfY2ZnX21lbToKLQlrZnJlZShjZmdfbWVtKTsKLQlyZXR1cm4gcmM7CisJcmV0dXJuIDA7CiB9CiAKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpAQCAtNzQ2LDcgKzcwMiw3IEBACiAJLyogSXMgdGhpcyBhIGNvbXBsaWFudCBtdWx0aWZ1bmN0aW9uIGNhcmQ/ICovCiAJdHVwbGUtPkRlc2lyZWRUdXBsZSA9IENJU1RQTF9MT05HTElOS19NRkM7CiAJdHVwbGUtPkF0dHJpYnV0ZXMgPSBUVVBMRV9SRVRVUk5fQ09NTU9OIHwgVFVQTEVfUkVUVVJOX0xJTks7Ci0JaW5mby0+bXVsdGkgPSAoZmlyc3RfdHVwbGUobGluaywgdHVwbGUsIHBhcnNlKSA9PSBDU19TVUNDRVNTKTsKKwlpbmZvLT5tdWx0aSA9IChmaXJzdF90dXBsZShsaW5rLCB0dXBsZSwgcGFyc2UpID09IDApOwogCiAJLyogSXMgdGhpcyBhIG11bHRpcG9ydCBjYXJkPyAqLwogCXR1cGxlLT5EZXNpcmVkVHVwbGUgPSBDSVNUUExfTUFORklEOwpAQCAtNzcwLDcgKzcyNiw3IEBACiAJICAgICgobGluay0+ZnVuY19pZCA9PSBDSVNUUExfRlVOQ0lEX01VTFRJKSB8fAogCSAgICAgKGxpbmstPmZ1bmNfaWQgPT0gQ0lTVFBMX0ZVTkNJRF9TRVJJQUwpKSkgewogCQl0dXBsZS0+RGVzaXJlZFR1cGxlID0gQ0lTVFBMX0NGVEFCTEVfRU5UUlk7Ci0JCWlmIChmaXJzdF90dXBsZShsaW5rLCB0dXBsZSwgcGFyc2UpID09IENTX1NVQ0NFU1MpIHsKKwkJaWYgKGZpcnN0X3R1cGxlKGxpbmssIHR1cGxlLCBwYXJzZSkgPT0gMCkgewogCQkJaWYgKChjZi0+aW8ubndpbiA9PSAxKSAmJiAoY2YtPmlvLndpblswXS5sZW4gJSA4ID09IDApKQogCQkJCWluZm8tPm11bHRpID0gY2YtPmlvLndpblswXS5sZW4gPj4gMzsKIAkJCWlmICgoY2YtPmlvLm53aW4gPT0gMikgJiYgKGNmLT5pby53aW5bMF0ubGVuID09IDgpICYmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9zZXJpYWxfbGg3YTQweC5jIGIvZHJpdmVycy9zZXJpYWwvc2VyaWFsX2xoN2E0MHguYwppbmRleCBjYjQ5YTVhLi42MWRjOGIzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9zZXJpYWxfbGg3YTQweC5jCisrKyBiL2RyaXZlcnMvc2VyaWFsL3NlcmlhbF9saDdhNDB4LmMKQEAgLTQ2MCw3ICs0NjAsNyBAQAogCiAJaWYgKHNlci0+dHlwZSAhPSBQT1JUX1VOS05PV04gJiYgc2VyLT50eXBlICE9IFBPUlRfTEg3QTQwWCkKIAkJcmV0ID0gLUVJTlZBTDsKLQlpZiAoc2VyLT5pcnEgPCAwIHx8IHNlci0+aXJxID49IE5SX0lSUVMpCisJaWYgKHNlci0+aXJxIDwgMCB8fCBzZXItPmlycSA+PSBucl9pcnFzKQogCQlyZXQgPSAtRUlOVkFMOwogCWlmIChzZXItPmJhdWRfYmFzZSA8IDk2MDApIC8qICoqKiBGSVhNRTogaXMgdGhpcyB0cnVlPyAqLwogCQlyZXQgPSAtRUlOVkFMOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvc2VyaWFsX3R4eDkuYyBiL2RyaXZlcnMvc2VyaWFsL3NlcmlhbF90eHg5LmMKaW5kZXggOGZjYjRjNS4uNzMxM2MyZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvc2VyaWFsX3R4eDkuYworKysgYi9kcml2ZXJzL3NlcmlhbC9zZXJpYWxfdHh4OS5jCkBAIC0xMDM5LDcgKzEwMzksNyBAQAogCQlyZXQgPSBzZXJpYWxfdHh4OV9yZWdpc3Rlcl9wb3J0KCZwb3J0KTsKIAkJaWYgKHJldCA8IDApIHsKIAkJCWRldl9lcnIoJmRldi0+ZGV2LCAidW5hYmxlIHRvIHJlZ2lzdGVyIHBvcnQgYXQgaW5kZXggJWQgIgotCQkJCSIoSU8leCBNRU0lbGx4IElSUSVkKTogJWRcbiIsIGksCisJCQkJIihJTyVseCBNRU0lbGx4IElSUSVkKTogJWRcbiIsIGksCiAJCQkJcC0+aW9iYXNlLCAodW5zaWduZWQgbG9uZyBsb25nKXAtPm1hcGJhc2UsCiAJCQkJcC0+aXJxLCByZXQpOwogCQl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9zaC1zY2kuYyBiL2RyaXZlcnMvc2VyaWFsL3NoLXNjaS5jCmluZGV4IDNkZjJhYWUuLmYwNjU4ZDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL3NoLXNjaS5jCisrKyBiL2RyaXZlcnMvc2VyaWFsL3NoLXNjaS5jCkBAIC0zLDcgKzMsNyBAQAogICoKICAqIFN1cGVySCBvbi1jaGlwIHNlcmlhbCBtb2R1bGUgc3VwcG9ydC4gIChTQ0kgd2l0aCBubyBGSUZPIC8gd2l0aCBGSUZPKQogICoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDIgLSAyMDA2ICBQYXVsIE11bmR0CisgKiAgQ29weXJpZ2h0IChDKSAyMDAyIC0gMjAwOCAgUGF1bCBNdW5kdAogICogIE1vZGlmaWVkIHRvIHN1cHBvcnQgU0g3NzIwIFNDSUYuIE1hcmt1cyBCcnVubmVyLCBNYXJrIEpvbmFzIChKdWwgMjAwNykuCiAgKgogICogYmFzZWQgb2ZmIG9mIHRoZSBvbGQgZHJpdmVycy9jaGFyL3NoLXNjaS5jIGJ5OgpAQCAtNDYsNiArNDYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2NwdWZyZXEuaD4KICNpbmNsdWRlIDxsaW51eC9jbGsuaD4KICNpbmNsdWRlIDxsaW51eC9jdHlwZS5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgogCiAjaWZkZWYgQ09ORklHX1NVUEVSSAogI2luY2x1ZGUgPGFzbS9jbG9jay5oPgpAQCAtNzgsNyArNzksNyBAQAogCXN0cnVjdCB0aW1lcl9saXN0CWJyZWFrX3RpbWVyOwogCWludAkJCWJyZWFrX2ZsYWc7CiAKLSNpZmRlZiBDT05GSUdfU1VQRVJICisjaWZkZWYgQ09ORklHX0hBVkVfQ0xLCiAJLyogUG9ydCBjbG9jayAqLwogCXN0cnVjdCBjbGsJCSpjbGs7CiAjZW5kaWYKQEAgLTgzMSw3ICs4MzIsNyBAQAogCXJldHVybiBJUlFfSEFORExFRDsKIH0KIAotI2lmZGVmIENPTkZJR19DUFVfRlJFUQorI2lmIGRlZmluZWQoQ09ORklHX0NQVV9GUkVRKSAmJiBkZWZpbmVkKENPTkZJR19IQVZFX0NMSykKIC8qCiAgKiBIZXJlIHdlIGRlZmluZSBhIHRyYW5zaXN0aW9uIG5vdGlmaWVyIHNvIHRoYXQgd2UgY2FuIHVwZGF0ZSBhbGwgb2Ygb3VyCiAgKiBwb3J0cycgYmF1ZCByYXRlIHdoZW4gdGhlIHBlcmlwaGVyYWwgY2xvY2sgY2hhbmdlcy4KQEAgLTg2MCw3ICs4NjEsNyBAQAogCQkJICogQ2xlYW4gdGhpcyB1cCBsYXRlci4uCiAJCQkgKi8KIAkJCWNsayA9IGNsa19nZXQoTlVMTCwgIm1vZHVsZV9jbGsiKTsKLQkJCXBvcnQtPnVhcnRjbGsgPSBjbGtfZ2V0X3JhdGUoY2xrKSAqIDE2OworCQkJcG9ydC0+dWFydGNsayA9IGNsa19nZXRfcmF0ZShjbGspOwogCQkJY2xrX3B1dChjbGspOwogCQl9CiAKQEAgLTg3Myw3ICs4NzQsNyBAQAogfQogCiBzdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIHNjaV9uYiA9IHsgJnNjaV9ub3RpZmllciwgTlVMTCwgMCB9OwotI2VuZGlmIC8qIENPTkZJR19DUFVfRlJFUSAqLworI2VuZGlmIC8qIENPTkZJR19DUFVfRlJFUSAmJiBDT05GSUdfSEFWRV9DTEsgKi8KIAogc3RhdGljIGludCBzY2lfcmVxdWVzdF9pcnEoc3RydWN0IHNjaV9wb3J0ICpwb3J0KQogewpAQCAtMTAwOCw3ICsxMDA5LDcgQEAKIAlpZiAocy0+ZW5hYmxlKQogCQlzLT5lbmFibGUocG9ydCk7CiAKLSNpZiBkZWZpbmVkKENPTkZJR19TVVBFUkgpICYmICFkZWZpbmVkKENPTkZJR19TVVBFUkg2NCkKKyNpZmRlZiBDT05GSUdfSEFWRV9DTEsKIAlzLT5jbGsgPSBjbGtfZ2V0KE5VTEwsICJtb2R1bGVfY2xrIik7CiAjZW5kaWYKIApAQCAtMTAzMCw3ICsxMDMxLDcgQEAKIAlpZiAocy0+ZGlzYWJsZSkKIAkJcy0+ZGlzYWJsZShwb3J0KTsKIAotI2lmIGRlZmluZWQoQ09ORklHX1NVUEVSSCkgJiYgIWRlZmluZWQoQ09ORklHX1NVUEVSSDY0KQorI2lmZGVmIENPTkZJR19IQVZFX0NMSwogCWNsa19wdXQocy0+Y2xrKTsKIAlzLT5jbGsgPSBOVUxMOwogI2VuZGlmCkBAIC0xMDQxLDI0ICsxMDQyLDExIEBACiB7CiAJc3RydWN0IHNjaV9wb3J0ICpzID0gJnNjaV9wb3J0c1twb3J0LT5saW5lXTsKIAl1bnNpZ25lZCBpbnQgc3RhdHVzLCBiYXVkLCBzbXJfdmFsOwotCWludCB0OworCWludCB0ID0gLTE7CiAKIAliYXVkID0gdWFydF9nZXRfYmF1ZF9yYXRlKHBvcnQsIHRlcm1pb3MsIG9sZCwgMCwgcG9ydC0+dWFydGNsay8xNik7Ci0KLQlzd2l0Y2ggKGJhdWQpIHsKLQkJY2FzZSAwOgotCQkJdCA9IC0xOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCXsKLSNpZiBkZWZpbmVkKENPTkZJR19TVVBFUkgpICYmICFkZWZpbmVkKENPTkZJR19TVVBFUkg2NCkKLQkJCXQgPSBTQ0JSUl9WQUxVRShiYXVkLCBjbGtfZ2V0X3JhdGUocy0+Y2xrKSk7Ci0jZWxzZQotCQkJdCA9IFNDQlJSX1ZBTFVFKGJhdWQpOwotI2VuZGlmCi0JCQlicmVhazsKLQkJfQotCX0KKwlpZiAobGlrZWx5KGJhdWQpKQorCQl0ID0gU0NCUlJfVkFMVUUoYmF1ZCwgcG9ydC0+dWFydGNsayk7CiAKIAlkbyB7CiAJCXN0YXR1cyA9IHNjaV9pbihwb3J0LCBTQ3hTUik7CkBAIC0xMTEzLDcgKzExMDEsNyBAQAogCQljYXNlIFBPUlRfSVJEQTogcmV0dXJuICJpcmRhIjsKIAl9CiAKLQlyZXR1cm4gMDsKKwlyZXR1cm4gTlVMTDsKIH0KIAogc3RhdGljIHZvaWQgc2NpX3JlbGVhc2VfcG9ydChzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQpAQCAtMTE0NSwxOSArMTEzMywyMyBAQAogCQlicmVhazsKIAl9CiAKLSNpZiBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDVfMTAxKSB8fCBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDVfMTAzKQotCWlmIChwb3J0LT5tYXBiYXNlID09IDApCisJaWYgKHBvcnQtPmZsYWdzICYgVVBGX0lPUkVNQVAgJiYgIXBvcnQtPm1lbWJhc2UpIHsKKyNpZiBkZWZpbmVkKENPTkZJR19TVVBFUkg2NCkKIAkJcG9ydC0+bWFwYmFzZSA9IG9uY2hpcF9yZW1hcChTQ0lGX0FERFJfU0g1LCAxMDI0LCAiU0NJRiIpOwotCi0JcG9ydC0+bWVtYmFzZSA9ICh2b2lkIF9faW9tZW0gKilwb3J0LT5tYXBiYXNlOworCQlwb3J0LT5tZW1iYXNlID0gKHZvaWQgX19pb21lbSAqKXBvcnQtPm1hcGJhc2U7CisjZWxzZQorCQlwb3J0LT5tZW1iYXNlID0gaW9yZW1hcF9ub2NhY2hlKHBvcnQtPm1hcGJhc2UsIDB4NDApOwogI2VuZGlmCisKKwkJcHJpbnRrKEtFUk5fRVJSICJzY2k6IGNhbid0IHJlbWFwIHBvcnQjJWRcbiIsIHBvcnQtPmxpbmUpOworCX0KIH0KIAogc3RhdGljIGludCBzY2lfdmVyaWZ5X3BvcnQoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCwgc3RydWN0IHNlcmlhbF9zdHJ1Y3QgKnNlcikKIHsKIAlzdHJ1Y3Qgc2NpX3BvcnQgKnMgPSAmc2NpX3BvcnRzW3BvcnQtPmxpbmVdOwogCi0JaWYgKHNlci0+aXJxICE9IHMtPmlycXNbU0NJeF9UWElfSVJRXSB8fCBzZXItPmlycSA+IE5SX0lSUVMpCisJaWYgKHNlci0+aXJxICE9IHMtPmlycXNbU0NJeF9UWElfSVJRXSB8fCBzZXItPmlycSA+IG5yX2lycXMpCiAJCXJldHVybiAtRUlOVkFMOwogCWlmIChzZXItPmJhdWRfYmFzZSA8IDI0MDApCiAJCS8qIE5vIHBhcGVyIHRhcGUgcmVhZGVyIGZvciBNaXRjaC4uICovCkBAIC0xMjA3LDE3ICsxMTk5LDE3IEBACiAJCXNjaV9wb3J0c1tpXS5kaXNhYmxlCT0gaDgzMDBfc2NpX2Rpc2FibGU7CiAjZW5kaWYKIAkJc2NpX3BvcnRzW2ldLnBvcnQudWFydGNsayA9IENPTkZJR19DUFVfQ0xPQ0s7Ci0jZWxpZiBkZWZpbmVkKENPTkZJR19TVVBFUkg2NCkKLQkJc2NpX3BvcnRzW2ldLnBvcnQudWFydGNsayA9IGN1cnJlbnRfY3B1X2RhdGEubW9kdWxlX2Nsb2NrICogMTY7Ci0jZWxzZQorI2VsaWYgZGVmaW5lZChDT05GSUdfSEFWRV9DTEspCiAJCS8qCiAJCSAqIFhYWDogV2Ugc2hvdWxkIHVzZSBhIHByb3BlciBTQ0kvU0NJRiBjbG9jawogCQkgKi8KIAkJewogCQkJc3RydWN0IGNsayAqY2xrID0gY2xrX2dldChOVUxMLCAibW9kdWxlX2NsayIpOwotCQkJc2NpX3BvcnRzW2ldLnBvcnQudWFydGNsayA9IGNsa19nZXRfcmF0ZShjbGspICogMTY7CisJCQlzY2lfcG9ydHNbaV0ucG9ydC51YXJ0Y2xrID0gY2xrX2dldF9yYXRlKGNsayk7CiAJCQljbGtfcHV0KGNsayk7CiAJCX0KKyNlbHNlCisjZXJyb3IgIk5lZWQgYSB2YWxpZCB1YXJ0Y2xrIgogI2VuZGlmCiAKIAkJc2NpX3BvcnRzW2ldLmJyZWFrX3RpbWVyLmRhdGEgPSAodW5zaWduZWQgbG9uZykmc2NpX3BvcnRzW2ldOwpAQCAtMTI4NSw3ICsxMjc3LDcgQEAKIAogCXBvcnQtPnR5cGUgPSBzZXJpYWxfY29uc29sZV9wb3J0LT50eXBlOwogCi0jaWYgZGVmaW5lZChDT05GSUdfU1VQRVJIKSAmJiAhZGVmaW5lZChDT05GSUdfU1VQRVJINjQpCisjaWZkZWYgQ09ORklHX0hBVkVfQ0xLCiAJaWYgKCFzZXJpYWxfY29uc29sZV9wb3J0LT5jbGspCiAJCXNlcmlhbF9jb25zb2xlX3BvcnQtPmNsayA9IGNsa19nZXQoTlVMTCwgIm1vZHVsZV9jbGsiKTsKICNlbmRpZgpAQCAtMTQzNiw3ICsxNDI4LDcgQEAKIHN0YXRpYyBpbnQgX19kZXZpbml0IHNjaV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IHBsYXRfc2NpX3BvcnQgKnAgPSBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOwotCWludCBpOworCWludCBpLCByZXQgPSAtRUlOVkFMOwogCiAJZm9yIChpID0gMDsgcCAmJiBwLT5mbGFncyAhPSAwOyBwKyssIGkrKykgewogCQlzdHJ1Y3Qgc2NpX3BvcnQgKnNjaXBvcnQgPSAmc2NpX3BvcnRzW2ldOwpAQCAtMTQ1MywxMiArMTQ0NSwyMiBAQAogCiAJCXNjaXBvcnQtPnBvcnQubWFwYmFzZQk9IHAtPm1hcGJhc2U7CiAKLQkJLyoKLQkJICogRm9yIHRoZSBzaW1wbGUgKGFuZCBtYWpvcml0eSBvZikgY2FzZXMgd2hlcmUgd2UgZG9uJ3QgbmVlZAotCQkgKiB0byBkbyBhbnkgcmVtYXBwaW5nLCBqdXN0IGNhc3QgdGhlIGNvb2tpZSBkaXJlY3RseS4KLQkJICovCi0JCWlmIChwLT5tYXBiYXNlICYmICFwLT5tZW1iYXNlICYmICEocC0+ZmxhZ3MgJiBVUEZfSU9SRU1BUCkpCi0JCQlwLT5tZW1iYXNlID0gKHZvaWQgX19pb21lbSAqKXAtPm1hcGJhc2U7CisJCWlmIChwLT5tYXBiYXNlICYmICFwLT5tZW1iYXNlKSB7CisJCQlpZiAocC0+ZmxhZ3MgJiBVUEZfSU9SRU1BUCkgeworCQkJCXAtPm1lbWJhc2UgPSBpb3JlbWFwX25vY2FjaGUocC0+bWFwYmFzZSwgMHg0MCk7CisJCQkJaWYgKElTX0VSUihwLT5tZW1iYXNlKSkgeworCQkJCQlyZXQgPSBQVFJfRVJSKHAtPm1lbWJhc2UpOworCQkJCQlnb3RvIGVycl91bnJlZzsKKwkJCQl9CisJCQl9IGVsc2UgeworCQkJCS8qCisJCQkJICogRm9yIHRoZSBzaW1wbGUgKGFuZCBtYWpvcml0eSBvZikgY2FzZXMKKwkJCQkgKiB3aGVyZSB3ZSBkb24ndCBuZWVkIHRvIGRvIGFueSByZW1hcHBpbmcsCisJCQkJICoganVzdCBjYXN0IHRoZSBjb29raWUgZGlyZWN0bHkuCisJCQkJICovCisJCQkJcC0+bWVtYmFzZSA9ICh2b2lkIF9faW9tZW0gKilwLT5tYXBiYXNlOworCQkJfQorCQl9CiAKIAkJc2NpcG9ydC0+cG9ydC5tZW1iYXNlCT0gcC0+bWVtYmFzZTsKIApAQCAtMTQ3OSw3ICsxNDgxLDcgQEAKIAlrZ2RiX3B1dGNoYXIJPSBrZ2RiX3NjaV9wdXRjaGFyOwogI2VuZGlmCiAKLSNpZmRlZiBDT05GSUdfQ1BVX0ZSRVEKKyNpZiBkZWZpbmVkKENPTkZJR19DUFVfRlJFUSkgJiYgZGVmaW5lZChDT05GSUdfSEFWRV9DTEspCiAJY3B1ZnJlcV9yZWdpc3Rlcl9ub3RpZmllcigmc2NpX25iLCBDUFVGUkVRX1RSQU5TSVRJT05fTk9USUZJRVIpOwogCWRldl9pbmZvKCZkZXYtPmRldiwgIkNQVSBmcmVxdWVuY3kgbm90aWZpZXIgcmVnaXN0ZXJlZFxuIik7CiAjZW5kaWYKQEAgLTE0ODksNiArMTQ5MSwxMiBAQAogI2VuZGlmCiAKIAlyZXR1cm4gMDsKKworZXJyX3VucmVnOgorCWZvciAoaSA9IGkgLSAxOyBpID49IDA7IGktLSkKKwkJdWFydF9yZW1vdmVfb25lX3BvcnQoJnNjaV91YXJ0X2RyaXZlciwgJnNjaV9wb3J0c1tpXS5wb3J0KTsKKworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBpbnQgX19kZXZleGl0IHNjaV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvc2gtc2NpLmggYi9kcml2ZXJzL3NlcmlhbC9zaC1zY2kuaAppbmRleCA4YTA3NDllLi43Y2QyOGIyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9zaC1zY2kuaAorKysgYi9kcml2ZXJzL3NlcmlhbC9zaC1zY2kuaApAQCAtMzIwLDE4ICszMjAsMTYgQEAKICNkZWZpbmUgU0NJX0VWRU5UX1dSSVRFX1dBS0VVUAkwCiAKICNkZWZpbmUgU0NJX0lOKHNpemUsIG9mZnNldCkJCQkJCVwKLSAgdW5zaWduZWQgaW50IGFkZHIgPSBwb3J0LT5tYXBiYXNlICsgKG9mZnNldCk7CQkJXAogICBpZiAoKHNpemUpID09IDgpIHsJCQkJCQlcCi0gICAgcmV0dXJuIGN0cmxfaW5iKGFkZHIpOwkJCQkJXAorICAgIHJldHVybiBpb3JlYWQ4KHBvcnQtPm1lbWJhc2UgKyAob2Zmc2V0KSk7CQkJXAogICB9IGVsc2UgewkJCQkJCQlcCi0gICAgcmV0dXJuIGN0cmxfaW53KGFkZHIpOwkJCQkJXAorICAgIHJldHVybiBpb3JlYWQxNihwb3J0LT5tZW1iYXNlICsgKG9mZnNldCkpOwkJCVwKICAgfQogI2RlZmluZSBTQ0lfT1VUKHNpemUsIG9mZnNldCwgdmFsdWUpCQkJCVwKLSAgdW5zaWduZWQgaW50IGFkZHIgPSBwb3J0LT5tYXBiYXNlICsgKG9mZnNldCk7CQkJXAogICBpZiAoKHNpemUpID09IDgpIHsJCQkJCQlcCi0gICAgY3RybF9vdXRiKHZhbHVlLCBhZGRyKTsJCQkJCVwKKyAgICBpb3dyaXRlOCh2YWx1ZSwgcG9ydC0+bWVtYmFzZSArIChvZmZzZXQpKTsJCQlcCiAgIH0gZWxzZSBpZiAoKHNpemUpID09IDE2KSB7CQkJCQlcCi0gICAgY3RybF9vdXR3KHZhbHVlLCBhZGRyKTsJCQkJCVwKKyAgICBpb3dyaXRlMTYodmFsdWUsIHBvcnQtPm1lbWJhc2UgKyAob2Zmc2V0KSk7CQkJXAogICB9CiAKICNkZWZpbmUgQ1BVX1NDSXhfRk5TKG5hbWUsIHNjaV9vZmZzZXQsIHNjaV9zaXplLCBzY2lmX29mZnNldCwgc2NpZl9zaXplKVwKQEAgLTc5MSwxMSArNzg5LDE2IEBACiAgICAgICBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjEpCiAjZGVmaW5lIFNDQlJSX1ZBTFVFKGJwcywgY2xrKSAoKChjbGsqMikrMTYqYnBzKS8oMzIqYnBzKS0xKQogI2VsaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIzKQotI2RlZmluZSBTQ0JSUl9WQUxVRShicHMsIGNsaykgKCgoY2xrKjIpKzE2KmJwcykvKDE2KmJwcyktMSkKK3N0YXRpYyBpbmxpbmUgaW50IHNjYnJyX2NhbGMoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCwgaW50IGJwcywgaW50IGNsaykKK3sKKwlpZiAocG9ydC0+dHlwZSA9PSBQT1JUX1NDSUYpCisJCXJldHVybiAoY2xrKzE2KmJwcykvKDMyKmJwcyktMTsKKwllbHNlCisJCXJldHVybiAoKGNsayoyKSsxNipicHMpLygxNipicHMpLTE7Cit9CisjZGVmaW5lIFNDQlJSX1ZBTFVFKGJwcywgY2xrKSBzY2Jycl9jYWxjKHBvcnQsIGJwcywgY2xrKQogI2VsaWYgZGVmaW5lZChfX0g4MzAwSF9fKSB8fCBkZWZpbmVkKF9fSDgzMDBTX18pCi0jZGVmaW5lIFNDQlJSX1ZBTFVFKGJwcykgKCgoQ09ORklHX0NQVV9DTE9DSyoxMDAwLzMyKS9icHMpLTEpCi0jZWxpZiBkZWZpbmVkKENPTkZJR19TVVBFUkg2NCkKLSNkZWZpbmUgU0NCUlJfVkFMVUUoYnBzKSAoKGN1cnJlbnRfY3B1X2RhdGEubW9kdWxlX2Nsb2NrKzE2KmJwcykvKDMyKmJwcyktMSkKKyNkZWZpbmUgU0NCUlJfVkFMVUUoYnBzLCBjbGspICgoKGNsayoxMDAwLzMyKS9icHMpLTEpCiAjZWxzZSAvKiBHZW5lcmljIFNIICovCiAjZGVmaW5lIFNDQlJSX1ZBTFVFKGJwcywgY2xrKSAoKGNsaysxNipicHMpLygzMipicHMpLTEpCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL3NuX2NvbnNvbGUuYyBiL2RyaXZlcnMvc2VyaWFsL3NuX2NvbnNvbGUuYwppbmRleCBiNzNlM2MwLi5kNTI3NmMwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9zbl9jb25zb2xlLmMKKysrIGIvZHJpdmVycy9zZXJpYWwvc25fY29uc29sZS5jCkBAIC02MSw3ICs2MSw3IEBACiAjZGVmaW5lIFNOX1NBTF9CVUZGRVJfU0laRSAoNjQgKiAoMSA8PCAxMCkpCiAKICNkZWZpbmUgU05fU0FMX1VBUlRfRklGT19ERVBUSCAxNgotI2RlZmluZSBTTl9TQUxfVUFSVF9GSUZPX1NQRUVEX0NQUyA5NjAwLzEwCisjZGVmaW5lIFNOX1NBTF9VQVJUX0ZJRk9fU1BFRURfQ1BTICg5NjAwLzEwKQogCiAvKiBzbl90cmFuc21pdF9jaGFycygpIGNhbGxpbmcgYXJncyAqLwogI2RlZmluZSBUUkFOU01JVF9CVUZGRVJFRAkwCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC91Y2NfdWFydC5jIGIvZHJpdmVycy9zZXJpYWwvdWNjX3VhcnQuYwppbmRleCA1YzVkMThkLi4zMTVhOTMzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC91Y2NfdWFydC5jCisrKyBiL2RyaXZlcnMvc2VyaWFsL3VjY191YXJ0LmMKQEAgLTEwMDksNyArMTAwOSw3IEBACiAJcnhfc2l6ZSA9IEwxX0NBQ0hFX0FMSUdOKHFlX3BvcnQtPnJ4X25yZmlmb3MgKiBxZV9wb3J0LT5yeF9maWZvc2l6ZSk7CiAJdHhfc2l6ZSA9IEwxX0NBQ0hFX0FMSUdOKHFlX3BvcnQtPnR4X25yZmlmb3MgKiBxZV9wb3J0LT50eF9maWZvc2l6ZSk7CiAKLQliZF92aXJ0ID0gZG1hX2FsbG9jX2NvaGVyZW50KE5VTEwsIHJ4X3NpemUgKyB0eF9zaXplLCAmYmRfZG1hX2FkZHIsCisJYmRfdmlydCA9IGRtYV9hbGxvY19jb2hlcmVudChwb3J0LT5kZXYsIHJ4X3NpemUgKyB0eF9zaXplLCAmYmRfZG1hX2FkZHIsCiAJCUdGUF9LRVJORUwpOwogCWlmICghYmRfdmlydCkgewogCQlkZXZfZXJyKHBvcnQtPmRldiwgImNvdWxkIG5vdCBhbGxvY2F0ZSBidWZmZXIgZGVzY3JpcHRvcnNcbiIpOwpAQCAtMTA1MSw3ICsxMDUxLDcgQEAKIAkJY29udGFpbmVyX29mKHBvcnQsIHN0cnVjdCB1YXJ0X3FlX3BvcnQsIHBvcnQpOwogCXN0cnVjdCB1Y2Nfc2xvd19wcml2YXRlICp1Y2NzID0gcWVfcG9ydC0+dXNfcHJpdmF0ZTsKIAotCWRtYV9mcmVlX2NvaGVyZW50KE5VTEwsIHFlX3BvcnQtPmJkX3NpemUsIHFlX3BvcnQtPmJkX3ZpcnQsCisJZG1hX2ZyZWVfY29oZXJlbnQocG9ydC0+ZGV2LCBxZV9wb3J0LT5iZF9zaXplLCBxZV9wb3J0LT5iZF92aXJ0LAogCQkJICBxZV9wb3J0LT5iZF9kbWFfYWRkcik7CiAKIAl1Y2Nfc2xvd19mcmVlKHVjY3MpOwpAQCAtMTA2Niw3ICsxMDY2LDcgQEAKIAlpZiAoc2VyLT50eXBlICE9IFBPUlRfVU5LTk9XTiAmJiBzZXItPnR5cGUgIT0gUE9SVF9DUE0pCiAJCXJldHVybiAtRUlOVkFMOwogCi0JaWYgKHNlci0+aXJxIDwgMCB8fCBzZXItPmlycSA+PSBOUl9JUlFTKQorCWlmIChzZXItPmlycSA8IDAgfHwgc2VyLT5pcnEgPj0gbnJfaXJxcykKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlpZiAoc2VyLT5iYXVkX2Jhc2UgPCA5NjAwKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zaC9NYWtlZmlsZSBiL2RyaXZlcnMvc2gvTWFrZWZpbGUKaW5kZXggYTk2ZjRhOC4uNmEwMjVjZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zaC9NYWtlZmlsZQorKysgYi9kcml2ZXJzL3NoL01ha2VmaWxlCkBAIC0xLDYgKzEsNiBAQAogIwogIyBNYWtlZmlsZSBmb3IgdGhlIFN1cGVySCBzcGVjaWZpYyBkcml2ZXJzLgogIwotCiBvYmotJChDT05GSUdfU1VQRVJIWVdBWSkJKz0gc3VwZXJoeXdheS8KIG9iai0kKENPTkZJR19NQVBMRSkJCSs9IG1hcGxlLworb2JqLXkJCQkJKz0gaW50Yy5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NoL2ludGMuYyBiL2RyaXZlcnMvc2gvaW50Yy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU4ZDI0YzUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3NoL2ludGMuYwpAQCAtMCwwICsxLDcxMyBAQAorLyoKKyAqIFNoYXJlZCBpbnRlcnJ1cHQgaGFuZGxpbmcgY29kZSBmb3IgSVBSIGFuZCBJTlRDMiB0eXBlcyBvZiBJUlFzLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCBNYWdudXMgRGFtbQorICoKKyAqIEJhc2VkIG9uIGludGMyLmMgYW5kIGlwci5jCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk5ICBOaWliZSBZdXRha2EgJiBUYWtlc2hpIFlhZWdhc2hpCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgIEthenVtb3RvIEtvamltYQorICogQ29weXJpZ2h0IChDKSAyMDAxICBEYXZpZCBKLiBNY2theSAoZGF2aWQubWNrYXlAc3QuY29tKQorICogQ29weXJpZ2h0IChDKSAyMDAzICBUYWthc2hpIEt1c3VkYSA8a3VzdWRhLXRha2FzaGlAaGl0YWNoaS11bC5jby5qcD4KKyAqIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiAgUGF1bCBNdW5kdAorICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICovCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lycS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvYm9vdG1lbS5oPgorI2luY2x1ZGUgPGxpbnV4L3NoX2ludGMuaD4KKworI2RlZmluZSBfSU5UQ19NSyhmbiwgbW9kZSwgYWRkcl9lLCBhZGRyX2QsIHdpZHRoLCBzaGlmdCkgXAorCSgoc2hpZnQpIHwgKCh3aWR0aCkgPDwgNSkgfCAoKGZuKSA8PCA5KSB8ICgobW9kZSkgPDwgMTMpIHwgXAorCSAoKGFkZHJfZSkgPDwgMTYpIHwgKChhZGRyX2QgPDwgMjQpKSkKKworI2RlZmluZSBfSU5UQ19TSElGVChoKSAoaCAmIDB4MWYpCisjZGVmaW5lIF9JTlRDX1dJRFRIKGgpICgoaCA+PiA1KSAmIDB4ZikKKyNkZWZpbmUgX0lOVENfRk4oaCkgKChoID4+IDkpICYgMHhmKQorI2RlZmluZSBfSU5UQ19NT0RFKGgpICgoaCA+PiAxMykgJiAweDcpCisjZGVmaW5lIF9JTlRDX0FERFJfRShoKSAoKGggPj4gMTYpICYgMHhmZikKKyNkZWZpbmUgX0lOVENfQUREUl9EKGgpICgoaCA+PiAyNCkgJiAweGZmKQorCitzdHJ1Y3QgaW50Y19oYW5kbGVfaW50IHsKKwl1bnNpZ25lZCBpbnQgaXJxOworCXVuc2lnbmVkIGxvbmcgaGFuZGxlOworfTsKKworc3RydWN0IGludGNfZGVzY19pbnQgeworCXVuc2lnbmVkIGxvbmcgKnJlZzsKKyNpZmRlZiBDT05GSUdfU01QCisJdW5zaWduZWQgbG9uZyAqc21wOworI2VuZGlmCisJdW5zaWduZWQgaW50IG5yX3JlZzsKKwlzdHJ1Y3QgaW50Y19oYW5kbGVfaW50ICpwcmlvOworCXVuc2lnbmVkIGludCBucl9wcmlvOworCXN0cnVjdCBpbnRjX2hhbmRsZV9pbnQgKnNlbnNlOworCXVuc2lnbmVkIGludCBucl9zZW5zZTsKKwlzdHJ1Y3QgaXJxX2NoaXAgY2hpcDsKK307CisKKyNpZmRlZiBDT05GSUdfU01QCisjZGVmaW5lIElTX1NNUCh4KSB4LnNtcAorI2RlZmluZSBJTlRDX1JFRyhkLCB4LCBjKSAoZC0+cmVnWyh4KV0gKyAoKGQtPnNtcFsoeCldICYgMHhmZikgKiBjKSkKKyNkZWZpbmUgU01QX05SKGQsIHgpICgoZC0+c21wWyh4KV0gPj4gOCkgPyAoZC0+c21wWyh4KV0gPj4gOCkgOiAxKQorI2Vsc2UKKyNkZWZpbmUgSVNfU01QKHgpIDAKKyNkZWZpbmUgSU5UQ19SRUcoZCwgeCwgYykgKGQtPnJlZ1soeCldKQorI2RlZmluZSBTTVBfTlIoZCwgeCkgMQorI2VuZGlmCisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgaW50Y19wcmlvX2xldmVsW05SX0lSUVNdOyAvKiBmb3Igbm93ICovCisjaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NIMykgfHwgZGVmaW5lZChDT05GSUdfQ1BVX1NINEEpCitzdGF0aWMgdW5zaWduZWQgbG9uZyBhY2tfaGFuZGxlW05SX0lSUVNdOworI2VuZGlmCisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGludGNfZGVzY19pbnQgKmdldF9pbnRjX2Rlc2ModW5zaWduZWQgaW50IGlycSkKK3sKKwlzdHJ1Y3QgaXJxX2NoaXAgKmNoaXAgPSBnZXRfaXJxX2NoaXAoaXJxKTsKKwlyZXR1cm4gKHZvaWQgKikoKGNoYXIgKiljaGlwIC0gb2Zmc2V0b2Yoc3RydWN0IGludGNfZGVzY19pbnQsIGNoaXApKTsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgc2V0X2ZpZWxkKHVuc2lnbmVkIGludCB2YWx1ZSwKKwkJCQkgICAgIHVuc2lnbmVkIGludCBmaWVsZF92YWx1ZSwKKwkJCQkgICAgIHVuc2lnbmVkIGludCBoYW5kbGUpCit7CisJdW5zaWduZWQgaW50IHdpZHRoID0gX0lOVENfV0lEVEgoaGFuZGxlKTsKKwl1bnNpZ25lZCBpbnQgc2hpZnQgPSBfSU5UQ19TSElGVChoYW5kbGUpOworCisJdmFsdWUgJj0gfigoKDEgPDwgd2lkdGgpIC0gMSkgPDwgc2hpZnQpOworCXZhbHVlIHw9IGZpZWxkX3ZhbHVlIDw8IHNoaWZ0OworCXJldHVybiB2YWx1ZTsKK30KKworc3RhdGljIHZvaWQgd3JpdGVfOCh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgaCwgdW5zaWduZWQgbG9uZyBkYXRhKQoreworCV9fcmF3X3dyaXRlYihzZXRfZmllbGQoMCwgZGF0YSwgaCksIGFkZHIpOworfQorCitzdGF0aWMgdm9pZCB3cml0ZV8xNih1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgaCwgdW5zaWduZWQgbG9uZyBkYXRhKQoreworCV9fcmF3X3dyaXRldyhzZXRfZmllbGQoMCwgZGF0YSwgaCksIGFkZHIpOworfQorCitzdGF0aWMgdm9pZCB3cml0ZV8zMih1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgaCwgdW5zaWduZWQgbG9uZyBkYXRhKQoreworCV9fcmF3X3dyaXRlbChzZXRfZmllbGQoMCwgZGF0YSwgaCksIGFkZHIpOworfQorCitzdGF0aWMgdm9pZCBtb2RpZnlfOCh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgaCwgdW5zaWduZWQgbG9uZyBkYXRhKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCV9fcmF3X3dyaXRlYihzZXRfZmllbGQoX19yYXdfcmVhZGIoYWRkciksIGRhdGEsIGgpLCBhZGRyKTsKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Cit9CisKK3N0YXRpYyB2b2lkIG1vZGlmeV8xNih1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgaCwgdW5zaWduZWQgbG9uZyBkYXRhKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCV9fcmF3X3dyaXRldyhzZXRfZmllbGQoX19yYXdfcmVhZHcoYWRkciksIGRhdGEsIGgpLCBhZGRyKTsKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Cit9CisKK3N0YXRpYyB2b2lkIG1vZGlmeV8zMih1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgaCwgdW5zaWduZWQgbG9uZyBkYXRhKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCV9fcmF3X3dyaXRlbChzZXRfZmllbGQoX19yYXdfcmVhZGwoYWRkciksIGRhdGEsIGgpLCBhZGRyKTsKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Cit9CisKK2VudW0gewlSRUdfRk5fRVJSID0gMCwgUkVHX0ZOX1dSSVRFX0JBU0UgPSAxLCBSRUdfRk5fTU9ESUZZX0JBU0UgPSA1IH07CisKK3N0YXRpYyB2b2lkICgqaW50Y19yZWdfZm5zW10pKHVuc2lnbmVkIGxvbmcgYWRkciwKKwkJCSAgICAgIHVuc2lnbmVkIGxvbmcgaCwKKwkJCSAgICAgIHVuc2lnbmVkIGxvbmcgZGF0YSkgPSB7CisJW1JFR19GTl9XUklURV9CQVNFICsgMF0gPSB3cml0ZV84LAorCVtSRUdfRk5fV1JJVEVfQkFTRSArIDFdID0gd3JpdGVfMTYsCisJW1JFR19GTl9XUklURV9CQVNFICsgM10gPSB3cml0ZV8zMiwKKwlbUkVHX0ZOX01PRElGWV9CQVNFICsgMF0gPSBtb2RpZnlfOCwKKwlbUkVHX0ZOX01PRElGWV9CQVNFICsgMV0gPSBtb2RpZnlfMTYsCisJW1JFR19GTl9NT0RJRllfQkFTRSArIDNdID0gbW9kaWZ5XzMyLAorfTsKKworZW51bSB7CU1PREVfRU5BQkxFX1JFRyA9IDAsIC8qIEJpdChzKSBzZXQgLT4gaW50ZXJydXB0IGVuYWJsZWQgKi8KKwlNT0RFX01BU0tfUkVHLCAgICAgICAvKiBCaXQocykgc2V0IC0+IGludGVycnVwdCBkaXNhYmxlZCAqLworCU1PREVfRFVBTF9SRUcsICAgICAgIC8qIFR3byByZWdpc3RlcnMsIHNldCBiaXQgdG8gZW5hYmxlIC8gZGlzYWJsZSAqLworCU1PREVfUFJJT19SRUcsICAgICAgIC8qIFByaW9yaXR5IHZhbHVlIHdyaXR0ZW4gdG8gZW5hYmxlIGludGVycnVwdCAqLworCU1PREVfUENMUl9SRUcsICAgICAgIC8qIEFib3ZlIHBsdXMgYWxsIGJpdHMgc2V0IHRvIGRpc2FibGUgaW50ZXJydXB0ICovCit9OworCitzdGF0aWMgdm9pZCBpbnRjX21vZGVfZmllbGQodW5zaWduZWQgbG9uZyBhZGRyLAorCQkJICAgIHVuc2lnbmVkIGxvbmcgaGFuZGxlLAorCQkJICAgIHZvaWQgKCpmbikodW5zaWduZWQgbG9uZywKKwkJCQkgICAgICAgdW5zaWduZWQgbG9uZywKKwkJCQkgICAgICAgdW5zaWduZWQgbG9uZyksCisJCQkgICAgdW5zaWduZWQgaW50IGlycSkKK3sKKwlmbihhZGRyLCBoYW5kbGUsICgoMSA8PCBfSU5UQ19XSURUSChoYW5kbGUpKSAtIDEpKTsKK30KKworc3RhdGljIHZvaWQgaW50Y19tb2RlX3plcm8odW5zaWduZWQgbG9uZyBhZGRyLAorCQkJICAgdW5zaWduZWQgbG9uZyBoYW5kbGUsCisJCQkgICB2b2lkICgqZm4pKHVuc2lnbmVkIGxvbmcsCisJCQkJICAgICAgIHVuc2lnbmVkIGxvbmcsCisJCQkJICAgICAgIHVuc2lnbmVkIGxvbmcpLAorCQkJICAgdW5zaWduZWQgaW50IGlycSkKK3sKKwlmbihhZGRyLCBoYW5kbGUsIDApOworfQorCitzdGF0aWMgdm9pZCBpbnRjX21vZGVfcHJpbyh1bnNpZ25lZCBsb25nIGFkZHIsCisJCQkgICB1bnNpZ25lZCBsb25nIGhhbmRsZSwKKwkJCSAgIHZvaWQgKCpmbikodW5zaWduZWQgbG9uZywKKwkJCQkgICAgICAgdW5zaWduZWQgbG9uZywKKwkJCQkgICAgICAgdW5zaWduZWQgbG9uZyksCisJCQkgICB1bnNpZ25lZCBpbnQgaXJxKQoreworCWZuKGFkZHIsIGhhbmRsZSwgaW50Y19wcmlvX2xldmVsW2lycV0pOworfQorCitzdGF0aWMgdm9pZCAoKmludGNfZW5hYmxlX2Zuc1tdKSh1bnNpZ25lZCBsb25nIGFkZHIsCisJCQkJIHVuc2lnbmVkIGxvbmcgaGFuZGxlLAorCQkJCSB2b2lkICgqZm4pKHVuc2lnbmVkIGxvbmcsCisJCQkJCSAgICB1bnNpZ25lZCBsb25nLAorCQkJCQkgICAgdW5zaWduZWQgbG9uZyksCisJCQkJIHVuc2lnbmVkIGludCBpcnEpID0geworCVtNT0RFX0VOQUJMRV9SRUddID0gaW50Y19tb2RlX2ZpZWxkLAorCVtNT0RFX01BU0tfUkVHXSA9IGludGNfbW9kZV96ZXJvLAorCVtNT0RFX0RVQUxfUkVHXSA9IGludGNfbW9kZV9maWVsZCwKKwlbTU9ERV9QUklPX1JFR10gPSBpbnRjX21vZGVfcHJpbywKKwlbTU9ERV9QQ0xSX1JFR10gPSBpbnRjX21vZGVfcHJpbywKK307CisKK3N0YXRpYyB2b2lkICgqaW50Y19kaXNhYmxlX2Zuc1tdKSh1bnNpZ25lZCBsb25nIGFkZHIsCisJCQkJICB1bnNpZ25lZCBsb25nIGhhbmRsZSwKKwkJCQkgIHZvaWQgKCpmbikodW5zaWduZWQgbG9uZywKKwkJCQkJICAgICB1bnNpZ25lZCBsb25nLAorCQkJCQkgICAgIHVuc2lnbmVkIGxvbmcpLAorCQkJCSAgdW5zaWduZWQgaW50IGlycSkgPSB7CisJW01PREVfRU5BQkxFX1JFR10gPSBpbnRjX21vZGVfemVybywKKwlbTU9ERV9NQVNLX1JFR10gPSBpbnRjX21vZGVfZmllbGQsCisJW01PREVfRFVBTF9SRUddID0gaW50Y19tb2RlX2ZpZWxkLAorCVtNT0RFX1BSSU9fUkVHXSA9IGludGNfbW9kZV96ZXJvLAorCVtNT0RFX1BDTFJfUkVHXSA9IGludGNfbW9kZV9maWVsZCwKK307CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBfaW50Y19lbmFibGUodW5zaWduZWQgaW50IGlycSwgdW5zaWduZWQgbG9uZyBoYW5kbGUpCit7CisJc3RydWN0IGludGNfZGVzY19pbnQgKmQgPSBnZXRfaW50Y19kZXNjKGlycSk7CisJdW5zaWduZWQgbG9uZyBhZGRyOworCXVuc2lnbmVkIGludCBjcHU7CisKKwlmb3IgKGNwdSA9IDA7IGNwdSA8IFNNUF9OUihkLCBfSU5UQ19BRERSX0UoaGFuZGxlKSk7IGNwdSsrKSB7CisJCWFkZHIgPSBJTlRDX1JFRyhkLCBfSU5UQ19BRERSX0UoaGFuZGxlKSwgY3B1KTsKKwkJaW50Y19lbmFibGVfZm5zW19JTlRDX01PREUoaGFuZGxlKV0oYWRkciwgaGFuZGxlLCBpbnRjX3JlZ19mbnNcCisJCQkJCQkgICAgW19JTlRDX0ZOKGhhbmRsZSldLCBpcnEpOworCX0KK30KKworc3RhdGljIHZvaWQgaW50Y19lbmFibGUodW5zaWduZWQgaW50IGlycSkKK3sKKwlfaW50Y19lbmFibGUoaXJxLCAodW5zaWduZWQgbG9uZylnZXRfaXJxX2NoaXBfZGF0YShpcnEpKTsKK30KKworc3RhdGljIHZvaWQgaW50Y19kaXNhYmxlKHVuc2lnbmVkIGludCBpcnEpCit7CisJc3RydWN0IGludGNfZGVzY19pbnQgKmQgPSBnZXRfaW50Y19kZXNjKGlycSk7CisJdW5zaWduZWQgbG9uZyBoYW5kbGUgPSAodW5zaWduZWQgbG9uZykgZ2V0X2lycV9jaGlwX2RhdGEoaXJxKTsKKwl1bnNpZ25lZCBsb25nIGFkZHI7CisJdW5zaWduZWQgaW50IGNwdTsKKworCWZvciAoY3B1ID0gMDsgY3B1IDwgU01QX05SKGQsIF9JTlRDX0FERFJfRChoYW5kbGUpKTsgY3B1KyspIHsKKwkJYWRkciA9IElOVENfUkVHKGQsIF9JTlRDX0FERFJfRChoYW5kbGUpLCBjcHUpOworCQlpbnRjX2Rpc2FibGVfZm5zW19JTlRDX01PREUoaGFuZGxlKV0oYWRkciwgaGFuZGxlLGludGNfcmVnX2Zuc1wKKwkJCQkJCSAgICAgW19JTlRDX0ZOKGhhbmRsZSldLCBpcnEpOworCX0KK30KKworI2lmIGRlZmluZWQoQ09ORklHX0NQVV9TSDMpIHx8IGRlZmluZWQoQ09ORklHX0NQVV9TSDRBKQorc3RhdGljIHZvaWQgaW50Y19tYXNrX2Fjayh1bnNpZ25lZCBpbnQgaXJxKQoreworCXN0cnVjdCBpbnRjX2Rlc2NfaW50ICpkID0gZ2V0X2ludGNfZGVzYyhpcnEpOworCXVuc2lnbmVkIGxvbmcgaGFuZGxlID0gYWNrX2hhbmRsZVtpcnFdOworCXVuc2lnbmVkIGxvbmcgYWRkcjsKKworCWludGNfZGlzYWJsZShpcnEpOworCisJLyogcmVhZCByZWdpc3RlciBhbmQgd3JpdGUgemVybyBvbmx5IHRvIHRoZSBhc3NvY2FpdGVkIGJpdCAqLworCisJaWYgKGhhbmRsZSkgeworCQlhZGRyID0gSU5UQ19SRUcoZCwgX0lOVENfQUREUl9EKGhhbmRsZSksIDApOworCQlzd2l0Y2ggKF9JTlRDX0ZOKGhhbmRsZSkpIHsKKwkJY2FzZSBSRUdfRk5fTU9ESUZZX0JBU0UgKyAwOgkvKiA4Yml0ICovCisJCQlfX3Jhd19yZWFkYihhZGRyKTsKKwkJCV9fcmF3X3dyaXRlYigweGZmIF4gc2V0X2ZpZWxkKDAsIDEsIGhhbmRsZSksIGFkZHIpOworCQkJYnJlYWs7CisJCWNhc2UgUkVHX0ZOX01PRElGWV9CQVNFICsgMToJLyogMTZiaXQgKi8KKwkJCV9fcmF3X3JlYWR3KGFkZHIpOworCQkJX19yYXdfd3JpdGV3KDB4ZmZmZiBeIHNldF9maWVsZCgwLCAxLCBoYW5kbGUpLCBhZGRyKTsKKwkJCWJyZWFrOworCQljYXNlIFJFR19GTl9NT0RJRllfQkFTRSArIDM6CS8qIDMyYml0ICovCisJCQlfX3Jhd19yZWFkbChhZGRyKTsKKwkJCV9fcmF3X3dyaXRlbCgweGZmZmZmZmZmIF4gc2V0X2ZpZWxkKDAsIDEsIGhhbmRsZSksIGFkZHIpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlCVUcoKTsKKwkJCWJyZWFrOworCQl9CisJfQorfQorI2VuZGlmCisKK3N0YXRpYyBzdHJ1Y3QgaW50Y19oYW5kbGVfaW50ICppbnRjX2ZpbmRfaXJxKHN0cnVjdCBpbnRjX2hhbmRsZV9pbnQgKmhwLAorCQkJCQkgICAgIHVuc2lnbmVkIGludCBucl9ocCwKKwkJCQkJICAgICB1bnNpZ25lZCBpbnQgaXJxKQoreworCWludCBpOworCisJLyogdGhpcyBkb2Vzbid0IHNjYWxlIHdlbGwsIGJ1dC4uLgorCSAqCisJICogdGhpcyBmdW5jdGlvbiBzaG91bGQgb25seSBiZSB1c2VkIGZvciBjZXJhaW4gdW5jb21tb24KKwkgKiBvcGVyYXRpb25zIHN1Y2ggYXMgaW50Y19zZXRfcHJpb3JpdHkoKSBhbmQgaW50Y19zZXRfc2Vuc2UoKQorCSAqIGFuZCBpbiB0aG9zZSByYXJlIGNhc2VzIHBlcmZvcm1hbmNlIGRvZXNuJ3QgbWF0dGVyIHRoYXQgbXVjaC4KKwkgKiBrZWVwaW5nIHRoZSBtZW1vcnkgZm9vdHByaW50IGxvdyBpcyBtb3JlIGltcG9ydGFudC4KKwkgKgorCSAqIG9uZSByYXRoZXIgc2ltcGxlIHdheSB0byBzcGVlZCB0aGlzIHVwIGFuZCBzdGlsbCBrZWVwIHRoZQorCSAqIG1lbW9yeSBmb290cHJpbnQgZG93biBpcyB0byBtYWtlIHN1cmUgdGhlIGFycmF5IGlzIHNvcnRlZAorCSAqIGFuZCB0aGVuIHBlcmZvcm0gYSBiaXNlY3QgdG8gbG9va3VwIHRoZSBpcnEuCisJICovCisKKwlmb3IgKGkgPSAwOyBpIDwgbnJfaHA7IGkrKykgeworCQlpZiAoKGhwICsgaSktPmlycSAhPSBpcnEpCisJCQljb250aW51ZTsKKworCQlyZXR1cm4gaHAgKyBpOworCX0KKworCXJldHVybiBOVUxMOworfQorCitpbnQgaW50Y19zZXRfcHJpb3JpdHkodW5zaWduZWQgaW50IGlycSwgdW5zaWduZWQgaW50IHByaW8pCit7CisJc3RydWN0IGludGNfZGVzY19pbnQgKmQgPSBnZXRfaW50Y19kZXNjKGlycSk7CisJc3RydWN0IGludGNfaGFuZGxlX2ludCAqaWhwOworCisJaWYgKCFpbnRjX3ByaW9fbGV2ZWxbaXJxXSB8fCBwcmlvIDw9IDEpCisJCXJldHVybiAtRUlOVkFMOworCisJaWhwID0gaW50Y19maW5kX2lycShkLT5wcmlvLCBkLT5ucl9wcmlvLCBpcnEpOworCWlmIChpaHApIHsKKwkJaWYgKHByaW8gPj0gKDEgPDwgX0lOVENfV0lEVEgoaWhwLT5oYW5kbGUpKSkKKwkJCXJldHVybiAtRUlOVkFMOworCisJCWludGNfcHJpb19sZXZlbFtpcnFdID0gcHJpbzsKKworCQkvKgorCQkgKiBvbmx5IHNldCBzZWNvbmRhcnkgbWFza2luZyBtZXRob2QgZGlyZWN0bHkKKwkJICogcHJpbWFyeSBtYXNraW5nIG1ldGhvZCBpcyB1c2luZyBpbnRjX3ByaW9fbGV2ZWxbaXJxXQorCQkgKiBwcmlvcml0eSBsZXZlbCB3aWxsIGJlIHNldCBkdXJpbmcgbmV4dCBlbmFibGUoKQorCQkgKi8KKworCQlpZiAoX0lOVENfRk4oaWhwLT5oYW5kbGUpICE9IFJFR19GTl9FUlIpCisJCQlfaW50Y19lbmFibGUoaXJxLCBpaHAtPmhhbmRsZSk7CisJfQorCXJldHVybiAwOworfQorCisjZGVmaW5lIFZBTElEKHgpICh4IHwgMHg4MCkKKworc3RhdGljIHVuc2lnbmVkIGNoYXIgaW50Y19pcnFfc2Vuc2VfdGFibGVbSVJRX1RZUEVfU0VOU0VfTUFTSyArIDFdID0geworCVtJUlFfVFlQRV9FREdFX0ZBTExJTkddID0gVkFMSUQoMCksCisJW0lSUV9UWVBFX0VER0VfUklTSU5HXSA9IFZBTElEKDEpLAorCVtJUlFfVFlQRV9MRVZFTF9MT1ddID0gVkFMSUQoMiksCisJLyogU0g3NzA2LCBTSDc3MDcgYW5kIFNINzcwOSBkbyBub3Qgc3VwcG9ydCBoaWdoIGxldmVsIHRyaWdnZXJlZCAqLworI2lmICFkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MDYpICYmIFwKKyAgICAhZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzA3KSAmJiBcCisgICAgIWRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcwOSkKKwlbSVJRX1RZUEVfTEVWRUxfSElHSF0gPSBWQUxJRCgzKSwKKyNlbmRpZgorfTsKKworc3RhdGljIGludCBpbnRjX3NldF9zZW5zZSh1bnNpZ25lZCBpbnQgaXJxLCB1bnNpZ25lZCBpbnQgdHlwZSkKK3sKKwlzdHJ1Y3QgaW50Y19kZXNjX2ludCAqZCA9IGdldF9pbnRjX2Rlc2MoaXJxKTsKKwl1bnNpZ25lZCBjaGFyIHZhbHVlID0gaW50Y19pcnFfc2Vuc2VfdGFibGVbdHlwZSAmIElSUV9UWVBFX1NFTlNFX01BU0tdOworCXN0cnVjdCBpbnRjX2hhbmRsZV9pbnQgKmlocDsKKwl1bnNpZ25lZCBsb25nIGFkZHI7CisKKwlpZiAoIXZhbHVlKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlocCA9IGludGNfZmluZF9pcnEoZC0+c2Vuc2UsIGQtPm5yX3NlbnNlLCBpcnEpOworCWlmIChpaHApIHsKKwkJYWRkciA9IElOVENfUkVHKGQsIF9JTlRDX0FERFJfRShpaHAtPmhhbmRsZSksIDApOworCQlpbnRjX3JlZ19mbnNbX0lOVENfRk4oaWhwLT5oYW5kbGUpXShhZGRyLCBpaHAtPmhhbmRsZSwgdmFsdWUpOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCBfX2luaXQgaW50Y19nZXRfcmVnKHN0cnVjdCBpbnRjX2Rlc2NfaW50ICpkLAorCQkJCSB1bnNpZ25lZCBsb25nIGFkZHJlc3MpCit7CisJdW5zaWduZWQgaW50IGs7CisKKwlmb3IgKGsgPSAwOyBrIDwgZC0+bnJfcmVnOyBrKyspIHsKKwkJaWYgKGQtPnJlZ1trXSA9PSBhZGRyZXNzKQorCQkJcmV0dXJuIGs7CisJfQorCisJQlVHKCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnRjX2VudW0gX19pbml0IGludGNfZ3JwX2lkKHN0cnVjdCBpbnRjX2Rlc2MgKmRlc2MsCisJCQkJICAgIGludGNfZW51bSBlbnVtX2lkKQoreworCXN0cnVjdCBpbnRjX2dyb3VwICpnID0gZGVzYy0+Z3JvdXBzOworCXVuc2lnbmVkIGludCBpLCBqOworCisJZm9yIChpID0gMDsgZyAmJiBlbnVtX2lkICYmIGkgPCBkZXNjLT5ucl9ncm91cHM7IGkrKykgeworCQlnID0gZGVzYy0+Z3JvdXBzICsgaTsKKworCQlmb3IgKGogPSAwOyBnLT5lbnVtX2lkc1tqXTsgaisrKSB7CisJCQlpZiAoZy0+ZW51bV9pZHNbal0gIT0gZW51bV9pZCkKKwkJCQljb250aW51ZTsKKworCQkJcmV0dXJuIGctPmVudW1faWQ7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCBfX2luaXQgaW50Y19tYXNrX2RhdGEoc3RydWN0IGludGNfZGVzYyAqZGVzYywKKwkJCQkJICBzdHJ1Y3QgaW50Y19kZXNjX2ludCAqZCwKKwkJCQkJICBpbnRjX2VudW0gZW51bV9pZCwgaW50IGRvX2dycHMpCit7CisJc3RydWN0IGludGNfbWFza19yZWcgKm1yID0gZGVzYy0+bWFza19yZWdzOworCXVuc2lnbmVkIGludCBpLCBqLCBmbiwgbW9kZTsKKwl1bnNpZ25lZCBsb25nIHJlZ19lLCByZWdfZDsKKworCWZvciAoaSA9IDA7IG1yICYmIGVudW1faWQgJiYgaSA8IGRlc2MtPm5yX21hc2tfcmVnczsgaSsrKSB7CisJCW1yID0gZGVzYy0+bWFza19yZWdzICsgaTsKKworCQlmb3IgKGogPSAwOyBqIDwgQVJSQVlfU0laRShtci0+ZW51bV9pZHMpOyBqKyspIHsKKwkJCWlmIChtci0+ZW51bV9pZHNbal0gIT0gZW51bV9pZCkKKwkJCQljb250aW51ZTsKKworCQkJaWYgKG1yLT5zZXRfcmVnICYmIG1yLT5jbHJfcmVnKSB7CisJCQkJZm4gPSBSRUdfRk5fV1JJVEVfQkFTRTsKKwkJCQltb2RlID0gTU9ERV9EVUFMX1JFRzsKKwkJCQlyZWdfZSA9IG1yLT5jbHJfcmVnOworCQkJCXJlZ19kID0gbXItPnNldF9yZWc7CisJCQl9IGVsc2UgeworCQkJCWZuID0gUkVHX0ZOX01PRElGWV9CQVNFOworCQkJCWlmIChtci0+c2V0X3JlZykgeworCQkJCQltb2RlID0gTU9ERV9FTkFCTEVfUkVHOworCQkJCQlyZWdfZSA9IG1yLT5zZXRfcmVnOworCQkJCQlyZWdfZCA9IG1yLT5zZXRfcmVnOworCQkJCX0gZWxzZSB7CisJCQkJCW1vZGUgPSBNT0RFX01BU0tfUkVHOworCQkJCQlyZWdfZSA9IG1yLT5jbHJfcmVnOworCQkJCQlyZWdfZCA9IG1yLT5jbHJfcmVnOworCQkJCX0KKwkJCX0KKworCQkJZm4gKz0gKG1yLT5yZWdfd2lkdGggPj4gMykgLSAxOworCQkJcmV0dXJuIF9JTlRDX01LKGZuLCBtb2RlLAorCQkJCQlpbnRjX2dldF9yZWcoZCwgcmVnX2UpLAorCQkJCQlpbnRjX2dldF9yZWcoZCwgcmVnX2QpLAorCQkJCQkxLAorCQkJCQkobXItPnJlZ193aWR0aCAtIDEpIC0gaik7CisJCX0KKwl9CisKKwlpZiAoZG9fZ3JwcykKKwkJcmV0dXJuIGludGNfbWFza19kYXRhKGRlc2MsIGQsIGludGNfZ3JwX2lkKGRlc2MsIGVudW1faWQpLCAwKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IF9faW5pdCBpbnRjX3ByaW9fZGF0YShzdHJ1Y3QgaW50Y19kZXNjICpkZXNjLAorCQkJCQkgIHN0cnVjdCBpbnRjX2Rlc2NfaW50ICpkLAorCQkJCQkgIGludGNfZW51bSBlbnVtX2lkLCBpbnQgZG9fZ3JwcykKK3sKKwlzdHJ1Y3QgaW50Y19wcmlvX3JlZyAqcHIgPSBkZXNjLT5wcmlvX3JlZ3M7CisJdW5zaWduZWQgaW50IGksIGosIGZuLCBtb2RlLCBiaXQ7CisJdW5zaWduZWQgbG9uZyByZWdfZSwgcmVnX2Q7CisKKwlmb3IgKGkgPSAwOyBwciAmJiBlbnVtX2lkICYmIGkgPCBkZXNjLT5ucl9wcmlvX3JlZ3M7IGkrKykgeworCQlwciA9IGRlc2MtPnByaW9fcmVncyArIGk7CisKKwkJZm9yIChqID0gMDsgaiA8IEFSUkFZX1NJWkUocHItPmVudW1faWRzKTsgaisrKSB7CisJCQlpZiAocHItPmVudW1faWRzW2pdICE9IGVudW1faWQpCisJCQkJY29udGludWU7CisKKwkJCWlmIChwci0+c2V0X3JlZyAmJiBwci0+Y2xyX3JlZykgeworCQkJCWZuID0gUkVHX0ZOX1dSSVRFX0JBU0U7CisJCQkJbW9kZSA9IE1PREVfUENMUl9SRUc7CisJCQkJcmVnX2UgPSBwci0+c2V0X3JlZzsKKwkJCQlyZWdfZCA9IHByLT5jbHJfcmVnOworCQkJfSBlbHNlIHsKKwkJCQlmbiA9IFJFR19GTl9NT0RJRllfQkFTRTsKKwkJCQltb2RlID0gTU9ERV9QUklPX1JFRzsKKwkJCQlpZiAoIXByLT5zZXRfcmVnKQorCQkJCQlCVUcoKTsKKwkJCQlyZWdfZSA9IHByLT5zZXRfcmVnOworCQkJCXJlZ19kID0gcHItPnNldF9yZWc7CisJCQl9CisKKwkJCWZuICs9IChwci0+cmVnX3dpZHRoID4+IDMpIC0gMTsKKworCQkJQlVHX09OKChqICsgMSkgKiBwci0+ZmllbGRfd2lkdGggPiBwci0+cmVnX3dpZHRoKTsKKworCQkJYml0ID0gcHItPnJlZ193aWR0aCAtICgoaiArIDEpICogcHItPmZpZWxkX3dpZHRoKTsKKworCQkJcmV0dXJuIF9JTlRDX01LKGZuLCBtb2RlLAorCQkJCQlpbnRjX2dldF9yZWcoZCwgcmVnX2UpLAorCQkJCQlpbnRjX2dldF9yZWcoZCwgcmVnX2QpLAorCQkJCQlwci0+ZmllbGRfd2lkdGgsIGJpdCk7CisJCX0KKwl9CisKKwlpZiAoZG9fZ3JwcykKKwkJcmV0dXJuIGludGNfcHJpb19kYXRhKGRlc2MsIGQsIGludGNfZ3JwX2lkKGRlc2MsIGVudW1faWQpLCAwKTsKKworCXJldHVybiAwOworfQorCisjaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NIMykgfHwgZGVmaW5lZChDT05GSUdfQ1BVX1NINEEpCitzdGF0aWMgdW5zaWduZWQgaW50IF9faW5pdCBpbnRjX2Fja19kYXRhKHN0cnVjdCBpbnRjX2Rlc2MgKmRlc2MsCisJCQkJCSAgc3RydWN0IGludGNfZGVzY19pbnQgKmQsCisJCQkJCSAgaW50Y19lbnVtIGVudW1faWQpCit7CisJc3RydWN0IGludGNfbWFza19yZWcgKm1yID0gZGVzYy0+YWNrX3JlZ3M7CisJdW5zaWduZWQgaW50IGksIGosIGZuLCBtb2RlOworCXVuc2lnbmVkIGxvbmcgcmVnX2UsIHJlZ19kOworCisJZm9yIChpID0gMDsgbXIgJiYgZW51bV9pZCAmJiBpIDwgZGVzYy0+bnJfYWNrX3JlZ3M7IGkrKykgeworCQltciA9IGRlc2MtPmFja19yZWdzICsgaTsKKworCQlmb3IgKGogPSAwOyBqIDwgQVJSQVlfU0laRShtci0+ZW51bV9pZHMpOyBqKyspIHsKKwkJCWlmIChtci0+ZW51bV9pZHNbal0gIT0gZW51bV9pZCkKKwkJCQljb250aW51ZTsKKworCQkJZm4gPSBSRUdfRk5fTU9ESUZZX0JBU0U7CisJCQltb2RlID0gTU9ERV9FTkFCTEVfUkVHOworCQkJcmVnX2UgPSBtci0+c2V0X3JlZzsKKwkJCXJlZ19kID0gbXItPnNldF9yZWc7CisKKwkJCWZuICs9IChtci0+cmVnX3dpZHRoID4+IDMpIC0gMTsKKwkJCXJldHVybiBfSU5UQ19NSyhmbiwgbW9kZSwKKwkJCQkJaW50Y19nZXRfcmVnKGQsIHJlZ19lKSwKKwkJCQkJaW50Y19nZXRfcmVnKGQsIHJlZ19kKSwKKwkJCQkJMSwKKwkJCQkJKG1yLT5yZWdfd2lkdGggLSAxKSAtIGopOworCQl9CisJfQorCisJcmV0dXJuIDA7Cit9CisjZW5kaWYKKworc3RhdGljIHVuc2lnbmVkIGludCBfX2luaXQgaW50Y19zZW5zZV9kYXRhKHN0cnVjdCBpbnRjX2Rlc2MgKmRlc2MsCisJCQkJCSAgIHN0cnVjdCBpbnRjX2Rlc2NfaW50ICpkLAorCQkJCQkgICBpbnRjX2VudW0gZW51bV9pZCkKK3sKKwlzdHJ1Y3QgaW50Y19zZW5zZV9yZWcgKnNyID0gZGVzYy0+c2Vuc2VfcmVnczsKKwl1bnNpZ25lZCBpbnQgaSwgaiwgZm4sIGJpdDsKKworCWZvciAoaSA9IDA7IHNyICYmIGVudW1faWQgJiYgaSA8IGRlc2MtPm5yX3NlbnNlX3JlZ3M7IGkrKykgeworCQlzciA9IGRlc2MtPnNlbnNlX3JlZ3MgKyBpOworCisJCWZvciAoaiA9IDA7IGogPCBBUlJBWV9TSVpFKHNyLT5lbnVtX2lkcyk7IGorKykgeworCQkJaWYgKHNyLT5lbnVtX2lkc1tqXSAhPSBlbnVtX2lkKQorCQkJCWNvbnRpbnVlOworCisJCQlmbiA9IFJFR19GTl9NT0RJRllfQkFTRTsKKwkJCWZuICs9IChzci0+cmVnX3dpZHRoID4+IDMpIC0gMTsKKworCQkJQlVHX09OKChqICsgMSkgKiBzci0+ZmllbGRfd2lkdGggPiBzci0+cmVnX3dpZHRoKTsKKworCQkJYml0ID0gc3ItPnJlZ193aWR0aCAtICgoaiArIDEpICogc3ItPmZpZWxkX3dpZHRoKTsKKworCQkJcmV0dXJuIF9JTlRDX01LKGZuLCAwLCBpbnRjX2dldF9yZWcoZCwgc3ItPnJlZyksCisJCQkJCTAsIHNyLT5maWVsZF93aWR0aCwgYml0KTsKKwkJfQorCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBfX2luaXQgaW50Y19yZWdpc3Rlcl9pcnEoc3RydWN0IGludGNfZGVzYyAqZGVzYywKKwkJCQkgICAgIHN0cnVjdCBpbnRjX2Rlc2NfaW50ICpkLAorCQkJCSAgICAgaW50Y19lbnVtIGVudW1faWQsCisJCQkJICAgICB1bnNpZ25lZCBpbnQgaXJxKQoreworCXN0cnVjdCBpbnRjX2hhbmRsZV9pbnQgKmhwOworCXVuc2lnbmVkIGludCBkYXRhWzJdLCBwcmltYXJ5OworCisJLyogUHJlZmVyIHNpbmdsZSBpbnRlcnJ1cHQgc291cmNlIGJpdG1hcCBvdmVyIG90aGVyIGNvbWJpbmF0aW9uczoKKwkgKiAxLiBiaXRtYXAsIHNpbmdsZSBpbnRlcnJ1cHQgc291cmNlCisJICogMi4gcHJpb3JpdHksIHNpbmdsZSBpbnRlcnJ1cHQgc291cmNlCisJICogMy4gYml0bWFwLCBtdWx0aXBsZSBpbnRlcnJ1cHQgc291cmNlcyAoZ3JvdXBzKQorCSAqIDQuIHByaW9yaXR5LCBtdWx0aXBsZSBpbnRlcnJ1cHQgc291cmNlcyAoZ3JvdXBzKQorCSAqLworCisJZGF0YVswXSA9IGludGNfbWFza19kYXRhKGRlc2MsIGQsIGVudW1faWQsIDApOworCWRhdGFbMV0gPSBpbnRjX3ByaW9fZGF0YShkZXNjLCBkLCBlbnVtX2lkLCAwKTsKKworCXByaW1hcnkgPSAwOworCWlmICghZGF0YVswXSAmJiBkYXRhWzFdKQorCQlwcmltYXJ5ID0gMTsKKworCWRhdGFbMF0gPSBkYXRhWzBdID8gZGF0YVswXSA6IGludGNfbWFza19kYXRhKGRlc2MsIGQsIGVudW1faWQsIDEpOworCWRhdGFbMV0gPSBkYXRhWzFdID8gZGF0YVsxXSA6IGludGNfcHJpb19kYXRhKGRlc2MsIGQsIGVudW1faWQsIDEpOworCisJaWYgKCFkYXRhW3ByaW1hcnldKQorCQlwcmltYXJ5IF49IDE7CisKKwlCVUdfT04oIWRhdGFbcHJpbWFyeV0pOyAvKiBtdXN0IGhhdmUgcHJpbWFyeSBtYXNraW5nIG1ldGhvZCAqLworCisJZGlzYWJsZV9pcnFfbm9zeW5jKGlycSk7CisJc2V0X2lycV9jaGlwX2FuZF9oYW5kbGVyX25hbWUoaXJxLCAmZC0+Y2hpcCwKKwkJCQkgICAgICBoYW5kbGVfbGV2ZWxfaXJxLCAibGV2ZWwiKTsKKwlzZXRfaXJxX2NoaXBfZGF0YShpcnEsICh2b2lkICopZGF0YVtwcmltYXJ5XSk7CisKKwkvKiBzZXQgcHJpb3JpdHkgbGV2ZWwKKwkgKiAtIHRoaXMgbmVlZHMgdG8gYmUgYXQgbGVhc3QgMiBmb3IgNS1iaXQgcHJpb3JpdGllcyBvbiA3NzgwCisJICovCisJaW50Y19wcmlvX2xldmVsW2lycV0gPSAyOworCisJLyogZW5hYmxlIHNlY29uZGFyeSBtYXNraW5nIG1ldGhvZCBpZiBwcmVzZW50ICovCisJaWYgKGRhdGFbIXByaW1hcnldKQorCQlfaW50Y19lbmFibGUoaXJxLCBkYXRhWyFwcmltYXJ5XSk7CisKKwkvKiBhZGQgaXJxIHRvIGQtPnByaW8gbGlzdCBpZiBwcmlvcml0eSBpcyBhdmFpbGFibGUgKi8KKwlpZiAoZGF0YVsxXSkgeworCQlocCA9IGQtPnByaW8gKyBkLT5ucl9wcmlvOworCQlocC0+aXJxID0gaXJxOworCQlocC0+aGFuZGxlID0gZGF0YVsxXTsKKworCQlpZiAocHJpbWFyeSkgeworCQkJLyoKKwkJCSAqIG9ubHkgc2Vjb25kYXJ5IHByaW9yaXR5IHNob3VsZCBhY2Nlc3MgcmVnaXN0ZXJzLCBzbworCQkJICogc2V0IF9JTlRDX0ZOKGgpID0gUkVHX0ZOX0VSUiBmb3IgaW50Y19zZXRfcHJpb3JpdHkoKQorCQkJICovCisKKwkJCWhwLT5oYW5kbGUgJj0gfl9JTlRDX01LKDB4MGYsIDAsIDAsIDAsIDAsIDApOworCQkJaHAtPmhhbmRsZSB8PSBfSU5UQ19NSyhSRUdfRk5fRVJSLCAwLCAwLCAwLCAwLCAwKTsKKwkJfQorCQlkLT5ucl9wcmlvKys7CisJfQorCisJLyogYWRkIGlycSB0byBkLT5zZW5zZSBsaXN0IGlmIHNlbnNlIGlzIGF2YWlsYWJsZSAqLworCWRhdGFbMF0gPSBpbnRjX3NlbnNlX2RhdGEoZGVzYywgZCwgZW51bV9pZCk7CisJaWYgKGRhdGFbMF0pIHsKKwkJKGQtPnNlbnNlICsgZC0+bnJfc2Vuc2UpLT5pcnEgPSBpcnE7CisJCShkLT5zZW5zZSArIGQtPm5yX3NlbnNlKS0+aGFuZGxlID0gZGF0YVswXTsKKwkJZC0+bnJfc2Vuc2UrKzsKKwl9CisKKwkvKiBpcnEgc2hvdWxkIGJlIGRpc2FibGVkIGJ5IGRlZmF1bHQgKi8KKwlkLT5jaGlwLm1hc2soaXJxKTsKKworI2lmIGRlZmluZWQoQ09ORklHX0NQVV9TSDMpIHx8IGRlZmluZWQoQ09ORklHX0NQVV9TSDRBKQorCWlmIChkZXNjLT5hY2tfcmVncykKKwkJYWNrX2hhbmRsZVtpcnFdID0gaW50Y19hY2tfZGF0YShkZXNjLCBkLCBlbnVtX2lkKTsKKyNlbmRpZgorfQorCitzdGF0aWMgdW5zaWduZWQgaW50IF9faW5pdCBzYXZlX3JlZyhzdHJ1Y3QgaW50Y19kZXNjX2ludCAqZCwKKwkJCQkgICAgdW5zaWduZWQgaW50IGNudCwKKwkJCQkgICAgdW5zaWduZWQgbG9uZyB2YWx1ZSwKKwkJCQkgICAgdW5zaWduZWQgaW50IHNtcCkKK3sKKwlpZiAodmFsdWUpIHsKKwkJZC0+cmVnW2NudF0gPSB2YWx1ZTsKKyNpZmRlZiBDT05GSUdfU01QCisJCWQtPnNtcFtjbnRdID0gc21wOworI2VuZGlmCisJCXJldHVybiAxOworCX0KKworCXJldHVybiAwOworfQorCisKK3ZvaWQgX19pbml0IHJlZ2lzdGVyX2ludGNfY29udHJvbGxlcihzdHJ1Y3QgaW50Y19kZXNjICpkZXNjKQoreworCXVuc2lnbmVkIGludCBpLCBrLCBzbXA7CisJc3RydWN0IGludGNfZGVzY19pbnQgKmQ7CisKKwlkID0gYWxsb2NfYm9vdG1lbShzaXplb2YoKmQpKTsKKworCWQtPm5yX3JlZyA9IGRlc2MtPm1hc2tfcmVncyA/IGRlc2MtPm5yX21hc2tfcmVncyAqIDIgOiAwOworCWQtPm5yX3JlZyArPSBkZXNjLT5wcmlvX3JlZ3MgPyBkZXNjLT5ucl9wcmlvX3JlZ3MgKiAyIDogMDsKKwlkLT5ucl9yZWcgKz0gZGVzYy0+c2Vuc2VfcmVncyA/IGRlc2MtPm5yX3NlbnNlX3JlZ3MgOiAwOworCisjaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NIMykgfHwgZGVmaW5lZChDT05GSUdfQ1BVX1NINEEpCisJZC0+bnJfcmVnICs9IGRlc2MtPmFja19yZWdzID8gZGVzYy0+bnJfYWNrX3JlZ3MgOiAwOworI2VuZGlmCisJZC0+cmVnID0gYWxsb2NfYm9vdG1lbShkLT5ucl9yZWcgKiBzaXplb2YoKmQtPnJlZykpOworI2lmZGVmIENPTkZJR19TTVAKKwlkLT5zbXAgPSBhbGxvY19ib290bWVtKGQtPm5yX3JlZyAqIHNpemVvZigqZC0+c21wKSk7CisjZW5kaWYKKwlrID0gMDsKKworCWlmIChkZXNjLT5tYXNrX3JlZ3MpIHsKKwkJZm9yIChpID0gMDsgaSA8IGRlc2MtPm5yX21hc2tfcmVnczsgaSsrKSB7CisJCQlzbXAgPSBJU19TTVAoZGVzYy0+bWFza19yZWdzW2ldKTsKKwkJCWsgKz0gc2F2ZV9yZWcoZCwgaywgZGVzYy0+bWFza19yZWdzW2ldLnNldF9yZWcsIHNtcCk7CisJCQlrICs9IHNhdmVfcmVnKGQsIGssIGRlc2MtPm1hc2tfcmVnc1tpXS5jbHJfcmVnLCBzbXApOworCQl9CisJfQorCisJaWYgKGRlc2MtPnByaW9fcmVncykgeworCQlkLT5wcmlvID0gYWxsb2NfYm9vdG1lbShkZXNjLT5ucl92ZWN0b3JzICogc2l6ZW9mKCpkLT5wcmlvKSk7CisKKwkJZm9yIChpID0gMDsgaSA8IGRlc2MtPm5yX3ByaW9fcmVnczsgaSsrKSB7CisJCQlzbXAgPSBJU19TTVAoZGVzYy0+cHJpb19yZWdzW2ldKTsKKwkJCWsgKz0gc2F2ZV9yZWcoZCwgaywgZGVzYy0+cHJpb19yZWdzW2ldLnNldF9yZWcsIHNtcCk7CisJCQlrICs9IHNhdmVfcmVnKGQsIGssIGRlc2MtPnByaW9fcmVnc1tpXS5jbHJfcmVnLCBzbXApOworCQl9CisJfQorCisJaWYgKGRlc2MtPnNlbnNlX3JlZ3MpIHsKKwkJZC0+c2Vuc2UgPSBhbGxvY19ib290bWVtKGRlc2MtPm5yX3ZlY3RvcnMgKiBzaXplb2YoKmQtPnNlbnNlKSk7CisKKwkJZm9yIChpID0gMDsgaSA8IGRlc2MtPm5yX3NlbnNlX3JlZ3M7IGkrKykgeworCQkJayArPSBzYXZlX3JlZyhkLCBrLCBkZXNjLT5zZW5zZV9yZWdzW2ldLnJlZywgMCk7CisJCX0KKwl9CisKKwlkLT5jaGlwLm5hbWUgPSBkZXNjLT5uYW1lOworCWQtPmNoaXAubWFzayA9IGludGNfZGlzYWJsZTsKKwlkLT5jaGlwLnVubWFzayA9IGludGNfZW5hYmxlOworCWQtPmNoaXAubWFza19hY2sgPSBpbnRjX2Rpc2FibGU7CisJZC0+Y2hpcC5zZXRfdHlwZSA9IGludGNfc2V0X3NlbnNlOworCisjaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NIMykgfHwgZGVmaW5lZChDT05GSUdfQ1BVX1NINEEpCisJaWYgKGRlc2MtPmFja19yZWdzKSB7CisJCWZvciAoaSA9IDA7IGkgPCBkZXNjLT5ucl9hY2tfcmVnczsgaSsrKQorCQkJayArPSBzYXZlX3JlZyhkLCBrLCBkZXNjLT5hY2tfcmVnc1tpXS5zZXRfcmVnLCAwKTsKKworCQlkLT5jaGlwLm1hc2tfYWNrID0gaW50Y19tYXNrX2FjazsKKwl9CisjZW5kaWYKKworCUJVR19PTihrID4gMjU2KTsgLyogX0lOVENfQUREUl9FKCkgYW5kIF9JTlRDX0FERFJfRCgpIGFyZSA4IGJpdHMgKi8KKworCWZvciAoaSA9IDA7IGkgPCBkZXNjLT5ucl92ZWN0b3JzOyBpKyspIHsKKwkJc3RydWN0IGludGNfdmVjdCAqdmVjdCA9IGRlc2MtPnZlY3RvcnMgKyBpOworCisJCWludGNfcmVnaXN0ZXJfaXJxKGRlc2MsIGQsIHZlY3QtPmVudW1faWQsIGV2dDJpcnEodmVjdC0+dmVjdCkpOworCX0KK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3BpL21wYzUyeHhfcHNjX3NwaS5jIGIvZHJpdmVycy9zcGkvbXBjNTJ4eF9wc2Nfc3BpLmMKaW5kZXggMjVlZGE3MS4uMGRlYmUxMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zcGkvbXBjNTJ4eF9wc2Nfc3BpLmMKKysrIGIvZHJpdmVycy9zcGkvbXBjNTJ4eF9wc2Nfc3BpLmMKQEAgLTE1LDEzICsxNSw3IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Ci0KLSNpZiBkZWZpbmVkKENPTkZJR19QUENfTUVSR0UpCiAjaW5jbHVkZSA8bGludXgvb2ZfcGxhdGZvcm0uaD4KLSNlbHNlCi0jaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Ci0jZW5kaWYKLQogI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgogI2luY2x1ZGUgPGxpbnV4L2NvbXBsZXRpb24uaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgpAQCAtMTA4LDEzICsxMDIsMTMgQEAKIAkgKiBCZWNhdXNlIHBzYy0+Y2NyIGlzIGRlZmluZWQgYXMgMTZiaXQgcmVnaXN0ZXIgaW5zdGVhZCBvZiAzMmJpdAogCSAqIGp1c3Qgc2V0IHRoZSBsb3dlciBieXRlIG9mIEJpdENsa0RpdgogCSAqLwotCWNjciA9IGluX2JlMTYoJnBzYy0+Y2NyKTsKKwljY3IgPSBpbl9iZTE2KCh1MTYgX19pb21lbSAqKSZwc2MtPmNjcik7CiAJY2NyICY9IDB4RkYwMDsKIAlpZiAoY3MtPnNwZWVkX2h6KQogCQljY3IgfD0gKE1DTEsgLyBjcy0+c3BlZWRfaHogLSAxKSAmIDB4RkY7CiAJZWxzZSAvKiBieSBkZWZhdWx0IFNQSSBDbGsgMU1IeiAqLwogCQljY3IgfD0gKE1DTEsgLyAxMDAwMDAwIC0gMSkgJiAweEZGOwotCW91dF9iZTE2KCZwc2MtPmNjciwgY2NyKTsKKwlvdXRfYmUxNigodTE2IF9faW9tZW0gKikmcHNjLT5jY3IsIGNjcik7CiAJbXBzLT5iaXRzX3Blcl93b3JkID0gY3MtPmJpdHNfcGVyX3dvcmQ7CiAKIAlpZiAobXBzLT5hY3RpdmF0ZV9jcykKQEAgLTM0Nyw3ICszNDEsNyBAQAogCS8qIENvbmZpZ3VyZSA4Yml0IGNvZGVjIG1vZGUgYXMgYSBTUEkgbWFzdGVyIGFuZCB1c2UgRU9GIGZsYWdzICovCiAJLyogU0lDUl9TSU1fQ09ERUM4fFNJQ1JfR0VOQ0xLfFNJQ1JfU1BJfFNJQ1JfTVNUUnxTSUNSX1VTRUVPRiAqLwogCW91dF9iZTMyKCZwc2MtPnNpY3IsIDB4MDE4MEM4MDApOwotCW91dF9iZTE2KCZwc2MtPmNjciwgMHgwNzBGKTsgLyogYnkgZGVmYXVsdCBTUEkgQ2xrIDFNSHogKi8KKwlvdXRfYmUxNigodTE2IF9faW9tZW0gKikmcHNjLT5jY3IsIDB4MDcwRik7IC8qIGRlZmF1bHQgU1BJIENsayAxTUh6ICovCiAKIAkvKiBTZXQgMm1zIERUTCBkZWxheSAqLwogCW91dF84KCZwc2MtPmN0dXIsIDB4MDApOwpAQCAtNDcxLDUzICs0NjUsNiBAQAogCXJldHVybiAwOwogfQogCi0jaWYgIWRlZmluZWQoQ09ORklHX1BQQ19NRVJHRSkKLXN0YXRpYyBpbnQgX19pbml0IG1wYzUyeHhfcHNjX3NwaV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCi17Ci0Jc3dpdGNoKGRldi0+aWQpIHsKLQljYXNlIDE6Ci0JY2FzZSAyOgotCWNhc2UgMzoKLQljYXNlIDY6Ci0JCXJldHVybiBtcGM1Mnh4X3BzY19zcGlfZG9fcHJvYmUoJmRldi0+ZGV2LAotCQkJTVBDNTJ4eF9QQShNUEM1Mnh4X1BTQ3hfT0ZGU0VUKGRldi0+aWQpKSwKLQkJCU1QQzUyeHhfUFNDX1NJWkUsIHBsYXRmb3JtX2dldF9pcnEoZGV2LCAwKSwgZGV2LT5pZCk7Ci0JZGVmYXVsdDoKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotfQotCi1zdGF0aWMgaW50IF9fZXhpdCBtcGM1Mnh4X3BzY19zcGlfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKLXsKLQlyZXR1cm4gbXBjNTJ4eF9wc2Nfc3BpX2RvX3JlbW92ZSgmZGV2LT5kZXYpOwotfQotCi0vKiB3b3JrIHdpdGggaG90cGx1ZyBhbmQgY29sZHBsdWcgKi8KLU1PRFVMRV9BTElBUygicGxhdGZvcm06bXBjNTJ4eC1wc2Mtc3BpIik7Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG1wYzUyeHhfcHNjX3NwaV9wbGF0Zm9ybV9kcml2ZXIgPSB7Ci0JLnJlbW92ZSA9IF9fZXhpdF9wKG1wYzUyeHhfcHNjX3NwaV9yZW1vdmUpLAotCS5kcml2ZXIgPSB7Ci0JCS5uYW1lID0gIm1wYzUyeHgtcHNjLXNwaSIsCi0JCS5vd25lciA9IFRISVNfTU9EVUxFLAotCX0sCi19OwotCi1zdGF0aWMgaW50IF9faW5pdCBtcGM1Mnh4X3BzY19zcGlfaW5pdCh2b2lkKQotewotCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcHJvYmUoJm1wYzUyeHhfcHNjX3NwaV9wbGF0Zm9ybV9kcml2ZXIsCi0JCQltcGM1Mnh4X3BzY19zcGlfcHJvYmUpOwotfQotbW9kdWxlX2luaXQobXBjNTJ4eF9wc2Nfc3BpX2luaXQpOwotCi1zdGF0aWMgdm9pZCBfX2V4aXQgbXBjNTJ4eF9wc2Nfc3BpX2V4aXQodm9pZCkKLXsKLQlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmbXBjNTJ4eF9wc2Nfc3BpX3BsYXRmb3JtX2RyaXZlcik7Ci19Ci1tb2R1bGVfZXhpdChtcGM1Mnh4X3BzY19zcGlfZXhpdCk7Ci0KLSNlbHNlCS8qIGRlZmluZWQoQ09ORklHX1BQQ19NRVJHRSkgKi8KLQogc3RhdGljIGludCBfX2luaXQgbXBjNTJ4eF9wc2Nfc3BpX29mX3Byb2JlKHN0cnVjdCBvZl9kZXZpY2UgKm9wLAogCWNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgKm1hdGNoKQogewpAQCAtNTg2LDggKzUzMyw2IEBACiB9CiBtb2R1bGVfZXhpdChtcGM1Mnh4X3BzY19zcGlfZXhpdCk7CiAKLSNlbmRpZgkvKiBkZWZpbmVkKENPTkZJR19QUENfTUVSR0UpICovCi0KIE1PRFVMRV9BVVRIT1IoIkRyYWdvcyBDYXJwIik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIk1QQzUyeHggUFNDIFNQSSBEcml2ZXIiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3BpL29tYXAyX21jc3BpLmMgYi9kcml2ZXJzL3NwaS9vbWFwMl9tY3NwaS5jCmluZGV4IDlkMjE4NmYuLjQ1NGEyNzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3BpL29tYXAyX21jc3BpLmMKKysrIGIvZHJpdmVycy9zcGkvb21hcDJfbWNzcGkuYwpAQCAtMTE5LDEyICsxMTksMTQgQEAKIAlzdHJ1Y3QgY2xrCQkqZmNrOwogCS8qIFZpcnR1YWwgYmFzZSBhZGRyZXNzIG9mIHRoZSBjb250cm9sbGVyICovCiAJdm9pZCBfX2lvbWVtCQkqYmFzZTsKKwl1bnNpZ25lZCBsb25nCQlwaHlzOwogCS8qIFNQSTEgaGFzIDQgY2hhbm5lbHMsIHdoaWxlIFNQSTIgaGFzIDIgKi8KIAlzdHJ1Y3Qgb21hcDJfbWNzcGlfZG1hCSpkbWFfY2hhbm5lbHM7CiB9OwogCiBzdHJ1Y3Qgb21hcDJfbWNzcGlfY3MgewogCXZvaWQgX19pb21lbQkJKmJhc2U7CisJdW5zaWduZWQgbG9uZwkJcGh5czsKIAlpbnQJCQl3b3JkX2xlbjsKIH07CiAKQEAgLTIzMyw3ICsyMzUsNyBAQAogCWMgPSBjb3VudDsKIAl3b3JkX2xlbiA9IGNzLT53b3JkX2xlbjsKIAotCWJhc2UgPSAodW5zaWduZWQgbG9uZykgaW9fdjJwKGNzLT5iYXNlKTsKKwliYXNlID0gY3MtPnBoeXM7CiAJdHhfcmVnID0gYmFzZSArIE9NQVAyX01DU1BJX1RYMDsKIAlyeF9yZWcgPSBiYXNlICsgT01BUDJfTUNTUElfUlgwOwogCXJ4ID0geGZlci0+cnhfYnVmOwpAQCAtNjMzLDYgKzYzNSw3IEBACiAJCWlmICghY3MpCiAJCQlyZXR1cm4gLUVOT01FTTsKIAkJY3MtPmJhc2UgPSBtY3NwaS0+YmFzZSArIHNwaS0+Y2hpcF9zZWxlY3QgKiAweDE0OworCQljcy0+cGh5cyA9IG1jc3BpLT5waHlzICsgc3BpLT5jaGlwX3NlbGVjdCAqIDB4MTQ7CiAJCXNwaS0+Y29udHJvbGxlcl9zdGF0ZSA9IGNzOwogCX0KIApAQCAtMTAwNSw3ICsxMDA4LDEzIEBACiAJCWdvdG8gZXJyMTsKIAl9CiAKLQltY3NwaS0+YmFzZSA9ICh2b2lkIF9faW9tZW0gKikgaW9fcDJ2KHItPnN0YXJ0KTsKKwltY3NwaS0+cGh5cyA9IHItPnN0YXJ0OworCW1jc3BpLT5iYXNlID0gaW9yZW1hcChyLT5zdGFydCwgci0+ZW5kIC0gci0+c3RhcnQgKyAxKTsKKwlpZiAoIW1jc3BpLT5iYXNlKSB7CisJCWRldl9kYmcoJnBkZXYtPmRldiwgImNhbid0IGlvcmVtYXAgTUNTUElcbiIpOworCQlzdGF0dXMgPSAtRU5PTUVNOworCQlnb3RvIGVycjFhYTsKKwl9CiAKIAlJTklUX1dPUksoJm1jc3BpLT53b3JrLCBvbWFwMl9tY3NwaV93b3JrKTsKIApAQCAtMTA1NSw2ICsxMDY0LDggQEAKIGVycjI6CiAJY2xrX3B1dChtY3NwaS0+aWNrKTsKIGVycjFhOgorCWlvdW5tYXAobWNzcGktPmJhc2UpOworZXJyMWFhOgogCXJlbGVhc2VfbWVtX3JlZ2lvbihyLT5zdGFydCwgKHItPmVuZCAtIHItPnN0YXJ0KSArIDEpOwogZXJyMToKIAlzcGlfbWFzdGVyX3B1dChtYXN0ZXIpOwpAQCAtMTA2Nyw2ICsxMDc4LDcgQEAKIAlzdHJ1Y3Qgb21hcDJfbWNzcGkJKm1jc3BpOwogCXN0cnVjdCBvbWFwMl9tY3NwaV9kbWEJKmRtYV9jaGFubmVsczsKIAlzdHJ1Y3QgcmVzb3VyY2UJCSpyOworCXZvaWQgX19pb21lbSAqYmFzZTsKIAogCW1hc3RlciA9IGRldl9nZXRfZHJ2ZGF0YSgmcGRldi0+ZGV2KTsKIAltY3NwaSA9IHNwaV9tYXN0ZXJfZ2V0X2RldmRhdGEobWFzdGVyKTsKQEAgLTEwNzgsNyArMTA5MCw5IEBACiAJciA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CiAJcmVsZWFzZV9tZW1fcmVnaW9uKHItPnN0YXJ0LCAoci0+ZW5kIC0gci0+c3RhcnQpICsgMSk7CiAKKwliYXNlID0gbWNzcGktPmJhc2U7CiAJc3BpX3VucmVnaXN0ZXJfbWFzdGVyKG1hc3Rlcik7CisJaW91bm1hcChiYXNlKTsKIAlrZnJlZShkbWFfY2hhbm5lbHMpOwogCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NwaS9vbWFwX3V3aXJlLmMgYi9kcml2ZXJzL3NwaS9vbWFwX3V3aXJlLmMKaW5kZXggNTUxNWViOS4uYmFiNmZmMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zcGkvb21hcF91d2lyZS5jCisrKyBiL2RyaXZlcnMvc3BpL29tYXBfdXdpcmUuYwpAQCAtNTksNyArNTksNiBAQAogICogYW5kIGlycXMgc2hvdWxkIHNob3cgdGhlcmUgdG9vLi4uCiAgKi8KICNkZWZpbmUgVVdJUkVfQkFTRV9QSFlTCQkweEZGRkIzMDAwCi0jZGVmaW5lIFVXSVJFX0JBU0UJCSgodm9pZCAqX19pb21lbSlJT19BRERSRVNTKFVXSVJFX0JBU0VfUEhZUykpCiAKIC8qIHVXaXJlIFJlZ2lzdGVyczogKi8KICNkZWZpbmUgVVdJUkVfSU9fU0laRSAweDIwCkBAIC0xMDMsMTYgKzEwMiwyMSBAQAogfTsKIAogLyogUkVWSVNJVCBjb21waWxlIHRpbWUgY29uc3RhbnQgZm9yIGlkeF9zaGlmdD8gKi8KKy8qCisgKiBPciwgcHV0IGl0IGluIGEgc3RydWN0dXJlIHdoaWNoIGlzIHVzZWQgdGhyb3VnaG91dCB0aGUgZHJpdmVyOworICogdGhhdCBhdm9pZHMgaGF2aW5nIHRvIGlzc3VlIHR3byBsb2FkcyBmb3IgZWFjaCBiaXQgb2Ygc3RhdGljIGRhdGEuCisgKi8KIHN0YXRpYyB1bnNpZ25lZCBpbnQgdXdpcmVfaWR4X3NoaWZ0Oworc3RhdGljIHZvaWQgX19pb21lbSAqdXdpcmVfYmFzZTsKIAogc3RhdGljIGlubGluZSB2b2lkIHV3aXJlX3dyaXRlX3JlZyhpbnQgaWR4LCB1MTYgdmFsKQogewotCV9fcmF3X3dyaXRldyh2YWwsIFVXSVJFX0JBU0UgKyAoaWR4IDw8IHV3aXJlX2lkeF9zaGlmdCkpOworCV9fcmF3X3dyaXRldyh2YWwsIHV3aXJlX2Jhc2UgKyAoaWR4IDw8IHV3aXJlX2lkeF9zaGlmdCkpOwogfQogCiBzdGF0aWMgaW5saW5lIHUxNiB1d2lyZV9yZWFkX3JlZyhpbnQgaWR4KQogewotCXJldHVybiBfX3Jhd19yZWFkdyhVV0lSRV9CQVNFICsgKGlkeCA8PCB1d2lyZV9pZHhfc2hpZnQpKTsKKwlyZXR1cm4gX19yYXdfcmVhZHcodXdpcmVfYmFzZSArIChpZHggPDwgdXdpcmVfaWR4X3NoaWZ0KSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBvbWFwX3V3aXJlX2NvbmZpZ3VyZV9tb2RlKHU4IGNzLCB1bnNpZ25lZCBsb25nIGZsYWdzKQpAQCAtNDkyLDYgKzQ5NiwxNCBAQAogCQlyZXR1cm4gLUVOT0RFVjsKIAogCXV3aXJlID0gc3BpX21hc3Rlcl9nZXRfZGV2ZGF0YShtYXN0ZXIpOworCisJdXdpcmVfYmFzZSA9IGlvcmVtYXAoVVdJUkVfQkFTRV9QSFlTLCBVV0lSRV9JT19TSVpFKTsKKwlpZiAoIXV3aXJlX2Jhc2UpIHsKKwkJZGV2X2RiZygmcGRldi0+ZGV2LCAiY2FuJ3QgaW9yZW1hcCBVV0lSRVxuIik7CisJCXNwaV9tYXN0ZXJfcHV0KG1hc3Rlcik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwogCWRldl9zZXRfZHJ2ZGF0YSgmcGRldi0+ZGV2LCB1d2lyZSk7CiAKIAl1d2lyZS0+Y2sgPSBjbGtfZ2V0KCZwZGV2LT5kZXYsICJhcm14b3JfY2siKTsKQEAgLTUyMCw4ICs1MzIsMTAgQEAKIAl1d2lyZS0+Yml0YmFuZy50eHJ4X2J1ZnMgPSB1d2lyZV90eHJ4OwogCiAJc3RhdHVzID0gc3BpX2JpdGJhbmdfc3RhcnQoJnV3aXJlLT5iaXRiYW5nKTsKLQlpZiAoc3RhdHVzIDwgMCkKKwlpZiAoc3RhdHVzIDwgMCkgewogCQl1d2lyZV9vZmYodXdpcmUpOworCQlpb3VubWFwKHV3aXJlX2Jhc2UpOworCX0KIAlyZXR1cm4gc3RhdHVzOwogfQogCkBAIC01MzQsNiArNTQ4LDcgQEAKIAogCXN0YXR1cyA9IHNwaV9iaXRiYW5nX3N0b3AoJnV3aXJlLT5iaXRiYW5nKTsKIAl1d2lyZV9vZmYodXdpcmUpOworCWlvdW5tYXAodXdpcmVfYmFzZSk7CiAJcmV0dXJuIHN0YXR1czsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zcGkvb3Jpb25fc3BpLmMgYi9kcml2ZXJzL3NwaS9vcmlvbl9zcGkuYwppbmRleCBiODcyYmZhLi4wMTRiZWNiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NwaS9vcmlvbl9zcGkuYworKysgYi9kcml2ZXJzL3NwaS9vcmlvbl9zcGkuYwpAQCAtMzY0LDYgKzM2NCwxMSBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKKwkvKiBGaXggYWMgdGltaW5nIGlmIHJlcXVpcmVkLiAgICovCisJaWYgKG9yaW9uX3NwaS0+c3BpX2luZm8tPmVuYWJsZV9jbG9ja19maXgpCisJCW9yaW9uX3NwaV9zZXRiaXRzKG9yaW9uX3NwaSwgT1JJT05fU1BJX0lGX0NPTkZJR19SRUcsCisJCQkJICAoMSA8PCAxNCkpOworCiAJaWYgKHNwaS0+Yml0c19wZXJfd29yZCA9PSAwKQogCQlzcGktPmJpdHNfcGVyX3dvcmQgPSA4OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NwaS9weGEyeHhfc3BpLmMgYi9kcml2ZXJzL3NwaS9weGEyeHhfc3BpLmMKaW5kZXggZDQ3ZDM2My4uZGFlODdiMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zcGkvcHhhMnh4X3NwaS5jCisrKyBiL2RyaXZlcnMvc3BpL3B4YTJ4eF9zcGkuYwpAQCAtNDcsNiArNDcsMTAgQEAKIAogI2RlZmluZSBNQVhfQlVTRVMgMwogCisjZGVmaW5lIFJYX1RIUkVTSF9ERkxUIAk4CisjZGVmaW5lIFRYX1RIUkVTSF9ERkxUIAk4CisjZGVmaW5lIFRJTU9VVF9ERkxUCQkxMDAwCisKICNkZWZpbmUgRE1BX0lOVF9NQVNLCQkoRENTUl9FTkRJTlRSIHwgRENTUl9TVEFSVElOVFIgfCBEQ1NSX0JVU0VSUikKICNkZWZpbmUgUkVTRVRfRE1BX0NIQU5ORUwJKERDU1JfTk9ERVNDIHwgRE1BX0lOVF9NQVNLKQogI2RlZmluZSBJU19ETUFfQUxJR05FRCh4KQkoKCgodTMyKSh4KSkgJiAweDA3KSA9PSAwKQpAQCAtMTE3MSw2ICsxMTc1LDggQEAKIAlzdHJ1Y3QgZHJpdmVyX2RhdGEgKmRydl9kYXRhID0gc3BpX21hc3Rlcl9nZXRfZGV2ZGF0YShzcGktPm1hc3Rlcik7CiAJc3RydWN0IHNzcF9kZXZpY2UgKnNzcCA9IGRydl9kYXRhLT5zc3A7CiAJdW5zaWduZWQgaW50IGNsa19kaXY7CisJdWludCB0eF90aHJlcyA9IFRYX1RIUkVTSF9ERkxUOworCXVpbnQgcnhfdGhyZXMgPSBSWF9USFJFU0hfREZMVDsKIAogCWlmICghc3BpLT5iaXRzX3Blcl93b3JkKQogCQlzcGktPmJpdHNfcGVyX3dvcmQgPSA4OwpAQCAtMTIwOSw4ICsxMjE1LDcgQEAKIAogCQljaGlwLT5jc19jb250cm9sID0gbnVsbF9jc19jb250cm9sOwogCQljaGlwLT5lbmFibGVfZG1hID0gMDsKLQkJY2hpcC0+dGltZW91dCA9IDEwMDA7Ci0JCWNoaXAtPnRocmVzaG9sZCA9IFNTQ1IxX1J4VHJlc2goMSkgfCBTU0NSMV9UeFRyZXNoKDEpOworCQljaGlwLT50aW1lb3V0ID0gVElNT1VUX0RGTFQ7CiAJCWNoaXAtPmRtYV9idXJzdF9zaXplID0gZHJ2X2RhdGEtPm1hc3Rlcl9pbmZvLT5lbmFibGVfZG1hID8KIAkJCQkJRENNRF9CVVJTVDggOiAwOwogCX0KQEAgLTEyMjQsMjIgKzEyMjksMjEgQEAKIAlpZiAoY2hpcF9pbmZvKSB7CiAJCWlmIChjaGlwX2luZm8tPmNzX2NvbnRyb2wpCiAJCQljaGlwLT5jc19jb250cm9sID0gY2hpcF9pbmZvLT5jc19jb250cm9sOwotCi0JCWNoaXAtPnRpbWVvdXQgPSBjaGlwX2luZm8tPnRpbWVvdXQ7Ci0KLQkJY2hpcC0+dGhyZXNob2xkID0gKFNTQ1IxX1J4VHJlc2goY2hpcF9pbmZvLT5yeF90aHJlc2hvbGQpICYKLQkJCQkJCQkJU1NDUjFfUkZUKSB8Ci0JCQkJKFNTQ1IxX1R4VHJlc2goY2hpcF9pbmZvLT50eF90aHJlc2hvbGQpICYKLQkJCQkJCQkJU1NDUjFfVEZUKTsKLQotCQljaGlwLT5lbmFibGVfZG1hID0gY2hpcF9pbmZvLT5kbWFfYnVyc3Rfc2l6ZSAhPSAwCi0JCQkJCSYmIGRydl9kYXRhLT5tYXN0ZXJfaW5mby0+ZW5hYmxlX2RtYTsKKwkJaWYgKGNoaXBfaW5mby0+dGltZW91dCkKKwkJCWNoaXAtPnRpbWVvdXQgPSBjaGlwX2luZm8tPnRpbWVvdXQ7CisJCWlmIChjaGlwX2luZm8tPnR4X3RocmVzaG9sZCkKKwkJCXR4X3RocmVzID0gY2hpcF9pbmZvLT50eF90aHJlc2hvbGQ7CisJCWlmIChjaGlwX2luZm8tPnJ4X3RocmVzaG9sZCkKKwkJCXJ4X3RocmVzID0gY2hpcF9pbmZvLT5yeF90aHJlc2hvbGQ7CisJCWNoaXAtPmVuYWJsZV9kbWEgPSBkcnZfZGF0YS0+bWFzdGVyX2luZm8tPmVuYWJsZV9kbWE7CiAJCWNoaXAtPmRtYV90aHJlc2hvbGQgPSAwOwotCiAJCWlmIChjaGlwX2luZm8tPmVuYWJsZV9sb29wYmFjaykKIAkJCWNoaXAtPmNyMSA9IFNTQ1IxX0xCTTsKIAl9CiAKKwljaGlwLT50aHJlc2hvbGQgPSAoU1NDUjFfUnhUcmVzaChyeF90aHJlcykgJiBTU0NSMV9SRlQpIHwKKwkJCShTU0NSMV9UeFRyZXNoKHR4X3RocmVzKSAmIFNTQ1IxX1RGVCk7CisKIAkvKiBzZXQgZG1hIGJ1cnN0IGFuZCB0aHJlc2hvbGQgb3V0c2lkZSBvZiBjaGlwX2luZm8gcGF0aCBzbyB0aGF0IGlmCiAJICogY2hpcF9pbmZvIGdvZXMgYXdheSBhZnRlciBzZXR0aW5nIGNoaXAtPmVuYWJsZV9kbWEsIHRoZQogCSAqIGJ1cnN0IGFuZCB0aHJlc2hvbGQgY2FuIHN0aWxsIHJlc3BvbmQgdG8gY2hhbmdlcyBpbiBiaXRzX3Blcl93b3JkICovCkBAIC0xMjY4LDE3ICsxMjcyLDE5IEBACiAKIAkvKiBOT1RFOiAgUFhBMjV4X1NTUCBfY291bGRfIHVzZSBleHRlcm5hbCBjbG9ja2luZyAuLi4gKi8KIAlpZiAoZHJ2X2RhdGEtPnNzcF90eXBlICE9IFBYQTI1eF9TU1ApCi0JCWRldl9kYmcoJnNwaS0+ZGV2LCAiJWQgYml0cy93b3JkLCAlbGQgSHosIG1vZGUgJWRcbiIsCisJCWRldl9kYmcoJnNwaS0+ZGV2LCAiJWQgYml0cy93b3JkLCAlbGQgSHosIG1vZGUgJWQsICVzXG4iLAogCQkJCXNwaS0+Yml0c19wZXJfd29yZCwKIAkJCQljbGtfZ2V0X3JhdGUoc3NwLT5jbGspCiAJCQkJCS8gKDEgKyAoKGNoaXAtPmNyMCAmIFNTQ1IwX1NDUikgPj4gOCkpLAotCQkJCXNwaS0+bW9kZSAmIDB4Myk7CisJCQkJc3BpLT5tb2RlICYgMHgzLAorCQkJCWNoaXAtPmVuYWJsZV9kbWEgPyAiRE1BIiA6ICJQSU8iKTsKIAllbHNlCi0JCWRldl9kYmcoJnNwaS0+ZGV2LCAiJWQgYml0cy93b3JkLCAlbGQgSHosIG1vZGUgJWRcbiIsCisJCWRldl9kYmcoJnNwaS0+ZGV2LCAiJWQgYml0cy93b3JkLCAlbGQgSHosIG1vZGUgJWQsICVzXG4iLAogCQkJCXNwaS0+Yml0c19wZXJfd29yZCwKLQkJCQljbGtfZ2V0X3JhdGUoc3NwLT5jbGspCisJCQkJY2xrX2dldF9yYXRlKHNzcC0+Y2xrKSAvIDIKIAkJCQkJLyAoMSArICgoY2hpcC0+Y3IwICYgU1NDUjBfU0NSKSA+PiA4KSksCi0JCQkJc3BpLT5tb2RlICYgMHgzKTsKKwkJCQlzcGktPm1vZGUgJiAweDMsCisJCQkJY2hpcC0+ZW5hYmxlX2RtYSA/ICJETUEiIDogIlBJTyIpOwogCiAJaWYgKHNwaS0+Yml0c19wZXJfd29yZCA8PSA4KSB7CiAJCWNoaXAtPm5fYnl0ZXMgPSAxOwpAQCAtMTQwNyw5ICsxNDEzLDkgQEAKIAlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmcGRldi0+ZGV2OwogCXN0cnVjdCBweGEyeHhfc3BpX21hc3RlciAqcGxhdGZvcm1faW5mbzsKIAlzdHJ1Y3Qgc3BpX21hc3RlciAqbWFzdGVyOwotCXN0cnVjdCBkcml2ZXJfZGF0YSAqZHJ2X2RhdGEgPSBOVUxMOworCXN0cnVjdCBkcml2ZXJfZGF0YSAqZHJ2X2RhdGE7CiAJc3RydWN0IHNzcF9kZXZpY2UgKnNzcDsKLQlpbnQgc3RhdHVzID0gMDsKKwlpbnQgc3RhdHVzOwogCiAJcGxhdGZvcm1faW5mbyA9IGRldi0+cGxhdGZvcm1fZGF0YTsKIApAQCAtMTQyMiw3ICsxNDI4LDcgQEAKIAkvKiBBbGxvY2F0ZSBtYXN0ZXIgd2l0aCBzcGFjZSBmb3IgZHJ2X2RhdGEgYW5kIG51bGwgZG1hIGJ1ZmZlciAqLwogCW1hc3RlciA9IHNwaV9hbGxvY19tYXN0ZXIoZGV2LCBzaXplb2Yoc3RydWN0IGRyaXZlcl9kYXRhKSArIDE2KTsKIAlpZiAoIW1hc3RlcikgewotCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJjYW4gbm90IGFsbG9jIHNwaV9tYXN0ZXJcbiIpOworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJjYW5ub3QgYWxsb2Mgc3BpX21hc3RlclxuIik7CiAJCXNzcF9mcmVlKHNzcCk7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KQEAgLTE0NTgsNyArMTQ2NCw3IEBACiAKIAlzdGF0dXMgPSByZXF1ZXN0X2lycShzc3AtPmlycSwgc3NwX2ludCwgMCwgZGV2LT5idXNfaWQsIGRydl9kYXRhKTsKIAlpZiAoc3RhdHVzIDwgMCkgewotCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJjYW4gbm90IGdldCBJUlFcbiIpOworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJjYW5ub3QgZ2V0IElSUSAlZFxuIiwgc3NwLT5pcnEpOwogCQlnb3RvIG91dF9lcnJvcl9tYXN0ZXJfYWxsb2M7CiAJfQogCkBAIC0xNDk4LDcgKzE1MDQsOSBAQAogCiAJLyogTG9hZCBkZWZhdWx0IFNTUCBjb25maWd1cmF0aW9uICovCiAJd3JpdGVfU1NDUjAoMCwgZHJ2X2RhdGEtPmlvYWRkcik7Ci0Jd3JpdGVfU1NDUjEoU1NDUjFfUnhUcmVzaCg0KSB8IFNTQ1IxX1R4VHJlc2goMTIpLCBkcnZfZGF0YS0+aW9hZGRyKTsKKwl3cml0ZV9TU0NSMShTU0NSMV9SeFRyZXNoKFJYX1RIUkVTSF9ERkxUKSB8CisJCQkJU1NDUjFfVHhUcmVzaChUWF9USFJFU0hfREZMVCksCisJCQkJZHJ2X2RhdGEtPmlvYWRkcik7CiAJd3JpdGVfU1NDUjAoU1NDUjBfU2VyQ2xrRGl2KDIpCiAJCQl8IFNTQ1IwX01vdG9yb2xhCiAJCQl8IFNTQ1IwX0RhdGFTaXplKDgpLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zcGkvc3BpLmMgYi9kcml2ZXJzL3NwaS9zcGkuYwppbmRleCA3NWU4Njg2Li4zNzM0ZGM5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3NwaS9zcGkuYworKysgYi9kcml2ZXJzL3NwaS9zcGkuYwpAQCAtNjYwLDcgKzY2MCw3IEBACiAKIAlpbnQJCQlzdGF0dXM7CiAJc3RydWN0IHNwaV9tZXNzYWdlCW1lc3NhZ2U7Ci0Jc3RydWN0IHNwaV90cmFuc2Zlcgl4WzJdOworCXN0cnVjdCBzcGlfdHJhbnNmZXIJeDsKIAl1OAkJCSpsb2NhbF9idWY7CiAKIAkvKiBVc2UgcHJlYWxsb2NhdGVkIERNQS1zYWZlIGJ1ZmZlci4gIFdlIGNhbid0IGF2b2lkIGNvcHlpbmcgaGVyZSwKQEAgLTY3MSwxNSArNjcxLDkgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlzcGlfbWVzc2FnZV9pbml0KCZtZXNzYWdlKTsKLQltZW1zZXQoeCwgMCwgc2l6ZW9mIHgpOwotCWlmIChuX3R4KSB7Ci0JCXhbMF0ubGVuID0gbl90eDsKLQkJc3BpX21lc3NhZ2VfYWRkX3RhaWwoJnhbMF0sICZtZXNzYWdlKTsKLQl9Ci0JaWYgKG5fcngpIHsKLQkJeFsxXS5sZW4gPSBuX3J4OwotCQlzcGlfbWVzc2FnZV9hZGRfdGFpbCgmeFsxXSwgJm1lc3NhZ2UpOwotCX0KKwltZW1zZXQoJngsIDAsIHNpemVvZiB4KTsKKwl4LmxlbiA9IG5fdHggKyBuX3J4OworCXNwaV9tZXNzYWdlX2FkZF90YWlsKCZ4LCAmbWVzc2FnZSk7CiAKIAkvKiAuLi4gdW5sZXNzIHNvbWVvbmUgZWxzZSBpcyB1c2luZyB0aGUgcHJlLWFsbG9jYXRlZCBidWZmZXIgKi8KIAlpZiAoIW11dGV4X3RyeWxvY2soJmxvY2spKSB7CkBAIC02OTAsMTUgKzY4NCwxNSBAQAogCQlsb2NhbF9idWYgPSBidWY7CiAKIAltZW1jcHkobG9jYWxfYnVmLCB0eGJ1Ziwgbl90eCk7Ci0JeFswXS50eF9idWYgPSBsb2NhbF9idWY7Ci0JeFsxXS5yeF9idWYgPSBsb2NhbF9idWYgKyBuX3R4OworCXgudHhfYnVmID0gbG9jYWxfYnVmOworCXgucnhfYnVmID0gbG9jYWxfYnVmOwogCiAJLyogZG8gdGhlIGkvbyAqLwogCXN0YXR1cyA9IHNwaV9zeW5jKHNwaSwgJm1lc3NhZ2UpOwogCWlmIChzdGF0dXMgPT0gMCkKLQkJbWVtY3B5KHJ4YnVmLCB4WzFdLnJ4X2J1Ziwgbl9yeCk7CisJCW1lbWNweShyeGJ1ZiwgeC5yeF9idWYgKyBuX3R4LCBuX3J4KTsKIAotCWlmICh4WzBdLnR4X2J1ZiA9PSBidWYpCisJaWYgKHgudHhfYnVmID09IGJ1ZikKIAkJbXV0ZXhfdW5sb2NrKCZsb2NrKTsKIAllbHNlCiAJCWtmcmVlKGxvY2FsX2J1Zik7CkBAIC03NDQsNSArNzM4LDUgQEAKICAqIGRyaXZlciByZWdpc3RyYXRpb24pIF9jb3VsZF8gYmUgZHluYW1pY2FsbHkgbGlua2VkIChtb2R1bGFyKSAuLi4gY29zdHMKICAqIGluY2x1ZGUgbmVlZGluZyB0byBoYXZlIGJvYXJkaW5mbyBkYXRhIHN0cnVjdHVyZXMgYmUgbXVjaCBtb3JlIHB1YmxpYy4KICAqLwotc3Vic3lzX2luaXRjYWxsKHNwaV9pbml0KTsKK3Bvc3Rjb3JlX2luaXRjYWxsKHNwaV9pbml0KTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zcGkvc3BpX3MzYzI0eHguYyBiL2RyaXZlcnMvc3BpL3NwaV9zM2MyNHh4LmMKaW5kZXggM2ViNDE0Yi4uYzI1MmNiYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zcGkvc3BpX3MzYzI0eHguYworKysgYi9kcml2ZXJzL3NwaS9zcGlfczNjMjR4eC5jCkBAIC0yNDcsNiArMjQ3LDkgQEAKIAl3cml0ZWIoMHhmZiwgaHctPnJlZ3MgKyBTM0MyNDEwX1NQUFJFKTsKIAl3cml0ZWIoU1BQSU5fREVGQVVMVCwgaHctPnJlZ3MgKyBTM0MyNDEwX1NQUElOKTsKIAl3cml0ZWIoU1BDT05fREVGQVVMVCwgaHctPnJlZ3MgKyBTM0MyNDEwX1NQQ09OKTsKKworCWlmIChody0+cGRhdGEgJiYgaHctPnBkYXRhLT5ncGlvX3NldHVwKQorCQlody0+cGRhdGEtPmdwaW9fc2V0dXAoaHctPnBkYXRhLCAxKTsKIH0KIAogc3RhdGljIGludCBfX2luaXQgczNjMjR4eF9zcGlfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKQEAgLTQxMiw2ICs0MTUsOSBAQAogewogCXN0cnVjdCBzM2MyNHh4X3NwaSAqaHcgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAorCWlmIChody0+cGRhdGEgJiYgaHctPnBkYXRhLT5ncGlvX3NldHVwKQorCQlody0+cGRhdGEtPmdwaW9fc2V0dXAoaHctPnBkYXRhLCAwKTsKKwogCWNsa19kaXNhYmxlKGh3LT5jbGspOwogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zcGkvc3BpZGV2LmMgYi9kcml2ZXJzL3NwaS9zcGlkZXYuYwppbmRleCBlNWUwY2ZlLi44OWE0Mzc1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3NwaS9zcGlkZXYuYworKysgYi9kcml2ZXJzL3NwaS9zcGlkZXYuYwpAQCAtNTgzLDEwICs1ODMsOSBAQAogCQlzdHJ1Y3QgZGV2aWNlICpkZXY7CiAKIAkJc3BpZGV2LT5kZXZ0ID0gTUtERVYoU1BJREVWX01BSk9SLCBtaW5vcik7Ci0JCWRldiA9IGRldmljZV9jcmVhdGVfZHJ2ZGF0YShzcGlkZXZfY2xhc3MsICZzcGktPmRldiwKLQkJCQlzcGlkZXYtPmRldnQsIHNwaWRldiwKLQkJCQkic3BpZGV2JWQuJWQiLAotCQkJCXNwaS0+bWFzdGVyLT5idXNfbnVtLCBzcGktPmNoaXBfc2VsZWN0KTsKKwkJZGV2ID0gZGV2aWNlX2NyZWF0ZShzcGlkZXZfY2xhc3MsICZzcGktPmRldiwgc3BpZGV2LT5kZXZ0LAorCQkJCSAgICBzcGlkZXYsICJzcGlkZXYlZC4lZCIsCisJCQkJICAgIHNwaS0+bWFzdGVyLT5idXNfbnVtLCBzcGktPmNoaXBfc2VsZWN0KTsKIAkJc3RhdHVzID0gSVNfRVJSKGRldikgPyBQVFJfRVJSKGRldikgOiAwOwogCX0gZWxzZSB7CiAJCWRldl9kYmcoJnNwaS0+ZGV2LCAibm8gbWlub3IgbnVtYmVyIGF2YWlsYWJsZSFcbiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zc2IvcGNtY2lhLmMgYi9kcml2ZXJzL3NzYi9wY21jaWEuYwppbmRleCAyNGMyYTQ2Li5mYmZhZGJhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NzYi9wY21jaWEuYworKysgYi9kcml2ZXJzL3NzYi9wY21jaWEuYwpAQCAtODAsNyArODAsNyBAQAogCXJlZy5BY3Rpb24gPSBDU19XUklURTsKIAlyZWcuVmFsdWUgPSB2YWx1ZTsKIAlyZXMgPSBwY21jaWFfYWNjZXNzX2NvbmZpZ3VyYXRpb25fcmVnaXN0ZXIoYnVzLT5ob3N0X3BjbWNpYSwgJnJlZyk7Ci0JaWYgKHVubGlrZWx5KHJlcyAhPSBDU19TVUNDRVNTKSkKKwlpZiAodW5saWtlbHkocmVzICE9IDApKQogCQlyZXR1cm4gLUVCVVNZOwogCiAJcmV0dXJuIDA7CkBAIC05Niw3ICs5Niw3IEBACiAJcmVnLk9mZnNldCA9IG9mZnNldDsKIAlyZWcuQWN0aW9uID0gQ1NfUkVBRDsKIAlyZXMgPSBwY21jaWFfYWNjZXNzX2NvbmZpZ3VyYXRpb25fcmVnaXN0ZXIoYnVzLT5ob3N0X3BjbWNpYSwgJnJlZyk7Ci0JaWYgKHVubGlrZWx5KHJlcyAhPSBDU19TVUNDRVNTKSkKKwlpZiAodW5saWtlbHkocmVzICE9IDApKQogCQlyZXR1cm4gLUVCVVNZOwogCSp2YWx1ZSA9IHJlZy5WYWx1ZTsKIApAQCAtNjM4LDE3ICs2MzgsMTcgQEAKIAl0dXBsZS5UdXBsZURhdGEgPSBidWY7CiAJdHVwbGUuVHVwbGVEYXRhTWF4ID0gc2l6ZW9mKGJ1Zik7CiAJcmVzID0gcGNtY2lhX2dldF9maXJzdF90dXBsZShidXMtPmhvc3RfcGNtY2lhLCAmdHVwbGUpOwotCUdPVE9fRVJST1JfT04ocmVzICE9IENTX1NVQ0NFU1MsICJNQUMgZmlyc3QgdHBsIik7CisJR09UT19FUlJPUl9PTihyZXMgIT0gMCwgIk1BQyBmaXJzdCB0cGwiKTsKIAlyZXMgPSBwY21jaWFfZ2V0X3R1cGxlX2RhdGEoYnVzLT5ob3N0X3BjbWNpYSwgJnR1cGxlKTsKLQlHT1RPX0VSUk9SX09OKHJlcyAhPSBDU19TVUNDRVNTLCAiTUFDIGZpcnN0IHRwbCBkYXRhIik7CisJR09UT19FUlJPUl9PTihyZXMgIT0gMCwgIk1BQyBmaXJzdCB0cGwgZGF0YSIpOwogCXdoaWxlICgxKSB7CiAJCUdPVE9fRVJST1JfT04odHVwbGUuVHVwbGVEYXRhTGVuIDwgMSwgIk1BQyB0cGwgPCAxIik7CiAJCWlmICh0dXBsZS5UdXBsZURhdGFbMF0gPT0gQ0lTVFBMX0ZVTkNFX0xBTl9OT0RFX0lEKQogCQkJYnJlYWs7CiAJCXJlcyA9IHBjbWNpYV9nZXRfbmV4dF90dXBsZShidXMtPmhvc3RfcGNtY2lhLCAmdHVwbGUpOwotCQlHT1RPX0VSUk9SX09OKHJlcyAhPSBDU19TVUNDRVNTLCAiTUFDIG5leHQgdHBsIik7CisJCUdPVE9fRVJST1JfT04ocmVzICE9IDAsICJNQUMgbmV4dCB0cGwiKTsKIAkJcmVzID0gcGNtY2lhX2dldF90dXBsZV9kYXRhKGJ1cy0+aG9zdF9wY21jaWEsICZ0dXBsZSk7Ci0JCUdPVE9fRVJST1JfT04ocmVzICE9IENTX1NVQ0NFU1MsICJNQUMgbmV4dCB0cGwgZGF0YSIpOworCQlHT1RPX0VSUk9SX09OKHJlcyAhPSAwLCAiTUFDIG5leHQgdHBsIGRhdGEiKTsKIAl9CiAJR09UT19FUlJPUl9PTih0dXBsZS5UdXBsZURhdGFMZW4gIT0gRVRIX0FMRU4gKyAyLCAiTUFDIHRwbCBzaXplIik7CiAJbWVtY3B5KHNwcm9tLT5pbDBtYWMsICZ0dXBsZS5UdXBsZURhdGFbMl0sIEVUSF9BTEVOKTsKQEAgLTY1OSw5ICs2NTksOSBAQAogCXR1cGxlLlR1cGxlRGF0YSA9IGJ1ZjsKIAl0dXBsZS5UdXBsZURhdGFNYXggPSBzaXplb2YoYnVmKTsKIAlyZXMgPSBwY21jaWFfZ2V0X2ZpcnN0X3R1cGxlKGJ1cy0+aG9zdF9wY21jaWEsICZ0dXBsZSk7Ci0JR09UT19FUlJPUl9PTihyZXMgIT0gQ1NfU1VDQ0VTUywgIlZFTiBmaXJzdCB0cGwiKTsKKwlHT1RPX0VSUk9SX09OKHJlcyAhPSAwLCAiVkVOIGZpcnN0IHRwbCIpOwogCXJlcyA9IHBjbWNpYV9nZXRfdHVwbGVfZGF0YShidXMtPmhvc3RfcGNtY2lhLCAmdHVwbGUpOwotCUdPVE9fRVJST1JfT04ocmVzICE9IENTX1NVQ0NFU1MsICJWRU4gZmlyc3QgdHBsIGRhdGEiKTsKKwlHT1RPX0VSUk9SX09OKHJlcyAhPSAwLCAiVkVOIGZpcnN0IHRwbCBkYXRhIik7CiAJd2hpbGUgKDEpIHsKIAkJR09UT19FUlJPUl9PTih0dXBsZS5UdXBsZURhdGFMZW4gPCAxLCAiVkVOIHRwbCA8IDEiKTsKIAkJc3dpdGNoICh0dXBsZS5UdXBsZURhdGFbMF0pIHsKQEAgLTczMywxMSArNzMzLDExIEBACiAJCQlicmVhazsKIAkJfQogCQlyZXMgPSBwY21jaWFfZ2V0X25leHRfdHVwbGUoYnVzLT5ob3N0X3BjbWNpYSwgJnR1cGxlKTsKLQkJaWYgKHJlcyA9PSBDU19OT19NT1JFX0lURU1TKQorCQlpZiAocmVzID09IC1FTk9TUEMpCiAJCQlicmVhazsKLQkJR09UT19FUlJPUl9PTihyZXMgIT0gQ1NfU1VDQ0VTUywgIlZFTiBuZXh0IHRwbCIpOworCQlHT1RPX0VSUk9SX09OKHJlcyAhPSAwLCAiVkVOIG5leHQgdHBsIik7CiAJCXJlcyA9IHBjbWNpYV9nZXRfdHVwbGVfZGF0YShidXMtPmhvc3RfcGNtY2lhLCAmdHVwbGUpOwotCQlHT1RPX0VSUk9SX09OKHJlcyAhPSBDU19TVUNDRVNTLCAiVkVOIG5leHQgdHBsIGRhdGEiKTsKKwkJR09UT19FUlJPUl9PTihyZXMgIT0gMCwgIlZFTiBuZXh0IHRwbCBkYXRhIik7CiAJfQogCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvS2NvbmZpZyBiL2RyaXZlcnMvc3RhZ2luZy9LY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhNzlkZWMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvS2NvbmZpZwpAQCAtMCwwICsxLDQ2IEBACittZW51Y29uZmlnIFNUQUdJTkcKKwlib29sICJTdGFnaW5nIGRyaXZlcnMiCisJZGVmYXVsdCBuCisJLS0taGVscC0tLQorCSAgVGhpcyBvcHRpb24gYWxsb3dzIHlvdSB0byBzZWxlY3QgYSBudW1iZXIgb2YgZHJpdmVycyB0aGF0IGFyZQorCSAgbm90IG9mIHRoZSAibm9ybWFsIiBMaW51eCBrZXJuZWwgcXVhbGl0eSBsZXZlbC4gIFRoZXNlIGRyaXZlcnMKKwkgIGFyZSBwbGFjZWQgaGVyZSBpbiBvcmRlciB0byBnZXQgYSB3aWRlciBhdWRpZW5jZSBmb3IgdXNlIG9mCisJICB0aGVtLiAgUGxlYXNlIG5vdGUgdGhhdCB0aGVzZSBkcml2ZXJzIGFyZSB1bmRlciBoZWF2eQorCSAgZGV2ZWxvcG1lbnQsIG1heSBvciBtYXkgbm90IHdvcmssIGFuZCBtYXkgY29udGFpbiB1c2Vyc3BhY2UKKwkgIGludGVyZmFjZXMgdGhhdCBtb3N0IGxpa2VseSB3aWxsIGJlIGNoYW5nZWQgaW4gdGhlIG5lYXIKKwkgIGZ1dHVyZS4KKworCSAgVXNpbmcgYW55IG9mIHRoZXNlIGRyaXZlcnMgd2lsbCB0YWludCB5b3VyIGtlcm5lbCB3aGljaCBtaWdodAorCSAgYWZmZWN0IHN1cHBvcnQgb3B0aW9ucyBmcm9tIGJvdGggdGhlIGNvbW11bml0eSwgYW5kIHZhcmlvdXMKKwkgIGNvbW1lcmNpYWwgc3VwcG9ydCBvcmdpbml6YXRpb25zLgorCisJICBJZiB5b3Ugd2lzaCB0byB3b3JrIG9uIHRoZXNlIGRyaXZlcnMsIHRvIGhlbHAgaW1wcm92ZSB0aGVtLCBvcgorCSAgdG8gcmVwb3J0IHByb2JsZW1zIHlvdSBoYXZlIHdpdGggdGhlbSwgcGxlYXNlIHNlZSB0aGUKKwkgIGRyaXZlcl9uYW1lLlJFQURNRSBmaWxlIGluIHRoZSBkcml2ZXJzL3N0YWdpbmcvIGRpcmVjdG9yeSB0bworCSAgc2VlIHdoYXQgbmVlZHMgdG8gYmUgd29ya2VkIG9uLCBhbmQgd2hvIHRvIGNvbnRhY3QuCisKKwkgIElmIGluIGRvdWJ0LCBzYXkgTiBoZXJlLgorCitpZiBTVEFHSU5HCisKK3NvdXJjZSAiZHJpdmVycy9zdGFnaW5nL2V0MTMxeC9LY29uZmlnIgorCitzb3VyY2UgImRyaXZlcnMvc3RhZ2luZy9zbGljb3NzL0tjb25maWciCisKK3NvdXJjZSAiZHJpdmVycy9zdGFnaW5nL3N4Zy9LY29uZmlnIgorCitzb3VyY2UgImRyaXZlcnMvc3RhZ2luZy9tZTQwMDAvS2NvbmZpZyIKKworc291cmNlICJkcml2ZXJzL3N0YWdpbmcvZ283MDA3L0tjb25maWciCisKK3NvdXJjZSAiZHJpdmVycy9zdGFnaW5nL3VzYmlwL0tjb25maWciCisKK3NvdXJjZSAiZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvS2NvbmZpZyIKKworc291cmNlICJkcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9LY29uZmlnIgorCitzb3VyY2UgImRyaXZlcnMvc3RhZ2luZy9lY2hvL0tjb25maWciCisKK3NvdXJjZSAiZHJpdmVycy9zdGFnaW5nL2F0NzZfdXNiL0tjb25maWciCisKK2VuZGlmICMgU1RBR0lORwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL01ha2VmaWxlIGIvZHJpdmVycy9zdGFnaW5nL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMyNWJjYTQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvTWFrZWZpbGUKQEAgLTAsMCArMSwxNSBAQAorIyBNYWtlZmlsZSBmb3Igc3RhZ2luZyBkaXJlY3RvcnkKKworIyBmaXggZm9yIGJ1aWxkIHN5c3RlbSBidWcuLi4KK29iai0kKENPTkZJR19TVEFHSU5HKQkJKz0gc3RhZ2luZy5vCisKK29iai0kKENPTkZJR19FVDEzMVgpCQkrPSBldDEzMXgvCitvYmotJChDT05GSUdfU0xJQ09TUykJCSs9IHNsaWNvc3MvCitvYmotJChDT05GSUdfU1hHKQkJKz0gc3hnLworb2JqLSQoQ09ORklHX01FNDAwMCkJCSs9IG1lNDAwMC8KK29iai0kKENPTkZJR19WSURFT19HTzcwMDcpCSs9IGdvNzAwNy8KK29iai0kKENPTkZJR19VU0JfSVBfQ09NTU9OKQkrPSB1c2JpcC8KK29iai0kKENPTkZJR19XMzVVTkQpCQkrPSB3aW5ib25kLworb2JqLSQoQ09ORklHX1BSSVNNMl9VU0IpCSs9IHdsYW4tbmcvCitvYmotJChDT05GSUdfRUNITykJCSs9IGVjaG8vCitvYmotJChDT05GSUdfVVNCX0FUTUVMKQkJKz0gYXQ3Nl91c2IvCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYXQ3Nl91c2IvS2NvbmZpZyBiL2RyaXZlcnMvc3RhZ2luZy9hdDc2X3VzYi9LY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg2MDZmOTYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvYXQ3Nl91c2IvS2NvbmZpZwpAQCAtMCwwICsxLDggQEAKK2NvbmZpZyBVU0JfQVRNRUwKKwl0cmlzdGF0ZSAiQXRtZWwgYXQ3NmM1MDMvYXQ3NmM1MDUvYXQ3NmM1MDVhIFVTQiBjYXJkcyIKKwlkZXBlbmRzIG9uIFdMQU5fODAyMTEgJiYgVVNCCisJZGVmYXVsdCBOCisJc2VsZWN0IEZXX0xPQURFUgorCS0tLWhlbHAtLS0KKwkgIEVuYWJsZSBzdXBwb3J0IGZvciBVU0IgV2lyZWxlc3MgZGV2aWNlcyB1c2luZyBBdG1lbCBhdDc2YzUwMywKKwkgIGF0NzZjNTA1IG9yIGF0NzZjNTA1YSBjaGlwcy4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9hdDc2X3VzYi9NYWtlZmlsZSBiL2RyaXZlcnMvc3RhZ2luZy9hdDc2X3VzYi9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YTQ3ZTg4Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2F0NzZfdXNiL01ha2VmaWxlCkBAIC0wLDAgKzEgQEAKK29iai0kKENPTkZJR19VU0JfQVRNRUwpCQkrPSBhdDc2X3VzYi5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYXQ3Nl91c2IvVE9ETyBiL2RyaXZlcnMvc3RhZ2luZy9hdDc2X3VzYi9UT0RPCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5MTFjYTcKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvYXQ3Nl91c2IvVE9ETwpAQCAtMCwwICsxLDIgQEAKK3Jld3JpdGUgdGhlIGRyaXZlciB0byB1c2UgdGhlIHByb3BlciBpbi1rZXJuZWwgd2lyZWxlc3Mgc3RhY2sKK2luc3RlYWQgb2YgdXNpbmcgaXRzIG93bi4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9hdDc2X3VzYi9hdDc2X3VzYi5jIGIvZHJpdmVycy9zdGFnaW5nL2F0NzZfdXNiL2F0NzZfdXNiLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTJkZjBjNgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9hdDc2X3VzYi9hdDc2X3VzYi5jCkBAIC0wLDAgKzEsNTU1OSBAQAorLyoKKyAqIGF0NzZjNTAzL2F0NzZjNTA1IFVTQiBkcml2ZXIKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDIgLSAyMDAzIE9saXZlciBLdXJ0aAorICogQ29weXJpZ2h0IChjKSAyMDA0IEpvZXJnIEFsYmVydCA8am9lcmcuYWxiZXJ0QGdteC5kZT4KKyAqIENvcHlyaWdodCAoYykgMjAwNCBOaWNrIEpvbmVzCisgKiBDb3B5cmlnaHQgKGMpIDIwMDQgQmFsaW50IFNlZWJlciA8bjBfNXA0bV9wMTM0NTNAaG90bWFpbC5jb20+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+c2Nhbl9zdGF0ZSAhPSBTQ0FOX0NPTVBMRVRFRCkKKwkJLyogc2NhbiBub3QgeWV0IGZpbmlzaGVkICovCisJCXJldHVybiAtRUFHQUlOOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmJzc19saXN0X3NwaW5sb2NrLCBmbGFncyk7CisKKwlsaXN0X2Zvcl9lYWNoX3NhZmUobHB0ciwgbnB0ciwgJnByaXYtPmJzc19saXN0KSB7CisJCWN1cnJfYnNzID0gbGlzdF9lbnRyeShscHRyLCBzdHJ1Y3QgYnNzX2luZm8sIGxpc3QpOworCisJCWl3ZS0+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+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZWNoby9iaXRfb3BlcmF0aW9ucy5oIGIvZHJpdmVycy9zdGFnaW5nL2VjaG8vYml0X29wZXJhdGlvbnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMzJmNGJmCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2VjaG8vYml0X29wZXJhdGlvbnMuaApAQCAtMCwwICsxLDI1MyBAQAorLyoKKyAqIFNwYW5EU1AgLSBhIHNlcmllcyBvZiBEU1AgY29tcG9uZW50cyBmb3IgdGVsZXBob255CisgKgorICogYml0X29wZXJhdGlvbnMuaCAtIFZhcmlvdXMgYml0IGxldmVsIG9wZXJhdGlvbnMsIHN1Y2ggYXMgYml0IHJldmVyc2FsCisgKgorICogV3JpdHRlbiBieSBTdGV2ZSBVbmRlcndvb2QgPHN0ZXZldUBjb3BwaWNlLm9yZz4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgU3RldmUgVW5kZXJ3b29kCisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIsIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKgorICogJElkOiBiaXRfb3BlcmF0aW9ucy5oLHYgMS4xMSAyMDA2LzExLzI4IDE1OjM3OjAzIHN0ZXZldSBFeHAgJAorICovCisKKy8qISBcZmlsZSAqLworCisjaWYgIWRlZmluZWQoX0JJVF9PUEVSQVRJT05TX0hfKQorI2RlZmluZSBfQklUX09QRVJBVElPTlNfSF8KKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChfX2kzODZfXykgIHx8ICBkZWZpbmVkKF9feDg2XzY0X18pCisvKiEgXGJyaWVmIEZpbmQgdGhlIGJpdCBwb3NpdGlvbiBvZiB0aGUgaGlnaGVzdCBzZXQgYml0IGluIGEgd29yZAorICAgIFxwYXJhbSBiaXRzIFRoZSB3b3JkIHRvIGJlIHNlYXJjaGVkCisgICAgXHJldHVybiBUaGUgYml0IG51bWJlciBvZiB0aGUgaGlnaGVzdCBzZXQgYml0LCBvciAtMSBpZiB0aGUgd29yZCBpcyB6ZXJvLiAqLworc3RhdGljIF9faW5saW5lX18gaW50IHRvcF9iaXQodW5zaWduZWQgaW50IGJpdHMpCit7CisgICAgaW50IHJlczsKKworICAgIF9fYXNtX18gKCIgeG9ybCAlW3Jlc10sJVtyZXNdO1xuIgorICAgICAgICAgICAgICIgZGVjbCAlW3Jlc107XG4iCisgICAgICAgICAgICAgIiBic3JsICVbYml0c10sJVtyZXNdXG4iCisgICAgICAgICAgICAgOiBbcmVzXSAiPSZyIiAocmVzKQorICAgICAgICAgICAgIDogW2JpdHNdICJybSIgKGJpdHMpKTsKKyAgICByZXR1cm4gcmVzOworfQorLyotIEVuZCBvZiBmdW5jdGlvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qISBcYnJpZWYgRmluZCB0aGUgYml0IHBvc2l0aW9uIG9mIHRoZSBsb3dlc3Qgc2V0IGJpdCBpbiBhIHdvcmQKKyAgICBccGFyYW0gYml0cyBUaGUgd29yZCB0byBiZSBzZWFyY2hlZAorICAgIFxyZXR1cm4gVGhlIGJpdCBudW1iZXIgb2YgdGhlIGxvd2VzdCBzZXQgYml0LCBvciAtMSBpZiB0aGUgd29yZCBpcyB6ZXJvLiAqLworc3RhdGljIF9faW5saW5lX18gaW50IGJvdHRvbV9iaXQodW5zaWduZWQgaW50IGJpdHMpCit7CisgICAgaW50IHJlczsKKworICAgIF9fYXNtX18gKCIgeG9ybCAlW3Jlc10sJVtyZXNdO1xuIgorICAgICAgICAgICAgICIgZGVjbCAlW3Jlc107XG4iCisgICAgICAgICAgICAgIiBic2ZsICVbYml0c10sJVtyZXNdXG4iCisgICAgICAgICAgICAgOiBbcmVzXSAiPSZyIiAocmVzKQorICAgICAgICAgICAgIDogW2JpdHNdICJybSIgKGJpdHMpKTsKKyAgICByZXR1cm4gcmVzOworfQorLyotIEVuZCBvZiBmdW5jdGlvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZWxzZQorc3RhdGljIF9faW5saW5lX18gaW50IHRvcF9iaXQodW5zaWduZWQgaW50IGJpdHMpCit7CisgICAgaW50IGk7CisKKyAgICBpZiAoYml0cyA9PSAwKQorICAgICAgICByZXR1cm4gLTE7CisgICAgaSA9IDA7CisgICAgaWYgKGJpdHMgJiAweEZGRkYwMDAwKQorICAgIHsKKyAgICAgICAgYml0cyAmPSAweEZGRkYwMDAwOworICAgICAgICBpICs9IDE2OworICAgIH0KKyAgICBpZiAoYml0cyAmIDB4RkYwMEZGMDApCisgICAgeworICAgICAgICBiaXRzICY9IDB4RkYwMEZGMDA7CisgICAgICAgIGkgKz0gODsKKyAgICB9CisgICAgaWYgKGJpdHMgJiAweEYwRjBGMEYwKQorICAgIHsKKyAgICAgICAgYml0cyAmPSAweEYwRjBGMEYwOworICAgICAgICBpICs9IDQ7CisgICAgfQorICAgIGlmIChiaXRzICYgMHhDQ0NDQ0NDQykKKyAgICB7CisgICAgICAgIGJpdHMgJj0gMHhDQ0NDQ0NDQzsKKyAgICAgICAgaSArPSAyOworICAgIH0KKyAgICBpZiAoYml0cyAmIDB4QUFBQUFBQUEpCisgICAgeworICAgICAgICBiaXRzICY9IDB4QUFBQUFBQUE7CisgICAgICAgIGkgKz0gMTsKKyAgICB9CisgICAgcmV0dXJuIGk7Cit9CisvKi0gRW5kIG9mIGZ1bmN0aW9uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIF9faW5saW5lX18gaW50IGJvdHRvbV9iaXQodW5zaWduZWQgaW50IGJpdHMpCit7CisgICAgaW50IGk7CisKKyAgICBpZiAoYml0cyA9PSAwKQorICAgICAgICByZXR1cm4gLTE7CisgICAgaSA9IDMyOworICAgIGlmIChiaXRzICYgMHgwMDAwRkZGRikKKyAgICB7CisgICAgICAgIGJpdHMgJj0gMHgwMDAwRkZGRjsKKyAgICAgICAgaSAtPSAxNjsKKyAgICB9CisgICAgaWYgKGJpdHMgJiAweDAwRkYwMEZGKQorICAgIHsKKyAgICAgICAgYml0cyAmPSAweDAwRkYwMEZGOworICAgICAgICBpIC09IDg7CisgICAgfQorICAgIGlmIChiaXRzICYgMHgwRjBGMEYwRikKKyAgICB7CisgICAgICAgIGJpdHMgJj0gMHgwRjBGMEYwRjsKKyAgICAgICAgaSAtPSA0OworICAgIH0KKyAgICBpZiAoYml0cyAmIDB4MzMzMzMzMzMpCisgICAgeworICAgICAgICBiaXRzICY9IDB4MzMzMzMzMzM7CisgICAgICAgIGkgLT0gMjsKKyAgICB9CisgICAgaWYgKGJpdHMgJiAweDU1NTU1NTU1KQorICAgIHsKKyAgICAgICAgYml0cyAmPSAweDU1NTU1NTU1OworICAgICAgICBpIC09IDE7CisgICAgfQorICAgIHJldHVybiBpOworfQorLyotIEVuZCBvZiBmdW5jdGlvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZW5kaWYKKworLyohIFxicmllZiBCaXQgcmV2ZXJzZSBhIGJ5dGUuCisgICAgXHBhcmFtIGRhdGEgVGhlIGJ5dGUgdG8gYmUgcmV2ZXJzZWQuCisgICAgXHJldHVybiBUaGUgYml0IHJldmVyc2VkIHZlcnNpb24gb2YgZGF0YS4gKi8KK3N0YXRpYyBfX2lubGluZV9fIHVpbnQ4X3QgYml0X3JldmVyc2U4KHVpbnQ4X3QgeCkKK3sKKyNpZiBkZWZpbmVkKF9faTM4Nl9fKSAgfHwgIGRlZmluZWQoX194ODZfNjRfXykKKyAgICAvKiBJZiBtdWx0aXBseSBpcyBmYXN0ICovCisgICAgcmV0dXJuICgoeCoweDA4MDJVICYgMHgyMjExMFUpIHwgKHgqMHg4MDIwVSAmIDB4ODg0NDBVKSkqMHgxMDEwMVUgPj4gMTY7CisjZWxzZQorICAgIC8qIElmIG11bHRpcGx5IGlzIHNsb3csIGJ1dCB3ZSBoYXZlIGEgYmFycmVsIHNoaWZ0ZXIgKi8KKyAgICB4ID0gKHggPj4gNCkgfCAoeCA8PCA0KTsKKyAgICB4ID0gKCh4ICYgMHhDQykgPj4gMikgfCAoKHggJiAweDMzKSA8PCAyKTsKKyAgICByZXR1cm4gKCh4ICYgMHhBQSkgPj4gMSkgfCAoKHggJiAweDU1KSA8PCAxKTsKKyNlbmRpZgorfQorLyotIEVuZCBvZiBmdW5jdGlvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qISBcYnJpZWYgQml0IHJldmVyc2UgYSAxNiBiaXQgd29yZC4KKyAgICBccGFyYW0gZGF0YSBUaGUgd29yZCB0byBiZSByZXZlcnNlZC4KKyAgICBccmV0dXJuIFRoZSBiaXQgcmV2ZXJzZWQgdmVyc2lvbiBvZiBkYXRhLiAqLwordWludDE2X3QgYml0X3JldmVyc2UxNih1aW50MTZfdCBkYXRhKTsKKworLyohIFxicmllZiBCaXQgcmV2ZXJzZSBhIDMyIGJpdCB3b3JkLgorICAgIFxwYXJhbSBkYXRhIFRoZSB3b3JkIHRvIGJlIHJldmVyc2VkLgorICAgIFxyZXR1cm4gVGhlIGJpdCByZXZlcnNlZCB2ZXJzaW9uIG9mIGRhdGEuICovCit1aW50MzJfdCBiaXRfcmV2ZXJzZTMyKHVpbnQzMl90IGRhdGEpOworCisvKiEgXGJyaWVmIEJpdCByZXZlcnNlIGVhY2ggb2YgdGhlIGZvdXIgYnl0ZXMgaW4gYSAzMiBiaXQgd29yZC4KKyAgICBccGFyYW0gZGF0YSBUaGUgd29yZCB0byBiZSByZXZlcnNlZC4KKyAgICBccmV0dXJuIFRoZSBiaXQgcmV2ZXJzZWQgdmVyc2lvbiBvZiBkYXRhLiAqLwordWludDMyX3QgYml0X3JldmVyc2VfNGJ5dGVzKHVpbnQzMl90IGRhdGEpOworCisvKiEgXGJyaWVmIEZpbmQgdGhlIG51bWJlciBvZiBzZXQgYml0cyBpbiBhIDMyIGJpdCB3b3JkLgorICAgIFxwYXJhbSB4IFRoZSB3b3JkIHRvIGJlIHNlYXJjaGVkLgorICAgIFxyZXR1cm4gVGhlIG51bWJlciBvZiBzZXQgYml0cy4gKi8KK2ludCBvbmVfYml0czMyKHVpbnQzMl90IHgpOworCisvKiEgXGJyaWVmIENyZWF0ZSBhIG1hc2sgYXMgd2lkZSBhcyB0aGUgbnVtYmVyIGluIGEgMzIgYml0IHdvcmQuCisgICAgXHBhcmFtIHggVGhlIHdvcmQgdG8gYmUgc2VhcmNoZWQuCisgICAgXHJldHVybiBUaGUgbWFzay4gKi8KK3VpbnQzMl90IG1ha2VfbWFzazMyKHVpbnQzMl90IHgpOworCisvKiEgXGJyaWVmIENyZWF0ZSBhIG1hc2sgYXMgd2lkZSBhcyB0aGUgbnVtYmVyIGluIGEgMTYgYml0IHdvcmQuCisgICAgXHBhcmFtIHggVGhlIHdvcmQgdG8gYmUgc2VhcmNoZWQuCisgICAgXHJldHVybiBUaGUgbWFzay4gKi8KK3VpbnQxNl90IG1ha2VfbWFzazE2KHVpbnQxNl90IHgpOworCisvKiEgXGJyaWVmIEZpbmQgdGhlIGxlYXN0IHNpZ25pZmljYW50IG9uZSBpbiBhIHdvcmQsIGFuZCByZXR1cm4gYSB3b3JkCisgICAgICAgICAgIHdpdGgganVzdCB0aGF0IGJpdCBzZXQuCisgICAgXHBhcmFtIHggVGhlIHdvcmQgdG8gYmUgc2VhcmNoZWQuCisgICAgXHJldHVybiBUaGUgd29yZCB3aXRoIHRoZSBzaW5nbGUgc2V0IGJpdC4gKi8KK3N0YXRpYyBfX2lubGluZV9fIHVpbnQzMl90IGxlYXN0X3NpZ25pZmljYW50X29uZTMyKHVpbnQzMl90IHgpCit7CisgICAgcmV0dXJuICh4ICYgKC0oaW50MzJfdCkgeCkpOworfQorLyotIEVuZCBvZiBmdW5jdGlvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qISBcYnJpZWYgRmluZCB0aGUgbW9zdCBzaWduaWZpY2FudCBvbmUgaW4gYSB3b3JkLCBhbmQgcmV0dXJuIGEgd29yZAorICAgICAgICAgICB3aXRoIGp1c3QgdGhhdCBiaXQgc2V0LgorICAgIFxwYXJhbSB4IFRoZSB3b3JkIHRvIGJlIHNlYXJjaGVkLgorICAgIFxyZXR1cm4gVGhlIHdvcmQgd2l0aCB0aGUgc2luZ2xlIHNldCBiaXQuICovCitzdGF0aWMgX19pbmxpbmVfXyB1aW50MzJfdCBtb3N0X3NpZ25pZmljYW50X29uZTMyKHVpbnQzMl90IHgpCit7CisjaWYgZGVmaW5lZChfX2kzODZfXykgIHx8ICBkZWZpbmVkKF9feDg2XzY0X18pCisgICAgcmV0dXJuIDEgPDwgdG9wX2JpdCh4KTsKKyNlbHNlCisgICAgeCA9IG1ha2VfbWFzazMyKHgpOworICAgIHJldHVybiAoeCBeICh4ID4+IDEpKTsKKyNlbmRpZgorfQorLyotIEVuZCBvZiBmdW5jdGlvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qISBcYnJpZWYgRmluZCB0aGUgcGFyaXR5IG9mIGEgYnl0ZS4KKyAgICBccGFyYW0geCBUaGUgYnl0ZSB0byBiZSBjaGVja2VkLgorICAgIFxyZXR1cm4gMSBmb3Igb2RkLCBvciAwIGZvciBldmVuLiAqLworc3RhdGljIF9faW5saW5lX18gaW50IHBhcml0eTgodWludDhfdCB4KQoreworICAgIHggPSAoeCBeICh4ID4+IDQpKSAmIDB4MEY7CisgICAgcmV0dXJuICgweDY5OTYgPj4geCkgJiAxOworfQorLyotIEVuZCBvZiBmdW5jdGlvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qISBcYnJpZWYgRmluZCB0aGUgcGFyaXR5IG9mIGEgMTYgYml0IHdvcmQuCisgICAgXHBhcmFtIHggVGhlIHdvcmQgdG8gYmUgY2hlY2tlZC4KKyAgICBccmV0dXJuIDEgZm9yIG9kZCwgb3IgMCBmb3IgZXZlbi4gKi8KK3N0YXRpYyBfX2lubGluZV9fIGludCBwYXJpdHkxNih1aW50MTZfdCB4KQoreworICAgIHggXj0gKHggPj4gOCk7CisgICAgeCA9ICh4IF4gKHggPj4gNCkpICYgMHgwRjsKKyAgICByZXR1cm4gKDB4Njk5NiA+PiB4KSAmIDE7Cit9CisvKi0gRW5kIG9mIGZ1bmN0aW9uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyohIFxicmllZiBGaW5kIHRoZSBwYXJpdHkgb2YgYSAzMiBiaXQgd29yZC4KKyAgICBccGFyYW0geCBUaGUgd29yZCB0byBiZSBjaGVja2VkLgorICAgIFxyZXR1cm4gMSBmb3Igb2RkLCBvciAwIGZvciBldmVuLiAqLworc3RhdGljIF9faW5saW5lX18gaW50IHBhcml0eTMyKHVpbnQzMl90IHgpCit7CisgICAgeCBePSAoeCA+PiAxNik7CisgICAgeCBePSAoeCA+PiA4KTsKKyAgICB4ID0gKHggXiAoeCA+PiA0KSkgJiAweDBGOworICAgIHJldHVybiAoMHg2OTk2ID4+IHgpICYgMTsKK30KKy8qLSBFbmQgb2YgZnVuY3Rpb24gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYKKy8qLSBFbmQgb2YgZmlsZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2VjaG8vZWNoby5jIGIvZHJpdmVycy9zdGFnaW5nL2VjaG8vZWNoby5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRhMjgxYjEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvZWNoby9lY2hvLmMKQEAgLTAsMCArMSw2MzIgQEAKKy8qCisgKiBTcGFuRFNQIC0gYSBzZXJpZXMgb2YgRFNQIGNvbXBvbmVudHMgZm9yIHRlbGVwaG9ueQorICoKKyAqIGVjaG8uYyAtIEEgbGluZSBlY2hvIGNhbmNlbGxlci4gIFRoaXMgY29kZSBpcyBiZWluZyBkZXZlbG9wZWQKKyAqICAgICAgICAgIGFnYWluc3QgYW5kIHBhcnRpYWxseSBjb21wbGllcyB3aXRoIEcxNjguCisgKgorICogV3JpdHRlbiBieSBTdGV2ZSBVbmRlcndvb2QgPHN0ZXZldUBjb3BwaWNlLm9yZz4KKyAqICAgICAgICAgYW5kIERhdmlkIFJvd2UgPGRhdmlkX2F0X3Jvd2V0ZWxfZG90X2NvbT4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDMgU3RldmUgVW5kZXJ3b29kLCAyMDA3IERhdmlkIFJvd2UKKyAqCisgKiBCYXNlZCBvbiBhIGJpdCBmcm9tIGhlcmUsIGEgYml0IGZyb20gdGhlcmUsIGV5ZSBvZiB0b2FkLCBlYXIgb2YKKyAqIGJhdCwgMTUgeWVhcnMgb2YgZmFpbGVkIGF0dGVtcHRzIGJ5IERhdmlkIGFuZCBhIGZldyBmcmllZCBicmFpbgorICogY2VsbHMuCisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIsIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKgorICogJElkOiBlY2hvLmMsdiAxLjIwIDIwMDYvMTIvMDEgMTg6MDA6NDggc3RldmV1IEV4cCAkCisgKi8KKworLyohIFxmaWxlICovCisKKy8qIEltcGxlbWVudGF0aW9uIE5vdGVzCisgICBEYXZpZCBSb3dlCisgICBBcHJpbCAyMDA3CisKKyAgIFRoaXMgY29kZSBzdGFydGVkIGxpZmUgYXMgU3RldmUncyBOTE1TIGFsZ29yaXRobSB3aXRoIGEgdGFwCisgICByb3RhdGlvbiBhbGdvcml0aG0gdG8gaGFuZGxlIGRpdmVyZ2VuY2UgZHVyaW5nIGRvdWJsZSB0YWxrLiAgSQorICAgYWRkZWQgYSBHZWlnZWwgRG91YmxlIFRhbGsgRGV0ZWN0b3IgKERURCkgWzJdIGFuZCBwZXJmb3JtZWQgc29tZQorICAgRzE2OCB0ZXN0cy4gIEhvd2V2ZXIgSSBoYWQgdHJvdWJsZSBtZWV0aW5nIHRoZSBHMTY4IHJlcXVpcmVtZW50cywKKyAgIGVzcGVjaWFsbHkgZm9yIGRvdWJsZSB0YWxrIC0gdGhlcmUgd2VyZSBhbHdheXMgY2FzZXMgd2hlcmUgbXkgRFRECisgICBmYWlsZWQsIGZvciBleGFtcGxlIHdoZXJlIG5lYXIgZW5kIHNwZWVjaCB3YXMgdW5kZXIgdGhlIDZkQgorICAgdGhyZXNob2xkIHJlcXVpcmVkIGZvciBkZWNsYXJpbmcgZG91YmxlIHRhbGsuCisKKyAgIFNvIEkgdHJpZWQgYSB0d28gcGF0aCBhbGdvcml0aG0gWzFdLCB3aGljaCBoYXMgc28gZmFyIGdpdmVuIGJldHRlcgorICAgcmVzdWx0cy4gIFRoZSBvcmlnaW5hbCB0YXAgcm90YXRpb24vR2VpZ2VsIGFsZ29yaXRobSBpcyBhdmFpbGFibGUKKyAgIGluIFNWTiBodHRwOi8vc3ZuLnJvd2V0ZWwuY29tL3NvZnR3YXJlL29zbGVjL3RhZ3MvYmVmb3JlXzE2Yml0LgorICAgSXQncyBwcm9iYWJseSBwb3NzaWJsZSB0byBtYWtlIGl0IHdvcmsgaWYgc29tZSBvbmUgd2FudHMgdG8gcHV0IHNvbWUKKyAgIHNlcmlvdXMgd29yayBpbnRvIGl0LgorCisgICBBdCBwcmVzZW50IG5vIHNwZWNpYWwgdHJlYXRtZW50IGlzIHByb3ZpZGVkIGZvciB0b25lcywgd2hpY2gKKyAgIGdlbmVyYWxseSBjYXVzZSBOTE1TIGFsZ29yaXRobXMgdG8gZGl2ZXJnZS4gIEluaXRpYWwgcnVucyBvZiBhCisgICBzdWJzZXQgb2YgdGhlIEcxNjggdGVzdHMgZm9yIHRvbmVzIChlLmcgLi9lY2hvX3Rlc3QgNikgc2hvdyB0aGUKKyAgIGN1cnJlbnQgYWxnb3JpdGhtIGlzIHBhc3NpbmcgT0ssIHdoaWNoIGlzIGtpbmQgb2Ygc3VycHJpc2luZy4gIFRoZQorICAgZnVsbCBzZXQgb2YgdGVzdHMgbmVlZHMgdG8gYmUgcGVyZm9ybWVkIHRvIGNvbmZpcm0gdGhpcyByZXN1bHQuCisKKyAgIE9uZSBvdGhlciBpbnRlcmVzdGluZyBjaGFuZ2UgaXMgdGhhdCBJIGhhdmUgbWFuYWdlZCB0byBnZXQgdGhlIE5MTVMKKyAgIGNvZGUgdG8gd29yayB3aXRoIDE2IGJpdCBjb2VmZmljaWVudHMsIHJhdGhlciB0aGFuIHRoZSBvcmlnaW5hbCAzMgorICAgYml0IGNvZWZmaWNlbnRzLiAgVGhpcyByZWR1Y2VzIHRoZSBNSVBzIGFuZCBzdG9yYWdlIHJlcXVpcmVkLgorICAgSSBldmF1bGF0ZWQgdGhlIDE2IGJpdCBwb3J0IHVzaW5nIGcxNjhfdGVzdHMuc2ggYW5kIGxpc3RlbmluZyB0ZXN0cworICAgb24gNCByZWFsLXdvcmxkIHNhbXBsZXMuCisKKyAgIEkgYWxzbyBhdHRlbXB0ZWQgdGhlIGltcGxlbWVudGF0aW9uIG9mIGEgYmxvY2sgYmFzZWQgTkxNUyB1cGRhdGUKKyAgIFsyXSBidXQgYWx0aG91Z2ggdGhpcyBwYXNzZXMgZzE2OF90ZXN0cy5zaCBpdCBkaWRuJ3QgY29udmVyZ2Ugd2VsbAorICAgb24gdGhlIHJlYWwtd29ybGQgc2FtcGxlcy4gIEkgaGF2ZSBubyBpZGVhIHdoeSwgcGVyaGFwcyBhIHNjYWxpbmcKKyAgIHByb2JsZW0uICBUaGUgYmxvY2sgYmFzZWQgY29kZSBpcyBhbHNvIGF2YWlsYWJsZSBpbiBTVk4KKyAgIGh0dHA6Ly9zdm4ucm93ZXRlbC5jb20vc29mdHdhcmUvb3NsZWMvdGFncy9iZWZvcmVfMTZiaXQuICBJZiB0aGlzCisgICBjb2RlIGNhbiBiZSBkZWJ1Z2dlZCwgaXQgd2lsbCBsZWFkIHRvIGZ1cnRoZXIgcmVkdWN0aW9uIGluIE1JUFMsIGFzCisgICB0aGUgYmxvY2sgdXBkYXRlIGNvZGUgbWFwcyBuaWNlbHkgb250byBEU1AgaW5zdHJ1Y3Rpb24gc2V0cyAoaXQncyBhCisgICBkb3QgcHJvZHVjdCkgY29tcGFyZWQgdG8gdGhlIGN1cnJlbnQgc2FtcGxlLWJ5LXNhbXBsZSB1cGRhdGUuCisKKyAgIFN0ZXZlIGFsc28gaGFzIHNvbWUgbmljZSBub3RlcyBvbiBlY2hvIGNhbmNlbGxlcnMgaW4gZWNoby5oCisKKworICAgUmVmZXJlbmNlczoKKworICAgWzFdIE9jaGlhaSwgQXJlc2VraSwgYW5kIE9naWhhcmEsICJFY2hvIENhbmNlbGxlciB3aXRoIFR3byBFY2hvCisgICAgICAgUGF0aCBNb2RlbHMiLCBJRUVFIFRyYW5zYWN0aW9ucyBvbiBjb21tdW5pY2F0aW9ucywgQ09NLTI1LAorICAgICAgIE5vLiA2LCBKdW5lCisgICAgICAgMTk3Ny4KKyAgICAgICBodHRwOi8vd3d3LnJvd2V0ZWwuY29tL2ltYWdlcy9lY2hvL2R1YWxfcGF0aF9wYXBlci5wZGYKKworICAgWzJdIFRoZSBjbGFzc2ljLCB2ZXJ5IHVzZWZ1bCBwYXBlciB0aGF0IHRlbGxzIHlvdSBob3cgdG8KKyAgICAgICBhY3R1YWxseSBidWlsZCBhIHJlYWwgd29ybGQgZWNobyBjYW5jZWxsZXI6CisgICAgICAgICBNZXNzZXJzY2htaXR0LCBIZWRiZXJnLCBDb2xlLCBIYW91aSwgV2luc2hpcCwgIkRpZ2l0YWwgVm9pY2UKKyAgICAgICAgIEVjaG8gQ2FuY2VsbGVyIHdpdGggYSBUTVMzMjAwMjAsCisgICAgICAgICBodHRwOi8vd3d3LnJvd2V0ZWwuY29tL2ltYWdlcy9lY2hvL3NwcmExMjkucGRmCisKKyAgIFszXSBJIGhhdmUgd3JpdHRlbiBhIHNlcmllcyBvZiBibG9nIHBvc3RzIG9uIHRoaXMgd29yaywgaGVyZSBpcworICAgICAgIFBhcnQgMTogaHR0cDovL3d3dy5yb3dldGVsLmNvbS9ibG9nLz9wPTE4CisKKyAgIFs0XSBUaGUgc291cmNlIGNvZGUgaHR0cDovL3N2bi5yb3dldGVsLmNvbS9zb2Z0d2FyZS9vc2xlYy8KKworICAgWzVdIEEgbmljZSByZWZlcmVuY2Ugb24gTE1TIGZpbHRlcnM6CisgICAgICAgICBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0xlYXN0X21lYW5fc3F1YXJlc19maWx0ZXIKKworICAgQ3JlZGl0czoKKworICAgVGhhbmtzIHRvIFN0ZXZlIFVuZGVyd29vZCwgSmVhbi1NYXJjIFZhbGluLCBhbmQgUmFtYWtyaXNobmFuCisgICBNdXRodWtyaXNobmFuIGZvciB0aGVpciBzdWdnZXN0aW9ucyBhbmQgZW1haWwgZGlzY3Vzc2lvbnMuICBUaGFua3MKKyAgIGFsc28gdG8gdGhvc2UgcGVvcGxlIHdobyBjb2xsZWN0ZWQgZWNobyBzYW1wbGVzIGZvciBtZSBzdWNoIGFzCisgICBNYXJrLCBQYXdlbCwgYW5kIFBhdmVsLgorKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPiAgICAgICAvKiBXZSdyZSBkb2luZyBrZXJuZWwgd29yayAqLworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNkZWZpbmUgbWFsbG9jKGEpIGttYWxsb2MoKGEpLCBHRlBfS0VSTkVMKQorI2RlZmluZSBmcmVlKGEpIGtmcmVlKGEpCisKKyNpbmNsdWRlICJiaXRfb3BlcmF0aW9ucy5oIgorI2luY2x1ZGUgImVjaG8uaCIKKworI2RlZmluZSBNSU5fVFhfUE9XRVJfRk9SX0FEQVBUSU9OICAgNjQKKyNkZWZpbmUgTUlOX1JYX1BPV0VSX0ZPUl9BREFQVElPTiAgIDY0CisjZGVmaW5lIERURF9IQU5HT1ZFUiAgICAgICAgICAgICAgIDYwMCAgICAgLyogNjAwIHNhbXBsZXMsIG9yIDc1bXMgICAgICovCisjZGVmaW5lIERDX0xPRzJCRVRBICAgICAgICAgICAgICAgICAgMyAgICAgLyogbG9nMigpIG9mIERDIGZpbHRlciBCZXRhICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZVTkNUSU9OUworXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qIGFkYXB0aW5nIGNvZWZmcyB1c2luZyB0aGUgdHJhZGl0aW9uYWwgc3RvY2hhc3RpYyBkZXNjZW50IChOKUxNUyBhbGdvcml0aG0gKi8KKworCisjaWZkZWYgX19CTEFDS0ZJTl9BU01fXworc3RhdGljIHZvaWQgX19pbmxpbmVfXyBsbXNfYWRhcHRfYmcoZWNob19jYW5fc3RhdGVfdCAqZWMsIGludCBjbGVhbiwgaW50IHNoaWZ0KQoreworICAgIGludCBpLCBqOworICAgIGludCBvZmZzZXQxOworICAgIGludCBvZmZzZXQyOworICAgIGludCBmYWN0b3I7CisgICAgaW50IGV4cDsKKyAgICBpbnQxNl90ICpwaGlzdDsKKyAgICBpbnQgbjsKKworICAgIGlmIChzaGlmdCA+IDApCisJZmFjdG9yID0gY2xlYW4gPDwgc2hpZnQ7CisgICAgZWxzZQorCWZhY3RvciA9IGNsZWFuID4+IC1zaGlmdDsKKworICAgIC8qIFVwZGF0ZSB0aGUgRklSIHRhcHMgKi8KKworICAgIG9mZnNldDIgPSBlYy0+Y3Vycl9wb3M7CisgICAgb2Zmc2V0MSA9IGVjLT50YXBzIC0gb2Zmc2V0MjsKKyAgICBwaGlzdCA9ICZlYy0+ZmlyX3N0YXRlX2JnLmhpc3Rvcnlbb2Zmc2V0Ml07CisKKyAgICAvKiBzdDogYW5kIGVuOiBoZWxwIHVzIGxvY2F0ZSB0aGUgYXNzZW1ibGVyIGluIGVjaG8ucyAqLworCisgICAgLy9hc20oInN0OiIpOworICAgIG4gPSBlYy0+dGFwczsKKyAgICBmb3IgKGkgPSAwLCBqID0gb2Zmc2V0MjsgIGkgPCBuOyAgaSsrLCBqKyspCisgICAgeworICAgICAgIGV4cCA9ICpwaGlzdCsrICogZmFjdG9yOworICAgICAgIGVjLT5maXJfdGFwczE2WzFdW2ldICs9IChpbnQxNl90KSAoKGV4cCsoMTw8MTQpKSA+PiAxNSk7CisgICAgfQorICAgIC8vYXNtKCJlbjoiKTsKKworICAgIC8qIE5vdGUgdGhlIGFzbSBmb3IgdGhlIGlubmVyIGxvb3AgYWJvdmUgZ2VuZXJhdGVkIGJ5IEJsYWNrZmluIGdjYworICAgICAgIDQuMS4xIGlzIHByZXR0eSBnb29kIChub3RlIGV2ZW4gcGFyYWxsZWwgaW5zdHJ1Y3Rpb25zIHVzZWQpOgorCisgICAgCVIwID0gVyBbUDArK10gKFgpOworCVIwICo9IFIyOworCVIwID0gUjAgKyBSMyAoTlMpIHx8CisJUjEgPSBXIFtQMV0gKFgpIHx8CisJbm9wOworCVIwID4+Pj0gMTU7CisJUjAgPSBSMCArIFIxOworCVcgW1AxKytdID0gUjA7CisKKwlBIGJsb2NrIGJhc2VkIHVwZGF0ZSBhbGdvcml0aG0gd291bGQgYmUgbXVjaCBmYXN0ZXIgYnV0IHRoZQorCWFib3ZlIGNhbid0IGJlIGltcHJvdmVkIG9uIG11Y2guICBFdmVyeSBpbnN0cnVjdGlvbiBzYXZlZCBpbgorCXRoZSBsb29wIGFib3ZlIGlzIDIgTUlQcy9jaCEgIFRoZSBmb3IgbG9vcCBhYm92ZSBpcyB3aGVyZSB0aGUKKwlCbGFja2ZpbiBzcGVuZHMgbW9zdCBvZiBpdCdzIHRpbWUgLSBhYm91dCAxNyBNSVBzL2NoIG1lYXN1cmVkCisJd2l0aCBzcGVlZHRlc3QuYyB3aXRoIDI1NiB0YXBzICgzMm1zKS4gIFdyaXRlLWJhY2sgYW5kCisJV3JpdGUtdGhyb3VnaCBjYWNoZSBnYXZlIGFib3V0IHRoZSBzYW1lIHBlcmZvcm1hbmNlLgorICAgICovCit9CisKKy8qCisgICBJREVBUyBmb3IgZnVydGhlciBvcHRpbWlzYXRpb24gb2YgbG1zX2FkYXB0X2JnKCk6CisKKyAgIDEvIFRoZSByb3VuZGluZyBpcyBxdWl0ZSBjb3N0bHkuICBDb3VsZCB3ZSBrZWVwIGFzIDMyIGJpdCBjb2VmZnMKKyAgIHRoZW4gbWFrZSBmaWx0ZXIgcGx1Y2sgdGhlIE1TIDE2LWJpdHMgb2YgdGhlIGNvZWZmcyB3aGVuIGZpbHRlcmluZz8KKyAgIEhvd2V2ZXIgdGhpcyB3b3VsZCBsb3dlciBwb3RlbnRpYWwgb3B0aW1pc2F0aW9uIG9mIGZpbHRlciwgYXMgSQorICAgdGhpbmsgdGhlIGR1YWwtTUFDIGFyY2hpdGVjdHVyZSByZXF1aXJlcyBwYWNrZWQgMTYgYml0IGNvZWZmcy4KKworICAgMi8gQmxvY2sgYmFzZWQgdXBkYXRlIHdvdWxkIGJlIG1vcmUgZWZmaWNpZW50LCBhcyBwZXIgY29tbWVudHMgYWJvdmUsCisgICBjb3VsZCB1c2UgZHVhbCBNQUMgYXJjaGl0ZWN0dXJlLgorCisgICAzLyBMb29rIGZvciBzYW1lIHNhbXBsZSBCbGFja2ZpbiBMTVMgY29kZSwgc2VlIGlmIHdlIGNhbiBnZXQgZHVhbC1NQUMKKyAgIHBhY2tpbmcuCisKKyAgIDQvIEV4ZWN1dGUgdGhlIHdob2xlIGUvYyBpbiBhIGJsb2NrIG9mIHNheSAyMG1zIHJhdGhlciB0aGFuIHNhbXBsZQorICAgYnkgc2FtcGxlLiAgUHJvY2Vzc2luZyBhIGZldyBzYW1wbGVzIGV2ZXJ5IG1zIGlzIGluZWZmaWNpZW50LgorKi8KKworI2Vsc2UKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgbG1zX2FkYXB0X2JnKGVjaG9fY2FuX3N0YXRlX3QgKmVjLCBpbnQgY2xlYW4sIGludCBzaGlmdCkKK3sKKyAgICBpbnQgaTsKKworICAgIGludCBvZmZzZXQxOworICAgIGludCBvZmZzZXQyOworICAgIGludCBmYWN0b3I7CisgICAgaW50IGV4cDsKKworICAgIGlmIChzaGlmdCA+IDApCisJZmFjdG9yID0gY2xlYW4gPDwgc2hpZnQ7CisgICAgZWxzZQorCWZhY3RvciA9IGNsZWFuID4+IC1zaGlmdDsKKworICAgIC8qIFVwZGF0ZSB0aGUgRklSIHRhcHMgKi8KKworICAgIG9mZnNldDIgPSBlYy0+Y3Vycl9wb3M7CisgICAgb2Zmc2V0MSA9IGVjLT50YXBzIC0gb2Zmc2V0MjsKKworICAgIGZvciAoaSA9IGVjLT50YXBzIC0gMTsgIGkgPj0gb2Zmc2V0MTsgIGktLSkKKyAgICB7CisgICAgICAgZXhwID0gKGVjLT5maXJfc3RhdGVfYmcuaGlzdG9yeVtpIC0gb2Zmc2V0MV0qZmFjdG9yKTsKKyAgICAgICBlYy0+ZmlyX3RhcHMxNlsxXVtpXSArPSAoaW50MTZfdCkgKChleHArKDE8PDE0KSkgPj4gMTUpOworICAgIH0KKyAgICBmb3IgKCAgOyAgaSA+PSAwOyAgaS0tKQorICAgIHsKKyAgICAgICBleHAgPSAoZWMtPmZpcl9zdGF0ZV9iZy5oaXN0b3J5W2kgKyBvZmZzZXQyXSpmYWN0b3IpOworICAgICAgIGVjLT5maXJfdGFwczE2WzFdW2ldICs9IChpbnQxNl90KSAoKGV4cCsoMTw8MTQpKSA+PiAxNSk7CisgICAgfQorfQorI2VuZGlmCisKKy8qLSBFbmQgb2YgZnVuY3Rpb24gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitlY2hvX2Nhbl9zdGF0ZV90ICplY2hvX2Nhbl9jcmVhdGUoaW50IGxlbiwgaW50IGFkYXB0aW9uX21vZGUpCit7CisgICAgZWNob19jYW5fc3RhdGVfdCAqZWM7CisgICAgaW50IGk7CisgICAgaW50IGo7CisKKyAgICBlYyA9IGttYWxsb2Moc2l6ZW9mKCplYyksIEdGUF9LRVJORUwpOworICAgIGlmIChlYyA9PSBOVUxMKQorICAgICAgICByZXR1cm4gIE5VTEw7CisgICAgbWVtc2V0KGVjLCAwLCBzaXplb2YoKmVjKSk7CisKKyAgICBlYy0+dGFwcyA9IGxlbjsKKyAgICBlYy0+bG9nMnRhcHMgPSB0b3BfYml0KGxlbik7CisgICAgZWMtPmN1cnJfcG9zID0gZWMtPnRhcHMgLSAxOworCisgICAgZm9yIChpID0gMDsgIGkgPCAyOyAgaSsrKQorICAgIHsKKyAgICAgICAgaWYgKChlYy0+ZmlyX3RhcHMxNltpXSA9IChpbnQxNl90ICopIG1hbGxvYygoZWMtPnRhcHMpKnNpemVvZihpbnQxNl90KSkpID09IE5VTEwpCisgICAgICAgIHsKKyAgICAgICAgICAgIGZvciAoaiA9IDA7ICBqIDwgaTsgIGorKykKKyAgICAgICAgICAgICAgICBrZnJlZShlYy0+ZmlyX3RhcHMxNltqXSk7CisgICAgICAgICAgICBrZnJlZShlYyk7CisgICAgICAgICAgICByZXR1cm4gIE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgbWVtc2V0KGVjLT5maXJfdGFwczE2W2ldLCAwLCAoZWMtPnRhcHMpKnNpemVvZihpbnQxNl90KSk7CisgICAgfQorCisgICAgZmlyMTZfY3JlYXRlKCZlYy0+ZmlyX3N0YXRlLAorICAgICAgICAgICAgICAgICBlYy0+ZmlyX3RhcHMxNlswXSwKKyAgICAgICAgICAgICAgICAgZWMtPnRhcHMpOworICAgIGZpcjE2X2NyZWF0ZSgmZWMtPmZpcl9zdGF0ZV9iZywKKyAgICAgICAgICAgICAgICAgZWMtPmZpcl90YXBzMTZbMV0sCisgICAgICAgICAgICAgICAgIGVjLT50YXBzKTsKKworICAgIGZvcihpPTA7IGk8NTsgaSsrKSB7CisgICAgICBlYy0+eHZ0eFtpXSA9IGVjLT55dnR4W2ldID0gZWMtPnh2cnhbaV0gPSBlYy0+eXZyeFtpXSA9IDA7CisgICAgfQorCisgICAgZWMtPmNuZ19sZXZlbCA9IDEwMDA7CisgICAgZWNob19jYW5fYWRhcHRpb25fbW9kZShlYywgYWRhcHRpb25fbW9kZSk7CisKKyAgICBlYy0+c25hcHNob3QgPSAoaW50MTZfdCopbWFsbG9jKGVjLT50YXBzKnNpemVvZihpbnQxNl90KSk7CisgICAgbWVtc2V0KGVjLT5zbmFwc2hvdCwgMCwgc2l6ZW9mKGludDE2X3QpKmVjLT50YXBzKTsKKworICAgIGVjLT5jb25kX21ldCA9IDA7CisgICAgZWMtPlBzdGF0ZXMgPSAwOworICAgIGVjLT5MdHhhY2MgPSBlYy0+THJ4YWNjID0gZWMtPkxjbGVhbmFjYyA9IGVjLT5MY2xlYW5fYmdhY2MgPSAwOworICAgIGVjLT5MdHggPSBlYy0+THJ4ID0gZWMtPkxjbGVhbiA9IGVjLT5MY2xlYW5fYmcgPSAwOworICAgIGVjLT50eF8xID0gZWMtPnR4XzIgPSBlYy0+cnhfMSA9IGVjLT5yeF8yID0gMDsKKyAgICBlYy0+TGJnbiA9IGVjLT5MYmduX2FjYyA9IDA7CisgICAgZWMtPkxiZ25fdXBwZXIgPSAyMDA7CisgICAgZWMtPkxiZ25fdXBwZXJfYWNjID0gZWMtPkxiZ25fdXBwZXIgPDwgMTM7CisKKyAgICByZXR1cm4gIGVjOworfQorLyotIEVuZCBvZiBmdW5jdGlvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3ZvaWQgZWNob19jYW5fZnJlZShlY2hvX2Nhbl9zdGF0ZV90ICplYykKK3sKKwlpbnQgaTsKKworCWZpcjE2X2ZyZWUoJmVjLT5maXJfc3RhdGUpOworCWZpcjE2X2ZyZWUoJmVjLT5maXJfc3RhdGVfYmcpOworCWZvciAoaSA9IDA7ICBpIDwgMjsgIGkrKykKKwkJa2ZyZWUoZWMtPmZpcl90YXBzMTZbaV0pOworCWtmcmVlKGVjLT5zbmFwc2hvdCk7CisJa2ZyZWUoZWMpOworfQorLyotIEVuZCBvZiBmdW5jdGlvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3ZvaWQgZWNob19jYW5fYWRhcHRpb25fbW9kZShlY2hvX2Nhbl9zdGF0ZV90ICplYywgaW50IGFkYXB0aW9uX21vZGUpCit7CisgICAgZWMtPmFkYXB0aW9uX21vZGUgPSBhZGFwdGlvbl9tb2RlOworfQorLyotIEVuZCBvZiBmdW5jdGlvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3ZvaWQgZWNob19jYW5fZmx1c2goZWNob19jYW5fc3RhdGVfdCAqZWMpCit7CisgICAgaW50IGk7CisKKyAgICBlYy0+THR4YWNjID0gZWMtPkxyeGFjYyA9IGVjLT5MY2xlYW5hY2MgPSBlYy0+TGNsZWFuX2JnYWNjID0gMDsKKyAgICBlYy0+THR4ID0gZWMtPkxyeCA9IGVjLT5MY2xlYW4gPSBlYy0+TGNsZWFuX2JnID0gMDsKKyAgICBlYy0+dHhfMSA9IGVjLT50eF8yID0gZWMtPnJ4XzEgPSBlYy0+cnhfMiA9IDA7CisKKyAgICBlYy0+TGJnbiA9IGVjLT5MYmduX2FjYyA9IDA7CisgICAgZWMtPkxiZ25fdXBwZXIgPSAyMDA7CisgICAgZWMtPkxiZ25fdXBwZXJfYWNjID0gZWMtPkxiZ25fdXBwZXIgPDwgMTM7CisKKyAgICBlYy0+bm9udXBkYXRlX2R3ZWxsID0gMDsKKworICAgIGZpcjE2X2ZsdXNoKCZlYy0+ZmlyX3N0YXRlKTsKKyAgICBmaXIxNl9mbHVzaCgmZWMtPmZpcl9zdGF0ZV9iZyk7CisgICAgZWMtPmZpcl9zdGF0ZS5jdXJyX3BvcyA9IGVjLT50YXBzIC0gMTsKKyAgICBlYy0+ZmlyX3N0YXRlX2JnLmN1cnJfcG9zID0gZWMtPnRhcHMgLSAxOworICAgIGZvciAoaSA9IDA7ICBpIDwgMjsgIGkrKykKKyAgICAgICAgbWVtc2V0KGVjLT5maXJfdGFwczE2W2ldLCAwLCBlYy0+dGFwcypzaXplb2YoaW50MTZfdCkpOworCisgICAgZWMtPmN1cnJfcG9zID0gZWMtPnRhcHMgLSAxOworICAgIGVjLT5Qc3RhdGVzID0gMDsKK30KKy8qLSBFbmQgb2YgZnVuY3Rpb24gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCit2b2lkIGVjaG9fY2FuX3NuYXBzaG90KGVjaG9fY2FuX3N0YXRlX3QgKmVjKSB7CisgICAgbWVtY3B5KGVjLT5zbmFwc2hvdCwgZWMtPmZpcl90YXBzMTZbMF0sIGVjLT50YXBzKnNpemVvZihpbnQxNl90KSk7Cit9CisvKi0gRW5kIG9mIGZ1bmN0aW9uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyogRHVhbCBQYXRoIEVjaG8gQ2FuY2VsbGVyIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK2ludDE2X3QgZWNob19jYW5fdXBkYXRlKGVjaG9fY2FuX3N0YXRlX3QgKmVjLCBpbnQxNl90IHR4LCBpbnQxNl90IHJ4KQoreworICAgIGludDMyX3QgZWNob192YWx1ZTsKKyAgICBpbnQgY2xlYW5fYmc7CisgICAgaW50IHRtcCwgdG1wMTsKKworICAgIC8qIElucHV0IHNjYWxpbmcgd2FzIGZvdW5kIGJlIHJlcXVpcmVkIHRvIHByZXZlbnQgcHJvYmxlbXMgd2hlbiB0eAorICAgICAgIHN0YXJ0cyBjbGlwcGluZy4gIEFub3RoZXIgcG9zc2libGUgd2F5IHRvIGhhbmRsZSB0aGlzIHdvdWxkIGJlIHRoZQorICAgICAgIGZpbHRlciBjb2VmZmljZW50IHNjYWxpbmcuICovCisKKyAgICBlYy0+dHggPSB0eDsgZWMtPnJ4ID0gcng7CisgICAgdHggPj49MTsKKyAgICByeCA+Pj0xOworCisgICAgLyoKKyAgICAgICBGaWx0ZXIgREMsIDNkQiBwb2ludCBpcyAxNjBIeiAoSSB0aGluayksIG5vdGUgMzIgYml0IHByZWNpc2lvbiByZXF1aXJlZAorICAgICAgIG90aGVyd2lzZSB2YWx1ZXMgZG8gbm90IHRyYWNrIGRvd24gdG8gMC4gWmVybyBhdCBEQywgUG9sZSBhdCAoMS1CZXRhKQorICAgICAgIG9ubHkgcmVhbCBheGlzLiAgU29tZSBjaGlwIHNldHMgKGxpa2UgU2kgbGFicykgZG9uJ3QgbmVlZAorICAgICAgIHRoaXMsIGJ1dCBzb21ldGhpbmcgbGlrZSBhICQxMCBYMTAwUCBjYXJkIGRvZXMuICBBbnkgREMgcmVhbGx5IHNsb3dzCisgICAgICAgZG93biBjb252ZXJnZW5jZS4KKworICAgICAgIE5vdGU6IHJlbW92ZXMgc29tZSBsb3cgZnJlcXVlbmN5IGZyb20gdGhlIHNpZ25hbCwgdGhpcyByZWR1Y2VzCisgICAgICAgdGhlIHNwZWVjaCBxdWFsaXR5IHdoZW4gbGlzdGVuaW5nIHRvIHNhbXBsZXMgdGhyb3VnaCBoZWFkcGhvbmVzCisgICAgICAgYnV0IG1heSBub3QgYmUgb2J2aW91cyB0aHJvdWdoIGEgdGVsZXBob25lIGhhbmRzZXQuCisKKyAgICAgICBOb3RlIHRoYXQgdGhlIDNkQiBmcmVxdWVuY3kgaW4gcmFkaWFucyBpcyBhcHByb3ggQmV0YSwgZS5nLiBmb3IKKyAgICAgICBCZXRhID0gMl4oLTMpID0gMC4xMjUsIDNkQiBmcmVxIGlzIDAuMTI1IHJhZHMgPSAxNTlIei4KKyAgICAqLworCisgICAgaWYgKGVjLT5hZGFwdGlvbl9tb2RlICYgRUNIT19DQU5fVVNFX1JYX0hQRikgeworICAgICAgdG1wID0gcnggPDwgMTU7CisjaWYgMQorICAgICAgICAvKiBNYWtlIHN1cmUgdGhlIGdhaW4gb2YgdGhlIEhQRiBpcyAxLjAuIFRoaXMgY2FuIHN0aWxsIHNhdHVyYXRlIGEgbGl0dGxlIHVuZGVyCisgICAgICAgICAgIGltcHVsc2UgY29uZGl0aW9ucywgYW5kIGl0IG1pZ2h0IHJvbGwgdG8gMzI3NjggYW5kIG5lZWQgY2xpcHBpbmcgb24gc3VzdGFpbmVkIHBlYWsKKyAgICAgICAgICAgbGV2ZWwgc2lnbmFscy4gSG93ZXZlciwgdGhlIHNjYWxlIG9mIHN1Y2ggY2xpcHBpbmcgaXMgc21hbGwsIGFuZCB0aGUgZXJyb3IgZHVlIHRvCisgICAgICAgICAgIGFueSBzYXR1cmF0aW9uIHNob3VsZCBub3QgbWFya2VkbHkgYWZmZWN0IHRoZSBkb3duc3RyZWFtIHByb2Nlc3NpbmcuICovCisgICAgICAgIHRtcCAtPSAodG1wID4+IDQpOworI2VuZGlmCisgICAgICBlYy0+cnhfMSArPSAtKGVjLT5yeF8xPj5EQ19MT0cyQkVUQSkgKyB0bXAgLSBlYy0+cnhfMjsKKworICAgICAgLyogaGFyZCBsaW1pdCBmaWx0ZXIgdG8gcHJldmVudCBjbGlwcGluZy4gIE5vdGUgdGhhdCBhdCB0aGlzIHN0YWdlCisJIHJ4IHNob3VsZCBiZSBsaW1pdGVkIHRvICsvLSAxNjM4MyBkdWUgdG8gcmlnaHQgc2hpZnQgYWJvdmUgKi8KKyAgICAgIHRtcDEgPSBlYy0+cnhfMSA+PiAxNTsKKyAgICAgIGlmICh0bXAxID4gMTYzODMpIHRtcDEgPSAxNjM4MzsKKyAgICAgIGlmICh0bXAxIDwgLTE2MzgzKSB0bXAxID0gLTE2MzgzOworICAgICAgcnggPSB0bXAxOworICAgICAgZWMtPnJ4XzIgPSB0bXA7CisgICAgfQorCisgICAgLyogQmxvY2sgYXZlcmFnZSBvZiBwb3dlciBpbiB0aGUgZmlsdGVyIHN0YXRlcy4gIFVzZWQgZm9yCisgICAgICAgYWRhcHRpb24gcG93ZXIgY2FsY3VsYXRpb24uICovCisKKyAgICB7CisJaW50IG5ldywgb2xkOworCisJLyogZWZmaWNpZW50ICJvdXQgd2l0aCB0aGUgb2xkIGFuZCBpbiB3aXRoIHRoZSBuZXciIGFsZ29yaXRobSBzbworCSAgIHdlIGRvbid0IGhhdmUgdG8gcmVjYWxjdWxhdGUgb3ZlciB0aGUgd2hvbGUgYmxvY2sgb2YKKwkgICBzYW1wbGVzLiAqLworCW5ldyA9IChpbnQpdHggKiAoaW50KXR4OworCW9sZCA9IChpbnQpZWMtPmZpcl9zdGF0ZS5oaXN0b3J5W2VjLT5maXJfc3RhdGUuY3Vycl9wb3NdICoKKyAgICAgICAgICAgICAgKGludCllYy0+ZmlyX3N0YXRlLmhpc3RvcnlbZWMtPmZpcl9zdGF0ZS5jdXJyX3Bvc107CisJZWMtPlBzdGF0ZXMgKz0gKChuZXcgLSBvbGQpICsgKDE8PGVjLT5sb2cydGFwcykpID4+IGVjLT5sb2cydGFwczsKKwlpZiAoZWMtPlBzdGF0ZXMgPCAwKSBlYy0+UHN0YXRlcyA9IDA7CisgICAgfQorCisgICAgLyogQ2FsY3VsYXRlIHNob3J0IHRlcm0gYXZlcmFnZSBsZXZlbHMgdXNpbmcgc2ltcGxlIHNpbmdsZSBwb2xlIElJUnMgKi8KKworICAgIGVjLT5MdHhhY2MgKz0gYWJzKHR4KSAtIGVjLT5MdHg7CisgICAgZWMtPkx0eCA9IChlYy0+THR4YWNjICsgKDE8PDQpKSA+PiA1OworICAgIGVjLT5McnhhY2MgKz0gYWJzKHJ4KSAtIGVjLT5Mcng7CisgICAgZWMtPkxyeCA9IChlYy0+THJ4YWNjICsgKDE8PDQpKSA+PiA1OworCisgICAgLyogRm9yZWdyb3VuZCBmaWx0ZXIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworICAgIGVjLT5maXJfc3RhdGUuY29lZmZzID0gZWMtPmZpcl90YXBzMTZbMF07CisgICAgZWNob192YWx1ZSA9IGZpcjE2KCZlYy0+ZmlyX3N0YXRlLCB0eCk7CisgICAgZWMtPmNsZWFuID0gcnggLSBlY2hvX3ZhbHVlOworICAgIGVjLT5MY2xlYW5hY2MgKz0gYWJzKGVjLT5jbGVhbikgLSBlYy0+TGNsZWFuOworICAgIGVjLT5MY2xlYW4gPSAoZWMtPkxjbGVhbmFjYyArICgxPDw0KSkgPj4gNTsKKworICAgIC8qIEJhY2tncm91bmQgZmlsdGVyIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKyAgICBlY2hvX3ZhbHVlID0gZmlyMTYoJmVjLT5maXJfc3RhdGVfYmcsIHR4KTsKKyAgICBjbGVhbl9iZyA9IHJ4IC0gZWNob192YWx1ZTsKKyAgICBlYy0+TGNsZWFuX2JnYWNjICs9IGFicyhjbGVhbl9iZykgLSBlYy0+TGNsZWFuX2JnOworICAgIGVjLT5MY2xlYW5fYmcgPSAoZWMtPkxjbGVhbl9iZ2FjYyArICgxPDw0KSkgPj4gNTsKKworICAgIC8qIEJhY2tncm91bmQgRmlsdGVyIGFkYXB0aW9uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworICAgIC8qIEFsbW9zdCBhbHdheXMgYWRhcCBiZyBmaWx0ZXIsIGp1c3Qgc2ltcGxlIERUIGFuZCBlbmVyZ3kKKyAgICAgICBkZXRlY3Rpb24gdG8gbWluaW1pc2UgYWRhcHRpb24gaW4gY2FzZXMgb2Ygc3Ryb25nIGRvdWJsZSB0YWxrLgorICAgICAgIEhvd2V2ZXIgdGhpcyBpcyBub3QgY3JpdGljYWwgZm9yIHRoZSBkdWFsIHBhdGggYWxnb3JpdGhtLgorICAgICovCisgICAgZWMtPmZhY3RvciA9IDA7CisgICAgZWMtPnNoaWZ0ID0gMDsKKyAgICBpZiAoKGVjLT5ub251cGRhdGVfZHdlbGwgPT0gMCkpIHsKKwlpbnQgICBQLCBsb2dQLCBzaGlmdDsKKworCS8qIERldGVybWluZToKKworCSAgIGYgPSBCZXRhICogY2xlYW5fYmdfcngvUCAtLS0tLS0gKDEpCisKKwkgICB3aGVyZSBQIGlzIHRoZSB0b3RhbCBwb3dlciBpbiB0aGUgZmlsdGVyIHN0YXRlcy4KKworCSAgIFRoZSBCb2ZmaW5zIGhhdmUgc2hvd24gdGhhdCBpZiB3ZSBvYmV5ICgxKSB3ZSBjb252ZXJnZQorCSAgIHF1aWNrbHkgYW5kIGF2b2lkIGluc3RhYmlsaXR5LgorCisJICAgVGhlIGNvcnJlY3QgZmFjdG9yIGYgbXVzdCBiZSBpbiBRMzAsIGFzIHRoaXMgaXMgdGhlIGZpeGVkCisJICAgcG9pbnQgZm9ybWF0IHJlcXVpcmVkIGJ5IHRoZSBsbXNfYWRhcHRfYmcoKSBmdW5jdGlvbiwKKwkgICB0aGVyZWZvcmUgdGhlIHNjYWxlZCB2ZXJzaW9uIG9mICgxKSBpczoKKworCSAgICgyXjMwKSAqIGYgID0gKDJeMzApICogQmV0YSAqIGNsZWFuX2JnX3J4L1AKKwkgICAgICAgZmFjdG9yICA9ICgyXjMwKSAqIEJldGEgKiBjbGVhbl9iZ19yeC9QICAgICAgICAgLS0tLS0gKDIpCisKKwkgICBXZSBoYXZlIGNob3NlbiBCZXRhID0gMC4yNSBieSBleHBlcmltZW50LCBzbzoKKworCSAgICAgICBmYWN0b3IgID0gKDJeMzApICogKDJeLTIpICogY2xlYW5fYmdfcngvUAorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMzAgLSAyIC0gbG9nMihQKSkKKwkgICAgICAgZmFjdG9yICA9IGNsZWFuX2JnX3J4IDIgICAgICAgICAgICAgICAgICAgICAgICAgLS0tLS0gKDMpCisKKwkgICBUbyBhdm9pZCBhIGRpdmlkZSB3ZSBhcHByb3hpbWF0ZSBsb2cyKFApIGFzIHRvcF9iaXQoUCksCisJICAgd2hpY2ggcmV0dXJucyB0aGUgcG9zaXRpb24gb2YgdGhlIGhpZ2hlc3Qgbm9uLXplcm8gYml0IGluCisJICAgUC4gIFRoaXMgYXBwcm94aW1hdGlvbiBpbnRyb2R1Y2VzIGFuIGVycm9yIGFzIGxhcmdlIGFzIGEKKwkgICBmYWN0b3Igb2YgMiwgYnV0IHRoZSBhbGdvcml0aG0gc2VlbXMgdG8gaGFuZGxlIGl0IE9LLgorCisJICAgQ29tZSB0byB0aGluayBvZiBpdCBhIGRpdmlkZSBtYXkgbm90IGJlIGEgYmlnIGRlYWwgb24gYQorCSAgIG1vZGVybiBEU1AsIHNvIGl0cyBwcm9iYWJseSB3b3J0aCBjaGVja2luZyBvdXQgdGhlIGN5Y2xlcworCSAgIGZvciBhIGRpdmlkZSB2ZXJzdXMgYSB0b3BfYml0KCkgaW1wbGVtZW50YXRpb24uCisJKi8KKworCVAgPSBNSU5fVFhfUE9XRVJfRk9SX0FEQVBUSU9OICsgZWMtPlBzdGF0ZXM7CisJbG9nUCA9IHRvcF9iaXQoUCkgKyBlYy0+bG9nMnRhcHM7CisJc2hpZnQgPSAzMCAtIDIgLSBsb2dQOworCWVjLT5zaGlmdCA9IHNoaWZ0OworCisJbG1zX2FkYXB0X2JnKGVjLCBjbGVhbl9iZywgc2hpZnQpOworICAgIH0KKworICAgIC8qIHZlcnkgc2ltcGxlIERURCB0byBtYWtlIHN1cmUgd2UgZG9udCB0cnkgYW5kIGFkYXB0IHdpdGggc3Ryb25nCisgICAgICAgbmVhciBlbmQgc3BlZWNoICovCisKKyAgICBlYy0+YWRhcHQgPSAwOworICAgIGlmICgoZWMtPkxyeCA+IE1JTl9SWF9QT1dFUl9GT1JfQURBUFRJT04pICYmIChlYy0+THJ4ID4gZWMtPkx0eCkpCisJZWMtPm5vbnVwZGF0ZV9kd2VsbCA9IERURF9IQU5HT1ZFUjsKKyAgICBpZiAoZWMtPm5vbnVwZGF0ZV9kd2VsbCkKKwllYy0+bm9udXBkYXRlX2R3ZWxsLS07CisKKyAgICAvKiBUcmFuc2ZlciBsb2dpYyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisgICAgLyogVGhlc2UgY29uZGl0aW9ucyBhcmUgZnJvbSB0aGUgZHVhbCBwYXRoIHBhcGVyIFsxXSwgSSBtZXNzZWQgd2l0aAorICAgICAgIHRoZW0gYSBiaXQgdG8gaW1wcm92ZSBwZXJmb3JtYW5jZS4gKi8KKworICAgIGlmICgoZWMtPmFkYXB0aW9uX21vZGUgJiBFQ0hPX0NBTl9VU0VfQURBUFRJT04pICYmCisJKGVjLT5ub251cGRhdGVfZHdlbGwgPT0gMCkgJiYKKwkoOCplYy0+TGNsZWFuX2JnIDwgNyplYy0+TGNsZWFuKSAvKiAoZWMtPkxjbGVhbl9iZyA8IDAuODc1KmVjLT5MY2xlYW4pICovICYmCisJKDgqZWMtPkxjbGVhbl9iZyA8IGVjLT5MdHgpICAgICAgLyogKGVjLT5MY2xlYW5fYmcgPCAwLjEyNSplYy0+THR4KSAgICAqLyApCisgICAgeworCWlmIChlYy0+Y29uZF9tZXQgPT0gNikgeworCSAgICAvKiBCRyBmaWx0ZXIgaGFzIGhhZCBiZXR0ZXIgcmVzdWx0cyBmb3IgNiBjb25zZWN1dGl2ZSBzYW1wbGVzICovCisJICAgIGVjLT5hZGFwdCA9IDE7CisJICAgIG1lbWNweShlYy0+ZmlyX3RhcHMxNlswXSwgZWMtPmZpcl90YXBzMTZbMV0sIGVjLT50YXBzKnNpemVvZihpbnQxNl90KSk7CisJfQorCWVsc2UKKwkgICAgZWMtPmNvbmRfbWV0Kys7CisgICAgfQorICAgIGVsc2UKKwllYy0+Y29uZF9tZXQgPSAwOworCisgICAgLyogTm9uLUxpbmVhciBQcm9jZXNzaW5nIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKyAgICBlYy0+Y2xlYW5fbmxwID0gZWMtPmNsZWFuOworICAgIGlmIChlYy0+YWRhcHRpb25fbW9kZSAmIEVDSE9fQ0FOX1VTRV9OTFApCisgICAgeworICAgICAgICAvKiBOb24tbGluZWFyIHByb2Nlc3NvciAtIGEgZmFuY3kgd2F5IHRvIHNheSAiemFwIHNtYWxsIHNpZ25hbHMsIHRvIGF2b2lkCisgICAgICAgICAgIHJlc2lkdWFsIGVjaG8gZHVlIHRvICh1TGF3L0FMYXcpIG5vbi1saW5lYXJpdHkgaW4gdGhlIGNoYW5uZWwuIi4gKi8KKworICAgICAgaWYgKCgxNiplYy0+TGNsZWFuIDwgZWMtPkx0eCkpCisgICAgICB7CisJLyogT3VyIGUvYyBoYXMgaW1wcm92ZWQgZWNobyBieSBhdCBsZWFzdCAyNCBkQiAoZWFjaCBmYWN0b3Igb2YgMiBpcyA2ZEIsCisJICAgc28gMioyKjIqMj0xNiBpcyB0aGUgc2FtZSBhcyA2KzYrNis2PTI0ZEIpICovCisgICAgICAgIGlmIChlYy0+YWRhcHRpb25fbW9kZSAmIEVDSE9fQ0FOX1VTRV9DTkcpCisJeworCSAgICBlYy0+Y25nX2xldmVsID0gZWMtPkxiZ247CisKKwkgICAgLyogVmVyeSBlbGVtZW50YXJ5IGNvbWZvcnQgbm9pc2UgZ2VuZXJhdGlvbi4gIEp1c3QgcmFuZG9tCisJICAgICAgIG51bWJlcnMgcm9sbGVkIG9mZiB2ZXJ5IHZhZ3VlbHkgSG90aC1saWtlLiAgRFI6IFRoaXMKKwkgICAgICAgbm9pc2UgZG9lc24ndCBzb3VuZCBxdWl0ZSByaWdodCB0byBtZSAtIEkgc3VzcGVjdCB0aGVyZQorCSAgICAgICBhcmUgc29tZSBvdmVybGZvdyBpc3N1ZXMgaW4gdGhlIGZpbHRlcmluZyBhcyBpdCdzIHRvbworCSAgICAgICAiY3JhY2tseSIuICBUT0RPOiBkZWJ1ZyB0aGlzLCBtYXliZSBqdXN0IHBsYXkgbm9pc2UgYXQKKwkgICAgICAgaGlnaCBsZXZlbCBvciBsb29rIGF0IHNwZWN0cnVtLgorCSAgICAqLworCisJICAgIGVjLT5jbmdfcm5kbnVtID0gMTY2NDUyNVUqZWMtPmNuZ19ybmRudW0gKyAxMDEzOTA0MjIzVTsKKwkgICAgZWMtPmNuZ19maWx0ZXIgPSAoKGVjLT5jbmdfcm5kbnVtICYgMHhGRkZGKSAtIDMyNzY4ICsgNSplYy0+Y25nX2ZpbHRlcikgPj4gMzsKKwkgICAgZWMtPmNsZWFuX25scCA9IChlYy0+Y25nX2ZpbHRlciplYy0+Y25nX2xldmVsKjgpID4+IDE0OworCisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoZWMtPmFkYXB0aW9uX21vZGUgJiBFQ0hPX0NBTl9VU0VfQ0xJUCkKKwl7CisJICAgIC8qIFRoaXMgc291bmRzIG11Y2ggYmV0dGVyIHRoYW4gQ05HICovCisJICAgIGlmIChlYy0+Y2xlYW5fbmxwID4gZWMtPkxiZ24pCisJICAgICAgZWMtPmNsZWFuX25scCA9IGVjLT5MYmduOworCSAgICBpZiAoZWMtPmNsZWFuX25scCA8IC1lYy0+TGJnbikKKwkgICAgICBlYy0+Y2xlYW5fbmxwID0gLWVjLT5MYmduOworCX0KKwllbHNlCisgICAgICAgIHsKKwkgIC8qIGp1c3QgbXV0ZSB0aGUgcmVzaWR1YWwsIGRvZXNuJ3Qgc291bmQgdmVyeSBnb29kLCB1c2VkIG1haW5seQorCSAgICAgaW4gRzE2OCB0ZXN0cyAqLworICAgICAgICAgIGVjLT5jbGVhbl9ubHAgPSAwOworICAgICAgICB9CisgICAgICB9CisgICAgICBlbHNlIHsKKwkgIC8qIEJhY2tncm91bmQgbm9pc2UgZXN0aW1hdG9yLiAgSSB0cmllZCBhIGZldyBhbGdvcml0aG1zCisJICAgICBoZXJlIHdpdGhvdXQgbXVjaCBsdWNrLiAgVGhpcyB2ZXJ5IHNpbXBsZSBvbmUgc2VlbXMgdG8KKwkgICAgIHdvcmsgYmVzdCwgd2UganVzdCBhdmVyYWdlIHRoZSBsZXZlbCB1c2luZyBhIHNsb3cgKDEgc2VjCisJICAgICB0aW1lIGNvbnN0KSBmaWx0ZXIgaWYgdGhlIGN1cnJlbnQgbGV2ZWwgaXMgbGVzcyB0aGFuIGEKKwkgICAgIChleHBlcmltZW50YWxseSBkZXJpdmVkKSBjb25zdGFudC4gIFRoaXMgbWVhbnMgd2UgZG9udAorCSAgICAgaW5jbHVkZSBoaWdoIGxldmVsIHNpZ25hbHMgbGlrZSBuZWFyIGVuZCBzcGVlY2guICBXaGVuCisJICAgICBjb21iaW5lZCB3aXRoIENORyBvciBlc3BlY2lhbGx5IENMSVAgc2VlbXMgdG8gd29yayBPSy4KKwkgICovCisJICBpZiAoZWMtPkxjbGVhbiA8IDQwKSB7CisJICAgICAgZWMtPkxiZ25fYWNjICs9IGFicyhlYy0+Y2xlYW4pIC0gZWMtPkxiZ247CisJICAgICAgZWMtPkxiZ24gPSAoZWMtPkxiZ25fYWNjICsgKDE8PDExKSkgPj4gMTI7CisJICB9CisgICAgICAgfQorICAgIH0KKworICAgIC8qIFJvbGwgYXJvdW5kIHRoZSB0YXBzIGJ1ZmZlciAqLworICAgIGlmIChlYy0+Y3Vycl9wb3MgPD0gMCkKKyAgICAgICAgZWMtPmN1cnJfcG9zID0gZWMtPnRhcHM7CisgICAgZWMtPmN1cnJfcG9zLS07CisKKyAgICBpZiAoZWMtPmFkYXB0aW9uX21vZGUgJiBFQ0hPX0NBTl9ESVNBQkxFKQorICAgICAgZWMtPmNsZWFuX25scCA9IHJ4OworCisgICAgLyogT3V0cHV0IHNjYWxlZCBiYWNrIHVwIGFnYWluIHRvIG1hdGNoIGlucHV0IHNjYWxpbmcgKi8KKworICAgIHJldHVybiAoaW50MTZfdCkgZWMtPmNsZWFuX25scCA8PCAxOworfQorCisvKi0gRW5kIG9mIGZ1bmN0aW9uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyogVGhpcyBmdW5jdGlvbiBpcyBzZXBlcmF0ZWQgZnJvbSB0aGUgZWNobyBjYW5jZWxsZXIgaXMgaXQgaXMgdXN1YWxseSBjYWxsZWQKKyAgIGFzIHBhcnQgb2YgdGhlIHR4IHByb2Nlc3MuICBTZWUgcnggSFAgKERDIGJsb2NraW5nKSBmaWx0ZXIgYWJvdmUsIGl0J3MKKyAgIHRoZSBzYW1lIGRlc2lnbi4KKworICAgU29tZSBzb2Z0IHBob25lcyBzZW5kIHNwZWVjaCBzaWduYWxzIHdpdGggYSBsb3Qgb2YgbG93IGZyZXF1ZW5jeQorICAgZW5lcmd5LCBlLmcuIGRvd24gdG8gMjBIei4gIFRoaXMgY2FuIG1ha2UgdGhlIGh5YnJpZCBub24tbGluZWFyCisgICB3aGljaCBjYXVzZXMgdGhlIGVjaG8gY2FuY2VsbGVyIHRvIGZhbGwgb3Zlci4gIFRoaXMgZmlsdGVyIGNhbiBoZWxwCisgICBieSByZW1vdmluZyBhbnkgbG93IGZyZXF1ZW5jeSBiZWZvcmUgaXQgZ2V0cyB0byB0aGUgdHggcG9ydCBvZiB0aGUKKyAgIGh5YnJpZC4KKworICAgSXQgY2FuIGFsc28gaGVscCBieSByZW1vdmluZyBhbmQgREMgaW4gdGhlIHR4IHNpZ25hbC4gIERDIGlzIGJhZAorICAgZm9yIExNUyBhbGdvcml0aG1zLgorCisgICBUaGlzIGlzIG9uZSBvZiB0aGUgY2xhc3NpYyBEQyByZW1vdmFsIGZpbHRlcnMsIGFkanVzdGVkIHRvIHByb3ZpZGUgc3VmZmljaWVudAorICAgYmFzcyByb2xsb2ZmIHRvIG1lZXQgdGhlIGFib3ZlIHJlcXVpcmVtZW50IHRvIHByb3RlY3QgaHlicmlkcyBmcm9tIHRoaW5ncyB0aGF0CisgICB1cHNldCB0aGVtLiBUaGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHN1Y2Nlc3NpdmUgc2FtcGxlcyBwcm9kdWNlcyBhIGxvdXN5IEhQRiwgYW5kCisgICB0aGVuIGEgc3VpdGFibHkgcGxhY2VkIHBvbGUgZmxhdHRlbnMgdGhpbmdzIG91dC4gVGhlIGZpbmFsIHJlc3VsdCBpcyBhIG5pY2VseQorICAgcm9sbGVkIG9mZiBiYXNzIGVuZC4gVGhlIGZpbHRlcmluZyBpcyBpbXBsZW1lbnRlZCB3aXRoIGV4dGVuZGVkIGZyYWN0aW9uYWwKKyAgIHByZWNpc2lvbiwgd2hpY2ggbm9pc2Ugc2hhcGVzIHRoaW5ncywgZ2l2aW5nIHZlcnkgY2xlYW4gREMgcmVtb3ZhbC4KKyovCisKK2ludDE2X3QgZWNob19jYW5faHBmX3R4KGVjaG9fY2FuX3N0YXRlX3QgKmVjLCBpbnQxNl90IHR4KSB7CisgICAgaW50IHRtcCwgdG1wMTsKKworICAgIGlmIChlYy0+YWRhcHRpb25fbW9kZSAmIEVDSE9fQ0FOX1VTRV9UWF9IUEYpIHsKKyAgICAgICAgdG1wID0gdHggPDwgMTU7CisjaWYgMQorICAgICAgICAvKiBNYWtlIHN1cmUgdGhlIGdhaW4gb2YgdGhlIEhQRiBpcyAxLjAuIFRoZSBmaXJzdCBjYW4gc3RpbGwgc2F0dXJhdGUgYSBsaXR0bGUgdW5kZXIKKyAgICAgICAgICAgaW1wdWxzZSBjb25kaXRpb25zLCBhbmQgaXQgbWlnaHQgcm9sbCB0byAzMjc2OCBhbmQgbmVlZCBjbGlwcGluZyBvbiBzdXN0YWluZWQgcGVhaworICAgICAgICAgICBsZXZlbCBzaWduYWxzLiBIb3dldmVyLCB0aGUgc2NhbGUgb2Ygc3VjaCBjbGlwcGluZyBpcyBzbWFsbCwgYW5kIHRoZSBlcnJvciBkdWUgdG8KKyAgICAgICAgICAgYW55IHNhdHVyYXRpb24gc2hvdWxkIG5vdCBtYXJrZWRseSBhZmZlY3QgdGhlIGRvd25zdHJlYW0gcHJvY2Vzc2luZy4gKi8KKyAgICAgICAgdG1wIC09ICh0bXAgPj4gNCk7CisjZW5kaWYKKyAgICAgICAgZWMtPnR4XzEgKz0gLShlYy0+dHhfMT4+RENfTE9HMkJFVEEpICsgdG1wIC0gZWMtPnR4XzI7CisgICAgICAgIHRtcDEgPSBlYy0+dHhfMSA+PiAxNTsKKwlpZiAodG1wMSA+IDMyNzY3KSB0bXAxID0gMzI3Njc7CisJaWYgKHRtcDEgPCAtMzI3NjcpIHRtcDEgPSAtMzI3Njc7CisJdHggPSB0bXAxOworICAgICAgICBlYy0+dHhfMiA9IHRtcDsKKyAgICB9CisKKyAgICByZXR1cm4gdHg7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZWNoby9lY2hvLmggYi9kcml2ZXJzL3N0YWdpbmcvZWNoby9lY2hvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2E5MWI0MzkKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvZWNoby9lY2hvLmgKQEAgLTAsMCArMSwyMjAgQEAKKy8qCisgKiBTcGFuRFNQIC0gYSBzZXJpZXMgb2YgRFNQIGNvbXBvbmVudHMgZm9yIHRlbGVwaG9ueQorICoKKyAqIGVjaG8uYyAtIEEgbGluZSBlY2hvIGNhbmNlbGxlci4gIFRoaXMgY29kZSBpcyBiZWluZyBkZXZlbG9wZWQKKyAqICAgICAgICAgIGFnYWluc3QgYW5kIHBhcnRpYWxseSBjb21wbGllcyB3aXRoIEcxNjguCisgKgorICogV3JpdHRlbiBieSBTdGV2ZSBVbmRlcndvb2QgPHN0ZXZldUBjb3BwaWNlLm9yZz4KKyAqICAgICAgICAgYW5kIERhdmlkIFJvd2UgPGRhdmlkX2F0X3Jvd2V0ZWxfZG90X2NvbT4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDEgU3RldmUgVW5kZXJ3b29kIGFuZCAyMDA3IERhdmlkIFJvd2UKKyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiwgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqCisgKiAkSWQ6IGVjaG8uaCx2IDEuOSAyMDA2LzEwLzI0IDEzOjQ1OjI4IHN0ZXZldSBFeHAgJAorICovCisKKyNpZm5kZWYgX19FQ0hPX0gKKyNkZWZpbmUgX19FQ0hPX0gKKworLyohIFxwYWdlIGVjaG9fY2FuX3BhZ2UgTGluZSBlY2hvIGNhbmNlbGxhdGlvbiBmb3Igdm9pY2UKKworXHNlY3Rpb24gZWNob19jYW5fcGFnZV9zZWNfMSBXaGF0IGRvZXMgaXQgZG8/CitUaGlzIG1vZHVsZSBhaW1zIHRvIHByb3ZpZGUgRy4xNjgtMjAwMiBjb21wbGlhbnQgZWNobyBjYW5jZWxsYXRpb24sIHRvIHJlbW92ZQorZWxlY3RyaWNhbCBlY2hvZXMgKGUuZy4gZnJvbSAyLTQgd2lyZSBoeWJyaWRzKSBmcm9tIHZvaWNlIGNhbGxzLgorCitcc2VjdGlvbiBlY2hvX2Nhbl9wYWdlX3NlY18yIEhvdyBkb2VzIGl0IHdvcms/CitUaGUgaGVhcnQgb2YgdGhlIGVjaG8gY2FuY2VsbG9yIGlzIEZJUiBmaWx0ZXIuIFRoaXMgaXMgYWRhcHRlZCB0byBtYXRjaCB0aGUKK2VjaG8gaW1wdWxzZSByZXNwb25zZSBvZiB0aGUgdGVsZXBob25lIGxpbmUuIEl0IG11c3QgYmUgbG9uZyBlbm91Z2ggdG8KK2FkZXF1YXRlbHkgY292ZXIgdGhlIGR1cmF0aW9uIG9mIHRoYXQgaW1wdWxzZSByZXNwb25zZS4gVGhlIHNpZ25hbCB0cmFuc21pdHRlZAordG8gdGhlIHRlbGVwaG9uZSBsaW5lIGlzIHBhc3NlZCB0aHJvdWdoIHRoZSBGSVIgZmlsdGVyLiBPbmNlIHRoZSBGSVIgaXMKK3Byb3Blcmx5IGFkYXB0ZWQsIHRoZSByZXN1bHRpbmcgb3V0cHV0IGlzIGFuIGVzdGltYXRlIG9mIHRoZSBlY2hvIHNpZ25hbAorcmVjZWl2ZWQgZnJvbSB0aGUgbGluZS4gVGhpcyBpcyBzdWJ0cmFjdGVkIGZyb20gdGhlIHJlY2VpdmVkIHNpZ25hbC4gVGhlIHJlc3VsdAoraXMgYW4gZXN0aW1hdGUgb2YgdGhlIHNpZ25hbCB3aGljaCBvcmlnaW5hdGVkIGF0IHRoZSBmYXIgZW5kIG9mIHRoZSBsaW5lLCBmcmVlCitmcm9tIGVjaG9zIG9mIG91ciBvd24gdHJhbnNtaXR0ZWQgc2lnbmFsLgorCitUaGUgbGVhc3QgbWVhbiBzcXVhcmVzIChMTVMpIGFsZ29yaXRobSBpcyBhdHRyaWJ1dGVkIHRvIFdpZHJvdyBhbmQgSG9mZiwgYW5kCit3YXMgaW50cm9kdWNlZCBpbiAxOTYwLiBJdCBpcyB0aGUgY29tbW9uZXN0IGZvcm0gb2YgZmlsdGVyIGFkYXB0aW9uIHVzZWQgaW4KK3RoaW5ncyBsaWtlIG1vZGVtIGxpbmUgZXF1YWxpc2VycyBhbmQgbGluZSBlY2hvIGNhbmNlbGxlcnMuIFRoZXJlIGl0IHdvcmtzIHZlcnkKK3dlbGwuICBIb3dldmVyLCBpdCBvbmx5IHdvcmtzIHdlbGwgZm9yIHNpZ25hbHMgb2YgY29uc3RhbnQgYW1wbGl0dWRlLiBJdCB3b3JrcwordmVyeSBwb29ybHkgZm9yIHRoaW5ncyBsaWtlIHNwZWVjaCBlY2hvIGNhbmNlbGxhdGlvbiwgd2hlcmUgdGhlIHNpZ25hbCBsZXZlbAordmFyaWVzIHdpZGVseS4gIFRoaXMgaXMgcXVpdGUgZWFzeSB0byBmaXguIElmIHRoZSBzaWduYWwgbGV2ZWwgaXMgbm9ybWFsaXNlZCAtCitzaW1pbGFyIHRvIGFwcGx5aW5nIEFHQyAtIExNUyBjYW4gd29yayBhcyB3ZWxsIGZvciBhIHNpZ25hbCBvZiB2YXJ5aW5nCithbXBsaXR1ZGUgYXMgaXQgZG9lcyBmb3IgYSBtb2RlbSBzaWduYWwuIFRoaXMgbm9ybWFsaXNlZCBsZWFzdCBtZWFuIHNxdWFyZXMKKyhOTE1TKSBhbGdvcml0aG0gaXMgdGhlIGNvbW1vbmVzdCBvbmUgdXNlZCBmb3Igc3BlZWNoIGVjaG8gY2FuY2VsbGF0aW9uLiBNYW55CitvdGhlciBhbGdvcml0aG1zIGV4aXN0IC0gZS5nLiBSTFMgKGVzc2VudGlhbGx5IHRoZSBzYW1lIGFzIEthbG1hbiBmaWx0ZXJpbmcpLAorRkFQLCBldGMuIFNvbWUgcGVyZm9ybSBzaWduaWZpY2FudGx5IGJldHRlciB0aGFuIE5MTVMuICBIb3dldmVyLCBmYWN0b3JzIHN1Y2gKK2FzIGNvbXB1dGF0aW9uYWwgY29tcGxleGl0eSBhbmQgcGF0ZW50cyBmYXZvdXIgdGhlIHVzZSBvZiBOTE1TLgorCitBIHNpbXBsZSByZWZpbmVtZW50IHRvIE5MTVMgY2FuIGltcHJvdmUgaXRzIHBlcmZvcm1hbmNlIHdpdGggc3BlZWNoLiBOTE1TIHRlbmRzCit0byBhZGFwdCBiZXN0IHRvIHRoZSBzdHJvbmdlc3QgcGFydHMgb2YgYSBzaWduYWwuIElmIHRoZSBzaWduYWwgaXMgd2hpdGUgbm9pc2UsCit0aGUgTkxNUyBhbGdvcml0aG0gd29ya3MgdmVyeSB3ZWxsLiBIb3dldmVyLCBzcGVlY2ggaGFzIG1vcmUgbG93IGZyZXF1ZW5jeSB0aGFuCitoaWdoIGZyZXF1ZW5jeSBjb250ZW50LiBQcmUtd2hpdGVuaW5nIChpLmUuIGZpbHRlcmluZyB0aGUgc2lnbmFsIHRvIGZsYXR0ZW4gaXRzCitzcGVjdHJ1bSkgdGhlIGVjaG8gc2lnbmFsIGltcHJvdmVzIHRoZSBhZGFwdCByYXRlIGZvciBzcGVlY2gsIGFuZCBlbnN1cmVzIHRoZQorZmluYWwgcmVzaWR1YWwgc2lnbmFsIGlzIG5vdCBoZWF2aWx5IGJpYXNlZCB0b3dhcmRzIGhpZ2ggZnJlcXVlbmNpZXMuIEEgdmVyeQorbG93IGNvbXBsZXhpdHkgZmlsdGVyIGlzIGFkZXF1YXRlIGZvciB0aGlzLCBzbyBwcmUtd2hpdGVuaW5nIGFkZHMgbGl0dGxlIHRvIHRoZQorY29tcHV0ZSByZXF1aXJlbWVudHMgb2YgdGhlIGVjaG8gY2FuY2VsbGVyLgorCitBbiBGSVIgZmlsdGVyIGFkYXB0ZWQgdXNpbmcgcHJlLXdoaXRlbmVkIE5MTVMgcGVyZm9ybXMgd2VsbCwgcHJvdmlkZWQgY2VydGFpbgorY29uZGl0aW9ucyBhcmUgbWV0OgorCisgICAgLSBUaGUgdHJhbnNtaXR0ZWQgc2lnbmFsIGhhcyBwb29yIHNlbGYtY29ycmVsYXRpb24uCisgICAgLSBUaGVyZSBpcyBubyBzaWduYWwgYmVpbmcgZ2VuZXJhdGVkIHdpdGhpbiB0aGUgZW52aXJvbm1lbnQgYmVpbmcKKyAgICAgIGNhbmNlbGxlZC4KKworVGhlIGRpZmZpY3VsdHkgaXMgdGhhdCBuZWl0aGVyIG9mIHRoZXNlIGNhbiBiZSBndWFyYW50ZWVkLgorCitJZiB0aGUgYWRhcHRpb24gaXMgcGVyZm9ybWVkIHdoaWxlIHRyYW5zbWl0dGluZyBub2lzZSAob3Igc29tZXRoaW5nIGZhaXJseQorbm9pc2UgbGlrZSwgc3VjaCBhcyB2b2ljZSkgdGhlIGFkYXB0aW9uIHdvcmtzIHZlcnkgd2VsbC4gSWYgdGhlIGFkYXB0aW9uIGlzCitwZXJmb3JtZWQgd2hpbGUgdHJhbnNtaXR0aW5nIHNvbWV0aGluZyBoaWdobHkgY29ycmVsYXRpdmUgKHR5cGljYWxseSBuYXJyb3cKK2JhbmQgZW5lcmd5IHN1Y2ggYXMgc2lnbmFsbGluZyB0b25lcyBvciBEVE1GKSwgdGhlIGFkYXB0aW9uIGNhbiBnbyBzZXJpb3VzbHkKK3dyb25nLiBUaGUgcmVhc29uIGlzIHRoZXJlIGlzIG9ubHkgb25lIHNvbHV0aW9uIGZvciB0aGUgYWRhcHRpb24gb24gYSBuZWFyCityYW5kb20gc2lnbmFsIC0gdGhlIGltcHVsc2UgcmVzcG9uc2Ugb2YgdGhlIGxpbmUuIEZvciBhIHJlcGV0aXRpdmUgc2lnbmFsLAordGhlcmUgYXJlIGFueSBudW1iZXIgb2Ygc29sdXRpb25zIHdoaWNoIGNvbnZlcmdlIHRoZSBhZGFwdGlvbiwgYW5kIG5vdGhpbmcKK2d1aWRlcyB0aGUgYWRhcHRpb24gdG8gY2hvb3NlIHRoZSBnZW5lcmFsaXNlZCBvbmUuIEFsbG93aW5nIGFuIHVudHJhaW5lZAorY2FuY2VsbGVyIHRvIGNvbnZlcmdlIG9uIHRoaXMga2luZCBvZiBuYXJyb3diYW5kIGVuZXJneSBwcm9iYWJseSBhIGdvb2QgdGhpbmcsCitzaW5jZSBhdCBsZWFzdCBpdCBjYW5jZWxzIHRoZSB0b25lcy4gQWxsb3dpbmcgYSB3ZWxsIGNvbnZlcmdlZCBjYW5jZWxsZXIgdG8KK2NvbnRpbnVlIGNvbnZlcmdpbmcgb24gc3VjaCBlbmVyZ3kgaXMganVzdCBhIHdheSB0byBydWluIGl0cyBnZW5lcmFsaXNlZAorYWRhcHRpb24uIEEgbmFycm93YmFuZCBkZXRlY3RvciBpcyBuZWVkZWQsIHNvIGFkYXBhdGlvbiBjYW4gYmUgc3VzcGVuZGVkIGF0CithcHByb3ByaWF0ZSB0aW1lcy4KKworVGhlIGFkYXB0aW9uIHByb2Nlc3MgaXMgYmFzZWQgb24gdHJ5aW5nIHRvIGVsaW1pbmF0ZSB0aGUgcmVjZWl2ZWQgc2lnbmFsLiBXaGVuCit0aGVyZSBpcyBhbnkgc2lnbmFsIGZyb20gd2l0aGluIHRoZSBlbnZpcm9ubWVudCBiZWluZyBjYW5jZWxsZWQgaXQgbWF5IHVwc2V0Cit0aGUgYWRhcHRpb24gcHJvY2Vzcy4gU2ltaWxhcmx5LCBpZiB0aGUgc2lnbmFsIHdlIGFyZSB0cmFuc21pdHRpbmcgaXMgc21hbGwsCitub2lzZSBtYXkgZG9taW5hdGUgYW5kIGRpc3R1cmIgdGhlIGFkYXB0aW9uIHByb2Nlc3MuIElmIHdlIGNhbiBlbnN1cmUgdGhhdCB0aGUKK2FkYXB0aW9uIGlzIG9ubHkgcGVyZm9ybWVkIHdoZW4gd2UgYXJlIHRyYW5zbWl0dGluZyBhIHNpZ25pZmljYW50IHNpZ25hbCBsZXZlbCwKK2FuZCB0aGUgZW52aXJvbm1lbnQgaXMgbm90LCB0aGluZ3Mgd2lsbCBiZSBPSy4gQ2xlYXJseSwgaXQgaXMgZWFzeSB0byB0ZWxsIHdoZW4KK3dlIGFyZSBzZW5kaW5nIGEgc2lnbmlmaWNhbnQgc2lnbmFsLiBUZWxsaW5nLCBpZiB0aGUgZW52aXJvbm1lbnQgaXMgZ2VuZXJhdGluZworYSBzaWduaWZpY2FudCBzaWduYWwsIGFuZCBkb2luZyBpdCB3aXRoIHN1ZmZpY2llbnQgc3BlZWQgdGhhdCB0aGUgYWRhcHRpb24gd2lsbAorbm90IGhhdmUgZGl2ZXJnZWQgdG9vIG11Y2ggbW9yZSB3ZSBzdG9wIGl0LCBpcyBhIGxpdHRsZSBoYXJkZXIuCisKK1RoZSBrZXkgcHJvYmxlbSBpbiBkZXRlY3Rpbmcgd2hlbiB0aGUgZW52aXJvbm1lbnQgaXMgc291cmNpbmcgc2lnbmlmaWNhbnQKK2VuZXJneSBpcyB0aGF0IHdlIG11c3QgZG8gdGhpcyB2ZXJ5IHF1aWNrbHkuIEdpdmVuIGEgcmVhc29uYWJseSBsb25nIHNhbXBsZSBvZgordGhlIHJlY2VpdmVkIHNpZ25hbCwgdGhlcmUgYXJlIGEgbnVtYmVyIG9mIHN0cmF0ZWdpZXMgd2hpY2ggbWF5IGJlIHVzZWQgdG8KK2Fzc2VzcyB3aGV0aGVyIHRoYXQgc2lnbmFsIGNvbnRhaW5zIGEgc3Ryb25nIGZhciBlbmQgY29tcG9uZW50LiBIb3dldmVyLCBieSB0aGUKK3RpbWUgdGhhdCBhc3Nlc3NtZW50IGlzIGNvbXBsZXRlIHRoZSBmYXIgZW5kIHNpZ25hbCB3aWxsIGhhdmUgYWxyZWFkeSBjYXVzZWQKK21ham9yIG1pcy1jb252ZXJnZW5jZSBpbiB0aGUgYWRhcHRpb24gcHJvY2Vzcy4gQW4gYXNzZXNzbWVudCBhbGdvcml0aG0gaXMKK25lZWRlZCB3aGljaCBwcm9kdWNlcyBhIGZhaXJseSBhY2N1cmF0ZSByZXN1bHQgZnJvbSBhIHZlcnkgc2hvcnQgYnVyc3Qgb2YgZmFyCitlbmQgZW5lcmd5LgorCitcc2VjdGlvbiBlY2hvX2Nhbl9wYWdlX3NlY18zIEhvdyBkbyBJIHVzZSBpdD8KK1RoZSBlY2hvIGNhbmNlbGxvciBwcm9jZXNzZXMgYm90aCB0aGUgdHJhbnNtaXQgYW5kIHJlY2VpdmUgc3RyZWFtcyBzYW1wbGUgYnkKK3NhbXBsZS4gVGhlIHByb2Nlc3NpbmcgZnVuY3Rpb24gaXMgbm90IGRlY2xhcmVkIGlubGluZS4gVW5mb3J0dW5hdGVseSwKK2NhbmNlbGxhdGlvbiByZXF1aXJlcyBtYW55IG9wZXJhdGlvbnMgcGVyIHNhbXBsZSwgc28gdGhlIGNhbGwgb3ZlcmhlYWQgaXMgb25seQorYSBtaW5vciBidXJkZW4uCisqLworCisjaW5jbHVkZSAiZmlyLmgiCisKKy8qIE1hc2sgYml0cyBmb3IgdGhlIGFkYXB0aW9uIG1vZGUgKi8KKyNkZWZpbmUgRUNIT19DQU5fVVNFX0FEQVBUSU9OCTB4MDEKKyNkZWZpbmUgRUNIT19DQU5fVVNFX05MUAkweDAyCisjZGVmaW5lIEVDSE9fQ0FOX1VTRV9DTkcJMHgwNAorI2RlZmluZSBFQ0hPX0NBTl9VU0VfQ0xJUAkweDA4CisjZGVmaW5lIEVDSE9fQ0FOX1VTRV9UWF9IUEYJMHgxMAorI2RlZmluZSBFQ0hPX0NBTl9VU0VfUlhfSFBGCTB4MjAKKyNkZWZpbmUgRUNIT19DQU5fRElTQUJMRQkweDQwCisKKy8qIQorICAgIEcuMTY4IGVjaG8gY2FuY2VsbGVyIGRlc2NyaXB0b3IuIFRoaXMgZGVmaW5lcyB0aGUgd29ya2luZyBzdGF0ZSBmb3IgYSBsaW5lCisgICAgZWNobyBjYW5jZWxsZXIuCisqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKwlpbnQxNl90IHR4LHJ4OworCWludDE2X3QgY2xlYW47CisJaW50MTZfdCBjbGVhbl9ubHA7CisKKwlpbnQgbm9udXBkYXRlX2R3ZWxsOworCWludCBjdXJyX3BvczsKKwlpbnQgdGFwczsKKwlpbnQgbG9nMnRhcHM7CisJaW50IGFkYXB0aW9uX21vZGU7CisKKwlpbnQgY29uZF9tZXQ7CisJaW50MzJfdCBQc3RhdGVzOworCWludDE2X3QgYWRhcHQ7CisJaW50MzJfdCBmYWN0b3I7CisJaW50MTZfdCBzaGlmdDsKKworCS8qIEF2ZXJhZ2UgbGV2ZWxzIGFuZCBhdmVyYWdpbmcgZmlsdGVyIHN0YXRlcyAqLworCWludCBMdHhhY2MsIExyeGFjYywgTGNsZWFuYWNjLCBMY2xlYW5fYmdhY2M7CisJaW50IEx0eCwgTHJ4OworCWludCBMY2xlYW47CisJaW50IExjbGVhbl9iZzsKKwlpbnQgTGJnbiwgTGJnbl9hY2MsIExiZ25fdXBwZXIsIExiZ25fdXBwZXJfYWNjOworCisJLyogZm9yZWdyb3VuZCBhbmQgYmFja2dyb3VuZCBmaWx0ZXIgc3RhdGVzICovCisJZmlyMTZfc3RhdGVfdCBmaXJfc3RhdGU7CisJZmlyMTZfc3RhdGVfdCBmaXJfc3RhdGVfYmc7CisJaW50MTZfdCAqZmlyX3RhcHMxNlsyXTsKKworCS8qIERDIGJsb2NraW5nIGZpbHRlciBzdGF0ZXMgKi8KKwlpbnQgdHhfMSwgdHhfMiwgcnhfMSwgcnhfMjsKKworCS8qIG9wdGlvbmFsIEhpZ2ggUGFzcyBGaWx0ZXIgc3RhdGVzICovCisJaW50MzJfdCB4dnR4WzVdLCB5dnR4WzVdOworCWludDMyX3QgeHZyeFs1XSwgeXZyeFs1XTsKKworCS8qIFBhcmFtZXRlcnMgZm9yIHRoZSBvcHRpb25hbCBIb3RoIG5vaXNlIGdlbmVyYXRvciAqLworCWludCBjbmdfbGV2ZWw7CisJaW50IGNuZ19ybmRudW07CisJaW50IGNuZ19maWx0ZXI7CisKKwkvKiBzbmFwc2hvdCBzYW1wbGUgb2YgY29lZmZzIHVzZWQgZm9yIGRldmVsb3BtZW50ICovCisJaW50MTZfdCAqc25hcHNob3Q7Cit9IGVjaG9fY2FuX3N0YXRlX3Q7CisKKy8qISBDcmVhdGUgYSB2b2ljZSBlY2hvIGNhbmNlbGxlciBjb250ZXh0LgorICAgIFxwYXJhbSBsZW4gVGhlIGxlbmd0aCBvZiB0aGUgY2FuY2VsbGVyLCBpbiBzYW1wbGVzLgorICAgIFxyZXR1cm4gVGhlIG5ldyBjYW5jZWxsZXIgY29udGV4dCwgb3IgTlVMTCBpZiB0aGUgY2FuY2VsbGVyIGNvdWxkIG5vdCBiZSBjcmVhdGVkLgorKi8KK2VjaG9fY2FuX3N0YXRlX3QgKmVjaG9fY2FuX2NyZWF0ZShpbnQgbGVuLCBpbnQgYWRhcHRpb25fbW9kZSk7CisKKy8qISBGcmVlIGEgdm9pY2UgZWNobyBjYW5jZWxsZXIgY29udGV4dC4KKyAgICBccGFyYW0gZWMgVGhlIGVjaG8gY2FuY2VsbGVyIGNvbnRleHQuCisqLwordm9pZCBlY2hvX2Nhbl9mcmVlKGVjaG9fY2FuX3N0YXRlX3QgKmVjKTsKKworLyohIEZsdXNoIChyZWluaXRpYWxpc2UpIGEgdm9pY2UgZWNobyBjYW5jZWxsZXIgY29udGV4dC4KKyAgICBccGFyYW0gZWMgVGhlIGVjaG8gY2FuY2VsbGVyIGNvbnRleHQuCisqLwordm9pZCBlY2hvX2Nhbl9mbHVzaChlY2hvX2Nhbl9zdGF0ZV90ICplYyk7CisKKy8qISBTZXQgdGhlIGFkYXB0aW9uIG1vZGUgb2YgYSB2b2ljZSBlY2hvIGNhbmNlbGxlciBjb250ZXh0LgorICAgIFxwYXJhbSBlYyBUaGUgZWNobyBjYW5jZWxsZXIgY29udGV4dC4KKyAgICBccGFyYW0gYWRhcHQgVGhlIG1vZGUuCisqLwordm9pZCBlY2hvX2Nhbl9hZGFwdGlvbl9tb2RlKGVjaG9fY2FuX3N0YXRlX3QgKmVjLCBpbnQgYWRhcHRpb25fbW9kZSk7CisKK3ZvaWQgZWNob19jYW5fc25hcHNob3QoZWNob19jYW5fc3RhdGVfdCAqZWMpOworCisvKiEgUHJvY2VzcyBhIHNhbXBsZSB0aHJvdWdoIGEgdm9pY2UgZWNobyBjYW5jZWxsZXIuCisgICAgXHBhcmFtIGVjIFRoZSBlY2hvIGNhbmNlbGxlciBjb250ZXh0LgorICAgIFxwYXJhbSB0eCBUaGUgdHJhbnNtaXR0ZWQgYXVkaW8gc2FtcGxlLgorICAgIFxwYXJhbSByeCBUaGUgcmVjZWl2ZWQgYXVkaW8gc2FtcGxlLgorICAgIFxyZXR1cm4gVGhlIGNsZWFuIChlY2hvIGNhbmNlbGxlZCkgcmVjZWl2ZWQgc2FtcGxlLgorKi8KK2ludDE2X3QgZWNob19jYW5fdXBkYXRlKGVjaG9fY2FuX3N0YXRlX3QgKmVjLCBpbnQxNl90IHR4LCBpbnQxNl90IHJ4KTsKKworLyohIFByb2Nlc3MgdG8gaGlnaCBwYXNzIGZpbHRlciB0aGUgdHggc2lnbmFsLgorICAgIFxwYXJhbSBlYyBUaGUgZWNobyBjYW5jZWxsZXIgY29udGV4dC4KKyAgICBccGFyYW0gdHggVGhlIHRyYW5zbWl0dGVkIGF1aW8gc2FtcGxlLgorICAgIFxyZXR1cm4gVGhlIEhQIGZpbHRlcmVkIHRyYW5zbWl0IHNhbXBsZSwgc2VuZCB0aGlzIHRvIHlvdXIgRC9BLgorKi8KK2ludDE2X3QgZWNob19jYW5faHBmX3R4KGVjaG9fY2FuX3N0YXRlX3QgKmVjLCBpbnQxNl90IHR4KTsKKworI2VuZGlmCS8qIF9fRUNIT19IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZWNoby9maXIuaCBiL2RyaXZlcnMvc3RhZ2luZy9lY2hvL2Zpci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUxYmZjNDkKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvZWNoby9maXIuaApAQCAtMCwwICsxLDM2OSBAQAorLyoKKyAqIFNwYW5EU1AgLSBhIHNlcmllcyBvZiBEU1AgY29tcG9uZW50cyBmb3IgdGVsZXBob255CisgKgorICogZmlyLmggLSBHZW5lcmFsIHRlbGVwaG9ueSBGSVIgcm91dGluZXMKKyAqCisgKiBXcml0dGVuIGJ5IFN0ZXZlIFVuZGVyd29vZCA8c3RldmV1QGNvcHBpY2Uub3JnPgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwMiBTdGV2ZSBVbmRlcndvb2QKKyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiwgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqCisgKiAkSWQ6IGZpci5oLHYgMS44IDIwMDYvMTAvMjQgMTM6NDU6Mjggc3RldmV1IEV4cCAkCisgKi8KKworLyohIFxwYWdlIGZpcl9wYWdlIEZJUiBmaWx0ZXJpbmcKK1xzZWN0aW9uIGZpcl9wYWdlX3NlY18xIFdoYXQgZG9lcyBpdCBkbz8KKz8/Py4KKworXHNlY3Rpb24gZmlyX3BhZ2Vfc2VjXzIgSG93IGRvZXMgaXQgd29yaz8KKz8/Py4KKyovCisKKyNpZiAhZGVmaW5lZChfRklSX0hfKQorI2RlZmluZSBfRklSX0hfCisKKy8qCisgICBCbGFja2ZpbiBOT1RFUyAmIElERUFTOgorCisgICBBIHNpbXBsZSBkb3QgcHJvZHVjdCBmdW5jdGlvbiBpcyB1c2VkIHRvIGltcGxlbWVudCB0aGUgZmlsdGVyLiAgVGhpcyBwZXJmb3JtcworICAganVzdCBvbmUgTUFDL2N5Y2xlIHdoaWNoIGlzIGluZWZmaWNpZW50IGJ1dCB3YXMgZWFzeSB0byBpbXBsZW1lbnQgYXMgYSBmaXJzdAorICAgcGFzcy4gIFRoZSBjdXJyZW50IEJsYWNrZmluIGNvZGUgYWxzbyB1c2VzIGFuIHVucm9sbGVkIGZvcm0gb2YgdGhlIGZpbHRlcgorICAgaGlzdG9yeSB0byBhdm9pZCAwIGxlbmd0aCBoYXJkd2FyZSBsb29wIGlzc3Vlcy4gIFRoaXMgaXMgd2FzdGVmdWwgb2YKKyAgIG1lbW9yeS4KKworICAgSWRlYXMgZm9yIGltcHJvdmVtZW50OgorCisgICAxLyBSZXdyaXRlIGZpbHRlciBmb3IgZHVhbCBNQUMgaW5uZXIgbG9vcC4gIFRoZSBpc3N1ZSBoZXJlIGlzIGhhbmRsaW5nCisgICBoaXN0b3J5IHNhbXBsZSBvZmZzZXRzIHRoYXQgYXJlIDE2IGJpdCBhbGlnbmVkIC0gdGhlIGR1YWwgTUFDIG5lZWRzCisgICAzMiBiaXQgYWxpZ21uZW50LiAgVGhlcmUgYXJlIHNvbWUgZ29vZCBleGFtcGxlcyBpbiBsaWJiZmRzcC4KKworICAgMi8gVXNlIHRoZSBoYXJkd2FyZSBjaXJjdWxhciBidWZmZXIgZmFjaWxpdHkgdG9oYWx2ZSBtZW1vcnkgdXNhZ2UuCisKKyAgIDMvIENvbnNpZGVyIHVzaW5nIGludGVybmFsIG1lbW9yeS4KKworICAgVXNpbmcgbGVzcyBtZW1vcnkgbWlnaHQgYWxzbyBpbXByb3ZlIHNwZWVkIGFzIGNhY2hlIG1pc3NlcyB3aWxsIGJlCisgICByZWR1Y2VkLiBBIGRyb3AgaW4gTUlQcyBhbmQgbWVtb3J5IGFwcHJvYWNoaW5nIDUwJSBzaG91bGQgYmUKKyAgIHBvc3NpYmxlLgorCisgICBUaGUgZm9yZWdyb3VuZCBhbmQgYmFja2dyb3VuZCBmaWx0ZXJzIGN1cnJlbmx0eSB1c2UgYSB0b3RhbCBvZgorICAgYWJvdXQgMTAgTUlQcy9jaCBhcyBtZWFzdXJlZCB3aXRoIHNwZWVkdGVzdC5jIG9uIGEgMjU2IFRBUCBlY2hvCisgICBjYW4uCisqLworCisjaWYgZGVmaW5lZChVU0VfTU1YKSAgfHwgIGRlZmluZWQoVVNFX1NTRTIpCisjaW5jbHVkZSAibW14LmgiCisjZW5kaWYKKworLyohCisgICAgMTYgYml0IGludGVnZXIgRklSIGRlc2NyaXB0b3IuIFRoaXMgZGVmaW5lcyB0aGUgd29ya2luZyBzdGF0ZSBmb3IgYSBzaW5nbGUKKyAgICBpbnN0YW5jZSBvZiBhbiBGSVIgZmlsdGVyIHVzaW5nIDE2IGJpdCBpbnRlZ2VyIGNvZWZmaWNpZW50cy4KKyovCit0eXBlZGVmIHN0cnVjdAoreworCWludCB0YXBzOworCWludCBjdXJyX3BvczsKKwljb25zdCBpbnQxNl90ICpjb2VmZnM7CisJaW50MTZfdCAqaGlzdG9yeTsKK30gZmlyMTZfc3RhdGVfdDsKKworLyohCisgICAgMzIgYml0IGludGVnZXIgRklSIGRlc2NyaXB0b3IuIFRoaXMgZGVmaW5lcyB0aGUgd29ya2luZyBzdGF0ZSBmb3IgYSBzaW5nbGUKKyAgICBpbnN0YW5jZSBvZiBhbiBGSVIgZmlsdGVyIHVzaW5nIDMyIGJpdCBpbnRlZ2VyIGNvZWZmaWNpZW50cywgYW5kIGZpbHRlcmluZworICAgIDE2IGJpdCBpbnRlZ2VyIGRhdGEuCisqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKwlpbnQgdGFwczsKKwlpbnQgY3Vycl9wb3M7CisJY29uc3QgaW50MzJfdCAqY29lZmZzOworCWludDE2X3QgKmhpc3Rvcnk7Cit9IGZpcjMyX3N0YXRlX3Q7CisKKy8qIQorICAgIEZsb2F0aW5nIHBvaW50IEZJUiBkZXNjcmlwdG9yLiBUaGlzIGRlZmluZXMgdGhlIHdvcmtpbmcgc3RhdGUgZm9yIGEgc2luZ2xlCisgICAgaW5zdGFuY2Ugb2YgYW4gRklSIGZpbHRlciB1c2luZyBmbG9hdGluZyBwb2ludCBjb2VmZmljaWVudHMgYW5kIGRhdGEuCisqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKwlpbnQgdGFwczsKKwlpbnQgY3Vycl9wb3M7CisJY29uc3QgZmxvYXQgKmNvZWZmczsKKwlmbG9hdCAqaGlzdG9yeTsKK30gZmlyX2Zsb2F0X3N0YXRlX3Q7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworc3RhdGljIF9faW5saW5lX18gY29uc3QgaW50MTZfdCAqZmlyMTZfY3JlYXRlKGZpcjE2X3N0YXRlX3QgKmZpciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpbnQxNl90ICpjb2VmZnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHRhcHMpCit7CisJZmlyLT50YXBzID0gdGFwczsKKwlmaXItPmN1cnJfcG9zID0gdGFwcyAtIDE7CisJZmlyLT5jb2VmZnMgPSBjb2VmZnM7CisjaWYgZGVmaW5lZChVU0VfTU1YKSAgfHwgIGRlZmluZWQoVVNFX1NTRTIpIHx8IGRlZmluZWQoX19CTEFDS0ZJTl9BU01fXykKKwlpZiAoKGZpci0+aGlzdG9yeSA9IG1hbGxvYygyKnRhcHMqc2l6ZW9mKGludDE2X3QpKSkpCisJCW1lbXNldChmaXItPmhpc3RvcnksIDAsIDIqdGFwcypzaXplb2YoaW50MTZfdCkpOworI2Vsc2UKKwlpZiAoKGZpci0+aGlzdG9yeSA9IChpbnQxNl90ICopIG1hbGxvYyh0YXBzKnNpemVvZihpbnQxNl90KSkpKQorCQltZW1zZXQoZmlyLT5oaXN0b3J5LCAwLCB0YXBzKnNpemVvZihpbnQxNl90KSk7CisjZW5kaWYKKwlyZXR1cm4gZmlyLT5oaXN0b3J5OworfQorLyotIEVuZCBvZiBmdW5jdGlvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgZmlyMTZfZmx1c2goZmlyMTZfc3RhdGVfdCAqZmlyKQoreworI2lmIGRlZmluZWQoVVNFX01NWCkgIHx8ICBkZWZpbmVkKFVTRV9TU0UyKSB8fCBkZWZpbmVkKF9fQkxBQ0tGSU5fQVNNX18pCisgICAgbWVtc2V0KGZpci0+aGlzdG9yeSwgMCwgMipmaXItPnRhcHMqc2l6ZW9mKGludDE2X3QpKTsKKyNlbHNlCisgICAgbWVtc2V0KGZpci0+aGlzdG9yeSwgMCwgZmlyLT50YXBzKnNpemVvZihpbnQxNl90KSk7CisjZW5kaWYKK30KKy8qLSBFbmQgb2YgZnVuY3Rpb24gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIGZpcjE2X2ZyZWUoZmlyMTZfc3RhdGVfdCAqZmlyKQoreworCWZyZWUoZmlyLT5oaXN0b3J5KTsKK30KKy8qLSBFbmQgb2YgZnVuY3Rpb24gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisjaWZkZWYgX19CTEFDS0ZJTl9BU01fXworc3RhdGljIGlubGluZSBpbnQzMl90IGRvdF9hc20oc2hvcnQgKngsIHNob3J0ICp5LCBpbnQgbGVuKQoreworICAgaW50IGRvdDsKKworICAgbGVuLS07CisKKyAgIF9fYXNtX18KKyAgICgKKyAgICJJMCA9ICUxO1xuXHQiCisgICAiSTEgPSAlMjtcblx0IgorICAgIkEwID0gMDtcblx0IgorICAgIlIwLkwgPSBXW0kwKytdIHx8IFIxLkwgPSBXW0kxKytdO1xuXHQiCisgICAiTE9PUCBkb3QlPSBMQzAgPSAlMztcblx0IgorICAgIkxPT1BfQkVHSU4gZG90JT07XG5cdCIKKyAgICAgICJBMCArPSBSMC5MICogUjEuTCAoSVMpIHx8IFIwLkwgPSBXW0kwKytdIHx8IFIxLkwgPSBXW0kxKytdO1xuXHQiCisgICAiTE9PUF9FTkQgZG90JT07XG5cdCIKKyAgICJBMCArPSBSMC5MKlIxLkwgKElTKTtcblx0IgorICAgIlIwID0gQTA7XG5cdCIKKyAgICIlMCA9IFIwO1xuXHQiCisgICA6ICI9JmQiIChkb3QpCisgICA6ICJhIiAoeCksICJhIiAoeSksICJhIiAobGVuKQorICAgOiAiSTAiLCAiSTEiLCAiQTEiLCAiQTAiLCAiUjAiLCAiUjEiCisgICApOworCisgICByZXR1cm4gZG90OworfQorI2VuZGlmCisvKi0gRW5kIG9mIGZ1bmN0aW9uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIF9faW5saW5lX18gaW50MTZfdCBmaXIxNihmaXIxNl9zdGF0ZV90ICpmaXIsIGludDE2X3Qgc2FtcGxlKQoreworICAgIGludDMyX3QgeTsKKyNpZiBkZWZpbmVkKFVTRV9NTVgpCisgICAgaW50IGk7CisgICAgbW14X3QgKm1teF9jb2VmZnM7CisgICAgbW14X3QgKm1teF9oaXN0OworCisgICAgZmlyLT5oaXN0b3J5W2Zpci0+Y3Vycl9wb3NdID0gc2FtcGxlOworICAgIGZpci0+aGlzdG9yeVtmaXItPmN1cnJfcG9zICsgZmlyLT50YXBzXSA9IHNhbXBsZTsKKworICAgIG1teF9jb2VmZnMgPSAobW14X3QgKikgZmlyLT5jb2VmZnM7CisgICAgbW14X2hpc3QgPSAobW14X3QgKikgJmZpci0+aGlzdG9yeVtmaXItPmN1cnJfcG9zXTsKKyAgICBpID0gZmlyLT50YXBzOworICAgIHB4b3JfcjJyKG1tNCwgbW00KTsKKyAgICAvKiA4IHNhbXBsZXMgcGVyIGl0ZXJhdGlvbiwgc28gdGhlIGZpbHRlciBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgOCBsb25nLiAqLworICAgIHdoaWxlIChpID4gMCkKKyAgICB7CisgICAgICAgIG1vdnFfbTJyKG1teF9jb2VmZnNbMF0sIG1tMCk7CisgICAgICAgIG1vdnFfbTJyKG1teF9jb2VmZnNbMV0sIG1tMik7CisgICAgICAgIG1vdnFfbTJyKG1teF9oaXN0WzBdLCBtbTEpOworICAgICAgICBtb3ZxX20ycihtbXhfaGlzdFsxXSwgbW0zKTsKKyAgICAgICAgbW14X2NvZWZmcyArPSAyOworICAgICAgICBtbXhfaGlzdCArPSAyOworICAgICAgICBwbWFkZHdkX3IycihtbTEsIG1tMCk7CisgICAgICAgIHBtYWRkd2RfcjJyKG1tMywgbW0yKTsKKyAgICAgICAgcGFkZGRfcjJyKG1tMCwgbW00KTsKKyAgICAgICAgcGFkZGRfcjJyKG1tMiwgbW00KTsKKyAgICAgICAgaSAtPSA4OworICAgIH0KKyAgICBtb3ZxX3IycihtbTQsIG1tMCk7CisgICAgcHNybHFfaTJyKDMyLCBtbTApOworICAgIHBhZGRkX3IycihtbTAsIG1tNCk7CisgICAgbW92ZF9yMm0obW00LCB5KTsKKyAgICBlbW1zKCk7CisjZWxpZiBkZWZpbmVkKFVTRV9TU0UyKQorICAgIGludCBpOworICAgIHhtbV90ICp4bW1fY29lZmZzOworICAgIHhtbV90ICp4bW1faGlzdDsKKworICAgIGZpci0+aGlzdG9yeVtmaXItPmN1cnJfcG9zXSA9IHNhbXBsZTsKKyAgICBmaXItPmhpc3RvcnlbZmlyLT5jdXJyX3BvcyArIGZpci0+dGFwc10gPSBzYW1wbGU7CisKKyAgICB4bW1fY29lZmZzID0gKHhtbV90ICopIGZpci0+Y29lZmZzOworICAgIHhtbV9oaXN0ID0gKHhtbV90ICopICZmaXItPmhpc3RvcnlbZmlyLT5jdXJyX3Bvc107CisgICAgaSA9IGZpci0+dGFwczsKKyAgICBweG9yX3Iycih4bW00LCB4bW00KTsKKyAgICAvKiAxNiBzYW1wbGVzIHBlciBpdGVyYXRpb24sIHNvIHRoZSBmaWx0ZXIgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDE2IGxvbmcuICovCisgICAgd2hpbGUgKGkgPiAwKQorICAgIHsKKyAgICAgICAgbW92ZHF1X20ycih4bW1fY29lZmZzWzBdLCB4bW0wKTsKKyAgICAgICAgbW92ZHF1X20ycih4bW1fY29lZmZzWzFdLCB4bW0yKTsKKyAgICAgICAgbW92ZHF1X20ycih4bW1faGlzdFswXSwgeG1tMSk7CisgICAgICAgIG1vdmRxdV9tMnIoeG1tX2hpc3RbMV0sIHhtbTMpOworICAgICAgICB4bW1fY29lZmZzICs9IDI7CisgICAgICAgIHhtbV9oaXN0ICs9IDI7CisgICAgICAgIHBtYWRkd2RfcjJyKHhtbTEsIHhtbTApOworICAgICAgICBwbWFkZHdkX3Iycih4bW0zLCB4bW0yKTsKKyAgICAgICAgcGFkZGRfcjJyKHhtbTAsIHhtbTQpOworICAgICAgICBwYWRkZF9yMnIoeG1tMiwgeG1tNCk7CisgICAgICAgIGkgLT0gMTY7CisgICAgfQorICAgIG1vdmRxYV9yMnIoeG1tNCwgeG1tMCk7CisgICAgcHNybGRxX2kycig4LCB4bW0wKTsKKyAgICBwYWRkZF9yMnIoeG1tMCwgeG1tNCk7CisgICAgbW92ZHFhX3Iycih4bW00LCB4bW0wKTsKKyAgICBwc3JsZHFfaTJyKDQsIHhtbTApOworICAgIHBhZGRkX3Iycih4bW0wLCB4bW00KTsKKyAgICBtb3ZkX3IybSh4bW00LCB5KTsKKyNlbGlmIGRlZmluZWQoX19CTEFDS0ZJTl9BU01fXykKKyAgICBmaXItPmhpc3RvcnlbZmlyLT5jdXJyX3Bvc10gPSBzYW1wbGU7CisgICAgZmlyLT5oaXN0b3J5W2Zpci0+Y3Vycl9wb3MgKyBmaXItPnRhcHNdID0gc2FtcGxlOworICAgIHkgPSBkb3RfYXNtKChpbnQxNl90KilmaXItPmNvZWZmcywgJmZpci0+aGlzdG9yeVtmaXItPmN1cnJfcG9zXSwgZmlyLT50YXBzKTsKKyNlbHNlCisgICAgaW50IGk7CisgICAgaW50IG9mZnNldDE7CisgICAgaW50IG9mZnNldDI7CisKKyAgICBmaXItPmhpc3RvcnlbZmlyLT5jdXJyX3Bvc10gPSBzYW1wbGU7CisKKyAgICBvZmZzZXQyID0gZmlyLT5jdXJyX3BvczsKKyAgICBvZmZzZXQxID0gZmlyLT50YXBzIC0gb2Zmc2V0MjsKKyAgICB5ID0gMDsKKyAgICBmb3IgKGkgPSBmaXItPnRhcHMgLSAxOyAgaSA+PSBvZmZzZXQxOyAgaS0tKQorICAgICAgICB5ICs9IGZpci0+Y29lZmZzW2ldKmZpci0+aGlzdG9yeVtpIC0gb2Zmc2V0MV07CisgICAgZm9yICggIDsgIGkgPj0gMDsgIGktLSkKKyAgICAgICAgeSArPSBmaXItPmNvZWZmc1tpXSpmaXItPmhpc3RvcnlbaSArIG9mZnNldDJdOworI2VuZGlmCisgICAgaWYgKGZpci0+Y3Vycl9wb3MgPD0gMCkKKyAgICAJZmlyLT5jdXJyX3BvcyA9IGZpci0+dGFwczsKKyAgICBmaXItPmN1cnJfcG9zLS07CisgICAgcmV0dXJuIChpbnQxNl90KSAoeSA+PiAxNSk7Cit9CisvKi0gRW5kIG9mIGZ1bmN0aW9uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIF9faW5saW5lX18gY29uc3QgaW50MTZfdCAqZmlyMzJfY3JlYXRlKGZpcjMyX3N0YXRlX3QgKmZpciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpbnQzMl90ICpjb2VmZnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHRhcHMpCit7CisgICAgZmlyLT50YXBzID0gdGFwczsKKyAgICBmaXItPmN1cnJfcG9zID0gdGFwcyAtIDE7CisgICAgZmlyLT5jb2VmZnMgPSBjb2VmZnM7CisgICAgZmlyLT5oaXN0b3J5ID0gKGludDE2X3QgKikgbWFsbG9jKHRhcHMqc2l6ZW9mKGludDE2X3QpKTsKKyAgICBpZiAoZmlyLT5oaXN0b3J5KQorICAgIAltZW1zZXQoZmlyLT5oaXN0b3J5LCAnXDAnLCB0YXBzKnNpemVvZihpbnQxNl90KSk7CisgICAgcmV0dXJuIGZpci0+aGlzdG9yeTsKK30KKy8qLSBFbmQgb2YgZnVuY3Rpb24gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIGZpcjMyX2ZsdXNoKGZpcjMyX3N0YXRlX3QgKmZpcikKK3sKKyAgICBtZW1zZXQoZmlyLT5oaXN0b3J5LCAwLCBmaXItPnRhcHMqc2l6ZW9mKGludDE2X3QpKTsKK30KKy8qLSBFbmQgb2YgZnVuY3Rpb24gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIGZpcjMyX2ZyZWUoZmlyMzJfc3RhdGVfdCAqZmlyKQoreworICAgIGZyZWUoZmlyLT5oaXN0b3J5KTsKK30KKy8qLSBFbmQgb2YgZnVuY3Rpb24gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgX19pbmxpbmVfXyBpbnQxNl90IGZpcjMyKGZpcjMyX3N0YXRlX3QgKmZpciwgaW50MTZfdCBzYW1wbGUpCit7CisgICAgaW50IGk7CisgICAgaW50MzJfdCB5OworICAgIGludCBvZmZzZXQxOworICAgIGludCBvZmZzZXQyOworCisgICAgZmlyLT5oaXN0b3J5W2Zpci0+Y3Vycl9wb3NdID0gc2FtcGxlOworICAgIG9mZnNldDIgPSBmaXItPmN1cnJfcG9zOworICAgIG9mZnNldDEgPSBmaXItPnRhcHMgLSBvZmZzZXQyOworICAgIHkgPSAwOworICAgIGZvciAoaSA9IGZpci0+dGFwcyAtIDE7ICBpID49IG9mZnNldDE7ICBpLS0pCisgICAgICAgIHkgKz0gZmlyLT5jb2VmZnNbaV0qZmlyLT5oaXN0b3J5W2kgLSBvZmZzZXQxXTsKKyAgICBmb3IgKCAgOyAgaSA+PSAwOyAgaS0tKQorICAgICAgICB5ICs9IGZpci0+Y29lZmZzW2ldKmZpci0+aGlzdG9yeVtpICsgb2Zmc2V0Ml07CisgICAgaWYgKGZpci0+Y3Vycl9wb3MgPD0gMCkKKyAgICAJZmlyLT5jdXJyX3BvcyA9IGZpci0+dGFwczsKKyAgICBmaXItPmN1cnJfcG9zLS07CisgICAgcmV0dXJuIChpbnQxNl90KSAoeSA+PiAxNSk7Cit9CisvKi0gRW5kIG9mIGZ1bmN0aW9uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworI2lmbmRlZiBfX0tFUk5FTF9fCitzdGF0aWMgX19pbmxpbmVfXyBjb25zdCBmbG9hdCAqZmlyX2Zsb2F0X2NyZWF0ZShmaXJfZmxvYXRfc3RhdGVfdCAqZmlyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZmxvYXQgKmNvZWZmcywKKyAgICAJICAgIAkgICAgCSAgICAgICAgICAgICAgICAgICAgICAgIGludCB0YXBzKQoreworICAgIGZpci0+dGFwcyA9IHRhcHM7CisgICAgZmlyLT5jdXJyX3BvcyA9IHRhcHMgLSAxOworICAgIGZpci0+Y29lZmZzID0gY29lZmZzOworICAgIGZpci0+aGlzdG9yeSA9IChmbG9hdCAqKSBtYWxsb2ModGFwcypzaXplb2YoZmxvYXQpKTsKKyAgICBpZiAoZmlyLT5oaXN0b3J5KQorICAgICAgICBtZW1zZXQoZmlyLT5oaXN0b3J5LCAnXDAnLCB0YXBzKnNpemVvZihmbG9hdCkpOworICAgIHJldHVybiBmaXItPmhpc3Rvcnk7Cit9CisvKi0gRW5kIG9mIGZ1bmN0aW9uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBmaXJfZmxvYXRfZnJlZShmaXJfZmxvYXRfc3RhdGVfdCAqZmlyKQoreworICAgIGZyZWUoZmlyLT5oaXN0b3J5KTsKK30KKy8qLSBFbmQgb2YgZnVuY3Rpb24gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgX19pbmxpbmVfXyBpbnQxNl90IGZpcl9mbG9hdChmaXJfZmxvYXRfc3RhdGVfdCAqZmlyLCBpbnQxNl90IHNhbXBsZSkKK3sKKyAgICBpbnQgaTsKKyAgICBmbG9hdCB5OworICAgIGludCBvZmZzZXQxOworICAgIGludCBvZmZzZXQyOworCisgICAgZmlyLT5oaXN0b3J5W2Zpci0+Y3Vycl9wb3NdID0gc2FtcGxlOworCisgICAgb2Zmc2V0MiA9IGZpci0+Y3Vycl9wb3M7CisgICAgb2Zmc2V0MSA9IGZpci0+dGFwcyAtIG9mZnNldDI7CisgICAgeSA9IDA7CisgICAgZm9yIChpID0gZmlyLT50YXBzIC0gMTsgIGkgPj0gb2Zmc2V0MTsgIGktLSkKKyAgICAgICAgeSArPSBmaXItPmNvZWZmc1tpXSpmaXItPmhpc3RvcnlbaSAtIG9mZnNldDFdOworICAgIGZvciAoICA7ICBpID49IDA7ICBpLS0pCisgICAgICAgIHkgKz0gZmlyLT5jb2VmZnNbaV0qZmlyLT5oaXN0b3J5W2kgKyBvZmZzZXQyXTsKKyAgICBpZiAoZmlyLT5jdXJyX3BvcyA8PSAwKQorICAgIAlmaXItPmN1cnJfcG9zID0gZmlyLT50YXBzOworICAgIGZpci0+Y3Vycl9wb3MtLTsKKyAgICByZXR1cm4gIChpbnQxNl90KSB5OworfQorLyotIEVuZCBvZiBmdW5jdGlvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZW5kaWYKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlmCisvKi0gRW5kIG9mIGZpbGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9lY2hvL21teC5oIGIvZHJpdmVycy9zdGFnaW5nL2VjaG8vbW14LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjVhMzk2NAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9lY2hvL21teC5oCkBAIC0wLDAgKzEsMjg4IEBACisvKgorICogbW14LmgKKyAqIENvcHlyaWdodCAoQykgMTk5Ny0yMDAxIEguIERpZXR6IGFuZCBSLiBGaXNoZXIKKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBGRm1wZWcuCisgKgorICogRkZtcGVnIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBGRm1wZWcgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggRkZtcGVnOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBCisgKi8KKyNpZm5kZWYgQVZDT0RFQ19JMzg2TU1YX0gKKyNkZWZpbmUgQVZDT0RFQ19JMzg2TU1YX0gKKworLyoKKyAqIFRoZSB0eXBlIG9mIGFuIHZhbHVlIHRoYXQgZml0cyBpbiBhbiBNTVggcmVnaXN0ZXIgKG5vdGUgdGhhdCBsb25nCisgKiBsb25nIGNvbnN0YW50IHZhbHVlcyBNVVNUIGJlIHN1ZmZpeGVkIGJ5IExMIGFuZCB1bnNpZ25lZCBsb25nIGxvbmcKKyAqIHZhbHVlcyBieSBVTEwsIGxlc3QgdGhleSBiZSB0cnVuY2F0ZWQgYnkgdGhlIGNvbXBpbGVyKQorICovCisKK3R5cGVkZWYgICAgICAgIHVuaW9uIHsKKyAgICAgICAgbG9uZyBsb25nICAgICAgICAgICAgICAgcTsgICAgICAvKiBRdWFkd29yZCAoNjQtYml0KSB2YWx1ZSAqLworICAgICAgICB1bnNpZ25lZCBsb25nIGxvbmcgICAgICB1cTsgICAgIC8qIFVuc2lnbmVkIFF1YWR3b3JkICovCisgICAgICAgIGludCAgICAgICAgICAgICAgICAgICAgIGRbMl07ICAgLyogMiBEb3VibGV3b3JkICgzMi1iaXQpIHZhbHVlcyAqLworICAgICAgICB1bnNpZ25lZCBpbnQgICAgICAgICAgICB1ZFsyXTsgIC8qIDIgVW5zaWduZWQgRG91Ymxld29yZCAqLworICAgICAgICBzaG9ydCAgICAgICAgICAgICAgICAgICB3WzRdOyAgIC8qIDQgV29yZCAoMTYtYml0KSB2YWx1ZXMgKi8KKyAgICAgICAgdW5zaWduZWQgc2hvcnQgICAgICAgICAgdXdbNF07ICAvKiA0IFVuc2lnbmVkIFdvcmQgKi8KKyAgICAgICAgY2hhciAgICAgICAgICAgICAgICAgICAgYls4XTsgICAvKiA4IEJ5dGUgKDgtYml0KSB2YWx1ZXMgKi8KKyAgICAgICAgdW5zaWduZWQgY2hhciAgICAgICAgICAgdWJbOF07ICAvKiA4IFVuc2lnbmVkIEJ5dGUgKi8KKyAgICAgICAgZmxvYXQgICAgICAgICAgICAgICAgICAgc1syXTsgICAvKiBTaW5nbGUtcHJlY2lzaW9uICgzMi1iaXQpIHZhbHVlICovCit9IG1teF90OyAgICAgICAgLyogT24gYW4gOC1ieXRlICg2NC1iaXQpIGJvdW5kYXJ5ICovCisKKy8qIFNTRSByZWdpc3RlcnMgKi8KK3R5cGVkZWYgdW5pb24geworCWNoYXIgYlsxNl07Cit9IHhtbV90OworCisKKyNkZWZpbmUgICAgICAgICBtbXhfaTJyKG9wLGltbSxyZWcpIFwKKyAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18gKCNvcCAiICUwLCAlJSIgI3JlZyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IC8qIG5vdGhpbmcgKi8gXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAiaSIgKGltbSkgKQorCisjZGVmaW5lICAgICAgICAgbW14X20ycihvcCxtZW0scmVnKSBcCisgICAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fICgjb3AgIiAlMCwgJSUiICNyZWcgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAvKiBub3RoaW5nICovIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogIm0iIChtZW0pKQorCisjZGVmaW5lICAgICAgICAgbW14X3IybShvcCxyZWcsbWVtKSBcCisgICAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fICgjb3AgIiAlJSIgI3JlZyAiLCAlMCIgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAiPW0iIChtZW0pIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogLyogbm90aGluZyAqLyApCisKKyNkZWZpbmUgICAgICAgICBtbXhfcjJyKG9wLHJlZ3MscmVnZCkgXAorICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoI29wICIgJSIgI3JlZ3MgIiwgJSIgI3JlZ2QpCisKKworI2RlZmluZSAgICAgICAgIGVtbXMoKSBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoImVtbXMiKQorCisjZGVmaW5lICAgICAgICAgbW92ZF9tMnIodmFyLHJlZykgICAgICAgICAgIG1teF9tMnIgKG1vdmQsIHZhciwgcmVnKQorI2RlZmluZSAgICAgICAgIG1vdmRfcjJtKHJlZyx2YXIpICAgICAgICAgICBtbXhfcjJtIChtb3ZkLCByZWcsIHZhcikKKyNkZWZpbmUgICAgICAgICBtb3ZkX3IycihyZWdzLHJlZ2QpICAgICAgICAgbW14X3IyciAobW92ZCwgcmVncywgcmVnZCkKKworI2RlZmluZSAgICAgICAgIG1vdnFfbTJyKHZhcixyZWcpICAgICAgICAgICBtbXhfbTJyIChtb3ZxLCB2YXIsIHJlZykKKyNkZWZpbmUgICAgICAgICBtb3ZxX3IybShyZWcsdmFyKSAgICAgICAgICAgbW14X3IybSAobW92cSwgcmVnLCB2YXIpCisjZGVmaW5lICAgICAgICAgbW92cV9yMnIocmVncyxyZWdkKSAgICAgICAgIG1teF9yMnIgKG1vdnEsIHJlZ3MsIHJlZ2QpCisKKyNkZWZpbmUgICAgICAgICBwYWNrc3Nkd19tMnIodmFyLHJlZykgICAgICAgbW14X20yciAocGFja3NzZHcsIHZhciwgcmVnKQorI2RlZmluZSAgICAgICAgIHBhY2tzc2R3X3IycihyZWdzLHJlZ2QpICAgICBtbXhfcjJyIChwYWNrc3NkdywgcmVncywgcmVnZCkKKyNkZWZpbmUgICAgICAgICBwYWNrc3N3Yl9tMnIodmFyLHJlZykgICAgICAgbW14X20yciAocGFja3Nzd2IsIHZhciwgcmVnKQorI2RlZmluZSAgICAgICAgIHBhY2tzc3diX3IycihyZWdzLHJlZ2QpICAgICBtbXhfcjJyIChwYWNrc3N3YiwgcmVncywgcmVnZCkKKworI2RlZmluZSAgICAgICAgIHBhY2t1c3diX20ycih2YXIscmVnKSAgICAgICBtbXhfbTJyIChwYWNrdXN3YiwgdmFyLCByZWcpCisjZGVmaW5lICAgICAgICAgcGFja3Vzd2JfcjJyKHJlZ3MscmVnZCkgICAgIG1teF9yMnIgKHBhY2t1c3diLCByZWdzLCByZWdkKQorCisjZGVmaW5lICAgICAgICAgcGFkZGJfbTJyKHZhcixyZWcpICAgICAgICAgIG1teF9tMnIgKHBhZGRiLCB2YXIsIHJlZykKKyNkZWZpbmUgICAgICAgICBwYWRkYl9yMnIocmVncyxyZWdkKSAgICAgICAgbW14X3IyciAocGFkZGIsIHJlZ3MsIHJlZ2QpCisjZGVmaW5lICAgICAgICAgcGFkZGRfbTJyKHZhcixyZWcpICAgICAgICAgIG1teF9tMnIgKHBhZGRkLCB2YXIsIHJlZykKKyNkZWZpbmUgICAgICAgICBwYWRkZF9yMnIocmVncyxyZWdkKSAgICAgICAgbW14X3IyciAocGFkZGQsIHJlZ3MsIHJlZ2QpCisjZGVmaW5lICAgICAgICAgcGFkZHdfbTJyKHZhcixyZWcpICAgICAgICAgIG1teF9tMnIgKHBhZGR3LCB2YXIsIHJlZykKKyNkZWZpbmUgICAgICAgICBwYWRkd19yMnIocmVncyxyZWdkKSAgICAgICAgbW14X3IyciAocGFkZHcsIHJlZ3MsIHJlZ2QpCisKKyNkZWZpbmUgICAgICAgICBwYWRkc2JfbTJyKHZhcixyZWcpICAgICAgICAgbW14X20yciAocGFkZHNiLCB2YXIsIHJlZykKKyNkZWZpbmUgICAgICAgICBwYWRkc2JfcjJyKHJlZ3MscmVnZCkgICAgICAgbW14X3IyciAocGFkZHNiLCByZWdzLCByZWdkKQorI2RlZmluZSAgICAgICAgIHBhZGRzd19tMnIodmFyLHJlZykgICAgICAgICBtbXhfbTJyIChwYWRkc3csIHZhciwgcmVnKQorI2RlZmluZSAgICAgICAgIHBhZGRzd19yMnIocmVncyxyZWdkKSAgICAgICBtbXhfcjJyIChwYWRkc3csIHJlZ3MsIHJlZ2QpCisKKyNkZWZpbmUgICAgICAgICBwYWRkdXNiX20ycih2YXIscmVnKSAgICAgICAgbW14X20yciAocGFkZHVzYiwgdmFyLCByZWcpCisjZGVmaW5lICAgICAgICAgcGFkZHVzYl9yMnIocmVncyxyZWdkKSAgICAgIG1teF9yMnIgKHBhZGR1c2IsIHJlZ3MsIHJlZ2QpCisjZGVmaW5lICAgICAgICAgcGFkZHVzd19tMnIodmFyLHJlZykgICAgICAgIG1teF9tMnIgKHBhZGR1c3csIHZhciwgcmVnKQorI2RlZmluZSAgICAgICAgIHBhZGR1c3dfcjJyKHJlZ3MscmVnZCkgICAgICBtbXhfcjJyIChwYWRkdXN3LCByZWdzLCByZWdkKQorCisjZGVmaW5lICAgICAgICAgcGFuZF9tMnIodmFyLHJlZykgICAgICAgICAgIG1teF9tMnIgKHBhbmQsIHZhciwgcmVnKQorI2RlZmluZSAgICAgICAgIHBhbmRfcjJyKHJlZ3MscmVnZCkgICAgICAgICBtbXhfcjJyIChwYW5kLCByZWdzLCByZWdkKQorCisjZGVmaW5lICAgICAgICAgcGFuZG5fbTJyKHZhcixyZWcpICAgICAgICAgIG1teF9tMnIgKHBhbmRuLCB2YXIsIHJlZykKKyNkZWZpbmUgICAgICAgICBwYW5kbl9yMnIocmVncyxyZWdkKSAgICAgICAgbW14X3IyciAocGFuZG4sIHJlZ3MsIHJlZ2QpCisKKyNkZWZpbmUgICAgICAgICBwY21wZXFiX20ycih2YXIscmVnKSAgICAgICAgbW14X20yciAocGNtcGVxYiwgdmFyLCByZWcpCisjZGVmaW5lICAgICAgICAgcGNtcGVxYl9yMnIocmVncyxyZWdkKSAgICAgIG1teF9yMnIgKHBjbXBlcWIsIHJlZ3MsIHJlZ2QpCisjZGVmaW5lICAgICAgICAgcGNtcGVxZF9tMnIodmFyLHJlZykgICAgICAgIG1teF9tMnIgKHBjbXBlcWQsIHZhciwgcmVnKQorI2RlZmluZSAgICAgICAgIHBjbXBlcWRfcjJyKHJlZ3MscmVnZCkgICAgICBtbXhfcjJyIChwY21wZXFkLCByZWdzLCByZWdkKQorI2RlZmluZSAgICAgICAgIHBjbXBlcXdfbTJyKHZhcixyZWcpICAgICAgICBtbXhfbTJyIChwY21wZXF3LCB2YXIsIHJlZykKKyNkZWZpbmUgICAgICAgICBwY21wZXF3X3IycihyZWdzLHJlZ2QpICAgICAgbW14X3IyciAocGNtcGVxdywgcmVncywgcmVnZCkKKworI2RlZmluZSAgICAgICAgIHBjbXBndGJfbTJyKHZhcixyZWcpICAgICAgICBtbXhfbTJyIChwY21wZ3RiLCB2YXIsIHJlZykKKyNkZWZpbmUgICAgICAgICBwY21wZ3RiX3IycihyZWdzLHJlZ2QpICAgICAgbW14X3IyciAocGNtcGd0YiwgcmVncywgcmVnZCkKKyNkZWZpbmUgICAgICAgICBwY21wZ3RkX20ycih2YXIscmVnKSAgICAgICAgbW14X20yciAocGNtcGd0ZCwgdmFyLCByZWcpCisjZGVmaW5lICAgICAgICAgcGNtcGd0ZF9yMnIocmVncyxyZWdkKSAgICAgIG1teF9yMnIgKHBjbXBndGQsIHJlZ3MsIHJlZ2QpCisjZGVmaW5lICAgICAgICAgcGNtcGd0d19tMnIodmFyLHJlZykgICAgICAgIG1teF9tMnIgKHBjbXBndHcsIHZhciwgcmVnKQorI2RlZmluZSAgICAgICAgIHBjbXBndHdfcjJyKHJlZ3MscmVnZCkgICAgICBtbXhfcjJyIChwY21wZ3R3LCByZWdzLCByZWdkKQorCisjZGVmaW5lICAgICAgICAgcG1hZGR3ZF9tMnIodmFyLHJlZykgICAgICAgIG1teF9tMnIgKHBtYWRkd2QsIHZhciwgcmVnKQorI2RlZmluZSAgICAgICAgIHBtYWRkd2RfcjJyKHJlZ3MscmVnZCkgICAgICBtbXhfcjJyIChwbWFkZHdkLCByZWdzLCByZWdkKQorCisjZGVmaW5lICAgICAgICAgcG11bGh3X20ycih2YXIscmVnKSAgICAgICAgIG1teF9tMnIgKHBtdWxodywgdmFyLCByZWcpCisjZGVmaW5lICAgICAgICAgcG11bGh3X3IycihyZWdzLHJlZ2QpICAgICAgIG1teF9yMnIgKHBtdWxodywgcmVncywgcmVnZCkKKworI2RlZmluZSAgICAgICAgIHBtdWxsd19tMnIodmFyLHJlZykgICAgICAgICBtbXhfbTJyIChwbXVsbHcsIHZhciwgcmVnKQorI2RlZmluZSAgICAgICAgIHBtdWxsd19yMnIocmVncyxyZWdkKSAgICAgICBtbXhfcjJyIChwbXVsbHcsIHJlZ3MsIHJlZ2QpCisKKyNkZWZpbmUgICAgICAgICBwb3JfbTJyKHZhcixyZWcpICAgICAgICAgICAgbW14X20yciAocG9yLCB2YXIsIHJlZykKKyNkZWZpbmUgICAgICAgICBwb3JfcjJyKHJlZ3MscmVnZCkgICAgICAgICAgbW14X3IyciAocG9yLCByZWdzLCByZWdkKQorCisjZGVmaW5lICAgICAgICAgcHNsbGRfaTJyKGltbSxyZWcpICAgICAgICAgIG1teF9pMnIgKHBzbGxkLCBpbW0sIHJlZykKKyNkZWZpbmUgICAgICAgICBwc2xsZF9tMnIodmFyLHJlZykgICAgICAgICAgbW14X20yciAocHNsbGQsIHZhciwgcmVnKQorI2RlZmluZSAgICAgICAgIHBzbGxkX3IycihyZWdzLHJlZ2QpICAgICAgICBtbXhfcjJyIChwc2xsZCwgcmVncywgcmVnZCkKKyNkZWZpbmUgICAgICAgICBwc2xscV9pMnIoaW1tLHJlZykgICAgICAgICAgbW14X2kyciAocHNsbHEsIGltbSwgcmVnKQorI2RlZmluZSAgICAgICAgIHBzbGxxX20ycih2YXIscmVnKSAgICAgICAgICBtbXhfbTJyIChwc2xscSwgdmFyLCByZWcpCisjZGVmaW5lICAgICAgICAgcHNsbHFfcjJyKHJlZ3MscmVnZCkgICAgICAgIG1teF9yMnIgKHBzbGxxLCByZWdzLCByZWdkKQorI2RlZmluZSAgICAgICAgIHBzbGx3X2kycihpbW0scmVnKSAgICAgICAgICBtbXhfaTJyIChwc2xsdywgaW1tLCByZWcpCisjZGVmaW5lICAgICAgICAgcHNsbHdfbTJyKHZhcixyZWcpICAgICAgICAgIG1teF9tMnIgKHBzbGx3LCB2YXIsIHJlZykKKyNkZWZpbmUgICAgICAgICBwc2xsd19yMnIocmVncyxyZWdkKSAgICAgICAgbW14X3IyciAocHNsbHcsIHJlZ3MsIHJlZ2QpCisKKyNkZWZpbmUgICAgICAgICBwc3JhZF9pMnIoaW1tLHJlZykgICAgICAgICAgbW14X2kyciAocHNyYWQsIGltbSwgcmVnKQorI2RlZmluZSAgICAgICAgIHBzcmFkX20ycih2YXIscmVnKSAgICAgICAgICBtbXhfbTJyIChwc3JhZCwgdmFyLCByZWcpCisjZGVmaW5lICAgICAgICAgcHNyYWRfcjJyKHJlZ3MscmVnZCkgICAgICAgIG1teF9yMnIgKHBzcmFkLCByZWdzLCByZWdkKQorI2RlZmluZSAgICAgICAgIHBzcmF3X2kycihpbW0scmVnKSAgICAgICAgICBtbXhfaTJyIChwc3JhdywgaW1tLCByZWcpCisjZGVmaW5lICAgICAgICAgcHNyYXdfbTJyKHZhcixyZWcpICAgICAgICAgIG1teF9tMnIgKHBzcmF3LCB2YXIsIHJlZykKKyNkZWZpbmUgICAgICAgICBwc3Jhd19yMnIocmVncyxyZWdkKSAgICAgICAgbW14X3IyciAocHNyYXcsIHJlZ3MsIHJlZ2QpCisKKyNkZWZpbmUgICAgICAgICBwc3JsZF9pMnIoaW1tLHJlZykgICAgICAgICAgbW14X2kyciAocHNybGQsIGltbSwgcmVnKQorI2RlZmluZSAgICAgICAgIHBzcmxkX20ycih2YXIscmVnKSAgICAgICAgICBtbXhfbTJyIChwc3JsZCwgdmFyLCByZWcpCisjZGVmaW5lICAgICAgICAgcHNybGRfcjJyKHJlZ3MscmVnZCkgICAgICAgIG1teF9yMnIgKHBzcmxkLCByZWdzLCByZWdkKQorI2RlZmluZSAgICAgICAgIHBzcmxxX2kycihpbW0scmVnKSAgICAgICAgICBtbXhfaTJyIChwc3JscSwgaW1tLCByZWcpCisjZGVmaW5lICAgICAgICAgcHNybHFfbTJyKHZhcixyZWcpICAgICAgICAgIG1teF9tMnIgKHBzcmxxLCB2YXIsIHJlZykKKyNkZWZpbmUgICAgICAgICBwc3JscV9yMnIocmVncyxyZWdkKSAgICAgICAgbW14X3IyciAocHNybHEsIHJlZ3MsIHJlZ2QpCisjZGVmaW5lICAgICAgICAgcHNybHdfaTJyKGltbSxyZWcpICAgICAgICAgIG1teF9pMnIgKHBzcmx3LCBpbW0sIHJlZykKKyNkZWZpbmUgICAgICAgICBwc3Jsd19tMnIodmFyLHJlZykgICAgICAgICAgbW14X20yciAocHNybHcsIHZhciwgcmVnKQorI2RlZmluZSAgICAgICAgIHBzcmx3X3IycihyZWdzLHJlZ2QpICAgICAgICBtbXhfcjJyIChwc3JsdywgcmVncywgcmVnZCkKKworI2RlZmluZSAgICAgICAgIHBzdWJiX20ycih2YXIscmVnKSAgICAgICAgICBtbXhfbTJyIChwc3ViYiwgdmFyLCByZWcpCisjZGVmaW5lICAgICAgICAgcHN1YmJfcjJyKHJlZ3MscmVnZCkgICAgICAgIG1teF9yMnIgKHBzdWJiLCByZWdzLCByZWdkKQorI2RlZmluZSAgICAgICAgIHBzdWJkX20ycih2YXIscmVnKSAgICAgICAgICBtbXhfbTJyIChwc3ViZCwgdmFyLCByZWcpCisjZGVmaW5lICAgICAgICAgcHN1YmRfcjJyKHJlZ3MscmVnZCkgICAgICAgIG1teF9yMnIgKHBzdWJkLCByZWdzLCByZWdkKQorI2RlZmluZSAgICAgICAgIHBzdWJ3X20ycih2YXIscmVnKSAgICAgICAgICBtbXhfbTJyIChwc3VidywgdmFyLCByZWcpCisjZGVmaW5lICAgICAgICAgcHN1YndfcjJyKHJlZ3MscmVnZCkgICAgICAgIG1teF9yMnIgKHBzdWJ3LCByZWdzLCByZWdkKQorCisjZGVmaW5lICAgICAgICAgcHN1YnNiX20ycih2YXIscmVnKSAgICAgICAgIG1teF9tMnIgKHBzdWJzYiwgdmFyLCByZWcpCisjZGVmaW5lICAgICAgICAgcHN1YnNiX3IycihyZWdzLHJlZ2QpICAgICAgIG1teF9yMnIgKHBzdWJzYiwgcmVncywgcmVnZCkKKyNkZWZpbmUgICAgICAgICBwc3Vic3dfbTJyKHZhcixyZWcpICAgICAgICAgbW14X20yciAocHN1YnN3LCB2YXIsIHJlZykKKyNkZWZpbmUgICAgICAgICBwc3Vic3dfcjJyKHJlZ3MscmVnZCkgICAgICAgbW14X3IyciAocHN1YnN3LCByZWdzLCByZWdkKQorCisjZGVmaW5lICAgICAgICAgcHN1YnVzYl9tMnIodmFyLHJlZykgICAgICAgIG1teF9tMnIgKHBzdWJ1c2IsIHZhciwgcmVnKQorI2RlZmluZSAgICAgICAgIHBzdWJ1c2JfcjJyKHJlZ3MscmVnZCkgICAgICBtbXhfcjJyIChwc3VidXNiLCByZWdzLCByZWdkKQorI2RlZmluZSAgICAgICAgIHBzdWJ1c3dfbTJyKHZhcixyZWcpICAgICAgICBtbXhfbTJyIChwc3VidXN3LCB2YXIsIHJlZykKKyNkZWZpbmUgICAgICAgICBwc3VidXN3X3IycihyZWdzLHJlZ2QpICAgICAgbW14X3IyciAocHN1YnVzdywgcmVncywgcmVnZCkKKworI2RlZmluZSAgICAgICAgIHB1bnBja2hid19tMnIodmFyLHJlZykgICAgICBtbXhfbTJyIChwdW5wY2toYncsIHZhciwgcmVnKQorI2RlZmluZSAgICAgICAgIHB1bnBja2hid19yMnIocmVncyxyZWdkKSAgICBtbXhfcjJyIChwdW5wY2toYncsIHJlZ3MsIHJlZ2QpCisjZGVmaW5lICAgICAgICAgcHVucGNraGRxX20ycih2YXIscmVnKSAgICAgIG1teF9tMnIgKHB1bnBja2hkcSwgdmFyLCByZWcpCisjZGVmaW5lICAgICAgICAgcHVucGNraGRxX3IycihyZWdzLHJlZ2QpICAgIG1teF9yMnIgKHB1bnBja2hkcSwgcmVncywgcmVnZCkKKyNkZWZpbmUgICAgICAgICBwdW5wY2tod2RfbTJyKHZhcixyZWcpICAgICAgbW14X20yciAocHVucGNraHdkLCB2YXIsIHJlZykKKyNkZWZpbmUgICAgICAgICBwdW5wY2tod2RfcjJyKHJlZ3MscmVnZCkgICAgbW14X3IyciAocHVucGNraHdkLCByZWdzLCByZWdkKQorCisjZGVmaW5lICAgICAgICAgcHVucGNrbGJ3X20ycih2YXIscmVnKSAgICAgIG1teF9tMnIgKHB1bnBja2xidywgdmFyLCByZWcpCisjZGVmaW5lICAgICAgICAgcHVucGNrbGJ3X3IycihyZWdzLHJlZ2QpICAgIG1teF9yMnIgKHB1bnBja2xidywgcmVncywgcmVnZCkKKyNkZWZpbmUgICAgICAgICBwdW5wY2tsZHFfbTJyKHZhcixyZWcpICAgICAgbW14X20yciAocHVucGNrbGRxLCB2YXIsIHJlZykKKyNkZWZpbmUgICAgICAgICBwdW5wY2tsZHFfcjJyKHJlZ3MscmVnZCkgICAgbW14X3IyciAocHVucGNrbGRxLCByZWdzLCByZWdkKQorI2RlZmluZSAgICAgICAgIHB1bnBja2x3ZF9tMnIodmFyLHJlZykgICAgICBtbXhfbTJyIChwdW5wY2tsd2QsIHZhciwgcmVnKQorI2RlZmluZSAgICAgICAgIHB1bnBja2x3ZF9yMnIocmVncyxyZWdkKSAgICBtbXhfcjJyIChwdW5wY2tsd2QsIHJlZ3MsIHJlZ2QpCisKKyNkZWZpbmUgICAgICAgICBweG9yX20ycih2YXIscmVnKSAgICAgICAgICAgbW14X20yciAocHhvciwgdmFyLCByZWcpCisjZGVmaW5lICAgICAgICAgcHhvcl9yMnIocmVncyxyZWdkKSAgICAgICAgIG1teF9yMnIgKHB4b3IsIHJlZ3MsIHJlZ2QpCisKKworLyogM0ROT1cgZXh0ZW5zaW9ucyAqLworCisjZGVmaW5lICAgICAgICAgcGF2Z3VzYl9tMnIodmFyLHJlZykgICAgICAgIG1teF9tMnIgKHBhdmd1c2IsIHZhciwgcmVnKQorI2RlZmluZSAgICAgICAgIHBhdmd1c2JfcjJyKHJlZ3MscmVnZCkgICAgICBtbXhfcjJyIChwYXZndXNiLCByZWdzLCByZWdkKQorCisKKy8qIEFNRCBNTVggZXh0ZW5zaW9ucyAtIGFsc28gYXZhaWxhYmxlIGluIGludGVsIFNTRSAqLworCisKKyNkZWZpbmUgICAgICAgICBtbXhfbTJyaShvcCxtZW0scmVnLGltbSkgXAorICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoI29wICIgJTEsICUwLCAlJSIgI3JlZyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IC8qIG5vdGhpbmcgKi8gXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAibSIgKG1lbSksICJpIiAoaW1tKSkKKyNkZWZpbmUgICAgICAgICBtbXhfcjJyaShvcCxyZWdzLHJlZ2QsaW1tKSBcCisgICAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fICgjb3AgIiAlMCwgJSUiICNyZWdzICIsICUlIiAjcmVnZCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IC8qIG5vdGhpbmcgKi8gXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAiaSIgKGltbSkgKQorCisjZGVmaW5lICAgICAgICAgbW14X2ZldGNoKG1lbSxoaW50KSBcCisgICAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fICgicHJlZmV0Y2giICNoaW50ICIgJTAiIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogLyogbm90aGluZyAqLyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICJtIiAobWVtKSkKKworCisjZGVmaW5lICAgICAgICAgbWFza21vdnEocmVncyxtYXNrcmVnKSAgICAgIG1teF9yMnJpIChtYXNrbW92cSwgcmVncywgbWFza3JlZykKKworI2RlZmluZSAgICAgICAgIG1vdm50cV9yMm0obW1yZWcsdmFyKSAgICAgICBtbXhfcjJtIChtb3ZudHEsIG1tcmVnLCB2YXIpCisKKyNkZWZpbmUgICAgICAgICBwYXZnYl9tMnIodmFyLHJlZykgICAgICAgICAgbW14X20yciAocGF2Z2IsIHZhciwgcmVnKQorI2RlZmluZSAgICAgICAgIHBhdmdiX3IycihyZWdzLHJlZ2QpICAgICAgICBtbXhfcjJyIChwYXZnYiwgcmVncywgcmVnZCkKKyNkZWZpbmUgICAgICAgICBwYXZnd19tMnIodmFyLHJlZykgICAgICAgICAgbW14X20yciAocGF2Z3csIHZhciwgcmVnKQorI2RlZmluZSAgICAgICAgIHBhdmd3X3IycihyZWdzLHJlZ2QpICAgICAgICBtbXhfcjJyIChwYXZndywgcmVncywgcmVnZCkKKworI2RlZmluZSAgICAgICAgIHBleHRyd19yMnIobW1yZWcscmVnLGltbSkgICBtbXhfcjJyaSAocGV4dHJ3LCBtbXJlZywgcmVnLCBpbW0pCisKKyNkZWZpbmUgICAgICAgICBwaW5zcndfcjJyKHJlZyxtbXJlZyxpbW0pICAgbW14X3IycmkgKHBpbnNydywgcmVnLCBtbXJlZywgaW1tKQorCisjZGVmaW5lICAgICAgICAgcG1heHN3X20ycih2YXIscmVnKSAgICAgICAgIG1teF9tMnIgKHBtYXhzdywgdmFyLCByZWcpCisjZGVmaW5lICAgICAgICAgcG1heHN3X3IycihyZWdzLHJlZ2QpICAgICAgIG1teF9yMnIgKHBtYXhzdywgcmVncywgcmVnZCkKKworI2RlZmluZSAgICAgICAgIHBtYXh1Yl9tMnIodmFyLHJlZykgICAgICAgICBtbXhfbTJyIChwbWF4dWIsIHZhciwgcmVnKQorI2RlZmluZSAgICAgICAgIHBtYXh1Yl9yMnIocmVncyxyZWdkKSAgICAgICBtbXhfcjJyIChwbWF4dWIsIHJlZ3MsIHJlZ2QpCisKKyNkZWZpbmUgICAgICAgICBwbWluc3dfbTJyKHZhcixyZWcpICAgICAgICAgbW14X20yciAocG1pbnN3LCB2YXIsIHJlZykKKyNkZWZpbmUgICAgICAgICBwbWluc3dfcjJyKHJlZ3MscmVnZCkgICAgICAgbW14X3IyciAocG1pbnN3LCByZWdzLCByZWdkKQorCisjZGVmaW5lICAgICAgICAgcG1pbnViX20ycih2YXIscmVnKSAgICAgICAgIG1teF9tMnIgKHBtaW51YiwgdmFyLCByZWcpCisjZGVmaW5lICAgICAgICAgcG1pbnViX3IycihyZWdzLHJlZ2QpICAgICAgIG1teF9yMnIgKHBtaW51YiwgcmVncywgcmVnZCkKKworI2RlZmluZSAgICAgICAgIHBtb3Ztc2tiKG1tcmVnLHJlZykgXAorICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoIm1vdm1za3BzICUiICNtbXJlZyAiLCAlIiAjcmVnKQorCisjZGVmaW5lICAgICAgICAgcG11bGh1d19tMnIodmFyLHJlZykgICAgICAgIG1teF9tMnIgKHBtdWxodXcsIHZhciwgcmVnKQorI2RlZmluZSAgICAgICAgIHBtdWxodXdfcjJyKHJlZ3MscmVnZCkgICAgICBtbXhfcjJyIChwbXVsaHV3LCByZWdzLCByZWdkKQorCisjZGVmaW5lICAgICAgICAgcHJlZmV0Y2h0MChtZW0pICAgICAgICAgICAgIG1teF9mZXRjaCAobWVtLCB0MCkKKyNkZWZpbmUgICAgICAgICBwcmVmZXRjaHQxKG1lbSkgICAgICAgICAgICAgbW14X2ZldGNoIChtZW0sIHQxKQorI2RlZmluZSAgICAgICAgIHByZWZldGNodDIobWVtKSAgICAgICAgICAgICBtbXhfZmV0Y2ggKG1lbSwgdDIpCisjZGVmaW5lICAgICAgICAgcHJlZmV0Y2hudGEobWVtKSAgICAgICAgICAgIG1teF9mZXRjaCAobWVtLCBudGEpCisKKyNkZWZpbmUgICAgICAgICBwc2FkYndfbTJyKHZhcixyZWcpICAgICAgICAgbW14X20yciAocHNhZGJ3LCB2YXIsIHJlZykKKyNkZWZpbmUgICAgICAgICBwc2FkYndfcjJyKHJlZ3MscmVnZCkgICAgICAgbW14X3IyciAocHNhZGJ3LCByZWdzLCByZWdkKQorCisjZGVmaW5lICAgICAgICAgcHNodWZ3X20ycih2YXIscmVnLGltbSkgICAgIG1teF9tMnJpKHBzaHVmdywgdmFyLCByZWcsIGltbSkKKyNkZWZpbmUgICAgICAgICBwc2h1ZndfcjJyKHJlZ3MscmVnZCxpbW0pICAgbW14X3IycmkocHNodWZ3LCByZWdzLCByZWdkLCBpbW0pCisKKyNkZWZpbmUgICAgICAgICBzZmVuY2UoKSBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoInNmZW5jZVxuXHQiKQorCisvKiBTU0UyICovCisjZGVmaW5lICAgICAgICAgcHNodWZod19tMnIodmFyLHJlZyxpbW0pICAgIG1teF9tMnJpKHBzaHVmaHcsIHZhciwgcmVnLCBpbW0pCisjZGVmaW5lICAgICAgICAgcHNodWZod19yMnIocmVncyxyZWdkLGltbSkgIG1teF9yMnJpKHBzaHVmaHcsIHJlZ3MsIHJlZ2QsIGltbSkKKyNkZWZpbmUgICAgICAgICBwc2h1Zmx3X20ycih2YXIscmVnLGltbSkgICAgbW14X20ycmkocHNodWZsdywgdmFyLCByZWcsIGltbSkKKyNkZWZpbmUgICAgICAgICBwc2h1Zmx3X3IycihyZWdzLHJlZ2QsaW1tKSAgbW14X3IycmkocHNodWZsdywgcmVncywgcmVnZCwgaW1tKQorCisjZGVmaW5lICAgICAgICAgcHNodWZkX3IycihyZWdzLHJlZ2QsaW1tKSAgIG1teF9yMnJpKHBzaHVmZCwgcmVncywgcmVnZCwgaW1tKQorCisjZGVmaW5lICAgICAgICAgbW92ZHFhX20ycih2YXIscmVnKSAgICAgICAgIG1teF9tMnIgKG1vdmRxYSwgdmFyLCByZWcpCisjZGVmaW5lICAgICAgICAgbW92ZHFhX3IybShyZWcsdmFyKSAgICAgICAgIG1teF9yMm0gKG1vdmRxYSwgcmVnLCB2YXIpCisjZGVmaW5lICAgICAgICAgbW92ZHFhX3IycihyZWdzLHJlZ2QpICAgICAgIG1teF9yMnIgKG1vdmRxYSwgcmVncywgcmVnZCkKKyNkZWZpbmUgICAgICAgICBtb3ZkcXVfbTJyKHZhcixyZWcpICAgICAgICAgbW14X20yciAobW92ZHF1LCB2YXIsIHJlZykKKyNkZWZpbmUgICAgICAgICBtb3ZkcXVfcjJtKHJlZyx2YXIpICAgICAgICAgbW14X3IybSAobW92ZHF1LCByZWcsIHZhcikKKyNkZWZpbmUgICAgICAgICBtb3ZkcXVfcjJyKHJlZ3MscmVnZCkgICAgICAgbW14X3IyciAobW92ZHF1LCByZWdzLCByZWdkKQorCisjZGVmaW5lICAgICAgICAgcG11bGx3X3IybShyZWcsdmFyKSAgICAgICAgIG1teF9yMm0gKHBtdWxsdywgcmVnLCB2YXIpCisKKyNkZWZpbmUgICAgICAgICBwc2xsZHFfaTJyKGltbSxyZWcpICAgICAgICAgbW14X2kyciAocHNsbGRxLCBpbW0sIHJlZykKKyNkZWZpbmUgICAgICAgICBwc3JsZHFfaTJyKGltbSxyZWcpICAgICAgICAgbW14X2kyciAocHNybGRxLCBpbW0sIHJlZykKKworI2RlZmluZSAgICAgICAgIHB1bnBja2xxZHFfcjJyKHJlZ3MscmVnZCkgICBtbXhfcjJyIChwdW5wY2tscWRxLCByZWdzLCByZWdkKQorI2RlZmluZSAgICAgICAgIHB1bnBja2hxZHFfcjJyKHJlZ3MscmVnZCkgICBtbXhfcjJyIChwdW5wY2tocWRxLCByZWdzLCByZWdkKQorCisKKyNlbmRpZiAvKiBBVkNPREVDX0kzODZNTVhfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2V0MTMxeC9LY29uZmlnIGIvZHJpdmVycy9zdGFnaW5nL2V0MTMxeC9LY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUxMWNmMzQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvZXQxMzF4L0tjb25maWcKQEAgLTAsMCArMSwxOCBAQAorY29uZmlnIEVUMTMxWAorCXRyaXN0YXRlICJBZ2VyZSBFVC0xMzEwIEdpZ2FiaXQgRXRoZXJuZXQgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIE5FVERFVl8xMDAwICYmIFBDSQorCWRlZmF1bHQgbgorCS0tLWhlbHAtLS0KKwkgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIEFnZXJlIEVULTEzMTAgZXRoZXJuZXQgYWRhcHRlcnMuCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuIFRoZSBtb2R1bGUKKwkgIHdpbGwgYmUgY2FsbGVkIGV0MTMxeC4KKworY29uZmlnIEVUMTMxWF9ERUJVRworCWJvb2wgIkVuYWJsZSBldDEzMXggZGVidWdnaW5nIgorCWRlcGVuZHMgb24gRVQxMzFYCisJZGVmYXVsdCBuCisJLS0taGVscC0tLQorCSAgU2F5IFkgZm9yIGRldGFpbGVkIGRlYnVnIGluZm9ybWF0aW9uLgorCisJICBJZiBpbiBkb3VidCwgc2F5IE4uCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZXQxMzF4L01ha2VmaWxlIGIvZHJpdmVycy9zdGFnaW5nL2V0MTMxeC9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYWQ1NzFkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2V0MTMxeC9NYWtlZmlsZQpAQCAtMCwwICsxLDE4IEBACisjCisjIE1ha2VmaWxlIGZvciB0aGUgQWdlcmUgRVQtMTMxeCBldGhlcm5ldCBkcml2ZXIKKyMKKworb2JqLSQoQ09ORklHX0VUMTMxWCkgKz0gZXQxMzF4Lm8KKworZXQxMzF4LW9ianMgOj0JZXQxMzEwX2VlcHJvbS5vIFwKKwkJZXQxMzEwX2phZ2NvcmUubyBcCisJCWV0MTMxMF9tYWMubyBcCisJCWV0MTMxMF9waHkubyBcCisJCWV0MTMxMF9wbS5vIFwKKwkJZXQxMzEwX3J4Lm8gXAorCQlldDEzMTBfdHgubyBcCisJCWV0MTMxeF9jb25maWcubyBcCisJCWV0MTMxeF9kZWJ1Zy5vIFwKKwkJZXQxMzF4X2luaXRwY2kubyBcCisJCWV0MTMxeF9pc3IubyBcCisJCWV0MTMxeF9uZXRkZXYubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2V0MTMxeC9SRUFETUUgYi9kcml2ZXJzL3N0YWdpbmcvZXQxMzF4L1JFQURNRQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yODc1MmE1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2V0MTMxeC9SRUFETUUKQEAgLTAsMCArMSwyNSBAQAorVGhpcyBpcyBhIGRyaXZlciBmb3IgdGhlIEVUMTMxMCBuZXR3b3JrIGRldmljZS4KKworQmFzZWQgb24gdGhlIGRyaXZlciBmb3VuZCBhdCBodHRwczovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0cy9ldDEzMXgvCisKK0NsZWFuZWQgdXAgaW1tZW5zZWx5IGJ5IE9sYWYgSGFydG1hbiA8by5oYXJ0bWFubkB0ZWxvdml0YWwuY29tPiBhbmQgQ2hyaXN0b3BoCitIZWxsd2lnIDxoY2hAaW5mcmFkZWFkLm9yZz4KKworTm90ZSwgdGhlIHBvd2VybWFuYWdlbWVudCBvcHRpb25zIHdlcmUgcmVtb3ZlZCBmcm9tIHRoZSB2ZW5kb3IgcHJvdmlkZWQKK2RyaXZlciBhcyB0aGV5IGRpZCBub3QgYnVpbGQgcHJvcGVybHkgYXQgdGhlIHRpbWUuCisKK1RPRE86CisJLSBrZXJuZWwgY29kaW5nIHN0eWxlIGNsZWFudXBzCisJLSBmb3J3YXJkIHBvcnQgZm9yIGxhdGVzdCBuZXR3b3JrIGRyaXZlciBjaGFuZ2VzCisJLSBraWxsIHVzZWxlc3MgdHlwZWNhc3RzIChlLmcuIGluIGV0MTMxMF9waHkuYykKKwktIGFsbG9jX2V0aGVyZGV2IGlzIGluaXRpYWxpemluZyBtZW1vcnkgd2l0aCB6ZXJvPyE/CisJLSBhZGRfdGltZXIgY2FsbCBpbiBldDEzMXhfbmV0ZGV2LmMgaXMgY29ycmVjdD8KKwktIEFkZCBwb3dlciBzYXZpbmcgZnVuY3Rpb25hbGl0eSAoc3VzcGVuZCwgc2xlZXAsIHJlc3VtZSkKKwktIEltcGxlbWVudCBhIGZldyBtb3JlIGtlcm5lbCBQYXJhbWV0ZXIgKHNldCBtYWMgKQorCitQbGVhc2Ugc2VuZCBwYXRjaGVzIHRvOgorCUdyZWcgS3JvYWgtSGFydG1hbiA8Z3JlZ2toQHN1c2UuZGU+CisKK0FuZCBDYzogT2xhZiBIYXJ0bWFubiA8by5oYXJ0bWFubkB0ZWxvdml0YWwuY29tPiBhcyBoZSBoYXMgdGhpcyBkZXZpY2UgYW5kIGNhbgordGVzdCBhbnkgY2hhbmdlcy4KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2V0MTMxeC9ldDEzMTBfYWRkcmVzc19tYXAuaCBiL2RyaXZlcnMvc3RhZ2luZy9ldDEzMXgvZXQxMzEwX2FkZHJlc3NfbWFwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2M4NTk5OQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ldDEzMXgvZXQxMzEwX2FkZHJlc3NfbWFwLmgKQEAgLTAsMCArMSwyMzk5IEBACisvKgorICogQWdlcmUgU3lzdGVtcyBJbmMuCisgKiAxMC8xMDAvMTAwMCBCYXNlLVQgRXRoZXJuZXQgRHJpdmVyIGZvciB0aGUgRVQxMzAxIGFuZCBFVDEzMXggc2VyaWVzIE1BQ3MKKyAqCisgKiBDb3B5cmlnaHQgqSAyMDA1IEFnZXJlIFN5c3RlbXMgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICAgaHR0cDovL3d3dy5hZ2VyZS5jb20KKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIGV0MTMxMF9hZGRyZXNzX21hcC5oIC0gQ29udGFpbnMgdGhlIHJlZ2lzdGVyIG1hcHBpbmcgZm9yIHRoZSBFVDEzMTAKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIFNPRlRXQVJFIExJQ0VOU0UKKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIHByb3ZpZGVkIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyB0ZXJtcyBhbmQgY29uZGl0aW9ucywKKyAqIHdoaWNoIHlvdSBzaG91bGQgcmVhZCBjYXJlZnVsbHkgYmVmb3JlIHVzaW5nIHRoZSBzb2Z0d2FyZS4gIFVzaW5nIHRoaXMKKyAqIHNvZnR3YXJlIGluZGljYXRlcyB5b3VyIGFjY2VwdGFuY2Ugb2YgdGhlc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMuICBJZiB5b3UgZG8KKyAqIG5vdCBhZ3JlZSB3aXRoIHRoZXNlIHRlcm1zIGFuZCBjb25kaXRpb25zLCBkbyBub3QgdXNlIHRoZSBzb2Z0d2FyZS4KKyAqCisgKiBDb3B5cmlnaHQgqSAyMDA1IEFnZXJlIFN5c3RlbXMgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBvciBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9ucywgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqIC4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzCisgKiAgICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgRGlzY2xhaW1lciBhcyBjb21tZW50cyBpbiB0aGUgY29kZSBhcworICogICAgd2VsbCBhcyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBEaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisgKiAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiAuIE5laXRoZXIgdGhlIG5hbWUgb2YgQWdlcmUgU3lzdGVtcyBJbmMuIG5vciB0aGUgbmFtZXMgb2YgdGhlIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBEaXNjbGFpbWVyCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCCTQVMgSVOUIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsCisgKiBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgSU5GUklOR0VNRU5UIEFORCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgQU5ZCisgKiBVU0UsIE1PRElGSUNBVElPTiBPUiBESVNUUklCVVRJT04gT0YgVEhJUyBTT0ZUV0FSRSBJUyBTT0xFTFkgQVQgVEhFIFVTRVJTIE9XTgorICogUklTSy4gSU4gTk8gRVZFTlQgU0hBTEwgQUdFUkUgU1lTVEVNUyBJTkMuIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gKKyAqIERBTUFHRS4KKyAqCisgKi8KKworI2lmbmRlZiBfRVQxMzEwX0FERFJFU1NfTUFQX0hfCisjZGVmaW5lIF9FVDEzMTBfQUREUkVTU19NQVBfSF8KKworCisvKiBTVEFSVCBPRiBHTE9CQUwgUkVHSVNURVIgQUREUkVTUyBNQVAgKi8KKwordHlwZWRlZiB1bmlvbiBfUV9BRERSX3QgeworCXUzMiB2YWx1ZTsKKwlzdHJ1Y3QgeworI2lmZGVmIF9CSVRfRklFTERTX0hUT0wKKwkJdTMyIHVudXNlZDoyMjsJLy8gYml0cyAxMC0zMQorCQl1MzIgYWRkcjoxMDsJLy8gYml0cyAwLTkKKyNlbHNlCisJCXUzMiBhZGRyOjEwOwkvLyBiaXRzIDAtOQorCQl1MzIgdW51c2VkOjIyOwkvLyBiaXRzIDEwLTMxCisjZW5kaWYKKwl9IGJpdHM7Cit9IFFfQUREUl90LCAqUFFfQUREUl90OworCisvKgorICogc3RydWN0dXJlIGZvciB0eCBxdWV1ZSBzdGFydCBhZGRyZXNzIHJlZyBpbiBnbG9iYWwgYWRkcmVzcyBtYXAKKyAqIGxvY2F0ZWQgYXQgYWRkcmVzcyAweDAwMDAKKyAqIERlZmluZWQgZWFybGllciAoUV9BRERSX3QpCisgKi8KKworLyoKKyAqIHN0cnVjdHVyZSBmb3IgdHggcXVldWUgZW5kIGFkZHJlc3MgcmVnIGluIGdsb2JhbCBhZGRyZXNzIG1hcAorICogbG9jYXRlZCBhdCBhZGRyZXNzIDB4MDAwNAorICogRGVmaW5lZCBlYXJsaWVyIChRX0FERFJfdCkKKyAqLworCisvKgorICogc3RydWN0dXJlIGZvciByeCBxdWV1ZSBzdGFydCBhZGRyZXNzIHJlZyBpbiBnbG9iYWwgYWRkcmVzcyBtYXAKKyAqIGxvY2F0ZWQgYXQgYWRkcmVzcyAweDAwMDgKKyAqIERlZmluZWQgZWFybGllciAoUV9BRERSX3QpCisgKi8KKworLyoKKyAqIHN0cnVjdHVyZSBmb3IgcnggcXVldWUgZW5kIGFkZHJlc3MgcmVnIGluIGdsb2JhbCBhZGRyZXNzIG1hcAorICogbG9jYXRlZCBhdCBhZGRyZXNzIDB4MDAwQworICogRGVmaW5lZCBlYXJsaWVyIChRX0FERFJfdCkKKyAqLworCisvKgorICogc3RydWN0dXJlIGZvciBwb3dlciBtYW5hZ2VtZW50IGNvbnRyb2wgc3RhdHVzIHJlZyBpbiBnbG9iYWwgYWRkcmVzcyBtYXAKKyAqIGxvY2F0ZWQgYXQgYWRkcmVzcyAweDAwMTAKKyAqLwordHlwZWRlZiB1bmlvbiBfUE1fQ1NSX3QgeworCXUzMiB2YWx1ZTsKKwlzdHJ1Y3QgeworI2lmZGVmIF9CSVRfRklFTERTX0hUT0wKKwkJdTMyIHVudXNlZDoyMjsJCS8vIGJpdHMgMTAtMzEKKwkJdTMyIHBtX2phZ2NvcmVfcnhfcmR5OjE7CS8vIGJpdCA5CisJCXUzMiBwbV9qYWdjb3JlX3R4X3JkeToxOwkvLyBiaXQgOAorCQl1MzIgcG1fcGh5X2xwZWRfZW46MTsJLy8gYml0IDcKKwkJdTMyIHBtX3BoeV9zd19jb21hOjE7CS8vIGJpdCA2CisJCXUzMiBwbV9yeGNsa19nYXRlOjE7CS8vIGJpdCA1CisJCXUzMiBwbV90eGNsa19nYXRlOjE7CS8vIGJpdCA0CisJCXUzMiBwbV9zeXNjbGtfZ2F0ZToxOwkvLyBiaXQgMworCQl1MzIgcG1famFnY29yZV9yeF9lbjoxOwkvLyBiaXQgMgorCQl1MzIgcG1famFnY29yZV90eF9lbjoxOwkvLyBiaXQgMQorCQl1MzIgcG1fZ2lnZXBoeV9lbjoxOwkvLyBiaXQgMAorI2Vsc2UKKwkJdTMyIHBtX2dpZ2VwaHlfZW46MTsJLy8gYml0IDAKKwkJdTMyIHBtX2phZ2NvcmVfdHhfZW46MTsJLy8gYml0IDEKKwkJdTMyIHBtX2phZ2NvcmVfcnhfZW46MTsJLy8gYml0IDIKKwkJdTMyIHBtX3N5c2Nsa19nYXRlOjE7CS8vIGJpdCAzCisJCXUzMiBwbV90eGNsa19nYXRlOjE7CS8vIGJpdCA0CisJCXUzMiBwbV9yeGNsa19nYXRlOjE7CS8vIGJpdCA1CisJCXUzMiBwbV9waHlfc3dfY29tYToxOwkvLyBiaXQgNgorCQl1MzIgcG1fcGh5X2xwZWRfZW46MTsJLy8gYml0IDcKKwkJdTMyIHBtX2phZ2NvcmVfdHhfcmR5OjE7CS8vIGJpdCA4CisJCXUzMiBwbV9qYWdjb3JlX3J4X3JkeToxOwkvLyBiaXQgOQorCQl1MzIgdW51c2VkOjIyOwkJLy8gYml0cyAxMC0zMQorI2VuZGlmCisJfSBiaXRzOworfSBQTV9DU1JfdCwgKlBQTV9DU1JfdDsKKworLyoKKyAqIHN0cnVjdHVyZSBmb3IgaW50ZXJydXB0IHN0YXR1cyByZWcgaW4gZ2xvYmFsIGFkZHJlc3MgbWFwCisgKiBsb2NhdGVkIGF0IGFkZHJlc3MgMHgwMDE4CisgKi8KK3R5cGVkZWYgdW5pb24gX0lOVEVSUlVQVF90IHsKKwl1MzIgdmFsdWU7CisJc3RydWN0IHsKKyNpZmRlZiBfQklUX0ZJRUxEU19IVE9MCisJCXUzMiB1bnVzZWQ1OjExOwkJCS8vIGJpdHMgMjEtMzEKKwkJdTMyIHNsdl90aW1lb3V0OjE7CQkJLy8gYml0IDIwCisJCXUzMiBtYWNfc3RhdF9pbnRlcnJ1cHQ6MTsJCS8vIGJpdCAxOQorCQl1MzIgcnhtYWNfaW50ZXJydXB0OjE7CQkvLyBiaXQgMTgKKwkJdTMyIHR4bWFjX2ludGVycnVwdDoxOwkJLy8gYml0IDE3CisJCXUzMiBwaHlfaW50ZXJydXB0OjE7CQkvLyBiaXQgMTYKKwkJdTMyIHdha2Vfb25fbGFuOjE7CQkJLy8gYml0IDE1CisJCXUzMiB3YXRjaGRvZ19pbnRlcnJ1cHQ6MTsJCS8vIGJpdCAxNAorCQl1MzIgdW51c2VkNDo0OwkJCS8vIGJpdHMgMTAtMTMKKwkJdTMyIHJ4ZG1hX2VycjoxOwkJCS8vIGJpdCA5CisJCXUzMiByeGRtYV9wa3Rfc3RhdF9yaW5nX2xvdzoxOwkvLyBiaXQgOAorCQl1MzIgcnhkbWFfZmJfcmluZzFfbG93OjE7CQkvLyBiaXQgNworCQl1MzIgcnhkbWFfZmJfcmluZzBfbG93OjE7CQkvLyBiaXQgNgorCQl1MzIgcnhkbWFfeGZyX2RvbmU6MTsJCS8vIGJpdCA1CisJCXUzMiB0eGRtYV9lcnI6MTsJCQkvLyBiaXQgNAorCQl1MzIgdHhkbWFfaXNyOjE7CQkJLy8gYml0IDMKKwkJdTMyIHVudXNlZDM6MTsJCQkvLyBiaXQgMgorCQl1MzIgdW51c2VkMjoxOwkJCS8vIGJpdCAxCisJCXUzMiB1bnVzZWQxOjE7CQkJLy8gYml0IDAKKyNlbHNlCisJCXUzMiB1bnVzZWQxOjE7CQkJLy8gYml0IDAKKwkJdTMyIHVudXNlZDI6MTsJCQkvLyBiaXQgMQorCQl1MzIgdW51c2VkMzoxOwkJCS8vIGJpdCAyCisJCXUzMiB0eGRtYV9pc3I6MTsJCQkvLyBiaXQgMworCQl1MzIgdHhkbWFfZXJyOjE7CQkJLy8gYml0IDQKKwkJdTMyIHJ4ZG1hX3hmcl9kb25lOjE7CQkvLyBiaXQgNQorCQl1MzIgcnhkbWFfZmJfcmluZzBfbG93OjE7CQkvLyBiaXQgNgorCQl1MzIgcnhkbWFfZmJfcmluZzFfbG93OjE7CQkvLyBiaXQgNworCQl1MzIgcnhkbWFfcGt0X3N0YXRfcmluZ19sb3c6MTsJLy8gYml0IDgKKwkJdTMyIHJ4ZG1hX2VycjoxOwkJCS8vIGJpdCA5CisJCXUzMiB1bnVzZWQ0OjQ7CQkJLy8gYml0cyAxMC0xMworCQl1MzIgd2F0Y2hkb2dfaW50ZXJydXB0OjE7CQkvLyBiaXQgMTQKKwkJdTMyIHdha2Vfb25fbGFuOjE7CQkJLy8gYml0IDE1CisJCXUzMiBwaHlfaW50ZXJydXB0OjE7CQkvLyBiaXQgMTYKKwkJdTMyIHR4bWFjX2ludGVycnVwdDoxOwkJLy8gYml0IDE3CisJCXUzMiByeG1hY19pbnRlcnJ1cHQ6MTsJCS8vIGJpdCAxOAorCQl1MzIgbWFjX3N0YXRfaW50ZXJydXB0OjE7CQkvLyBiaXQgMTkKKwkJdTMyIHNsdl90aW1lb3V0OjE7CQkJLy8gYml0IDIwCisJCXUzMiB1bnVzZWQ1OjExOwkJCS8vIGJpdHMgMjEtMzEKKyNlbmRpZgorCX0gYml0czsKK30gSU5URVJSVVBUX3QsICpQSU5URVJSVVBUX3Q7CisKKy8qCisgKiBzdHJ1Y3R1cmUgZm9yIGludGVycnVwdCBtYXNrIHJlZyBpbiBnbG9iYWwgYWRkcmVzcyBtYXAKKyAqIGxvY2F0ZWQgYXQgYWRkcmVzcyAweDAwMUMKKyAqIERlZmluZWQgZWFybGllciAoSU5URVJSVVBUX3QpLCBidXQgJ3dhdGNoZG9nX2ludGVycnVwdCcgaXMgbm90IHVzZWQuCisgKi8KKworLyoKKyAqIHN0cnVjdHVyZSBmb3IgaW50ZXJydXB0IGFsaWFzIGNsZWFyIG1hc2sgcmVnIGluIGdsb2JhbCBhZGRyZXNzIG1hcAorICogbG9jYXRlZCBhdCBhZGRyZXNzIDB4MDAyMAorICogRGVmaW5lZCBlYXJsaWVyIChJTlRFUlJVUFRfdCkKKyAqLworCisvKgorICogc3RydWN0dXJlIGZvciBpbnRlcnJ1cHQgc3RhdHVzIGFsaWFzIHJlZyBpbiBnbG9iYWwgYWRkcmVzcyBtYXAKKyAqIGxvY2F0ZWQgYXQgYWRkcmVzcyAweDAwMjQKKyAqIERlZmluZWQgZWFybGllciAoSU5URVJSVVBUX3QpCisgKi8KKworLyoKKyAqIHN0cnVjdHVyZSBmb3Igc29mdHdhcmUgcmVzZXQgcmVnIGluIGdsb2JhbCBhZGRyZXNzIG1hcAorICogbG9jYXRlZCBhdCBhZGRyZXNzIDB4MDAyOAorICovCit0eXBlZGVmIHVuaW9uIF9TV19SRVNFVF90IHsKKwl1MzIgdmFsdWU7CisJc3RydWN0IHsKKyNpZmRlZiBfQklUX0ZJRUxEU19IVE9MCisJCXUzMiBzZWxmY2xyX2Rpc2FibGU6MTsJLy8gYml0IDMxCisJCXUzMiB1bnVzZWQ6MjQ7CQkvLyBiaXRzIDctMzAKKwkJdTMyIG1tY19zd19yZXNldDoxOwkvLyBiaXQgNgorCQl1MzIgbWFjX3N0YXRfc3dfcmVzZXQ6MTsJLy8gYml0IDUKKwkJdTMyIG1hY19zd19yZXNldDoxOwkvLyBiaXQgNAorCQl1MzIgcnhtYWNfc3dfcmVzZXQ6MTsJLy8gYml0IDMKKwkJdTMyIHR4bWFjX3N3X3Jlc2V0OjE7CS8vIGJpdCAyCisJCXUzMiByeGRtYV9zd19yZXNldDoxOwkvLyBiaXQgMQorCQl1MzIgdHhkbWFfc3dfcmVzZXQ6MTsJLy8gYml0IDAKKyNlbHNlCisJCXUzMiB0eGRtYV9zd19yZXNldDoxOwkvLyBiaXQgMAorCQl1MzIgcnhkbWFfc3dfcmVzZXQ6MTsJLy8gYml0IDEKKwkJdTMyIHR4bWFjX3N3X3Jlc2V0OjE7CS8vIGJpdCAyCisJCXUzMiByeG1hY19zd19yZXNldDoxOwkvLyBiaXQgMworCQl1MzIgbWFjX3N3X3Jlc2V0OjE7CS8vIGJpdCA0CisJCXUzMiBtYWNfc3RhdF9zd19yZXNldDoxOwkvLyBiaXQgNQorCQl1MzIgbW1jX3N3X3Jlc2V0OjE7CS8vIGJpdCA2CisJCXUzMiB1bnVzZWQ6MjQ7CQkvLyBiaXRzIDctMzAKKwkJdTMyIHNlbGZjbHJfZGlzYWJsZToxOwkvLyBiaXQgMzEKKyNlbmRpZgorCX0gYml0czsKK30gU1dfUkVTRVRfdCwgKlBTV19SRVNFVF90OworCisvKgorICogc3RydWN0dXJlIGZvciBTTFYgVGltZXIgcmVnIGluIGdsb2JhbCBhZGRyZXNzIG1hcAorICogbG9jYXRlZCBhdCBhZGRyZXNzIDB4MDAyQworICovCit0eXBlZGVmIHVuaW9uIF9TTFZfVElNRVJfdCB7CisJdTMyIHZhbHVlOworCXN0cnVjdCB7CisjaWZkZWYgX0JJVF9GSUVMRFNfSFRPTAorCQl1MzIgdW51c2VkOjg7CS8vIGJpdHMgMjQtMzEKKwkJdTMyIHRpbWVyX2luaToyNDsJLy8gYml0cyAwLTIzCisjZWxzZQorCQl1MzIgdGltZXJfaW5pOjI0OwkvLyBiaXRzIDAtMjMKKwkJdTMyIHVudXNlZDo4OwkvLyBiaXRzIDI0LTMxCisjZW5kaWYKKwl9IGJpdHM7Cit9IFNMVl9USU1FUl90LCAqUFNMVl9USU1FUl90OworCisvKgorICogc3RydWN0dXJlIGZvciBNU0kgQ29uZmlndXJhdGlvbiByZWcgaW4gZ2xvYmFsIGFkZHJlc3MgbWFwCisgKiBsb2NhdGVkIGF0IGFkZHJlc3MgMHgwMDMwCisgKi8KK3R5cGVkZWYgdW5pb24gX01TSV9DT05GSUdfdCB7CisJdTMyIHZhbHVlOworCXN0cnVjdCB7CisjaWZkZWYgX0JJVF9GSUVMRFNfSFRPTAorCQl1MzIgdW51c2VkMToxMzsJLy8gYml0cyAxOS0zMQorCQl1MzIgbXNpX3RjOjM7CS8vIGJpdHMgMTYtMTgKKwkJdTMyIHVudXNlZDI6MTE7CS8vIGJpdHMgNS0xNQorCQl1MzIgbXNpX3ZlY3Rvcjo1OwkvLyBiaXRzIDAtNAorI2Vsc2UKKwkJdTMyIG1zaV92ZWN0b3I6NTsJLy8gYml0cyAwLTQKKwkJdTMyIHVudXNlZDI6MTE7CS8vIGJpdHMgNS0xNQorCQl1MzIgbXNpX3RjOjM7CS8vIGJpdHMgMTYtMTgKKwkJdTMyIHVudXNlZDE6MTM7CS8vIGJpdHMgMTktMzEKKyNlbmRpZgorCX0gYml0czsKK30gTVNJX0NPTkZJR190LCAqUE1TSV9DT05GSUdfdDsKKworLyoKKyAqIHN0cnVjdHVyZSBmb3IgTG9vcGJhY2sgcmVnIGluIGdsb2JhbCBhZGRyZXNzIG1hcAorICogbG9jYXRlZCBhdCBhZGRyZXNzIDB4MDAzNAorICovCit0eXBlZGVmIHVuaW9uIF9MT09QQkFDS190IHsKKwl1MzIgdmFsdWU7CisJc3RydWN0IHsKKyNpZmRlZiBfQklUX0ZJRUxEU19IVE9MCisJCXUzMiB1bnVzZWQ6MzA7CQkvLyBiaXRzIDItMzEKKwkJdTMyIGRtYV9sb29wYmFjazoxOwkvLyBiaXQgMQorCQl1MzIgbWFjX2xvb3BiYWNrOjE7CS8vIGJpdCAwCisjZWxzZQorCQl1MzIgbWFjX2xvb3BiYWNrOjE7CS8vIGJpdCAwCisJCXUzMiBkbWFfbG9vcGJhY2s6MTsJLy8gYml0IDEKKwkJdTMyIHVudXNlZDozMDsJCS8vIGJpdHMgMi0zMQorI2VuZGlmCisJfSBiaXRzOworfSBMT09QQkFDS190LCAqUExPT1BCQUNLX3Q7CisKKy8qCisgKiBHTE9CQUwgTW9kdWxlIG9mIEpBR0NvcmUgQWRkcmVzcyBNYXBwaW5nCisgKiBMb2NhdGVkIGF0IGFkZHJlc3MgMHgwMDAwCisgKi8KK3R5cGVkZWYgc3RydWN0IF9HTE9CQUxfdCB7CQkJLy8gTG9jYXRpb246CisJUV9BRERSX3QgdHhxX3N0YXJ0X2FkZHI7CQkvLyAgMHgwMDAwCisJUV9BRERSX3QgdHhxX2VuZF9hZGRyOwkJCS8vICAweDAwMDQKKwlRX0FERFJfdCByeHFfc3RhcnRfYWRkcjsJCS8vICAweDAwMDgKKwlRX0FERFJfdCByeHFfZW5kX2FkZHI7CQkJLy8gIDB4MDAwQworCVBNX0NTUl90IHBtX2NzcjsJCQkvLyAgMHgwMDEwCisJdTMyIHVudXNlZDsJCQkJLy8gIDB4MDAxNAorCUlOVEVSUlVQVF90IGludF9zdGF0dXM7CQkJLy8gIDB4MDAxOAorCUlOVEVSUlVQVF90IGludF9tYXNrOwkJCS8vICAweDAwMUMKKwlJTlRFUlJVUFRfdCBpbnRfYWxpYXNfY2xyX2VuOwkJLy8gIDB4MDAyMAorCUlOVEVSUlVQVF90IGludF9zdGF0dXNfYWxpYXM7CQkvLyAgMHgwMDI0CisJU1dfUkVTRVRfdCBzd19yZXNldDsJCQkvLyAgMHgwMDI4CisJU0xWX1RJTUVSX3Qgc2x2X3RpbWVyOwkJCS8vICAweDAwMkMKKwlNU0lfQ09ORklHX3QgbXNpX2NvbmZpZzsJCS8vICAweDAwMzAKKwlMT09QQkFDS190IGxvb3BiYWNrOwkJCS8vICAweDAwMzQKKwl1MzIgd2F0Y2hkb2dfdGltZXI7CQkJLy8gIDB4MDAzOAorfSBHTE9CQUxfdCwgKlBHTE9CQUxfdDsKKworLyogRU5EIE9GIEdMT0JBTCBSRUdJU1RFUiBBRERSRVNTIE1BUCAqLworCisKKy8qIFNUQVJUIE9GIFRYRE1BIFJFR0lTVEVSIEFERFJFU1MgTUFQICovCisKKy8qCisgKiBzdHJ1Y3R1cmUgZm9yIHR4ZG1hIGNvbnRyb2wgc3RhdHVzIHJlZyBpbiB0eGRtYSBhZGRyZXNzIG1hcAorICogbG9jYXRlZCBhdCBhZGRyZXNzIDB4MTAwMAorICovCit0eXBlZGVmIHVuaW9uIF9UWERNQV9DU1JfdCB7CisJdTMyIHZhbHVlOworCXN0cnVjdCB7CisjaWZkZWYgX0JJVF9GSUVMRFNfSFRPTAorCQl1MzIgdW51c2VkMjoxOTsJCS8vIGJpdHMgMTMtMzEKKwkJdTMyIHRyYWZmaWNfY2xhc3M6NDsJLy8gYml0cyA5LTEyCisJCXUzMiBzbmdsX2Vwa3RfbW9kZToxOwkvLyBiaXQgOAorCQl1MzIgY2FjaGVfdGhyc2hsZDo0OwkvLyBiaXRzIDQtNworCQl1MzIgdW51c2VkMToyOwkJLy8gYml0cyAyLTMKKwkJdTMyIGRyb3BfVExQX2Rpc2FibGU6MTsJLy8gYml0IDEKKwkJdTMyIGhhbHQ6MTsJCS8vIGJpdCAwCisjZWxzZQorCQl1MzIgaGFsdDoxOwkJLy8gYml0IDAKKwkJdTMyIGRyb3BfVExQX2Rpc2FibGU6MTsJLy8gYml0IDEKKwkJdTMyIHVudXNlZDE6MjsJCS8vIGJpdHMgMi0zCisJCXUzMiBjYWNoZV90aHJzaGxkOjQ7CS8vIGJpdHMgNC03CisJCXUzMiBzbmdsX2Vwa3RfbW9kZToxOwkvLyBiaXQgOAorCQl1MzIgdHJhZmZpY19jbGFzczo0OwkvLyBiaXRzIDktMTIKKwkJdTMyIHVudXNlZDI6MTk7CQkvLyBiaXRzIDEzLTMxCisjZW5kaWYKKwl9IGJpdHM7Cit9IFRYRE1BX0NTUl90LCAqUFRYRE1BX0NTUl90OworCisvKgorICogc3RydWN0dXJlIGZvciB0eGRtYSBwYWNrZXQgcmluZyBiYXNlIGFkZHJlc3MgaGkgcmVnIGluIHR4ZG1hIGFkZHJlc3MgbWFwCisgKiBsb2NhdGVkIGF0IGFkZHJlc3MgMHgxMDA0CisgKiBEZWZpbmVkIGVhcmxpZXIgKHUzMikKKyAqLworCisvKgorICogc3RydWN0dXJlIGZvciB0eGRtYSBwYWNrZXQgcmluZyBiYXNlIGFkZHJlc3MgbG93IHJlZyBpbiB0eGRtYSBhZGRyZXNzIG1hcAorICogbG9jYXRlZCBhdCBhZGRyZXNzIDB4MTAwOAorICogRGVmaW5lZCBlYXJsaWVyICh1MzIpCisgKi8KKworLyoKKyAqIHN0cnVjdHVyZSBmb3IgdHhkbWEgcGFja2V0IHJpbmcgbnVtYmVyIG9mIGRlc2NyaXB0b3IgcmVnIGluIHR4ZG1hIGFkZHJlc3MKKyAqIG1hcC4gIExvY2F0ZWQgYXQgYWRkcmVzcyAweDEwMEMKKyAqLwordHlwZWRlZiB1bmlvbiBfVFhETUFfUFJfTlVNX0RFU190IHsKKwl1MzIgdmFsdWU7CisJc3RydWN0IHsKKyNpZmRlZiBfQklUX0ZJRUxEU19IVE9MCisJCXUzMiB1bnVzZWQ6MjI7CS8vIGJpdHMgMTAtMzEKKwkJdTMyIHByX25kZXM6MTA7CS8vIGJpdHMgMC05CisjZWxzZQorCQl1MzIgcHJfbmRlczoxMDsJLy8gYml0cyAwLTkKKwkJdTMyIHVudXNlZDoyMjsJLy8gYml0cyAxMC0zMQorI2VuZGlmCisJfSBiaXRzOworfSBUWERNQV9QUl9OVU1fREVTX3QsICpQVFhETUFfUFJfTlVNX0RFU190OworCisKK3R5cGVkZWYgdW5pb24gX0RNQTEwV190IHsKKwl1MzIgdmFsdWU7CisJc3RydWN0IHsKKyNpZmRlZiBfQklUX0ZJRUxEU19IVE9MCisJCXUzMiB1bnVzZWQ6MjE7CS8vIGJpdHMgMTEtMzEKKwkJdTMyIHdyYXA6MTsJLy8gYml0IDEwCisJCXUzMiB2YWw6MTA7CS8vIGJpdHMgMC05CisjZWxzZQorCQl1MzIgdmFsOjEwOwkvLyBiaXRzIDAtOQorCQl1MzIgd3JhcDoxOwkvLyBiaXQgMTAKKwkJdTMyIHVudXNlZDoyMTsJLy8gYml0cyAxMS0zMQorI2VuZGlmCisJfSBiaXRzOworfSBETUExMFdfdCwgKlBETUExMFdfdDsKKworLyoKKyAqIHN0cnVjdHVyZSBmb3IgdHhkbWEgdHggcXVldWUgd3JpdGUgYWRkcmVzcyByZWcgaW4gdHhkbWEgYWRkcmVzcyBtYXAKKyAqIGxvY2F0ZWQgYXQgYWRkcmVzcyAweDEwMTAKKyAqIERlZmluZWQgZWFybGllciAoRE1BMTBXX3QpCisgKi8KKworLyoKKyAqIHN0cnVjdHVyZSBmb3IgdHhkbWEgdHggcXVldWUgd3JpdGUgYWRkcmVzcyBleHRlcm5hbCByZWcgaW4gdHhkbWEgYWRkcmVzcyBtYXAKKyAqIGxvY2F0ZWQgYXQgYWRkcmVzcyAweDEwMTQKKyAqIERlZmluZWQgZWFybGllciAoRE1BMTBXX3QpCisgKi8KKworLyoKKyAqIHN0cnVjdHVyZSBmb3IgdHhkbWEgdHggcXVldWUgcmVhZCBhZGRyZXNzIHJlZyBpbiB0eGRtYSBhZGRyZXNzIG1hcAorICogbG9jYXRlZCBhdCBhZGRyZXNzIDB4MTAxOAorICogRGVmaW5lZCBlYXJsaWVyIChETUExMFdfdCkKKyAqLworCisvKgorICogc3RydWN0dXJlIGZvciB0eGRtYSBzdGF0dXMgd3JpdGViYWNrIGFkZHJlc3MgaGkgcmVnIGluIHR4ZG1hIGFkZHJlc3MgbWFwCisgKiBsb2NhdGVkIGF0IGFkZHJlc3MgMHgxMDFDCisgKiBEZWZpbmVkIGVhcmxpZXIgKHUzMikKKyAqLworCisvKgorICogc3RydWN0dXJlIGZvciB0eGRtYSBzdGF0dXMgd3JpdGViYWNrIGFkZHJlc3MgbG8gcmVnIGluIHR4ZG1hIGFkZHJlc3MgbWFwCisgKiBsb2NhdGVkIGF0IGFkZHJlc3MgMHgxMDIwCisgKiBEZWZpbmVkIGVhcmxpZXIgKHUzMikKKyAqLworCisvKgorICogc3RydWN0dXJlIGZvciB0eGRtYSBzZXJ2aWNlIHJlcXVlc3QgcmVnIGluIHR4ZG1hIGFkZHJlc3MgbWFwCisgKiBsb2NhdGVkIGF0IGFkZHJlc3MgMHgxMDI0CisgKiBEZWZpbmVkIGVhcmxpZXIgKERNQTEwV190KQorICovCisKKy8qCisgKiBzdHJ1Y3R1cmUgZm9yIHR4ZG1hIHNlcnZpY2UgY29tcGxldGUgcmVnIGluIHR4ZG1hIGFkZHJlc3MgbWFwCisgKiBsb2NhdGVkIGF0IGFkZHJlc3MgMHgxMDI4CisgKiBEZWZpbmVkIGVhcmxpZXIgKERNQTEwV190KQorICovCisKK3R5cGVkZWYgdW5pb24gX0RNQTRXX3QgeworCXUzMiB2YWx1ZTsKKwlzdHJ1Y3QgeworI2lmZGVmIF9CSVRfRklFTERTX0hUT0wKKwkJdTMyIHVudXNlZDoyNzsJLy8gYml0cyA1LTMxCisJCXUzMiB3cmFwOjE7CS8vIGJpdCA0CisJCXUzMiB2YWw6NDsJCS8vIGJpdCAwLTMKKyNlbHNlCisJCXUzMiB2YWw6NDsJCS8vIGJpdHMgMC0zCisJCXUzMiB3cmFwOjE7CS8vIGJpdCA0CisJCXUzMiB1bnVzZWQ6Mjc7CS8vIGJpdHMgNS0zMQorI2VuZGlmCisJfSBiaXRzOworfSBETUE0V190LCAqUERNQTRXX3Q7CisKKy8qCisgKiBzdHJ1Y3R1cmUgZm9yIHR4ZG1hIHR4IGRlc2NyaXB0b3IgY2FjaGUgcmVhZCBpbmRleCByZWcgaW4gdHhkbWEgYWRkcmVzcyBtYXAKKyAqIGxvY2F0ZWQgYXQgYWRkcmVzcyAweDEwMkMKKyAqIERlZmluZWQgZWFybGllciAoRE1BNFdfdCkKKyAqLworCisvKgorICogc3RydWN0dXJlIGZvciB0eGRtYSB0eCBkZXNjcmlwdG9yIGNhY2hlIHdyaXRlIGluZGV4IHJlZyBpbiB0eGRtYSBhZGRyZXNzIG1hcAorICogbG9jYXRlZCBhdCBhZGRyZXNzIDB4MTAzMAorICogRGVmaW5lZCBlYXJsaWVyIChETUE0V190KQorICovCisKKy8qCisgKiBzdHJ1Y3R1cmUgZm9yIHR4ZG1hIGVycm9yIHJlZyBpbiB0eGRtYSBhZGRyZXNzIG1hcAorICogbG9jYXRlZCBhdCBhZGRyZXNzIDB4MTAzNAorICovCit0eXBlZGVmIHVuaW9uIF9UWERNQV9FUlJPUl90IHsKKwl1MzIgdmFsdWU7CisJc3RydWN0IHsKKyNpZmRlZiBfQklUX0ZJRUxEU19IVE9MCisJCXUzMiB1bnVzZWQzOjIyOwkJLy8gYml0cyAxMC0zMQorCQl1MzIgV3Jia1Jld2luZDoxOwkvLyBiaXQgOQorCQl1MzIgV3Jia1Jlc2VuZDoxOwkvLyBiaXQgOAorCQl1MzIgdW51c2VkMjoyOwkJLy8gYml0cyA2LTcKKwkJdTMyIERlc2NyUmV3aW5kOjE7CS8vIGJpdCA1CisJCXUzMiBEZXNjclJlc2VuZDoxOwkvLyBiaXQgNAorCQl1MzIgdW51c2VkMToyOwkJLy8gYml0cyAyLTMKKwkJdTMyIFB5bGRSZXdpbmQ6MTsJLy8gYml0IDEKKwkJdTMyIFB5bGRSZXNlbmQ6MTsJLy8gYml0IDAKKyNlbHNlCisJCXUzMiBQeWxkUmVzZW5kOjE7CS8vIGJpdCAwCisJCXUzMiBQeWxkUmV3aW5kOjE7CS8vIGJpdCAxCisJCXUzMiB1bnVzZWQxOjI7CQkvLyBiaXRzIDItMworCQl1MzIgRGVzY3JSZXNlbmQ6MTsJLy8gYml0IDQKKwkJdTMyIERlc2NyUmV3aW5kOjE7CS8vIGJpdCA1CisJCXUzMiB1bnVzZWQyOjI7CQkvLyBiaXRzIDYtNworCQl1MzIgV3Jia1Jlc2VuZDoxOwkvLyBiaXQgOAorCQl1MzIgV3Jia1Jld2luZDoxOwkvLyBiaXQgOQorCQl1MzIgdW51c2VkMzoyMjsJCS8vIGJpdHMgMTAtMzEKKyNlbmRpZgorCX0gYml0czsKK30gVFhETUFfRVJST1JfdCwgKlBUWERNQV9FUlJPUl90OworCisvKgorICogVHggRE1BIE1vZHVsZSBvZiBKQUdDb3JlIEFkZHJlc3MgTWFwcGluZworICogTG9jYXRlZCBhdCBhZGRyZXNzIDB4MTAwMAorICovCit0eXBlZGVmIHN0cnVjdCBfVFhETUFfdCB7CQkvLyBMb2NhdGlvbjoKKwlUWERNQV9DU1JfdCBjc3I7CQkvLyAgMHgxMDAwCisJdTMyIHByX2Jhc2VfaGk7CQkJLy8gIDB4MTAwNAorCXUzMiBwcl9iYXNlX2xvOwkJCS8vICAweDEwMDgKKwlUWERNQV9QUl9OVU1fREVTX3QgcHJfbnVtX2RlczsJLy8gIDB4MTAwQworCURNQTEwV190IHR4cV93cl9hZGRyOwkJLy8gIDB4MTAxMAorCURNQTEwV190IHR4cV93cl9hZGRyX2V4dDsJLy8gIDB4MTAxNAorCURNQTEwV190IHR4cV9yZF9hZGRyOwkJLy8gIDB4MTAxOAorCXUzMiBkbWFfd2JfYmFzZV9oaTsJCS8vICAweDEwMUMKKwl1MzIgZG1hX3diX2Jhc2VfbG87CQkvLyAgMHgxMDIwCisJRE1BMTBXX3Qgc2VydmljZV9yZXF1ZXN0OwkvLyAgMHgxMDI0CisJRE1BMTBXX3Qgc2VydmljZV9jb21wbGV0ZTsJLy8gIDB4MTAyOAorCURNQTRXX3QgY2FjaGVfcmRfaW5kZXg7CQkvLyAgMHgxMDJDCisJRE1BNFdfdCBjYWNoZV93cl9pbmRleDsJCS8vICAweDEwMzAKKwlUWERNQV9FUlJPUl90IFR4RG1hRXJyb3I7CS8vICAweDEwMzQKKwl1MzIgRGVzY0Fib3J0Q291bnQ7CQkvLyAgMHgxMDM4CisJdTMyIFBheWxvYWRBYm9ydENudDsJCS8vICAweDEwM2MKKwl1MzIgV3JpdGVCYWNrQWJvcnRDbnQ7CQkvLyAgMHgxMDQwCisJdTMyIERlc2NUaW1lb3V0Q250OwkJLy8gIDB4MTA0NAorCXUzMiBQYXlsb2FkVGltZW91dENudDsJCS8vICAweDEwNDgKKwl1MzIgV3JpdGVCYWNrVGltZW91dENudDsJLy8gIDB4MTA0YworCXUzMiBEZXNjRXJyb3JDb3VudDsJCS8vICAweDEwNTAKKwl1MzIgUGF5bG9hZEVycm9yQ250OwkJLy8gIDB4MTA1NAorCXUzMiBXcml0ZUJhY2tFcnJvckNudDsJCS8vICAweDEwNTgKKwl1MzIgRHJvcHBlZFRMUENvdW50OwkJLy8gIDB4MTA1YworCURNQTEwV190IE5ld1NlcnZpY2VDb21wbGV0ZTsJLy8gIDB4MTA2MAorCXUzMiBFdGhlcm5ldFBhY2tldENvdW50OwkvLyAgMHgxMDY0Cit9IFRYRE1BX3QsICpQVFhETUFfdDsKKworLyogRU5EIE9GIFRYRE1BIFJFR0lTVEVSIEFERFJFU1MgTUFQICovCisKKworLyogU1RBUlQgT0YgUlhETUEgUkVHSVNURVIgQUREUkVTUyBNQVAgKi8KKworLyoKKyAqIHN0cnVjdHVyZSBmb3IgY29udHJvbCBzdGF0dXMgcmVnIGluIHJ4ZG1hIGFkZHJlc3MgbWFwCisgKiBMb2NhdGVkIGF0IGFkZHJlc3MgMHgyMDAwCisgKi8KK3R5cGVkZWYgdW5pb24gX1JYRE1BX0NTUl90IHsKKwl1MzIgdmFsdWU7CisJc3RydWN0IHsKKyNpZmRlZiBfQklUX0ZJRUxEU19IVE9MCisJCXUzMiB1bnVzZWQyOjE0OwkJLy8gYml0cyAxOC0zMQorCQl1MzIgaGFsdF9zdGF0dXM6MTsJLy8gYml0IDE3CisJCXUzMiBwa3RfZG9uZV9mbHVzaDoxOwkvLyBiaXQgMTYKKwkJdTMyIHBrdF9kcm9wX2Rpc2FibGU6MTsJLy8gYml0IDE1CisJCXUzMiB1bnVzZWQxOjE7CQkvLyBiaXQgMTQKKwkJdTMyIGZicjFfZW5hYmxlOjE7CS8vIGJpdCAxMworCQl1MzIgZmJyMV9zaXplOjI7CS8vIGJpdHMgMTEtMTIKKwkJdTMyIGZicjBfZW5hYmxlOjE7CS8vIGJpdCAxMAorCQl1MzIgZmJyMF9zaXplOjI7CS8vIGJpdHMgOC05CisJCXUzMiBkbWFfYmlnX2VuZGlhbjoxOwkvLyBiaXQgNworCQl1MzIgcGt0X2JpZ19lbmRpYW46MTsJLy8gYml0IDYKKwkJdTMyIHBzcl9iaWdfZW5kaWFuOjE7CS8vIGJpdCA1CisJCXUzMiBmYnJfYmlnX2VuZGlhbjoxOwkvLyBiaXQgNAorCQl1MzIgdGM6MzsJCS8vIGJpdHMgMS0zCisJCXUzMiBoYWx0OjE7CQkvLyBiaXQgMAorI2Vsc2UKKwkJdTMyIGhhbHQ6MTsJCS8vIGJpdCAwCisJCXUzMiB0YzozOwkJLy8gYml0cyAxLTMKKwkJdTMyIGZicl9iaWdfZW5kaWFuOjE7CS8vIGJpdCA0CisJCXUzMiBwc3JfYmlnX2VuZGlhbjoxOwkvLyBiaXQgNQorCQl1MzIgcGt0X2JpZ19lbmRpYW46MTsJLy8gYml0IDYKKwkJdTMyIGRtYV9iaWdfZW5kaWFuOjE7CS8vIGJpdCA3CisJCXUzMiBmYnIwX3NpemU6MjsJLy8gYml0cyA4LTkKKwkJdTMyIGZicjBfZW5hYmxlOjE7CS8vIGJpdCAxMAorCQl1MzIgZmJyMV9zaXplOjI7CS8vIGJpdHMgMTEtMTIKKwkJdTMyIGZicjFfZW5hYmxlOjE7CS8vIGJpdCAxMworCQl1MzIgdW51c2VkMToxOwkJLy8gYml0IDE0CisJCXUzMiBwa3RfZHJvcF9kaXNhYmxlOjE7CS8vIGJpdCAxNQorCQl1MzIgcGt0X2RvbmVfZmx1c2g6MTsJLy8gYml0IDE2CisJCXUzMiBoYWx0X3N0YXR1czoxOwkvLyBiaXQgMTcKKwkJdTMyIHVudXNlZDI6MTQ7CQkvLyBiaXRzIDE4LTMxCisjZW5kaWYKKwl9IGJpdHM7Cit9IFJYRE1BX0NTUl90LCAqUFJYRE1BX0NTUl90OworCisvKgorICogc3RydWN0dXJlIGZvciBkbWEgd3JpdGViYWNrIGxvIHJlZyBpbiByeGRtYSBhZGRyZXNzIG1hcAorICogbG9jYXRlZCBhdCBhZGRyZXNzIDB4MjAwNAorICogRGVmaW5lZCBlYXJsaWVyICh1MzIpCisgKi8KKworLyoKKyAqIHN0cnVjdHVyZSBmb3IgZG1hIHdyaXRlYmFjayBoaSByZWcgaW4gcnhkbWEgYWRkcmVzcyBtYXAKKyAqIGxvY2F0ZWQgYXQgYWRkcmVzcyAweDIwMDgKKyAqIERlZmluZWQgZWFybGllciAodTMyKQorICovCisKKy8qCisgKiBzdHJ1Y3R1cmUgZm9yIG51bWJlciBvZiBwYWNrZXRzIGRvbmUgcmVnIGluIHJ4ZG1hIGFkZHJlc3MgbWFwCisgKiBsb2NhdGVkIGF0IGFkZHJlc3MgMHgyMDBDCisgKi8KK3R5cGVkZWYgdW5pb24gX1JYRE1BX05VTV9QS1RfRE9ORV90IHsKKwl1MzIgdmFsdWU7CisJc3RydWN0IHsKKyNpZmRlZiBfQklUX0ZJRUxEU19IVE9MCisJCXUzMiB1bnVzZWQ6MjQ7CS8vIGJpdHMgOC0zMQorCQl1MzIgbnVtX2RvbmU6ODsJLy8gYml0cyAwLTcKKyNlbHNlCisJCXUzMiBudW1fZG9uZTo4OwkvLyBiaXRzIDAtNworCQl1MzIgdW51c2VkOjI0OwkvLyBiaXRzIDgtMzEKKyNlbmRpZgorCX0gYml0czsKK30gUlhETUFfTlVNX1BLVF9ET05FX3QsICpQUlhETUFfTlVNX1BLVF9ET05FX3Q7CisKKy8qCisgKiBzdHJ1Y3R1cmUgZm9yIG1heCBwYWNrZXQgdGltZSByZWcgaW4gcnhkbWEgYWRkcmVzcyBtYXAKKyAqIGxvY2F0ZWQgYXQgYWRkcmVzcyAweDIwMTAKKyAqLwordHlwZWRlZiB1bmlvbiBfUlhETUFfTUFYX1BLVF9USU1FX3QgeworCXUzMiB2YWx1ZTsKKwlzdHJ1Y3QgeworI2lmZGVmIF9CSVRfRklFTERTX0hUT0wKKwkJdTMyIHVudXNlZDoxNDsJCS8vIGJpdHMgMTgtMzEKKwkJdTMyIHRpbWVfZG9uZToxODsJLy8gYml0cyAwLTE3CisjZWxzZQorCQl1MzIgdGltZV9kb25lOjE4OwkvLyBiaXRzIDAtMTcKKwkJdTMyIHVudXNlZDoxNDsJCS8vIGJpdHMgMTgtMzEKKyNlbmRpZgorCX0gYml0czsKK30gUlhETUFfTUFYX1BLVF9USU1FX3QsICpQUlhETUFfTUFYX1BLVF9USU1FX3Q7CisKKy8qCisgKiBzdHJ1Y3R1cmUgZm9yIHJ4IHF1ZXVlIHJlYWQgYWRkcmVzcyByZWcgaW4gcnhkbWEgYWRkcmVzcyBtYXAKKyAqIGxvY2F0ZWQgYXQgYWRkcmVzcyAweDIwMTQKKyAqIERlZmluZWQgZWFybGllciAoRE1BMTBXX3QpCisgKi8KKworLyoKKyAqIHN0cnVjdHVyZSBmb3IgcnggcXVldWUgcmVhZCBhZGRyZXNzIGV4dGVybmFsIHJlZyBpbiByeGRtYSBhZGRyZXNzIG1hcAorICogbG9jYXRlZCBhdCBhZGRyZXNzIDB4MjAxOAorICogRGVmaW5lZCBlYXJsaWVyIChETUExMFdfdCkKKyAqLworCisvKgorICogc3RydWN0dXJlIGZvciByeCBxdWV1ZSB3cml0ZSBhZGRyZXNzIHJlZyBpbiByeGRtYSBhZGRyZXNzIG1hcAorICogbG9jYXRlZCBhdCBhZGRyZXNzIDB4MjAxQworICogRGVmaW5lZCBlYXJsaWVyIChETUExMFdfdCkKKyAqLworCisvKgorICogc3RydWN0dXJlIGZvciBwYWNrZXQgc3RhdHVzIHJpbmcgYmFzZSBhZGRyZXNzIGxvIHJlZyBpbiByeGRtYSBhZGRyZXNzIG1hcAorICogbG9jYXRlZCBhdCBhZGRyZXNzIDB4MjAyMAorICogRGVmaW5lZCBlYXJsaWVyICh1MzIpCisgKi8KKworLyoKKyAqIHN0cnVjdHVyZSBmb3IgcGFja2V0IHN0YXR1cyByaW5nIGJhc2UgYWRkcmVzcyBoaSByZWcgaW4gcnhkbWEgYWRkcmVzcyBtYXAKKyAqIGxvY2F0ZWQgYXQgYWRkcmVzcyAweDIwMjQKKyAqIERlZmluZWQgZWFybGllciAodTMyKQorICovCisKKy8qCisgKiBzdHJ1Y3R1cmUgZm9yIHBhY2tldCBzdGF0dXMgcmluZyBudW1iZXIgb2YgZGVzY3JpcHRvcnMgcmVnIGluIHJ4ZG1hIGFkZHJlc3MKKyAqIG1hcC4gIExvY2F0ZWQgYXQgYWRkcmVzcyAweDIwMjgKKyAqLwordHlwZWRlZiB1bmlvbiBfUlhETUFfUFNSX05VTV9ERVNfdCB7CisJdTMyIHZhbHVlOworCXN0cnVjdCB7CisjaWZkZWYgX0JJVF9GSUVMRFNfSFRPTAorCQl1MzIgdW51c2VkOjIwOwkJLy8gYml0cyAxMi0zMQorCQl1MzIgcHNyX25kZXM6MTI7CS8vIGJpdCAwLTExCisjZWxzZQorCQl1MzIgcHNyX25kZXM6MTI7CS8vIGJpdCAwLTExCisJCXUzMiB1bnVzZWQ6MjA7CQkvLyBiaXRzIDEyLTMxCisjZW5kaWYKKwl9IGJpdHM7Cit9IFJYRE1BX1BTUl9OVU1fREVTX3QsICpQUlhETUFfUFNSX05VTV9ERVNfdDsKKworLyoKKyAqIHN0cnVjdHVyZSBmb3IgcGFja2V0IHN0YXR1cyByaW5nIGF2YWlsYWJsZSBvZmZzZXQgcmVnIGluIHJ4ZG1hIGFkZHJlc3MgbWFwCisgKiBsb2NhdGVkIGF0IGFkZHJlc3MgMHgyMDJDCisgKi8KK3R5cGVkZWYgdW5pb24gX1JYRE1BX1BTUl9BVkFJTF9PRkZTRVRfdCB7CisJdTMyIHZhbHVlOworCXN0cnVjdCB7CisjaWZkZWYgX0JJVF9GSUVMRFNfSFRPTAorCQl1MzIgdW51c2VkOjE5OwkJLy8gYml0cyAxMy0zMQorCQl1MzIgcHNyX2F2YWlsX3dyYXA6MTsJLy8gYml0IDEyCisJCXUzMiBwc3JfYXZhaWw6MTI7CS8vIGJpdCAwLTExCisjZWxzZQorCQl1MzIgcHNyX2F2YWlsOjEyOwkvLyBiaXQgMC0xMQorCQl1MzIgcHNyX2F2YWlsX3dyYXA6MTsJLy8gYml0IDEyCisJCXUzMiB1bnVzZWQ6MTk7CQkvLyBiaXRzIDEzLTMxCisjZW5kaWYKKwl9IGJpdHM7Cit9IFJYRE1BX1BTUl9BVkFJTF9PRkZTRVRfdCwgKlBSWERNQV9QU1JfQVZBSUxfT0ZGU0VUX3Q7CisKKy8qCisgKiBzdHJ1Y3R1cmUgZm9yIHBhY2tldCBzdGF0dXMgcmluZyBmdWxsIG9mZnNldCByZWcgaW4gcnhkbWEgYWRkcmVzcyBtYXAKKyAqIGxvY2F0ZWQgYXQgYWRkcmVzcyAweDIwMzAKKyAqLwordHlwZWRlZiB1bmlvbiBfUlhETUFfUFNSX0ZVTExfT0ZGU0VUX3QgeworCXUzMiB2YWx1ZTsKKwlzdHJ1Y3QgeworI2lmZGVmIF9CSVRfRklFTERTX0hUT0wKKwkJdTMyIHVudXNlZDoxOTsJCS8vIGJpdHMgMTMtMzEKKwkJdTMyIHBzcl9mdWxsX3dyYXA6MTsJLy8gYml0IDEyCisJCXUzMiBwc3JfZnVsbDoxMjsJLy8gYml0IDAtMTEKKyNlbHNlCisJCXUzMiBwc3JfZnVsbDoxMjsJLy8gYml0IDAtMTEKKwkJdTMyIHBzcl9mdWxsX3dyYXA6MTsJLy8gYml0IDEyCisJCXUzMiB1bnVzZWQ6MTk7CQkvLyBiaXRzIDEzLTMxCisjZW5kaWYKKwl9IGJpdHM7Cit9IFJYRE1BX1BTUl9GVUxMX09GRlNFVF90LCAqUFJYRE1BX1BTUl9GVUxMX09GRlNFVF90OworCisvKgorICogc3RydWN0dXJlIGZvciBwYWNrZXQgc3RhdHVzIHJpbmcgYWNjZXNzIGluZGV4IHJlZyBpbiByeGRtYSBhZGRyZXNzIG1hcAorICogbG9jYXRlZCBhdCBhZGRyZXNzIDB4MjAzNAorICovCit0eXBlZGVmIHVuaW9uIF9SWERNQV9QU1JfQUNDRVNTX0lOREVYX3QgeworCXUzMiB2YWx1ZTsKKwlzdHJ1Y3QgeworI2lmZGVmIF9CSVRfRklFTERTX0hUT0wKKwkJdTMyIHVudXNlZDoyNzsJLy8gYml0cyA1LTMxCisJCXUzMiBwc3JfYWk6NTsJLy8gYml0cyAwLTQKKyNlbHNlCisJCXUzMiBwc3JfYWk6NTsJLy8gYml0cyAwLTQKKwkJdTMyIHVudXNlZDoyNzsJLy8gYml0cyA1LTMxCisjZW5kaWYKKwl9IGJpdHM7Cit9IFJYRE1BX1BTUl9BQ0NFU1NfSU5ERVhfdCwgKlBSWERNQV9QU1JfQUNDRVNTX0lOREVYX3Q7CisKKy8qCisgKiBzdHJ1Y3R1cmUgZm9yIHBhY2tldCBzdGF0dXMgcmluZyBtaW5pbXVtIGRlc2NyaXB0b3JzIHJlZyBpbiByeGRtYSBhZGRyZXNzCisgKiBtYXAuICBMb2NhdGVkIGF0IGFkZHJlc3MgMHgyMDM4CisgKi8KK3R5cGVkZWYgdW5pb24gX1JYRE1BX1BTUl9NSU5fREVTX3QgeworCXUzMiB2YWx1ZTsKKwlzdHJ1Y3QgeworI2lmZGVmIF9CSVRfRklFTERTX0hUT0wKKwkJdTMyIHVudXNlZDoyMDsJLy8gYml0cyAxMi0zMQorCQl1MzIgcHNyX21pbjoxMjsJLy8gYml0cyAwLTExCisjZWxzZQorCQl1MzIgcHNyX21pbjoxMjsJLy8gYml0cyAwLTExCisJCXUzMiB1bnVzZWQ6MjA7CS8vIGJpdHMgMTItMzEKKyNlbmRpZgorCX0gYml0czsKK30gUlhETUFfUFNSX01JTl9ERVNfdCwgKlBSWERNQV9QU1JfTUlOX0RFU190OworCisvKgorICogc3RydWN0dXJlIGZvciBmcmVlIGJ1ZmZlciByaW5nIGJhc2UgbG8gYWRkcmVzcyByZWcgaW4gcnhkbWEgYWRkcmVzcyBtYXAKKyAqIGxvY2F0ZWQgYXQgYWRkcmVzcyAweDIwM0MKKyAqIERlZmluZWQgZWFybGllciAodTMyKQorICovCisKKy8qCisgKiBzdHJ1Y3R1cmUgZm9yIGZyZWUgYnVmZmVyIHJpbmcgYmFzZSBoaSBhZGRyZXNzIHJlZyBpbiByeGRtYSBhZGRyZXNzIG1hcAorICogbG9jYXRlZCBhdCBhZGRyZXNzIDB4MjA0MAorICogRGVmaW5lZCBlYXJsaWVyICh1MzIpCisgKi8KKworLyoKKyAqIHN0cnVjdHVyZSBmb3IgZnJlZSBidWZmZXIgcmluZyBudW1iZXIgb2YgZGVzY3JpcHRvcnMgcmVnIGluIHJ4ZG1hIGFkZHJlc3MKKyAqIG1hcC4gIExvY2F0ZWQgYXQgYWRkcmVzcyAweDIwNDQKKyAqLwordHlwZWRlZiB1bmlvbiBfUlhETUFfRkJSX05VTV9ERVNfdCB7CisJdTMyIHZhbHVlOworCXN0cnVjdCB7CisjaWZkZWYgX0JJVF9GSUVMRFNfSFRPTAorCQl1MzIgdW51c2VkOjIyOwkJLy8gYml0cyAxMC0zMQorCQl1MzIgZmJyX25kZXNjOjEwOwkvLyBiaXRzIDAtOQorI2Vsc2UKKwkJdTMyIGZicl9uZGVzYzoxMDsJLy8gYml0cyAwLTkKKwkJdTMyIHVudXNlZDoyMjsJCS8vIGJpdHMgMTAtMzEKKyNlbmRpZgorCX0gYml0czsKK30gUlhETUFfRkJSX05VTV9ERVNfdCwgKlBSWERNQV9GQlJfTlVNX0RFU190OworCisvKgorICogc3RydWN0dXJlIGZvciBmcmVlIGJ1ZmZlciByaW5nIDAgYXZhaWxhYmxlIG9mZnNldCByZWcgaW4gcnhkbWEgYWRkcmVzcyBtYXAKKyAqIGxvY2F0ZWQgYXQgYWRkcmVzcyAweDIwNDgKKyAqIERlZmluZWQgZWFybGllciAoRE1BMTBXX3QpCisgKi8KKworLyoKKyAqIHN0cnVjdHVyZSBmb3IgZnJlZSBidWZmZXIgcmluZyAwIGZ1bGwgb2Zmc2V0IHJlZyBpbiByeGRtYSBhZGRyZXNzIG1hcAorICogbG9jYXRlZCBhdCBhZGRyZXNzIDB4MjA0QworICogRGVmaW5lZCBlYXJsaWVyIChETUExMFdfdCkKKyAqLworCisvKgorICogc3RydWN0dXJlIGZvciBmcmVlIGJ1ZmZlciBjYWNoZSAwIGZ1bGwgb2Zmc2V0IHJlZyBpbiByeGRtYSBhZGRyZXNzIG1hcAorICogbG9jYXRlZCBhdCBhZGRyZXNzIDB4MjA1MAorICovCit0eXBlZGVmIHVuaW9uIF9SWERNQV9GQkNfUkRfSU5ERVhfdCB7CisJdTMyIHZhbHVlOworCXN0cnVjdCB7CisjaWZkZWYgX0JJVF9GSUVMRFNfSFRPTAorCQl1MzIgdW51c2VkOjI3OwkvLyBiaXRzIDUtMzEKKwkJdTMyIGZiY19yZGk6NTsJLy8gYml0IDAtNAorI2Vsc2UKKwkJdTMyIGZiY19yZGk6NTsJLy8gYml0IDAtNAorCQl1MzIgdW51c2VkOjI3OwkvLyBiaXRzIDUtMzEKKyNlbmRpZgorCX0gYml0czsKK30gUlhETUFfRkJDX1JEX0lOREVYX3QsICpQUlhETUFfRkJDX1JEX0lOREVYX3Q7CisKKy8qCisgKiBzdHJ1Y3R1cmUgZm9yIGZyZWUgYnVmZmVyIHJpbmcgMCBtaW5pbXVtIGRlc2NyaXB0b3IgcmVnIGluIHJ4ZG1hIGFkZHJlc3MgbWFwCisgKiBsb2NhdGVkIGF0IGFkZHJlc3MgMHgyMDU0CisgKi8KK3R5cGVkZWYgdW5pb24gX1JYRE1BX0ZCUl9NSU5fREVTX3QgeworCXUzMiB2YWx1ZTsKKwlzdHJ1Y3QgeworI2lmZGVmIF9CSVRfRklFTERTX0hUT0wKKwkJdTMyIHVudXNlZDoyMjsJLy8gYml0cyAxMC0zMQorCQl1MzIgZmJyX21pbjoxMDsJLy8gYml0cyAwLTkKKyNlbHNlCisJCXUzMiBmYnJfbWluOjEwOwkvLyBiaXRzIDAtOQorCQl1MzIgdW51c2VkOjIyOwkvLyBiaXRzIDEwLTMxCisjZW5kaWYKKwl9IGJpdHM7Cit9IFJYRE1BX0ZCUl9NSU5fREVTX3QsICpQUlhETUFfRkJSX01JTl9ERVNfdDsKKworLyoKKyAqIHN0cnVjdHVyZSBmb3IgZnJlZSBidWZmZXIgcmluZyAxIGJhc2UgYWRkcmVzcyBsbyByZWcgaW4gcnhkbWEgYWRkcmVzcyBtYXAKKyAqIGxvY2F0ZWQgYXQgYWRkcmVzcyAweDIwNTggLSAweDIwNUMKKyAqIERlZmluZWQgZWFybGllciAoUlhETUFfRkJSX0JBU0VfTE9fdCBhbmQgUlhETUFfRkJSX0JBU0VfSElfdCkKKyAqLworCisvKgorICogc3RydWN0dXJlIGZvciBmcmVlIGJ1ZmZlciByaW5nIDEgbnVtYmVyIG9mIGRlc2NyaXB0b3JzIHJlZyBpbiByeGRtYSBhZGRyZXNzCisgKiBtYXAuICBMb2NhdGVkIGF0IGFkZHJlc3MgMHgyMDYwCisgKiBEZWZpbmVkIGVhcmxpZXIgKFJYRE1BX0ZCUl9OVU1fREVTX3QpCisgKi8KKworLyoKKyAqIHN0cnVjdHVyZSBmb3IgZnJlZSBidWZmZXIgcmluZyAxIGF2YWlsYWJsZSBvZmZzZXQgcmVnIGluIHJ4ZG1hIGFkZHJlc3MgbWFwCisgKiBsb2NhdGVkIGF0IGFkZHJlc3MgMHgyMDY0CisgKiBEZWZpbmVkIEVhcmxpZXIgKFJYRE1BX0ZCUl9BVkFJTF9PRkZTRVRfdCkKKyAqLworCisvKgorICogc3RydWN0dXJlIGZvciBmcmVlIGJ1ZmZlciByaW5nIDEgZnVsbCBvZmZzZXQgcmVnIGluIHJ4ZG1hIGFkZHJlc3MgbWFwCisgKiBsb2NhdGVkIGF0IGFkZHJlc3MgMHgyMDY4CisgKiBEZWZpbmVkIEVhcmxpZXIgKFJYRE1BX0ZCUl9GVUxMX09GRlNFVF90KQorICovCisKKy8qCisgKiBzdHJ1Y3R1cmUgZm9yIGZyZWUgYnVmZmVyIGNhY2hlIDEgcmVhZCBpbmRleCByZWcgaW4gcnhkbWEgYWRkcmVzcyBtYXAKKyAqIGxvY2F0ZWQgYXQgYWRkcmVzcyAweDIwNkMKKyAqIERlZmluZWQgRWFybGllciAoUlhETUFfRkJDX1JEX0lOREVYX3QpCisgKi8KKworLyoKKyAqIHN0cnVjdHVyZSBmb3IgZnJlZSBidWZmZXIgcmluZyAxIG1pbmltdW0gZGVzY3JpcHRvciByZWcgaW4gcnhkbWEgYWRkcmVzcyBtYXAKKyAqIGxvY2F0ZWQgYXQgYWRkcmVzcyAweDIwNzAKKyAqIERlZmluZWQgRWFybGllciAoUlhETUFfRkJSX01JTl9ERVNfdCkKKyAqLworCisvKgorICogUnggRE1BIE1vZHVsZSBvZiBKQUdDb3JlIEFkZHJlc3MgTWFwcGluZworICogTG9jYXRlZCBhdCBhZGRyZXNzIDB4MjAwMAorICovCit0eXBlZGVmIHN0cnVjdCBfUlhETUFfdCB7CQkJCS8vIExvY2F0aW9uOgorCVJYRE1BX0NTUl90IGNzcjsJCQkJLy8gIDB4MjAwMAorCXUzMiBkbWFfd2JfYmFzZV9sbzsJCQkJLy8gIDB4MjAwNAorCXUzMiBkbWFfd2JfYmFzZV9oaTsJCQkJLy8gIDB4MjAwOAorCVJYRE1BX05VTV9QS1RfRE9ORV90IG51bV9wa3RfZG9uZTsJCS8vICAweDIwMEMKKwlSWERNQV9NQVhfUEtUX1RJTUVfdCBtYXhfcGt0X3RpbWU7CQkvLyAgMHgyMDEwCisJRE1BMTBXX3QgcnhxX3JkX2FkZHI7CQkJCS8vICAweDIwMTQKKwlETUExMFdfdCByeHFfcmRfYWRkcl9leHQ7CQkJLy8gIDB4MjAxOAorCURNQTEwV190IHJ4cV93cl9hZGRyOwkJCQkvLyAgMHgyMDFDCisJdTMyIHBzcl9iYXNlX2xvOwkJCQkvLyAgMHgyMDIwCisJdTMyIHBzcl9iYXNlX2hpOwkJCQkvLyAgMHgyMDI0CisJUlhETUFfUFNSX05VTV9ERVNfdCBwc3JfbnVtX2RlczsJCS8vICAweDIwMjgKKwlSWERNQV9QU1JfQVZBSUxfT0ZGU0VUX3QgcHNyX2F2YWlsX29mZnNldDsJLy8gIDB4MjAyQworCVJYRE1BX1BTUl9GVUxMX09GRlNFVF90IHBzcl9mdWxsX29mZnNldDsJLy8gIDB4MjAzMAorCVJYRE1BX1BTUl9BQ0NFU1NfSU5ERVhfdCBwc3JfYWNjZXNzX2luZGV4OwkvLyAgMHgyMDM0CisJUlhETUFfUFNSX01JTl9ERVNfdCBwc3JfbWluX2RlczsJCS8vICAweDIwMzgKKwl1MzIgZmJyMF9iYXNlX2xvOwkJCQkvLyAgMHgyMDNDCisJdTMyIGZicjBfYmFzZV9oaTsJCQkJLy8gIDB4MjA0MAorCVJYRE1BX0ZCUl9OVU1fREVTX3QgZmJyMF9udW1fZGVzOwkJLy8gIDB4MjA0NAorCURNQTEwV190IGZicjBfYXZhaWxfb2Zmc2V0OwkJCS8vICAweDIwNDgKKwlETUExMFdfdCBmYnIwX2Z1bGxfb2Zmc2V0OwkJCS8vICAweDIwNEMKKwlSWERNQV9GQkNfUkRfSU5ERVhfdCBmYnIwX3JkX2luZGV4OwkJLy8gIDB4MjA1MAorCVJYRE1BX0ZCUl9NSU5fREVTX3QgZmJyMF9taW5fZGVzOwkJLy8gIDB4MjA1NAorCXUzMiBmYnIxX2Jhc2VfbG87CQkJCS8vICAweDIwNTgKKwl1MzIgZmJyMV9iYXNlX2hpOwkJCQkvLyAgMHgyMDVDCisJUlhETUFfRkJSX05VTV9ERVNfdCBmYnIxX251bV9kZXM7CQkvLyAgMHgyMDYwCisJRE1BMTBXX3QgZmJyMV9hdmFpbF9vZmZzZXQ7CQkJLy8gIDB4MjA2NAorCURNQTEwV190IGZicjFfZnVsbF9vZmZzZXQ7CQkJLy8gIDB4MjA2OAorCVJYRE1BX0ZCQ19SRF9JTkRFWF90IGZicjFfcmRfaW5kZXg7CQkvLyAgMHgyMDZDCisJUlhETUFfRkJSX01JTl9ERVNfdCBmYnIxX21pbl9kZXM7CQkvLyAgMHgyMDcwCit9IFJYRE1BX3QsICpQUlhETUFfdDsKKworLyogRU5EIE9GIFJYRE1BIFJFR0lTVEVSIEFERFJFU1MgTUFQICovCisKKworLyogU1RBUlQgT0YgVFhNQUMgUkVHSVNURVIgQUREUkVTUyBNQVAgKi8KKworLyoKKyAqIHN0cnVjdHVyZSBmb3IgY29udHJvbCByZWcgaW4gdHhtYWMgYWRkcmVzcyBtYXAKKyAqIGxvY2F0ZWQgYXQgYWRkcmVzcyAweDMwMDAKKyAqLwordHlwZWRlZiB1bmlvbiBfVFhNQUNfQ1RMX3QgeworCXUzMiB2YWx1ZTsKKwlzdHJ1Y3QgeworI2lmZGVmIF9CSVRfRklFTERTX0hUT0wKKwkJdTMyIHVudXNlZDoyNDsJCS8vIGJpdHMgOC0zMQorCQl1MzIgY2tsc2VnX2RpYWJsZToxOwkvLyBiaXQgNworCQl1MzIgY2tiY250X2Rpc2FibGU6MTsJLy8gYml0IDYKKwkJdTMyIGNrc2VnbnVtOjE7CQkvLyBiaXQgNQorCQl1MzIgYXN5bmNfZGlzYWJsZToxOwkvLyBiaXQgNAorCQl1MzIgZmNfZGlzYWJsZToxOwkvLyBiaXQgMworCQl1MzIgbWNpZl9kaXNhYmxlOjE7CS8vIGJpdCAyCisJCXUzMiBtaWZfZGlzYWJsZToxOwkvLyBiaXQgMQorCQl1MzIgdHhtYWNfZW46MTsJCS8vIGJpdCAwCisjZWxzZQorCQl1MzIgdHhtYWNfZW46MTsJCS8vIGJpdCAwCisJCXUzMiBtaWZfZGlzYWJsZToxOwkvLyBiaXQgMSBtYWMgaW50ZXJmYWNlCisJCXUzMiBtY2lmX2Rpc2FibGU6MTsJLy8gYml0IDIgbWVtLiBjb250ci4gaW50ZXJmYWNlCisJCXUzMiBmY19kaXNhYmxlOjE7CS8vIGJpdCAzCisJCXUzMiBhc3luY19kaXNhYmxlOjE7CS8vIGJpdCA0CisJCXUzMiBja3NlZ251bToxOwkJLy8gYml0IDUKKwkJdTMyIGNrYmNudF9kaXNhYmxlOjE7CS8vIGJpdCA2CisJCXUzMiBja2xzZWdfZGlhYmxlOjE7CS8vIGJpdCA3CisJCXUzMiB1bnVzZWQ6MjQ7CQkvLyBiaXRzIDgtMzEKKyNlbmRpZgorCX0gYml0czsKK30gVFhNQUNfQ1RMX3QsICpQVFhNQUNfQ1RMX3Q7CisKKy8qCisgKiBzdHJ1Y3R1cmUgZm9yIHNoYWRvdyBwb2ludGVyIHJlZyBpbiB0eG1hYyBhZGRyZXNzIG1hcAorICogbG9jYXRlZCBhdCBhZGRyZXNzIDB4MzAwNAorICovCit0eXBlZGVmIHVuaW9uIF9UWE1BQ19TSEFET1dfUFRSX3QgeworCXUzMiB2YWx1ZTsKKwlzdHJ1Y3QgeworI2lmZGVmIF9CSVRfRklFTERTX0hUT0wKKwkJdTMyIHJlc2VydmVkMjo1OwkvLyBiaXRzIDI3LTMxCisJCXUzMiB0eHFfcmRfcHRyOjExOwkvLyBiaXRzIDE2LTI2CisJCXUzMiByZXNlcnZlZDo1OwkJLy8gYml0cyAxMS0xNQorCQl1MzIgdHhxX3dyX3B0cjoxMTsJLy8gYml0cyAwLTEwCisjZWxzZQorCQl1MzIgdHhxX3dyX3B0cjoxMTsJLy8gYml0cyAwLTEwCisJCXUzMiByZXNlcnZlZDo1OwkJLy8gYml0cyAxMS0xNQorCQl1MzIgdHhxX3JkX3B0cjoxMTsJLy8gYml0cyAxNi0yNgorCQl1MzIgcmVzZXJ2ZWQyOjU7CS8vIGJpdHMgMjctMzEKKyNlbmRpZgorCX0gYml0czsKK30gVFhNQUNfU0hBRE9XX1BUUl90LCAqUFRYTUFDX1NIQURPV19QVFJfdDsKKworLyoKKyAqIHN0cnVjdHVyZSBmb3IgZXJyb3IgY291bnQgcmVnIGluIHR4bWFjIGFkZHJlc3MgbWFwCisgKiBsb2NhdGVkIGF0IGFkZHJlc3MgMHgzMDA4CisgKi8KK3R5cGVkZWYgdW5pb24gX1RYTUFDX0VSUl9DTlRfdCB7CisJdTMyIHZhbHVlOworCXN0cnVjdCB7CisjaWZkZWYgX0JJVF9GSUVMRFNfSFRPTAorCQl1MzIgdW51c2VkOjIwOwkJLy8gYml0cyAxMi0zMQorCQl1MzIgcmVzZXJ2ZWQ6NDsJCS8vIGJpdHMgOC0xMQorCQl1MzIgdHhxX3VuZGVycnVuOjQ7CS8vIGJpdHMgNC03CisJCXUzMiBmaWZvX3VuZGVycnVuOjQ7CS8vIGJpdHMgMC0zCisjZWxzZQorCQl1MzIgZmlmb191bmRlcnJ1bjo0OwkvLyBiaXRzIDAtMworCQl1MzIgdHhxX3VuZGVycnVuOjQ7CS8vIGJpdHMgNC03CisJCXUzMiByZXNlcnZlZDo0OwkJLy8gYml0cyA4LTExCisJCXUzMiB1bnVzZWQ6MjA7CQkvLyBiaXRzIDEyLTMxCisjZW5kaWYKKwl9IGJpdHM7Cit9IFRYTUFDX0VSUl9DTlRfdCwgKlBUWE1BQ19FUlJfQ05UX3Q7CisKKy8qCisgKiBzdHJ1Y3R1cmUgZm9yIG1heCBmaWxsIHJlZyBpbiB0eG1hYyBhZGRyZXNzIG1hcAorICogbG9jYXRlZCBhdCBhZGRyZXNzIDB4MzAwQworICovCit0eXBlZGVmIHVuaW9uIF9UWE1BQ19NQVhfRklMTF90IHsKKwl1MzIgdmFsdWU7CisJc3RydWN0IHsKKyNpZmRlZiBfQklUX0ZJRUxEU19IVE9MCisJCXUzMiB1bnVzZWQ6MjA7CQkvLyBiaXRzIDEyLTMxCisJCXUzMiBtYXhfZmlsbDoxMjsJLy8gYml0cyAwLTExCisjZWxzZQorCQl1MzIgbWF4X2ZpbGw6MTI7CS8vIGJpdHMgMC0xMQorCQl1MzIgdW51c2VkOjIwOwkJLy8gYml0cyAxMi0zMQorI2VuZGlmCisJfSBiaXRzOworfSBUWE1BQ19NQVhfRklMTF90LCAqUFRYTUFDX01BWF9GSUxMX3Q7CisKKy8qCisgKiBzdHJ1Y3R1cmUgZm9yIGNmIHBhcmFtZXRlciByZWcgaW4gdHhtYWMgYWRkcmVzcyBtYXAKKyAqIGxvY2F0ZWQgYXQgYWRkcmVzcyAweDMwMTAKKyAqLwordHlwZWRlZiB1bmlvbiBfVFhNQUNfQ0ZfUEFSQU1fdCB7CisJdTMyIHZhbHVlOworCXN0cnVjdCB7CisjaWZkZWYgX0JJVF9GSUVMRFNfSFRPTAorCQl1MzIgY2ZlcDoxNjsJLy8gYml0cyAxNi0zMQorCQl1MzIgY2ZwdDoxNjsJLy8gYml0cyAwLTE1CisjZWxzZQorCQl1MzIgY2ZwdDoxNjsJLy8gYml0cyAwLTE1CisJCXUzMiBjZmVwOjE2OwkvLyBiaXRzIDE2LTMxCisjZW5kaWYKKwl9IGJpdHM7Cit9IFRYTUFDX0NGX1BBUkFNX3QsICpQVFhNQUNfQ0ZfUEFSQU1fdDsKKworLyoKKyAqIHN0cnVjdHVyZSBmb3IgdHggdGVzdCByZWcgaW4gdHhtYWMgYWRkcmVzcyBtYXAKKyAqIGxvY2F0ZWQgYXQgYWRkcmVzcyAweDMwMTQKKyAqLwordHlwZWRlZiB1bmlvbiBfVFhNQUNfVFhURVNUX3QgeworCXUzMiB2YWx1ZTsKKwlzdHJ1Y3QgeworI2lmZGVmIF9CSVRfRklFTERTX0hUT0wKKwkJdTMyIHVudXNlZDI6MTU7CQkvLyBiaXRzIDE3LTMxCisJCXUzMiByZXNlcnZlZDE6MTsJLy8gYml0IDE2CisJCXUzMiB0eHRlc3RfZW46MTsJLy8gYml0IDE1CisJCXUzMiB1bnVzZWQxOjQ7CQkvLyBiaXRzIDExLTE0CisJCXUzMiB0eHF0ZXN0X3B0cjoxMTsJLy8gYml0cyAwLTExCisjZWxzZQorCQl1MzIgdHhxdGVzdF9wdHI6MTE7CS8vIGJpdHMgMC0xMAorCQl1MzIgdW51c2VkMTo0OwkJLy8gYml0cyAxMS0xNAorCQl1MzIgdHh0ZXN0X2VuOjE7CS8vIGJpdCAxNQorCQl1MzIgcmVzZXJ2ZWQxOjE7CS8vIGJpdCAxNgorCQl1MzIgdW51c2VkMjoxNTsJCS8vIGJpdHMgMTctMzEKKyNlbmRpZgorCX0gYml0czsKK30gVFhNQUNfVFhURVNUX3QsICpQVFhNQUNfVFhURVNUX3Q7CisKKy8qCisgKiBzdHJ1Y3R1cmUgZm9yIGVycm9yIHJlZyBpbiB0eG1hYyBhZGRyZXNzIG1hcAorICogbG9jYXRlZCBhdCBhZGRyZXNzIDB4MzAxOAorICovCit0eXBlZGVmIHVuaW9uIF9UWE1BQ19FUlJfdCB7CisJdTMyIHZhbHVlOworCXN0cnVjdCB7CisjaWZkZWYgX0JJVF9GSUVMRFNfSFRPTAorCQl1MzIgdW51c2VkMjoyMzsJCS8vIGJpdHMgOS0zMQorCQl1MzIgZmlmb191bmRlcnJ1bjoxOwkvLyBiaXQgOAorCQl1MzIgdW51c2VkMToyOwkJLy8gYml0cyA2LTcKKwkJdTMyIGN0cmwyX2VycjoxOwkvLyBiaXQgNQorCQl1MzIgdHhxX3VuZGVycnVuOjE7CS8vIGJpdCA0CisJCXUzMiBiY250X2VycjoxOwkJLy8gYml0IDMKKwkJdTMyIGxzZWdfZXJyOjE7CQkvLyBiaXQgMgorCQl1MzIgc2VnbnVtX2VycjoxOwkvLyBiaXQgMQorCQl1MzIgc2VnMF9lcnI6MTsJCS8vIGJpdCAwCisjZWxzZQorCQl1MzIgc2VnMF9lcnI6MTsJCS8vIGJpdCAwCisJCXUzMiBzZWdudW1fZXJyOjE7CS8vIGJpdCAxCisJCXUzMiBsc2VnX2VycjoxOwkJLy8gYml0IDIKKwkJdTMyIGJjbnRfZXJyOjE7CQkvLyBiaXQgMworCQl1MzIgdHhxX3VuZGVycnVuOjE7CS8vIGJpdCA0CisJCXUzMiBjdHJsMl9lcnI6MTsJLy8gYml0IDUKKwkJdTMyIHVudXNlZDE6MjsJCS8vIGJpdHMgNi03CisJCXUzMiBmaWZvX3VuZGVycnVuOjE7CS8vIGJpdCA4CisJCXUzMiB1bnVzZWQyOjIzOwkJLy8gYml0cyA5LTMxCisjZW5kaWYKKwl9IGJpdHM7Cit9IFRYTUFDX0VSUl90LCAqUFRYTUFDX0VSUl90OworCisvKgorICogc3RydWN0dXJlIGZvciBlcnJvciBpbnRlcnJ1cHQgcmVnIGluIHR4bWFjIGFkZHJlc3MgbWFwCisgKiBsb2NhdGVkIGF0IGFkZHJlc3MgMHgzMDFDCisgKi8KK3R5cGVkZWYgdW5pb24gX1RYTUFDX0VSUl9JTlRfdCB7CisJdTMyIHZhbHVlOworCXN0cnVjdCB7CisjaWZkZWYgX0JJVF9GSUVMRFNfSFRPTAorCQl1MzIgdW51c2VkMjoyMzsJCS8vIGJpdHMgOS0zMQorCQl1MzIgZmlmb191bmRlcnJ1bjoxOwkvLyBiaXQgOAorCQl1MzIgdW51c2VkMToyOwkJLy8gYml0cyA2LTcKKwkJdTMyIGN0cmwyX2VycjoxOwkvLyBiaXQgNQorCQl1MzIgdHhxX3VuZGVycnVuOjE7CS8vIGJpdCA0CisJCXUzMiBiY250X2VycjoxOwkJLy8gYml0IDMKKwkJdTMyIGxzZWdfZXJyOjE7CQkvLyBiaXQgMgorCQl1MzIgc2VnbnVtX2VycjoxOwkvLyBiaXQgMQorCQl1MzIgc2VnMF9lcnI6MTsJCS8vIGJpdCAwCisjZWxzZQorCQl1MzIgc2VnMF9lcnI6MTsJCS8vIGJpdCAwCisJCXUzMiBzZWdudW1fZXJyOjE7CS8vIGJpdCAxCisJCXUzMiBsc2VnX2VycjoxOwkJLy8gYml0IDIKKwkJdTMyIGJjbnRfZXJyOjE7CQkvLyBiaXQgMworCQl1MzIgdHhxX3VuZGVycnVuOjE7CS8vIGJpdCA0CisJCXUzMiBjdHJsMl9lcnI6MTsJLy8gYml0IDUKKwkJdTMyIHVudXNlZDE6MjsJCS8vIGJpdHMgNi03CisJCXUzMiBmaWZvX3VuZGVycnVuOjE7CS8vIGJpdCA4CisJCXUzMiB1bnVzZWQyOjIzOwkJLy8gYml0cyA5LTMxCisjZW5kaWYKKwl9IGJpdHM7Cit9IFRYTUFDX0VSUl9JTlRfdCwgKlBUWE1BQ19FUlJfSU5UX3Q7CisKKy8qCisgKiBzdHJ1Y3R1cmUgZm9yIGVycm9yIGludGVycnVwdCByZWcgaW4gdHhtYWMgYWRkcmVzcyBtYXAKKyAqIGxvY2F0ZWQgYXQgYWRkcmVzcyAweDMwMjAKKyAqLwordHlwZWRlZiB1bmlvbiBfVFhNQUNfQ1BfQ1RSTF90IHsKKwl1MzIgdmFsdWU7CisJc3RydWN0IHsKKyNpZmRlZiBfQklUX0ZJRUxEU19IVE9MCisJCXUzMiB1bnVzZWQ6MzA7CQkvLyBiaXRzIDItMzEKKwkJdTMyIGJwX3JlcToxOwkJLy8gYml0IDEKKwkJdTMyIGJwX3hvbnhvZmY6MTsJLy8gYml0IDAKKyNlbHNlCisJCXUzMiBicF94b254b2ZmOjE7CS8vIGJpdCAwCisJCXUzMiBicF9yZXE6MTsJCS8vIGJpdCAxCisJCXUzMiB1bnVzZWQ6MzA7CQkvLyBiaXRzIDItMzEKKyNlbmRpZgorCX0gYml0czsKK30gVFhNQUNfQlBfQ1RSTF90LCAqUFRYTUFDX0JQX0NUUkxfdDsKKworLyoKKyAqIFR4IE1BQyBNb2R1bGUgb2YgSkFHQ29yZSBBZGRyZXNzIE1hcHBpbmcKKyAqLwordHlwZWRlZiBzdHJ1Y3QgX1RYTUFDX3QgewkJLy8gTG9jYXRpb246CisJVFhNQUNfQ1RMX3QgY3RsOwkJLy8gIDB4MzAwMAorCVRYTUFDX1NIQURPV19QVFJfdCBzaGFkb3dfcHRyOwkvLyAgMHgzMDA0CisJVFhNQUNfRVJSX0NOVF90IGVycl9jbnQ7CS8vICAweDMwMDgKKwlUWE1BQ19NQVhfRklMTF90IG1heF9maWxsOwkvLyAgMHgzMDBDCisJVFhNQUNfQ0ZfUEFSQU1fdCBjZl9wYXJhbTsJLy8gIDB4MzAxMAorCVRYTUFDX1RYVEVTVF90IHR4X3Rlc3Q7CQkvLyAgMHgzMDE0CisJVFhNQUNfRVJSX3QgZXJyOwkJLy8gIDB4MzAxOAorCVRYTUFDX0VSUl9JTlRfdCBlcnJfaW50OwkvLyAgMHgzMDFDCisJVFhNQUNfQlBfQ1RSTF90IGJwX2N0cmw7CS8vICAweDMwMjAKK30gVFhNQUNfdCwgKlBUWE1BQ190OworCisvKiBFTkQgT0YgVFhNQUMgUkVHSVNURVIgQUREUkVTUyBNQVAgKi8KKworLyogU1RBUlQgT0YgUlhNQUMgUkVHSVNURVIgQUREUkVTUyBNQVAgKi8KKworLyoKKyAqIHN0cnVjdHVyZSBmb3IgcnhtYWMgY29udHJvbCByZWcgaW4gcnhtYWMgYWRkcmVzcyBtYXAKKyAqIGxvY2F0ZWQgYXQgYWRkcmVzcyAweDQwMDAKKyAqLwordHlwZWRlZiB1bmlvbiBfUlhNQUNfQ1RSTF90IHsKKwl1MzIgdmFsdWU7CisJc3RydWN0IHsKKyNpZmRlZiBfQklUX0ZJRUxEU19IVE9MCisJCXUzMiByZXNlcnZlZDoyNTsJCS8vIGJpdHMgNy0zMQorCQl1MzIgcnhtYWNfaW50X2Rpc2FibGU6MTsJLy8gYml0IDYKKwkJdTMyIGFzeW5jX2Rpc2FibGU6MTsJCS8vIGJpdCA1CisJCXUzMiBtaWZfZGlzYWJsZToxOwkJLy8gYml0IDQKKwkJdTMyIHdvbF9kaXNhYmxlOjE7CQkvLyBiaXQgMworCQl1MzIgcGt0X2ZpbHRlcl9kaXNhYmxlOjE7CS8vIGJpdCAyCisJCXUzMiBtY2lmX2Rpc2FibGU6MTsJCS8vIGJpdCAxCisJCXUzMiByeG1hY19lbjoxOwkJCS8vIGJpdCAwCisjZWxzZQorCQl1MzIgcnhtYWNfZW46MTsJCQkvLyBiaXQgMAorCQl1MzIgbWNpZl9kaXNhYmxlOjE7CQkvLyBiaXQgMQorCQl1MzIgcGt0X2ZpbHRlcl9kaXNhYmxlOjE7CS8vIGJpdCAyCisJCXUzMiB3b2xfZGlzYWJsZToxOwkJLy8gYml0IDMKKwkJdTMyIG1pZl9kaXNhYmxlOjE7CQkvLyBiaXQgNAorCQl1MzIgYXN5bmNfZGlzYWJsZToxOwkJLy8gYml0IDUKKwkJdTMyIHJ4bWFjX2ludF9kaXNhYmxlOjE7CS8vIGJpdCA2CisJCXUzMiByZXNlcnZlZDoyNTsJCS8vIGJpdHMgNy0zMQorI2VuZGlmCisJfSBiaXRzOworfSBSWE1BQ19DVFJMX3QsICpQUlhNQUNfQ1RSTF90OworCisvKgorICogc3RydWN0dXJlIGZvciBXYWtlIE9uIExhbiBDb250cm9sIGFuZCBDUkMgMCByZWcgaW4gcnhtYWMgYWRkcmVzcyBtYXAKKyAqIGxvY2F0ZWQgYXQgYWRkcmVzcyAweDQwMDQKKyAqLwordHlwZWRlZiB1bmlvbiBfUlhNQUNfV09MX0NUTF9DUkMwX3QgeworCXUzMiB2YWx1ZTsKKwlzdHJ1Y3QgeworI2lmZGVmIF9CSVRfRklFTERTX0hUT0wKKwkJdTMyIGNyYzA6MTY7CQkvLyBiaXRzIDE2LTMxCisJCXUzMiByZXNlcnZlOjQ7CQkvLyBiaXRzIDEyLTE1CisJCXUzMiBpZ25vcmVfcHA6MTsJLy8gYml0IDExCisJCXUzMiBpZ25vcmVfbXA6MTsJLy8gYml0IDEwCisJCXUzMiBjbHJfaW50cjoxOwkJLy8gYml0IDkKKwkJdTMyIGlnbm9yZV9saW5rX2NoZzoxOwkvLyBiaXQgOAorCQl1MzIgaWdub3JlX3VuaToxOwkvLyBiaXQgNworCQl1MzIgaWdub3JlX211bHRpOjE7CS8vIGJpdCA2CisJCXUzMiBpZ25vcmVfYnJvYWQ6MTsJLy8gYml0IDUKKwkJdTMyIHZhbGlkX2NyYzQ6MTsJLy8gYml0IDQKKwkJdTMyIHZhbGlkX2NyYzM6MTsJLy8gYml0IDMKKwkJdTMyIHZhbGlkX2NyYzI6MTsJLy8gYml0IDIKKwkJdTMyIHZhbGlkX2NyYzE6MTsJLy8gYml0IDEKKwkJdTMyIHZhbGlkX2NyYzA6MTsJLy8gYml0IDAKKyNlbHNlCisJCXUzMiB2YWxpZF9jcmMwOjE7CS8vIGJpdCAwCisJCXUzMiB2YWxpZF9jcmMxOjE7CS8vIGJpdCAxCisJCXUzMiB2YWxpZF9jcmMyOjE7CS8vIGJpdCAyCisJCXUzMiB2YWxpZF9jcmMzOjE7CS8vIGJpdCAzCisJCXUzMiB2YWxpZF9jcmM0OjE7CS8vIGJpdCA0CisJCXUzMiBpZ25vcmVfYnJvYWQ6MTsJLy8gYml0IDUKKwkJdTMyIGlnbm9yZV9tdWx0aToxOwkvLyBiaXQgNgorCQl1MzIgaWdub3JlX3VuaToxOwkvLyBiaXQgNworCQl1MzIgaWdub3JlX2xpbmtfY2hnOjE7CS8vIGJpdCA4CisJCXUzMiBjbHJfaW50cjoxOwkJLy8gYml0IDkKKwkJdTMyIGlnbm9yZV9tcDoxOwkvLyBiaXQgMTAKKwkJdTMyIGlnbm9yZV9wcDoxOwkvLyBiaXQgMTEKKwkJdTMyIHJlc2VydmU6NDsJCS8vIGJpdHMgMTItMTUKKwkJdTMyIGNyYzA6MTY7CQkvLyBiaXRzIDE2LTMxCisjZW5kaWYKKwl9IGJpdHM7Cit9IFJYTUFDX1dPTF9DVExfQ1JDMF90LCAqUFJYTUFDX1dPTF9DVExfQ1JDMF90OworCisvKgorICogc3RydWN0dXJlIGZvciBDUkMgMSBhbmQgQ1JDIDIgcmVnIGluIHJ4bWFjIGFkZHJlc3MgbWFwCisgKiBsb2NhdGVkIGF0IGFkZHJlc3MgMHg0MDA4CisgKi8KK3R5cGVkZWYgdW5pb24gX1JYTUFDX1dPTF9DUkMxMl90IHsKKwl1MzIgdmFsdWU7CisJc3RydWN0IHsKKyNpZmRlZiBfQklUX0ZJRUxEU19IVE9MCisJCXUzMiBjcmMyOjE2OwkvLyBiaXRzIDE2LTMxCisJCXUzMiBjcmMxOjE2OwkvLyBiaXRzIDAtMTUKKyNlbHNlCisJCXUzMiBjcmMxOjE2OwkvLyBiaXRzIDAtMTUKKwkJdTMyIGNyYzI6MTY7CS8vIGJpdHMgMTYtMzEKKyNlbmRpZgorCX0gYml0czsKK30gUlhNQUNfV09MX0NSQzEyX3QsICpQUlhNQUNfV09MX0NSQzEyX3Q7CisKKy8qCisgKiBzdHJ1Y3R1cmUgZm9yIENSQyAzIGFuZCBDUkMgNCByZWcgaW4gcnhtYWMgYWRkcmVzcyBtYXAKKyAqIGxvY2F0ZWQgYXQgYWRkcmVzcyAweDQwMEMKKyAqLwordHlwZWRlZiB1bmlvbiBfUlhNQUNfV09MX0NSQzM0X3QgeworCXUzMiB2YWx1ZTsKKwlzdHJ1Y3QgeworI2lmZGVmIF9CSVRfRklFTERTX0hUT0wKKwkJdTMyIGNyYzQ6MTY7CS8vIGJpdHMgMTYtMzEKKwkJdTMyIGNyYzM6MTY7CS8vIGJpdHMgMC0xNQorI2Vsc2UKKwkJdTMyIGNyYzM6MTY7CS8vIGJpdHMgMC0xNQorCQl1MzIgY3JjNDoxNjsJLy8gYml0cyAxNi0zMQorI2VuZGlmCisJfSBiaXRzOworfSBSWE1BQ19XT0xfQ1JDMzRfdCwgKlBSWE1BQ19XT0xfQ1JDMzRfdDsKKworLyoKKyAqIHN0cnVjdHVyZSBmb3IgV2FrZSBPbiBMYW4gU291cmNlIEFkZHJlc3MgTG8gcmVnIGluIHJ4bWFjIGFkZHJlc3MgbWFwCisgKiBsb2NhdGVkIGF0IGFkZHJlc3MgMHg0MDEwCisgKi8KK3R5cGVkZWYgdW5pb24gX1JYTUFDX1dPTF9TQV9MT190IHsKKwl1MzIgdmFsdWU7CisJc3RydWN0IHsKKyNpZmRlZiBfQklUX0ZJRUxEU19IVE9MCisJCXUzMiBzYTM6ODsJLy8gYml0cyAyNC0zMQorCQl1MzIgc2E0Ojg7CS8vIGJpdHMgMTYtMjMKKwkJdTMyIHNhNTo4OwkvLyBiaXRzIDgtMTUKKwkJdTMyIHNhNjo4OwkvLyBiaXRzIDAtNworI2Vsc2UKKwkJdTMyIHNhNjo4OwkvLyBiaXRzIDAtNworCQl1MzIgc2E1Ojg7CS8vIGJpdHMgOC0xNQorCQl1MzIgc2E0Ojg7CS8vIGJpdHMgMTYtMjMKKwkJdTMyIHNhMzo4OwkvLyBiaXRzIDI0LTMxCisjZW5kaWYKKwl9IGJpdHM7Cit9IFJYTUFDX1dPTF9TQV9MT190LCAqUFJYTUFDX1dPTF9TQV9MT190OworCisvKgorICogc3RydWN0dXJlIGZvciBXYWtlIE9uIExhbiBTb3VyY2UgQWRkcmVzcyBIaSByZWcgaW4gcnhtYWMgYWRkcmVzcyBtYXAKKyAqIGxvY2F0ZWQgYXQgYWRkcmVzcyAweDQwMTQKKyAqLwordHlwZWRlZiB1bmlvbiBfUlhNQUNfV09MX1NBX0hJX3QgeworCXUzMiB2YWx1ZTsKKwlzdHJ1Y3QgeworI2lmZGVmIF9CSVRfRklFTERTX0hUT0wKKwkJdTMyIHJlc2VydmVkOjE2OwkvLyBiaXRzIDE2LTMxCisJCXUzMiBzYTE6ODsJCS8vIGJpdHMgOC0xNQorCQl1MzIgc2EyOjg7CQkvLyBiaXRzIDAtNworI2Vsc2UKKwkJdTMyIHNhMjo4OwkJLy8gYml0cyAwLTcKKwkJdTMyIHNhMTo4OwkJLy8gYml0cyA4LTE1CisJCXUzMiByZXNlcnZlZDoxNjsJLy8gYml0cyAxNi0zMQorI2VuZGlmCisJfSBiaXRzOworfSBSWE1BQ19XT0xfU0FfSElfdCwgKlBSWE1BQ19XT0xfU0FfSElfdDsKKworLyoKKyAqIHN0cnVjdHVyZSBmb3IgV2FrZSBPbiBMYW4gbWFzayByZWcgaW4gcnhtYWMgYWRkcmVzcyBtYXAKKyAqIGxvY2F0ZWQgYXQgYWRkcmVzcyAweDQwMTggLSAweDQwNjQKKyAqIERlZmluZWQgZWFybGllciAodTMyKQorICovCisKKy8qCisgKiBzdHJ1Y3R1cmUgZm9yIFVuaWNhc3QgUGFrZXQgRmlsdGVyIEFkZHJlc3MgMSByZWcgaW4gcnhtYWMgYWRkcmVzcyBtYXAKKyAqIGxvY2F0ZWQgYXQgYWRkcmVzcyAweDQwNjgKKyAqLwordHlwZWRlZiB1bmlvbiBfUlhNQUNfVU5JX1BGX0FERFIxX3QgeworCXUzMiB2YWx1ZTsKKwlzdHJ1Y3QgeworI2lmZGVmIF9CSVRfRklFTERTX0hUT0wKKwkJdTMyIGFkZHIxXzM6ODsJLy8gYml0cyAyNC0zMQorCQl1MzIgYWRkcjFfNDo4OwkvLyBiaXRzIDE2LTIzCisJCXUzMiBhZGRyMV81Ojg7CS8vIGJpdHMgOC0xNQorCQl1MzIgYWRkcjFfNjo4OwkvLyBiaXRzIDAtNworI2Vsc2UKKwkJdTMyIGFkZHIxXzY6ODsJLy8gYml0cyAwLTcKKwkJdTMyIGFkZHIxXzU6ODsJLy8gYml0cyA4LTE1CisJCXUzMiBhZGRyMV80Ojg7CS8vIGJpdHMgMTYtMjMKKwkJdTMyIGFkZHIxXzM6ODsJLy8gYml0cyAyNC0zMQorI2VuZGlmCisJfSBiaXRzOworfSBSWE1BQ19VTklfUEZfQUREUjFfdCwgKlBSWE1BQ19VTklfUEZfQUREUjFfdDsKKworLyoKKyAqIHN0cnVjdHVyZSBmb3IgVW5pY2FzdCBQYWtldCBGaWx0ZXIgQWRkcmVzcyAyIHJlZyBpbiByeG1hYyBhZGRyZXNzIG1hcAorICogbG9jYXRlZCBhdCBhZGRyZXNzIDB4NDA2QworICovCit0eXBlZGVmIHVuaW9uIF9SWE1BQ19VTklfUEZfQUREUjJfdCB7CisJdTMyIHZhbHVlOworCXN0cnVjdCB7CisjaWZkZWYgX0JJVF9GSUVMRFNfSFRPTAorCQl1MzIgYWRkcjJfMzo4OwkvLyBiaXRzIDI0LTMxCisJCXUzMiBhZGRyMl80Ojg7CS8vIGJpdHMgMTYtMjMKKwkJdTMyIGFkZHIyXzU6ODsJLy8gYml0cyA4LTE1CisJCXUzMiBhZGRyMl82Ojg7CS8vIGJpdHMgMC03CisjZWxzZQorCQl1MzIgYWRkcjJfNjo4OwkvLyBiaXRzIDAtNworCQl1MzIgYWRkcjJfNTo4OwkvLyBiaXRzIDgtMTUKKwkJdTMyIGFkZHIyXzQ6ODsJLy8gYml0cyAxNi0yMworCQl1MzIgYWRkcjJfMzo4OwkvLyBiaXRzIDI0LTMxCisjZW5kaWYKKwl9IGJpdHM7Cit9IFJYTUFDX1VOSV9QRl9BRERSMl90LCAqUFJYTUFDX1VOSV9QRl9BRERSMl90OworCisvKgorICogc3RydWN0dXJlIGZvciBVbmljYXN0IFBha2V0IEZpbHRlciBBZGRyZXNzIDEgJiAyIHJlZyBpbiByeG1hYyBhZGRyZXNzIG1hcAorICogbG9jYXRlZCBhdCBhZGRyZXNzIDB4NDA3MAorICovCit0eXBlZGVmIHVuaW9uIF9SWE1BQ19VTklfUEZfQUREUjNfdCB7CisJdTMyIHZhbHVlOworCXN0cnVjdCB7CisjaWZkZWYgX0JJVF9GSUVMRFNfSFRPTAorCQl1MzIgYWRkcjJfMTo4OwkvLyBiaXRzIDI0LTMxCisJCXUzMiBhZGRyMl8yOjg7CS8vIGJpdHMgMTYtMjMKKwkJdTMyIGFkZHIxXzE6ODsJLy8gYml0cyA4LTE1CisJCXUzMiBhZGRyMV8yOjg7CS8vIGJpdHMgMC03CisjZWxzZQorCQl1MzIgYWRkcjFfMjo4OwkvLyBiaXRzIDAtNworCQl1MzIgYWRkcjFfMTo4OwkvLyBiaXRzIDgtMTUKKwkJdTMyIGFkZHIyXzI6ODsJLy8gYml0cyAxNi0yMworCQl1MzIgYWRkcjJfMTo4OwkvLyBiaXRzIDI0LTMxCisjZW5kaWYKKwl9IGJpdHM7Cit9IFJYTUFDX1VOSV9QRl9BRERSM190LCAqUFJYTUFDX1VOSV9QRl9BRERSM190OworCisvKgorICogc3RydWN0dXJlIGZvciBNdWx0aWNhc3QgSGFzaCByZWcgaW4gcnhtYWMgYWRkcmVzcyBtYXAKKyAqIGxvY2F0ZWQgYXQgYWRkcmVzcyAweDQwNzQgLSAweDQwODAKKyAqIERlZmluZWQgZWFybGllciAodTMyKQorICovCisKKy8qCisgKiBzdHJ1Y3R1cmUgZm9yIFBhY2tldCBGaWx0ZXIgQ29udHJvbCByZWcgaW4gcnhtYWMgYWRkcmVzcyBtYXAKKyAqIGxvY2F0ZWQgYXQgYWRkcmVzcyAweDQwODQKKyAqLwordHlwZWRlZiB1bmlvbiBfUlhNQUNfUEZfQ1RSTF90IHsKKwl1MzIgdmFsdWU7CisJc3RydWN0IHsKKyNpZmRlZiBfQklUX0ZJRUxEU19IVE9MCisJCXUzMiB1bnVzZWQyOjk7CQkvLyBiaXRzIDIzLTMxCisJCXUzMiBtaW5fcGt0X3NpemU6NzsJLy8gYml0cyAxNi0yMgorCQl1MzIgdW51c2VkMToxMjsJCS8vIGJpdHMgNC0xNQorCQl1MzIgZmlsdGVyX2ZyYWdfZW46MTsJLy8gYml0IDMKKwkJdTMyIGZpbHRlcl91bmlfZW46MTsJLy8gYml0IDIKKwkJdTMyIGZpbHRlcl9tdWx0aV9lbjoxOwkvLyBiaXQgMQorCQl1MzIgZmlsdGVyX2Jyb2FkX2VuOjE7CS8vIGJpdCAwCisjZWxzZQorCQl1MzIgZmlsdGVyX2Jyb2FkX2VuOjE7CS8vIGJpdCAwCisJCXUzMiBmaWx0ZXJfbXVsdGlfZW46MTsJLy8gYml0IDEKKwkJdTMyIGZpbHRlcl91bmlfZW46MTsJLy8gYml0IDIKKwkJdTMyIGZpbHRlcl9mcmFnX2VuOjE7CS8vIGJpdCAzCisJCXUzMiB1bnVzZWQxOjEyOwkJLy8gYml0cyA0LTE1CisJCXUzMiBtaW5fcGt0X3NpemU6NzsJLy8gYml0cyAxNi0yMgorCQl1MzIgdW51c2VkMjo5OwkJLy8gYml0cyAyMy0zMQorI2VuZGlmCisJfSBiaXRzOworfSBSWE1BQ19QRl9DVFJMX3QsICpQUlhNQUNfUEZfQ1RSTF90OworCisvKgorICogc3RydWN0dXJlIGZvciBNZW1vcnkgQ29udHJvbGxlciBJbnRlcmZhY2UgQ29udHJvbCBNYXggU2VnbWVudCByZWcgaW4gcnhtYWMKKyAqIGFkZHJlc3MgbWFwLiAgTG9jYXRlZCBhdCBhZGRyZXNzIDB4NDA4OAorICovCit0eXBlZGVmIHVuaW9uIF9SWE1BQ19NQ0lGX0NUUkxfTUFYX1NFR190IHsKKwl1MzIgdmFsdWU7CisJc3RydWN0IHsKKyNpZmRlZiBfQklUX0ZJRUxEU19IVE9MCisJCXUzMiByZXNlcnZlZDoyMjsJLy8gYml0cyAxMC0zMQorCQl1MzIgbWF4X3NpemU6ODsJLy8gYml0cyAyLTkKKwkJdTMyIGZjX2VuOjE7CS8vIGJpdCAxCisJCXUzMiBzZWdfZW46MTsJLy8gYml0IDAKKyNlbHNlCisJCXUzMiBzZWdfZW46MTsJLy8gYml0IDAKKwkJdTMyIGZjX2VuOjE7CS8vIGJpdCAxCisJCXUzMiBtYXhfc2l6ZTo4OwkvLyBiaXRzIDItOQorCQl1MzIgcmVzZXJ2ZWQ6MjI7CS8vIGJpdHMgMTAtMzEKKyNlbmRpZgorCX0gYml0czsKK30gUlhNQUNfTUNJRl9DVFJMX01BWF9TRUdfdCwgKlBSWE1BQ19NQ0lGX0NUUkxfTUFYX1NFR190OworCisvKgorICogc3RydWN0dXJlIGZvciBNZW1vcnkgQ29udHJvbGxlciBJbnRlcmZhY2UgV2F0ZXIgTWFyayByZWcgaW4gcnhtYWMgYWRkcmVzcworICogbWFwLiAgTG9jYXRlZCBhdCBhZGRyZXNzIDB4NDA4QworICovCit0eXBlZGVmIHVuaW9uIF9SWE1BQ19NQ0lGX1dBVEVSX01BUktfdCB7CisJdTMyIHZhbHVlOworCXN0cnVjdCB7CisjaWZkZWYgX0JJVF9GSUVMRFNfSFRPTAorCQl1MzIgcmVzZXJ2ZWQyOjY7CS8vIGJpdHMgMjYtMzEKKwkJdTMyIG1hcmtfaGk6MTA7CS8vIGJpdHMgMTYtMjUKKwkJdTMyIHJlc2VydmVkMTo2OwkvLyBiaXRzIDEwLTE1CisJCXUzMiBtYXJrX2xvOjEwOwkvLyBiaXRzIDAtOQorI2Vsc2UKKwkJdTMyIG1hcmtfbG86MTA7CS8vIGJpdHMgMC05CisJCXUzMiByZXNlcnZlZDE6NjsJLy8gYml0cyAxMC0xNQorCQl1MzIgbWFya19oaToxMDsJLy8gYml0cyAxNi0yNQorCQl1MzIgcmVzZXJ2ZWQyOjY7CS8vIGJpdHMgMjYtMzEKKyNlbmRpZgorCX0gYml0czsKK30gUlhNQUNfTUNJRl9XQVRFUl9NQVJLX3QsICpQUlhNQUNfTUNJRl9XQVRFUl9NQVJLX3Q7CisKKy8qCisgKiBzdHJ1Y3R1cmUgZm9yIFJ4IFF1ZXVlIERpYWxvZyByZWcgaW4gcnhtYWMgYWRkcmVzcyBtYXAuCisgKiBsb2NhdGVkIGF0IGFkZHJlc3MgMHg0MDkwCisgKi8KK3R5cGVkZWYgdW5pb24gX1JYTUFDX1JYUV9ESUFHX3QgeworCXUzMiB2YWx1ZTsKKwlzdHJ1Y3QgeworI2lmZGVmIF9CSVRfRklFTERTX0hUT0wKKwkJdTMyIHJlc2VydmVkMjo2OwkvLyBiaXRzIDI2LTMxCisJCXUzMiByZF9wdHI6MTA7CS8vIGJpdHMgMTYtMjUKKwkJdTMyIHJlc2VydmVkMTo2OwkvLyBiaXRzIDEwLTE1CisJCXUzMiB3cl9wdHI6MTA7CS8vIGJpdHMgMC05CisjZWxzZQorCQl1MzIgd3JfcHRyOjEwOwkvLyBiaXRzIDAtOQorCQl1MzIgcmVzZXJ2ZWQxOjY7CS8vIGJpdHMgMTAtMTUKKwkJdTMyIHJkX3B0cjoxMDsJLy8gYml0cyAxNi0yNQorCQl1MzIgcmVzZXJ2ZWQyOjY7CS8vIGJpdHMgMjYtMzEKKyNlbmRpZgorCX0gYml0czsKK30gUlhNQUNfUlhRX0RJQUdfdCwgKlBSWE1BQ19SWFFfRElBR190OworCisvKgorICogc3RydWN0dXJlIGZvciBzcGFjZSBhdmFpbGlhYmxlIHJlZyBpbiByeG1hYyBhZGRyZXNzIG1hcC4KKyAqIGxvY2F0ZWQgYXQgYWRkcmVzcyAweDQwOTQKKyAqLwordHlwZWRlZiB1bmlvbiBfUlhNQUNfU1BBQ0VfQVZBSUxfdCB7CisJdTMyIHZhbHVlOworCXN0cnVjdCB7CisjaWZkZWYgX0JJVF9GSUVMRFNfSFRPTAorCQl1MzIgcmVzZXJ2ZWQyOjE1OwkJLy8gYml0cyAxNy0zMQorCQl1MzIgc3BhY2VfYXZhaWxfZW46MTsJLy8gYml0IDE2CisJCXUzMiByZXNlcnZlZDE6NjsJCS8vIGJpdHMgMTAtMTUKKwkJdTMyIHNwYWNlX2F2YWlsOjEwOwkvLyBiaXRzIDAtOQorI2Vsc2UKKwkJdTMyIHNwYWNlX2F2YWlsOjEwOwkvLyBiaXRzIDAtOQorCQl1MzIgcmVzZXJ2ZWQxOjY7CQkvLyBiaXRzIDEwLTE1CisJCXUzMiBzcGFjZV9hdmFpbF9lbjoxOwkvLyBiaXQgMTYKKwkJdTMyIHJlc2VydmVkMjoxNTsJCS8vIGJpdHMgMTctMzEKKyNlbmRpZgorCX0gYml0czsKK30gUlhNQUNfU1BBQ0VfQVZBSUxfdCwgKlBSWE1BQ19TUEFDRV9BVkFJTF90OworCisvKgorICogc3RydWN0dXJlIGZvciBtYW5hZ2VtZW50IGludGVyZmFjZSByZWcgaW4gcnhtYWMgYWRkcmVzcyBtYXAuCisgKiBsb2NhdGVkIGF0IGFkZHJlc3MgMHg0MDk4CisgKi8KK3R5cGVkZWYgdW5pb24gX1JYTUFDX01JRl9DVExfdCB7CisJdTMyIHZhbHVlOworCXN0cnVjdCB7CisjaWZkZWYgX0JJVF9GSUVMRFNfSFRPTAorCQl1MzIgcmVzZXJ2ZToxNDsJCS8vIGJpdHMgMTgtMzEKKwkJdTMyIGRyb3BfcGt0X2VuOjE7CQkvLyBiaXQgMTcKKwkJdTMyIGRyb3BfcGt0X21hc2s6MTc7CS8vIGJpdHMgMC0xNgorI2Vsc2UKKwkJdTMyIGRyb3BfcGt0X21hc2s6MTc7CS8vIGJpdHMgMC0xNgorCQl1MzIgZHJvcF9wa3RfZW46MTsJCS8vIGJpdCAxNworCQl1MzIgcmVzZXJ2ZToxNDsJCS8vIGJpdHMgMTgtMzEKKyNlbmRpZgorCX0gYml0czsKK30gUlhNQUNfTUlGX0NUTF90LCAqUFJYTUFDX01JRl9DVExfdDsKKworLyoKKyAqIHN0cnVjdHVyZSBmb3IgRXJyb3IgcmVnIGluIHJ4bWFjIGFkZHJlc3MgbWFwLgorICogbG9jYXRlZCBhdCBhZGRyZXNzIDB4NDA5QworICovCit0eXBlZGVmIHVuaW9uIF9SWE1BQ19FUlJPUl9SRUdfdCB7CisJdTMyIHZhbHVlOworCXN0cnVjdCB7CisjaWZkZWYgX0JJVF9GSUVMRFNfSFRPTAorCQl1MzIgcmVzZXJ2ZToyODsJLy8gYml0cyA0LTMxCisJCXUzMiBtaWY6MTsJCS8vIGJpdCAzCisJCXUzMiBhc3luYzoxOwkvLyBiaXQgMgorCQl1MzIgcGt0X2ZpbHRlcjoxOwkvLyBiaXQgMQorCQl1MzIgbWNpZjoxOwkvLyBiaXQgMAorI2Vsc2UKKwkJdTMyIG1jaWY6MTsJLy8gYml0IDAKKwkJdTMyIHBrdF9maWx0ZXI6MTsJLy8gYml0IDEKKwkJdTMyIGFzeW5jOjE7CS8vIGJpdCAyCisJCXUzMiBtaWY6MTsJCS8vIGJpdCAzCisJCXUzMiByZXNlcnZlOjI4OwkvLyBiaXRzIDQtMzEKKyNlbmRpZgorCX0gYml0czsKK30gUlhNQUNfRVJST1JfUkVHX3QsICpQUlhNQUNfRVJST1JfUkVHX3Q7CisKKy8qCisgKiBSeCBNQUMgTW9kdWxlIG9mIEpBR0NvcmUgQWRkcmVzcyBNYXBwaW5nCisgKi8KK3R5cGVkZWYgc3RydWN0IF9SWE1BQ190IHsJCQkJLy8gTG9jYXRpb246CisJUlhNQUNfQ1RSTF90IGN0cmw7CQkJCS8vICAweDQwMDAKKwlSWE1BQ19XT0xfQ1RMX0NSQzBfdCBjcmMwOwkJCS8vICAweDQwMDQKKwlSWE1BQ19XT0xfQ1JDMTJfdCBjcmMxMjsJCQkvLyAgMHg0MDA4CisJUlhNQUNfV09MX0NSQzM0X3QgY3JjMzQ7CQkJLy8gIDB4NDAwQworCVJYTUFDX1dPTF9TQV9MT190IHNhX2xvOwkJCS8vICAweDQwMTAKKwlSWE1BQ19XT0xfU0FfSElfdCBzYV9oaTsJCQkvLyAgMHg0MDE0CisJdTMyIG1hc2swX3dvcmQwOwkJCQkvLyAgMHg0MDE4CisJdTMyIG1hc2swX3dvcmQxOwkJCQkvLyAgMHg0MDFDCisJdTMyIG1hc2swX3dvcmQyOwkJCQkvLyAgMHg0MDIwCisJdTMyIG1hc2swX3dvcmQzOwkJCQkvLyAgMHg0MDI0CisJdTMyIG1hc2sxX3dvcmQwOwkJCQkvLyAgMHg0MDI4CisJdTMyIG1hc2sxX3dvcmQxOwkJCQkvLyAgMHg0MDJDCisJdTMyIG1hc2sxX3dvcmQyOwkJCQkvLyAgMHg0MDMwCisJdTMyIG1hc2sxX3dvcmQzOwkJCQkvLyAgMHg0MDM0CisJdTMyIG1hc2syX3dvcmQwOwkJCQkvLyAgMHg0MDM4CisJdTMyIG1hc2syX3dvcmQxOwkJCQkvLyAgMHg0MDNDCisJdTMyIG1hc2syX3dvcmQyOwkJCQkvLyAgMHg0MDQwCisJdTMyIG1hc2syX3dvcmQzOwkJCQkvLyAgMHg0MDQ0CisJdTMyIG1hc2szX3dvcmQwOwkJCQkvLyAgMHg0MDQ4CisJdTMyIG1hc2szX3dvcmQxOwkJCQkvLyAgMHg0MDRDCisJdTMyIG1hc2szX3dvcmQyOwkJCQkvLyAgMHg0MDUwCisJdTMyIG1hc2szX3dvcmQzOwkJCQkvLyAgMHg0MDU0CisJdTMyIG1hc2s0X3dvcmQwOwkJCQkvLyAgMHg0MDU4CisJdTMyIG1hc2s0X3dvcmQxOwkJCQkvLyAgMHg0MDVDCisJdTMyIG1hc2s0X3dvcmQyOwkJCQkvLyAgMHg0MDYwCisJdTMyIG1hc2s0X3dvcmQzOwkJCQkvLyAgMHg0MDY0CisJUlhNQUNfVU5JX1BGX0FERFIxX3QgdW5pX3BmX2FkZHIxOwkJLy8gIDB4NDA2OAorCVJYTUFDX1VOSV9QRl9BRERSMl90IHVuaV9wZl9hZGRyMjsJCS8vICAweDQwNkMKKwlSWE1BQ19VTklfUEZfQUREUjNfdCB1bmlfcGZfYWRkcjM7CQkvLyAgMHg0MDcwCisJdTMyIG11bHRpX2hhc2gxOwkJCQkvLyAgMHg0MDc0CisJdTMyIG11bHRpX2hhc2gyOwkJCQkvLyAgMHg0MDc4CisJdTMyIG11bHRpX2hhc2gzOwkJCQkvLyAgMHg0MDdDCisJdTMyIG11bHRpX2hhc2g0OwkJCQkvLyAgMHg0MDgwCisJUlhNQUNfUEZfQ1RSTF90IHBmX2N0cmw7CQkJLy8gIDB4NDA4NAorCVJYTUFDX01DSUZfQ1RSTF9NQVhfU0VHX3QgbWNpZl9jdHJsX21heF9zZWc7CS8vICAweDQwODgKKwlSWE1BQ19NQ0lGX1dBVEVSX01BUktfdCBtY2lmX3dhdGVyX21hcms7CS8vICAweDQwOEMKKwlSWE1BQ19SWFFfRElBR190IHJ4cV9kaWFnOwkJCS8vICAweDQwOTAKKwlSWE1BQ19TUEFDRV9BVkFJTF90IHNwYWNlX2F2YWlsOwkJLy8gIDB4NDA5NAorCisJUlhNQUNfTUlGX0NUTF90IG1pZl9jdHJsOwkJCS8vICAweDQwOTgKKwlSWE1BQ19FUlJPUl9SRUdfdCBlcnJfcmVnOwkJCS8vICAweDQwOUMKK30gUlhNQUNfdCwgKlBSWE1BQ190OworCisvKiBFTkQgT0YgVFhNQUMgUkVHSVNURVIgQUREUkVTUyBNQVAgKi8KKworCisvKiBTVEFSVCBPRiBNQUMgUkVHSVNURVIgQUREUkVTUyBNQVAgKi8KKworLyoKKyAqIHN0cnVjdHVyZSBmb3IgY29uZmlndXJhdGlvbiAjMSByZWcgaW4gbWFjIGFkZHJlc3MgbWFwLgorICogbG9jYXRlZCBhdCBhZGRyZXNzIDB4NTAwMAorICovCit0eXBlZGVmIHVuaW9uIF9NQUNfQ0ZHMV90IHsKKwl1MzIgdmFsdWU7CisJc3RydWN0IHsKKyNpZmRlZiBfQklUX0ZJRUxEU19IVE9MCisJCXUzMiBzb2Z0X3Jlc2V0OjE7CQkvLyBiaXQgMzEKKwkJdTMyIHNpbV9yZXNldDoxOwkJLy8gYml0IDMwCisJCXUzMiByZXNlcnZlZDM6MTA7CQkvLyBiaXRzIDIwLTI5CisJCXUzMiByZXNldF9yeF9tYzoxOwkJLy8gYml0IDE5CisJCXUzMiByZXNldF90eF9tYzoxOwkJLy8gYml0IDE4CisJCXUzMiByZXNldF9yeF9mdW46MTsJLy8gYml0IDE3CisJCXUzMiByZXNldF90eF9mdW46MTsJLy8gYml0IDE2CisJCXUzMiByZXNlcnZlZDI6NzsJCS8vIGJpdHMgOS0xNQorCQl1MzIgbG9vcF9iYWNrOjE7CQkvLyBiaXQgOAorCQl1MzIgcmVzZXJ2ZWQxOjI7CQkvLyBiaXRzIDYtNworCQl1MzIgcnhfZmxvdzoxOwkJLy8gYml0IDUKKwkJdTMyIHR4X2Zsb3c6MTsJCS8vIGJpdCA0CisJCXUzMiBzeW5jZF9yeF9lbjoxOwkJLy8gYml0IDMKKwkJdTMyIHJ4X2VuYWJsZToxOwkJLy8gYml0IDIKKwkJdTMyIHN5bmNkX3R4X2VuOjE7CQkvLyBiaXQgMQorCQl1MzIgdHhfZW5hYmxlOjE7CQkvLyBiaXQgMAorI2Vsc2UKKwkJdTMyIHR4X2VuYWJsZToxOwkJLy8gYml0IDAKKwkJdTMyIHN5bmNkX3R4X2VuOjE7CQkvLyBiaXQgMQorCQl1MzIgcnhfZW5hYmxlOjE7CQkvLyBiaXQgMgorCQl1MzIgc3luY2RfcnhfZW46MTsJCS8vIGJpdCAzCisJCXUzMiB0eF9mbG93OjE7CQkvLyBiaXQgNAorCQl1MzIgcnhfZmxvdzoxOwkJLy8gYml0IDUKKwkJdTMyIHJlc2VydmVkMToyOwkJLy8gYml0cyA2LTcKKwkJdTMyIGxvb3BfYmFjazoxOwkJLy8gYml0IDgKKwkJdTMyIHJlc2VydmVkMjo3OwkJLy8gYml0cyA5LTE1CisJCXUzMiByZXNldF90eF9mdW46MTsJLy8gYml0IDE2CisJCXUzMiByZXNldF9yeF9mdW46MTsJLy8gYml0IDE3CisJCXUzMiByZXNldF90eF9tYzoxOwkJLy8gYml0IDE4CisJCXUzMiByZXNldF9yeF9tYzoxOwkJLy8gYml0IDE5CisJCXUzMiByZXNlcnZlZDM6MTA7CQkvLyBiaXRzIDIwLTI5CisJCXUzMiBzaW1fcmVzZXQ6MTsJCS8vIGJpdCAzMAorCQl1MzIgc29mdF9yZXNldDoxOwkJLy8gYml0IDMxCisjZW5kaWYKKwl9IGJpdHM7Cit9IE1BQ19DRkcxX3QsICpQTUFDX0NGRzFfdDsKKworLyoKKyAqIHN0cnVjdHVyZSBmb3IgY29uZmlndXJhdGlvbiAjMiByZWcgaW4gbWFjIGFkZHJlc3MgbWFwLgorICogbG9jYXRlZCBhdCBhZGRyZXNzIDB4NTAwNAorICovCit0eXBlZGVmIHVuaW9uIF9NQUNfQ0ZHMl90IHsKKwl1MzIgdmFsdWU7CisJc3RydWN0IHsKKyNpZmRlZiBfQklUX0ZJRUxEU19IVE9MCisJCXUzMiByZXNlcnZlZDM6MTY7CQkvLyBiaXRzIDE2LTMxCisJCXUzMiBwcmVhbWJsZV9sZW46NDsJLy8gYml0cyAxMi0xNQorCQl1MzIgcmVzZXJ2ZWQyOjI7CQkvLyBiaXRzIDEwLTExCisJCXUzMiBpZl9tb2RlOjI7CQkvLyBiaXRzIDgtOQorCQl1MzIgcmVzZXJ2ZWQxOjI7CQkvLyBiaXRzIDYtNworCQl1MzIgaHVnZV9mcmFtZToxOwkJLy8gYml0IDUKKwkJdTMyIGxlbl9jaGVjazoxOwkJLy8gYml0IDQKKwkJdTMyIHVuZGVmaW5lZDoxOwkJLy8gYml0IDMKKwkJdTMyIHBhZF9jcmM6MTsJCS8vIGJpdCAyCisJCXUzMiBjcmNfZW5hYmxlOjE7CQkvLyBiaXQgMQorCQl1MzIgZnVsbF9kdXBsZXg6MTsJCS8vIGJpdCAwCisjZWxzZQorCQl1MzIgZnVsbF9kdXBsZXg6MTsJCS8vIGJpdCAwCisJCXUzMiBjcmNfZW5hYmxlOjE7CQkvLyBiaXQgMQorCQl1MzIgcGFkX2NyYzoxOwkJLy8gYml0IDIKKwkJdTMyIHVuZGVmaW5lZDoxOwkJLy8gYml0IDMKKwkJdTMyIGxlbl9jaGVjazoxOwkJLy8gYml0IDQKKwkJdTMyIGh1Z2VfZnJhbWU6MTsJCS8vIGJpdCA1CisJCXUzMiByZXNlcnZlZDE6MjsJCS8vIGJpdHMgNi03CisJCXUzMiBpZl9tb2RlOjI7CQkvLyBiaXRzIDgtOQorCQl1MzIgcmVzZXJ2ZWQyOjI7CQkvLyBiaXRzIDEwLTExCisJCXUzMiBwcmVhbWJsZV9sZW46NDsJLy8gYml0cyAxMi0xNQorCQl1MzIgcmVzZXJ2ZWQzOjE2OwkJLy8gYml0cyAxNi0zMQorI2VuZGlmCisJfSBiaXRzOworfSBNQUNfQ0ZHMl90LCAqUE1BQ19DRkcyX3Q7CisKKy8qCisgKiBzdHJ1Y3R1cmUgZm9yIEludGVycGFja2V0IGdhcCByZWcgaW4gbWFjIGFkZHJlc3MgbWFwLgorICogbG9jYXRlZCBhdCBhZGRyZXNzIDB4NTAwOAorICovCit0eXBlZGVmIHVuaW9uIF9NQUNfSVBHX3QgeworCXUzMiB2YWx1ZTsKKwlzdHJ1Y3QgeworI2lmZGVmIF9CSVRfRklFTERTX0hUT0wKKwkJdTMyIHJlc2VydmVkOjE7CQkvLyBiaXQgMzEKKwkJdTMyIG5vbl9CMkJfaXBnXzE6NzsJLy8gYml0cyAyNC0zMAorCQl1MzIgdW5kZWZpbmVkMjoxOwkJLy8gYml0IDIzCisJCXUzMiBub25fQjJCX2lwZ18yOjc7CS8vIGJpdHMgMTYtMjIKKwkJdTMyIG1pbl9pZmdfZW5mb3JjZTo4OwkvLyBiaXRzIDgtMTUKKwkJdTMyIHVuZGVmaW5lZDE6MTsJCS8vIGJpdCA3CisJCXUzMiBCMkJfaXBnOjc7CQkvLyBiaXRzIDAtNgorI2Vsc2UKKwkJdTMyIEIyQl9pcGc6NzsJCS8vIGJpdHMgMC02CisJCXUzMiB1bmRlZmluZWQxOjE7CQkvLyBiaXQgNworCQl1MzIgbWluX2lmZ19lbmZvcmNlOjg7CS8vIGJpdHMgOC0xNQorCQl1MzIgbm9uX0IyQl9pcGdfMjo3OwkvLyBiaXRzIDE2LTIyCisJCXUzMiB1bmRlZmluZWQyOjE7CQkvLyBiaXQgMjMKKwkJdTMyIG5vbl9CMkJfaXBnXzE6NzsJLy8gYml0cyAyNC0zMAorCQl1MzIgcmVzZXJ2ZWQ6MTsJCS8vIGJpdCAzMQorI2VuZGlmCisJfSBiaXRzOworfSBNQUNfSVBHX3QsICpQTUFDX0lQR190OworCisvKgorICogc3RydWN0dXJlIGZvciBoYWxmIGR1cGxleCByZWcgaW4gbWFjIGFkZHJlc3MgbWFwLgorICogbG9jYXRlZCBhdCBhZGRyZXNzIDB4NTAwQworICovCit0eXBlZGVmIHVuaW9uIF9NQUNfSEZEUF90IHsKKwl1MzIgdmFsdWU7CisJc3RydWN0IHsKKyNpZmRlZiBfQklUX0ZJRUxEU19IVE9MCisJCXUzMiByZXNlcnZlZDI6ODsJCS8vIGJpdHMgMjQtMzEKKwkJdTMyIGFsdF9iZWJfdHJ1bmM6NDsJLy8gYml0cyAyMy0yMAorCQl1MzIgYWx0X2JlYl9lbmFibGU6MTsJLy8gYml0IDE5CisJCXUzMiBicF9ub19iYWNrb2ZmOjE7CS8vIGJpdCAxOAorCQl1MzIgbm9fYmFja29mZjoxOwkJLy8gYml0IDE3CisJCXUzMiBleGNlc3NfZGVmZXI6MTsJLy8gYml0IDE2CisJCXUzMiByZXhtaXRfbWF4OjQ7CQkvLyBiaXRzIDEyLTE1CisJCXUzMiByZXNlcnZlZDE6MjsJCS8vIGJpdHMgMTAtMTEKKwkJdTMyIGNvbGxfd2luZG93OjEwOwkvLyBiaXRzIDAtOQorI2Vsc2UKKwkJdTMyIGNvbGxfd2luZG93OjEwOwkvLyBiaXRzIDAtOQorCQl1MzIgcmVzZXJ2ZWQxOjI7CQkvLyBiaXRzIDEwLTExCisJCXUzMiByZXhtaXRfbWF4OjQ7CQkvLyBiaXRzIDEyLTE1CisJCXUzMiBleGNlc3NfZGVmZXI6MTsJLy8gYml0IDE2CisJCXUzMiBub19iYWNrb2ZmOjE7CQkvLyBiaXQgMTcKKwkJdTMyIGJwX25vX2JhY2tvZmY6MTsJLy8gYml0IDE4CisJCXUzMiBhbHRfYmViX2VuYWJsZToxOwkvLyBiaXQgMTkKKwkJdTMyIGFsdF9iZWJfdHJ1bmM6NDsJLy8gYml0cyAyMy0yMAorCQl1MzIgcmVzZXJ2ZWQyOjg7CQkvLyBiaXRzIDI0LTMxCisjZW5kaWYKKwl9IGJpdHM7Cit9IE1BQ19IRkRQX3QsICpQTUFDX0hGRFBfdDsKKworLyoKKyAqIHN0cnVjdHVyZSBmb3IgTWF4aW11bSBGcmFtZSBMZW5ndGggcmVnIGluIG1hYyBhZGRyZXNzIG1hcC4KKyAqIGxvY2F0ZWQgYXQgYWRkcmVzcyAweDUwMTAKKyAqLwordHlwZWRlZiB1bmlvbiBfTUFDX01BWF9GTV9MRU5fdCB7CisJdTMyIHZhbHVlOworCXN0cnVjdCB7CisjaWZkZWYgX0JJVF9GSUVMRFNfSFRPTAorCQl1MzIgcmVzZXJ2ZWQ6MTY7CS8vIGJpdHMgMTYtMzEKKwkJdTMyIG1heF9sZW46MTY7CS8vIGJpdHMgMC0xNQorI2Vsc2UKKwkJdTMyIG1heF9sZW46MTY7CS8vIGJpdHMgMC0xNQorCQl1MzIgcmVzZXJ2ZWQ6MTY7CS8vIGJpdHMgMTYtMzEKKyNlbmRpZgorCX0gYml0czsKK30gTUFDX01BWF9GTV9MRU5fdCwgKlBNQUNfTUFYX0ZNX0xFTl90OworCisvKgorICogc3RydWN0dXJlIGZvciBSZXNlcnZlIDEgcmVnIGluIG1hYyBhZGRyZXNzIG1hcC4KKyAqIGxvY2F0ZWQgYXQgYWRkcmVzcyAweDUwMTQgLSAweDUwMTgKKyAqIERlZmluZWQgZWFybGllciAodTMyKQorICovCisKKy8qCisgKiBzdHJ1Y3R1cmUgZm9yIFRlc3QgcmVnIGluIG1hYyBhZGRyZXNzIG1hcC4KKyAqIGxvY2F0ZWQgYXQgYWRkcmVzcyAweDUwMUMKKyAqLwordHlwZWRlZiB1bmlvbiBfTUFDX1RFU1RfdCB7CisJdTMyIHZhbHVlOworCXN0cnVjdCB7CisjaWZkZWYgX0JJVF9GSUVMRFNfSFRPTAorCQl1MzIgdW51c2VkOjI5OwkvLyBiaXRzIDMtMzEKKwkJdTMyIG1hY190ZXN0OjM7CS8vIGJpdHMgMC0yCisjZWxzZQorCQl1MzIgbWFjX3Rlc3Q6MzsJLy8gYml0cyAwLTIKKwkJdTMyIHVudXNlZDoyOTsJLy8gYml0cyAzLTMxCisjZW5kaWYKKwl9IGJpdHM7Cit9IE1BQ19URVNUX3QsICpQTUFDX1RFU1RfdDsKKworLyoKKyAqIHN0cnVjdHVyZSBmb3IgTUlJIE1hbmFnZW1lbnQgQ29uZmlndXJhdGlvbiByZWcgaW4gbWFjIGFkZHJlc3MgbWFwLgorICogbG9jYXRlZCBhdCBhZGRyZXNzIDB4NTAyMAorICovCit0eXBlZGVmIHVuaW9uIF9NSUlfTUdNVF9DRkdfdCB7CisJdTMyIHZhbHVlOworCXN0cnVjdCB7CisjaWZkZWYgX0JJVF9GSUVMRFNfSFRPTAorCQl1MzIgcmVzZXRfbWlpX21nbXQ6MTsJLy8gYml0IDMxCisJCXUzMiByZXNlcnZlZDoyNTsJCS8vIGJpdHMgNi0zMAorCQl1MzIgc2Nhbl9hdXRvX2luY3JlbXQ6MTsJLy8gYml0IDUKKwkJdTMyIHByZWFtYmxlX3N1cHByZXNzOjE7CS8vIGJpdCA0CisJCXUzMiB1bmRlZmluZWQ6MTsJCS8vIGJpdCAzCisJCXUzMiBtZ210X2Nsa19yZXNldDozOwkvLyBiaXRzIDAtMgorI2Vsc2UKKwkJdTMyIG1nbXRfY2xrX3Jlc2V0OjM7CS8vIGJpdHMgMC0yCisJCXUzMiB1bmRlZmluZWQ6MTsJCS8vIGJpdCAzCisJCXUzMiBwcmVhbWJsZV9zdXBwcmVzczoxOwkvLyBiaXQgNAorCQl1MzIgc2Nhbl9hdXRvX2luY3JlbXQ6MTsJLy8gYml0IDUKKwkJdTMyIHJlc2VydmVkOjI1OwkJLy8gYml0cyA2LTMwCisJCXUzMiByZXNldF9taWlfbWdtdDoxOwkvLyBiaXQgMzEKKyNlbmRpZgorCX0gYml0czsKK30gTUlJX01HTVRfQ0ZHX3QsICpQTUlJX01HTVRfQ0ZHX3Q7CisKKy8qCisgKiBzdHJ1Y3R1cmUgZm9yIE1JSSBNYW5hZ2VtZW50IENvbW1hbmQgcmVnIGluIG1hYyBhZGRyZXNzIG1hcC4KKyAqIGxvY2F0ZWQgYXQgYWRkcmVzcyAweDUwMjQKKyAqLwordHlwZWRlZiB1bmlvbiBfTUlJX01HTVRfQ01EX3QgeworCXUzMiB2YWx1ZTsKKwlzdHJ1Y3QgeworI2lmZGVmIF9CSVRfRklFTERTX0hUT0wKKwkJdTMyIHJlc2VydmVkOjMwOwkvLyBiaXRzIDItMzEKKwkJdTMyIHNjYW5fY3ljbGU6MTsJLy8gYml0IDEKKwkJdTMyIHJlYWRfY3ljbGU6MTsJLy8gYml0IDAKKyNlbHNlCisJCXUzMiByZWFkX2N5Y2xlOjE7CS8vIGJpdCAwCisJCXUzMiBzY2FuX2N5Y2xlOjE7CS8vIGJpdCAxCisJCXUzMiByZXNlcnZlZDozMDsJLy8gYml0cyAyLTMxCisjZW5kaWYKKwl9IGJpdHM7Cit9IE1JSV9NR01UX0NNRF90LCAqUE1JSV9NR01UX0NNRF90OworCisvKgorICogc3RydWN0dXJlIGZvciBNSUkgTWFuYWdlbWVudCBBZGRyZXNzIHJlZyBpbiBtYWMgYWRkcmVzcyBtYXAuCisgKiBsb2NhdGVkIGF0IGFkZHJlc3MgMHg1MDI4CisgKi8KK3R5cGVkZWYgdW5pb24gX01JSV9NR01UX0FERFJfdCB7CisJdTMyIHZhbHVlOworCXN0cnVjdCB7CisjaWZkZWYgX0JJVF9GSUVMRFNfSFRPTAorCQl1MzIgcmVzZXJ2ZWQyOjE5OwkvLyBiaXQgMTMtMzEKKwkJdTMyIHBoeV9hZGRyOjU7CS8vIGJpdHMgOC0xMgorCQl1MzIgcmVzZXJ2ZWQxOjM7CS8vIGJpdHMgNS03CisJCXUzMiByZWdfYWRkcjo1OwkvLyBiaXRzIDAtNAorI2Vsc2UKKwkJdTMyIHJlZ19hZGRyOjU7CS8vIGJpdHMgMC00CisJCXUzMiByZXNlcnZlZDE6MzsJLy8gYml0cyA1LTcKKwkJdTMyIHBoeV9hZGRyOjU7CS8vIGJpdHMgOC0xMgorCQl1MzIgcmVzZXJ2ZWQyOjE5OwkvLyBiaXQgMTMtMzEKKyNlbmRpZgorCX0gYml0czsKK30gTUlJX01HTVRfQUREUl90LCAqUE1JSV9NR01UX0FERFJfdDsKKworLyoKKyAqIHN0cnVjdHVyZSBmb3IgTUlJIE1hbmFnZW1lbnQgQ29udHJvbCByZWcgaW4gbWFjIGFkZHJlc3MgbWFwLgorICogbG9jYXRlZCBhdCBhZGRyZXNzIDB4NTAyQworICovCit0eXBlZGVmIHVuaW9uIF9NSUlfTUdNVF9DVFJMX3QgeworCXUzMiB2YWx1ZTsKKwlzdHJ1Y3QgeworI2lmZGVmIF9CSVRfRklFTERTX0hUT0wKKwkJdTMyIHJlc2VydmVkOjE2OwkvLyBiaXRzIDE2LTMxCisJCXUzMiBwaHlfY3RybDoxNjsJLy8gYml0cyAwLTE1CisjZWxzZQorCQl1MzIgcGh5X2N0cmw6MTY7CS8vIGJpdHMgMC0xNQorCQl1MzIgcmVzZXJ2ZWQ6MTY7CS8vIGJpdHMgMTYtMzEKKyNlbmRpZgorCX0gYml0czsKK30gTUlJX01HTVRfQ1RSTF90LCAqUE1JSV9NR01UX0NUUkxfdDsKKworLyoKKyAqIHN0cnVjdHVyZSBmb3IgTUlJIE1hbmFnZW1lbnQgU3RhdHVzIHJlZyBpbiBtYWMgYWRkcmVzcyBtYXAuCisgKiBsb2NhdGVkIGF0IGFkZHJlc3MgMHg1MDMwCisgKi8KK3R5cGVkZWYgdW5pb24gX01JSV9NR01UX1NUQVRfdCB7CisJdTMyIHZhbHVlOworCXN0cnVjdCB7CisjaWZkZWYgX0JJVF9GSUVMRFNfSFRPTAorCQl1MzIgcmVzZXJ2ZWQ6MTY7CS8vIGJpdHMgMTYtMzEKKwkJdTMyIHBoeV9zdGF0OjE2OwkvLyBiaXRzIDAtMTUKKyNlbHNlCisJCXUzMiBwaHlfc3RhdDoxNjsJLy8gYml0cyAwLTE1CisJCXUzMiByZXNlcnZlZDoxNjsJLy8gYml0cyAxNi0zMQorI2VuZGlmCisJfSBiaXRzOworfSBNSUlfTUdNVF9TVEFUX3QsICpQTUlJX01HTVRfU1RBVF90OworCisvKgorICogc3RydWN0dXJlIGZvciBNSUkgTWFuYWdlbWVudCBJbmRpY2F0b3JzIHJlZyBpbiBtYWMgYWRkcmVzcyBtYXAuCisgKiBsb2NhdGVkIGF0IGFkZHJlc3MgMHg1MDM0CisgKi8KK3R5cGVkZWYgdW5pb24gX01JSV9NR01UX0lORElDQVRPUl90IHsKKwl1MzIgdmFsdWU7CisJc3RydWN0IHsKKyNpZmRlZiBfQklUX0ZJRUxEU19IVE9MCisJCXUzMiByZXNlcnZlZDoyOTsJLy8gYml0cyAzLTMxCisJCXUzMiBub3RfdmFsaWQ6MTsJLy8gYml0IDIKKwkJdTMyIHNjYW5uaW5nOjE7CS8vIGJpdCAxCisJCXUzMiBidXN5OjE7CS8vIGJpdCAwCisjZWxzZQorCQl1MzIgYnVzeToxOwkvLyBiaXQgMAorCQl1MzIgc2Nhbm5pbmc6MTsJLy8gYml0IDEKKwkJdTMyIG5vdF92YWxpZDoxOwkvLyBiaXQgMgorCQl1MzIgcmVzZXJ2ZWQ6Mjk7CS8vIGJpdHMgMy0zMQorI2VuZGlmCisJfSBiaXRzOworfSBNSUlfTUdNVF9JTkRJQ0FUT1JfdCwgKlBNSUlfTUdNVF9JTkRJQ0FUT1JfdDsKKworLyoKKyAqIHN0cnVjdHVyZSBmb3IgSW50ZXJmYWNlIENvbnRyb2wgcmVnIGluIG1hYyBhZGRyZXNzIG1hcC4KKyAqIGxvY2F0ZWQgYXQgYWRkcmVzcyAweDUwMzgKKyAqLwordHlwZWRlZiB1bmlvbiBfTUFDX0lGX0NUUkxfdCB7CisJdTMyIHZhbHVlOworCXN0cnVjdCB7CisjaWZkZWYgX0JJVF9GSUVMRFNfSFRPTAorCQl1MzIgcmVzZXRfaWZfbW9kdWxlOjE7CS8vIGJpdCAzMQorCQl1MzIgcmVzZXJ2ZWQ0OjM7CQkvLyBiaXQgMjgtMzAKKwkJdTMyIHRiaV9tb2RlOjE7CQkvLyBiaXQgMjcKKwkJdTMyIGdoZF9tb2RlOjE7CQkvLyBiaXQgMjYKKwkJdTMyIGxoZF9tb2RlOjE7CQkvLyBiaXQgMjUKKwkJdTMyIHBoeV9tb2RlOjE7CQkvLyBiaXQgMjQKKwkJdTMyIHJlc2V0X3Blcl9taWk6MTsJLy8gYml0IDIzCisJCXUzMiByZXNlcnZlZDM6NjsJCS8vIGJpdHMgMTctMjIKKwkJdTMyIHNwZWVkOjE7CQkvLyBiaXQgMTYKKwkJdTMyIHJlc2V0X3BlMTAweDoxOwkvLyBiaXQgMTUKKwkJdTMyIHJlc2VydmVkMjo0OwkJLy8gYml0cyAxMS0xNAorCQl1MzIgZm9yY2VfcXVpZXQ6MTsJCS8vIGJpdCAxMAorCQl1MzIgbm9fY2lwaGVyOjE7CQkvLyBiaXQgOQorCQl1MzIgZGlzYWJsZV9saW5rX2ZhaWw6MTsJLy8gYml0IDgKKwkJdTMyIHJlc2V0X2dwc2k6MTsJCS8vIGJpdCA3CisJCXUzMiByZXNlcnZlZDE6NjsJCS8vIGJpdHMgMS02CisJCXUzMiBlbmFiX2phYl9wcm90ZWN0OjE7CS8vIGJpdCAwCisjZWxzZQorCQl1MzIgZW5hYl9qYWJfcHJvdGVjdDoxOwkvLyBiaXQgMAorCQl1MzIgcmVzZXJ2ZWQxOjY7CQkvLyBiaXRzIDEtNgorCQl1MzIgcmVzZXRfZ3BzaToxOwkJLy8gYml0IDcKKwkJdTMyIGRpc2FibGVfbGlua19mYWlsOjE7CS8vIGJpdCA4CisJCXUzMiBub19jaXBoZXI6MTsJCS8vIGJpdCA5CisJCXUzMiBmb3JjZV9xdWlldDoxOwkJLy8gYml0IDEwCisJCXUzMiByZXNlcnZlZDI6NDsJCS8vIGJpdHMgMTEtMTQKKwkJdTMyIHJlc2V0X3BlMTAweDoxOwkvLyBiaXQgMTUKKwkJdTMyIHNwZWVkOjE7CQkvLyBiaXQgMTYKKwkJdTMyIHJlc2VydmVkMzo2OwkJLy8gYml0cyAxNy0yMgorCQl1MzIgcmVzZXRfcGVyX21paToxOwkvLyBiaXQgMjMKKwkJdTMyIHBoeV9tb2RlOjE7CQkvLyBiaXQgMjQKKwkJdTMyIGxoZF9tb2RlOjE7CQkvLyBiaXQgMjUKKwkJdTMyIGdoZF9tb2RlOjE7CQkvLyBiaXQgMjYKKwkJdTMyIHRiaV9tb2RlOjE7CQkvLyBiaXQgMjcKKwkJdTMyIHJlc2VydmVkNDozOwkJLy8gYml0IDI4LTMwCisJCXUzMiByZXNldF9pZl9tb2R1bGU6MTsJLy8gYml0IDMxCisjZW5kaWYKKwl9IGJpdHM7Cit9IE1BQ19JRl9DVFJMX3QsICpQTUFDX0lGX0NUUkxfdDsKKworLyoKKyAqIHN0cnVjdHVyZSBmb3IgSW50ZXJmYWNlIFN0YXR1cyByZWcgaW4gbWFjIGFkZHJlc3MgbWFwLgorICogbG9jYXRlZCBhdCBhZGRyZXNzIDB4NTAzQworICovCit0eXBlZGVmIHVuaW9uIF9NQUNfSUZfU1RBVF90IHsKKwl1MzIgdmFsdWU7CisJc3RydWN0IHsKKyNpZmRlZiBfQklUX0ZJRUxEU19IVE9MCisJCXUzMiByZXNlcnZlZDoyMjsJCS8vIGJpdHMgMTAtMzEKKwkJdTMyIGV4Y2Vzc19kZWZlcjoxOwkvLyBiaXQgOQorCQl1MzIgY2xhc2g6MTsJCS8vIGJpdCA4CisJCXUzMiBwaHlfamFiYmVyOjE7CQkvLyBiaXQgNworCQl1MzIgcGh5X2xpbmtfb2s6MTsJCS8vIGJpdCA2CisJCXUzMiBwaHlfZnVsbF9kdXBsZXg6MTsJLy8gYml0IDUKKwkJdTMyIHBoeV9zcGVlZDoxOwkJLy8gYml0IDQKKwkJdTMyIHBlMTAweF9saW5rX2ZhaWw6MTsJLy8gYml0IDMKKwkJdTMyIHBlMTB0X2xvc3NfY2FycmllOjE7CS8vIGJpdCAyCisJCXUzMiBwZTEwdF9zcWVfZXJyb3I6MTsJLy8gYml0IDEKKwkJdTMyIHBlMTB0X2phYmJlcjoxOwkvLyBiaXQgMAorI2Vsc2UKKwkJdTMyIHBlMTB0X2phYmJlcjoxOwkvLyBiaXQgMAorCQl1MzIgcGUxMHRfc3FlX2Vycm9yOjE7CS8vIGJpdCAxCisJCXUzMiBwZTEwdF9sb3NzX2NhcnJpZToxOwkvLyBiaXQgMgorCQl1MzIgcGUxMDB4X2xpbmtfZmFpbDoxOwkvLyBiaXQgMworCQl1MzIgcGh5X3NwZWVkOjE7CQkvLyBiaXQgNAorCQl1MzIgcGh5X2Z1bGxfZHVwbGV4OjE7CS8vIGJpdCA1CisJCXUzMiBwaHlfbGlua19vazoxOwkJLy8gYml0IDYKKwkJdTMyIHBoeV9qYWJiZXI6MTsJCS8vIGJpdCA3CisJCXUzMiBjbGFzaDoxOwkJLy8gYml0IDgKKwkJdTMyIGV4Y2Vzc19kZWZlcjoxOwkvLyBiaXQgOQorCQl1MzIgcmVzZXJ2ZWQ6MjI7CQkvLyBiaXRzIDEwLTMxCisjZW5kaWYKKwl9IGJpdHM7Cit9IE1BQ19JRl9TVEFUX3QsICpQTUFDX0lGX1NUQVRfdDsKKworLyoKKyAqIHN0cnVjdHVyZSBmb3IgTWFjIFN0YXRpb24gQWRkcmVzcywgUGFydCAxIHJlZyBpbiBtYWMgYWRkcmVzcyBtYXAuCisgKiBsb2NhdGVkIGF0IGFkZHJlc3MgMHg1MDQwCisgKi8KK3R5cGVkZWYgdW5pb24gX01BQ19TVEFUSU9OX0FERFIxX3QgeworCXUzMiB2YWx1ZTsKKwlzdHJ1Y3QgeworI2lmZGVmIF9CSVRfRklFTERTX0hUT0wKKwkJdTMyIE9jdGV0Njo4OwkvLyBiaXRzIDI0LTMxCisJCXUzMiBPY3RldDU6ODsJLy8gYml0cyAxNi0yMworCQl1MzIgT2N0ZXQ0Ojg7CS8vIGJpdHMgOC0xNQorCQl1MzIgT2N0ZXQzOjg7CS8vIGJpdHMgMC03CisjZWxzZQorCQl1MzIgT2N0ZXQzOjg7CS8vIGJpdHMgMC03CisJCXUzMiBPY3RldDQ6ODsJLy8gYml0cyA4LTE1CisJCXUzMiBPY3RldDU6ODsJLy8gYml0cyAxNi0yMworCQl1MzIgT2N0ZXQ2Ojg7CS8vIGJpdHMgMjQtMzEKKyNlbmRpZgorCX0gYml0czsKK30gTUFDX1NUQVRJT05fQUREUjFfdCwgKlBNQUNfU1RBVElPTl9BRERSMV90OworCisvKgorICogc3RydWN0dXJlIGZvciBNYWMgU3RhdGlvbiBBZGRyZXNzLCBQYXJ0IDIgcmVnIGluIG1hYyBhZGRyZXNzIG1hcC4KKyAqIGxvY2F0ZWQgYXQgYWRkcmVzcyAweDUwNDQKKyAqLwordHlwZWRlZiB1bmlvbiBfTUFDX1NUQVRJT05fQUREUjJfdCB7CisJdTMyIHZhbHVlOworCXN0cnVjdCB7CisjaWZkZWYgX0JJVF9GSUVMRFNfSFRPTAorCQl1MzIgT2N0ZXQyOjg7CS8vIGJpdHMgMjQtMzEKKwkJdTMyIE9jdGV0MTo4OwkvLyBiaXRzIDE2LTIzCisJCXUzMiByZXNlcnZlZDoxNjsJLy8gYml0cyAwLTE1CisjZWxzZQorCQl1MzIgcmVzZXJ2ZWQ6MTY7CS8vIGJpdCAwLTE1CisJCXUzMiBPY3RldDE6ODsJLy8gYml0cyAxNi0yMworCQl1MzIgT2N0ZXQyOjg7CS8vIGJpdHMgMjQtMzEKKyNlbmRpZgorCX0gYml0czsKK30gTUFDX1NUQVRJT05fQUREUjJfdCwgKlBNQUNfU1RBVElPTl9BRERSMl90OworCisvKgorICogTUFDIE1vZHVsZSBvZiBKQUdDb3JlIEFkZHJlc3MgTWFwcGluZworICovCit0eXBlZGVmIHN0cnVjdCBfTUFDX3QgewkJCQkJLy8gTG9jYXRpb246CisJTUFDX0NGRzFfdCBjZmcxOwkJCQkvLyAgMHg1MDAwCisJTUFDX0NGRzJfdCBjZmcyOwkJCQkvLyAgMHg1MDA0CisJTUFDX0lQR190IGlwZzsJCQkJCS8vICAweDUwMDgKKwlNQUNfSEZEUF90IGhmZHA7CQkJCS8vICAweDUwMEMKKwlNQUNfTUFYX0ZNX0xFTl90IG1heF9mbV9sZW47CQkJLy8gIDB4NTAxMAorCXUzMiByc3YxOwkJCQkJLy8gIDB4NTAxNAorCXUzMiByc3YyOwkJCQkJLy8gIDB4NTAxOAorCU1BQ19URVNUX3QgbWFjX3Rlc3Q7CQkJCS8vICAweDUwMUMKKwlNSUlfTUdNVF9DRkdfdCBtaWlfbWdtdF9jZmc7CQkJLy8gIDB4NTAyMAorCU1JSV9NR01UX0NNRF90IG1paV9tZ210X2NtZDsJCQkvLyAgMHg1MDI0CisJTUlJX01HTVRfQUREUl90IG1paV9tZ210X2FkZHI7CQkJLy8gIDB4NTAyOAorCU1JSV9NR01UX0NUUkxfdCBtaWlfbWdtdF9jdHJsOwkJCS8vICAweDUwMkMKKwlNSUlfTUdNVF9TVEFUX3QgbWlpX21nbXRfc3RhdDsJCQkvLyAgMHg1MDMwCisJTUlJX01HTVRfSU5ESUNBVE9SX3QgbWlpX21nbXRfaW5kaWNhdG9yOwkvLyAgMHg1MDM0CisJTUFDX0lGX0NUUkxfdCBpZl9jdHJsOwkJCQkvLyAgMHg1MDM4CisJTUFDX0lGX1NUQVRfdCBpZl9zdGF0OwkJCQkvLyAgMHg1MDNDCisJTUFDX1NUQVRJT05fQUREUjFfdCBzdGF0aW9uX2FkZHJfMTsJCS8vICAweDUwNDAKKwlNQUNfU1RBVElPTl9BRERSMl90IHN0YXRpb25fYWRkcl8yOwkJLy8gIDB4NTA0NAorfSBNQUNfdCwgKlBNQUNfdDsKKworLyogRU5EIE9GIE1BQyBSRUdJU1RFUiBBRERSRVNTIE1BUCAqLworCisvKiBTVEFSVCBPRiBNQUMgU1RBVCBSRUdJU1RFUiBBRERSRVNTIE1BUCAqLworCisvKgorICogc3RydWN0dXJlIGZvciBDYXJyeSBSZWdpc3RlciBPbmUgYW5kIGl0J3MgTWFzayBSZWdpc3RlciByZWcgbG9jYXRlZCBpbiBtYWMKKyAqIHN0YXQgYWRkcmVzcyBtYXAgYWRkcmVzcyAweDYxMzAgYW5kIDB4NjEzOC4KKyAqLwordHlwZWRlZiB1bmlvbiBfTUFDX1NUQVRfUkVHXzFfdCB7CisJdTMyIHZhbHVlOworCXN0cnVjdCB7CisjaWZkZWYgX0JJVF9GSUVMRFNfSFRPTAorCQl1MzIgdHI2NDoxOwkvLyBiaXQgMzEKKwkJdTMyIHRyMTI3OjE7CS8vIGJpdCAzMAorCQl1MzIgdHIyNTU6MTsJLy8gYml0IDI5CisJCXUzMiB0cjUxMToxOwkvLyBiaXQgMjgKKwkJdTMyIHRyMWs6MTsJLy8gYml0IDI3CisJCXUzMiB0cm1heDoxOwkvLyBiaXQgMjYKKwkJdTMyIHRybWd2OjE7CS8vIGJpdCAyNQorCQl1MzIgdW51c2VkOjg7CS8vIGJpdHMgMTctMjQKKwkJdTMyIHJieXQ6MTsJLy8gYml0IDE2CisJCXUzMiBycGt0OjE7CS8vIGJpdCAxNQorCQl1MzIgcmZjczoxOwkvLyBiaXQgMTQKKwkJdTMyIHJtY2E6MTsJLy8gYml0IDEzCisJCXUzMiByYmNhOjE7CS8vIGJpdCAxMgorCQl1MzIgcnhjZjoxOwkvLyBiaXQgMTEKKwkJdTMyIHJ4cGY6MTsJLy8gYml0IDEwCisJCXUzMiByeHVvOjE7CS8vIGJpdCA5CisJCXUzMiByYWxuOjE7CS8vIGJpdCA4CisJCXUzMiByZmxyOjE7CS8vIGJpdCA3CisJCXUzMiByY2RlOjE7CS8vIGJpdCA2CisJCXUzMiByY3NlOjE7CS8vIGJpdCA1CisJCXUzMiBydW5kOjE7CS8vIGJpdCA0CisJCXUzMiByb3ZyOjE7CS8vIGJpdCAzCisJCXUzMiByZnJnOjE7CS8vIGJpdCAyCisJCXUzMiByamJyOjE7CS8vIGJpdCAxCisJCXUzMiByZHJwOjE7CS8vIGJpdCAwCisjZWxzZQorCQl1MzIgcmRycDoxOwkvLyBiaXQgMAorCQl1MzIgcmpicjoxOwkvLyBiaXQgMQorCQl1MzIgcmZyZzoxOwkvLyBiaXQgMgorCQl1MzIgcm92cjoxOwkvLyBiaXQgMworCQl1MzIgcnVuZDoxOwkvLyBiaXQgNAorCQl1MzIgcmNzZToxOwkvLyBiaXQgNQorCQl1MzIgcmNkZToxOwkvLyBiaXQgNgorCQl1MzIgcmZscjoxOwkvLyBiaXQgNworCQl1MzIgcmFsbjoxOwkvLyBiaXQgOAorCQl1MzIgcnh1bzoxOwkvLyBiaXQgOQorCQl1MzIgcnhwZjoxOwkvLyBiaXQgMTAKKwkJdTMyIHJ4Y2Y6MTsJLy8gYml0IDExCisJCXUzMiByYmNhOjE7CS8vIGJpdCAxMgorCQl1MzIgcm1jYToxOwkvLyBiaXQgMTMKKwkJdTMyIHJmY3M6MTsJLy8gYml0IDE0CisJCXUzMiBycGt0OjE7CS8vIGJpdCAxNQorCQl1MzIgcmJ5dDoxOwkvLyBiaXQgMTYKKwkJdTMyIHVudXNlZDo4OwkvLyBiaXRzIDE3LTI0CisJCXUzMiB0cm1ndjoxOwkvLyBiaXQgMjUKKwkJdTMyIHRybWF4OjE7CS8vIGJpdCAyNgorCQl1MzIgdHIxazoxOwkvLyBiaXQgMjcKKwkJdTMyIHRyNTExOjE7CS8vIGJpdCAyOAorCQl1MzIgdHIyNTU6MTsJLy8gYml0IDI5CisJCXUzMiB0cjEyNzoxOwkvLyBiaXQgMzAKKwkJdTMyIHRyNjQ6MTsJLy8gYml0IDMxCisjZW5kaWYKKwl9IGJpdHM7Cit9IE1BQ19TVEFUX1JFR18xX3QsICpQTUFDX1NUQVRfUkVHXzFfdDsKKworLyoKKyAqIHN0cnVjdHVyZSBmb3IgQ2FycnkgUmVnaXN0ZXIgVHdvIE1hc2sgUmVnaXN0ZXIgcmVnIGluIG1hYyBzdGF0IGFkZHJlc3MgbWFwLgorICogbG9jYXRlZCBhdCBhZGRyZXNzIDB4NjEzQworICovCit0eXBlZGVmIHVuaW9uIF9NQUNfU1RBVF9SRUdfMl90IHsKKwl1MzIgdmFsdWU7CisJc3RydWN0IHsKKyNpZmRlZiBfQklUX0ZJRUxEU19IVE9MCisJCXUzMiB1bnVzZWQ6MTI7CS8vIGJpdCAyMC0zMQorCQl1MzIgdGpicjoxOwkvLyBiaXQgMTkKKwkJdTMyIHRmY3M6MTsJLy8gYml0IDE4CisJCXUzMiB0eGNmOjE7CS8vIGJpdCAxNworCQl1MzIgdG92cjoxOwkvLyBiaXQgMTYKKwkJdTMyIHR1bmQ6MTsJLy8gYml0IDE1CisJCXUzMiB0ZnJnOjE7CS8vIGJpdCAxNAorCQl1MzIgdGJ5dDoxOwkvLyBiaXQgMTMKKwkJdTMyIHRwa3Q6MTsJLy8gYml0IDEyCisJCXUzMiB0bWNhOjE7CS8vIGJpdCAxMQorCQl1MzIgdGJjYToxOwkvLyBiaXQgMTAKKwkJdTMyIHR4cGY6MTsJLy8gYml0IDkKKwkJdTMyIHRkZnI6MTsJLy8gYml0IDgKKwkJdTMyIHRlZGY6MTsJLy8gYml0IDcKKwkJdTMyIHRzY2w6MTsJLy8gYml0IDYKKwkJdTMyIHRtY2w6MTsJLy8gYml0IDUKKwkJdTMyIHRsY2w6MTsJLy8gYml0IDQKKwkJdTMyIHR4Y2w6MTsJLy8gYml0IDMKKwkJdTMyIHRuY2w6MTsJLy8gYml0IDIKKwkJdTMyIHRwZmg6MTsJLy8gYml0IDEKKwkJdTMyIHRkcnA6MTsJLy8gYml0IDAKKyNlbHNlCisJCXUzMiB0ZHJwOjE7CS8vIGJpdCAwCisJCXUzMiB0cGZoOjE7CS8vIGJpdCAxCisJCXUzMiB0bmNsOjE7CS8vIGJpdCAyCisJCXUzMiB0eGNsOjE7CS8vIGJpdCAzCisJCXUzMiB0bGNsOjE7CS8vIGJpdCA0CisJCXUzMiB0bWNsOjE7CS8vIGJpdCA1CisJCXUzMiB0c2NsOjE7CS8vIGJpdCA2CisJCXUzMiB0ZWRmOjE7CS8vIGJpdCA3CisJCXUzMiB0ZGZyOjE7CS8vIGJpdCA4CisJCXUzMiB0eHBmOjE7CS8vIGJpdCA5CisJCXUzMiB0YmNhOjE7CS8vIGJpdCAxMAorCQl1MzIgdG1jYToxOwkvLyBiaXQgMTEKKwkJdTMyIHRwa3Q6MTsJLy8gYml0IDEyCisJCXUzMiB0Ynl0OjE7CS8vIGJpdCAxMworCQl1MzIgdGZyZzoxOwkvLyBiaXQgMTQKKwkJdTMyIHR1bmQ6MTsJLy8gYml0IDE1CisJCXUzMiB0b3ZyOjE7CS8vIGJpdCAxNgorCQl1MzIgdHhjZjoxOwkvLyBiaXQgMTcKKwkJdTMyIHRmY3M6MTsJLy8gYml0IDE4CisJCXUzMiB0amJyOjE7CS8vIGJpdCAxOQorCQl1MzIgdW51c2VkOjEyOwkvLyBiaXQgMjAtMzEKKyNlbmRpZgorCX0gYml0czsKK30gTUFDX1NUQVRfUkVHXzJfdCwgKlBNQUNfU1RBVF9SRUdfMl90OworCisvKgorICogTUFDIFNUQVRTIE1vZHVsZSBvZiBKQUdDb3JlIEFkZHJlc3MgTWFwcGluZworICovCit0eXBlZGVmIHN0cnVjdCBfTUFDX1NUQVRfdCB7CQkvLyBMb2NhdGlvbjoKKwl1MzIgcGFkWzMyXTsJCS8vICAweDYwMDAgLSA2MDdDCisKKwkvLyBUeC9SeCAwLTY0IEJ5dGUgRnJhbWUgQ291bnRlcgorCXUzMiBUUjY0OwkJCS8vICAweDYwODAKKworCS8vIFR4L1J4IDY1LTEyNyBCeXRlIEZyYW1lIENvdW50ZXIKKwl1MzIgVFIxMjc7CQkJLy8gIDB4NjA4NAorCisJLy8gVHgvUnggMTI4LTI1NSBCeXRlIEZyYW1lIENvdW50ZXIKKwl1MzIgVFIyNTU7CQkJLy8gIDB4NjA4OAorCisJLy8gVHgvUnggMjU2LTUxMSBCeXRlIEZyYW1lIENvdW50ZXIKKwl1MzIgVFI1MTE7CQkJLy8gIDB4NjA4QworCisJLy8gVHgvUnggNTEyLTEwMjMgQnl0ZSBGcmFtZSBDb3VudGVyCisJdTMyIFRSMUs7CQkJLy8gIDB4NjA5MAorCisJLy8gVHgvUnggMTAyNC0xNTE4IEJ5dGUgRnJhbWUgQ291bnRlcgorCXUzMiBUUk1heDsJCQkvLyAgMHg2MDk0CisKKwkvLyBUeC9SeCAxNTE5LTE1MjIgQnl0ZSBHb29kIFZMQU4gRnJhbWUgQ291bnQKKwl1MzIgVFJNZ3Y7CQkJLy8gIDB4NjA5OAorCisJLy8gUnggQnl0ZSBDb3VudGVyCisJdTMyIFJCeXQ7CQkJLy8gIDB4NjA5QworCisJLy8gUnggUGFja2V0IENvdW50ZXIKKwl1MzIgUlBrdDsJCQkvLyAgMHg2MEEwCisKKwkvLyBSeCBGQ1MgRXJyb3IgQ291bnRlcgorCXUzMiBSRmNzOwkJCS8vICAweDYwQTQKKworCS8vIFJ4IE11bHRpY2FzdCBQYWNrZXQgQ291bnRlcgorCXUzMiBSTWNhOwkJCS8vICAweDYwQTgKKworCS8vIFJ4IEJyb2FkY2FzdCBQYWNrZXQgQ291bnRlcgorCXUzMiBSQmNhOwkJCS8vICAweDYwQUMKKworCS8vIFJ4IENvbnRyb2wgRnJhbWUgUGFja2V0IENvdW50ZXIKKwl1MzIgUnhDZjsJCQkvLyAgMHg2MEIwCisKKwkvLyBSeCBQYXVzZSBGcmFtZSBQYWNrZXQgQ291bnRlcgorCXUzMiBSeFBmOwkJCS8vICAweDYwQjQKKworCS8vIFJ4IFVua25vd24gT1AgQ29kZSBDb3VudGVyCisJdTMyIFJ4VW87CQkJLy8gIDB4NjBCOAorCisJLy8gUnggQWxpZ25tZW50IEVycm9yIENvdW50ZXIKKwl1MzIgUkFsbjsJCQkvLyAgMHg2MEJDCisKKwkvLyBSeCBGcmFtZSBMZW5ndGggRXJyb3IgQ291bnRlcgorCXUzMiBSRmxyOwkJCS8vICAweDYwQzAKKworCS8vIFJ4IENvZGUgRXJyb3IgQ291bnRlcgorCXUzMiBSQ2RlOwkJCS8vICAweDYwQzQKKworCS8vIFJ4IENhcnJpZXIgU2Vuc2UgRXJyb3IgQ291bnRlcgorCXUzMiBSQ3NlOwkJCS8vICAweDYwQzgKKworCS8vIFJ4IFVuZGVyc2l6ZSBQYWNrZXQgQ291bnRlcgorCXUzMiBSVW5kOwkJCS8vICAweDYwQ0MKKworCS8vIFJ4IE92ZXJzaXplIFBhY2tldCBDb3VudGVyCisJdTMyIFJPdnI7CQkJLy8gIDB4NjBEMAorCisJLy8gUnggRnJhZ21lbnQgQ291bnRlcgorCXUzMiBSRnJnOwkJCS8vICAweDYwRDQKKworCS8vIFJ4IEphYmJlciBDb3VudGVyCisJdTMyIFJKYnI7CQkJLy8gIDB4NjBEOAorCisJLy8gUnggRHJvcAorCXUzMiBSRHJwOwkJCS8vICAweDYwREMKKworCS8vIFR4IEJ5dGUgQ291bnRlcgorCXUzMiBUQnl0OwkJCS8vICAweDYwRTAKKworCS8vIFR4IFBhY2tldCBDb3VudGVyCisJdTMyIFRQa3Q7CQkJLy8gIDB4NjBFNAorCisJLy8gVHggTXVsdGljYXN0IFBhY2tldCBDb3VudGVyCisJdTMyIFRNY2E7CQkJLy8gIDB4NjBFOAorCisJLy8gVHggQnJvYWRjYXN0IFBhY2tldCBDb3VudGVyCisJdTMyIFRCY2E7CQkJLy8gIDB4NjBFQworCisJLy8gVHggUGF1c2UgQ29udHJvbCBGcmFtZSBDb3VudGVyCisJdTMyIFR4UGY7CQkJLy8gIDB4NjBGMAorCisJLy8gVHggRGVmZXJyYWwgUGFja2V0IENvdW50ZXIKKwl1MzIgVERmcjsJCQkvLyAgMHg2MEY0CisKKwkvLyBUeCBFeGNlc3NpdmUgRGVmZXJyYWwgUGFja2V0IENvdW50ZXIKKwl1MzIgVEVkZjsJCQkvLyAgMHg2MEY4CisKKwkvLyBUeCBTaW5nbGUgQ29sbGlzaW9uIFBhY2tldCBDb3VudGVyCisJdTMyIFRTY2w7CQkJLy8gIDB4NjBGQworCisJLy8gVHggTXVsdGlwbGUgQ29sbGlzaW9uIFBhY2tldCBDb3VudGVyCisJdTMyIFRNY2w7CQkJLy8gIDB4NjEwMAorCisJLy8gVHggTGF0ZSBDb2xsaXNpb24gUGFja2V0IENvdW50ZXIKKwl1MzIgVExjbDsJCQkvLyAgMHg2MTA0CisKKwkvLyBUeCBFeGNlc3NpdmUgQ29sbGlzaW9uIFBhY2tldCBDb3VudGVyCisJdTMyIFRYY2w7CQkJLy8gIDB4NjEwOAorCisJLy8gVHggVG90YWwgQ29sbGlzaW9uIFBhY2tldCBDb3VudGVyCisJdTMyIFROY2w7CQkJLy8gIDB4NjEwQworCisJLy8gVHggUGF1c2UgRnJhbWUgSG9ub3JlZCBDb3VudGVyCisJdTMyIFRQZmg7CQkJLy8gIDB4NjExMAorCisJLy8gVHggRHJvcCBGcmFtZSBDb3VudGVyCisJdTMyIFREcnA7CQkJLy8gIDB4NjExNAorCisJLy8gVHggSmFiYmVyIEZyYW1lIENvdW50ZXIKKwl1MzIgVEpicjsJCQkvLyAgMHg2MTE4CisKKwkvLyBUeCBGQ1MgRXJyb3IgQ291bnRlcgorCXUzMiBURmNzOwkJCS8vICAweDYxMUMKKworCS8vIFR4IENvbnRyb2wgRnJhbWUgQ291bnRlcgorCXUzMiBUeENmOwkJCS8vICAweDYxMjAKKworCS8vIFR4IE92ZXJzaXplIEZyYW1lIENvdW50ZXIKKwl1MzIgVE92cjsJCQkvLyAgMHg2MTI0CisKKwkvLyBUeCBVbmRlcnNpemUgRnJhbWUgQ291bnRlcgorCXUzMiBUVW5kOwkJCS8vICAweDYxMjgKKworCS8vIFR4IEZyYWdtZW50cyBGcmFtZSBDb3VudGVyCisJdTMyIFRGcmc7CQkJLy8gIDB4NjEyQworCisJLy8gQ2FycnkgUmVnaXN0ZXIgT25lIFJlZ2lzdGVyCisJTUFDX1NUQVRfUkVHXzFfdCBDYXJyeTE7CS8vICAweDYxMzAKKworCS8vIENhcnJ5IFJlZ2lzdGVyIFR3byBSZWdpc3RlcgorCU1BQ19TVEFUX1JFR18yX3QgQ2FycnkyOwkvLyAgMHg2MTM0CisKKwkvLyBDYXJyeSBSZWdpc3RlciBPbmUgTWFzayBSZWdpc3RlcgorCU1BQ19TVEFUX1JFR18xX3QgQ2FycnkxTTsJLy8gIDB4NjEzOAorCisJLy8gQ2FycnkgUmVnaXN0ZXIgVHdvIE1hc2sgUmVnaXN0ZXIKKwlNQUNfU1RBVF9SRUdfMl90IENhcnJ5Mk07CS8vICAweDYxM0MKK30gTUFDX1NUQVRfdCwgKlBNQUNfU1RBVF90OworCisvKiBFTkQgT0YgTUFDIFNUQVQgUkVHSVNURVIgQUREUkVTUyBNQVAgKi8KKworCisvKiBTVEFSVCBPRiBNTUMgUkVHSVNURVIgQUREUkVTUyBNQVAgKi8KKworLyoKKyAqIHN0cnVjdHVyZSBmb3IgTWFpbiBNZW1vcnkgQ29udHJvbGxlciBDb250cm9sIHJlZyBpbiBtbWMgYWRkcmVzcyBtYXAuCisgKiBsb2NhdGVkIGF0IGFkZHJlc3MgMHg3MDAwCisgKi8KK3R5cGVkZWYgdW5pb24gX01NQ19DVFJMX3QgeworCXUzMiB2YWx1ZTsKKwlzdHJ1Y3QgeworI2lmZGVmIF9CSVRfRklFTERTX0hUT0wKKwkJdTMyIHJlc2VydmVkOjI1OwkJLy8gYml0cyA3LTMxCisJCXUzMiBmb3JjZV9jZToxOwkJLy8gYml0IDYKKwkJdTMyIHJ4ZG1hX2Rpc2FibGU6MTsJLy8gYml0IDUKKwkJdTMyIHR4ZG1hX2Rpc2FibGU6MTsJLy8gYml0IDQKKwkJdTMyIHR4bWFjX2Rpc2FibGU6MTsJLy8gYml0IDMKKwkJdTMyIHJ4bWFjX2Rpc2FibGU6MTsJLy8gYml0IDIKKwkJdTMyIGFyYl9kaXNhYmxlOjE7CQkvLyBiaXQgMQorCQl1MzIgbW1jX2VuYWJsZToxOwkJLy8gYml0IDAKKyNlbHNlCisJCXUzMiBtbWNfZW5hYmxlOjE7CQkvLyBiaXQgMAorCQl1MzIgYXJiX2Rpc2FibGU6MTsJCS8vIGJpdCAxCisJCXUzMiByeG1hY19kaXNhYmxlOjE7CS8vIGJpdCAyCisJCXUzMiB0eG1hY19kaXNhYmxlOjE7CS8vIGJpdCAzCisJCXUzMiB0eGRtYV9kaXNhYmxlOjE7CS8vIGJpdCA0CisJCXUzMiByeGRtYV9kaXNhYmxlOjE7CS8vIGJpdCA1CisJCXUzMiBmb3JjZV9jZToxOwkJLy8gYml0IDYKKwkJdTMyIHJlc2VydmVkOjI1OwkJLy8gYml0cyA3LTMxCisjZW5kaWYKKwl9IGJpdHM7Cit9IE1NQ19DVFJMX3QsICpQTU1DX0NUUkxfdDsKKworLyoKKyAqIHN0cnVjdHVyZSBmb3IgTWFpbiBNZW1vcnkgQ29udHJvbGxlciBIb3N0IE1lbW9yeSBBY2Nlc3MgQWRkcmVzcyByZWcgaW4gbW1jCisgKiBhZGRyZXNzIG1hcC4gIExvY2F0ZWQgYXQgYWRkcmVzcyAweDcwMDQKKyAqLwordHlwZWRlZiB1bmlvbiBfTU1DX1NSQU1fQUNDRVNTX3QgeworCXUzMiB2YWx1ZTsKKwlzdHJ1Y3QgeworI2lmZGVmIF9CSVRfRklFTERTX0hUT0wKKwkJdTMyIGJ5dGVfZW5hYmxlOjE2OwkvLyBiaXRzIDE2LTMxCisJCXUzMiByZXNlcnZlZDI6MjsJCS8vIGJpdHMgMTQtMTUKKwkJdTMyIHJlcV9hZGRyOjEwOwkJLy8gYml0cyA0LTEzCisJCXUzMiByZXNlcnZlZDE6MTsJCS8vIGJpdCAzCisJCXUzMiBpc19jdHJsX3dvcmQ6MTsJLy8gYml0IDIKKwkJdTMyIHdyX2FjY2VzczoxOwkJLy8gYml0IDEKKwkJdTMyIHJlcV9hY2Nlc3M6MTsJCS8vIGJpdCAwCisjZWxzZQorCQl1MzIgcmVxX2FjY2VzczoxOwkJLy8gYml0IDAKKwkJdTMyIHdyX2FjY2VzczoxOwkJLy8gYml0IDEKKwkJdTMyIGlzX2N0cmxfd29yZDoxOwkvLyBiaXQgMgorCQl1MzIgcmVzZXJ2ZWQxOjE7CQkvLyBiaXQgMworCQl1MzIgcmVxX2FkZHI6MTA7CQkvLyBiaXRzIDQtMTMKKwkJdTMyIHJlc2VydmVkMjoyOwkJLy8gYml0cyAxNC0xNQorCQl1MzIgYnl0ZV9lbmFibGU6MTY7CS8vIGJpdHMgMTYtMzEKKyNlbmRpZgorCX0gYml0czsKK30gTU1DX1NSQU1fQUNDRVNTX3QsICpQTU1DX1NSQU1fQUNDRVNTX3Q7CisKKy8qCisgKiBzdHJ1Y3R1cmUgZm9yIE1haW4gTWVtb3J5IENvbnRyb2xsZXIgSG9zdCBNZW1vcnkgQWNjZXNzIERhdGEgcmVnIGluIG1tYworICogYWRkcmVzcyBtYXAuICBMb2NhdGVkIGF0IGFkZHJlc3MgMHg3MDA4IC0gMHg3MDE0CisgKiBEZWZpbmVkIGVhcmxpZXIgKHUzMikKKyAqLworCisvKgorICogTWVtb3J5IENvbnRyb2wgTW9kdWxlIG9mIEpBR0NvcmUgQWRkcmVzcyBNYXBwaW5nCisgKi8KK3R5cGVkZWYgc3RydWN0IF9NTUNfdCB7CQkJLy8gTG9jYXRpb246CisJTU1DX0NUUkxfdCBtbWNfY3RybDsJCS8vICAweDcwMDAKKwlNTUNfU1JBTV9BQ0NFU1NfdCBzcmFtX2FjY2VzczsJLy8gIDB4NzAwNAorCXUzMiBzcmFtX3dvcmQxOwkJLy8gIDB4NzAwOAorCXUzMiBzcmFtX3dvcmQyOwkJLy8gIDB4NzAwQworCXUzMiBzcmFtX3dvcmQzOwkJLy8gIDB4NzAxMAorCXUzMiBzcmFtX3dvcmQ0OwkJLy8gIDB4NzAxNAorfSBNTUNfdCwgKlBNTUNfdDsKKworLyogRU5EIE9GIE1NQyBSRUdJU1RFUiBBRERSRVNTIE1BUCAqLworCisKKy8qIFNUQVJUIE9GIEVYUCBST00gUkVHSVNURVIgQUREUkVTUyBNQVAgKi8KKworLyoKKyAqIEV4cGFuc2lvbiBST00gTW9kdWxlIG9mIEpBR0NvcmUgQWRkcmVzcyBNYXBwaW5nCisgKi8KKworLyogVGFrZSB0aGlzIG91dCB1bnRpbCBpdCBpcyBub3QgZW1wdHkgKi8KKyNpZiAwCit0eXBlZGVmIHN0cnVjdCBfRVhQX1JPTV90IHsKKworfSBFWFBfUk9NX3QsICpQRVhQX1JPTV90OworI2VuZGlmCisKKy8qIEVORCBPRiBFWFAgUk9NIFJFR0lTVEVSIEFERFJFU1MgTUFQICovCisKKworLyoKKyAqIEpBR0NvcmUgQWRkcmVzcyBNYXBwaW5nCisgKi8KK3R5cGVkZWYgc3RydWN0IF9BRERSRVNTX01BUF90IHsKKwlHTE9CQUxfdCBnbG9iYWw7CisJLy8gdW51c2VkIHNlY3Rpb24gb2YgZ2xvYmFsIGFkZHJlc3MgbWFwCisJdTggdW51c2VkX2dsb2JhbFs0MDk2IC0gc2l6ZW9mKEdMT0JBTF90KV07CisJVFhETUFfdCB0eGRtYTsKKwkvLyB1bnVzZWQgc2VjdGlvbiBvZiB0eGRtYSBhZGRyZXNzIG1hcAorCXU4IHVudXNlZF90eGRtYVs0MDk2IC0gc2l6ZW9mKFRYRE1BX3QpXTsKKwlSWERNQV90IHJ4ZG1hOworCS8vIHVudXNlZCBzZWN0aW9uIG9mIHJ4ZG1hIGFkZHJlc3MgbWFwCisJdTggdW51c2VkX3J4ZG1hWzQwOTYgLSBzaXplb2YoUlhETUFfdCldOworCVRYTUFDX3QgdHhtYWM7CisJLy8gdW51c2VkIHNlY3Rpb24gb2YgdHhtYWMgYWRkcmVzcyBtYXAKKwl1OCB1bnVzZWRfdHhtYWNbNDA5NiAtIHNpemVvZihUWE1BQ190KV07CisJUlhNQUNfdCByeG1hYzsKKwkvLyB1bnVzZWQgc2VjdGlvbiBvZiByeG1hYyBhZGRyZXNzIG1hcAorCXU4IHVudXNlZF9yeG1hY1s0MDk2IC0gc2l6ZW9mKFJYTUFDX3QpXTsKKwlNQUNfdCBtYWM7CisJLy8gdW51c2VkIHNlY3Rpb24gb2YgbWFjIGFkZHJlc3MgbWFwCisJdTggdW51c2VkX21hY1s0MDk2IC0gc2l6ZW9mKE1BQ190KV07CisJTUFDX1NUQVRfdCBtYWNTdGF0OworCS8vIHVudXNlZCBzZWN0aW9uIG9mIG1hYyBzdGF0IGFkZHJlc3MgbWFwCisJdTggdW51c2VkX21hY19zdGF0WzQwOTYgLSBzaXplb2YoTUFDX1NUQVRfdCldOworCU1NQ190IG1tYzsKKwkvLyB1bnVzZWQgc2VjdGlvbiBvZiBtbWMgYWRkcmVzcyBtYXAKKwl1OCB1bnVzZWRfbW1jWzQwOTYgLSBzaXplb2YoTU1DX3QpXTsKKwkvLyB1bnVzZWQgc2VjdGlvbiBvZiBhZGRyZXNzIG1hcAorCXU4IHVudXNlZF9bMTAxNTgwOF07CisKKy8qIFRha2UgdGhpcyBvdXQgdW50aWwgaXQgaXMgbm90IGVtcHR5ICovCisjaWYgMAorCUVYUF9ST01fdCBleHBfcm9tOworI2VuZGlmCisKKwl1OCB1bnVzZWRfZXhwX3JvbVs0MDk2XTsJLy8gTUdTLXNpemUgVEJECisJdTggdW51c2VkX19bNTI0Mjg4XTsJLy8gdW51c2VkIHNlY3Rpb24gb2YgYWRkcmVzcyBtYXAKK30gQUREUkVTU19NQVBfdCwgKlBBRERSRVNTX01BUF90OworCisjZW5kaWYgLyogX0VUMTMxMF9BRERSRVNTX01BUF9IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2V0MTMxeC9ldDEzMTBfZWVwcm9tLmMgYi9kcml2ZXJzL3N0YWdpbmcvZXQxMzF4L2V0MTMxMF9lZXByb20uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMmIxOTRlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2V0MTMxeC9ldDEzMTBfZWVwcm9tLmMKQEAgLTAsMCArMSw0ODAgQEAKKy8qCisgKiBBZ2VyZSBTeXN0ZW1zIEluYy4KKyAqIDEwLzEwMC8xMDAwIEJhc2UtVCBFdGhlcm5ldCBEcml2ZXIgZm9yIHRoZSBFVDEzMDEgYW5kIEVUMTMxeCBzZXJpZXMgTUFDcworICoKKyAqIENvcHlyaWdodCCpIDIwMDUgQWdlcmUgU3lzdGVtcyBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogICBodHRwOi8vd3d3LmFnZXJlLmNvbQorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogZXQxMzEwX2VlcHJvbS5jIC0gQ29kZSB1c2VkIHRvIGFjY2VzcyB0aGUgZGV2aWNlJ3MgRUVQUk9NCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBTT0ZUV0FSRSBMSUNFTlNFCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBwcm92aWRlZCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgdGVybXMgYW5kIGNvbmRpdGlvbnMsCisgKiB3aGljaCB5b3Ugc2hvdWxkIHJlYWQgY2FyZWZ1bGx5IGJlZm9yZSB1c2luZyB0aGUgc29mdHdhcmUuICBVc2luZyB0aGlzCisgKiBzb2Z0d2FyZSBpbmRpY2F0ZXMgeW91ciBhY2NlcHRhbmNlIG9mIHRoZXNlIHRlcm1zIGFuZCBjb25kaXRpb25zLiAgSWYgeW91IGRvCisgKiBub3QgYWdyZWUgd2l0aCB0aGVzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucywgZG8gbm90IHVzZSB0aGUgc29mdHdhcmUuCisgKgorICogQ29weXJpZ2h0IKkgMjAwNSBBZ2VyZSBTeXN0ZW1zIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ugb3IgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbnMsIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiAuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcworICogICAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIERpc2NsYWltZXIgYXMgY29tbWVudHMgaW4gdGhlIGNvZGUgYXMKKyAqICAgIHdlbGwgYXMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIC4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICogICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgRGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgorICogICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogLiBOZWl0aGVyIHRoZSBuYW1lIG9mIEFnZXJlIFN5c3RlbXMgSW5jLiBub3IgdGhlIG5hbWVzIG9mIHRoZSBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogRGlzY2xhaW1lcgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgk0FTIElTlCBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLAorICogSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIElORlJJTkdFTUVOVCBBTkQgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIEFOWQorICogVVNFLCBNT0RJRklDQVRJT04gT1IgRElTVFJJQlVUSU9OIE9GIFRISVMgU09GVFdBUkUgSVMgU09MRUxZIEFUIFRIRSBVU0VSUyBPV04KKyAqIFJJU0suIElOIE5PIEVWRU5UIFNIQUxMIEFHRVJFIFNZU1RFTVMgSU5DLiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNICisgKiBEQU1BR0UuCisgKgorICovCisKKyNpbmNsdWRlICJldDEzMXhfdmVyc2lvbi5oIgorI2luY2x1ZGUgImV0MTMxeF9kZWJ1Zy5oIgorI2luY2x1ZGUgImV0MTMxeF9kZWZzLmgiCisKKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKworI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvcHRyYWNlLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2N0eXBlLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbi5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgorI2luY2x1ZGUgPGFzbS9iaXRvcHMuaD4KKworI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CisjaW5jbHVkZSA8bGludXgvaWZfYXJwLmg+CisjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CisKKyNpbmNsdWRlICJldDEzMTBfcGh5LmgiCisjaW5jbHVkZSAiZXQxMzEwX3BtLmgiCisjaW5jbHVkZSAiZXQxMzEwX2phZ2NvcmUuaCIKKyNpbmNsdWRlICJldDEzMTBfZWVwcm9tLmgiCisKKyNpbmNsdWRlICJldDEzMXhfYWRhcHRlci5oIgorI2luY2x1ZGUgImV0MTMxeF9pbml0cGNpLmgiCisjaW5jbHVkZSAiZXQxMzF4X2lzci5oIgorCisjaW5jbHVkZSAiZXQxMzEwX3R4LmgiCisKKworLyoKKyAqIEVFUFJPTSBEZWZpbmVzCisgKi8KKworLyogTEJDSUYgUmVnaXN0ZXIgR3JvdXBzIChhZGRyZXNzZWQgdmlhIDMyLWJpdCBvZmZzZXRzKSAqLworI2RlZmluZSBMQkNJRl9EV09SRDBfR1JPVVBfT0ZGU0VUICAgICAgIDB4QUMKKyNkZWZpbmUgTEJDSUZfRFdPUkQxX0dST1VQX09GRlNFVCAgICAgICAweEIwCisKKy8qIExCQ0lGIFJlZ2lzdGVycyAoYWRkcmVzc2VkIHZpYSA4LWJpdCBvZmZzZXRzKSAqLworI2RlZmluZSBMQkNJRl9BRERSRVNTX1JFR0lTVEVSX09GRlNFVCAgIDB4QUMKKyNkZWZpbmUgTEJDSUZfREFUQV9SRUdJU1RFUl9PRkZTRVQgICAgICAweEIwCisjZGVmaW5lIExCQ0lGX0NPTlRST0xfUkVHSVNURVJfT0ZGU0VUICAgMHhCMQorI2RlZmluZSBMQkNJRl9TVEFUVVNfUkVHSVNURVJfT0ZGU0VUICAgIDB4QjIKKworLyogTEJDSUYgQ29udHJvbCBSZWdpc3RlciBCaXRzICovCisjZGVmaW5lIExCQ0lGX0NPTlRST0xfU0VRVUVOVElBTF9SRUFEICAgMHgwMQorI2RlZmluZSBMQkNJRl9DT05UUk9MX1BBR0VfV1JJVEUgICAgICAgIDB4MDIKKyNkZWZpbmUgTEJDSUZfQ09OVFJPTF9VTlVTRUQxICAgICAgICAgICAweDA0CisjZGVmaW5lIExCQ0lGX0NPTlRST0xfRUVQUk9NX1JFTE9BRCAgICAgMHgwOAorI2RlZmluZSBMQkNJRl9DT05UUk9MX1VOVVNFRDIgICAgICAgICAgIDB4MTAKKyNkZWZpbmUgTEJDSUZfQ09OVFJPTF9UV09fQllURV9BRERSICAgICAweDIwCisjZGVmaW5lIExCQ0lGX0NPTlRST0xfSTJDX1dSSVRFICAgICAgICAgMHg0MAorI2RlZmluZSBMQkNJRl9DT05UUk9MX0xCQ0lGX0VOQUJMRSAgICAgIDB4ODAKKworLyogTEJDSUYgU3RhdHVzIFJlZ2lzdGVyIEJpdHMgKi8KKyNkZWZpbmUgTEJDSUZfU1RBVFVTX1BIWV9RVUVVRV9BVkFJTCAgICAweDAxCisjZGVmaW5lIExCQ0lGX1NUQVRVU19JMkNfSURMRSAgICAgICAgICAgMHgwMgorI2RlZmluZSBMQkNJRl9TVEFUVVNfQUNLX0VSUk9SICAgICAgICAgIDB4MDQKKyNkZWZpbmUgTEJDSUZfU1RBVFVTX0dFTkVSQUxfRVJST1IgICAgICAweDA4CisjZGVmaW5lIExCQ0lGX1NUQVRVU19VTlVTRUQgICAgICAgICAgICAgMHgzMAorI2RlZmluZSBMQkNJRl9TVEFUVVNfQ0hFQ0tTVU1fRVJST1IgICAgIDB4NDAKKyNkZWZpbmUgTEJDSUZfU1RBVFVTX0VFUFJPTV9QUkVTRU5UICAgICAweDgwCisKKy8qIE1pc2NlbGxhbmVvdXMgQ29uc3RyYWludHMgKi8KKyNkZWZpbmUgTUFYX05VTV9SRUdJU1RFUl9QT0xMUyAgICAgICAgICAxMDAwCisjZGVmaW5lIE1BWF9OVU1fV1JJVEVfUkVUUklFUyAgICAgICAgICAgMgorCisvKgorICogRGVmaW5lIG1hY3JvcyB0aGF0IGFsbG93IGluZGl2aWR1YWwgcmVnaXN0ZXIgdmFsdWVzIHRvIGJlIGV4dHJhY3RlZCBmcm9tIGEKKyAqIERXT1JEMSByZWdpc3RlciBncm91cGluZworICovCisjZGVmaW5lIEVYVFJBQ1RfREFUQV9SRUdJU1RFUih4KSAgICAodWludDhfdCkoeCAmIDB4RkYpCisjZGVmaW5lIEVYVFJBQ1RfU1RBVFVTX1JFR0lTVEVSKHgpICAodWludDhfdCkoKHggPj4gMTYpICYgMHhGRikKKyNkZWZpbmUgRVhUUkFDVF9DT05UUk9MX1JFRyh4KSAgICAgICh1aW50OF90KSgoeCA+PiA4KSAmIDB4RkYpCisKKy8qKgorICogRWVwcm9tV3JpdGVCeXRlIC0gV3JpdGUgYSBieXRlIHRvIHRoZSBFVDEzMTAncyBFRVBST00KKyAqIEBwQWRhcHRlcjogcG9pbnRlciB0byBvdXIgcHJpdmF0ZSBhZGFwdGVyIHN0cnVjdHVyZQorICogQHVuQWRkcmVzczogdGhlIGFkZHJlc3MgdG8gd3JpdGUKKyAqIEBiRGF0YTogdGhlIHZhbHVlIHRvIHdyaXRlCisgKiBAdW5FZXByb25JZDogdGhlIElEIG9mIHRoZSBFRVBST00KKyAqIEB1bkFkZHJlc3NpbmdNb2RlOiBob3cgdGhlIEVFUFJPTSBpcyB0byBiZSBhY2Nlc3NlZAorICoKKyAqIFJldHVybnMgU1VDQ0VTUyBvciBGQUlMVVJFCisgKi8KK2ludDMyX3QgRWVwcm9tV3JpdGVCeXRlKHN0cnVjdCBldDEzMXhfYWRhcHRlciAqcEFkYXB0ZXIsIHVpbnQzMl90IHVuQWRkcmVzcywKKwkJCXVpbnQ4X3QgYkRhdGEsIHVpbnQzMl90IHVuRWVwcm9tSWQsCisJCQl1aW50MzJfdCB1bkFkZHJlc3NpbmdNb2RlKQoreworICAgICAgICBzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHBBZGFwdGVyLT5wZGV2OworCWludDMyX3QgbkluZGV4OworCWludDMyX3QgblJldHJpZXM7CisJaW50MzJfdCBuRXJyb3IgPSBmYWxzZTsKKwlpbnQzMl90IG5JMkNXcml0ZUFjdGl2ZSA9IDA7CisJaW50MzJfdCBuV3JpdGVTdWNjZXNzZnVsID0gMDsKKwl1aW50OF90IGJDb250cm9sOworCXVpbnQ4X3QgYlN0YXR1cyA9IDA7CisJdWludDMyX3QgdW5Ed29yZDEgPSAwOworCXVpbnQzMl90IHVuRGF0YSA9IDA7CisKKwkvKgorCSAqIFRoZSBmb2xsb3dpbmcgZXhjZXJwdCBpcyBmcm9tICJTZXJpYWwgRUVQUk9NIEhXIERlc2lnbgorCSAqIFNwZWNpZmljYXRpb24iIFZlcnNpb24gMC45MiAoOS8yMC8yMDA0KToKKwkgKgorCSAqIFNpbmdsZSBCeXRlIFdyaXRlcworCSAqCisJICogRm9yIGFuIEVFUFJPTSwgYW4gSTJDIHNpbmdsZSBieXRlIHdyaXRlIGlzIGRlZmluZWQgYXMgYSBTVEFSVAorCSAqIGNvbmRpdGlvbiBmb2xsb3dlZCBieSB0aGUgZGV2aWNlIGFkZHJlc3MsIEVFUFJPTSBhZGRyZXNzLCBvbmUgYnl0ZQorCSAqIG9mIGRhdGEgYW5kIGEgU1RPUCBjb25kaXRpb24uICBUaGUgU1RPUCBjb25kaXRpb24gd2lsbCB0cmlnZ2VyIHRoZQorCSAqIEVFUFJPTSdzIGludGVybmFsbHkgdGltZWQgd3JpdGUgY3ljbGUgdG8gdGhlIG5vbnZvbGF0aWxlIG1lbW9yeS4KKwkgKiBBbGwgaW5wdXRzIGFyZSBkaXNhYmxlZCBkdXJpbmcgdGhpcyB3cml0ZSBjeWNsZSBhbmQgdGhlIEVFUFJPTSB3aWxsCisJICogbm90IHJlc3BvbmQgdG8gYW55IGFjY2VzcyB1bnRpbCB0aGUgaW50ZXJuYWwgd3JpdGUgaXMgY29tcGxldGUuCisJICogVGhlIHN0ZXBzIHRvIGV4ZWN1dGUgYSBzaW5nbGUgYnl0ZSB3cml0ZSBhcmUgYXMgZm9sbG93czoKKwkgKgorCSAqIDEuIENoZWNrIExCQ0lGIFN0YXR1cyBSZWdpc3RlciBmb3IgYml0cyA2ICYgMzoyIGFsbCBlcXVhbCB0byAwIGFuZAorCSAqICAgIGJpdHMgNywxOjAgYm90aCBlcXVhbCB0byAxLCBhdCBsZWFzdCBvbmNlIGFmdGVyIHJlc2V0LgorCSAqICAgIFN1YnNlcXVlbnQgb3BlcmF0aW9ucyBuZWVkIG9ubHkgdG8gY2hlY2sgdGhhdCBiaXRzIDE6MCBhcmUKKwkgKiAgICBlcXVhbCB0byAxIHByaW9yIHRvIHN0YXJ0aW5nIGEgc2luZ2xlIGJ5dGUgd3JpdGUuCisJICoKKwkgKiAyLiBXcml0ZSB0byB0aGUgTEJDSUYgQ29udHJvbCBSZWdpc3RlcjogIGJpdCA3PTEsIGJpdCA2PTEsIGJpdCAzPTAsCisJICogICAgYW5kIGJpdHMgMTowIGJvdGggPTAuICBCaXQgNSBzaG91bGQgYmUgc2V0IGFjY29yZGluZyB0byB0aGUKKwkgKiAgICB0eXBlIG9mIEVFUFJPTSBiZWluZyBhY2Nlc3NlZCAoMT10d28gYnl0ZSBhZGRyZXNzaW5nLCAwPW9uZQorCSAqICAgIGJ5dGUgYWRkcmVzc2luZykuCisJICoKKwkgKiAzLiBXcml0ZSB0aGUgYWRkcmVzcyB0byB0aGUgTEJDSUYgQWRkcmVzcyBSZWdpc3Rlci4KKwkgKgorCSAqIDQuIFdyaXRlIHRoZSBkYXRhIHRvIHRoZSBMQkNJRiBEYXRhIFJlZ2lzdGVyICh0aGUgSTJDIHdyaXRlIHdpbGwKKwkgKiAgICBiZWdpbikuCisJICoKKwkgKiA1LiBNb25pdG9yIGJpdCAxOjAgb2YgdGhlIExCQ0lGIFN0YXR1cyBSZWdpc3Rlci4gIFdoZW4gYml0cyAxOjAgYXJlCisJICogICAgYm90aCBlcXVhbCB0byAxLCB0aGUgSTJDIHdyaXRlIGhhcyBjb21wbGV0ZWQgYW5kIHRoZSBpbnRlcm5hbAorCSAqICAgIHdyaXRlIGN5Y2xlIG9mIHRoZSBFRVBST00gaXMgYWJvdXQgdG8gc3RhcnQuIChiaXRzIDE6MCA9IDAxIGlzCisJICogICAgYSBsZWdhbCBzdGF0ZSB3aGlsZSB3YWl0aW5nIGZyb20gYm90aCBlcXVhbCB0byAxLCBidXQgYml0cworCSAqICAgIDE6MCA9IDEwIGlzIGludmFsaWQgYW5kIGltcGxpZXMgdGhhdCBzb21ldGhpbmcgaXMgYnJva2VuKS4KKwkgKgorCSAqIDYuIENoZWNrIGJpdCAzIG9mIHRoZSBMQkNJRiBTdGF0dXMgUmVnaXN0ZXIuICBJZiAgZXF1YWwgdG8gMSwgYW4KKwkgKiAgICBlcnJvciBoYXMgb2NjdXJyZWQuCisJICoKKwkgKiA3LiBDaGVjayBiaXQgMiBvZiB0aGUgTEJDSUYgU3RhdHVzIFJlZ2lzdGVyLiAgSWYgZXF1YWwgdG8gMSBhbiBBQ0sKKwkgKiAgICBlcnJvciBoYXMgb2NjdXJyZWQgb24gdGhlIGFkZHJlc3MgcGhhc2Ugb2YgdGhlIHdyaXRlLiAgVGhpcworCSAqICAgIGNvdWxkIGJlIGR1ZSB0byBhbiBhY3R1YWwgaGFyZHdhcmUgZmFpbHVyZSBvciB0aGUgRUVQUk9NIG1heQorCSAqICAgIHN0aWxsIGJlIGluIGl0cyBpbnRlcm5hbCB3cml0ZSBjeWNsZSBmcm9tIGEgcHJldmlvdXMgd3JpdGUuCisJICogICAgVGhpcyB3cml0ZSBvcGVyYXRpb24gd2FzIGlnbm9yZWQgYW5kIG11c3QgYmUgcmVwZWF0ZWQgbGF0ZXIuCisJICoKKwkgKiA4LiBTZXQgYml0IDYgb2YgdGhlIExCQ0lGIENvbnRyb2wgUmVnaXN0ZXIgPSAwLiBJZiBhbm90aGVyIHdyaXRlIGlzCisJICogICAgcmVxdWlyZWQsIGdvIHRvIHN0ZXAgMS4KKwkgKi8KKworCS8qIFN0ZXAgMTogKi8KKwlmb3IgKG5JbmRleCA9IDA7IG5JbmRleCA8IE1BWF9OVU1fUkVHSVNURVJfUE9MTFM7IG5JbmRleCsrKSB7CisJCS8qIFJlYWQgcmVnaXN0ZXJzIGdyb3VwZWQgaW4gRFdPUkQxICovCisJCWlmIChwY2lfcmVhZF9jb25maWdfZHdvcmQocGRldiwgTEJDSUZfRFdPUkQxX0dST1VQX09GRlNFVCwKKwkJCQkJICAmdW5Ed29yZDEpKSB7CisJCQluRXJyb3IgPSAxOworCQkJYnJlYWs7CisJCX0KKworCQliU3RhdHVzID0gRVhUUkFDVF9TVEFUVVNfUkVHSVNURVIodW5Ed29yZDEpOworCisJCWlmIChiU3RhdHVzICYgTEJDSUZfU1RBVFVTX1BIWV9RVUVVRV9BVkFJTCAmJgorCQkgICAgYlN0YXR1cyAmIExCQ0lGX1NUQVRVU19JMkNfSURMRSkgeworCQkgICAgCS8qIGJpdHMgMTowIGFyZSBlcXVhbCB0byAxICovCisJCQlicmVhazsKKwkJfQorCX0KKworCWlmIChuRXJyb3IgfHwgKG5JbmRleCA+PSBNQVhfTlVNX1JFR0lTVEVSX1BPTExTKSkgeworCQlyZXR1cm4gRkFJTFVSRTsKKwl9CisKKwkvKiBTdGVwIDI6ICovCisJYkNvbnRyb2wgPSAwOworCWJDb250cm9sIHw9IExCQ0lGX0NPTlRST0xfTEJDSUZfRU5BQkxFIHwgTEJDSUZfQ09OVFJPTF9JMkNfV1JJVEU7CisKKwlpZiAodW5BZGRyZXNzaW5nTW9kZSA9PSBEVUFMX0JZVEUpIHsKKwkJYkNvbnRyb2wgfD0gTEJDSUZfQ09OVFJPTF9UV09fQllURV9BRERSOworCX0KKworCWlmIChwY2lfd3JpdGVfY29uZmlnX2J5dGUocGRldiwgTEJDSUZfQ09OVFJPTF9SRUdJU1RFUl9PRkZTRVQsCisJCQkJICBiQ29udHJvbCkpIHsKKwkJcmV0dXJuIEZBSUxVUkU7CisJfQorCisJbkkyQ1dyaXRlQWN0aXZlID0gMTsKKworCS8qIFByZXBhcmUgRUVQUk9NIGFkZHJlc3MgZm9yIFN0ZXAgMyAqLworCXVuQWRkcmVzcyB8PSAodW5BZGRyZXNzaW5nTW9kZSA9PSBEVUFMX0JZVEUpID8KKwkgICAgKHVuRWVwcm9tSWQgPDwgMTYpIDogKHVuRWVwcm9tSWQgPDwgOCk7CisKKwlmb3IgKG5SZXRyaWVzID0gMDsgblJldHJpZXMgPCBNQVhfTlVNX1dSSVRFX1JFVFJJRVM7IG5SZXRyaWVzKyspIHsKKwkJLyogU3RlcCAzOiovCisJCWlmIChwY2lfd3JpdGVfY29uZmlnX2R3b3JkKHBkZXYsIExCQ0lGX0FERFJFU1NfUkVHSVNURVJfT0ZGU0VULAorCQkJCQkgICB1bkFkZHJlc3MpKSB7CisJCQlicmVhazsKKwkJfQorCisJCS8qIFN0ZXAgNDogKi8KKwkJaWYgKHBjaV93cml0ZV9jb25maWdfYnl0ZShwZGV2LCBMQkNJRl9EQVRBX1JFR0lTVEVSX09GRlNFVCwKKwkJCQkJICBiRGF0YSkpIHsKKwkJCWJyZWFrOworCQl9CisKKwkJLyogU3RlcCA1OiAqLworCQlmb3IgKG5JbmRleCA9IDA7IG5JbmRleCA8IE1BWF9OVU1fUkVHSVNURVJfUE9MTFM7IG5JbmRleCsrKSB7CisJCQkvKiBSZWFkIHJlZ2lzdGVycyBncm91cGVkIGluIERXT1JEMSAqLworCQkJaWYgKHBjaV9yZWFkX2NvbmZpZ19kd29yZChwZGV2LAorCQkJCQkJICBMQkNJRl9EV09SRDFfR1JPVVBfT0ZGU0VULAorCQkJCQkJICAmdW5Ed29yZDEpKSB7CisJCQkJbkVycm9yID0gMTsKKwkJCQlicmVhazsKKwkJCX0KKworCQkJYlN0YXR1cyA9IEVYVFJBQ1RfU1RBVFVTX1JFR0lTVEVSKHVuRHdvcmQxKTsKKworCQkJaWYgKGJTdGF0dXMgJiBMQkNJRl9TVEFUVVNfUEhZX1FVRVVFX0FWQUlMICYmCisJCQkgICAgYlN0YXR1cyAmIExCQ0lGX1NUQVRVU19JMkNfSURMRSkgeworCQkJICAgIAkvKiBJMkMgd3JpdGUgY29tcGxldGUgKi8KKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCisJCWlmIChuRXJyb3IgfHwgKG5JbmRleCA+PSBNQVhfTlVNX1JFR0lTVEVSX1BPTExTKSkgeworCQkJYnJlYWs7CisJCX0KKworCQkvKgorCQkgKiBTdGVwIDY6IERvbid0IGJyZWFrIGhlcmUgaWYgd2UgYXJlIHJldmlzaW9uIDEsIHRoaXMgaXMKKwkJICoJICAgc28gd2UgZG8gYSBibGluZCB3cml0ZSBmb3IgbG9hZCBidWcuCisJICAgICAgICAgKi8KKwkJaWYgKGJTdGF0dXMgJiBMQkNJRl9TVEFUVVNfR0VORVJBTF9FUlJPUgorCQkgICAgJiYgcEFkYXB0ZXItPlJldmlzaW9uSUQgPT0gMCkgeworCQkJYnJlYWs7CisJCX0KKworCQkvKiBTdGVwIDcgKi8KKwkJaWYgKGJTdGF0dXMgJiBMQkNJRl9TVEFUVVNfQUNLX0VSUk9SKSB7CisJCQkvKgorCQkJICogVGhpcyBjb3VsZCBiZSBkdWUgdG8gYW4gYWN0dWFsIGhhcmR3YXJlIGZhaWx1cmUKKwkJCSAqIG9yIHRoZSBFRVBST00gbWF5IHN0aWxsIGJlIGluIGl0cyBpbnRlcm5hbCB3cml0ZQorCQkJICogY3ljbGUgZnJvbSBhIHByZXZpb3VzIHdyaXRlLiBUaGlzIHdyaXRlIG9wZXJhdGlvbgorCQkJICogd2FzIGlnbm9yZWQgYW5kIG11c3QgYmUgcmVwZWF0ZWQgbGF0ZXIuCisJCQkgKi8KKwkJCXVkZWxheSgxMCk7CisJCQljb250aW51ZTsKKwkJfQorCisJCW5Xcml0ZVN1Y2Nlc3NmdWwgPSAxOworCQlicmVhazsKKwl9CisKKwkvKiBTdGVwIDg6ICovCisJdWRlbGF5KDEwKTsKKwluSW5kZXggPSAwOworCXdoaWxlIChuSTJDV3JpdGVBY3RpdmUpIHsKKwkJYkNvbnRyb2wgJj0gfkxCQ0lGX0NPTlRST0xfSTJDX1dSSVRFOworCisJCWlmIChwY2lfd3JpdGVfY29uZmlnX2J5dGUocGRldiwgTEJDSUZfQ09OVFJPTF9SRUdJU1RFUl9PRkZTRVQsCisJCQkJCSAgYkNvbnRyb2wpKSB7CisJCQluV3JpdGVTdWNjZXNzZnVsID0gMDsKKwkJfQorCisJCS8qIERvIHJlYWQgdW50aWwgaW50ZXJuYWwgQUNLX0VSUk9SIGdvZXMgYXdheSBtZWFuaW5nIHdyaXRlCisJCSAqIGNvbXBsZXRlZAorCQkgKi8KKwkJZG8geworCQkJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChwZGV2LAorCQkJCQkgICAgICAgTEJDSUZfQUREUkVTU19SRUdJU1RFUl9PRkZTRVQsCisJCQkJCSAgICAgICB1bkFkZHJlc3MpOworCQkJZG8geworCQkJCXBjaV9yZWFkX2NvbmZpZ19kd29yZChwZGV2LAorCQkJCQlMQkNJRl9EQVRBX1JFR0lTVEVSX09GRlNFVCwgJnVuRGF0YSk7CisJCQl9IHdoaWxlICgodW5EYXRhICYgMHgwMDAxMDAwMCkgPT0gMCk7CisJCX0gd2hpbGUgKHVuRGF0YSAmIDB4MDAwNDAwMDApOworCisJCWJDb250cm9sID0gRVhUUkFDVF9DT05UUk9MX1JFRyh1bkRhdGEpOworCisJCWlmIChiQ29udHJvbCAhPSAweEMwIHx8IG5JbmRleCA9PSAxMDAwMCkgeworCQkJYnJlYWs7CisJCX0KKworCQluSW5kZXgrKzsKKwl9CisKKwlyZXR1cm4gbldyaXRlU3VjY2Vzc2Z1bCA/IFNVQ0NFU1MgOiBGQUlMVVJFOworfQorCisvKioKKyAqIEVlcHJvbVJlYWRCeXRlIC0gUmVhZCBhIGJ5dGUgZnJvbSB0aGUgRVQxMzEwJ3MgRUVQUk9NCisgKiBAcEFkYXB0ZXI6IHBvaW50ZXIgdG8gb3VyIHByaXZhdGUgYWRhcHRlciBzdHJ1Y3R1cmUKKyAqIEB1bkFkZHJlc3M6IHRoZSBhZGRyZXNzIGZyb20gd2hpY2ggdG8gcmVhZAorICogQHBiRGF0YTogYSBwb2ludGVyIHRvIGEgYnl0ZSBpbiB3aGljaCB0byBzdG9yZSB0aGUgdmFsdWUgb2YgdGhlIHJlYWQKKyAqIEB1bkVlcHJvbklkOiB0aGUgSUQgb2YgdGhlIEVFUFJPTQorICogQHVuQWRkcmVzc2luZ01vZGU6IGhvdyB0aGUgRUVQUk9NIGlzIHRvIGJlIGFjY2Vzc2VkCisgKgorICogUmV0dXJucyBTVUNDRVNTIG9yIEZBSUxVUkUKKyAqLworaW50MzJfdCBFZXByb21SZWFkQnl0ZShzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKnBBZGFwdGVyLCB1aW50MzJfdCB1bkFkZHJlc3MsCisJCSAgICAgICB1aW50OF90ICpwYkRhdGEsIHVpbnQzMl90IHVuRWVwcm9tSWQsCisJCSAgICAgICB1aW50MzJfdCB1bkFkZHJlc3NpbmdNb2RlKQoreworICAgICAgICBzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHBBZGFwdGVyLT5wZGV2OworCWludDMyX3QgbkluZGV4OworCWludDMyX3QgbkVycm9yID0gMDsKKwl1aW50OF90IGJDb250cm9sOworCXVpbnQ4X3QgYlN0YXR1cyA9IDA7CisJdWludDMyX3QgdW5Ed29yZDEgPSAwOworCisJLyoKKwkgKiBUaGUgZm9sbG93aW5nIGV4Y2VycHQgaXMgZnJvbSAiU2VyaWFsIEVFUFJPTSBIVyBEZXNpZ24KKwkgKiBTcGVjaWZpY2F0aW9uIiBWZXJzaW9uIDAuOTIgKDkvMjAvMjAwNCk6CisJICoKKwkgKiBTaW5nbGUgQnl0ZSBSZWFkcworCSAqCisJICogQSBzaW5nbGUgYnl0ZSByZWFkIGlzIHNpbWlsYXIgdG8gdGhlIHNpbmdsZSBieXRlIHdyaXRlLCB3aXRoIHRoZQorCSAqIGV4Y2VwdGlvbiBvZiB0aGUgZGF0YSBmbG93OgorCSAqCisJICogMS4gQ2hlY2sgTEJDSUYgU3RhdHVzIFJlZ2lzdGVyIGZvciBiaXRzIDYgJiAzOjIgYWxsIGVxdWFsIHRvIDAgYW5kCisJICogICAgYml0cyA3LDE6MCBib3RoIGVxdWFsIHRvIDEsIGF0IGxlYXN0IG9uY2UgYWZ0ZXIgcmVzZXQuCisJICogICAgU3Vic2VxdWVudCBvcGVyYXRpb25zIG5lZWQgb25seSB0byBjaGVjayB0aGF0IGJpdHMgMTowIGFyZSBlcXVhbAorCSAqICAgIHRvIDEgcHJpb3IgdG8gc3RhcnRpbmcgYSBzaW5nbGUgYnl0ZSByZWFkLgorCSAqCisJICogMi4gV3JpdGUgdG8gdGhlIExCQ0lGIENvbnRyb2wgUmVnaXN0ZXI6ICBiaXQgNz0xLCBiaXQgNj0wLCBiaXQgMz0wLAorCSAqICAgIGFuZCBiaXRzIDE6MCBib3RoID0wLiAgQml0IDUgc2hvdWxkIGJlIHNldCBhY2NvcmRpbmcgdG8gdGhlIHR5cGUKKwkgKiAgICBvZiBFRVBST00gYmVpbmcgYWNjZXNzZWQgKDE9dHdvIGJ5dGUgYWRkcmVzc2luZywgMD1vbmUgYnl0ZQorCSAqICAgIGFkZHJlc3NpbmcpLgorCSAqCisJICogMy4gV3JpdGUgdGhlIGFkZHJlc3MgdG8gdGhlIExCQ0lGIEFkZHJlc3MgUmVnaXN0ZXIgKEkyQyByZWFkIHdpbGwKKwkgKiAgICBiZWdpbikuCisJICoKKwkgKiA0LiBNb25pdG9yIGJpdCAwIG9mIHRoZSBMQkNJRiBTdGF0dXMgUmVnaXN0ZXIuICBXaGVuID0xLCBJMkMgcmVhZAorCSAqICAgIGlzIGNvbXBsZXRlLiAoaWYgYml0IDEgPTEgYW5kIGJpdCAwIHN0YXlzID0wLCBhIGhhcmR3YXJlIGZhaWx1cmUKKwkgKiAgICBoYXMgb2NjdXJyZWQpLgorCSAqCisJICogNS4gQ2hlY2sgYml0IDIgb2YgdGhlIExCQ0lGIFN0YXR1cyBSZWdpc3Rlci4gIElmID0xLCB0aGVuIGFuIGVycm9yCisJICogICAgaGFzIG9jY3VycmVkLiAgVGhlIGRhdGEgdGhhdCBoYXMgYmVlbiByZXR1cm5lZCBmcm9tIHRoZSBQSFkgbWF5CisJICogICAgYmUgaW52YWxpZC4KKwkgKgorCSAqIDYuIFJlZ2FyZGxlc3Mgb2YgZXJyb3Igc3RhdHVzLCByZWFkIGRhdGEgYnl0ZSBmcm9tIExCQ0lGIERhdGEKKwkgKiAgICBSZWdpc3Rlci4gIElmIGFub3RoZXIgYnl0ZSBpcyByZXF1aXJlZCwgZ28gdG8gc3RlcCAxLgorCSAqLworCisJLyogU3RlcCAxOiAqLworCWZvciAobkluZGV4ID0gMDsgbkluZGV4IDwgTUFYX05VTV9SRUdJU1RFUl9QT0xMUzsgbkluZGV4KyspIHsKKwkJLyogUmVhZCByZWdpc3RlcnMgZ3JvdXBlZCBpbiBEV09SRDEgKi8KKwkJaWYgKHBjaV9yZWFkX2NvbmZpZ19kd29yZChwZGV2LCBMQkNJRl9EV09SRDFfR1JPVVBfT0ZGU0VULAorCQkJCQkgICZ1bkR3b3JkMSkpIHsKKwkJCW5FcnJvciA9IDE7CisJCQlicmVhazsKKwkJfQorCisJCWJTdGF0dXMgPSBFWFRSQUNUX1NUQVRVU19SRUdJU1RFUih1bkR3b3JkMSk7CisKKwkJaWYgKGJTdGF0dXMgJiBMQkNJRl9TVEFUVVNfUEhZX1FVRVVFX0FWQUlMICYmCisJCSAgICBiU3RhdHVzICYgTEJDSUZfU1RBVFVTX0kyQ19JRExFKSB7CisJCQkvKiBiaXRzIDE6MCBhcmUgZXF1YWwgdG8gMSAqLworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlpZiAobkVycm9yIHx8IChuSW5kZXggPj0gTUFYX05VTV9SRUdJU1RFUl9QT0xMUykpIHsKKwkJcmV0dXJuIEZBSUxVUkU7CisJfQorCisJLyogU3RlcCAyOiAqLworCWJDb250cm9sID0gMDsKKwliQ29udHJvbCB8PSBMQkNJRl9DT05UUk9MX0xCQ0lGX0VOQUJMRTsKKworCWlmICh1bkFkZHJlc3NpbmdNb2RlID09IERVQUxfQllURSkgeworCQliQ29udHJvbCB8PSBMQkNJRl9DT05UUk9MX1RXT19CWVRFX0FERFI7CisJfQorCisJaWYgKHBjaV93cml0ZV9jb25maWdfYnl0ZShwZGV2LCBMQkNJRl9DT05UUk9MX1JFR0lTVEVSX09GRlNFVCwKKwkJCQkgIGJDb250cm9sKSkgeworCQlyZXR1cm4gRkFJTFVSRTsKKwl9CisKKwkvKiBTdGVwIDM6ICovCisJdW5BZGRyZXNzIHw9ICh1bkFkZHJlc3NpbmdNb2RlID09IERVQUxfQllURSkgPworCSAgICAodW5FZXByb21JZCA8PCAxNikgOiAodW5FZXByb21JZCA8PCA4KTsKKworCWlmIChwY2lfd3JpdGVfY29uZmlnX2R3b3JkKHBkZXYsIExCQ0lGX0FERFJFU1NfUkVHSVNURVJfT0ZGU0VULAorCQkJCSAgIHVuQWRkcmVzcykpIHsKKwkJcmV0dXJuIEZBSUxVUkU7CisJfQorCisJLyogU3RlcCA0OiAqLworCWZvciAobkluZGV4ID0gMDsgbkluZGV4IDwgTUFYX05VTV9SRUdJU1RFUl9QT0xMUzsgbkluZGV4KyspIHsKKwkJLyogUmVhZCByZWdpc3RlcnMgZ3JvdXBlZCBpbiBEV09SRDEgKi8KKwkJaWYgKHBjaV9yZWFkX2NvbmZpZ19kd29yZChwZGV2LCBMQkNJRl9EV09SRDFfR1JPVVBfT0ZGU0VULAorCQkJCQkgICZ1bkR3b3JkMSkpIHsKKwkJCW5FcnJvciA9IDE7CisJCQlicmVhazsKKwkJfQorCisJCWJTdGF0dXMgPSBFWFRSQUNUX1NUQVRVU19SRUdJU1RFUih1bkR3b3JkMSk7CisKKwkJaWYgKGJTdGF0dXMgJiBMQkNJRl9TVEFUVVNfUEhZX1FVRVVFX0FWQUlMCisJCSAgICAmJiBiU3RhdHVzICYgTEJDSUZfU1RBVFVTX0kyQ19JRExFKSB7CisJCQkvKiBJMkMgcmVhZCBjb21wbGV0ZSAqLworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlpZiAobkVycm9yIHx8IChuSW5kZXggPj0gTUFYX05VTV9SRUdJU1RFUl9QT0xMUykpIHsKKwkJcmV0dXJuIEZBSUxVUkU7CisJfQorCisJLyogU3RlcCA2OiAqLworCSpwYkRhdGEgPSBFWFRSQUNUX0RBVEFfUkVHSVNURVIodW5Ed29yZDEpOworCisJcmV0dXJuIChiU3RhdHVzICYgTEJDSUZfU1RBVFVTX0FDS19FUlJPUikgPyBGQUlMVVJFIDogU1VDQ0VTUzsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ldDEzMXgvZXQxMzEwX2VlcHJvbS5oIGIvZHJpdmVycy9zdGFnaW5nL2V0MTMxeC9ldDEzMTBfZWVwcm9tLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWI2ZjhhZAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ldDEzMXgvZXQxMzEwX2VlcHJvbS5oCkBAIC0wLDAgKzEsODkgQEAKKy8qCisgKiBBZ2VyZSBTeXN0ZW1zIEluYy4KKyAqIDEwLzEwMC8xMDAwIEJhc2UtVCBFdGhlcm5ldCBEcml2ZXIgZm9yIHRoZSBFVDEzMDEgYW5kIEVUMTMxeCBzZXJpZXMgTUFDcworICoKKyAqIENvcHlyaWdodCCpIDIwMDUgQWdlcmUgU3lzdGVtcyBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogICBodHRwOi8vd3d3LmFnZXJlLmNvbQorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogZXQxMzEwX2VlcHJvbS5oIC0gRGVmaW5lcywgc3RydWN0cywgZW51bXMsIHByb3RvdHlwZXMsIGV0Yy4gdXNlZCBmb3IgRUVQUk9NCisgKiAgICAgICAgICAgICAgICAgICBhY2Nlc3Mgcm91dGluZXMKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIFNPRlRXQVJFIExJQ0VOU0UKKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIHByb3ZpZGVkIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyB0ZXJtcyBhbmQgY29uZGl0aW9ucywKKyAqIHdoaWNoIHlvdSBzaG91bGQgcmVhZCBjYXJlZnVsbHkgYmVmb3JlIHVzaW5nIHRoZSBzb2Z0d2FyZS4gIFVzaW5nIHRoaXMKKyAqIHNvZnR3YXJlIGluZGljYXRlcyB5b3VyIGFjY2VwdGFuY2Ugb2YgdGhlc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMuICBJZiB5b3UgZG8KKyAqIG5vdCBhZ3JlZSB3aXRoIHRoZXNlIHRlcm1zIGFuZCBjb25kaXRpb25zLCBkbyBub3QgdXNlIHRoZSBzb2Z0d2FyZS4KKyAqCisgKiBDb3B5cmlnaHQgqSAyMDA1IEFnZXJlIFN5c3RlbXMgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBvciBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9ucywgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqIC4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzCisgKiAgICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgRGlzY2xhaW1lciBhcyBjb21tZW50cyBpbiB0aGUgY29kZSBhcworICogICAgd2VsbCBhcyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBEaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisgKiAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiAuIE5laXRoZXIgdGhlIG5hbWUgb2YgQWdlcmUgU3lzdGVtcyBJbmMuIG5vciB0aGUgbmFtZXMgb2YgdGhlIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBEaXNjbGFpbWVyCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCCTQVMgSVOUIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsCisgKiBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgSU5GUklOR0VNRU5UIEFORCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgQU5ZCisgKiBVU0UsIE1PRElGSUNBVElPTiBPUiBESVNUUklCVVRJT04gT0YgVEhJUyBTT0ZUV0FSRSBJUyBTT0xFTFkgQVQgVEhFIFVTRVJTIE9XTgorICogUklTSy4gSU4gTk8gRVZFTlQgU0hBTEwgQUdFUkUgU1lTVEVNUyBJTkMuIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gKKyAqIERBTUFHRS4KKyAqCisgKi8KKworI2lmbmRlZiBfX0VUMTMxMF9FRVBST01fSF9fCisjZGVmaW5lIF9fRVQxMzEwX0VFUFJPTV9IX18KKworI2luY2x1ZGUgImV0MTMxMF9hZGRyZXNzX21hcC5oIgorCisjaWZuZGVmIFNVQ0NFU1MKKyNkZWZpbmUgU1VDQ0VTUwkJMAorI2RlZmluZSBGQUlMVVJFCQkxCisjZW5kaWYKKworI2lmbmRlZiBSRUFECisjZGVmaW5lIFJFQUQJCTAKKyNkZWZpbmUgV1JJVEUJCTEKKyNlbmRpZgorCisjaWZuZGVmIFNJTkdMRV9CWVRFCisjZGVmaW5lIFNJTkdMRV9CWVRFCTAKKyNkZWZpbmUgRFVBTF9CWVRFCTEKKyNlbmRpZgorCisvKiBGb3J3YXJkIGRlY2xhcmF0aW9uIG9mIHRoZSBwcml2YXRlIGFkYXB0ZXIgc3RydWN0dXJlICovCitzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXI7CisKK2ludDMyX3QgRWVwcm9tV3JpdGVCeXRlKHN0cnVjdCBldDEzMXhfYWRhcHRlciAqYWRhcHRlciwgdTMyIHVuQWRkcmVzcywKKwkJCXU4IGJEYXRhLCB1MzIgdW5FZXByb21JZCwKKwkJCXUzMiB1bkFkZHJlc3NpbmdNb2RlKTsKK2ludDMyX3QgRWVwcm9tUmVhZEJ5dGUoc3RydWN0IGV0MTMxeF9hZGFwdGVyICphZGFwdGVyLCB1MzIgdW5BZGRyZXNzLAorCQkgICAgICAgdTggKnBiRGF0YSwgdTMyIHVuRWVwcm9tSWQsCisJCSAgICAgICB1MzIgdW5BZGRyZXNzaW5nTW9kZSk7CisKKyNlbmRpZiAvKiBfRVQxMzEwX0VFUFJPTV9IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2V0MTMxeC9ldDEzMTBfamFnY29yZS5jIGIvZHJpdmVycy9zdGFnaW5nL2V0MTMxeC9ldDEzMTBfamFnY29yZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk5M2IzMGUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvZXQxMzF4L2V0MTMxMF9qYWdjb3JlLmMKQEAgLTAsMCArMSwyMjAgQEAKKy8qCisgKiBBZ2VyZSBTeXN0ZW1zIEluYy4KKyAqIDEwLzEwMC8xMDAwIEJhc2UtVCBFdGhlcm5ldCBEcml2ZXIgZm9yIHRoZSBFVDEzMDEgYW5kIEVUMTMxeCBzZXJpZXMgTUFDcworICoKKyAqIENvcHlyaWdodCCpIDIwMDUgQWdlcmUgU3lzdGVtcyBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogICBodHRwOi8vd3d3LmFnZXJlLmNvbQorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogZXQxMzEwX2phZ2NvcmUuYyAtIEFsbCBjb2RlIHBlcnRhaW5pbmcgdG8gdGhlIEVUMTMwMS9FVDEzMXgncyBKQUdjb3JlCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBTT0ZUV0FSRSBMSUNFTlNFCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBwcm92aWRlZCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgdGVybXMgYW5kIGNvbmRpdGlvbnMsCisgKiB3aGljaCB5b3Ugc2hvdWxkIHJlYWQgY2FyZWZ1bGx5IGJlZm9yZSB1c2luZyB0aGUgc29mdHdhcmUuICBVc2luZyB0aGlzCisgKiBzb2Z0d2FyZSBpbmRpY2F0ZXMgeW91ciBhY2NlcHRhbmNlIG9mIHRoZXNlIHRlcm1zIGFuZCBjb25kaXRpb25zLiAgSWYgeW91IGRvCisgKiBub3QgYWdyZWUgd2l0aCB0aGVzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucywgZG8gbm90IHVzZSB0aGUgc29mdHdhcmUuCisgKgorICogQ29weXJpZ2h0IKkgMjAwNSBBZ2VyZSBTeXN0ZW1zIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ugb3IgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbnMsIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiAuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcworICogICAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIERpc2NsYWltZXIgYXMgY29tbWVudHMgaW4gdGhlIGNvZGUgYXMKKyAqICAgIHdlbGwgYXMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIC4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICogICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgRGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgorICogICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogLiBOZWl0aGVyIHRoZSBuYW1lIG9mIEFnZXJlIFN5c3RlbXMgSW5jLiBub3IgdGhlIG5hbWVzIG9mIHRoZSBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogRGlzY2xhaW1lcgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgk0FTIElTlCBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLAorICogSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIElORlJJTkdFTUVOVCBBTkQgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIEFOWQorICogVVNFLCBNT0RJRklDQVRJT04gT1IgRElTVFJJQlVUSU9OIE9GIFRISVMgU09GVFdBUkUgSVMgU09MRUxZIEFUIFRIRSBVU0VSUyBPV04KKyAqIFJJU0suIElOIE5PIEVWRU5UIFNIQUxMIEFHRVJFIFNZU1RFTVMgSU5DLiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNICisgKiBEQU1BR0UuCisgKgorICovCisKKyNpbmNsdWRlICJldDEzMXhfdmVyc2lvbi5oIgorI2luY2x1ZGUgImV0MTMxeF9kZWJ1Zy5oIgorI2luY2x1ZGUgImV0MTMxeF9kZWZzLmgiCisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKworI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvcHRyYWNlLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2N0eXBlLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbi5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgorI2luY2x1ZGUgPGFzbS9iaXRvcHMuaD4KKworI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CisjaW5jbHVkZSA8bGludXgvaWZfYXJwLmg+CisjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CisKKyNpbmNsdWRlICJldDEzMTBfcGh5LmgiCisjaW5jbHVkZSAiZXQxMzEwX3BtLmgiCisjaW5jbHVkZSAiZXQxMzEwX2phZ2NvcmUuaCIKKworI2luY2x1ZGUgImV0MTMxeF9hZGFwdGVyLmgiCisjaW5jbHVkZSAiZXQxMzF4X2luaXRwY2kuaCIKKworLyogRGF0YSBmb3IgZGVidWdnaW5nIGZhY2lsaXRpZXMgKi8KKyNpZmRlZiBDT05GSUdfRVQxMzFYX0RFQlVHCitleHRlcm4gZGJnX2luZm9fdCAqZXQxMzF4X2RiZ2luZm87CisjZW5kaWYgLyogQ09ORklHX0VUMTMxWF9ERUJVRyAqLworCisvKioKKyAqIENvbmZpZ0dsb2JhbFJlZ3MgLSBVc2VkIHRvIGNvbmZpZ3VyZSB0aGUgZ2xvYmFsIHJlZ2lzdGVycyBvbiB0aGUgSkFHQ29yZQorICogQHBBZHBhdGVyOiBwb2ludGVyIHRvIG91ciBhZGFwdGVyIHN0cnVjdHVyZQorICovCit2b2lkIENvbmZpZ0dsb2JhbFJlZ3Moc3RydWN0IGV0MTMxeF9hZGFwdGVyICpwQWRhcHRlcikKK3sKKwlzdHJ1Y3QgX0dMT0JBTF90IF9faW9tZW0gKnBHYmwgPSAmcEFkYXB0ZXItPkNTUkFkZHJlc3MtPmdsb2JhbDsKKworCURCR19FTlRFUihldDEzMXhfZGJnaW5mbyk7CisKKwlpZiAocEFkYXB0ZXItPlJlZ2lzdHJ5UGh5TG9vcGJrID09IGZhbHNlKSB7CisJCWlmIChwQWRhcHRlci0+UmVnaXN0cnlKdW1ib1BhY2tldCA8IDIwNDgpIHsKKwkJCS8qIFR4IC8gUnhETUEgYW5kIFR4L1J4IE1BQyBpbnRlcmZhY2VzIGhhdmUgYSAxayB3b3JkCisJCQkgKiBibG9jayBvZiBSQU0gdGhhdCB0aGUgZHJpdmVyIGNhbiBzcGxpdCBiZXR3ZWVuIFR4CisJCQkgKiBhbmQgUnggYXMgaXQgZGVzaXJlcy4gIE91ciBkZWZhdWx0IGlzIHRvIHNwbGl0IGl0CisJCQkgKiA1MC81MDoKKwkJCSAqLworCQkJd3JpdGVsKDAsICZwR2JsLT5yeHFfc3RhcnRfYWRkci52YWx1ZSk7CisJCQl3cml0ZWwocEFkYXB0ZXItPlJlZ2lzdHJ5UnhNZW1FbmQsCisJCQkgICAgICAgJnBHYmwtPnJ4cV9lbmRfYWRkci52YWx1ZSk7CisJCQl3cml0ZWwocEFkYXB0ZXItPlJlZ2lzdHJ5UnhNZW1FbmQgKyAxLAorCQkJICAgICAgICZwR2JsLT50eHFfc3RhcnRfYWRkci52YWx1ZSk7CisJCQl3cml0ZWwoSU5URVJOQUxfTUVNX1NJWkUgLSAxLAorCQkJICAgICAgICZwR2JsLT50eHFfZW5kX2FkZHIudmFsdWUpOworCQl9IGVsc2UgaWYgKHBBZGFwdGVyLT5SZWdpc3RyeUp1bWJvUGFja2V0IDwgODE5MikgeworCQkJLyogRm9yIGp1bWJvIHBhY2tldHMgPiAyayBidXQgPCA4aywgc3BsaXQgNTAtNTAuICovCisJCQl3cml0ZWwoMCwgJnBHYmwtPnJ4cV9zdGFydF9hZGRyLnZhbHVlKTsKKwkJCXdyaXRlbChJTlRFUk5BTF9NRU1fUlhfT0ZGU0VULAorCQkJICAgICAgICZwR2JsLT5yeHFfZW5kX2FkZHIudmFsdWUpOworCQkJd3JpdGVsKElOVEVSTkFMX01FTV9SWF9PRkZTRVQgKyAxLAorCQkJICAgICAgICZwR2JsLT50eHFfc3RhcnRfYWRkci52YWx1ZSk7CisJCQl3cml0ZWwoSU5URVJOQUxfTUVNX1NJWkUgLSAxLAorCQkJICAgICAgICZwR2JsLT50eHFfZW5kX2FkZHIudmFsdWUpOworCQl9IGVsc2UgeworCQkJLyogOTIxNiBpcyB0aGUgb25seSBwYWNrZXQgc2l6ZSBncmVhdGVyIHRoYW4gOGsgdGhhdAorCQkJICogaXMgYXZhaWxhYmxlLiBUaGUgVHggYnVmZmVyIGhhcyB0byBiZSBiaWcgZW5vdWdoCisJCQkgKiBmb3Igb25lIHdob2xlIHBhY2tldCBvbiB0aGUgVHggc2lkZS4gV2UnbGwgbWFrZQorCQkJICogdGhlIFR4IDk0MDgsIGFuZCBnaXZlIHRoZSByZXN0IHRvIFJ4CisJCQkgKi8KKwkJCXdyaXRlbCgweDAwMDAsICZwR2JsLT5yeHFfc3RhcnRfYWRkci52YWx1ZSk7CisJCQl3cml0ZWwoMHgwMWIzLCAmcEdibC0+cnhxX2VuZF9hZGRyLnZhbHVlKTsKKwkJCXdyaXRlbCgweDAxYjQsICZwR2JsLT50eHFfc3RhcnRfYWRkci52YWx1ZSk7CisJCQl3cml0ZWwoSU5URVJOQUxfTUVNX1NJWkUgLSAxLAorCQkJICAgICAgICZwR2JsLT50eHFfZW5kX2FkZHIudmFsdWUpOworCQl9CisKKwkJLyogSW5pdGlhbGl6ZSB0aGUgbG9vcGJhY2sgcmVnaXN0ZXIuIERpc2FibGUgYWxsIGxvb3BiYWNrcy4gKi8KKwkJd3JpdGVsKDAsICZwR2JsLT5sb29wYmFjay52YWx1ZSk7CisJfSBlbHNlIHsKKwkJLyogRm9yIFBIWSBMaW5lIGxvb3BiYWNrLCB0aGUgbWVtb3J5IGlzIGNvbmZpZ3VyZWQgYXMgaWYgVHgKKwkJICogYW5kIFJ4IGJvdGggaGF2ZSBhbGwgdGhlIG1lbW9yeS4gIFRoaXMgaXMgYmVjYXVzZSB0aGUKKwkJICogUnhNQUMgd2lsbCB3cml0ZSBkYXRhIGludG8gdGhlIHNwYWNlLCBhbmQgdGhlIFR4TUFDIHdpbGwKKwkJICogcmVhZCBpdCBvdXQuCisJCSAqLworCQl3cml0ZWwoMCwgJnBHYmwtPnJ4cV9zdGFydF9hZGRyLnZhbHVlKTsKKwkJd3JpdGVsKElOVEVSTkFMX01FTV9TSVpFIC0gMSwgJnBHYmwtPnJ4cV9lbmRfYWRkci52YWx1ZSk7CisJCXdyaXRlbCgwLCAmcEdibC0+dHhxX3N0YXJ0X2FkZHIudmFsdWUpOworCQl3cml0ZWwoSU5URVJOQUxfTUVNX1NJWkUgLSAxLCAmcEdibC0+dHhxX2VuZF9hZGRyLnZhbHVlKTsKKworCQkvKiBJbml0aWFsaXplIHRoZSBsb29wYmFjayByZWdpc3RlciAoTUFDIGxvb3BiYWNrKS4gKi8KKwkJd3JpdGVsKDEsICZwR2JsLT5sb29wYmFjay52YWx1ZSk7CisJfQorCisJLyogTVNJIFJlZ2lzdGVyICovCisJd3JpdGVsKDAsICZwR2JsLT5tc2lfY29uZmlnLnZhbHVlKTsKKworCS8qIEJ5IGRlZmF1bHQsIGRpc2FibGUgdGhlIHdhdGNoZG9nIHRpbWVyLiAgSXQgd2lsbCBiZSBlbmFibGVkIHdoZW4KKwkgKiBhIHBhY2tldCBpcyBxdWV1ZWQuCisJICovCisJd3JpdGVsKDAsICZwR2JsLT53YXRjaGRvZ190aW1lcik7CisKKwlEQkdfTEVBVkUoZXQxMzF4X2RiZ2luZm8pOworfQorCisvKioKKyAqIENvbmZpZ01NQ1JlZ3MgLSBVc2VkIHRvIGNvbmZpZ3VyZSB0aGUgbWFpbiBtZW1vcnkgcmVnaXN0ZXJzIGluIHRoZSBKQUdDb3JlCisgKiBAcEFkYXB0ZXI6IHBvaW50ZXIgdG8gb3VyIGFkYXB0ZXIgc3RydWN0dXJlCisgKi8KK3ZvaWQgQ29uZmlnTU1DUmVncyhzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKnBBZGFwdGVyKQoreworCU1NQ19DVFJMX3QgbW1jX2N0cmwgPSB7IDAgfTsKKworCURCR19FTlRFUihldDEzMXhfZGJnaW5mbyk7CisKKwkvKiBBbGwgd2UgbmVlZCB0byBkbyBpcyBpbml0aWFsaXplIHRoZSBNZW1vcnkgQ29udHJvbCBSZWdpc3RlciAqLworCW1tY19jdHJsLmJpdHMuZm9yY2VfY2UgPSAweDA7CisJbW1jX2N0cmwuYml0cy5yeGRtYV9kaXNhYmxlID0gMHgwOworCW1tY19jdHJsLmJpdHMudHhkbWFfZGlzYWJsZSA9IDB4MDsKKwltbWNfY3RybC5iaXRzLnR4bWFjX2Rpc2FibGUgPSAweDA7CisJbW1jX2N0cmwuYml0cy5yeG1hY19kaXNhYmxlID0gMHgwOworCW1tY19jdHJsLmJpdHMuYXJiX2Rpc2FibGUgPSAweDA7CisJbW1jX2N0cmwuYml0cy5tbWNfZW5hYmxlID0gMHgxOworCisJd3JpdGVsKG1tY19jdHJsLnZhbHVlLCAmcEFkYXB0ZXItPkNTUkFkZHJlc3MtPm1tYy5tbWNfY3RybC52YWx1ZSk7CisKKwlEQkdfTEVBVkUoZXQxMzF4X2RiZ2luZm8pOworfQorCit2b2lkIGV0MTMxeF9lbmFibGVfaW50ZXJydXB0cyhzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJdWludDMyX3QgTWFza1ZhbHVlOworCisJLyogRW5hYmxlIGFsbCBnbG9iYWwgaW50ZXJydXB0cyAqLworCWlmICgoYWRhcHRlci0+Rmxvd0NvbnRyb2wgPT0gVHhPbmx5KSB8fCAoYWRhcHRlci0+Rmxvd0NvbnRyb2wgPT0gQm90aCkpIHsKKwkJTWFza1ZhbHVlID0gSU5UX01BU0tfRU5BQkxFOworCX0gZWxzZSB7CisJCU1hc2tWYWx1ZSA9IElOVF9NQVNLX0VOQUJMRV9OT19GTE9XOworCX0KKworCWlmIChhZGFwdGVyLT5Ecml2ZXJOb1BoeUFjY2VzcykgeworCQlNYXNrVmFsdWUgfD0gMHgxMDAwMDsKKwl9CisKKwlhZGFwdGVyLT5DYWNoZWRNYXNrVmFsdWUudmFsdWUgPSBNYXNrVmFsdWU7CisJd3JpdGVsKE1hc2tWYWx1ZSwgJmFkYXB0ZXItPkNTUkFkZHJlc3MtPmdsb2JhbC5pbnRfbWFzay52YWx1ZSk7Cit9CisKK3ZvaWQgZXQxMzF4X2Rpc2FibGVfaW50ZXJydXB0cyhzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKiBhZGFwdGVyKQoreworCS8qIERpc2FibGUgYWxsIGdsb2JhbCBpbnRlcnJ1cHRzICovCisJYWRhcHRlci0+Q2FjaGVkTWFza1ZhbHVlLnZhbHVlID0gSU5UX01BU0tfRElTQUJMRTsKKwl3cml0ZWwoSU5UX01BU0tfRElTQUJMRSwgJmFkYXB0ZXItPkNTUkFkZHJlc3MtPmdsb2JhbC5pbnRfbWFzay52YWx1ZSk7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZXQxMzF4L2V0MTMxMF9qYWdjb3JlLmggYi9kcml2ZXJzL3N0YWdpbmcvZXQxMzF4L2V0MTMxMF9qYWdjb3JlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWZjODI5MwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ldDEzMXgvZXQxMzEwX2phZ2NvcmUuaApAQCAtMCwwICsxLDExMiBAQAorLyoKKyAqIEFnZXJlIFN5c3RlbXMgSW5jLgorICogMTAvMTAwLzEwMDAgQmFzZS1UIEV0aGVybmV0IERyaXZlciBmb3IgdGhlIEVUMTMwMSBhbmQgRVQxMzF4IHNlcmllcyBNQUNzCisgKgorICogQ29weXJpZ2h0IKkgMjAwNSBBZ2VyZSBTeXN0ZW1zIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgIGh0dHA6Ly93d3cuYWdlcmUuY29tCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBldDEzMTBfamFnY29yZS5oIC0gRGVmaW5lcywgc3RydWN0cywgZW51bXMsIHByb3RvdHlwZXMsIGV0Yy4gcGVydGFpbmluZyB0bworICogICAgICAgICAgICAgICAgICAgIHRoZSBKQUdDb3JlCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBTT0ZUV0FSRSBMSUNFTlNFCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBwcm92aWRlZCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgdGVybXMgYW5kIGNvbmRpdGlvbnMsCisgKiB3aGljaCB5b3Ugc2hvdWxkIHJlYWQgY2FyZWZ1bGx5IGJlZm9yZSB1c2luZyB0aGUgc29mdHdhcmUuICBVc2luZyB0aGlzCisgKiBzb2Z0d2FyZSBpbmRpY2F0ZXMgeW91ciBhY2NlcHRhbmNlIG9mIHRoZXNlIHRlcm1zIGFuZCBjb25kaXRpb25zLiAgSWYgeW91IGRvCisgKiBub3QgYWdyZWUgd2l0aCB0aGVzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucywgZG8gbm90IHVzZSB0aGUgc29mdHdhcmUuCisgKgorICogQ29weXJpZ2h0IKkgMjAwNSBBZ2VyZSBTeXN0ZW1zIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ugb3IgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbnMsIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiAuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcworICogICAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIERpc2NsYWltZXIgYXMgY29tbWVudHMgaW4gdGhlIGNvZGUgYXMKKyAqICAgIHdlbGwgYXMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIC4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICogICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgRGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgorICogICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogLiBOZWl0aGVyIHRoZSBuYW1lIG9mIEFnZXJlIFN5c3RlbXMgSW5jLiBub3IgdGhlIG5hbWVzIG9mIHRoZSBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogRGlzY2xhaW1lcgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgk0FTIElTlCBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLAorICogSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIElORlJJTkdFTUVOVCBBTkQgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIEFOWQorICogVVNFLCBNT0RJRklDQVRJT04gT1IgRElTVFJJQlVUSU9OIE9GIFRISVMgU09GVFdBUkUgSVMgU09MRUxZIEFUIFRIRSBVU0VSUyBPV04KKyAqIFJJU0suIElOIE5PIEVWRU5UIFNIQUxMIEFHRVJFIFNZU1RFTVMgSU5DLiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNICisgKiBEQU1BR0UuCisgKgorICovCisKKyNpZm5kZWYgX19FVDEzMTBfSkFHQ09SRV9IX18KKyNkZWZpbmUgX19FVDEzMTBfSkFHQ09SRV9IX18KKworI2luY2x1ZGUgImV0MTMxMF9hZGRyZXNzX21hcC5oIgorCisKKyNkZWZpbmUgSU5URVJOQUxfTUVNX1NJWkUgICAgICAgMHg0MDAJLy8xMDI0IG9mIGludGVybmFsIG1lbW9yeQorI2RlZmluZSBJTlRFUk5BTF9NRU1fUlhfT0ZGU0VUICAweDFGRgkvLzUwJSAgIFR4LCA1MCUgICBSeAorCisjZGVmaW5lIFJFR1NfTUFYX0FSUkFZICAgICAgICAgIDQwOTYKKworLyoKKyAqIEZvciBpbnRlcnJ1cHRzLCBub3JtYWwgcnVubmluZyBpczoKKyAqICAgICAgIHJ4ZG1hX3hmcl9kb25lLCBwaHlfaW50ZXJydXB0LCBtYWNfc3RhdF9pbnRlcnJ1cHQsCisgKiAgICAgICB3YXRjaGRvZ19pbnRlcnJ1cHQgJiB0eGRtYV94ZmVyX2RvbmUKKyAqCisgKiBJbiBib3RoIGNhc2VzLCB3aGVuIGZsb3cgY29udHJvbCBpcyBlbmFibGVkIGZvciBlaXRoZXIgVHggb3IgYmktZGlyZWN0aW9uLAorICogd2UgYWRkaXRpb25hbCBlbmFibGUgcnhfZmJyMF9sb3cgYW5kIHJ4X2ZicjFfbG93LCBzbyB3ZSBrbm93IHdoZW4gdGhlCisgKiBidWZmZXIgcmluZ3MgYXJlIHJ1bm5pbmcgbG93LgorICovCisjZGVmaW5lIElOVF9NQVNLX0RJU0FCTEUgICAgICAgICAgICAweGZmZmZmZmZmCisKKy8vIE5PVEU6IE1hc2tpbmcgb3V0IE1BQ19TVEFUIEludGVycnVwdCBmb3Igbm93Li4uCisvLyNkZWZpbmUgSU5UX01BU0tfRU5BQkxFICAgICAgICAgICAgIDB4ZmZmNmJmMTcKKy8vI2RlZmluZSBJTlRfTUFTS19FTkFCTEVfTk9fRkxPVyAgICAgMHhmZmY2YmZkNworI2RlZmluZSBJTlRfTUFTS19FTkFCTEUgICAgICAgICAgICAgMHhmZmZlYmYxNworI2RlZmluZSBJTlRfTUFTS19FTkFCTEVfTk9fRkxPVyAgICAgMHhmZmZlYmZkNworCisvKiBEQVRBIFNUUlVDVFVSRVMgRk9SIERJUkVDVCBSRUdJU1RFUiBBQ0NFU1MgKi8KKwordHlwZWRlZiBzdHJ1Y3QgeworCXU4IGJSZWFkV3JpdGU7CisJdTMyIG5SZWdDb3VudDsKKwl1MzIgbkRhdGFbUkVHU19NQVhfQVJSQVldOworCXUzMiBuT2Zmc2V0c1tSRUdTX01BWF9BUlJBWV07Cit9IEpBR0NPUkVfQUNDRVNTX1JFR1MsICpQSkFHQ09SRV9BQ0NFU1NfUkVHUzsKKwordHlwZWRlZiBzdHJ1Y3QgeworCXU4IGJSZWFkV3JpdGU7CisJdTMyIG5EYXRhV2lkdGg7CisJdTMyIG5SZWdDb3VudDsKKwl1MzIgbk9mZnNldHNbUkVHU19NQVhfQVJSQVldOworCXUzMiBuRGF0YVtSRUdTX01BWF9BUlJBWV07Cit9IFBDSV9DRkdfU1BBQ0VfUkVHUywgKlBQQ0lfQ0ZHX1NQQUNFX1JFR1M7CisKKy8qIEZvcndhcmQgZGVjbGFyYXRpb24gb2YgdGhlIHByaXZhdGUgYWRhcHRlciBzdHJ1Y3R1cmUgKi8KK3N0cnVjdCBldDEzMXhfYWRhcHRlcjsKKwordm9pZCBDb25maWdHbG9iYWxSZWdzKHN0cnVjdCBldDEzMXhfYWRhcHRlciAqcEFkYXB0ZXIpOwordm9pZCBDb25maWdNTUNSZWdzKHN0cnVjdCBldDEzMXhfYWRhcHRlciAqcEFkYXB0ZXIpOwordm9pZCBldDEzMXhfZW5hYmxlX2ludGVycnVwdHMoc3RydWN0IGV0MTMxeF9hZGFwdGVyICphZGFwdGVyKTsKK3ZvaWQgZXQxMzF4X2Rpc2FibGVfaW50ZXJydXB0cyhzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKmFkYXB0ZXIpOworCisjZW5kaWYgLyogX19FVDEzMTBfSkFHQ09SRV9IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ldDEzMXgvZXQxMzEwX21hYy5jIGIvZHJpdmVycy9zdGFnaW5nL2V0MTMxeC9ldDEzMTBfbWFjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTkyNDk2OAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ldDEzMXgvZXQxMzEwX21hYy5jCkBAIC0wLDAgKzEsNzkyIEBACisvKgorICogQWdlcmUgU3lzdGVtcyBJbmMuCisgKiAxMC8xMDAvMTAwMCBCYXNlLVQgRXRoZXJuZXQgRHJpdmVyIGZvciB0aGUgRVQxMzAxIGFuZCBFVDEzMXggc2VyaWVzIE1BQ3MKKyAqCisgKiBDb3B5cmlnaHQgqSAyMDA1IEFnZXJlIFN5c3RlbXMgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICAgaHR0cDovL3d3dy5hZ2VyZS5jb20KKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIGV0MTMxMF9tYWMuYyAtIEFsbCBjb2RlIGFuZCByb3V0aW5lcyBwZXJ0YWluaW5nIHRvIHRoZSBNQUMKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIFNPRlRXQVJFIExJQ0VOU0UKKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIHByb3ZpZGVkIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyB0ZXJtcyBhbmQgY29uZGl0aW9ucywKKyAqIHdoaWNoIHlvdSBzaG91bGQgcmVhZCBjYXJlZnVsbHkgYmVmb3JlIHVzaW5nIHRoZSBzb2Z0d2FyZS4gIFVzaW5nIHRoaXMKKyAqIHNvZnR3YXJlIGluZGljYXRlcyB5b3VyIGFjY2VwdGFuY2Ugb2YgdGhlc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMuICBJZiB5b3UgZG8KKyAqIG5vdCBhZ3JlZSB3aXRoIHRoZXNlIHRlcm1zIGFuZCBjb25kaXRpb25zLCBkbyBub3QgdXNlIHRoZSBzb2Z0d2FyZS4KKyAqCisgKiBDb3B5cmlnaHQgqSAyMDA1IEFnZXJlIFN5c3RlbXMgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBvciBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9ucywgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqIC4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzCisgKiAgICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgRGlzY2xhaW1lciBhcyBjb21tZW50cyBpbiB0aGUgY29kZSBhcworICogICAgd2VsbCBhcyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBEaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisgKiAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiAuIE5laXRoZXIgdGhlIG5hbWUgb2YgQWdlcmUgU3lzdGVtcyBJbmMuIG5vciB0aGUgbmFtZXMgb2YgdGhlIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBEaXNjbGFpbWVyCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCCTQVMgSVOUIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsCisgKiBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgSU5GUklOR0VNRU5UIEFORCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgQU5ZCisgKiBVU0UsIE1PRElGSUNBVElPTiBPUiBESVNUUklCVVRJT04gT0YgVEhJUyBTT0ZUV0FSRSBJUyBTT0xFTFkgQVQgVEhFIFVTRVJTIE9XTgorICogUklTSy4gSU4gTk8gRVZFTlQgU0hBTEwgQUdFUkUgU1lTVEVNUyBJTkMuIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gKKyAqIERBTUFHRS4KKyAqCisgKi8KKworI2luY2x1ZGUgImV0MTMxeF92ZXJzaW9uLmgiCisjaW5jbHVkZSAiZXQxMzF4X2RlYnVnLmgiCisjaW5jbHVkZSAiZXQxMzF4X2RlZnMuaCIKKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorCisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9wdHJhY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvY3R5cGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC90aW1lci5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2luLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CisjaW5jbHVkZSA8YXNtL2JpdG9wcy5oPgorCisjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KKyNpbmNsdWRlIDxsaW51eC9pZl9hcnAuaD4KKyNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KKyNpbmNsdWRlIDxsaW51eC9jcmMzMi5oPgorCisjaW5jbHVkZSAiZXQxMzEwX3BoeS5oIgorI2luY2x1ZGUgImV0MTMxMF9wbS5oIgorI2luY2x1ZGUgImV0MTMxMF9qYWdjb3JlLmgiCisjaW5jbHVkZSAiZXQxMzEwX21hYy5oIgorCisjaW5jbHVkZSAiZXQxMzF4X2FkYXB0ZXIuaCIKKyNpbmNsdWRlICJldDEzMXhfaW5pdHBjaS5oIgorCisvKiBEYXRhIGZvciBkZWJ1Z2dpbmcgZmFjaWxpdGllcyAqLworI2lmZGVmIENPTkZJR19FVDEzMVhfREVCVUcKK2V4dGVybiBkYmdfaW5mb190ICpldDEzMXhfZGJnaW5mbzsKKyNlbmRpZiAvKiBDT05GSUdfRVQxMzFYX0RFQlVHICovCisKKy8qKgorICogQ29uZmlnTWFjUmVnczEgLSBJbml0aWFsaXplIHRoZSBmaXJzdCBwYXJ0IG9mIE1BQyByZWdzCisgKiBAcEFkcGF0ZXI6IHBvaW50ZXIgdG8gb3VyIGFkYXB0ZXIgc3RydWN0dXJlCisgKi8KK3ZvaWQgQ29uZmlnTUFDUmVnczEoc3RydWN0IGV0MTMxeF9hZGFwdGVyICpwQWRhcHRlcikKK3sKKwlzdHJ1Y3QgX01BQ190IF9faW9tZW0gKnBNYWMgPSAmcEFkYXB0ZXItPkNTUkFkZHJlc3MtPm1hYzsKKwlNQUNfU1RBVElPTl9BRERSMV90IHN0YXRpb24xOworCU1BQ19TVEFUSU9OX0FERFIyX3Qgc3RhdGlvbjI7CisJTUFDX0lQR190IGlwZzsKKwlNQUNfSEZEUF90IGhmZHA7CisJTUlJX01HTVRfQ0ZHX3QgbWlpX21nbXRfY2ZnOworCisJREJHX0VOVEVSKGV0MTMxeF9kYmdpbmZvKTsKKworCS8qIEZpcnN0IHdlIG5lZWQgdG8gcmVzZXQgZXZlcnl0aGluZy4gIFdyaXRlIHRvIE1BQyBjb25maWd1cmF0aW9uCisJICogcmVnaXN0ZXIgMSB0byBwZXJmb3JtIHJlc2V0LgorCSAqLworCXdyaXRlbCgweEMwMEYwMDAwLCAmcE1hYy0+Y2ZnMS52YWx1ZSk7CisKKwkvKiBOZXh0IGxldHMgY29uZmlndXJlIHRoZSBNQUMgSW50ZXItcGFja2V0IGdhcCByZWdpc3RlciAqLworCWlwZy5iaXRzLm5vbl9CMkJfaXBnXzEgPSAweDM4OwkJLy8gNThkCisJaXBnLmJpdHMubm9uX0IyQl9pcGdfMiA9IDB4NTg7CQkvLyA4OGQKKwlpcGcuYml0cy5taW5faWZnX2VuZm9yY2UgPSAweDUwOwkvLyA4MGQKKwlpcGcuYml0cy5CMkJfaXBnID0gMHg2MDsJCS8vIDk2ZAorCXdyaXRlbChpcGcudmFsdWUsICZwTWFjLT5pcGcudmFsdWUpOworCisJLyogTmV4dCBsZXRzIGNvbmZpZ3VyZSB0aGUgTUFDIEhhbGYgRHVwbGV4IHJlZ2lzdGVyICovCisJaGZkcC5iaXRzLmFsdF9iZWJfdHJ1bmMgPSAweEE7CisJaGZkcC5iaXRzLmFsdF9iZWJfZW5hYmxlID0gMHgwOworCWhmZHAuYml0cy5icF9ub19iYWNrb2ZmID0gMHgwOworCWhmZHAuYml0cy5ub19iYWNrb2ZmID0gMHgwOworCWhmZHAuYml0cy5leGNlc3NfZGVmZXIgPSAweDE7CisJaGZkcC5iaXRzLnJleG1pdF9tYXggPSAweEY7CisJaGZkcC5iaXRzLmNvbGxfd2luZG93ID0gMHgzNzsJCS8vIDU1ZAorCXdyaXRlbChoZmRwLnZhbHVlLCAmcE1hYy0+aGZkcC52YWx1ZSk7CisKKwkvKiBOZXh0IGxldHMgY29uZmlndXJlIHRoZSBNQUMgSW50ZXJmYWNlIENvbnRyb2wgcmVnaXN0ZXIgKi8KKwl3cml0ZWwoMCwgJnBNYWMtPmlmX2N0cmwudmFsdWUpOworCisJLyogTGV0J3MgbW92ZSBvbiB0byBzZXR0aW5nIHVwIHRoZSBtaWkgbWFuYWdtZW50IGNvbmZpZ3VyYXRpb24gKi8KKwltaWlfbWdtdF9jZmcuYml0cy5yZXNldF9taWlfbWdtdCA9IDA7CisJbWlpX21nbXRfY2ZnLmJpdHMuc2Nhbl9hdXRvX2luY3JlbXQgPSAwOworCW1paV9tZ210X2NmZy5iaXRzLnByZWFtYmxlX3N1cHByZXNzID0gMDsKKwltaWlfbWdtdF9jZmcuYml0cy5tZ210X2Nsa19yZXNldCA9IDB4NzsKKwl3cml0ZWwobWlpX21nbXRfY2ZnLnZhbHVlLCAmcE1hYy0+bWlpX21nbXRfY2ZnLnZhbHVlKTsKKworCS8qIE5leHQgbGV0cyBjb25maWd1cmUgdGhlIE1BQyBTdGF0aW9uIEFkZHJlc3MgcmVnaXN0ZXIuICBUaGVzZQorCSAqIHZhbHVlcyBhcmUgcmVhZCBmcm9tIHRoZSBFRVBST00gZHVyaW5nIGluaXRpYWxpemF0aW9uIGFuZCBzdG9yZWQKKwkgKiBpbiB0aGUgYWRhcHRlciBzdHJ1Y3R1cmUuICBXZSB3cml0ZSB3aGF0IGlzIHN0b3JlZCBpbiB0aGUgYWRhcHRlcgorCSAqIHN0cnVjdHVyZSB0byB0aGUgTUFDIFN0YXRpb24gQWRkcmVzcyByZWdpc3RlcnMgaGlnaCBhbmQgbG93LiAgVGhpcworCSAqIHN0YXRpb24gYWRkcmVzcyBpcyB1c2VkIGZvciBnZW5lcmF0aW5nIGFuZCBjaGVja2luZyBwYXVzZSBjb250cm9sCisJICogcGFja2V0cy4KKwkgKi8KKwlzdGF0aW9uMi5iaXRzLk9jdGV0MSA9IHBBZGFwdGVyLT5DdXJyZW50QWRkcmVzc1swXTsKKwlzdGF0aW9uMi5iaXRzLk9jdGV0MiA9IHBBZGFwdGVyLT5DdXJyZW50QWRkcmVzc1sxXTsKKwlzdGF0aW9uMS5iaXRzLk9jdGV0MyA9IHBBZGFwdGVyLT5DdXJyZW50QWRkcmVzc1syXTsKKwlzdGF0aW9uMS5iaXRzLk9jdGV0NCA9IHBBZGFwdGVyLT5DdXJyZW50QWRkcmVzc1szXTsKKwlzdGF0aW9uMS5iaXRzLk9jdGV0NSA9IHBBZGFwdGVyLT5DdXJyZW50QWRkcmVzc1s0XTsKKwlzdGF0aW9uMS5iaXRzLk9jdGV0NiA9IHBBZGFwdGVyLT5DdXJyZW50QWRkcmVzc1s1XTsKKwl3cml0ZWwoc3RhdGlvbjEudmFsdWUsICZwTWFjLT5zdGF0aW9uX2FkZHJfMS52YWx1ZSk7CisJd3JpdGVsKHN0YXRpb24yLnZhbHVlLCAmcE1hYy0+c3RhdGlvbl9hZGRyXzIudmFsdWUpOworCisJLyogTWF4IGV0aGVybmV0IHBhY2tldCBpbiBieXRlcyB0aGF0IHdpbGwgcGFzc2VkIGJ5IHRoZSBtYWMgd2l0aG91dAorCSAqIGJlaW5nIHRydW5jYXRlZC4gIEFsbG93IHRoZSBNQUMgdG8gcGFzcyA0IG1vcmUgdGhhbiBvdXIgbWF4IHBhY2tldAorCSAqIHNpemUuICBUaGlzIGlzIDQgZm9yIHRoZSBFdGhlcm5ldCBDUkMuCisJICoKKwkgKiBQYWNrZXRzIGxhcmdlciB0aGFuIChSZWdpc3RyeUp1bWJvUGFja2V0KSB0aGF0IGRvIG5vdCBjb250YWluIGEKKwkgKiBWTEFOIElEIHdpbGwgYmUgZHJvcHBlZCBieSB0aGUgUnggZnVuY3Rpb24uCisJICovCisJd3JpdGVsKHBBZGFwdGVyLT5SZWdpc3RyeUp1bWJvUGFja2V0ICsgNCwgJnBNYWMtPm1heF9mbV9sZW4udmFsdWUpOworCisJLyogY2xlYXIgb3V0IE1BQyBjb25maWcgcmVzZXQgKi8KKwl3cml0ZWwoMCwgJnBNYWMtPmNmZzEudmFsdWUpOworCisJREJHX0xFQVZFKGV0MTMxeF9kYmdpbmZvKTsKK30KKworLyoqCisgKiBDb25maWdNYWNSZWdzMiAtIEluaXRpYWxpemUgdGhlIHNlY29uZCBwYXJ0IG9mIE1BQyByZWdzCisgKiBAcEFkcGF0ZXI6IHBvaW50ZXIgdG8gb3VyIGFkYXB0ZXIgc3RydWN0dXJlCisgKi8KK3ZvaWQgQ29uZmlnTUFDUmVnczIoc3RydWN0IGV0MTMxeF9hZGFwdGVyICpwQWRhcHRlcikKK3sKKwlpbnQzMl90IGRlbGF5ID0gMDsKKwlzdHJ1Y3QgX01BQ190IF9faW9tZW0gKnBNYWMgPSAmcEFkYXB0ZXItPkNTUkFkZHJlc3MtPm1hYzsKKwlNQUNfQ0ZHMV90IGNmZzE7CisJTUFDX0NGRzJfdCBjZmcyOworCU1BQ19JRl9DVFJMX3QgaWZjdHJsOworCVRYTUFDX0NUTF90IGN0bDsKKworCURCR19FTlRFUihldDEzMXhfZGJnaW5mbyk7CisKKwljdGwudmFsdWUgPSByZWFkbCgmcEFkYXB0ZXItPkNTUkFkZHJlc3MtPnR4bWFjLmN0bC52YWx1ZSk7CisJY2ZnMS52YWx1ZSA9IHJlYWRsKCZwTWFjLT5jZmcxLnZhbHVlKTsKKwljZmcyLnZhbHVlID0gcmVhZGwoJnBNYWMtPmNmZzIudmFsdWUpOworCWlmY3RybC52YWx1ZSA9IHJlYWRsKCZwTWFjLT5pZl9jdHJsLnZhbHVlKTsKKworCWlmIChwQWRhcHRlci0+dWlMaW5rU3BlZWQgPT0gVFJVRVBIWV9TUEVFRF8xMDAwTUJQUykgeworCQljZmcyLmJpdHMuaWZfbW9kZSA9IDB4MjsKKwkJaWZjdHJsLmJpdHMucGh5X21vZGUgPSAweDA7CisJfSBlbHNlIHsKKwkJY2ZnMi5iaXRzLmlmX21vZGUgPSAweDE7CisJCWlmY3RybC5iaXRzLnBoeV9tb2RlID0gMHgxOworCX0KKworCS8qIFdlIG5lZWQgdG8gZW5hYmxlIFJ4L1R4ICovCisJY2ZnMS5iaXRzLnJ4X2VuYWJsZSA9IDB4MTsKKwljZmcxLmJpdHMudHhfZW5hYmxlID0gMHgxOworCisJLyogU2V0IHVwIGZsb3cgY29udHJvbCAqLworCWNmZzEuYml0cy50eF9mbG93ID0gMHgxOworCisJaWYgKChwQWRhcHRlci0+Rmxvd0NvbnRyb2wgPT0gUnhPbmx5KSB8fAorCSAgICAocEFkYXB0ZXItPkZsb3dDb250cm9sID09IEJvdGgpKSB7CisJCWNmZzEuYml0cy5yeF9mbG93ID0gMHgxOworCX0gZWxzZSB7CisJCWNmZzEuYml0cy5yeF9mbG93ID0gMHgwOworCX0KKworCS8qIEluaXRpYWxpemUgbG9vcCBiYWNrIHRvIG9mZiAqLworCWNmZzEuYml0cy5sb29wX2JhY2sgPSAwOworCisJd3JpdGVsKGNmZzEudmFsdWUsICZwTWFjLT5jZmcxLnZhbHVlKTsKKworCS8qIE5vdyB3ZSBuZWVkIHRvIGluaXRpYWxpemUgdGhlIE1BQyBDb25maWd1cmF0aW9uIDIgcmVnaXN0ZXIgKi8KKwljZmcyLmJpdHMucHJlYW1ibGVfbGVuID0gMHg3OworCWNmZzIuYml0cy5odWdlX2ZyYW1lID0gMHgwOworCS8qIExFTkdUSCBGSUVMRCBDSEVDS0lORyBiaXQ0OiBTZXQgdGhpcyBiaXQgdG8gY2F1c2UgdGhlIE1BQyB0byBjaGVjaworCSAqIHRoZSBmcmFtZSdzIGxlbmd0aCBmaWVsZCB0byBlbnN1cmUgaXQgbWF0Y2hlcyB0aGUgYWN0dWFsIGRhdGEKKwkgKiBmaWVsZCBsZW5ndGguIENsZWFyIHRoaXMgYml0IGlmIG5vIGxlbmd0aCBmaWVsZCBjaGVja2luZyBpcworCSAqIGRlc2lyZWQuIEl0cyBkZWZhdWx0IGlzIDAuCisJICovCisJY2ZnMi5iaXRzLmxlbl9jaGVjayA9IDB4MTsKKworCWlmIChwQWRhcHRlci0+UmVnaXN0cnlQaHlMb29wYmsgPT0gZmFsc2UpIHsKKwkJY2ZnMi5iaXRzLnBhZF9jcmMgPSAweDE7CisJCWNmZzIuYml0cy5jcmNfZW5hYmxlID0gMHgxOworCX0gZWxzZSB7CisJCWNmZzIuYml0cy5wYWRfY3JjID0gMDsKKwkJY2ZnMi5iaXRzLmNyY19lbmFibGUgPSAwOworCX0KKworCS8qIDEgLSBmdWxsIGR1cGxleCwgMCAtIGhhbGYtZHVwbGV4ICovCisJY2ZnMi5iaXRzLmZ1bGxfZHVwbGV4ID0gcEFkYXB0ZXItPnVpRHVwbGV4TW9kZTsKKwlpZmN0cmwuYml0cy5naGRfbW9kZSA9ICFwQWRhcHRlci0+dWlEdXBsZXhNb2RlOworCisJd3JpdGVsKGlmY3RybC52YWx1ZSwgJnBNYWMtPmlmX2N0cmwudmFsdWUpOworCXdyaXRlbChjZmcyLnZhbHVlLCAmcE1hYy0+Y2ZnMi52YWx1ZSk7CisKKwlkbyB7CisJCXVkZWxheSgxMCk7CisJCWRlbGF5Kys7CisJCWNmZzEudmFsdWUgPSByZWFkbCgmcE1hYy0+Y2ZnMS52YWx1ZSk7CisJfSB3aGlsZSAoKCFjZmcxLmJpdHMuc3luY2RfcnhfZW4gfHwKKwkJICAhY2ZnMS5iaXRzLnN5bmNkX3R4X2VuKSAmJgorCQkgZGVsYXkgPCAxMDApOworCisJaWYgKGRlbGF5ID09IDEwMCkgeworCQlEQkdfRVJST1IoZXQxMzF4X2RiZ2luZm8sCisJCQkgICJTeW5jZCBiaXRzIGRpZCBub3QgcmVzcG9uZCBjb3JyZWN0bHkgY2ZnMSB3b3JkIDB4JTA4eFxuIiwKKwkJCSAgY2ZnMS52YWx1ZSk7CisJfQorCisJREJHX1RSQUNFKGV0MTMxeF9kYmdpbmZvLAorCQkgICJTcGVlZCAlZCwgRHVwICVkLCBDRkcxIDB4JTA4eCwgQ0ZHMiAweCUwOHgsIGlmX2N0cmwgMHglMDh4XG4iLAorCQkgIHBBZGFwdGVyLT51aUxpbmtTcGVlZCwgcEFkYXB0ZXItPnVpRHVwbGV4TW9kZSwKKwkJICByZWFkbCgmcE1hYy0+Y2ZnMS52YWx1ZSksIHJlYWRsKCZwTWFjLT5jZmcyLnZhbHVlKSwKKwkJICByZWFkbCgmcE1hYy0+aWZfY3RybC52YWx1ZSkpOworCisJLyogRW5hYmxlIFRYTUFDICovCisJY3RsLmJpdHMudHhtYWNfZW4gPSAweDE7CisJY3RsLmJpdHMuZmNfZGlzYWJsZSA9IDB4MTsKKwl3cml0ZWwoY3RsLnZhbHVlLCAmcEFkYXB0ZXItPkNTUkFkZHJlc3MtPnR4bWFjLmN0bC52YWx1ZSk7CisKKwkvKiBSZWFkeSB0byBzdGFydCB0aGUgUlhETUEvVFhETUEgZW5naW5lICovCisJaWYgKCFNUF9URVNUX0ZMQUcocEFkYXB0ZXIsIGZNUF9BREFQVEVSX0xPV0VSX1BPV0VSKSkgeworCQlldDEzMXhfcnhfZG1hX2VuYWJsZShwQWRhcHRlcik7CisJCWV0MTMxeF90eF9kbWFfZW5hYmxlKHBBZGFwdGVyKTsKKwl9IGVsc2UgeworCQlEQkdfV0FSTklORyhldDEzMXhfZGJnaW5mbywKKwkJCSAgICAiRGlkbid0IGVuYWJsZSBSeC9UeCBkdWUgdG8gbG93LXBvd2VyIG1vZGVcbiIpOworCX0KKworCURCR19MRUFWRShldDEzMXhfZGJnaW5mbyk7Cit9CisKK3ZvaWQgQ29uZmlnUnhNYWNSZWdzKHN0cnVjdCBldDEzMXhfYWRhcHRlciAqcEFkYXB0ZXIpCit7CisJc3RydWN0IF9SWE1BQ190IF9faW9tZW0gKnBSeE1hYyA9ICZwQWRhcHRlci0+Q1NSQWRkcmVzcy0+cnhtYWM7CisJUlhNQUNfV09MX1NBX0xPX3Qgc2FfbG87CisJUlhNQUNfV09MX1NBX0hJX3Qgc2FfaGk7CisJUlhNQUNfUEZfQ1RSTF90IHBmX2N0cmwgPSB7IDAgfTsKKworCURCR19FTlRFUihldDEzMXhfZGJnaW5mbyk7CisKKwkvKiBEaXNhYmxlIHRoZSBNQUMgd2hpbGUgaXQgaXMgYmVpbmcgY29uZmlndXJlZCAoYWxzbyBkaXNhYmxlIFdPTCkgKi8KKwl3cml0ZWwoMHg4LCAmcFJ4TWFjLT5jdHJsLnZhbHVlKTsKKworCS8qIEluaXRpYWxpemUgV09MIHRvIGRpc2FibGVkLiAqLworCXdyaXRlbCgwLCAmcFJ4TWFjLT5jcmMwLnZhbHVlKTsKKwl3cml0ZWwoMCwgJnBSeE1hYy0+Y3JjMTIudmFsdWUpOworCXdyaXRlbCgwLCAmcFJ4TWFjLT5jcmMzNC52YWx1ZSk7CisKKwkvKiBXZSBuZWVkIHRvIHNldCB0aGUgV09MIG1hc2swIC0gbWFzazQgbmV4dC4gIFdlIGluaXRpYWxpemUgaXQgdG8KKwkgKiBpdHMgZGVmYXVsdCBWYWx1ZXMgb2YgMHgwMDAwMDAwMCBiZWNhdXNlIHRoZXJlIGFyZSBub3QgV09MIG1hc2tzCisJICogYXMgb2YgdGhpcyB0aW1lLgorCSAqLworCXdyaXRlbCgwLCAmcFJ4TWFjLT5tYXNrMF93b3JkMCk7CisJd3JpdGVsKDAsICZwUnhNYWMtPm1hc2swX3dvcmQxKTsKKwl3cml0ZWwoMCwgJnBSeE1hYy0+bWFzazBfd29yZDIpOworCXdyaXRlbCgwLCAmcFJ4TWFjLT5tYXNrMF93b3JkMyk7CisKKwl3cml0ZWwoMCwgJnBSeE1hYy0+bWFzazFfd29yZDApOworCXdyaXRlbCgwLCAmcFJ4TWFjLT5tYXNrMV93b3JkMSk7CisJd3JpdGVsKDAsICZwUnhNYWMtPm1hc2sxX3dvcmQyKTsKKwl3cml0ZWwoMCwgJnBSeE1hYy0+bWFzazFfd29yZDMpOworCisJd3JpdGVsKDAsICZwUnhNYWMtPm1hc2syX3dvcmQwKTsKKwl3cml0ZWwoMCwgJnBSeE1hYy0+bWFzazJfd29yZDEpOworCXdyaXRlbCgwLCAmcFJ4TWFjLT5tYXNrMl93b3JkMik7CisJd3JpdGVsKDAsICZwUnhNYWMtPm1hc2syX3dvcmQzKTsKKworCXdyaXRlbCgwLCAmcFJ4TWFjLT5tYXNrM193b3JkMCk7CisJd3JpdGVsKDAsICZwUnhNYWMtPm1hc2szX3dvcmQxKTsKKwl3cml0ZWwoMCwgJnBSeE1hYy0+bWFzazNfd29yZDIpOworCXdyaXRlbCgwLCAmcFJ4TWFjLT5tYXNrM193b3JkMyk7CisKKwl3cml0ZWwoMCwgJnBSeE1hYy0+bWFzazRfd29yZDApOworCXdyaXRlbCgwLCAmcFJ4TWFjLT5tYXNrNF93b3JkMSk7CisJd3JpdGVsKDAsICZwUnhNYWMtPm1hc2s0X3dvcmQyKTsKKwl3cml0ZWwoMCwgJnBSeE1hYy0+bWFzazRfd29yZDMpOworCisJLyogTGV0cyBzZXR1cCB0aGUgV09MIFNvdXJjZSBBZGRyZXNzICovCisJc2FfbG8uYml0cy5zYTMgPSBwQWRhcHRlci0+Q3VycmVudEFkZHJlc3NbMl07CisJc2FfbG8uYml0cy5zYTQgPSBwQWRhcHRlci0+Q3VycmVudEFkZHJlc3NbM107CisJc2FfbG8uYml0cy5zYTUgPSBwQWRhcHRlci0+Q3VycmVudEFkZHJlc3NbNF07CisJc2FfbG8uYml0cy5zYTYgPSBwQWRhcHRlci0+Q3VycmVudEFkZHJlc3NbNV07CisJd3JpdGVsKHNhX2xvLnZhbHVlLCAmcFJ4TWFjLT5zYV9sby52YWx1ZSk7CisKKwlzYV9oaS5iaXRzLnNhMSA9IHBBZGFwdGVyLT5DdXJyZW50QWRkcmVzc1swXTsKKwlzYV9oaS5iaXRzLnNhMiA9IHBBZGFwdGVyLT5DdXJyZW50QWRkcmVzc1sxXTsKKwl3cml0ZWwoc2FfaGkudmFsdWUsICZwUnhNYWMtPnNhX2hpLnZhbHVlKTsKKworCS8qIERpc2FibGUgYWxsIFBhY2tldCBGaWx0ZXJpbmcgKi8KKwl3cml0ZWwoMCwgJnBSeE1hYy0+cGZfY3RybC52YWx1ZSk7CisKKwkvKiBMZXQncyBpbml0aWFsaXplIHRoZSBVbmljYXN0IFBhY2tldCBmaWx0ZXJpbmcgYWRkcmVzcyAqLworCWlmIChwQWRhcHRlci0+UGFja2V0RmlsdGVyICYgRVQxMzFYX1BBQ0tFVF9UWVBFX0RJUkVDVEVEKSB7CisJCVNldHVwRGV2aWNlRm9yVW5pY2FzdChwQWRhcHRlcik7CisJCXBmX2N0cmwuYml0cy5maWx0ZXJfdW5pX2VuID0gMTsKKwl9IGVsc2UgeworCQl3cml0ZWwoMCwgJnBSeE1hYy0+dW5pX3BmX2FkZHIxLnZhbHVlKTsKKwkJd3JpdGVsKDAsICZwUnhNYWMtPnVuaV9wZl9hZGRyMi52YWx1ZSk7CisJCXdyaXRlbCgwLCAmcFJ4TWFjLT51bmlfcGZfYWRkcjMudmFsdWUpOworCX0KKworCS8qIExldCdzIGluaXRpYWxpemUgdGhlIE11bHRpY2FzdCBoYXNoICovCisJaWYgKHBBZGFwdGVyLT5QYWNrZXRGaWx0ZXIgJiBFVDEzMVhfUEFDS0VUX1RZUEVfQUxMX01VTFRJQ0FTVCkgeworCQlwZl9jdHJsLmJpdHMuZmlsdGVyX211bHRpX2VuID0gMDsKKwl9IGVsc2UgeworCQlwZl9jdHJsLmJpdHMuZmlsdGVyX211bHRpX2VuID0gMTsKKwkJU2V0dXBEZXZpY2VGb3JNdWx0aWNhc3QocEFkYXB0ZXIpOworCX0KKworCS8qIFJ1bnQgcGFja2V0IGZpbHRlcmluZy4gIERpZG4ndCB3b3JrIGluIHZlcnNpb24gQSBzaWxpY29uLiAqLworCXBmX2N0cmwuYml0cy5taW5fcGt0X3NpemUgPSBOSUNfTUlOX1BBQ0tFVF9TSVpFICsgNDsKKwlwZl9jdHJsLmJpdHMuZmlsdGVyX2ZyYWdfZW4gPSAxOworCisJaWYgKHBBZGFwdGVyLT5SZWdpc3RyeUp1bWJvUGFja2V0ID4gODE5MikgeworCQlSWE1BQ19NQ0lGX0NUUkxfTUFYX1NFR190IG1jaWZfY3RybF9tYXhfc2VnOworCisJCS8qIEluIG9yZGVyIHRvIHRyYW5zbWl0IGp1bWJvIHBhY2tldHMgZ3JlYXRlciB0aGFuIDhrLCB0aGUKKwkJICogRklGTyBiZXR3ZWVuIFJ4TUFDIGFuZCBSeERNQSBuZWVkcyB0byBiZSByZWR1Y2VkIGluIHNpemUKKwkJICogdG8gKDE2ayAtIEp1bWJvIHBhY2tldCBzaXplKS4gIEluIG9yZGVyIHRvIGltcGxlbWVudCB0aGlzLAorCQkgKiB3ZSBtdXN0IHVzZSAiY3V0IHRocm91Z2giIG1vZGUgaW4gdGhlIFJ4TUFDLCB3aGljaCBjaG9wcworCQkgKiBwYWNrZXRzIGRvd24gaW50byBzZWdtZW50cyB3aGljaCBhcmUgKG1heF9zaXplICogMTYpLiAgSW4KKwkJICogdGhpcyBjYXNlIHdlIHNlbGVjdGVkIDI1NiBieXRlcywgc2luY2UgdGhpcyBpcyB0aGUgc2l6ZSBvZgorCQkgKiB0aGUgUENJLUV4cHJlc3MgVExQJ3MgdGhhdCB0aGUgMTMxMCB1c2VzLgorCQkgKi8KKwkJbWNpZl9jdHJsX21heF9zZWcuYml0cy5zZWdfZW4gPSAweDE7CisJCW1jaWZfY3RybF9tYXhfc2VnLmJpdHMuZmNfZW4gPSAweDA7CisJCW1jaWZfY3RybF9tYXhfc2VnLmJpdHMubWF4X3NpemUgPSAweDEwOworCisJCXdyaXRlbChtY2lmX2N0cmxfbWF4X3NlZy52YWx1ZSwKKwkJICAgICAgICZwUnhNYWMtPm1jaWZfY3RybF9tYXhfc2VnLnZhbHVlKTsKKwl9IGVsc2UgeworCQl3cml0ZWwoMCwgJnBSeE1hYy0+bWNpZl9jdHJsX21heF9zZWcudmFsdWUpOworCX0KKworCS8qIEluaXRpYWxpemUgdGhlIE1DSUYgd2F0ZXIgbWFya3MgKi8KKwl3cml0ZWwoMCwgJnBSeE1hYy0+bWNpZl93YXRlcl9tYXJrLnZhbHVlKTsKKworCS8qICBJbml0aWFsaXplIHRoZSBNSUYgY29udHJvbCAqLworCXdyaXRlbCgwLCAmcFJ4TWFjLT5taWZfY3RybC52YWx1ZSk7CisKKwkvKiBJbml0aWFsaXplIHRoZSBTcGFjZSBBdmFpbGFibGUgUmVnaXN0ZXIgKi8KKwl3cml0ZWwoMCwgJnBSeE1hYy0+c3BhY2VfYXZhaWwudmFsdWUpOworCisJLyogSW5pdGlhbGl6ZSB0aGUgdGhlIG1pZl9jdHJsIHJlZ2lzdGVyCisJICogYml0IDM6ICBSZWNlaXZlIGNvZGUgZXJyb3IuIE9uZSBvciBtb3JlIG5pYmJsZXMgd2VyZSBzaWduYWxlZCBhcworCSAqCSAgIGVycm9ycyAgZHVyaW5nIHRoZSByZWNlcHRpb24gb2YgdGhlIHBhY2tldC4gIENsZWFyIHRoaXMKKwkgKgkgICBiaXQgaW4gR2lnYWJpdCwgc2V0IGl0IGluIDEwME1iaXQuICBUaGlzIHdhcyBkZXJpdmVkCisJICoJICAgZXhwZXJpbWVudGFsbHkgYXQgVU5ILgorCSAqIGJpdCA0OiAgUmVjZWl2ZSBDUkMgZXJyb3IuIFRoZSBwYWNrZXQncyBDUkMgZGlkIG5vdCBtYXRjaCB0aGUKKwkgKgkgICBpbnRlcm5hbGx5IGdlbmVyYXRlZCBDUkMuCisJICogYml0IDU6ICBSZWNlaXZlIGxlbmd0aCBjaGVjayBlcnJvci4gSW5kaWNhdGVzIHRoYXQgZnJhbWUgbGVuZ3RoCisJICoJICAgZmllbGQgdmFsdWUgaW4gdGhlIHBhY2tldCBkb2VzIG5vdCBtYXRjaCB0aGUgYWN0dWFsIGRhdGEKKwkgKgkgICBieXRlIGxlbmd0aCBhbmQgaXMgbm90IGEgdHlwZSBmaWVsZC4KKwkgKiBiaXQgMTY6IFJlY2VpdmUgZnJhbWUgdHJ1bmNhdGVkLgorCSAqIGJpdCAxNzogRHJvcCBwYWNrZXQgZW5hYmxlCisJICovCisJaWYgKHBBZGFwdGVyLT51aUxpbmtTcGVlZCA9PSBUUlVFUEhZX1NQRUVEXzEwME1CUFMpIHsKKwkJd3JpdGVsKDB4MzAwMzgsICZwUnhNYWMtPm1pZl9jdHJsLnZhbHVlKTsKKwl9IGVsc2UgeworCQl3cml0ZWwoMHgzMDAzMCwgJnBSeE1hYy0+bWlmX2N0cmwudmFsdWUpOworCX0KKworCS8qIEZpbmFsbHkgd2UgaW5pdGlhbGl6ZSBSeE1hYyB0byBiZSBlbmFibGVkICYgV09MIGRpc2FibGVkLiAgUGFja2V0CisJICogZmlsdGVyIGlzIGFsd2F5cyBlbmFibGVkIHNpbmNlIGl0IGlzIHdoZXJlIHRoZSBydW50IHBhY2tldHMgYXJlCisJICogc3VwcG9zZWQgdG8gYmUgZHJvcHBlZC4gIEZvciB2ZXJzaW9uIEEgc2lsaWNvbiwgcnVudCBwYWNrZXQKKwkgKiBkcm9wcGluZyBkb2Vzbid0IHdvcmssIHNvIGl0IGlzIGRpc2FibGVkIGluIHRoZSBwZl9jdHJsIHJlZ2lzdGVyLAorCSAqIGJ1dCB3ZSBzdGlsbCBsZWF2ZSB0aGUgcGFja2V0IGZpbHRlciBvbi4KKwkgKi8KKwl3cml0ZWwocGZfY3RybC52YWx1ZSwgJnBSeE1hYy0+cGZfY3RybC52YWx1ZSk7CisJd3JpdGVsKDB4OSwgJnBSeE1hYy0+Y3RybC52YWx1ZSk7CisKKwlEQkdfTEVBVkUoZXQxMzF4X2RiZ2luZm8pOworfQorCit2b2lkIENvbmZpZ1R4TWFjUmVncyhzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKnBBZGFwdGVyKQoreworCXN0cnVjdCBfVFhNQUNfdCBfX2lvbWVtICpwVHhNYWMgPSAmcEFkYXB0ZXItPkNTUkFkZHJlc3MtPnR4bWFjOworCVRYTUFDX0NGX1BBUkFNX3QgTG9jYWw7CisKKwlEQkdfRU5URVIoZXQxMzF4X2RiZ2luZm8pOworCisJLyogV2UgbmVlZCB0byB1cGRhdGUgdGhlIENvbnRyb2wgRnJhbWUgUGFyYW1ldGVycworCSAqIGNmcHQgLSBjb250cm9sIGZyYW1lIHBhdXNlIHRpbWVyIHNldCB0byA2NCAoMHg0MCkKKwkgKiBjZmVwIC0gY29udHJvbCBmcmFtZSBleHRlbmRlZCBwYXVzZSB0aW1lciBzZXQgdG8gMHgwCisJICovCisJaWYgKHBBZGFwdGVyLT5GbG93Q29udHJvbCA9PSBOb25lKSB7CisJCXdyaXRlbCgwLCAmcFR4TWFjLT5jZl9wYXJhbS52YWx1ZSk7CisJfSBlbHNlIHsKKwkJTG9jYWwuYml0cy5jZnB0ID0gMHg0MDsKKwkJTG9jYWwuYml0cy5jZmVwID0gMHgwOworCQl3cml0ZWwoTG9jYWwudmFsdWUsICZwVHhNYWMtPmNmX3BhcmFtLnZhbHVlKTsKKwl9CisKKwlEQkdfTEVBVkUoZXQxMzF4X2RiZ2luZm8pOworfQorCit2b2lkIENvbmZpZ01hY1N0YXRSZWdzKHN0cnVjdCBldDEzMXhfYWRhcHRlciAqcEFkYXB0ZXIpCit7CisJc3RydWN0IF9NQUNfU1RBVF90IF9faW9tZW0gKnBEZXZNYWNTdGF0ID0KKwkJJnBBZGFwdGVyLT5DU1JBZGRyZXNzLT5tYWNTdGF0OworCisJREJHX0VOVEVSKGV0MTMxeF9kYmdpbmZvKTsKKworCS8qIE5leHQgd2UgbmVlZCB0byBpbml0aWFsaXplIGFsbCB0aGUgTUFDX1NUQVQgcmVnaXN0ZXJzIHRvIHplcm8gb24KKwkgKiB0aGUgZGV2aWNlLgorCSAqLworCXdyaXRlbCgwLCAmcERldk1hY1N0YXQtPlJGY3MpOworCXdyaXRlbCgwLCAmcERldk1hY1N0YXQtPlJBbG4pOworCXdyaXRlbCgwLCAmcERldk1hY1N0YXQtPlJGbHIpOworCXdyaXRlbCgwLCAmcERldk1hY1N0YXQtPlJEcnApOworCXdyaXRlbCgwLCAmcERldk1hY1N0YXQtPlJDZGUpOworCXdyaXRlbCgwLCAmcERldk1hY1N0YXQtPlJPdnIpOworCXdyaXRlbCgwLCAmcERldk1hY1N0YXQtPlJGcmcpOworCisJd3JpdGVsKDAsICZwRGV2TWFjU3RhdC0+VFNjbCk7CisJd3JpdGVsKDAsICZwRGV2TWFjU3RhdC0+VERmcik7CisJd3JpdGVsKDAsICZwRGV2TWFjU3RhdC0+VE1jbCk7CisJd3JpdGVsKDAsICZwRGV2TWFjU3RhdC0+VExjbCk7CisJd3JpdGVsKDAsICZwRGV2TWFjU3RhdC0+VE5jbCk7CisJd3JpdGVsKDAsICZwRGV2TWFjU3RhdC0+VE92cik7CisJd3JpdGVsKDAsICZwRGV2TWFjU3RhdC0+VFVuZCk7CisKKwkvKiBVbm1hc2sgYW55IGNvdW50ZXJzIHRoYXQgd2Ugd2FudCB0byB0cmFjayB0aGUgb3ZlcmZsb3cgb2YuCisJICogSW5pdGlhbGx5IHRoaXMgd2lsbCBiZSBhbGwgY291bnRlcnMuICBJdCBtYXkgYmVjb21lIGNsZWFyIGxhdGVyCisJICogdGhhdCB3ZSBkbyBub3QgbmVlZCB0byB0cmFjayBhbGwgY291bnRlcnMuCisJICovCisJeworCQlNQUNfU1RBVF9SRUdfMV90IENhcnJ5MU0gPSB7IDB4ZmZmZmZmZmYgfTsKKworCQlDYXJyeTFNLmJpdHMucmRycCA9IDA7CisJCUNhcnJ5MU0uYml0cy5yamJyID0gMTsKKwkJQ2FycnkxTS5iaXRzLnJmcmcgPSAwOworCQlDYXJyeTFNLmJpdHMucm92ciA9IDA7CisJCUNhcnJ5MU0uYml0cy5ydW5kID0gMTsKKwkJQ2FycnkxTS5iaXRzLnJjc2UgPSAxOworCQlDYXJyeTFNLmJpdHMucmNkZSA9IDA7CisJCUNhcnJ5MU0uYml0cy5yZmxyID0gMDsKKwkJQ2FycnkxTS5iaXRzLnJhbG4gPSAwOworCQlDYXJyeTFNLmJpdHMucnh1byA9IDE7CisJCUNhcnJ5MU0uYml0cy5yeHBmID0gMTsKKwkJQ2FycnkxTS5iaXRzLnJ4Y2YgPSAxOworCQlDYXJyeTFNLmJpdHMucmJjYSA9IDE7CisJCUNhcnJ5MU0uYml0cy5ybWNhID0gMTsKKwkJQ2FycnkxTS5iaXRzLnJmY3MgPSAwOworCQlDYXJyeTFNLmJpdHMucnBrdCA9IDE7CisJCUNhcnJ5MU0uYml0cy5yYnl0ID0gMTsKKwkJQ2FycnkxTS5iaXRzLnRybWd2ID0gMTsKKwkJQ2FycnkxTS5iaXRzLnRybWF4ID0gMTsKKwkJQ2FycnkxTS5iaXRzLnRyMWsgPSAxOworCQlDYXJyeTFNLmJpdHMudHI1MTEgPSAxOworCQlDYXJyeTFNLmJpdHMudHIyNTUgPSAxOworCQlDYXJyeTFNLmJpdHMudHIxMjcgPSAxOworCQlDYXJyeTFNLmJpdHMudHI2NCA9IDE7CisKKwkJd3JpdGVsKENhcnJ5MU0udmFsdWUsICZwRGV2TWFjU3RhdC0+Q2FycnkxTS52YWx1ZSk7CisJfQorCisJeworCQlNQUNfU1RBVF9SRUdfMl90IENhcnJ5Mk0gPSB7IDB4ZmZmZmZmZmYgfTsKKworCQlDYXJyeTJNLmJpdHMudGRycCA9IDE7CisJCUNhcnJ5Mk0uYml0cy50cGZoID0gMTsKKwkJQ2FycnkyTS5iaXRzLnRuY2wgPSAwOworCQlDYXJyeTJNLmJpdHMudHhjbCA9IDE7CisJCUNhcnJ5Mk0uYml0cy50bGNsID0gMDsKKwkJQ2FycnkyTS5iaXRzLnRtY2wgPSAwOworCQlDYXJyeTJNLmJpdHMudHNjbCA9IDA7CisJCUNhcnJ5Mk0uYml0cy50ZWRmID0gMTsKKwkJQ2FycnkyTS5iaXRzLnRkZnIgPSAwOworCQlDYXJyeTJNLmJpdHMudHhwZiA9IDE7CisJCUNhcnJ5Mk0uYml0cy50YmNhID0gMTsKKwkJQ2FycnkyTS5iaXRzLnRtY2EgPSAxOworCQlDYXJyeTJNLmJpdHMudHBrdCA9IDE7CisJCUNhcnJ5Mk0uYml0cy50Ynl0ID0gMTsKKwkJQ2FycnkyTS5iaXRzLnRmcmcgPSAxOworCQlDYXJyeTJNLmJpdHMudHVuZCA9IDA7CisJCUNhcnJ5Mk0uYml0cy50b3ZyID0gMDsKKwkJQ2FycnkyTS5iaXRzLnR4Y2YgPSAxOworCQlDYXJyeTJNLmJpdHMudGZjcyA9IDE7CisJCUNhcnJ5Mk0uYml0cy50amJyID0gMTsKKworCQl3cml0ZWwoQ2FycnkyTS52YWx1ZSwgJnBEZXZNYWNTdGF0LT5DYXJyeTJNLnZhbHVlKTsKKwl9CisKKwlEQkdfTEVBVkUoZXQxMzF4X2RiZ2luZm8pOworfQorCit2b2lkIENvbmZpZ0Zsb3dDb250cm9sKHN0cnVjdCBldDEzMXhfYWRhcHRlciAqIHBBZGFwdGVyKQoreworCWlmIChwQWRhcHRlci0+dWlEdXBsZXhNb2RlID09IDApIHsKKwkJcEFkYXB0ZXItPkZsb3dDb250cm9sID0gTm9uZTsKKwl9IGVsc2UgeworCQljaGFyIFJlbW90ZVBhdXNlLCBSZW1vdGVBc3luY1BhdXNlOworCisJCUVUMTMxMF9QaHlBY2Nlc3NNaUJpdChwQWRhcHRlciwKKwkJCQkgICAgICBUUlVFUEhZX0JJVF9SRUFELCA1LCAxMCwgJlJlbW90ZVBhdXNlKTsKKwkJRVQxMzEwX1BoeUFjY2Vzc01pQml0KHBBZGFwdGVyLAorCQkJCSAgICAgIFRSVUVQSFlfQklUX1JFQUQsIDUsIDExLAorCQkJCSAgICAgICZSZW1vdGVBc3luY1BhdXNlKTsKKworCQlpZiAoKFJlbW90ZVBhdXNlID09IFRSVUVQSFlfQklUX1NFVCkgJiYKKwkJICAgIChSZW1vdGVBc3luY1BhdXNlID09IFRSVUVQSFlfQklUX1NFVCkpIHsKKwkJCXBBZGFwdGVyLT5GbG93Q29udHJvbCA9IHBBZGFwdGVyLT5SZWdpc3RyeUZsb3dDb250cm9sOworCQl9IGVsc2UgaWYgKChSZW1vdGVQYXVzZSA9PSBUUlVFUEhZX0JJVF9TRVQpICYmCisJCQkgICAoUmVtb3RlQXN5bmNQYXVzZSA9PSBUUlVFUEhZX0JJVF9DTEVBUikpIHsKKwkJCWlmIChwQWRhcHRlci0+UmVnaXN0cnlGbG93Q29udHJvbCA9PSBCb3RoKSB7CisJCQkJcEFkYXB0ZXItPkZsb3dDb250cm9sID0gQm90aDsKKwkJCX0gZWxzZSB7CisJCQkJcEFkYXB0ZXItPkZsb3dDb250cm9sID0gTm9uZTsKKwkJCX0KKwkJfSBlbHNlIGlmICgoUmVtb3RlUGF1c2UgPT0gVFJVRVBIWV9CSVRfQ0xFQVIpICYmCisJCQkgICAoUmVtb3RlQXN5bmNQYXVzZSA9PSBUUlVFUEhZX0JJVF9DTEVBUikpIHsKKwkJCXBBZGFwdGVyLT5GbG93Q29udHJvbCA9IE5vbmU7CisJCX0gZWxzZSB7LyogaWYgKFJlbW90ZVBhdXNlID09IFRSVUVQSFlfQ0xFQVJfQklUICYmCisJCQkgICAgICAgUmVtb3RlQXN5bmNQYXVzZSA9PSBUUlVFUEhZX1NFVF9CSVQpICovCisJCQlpZiAocEFkYXB0ZXItPlJlZ2lzdHJ5Rmxvd0NvbnRyb2wgPT0gQm90aCkgeworCQkJCXBBZGFwdGVyLT5GbG93Q29udHJvbCA9IFJ4T25seTsKKwkJCX0gZWxzZSB7CisJCQkJcEFkYXB0ZXItPkZsb3dDb250cm9sID0gTm9uZTsKKwkJCX0KKwkJfQorCX0KK30KKworLyoqCisgKiBVcGRhdGVNYWNTdGF0SG9zdENvdW50ZXJzIC0gVXBkYXRlIHRoZSBsb2NhbCBjb3B5IG9mIHRoZSBzdGF0aXN0aWNzCisgKiBAcEFkYXB0ZXI6IHBvaW50ZXIgdG8gdGhlIGFkYXB0ZXIgc3RydWN0dXJlCisgKi8KK3ZvaWQgVXBkYXRlTWFjU3RhdEhvc3RDb3VudGVycyhzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKnBBZGFwdGVyKQoreworCXN0cnVjdCBfY2Vfc3RhdHNfdCAqc3RhdHMgPSAmcEFkYXB0ZXItPlN0YXRzOworCXN0cnVjdCBfTUFDX1NUQVRfdCBfX2lvbWVtICpwRGV2TWFjU3RhdCA9CisJCSZwQWRhcHRlci0+Q1NSQWRkcmVzcy0+bWFjU3RhdDsKKworCXN0YXRzLT5jb2xsaXNpb25zICs9IHJlYWRsKCZwRGV2TWFjU3RhdC0+VE5jbCk7CisJc3RhdHMtPmZpcnN0X2NvbGxpc2lvbiArPSByZWFkbCgmcERldk1hY1N0YXQtPlRTY2wpOworCXN0YXRzLT50eF9kZWZlcnJlZCArPSByZWFkbCgmcERldk1hY1N0YXQtPlREZnIpOworCXN0YXRzLT5leGNlc3NpdmVfY29sbGlzaW9ucyArPSByZWFkbCgmcERldk1hY1N0YXQtPlRNY2wpOworCXN0YXRzLT5sYXRlX2NvbGxpc2lvbnMgKz0gcmVhZGwoJnBEZXZNYWNTdGF0LT5UTGNsKTsKKwlzdGF0cy0+dHhfdWZsbyArPSByZWFkbCgmcERldk1hY1N0YXQtPlRVbmQpOworCXN0YXRzLT5tYXhfcGt0X2Vycm9yICs9IHJlYWRsKCZwRGV2TWFjU3RhdC0+VE92cik7CisKKwlzdGF0cy0+YWxpZ25tZW50X2VyciArPSByZWFkbCgmcERldk1hY1N0YXQtPlJBbG4pOworCXN0YXRzLT5jcmNfZXJyICs9IHJlYWRsKCZwRGV2TWFjU3RhdC0+UkNkZSk7CisJc3RhdHMtPm5vcmN2YnVmICs9IHJlYWRsKCZwRGV2TWFjU3RhdC0+UkRycCk7CisJc3RhdHMtPnJ4X292X2Zsb3cgKz0gcmVhZGwoJnBEZXZNYWNTdGF0LT5ST3ZyKTsKKwlzdGF0cy0+Y29kZV92aW9sYXRpb25zICs9IHJlYWRsKCZwRGV2TWFjU3RhdC0+UkZjcyk7CisJc3RhdHMtPmxlbmd0aF9lcnIgKz0gcmVhZGwoJnBEZXZNYWNTdGF0LT5SRmxyKTsKKworCXN0YXRzLT5vdGhlcl9lcnJvcnMgKz0gcmVhZGwoJnBEZXZNYWNTdGF0LT5SRnJnKTsKK30KKworLyoqCisgKiBIYW5kbGVNYWNTdGF0SW50ZXJydXB0CisgKiBAcEFkYXB0ZXI6IHBvaW50ZXIgdG8gdGhlIGFkYXB0ZXIgc3RydWN0dXJlCisgKgorICogT25lIG9mIHRoZSBNQUNTVEFUIGNvdW50ZXJzIGhhcyB3cmFwcGVkLiAgVXBkYXRlIHRoZSBsb2NhbCBjb3B5IG9mCisgKiB0aGUgc3RhdGlzdGljcyBoZWxkIGluIHRoZSBhZGFwdGVyIHN0cnVjdHVyZSwgY2hlY2tpbmcgdGhlICJ3cmFwIgorICogYml0IGZvciBlYWNoIGNvdW50ZXIuCisgKi8KK3ZvaWQgSGFuZGxlTWFjU3RhdEludGVycnVwdChzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKnBBZGFwdGVyKQoreworCU1BQ19TVEFUX1JFR18xX3QgQ2FycnkxOworCU1BQ19TVEFUX1JFR18yX3QgQ2FycnkyOworCisJREJHX0VOVEVSKGV0MTMxeF9kYmdpbmZvKTsKKworCS8qIFJlYWQgdGhlIGludGVycnVwdCBiaXRzIGZyb20gdGhlIHJlZ2lzdGVyKHMpLiAgVGhlc2UgYXJlIENsZWFyIE9uCisJICogV3JpdGUuCisJICovCisJQ2FycnkxLnZhbHVlID0gcmVhZGwoJnBBZGFwdGVyLT5DU1JBZGRyZXNzLT5tYWNTdGF0LkNhcnJ5MS52YWx1ZSk7CisJQ2FycnkyLnZhbHVlID0gcmVhZGwoJnBBZGFwdGVyLT5DU1JBZGRyZXNzLT5tYWNTdGF0LkNhcnJ5Mi52YWx1ZSk7CisKKwl3cml0ZWwoQ2FycnkxLnZhbHVlLCAmcEFkYXB0ZXItPkNTUkFkZHJlc3MtPm1hY1N0YXQuQ2FycnkxLnZhbHVlKTsKKwl3cml0ZWwoQ2FycnkyLnZhbHVlLCAmcEFkYXB0ZXItPkNTUkFkZHJlc3MtPm1hY1N0YXQuQ2FycnkyLnZhbHVlKTsKKworCS8qIFdlIG5lZWQgdG8gZG8gdXBkYXRlIHRoZSBob3N0IGNvcHkgb2YgYWxsIHRoZSBNQUNfU1RBVCBjb3VudGVycy4KKwkgKiBGb3IgZWFjaCBjb3VudGVyLCBjaGVjayBpdCdzIG92ZXJmbG93IGJpdC4gIElmIHRoZSBvdmVyZmxvdyBiaXQgaXMKKwkgKiBzZXQsIHRoZW4gaW5jcmVtZW50IHRoZSBob3N0IHZlcnNpb24gb2YgdGhlIGNvdW50IGJ5IG9uZSBjb21wbGV0ZQorCSAqIHJldm9sdXRpb24gb2YgdGhlIGNvdW50ZXIuICBUaGlzIHJvdXRpbmUgaXMgY2FsbGVkIHdoZW4gdGhlIGNvdW50ZXIKKwkgKiBibG9jayBpbmRpY2F0ZXMgdGhhdCBvbmUgb2YgdGhlIGNvdW50ZXJzIGhhcyB3cmFwcGVkLgorCSAqLworCWlmIChDYXJyeTEuYml0cy5yZmNzKSB7CisJCXBBZGFwdGVyLT5TdGF0cy5jb2RlX3Zpb2xhdGlvbnMgKz0gQ09VTlRFUl9XUkFQXzE2X0JJVDsKKwl9CisJaWYgKENhcnJ5MS5iaXRzLnJhbG4pIHsKKwkJcEFkYXB0ZXItPlN0YXRzLmFsaWdubWVudF9lcnIgKz0gQ09VTlRFUl9XUkFQXzEyX0JJVDsKKwl9CisJaWYgKENhcnJ5MS5iaXRzLnJmbHIpIHsKKwkJcEFkYXB0ZXItPlN0YXRzLmxlbmd0aF9lcnIgKz0gQ09VTlRFUl9XUkFQXzE2X0JJVDsKKwl9CisJaWYgKENhcnJ5MS5iaXRzLnJmcmcpIHsKKwkJcEFkYXB0ZXItPlN0YXRzLm90aGVyX2Vycm9ycyArPSBDT1VOVEVSX1dSQVBfMTZfQklUOworCX0KKwlpZiAoQ2FycnkxLmJpdHMucmNkZSkgeworCQlwQWRhcHRlci0+U3RhdHMuY3JjX2VyciArPSBDT1VOVEVSX1dSQVBfMTZfQklUOworCX0KKwlpZiAoQ2FycnkxLmJpdHMucm92cikgeworCQlwQWRhcHRlci0+U3RhdHMucnhfb3ZfZmxvdyArPSBDT1VOVEVSX1dSQVBfMTZfQklUOworCX0KKwlpZiAoQ2FycnkxLmJpdHMucmRycCkgeworCQlwQWRhcHRlci0+U3RhdHMubm9yY3ZidWYgKz0gQ09VTlRFUl9XUkFQXzE2X0JJVDsKKwl9CisJaWYgKENhcnJ5Mi5iaXRzLnRvdnIpIHsKKwkJcEFkYXB0ZXItPlN0YXRzLm1heF9wa3RfZXJyb3IgKz0gQ09VTlRFUl9XUkFQXzEyX0JJVDsKKwl9CisJaWYgKENhcnJ5Mi5iaXRzLnR1bmQpIHsKKwkJcEFkYXB0ZXItPlN0YXRzLnR4X3VmbG8gKz0gQ09VTlRFUl9XUkFQXzEyX0JJVDsKKwl9CisJaWYgKENhcnJ5Mi5iaXRzLnRzY2wpIHsKKwkJcEFkYXB0ZXItPlN0YXRzLmZpcnN0X2NvbGxpc2lvbiArPSBDT1VOVEVSX1dSQVBfMTJfQklUOworCX0KKwlpZiAoQ2FycnkyLmJpdHMudGRmcikgeworCQlwQWRhcHRlci0+U3RhdHMudHhfZGVmZXJyZWQgKz0gQ09VTlRFUl9XUkFQXzEyX0JJVDsKKwl9CisJaWYgKENhcnJ5Mi5iaXRzLnRtY2wpIHsKKwkJcEFkYXB0ZXItPlN0YXRzLmV4Y2Vzc2l2ZV9jb2xsaXNpb25zICs9IENPVU5URVJfV1JBUF8xMl9CSVQ7CisJfQorCWlmIChDYXJyeTIuYml0cy50bGNsKSB7CisJCXBBZGFwdGVyLT5TdGF0cy5sYXRlX2NvbGxpc2lvbnMgKz0gQ09VTlRFUl9XUkFQXzEyX0JJVDsKKwl9CisJaWYgKENhcnJ5Mi5iaXRzLnRuY2wpIHsKKwkJcEFkYXB0ZXItPlN0YXRzLmNvbGxpc2lvbnMgKz0gQ09VTlRFUl9XUkFQXzEyX0JJVDsKKwl9CisKKwlEQkdfTEVBVkUoZXQxMzF4X2RiZ2luZm8pOworfQorCit2b2lkIFNldHVwRGV2aWNlRm9yTXVsdGljYXN0KHN0cnVjdCBldDEzMXhfYWRhcHRlciAqcEFkYXB0ZXIpCit7CisJc3RydWN0IF9SWE1BQ190IF9faW9tZW0gKnJ4bWFjID0gJnBBZGFwdGVyLT5DU1JBZGRyZXNzLT5yeG1hYzsKKwl1aW50MzJfdCBuSW5kZXg7CisJdWludDMyX3QgcmVzdWx0OworCXVpbnQzMl90IGhhc2gxID0gMDsKKwl1aW50MzJfdCBoYXNoMiA9IDA7CisJdWludDMyX3QgaGFzaDMgPSAwOworCXVpbnQzMl90IGhhc2g0ID0gMDsKKwlQTV9DU1JfdCBwbV9jc3I7CisKKwlEQkdfRU5URVIoZXQxMzF4X2RiZ2luZm8pOworCisJLyogSWYgRVQxMzFYX1BBQ0tFVF9UWVBFX01VTFRJQ0FTVCBpcyBzcGVjaWZpZWQsIHRoZW4gd2UgcHJvdmlzaW9uCisJICogdGhlIG11bHRpLWNhc3QgTElTVC4gIElmIGl0IGlzIE5PVCBzcGVjaWZpZWQsIChhbmQgIkFMTCIgaXMgbm90CisJICogc3BlY2lmaWVkKSB0aGVuIHdlIHNob3VsZCBwYXNzIE5PIG11bHRpLWNhc3QgYWRkcmVzc2VzIHRvIHRoZQorCSAqIGRyaXZlci4KKwkgKi8KKwlpZiAocEFkYXB0ZXItPlBhY2tldEZpbHRlciAmIEVUMTMxWF9QQUNLRVRfVFlQRV9NVUxUSUNBU1QpIHsKKwkJREJHX1ZFUkJPU0UoZXQxMzF4X2RiZ2luZm8sCisJCQkgICAgIk1VTFRJQ0FTVCBmbGFnIGlzIHNldCwgTUNDb3VudDogJWRcbiIsCisJCQkgICAgcEFkYXB0ZXItPk1DQWRkcmVzc0NvdW50KTsKKworCQkvKiBMb29wIHRocm91Z2ggb3VyIG11bHRpY2FzdCBhcnJheSBhbmQgc2V0IHVwIHRoZSBkZXZpY2UgKi8KKwkJZm9yIChuSW5kZXggPSAwOyBuSW5kZXggPCBwQWRhcHRlci0+TUNBZGRyZXNzQ291bnQ7IG5JbmRleCsrKSB7CisJCQlEQkdfVkVSQk9TRShldDEzMXhfZGJnaW5mbywKKwkJCQkgICAgIk1DTGlzdFslZF06ICUwMng6JTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4XG4iLAorCQkJCSAgICBuSW5kZXgsCisJCQkJICAgIHBBZGFwdGVyLT5NQ0xpc3RbbkluZGV4XVswXSwKKwkJCQkgICAgcEFkYXB0ZXItPk1DTGlzdFtuSW5kZXhdWzFdLAorCQkJCSAgICBwQWRhcHRlci0+TUNMaXN0W25JbmRleF1bMl0sCisJCQkJICAgIHBBZGFwdGVyLT5NQ0xpc3RbbkluZGV4XVszXSwKKwkJCQkgICAgcEFkYXB0ZXItPk1DTGlzdFtuSW5kZXhdWzRdLAorCQkJCSAgICBwQWRhcHRlci0+TUNMaXN0W25JbmRleF1bNV0pOworCisJCQlyZXN1bHQgPSBldGhlcl9jcmMoNiwgcEFkYXB0ZXItPk1DTGlzdFtuSW5kZXhdKTsKKworCQkJcmVzdWx0ID0gKHJlc3VsdCAmIDB4M0Y4MDAwMDApID4+IDIzOworCisJCQlpZiAocmVzdWx0IDwgMzIpIHsKKwkJCQloYXNoMSB8PSAoMSA8PCByZXN1bHQpOworCQkJfSBlbHNlIGlmICgoMzEgPCByZXN1bHQpICYmIChyZXN1bHQgPCA2NCkpIHsKKwkJCQlyZXN1bHQgLT0gMzI7CisJCQkJaGFzaDIgfD0gKDEgPDwgcmVzdWx0KTsKKwkJCX0gZWxzZSBpZiAoKDYzIDwgcmVzdWx0KSAmJiAocmVzdWx0IDwgOTYpKSB7CisJCQkJcmVzdWx0IC09IDY0OworCQkJCWhhc2gzIHw9ICgxIDw8IHJlc3VsdCk7CisJCQl9IGVsc2UgeworCQkJCXJlc3VsdCAtPSA5NjsKKwkJCQloYXNoNCB8PSAoMSA8PCByZXN1bHQpOworCQkJfQorCQl9CisJfQorCisJLyogV3JpdGUgb3V0IHRoZSBuZXcgaGFzaCB0byB0aGUgZGV2aWNlICovCisJcG1fY3NyLnZhbHVlID0gcmVhZGwoJnBBZGFwdGVyLT5DU1JBZGRyZXNzLT5nbG9iYWwucG1fY3NyLnZhbHVlKTsKKwlpZiAocG1fY3NyLmJpdHMucG1fcGh5X3N3X2NvbWEgPT0gMCkgeworCQl3cml0ZWwoaGFzaDEsICZyeG1hYy0+bXVsdGlfaGFzaDEpOworCQl3cml0ZWwoaGFzaDIsICZyeG1hYy0+bXVsdGlfaGFzaDIpOworCQl3cml0ZWwoaGFzaDMsICZyeG1hYy0+bXVsdGlfaGFzaDMpOworCQl3cml0ZWwoaGFzaDQsICZyeG1hYy0+bXVsdGlfaGFzaDQpOworCX0KKworCURCR19MRUFWRShldDEzMXhfZGJnaW5mbyk7Cit9CisKK3ZvaWQgU2V0dXBEZXZpY2VGb3JVbmljYXN0KHN0cnVjdCBldDEzMXhfYWRhcHRlciAqcEFkYXB0ZXIpCit7CisJc3RydWN0IF9SWE1BQ190IF9faW9tZW0gKnJ4bWFjID0gJnBBZGFwdGVyLT5DU1JBZGRyZXNzLT5yeG1hYzsKKwlSWE1BQ19VTklfUEZfQUREUjFfdCB1bmlfcGYxOworCVJYTUFDX1VOSV9QRl9BRERSMl90IHVuaV9wZjI7CisJUlhNQUNfVU5JX1BGX0FERFIzX3QgdW5pX3BmMzsKKwlQTV9DU1JfdCBwbV9jc3I7CisKKwlEQkdfRU5URVIoZXQxMzF4X2RiZ2luZm8pOworCisJLyogU2V0IHVwIHVuaWNhc3QgcGFja2V0IGZpbHRlciByZWcgMyB0byBiZSB0aGUgZmlyc3QgdHdvIG9jdGV0cyBvZgorCSAqIHRoZSBNQUMgYWRkcmVzcyBmb3IgYm90aCBhZGRyZXNzCisJICoKKwkgKiBTZXQgdXAgdW5pY2FzdCBwYWNrZXQgZmlsdGVyIHJlZyAyIHRvIGJlIHRoZSBvY3RldHMgMiAtIDUgb2YgdGhlCisJICogTUFDIGFkZHJlc3MgZm9yIHNlY29uZCBhZGRyZXNzCisJICoKKwkgKiBTZXQgdXAgdW5pY2FzdCBwYWNrZXQgZmlsdGVyIHJlZyAzIHRvIGJlIHRoZSBvY3RldHMgMiAtIDUgb2YgdGhlCisJICogTUFDIGFkZHJlc3MgZm9yIGZpcnN0IGFkZHJlc3MKKwkgKi8KKwl1bmlfcGYzLmJpdHMuYWRkcjFfMSA9IHBBZGFwdGVyLT5DdXJyZW50QWRkcmVzc1swXTsKKwl1bmlfcGYzLmJpdHMuYWRkcjFfMiA9IHBBZGFwdGVyLT5DdXJyZW50QWRkcmVzc1sxXTsKKwl1bmlfcGYzLmJpdHMuYWRkcjJfMSA9IHBBZGFwdGVyLT5DdXJyZW50QWRkcmVzc1swXTsKKwl1bmlfcGYzLmJpdHMuYWRkcjJfMiA9IHBBZGFwdGVyLT5DdXJyZW50QWRkcmVzc1sxXTsKKworCXVuaV9wZjIuYml0cy5hZGRyMl8zID0gcEFkYXB0ZXItPkN1cnJlbnRBZGRyZXNzWzJdOworCXVuaV9wZjIuYml0cy5hZGRyMl80ID0gcEFkYXB0ZXItPkN1cnJlbnRBZGRyZXNzWzNdOworCXVuaV9wZjIuYml0cy5hZGRyMl81ID0gcEFkYXB0ZXItPkN1cnJlbnRBZGRyZXNzWzRdOworCXVuaV9wZjIuYml0cy5hZGRyMl82ID0gcEFkYXB0ZXItPkN1cnJlbnRBZGRyZXNzWzVdOworCisJdW5pX3BmMS5iaXRzLmFkZHIxXzMgPSBwQWRhcHRlci0+Q3VycmVudEFkZHJlc3NbMl07CisJdW5pX3BmMS5iaXRzLmFkZHIxXzQgPSBwQWRhcHRlci0+Q3VycmVudEFkZHJlc3NbM107CisJdW5pX3BmMS5iaXRzLmFkZHIxXzUgPSBwQWRhcHRlci0+Q3VycmVudEFkZHJlc3NbNF07CisJdW5pX3BmMS5iaXRzLmFkZHIxXzYgPSBwQWRhcHRlci0+Q3VycmVudEFkZHJlc3NbNV07CisKKwlwbV9jc3IudmFsdWUgPSByZWFkbCgmcEFkYXB0ZXItPkNTUkFkZHJlc3MtPmdsb2JhbC5wbV9jc3IudmFsdWUpOworCWlmIChwbV9jc3IuYml0cy5wbV9waHlfc3dfY29tYSA9PSAwKSB7CisJCXdyaXRlbCh1bmlfcGYxLnZhbHVlLCAmcnhtYWMtPnVuaV9wZl9hZGRyMS52YWx1ZSk7CisJCXdyaXRlbCh1bmlfcGYyLnZhbHVlLCAmcnhtYWMtPnVuaV9wZl9hZGRyMi52YWx1ZSk7CisJCXdyaXRlbCh1bmlfcGYzLnZhbHVlLCAmcnhtYWMtPnVuaV9wZl9hZGRyMy52YWx1ZSk7CisJfQorCisJREJHX0xFQVZFKGV0MTMxeF9kYmdpbmZvKTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ldDEzMXgvZXQxMzEwX21hYy5oIGIvZHJpdmVycy9zdGFnaW5nL2V0MTMxeC9ldDEzMTBfbWFjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmQyNmNkMwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ldDEzMXgvZXQxMzEwX21hYy5oCkBAIC0wLDAgKzEsOTMgQEAKKy8qCisgKiBBZ2VyZSBTeXN0ZW1zIEluYy4KKyAqIDEwLzEwMC8xMDAwIEJhc2UtVCBFdGhlcm5ldCBEcml2ZXIgZm9yIHRoZSBFVDEzMDEgYW5kIEVUMTMxeCBzZXJpZXMgTUFDcworICoKKyAqIENvcHlyaWdodCCpIDIwMDUgQWdlcmUgU3lzdGVtcyBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogICBodHRwOi8vd3d3LmFnZXJlLmNvbQorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogZXQxMzEwX21hYy5oIC0gIERlZmluZXMsIHN0cnVjdHMsIGVudW1zLCBwcm90b3R5cGVzLCBldGMuIHBlcnRhaW5pbmcgdG8gdGhlCisgKiAgICAgICAgICAgICAgICAgTUFDLgorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogU09GVFdBUkUgTElDRU5TRQorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgcHJvdmlkZWQgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIHRlcm1zIGFuZCBjb25kaXRpb25zLAorICogd2hpY2ggeW91IHNob3VsZCByZWFkIGNhcmVmdWxseSBiZWZvcmUgdXNpbmcgdGhlIHNvZnR3YXJlLiAgVXNpbmcgdGhpcworICogc29mdHdhcmUgaW5kaWNhdGVzIHlvdXIgYWNjZXB0YW5jZSBvZiB0aGVzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucy4gIElmIHlvdSBkbworICogbm90IGFncmVlIHdpdGggdGhlc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMsIGRvIG5vdCB1c2UgdGhlIHNvZnR3YXJlLgorICoKKyAqIENvcHlyaWdodCCpIDIwMDUgQWdlcmUgU3lzdGVtcyBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIG9yIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb25zLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMKKyAqICAgIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBEaXNjbGFpbWVyIGFzIGNvbW1lbnRzIGluIHRoZSBjb2RlIGFzCisgKiAgICB3ZWxsIGFzIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiAuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAqICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIERpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyAqICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIC4gTmVpdGhlciB0aGUgbmFtZSBvZiBBZ2VyZSBTeXN0ZW1zIEluYy4gbm9yIHRoZSBuYW1lcyBvZiB0aGUgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIERpc2NsYWltZXIKKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIJNBUyBJU5QgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywKKyAqIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBJTkZSSU5HRU1FTlQgQU5EIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBBTlkKKyAqIFVTRSwgTU9ESUZJQ0FUSU9OIE9SIERJU1RSSUJVVElPTiBPRiBUSElTIFNPRlRXQVJFIElTIFNPTEVMWSBBVCBUSEUgVVNFUlMgT1dOCisgKiBSSVNLLiBJTiBOTyBFVkVOVCBTSEFMTCBBR0VSRSBTWVNURU1TIElOQy4gT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSAorICogREFNQUdFLgorICoKKyAqLworCisjaWZuZGVmIF9FVDEzMTBfTUFDX0hfCisjZGVmaW5lIF9FVDEzMTBfTUFDX0hfCisKKworI2luY2x1ZGUgImV0MTMxMF9hZGRyZXNzX21hcC5oIgorCisKKyNkZWZpbmUgQ09VTlRFUl9XUkFQXzI4X0JJVCAweDEwMDAwMDAwCisjZGVmaW5lIENPVU5URVJfV1JBUF8yMl9CSVQgMHg0MDAwMDAKKyNkZWZpbmUgQ09VTlRFUl9XUkFQXzE2X0JJVCAweDEwMDAwCisjZGVmaW5lIENPVU5URVJfV1JBUF8xMl9CSVQgMHgxMDAwCisKKyNkZWZpbmUgQ09VTlRFUl9NQVNLXzI4X0JJVCAoQ09VTlRFUl9XUkFQXzI4X0JJVCAtIDEpCisjZGVmaW5lIENPVU5URVJfTUFTS18yMl9CSVQgKENPVU5URVJfV1JBUF8yMl9CSVQgLSAxKQorI2RlZmluZSBDT1VOVEVSX01BU0tfMTZfQklUIChDT1VOVEVSX1dSQVBfMTZfQklUIC0gMSkKKyNkZWZpbmUgQ09VTlRFUl9NQVNLXzEyX0JJVCAoQ09VTlRFUl9XUkFQXzEyX0JJVCAtIDEpCisKKyNkZWZpbmUgVVBEQVRFX0NPVU5URVIoSG9zdENudCxEZXZDbnQpIFwKKyAgICBIb3N0Q250ID0gSG9zdENudCArIERldkNudDsKKworLyogRm9yd2FyZCBkZWNsYXJhdGlvbiBvZiB0aGUgcHJpdmF0ZSBhZGFwdGVyIHN0cnVjdHVyZSAqLworc3RydWN0IGV0MTMxeF9hZGFwdGVyOworCit2b2lkIENvbmZpZ01BQ1JlZ3MxKHN0cnVjdCBldDEzMXhfYWRhcHRlciAqYWRhcHRlcik7Cit2b2lkIENvbmZpZ01BQ1JlZ3MyKHN0cnVjdCBldDEzMXhfYWRhcHRlciAqYWRhcHRlcik7Cit2b2lkIENvbmZpZ1J4TWFjUmVncyhzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKmFkYXB0ZXIpOwordm9pZCBDb25maWdUeE1hY1JlZ3Moc3RydWN0IGV0MTMxeF9hZGFwdGVyICphZGFwdGVyKTsKK3ZvaWQgQ29uZmlnTWFjU3RhdFJlZ3Moc3RydWN0IGV0MTMxeF9hZGFwdGVyICphZGFwdGVyKTsKK3ZvaWQgQ29uZmlnRmxvd0NvbnRyb2woc3RydWN0IGV0MTMxeF9hZGFwdGVyICphZGFwdGVyKTsKK3ZvaWQgVXBkYXRlTWFjU3RhdEhvc3RDb3VudGVycyhzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKmFkYXB0ZXIpOwordm9pZCBIYW5kbGVNYWNTdGF0SW50ZXJydXB0KHN0cnVjdCBldDEzMXhfYWRhcHRlciAqYWRhcHRlcik7Cit2b2lkIFNldHVwRGV2aWNlRm9yTXVsdGljYXN0KHN0cnVjdCBldDEzMXhfYWRhcHRlciAqYWRhcHRlcik7Cit2b2lkIFNldHVwRGV2aWNlRm9yVW5pY2FzdChzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKmFkYXB0ZXIpOworCisjZW5kaWYgLyogX0VUMTMxMF9NQUNfSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ldDEzMXgvZXQxMzEwX3BoeS5jIGIvZHJpdmVycy9zdGFnaW5nL2V0MTMxeC9ldDEzMTBfcGh5LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmM0ZmE1NAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ldDEzMXgvZXQxMzEwX3BoeS5jCkBAIC0wLDAgKzEsMTI4MSBAQAorLyoKKyAqIEFnZXJlIFN5c3RlbXMgSW5jLgorICogMTAvMTAwLzEwMDAgQmFzZS1UIEV0aGVybmV0IERyaXZlciBmb3IgdGhlIEVUMTMwMSBhbmQgRVQxMzF4IHNlcmllcyBNQUNzCisgKgorICogQ29weXJpZ2h0IKkgMjAwNSBBZ2VyZSBTeXN0ZW1zIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgIGh0dHA6Ly93d3cuYWdlcmUuY29tCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBldDEzMTBfcGh5LmMgLSBSb3V0aW5lcyBmb3IgY29uZmlndXJpbmcgYW5kIGFjY2Vzc2luZyB0aGUgUEhZCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBTT0ZUV0FSRSBMSUNFTlNFCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBwcm92aWRlZCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgdGVybXMgYW5kIGNvbmRpdGlvbnMsCisgKiB3aGljaCB5b3Ugc2hvdWxkIHJlYWQgY2FyZWZ1bGx5IGJlZm9yZSB1c2luZyB0aGUgc29mdHdhcmUuICBVc2luZyB0aGlzCisgKiBzb2Z0d2FyZSBpbmRpY2F0ZXMgeW91ciBhY2NlcHRhbmNlIG9mIHRoZXNlIHRlcm1zIGFuZCBjb25kaXRpb25zLiAgSWYgeW91IGRvCisgKiBub3QgYWdyZWUgd2l0aCB0aGVzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucywgZG8gbm90IHVzZSB0aGUgc29mdHdhcmUuCisgKgorICogQ29weXJpZ2h0IKkgMjAwNSBBZ2VyZSBTeXN0ZW1zIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ugb3IgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbnMsIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiAuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcworICogICAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIERpc2NsYWltZXIgYXMgY29tbWVudHMgaW4gdGhlIGNvZGUgYXMKKyAqICAgIHdlbGwgYXMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIC4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICogICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgRGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgorICogICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogLiBOZWl0aGVyIHRoZSBuYW1lIG9mIEFnZXJlIFN5c3RlbXMgSW5jLiBub3IgdGhlIG5hbWVzIG9mIHRoZSBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogRGlzY2xhaW1lcgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgk0FTIElTlCBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLAorICogSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIElORlJJTkdFTUVOVCBBTkQgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIEFOWQorICogVVNFLCBNT0RJRklDQVRJT04gT1IgRElTVFJJQlVUSU9OIE9GIFRISVMgU09GVFdBUkUgSVMgU09MRUxZIEFUIFRIRSBVU0VSUyBPV04KKyAqIFJJU0suIElOIE5PIEVWRU5UIFNIQUxMIEFHRVJFIFNZU1RFTVMgSU5DLiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNICisgKiBEQU1BR0UuCisgKgorICovCisKKyNpbmNsdWRlICJldDEzMXhfdmVyc2lvbi5oIgorI2luY2x1ZGUgImV0MTMxeF9kZWJ1Zy5oIgorI2luY2x1ZGUgImV0MTMxeF9kZWZzLmgiCisKKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKworI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvcHRyYWNlLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2N0eXBlLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbi5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgorI2luY2x1ZGUgPGFzbS9iaXRvcHMuaD4KKworI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CisjaW5jbHVkZSA8bGludXgvaWZfYXJwLmg+CisjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CisjaW5jbHVkZSA8bGludXgvcmFuZG9tLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKworI2luY2x1ZGUgImV0MTMxMF9waHkuaCIKKyNpbmNsdWRlICJldDEzMTBfcG0uaCIKKyNpbmNsdWRlICJldDEzMTBfamFnY29yZS5oIgorCisjaW5jbHVkZSAiZXQxMzF4X2FkYXB0ZXIuaCIKKyNpbmNsdWRlICJldDEzMXhfbmV0ZGV2LmgiCisjaW5jbHVkZSAiZXQxMzF4X2luaXRwY2kuaCIKKworI2luY2x1ZGUgImV0MTMxMF9hZGRyZXNzX21hcC5oIgorI2luY2x1ZGUgImV0MTMxMF9qYWdjb3JlLmgiCisjaW5jbHVkZSAiZXQxMzEwX3R4LmgiCisjaW5jbHVkZSAiZXQxMzEwX3J4LmgiCisjaW5jbHVkZSAiZXQxMzEwX21hYy5oIgorCisvKiBEYXRhIGZvciBkZWJ1Z2dpbmcgZmFjaWxpdGllcyAqLworI2lmZGVmIENPTkZJR19FVDEzMVhfREVCVUcKK2V4dGVybiBkYmdfaW5mb190ICpldDEzMXhfZGJnaW5mbzsKKyNlbmRpZiAvKiBDT05GSUdfRVQxMzFYX0RFQlVHICovCisKKy8qIFByb3RvdHlwZXMgZm9yIGZ1bmN0aW9ucyB3aXRoIGxvY2FsIHNjb3BlICovCitzdGF0aWMgaW50IGV0MTMxeF94Y3ZyX2luaXQoc3RydWN0IGV0MTMxeF9hZGFwdGVyICphZGFwdGVyKTsKKworLyoqCisgKiBQaHlNaVJlYWQgLSBSZWFkIGZyb20gdGhlIFBIWSB0aHJvdWdoIHRoZSBNSUkgSW50ZXJmYWNlIG9uIHRoZSBNQUMKKyAqIEBhZGFwdGVyOiBwb2ludGVyIHRvIG91ciBwcml2YXRlIGFkYXB0ZXIgc3RydWN0dXJlCisgKiBAeGN2ckFkZHI6IHRoZSBhZGRyZXNzIG9mIHRoZSB0cmFuc2NpZXZlcgorICogQHhjdnJSZWc6IHRoZSByZWdpc3RlciB0byByZWFkCisgKiBAdmFsdWU6IHBvaW50ZXIgdG8gYSAxNi1iaXQgdmFsdWUgaW4gd2hpY2ggdGhlIHZhbHVlIHdpbGwgYmUgc3RvcmVkCisgKgorICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIGVycm5vIG9uIGZhaWx1cmUgKGFzIGRlZmluZWQgaW4gZXJybm8uaCkKKyAqLworaW50IFBoeU1pUmVhZChzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKmFkYXB0ZXIsIHVpbnQ4X3QgeGN2ckFkZHIsCisJICAgICAgdWludDhfdCB4Y3ZyUmVnLCB1aW50MTZfdCAqdmFsdWUpCit7CisJc3RydWN0IF9NQUNfdCBfX2lvbWVtICptYWMgPSAmYWRhcHRlci0+Q1NSQWRkcmVzcy0+bWFjOworCWludCBzdGF0dXMgPSAwOworCXVpbnQzMl90IGRlbGF5OworCU1JSV9NR01UX0FERFJfdCBtaWlBZGRyOworCU1JSV9NR01UX0NNRF90IG1paUNtZDsKKwlNSUlfTUdNVF9JTkRJQ0FUT1JfdCBtaWlJbmRpY2F0b3I7CisKKwkvKiBTYXZlIGEgbG9jYWwgY29weSBvZiB0aGUgcmVnaXN0ZXJzIHdlIGFyZSBkZWFsaW5nIHdpdGggc28gd2UgY2FuCisJICogc2V0IHRoZW0gYmFjaworCSAqLworCW1paUFkZHIudmFsdWUgPSByZWFkbCgmbWFjLT5taWlfbWdtdF9hZGRyLnZhbHVlKTsKKwltaWlDbWQudmFsdWUgPSByZWFkbCgmbWFjLT5taWlfbWdtdF9jbWQudmFsdWUpOworCisJLyogU3RvcCB0aGUgY3VycmVudCBvcGVyYXRpb24gKi8KKwl3cml0ZWwoMCwgJm1hYy0+bWlpX21nbXRfY21kLnZhbHVlKTsKKworCS8qIFNldCB1cCB0aGUgcmVnaXN0ZXIgd2UgbmVlZCB0byByZWFkIGZyb20gb24gdGhlIGNvcnJlY3QgUEhZICovCisJeworCQlNSUlfTUdNVF9BRERSX3QgbWlpX21nbXRfYWRkciA9IHsgMCB9OworCisJCW1paV9tZ210X2FkZHIuYml0cy5waHlfYWRkciA9IHhjdnJBZGRyOworCQltaWlfbWdtdF9hZGRyLmJpdHMucmVnX2FkZHIgPSB4Y3ZyUmVnOworCQl3cml0ZWwobWlpX21nbXRfYWRkci52YWx1ZSwgJm1hYy0+bWlpX21nbXRfYWRkci52YWx1ZSk7CisJfQorCisJLyogS2ljayB0aGUgcmVhZCBjeWNsZSBvZmYgKi8KKwlkZWxheSA9IDA7CisKKwl3cml0ZWwoMHgxLCAmbWFjLT5taWlfbWdtdF9jbWQudmFsdWUpOworCisJZG8geworCQl1ZGVsYXkoNTApOworCQlkZWxheSsrOworCQltaWlJbmRpY2F0b3IudmFsdWUgPSByZWFkbCgmbWFjLT5taWlfbWdtdF9pbmRpY2F0b3IudmFsdWUpOworCX0gd2hpbGUgKChtaWlJbmRpY2F0b3IuYml0cy5ub3RfdmFsaWQgfHwgbWlpSW5kaWNhdG9yLmJpdHMuYnVzeSkgJiYKKwkJIGRlbGF5IDwgNTApOworCisJLyogSWYgd2UgaGl0IHRoZSBtYXggZGVsYXksIHdlIGNvdWxkIG5vdCByZWFkIHRoZSByZWdpc3RlciAqLworCWlmIChkZWxheSA+PSA1MCkgeworCQlEQkdfV0FSTklORyhldDEzMXhfZGJnaW5mbywKKwkJCSAgICAieGN2clJlZyAweCUwOHggY291bGQgbm90IGJlIHJlYWRcbiIsIHhjdnJSZWcpOworCQlEQkdfV0FSTklORyhldDEzMXhfZGJnaW5mbywgInN0YXR1cyBpcyAgMHglMDh4XG4iLAorCQkJICAgIG1paUluZGljYXRvci52YWx1ZSk7CisKKwkJc3RhdHVzID0gLUVJTzsKKwl9CisKKwkvKiBJZiB3ZSBoaXQgaGVyZSB3ZSB3ZXJlIGFibGUgdG8gcmVhZCB0aGUgcmVnaXN0ZXIgYW5kIHdlIG5lZWQgdG8KKwkgKiByZXR1cm4gdGhlIHZhbHVlIHRvIHRoZSBjYWxsZXIKKwkgKi8KKwkvKiBUT0RPOiBtYWtlIHRoaXMgc3R1ZmYgYSBzaW1wbGUgcmVhZHcoKT8hICovCisJeworCQlNSUlfTUdNVF9TVEFUX3QgbWlpX21nbXRfc3RhdDsKKworCQltaWlfbWdtdF9zdGF0LnZhbHVlID0gcmVhZGwoJm1hYy0+bWlpX21nbXRfc3RhdC52YWx1ZSk7CisJCSp2YWx1ZSA9ICh1aW50MTZfdCkgbWlpX21nbXRfc3RhdC5iaXRzLnBoeV9zdGF0OworCX0KKworCS8qIFN0b3AgdGhlIHJlYWQgb3BlcmF0aW9uICovCisJd3JpdGVsKDAsICZtYWMtPm1paV9tZ210X2NtZC52YWx1ZSk7CisKKwlEQkdfVkVSQk9TRShldDEzMXhfZGJnaW5mbywgIiAgeGN2cl9hZGRyID0gMHglMDJ4LCAiCisJCSAgICAieGN2cl9yZWcgID0gMHglMDJ4LCAiCisJCSAgICAidmFsdWUgICAgID0gMHglMDR4LlxuIiwgeGN2ckFkZHIsIHhjdnJSZWcsICp2YWx1ZSk7CisKKwkvKiBzZXQgdGhlIHJlZ2lzdGVycyB3ZSB0b3VjaGVkIGJhY2sgdG8gdGhlIHN0YXRlIGF0IHdoaWNoIHdlIGVudGVyZWQKKwkgKiB0aGlzIGZ1bmN0aW9uCisJICovCisJd3JpdGVsKG1paUFkZHIudmFsdWUsICZtYWMtPm1paV9tZ210X2FkZHIudmFsdWUpOworCXdyaXRlbChtaWlDbWQudmFsdWUsICZtYWMtPm1paV9tZ210X2NtZC52YWx1ZSk7CisKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKioKKyAqIE1pV3JpdGUgLSBXcml0ZSB0byBhIFBIWSByZWdpc3RlciB0aHJvdWdoIHRoZSBNSUkgaW50ZXJmYWNlIG9mIHRoZSBNQUMKKyAqIEBhZGFwdGVyOiBwb2ludGVyIHRvIG91ciBwcml2YXRlIGFkYXB0ZXIgc3RydWN0dXJlCisgKiBAeGN2clJlZzogdGhlIHJlZ2lzdGVyIHRvIHJlYWQKKyAqIEB2YWx1ZTogMTYtYml0IHZhbHVlIHRvIHdyaXRlCisgKgorICogUmV0dXJuIDAgb24gc3VjY2VzcywgZXJybm8gb24gZmFpbHVyZSAoYXMgZGVmaW5lZCBpbiBlcnJuby5oKQorICovCitpbnQgTWlXcml0ZShzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKmFkYXB0ZXIsIHVpbnQ4X3QgeGN2clJlZywgdWludDE2X3QgdmFsdWUpCit7CisJc3RydWN0IF9NQUNfdCBfX2lvbWVtICptYWMgPSAmYWRhcHRlci0+Q1NSQWRkcmVzcy0+bWFjOworCWludCBzdGF0dXMgPSAwOworCXVpbnQ4X3QgeGN2ckFkZHIgPSBhZGFwdGVyLT5TdGF0cy54Y3ZyX2FkZHI7CisJdWludDMyX3QgZGVsYXk7CisJTUlJX01HTVRfQUREUl90IG1paUFkZHI7CisJTUlJX01HTVRfQ01EX3QgbWlpQ21kOworCU1JSV9NR01UX0lORElDQVRPUl90IG1paUluZGljYXRvcjsKKworCS8qIFNhdmUgYSBsb2NhbCBjb3B5IG9mIHRoZSByZWdpc3RlcnMgd2UgYXJlIGRlYWxpbmcgd2l0aCBzbyB3ZSBjYW4KKwkgKiBzZXQgdGhlbSBiYWNrCisJICovCisJbWlpQWRkci52YWx1ZSA9IHJlYWRsKCZtYWMtPm1paV9tZ210X2FkZHIudmFsdWUpOworCW1paUNtZC52YWx1ZSA9IHJlYWRsKCZtYWMtPm1paV9tZ210X2NtZC52YWx1ZSk7CisKKwkvKiBTdG9wIHRoZSBjdXJyZW50IG9wZXJhdGlvbiAqLworCXdyaXRlbCgwLCAmbWFjLT5taWlfbWdtdF9jbWQudmFsdWUpOworCisJLyogU2V0IHVwIHRoZSByZWdpc3RlciB3ZSBuZWVkIHRvIHdyaXRlIHRvIG9uIHRoZSBjb3JyZWN0IFBIWSAqLworCXsKKwkJTUlJX01HTVRfQUREUl90IG1paV9tZ210X2FkZHI7CisKKwkJbWlpX21nbXRfYWRkci5iaXRzLnBoeV9hZGRyID0geGN2ckFkZHI7CisJCW1paV9tZ210X2FkZHIuYml0cy5yZWdfYWRkciA9IHhjdnJSZWc7CisJCXdyaXRlbChtaWlfbWdtdF9hZGRyLnZhbHVlLCAmbWFjLT5taWlfbWdtdF9hZGRyLnZhbHVlKTsKKwl9CisKKwkvKiBBZGQgdGhlIHZhbHVlIHRvIHdyaXRlIHRvIHRoZSByZWdpc3RlcnMgdG8gdGhlIG1hYyAqLworCXdyaXRlbCh2YWx1ZSwgJm1hYy0+bWlpX21nbXRfY3RybC52YWx1ZSk7CisJZGVsYXkgPSAwOworCisJZG8geworCQl1ZGVsYXkoNTApOworCQlkZWxheSsrOworCQltaWlJbmRpY2F0b3IudmFsdWUgPSByZWFkbCgmbWFjLT5taWlfbWdtdF9pbmRpY2F0b3IudmFsdWUpOworCX0gd2hpbGUgKG1paUluZGljYXRvci5iaXRzLmJ1c3kgJiYgZGVsYXkgPCAxMDApOworCisJLyogSWYgd2UgaGl0IHRoZSBtYXggZGVsYXksIHdlIGNvdWxkIG5vdCB3cml0ZSB0aGUgcmVnaXN0ZXIgKi8KKwlpZiAoZGVsYXkgPT0gMTAwKSB7CisJCXVpbnQxNl90IFRlbXBWYWx1ZTsKKworCQlEQkdfV0FSTklORyhldDEzMXhfZGJnaW5mbywKKwkJCSAgICAieGN2clJlZyAweCUwOHggY291bGQgbm90IGJlIHdyaXR0ZW4iLCB4Y3ZyUmVnKTsKKwkJREJHX1dBUk5JTkcoZXQxMzF4X2RiZ2luZm8sICJzdGF0dXMgaXMgIDB4JTA4eFxuIiwKKwkJCSAgICBtaWlJbmRpY2F0b3IudmFsdWUpOworCQlEQkdfV0FSTklORyhldDEzMXhfZGJnaW5mbywgImNvbW1hbmQgaXMgIDB4JTA4eFxuIiwKKwkJCSAgICByZWFkbCgmbWFjLT5taWlfbWdtdF9jbWQudmFsdWUpKTsKKworCQlNaVJlYWQoYWRhcHRlciwgeGN2clJlZywgJlRlbXBWYWx1ZSk7CisKKwkJc3RhdHVzID0gLUVJTzsKKwl9CisKKwkvKiBTdG9wIHRoZSB3cml0ZSBvcGVyYXRpb24gKi8KKwl3cml0ZWwoMCwgJm1hYy0+bWlpX21nbXRfY21kLnZhbHVlKTsKKworCS8qIHNldCB0aGUgcmVnaXN0ZXJzIHdlIHRvdWNoZWQgYmFjayB0byB0aGUgc3RhdGUgYXQgd2hpY2ggd2UgZW50ZXJlZAorICAgICAgICAgKiB0aGlzIGZ1bmN0aW9uCisgICAgICAgICAqLworCXdyaXRlbChtaWlBZGRyLnZhbHVlLCAmbWFjLT5taWlfbWdtdF9hZGRyLnZhbHVlKTsKKwl3cml0ZWwobWlpQ21kLnZhbHVlLCAmbWFjLT5taWlfbWdtdF9jbWQudmFsdWUpOworCisJREJHX1ZFUkJPU0UoZXQxMzF4X2RiZ2luZm8sICIgeGN2cl9hZGRyID0gMHglMDJ4LCAiCisJCSAgICAieGN2cl9yZWcgID0gMHglMDJ4LCAiCisJCSAgICAidmFsdWUgICAgID0gMHglMDR4LlxuIiwgeGN2ckFkZHIsIHhjdnJSZWcsIHZhbHVlKTsKKworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qKgorICogZXQxMzF4X3hjdnJfZmluZCAtIEZpbmQgdGhlIFBIWSBJRAorICogQGFkYXB0ZXI6IHBvaW50ZXIgdG8gb3VyIHByaXZhdGUgYWRhcHRlciBzdHJ1Y3R1cmUKKyAqCisgKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgZXJybm8gb24gZmFpbHVyZSAoYXMgZGVmaW5lZCBpbiBlcnJuby5oKQorICovCitpbnQgZXQxMzF4X3hjdnJfZmluZChzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJaW50IHN0YXR1cyA9IC1FTk9ERVY7CisJdWludDhfdCB4Y3ZyX2FkZHI7CisJTUlfSURSMV90IGlkcjE7CisJTUlfSURSMl90IGlkcjI7CisJdWludDMyX3QgeGN2cl9pZDsKKworCURCR19FTlRFUihldDEzMXhfZGJnaW5mbyk7CisKKwkvKiBXZSBuZWVkIHRvIGdldCB4Y3ZyIGlkIGFuZCBhZGRyZXNzIHdlIGp1c3QgZ2V0IHRoZSBmaXJzdCBvbmUgKi8KKwlmb3IgKHhjdnJfYWRkciA9IDA7IHhjdnJfYWRkciA8IDMyOyB4Y3ZyX2FkZHIrKykgeworCQkvKiBSZWFkIHRoZSBJRCBmcm9tIHRoZSBQSFkgKi8KKwkJUGh5TWlSZWFkKGFkYXB0ZXIsIHhjdnJfYWRkciwKKwkJCSAgKHVpbnQ4X3QpIG9mZnNldG9mKE1JX1JFR1NfdCwgaWRyMSksCisJCQkgICZpZHIxLnZhbHVlKTsKKwkJUGh5TWlSZWFkKGFkYXB0ZXIsIHhjdnJfYWRkciwKKwkJCSAgKHVpbnQ4X3QpIG9mZnNldG9mKE1JX1JFR1NfdCwgaWRyMiksCisJCQkgICZpZHIyLnZhbHVlKTsKKworCQl4Y3ZyX2lkID0gKHVpbnQzMl90KSAoKGlkcjEudmFsdWUgPDwgMTYpIHwgaWRyMi52YWx1ZSk7CisKKwkJaWYgKChpZHIxLnZhbHVlICE9IDApICYmIChpZHIxLnZhbHVlICE9IDB4ZmZmZikpIHsKKwkJCURCR19UUkFDRShldDEzMXhfZGJnaW5mbywKKwkJCQkgICJYY3ZyIGFkZHI6IDB4JTAyeFx0WGN2cl9pZDogMHglMDh4XG4iLAorCQkJCSAgeGN2cl9hZGRyLCB4Y3ZyX2lkKTsKKworCQkJYWRhcHRlci0+U3RhdHMueGN2cl9pZCA9IHhjdnJfaWQ7CisJCQlhZGFwdGVyLT5TdGF0cy54Y3ZyX2FkZHIgPSB4Y3ZyX2FkZHI7CisKKwkJCXN0YXR1cyA9IDA7CisJCQlicmVhazsKKwkJfQorCX0KKworCURCR19MRUFWRShldDEzMXhfZGJnaW5mbyk7CisJcmV0dXJuIHN0YXR1czsKK30KKworLyoqCisgKiBldDEzMXhfc2V0cGh5X25vcm1hbCAtIFNldCBQSFkgZm9yIG5vcm1hbCBvcGVyYXRpb24uCisgKiBAYWRhcHRlcjogcG9pbnRlciB0byBvdXIgcHJpdmF0ZSBhZGFwdGVyIHN0cnVjdHVyZQorICoKKyAqIFVzZWQgYnkgUG93ZXIgTWFuYWdlbWVudCB0byBmb3JjZSB0aGUgUEhZIGludG8gMTAgQmFzZSBUIGhhbGYtZHVwbGV4IG1vZGUsCisgKiB3aGVuIGdvaW5nIHRvIEQzIGluIFdPTCBtb2RlLiBBbHNvIHVzZWQgZHVyaW5nIGluaXRpYWxpemF0aW9uIHRvIHNldCB0aGUKKyAqIFBIWSBmb3Igbm9ybWFsIG9wZXJhdGlvbi4KKyAqLworaW50IGV0MTMxeF9zZXRwaHlfbm9ybWFsKHN0cnVjdCBldDEzMXhfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlpbnQgc3RhdHVzOworCisJREJHX0VOVEVSKGV0MTMxeF9kYmdpbmZvKTsKKworCS8qIE1ha2Ugc3VyZSB0aGUgUEhZIGlzIHBvd2VyZWQgdXAgKi8KKwlFVDEzMTBfUGh5UG93ZXJEb3duKGFkYXB0ZXIsIDApOworCXN0YXR1cyA9IGV0MTMxeF94Y3ZyX2luaXQoYWRhcHRlcik7CisKKwlEQkdfTEVBVkUoZXQxMzF4X2RiZ2luZm8pOworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qKgorICogZXQxMzF4X3hjdnJfaW5pdCAtIEluaXQgdGhlIHBoeSBpZiB3ZSBhcmUgc2V0dGluZyBpdCBpbnRvIGZvcmNlIG1vZGUKKyAqIEBhZGFwdGVyOiBwb2ludGVyIHRvIG91ciBwcml2YXRlIGFkYXB0ZXIgc3RydWN0dXJlCisgKgorICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIGVycm5vIG9uIGZhaWx1cmUgKGFzIGRlZmluZWQgaW4gZXJybm8uaCkKKyAqLworc3RhdGljIGludCBldDEzMXhfeGN2cl9pbml0KHN0cnVjdCBldDEzMXhfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlpbnQgc3RhdHVzID0gMDsKKwlNSV9JTVJfdCBpbXI7CisJTUlfSVNSX3QgaXNyOworCU1JX0xDUjJfdCBsY3IyOworCisJREJHX0VOVEVSKGV0MTMxeF9kYmdpbmZvKTsKKworCS8qIFplcm8gb3V0IHRoZSBhZGFwdGVyIHN0cnVjdHVyZSB2YXJpYWJsZSByZXByZXNlbnRpbmcgQk1TUiAqLworCWFkYXB0ZXItPkJtc3IudmFsdWUgPSAwOworCisJTWlSZWFkKGFkYXB0ZXIsICh1aW50OF90KSBvZmZzZXRvZihNSV9SRUdTX3QsIGlzciksICZpc3IudmFsdWUpOworCisJTWlSZWFkKGFkYXB0ZXIsICh1aW50OF90KSBvZmZzZXRvZihNSV9SRUdTX3QsIGltciksICZpbXIudmFsdWUpOworCisJLyogU2V0IHRoZSBsaW5rIHN0YXR1cyBpbnRlcnJ1cHQgb25seS4gIEJhZCBiZWhhdmlvciB3aGVuIGxpbmsgc3RhdHVzCisJICogYW5kIGF1dG8gbmVnIGFyZSBzZXQsIHdlIHJ1biBpbnRvIGEgbmVzdGVkIGludGVycnVwdCBwcm9ibGVtCisJICovCisJaW1yLmJpdHMuaW50X2VuID0gMHgxOworCWltci5iaXRzLmxpbmtfc3RhdHVzID0gMHgxOworCWltci5iaXRzLmF1dG9uZWdfc3RhdHVzID0gMHgxOworCisJTWlXcml0ZShhZGFwdGVyLCAodWludDhfdCkgb2Zmc2V0b2YoTUlfUkVHU190LCBpbXIpLCBpbXIudmFsdWUpOworCisJLyogU2V0IHRoZSBMRUQgYmVoYXZpb3Igc3VjaCB0aGF0IExFRCAxIGluZGljYXRlcyBzcGVlZCAob2ZmID0KKwkgKiAxME1iaXRzLCBibGluayA9IDEwME1iaXRzLCBvbiA9IDEwMDBNYml0cykgYW5kIExFRCAyIGluZGljYXRlcworCSAqIGxpbmsgYW5kIGFjdGl2aXR5IChvbiBmb3IgbGluaywgYmxpbmsgb2ZmIGZvciBhY3Rpdml0eSkuCisJICoKKwkgKiBOT1RFOiBTb21lIGN1c3RvbWl6YXRpb25zIGhhdmUgYmVlbiBhZGRlZCBoZXJlIGZvciBzcGVjaWZpYworCSAqIHZlbmRvcnM7IFRoZSBMRUQgYmVoYXZpb3IgaXMgbm93IGRldGVybWluZWQgYnkgdmVuZG9yIGRhdGEgaW4gdGhlCisJICogRUVQUk9NLiBIb3dldmVyLCB0aGUgYWJvdmUgZGVzY3JpcHRpb24gaXMgdGhlIGRlZmF1bHQuCisJICovCisJaWYgKChhZGFwdGVyLT5lZXByb21EYXRhWzFdICYgMHg0KSA9PSAwKSB7CisJCU1pUmVhZChhZGFwdGVyLCAodWludDhfdCkgb2Zmc2V0b2YoTUlfUkVHU190LCBsY3IyKSwKKwkJICAgICAgICZsY3IyLnZhbHVlKTsKKwkJaWYgKChhZGFwdGVyLT5lZXByb21EYXRhWzFdICYgMHg4KSA9PSAwKQorCQkJbGNyMi5iaXRzLmxlZF90eF9yeCA9IDB4MzsKKwkJZWxzZQorCQkJbGNyMi5iaXRzLmxlZF90eF9yeCA9IDB4NDsKKwkJbGNyMi5iaXRzLmxlZF9saW5rID0gMHhhOworCQlNaVdyaXRlKGFkYXB0ZXIsICh1aW50OF90KSBvZmZzZXRvZihNSV9SRUdTX3QsIGxjcjIpLAorCQkJbGNyMi52YWx1ZSk7CisJfQorCisJLyogRGV0ZXJtaW5lIGlmIHdlIG5lZWQgdG8gZ28gaW50byBhIGZvcmNlIG1vZGUgYW5kIHNldCBpdCAqLworCWlmIChhZGFwdGVyLT5BaUZvcmNlU3BlZWQgPT0gMCAmJiBhZGFwdGVyLT5BaUZvcmNlRHB4ID09IDApIHsKKwkJaWYgKChhZGFwdGVyLT5SZWdpc3RyeUZsb3dDb250cm9sID09IFR4T25seSkgfHwKKwkJICAgIChhZGFwdGVyLT5SZWdpc3RyeUZsb3dDb250cm9sID09IEJvdGgpKSB7CisJCQlFVDEzMTBfUGh5QWNjZXNzTWlCaXQoYWRhcHRlciwKKwkJCQkJICAgICAgVFJVRVBIWV9CSVRfU0VULCA0LCAxMSwgTlVMTCk7CisJCX0gZWxzZSB7CisJCQlFVDEzMTBfUGh5QWNjZXNzTWlCaXQoYWRhcHRlciwKKwkJCQkJICAgICAgVFJVRVBIWV9CSVRfQ0xFQVIsIDQsIDExLCBOVUxMKTsKKwkJfQorCisJCWlmIChhZGFwdGVyLT5SZWdpc3RyeUZsb3dDb250cm9sID09IEJvdGgpIHsKKwkJCUVUMTMxMF9QaHlBY2Nlc3NNaUJpdChhZGFwdGVyLAorCQkJCQkgICAgICBUUlVFUEhZX0JJVF9TRVQsIDQsIDEwLCBOVUxMKTsKKwkJfSBlbHNlIHsKKwkJCUVUMTMxMF9QaHlBY2Nlc3NNaUJpdChhZGFwdGVyLAorCQkJCQkgICAgICBUUlVFUEhZX0JJVF9DTEVBUiwgNCwgMTAsIE5VTEwpOworCQl9CisKKwkJLyogU2V0IHRoZSBwaHkgdG8gYXV0b25lZ290aWF0aW9uICovCisJCUVUMTMxMF9QaHlBdXRvTmVnKGFkYXB0ZXIsIHRydWUpOworCisJCS8qIE5PVEUgLSBEbyB3ZSBuZWVkIHRoaXM/ICovCisJCUVUMTMxMF9QaHlBY2Nlc3NNaUJpdChhZGFwdGVyLCBUUlVFUEhZX0JJVF9TRVQsIDAsIDksIE5VTEwpOworCisJCURCR19MRUFWRShldDEzMXhfZGJnaW5mbyk7CisJCXJldHVybiBzdGF0dXM7CisJfSBlbHNlIHsKKwkJRVQxMzEwX1BoeUF1dG9OZWcoYWRhcHRlciwgZmFsc2UpOworCisJCS8qIFNldCB0byB0aGUgY29ycmVjdCBmb3JjZSBtb2RlLiAqLworCQlpZiAoYWRhcHRlci0+QWlGb3JjZURweCAhPSAxKSB7CisJCQlpZiAoKGFkYXB0ZXItPlJlZ2lzdHJ5Rmxvd0NvbnRyb2wgPT0gVHhPbmx5KSB8fAorCQkJICAgIChhZGFwdGVyLT5SZWdpc3RyeUZsb3dDb250cm9sID09IEJvdGgpKSB7CisJCQkJRVQxMzEwX1BoeUFjY2Vzc01pQml0KGFkYXB0ZXIsCisJCQkJCQkgICAgICBUUlVFUEhZX0JJVF9TRVQsIDQsIDExLAorCQkJCQkJICAgICAgTlVMTCk7CisJCQl9IGVsc2UgeworCQkJCUVUMTMxMF9QaHlBY2Nlc3NNaUJpdChhZGFwdGVyLAorCQkJCQkJICAgICAgVFJVRVBIWV9CSVRfQ0xFQVIsIDQsIDExLAorCQkJCQkJICAgICAgTlVMTCk7CisJCQl9CisKKwkJCWlmIChhZGFwdGVyLT5SZWdpc3RyeUZsb3dDb250cm9sID09IEJvdGgpIHsKKwkJCQlFVDEzMTBfUGh5QWNjZXNzTWlCaXQoYWRhcHRlciwKKwkJCQkJCSAgICAgIFRSVUVQSFlfQklUX1NFVCwgNCwgMTAsCisJCQkJCQkgICAgICBOVUxMKTsKKwkJCX0gZWxzZSB7CisJCQkJRVQxMzEwX1BoeUFjY2Vzc01pQml0KGFkYXB0ZXIsCisJCQkJCQkgICAgICBUUlVFUEhZX0JJVF9DTEVBUiwgNCwgMTAsCisJCQkJCQkgICAgICBOVUxMKTsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCUVUMTMxMF9QaHlBY2Nlc3NNaUJpdChhZGFwdGVyLAorCQkJCQkgICAgICBUUlVFUEhZX0JJVF9DTEVBUiwgNCwgMTAsIE5VTEwpOworCQkJRVQxMzEwX1BoeUFjY2Vzc01pQml0KGFkYXB0ZXIsCisJCQkJCSAgICAgIFRSVUVQSFlfQklUX0NMRUFSLCA0LCAxMSwgTlVMTCk7CisJCX0KKworCQlzd2l0Y2ggKGFkYXB0ZXItPkFpRm9yY2VTcGVlZCkgeworCQljYXNlIDEwOgorCQkJaWYgKGFkYXB0ZXItPkFpRm9yY2VEcHggPT0gMSkgeworCQkJCVRQQUxfU2V0UGh5MTBIYWxmRHVwbGV4KGFkYXB0ZXIpOworCQkJfSBlbHNlIGlmIChhZGFwdGVyLT5BaUZvcmNlRHB4ID09IDIpIHsKKwkJCQlUUEFMX1NldFBoeTEwRnVsbER1cGxleChhZGFwdGVyKTsKKwkJCX0gZWxzZSB7CisJCQkJVFBBTF9TZXRQaHkxMEZvcmNlKGFkYXB0ZXIpOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgMTAwOgorCQkJaWYgKGFkYXB0ZXItPkFpRm9yY2VEcHggPT0gMSkgeworCQkJCVRQQUxfU2V0UGh5MTAwSGFsZkR1cGxleChhZGFwdGVyKTsKKwkJCX0gZWxzZSBpZiAoYWRhcHRlci0+QWlGb3JjZURweCA9PSAyKSB7CisJCQkJVFBBTF9TZXRQaHkxMDBGdWxsRHVwbGV4KGFkYXB0ZXIpOworCQkJfSBlbHNlIHsKKwkJCQlUUEFMX1NldFBoeTEwMEZvcmNlKGFkYXB0ZXIpOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgMTAwMDoKKwkJCVRQQUxfU2V0UGh5MTAwMEZ1bGxEdXBsZXgoYWRhcHRlcik7CisJCQlicmVhazsKKwkJfQorCisJCURCR19MRUFWRShldDEzMXhfZGJnaW5mbyk7CisJCXJldHVybiBzdGF0dXM7CisJfQorfQorCit2b2lkIGV0MTMxeF9NaWlfY2hlY2soc3RydWN0IGV0MTMxeF9hZGFwdGVyICpwQWRhcHRlciwKKwkJICAgICAgTUlfQk1TUl90IGJtc3IsIE1JX0JNU1JfdCBibXNyX2ludHMpCit7CisJdWludDhfdCB1Y0xpbmtTdGF0dXM7CisJdWludDMyX3QgdWlBdXRvTmVnU3RhdHVzOworCXVpbnQzMl90IHVpU3BlZWQ7CisJdWludDMyX3QgdWlEdXBsZXg7CisJdWludDMyX3QgdWlNZGlNZGl4OworCXVpbnQzMl90IHVpTWFzdGVyU2xhdmU7CisJdWludDMyX3QgdWlQb2xhcml0eTsKKwl1bnNpZ25lZCBsb25nIGxvY2tmbGFnczsKKworCURCR19FTlRFUihldDEzMXhfZGJnaW5mbyk7CisKKwlpZiAoYm1zcl9pbnRzLmJpdHMubGlua19zdGF0dXMpIHsKKwkJaWYgKGJtc3IuYml0cy5saW5rX3N0YXR1cykgeworCQkJcEFkYXB0ZXItPlBvTWdtdC5UcmFuc1BoeUNvbWFNb2RlT25Cb290ID0gMjA7CisKKwkJCS8qIFVwZGF0ZSBvdXIgc3RhdGUgdmFyaWFibGVzIGFuZCBpbmRpY2F0ZSB0aGUKKwkJCSAqIGNvbm5lY3RlZCBzdGF0ZQorCQkJICovCisJCQlzcGluX2xvY2tfaXJxc2F2ZSgmcEFkYXB0ZXItPkxvY2ssIGxvY2tmbGFncyk7CisKKwkJCXBBZGFwdGVyLT5NZWRpYVN0YXRlID0gTkVUSUZfU1RBVFVTX01FRElBX0NPTk5FQ1Q7CisJCQlNUF9DTEVBUl9GTEFHKHBBZGFwdGVyLCBmTVBfQURBUFRFUl9MSU5LX0RFVEVDVElPTik7CisKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBBZGFwdGVyLT5Mb2NrLCBsb2NrZmxhZ3MpOworCisJCQkvKiBEb24ndCBpbmRpY2F0ZSBzdGF0ZSBpZiB3ZSdyZSBpbiBsb29wYmFjayBtb2RlICovCisJCQlpZiAocEFkYXB0ZXItPlJlZ2lzdHJ5UGh5TG9vcGJrID09IGZhbHNlKSB7CisJCQkJbmV0aWZfY2Fycmllcl9vbihwQWRhcHRlci0+bmV0ZGV2KTsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCURCR19XQVJOSU5HKGV0MTMxeF9kYmdpbmZvLAorCQkJCSAgICAiTGluayBkb3duIGNhYmxlIHByb2JsZW1cbiIpOworCisJCQlpZiAocEFkYXB0ZXItPnVpTGlua1NwZWVkID09IFRSVUVQSFlfU1BFRURfMTBNQlBTKSB7CisJCQkJLy8gTk9URSAtIElzIHRoZXJlIGEgd2F5IHRvIHF1ZXJ5IHRoaXMgd2l0aG91dCBUcnVlUEhZPworCQkJCS8vICYmIFRSVV9RdWVyeUNvcmVUeXBlKHBBZGFwdGVyLT5oVHJ1ZVBoeSwgMCkgPT0gRU1JX1RSVUVQSFlfQTEzTykgeworCQkJCXVpbnQxNl90IFJlZ2lzdGVyMTg7CisKKwkJCQlNaVJlYWQocEFkYXB0ZXIsIDB4MTIsICZSZWdpc3RlcjE4KTsKKwkJCQlNaVdyaXRlKHBBZGFwdGVyLCAweDEyLCBSZWdpc3RlcjE4IHwgMHg0KTsKKwkJCQlNaVdyaXRlKHBBZGFwdGVyLCAweDEwLCBSZWdpc3RlcjE4IHwgMHg4NDAyKTsKKwkJCQlNaVdyaXRlKHBBZGFwdGVyLCAweDExLCBSZWdpc3RlcjE4IHwgNTExKTsKKwkJCQlNaVdyaXRlKHBBZGFwdGVyLCAweDEyLCBSZWdpc3RlcjE4KTsKKwkJCX0KKworCQkJLyogRm9yIHRoZSBmaXJzdCBOIHNlY29uZHMgb2YgbGlmZSwgd2UgYXJlIGluICJsaW5rCisJCQkgKiBkZXRlY3Rpb24iIFdoZW4gd2UgYXJlIGluIHRoaXMgc3RhdGUsIHdlIHNob3VsZAorCQkJICogb25seSByZXBvcnQgImNvbm5lY3RlZCIuIFdoZW4gdGhlIExpbmtEZXRlY3Rpb24KKwkJCSAqIFRpbWVyIGV4cGlyZXMsIHdlIGNhbiByZXBvcnQgZGlzY29ubmVjdGVkIChoYW5kbGVkCisJCQkgKiBpbiB0aGUgTGlua0RldGVjdGlvbkRQQykuCisJCQkgKi8KKwkJCWlmICgoTVBfSVNfRkxBR19DTEVBUgorCQkJICAgICAocEFkYXB0ZXIsIGZNUF9BREFQVEVSX0xJTktfREVURUNUSU9OKSkKKwkJCSAgICB8fCAocEFkYXB0ZXItPk1lZGlhU3RhdGUgPT0KKwkJCQlORVRJRl9TVEFUVVNfTUVESUFfRElTQ09OTkVDVCkpIHsKKwkJCQlzcGluX2xvY2tfaXJxc2F2ZSgmcEFkYXB0ZXItPkxvY2ssIGxvY2tmbGFncyk7CisJCQkJcEFkYXB0ZXItPk1lZGlhU3RhdGUgPQorCQkJCSAgICBORVRJRl9TVEFUVVNfTUVESUFfRElTQ09OTkVDVDsKKwkJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwQWRhcHRlci0+TG9jaywKKwkJCQkJCSAgICAgICBsb2NrZmxhZ3MpOworCisJCQkJLyogT25seSBpbmRpY2F0ZSBzdGF0ZSBpZiB3ZSdyZSBpbiBsb29wYmFjaworCQkJCSAqIG1vZGUKKwkJCQkgKi8KKwkJCQlpZiAocEFkYXB0ZXItPlJlZ2lzdHJ5UGh5TG9vcGJrID09IGZhbHNlKSB7CisJCQkJCW5ldGlmX2NhcnJpZXJfb2ZmKHBBZGFwdGVyLT5uZXRkZXYpOworCQkJCX0KKwkJCX0KKworCQkJcEFkYXB0ZXItPnVpTGlua1NwZWVkID0gMDsKKwkJCXBBZGFwdGVyLT51aUR1cGxleE1vZGUgPSAwOworCisJCQkvKiBGcmVlIHRoZSBwYWNrZXRzIGJlaW5nIGFjdGl2ZWx5IHNlbnQgJiBzdG9wcGVkICovCisJCQlldDEzMXhfZnJlZV9idXN5X3NlbmRfcGFja2V0cyhwQWRhcHRlcik7CisKKwkJCS8qIFJlLWluaXRpYWxpemUgdGhlIHNlbmQgc3RydWN0dXJlcyAqLworCQkJZXQxMzF4X2luaXRfc2VuZChwQWRhcHRlcik7CisKKwkJCS8qIFJlc2V0IHRoZSBSRkQgbGlzdCBhbmQgcmUtc3RhcnQgUlUgKi8KKwkJCWV0MTMxeF9yZXNldF9yZWN2KHBBZGFwdGVyKTsKKworCQkJLyoKKwkJCSAqIEJyaW5nIHRoZSBkZXZpY2UgYmFjayB0byB0aGUgc3RhdGUgaXQgd2FzIGR1cmluZworCQkJICogaW5pdCBwcmlvciB0byBhdXRvbmVnb3RpYXRpb24gYmVpbmcgY29tcGxldGUuIFRoaXMKKwkJCSAqIHdheSwgd2hlbiB3ZSBnZXQgdGhlIGF1dG8tbmVnIGNvbXBsZXRlIGludGVycnVwdCwKKwkJCSAqIHdlIGNhbiBjb21wbGV0ZSBpbml0IGJ5IGNhbGxpbmcgQ29uZmlnTWFjUkVHUzIuCisJCQkgKi8KKwkJCWV0MTMxeF9zb2Z0X3Jlc2V0KHBBZGFwdGVyKTsKKworCQkJLyogU2V0dXAgRVQxMzEwIGFzIHBlciB0aGUgZG9jdW1lbnRhdGlvbiAqLworCQkJZXQxMzF4X2FkYXB0ZXJfc2V0dXAocEFkYXB0ZXIpOworCisJCQkvKiBTZXR1cCB0aGUgUEhZIGludG8gY29tYSBtb2RlIHVudGlsIHRoZSBjYWJsZSBpcworCQkJICogcGx1Z2dlZCBiYWNrIGluCisJCQkgKi8KKwkJCWlmIChwQWRhcHRlci0+UmVnaXN0cnlQaHlDb21hID09IDEpIHsKKwkJCQlFbmFibGVQaHlDb21hKHBBZGFwdGVyKTsKKwkJCX0KKwkJfQorCX0KKworCWlmIChibXNyX2ludHMuYml0cy5hdXRvX25lZ19jb21wbGV0ZSB8fAorCSAgICAoKHBBZGFwdGVyLT5BaUZvcmNlRHB4ID09IDMpICYmIChibXNyX2ludHMuYml0cy5saW5rX3N0YXR1cykpKSB7CisJCWlmIChibXNyLmJpdHMuYXV0b19uZWdfY29tcGxldGUgfHwgKHBBZGFwdGVyLT5BaUZvcmNlRHB4ID09IDMpKSB7CisJCQlFVDEzMTBfUGh5TGlua1N0YXR1cyhwQWRhcHRlciwKKwkJCQkJICAgICAmdWNMaW5rU3RhdHVzLCAmdWlBdXRvTmVnU3RhdHVzLAorCQkJCQkgICAgICZ1aVNwZWVkLCAmdWlEdXBsZXgsICZ1aU1kaU1kaXgsCisJCQkJCSAgICAgJnVpTWFzdGVyU2xhdmUsICZ1aVBvbGFyaXR5KTsKKworCQkJcEFkYXB0ZXItPnVpTGlua1NwZWVkID0gdWlTcGVlZDsKKwkJCXBBZGFwdGVyLT51aUR1cGxleE1vZGUgPSB1aUR1cGxleDsKKworCQkJREJHX1RSQUNFKGV0MTMxeF9kYmdpbmZvLAorCQkJCSAgInBBZGFwdGVyLT51aUxpbmtTcGVlZCAweCUwNHgsIHBBZGFwdGVyLT51aUR1cGxleCAweCUwOHhcbiIsCisJCQkJICBwQWRhcHRlci0+dWlMaW5rU3BlZWQsCisJCQkJICBwQWRhcHRlci0+dWlEdXBsZXhNb2RlKTsKKworCQkJcEFkYXB0ZXItPlBvTWdtdC5UcmFuc1BoeUNvbWFNb2RlT25Cb290ID0gMjA7CisKKwkJCWlmIChwQWRhcHRlci0+dWlMaW5rU3BlZWQgPT0gVFJVRVBIWV9TUEVFRF8xME1CUFMpIHsKKwkJCQkvLyBOT1RFIC0gSXMgdGhlcmUgYSB3YXkgdG8gcXVlcnkgdGhpcyB3aXRob3V0IFRydWVQSFk/CisJCQkJLy8gJiYgVFJVX1F1ZXJ5Q29yZVR5cGUocEFkYXB0ZXItPmhUcnVlUGh5LCAwKSA9PSBFTUlfVFJVRVBIWV9BMTNPKSB7CisJCQkJdWludDE2X3QgUmVnaXN0ZXIxODsKKworCQkJCU1pUmVhZChwQWRhcHRlciwgMHgxMiwgJlJlZ2lzdGVyMTgpOworCQkJCU1pV3JpdGUocEFkYXB0ZXIsIDB4MTIsIFJlZ2lzdGVyMTggfCAweDQpOworCQkJCU1pV3JpdGUocEFkYXB0ZXIsIDB4MTAsIFJlZ2lzdGVyMTggfCAweDg0MDIpOworCQkJCU1pV3JpdGUocEFkYXB0ZXIsIDB4MTEsIFJlZ2lzdGVyMTggfCA1MTEpOworCQkJCU1pV3JpdGUocEFkYXB0ZXIsIDB4MTIsIFJlZ2lzdGVyMTgpOworCQkJfQorCisJCQlDb25maWdGbG93Q29udHJvbChwQWRhcHRlcik7CisKKwkJCWlmICgocEFkYXB0ZXItPnVpTGlua1NwZWVkID09IFRSVUVQSFlfU1BFRURfMTAwME1CUFMpICYmCisJCQkgICAgKHBBZGFwdGVyLT5SZWdpc3RyeUp1bWJvUGFja2V0ID4gMjA0OCkpCisJCQl7CisJCQkJRVQxMzEwX1BoeUFuZE9yUmVnKHBBZGFwdGVyLCAweDE2LCAweGNmZmYsCisJCQkJCQkgICAweDIwMDApOworCQkJfQorCisJCQlTZXRSeERtYVRpbWVyKHBBZGFwdGVyKTsKKwkJCUNvbmZpZ01BQ1JlZ3MyKHBBZGFwdGVyKTsKKwkJfQorCX0KKworCURCR19MRUFWRShldDEzMXhfZGJnaW5mbyk7Cit9CisKKy8qKgorICogVFBBTF9TZXRQaHkxMEhhbGZEdXBsZXggLSBGb3JjZSB0aGUgcGh5IGludG8gMTAgQmFzZSBUIEhhbGYgRHVwbGV4IG1vZGUuCisgKiBAcEFkYXB0ZXI6IHBvaW50ZXIgdG8gdGhlIGFkYXB0ZXIgc3RydWN0dXJlCisgKgorICogQWxzbyBzZXRzIHRoZSBNQUMgc28gaXQgaXMgc3luY2QgdXAgcHJvcGVybHkKKyAqLwordm9pZCBUUEFMX1NldFBoeTEwSGFsZkR1cGxleChzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKnBBZGFwdGVyKQoreworCURCR19FTlRFUihldDEzMXhfZGJnaW5mbyk7CisKKwkvKiBQb3dlciBkb3duIFBIWSAqLworCUVUMTMxMF9QaHlQb3dlckRvd24ocEFkYXB0ZXIsIDEpOworCisJLyogRmlyc3Qgd2UgbmVlZCB0byB0dXJuIG9mZiBhbGwgb3RoZXIgYWR2ZXJ0aXNlbWVudCAqLworCUVUMTMxMF9QaHlBZHZlcnRpc2UxMDAwQmFzZVQocEFkYXB0ZXIsIFRSVUVQSFlfQURWX0RVUExFWF9OT05FKTsKKworCUVUMTMxMF9QaHlBZHZlcnRpc2UxMDBCYXNlVChwQWRhcHRlciwgVFJVRVBIWV9BRFZfRFVQTEVYX05PTkUpOworCisJLyogU2V0IG91ciBhZHZlcnRpc2UgdmFsdWVzIGFjY29yZGluZ2x5ICovCisJRVQxMzEwX1BoeUFkdmVydGlzZTEwQmFzZVQocEFkYXB0ZXIsIFRSVUVQSFlfQURWX0RVUExFWF9IQUxGKTsKKworCS8qIFBvd2VyIHVwIFBIWSAqLworCUVUMTMxMF9QaHlQb3dlckRvd24ocEFkYXB0ZXIsIDApOworCisJREJHX0xFQVZFKGV0MTMxeF9kYmdpbmZvKTsKK30KKworLyoqCisgKiBUUEFMX1NldFBoeTEwRnVsbER1cGxleCAtIEZvcmNlIHRoZSBwaHkgaW50byAxMCBCYXNlIFQgRnVsbCBEdXBsZXggbW9kZS4KKyAqIEBwQWRhcHRlcjogcG9pbnRlciB0byB0aGUgYWRhcHRlciBzdHJ1Y3R1cmUKKyAqCisgKiBBbHNvIHNldHMgdGhlIE1BQyBzbyBpdCBpcyBzeW5jZCB1cCBwcm9wZXJseQorICovCit2b2lkIFRQQUxfU2V0UGh5MTBGdWxsRHVwbGV4KHN0cnVjdCBldDEzMXhfYWRhcHRlciAqcEFkYXB0ZXIpCit7CisJREJHX0VOVEVSKGV0MTMxeF9kYmdpbmZvKTsKKworCS8qIFBvd2VyIGRvd24gUEhZICovCisJRVQxMzEwX1BoeVBvd2VyRG93bihwQWRhcHRlciwgMSk7CisKKwkvKiBGaXJzdCB3ZSBuZWVkIHRvIHR1cm4gb2ZmIGFsbCBvdGhlciBhZHZlcnRpc2VtZW50ICovCisJRVQxMzEwX1BoeUFkdmVydGlzZTEwMDBCYXNlVChwQWRhcHRlciwgVFJVRVBIWV9BRFZfRFVQTEVYX05PTkUpOworCisJRVQxMzEwX1BoeUFkdmVydGlzZTEwMEJhc2VUKHBBZGFwdGVyLCBUUlVFUEhZX0FEVl9EVVBMRVhfTk9ORSk7CisKKwkvKiBTZXQgb3VyIGFkdmVydGlzZSB2YWx1ZXMgYWNjb3JkaW5nbHkgKi8KKwlFVDEzMTBfUGh5QWR2ZXJ0aXNlMTBCYXNlVChwQWRhcHRlciwgVFJVRVBIWV9BRFZfRFVQTEVYX0ZVTEwpOworCisJLyogUG93ZXIgdXAgUEhZICovCisJRVQxMzEwX1BoeVBvd2VyRG93bihwQWRhcHRlciwgMCk7CisKKwlEQkdfTEVBVkUoZXQxMzF4X2RiZ2luZm8pOworfQorCisvKioKKyAqIFRQQUxfU2V0UGh5MTBGb3JjZSAtIEZvcmNlIEJhc2UtVCBGRCBtb2RlIFdJVEhPVVQgdXNpbmcgYXV0b25lZ290aWF0aW9uCisgKiBAcEFkYXB0ZXI6IHBvaW50ZXIgdG8gdGhlIGFkYXB0ZXIgc3RydWN0dXJlCisgKi8KK3ZvaWQgVFBBTF9TZXRQaHkxMEZvcmNlKHN0cnVjdCBldDEzMXhfYWRhcHRlciAqcEFkYXB0ZXIpCit7CisJREJHX0VOVEVSKGV0MTMxeF9kYmdpbmZvKTsKKworCS8qIFBvd2VyIGRvd24gUEhZICovCisJRVQxMzEwX1BoeVBvd2VyRG93bihwQWRhcHRlciwgMSk7CisKKwkvKiBEaXNhYmxlIGF1dG9uZWcgKi8KKwlFVDEzMTBfUGh5QXV0b05lZyhwQWRhcHRlciwgZmFsc2UpOworCisJLyogRGlzYWJsZSBhbGwgYWR2ZXJ0aXNlbWVudCAqLworCUVUMTMxMF9QaHlBZHZlcnRpc2UxMDAwQmFzZVQocEFkYXB0ZXIsIFRSVUVQSFlfQURWX0RVUExFWF9OT05FKTsKKwlFVDEzMTBfUGh5QWR2ZXJ0aXNlMTBCYXNlVChwQWRhcHRlciwgVFJVRVBIWV9BRFZfRFVQTEVYX05PTkUpOworCUVUMTMxMF9QaHlBZHZlcnRpc2UxMDBCYXNlVChwQWRhcHRlciwgVFJVRVBIWV9BRFZfRFVQTEVYX05PTkUpOworCisJLyogRm9yY2UgMTAgTWJwcyAqLworCUVUMTMxMF9QaHlTcGVlZFNlbGVjdChwQWRhcHRlciwgVFJVRVBIWV9TUEVFRF8xME1CUFMpOworCisJLyogRm9yY2UgRnVsbCBkdXBsZXggKi8KKwlFVDEzMTBfUGh5RHVwbGV4TW9kZShwQWRhcHRlciwgVFJVRVBIWV9EVVBMRVhfRlVMTCk7CisKKwkvKiBQb3dlciB1cCBQSFkgKi8KKwlFVDEzMTBfUGh5UG93ZXJEb3duKHBBZGFwdGVyLCAwKTsKKworCURCR19MRUFWRShldDEzMXhfZGJnaW5mbyk7Cit9CisKKy8qKgorICogVFBBTF9TZXRQaHkxMDBIYWxmRHVwbGV4IC0gRm9yY2UgMTAwIEJhc2UgVCBIYWxmIER1cGxleCBtb2RlLgorICogQHBBZGFwdGVyOiBwb2ludGVyIHRvIHRoZSBhZGFwdGVyIHN0cnVjdHVyZQorICoKKyAqIEFsc28gc2V0cyB0aGUgTUFDIHNvIGl0IGlzIHN5bmNkIHVwIHByb3Blcmx5LgorICovCit2b2lkIFRQQUxfU2V0UGh5MTAwSGFsZkR1cGxleChzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKnBBZGFwdGVyKQoreworCURCR19FTlRFUihldDEzMXhfZGJnaW5mbyk7CisKKwkvKiBQb3dlciBkb3duIFBIWSAqLworCUVUMTMxMF9QaHlQb3dlckRvd24ocEFkYXB0ZXIsIDEpOworCisJLyogZmlyc3Qgd2UgbmVlZCB0byB0dXJuIG9mZiBhbGwgb3RoZXIgYWR2ZXJ0aXNlbWVudCAqLworCUVUMTMxMF9QaHlBZHZlcnRpc2UxMDAwQmFzZVQocEFkYXB0ZXIsIFRSVUVQSFlfQURWX0RVUExFWF9OT05FKTsKKworCUVUMTMxMF9QaHlBZHZlcnRpc2UxMEJhc2VUKHBBZGFwdGVyLCBUUlVFUEhZX0FEVl9EVVBMRVhfTk9ORSk7CisKKwkvKiBTZXQgb3VyIGFkdmVydGlzZSB2YWx1ZXMgYWNjb3JkaW5nbHkgKi8KKwlFVDEzMTBfUGh5QWR2ZXJ0aXNlMTAwQmFzZVQocEFkYXB0ZXIsIFRSVUVQSFlfQURWX0RVUExFWF9IQUxGKTsKKworCS8qIFNldCBzcGVlZCAqLworCUVUMTMxMF9QaHlTcGVlZFNlbGVjdChwQWRhcHRlciwgVFJVRVBIWV9TUEVFRF8xMDBNQlBTKTsKKworCS8qIFBvd2VyIHVwIFBIWSAqLworCUVUMTMxMF9QaHlQb3dlckRvd24ocEFkYXB0ZXIsIDApOworCisJREJHX0xFQVZFKGV0MTMxeF9kYmdpbmZvKTsKK30KKworLyoqCisgKiBUUEFMX1NldFBoeTEwMEZ1bGxEdXBsZXggLSBGb3JjZSAxMDAgQmFzZSBUIEZ1bGwgRHVwbGV4IG1vZGUuCisgKiBAcEFkYXB0ZXI6IHBvaW50ZXIgdG8gdGhlIGFkYXB0ZXIgc3RydWN0dXJlCisgKgorICogQWxzbyBzZXRzIHRoZSBNQUMgc28gaXQgaXMgc3luY2QgdXAgcHJvcGVybHkKKyAqLwordm9pZCBUUEFMX1NldFBoeTEwMEZ1bGxEdXBsZXgoc3RydWN0IGV0MTMxeF9hZGFwdGVyICpwQWRhcHRlcikKK3sKKwlEQkdfRU5URVIoZXQxMzF4X2RiZ2luZm8pOworCisJLyogUG93ZXIgZG93biBQSFkgKi8KKwlFVDEzMTBfUGh5UG93ZXJEb3duKHBBZGFwdGVyLCAxKTsKKworCS8qIEZpcnN0IHdlIG5lZWQgdG8gdHVybiBvZmYgYWxsIG90aGVyIGFkdmVydGlzZW1lbnQgKi8KKwlFVDEzMTBfUGh5QWR2ZXJ0aXNlMTAwMEJhc2VUKHBBZGFwdGVyLCBUUlVFUEhZX0FEVl9EVVBMRVhfTk9ORSk7CisKKwlFVDEzMTBfUGh5QWR2ZXJ0aXNlMTBCYXNlVChwQWRhcHRlciwgVFJVRVBIWV9BRFZfRFVQTEVYX05PTkUpOworCisJLyogU2V0IG91ciBhZHZlcnRpc2UgdmFsdWVzIGFjY29yZGluZ2x5ICovCisJRVQxMzEwX1BoeUFkdmVydGlzZTEwMEJhc2VUKHBBZGFwdGVyLCBUUlVFUEhZX0FEVl9EVVBMRVhfRlVMTCk7CisKKwkvKiBQb3dlciB1cCBQSFkgKi8KKwlFVDEzMTBfUGh5UG93ZXJEb3duKHBBZGFwdGVyLCAwKTsKKworCURCR19MRUFWRShldDEzMXhfZGJnaW5mbyk7Cit9CisKKy8qKgorICogVFBBTF9TZXRQaHkxMDBGb3JjZSAtIEZvcmNlIDEwMCBCYXNlVCBGRCBtb2RlIFdJVEhPVVQgdXNpbmcgYXV0b25lZ290aWF0aW9uCisgKiBAcEFkYXB0ZXI6IHBvaW50ZXIgdG8gdGhlIGFkYXB0ZXIgc3RydWN0dXJlCisgKi8KK3ZvaWQgVFBBTF9TZXRQaHkxMDBGb3JjZShzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKnBBZGFwdGVyKQoreworCURCR19FTlRFUihldDEzMXhfZGJnaW5mbyk7CisKKwkvKiBQb3dlciBkb3duIFBIWSAqLworCUVUMTMxMF9QaHlQb3dlckRvd24ocEFkYXB0ZXIsIDEpOworCisJLyogRGlzYWJsZSBhdXRvbmVnICovCisJRVQxMzEwX1BoeUF1dG9OZWcocEFkYXB0ZXIsIGZhbHNlKTsKKworCS8qIERpc2FibGUgYWxsIGFkdmVydGlzZW1lbnQgKi8KKwlFVDEzMTBfUGh5QWR2ZXJ0aXNlMTAwMEJhc2VUKHBBZGFwdGVyLCBUUlVFUEhZX0FEVl9EVVBMRVhfTk9ORSk7CisJRVQxMzEwX1BoeUFkdmVydGlzZTEwQmFzZVQocEFkYXB0ZXIsIFRSVUVQSFlfQURWX0RVUExFWF9OT05FKTsKKwlFVDEzMTBfUGh5QWR2ZXJ0aXNlMTAwQmFzZVQocEFkYXB0ZXIsIFRSVUVQSFlfQURWX0RVUExFWF9OT05FKTsKKworCS8qIEZvcmNlIDEwMCBNYnBzICovCisJRVQxMzEwX1BoeVNwZWVkU2VsZWN0KHBBZGFwdGVyLCBUUlVFUEhZX1NQRUVEXzEwME1CUFMpOworCisJLyogRm9yY2UgRnVsbCBkdXBsZXggKi8KKwlFVDEzMTBfUGh5RHVwbGV4TW9kZShwQWRhcHRlciwgVFJVRVBIWV9EVVBMRVhfRlVMTCk7CisKKwkvKiBQb3dlciB1cCBQSFkgKi8KKwlFVDEzMTBfUGh5UG93ZXJEb3duKHBBZGFwdGVyLCAwKTsKKworCURCR19MRUFWRShldDEzMXhfZGJnaW5mbyk7Cit9CisKKy8qKgorICogVFBBTF9TZXRQaHkxMDAwRnVsbER1cGxleCAtIEZvcmNlIDEwMDAgQmFzZSBUIEZ1bGwgRHVwbGV4IG1vZGUKKyAqIEBwQWRhcHRlcjogcG9pbnRlciB0byB0aGUgYWRhcHRlciBzdHJ1Y3R1cmUKKyAqCisgKiBBbHNvIHNldHMgdGhlIE1BQyBzbyBpdCBpcyBzeW5jZCB1cCBwcm9wZXJseS4KKyAqLwordm9pZCBUUEFMX1NldFBoeTEwMDBGdWxsRHVwbGV4KHN0cnVjdCBldDEzMXhfYWRhcHRlciAqcEFkYXB0ZXIpCit7CisJREJHX0VOVEVSKGV0MTMxeF9kYmdpbmZvKTsKKworCS8qIFBvd2VyIGRvd24gUEhZICovCisJRVQxMzEwX1BoeVBvd2VyRG93bihwQWRhcHRlciwgMSk7CisKKwkvKiBmaXJzdCB3ZSBuZWVkIHRvIHR1cm4gb2ZmIGFsbCBvdGhlciBhZHZlcnRpc2VtZW50ICovCisJRVQxMzEwX1BoeUFkdmVydGlzZTEwMEJhc2VUKHBBZGFwdGVyLCBUUlVFUEhZX0FEVl9EVVBMRVhfTk9ORSk7CisKKwlFVDEzMTBfUGh5QWR2ZXJ0aXNlMTBCYXNlVChwQWRhcHRlciwgVFJVRVBIWV9BRFZfRFVQTEVYX05PTkUpOworCisJLyogc2V0IG91ciBhZHZlcnRpc2UgdmFsdWVzIGFjY29yZGluZ2x5ICovCisJRVQxMzEwX1BoeUFkdmVydGlzZTEwMDBCYXNlVChwQWRhcHRlciwgVFJVRVBIWV9BRFZfRFVQTEVYX0ZVTEwpOworCisJLyogcG93ZXIgdXAgUEhZICovCisJRVQxMzEwX1BoeVBvd2VyRG93bihwQWRhcHRlciwgMCk7CisKKwlEQkdfTEVBVkUoZXQxMzF4X2RiZ2luZm8pOworfQorCisvKioKKyAqIFRQQUxfU2V0UGh5QXV0b05lZyAtIFNldCBwaHkgdG8gYXV0b25lZ290aWF0aW9uIG1vZGUuCisgKiBAcEFkYXB0ZXI6IHBvaW50ZXIgdG8gdGhlIGFkYXB0ZXIgc3RydWN0dXJlCisgKi8KK3ZvaWQgVFBBTF9TZXRQaHlBdXRvTmVnKHN0cnVjdCBldDEzMXhfYWRhcHRlciAqcEFkYXB0ZXIpCit7CisJREJHX0VOVEVSKGV0MTMxeF9kYmdpbmZvKTsKKworCS8qIFBvd2VyIGRvd24gUEhZICovCisJRVQxMzEwX1BoeVBvd2VyRG93bihwQWRhcHRlciwgMSk7CisKKwkvKiBUdXJuIG9uIGFkdmVydGlzZW1lbnQgb2YgYWxsIGNhcGFiaWxpdGllcyAqLworCUVUMTMxMF9QaHlBZHZlcnRpc2UxMEJhc2VUKHBBZGFwdGVyLCBUUlVFUEhZX0FEVl9EVVBMRVhfQk9USCk7CisKKwlFVDEzMTBfUGh5QWR2ZXJ0aXNlMTAwQmFzZVQocEFkYXB0ZXIsIFRSVUVQSFlfQURWX0RVUExFWF9CT1RIKTsKKworCWlmIChwQWRhcHRlci0+RGV2aWNlSUQgIT0gRVQxMzFYX1BDSV9ERVZJQ0VfSURfRkFTVCkgeworCQlFVDEzMTBfUGh5QWR2ZXJ0aXNlMTAwMEJhc2VUKHBBZGFwdGVyLCBUUlVFUEhZX0FEVl9EVVBMRVhfRlVMTCk7CisJfSBlbHNlIHsKKwkJRVQxMzEwX1BoeUFkdmVydGlzZTEwMDBCYXNlVChwQWRhcHRlciwgVFJVRVBIWV9BRFZfRFVQTEVYX05PTkUpOworCX0KKworCS8qIE1ha2Ugc3VyZSBhdXRvLW5lZyBpcyBPTiAoaXQgaXMgZGlzYWJsZWQgaW4gRk9SQ0UgbW9kZXMpICovCisJRVQxMzEwX1BoeUF1dG9OZWcocEFkYXB0ZXIsIHRydWUpOworCisJLyogUG93ZXIgdXAgUEhZICovCisJRVQxMzEwX1BoeVBvd2VyRG93bihwQWRhcHRlciwgMCk7CisKKwlEQkdfTEVBVkUoZXQxMzF4X2RiZ2luZm8pOworfQorCisKKy8qCisgKiBUaGUgcm91dGluZXMgd2hpY2ggZm9sbG93IHByb3ZpZGUgbG93LWxldmVsIGFjY2VzcyB0byB0aGUgUEhZLCBhbmQgYXJlIHVzZWQKKyAqIHByaW1hcmlseSBieSB0aGUgcm91dGluZXMgYWJvdmUgKGFsdGhvdWdoIHRoZXJlIGFyZSBhIGZldyBwbGFjZXMgZWxzZXdoZXJlCisgKiBpbiB0aGUgZHJpdmVyIHdoZXJlIHRoaXMgbGV2ZWwgb2YgYWNjZXNzIGlzIHJlcXVpcmVkKS4KKyAqLworCitzdGF0aWMgY29uc3QgdWludDE2X3QgQ29uZmlnUGh5WzI1XVsyXSA9IHsKKwkvKiBSZWcgICAgICBWYWx1ZSAgICAgIFJlZ2lzdGVyICovCisJLyogQWRkciAgICAgICAgICAgICAgICAgICAgICAgICAqLworCXsweDg4MEIsIDB4MDkyNn0sCS8qIEFmZUlmQ3JlZzRCMTAwME1zYnMgKi8KKwl7MHg4ODBDLCAweDA5MjZ9LAkvKiBBZmVJZkNyZWc0QjEwME1zYnMgKi8KKwl7MHg4ODBELCAweDA5MjZ9LAkvKiBBZmVJZkNyZWc0QjEwTXNicyAqLworCisJezB4ODgwRSwgMHhCNEQzfSwJLyogQWZlSWZDcmVnNEIxMDAwTHNicyAqLworCXsweDg4MEYsIDB4QjREM30sCS8qIEFmZUlmQ3JlZzRCMTAwTHNicyAqLworCXsweDg4MTAsIDB4QjREM30sCS8qIEFmZUlmQ3JlZzRCMTBMc2JzICovCisKKwl7MHg4ODA1LCAweEIwM0V9LAkvKiBBZmVJZkNyZWczQjEwMDBNc2JzICovCisJezB4ODgwNiwgMHhCMDNFfSwJLyogQWZlSWZDcmVnM0IxMDBNc2JzICovCisJezB4ODgwNywgMHhGRjAwfSwJLyogQWZlSWZDcmVnM0IxME1zYnMgKi8KKworCXsweDg4MDgsIDB4RTA5MH0sCS8qIEFmZUlmQ3JlZzNCMTAwMExzYnMgKi8KKwl7MHg4ODA5LCAweEUxMTB9LAkvKiBBZmVJZkNyZWczQjEwMExzYnMgKi8KKwl7MHg4ODBBLCAweDAwMDB9LAkvKiBBZmVJZkNyZWczQjEwTHNicyAqLworCisJezB4MzAwRCwgMX0sCQkvKiBEaXNhYmxlTm9ybSAqLworCisJezB4MjgwQywgMHgwMTgwfSwJLyogTGlua0hvbGRFbmQgKi8KKworCXsweDFDMjEsIDB4MDAwMn0sCS8qIEFscGhhTSAqLworCisJezB4MzgyMSwgNn0sCQkvKiBGZmVMa2dUeDAgKi8KKwl7MHgzODFELCAxfSwJCS8qIEZmZUxrZzFnNCAqLworCXsweDM4MUUsIDF9LAkJLyogRmZlTGtnMWc1ICovCisJezB4MzgxRiwgMX0sCQkvKiBGZmVMa2cxZzYgKi8KKwl7MHgzODIwLCAxfSwJCS8qIEZmZUxrZzFnNyAqLworCisJezB4ODQwMiwgMHgwMUYwfSwJLyogQnRpbmFjdCAqLworCXsweDgwMEUsIDIwfSwJCS8qIExmdHJhaW5UaW1lICovCisJezB4ODAwRiwgMjR9LAkJLyogRHZndWFyZFRpbWUgKi8KKwl7MHg4MDEwLCA0Nn0sCQkvKiBJZGxndWFyZFRpbWUgKi8KKworCXswLCAwfQorCit9OworCisvKiBjb25kZW5zZWQgdmVyc2lvbiBvZiB0aGUgcGh5IGluaXRpYWxpemF0aW9uIHJvdXRpbmUgKi8KK3ZvaWQgRVQxMzEwX1BoeUluaXQoc3RydWN0IGV0MTMxeF9hZGFwdGVyICpwQWRhcHRlcikKK3sKKwl1aW50MTZfdCB1c0RhdGEsIHVzSW5kZXg7CisKKwlpZiAocEFkYXB0ZXIgPT0gTlVMTCkgeworCQlyZXR1cm47CisJfQorCisJLy8gZ2V0IHRoZSBpZGVudGl0eSAoYWdhaW4gPykKKwlNaVJlYWQocEFkYXB0ZXIsIFBIWV9JRF8xLCAmdXNEYXRhKTsKKwlNaVJlYWQocEFkYXB0ZXIsIFBIWV9JRF8yLCAmdXNEYXRhKTsKKworCS8vIHdoYXQgZG9lcyB0aGlzIGRvL2FjaGlldmUgPworCU1pUmVhZChwQWRhcHRlciwgUEhZX01QSFlfQ09OVFJPTF9SRUcsICZ1c0RhdGEpOwkvLyBzaG91bGQgcmVhZCAwMDAyCisJTWlXcml0ZShwQWRhcHRlciwgUEhZX01QSFlfQ09OVFJPTF9SRUcsCTB4MDAwNik7CisKKwkvLyByZWFkIG1vZGVtIHJlZ2lzdGVyIDA0MDIsIHNob3VsZCBJIGRvIHNvbWV0aGluZyB3aXRoIHRoZSByZXR1cm4gZGF0YSA/CisJTWlXcml0ZShwQWRhcHRlciwgUEhZX0lOREVYX1JFRywgMHgwNDAyKTsKKwlNaVJlYWQocEFkYXB0ZXIsIFBIWV9EQVRBX1JFRywgJnVzRGF0YSk7CisKKwkvLyB3aGF0IGRvZXMgdGhpcyBkby9hY2hpZXZlID8KKwlNaVdyaXRlKHBBZGFwdGVyLCBQSFlfTVBIWV9DT05UUk9MX1JFRywgMHgwMDAyKTsKKworCS8vIGdldCB0aGUgaWRlbnRpdHkgKGFnYWluID8pCisJTWlSZWFkKHBBZGFwdGVyLCBQSFlfSURfMSwgJnVzRGF0YSk7CisJTWlSZWFkKHBBZGFwdGVyLCBQSFlfSURfMiwgJnVzRGF0YSk7CisKKwkvLyB3aGF0IGRvZXMgdGhpcyBhY2hpZXZlID8KKwlNaVJlYWQocEFkYXB0ZXIsIFBIWV9NUEhZX0NPTlRST0xfUkVHLCAmdXNEYXRhKTsJLy8gc2hvdWxkIHJlYWQgMDAwMgorCU1pV3JpdGUocEFkYXB0ZXIsIFBIWV9NUEhZX0NPTlRST0xfUkVHLCAweDAwMDYpOworCisJLy8gcmVhZCBtb2RlbSByZWdpc3RlciAwNDAyLCBzaG91bGQgSSBkbyBzb21ldGhpbmcgd2l0aCB0aGUgcmV0dXJuIGRhdGE/CisJTWlXcml0ZShwQWRhcHRlciwgUEhZX0lOREVYX1JFRywgMHgwNDAyKTsKKwlNaVJlYWQocEFkYXB0ZXIsIFBIWV9EQVRBX1JFRywgJnVzRGF0YSk7CisKKwlNaVdyaXRlKHBBZGFwdGVyLCBQSFlfTVBIWV9DT05UUk9MX1JFRywgMHgwMDAyKTsKKworCS8vIHdoYXQgZG9lcyB0aGlzIGFjaGlldmUgKHNob3VsZCByZXR1cm4gMHgxMDQwKQorCU1pUmVhZChwQWRhcHRlciwgUEhZX0NPTlRST0wsICZ1c0RhdGEpOworCU1pUmVhZChwQWRhcHRlciwgUEhZX01QSFlfQ09OVFJPTF9SRUcsICZ1c0RhdGEpOwkvLyBzaG91bGQgcmVhZCAwMDAyCisJTWlXcml0ZShwQWRhcHRlciwgUEhZX0NPTlRST0wsIDB4MTg0MCk7CisKKwlNaVdyaXRlKHBBZGFwdGVyLCBQSFlfTVBIWV9DT05UUk9MX1JFRywgMHgwMDA3KTsKKworCS8vIGhlcmUgdGhlIHdyaXRpbmcgb2YgdGhlIGFycmF5IHN0YXJ0cy4uLi4KKwl1c0luZGV4ID0gMDsKKwl3aGlsZSAoQ29uZmlnUGh5W3VzSW5kZXhdWzBdICE9IDB4MDAwMCkgeworCQkvLyB3cml0ZSB2YWx1ZQorCQlNaVdyaXRlKHBBZGFwdGVyLCBQSFlfSU5ERVhfUkVHLCBDb25maWdQaHlbdXNJbmRleF1bMF0pOworCQlNaVdyaXRlKHBBZGFwdGVyLCBQSFlfREFUQV9SRUcsIENvbmZpZ1BoeVt1c0luZGV4XVsxXSk7CisKKwkJLy8gcmVhZCBpdCBiYWNrCisJCU1pV3JpdGUocEFkYXB0ZXIsIFBIWV9JTkRFWF9SRUcsIENvbmZpZ1BoeVt1c0luZGV4XVswXSk7CisJCU1pUmVhZChwQWRhcHRlciwgUEhZX0RBVEFfUkVHLCAmdXNEYXRhKTsKKworCQkvLyBkbyBhIGNoZWNrIG9uIHRoZSB2YWx1ZSByZWFkIGJhY2sgPworCQl1c0luZGV4Kys7CisJfQorCS8vIGhlcmUgdGhlIHdyaXRpbmcgb2YgdGhlIGFycmF5IGVuZHMuLi4KKworCU1pUmVhZChwQWRhcHRlciwgUEhZX0NPTlRST0wsICZ1c0RhdGEpOwkvLyAweDE4NDAKKwlNaVJlYWQocEFkYXB0ZXIsIFBIWV9NUEhZX0NPTlRST0xfUkVHLCAmdXNEYXRhKTsJLy8gc2hvdWxkIHJlYWQgMDAwNworCU1pV3JpdGUocEFkYXB0ZXIsIFBIWV9DT05UUk9MLCAweDEwNDApOworCU1pV3JpdGUocEFkYXB0ZXIsIFBIWV9NUEhZX0NPTlRST0xfUkVHLCAweDAwMDIpOworfQorCit2b2lkIEVUMTMxMF9QaHlSZXNldChzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKnBBZGFwdGVyKQoreworCU1pV3JpdGUocEFkYXB0ZXIsIFBIWV9DT05UUk9MLCAweDgwMDApOworfQorCit2b2lkIEVUMTMxMF9QaHlQb3dlckRvd24oc3RydWN0IGV0MTMxeF9hZGFwdGVyICpwQWRhcHRlciwgYm9vbCBkb3duKQoreworCXVpbnQxNl90IHVzRGF0YTsKKworCU1pUmVhZChwQWRhcHRlciwgUEhZX0NPTlRST0wsICZ1c0RhdGEpOworCisJaWYgKGRvd24gPT0gZmFsc2UpIHsKKwkJLy8gUG93ZXIgVVAKKwkJdXNEYXRhICY9IH4weDA4MDA7CisJCU1pV3JpdGUocEFkYXB0ZXIsIFBIWV9DT05UUk9MLCB1c0RhdGEpOworCX0gZWxzZSB7CisJCS8vIFBvd2VyIERPV04KKwkJdXNEYXRhIHw9IDB4MDgwMDsKKwkJTWlXcml0ZShwQWRhcHRlciwgUEhZX0NPTlRST0wsIHVzRGF0YSk7CisJfQorfQorCit2b2lkIEVUMTMxMF9QaHlBdXRvTmVnKHN0cnVjdCBldDEzMXhfYWRhcHRlciAqcEFkYXB0ZXIsIGJvb2wgZW5hYmxlKQoreworCXVpbnQxNl90IHVzRGF0YTsKKworCU1pUmVhZChwQWRhcHRlciwgUEhZX0NPTlRST0wsICZ1c0RhdGEpOworCisJaWYgKGVuYWJsZSA9PSB0cnVlKSB7CisJCS8vIEF1dG9uZWdvdGlhdGlvbiBPTgorCQl1c0RhdGEgfD0gMHgxMDAwOworCQlNaVdyaXRlKHBBZGFwdGVyLCBQSFlfQ09OVFJPTCwgdXNEYXRhKTsKKwl9IGVsc2UgeworCQkvLyBBdXRvbmVnb3RpYXRpb24gT0ZGCisJCXVzRGF0YSAmPSB+MHgxMDAwOworCQlNaVdyaXRlKHBBZGFwdGVyLCBQSFlfQ09OVFJPTCwgdXNEYXRhKTsKKwl9Cit9CisKK3ZvaWQgRVQxMzEwX1BoeUR1cGxleE1vZGUoc3RydWN0IGV0MTMxeF9hZGFwdGVyICpwQWRhcHRlciwgdWludDE2X3QgZHVwbGV4KQoreworCXVpbnQxNl90IHVzRGF0YTsKKworCU1pUmVhZChwQWRhcHRlciwgUEhZX0NPTlRST0wsICZ1c0RhdGEpOworCisJaWYgKGR1cGxleCA9PSBUUlVFUEhZX0RVUExFWF9GVUxMKSB7CisJCS8vIFNldCBGdWxsIER1cGxleAorCQl1c0RhdGEgfD0gMHgxMDA7CisJCU1pV3JpdGUocEFkYXB0ZXIsIFBIWV9DT05UUk9MLCB1c0RhdGEpOworCX0gZWxzZSB7CisJCS8vIFNldCBIYWxmIER1cGxleAorCQl1c0RhdGEgJj0gfjB4MTAwOworCQlNaVdyaXRlKHBBZGFwdGVyLCBQSFlfQ09OVFJPTCwgdXNEYXRhKTsKKwl9Cit9CisKK3ZvaWQgRVQxMzEwX1BoeVNwZWVkU2VsZWN0KHN0cnVjdCBldDEzMXhfYWRhcHRlciAqcEFkYXB0ZXIsIHVpbnQxNl90IHNwZWVkKQoreworCXVpbnQxNl90IHVzRGF0YTsKKworCS8vIFJlYWQgdGhlIFBIWSBjb250cm9sIHJlZ2lzdGVyCisJTWlSZWFkKHBBZGFwdGVyLCBQSFlfQ09OVFJPTCwgJnVzRGF0YSk7CisKKwkvLyBDbGVhciBhbGwgU3BlZWQgc2V0dGluZ3MgKEJpdHMgNiwgMTMpCisJdXNEYXRhICY9IH4weDIwNDA7CisKKwkvLyBSZXNldCB0aGUgc3BlZWQgYml0cyBiYXNlZCBvbiB1c2VyIHNlbGVjdGlvbgorCXN3aXRjaCAoc3BlZWQpIHsKKwljYXNlIFRSVUVQSFlfU1BFRURfMTBNQlBTOgorCQkvLyBCaXRzIGFscmVhZHkgY2xlYXJlZCBhYm92ZSwgZG8gbm90aGluZworCQlicmVhazsKKworCWNhc2UgVFJVRVBIWV9TUEVFRF8xMDBNQlBTOgorCQkvLyAxMDBNID09IFNldCBiaXQgMTMKKwkJdXNEYXRhIHw9IDB4MjAwMDsKKwkJYnJlYWs7CisKKwljYXNlIFRSVUVQSFlfU1BFRURfMTAwME1CUFM6CisJZGVmYXVsdDoKKwkJdXNEYXRhIHw9IDB4MDA0MDsKKwkJYnJlYWs7CisJfQorCisJLy8gV3JpdGUgYmFjayB0aGUgbmV3IHNwZWVkCisJTWlXcml0ZShwQWRhcHRlciwgUEhZX0NPTlRST0wsIHVzRGF0YSk7Cit9CisKK3ZvaWQgRVQxMzEwX1BoeUFkdmVydGlzZTEwMDBCYXNlVChzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKnBBZGFwdGVyLAorCQkJCSAgdWludDE2X3QgZHVwbGV4KQoreworCXVpbnQxNl90IHVzRGF0YTsKKworCS8vIFJlYWQgdGhlIFBIWSAxMDAwIEJhc2UtVCBDb250cm9sIFJlZ2lzdGVyCisJTWlSZWFkKHBBZGFwdGVyLCBQSFlfMTAwMF9DT05UUk9MLCAmdXNEYXRhKTsKKworCS8vIENsZWFyIEJpdHMgOCw5CisJdXNEYXRhICY9IH4weDAzMDA7CisKKwlzd2l0Y2ggKGR1cGxleCkgeworCWNhc2UgVFJVRVBIWV9BRFZfRFVQTEVYX05PTkU6CisJCS8vIER1cGxleCBhbHJlYWR5IGNsZWFyZWQsIGRvIG5vdGhpbmcKKwkJYnJlYWs7CisKKwljYXNlIFRSVUVQSFlfQURWX0RVUExFWF9GVUxMOgorCQkvLyBTZXQgQml0IDkKKwkJdXNEYXRhIHw9IDB4MDIwMDsKKwkJYnJlYWs7CisKKwljYXNlIFRSVUVQSFlfQURWX0RVUExFWF9IQUxGOgorCQkvLyBTZXQgQml0IDgKKwkJdXNEYXRhIHw9IDB4MDEwMDsKKwkJYnJlYWs7CisKKwljYXNlIFRSVUVQSFlfQURWX0RVUExFWF9CT1RIOgorCWRlZmF1bHQ6CisJCXVzRGF0YSB8PSAweDAzMDA7CisJCWJyZWFrOworCX0KKworCS8vIFdyaXRlIGJhY2sgYWR2ZXJ0aXNlbWVudAorCU1pV3JpdGUocEFkYXB0ZXIsIFBIWV8xMDAwX0NPTlRST0wsIHVzRGF0YSk7Cit9CisKK3ZvaWQgRVQxMzEwX1BoeUFkdmVydGlzZTEwMEJhc2VUKHN0cnVjdCBldDEzMXhfYWRhcHRlciAqcEFkYXB0ZXIsCisJCQkJIHVpbnQxNl90IGR1cGxleCkKK3sKKwl1aW50MTZfdCB1c0RhdGE7CisKKwkvLyBSZWFkIHRoZSBBdXRvbmVnb3RpYXRpb24gUmVnaXN0ZXIgKDEwLzEwMCkKKwlNaVJlYWQocEFkYXB0ZXIsIFBIWV9BVVRPX0FEVkVSVElTRU1FTlQsICZ1c0RhdGEpOworCisJLy8gQ2xlYXIgYml0cyA3LDgKKwl1c0RhdGEgJj0gfjB4MDE4MDsKKworCXN3aXRjaCAoZHVwbGV4KSB7CisJY2FzZSBUUlVFUEhZX0FEVl9EVVBMRVhfTk9ORToKKwkJLy8gRHVwbGV4IGFscmVhZHkgY2xlYXJlZCwgZG8gbm90aGluZworCQlicmVhazsKKworCWNhc2UgVFJVRVBIWV9BRFZfRFVQTEVYX0ZVTEw6CisJCS8vIFNldCBCaXQgOAorCQl1c0RhdGEgfD0gMHgwMTAwOworCQlicmVhazsKKworCWNhc2UgVFJVRVBIWV9BRFZfRFVQTEVYX0hBTEY6CisJCS8vIFNldCBCaXQgNworCQl1c0RhdGEgfD0gMHgwMDgwOworCQlicmVhazsKKworCWNhc2UgVFJVRVBIWV9BRFZfRFVQTEVYX0JPVEg6CisJZGVmYXVsdDoKKwkJLy8gU2V0IEJpdHMgNyw4CisJCXVzRGF0YSB8PSAweDAxODA7CisJCWJyZWFrOworCX0KKworCS8vIFdyaXRlIGJhY2sgYWR2ZXJ0aXNlbWVudAorCU1pV3JpdGUocEFkYXB0ZXIsIFBIWV9BVVRPX0FEVkVSVElTRU1FTlQsIHVzRGF0YSk7Cit9CisKK3ZvaWQgRVQxMzEwX1BoeUFkdmVydGlzZTEwQmFzZVQoc3RydWN0IGV0MTMxeF9hZGFwdGVyICpwQWRhcHRlciwKKwkJCQl1aW50MTZfdCBkdXBsZXgpCit7CisJdWludDE2X3QgdXNEYXRhOworCisJLy8gUmVhZCB0aGUgQXV0b25lZ290aWF0aW9uIFJlZ2lzdGVyICgxMC8xMDApCisJTWlSZWFkKHBBZGFwdGVyLCBQSFlfQVVUT19BRFZFUlRJU0VNRU5ULCAmdXNEYXRhKTsKKworCS8vIENsZWFyIGJpdHMgNSw2CisJdXNEYXRhICY9IH4weDAwNjA7CisKKwlzd2l0Y2ggKGR1cGxleCkgeworCWNhc2UgVFJVRVBIWV9BRFZfRFVQTEVYX05PTkU6CisJCS8vIER1cGxleCBhbHJlYWR5IGNsZWFyZWQsIGRvIG5vdGhpbmcKKwkJYnJlYWs7CisKKwljYXNlIFRSVUVQSFlfQURWX0RVUExFWF9GVUxMOgorCQkvLyBTZXQgQml0IDYKKwkJdXNEYXRhIHw9IDB4MDA0MDsKKwkJYnJlYWs7CisKKwljYXNlIFRSVUVQSFlfQURWX0RVUExFWF9IQUxGOgorCQkvLyBTZXQgQml0IDUKKwkJdXNEYXRhIHw9IDB4MDAyMDsKKwkJYnJlYWs7CisKKwljYXNlIFRSVUVQSFlfQURWX0RVUExFWF9CT1RIOgorCWRlZmF1bHQ6CisJCS8vIFNldCBCaXRzIDUsNgorCQl1c0RhdGEgfD0gMHgwMDYwOworCQlicmVhazsKKwl9CisKKwkvLyBXcml0ZSBiYWNrIGFkdmVydGlzZW1lbnQKKwlNaVdyaXRlKHBBZGFwdGVyLCBQSFlfQVVUT19BRFZFUlRJU0VNRU5ULCB1c0RhdGEpOworfQorCit2b2lkIEVUMTMxMF9QaHlMaW5rU3RhdHVzKHN0cnVjdCBldDEzMXhfYWRhcHRlciAqcEFkYXB0ZXIsCisJCQkgIHVpbnQ4X3QgKnVjTGlua1N0YXR1cywKKwkJCSAgdWludDMyX3QgKnVpQXV0b05lZywKKwkJCSAgdWludDMyX3QgKnVpTGlua1NwZWVkLAorCQkJICB1aW50MzJfdCAqdWlEdXBsZXhNb2RlLAorCQkJICB1aW50MzJfdCAqdWlNZGlNZGl4LAorCQkJICB1aW50MzJfdCAqdWlNYXN0ZXJTbGF2ZSwgdWludDMyX3QgKnVpUG9sYXJpdHkpCit7CisJdWludDE2X3QgdXNNaVN0YXR1cyA9IDA7CisJdWludDE2X3QgdXMxMDAwQmFzZVQgPSAwOworCXVpbnQxNl90IHVzVm1pUGh5U3RhdHVzID0gMDsKKwl1aW50MTZfdCB1c0NvbnRyb2wgPSAwOworCisJTWlSZWFkKHBBZGFwdGVyLCBQSFlfU1RBVFVTLCAmdXNNaVN0YXR1cyk7CisJTWlSZWFkKHBBZGFwdGVyLCBQSFlfMTAwMF9TVEFUVVMsICZ1czEwMDBCYXNlVCk7CisJTWlSZWFkKHBBZGFwdGVyLCBQSFlfUEhZX1NUQVRVUywgJnVzVm1pUGh5U3RhdHVzKTsKKwlNaVJlYWQocEFkYXB0ZXIsIFBIWV9DT05UUk9MLCAmdXNDb250cm9sKTsKKworCWlmICh1Y0xpbmtTdGF0dXMpIHsKKwkJKnVjTGlua1N0YXR1cyA9CisJCSAgICAodW5zaWduZWQgY2hhcikoKHVzVm1pUGh5U3RhdHVzICYgMHgwMDQwKSA/IDEgOiAwKTsKKwl9CisKKwlpZiAodWlBdXRvTmVnKSB7CisJCSp1aUF1dG9OZWcgPQorCQkgICAgKHVzQ29udHJvbCAmIDB4MTAwMCkgPyAoKHVzVm1pUGh5U3RhdHVzICYgMHgwMDIwKSA/CisJCQkJCSAgICBUUlVFUEhZX0FORUdfQ09NUExFVEUgOgorCQkJCQkgICAgVFJVRVBIWV9BTkVHX05PVF9DT01QTEVURSkgOgorCQkgICAgVFJVRVBIWV9BTkVHX0RJU0FCTEVEOworCX0KKworCWlmICh1aUxpbmtTcGVlZCkgeworCQkqdWlMaW5rU3BlZWQgPSAodXNWbWlQaHlTdGF0dXMgJiAweDAzMDApID4+IDg7CisJfQorCisJaWYgKHVpRHVwbGV4TW9kZSkgeworCQkqdWlEdXBsZXhNb2RlID0gKHVzVm1pUGh5U3RhdHVzICYgMHgwMDgwKSA+PiA3OworCX0KKworCWlmICh1aU1kaU1kaXgpIHsKKwkJLyogTk9URTogTmVlZCB0byBjb21wbGV0ZSB0aGlzICovCisJCSp1aU1kaU1kaXggPSAwOworCX0KKworCWlmICh1aU1hc3RlclNsYXZlKSB7CisJCSp1aU1hc3RlclNsYXZlID0KKwkJICAgICh1czEwMDBCYXNlVCAmIDB4NDAwMCkgPyBUUlVFUEhZX0NGR19NQVNURVIgOgorCQkgICAgVFJVRVBIWV9DRkdfU0xBVkU7CisJfQorCisJaWYgKHVpUG9sYXJpdHkpIHsKKwkJKnVpUG9sYXJpdHkgPQorCQkgICAgKHVzVm1pUGh5U3RhdHVzICYgMHgwNDAwKSA/IFRSVUVQSFlfUE9MQVJJVFlfSU5WRVJURUQgOgorCQkgICAgVFJVRVBIWV9QT0xBUklUWV9OT1JNQUw7CisJfQorfQorCit2b2lkIEVUMTMxMF9QaHlBbmRPclJlZyhzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKnBBZGFwdGVyLAorCQkJdWludDE2X3QgcmVnbnVtLCB1aW50MTZfdCBhbmRNYXNrLCB1aW50MTZfdCBvck1hc2spCit7CisJdWludDE2X3QgcmVnOworCisJLy8gUmVhZCB0aGUgcmVxdWVzdGVkIHJlZ2lzdGVyCisJTWlSZWFkKHBBZGFwdGVyLCByZWdudW0sICZyZWcpOworCisJLy8gQXBwbHkgdGhlIEFORCBtYXNrCisJcmVnICY9IGFuZE1hc2s7CisKKwkvLyBBcHBseSB0aGUgT1IgbWFzaworCXJlZyB8PSBvck1hc2s7CisKKwkvLyBXcml0ZSB0aGUgdmFsdWUgYmFjayB0byB0aGUgcmVnaXN0ZXIKKwlNaVdyaXRlKHBBZGFwdGVyLCByZWdudW0sIHJlZyk7Cit9CisKK3ZvaWQgRVQxMzEwX1BoeUFjY2Vzc01pQml0KHN0cnVjdCBldDEzMXhfYWRhcHRlciAqcEFkYXB0ZXIsIHVpbnQxNl90IGFjdGlvbiwKKwkJCSAgIHVpbnQxNl90IHJlZ251bSwgdWludDE2X3QgYml0bnVtLCB1aW50OF90ICp2YWx1ZSkKK3sKKwl1aW50MTZfdCByZWc7CisJdWludDE2X3QgbWFzayA9IDA7CisKKwkvLyBDcmVhdGUgYSBtYXNrIHRvIGlzb2xhdGUgdGhlIHJlcXVlc3RlZCBiaXQKKwltYXNrID0gMHgwMDAxIDw8IGJpdG51bTsKKworCS8vIFJlYWQgdGhlIHJlcXVlc3RlZCByZWdpc3RlcgorCU1pUmVhZChwQWRhcHRlciwgcmVnbnVtLCAmcmVnKTsKKworCXN3aXRjaCAoYWN0aW9uKSB7CisJY2FzZSBUUlVFUEhZX0JJVF9SRUFEOgorCQlpZiAodmFsdWUgIT0gTlVMTCkgeworCQkJKnZhbHVlID0gKHJlZyAmIG1hc2spID4+IGJpdG51bTsKKwkJfQorCQlicmVhazsKKworCWNhc2UgVFJVRVBIWV9CSVRfU0VUOgorCQlyZWcgfD0gbWFzazsKKwkJTWlXcml0ZShwQWRhcHRlciwgcmVnbnVtLCByZWcpOworCQlicmVhazsKKworCWNhc2UgVFJVRVBIWV9CSVRfQ0xFQVI6CisJCXJlZyAmPSB+bWFzazsKKwkJTWlXcml0ZShwQWRhcHRlciwgcmVnbnVtLCByZWcpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ldDEzMXgvZXQxMzEwX3BoeS5oIGIvZHJpdmVycy9zdGFnaW5nL2V0MTMxeC9ldDEzMTBfcGh5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDYyNGNiYgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ldDEzMXgvZXQxMzEwX3BoeS5oCkBAIC0wLDAgKzEsOTEwIEBACisvKgorICogQWdlcmUgU3lzdGVtcyBJbmMuCisgKiAxMC8xMDAvMTAwMCBCYXNlLVQgRXRoZXJuZXQgRHJpdmVyIGZvciB0aGUgRVQxMzAxIGFuZCBFVDEzMXggc2VyaWVzIE1BQ3MKKyAqCisgKiBDb3B5cmlnaHQgqSAyMDA1IEFnZXJlIFN5c3RlbXMgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICAgaHR0cDovL3d3dy5hZ2VyZS5jb20KKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIGV0MTMxMF9waHkuaCAtIERlZmluZXMsIHN0cnVjdHMsIGVudW1zLCBwcm90b3R5cGVzLCBldGMuIHBlcnRhaW5pbmcgdG8gdGhlCisgKiAgICAgICAgICAgICAgICBQSFkuCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBTT0ZUV0FSRSBMSUNFTlNFCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBwcm92aWRlZCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgdGVybXMgYW5kIGNvbmRpdGlvbnMsCisgKiB3aGljaCB5b3Ugc2hvdWxkIHJlYWQgY2FyZWZ1bGx5IGJlZm9yZSB1c2luZyB0aGUgc29mdHdhcmUuICBVc2luZyB0aGlzCisgKiBzb2Z0d2FyZSBpbmRpY2F0ZXMgeW91ciBhY2NlcHRhbmNlIG9mIHRoZXNlIHRlcm1zIGFuZCBjb25kaXRpb25zLiAgSWYgeW91IGRvCisgKiBub3QgYWdyZWUgd2l0aCB0aGVzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucywgZG8gbm90IHVzZSB0aGUgc29mdHdhcmUuCisgKgorICogQ29weXJpZ2h0IKkgMjAwNSBBZ2VyZSBTeXN0ZW1zIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ugb3IgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbnMsIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiAuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcworICogICAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIERpc2NsYWltZXIgYXMgY29tbWVudHMgaW4gdGhlIGNvZGUgYXMKKyAqICAgIHdlbGwgYXMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIC4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICogICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgRGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgorICogICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogLiBOZWl0aGVyIHRoZSBuYW1lIG9mIEFnZXJlIFN5c3RlbXMgSW5jLiBub3IgdGhlIG5hbWVzIG9mIHRoZSBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogRGlzY2xhaW1lcgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgk0FTIElTlCBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLAorICogSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIElORlJJTkdFTUVOVCBBTkQgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIEFOWQorICogVVNFLCBNT0RJRklDQVRJT04gT1IgRElTVFJJQlVUSU9OIE9GIFRISVMgU09GVFdBUkUgSVMgU09MRUxZIEFUIFRIRSBVU0VSUyBPV04KKyAqIFJJU0suIElOIE5PIEVWRU5UIFNIQUxMIEFHRVJFIFNZU1RFTVMgSU5DLiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNICisgKiBEQU1BR0UuCisgKgorICovCisKKyNpZm5kZWYgX0VUMTMxMF9QSFlfSF8KKyNkZWZpbmUgX0VUMTMxMF9QSFlfSF8KKworI2luY2x1ZGUgImV0MTMxMF9hZGRyZXNzX21hcC5oIgorCisjZGVmaW5lIFRSVUVQSFlfU1VDQ0VTUyAwCisjZGVmaW5lIFRSVUVQSFlfRkFJTFVSRSAxCit0eXBlZGVmIHZvaWQgKlRSVUVQSFlfSEFORExFOwordHlwZWRlZiB2b2lkICpUUlVFUEhZX1BMQVRGT1JNX0hBTkRMRTsKK3R5cGVkZWYgdm9pZCAqVFJVRVBIWV9PU0FMX0hBTkRMRTsKKworLyogTUkgUmVnaXN0ZXIgQWRkcmVzc2VzICovCisjZGVmaW5lIE1JX0NPTlRST0xfUkVHICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgTUlfU1RBVFVTX1JFRyAgICAgICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSBNSV9QSFlfSURFTlRJRklFUl8xX1JFRyAgICAgICAgICAgICAyCisjZGVmaW5lIE1JX1BIWV9JREVOVElGSUVSXzJfUkVHICAgICAgICAgICAgIDMKKyNkZWZpbmUgTUlfQVVUT05FR19BRFZFUlRJU0VNRU5UX1JFRyAgICAgICAgNAorI2RlZmluZSBNSV9BVVRPTkVHX0xJTktfUEFSVE5FUl9BQklMSVRZX1JFRyA1CisjZGVmaW5lIE1JX0FVVE9ORUdfRVhQQU5TSU9OX1JFRyAgICAgICAgICAgIDYKKyNkZWZpbmUgTUlfQVVUT05FR19ORVhUX1BBR0VfVFJBTlNNSVRfUkVHICAgNworI2RlZmluZSBNSV9MSU5LX1BBUlRORVJfTkVYVF9QQUdFX1JFRyAgICAgICA4CisjZGVmaW5lIE1JXzEwMDBCQVNFVF9DT05UUk9MX1JFRyAgICAgICAgICAgIDkKKyNkZWZpbmUgTUlfMTAwMEJBU0VUX1NUQVRVU19SRUcgICAgICAgICAgICAgMTAKKyNkZWZpbmUgTUlfUkVTRVJWRUQxMV9SRUcgICAgICAgICAgICAgICAgICAgMTEKKyNkZWZpbmUgTUlfUkVTRVJWRUQxMl9SRUcgICAgICAgICAgICAgICAgICAgMTIKKyNkZWZpbmUgTUlfUkVTRVJWRUQxM19SRUcgICAgICAgICAgICAgICAgICAgMTMKKyNkZWZpbmUgTUlfUkVTRVJWRUQxNF9SRUcgICAgICAgICAgICAgICAgICAgMTQKKyNkZWZpbmUgTUlfRVhURU5ERURfU1RBVFVTX1JFRyAgICAgICAgICAgICAgMTUKKworLyogVk1JIFJlZ2lzdGVyIEFkZHJlc3NlcyAqLworI2RlZmluZSBWTUlfUkVTRVJWRUQxNl9SRUcgICAgICAgICAgICAgICAgICAxNgorI2RlZmluZSBWTUlfUkVTRVJWRUQxN19SRUcgICAgICAgICAgICAgICAgICAxNworI2RlZmluZSBWTUlfUkVTRVJWRUQxOF9SRUcgICAgICAgICAgICAgICAgICAxOAorI2RlZmluZSBWTUlfTE9PUEJBQ0tfQ09OVFJPTF9SRUcgICAgICAgICAgICAxOQorI2RlZmluZSBWTUlfUkVTRVJWRUQyMF9SRUcgICAgICAgICAgICAgICAgICAyMAorI2RlZmluZSBWTUlfTUlfQ09OVFJPTF9SRUcgICAgICAgICAgICAgICAgICAyMQorI2RlZmluZSBWTUlfUEhZX0NPTkZJR1VSQVRJT05fUkVHICAgICAgICAgICAyMgorI2RlZmluZSBWTUlfUEhZX0NPTlRST0xfUkVHICAgICAgICAgICAgICAgICAyMworI2RlZmluZSBWTUlfSU5URVJSVVBUX01BU0tfUkVHICAgICAgICAgICAgICAyNAorI2RlZmluZSBWTUlfSU5URVJSVVBUX1NUQVRVU19SRUcgICAgICAgICAgICAyNQorI2RlZmluZSBWTUlfUEhZX1NUQVRVU19SRUcgICAgICAgICAgICAgICAgICAyNgorI2RlZmluZSBWTUlfTEVEX0NPTlRST0xfMV9SRUcgICAgICAgICAgICAgICAyNworI2RlZmluZSBWTUlfTEVEX0NPTlRST0xfMl9SRUcgICAgICAgICAgICAgICAyOAorI2RlZmluZSBWTUlfUkVTRVJWRUQyOV9SRUcgICAgICAgICAgICAgICAgICAyOQorI2RlZmluZSBWTUlfUkVTRVJWRUQzMF9SRUcgICAgICAgICAgICAgICAgICAzMAorI2RlZmluZSBWTUlfUkVTRVJWRUQzMV9SRUcgICAgICAgICAgICAgICAgICAzMQorCisvKiBQSFkgUmVnaXN0ZXIgTWFwcGluZyhNSSkgTWFuYWdlbWVudCBJbnRlcmZhY2UgUmVncyAqLwordHlwZWRlZiBzdHJ1Y3QgX01JX1JFR1NfdCB7CisJdTggYm1jcjsJCS8vIEJhc2ljIG1vZGUgY29udHJvbCByZWcoUmVnIDB4MDApCisJdTggYm1zcjsJCS8vIEJhc2ljIG1vZGUgc3RhdHVzIHJlZyhSZWcgMHgwMSkKKwl1OCBpZHIxOwkJLy8gUGh5IGlkZW50aWZpZXIgcmVnIDEoUmVnIDB4MDIpCisJdTggaWRyMjsJCS8vIFBoeSBpZGVudGlmaWVyIHJlZyAyKFJlZyAweDAzKQorCXU4IGFuYXI7CQkvLyBBdXRvLU5lZ290aWF0aW9uIGFkdmVydGlzZW1lbnQoUmVnIDB4MDQpCisJdTggYW5scGFyOwkJLy8gQXV0by1OZWdvdGlhdGlvbiBsaW5rIFBhcnRuZXIgQWJpbGl0eShSZWcgMHgwNSkKKwl1OCBhbmVyOwkJLy8gQXV0by1OZWdvdGlhdGlvbiBleHBhbnNpb24gcmVnKFJlZyAweDA2KQorCXU4IGFubnB0cjsJCS8vIEF1dG8tTmVnb3RpYXRpb24gbmV4dCBwYWdlIHRyYW5zbWl0IHJlZyhSZWcgMHgwNykKKwl1OCBscG5wcjsJCS8vIGxpbmsgcGFydG5lciBuZXh0IHBhZ2UgcmVnKFJlZyAweDA4KQorCXU4IGdjcjsJCS8vIEdpZ2FiaXQgYmFzaWMgbW9kZSBjb250cm9sIHJlZyhSZWcgMHgwOSkKKwl1OCBnc3I7CQkvLyBHaWdhYml0IGJhc2ljIG1vZGUgc3RhdHVzIHJlZyhSZWcgMHgwQSkKKwl1OCBtaV9yZXMxWzRdOwkvLyBGdXR1cmUgdXNlIGJ5IE1JIHdvcmtpbmcgZ3JvdXAoUmVnIDB4MEIgLSAweDBFKQorCXU4IGVzcjsJCS8vIEV4dGVuZGVkIHN0YXR1cyByZWcoUmVnIDB4MEYpCisJdTggbWlfcmVzMlszXTsJLy8gRnV0dXJlIHVzZSBieSBNSSB3b3JraW5nIGdyb3VwKFJlZyAweDEwIC0gMHgxMikKKwl1OCBsb29wX2N0bDsJLy8gTG9vcGJhY2sgQ29udHJvbCBSZWcoUmVnIDB4MTMpCisJdTggbWlfcmVzMzsJLy8gRnV0dXJlIHVzZSBieSBNSSB3b3JraW5nIGdyb3VwKFJlZyAweDE0KQorCXU4IG1jcjsJCS8vIE1JIENvbnRyb2wgUmVnKFJlZyAweDE1KQorCXU4IHBjcjsJCS8vIENvbmZpZ3VyYXRpb24gUmVnKFJlZyAweDE2KQorCXU4IHBoeV9jdGw7CS8vIFBIWSBDb250cm9sIFJlZyhSZWcgMHgxNykKKwl1OCBpbXI7CQkvLyBJbnRlcnJ1cHQgTWFzayBSZWcoUmVnIDB4MTgpCisJdTggaXNyOwkJLy8gSW50ZXJydXB0IFN0YXR1cyBSZWcoUmVnIDB4MTkpCisJdTggcHNyOwkJLy8gUEhZIFN0YXR1cyBSZWcoUmVnIDB4MUEpCisJdTggbGNyMTsJCS8vIExFRCBDb250cm9sIDEgUmVnKFJlZyAweDFCKQorCXU4IGxjcjI7CQkvLyBMRUQgQ29udHJvbCAyIFJlZyhSZWcgMHgxQykKKwl1OCBtaV9yZXM0WzNdOwkvLyBGdXR1cmUgdXNlIGJ5IE1JIHdvcmtpbmcgZ3JvdXAoUmVnIDB4MUQgLSAweDFGKQorfSBNSV9SRUdTX3QsICpQTUlfUkVHU190OworCisvKiBNSSBSZWdpc3RlciAwOiBCYXNpYyBtb2RlIGNvbnRyb2wgcmVnaXN0ZXIgKi8KK3R5cGVkZWYgdW5pb24gX01JX0JNQ1JfdCB7CisJdTE2IHZhbHVlOworCXN0cnVjdCB7CisjaWZkZWYgX0JJVF9GSUVMRFNfSFRPTAorCQl1MTYgcmVzZXQ6MTsJCS8vIGJpdCAxNQorCQl1MTYgbG9vcGJhY2s6MTsJCS8vIGJpdCAxNAorCQl1MTYgc3BlZWRfc2VsOjE7CQkvLyBiaXQgMTMKKwkJdTE2IGVuYWJsZV9hdXRvbmVnOjE7CS8vIGJpdCAxMgorCQl1MTYgcG93ZXJfZG93bjoxOwkJLy8gYml0IDExCisJCXUxNiBpc29sYXRlOjE7CQkvLyBiaXQgMTAKKwkJdTE2IHJlc3RhcnRfYXV0b25lZzoxOwkvLyBiaXQgOQorCQl1MTYgZHVwbGV4X21vZGU6MTsJCS8vIGJpdCA4CisJCXUxNiBjb2xfdGVzdDoxOwkJLy8gYml0IDcKKwkJdTE2IHNwZWVkXzEwMDBfc2VsOjE7CS8vIGJpdCA2CisJCXUxNiByZXMxOjY7CQkvLyBiaXRzIDAtNQorI2Vsc2UKKwkJdTE2IHJlczE6NjsJCS8vIGJpdHMgMC01CisJCXUxNiBzcGVlZF8xMDAwX3NlbDoxOwkvLyBiaXQgNgorCQl1MTYgY29sX3Rlc3Q6MTsJCS8vIGJpdCA3CisJCXUxNiBkdXBsZXhfbW9kZToxOwkJLy8gYml0IDgKKwkJdTE2IHJlc3RhcnRfYXV0b25lZzoxOwkvLyBiaXQgOQorCQl1MTYgaXNvbGF0ZToxOwkJLy8gYml0IDEwCisJCXUxNiBwb3dlcl9kb3duOjE7CQkvLyBiaXQgMTEKKwkJdTE2IGVuYWJsZV9hdXRvbmVnOjE7CS8vIGJpdCAxMgorCQl1MTYgc3BlZWRfc2VsOjE7CQkvLyBiaXQgMTMKKwkJdTE2IGxvb3BiYWNrOjE7CQkvLyBiaXQgMTQKKwkJdTE2IHJlc2V0OjE7CQkvLyBiaXQgMTUKKyNlbmRpZgorCX0gYml0czsKK30gTUlfQk1DUl90LCAqUE1JX0JNQ1JfdDsKKworLyogTUkgUmVnaXN0ZXIgMTogIEJhc2ljIG1vZGUgc3RhdHVzIHJlZ2lzdGVyICovCit0eXBlZGVmIHVuaW9uIF9NSV9CTVNSX3QgeworCXUxNiB2YWx1ZTsKKwlzdHJ1Y3QgeworI2lmZGVmIF9CSVRfRklFTERTX0hUT0wKKwkJdTE2IGxpbmtfMTAwVDQ6MTsJCS8vIGJpdCAxNQorCQl1MTYgbGlua18xMDBmZHg6MTsJCS8vIGJpdCAxNAorCQl1MTYgbGlua18xMDBoZHg6MTsJCS8vIGJpdCAxMworCQl1MTYgbGlua18xMGZkeDoxOwkJLy8gYml0IDEyCisJCXUxNiBsaW5rXzEwaGR4OjE7CQkvLyBiaXQgMTEKKwkJdTE2IGxpbmtfMTAwVDJmZHg6MTsJLy8gYml0IDEwCisJCXUxNiBsaW5rXzEwMFQyaGR4OjE7CS8vIGJpdCA5CisJCXUxNiBleHRlbmRfc3RhdHVzOjE7CS8vIGJpdCA4CisJCXUxNiByZXMxOjE7CQkvLyBiaXQgNworCQl1MTYgcHJlYW1ibGVfc3VwcmVzczoxOwkvLyBiaXQgNgorCQl1MTYgYXV0b19uZWdfY29tcGxldGU6MTsJLy8gYml0IDUKKwkJdTE2IHJlbW90ZV9mYXVsdDoxOwkvLyBiaXQgNAorCQl1MTYgYXV0b19uZWdfYWJsZToxOwkvLyBiaXQgMworCQl1MTYgbGlua19zdGF0dXM6MTsJCS8vIGJpdCAyCisJCXUxNiBqYWJiZXJfZGV0ZWN0OjE7CS8vIGJpdCAxCisJCXUxNiBleHRfY2FwOjE7CQkvLyBiaXQgMAorI2Vsc2UKKwkJdTE2IGV4dF9jYXA6MTsJCS8vIGJpdCAwCisJCXUxNiBqYWJiZXJfZGV0ZWN0OjE7CS8vIGJpdCAxCisJCXUxNiBsaW5rX3N0YXR1czoxOwkJLy8gYml0IDIKKwkJdTE2IGF1dG9fbmVnX2FibGU6MTsJLy8gYml0IDMKKwkJdTE2IHJlbW90ZV9mYXVsdDoxOwkvLyBiaXQgNAorCQl1MTYgYXV0b19uZWdfY29tcGxldGU6MTsJLy8gYml0IDUKKwkJdTE2IHByZWFtYmxlX3N1cHJlc3M6MTsJLy8gYml0IDYKKwkJdTE2IHJlczE6MTsJCS8vIGJpdCA3CisJCXUxNiBleHRlbmRfc3RhdHVzOjE7CS8vIGJpdCA4CisJCXUxNiBsaW5rXzEwMFQyaGR4OjE7CS8vIGJpdCA5CisJCXUxNiBsaW5rXzEwMFQyZmR4OjE7CS8vIGJpdCAxMAorCQl1MTYgbGlua18xMGhkeDoxOwkJLy8gYml0IDExCisJCXUxNiBsaW5rXzEwZmR4OjE7CQkvLyBiaXQgMTIKKwkJdTE2IGxpbmtfMTAwaGR4OjE7CQkvLyBiaXQgMTMKKwkJdTE2IGxpbmtfMTAwZmR4OjE7CQkvLyBiaXQgMTQKKwkJdTE2IGxpbmtfMTAwVDQ6MTsJCS8vIGJpdCAxNQorI2VuZGlmCisJfSBiaXRzOworfSBNSV9CTVNSX3QsICpQTUlfQk1TUl90OworCisvKiBNSSBSZWdpc3RlciAyOiBQaHlzaWNhbCBJZGVudGlmaWVyIDEgKi8KK3R5cGVkZWYgdW5pb24gX01JX0lEUjFfdCB7CisJdTE2IHZhbHVlOworCXN0cnVjdCB7CisJCXUxNiBpZWVlX2FkZHJlc3M6MTY7CS8vIDB4MDI4MiBkZWZhdWx0KGJpdHMgMC0xNSkKKwl9IGJpdHM7Cit9IE1JX0lEUjFfdCwgKlBNSV9JRFIxX3Q7CisKKy8qIE1JIFJlZ2lzdGVyIDM6IFBoeXNpY2FsIElkZW50aWZpZXIgMiAqLwordHlwZWRlZiB1bmlvbiBfTUlfSURSMl90IHsKKwl1MTYgdmFsdWU7CisJc3RydWN0IHsKKyNpZmRlZiBfQklUX0ZJRUxEU19IVE9MCisJCXUxNiBpZWVlX2FkZHJlc3M6NjsJLy8gMTExMTAwIGRlZmF1bHQoYml0cyAxMC0xNSkKKwkJdTE2IG1vZGVsX25vOjY7CQkvLyAwMDAwMDEgZGVmYXVsdChiaXRzIDQtOSkKKwkJdTE2IHJldl9ubzo0OwkJLy8gMDAxMCAgIGRlZmF1bHQoYml0cyAwLTMpCisjZWxzZQorCQl1MTYgcmV2X25vOjQ7CQkvLyAwMDEwICAgZGVmYXVsdChiaXRzIDAtMykKKwkJdTE2IG1vZGVsX25vOjY7CQkvLyAwMDAwMDEgZGVmYXVsdChiaXRzIDQtOSkKKwkJdTE2IGllZWVfYWRkcmVzczo2OwkvLyAxMTExMDAgZGVmYXVsdChiaXRzIDEwLTE1KQorI2VuZGlmCisJfSBiaXRzOworfSBNSV9JRFIyX3QsICpQTUlfSURSMl90OworCisvKiBNSSBSZWdpc3RlciA0OiBBdXRvLW5lZ290aWF0aW9uIGFkdmVydGlzZW1lbnQgcmVnaXN0ZXIgKi8KK3R5cGVkZWYgdW5pb24gX01JX0FOQVJfdCB7CisJdTE2IHZhbHVlOworCXN0cnVjdCB7CisjaWZkZWYgX0JJVF9GSUVMRFNfSFRPTAorCQl1MTYgbnBfaW5kaWNhdGlvbjoxOwkvLyBiaXQgMTUKKwkJdTE2IHJlczI6MTsJCS8vIGJpdCAxNAorCQl1MTYgcmVtb3RlX2ZhdWx0OjE7CS8vIGJpdCAxMworCQl1MTYgcmVzMToxOwkJLy8gYml0IDEyCisJCXUxNiBjYXBfYXNtcGF1c2U6MTsJLy8gYml0IDExCisJCXUxNiBjYXBfcGF1c2U6MTsJCS8vIGJpdCAxMAorCQl1MTYgY2FwXzEwMFQ0OjE7CQkvLyBiaXQgOQorCQl1MTYgY2FwXzEwMGZkeDoxOwkJLy8gYml0IDgKKwkJdTE2IGNhcF8xMDBoZHg6MTsJCS8vIGJpdCA3CisJCXUxNiBjYXBfMTBmZHg6MTsJCS8vIGJpdCA2CisJCXUxNiBjYXBfMTBoZHg6MTsJCS8vIGJpdCA1CisJCXUxNiBzZWxlY3Rvcjo1OwkJLy8gYml0cyAwLTQKKyNlbHNlCisJCXUxNiBzZWxlY3Rvcjo1OwkJLy8gYml0cyAwLTQKKwkJdTE2IGNhcF8xMGhkeDoxOwkJLy8gYml0IDUKKwkJdTE2IGNhcF8xMGZkeDoxOwkJLy8gYml0IDYKKwkJdTE2IGNhcF8xMDBoZHg6MTsJCS8vIGJpdCA3CisJCXUxNiBjYXBfMTAwZmR4OjE7CQkvLyBiaXQgOAorCQl1MTYgY2FwXzEwMFQ0OjE7CQkvLyBiaXQgOQorCQl1MTYgY2FwX3BhdXNlOjE7CQkvLyBiaXQgMTAKKwkJdTE2IGNhcF9hc21wYXVzZToxOwkvLyBiaXQgMTEKKwkJdTE2IHJlczE6MTsJCS8vIGJpdCAxMgorCQl1MTYgcmVtb3RlX2ZhdWx0OjE7CS8vIGJpdCAxMworCQl1MTYgcmVzMjoxOwkJLy8gYml0IDE0CisJCXUxNiBucF9pbmRpY2F0aW9uOjE7CS8vIGJpdCAxNQorI2VuZGlmCisJfSBiaXRzOworfSBNSV9BTkFSX3QsICpQTUlfQU5BUl90OworCisvKiBNSSBSZWdpc3RlciA1OiBBdXRvLW5lZ290aWF0aW9uIGxpbmsgcGFydG5lciBhZHZlcnRpc2VtZW50IHJlZ2lzdGVyICovCit0eXBlZGVmIHN0cnVjdCBfTUlfQU5MUEFSX3QgeworCXUxNiB2YWx1ZTsKKwlzdHJ1Y3QgeworI2lmZGVmIF9CSVRfRklFTERTX0hUT0wKKwkJdTE2IG5wX2luZGljYXRpb246MTsJLy8gYml0IDE1CisJCXUxNiBhY2tub3dsZWRnZToxOwkJLy8gYml0IDE0CisJCXUxNiByZW1vdGVfZmF1bHQ6MTsJLy8gYml0IDEzCisJCXUxNiByZXMxOjE7CQkvLyBiaXQgMTIKKwkJdTE2IGNhcF9hc21wYXVzZToxOwkvLyBiaXQgMTEKKwkJdTE2IGNhcF9wYXVzZToxOwkJLy8gYml0IDEwCisJCXUxNiBjYXBfMTAwVDQ6MTsJCS8vIGJpdCA5CisJCXUxNiBjYXBfMTAwZmR4OjE7CQkvLyBiaXQgOAorCQl1MTYgY2FwXzEwMGhkeDoxOwkJLy8gYml0IDcKKwkJdTE2IGNhcF8xMGZkeDoxOwkJLy8gYml0IDYKKwkJdTE2IGNhcF8xMGhkeDoxOwkJLy8gYml0IDUKKwkJdTE2IHNlbGVjdG9yOjU7CQkvLyBiaXRzIDAtNAorI2Vsc2UKKwkJdTE2IHNlbGVjdG9yOjU7CQkvLyBiaXRzIDAtNAorCQl1MTYgY2FwXzEwaGR4OjE7CQkvLyBiaXQgNQorCQl1MTYgY2FwXzEwZmR4OjE7CQkvLyBiaXQgNgorCQl1MTYgY2FwXzEwMGhkeDoxOwkJLy8gYml0IDcKKwkJdTE2IGNhcF8xMDBmZHg6MTsJCS8vIGJpdCA4CisJCXUxNiBjYXBfMTAwVDQ6MTsJCS8vIGJpdCA5CisJCXUxNiBjYXBfcGF1c2U6MTsJCS8vIGJpdCAxMAorCQl1MTYgY2FwX2FzbXBhdXNlOjE7CS8vIGJpdCAxMQorCQl1MTYgcmVzMToxOwkJLy8gYml0IDEyCisJCXUxNiByZW1vdGVfZmF1bHQ6MTsJLy8gYml0IDEzCisJCXUxNiBhY2tub3dsZWRnZToxOwkJLy8gYml0IDE0CisJCXUxNiBucF9pbmRpY2F0aW9uOjE7CS8vIGJpdCAxNQorI2VuZGlmCisJfSBiaXRzOworfSBNSV9BTkxQQVJfdCwgKlBNSV9BTkxQQVJfdDsKKworLyogTUkgUmVnaXN0ZXIgNjogQXV0by1uZWdvdGlhdGlvbiBleHBhbnNpb24gcmVnaXN0ZXIgKi8KK3R5cGVkZWYgdW5pb24gX01JX0FORVJfdCB7CisJdTE2IHZhbHVlOworCXN0cnVjdCB7CisjaWZkZWYgX0JJVF9GSUVMRFNfSFRPTAorCQl1MTYgcmVzOjExOwkvLyBiaXRzIDUtMTUKKwkJdTE2IHBkZjoxOwkJLy8gYml0IDQKKwkJdTE2IGxwX25wX2FibGU6MTsJLy8gYml0IDMKKwkJdTE2IG5wX2FibGU6MTsJLy8gYml0IDIKKwkJdTE2IHBhZ2Vfcng6MTsJLy8gYml0IDEKKwkJdTE2IGxwX2FuX2FibGU6MTsJLy8gYml0IDAKKyNlbHNlCisJCXUxNiBscF9hbl9hYmxlOjE7CS8vIGJpdCAwCisJCXUxNiBwYWdlX3J4OjE7CS8vIGJpdCAxCisJCXUxNiBucF9hYmxlOjE7CS8vIGJpdCAyCisJCXUxNiBscF9ucF9hYmxlOjE7CS8vIGJpdCAzCisJCXUxNiBwZGY6MTsJCS8vIGJpdCA0CisJCXUxNiByZXM6MTE7CS8vIGJpdHMgNS0xNQorI2VuZGlmCisJfSBiaXRzOworfSBNSV9BTkVSX3QsICpQTUlfQU5FUl90OworCisvKiBNSSBSZWdpc3RlciA3OiBBdXRvLW5lZ290aWF0aW9uIG5leHQgcGFnZSB0cmFuc21pdCByZWcoMHgwNykgKi8KK3R5cGVkZWYgdW5pb24gX01JX0FOTlBUUl90IHsKKwl1MTYgdmFsdWU7CisJc3RydWN0IHsKKyNpZmRlZiBfQklUX0ZJRUxEU19IVE9MCisJCXUxNiBucDoxOwkJLy8gYml0IDE1CisJCXUxNiByZXMxOjE7CS8vIGJpdCAxNAorCQl1MTYgbXNnX3BhZ2U6MTsJLy8gYml0IDEzCisJCXUxNiBhY2syOjE7CS8vIGJpdCAxMgorCQl1MTYgdG9nZ2xlOjE7CS8vIGJpdCAxMQorCQl1MTYgbXNnOjExOwkvLyBiaXRzIDAtMTAKKyNlbHNlCisJCXUxNiBtc2c6MTE7CS8vIGJpdHMgMC0xMAorCQl1MTYgdG9nZ2xlOjE7CS8vIGJpdCAxMQorCQl1MTYgYWNrMjoxOwkvLyBiaXQgMTIKKwkJdTE2IG1zZ19wYWdlOjE7CS8vIGJpdCAxMworCQl1MTYgcmVzMToxOwkvLyBiaXQgMTQKKwkJdTE2IG5wOjE7CQkvLyBiaXQgMTUKKyNlbmRpZgorCX0gYml0czsKK30gTUlfQU5OUFRSX3QsICpQTUlfQU5OUFRSX3Q7CisKKy8qIE1JIFJlZ2lzdGVyIDg6IExpbmsgUGFydG5lciBOZXh0IFBhZ2UgUmVnKDB4MDgpICovCit0eXBlZGVmIHVuaW9uIF9NSV9MUE5QUl90IHsKKwl1MTYgdmFsdWU7CisJc3RydWN0IHsKKyNpZmRlZiBfQklUX0ZJRUxEU19IVE9MCisJCXUxNiBucDoxOwkJLy8gYml0IDE1CisJCXUxNiBhY2s6MTsJCS8vIGJpdCAxNAorCQl1MTYgbXNnX3BhZ2U6MTsJLy8gYml0IDEzCisJCXUxNiBhY2syOjE7CS8vIGJpdCAxMgorCQl1MTYgdG9nZ2xlOjE7CS8vIGJpdCAxMQorCQl1MTYgbXNnOjExOwkvLyBiaXRzIDAtMTAKKyNlbHNlCisJCXUxNiBtc2c6MTE7CS8vIGJpdHMgMC0xMAorCQl1MTYgdG9nZ2xlOjE7CS8vIGJpdCAxMQorCQl1MTYgYWNrMjoxOwkvLyBiaXQgMTIKKwkJdTE2IG1zZ19wYWdlOjE7CS8vIGJpdCAxMworCQl1MTYgYWNrOjE7CQkvLyBiaXQgMTQKKwkJdTE2IG5wOjE7CQkvLyBiaXQgMTUKKyNlbmRpZgorCX0gYml0czsKK30gTUlfTFBOUFJfdCwgKlBNSV9MUE5QUl90OworCisvKiBNSSBSZWdpc3RlciA5OiAxMDAwQmFzZVQgQ29udHJvbCBSZWcoMHgwOSkgKi8KK3R5cGVkZWYgdW5pb24gX01JX0dDUl90IHsKKwl1MTYgdmFsdWU7CisJc3RydWN0IHsKKyNpZmRlZiBfQklUX0ZJRUxEU19IVE9MCisJCXUxNiB0ZXN0X21vZGU6MzsJCS8vIGJpdHMgMTMtMTUKKwkJdTE2IG1zX2NvbmZpZ19lbjoxOwkvLyBiaXQgMTIKKwkJdTE2IG1zX3ZhbHVlOjE7CQkvLyBiaXQgMTEKKwkJdTE2IHBvcnRfdHlwZToxOwkJLy8gYml0IDEwCisJCXUxNiBsaW5rXzEwMDBmZHg6MTsJLy8gYml0IDkKKwkJdTE2IGxpbmtfMTAwMGhkeDoxOwkvLyBiaXQgOAorCQl1MTYgcmVzOjg7CQkJLy8gYml0IDAtNworI2Vsc2UKKwkJdTE2IHJlczo4OwkJCS8vIGJpdCAwLTcKKwkJdTE2IGxpbmtfMTAwMGhkeDoxOwkvLyBiaXQgOAorCQl1MTYgbGlua18xMDAwZmR4OjE7CS8vIGJpdCA5CisJCXUxNiBwb3J0X3R5cGU6MTsJCS8vIGJpdCAxMAorCQl1MTYgbXNfdmFsdWU6MTsJCS8vIGJpdCAxMQorCQl1MTYgbXNfY29uZmlnX2VuOjE7CS8vIGJpdCAxMgorCQl1MTYgdGVzdF9tb2RlOjM7CQkvLyBiaXRzIDEzLTE1CisjZW5kaWYKKwl9IGJpdHM7Cit9IE1JX0dDUl90LCAqUE1JX0dDUl90OworCisvKiBNSSBSZWdpc3RlciAxMDogMTAwMEJhc2VUIFN0YXR1cyBSZWcoMHgwQSkgKi8KK3R5cGVkZWYgdW5pb24gX01JX0dTUl90IHsKKwl1MTYgdmFsdWU7CisJc3RydWN0IHsKKyNpZmRlZiBfQklUX0ZJRUxEU19IVE9MCisJCXUxNiBtc19jb25maWdfZmF1bHQ6MTsJLy8gYml0IDE1CisJCXUxNiBtc19yZXNvbHZlOjE7CQkvLyBiaXQgMTQKKwkJdTE2IGxvY2FsX3J4X3N0YXR1czoxOwkvLyBiaXQgMTMKKwkJdTE2IHJlbW90ZV9yeF9zdGF0dXM6MTsJLy8gYml0IDEyCisJCXUxNiBsaW5rXzEwMDBmZHg6MTsJLy8gYml0IDExCisJCXUxNiBsaW5rXzEwMDBoZHg6MTsJLy8gYml0IDEwCisJCXUxNiByZXM6MjsJCQkvLyBiaXRzIDgtOQorCQl1MTYgaWRsZV9lcnJfY250Ojg7CS8vIGJpdHMgMC03CisjZWxzZQorCQl1MTYgaWRsZV9lcnJfY250Ojg7CS8vIGJpdHMgMC03CisJCXUxNiByZXM6MjsJCQkvLyBiaXRzIDgtOQorCQl1MTYgbGlua18xMDAwaGR4OjE7CS8vIGJpdCAxMAorCQl1MTYgbGlua18xMDAwZmR4OjE7CS8vIGJpdCAxMQorCQl1MTYgcmVtb3RlX3J4X3N0YXR1czoxOwkvLyBiaXQgMTIKKwkJdTE2IGxvY2FsX3J4X3N0YXR1czoxOwkvLyBiaXQgMTMKKwkJdTE2IG1zX3Jlc29sdmU6MTsJCS8vIGJpdCAxNAorCQl1MTYgbXNfY29uZmlnX2ZhdWx0OjE7CS8vIGJpdCAxNQorI2VuZGlmCisJfSBiaXRzOworfSBNSV9HU1JfdCwgKlBNSV9HU1JfdDsKKworLyogTUkgUmVnaXN0ZXIgMTEgLSAxNDogUmVzZXJ2ZWQgUmVncygweDBCIC0gMHgwRSkgKi8KK3R5cGVkZWYgdW5pb24gX01JX1JFU190IHsKKwl1MTYgdmFsdWU7CisJc3RydWN0IHsKKyNpZmRlZiBfQklUX0ZJRUxEU19IVE9MCisJCXUxNiByZXMxNToxOwkvLyBiaXQgMTUKKwkJdTE2IHJlczE0OjE7CS8vIGJpdCAxNAorCQl1MTYgcmVzMTM6MTsJLy8gYml0IDEzCisJCXUxNiByZXMxMjoxOwkvLyBiaXQgMTIKKwkJdTE2IHJlczExOjE7CS8vIGJpdCAxMQorCQl1MTYgcmVzMTA6MTsJLy8gYml0IDEwCisJCXUxNiByZXM5OjE7CS8vIGJpdCA5CisJCXUxNiByZXM4OjE7CS8vIGJpdCA4CisJCXUxNiByZXM3OjE7CS8vIGJpdCA3CisJCXUxNiByZXM2OjE7CS8vIGJpdCA2CisJCXUxNiByZXM1OjE7CS8vIGJpdCA1CisJCXUxNiByZXM0OjE7CS8vIGJpdCA0CisJCXUxNiByZXMzOjE7CS8vIGJpdCAzCisJCXUxNiByZXMyOjE7CS8vIGJpdCAyCisJCXUxNiByZXMxOjE7CS8vIGJpdCAxCisJCXUxNiByZXMwOjE7CS8vIGJpdCAwCisjZWxzZQorCQl1MTYgcmVzMDoxOwkvLyBiaXQgMAorCQl1MTYgcmVzMToxOwkvLyBiaXQgMQorCQl1MTYgcmVzMjoxOwkvLyBiaXQgMgorCQl1MTYgcmVzMzoxOwkvLyBiaXQgMworCQl1MTYgcmVzNDoxOwkvLyBiaXQgNAorCQl1MTYgcmVzNToxOwkvLyBiaXQgNQorCQl1MTYgcmVzNjoxOwkvLyBiaXQgNgorCQl1MTYgcmVzNzoxOwkvLyBiaXQgNworCQl1MTYgcmVzODoxOwkvLyBiaXQgOAorCQl1MTYgcmVzOToxOwkvLyBiaXQgOQorCQl1MTYgcmVzMTA6MTsJLy8gYml0IDEwCisJCXUxNiByZXMxMToxOwkvLyBiaXQgMTEKKwkJdTE2IHJlczEyOjE7CS8vIGJpdCAxMgorCQl1MTYgcmVzMTM6MTsJLy8gYml0IDEzCisJCXUxNiByZXMxNDoxOwkvLyBiaXQgMTQKKwkJdTE2IHJlczE1OjE7CS8vIGJpdCAxNQorI2VuZGlmCisJfSBiaXRzOworfSBNSV9SRVNfdCwgKlBNSV9SRVNfdDsKKworLyogTUkgUmVnaXN0ZXIgMTU6IEV4dGVuZGVkIHN0YXR1cyBSZWcoMHgwRikgKi8KK3R5cGVkZWYgdW5pb24gX01JX0VTUl90IHsKKwl1MTYgdmFsdWU7CisJc3RydWN0IHsKKyNpZmRlZiBfQklUX0ZJRUxEU19IVE9MCisJCXUxNiBsaW5rXzEwMDBYZmR4OjE7CS8vIGJpdCAxNQorCQl1MTYgbGlua18xMDAwWGhkeDoxOwkvLyBiaXQgMTQKKwkJdTE2IGxpbmtfMTAwMGZkeDoxOwkvLyBiaXQgMTMKKwkJdTE2IGxpbmtfMTAwMGhkeDoxOwkvLyBiaXQgMTIKKwkJdTE2IHJlczoxMjsJCS8vIGJpdCAwLTExCisjZWxzZQorCQl1MTYgcmVzOjEyOwkJLy8gYml0IDAtMTEKKwkJdTE2IGxpbmtfMTAwMGhkeDoxOwkvLyBiaXQgMTIKKwkJdTE2IGxpbmtfMTAwMGZkeDoxOwkvLyBiaXQgMTMKKwkJdTE2IGxpbmtfMTAwMFhoZHg6MTsJLy8gYml0IDE0CisJCXUxNiBsaW5rXzEwMDBYZmR4OjE7CS8vIGJpdCAxNQorI2VuZGlmCisJfSBiaXRzOworfSBNSV9FU1JfdCwgKlBNSV9FU1JfdDsKKworLyogTUkgUmVnaXN0ZXIgMTYgLSAxODogUmVzZXJ2ZWQgUmVnKDB4MTAtMHgxMikgKi8KKworLyogTUkgUmVnaXN0ZXIgMTk6IExvb3BiYWNrIENvbnRyb2wgUmVnKDB4MTMpICovCit0eXBlZGVmIHVuaW9uIF9NSV9MQ1JfdCB7CisJdTE2IHZhbHVlOworCXN0cnVjdCB7CisjaWZkZWYgX0JJVF9GSUVMRFNfSFRPTAorCQl1MTYgbWlpX2VuOjE7CQkvLyBiaXQgMTUKKwkJdTE2IHBjc19lbjoxOwkJLy8gYml0IDE0CisJCXUxNiBwbWRfZW46MTsJCS8vIGJpdCAxMworCQl1MTYgYWxsX2RpZ2l0YWxfZW46MTsJLy8gYml0IDEyCisJCXUxNiByZXBsaWNhX2VuOjE7CQkvLyBiaXQgMTEKKwkJdTE2IGxpbmVfZHJpdmVyX2VuOjE7CS8vIGJpdCAxMAorCQl1MTYgcmVzOjEwOwkJLy8gYml0IDAtOQorI2Vsc2UKKwkJdTE2IHJlczoxMDsJCS8vIGJpdCAwLTkKKwkJdTE2IGxpbmVfZHJpdmVyX2VuOjE7CS8vIGJpdCAxMAorCQl1MTYgcmVwbGljYV9lbjoxOwkJLy8gYml0IDExCisJCXUxNiBhbGxfZGlnaXRhbF9lbjoxOwkvLyBiaXQgMTIKKwkJdTE2IHBtZF9lbjoxOwkJLy8gYml0IDEzCisJCXUxNiBwY3NfZW46MTsJCS8vIGJpdCAxNAorCQl1MTYgbWlpX2VuOjE7CQkvLyBiaXQgMTUKKyNlbmRpZgorCX0gYml0czsKK30gTUlfTENSX3QsICpQTUlfTENSX3Q7CisKKy8qIE1JIFJlZ2lzdGVyIDIwOiBSZXNlcnZlZCBSZWcoMHgxNCkgKi8KKworLyogTUkgUmVnaXN0ZXIgMjE6IE1hbmFnZW1lbnQgSW50ZXJmYWNlIENvbnRyb2wgUmVnKDB4MTUpICovCit0eXBlZGVmIHVuaW9uIF9NSV9NSUNSX3QgeworCXUxNiB2YWx1ZTsKKwlzdHJ1Y3QgeworI2lmZGVmIF9CSVRfRklFTERTX0hUT0wKKwkJdTE2IHJlczE6NTsJCS8vIGJpdHMgMTEtMTUKKwkJdTE2IG1pX2Vycm9yX2NvdW50Ojc7CS8vIGJpdHMgNC0xMAorCQl1MTYgcmVzMjoxOwkJLy8gYml0IDMKKwkJdTE2IGlnbm9yZV8xMGdfZnI6MTsJLy8gYml0IDIKKwkJdTE2IHJlczM6MTsJCS8vIGJpdCAxCisJCXUxNiBwcmVhbWJsZV9zdXByZXNzX2VuOjE7CS8vIGJpdCAwCisjZWxzZQorCQl1MTYgcHJlYW1ibGVfc3VwcmVzc19lbjoxOwkvLyBiaXQgMAorCQl1MTYgcmVzMzoxOwkJLy8gYml0IDEKKwkJdTE2IGlnbm9yZV8xMGdfZnI6MTsJLy8gYml0IDIKKwkJdTE2IHJlczI6MTsJCS8vIGJpdCAzCisJCXUxNiBtaV9lcnJvcl9jb3VudDo3OwkvLyBiaXRzIDQtMTAKKwkJdTE2IHJlczE6NTsJCS8vIGJpdHMgMTEtMTUKKyNlbmRpZgorCX0gYml0czsKK30gTUlfTUlDUl90LCAqUE1JX01JQ1JfdDsKKworLyogTUkgUmVnaXN0ZXIgMjI6IFBIWSBDb25maWd1cmF0aW9uIFJlZygweDE2KSAqLwordHlwZWRlZiB1bmlvbiBfTUlfUEhZX0NPTkZJR190IHsKKwl1MTYgdmFsdWU7CisJc3RydWN0IHsKKyNpZmRlZiBfQklUX0ZJRUxEU19IVE9MCisJCXUxNiBjcnNfdHhfZW46MTsJCS8vIGJpdCAxNQorCQl1MTYgcmVzMToxOwkJLy8gYml0IDE0CisJCXUxNiB0eF9maWZvX2RlcHRoOjI7CS8vIGJpdHMgMTItMTMKKwkJdTE2IHNwZWVkX2Rvd25zaGlmdDoyOwkvLyBiaXRzIDEwLTExCisJCXUxNiBwYmlfZGV0ZWN0OjE7CQkvLyBiaXQgOQorCQl1MTYgdGJpX3JhdGU6MTsJCS8vIGJpdCA4CisJCXUxNiBhbHRlcm5hdGVfbnA6MTsJLy8gYml0IDcKKwkJdTE2IGdyb3VwX21kaW9fZW46MTsJLy8gYml0IDYKKwkJdTE2IHR4X2Nsb2NrX2VuOjE7CQkvLyBiaXQgNQorCQl1MTYgc3lzX2Nsb2NrX2VuOjE7CS8vIGJpdCA0CisJCXUxNiByZXMyOjE7CQkvLyBiaXQgMworCQl1MTYgbWFjX2lmX21vZGU6MzsJCS8vIGJpdHMgMC0yCisjZWxzZQorCQl1MTYgbWFjX2lmX21vZGU6MzsJCS8vIGJpdHMgMC0yCisJCXUxNiByZXMyOjE7CQkvLyBiaXQgMworCQl1MTYgc3lzX2Nsb2NrX2VuOjE7CS8vIGJpdCA0CisJCXUxNiB0eF9jbG9ja19lbjoxOwkJLy8gYml0IDUKKwkJdTE2IGdyb3VwX21kaW9fZW46MTsJLy8gYml0IDYKKwkJdTE2IGFsdGVybmF0ZV9ucDoxOwkvLyBiaXQgNworCQl1MTYgdGJpX3JhdGU6MTsJCS8vIGJpdCA4CisJCXUxNiBwYmlfZGV0ZWN0OjE7CQkvLyBiaXQgOQorCQl1MTYgc3BlZWRfZG93bnNoaWZ0OjI7CS8vIGJpdHMgMTAtMTEKKwkJdTE2IHR4X2ZpZm9fZGVwdGg6MjsJLy8gYml0cyAxMi0xMworCQl1MTYgcmVzMToxOwkJLy8gYml0IDE0CisJCXUxNiBjcnNfdHhfZW46MTsJCS8vIGJpdCAxNQorI2VuZGlmCisJfSBiaXRzOworfSBNSV9QSFlfQ09ORklHX3QsICpQTUlfUEhZX0NPTkZJR190OworCisvKiBNSSBSZWdpc3RlciAyMzogUEhZIENPTlRST0wgUmVnKDB4MTcpICovCit0eXBlZGVmIHVuaW9uIF9NSV9QSFlfQ09OVFJPTF90IHsKKwl1MTYgdmFsdWU7CisJc3RydWN0IHsKKyNpZmRlZiBfQklUX0ZJRUxEU19IVE9MCisJCXUxNiByZXMxOjE7CQkvLyBiaXQgMTUKKwkJdTE2IHRkcl9lbjoxOwkJLy8gYml0IDE0CisJCXUxNiByZXMyOjE7CQkvLyBiaXQgMTMKKwkJdTE2IGRvd25zaGlmdF9hdHRlbXB0czoyOwkvLyBiaXRzIDExLTEyCisJCXUxNiByZXMzOjU7CQkvLyBiaXQgNi0xMAorCQl1MTYgamFiYmVyXzEwYmFzZVQ6MTsJLy8gYml0IDUKKwkJdTE2IHNxZV8xMGJhc2VUOjE7CQkvLyBiaXQgNAorCQl1MTYgdHBfbG9vcGJhY2tfMTBiYXNlVDoxOwkvLyBiaXQgMworCQl1MTYgcHJlYW1ibGVfZ2VuX2VuOjE7CS8vIGJpdCAyCisJCXUxNiByZXM0OjE7CQkvLyBiaXQgMQorCQl1MTYgZm9yY2VfaW50OjE7CQkvLyBiaXQgMAorI2Vsc2UKKwkJdTE2IGZvcmNlX2ludDoxOwkJLy8gYml0IDAKKwkJdTE2IHJlczQ6MTsJCS8vIGJpdCAxCisJCXUxNiBwcmVhbWJsZV9nZW5fZW46MTsJLy8gYml0IDIKKwkJdTE2IHRwX2xvb3BiYWNrXzEwYmFzZVQ6MTsJLy8gYml0IDMKKwkJdTE2IHNxZV8xMGJhc2VUOjE7CQkvLyBiaXQgNAorCQl1MTYgamFiYmVyXzEwYmFzZVQ6MTsJLy8gYml0IDUKKwkJdTE2IHJlczM6NTsJCS8vIGJpdCA2LTEwCisJCXUxNiBkb3duc2hpZnRfYXR0ZW1wdHM6MjsJLy8gYml0cyAxMS0xMgorCQl1MTYgcmVzMjoxOwkJLy8gYml0IDEzCisJCXUxNiB0ZHJfZW46MTsJCS8vIGJpdCAxNAorCQl1MTYgcmVzMToxOwkJLy8gYml0IDE1CisjZW5kaWYKKwl9IGJpdHM7Cit9IE1JX1BIWV9DT05UUk9MX3QsICpQTUlfUEhZX0NPTlRST0xfdDsKKworLyogTUkgUmVnaXN0ZXIgMjQ6IEludGVycnVwdCBNYXNrIFJlZygweDE4KSAqLwordHlwZWRlZiB1bmlvbiBfTUlfSU1SX3QgeworCXUxNiB2YWx1ZTsKKwlzdHJ1Y3QgeworI2lmZGVmIF9CSVRfRklFTERTX0hUT0wKKwkJdTE2IHJlczE6NjsJCS8vIGJpdHMgMTAtMTUKKwkJdTE2IG1kaW9fc3luY19sb3N0OjE7CS8vIGJpdCA5CisJCXUxNiBhdXRvbmVnX3N0YXR1czoxOwkvLyBiaXQgOAorCQl1MTYgaGlfYml0X2VycjoxOwkJLy8gYml0IDcKKwkJdTE2IG5wX3J4OjE7CQkvLyBiaXQgNgorCQl1MTYgZXJyX2NvdW50ZXJfZnVsbDoxOwkvLyBiaXQgNQorCQl1MTYgZmlmb19vdmVyX3VuZGVyZmxvdzoxOwkvLyBiaXQgNAorCQl1MTYgcnhfc3RhdHVzOjE7CQkvLyBiaXQgMworCQl1MTYgbGlua19zdGF0dXM6MTsJCS8vIGJpdCAyCisJCXUxNiBhdXRvbWF0aWNfc3BlZWQ6MTsJLy8gYml0IDEKKwkJdTE2IGludF9lbjoxOwkJLy8gYml0IDAKKyNlbHNlCisJCXUxNiBpbnRfZW46MTsJCS8vIGJpdCAwCisJCXUxNiBhdXRvbWF0aWNfc3BlZWQ6MTsJLy8gYml0IDEKKwkJdTE2IGxpbmtfc3RhdHVzOjE7CQkvLyBiaXQgMgorCQl1MTYgcnhfc3RhdHVzOjE7CQkvLyBiaXQgMworCQl1MTYgZmlmb19vdmVyX3VuZGVyZmxvdzoxOwkvLyBiaXQgNAorCQl1MTYgZXJyX2NvdW50ZXJfZnVsbDoxOwkvLyBiaXQgNQorCQl1MTYgbnBfcng6MTsJCS8vIGJpdCA2CisJCXUxNiBoaV9iaXRfZXJyOjE7CQkvLyBiaXQgNworCQl1MTYgYXV0b25lZ19zdGF0dXM6MTsJLy8gYml0IDgKKwkJdTE2IG1kaW9fc3luY19sb3N0OjE7CS8vIGJpdCA5CisJCXUxNiByZXMxOjY7CQkvLyBiaXRzIDEwLTE1CisjZW5kaWYKKwl9IGJpdHM7Cit9IE1JX0lNUl90LCAqUE1JX0lNUl90OworCisvKiBNSSBSZWdpc3RlciAyNTogSW50ZXJydXB0IFN0YXR1cyBSZWcoMHgxOSkgKi8KK3R5cGVkZWYgdW5pb24gX01JX0lTUl90IHsKKwl1MTYgdmFsdWU7CisJc3RydWN0IHsKKyNpZmRlZiBfQklUX0ZJRUxEU19IVE9MCisJCXUxNiByZXMxOjY7CQkvLyBiaXRzIDEwLTE1CisJCXUxNiBtZGlvX3N5bmNfbG9zdDoxOwkvLyBiaXQgOQorCQl1MTYgYXV0b25lZ19zdGF0dXM6MTsJLy8gYml0IDgKKwkJdTE2IGhpX2JpdF9lcnI6MTsJCS8vIGJpdCA3CisJCXUxNiBucF9yeDoxOwkJLy8gYml0IDYKKwkJdTE2IGVycl9jb3VudGVyX2Z1bGw6MTsJLy8gYml0IDUKKwkJdTE2IGZpZm9fb3Zlcl91bmRlcmZsb3c6MTsJLy8gYml0IDQKKwkJdTE2IHJ4X3N0YXR1czoxOwkJLy8gYml0IDMKKwkJdTE2IGxpbmtfc3RhdHVzOjE7CQkvLyBiaXQgMgorCQl1MTYgYXV0b21hdGljX3NwZWVkOjE7CS8vIGJpdCAxCisJCXUxNiBpbnRfZW46MTsJCS8vIGJpdCAwCisjZWxzZQorCQl1MTYgaW50X2VuOjE7CQkvLyBiaXQgMAorCQl1MTYgYXV0b21hdGljX3NwZWVkOjE7CS8vIGJpdCAxCisJCXUxNiBsaW5rX3N0YXR1czoxOwkJLy8gYml0IDIKKwkJdTE2IHJ4X3N0YXR1czoxOwkJLy8gYml0IDMKKwkJdTE2IGZpZm9fb3Zlcl91bmRlcmZsb3c6MTsJLy8gYml0IDQKKwkJdTE2IGVycl9jb3VudGVyX2Z1bGw6MTsJLy8gYml0IDUKKwkJdTE2IG5wX3J4OjE7CQkvLyBiaXQgNgorCQl1MTYgaGlfYml0X2VycjoxOwkJLy8gYml0IDcKKwkJdTE2IGF1dG9uZWdfc3RhdHVzOjE7CS8vIGJpdCA4CisJCXUxNiBtZGlvX3N5bmNfbG9zdDoxOwkvLyBiaXQgOQorCQl1MTYgcmVzMTo2OwkJLy8gYml0cyAxMC0xNQorI2VuZGlmCisJfSBiaXRzOworfSBNSV9JU1JfdCwgKlBNSV9JU1JfdDsKKworLyogTUkgUmVnaXN0ZXIgMjY6IFBIWSBTdGF0dXMgUmVnKDB4MUEpICovCit0eXBlZGVmIHVuaW9uIF9NSV9QU1JfdCB7CisJdTE2IHZhbHVlOworCXN0cnVjdCB7CisjaWZkZWYgX0JJVF9GSUVMRFNfSFRPTAorCQl1MTYgcmVzMToxOwkJLy8gYml0IDE1CisJCXUxNiBhdXRvbmVnX2ZhdWx0OjI7CS8vIGJpdCAxMy0xNAorCQl1MTYgYXV0b25lZ19zdGF0dXM6MTsJLy8gYml0IDEyCisJCXUxNiBtZGlfeF9zdGF0dXM6MTsJLy8gYml0IDExCisJCXUxNiBwb2xhcml0eV9zdGF0dXM6MTsJLy8gYml0IDEwCisJCXUxNiBzcGVlZF9zdGF0dXM6MjsJLy8gYml0cyA4LTkKKwkJdTE2IGR1cGxleF9zdGF0dXM6MTsJLy8gYml0IDcKKwkJdTE2IGxpbmtfc3RhdHVzOjE7CQkvLyBiaXQgNgorCQl1MTYgdHhfc3RhdHVzOjE7CQkvLyBiaXQgNQorCQl1MTYgcnhfc3RhdHVzOjE7CQkvLyBiaXQgNAorCQl1MTYgY29sbGlzaW9uX3N0YXR1czoxOwkvLyBiaXQgMworCQl1MTYgYXV0b25lZ19lbjoxOwkJLy8gYml0IDIKKwkJdTE2IHBhdXNlX2VuOjE7CQkvLyBiaXQgMQorCQl1MTYgYXN5bW1ldHJpY19kaXI6MTsJLy8gYml0IDAKKyNlbHNlCisJCXUxNiBhc3ltbWV0cmljX2RpcjoxOwkvLyBiaXQgMAorCQl1MTYgcGF1c2VfZW46MTsJCS8vIGJpdCAxCisJCXUxNiBhdXRvbmVnX2VuOjE7CQkvLyBiaXQgMgorCQl1MTYgY29sbGlzaW9uX3N0YXR1czoxOwkvLyBiaXQgMworCQl1MTYgcnhfc3RhdHVzOjE7CQkvLyBiaXQgNAorCQl1MTYgdHhfc3RhdHVzOjE7CQkvLyBiaXQgNQorCQl1MTYgbGlua19zdGF0dXM6MTsJCS8vIGJpdCA2CisJCXUxNiBkdXBsZXhfc3RhdHVzOjE7CS8vIGJpdCA3CisJCXUxNiBzcGVlZF9zdGF0dXM6MjsJLy8gYml0cyA4LTkKKwkJdTE2IHBvbGFyaXR5X3N0YXR1czoxOwkvLyBiaXQgMTAKKwkJdTE2IG1kaV94X3N0YXR1czoxOwkvLyBiaXQgMTEKKwkJdTE2IGF1dG9uZWdfc3RhdHVzOjE7CS8vIGJpdCAxMgorCQl1MTYgYXV0b25lZ19mYXVsdDoyOwkvLyBiaXQgMTMtMTQKKwkJdTE2IHJlczE6MTsJCS8vIGJpdCAxNQorI2VuZGlmCisJfSBiaXRzOworfSBNSV9QU1JfdCwgKlBNSV9QU1JfdDsKKworLyogTUkgUmVnaXN0ZXIgMjc6IExFRCBDb250cm9sIFJlZyAxKDB4MUIpICovCit0eXBlZGVmIHVuaW9uIF9NSV9MQ1IxX3QgeworCXUxNiB2YWx1ZTsKKwlzdHJ1Y3QgeworI2lmZGVmIF9CSVRfRklFTERTX0hUT0wKKwkJdTE2IHJlczE6MjsJCS8vIGJpdHMgMTQtMTUKKwkJdTE2IGxlZF9kdXBfaW5kaWNhdGU6MjsJLy8gYml0cyAxMi0xMworCQl1MTYgbGVkXzEwYmFzZVQ6MjsJCS8vIGJpdHMgMTAtMTEKKwkJdTE2IGxlZF9jb2xsaXNpb246MjsJLy8gYml0cyA4LTkKKwkJdTE2IHJlczI6MjsJCS8vIGJpdHMgNi03CisJCXUxNiByZXMzOjI7CQkvLyBiaXRzIDQtNQorCQl1MTYgcHVsc2VfZHVyOjI7CQkvLyBiaXRzIDItMworCQl1MTYgcHVsc2Vfc3RyZXRjaDE6MTsJLy8gYml0IDEKKwkJdTE2IHB1bHNlX3N0cmV0Y2gwOjE7CS8vIGJpdCAwCisjZWxzZQorCQl1MTYgcHVsc2Vfc3RyZXRjaDA6MTsJLy8gYml0IDAKKwkJdTE2IHB1bHNlX3N0cmV0Y2gxOjE7CS8vIGJpdCAxCisJCXUxNiBwdWxzZV9kdXI6MjsJCS8vIGJpdHMgMi0zCisJCXUxNiByZXMzOjI7CQkvLyBiaXRzIDQtNQorCQl1MTYgcmVzMjoyOwkJLy8gYml0cyA2LTcKKwkJdTE2IGxlZF9jb2xsaXNpb246MjsJLy8gYml0cyA4LTkKKwkJdTE2IGxlZF8xMGJhc2VUOjI7CQkvLyBiaXRzIDEwLTExCisJCXUxNiBsZWRfZHVwX2luZGljYXRlOjI7CS8vIGJpdHMgMTItMTMKKwkJdTE2IHJlczE6MjsJCS8vIGJpdHMgMTQtMTUKKyNlbmRpZgorCX0gYml0czsKK30gTUlfTENSMV90LCAqUE1JX0xDUjFfdDsKKworLyogTUkgUmVnaXN0ZXIgMjg6IExFRCBDb250cm9sIFJlZyAyKDB4MUMpICovCit0eXBlZGVmIHVuaW9uIF9NSV9MQ1IyX3QgeworCXUxNiB2YWx1ZTsKKwlzdHJ1Y3QgeworI2lmZGVmIF9CSVRfRklFTERTX0hUT0wKKwkJdTE2IGxlZF9saW5rOjQ7CQkvLyBiaXRzIDEyLTE1CisJCXUxNiBsZWRfdHhfcng6NDsJCS8vIGJpdHMgOC0xMQorCQl1MTYgbGVkXzEwMEJhc2VUWDo0OwkvLyBiaXRzIDQtNworCQl1MTYgbGVkXzEwMDBCYXNlVDo0OwkvLyBiaXRzIDAtMworI2Vsc2UKKwkJdTE2IGxlZF8xMDAwQmFzZVQ6NDsJLy8gYml0cyAwLTMKKwkJdTE2IGxlZF8xMDBCYXNlVFg6NDsJLy8gYml0cyA0LTcKKwkJdTE2IGxlZF90eF9yeDo0OwkJLy8gYml0cyA4LTExCisJCXUxNiBsZWRfbGluazo0OwkJLy8gYml0cyAxMi0xNQorI2VuZGlmCisJfSBiaXRzOworfSBNSV9MQ1IyX3QsICpQTUlfTENSMl90OworCisvKiBNSSBSZWdpc3RlciAyOSAtIDMxOiBSZXNlcnZlZCBSZWcoMHgxRCAtIDB4MUUpICovCisKKy8qIFRydWVQSFkgaGVhZGVycyAqLwordHlwZWRlZiBzdHJ1Y3QgX1RSVUVQSFlfQUNDRVNTX01JX1JFR1NfIHsKKwlUUlVFUEhZX0hBTkRMRSBoVHJ1ZVBoeTsKKwlpbnQzMl90IG5QaHlJZDsKKwl1OCBiUmVhZFdyaXRlOworCXU4ICpwYnlSZWdzOworCXU4ICpwd0RhdGE7CisJaW50MzJfdCBuUmVnQ291bnQ7Cit9IFRSVUVQSFlfQUNDRVNTX01JX1JFR1MsICpQVFJVRVBIWV9BQ0NFU1NfTUlfUkVHUzsKKworLyogVHJ1ZVBIWSBoZWFkZXJzICovCit0eXBlZGVmIHN0cnVjdCBfVEFHX1RQQUxfQUNDRVNTX01JX1JFR1NfIHsKKwl1MzIgblBoeUlkOworCXU4IGJSZWFkV3JpdGU7CisJdTMyIG5SZWdDb3VudDsKKwl1MTYgRGF0YVs0MDk2XTsKKwl1OCBSZWdzWzQwOTZdOworfSBUUEFMX0FDQ0VTU19NSV9SRUdTLCAqUFRQQUxfQUNDRVNTX01JX1JFR1M7CisKKwordHlwZWRlZiBUUlVFUEhZX0hBTkRMRSBUUEFMX0hBTkRMRTsKKworLyogRm9yd2FyZCBkZWNsYXJhdGlvbiBvZiB0aGUgcHJpdmF0ZSBhZGFwdGVyIHN0cnVjdHVyZSAqLworc3RydWN0IGV0MTMxeF9hZGFwdGVyOworCisvKiBPUyBTcGVjaWZpYyBGdW5jdGlvbnMqLwordm9pZCBUUEFMX1NldFBoeTEwSGFsZkR1cGxleChzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKmFkYXB0ZXIpOwordm9pZCBUUEFMX1NldFBoeTEwRnVsbER1cGxleChzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKmFkYXB0ZXIpOwordm9pZCBUUEFMX1NldFBoeTEwRm9yY2Uoc3RydWN0IGV0MTMxeF9hZGFwdGVyICpwQWRhcHRlcik7Cit2b2lkIFRQQUxfU2V0UGh5MTAwSGFsZkR1cGxleChzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKmFkYXB0ZXIpOwordm9pZCBUUEFMX1NldFBoeTEwMEZ1bGxEdXBsZXgoc3RydWN0IGV0MTMxeF9hZGFwdGVyICphZGFwdGVyKTsKK3ZvaWQgVFBBTF9TZXRQaHkxMDBGb3JjZShzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKnBBZGFwdGVyKTsKK3ZvaWQgVFBBTF9TZXRQaHkxMDAwRnVsbER1cGxleChzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKmFkYXB0ZXIpOwordm9pZCBUUEFMX1NldFBoeUF1dG9OZWcoc3RydWN0IGV0MTMxeF9hZGFwdGVyICphZGFwdGVyKTsKKworLyogUHJvdG90eXBlcyBmb3IgRVQxMzEwX3BoeS5jICovCitpbnQgZXQxMzF4X3hjdnJfZmluZChzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKmFkYXB0ZXIpOworaW50IGV0MTMxeF9zZXRwaHlfbm9ybWFsKHN0cnVjdCBldDEzMXhfYWRhcHRlciAqYWRhcHRlcik7CitpbnQzMl90IFBoeU1pUmVhZChzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKmFkYXB0ZXIsCisJICAgICAgIHU4IHhjdnJBZGRyLCB1OCB4Y3ZyUmVnLCB1MTYgKnZhbHVlKTsKKworLyogc3RhdGljIGlubGluZSBmdW5jdGlvbiBkb2VzIG5vdCB3b3JrIGJlY2F1c2UgZXQxMzF4X2FkYXB0ZXIgaXMgbm90IGFsd2F5cworICogZGVmaW5lZAorICovCisjZGVmaW5lIE1pUmVhZChhZGFwdGVyLCB4Y3ZyUmVnLCB2YWx1ZSkgXAorCVBoeU1pUmVhZCgoYWRhcHRlciksIChhZGFwdGVyKS0+U3RhdHMueGN2cl9hZGRyLCAoeGN2clJlZyksICh2YWx1ZSkpCisKK2ludDMyX3QgTWlXcml0ZShzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKmFkYXB0ZXIsCisJCXU4IHhjdlJlZywgdTE2IHZhbHVlKTsKK3ZvaWQgZXQxMzF4X01paV9jaGVjayhzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKnBBZGFwdGVyLAorCQkgICAgICBNSV9CTVNSX3QgYm1zciwgTUlfQk1TUl90IGJtc3JfaW50cyk7CisKKy8qIFRoaXMgbGFzdCBpcyBub3Qgc3RyaWN0bHkgcmVxdWlyZWQgKHRoZSBkcml2ZXIgY291bGQgY2FsbCB0aGUgVFBBTAorICogdmVyc2lvbiBpbnN0ZWFkKSwgYnV0IHRoaXMgc2V0cyB0aGUgYWRhcHRlciB1cCBjb3JyZWN0bHksIGFuZCBjYWxscyB0aGUKKyAqIGFjY2VzcyByb3V0aW5lIGluZGlyZWN0bHkuICBUaGlzIHByb3RlY3RzIHRoZSBkcml2ZXIgZnJvbSBjaGFuZ2VzIGluIFRQQUwuCisgKi8KK3ZvaWQgU2V0UGh5XzEwQmFzZVRIYWxmRHVwbGV4KHN0cnVjdCBldDEzMXhfYWRhcHRlciAqYWRhcHRlcik7CisKKy8qIERlZmluZXMgZm9yIFBIWSBhY2Nlc3Mgcm91dGluZXMgKi8KKworLy8gRGVmaW5lIGJpdCBvcGVyYXRpb24gZmxhZ3MKKyNkZWZpbmUgVFJVRVBIWV9CSVRfQ0xFQVIgICAgICAgICAgICAgICAwCisjZGVmaW5lIFRSVUVQSFlfQklUX1NFVCAgICAgICAgICAgICAgICAgMQorI2RlZmluZSBUUlVFUEhZX0JJVF9SRUFEICAgICAgICAgICAgICAgIDIKKworLy8gRGVmaW5lIHJlYWQvd3JpdGUgb3BlcmF0aW9uIGZsYWdzCisjaWZuZGVmIFRSVUVQSFlfUkVBRAorI2RlZmluZSBUUlVFUEhZX1JFQUQgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgVFJVRVBIWV9XUklURSAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIFRSVUVQSFlfTUFTSyAgICAgICAgICAgICAgICAgICAgMgorI2VuZGlmCisKKy8vIERlZmluZSBzcGVlZHMKKyNkZWZpbmUgVFJVRVBIWV9TUEVFRF8xME1CUFMgICAgICAgICAgICAwCisjZGVmaW5lIFRSVUVQSFlfU1BFRURfMTAwTUJQUyAgICAgICAgICAgMQorI2RlZmluZSBUUlVFUEhZX1NQRUVEXzEwMDBNQlBTICAgICAgICAgIDIKKworLy8gRGVmaW5lIGR1cGxleCBtb2RlcworI2RlZmluZSBUUlVFUEhZX0RVUExFWF9IQUxGICAgICAgICAgICAgIDAKKyNkZWZpbmUgVFJVRVBIWV9EVVBMRVhfRlVMTCAgICAgICAgICAgICAxCisKKy8vIERlZmluZSBtYXN0ZXIvc2xhdmUgY29uZmlndXJhdGlvbiB2YWx1ZXMKKyNkZWZpbmUgVFJVRVBIWV9DRkdfU0xBVkUgICAgICAgICAgICAgICAwCisjZGVmaW5lIFRSVUVQSFlfQ0ZHX01BU1RFUiAgICAgICAgICAgICAgMQorCisvLyBEZWZpbmUgTURJL01ESS1YIHNldHRpbmdzCisjZGVmaW5lIFRSVUVQSFlfTURJICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBUUlVFUEhZX01ESVggICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgVFJVRVBIWV9BVVRPX01ESV9NRElYICAgICAgICAgICAyCisKKy8vIERlZmluZSAxMEJhc2UtVCBsaW5rIHBvbGFyaXRpZXMKKyNkZWZpbmUgVFJVRVBIWV9QT0xBUklUWV9OT1JNQUwgICAgICAgICAwCisjZGVmaW5lIFRSVUVQSFlfUE9MQVJJVFlfSU5WRVJURUQgICAgICAgMQorCisvLyBEZWZpbmUgYXV0by1uZWdvdGlhdGlvbiByZXN1bHRzCisjZGVmaW5lIFRSVUVQSFlfQU5FR19OT1RfQ09NUExFVEUgICAgICAgMAorI2RlZmluZSBUUlVFUEhZX0FORUdfQ09NUExFVEUgICAgICAgICAgIDEKKyNkZWZpbmUgVFJVRVBIWV9BTkVHX0RJU0FCTEVEICAgICAgICAgICAyCisKKy8qIERlZmluZSBkdXBsZXggYWR2ZXJ0aXNtZW50IGZsYWdzICovCisjZGVmaW5lIFRSVUVQSFlfQURWX0RVUExFWF9OT05FICAgICAgICAgMHgwMAorI2RlZmluZSBUUlVFUEhZX0FEVl9EVVBMRVhfRlVMTCAgICAgICAgIDB4MDEKKyNkZWZpbmUgVFJVRVBIWV9BRFZfRFVQTEVYX0hBTEYgICAgICAgICAweDAyCisjZGVmaW5lIFRSVUVQSFlfQURWX0RVUExFWF9CT1RIICAgICBcCisgICAgKFRSVUVQSFlfQURWX0RVUExFWF9GVUxMIHwgVFJVRVBIWV9BRFZfRFVQTEVYX0hBTEYpCisKKyNkZWZpbmUgUEhZX0NPTlRST0wgICAgICAgICAgICAgICAgMHgwMAkvLyNkZWZpbmUgVFJVX01JX0NPTlRST0xfUkVHSVNURVIgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgUEhZX1NUQVRVUyAgICAgICAgICAgICAgICAgMHgwMQkvLyNkZWZpbmUgVFJVX01JX1NUQVRVU19SRUdJU1RFUiAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgUEhZX0lEXzEgICAgICAgICAgICAgICAgICAgMHgwMgkvLyNkZWZpbmUgVFJVX01JX1BIWV9JREVOVElGSUVSXzFfUkVHSVNURVIgICAgICAgIDIKKyNkZWZpbmUgUEhZX0lEXzIgICAgICAgICAgICAgICAgICAgMHgwMwkvLyNkZWZpbmUgVFJVX01JX1BIWV9JREVOVElGSUVSXzJfUkVHSVNURVIgICAgICAgIDMKKyNkZWZpbmUgUEhZX0FVVE9fQURWRVJUSVNFTUVOVCAgICAgMHgwNAkvLyNkZWZpbmUgVFJVX01JX0FEVkVSVElTRU1FTlRfUkVHSVNURVIgICAgICAgICAgIDQKKyNkZWZpbmUgUEhZX0FVVE9fTElOS19QQVJUTkVSICAgICAgMHgwNQkvLyNkZWZpbmUgVFJVX01JX0xJTktfUEFSVE5FUl9BQklMSVRZX1JFR0lTVEVSICAgIDUKKyNkZWZpbmUgUEhZX0FVVE9fRVhQQU5TSU9OICAgICAgICAgMHgwNgkvLyNkZWZpbmUgVFJVX01JX0VYUEFOU0lPTl9SRUdJU1RFUiAgICAgICAgICAgICAgIDYKKyNkZWZpbmUgUEhZX0FVVE9fTkVYVF9QQUdFX1RYICAgICAgMHgwNwkvLyNkZWZpbmUgVFJVX01JX05FWFRfUEFHRV9UUkFOU01JVF9SRUdJU1RFUiAgICAgIDcKKyNkZWZpbmUgUEhZX0xJTktfUEFSVE5FUl9ORVhUX1BBR0UgMHgwOAkvLyNkZWZpbmUgVFJVX01JX0xJTktfUEFSVE5FUl9ORVhUX1BBR0VfUkVHSVNURVIgIDgKKyNkZWZpbmUgUEhZXzEwMDBfQ09OVFJPTCAgICAgICAgICAgMHgwOQkvLyNkZWZpbmUgVFJVX01JXzEwMDBCQVNFVF9DT05UUk9MX1JFR0lTVEVSICAgICAgIDkKKyNkZWZpbmUgUEhZXzEwMDBfU1RBVFVTICAgICAgICAgICAgMHgwQQkvLyNkZWZpbmUgVFJVX01JXzEwMDBCQVNFVF9TVEFUVVNfUkVHSVNURVIgICAgICAgIDEwCisKKyNkZWZpbmUgUEhZX0VYVEVOREVEX1NUQVRVUyAgICAgICAgMHgwRgkvLyNkZWZpbmUgVFJVX01JX0VYVEVOREVEX1NUQVRVU19SRUdJU1RFUiAgICAgICAgIDE1CisKKy8vIHNvbWUgZGVmaW5lcyBmb3IgbW9kZW0gcmVnaXN0ZXJzIHRoYXQgc2VlbSB0byBiZSAncmVzZXJ2ZWQnCisjZGVmaW5lIFBIWV9JTkRFWF9SRUcgICAgICAgICAgICAgIDB4MTAKKyNkZWZpbmUgUEhZX0RBVEFfUkVHICAgICAgICAgICAgICAgMHgxMQorCisjZGVmaW5lIFBIWV9NUEhZX0NPTlRST0xfUkVHICAgICAgIDB4MTIJLy8jZGVmaW5lIFRSVV9WTUlfTVBIWV9DT05UUk9MX1JFR0lTVEVSICAgICAgICAgICAxOAorCisjZGVmaW5lIFBIWV9MT09QQkFDS19DT05UUk9MICAgICAgIDB4MTMJLy8jZGVmaW5lIFRSVV9WTUlfTE9PUEJBQ0tfQ09OVFJPTF8xX1JFR0lTVEVSICAgICAxOQorCQkJCQkvLyNkZWZpbmUgVFJVX1ZNSV9MT09QQkFDS19DT05UUk9MXzJfUkVHSVNURVIgICAgIDIwCisjZGVmaW5lIFBIWV9SRUdJU1RFUl9NR01UX0NPTlRST0wgIDB4MTUJLy8jZGVmaW5lIFRSVV9WTUlfTUlfU0VRX0NPTlRST0xfUkVHSVNURVIgICAgICAgICAyMQorI2RlZmluZSBQSFlfQ09ORklHICAgICAgICAgICAgICAgICAweDE2CS8vI2RlZmluZSBUUlVfVk1JX0NPTkZJR1VSQVRJT05fUkVHSVNURVIgICAgICAgICAgMjIKKyNkZWZpbmUgUEhZX1BIWV9DT05UUk9MICAgICAgICAgICAgMHgxNwkvLyNkZWZpbmUgVFJVX1ZNSV9QSFlfQ09OVFJPTF9SRUdJU1RFUiAgICAgICAgICAgIDIzCisjZGVmaW5lIFBIWV9JTlRFUlJVUFRfTUFTSyAgICAgICAgIDB4MTgJLy8jZGVmaW5lIFRSVV9WTUlfSU5URVJSVVBUX01BU0tfUkVHSVNURVIgICAgICAgICAyNAorI2RlZmluZSBQSFlfSU5URVJSVVBUX1NUQVRVUyAgICAgICAweDE5CS8vI2RlZmluZSBUUlVfVk1JX0lOVEVSUlVQVF9TVEFUVVNfUkVHSVNURVIgICAgICAgMjUKKyNkZWZpbmUgUEhZX1BIWV9TVEFUVVMgICAgICAgICAgICAgMHgxQQkvLyNkZWZpbmUgVFJVX1ZNSV9QSFlfU1RBVFVTX1JFR0lTVEVSICAgICAgICAgICAgIDI2CisjZGVmaW5lIFBIWV9MRURfMSAgICAgICAgICAgICAgICAgIDB4MUIJLy8jZGVmaW5lIFRSVV9WTUlfTEVEX0NPTlRST0xfMV9SRUdJU1RFUiAgICAgICAgICAyNworI2RlZmluZSBQSFlfTEVEXzIgICAgICAgICAgICAgICAgICAweDFDCS8vI2RlZmluZSBUUlVfVk1JX0xFRF9DT05UUk9MXzJfUkVHSVNURVIgICAgICAgICAgMjgKKwkJCQkJLy8jZGVmaW5lIFRSVV9WTUlfTElOS19DT05UUk9MX1JFR0lTVEVSICAgICAgICAgICAyOQorCQkJCQkvLyNkZWZpbmUgVFJVX1ZNSV9USU1JTkdfQ09OVFJPTF9SRUdJU1RFUgorCisvKiBQcm90b3R5cGVzIGZvciBQSFkgYWNjZXNzIHJvdXRpbmVzICovCit2b2lkIEVUMTMxMF9QaHlJbml0KHN0cnVjdCBldDEzMXhfYWRhcHRlciAqYWRhcHRlcik7Cit2b2lkIEVUMTMxMF9QaHlSZXNldChzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKmFkYXB0ZXIpOwordm9pZCBFVDEzMTBfUGh5UG93ZXJEb3duKHN0cnVjdCBldDEzMXhfYWRhcHRlciAqYWRhcHRlciwgYm9vbCBkb3duKTsKK3ZvaWQgRVQxMzEwX1BoeUF1dG9OZWcoc3RydWN0IGV0MTMxeF9hZGFwdGVyICphZGFwdGVyLCBib29sIGVuYWJsZSk7Cit2b2lkIEVUMTMxMF9QaHlEdXBsZXhNb2RlKHN0cnVjdCBldDEzMXhfYWRhcHRlciAqYWRhcHRlciwgdTE2IGR1cGxleCk7Cit2b2lkIEVUMTMxMF9QaHlTcGVlZFNlbGVjdChzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKmFkYXB0ZXIsIHUxNiBzcGVlZCk7Cit2b2lkIEVUMTMxMF9QaHlBZHZlcnRpc2UxMDAwQmFzZVQoc3RydWN0IGV0MTMxeF9hZGFwdGVyICphZGFwdGVyLAorCQkJCSAgdTE2IGR1cGxleCk7Cit2b2lkIEVUMTMxMF9QaHlBZHZlcnRpc2UxMDBCYXNlVChzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKmFkYXB0ZXIsCisJCQkJIHUxNiBkdXBsZXgpOwordm9pZCBFVDEzMTBfUGh5QWR2ZXJ0aXNlMTBCYXNlVChzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKmFkYXB0ZXIsCisJCQkJdTE2IGR1cGxleCk7Cit2b2lkIEVUMTMxMF9QaHlMaW5rU3RhdHVzKHN0cnVjdCBldDEzMXhfYWRhcHRlciAqYWRhcHRlciwKKwkJCSAgdTggKnVjTGlua1N0YXR1cywKKwkJCSAgdTMyICp1aUF1dG9OZWcsCisJCQkgIHUzMiAqdWlMaW5rU3BlZWQsCisJCQkgIHUzMiAqdWlEdXBsZXhNb2RlLAorCQkJICB1MzIgKnVpTWRpTWRpeCwKKwkJCSAgdTMyICp1aU1hc3RlclNsYXZlLCB1MzIgKnVpUG9sYXJpdHkpOwordm9pZCBFVDEzMTBfUGh5QW5kT3JSZWcoc3RydWN0IGV0MTMxeF9hZGFwdGVyICphZGFwdGVyLAorCQkJdTE2IHJlZ251bSwgdTE2IGFuZE1hc2ssIHUxNiBvck1hc2spOwordm9pZCBFVDEzMTBfUGh5QWNjZXNzTWlCaXQoc3RydWN0IGV0MTMxeF9hZGFwdGVyICphZGFwdGVyLAorCQkJICAgdTE2IGFjdGlvbiwKKwkJCSAgIHUxNiByZWdudW0sIHUxNiBiaXRudW0sIHU4ICp2YWx1ZSk7CisKKyNlbmRpZiAvKiBfRVQxMzEwX1BIWV9IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2V0MTMxeC9ldDEzMTBfcG0uYyBiL2RyaXZlcnMvc3RhZ2luZy9ldDEzMXgvZXQxMzEwX3BtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTUzOWJjNgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ldDEzMXgvZXQxMzEwX3BtLmMKQEAgLTAsMCArMSwyMDcgQEAKKy8qCisgKiBBZ2VyZSBTeXN0ZW1zIEluYy4KKyAqIDEwLzEwMC8xMDAwIEJhc2UtVCBFdGhlcm5ldCBEcml2ZXIgZm9yIHRoZSBFVDEzMDEgYW5kIEVUMTMxeCBzZXJpZXMgTUFDcworICoKKyAqIENvcHlyaWdodCCpIDIwMDUgQWdlcmUgU3lzdGVtcyBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogICBodHRwOi8vd3d3LmFnZXJlLmNvbQorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogZXQxMzEwX3BtLmMgLSBBbGwgcG93ZXIgbWFuYWdlbWVudCByZWxhdGVkIGNvZGUgKG5vdCBjb21wbGV0ZWx5IGltcGxlbWVudGVkKQorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogU09GVFdBUkUgTElDRU5TRQorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgcHJvdmlkZWQgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIHRlcm1zIGFuZCBjb25kaXRpb25zLAorICogd2hpY2ggeW91IHNob3VsZCByZWFkIGNhcmVmdWxseSBiZWZvcmUgdXNpbmcgdGhlIHNvZnR3YXJlLiAgVXNpbmcgdGhpcworICogc29mdHdhcmUgaW5kaWNhdGVzIHlvdXIgYWNjZXB0YW5jZSBvZiB0aGVzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucy4gIElmIHlvdSBkbworICogbm90IGFncmVlIHdpdGggdGhlc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMsIGRvIG5vdCB1c2UgdGhlIHNvZnR3YXJlLgorICoKKyAqIENvcHlyaWdodCCpIDIwMDUgQWdlcmUgU3lzdGVtcyBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIG9yIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb25zLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMKKyAqICAgIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBEaXNjbGFpbWVyIGFzIGNvbW1lbnRzIGluIHRoZSBjb2RlIGFzCisgKiAgICB3ZWxsIGFzIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiAuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAqICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIERpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyAqICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIC4gTmVpdGhlciB0aGUgbmFtZSBvZiBBZ2VyZSBTeXN0ZW1zIEluYy4gbm9yIHRoZSBuYW1lcyBvZiB0aGUgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIERpc2NsYWltZXIKKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIJNBUyBJU5QgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywKKyAqIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBJTkZSSU5HRU1FTlQgQU5EIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBBTlkKKyAqIFVTRSwgTU9ESUZJQ0FUSU9OIE9SIERJU1RSSUJVVElPTiBPRiBUSElTIFNPRlRXQVJFIElTIFNPTEVMWSBBVCBUSEUgVVNFUlMgT1dOCisgKiBSSVNLLiBJTiBOTyBFVkVOVCBTSEFMTCBBR0VSRSBTWVNURU1TIElOQy4gT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSAorICogREFNQUdFLgorICoKKyAqLworCisjaW5jbHVkZSAiZXQxMzF4X3ZlcnNpb24uaCIKKyNpbmNsdWRlICJldDEzMXhfZGVidWcuaCIKKyNpbmNsdWRlICJldDEzMXhfZGVmcy5oIgorCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisKKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L3B0cmFjZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9jdHlwZS5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvaW4uaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KKyNpbmNsdWRlIDxhc20vYml0b3BzLmg+CisKKyNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgorI2luY2x1ZGUgPGxpbnV4L2lmX2FycC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgorCisjaW5jbHVkZSAiZXQxMzEwX3BoeS5oIgorI2luY2x1ZGUgImV0MTMxMF9wbS5oIgorI2luY2x1ZGUgImV0MTMxMF9qYWdjb3JlLmgiCisjaW5jbHVkZSAiZXQxMzEwX21hYy5oIgorI2luY2x1ZGUgImV0MTMxMF9yeC5oIgorCisjaW5jbHVkZSAiZXQxMzF4X2FkYXB0ZXIuaCIKKyNpbmNsdWRlICJldDEzMXhfaW5pdHBjaS5oIgorCisvKiBEYXRhIGZvciBkZWJ1Z2dpbmcgZmFjaWxpdGllcyAqLworI2lmZGVmIENPTkZJR19FVDEzMVhfREVCVUcKK2V4dGVybiBkYmdfaW5mb190ICpldDEzMXhfZGJnaW5mbzsKKyNlbmRpZiAvKiBDT05GSUdfRVQxMzFYX0RFQlVHICovCisKKy8qKgorICogRW5hYmxlUGh5Q29tYSAtIGNhbGxlZCB3aGVuIG5ldHdvcmsgY2FibGUgaXMgdW5wbHVnZ2VkCisgKiBAcEFkYXB0ZXI6IHBvaW50ZXIgdG8gb3VyIGFkYXB0ZXIgc3RydWN0dXJlCisgKgorICogZHJpdmVyIHJlY2VpdmUgYW4gcGh5IHN0YXR1cyBjaGFuZ2UgaW50ZXJydXB0IHdoaWxlIGluIEQwIGFuZCBjaGVjayB0aGF0CisgKiBwaHlfc3RhdHVzIGlzIGRvd24uCisgKgorICogICAgICAgICAgLS0gZ2F0ZSBvZmYgSkFHQ29yZTsKKyAqICAgICAgICAgIC0tIHNldCBnaWdFIFBIWSBpbiBDb21hIG1vZGUKKyAqICAgICAgICAgIC0tIHdha2Ugb24gcGh5X2ludGVycnVwdDsgUGVyZm9ybSBzb2Z0d2FyZSByZXNldCBKQUdDb3JlLAorICogICAgICAgICAgICAgcmUtaW5pdGlhbGl6ZSBqYWdjb3JlIGFuZCBnaWdFIFBIWQorICoKKyAqICAgICAgQWRkIEQwLUFTUE0tUGh5TGlua0Rvd24gU3VwcG9ydDoKKyAqICAgICAgICAgIC0tIHdoaWxlIGluIEQwLCB3aGVuIHRoZXJlIGlzIGEgcGh5X2ludGVycnVwdCBpbmRpY2F0aW5nIHBoeSBsaW5rCisgKiAgICAgICAgICAgICBkb3duIHN0YXR1cywgY2FsbCB0aGUgTVBTZXRQaHlDb21hIHJvdXRpbmUgdG8gZW50ZXIgdGhpcyBhY3RpdmUKKyAqICAgICAgICAgICAgIHN0YXRlIHBvd2VyIHNhdmluZyBtb2RlCisgKiAgICAgICAgICAtLSB3aGlsZSBpbiBEMC1BU1BNLVBoeUxpbmtEb3duIG1vZGUsIHdoZW4gdGhlcmUgaXMgYSBwaHlfaW50ZXJydXB0CisgKiAgICAgICBpbmRpY2F0aW5nIGxpbmt1cCBzdGF0dXMsIGNhbGwgdGhlIE1QRGlzYWJsZVBoeUNvbWEgcm91dGluZSB0bworICogICAgICAgICAgICAgcmVzdG9yZSBKQUdDb3JlIGFuZCBnaWdFIFBIWQorICovCit2b2lkIEVuYWJsZVBoeUNvbWEoc3RydWN0IGV0MTMxeF9hZGFwdGVyICpwQWRhcHRlcikKK3sKKwl1bnNpZ25lZCBsb25nIGxvY2tmbGFnczsKKwlQTV9DU1JfdCBHbG9iYWxQbUNTUjsKKwlpbnQzMl90IExvb3BDb3VudGVyID0gMTA7CisKKwlEQkdfRU5URVIoZXQxMzF4X2RiZ2luZm8pOworCisJR2xvYmFsUG1DU1IudmFsdWUgPSByZWFkbCgmcEFkYXB0ZXItPkNTUkFkZHJlc3MtPmdsb2JhbC5wbV9jc3IudmFsdWUpOworCisJLyogU2F2ZSB0aGUgR2JFIFBIWSBzcGVlZCBhbmQgZHVwbGV4IG1vZGVzLiBOZWVkIHRvIHJlc3RvcmUgdGhpcworCSAqIHdoZW4gY2FibGUgaXMgcGx1Z2dlZCBiYWNrIGluCisJICovCisJcEFkYXB0ZXItPlBvTWdtdC5Qb3dlckRvd25TcGVlZCA9IHBBZGFwdGVyLT5BaUZvcmNlU3BlZWQ7CisJcEFkYXB0ZXItPlBvTWdtdC5Qb3dlckRvd25EdXBsZXggPSBwQWRhcHRlci0+QWlGb3JjZURweDsKKworCS8qIFN0b3Agc2VuZGluZyBwYWNrZXRzLiAqLworCXNwaW5fbG9ja19pcnFzYXZlKCZwQWRhcHRlci0+U2VuZEhXTG9jaywgbG9ja2ZsYWdzKTsKKwlNUF9TRVRfRkxBRyhwQWRhcHRlciwgZk1QX0FEQVBURVJfTE9XRVJfUE9XRVIpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBBZGFwdGVyLT5TZW5kSFdMb2NrLCBsb2NrZmxhZ3MpOworCisJLyogV2FpdCBmb3Igb3V0c3RhbmRpbmcgUmVjZWl2ZSBwYWNrZXRzICovCisJd2hpbGUgKChNUF9HRVRfUkNWX1JFRihwQWRhcHRlcikgIT0gMCkgJiYgKExvb3BDb3VudGVyLS0gPiAwKSkgeworCQltZGVsYXkoMik7CisJfQorCisJLyogR2F0ZSBvZmYgSkFHQ29yZSAzIGNsb2NrIGRvbWFpbnMgKi8KKwlHbG9iYWxQbUNTUi5iaXRzLnBtX3N5c2Nsa19nYXRlID0gMDsKKwlHbG9iYWxQbUNTUi5iaXRzLnBtX3R4Y2xrX2dhdGUgPSAwOworCUdsb2JhbFBtQ1NSLmJpdHMucG1fcnhjbGtfZ2F0ZSA9IDA7CisJd3JpdGVsKEdsb2JhbFBtQ1NSLnZhbHVlLCAmcEFkYXB0ZXItPkNTUkFkZHJlc3MtPmdsb2JhbC5wbV9jc3IudmFsdWUpOworCisJLyogUHJvZ3JhbSBnaWdFIFBIWSBpbiB0byBDb21hIG1vZGUgKi8KKwlHbG9iYWxQbUNTUi5iaXRzLnBtX3BoeV9zd19jb21hID0gMTsKKwl3cml0ZWwoR2xvYmFsUG1DU1IudmFsdWUsICZwQWRhcHRlci0+Q1NSQWRkcmVzcy0+Z2xvYmFsLnBtX2Nzci52YWx1ZSk7CisKKwlEQkdfTEVBVkUoZXQxMzF4X2RiZ2luZm8pOworfQorCisvKioKKyAqIERpc2FibGVQaHlDb21hIC0gRGlzYWJsZSB0aGUgUGh5IENvbWEgTW9kZQorICogQHBBZGFwdGVyOiBwb2ludGVyIHRvIG91ciBhZGFwdGVyIHN0cnVjdHVyZQorICovCit2b2lkIERpc2FibGVQaHlDb21hKHN0cnVjdCBldDEzMXhfYWRhcHRlciAqcEFkYXB0ZXIpCit7CisJUE1fQ1NSX3QgR2xvYmFsUG1DU1I7CisKKwlEQkdfRU5URVIoZXQxMzF4X2RiZ2luZm8pOworCisJR2xvYmFsUG1DU1IudmFsdWUgPSByZWFkbCgmcEFkYXB0ZXItPkNTUkFkZHJlc3MtPmdsb2JhbC5wbV9jc3IudmFsdWUpOworCisJLyogRGlzYWJsZSBwaHlfc3dfY29tYSByZWdpc3RlciBhbmQgcmUtZW5hYmxlIEpBR0NvcmUgY2xvY2tzICovCisJR2xvYmFsUG1DU1IuYml0cy5wbV9zeXNjbGtfZ2F0ZSA9IDE7CisJR2xvYmFsUG1DU1IuYml0cy5wbV90eGNsa19nYXRlID0gMTsKKwlHbG9iYWxQbUNTUi5iaXRzLnBtX3J4Y2xrX2dhdGUgPSAxOworCUdsb2JhbFBtQ1NSLmJpdHMucG1fcGh5X3N3X2NvbWEgPSAwOworCXdyaXRlbChHbG9iYWxQbUNTUi52YWx1ZSwgJnBBZGFwdGVyLT5DU1JBZGRyZXNzLT5nbG9iYWwucG1fY3NyLnZhbHVlKTsKKworCS8qIFJlc3RvcmUgdGhlIEdiRSBQSFkgc3BlZWQgYW5kIGR1cGxleCBtb2RlczsKKwkgKiBSZXNldCBKQUdDb3JlOyByZS1jb25maWd1cmUgYW5kIGluaXRpYWxpemUgSkFHQ29yZSBhbmQgZ2lnRSBQSFkKKwkgKi8KKwlwQWRhcHRlci0+QWlGb3JjZVNwZWVkID0gcEFkYXB0ZXItPlBvTWdtdC5Qb3dlckRvd25TcGVlZDsKKwlwQWRhcHRlci0+QWlGb3JjZURweCA9IHBBZGFwdGVyLT5Qb01nbXQuUG93ZXJEb3duRHVwbGV4OworCisJLyogUmUtaW5pdGlhbGl6ZSB0aGUgc2VuZCBzdHJ1Y3R1cmVzICovCisJZXQxMzF4X2luaXRfc2VuZChwQWRhcHRlcik7CisKKwkvKiBSZXNldCB0aGUgUkZEIGxpc3QgYW5kIHJlLXN0YXJ0IFJVICAqLworCWV0MTMxeF9yZXNldF9yZWN2KHBBZGFwdGVyKTsKKworCS8qIEJyaW5nIHRoZSBkZXZpY2UgYmFjayB0byB0aGUgc3RhdGUgaXQgd2FzIGR1cmluZyBpbml0IHByaW9yIHRvCisgICAgICAgICAqIGF1dG9uZWdvdGlhdGlvbiBiZWluZyBjb21wbGV0ZS4gIFRoaXMgd2F5LCB3aGVuIHdlIGdldCB0aGUgYXV0by1uZWcKKyAgICAgICAgICogY29tcGxldGUgaW50ZXJydXB0LCB3ZSBjYW4gY29tcGxldGUgaW5pdCBieSBjYWxsaW5nIENvbmZpZ01hY1JFR1MyLgorICAgICAgICAgKi8KKwlldDEzMXhfc29mdF9yZXNldChwQWRhcHRlcik7CisKKwkvKiBzZXR1cCBldDEzMTAgYXMgcGVyIHRoZSBkb2N1bWVudGF0aW9uID8/ICovCisJZXQxMzF4X2FkYXB0ZXJfc2V0dXAocEFkYXB0ZXIpOworCisJLyogQWxsb3cgVHggdG8gcmVzdGFydCAqLworCU1QX0NMRUFSX0ZMQUcocEFkYXB0ZXIsIGZNUF9BREFQVEVSX0xPV0VSX1BPV0VSKTsKKworCS8qIE5lZWQgdG8gcmUtZW5hYmxlIFJ4LiAqLworCWV0MTMxeF9yeF9kbWFfZW5hYmxlKHBBZGFwdGVyKTsKKworCURCR19MRUFWRShldDEzMXhfZGJnaW5mbyk7Cit9CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ldDEzMXgvZXQxMzEwX3BtLmggYi9kcml2ZXJzL3N0YWdpbmcvZXQxMzF4L2V0MTMxMF9wbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY4MDIzMzgKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvZXQxMzF4L2V0MTMxMF9wbS5oCkBAIC0wLDAgKzEsMTI1IEBACisvKgorICogQWdlcmUgU3lzdGVtcyBJbmMuCisgKiAxMC8xMDAvMTAwMCBCYXNlLVQgRXRoZXJuZXQgRHJpdmVyIGZvciB0aGUgRVQxMzAxIGFuZCBFVDEzMXggc2VyaWVzIE1BQ3MKKyAqCisgKiBDb3B5cmlnaHQgqSAyMDA1IEFnZXJlIFN5c3RlbXMgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICAgaHR0cDovL3d3dy5hZ2VyZS5jb20KKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIGV0MTMxMF9wbS5oIC0gRGVmaW5lcywgc3RydWN0cywgZW51bXMsIHByb3RvdHlwZXMsIGV0Yy4gcGVydGFpbmluZyB0byBwb3dlcgorICogICAgICAgICAgICAgICBtYW5hZ2VtZW50LgorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogU09GVFdBUkUgTElDRU5TRQorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgcHJvdmlkZWQgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIHRlcm1zIGFuZCBjb25kaXRpb25zLAorICogd2hpY2ggeW91IHNob3VsZCByZWFkIGNhcmVmdWxseSBiZWZvcmUgdXNpbmcgdGhlIHNvZnR3YXJlLiAgVXNpbmcgdGhpcworICogc29mdHdhcmUgaW5kaWNhdGVzIHlvdXIgYWNjZXB0YW5jZSBvZiB0aGVzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucy4gIElmIHlvdSBkbworICogbm90IGFncmVlIHdpdGggdGhlc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMsIGRvIG5vdCB1c2UgdGhlIHNvZnR3YXJlLgorICoKKyAqIENvcHlyaWdodCCpIDIwMDUgQWdlcmUgU3lzdGVtcyBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIG9yIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb25zLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMKKyAqICAgIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBEaXNjbGFpbWVyIGFzIGNvbW1lbnRzIGluIHRoZSBjb2RlIGFzCisgKiAgICB3ZWxsIGFzIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiAuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAqICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIERpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyAqICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIC4gTmVpdGhlciB0aGUgbmFtZSBvZiBBZ2VyZSBTeXN0ZW1zIEluYy4gbm9yIHRoZSBuYW1lcyBvZiB0aGUgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIERpc2NsYWltZXIKKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIJNBUyBJU5QgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywKKyAqIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBJTkZSSU5HRU1FTlQgQU5EIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBBTlkKKyAqIFVTRSwgTU9ESUZJQ0FUSU9OIE9SIERJU1RSSUJVVElPTiBPRiBUSElTIFNPRlRXQVJFIElTIFNPTEVMWSBBVCBUSEUgVVNFUlMgT1dOCisgKiBSSVNLLiBJTiBOTyBFVkVOVCBTSEFMTCBBR0VSRSBTWVNURU1TIElOQy4gT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSAorICogREFNQUdFLgorICoKKyAqLworCisjaWZuZGVmIF9FVDEzMTBfUE1fSF8KKyNkZWZpbmUgX0VUMTMxMF9QTV9IXworCisjaW5jbHVkZSAiZXQxMzEwX2FkZHJlc3NfbWFwLmgiCisKKyNkZWZpbmUgTUFYX1dPTF9QQUNLRVRfU0laRSAgICAweDgwCisjZGVmaW5lIE1BWF9XT0xfTUFTS19TSVpFICAgICAgKCBNQVhfV09MX1BBQ0tFVF9TSVpFIC8gOCApCisjZGVmaW5lIE5VTV9XT0xfUEFUVEVSTlMgICAgICAgMHg1CisjZGVmaW5lIENSQzE2X1BPTFkgICAgICAgICAgICAgMHgxMDIxCisKKy8qIERlZmluaXRpb24gb2YgTkRJU19ERVZJQ0VfUE9XRVJfU1RBVEUgKi8KK3R5cGVkZWYgZW51bSB7CisJTmRpc0RldmljZVN0YXRlVW5zcGVjaWZpZWQgPSAwLAorCU5kaXNEZXZpY2VTdGF0ZUQwLAorCU5kaXNEZXZpY2VTdGF0ZUQxLAorCU5kaXNEZXZpY2VTdGF0ZUQyLAorCU5kaXNEZXZpY2VTdGF0ZUQzCit9IE5ESVNfREVWSUNFX1BPV0VSX1NUQVRFOworCit0eXBlZGVmIHN0cnVjdCBfTVBfUE9XRVJfTUdNVCB7CisJLyogdmFyaWFibGUgcHV0dGluZyB0aGUgcGh5IGludG8gY29tYSBtb2RlIHdoZW4gYm9vdCB1cCB3aXRoIG5vIGNhYmxlCisJICogcGx1Z2dlZCBpbiBhZnRlciA1IHNlY29uZHMKKwkgKi8KKwl1OCBUcmFuc1BoeUNvbWFNb2RlT25Cb290OworCisJLyogQXJyYXkgaG9sZGluZyB0aGUgZml2ZSBDUkMgdmFsdWVzIHRoYXQgdGhlIGRldmljZSBpcyBjdXJyZW50bHkKKwkgKiB1c2luZyBmb3IgV09MLiAgVGhpcyB3aWxsIGJlIHF1ZXJpZWQgd2hlbiBhIHBhdHRlcm4gaXMgdG8gYmUKKwkgKiByZW1vdmVkLgorCSAqLworCXUzMiBsb2NhbFdvbEFuZENyYzA7CisJdTE2IFdPTFBhdHRlcm5MaXN0W05VTV9XT0xfUEFUVEVSTlNdOworCXU4IFdPTE1hc2tMaXN0W05VTV9XT0xfUEFUVEVSTlNdW01BWF9XT0xfTUFTS19TSVpFXTsKKwl1MzIgV09MTWFza1NpemVbTlVNX1dPTF9QQVRURVJOU107CisKKwkvKiBJUCBhZGRyZXNzICovCisJdW5pb24geworCQl1MzIgdTMyOworCQl1OCB1OFs0XTsKKwl9IElQQWRkcmVzczsKKworCS8qIEN1cnJlbnQgUG93ZXIgc3RhdGUgb2YgdGhlIGFkYXB0ZXIuICovCisJTkRJU19ERVZJQ0VfUE9XRVJfU1RBVEUgUG93ZXJTdGF0ZTsKKwlib29sIFdPTFN0YXRlOworCWJvb2wgV09MRW5hYmxlZDsKKwlib29sIEZhaWxlZDEwSGFsZjsKKwlib29sIGJGYWlsZWRTdGF0ZVRyYW5zaXRpb247CisKKwkvKiBOZXh0IHR3byB1c2VkIHRvIHNhdmUgcG93ZXIgaW5mb3JtYXRpb24gYXQgcG93ZXIgZG93bi4gVGhpcworCSAqIGluZm9ybWF0aW9uIHdpbGwgYmUgdXNlZCBkdXJpbmcgcG93ZXIgdXAgdG8gc2V0IHVwIHBhcnRzIG9mIFBvd2VyCisJICogTWFuYWdlbWVudCBpbiBKQUdDb3JlCisJICovCisJdTMyIHR4X2VuOworCXUzMiByeF9lbjsKKwl1MTYgUG93ZXJEb3duU3BlZWQ7CisJdTggUG93ZXJEb3duRHVwbGV4OworfSBNUF9QT1dFUl9NR01ULCAqUE1QX1BPV0VSX01HTVQ7CisKKy8qIEZvcndhcmQgZGVjbGFyYXRpb24gb2YgdGhlIHByaXZhdGUgYWRhcHRlciBzdHJ1Y3R1cmUKKyAqICggSVMgVEhFUkUgQSBXQVkgVE8gRE8gVEhJUyBXSVRIIEEgVFlQRURFRj8/PyApCisgKi8KK3N0cnVjdCBldDEzMXhfYWRhcHRlcjsKKwordTE2IENhbGN1bGF0ZUNDSVRDUkMxNih1OCAqUGF0dGVybiwgdTggKk1hc2ssIHUzMiBNYXNrU2l6ZSk7Cit2b2lkIEVuYWJsZVBoeUNvbWEoc3RydWN0IGV0MTMxeF9hZGFwdGVyICphZGFwdGVyKTsKK3ZvaWQgRGlzYWJsZVBoeUNvbWEoc3RydWN0IGV0MTMxeF9hZGFwdGVyICphZGFwdGVyKTsKKworI2VuZGlmIC8qIF9FVDEzMTBfUE1fSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ldDEzMXgvZXQxMzEwX3J4LmMgYi9kcml2ZXJzL3N0YWdpbmcvZXQxMzF4L2V0MTMxMF9yeC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVjOThkYTUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvZXQxMzF4L2V0MTMxMF9yeC5jCkBAIC0wLDAgKzEsMTM5MSBAQAorLyoKKyAqIEFnZXJlIFN5c3RlbXMgSW5jLgorICogMTAvMTAwLzEwMDAgQmFzZS1UIEV0aGVybmV0IERyaXZlciBmb3IgdGhlIEVUMTMwMSBhbmQgRVQxMzF4IHNlcmllcyBNQUNzCisgKgorICogQ29weXJpZ2h0IKkgMjAwNSBBZ2VyZSBTeXN0ZW1zIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgIGh0dHA6Ly93d3cuYWdlcmUuY29tCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBldDEzMTBfcnguYyAtIFJvdXRpbmVzIHVzZWQgdG8gcGVyZm9ybSBkYXRhIHJlY2VwdGlvbgorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogU09GVFdBUkUgTElDRU5TRQorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgcHJvdmlkZWQgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIHRlcm1zIGFuZCBjb25kaXRpb25zLAorICogd2hpY2ggeW91IHNob3VsZCByZWFkIGNhcmVmdWxseSBiZWZvcmUgdXNpbmcgdGhlIHNvZnR3YXJlLiAgVXNpbmcgdGhpcworICogc29mdHdhcmUgaW5kaWNhdGVzIHlvdXIgYWNjZXB0YW5jZSBvZiB0aGVzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucy4gIElmIHlvdSBkbworICogbm90IGFncmVlIHdpdGggdGhlc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMsIGRvIG5vdCB1c2UgdGhlIHNvZnR3YXJlLgorICoKKyAqIENvcHlyaWdodCCpIDIwMDUgQWdlcmUgU3lzdGVtcyBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIG9yIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb25zLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMKKyAqICAgIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBEaXNjbGFpbWVyIGFzIGNvbW1lbnRzIGluIHRoZSBjb2RlIGFzCisgKiAgICB3ZWxsIGFzIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiAuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAqICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIERpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyAqICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIC4gTmVpdGhlciB0aGUgbmFtZSBvZiBBZ2VyZSBTeXN0ZW1zIEluYy4gbm9yIHRoZSBuYW1lcyBvZiB0aGUgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIERpc2NsYWltZXIKKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIJNBUyBJU5QgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywKKyAqIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBJTkZSSU5HRU1FTlQgQU5EIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBBTlkKKyAqIFVTRSwgTU9ESUZJQ0FUSU9OIE9SIERJU1RSSUJVVElPTiBPRiBUSElTIFNPRlRXQVJFIElTIFNPTEVMWSBBVCBUSEUgVVNFUlMgT1dOCisgKiBSSVNLLiBJTiBOTyBFVkVOVCBTSEFMTCBBR0VSRSBTWVNURU1TIElOQy4gT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSAorICogREFNQUdFLgorICoKKyAqLworCisjaW5jbHVkZSAiZXQxMzF4X3ZlcnNpb24uaCIKKyNpbmNsdWRlICJldDEzMXhfZGVidWcuaCIKKyNpbmNsdWRlICJldDEzMXhfZGVmcy5oIgorCisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisKKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L3B0cmFjZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9jdHlwZS5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvaW4uaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KKyNpbmNsdWRlIDxhc20vYml0b3BzLmg+CisKKyNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgorI2luY2x1ZGUgPGxpbnV4L2lmX2FycC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgorCisjaW5jbHVkZSAiZXQxMzEwX3BoeS5oIgorI2luY2x1ZGUgImV0MTMxMF9wbS5oIgorI2luY2x1ZGUgImV0MTMxMF9qYWdjb3JlLmgiCisKKyNpbmNsdWRlICJldDEzMXhfYWRhcHRlci5oIgorI2luY2x1ZGUgImV0MTMxeF9pbml0cGNpLmgiCisKKyNpbmNsdWRlICJldDEzMTBfcnguaCIKKworLyogRGF0YSBmb3IgZGVidWdnaW5nIGZhY2lsaXRpZXMgKi8KKyNpZmRlZiBDT05GSUdfRVQxMzFYX0RFQlVHCitleHRlcm4gZGJnX2luZm9fdCAqZXQxMzF4X2RiZ2luZm87CisjZW5kaWYgLyogQ09ORklHX0VUMTMxWF9ERUJVRyAqLworCisKK3ZvaWQgbmljX3JldHVybl9yZmQoc3RydWN0IGV0MTMxeF9hZGFwdGVyICpwQWRhcHRlciwgUE1QX1JGRCBwTXBSZmQpOworCisvKioKKyAqIGV0MTMxeF9yeF9kbWFfbWVtb3J5X2FsbG9jCisgKiBAYWRhcHRlcjogcG9pbnRlciB0byBvdXIgcHJpdmF0ZSBhZGFwdGVyIHN0cnVjdHVyZQorICoKKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzIGFuZCBlcnJubyBvbiBmYWlsdXJlIChhcyBkZWZpbmVkIGluIGVycm5vLmgpCisgKgorICogQWxsb2NhdGVzIEZyZWUgYnVmZmVyIHJpbmcgMSBmb3Igc3VyZSwgZnJlZSBidWZmZXIgcmluZyAwIGlmIHJlcXVpcmVkLAorICogYW5kIHRoZSBQYWNrZXQgU3RhdHVzIFJpbmcuCisgKi8KK2ludCBldDEzMXhfcnhfZG1hX21lbW9yeV9hbGxvYyhzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJdWludDMyX3QgT3V0ZXJMb29wLCBJbm5lckxvb3A7CisJdWludDMyX3QgYnVmc2l6ZTsKKwl1aW50MzJfdCBwa3RTdGF0UmluZ1NpemUsIEZCUkNodW5rU2l6ZTsKKwlSWF9SSU5HX3QgKnJ4X3Jpbmc7CisKKwlEQkdfRU5URVIoZXQxMzF4X2RiZ2luZm8pOworCisJLyogU2V0dXAgc29tZSBjb252ZW5pZW5jZSBwb2ludGVycyAqLworCXJ4X3JpbmcgPSAoUlhfUklOR190ICopICYgYWRhcHRlci0+UnhSaW5nOworCisJLyogQWxsb2MgbWVtb3J5IGZvciB0aGUgbG9va3VwIHRhYmxlICovCisjaWZkZWYgVVNFX0ZCUjAKKwlyeF9yaW5nLT5GYnJbMF0gPSBrbWFsbG9jKHNpemVvZihGQlJMT09LVVBUQUJMRSksIEdGUF9LRVJORUwpOworI2VuZGlmCisKKwlyeF9yaW5nLT5GYnJbMV0gPSBrbWFsbG9jKHNpemVvZihGQlJMT09LVVBUQUJMRSksIEdGUF9LRVJORUwpOworCisJLyogVGhlIGZpcnN0IHRoaW5nIHdlIHdpbGwgZG8gaXMgY29uZmlndXJlIHRoZSBzaXplcyBvZiB0aGUgYnVmZmVyCisJICogcmluZ3MuIFRoZXNlIHdpbGwgY2hhbmdlIGJhc2VkIG9uIGp1bWJvIHBhY2tldCBzdXBwb3J0LiAgTGFyZ2VyCisJICoganVtYm8gcGFja2V0cyBpbmNyZWFzZXMgdGhlIHNpemUgb2YgZWFjaCBlbnRyeSBpbiBGQlIwLCBhbmQgdGhlCisJICogbnVtYmVyIG9mIGVudHJpZXMgaW4gRkJSMCwgd2hpbGUgYXQgdGhlIHNhbWUgdGltZSBkZWNyZWFzaW5nIHRoZQorCSAqIG51bWJlciBvZiBlbnRyaWVzIGluIEZCUjEuCisJICoKKwkgKiBGQlIxIGhvbGRzICJsYXJnZSIgZnJhbWVzLCBGQlIwIGhvbGRzICJzbWFsbCIgZnJhbWVzLiAgSWYgRkJSMQorCSAqIGVudHJpZXMgYXJlIGh1Z2UgaW4gb3JkZXIgdG8gYWNjb21vZGF0ZSBhICJqdW1ibyIgZnJhbWUsIHRoZW4gaXQKKwkgKiB3aWxsIGhhdmUgbGVzcyBlbnRyaWVzLiAgQ29udmVyc2VseSwgRkJSMSB3aWxsIG5vdyBiZSByZWxpZWQgdXBvbgorCSAqIHRvIGNhcnJ5IG1vcmUgIm5vcm1hbCIgZnJhbWVzLCB0aHVzIGl0J3MgZW50cnkgc2l6ZSBhbHNvIGluY3JlYXNlcworCSAqIGFuZCB0aGUgbnVtYmVyIG9mIGVudHJpZXMgZ29lcyB1cCB0b28gKHNpbmNlIGl0IG5vdyBjYXJyaWVzCisJICogInNtYWxsIiArICJyZWd1bGFyIiBwYWNrZXRzLgorCSAqCisJICogSW4gdGhpcyBzY2hlbWUsIHdlIHRyeSB0byBtYWludGFpbiA1MTIgZW50cmllcyBiZXR3ZWVuIHRoZSB0d28KKwkgKiByaW5ncy4gQWxzbywgRkJSMSByZW1haW5zIGEgY29uc3RhbnQgc2l6ZSAtIHdoZW4gaXQncyBzaXplIGRvdWJsZXMKKwkgKiB0aGUgbnVtYmVyIG9mIGVudHJpZXMgaGFsdmVzLiAgRkJSMCBpbmNyZWFzZXMgaW4gc2l6ZSwgaG93ZXZlci4KKwkgKi8KKworCWlmIChhZGFwdGVyLT5SZWdpc3RyeUp1bWJvUGFja2V0IDwgMjA0OCkgeworI2lmZGVmIFVTRV9GQlIwCisJCXJ4X3JpbmctPkZicjBCdWZmZXJTaXplID0gMjU2OworCQlyeF9yaW5nLT5GYnIwTnVtRW50cmllcyA9IDUxMjsKKyNlbmRpZgorCQlyeF9yaW5nLT5GYnIxQnVmZmVyU2l6ZSA9IDIwNDg7CisJCXJ4X3JpbmctPkZicjFOdW1FbnRyaWVzID0gNTEyOworCX0gZWxzZSBpZiAoYWRhcHRlci0+UmVnaXN0cnlKdW1ib1BhY2tldCA8IDQwOTYpIHsKKyNpZmRlZiBVU0VfRkJSMAorCQlyeF9yaW5nLT5GYnIwQnVmZmVyU2l6ZSA9IDUxMjsKKwkJcnhfcmluZy0+RmJyME51bUVudHJpZXMgPSAxMDI0OworI2VuZGlmCisJCXJ4X3JpbmctPkZicjFCdWZmZXJTaXplID0gNDA5NjsKKwkJcnhfcmluZy0+RmJyMU51bUVudHJpZXMgPSA1MTI7CisJfSBlbHNlIHsKKyNpZmRlZiBVU0VfRkJSMAorCQlyeF9yaW5nLT5GYnIwQnVmZmVyU2l6ZSA9IDEwMjQ7CisJCXJ4X3JpbmctPkZicjBOdW1FbnRyaWVzID0gNzY4OworI2VuZGlmCisJCXJ4X3JpbmctPkZicjFCdWZmZXJTaXplID0gMTYzODQ7CisJCXJ4X3JpbmctPkZicjFOdW1FbnRyaWVzID0gMTI4OworCX0KKworI2lmZGVmIFVTRV9GQlIwCisJYWRhcHRlci0+UnhSaW5nLlBzck51bUVudHJpZXMgPSBhZGFwdGVyLT5SeFJpbmcuRmJyME51bUVudHJpZXMgKworCSAgICBhZGFwdGVyLT5SeFJpbmcuRmJyMU51bUVudHJpZXM7CisjZWxzZQorCWFkYXB0ZXItPlJ4UmluZy5Qc3JOdW1FbnRyaWVzID0gYWRhcHRlci0+UnhSaW5nLkZicjFOdW1FbnRyaWVzOworI2VuZGlmCisKKwkvKiBBbGxvY2F0ZSBhbiBhcmVhIG9mIG1lbW9yeSBmb3IgRnJlZSBCdWZmZXIgUmluZyAxICovCisJYnVmc2l6ZSA9IChzaXplb2YoRkJSX0RFU0NfdCkgKiByeF9yaW5nLT5GYnIxTnVtRW50cmllcykgKyAweGZmZjsKKwlyeF9yaW5nLT5wRmJyMVJpbmdWYSA9IHBjaV9hbGxvY19jb25zaXN0ZW50KGFkYXB0ZXItPnBkZXYsCisJCQkJCQkgICAgYnVmc2l6ZSwKKwkJCQkJCSAgICAmcnhfcmluZy0+cEZicjFSaW5nUGEpOworCWlmICghcnhfcmluZy0+cEZicjFSaW5nVmEpIHsKKwkJREJHX0VSUk9SKGV0MTMxeF9kYmdpbmZvLAorCQkJICAiQ2Fubm90IGFsbG9jIG1lbW9yeSBmb3IgRnJlZSBCdWZmZXIgUmluZyAxXG4iKTsKKwkJREJHX0xFQVZFKGV0MTMxeF9kYmdpbmZvKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJLyogU2F2ZSBwaHlzaWNhbCBhZGRyZXNzCisJICoKKwkgKiBOT1RFOiBwY2lfYWxsb2NfY29uc2lzdGVudCgpLCB1c2VkIGFib3ZlIHRvIGFsbG9jIERNQSByZWdpb25zLAorCSAqIEFMV0FZUyByZXR1cm5zIFNBQyAoMzItYml0KSBhZGRyZXNzZXMuIElmIERBQyAoNjQtYml0KSBhZGRyZXNzZXMKKwkgKiBhcmUgZXZlciByZXR1cm5lZCwgbWFrZSBzdXJlIHRoZSBoaWdoIHBhcnQgaXMgcmV0cmlldmVkIGhlcmUKKwkgKiBiZWZvcmUgc3RvcmluZyB0aGUgYWRqdXN0ZWQgYWRkcmVzcy4KKwkgKi8KKwlyeF9yaW5nLT5GYnIxUmVhbHBhID0gcnhfcmluZy0+cEZicjFSaW5nUGE7CisKKwkvKiBBbGlnbiBGcmVlIEJ1ZmZlciBSaW5nIDEgb24gYSA0SyBib3VuZGFyeSAqLworCWV0MTMxeF9hbGlnbl9hbGxvY2F0ZWRfbWVtb3J5KGFkYXB0ZXIsCisJCQkJICAgICAgJnJ4X3JpbmctPkZicjFSZWFscGEsCisJCQkJICAgICAgJnJ4X3JpbmctPkZicjFvZmZzZXQsIDB4MEZGRik7CisKKwlyeF9yaW5nLT5wRmJyMVJpbmdWYSA9ICh2b2lkICopKCh1aW50OF90ICopIHJ4X3JpbmctPnBGYnIxUmluZ1ZhICsKKwkJCQkJcnhfcmluZy0+RmJyMW9mZnNldCk7CisKKyNpZmRlZiBVU0VfRkJSMAorCS8qIEFsbG9jYXRlIGFuIGFyZWEgb2YgbWVtb3J5IGZvciBGcmVlIEJ1ZmZlciBSaW5nIDAgKi8KKwlidWZzaXplID0gKHNpemVvZihGQlJfREVTQ190KSAqIHJ4X3JpbmctPkZicjBOdW1FbnRyaWVzKSArIDB4ZmZmOworCXJ4X3JpbmctPnBGYnIwUmluZ1ZhID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQoYWRhcHRlci0+cGRldiwKKwkJCQkJCSAgICBidWZzaXplLAorCQkJCQkJICAgICZyeF9yaW5nLT5wRmJyMFJpbmdQYSk7CisJaWYgKCFyeF9yaW5nLT5wRmJyMFJpbmdWYSkgeworCQlEQkdfRVJST1IoZXQxMzF4X2RiZ2luZm8sCisJCQkgICJDYW5ub3QgYWxsb2MgbWVtb3J5IGZvciBGcmVlIEJ1ZmZlciBSaW5nIDBcbiIpOworCQlEQkdfTEVBVkUoZXQxMzF4X2RiZ2luZm8pOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwkvKiBTYXZlIHBoeXNpY2FsIGFkZHJlc3MKKwkgKgorCSAqIE5PVEU6IHBjaV9hbGxvY19jb25zaXN0ZW50KCksIHVzZWQgYWJvdmUgdG8gYWxsb2MgRE1BIHJlZ2lvbnMsCisJICogQUxXQVlTIHJldHVybnMgU0FDICgzMi1iaXQpIGFkZHJlc3Nlcy4gSWYgREFDICg2NC1iaXQpIGFkZHJlc3NlcworCSAqIGFyZSBldmVyIHJldHVybmVkLCBtYWtlIHN1cmUgdGhlIGhpZ2ggcGFydCBpcyByZXRyaWV2ZWQgaGVyZSBiZWZvcmUKKwkgKiBzdG9yaW5nIHRoZSBhZGp1c3RlZCBhZGRyZXNzLgorCSAqLworCXJ4X3JpbmctPkZicjBSZWFscGEgPSByeF9yaW5nLT5wRmJyMFJpbmdQYTsKKworCS8qIEFsaWduIEZyZWUgQnVmZmVyIFJpbmcgMCBvbiBhIDRLIGJvdW5kYXJ5ICovCisJZXQxMzF4X2FsaWduX2FsbG9jYXRlZF9tZW1vcnkoYWRhcHRlciwKKwkJCQkgICAgICAmcnhfcmluZy0+RmJyMFJlYWxwYSwKKwkJCQkgICAgICAmcnhfcmluZy0+RmJyMG9mZnNldCwgMHgwRkZGKTsKKworCXJ4X3JpbmctPnBGYnIwUmluZ1ZhID0gKHZvaWQgKikoKHVpbnQ4X3QgKikgcnhfcmluZy0+cEZicjBSaW5nVmEgKworCQkJCQlyeF9yaW5nLT5GYnIwb2Zmc2V0KTsKKyNlbmRpZgorCisJZm9yIChPdXRlckxvb3AgPSAwOyBPdXRlckxvb3AgPCAocnhfcmluZy0+RmJyMU51bUVudHJpZXMgLyBGQlJfQ0hVTktTKTsKKwkgICAgIE91dGVyTG9vcCsrKSB7CisJCXVpbnQ2NF90IEZicjFPZmZzZXQ7CisJCXVpbnQ2NF90IEZicjFUZW1wUGE7CisJCXVpbnQzMl90IEZicjFBbGlnbjsKKworCQkvKiBUaGlzIGNvZGUgYWxsb2NhdGVzIGFuIGFyZWEgb2YgbWVtb3J5IGJpZyBlbm91Z2ggZm9yIE4KKwkJICogZnJlZSBidWZmZXJzICsgKGJ1ZmZlcl9zaXplIC0gMSkgc28gdGhhdCB0aGUgYnVmZmVycyBjYW4KKwkJICogYmUgYWxpZ25lZCBvbiA0ayBib3VuZGFyaWVzLiAgSWYgZWFjaCBidWZmZXIgd2VyZSBhbGlnbmVkCisJCSAqIHRvIGEgYnVmZmVyX3NpemUgYm91bmRhcnksIHRoZSBlZmZlY3Qgd291bGQgYmUgdG8gZG91YmxlCisJCSAqIHRoZSBzaXplIG9mIEZCUjAuICBCeSBhbGxvY2F0aW5nIE4gYnVmZmVycyBhdCBvbmNlLCB3ZQorCQkgKiByZWR1Y2UgdGhpcyBvdmVyaGVhZC4KKwkJICovCisJCWlmIChyeF9yaW5nLT5GYnIxQnVmZmVyU2l6ZSA+IDQwOTYpIHsKKwkJCUZicjFBbGlnbiA9IDQwOTY7CisJCX0gZWxzZSB7CisJCQlGYnIxQWxpZ24gPSByeF9yaW5nLT5GYnIxQnVmZmVyU2l6ZTsKKwkJfQorCisJCUZCUkNodW5rU2l6ZSA9CisJCSAgICAoRkJSX0NIVU5LUyAqIHJ4X3JpbmctPkZicjFCdWZmZXJTaXplKSArIEZicjFBbGlnbiAtIDE7CisJCXJ4X3JpbmctPkZicjFNZW1WYVtPdXRlckxvb3BdID0KKwkJICAgIHBjaV9hbGxvY19jb25zaXN0ZW50KGFkYXB0ZXItPnBkZXYsIEZCUkNodW5rU2l6ZSwKKwkJCQkJICZyeF9yaW5nLT5GYnIxTWVtUGFbT3V0ZXJMb29wXSk7CisKKwkJaWYgKCFyeF9yaW5nLT5GYnIxTWVtVmFbT3V0ZXJMb29wXSkgeworCQkJREJHX0VSUk9SKGV0MTMxeF9kYmdpbmZvLCAiQ291bGQgbm90IGFsbG9jIG1lbW9yeVxuIik7CisJCQlEQkdfTEVBVkUoZXQxMzF4X2RiZ2luZm8pOworCQkJcmV0dXJuIC1FTk9NRU07CisJCX0KKworCQkvKiBTZWUgTk9URSBpbiAiU2F2ZSBQaHlzaWNhbCBBZGRyZXNzIiBjb21tZW50IGFib3ZlICovCisJCUZicjFUZW1wUGEgPSByeF9yaW5nLT5GYnIxTWVtUGFbT3V0ZXJMb29wXTsKKworCQlldDEzMXhfYWxpZ25fYWxsb2NhdGVkX21lbW9yeShhZGFwdGVyLAorCQkJCQkgICAgICAmRmJyMVRlbXBQYSwKKwkJCQkJICAgICAgJkZicjFPZmZzZXQsIChGYnIxQWxpZ24gLSAxKSk7CisKKwkJZm9yIChJbm5lckxvb3AgPSAwOyBJbm5lckxvb3AgPCBGQlJfQ0hVTktTOyBJbm5lckxvb3ArKykgeworCQkJdWludDMyX3QgaW5kZXggPSAoT3V0ZXJMb29wICogRkJSX0NIVU5LUykgKyBJbm5lckxvb3A7CisKKwkJCS8qIFNhdmUgdGhlIFZpcnR1YWwgYWRkcmVzcyBvZiB0aGlzIGluZGV4IGZvciBxdWljaworCQkJICogYWNjZXNzIGxhdGVyCisJCQkgKi8KKwkJCXJ4X3JpbmctPkZiclsxXS0+VmFbaW5kZXhdID0KKwkJCSAgICAodWludDhfdCAqKSByeF9yaW5nLT5GYnIxTWVtVmFbT3V0ZXJMb29wXSArCisJCQkgICAgKElubmVyTG9vcCAqIHJ4X3JpbmctPkZicjFCdWZmZXJTaXplKSArIEZicjFPZmZzZXQ7CisKKwkJCS8qIG5vdyBzdG9yZSB0aGUgcGh5c2ljYWwgYWRkcmVzcyBpbiB0aGUgZGVzY3JpcHRvcgorCQkJICogc28gdGhlIGRldmljZSBjYW4gYWNjZXNzIGl0CisJCQkgKi8KKwkJCXJ4X3JpbmctPkZiclsxXS0+UEFIaWdoW2luZGV4XSA9CisJCQkgICAgKHVpbnQzMl90KSAoRmJyMVRlbXBQYSA+PiAzMik7CisJCQlyeF9yaW5nLT5GYnJbMV0tPlBBTG93W2luZGV4XSA9ICh1aW50MzJfdCkgRmJyMVRlbXBQYTsKKworCQkJRmJyMVRlbXBQYSArPSByeF9yaW5nLT5GYnIxQnVmZmVyU2l6ZTsKKworCQkJcnhfcmluZy0+RmJyWzFdLT5CdWZmZXIxW2luZGV4XSA9CisJCQkgICAgcnhfcmluZy0+RmJyWzFdLT5WYVtpbmRleF07CisJCQlyeF9yaW5nLT5GYnJbMV0tPkJ1ZmZlcjJbaW5kZXhdID0KKwkJCSAgICByeF9yaW5nLT5GYnJbMV0tPlZhW2luZGV4XSAtIDQ7CisJCX0KKwl9CisKKyNpZmRlZiBVU0VfRkJSMAorCS8qIFNhbWUgZm9yIEZCUjAgKGlmIGluIHVzZSkgKi8KKwlmb3IgKE91dGVyTG9vcCA9IDA7IE91dGVyTG9vcCA8IChyeF9yaW5nLT5GYnIwTnVtRW50cmllcyAvIEZCUl9DSFVOS1MpOworCSAgICAgT3V0ZXJMb29wKyspIHsKKwkJdWludDY0X3QgRmJyME9mZnNldDsKKwkJdWludDY0X3QgRmJyMFRlbXBQYTsKKworCQlGQlJDaHVua1NpemUgPSAoKEZCUl9DSFVOS1MgKyAxKSAqIHJ4X3JpbmctPkZicjBCdWZmZXJTaXplKSAtIDE7CisJCXJ4X3JpbmctPkZicjBNZW1WYVtPdXRlckxvb3BdID0KKwkJICAgIHBjaV9hbGxvY19jb25zaXN0ZW50KGFkYXB0ZXItPnBkZXYsIEZCUkNodW5rU2l6ZSwKKwkJCQkJICZyeF9yaW5nLT5GYnIwTWVtUGFbT3V0ZXJMb29wXSk7CisKKwkJaWYgKCFyeF9yaW5nLT5GYnIwTWVtVmFbT3V0ZXJMb29wXSkgeworCQkJREJHX0VSUk9SKGV0MTMxeF9kYmdpbmZvLCAiQ291bGQgbm90IGFsbG9jIG1lbW9yeVxuIik7CisJCQlEQkdfTEVBVkUoZXQxMzF4X2RiZ2luZm8pOworCQkJcmV0dXJuIC1FTk9NRU07CisJCX0KKworCQkvKiBTZWUgTk9URSBpbiAiU2F2ZSBQaHlzaWNhbCBBZGRyZXNzIiBjb21tZW50IGFib3ZlICovCisJCUZicjBUZW1wUGEgPSByeF9yaW5nLT5GYnIwTWVtUGFbT3V0ZXJMb29wXTsKKworCQlldDEzMXhfYWxpZ25fYWxsb2NhdGVkX21lbW9yeShhZGFwdGVyLAorCQkJCQkgICAgICAmRmJyMFRlbXBQYSwKKwkJCQkJICAgICAgJkZicjBPZmZzZXQsCisJCQkJCSAgICAgIHJ4X3JpbmctPkZicjBCdWZmZXJTaXplIC0gMSk7CisKKwkJZm9yIChJbm5lckxvb3AgPSAwOyBJbm5lckxvb3AgPCBGQlJfQ0hVTktTOyBJbm5lckxvb3ArKykgeworCQkJdWludDMyX3QgaW5kZXggPSAoT3V0ZXJMb29wICogRkJSX0NIVU5LUykgKyBJbm5lckxvb3A7CisKKwkJCXJ4X3JpbmctPkZiclswXS0+VmFbaW5kZXhdID0KKwkJCSAgICAodWludDhfdCAqKSByeF9yaW5nLT5GYnIwTWVtVmFbT3V0ZXJMb29wXSArCisJCQkgICAgKElubmVyTG9vcCAqIHJ4X3JpbmctPkZicjBCdWZmZXJTaXplKSArIEZicjBPZmZzZXQ7CisKKwkJCXJ4X3JpbmctPkZiclswXS0+UEFIaWdoW2luZGV4XSA9CisJCQkgICAgKHVpbnQzMl90KSAoRmJyMFRlbXBQYSA+PiAzMik7CisJCQlyeF9yaW5nLT5GYnJbMF0tPlBBTG93W2luZGV4XSA9ICh1aW50MzJfdCkgRmJyMFRlbXBQYTsKKworCQkJRmJyMFRlbXBQYSArPSByeF9yaW5nLT5GYnIwQnVmZmVyU2l6ZTsKKworCQkJcnhfcmluZy0+RmJyWzBdLT5CdWZmZXIxW2luZGV4XSA9CisJCQkgICAgcnhfcmluZy0+RmJyWzBdLT5WYVtpbmRleF07CisJCQlyeF9yaW5nLT5GYnJbMF0tPkJ1ZmZlcjJbaW5kZXhdID0KKwkJCSAgICByeF9yaW5nLT5GYnJbMF0tPlZhW2luZGV4XSAtIDQ7CisJCX0KKwl9CisjZW5kaWYKKworCS8qIEFsbG9jYXRlIGFuIGFyZWEgb2YgbWVtb3J5IGZvciBGSUZPIG9mIFBhY2tldCBTdGF0dXMgcmluZyBlbnRyaWVzICovCisJcGt0U3RhdFJpbmdTaXplID0KKwkgICAgc2l6ZW9mKFBLVF9TVEFUX0RFU0NfdCkgKiBhZGFwdGVyLT5SeFJpbmcuUHNyTnVtRW50cmllczsKKworCXJ4X3JpbmctPnBQU1JpbmdWYSA9IHBjaV9hbGxvY19jb25zaXN0ZW50KGFkYXB0ZXItPnBkZXYsCisJCQkJCQkgIHBrdFN0YXRSaW5nU2l6ZSArIDB4MGZmZiwKKwkJCQkJCSAgJnJ4X3JpbmctPnBQU1JpbmdQYSk7CisKKwlpZiAoIXJ4X3JpbmctPnBQU1JpbmdWYSkgeworCQlEQkdfRVJST1IoZXQxMzF4X2RiZ2luZm8sCisJCQkgICJDYW5ub3QgYWxsb2MgbWVtb3J5IGZvciBQYWNrZXQgU3RhdHVzIFJpbmdcbiIpOworCQlEQkdfTEVBVkUoZXQxMzF4X2RiZ2luZm8pOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwkvKiBTYXZlIHBoeXNpY2FsIGFkZHJlc3MKKwkgKgorCSAqIE5PVEUgOiBwY2lfYWxsb2NfY29uc2lzdGVudCgpLCB1c2VkIGFib3ZlIHRvIGFsbG9jIERNQSByZWdpb25zLAorCSAqIEFMV0FZUyByZXR1cm5zIFNBQyAoMzItYml0KSBhZGRyZXNzZXMuIElmIERBQyAoNjQtYml0KSBhZGRyZXNzZXMKKwkgKiBhcmUgZXZlciByZXR1cm5lZCwgbWFrZSBzdXJlIHRoZSBoaWdoIHBhcnQgaXMgcmV0cmlldmVkIGhlcmUgYmVmb3JlCisJICogc3RvcmluZyB0aGUgYWRqdXN0ZWQgYWRkcmVzcy4KKwkgKi8KKwlyeF9yaW5nLT5wUFNSaW5nUmVhbFBhID0gcnhfcmluZy0+cFBTUmluZ1BhOworCisJLyogQWxpZ24gUGFja2V0IFN0YXR1cyBSaW5nIG9uIGEgNEsgYm91bmRhcnkgKi8KKwlldDEzMXhfYWxpZ25fYWxsb2NhdGVkX21lbW9yeShhZGFwdGVyLAorCQkJCSAgICAgICZyeF9yaW5nLT5wUFNSaW5nUmVhbFBhLAorCQkJCSAgICAgICZyeF9yaW5nLT5wUFNSaW5nT2Zmc2V0LCAweDBGRkYpOworCisJcnhfcmluZy0+cFBTUmluZ1ZhID0gKHZvaWQgKikoKHVpbnQ4X3QgKikgcnhfcmluZy0+cFBTUmluZ1ZhICsKKwkJCQkgICAgICByeF9yaW5nLT5wUFNSaW5nT2Zmc2V0KTsKKworCS8qIEFsbG9jYXRlIGFuIGFyZWEgb2YgbWVtb3J5IGZvciB3cml0ZWJhY2sgb2Ygc3RhdHVzIGluZm9ybWF0aW9uICovCisJcnhfcmluZy0+cFJ4U3RhdHVzVmEgPSBwY2lfYWxsb2NfY29uc2lzdGVudChhZGFwdGVyLT5wZGV2LAorCQkJCQkJICAgIHNpemVvZihSWF9TVEFUVVNfQkxPQ0tfdCkgKworCQkJCQkJICAgIDB4NywgJnJ4X3JpbmctPnBSeFN0YXR1c1BhKTsKKwlpZiAoIXJ4X3JpbmctPnBSeFN0YXR1c1ZhKSB7CisJCURCR19FUlJPUihldDEzMXhfZGJnaW5mbywKKwkJCSAgIkNhbm5vdCBhbGxvYyBtZW1vcnkgZm9yIFN0YXR1cyBCbG9ja1xuIik7CisJCURCR19MRUFWRShldDEzMXhfZGJnaW5mbyk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCS8qIFNhdmUgcGh5c2ljYWwgYWRkcmVzcyAqLworCXJ4X3JpbmctPlJ4U3RhdHVzUmVhbFBBID0gcnhfcmluZy0+cFJ4U3RhdHVzUGE7CisKKwkvKiBBbGlnbiB3cml0ZSBiYWNrIG9uIGFuIDggYnl0ZSBib3VuZGFyeSAqLworCWV0MTMxeF9hbGlnbl9hbGxvY2F0ZWRfbWVtb3J5KGFkYXB0ZXIsCisJCQkJICAgICAgJnJ4X3JpbmctPlJ4U3RhdHVzUmVhbFBBLAorCQkJCSAgICAgICZyeF9yaW5nLT5SeFN0YXR1c09mZnNldCwgMHgwNyk7CisKKwlyeF9yaW5nLT5wUnhTdGF0dXNWYSA9ICh2b2lkICopKCh1aW50OF90ICopIHJ4X3JpbmctPnBSeFN0YXR1c1ZhICsKKwkJCQkJcnhfcmluZy0+UnhTdGF0dXNPZmZzZXQpOworCXJ4X3JpbmctPk51bVJmZCA9IE5JQ19ERUZBVUxUX05VTV9SRkQ7CisKKwkvKiBSZWN2CisJICogcGNpX3Bvb2xfY3JlYXRlIGluaXRpYWxpemVzIGEgbG9va2FzaWRlIGxpc3QuIEFmdGVyIHN1Y2Nlc3NmdWwKKwkgKiBjcmVhdGlvbiwgbm9ucGFnZWQgZml4ZWQtc2l6ZSBibG9ja3MgY2FuIGJlIGFsbG9jYXRlZCBmcm9tIGFuZAorCSAqIGZyZWVkIHRvIHRoZSBsb29rYXNpZGUgbGlzdC4KKwkgKiBSRkRzIHdpbGwgYmUgYWxsb2NhdGVkIGZyb20gdGhpcyBwb29sLgorCSAqLworCXJ4X3JpbmctPlJlY3ZMb29rYXNpZGUgPSBrbWVtX2NhY2hlX2NyZWF0ZShhZGFwdGVyLT5uZXRkZXYtPm5hbWUsCisJCQkJCQkgICBzaXplb2YoTVBfUkZEKSwKKwkJCQkJCSAgIDAsCisJCQkJCQkgICBTTEFCX0NBQ0hFX0RNQSB8CisJCQkJCQkgICBTTEFCX0hXQ0FDSEVfQUxJR04sCisJCQkJCQkgICBOVUxMKTsKKworCU1QX1NFVF9GTEFHKGFkYXB0ZXIsIGZNUF9BREFQVEVSX1JFQ1ZfTE9PS0FTSURFKTsKKworCS8qIFRoZSBSRkRzIGFyZSBnb2luZyB0byBiZSBwdXQgb24gbGlzdHMgbGF0ZXIgb24sIHNvIGluaXRpYWxpemUgdGhlCisJICogbGlzdHMgbm93LgorCSAqLworCUlOSVRfTElTVF9IRUFEKCZyeF9yaW5nLT5SZWN2TGlzdCk7CisJSU5JVF9MSVNUX0hFQUQoJnJ4X3JpbmctPlJlY3ZQZW5kaW5nTGlzdCk7CisKKwlEQkdfTEVBVkUoZXQxMzF4X2RiZ2luZm8pOworCXJldHVybiAwOworfQorCisvKioKKyAqIGV0MTMxeF9yeF9kbWFfbWVtb3J5X2ZyZWUgLSBGcmVlIGFsbCBtZW1vcnkgYWxsb2NhdGVkIHdpdGhpbiB0aGlzIG1vZHVsZS4KKyAqIEBhZGFwdGVyOiBwb2ludGVyIHRvIG91ciBwcml2YXRlIGFkYXB0ZXIgc3RydWN0dXJlCisgKi8KK3ZvaWQgZXQxMzF4X3J4X2RtYV9tZW1vcnlfZnJlZShzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJdWludDMyX3QgaW5kZXg7CisJdWludDMyX3QgYnVmc2l6ZTsKKwl1aW50MzJfdCBwa3RTdGF0UmluZ1NpemU7CisJUE1QX1JGRCBwTXBSZmQ7CisJUlhfUklOR190ICpyeF9yaW5nOworCisJREJHX0VOVEVSKGV0MTMxeF9kYmdpbmZvKTsKKworCS8qIFNldHVwIHNvbWUgY29udmVuaWVuY2UgcG9pbnRlcnMgKi8KKwlyeF9yaW5nID0gKFJYX1JJTkdfdCAqKSAmIGFkYXB0ZXItPlJ4UmluZzsKKworCS8qIEZyZWUgUkZEcyBhbmQgYXNzb2NpYXRlZCBwYWNrZXQgZGVzY3JpcHRvcnMgKi8KKwlEQkdfQVNTRVJUKHJ4X3JpbmctPm5SZWFkeVJlY3YgPT0gcnhfcmluZy0+TnVtUmZkKTsKKworCXdoaWxlICghbGlzdF9lbXB0eSgmcnhfcmluZy0+UmVjdkxpc3QpKSB7CisJCXBNcFJmZCA9IChNUF9SRkQgKikgbGlzdF9lbnRyeShyeF9yaW5nLT5SZWN2TGlzdC5uZXh0LAorCQkJCQkgICAgICAgTVBfUkZELCBsaXN0X25vZGUpOworCisJCWxpc3RfZGVsKCZwTXBSZmQtPmxpc3Rfbm9kZSk7CisJCWV0MTMxeF9yZmRfcmVzb3VyY2VzX2ZyZWUoYWRhcHRlciwgcE1wUmZkKTsKKwl9CisKKwl3aGlsZSAoIWxpc3RfZW1wdHkoJnJ4X3JpbmctPlJlY3ZQZW5kaW5nTGlzdCkpIHsKKwkJcE1wUmZkID0gKE1QX1JGRCAqKSBsaXN0X2VudHJ5KHJ4X3JpbmctPlJlY3ZQZW5kaW5nTGlzdC5uZXh0LAorCQkJCQkgICAgICAgTVBfUkZELCBsaXN0X25vZGUpOworCQlsaXN0X2RlbCgmcE1wUmZkLT5saXN0X25vZGUpOworCQlldDEzMXhfcmZkX3Jlc291cmNlc19mcmVlKGFkYXB0ZXIsIHBNcFJmZCk7CisJfQorCisJLyogRnJlZSBGcmVlIEJ1ZmZlciBSaW5nIDEgKi8KKwlpZiAocnhfcmluZy0+cEZicjFSaW5nVmEpIHsKKwkJLyogRmlyc3QgdGhlIHBhY2tldCBtZW1vcnkgKi8KKwkJZm9yIChpbmRleCA9IDA7IGluZGV4IDwKKwkJICAgICAocnhfcmluZy0+RmJyMU51bUVudHJpZXMgLyBGQlJfQ0hVTktTKTsgaW5kZXgrKykgeworCQkJaWYgKHJ4X3JpbmctPkZicjFNZW1WYVtpbmRleF0pIHsKKwkJCQl1aW50MzJfdCBGYnIxQWxpZ247CisKKwkJCQlpZiAocnhfcmluZy0+RmJyMUJ1ZmZlclNpemUgPiA0MDk2KSB7CisJCQkJCUZicjFBbGlnbiA9IDQwOTY7CisJCQkJfSBlbHNlIHsKKwkJCQkJRmJyMUFsaWduID0gcnhfcmluZy0+RmJyMUJ1ZmZlclNpemU7CisJCQkJfQorCisJCQkJYnVmc2l6ZSA9CisJCQkJICAgIChyeF9yaW5nLT5GYnIxQnVmZmVyU2l6ZSAqIEZCUl9DSFVOS1MpICsKKwkJCQkgICAgRmJyMUFsaWduIC0gMTsKKworCQkJCXBjaV9mcmVlX2NvbnNpc3RlbnQoYWRhcHRlci0+cGRldiwKKwkJCQkJCSAgICBidWZzaXplLAorCQkJCQkJICAgIHJ4X3JpbmctPkZicjFNZW1WYVtpbmRleF0sCisJCQkJCQkgICAgcnhfcmluZy0+RmJyMU1lbVBhW2luZGV4XSk7CisKKwkJCQlyeF9yaW5nLT5GYnIxTWVtVmFbaW5kZXhdID0gTlVMTDsKKwkJCX0KKwkJfQorCisJCS8qIE5vdyB0aGUgRklGTyBpdHNlbGYgKi8KKwkJcnhfcmluZy0+cEZicjFSaW5nVmEgPSAodm9pZCAqKSgodWludDhfdCAqKSByeF9yaW5nLT5wRmJyMVJpbmdWYSAtCisJCQkJCQlyeF9yaW5nLT5GYnIxb2Zmc2V0KTsKKworCQlidWZzaXplID0KKwkJICAgIChzaXplb2YoRkJSX0RFU0NfdCkgKiByeF9yaW5nLT5GYnIxTnVtRW50cmllcykgKyAweGZmZjsKKworCQlwY2lfZnJlZV9jb25zaXN0ZW50KGFkYXB0ZXItPnBkZXYsCisJCQkJICAgIGJ1ZnNpemUsCisJCQkJICAgIHJ4X3JpbmctPnBGYnIxUmluZ1ZhLCByeF9yaW5nLT5wRmJyMVJpbmdQYSk7CisKKwkJcnhfcmluZy0+cEZicjFSaW5nVmEgPSBOVUxMOworCX0KKworI2lmZGVmIFVTRV9GQlIwCisJLyogTm93IHRoZSBzYW1lIGZvciBGcmVlIEJ1ZmZlciBSaW5nIDAgKi8KKwlpZiAocnhfcmluZy0+cEZicjBSaW5nVmEpIHsKKwkJLyogRmlyc3QgdGhlIHBhY2tldCBtZW1vcnkgKi8KKwkJZm9yIChpbmRleCA9IDA7IGluZGV4IDwKKwkJICAgICAocnhfcmluZy0+RmJyME51bUVudHJpZXMgLyBGQlJfQ0hVTktTKTsgaW5kZXgrKykgeworCQkJaWYgKHJ4X3JpbmctPkZicjBNZW1WYVtpbmRleF0pIHsKKwkJCQlidWZzaXplID0KKwkJCQkgICAgKHJ4X3JpbmctPkZicjBCdWZmZXJTaXplICoKKwkJCQkgICAgIChGQlJfQ0hVTktTICsgMSkpIC0gMTsKKworCQkJCXBjaV9mcmVlX2NvbnNpc3RlbnQoYWRhcHRlci0+cGRldiwKKwkJCQkJCSAgICBidWZzaXplLAorCQkJCQkJICAgIHJ4X3JpbmctPkZicjBNZW1WYVtpbmRleF0sCisJCQkJCQkgICAgcnhfcmluZy0+RmJyME1lbVBhW2luZGV4XSk7CisKKwkJCQlyeF9yaW5nLT5GYnIwTWVtVmFbaW5kZXhdID0gTlVMTDsKKwkJCX0KKwkJfQorCisJCS8qIE5vdyB0aGUgRklGTyBpdHNlbGYgKi8KKwkJcnhfcmluZy0+cEZicjBSaW5nVmEgPSAodm9pZCAqKSgodWludDhfdCAqKSByeF9yaW5nLT5wRmJyMFJpbmdWYSAtCisJCQkJCQlyeF9yaW5nLT5GYnIwb2Zmc2V0KTsKKworCQlidWZzaXplID0KKwkJICAgIChzaXplb2YoRkJSX0RFU0NfdCkgKiByeF9yaW5nLT5GYnIwTnVtRW50cmllcykgKyAweGZmZjsKKworCQlwY2lfZnJlZV9jb25zaXN0ZW50KGFkYXB0ZXItPnBkZXYsCisJCQkJICAgIGJ1ZnNpemUsCisJCQkJICAgIHJ4X3JpbmctPnBGYnIwUmluZ1ZhLCByeF9yaW5nLT5wRmJyMFJpbmdQYSk7CisKKwkJcnhfcmluZy0+cEZicjBSaW5nVmEgPSBOVUxMOworCX0KKyNlbmRpZgorCisJLyogRnJlZSBQYWNrZXQgU3RhdHVzIFJpbmcgKi8KKwlpZiAocnhfcmluZy0+cFBTUmluZ1ZhKSB7CisJCXJ4X3JpbmctPnBQU1JpbmdWYSA9ICh2b2lkICopKCh1aW50OF90ICopIHJ4X3JpbmctPnBQU1JpbmdWYSAtCisJCQkJCSAgICAgIHJ4X3JpbmctPnBQU1JpbmdPZmZzZXQpOworCisJCXBrdFN0YXRSaW5nU2l6ZSA9CisJCSAgICBzaXplb2YoUEtUX1NUQVRfREVTQ190KSAqIGFkYXB0ZXItPlJ4UmluZy5Qc3JOdW1FbnRyaWVzOworCisJCXBjaV9mcmVlX2NvbnNpc3RlbnQoYWRhcHRlci0+cGRldiwKKwkJCQkgICAgcGt0U3RhdFJpbmdTaXplICsgMHgwZmZmLAorCQkJCSAgICByeF9yaW5nLT5wUFNSaW5nVmEsIHJ4X3JpbmctPnBQU1JpbmdQYSk7CisKKwkJcnhfcmluZy0+cFBTUmluZ1ZhID0gTlVMTDsKKwl9CisKKwkvKiBGcmVlIGFyZWEgb2YgbWVtb3J5IGZvciB0aGUgd3JpdGViYWNrIG9mIHN0YXR1cyBpbmZvcm1hdGlvbiAqLworCWlmIChyeF9yaW5nLT5wUnhTdGF0dXNWYSkgeworCQlyeF9yaW5nLT5wUnhTdGF0dXNWYSA9ICh2b2lkICopKCh1aW50OF90ICopIHJ4X3JpbmctPnBSeFN0YXR1c1ZhIC0KKwkJCQkJCXJ4X3JpbmctPlJ4U3RhdHVzT2Zmc2V0KTsKKworCQlwY2lfZnJlZV9jb25zaXN0ZW50KGFkYXB0ZXItPnBkZXYsCisJCQkJICAgIHNpemVvZihSWF9TVEFUVVNfQkxPQ0tfdCkgKyAweDcsCisJCQkJICAgIHJ4X3JpbmctPnBSeFN0YXR1c1ZhLCByeF9yaW5nLT5wUnhTdGF0dXNQYSk7CisKKwkJcnhfcmluZy0+cFJ4U3RhdHVzVmEgPSBOVUxMOworCX0KKworCS8qIEZyZWUgcmVjZWl2ZSBidWZmZXIgcG9vbCAqLworCisJLyogRnJlZSByZWNlaXZlIHBhY2tldCBwb29sICovCisKKwkvKiBEZXN0cm95IHRoZSBsb29rYXNpZGUgKFJGRCkgcG9vbCAqLworCWlmIChNUF9URVNUX0ZMQUcoYWRhcHRlciwgZk1QX0FEQVBURVJfUkVDVl9MT09LQVNJREUpKSB7CisJCWttZW1fY2FjaGVfZGVzdHJveShyeF9yaW5nLT5SZWN2TG9va2FzaWRlKTsKKwkJTVBfQ0xFQVJfRkxBRyhhZGFwdGVyLCBmTVBfQURBUFRFUl9SRUNWX0xPT0tBU0lERSk7CisJfQorCisJLyogRnJlZSB0aGUgRkJSIExvb2t1cCBUYWJsZSAqLworI2lmZGVmIFVTRV9GQlIwCisJa2ZyZWUocnhfcmluZy0+RmJyWzBdKTsKKyNlbmRpZgorCisJa2ZyZWUocnhfcmluZy0+RmJyWzFdKTsKKworCS8qIFJlc2V0IENvdW50ZXJzICovCisJcnhfcmluZy0+blJlYWR5UmVjdiA9IDA7CisKKwlEQkdfTEVBVkUoZXQxMzF4X2RiZ2luZm8pOworfQorCisvKioKKyAqIGV0MTMxeF9pbml0X3JlY3YgLSBJbml0aWFsaXplIHJlY2VpdmUgZGF0YSBzdHJ1Y3R1cmVzLgorICogQGFkYXB0ZXI6IHBvaW50ZXIgdG8gb3VyIHByaXZhdGUgYWRhcHRlciBzdHJ1Y3R1cmUKKyAqCisgKiBSZXR1cm5zIDAgb24gc3VjY2VzcyBhbmQgZXJybm8gb24gZmFpbHVyZSAoYXMgZGVmaW5lZCBpbiBlcnJuby5oKQorICovCitpbnQgZXQxMzF4X2luaXRfcmVjdihzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJaW50IHN0YXR1cyA9IC1FTk9NRU07CisJUE1QX1JGRCBwTXBSZmQgPSBOVUxMOworCXVpbnQzMl90IFJmZENvdW50OworCXVpbnQzMl90IFRvdGFsTnVtUmZkID0gMDsKKwlSWF9SSU5HX3QgKnJ4X3JpbmcgPSBOVUxMOworCisJREJHX0VOVEVSKGV0MTMxeF9kYmdpbmZvKTsKKworCS8qIFNldHVwIHNvbWUgY29udmVuaWVuY2UgcG9pbnRlcnMgKi8KKwlyeF9yaW5nID0gKFJYX1JJTkdfdCAqKSAmIGFkYXB0ZXItPlJ4UmluZzsKKworCS8qIFNldHVwIGVhY2ggUkZEICovCisJZm9yIChSZmRDb3VudCA9IDA7IFJmZENvdW50IDwgcnhfcmluZy0+TnVtUmZkOyBSZmRDb3VudCsrKSB7CisJCXBNcFJmZCA9IChNUF9SRkQgKikga21lbV9jYWNoZV9hbGxvYyhyeF9yaW5nLT5SZWN2TG9va2FzaWRlLAorCQkJCQkJICAgICBHRlBfQVRPTUlDIHwgR0ZQX0RNQSk7CisKKwkJaWYgKCFwTXBSZmQpIHsKKwkJCURCR19FUlJPUihldDEzMXhfZGJnaW5mbywKKwkJCQkgICJDb3VsZG4ndCBhbGxvYyBSRkQgb3V0IG9mIGttZW1fY2FjaGVcbiIpOworCQkJc3RhdHVzID0gLUVOT01FTTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJc3RhdHVzID0gZXQxMzF4X3JmZF9yZXNvdXJjZXNfYWxsb2MoYWRhcHRlciwgcE1wUmZkKTsKKwkJaWYgKHN0YXR1cyAhPSAwKSB7CisJCQlEQkdfRVJST1IoZXQxMzF4X2RiZ2luZm8sCisJCQkJICAiQ291bGRuJ3QgYWxsb2MgcGFja2V0IGZvciBSRkRcbiIpOworCQkJa21lbV9jYWNoZV9mcmVlKHJ4X3JpbmctPlJlY3ZMb29rYXNpZGUsIHBNcFJmZCk7CisJCQljb250aW51ZTsKKwkJfQorCisJCS8qIEFkZCB0aGlzIFJGRCB0byB0aGUgUmVjdkxpc3QgKi8KKwkJbGlzdF9hZGRfdGFpbCgmcE1wUmZkLT5saXN0X25vZGUsICZyeF9yaW5nLT5SZWN2TGlzdCk7CisKKwkJLyogSW5jcmVtZW50IGJvdGggdGhlIGF2YWlsYWJsZSBSRkQncywgYW5kIHRoZSB0b3RhbCBSRkQncy4gKi8KKwkJcnhfcmluZy0+blJlYWR5UmVjdisrOworCQlUb3RhbE51bVJmZCsrOworCX0KKworCWlmIChUb3RhbE51bVJmZCA+IE5JQ19NSU5fTlVNX1JGRCkgeworCQlzdGF0dXMgPSAwOworCX0KKworCXJ4X3JpbmctPk51bVJmZCA9IFRvdGFsTnVtUmZkOworCisJaWYgKHN0YXR1cyAhPSAwKSB7CisJCWttZW1fY2FjaGVfZnJlZShyeF9yaW5nLT5SZWN2TG9va2FzaWRlLCBwTXBSZmQpOworCQlEQkdfRVJST1IoZXQxMzF4X2RiZ2luZm8sCisJCQkgICJBbGxvY2F0aW9uIHByb2JsZW1zIGluIGV0MTMxeF9pbml0X3JlY3ZcbiIpOworCX0KKworCURCR19MRUFWRShldDEzMXhfZGJnaW5mbyk7CisJcmV0dXJuIHN0YXR1czsKK30KKworLyoqCisgKiBldDEzMXhfcmZkX3Jlc291cmNlc19hbGxvYworICogQGFkYXB0ZXI6IHBvaW50ZXIgdG8gb3VyIHByaXZhdGUgYWRhcHRlciBzdHJ1Y3R1cmUKKyAqIEBwTXBSZmQ6IHBvaW50ZXIgdG8gYSBSRkQKKyAqCisgKiBSZXR1cm5zIDAgb24gc3VjY2VzcyBhbmQgZXJybm8gb24gZmFpbHVyZSAoYXMgZGVmaW5lZCBpbiBlcnJuby5oKQorICovCitpbnQgZXQxMzF4X3JmZF9yZXNvdXJjZXNfYWxsb2Moc3RydWN0IGV0MTMxeF9hZGFwdGVyICphZGFwdGVyLCBNUF9SRkQgKnBNcFJmZCkKK3sKKwlwTXBSZmQtPlBhY2tldCA9IE5VTEw7CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBldDEzMXhfcmZkX3Jlc291cmNlc19mcmVlIC0gRnJlZSB0aGUgcGFja2V0IGFsbG9jYXRlZCBmb3IgdGhlIGdpdmVuIFJGRAorICogQGFkYXB0ZXI6IHBvaW50ZXIgdG8gb3VyIHByaXZhdGUgYWRhcHRlciBzdHJ1Y3R1cmUKKyAqIEBwTXBSZmQ6IHBvaW50ZXIgdG8gYSBSRkQKKyAqLwordm9pZCBldDEzMXhfcmZkX3Jlc291cmNlc19mcmVlKHN0cnVjdCBldDEzMXhfYWRhcHRlciAqYWRhcHRlciwgTVBfUkZEICpwTXBSZmQpCit7CisJcE1wUmZkLT5QYWNrZXQgPSBOVUxMOworCWttZW1fY2FjaGVfZnJlZShhZGFwdGVyLT5SeFJpbmcuUmVjdkxvb2thc2lkZSwgcE1wUmZkKTsKK30KKworLyoqCisgKiBDb25maWdSeERtYVJlZ3MgLSBTdGFydCBvZiBSeF9ETUEgaW5pdCBzZXF1ZW5jZQorICogQHBBZGFwdGVyOiBwb2ludGVyIHRvIG91ciBhZGFwdGVyIHN0cnVjdHVyZQorICovCit2b2lkIENvbmZpZ1J4RG1hUmVncyhzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKnBBZGFwdGVyKQoreworCXN0cnVjdCBfUlhETUFfdCBfX2lvbWVtICpwUnhEbWEgPSAmcEFkYXB0ZXItPkNTUkFkZHJlc3MtPnJ4ZG1hOworCXN0cnVjdCBfcnhfcmluZ190ICpwUnhMb2NhbCA9ICZwQWRhcHRlci0+UnhSaW5nOworCVBGQlJfREVTQ190IHBGYnJFbnRyeTsKKwl1aW50MzJfdCBpRW50cnk7CisJUlhETUFfUFNSX05VTV9ERVNfdCBwc3JfbnVtX2RlczsKKwl1bnNpZ25lZCBsb25nIGxvY2tmbGFnczsKKworCURCR19FTlRFUihldDEzMXhfZGJnaW5mbyk7CisKKwkvKiBIYWx0IFJYRE1BIHRvIHBlcmZvcm0gdGhlIHJlY29uZmlndXJlLiAgKi8KKwlldDEzMXhfcnhfZG1hX2Rpc2FibGUocEFkYXB0ZXIpOworCisJLyogTG9hZCB0aGUgY29tcGxldGlvbiB3cml0ZWJhY2sgcGh5c2ljYWwgYWRkcmVzcworCSAqCisJICogTk9URSA6IHBjaV9hbGxvY19jb25zaXN0ZW50KCksIHVzZWQgYWJvdmUgdG8gYWxsb2MgRE1BIHJlZ2lvbnMsCisJICogQUxXQVlTIHJldHVybnMgU0FDICgzMi1iaXQpIGFkZHJlc3Nlcy4gSWYgREFDICg2NC1iaXQpIGFkZHJlc3NlcworCSAqIGFyZSBldmVyIHJldHVybmVkLCBtYWtlIHN1cmUgdGhlIGhpZ2ggcGFydCBpcyByZXRyaWV2ZWQgaGVyZQorCSAqIGJlZm9yZSBzdG9yaW5nIHRoZSBhZGp1c3RlZCBhZGRyZXNzLgorCSAqLworCXdyaXRlbCgodWludDMyX3QpIChwUnhMb2NhbC0+UnhTdGF0dXNSZWFsUEEgPj4gMzIpLAorCSAgICAgICAmcFJ4RG1hLT5kbWFfd2JfYmFzZV9oaSk7CisJd3JpdGVsKCh1aW50MzJfdCkgcFJ4TG9jYWwtPlJ4U3RhdHVzUmVhbFBBLCAmcFJ4RG1hLT5kbWFfd2JfYmFzZV9sbyk7CisKKwltZW1zZXQocFJ4TG9jYWwtPnBSeFN0YXR1c1ZhLCAwLCBzaXplb2YoUlhfU1RBVFVTX0JMT0NLX3QpKTsKKworCS8qIFNldCB0aGUgYWRkcmVzcyBhbmQgcGFyYW1ldGVycyBvZiB0aGUgcGFja2V0IHN0YXR1cyByaW5nIGludG8gdGhlCisJICogMTMxMCdzIHJlZ2lzdGVycworCSAqLworCXdyaXRlbCgodWludDMyX3QpIChwUnhMb2NhbC0+cFBTUmluZ1JlYWxQYSA+PiAzMiksCisJICAgICAgICZwUnhEbWEtPnBzcl9iYXNlX2hpKTsKKwl3cml0ZWwoKHVpbnQzMl90KSBwUnhMb2NhbC0+cFBTUmluZ1JlYWxQYSwgJnBSeERtYS0+cHNyX2Jhc2VfbG8pOworCXdyaXRlbChwUnhMb2NhbC0+UHNyTnVtRW50cmllcyAtIDEsICZwUnhEbWEtPnBzcl9udW1fZGVzLnZhbHVlKTsKKwl3cml0ZWwoMCwgJnBSeERtYS0+cHNyX2Z1bGxfb2Zmc2V0LnZhbHVlKTsKKworCXBzcl9udW1fZGVzLnZhbHVlID0gcmVhZGwoJnBSeERtYS0+cHNyX251bV9kZXMudmFsdWUpOworCXdyaXRlbCgocHNyX251bV9kZXMuYml0cy5wc3JfbmRlcyAqIExPX01BUktfUEVSQ0VOVF9GT1JfUFNSKSAvIDEwMCwKKwkgICAgICAgJnBSeERtYS0+cHNyX21pbl9kZXMudmFsdWUpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnBBZGFwdGVyLT5SY3ZMb2NrLCBsb2NrZmxhZ3MpOworCisJLyogVGhlc2UgbG9jYWwgdmFyaWFibGVzIHRyYWNrIHRoZSBQU1IgaW4gdGhlIGFkYXB0ZXIgc3RydWN0dXJlICovCisJcFJ4TG9jYWwtPmxvY2FsX3Bzcl9mdWxsLmJpdHMucHNyX2Z1bGwgPSAwOworCXBSeExvY2FsLT5sb2NhbF9wc3JfZnVsbC5iaXRzLnBzcl9mdWxsX3dyYXAgPSAwOworCisJLyogTm93J3MgdGhlIGJlc3QgdGltZSB0byBpbml0aWFsaXplIEZCUjEgY29udGVudHMgKi8KKwlwRmJyRW50cnkgPSAoUEZCUl9ERVNDX3QpIHBSeExvY2FsLT5wRmJyMVJpbmdWYTsKKwlmb3IgKGlFbnRyeSA9IDA7IGlFbnRyeSA8IHBSeExvY2FsLT5GYnIxTnVtRW50cmllczsgaUVudHJ5KyspIHsKKwkJcEZickVudHJ5LT5hZGRyX2hpID0gcFJ4TG9jYWwtPkZiclsxXS0+UEFIaWdoW2lFbnRyeV07CisJCXBGYnJFbnRyeS0+YWRkcl9sbyA9IHBSeExvY2FsLT5GYnJbMV0tPlBBTG93W2lFbnRyeV07CisJCXBGYnJFbnRyeS0+d29yZDIuYml0cy5iaSA9IGlFbnRyeTsKKwkJcEZickVudHJ5Kys7CisJfQorCisJLyogU2V0IHRoZSBhZGRyZXNzIGFuZCBwYXJhbWV0ZXJzIG9mIEZyZWUgYnVmZmVyIHJpbmcgMSAoYW5kIDAgaWYKKwkgKiByZXF1aXJlZCkgaW50byB0aGUgMTMxMCdzIHJlZ2lzdGVycworCSAqLworCXdyaXRlbCgodWludDMyX3QpIChwUnhMb2NhbC0+RmJyMVJlYWxwYSA+PiAzMiksICZwUnhEbWEtPmZicjFfYmFzZV9oaSk7CisJd3JpdGVsKCh1aW50MzJfdCkgcFJ4TG9jYWwtPkZicjFSZWFscGEsICZwUnhEbWEtPmZicjFfYmFzZV9sbyk7CisJd3JpdGVsKHBSeExvY2FsLT5GYnIxTnVtRW50cmllcyAtIDEsICZwUnhEbWEtPmZicjFfbnVtX2Rlcy52YWx1ZSk7CisKKwl7CisJCURNQTEwV190IGZicjFfZnVsbCA9IHsgMCB9OworCisJCWZicjFfZnVsbC5iaXRzLnZhbCA9IDA7CisJCWZicjFfZnVsbC5iaXRzLndyYXAgPSAxOworCQl3cml0ZWwoZmJyMV9mdWxsLnZhbHVlLCAmcFJ4RG1hLT5mYnIxX2Z1bGxfb2Zmc2V0LnZhbHVlKTsKKwl9CisKKwkvKiBUaGlzIHZhcmlhYmxlIHRyYWNrcyB0aGUgZnJlZSBidWZmZXIgcmluZyAxIGZ1bGwgcG9zaXRpb24sIHNvIGl0CisJICogaGFzIHRvIG1hdGNoIHRoZSBhYm92ZS4KKwkgKi8KKwlwUnhMb2NhbC0+bG9jYWxfRmJyMV9mdWxsLmJpdHMudmFsID0gMDsKKwlwUnhMb2NhbC0+bG9jYWxfRmJyMV9mdWxsLmJpdHMud3JhcCA9IDE7CisJd3JpdGVsKCgocFJ4TG9jYWwtPkZicjFOdW1FbnRyaWVzICogTE9fTUFSS19QRVJDRU5UX0ZPUl9SWCkgLyAxMDApIC0gMSwKKwkgICAgICAgJnBSeERtYS0+ZmJyMV9taW5fZGVzLnZhbHVlKTsKKworI2lmZGVmIFVTRV9GQlIwCisJLyogTm93J3MgdGhlIGJlc3QgdGltZSB0byBpbml0aWFsaXplIEZCUjAgY29udGVudHMgKi8KKwlwRmJyRW50cnkgPSAoUEZCUl9ERVNDX3QpIHBSeExvY2FsLT5wRmJyMFJpbmdWYTsKKwlmb3IgKGlFbnRyeSA9IDA7IGlFbnRyeSA8IHBSeExvY2FsLT5GYnIwTnVtRW50cmllczsgaUVudHJ5KyspIHsKKwkJcEZickVudHJ5LT5hZGRyX2hpID0gcFJ4TG9jYWwtPkZiclswXS0+UEFIaWdoW2lFbnRyeV07CisJCXBGYnJFbnRyeS0+YWRkcl9sbyA9IHBSeExvY2FsLT5GYnJbMF0tPlBBTG93W2lFbnRyeV07CisJCXBGYnJFbnRyeS0+d29yZDIuYml0cy5iaSA9IGlFbnRyeTsKKwkJcEZickVudHJ5Kys7CisJfQorCisJd3JpdGVsKCh1aW50MzJfdCkgKHBSeExvY2FsLT5GYnIwUmVhbHBhID4+IDMyKSwgJnBSeERtYS0+ZmJyMF9iYXNlX2hpKTsKKwl3cml0ZWwoKHVpbnQzMl90KSBwUnhMb2NhbC0+RmJyMFJlYWxwYSwgJnBSeERtYS0+ZmJyMF9iYXNlX2xvKTsKKwl3cml0ZWwocFJ4TG9jYWwtPkZicjBOdW1FbnRyaWVzIC0gMSwgJnBSeERtYS0+ZmJyMF9udW1fZGVzLnZhbHVlKTsKKworCXsKKwkJRE1BMTBXX3QgZmJyMF9mdWxsID0geyAwIH07CisKKwkJZmJyMF9mdWxsLmJpdHMudmFsID0gMDsKKwkJZmJyMF9mdWxsLmJpdHMud3JhcCA9IDE7CisJCXdyaXRlbChmYnIwX2Z1bGwudmFsdWUsICZwUnhEbWEtPmZicjBfZnVsbF9vZmZzZXQudmFsdWUpOworCX0KKworCS8qIFRoaXMgdmFyaWFibGUgdHJhY2tzIHRoZSBmcmVlIGJ1ZmZlciByaW5nIDAgZnVsbCBwb3NpdGlvbiwgc28gaXQKKwkgKiBoYXMgdG8gbWF0Y2ggdGhlIGFib3ZlLgorCSAqLworCXBSeExvY2FsLT5sb2NhbF9GYnIwX2Z1bGwuYml0cy52YWwgPSAwOworCXBSeExvY2FsLT5sb2NhbF9GYnIwX2Z1bGwuYml0cy53cmFwID0gMTsKKwl3cml0ZWwoKChwUnhMb2NhbC0+RmJyME51bUVudHJpZXMgKiBMT19NQVJLX1BFUkNFTlRfRk9SX1JYKSAvIDEwMCkgLSAxLAorCSAgICAgICAmcFJ4RG1hLT5mYnIwX21pbl9kZXMudmFsdWUpOworI2VuZGlmCisKKwkvKiBQcm9ncmFtIHRoZSBudW1iZXIgb2YgcGFja2V0cyB3ZSB3aWxsIHJlY2VpdmUgYmVmb3JlIGdlbmVyYXRpbmcgYW4KKwkgKiBpbnRlcnJ1cHQuCisJICogRm9yIHZlcnNpb24gQiBzaWxpY29uLCB0aGlzIHZhbHVlIGdldHMgdXBkYXRlZCBvbmNlIGF1dG9uZWcgaXMKKwkgKmNvbXBsZXRlLgorCSAqLworCXdyaXRlbChwQWRhcHRlci0+UmVnaXN0cnlSeE51bUJ1ZmZlcnMsICZwUnhEbWEtPm51bV9wa3RfZG9uZS52YWx1ZSk7CisKKwkvKiBUaGUgInRpbWVfZG9uZSIgaXMgbm90IHdvcmtpbmcgY29ycmVjdGx5IHRvIGNvYWxlc2NlIGludGVycnVwdHMKKwkgKiBhZnRlciBhIGdpdmVuIHRpbWUgcGVyaW9kLCBidXQgcmF0aGVyIGlzIGdpdmluZyB1cyBhbiBpbnRlcnJ1cHQKKwkgKiByZWdhcmRsZXNzIG9mIHdoZXRoZXIgd2UgaGF2ZSByZWNlaXZlZCBwYWNrZXRzLgorCSAqIFRoaXMgdmFsdWUgZ2V0cyB1cGRhdGVkIG9uY2UgYXV0b25lZyBpcyBjb21wbGV0ZS4KKwkgKi8KKwl3cml0ZWwocEFkYXB0ZXItPlJlZ2lzdHJ5UnhUaW1lSW50ZXJ2YWwsICZwUnhEbWEtPm1heF9wa3RfdGltZS52YWx1ZSk7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwQWRhcHRlci0+UmN2TG9jaywgbG9ja2ZsYWdzKTsKKworCURCR19MRUFWRShldDEzMXhfZGJnaW5mbyk7Cit9CisKKy8qKgorICogU2V0UnhEbWFUaW1lciAtIFNldCB0aGUgaGVhcnRiZWF0IHRpbWVyIGFjY29yZGluZyB0byBsaW5lIHJhdGUuCisgKiBAcEFkYXB0ZXI6IHBvaW50ZXIgdG8gb3VyIGFkYXB0ZXIgc3RydWN0dXJlCisgKi8KK3ZvaWQgU2V0UnhEbWFUaW1lcihzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKnBBZGFwdGVyKQoreworCS8qIEZvciB2ZXJzaW9uIEIgc2lsaWNvbiwgd2UgZG8gbm90IHVzZSB0aGUgUnhETUEgdGltZXIgZm9yIDEwIGFuZCAxMDAKKwkgKiBNYml0cy9zIGxpbmUgcmF0ZXMuIFdlIGRvIG5vdCBlbmFibGUgYW5kIFJ4RE1BIGludGVycnVwdCBjb2FsZXNjaW5nLgorCSAqLworCWlmICgocEFkYXB0ZXItPnVpTGlua1NwZWVkID09IFRSVUVQSFlfU1BFRURfMTAwTUJQUykgfHwKKwkgICAgKHBBZGFwdGVyLT51aUxpbmtTcGVlZCA9PSBUUlVFUEhZX1NQRUVEXzEwTUJQUykpIHsKKwkJd3JpdGVsKDAsICZwQWRhcHRlci0+Q1NSQWRkcmVzcy0+cnhkbWEubWF4X3BrdF90aW1lLnZhbHVlKTsKKwkJd3JpdGVsKDEsICZwQWRhcHRlci0+Q1NSQWRkcmVzcy0+cnhkbWEubnVtX3BrdF9kb25lLnZhbHVlKTsKKwl9Cit9CisKKy8qKgorICogZXQxMzF4X3J4X2RtYV9kaXNhYmxlIC0gU3RvcCBvZiBSeF9ETUEgb24gdGhlIEVUMTMxMAorICogQHBBZGFwdGVyOiBwb2ludGVyIHRvIG91ciBhZGFwdGVyIHN0cnVjdHVyZQorICovCit2b2lkIGV0MTMxeF9yeF9kbWFfZGlzYWJsZShzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKnBBZGFwdGVyKQoreworCVJYRE1BX0NTUl90IGNzcjsKKworCURCR19FTlRFUihldDEzMXhfZGJnaW5mbyk7CisKKwkvKiBTZXR1cCB0aGUgcmVjZWl2ZSBkbWEgY29uZmlndXJhdGlvbiByZWdpc3RlciAqLworCXdyaXRlbCgweDAwMDAyMDAxLCAmcEFkYXB0ZXItPkNTUkFkZHJlc3MtPnJ4ZG1hLmNzci52YWx1ZSk7CisJY3NyLnZhbHVlID0gcmVhZGwoJnBBZGFwdGVyLT5DU1JBZGRyZXNzLT5yeGRtYS5jc3IudmFsdWUpOworCWlmIChjc3IuYml0cy5oYWx0X3N0YXR1cyAhPSAxKSB7CisJCXVkZWxheSg1KTsKKwkJY3NyLnZhbHVlID0gcmVhZGwoJnBBZGFwdGVyLT5DU1JBZGRyZXNzLT5yeGRtYS5jc3IudmFsdWUpOworCQlpZiAoY3NyLmJpdHMuaGFsdF9zdGF0dXMgIT0gMSkgeworCQkJREJHX0VSUk9SKGV0MTMxeF9kYmdpbmZvLAorCQkJCSAgIlJYIERtYSBmYWlsZWQgdG8gZW50ZXIgaGFsdCBzdGF0ZS4gQ1NSIDB4JTA4eFxuIiwKKwkJCQkgIGNzci52YWx1ZSk7CisJCX0KKwl9CisKKwlEQkdfTEVBVkUoZXQxMzF4X2RiZ2luZm8pOworfQorCisvKioKKyAqIGV0MTMxeF9yeF9kbWFfZW5hYmxlIC0gcmUtc3RhcnQgb2YgUnhfRE1BIG9uIHRoZSBFVDEzMTAuCisgKiBAcEFkYXB0ZXI6IHBvaW50ZXIgdG8gb3VyIGFkYXB0ZXIgc3RydWN0dXJlCisgKi8KK3ZvaWQgZXQxMzF4X3J4X2RtYV9lbmFibGUoc3RydWN0IGV0MTMxeF9hZGFwdGVyICpwQWRhcHRlcikKK3sKKwlEQkdfUlhfRU5URVIoZXQxMzF4X2RiZ2luZm8pOworCisJaWYgKHBBZGFwdGVyLT5SZWdpc3RyeVBoeUxvb3BiaykgeworCS8qIFJ4RE1BIGlzIGRpc2FibGVkIGZvciBsb29wYmFjayBvcGVyYXRpb24uICovCisJCXdyaXRlbCgweDEsICZwQWRhcHRlci0+Q1NSQWRkcmVzcy0+cnhkbWEuY3NyLnZhbHVlKTsKKwl9IGVsc2UgeworCS8qIFNldHVwIHRoZSByZWNlaXZlIGRtYSBjb25maWd1cmF0aW9uIHJlZ2lzdGVyIGZvciBub3JtYWwgb3BlcmF0aW9uICovCisJCVJYRE1BX0NTUl90IGNzciA9IHsgMCB9OworCisJCWNzci5iaXRzLmZicjFfZW5hYmxlID0gMTsKKwkJaWYgKHBBZGFwdGVyLT5SeFJpbmcuRmJyMUJ1ZmZlclNpemUgPT0gNDA5NikgeworCQkJY3NyLmJpdHMuZmJyMV9zaXplID0gMTsKKwkJfSBlbHNlIGlmIChwQWRhcHRlci0+UnhSaW5nLkZicjFCdWZmZXJTaXplID09IDgxOTIpIHsKKwkJCWNzci5iaXRzLmZicjFfc2l6ZSA9IDI7CisJCX0gZWxzZSBpZiAocEFkYXB0ZXItPlJ4UmluZy5GYnIxQnVmZmVyU2l6ZSA9PSAxNjM4NCkgeworCQkJY3NyLmJpdHMuZmJyMV9zaXplID0gMzsKKwkJfQorI2lmZGVmIFVTRV9GQlIwCisJCWNzci5iaXRzLmZicjBfZW5hYmxlID0gMTsKKwkJaWYgKHBBZGFwdGVyLT5SeFJpbmcuRmJyMEJ1ZmZlclNpemUgPT0gMjU2KSB7CisJCQljc3IuYml0cy5mYnIwX3NpemUgPSAxOworCQl9IGVsc2UgaWYgKHBBZGFwdGVyLT5SeFJpbmcuRmJyMEJ1ZmZlclNpemUgPT0gNTEyKSB7CisJCQljc3IuYml0cy5mYnIwX3NpemUgPSAyOworCQl9IGVsc2UgaWYgKHBBZGFwdGVyLT5SeFJpbmcuRmJyMEJ1ZmZlclNpemUgPT0gMTAyNCkgeworCQkJY3NyLmJpdHMuZmJyMF9zaXplID0gMzsKKwkJfQorI2VuZGlmCisJCXdyaXRlbChjc3IudmFsdWUsICZwQWRhcHRlci0+Q1NSQWRkcmVzcy0+cnhkbWEuY3NyLnZhbHVlKTsKKworCQljc3IudmFsdWUgPSByZWFkbCgmcEFkYXB0ZXItPkNTUkFkZHJlc3MtPnJ4ZG1hLmNzci52YWx1ZSk7CisJCWlmIChjc3IuYml0cy5oYWx0X3N0YXR1cyAhPSAwKSB7CisJCQl1ZGVsYXkoNSk7CisJCQljc3IudmFsdWUgPSByZWFkbCgmcEFkYXB0ZXItPkNTUkFkZHJlc3MtPnJ4ZG1hLmNzci52YWx1ZSk7CisJCQlpZiAoY3NyLmJpdHMuaGFsdF9zdGF0dXMgIT0gMCkgeworCQkJCURCR19FUlJPUihldDEzMXhfZGJnaW5mbywKKwkJCQkJICAiUlggRG1hIGZhaWxlZCB0byBleGl0IGhhbHQgc3RhdGUuICBDU1IgMHglMDh4XG4iLAorCQkJCQkgIGNzci52YWx1ZSk7CisJCQl9CisJCX0KKwl9CisKKwlEQkdfUlhfTEVBVkUoZXQxMzF4X2RiZ2luZm8pOworfQorCisvKioKKyAqIG5pY19yeF9wa3RzIC0gQ2hlY2tzIHRoZSBoYXJkd2FyZSBmb3IgYXZhaWxhYmxlIHBhY2tldHMKKyAqIEBwQWRhcHRlcjogcG9pbnRlciB0byBvdXIgYWRhcHRlcgorICoKKyAqIFJldHVybnMgcE1wUmZkLCBhIHBvaW50ZXIgdG8gb3VyIE1QUkZELgorICoKKyAqIENoZWNrcyB0aGUgaGFyZHdhcmUgZm9yIGF2YWlsYWJsZSBwYWNrZXRzLCB1c2luZyBjb21wbGV0aW9uIHJpbmcKKyAqIElmIHBhY2tldHMgYXJlIGF2YWlsYWJsZSwgaXQgZ2V0cyBhbiBSRkQgZnJvbSB0aGUgUmVjdkxpc3QsIGF0dGFjaGVzCisgKiB0aGUgcGFja2V0IHRvIGl0LCBwdXRzIHRoZSBSRkQgaW4gdGhlIFJlY3ZQZW5kTGlzdCwgYW5kIGFsc28gcmV0dXJucworICogdGhlIHBvaW50ZXIgdG8gdGhlIFJGRC4KKyAqLworUE1QX1JGRCBuaWNfcnhfcGt0cyhzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKnBBZGFwdGVyKQoreworCXN0cnVjdCBfcnhfcmluZ190ICpwUnhMb2NhbCA9ICZwQWRhcHRlci0+UnhSaW5nOworCVBSWF9TVEFUVVNfQkxPQ0tfdCBwUnhTdGF0dXNCbG9jazsKKwlQUEtUX1NUQVRfREVTQ190IHBQU1JFbnRyeTsKKwlQTVBfUkZEIHBNcFJmZDsKKwl1aW50MzJfdCBuSW5kZXg7CisJdWludDhfdCAqcEJ1ZlZhOworCXVuc2lnbmVkIGxvbmcgbG9ja2ZsYWdzOworCXN0cnVjdCBsaXN0X2hlYWQgKmVsZW1lbnQ7CisJdWludDhfdCByaW5nSW5kZXg7CisJdWludDE2X3QgYnVmZmVySW5kZXg7CisJdWludDMyX3QgbG9jYWxMZW47CisJUEtUX1NUQVRfREVTQ19XT1JEMF90IFdvcmQwOworCisKKwlEQkdfUlhfRU5URVIoZXQxMzF4X2RiZ2luZm8pOworCisJLyogUlggU3RhdHVzIGJsb2NrIGlzIHdyaXR0ZW4gYnkgdGhlIERNQSBlbmdpbmUgcHJpb3IgdG8gZXZlcnkKKwkgKiBpbnRlcnJ1cHQuIEl0IGNvbnRhaW5zIHRoZSBuZXh0IHRvIGJlIHVzZWQgZW50cnkgaW4gdGhlIFBhY2tldAorCSAqIFN0YXR1cyBSaW5nLCBhbmQgYWxzbyB0aGUgdHdvIEZyZWUgQnVmZmVyIHJpbmdzLgorCSAqLworCXBSeFN0YXR1c0Jsb2NrID0gKFBSWF9TVEFUVVNfQkxPQ0tfdCkgcFJ4TG9jYWwtPnBSeFN0YXR1c1ZhOworCisJaWYgKHBSeFN0YXR1c0Jsb2NrLT5Xb3JkMS5iaXRzLlBTUm9mZnNldCA9PQorCQkJcFJ4TG9jYWwtPmxvY2FsX3Bzcl9mdWxsLmJpdHMucHNyX2Z1bGwgJiYKKwkgICAgcFJ4U3RhdHVzQmxvY2stPldvcmQxLmJpdHMuUFNSd3JhcCA9PQorCSAgICAJCXBSeExvY2FsLT5sb2NhbF9wc3JfZnVsbC5iaXRzLnBzcl9mdWxsX3dyYXApIHsKKwkJLyogTG9va3MgbGlrZSB0aGlzIHJpbmcgaXMgbm90IHVwZGF0ZWQgeWV0ICovCisJCURCR19SWChldDEzMXhfZGJnaW5mbywgIigwKVxuIik7CisJCURCR19SWF9MRUFWRShldDEzMXhfZGJnaW5mbyk7CisJCXJldHVybiBOVUxMOworCX0KKworCS8qIFRoZSBwYWNrZXQgc3RhdHVzIHJpbmcgaW5kaWNhdGVzIHRoYXQgZGF0YSBpcyBhdmFpbGFibGUuICovCisJcFBTUkVudHJ5ID0gKFBQS1RfU1RBVF9ERVNDX3QpIChwUnhMb2NhbC0+cFBTUmluZ1ZhKSArCisJCQlwUnhMb2NhbC0+bG9jYWxfcHNyX2Z1bGwuYml0cy5wc3JfZnVsbDsKKworCS8qIEdyYWIgYW55IGluZm9ybWF0aW9uIHRoYXQgaXMgcmVxdWlyZWQgb25jZSB0aGUgUFNSIGlzCisJICogYWR2YW5jZWQsIHNpbmNlIHdlIGNhbiBubyBsb25nZXIgcmVseSBvbiB0aGUgbWVtb3J5IGJlaW5nCisJICogYWNjdXJhdGUKKwkgKi8KKwlsb2NhbExlbiA9IHBQU1JFbnRyeS0+d29yZDEuYml0cy5sZW5ndGg7CisJcmluZ0luZGV4ID0gKHVpbnQ4X3QpIHBQU1JFbnRyeS0+d29yZDEuYml0cy5yaTsKKwlidWZmZXJJbmRleCA9ICh1aW50MTZfdCkgcFBTUkVudHJ5LT53b3JkMS5iaXRzLmJpOworCVdvcmQwID0gcFBTUkVudHJ5LT53b3JkMDsKKworCURCR19SWChldDEzMXhfZGJnaW5mbywgIlJYIFBBQ0tFVCBTVEFUVVNcbiIpOworCURCR19SWChldDEzMXhfZGJnaW5mbywgIlx0bGVuZ3RoICAgICAgOiAlZFxuIiwgbG9jYWxMZW4pOworCURCR19SWChldDEzMXhfZGJnaW5mbywgIlx0cmluZ0luZGV4ICAgOiAlZFxuIiwgcmluZ0luZGV4KTsKKwlEQkdfUlgoZXQxMzF4X2RiZ2luZm8sICJcdGJ1ZmZlckluZGV4IDogJWRcbiIsIGJ1ZmZlckluZGV4KTsKKwlEQkdfUlgoZXQxMzF4X2RiZ2luZm8sICJcdHdvcmQwICAgICAgIDogMHglMDh4XG4iLCBXb3JkMC52YWx1ZSk7CisKKyNpZiAwCisJLyogQ2hlY2sgdGhlIFN0YXR1cyBXb3JkIHRoYXQgdGhlIE1BQyBoYXMgYXBwZW5kZWQgdG8gdGhlIFBTUgorCSAqIGVudHJ5IGluIGNhc2UgdGhlIE1BQyBoYXMgZGV0ZWN0ZWQgZXJyb3JzLgorCSAqLworCWlmIChXb3JkMC52YWx1ZSAmIEFMQ0FURUxfQkFEX1NUQVRVUykgeworCQlEQkdfRVJST1IoZXQxMzF4X2RiZ2luZm8sCisJCQkgICJOSUNSeFBrdHMgPj4gQWxjYXRlbCBTdGF0dXMgV29yZCBlcnJvci4iCisJCQkgICJWYWx1ZSAweCUwOHhcbiIsIHBQU1JFbnRyeS0+d29yZDAudmFsdWUpOworCX0KKyNlbmRpZgorCisJLyogSW5kaWNhdGUgdGhhdCB3ZSBoYXZlIHVzZWQgdGhpcyBQU1IgZW50cnkuICovCisJaWYgKCsrcFJ4TG9jYWwtPmxvY2FsX3Bzcl9mdWxsLmJpdHMucHNyX2Z1bGwgPgorCSAgICBwUnhMb2NhbC0+UHNyTnVtRW50cmllcyAtIDEpIHsKKwkJcFJ4TG9jYWwtPmxvY2FsX3Bzcl9mdWxsLmJpdHMucHNyX2Z1bGwgPSAwOworCQlwUnhMb2NhbC0+bG9jYWxfcHNyX2Z1bGwuYml0cy5wc3JfZnVsbF93cmFwIF49IDE7CisJfQorCisJd3JpdGVsKHBSeExvY2FsLT5sb2NhbF9wc3JfZnVsbC52YWx1ZSwKKwkgICAgICAgJnBBZGFwdGVyLT5DU1JBZGRyZXNzLT5yeGRtYS5wc3JfZnVsbF9vZmZzZXQudmFsdWUpOworCisjaWZuZGVmIFVTRV9GQlIwCisJaWYgKHJpbmdJbmRleCAhPSAxKSB7CisJCURCR19FUlJPUihldDEzMXhfZGJnaW5mbywKKwkJCSAgIk5JQ1J4UGt0cyBQU1IgRW50cnkgJWQgaW5kaWNhdGVzICIKKwkJCSAgIkJ1ZmZlciBSaW5nIDAgaW4gdXNlXG4iLAorCQkJICBwUnhMb2NhbC0+bG9jYWxfcHNyX2Z1bGwuYml0cy5wc3JfZnVsbCk7CisJCURCR19SWF9MRUFWRShldDEzMXhfZGJnaW5mbyk7CisJCXJldHVybiBOVUxMOworCX0KKyNlbmRpZgorCisjaWZkZWYgVVNFX0ZCUjAKKwlpZiAocmluZ0luZGV4ID4gMSB8fAorCSAgICAocmluZ0luZGV4ID09IDAgJiYKKwkgICAgIGJ1ZmZlckluZGV4ID4gcFJ4TG9jYWwtPkZicjBOdW1FbnRyaWVzIC0gMSkgfHwKKwkgICAgKHJpbmdJbmRleCA9PSAxICYmCisJICAgICBidWZmZXJJbmRleCA+IHBSeExvY2FsLT5GYnIxTnVtRW50cmllcyAtIDEpKQorI2Vsc2UKKwlpZiAocmluZ0luZGV4ICE9IDEgfHwKKwkgICAgYnVmZmVySW5kZXggPiBwUnhMb2NhbC0+RmJyMU51bUVudHJpZXMgLSAxKQorI2VuZGlmCisJeworCQkvKiBJbGxlZ2FsIGJ1ZmZlciBvciByaW5nIGluZGV4IGNhbm5vdCBiZSB1c2VkIGJ5IFMvVyovCisJCURCR19FUlJPUihldDEzMXhfZGJnaW5mbywKKwkJCSAgIk5JQ1J4UGt0cyBQU1IgRW50cnkgJWQgaW5kaWNhdGVzICIKKwkJCSAgImxlbmd0aCBvZiAlZCBhbmQvb3IgYmFkIGJpKCVkKVxuIiwKKwkJCSAgcFJ4TG9jYWwtPmxvY2FsX3Bzcl9mdWxsLmJpdHMucHNyX2Z1bGwsCisJCQkgIGxvY2FsTGVuLCBidWZmZXJJbmRleCk7CisJCURCR19SWF9MRUFWRShldDEzMXhfZGJnaW5mbyk7CisJCXJldHVybiBOVUxMOworCX0KKworCS8qIEdldCBhbmQgZmlsbCB0aGUgUkZELiAqLworCXNwaW5fbG9ja19pcnFzYXZlKCZwQWRhcHRlci0+UmN2TG9jaywgbG9ja2ZsYWdzKTsKKworCXBNcFJmZCA9IE5VTEw7CisJZWxlbWVudCA9IHBSeExvY2FsLT5SZWN2TGlzdC5uZXh0OworCXBNcFJmZCA9IChQTVBfUkZEKSBsaXN0X2VudHJ5KGVsZW1lbnQsIE1QX1JGRCwgbGlzdF9ub2RlKTsKKworCWlmIChwTXBSZmQgPT0gTlVMTCkgeworCQlEQkdfUlgoZXQxMzF4X2RiZ2luZm8sCisJCSAgICAgICAiTlVMTCBSRkQgcmV0dXJuZWQgZnJvbSBSZWN2TGlzdCB2aWEgbGlzdF9lbnRyeSgpXG4iKTsKKwkJREJHX1JYX0xFQVZFKGV0MTMxeF9kYmdpbmZvKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcEFkYXB0ZXItPlJjdkxvY2ssIGxvY2tmbGFncyk7CisJCXJldHVybiBOVUxMOworCX0KKworCWxpc3RfZGVsKCZwTXBSZmQtPmxpc3Rfbm9kZSk7CisJcFJ4TG9jYWwtPm5SZWFkeVJlY3YtLTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBBZGFwdGVyLT5SY3ZMb2NrLCBsb2NrZmxhZ3MpOworCisJcE1wUmZkLT5pQnVmZmVySW5kZXggPSBidWZmZXJJbmRleDsKKwlwTXBSZmQtPmlSaW5nSW5kZXggPSByaW5nSW5kZXg7CisKKwkvKiBJbiBWMSBzaWxpY29uLCB0aGVyZSBpcyBhIGJ1ZyB3aGljaCBzY3Jld3MgdXAgZmlsdGVyaW5nIG9mCisJICogcnVudCBwYWNrZXRzLiAgVGhlcmVmb3JlIHJ1bnQgcGFja2V0IGZpbHRlcmluZyBpcyBkaXNhYmxlZAorCSAqIGluIHRoZSBNQUMgYW5kIHRoZSBwYWNrZXRzIGFyZSBkcm9wcGVkIGhlcmUuICBUaGV5IGFyZQorCSAqIGFsc28gY291bnRlZCBoZXJlLgorCSAqLworCWlmIChsb2NhbExlbiA8IChOSUNfTUlOX1BBQ0tFVF9TSVpFICsgNCkpIHsKKwkJcEFkYXB0ZXItPlN0YXRzLm90aGVyX2Vycm9ycysrOworCQlsb2NhbExlbiA9IDA7CisJfQorCisJaWYgKGxvY2FsTGVuKSB7CisJCWlmIChwQWRhcHRlci0+UmVwbGljYVBoeUxvb3BiayA9PSAxKSB7CisJCQlwQnVmVmEgPSBwUnhMb2NhbC0+RmJyW3JpbmdJbmRleF0tPlZhW2J1ZmZlckluZGV4XTsKKworCQkJaWYgKG1lbWNtcCgmcEJ1ZlZhWzZdLCAmcEFkYXB0ZXItPkN1cnJlbnRBZGRyZXNzWzBdLAorCQkJCSAgIEVUSF9BTEVOKSA9PSAwKSB7CisJCQkJaWYgKG1lbWNtcCgmcEJ1ZlZhWzQyXSwgIlJlcGxpY2EgcGFja2V0IiwKKwkJCQkJICAgRVRIX0hMRU4pKSB7CisJCQkJCXBBZGFwdGVyLT5SZXBsaWNhUGh5TG9vcGJrUEYgPSAxOworCQkJCX0KKwkJCX0KKwkJCURCR19XQVJOSU5HKGV0MTMxeF9kYmdpbmZvLAorCQkJCSAgICAicEJ1ZlZhOlx0JTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4OiUwMnhcbiIsCisJCQkJICAgIHBCdWZWYVs2XSwgcEJ1ZlZhWzddLCBwQnVmVmFbOF0sCisJCQkJICAgIHBCdWZWYVs5XSwgcEJ1ZlZhWzEwXSwgcEJ1ZlZhWzExXSk7CisKKwkJCURCR19XQVJOSU5HKGV0MTMxeF9kYmdpbmZvLAorCQkJCSAgICAiQ3VycmVudEFkZHI6XHQlMDJ4OiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeFxuIiwKKwkJCQkgICAgcEFkYXB0ZXItPkN1cnJlbnRBZGRyZXNzWzBdLAorCQkJCSAgICBwQWRhcHRlci0+Q3VycmVudEFkZHJlc3NbMV0sCisJCQkJICAgIHBBZGFwdGVyLT5DdXJyZW50QWRkcmVzc1syXSwKKwkJCQkgICAgcEFkYXB0ZXItPkN1cnJlbnRBZGRyZXNzWzNdLAorCQkJCSAgICBwQWRhcHRlci0+Q3VycmVudEFkZHJlc3NbNF0sCisJCQkJICAgIHBBZGFwdGVyLT5DdXJyZW50QWRkcmVzc1s1XSk7CisJCX0KKworCQkvKiBEZXRlcm1pbmUgaWYgdGhpcyBpcyBhIG11bHRpY2FzdCBwYWNrZXQgY29taW5nIGluICovCisJCWlmICgoV29yZDAudmFsdWUgJiBBTENBVEVMX01VTFRJQ0FTVF9QS1QpICYmCisJCSAgICAhKFdvcmQwLnZhbHVlICYgQUxDQVRFTF9CUk9BRENBU1RfUEtUKSkgeworCQkJLyogUHJvbWlzY3VvdXMgbW9kZSBhbmQgTXVsdGljYXN0IG1vZGUgYXJlCisJCQkgKiBub3QgbXV0dWFsbHkgZXhjbHVzaXZlIGFzIHdhcyBmaXJzdAorCQkJICogdGhvdWdodC4gIEkgZ3Vlc3MgUHJvbWlzY3VvdXMgaXMganVzdAorCQkJICogY29uc2lkZXJlZCBhIHN1cGVyLXNldCBvZiB0aGUgb3RoZXIKKwkJCSAqIGZpbHRlcnMuIEdlbmVyYWxseSBmaWx0ZXIgaXMgMHgyYiB3aGVuIGluCisJCQkgKiBwcm9taXNjdW91cyBtb2RlLgorCQkJICovCisJCQlpZiAoKHBBZGFwdGVyLT5QYWNrZXRGaWx0ZXIgJiBFVDEzMVhfUEFDS0VUX1RZUEVfTVVMVElDQVNUKQorCQkJICAgICYmICEocEFkYXB0ZXItPlBhY2tldEZpbHRlciAmIEVUMTMxWF9QQUNLRVRfVFlQRV9QUk9NSVNDVU9VUykKKwkJCSAgICAmJiAhKHBBZGFwdGVyLT5QYWNrZXRGaWx0ZXIgJiBFVDEzMVhfUEFDS0VUX1RZUEVfQUxMX01VTFRJQ0FTVCkpIHsKKwkJCQlwQnVmVmEgPSBwUnhMb2NhbC0+RmJyW3JpbmdJbmRleF0tPgorCQkJCQkJVmFbYnVmZmVySW5kZXhdOworCisJCQkJLyogTG9vcCB0aHJvdWdoIG91ciBsaXN0IHRvIHNlZSBpZiB0aGUKKwkJCQkgKiBkZXN0aW5hdGlvbiBhZGRyZXNzIG9mIHRoaXMgcGFja2V0CisJCQkJICogbWF0Y2hlcyBvbmUgaW4gb3VyIGxpc3QuCisJCQkJICovCisJCQkJZm9yIChuSW5kZXggPSAwOworCQkJCSAgICAgbkluZGV4IDwgcEFkYXB0ZXItPk1DQWRkcmVzc0NvdW50OworCQkJCSAgICAgbkluZGV4KyspIHsKKwkJCQkJaWYgKHBCdWZWYVswXSA9PQorCQkJCQkgICAgcEFkYXB0ZXItPk1DTGlzdFtuSW5kZXhdWzBdCisJCQkJCSAgICAmJiBwQnVmVmFbMV0gPT0KKwkJCQkJICAgIHBBZGFwdGVyLT5NQ0xpc3RbbkluZGV4XVsxXQorCQkJCQkgICAgJiYgcEJ1ZlZhWzJdID09CisJCQkJCSAgICBwQWRhcHRlci0+TUNMaXN0W25JbmRleF1bMl0KKwkJCQkJICAgICYmIHBCdWZWYVszXSA9PQorCQkJCQkgICAgcEFkYXB0ZXItPk1DTGlzdFtuSW5kZXhdWzNdCisJCQkJCSAgICAmJiBwQnVmVmFbNF0gPT0KKwkJCQkJICAgIHBBZGFwdGVyLT5NQ0xpc3RbbkluZGV4XVs0XQorCQkJCQkgICAgJiYgcEJ1ZlZhWzVdID09CisJCQkJCSAgICBwQWRhcHRlci0+TUNMaXN0W25JbmRleF1bNV0pIHsKKwkJCQkJCWJyZWFrOworCQkJCQl9CisJCQkJfQorCisJCQkJLyogSWYgb3VyIGluZGV4IGlzIGVxdWFsIHRvIHRoZSBudW1iZXIKKwkJCQkgKiBvZiBNdWx0aWNhc3QgYWRkcmVzcyB3ZSBoYXZlLCB0aGVuCisJCQkJICogdGhpcyBtZWFucyB3ZSBkaWQgbm90IGZpbmQgdGhpcworCQkJCSAqIHBhY2tldCdzIG1hdGNoaW5nIGFkZHJlc3MgaW4gb3VyCisJCQkJICogbGlzdC4gIFNldCB0aGUgUGFja2V0U2l6ZSB0byB6ZXJvLAorCQkJCSAqIHNvIHdlIGZyZWUgb3VyIFJGRCB3aGVuIHdlIHJldHVybgorCQkJCSAqIGZyb20gdGhpcyBmdW5jdGlvbi4KKwkJCQkgKi8KKwkJCQlpZiAobkluZGV4ID09IHBBZGFwdGVyLT5NQ0FkZHJlc3NDb3VudCkgeworCQkJCQlsb2NhbExlbiA9IDA7CisJCQkJfQorCQkJfQorCisJCQlpZiAobG9jYWxMZW4gPiAwKSB7CisJCQkJcEFkYXB0ZXItPlN0YXRzLm11bHRpcmN2Kys7CisJCQl9CisJCX0gZWxzZSBpZiAoV29yZDAudmFsdWUgJiBBTENBVEVMX0JST0FEQ0FTVF9QS1QpIHsKKwkJCXBBZGFwdGVyLT5TdGF0cy5icmRjc3RyY3YrKzsKKwkJfSBlbHNlIHsKKwkJCS8qIE5vdCBzdXJlIHdoYXQgdGhpcyBjb3VudGVyIG1lYXN1cmVzIGluCisJCQkgKiBwcm9taXNjdW91cyBtb2RlLiBQZXJoYXBzIHdlIHNob3VsZCBjaGVjaworCQkJICogdGhlIE1BQyBhZGRyZXNzIHRvIHNlZSBpZiBpdCBpcyBkaXJlY3RlZAorCQkJICogdG8gdXMgaW4gcHJvbWlzY3VvdXMgbW9kZS4KKwkJCSAqLworCQkJcEFkYXB0ZXItPlN0YXRzLnVuaXJjdisrOworCQl9CisJfQorCisJaWYgKGxvY2FsTGVuID4gMCkgeworCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gTlVMTDsKKworCQkvL3BNcFJmZC0+UGFja2V0U2l6ZSA9IGxvY2FsTGVuIC0gNDsKKwkJcE1wUmZkLT5QYWNrZXRTaXplID0gbG9jYWxMZW47CisKKwkJc2tiID0gZGV2X2FsbG9jX3NrYihwTXBSZmQtPlBhY2tldFNpemUgKyAyKTsKKwkJaWYgKCFza2IpIHsKKwkJCURCR19FUlJPUihldDEzMXhfZGJnaW5mbywKKwkJCQkgICJDb3VsZG4ndCBhbGxvYyBhbiBTS0IgZm9yIFJ4XG4iKTsKKwkJCURCR19SWF9MRUFWRShldDEzMXhfZGJnaW5mbyk7CisJCQlyZXR1cm4gTlVMTDsKKwkJfQorCisJCXBBZGFwdGVyLT5uZXRfc3RhdHMucnhfYnl0ZXMgKz0gcE1wUmZkLT5QYWNrZXRTaXplOworCisJCW1lbWNweShza2JfcHV0KHNrYiwgcE1wUmZkLT5QYWNrZXRTaXplKSwKKwkJICAgICAgIHBSeExvY2FsLT5GYnJbcmluZ0luZGV4XS0+VmFbYnVmZmVySW5kZXhdLAorCQkgICAgICAgcE1wUmZkLT5QYWNrZXRTaXplKTsKKworCQlza2ItPmRldiA9IHBBZGFwdGVyLT5uZXRkZXY7CisJCXNrYi0+cHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIHBBZGFwdGVyLT5uZXRkZXYpOworCQlza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX05PTkU7CisKKwkJbmV0aWZfcngoc2tiKTsKKwl9IGVsc2UgeworCQlwTXBSZmQtPlBhY2tldFNpemUgPSAwOworCX0KKworCW5pY19yZXR1cm5fcmZkKHBBZGFwdGVyLCBwTXBSZmQpOworCisJREJHX1JYKGV0MTMxeF9kYmdpbmZvLCAiKDEpXG4iKTsKKwlEQkdfUlhfTEVBVkUoZXQxMzF4X2RiZ2luZm8pOworCXJldHVybiBwTXBSZmQ7Cit9CisKKy8qKgorICogZXQxMzF4X3Jlc2V0X3JlY3YgLSBSZXNldCB0aGUgcmVjZWl2ZSBsaXN0CisgKiBAcEFkYXB0ZXI6IHBvaW50ZXIgdG8gb3VyIGFkYXB0ZXIKKyAqCisgKiBBc3N1bXB0aW9uLCBSY3Ygc3BpbmxvY2sgaGFzIGJlZW4gYWNxdWlyZWQuCisgKi8KK3ZvaWQgZXQxMzF4X3Jlc2V0X3JlY3Yoc3RydWN0IGV0MTMxeF9hZGFwdGVyICpwQWRhcHRlcikKK3sKKwlQTVBfUkZEIHBNcFJmZDsKKwlzdHJ1Y3QgbGlzdF9oZWFkICplbGVtZW50OworCisJREJHX0VOVEVSKGV0MTMxeF9kYmdpbmZvKTsKKworCURCR19BU1NFUlQoIWxpc3RfZW1wdHkoJnBBZGFwdGVyLT5SeFJpbmcuUmVjdkxpc3QpKTsKKworCS8qIFRha2UgYWxsIHRoZSBSRkQncyBmcm9tIHRoZSBwZW5kaW5nIGxpc3QsIGFuZCBzdGljayB0aGVtIG9uIHRoZQorCSAqIFJlY3ZMaXN0LgorCSAqLworCXdoaWxlICghbGlzdF9lbXB0eSgmcEFkYXB0ZXItPlJ4UmluZy5SZWN2UGVuZGluZ0xpc3QpKSB7CisJCWVsZW1lbnQgPSBwQWRhcHRlci0+UnhSaW5nLlJlY3ZQZW5kaW5nTGlzdC5uZXh0OworCisJCXBNcFJmZCA9IChQTVBfUkZEKSBsaXN0X2VudHJ5KGVsZW1lbnQsIE1QX1JGRCwgbGlzdF9ub2RlKTsKKworCQlsaXN0X2RlbCgmcE1wUmZkLT5saXN0X25vZGUpOworCQlsaXN0X2FkZF90YWlsKCZwTXBSZmQtPmxpc3Rfbm9kZSwgJnBBZGFwdGVyLT5SeFJpbmcuUmVjdkxpc3QpOworCX0KKworCURCR19MRUFWRShldDEzMXhfZGJnaW5mbyk7Cit9CisKKy8qKgorICogZXQxMzF4X2hhbmRsZV9yZWN2X2ludGVycnVwdCAtIEludGVycnVwdCBoYW5kbGVyIGZvciByZWNlaXZlIHByb2Nlc3NpbmcKKyAqIEBwQWRhcHRlcjogcG9pbnRlciB0byBvdXIgYWRhcHRlcgorICoKKyAqIEFzc3VtcHRpb24sIFJjdiBzcGlubG9jayBoYXMgYmVlbiBhY3F1aXJlZC4KKyAqLwordm9pZCBldDEzMXhfaGFuZGxlX3JlY3ZfaW50ZXJydXB0KHN0cnVjdCBldDEzMXhfYWRhcHRlciAqcEFkYXB0ZXIpCit7CisJUE1QX1JGRCBwTXBSZmQgPSBOVUxMOworCXN0cnVjdCBza19idWZmICpQYWNrZXRBcnJheVtOVU1fUEFDS0VUU19IQU5ETEVEXTsKKwlQTVBfUkZEIFJGREZyZWVBcnJheVtOVU1fUEFDS0VUU19IQU5ETEVEXTsKKwl1aW50MzJfdCBQYWNrZXRBcnJheUNvdW50ID0gMDsKKwl1aW50MzJfdCBQYWNrZXRzVG9IYW5kbGU7CisJdWludDMyX3QgUGFja2V0RnJlZUNvdW50ID0gMDsKKwlib29sIFRlbXBVbmZpbmlzaGVkUmVjID0gZmFsc2U7CisKKwlEQkdfUlhfRU5URVIoZXQxMzF4X2RiZ2luZm8pOworCisJUGFja2V0c1RvSGFuZGxlID0gTlVNX1BBQ0tFVFNfSEFORExFRDsKKworCS8qIFByb2Nlc3MgdXAgdG8gYXZhaWxhYmxlIFJGRCdzICovCisJd2hpbGUgKFBhY2tldEFycmF5Q291bnQgPCBQYWNrZXRzVG9IYW5kbGUpIHsKKwkJaWYgKGxpc3RfZW1wdHkoJnBBZGFwdGVyLT5SeFJpbmcuUmVjdkxpc3QpKSB7CisJCQlEQkdfQVNTRVJUKHBBZGFwdGVyLT5SeFJpbmcublJlYWR5UmVjdiA9PSAwKTsKKwkJCURCR19FUlJPUihldDEzMXhfZGJnaW5mbywgIk5PIFJGRCdzICEhISEhISEhISEhISFcbiIpOworCQkJVGVtcFVuZmluaXNoZWRSZWMgPSB0cnVlOworCQkJYnJlYWs7CisJCX0KKworCQlwTXBSZmQgPSBuaWNfcnhfcGt0cyhwQWRhcHRlcik7CisKKwkJaWYgKHBNcFJmZCA9PSBOVUxMKSB7CisJCQlicmVhazsKKwkJfQorCisJCS8qIERvIG5vdCByZWNlaXZlIGFueSBwYWNrZXRzIHVudGlsIGEgZmlsdGVyIGhhcyBiZWVuIHNldC4KKwkJICogRG8gbm90IHJlY2VpdmUgYW55IHBhY2tldHMgdW50aWwgd2UgYXJlIGF0IEQwLgorCQkgKiBEbyBub3QgcmVjZWl2ZSBhbnkgcGFja2V0cyB1bnRpbCB3ZSBoYXZlIGxpbmsuCisJCSAqIElmIGxlbmd0aCBpcyB6ZXJvLCByZXR1cm4gdGhlIFJGRCBpbiBvcmRlciB0byBhZHZhbmNlIHRoZQorCQkgKiBGcmVlIGJ1ZmZlciByaW5nLgorCQkgKi8KKwkJaWYgKCghcEFkYXB0ZXItPlBhY2tldEZpbHRlcikgfHwKKwkJICAgIChwQWRhcHRlci0+UG9NZ210LlBvd2VyU3RhdGUgIT0gTmRpc0RldmljZVN0YXRlRDApIHx8CisJCSAgICAoIU1QX0xJTktfREVURUNURUQocEFkYXB0ZXIpKSB8fAorCQkgICAgKHBNcFJmZC0+UGFja2V0U2l6ZSA9PSAwKSkgeworCQkJY29udGludWU7CisJCX0KKworCQkvKiBJbmNyZW1lbnQgdGhlIG51bWJlciBvZiBwYWNrZXRzIHdlIHJlY2VpdmVkICovCisJCXBBZGFwdGVyLT5TdGF0cy5pcGFja2V0cysrOworCisJCS8qIFNldCB0aGUgc3RhdHVzIG9uIHRoZSBwYWNrZXQsIGVpdGhlciByZXNvdXJjZXMgb3Igc3VjY2VzcyAqLworCQlpZiAocEFkYXB0ZXItPlJ4UmluZy5uUmVhZHlSZWN2ID49IFJGRF9MT1dfV0FURVJfTUFSSykgeworCQkJLyogUHV0IHRoaXMgUkZEIG9uIHRoZSBwZW5kaW5nIGxpc3QKKwkJCSAqCisJCQkgKiBOT1RFOiBuaWNfcnhfcGt0cygpIGFib3ZlIGlzIGFscmVhZHkgcmV0dXJuaW5nIHRoZQorCQkJICogUkZEIHRvIHRoZSBSZWN2TGlzdCwgc28gZG9uJ3QgYWRkaXRpb25hbGx5IGRvIHRoYXQKKwkJCSAqIGhlcmUuCisJCQkgKiBCZXNpZGVzLCB3ZSBkb24ndCByZWFsbHkgbmVlZCAoYXQgdGhpcyBwb2ludCkgdGhlCisJCQkgKiBwZW5kaW5nIGxpc3QgYW55d2F5LgorCQkJICovCisJCQkvL3NwaW5fbG9ja19pcnFzYXZlKCAmcEFkYXB0ZXItPlJjdlBlbmRMb2NrLCBsb2NrZmxhZ3MgKTsKKwkJCS8vbGlzdF9hZGRfdGFpbCggJnBNcFJmZC0+bGlzdF9ub2RlLCAmcEFkYXB0ZXItPlJ4UmluZy5SZWN2UGVuZGluZ0xpc3QgKTsKKwkJCS8vc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSggJnBBZGFwdGVyLT5SY3ZQZW5kTG9jaywgbG9ja2ZsYWdzICk7CisKKwkJCS8qIFVwZGF0ZSB0aGUgbnVtYmVyIG9mIG91dHN0YW5kaW5nIFJlY3ZzICovCisJCQkvL01QX0lOQ19SQ1ZfUkVGKCBwQWRhcHRlciApOworCQl9IGVsc2UgeworCQkJUkZERnJlZUFycmF5W1BhY2tldEZyZWVDb3VudF0gPSBwTXBSZmQ7CisJCQlQYWNrZXRGcmVlQ291bnQrKzsKKworCQkJREJHX1dBUk5JTkcoZXQxMzF4X2RiZ2luZm8sCisJCQkJICAgICJSRkQncyBhcmUgcnVubmluZyBvdXQgISEhISEhISEhISEhIVxuIik7CisJCX0KKworCQlQYWNrZXRBcnJheVtQYWNrZXRBcnJheUNvdW50XSA9IHBNcFJmZC0+UGFja2V0OworCQlQYWNrZXRBcnJheUNvdW50Kys7CisJfQorCisJaWYgKChQYWNrZXRBcnJheUNvdW50ID09IE5VTV9QQUNLRVRTX0hBTkRMRUQpIHx8IFRlbXBVbmZpbmlzaGVkUmVjKSB7CisJCXBBZGFwdGVyLT5SeFJpbmcuVW5maW5pc2hlZFJlY2VpdmVzID0gdHJ1ZTsKKwkJd3JpdGVsKHBBZGFwdGVyLT5SZWdpc3RyeVR4VGltZUludGVydmFsICogTkFOT19JTl9BX01JQ1JPLAorCQkgICAgICAgJnBBZGFwdGVyLT5DU1JBZGRyZXNzLT5nbG9iYWwud2F0Y2hkb2dfdGltZXIpOworCX0gZWxzZSB7CisJCS8qIFdhdGNoZG9nIHRpbWVyIHdpbGwgZGlzYWJsZSBpdHNlbGYgaWYgYXBwcm9wcmlhdGUuICovCisJCXBBZGFwdGVyLT5SeFJpbmcuVW5maW5pc2hlZFJlY2VpdmVzID0gZmFsc2U7CisJfQorCisJREJHX1JYX0xFQVZFKGV0MTMxeF9kYmdpbmZvKTsKK30KKworLyoqCisgKiBOSUNSZXR1cm5SRkQgLSBSZWN5Y2xlIGEgUkZEIGFuZCBwdXQgaXQgYmFjayBvbnRvIHRoZSByZWNlaXZlIGxpc3QKKyAqIEBwQWRhcHRlcjogcG9pbnRlciB0byBvdXIgYWRhcHRlcgorICogQHBNcFJmZDogcG9pbnRlciB0byB0aGUgUkZECisgKi8KK3ZvaWQgbmljX3JldHVybl9yZmQoc3RydWN0IGV0MTMxeF9hZGFwdGVyICpwQWRhcHRlciwgUE1QX1JGRCBwTXBSZmQpCit7CisJc3RydWN0IF9yeF9yaW5nX3QgKnBSeExvY2FsID0gJnBBZGFwdGVyLT5SeFJpbmc7CisJc3RydWN0IF9SWERNQV90IF9faW9tZW0gKnBSeERtYSA9ICZwQWRhcHRlci0+Q1NSQWRkcmVzcy0+cnhkbWE7CisJdWludDE2X3QgYmkgPSBwTXBSZmQtPmlCdWZmZXJJbmRleDsKKwl1aW50OF90IHJpID0gcE1wUmZkLT5pUmluZ0luZGV4OworCXVuc2lnbmVkIGxvbmcgbG9ja2ZsYWdzOworCisJREJHX1JYX0VOVEVSKGV0MTMxeF9kYmdpbmZvKTsKKworCS8qIFdlIGRvbid0IHVzZSBhbnkgb2YgdGhlIE9PQiBkYXRhIGJlc2lkZXMgc3RhdHVzLiBPdGhlcndpc2UsIHdlCisJICogbmVlZCB0byBjbGVhbiB1cCBPT0IgZGF0YQorCSAqLworCWlmICgKKyNpZmRlZiBVU0VfRkJSMAorCSAgICAocmkgPT0gMCAmJiBiaSA8IHBSeExvY2FsLT5GYnIwTnVtRW50cmllcykgfHwKKyNlbmRpZgorCSAgICAocmkgPT0gMSAmJiBiaSA8IHBSeExvY2FsLT5GYnIxTnVtRW50cmllcykpIHsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJnBBZGFwdGVyLT5GYnJMb2NrLCBsb2NrZmxhZ3MpOworCisJCWlmIChyaSA9PSAxKSB7CisJCQlQRkJSX0RFU0NfdCBwTmV4dERlc2MgPQorCQkJICAgIChQRkJSX0RFU0NfdCkgKHBSeExvY2FsLT5wRmJyMVJpbmdWYSkgKworCQkJICAgIHBSeExvY2FsLT5sb2NhbF9GYnIxX2Z1bGwuYml0cy52YWw7CisKKwkJCS8qIEhhbmRsZSB0aGUgRnJlZSBCdWZmZXIgUmluZyBhZHZhbmNlbWVudCBoZXJlLiBXcml0ZQorCQkJICogdGhlIFBBIC8gQnVmZmVyIEluZGV4IGZvciB0aGUgcmV0dXJuZWQgYnVmZmVyIGludG8KKwkJCSAqIHRoZSBvbGRlc3QgKG5leHQgdG8gYmUgZnJlZWQpRkJSIGVudHJ5CisJCQkgKi8KKwkJCXBOZXh0RGVzYy0+YWRkcl9oaSA9IHBSeExvY2FsLT5GYnJbMV0tPlBBSGlnaFtiaV07CisJCQlwTmV4dERlc2MtPmFkZHJfbG8gPSBwUnhMb2NhbC0+RmJyWzFdLT5QQUxvd1tiaV07CisJCQlwTmV4dERlc2MtPndvcmQyLnZhbHVlID0gYmk7CisKKwkJCWlmICgrK3BSeExvY2FsLT5sb2NhbF9GYnIxX2Z1bGwuYml0cy52YWwgPgorCQkJICAgIChwUnhMb2NhbC0+RmJyMU51bUVudHJpZXMgLSAxKSkgeworCQkJCXBSeExvY2FsLT5sb2NhbF9GYnIxX2Z1bGwuYml0cy52YWwgPSAwOworCQkJCXBSeExvY2FsLT5sb2NhbF9GYnIxX2Z1bGwuYml0cy53cmFwIF49IDE7CisJCQl9CisKKwkJCXdyaXRlbChwUnhMb2NhbC0+bG9jYWxfRmJyMV9mdWxsLnZhbHVlLAorCQkJICAgICAgICZwUnhEbWEtPmZicjFfZnVsbF9vZmZzZXQudmFsdWUpOworCQl9CisjaWZkZWYgVVNFX0ZCUjAKKwkJZWxzZSB7CisJCQlQRkJSX0RFU0NfdCBwTmV4dERlc2MgPQorCQkJICAgIChQRkJSX0RFU0NfdCkgcFJ4TG9jYWwtPnBGYnIwUmluZ1ZhICsKKwkJCSAgICBwUnhMb2NhbC0+bG9jYWxfRmJyMF9mdWxsLmJpdHMudmFsOworCisJCQkvKiBIYW5kbGUgdGhlIEZyZWUgQnVmZmVyIFJpbmcgYWR2YW5jZW1lbnQgaGVyZS4gV3JpdGUKKwkJCSAqIHRoZSBQQSAvIEJ1ZmZlciBJbmRleCBmb3IgdGhlIHJldHVybmVkIGJ1ZmZlciBpbnRvCisJCQkgKiB0aGUgb2xkZXN0IChuZXh0IHRvIGJlIGZyZWVkKSBGQlIgZW50cnkKKwkJCSAqLworCQkJcE5leHREZXNjLT5hZGRyX2hpID0gcFJ4TG9jYWwtPkZiclswXS0+UEFIaWdoW2JpXTsKKwkJCXBOZXh0RGVzYy0+YWRkcl9sbyA9IHBSeExvY2FsLT5GYnJbMF0tPlBBTG93W2JpXTsKKwkJCXBOZXh0RGVzYy0+d29yZDIudmFsdWUgPSBiaTsKKworCQkJaWYgKCsrcFJ4TG9jYWwtPmxvY2FsX0ZicjBfZnVsbC5iaXRzLnZhbCA+CisJCQkgICAgKHBSeExvY2FsLT5GYnIwTnVtRW50cmllcyAtIDEpKSB7CisJCQkJcFJ4TG9jYWwtPmxvY2FsX0ZicjBfZnVsbC5iaXRzLnZhbCA9IDA7CisJCQkJcFJ4TG9jYWwtPmxvY2FsX0ZicjBfZnVsbC5iaXRzLndyYXAgXj0gMTsKKwkJCX0KKworCQkJd3JpdGVsKHBSeExvY2FsLT5sb2NhbF9GYnIwX2Z1bGwudmFsdWUsCisJCQkgICAgICAgJnBSeERtYS0+ZmJyMF9mdWxsX29mZnNldC52YWx1ZSk7CisJCX0KKyNlbmRpZgorCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwQWRhcHRlci0+RmJyTG9jaywgbG9ja2ZsYWdzKTsKKwl9IGVsc2UgeworCQlEQkdfRVJST1IoZXQxMzF4X2RiZ2luZm8sCisJCQkgICJOSUNSZXR1cm5SRkQgaWxsZWdhbCBCdWZmZXIgSW5kZXggcmV0dXJuZWRcbiIpOworCX0KKworCS8qIFRoZSBwcm9jZXNzaW5nIG9uIHRoaXMgUkZEIGlzIGRvbmUsIHNvIHB1dCBpdCBiYWNrIG9uIHRoZSB0YWlsIG9mCisJICogb3VyIGxpc3QKKwkgKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSgmcEFkYXB0ZXItPlJjdkxvY2ssIGxvY2tmbGFncyk7CisJbGlzdF9hZGRfdGFpbCgmcE1wUmZkLT5saXN0X25vZGUsICZwUnhMb2NhbC0+UmVjdkxpc3QpOworCXBSeExvY2FsLT5uUmVhZHlSZWN2Kys7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcEFkYXB0ZXItPlJjdkxvY2ssIGxvY2tmbGFncyk7CisKKwlEQkdfQVNTRVJUKHBSeExvY2FsLT5uUmVhZHlSZWN2IDw9IHBSeExvY2FsLT5OdW1SZmQpOworCURCR19SWF9MRUFWRShldDEzMXhfZGJnaW5mbyk7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZXQxMzF4L2V0MTMxMF9yeC5oIGIvZHJpdmVycy9zdGFnaW5nL2V0MTMxeC9ldDEzMTBfcnguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYTY2ZGJjCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2V0MTMxeC9ldDEzMTBfcnguaApAQCAtMCwwICsxLDM3MyBAQAorLyoKKyAqIEFnZXJlIFN5c3RlbXMgSW5jLgorICogMTAvMTAwLzEwMDAgQmFzZS1UIEV0aGVybmV0IERyaXZlciBmb3IgdGhlIEVUMTMwMSBhbmQgRVQxMzF4IHNlcmllcyBNQUNzCisgKgorICogQ29weXJpZ2h0IKkgMjAwNSBBZ2VyZSBTeXN0ZW1zIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgIGh0dHA6Ly93d3cuYWdlcmUuY29tCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBldDEzMTBfcnguaCAtIERlZmluZXMsIHN0cnVjdHMsIGVudW1zLCBwcm90b3R5cGVzLCBldGMuIHBlcnRhaW5pbmcgdG8gZGF0YQorICogICAgICAgICAgICAgICByZWNlcHRpb24uCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBTT0ZUV0FSRSBMSUNFTlNFCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBwcm92aWRlZCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgdGVybXMgYW5kIGNvbmRpdGlvbnMsCisgKiB3aGljaCB5b3Ugc2hvdWxkIHJlYWQgY2FyZWZ1bGx5IGJlZm9yZSB1c2luZyB0aGUgc29mdHdhcmUuICBVc2luZyB0aGlzCisgKiBzb2Z0d2FyZSBpbmRpY2F0ZXMgeW91ciBhY2NlcHRhbmNlIG9mIHRoZXNlIHRlcm1zIGFuZCBjb25kaXRpb25zLiAgSWYgeW91IGRvCisgKiBub3QgYWdyZWUgd2l0aCB0aGVzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucywgZG8gbm90IHVzZSB0aGUgc29mdHdhcmUuCisgKgorICogQ29weXJpZ2h0IKkgMjAwNSBBZ2VyZSBTeXN0ZW1zIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ugb3IgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbnMsIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiAuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcworICogICAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIERpc2NsYWltZXIgYXMgY29tbWVudHMgaW4gdGhlIGNvZGUgYXMKKyAqICAgIHdlbGwgYXMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIC4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICogICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgRGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgorICogICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogLiBOZWl0aGVyIHRoZSBuYW1lIG9mIEFnZXJlIFN5c3RlbXMgSW5jLiBub3IgdGhlIG5hbWVzIG9mIHRoZSBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogRGlzY2xhaW1lcgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgk0FTIElTlCBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLAorICogSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIElORlJJTkdFTUVOVCBBTkQgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIEFOWQorICogVVNFLCBNT0RJRklDQVRJT04gT1IgRElTVFJJQlVUSU9OIE9GIFRISVMgU09GVFdBUkUgSVMgU09MRUxZIEFUIFRIRSBVU0VSUyBPV04KKyAqIFJJU0suIElOIE5PIEVWRU5UIFNIQUxMIEFHRVJFIFNZU1RFTVMgSU5DLiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNICisgKiBEQU1BR0UuCisgKgorICovCisKKyNpZm5kZWYgX19FVDEzMTBfUlhfSF9fCisjZGVmaW5lIF9fRVQxMzEwX1JYX0hfXworCisjaW5jbHVkZSAiZXQxMzEwX2FkZHJlc3NfbWFwLmgiCisKKyNkZWZpbmUgVVNFX0ZCUjAgdHJ1ZQorCisjaWZkZWYgVVNFX0ZCUjAKKy8vI2RlZmluZSBGQlIwX0JVRkZFUl9TSVpFIDI1NgorI2VuZGlmCisKKy8vI2RlZmluZSBGQlIxX0JVRkZFUl9TSVpFIDIwNDgKKworI2RlZmluZSBGQlJfQ0hVTktTIDMyCisKKyNkZWZpbmUgTUFYX0RFU0NfUEVSX1JJTkdfUlggICAgICAgICAxMDI0CisKKy8qIG51bWJlciBvZiBSRkRzIC0gZGVmYXVsdCBhbmQgbWluICovCisjaWZkZWYgVVNFX0ZCUjAKKyNkZWZpbmUgUkZEX0xPV19XQVRFUl9NQVJLCTQwCisjZGVmaW5lIE5JQ19NSU5fTlVNX1JGRAkJNjQKKyNkZWZpbmUgTklDX0RFRkFVTFRfTlVNX1JGRAkxMDI0CisjZWxzZQorI2RlZmluZSBSRkRfTE9XX1dBVEVSX01BUksJMjAKKyNkZWZpbmUgTklDX01JTl9OVU1fUkZECQk2NAorI2RlZmluZSBOSUNfREVGQVVMVF9OVU1fUkZECTI1NgorI2VuZGlmCisKKyNkZWZpbmUgTlVNX1BBQ0tFVFNfSEFORExFRAkyNTYKKworI2RlZmluZSBBTENBVEVMX0JBRF9TVEFUVVMJMHhlNDdmMDAwMAorI2RlZmluZSBBTENBVEVMX01VTFRJQ0FTVF9QS1QJMHgwMTAwMDAwMAorI2RlZmluZSBBTENBVEVMX0JST0FEQ0FTVF9QS1QJMHgwMjAwMDAwMAorCisvKiB0eXBlZGVmcyBmb3IgRnJlZSBCdWZmZXIgRGVzY3JpcHRvcnMgKi8KK3R5cGVkZWYgdW5pb24gX0ZCUl9XT1JEMl90IHsKKwl1MzIgdmFsdWU7CisJc3RydWN0IHsKKyNpZmRlZiBfQklUX0ZJRUxEU19IVE9MCisJCXUzMiByZXNlcnZlZDoyMjsJLy8gYml0cyAxMC0zMQorCQl1MzIgYmk6MTA7CQkvLyBiaXRzIDAtOShCdWZmZXIgSW5kZXgpCisjZWxzZQorCQl1MzIgYmk6MTA7CQkvLyBiaXRzIDAtOShCdWZmZXIgSW5kZXgpCisJCXUzMiByZXNlcnZlZDoyMjsJLy8gYml0IDEwLTMxCisjZW5kaWYKKwl9IGJpdHM7Cit9IEZCUl9XT1JEMl90LCAqUEZCUl9XT1JEMl90OworCit0eXBlZGVmIHN0cnVjdCBfRkJSX0RFU0NfdCB7CisJdTMyIGFkZHJfbG87CisJdTMyIGFkZHJfaGk7CisJRkJSX1dPUkQyX3Qgd29yZDI7Cit9IEZCUl9ERVNDX3QsICpQRkJSX0RFU0NfdDsKKworLyogVHlwZWRlZnMgZm9yIFBhY2tldCBTdGF0dXMgUmluZyBEZXNjcmlwdG9ycyAqLwordHlwZWRlZiB1bmlvbiBfUEtUX1NUQVRfREVTQ19XT1JEMF90IHsKKwl1MzIgdmFsdWU7CisJc3RydWN0IHsKKyNpZmRlZiBfQklUX0ZJRUxEU19IVE9MCisJCS8vIHRvcCAxNiBiaXRzIGFyZSBmcm9tIHRoZSBBbGNhdGVsIFN0YXR1cyBXb3JkIGFzIGVudW1lcmF0ZWQgaW4KKwkJLy8gUEUtTUNYTUFDIERhdGEgU2hlZXQgSVBEIERTNTQgMDIxMC0xIChhbHNvIElQRC1EUzgwIDAyMDUtMikKKyNpZiAwCisJCXUzMiBhc3dfdHJ1bmM6MTsJCS8vIGJpdCAzMShSeCBmcmFtZSB0cnVuY2F0ZWQpCisjZW5kaWYKKwkJdTMyIGFzd19sb25nX2V2dDoxOwkvLyBiaXQgMzEoUnggbG9uZyBldmVudCkKKwkJdTMyIGFzd19WTEFOX3RhZzoxOwkvLyBiaXQgMzAoVkxBTiB0YWcgZGV0ZWN0ZWQpCisJCXUzMiBhc3dfdW5zdXBwb3J0ZWRfb3A6MTsJLy8gYml0IDI5KHVuc3VwcG9ydGVkIE9QIGNvZGUpCisJCXUzMiBhc3dfcGF1c2VfZnJhbWU6MTsJLy8gYml0IDI4KGlzIGEgcGF1c2UgZnJhbWUpCisJCXUzMiBhc3dfY29udHJvbF9mcmFtZToxOwkvLyBiaXQgMjcoaXMgYSBjb250cm9sIGZyYW1lKQorCQl1MzIgYXN3X2RyaWJibGVfbmliYmxlOjE7CS8vIGJpdCAyNihzcHVyaW91cyBiaXRzIGFmdGVyIEVPUCkKKwkJdTMyIGFzd19icm9hZGNhc3Q6MTsJLy8gYml0IDI1KGhhcyBhIGJyb2FkY2FzdCBhZGRyZXNzKQorCQl1MzIgYXN3X211bHRpY2FzdDoxOwkvLyBiaXQgMjQoaGFzIGEgbXVsdGljYXN0IGFkZHJlc3MpCisJCXUzMiBhc3dfT0s6MTsJCS8vIGJpdCAyMyh2YWxpZCBDUkMgKyBubyBjb2RlIGVycm9yKQorCQl1MzIgYXN3X3Rvb19sb25nOjE7CS8vIGJpdCAyMihmcmFtZSBsZW5ndGggPiAxNTE4IGJ5dGVzKQorCQl1MzIgYXN3X2xlbl9jaGtfZXJyOjE7CS8vIGJpdCAyMShmcmFtZSBsZW5ndGggZmllbGQgaW5jb3JyZWN0KQorCQl1MzIgYXN3X0NSQ19lcnI6MTsJCS8vIGJpdCAyMChDUkMgZXJyb3IpCisJCXUzMiBhc3dfY29kZV9lcnI6MTsJLy8gYml0IDE5KG9uZSBvciBtb3JlIG5pYmJsZXMgc2lnbmFsbGVkIGFzIGVycm9ycykKKwkJdTMyIGFzd19mYWxzZV9jYXJyaWVyX2V2ZW50OjE7CS8vIGJpdCAxOChiYWQgY2FycmllciBzaW5jZSBsYXN0IGdvb2QgcGFja2V0KQorCQl1MzIgYXN3X1JYX0RWX2V2ZW50OjE7CS8vIGJpdCAxNyhzaG9ydCByZWNlaXZlIGV2ZW50IGRldGVjdGVkKQorCQl1MzIgYXN3X3ByZXZfcGt0X2Ryb3BwZWQ6MTsvLyBiaXQgMTYoZS5nLiBJRkcgdG9vIHNtYWxsIG9uIHByZXZpb3VzKQorCQl1MzIgdW51c2VkOjU7CQkvLyBiaXRzIDExLTE1CisJCXUzMiB2cDoxOwkJCS8vIGJpdCAxMChWTEFOIFBhY2tldCkKKwkJdTMyIGpwOjE7CQkJLy8gYml0IDkoSnVtYm8gUGFja2V0KQorCQl1MzIgZnQ6MTsJCQkvLyBiaXQgOChGcmFtZSBUcnVuY2F0ZWQpCisJCXUzMiBkcm9wOjE7CQkvLyBiaXQgNyhEcm9wIHBhY2tldCkKKwkJdTMyIHJ4bWFjX2Vycm9yOjE7CQkvLyBiaXQgNihSWE1BQyBFcnJvciBJbmRpY2F0b3IpCisJCXUzMiB3b2w6MTsJCQkvLyBiaXQgNShXT0wgRXZlbnQpCisJCXUzMiB0Y3BwOjE7CQkvLyBiaXQgNChUQ1AgY2hlY2tzdW0gcGFzcykKKwkJdTMyIHRjcGE6MTsJCS8vIGJpdCAzKFRDUCBjaGVja3N1bSBhc3Npc3QpCisJCXUzMiBpcHA6MTsJCQkvLyBiaXQgMihJUCBjaGVja3N1bSBwYXNzKQorCQl1MzIgaXBhOjE7CQkJLy8gYml0IDEoSVAgY2hlY2tzdW0gYXNzaXN0KQorCQl1MzIgaHA6MTsJCQkvLyBiaXQgMChoYXNoIHBhc3MpCisjZWxzZQorCQl1MzIgaHA6MTsJCQkvLyBiaXQgMChoYXNoIHBhc3MpCisJCXUzMiBpcGE6MTsJCQkvLyBiaXQgMShJUCBjaGVja3N1bSBhc3Npc3QpCisJCXUzMiBpcHA6MTsJCQkvLyBiaXQgMihJUCBjaGVja3N1bSBwYXNzKQorCQl1MzIgdGNwYToxOwkJLy8gYml0IDMoVENQIGNoZWNrc3VtIGFzc2lzdCkKKwkJdTMyIHRjcHA6MTsJCS8vIGJpdCA0KFRDUCBjaGVja3N1bSBwYXNzKQorCQl1MzIgd29sOjE7CQkJLy8gYml0IDUoV09MIEV2ZW50KQorCQl1MzIgcnhtYWNfZXJyb3I6MTsJCS8vIGJpdCA2KFJYTUFDIEVycm9yIEluZGljYXRvcikKKwkJdTMyIGRyb3A6MTsJCS8vIGJpdCA3KERyb3AgcGFja2V0KQorCQl1MzIgZnQ6MTsJCQkvLyBiaXQgOChGcmFtZSBUcnVuY2F0ZWQpCisJCXUzMiBqcDoxOwkJCS8vIGJpdCA5KEp1bWJvIFBhY2tldCkKKwkJdTMyIHZwOjE7CQkJLy8gYml0IDEwKFZMQU4gUGFja2V0KQorCQl1MzIgdW51c2VkOjU7CQkvLyBiaXRzIDExLTE1CisJCXUzMiBhc3dfcHJldl9wa3RfZHJvcHBlZDoxOy8vIGJpdCAxNihlLmcuIElGRyB0b28gc21hbGwgb24gcHJldmlvdXMpCisJCXUzMiBhc3dfUlhfRFZfZXZlbnQ6MTsJLy8gYml0IDE3KHNob3J0IHJlY2VpdmUgZXZlbnQgZGV0ZWN0ZWQpCisJCXUzMiBhc3dfZmFsc2VfY2Fycmllcl9ldmVudDoxOwkvLyBiaXQgMTgoYmFkIGNhcnJpZXIgc2luY2UgbGFzdCBnb29kIHBhY2tldCkKKwkJdTMyIGFzd19jb2RlX2VycjoxOwkvLyBiaXQgMTkob25lIG9yIG1vcmUgbmliYmxlcyBzaWduYWxsZWQgYXMgZXJyb3JzKQorCQl1MzIgYXN3X0NSQ19lcnI6MTsJCS8vIGJpdCAyMChDUkMgZXJyb3IpCisJCXUzMiBhc3dfbGVuX2Noa19lcnI6MTsJLy8gYml0IDIxKGZyYW1lIGxlbmd0aCBmaWVsZCBpbmNvcnJlY3QpCisJCXUzMiBhc3dfdG9vX2xvbmc6MTsJLy8gYml0IDIyKGZyYW1lIGxlbmd0aCA+IDE1MTggYnl0ZXMpCisJCXUzMiBhc3dfT0s6MTsJCS8vIGJpdCAyMyh2YWxpZCBDUkMgKyBubyBjb2RlIGVycm9yKQorCQl1MzIgYXN3X211bHRpY2FzdDoxOwkvLyBiaXQgMjQoaGFzIGEgbXVsdGljYXN0IGFkZHJlc3MpCisJCXUzMiBhc3dfYnJvYWRjYXN0OjE7CS8vIGJpdCAyNShoYXMgYSBicm9hZGNhc3QgYWRkcmVzcykKKwkJdTMyIGFzd19kcmliYmxlX25pYmJsZToxOwkvLyBiaXQgMjYoc3B1cmlvdXMgYml0cyBhZnRlciBFT1ApCisJCXUzMiBhc3dfY29udHJvbF9mcmFtZToxOwkvLyBiaXQgMjcoaXMgYSBjb250cm9sIGZyYW1lKQorCQl1MzIgYXN3X3BhdXNlX2ZyYW1lOjE7CS8vIGJpdCAyOChpcyBhIHBhdXNlIGZyYW1lKQorCQl1MzIgYXN3X3Vuc3VwcG9ydGVkX29wOjE7CS8vIGJpdCAyOSh1bnN1cHBvcnRlZCBPUCBjb2RlKQorCQl1MzIgYXN3X1ZMQU5fdGFnOjE7CS8vIGJpdCAzMChWTEFOIHRhZyBkZXRlY3RlZCkKKwkJdTMyIGFzd19sb25nX2V2dDoxOwkvLyBiaXQgMzEoUnggbG9uZyBldmVudCkKKyNpZiAwCisJCXUzMiBhc3dfdHJ1bmM6MTsJCS8vIGJpdCAzMShSeCBmcmFtZSB0cnVuY2F0ZWQpCisjZW5kaWYKKyNlbmRpZgorCX0gYml0czsKK30gUEtUX1NUQVRfREVTQ19XT1JEMF90LCAqUFBLVF9TVEFUX1dPUkQwX3Q7CisKK3R5cGVkZWYgdW5pb24gX1BLVF9TVEFUX0RFU0NfV09SRDFfdCB7CisJdTMyIHZhbHVlOworCXN0cnVjdCB7CisjaWZkZWYgX0JJVF9GSUVMRFNfSFRPTAorCQl1MzIgdW51c2VkOjQ7CS8vIGJpdHMgMjgtMzEKKwkJdTMyIHJpOjI7CQkvLyBiaXRzIDI2LTI3KFJpbmcgSW5kZXgpCisJCXUzMiBiaToxMDsJCS8vIGJpdHMgMTYtMjUoQnVmZmVyIEluZGV4KQorCQl1MzIgbGVuZ3RoOjE2OwkvLyBiaXQgMC0xNShsZW5ndGggaW4gYnl0ZXMpCisjZWxzZQorCQl1MzIgbGVuZ3RoOjE2OwkvLyBiaXQgMC0xNShsZW5ndGggaW4gYnl0ZXMpCisJCXUzMiBiaToxMDsJCS8vIGJpdHMgMTYtMjUoQnVmZmVyIEluZGV4KQorCQl1MzIgcmk6MjsJCS8vIGJpdHMgMjYtMjcoUmluZyBJbmRleCkKKwkJdTMyIHVudXNlZDo0OwkvLyBiaXRzIDI4LTMxCisjZW5kaWYKKwl9IGJpdHM7Cit9IFBLVF9TVEFUX0RFU0NfV09SRDFfdCwgKlBQS1RfU1RBVF9XT1JEMV90OworCit0eXBlZGVmIHN0cnVjdCBfUEtUX1NUQVRfREVTQ190IHsKKwlQS1RfU1RBVF9ERVNDX1dPUkQwX3Qgd29yZDA7CisJUEtUX1NUQVRfREVTQ19XT1JEMV90IHdvcmQxOworfSBQS1RfU1RBVF9ERVNDX3QsICpQUEtUX1NUQVRfREVTQ190OworCisvKiBUeXBlZGVmcyBmb3IgdGhlIFJYIERNQSBzdGF0dXMgd29yZCAqLworCisvKgorICogUlhTVEFUX1dPUkQwX3Qgc3RydWN0dXJlIGhvbGRzIHBhcnQgb2YgdGhlIHN0YXR1cyBiaXRzIG9mIHRoZSBSeCBETUEgZW5naW5lCisgKiB0aGF0IGdldCBjb3BpZWQgb3V0IHRvIG1lbW9yeSBieSB0aGUgRVQtMTMxMC4gIFdvcmQgMCBpcyBhIDMyIGJpdCB3b3JkCisgKiB3aGljaGNvbnRhaW5zIEZyZWUgQnVmZmVyIHJpbmcgMCBhbmQgMSBhdmFpbGFibGUgb2Zmc2V0LgorICovCit0eXBlZGVmIHVuaW9uIF9yeHN0YXRfd29yZDBfdCB7CisJdTMyIHZhbHVlOworCXN0cnVjdCB7CisjaWZkZWYgX0JJVF9GSUVMRFNfSFRPTAorCQl1MzIgRkJSMXVudXNlZDo1OwkvLyBiaXRzIDI3LTMxCisJCXUzMiBGQlIxd3JhcDoxOwkvLyBiaXQgMjYKKwkJdTMyIEZCUjFvZmZzZXQ6MTA7CS8vIGJpdHMgMTYtMjUKKwkJdTMyIEZCUjB1bnVzZWQ6NTsJLy8gYml0cyAxMS0xNQorCQl1MzIgRkJSMHdyYXA6MTsJLy8gYml0IDEwCisJCXUzMiBGQlIwb2Zmc2V0OjEwOwkvLyBiaXRzIDAtOQorI2Vsc2UKKwkJdTMyIEZCUjBvZmZzZXQ6MTA7CS8vIGJpdHMgMC05CisJCXUzMiBGQlIwd3JhcDoxOwkvLyBiaXQgMTAKKwkJdTMyIEZCUjB1bnVzZWQ6NTsJLy8gYml0cyAxMS0xNQorCQl1MzIgRkJSMW9mZnNldDoxMDsJLy8gYml0cyAxNi0yNQorCQl1MzIgRkJSMXdyYXA6MTsJLy8gYml0IDI2CisJCXUzMiBGQlIxdW51c2VkOjU7CS8vIGJpdHMgMjctMzEKKyNlbmRpZgorCX0gYml0czsKK30gUlhTVEFUX1dPUkQwX3QsICpQUlhTVEFUX1dPUkQwX3Q7CisKKy8qCisgKiBSWFNUQVRfV09SRDFfdCBzdHJ1Y3R1cmUgaG9sZHMgcGFydCBvZiB0aGUgc3RhdHVzIGJpdHMgb2YgdGhlIFJ4IERNQSBlbmdpbmUKKyAqIHRoYXQgZ2V0IGNvcGllZCBvdXQgdG8gbWVtb3J5IGJ5IHRoZSBFVC0xMzEwLiAgV29yZCAzIGlzIGEgMzIgYml0IHdvcmQKKyAqIHdoaWNoIGNvbnRhaW5zIHRoZSBQYWNrZXQgU3RhdHVzIFJpbmcgYXZhaWxhYmxlIG9mZnNldC4KKyAqLwordHlwZWRlZiB1bmlvbiBfcnhzdGF0X3dvcmQxX3QgeworCXUzMiB2YWx1ZTsKKwlzdHJ1Y3QgeworI2lmZGVmIF9CSVRfRklFTERTX0hUT0wKKwkJdTMyIFBTUnVudXNlZDozOwkvLyBiaXRzIDI5LTMxCisJCXUzMiBQU1J3cmFwOjE7CS8vIGJpdCAyOAorCQl1MzIgUFNSb2Zmc2V0OjEyOwkvLyBiaXRzIDE2LTI3CisJCXUzMiByZXNlcnZlZDoxNjsJLy8gYml0cyAwLTE1CisjZWxzZQorCQl1MzIgcmVzZXJ2ZWQ6MTY7CS8vIGJpdHMgMC0xNQorCQl1MzIgUFNSb2Zmc2V0OjEyOwkvLyBiaXRzIDE2LTI3CisJCXUzMiBQU1J3cmFwOjE7CS8vIGJpdCAyOAorCQl1MzIgUFNSdW51c2VkOjM7CS8vIGJpdHMgMjktMzEKKyNlbmRpZgorCX0gYml0czsKK30gUlhTVEFUX1dPUkQxX3QsICpQUlhTVEFUX1dPUkQxX3Q7CisKKy8qCisgKiBSWF9TVEFUVVNfQkxPQ0tfdCBpcyBzcnVjdHVyZSByZXByZXNlbnRpbmcgdGhlIHN0YXR1cyBvZiB0aGUgUnggRE1BIGVuZ2luZQorICogaXQgc2l0cyBpbiBmcmVlIG1lbW9yeSwgYW5kIGlzIHBvaW50ZWQgdG8gYnkgMHgxMDFjIC8gMHgxMDIwCisgKi8KK3R5cGVkZWYgc3RydWN0IF9yeF9zdGF0dXNfYmxvY2tfdCB7CisJUlhTVEFUX1dPUkQwX3QgV29yZDA7CisJUlhTVEFUX1dPUkQxX3QgV29yZDE7Cit9IFJYX1NUQVRVU19CTE9DS190LCAqUFJYX1NUQVRVU19CTE9DS190OworCisvKgorICogU3RydWN0dXJlIGZvciBsb29rLXVwIHRhYmxlIGhvbGRpbmcgZnJlZSBidWZmZXIgcmluZyBwb2ludGVycworICovCit0eXBlZGVmIHN0cnVjdCBfRmJyTG9va3VwVGFibGUgeworCXZvaWQgKlZhW01BWF9ERVNDX1BFUl9SSU5HX1JYXTsKKwl2b2lkICpCdWZmZXIxW01BWF9ERVNDX1BFUl9SSU5HX1JYXTsKKwl2b2lkICpCdWZmZXIyW01BWF9ERVNDX1BFUl9SSU5HX1JYXTsKKwl1MzIgUEFIaWdoW01BWF9ERVNDX1BFUl9SSU5HX1JYXTsKKwl1MzIgUEFMb3dbTUFYX0RFU0NfUEVSX1JJTkdfUlhdOworfSBGQlJMT09LVVBUQUJMRSwgKlBGQlJMT09LVVBUQUJMRTsKKwordHlwZWRlZiBlbnVtIHsKKwlPTkVfUEFDS0VUX0lOVEVSUlVQVCwKKwlGT1VSX1BBQ0tFVF9JTlRFUlJVUFQKK30gZVJYX0lOVEVSUlVQVF9TVEFURV90LCAqUGVSWF9JTlRFUlJVUFRfU1RBVEVfdDsKKworLyoKKyAqIFN0cnVjdHVyZSB0byBob2xkIHRoZSBza2IncyBpbiBhIGxpc3QKKyAqLwordHlwZWRlZiBzdHJ1Y3Qgcnhfc2tiX2xpc3RfZWxlbSB7CisJc3RydWN0IGxpc3RfaGVhZCBza2JfbGlzdF9lbGVtOworCWRtYV9hZGRyX3QgZG1hX2FkZHI7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKK30gUlhfU0tCX0xJU1RfRUxFTSwgKlBSWF9TS0JfTElTVF9FTEVNOworCisvKgorICogUlhfUklOR190IGlzIHNydWN0dXJlIHJlcHJlc2VudGluZyB0aGUgYWRhcHRvcidzIGxvY2FsIHJlZmVyZW5jZShzKSB0byB0aGUKKyAqIHJpbmdzCisgKi8KK3R5cGVkZWYgc3RydWN0IF9yeF9yaW5nX3QgeworI2lmZGVmIFVTRV9GQlIwCisJdm9pZCAqcEZicjBSaW5nVmE7CisJZG1hX2FkZHJfdCBwRmJyMFJpbmdQYTsKKwl2b2lkICpGYnIwTWVtVmFbTUFYX0RFU0NfUEVSX1JJTkdfUlggLyBGQlJfQ0hVTktTXTsKKwlkbWFfYWRkcl90IEZicjBNZW1QYVtNQVhfREVTQ19QRVJfUklOR19SWCAvIEZCUl9DSFVOS1NdOworCXVpbnQ2NF90IEZicjBSZWFscGE7CisJdWludDY0X3QgRmJyMG9mZnNldDsKKwlETUExMFdfdCBsb2NhbF9GYnIwX2Z1bGw7CisJdTMyIEZicjBOdW1FbnRyaWVzOworCXUzMiBGYnIwQnVmZmVyU2l6ZTsKKyNlbmRpZgorCXZvaWQgKnBGYnIxUmluZ1ZhOworCWRtYV9hZGRyX3QgcEZicjFSaW5nUGE7CisJdm9pZCAqRmJyMU1lbVZhW01BWF9ERVNDX1BFUl9SSU5HX1JYIC8gRkJSX0NIVU5LU107CisJZG1hX2FkZHJfdCBGYnIxTWVtUGFbTUFYX0RFU0NfUEVSX1JJTkdfUlggLyBGQlJfQ0hVTktTXTsKKwl1aW50NjRfdCBGYnIxUmVhbHBhOworCXVpbnQ2NF90IEZicjFvZmZzZXQ7CisJRkJSTE9PS1VQVEFCTEUgKkZiclsyXTsKKwlETUExMFdfdCBsb2NhbF9GYnIxX2Z1bGw7CisJdTMyIEZicjFOdW1FbnRyaWVzOworCXUzMiBGYnIxQnVmZmVyU2l6ZTsKKworCXZvaWQgKnBQU1JpbmdWYTsKKwlkbWFfYWRkcl90IHBQU1JpbmdQYTsKKwl1aW50NjRfdCBwUFNSaW5nUmVhbFBhOworCXVpbnQ2NF90IHBQU1JpbmdPZmZzZXQ7CisJUlhETUFfUFNSX0ZVTExfT0ZGU0VUX3QgbG9jYWxfcHNyX2Z1bGw7CisJdTMyIFBzck51bUVudHJpZXM7CisKKwl2b2lkICpwUnhTdGF0dXNWYTsKKwlkbWFfYWRkcl90IHBSeFN0YXR1c1BhOworCXVpbnQ2NF90IFJ4U3RhdHVzUmVhbFBBOworCXVpbnQ2NF90IFJ4U3RhdHVzT2Zmc2V0OworCisJc3RydWN0IGxpc3RfaGVhZCBSZWN2QnVmZmVyUG9vbDsKKworCS8qIFJFQ1YgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkIFJlY3ZMaXN0OworCXN0cnVjdCBsaXN0X2hlYWQgUmVjdlBlbmRpbmdMaXN0OworCXUzMiBuUmVhZHlSZWN2OworCisJdTMyIE51bVJmZDsKKworCWJvb2wgVW5maW5pc2hlZFJlY2VpdmVzOworCisJc3RydWN0IGxpc3RfaGVhZCBSZWN2UGFja2V0UG9vbDsKKworCS8qIGxvb2thc2lkZSBsaXN0cyAqLworCXN0cnVjdCBrbWVtX2NhY2hlICpSZWN2TG9va2FzaWRlOworfSBSWF9SSU5HX3QsICpQUlhfUklOR190OworCisvKiBGb3J3YXJkIHJlZmVyZW5jZSBvZiBSRkQgKi8KK3N0cnVjdCBfTVBfUkZEOworCisvKiBGb3J3YXJkIGRlY2xhcmF0aW9uIG9mIHRoZSBwcml2YXRlIGFkYXB0ZXIgc3RydWN0dXJlICovCitzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXI7CisKKy8qIFBST1RPVFlQRVMgZm9yIEluaXRpYWxpemF0aW9uICovCitpbnQgZXQxMzF4X3J4X2RtYV9tZW1vcnlfYWxsb2Moc3RydWN0IGV0MTMxeF9hZGFwdGVyICphZGFwdGVyKTsKK3ZvaWQgZXQxMzF4X3J4X2RtYV9tZW1vcnlfZnJlZShzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKmFkYXB0ZXIpOworaW50IGV0MTMxeF9yZmRfcmVzb3VyY2VzX2FsbG9jKHN0cnVjdCBldDEzMXhfYWRhcHRlciAqYWRhcHRlciwKKwkJCSAgICAgICBzdHJ1Y3QgX01QX1JGRCAqcE1wUmZkKTsKK3ZvaWQgZXQxMzF4X3JmZF9yZXNvdXJjZXNfZnJlZShzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKmFkYXB0ZXIsCisJCQkgICAgICAgc3RydWN0IF9NUF9SRkQgKnBNcFJmZCk7CitpbnQgZXQxMzF4X2luaXRfcmVjdihzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKmFkYXB0ZXIpOworCit2b2lkIENvbmZpZ1J4RG1hUmVncyhzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKmFkYXB0ZXIpOwordm9pZCBTZXRSeERtYVRpbWVyKHN0cnVjdCBldDEzMXhfYWRhcHRlciAqYWRhcHRlcik7Cit2b2lkIGV0MTMxeF9yeF9kbWFfZGlzYWJsZShzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKmFkYXB0ZXIpOwordm9pZCBldDEzMXhfcnhfZG1hX2VuYWJsZShzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKmFkYXB0ZXIpOworCit2b2lkIGV0MTMxeF9yZXNldF9yZWN2KHN0cnVjdCBldDEzMXhfYWRhcHRlciAqYWRhcHRlcik7CisKK3ZvaWQgZXQxMzF4X2hhbmRsZV9yZWN2X2ludGVycnVwdChzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKmFkYXB0ZXIpOworCisjZW5kaWYgLyogX19FVDEzMTBfUlhfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZXQxMzF4L2V0MTMxMF90eC5jIGIvZHJpdmVycy9zdGFnaW5nL2V0MTMxeC9ldDEzMTBfdHguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOTVjMjYwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2V0MTMxeC9ldDEzMTBfdHguYwpAQCAtMCwwICsxLDE1MjUgQEAKKy8qCisgKiBBZ2VyZSBTeXN0ZW1zIEluYy4KKyAqIDEwLzEwMC8xMDAwIEJhc2UtVCBFdGhlcm5ldCBEcml2ZXIgZm9yIHRoZSBFVDEzMDEgYW5kIEVUMTMxeCBzZXJpZXMgTUFDcworICoKKyAqIENvcHlyaWdodCCpIDIwMDUgQWdlcmUgU3lzdGVtcyBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogICBodHRwOi8vd3d3LmFnZXJlLmNvbQorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogZXQxMzEwX3R4LmMgLSBSb3V0aW5lcyB1c2VkIHRvIHBlcmZvcm0gZGF0YSB0cmFuc21pc3Npb24uCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBTT0ZUV0FSRSBMSUNFTlNFCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBwcm92aWRlZCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgdGVybXMgYW5kIGNvbmRpdGlvbnMsCisgKiB3aGljaCB5b3Ugc2hvdWxkIHJlYWQgY2FyZWZ1bGx5IGJlZm9yZSB1c2luZyB0aGUgc29mdHdhcmUuICBVc2luZyB0aGlzCisgKiBzb2Z0d2FyZSBpbmRpY2F0ZXMgeW91ciBhY2NlcHRhbmNlIG9mIHRoZXNlIHRlcm1zIGFuZCBjb25kaXRpb25zLiAgSWYgeW91IGRvCisgKiBub3QgYWdyZWUgd2l0aCB0aGVzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucywgZG8gbm90IHVzZSB0aGUgc29mdHdhcmUuCisgKgorICogQ29weXJpZ2h0IKkgMjAwNSBBZ2VyZSBTeXN0ZW1zIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ugb3IgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbnMsIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiAuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcworICogICAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIERpc2NsYWltZXIgYXMgY29tbWVudHMgaW4gdGhlIGNvZGUgYXMKKyAqICAgIHdlbGwgYXMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIC4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICogICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgRGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgorICogICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogLiBOZWl0aGVyIHRoZSBuYW1lIG9mIEFnZXJlIFN5c3RlbXMgSW5jLiBub3IgdGhlIG5hbWVzIG9mIHRoZSBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogRGlzY2xhaW1lcgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgk0FTIElTlCBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLAorICogSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIElORlJJTkdFTUVOVCBBTkQgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIEFOWQorICogVVNFLCBNT0RJRklDQVRJT04gT1IgRElTVFJJQlVUSU9OIE9GIFRISVMgU09GVFdBUkUgSVMgU09MRUxZIEFUIFRIRSBVU0VSUyBPV04KKyAqIFJJU0suIElOIE5PIEVWRU5UIFNIQUxMIEFHRVJFIFNZU1RFTVMgSU5DLiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNICisgKiBEQU1BR0UuCisgKgorICovCisKKyNpbmNsdWRlICJldDEzMXhfdmVyc2lvbi5oIgorI2luY2x1ZGUgImV0MTMxeF9kZWJ1Zy5oIgorI2luY2x1ZGUgImV0MTMxeF9kZWZzLmgiCisKKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKworI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvcHRyYWNlLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2N0eXBlLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbi5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgorI2luY2x1ZGUgPGFzbS9iaXRvcHMuaD4KKworI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CisjaW5jbHVkZSA8bGludXgvaWZfYXJwLmg+CisjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CisKKyNpbmNsdWRlICJldDEzMTBfcGh5LmgiCisjaW5jbHVkZSAiZXQxMzEwX3BtLmgiCisjaW5jbHVkZSAiZXQxMzEwX2phZ2NvcmUuaCIKKworI2luY2x1ZGUgImV0MTMxeF9hZGFwdGVyLmgiCisjaW5jbHVkZSAiZXQxMzF4X2luaXRwY2kuaCIKKyNpbmNsdWRlICJldDEzMXhfaXNyLmgiCisKKyNpbmNsdWRlICJldDEzMTBfdHguaCIKKworLyogRGF0YSBmb3IgZGVidWdnaW5nIGZhY2lsaXRpZXMgKi8KKyNpZmRlZiBDT05GSUdfRVQxMzFYX0RFQlVHCitleHRlcm4gZGJnX2luZm9fdCAqZXQxMzF4X2RiZ2luZm87CisjZW5kaWYgLyogQ09ORklHX0VUMTMxWF9ERUJVRyAqLworCitzdGF0aWMgdm9pZCBldDEzMXhfdXBkYXRlX3RjYl9saXN0KHN0cnVjdCBldDEzMXhfYWRhcHRlciAqcEFkYXB0ZXIpOworc3RhdGljIHZvaWQgZXQxMzF4X2NoZWNrX3NlbmRfd2FpdF9saXN0KHN0cnVjdCBldDEzMXhfYWRhcHRlciAqcEFkYXB0ZXIpOworc3RhdGljIGlubGluZSB2b2lkIGV0MTMxeF9mcmVlX3NlbmRfcGFja2V0KHN0cnVjdCBldDEzMXhfYWRhcHRlciAqcEFkYXB0ZXIsCisJCQkJCSAgIFBNUF9UQ0IgcE1wVGNiKTsKK3N0YXRpYyBpbnQgZXQxMzF4X3NlbmRfcGFja2V0KHN0cnVjdCBza19idWZmICpza2IsCisJCQkgICAgICBzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKnBBZGFwdGVyKTsKK3N0YXRpYyBpbnQgbmljX3NlbmRfcGFja2V0KHN0cnVjdCBldDEzMXhfYWRhcHRlciAqcEFkYXB0ZXIsIFBNUF9UQ0IgcE1wVGNiKTsKKworLyoqCisgKiBldDEzMXhfdHhfZG1hX21lbW9yeV9hbGxvYworICogQGFkYXB0ZXI6IHBvaW50ZXIgdG8gb3VyIHByaXZhdGUgYWRhcHRlciBzdHJ1Y3R1cmUKKyAqCisgKiBSZXR1cm5zIDAgb24gc3VjY2VzcyBhbmQgZXJybm8gb24gZmFpbHVyZSAoYXMgZGVmaW5lZCBpbiBlcnJuby5oKS4KKyAqCisgKiBBbGxvY2F0ZXMgbWVtb3J5IHRoYXQgd2lsbCBiZSB2aXNpYmxlIGJvdGggdG8gdGhlIGRldmljZSBhbmQgdG8gdGhlIENQVS4KKyAqIFRoZSBPUyB3aWxsIHBhc3MgdXMgcGFja2V0cywgcG9pbnRlcnMgdG8gd2hpY2ggd2Ugd2lsbCBpbnNlcnQgaW4gdGhlIFR4CisgKiBEZXNjcmlwdG9yIHF1ZXVlLiBUaGUgZGV2aWNlIHdpbGwgcmVhZCB0aGlzIHF1ZXVlIHRvIGZpbmQgdGhlIHBhY2tldHMgaW4KKyAqIG1lbW9yeS4gVGhlIGRldmljZSB3aWxsIHVwZGF0ZSB0aGUgInN0YXR1cyIgaW4gbWVtb3J5IGVhY2ggdGltZSBpdCB4bWl0cyBhCisgKiBwYWNrZXQuCisgKi8KK2ludCBldDEzMXhfdHhfZG1hX21lbW9yeV9hbGxvYyhzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJaW50IGRlc2Nfc2l6ZSA9IDA7CisJVFhfUklOR190ICp0eF9yaW5nID0gJmFkYXB0ZXItPlR4UmluZzsKKworCURCR19FTlRFUihldDEzMXhfZGJnaW5mbyk7CisKKwkvKiBBbGxvY2F0ZSBtZW1vcnkgZm9yIHRoZSBUQ0IncyAoVHJhbnNtaXQgQ29udHJvbCBCbG9jaykgKi8KKwlhZGFwdGVyLT5UeFJpbmcuTXBUY2JNZW0gPSAoTVBfVENCICopIGtjYWxsb2MoTlVNX1RDQiwgc2l6ZW9mKE1QX1RDQiksCisJCQkJCQkgICAgICBHRlBfQVRPTUlDIHwgR0ZQX0RNQSk7CisJaWYgKCFhZGFwdGVyLT5UeFJpbmcuTXBUY2JNZW0pIHsKKwkJREJHX0VSUk9SKGV0MTMxeF9kYmdpbmZvLCAiQ2Fubm90IGFsbG9jIG1lbW9yeSBmb3IgVENCc1xuIik7CisJCURCR19MRUFWRShldDEzMXhfZGJnaW5mbyk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCS8qIEFsbG9jYXRlIGVub3VnaCBtZW1vcnkgZm9yIHRoZSBUeCBkZXNjcmlwdG9yIHJpbmcsIGFuZCBhbGxvY2F0ZQorCSAqIHNvbWUgZXh0cmEgc28gdGhhdCB0aGUgcmluZyBjYW4gYmUgYWxpZ25lZCBvbiBhIDRrIGJvdW5kYXJ5LgorCSAqLworCWRlc2Nfc2l6ZSA9IChzaXplb2YoVFhfREVTQ19FTlRSWV90KSAqIE5VTV9ERVNDX1BFUl9SSU5HX1RYKSArIDQwOTYgLSAxOworCXR4X3JpbmctPnBUeERlc2NSaW5nVmEgPQorCSAgICAoUFRYX0RFU0NfRU5UUllfdCkgcGNpX2FsbG9jX2NvbnNpc3RlbnQoYWRhcHRlci0+cGRldiwgZGVzY19zaXplLAorCQkJCQkJICAgICZ0eF9yaW5nLT5wVHhEZXNjUmluZ1BhKTsKKwlpZiAoIWFkYXB0ZXItPlR4UmluZy5wVHhEZXNjUmluZ1ZhKSB7CisJCURCR19FUlJPUihldDEzMXhfZGJnaW5mbywgIkNhbm5vdCBhbGxvYyBtZW1vcnkgZm9yIFR4IFJpbmdcbiIpOworCQlEQkdfTEVBVkUoZXQxMzF4X2RiZ2luZm8pOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwkvKiBTYXZlIHBoeXNpY2FsIGFkZHJlc3MKKwkgKgorCSAqIE5PVEU6IHBjaV9hbGxvY19jb25zaXN0ZW50KCksIHVzZWQgYWJvdmUgdG8gYWxsb2MgRE1BIHJlZ2lvbnMsCisJICogQUxXQVlTIHJldHVybnMgU0FDICgzMi1iaXQpIGFkZHJlc3Nlcy4gSWYgREFDICg2NC1iaXQpIGFkZHJlc3NlcworCSAqIGFyZSBldmVyIHJldHVybmVkLCBtYWtlIHN1cmUgdGhlIGhpZ2ggcGFydCBpcyByZXRyaWV2ZWQgaGVyZSBiZWZvcmUKKwkgKiBzdG9yaW5nIHRoZSBhZGp1c3RlZCBhZGRyZXNzLgorCSAqLworCXR4X3JpbmctPnBUeERlc2NSaW5nQWRqdXN0ZWRQYSA9IHR4X3JpbmctPnBUeERlc2NSaW5nUGE7CisKKwkvKiBBbGlnbiBUeCBEZXNjcmlwdG9yIFJpbmcgb24gYSA0ayAoMHgxMDAwKSBieXRlIGJvdW5kYXJ5ICovCisJZXQxMzF4X2FsaWduX2FsbG9jYXRlZF9tZW1vcnkoYWRhcHRlciwKKwkJCQkgICAgICAmdHhfcmluZy0+cFR4RGVzY1JpbmdBZGp1c3RlZFBhLAorCQkJCSAgICAgICZ0eF9yaW5nLT5UeERlc2NPZmZzZXQsIDB4MEZGRik7CisKKwl0eF9yaW5nLT5wVHhEZXNjUmluZ1ZhICs9IHR4X3JpbmctPlR4RGVzY09mZnNldDsKKworCS8qIEFsbG9jYXRlIG1lbW9yeSBmb3IgdGhlIFR4IHN0YXR1cyBibG9jayAqLworCXR4X3JpbmctPnBUeFN0YXR1c1ZhID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQoYWRhcHRlci0+cGRldiwKKwkJCQkJCSAgICBzaXplb2YoVFhfU1RBVFVTX0JMT0NLX3QpLAorCQkJCQkJICAgICZ0eF9yaW5nLT5wVHhTdGF0dXNQYSk7CisJaWYgKCFhZGFwdGVyLT5UeFJpbmcucFR4U3RhdHVzUGEpIHsKKwkJREJHX0VSUk9SKGV0MTMxeF9kYmdpbmZvLAorCQkJICAiQ2Fubm90IGFsbG9jIG1lbW9yeSBmb3IgVHggc3RhdHVzIGJsb2NrXG4iKTsKKwkJREJHX0xFQVZFKGV0MTMxeF9kYmdpbmZvKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJLyogQWxsb2NhdGUgbWVtb3J5IGZvciBhIGR1bW15IGJ1ZmZlciAqLworCXR4X3JpbmctPnBUeER1bW15QmxrVmEgPSBwY2lfYWxsb2NfY29uc2lzdGVudChhZGFwdGVyLT5wZGV2LAorCQkJCQkJICAgICAgTklDX01JTl9QQUNLRVRfU0laRSwKKwkJCQkJCSAgICAgICZ0eF9yaW5nLT5wVHhEdW1teUJsa1BhKTsKKwlpZiAoIWFkYXB0ZXItPlR4UmluZy5wVHhEdW1teUJsa1BhKSB7CisJCURCR19FUlJPUihldDEzMXhfZGJnaW5mbywKKwkJCSAgIkNhbm5vdCBhbGxvYyBtZW1vcnkgZm9yIFR4IGR1bW15IGJ1ZmZlclxuIik7CisJCURCR19MRUFWRShldDEzMXhfZGJnaW5mbyk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCURCR19MRUFWRShldDEzMXhfZGJnaW5mbyk7CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogZXQxMzF4X3R4X2RtYV9tZW1vcnlfZnJlZSAtIEZyZWUgYWxsIG1lbW9yeSBhbGxvY2F0ZWQgd2l0aGluIHRoaXMgbW9kdWxlCisgKiBAYWRhcHRlcjogcG9pbnRlciB0byBvdXIgcHJpdmF0ZSBhZGFwdGVyIHN0cnVjdHVyZQorICoKKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzIGFuZCBlcnJubyBvbiBmYWlsdXJlIChhcyBkZWZpbmVkIGluIGVycm5vLmgpLgorICovCit2b2lkIGV0MTMxeF90eF9kbWFfbWVtb3J5X2ZyZWUoc3RydWN0IGV0MTMxeF9hZGFwdGVyICphZGFwdGVyKQoreworCWludCBkZXNjX3NpemUgPSAwOworCisJREJHX0VOVEVSKGV0MTMxeF9kYmdpbmZvKTsKKworCWlmIChhZGFwdGVyLT5UeFJpbmcucFR4RGVzY1JpbmdWYSkgeworCQkvKiBGcmVlIG1lbW9yeSByZWxhdGluZyB0byBUeCByaW5ncyBoZXJlICovCisJCWFkYXB0ZXItPlR4UmluZy5wVHhEZXNjUmluZ1ZhIC09IGFkYXB0ZXItPlR4UmluZy5UeERlc2NPZmZzZXQ7CisKKwkJZGVzY19zaXplID0KKwkJICAgIChzaXplb2YoVFhfREVTQ19FTlRSWV90KSAqIE5VTV9ERVNDX1BFUl9SSU5HX1RYKSArIDQwOTYgLSAxOworCisJCXBjaV9mcmVlX2NvbnNpc3RlbnQoYWRhcHRlci0+cGRldiwKKwkJCQkgICAgZGVzY19zaXplLAorCQkJCSAgICBhZGFwdGVyLT5UeFJpbmcucFR4RGVzY1JpbmdWYSwKKwkJCQkgICAgYWRhcHRlci0+VHhSaW5nLnBUeERlc2NSaW5nUGEpOworCisJCWFkYXB0ZXItPlR4UmluZy5wVHhEZXNjUmluZ1ZhID0gTlVMTDsKKwl9CisKKwkvKiBGcmVlIG1lbW9yeSBmb3IgdGhlIFR4IHN0YXR1cyBibG9jayAqLworCWlmIChhZGFwdGVyLT5UeFJpbmcucFR4U3RhdHVzVmEpIHsKKwkJcGNpX2ZyZWVfY29uc2lzdGVudChhZGFwdGVyLT5wZGV2LAorCQkJCSAgICBzaXplb2YoVFhfU1RBVFVTX0JMT0NLX3QpLAorCQkJCSAgICBhZGFwdGVyLT5UeFJpbmcucFR4U3RhdHVzVmEsCisJCQkJICAgIGFkYXB0ZXItPlR4UmluZy5wVHhTdGF0dXNQYSk7CisKKwkJYWRhcHRlci0+VHhSaW5nLnBUeFN0YXR1c1ZhID0gTlVMTDsKKwl9CisKKwkvKiBGcmVlIG1lbW9yeSBmb3IgdGhlIGR1bW15IGJ1ZmZlciAqLworCWlmIChhZGFwdGVyLT5UeFJpbmcucFR4RHVtbXlCbGtWYSkgeworCQlwY2lfZnJlZV9jb25zaXN0ZW50KGFkYXB0ZXItPnBkZXYsCisJCQkJICAgIE5JQ19NSU5fUEFDS0VUX1NJWkUsCisJCQkJICAgIGFkYXB0ZXItPlR4UmluZy5wVHhEdW1teUJsa1ZhLAorCQkJCSAgICBhZGFwdGVyLT5UeFJpbmcucFR4RHVtbXlCbGtQYSk7CisKKwkJYWRhcHRlci0+VHhSaW5nLnBUeER1bW15QmxrVmEgPSBOVUxMOworCX0KKworCS8qIEZyZWUgdGhlIG1lbW9yeSBmb3IgTVBfVENCIHN0cnVjdHVyZXMgKi8KKwlpZiAoYWRhcHRlci0+VHhSaW5nLk1wVGNiTWVtKSB7CisJCWtmcmVlKGFkYXB0ZXItPlR4UmluZy5NcFRjYk1lbSk7CisJCWFkYXB0ZXItPlR4UmluZy5NcFRjYk1lbSA9IE5VTEw7CisJfQorCisJREJHX0xFQVZFKGV0MTMxeF9kYmdpbmZvKTsKK30KKworLyoqCisgKiBDb25maWdUeERtYVJlZ3MgLSBTZXQgdXAgdGhlIHR4IGRtYSBzZWN0aW9uIG9mIHRoZSBKQUdDb3JlLgorICogQGFkYXB0ZXI6IHBvaW50ZXIgdG8gb3VyIHByaXZhdGUgYWRhcHRlciBzdHJ1Y3R1cmUKKyAqLwordm9pZCBDb25maWdUeERtYVJlZ3Moc3RydWN0IGV0MTMxeF9hZGFwdGVyICpwQWRhcHRlcikKK3sKKwlzdHJ1Y3QgX1RYRE1BX3QgX19pb21lbSAqcFR4RG1hID0gJnBBZGFwdGVyLT5DU1JBZGRyZXNzLT50eGRtYTsKKworCURCR19FTlRFUihldDEzMXhfZGJnaW5mbyk7CisKKwkvKiBMb2FkIHRoZSBoYXJkd2FyZSB3aXRoIHRoZSBzdGFydCBvZiB0aGUgdHJhbnNtaXQgZGVzY3JpcHRvciByaW5nLiAqLworCXdyaXRlbCgodWludDMyX3QpIChwQWRhcHRlci0+VHhSaW5nLnBUeERlc2NSaW5nQWRqdXN0ZWRQYSA+PiAzMiksCisJICAgICAgICZwVHhEbWEtPnByX2Jhc2VfaGkpOworCXdyaXRlbCgodWludDMyX3QpIHBBZGFwdGVyLT5UeFJpbmcucFR4RGVzY1JpbmdBZGp1c3RlZFBhLAorCSAgICAgICAmcFR4RG1hLT5wcl9iYXNlX2xvKTsKKworCS8qIEluaXRpYWxpc2UgdGhlIHRyYW5zbWl0IERNQSBlbmdpbmUgKi8KKwl3cml0ZWwoTlVNX0RFU0NfUEVSX1JJTkdfVFggLSAxLCAmcFR4RG1hLT5wcl9udW1fZGVzLnZhbHVlKTsKKworCS8qIExvYWQgdGhlIGNvbXBsZXRpb24gd3JpdGViYWNrIHBoeXNpY2FsIGFkZHJlc3MKKwkgKgorCSAqIE5PVEU6IHBjaV9hbGxvY19jb25zaXN0ZW50KCksIHVzZWQgYWJvdmUgdG8gYWxsb2MgRE1BIHJlZ2lvbnMsCisJICogQUxXQVlTIHJldHVybnMgU0FDICgzMi1iaXQpIGFkZHJlc3Nlcy4gSWYgREFDICg2NC1iaXQpIGFkZHJlc3NlcworCSAqIGFyZSBldmVyIHJldHVybmVkLCBtYWtlIHN1cmUgdGhlIGhpZ2ggcGFydCBpcyByZXRyaWV2ZWQgaGVyZSBiZWZvcmUKKwkgKiBzdG9yaW5nIHRoZSBhZGp1c3RlZCBhZGRyZXNzLgorCSAqLworCXdyaXRlbCgwLCAmcFR4RG1hLT5kbWFfd2JfYmFzZV9oaSk7CisJd3JpdGVsKHBBZGFwdGVyLT5UeFJpbmcucFR4U3RhdHVzUGEsICZwVHhEbWEtPmRtYV93Yl9iYXNlX2xvKTsKKworCW1lbXNldChwQWRhcHRlci0+VHhSaW5nLnBUeFN0YXR1c1ZhLCAwLCBzaXplb2YoVFhfU1RBVFVTX0JMT0NLX3QpKTsKKworCXdyaXRlbCgwLCAmcFR4RG1hLT5zZXJ2aWNlX3JlcXVlc3QudmFsdWUpOworCXBBZGFwdGVyLT5UeFJpbmcudHhEbWFSZWFkeVRvU2VuZC52YWx1ZSA9IDA7CisKKwlEQkdfTEVBVkUoZXQxMzF4X2RiZ2luZm8pOworfQorCisvKioKKyAqIGV0MTMxeF90eF9kbWFfZGlzYWJsZSAtIFN0b3Agb2YgVHhfRE1BIG9uIHRoZSBFVDEzMTAKKyAqIEBwQWRhcHRlcjogcG9pbnRlciB0byBvdXIgYWRhcHRlciBzdHJ1Y3R1cmUKKyAqLwordm9pZCBldDEzMXhfdHhfZG1hX2Rpc2FibGUoc3RydWN0IGV0MTMxeF9hZGFwdGVyICpwQWRhcHRlcikKK3sKKwlEQkdfRU5URVIoZXQxMzF4X2RiZ2luZm8pOworCisJLyogU2V0dXAgdGhlIHRyYW1zbWl0IGRtYSBjb25maWd1cmF0aW9uIHJlZ2lzdGVyICovCisJd3JpdGVsKDB4MTAxLCAmcEFkYXB0ZXItPkNTUkFkZHJlc3MtPnR4ZG1hLmNzci52YWx1ZSk7CisKKwlEQkdfTEVBVkUoZXQxMzF4X2RiZ2luZm8pOworfQorCisvKioKKyAqIGV0MTMxeF90eF9kbWFfZW5hYmxlIC0gcmUtc3RhcnQgb2YgVHhfRE1BIG9uIHRoZSBFVDEzMTAuCisgKiBAcEFkYXB0ZXI6IHBvaW50ZXIgdG8gb3VyIGFkYXB0ZXIgc3RydWN0dXJlCisgKgorICogTWFpbmx5IHVzZWQgYWZ0ZXIgYSByZXR1cm4gdG8gdGhlIEQwIChmdWxsLXBvd2VyKSBzdGF0ZSBmcm9tIGEgbG93ZXIgc3RhdGUuCisgKi8KK3ZvaWQgZXQxMzF4X3R4X2RtYV9lbmFibGUoc3RydWN0IGV0MTMxeF9hZGFwdGVyICpwQWRhcHRlcikKK3sKKwlEQkdfRU5URVIoZXQxMzF4X2RiZ2luZm8pOworCisJaWYgKHBBZGFwdGVyLT5SZWdpc3RyeVBoeUxvb3BiaykgeworCS8qIFR4RE1BIGlzIGRpc2FibGVkIGZvciBsb29wYmFjayBvcGVyYXRpb24uICovCisJCXdyaXRlbCgweDEwMSwgJnBBZGFwdGVyLT5DU1JBZGRyZXNzLT50eGRtYS5jc3IudmFsdWUpOworCX0gZWxzZSB7CisJCVRYRE1BX0NTUl90IGNzciA9IHsgMCB9OworCisJCS8qIFNldHVwIHRoZSB0cmFuc21pdCBkbWEgY29uZmlndXJhdGlvbiByZWdpc3RlciBmb3Igbm9ybWFsCisJCSAqIG9wZXJhdGlvbgorCQkgKi8KKwkJY3NyLmJpdHMuc25nbF9lcGt0X21vZGUgPSAxOworCQljc3IuYml0cy5oYWx0ID0gMDsKKwkJY3NyLmJpdHMuY2FjaGVfdGhyc2hsZCA9IHBBZGFwdGVyLT5SZWdpc3RyeURNQUNhY2hlOworCQl3cml0ZWwoY3NyLnZhbHVlLCAmcEFkYXB0ZXItPkNTUkFkZHJlc3MtPnR4ZG1hLmNzci52YWx1ZSk7CisJfQorCisJREJHX0xFQVZFKGV0MTMxeF9kYmdpbmZvKTsKK30KKworLyoqCisgKiBldDEzMXhfaW5pdF9zZW5kIC0gSW5pdGlhbGl6ZSBzZW5kIGRhdGEgc3RydWN0dXJlcworICogQGFkYXB0ZXI6IHBvaW50ZXIgdG8gb3VyIHByaXZhdGUgYWRhcHRlciBzdHJ1Y3R1cmUKKyAqLwordm9pZCBldDEzMXhfaW5pdF9zZW5kKHN0cnVjdCBldDEzMXhfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlQTVBfVENCIHBNcFRjYjsKKwl1aW50MzJfdCBUY2JDb3VudDsKKwlUWF9SSU5HX3QgKnR4X3Jpbmc7CisKKwlEQkdfRU5URVIoZXQxMzF4X2RiZ2luZm8pOworCisJLyogU2V0dXAgc29tZSBjb252ZW5pZW5jZSBwb2ludGVycyAqLworCXR4X3JpbmcgPSAmYWRhcHRlci0+VHhSaW5nOworCXBNcFRjYiA9IGFkYXB0ZXItPlR4UmluZy5NcFRjYk1lbTsKKworCXR4X3JpbmctPlRDQlJlYWR5UXVldWVIZWFkID0gcE1wVGNiOworCisJLyogR28gdGhyb3VnaCBhbmQgc2V0IHVwIGVhY2ggVENCICovCisJZm9yIChUY2JDb3VudCA9IDA7IFRjYkNvdW50IDwgTlVNX1RDQjsgVGNiQ291bnQrKykgeworCQltZW1zZXQocE1wVGNiLCAwLCBzaXplb2YoTVBfVENCKSk7CisKKwkJLyogU2V0IHRoZSBsaW5rIHBvaW50ZXIgaW4gSFcgVENCIHRvIHRoZSBuZXh0IFRDQiBpbiB0aGUKKwkJICogY2hhaW4uICBJZiB0aGlzIGlzIHRoZSBsYXN0IFRDQiBpbiB0aGUgY2hhaW4sIGFsc28gc2V0IHRoZQorCQkgKiB0YWlsIHBvaW50ZXIuCisJCSAqLworCQlpZiAoVGNiQ291bnQgPCBOVU1fVENCIC0gMSkgeworCQkJcE1wVGNiLT5OZXh0ID0gcE1wVGNiICsgMTsKKwkJfSBlbHNlIHsKKwkJCXR4X3JpbmctPlRDQlJlYWR5UXVldWVUYWlsID0gcE1wVGNiOworCQkJcE1wVGNiLT5OZXh0ID0gKFBNUF9UQ0IpIE5VTEw7CisJCX0KKworCQlwTXBUY2IrKzsKKwl9CisKKwkvKiBDdXJyIHNlbmQgcXVldWUgc2hvdWxkIG5vdyBiZSBlbXB0eSAqLworCXR4X3JpbmctPkN1cnJTZW5kSGVhZCA9IChQTVBfVENCKSBOVUxMOworCXR4X3JpbmctPkN1cnJTZW5kVGFpbCA9IChQTVBfVENCKSBOVUxMOworCisJSU5JVF9MSVNUX0hFQUQoJmFkYXB0ZXItPlR4UmluZy5TZW5kV2FpdFF1ZXVlKTsKKworCURCR19MRUFWRShldDEzMXhfZGJnaW5mbyk7Cit9CisKKy8qKgorICogZXQxMzF4X3NlbmRfcGFja2V0cyAtIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGJ5IHRoZSBPUyB0byBzZW5kIHBhY2tldHMKKyAqIEBza2I6IHRoZSBwYWNrZXQocykgdG8gc2VuZAorICogQG5ldGRldjpkZXZpY2Ugb24gd2hpY2ggdG8gVFggdGhlIGFib3ZlIHBhY2tldChzKQorICoKKyAqIFJldHVybiAwIGluIGFsbW9zdCBhbGwgY2FzZXM7IG5vbi16ZXJvIHZhbHVlIGluIGV4dHJlbWUgaGFyZCBmYWlsdXJlIG9ubHkKKyAqLworaW50IGV0MTMxeF9zZW5kX3BhY2tldHMoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKK3sKKwlpbnQgc3RhdHVzID0gMDsKKwlzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKnBBZGFwdGVyID0gTlVMTDsKKworCURCR19UWF9FTlRFUihldDEzMXhfZGJnaW5mbyk7CisKKwlwQWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CisKKwkvKiBTZW5kIHRoZXNlIHBhY2tldHMKKwkgKgorCSAqIE5PVEU6IFRoZSBMaW51eCBUeCBlbnRyeSBwb2ludCBpcyBvbmx5IGdpdmVuIG9uZSBwYWNrZXQgYXQgYSB0aW1lCisJICogdG8gVHgsIHNvIHRoZSBQYWNrZXRDb3VudCBhbmQgaXQncyBhcnJheSB1c2VkIG1ha2VzIG5vIHNlbnNlIGhlcmUKKwkgKi8KKworCS8qIFF1ZXVlIGlzIG5vdCBlbXB0eSBvciBUQ0IgaXMgbm90IGF2YWlsYWJsZSAqLworCWlmICghbGlzdF9lbXB0eSgmcEFkYXB0ZXItPlR4UmluZy5TZW5kV2FpdFF1ZXVlKSB8fAorCSAgICBNUF9UQ0JfUkVTT1VSQ0VTX05PVF9BVkFJTEFCTEUocEFkYXB0ZXIpKSB7CisJCS8qIE5PVEU6IElmIHRoZXJlJ3MgYW4gZXJyb3Igb24gc2VuZCwgbm8gbmVlZCB0byBxdWV1ZSB0aGUKKwkJICogcGFja2V0IHVuZGVyIExpbnV4OyBpZiB3ZSBqdXN0IHNlbmQgYW4gZXJyb3IgdXAgdG8gdGhlCisJCSAqIG5ldGlmIGxheWVyLCBpdCB3aWxsIHJlc2VuZCB0aGUgc2tiIHRvIHVzLgorCQkgKi8KKwkJREJHX1ZFUkJPU0UoZXQxMzF4X2RiZ2luZm8sICJUQ0IgUmVzb3VyY2VzIE5vdCBBdmFpbGFibGVcbiIpOworCQlzdGF0dXMgPSAtRU5PTUVNOworCX0gZWxzZSB7CisJCS8qIFdlIG5lZWQgdG8gc2VlIGlmIHRoZSBsaW5rIGlzIHVwOyBpZiBpdCdzIG5vdCwgbWFrZSB0aGUKKwkJICogbmV0aWYgbGF5ZXIgdGhpbmsgd2UncmUgZ29vZCBhbmQgZHJvcCB0aGUgcGFja2V0CisJCSAqLworCQkvL2lmKCBNUF9TSE9VTERfRkFJTF9TRU5EKCBwQWRhcHRlciApIHx8IHBBZGFwdGVyLT5Ecml2ZXJOb1BoeUFjY2VzcyApCisJCWlmIChNUF9TSE9VTERfRkFJTF9TRU5EKHBBZGFwdGVyKSB8fCBwQWRhcHRlci0+RHJpdmVyTm9QaHlBY2Nlc3MKKwkJICAgIHx8ICFuZXRpZl9jYXJyaWVyX29rKG5ldGRldikpIHsKKwkJCURCR19WRVJCT1NFKGV0MTMxeF9kYmdpbmZvLAorCQkJCSAgICAiQ2FuJ3QgVHgsIExpbmsgaXMgRE9XTjsgZHJvcCB0aGUgcGFja2V0XG4iKTsKKworCQkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKKwkJCXNrYiA9IE5VTEw7CisKKwkJCXBBZGFwdGVyLT5uZXRfc3RhdHMudHhfZHJvcHBlZCsrOworCQl9IGVsc2UgeworCQkJc3RhdHVzID0gZXQxMzF4X3NlbmRfcGFja2V0KHNrYiwgcEFkYXB0ZXIpOworCisJCQlpZiAoc3RhdHVzID09IC1FTk9NRU0pIHsKKworCQkJCS8qIE5PVEU6IElmIHRoZXJlJ3MgYW4gZXJyb3Igb24gc2VuZCwgbm8gbmVlZAorCQkJCSAqIHRvIHF1ZXVlIHRoZSBwYWNrZXQgdW5kZXIgTGludXg7IGlmIHdlIGp1c3QKKwkJCQkgKiBzZW5kIGFuIGVycm9yIHVwIHRvIHRoZSBuZXRpZiBsYXllciwgaXQKKwkJCQkgKiB3aWxsIHJlc2VuZCB0aGUgc2tiIHRvIHVzLgorCQkJCSAqLworCQkJCURCR19XQVJOSU5HKGV0MTMxeF9kYmdpbmZvLAorCQkJCQkgICAgIlJlc291cmNlcyBwcm9ibGVtLCBRdWV1ZSB0eCBwYWNrZXRcbiIpOworCQkJfSBlbHNlIGlmIChzdGF0dXMgIT0gMCkgeworCQkJCS8qIE9uIGFueSBvdGhlciBlcnJvciwgbWFrZSBuZXRpZiB0aGluayB3ZSdyZQorCQkJCSAqIE9LIGFuZCBkcm9wIHRoZSBwYWNrZXQKKwkJCQkgKi8KKwkJCQlEQkdfV0FSTklORyhldDEzMXhfZGJnaW5mbywKKwkJCQkJICAgICJHZW5lcmFsIGVycm9yLCBkcm9wIHBhY2tldFxuIik7CisKKwkJCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOworCQkJCXNrYiA9IE5VTEw7CisKKwkJCQlwQWRhcHRlci0+bmV0X3N0YXRzLnR4X2Ryb3BwZWQrKzsKKwkJCX0KKwkJfQorCX0KKworCURCR19UWF9MRUFWRShldDEzMXhfZGJnaW5mbyk7CisJcmV0dXJuIHN0YXR1czsKK30KKworLyoqCisgKiBldDEzMXhfc2VuZF9wYWNrZXQgLSBEbyB0aGUgd29yayB0byBzZW5kIGEgcGFja2V0CisgKiBAc2tiOiB0aGUgcGFja2V0KHMpIHRvIHNlbmQKKyAqIEBwQWRhcHRlcjogYSBwb2ludGVyIHRvIHRoZSBkZXZpY2UncyBwcml2YXRlIGFkYXB0ZXIgc3RydWN0dXJlCisgKgorICogUmV0dXJuIDAgaW4gYWxtb3N0IGFsbCBjYXNlczsgbm9uLXplcm8gdmFsdWUgaW4gZXh0cmVtZSBoYXJkIGZhaWx1cmUgb25seS4KKyAqCisgKiBBc3N1bXB0aW9uOiBTZW5kIHNwaW5sb2NrIGhhcyBiZWVuIGFjcXVpcmVkCisgKi8KK3N0YXRpYyBpbnQgZXQxMzF4X3NlbmRfcGFja2V0KHN0cnVjdCBza19idWZmICpza2IsCisJCQkgICAgICBzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKnBBZGFwdGVyKQoreworCWludCBzdGF0dXMgPSAwOworCVBNUF9UQ0IgcE1wVGNiID0gTlVMTDsKKwl1aW50MTZfdCAqcFNoQnVmVmE7CisJdW5zaWduZWQgbG9uZyBsb2NrZmxhZ3M7CisKKwlEQkdfVFhfRU5URVIoZXQxMzF4X2RiZ2luZm8pOworCisJLyogSXMgb3VyIGJ1ZmZlciBzY2F0dGVyZWQsIG9yIGNvbnRpbnVvdXM/ICovCisJaWYgKHNrYl9zaGluZm8oc2tiKS0+bnJfZnJhZ3MgPT0gMCkgeworCQlEQkdfVFgoZXQxMzF4X2RiZ2luZm8sICJTY2F0dGVyZWQgYnVmZmVyOiBOT1xuIik7CisJfSBlbHNlIHsKKwkJREJHX1RYKGV0MTMxeF9kYmdpbmZvLCAiU2NhdHRlcmVkIGJ1ZmZlcjogWUVTLCBOdW0gRnJhZ3M6ICVkXG4iLAorCQkgICAgICAgc2tiX3NoaW5mbyhza2IpLT5ucl9mcmFncyk7CisJfQorCisJLyogQWxsIHBhY2tldHMgbXVzdCBoYXZlIGF0IGxlYXN0IGEgTUFDIGFkZHJlc3MgYW5kIGEgcHJvdG9jb2wgdHlwZSAqLworCWlmIChza2ItPmxlbiA8IEVUSF9ITEVOKSB7CisJCURCR19FUlJPUihldDEzMXhfZGJnaW5mbywKKwkJCSAgIlBhY2tldCBzaXplIDwgRVRIX0hMRU4gKDE0IGJ5dGVzKVxuIik7CisJCURCR19MRUFWRShldDEzMXhfZGJnaW5mbyk7CisJCXJldHVybiAtRUlPOworCX0KKworCS8qIEdldCBhIFRDQiBmb3IgdGhpcyBwYWNrZXQgKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSgmcEFkYXB0ZXItPlRDQlJlYWR5UUxvY2ssIGxvY2tmbGFncyk7CisKKwlwTXBUY2IgPSBwQWRhcHRlci0+VHhSaW5nLlRDQlJlYWR5UXVldWVIZWFkOworCisJaWYgKHBNcFRjYiA9PSBOVUxMKSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBBZGFwdGVyLT5UQ0JSZWFkeVFMb2NrLCBsb2NrZmxhZ3MpOworCisJCURCR19XQVJOSU5HKGV0MTMxeF9kYmdpbmZvLCAiQ2FuJ3Qgb2J0YWluIGEgVENCXG4iKTsKKwkJREJHX1RYX0xFQVZFKGV0MTMxeF9kYmdpbmZvKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJcEFkYXB0ZXItPlR4UmluZy5UQ0JSZWFkeVF1ZXVlSGVhZCA9IHBNcFRjYi0+TmV4dDsKKworCWlmIChwQWRhcHRlci0+VHhSaW5nLlRDQlJlYWR5UXVldWVIZWFkID09IE5VTEwpIHsKKwkJcEFkYXB0ZXItPlR4UmluZy5UQ0JSZWFkeVF1ZXVlVGFpbCA9IE5VTEw7CisJfQorCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcEFkYXB0ZXItPlRDQlJlYWR5UUxvY2ssIGxvY2tmbGFncyk7CisKKwlwTXBUY2ItPlBhY2tldExlbmd0aCA9IHNrYi0+bGVuOworCXBNcFRjYi0+UGFja2V0ID0gc2tiOworCisJaWYgKChza2ItPmRhdGEgIT0gTlVMTCkgJiYgKChza2ItPmxlbiAtIHNrYi0+ZGF0YV9sZW4pID49IDYpKSB7CisJCXBTaEJ1ZlZhID0gKHVpbnQxNl90ICopIHNrYi0+ZGF0YTsKKworCQlpZiAoKHBTaEJ1ZlZhWzBdID09IDB4ZmZmZikgJiYKKwkJICAgIChwU2hCdWZWYVsxXSA9PSAweGZmZmYpICYmIChwU2hCdWZWYVsyXSA9PSAweGZmZmYpKSB7CisJCQlNUF9TRVRfRkxBRyhwTXBUY2IsIGZNUF9ERVNUX0JST0FEKTsKKwkJfSBlbHNlIGlmICgocFNoQnVmVmFbMF0gJiAweDMpID09IDB4MDAwMSkgeworCQkJTVBfU0VUX0ZMQUcocE1wVGNiLCBmTVBfREVTVF9NVUxUSSk7CisJCX0KKwl9CisKKwlwTXBUY2ItPk5leHQgPSBOVUxMOworCisJLyogQ2FsbCB0aGUgTklDIHNwZWNpZmljIHNlbmQgaGFuZGxlci4gKi8KKwlpZiAoc3RhdHVzID09IDApIHsKKwkJc3RhdHVzID0gbmljX3NlbmRfcGFja2V0KHBBZGFwdGVyLCBwTXBUY2IpOworCX0KKworCWlmIChzdGF0dXMgIT0gMCkgeworCQlzcGluX2xvY2tfaXJxc2F2ZSgmcEFkYXB0ZXItPlRDQlJlYWR5UUxvY2ssIGxvY2tmbGFncyk7CisKKwkJaWYgKHBBZGFwdGVyLT5UeFJpbmcuVENCUmVhZHlRdWV1ZVRhaWwpIHsKKwkJCXBBZGFwdGVyLT5UeFJpbmcuVENCUmVhZHlRdWV1ZVRhaWwtPk5leHQgPSBwTXBUY2I7CisJCX0gZWxzZSB7CisJCQkvKiBBcHBhcmVudGx5IHJlYWR5IFEgaXMgZW1wdHkuICovCisJCQlwQWRhcHRlci0+VHhSaW5nLlRDQlJlYWR5UXVldWVIZWFkID0gcE1wVGNiOworCQl9CisKKwkJcEFkYXB0ZXItPlR4UmluZy5UQ0JSZWFkeVF1ZXVlVGFpbCA9IHBNcFRjYjsKKworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwQWRhcHRlci0+VENCUmVhZHlRTG9jaywgbG9ja2ZsYWdzKTsKKworCQlEQkdfVFhfTEVBVkUoZXQxMzF4X2RiZ2luZm8pOworCQlyZXR1cm4gc3RhdHVzOworCX0KKworCURCR19BU1NFUlQocEFkYXB0ZXItPlR4UmluZy5uQnVzeVNlbmQgPD0gTlVNX1RDQik7CisKKwlEQkdfVFhfTEVBVkUoZXQxMzF4X2RiZ2luZm8pOworCXJldHVybiAwOworfQorCisvKioKKyAqIG5pY19zZW5kX3BhY2tldCAtIE5JQyBzcGVjaWZpYyBzZW5kIGhhbmRsZXIgZm9yIHZlcnNpb24gQiBzaWxpY29uLgorICogQHBBZGFwdGVyOiBwb2ludGVyIHRvIG91ciBhZGFwdGVyCisgKiBAcE1wVGNiOiBwb2ludGVyIHRvIE1QX1RDQgorICoKKyAqIFJldHVybnMgMCBvciBlcnJuby4KKyAqLworc3RhdGljIGludCBuaWNfc2VuZF9wYWNrZXQoc3RydWN0IGV0MTMxeF9hZGFwdGVyICpwQWRhcHRlciwgUE1QX1RDQiBwTXBUY2IpCit7CisJdWludDMyX3QgbG9vcEluZGV4OworCVRYX0RFU0NfRU5UUllfdCBDdXJEZXNjWzI0XTsKKwl1aW50MzJfdCBGcmFnbWVudE51bWJlciA9IDA7CisJdWludDMyX3QgaVRoaXNDb3B5LCBpUmVtYWluZGVyOworCXN0cnVjdCBza19idWZmICpwUGFja2V0ID0gcE1wVGNiLT5QYWNrZXQ7CisJdWludDMyX3QgRnJhZ0xpc3RDb3VudCA9IHNrYl9zaGluZm8ocFBhY2tldCktPm5yX2ZyYWdzICsgMTsKKwlzdHJ1Y3Qgc2tiX2ZyYWdfc3RydWN0ICpwRnJhZ0xpc3QgPSAmc2tiX3NoaW5mbyhwUGFja2V0KS0+ZnJhZ3NbMF07CisJdW5zaWduZWQgbG9uZyBsb2NrZmxhZ3MxLCBsb2NrZmxhZ3MyOworCisJREJHX1RYX0VOVEVSKGV0MTMxeF9kYmdpbmZvKTsKKworCS8qIFBhcnQgb2YgdGhlIG9wdGltaXphdGlvbnMgb2YgdGhpcyBzZW5kIHJvdXRpbmUgcmVzdHJpY3QgdXMgdG8KKwkgKiBzZW5kaW5nIDI0IGZyYWdtZW50cyBhdCBhIHBhc3MuICBJbiBwcmFjdGljZSB3ZSBzaG91bGQgbmV2ZXIgc2VlCisJICogbW9yZSB0aGFuIDUgZnJhZ21lbnRzLgorCSAqCisJICogTk9URTogVGhlIG9sZGVyIHZlcnNpb24gb2YgdGhpcyBmdW5jdGlvbiAoYmVsb3cpIGNhbiBoYW5kbGUgYW55CisJICogbnVtYmVyIG9mIGZyYWdtZW50cy4gSWYgbmVlZGVkLCB3ZSBjYW4gY2FsbCB0aGlzIGZ1bmN0aW9uLAorCSAqIGFsdGhvdWdoIGl0IGlzIGxlc3MgZWZmaWNpZW50LgorCSAqLworCWlmIChGcmFnTGlzdENvdW50ID4gMjMpIHsKKwkJREJHX1RYX0xFQVZFKGV0MTMxeF9kYmdpbmZvKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJbWVtc2V0KEN1ckRlc2MsIDAsIHNpemVvZihUWF9ERVNDX0VOVFJZX3QpICogKEZyYWdMaXN0Q291bnQgKyAxKSk7CisKKwlmb3IgKGxvb3BJbmRleCA9IDA7IGxvb3BJbmRleCA8IEZyYWdMaXN0Q291bnQ7IGxvb3BJbmRleCsrKSB7CisJCS8qIElmIHRoZXJlIGlzIHNvbWV0aGluZyBpbiB0aGlzIGVsZW1lbnQsIGxldHMgZ2V0IGEKKwkJICogZGVzY3JpcHRvciBmcm9tIHRoZSByaW5nIGFuZCBnZXQgdGhlIG5lY2Vzc2FyeSBkYXRhCisJCSAqLworCQlpZiAobG9vcEluZGV4ID09IDApIHsKKwkJCS8qIElmIHRoZSBmcmFnbWVudHMgYXJlIHNtYWxsZXIgdGhhbiBhIHN0YW5kYXJkIE1UVSwKKwkJCSAqIHRoZW4gbWFwIHRoZW0gdG8gYSBzaW5nbGUgZGVzY3JpcHRvciBpbiB0aGUgVHgKKwkJCSAqIERlc2MgcmluZy4gSG93ZXZlciwgaWYgdGhleSdyZSBsYXJnZXIsIGFzIGlzCisJCQkgKiBwb3NzaWJsZSB3aXRoIHN1cHBvcnQgZm9yIGp1bWJvIHBhY2tldHMsIHRoZW4KKwkJCSAqIHNwbGl0IHRoZW0gZWFjaCBhY3Jvc3MgMiBkZXNjcmlwdG9ycy4KKwkJCSAqCisJCQkgKiBUaGlzIHdpbGwgd29yayB1bnRpbCB3ZSBkZXRlcm1pbmUgd2h5IHRoZSBoYXJkd2FyZQorCQkJICogZG9lc24ndCBzZWVtIHRvIGxpa2UgbGFyZ2UgZnJhZ21lbnRzLgorCQkJICovCisJCQlpZiAoKHBQYWNrZXQtPmxlbiAtIHBQYWNrZXQtPmRhdGFfbGVuKSA8PSAxNTE0KSB7CisJCQkJREJHX1RYKGV0MTMxeF9kYmdpbmZvLAorCQkJCSAgICAgICAiR290IHBhY2tldCBvZiBsZW5ndGggJWQsICIKKwkJCQkgICAgICAgImZpbGxpbmcgZGVzYyBlbnRyeSAlZCwgIgorCQkJCSAgICAgICAiVENCOiAweCVwXG4iLAorCQkJCSAgICAgICAocFBhY2tldC0+bGVuIC0gcFBhY2tldC0+ZGF0YV9sZW4pLAorCQkJCSAgICAgICBwQWRhcHRlci0+VHhSaW5nLnR4RG1hUmVhZHlUb1NlbmQuYml0cy4KKwkJCQkgICAgICAgdmFsLCBwTXBUY2IpOworCisJCQkJQ3VyRGVzY1tGcmFnbWVudE51bWJlcl0uRGF0YUJ1ZmZlclB0ckhpZ2ggPSAwOworCisJCQkJQ3VyRGVzY1tGcmFnbWVudE51bWJlcl0ud29yZDIuYml0cy4KKwkJCQkgICAgbGVuZ3RoX2luX2J5dGVzID0KKwkJCQkgICAgcFBhY2tldC0+bGVuIC0gcFBhY2tldC0+ZGF0YV9sZW47CisKKwkJCQkvKiBOT1RFOiBIZXJlLCB0aGUgZG1hX2FkZHJfdCByZXR1cm5lZCBmcm9tCisJCQkJICogcGNpX21hcF9zaW5nbGUoKSBpcyBpbXBsaWNpdGx5IGNhc3QgYXMgYQorCQkJCSAqIHVpbnQzMl90LiBBbHRob3VnaCBkbWFfYWRkcl90IGNhbiBiZQorCQkJCSAqIDY0LWJpdCwgdGhlIGFkZHJlc3MgcmV0dXJuZWQgYnkKKwkJCQkgKiBwY2lfbWFwX3NpbmdsZSgpIGlzIGFsd2F5cyAzMi1iaXQKKwkJCQkgKiBhZGRyZXNzYWJsZSAoYXMgZGVmaW5lZCBieSB0aGUgcGNpL2RtYQorCQkJCSAqIHN1YnN5c3RlbSkKKwkJCQkgKi8KKwkJCQlDdXJEZXNjW0ZyYWdtZW50TnVtYmVyKytdLkRhdGFCdWZmZXJQdHJMb3cgPQorCQkJCSAgICBwY2lfbWFwX3NpbmdsZShwQWRhcHRlci0+cGRldiwKKwkJCQkJCSAgIHBQYWNrZXQtPmRhdGEsCisJCQkJCQkgICBwUGFja2V0LT5sZW4gLQorCQkJCQkJICAgcFBhY2tldC0+ZGF0YV9sZW4sCisJCQkJCQkgICBQQ0lfRE1BX1RPREVWSUNFKTsKKwkJCX0gZWxzZSB7CisJCQkJREJHX1RYKGV0MTMxeF9kYmdpbmZvLAorCQkJCSAgICAgICAiR290IHBhY2tldCBvZiBsZW5ndGggJWQsICIKKwkJCQkgICAgICAgImZpbGxpbmcgZGVzYyBlbnRyeSAlZCwgIgorCQkJCSAgICAgICAiVENCOiAweCVwXG4iLAorCQkJCSAgICAgICAocFBhY2tldC0+bGVuIC0gcFBhY2tldC0+ZGF0YV9sZW4pLAorCQkJCSAgICAgICBwQWRhcHRlci0+VHhSaW5nLnR4RG1hUmVhZHlUb1NlbmQuYml0cy4KKwkJCQkgICAgICAgdmFsLCBwTXBUY2IpOworCisJCQkJQ3VyRGVzY1tGcmFnbWVudE51bWJlcl0uRGF0YUJ1ZmZlclB0ckhpZ2ggPSAwOworCisJCQkJQ3VyRGVzY1tGcmFnbWVudE51bWJlcl0ud29yZDIuYml0cy4KKwkJCQkgICAgbGVuZ3RoX2luX2J5dGVzID0KKwkJCQkgICAgKChwUGFja2V0LT5sZW4gLSBwUGFja2V0LT5kYXRhX2xlbikgLyAyKTsKKworCQkJCS8qIE5PVEU6IEhlcmUsIHRoZSBkbWFfYWRkcl90IHJldHVybmVkIGZyb20KKwkJCQkgKiBwY2lfbWFwX3NpbmdsZSgpIGlzIGltcGxpY2l0bHkgY2FzdCBhcyBhCisJCQkJICogdWludDMyX3QuIEFsdGhvdWdoIGRtYV9hZGRyX3QgY2FuIGJlCisJCQkJICogNjQtYml0LCB0aGUgYWRkcmVzcyByZXR1cm5lZCBieQorCQkJCSAqIHBjaV9tYXBfc2luZ2xlKCkgaXMgYWx3YXlzIDMyLWJpdAorCQkJCSAqIGFkZHJlc3NhYmxlIChhcyBkZWZpbmVkIGJ5IHRoZSBwY2kvZG1hCisJCQkJICogc3Vic3lzdGVtKQorCQkJCSAqLworCQkJCUN1ckRlc2NbRnJhZ21lbnROdW1iZXIrK10uRGF0YUJ1ZmZlclB0ckxvdyA9CisJCQkJICAgIHBjaV9tYXBfc2luZ2xlKHBBZGFwdGVyLT5wZGV2LAorCQkJCQkJICAgcFBhY2tldC0+ZGF0YSwKKwkJCQkJCSAgICgocFBhY2tldC0+bGVuIC0KKwkJCQkJCSAgICAgcFBhY2tldC0+ZGF0YV9sZW4pIC8gMiksCisJCQkJCQkgICBQQ0lfRE1BX1RPREVWSUNFKTsKKwkJCQlDdXJEZXNjW0ZyYWdtZW50TnVtYmVyXS5EYXRhQnVmZmVyUHRySGlnaCA9IDA7CisKKwkJCQlDdXJEZXNjW0ZyYWdtZW50TnVtYmVyXS53b3JkMi5iaXRzLgorCQkJCSAgICBsZW5ndGhfaW5fYnl0ZXMgPQorCQkJCSAgICAoKHBQYWNrZXQtPmxlbiAtIHBQYWNrZXQtPmRhdGFfbGVuKSAvIDIpOworCisJCQkJLyogTk9URTogSGVyZSwgdGhlIGRtYV9hZGRyX3QgcmV0dXJuZWQgZnJvbQorCQkJCSAqIHBjaV9tYXBfc2luZ2xlKCkgaXMgaW1wbGljaXRseSBjYXN0IGFzIGEKKwkJCQkgKiB1aW50MzJfdC4gQWx0aG91Z2ggZG1hX2FkZHJfdCBjYW4gYmUKKwkJCQkgKiA2NC1iaXQsIHRoZSBhZGRyZXNzIHJldHVybmVkIGJ5CisJCQkJICogcGNpX21hcF9zaW5nbGUoKSBpcyBhbHdheXMgMzItYml0CisJCQkJICogYWRkcmVzc2FibGUgKGFzIGRlZmluZWQgYnkgdGhlIHBjaS9kbWEKKwkJCQkgKiBzdWJzeXN0ZW0pCisJCQkJICovCisJCQkJQ3VyRGVzY1tGcmFnbWVudE51bWJlcisrXS5EYXRhQnVmZmVyUHRyTG93ID0KKwkJCQkgICAgcGNpX21hcF9zaW5nbGUocEFkYXB0ZXItPnBkZXYsCisJCQkJCQkgICBwUGFja2V0LT5kYXRhICsKKwkJCQkJCSAgICgocFBhY2tldC0+bGVuIC0KKwkJCQkJCSAgICAgcFBhY2tldC0+ZGF0YV9sZW4pIC8gMiksCisJCQkJCQkgICAoKHBQYWNrZXQtPmxlbiAtCisJCQkJCQkgICAgIHBQYWNrZXQtPmRhdGFfbGVuKSAvIDIpLAorCQkJCQkJICAgUENJX0RNQV9UT0RFVklDRSk7CisJCQl9CisJCX0gZWxzZSB7CisJCQlEQkdfVFgoZXQxMzF4X2RiZ2luZm8sCisJCQkgICAgICAgIkdvdCBwYWNrZXQgb2YgbGVuZ3RoICVkLCIKKwkJCSAgICAgICAiZmlsbGluZyBkZXNjIGVudHJ5ICVkXG4iCisJCQkgICAgICAgIlRDQjogMHglcFxuIiwKKwkJCSAgICAgICBwRnJhZ0xpc3RbbG9vcEluZGV4XS5zaXplLAorCQkJICAgICAgIHBBZGFwdGVyLT5UeFJpbmcudHhEbWFSZWFkeVRvU2VuZC5iaXRzLnZhbCwKKwkJCSAgICAgICBwTXBUY2IpOworCisJCQlDdXJEZXNjW0ZyYWdtZW50TnVtYmVyXS5EYXRhQnVmZmVyUHRySGlnaCA9IDA7CisKKwkJCUN1ckRlc2NbRnJhZ21lbnROdW1iZXJdLndvcmQyLmJpdHMubGVuZ3RoX2luX2J5dGVzID0KKwkJCSAgICBwRnJhZ0xpc3RbbG9vcEluZGV4IC0gMV0uc2l6ZTsKKworCQkJLyogTk9URTogSGVyZSwgdGhlIGRtYV9hZGRyX3QgcmV0dXJuZWQgZnJvbQorCQkJICogcGNpX21hcF9wYWdlKCkgaXMgaW1wbGljaXRseSBjYXN0IGFzIGEgdWludDMyX3QuCisJCQkgKiBBbHRob3VnaCBkbWFfYWRkcl90IGNhbiBiZSA2NC1iaXQsIHRoZSBhZGRyZXNzCisJCQkgKiByZXR1cm5lZCBieSBwY2lfbWFwX3BhZ2UoKSBpcyBhbHdheXMgMzItYml0CisJCQkgKiBhZGRyZXNzYWJsZSAoYXMgZGVmaW5lZCBieSB0aGUgcGNpL2RtYSBzdWJzeXN0ZW0pCisJCQkgKi8KKwkJCUN1ckRlc2NbRnJhZ21lbnROdW1iZXIrK10uRGF0YUJ1ZmZlclB0ckxvdyA9CisJCQkgICAgcGNpX21hcF9wYWdlKHBBZGFwdGVyLT5wZGV2LAorCQkJCQkgcEZyYWdMaXN0W2xvb3BJbmRleCAtIDFdLnBhZ2UsCisJCQkJCSBwRnJhZ0xpc3RbbG9vcEluZGV4IC0gMV0ucGFnZV9vZmZzZXQsCisJCQkJCSBwRnJhZ0xpc3RbbG9vcEluZGV4IC0gMV0uc2l6ZSwKKwkJCQkJIFBDSV9ETUFfVE9ERVZJQ0UpOworCQl9CisJfQorCisJaWYgKEZyYWdtZW50TnVtYmVyID09IDApIHsKKwkJREJHX1dBUk5JTkcoZXQxMzF4X2RiZ2luZm8sICJOby4gZnJhZ3MgaXMgMFxuIik7CisJCXJldHVybiAtRUlPOworCX0KKworCWlmIChwQWRhcHRlci0+dWlMaW5rU3BlZWQgPT0gVFJVRVBIWV9TUEVFRF8xMDAwTUJQUykgeworCQlpZiAoKytwQWRhcHRlci0+VHhSaW5nLlR4UGFja2V0c1NpbmNlTGFzdGludGVycnVwdCA9PQorCQkgICAgcEFkYXB0ZXItPlJlZ2lzdHJ5VHhOdW1CdWZmZXJzKSB7CisJCQlDdXJEZXNjW0ZyYWdtZW50TnVtYmVyIC0gMV0ud29yZDMudmFsdWUgPSAweDU7CisJCQlwQWRhcHRlci0+VHhSaW5nLlR4UGFja2V0c1NpbmNlTGFzdGludGVycnVwdCA9IDA7CisJCX0gZWxzZSB7CisJCQlDdXJEZXNjW0ZyYWdtZW50TnVtYmVyIC0gMV0ud29yZDMudmFsdWUgPSAweDE7CisJCX0KKwl9IGVsc2UgeworCQlDdXJEZXNjW0ZyYWdtZW50TnVtYmVyIC0gMV0ud29yZDMudmFsdWUgPSAweDU7CisJfQorCisJQ3VyRGVzY1swXS53b3JkMy5iaXRzLmYgPSAxOworCisJcE1wVGNiLT5XckluZGV4U3RhcnQgPSBwQWRhcHRlci0+VHhSaW5nLnR4RG1hUmVhZHlUb1NlbmQ7CisJcE1wVGNiLT5QYWNrZXRTdGFsZUNvdW50ID0gMDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZwQWRhcHRlci0+U2VuZEhXTG9jaywgbG9ja2ZsYWdzMSk7CisKKwlpVGhpc0NvcHkgPQorCSAgICBOVU1fREVTQ19QRVJfUklOR19UWCAtIHBBZGFwdGVyLT5UeFJpbmcudHhEbWFSZWFkeVRvU2VuZC5iaXRzLnZhbDsKKworCWlmIChpVGhpc0NvcHkgPj0gRnJhZ21lbnROdW1iZXIpIHsKKwkJaVJlbWFpbmRlciA9IDA7CisJCWlUaGlzQ29weSA9IEZyYWdtZW50TnVtYmVyOworCX0gZWxzZSB7CisJCWlSZW1haW5kZXIgPSBGcmFnbWVudE51bWJlciAtIGlUaGlzQ29weTsKKwl9CisKKwltZW1jcHkocEFkYXB0ZXItPlR4UmluZy5wVHhEZXNjUmluZ1ZhICsKKwkgICAgICAgcEFkYXB0ZXItPlR4UmluZy50eERtYVJlYWR5VG9TZW5kLmJpdHMudmFsLCBDdXJEZXNjLAorCSAgICAgICBzaXplb2YoVFhfREVTQ19FTlRSWV90KSAqIGlUaGlzQ29weSk7CisKKwlwQWRhcHRlci0+VHhSaW5nLnR4RG1hUmVhZHlUb1NlbmQuYml0cy52YWwgKz0gaVRoaXNDb3B5OworCisJaWYgKChwQWRhcHRlci0+VHhSaW5nLnR4RG1hUmVhZHlUb1NlbmQuYml0cy52YWwgPT0gMCkgfHwKKwkgICAgKHBBZGFwdGVyLT5UeFJpbmcudHhEbWFSZWFkeVRvU2VuZC5iaXRzLnZhbCA9PQorCSAgICAgTlVNX0RFU0NfUEVSX1JJTkdfVFgpKSB7CisJCWlmIChwQWRhcHRlci0+VHhSaW5nLnR4RG1hUmVhZHlUb1NlbmQuYml0cy53cmFwKSB7CisJCQlwQWRhcHRlci0+VHhSaW5nLnR4RG1hUmVhZHlUb1NlbmQudmFsdWUgPSAwOworCQl9IGVsc2UgeworCQkJcEFkYXB0ZXItPlR4UmluZy50eERtYVJlYWR5VG9TZW5kLnZhbHVlID0gMHg0MDA7CisJCX0KKwl9CisKKwlpZiAoaVJlbWFpbmRlcikgeworCQltZW1jcHkocEFkYXB0ZXItPlR4UmluZy5wVHhEZXNjUmluZ1ZhLAorCQkgICAgICAgQ3VyRGVzYyArIGlUaGlzQ29weSwKKwkJICAgICAgIHNpemVvZihUWF9ERVNDX0VOVFJZX3QpICogaVJlbWFpbmRlcik7CisKKwkJcEFkYXB0ZXItPlR4UmluZy50eERtYVJlYWR5VG9TZW5kLmJpdHMudmFsICs9IGlSZW1haW5kZXI7CisJfQorCisJaWYgKHBBZGFwdGVyLT5UeFJpbmcudHhEbWFSZWFkeVRvU2VuZC5iaXRzLnZhbCA9PSAwKSB7CisJCWlmIChwQWRhcHRlci0+VHhSaW5nLnR4RG1hUmVhZHlUb1NlbmQudmFsdWUpIHsKKwkJCXBNcFRjYi0+V3JJbmRleC52YWx1ZSA9IE5VTV9ERVNDX1BFUl9SSU5HX1RYIC0gMTsKKwkJfSBlbHNlIHsKKwkJCXBNcFRjYi0+V3JJbmRleC52YWx1ZSA9CisJCQkgICAgMHg0MDAgfCAoTlVNX0RFU0NfUEVSX1JJTkdfVFggLSAxKTsKKwkJfQorCX0gZWxzZSB7CisJCXBNcFRjYi0+V3JJbmRleC52YWx1ZSA9CisJCSAgICBwQWRhcHRlci0+VHhSaW5nLnR4RG1hUmVhZHlUb1NlbmQudmFsdWUgLSAxOworCX0KKworCXNwaW5fbG9ja19pcnFzYXZlKCZwQWRhcHRlci0+VENCU2VuZFFMb2NrLCBsb2NrZmxhZ3MyKTsKKworCWlmIChwQWRhcHRlci0+VHhSaW5nLkN1cnJTZW5kVGFpbCkgeworCQlwQWRhcHRlci0+VHhSaW5nLkN1cnJTZW5kVGFpbC0+TmV4dCA9IHBNcFRjYjsKKwl9IGVsc2UgeworCQlwQWRhcHRlci0+VHhSaW5nLkN1cnJTZW5kSGVhZCA9IHBNcFRjYjsKKwl9CisKKwlwQWRhcHRlci0+VHhSaW5nLkN1cnJTZW5kVGFpbCA9IHBNcFRjYjsKKworCURCR19BU1NFUlQocE1wVGNiLT5OZXh0ID09IE5VTEwpOworCisJcEFkYXB0ZXItPlR4UmluZy5uQnVzeVNlbmQrKzsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBBZGFwdGVyLT5UQ0JTZW5kUUxvY2ssIGxvY2tmbGFnczIpOworCisJLyogV3JpdGUgdGhlIG5ldyB3cml0ZSBwb2ludGVyIGJhY2sgdG8gdGhlIGRldmljZS4gKi8KKwl3cml0ZWwocEFkYXB0ZXItPlR4UmluZy50eERtYVJlYWR5VG9TZW5kLnZhbHVlLAorCSAgICAgICAmcEFkYXB0ZXItPkNTUkFkZHJlc3MtPnR4ZG1hLnNlcnZpY2VfcmVxdWVzdC52YWx1ZSk7CisKKwkvKiBGb3IgR2lnIG9ubHksIHdlIHVzZSBUeCBJbnRlcnJ1cHQgY29hbGVzY2luZy4gIEVuYWJsZSB0aGUgc29mdHdhcmUKKwkgKiB0aW1lciB0byB3YWtlIHVzIHVwIGlmIHRoaXMgcGFja2V0IGlzbid0IGZvbGxvd2VkIGJ5IE4gbW9yZS4KKwkgKi8KKwlpZiAocEFkYXB0ZXItPnVpTGlua1NwZWVkID09IFRSVUVQSFlfU1BFRURfMTAwME1CUFMpIHsKKwkJd3JpdGVsKHBBZGFwdGVyLT5SZWdpc3RyeVR4VGltZUludGVydmFsICogTkFOT19JTl9BX01JQ1JPLAorCQkgICAgICAgJnBBZGFwdGVyLT5DU1JBZGRyZXNzLT5nbG9iYWwud2F0Y2hkb2dfdGltZXIpOworCX0KKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBBZGFwdGVyLT5TZW5kSFdMb2NrLCBsb2NrZmxhZ3MxKTsKKworCURCR19UWF9MRUFWRShldDEzMXhfZGJnaW5mbyk7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBOT1RFOiBGb3Igbm93LCBrZWVwIHRoaXMgb2xkZXIgdmVyc2lvbiBvZiBOSUNTZW5kUGFja2V0IGFyb3VuZCBmb3IKKyAqIHJlZmVyZW5jZSwgZXZlbiB0aG91Z2ggaXQncyBub3QgdXNlZAorICovCisjaWYgMAorCisvKioKKyAqIE5JQ1NlbmRQYWNrZXQgLSBOSUMgc3BlY2lmaWMgc2VuZCBoYW5kbGVyLgorICogQHBBZGFwdGVyOiBwb2ludGVyIHRvIG91ciBhZGFwdGVyCisgKiBAcE1wVGNiOiBwb2ludGVyIHRvIE1QX1RDQgorICoKKyAqIFJldHVybnMgMCBvbiBzdWNjZXMsIGVycm5vIG9uIGZhaWx1cmUuCisgKgorICogVGhpcyB2ZXJzaW9uIG9mIHRoZSBzZW5kIHJvdXRpbmUgaXMgZGVzaWduZWQgZm9yIHZlcnNpb24gQSBzaWxpY29uLgorICogQXNzdW1wdGlvbiAtIFNlbmQgc3BpbmxvY2sgaGFzIGJlZW4gYWNxdWlyZWQuCisgKi8KK3N0YXRpYyBpbnQgbmljX3NlbmRfcGFja2V0KHN0cnVjdCBldDEzMXhfYWRhcHRlciAqcEFkYXB0ZXIsIFBNUF9UQ0IgcE1wVGNiKQoreworCXVpbnQzMl90IGxvb3BJbmRleCwgZnJhZ0luZGV4LCBsb29wRW5kOworCXVpbnQzMl90IGlTcGxpdEZpcnN0RWxlbWVudCA9IDA7CisJdWludDMyX3QgU2VnbWVudFNpemUgPSAwOworCVRYX0RFU0NfRU5UUllfdCBDdXJEZXNjOworCVRYX0RFU0NfRU5UUllfdCAqQ3VyRGVzY1Bvc3RDb3B5ID0gTlVMTDsKKwl1aW50MzJfdCBTbG90c0F2YWlsYWJsZTsKKwlETUExMFdfdCBTZXJ2aWNlQ29tcGxldGU7CisJdW5zaWduZWQgaW50IGxvY2tmbGFnczEsIGxvY2tmbGFnczI7CisJc3RydWN0IHNrX2J1ZmYgKnBQYWNrZXQgPSBwTXBUY2ItPlBhY2tldDsKKwl1aW50MzJfdCBGcmFnTGlzdENvdW50ID0gc2tiX3NoaW5mbyhwUGFja2V0KS0+bnJfZnJhZ3MgKyAxOworCXN0cnVjdCBza2JfZnJhZ19zdHJ1Y3QgKnBGcmFnTGlzdCA9ICZza2Jfc2hpbmZvKHBQYWNrZXQpLT5mcmFnc1swXTsKKworCURCR19UWF9FTlRFUihldDEzMXhfZGJnaW5mbyk7CisKKwlTZXJ2aWNlQ29tcGxldGUudmFsdWUgPQorCQlyZWFkbCgmcEFkYXB0ZXItPkNTUkFkZHJlc3MtPnR4ZG1hLk5ld1NlcnZpY2VDb21wbGV0ZS52YWx1ZSk7CisKKwkvKgorCSAqIEF0dGVtcHQgdG8gZml4IFRXTyBoYXJkd2FyZSBidWdzOgorCSAqIDEpICBORVZFUiB3cml0ZSBhbiBvZGQgbnVtYmVyIG9mIGRlc2NyaXB0b3JzLgorCSAqIDIpICBJZiBwYWNrZXQgbGVuZ3RoIGlzIGxlc3MgdGhhbiBOSUNfTUlOX1BBQ0tFVF9TSVpFLCB0aGVuIHBhZCB0aGUKKwkgKiAgICAgcGFja2V0IHRvIE5JQ19NSU5fUEFDS0VUX1NJWkUgYnl0ZXMgYnkgYWRkaW5nIGEgbmV3IGxhc3QKKwkgKiAgICAgZGVzY3JpcHRvciBJTiBIQUxGIERVUExFWCBNT0RFIE9OTFkKKwkgKiBOT1RFIHRoYXQgKDIpIGludGVyYWN0cyB3aXRoICgxKS4gIElmIHRoZSBwYWNrZXQgaXMgbGVzcyB0aGFuCisJICogTklDX01JTl9QQUNLRVRfU0laRSBieXRlcyB0aGVuIHdlIHdpbGwgYXBwZW5kIGEgZGVzY3JpcHRvci4KKwkgKiBUaGVyZWZvcmUgaWYgaXQgaXMgZXZlbiBub3csIGl0IHdpbGwgZXZlbnR1YWxseSBlbmQgdXAgb2RkLCBhbmQKKwkgKiBzbyB3aWxsIG5lZWQgYWRqdXN0aW5nLgorCSAqCisJICogVkxBTiB0YWdzIGdldCBpbnZvbHZlZCBzaW5jZSBWTEFOIHRhZ3MgYWRkIGFub3RoZXIgb25lIG9yIHR3bworCSAqIHNlZ21lbnRzLgorCSAqLworCURCR19UWChldDEzMXhfZGJnaW5mbywKKwkgICAgICAgInBNcFRjYi0+UGFja2V0TGVuZ3RoOiAlZFxuIiwgcE1wVGNiLT5QYWNrZXRMZW5ndGgpOworCisJaWYgKChwQWRhcHRlci0+dWlEdXBsZXhNb2RlID09IDApCisJICAgICYmIChwTXBUY2ItPlBhY2tldExlbmd0aCA8IE5JQ19NSU5fUEFDS0VUX1NJWkUpKSB7CisJCURCR19UWChldDEzMXhfZGJnaW5mbywKKwkJICAgICAgICJIQUxGIERVUExFWCBtb2RlIEFORCBsZW4gPCBNSU5fUEtUX1NJWkVcbiIpOworCQlpZiAoKEZyYWdMaXN0Q291bnQgJiAweDEpID09IDApIHsKKwkJCURCR19UWChldDEzMXhfZGJnaW5mbywKKwkJCSAgICAgICAiRXZlbiBudW1iZXIgb2YgZGVzY3MsIHNwbGl0IDFzdCBlbGVtXG4iKTsKKwkJCWlTcGxpdEZpcnN0RWxlbWVudCA9IDE7CisJCQkvL1NlZ21lbnRTaXplID0gcEZyYWdMaXN0WzBdLnNpemUgLyAyOworCQkJU2VnbWVudFNpemUgPSAocFBhY2tldC0+bGVuIC0gcFBhY2tldC0+ZGF0YV9sZW4pIC8gMjsKKwkJfQorCX0gZWxzZSBpZiAoRnJhZ0xpc3RDb3VudCAmIDB4MSkgeworCQlEQkdfVFgoZXQxMzF4X2RiZ2luZm8sICJPZGQgbnVtYmVyIG9mIGRlc2NzLCBzcGxpdCAxc3QgZWxlbVxuIik7CisKKwkJaVNwbGl0Rmlyc3RFbGVtZW50ID0gMTsKKwkJLy9TZWdtZW50U2l6ZSA9IHBGcmFnTGlzdFswXS5zaXplIC8gMjsKKwkJU2VnbWVudFNpemUgPSAocFBhY2tldC0+bGVuIC0gcFBhY2tldC0+ZGF0YV9sZW4pIC8gMjsKKwl9CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcEFkYXB0ZXItPlNlbmRIV0xvY2ssIGxvY2tmbGFnczEpOworCisJaWYgKHBBZGFwdGVyLT5UeFJpbmcudHhEbWFSZWFkeVRvU2VuZC5iaXRzLnNlcnZfcmVxX3dyYXAgPT0KKwkgICAgU2VydmljZUNvbXBsZXRlLmJpdHMuc2Vydl9jcGxfd3JhcCkgeworCQkvKiBUaGUgcmluZyBoYXNuJ3Qgd3JhcHBlZC4gIFNsb3RzIGF2YWlsYWJsZSBzaG91bGQgYmUKKwkJICogKFJJTkdfU0laRSkgLSAgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgdHdvIHBvaW50ZXJzLgorCQkgKi8KKwkJU2xvdHNBdmFpbGFibGUgPSBOVU1fREVTQ19QRVJfUklOR19UWCAtCisJCSAgICAocEFkYXB0ZXItPlR4UmluZy50eERtYVJlYWR5VG9TZW5kLmJpdHMuc2Vydl9yZXEgLQorCQkgICAgIFNlcnZpY2VDb21wbGV0ZS5iaXRzLnNlcnZfY3BsKTsKKwl9IGVsc2UgeworCQkvKiBUaGUgcmluZyBoYXMgd3JhcHBlZC4gIFNsb3RzIGF2YWlsYWJsZSBzaG91bGQgYmUgdGhlCisJCSAqIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgdHdvIHBvaW50ZXJzLgorCQkgKi8KKwkJU2xvdHNBdmFpbGFibGUgPSBTZXJ2aWNlQ29tcGxldGUuYml0cy5zZXJ2X2NwbCAtCisJCSAgICBwQWRhcHRlci0+VHhSaW5nLnR4RG1hUmVhZHlUb1NlbmQuYml0cy5zZXJ2X3JlcTsKKwl9CisKKwlpZiAoKEZyYWdMaXN0Q291bnQgKyBpU3BsaXRGaXJzdEVsZW1lbnQpID4gU2xvdHNBdmFpbGFibGUpIHsKKwkJREJHX1dBUk5JTkcoZXQxMzF4X2RiZ2luZm8sCisJCQkgICAgIk5vdCBFbm91Z2ggU3BhY2UgaW4gVHggRGVzYyBSaW5nXG4iKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcEFkYXB0ZXItPlNlbmRIV0xvY2ssIGxvY2tmbGFnczEpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlsb29wRW5kID0gKEZyYWdMaXN0Q291bnQpICsgaVNwbGl0Rmlyc3RFbGVtZW50OworCWZyYWdJbmRleCA9IDA7CisKKwlEQkdfVFgoZXQxMzF4X2RiZ2luZm8sCisJICAgICAgICJUQ0IgICAgICAgICAgIDogMHglcFxuIgorCSAgICAgICAiUGFja2V0IChTS0IpICA6IDB4JXBcdCBQYWNrZXQtPmxlbjogJWRcdCBQYWNrZXQtPmRhdGFfbGVuOiAlZFxuIgorCSAgICAgICAiRnJhZ0xpc3RDb3VudCA6ICVkXHQgaVNwbGl0Rmlyc3RFbGVtZW50OiAlZFx0IGxvb3BFbmQ6JWRcbiIsCisJICAgICAgIHBNcFRjYiwKKwkgICAgICAgcFBhY2tldCwgcFBhY2tldC0+bGVuLCBwUGFja2V0LT5kYXRhX2xlbiwKKwkgICAgICAgRnJhZ0xpc3RDb3VudCwgaVNwbGl0Rmlyc3RFbGVtZW50LCBsb29wRW5kKTsKKworCWZvciAobG9vcEluZGV4ID0gMDsgbG9vcEluZGV4IDwgbG9vcEVuZDsgbG9vcEluZGV4KyspIHsKKwkJaWYgKGxvb3BJbmRleCA+IGlTcGxpdEZpcnN0RWxlbWVudCkgeworCQkJZnJhZ0luZGV4Kys7CisJCX0KKworCQlEQkdfVFgoZXQxMzF4X2RiZ2luZm8sCisJCSAgICAgICAiSW4gbG9vcCwgbG9vcEluZGV4OiAlZFx0IGZyYWdJbmRleDogJWRcbiIsIGxvb3BJbmRleCwKKwkJICAgICAgIGZyYWdJbmRleCk7CisKKwkJLyogSWYgdGhlcmUgaXMgc29tZXRoaW5nIGluIHRoaXMgZWxlbWVudCwgbGV0J3MgZ2V0IGEKKwkJICogZGVzY3JpcHRvciBmcm9tIHRoZSByaW5nIGFuZCBnZXQgdGhlIG5lY2Vzc2FyeSBkYXRhCisJCSAqLworCQlEQkdfVFgoZXQxMzF4X2RiZ2luZm8sCisJCSAgICAgICAiUGFja2V0IExlbmd0aCAlZCwiCisJCSAgICAgICAiZmlsbGluZyBkZXNjIGVudHJ5ICVkXG4iLAorCQkgICAgICAgcFBhY2tldC0+bGVuLAorCQkgICAgICAgcEFkYXB0ZXItPlR4UmluZy50eERtYVJlYWR5VG9TZW5kLmJpdHMuc2Vydl9yZXEpOworCisJCS8vIE5PVEUgLSBTaG91bGQgd2UgZG8gYSBwYXJhbm9pYSBjaGVjayBoZXJlIHRvIG1ha2Ugc3VyZSB0aGUgZnJhZ21lbnQKKwkJLy8gYWN0dWFsbHkgaGFzIGEgbGVuZ3RoPyBJdCdzIEhJR0hMWSB1bmxpa2VseSB0aGUgZnJhZ21lbnQgd291bGQKKwkJLy8gY29udGFpbiBubyBkYXRhLi4uCisJCWlmICgxKSB7CisJCQkvLyBOT1RFIC0gQ3VycmVudGx5IGFsd2F5cyBnZXR0aW5nIDMyLWJpdCBhZGRycywgYW5kIGRtYV9hZGRyX3QgaXMKKwkJCS8vICAgICAgICBvbmx5IDMyLWJpdCwgc28gbGVhdmUgImhpZ2giIHB0ciB2YWx1ZSBvdXQgZm9yIG5vdworCQkJQ3VyRGVzYy5EYXRhQnVmZmVyUHRySGlnaCA9IDA7CisKKwkJCUN1ckRlc2Mud29yZDIudmFsdWUgPSAwOworCQkJQ3VyRGVzYy53b3JkMy52YWx1ZSA9IDA7CisKKwkJCWlmIChmcmFnSW5kZXggPT0gMCkgeworCQkJCWlmIChpU3BsaXRGaXJzdEVsZW1lbnQpIHsKKwkJCQkJREJHX1RYKGV0MTMxeF9kYmdpbmZvLAorCQkJCQkgICAgICAgIlNwbGl0IGZpcnN0IGVsZW1lbnQ6IFlFU1xuIik7CisKKwkJCQkJaWYgKGxvb3BJbmRleCA9PSAwKSB7CisJCQkJCQlEQkdfVFgoZXQxMzF4X2RiZ2luZm8sCisJCQkJCQkgICAgICAgIkdvdCBmcmFnbWVudCBvZiBsZW5ndGggJWQsIGZyYWdJbmRleDogJWRcbiIsCisJCQkJCQkgICAgICAgcFBhY2tldC0+bGVuIC0KKwkJCQkJCSAgICAgICBwUGFja2V0LT5kYXRhX2xlbiwKKwkJCQkJCSAgICAgICBmcmFnSW5kZXgpOworCQkJCQkJREJHX1RYKGV0MTMxeF9kYmdpbmZvLAorCQkJCQkJICAgICAgICJTZWdtZW50U2l6ZTogJWRcbiIsCisJCQkJCQkgICAgICAgU2VnbWVudFNpemUpOworCisJCQkJCQlDdXJEZXNjLndvcmQyLmJpdHMuCisJCQkJCQkgICAgbGVuZ3RoX2luX2J5dGVzID0KKwkJCQkJCSAgICBTZWdtZW50U2l6ZTsKKwkJCQkJCUN1ckRlc2MuRGF0YUJ1ZmZlclB0ckxvdyA9CisJCQkJCQkgICAgcGNpX21hcF9zaW5nbGUocEFkYXB0ZXItPgorCQkJCQkJCQkgICBwZGV2LAorCQkJCQkJCQkgICBwUGFja2V0LT4KKwkJCQkJCQkJICAgZGF0YSwKKwkJCQkJCQkJICAgU2VnbWVudFNpemUsCisJCQkJCQkJCSAgIFBDSV9ETUFfVE9ERVZJQ0UpOworCQkJCQkJREJHX1RYKGV0MTMxeF9kYmdpbmZvLAorCQkJCQkJICAgICAgICJwY2lfbWFwX3NpbmdsZSgpIHJldHVybnM6IDB4JTA4eFxuIiwKKwkJCQkJCSAgICAgICBDdXJEZXNjLgorCQkJCQkJICAgICAgIERhdGFCdWZmZXJQdHJMb3cpOworCQkJCQl9IGVsc2UgeworCQkJCQkJREJHX1RYKGV0MTMxeF9kYmdpbmZvLAorCQkJCQkJICAgICAgICJHb3QgZnJhZ21lbnQgb2YgbGVuZ3RoICVkLCBmcmFnSW5kZXg6ICVkXG4iLAorCQkJCQkJICAgICAgIHBQYWNrZXQtPmxlbiAtCisJCQkJCQkgICAgICAgcFBhY2tldC0+ZGF0YV9sZW4sCisJCQkJCQkgICAgICAgZnJhZ0luZGV4KTsKKwkJCQkJCURCR19UWChldDEzMXhfZGJnaW5mbywKKwkJCQkJCSAgICAgICAiTGVmdG92ZXIgU2l6ZTogJWRcbiIsCisJCQkJCQkgICAgICAgKHBQYWNrZXQtPmxlbiAtCisJCQkJCQkJcFBhY2tldC0+ZGF0YV9sZW4gLQorCQkJCQkJCVNlZ21lbnRTaXplKSk7CisKKwkJCQkJCUN1ckRlc2Mud29yZDIuYml0cy4KKwkJCQkJCSAgICBsZW5ndGhfaW5fYnl0ZXMgPQorCQkJCQkJICAgICgocFBhY2tldC0+bGVuIC0KKwkJCQkJCSAgICAgIHBQYWNrZXQtPmRhdGFfbGVuKSAtCisJCQkJCQkgICAgIFNlZ21lbnRTaXplKTsKKwkJCQkJCUN1ckRlc2MuRGF0YUJ1ZmZlclB0ckxvdyA9CisJCQkJCQkgICAgcGNpX21hcF9zaW5nbGUocEFkYXB0ZXItPgorCQkJCQkJCQkgICBwZGV2LAorCQkJCQkJCQkgICAocFBhY2tldC0+CisJCQkJCQkJCSAgICBkYXRhICsKKwkJCQkJCQkJICAgIFNlZ21lbnRTaXplKSwKKwkJCQkJCQkJICAgKHBQYWNrZXQtPgorCQkJCQkJCQkgICAgbGVuIC0KKwkJCQkJCQkJICAgIHBQYWNrZXQtPgorCQkJCQkJCQkgICAgZGF0YV9sZW4gLQorCQkJCQkJCQkgICAgU2VnbWVudFNpemUpLAorCQkJCQkJCQkgICBQQ0lfRE1BX1RPREVWSUNFKTsKKwkJCQkJCURCR19UWChldDEzMXhfZGJnaW5mbywKKwkJCQkJCSAgICAgICAicGNpX21hcF9zaW5nbGUoKSByZXR1cm5zOiAweCUwOHhcbiIsCisJCQkJCQkgICAgICAgQ3VyRGVzYy4KKwkJCQkJCSAgICAgICBEYXRhQnVmZmVyUHRyTG93KTsKKwkJCQkJfQorCQkJCX0gZWxzZSB7CisJCQkJCURCR19UWChldDEzMXhfZGJnaW5mbywKKwkJCQkJICAgICAgICJTcGxpdCBmaXJzdCBlbGVtZW50OiBOT1xuIik7CisKKwkJCQkJQ3VyRGVzYy53b3JkMi5iaXRzLmxlbmd0aF9pbl9ieXRlcyA9CisJCQkJCSAgICBwUGFja2V0LT5sZW4gLSBwUGFja2V0LT5kYXRhX2xlbjsKKworCQkJCQlDdXJEZXNjLkRhdGFCdWZmZXJQdHJMb3cgPQorCQkJCQkgICAgcGNpX21hcF9zaW5nbGUocEFkYXB0ZXItPnBkZXYsCisJCQkJCQkJICAgcFBhY2tldC0+ZGF0YSwKKwkJCQkJCQkgICAocFBhY2tldC0+bGVuIC0KKwkJCQkJCQkgICAgcFBhY2tldC0+ZGF0YV9sZW4pLAorCQkJCQkJCSAgIFBDSV9ETUFfVE9ERVZJQ0UpOworCQkJCQlEQkdfVFgoZXQxMzF4X2RiZ2luZm8sCisJCQkJCSAgICAgICAicGNpX21hcF9zaW5nbGUoKSByZXR1cm5zOiAweCUwOHhcbiIsCisJCQkJCSAgICAgICBDdXJEZXNjLkRhdGFCdWZmZXJQdHJMb3cpOworCQkJCX0KKwkJCX0gZWxzZSB7CisKKwkJCQlDdXJEZXNjLndvcmQyLmJpdHMubGVuZ3RoX2luX2J5dGVzID0KKwkJCQkgICAgcEZyYWdMaXN0W2ZyYWdJbmRleCAtIDFdLnNpemU7CisJCQkJQ3VyRGVzYy5EYXRhQnVmZmVyUHRyTG93ID0KKwkJCQkgICAgcGNpX21hcF9wYWdlKHBBZGFwdGVyLT5wZGV2LAorCQkJCQkJIHBGcmFnTGlzdFtmcmFnSW5kZXggLSAxXS5wYWdlLAorCQkJCQkJIHBGcmFnTGlzdFtmcmFnSW5kZXggLQorCQkJCQkJCSAgIDFdLnBhZ2Vfb2Zmc2V0LAorCQkJCQkJIHBGcmFnTGlzdFtmcmFnSW5kZXggLSAxXS5zaXplLAorCQkJCQkJIFBDSV9ETUFfVE9ERVZJQ0UpOworCQkJCURCR19UWChldDEzMXhfZGJnaW5mbywKKwkJCQkgICAgICAgInBjaV9tYXBfcGFnZSgpIHJldHVybnM6IDB4JTA4eFxuIiwKKwkJCQkgICAgICAgQ3VyRGVzYy5EYXRhQnVmZmVyUHRyTG93KTsKKwkJCX0KKworCQkJaWYgKGxvb3BJbmRleCA9PSAwKSB7CisJCQkJLyogVGhpcyBpcyB0aGUgZmlyc3QgZGVzY3JpcHRvciBvZiB0aGUgcGFja2V0CisJCQkJICoKKwkJCQkgKiBTZXQgdGhlICJmIiBiaXQgdG8gaW5kaWNhdGUgdGhpcyBpcyB0aGUKKwkJCQkgKiBmaXJzdCBkZXNjcmlwdG9yIGluIHRoZSBwYWNrZXQuCisJCQkJICovCisJCQkJREJHX1RYKGV0MTMxeF9kYmdpbmZvLAorCQkJCSAgICAgICAiVGhpcyBpcyBvdXIgRklSU1QgZGVzY3JpcHRvclxuIik7CisJCQkJQ3VyRGVzYy53b3JkMy5iaXRzLmYgPSAxOworCisJCQkJcE1wVGNiLT5XckluZGV4U3RhcnQgPQorCQkJCSAgICBwQWRhcHRlci0+VHhSaW5nLnR4RG1hUmVhZHlUb1NlbmQ7CisJCQl9CisKKwkJCWlmICgobG9vcEluZGV4ID09IChsb29wRW5kIC0gMSkpICYmCisJCQkgICAgKHBBZGFwdGVyLT51aUR1cGxleE1vZGUgfHwKKwkJCSAgICAgKHBNcFRjYi0+UGFja2V0TGVuZ3RoID49IE5JQ19NSU5fUEFDS0VUX1NJWkUpKSkgeworCQkJCS8qIFRoaXMgaXMgdGhlIExhc3QgZGVzY3JpcHRvciBvZiB0aGUgcGFja2V0ICovCisJCQkJREJHX1RYKGV0MTMxeF9kYmdpbmZvLAorCQkJCSAgICAgICAiVEhJUyBpcyBvdXIgTEFTVCBkZXNjcmlwdG9yXG4iKTsKKworCQkJCWlmIChwQWRhcHRlci0+dWlMaW5rU3BlZWQgPT0KKwkJCQkgICAgVFJVRVBIWV9TUEVFRF8xMDAwTUJQUykgeworCQkJCQlpZiAoKytwQWRhcHRlci0+VHhSaW5nLgorCQkJCQkgICAgVHhQYWNrZXRzU2luY2VMYXN0aW50ZXJydXB0ID49CisJCQkJCSAgICBwQWRhcHRlci0+UmVnaXN0cnlUeE51bUJ1ZmZlcnMpIHsKKwkJCQkJCUN1ckRlc2Mud29yZDMudmFsdWUgPSAweDU7CisJCQkJCQlwQWRhcHRlci0+VHhSaW5nLgorCQkJCQkJICAgIFR4UGFja2V0c1NpbmNlTGFzdGludGVycnVwdAorCQkJCQkJICAgID0gMDsKKwkJCQkJfSBlbHNlIHsKKwkJCQkJCUN1ckRlc2Mud29yZDMudmFsdWUgPSAweDE7CisJCQkJCX0KKwkJCQl9IGVsc2UgeworCQkJCQlDdXJEZXNjLndvcmQzLnZhbHVlID0gMHg1OworCQkJCX0KKworCQkJCS8qIEZvbGxvd2luZyBpbmRleCB3aWxsIGJlIHVzZWQgZHVyaW5nIGZyZWVpbmcKKwkJCQkgKiBvZiBwYWNrZXQKKwkJCQkgKi8KKwkJCQlwTXBUY2ItPldySW5kZXggPQorCQkJCSAgICBwQWRhcHRlci0+VHhSaW5nLnR4RG1hUmVhZHlUb1NlbmQ7CisJCQkJcE1wVGNiLT5QYWNrZXRTdGFsZUNvdW50ID0gMDsKKwkJCX0KKworCQkJLyogQ29weSB0aGUgZGVzY3JpcHRvciAoZmlsbGVkIGFib3ZlKSBpbnRvIHRoZQorCQkJICogZGVzY3JpcHRvciByaW5nIGF0IHRoZSBuZXh0IGZyZWUgZW50cnkuICBBZHZhbmNlCisJCQkgKiB0aGUgIm5leHQgZnJlZSBlbnRyeSIgdmFyaWFibGUKKwkJCSAqLworCQkJbWVtY3B5KHBBZGFwdGVyLT5UeFJpbmcucFR4RGVzY1JpbmdWYSArCisJCQkgICAgICAgcEFkYXB0ZXItPlR4UmluZy50eERtYVJlYWR5VG9TZW5kLmJpdHMuc2Vydl9yZXEsCisJCQkgICAgICAgJkN1ckRlc2MsIHNpemVvZihUWF9ERVNDX0VOVFJZX3QpKTsKKworCQkJQ3VyRGVzY1Bvc3RDb3B5ID0KKwkJCSAgICBwQWRhcHRlci0+VHhSaW5nLnBUeERlc2NSaW5nVmEgKworCQkJICAgIHBBZGFwdGVyLT5UeFJpbmcudHhEbWFSZWFkeVRvU2VuZC5iaXRzLnNlcnZfcmVxOworCisJCQlEQkdfVFgoZXQxMzF4X2RiZ2luZm8sCisJCQkgICAgICAgIkNVUlJFTlQgREVTQ1JJUFRPUlxuIgorCQkJICAgICAgICJcdEFkZHJlc3MgICAgICAgICAgIDogMHglcFxuIgorCQkJICAgICAgICJcdERhdGFCdWZmZXJQdHJIaWdoIDogMHglMDh4XG4iCisJCQkgICAgICAgIlx0RGF0YUJ1ZmZlclB0ckxvdyAgOiAweCUwOHhcbiIKKwkJCSAgICAgICAiXHR3b3JkMiAgICAgICAgICAgICA6IDB4JTA4eFxuIgorCQkJICAgICAgICJcdHdvcmQzICAgICAgICAgICAgIDogMHglMDh4XG4iLAorCQkJICAgICAgIEN1ckRlc2NQb3N0Q29weSwKKwkJCSAgICAgICBDdXJEZXNjUG9zdENvcHktPkRhdGFCdWZmZXJQdHJIaWdoLAorCQkJICAgICAgIEN1ckRlc2NQb3N0Q29weS0+RGF0YUJ1ZmZlclB0ckxvdywKKwkJCSAgICAgICBDdXJEZXNjUG9zdENvcHktPndvcmQyLnZhbHVlLAorCQkJICAgICAgIEN1ckRlc2NQb3N0Q29weS0+d29yZDMudmFsdWUpOworCisJCQlpZiAoKytwQWRhcHRlci0+VHhSaW5nLnR4RG1hUmVhZHlUb1NlbmQuYml0cy5zZXJ2X3JlcSA+PQorCQkJICAgIE5VTV9ERVNDX1BFUl9SSU5HX1RYKSB7CisJCQkJaWYgKHBBZGFwdGVyLT5UeFJpbmcudHhEbWFSZWFkeVRvU2VuZC5iaXRzLgorCQkJCSAgICBzZXJ2X3JlcV93cmFwKSB7CisJCQkJCXBBZGFwdGVyLT5UeFJpbmcudHhEbWFSZWFkeVRvU2VuZC4KKwkJCQkJICAgIHZhbHVlID0gMDsKKwkJCQl9IGVsc2UgeworCQkJCQlwQWRhcHRlci0+VHhSaW5nLnR4RG1hUmVhZHlUb1NlbmQuCisJCQkJCSAgICB2YWx1ZSA9IDB4NDAwOworCQkJCX0KKwkJCX0KKwkJfQorCX0KKworCWlmIChwQWRhcHRlci0+dWlEdXBsZXhNb2RlID09IDAgJiYKKwkgICAgcE1wVGNiLT5QYWNrZXRMZW5ndGggPCBOSUNfTUlOX1BBQ0tFVF9TSVpFKSB7CisJCS8vIE5PVEUgLSBTYW1lIDMyLzY0LWJpdCBpc3N1ZSBhcyBhYm92ZS4uLgorCQlDdXJEZXNjLkRhdGFCdWZmZXJQdHJIaWdoID0gMHgwOworCQlDdXJEZXNjLkRhdGFCdWZmZXJQdHJMb3cgPSBwQWRhcHRlci0+VHhSaW5nLnBUeER1bW15QmxrUGE7CisJCUN1ckRlc2Mud29yZDIudmFsdWUgPSAwOworCisJCWlmIChwQWRhcHRlci0+dWlMaW5rU3BlZWQgPT0gVFJVRVBIWV9TUEVFRF8xMDAwTUJQUykgeworCQkJaWYgKCsrcEFkYXB0ZXItPlR4UmluZy5UeFBhY2tldHNTaW5jZUxhc3RpbnRlcnJ1cHQgPj0KKwkJCSAgICBwQWRhcHRlci0+UmVnaXN0cnlUeE51bUJ1ZmZlcnMpIHsKKwkJCQlDdXJEZXNjLndvcmQzLnZhbHVlID0gMHg1OworCQkJCXBBZGFwdGVyLT5UeFJpbmcuVHhQYWNrZXRzU2luY2VMYXN0aW50ZXJydXB0ID0KKwkJCQkgICAgMDsKKwkJCX0gZWxzZSB7CisJCQkJQ3VyRGVzYy53b3JkMy52YWx1ZSA9IDB4MTsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCUN1ckRlc2Mud29yZDMudmFsdWUgPSAweDU7CisJCX0KKworCQlDdXJEZXNjLndvcmQyLmJpdHMubGVuZ3RoX2luX2J5dGVzID0KKwkJICAgIE5JQ19NSU5fUEFDS0VUX1NJWkUgLSBwTXBUY2ItPlBhY2tldExlbmd0aDsKKworCQlwTXBUY2ItPldySW5kZXggPSBwQWRhcHRlci0+VHhSaW5nLnR4RG1hUmVhZHlUb1NlbmQ7CisKKwkJbWVtY3B5KHBBZGFwdGVyLT5UeFJpbmcucFR4RGVzY1JpbmdWYSArCisJCSAgICAgICBwQWRhcHRlci0+VHhSaW5nLnR4RG1hUmVhZHlUb1NlbmQuYml0cy5zZXJ2X3JlcSwKKwkJICAgICAgICZDdXJEZXNjLCBzaXplb2YoVFhfREVTQ19FTlRSWV90KSk7CisKKwkJQ3VyRGVzY1Bvc3RDb3B5ID0KKwkJICAgIHBBZGFwdGVyLT5UeFJpbmcucFR4RGVzY1JpbmdWYSArCisJCSAgICBwQWRhcHRlci0+VHhSaW5nLnR4RG1hUmVhZHlUb1NlbmQuYml0cy5zZXJ2X3JlcTsKKworCQlEQkdfVFgoZXQxMzF4X2RiZ2luZm8sCisJCSAgICAgICAiQ1VSUkVOVCBERVNDUklQVE9SXG4iCisJCSAgICAgICAiXHRBZGRyZXNzICAgICAgICAgICA6IDB4JXBcbiIKKwkJICAgICAgICJcdERhdGFCdWZmZXJQdHJIaWdoIDogMHglMDh4XG4iCisJCSAgICAgICAiXHREYXRhQnVmZmVyUHRyTG93ICA6IDB4JTA4eFxuIgorCQkgICAgICAgIlx0d29yZDIgICAgICAgICAgICAgOiAweCUwOHhcbiIKKwkJICAgICAgICJcdHdvcmQzICAgICAgICAgICAgIDogMHglMDh4XG4iLAorCQkgICAgICAgQ3VyRGVzY1Bvc3RDb3B5LAorCQkgICAgICAgQ3VyRGVzY1Bvc3RDb3B5LT5EYXRhQnVmZmVyUHRySGlnaCwKKwkJICAgICAgIEN1ckRlc2NQb3N0Q29weS0+RGF0YUJ1ZmZlclB0ckxvdywKKwkJICAgICAgIEN1ckRlc2NQb3N0Q29weS0+d29yZDIudmFsdWUsCisJCSAgICAgICBDdXJEZXNjUG9zdENvcHktPndvcmQzLnZhbHVlKTsKKworCQlpZiAoKytwQWRhcHRlci0+VHhSaW5nLnR4RG1hUmVhZHlUb1NlbmQuYml0cy5zZXJ2X3JlcSA+PQorCQkgICAgTlVNX0RFU0NfUEVSX1JJTkdfVFgpIHsKKwkJCWlmIChwQWRhcHRlci0+VHhSaW5nLnR4RG1hUmVhZHlUb1NlbmQuYml0cy4KKwkJCSAgICBzZXJ2X3JlcV93cmFwKSB7CisJCQkJcEFkYXB0ZXItPlR4UmluZy50eERtYVJlYWR5VG9TZW5kLnZhbHVlID0gMDsKKwkJCX0gZWxzZSB7CisJCQkJcEFkYXB0ZXItPlR4UmluZy50eERtYVJlYWR5VG9TZW5kLnZhbHVlID0gMHg0MDA7CisJCQl9CisJCX0KKworCQlEQkdfVFgoZXQxMzF4X2RiZ2luZm8sICJQYWRkaW5nIGRlc2NyaXB0b3IgJWQgYnkgJWQgYnl0ZXNcbiIsCisJCSAgICAgICAvL3BBZGFwdGVyLT5UeFJpbmcudHhEbWFSZWFkeVRvU2VuZC52YWx1ZSwKKwkJICAgICAgIHBBZGFwdGVyLT5UeFJpbmcudHhEbWFSZWFkeVRvU2VuZC5iaXRzLnNlcnZfcmVxLAorCQkgICAgICAgTklDX01JTl9QQUNLRVRfU0laRSAtIHBNcFRjYi0+UGFja2V0TGVuZ3RoKTsKKwl9CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcEFkYXB0ZXItPlRDQlNlbmRRTG9jaywgbG9ja2ZsYWdzMik7CisKKwlpZiAocEFkYXB0ZXItPlR4UmluZy5DdXJyU2VuZFRhaWwpIHsKKwkJcEFkYXB0ZXItPlR4UmluZy5DdXJyU2VuZFRhaWwtPk5leHQgPSBwTXBUY2I7CisJfSBlbHNlIHsKKwkJcEFkYXB0ZXItPlR4UmluZy5DdXJyU2VuZEhlYWQgPSBwTXBUY2I7CisJfQorCisJcEFkYXB0ZXItPlR4UmluZy5DdXJyU2VuZFRhaWwgPSBwTXBUY2I7CisKKwlEQkdfQVNTRVJUKHBNcFRjYi0+TmV4dCA9PSBOVUxMKTsKKworCXBBZGFwdGVyLT5UeFJpbmcubkJ1c3lTZW5kKys7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwQWRhcHRlci0+VENCU2VuZFFMb2NrLCBsb2NrZmxhZ3MyKTsKKworCS8qIFdyaXRlIHRoZSBuZXcgd3JpdGUgcG9pbnRlciBiYWNrIHRvIHRoZSBkZXZpY2UuICovCisJd3JpdGVsKHBBZGFwdGVyLT5UeFJpbmcudHhEbWFSZWFkeVRvU2VuZC52YWx1ZSwKKwkgICAgICAgJnBBZGFwdGVyLT5DU1JBZGRyZXNzLT50eGRtYS5zZXJ2aWNlX3JlcXVlc3QudmFsdWUpOworCisjaWZkZWYgQ09ORklHX0VUMTMxWF9ERUJVRworCUR1bXBEZXZpY2VCbG9jayhEQkdfVFhfT04sIHBBZGFwdGVyLCAxKTsKKyNlbmRpZgorCisJLyogRm9yIEdpZyBvbmx5LCB3ZSB1c2UgVHggSW50ZXJydXB0IGNvYWxlc2NpbmcuICBFbmFibGUgdGhlIHNvZnR3YXJlCisJICogdGltZXIgdG8gd2FrZSB1cyB1cCBpZiB0aGlzIHBhY2tldCBpc24ndCBmb2xsb3dlZCBieSBOIG1vcmUuCisJICovCisJaWYgKHBBZGFwdGVyLT51aUxpbmtTcGVlZCA9PSBUUlVFUEhZX1NQRUVEXzEwMDBNQlBTKSB7CisJCXdyaXRlbChwQWRhcHRlci0+UmVnaXN0cnlUeFRpbWVJbnRlcnZhbCAqIE5BTk9fSU5fQV9NSUNSTywKKwkJICAgICAgICZwQWRhcHRlci0+Q1NSQWRkcmVzcy0+Z2xvYmFsLndhdGNoZG9nX3RpbWVyKTsKKwl9CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwQWRhcHRlci0+U2VuZEhXTG9jaywgbG9ja2ZsYWdzMSk7CisKKwlEQkdfVFhfTEVBVkUoZXQxMzF4X2RiZ2luZm8pOworCXJldHVybiAwOworfQorCisjZW5kaWYKKworLyoqCisgKiBldDEzMXhfZnJlZV9zZW5kX3BhY2tldCAtIFJlY3ljbGUgYSBNUF9UQ0IsIGNvbXBsZXRlIHRoZSBwYWNrZXQgaWYgbmVjZXNzYXJ5CisgKiBAcEFkYXB0ZXI6IHBvaW50ZXIgdG8gb3VyIGFkYXB0ZXIKKyAqIEBwTXBUY2I6IHBvaW50ZXIgdG8gTVBfVENCCisgKgorICogQXNzdW1wdGlvbiAtIFNlbmQgc3BpbmxvY2sgaGFzIGJlZW4gYWNxdWlyZWQKKyAqLworX19pbmxpbmUgdm9pZCBldDEzMXhfZnJlZV9zZW5kX3BhY2tldChzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKnBBZGFwdGVyLCBQTVBfVENCIHBNcFRjYikKK3sKKwl1bnNpZ25lZCBsb25nIGxvY2tmbGFnczsKKwlUWF9ERVNDX0VOVFJZX3QgKmRlc2MgPSBOVUxMOworCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpzdGF0cyA9ICZwQWRhcHRlci0+bmV0X3N0YXRzOworCisJaWYgKE1QX1RFU1RfRkxBRyhwTXBUY2IsIGZNUF9ERVNUX0JST0FEKSkgeworCQlhdG9taWNfaW5jKCZwQWRhcHRlci0+U3RhdHMuYnJkY3N0eG10KTsKKwl9IGVsc2UgaWYgKE1QX1RFU1RfRkxBRyhwTXBUY2IsIGZNUF9ERVNUX01VTFRJKSkgeworCQlhdG9taWNfaW5jKCZwQWRhcHRlci0+U3RhdHMubXVsdGl4bXQpOworCX0gZWxzZSB7CisJCWF0b21pY19pbmMoJnBBZGFwdGVyLT5TdGF0cy51bml4bXQpOworCX0KKworCWlmIChwTXBUY2ItPlBhY2tldCkgeworCQlzdGF0cy0+dHhfYnl0ZXMgKz0gcE1wVGNiLT5QYWNrZXQtPmxlbjsKKworCQkvKiBJdGVyYXRlIHRocm91Z2ggdGhlIFRYIGRlc2NyaXB0b3JzIG9uIHRoZSByaW5nCisJCSAqIGNvcnJlc3BvbmRpbmcgdG8gdGhpcyBwYWNrZXQgYW5kIHVtYXAgdGhlIGZyYWdtZW50cworCQkgKiB0aGV5IHBvaW50IHRvCisJCSAqLworCQlEQkdfVFgoZXQxMzF4X2RiZ2luZm8sCisJCSAgICAgICAiVW5tYXAgZGVzY3JpcHRvcnMgSGVyZVxuIgorCQkgICAgICAgIlRDQiAgICAgICAgICAgICAgICAgIDogMHglcFxuIgorCQkgICAgICAgIlRDQiBOZXh0ICAgICAgICAgICAgIDogMHglcFxuIgorCQkgICAgICAgIlRDQiBQYWNrZXRMZW5ndGggICAgIDogJWRcbiIKKwkJICAgICAgICJUQ0IgV3JJbmRleC52YWx1ZSAgICA6IDB4JTA4eFxuIgorCQkgICAgICAgIlRDQiBXckluZGV4LmJpdHMudmFsIDogJWRcbiIKKwkJICAgICAgICJUQ0IgV3JJbmRleC52YWx1ZSAgICA6IDB4JTA4eFxuIgorCQkgICAgICAgIlRDQiBXckluZGV4LmJpdHMudmFsIDogJWRcbiIsCisJCSAgICAgICBwTXBUY2IsCisJCSAgICAgICBwTXBUY2ItPk5leHQsCisJCSAgICAgICBwTXBUY2ItPlBhY2tldExlbmd0aCwKKwkJICAgICAgIHBNcFRjYi0+V3JJbmRleFN0YXJ0LnZhbHVlLAorCQkgICAgICAgcE1wVGNiLT5XckluZGV4U3RhcnQuYml0cy52YWwsCisJCSAgICAgICBwTXBUY2ItPldySW5kZXgudmFsdWUsCisJCSAgICAgICBwTXBUY2ItPldySW5kZXguYml0cy52YWwpOworCisJCWRvIHsKKwkJCWRlc2MgPQorCQkJICAgIChUWF9ERVNDX0VOVFJZX3QgKikgKHBBZGFwdGVyLT5UeFJpbmcuCisJCQkJCQkgcFR4RGVzY1JpbmdWYSArCisJCQkJCQkgcE1wVGNiLT5XckluZGV4U3RhcnQuYml0cy52YWwpOworCisJCQlEQkdfVFgoZXQxMzF4X2RiZ2luZm8sCisJCQkgICAgICAgIkNVUlJFTlQgREVTQ1JJUFRPUlxuIgorCQkJICAgICAgICJcdEFkZHJlc3MgICAgICAgICAgIDogMHglcFxuIgorCQkJICAgICAgICJcdERhdGFCdWZmZXJQdHJIaWdoIDogMHglMDh4XG4iCisJCQkgICAgICAgIlx0RGF0YUJ1ZmZlclB0ckxvdyAgOiAweCUwOHhcbiIKKwkJCSAgICAgICAiXHR3b3JkMiAgICAgICAgICAgICA6IDB4JTA4eFxuIgorCQkJICAgICAgICJcdHdvcmQzICAgICAgICAgICAgIDogMHglMDh4XG4iLAorCQkJICAgICAgIGRlc2MsCisJCQkgICAgICAgZGVzYy0+RGF0YUJ1ZmZlclB0ckhpZ2gsCisJCQkgICAgICAgZGVzYy0+RGF0YUJ1ZmZlclB0ckxvdywKKwkJCSAgICAgICBkZXNjLT53b3JkMi52YWx1ZSwKKwkJCSAgICAgICBkZXNjLT53b3JkMy52YWx1ZSk7CisKKwkJCXBjaV91bm1hcF9zaW5nbGUocEFkYXB0ZXItPnBkZXYsCisJCQkJCSBkZXNjLT5EYXRhQnVmZmVyUHRyTG93LAorCQkJCQkgZGVzYy0+d29yZDIudmFsdWUsIFBDSV9ETUFfVE9ERVZJQ0UpOworCisJCQlpZiAoKytwTXBUY2ItPldySW5kZXhTdGFydC5iaXRzLnZhbCA+PQorCQkJICAgIE5VTV9ERVNDX1BFUl9SSU5HX1RYKSB7CisJCQkJaWYgKHBNcFRjYi0+V3JJbmRleFN0YXJ0LmJpdHMud3JhcCkgeworCQkJCQlwTXBUY2ItPldySW5kZXhTdGFydC52YWx1ZSA9IDA7CisJCQkJfSBlbHNlIHsKKwkJCQkJcE1wVGNiLT5XckluZGV4U3RhcnQudmFsdWUgPSAweDQwMDsKKwkJCQl9CisJCQl9CisJCX0KKwkJd2hpbGUgKGRlc2MgIT0gKHBBZGFwdGVyLT5UeFJpbmcucFR4RGVzY1JpbmdWYSArCisJCQkJcE1wVGNiLT5XckluZGV4LmJpdHMudmFsKSk7CisKKwkJREJHX1RYKGV0MTMxeF9kYmdpbmZvLAorCQkgICAgICAgIkZyZWUgUGFja2V0IChTS0IpICAgOiAweCVwXG4iLCBwTXBUY2ItPlBhY2tldCk7CisKKwkJZGV2X2tmcmVlX3NrYl9hbnkocE1wVGNiLT5QYWNrZXQpOworCX0KKworCW1lbXNldChwTXBUY2IsIDAsIHNpemVvZihNUF9UQ0IpKTsKKworCS8qIEFkZCB0aGUgVENCIHRvIHRoZSBSZWFkeSBRICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJnBBZGFwdGVyLT5UQ0JSZWFkeVFMb2NrLCBsb2NrZmxhZ3MpOworCisJcEFkYXB0ZXItPlN0YXRzLm9wYWNrZXRzKys7CisKKwlpZiAocEFkYXB0ZXItPlR4UmluZy5UQ0JSZWFkeVF1ZXVlVGFpbCkgeworCQlwQWRhcHRlci0+VHhSaW5nLlRDQlJlYWR5UXVldWVUYWlsLT5OZXh0ID0gcE1wVGNiOworCX0gZWxzZSB7CisJCS8qIEFwcGFyZW50bHkgcmVhZHkgUSBpcyBlbXB0eS4gKi8KKwkJcEFkYXB0ZXItPlR4UmluZy5UQ0JSZWFkeVF1ZXVlSGVhZCA9IHBNcFRjYjsKKwl9CisKKwlwQWRhcHRlci0+VHhSaW5nLlRDQlJlYWR5UXVldWVUYWlsID0gcE1wVGNiOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcEFkYXB0ZXItPlRDQlJlYWR5UUxvY2ssIGxvY2tmbGFncyk7CisKKwlEQkdfQVNTRVJUKHBBZGFwdGVyLT5UeFJpbmcubkJ1c3lTZW5kID49IDApOworfQorCisvKioKKyAqIGV0MTMxeF9mcmVlX2J1c3lfc2VuZF9wYWNrZXRzIC0gRnJlZSBhbmQgY29tcGxldGUgdGhlIHN0b3BwZWQgYWN0aXZlIHNlbmRzCisgKiBAcEFkYXB0ZXI6IHBvaW50ZXIgdG8gb3VyIGFkYXB0ZXIKKyAqCisgKiBBc3N1bXB0aW9uIC0gU2VuZCBzcGlubG9jayBoYXMgYmVlbiBhY3F1aXJlZAorICovCit2b2lkIGV0MTMxeF9mcmVlX2J1c3lfc2VuZF9wYWNrZXRzKHN0cnVjdCBldDEzMXhfYWRhcHRlciAqcEFkYXB0ZXIpCit7CisJUE1QX1RDQiBwTXBUY2I7CisJc3RydWN0IGxpc3RfaGVhZCAqcEVudHJ5OworCXN0cnVjdCBza19idWZmICpwUGFja2V0ID0gTlVMTDsKKwl1bnNpZ25lZCBsb25nIGxvY2tmbGFnczsKKwl1aW50MzJfdCBGcmVlQ291bnRlciA9IDA7CisKKwlEQkdfRU5URVIoZXQxMzF4X2RiZ2luZm8pOworCisJd2hpbGUgKCFsaXN0X2VtcHR5KCZwQWRhcHRlci0+VHhSaW5nLlNlbmRXYWl0UXVldWUpKSB7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZwQWRhcHRlci0+U2VuZFdhaXRMb2NrLCBsb2NrZmxhZ3MpOworCisJCXBBZGFwdGVyLT5UeFJpbmcubldhaXRTZW5kLS07CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBBZGFwdGVyLT5TZW5kV2FpdExvY2ssIGxvY2tmbGFncyk7CisKKwkJcEVudHJ5ID0gcEFkYXB0ZXItPlR4UmluZy5TZW5kV2FpdFF1ZXVlLm5leHQ7CisKKwkJcFBhY2tldCA9IE5VTEw7CisJfQorCisJcEFkYXB0ZXItPlR4UmluZy5uV2FpdFNlbmQgPSAwOworCisJLyogQW55IHBhY2tldHMgYmVpbmcgc2VudD8gQ2hlY2sgdGhlIGZpcnN0IFRDQiBvbiB0aGUgc2VuZCBsaXN0ICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJnBBZGFwdGVyLT5UQ0JTZW5kUUxvY2ssIGxvY2tmbGFncyk7CisKKwlwTXBUY2IgPSBwQWRhcHRlci0+VHhSaW5nLkN1cnJTZW5kSGVhZDsKKworCXdoaWxlICgocE1wVGNiICE9IE5VTEwpICYmIChGcmVlQ291bnRlciA8IE5VTV9UQ0IpKSB7CisJCVBNUF9UQ0IgcE5leHQgPSBwTXBUY2ItPk5leHQ7CisKKwkJcEFkYXB0ZXItPlR4UmluZy5DdXJyU2VuZEhlYWQgPSBwTmV4dDsKKworCQlpZiAocE5leHQgPT0gTlVMTCkgeworCQkJcEFkYXB0ZXItPlR4UmluZy5DdXJyU2VuZFRhaWwgPSBOVUxMOworCQl9CisKKwkJcEFkYXB0ZXItPlR4UmluZy5uQnVzeVNlbmQtLTsKKworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwQWRhcHRlci0+VENCU2VuZFFMb2NrLCBsb2NrZmxhZ3MpOworCisJCURCR19WRVJCT1NFKGV0MTMxeF9kYmdpbmZvLCAicE1wVGNiID0gMHglcFxuIiwgcE1wVGNiKTsKKworCQlGcmVlQ291bnRlcisrOworCQlNUF9GUkVFX1NFTkRfUEFDS0VUX0ZVTihwQWRhcHRlciwgcE1wVGNiKTsKKworCQlzcGluX2xvY2tfaXJxc2F2ZSgmcEFkYXB0ZXItPlRDQlNlbmRRTG9jaywgbG9ja2ZsYWdzKTsKKworCQlwTXBUY2IgPSBwQWRhcHRlci0+VHhSaW5nLkN1cnJTZW5kSGVhZDsKKwl9CisKKwlpZiAoRnJlZUNvdW50ZXIgPT0gTlVNX1RDQikgeworCQlEQkdfRVJST1IoZXQxMzF4X2RiZ2luZm8sCisJCQkgICJNcEZyZWVCdXN5U2VuZFBhY2tldHMgZXhpdHRlZCBsb29wIGZvciBhIGJhZCByZWFzb25cbiIpOworCQlCVUcoKTsKKwl9CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwQWRhcHRlci0+VENCU2VuZFFMb2NrLCBsb2NrZmxhZ3MpOworCisJcEFkYXB0ZXItPlR4UmluZy5uQnVzeVNlbmQgPSAwOworCisJREJHX0xFQVZFKGV0MTMxeF9kYmdpbmZvKTsKK30KKworLyoqCisgKiBldDEzMXhfaGFuZGxlX3NlbmRfaW50ZXJydXB0IC0gSW50ZXJydXB0IGhhbmRsZXIgZm9yIHNlbmRpbmcgcHJvY2Vzc2luZworICogQHBBZGFwdGVyOiBwb2ludGVyIHRvIG91ciBhZGFwdGVyCisgKgorICogUmUtY2xhaW0gdGhlIHNlbmQgcmVzb3VyY2VzLCBjb21wbGV0ZSBzZW5kcyBhbmQgZ2V0IG1vcmUgdG8gc2VuZCBmcm9tCisgKiB0aGUgc2VuZCB3YWl0IHF1ZXVlLgorICoKKyAqIEFzc3VtcHRpb24gLSBTZW5kIHNwaW5sb2NrIGhhcyBiZWVuIGFjcXVpcmVkCisgKi8KK3ZvaWQgZXQxMzF4X2hhbmRsZV9zZW5kX2ludGVycnVwdChzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKnBBZGFwdGVyKQoreworCURCR19UWF9FTlRFUihldDEzMXhfZGJnaW5mbyk7CisKKwkvKiBNYXJrIGFzIGNvbXBsZXRlZCBhbnkgcGFja2V0cyB3aGljaCBoYXZlIGJlZW4gc2VudCBieSB0aGUgZGV2aWNlLiAqLworCWV0MTMxeF91cGRhdGVfdGNiX2xpc3QocEFkYXB0ZXIpOworCisJLyogSWYgd2UgcXVldWVkIGFueSB0cmFuc21pdHMgYmVjYXVzZSB3ZSBkaWRuJ3QgaGF2ZSBhbnkgVENCcyBlYXJsaWVyLAorCSAqIGRlcXVldWUgYW5kIHNlbmQgdGhvc2UgcGFja2V0cyBub3csIGFzIGxvbmcgYXMgd2UgaGF2ZSBmcmVlIFRDQnMuCisJICovCisJZXQxMzF4X2NoZWNrX3NlbmRfd2FpdF9saXN0KHBBZGFwdGVyKTsKKworCURCR19UWF9MRUFWRShldDEzMXhfZGJnaW5mbyk7Cit9CisKKy8qKgorICogZXQxMzF4X3VwZGF0ZV90Y2JfbGlzdCAtIEhlbHBlciByb3V0aW5lIGZvciBTZW5kIEludGVycnVwdCBoYW5kbGVyCisgKiBAcEFkYXB0ZXI6IHBvaW50ZXIgdG8gb3VyIGFkYXB0ZXIKKyAqCisgKiBSZS1jbGFpbXMgdGhlIHNlbmQgcmVzb3VyY2VzIGFuZCBjb21wbGV0ZXMgc2VuZHMuICBDYW4gYWxzbyBiZSBjYWxsZWQgYXMKKyAqIHBhcnQgb2YgdGhlIE5JQyBzZW5kIHJvdXRpbmUgd2hlbiB0aGUgIlNlcnZpY2VDb21wbGV0ZSIgaW5kaWNhdGlvbiBoYXMKKyAqIHdyYXBwZWQuCisgKi8KK3N0YXRpYyB2b2lkIGV0MTMxeF91cGRhdGVfdGNiX2xpc3Qoc3RydWN0IGV0MTMxeF9hZGFwdGVyICpwQWRhcHRlcikKK3sKKwl1bnNpZ25lZCBsb25nIGxvY2tmbGFnczsKKwlETUExMFdfdCBTZXJ2aWNlQ29tcGxldGU7CisJUE1QX1RDQiBwTXBUY2I7CisKKwlTZXJ2aWNlQ29tcGxldGUudmFsdWUgPQorCSAgICByZWFkbCgmcEFkYXB0ZXItPkNTUkFkZHJlc3MtPnR4ZG1hLk5ld1NlcnZpY2VDb21wbGV0ZS52YWx1ZSk7CisKKwkvKiBIYXMgdGhlIHJpbmcgd3JhcHBlZD8gIFByb2Nlc3MgYW55IGRlc2NyaXB0b3JzIHRoYXQgZG8gbm90IGhhdmUKKwkgKiB0aGUgc2FtZSAid3JhcCIgaW5kaWNhdG9yIGFzIHRoZSBjdXJyZW50IGNvbXBsZXRpb24gaW5kaWNhdG9yCisJICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJnBBZGFwdGVyLT5UQ0JTZW5kUUxvY2ssIGxvY2tmbGFncyk7CisKKwlwTXBUY2IgPSBwQWRhcHRlci0+VHhSaW5nLkN1cnJTZW5kSGVhZDsKKwl3aGlsZSAocE1wVGNiICYmCisJICAgICAgIFNlcnZpY2VDb21wbGV0ZS5iaXRzLndyYXAgIT0gcE1wVGNiLT5XckluZGV4LmJpdHMud3JhcCAgJiYKKwkgICAgICAgU2VydmljZUNvbXBsZXRlLmJpdHMudmFsIDwgcE1wVGNiLT5XckluZGV4LmJpdHMudmFsKSB7CisJCXBBZGFwdGVyLT5UeFJpbmcubkJ1c3lTZW5kLS07CisJCXBBZGFwdGVyLT5UeFJpbmcuQ3VyclNlbmRIZWFkID0gcE1wVGNiLT5OZXh0OworCQlpZiAocE1wVGNiLT5OZXh0ID09IE5VTEwpIHsKKwkJCXBBZGFwdGVyLT5UeFJpbmcuQ3VyclNlbmRUYWlsID0gTlVMTDsKKwkJfQorCisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBBZGFwdGVyLT5UQ0JTZW5kUUxvY2ssIGxvY2tmbGFncyk7CisJCU1QX0ZSRUVfU0VORF9QQUNLRVRfRlVOKHBBZGFwdGVyLCBwTXBUY2IpOworCQlzcGluX2xvY2tfaXJxc2F2ZSgmcEFkYXB0ZXItPlRDQlNlbmRRTG9jaywgbG9ja2ZsYWdzKTsKKworCQkvKiBHb3RvIHRoZSBuZXh0IHBhY2tldCAqLworCQlwTXBUY2IgPSBwQWRhcHRlci0+VHhSaW5nLkN1cnJTZW5kSGVhZDsKKwl9CisJd2hpbGUgKHBNcFRjYiAmJgorCSAgICAgICBTZXJ2aWNlQ29tcGxldGUuYml0cy53cmFwID09IHBNcFRjYi0+V3JJbmRleC5iaXRzLndyYXAgJiYKKwkgICAgICAgU2VydmljZUNvbXBsZXRlLmJpdHMudmFsID4gcE1wVGNiLT5XckluZGV4LmJpdHMudmFsKSB7CisJCXBBZGFwdGVyLT5UeFJpbmcubkJ1c3lTZW5kLS07CisJCXBBZGFwdGVyLT5UeFJpbmcuQ3VyclNlbmRIZWFkID0gcE1wVGNiLT5OZXh0OworCQlpZiAocE1wVGNiLT5OZXh0ID09IE5VTEwpIHsKKwkJCXBBZGFwdGVyLT5UeFJpbmcuQ3VyclNlbmRUYWlsID0gTlVMTDsKKwkJfQorCisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBBZGFwdGVyLT5UQ0JTZW5kUUxvY2ssIGxvY2tmbGFncyk7CisJCU1QX0ZSRUVfU0VORF9QQUNLRVRfRlVOKHBBZGFwdGVyLCBwTXBUY2IpOworCQlzcGluX2xvY2tfaXJxc2F2ZSgmcEFkYXB0ZXItPlRDQlNlbmRRTG9jaywgbG9ja2ZsYWdzKTsKKworCQkvKiBHb3RvIHRoZSBuZXh0IHBhY2tldCAqLworCQlwTXBUY2IgPSBwQWRhcHRlci0+VHhSaW5nLkN1cnJTZW5kSGVhZDsKKwl9CisKKwkvKiBXYWtlIHVwIHRoZSBxdWV1ZSB3aGVuIHdlIGhpdCBhIGxvdy13YXRlciBtYXJrICovCisJaWYgKHBBZGFwdGVyLT5UeFJpbmcubkJ1c3lTZW5kIDw9IChOVU1fVENCIC8gMykpIHsKKwkJbmV0aWZfd2FrZV9xdWV1ZShwQWRhcHRlci0+bmV0ZGV2KTsKKwl9CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwQWRhcHRlci0+VENCU2VuZFFMb2NrLCBsb2NrZmxhZ3MpOworfQorCisvKioKKyAqIGV0MTMxeF9jaGVja19zZW5kX3dhaXRfbGlzdCAtIEhlbHBlciByb3V0aW5lIGZvciB0aGUgaW50ZXJydXB0IGhhbmRsZXIKKyAqIEBwQWRhcHRlcjogcG9pbnRlciB0byBvdXIgYWRhcHRlcgorICoKKyAqIFRha2VzIHBhY2tldHMgZnJvbSB0aGUgc2VuZCB3YWl0IHF1ZXVlIGFuZCBwb3N0cyB0aGVtIHRvIHRoZSBkZXZpY2UgKGlmCisgKiByb29tIGF2YWlsYWJsZSkuCisgKi8KK3N0YXRpYyB2b2lkIGV0MTMxeF9jaGVja19zZW5kX3dhaXRfbGlzdChzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKnBBZGFwdGVyKQoreworCXVuc2lnbmVkIGxvbmcgbG9ja2ZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnBBZGFwdGVyLT5TZW5kV2FpdExvY2ssIGxvY2tmbGFncyk7CisKKwl3aGlsZSAoIWxpc3RfZW1wdHkoJnBBZGFwdGVyLT5UeFJpbmcuU2VuZFdhaXRRdWV1ZSkgJiYKKwkgICAgICAgTVBfVENCX1JFU09VUkNFU19BVkFJTEFCTEUocEFkYXB0ZXIpKSB7CisJCXN0cnVjdCBsaXN0X2hlYWQgKnBFbnRyeTsKKworCQlEQkdfVkVSQk9TRShldDEzMXhfZGJnaW5mbywgIlR4IHBhY2tldHMgb24gdGhlIHdhaXQgcXVldWVcbiIpOworCisJCXBFbnRyeSA9IHBBZGFwdGVyLT5UeFJpbmcuU2VuZFdhaXRRdWV1ZS5uZXh0OworCisJCXBBZGFwdGVyLT5UeFJpbmcubldhaXRTZW5kLS07CisKKwkJREJHX1dBUk5JTkcoZXQxMzF4X2RiZ2luZm8sCisJCQkgICAgIk1wSGFuZGxlU2VuZEludGVycnVwdCAtIHNlbnQgYSBxdWV1ZWQgcGt0LiBXYWl0aW5nICVkXG4iLAorCQkJICAgIHBBZGFwdGVyLT5UeFJpbmcubldhaXRTZW5kKTsKKwl9CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwQWRhcHRlci0+U2VuZFdhaXRMb2NrLCBsb2NrZmxhZ3MpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2V0MTMxeC9ldDEzMTBfdHguaCBiL2RyaXZlcnMvc3RhZ2luZy9ldDEzMXgvZXQxMzEwX3R4LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjgxOWM3OAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ldDEzMXgvZXQxMzEwX3R4LmgKQEAgLTAsMCArMSwyNDIgQEAKKy8qCisgKiBBZ2VyZSBTeXN0ZW1zIEluYy4KKyAqIDEwLzEwMC8xMDAwIEJhc2UtVCBFdGhlcm5ldCBEcml2ZXIgZm9yIHRoZSBFVDEzMDEgYW5kIEVUMTMxeCBzZXJpZXMgTUFDcworICoKKyAqIENvcHlyaWdodCCpIDIwMDUgQWdlcmUgU3lzdGVtcyBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogICBodHRwOi8vd3d3LmFnZXJlLmNvbQorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogZXQxMzEwX3R4LmggLSBEZWZpbmVzLCBzdHJ1Y3RzLCBlbnVtcywgcHJvdG90eXBlcywgZXRjLiBwZXJ0YWluaW5nIHRvIGRhdGEKKyAqICAgICAgICAgICAgICAgdHJhbnNtaXNzaW9uLgorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogU09GVFdBUkUgTElDRU5TRQorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgcHJvdmlkZWQgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIHRlcm1zIGFuZCBjb25kaXRpb25zLAorICogd2hpY2ggeW91IHNob3VsZCByZWFkIGNhcmVmdWxseSBiZWZvcmUgdXNpbmcgdGhlIHNvZnR3YXJlLiAgVXNpbmcgdGhpcworICogc29mdHdhcmUgaW5kaWNhdGVzIHlvdXIgYWNjZXB0YW5jZSBvZiB0aGVzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucy4gIElmIHlvdSBkbworICogbm90IGFncmVlIHdpdGggdGhlc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMsIGRvIG5vdCB1c2UgdGhlIHNvZnR3YXJlLgorICoKKyAqIENvcHlyaWdodCCpIDIwMDUgQWdlcmUgU3lzdGVtcyBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIG9yIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb25zLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMKKyAqICAgIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBEaXNjbGFpbWVyIGFzIGNvbW1lbnRzIGluIHRoZSBjb2RlIGFzCisgKiAgICB3ZWxsIGFzIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiAuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAqICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIERpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyAqICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIC4gTmVpdGhlciB0aGUgbmFtZSBvZiBBZ2VyZSBTeXN0ZW1zIEluYy4gbm9yIHRoZSBuYW1lcyBvZiB0aGUgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIERpc2NsYWltZXIKKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIJNBUyBJU5QgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywKKyAqIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBJTkZSSU5HRU1FTlQgQU5EIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBBTlkKKyAqIFVTRSwgTU9ESUZJQ0FUSU9OIE9SIERJU1RSSUJVVElPTiBPRiBUSElTIFNPRlRXQVJFIElTIFNPTEVMWSBBVCBUSEUgVVNFUlMgT1dOCisgKiBSSVNLLiBJTiBOTyBFVkVOVCBTSEFMTCBBR0VSRSBTWVNURU1TIElOQy4gT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSAorICogREFNQUdFLgorICoKKyAqLworCisjaWZuZGVmIF9fRVQxMzEwX1RYX0hfXworI2RlZmluZSBfX0VUMTMxMF9UWF9IX18KKworCisvKiBUeXBlZGVmcyBmb3IgVHggRGVzY3JpcHRvciBSaW5nICovCisKKy8qCisgKiBUWERFU0NfV09SRDJfdCBzdHJ1Y3R1cmUgaG9sZHMgcGFydCBvZiB0aGUgY29udHJvbCBiaXRzIGluIHRoZSBUeCBEZXNjcmlwdG9yCisgKiByaW5nIGZvciB0aGUgRVQtMTMxMAorICovCit0eXBlZGVmIHVuaW9uIF90eGRlc2Nfd29yZDJfdCB7CisJdTMyIHZhbHVlOworCXN0cnVjdCB7CisjaWZkZWYgX0JJVF9GSUVMRFNfSFRPTAorCQl1MzIgdmxhbl9wcmlvOjM7CQkvLyBiaXRzIDI5LTMxKFZMQU4gcHJpb3JpdHkpCisJCXUzMiB2bGFuX2NmaToxOwkJLy8gYml0IDI4KGNmaSkKKwkJdTMyIHZsYW5fdGFnOjEyOwkJLy8gYml0cyAxNi0yNyhWTEFOIHRhZykKKwkJdTMyIGxlbmd0aF9pbl9ieXRlczoxNjsJLy8gYml0cyAgMC0xNShwYWNrZXQgbGVuZ3RoKQorI2Vsc2UKKwkJdTMyIGxlbmd0aF9pbl9ieXRlczoxNjsJLy8gYml0cyAgMC0xNShwYWNrZXQgbGVuZ3RoKQorCQl1MzIgdmxhbl90YWc6MTI7CQkvLyBiaXRzIDE2LTI3KFZMQU4gdGFnKQorCQl1MzIgdmxhbl9jZmk6MTsJCS8vIGJpdCAyOChjZmkpCisJCXUzMiB2bGFuX3ByaW86MzsJCS8vIGJpdHMgMjktMzEoVkxBTiBwcmlvcml0eSkKKyNlbmRpZgkvKiBfQklUX0ZJRUxEU19IVE9MICovCisJfSBiaXRzOworfSBUWERFU0NfV09SRDJfdCwgKlBUWERFU0NfV09SRDJfdDsKKworLyoKKyAqIFRYREVTQ19XT1JEM190IHN0cnVjdHVyZSBob2xkcyBwYXJ0IG9mIHRoZSBjb250cm9sIGJpdHMgaW4gdGhlIFR4IERlc2NyaXB0b3IKKyAqIHJpbmcgZm9yIHRoZSBFVC0xMzEwCisgKi8KK3R5cGVkZWYgdW5pb24gX3R4ZGVzY193b3JkM190IHsKKwl1MzIgdmFsdWU7CisJc3RydWN0IHsKKyNpZmRlZiBfQklUX0ZJRUxEU19IVE9MCisJCXUzMiB1bnVzZWQ6MTc7CS8vIGJpdHMgMTUtMzEKKwkJdTMyIHVkcGE6MTsJLy8gYml0IDE0KFVEUCBjaGVja3N1bSBhc3Npc3QpCisJCXUzMiB0Y3BhOjE7CS8vIGJpdCAxMyhUQ1AgY2hlY2tzdW0gYXNzaXN0KQorCQl1MzIgaXBhOjE7CQkvLyBiaXQgMTIoSVAgY2hlY2tzdW0gYXNzaXN0KQorCQl1MzIgdmxhbjoxOwkvLyBiaXQgMTEoYXBwZW5kIFZMQU4gdGFnKQorCQl1MzIgaHA6MTsJCS8vIGJpdCAxMChQYWNrZXQgaXMgYSBIdWdlIHBhY2tldCkKKwkJdTMyIHBwOjE7CQkvLyBiaXQgIDkocGFkIHBhY2tldCkKKwkJdTMyIG1hYzoxOwkJLy8gYml0ICA4KE1BQyBvdmVycmlkZSkKKwkJdTMyIGNyYzoxOwkJLy8gYml0ICA3KGFwcGVuZCBDUkMpCisJCXUzMiBlOjE7CQkvLyBiaXQgIDYoVHggZnJhbWUgaGFzIGVycm9yKQorCQl1MzIgcGY6MTsJCS8vIGJpdCAgNShzZW5kIHBhdXNlIGZyYW1lKQorCQl1MzIgYnA6MTsJCS8vIGJpdCAgNChJc3N1ZSBoYWxmLWR1cGxleCBiYWNrcHJlc3N1cmUgKFhPTi9YT0ZGKQorCQl1MzIgY3c6MTsJCS8vIGJpdCAgMyhDb250cm9sIHdvcmQgLSBubyBwYWNrZXQgZGF0YSkKKwkJdTMyIGlyOjE7CQkvLyBiaXQgIDIoaW50ZXJydXB0IHRoZSBwcm9jZXNzb3Igd2hlbiB0aGlzIHBrdCBzZW50KQorCQl1MzIgZjoxOwkJLy8gYml0ICAxKGZpcnN0IHBhY2tldCBpbiB0aGUgc2VxdWVuY2UpCisJCXUzMiBsOjE7CQkvLyBiaXQgIDAobGFzdCBwYWNrZXQgaW4gdGhlIHNlcXVlbmNlKQorI2Vsc2UKKwkJdTMyIGw6MTsJCS8vIGJpdCAgMChsYXN0IHBhY2tldCBpbiB0aGUgc2VxdWVuY2UpCisJCXUzMiBmOjE7CQkvLyBiaXQgIDEoZmlyc3QgcGFja2V0IGluIHRoZSBzZXF1ZW5jZSkKKwkJdTMyIGlyOjE7CQkvLyBiaXQgIDIoaW50ZXJydXB0IHRoZSBwcm9jZXNzb3Igd2hlbiB0aGlzIHBrdCBzZW50KQorCQl1MzIgY3c6MTsJCS8vIGJpdCAgMyhDb250cm9sIHdvcmQgLSBubyBwYWNrZXQgZGF0YSkKKwkJdTMyIGJwOjE7CQkvLyBiaXQgIDQoSXNzdWUgaGFsZi1kdXBsZXggYmFja3ByZXNzdXJlIChYT04vWE9GRikKKwkJdTMyIHBmOjE7CQkvLyBiaXQgIDUoc2VuZCBwYXVzZSBmcmFtZSkKKwkJdTMyIGU6MTsJCS8vIGJpdCAgNihUeCBmcmFtZSBoYXMgZXJyb3IpCisJCXUzMiBjcmM6MTsJCS8vIGJpdCAgNyhhcHBlbmQgQ1JDKQorCQl1MzIgbWFjOjE7CQkvLyBiaXQgIDgoTUFDIG92ZXJyaWRlKQorCQl1MzIgcHA6MTsJCS8vIGJpdCAgOShwYWQgcGFja2V0KQorCQl1MzIgaHA6MTsJCS8vIGJpdCAxMChQYWNrZXQgaXMgYSBIdWdlIHBhY2tldCkKKwkJdTMyIHZsYW46MTsJLy8gYml0IDExKGFwcGVuZCBWTEFOIHRhZykKKwkJdTMyIGlwYToxOwkJLy8gYml0IDEyKElQIGNoZWNrc3VtIGFzc2lzdCkKKwkJdTMyIHRjcGE6MTsJLy8gYml0IDEzKFRDUCBjaGVja3N1bSBhc3Npc3QpCisJCXUzMiB1ZHBhOjE7CS8vIGJpdCAxNChVRFAgY2hlY2tzdW0gYXNzaXN0KQorCQl1MzIgdW51c2VkOjE3OwkvLyBiaXRzIDE1LTMxCisjZW5kaWYJLyogX0JJVF9GSUVMRFNfSFRPTCAqLworCX0gYml0czsKK30gVFhERVNDX1dPUkQzX3QsICpQVFhERVNDX1dPUkQzX3Q7CisKKy8qIFRYX0RFU0NfRU5UUllfdCBpcyBzcnVjdHVyZSByZXByZXNlbnRpbmcgZWFjaCBkZXNjcmlwdG9yIG9uIHRoZSByaW5nICovCit0eXBlZGVmIHN0cnVjdCBfdHhfZGVzY19lbnRyeV90IHsKKwl1MzIgRGF0YUJ1ZmZlclB0ckhpZ2g7CisJdTMyIERhdGFCdWZmZXJQdHJMb3c7CisJVFhERVNDX1dPUkQyX3Qgd29yZDI7CS8vIGNvbnRyb2wgd29yZHMgaG93IHRvIHhtaXQgdGhlCisJVFhERVNDX1dPUkQzX3Qgd29yZDM7CS8vIGRhdGEgKGRldGFpbGVkIGFib3ZlKQorfSBUWF9ERVNDX0VOVFJZX3QsICpQVFhfREVTQ19FTlRSWV90OworCisKKy8qIFR5cGVkZWZzIGZvciBUeCBETUEgZW5naW5lIHN0YXR1cyB3cml0ZWJhY2sgKi8KKworLyoKKyAqIFRYX1NUQVRVU19CTE9DS190IGlzIHNydWN0dXJlIHJlcHJlc2VudGluZyB0aGUgc3RhdHVzIG9mIHRoZSBUeCBETUEgZW5naW5lCisgKiBpdCBzaXRzIGluIGZyZWUgbWVtb3J5LCBhbmQgaXMgcG9pbnRlZCB0byBieSAweDEwMWMgLyAweDEwMjAKKyAqLwordHlwZWRlZiB1bmlvbiBfdHhfc3RhdHVzX2Jsb2NrX3QgeworCXUzMiB2YWx1ZTsKKwlzdHJ1Y3QgeworI2lmZGVmIF9CSVRfRklFTERTX0hUT0wKKwkJdTMyIHVudXNlZDoyMTsJCS8vIGJpdHMgMTEtMzEKKwkJdTMyIHNlcnZfY3BsX3dyYXA6MTsJLy8gYml0IDEwCisJCXUzMiBzZXJ2X2NwbDoxMDsJCS8vIGJpdHMgMC05CisjZWxzZQorCQl1MzIgc2Vydl9jcGw6MTA7CQkvLyBiaXRzIDAtOQorCQl1MzIgc2Vydl9jcGxfd3JhcDoxOwkvLyBiaXQgMTAKKwkJdTMyIHVudXNlZDoyMTsJCS8vIGJpdHMgMTEtMzEKKyNlbmRpZgorCX0gYml0czsKK30gVFhfU1RBVFVTX0JMT0NLX3QsICpQVFhfU1RBVFVTX0JMT0NLX3Q7CisKKy8qIFRDQiAoVHJhbnNtaXQgQ29udHJvbCBCbG9jaykgKi8KK3R5cGVkZWYgc3RydWN0IF9NUF9UQ0IgeworCXN0cnVjdCBfTVBfVENCICpOZXh0OworCXUzMiBGbGFnczsKKwl1MzIgQ291bnQ7CisJdTMyIFBhY2tldFN0YWxlQ291bnQ7CisJc3RydWN0IHNrX2J1ZmYgKlBhY2tldDsKKwl1MzIgUGFja2V0TGVuZ3RoOworCURNQTEwV190IFdySW5kZXg7CisJRE1BMTBXX3QgV3JJbmRleFN0YXJ0OworfSBNUF9UQ0IsICpQTVBfVENCOworCisvKiBTdHJ1Y3R1cmUgdG8gaG9sZCB0aGUgc2tiJ3MgaW4gYSBsaXN0ICovCit0eXBlZGVmIHN0cnVjdCB0eF9za2JfbGlzdF9lbGVtIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIHNrYl9saXN0X2VsZW07CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKK30gVFhfU0tCX0xJU1RfRUxFTSwgKlBUWF9TS0JfTElTVF9FTEVNOworCisvKiBUWF9SSU5HX3QgaXMgc3J1Y3R1cmUgcmVwcmVzZW50aW5nIG91ciBsb2NhbCByZWZlcmVuY2UocykgdG8gdGhlIHJpbmcgKi8KK3R5cGVkZWYgc3RydWN0IF90eF9yaW5nX3QgeworCS8qIFRDQiAoVHJhbnNtaXQgQ29udHJvbCBCbG9jaykgbWVtb3J5IGFuZCBsaXN0cyAqLworCVBNUF9UQ0IgTXBUY2JNZW07CisKKwkvKiBMaXN0IG9mIFRDQnMgdGhhdCBhcmUgcmVhZHkgdG8gYmUgdXNlZCAqLworCVBNUF9UQ0IgVENCUmVhZHlRdWV1ZUhlYWQ7CisJUE1QX1RDQiBUQ0JSZWFkeVF1ZXVlVGFpbDsKKworCS8qIGxpc3Qgb2YgVENCcyB0aGF0IGFyZSBjdXJyZW50bHkgYmVpbmcgc2VudC4gIE5PVEUgdGhhdCBhY2Nlc3MgdG8gYWxsCisJICogdGhyZWUgb2YgdGhlc2UgKGluY2x1ZGluZyBuQnVzeVNlbmQpIGFyZSBjb250cm9sbGVkIHZpYSB0aGUKKwkgKiBUQ0JTZW5kUUxvY2suICBUaGlzIGxvY2sgc2hvdWxkIGJlIHNlY3VyZWQgcHJpb3IgdG8gaW5jZW1lbnRpbmcgLworCSAqIGRlY3JlbWVudGluZyBuQnVzeVNlbmQsIG9yIGFueSBxdWV1ZSBtYW5pcHVsYXRpb24gb24gQ3VyclNlbmRIZWFkIC8KKwkgKiBUYWlsCisJICovCisJUE1QX1RDQiBDdXJyU2VuZEhlYWQ7CisJUE1QX1RDQiBDdXJyU2VuZFRhaWw7CisJaW50MzJfdCBuQnVzeVNlbmQ7CisKKwkvKiBMaXN0IG9mIHBhY2tldHMgKG5vdCBUQ0JzKSB0aGF0IHdlcmUgcXVldWVkIGZvciBsYWNrIG9mIHJlc291cmNlcyAqLworCXN0cnVjdCBsaXN0X2hlYWQgU2VuZFdhaXRRdWV1ZTsKKwlpbnQzMl90IG5XYWl0U2VuZDsKKworCS8qIFRoZSBhY3R1YWwgZGVzY3JpcHRvciByaW5nICovCisJUFRYX0RFU0NfRU5UUllfdCBwVHhEZXNjUmluZ1ZhOworCWRtYV9hZGRyX3QgcFR4RGVzY1JpbmdQYTsKKwl1aW50NjRfdCBwVHhEZXNjUmluZ0FkanVzdGVkUGE7CisJdWludDY0X3QgVHhEZXNjT2Zmc2V0OworCisJLyogUmVhZHlUb1NlbmQgaW5kaWNhdGVzIHdoZXJlIHdlIGxhc3Qgd3JvdGUgdG8gaW4gdGhlIGRlc2NyaXB0b3IgcmluZy4gKi8KKwlETUExMFdfdCB0eERtYVJlYWR5VG9TZW5kOworCisJLyogVGhlIGxvY2F0aW9uIG9mIHRoZSB3cml0ZS1iYWNrIHN0YXR1cyBibG9jayAqLworCVBUWF9TVEFUVVNfQkxPQ0tfdCBwVHhTdGF0dXNWYTsKKwlkbWFfYWRkcl90IHBUeFN0YXR1c1BhOworCisJLyogQSBCbG9jayBvZiB6ZXJvZXMgdXNlZCB0byBwYWQgcGFja2V0cyB0aGF0IGFyZSBsZXNzIHRoYW4gNjAgYnl0ZXMgKi8KKwl2b2lkICpwVHhEdW1teUJsa1ZhOworCWRtYV9hZGRyX3QgcFR4RHVtbXlCbGtQYTsKKworCVRYTUFDX0VSUl90IFR4TWFjRXJyOworCisJLyogVmFyaWFibGVzIHRvIHRyYWNrIHRoZSBUeCBpbnRlcnJ1cHQgY29hbGVzY2luZyBmZWF0dXJlcyAqLworCWludDMyX3QgVHhQYWNrZXRzU2luY2VMYXN0aW50ZXJydXB0OworfSBUWF9SSU5HX3QsICpQVFhfUklOR190OworCisvKiBGb3J3YXJkIGRlY2xhcmF0aW9uIG9mIHRoZSBmcmFnLWxpc3QgZm9yIHRoZSBmb2xsb3dpbmcgcHJvdG90eXBlcyAqLwordHlwZWRlZiBzdHJ1Y3QgX01QX0ZSQUdfTElTVCBNUF9GUkFHX0xJU1QsICpQTVBfRlJBR19MSVNUOworCisvKiBGb3J3YXJkIGRlY2xhcmF0aW9uIG9mIHRoZSBwcml2YXRlIGFkYXB0ZXIgc3RydWN0dXJlICovCitzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXI7CisKKy8qIFBST1RPVFlQRVMgZm9yIGV0MTMxMF90eC5jICovCitpbnQgZXQxMzF4X3R4X2RtYV9tZW1vcnlfYWxsb2Moc3RydWN0IGV0MTMxeF9hZGFwdGVyICphZGFwdGVyKTsKK3ZvaWQgZXQxMzF4X3R4X2RtYV9tZW1vcnlfZnJlZShzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKmFkYXB0ZXIpOwordm9pZCBDb25maWdUeERtYVJlZ3Moc3RydWN0IGV0MTMxeF9hZGFwdGVyICpwQWRhcHRlcik7Cit2b2lkIGV0MTMxeF9pbml0X3NlbmQoc3RydWN0IGV0MTMxeF9hZGFwdGVyICphZGFwdGVyKTsKK3ZvaWQgZXQxMzF4X3R4X2RtYV9kaXNhYmxlKHN0cnVjdCBldDEzMXhfYWRhcHRlciAqcEFkYXB0ZXIpOwordm9pZCBldDEzMXhfdHhfZG1hX2VuYWJsZShzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKnBBZGFwdGVyKTsKK3ZvaWQgZXQxMzF4X2hhbmRsZV9zZW5kX2ludGVycnVwdChzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKnBBZGFwdGVyKTsKK3ZvaWQgZXQxMzF4X2ZyZWVfYnVzeV9zZW5kX3BhY2tldHMoc3RydWN0IGV0MTMxeF9hZGFwdGVyICpwQWRhcHRlcik7CitpbnQgZXQxMzF4X3NlbmRfcGFja2V0cyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KTsKKworI2VuZGlmIC8qIF9fRVQxMzEwX1RYX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2V0MTMxeC9ldDEzMXhfYWRhcHRlci5oIGIvZHJpdmVycy9zdGFnaW5nL2V0MTMxeC9ldDEzMXhfYWRhcHRlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM2ZTYxYTQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvZXQxMzF4L2V0MTMxeF9hZGFwdGVyLmgKQEAgLTAsMCArMSwzNDcgQEAKKy8qCisgKiBBZ2VyZSBTeXN0ZW1zIEluYy4KKyAqIDEwLzEwMC8xMDAwIEJhc2UtVCBFdGhlcm5ldCBEcml2ZXIgZm9yIHRoZSBFVDEzMDEgYW5kIEVUMTMxeCBzZXJpZXMgTUFDcworICoKKyAqIENvcHlyaWdodCCpIDIwMDUgQWdlcmUgU3lzdGVtcyBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogICBodHRwOi8vd3d3LmFnZXJlLmNvbQorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogZXQxMzF4X2FkYXB0ZXIuaCAtIEhlYWRlciB3aGljaCBpbmNsdWRlcyB0aGUgcHJpdmF0ZSBhZGFwdGVyIHN0cnVjdHVyZSwgYWxvbmcKKyAqICAgICAgICAgICAgICAgICAgICB3aXRoIHJlbGF0ZWQgc3VwcG9ydCBzdHJ1Y3R1cmVzLCBtYWNyb3MsIGRlZmluaXRpb25zLCBldGMuCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBTT0ZUV0FSRSBMSUNFTlNFCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBwcm92aWRlZCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgdGVybXMgYW5kIGNvbmRpdGlvbnMsCisgKiB3aGljaCB5b3Ugc2hvdWxkIHJlYWQgY2FyZWZ1bGx5IGJlZm9yZSB1c2luZyB0aGUgc29mdHdhcmUuICBVc2luZyB0aGlzCisgKiBzb2Z0d2FyZSBpbmRpY2F0ZXMgeW91ciBhY2NlcHRhbmNlIG9mIHRoZXNlIHRlcm1zIGFuZCBjb25kaXRpb25zLiAgSWYgeW91IGRvCisgKiBub3QgYWdyZWUgd2l0aCB0aGVzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucywgZG8gbm90IHVzZSB0aGUgc29mdHdhcmUuCisgKgorICogQ29weXJpZ2h0IKkgMjAwNSBBZ2VyZSBTeXN0ZW1zIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ugb3IgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbnMsIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiAuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcworICogICAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIERpc2NsYWltZXIgYXMgY29tbWVudHMgaW4gdGhlIGNvZGUgYXMKKyAqICAgIHdlbGwgYXMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIC4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICogICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgRGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgorICogICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogLiBOZWl0aGVyIHRoZSBuYW1lIG9mIEFnZXJlIFN5c3RlbXMgSW5jLiBub3IgdGhlIG5hbWVzIG9mIHRoZSBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogRGlzY2xhaW1lcgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgk0FTIElTlCBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLAorICogSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIElORlJJTkdFTUVOVCBBTkQgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIEFOWQorICogVVNFLCBNT0RJRklDQVRJT04gT1IgRElTVFJJQlVUSU9OIE9GIFRISVMgU09GVFdBUkUgSVMgU09MRUxZIEFUIFRIRSBVU0VSUyBPV04KKyAqIFJJU0suIElOIE5PIEVWRU5UIFNIQUxMIEFHRVJFIFNZU1RFTVMgSU5DLiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNICisgKiBEQU1BR0UuCisgKgorICovCisKKyNpZm5kZWYgX19FVDEzMVhfQURBUFRFUl9IX18KKyNkZWZpbmUgX19FVDEzMVhfQURBUFRFUl9IX18KKworI2luY2x1ZGUgImV0MTMxMF9hZGRyZXNzX21hcC5oIgorI2luY2x1ZGUgImV0MTMxMF90eC5oIgorI2luY2x1ZGUgImV0MTMxMF9yeC5oIgorCisvKgorICogRG8gbm90IGNoYW5nZSB0aGVzZSB2YWx1ZXM6IGlmIGNoYW5nZWQsIHRoZW4gY2hhbmdlIGFsc28gaW4gcmVzcGVjdGl2ZQorICogVFhkbWEgYW5kIFJ4ZG1hIGVuZ2luZXMKKyAqLworI2RlZmluZSBOVU1fREVTQ19QRVJfUklOR19UWCAgICAgICAgIDUxMgkvLyBUWCBEbyBub3QgY2hhbmdlIHRoZXNlIHZhbHVlcworI2RlZmluZSBOVU1fVENCICAgICAgICAgICAgICAgICAgICAgIDY0CisKKy8qCisgKiBUaGVzZSB2YWx1ZXMgYXJlIGFsbCBzdXBlcnNlZGVkIGJ5IHJlZ2lzdHJ5IGVudHJpZXMgdG8gZmFjaWxpdGF0ZSB0dW5pbmcuCisgKiBPbmNlIHRoZSBkZXNpcmVkIHBlcmZvcm1hbmNlIGhhcyBiZWVuIGFjaGlldmVkLCB0aGUgb3B0aW1hbCByZWdpc3RyeSB2YWx1ZXMKKyAqIHNob3VsZCBiZSByZS1wb3B1bGF0ZWQgdG8gdGhlc2UgI2RlZmluZXM6CisgKi8KKyNkZWZpbmUgTlVNX1RSQUZGSUNfQ0xBU1NFUyAgICAgICAgICAxCisKKy8qCisgKiBUaGVyZSBhcmUgdGhyZWUgd2F5cyBvZiBjb3VudGluZyBlcnJvcnMgLSBpZiB0aGVyZSBhcmUgbW9yZSB0aGFuIFggZXJyb3JzCisgKiBpbiBZIHBhY2tldHMgKHJlcHJlc2VudGVkIGJ5IHRoZSAiU0FNUExFIiBtYWNyb3MpLCBpZiB0aGVyZSBhcmUgbW9yZSB0aGFuCisgKiBOIGVycm9ycyBpbiBhIFMgbVNlYyB0aW1lIHBlcmlvZCAodGhlICJQRVJJT0QiIG1hY3JvcyksIG9yIGlmIHRoZXJlIGFyZQorICogY29uc2VjdXRpdmUgcGFja2V0cyB3aXRoIGVycm9ycyAoQ09OU0VDX0VSUk9SRURfVEhSRVNIKS4gIFRoaXMgbGFzdCBjb3ZlcnMKKyAqIGZvciAiQnVyc3R5IiBlcnJvcnMsIGFuZCB0aGUgZXJyb3JlZCBwYWNrZXRzIG1heSB3ZWxsIG5vdCBiZSBjb250aWd1b3VzLAorICogYnV0IHNldmVyYWwgZXJyb3JzIHdoZXJlIHRoZSBwYWNrZXQgY291bnRlciBoYXMgY2hhbmdlZCBieSBsZXNzIHRoYW4gYQorICogc21hbGwgYW1vdW50IHdpbGwgY2F1c2UgdGhpcyBjb3VudCB0byBpbmNyZW1lbnQuCisgKi8KKyNkZWZpbmUgVFhfUEFDS0VUU19JTl9TQU1QTEUgICAgICAgIDEwMDAwCisjZGVmaW5lIFRYX01BWF9FUlJPUlNfSU5fU0FNUExFICAgICA1MAorCisjZGVmaW5lIFRYX0VSUk9SX1BFUklPRCAgICAgICAgICAgICAxMDAwCisjZGVmaW5lIFRYX01BWF9FUlJPUlNfSU5fUEVSSU9EICAgICAxMAorCisjZGVmaW5lIExJTktfREVURUNUSU9OX1RJTUVSICAgICAgICA1MDAwCisKKyNkZWZpbmUgVFhfQ09OU0VDX1JBTkdFICAgICAgICAgICAgIDUKKyNkZWZpbmUgVFhfQ09OU0VDX0VSUk9SRURfVEhSRVNIICAgIDEwCisKKyNkZWZpbmUgTE9fTUFSS19QRVJDRU5UX0ZPUl9QU1IgICAgIDE1CisjZGVmaW5lIExPX01BUktfUEVSQ0VOVF9GT1JfUlggICAgICAxNQorCisvKiBNYWNyb3MgZm9yIGZsYWcgYW5kIHJlZiBjb3VudCBvcGVyYXRpb25zICAgICAgICAqLworI2RlZmluZSBNUF9TRVRfRkxBRyhfTSwgX0YpICAgICAgICAgKChfTSktPkZsYWdzIHw9IChfRikpCisjZGVmaW5lIE1QX0NMRUFSX0ZMQUcoX00sIF9GKSAgICAgICAoKF9NKS0+RmxhZ3MgJj0gfihfRikpCisjZGVmaW5lIE1QX0NMRUFSX0ZMQUdTKF9NKSAgICAgICAgICAoKF9NKS0+RmxhZ3MgPSAwKQorI2RlZmluZSBNUF9URVNUX0ZMQUcoX00sIF9GKSAgICAgICAgKCgoX00pLT5GbGFncyAmIChfRikpICE9IDApCisjZGVmaW5lIE1QX1RFU1RfRkxBR1MoX00sIF9GKSAgICAgICAoKChfTSktPkZsYWdzICYgKF9GKSkgPT0gKF9GKSkKKyNkZWZpbmUgTVBfSVNfRkxBR19DTEVBUihfTSwgX0YpICAgICgoKF9NKS0+RmxhZ3MgJiAoX0YpKSA9PSAwKQorCisjZGVmaW5lIE1QX0lOQ19SQ1ZfUkVGKF9BKSAgICAgICAgICBhdG9taWNfaW5jKCYoX0EpLT5SY3ZSZWZDb3VudCkKKyNkZWZpbmUgTVBfREVDX1JDVl9SRUYoX0EpICAgICAgICAgIGF0b21pY19kZWMoJihfQSktPlJjdlJlZkNvdW50KQorI2RlZmluZSBNUF9HRVRfUkNWX1JFRihfQSkgICAgICAgICAgYXRvbWljX3JlYWQoJihfQSktPlJjdlJlZkNvdW50KQorCisvKiBNYWNyb3Mgc3BlY2lmaWMgdG8gdGhlIHByaXZhdGUgYWRhcHRlciBzdHJ1Y3R1cmUgKi8KKyNkZWZpbmUgTVBfVENCX1JFU09VUkNFU19BVkFJTEFCTEUoX00pICgoX00pLT5UeFJpbmcubkJ1c3lTZW5kIDwgTlVNX1RDQikKKyNkZWZpbmUgTVBfVENCX1JFU09VUkNFU19OT1RfQVZBSUxBQkxFKF9NKSAoKF9NKS0+VHhSaW5nLm5CdXN5U2VuZCA+PSBOVU1fVENCKQorCisjZGVmaW5lIE1QX1NIT1VMRF9GQUlMX1NFTkQoX00pICAgKChfTSktPkZsYWdzICYgZk1QX0FEQVBURVJfRkFJTF9TRU5EX01BU0spCisjZGVmaW5lIE1QX0lTX05PVF9SRUFEWShfTSkgICAgICAgKChfTSktPkZsYWdzICYgZk1QX0FEQVBURVJfTk9UX1JFQURZX01BU0spCisjZGVmaW5lIE1QX0lTX1JFQURZKF9NKSAgICAgICAgICAgISgoX00pLT5GbGFncyAmIGZNUF9BREFQVEVSX05PVF9SRUFEWV9NQVNLKQorCisjZGVmaW5lIE1QX0hBU19DQUJMRShfTSkgICAgICAgICAgICEoKF9NKS0+RmxhZ3MgJiBmTVBfQURBUFRFUl9OT19DQUJMRSkKKyNkZWZpbmUgTVBfTElOS19ERVRFQ1RFRChfTSkgICAgICAgISgoX00pLT5GbGFncyAmIGZNUF9BREFQVEVSX0xJTktfREVURUNUSU9OKQorCisvKiBDb3VudGVycyBmb3IgZXJyb3IgcmF0ZSBtb25pdG9yaW5nICovCit0eXBlZGVmIHN0cnVjdCBfTVBfRVJSX0NPVU5URVJTIHsKKwl1MzIgUGt0Q291bnRUeFBhY2tldHM7CisJdTMyIFBrdENvdW50VHhFcnJvcnM7CisJdTMyIFRpbWVyQmFzZWRUeEVycm9yczsKKwl1MzIgUGt0Q291bnRMYXN0RXJyb3I7CisJdTMyIEVycmVkQ29uc2VjUGFja2V0czsKK30gTVBfRVJSX0NPVU5URVJTLCAqUE1QX0VSUl9DT1VOVEVSUzsKKworLyogUkZEIChSZWNlaXZlIEZyYW1lIERlc2NyaXB0b3IpICovCit0eXBlZGVmIHN0cnVjdCBfTVBfUkZEIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Rfbm9kZTsKKwlzdHJ1Y3Qgc2tfYnVmZiAqUGFja2V0OworCXUzMiBQYWNrZXRTaXplOwkvLyB0b3RhbCBzaXplIG9mIHJlY2VpdmUgZnJhbWUKKwl1MTYgaUJ1ZmZlckluZGV4OworCXU4IGlSaW5nSW5kZXg7Cit9IE1QX1JGRCwgKlBNUF9SRkQ7CisKKy8qIEVudW0gZm9yIEZsb3cgQ29udHJvbCAqLwordHlwZWRlZiBlbnVtIF9lZmxvd19jb250cm9sX3QgeworCUJvdGggPSAwLAorCVR4T25seSA9IDEsCisJUnhPbmx5ID0gMiwKKwlOb25lID0gMworfSBlRkxPV19DT05UUk9MX3QsICpQZUZMT1dfQ09OVFJPTF90OworCisvKiBTdHJ1Y3QgdG8gZGVmaW5lIHNvbWUgZGV2aWNlIHN0YXRpc3RpY3MgKi8KK3R5cGVkZWYgc3RydWN0IF9jZV9zdGF0c190IHsKKwkvKiBMaW5rIElucHV0L091dHB1dCBzdGF0cyAqLworCXVpbnQ2NF90IGlwYWNrZXRzOwkvLyAjIG9mIGluIHBhY2tldHMKKwl1aW50NjRfdCBvcGFja2V0czsJLy8gIyBvZiBvdXQgcGFja2V0cworCisJLyogTUlCIElJIHZhcmlhYmxlcworCSAqCisJICogTk9URTogYXRvbWljX3QgdHlwZXMgYXJlIG9ubHkgZ3VhcmFudGVlZCB0byBzdG9yZSAyNC1iaXRzOyBpZiB3ZQorCSAqIE1VU1QgaGF2ZSAzMiwgdGhlbiB3ZSdsbCBuZWVkIGFub3RoZXIgd2F5IHRvIHBlcmZvcm0gYXRvbWljCisJICogb3BlcmF0aW9ucworCSAqLworCXUzMiB1bmlyY3Y7CS8vICMgbXVsdGljYXN0IHBhY2tldHMgcmVjZWl2ZWQKKwlhdG9taWNfdCB1bml4bXQ7CS8vICMgbXVsdGljYXN0IHBhY2tldHMgZm9yIFR4CisJdTMyIG11bHRpcmN2OwkvLyAjIG11bHRpY2FzdCBwYWNrZXRzIHJlY2VpdmVkCisJYXRvbWljX3QgbXVsdGl4bXQ7CS8vICMgbXVsdGljYXN0IHBhY2tldHMgZm9yIFR4CisJdTMyIGJyZGNzdHJjdjsJLy8gIyBicm9hZGNhc3QgcGFja2V0cyByZWNlaXZlZAorCWF0b21pY190IGJyZGNzdHhtdDsJLy8gIyBicm9hZGNhc3QgcGFja2V0cyBmb3IgVHgKKwl1MzIgbm9yY3ZidWY7CS8vICMgUnggcGFja2V0cyBkaXNjYXJkZWQKKwl1MzIgbm94bXRidWY7CS8vICMgVHggcGFja2V0cyBkaXNjYXJkZWQKKworCS8qIFRyYW5zY2lldmVyIHN0YXRlIGluZm9ybWF0aW9ucy4gKi8KKwl1OCB4Y3ZyX2FkZHI7CisJdTMyIHhjdnJfaWQ7CisKKwkvKiBUeCBTdGF0aXN0aWNzLiAqLworCXUzMiB0eF91ZmxvOwkJLy8gVHggVW5kZXJydW5zCisKKwl1MzIgY29sbGlzaW9uczsKKwl1MzIgZXhjZXNzaXZlX2NvbGxpc2lvbnM7CisJdTMyIGZpcnN0X2NvbGxpc2lvbjsKKwl1MzIgbGF0ZV9jb2xsaXNpb25zOworCXUzMiBtYXhfcGt0X2Vycm9yOworCXUzMiB0eF9kZWZlcnJlZDsKKworCS8qIFJ4IFN0YXRpc3RpY3MuICovCisJdTMyIHJ4X292X2Zsb3c7CS8vIFJ4IE92ZXIgRmxvdworCisJdTMyIGxlbmd0aF9lcnI7CisJdTMyIGFsaWdubWVudF9lcnI7CisJdTMyIGNyY19lcnI7CisJdTMyIGNvZGVfdmlvbGF0aW9uczsKKwl1MzIgb3RoZXJfZXJyb3JzOworCisjaWZkZWYgQ09ORklHX0VUMTMxWF9ERUJVRworCXUzMiBVbmhhbmRsZWRJbnRlcnJ1cHRzUGVyU2VjOworCXUzMiBSeERtYUludGVycnVwdHNQZXJTZWM7CisJdTMyIFR4RG1hSW50ZXJydXB0c1BlclNlYzsKKwl1MzIgV2F0Y2hEb2dJbnRlcnJ1cHRzUGVyU2VjOworI2VuZGlmCS8qIENPTkZJR19FVDEzMVhfREVCVUcgKi8KKworCXUzMiBTeW5jaHJvdW5vdXNJdGVyYXRpb25zOworCUlOVEVSUlVQVF90IEludGVycnVwdFN0YXR1czsKK30gQ0VfU1RBVFNfdCwgKlBDRV9TVEFUU190OworCisvKiBUaGUgcHJpdmF0ZSBhZGFwdGVyIHN0cnVjdHVyZSAqLworc3RydWN0IGV0MTMxeF9hZGFwdGVyIHsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2OworCXN0cnVjdCBwY2lfZGV2ICpwZGV2OworCisJc3RydWN0IHdvcmtfc3RydWN0IHRhc2s7CisKKwkvKiBGbGFncyB0aGF0IGluZGljYXRlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIGFkYXB0ZXIgKi8KKwl1MzIgRmxhZ3M7CisJdTMyIEh3RXJyQ291bnQ7CisKKwkvKiBDb25maWd1cmF0aW9uICAqLworCXU4IFBlcm1hbmVudEFkZHJlc3NbRVRIX0FMRU5dOworCXU4IEN1cnJlbnRBZGRyZXNzW0VUSF9BTEVOXTsKKwlib29sIGJPdmVycmlkZUFkZHJlc3M7CisJYm9vbCBiRWVwcm9tUHJlc2VudDsKKwl1OCBlZXByb21EYXRhWzJdOworCisJLyogU3BpbmxvY2tzICovCisJc3BpbmxvY2tfdCBMb2NrOworCisJc3BpbmxvY2tfdCBUQ0JTZW5kUUxvY2s7CisJc3BpbmxvY2tfdCBUQ0JSZWFkeVFMb2NrOworCXNwaW5sb2NrX3QgU2VuZEhXTG9jazsKKwlzcGlubG9ja190IFNlbmRXYWl0TG9jazsKKworCXNwaW5sb2NrX3QgUmN2TG9jazsKKwlzcGlubG9ja190IFJjdlBlbmRMb2NrOworCXNwaW5sb2NrX3QgRmJyTG9jazsKKworCXNwaW5sb2NrX3QgUEhZTG9jazsKKworCS8qIFBhY2tldCBGaWx0ZXIgYW5kIGxvb2sgYWhlYWQgc2l6ZSAqLworCXUzMiBQYWNrZXRGaWx0ZXI7CisJdTMyIHVsTG9va0FoZWFkOworCXUzMiB1aUxpbmtTcGVlZDsKKwl1MzIgdWlEdXBsZXhNb2RlOworCXUzMiB1aUF1dG9OZWdTdGF0dXM7CisJdTggdWNMaW5rU3RhdHVzOworCisJLyogbXVsdGljYXN0IGxpc3QgKi8KKwl1MzIgTUNBZGRyZXNzQ291bnQ7CisJdTggTUNMaXN0W05JQ19NQVhfTUNBU1RfTElTVF1bRVRIX0FMRU5dOworCisJLyogTUFDIHRlc3QgKi8KKwlUWE1BQ19UWFRFU1RfdCBUeE1hY1Rlc3Q7CisKKwkvKiBQb2ludGVyIHRvIHRoZSBkZXZpY2UncyBQQ0kgcmVnaXN0ZXIgc3BhY2UgKi8KKwlBRERSRVNTX01BUF90IF9faW9tZW0gKkNTUkFkZHJlc3M7CisKKwkvKiBQQ0kgY29uZmlnIHNwYWNlIGluZm8sIGZvciBkZWJ1ZyBwdXJwb3NlcyBvbmx5LiAqLworCXU4IFJldmlzaW9uSUQ7CisJdTE2IFZlbmRvcklEOworCXUxNiBEZXZpY2VJRDsKKwl1MTYgU3ViVmVuZG9ySUQ7CisJdTE2IFN1YlN5c3RlbUlEOworCXUzMiBDYWNoZUZpbGxTaXplOworCXUxNiBQY2lYRGV2Q3RsOworCXU4IHBjaV9sYXRfdGltZXI7CisJdTggcGNpX2hkcl90eXBlOworCXU4IHBjaV9iaXN0OworCXUzMiBwY2lfY2ZnX3N0YXRlWzY0IC8gc2l6ZW9mKHUzMildOworCisJLyogUmVnaXN0cnkgcGFyYW1ldGVycyAqLworCXU4IFNwZWVkRHVwbGV4OwkJLy8gc3BlZWQvZHVwbGV4CisJZUZMT1dfQ09OVFJPTF90IFJlZ2lzdHJ5Rmxvd0NvbnRyb2w7CS8vIGZvciA4MDIuM3ggZmxvdyBjb250cm9sCisJdTggUmVnaXN0cnlXT0xNYXRjaDsJLy8gRW5hYmxlIFdPTCBwYXR0ZXJuLW1hdGNoaW5nCisJdTggUmVnaXN0cnlXT0xMaW5rOwkvLyBMaW5rIHN0YXRlIGNoYW5nZSBpcyBpbmRlcGVuZGFudAorCXU4IFJlZ2lzdHJ5UGh5Q29tYTsJLy8gUGh5IENvbWEgbW9kZSBlbmFibGUvZGlzYWJsZQorCisJdTMyIFJlZ2lzdHJ5UnhNZW1FbmQ7CS8vIFNpemUgb2YgaW50ZXJuYWwgcnggbWVtb3J5CisJdTggUmVnaXN0cnlNQUNTdGF0OwkvLyBJZiBzZXQsIHJlYWQgTUFDU1RBVCwgZWxzZSBkb24ndAorCXUzMiBSZWdpc3RyeVZsYW5UYWc7CS8vIDgwMi4xcSBWbGFuIFRBRworCXUzMiBSZWdpc3RyeUp1bWJvUGFja2V0OwkvLyBNYXggc3VwcG9ydGVkIGV0aGVybmV0IHBhY2tldCBzaXplCisKKwl1MzIgUmVnaXN0cnlUeE51bUJ1ZmZlcnM7CisJdTMyIFJlZ2lzdHJ5VHhUaW1lSW50ZXJ2YWw7CisKKwl1MzIgUmVnaXN0cnlSeE51bUJ1ZmZlcnM7CisJdTMyIFJlZ2lzdHJ5UnhUaW1lSW50ZXJ2YWw7CisKKwkvKiBWYWxpZGF0aW9uIGhlbHBlcnMgKi8KKwl1OCBSZWdpc3RyeVBNV09MOworCXU4IFJlZ2lzdHJ5Tk1JRGlzYWJsZTsKKwl1MzIgUmVnaXN0cnlETUFDYWNoZTsKKwl1MzIgUmVnaXN0cnlTQ0dhaW47CisJdTggUmVnaXN0cnlQaHlMb29wYms7CS8vIEVuYWJsZSBQaHkgbG9vcGJhY2sKKworCS8qIERlcml2ZWQgZnJvbSB0aGUgcmVnaXN0cnk6ICovCisJdTggQWlGb3JjZURweDsJCS8vIGR1cGxleCBzZXR0aW5nCisJdTE2IEFpRm9yY2VTcGVlZDsJCS8vICdTcGVlZCcsIHVzZXIgb3Zlci1yaWRlIG9mIGxpbmUgc3BlZWQKKwllRkxPV19DT05UUk9MX3QgRmxvd0NvbnRyb2w7CS8vIGZsb3cgY29udHJvbCB2YWxpZGF0ZWQgYnkgdGhlIGZhci1lbmQKKwllbnVtIHsKKwkJTkVUSUZfU1RBVFVTX0lOVkFMSUQgPSAwLAorCQlORVRJRl9TVEFUVVNfTUVESUFfQ09OTkVDVCwKKwkJTkVUSUZfU1RBVFVTX01FRElBX0RJU0NPTk5FQ1QsCisJCU5FVElGX1NUQVRVU19NQVgKKwl9IE1lZGlhU3RhdGU7CisJdTggRHJpdmVyTm9QaHlBY2Nlc3M7CisKKwkvKiBNaW5pbWl6ZSBpbml0LXRpbWUgKi8KKwlib29sIGJRdWVyeVBlbmRpbmc7CisJYm9vbCBiU2V0UGVuZGluZzsKKwlib29sIGJSZXNldFBlbmRpbmc7CisJc3RydWN0IHRpbWVyX2xpc3QgRXJyb3JUaW1lcjsKKwlib29sIGJMaW5rVGltZXJBY3RpdmU7CisJTVBfUE9XRVJfTUdNVCBQb01nbXQ7CisJSU5URVJSVVBUX3QgQ2FjaGVkTWFza1ZhbHVlOworCisJYXRvbWljX3QgUmN2UmVmQ291bnQ7CS8vIE51bSBwYWNrZXRzIG5vdCB5ZXQgcmV0dXJuZWQKKworCS8qIFhjdnIgc3RhdHVzIGF0IGxhc3QgcG9sbCAqLworCU1JX0JNU1JfdCBCbXNyOworCisJLyogVHggTWVtb3J5IFZhcmlhYmxlcyAqLworCVRYX1JJTkdfdCBUeFJpbmc7CisKKwkvKiBSeCBNZW1vcnkgVmFyaWFibGVzICovCisJUlhfUklOR190IFJ4UmluZzsKKworCS8qIEVUMTMxMCByZWdpc3RlciBBY2Nlc3MgKi8KKwlKQUdDT1JFX0FDQ0VTU19SRUdTIEphZ0NvcmVSZWdzOworCVBDSV9DRkdfU1BBQ0VfUkVHUyBQY2lDZmdSZWdzOworCisJLyogTG9vcGJhY2sgc3BlY2lmaWNzICovCisJdTggUmVwbGljYVBoeUxvb3BiazsJLy8gUmVwbGljYSBFbmFibGUKKwl1OCBSZXBsaWNhUGh5TG9vcGJrUEY7CS8vIFJlcGxpY2EgRW5hYmxlIFBhc3MvRmFpbAorCisJLyogU3RhdHMgKi8KKwlDRV9TVEFUU190IFN0YXRzOworCisJc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgbmV0X3N0YXRzOworCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzIG5ldF9zdGF0c19wcmV2OworfTsKKworI2RlZmluZSBNUFNlbmRQYWNrZXRzSGFuZGxlciAgTVBTZW5kUGFja2V0cworI2RlZmluZSBNUF9GUkVFX1NFTkRfUEFDS0VUX0ZVTihBZGFwdGVyLCBwTXBUY2IpIFwKKwlldDEzMXhfZnJlZV9zZW5kX3BhY2tldChBZGFwdGVyLCBwTXBUY2IpCisjZGVmaW5lIE1wU2VuZFBhY2tldEZ1bihBZGFwdGVyLCBQYWNrZXQpIE1wU2VuZFBhY2tldChBZGFwdGVyLCBQYWNrZXQpCisKKyNlbmRpZiAvKiBfX0VUMTMxWF9BREFQVEVSX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2V0MTMxeC9ldDEzMXhfY29uZmlnLmMgYi9kcml2ZXJzL3N0YWdpbmcvZXQxMzF4L2V0MTMxeF9jb25maWcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYWRiYWE2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2V0MTMxeC9ldDEzMXhfY29uZmlnLmMKQEAgLTAsMCArMSwzMjUgQEAKKy8qCisgKiBBZ2VyZSBTeXN0ZW1zIEluYy4KKyAqIDEwLzEwMC8xMDAwIEJhc2UtVCBFdGhlcm5ldCBEcml2ZXIgZm9yIHRoZSBFVDEzMDEgYW5kIEVUMTMxeCBzZXJpZXMgTUFDcworICoKKyAqIENvcHlyaWdodCCpIDIwMDUgQWdlcmUgU3lzdGVtcyBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogICBodHRwOi8vd3d3LmFnZXJlLmNvbQorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogZXQxMzF4X2NvbmZpZy5jIC0gSGFuZGxlcyBwYXJzaW5nIG9mIGNvbmZpZ3VyYXRpb24gZGF0YSBkdXJpbmcKKyAqICAgICAgICAgICAgICAgICAgIGluaXRpYWxpemF0aW9uLgorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogU09GVFdBUkUgTElDRU5TRQorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgcHJvdmlkZWQgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIHRlcm1zIGFuZCBjb25kaXRpb25zLAorICogd2hpY2ggeW91IHNob3VsZCByZWFkIGNhcmVmdWxseSBiZWZvcmUgdXNpbmcgdGhlIHNvZnR3YXJlLiAgVXNpbmcgdGhpcworICogc29mdHdhcmUgaW5kaWNhdGVzIHlvdXIgYWNjZXB0YW5jZSBvZiB0aGVzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucy4gIElmIHlvdSBkbworICogbm90IGFncmVlIHdpdGggdGhlc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMsIGRvIG5vdCB1c2UgdGhlIHNvZnR3YXJlLgorICoKKyAqIENvcHlyaWdodCCpIDIwMDUgQWdlcmUgU3lzdGVtcyBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIG9yIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb25zLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMKKyAqICAgIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBEaXNjbGFpbWVyIGFzIGNvbW1lbnRzIGluIHRoZSBjb2RlIGFzCisgKiAgICB3ZWxsIGFzIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiAuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAqICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIERpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyAqICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIC4gTmVpdGhlciB0aGUgbmFtZSBvZiBBZ2VyZSBTeXN0ZW1zIEluYy4gbm9yIHRoZSBuYW1lcyBvZiB0aGUgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIERpc2NsYWltZXIKKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIJNBUyBJU5QgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywKKyAqIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBJTkZSSU5HRU1FTlQgQU5EIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBBTlkKKyAqIFVTRSwgTU9ESUZJQ0FUSU9OIE9SIERJU1RSSUJVVElPTiBPRiBUSElTIFNPRlRXQVJFIElTIFNPTEVMWSBBVCBUSEUgVVNFUlMgT1dOCisgKiBSSVNLLiBJTiBOTyBFVkVOVCBTSEFMTCBBR0VSRSBTWVNURU1TIElOQy4gT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSAorICogREFNQUdFLgorICoKKyAqLworCisjaW5jbHVkZSAiZXQxMzF4X3ZlcnNpb24uaCIKKyNpbmNsdWRlICJldDEzMXhfZGVidWcuaCIKKyNpbmNsdWRlICJldDEzMXhfZGVmcy5oIgorCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisKKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L3B0cmFjZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9jdHlwZS5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvaW4uaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KKyNpbmNsdWRlIDxhc20vYml0b3BzLmg+CisKKyNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgorI2luY2x1ZGUgPGxpbnV4L2lmX2FycC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgorCisjaW5jbHVkZSAiZXQxMzEwX3BoeS5oIgorI2luY2x1ZGUgImV0MTMxMF9wbS5oIgorI2luY2x1ZGUgImV0MTMxMF9qYWdjb3JlLmgiCisKKyNpbmNsdWRlICJldDEzMXhfYWRhcHRlci5oIgorI2luY2x1ZGUgImV0MTMxeF9pbml0cGNpLmgiCisjaW5jbHVkZSAiZXQxMzF4X2NvbmZpZy5oIgorCisjaW5jbHVkZSAiZXQxMzEwX3R4LmgiCisKKy8qIERhdGEgZm9yIGRlYnVnZ2luZyBmYWNpbGl0aWVzICovCisjaWZkZWYgQ09ORklHX0VUMTMxWF9ERUJVRworZXh0ZXJuIGRiZ19pbmZvX3QgKmV0MTMxeF9kYmdpbmZvOworI2VuZGlmIC8qIENPTkZJR19FVDEzMVhfREVCVUcgKi8KKworLyogRGVmaW5lcyBmb3IgUGFyYW1ldGVyIERlZmF1bHQvTWluL01heCB2YXVsZXMgKi8KKyNkZWZpbmUgUEFSTV9TUEVFRF9EVVBMRVhfREVGICAgMAorI2RlZmluZSBQQVJNX1NQRUVEX0RVUExFWF9NSU4gICAwCisjZGVmaW5lIFBBUk1fU1BFRURfRFVQTEVYX01BWCAgIDUKKworI2RlZmluZSBQQVJNX1ZMQU5fVEFHX0RFRiAgICAgICAwCisjZGVmaW5lIFBBUk1fVkxBTl9UQUdfTUlOICAgICAgIDAKKyNkZWZpbmUgUEFSTV9WTEFOX1RBR19NQVggICAgICAgNDA5NQorCisjZGVmaW5lIFBBUk1fRkxPV19DVExfREVGICAgICAgIDAKKyNkZWZpbmUgUEFSTV9GTE9XX0NUTF9NSU4gICAgICAgMAorI2RlZmluZSBQQVJNX0ZMT1dfQ1RMX01BWCAgICAgICAzCisKKyNkZWZpbmUgUEFSTV9XT0xfTElOS19ERUYgICAgICAgMworI2RlZmluZSBQQVJNX1dPTF9MSU5LX01JTiAgICAgICAwCisjZGVmaW5lIFBBUk1fV09MX0xJTktfTUFYICAgICAgIDMKKworI2RlZmluZSBQQVJNX1dPTF9NQVRDSF9ERUYgICAgICA3CisjZGVmaW5lIFBBUk1fV09MX01BVENIX01JTiAgICAgIDAKKyNkZWZpbmUgUEFSTV9XT0xfTUFUQ0hfTUFYICAgICAgNworCisjZGVmaW5lIFBBUk1fSlVNQk9fUEtUX0RFRiAgICAgIDE1MTQKKyNkZWZpbmUgUEFSTV9KVU1CT19QS1RfTUlOICAgICAgMTUxNAorI2RlZmluZSBQQVJNX0pVTUJPX1BLVF9NQVggICAgICA5MjE2CisKKyNkZWZpbmUgUEFSTV9QSFlfQ09NQV9ERUYgICAgICAgMAorI2RlZmluZSBQQVJNX1BIWV9DT01BX01JTiAgICAgICAwCisjZGVmaW5lIFBBUk1fUEhZX0NPTUFfTUFYICAgICAgIDEKKworI2RlZmluZSBQQVJNX1JYX05VTV9CVUZTX0RFRiAgICA0CisjZGVmaW5lIFBBUk1fUlhfTlVNX0JVRlNfTUlOICAgIDEKKyNkZWZpbmUgUEFSTV9SWF9OVU1fQlVGU19NQVggICAgNjQKKworI2RlZmluZSBQQVJNX1JYX1RJTUVfSU5UX0RFRiAgICAxMAorI2RlZmluZSBQQVJNX1JYX1RJTUVfSU5UX01JTiAgICAyCisjZGVmaW5lIFBBUk1fUlhfVElNRV9JTlRfTUFYICAgIDMyMAorCisjZGVmaW5lIFBBUk1fVFhfTlVNX0JVRlNfREVGICAgIDQKKyNkZWZpbmUgUEFSTV9UWF9OVU1fQlVGU19NSU4gICAgMQorI2RlZmluZSBQQVJNX1RYX05VTV9CVUZTX01BWCAgICA0MAorCisjZGVmaW5lIFBBUk1fVFhfVElNRV9JTlRfREVGICAgIDQwCisjZGVmaW5lIFBBUk1fVFhfVElNRV9JTlRfTUlOICAgIDEKKyNkZWZpbmUgUEFSTV9UWF9USU1FX0lOVF9NQVggICAgMTQwCisKKyNkZWZpbmUgUEFSTV9SWF9NRU1fRU5EX0RFRiAgICAgMHgyYmMKKyNkZWZpbmUgUEFSTV9SWF9NRU1fRU5EX01JTiAgICAgMAorI2RlZmluZSBQQVJNX1JYX01FTV9FTkRfTUFYICAgICAweDNmZgorCisjZGVmaW5lIFBBUk1fTUFDX1NUQVRfREVGICAgICAgIDEKKyNkZWZpbmUgUEFSTV9NQUNfU1RBVF9NSU4gICAgICAgMAorI2RlZmluZSBQQVJNX01BQ19TVEFUX01BWCAgICAgICAxCisKKyNkZWZpbmUgUEFSTV9TQ19HQUlOX0RFRiAgICAgICAgNworI2RlZmluZSBQQVJNX1NDX0dBSU5fTUlOICAgICAgICAwCisjZGVmaW5lIFBBUk1fU0NfR0FJTl9NQVggICAgICAgIDcKKworI2RlZmluZSBQQVJNX1BNX1dPTF9ERUYgICAgICAgICAwCisjZGVmaW5lIFBBUk1fUE1fV09MX01JTiAgICAgICAgIDAKKyNkZWZpbmUgUEFSTV9QTV9XT0xfTUFYICAgICAgICAgMQorCisjZGVmaW5lIFBBUk1fTk1JX0RJU0FCTEVfREVGICAgIDAKKyNkZWZpbmUgUEFSTV9OTUlfRElTQUJMRV9NSU4gICAgMAorI2RlZmluZSBQQVJNX05NSV9ESVNBQkxFX01BWCAgICAyCisKKyNkZWZpbmUgUEFSTV9ETUFfQ0FDSEVfREVGICAgICAgMAorI2RlZmluZSBQQVJNX0RNQV9DQUNIRV9NSU4gICAgICAwCisjZGVmaW5lIFBBUk1fRE1BX0NBQ0hFX01BWCAgICAgIDE1CisKKyNkZWZpbmUgUEFSTV9QSFlfTE9PUEJLX0RFRiAgICAgMAorI2RlZmluZSBQQVJNX1BIWV9MT09QQktfTUlOICAgICAwCisjZGVmaW5lIFBBUk1fUEhZX0xPT1BCS19NQVggICAgIDEKKworI2RlZmluZSBQQVJNX01BQ19BRERSRVNTX0RFRiAgICB7IDB4MDAsIDB4MDUsIDB4M2QsIDB4MDAsIDB4MDIsIDB4MDAgfQorCisvKiBNb2R1bGUgcGFyYW1ldGVyIGZvciBkaXNhYmxpbmcgTk1JCisgKiBldDEzMXhfc3BlZWRfc2V0IDoKKyAqIFNldCBMaW5rIHNwZWVkIGFuZCBkdWJsZXggbWFudWFsbHkgKDAtNSkgIFswXQorICogIDEgOiAxME1iICAgSGFsZi1EdXBsZXgKKyAqICAyIDogMTBNYiAgIEZ1bGwtRHVwbGV4CisgKiAgMyA6IDEwME1iICBIYWxmLUR1cGxleAorICogIDQgOiAxMDBNYiAgRnVsbC1EdXBsZXgKKyAqICA1IDogMTAwME1iIEZ1bGwtRHVwbGV4CisgKiAgMCA6IEF1dG8gU3BlZWQgQXV0byBEdWJsZXggLy8gZGVmYXVsdAorICovCitzdGF0aWMgdTMyIGV0MTMxeF9ubWlfZGlzYWJsZSA9IFBBUk1fTk1JX0RJU0FCTEVfREVGOworbW9kdWxlX3BhcmFtKGV0MTMxeF9ubWlfZGlzYWJsZSwgdWludCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKGV0MTMxeF9ubWlfZGlzYWJsZSwgIkRpc2FibGUgTk1JICgwLTIpIFswXSIpOworCisvKiBNb2R1bGUgcGFyYW1ldGVyIGZvciBtYW51YWwgc3BlZWQgc2V0dGluZworICogZXQxMzF4X25taV9kaXNhYmxlIDoKKyAqIERpc2FibGUgTk1JICgwLTIpIFswXQorICogIDAgOgorICogIDEgOgorICogIDIgOgorICovCitzdGF0aWMgdTMyIGV0MTMxeF9zcGVlZF9zZXQgPSBQQVJNX1NQRUVEX0RVUExFWF9ERUY7Cittb2R1bGVfcGFyYW0oZXQxMzF4X3NwZWVkX3NldCwgdWludCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKGV0MTMxeF9zcGVlZF9zZXQsCisJCSAiU2V0IExpbmsgc3BlZWQgYW5kIGR1YmxleCBtYW51YWxseSAoMC01KSAgWzBdIFxuICAxIDogMTBNYiAgIEhhbGYtRHVwbGV4IFxuICAyIDogMTBNYiAgIEZ1bGwtRHVwbGV4IFxuICAzIDogMTAwTWIgIEhhbGYtRHVwbGV4IFxuICA0IDogMTAwTWIgIEZ1bGwtRHVwbGV4IFxuICA1IDogMTAwME1iIEZ1bGwtRHVwbGV4IFxuIDAgOiBBdXRvIFNwZWVkIEF1dG8gRHVibGV4Iik7CisKKy8qKgorICogZXQxMzF4X2NvbmZpZ19wYXJzZQorICogQHBBZGFwdGVyOiBwb2ludGVyIHRvIHRoZSBwcml2YXRlIGFkYXB0ZXIgc3RydWN0CisgKgorICogUGFyc2VzIGEgY29uZmlndXJhdGlvbiBmcm9tIHNvbWUgbG9jYXRpb24gKG1vZHVsZSBwYXJhbWV0ZXJzLCBmb3IgZXhhbXBsZSkKKyAqIGludG8gdGhlIHByaXZhdGUgYWRhcHRlciBzdHJ1Y3QKKyAqLwordm9pZCBldDEzMXhfY29uZmlnX3BhcnNlKHN0cnVjdCBldDEzMXhfYWRhcHRlciAqcEFkYXB0ZXIpCit7CisJdWludDhfdCBtYWNBZGRyRGVmW10gPSBQQVJNX01BQ19BRERSRVNTX0RFRjsKKworCURCR19FTlRFUihldDEzMXhfZGJnaW5mbyk7CisKKwkvKgorCSAqIFRoZSBORElTIGRyaXZlciB1c2VzIHRoZSByZWdpc3RyeSB0byBzdG9yZSBwZXJzaXN0ZW50IHBlci1kZXZpY2UKKwkgKiBjb25maWd1cmF0aW9uLCBhbmQgcmVhZHMgdGhpcyBjb25maWd1cmF0aW9uIGludG8gdGhlIGFwcHJvcHJpYXRlCisJICogZWxlbWVudHMgb2YgdGhlIHByaXZhdGUgYWRhcHRlciBzdHJ1Y3R1cmUgb24gaW5pdGlhbGl6YXRpb24uCisJICogQmVjYXVzZSBMaW51eCBoYXMgbm8gYW5hbG9nIHRvIHRoZSByZWdpc3RyeSwgdXNlIHRoaXMgZnVuY3Rpb24gdG8KKwkgKiBpbml0aWFsaXplIHRoZSBwcml2YXRlIGFkYXB0ZXIgc3RydWN0dXJlIHdpdGggYSBkZWZhdWx0CisJICogY29uZmlndXJhdGlvbi4KKwkgKgorCSAqIE9uZSBvdGhlciBwb3NzaWJpbGl0eSBpcyB0byB1c2UgYSBzZXJpZXMgb2YgbW9kdWxlIHBhcmFtZXRlcnMgd2hpY2gKKwkgKiBjYW4gYmUgcGFzc2VkIGluIGJ5IHRoZSBjYWxsZXIgd2hlbiB0aGUgbW9kdWxlIGlzIGluaXRpYWxpemVkLgorCSAqIEhvd2V2ZXIsIHRoaXMgaW1wbGVtZW50YXRpb24gZG9lcyBub3QgYWxsb3cgZm9yIHNlcGVyYXRlCisJICogY29uZmlndXJhdGlvbnMgaW4gdGhlIGV2ZW50IG11bHRpcGxlIGRldmljZXMgYXJlIHByZXNlbnQsIGFuZCBoZW5jZQorCSAqIHdpbGwgbm90IHN1ZmZpY2UuCisJICoKKwkgKiBJZiBhbm90aGVyIG1ldGhvZCBpcyBkZXJpdmVkIHdoaWNoIGFkZHJlc3NlcyB0aGlzIHByb2JsZW0sIHRoaXMgaXMKKwkgKiB3aGVyZSBpdCBzaG91bGQgYmUgaW1wbGVtZW50ZWQuCisJICovCisKKwkgLyogU2V0IHRoZSBwcml2YXRlIGFkYXB0ZXIgc3RydWN0IHdpdGggZGVmYXVsdCB2YWx1ZXMgZm9yIHRoZQorCSAgKiBjb3JyZXNwb25kaW5nIHBhcmFtZXRlcnMKKwkgICovCisJaWYgKGV0MTMxeF9zcGVlZF9zZXQgIT0gUEFSTV9TUEVFRF9EVVBMRVhfREVGKSB7CisJCURCR19WRVJCT1NFKGV0MTMxeF9kYmdpbmZvLCAiU3BlZWQgc2V0IG1hbnVhbGx5IHRvIDogJWQgXG4iLAorCQkJICAgIGV0MTMxeF9zcGVlZF9zZXQpOworCQlwQWRhcHRlci0+U3BlZWREdXBsZXggPSBldDEzMXhfc3BlZWRfc2V0OworCX0gZWxzZSB7CisJCXBBZGFwdGVyLT5TcGVlZER1cGxleCA9IFBBUk1fU1BFRURfRFVQTEVYX0RFRjsKKwl9CisKKwkvLyAgcEFkYXB0ZXItPlNwZWVkRHVwbGV4ICAgICAgICAgICAgPSBQQVJNX1NQRUVEX0RVUExFWF9ERUY7CisKKwlwQWRhcHRlci0+UmVnaXN0cnlWbGFuVGFnID0gUEFSTV9WTEFOX1RBR19ERUY7CisJcEFkYXB0ZXItPlJlZ2lzdHJ5Rmxvd0NvbnRyb2wgPSBQQVJNX0ZMT1dfQ1RMX0RFRjsKKwlwQWRhcHRlci0+UmVnaXN0cnlXT0xMaW5rID0gUEFSTV9XT0xfTElOS19ERUY7CisJcEFkYXB0ZXItPlJlZ2lzdHJ5V09MTWF0Y2ggPSBQQVJNX1dPTF9NQVRDSF9ERUY7CisJcEFkYXB0ZXItPlJlZ2lzdHJ5SnVtYm9QYWNrZXQgPSBQQVJNX0pVTUJPX1BLVF9ERUY7CisJcEFkYXB0ZXItPlJlZ2lzdHJ5UGh5Q29tYSA9IFBBUk1fUEhZX0NPTUFfREVGOworCXBBZGFwdGVyLT5SZWdpc3RyeVJ4TnVtQnVmZmVycyA9IFBBUk1fUlhfTlVNX0JVRlNfREVGOworCXBBZGFwdGVyLT5SZWdpc3RyeVJ4VGltZUludGVydmFsID0gUEFSTV9SWF9USU1FX0lOVF9ERUY7CisJcEFkYXB0ZXItPlJlZ2lzdHJ5VHhOdW1CdWZmZXJzID0gUEFSTV9UWF9OVU1fQlVGU19ERUY7CisJcEFkYXB0ZXItPlJlZ2lzdHJ5VHhUaW1lSW50ZXJ2YWwgPSBQQVJNX1RYX1RJTUVfSU5UX0RFRjsKKwlwQWRhcHRlci0+UmVnaXN0cnlSeE1lbUVuZCA9IFBBUk1fUlhfTUVNX0VORF9ERUY7CisJcEFkYXB0ZXItPlJlZ2lzdHJ5TUFDU3RhdCA9IFBBUk1fTUFDX1NUQVRfREVGOworCXBBZGFwdGVyLT5SZWdpc3RyeVNDR2FpbiA9IFBBUk1fU0NfR0FJTl9ERUY7CisJcEFkYXB0ZXItPlJlZ2lzdHJ5UE1XT0wgPSBQQVJNX1BNX1dPTF9ERUY7CisKKwlpZiAoZXQxMzF4X25taV9kaXNhYmxlICE9IFBBUk1fTk1JX0RJU0FCTEVfREVGKSB7CisJCXBBZGFwdGVyLT5SZWdpc3RyeU5NSURpc2FibGUgPSBldDEzMXhfbm1pX2Rpc2FibGU7CisJfSBlbHNlIHsKKwkJcEFkYXB0ZXItPlJlZ2lzdHJ5Tk1JRGlzYWJsZSA9IFBBUk1fTk1JX0RJU0FCTEVfREVGOworCX0KKworCXBBZGFwdGVyLT5SZWdpc3RyeURNQUNhY2hlID0gUEFSTV9ETUFfQ0FDSEVfREVGOworCXBBZGFwdGVyLT5SZWdpc3RyeVBoeUxvb3BiayA9IFBBUk1fUEhZX0xPT1BCS19ERUY7CisKKwkvKiBTZXQgdGhlIE1BQyBhZGRyZXNzIHRvIGEgZGVmYXVsdCAqLworCW1lbWNweShwQWRhcHRlci0+Q3VycmVudEFkZHJlc3MsIG1hY0FkZHJEZWYsIEVUSF9BTEVOKTsKKwlwQWRhcHRlci0+Yk92ZXJyaWRlQWRkcmVzcyA9IGZhbHNlOworCisJREJHX1RSQUNFKGV0MTMxeF9kYmdpbmZvLAorCQkgICJEZWZhdWx0IE1BQyBBZGRyZXNzICA6ICUwMng6JTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4XG4iLAorCQkgIHBBZGFwdGVyLT5DdXJyZW50QWRkcmVzc1swXSwgcEFkYXB0ZXItPkN1cnJlbnRBZGRyZXNzWzFdLAorCQkgIHBBZGFwdGVyLT5DdXJyZW50QWRkcmVzc1syXSwgcEFkYXB0ZXItPkN1cnJlbnRBZGRyZXNzWzNdLAorCQkgIHBBZGFwdGVyLT5DdXJyZW50QWRkcmVzc1s0XSwgcEFkYXB0ZXItPkN1cnJlbnRBZGRyZXNzWzVdKTsKKworCS8qIERlY29kZSBTcGVlZER1cGxleAorCSAqCisJICogU2V0IHVwIGFzIGlmIHdlIGFyZSBhdXRvIG5lZ290aWF0aW5nIGFsd2F5cyBhbmQgdGhlbiBjaGFuZ2UgaWYgd2UKKwkgKiBnbyBpbnRvIGZvcmNlIG1vZGUKKwkgKi8KKwlwQWRhcHRlci0+QWlGb3JjZVNwZWVkID0gMDsJLy8gQXV0byBzcGVlZAorCXBBZGFwdGVyLT5BaUZvcmNlRHB4ID0gMDsJLy8gQXV0byBGRFgKKworCS8qIElmIHdlIGFyZSB0aGUgMTAvMTAwIGRldmljZSwgYW5kIGdpZ2FiaXQgaXMgc29tZWhvdyByZXF1ZXN0ZWQgdGhlbgorCSAqIGtub2NrIGl0IGRvd24gdG8gMTAwIGZ1bGwuCisJICovCisJaWYgKChwQWRhcHRlci0+RGV2aWNlSUQgPT0gRVQxMzFYX1BDSV9ERVZJQ0VfSURfRkFTVCkgJiYKKwkgICAgKHBBZGFwdGVyLT5TcGVlZER1cGxleCA9PSA1KSkgeworCQlwQWRhcHRlci0+U3BlZWREdXBsZXggPSA0OworCX0KKworCXN3aXRjaCAocEFkYXB0ZXItPlNwZWVkRHVwbGV4KSB7CisJY2FzZSAxOgkJLy8gMTBNYiAgIEhhbGYtRHVwbGV4CisJCXBBZGFwdGVyLT5BaUZvcmNlU3BlZWQgPSAxMDsKKwkJcEFkYXB0ZXItPkFpRm9yY2VEcHggPSAxOworCQlicmVhazsKKworCWNhc2UgMjoJCS8vIDEwTWIgICBGdWxsLUR1cGxleAorCQlwQWRhcHRlci0+QWlGb3JjZVNwZWVkID0gMTA7CisJCXBBZGFwdGVyLT5BaUZvcmNlRHB4ID0gMjsKKwkJYnJlYWs7CisKKwljYXNlIDM6CQkvLyAxMDBNYiAgSGFsZi1EdXBsZXgKKwkJcEFkYXB0ZXItPkFpRm9yY2VTcGVlZCA9IDEwMDsKKwkJcEFkYXB0ZXItPkFpRm9yY2VEcHggPSAxOworCQlicmVhazsKKworCWNhc2UgNDoJCS8vIDEwME1iICBGdWxsLUR1cGxleAorCQlwQWRhcHRlci0+QWlGb3JjZVNwZWVkID0gMTAwOworCQlwQWRhcHRlci0+QWlGb3JjZURweCA9IDI7CisJCWJyZWFrOworCisJY2FzZSA1OgkJLy8gMTAwME1iIEZ1bGwtRHVwbGV4CisJCXBBZGFwdGVyLT5BaUZvcmNlU3BlZWQgPSAxMDAwOworCQlwQWRhcHRlci0+QWlGb3JjZURweCA9IDI7CisJCWJyZWFrOworCX0KKworCURCR19MRUFWRShldDEzMXhfZGJnaW5mbyk7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZXQxMzF4L2V0MTMxeF9jb25maWcuaCBiL2RyaXZlcnMvc3RhZ2luZy9ldDEzMXgvZXQxMzF4X2NvbmZpZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY0MmMwZjYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvZXQxMzF4L2V0MTMxeF9jb25maWcuaApAQCAtMCwwICsxLDY3IEBACisvKgorICogQWdlcmUgU3lzdGVtcyBJbmMuCisgKiAxMC8xMDAvMTAwMCBCYXNlLVQgRXRoZXJuZXQgRHJpdmVyIGZvciB0aGUgRVQxMzAxIGFuZCBFVDEzMXggc2VyaWVzIE1BQ3MKKyAqCisgKiBDb3B5cmlnaHQgqSAyMDA1IEFnZXJlIFN5c3RlbXMgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICAgaHR0cDovL3d3dy5hZ2VyZS5jb20KKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIGV0MTMxeF9jb25maWcuaCAtIERlZmluZXMsIHN0cnVjdHMsIGVudW1zLCBwcm90b3R5cGVzLCBldGMuIHRvIHN1cHBvcnQKKyAqICAgICAgICAgICAgICAgICAgIGV0MTMxeF9jb25maWcuYworICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogU09GVFdBUkUgTElDRU5TRQorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgcHJvdmlkZWQgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIHRlcm1zIGFuZCBjb25kaXRpb25zLAorICogd2hpY2ggeW91IHNob3VsZCByZWFkIGNhcmVmdWxseSBiZWZvcmUgdXNpbmcgdGhlIHNvZnR3YXJlLiAgVXNpbmcgdGhpcworICogc29mdHdhcmUgaW5kaWNhdGVzIHlvdXIgYWNjZXB0YW5jZSBvZiB0aGVzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucy4gIElmIHlvdSBkbworICogbm90IGFncmVlIHdpdGggdGhlc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMsIGRvIG5vdCB1c2UgdGhlIHNvZnR3YXJlLgorICoKKyAqIENvcHlyaWdodCCpIDIwMDUgQWdlcmUgU3lzdGVtcyBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIG9yIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb25zLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMKKyAqICAgIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBEaXNjbGFpbWVyIGFzIGNvbW1lbnRzIGluIHRoZSBjb2RlIGFzCisgKiAgICB3ZWxsIGFzIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiAuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAqICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIERpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyAqICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIC4gTmVpdGhlciB0aGUgbmFtZSBvZiBBZ2VyZSBTeXN0ZW1zIEluYy4gbm9yIHRoZSBuYW1lcyBvZiB0aGUgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIERpc2NsYWltZXIKKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIJNBUyBJU5QgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywKKyAqIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBJTkZSSU5HRU1FTlQgQU5EIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBBTlkKKyAqIFVTRSwgTU9ESUZJQ0FUSU9OIE9SIERJU1RSSUJVVElPTiBPRiBUSElTIFNPRlRXQVJFIElTIFNPTEVMWSBBVCBUSEUgVVNFUlMgT1dOCisgKiBSSVNLLiBJTiBOTyBFVkVOVCBTSEFMTCBBR0VSRSBTWVNURU1TIElOQy4gT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSAorICogREFNQUdFLgorICoKKyAqLworCisjaWZuZGVmIF9fRVQxMzFYX0NPTkZJR19IX18KKyNkZWZpbmUgX19FVDEzMVhfQ09ORklHX0hfXworCisvKiBGb3J3YXJkIGRlY2xhcmF0aW9uIG9mIHRoZSBwcml2YXRlIGFkYXB0ZXIgc3RydWN0dXJlICovCitzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXI7CisKK3ZvaWQgZXQxMzF4X2NvbmZpZ19wYXJzZShzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKmFkYXB0ZXIpOworCisjZW5kaWYgLyogX19FVDEzMVhfQ09ORklHX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2V0MTMxeC9ldDEzMXhfZGVidWcuYyBiL2RyaXZlcnMvc3RhZ2luZy9ldDEzMXgvZXQxMzF4X2RlYnVnLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWVlNWJjZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ldDEzMXgvZXQxMzF4X2RlYnVnLmMKQEAgLTAsMCArMSwyMTggQEAKKy8qCisgKiBBZ2VyZSBTeXN0ZW1zIEluYy4KKyAqIDEwLzEwMC8xMDAwIEJhc2UtVCBFdGhlcm5ldCBEcml2ZXIgZm9yIHRoZSBFVDEzMDEgYW5kIEVUMTMxeCBzZXJpZXMgTUFDcworICoKKyAqIENvcHlyaWdodCCpIDIwMDUgQWdlcmUgU3lzdGVtcyBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogICBodHRwOi8vd3d3LmFnZXJlLmNvbQorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogZXQxMzF4X2RlYnVnLmMgLSBSb3V0aW5lcyB1c2VkIGZvciBkZWJ1Z2dpbmcuCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBTT0ZUV0FSRSBMSUNFTlNFCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBwcm92aWRlZCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgdGVybXMgYW5kIGNvbmRpdGlvbnMsCisgKiB3aGljaCB5b3Ugc2hvdWxkIHJlYWQgY2FyZWZ1bGx5IGJlZm9yZSB1c2luZyB0aGUgc29mdHdhcmUuICBVc2luZyB0aGlzCisgKiBzb2Z0d2FyZSBpbmRpY2F0ZXMgeW91ciBhY2NlcHRhbmNlIG9mIHRoZXNlIHRlcm1zIGFuZCBjb25kaXRpb25zLiAgSWYgeW91IGRvCisgKiBub3QgYWdyZWUgd2l0aCB0aGVzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucywgZG8gbm90IHVzZSB0aGUgc29mdHdhcmUuCisgKgorICogQ29weXJpZ2h0IKkgMjAwNSBBZ2VyZSBTeXN0ZW1zIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ugb3IgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbnMsIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiAuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcworICogICAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIERpc2NsYWltZXIgYXMgY29tbWVudHMgaW4gdGhlIGNvZGUgYXMKKyAqICAgIHdlbGwgYXMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIC4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICogICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgRGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgorICogICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogLiBOZWl0aGVyIHRoZSBuYW1lIG9mIEFnZXJlIFN5c3RlbXMgSW5jLiBub3IgdGhlIG5hbWVzIG9mIHRoZSBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogRGlzY2xhaW1lcgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgk0FTIElTlCBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLAorICogSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIElORlJJTkdFTUVOVCBBTkQgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIEFOWQorICogVVNFLCBNT0RJRklDQVRJT04gT1IgRElTVFJJQlVUSU9OIE9GIFRISVMgU09GVFdBUkUgSVMgU09MRUxZIEFUIFRIRSBVU0VSUyBPV04KKyAqIFJJU0suIElOIE5PIEVWRU5UIFNIQUxMIEFHRVJFIFNZU1RFTVMgSU5DLiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNICisgKiBEQU1BR0UuCisgKgorICovCisKKyNpZmRlZiBDT05GSUdfRVQxMzFYX0RFQlVHCisKKyNpbmNsdWRlICJldDEzMXhfdmVyc2lvbi5oIgorI2luY2x1ZGUgImV0MTMxeF9kZWJ1Zy5oIgorI2luY2x1ZGUgImV0MTMxeF9kZWZzLmgiCisKKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKworI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvcHRyYWNlLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2N0eXBlLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbi5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgorI2luY2x1ZGUgPGFzbS9iaXRvcHMuaD4KKworI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CisjaW5jbHVkZSA8bGludXgvaWZfYXJwLmg+CisjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CisjaW5jbHVkZSA8bGludXgvcmFuZG9tLmg+CisKKyNpbmNsdWRlICJldDEzMTBfcGh5LmgiCisjaW5jbHVkZSAiZXQxMzEwX3BtLmgiCisjaW5jbHVkZSAiZXQxMzEwX2phZ2NvcmUuaCIKKworI2luY2x1ZGUgImV0MTMxeF9hZGFwdGVyLmgiCisjaW5jbHVkZSAiZXQxMzF4X25ldGRldi5oIgorI2luY2x1ZGUgImV0MTMxeF9jb25maWcuaCIKKyNpbmNsdWRlICJldDEzMXhfaXNyLmgiCisKKyNpbmNsdWRlICJldDEzMTBfYWRkcmVzc19tYXAuaCIKKyNpbmNsdWRlICJldDEzMTBfamFnY29yZS5oIgorI2luY2x1ZGUgImV0MTMxMF90eC5oIgorI2luY2x1ZGUgImV0MTMxMF9yeC5oIgorI2luY2x1ZGUgImV0MTMxMF9tYWMuaCIKKworLyogRGF0YSBmb3IgZGVidWdnaW5nIGZhY2lsaXRpZXMgKi8KK2V4dGVybiBkYmdfaW5mb190ICpldDEzMXhfZGJnaW5mbzsKKworLyoqCisgKiBEdW1wVHhRdWV1ZUNvbnRlbnRzIC0gRHVtcCBvdXQgdGhlIHR4IHF1ZXVlIGFuZCB0aGUgc2hhZG93IHBvaW50ZXJzCisgKiBAcEFkYXB0ZXI6IHBvaW50ZXIgdG8gb3VyIGFkYXB0ZXIgc3RydWN0dXJlCisgKi8KK3ZvaWQgRHVtcFR4UXVldWVDb250ZW50cyhpbnQgZGJnTHZsLCBzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKnBBZGFwdGVyKQoreworCU1NQ190IF9faW9tZW0gKm1tYyA9ICZwQWRhcHRlci0+Q1NSQWRkcmVzcy0+bW1jOworCXVpbnQzMl90IFR4UXVldWVBZGRyOworCisJaWYgKERCR19GTEFHUyhldDEzMXhfZGJnaW5mbykgJiBkYmdMdmwpIHsKKwkJZm9yIChUeFF1ZXVlQWRkciA9IDB4MjAwOyBUeFF1ZXVlQWRkciA8IDB4M2ZmOyBUeFF1ZXVlQWRkcisrKSB7CisJCQlNTUNfU1JBTV9BQ0NFU1NfdCBzcmFtX2FjY2VzczsKKworCQkJc3JhbV9hY2Nlc3MudmFsdWUgPSByZWFkbCgmbW1jLT5zcmFtX2FjY2Vzcy52YWx1ZSk7CisJCQlzcmFtX2FjY2Vzcy5iaXRzLnJlcV9hZGRyID0gVHhRdWV1ZUFkZHI7CisJCQlzcmFtX2FjY2Vzcy5iaXRzLnJlcV9hY2Nlc3MgPSAxOworCQkJd3JpdGVsKHNyYW1fYWNjZXNzLnZhbHVlLCAmbW1jLT5zcmFtX2FjY2Vzcy52YWx1ZSk7CisKKwkJCURCR19QUklOVCgiQWRkciAweCV4LCBBY2Nlc3MgMHglMDh4XHQiCisJCQkJICAiVmFsdWUgMSAweCUwOHgsIFZhbHVlIDIgMHglMDh4LCAiCisJCQkJICAiVmFsdWUgMyAweCUwOHgsIFZhbHVlIDQgMHglMDh4LCBcbiIsCisJCQkJICBUeFF1ZXVlQWRkciwKKwkJCQkgIHJlYWRsKCZtbWMtPnNyYW1fYWNjZXNzLnZhbHVlKSwKKwkJCQkgIHJlYWRsKCZtbWMtPnNyYW1fd29yZDEpLAorCQkJCSAgcmVhZGwoJm1tYy0+c3JhbV93b3JkMiksCisJCQkJICByZWFkbCgmbW1jLT5zcmFtX3dvcmQzKSwKKwkJCQkgIHJlYWRsKCZtbWMtPnNyYW1fd29yZDQpKTsKKwkJfQorCisJCURCR19QUklOVCgiU2hhZG93IFBvaW50ZXJzIDB4JTA4eFxuIiwKKwkJCSAgcmVhZGwoJnBBZGFwdGVyLT5DU1JBZGRyZXNzLT50eG1hYy5zaGFkb3dfcHRyLnZhbHVlKSk7CisJfQorfQorCisvKioKKyAqIER1bXBEZXZpY2VCbG9jaworICogQHBBZGFwdGVyOiBwb2ludGVyIHRvIG91ciBhZGFwdGVyCisgKgorICogRHVtcHMgdGhlIGZpcnN0IDY0IHJlZ3Mgb2YgZWFjaCBibG9jayBvZiB0aGUgZXQtMTMxMCAoZWFjaCBibG9jayBpcworICogbWFwcGVkIHRvIGEgbmV3IHBhZ2UsIGVhY2ggcGFnZSBpcyA0MDk2IGJ5dGVzKS4KKyAqLworI2RlZmluZSBOVU1fQkxPQ0tTIDgKK3ZvaWQgRHVtcERldmljZUJsb2NrKGludCBkYmdMdmwsIHN0cnVjdCBldDEzMXhfYWRhcHRlciAqcEFkYXB0ZXIsCisJCSAgICAgdWludDMyX3QgQmxvY2spCit7CisJdWludDMyX3QgQWRkcmVzczEsIEFkZHJlc3MyOworCXVpbnQzMl90IF9faW9tZW0gKkJpZ0RldmljZVBvaW50ZXIgPQorCQkodWludDMyX3QgX19pb21lbSAqKSBwQWRhcHRlci0+Q1NSQWRkcmVzczsKKwljb25zdCBjaGFyICpCbG9ja05hbWVzW05VTV9CTE9DS1NdID0geworCQkiR2xvYmFsIiwgIlR4IERNQSIsICJSeCBETUEiLCAiVHggTUFDIiwKKwkJIlJ4IE1BQyIsICJNQUMiLCAiTUFDIFN0YXQiLCAiTU1DIgorCX07CisKKwkvKiBPdXRwdXQgdGhlIGRlYnVnIGNvdW50ZXJzIHRvIHRoZSBkZWJ1ZyB0ZXJtaW5hbCAqLworCWlmIChEQkdfRkxBR1MoZXQxMzF4X2RiZ2luZm8pICYgZGJnTHZsKSB7CisJCURCR19QUklOVCgiJXMgYmxvY2tcbiIsIEJsb2NrTmFtZXNbQmxvY2tdKTsKKwkJQmlnRGV2aWNlUG9pbnRlciArPSBCbG9jayAqIDEwMjQ7CisJCWZvciAoQWRkcmVzczEgPSAwOyBBZGRyZXNzMSA8IDg7IEFkZHJlc3MxKyspIHsKKwkJCWZvciAoQWRkcmVzczIgPSAwOyBBZGRyZXNzMiA8IDg7IEFkZHJlc3MyKyspIHsKKwkJCQlpZiAoQmxvY2sgPT0gMCAmJgorCQkJCSAgICAoQWRkcmVzczEgKiA4ICsgQWRkcmVzczIpID09IDYpIHsKKwkJCQkJREJHX1BSSU5UKCIgIElTUiAgICAsICIpOworCQkJCX0gZWxzZSB7CisJCQkJCURCR19QUklOVCgiMHglMDh4LCAiLAorCQkJCQkJICByZWFkbChCaWdEZXZpY2VQb2ludGVyKyspKTsKKwkJCQl9CisJCQl9CisJCQlEQkdfUFJJTlQoIlxuIik7CisJCX0KKwkJREJHX1BSSU5UKCJcbiIpOworCX0KK30KKworLyoqCisgKiBEdW1wRGV2aWNlUmVnCisgKiBAcEFkYXB0ZXI6IHBvaW50ZXIgdG8gb3VyIGFkYXB0ZXIKKyAqCisgKiBEdW1wcyB0aGUgZmlyc3QgNjQgcmVncyBvZiBlYWNoIGJsb2NrIG9mIHRoZSBldC0xMzEwIChlYWNoIGJsb2NrIGlzCisgKiBtYXBwZWQgdG8gYSBuZXcgcGFnZSwgZWFjaCBwYWdlIGlzIDQwOTYgYnl0ZXMpLgorICovCit2b2lkIER1bXBEZXZpY2VSZWcoaW50IGRiZ0x2bCwgc3RydWN0IGV0MTMxeF9hZGFwdGVyICpwQWRhcHRlcikKK3sKKwl1aW50MzJfdCBBZGRyZXNzMSwgQWRkcmVzczI7CisJdWludDMyX3QgQmxvY2s7CisJdWludDMyX3QgX19pb21lbSAqQmlnRGV2aWNlUG9pbnRlciA9CisJCSh1aW50MzJfdCBfX2lvbWVtICopIHBBZGFwdGVyLT5DU1JBZGRyZXNzOworCXVpbnQzMl90IF9faW9tZW0gKlBvaW50ZXI7CisJY29uc3QgY2hhciAqQmxvY2tOYW1lc1tOVU1fQkxPQ0tTXSA9IHsKKwkJIkdsb2JhbCIsICJUeCBETUEiLCAiUnggRE1BIiwgIlR4IE1BQyIsCisJCSJSeCBNQUMiLCAiTUFDIiwgIk1BQyBTdGF0IiwgIk1NQyIKKwl9OworCisJLyogT3V0cHV0IHRoZSBkZWJ1ZyBjb3VudGVycyB0byB0aGUgZGVidWcgdGVybWluYWwgKi8KKwlpZiAoREJHX0ZMQUdTKGV0MTMxeF9kYmdpbmZvKSAmIGRiZ0x2bCkgeworCQlmb3IgKEJsb2NrID0gMDsgQmxvY2sgPCBOVU1fQkxPQ0tTOyBCbG9jaysrKSB7CisJCQlEQkdfUFJJTlQoIiVzIGJsb2NrXG4iLCBCbG9ja05hbWVzW0Jsb2NrXSk7CisJCQlQb2ludGVyID0gQmlnRGV2aWNlUG9pbnRlciArIChCbG9jayAqIDEwMjQpOworCisJCQlmb3IgKEFkZHJlc3MxID0gMDsgQWRkcmVzczEgPCA4OyBBZGRyZXNzMSsrKSB7CisJCQkJZm9yIChBZGRyZXNzMiA9IDA7IEFkZHJlc3MyIDwgODsgQWRkcmVzczIrKykgeworCQkJCQlEQkdfUFJJTlQoIjB4JTA4eCwgIiwKKwkJCQkJCSAgcmVhZGwoUG9pbnRlcisrKSk7CisJCQkJfQorCQkJCURCR19QUklOVCgiXG4iKTsKKwkJCX0KKwkJCURCR19QUklOVCgiXG4iKTsKKwkJfQorCX0KK30KKworI2VuZGlmIC8vIENPTkZJR19FVDEzMVhfREVCVUcKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ldDEzMXgvZXQxMzF4X2RlYnVnLmggYi9kcml2ZXJzL3N0YWdpbmcvZXQxMzF4L2V0MTMxeF9kZWJ1Zy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRhYjYwODAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvZXQxMzF4L2V0MTMxeF9kZWJ1Zy5oCkBAIC0wLDAgKzEsMjAxIEBACisvKgorICogQWdlcmUgU3lzdGVtcyBJbmMuCisgKiAxMC8xMDAvMTAwMCBCYXNlLVQgRXRoZXJuZXQgRHJpdmVyIGZvciB0aGUgRVQxMzAxIGFuZCBFVDEzMXggc2VyaWVzIE1BQ3MKKyAqCisgKiBDb3B5cmlnaHQgqSAyMDA1IEFnZXJlIFN5c3RlbXMgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICAgaHR0cDovL3d3dy5hZ2VyZS5jb20KKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIGV0MTMxeF9kZWJ1Zy5oIC0gRGVmaW5lcywgc3RydWN0cywgZW51bXMsIHByb3RvdHlwZXMsIGV0Yy4gdXNlZCBmb3IKKyAqICAgICAgICAgICAgICAgICAgb3V0cHV0dGluZyBkZWJ1ZyBtZXNzYWdlcyB0byB0aGUgc3lzdGVtIGxvZ2dpbmcgZmFjaWxpdHkKKyAqICAgICAgICAgICAgICAgICAgKGtzeXNsb2dkKQorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogU09GVFdBUkUgTElDRU5TRQorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgcHJvdmlkZWQgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIHRlcm1zIGFuZCBjb25kaXRpb25zLAorICogd2hpY2ggeW91IHNob3VsZCByZWFkIGNhcmVmdWxseSBiZWZvcmUgdXNpbmcgdGhlIHNvZnR3YXJlLiAgVXNpbmcgdGhpcworICogc29mdHdhcmUgaW5kaWNhdGVzIHlvdXIgYWNjZXB0YW5jZSBvZiB0aGVzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucy4gIElmIHlvdSBkbworICogbm90IGFncmVlIHdpdGggdGhlc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMsIGRvIG5vdCB1c2UgdGhlIHNvZnR3YXJlLgorICoKKyAqIENvcHlyaWdodCCpIDIwMDUgQWdlcmUgU3lzdGVtcyBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIG9yIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb25zLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMKKyAqICAgIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBEaXNjbGFpbWVyIGFzIGNvbW1lbnRzIGluIHRoZSBjb2RlIGFzCisgKiAgICB3ZWxsIGFzIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiAuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAqICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIERpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyAqICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIC4gTmVpdGhlciB0aGUgbmFtZSBvZiBBZ2VyZSBTeXN0ZW1zIEluYy4gbm9yIHRoZSBuYW1lcyBvZiB0aGUgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIERpc2NsYWltZXIKKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIJNBUyBJU5QgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywKKyAqIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBJTkZSSU5HRU1FTlQgQU5EIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBBTlkKKyAqIFVTRSwgTU9ESUZJQ0FUSU9OIE9SIERJU1RSSUJVVElPTiBPRiBUSElTIFNPRlRXQVJFIElTIFNPTEVMWSBBVCBUSEUgVVNFUlMgT1dOCisgKiBSSVNLLiBJTiBOTyBFVkVOVCBTSEFMTCBBR0VSRSBTWVNURU1TIElOQy4gT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSAorICogREFNQUdFLgorICoKKyAqLworCisjaWZuZGVmIF9fRVQxMzFYX0RCR19IX18KKyNkZWZpbmUgX19FVDEzMVhfREJHX0hfXworCisvKiBEZWZpbmUgTWFza3MgZm9yIGRlYnVnZ2luZyB0eXBlcy9sZXZlbHMgKi8KKyNkZWZpbmUgREJHX0VSUk9SX09OICAgICAgICAweDAwMDAwMDAxTAorI2RlZmluZSBEQkdfV0FSTklOR19PTiAgICAgIDB4MDAwMDAwMDJMCisjZGVmaW5lIERCR19OT1RJQ0VfT04gICAgICAgMHgwMDAwMDAwNEwKKyNkZWZpbmUgREJHX1RSQUNFX09OICAgICAgICAweDAwMDAwMDA4TAorI2RlZmluZSBEQkdfVkVSQk9TRV9PTiAgICAgIDB4MDAwMDAwMTBMCisjZGVmaW5lIERCR19QQVJBTV9PTiAgICAgICAgMHgwMDAwMDAyMEwKKyNkZWZpbmUgREJHX0JSRUFLX09OICAgICAgICAweDAwMDAwMDQwTAorI2RlZmluZSBEQkdfUlhfT04gICAgICAgICAgIDB4MDAwMDAxMDBMCisjZGVmaW5lIERCR19UWF9PTiAgICAgICAgICAgMHgwMDAwMDIwMEwKKworI2lmZGVmIENPTkZJR19FVDEzMVhfREVCVUcKKworLyoKKyAqIFNldCB0aGUgbGV2ZWwgb2YgZGVidWdnaW5nIGlmIG5vdCBkb25lIHdpdGggYSBwcmVwcm9jZXNzb3IgZGVmaW5lLiBTZWUKKyAqIGV0MTMxeF9tYWluLmMsIGZ1bmN0aW9uIGV0MTMxeF9pbml0X21vZHVsZSgpIGZvciBob3cgdGhlIGRlYnVnIGxldmVsCisgKiB0cmFuc2xhdGVzIGludG8gdGhlIHR5cGVzIG9mIG1lc3NhZ2VzIGRpc3BsYXllZC4KKyAqLworI2lmbmRlZiBEQkdfTFZMCisjZGVmaW5lIERCR19MVkwJMworI2VuZGlmIC8qIERCR19MVkwgKi8KKworI2RlZmluZSBEQkdfREVGQVVMVFMJCShEQkdfRVJST1JfT04gfCBEQkdfV0FSTklOR19PTiB8IERCR19CUkVBS19PTiApCisKKyNkZWZpbmUgREJHX0ZMQUdTKEEpCQkoQSktPmRiZ0ZsYWdzCisjZGVmaW5lIERCR19OQU1FKEEpCQkoQSktPmRiZ05hbWUKKyNkZWZpbmUgREJHX0xFVkVMKEEpCQkoQSktPmRiZ0xldmVsCisKKyNpZm5kZWYgREJHX1BSSU5UCisjZGVmaW5lIERCR19QUklOVChTLi4uKQkJcHJpbnRrKEtFUk5fREVCVUcgUykKKyNlbmRpZiAvKiBEQkdfUFJJTlQgKi8KKworI2lmbmRlZiBEQkdfUFJJTlRDCisjZGVmaW5lIERCR19QUklOVEMoUy4uLikJcHJpbnRrKFMpCisjZW5kaWYgLyogREJHX1BSSU5UQyAqLworCisjaWZuZGVmIERCR19UUkFQCisjZGVmaW5lIERCR19UUkFQCQl7fQkvKiBCVUcoKSAqLworI2VuZGlmIC8qIERCR19UUkFQICovCisKKyNkZWZpbmUgX0VOVEVSX1NUUgkiPj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+PiIKKyNkZWZpbmUgX0xFQVZFX1NUUgkiPDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PCIKKworI2RlZmluZSBfREJHX0VOVEVSKEEpCXByaW50ayhLRVJOX0RFQlVHICIlczolLipzOiVzXG4iLCBEQkdfTkFNRShBKSwJXAorCQkJCSsrREJHX0xFVkVMKEEpLCBfRU5URVJfU1RSLCBfX2Z1bmNfXykKKyNkZWZpbmUgX0RCR19MRUFWRShBKQlwcmludGsoS0VSTl9ERUJVRyAiJXM6JS4qczolc1xuIiwgREJHX05BTUUoQSksCVwKKwkJCQlEQkdfTEVWRUwoQSktLSwgX0xFQVZFX1NUUiwgX19mdW5jX18pCisKKyNkZWZpbmUgREJHX0VOVEVSKEEpICAgICAgICB7aWYgKERCR19GTEFHUyhBKSAmIERCR19UUkFDRV9PTikgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfREJHX0VOVEVSKEEpO30KKworI2RlZmluZSBEQkdfTEVBVkUoQSkgICAgICAgIHtpZiAoREJHX0ZMQUdTKEEpICYgREJHX1RSQUNFX09OKSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9EQkdfTEVBVkUoQSk7fQorCisjZGVmaW5lIERCR19QQVJBTShBLE4sRixTLi4uKSAgIHtpZiAoREJHX0ZMQUdTKEEpICYgREJHX1BBUkFNX09OKSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEQkdfUFJJTlQoIiAgJXMgLS0gIkYiXG4iLE4sUyk7fQorCisjZGVmaW5lIERCR19FUlJPUihBLFMuLi4pCVwKKwlpZiAoREJHX0ZMQUdTKEEpICYgREJHX0VSUk9SX09OKSB7CQkJCVwKKwkJREJHX1BSSU5UKCIlczpFUlJPUjolcyAiLERCR19OQU1FKEEpLCBfX2Z1bmNfXyk7CVwKKwkJREJHX1BSSU5UQyhTKTsJCQkJCQlcCisJCURCR19UUkFQOwkJCQkJCVwKKwl9CisKKyNkZWZpbmUgREJHX1dBUk5JTkcoQSxTLi4uKSB7aWYgKERCR19GTEFHUyhBKSAmIERCR19XQVJOSU5HX09OKSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtEQkdfUFJJTlQoIiVzOldBUk5JTkc6JXMgIixEQkdfTkFNRShBKSxfX2Z1bmNfXyk7REJHX1BSSU5UQyhTKTt9fQorCisjZGVmaW5lIERCR19OT1RJQ0UoQSxTLi4uKSAge2lmIChEQkdfRkxBR1MoQSkgJiBEQkdfTk9USUNFX09OKSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtEQkdfUFJJTlQoIiVzOk5PVElDRTolcyAiLERCR19OQU1FKEEpLF9fZnVuY19fKTtEQkdfUFJJTlRDKFMpO319CisKKyNkZWZpbmUgREJHX1RSQUNFKEEsUy4uLikgICB7aWYgKERCR19GTEFHUyhBKSAmIERCR19UUkFDRV9PTikgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7REJHX1BSSU5UKCIlczpUUkFDRTolcyAiLERCR19OQU1FKEEpLCBfX2Z1bmNfXyk7REJHX1BSSU5UQyhTKTt9fQorCisjZGVmaW5lIERCR19WRVJCT1NFKEEsUy4uLikge2lmIChEQkdfRkxBR1MoQSkgJiBEQkdfVkVSQk9TRV9PTikgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7REJHX1BSSU5UKCIlczpWRVJCT1NFOiVzICIsREJHX05BTUUoQSksIF9fZnVuY19fKTtEQkdfUFJJTlRDKFMpO319CisKKyNkZWZpbmUgREJHX1JYKEEsUy4uLikgICAgICB7aWYgKERCR19GTEFHUyhBKSAmIERCR19SWF9PTikgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7REJHX1BSSU5UKFMpO319CisKKyNkZWZpbmUgREJHX1JYX0VOVEVSKEEpICAgICB7aWYgKERCR19GTEFHUyhBKSAmIERCR19SWF9PTikgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfREJHX0VOVEVSKEEpO30KKworI2RlZmluZSBEQkdfUlhfTEVBVkUoQSkgICAgIHtpZiAoREJHX0ZMQUdTKEEpICYgREJHX1JYX09OKSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9EQkdfTEVBVkUoQSk7fQorCisjZGVmaW5lIERCR19UWChBLFMuLi4pICAgICAge2lmIChEQkdfRkxBR1MoQSkgJiBEQkdfVFhfT04pIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge0RCR19QUklOVChTKTt9fQorCisjZGVmaW5lIERCR19UWF9FTlRFUihBKSAgICAge2lmIChEQkdfRkxBR1MoQSkgJiBEQkdfVFhfT04pIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0RCR19FTlRFUihBKTt9CisKKyNkZWZpbmUgREJHX1RYX0xFQVZFKEEpICAgICB7aWYgKERCR19GTEFHUyhBKSAmIERCR19UWF9PTikgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfREJHX0xFQVZFKEEpO30KKworI2RlZmluZSBEQkdfQVNTRVJUKEMpICAgICAgIHtpZiAoIShDKSkgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7REJHX1BSSU5UKCJBU1NFUlQoJXMpIC0tICVzIyVkICglcylcbiIsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICNDLF9fRklMRV9fLF9fTElORV9fLF9fZnVuY19fKTsgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEQkdfVFJBUDt9fQorI2RlZmluZSBTVEFUSUMKKwordHlwZWRlZiBzdHJ1Y3QgeworCWNoYXIgKmRiZ05hbWU7CisJaW50IGRiZ0xldmVsOworCXVuc2lnbmVkIGxvbmcgZGJnRmxhZ3M7Cit9IGRiZ19pbmZvX3Q7CisKKyNlbHNlIC8qIENPTkZJR19FVDEzMVhfREVCVUcgKi8KKworI2RlZmluZSBEQkdfREVGTgorI2RlZmluZSBEQkdfVFJBUAorI2RlZmluZSBEQkdfUFJJTlQoUy4uLikKKyNkZWZpbmUgREJHX0VOVEVSKEEpCisjZGVmaW5lIERCR19MRUFWRShBKQorI2RlZmluZSBEQkdfUEFSQU0oQSxOLEYsUy4uLikKKyNkZWZpbmUgREJHX0VSUk9SKEEsUy4uLikKKyNkZWZpbmUgREJHX1dBUk5JTkcoQSxTLi4uKQorI2RlZmluZSBEQkdfTk9USUNFKEEsUy4uLikKKyNkZWZpbmUgREJHX1RSQUNFKEEsUy4uLikKKyNkZWZpbmUgREJHX1ZFUkJPU0UoQSxTLi4uKQorI2RlZmluZSBEQkdfUlgoQSxTLi4uKQorI2RlZmluZSBEQkdfUlhfRU5URVIoQSkKKyNkZWZpbmUgREJHX1JYX0xFQVZFKEEpCisjZGVmaW5lIERCR19UWChBLFMuLi4pCisjZGVmaW5lIERCR19UWF9FTlRFUihBKQorI2RlZmluZSBEQkdfVFhfTEVBVkUoQSkKKyNkZWZpbmUgREJHX0FTU0VSVChDKQorI2RlZmluZSBTVEFUSUMgc3RhdGljCisKKyNlbmRpZiAvKiBDT05GSUdfRVQxMzFYX0RFQlVHICovCisKKy8qIEZvcndhcmQgZGVjbGFyYXRpb24gb2YgdGhlIHByaXZhdGUgYWRhcHRlciBzdHJ1Y3R1cmUgKi8KK3N0cnVjdCBldDEzMXhfYWRhcHRlcjsKKwordm9pZCBEdW1wVHhRdWV1ZUNvbnRlbnRzKGludCBkYmdMdmwsIHN0cnVjdCBldDEzMXhfYWRhcHRlciAqYWRhcHRlcik7Cit2b2lkIER1bXBEZXZpY2VCbG9jayhpbnQgZGJnTHZsLCBzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKmFkYXB0ZXIsCisJCSAgICAgdW5zaWduZWQgaW50IEJsb2NrKTsKK3ZvaWQgRHVtcERldmljZVJlZyhpbnQgZGJnTHZsLCBzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKmFkYXB0ZXIpOworCisjZW5kaWYgLyogX19FVDEzMVhfREJHX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2V0MTMxeC9ldDEzMXhfZGVmcy5oIGIvZHJpdmVycy9zdGFnaW5nL2V0MTMxeC9ldDEzMXhfZGVmcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg4NmNiNzgKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvZXQxMzF4L2V0MTMxeF9kZWZzLmgKQEAgLTAsMCArMSwxMjggQEAKKy8qCisgKiBBZ2VyZSBTeXN0ZW1zIEluYy4KKyAqIDEwLzEwMC8xMDAwIEJhc2UtVCBFdGhlcm5ldCBEcml2ZXIgZm9yIHRoZSBFVDEzMDEgYW5kIEVUMTMxeCBzZXJpZXMgTUFDcworICoKKyAqIENvcHlyaWdodCCpIDIwMDUgQWdlcmUgU3lzdGVtcyBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogICBodHRwOi8vd3d3LmFnZXJlLmNvbQorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogZXQxMzF4X2RlZnMuaCAtIERlZmluZXMsIHN0cnVjdHMsIGVudW1zLCBwcm90b3R5cGVzLCBldGMuIHRvIGFzc2lzdCB3aXRoIE9TCisgKiAgICAgICAgICAgICAgICAgY29tcGF0aWJpbGl0eQorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogU09GVFdBUkUgTElDRU5TRQorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgcHJvdmlkZWQgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIHRlcm1zIGFuZCBjb25kaXRpb25zLAorICogd2hpY2ggeW91IHNob3VsZCByZWFkIGNhcmVmdWxseSBiZWZvcmUgdXNpbmcgdGhlIHNvZnR3YXJlLiAgVXNpbmcgdGhpcworICogc29mdHdhcmUgaW5kaWNhdGVzIHlvdXIgYWNjZXB0YW5jZSBvZiB0aGVzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucy4gIElmIHlvdSBkbworICogbm90IGFncmVlIHdpdGggdGhlc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMsIGRvIG5vdCB1c2UgdGhlIHNvZnR3YXJlLgorICoKKyAqIENvcHlyaWdodCCpIDIwMDUgQWdlcmUgU3lzdGVtcyBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIG9yIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb25zLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMKKyAqICAgIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBEaXNjbGFpbWVyIGFzIGNvbW1lbnRzIGluIHRoZSBjb2RlIGFzCisgKiAgICB3ZWxsIGFzIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiAuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAqICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIERpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyAqICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIC4gTmVpdGhlciB0aGUgbmFtZSBvZiBBZ2VyZSBTeXN0ZW1zIEluYy4gbm9yIHRoZSBuYW1lcyBvZiB0aGUgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIERpc2NsYWltZXIKKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIJNBUyBJU5QgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywKKyAqIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBJTkZSSU5HRU1FTlQgQU5EIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBBTlkKKyAqIFVTRSwgTU9ESUZJQ0FUSU9OIE9SIERJU1RSSUJVVElPTiBPRiBUSElTIFNPRlRXQVJFIElTIFNPTEVMWSBBVCBUSEUgVVNFUlMgT1dOCisgKiBSSVNLLiBJTiBOTyBFVkVOVCBTSEFMTCBBR0VSRSBTWVNURU1TIElOQy4gT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSAorICogREFNQUdFLgorICoKKyAqLworCisjaWZuZGVmIF9fRVQxMzFYX0RFRlNfSF9fCisjZGVmaW5lIF9fRVQxMzFYX0RFRlNfSF9fCisKKy8qIFBhY2tldCBhbmQgaGVhZGVyIHNpemVzICovCisjZGVmaW5lIE5JQ19NSU5fUEFDS0VUX1NJWkUJNjAKKyNkZWZpbmUgTklDX0hFQURFUl9TSVpFCQlFVEhfSExFTgkvKiAxNCAqLworCisvKiBNdWx0aWNhc3QgbGlzdCBzaXplICovCisjZGVmaW5lIE5JQ19NQVhfTUNBU1RfTElTVAkxMjgKKworLyogU3VwcG9ydGVkIEZpbHRlcnMgKi8KKyNkZWZpbmUgRVQxMzFYX1BBQ0tFVF9UWVBFX0RJUkVDVEVECQkweDAwMDEKKyNkZWZpbmUgRVQxMzFYX1BBQ0tFVF9UWVBFX01VTFRJQ0FTVAkJMHgwMDAyCisjZGVmaW5lIEVUMTMxWF9QQUNLRVRfVFlQRV9CUk9BRENBU1QJCTB4MDAwNAorI2RlZmluZSBFVDEzMVhfUEFDS0VUX1RZUEVfUFJPTUlTQ1VPVVMJCTB4MDAwOAorI2RlZmluZSBFVDEzMVhfUEFDS0VUX1RZUEVfQUxMX01VTFRJQ0FTVAkweDAwMTAKKworLyogVHggVGltZW91dCAqLworI2RlZmluZSBFVDEzMVhfVFhfVElNRU9VVAkoMSAqIEhaKQorI2RlZmluZSBOSUNfU0VORF9IQU5HX1RIUkVTSE9MRAkwCisKKy8qIE1QX1RDQiBmbGFncyAqLworI2RlZmluZSBmTVBfREVTVF9NVUxUSQkJCTB4MDAwMDAwMDEKKyNkZWZpbmUgZk1QX0RFU1RfQlJPQUQJCQkweDAwMDAwMDAyCisKKy8qIE1QX0FEQVBURVIgZmxhZ3MgKi8KKyNkZWZpbmUgZk1QX0FEQVBURVJfUkVDVl9MT09LQVNJREUJMHgwMDAwMDAwNAorI2RlZmluZSBmTVBfQURBUFRFUl9JTlRFUlJVUFRfSU5fVVNFCTB4MDAwMDAwMDgKKyNkZWZpbmUgZk1QX0FEQVBURVJfU0VDT05EQVJZCQkweDAwMDAwMDEwCisKKy8qIE1QX1NIQVJFRCBmbGFncyAqLworI2RlZmluZSBmTVBfQURBUFRFUl9TSFVURE9XTgkJMHgwMDEwMDAwMAorI2RlZmluZSBmTVBfQURBUFRFUl9MT1dFUl9QT1dFUgkJMHgwMDIwMDAwMAorCisjZGVmaW5lIGZNUF9BREFQVEVSX05PTl9SRUNPVkVSX0VSUk9SCTB4MDA4MDAwMDAKKyNkZWZpbmUgZk1QX0FEQVBURVJfUkVTRVRfSU5fUFJPR1JFU1MJMHgwMTAwMDAwMAorI2RlZmluZSBmTVBfQURBUFRFUl9OT19DQUJMRQkJMHgwMjAwMDAwMAorI2RlZmluZSBmTVBfQURBUFRFUl9IQVJEV0FSRV9FUlJPUgkweDA0MDAwMDAwCisjZGVmaW5lIGZNUF9BREFQVEVSX1JFTU9WRV9JTl9QUk9HUkVTUwkweDA4MDAwMDAwCisjZGVmaW5lIGZNUF9BREFQVEVSX0hBTFRfSU5fUFJPR1JFU1MJMHgxMDAwMDAwMAorI2RlZmluZSBmTVBfQURBUFRFUl9MSU5LX0RFVEVDVElPTgkweDIwMDAwMDAwCisKKyNkZWZpbmUgZk1QX0FEQVBURVJfRkFJTF9TRU5EX01BU0sJMHgzZmYwMDAwMAorI2RlZmluZSBmTVBfQURBUFRFUl9OT1RfUkVBRFlfTUFTSwkweDNmZjAwMDAwCisKKy8qIFNvbWUgb2Zmc2V0cyBpbiBQQ0kgY29uZmlnIHNwYWNlIHRoYXQgYXJlIGFjdHVhbGx5IHVzZWQuICovCisjZGVmaW5lIEVUMTMxMF9QQ0lfUE1fQ0FQQUJJTElUWQkweDQwCisjZGVmaW5lIEVUMTMxMF9QQ0lfUE1fQ1NSCQkweDQ0CisjZGVmaW5lIEVUMTMxMF9QQ0lfTUFYX1BZTEQJCTB4NEMKKyNkZWZpbmUgRVQxMzEwX1BDSV9ERVZfQ1RSTAkJMHg1MAorI2RlZmluZSBFVDEzMTBfUENJX0RFVl9TVEFUCQkweDUyCisjZGVmaW5lIEVUMTMxMF9OTUlfRElTQUJMRQkJMHg2MQorI2RlZmluZSBFVDEzMTBfUENJX01BQ19BRERSRVNTCQkweEE0CisjZGVmaW5lIEVUMTMxMF9QQ0lfRUVQUk9NX1NUQVRVUwkweEIyCisjZGVmaW5lIEVUMTMxMF9QQ0lfUEhZX0lOREVYX1JFRwkweEI0CisjZGVmaW5lIEVUMTMxMF9QQ0lfQUNLX05BQ0sJCTB4QzAKKyNkZWZpbmUgRVQxMzEwX1BDSV9SRVBMQVkJCTB4QzIKKyNkZWZpbmUgRVQxMzEwX1BDSV9MMEwxTEFURU5DWQkJMHhDRgorI2RlZmluZSBFVDEzMTBfUENJX1NFTF9QSFlfQ1RSTAkJMHhFNAorI2RlZmluZSBFVDEzMTBfUENJX0FEVkFOQ0VEX0VSUgkJMHgxMDAKKworLyogUENJIFZlbmRvci9Qcm9kdWN0IElEcyAqLworI2RlZmluZSBFVDEzMVhfUENJX1ZFTkRPUl9JRAkJMHgxMUMxCS8vIEFnZXJlIFN5c3RlbXMKKyNkZWZpbmUgRVQxMzFYX1BDSV9ERVZJQ0VfSURfR0lHCTB4RUQwMAkvLyBFVDEzMTAgMTAwMCBCYXNlLVQKKyNkZWZpbmUgRVQxMzFYX1BDSV9ERVZJQ0VfSURfRkFTVAkweEVEMDEJLy8gRVQxMzEwIDEwMCAgQmFzZS1UCisKKy8qIERlZmluZSBvcmRlciBvZiBtYWduaXR1ZGUgY29udmVydGVyICovCisjZGVmaW5lIE5BTk9fSU5fQV9NSUNSTwkxMDAwCisKKyNlbmRpZiAvKiBfX0VUMTMxWF9ERUZTX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2V0MTMxeC9ldDEzMXhfaW5pdHBjaS5jIGIvZHJpdmVycy9zdGFnaW5nL2V0MTMxeC9ldDEzMXhfaW5pdHBjaS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjNmYxNzEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvZXQxMzF4L2V0MTMxeF9pbml0cGNpLmMKQEAgLTAsMCArMSwxMDQ2IEBACisvKgorICogQWdlcmUgU3lzdGVtcyBJbmMuCisgKiAxMC8xMDAvMTAwMCBCYXNlLVQgRXRoZXJuZXQgRHJpdmVyIGZvciB0aGUgRVQxMzAxIGFuZCBFVDEzMXggc2VyaWVzIE1BQ3MKKyAqCisgKiBDb3B5cmlnaHQgqSAyMDA1IEFnZXJlIFN5c3RlbXMgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICAgaHR0cDovL3d3dy5hZ2VyZS5jb20KKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIGV0MTMxeF9pbml0cGNpLmMgLSBSb3V0aW5lcyBhbmQgZGF0YSB1c2VkIHRvIHJlZ2lzdGVyIHRoZSBkcml2ZXIgd2l0aCB0aGUKKyAqICAgICAgICAgICAgICAgICAgICBQQ0kgKGFuZCBQQ0kgRXhwcmVzcykgc3Vic3lzdGVtLCBhcyB3ZWxsIGFzIGJhc2ljIGRyaXZlcgorICogICAgICAgICAgICAgICAgICAgIGluaXQgYW5kIHN0YXJ0dXAuCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBTT0ZUV0FSRSBMSUNFTlNFCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBwcm92aWRlZCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgdGVybXMgYW5kIGNvbmRpdGlvbnMsCisgKiB3aGljaCB5b3Ugc2hvdWxkIHJlYWQgY2FyZWZ1bGx5IGJlZm9yZSB1c2luZyB0aGUgc29mdHdhcmUuICBVc2luZyB0aGlzCisgKiBzb2Z0d2FyZSBpbmRpY2F0ZXMgeW91ciBhY2NlcHRhbmNlIG9mIHRoZXNlIHRlcm1zIGFuZCBjb25kaXRpb25zLiAgSWYgeW91IGRvCisgKiBub3QgYWdyZWUgd2l0aCB0aGVzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucywgZG8gbm90IHVzZSB0aGUgc29mdHdhcmUuCisgKgorICogQ29weXJpZ2h0IKkgMjAwNSBBZ2VyZSBTeXN0ZW1zIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ugb3IgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbnMsIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiAuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcworICogICAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIERpc2NsYWltZXIgYXMgY29tbWVudHMgaW4gdGhlIGNvZGUgYXMKKyAqICAgIHdlbGwgYXMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIC4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICogICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgRGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgorICogICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogLiBOZWl0aGVyIHRoZSBuYW1lIG9mIEFnZXJlIFN5c3RlbXMgSW5jLiBub3IgdGhlIG5hbWVzIG9mIHRoZSBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogRGlzY2xhaW1lcgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgk0FTIElTlCBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLAorICogSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIElORlJJTkdFTUVOVCBBTkQgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIEFOWQorICogVVNFLCBNT0RJRklDQVRJT04gT1IgRElTVFJJQlVUSU9OIE9GIFRISVMgU09GVFdBUkUgSVMgU09MRUxZIEFUIFRIRSBVU0VSUyBPV04KKyAqIFJJU0suIElOIE5PIEVWRU5UIFNIQUxMIEFHRVJFIFNZU1RFTVMgSU5DLiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNICisgKiBEQU1BR0UuCisgKgorICovCisKKyNpbmNsdWRlICJldDEzMXhfdmVyc2lvbi5oIgorI2luY2x1ZGUgImV0MTMxeF9kZWJ1Zy5oIgorI2luY2x1ZGUgImV0MTMxeF9kZWZzLmgiCisKKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKworI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvcHRyYWNlLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2N0eXBlLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbi5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgorI2luY2x1ZGUgPGFzbS9iaXRvcHMuaD4KKworI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CisjaW5jbHVkZSA8bGludXgvaWZfYXJwLmg+CisjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CisjaW5jbHVkZSA8bGludXgvcmFuZG9tLmg+CisKKyNpbmNsdWRlICJldDEzMTBfcGh5LmgiCisjaW5jbHVkZSAiZXQxMzEwX3BtLmgiCisjaW5jbHVkZSAiZXQxMzEwX2phZ2NvcmUuaCIKKworI2luY2x1ZGUgImV0MTMxeF9hZGFwdGVyLmgiCisjaW5jbHVkZSAiZXQxMzF4X25ldGRldi5oIgorI2luY2x1ZGUgImV0MTMxeF9jb25maWcuaCIKKyNpbmNsdWRlICJldDEzMXhfaXNyLmgiCisKKyNpbmNsdWRlICJldDEzMTBfYWRkcmVzc19tYXAuaCIKKyNpbmNsdWRlICJldDEzMTBfamFnY29yZS5oIgorI2luY2x1ZGUgImV0MTMxMF90eC5oIgorI2luY2x1ZGUgImV0MTMxMF9yeC5oIgorI2luY2x1ZGUgImV0MTMxMF9tYWMuaCIKKyNpbmNsdWRlICJldDEzMTBfZWVwcm9tLmgiCisKKworaW50IF9fZGV2aW5pdCBldDEzMXhfcGNpX3NldHVwKHN0cnVjdCBwY2lfZGV2ICpwZGV2LAorCQkJICAgICAgIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpOwordm9pZCBfX2RldmV4aXQgZXQxMzF4X3BjaV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpOworCisKKy8qIE1vZGluZm8gcGFyYW1ldGVycyAoZmlsbGVkIG91dCB1c2luZyBkZWZpbmVzIGZyb20gZXQxMzF4X3ZlcnNpb24uaCkgKi8KK01PRFVMRV9BVVRIT1IoRFJJVkVSX0FVVEhPUik7CitNT0RVTEVfREVTQ1JJUFRJT04oRFJJVkVSX0lORk8pOworTU9EVUxFX0xJQ0VOU0UoRFJJVkVSX0xJQ0VOU0UpOworCisvKiBNb2R1bGUgUGFyYW1ldGVycyBhbmQgcmVsYXRlZCBkYXRhIGZvciBkZWJ1Z2dpbmcgZmFjaWxpdGllcyAqLworI2lmZGVmIENPTkZJR19FVDEzMVhfREVCVUcKK3N0YXRpYyB1MzIgZXQxMzF4X2RlYnVnX2xldmVsID0gREJHX0xWTDsKK3N0YXRpYyB1MzIgZXQxMzF4X2RlYnVnX2ZsYWdzID0gREJHX0RFRkFVTFRTOworCisvKgorZXQxMzF4X2RlYnVnX2xldmVsIDoKKyBMZXZlbCBvZiBkZWJ1Z2dpbmcgZGVzaXJlZCAoMC03KQorICAgNyA6IERCR19SWF9PTiB8IERCR19UWF9PTgorICAgNiA6IERCR19QQVJBTV9PTgorICAgNSA6IERCR19WRVJCT1NFX09OCisgICA0IDogREJHX1RSQUNFX09OCisgICAzIDogREJHX05PVElDRV9PTgorICAgMiA6IG5vIGRlYnVnIGluZm8KKyAgIDEgOiBubyBkZWJ1ZyBpbmZvCisgICAwIDogbm8gZGVidWcgaW5mbworKi8KKworbW9kdWxlX3BhcmFtKGV0MTMxeF9kZWJ1Z19sZXZlbCwgdWludCwgMCk7Cittb2R1bGVfcGFyYW0oZXQxMzF4X2RlYnVnX2ZsYWdzLCB1aW50LCAwKTsKKworTU9EVUxFX1BBUk1fREVTQyhldDEzMXhfZGVidWdfbGV2ZWwsICJMZXZlbCBvZiBkZWJ1Z2dpbmcgZGVzaXJlZCAoMC03KSIpOworCitzdGF0aWMgZGJnX2luZm9fdCBldDEzMXhfaW5mbyA9IHsgRFJJVkVSX05BTUVfRVhULCAwLCAwIH07CitkYmdfaW5mb190ICpldDEzMXhfZGJnaW5mbyA9ICZldDEzMXhfaW5mbzsKKyNlbmRpZiAvKiBDT05GSUdfRVQxMzFYX0RFQlVHICovCisKK3N0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBldDEzMXhfcGNpX3RhYmxlW10gX19kZXZpbml0ZGF0YSA9IHsKKwl7RVQxMzFYX1BDSV9WRU5ET1JfSUQsIEVUMTMxWF9QQ0lfREVWSUNFX0lEX0dJRywgUENJX0FOWV9JRCwKKwkgUENJX0FOWV9JRCwgMCwgMCwgMFVMfSwKKwl7RVQxMzFYX1BDSV9WRU5ET1JfSUQsIEVUMTMxWF9QQ0lfREVWSUNFX0lEX0ZBU1QsIFBDSV9BTllfSUQsCisJIFBDSV9BTllfSUQsIDAsIDAsIDBVTH0sCisJezAsfQorfTsKKworTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIGV0MTMxeF9wY2lfdGFibGUpOworCitzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgZXQxMzF4X2RyaXZlciA9IHsKKyAgICAgIC5uYW1lCT0gRFJJVkVSX05BTUUsCisgICAgICAuaWRfdGFibGUJPSBldDEzMXhfcGNpX3RhYmxlLAorICAgICAgLnByb2JlCT0gZXQxMzF4X3BjaV9zZXR1cCwKKyAgICAgIC5yZW1vdmUJPSBfX2RldmV4aXRfcChldDEzMXhfcGNpX3JlbW92ZSksCisgICAgICAuc3VzcGVuZAk9IE5VTEwsCQkvL2V0MTMxeF9wY2lfc3VzcGVuZCwKKyAgICAgIC5yZXN1bWUJPSBOVUxMLAkJLy9ldDEzMXhfcGNpX3Jlc3VtZSwKK307CisKKworLyoqCisgKiBldDEzMXhfaW5pdF9tb2R1bGUgLSBUaGUgIm1haW4iIGVudHJ5IHBvaW50IGNhbGxlZCBvbiBkcml2ZXIgaW5pdGlhbGl6YXRpb24KKyAqCisgKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgZXJybm8gb24gZmFpbHVyZSAoYXMgZGVmaW5lZCBpbiBlcnJuby5oKQorICovCitpbnQgZXQxMzF4X2luaXRfbW9kdWxlKHZvaWQpCit7CisJaW50IHJlc3VsdDsKKworI2lmZGVmIENPTkZJR19FVDEzMVhfREVCVUcKKwkvKiBTZXQgdGhlIGxldmVsIG9mIGRlYnVnIG1lc3NhZ2VzIGRpc3BsYXllZCB1c2luZyB0aGUgbW9kdWxlCisJICogcGFyYW1ldGVyCisJICovCisJZXQxMzF4X2RiZ2luZm8tPmRiZ0ZsYWdzID0gZXQxMzF4X2RlYnVnX2ZsYWdzOworCisJc3dpdGNoIChldDEzMXhfZGVidWdfbGV2ZWwpIHsKKwljYXNlIDc6CisJCWV0MTMxeF9kYmdpbmZvLT5kYmdGbGFncyB8PSAoREJHX1JYX09OIHwgREJHX1RYX09OKTsKKworCWNhc2UgNjoKKwkJZXQxMzF4X2RiZ2luZm8tPmRiZ0ZsYWdzIHw9IERCR19QQVJBTV9PTjsKKworCWNhc2UgNToKKwkJZXQxMzF4X2RiZ2luZm8tPmRiZ0ZsYWdzIHw9IERCR19WRVJCT1NFX09OOworCisJY2FzZSA0OgorCQlldDEzMXhfZGJnaW5mby0+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+IGFuZCBDYzogUm9zcworQ29oZW4gPHJjb2hlbkBzbnVyZ2xlLm9yZz4gYXMgd2VsbC4KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2dvNzAwNy9nbzcwMDctZHJpdmVyLmMgYi9kcml2ZXJzL3N0YWdpbmcvZ283MDA3L2dvNzAwNy1kcml2ZXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MWFlNGIwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2dvNzAwNy9nbzcwMDctZHJpdmVyLmMKQEAgLTAsMCArMSw2ODggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwNiBNaWNyb25hcyBVU0EgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChWZXJzaW9uIDIpIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorICogSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24gTUEgMDIxMTEtMTMwNywgVVNBLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L3VuaXN0ZC5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxsaW51eC9maXJtd2FyZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NlbWFwaG9yZS5oPgorI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CisjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYyLmg+CisjaW5jbHVkZSA8bWVkaWEvdHVuZXIuaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWNvbW1vbi5oPgorCisjaW5jbHVkZSAiZ283MDA3LXByaXYuaCIKKyNpbmNsdWRlICJ3aXMtaTJjLmgiCisKKy8qCisgKiBXYWl0IGZvciBhbiBpbnRlcnJ1cHQgdG8gYmUgZGVsaXZlcmVkIGZyb20gdGhlIEdPNzAwN1NCIGFuZCByZXR1cm4KKyAqIHRoZSBhc3NvY2lhdGVkIHZhbHVlIGFuZCBkYXRhLgorICoKKyAqIE11c3QgYmUgY2FsbGVkIHdpdGggdGhlIGh3X2xvY2sgaGVsZC4KKyAqLworaW50IGdvNzAwN19yZWFkX2ludGVycnVwdChzdHJ1Y3QgZ283MDA3ICpnbywgdTE2ICp2YWx1ZSwgdTE2ICpkYXRhKQoreworCWdvLT5pbnRlcnJ1cHRfYXZhaWxhYmxlID0gMDsKKwlnby0+aHBpX29wcy0+cmVhZF9pbnRlcnJ1cHQoZ28pOworCWlmICh3YWl0X2V2ZW50X3RpbWVvdXQoZ28tPmludGVycnVwdF93YWl0cSwKKwkJCQlnby0+aW50ZXJydXB0X2F2YWlsYWJsZSwgNSpIWikgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiZ283MDA3OiB0aW1lb3V0IHdhaXRpbmcgZm9yIHJlYWQgaW50ZXJydXB0XG4iKTsKKwkJcmV0dXJuIC0xOworCX0KKwlpZiAoIWdvLT5pbnRlcnJ1cHRfYXZhaWxhYmxlKQorCQlyZXR1cm4gLTE7CisJZ28tPmludGVycnVwdF9hdmFpbGFibGUgPSAwOworCSp2YWx1ZSA9IGdvLT5pbnRlcnJ1cHRfdmFsdWUgJiAweGZmZmU7CisJKmRhdGEgPSBnby0+aW50ZXJydXB0X2RhdGE7CisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MKGdvNzAwN19yZWFkX2ludGVycnVwdCk7CisKKy8qCisgKiBSZWFkIGEgcmVnaXN0ZXIvYWRkcmVzcyBvbiB0aGUgR083MDA3U0IuCisgKgorICogTXVzdCBiZSBjYWxsZWQgd2l0aCB0aGUgaHdfbG9jayBoZWxkLgorICovCitpbnQgZ283MDA3X3JlYWRfYWRkcihzdHJ1Y3QgZ283MDA3ICpnbywgdTE2IGFkZHIsIHUxNiAqZGF0YSkKK3sKKwlpbnQgY291bnQgPSAxMDA7CisJdTE2IHZhbHVlOworCisJaWYgKGdvNzAwN193cml0ZV9pbnRlcnJ1cHQoZ28sIDB4MDAxMCwgYWRkcikgPCAwKQorCQlyZXR1cm4gLUVJTzsKKwl3aGlsZSAoY291bnQtLSA+IDApIHsKKwkJaWYgKGdvNzAwN19yZWFkX2ludGVycnVwdChnbywgJnZhbHVlLCBkYXRhKSA9PSAwICYmCisJCQkJdmFsdWUgPT0gMHhhMDAwKQorCQkJcmV0dXJuIDA7CisJfQorCXJldHVybiAtRUlPOworfQorRVhQT1JUX1NZTUJPTChnbzcwMDdfcmVhZF9hZGRyKTsKKworLyoKKyAqIFNlbmQgdGhlIGJvb3QgZmlybXdhcmUgdG8gdGhlIGVuY29kZXIsIHdoaWNoIGp1c3Qgd2FrZXMgaXQgdXAgYW5kIGxldHMKKyAqIHVzIHRhbGsgdG8gdGhlIEdQSU8gcGlucyBhbmQgb24tYm9hcmQgSTJDIGFkYXB0ZXIuCisgKgorICogTXVzdCBiZSBjYWxsZWQgd2l0aCB0aGUgaHdfbG9jayBoZWxkLgorICovCitzdGF0aWMgaW50IGdvNzAwN19sb2FkX2VuY29kZXIoc3RydWN0IGdvNzAwNyAqZ28pCit7CisJY29uc3Qgc3RydWN0IGZpcm13YXJlICpmd19lbnRyeTsKKwljaGFyIGZ3X25hbWVbXSA9ICJnbzcwMDdmdy5iaW4iOworCXZvaWQgKmJvdW5jZTsKKwlpbnQgZndfbGVuLCBydiA9IDA7CisJdTE2IGludHJfdmFsLCBpbnRyX2RhdGE7CisKKwlpZiAocmVxdWVzdF9maXJtd2FyZSgmZndfZW50cnksIGZ3X25hbWUsIGdvLT5kZXYpKSB7CisJCXByaW50ayhLRVJOX0VSUgorCQkJImdvNzAwNzogdW5hYmxlIHRvIGxvYWQgZmlybXdhcmUgZnJvbSBmaWxlIFwiJXNcIlxuIiwKKwkJCWZ3X25hbWUpOworCQlyZXR1cm4gLTE7CisJfQorCWlmIChmd19lbnRyeS0+c2l6ZSA8IDE2IHx8IG1lbWNtcChmd19lbnRyeS0+ZGF0YSwgIldJU0dPNzAwN0ZXIiwgMTEpKSB7CisJCXByaW50ayhLRVJOX0VSUiAiZ283MDA3OiBmaWxlIFwiJXNcIiBkb2VzIG5vdCBhcHBlYXIgdG8gYmUgIgorCQkJCSJnbzcwMDcgZmlybXdhcmVcbiIsIGZ3X25hbWUpOworCQlyZWxlYXNlX2Zpcm13YXJlKGZ3X2VudHJ5KTsKKwkJcmV0dXJuIC0xOworCX0KKwlmd19sZW4gPSBmd19lbnRyeS0+c2l6ZSAtIDE2OworCWJvdW5jZSA9IGttYWxsb2MoZndfbGVuLCBHRlBfS0VSTkVMKTsKKwlpZiAoYm91bmNlID09IE5VTEwpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJnbzcwMDc6IHVuYWJsZSB0byBhbGxvY2F0ZSAlZCBieXRlcyBmb3IgIgorCQkJCSJmaXJtd2FyZSB0cmFuc2ZlclxuIiwgZndfbGVuKTsKKwkJcmVsZWFzZV9maXJtd2FyZShmd19lbnRyeSk7CisJCXJldHVybiAtMTsKKwl9CisJbWVtY3B5KGJvdW5jZSwgZndfZW50cnktPmRhdGEgKyAxNiwgZndfbGVuKTsKKwlyZWxlYXNlX2Zpcm13YXJlKGZ3X2VudHJ5KTsKKwlpZiAoZ283MDA3X2ludGVyZmFjZV9yZXNldChnbykgPCAwIHx8CisJCQlnbzcwMDdfc2VuZF9maXJtd2FyZShnbywgYm91bmNlLCBmd19sZW4pIDwgMCB8fAorCQkJZ283MDA3X3JlYWRfaW50ZXJydXB0KGdvLCAmaW50cl92YWwsICZpbnRyX2RhdGEpIDwgMCB8fAorCQkJKGludHJfdmFsICYgfjB4MSkgIT0gMHg1YTVhKSB7CisJCXByaW50ayhLRVJOX0VSUiAiZ283MDA3OiBlcnJvciB0cmFuc2ZlcnJpbmcgZmlybXdhcmVcbiIpOworCQlydiA9IC0xOworCX0KKwlrZnJlZShib3VuY2UpOworCXJldHVybiBydjsKK30KKworLyoKKyAqIEJvb3QgdGhlIGVuY29kZXIgYW5kIHJlZ2lzdGVyIHRoZSBJMkMgYWRhcHRlciBpZiByZXF1ZXN0ZWQuICBEbyB0aGUKKyAqIG1pbmltdW0gaW5pdGlhbGl6YXRpb24gbmVjZXNzYXJ5LCBzaW5jZSB0aGUgYm9hcmQtc3BlY2lmaWMgY29kZSBtYXkKKyAqIHN0aWxsIG5lZWQgdG8gcHJvYmUgdGhlIGJvYXJkIElELgorICoKKyAqIE11c3QgTk9UIGJlIGNhbGxlZCB3aXRoIHRoZSBod19sb2NrIGhlbGQuCisgKi8KK2ludCBnbzcwMDdfYm9vdF9lbmNvZGVyKHN0cnVjdCBnbzcwMDcgKmdvLCBpbnQgaW5pdF9pMmMpCit7CisJaW50IHJldDsKKworCWRvd24oJmdvLT5od19sb2NrKTsKKwlyZXQgPSBnbzcwMDdfbG9hZF9lbmNvZGVyKGdvKTsKKwl1cCgmZ28tPmh3X2xvY2spOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gLTE7CisJaWYgKCFpbml0X2kyYykKKwkJcmV0dXJuIDA7CisJaWYgKGdvNzAwN19pMmNfaW5pdChnbykgPCAwKQorCQlyZXR1cm4gLTE7CisJZ28tPmkyY19hZGFwdGVyX29ubGluZSA9IDE7CisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MKGdvNzAwN19ib290X2VuY29kZXIpOworCisvKgorICogQ29uZmlndXJlIGFueSBoYXJkd2FyZS1yZWxhdGVkIHJlZ2lzdGVycyBpbiB0aGUgR083MDA3LCBzdWNoIGFzIEdQSU8KKyAqIHBpbnMgYW5kIGJ1cyBwYXJhbWV0ZXJzLCB3aGljaCBhcmUgYm9hcmQtc3BlY2lmaWMuICBUaGlzIGFzc3VtZXMKKyAqIHRoZSBib290IGZpcm13YXJlIGhhcyBhbHJlYWR5IGJlZW4gZG93bmxvYWRlZC4KKyAqCisgKiBNdXN0IGJlIGNhbGxlZCB3aXRoIHRoZSBod19sb2NrIGhlbGQuCisgKi8KK3N0YXRpYyBpbnQgZ283MDA3X2luaXRfZW5jb2RlcihzdHJ1Y3QgZ283MDA3ICpnbykKK3sKKwlpZiAoZ28tPmJvYXJkX2luZm8tPmF1ZGlvX2ZsYWdzICYgR083MDA3X0FVRElPX0kyU19NQVNURVIpIHsKKwkJZ283MDA3X3dyaXRlX2FkZHIoZ28sIDB4MTAwMCwgMHgwODExKTsKKwkJZ283MDA3X3dyaXRlX2FkZHIoZ28sIDB4MTAwMCwgMHgwYzExKTsKKwl9CisJaWYgKGdvLT5ib2FyZF9pZCA9PSBHTzcwMDdfQk9BUkRJRF9NQVRSSVhfUkVWKSB7CisJCS8qIFNldCBHUElPIHBpbiAwIHRvIGJlIGFuIG91dHB1dCAoYXVkaW8gY2xvY2sgY29udHJvbCkgKi8KKwkJZ283MDA3X3dyaXRlX2FkZHIoZ28sIDB4M2M4MiwgMHgwMDAxKTsKKwkJZ283MDA3X3dyaXRlX2FkZHIoZ28sIDB4M2M4MCwgMHgwMGZlKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBTZW5kIHRoZSBib290IGZpcm13YXJlIHRvIHRoZSBHTzcwMDcgYW5kIGNvbmZpZ3VyZSB0aGUgcmVnaXN0ZXJzLiAgVGhpcworICogaXMgdGhlIG9ubHkgd2F5IHRvIHN0b3AgdGhlIGVuY29kZXIgb25jZSBpdCBoYXMgc3RhcnRlZCBzdHJlYW1pbmcgdmlkZW8uCisgKgorICogTXVzdCBiZSBjYWxsZWQgd2l0aCB0aGUgaHdfbG9jayBoZWxkLgorICovCitpbnQgZ283MDA3X3Jlc2V0X2VuY29kZXIoc3RydWN0IGdvNzAwNyAqZ28pCit7CisJaWYgKGdvNzAwN19sb2FkX2VuY29kZXIoZ28pIDwgMCkKKwkJcmV0dXJuIC0xOworCXJldHVybiBnbzcwMDdfaW5pdF9lbmNvZGVyKGdvKTsKK30KKworLyoKKyAqIEF0dGVtcHQgdG8gaW5zdGFudGlhdGUgYW4gSTJDIGNsaWVudCBieSBJRCwgcHJvYmFibHkgbG9hZGluZyBhIG1vZHVsZS4KKyAqLworc3RhdGljIGludCBpbml0X2kyY19tb2R1bGUoc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyLCBpbnQgaWQsIGludCBhZGRyKQoreworCWNoYXIgKm1vZG5hbWU7CisKKwlzd2l0Y2ggKGlkKSB7CisJY2FzZSBJMkNfRFJJVkVSSURfV0lTX1NBQTcxMTU6CisJCW1vZG5hbWUgPSAid2lzLXNhYTcxMTUiOworCQlicmVhazsKKwljYXNlIEkyQ19EUklWRVJJRF9XSVNfU0FBNzExMzoKKwkJbW9kbmFtZSA9ICJ3aXMtc2FhNzExMyI7CisJCWJyZWFrOworCWNhc2UgSTJDX0RSSVZFUklEX1dJU19VREExMzQyOgorCQltb2RuYW1lID0gIndpcy11ZGExMzQyIjsKKwkJYnJlYWs7CisJY2FzZSBJMkNfRFJJVkVSSURfV0lTX1NPTllfVFVORVI6CisJCW1vZG5hbWUgPSAid2lzLXNvbnktdHVuZXIiOworCQlicmVhazsKKwljYXNlIEkyQ19EUklWRVJJRF9XSVNfVFc5OTAzOgorCQltb2RuYW1lID0gIndpcy10dzk5MDMiOworCQlicmVhazsKKwljYXNlIEkyQ19EUklWRVJJRF9XSVNfVFcyODA0OgorCQltb2RuYW1lID0gIndpcy10dzI4MDQiOworCQlicmVhazsKKwljYXNlIEkyQ19EUklWRVJJRF9XSVNfT1Y3NjQwOgorCQltb2RuYW1lID0gIndpcy1vdjc2NDAiOworCQlicmVhazsKKwlkZWZhdWx0OgorCQltb2RuYW1lID0gTlVMTDsKKwkJYnJlYWs7CisJfQorCWlmIChtb2RuYW1lICE9IE5VTEwpCisJCXJlcXVlc3RfbW9kdWxlKG1vZG5hbWUpOworCWlmICh3aXNfaTJjX3Byb2JlX2RldmljZShhZGFwdGVyLCBpZCwgYWRkcikgPT0gMSkKKwkJcmV0dXJuIDA7CisJaWYgKG1vZG5hbWUgIT0gTlVMTCkKKwkJcHJpbnRrKEtFUk5fSU5GTworCQkJImdvNzAwNzogcHJvYmluZyBmb3IgbW9kdWxlICVzIGZhaWxlZCIsIG1vZG5hbWUpOworCWVsc2UKKwkJcHJpbnRrKEtFUk5fSU5GTworCQkJImdvNzAwNzogc2Vuc29yICV1IHNlZW1zIHRvIGJlIHVuc3VwcG9ydGVkIVxuIiwgaWQpOworCXJldHVybiAtMTsKK30KKworLyoKKyAqIEZpbmFsaXplIHRoZSBHTzcwMDcgaGFyZHdhcmUgc2V0dXAsIHJlZ2lzdGVyIHRoZSBvbi1ib2FyZCBJMkMgYWRhcHRlcgorICogKGlmIHVzZWQgb24gdGhpcyBib2FyZCksIGxvYWQgdGhlIEkyQyBjbGllbnQgZHJpdmVyIGZvciB0aGUgc2Vuc29yCisgKiAoU0FBNzExNSBvciB3aGF0ZXZlcikgYW5kIG90aGVyIGRldmljZXMsIGFuZCByZWdpc3RlciB0aGUgQUxTQSBhbmQgVjRMMgorICogaW50ZXJmYWNlcy4KKyAqCisgKiBNdXN0IE5PVCBiZSBjYWxsZWQgd2l0aCB0aGUgaHdfbG9jayBoZWxkLgorICovCitpbnQgZ283MDA3X3JlZ2lzdGVyX2VuY29kZXIoc3RydWN0IGdvNzAwNyAqZ28pCit7CisJaW50IGksIHJldDsKKworCXByaW50ayhLRVJOX0lORk8gImdvNzAwNzogcmVnaXN0ZXJpbmcgbmV3ICVzXG4iLCBnby0+bmFtZSk7CisKKwlkb3duKCZnby0+aHdfbG9jayk7CisJcmV0ID0gZ283MDA3X2luaXRfZW5jb2Rlcihnbyk7CisJdXAoJmdvLT5od19sb2NrKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIC0xOworCisJaWYgKCFnby0+aTJjX2FkYXB0ZXJfb25saW5lICYmCisJCQlnby0+Ym9hcmRfaW5mby0+ZmxhZ3MgJiBHTzcwMDdfQk9BUkRfVVNFX09OQk9BUkRfSTJDKSB7CisJCWlmIChnbzcwMDdfaTJjX2luaXQoZ28pIDwgMCkKKwkJCXJldHVybiAtMTsKKwkJZ28tPmkyY19hZGFwdGVyX29ubGluZSA9IDE7CisJfQorCWlmIChnby0+aTJjX2FkYXB0ZXJfb25saW5lKSB7CisJCWZvciAoaSA9IDA7IGkgPCBnby0+Ym9hcmRfaW5mby0+bnVtX2kyY19kZXZzOyArK2kpCisJCQlpbml0X2kyY19tb2R1bGUoJmdvLT5pMmNfYWRhcHRlciwKKwkJCQkJZ28tPmJvYXJkX2luZm8tPmkyY19kZXZzW2ldLmlkLAorCQkJCQlnby0+Ym9hcmRfaW5mby0+aTJjX2RldnNbaV0uYWRkcik7CisjaWZkZWYgVFVORVJfU0VUX1RZUEVfQUREUgorCQlpZiAoZ28tPnR1bmVyX3R5cGUgPj0gMCkgeworCQkJc3RydWN0IHR1bmVyX3NldHVwIHR1bl9zZXR1cCA9IHsKKwkJCQkubW9kZV9tYXNrCT0gVF9BTkFMT0dfVFYsCisJCQkJLmFkZHIJCT0gQUREUl9VTlNFVCwKKwkJCQkudHlwZQkJPSBnby0+dHVuZXJfdHlwZQorCQkJfTsKKwkJCWkyY19jbGllbnRzX2NvbW1hbmQoJmdvLT5pMmNfYWRhcHRlciwKKwkJCQlUVU5FUl9TRVRfVFlQRV9BRERSLCAmdHVuX3NldHVwKTsKKwkJfQorI2Vsc2UKKwkJaWYgKGdvLT50dW5lcl90eXBlID49IDApCisJCQlpMmNfY2xpZW50c19jb21tYW5kKCZnby0+aTJjX2FkYXB0ZXIsCisJCQkJVFVORVJfU0VUX1RZUEUsICZnby0+dHVuZXJfdHlwZSk7CisjZW5kaWYKKwkJaWYgKGdvLT5ib2FyZF9pZCA9PSBHTzcwMDdfQk9BUkRJRF9BRExJTktfTVBHMjQpCisJCQlpMmNfY2xpZW50c19jb21tYW5kKCZnby0+aTJjX2FkYXB0ZXIsCisJCQkJREVDT0RFUl9TRVRfQ0hBTk5FTCwgJmdvLT5jaGFubmVsX251bWJlcik7CisJfQorCWlmIChnby0+Ym9hcmRfaW5mby0+ZmxhZ3MgJiBHTzcwMDdfQk9BUkRfSEFTX0FVRElPKSB7CisJCWdvLT5hdWRpb19lbmFibGVkID0gMTsKKwkJZ283MDA3X3NuZF9pbml0KGdvKTsKKwl9CisJcmV0dXJuIGdvNzAwN192NGwyX2luaXQoZ28pOworfQorRVhQT1JUX1NZTUJPTChnbzcwMDdfcmVnaXN0ZXJfZW5jb2Rlcik7CisKKy8qCisgKiBTZW5kIHRoZSBlbmNvZGUgZmlybXdhcmUgdG8gdGhlIGVuY29kZXIsIHdoaWNoIHdpbGwgY2F1c2UgaXQKKyAqIHRvIGltbWVkaWF0ZWx5IHN0YXJ0IGRlbGl2ZXJpbmcgdGhlIHZpZGVvIGFuZCBhdWRpbyBzdHJlYW1zLgorICoKKyAqIE11c3QgYmUgY2FsbGVkIHdpdGggdGhlIGh3X2xvY2sgaGVsZC4KKyAqLworaW50IGdvNzAwN19zdGFydF9lbmNvZGVyKHN0cnVjdCBnbzcwMDcgKmdvKQoreworCXU4ICpmdzsKKwlpbnQgZndfbGVuLCBydiA9IDAsIGk7CisJdTE2IGludHJfdmFsLCBpbnRyX2RhdGE7CisKKwlnby0+bW9kZXRfZW5hYmxlID0gMDsKKwlpZiAoIWdvLT5kdmRfbW9kZSkKKwkJZm9yIChpID0gMDsgaSA8IDQ7ICsraSkgeworCQkJaWYgKGdvLT5tb2RldFtpXS5lbmFibGUpIHsKKwkJCQlnby0+bW9kZXRfZW5hYmxlID0gMTsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWdvLT5tb2RldFtpXS5waXhlbF90aHJlc2hvbGQgPSAzMjc2NzsKKwkJCWdvLT5tb2RldFtpXS5tb3Rpb25fdGhyZXNob2xkID0gMzI3Njc7CisJCQlnby0+bW9kZXRbaV0ubWJfdGhyZXNob2xkID0gMzI3Njc7CisJCX0KKworCWlmIChnbzcwMDdfY29uc3RydWN0X2Z3X2ltYWdlKGdvLCAmZncsICZmd19sZW4pIDwgMCkKKwkJcmV0dXJuIC0xOworCisJaWYgKGdvNzAwN19zZW5kX2Zpcm13YXJlKGdvLCBmdywgZndfbGVuKSA8IDAgfHwKKwkJCWdvNzAwN19yZWFkX2ludGVycnVwdChnbywgJmludHJfdmFsLCAmaW50cl9kYXRhKSA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJnbzcwMDc6IGVycm9yIHRyYW5zZmVycmluZyBmaXJtd2FyZVxuIik7CisJCXJ2ID0gLTE7CisJCWdvdG8gc3RhcnRfZXJyb3I7CisJfQorCisJZ28tPnN0YXRlID0gU1RBVEVfREFUQTsKKwlnby0+cGFyc2VfbGVuZ3RoID0gMDsKKwlnby0+c2Vlbl9mcmFtZSA9IDA7CisJaWYgKGdvNzAwN19zdHJlYW1fc3RhcnQoZ28pIDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIgImdvNzAwNzogZXJyb3Igc3RhcnRpbmcgc3RyZWFtIHRyYW5zZmVyXG4iKTsKKwkJcnYgPSAtMTsKKwkJZ290byBzdGFydF9lcnJvcjsKKwl9CisKK3N0YXJ0X2Vycm9yOgorCWtmcmVlKGZ3KTsKKwlyZXR1cm4gcnY7Cit9CisKKy8qCisgKiBTdG9yZSBhIGJ5dGUgaW4gdGhlIGN1cnJlbnQgdmlkZW8gYnVmZmVyLCBpZiB0aGVyZSBpcyBvbmUuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBzdG9yZV9ieXRlKHN0cnVjdCBnbzcwMDdfYnVmZmVyICpnb2J1ZiwgdTggYnl0ZSkKK3sKKwlpZiAoZ29idWYgIT0gTlVMTCAmJiBnb2J1Zi0+Ynl0ZXN1c2VkIDwgR083MDA3X0JVRl9TSVpFKSB7CisJCXVuc2lnbmVkIGludCBwZ2lkeCA9IGdvYnVmLT5vZmZzZXQgPj4gUEFHRV9TSElGVDsKKwkJdW5zaWduZWQgaW50IHBnb2ZmID0gZ29idWYtPm9mZnNldCAmIH5QQUdFX01BU0s7CisKKwkJKigodTggKilwYWdlX2FkZHJlc3MoZ29idWYtPnBhZ2VzW3BnaWR4XSkgKyBwZ29mZikgPSBieXRlOworCQkrK2dvYnVmLT5vZmZzZXQ7CisJCSsrZ29idWYtPmJ5dGVzdXNlZDsKKwl9Cit9CisKKy8qCisgKiBEZWxpdmVyIHRoZSBsYXN0IHZpZGVvIGJ1ZmZlciBhbmQgZ2V0IGEgbmV3IG9uZSB0byBzdGFydCB3cml0aW5nIHRvLgorICovCitzdGF0aWMgdm9pZCBmcmFtZV9ib3VuZGFyeShzdHJ1Y3QgZ283MDA3ICpnbykKK3sKKwlzdHJ1Y3QgZ283MDA3X2J1ZmZlciAqZ29idWY7CisJaW50IGk7CisKKwlpZiAoZ28tPmFjdGl2ZV9idWYpIHsKKwkJaWYgKGdvLT5hY3RpdmVfYnVmLT5tb2RldF9hY3RpdmUpIHsKKwkJCWlmIChnby0+YWN0aXZlX2J1Zi0+Ynl0ZXN1c2VkICsgMjE2IDwgR083MDA3X0JVRl9TSVpFKSB7CisJCQkJZm9yIChpID0gMDsgaSA8IDIxNjsgKytpKQorCQkJCQlzdG9yZV9ieXRlKGdvLT5hY3RpdmVfYnVmLAorCQkJCQkJCWdvLT5hY3RpdmVfbWFwW2ldKTsKKwkJCQlnby0+YWN0aXZlX2J1Zi0+Ynl0ZXN1c2VkIC09IDIxNjsKKwkJCX0gZWxzZQorCQkJCWdvLT5hY3RpdmVfYnVmLT5tb2RldF9hY3RpdmUgPSAwOworCQl9CisJCWdvLT5hY3RpdmVfYnVmLT5zdGF0ZSA9IEJVRl9TVEFURV9ET05FOworCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJmdvLT5mcmFtZV93YWl0cSk7CisJCWdvLT5hY3RpdmVfYnVmID0gTlVMTDsKKwl9CisJbGlzdF9mb3JfZWFjaF9lbnRyeShnb2J1ZiwgJmdvLT5zdHJlYW0sIHN0cmVhbSkKKwkJaWYgKGdvYnVmLT5zdGF0ZSA9PSBCVUZfU1RBVEVfUVVFVUVEKSB7CisJCQlnb2J1Zi0+c2VxID0gZ28tPm5leHRfc2VxOworCQkJZG9fZ2V0dGltZW9mZGF5KCZnb2J1Zi0+dGltZXN0YW1wKTsKKwkJCWdvLT5hY3RpdmVfYnVmID0gZ29idWY7CisJCQlicmVhazsKKwkJfQorCSsrZ28tPm5leHRfc2VxOworfQorCitzdGF0aWMgdm9pZCB3cml0ZV9iaXRtYXBfd29yZChzdHJ1Y3QgZ283MDA3ICpnbykKK3sKKwlpbnQgeCwgeSwgaSwgc3RyaWRlID0gKChnby0+d2lkdGggPj4gNCkgKyA3KSA+PiAzOworCisJZm9yIChpID0gMDsgaSA8IDE2OyArK2kpIHsKKwkJeSA9ICgoKGdvLT5wYXJzZV9sZW5ndGggLSAxKSA8PCAzKSArIGkpIC8gKGdvLT53aWR0aCA+PiA0KTsKKwkJeCA9ICgoKGdvLT5wYXJzZV9sZW5ndGggLSAxKSA8PCAzKSArIGkpICUgKGdvLT53aWR0aCA+PiA0KTsKKwkJZ28tPmFjdGl2ZV9tYXBbc3RyaWRlICogeSArICh4ID4+IDMpXSB8PQorCQkJCQkoZ28tPm1vZGV0X3dvcmQgJiAxKSA8PCAoeCAmIDB4Nyk7CisJCWdvLT5tb2RldF93b3JkID4+PSAxOworCX0KK30KKworLyoKKyAqIFBhcnNlIGEgY2h1bmsgb2YgdGhlIHZpZGVvIHN0cmVhbSBpbnRvIGZyYW1lcy4gIFRoZSBmcmFtZXMgYXJlIG5vdAorICogZGVsaW1pdGVkIGJ5IHRoZSBoYXJkd2FyZSwgc28gd2UgaGF2ZSB0byBwYXJzZSB0aGUgZnJhbWUgYm91bmRhcmllcworICogYmFzZWQgb24gdGhlIHR5cGUgb2YgdmlkZW8gc3RyZWFtIHdlJ3JlIHJlY2VpdmluZy4KKyAqLwordm9pZCBnbzcwMDdfcGFyc2VfdmlkZW9fc3RyZWFtKHN0cnVjdCBnbzcwMDcgKmdvLCB1OCAqYnVmLCBpbnQgbGVuZ3RoKQoreworCWludCBpLCBzZXFfc3RhcnRfY29kZSA9IC0xLCBmcmFtZV9zdGFydF9jb2RlID0gLTE7CisKKwlzcGluX2xvY2soJmdvLT5zcGlubG9jayk7CisKKwlzd2l0Y2ggKGdvLT5mb3JtYXQpIHsKKwljYXNlIEdPNzAwN19GT1JNQVRfTVBFRzQ6CisJCXNlcV9zdGFydF9jb2RlID0gMHhCMDsKKwkJZnJhbWVfc3RhcnRfY29kZSA9IDB4QjY7CisJCWJyZWFrOworCWNhc2UgR083MDA3X0ZPUk1BVF9NUEVHMToKKwljYXNlIEdPNzAwN19GT1JNQVRfTVBFRzI6CisJCXNlcV9zdGFydF9jb2RlID0gMHhCMzsKKwkJZnJhbWVfc3RhcnRfY29kZSA9IDB4MDA7CisJCWJyZWFrOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgeworCQlpZiAoZ28tPmFjdGl2ZV9idWYgIT0gTlVMTCAmJgorCQkJICAgIGdvLT5hY3RpdmVfYnVmLT5ieXRlc3VzZWQgPj0gR083MDA3X0JVRl9TSVpFIC0gMykgeworCQkJcHJpbnRrKEtFUk5fREVCVUcgImdvNzAwNzogZHJvcHBpbmcgb3ZlcnNpemVkIGZyYW1lXG4iKTsKKwkJCWdvLT5hY3RpdmVfYnVmLT5vZmZzZXQgLT0gZ28tPmFjdGl2ZV9idWYtPmJ5dGVzdXNlZDsKKwkJCWdvLT5hY3RpdmVfYnVmLT5ieXRlc3VzZWQgPSAwOworCQkJZ28tPmFjdGl2ZV9idWYtPm1vZGV0X2FjdGl2ZSA9IDA7CisJCQlnby0+YWN0aXZlX2J1ZiA9IE5VTEw7CisJCX0KKworCQlzd2l0Y2ggKGdvLT5zdGF0ZSkgeworCQljYXNlIFNUQVRFX0RBVEE6CisJCQlzd2l0Y2ggKGJ1ZltpXSkgeworCQkJY2FzZSAweDAwOgorCQkJCWdvLT5zdGF0ZSA9IFNUQVRFXzAwOworCQkJCWJyZWFrOworCQkJY2FzZSAweEZGOgorCQkJCWdvLT5zdGF0ZSA9IFNUQVRFX0ZGOworCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQlzdG9yZV9ieXRlKGdvLT5hY3RpdmVfYnVmLCBidWZbaV0pOworCQkJCWJyZWFrOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgU1RBVEVfMDA6CisJCQlzd2l0Y2ggKGJ1ZltpXSkgeworCQkJY2FzZSAweDAwOgorCQkJCWdvLT5zdGF0ZSA9IFNUQVRFXzAwXzAwOworCQkJCWJyZWFrOworCQkJY2FzZSAweEZGOgorCQkJCXN0b3JlX2J5dGUoZ28tPmFjdGl2ZV9idWYsIDB4MDApOworCQkJCWdvLT5zdGF0ZSA9IFNUQVRFX0ZGOworCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQlzdG9yZV9ieXRlKGdvLT5hY3RpdmVfYnVmLCAweDAwKTsKKwkJCQlzdG9yZV9ieXRlKGdvLT5hY3RpdmVfYnVmLCBidWZbaV0pOworCQkJCWdvLT5zdGF0ZSA9IFNUQVRFX0RBVEE7CisJCQkJYnJlYWs7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBTVEFURV8wMF8wMDoKKwkJCXN3aXRjaCAoYnVmW2ldKSB7CisJCQljYXNlIDB4MDA6CisJCQkJc3RvcmVfYnl0ZShnby0+YWN0aXZlX2J1ZiwgMHgwMCk7CisJCQkJLyogZ28tPnN0YXRlIHJlbWFpbnMgU1RBVEVfMDBfMDAgKi8KKwkJCQlicmVhazsKKwkJCWNhc2UgMHgwMToKKwkJCQlnby0+c3RhdGUgPSBTVEFURV8wMF8wMF8wMTsKKwkJCQlicmVhazsKKwkJCWNhc2UgMHhGRjoKKwkJCQlzdG9yZV9ieXRlKGdvLT5hY3RpdmVfYnVmLCAweDAwKTsKKwkJCQlzdG9yZV9ieXRlKGdvLT5hY3RpdmVfYnVmLCAweDAwKTsKKwkJCQlnby0+c3RhdGUgPSBTVEFURV9GRjsKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJc3RvcmVfYnl0ZShnby0+YWN0aXZlX2J1ZiwgMHgwMCk7CisJCQkJc3RvcmVfYnl0ZShnby0+YWN0aXZlX2J1ZiwgMHgwMCk7CisJCQkJc3RvcmVfYnl0ZShnby0+YWN0aXZlX2J1ZiwgYnVmW2ldKTsKKwkJCQlnby0+c3RhdGUgPSBTVEFURV9EQVRBOworCQkJCWJyZWFrOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgU1RBVEVfMDBfMDBfMDE6CisJCQkvKiBJZiB0aGlzIGlzIHRoZSBzdGFydCBvZiBhIG5ldyBNUEVHIGZyYW1lLAorCQkJICogZ2V0IGEgbmV3IGJ1ZmZlciAqLworCQkJaWYgKChnby0+Zm9ybWF0ID09IEdPNzAwN19GT1JNQVRfTVBFRzEgfHwKKwkJCQkJZ28tPmZvcm1hdCA9PSBHTzcwMDdfRk9STUFUX01QRUcyIHx8CisJCQkJCWdvLT5mb3JtYXQgPT0gR083MDA3X0ZPUk1BVF9NUEVHNCkgJiYKKwkJCQkJKGJ1ZltpXSA9PSBzZXFfc3RhcnRfY29kZSB8fAorCQkJCQkJYnVmW2ldID09IDB4QjggfHwgLyogR09QIGNvZGUgKi8KKwkJCQkJCWJ1ZltpXSA9PSBmcmFtZV9zdGFydF9jb2RlKSkgeworCQkJCWlmIChnby0+YWN0aXZlX2J1ZiA9PSBOVUxMIHx8IGdvLT5zZWVuX2ZyYW1lKQorCQkJCQlmcmFtZV9ib3VuZGFyeShnbyk7CisJCQkJaWYgKGJ1ZltpXSA9PSBmcmFtZV9zdGFydF9jb2RlKSB7CisJCQkJCWlmIChnby0+YWN0aXZlX2J1ZiAhPSBOVUxMKQorCQkJCQkJZ28tPmFjdGl2ZV9idWYtPmZyYW1lX29mZnNldCA9CisJCQkJCQkJZ28tPmFjdGl2ZV9idWYtPm9mZnNldDsKKwkJCQkJZ28tPnNlZW5fZnJhbWUgPSAxOworCQkJCX0gZWxzZSB7CisJCQkJCWdvLT5zZWVuX2ZyYW1lID0gMDsKKwkJCQl9CisJCQl9CisJCQkvKiBIYW5kbGUgYW55IHNwZWNpYWwgY2h1bmsgdHlwZXMsIG9yIGp1c3Qgd3JpdGUgdGhlCisJCQkgKiBzdGFydCBjb2RlIHRvIHRoZSAocG90ZW50aWFsbHkgbmV3KSBidWZmZXIgKi8KKwkJCXN3aXRjaCAoYnVmW2ldKSB7CisJCQljYXNlIDB4RjU6IC8qIHRpbWVzdGFtcCAqLworCQkJCWdvLT5wYXJzZV9sZW5ndGggPSAxMjsKKwkJCQlnby0+c3RhdGUgPSBTVEFURV9VTlBBUlNFRDsKKwkJCQlicmVhazsKKwkJCWNhc2UgMHhGNjogLyogdmJpICovCisJCQkJZ28tPnN0YXRlID0gU1RBVEVfVkJJX0xFTl9BOworCQkJCWJyZWFrOworCQkJY2FzZSAweEY4OiAvKiBNRCBtYXAgKi8KKwkJCQlnby0+cGFyc2VfbGVuZ3RoID0gMDsKKwkJCQltZW1zZXQoZ28tPmFjdGl2ZV9tYXAsIDAsCisJCQkJCQlzaXplb2YoZ28tPmFjdGl2ZV9tYXApKTsKKwkJCQlnby0+c3RhdGUgPSBTVEFURV9NT0RFVF9NQVA7CisJCQkJYnJlYWs7CisJCQljYXNlIDB4RkY6IC8qIFBvdGVudGlhbCBKUEVHIHN0YXJ0IGNvZGUgKi8KKwkJCQlzdG9yZV9ieXRlKGdvLT5hY3RpdmVfYnVmLCAweDAwKTsKKwkJCQlzdG9yZV9ieXRlKGdvLT5hY3RpdmVfYnVmLCAweDAwKTsKKwkJCQlzdG9yZV9ieXRlKGdvLT5hY3RpdmVfYnVmLCAweDAxKTsKKwkJCQlnby0+c3RhdGUgPSBTVEFURV9GRjsKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJc3RvcmVfYnl0ZShnby0+YWN0aXZlX2J1ZiwgMHgwMCk7CisJCQkJc3RvcmVfYnl0ZShnby0+YWN0aXZlX2J1ZiwgMHgwMCk7CisJCQkJc3RvcmVfYnl0ZShnby0+YWN0aXZlX2J1ZiwgMHgwMSk7CisJCQkJc3RvcmVfYnl0ZShnby0+YWN0aXZlX2J1ZiwgYnVmW2ldKTsKKwkJCQlnby0+c3RhdGUgPSBTVEFURV9EQVRBOworCQkJCWJyZWFrOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgU1RBVEVfRkY6CisJCQlzd2l0Y2ggKGJ1ZltpXSkgeworCQkJY2FzZSAweDAwOgorCQkJCXN0b3JlX2J5dGUoZ28tPmFjdGl2ZV9idWYsIDB4RkYpOworCQkJCWdvLT5zdGF0ZSA9IFNUQVRFXzAwOworCQkJCWJyZWFrOworCQkJY2FzZSAweEZGOgorCQkJCXN0b3JlX2J5dGUoZ28tPmFjdGl2ZV9idWYsIDB4RkYpOworCQkJCS8qIGdvLT5zdGF0ZSByZW1haW5zIFNUQVRFX0ZGICovCisJCQkJYnJlYWs7CisJCQljYXNlIDB4RDg6CisJCQkJaWYgKGdvLT5mb3JtYXQgPT0gR083MDA3X0ZPUk1BVF9NSlBFRykKKwkJCQkJZnJhbWVfYm91bmRhcnkoZ28pOworCQkJCS8qIGZhbGwgdGhyb3VnaCAqLworCQkJZGVmYXVsdDoKKwkJCQlzdG9yZV9ieXRlKGdvLT5hY3RpdmVfYnVmLCAweEZGKTsKKwkJCQlzdG9yZV9ieXRlKGdvLT5hY3RpdmVfYnVmLCBidWZbaV0pOworCQkJCWdvLT5zdGF0ZSA9IFNUQVRFX0RBVEE7CisJCQkJYnJlYWs7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBTVEFURV9WQklfTEVOX0E6CisJCQlnby0+cGFyc2VfbGVuZ3RoID0gYnVmW2ldIDw8IDg7CisJCQlnby0+c3RhdGUgPSBTVEFURV9WQklfTEVOX0I7CisJCQlicmVhazsKKwkJY2FzZSBTVEFURV9WQklfTEVOX0I6CisJCQlnby0+cGFyc2VfbGVuZ3RoIHw9IGJ1ZltpXTsKKwkJCWlmIChnby0+cGFyc2VfbGVuZ3RoID4gMCkKKwkJCQlnby0+c3RhdGUgPSBTVEFURV9VTlBBUlNFRDsKKwkJCWVsc2UKKwkJCQlnby0+c3RhdGUgPSBTVEFURV9EQVRBOworCQkJYnJlYWs7CisJCWNhc2UgU1RBVEVfTU9ERVRfTUFQOgorCQkJaWYgKGdvLT5wYXJzZV9sZW5ndGggPCAyMDQpIHsKKwkJCQlpZiAoZ28tPnBhcnNlX2xlbmd0aCAmIDEpIHsKKwkJCQkJZ28tPm1vZGV0X3dvcmQgfD0gYnVmW2ldOworCQkJCQl3cml0ZV9iaXRtYXBfd29yZChnbyk7CisJCQkJfSBlbHNlCisJCQkJCWdvLT5tb2RldF93b3JkID0gYnVmW2ldIDw8IDg7CisJCQl9IGVsc2UgaWYgKGdvLT5wYXJzZV9sZW5ndGggPT0gMjA3ICYmIGdvLT5hY3RpdmVfYnVmKSB7CisJCQkJZ28tPmFjdGl2ZV9idWYtPm1vZGV0X2FjdGl2ZSA9IGJ1ZltpXTsKKwkJCX0KKwkJCWlmICgrK2dvLT5wYXJzZV9sZW5ndGggPT0gMjA4KQorCQkJCWdvLT5zdGF0ZSA9IFNUQVRFX0RBVEE7CisJCQlicmVhazsKKwkJY2FzZSBTVEFURV9VTlBBUlNFRDoKKwkJCWlmICgtLWdvLT5wYXJzZV9sZW5ndGggPT0gMCkKKwkJCQlnby0+c3RhdGUgPSBTVEFURV9EQVRBOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlzcGluX3VubG9jaygmZ28tPnNwaW5sb2NrKTsKK30KK0VYUE9SVF9TWU1CT0woZ283MDA3X3BhcnNlX3ZpZGVvX3N0cmVhbSk7CisKKy8qCisgKiBBbGxvY2F0ZSBhIG5ldyBnbzcwMDcgc3RydWN0LiAgVXNlZCBieSB0aGUgaGFyZHdhcmUtc3BlY2lmaWMgcHJvYmUuCisgKi8KK3N0cnVjdCBnbzcwMDcgKmdvNzAwN19hbGxvYyhzdHJ1Y3QgZ283MDA3X2JvYXJkX2luZm8gKmJvYXJkLCBzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGdvNzAwNyAqZ287CisJaW50IGk7CisKKwlnbyA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBnbzcwMDcpLCBHRlBfS0VSTkVMKTsKKwlpZiAoZ28gPT0gTlVMTCkKKwkJcmV0dXJuIE5VTEw7CisJZ28tPmRldiA9IGRldjsKKwlnby0+Ym9hcmRfaW5mbyA9IGJvYXJkOworCWdvLT5ib2FyZF9pZCA9IDA7CisJZ28tPnR1bmVyX3R5cGUgPSAtMTsKKwlnby0+Y2hhbm5lbF9udW1iZXIgPSAwOworCWdvLT5uYW1lWzBdID0gMDsKKwlpbml0X01VVEVYKCZnby0+aHdfbG9jayk7CisJaW5pdF93YWl0cXVldWVfaGVhZCgmZ28tPmZyYW1lX3dhaXRxKTsKKwlzcGluX2xvY2tfaW5pdCgmZ28tPnNwaW5sb2NrKTsKKwlnby0+dmlkZW9fZGV2ID0gTlVMTDsKKwlnby0+cmVmX2NvdW50ID0gMDsKKwlnby0+c3RhdHVzID0gU1RBVFVTX0lOSVQ7CisJbWVtc2V0KCZnby0+aTJjX2FkYXB0ZXIsIDAsIHNpemVvZihnby0+aTJjX2FkYXB0ZXIpKTsKKwlnby0+aTJjX2FkYXB0ZXJfb25saW5lID0gMDsKKwlnby0+aW50ZXJydXB0X2F2YWlsYWJsZSA9IDA7CisJaW5pdF93YWl0cXVldWVfaGVhZCgmZ28tPmludGVycnVwdF93YWl0cSk7CisJZ28tPmluX3VzZSA9IDA7CisJZ28tPmlucHV0ID0gMDsKKwlpZiAoYm9hcmQtPnNlbnNvcl9mbGFncyAmIEdPNzAwN19TRU5TT1JfVFYpIHsKKwkJZ28tPnN0YW5kYXJkID0gR083MDA3X1NURF9OVFNDOworCQlnby0+d2lkdGggPSA3MjA7CisJCWdvLT5oZWlnaHQgPSA0ODA7CisJCWdvLT5zZW5zb3JfZnJhbWVyYXRlID0gMzAwMDA7CisJfSBlbHNlIHsKKwkJZ28tPnN0YW5kYXJkID0gR083MDA3X1NURF9PVEhFUjsKKwkJZ28tPndpZHRoID0gYm9hcmQtPnNlbnNvcl93aWR0aDsKKwkJZ28tPmhlaWdodCA9IGJvYXJkLT5zZW5zb3JfaGVpZ2h0OworCQlnby0+c2Vuc29yX2ZyYW1lcmF0ZSA9IGJvYXJkLT5zZW5zb3JfZnJhbWVyYXRlOworCX0KKwlnby0+ZW5jb2Rlcl92X29mZnNldCA9IGJvYXJkLT5zZW5zb3Jfdl9vZmZzZXQ7CisJZ28tPmVuY29kZXJfaF9vZmZzZXQgPSBib2FyZC0+c2Vuc29yX2hfb2Zmc2V0OworCWdvLT5lbmNvZGVyX2hfaGFsdmUgPSAwOworCWdvLT5lbmNvZGVyX3ZfaGFsdmUgPSAwOworCWdvLT5lbmNvZGVyX3N1YnNhbXBsZSA9IDA7CisJZ28tPnN0cmVhbWluZyA9IDA7CisJZ28tPmZvcm1hdCA9IEdPNzAwN19GT1JNQVRfTUpQRUc7CisJZ28tPmJpdHJhdGUgPSAxNTAwMDAwOworCWdvLT5mcHNfc2NhbGUgPSAxOworCWdvLT5wYWxpID0gMDsKKwlnby0+YXNwZWN0X3JhdGlvID0gR083MDA3X1JBVElPXzFfMTsKKwlnby0+Z29wX3NpemUgPSAwOworCWdvLT5pcGIgPSAwOworCWdvLT5jbG9zZWRfZ29wID0gMDsKKwlnby0+cmVwZWF0X3NlcWhlYWQgPSAwOworCWdvLT5zZXFfaGVhZGVyX2VuYWJsZSA9IDA7CisJZ28tPmdvcF9oZWFkZXJfZW5hYmxlID0gMDsKKwlnby0+ZHZkX21vZGUgPSAwOworCWdvLT5pbnRlcmxhY2VfY29kaW5nID0gMDsKKwlmb3IgKGkgPSAwOyBpIDwgNDsgKytpKQorCQlnby0+bW9kZXRbaV0uZW5hYmxlID0gMDs7CisJZm9yIChpID0gMDsgaSA8IDE2MjQ7ICsraSkKKwkJZ28tPm1vZGV0X21hcFtpXSA9IDA7CisJZ28tPmF1ZGlvX2RlbGl2ZXIgPSBOVUxMOworCWdvLT5hdWRpb19lbmFibGVkID0gMDsKKwlJTklUX0xJU1RfSEVBRCgmZ28tPnN0cmVhbSk7CisKKwlyZXR1cm4gZ287Cit9CitFWFBPUlRfU1lNQk9MKGdvNzAwN19hbGxvYyk7CisKKy8qCisgKiBEZXRhY2ggYW5kIHVucmVnaXN0ZXIgdGhlIGVuY29kZXIuICBUaGUgZ283MDA3IHN0cnVjdCB3b24ndCBiZSBmcmVlZAorICogdW50aWwgdjRsMiBmaW5pc2hlcyByZWxlYXNpbmcgaXRzIHJlc291cmNlcyBhbmQgYWxsIGFzc29jaWF0ZWQgZmRzIGFyZQorICogY2xvc2VkIGJ5IGFwcGxpY2F0aW9ucy4KKyAqLwordm9pZCBnbzcwMDdfcmVtb3ZlKHN0cnVjdCBnbzcwMDcgKmdvKQoreworCWlmIChnby0+aTJjX2FkYXB0ZXJfb25saW5lKSB7CisJCWlmIChpMmNfZGVsX2FkYXB0ZXIoJmdvLT5pMmNfYWRhcHRlcikgPT0gMCkKKwkJCWdvLT5pMmNfYWRhcHRlcl9vbmxpbmUgPSAwOworCQllbHNlCisJCQlwcmludGsoS0VSTl9FUlIKKwkJCQkiZ283MDA3OiBlcnJvciByZW1vdmluZyBJMkMgYWRhcHRlciFcbiIpOworCX0KKworCWlmIChnby0+YXVkaW9fZW5hYmxlZCkKKwkJZ283MDA3X3NuZF9yZW1vdmUoZ28pOworCWdvNzAwN192NGwyX3JlbW92ZShnbyk7Cit9CitFWFBPUlRfU1lNQk9MKGdvNzAwN19yZW1vdmUpOworCitNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZ283MDA3L2dvNzAwNy1mdy5jIGIvZHJpdmVycy9zdGFnaW5nL2dvNzAwNy9nbzcwMDctZncuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMmFlYTEwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2dvNzAwNy9nbzcwMDctZncuYwpAQCAtMCwwICsxLDE2MzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwNiBNaWNyb25hcyBVU0EgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChWZXJzaW9uIDIpIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorICogSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24gTUEgMDIxMTEtMTMwNywgVVNBLgorICovCisKKy8qCisgKiBUaGlzIGZpbGUgY29udGFpbnMgY29kZSB0byBnZW5lcmF0ZSBhIGZpcm13YXJlIGltYWdlIGZvciB0aGUgR083MDA3U0IKKyAqIGVuY29kZXIuICBNdWNoIG9mIHRoZSBmaXJtd2FyZSBpcyByZWFkIHZlcmJhdGltIGZyb20gYSBmaWxlLCBidXQgc29tZSBvZgorICogaXQgY29uY2VybmluZyBiaXRyYXRlIGNvbnRyb2wgYW5kIG90aGVyIHRoaW5ncyB0aGF0IGNhbiBiZSBjb25maWd1cmVkIGF0CisgKiBydW4tdGltZSBhcmUgZ2VuZXJhdGVkIGR5bmFtaWNhbGx5LiAgTm90ZSB0aGF0IHRoZSBmb3JtYXQgaGVhZGVycworICogZ2VuZXJhdGVkIGhlcmUgZG8gbm90IGFmZmVjdCB0aGUgZnVuY3Rpb25pbmcgb2YgdGhlIGVuY29kZXI7IHRoZXkgYXJlCisgKiBtZXJlbHkgcGFycm90ZWQgYmFjayB0byB0aGUgaG9zdCBhdCB0aGUgc3RhcnQgb2YgZWFjaCBmcmFtZS4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KKyNpbmNsdWRlIDxsaW51eC90aW1lLmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxsaW51eC9maXJtd2FyZS5oPgorI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KKworI2luY2x1ZGUgImdvNzAwNy1wcml2LmgiCisKKy8qIENvbnN0YW50cyB1c2VkIGluIHRoZSBzb3VyY2UgZmlybXdhcmUgaW1hZ2UgdG8gZGVzY3JpYmUgY29kZSBzZWdtZW50cyAqLworCisjZGVmaW5lCUZMQUdfTU9ERV9NSlBFRwkJKDEpCisjZGVmaW5lCUZMQUdfTU9ERV9NUEVHMQkJKDE8PDEpCisjZGVmaW5lCUZMQUdfTU9ERV9NUEVHMgkJKDE8PDIpCisjZGVmaW5lCUZMQUdfTU9ERV9NUEVHNAkJKDE8PDMpCisjZGVmaW5lCUZMQUdfTU9ERV9IMjYzCQkoMTw8NCkKKyNkZWZpbmUgRkxBR19NT0RFX0FMTAkJKEZMQUdfTU9ERV9NSlBFRyB8IEZMQUdfTU9ERV9NUEVHMSB8IFwKKwkJCQkJRkxBR19NT0RFX01QRUcyIHwgRkxBR19NT0RFX01QRUc0IHwgXAorCQkJCQlGTEFHX01PREVfSDI2MykKKyNkZWZpbmUgRkxBR19TUEVDSUFMCQkoMTw8OCkKKworI2RlZmluZSBTUEVDSUFMX0ZSTV9IRUFECTAKKyNkZWZpbmUgU1BFQ0lBTF9CUkNfQ1RSTAkxCisjZGVmaW5lIFNQRUNJQUxfQ09ORklHCQkyCisjZGVmaW5lIFNQRUNJQUxfU0VRSEVBRAkJMworI2RlZmluZSBTUEVDSUFMX0FWX1NZTkMJCTQKKyNkZWZpbmUgU1BFQ0lBTF9GSU5BTAkJNQorI2RlZmluZSBTUEVDSUFMX0FVRElPCQk2CisjZGVmaW5lIFNQRUNJQUxfTU9ERVQJCTcKKworLyogTGl0dGxlIGRhdGEgY2xhc3MgZm9yIGNyZWF0aW5nIE1QRUcgaGVhZGVycyBiaXQtYnktYml0ICovCisKK3N0cnVjdCBjb2RlX2dlbiB7CisJdW5zaWduZWQgY2hhciAqcDsgLyogZGVzdGluYXRpb24gKi8KKwl1MzIgYTsgLyogY29sbGVjdHMgYml0cyBhdCB0aGUgdG9wIG9mIHRoZSB2YXJpYWJsZSAqLworCWludCBiOyAvKiBiaXQgcG9zaXRpb24gb2YgbW9zdCByZWNlbnRseS13cml0dGVuIGJpdCAqLworCWludCBsZW47IC8qIHdyaXR0ZW4gb3V0IHNvIGZhciAqLworfTsKKworI2RlZmluZSBDT0RFX0dFTihuYW1lLCBkZXN0KSBzdHJ1Y3QgY29kZV9nZW4gbmFtZSA9IHsgZGVzdCwgMCwgMzIsIDAgfQorCisjZGVmaW5lIENPREVfQUREKG5hbWUsIHZhbCwgbGVuZ3RoKSBkbyB7IFwKKwluYW1lLmIgLT0gKGxlbmd0aCk7IFwKKwluYW1lLmEgfD0gKHZhbCkgPDwgbmFtZS5iOyBcCisJd2hpbGUgKG5hbWUuYiA8PSAyNCkgeyBcCisJCSpuYW1lLnAgPSBuYW1lLmEgPj4gMjQ7IFwKKwkJKytuYW1lLnA7IFwKKwkJbmFtZS5hIDw8PSA4OyBcCisJCW5hbWUuYiArPSA4OyBcCisJCW5hbWUubGVuICs9IDg7IFwKKwl9IFwKK30gd2hpbGUgKDApCisKKyNkZWZpbmUgQ09ERV9MRU5HVEgobmFtZSkgKG5hbWUubGVuICsgKDMyIC0gbmFtZS5iKSkKKworLyogVGFibGVzIGZvciBjcmVhdGluZyB0aGUgYml0cmF0ZSBjb250cm9sIGRhdGEgKi8KKworc3RhdGljIGNvbnN0IHMxNiBjb252ZXJnZV9zcGVlZF9pcFsxMDFdID0geworCTEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsCisJMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwKKwkxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLAorCTEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDIsCisJMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMywKKwkzLCAzLCAzLCAzLCAzLCA0LCA0LCA0LCA0LCA0LAorCTUsIDUsIDUsIDYsIDYsIDYsIDcsIDcsIDgsIDgsCisJOSwgMTAsIDEwLCAxMSwgMTIsIDEzLCAxNCwgMTUsIDE2LCAxNywKKwkxOSwgMjAsIDIyLCAyMywgMjUsIDI3LCAzMCwgMzIsIDM1LCAzOCwKKwk0MSwgNDUsIDQ5LCA1MywgNTgsIDYzLCA2OSwgNzYsIDgzLCA5MSwKKwkxMDAKK307CisKK3N0YXRpYyBjb25zdCBzMTYgY29udmVyZ2Vfc3BlZWRfaXBiWzEwMV0gPSB7CisJMywgMywgMywgMywgMywgMywgMywgMywgMywgMywKKwkzLCAzLCAzLCAzLCAzLCAzLCAzLCAzLCAzLCAzLAorCTMsIDMsIDMsIDMsIDMsIDQsIDQsIDQsIDQsIDQsCisJNCwgNCwgNCwgNCwgNSwgNSwgNSwgNSwgNSwgNiwKKwk2LCA2LCA2LCA3LCA3LCA3LCA3LCA4LCA4LCA5LAorCTksIDksIDEwLCAxMCwgMTEsIDEyLCAxMiwgMTMsIDE0LCAxNCwKKwkxNSwgMTYsIDE3LCAxOCwgMTksIDIwLCAyMiwgMjMsIDI1LCAyNiwKKwkyOCwgMzAsIDMyLCAzNCwgMzcsIDQwLCA0MiwgNDYsIDQ5LCA1MywKKwk1NywgNjEsIDY2LCA3MSwgNzcsIDgzLCA5MCwgOTcsIDEwNiwgMTE1LAorCTEyNSwgMTM1LCAxNDcsIDE2MSwgMTc1LCAxOTEsIDIwOSwgMjI4LCAyNDksIDI3MywKKwkzMDAKK307CisKK3N0YXRpYyBjb25zdCBzMTYgTEFNQkRBX3RhYmxlWzRdWzEwMV0gPSB7CisJewkxNiwgMTYsIDE2LCAxNiwgMTcsIDE3LCAxNywgMTgsIDE4LCAxOCwKKwkJMTksIDE5LCAxOSwgMjAsIDIwLCAyMCwgMjEsIDIxLCAyMiwgMjIsCisJCTIyLCAyMywgMjMsIDI0LCAyNCwgMjUsIDI1LCAyNSwgMjYsIDI2LAorCQkyNywgMjcsIDI4LCAyOCwgMjksIDI5LCAzMCwgMzEsIDMxLCAzMiwKKwkJMzIsIDMzLCAzMywgMzQsIDM1LCAzNSwgMzYsIDM3LCAzNywgMzgsCisJCTM5LCAzOSwgNDAsIDQxLCA0MiwgNDIsIDQzLCA0NCwgNDUsIDQ2LAorCQk0NiwgNDcsIDQ4LCA0OSwgNTAsIDUxLCA1MiwgNTMsIDU0LCA1NSwKKwkJNTYsIDU3LCA1OCwgNTksIDYwLCA2MSwgNjIsIDYzLCA2NCwgNjUsCisJCTY3LCA2OCwgNjksIDcwLCA3MiwgNzMsIDc0LCA3NiwgNzcsIDc4LAorCQk4MCwgODEsIDgzLCA4NCwgODYsIDg3LCA4OSwgOTAsIDkyLCA5NCwKKwkJOTYKKwl9LAorCXsKKwkJMjAsIDIwLCAyMCwgMjEsIDIxLCAyMSwgMjIsIDIyLCAyMywgMjMsCisJCTIzLCAyNCwgMjQsIDI1LCAyNSwgMjYsIDI2LCAyNywgMjcsIDI4LAorCQkyOCwgMjksIDI5LCAzMCwgMzAsIDMxLCAzMSwgMzIsIDMzLCAzMywKKwkJMzQsIDM0LCAzNSwgMzYsIDM2LCAzNywgMzgsIDM4LCAzOSwgNDAsCisJCTQwLCA0MSwgNDIsIDQzLCA0MywgNDQsIDQ1LCA0NiwgNDcsIDQ4LAorCQk0OCwgNDksIDUwLCA1MSwgNTIsIDUzLCA1NCwgNTUsIDU2LCA1NywKKwkJNTgsIDU5LCA2MCwgNjEsIDYyLCA2NCwgNjUsIDY2LCA2NywgNjgsCisJCTcwLCA3MSwgNzIsIDczLCA3NSwgNzYsIDc4LCA3OSwgODAsIDgyLAorCQk4MywgODUsIDg2LCA4OCwgOTAsIDkxLCA5MywgOTUsIDk2LCA5OCwKKwkJMTAwLCAxMDIsIDEwMywgMTA1LCAxMDcsIDEwOSwgMTExLCAxMTMsIDExNSwgMTE3LAorCQkxMjAKKwl9LAorCXsKKwkJMjQsIDI0LCAyNCwgMjUsIDI1LCAyNiwgMjYsIDI3LCAyNywgMjgsCisJCTI4LCAyOSwgMjksIDMwLCAzMCwgMzEsIDMxLCAzMiwgMzMsIDMzLAorCQkzNCwgMzQsIDM1LCAzNiwgMzYsIDM3LCAzOCwgMzgsIDM5LCA0MCwKKwkJNDEsIDQxLCA0MiwgNDMsIDQ0LCA0NCwgNDUsIDQ2LCA0NywgNDgsCisJCTQ5LCA1MCwgNTAsIDUxLCA1MiwgNTMsIDU0LCA1NSwgNTYsIDU3LAorCQk1OCwgNTksIDYwLCA2MiwgNjMsIDY0LCA2NSwgNjYsIDY3LCA2OSwKKwkJNzAsIDcxLCA3MiwgNzQsIDc1LCA3NiwgNzgsIDc5LCA4MSwgODIsCisJCTg0LCA4NSwgODcsIDg4LCA5MCwgOTIsIDkzLCA5NSwgOTcsIDk4LAorCQkxMDAsIDEwMiwgMTA0LCAxMDYsIDEwOCwgMTEwLCAxMTIsIDExNCwgMTE2LCAxMTgsCisJCTEyMCwgMTIyLCAxMjQsIDEyNywgMTI5LCAxMzEsIDEzNCwgMTM2LCAxMzgsIDE0MSwKKwkJMTQ0CisJfSwKKwl7CisJCTMyLCAzMiwgMzMsIDMzLCAzNCwgMzQsIDM1LCAzNiwgMzYsIDM3LAorCQkzOCwgMzgsIDM5LCA0MCwgNDEsIDQxLCA0MiwgNDMsIDQ0LCA0NCwKKwkJNDUsIDQ2LCA0NywgNDgsIDQ5LCA1MCwgNTAsIDUxLCA1MiwgNTMsCisJCTU0LCA1NSwgNTYsIDU3LCA1OCwgNTksIDYwLCA2MiwgNjMsIDY0LAorCQk2NSwgNjYsIDY3LCA2OSwgNzAsIDcxLCA3MiwgNzQsIDc1LCA3NiwKKwkJNzgsIDc5LCA4MSwgODIsIDg0LCA4NSwgODcsIDg4LCA5MCwgOTIsCisJCTkzLCA5NSwgOTcsIDk4LCAxMDAsIDEwMiwgMTA0LCAxMDYsIDEwOCwgMTEwLAorCQkxMTIsIDExNCwgMTE2LCAxMTgsIDEyMCwgMTIyLCAxMjQsIDEyNywgMTI5LCAxMzEsCisJCTEzNCwgMTM2LCAxMzksIDE0MSwgMTQ0LCAxNDYsIDE0OSwgMTUyLCAxNTQsIDE1NywKKwkJMTYwLCAxNjMsIDE2NiwgMTY5LCAxNzIsIDE3NSwgMTc4LCAxODEsIDE4NSwgMTg4LAorCQkxOTIKKwl9Cit9OworCisvKiBNUEVHIGJsYW5rIGZyYW1lIGdlbmVyYXRpb24gdGFibGVzICovCisKK2VudW0gbXBlZ19mcmFtZV90eXBlIHsKKwlQRlJBTUUsCisJQkZSQU1FX1BSRSwKKwlCRlJBTUVfUE9TVCwKKwlCRlJBTUVfQklESVIsCisJQkZSQU1FX0VNUFRZCit9OworCitzdGF0aWMgY29uc3QgdTMyIGFkZHJpbmN0YWJbMzNdWzJdID0geworCXsgMHgwMSwgMSB9LAl7IDB4MDMsIDMgfSwJeyAweDAyLCAzIH0sCXsgMHgwMywgNCB9LAorCXsgMHgwMiwgNCB9LAl7IDB4MDMsIDUgfSwJeyAweDAyLCA1IH0sCXsgMHgwNywgNyB9LAorCXsgMHgwNiwgNyB9LAl7IDB4MGIsIDggfSwJeyAweDBhLCA4IH0sCXsgMHgwOSwgOCB9LAorCXsgMHgwOCwgOCB9LAl7IDB4MDcsIDggfSwJeyAweDA2LCA4IH0sCXsgMHgxNywgMTAgfSwKKwl7IDB4MTYsIDEwIH0sCXsgMHgxNSwgMTAgfSwJeyAweDE0LCAxMCB9LAl7IDB4MTMsIDEwIH0sCisJeyAweDEyLCAxMCB9LAl7IDB4MjMsIDExIH0sCXsgMHgyMiwgMTEgfSwJeyAweDIxLCAxMSB9LAorCXsgMHgyMCwgMTEgfSwJeyAweDFmLCAxMSB9LAl7IDB4MWUsIDExIH0sCXsgMHgxZCwgMTEgfSwKKwl7IDB4MWMsIDExIH0sCXsgMHgxYiwgMTEgfSwJeyAweDFhLCAxMSB9LAl7IDB4MTksIDExIH0sCisJeyAweDE4LCAxMSB9Cit9OworCisvKiBTdGFuZGFyZCBKUEVHIHRhYmxlcyAqLworCitzdGF0aWMgY29uc3QgdTggZGVmYXVsdF9pbnRyYV9xdWFudF90YWJsZVtdID0geworCSA4LCAxNiwgMTksIDIyLCAyNiwgMjcsIDI5LCAzNCwKKwkxNiwgMTYsIDIyLCAyNCwgMjcsIDI5LCAzNCwgMzcsCisJMTksIDIyLCAyNiwgMjcsIDI5LCAzNCwgMzQsIDM4LAorCTIyLCAyMiwgMjYsIDI3LCAyOSwgMzQsIDM3LCA0MCwKKwkyMiwgMjYsIDI3LCAyOSwgMzIsIDM1LCA0MCwgNDgsCisJMjYsIDI3LCAyOSwgMzIsIDM1LCA0MCwgNDgsIDU4LAorCTI2LCAyNywgMjksIDM0LCAzOCwgNDYsIDU2LCA2OSwKKwkyNywgMjksIDM1LCAzOCwgNDYsIDU2LCA2OSwgODMKK307CisKK3N0YXRpYyBjb25zdCB1OCBiaXRzX2RjX2x1bWluYW5jZVtdID0geworCTAsIDAsIDEsIDUsIDEsIDEsIDEsIDEsIDEsIDEsIDAsIDAsIDAsIDAsIDAsIDAsIDAKK307CisKK3N0YXRpYyBjb25zdCB1OCB2YWxfZGNfbHVtaW5hbmNlW10gPSB7CisJMCwgMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOSwgMTAsIDExCit9OworCitzdGF0aWMgY29uc3QgdTggYml0c19kY19jaHJvbWluYW5jZVtdID0geworCTAsIDAsIDMsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDAsIDAsIDAsIDAsIDAKK307CisKK3N0YXRpYyBjb25zdCB1OCB2YWxfZGNfY2hyb21pbmFuY2VbXSA9IHsKKwkwLCAxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCwgMTEKK307CisKK3N0YXRpYyBjb25zdCB1OCBiaXRzX2FjX2x1bWluYW5jZVtdID0geworCTAsIDAsIDIsIDEsIDMsIDMsIDIsIDQsIDMsIDUsIDUsIDQsIDQsIDAsIDAsIDEsIDB4N2QKK307CisKK3N0YXRpYyBjb25zdCB1OCB2YWxfYWNfbHVtaW5hbmNlW10gPSB7CisJMHgwMSwgMHgwMiwgMHgwMywgMHgwMCwgMHgwNCwgMHgxMSwgMHgwNSwgMHgxMiwKKwkweDIxLCAweDMxLCAweDQxLCAweDA2LCAweDEzLCAweDUxLCAweDYxLCAweDA3LAorCTB4MjIsIDB4NzEsIDB4MTQsIDB4MzIsIDB4ODEsIDB4OTEsIDB4YTEsIDB4MDgsCisJMHgyMywgMHg0MiwgMHhiMSwgMHhjMSwgMHgxNSwgMHg1MiwgMHhkMSwgMHhmMCwKKwkweDI0LCAweDMzLCAweDYyLCAweDcyLCAweDgyLCAweDA5LCAweDBhLCAweDE2LAorCTB4MTcsIDB4MTgsIDB4MTksIDB4MWEsIDB4MjUsIDB4MjYsIDB4MjcsIDB4MjgsCisJMHgyOSwgMHgyYSwgMHgzNCwgMHgzNSwgMHgzNiwgMHgzNywgMHgzOCwgMHgzOSwKKwkweDNhLCAweDQzLCAweDQ0LCAweDQ1LCAweDQ2LCAweDQ3LCAweDQ4LCAweDQ5LAorCTB4NGEsIDB4NTMsIDB4NTQsIDB4NTUsIDB4NTYsIDB4NTcsIDB4NTgsIDB4NTksCisJMHg1YSwgMHg2MywgMHg2NCwgMHg2NSwgMHg2NiwgMHg2NywgMHg2OCwgMHg2OSwKKwkweDZhLCAweDczLCAweDc0LCAweDc1LCAweDc2LCAweDc3LCAweDc4LCAweDc5LAorCTB4N2EsIDB4ODMsIDB4ODQsIDB4ODUsIDB4ODYsIDB4ODcsIDB4ODgsIDB4ODksCisJMHg4YSwgMHg5MiwgMHg5MywgMHg5NCwgMHg5NSwgMHg5NiwgMHg5NywgMHg5OCwKKwkweDk5LCAweDlhLCAweGEyLCAweGEzLCAweGE0LCAweGE1LCAweGE2LCAweGE3LAorCTB4YTgsIDB4YTksIDB4YWEsIDB4YjIsIDB4YjMsIDB4YjQsIDB4YjUsIDB4YjYsCisJMHhiNywgMHhiOCwgMHhiOSwgMHhiYSwgMHhjMiwgMHhjMywgMHhjNCwgMHhjNSwKKwkweGM2LCAweGM3LCAweGM4LCAweGM5LCAweGNhLCAweGQyLCAweGQzLCAweGQ0LAorCTB4ZDUsIDB4ZDYsIDB4ZDcsIDB4ZDgsIDB4ZDksIDB4ZGEsIDB4ZTEsIDB4ZTIsCisJMHhlMywgMHhlNCwgMHhlNSwgMHhlNiwgMHhlNywgMHhlOCwgMHhlOSwgMHhlYSwKKwkweGYxLCAweGYyLCAweGYzLCAweGY0LCAweGY1LCAweGY2LCAweGY3LCAweGY4LAorCTB4ZjksIDB4ZmEKK307CisKK3N0YXRpYyBjb25zdCB1OCBiaXRzX2FjX2Nocm9taW5hbmNlW10gPSB7CisJMCwgMCwgMiwgMSwgMiwgNCwgNCwgMywgNCwgNywgNSwgNCwgNCwgMCwgMSwgMiwgMHg3NworfTsKKworc3RhdGljIGNvbnN0IHU4IHZhbF9hY19jaHJvbWluYW5jZVtdID0geworCTB4MDAsIDB4MDEsIDB4MDIsIDB4MDMsIDB4MTEsIDB4MDQsIDB4MDUsIDB4MjEsCisJMHgzMSwgMHgwNiwgMHgxMiwgMHg0MSwgMHg1MSwgMHgwNywgMHg2MSwgMHg3MSwKKwkweDEzLCAweDIyLCAweDMyLCAweDgxLCAweDA4LCAweDE0LCAweDQyLCAweDkxLAorCTB4YTEsIDB4YjEsIDB4YzEsIDB4MDksIDB4MjMsIDB4MzMsIDB4NTIsIDB4ZjAsCisJMHgxNSwgMHg2MiwgMHg3MiwgMHhkMSwgMHgwYSwgMHgxNiwgMHgyNCwgMHgzNCwKKwkweGUxLCAweDI1LCAweGYxLCAweDE3LCAweDE4LCAweDE5LCAweDFhLCAweDI2LAorCTB4MjcsIDB4MjgsIDB4MjksIDB4MmEsIDB4MzUsIDB4MzYsIDB4MzcsIDB4MzgsCisJMHgzOSwgMHgzYSwgMHg0MywgMHg0NCwgMHg0NSwgMHg0NiwgMHg0NywgMHg0OCwKKwkweDQ5LCAweDRhLCAweDUzLCAweDU0LCAweDU1LCAweDU2LCAweDU3LCAweDU4LAorCTB4NTksIDB4NWEsIDB4NjMsIDB4NjQsIDB4NjUsIDB4NjYsIDB4NjcsIDB4NjgsCisJMHg2OSwgMHg2YSwgMHg3MywgMHg3NCwgMHg3NSwgMHg3NiwgMHg3NywgMHg3OCwKKwkweDc5LCAweDdhLCAweDgyLCAweDgzLCAweDg0LCAweDg1LCAweDg2LCAweDg3LAorCTB4ODgsIDB4ODksIDB4OGEsIDB4OTIsIDB4OTMsIDB4OTQsIDB4OTUsIDB4OTYsCisJMHg5NywgMHg5OCwgMHg5OSwgMHg5YSwgMHhhMiwgMHhhMywgMHhhNCwgMHhhNSwKKwkweGE2LCAweGE3LCAweGE4LCAweGE5LCAweGFhLCAweGIyLCAweGIzLCAweGI0LAorCTB4YjUsIDB4YjYsIDB4YjcsIDB4YjgsIDB4YjksIDB4YmEsIDB4YzIsIDB4YzMsCisJMHhjNCwgMHhjNSwgMHhjNiwgMHhjNywgMHhjOCwgMHhjOSwgMHhjYSwgMHhkMiwKKwkweGQzLCAweGQ0LCAweGQ1LCAweGQ2LCAweGQ3LCAweGQ4LCAweGQ5LCAweGRhLAorCTB4ZTIsIDB4ZTMsIDB4ZTQsIDB4ZTUsIDB4ZTYsIDB4ZTcsIDB4ZTgsIDB4ZTksCisJMHhlYSwgMHhmMiwgMHhmMywgMHhmNCwgMHhmNSwgMHhmNiwgMHhmNywgMHhmOCwKKwkweGY5LCAweGZhCit9OworCisvKiBaaWctemFnIG1hcHBpbmcgZm9yIHF1YW50IHRhYmxlCisgKgorICogT0ssIGxldCdzIGRvIHRoaXMgbWFwcGluZyBvbiB0aGUgYWN0dWFsIHRhYmxlIGFib3ZlIHNvIGl0IGRvZXNuJ3QgaGF2ZQorICogdG8gYmUgZG9uZSBvbiB0aGUgZmx5LgorICovCitzdGF0aWMgY29uc3QgaW50IHp6WzY0XSA9IHsKKwkwLCAgIDEsICA4LCAxNiwgIDksICAyLCAgMywgMTAsIDE3LCAyNCwgMzIsIDI1LCAxOCwgMTEsICA0LCAgNSwKKwkxMiwgMTksIDI2LCAzMywgNDAsIDQ4LCA0MSwgMzQsIDI3LCAyMCwgMTMsICA2LCAgNywgMTQsIDIxLCAyOCwKKwkzNSwgNDIsIDQ5LCA1NiwgNTcsIDUwLCA0MywgMzYsIDI5LCAyMiwgMTUsIDIzLCAzMCwgMzcsIDQ0LCA1MSwKKwk1OCwgNTksIDUyLCA0NSwgMzgsIDMxLCAzOSwgNDYsIDUzLCA2MCwgNjEsIDU0LCA0NywgNTUsIDYyLCA2MworfTsKKworc3RhdGljIGludCBjb3B5X3BhY2thZ2VzKHUxNiAqZGVzdCwgdTE2ICpzcmMsIGludCBwa2dfY250LCBpbnQgc3BhY2UpCit7CisJaW50IGksIGNudCA9IHBrZ19jbnQgKiAzMjsKKworCWlmIChzcGFjZSA8IGNudCkKKwkJcmV0dXJuIC0xOworCisJZm9yIChpID0gMDsgaSA8IGNudDsgKytpKQorCQlkZXN0W2ldID0gX19jcHVfdG9fbGUxNihzcmNbaV0pOworCisJcmV0dXJuIGNudDsKK30KKworc3RhdGljIGludCBtanBlZ19mcmFtZV9oZWFkZXIoc3RydWN0IGdvNzAwNyAqZ28sIHVuc2lnbmVkIGNoYXIgKmJ1ZiwgaW50IHEpCit7CisJaW50IGksIHAgPSAwOworCisJYnVmW3ArK10gPSAweGZmOworCWJ1ZltwKytdID0gMHhkODsKKwlidWZbcCsrXSA9IDB4ZmY7CisJYnVmW3ArK10gPSAweGRiOworCWJ1ZltwKytdID0gMDsKKwlidWZbcCsrXSA9IDIgKyA2NTsKKwlidWZbcCsrXSA9IDA7CisJYnVmW3ArK10gPSBkZWZhdWx0X2ludHJhX3F1YW50X3RhYmxlWzBdOworCWZvciAoaSA9IDE7IGkgPCA2NDsgKytpKQorCQkvKiBidWZbcCsrXSA9IChkZWZhdWx0X2ludHJhX3F1YW50X3RhYmxlW2ldICogcSkgPj4gMzsgKi8KKwkJYnVmW3ArK10gPSAoZGVmYXVsdF9pbnRyYV9xdWFudF90YWJsZVt6eltpXV0gKiBxKSA+PiAzOworCWJ1ZltwKytdID0gMHhmZjsKKwlidWZbcCsrXSA9IDB4YzA7CisJYnVmW3ArK10gPSAwOworCWJ1ZltwKytdID0gMTc7CisJYnVmW3ArK10gPSA4OworCWJ1ZltwKytdID0gZ28tPmhlaWdodCA+PiA4OworCWJ1ZltwKytdID0gZ28tPmhlaWdodCAmIDB4ZmY7CisJYnVmW3ArK10gPSBnby0+d2lkdGggPj4gODsKKwlidWZbcCsrXSA9IGdvLT53aWR0aCAmIDB4ZmY7CisJYnVmW3ArK10gPSAzOworCWJ1ZltwKytdID0gMTsKKwlidWZbcCsrXSA9IDB4MjI7CisJYnVmW3ArK10gPSAwOworCWJ1ZltwKytdID0gMjsKKwlidWZbcCsrXSA9IDB4MTE7CisJYnVmW3ArK10gPSAwOworCWJ1ZltwKytdID0gMzsKKwlidWZbcCsrXSA9IDB4MTE7CisJYnVmW3ArK10gPSAwOworCWJ1ZltwKytdID0gMHhmZjsKKwlidWZbcCsrXSA9IDB4YzQ7CisJYnVmW3ArK10gPSA0MTggPj4gODsKKwlidWZbcCsrXSA9IDQxOCAmIDB4ZmY7CisJYnVmW3ArK10gPSAweDAwOworCW1lbWNweShidWYgKyBwLCBiaXRzX2RjX2x1bWluYW5jZSArIDEsIDE2KTsKKwlwICs9IDE2OworCW1lbWNweShidWYgKyBwLCB2YWxfZGNfbHVtaW5hbmNlLCBzaXplb2YodmFsX2RjX2x1bWluYW5jZSkpOworCXAgKz0gc2l6ZW9mKHZhbF9kY19sdW1pbmFuY2UpOworCWJ1ZltwKytdID0gMHgwMTsKKwltZW1jcHkoYnVmICsgcCwgYml0c19kY19jaHJvbWluYW5jZSArIDEsIDE2KTsKKwlwICs9IDE2OworCW1lbWNweShidWYgKyBwLCB2YWxfZGNfY2hyb21pbmFuY2UsIHNpemVvZih2YWxfZGNfY2hyb21pbmFuY2UpKTsKKwlwICs9IHNpemVvZih2YWxfZGNfY2hyb21pbmFuY2UpOworCWJ1ZltwKytdID0gMHgxMDsKKwltZW1jcHkoYnVmICsgcCwgYml0c19hY19sdW1pbmFuY2UgKyAxLCAxNik7CisJcCArPSAxNjsKKwltZW1jcHkoYnVmICsgcCwgdmFsX2FjX2x1bWluYW5jZSwgc2l6ZW9mKHZhbF9hY19sdW1pbmFuY2UpKTsKKwlwICs9IHNpemVvZih2YWxfYWNfbHVtaW5hbmNlKTsKKwlidWZbcCsrXSA9IDB4MTE7CisJbWVtY3B5KGJ1ZiArIHAsIGJpdHNfYWNfY2hyb21pbmFuY2UgKyAxLCAxNik7CisJcCArPSAxNjsKKwltZW1jcHkoYnVmICsgcCwgdmFsX2FjX2Nocm9taW5hbmNlLCBzaXplb2YodmFsX2FjX2Nocm9taW5hbmNlKSk7CisJcCArPSBzaXplb2YodmFsX2FjX2Nocm9taW5hbmNlKTsKKwlidWZbcCsrXSA9IDB4ZmY7CisJYnVmW3ArK10gPSAweGRhOworCWJ1ZltwKytdID0gMDsKKwlidWZbcCsrXSA9IDEyOworCWJ1ZltwKytdID0gMzsKKwlidWZbcCsrXSA9IDE7CisJYnVmW3ArK10gPSAweDAwOworCWJ1ZltwKytdID0gMjsKKwlidWZbcCsrXSA9IDB4MTE7CisJYnVmW3ArK10gPSAzOworCWJ1ZltwKytdID0gMHgxMTsKKwlidWZbcCsrXSA9IDA7CisJYnVmW3ArK10gPSA2MzsKKwlidWZbcCsrXSA9IDA7CisJcmV0dXJuIHA7Cit9CisKK3N0YXRpYyBpbnQgZ2VuX21qcGVnaGRyX3RvX3BhY2thZ2Uoc3RydWN0IGdvNzAwNyAqZ28sIHUxNiAqY29kZSwgaW50IHNwYWNlKQoreworCXU4ICpidWY7CisJdTE2IG1lbSA9IDB4M2UwMDsKKwl1bnNpZ25lZCBpbnQgYWRkciA9IDB4MTk7CisJaW50IHNpemUgPSAwLCBpLCBvZmYgPSAwLCBjaHVuazsKKworCWJ1ZiA9IGttYWxsb2MoNDA5NiwgR0ZQX0tFUk5FTCk7CisJaWYgKGJ1ZiA9PSBOVUxMKSB7CisJCXByaW50ayhLRVJOX0VSUiAiZ283MDA3OiB1bmFibGUgdG8gYWxsb2NhdGUgNDA5NiBieXRlcyBmb3IgIgorCQkJCSJmaXJtd2FyZSBjb25zdHJ1Y3Rpb25cbiIpOworCQlyZXR1cm4gLTE7CisJfQorCW1lbXNldChidWYsIDAsIDQwOTYpOworCisJZm9yIChpID0gMTsgaSA8IDMyOyArK2kpIHsKKwkJbWpwZWdfZnJhbWVfaGVhZGVyKGdvLCBidWYgKyBzaXplLCBpKTsKKwkJc2l6ZSArPSA4MDsKKwl9CisJY2h1bmsgPSBtanBlZ19mcmFtZV9oZWFkZXIoZ28sIGJ1ZiArIHNpemUsIDEpOworCW1lbW1vdmUoYnVmICsgc2l6ZSwgYnVmICsgc2l6ZSArIDgwLCBjaHVuayAtIDgwKTsKKwlzaXplICs9IGNodW5rIC0gODA7CisKKwlmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgaSArPSBjaHVuayAqIDIpIHsKKwkJaWYgKHNwYWNlIC0gb2ZmIDwgMzIpIHsKKwkJCW9mZiA9IC0xOworCQkJZ290byBkb25lOworCQl9CisKKwkJY29kZVtvZmYgKyAxXSA9IF9fY3B1X3RvX2xlMTYoMHg4MDAwIHwgbWVtKTsKKworCQljaHVuayA9IDI4OworCQlpZiAobWVtICsgY2h1bmsgPiAweDQwMDApCisJCQljaHVuayA9IDB4NDAwMCAtIG1lbTsKKwkJaWYgKGkgKyAyICogY2h1bmsgPiBzaXplKQorCQkJY2h1bmsgPSAoc2l6ZSAtIGkpIC8gMjsKKworCQlpZiAoY2h1bmsgPCAyOCkgeworCQkJY29kZVtvZmZdID0gX19jcHVfdG9fbGUxNigweDQwMDAgfCBjaHVuayk7CisJCQljb2RlW29mZiArIDMxXSA9IF9fY3B1X3RvX2xlMTYoYWRkcisrKTsKKwkJCW1lbSA9IDB4M2UwMDsKKwkJfSBlbHNlIHsKKwkJCWNvZGVbb2ZmXSA9IF9fY3B1X3RvX2xlMTYoMHgxMDAwIHwgMjgpOworCQkJY29kZVtvZmYgKyAzMV0gPSAwOworCQkJbWVtICs9IDI4OworCQl9CisKKwkJbWVtY3B5KCZjb2RlW29mZiArIDJdLCBidWYgKyBpLCBjaHVuayAqIDIpOworCQlvZmYgKz0gMzI7CisJfQorZG9uZToKKwlrZnJlZShidWYpOworCXJldHVybiBvZmY7Cit9CisKK3N0YXRpYyBpbnQgbXBlZzFfZnJhbWVfaGVhZGVyKHN0cnVjdCBnbzcwMDcgKmdvLCB1bnNpZ25lZCBjaGFyICpidWYsCisJCWludCBtb2R1bG8sIGludCBwaWN0X3N0cnVjdCwgZW51bSBtcGVnX2ZyYW1lX3R5cGUgZnJhbWUpCit7CisJaW50IGksIGosIG1iX2NvZGUsIG1iX2xlbjsKKwlpbnQgcm93cyA9IGdvLT5pbnRlcmxhY2VfY29kaW5nID8gZ28tPmhlaWdodCAvIDMyIDogZ28tPmhlaWdodCAvIDE2OworCUNPREVfR0VOKGMsIGJ1ZiArIDYpOworCisJc3dpdGNoIChmcmFtZSkgeworCWNhc2UgUEZSQU1FOgorCQltYl9jb2RlID0gMHgxOworCQltYl9sZW4gPSAzOworCQlicmVhazsKKwljYXNlIEJGUkFNRV9QUkU6CisJCW1iX2NvZGUgPSAweDI7CisJCW1iX2xlbiA9IDQ7CisJCWJyZWFrOworCWNhc2UgQkZSQU1FX1BPU1Q6CisJCW1iX2NvZGUgPSAweDI7CisJCW1iX2xlbiA9IDM7CisJCWJyZWFrOworCWNhc2UgQkZSQU1FX0JJRElSOgorCQltYl9jb2RlID0gMHgyOworCQltYl9sZW4gPSAyOworCQlicmVhazsKKwlkZWZhdWx0OiAvKiBrZWVwIHRoZSBjb21waWxlciBoYXBweSAqLworCQltYl9jb2RlID0gbWJfbGVuID0gMDsKKwkJYnJlYWs7CisJfQorCisJQ09ERV9BREQoYywgZnJhbWUgPT0gUEZSQU1FID8gMHgyIDogMHgzLCAxMyk7CisJQ09ERV9BREQoYywgMHhmZmZmLCAxNik7CisJQ09ERV9BREQoYywgZ28tPmZvcm1hdCA9PSBHTzcwMDdfRk9STUFUX01QRUcyID8gMHg3IDogMHg0LCA0KTsKKwlpZiAoZnJhbWUgIT0gUEZSQU1FKQorCQlDT0RFX0FERChjLCBnby0+Zm9ybWF0ID09IEdPNzAwN19GT1JNQVRfTVBFRzIgPyAweDcgOiAweDQsIDQpOworCWVsc2UKKwkJQ09ERV9BREQoYywgMCwgNCk7IC8qIElzIHRoaXMgc3VwcG9zZWQgdG8gYmUgaGVyZT8/ICovCisJQ09ERV9BREQoYywgMCwgMyk7IC8qIFdoYXQgaXMgdGhpcz8/ICovCisJLyogQnl0ZS1hbGlnbiB3aXRoIHplcm9zICovCisJaiA9IDggLSAoQ09ERV9MRU5HVEgoYykgJSA4KTsKKwlpZiAoaiAhPSA4KQorCQlDT0RFX0FERChjLCAwLCBqKTsKKworCWlmIChnby0+Zm9ybWF0ID09IEdPNzAwN19GT1JNQVRfTVBFRzIpIHsKKwkJQ09ERV9BREQoYywgMHgxLCAyNCk7CisJCUNPREVfQUREKGMsIDB4YjUsIDgpOworCQlDT0RFX0FERChjLCAweDg0NCwgMTIpOworCQlDT0RFX0FERChjLCBmcmFtZSA9PSBQRlJBTUUgPyAweGZmIDogMHg0NCwgOCk7CisJCWlmIChnby0+aW50ZXJsYWNlX2NvZGluZykgeworCQkJQ09ERV9BREQoYywgcGljdF9zdHJ1Y3QsIDQpOworCQkJaWYgKGdvLT5kdmRfbW9kZSkKKwkJCQlDT0RFX0FERChjLCAweDAwMCwgMTEpOworCQkJZWxzZQorCQkJCUNPREVfQUREKGMsIDB4MjAwLCAxMSk7CisJCX0gZWxzZSB7CisJCQlDT0RFX0FERChjLCAweDMsIDQpOworCQkJQ09ERV9BREQoYywgMHgyMGMsIDExKTsKKwkJfQorCQkvKiBCeXRlLWFsaWduIHdpdGggemVyb3MgKi8KKwkJaiA9IDggLSAoQ09ERV9MRU5HVEgoYykgJSA4KTsKKwkJaWYgKGogIT0gOCkKKwkJCUNPREVfQUREKGMsIDAsIGopOworCX0KKworCWZvciAoaSA9IDA7IGkgPCByb3dzOyArK2kpIHsKKwkJQ09ERV9BREQoYywgMSwgMjQpOworCQlDT0RFX0FERChjLCBpICsgMSwgOCk7CisJCUNPREVfQUREKGMsIDB4MiwgNik7CisJCUNPREVfQUREKGMsIDB4MSwgMSk7CisJCUNPREVfQUREKGMsIG1iX2NvZGUsIG1iX2xlbik7CisJCWlmIChnby0+aW50ZXJsYWNlX2NvZGluZykgeworCQkJQ09ERV9BREQoYywgMHgxLCAyKTsKKwkJCUNPREVfQUREKGMsIHBpY3Rfc3RydWN0ID09IDEgPyAweDAgOiAweDEsIDEpOworCQl9CisJCWlmIChmcmFtZSA9PSBCRlJBTUVfQklESVIpIHsKKwkJCUNPREVfQUREKGMsIDB4MywgMik7CisJCQlpZiAoZ28tPmludGVybGFjZV9jb2RpbmcpCisJCQkJQ09ERV9BREQoYywgcGljdF9zdHJ1Y3QgPT0gMSA/IDB4MCA6IDB4MSwgMSk7CisJCX0KKwkJQ09ERV9BREQoYywgMHgzLCAyKTsKKwkJZm9yIChqID0gKGdvLT53aWR0aCA+PiA0KSAtIDI7IGogPj0gMzM7IGogLT0gMzMpCisJCQlDT0RFX0FERChjLCAweDgsIDExKTsKKwkJQ09ERV9BREQoYywgYWRkcmluY3RhYltqXVswXSwgYWRkcmluY3RhYltqXVsxXSk7CisJCUNPREVfQUREKGMsIG1iX2NvZGUsIG1iX2xlbik7CisJCWlmIChnby0+aW50ZXJsYWNlX2NvZGluZykgeworCQkJQ09ERV9BREQoYywgMHgxLCAyKTsKKwkJCUNPREVfQUREKGMsIHBpY3Rfc3RydWN0ID09IDEgPyAweDAgOiAweDEsIDEpOworCQl9CisJCWlmIChmcmFtZSA9PSBCRlJBTUVfQklESVIpIHsKKwkJCUNPREVfQUREKGMsIDB4MywgMik7CisJCQlpZiAoZ28tPmludGVybGFjZV9jb2RpbmcpCisJCQkJQ09ERV9BREQoYywgcGljdF9zdHJ1Y3QgPT0gMSA/IDB4MCA6IDB4MSwgMSk7CisJCX0KKwkJQ09ERV9BREQoYywgMHgzLCAyKTsKKworCQkvKiBCeXRlLWFsaWduIHdpdGggemVyb3MgKi8KKwkJaiA9IDggLSAoQ09ERV9MRU5HVEgoYykgJSA4KTsKKwkJaWYgKGogIT0gOCkKKwkJCUNPREVfQUREKGMsIDAsIGopOworCX0KKworCWkgPSBDT0RFX0xFTkdUSChjKSArIDQgKiA4OworCWJ1ZlsyXSA9IDB4MDA7CisJYnVmWzNdID0gMHgwMDsKKwlidWZbNF0gPSAweDAxOworCWJ1Zls1XSA9IDB4MDA7CisJcmV0dXJuIGk7Cit9CisKK3N0YXRpYyBpbnQgbXBlZzFfc2VxdWVuY2VfaGVhZGVyKHN0cnVjdCBnbzcwMDcgKmdvLCB1bnNpZ25lZCBjaGFyICpidWYsIGludCBleHQpCit7CisJaW50IGksIGFzcGVjdF9yYXRpbywgcGljdHVyZV9yYXRlOworCUNPREVfR0VOKGMsIGJ1ZiArIDYpOworCisJaWYgKGdvLT5mb3JtYXQgPT0gR083MDA3X0ZPUk1BVF9NUEVHMSkgeworCQlzd2l0Y2ggKGdvLT5hc3BlY3RfcmF0aW8pIHsKKwkJY2FzZSBHTzcwMDdfUkFUSU9fNF8zOgorCQkJYXNwZWN0X3JhdGlvID0gZ28tPnN0YW5kYXJkID09IEdPNzAwN19TVERfTlRTQyA/IDMgOiAyOworCQkJYnJlYWs7CisJCWNhc2UgR083MDA3X1JBVElPXzE2Xzk6CisJCQlhc3BlY3RfcmF0aW8gPSBnby0+c3RhbmRhcmQgPT0gR083MDA3X1NURF9OVFNDID8gNSA6IDQ7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWFzcGVjdF9yYXRpbyA9IDE7CisJCQlicmVhazsKKwkJfQorCX0gZWxzZSB7CisJCXN3aXRjaCAoZ28tPmFzcGVjdF9yYXRpbykgeworCQljYXNlIEdPNzAwN19SQVRJT180XzM6CisJCQlhc3BlY3RfcmF0aW8gPSAyOworCQkJYnJlYWs7CisJCWNhc2UgR083MDA3X1JBVElPXzE2Xzk6CisJCQlhc3BlY3RfcmF0aW8gPSAzOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlhc3BlY3RfcmF0aW8gPSAxOworCQkJYnJlYWs7CisJCX0KKwl9CisJc3dpdGNoIChnby0+c2Vuc29yX2ZyYW1lcmF0ZSkgeworCWNhc2UgMjQwMDA6CisJCXBpY3R1cmVfcmF0ZSA9IDE7CisJCWJyZWFrOworCWNhc2UgMjQwMjQ6CisJCXBpY3R1cmVfcmF0ZSA9IDI7CisJCWJyZWFrOworCWNhc2UgMjUwMjU6CisJCXBpY3R1cmVfcmF0ZSA9IGdvLT5pbnRlcmxhY2VfY29kaW5nID8gNiA6IDM7CisJCWJyZWFrOworCWNhc2UgMzAwMDA6CisJCXBpY3R1cmVfcmF0ZSA9IGdvLT5pbnRlcmxhY2VfY29kaW5nID8gNyA6IDQ7CisJCWJyZWFrOworCWNhc2UgMzAwMzA6CisJCXBpY3R1cmVfcmF0ZSA9IGdvLT5pbnRlcmxhY2VfY29kaW5nID8gOCA6IDU7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXBpY3R1cmVfcmF0ZSA9IDU7IC8qIDMwIGZwcyBzZWVtcyBsaWtlIGEgcmVhc29uYWJsZSBkZWZhdWx0ICovCisJCWJyZWFrOworCX0KKworCUNPREVfQUREKGMsIGdvLT53aWR0aCwgMTIpOworCUNPREVfQUREKGMsIGdvLT5oZWlnaHQsIDEyKTsKKwlDT0RFX0FERChjLCBhc3BlY3RfcmF0aW8sIDQpOworCUNPREVfQUREKGMsIHBpY3R1cmVfcmF0ZSwgNCk7CisJQ09ERV9BREQoYywgZ28tPmZvcm1hdCA9PSBHTzcwMDdfRk9STUFUX01QRUcyID8gMjAwMDAgOiAweDNmZmZmLCAxOCk7CisJQ09ERV9BREQoYywgMSwgMSk7CisJQ09ERV9BREQoYywgZ28tPmZvcm1hdCA9PSBHTzcwMDdfRk9STUFUX01QRUcyID8gMTEyIDogMjAsIDEwKTsKKwlDT0RFX0FERChjLCAwLCAzKTsKKworCS8qIEJ5dGUtYWxpZ24gd2l0aCB6ZXJvcyAqLworCWkgPSA4IC0gKENPREVfTEVOR1RIKGMpICUgOCk7CisJaWYgKGkgIT0gOCkKKwkJQ09ERV9BREQoYywgMCwgaSk7CisKKwlpZiAoZ28tPmZvcm1hdCA9PSBHTzcwMDdfRk9STUFUX01QRUcyKSB7CisJCUNPREVfQUREKGMsIDB4MSwgMjQpOworCQlDT0RFX0FERChjLCAweGI1LCA4KTsKKwkJQ09ERV9BREQoYywgMHgxNDgsIDEyKTsKKwkJaWYgKGdvLT5pbnRlcmxhY2VfY29kaW5nKQorCQkJQ09ERV9BREQoYywgMHgyMDAwMSwgMjApOworCQllbHNlCisJCQlDT0RFX0FERChjLCAweGEwMDAxLCAyMCk7CisJCUNPREVfQUREKGMsIDAsIDE2KTsKKworCQkvKiBCeXRlLWFsaWduIHdpdGggemVyb3MgKi8KKwkJaSA9IDggLSAoQ09ERV9MRU5HVEgoYykgJSA4KTsKKwkJaWYgKGkgIT0gOCkKKwkJCUNPREVfQUREKGMsIDAsIGkpOworCisJCWlmIChleHQpIHsKKwkJCUNPREVfQUREKGMsIDB4MSwgMjQpOworCQkJQ09ERV9BREQoYywgMHhiNTIsIDEyKTsKKwkJCUNPREVfQUREKGMsIGdvLT5zdGFuZGFyZCA9PSBHTzcwMDdfU1REX05UU0MgPyAyIDogMSwgMyk7CisJCQlDT0RFX0FERChjLCAweDEwNSwgOSk7CisJCQlDT0RFX0FERChjLCAweDUwNSwgMTYpOworCQkJQ09ERV9BREQoYywgZ28tPndpZHRoLCAxNCk7CisJCQlDT0RFX0FERChjLCAxLCAxKTsKKwkJCUNPREVfQUREKGMsIGdvLT5oZWlnaHQsIDE0KTsKKworCQkJLyogQnl0ZS1hbGlnbiB3aXRoIHplcm9zICovCisJCQlpID0gOCAtIChDT0RFX0xFTkdUSChjKSAlIDgpOworCQkJaWYgKGkgIT0gOCkKKwkJCQlDT0RFX0FERChjLCAwLCBpKTsKKwkJfQorCX0KKworCWkgPSBDT0RFX0xFTkdUSChjKSArIDQgKiA4OworCWJ1ZlswXSA9IGkgJiAweGZmOworCWJ1ZlsxXSA9IGkgPj4gODsKKwlidWZbMl0gPSAweDAwOworCWJ1ZlszXSA9IDB4MDA7CisJYnVmWzRdID0gMHgwMTsKKwlidWZbNV0gPSAweGIzOworCXJldHVybiBpOworfQorCitzdGF0aWMgaW50IGdlbl9tcGVnMWhkcl90b19wYWNrYWdlKHN0cnVjdCBnbzcwMDcgKmdvLAorCQkJCQl1MTYgKmNvZGUsIGludCBzcGFjZSwgaW50ICpmcmFtZWxlbikKK3sKKwl1OCAqYnVmOworCXUxNiBtZW0gPSAweDNlMDA7CisJdW5zaWduZWQgaW50IGFkZHIgPSAweDE5OworCWludCBpLCBvZmYgPSAwLCBjaHVuazsKKworCWJ1ZiA9IGttYWxsb2MoNTEyMCwgR0ZQX0tFUk5FTCk7CisJaWYgKGJ1ZiA9PSBOVUxMKSB7CisJCXByaW50ayhLRVJOX0VSUiAiZ283MDA3OiB1bmFibGUgdG8gYWxsb2NhdGUgNTEyMCBieXRlcyBmb3IgIgorCQkJCSJmaXJtd2FyZSBjb25zdHJ1Y3Rpb25cbiIpOworCQlyZXR1cm4gLTE7CisJfQorCW1lbXNldChidWYsIDAsIDUxMjApOworCWZyYW1lbGVuWzBdID0gbXBlZzFfZnJhbWVfaGVhZGVyKGdvLCBidWYsIDAsIDEsIFBGUkFNRSk7CisJaWYgKGdvLT5pbnRlcmxhY2VfY29kaW5nKQorCQlmcmFtZWxlblswXSArPSBtcGVnMV9mcmFtZV9oZWFkZXIoZ28sIGJ1ZiArIGZyYW1lbGVuWzBdIC8gOCwKKwkJCQkJCQkwLCAyLCBQRlJBTUUpOworCWJ1ZlswXSA9IGZyYW1lbGVuWzBdICYgMHhmZjsKKwlidWZbMV0gPSBmcmFtZWxlblswXSA+PiA4OworCWkgPSAzNjg7CisJZnJhbWVsZW5bMV0gPSBtcGVnMV9mcmFtZV9oZWFkZXIoZ28sIGJ1ZiArIGksIDAsIDEsIEJGUkFNRV9QUkUpOworCWlmIChnby0+aW50ZXJsYWNlX2NvZGluZykKKwkJZnJhbWVsZW5bMV0gKz0gbXBlZzFfZnJhbWVfaGVhZGVyKGdvLCBidWYgKyBpICsgZnJhbWVsZW5bMV0gLyA4LAorCQkJCQkJCTAsIDIsIEJGUkFNRV9QUkUpOworCWJ1ZltpXSA9IGZyYW1lbGVuWzFdICYgMHhmZjsKKwlidWZbaSArIDFdID0gZnJhbWVsZW5bMV0gPj4gODsKKwlpICs9IDE2MzI7CisJZnJhbWVsZW5bMl0gPSBtcGVnMV9mcmFtZV9oZWFkZXIoZ28sIGJ1ZiArIGksIDAsIDEsIEJGUkFNRV9QT1NUKTsKKwlpZiAoZ28tPmludGVybGFjZV9jb2RpbmcpCisJCWZyYW1lbGVuWzJdICs9IG1wZWcxX2ZyYW1lX2hlYWRlcihnbywgYnVmICsgaSArIGZyYW1lbGVuWzJdIC8gOCwKKwkJCQkJCQkwLCAyLCBCRlJBTUVfUE9TVCk7CisJYnVmW2ldID0gZnJhbWVsZW5bMl0gJiAweGZmOworCWJ1ZltpICsgMV0gPSBmcmFtZWxlblsyXSA+PiA4OworCWkgKz0gMTQzMjsKKwlmcmFtZWxlblszXSA9IG1wZWcxX2ZyYW1lX2hlYWRlcihnbywgYnVmICsgaSwgMCwgMSwgQkZSQU1FX0JJRElSKTsKKwlpZiAoZ28tPmludGVybGFjZV9jb2RpbmcpCisJCWZyYW1lbGVuWzNdICs9IG1wZWcxX2ZyYW1lX2hlYWRlcihnbywgYnVmICsgaSArIGZyYW1lbGVuWzNdIC8gOCwKKwkJCQkJCQkwLCAyLCBCRlJBTUVfQklESVIpOworCWJ1ZltpXSA9IGZyYW1lbGVuWzNdICYgMHhmZjsKKwlidWZbaSArIDFdID0gZnJhbWVsZW5bM10gPj4gODsKKwlpICs9IDE2MzIgKyAxNjsKKwltcGVnMV9zZXF1ZW5jZV9oZWFkZXIoZ28sIGJ1ZiArIGksIDApOworCWkgKz0gNDA7CisJZm9yIChpID0gMDsgaSA8IDUxMjA7IGkgKz0gY2h1bmsgKiAyKSB7CisJCWlmIChzcGFjZSAtIG9mZiA8IDMyKSB7CisJCQlvZmYgPSAtMTsKKwkJCWdvdG8gZG9uZTsKKwkJfQorCisJCWNvZGVbb2ZmICsgMV0gPSBfX2NwdV90b19sZTE2KDB4ODAwMCB8IG1lbSk7CisKKwkJY2h1bmsgPSAyODsKKwkJaWYgKG1lbSArIGNodW5rID4gMHg0MDAwKQorCQkJY2h1bmsgPSAweDQwMDAgLSBtZW07CisJCWlmIChpICsgMiAqIGNodW5rID4gNTEyMCkKKwkJCWNodW5rID0gKDUxMjAgLSBpKSAvIDI7CisKKwkJaWYgKGNodW5rIDwgMjgpIHsKKwkJCWNvZGVbb2ZmXSA9IF9fY3B1X3RvX2xlMTYoMHg0MDAwIHwgY2h1bmspOworCQkJY29kZVtvZmYgKyAzMV0gPSBfX2NwdV90b19sZTE2KGFkZHIpOworCQkJaWYgKG1lbSArIGNodW5rID09IDB4NDAwMCkgeworCQkJCW1lbSA9IDB4M2UwMDsKKwkJCQkrK2FkZHI7CisJCQl9CisJCX0gZWxzZSB7CisJCQljb2RlW29mZl0gPSBfX2NwdV90b19sZTE2KDB4MTAwMCB8IDI4KTsKKwkJCWNvZGVbb2ZmICsgMzFdID0gMDsKKwkJCW1lbSArPSAyODsKKwkJfQorCisJCW1lbWNweSgmY29kZVtvZmYgKyAyXSwgYnVmICsgaSwgY2h1bmsgKiAyKTsKKwkJb2ZmICs9IDMyOworCX0KK2RvbmU6CisJa2ZyZWUoYnVmKTsKKwlyZXR1cm4gb2ZmOworfQorCitzdGF0aWMgaW50IHZ0aV9iaXRsZW4oc3RydWN0IGdvNzAwNyAqZ28pCit7CisJdW5zaWduZWQgaW50IGksIG1heF90aW1lX2luY3IgPSBnby0+c2Vuc29yX2ZyYW1lcmF0ZSAvIGdvLT5mcHNfc2NhbGU7CisKKwlmb3IgKGkgPSAzMTsgKG1heF90aW1lX2luY3IgJiAoKDEgPDwgaSkgLSAxKSkgPT0gbWF4X3RpbWVfaW5jcjsgLS1pKTsKKwlyZXR1cm4gaSArIDE7Cit9CisKK3N0YXRpYyBpbnQgbXBlZzRfZnJhbWVfaGVhZGVyKHN0cnVjdCBnbzcwMDcgKmdvLCB1bnNpZ25lZCBjaGFyICpidWYsCisJCWludCBtb2R1bG8sIGVudW0gbXBlZ19mcmFtZV90eXBlIGZyYW1lKQoreworCWludCBpOworCUNPREVfR0VOKGMsIGJ1ZiArIDYpOworCWludCBtYl9jb3VudCA9IChnby0+d2lkdGggPj4gNCkgKiAoZ28tPmhlaWdodCA+PiA0KTsKKworCUNPREVfQUREKGMsIGZyYW1lID09IFBGUkFNRSA/IDB4MSA6IDB4MiwgMik7CisJaWYgKG1vZHVsbykKKwkJQ09ERV9BREQoYywgMHgxLCAxKTsKKwlDT0RFX0FERChjLCAweDEsIDIpOworCUNPREVfQUREKGMsIDAsIHZ0aV9iaXRsZW4oZ28pKTsKKwlDT0RFX0FERChjLCAweDMsIDIpOworCWlmIChmcmFtZSA9PSBQRlJBTUUpCisJCUNPREVfQUREKGMsIDAsIDEpOworCUNPREVfQUREKGMsIDB4YywgMTEpOworCWlmIChmcmFtZSAhPSBQRlJBTUUpCisJCUNPREVfQUREKGMsIDB4NCwgMyk7CisJaWYgKGZyYW1lICE9IEJGUkFNRV9FTVBUWSkgeworCQlmb3IgKGkgPSAwOyBpIDwgbWJfY291bnQ7ICsraSkgeworCQkJc3dpdGNoIChmcmFtZSkgeworCQkJY2FzZSBQRlJBTUU6CisJCQkJQ09ERV9BREQoYywgMHgxLCAxKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgQkZSQU1FX1BSRToKKwkJCQlDT0RFX0FERChjLCAweDQ3LCA4KTsKKwkJCQlicmVhazsKKwkJCWNhc2UgQkZSQU1FX1BPU1Q6CisJCQkJQ09ERV9BREQoYywgMHgyNywgNyk7CisJCQkJYnJlYWs7CisJCQljYXNlIEJGUkFNRV9CSURJUjoKKwkJCQlDT0RFX0FERChjLCAweDVmLCA4KTsKKwkJCQlicmVhazsKKwkJCWNhc2UgQkZSQU1FX0VNUFRZOiAvKiBrZWVwIGNvbXBpbGVyIHF1aWV0ICovCisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwl9CisKKwkvKiBCeXRlLWFsaWduIHdpdGggYSB6ZXJvIGZvbGxvd2VkIGJ5IG9uZXMgKi8KKwlpID0gOCAtIChDT0RFX0xFTkdUSChjKSAlIDgpOworCUNPREVfQUREKGMsIDAsIDEpOworCUNPREVfQUREKGMsICgxIDw8IChpIC0gMSkpIC0gMSwgaSAtIDEpOworCisJaSA9IENPREVfTEVOR1RIKGMpICsgNCAqIDg7CisJYnVmWzBdID0gaSAmIDB4ZmY7CisJYnVmWzFdID0gaSA+PiA4OworCWJ1ZlsyXSA9IDB4MDA7CisJYnVmWzNdID0gMHgwMDsKKwlidWZbNF0gPSAweDAxOworCWJ1Zls1XSA9IDB4YjY7CisJcmV0dXJuIGk7Cit9CisKK3N0YXRpYyBpbnQgbXBlZzRfc2VxdWVuY2VfaGVhZGVyKHN0cnVjdCBnbzcwMDcgKmdvLCB1bnNpZ25lZCBjaGFyICpidWYsIGludCBleHQpCit7CisJY29uc3QgdW5zaWduZWQgY2hhciBoZWFkW10gPSB7IDB4MDAsIDB4MDAsIDB4MDEsIDB4YjAsIGdvLT5wYWxpLAorCQkweDAwLCAweDAwLCAweDAxLCAweGI1LCAweDA5LAorCQkweDAwLCAweDAwLCAweDAxLCAweDAwLAorCQkweDAwLCAweDAwLCAweDAxLCAweDIwLCB9OworCWludCBpLCBhc3BlY3RfcmF0aW87CisJaW50IGZwcyA9IGdvLT5zZW5zb3JfZnJhbWVyYXRlIC8gZ28tPmZwc19zY2FsZTsKKwlDT0RFX0dFTihjLCBidWYgKyAyICsgc2l6ZW9mKGhlYWQpKTsKKworCXN3aXRjaCAoZ28tPmFzcGVjdF9yYXRpbykgeworCWNhc2UgR083MDA3X1JBVElPXzRfMzoKKwkJYXNwZWN0X3JhdGlvID0gZ28tPnN0YW5kYXJkID09IEdPNzAwN19TVERfTlRTQyA/IDMgOiAyOworCQlicmVhazsKKwljYXNlIEdPNzAwN19SQVRJT18xNl85OgorCQlhc3BlY3RfcmF0aW8gPSBnby0+c3RhbmRhcmQgPT0gR083MDA3X1NURF9OVFNDID8gNSA6IDQ7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWFzcGVjdF9yYXRpbyA9IDE7CisJCWJyZWFrOworCX0KKworCW1lbWNweShidWYgKyAyLCBoZWFkLCBzaXplb2YoaGVhZCkpOworCUNPREVfQUREKGMsIDB4MTkxLCAxNyk7CisJQ09ERV9BREQoYywgYXNwZWN0X3JhdGlvLCA0KTsKKwlDT0RFX0FERChjLCAweDEsIDQpOworCUNPREVfQUREKGMsIGZwcywgMTYpOworCUNPREVfQUREKGMsIDB4MywgMik7CisJQ09ERV9BREQoYywgMTAwMSwgdnRpX2JpdGxlbihnbykpOworCUNPREVfQUREKGMsIDEsIDEpOworCUNPREVfQUREKGMsIGdvLT53aWR0aCwgMTMpOworCUNPREVfQUREKGMsIDEsIDEpOworCUNPREVfQUREKGMsIGdvLT5oZWlnaHQsIDEzKTsKKwlDT0RFX0FERChjLCAweDI4MzAsIDE0KTsKKworCS8qIEJ5dGUtYWxpZ24gKi8KKwlpID0gOCAtIChDT0RFX0xFTkdUSChjKSAlIDgpOworCUNPREVfQUREKGMsIDAsIDEpOworCUNPREVfQUREKGMsICgxIDw8IChpIC0gMSkpIC0gMSwgaSAtIDEpOworCisJaSA9IENPREVfTEVOR1RIKGMpICsgc2l6ZW9mKGhlYWQpICogODsKKwlidWZbMF0gPSBpICYgMHhmZjsKKwlidWZbMV0gPSBpID4+IDg7CisJcmV0dXJuIGk7Cit9CisKK3N0YXRpYyBpbnQgZ2VuX21wZWc0aGRyX3RvX3BhY2thZ2Uoc3RydWN0IGdvNzAwNyAqZ28sCisJCQkJCXUxNiAqY29kZSwgaW50IHNwYWNlLCBpbnQgKmZyYW1lbGVuKQoreworCXU4ICpidWY7CisJdTE2IG1lbSA9IDB4M2UwMDsKKwl1bnNpZ25lZCBpbnQgYWRkciA9IDB4MTk7CisJaW50IGksIG9mZiA9IDAsIGNodW5rOworCisJYnVmID0ga21hbGxvYyg1MTIwLCBHRlBfS0VSTkVMKTsKKwlpZiAoYnVmID09IE5VTEwpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJnbzcwMDc6IHVuYWJsZSB0byBhbGxvY2F0ZSA1MTIwIGJ5dGVzIGZvciAiCisJCQkJImZpcm13YXJlIGNvbnN0cnVjdGlvblxuIik7CisJCXJldHVybiAtMTsKKwl9CisJbWVtc2V0KGJ1ZiwgMCwgNTEyMCk7CisJZnJhbWVsZW5bMF0gPSBtcGVnNF9mcmFtZV9oZWFkZXIoZ28sIGJ1ZiwgMCwgUEZSQU1FKTsKKwlpID0gMzY4OworCWZyYW1lbGVuWzFdID0gbXBlZzRfZnJhbWVfaGVhZGVyKGdvLCBidWYgKyBpLCAwLCBCRlJBTUVfUFJFKTsKKwlpICs9IDE2MzI7CisJZnJhbWVsZW5bMl0gPSBtcGVnNF9mcmFtZV9oZWFkZXIoZ28sIGJ1ZiArIGksIDAsIEJGUkFNRV9QT1NUKTsKKwlpICs9IDE0MzI7CisJZnJhbWVsZW5bM10gPSBtcGVnNF9mcmFtZV9oZWFkZXIoZ28sIGJ1ZiArIGksIDAsIEJGUkFNRV9CSURJUik7CisJaSArPSAxNjMyOworCW1wZWc0X2ZyYW1lX2hlYWRlcihnbywgYnVmICsgaSwgMCwgQkZSQU1FX0VNUFRZKTsKKwlpICs9IDE2OworCW1wZWc0X3NlcXVlbmNlX2hlYWRlcihnbywgYnVmICsgaSwgMCk7CisJaSArPSA0MDsKKwlmb3IgKGkgPSAwOyBpIDwgNTEyMDsgaSArPSBjaHVuayAqIDIpIHsKKwkJaWYgKHNwYWNlIC0gb2ZmIDwgMzIpIHsKKwkJCW9mZiA9IC0xOworCQkJZ290byBkb25lOworCQl9CisKKwkJY29kZVtvZmYgKyAxXSA9IF9fY3B1X3RvX2xlMTYoMHg4MDAwIHwgbWVtKTsKKworCQljaHVuayA9IDI4OworCQlpZiAobWVtICsgY2h1bmsgPiAweDQwMDApCisJCQljaHVuayA9IDB4NDAwMCAtIG1lbTsKKwkJaWYgKGkgKyAyICogY2h1bmsgPiA1MTIwKQorCQkJY2h1bmsgPSAoNTEyMCAtIGkpIC8gMjsKKworCQlpZiAoY2h1bmsgPCAyOCkgeworCQkJY29kZVtvZmZdID0gX19jcHVfdG9fbGUxNigweDQwMDAgfCBjaHVuayk7CisJCQljb2RlW29mZiArIDMxXSA9IF9fY3B1X3RvX2xlMTYoYWRkcik7CisJCQlpZiAobWVtICsgY2h1bmsgPT0gMHg0MDAwKSB7CisJCQkJbWVtID0gMHgzZTAwOworCQkJCSsrYWRkcjsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCWNvZGVbb2ZmXSA9IF9fY3B1X3RvX2xlMTYoMHgxMDAwIHwgMjgpOworCQkJY29kZVtvZmYgKyAzMV0gPSAwOworCQkJbWVtICs9IDI4OworCQl9CisKKwkJbWVtY3B5KCZjb2RlW29mZiArIDJdLCBidWYgKyBpLCBjaHVuayAqIDIpOworCQlvZmYgKz0gMzI7CisJfQorCW1lbSA9IDB4M2UwMDsKKwlhZGRyID0gZ28tPmlwYiA/IDB4MTRmOSA6IDB4MGFmOTsKKwltZW1zZXQoYnVmLCAwLCA1MTIwKTsKKwlmcmFtZWxlbls0XSA9IG1wZWc0X2ZyYW1lX2hlYWRlcihnbywgYnVmLCAxLCBQRlJBTUUpOworCWkgPSAzNjg7CisJZnJhbWVsZW5bNV0gPSBtcGVnNF9mcmFtZV9oZWFkZXIoZ28sIGJ1ZiArIGksIDEsIEJGUkFNRV9QUkUpOworCWkgKz0gMTYzMjsKKwlmcmFtZWxlbls2XSA9IG1wZWc0X2ZyYW1lX2hlYWRlcihnbywgYnVmICsgaSwgMSwgQkZSQU1FX1BPU1QpOworCWkgKz0gMTQzMjsKKwlmcmFtZWxlbls3XSA9IG1wZWc0X2ZyYW1lX2hlYWRlcihnbywgYnVmICsgaSwgMSwgQkZSQU1FX0JJRElSKTsKKwlpICs9IDE2MzI7CisJbXBlZzRfZnJhbWVfaGVhZGVyKGdvLCBidWYgKyBpLCAxLCBCRlJBTUVfRU1QVFkpOworCWkgKz0gMTY7CisJZm9yIChpID0gMDsgaSA8IDUxMjA7IGkgKz0gY2h1bmsgKiAyKSB7CisJCWlmIChzcGFjZSAtIG9mZiA8IDMyKSB7CisJCQlvZmYgPSAtMTsKKwkJCWdvdG8gZG9uZTsKKwkJfQorCisJCWNvZGVbb2ZmICsgMV0gPSBfX2NwdV90b19sZTE2KDB4ODAwMCB8IG1lbSk7CisKKwkJY2h1bmsgPSAyODsKKwkJaWYgKG1lbSArIGNodW5rID4gMHg0MDAwKQorCQkJY2h1bmsgPSAweDQwMDAgLSBtZW07CisJCWlmIChpICsgMiAqIGNodW5rID4gNTEyMCkKKwkJCWNodW5rID0gKDUxMjAgLSBpKSAvIDI7CisKKwkJaWYgKGNodW5rIDwgMjgpIHsKKwkJCWNvZGVbb2ZmXSA9IF9fY3B1X3RvX2xlMTYoMHg0MDAwIHwgY2h1bmspOworCQkJY29kZVtvZmYgKyAzMV0gPSBfX2NwdV90b19sZTE2KGFkZHIpOworCQkJaWYgKG1lbSArIGNodW5rID09IDB4NDAwMCkgeworCQkJCW1lbSA9IDB4M2UwMDsKKwkJCQkrK2FkZHI7CisJCQl9CisJCX0gZWxzZSB7CisJCQljb2RlW29mZl0gPSBfX2NwdV90b19sZTE2KDB4MTAwMCB8IDI4KTsKKwkJCWNvZGVbb2ZmICsgMzFdID0gMDsKKwkJCW1lbSArPSAyODsKKwkJfQorCisJCW1lbWNweSgmY29kZVtvZmYgKyAyXSwgYnVmICsgaSwgY2h1bmsgKiAyKTsKKwkJb2ZmICs9IDMyOworCX0KK2RvbmU6CisJa2ZyZWUoYnVmKTsKKwlyZXR1cm4gb2ZmOworfQorCitzdGF0aWMgaW50IGJyY3RybF90b19wYWNrYWdlKHN0cnVjdCBnbzcwMDcgKmdvLAorCQkJCQl1MTYgKmNvZGUsIGludCBzcGFjZSwgaW50ICpmcmFtZWxlbikKK3sKKwlpbnQgY29udmVyZ2Vfc3BlZWQgPSAwOworCWludCBsYW1iZGEgPSAoZ28tPmZvcm1hdCA9PSBHTzcwMDdfRk9STUFUX01KUEVHIHx8IGdvLT5kdmRfbW9kZSkgPworCQkJCTEwMCA6IDA7CisJaW50IHBlYWtfcmF0ZSA9IDYgKiBnby0+Yml0cmF0ZSAvIDU7CisJaW50IHZidl9idWZmZXIgPSBnby0+Zm9ybWF0ID09IEdPNzAwN19GT1JNQVRfTUpQRUcgPworCQkJCWdvLT5iaXRyYXRlIDoKKwkJCQkoZ28tPmR2ZF9tb2RlID8gOTAwMDAwIDogcGVha19yYXRlKTsKKwlpbnQgZnBzID0gZ28tPnNlbnNvcl9mcmFtZXJhdGUgLyBnby0+ZnBzX3NjYWxlOworCWludCBxID0gMDsKKwkvKiBCaXphcnJlIG1hdGggYmVsb3cgZGVwZW5kcyBvbiByb3VuZGluZyBlcnJvcnMgaW4gZGl2aXNpb24gKi8KKwl1MzIgc2dvcF9leHB0X2FkZHIgPSBnby0+Yml0cmF0ZSAvIDMyICogKGdvLT5pcGIgPyAzIDogMSkgKiAxMDAxIC8gZnBzOworCXUzMiBzZ29wX3BlYWtfYWRkciA9IHBlYWtfcmF0ZSAvIDMyICogMTAwMSAvIGZwczsKKwl1MzIgdG90YWxfZXhwdF9hZGRyID0gZ28tPmJpdHJhdGUgLyAzMiAqIDEwMDAgLyBmcHMgKiAoZnBzIC8gMTAwMCk7CisJdTMyIHZidl9hbGVydF9hZGRyID0gdmJ2X2J1ZmZlciAqIDMgLyAoNCAqIDMyKTsKKwl1MzIgY3BseFtdID0geworCQlxID4gMCA/IHNnb3BfZXhwdF9hZGRyICogcSA6CisJCQkyICogZ28tPndpZHRoICogZ28tPmhlaWdodCAqIChnby0+aXBiID8gNiA6IDQpIC8gMzIsCisJCXEgPiAwID8gc2dvcF9leHB0X2FkZHIgKiBxIDoKKwkJCTIgKiBnby0+d2lkdGggKiBnby0+aGVpZ2h0ICogKGdvLT5pcGIgPyA2IDogNCkgLyAzMiwKKwkJcSA+IDAgPyBzZ29wX2V4cHRfYWRkciAqIHEgOgorCQkJMiAqIGdvLT53aWR0aCAqIGdvLT5oZWlnaHQgKiAoZ28tPmlwYiA/IDYgOiA0KSAvIDMyLAorCQlxID4gMCA/IHNnb3BfZXhwdF9hZGRyICogcSA6CisJCQkyICogZ28tPndpZHRoICogZ28tPmhlaWdodCAqIChnby0+aXBiID8gNiA6IDQpIC8gMzIsCisJfTsKKwl1MzIgY2FsY19xID0gcSA+IDAgPyBxIDogY3BseFswXSAvIHNnb3BfZXhwdF9hZGRyOworCXUxNiBwYWNrW10gPSB7CisJCTB4MjAwZSwJCTB4MDAwMCwKKwkJMHhCRjIwLAkJZ28tPmlwYiA/IGNvbnZlcmdlX3NwZWVkX2lwYltjb252ZXJnZV9zcGVlZF0KKwkJCQkJOiBjb252ZXJnZV9zcGVlZF9pcFtjb252ZXJnZV9zcGVlZF0sCisJCTB4QkYyMSwJCWdvLT5pcGIgPyAyIDogMCwKKwkJMHhCRjIyLAkJZ28tPmlwYiA/IExBTUJEQV90YWJsZVswXVtsYW1iZGEgLyAyICsgNTBdCisJCQkJCTogMzI3NjcsCisJCTB4QkYyMywJCWdvLT5pcGIgPyBMQU1CREFfdGFibGVbMV1bbGFtYmRhXSA6IDMyNzY3LAorCQkweEJGMjQsCQkzMjc2NywKKwkJMHhCRjI1LAkJbGFtYmRhID4gOTkgPyAzMjc2NyA6IExBTUJEQV90YWJsZVszXVtsYW1iZGFdLAorCQkweEJGMjYsCQlzZ29wX2V4cHRfYWRkciAmIDB4MDAwMEZGRkYsCisJCTB4QkYyNywJCXNnb3BfZXhwdF9hZGRyID4+IDE2LAorCQkweEJGMjgsCQlzZ29wX3BlYWtfYWRkciAmIDB4MDAwMEZGRkYsCisJCTB4QkYyOSwJCXNnb3BfcGVha19hZGRyID4+IDE2LAorCQkweEJGMkEsCQl2YnZfYWxlcnRfYWRkciAmIDB4MDAwMEZGRkYsCisJCTB4QkYyQiwJCXZidl9hbGVydF9hZGRyID4+IDE2LAorCQkweEJGMkMsCQkwLAorCQkweEJGMkQsCQkwLAorCQkwLAkJMCwKKworCQkweDIwMGUsCQkweDAwMDAsCisJCTB4QkYyRSwJCXZidl9hbGVydF9hZGRyICYgMHgwMDAwRkZGRiwKKwkJMHhCRjJGLAkJdmJ2X2FsZXJ0X2FkZHIgPj4gMTYsCisJCTB4QkYzMCwJCWNwbHhbMF0gJiAweDAwMDBGRkZGLAorCQkweEJGMzEsCQljcGx4WzBdID4+IDE2LAorCQkweEJGMzIsCQljcGx4WzFdICYgMHgwMDAwRkZGRiwKKwkJMHhCRjMzLAkJY3BseFsxXSA+PiAxNiwKKwkJMHhCRjM0LAkJY3BseFsyXSAmIDB4MDAwMEZGRkYsCisJCTB4QkYzNSwJCWNwbHhbMl0gPj4gMTYsCisJCTB4QkYzNiwJCWNwbHhbM10gJiAweDAwMDBGRkZGLAorCQkweEJGMzcsCQljcGx4WzNdID4+IDE2LAorCQkweEJGMzgsCQkwLAorCQkweEJGMzksCQkwLAorCQkweEJGM0EsCQl0b3RhbF9leHB0X2FkZHIgJiAweDAwMDBGRkZGLAorCQkweEJGM0IsCQl0b3RhbF9leHB0X2FkZHIgPj4gMTYsCisJCTAsCQkwLAorCisJCTB4MjAwZSwJCTB4MDAwMCwKKwkJMHhCRjNDLAkJdG90YWxfZXhwdF9hZGRyICYgMHgwMDAwRkZGRiwKKwkJMHhCRjNELAkJdG90YWxfZXhwdF9hZGRyID4+IDE2LAorCQkweEJGM0UsCQkwLAorCQkweEJGM0YsCQkwLAorCQkweEJGNDgsCQkwLAorCQkweEJGNDksCQkwLAorCQkweEJGNEEsCQljYWxjX3EgPCA0ID8gNCA6IChjYWxjX3EgPiAxMjQgPyAxMjQgOiBjYWxjX3EpLAorCQkweEJGNEIsCQk0LAorCQkweEJGNEMsCQkwLAorCQkweEJGNEQsCQkwLAorCQkweEJGNEUsCQkwLAorCQkweEJGNEYsCQkwLAorCQkweEJGNTAsCQkwLAorCQkweEJGNTEsCQkwLAorCQkwLAkJMCwKKworCQkweDIwMGUsCQkweDAwMDAsCisJCTB4QkY0MCwJCXNnb3BfZXhwdF9hZGRyICYgMHgwMDAwRkZGRiwKKwkJMHhCRjQxLAkJc2dvcF9leHB0X2FkZHIgPj4gMTYsCisJCTB4QkY0MiwJCTAsCisJCTB4QkY0MywJCTAsCisJCTB4QkY0NCwJCTAsCisJCTB4QkY0NSwJCTAsCisJCTB4QkY0NiwJCShnby0+d2lkdGggPj4gNCkgKiAoZ28tPmhlaWdodCA+PiA0KSwKKwkJMHhCRjQ3LAkJMCwKKwkJMHhCRjY0LAkJMCwKKwkJMHhCRjY1LAkJMCwKKwkJMHhCRjE4LAkJZnJhbWVsZW5bNF0sCisJCTB4QkYxOSwJCWZyYW1lbGVuWzVdLAorCQkweEJGMUEsCQlmcmFtZWxlbls2XSwKKwkJMHhCRjFCLAkJZnJhbWVsZW5bN10sCisJCTAsCQkwLAorCisjaWYgMCAvKiBSZW1vdmUgb25jZSB3ZSBkb24ndCBjYXJlIGFib3V0IG1hdGNoaW5nICovCisJCTB4MjAwZSwJCTB4MDAwMCwKKwkJMHhCRjU2LAkJNCwKKwkJMHhCRjU3LAkJMCwKKwkJMHhCRjU4LAkJNSwKKwkJMHhCRjU5LAkJMCwKKwkJMHhCRjVBLAkJNiwKKwkJMHhCRjVCLAkJMCwKKwkJMHhCRjVDLAkJOCwKKwkJMHhCRjVELAkJMCwKKwkJMHhCRjVFLAkJMSwKKwkJMHhCRjVGLAkJMCwKKwkJMHhCRjYwLAkJMSwKKwkJMHhCRjYxLAkJMCwKKwkJMHhCRjYyLAkJMCwKKwkJMHhCRjYzLAkJMCwKKwkJMCwJCTAsCisjZWxzZQorCQkweDIwMDgsCQkweDAwMDAsCisJCTB4QkY1NiwJCTQsCisJCTB4QkY1NywJCTAsCisJCTB4QkY1OCwJCTUsCisJCTB4QkY1OSwJCTAsCisJCTB4QkY1QSwJCTYsCisJCTB4QkY1QiwJCTAsCisJCTB4QkY1QywJCTgsCisJCTB4QkY1RCwJCTAsCisJCTAsCQkwLAorCQkwLAkJMCwKKwkJMCwJCTAsCisJCTAsCQkwLAorCQkwLAkJMCwKKwkJMCwJCTAsCisJCTAsCQkwLAorI2VuZGlmCisKKwkJMHgyMDBlLAkJMHgwMDAwLAorCQkweEJGMTAsCQkwLAorCQkweEJGMTEsCQkwLAorCQkweEJGMTIsCQkwLAorCQkweEJGMTMsCQkwLAorCQkweEJGMTQsCQkwLAorCQkweEJGMTUsCQkwLAorCQkweEJGMTYsCQkwLAorCQkweEJGMTcsCQkwLAorCQkweEJGN0UsCQkwLAorCQkweEJGN0YsCQkxLAorCQkweEJGNTIsCQlmcmFtZWxlblswXSwKKwkJMHhCRjUzLAkJZnJhbWVsZW5bMV0sCisJCTB4QkY1NCwJCWZyYW1lbGVuWzJdLAorCQkweEJGNTUsCQlmcmFtZWxlblszXSwKKwkJMCwJCTAsCisJfTsKKworCXJldHVybiBjb3B5X3BhY2thZ2VzKGNvZGUsIHBhY2ssIDYsIHNwYWNlKTsKK30KKworc3RhdGljIGludCBjb25maWdfcGFja2FnZShzdHJ1Y3QgZ283MDA3ICpnbywgdTE2ICpjb2RlLCBpbnQgc3BhY2UpCit7CisJaW50IGZwcyA9IGdvLT5zZW5zb3JfZnJhbWVyYXRlIC8gZ28tPmZwc19zY2FsZSAvIDEwMDA7CisJaW50IHJvd3MgPSBnby0+aW50ZXJsYWNlX2NvZGluZyA/IGdvLT5oZWlnaHQgLyAzMiA6IGdvLT5oZWlnaHQgLyAxNjsKKwlpbnQgYnJjX3dpbmRvd19zaXplID0gZnBzOworCWludCBxX21pbiA9IDIsIHFfbWF4ID0gMzE7CisJaW50IFRIQUNDb2VmZlNldDAgPSAwOworCXUxNiBwYWNrW10gPSB7CisJCTB4MjAwZSwJCTB4MDAwMCwKKwkJMHhjMDAyLAkJMHgxNGI0LAorCQkweGMwMDMsCQkweDI4YjQsCisJCTB4YzAwNCwJCTB4M2M1YSwKKwkJMHhkYzA1LAkJMHgyYTc3LAorCQkweGM2YzMsCQlnby0+Zm9ybWF0ID09IEdPNzAwN19GT1JNQVRfTVBFRzQgPyAwIDoKKwkJCQkoZ28tPmZvcm1hdCA9PSBHTzcwMDdfRk9STUFUX0gyNjMgPyAwIDogMSksCisJCTB4YzY4MCwJCWdvLT5mb3JtYXQgPT0gR083MDA3X0ZPUk1BVF9NUEVHNCA/IDB4ZjEgOgorCQkJCShnby0+Zm9ybWF0ID09IEdPNzAwN19GT1JNQVRfSDI2MyA/IDB4NjEgOgorCQkJCQkJCQkJMHhkMyksCisJCTB4Yzc4MCwJCTB4MDE0MCwKKwkJMHhlMDA5LAkJMHgwMDAxLAorCQkweGM2MGYsCQkweDAwMDgsCisJCTB4ZDRmZiwJCTB4MDAwMiwKKwkJMHhlNDAzLAkJMjM0MCwKKwkJMHhlNDA2LAkJNzUsCisJCTB4ZDQxMSwJCTB4MDAwMSwKKwkJMHhkNDEwLAkJMHhhMWQ2LAorCQkweDAwMDEsCQkweDI4MDEsCisKKwkJMHgyMDBkLAkJMHgwMDAwLAorCQkweGU0MDIsCQkweDAxOGIsCisJCTB4ZTQwMSwJCTB4OGIwMSwKKwkJMHhkNDcyLAkJKGdvLT5ib2FyZF9pbmZvLT5zZW5zb3JfZmxhZ3MgJgorCQkJCQkJCUdPNzAwN19TRU5TT1JfVFYpICYmCisJCQkJCQkoIWdvLT5pbnRlcmxhY2VfY29kaW5nKSA/CisJCQkJCTB4MDFiMCA6IDB4MDE3MCwKKwkJMHhkNDc1LAkJKGdvLT5ib2FyZF9pbmZvLT5zZW5zb3JfZmxhZ3MgJgorCQkJCQkJCUdPNzAwN19TRU5TT1JfVFYpICYmCisJCQkJCQkoIWdvLT5pbnRlcmxhY2VfY29kaW5nKSA/CisJCQkJCTB4MDAwOCA6IDB4MDAwOSwKKwkJMHhjNDA0LAkJZ28tPmludGVybGFjZV9jb2RpbmcgPyAweDQ0IDoKKwkJCQkoZ28tPmZvcm1hdCA9PSBHTzcwMDdfRk9STUFUX01QRUc0ID8gMHgxMSA6CisJCQkJKGdvLT5mb3JtYXQgPT0gR083MDA3X0ZPUk1BVF9NUEVHMSA/IDB4MDIgOgorCQkJCShnby0+Zm9ybWF0ID09IEdPNzAwN19GT1JNQVRfTVBFRzIgPyAweDA0IDoKKwkJCQkoZ28tPmZvcm1hdCA9PSBHTzcwMDdfRk9STUFUX0gyNjMgID8gMHgwOCA6CisJCQkJCQkJCSAgICAgMHgyMCkpKSksCisJCTB4YmYwYSwJCShnby0+Zm9ybWF0ID09IEdPNzAwN19GT1JNQVRfTVBFRzQgPyA4IDoKKwkJCQkoZ28tPmZvcm1hdCA9PSBHTzcwMDdfRk9STUFUX01QRUcxID8gMSA6CisJCQkJKGdvLT5mb3JtYXQgPT0gR083MDA3X0ZPUk1BVF9NUEVHMiA/IDIgOgorCQkJCShnby0+Zm9ybWF0ID09IEdPNzAwN19GT1JNQVRfSDI2MyA/IDQgOiAxNikpKSkgfAorCQkJCSgoZ28tPnJlcGVhdF9zZXFoZWFkID8gMSA6IDApIDw8IDYpIHwKKwkJCQkoKGdvLT5kdmRfbW9kZSA/IDEgOiAwKSA8PCA5KSB8CisJCQkJKChnby0+Z29wX2hlYWRlcl9lbmFibGUgPyAxIDogMCkgPDwgMTApLAorCQkweGJmMGIsCQkwLAorCQkweGRkNWEsCQlnby0+aXBiID8gMHgxNCA6IDB4MGEsCisJCTB4YmYwYywJCTAsCisJCTB4YmYwZCwJCTAsCisJCTB4YzY4MywJCVRIQUNDb2VmZlNldDAsCisJCTB4YzQwYSwJCShnby0+d2lkdGggPDwgNCkgfCByb3dzLAorCQkweGUwMWEsCQlnby0+Ym9hcmRfaW5mby0+aHBpX2J1ZmZlcl9jYXAsCisJCTAsCQkwLAorCQkwLAkJMCwKKworCQkweDIwMDgsCQkwLAorCQkweGU0MDIsCQkweDg4LAorCQkweGU0MDEsCQkweDhmMDEsCisJCTB4YmY2YSwJCTAsCisJCTB4YmY2YiwJCTAsCisJCTB4YmY2YywJCTAsCisJCTB4YmY2ZCwJCTAsCisJCTB4YmY2ZSwJCTAsCisJCTB4YmY2ZiwJCTAsCisJCTAsCQkwLAorCQkwLAkJMCwKKwkJMCwJCTAsCisJCTAsCQkwLAorCQkwLAkJMCwKKwkJMCwJCTAsCisJCTAsCQkwLAorCisJCTB4MjAwZSwJCTAsCisJCTB4YmY2NiwJCWJyY193aW5kb3dfc2l6ZSwKKwkJMHhiZjY3LAkJMCwKKwkJMHhiZjY4LAkJcV9taW4sCisJCTB4YmY2OSwJCXFfbWF4LAorCQkweGJmZTAsCQkwLAorCQkweGJmZTEsCQkwLAorCQkweGJmZTIsCQkwLAorCQkweGJmZTMsCQlnby0+aXBiID8gMyA6IDEsCisJCTB4YzAzMSwJCWdvLT5ib2FyZF9pbmZvLT5zZW5zb3JfZmxhZ3MgJgorCQkJCQlHTzcwMDdfU0VOU09SX1ZCSSA/IDEgOiAwLAorCQkweGMwMWMsCQkweDFmLAorCQkweGRkOGMsCQkweDE1LAorCQkweGRkOTQsCQkweDE1LAorCQkweGRkODgsCQlnby0+aXBiID8gMHgxNDAxIDogMHgwYTAxLAorCQkweGRkOTAsCQlnby0+aXBiID8gMHgxNDAxIDogMHgwYTAxLAorCQkwLAkJMCwKKworCQkweDIwMGUsCQkwLAorCQkweGJmZTQsCQkwLAorCQkweGJmZTUsCQkwLAorCQkweGJmZTYsCQkwLAorCQkweGJmZTcsCQlmcHMgPDwgOCwKKwkJMHhiZmU4LAkJMHgzYTAwLAorCQkweGJmZTksCQkwLAorCQkweGJmZWEsCQkwLAorCQkweGJmZWIsCQkwLAorCQkweGJmZWMsCQkoZ28tPmludGVybGFjZV9jb2RpbmcgPyAxIDw8IDE1IDogMCkgfAorCQkJCQkoZ28tPm1vZGV0X2VuYWJsZSA/IDB4YSA6IDApIHwKKwkJCQkJKGdvLT5ib2FyZF9pbmZvLT5zZW5zb3JfZmxhZ3MgJgorCQkJCQkJR083MDA3X1NFTlNPUl9WQkkgPyAxIDogMCksCisJCTB4YmZlZCwJCTAsCisJCTB4YmZlZSwJCTAsCisJCTB4YmZlZiwJCTAsCisJCTB4YmZmMCwJCWdvLT5ib2FyZF9pbmZvLT5zZW5zb3JfZmxhZ3MgJgorCQkJCQlHTzcwMDdfU0VOU09SX1RWID8gMHhmMDYwIDogMHhiMDYwLAorCQkweGJmZjEsCQkwLAorCQkwLAkJMCwKKwl9OworCisJcmV0dXJuIGNvcHlfcGFja2FnZXMoY29kZSwgcGFjaywgNSwgc3BhY2UpOworfQorCitzdGF0aWMgaW50IHNlcWhlYWRfdG9fcGFja2FnZShzdHJ1Y3QgZ283MDA3ICpnbywgdTE2ICpjb2RlLCBpbnQgc3BhY2UsCisJaW50ICgqc2VxdWVuY2VfaGVhZGVyX2Z1bmMpKHN0cnVjdCBnbzcwMDcgKmdvLAorCQl1bnNpZ25lZCBjaGFyICpidWYsIGludCBleHQpKQoreworCWludCB2b3BfdGltZV9pbmNyZW1lbnRfYml0bGVuZ3RoID0gdnRpX2JpdGxlbihnbyk7CisJaW50IGZwcyA9IGdvLT5zZW5zb3JfZnJhbWVyYXRlIC8gZ28tPmZwc19zY2FsZSAqCisJCQkJCShnby0+aW50ZXJsYWNlX2NvZGluZyA/IDIgOiAxKTsKKwl1bnNpZ25lZCBjaGFyIGJ1Zls0MF0gPSB7IH07CisJaW50IGxlbiA9IHNlcXVlbmNlX2hlYWRlcl9mdW5jKGdvLCBidWYsIDEpOworCXUxNiBwYWNrW10gPSB7CisJCTB4MjAwNiwJCTAsCisJCTB4YmYwOCwJCWZwcywKKwkJMHhiZjA5LAkJMCwKKwkJMHhiZmYyLAkJdm9wX3RpbWVfaW5jcmVtZW50X2JpdGxlbmd0aCwKKwkJMHhiZmYzLAkJKDEgPDwgdm9wX3RpbWVfaW5jcmVtZW50X2JpdGxlbmd0aCkgLSAxLAorCQkweGJmZTYsCQkwLAorCQkweGJmZTcsCQkoZnBzIC8gMTAwMCkgPDwgOCwKKwkJMCwJCTAsCisJCTAsCQkwLAorCQkwLAkJMCwKKwkJMCwJCTAsCisJCTAsCQkwLAorCQkwLAkJMCwKKwkJMCwJCTAsCisJCTAsCQkwLAorCQkwLAkJMCwKKworCQkweDIwMDcsCQkwLAorCQkweGM4MDAsCQlidWZbMl0gPDwgOCB8IGJ1ZlszXSwKKwkJMHhjODAxLAkJYnVmWzRdIDw8IDggfCBidWZbNV0sCisJCTB4YzgwMiwJCWJ1Zls2XSA8PCA4IHwgYnVmWzddLAorCQkweGM4MDMsCQlidWZbOF0gPDwgOCB8IGJ1Zls5XSwKKwkJMHhjNDA2LAkJNjQsCisJCTB4YzQwNywJCWxlbiAtIDY0LAorCQkweGM2MWIsCQkxLAorCQkwLAkJMCwKKwkJMCwJCTAsCisJCTAsCQkwLAorCQkwLAkJMCwKKwkJMCwJCTAsCisJCTAsCQkwLAorCQkwLAkJMCwKKwkJMCwJCTAsCisKKwkJMHgyMDBlLAkJMCwKKwkJMHhjODA4LAkJYnVmWzEwXSA8PCA4IHwgYnVmWzExXSwKKwkJMHhjODA5LAkJYnVmWzEyXSA8PCA4IHwgYnVmWzEzXSwKKwkJMHhjODBhLAkJYnVmWzE0XSA8PCA4IHwgYnVmWzE1XSwKKwkJMHhjODBiLAkJYnVmWzE2XSA8PCA4IHwgYnVmWzE3XSwKKwkJMHhjODBjLAkJYnVmWzE4XSA8PCA4IHwgYnVmWzE5XSwKKwkJMHhjODBkLAkJYnVmWzIwXSA8PCA4IHwgYnVmWzIxXSwKKwkJMHhjODBlLAkJYnVmWzIyXSA8PCA4IHwgYnVmWzIzXSwKKwkJMHhjODBmLAkJYnVmWzI0XSA8PCA4IHwgYnVmWzI1XSwKKwkJMHhjODEwLAkJYnVmWzI2XSA8PCA4IHwgYnVmWzI3XSwKKwkJMHhjODExLAkJYnVmWzI4XSA8PCA4IHwgYnVmWzI5XSwKKwkJMHhjODEyLAkJYnVmWzMwXSA8PCA4IHwgYnVmWzMxXSwKKwkJMHhjODEzLAkJYnVmWzMyXSA8PCA4IHwgYnVmWzMzXSwKKwkJMHhjODE0LAkJYnVmWzM0XSA8PCA4IHwgYnVmWzM1XSwKKwkJMHhjODE1LAkJYnVmWzM2XSA8PCA4IHwgYnVmWzM3XSwKKwkJMCwJCTAsCisJCTAsCQkwLAorCQkwLAkJMCwKKwl9OworCisJcmV0dXJuIGNvcHlfcGFja2FnZXMoY29kZSwgcGFjaywgMywgc3BhY2UpOworfQorCitzdGF0aWMgaW50IHJlbGF0aXZlX3ByaW1lKGludCBiaWcsIGludCBsaXR0bGUpCit7CisJaW50IHJlbWFpbmRlcjsKKworCXdoaWxlIChsaXR0bGUgIT0gMCkgeworCQlyZW1haW5kZXIgPSBiaWcgJSBsaXR0bGU7CisJCWJpZyA9IGxpdHRsZTsKKwkJbGl0dGxlID0gcmVtYWluZGVyOworCX0KKwlyZXR1cm4gYmlnOworfQorCitzdGF0aWMgaW50IGF2c3luY190b19wYWNrYWdlKHN0cnVjdCBnbzcwMDcgKmdvLCB1MTYgKmNvZGUsIGludCBzcGFjZSkKK3sKKwlpbnQgYXJhdGUgPSBnby0+Ym9hcmRfaW5mby0+YXVkaW9fcmF0ZSAqIDEwMDEgKiBnby0+ZnBzX3NjYWxlOworCWludCByYXRpbyA9IGFyYXRlIC8gZ28tPnNlbnNvcl9mcmFtZXJhdGU7CisJaW50IGFkanJhdGlvID0gcmF0aW8gKiAyMTUgLyAxMDA7CisJaW50IHJwcmltZSA9IHJlbGF0aXZlX3ByaW1lKGdvLT5zZW5zb3JfZnJhbWVyYXRlLAorCQkJCQlhcmF0ZSAlIGdvLT5zZW5zb3JfZnJhbWVyYXRlKTsKKwlpbnQgZjEgPSAoYXJhdGUgJSBnby0+c2Vuc29yX2ZyYW1lcmF0ZSkgLyBycHJpbWU7CisJaW50IGYyID0gKGdvLT5zZW5zb3JfZnJhbWVyYXRlIC0gYXJhdGUgJSBnby0+c2Vuc29yX2ZyYW1lcmF0ZSkgLyBycHJpbWU7CisJdTE2IHBhY2tbXSA9IHsKKwkJMHgyMDBlLAkJMCwKKwkJMHhiZjk4LAkJKHUxNikoKC1hZGpyYXRpbykgJiAweGZmZmYpLAorCQkweGJmOTksCQkodTE2KSgoLWFkanJhdGlvKSA+PiAxNiksCisJCTB4YmY5MiwJCTAsCisJCTB4YmY5MywJCTAsCisJCTB4YmZmNCwJCWYxID4gZjIgPyBmMSA6IGYyLAorCQkweGJmZjUsCQlmMSA8IGYyID8gZjEgOiBmMiwKKwkJMHhiZmY2LAkJZjEgPCBmMiA/IHJhdGlvIDogcmF0aW8gKyAxLAorCQkweGJmZjcsCQlmMSA+IGYyID8gcmF0aW8gOiByYXRpbyArIDEsCisJCTB4YmZmOCwJCTAsCisJCTB4YmZmOSwJCTAsCisJCTB4YmZmYSwJCWFkanJhdGlvICYgMHhmZmZmLAorCQkweGJmZmIsCQlhZGpyYXRpbyA+PiAxNiwKKwkJMHhiZjk0LAkJMCwKKwkJMHhiZjk1LAkJMCwKKwkJMCwJCTAsCisJfTsKKworCXJldHVybiBjb3B5X3BhY2thZ2VzKGNvZGUsIHBhY2ssIDEsIHNwYWNlKTsKK30KKworc3RhdGljIGludCBmaW5hbF9wYWNrYWdlKHN0cnVjdCBnbzcwMDcgKmdvLCB1MTYgKmNvZGUsIGludCBzcGFjZSkKK3sKKwlpbnQgcm93cyA9IGdvLT5pbnRlcmxhY2VfY29kaW5nID8gZ28tPmhlaWdodCAvIDMyIDogZ28tPmhlaWdodCAvIDE2OworCXUxNiBwYWNrW10gPSB7CisJCTB4ODAwMCwKKwkJMCwKKwkJMCwKKwkJMCwKKwkJMCwKKwkJMCwKKwkJMCwKKwkJMiwKKwkJKChnby0+Ym9hcmRfaW5mby0+c2Vuc29yX2ZsYWdzICYgR083MDA3X1NFTlNPUl9UVikgJiYKKwkJCQkJCSghZ28tPmludGVybGFjZV9jb2RpbmcpID8KKwkJCQkJKDEgPDwgMTQpIHwgKDEgPDwgOSkgOiAwKSB8CisJCQkoKGdvLT5lbmNvZGVyX3N1YnNhbXBsZSA/IDEgOiAwKSA8PCA4KSB8CisJCQkoZ28tPmJvYXJkX2luZm8tPnNlbnNvcl9mbGFncyAmCisJCQkJR083MDA3X1NFTlNPUl9DT05GSUdfTUFTSyksCisJCSgoZ28tPmVuY29kZXJfdl9oYWx2ZSA/IDEgOiAwKSA8PCAxNCkgfAorCQkJKGdvLT5lbmNvZGVyX3ZfaGFsdmUgPyByb3dzIDw8IDkgOiByb3dzIDw8IDgpIHwKKwkJCShnby0+ZW5jb2Rlcl9oX2hhbHZlID8gMSA8PCA2IDogMCkgfAorCQkJKGdvLT5lbmNvZGVyX2hfaGFsdmUgPyBnby0+d2lkdGggPj4gMyA6IGdvLT53aWR0aCA+PiA0KSwKKwkJKDEgPDwgMTUpIHwgKGdvLT5lbmNvZGVyX3Zfb2Zmc2V0IDw8IDYpIHwKKwkJCSgxIDw8IDcpIHwgKGdvLT5lbmNvZGVyX2hfb2Zmc2V0ID4+IDIpLAorCQkoMSA8PCA2KSwKKwkJMCwKKwkJMCwKKwkJKChnby0+ZnBzX3NjYWxlIC0gMSkgPDwgOCkgfAorCQkJKGdvLT5ib2FyZF9pbmZvLT5zZW5zb3JfZmxhZ3MgJiBHTzcwMDdfU0VOU09SX1RWID8KKwkJCQkJCSgxIDw8IDcpIDogMCkgfAorCQkJMHg0MSwKKwkJZ28tPmlwYiA/IDB4ZDRjIDogMHgzNmIsCisJCShyb3dzIDw8IDgpIHwgKGdvLT53aWR0aCA+PiA0KSwKKwkJZ28tPmZvcm1hdCA9PSBHTzcwMDdfRk9STUFUX01QRUc0ID8gMHgwNDA0IDogMCwKKwkJKDEgPDwgMTUpIHwgKChnby0+aW50ZXJsYWNlX2NvZGluZyA/IDEgOiAwKSA8PCAxMykgfAorCQkJKChnby0+Y2xvc2VkX2dvcCA/IDEgOiAwKSA8PCAxMikgfAorCQkJKChnby0+Zm9ybWF0ID09IEdPNzAwN19GT1JNQVRfTVBFRzQgPyAxIDogMCkgPDwgMTEpIHwKKwkJLyoJKDEgPDwgOSkgfCAgICovCisJCQkoKGdvLT5pcGIgPyAzIDogMCkgPDwgNykgfAorCQkJKChnby0+bW9kZXRfZW5hYmxlID8gMSA6IDApIDw8IDIpIHwKKwkJCSgoZ28tPmR2ZF9tb2RlID8gMSA6IDApIDw8IDEpIHwgMSwKKwkJKGdvLT5mb3JtYXQgPT0gR083MDA3X0ZPUk1BVF9NUEVHMSA/IDB4ODlhMCA6CisJCQkoZ28tPmZvcm1hdCA9PSBHTzcwMDdfRk9STUFUX01QRUcyID8gMHg4OWEwIDoKKwkJCShnby0+Zm9ybWF0ID09IEdPNzAwN19GT1JNQVRfTUpQRUcgPyAweDg5YTAgOgorCQkJKGdvLT5mb3JtYXQgPT0gR083MDA3X0ZPUk1BVF9NUEVHNCA/IDB4ODkyMCA6CisJCQkoZ28tPmZvcm1hdCA9PSBHTzcwMDdfRk9STUFUX0gyNjMgPyAweDg5MjAgOiAwKSkpKSksCisJCWdvLT5pcGIgPyAweDFmMTUgOiAweDFmMGIsCisJCWdvLT5pcGIgPyAweDAwMTUgOiAweDAwMGIsCisJCWdvLT5pcGIgPyAweGE4MDAgOiAweDU4MDAsCisJCTB4ZmZmZiwKKwkJMHgwMDIwICsgMHgwMzRiICogMCwKKwkJMHgwMDIwICsgMHgwMzRiICogMSwKKwkJMHgwMDIwICsgMHgwMzRiICogMiwKKwkJMHgwMDIwICsgMHgwMzRiICogMywKKwkJMHgwMDIwICsgMHgwMzRiICogNCwKKwkJMHgwMDIwICsgMHgwMzRiICogNSwKKwkJZ28tPmlwYiA/IChnby0+Z29wX3NpemUgLyAzKSA6IGdvLT5nb3Bfc2l6ZSwKKwkJKGdvLT5oZWlnaHQgPj4gNCkgKiAoZ28tPndpZHRoID4+IDQpICogMTEwIC8gMTAwLAorCX07CisKKwlyZXR1cm4gY29weV9wYWNrYWdlcyhjb2RlLCBwYWNrLCAxLCBzcGFjZSk7Cit9CisKK3N0YXRpYyBpbnQgYXVkaW9fdG9fcGFja2FnZShzdHJ1Y3QgZ283MDA3ICpnbywgdTE2ICpjb2RlLCBpbnQgc3BhY2UpCit7CisJaW50IGNsb2NrX2NvbmZpZyA9ICgoZ28tPmJvYXJkX2luZm8tPmF1ZGlvX2ZsYWdzICYKKwkJCQlHTzcwMDdfQVVESU9fSTJTX01BU1RFUiA/IDEgOiAwKSA8PCAxMSkgfAorCQkJKChnby0+Ym9hcmRfaW5mby0+YXVkaW9fZmxhZ3MgJgorCQkJCUdPNzAwN19BVURJT19PS0lfTU9ERSA/IDEgOiAwKSA8PCA4KSB8CisJCQkoKChnby0+Ym9hcmRfaW5mby0+YXVkaW9fYmNsa19kaXYgLyA0KSAtIDEpIDw8IDQpIHwKKwkJCShnby0+Ym9hcmRfaW5mby0+YXVkaW9fbWFpbl9kaXYgLSAxKTsKKwl1MTYgcGFja1tdID0geworCQkweDIwMGQsCQkwLAorCQkweDkwMDIsCQkwLAorCQkweDkwMDIsCQkwLAorCQkweDkwMzEsCQkwLAorCQkweDkwMzIsCQkwLAorCQkweDkwMzMsCQkwLAorCQkweDkwMzQsCQkwLAorCQkweDkwMzUsCQkwLAorCQkweDkwMzYsCQkwLAorCQkweDkwMzcsCQkwLAorCQkweDkwNDAsCQkwLAorCQkweDkwMDAsCQljbG9ja19jb25maWcsCisJCTB4OTAwMSwJCShnby0+Ym9hcmRfaW5mby0+YXVkaW9fZmxhZ3MgJiAweGZmZmYpIHwKKwkJCQkJKDEgPDwgOSksCisJCTB4OTAwMCwJCSgoZ28tPmJvYXJkX2luZm8tPmF1ZGlvX2ZsYWdzICYKKwkJCQkJCUdPNzAwN19BVURJT19JMlNfTUFTVEVSID8KKwkJCQkJCTEgOiAwKSA8PCAxMCkgfAorCQkJCQljbG9ja19jb25maWcsCisJCTAsCQkwLAorCQkwLAkJMCwKKwkJMHgyMDA1LAkJMCwKKwkJMHg5MDQxLAkJMCwKKwkJMHg5MDQyLAkJMjU2LAorCQkweDkwNDMsCQkwLAorCQkweDkwNDQsCQkxNiwKKwkJMHg5MDQ1LAkJMTYsCisJCTAsCQkwLAorCQkwLAkJMCwKKwkJMCwJCTAsCisJCTAsCQkwLAorCQkwLAkJMCwKKwkJMCwJCTAsCisJCTAsCQkwLAorCQkwLAkJMCwKKwkJMCwJCTAsCisJCTAsCQkwLAorCX07CisKKwlyZXR1cm4gY29weV9wYWNrYWdlcyhjb2RlLCBwYWNrLCAyLCBzcGFjZSk7Cit9CisKK3N0YXRpYyBpbnQgbW9kZXRfdG9fcGFja2FnZShzdHJ1Y3QgZ283MDA3ICpnbywgdTE2ICpjb2RlLCBpbnQgc3BhY2UpCit7CisJaW50IHJldCwgbWIsIGksIGFkZHIsIGNudCA9IDA7CisJdTE2IHBhY2tbMzJdOworCXUxNiB0aHJlc2hvbGRzW10gPSB7CisJCTB4MjAwZSwJCTAsCisJCTB4YmY4MiwJCWdvLT5tb2RldFswXS5waXhlbF90aHJlc2hvbGQsCisJCTB4YmY4MywJCWdvLT5tb2RldFsxXS5waXhlbF90aHJlc2hvbGQsCisJCTB4YmY4NCwJCWdvLT5tb2RldFsyXS5waXhlbF90aHJlc2hvbGQsCisJCTB4YmY4NSwJCWdvLT5tb2RldFszXS5waXhlbF90aHJlc2hvbGQsCisJCTB4YmY4NiwJCWdvLT5tb2RldFswXS5tb3Rpb25fdGhyZXNob2xkLAorCQkweGJmODcsCQlnby0+bW9kZXRbMV0ubW90aW9uX3RocmVzaG9sZCwKKwkJMHhiZjg4LAkJZ28tPm1vZGV0WzJdLm1vdGlvbl90aHJlc2hvbGQsCisJCTB4YmY4OSwJCWdvLT5tb2RldFszXS5tb3Rpb25fdGhyZXNob2xkLAorCQkweGJmOGEsCQlnby0+bW9kZXRbMF0ubWJfdGhyZXNob2xkLAorCQkweGJmOGIsCQlnby0+bW9kZXRbMV0ubWJfdGhyZXNob2xkLAorCQkweGJmOGMsCQlnby0+bW9kZXRbMl0ubWJfdGhyZXNob2xkLAorCQkweGJmOGQsCQlnby0+bW9kZXRbM10ubWJfdGhyZXNob2xkLAorCQkweGJmOGUsCQkwLAorCQkweGJmOGYsCQkwLAorCQkwLAkJMCwKKwl9OworCisJcmV0ID0gY29weV9wYWNrYWdlcyhjb2RlLCB0aHJlc2hvbGRzLCAxLCBzcGFjZSk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiAtMTsKKwljbnQgKz0gcmV0OworCisJYWRkciA9IDB4YmFjMDsKKwltZW1zZXQocGFjaywgMCwgNjQpOworCWkgPSAwOworCWZvciAobWIgPSAwOyBtYiA8IDE2MjQ7ICsrbWIpIHsKKwkJcGFja1tpICogMiArIDNdIDw8PSAyOworCQlwYWNrW2kgKiAyICsgM10gfD0gZ28tPm1vZGV0X21hcFttYl07CisJCWlmIChtYiAlIDggIT0gNykKKwkJCWNvbnRpbnVlOworCQlwYWNrW2kgKiAyICsgMl0gPSBhZGRyKys7CisJCSsraTsKKwkJaWYgKGkgPT0gMTAgfHwgbWIgPT0gMTYyMykgeworCQkJcGFja1swXSA9IDB4MjAwMCB8IGk7CisJCQlyZXQgPSBjb3B5X3BhY2thZ2VzKGNvZGUgKyBjbnQsIHBhY2ssIDEsIHNwYWNlIC0gY250KTsKKwkJCWlmIChyZXQgPCAwKQorCQkJCXJldHVybiAtMTsKKwkJCWNudCArPSByZXQ7CisJCQlpID0gMDsKKwkJCW1lbXNldChwYWNrLCAwLCA2NCk7CisJCX0KKwkJcGFja1tpICogMiArIDNdID0gMDsKKwl9CisKKwltZW1zZXQocGFjaywgMCwgNjQpOworCWkgPSAwOworCWZvciAoYWRkciA9IDB4YmI5MDsgYWRkciA8IDB4YmJmYTsgKythZGRyKSB7CisJCXBhY2tbaSAqIDIgKyAyXSA9IGFkZHI7CisJCXBhY2tbaSAqIDIgKyAzXSA9IDA7CisJCSsraTsKKwkJaWYgKGkgPT0gMTAgfHwgYWRkciA9PSAweGJiZjkpIHsKKwkJCXBhY2tbMF0gPSAweDIwMDAgfCBpOworCQkJcmV0ID0gY29weV9wYWNrYWdlcyhjb2RlICsgY250LCBwYWNrLCAxLCBzcGFjZSAtIGNudCk7CisJCQlpZiAocmV0IDwgMCkKKwkJCQlyZXR1cm4gLTE7CisJCQljbnQgKz0gcmV0OworCQkJaSA9IDA7CisJCQltZW1zZXQocGFjaywgMCwgNjQpOworCQl9CisJfQorCXJldHVybiBjbnQ7Cit9CisKK3N0YXRpYyBpbnQgZG9fc3BlY2lhbChzdHJ1Y3QgZ283MDA3ICpnbywgdTE2IHR5cGUsIHUxNiAqY29kZSwgaW50IHNwYWNlLAorCQkJaW50ICpmcmFtZWxlbikKK3sKKwlzd2l0Y2ggKHR5cGUpIHsKKwljYXNlIFNQRUNJQUxfRlJNX0hFQUQ6CisJCXN3aXRjaCAoZ28tPmZvcm1hdCkgeworCQljYXNlIEdPNzAwN19GT1JNQVRfTUpQRUc6CisJCQlyZXR1cm4gZ2VuX21qcGVnaGRyX3RvX3BhY2thZ2UoZ28sIGNvZGUsIHNwYWNlKTsKKwkJY2FzZSBHTzcwMDdfRk9STUFUX01QRUcxOgorCQljYXNlIEdPNzAwN19GT1JNQVRfTVBFRzI6CisJCQlyZXR1cm4gZ2VuX21wZWcxaGRyX3RvX3BhY2thZ2UoZ28sIGNvZGUsIHNwYWNlLAorCQkJCQkJCQlmcmFtZWxlbik7CisJCWNhc2UgR083MDA3X0ZPUk1BVF9NUEVHNDoKKwkJCXJldHVybiBnZW5fbXBlZzRoZHJfdG9fcGFja2FnZShnbywgY29kZSwgc3BhY2UsCisJCQkJCQkJCWZyYW1lbGVuKTsKKwkJfQorCWNhc2UgU1BFQ0lBTF9CUkNfQ1RSTDoKKwkJcmV0dXJuIGJyY3RybF90b19wYWNrYWdlKGdvLCBjb2RlLCBzcGFjZSwgZnJhbWVsZW4pOworCWNhc2UgU1BFQ0lBTF9DT05GSUc6CisJCXJldHVybiBjb25maWdfcGFja2FnZShnbywgY29kZSwgc3BhY2UpOworCWNhc2UgU1BFQ0lBTF9TRVFIRUFEOgorCQlzd2l0Y2ggKGdvLT5mb3JtYXQpIHsKKwkJY2FzZSBHTzcwMDdfRk9STUFUX01QRUcxOgorCQljYXNlIEdPNzAwN19GT1JNQVRfTVBFRzI6CisJCQlyZXR1cm4gc2VxaGVhZF90b19wYWNrYWdlKGdvLCBjb2RlLCBzcGFjZSwKKwkJCQkJbXBlZzFfc2VxdWVuY2VfaGVhZGVyKTsKKwkJY2FzZSBHTzcwMDdfRk9STUFUX01QRUc0OgorCQkJcmV0dXJuIHNlcWhlYWRfdG9fcGFja2FnZShnbywgY29kZSwgc3BhY2UsCisJCQkJCW1wZWc0X3NlcXVlbmNlX2hlYWRlcik7CisJCWRlZmF1bHQ6CisJCQlyZXR1cm4gMDsKKwkJfQorCWNhc2UgU1BFQ0lBTF9BVl9TWU5DOgorCQlyZXR1cm4gYXZzeW5jX3RvX3BhY2thZ2UoZ28sIGNvZGUsIHNwYWNlKTsKKwljYXNlIFNQRUNJQUxfRklOQUw6CisJCXJldHVybiBmaW5hbF9wYWNrYWdlKGdvLCBjb2RlLCBzcGFjZSk7CisJY2FzZSBTUEVDSUFMX0FVRElPOgorCQlyZXR1cm4gYXVkaW9fdG9fcGFja2FnZShnbywgY29kZSwgc3BhY2UpOworCWNhc2UgU1BFQ0lBTF9NT0RFVDoKKwkJcmV0dXJuIG1vZGV0X3RvX3BhY2thZ2UoZ28sIGNvZGUsIHNwYWNlKTsKKwl9CisJcHJpbnRrKEtFUk5fRVJSCisJCSJnbzcwMDc6IGZpcm13YXJlIGZpbGUgY29udGFpbnMgdW5zdXBwb3J0ZWQgZmVhdHVyZSAlMDR4XG4iLAorCQl0eXBlKTsKKwlyZXR1cm4gLTE7Cit9CisKK2ludCBnbzcwMDdfY29uc3RydWN0X2Z3X2ltYWdlKHN0cnVjdCBnbzcwMDcgKmdvLCB1OCAqKmZ3LCBpbnQgKmZ3bGVuKQoreworCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZndfZW50cnk7CisJdTE2ICpjb2RlLCAqc3JjOworCWludCBmcmFtZWxlbls4XSA9IHsgfTsgLyogaG9sZHMgdGhlIGxlbmd0aHMgb2YgZW1wdHkgZnJhbWUgdGVtcGxhdGVzICovCisJaW50IGNvZGVzcGFjZSA9IDY0ICogMTAyNCwgaSA9IDAsIHNyY2xlbiwgY2h1bmtfbGVuLCBjaHVua19mbGFnczsKKwlpbnQgbW9kZV9mbGFnOworCWludCByZXQ7CisKKwlzd2l0Y2ggKGdvLT5mb3JtYXQpIHsKKwljYXNlIEdPNzAwN19GT1JNQVRfTUpQRUc6CisJCW1vZGVfZmxhZyA9IEZMQUdfTU9ERV9NSlBFRzsKKwkJYnJlYWs7CisJY2FzZSBHTzcwMDdfRk9STUFUX01QRUcxOgorCQltb2RlX2ZsYWcgPSBGTEFHX01PREVfTVBFRzE7CisJCWJyZWFrOworCWNhc2UgR083MDA3X0ZPUk1BVF9NUEVHMjoKKwkJbW9kZV9mbGFnID0gRkxBR19NT0RFX01QRUcyOworCQlicmVhazsKKwljYXNlIEdPNzAwN19GT1JNQVRfTVBFRzQ6CisJCW1vZGVfZmxhZyA9IEZMQUdfTU9ERV9NUEVHNDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC0xOworCX0KKwlpZiAocmVxdWVzdF9maXJtd2FyZSgmZndfZW50cnksIGdvLT5ib2FyZF9pbmZvLT5maXJtd2FyZSwgZ28tPmRldikpIHsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCQkiZ283MDA3OiB1bmFibGUgdG8gbG9hZCBmaXJtd2FyZSBmcm9tIGZpbGUgXCIlc1wiXG4iLAorCQkJZ28tPmJvYXJkX2luZm8tPmZpcm13YXJlKTsKKwkJcmV0dXJuIC0xOworCX0KKwljb2RlID0ga21hbGxvYyhjb2Rlc3BhY2UgKiAyLCBHRlBfS0VSTkVMKTsKKwlpZiAoY29kZSA9PSBOVUxMKSB7CisJCXByaW50ayhLRVJOX0VSUiAiZ283MDA3OiB1bmFibGUgdG8gYWxsb2NhdGUgJWQgYnl0ZXMgZm9yICIKKwkJCQkiZmlybXdhcmUgY29uc3RydWN0aW9uXG4iLCBjb2Rlc3BhY2UgKiAyKTsKKwkJZ290byBmd19mYWlsZWQ7CisJfQorCW1lbXNldChjb2RlLCAwLCBjb2Rlc3BhY2UgKiAyKTsKKwlzcmMgPSAodTE2ICopZndfZW50cnktPmRhdGE7CisJc3JjbGVuID0gZndfZW50cnktPnNpemUgLyAyOworCXdoaWxlIChzcmNsZW4gPj0gMikgeworCQljaHVua19mbGFncyA9IF9fbGUxNl90b19jcHUoc3JjWzBdKTsKKwkJY2h1bmtfbGVuID0gX19sZTE2X3RvX2NwdShzcmNbMV0pOworCQlpZiAoY2h1bmtfbGVuICsgMiA+IHNyY2xlbikgeworCQkJcHJpbnRrKEtFUk5fRVJSICJnbzcwMDc6IGZpcm13YXJlIGZpbGUgXCIlc1wiICIKKwkJCQkJImFwcGVhcnMgdG8gYmUgY29ycnVwdGVkXG4iLAorCQkJCQlnby0+Ym9hcmRfaW5mby0+ZmlybXdhcmUpOworCQkJZ290byBmd19mYWlsZWQ7CisJCX0KKwkJaWYgKGNodW5rX2ZsYWdzICYgbW9kZV9mbGFnKSB7CisJCQlpZiAoY2h1bmtfZmxhZ3MgJiBGTEFHX1NQRUNJQUwpIHsKKwkJCQlyZXQgPSBkb19zcGVjaWFsKGdvLCBfX2xlMTZfdG9fY3B1KHNyY1syXSksCisJCQkJCSZjb2RlW2ldLCBjb2Rlc3BhY2UgLSBpLCBmcmFtZWxlbik7CisJCQkJaWYgKHJldCA8IDApIHsKKwkJCQkJcHJpbnRrKEtFUk5fRVJSICJnbzcwMDc6IGluc3VmZmljaWVudCAiCisJCQkJCQkJIm1lbW9yeSBmb3IgZmlybXdhcmUgIgorCQkJCQkJCSJjb25zdHJ1Y3Rpb25cbiIpOworCQkJCQlnb3RvIGZ3X2ZhaWxlZDsKKwkJCQl9CisJCQkJaSArPSByZXQ7CisJCQl9IGVsc2UgeworCQkJCWlmIChjb2Rlc3BhY2UgLSBpIDwgY2h1bmtfbGVuKSB7CisJCQkJCXByaW50ayhLRVJOX0VSUiAiZ283MDA3OiBpbnN1ZmZpY2llbnQgIgorCQkJCQkJCSJtZW1vcnkgZm9yIGZpcm13YXJlICIKKwkJCQkJCQkiY29uc3RydWN0aW9uXG4iKTsKKwkJCQkJZ290byBmd19mYWlsZWQ7CisJCQkJfQorCQkJCW1lbWNweSgmY29kZVtpXSwgJnNyY1syXSwgY2h1bmtfbGVuICogMik7CisJCQkJaSArPSBjaHVua19sZW47CisJCQl9CisJCX0KKwkJc3JjbGVuIC09IGNodW5rX2xlbiArIDI7CisJCXNyYyArPSBjaHVua19sZW4gKyAyOworCX0KKwlyZWxlYXNlX2Zpcm13YXJlKGZ3X2VudHJ5KTsKKwkqZncgPSAodTggKiljb2RlOworCSpmd2xlbiA9IGkgKiAyOworCXJldHVybiAwOworCitmd19mYWlsZWQ6CisJa2ZyZWUoY29kZSk7CisJcmVsZWFzZV9maXJtd2FyZShmd19lbnRyeSk7CisJcmV0dXJuIC0xOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2dvNzAwNy9nbzcwMDctaTJjLmMgYi9kcml2ZXJzL3N0YWdpbmcvZ283MDA3L2dvNzAwNy1pMmMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMGJhYWUzCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2dvNzAwNy9nbzcwMDctaTJjLmMKQEAgLTAsMCArMSwzMDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwNiBNaWNyb25hcyBVU0EgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChWZXJzaW9uIDIpIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorICogSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24gTUEgMDIxMTEtMTMwNywgVVNBLgorICovCisKKyNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvdW5pc3RkLmg+CisjaW5jbHVkZSA8bGludXgvdGltZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPGxpbnV4L3NlbWFwaG9yZS5oPgorI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CisKKyNpbmNsdWRlICJnbzcwMDctcHJpdi5oIgorI2luY2x1ZGUgIndpcy1pMmMuaCIKKworLyoqKioqKioqKioqKioqIFJlZ2lzdHJhdGlvbiBpbnRlcmZhY2UgZm9yIEkyQyBjbGllbnQgZHJpdmVycyAqKioqKioqKioqKioqKi8KKworLyogU2luY2UgdGhlcmUncyBubyB3YXkgdG8gYXV0by1wcm9iZSB0aGUgSTJDIGRldmljZXMgY29ubmVjdGVkIHRvIHRoZSBJMkMKKyAqIGJ1cyBvbiB0aGUgZ283MDA3LCB3ZSBoYXZlIHRoaXMgc2lsbHkgbGl0dGxlIHJlZ2lzdHJhdGlvbiBzeXN0ZW0gdGhhdAorICogY2xpZW50IGRyaXZlcnMgY2FuIHVzZSB0byByZWdpc3RlciB0aGVpciBJMkMgZHJpdmVyIElEIGFuZCB0aGVpcgorICogZGV0ZWN0X2NsaWVudCBmdW5jdGlvbiAodGhlIG9uZSB0aGF0J3Mgbm9ybWFsbHkgcGFzc2VkIHRvIGkyY19wcm9iZSkuCisgKgorICogV2hlbiBhIG5ldyBnbzcwMDcgZGV2aWNlIGlzIGNvbm5lY3RlZCwgd2UgY2FuIGxvb2sgdXAgaW4gYSBib2FyZCBpbmZvCisgKiB0YWJsZSBieSB0aGUgVVNCIG9yIFBDSSB2ZW5kb3IvcHJvZHVjdC9yZXZpc2lvbiBJRCB0byBkZXRlcm1pbmUKKyAqIHdoaWNoIEkyQyBjbGllbnQgbW9kdWxlIHRvIGxvYWQuICBUaGUgY2xpZW50IGRyaXZlciBtb2R1bGUgd2lsbCByZWdpc3RlcgorICogaXRzZWxmIGhlcmUsIGFuZCB0aGVuIHdlIGNhbiBjYWxsIHRoZSByZWdpc3RlcmVkIGRldGVjdF9jbGllbnQgZnVuY3Rpb24KKyAqIHRvIGZvcmNlLWxvYWQgYSBuZXcgY2xpZW50IGF0IHRoZSBhZGRyZXNzIGxpc3RlZCBpbiB0aGUgYm9hcmQgaW5mbyB0YWJsZS4KKyAqCisgKiBSZWFsbHkgdGhlIEkyQyBzdWJzeXN0ZW0gc2hvdWxkIGhhdmUgYSB3YXkgdG8gZm9yY2UtbG9hZCBJMkMgY2xpZW50CisgKiBkcml2ZXJzIHdoZW4gd2UgaGF2ZSBhIHByaW9yaSBrbm93bGVkZ2Ugb2Ygd2hhdCdzIG9uIHRoZSBidXMsIGVzcGVjaWFsbHkKKyAqIHNpbmNlIHRoZSBleGlzdGluZyBJMkMgYXV0by1wcm9iZSBtZWNoYW5pc20gaXMgc28gaG9rZXksIGJ1dCB3ZSdsbCB1c2UKKyAqIG91ciBvd24gbWVjaGFuaXNtIGZvciB0aGUgdGltZSBiZWluZy4gKi8KKworc3RydWN0IHdpc19pMmNfY2xpZW50X2RyaXZlciB7CisJdW5zaWduZWQgaW50IGlkOworCWZvdW5kX3Byb2MgZm91bmRfcHJvYzsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7Cit9OworCitzdGF0aWMgTElTVF9IRUFEKGkyY19jbGllbnRfZHJpdmVycyk7CitzdGF0aWMgREVDTEFSRV9NVVRFWChpMmNfY2xpZW50X2RyaXZlcl9saXN0X2xvY2spOworCisvKiBDbGllbnQgZHJpdmVycyByZWdpc3RlciBoZXJlIGJ5IHRoZWlyIEkyQyBkcml2ZXIgSUQgKi8KK2ludCB3aXNfaTJjX2FkZF9kcml2ZXIodW5zaWduZWQgaW50IGlkLCBmb3VuZF9wcm9jIGZvdW5kX3Byb2MpCit7CisJc3RydWN0IHdpc19pMmNfY2xpZW50X2RyaXZlciAqZHJpdmVyOworCisJZHJpdmVyID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHdpc19pMmNfY2xpZW50X2RyaXZlciksIEdGUF9LRVJORUwpOworCWlmIChkcml2ZXIgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisJZHJpdmVyLT5pZCA9IGlkOworCWRyaXZlci0+Zm91bmRfcHJvYyA9IGZvdW5kX3Byb2M7CisKKwlkb3duKCZpMmNfY2xpZW50X2RyaXZlcl9saXN0X2xvY2spOworCWxpc3RfYWRkX3RhaWwoJmRyaXZlci0+bGlzdCwgJmkyY19jbGllbnRfZHJpdmVycyk7CisJdXAoJmkyY19jbGllbnRfZHJpdmVyX2xpc3RfbG9jayk7CisKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0wod2lzX2kyY19hZGRfZHJpdmVyKTsKKwordm9pZCB3aXNfaTJjX2RlbF9kcml2ZXIoZm91bmRfcHJvYyBmb3VuZF9wcm9jKQoreworCXN0cnVjdCB3aXNfaTJjX2NsaWVudF9kcml2ZXIgKmRyaXZlciwgKm5leHQ7CisKKwlkb3duKCZpMmNfY2xpZW50X2RyaXZlcl9saXN0X2xvY2spOworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShkcml2ZXIsIG5leHQsICZpMmNfY2xpZW50X2RyaXZlcnMsIGxpc3QpCisJCWlmIChkcml2ZXItPmZvdW5kX3Byb2MgPT0gZm91bmRfcHJvYykgeworCQkJbGlzdF9kZWwoJmRyaXZlci0+bGlzdCk7CisJCQlrZnJlZShkcml2ZXIpOworCQl9CisJdXAoJmkyY19jbGllbnRfZHJpdmVyX2xpc3RfbG9jayk7Cit9CitFWFBPUlRfU1lNQk9MKHdpc19pMmNfZGVsX2RyaXZlcik7CisKKy8qIFRoZSBtYWluIGdvNzAwNyBkcml2ZXIgY2FsbHMgdGhpcyB0byBpbnN0YW50aWF0ZSBhIGNsaWVudCBieSBkcml2ZXIKKyAqIElEIGFuZCBidXMgYWRkcmVzcywgd2hpY2ggYXJlIGJvdGggc3RvcmVkIGluIHRoZSBib2FyZCBpbmZvIHRhYmxlICovCitpbnQgd2lzX2kyY19wcm9iZV9kZXZpY2Uoc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyLAorCQkJCXVuc2lnbmVkIGludCBpZCwgaW50IGFkZHIpCit7CisJc3RydWN0IHdpc19pMmNfY2xpZW50X2RyaXZlciAqZHJpdmVyOworCWludCBmb3VuZCA9IDA7CisKKwlpZiAoYWRkciA8IDAgfHwgYWRkciA+IDB4N2YpCisJCXJldHVybiAtMTsKKwlkb3duKCZpMmNfY2xpZW50X2RyaXZlcl9saXN0X2xvY2spOworCWxpc3RfZm9yX2VhY2hfZW50cnkoZHJpdmVyLCAmaTJjX2NsaWVudF9kcml2ZXJzLCBsaXN0KQorCQlpZiAoZHJpdmVyLT5pZCA9PSBpZCkgeworCQkJaWYgKGRyaXZlci0+Zm91bmRfcHJvYyhhZGFwdGVyLCBhZGRyLCAwKSA9PSAwKQorCQkJCWZvdW5kID0gMTsKKwkJCWJyZWFrOworCQl9CisJdXAoJmkyY19jbGllbnRfZHJpdmVyX2xpc3RfbG9jayk7CisJcmV0dXJuIGZvdW5kOworfQorCisvKioqKioqKioqKioqKioqKioqKioqIERyaXZlciBmb3Igb24tYm9hcmQgSTJDIGFkYXB0ZXIgKioqKioqKioqKioqKioqKioqKioqLworCisvKiAjZGVmaW5lIEdPNzAwN19JMkNfREVCVUcgKi8KKworI2RlZmluZSBTUElfSTJDX0FERFJfQkFTRQkJMHgxNDAwCisjZGVmaW5lIFNUQVRVU19SRUdfQUREUgkJCShTUElfSTJDX0FERFJfQkFTRSArIDB4MikKKyNkZWZpbmUgSTJDX0NUUkxfUkVHX0FERFIJCShTUElfSTJDX0FERFJfQkFTRSArIDB4NikKKyNkZWZpbmUgSTJDX0RFVl9VUF9BRERSX1JFR19BRERSCShTUElfSTJDX0FERFJfQkFTRSArIDB4NykKKyNkZWZpbmUgSTJDX0xPX0FERFJfUkVHX0FERFIJCShTUElfSTJDX0FERFJfQkFTRSArIDB4OCkKKyNkZWZpbmUgSTJDX0RBVEFfUkVHX0FERFIJCShTUElfSTJDX0FERFJfQkFTRSArIDB4OSkKKyNkZWZpbmUgSTJDX0NMS0ZSRVFfUkVHX0FERFIJCShTUElfSTJDX0FERFJfQkFTRSArIDB4YSkKKworI2RlZmluZSBJMkNfU1RBVEVfTUFTSwkJCTB4MDAwNworI2RlZmluZSBJMkNfUkVBRF9SRUFEWV9NQVNLCQkweDAwMDgKKworLyogVGhlcmUgaXMgb25seSBvbmUgSTJDIHBvcnQgb24gdGhlIFRXMjgwNCB0aGF0IGZlZWRzIGFsbCBmb3VyIEdPNzAwNyBWSVBzCisgKiBvbiB0aGUgQWRsaW5rIFBDSS1NUEcyNCwgc28gYWNjZXNzIGlzIHNoYXJlZCBiZXR3ZWVuIGFsbCBvZiB0aGVtLiAqLworc3RhdGljIERFQ0xBUkVfTVVURVgoYWRsaW5rX21wZzI0X2kyY19sb2NrKTsKKworc3RhdGljIGludCBnbzcwMDdfaTJjX3hmZXIoc3RydWN0IGdvNzAwNyAqZ28sIHUxNiBhZGRyLCBpbnQgcmVhZCwKKwkJdTE2IGNvbW1hbmQsIGludCBmbGFncywgdTggKmRhdGEpCit7CisJaW50IGksIHJldCA9IC0xOworCXUxNiB2YWw7CisKKwlpZiAoZ28tPnN0YXR1cyA9PSBTVEFUVVNfU0hVVERPV04pCisJCXJldHVybiAtMTsKKworI2lmZGVmIEdPNzAwN19JMkNfREVCVUcKKwlpZiAocmVhZCkKKwkJcHJpbnRrKEtFUk5fREVCVUcgImdvNzAwNy1pMmM6IHJlYWRpbmcgMHglMDJ4IG9uIDB4JTAyeFxuIiwKKwkJCWNvbW1hbmQsIGFkZHIpOworCWVsc2UKKwkJcHJpbnRrKEtFUk5fREVCVUcKKwkJCSJnbzcwMDctaTJjOiB3cml0aW5nIDB4JTAyeCB0byAweCUwMnggb24gMHglMDJ4XG4iLAorCQkJKmRhdGEsIGNvbW1hbmQsIGFkZHIpOworI2VuZGlmCisKKwlkb3duKCZnby0+aHdfbG9jayk7CisKKwlpZiAoZ28tPmJvYXJkX2lkID09IEdPNzAwN19CT0FSRElEX0FETElOS19NUEcyNCkgeworCQkvKiBCcmlkZ2UgdGhlIEkyQyBwb3J0IG9uIHRoaXMgR083MDA3IHRvIHRoZSBzaGFyZWQgYnVzICovCisJCWRvd24oJmFkbGlua19tcGcyNF9pMmNfbG9jayk7CisJCWdvNzAwN193cml0ZV9hZGRyKGdvLCAweDNjODIsIDB4MDAyMCk7CisJfQorCisJLyogV2FpdCBmb3IgSTJDIGFkYXB0ZXIgdG8gYmUgcmVhZHkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgMTA7ICsraSkgeworCQlpZiAoZ283MDA3X3JlYWRfYWRkcihnbywgU1RBVFVTX1JFR19BRERSLCAmdmFsKSA8IDApCisJCQlnb3RvIGkyY19kb25lOworCQlpZiAoISh2YWwgJiBJMkNfU1RBVEVfTUFTSykpCisJCQlicmVhazsKKwkJbXNsZWVwKDEwMCk7CisJfQorCWlmIChpID09IDEwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiZ283MDA3LWkyYzogSTJDIGFkYXB0ZXIgaXMgaHVuZ1xuIik7CisJCWdvdG8gaTJjX2RvbmU7CisJfQorCisJLyogU2V0IHRhcmdldCByZWdpc3RlciAoY29tbWFuZCkgKi8KKwlnbzcwMDdfd3JpdGVfYWRkcihnbywgSTJDX0NUUkxfUkVHX0FERFIsIGZsYWdzKTsKKwlnbzcwMDdfd3JpdGVfYWRkcihnbywgSTJDX0xPX0FERFJfUkVHX0FERFIsIGNvbW1hbmQpOworCisJLyogSWYgd2UncmUgd3JpdGluZywgc2VuZCB0aGUgZGF0YSBhbmQgdGFyZ2V0IGFkZHJlc3MgYW5kIHdlJ3JlIGRvbmUgKi8KKwlpZiAoIXJlYWQpIHsKKwkJZ283MDA3X3dyaXRlX2FkZHIoZ28sIEkyQ19EQVRBX1JFR19BRERSLCAqZGF0YSk7CisJCWdvNzAwN193cml0ZV9hZGRyKGdvLCBJMkNfREVWX1VQX0FERFJfUkVHX0FERFIsCisJCQkJCShhZGRyIDw8IDkpIHwgKGNvbW1hbmQgPj4gOCkpOworCQlyZXQgPSAwOworCQlnb3RvIGkyY19kb25lOworCX0KKworCS8qIE90aGVyd2lzZSwgd2UncmUgcmVhZGluZy4gIEZpcnN0IGNsZWFyIGkyY19yeF9kYXRhX3JkeS4gKi8KKwlpZiAoZ283MDA3X3JlYWRfYWRkcihnbywgSTJDX0RBVEFfUkVHX0FERFIsICZ2YWwpIDwgMCkKKwkJZ290byBpMmNfZG9uZTsKKworCS8qIFNlbmQgdGhlIHRhcmdldCBhZGRyZXNzIHBsdXMgcmVhZCBmbGFnICovCisJZ283MDA3X3dyaXRlX2FkZHIoZ28sIEkyQ19ERVZfVVBfQUREUl9SRUdfQUREUiwKKwkJCShhZGRyIDw8IDkpIHwgMHgwMTAwIHwgKGNvbW1hbmQgPj4gOCkpOworCisJLyogV2FpdCBmb3IgaTJjX3J4X2RhdGFfcmR5ICovCisJZm9yIChpID0gMDsgaSA8IDEwOyArK2kpIHsKKwkJaWYgKGdvNzAwN19yZWFkX2FkZHIoZ28sIFNUQVRVU19SRUdfQUREUiwgJnZhbCkgPCAwKQorCQkJZ290byBpMmNfZG9uZTsKKwkJaWYgKHZhbCAmIEkyQ19SRUFEX1JFQURZX01BU0spCisJCQlicmVhazsKKwkJbXNsZWVwKDEwMCk7CisJfQorCWlmIChpID09IDEwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiZ283MDA3LWkyYzogSTJDIGFkYXB0ZXIgaXMgaHVuZ1xuIik7CisJCWdvdG8gaTJjX2RvbmU7CisJfQorCisJLyogUmV0cmlldmUgdGhlIHJlYWQgYnl0ZSAqLworCWlmIChnbzcwMDdfcmVhZF9hZGRyKGdvLCBJMkNfREFUQV9SRUdfQUREUiwgJnZhbCkgPCAwKQorCQlnb3RvIGkyY19kb25lOworCSpkYXRhID0gdmFsOworCXJldCA9IDA7CisKK2kyY19kb25lOgorCWlmIChnby0+Ym9hcmRfaWQgPT0gR083MDA3X0JPQVJESURfQURMSU5LX01QRzI0KSB7CisJCS8qIElzb2xhdGUgdGhlIEkyQyBwb3J0IG9uIHRoaXMgR083MDA3IGZyb20gdGhlIHNoYXJlZCBidXMgKi8KKwkJZ283MDA3X3dyaXRlX2FkZHIoZ28sIDB4M2M4MiwgMHgwMDAwKTsKKwkJdXAoJmFkbGlua19tcGcyNF9pMmNfbG9jayk7CisJfQorCXVwKCZnby0+aHdfbG9jayk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBnbzcwMDdfc21idXNfeGZlcihzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIsIHUxNiBhZGRyLAorCQl1bnNpZ25lZCBzaG9ydCBmbGFncywgY2hhciByZWFkX3dyaXRlLAorCQl1OCBjb21tYW5kLCBpbnQgc2l6ZSwgdW5pb24gaTJjX3NtYnVzX2RhdGEgKmRhdGEpCit7CisJc3RydWN0IGdvNzAwNyAqZ28gPSBpMmNfZ2V0X2FkYXBkYXRhKGFkYXB0ZXIpOworCisJaWYgKHNpemUgIT0gSTJDX1NNQlVTX0JZVEVfREFUQSkKKwkJcmV0dXJuIC0xOworCXJldHVybiBnbzcwMDdfaTJjX3hmZXIoZ28sIGFkZHIsIHJlYWRfd3JpdGUgPT0gSTJDX1NNQlVTX1JFQUQsIGNvbW1hbmQsCisJCQlmbGFncyAmIEkyQ19DTElFTlRfU0NDQiA/IDB4MTAgOiAweDAwLCAmZGF0YS0+Ynl0ZSk7Cit9CisKKy8qIFZFUlkgTElNSVRFRCBJMkMgbWFzdGVyIHhmZXIgZnVuY3Rpb24gLS0gb25seSBuZWVkZWQgYmVjYXVzZSB0aGUKKyAqIFNNQnVzIGZ1bmN0aW9ucyBvbmx5IHN1cHBvcnQgOC1iaXQgY29tbWFuZHMgYW5kIHRoZSBTQUE3MTM1IHVzZXMKKyAqIDE2LWJpdCBjb21tYW5kcy4gIFRoZSBJMkMgaW50ZXJmYWNlIG9uIHRoZSBHTzcwMDcsIGFzIGxpbWl0ZWQgYXMKKyAqIGl0IGlzLCBkb2VzIHN1cHBvcnQgdGhpcyBtb2RlLiAqLworCitzdGF0aWMgaW50IGdvNzAwN19pMmNfbWFzdGVyX3hmZXIoc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyLAorCQkJCQlzdHJ1Y3QgaTJjX21zZyBtc2dzW10sIGludCBudW0pCit7CisJc3RydWN0IGdvNzAwNyAqZ28gPSBpMmNfZ2V0X2FkYXBkYXRhKGFkYXB0ZXIpOworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IG51bTsgKytpKSB7CisJCS8qIFdlIGNhbiBvbmx5IGRvIHR3byB0aGluZ3MgaGVyZSAtLSB3cml0ZSB0aHJlZSBieXRlcywgb3IKKwkJICogd3JpdGUgdHdvIGJ5dGVzIGFuZCByZWFkIG9uZSBieXRlLiAqLworCQlpZiAobXNnc1tpXS5sZW4gPT0gMikgeworCQkJaWYgKGkgKyAxID09IG51bSB8fCBtc2dzW2ldLmFkZHIgIT0gbXNnc1tpICsgMV0uYWRkciB8fAorCQkJCQkobXNnc1tpXS5mbGFncyAmIEkyQ19NX1JEKSB8fAorCQkJCQkhKG1zZ3NbaSArIDFdLmZsYWdzICYgSTJDX01fUkQpIHx8CisJCQkJCW1zZ3NbaSArIDFdLmxlbiAhPSAxKQorCQkJCXJldHVybiAtMTsKKwkJCWlmIChnbzcwMDdfaTJjX3hmZXIoZ28sIG1zZ3NbaV0uYWRkciwgMSwKKwkJCQkJKG1zZ3NbaV0uYnVmWzBdIDw8IDgpIHwgbXNnc1tpXS5idWZbMV0sCisJCQkJCTB4MDEsICZtc2dzW2kgKyAxXS5idWZbMF0pIDwgMCkKKwkJCQlyZXR1cm4gLTE7CisJCQkrK2k7CisJCX0gZWxzZSBpZiAobXNnc1tpXS5sZW4gPT0gMykgeworCQkJaWYgKG1zZ3NbaV0uZmxhZ3MgJiBJMkNfTV9SRCkKKwkJCQlyZXR1cm4gLTE7CisJCQlpZiAobXNnc1tpXS5sZW4gIT0gMykKKwkJCQlyZXR1cm4gLTE7CisJCQlpZiAoZ283MDA3X2kyY194ZmVyKGdvLCBtc2dzW2ldLmFkZHIsIDAsCisJCQkJCShtc2dzW2ldLmJ1ZlswXSA8PCA4KSB8IG1zZ3NbaV0uYnVmWzFdLAorCQkJCQkweDAxLCAmbXNnc1tpXS5idWZbMl0pIDwgMCkKKwkJCQlyZXR1cm4gLTE7CisJCX0gZWxzZQorCQkJcmV0dXJuIC0xOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdTMyIGdvNzAwN19mdW5jdGlvbmFsaXR5KHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlyZXR1cm4gSTJDX0ZVTkNfU01CVVNfQllURV9EQVRBOworfQorCitzdGF0aWMgc3RydWN0IGkyY19hbGdvcml0aG0gZ283MDA3X2FsZ28gPSB7CisJLnNtYnVzX3hmZXIJPSBnbzcwMDdfc21idXNfeGZlciwKKwkubWFzdGVyX3hmZXIJPSBnbzcwMDdfaTJjX21hc3Rlcl94ZmVyLAorCS5mdW5jdGlvbmFsaXR5CT0gZ283MDA3X2Z1bmN0aW9uYWxpdHksCit9OworCitzdGF0aWMgc3RydWN0IGkyY19hZGFwdGVyIGdvNzAwN19hZGFwX3RlbXBsID0geworCS5vd25lcgkJCT0gVEhJU19NT0RVTEUsCisJLmNsYXNzCQkJPSBJMkNfQ0xBU1NfVFZfQU5BTE9HLAorCS5uYW1lCQkJPSAiV0lTIEdPNzAwN1NCIiwKKwkuaWQJCQk9IEkyQ19BTEdPX0dPNzAwNywKKwkuYWxnbwkJCT0gJmdvNzAwN19hbGdvLAorfTsKKworaW50IGdvNzAwN19pMmNfaW5pdChzdHJ1Y3QgZ283MDA3ICpnbykKK3sKKwltZW1jcHkoJmdvLT5pMmNfYWRhcHRlciwgJmdvNzAwN19hZGFwX3RlbXBsLAorCQkJc2l6ZW9mKGdvNzAwN19hZGFwX3RlbXBsKSk7CisJZ28tPmkyY19hZGFwdGVyLmRldi5wYXJlbnQgPSBnby0+ZGV2OworCWkyY19zZXRfYWRhcGRhdGEoJmdvLT5pMmNfYWRhcHRlciwgZ28pOworCWlmIChpMmNfYWRkX2FkYXB0ZXIoJmdvLT5pMmNfYWRhcHRlcikgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUgorCQkJImdvNzAwNy1pMmM6IGVycm9yOiBpMmNfYWRkX2FkYXB0ZXIgZmFpbGVkXG4iKTsKKwkJcmV0dXJuIC0xOworCX0KKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9nbzcwMDcvZ283MDA3LXByaXYuaCBiL2RyaXZlcnMvc3RhZ2luZy9nbzcwMDcvZ283MDA3LXByaXYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMDU1NDJkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2dvNzAwNy9nbzcwMDctcHJpdi5oCkBAIC0wLDAgKzEsMjc5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMDYgTWljcm9uYXMgVVNBIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoVmVyc2lvbiAyKSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKyAqIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisvKgorICogVGhpcyBpcyB0aGUgcHJpdmF0ZSBpbmNsdWRlIGZpbGUgZm9yIHRoZSBnbzcwMDcgZHJpdmVyLiAgSXQgc2hvdWxkIG5vdAorICogYmUgaW5jbHVkZWQgYnkgYW55Ym9keSBidXQgdGhlIGRyaXZlciBpdHNlbGYsIGFuZCBlc3BlY2lhbGx5IG5vdCBieQorICogdXNlci1zcGFjZSBhcHBsaWNhdGlvbnMuCisgKi8KKworc3RydWN0IGdvNzAwNzsKKworLyogSURzIHRvIGFjdGl2YXRlIGJvYXJkLXNwZWNpZmljIHN1cHBvcnQgY29kZSAqLworI2RlZmluZSBHTzcwMDdfQk9BUkRJRF9NQVRSSVhfSUkJMAorI2RlZmluZSBHTzcwMDdfQk9BUkRJRF9NQVRSSVhfUkVMT0FECTEKKyNkZWZpbmUgR083MDA3X0JPQVJESURfU1RBUl9UUkVLCTIKKyNkZWZpbmUgR083MDA3X0JPQVJESURfUENJX1ZPWUFHRVIJMworI2RlZmluZSBHTzcwMDdfQk9BUkRJRF9YTUVOCQk0CisjZGVmaW5lIEdPNzAwN19CT0FSRElEX1hNRU5fSUkJCTUKKyNkZWZpbmUgR083MDA3X0JPQVJESURfWE1FTl9JSUkJCTYKKyNkZWZpbmUgR083MDA3X0JPQVJESURfTUFUUklYX1JFVgk3CisjZGVmaW5lIEdPNzAwN19CT0FSRElEX1BYX000MDJVCQkxNgorI2RlZmluZSBHTzcwMDdfQk9BUkRJRF9QWF9UVjQwMlVfQU5ZCTE3IC8qIG5lZWQgdG8gY2hlY2sgdHVuZXIgbW9kZWwgKi8KKyNkZWZpbmUgR083MDA3X0JPQVJESURfUFhfVFY0MDJVX05BCTE4IC8qIGRldGVjdGVkIE5UU0MgdHVuZXIgKi8KKyNkZWZpbmUgR083MDA3X0JPQVJESURfUFhfVFY0MDJVX0VVCTE5IC8qIGRldGVjdGVkIFBBTCB0dW5lciAqLworI2RlZmluZSBHTzcwMDdfQk9BUkRJRF9QWF9UVjQwMlVfSlAJMjAgLyogZGV0ZWN0ZWQgTlRTQy1KIHR1bmVyICovCisjZGVmaW5lIEdPNzAwN19CT0FSRElEX0xJRkVWSUVXX0xSMTkyCTIxIC8qIFRWIFdhbGtlciBVbHRyYSAqLworI2RlZmluZSBHTzcwMDdfQk9BUkRJRF9FTkRVUkEJCTIyCisjZGVmaW5lIEdPNzAwN19CT0FSRElEX0FETElOS19NUEcyNAkyMworCisvKiBWYXJpb3VzIGNoYXJhY3RlcmlzdGljcyBvZiBlYWNoIGJvYXJkICovCisjZGVmaW5lIEdPNzAwN19CT0FSRF9IQVNfQVVESU8JCSgxPDwwKQorI2RlZmluZSBHTzcwMDdfQk9BUkRfVVNFX09OQk9BUkRfSTJDCSgxPDwxKQorI2RlZmluZSBHTzcwMDdfQk9BUkRfSEFTX1RVTkVSCQkoMTw8MikKKworLyogQ2hhcmFjdGVyaXN0aWNzIG9mIHNlbnNvciBkZXZpY2VzICovCisjZGVmaW5lIEdPNzAwN19TRU5TT1JfVkFMSURfUE9MQVIJKDE8PDApCisjZGVmaW5lIEdPNzAwN19TRU5TT1JfSFJFRl9QT0xBUgkoMTw8MSkKKyNkZWZpbmUgR083MDA3X1NFTlNPUl9WUkVGX1BPTEFSCSgxPDwyKQorI2RlZmluZSBHTzcwMDdfU0VOU09SX0ZJRUxEX0lEX1BPTEFSCSgxPDwzKQorI2RlZmluZSBHTzcwMDdfU0VOU09SX0JJVF9XSURUSAkJKDE8PDQpCisjZGVmaW5lIEdPNzAwN19TRU5TT1JfVkFMSURfRU5BQkxFCSgxPDw1KQorI2RlZmluZSBHTzcwMDdfU0VOU09SXzY1NgkJKDE8PDYpCisjZGVmaW5lIEdPNzAwN19TRU5TT1JfQ09ORklHX01BU0sJMHg3ZgorI2RlZmluZSBHTzcwMDdfU0VOU09SX1RWCQkoMTw8NykKKyNkZWZpbmUgR083MDA3X1NFTlNPUl9WQkkJCSgxPDw4KQorI2RlZmluZSBHTzcwMDdfU0VOU09SX1NDQUxJTkcJCSgxPDw5KQorCisvKiBDaGFyYWN0ZXJpc3RpY3Mgb2YgYXVkaW8gc2Vuc29yIGRldmljZXMgKi8KKyNkZWZpbmUgR083MDA3X0FVRElPX0kyU19NT0RFXzEJCSgxKQorI2RlZmluZSBHTzcwMDdfQVVESU9fSTJTX01PREVfMgkJKDIpCisjZGVmaW5lIEdPNzAwN19BVURJT19JMlNfTU9ERV8zCQkoMykKKyNkZWZpbmUgR083MDA3X0FVRElPX0JDTEtfUE9MQVIJCSgxPDwyKQorI2RlZmluZSBHTzcwMDdfQVVESU9fV09SRF8xNAkJKDE0PDw0KQorI2RlZmluZSBHTzcwMDdfQVVESU9fV09SRF8xNgkJKDE2PDw0KQorI2RlZmluZSBHTzcwMDdfQVVESU9fT05FX0NIQU5ORUwJKDE8PDExKQorI2RlZmluZSBHTzcwMDdfQVVESU9fSTJTX01BU1RFUgkJKDE8PDE2KQorI2RlZmluZSBHTzcwMDdfQVVESU9fT0tJX01PREUJCSgxPDwxNykKKworc3RydWN0IGdvNzAwN19ib2FyZF9pbmZvIHsKKwljaGFyICpmaXJtd2FyZTsKKwl1bnNpZ25lZCBpbnQgZmxhZ3M7CisJaW50IGhwaV9idWZmZXJfY2FwOworCXVuc2lnbmVkIGludCBzZW5zb3JfZmxhZ3M7CisJaW50IHNlbnNvcl93aWR0aDsKKwlpbnQgc2Vuc29yX2hlaWdodDsKKwlpbnQgc2Vuc29yX2ZyYW1lcmF0ZTsKKwlpbnQgc2Vuc29yX2hfb2Zmc2V0OworCWludCBzZW5zb3Jfdl9vZmZzZXQ7CisJdW5zaWduZWQgaW50IGF1ZGlvX2ZsYWdzOworCWludCBhdWRpb19yYXRlOworCWludCBhdWRpb19iY2xrX2RpdjsKKwlpbnQgYXVkaW9fbWFpbl9kaXY7CisJaW50IG51bV9pMmNfZGV2czsKKwlzdHJ1Y3QgeworCQlpbnQgaWQ7CisJCWludCBhZGRyOworCX0gaTJjX2RldnNbNF07CisJaW50IG51bV9pbnB1dHM7CisJc3RydWN0IHsKKwkJaW50IHZpZGVvX2lucHV0OworCQlpbnQgYXVkaW9faW5wdXQ7CisJCWNoYXIgKm5hbWU7CisJfSBpbnB1dHNbNF07Cit9OworCitzdHJ1Y3QgZ283MDA3X2hwaV9vcHMgeworCWludCAoKmludGVyZmFjZV9yZXNldCkoc3RydWN0IGdvNzAwNyAqZ28pOworCWludCAoKndyaXRlX2ludGVycnVwdCkoc3RydWN0IGdvNzAwNyAqZ28sIGludCBhZGRyLCBpbnQgZGF0YSk7CisJaW50ICgqcmVhZF9pbnRlcnJ1cHQpKHN0cnVjdCBnbzcwMDcgKmdvKTsKKwlpbnQgKCpzdHJlYW1fc3RhcnQpKHN0cnVjdCBnbzcwMDcgKmdvKTsKKwlpbnQgKCpzdHJlYW1fc3RvcCkoc3RydWN0IGdvNzAwNyAqZ28pOworCWludCAoKnNlbmRfZmlybXdhcmUpKHN0cnVjdCBnbzcwMDcgKmdvLCB1OCAqZGF0YSwgaW50IGxlbik7Cit9OworCisvKiBUaGUgdmlkZW8gYnVmZmVyIHNpemUgbXVzdCBiZSBhIG11bHRpcGxlIG9mIFBBR0VfU0laRSAqLworI2RlZmluZQlHTzcwMDdfQlVGX1BBR0VTCSgxMjggKiAxMDI0IC8gUEFHRV9TSVpFKQorI2RlZmluZQlHTzcwMDdfQlVGX1NJWkUJCShHTzcwMDdfQlVGX1BBR0VTIDw8IFBBR0VfU0hJRlQpCisKK3N0cnVjdCBnbzcwMDdfYnVmZmVyIHsKKwlzdHJ1Y3QgZ283MDA3ICpnbzsgLyogUmV2ZXJzZSByZWZlcmVuY2UgZm9yIFZNQSBvcHMgKi8KKwlpbnQgaW5kZXg7IC8qIFJldmVyc2UgcmVmZXJlbmNlIGZvciBEUUJVRiAqLworCWVudW0geyBCVUZfU1RBVEVfSURMRSwgQlVGX1NUQVRFX1FVRVVFRCwgQlVGX1NUQVRFX0RPTkUgfSBzdGF0ZTsKKwl1MzIgc2VxOworCXN0cnVjdCB0aW1ldmFsIHRpbWVzdGFtcDsKKwlzdHJ1Y3QgbGlzdF9oZWFkIHN0cmVhbTsKKwlzdHJ1Y3QgcGFnZSAqcGFnZXNbR083MDA3X0JVRl9QQUdFUyArIDFdOyAvKiBleHRyYSBmb3Igc3RyYWRkbGluZyAqLworCXVuc2lnbmVkIGxvbmcgdXNlcl9hZGRyOworCXVuc2lnbmVkIGludCBwYWdlX2NvdW50OworCXVuc2lnbmVkIGludCBvZmZzZXQ7CisJdW5zaWduZWQgaW50IGJ5dGVzdXNlZDsKKwl1bnNpZ25lZCBpbnQgZnJhbWVfb2Zmc2V0OworCXUzMiBtb2RldF9hY3RpdmU7CisJaW50IG1hcHBlZDsKK307CisKK3N0cnVjdCBnbzcwMDdfZmlsZSB7CisJc3RydWN0IGdvNzAwNyAqZ287CisJc3RydWN0IHNlbWFwaG9yZSBsb2NrOworCWludCBidWZfY291bnQ7CisJc3RydWN0IGdvNzAwN19idWZmZXIgKmJ1ZnM7Cit9OworCisjZGVmaW5lCUdPNzAwN19GT1JNQVRfTUpQRUcJMAorI2RlZmluZSBHTzcwMDdfRk9STUFUX01QRUc0CTEKKyNkZWZpbmUgR083MDA3X0ZPUk1BVF9NUEVHMQkyCisjZGVmaW5lIEdPNzAwN19GT1JNQVRfTVBFRzIJMworI2RlZmluZSBHTzcwMDdfRk9STUFUX0gyNjMJNAorCisjZGVmaW5lIEdPNzAwN19SQVRJT18xXzEJMAorI2RlZmluZSBHTzcwMDdfUkFUSU9fNF8zCTEKKyNkZWZpbmUgR083MDA3X1JBVElPXzE2XzkJMgorCitlbnVtIGdvNzAwN19wYXJzZXJfc3RhdGUgeworCVNUQVRFX0RBVEEsCisJU1RBVEVfMDAsCisJU1RBVEVfMDBfMDAsCisJU1RBVEVfMDBfMDBfMDEsCisJU1RBVEVfRkYsCisJU1RBVEVfVkJJX0xFTl9BLAorCVNUQVRFX1ZCSV9MRU5fQiwKKwlTVEFURV9NT0RFVF9NQVAsCisJU1RBVEVfVU5QQVJTRUQsCit9OworCitzdHJ1Y3QgZ283MDA3IHsKKwlzdHJ1Y3QgZGV2aWNlICpkZXY7CisJc3RydWN0IGdvNzAwN19ib2FyZF9pbmZvICpib2FyZF9pbmZvOworCXVuc2lnbmVkIGludCBib2FyZF9pZDsKKwlpbnQgdHVuZXJfdHlwZTsKKwlpbnQgY2hhbm5lbF9udW1iZXI7IC8qIGZvciBtdWx0aS1jaGFubmVsIGJvYXJkcyBsaWtlIEFkbGluayBQQ0ktTVBHMjQgKi8KKwljaGFyIG5hbWVbNjRdOworCXN0cnVjdCB2aWRlb19kZXZpY2UgKnZpZGVvX2RldjsKKwlpbnQgcmVmX2NvdW50OworCWVudW0geyBTVEFUVVNfSU5JVCwgU1RBVFVTX09OTElORSwgU1RBVFVTX1NIVVRET1dOIH0gc3RhdHVzOworCXNwaW5sb2NrX3Qgc3BpbmxvY2s7CisJc3RydWN0IHNlbWFwaG9yZSBod19sb2NrOworCWludCBzdHJlYW1pbmc7CisJaW50IGluX3VzZTsKKwlpbnQgYXVkaW9fZW5hYmxlZDsKKworCS8qIFZpZGVvIGlucHV0ICovCisJaW50IGlucHV0OworCWVudW0geyBHTzcwMDdfU1REX05UU0MsIEdPNzAwN19TVERfUEFMLCBHTzcwMDdfU1REX09USEVSIH0gc3RhbmRhcmQ7CisJaW50IHNlbnNvcl9mcmFtZXJhdGU7CisJaW50IHdpZHRoOworCWludCBoZWlnaHQ7CisJaW50IGVuY29kZXJfaF9vZmZzZXQ7CisJaW50IGVuY29kZXJfdl9vZmZzZXQ7CisJdW5zaWduZWQgaW50IGVuY29kZXJfaF9oYWx2ZToxOworCXVuc2lnbmVkIGludCBlbmNvZGVyX3ZfaGFsdmU6MTsKKwl1bnNpZ25lZCBpbnQgZW5jb2Rlcl9zdWJzYW1wbGU6MTsKKworCS8qIEVuY29kZXIgY29uZmlnICovCisJaW50IGZvcm1hdDsKKwlpbnQgYml0cmF0ZTsKKwlpbnQgZnBzX3NjYWxlOworCWludCBwYWxpOworCWludCBhc3BlY3RfcmF0aW87CisJaW50IGdvcF9zaXplOworCXVuc2lnbmVkIGludCBpcGI6MTsKKwl1bnNpZ25lZCBpbnQgY2xvc2VkX2dvcDoxOworCXVuc2lnbmVkIGludCByZXBlYXRfc2VxaGVhZDoxOworCXVuc2lnbmVkIGludCBzZXFfaGVhZGVyX2VuYWJsZToxOworCXVuc2lnbmVkIGludCBnb3BfaGVhZGVyX2VuYWJsZToxOworCXVuc2lnbmVkIGludCBkdmRfbW9kZToxOworCXVuc2lnbmVkIGludCBpbnRlcmxhY2VfY29kaW5nOjE7CisKKwkvKiBNb3Rpb24gZGV0ZWN0aW9uICovCisJdW5zaWduZWQgaW50IG1vZGV0X2VuYWJsZToxOworCXN0cnVjdCB7CisJCXVuc2lnbmVkIGludCBlbmFibGU6MTsKKwkJaW50IHBpeGVsX3RocmVzaG9sZDsKKwkJaW50IG1vdGlvbl90aHJlc2hvbGQ7CisJCWludCBtYl90aHJlc2hvbGQ7CisJfSBtb2RldFs0XTsKKwl1bnNpZ25lZCBjaGFyIG1vZGV0X21hcFsxNjI0XTsKKwl1bnNpZ25lZCBjaGFyIGFjdGl2ZV9tYXBbMjE2XTsKKworCS8qIFZpZGVvIHN0cmVhbWluZyAqLworCXN0cnVjdCBnbzcwMDdfYnVmZmVyICphY3RpdmVfYnVmOworCWVudW0gZ283MDA3X3BhcnNlcl9zdGF0ZSBzdGF0ZTsKKwlpbnQgcGFyc2VfbGVuZ3RoOworCXUxNiBtb2RldF93b3JkOworCWludCBzZWVuX2ZyYW1lOworCXUzMiBuZXh0X3NlcTsKKwlzdHJ1Y3QgbGlzdF9oZWFkIHN0cmVhbTsKKwl3YWl0X3F1ZXVlX2hlYWRfdCBmcmFtZV93YWl0cTsKKworCS8qIEF1ZGlvIHN0cmVhbWluZyAqLworCXZvaWQgKCphdWRpb19kZWxpdmVyKShzdHJ1Y3QgZ283MDA3ICpnbywgdTggKmJ1ZiwgaW50IGxlbmd0aCk7CisJdm9pZCAqc25kX2NvbnRleHQ7CisKKwkvKiBJMkMgKi8KKwlpbnQgaTJjX2FkYXB0ZXJfb25saW5lOworCXN0cnVjdCBpMmNfYWRhcHRlciBpMmNfYWRhcHRlcjsKKworCS8qIEhQSSBkcml2ZXIgKi8KKwlzdHJ1Y3QgZ283MDA3X2hwaV9vcHMgKmhwaV9vcHM7CisJdm9pZCAqaHBpX2NvbnRleHQ7CisJaW50IGludGVycnVwdF9hdmFpbGFibGU7CisJd2FpdF9xdWV1ZV9oZWFkX3QgaW50ZXJydXB0X3dhaXRxOworCXVuc2lnbmVkIHNob3J0IGludGVycnVwdF92YWx1ZTsKKwl1bnNpZ25lZCBzaG9ydCBpbnRlcnJ1cHRfZGF0YTsKK307CisKKy8qIEFsbCBvZiB0aGVzZSBtdXN0IGJlIGNhbGxlZCB3aXRoIHRoZSBocGlfbG9jayBzZW1hcGhvcmUgaGVsZCEgKi8KKyNkZWZpbmUgZ283MDA3X2ludGVyZmFjZV9yZXNldChnbykgXAorCQkJKChnbyktPmhwaV9vcHMtPmludGVyZmFjZV9yZXNldChnbykpCisjZGVmaW5lCWdvNzAwN193cml0ZV9pbnRlcnJ1cHQoZ28sIHgsIHkpIFwKKwkJCSgoZ28pLT5ocGlfb3BzLT53cml0ZV9pbnRlcnJ1cHQpKChnbyksICh4KSwgKHkpKQorI2RlZmluZSBnbzcwMDdfc3RyZWFtX3N0YXJ0KGdvKSBcCisJCQkoKGdvKS0+aHBpX29wcy0+c3RyZWFtX3N0YXJ0KGdvKSkKKyNkZWZpbmUgZ283MDA3X3N0cmVhbV9zdG9wKGdvKSBcCisJCQkoKGdvKS0+aHBpX29wcy0+c3RyZWFtX3N0b3AoZ28pKQorI2RlZmluZQlnbzcwMDdfc2VuZF9maXJtd2FyZShnbywgeCwgeSkgXAorCQkJKChnbyktPmhwaV9vcHMtPnNlbmRfZmlybXdhcmUpKChnbyksICh4KSwgKHkpKQorI2RlZmluZSBnbzcwMDdfd3JpdGVfYWRkcihnbywgeCwgeSkgXAorCQkJKChnbyktPmhwaV9vcHMtPndyaXRlX2ludGVycnVwdCkoKGdvKSwgKHgpfDB4ODAwMCwgKHkpKQorCisvKiBnbzcwMDctZHJpdmVyLmMgKi8KK2ludCBnbzcwMDdfcmVhZF9hZGRyKHN0cnVjdCBnbzcwMDcgKmdvLCB1MTYgYWRkciwgdTE2ICpkYXRhKTsKK2ludCBnbzcwMDdfcmVhZF9pbnRlcnJ1cHQoc3RydWN0IGdvNzAwNyAqZ28sIHUxNiAqdmFsdWUsIHUxNiAqZGF0YSk7CitpbnQgZ283MDA3X2Jvb3RfZW5jb2RlcihzdHJ1Y3QgZ283MDA3ICpnbywgaW50IGluaXRfaTJjKTsKK2ludCBnbzcwMDdfcmVzZXRfZW5jb2RlcihzdHJ1Y3QgZ283MDA3ICpnbyk7CitpbnQgZ283MDA3X3JlZ2lzdGVyX2VuY29kZXIoc3RydWN0IGdvNzAwNyAqZ28pOworaW50IGdvNzAwN19zdGFydF9lbmNvZGVyKHN0cnVjdCBnbzcwMDcgKmdvKTsKK3ZvaWQgZ283MDA3X3BhcnNlX3ZpZGVvX3N0cmVhbShzdHJ1Y3QgZ283MDA3ICpnbywgdTggKmJ1ZiwgaW50IGxlbmd0aCk7CitzdHJ1Y3QgZ283MDA3ICpnbzcwMDdfYWxsb2Moc3RydWN0IGdvNzAwN19ib2FyZF9pbmZvICpib2FyZCwKKwkJCQkJc3RydWN0IGRldmljZSAqZGV2KTsKK3ZvaWQgZ283MDA3X3JlbW92ZShzdHJ1Y3QgZ283MDA3ICpnbyk7CisKKy8qIGdvNzAwNy1mdy5jICovCitpbnQgZ283MDA3X2NvbnN0cnVjdF9md19pbWFnZShzdHJ1Y3QgZ283MDA3ICpnbywgdTggKipmdywgaW50ICpmd2xlbik7CisKKy8qIGdvNzAwNy1pMmMuYyAqLworaW50IGdvNzAwN19pMmNfaW5pdChzdHJ1Y3QgZ283MDA3ICpnbyk7CitpbnQgZ283MDA3X2kyY19yZW1vdmUoc3RydWN0IGdvNzAwNyAqZ28pOworCisvKiBnbzcwMDctdjRsMi5jICovCitpbnQgZ283MDA3X3Y0bDJfaW5pdChzdHJ1Y3QgZ283MDA3ICpnbyk7Cit2b2lkIGdvNzAwN192NGwyX3JlbW92ZShzdHJ1Y3QgZ283MDA3ICpnbyk7CisKKy8qIHNuZC1nbzcwMDcuYyAqLworaW50IGdvNzAwN19zbmRfaW5pdChzdHJ1Y3QgZ283MDA3ICpnbyk7CitpbnQgZ283MDA3X3NuZF9yZW1vdmUoc3RydWN0IGdvNzAwNyAqZ28pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2dvNzAwNy9nbzcwMDctdXNiLmMgYi9kcml2ZXJzL3N0YWdpbmcvZ283MDA3L2dvNzAwNy11c2IuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNGVkNmQyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2dvNzAwNy9nbzcwMDctdXNiLmMKQEAgLTAsMCArMSwxMjI5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMDYgTWljcm9uYXMgVVNBIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoVmVyc2lvbiAyKSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKyAqIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC93YWl0Lmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC90aW1lLmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC91c2IuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CisjaW5jbHVkZSA8bWVkaWEvdHZhdWRpby5oPgorCisjaW5jbHVkZSAiZ283MDA3LXByaXYuaCIKKyNpbmNsdWRlICJ3aXMtaTJjLmgiCisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgYXNzdW1lX2VuZHVyYTsKK21vZHVsZV9wYXJhbShhc3N1bWVfZW5kdXJhLCBpbnQsIDA2NDQpOworTU9EVUxFX1BBUk1fREVTQyhhc3N1bWVfZW5kdXJhLCAid2hlbiBwcm9iaW5nIGZhaWxzLCBoYXJkd2FyZSBpcyBhIFBlbGNvIEVuZHVyYSIpOworCisvKiAjZGVmaW5lIEdPNzAwN19VU0JfREVCVUcgKi8KKy8qICNkZWZpbmUgR083MDA3X0kyQ19ERUJVRyAqLyAvKiBmb3IgZGVidWdnaW5nIHRoZSBFWi1VU0IgSTJDIGFkYXB0ZXIgKi8KKworI2RlZmluZQlIUElfU1RBVFVTX0FERFIJMHhGRkY0CisjZGVmaW5lCUlOVF9QQVJBTV9BRERSCTB4RkZGNgorI2RlZmluZQlJTlRfSU5ERVhfQUREUgkweEZGRjgKKworLyoKKyAqIFBpcGVzIG9uIEVaLVVTQiBpbnRlcmZhY2U6CisgKiAJMCBzbmQgLSBDb250cm9sCisgKiAJMCByY3YgLSBDb250cm9sCisgKiAJMiBzbmQgLSBEb3dubG9hZCBmaXJtd2FyZSAoY29udHJvbCkKKyAqIAk0IHJjdiAtIFJlYWQgSW50ZXJydXB0IChpbnRlcnJ1cHQpCisgKiAJNiByY3YgLSBSZWFkIFZpZGVvIChidWxrKQorICogCTggcmN2IC0gUmVhZCBBdWRpbyAoYnVsaykKKyAqLworCisjZGVmaW5lIEdPNzAwN19VU0JfRVpVU0IJCSgxPDwwKQorI2RlZmluZSBHTzcwMDdfVVNCX0VaVVNCX0kyQwkJKDE8PDEpCisKK3N0cnVjdCBnbzcwMDdfdXNiX2JvYXJkIHsKKwl1bnNpZ25lZCBpbnQgZmxhZ3M7CisJc3RydWN0IGdvNzAwN19ib2FyZF9pbmZvIG1haW5faW5mbzsKK307CisKK3N0cnVjdCBnbzcwMDdfdXNiIHsKKwlzdHJ1Y3QgZ283MDA3X3VzYl9ib2FyZCAqYm9hcmQ7CisJc3RydWN0IHNlbWFwaG9yZSBpMmNfbG9jazsKKwlzdHJ1Y3QgdXNiX2RldmljZSAqdXNiZGV2OworCXN0cnVjdCB1cmIgKnZpZGVvX3VyYnNbOF07CisJc3RydWN0IHVyYiAqYXVkaW9fdXJic1s4XTsKKwlzdHJ1Y3QgdXJiICppbnRyX3VyYjsKK307CisKKy8qKioqKioqKioqKioqKioqKioqKioqKiBQcm9kdWN0IHNwZWNpZmljYXRpb24gZGF0YSAqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIHN0cnVjdCBnbzcwMDdfdXNiX2JvYXJkIGJvYXJkX21hdHJpeF9paSA9IHsKKwkuZmxhZ3MJCT0gR083MDA3X1VTQl9FWlVTQiwKKwkubWFpbl9pbmZvCT0geworCQkuZmlybXdhcmUJID0gImdvNzAwN3R2LmJpbiIsCisJCS5mbGFncwkJID0gR083MDA3X0JPQVJEX0hBU19BVURJTyB8CisJCQkJCUdPNzAwN19CT0FSRF9VU0VfT05CT0FSRF9JMkMsCisJCS5hdWRpb19mbGFncwkgPSBHTzcwMDdfQVVESU9fSTJTX01PREVfMSB8CisJCQkJCUdPNzAwN19BVURJT19XT1JEXzE2LAorCQkuYXVkaW9fcmF0ZQkgPSA0ODAwMCwKKwkJLmF1ZGlvX2JjbGtfZGl2CSA9IDgsCisJCS5hdWRpb19tYWluX2RpdgkgPSAyLAorCQkuaHBpX2J1ZmZlcl9jYXAgID0gNywKKwkJLnNlbnNvcl9mbGFncwkgPSBHTzcwMDdfU0VOU09SXzY1NiB8CisJCQkJCUdPNzAwN19TRU5TT1JfVkFMSURfRU5BQkxFIHwKKwkJCQkJR083MDA3X1NFTlNPUl9UViB8CisJCQkJCUdPNzAwN19TRU5TT1JfVkJJIHwKKwkJCQkJR083MDA3X1NFTlNPUl9TQ0FMSU5HLAorCQkubnVtX2kyY19kZXZzCSA9IDEsCisJCS5pMmNfZGV2cwkgPSB7CisJCQl7CisJCQkJLmlkCT0gSTJDX0RSSVZFUklEX1dJU19TQUE3MTE1LAorCQkJCS5hZGRyCT0gMHgyMCwKKwkJCX0sCisJCX0sCisJCS5udW1faW5wdXRzCSA9IDIsCisJCS5pbnB1dHMgCSA9IHsKKwkJCXsKKwkJCQkudmlkZW9faW5wdXQJPSAwLAorCQkJCS5uYW1lCQk9ICJDb21wb3NpdGUiLAorCQkJfSwKKwkJCXsKKwkJCQkudmlkZW9faW5wdXQJPSA5LAorCQkJCS5uYW1lCQk9ICJTLVZpZGVvIiwKKwkJCX0sCisJCX0sCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgZ283MDA3X3VzYl9ib2FyZCBib2FyZF9tYXRyaXhfcmVsb2FkID0geworCS5mbGFncwkJPSBHTzcwMDdfVVNCX0VaVVNCLAorCS5tYWluX2luZm8JPSB7CisJCS5maXJtd2FyZQkgPSAiZ283MDA3dHYuYmluIiwKKwkJLmZsYWdzCQkgPSBHTzcwMDdfQk9BUkRfSEFTX0FVRElPIHwKKwkJCQkJR083MDA3X0JPQVJEX1VTRV9PTkJPQVJEX0kyQywKKwkJLmF1ZGlvX2ZsYWdzCSA9IEdPNzAwN19BVURJT19JMlNfTU9ERV8xIHwKKwkJCQkJR083MDA3X0FVRElPX0kyU19NQVNURVIgfAorCQkJCQlHTzcwMDdfQVVESU9fV09SRF8xNiwKKwkJLmF1ZGlvX3JhdGUJID0gNDgwMDAsCisJCS5hdWRpb19iY2xrX2RpdgkgPSA4LAorCQkuYXVkaW9fbWFpbl9kaXYJID0gMiwKKwkJLmhwaV9idWZmZXJfY2FwICA9IDcsCisJCS5zZW5zb3JfZmxhZ3MJID0gR083MDA3X1NFTlNPUl82NTYgfAorCQkJCQlHTzcwMDdfU0VOU09SX1RWLAorCQkubnVtX2kyY19kZXZzCSA9IDEsCisJCS5pMmNfZGV2cwkgPSB7CisJCQl7CisJCQkJLmlkCT0gSTJDX0RSSVZFUklEX1dJU19TQUE3MTEzLAorCQkJCS5hZGRyCT0gMHgyNSwKKwkJCX0sCisJCX0sCisJCS5udW1faW5wdXRzCSA9IDIsCisJCS5pbnB1dHMgCSA9IHsKKwkJCXsKKwkJCQkudmlkZW9faW5wdXQJPSAwLAorCQkJCS5uYW1lCQk9ICJDb21wb3NpdGUiLAorCQkJfSwKKwkJCXsKKwkJCQkudmlkZW9faW5wdXQJPSA5LAorCQkJCS5uYW1lCQk9ICJTLVZpZGVvIiwKKwkJCX0sCisJCX0sCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgZ283MDA3X3VzYl9ib2FyZCBib2FyZF9zdGFyX3RyZWsgPSB7CisJLmZsYWdzCQk9IEdPNzAwN19VU0JfRVpVU0IgfCBHTzcwMDdfVVNCX0VaVVNCX0kyQywKKwkubWFpbl9pbmZvCT0geworCQkuZmlybXdhcmUJID0gImdvNzAwN3R2LmJpbiIsCisJCS5mbGFncwkJID0gR083MDA3X0JPQVJEX0hBU19BVURJTywgLyogfAorCQkJCQlHTzcwMDdfQk9BUkRfSEFTX1RVTkVSLCAqLworCQkuc2Vuc29yX2ZsYWdzCSA9IEdPNzAwN19TRU5TT1JfNjU2IHwKKwkJCQkJR083MDA3X1NFTlNPUl9WQUxJRF9FTkFCTEUgfAorCQkJCQlHTzcwMDdfU0VOU09SX1RWIHwKKwkJCQkJR083MDA3X1NFTlNPUl9WQkkgfAorCQkJCQlHTzcwMDdfU0VOU09SX1NDQUxJTkcsCisJCS5hdWRpb19mbGFncwkgPSBHTzcwMDdfQVVESU9fSTJTX01PREVfMSB8CisJCQkJCUdPNzAwN19BVURJT19XT1JEXzE2LAorCQkuYXVkaW9fYmNsa19kaXYJID0gOCwKKwkJLmF1ZGlvX21haW5fZGl2CSA9IDIsCisJCS5ocGlfYnVmZmVyX2NhcCAgPSA3LAorCQkubnVtX2kyY19kZXZzCSA9IDEsCisJCS5pMmNfZGV2cwkgPSB7CisJCQl7CisJCQkJLmlkCT0gSTJDX0RSSVZFUklEX1dJU19TQUE3MTE1LAorCQkJCS5hZGRyCT0gMHgyMCwKKwkJCX0sCisJCX0sCisJCS5udW1faW5wdXRzCSA9IDIsCisJCS5pbnB1dHMgCSA9IHsKKwkJCXsKKwkJCQkudmlkZW9faW5wdXQJPSAxLAorCQkJLyoJLmF1ZGlvX2lucHV0CT0gQVVESU9fRVhURVJOLCAqLworCQkJCS5uYW1lCQk9ICJDb21wb3NpdGUiLAorCQkJfSwKKwkJCXsKKwkJCQkudmlkZW9faW5wdXQJPSA4LAorCQkJLyoJLmF1ZGlvX2lucHV0CT0gQVVESU9fRVhURVJOLCAqLworCQkJCS5uYW1lCQk9ICJTLVZpZGVvIiwKKwkJCX0sCisJCS8qCXsKKwkJICoJCS52aWRlb19pbnB1dAk9IDMsCisJCSAqCQkuYXVkaW9faW5wdXQJPSBBVURJT19UVU5FUiwKKwkJICoJCS5uYW1lCQk9ICJUdW5lciIsCisJCSAqCX0sCisJCSAqLworCQl9LAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IGdvNzAwN191c2JfYm9hcmQgYm9hcmRfcHhfdHY0MDJ1ID0geworCS5mbGFncwkJPSBHTzcwMDdfVVNCX0VaVVNCIHwgR083MDA3X1VTQl9FWlVTQl9JMkMsCisJLm1haW5faW5mbwk9IHsKKwkJLmZpcm13YXJlCSA9ICJnbzcwMDd0di5iaW4iLAorCQkuZmxhZ3MJCSA9IEdPNzAwN19CT0FSRF9IQVNfQVVESU8gfAorCQkJCQlHTzcwMDdfQk9BUkRfSEFTX1RVTkVSLAorCQkuc2Vuc29yX2ZsYWdzCSA9IEdPNzAwN19TRU5TT1JfNjU2IHwKKwkJCQkJR083MDA3X1NFTlNPUl9WQUxJRF9FTkFCTEUgfAorCQkJCQlHTzcwMDdfU0VOU09SX1RWIHwKKwkJCQkJR083MDA3X1NFTlNPUl9WQkkgfAorCQkJCQlHTzcwMDdfU0VOU09SX1NDQUxJTkcsCisJCS5hdWRpb19mbGFncwkgPSBHTzcwMDdfQVVESU9fSTJTX01PREVfMSB8CisJCQkJCUdPNzAwN19BVURJT19XT1JEXzE2LAorCQkuYXVkaW9fYmNsa19kaXYJID0gOCwKKwkJLmF1ZGlvX21haW5fZGl2CSA9IDIsCisJCS5ocGlfYnVmZmVyX2NhcCAgPSA3LAorCQkubnVtX2kyY19kZXZzCSA9IDMsCisJCS5pMmNfZGV2cwkgPSB7CisJCQl7CisJCQkJLmlkCT0gSTJDX0RSSVZFUklEX1dJU19TQUE3MTE1LAorCQkJCS5hZGRyCT0gMHgyMCwKKwkJCX0sCisJCQl7CisJCQkJLmlkCT0gSTJDX0RSSVZFUklEX1dJU19VREExMzQyLAorCQkJCS5hZGRyCT0gMHgxYSwKKwkJCX0sCisJCQl7CisJCQkJLmlkCT0gSTJDX0RSSVZFUklEX1dJU19TT05ZX1RVTkVSLAorCQkJCS5hZGRyCT0gMHg2MCwKKwkJCX0sCisJCX0sCisJCS5udW1faW5wdXRzCSA9IDMsCisJCS5pbnB1dHMgCSA9IHsKKwkJCXsKKwkJCQkudmlkZW9faW5wdXQJPSAxLAorCQkuYXVkaW9faW5wdXQJID0gVFZBVURJT19JTlBVVF9FWFRFUk4sCisJCQkJLm5hbWUJCT0gIkNvbXBvc2l0ZSIsCisJCQl9LAorCQkJeworCQkJCS52aWRlb19pbnB1dAk9IDgsCisJCQkJLmF1ZGlvX2lucHV0CT0gVFZBVURJT19JTlBVVF9FWFRFUk4sCisJCQkJLm5hbWUJCT0gIlMtVmlkZW8iLAorCQkJfSwKKwkJCXsKKwkJCQkudmlkZW9faW5wdXQJPSAzLAorCQkJCS5hdWRpb19pbnB1dAk9IFRWQVVESU9fSU5QVVRfVFVORVIsCisJCQkJLm5hbWUJCT0gIlR1bmVyIiwKKwkJCX0sCisJCX0sCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgZ283MDA3X3VzYl9ib2FyZCBib2FyZF94bWVuID0geworCS5mbGFncwkJPSAwLAorCS5tYWluX2luZm8JPSB7CisJCS5maXJtd2FyZQkgID0gImdvNzAwN3R2LmJpbiIsCisJCS5mbGFncwkJICA9IEdPNzAwN19CT0FSRF9VU0VfT05CT0FSRF9JMkMsCisJCS5ocGlfYnVmZmVyX2NhcCAgID0gMCwKKwkJLnNlbnNvcl9mbGFncwkgID0gR083MDA3X1NFTlNPUl9WUkVGX1BPTEFSLAorCQkuc2Vuc29yX3dpZHRoCSAgPSAzMjAsCisJCS5zZW5zb3JfaGVpZ2h0CSAgPSAyNDAsCisJCS5zZW5zb3JfZnJhbWVyYXRlID0gMzAwMzAsCisJCS5hdWRpb19mbGFncwkgID0gR083MDA3X0FVRElPX09ORV9DSEFOTkVMIHwKKwkJCQkJR083MDA3X0FVRElPX0kyU19NT0RFXzMgfAorCQkJCQlHTzcwMDdfQVVESU9fV09SRF8xNCB8CisJCQkJCUdPNzAwN19BVURJT19JMlNfTUFTVEVSIHwKKwkJCQkJR083MDA3X0FVRElPX0JDTEtfUE9MQVIgfAorCQkJCQlHTzcwMDdfQVVESU9fT0tJX01PREUsCisJCS5hdWRpb19yYXRlCSAgPSA4MDAwLAorCQkuYXVkaW9fYmNsa19kaXYJICA9IDQ4LAorCQkuYXVkaW9fbWFpbl9kaXYJICA9IDEsCisJCS5udW1faTJjX2RldnMJICA9IDEsCisJCS5pMmNfZGV2cwkgID0geworCQkJeworCQkJCS5pZAk9IEkyQ19EUklWRVJJRF9XSVNfT1Y3NjQwLAorCQkJCS5hZGRyCT0gMHgyMSwKKwkJCX0sCisJCX0sCisJCS5udW1faW5wdXRzCSAgPSAxLAorCQkuaW5wdXRzIAkgID0geworCQkJeworCQkJCS5uYW1lCQk9ICJDYW1lcmEiLAorCQkJfSwKKwkJfSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBnbzcwMDdfdXNiX2JvYXJkIGJvYXJkX21hdHJpeF9yZXZvbHV0aW9uID0geworCS5mbGFncwkJPSBHTzcwMDdfVVNCX0VaVVNCLAorCS5tYWluX2luZm8JPSB7CisJCS5maXJtd2FyZQkgPSAiZ283MDA3dHYuYmluIiwKKwkJLmZsYWdzCQkgPSBHTzcwMDdfQk9BUkRfSEFTX0FVRElPIHwKKwkJCQkJR083MDA3X0JPQVJEX1VTRV9PTkJPQVJEX0kyQywKKwkJLmF1ZGlvX2ZsYWdzCSA9IEdPNzAwN19BVURJT19JMlNfTU9ERV8xIHwKKwkJCQkJR083MDA3X0FVRElPX0kyU19NQVNURVIgfAorCQkJCQlHTzcwMDdfQVVESU9fV09SRF8xNiwKKwkJLmF1ZGlvX3JhdGUJID0gNDgwMDAsCisJCS5hdWRpb19iY2xrX2RpdgkgPSA4LAorCQkuYXVkaW9fbWFpbl9kaXYJID0gMiwKKwkJLmhwaV9idWZmZXJfY2FwICA9IDcsCisJCS5zZW5zb3JfZmxhZ3MJID0gR083MDA3X1NFTlNPUl82NTYgfAorCQkJCQlHTzcwMDdfU0VOU09SX1RWIHwKKwkJCQkJR083MDA3X1NFTlNPUl9WQkksCisJCS5udW1faTJjX2RldnMJID0gMSwKKwkJLmkyY19kZXZzCSA9IHsKKwkJCXsKKwkJCQkuaWQJPSBJMkNfRFJJVkVSSURfV0lTX1RXOTkwMywKKwkJCQkuYWRkcgk9IDB4NDQsCisJCQl9LAorCQl9LAorCQkubnVtX2lucHV0cwkgPSAyLAorCQkuaW5wdXRzIAkgPSB7CisJCQl7CisJCQkJLnZpZGVvX2lucHV0CT0gMiwKKwkJCQkubmFtZQkJPSAiQ29tcG9zaXRlIiwKKwkJCX0sCisJCQl7CisJCQkJLnZpZGVvX2lucHV0CT0gOCwKKwkJCQkubmFtZQkJPSAiUy1WaWRlbyIsCisJCQl9LAorCQl9LAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IGdvNzAwN191c2JfYm9hcmQgYm9hcmRfbGlmZXZpZXdfbHIxOTIgPSB7CisJLmZsYWdzCQk9IEdPNzAwN19VU0JfRVpVU0IsCisJLm1haW5faW5mbwk9IHsKKwkJLmZpcm13YXJlCSA9ICJnbzcwMDd0di5iaW4iLAorCQkuZmxhZ3MJCSA9IEdPNzAwN19CT0FSRF9IQVNfQVVESU8gfAorCQkJCQlHTzcwMDdfQk9BUkRfVVNFX09OQk9BUkRfSTJDLAorCQkuYXVkaW9fZmxhZ3MJID0gR083MDA3X0FVRElPX0kyU19NT0RFXzEgfAorCQkJCQlHTzcwMDdfQVVESU9fV09SRF8xNiwKKwkJLmF1ZGlvX3JhdGUJID0gNDgwMDAsCisJCS5hdWRpb19iY2xrX2RpdgkgPSA4LAorCQkuYXVkaW9fbWFpbl9kaXYJID0gMiwKKwkJLmhwaV9idWZmZXJfY2FwICA9IDcsCisJCS5zZW5zb3JfZmxhZ3MJID0gR083MDA3X1NFTlNPUl82NTYgfAorCQkJCQlHTzcwMDdfU0VOU09SX1ZBTElEX0VOQUJMRSB8CisJCQkJCUdPNzAwN19TRU5TT1JfVFYgfAorCQkJCQlHTzcwMDdfU0VOU09SX1ZCSSB8CisJCQkJCUdPNzAwN19TRU5TT1JfU0NBTElORywKKwkJLm51bV9pMmNfZGV2cwkgPSAwLAorCQkubnVtX2lucHV0cwkgPSAxLAorCQkuaW5wdXRzIAkgPSB7CisJCQl7CisJCQkJLnZpZGVvX2lucHV0CT0gMCwKKwkJCQkubmFtZQkJPSAiQ29tcG9zaXRlIiwKKwkJCX0sCisJCX0sCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgZ283MDA3X3VzYl9ib2FyZCBib2FyZF9lbmR1cmEgPSB7CisJLmZsYWdzCQk9IDAsCisJLm1haW5faW5mbwk9IHsKKwkJLmZpcm13YXJlCSA9ICJnbzcwMDd0di5iaW4iLAorCQkuZmxhZ3MJCSA9IDAsCisJCS5hdWRpb19mbGFncwkgPSBHTzcwMDdfQVVESU9fSTJTX01PREVfMSB8CisJCQkJCUdPNzAwN19BVURJT19JMlNfTUFTVEVSIHwKKwkJCQkJR083MDA3X0FVRElPX1dPUkRfMTYsCisJCS5hdWRpb19yYXRlCSA9IDgwMDAsCisJCS5hdWRpb19iY2xrX2RpdgkgPSA0OCwKKwkJLmF1ZGlvX21haW5fZGl2CSA9IDgsCisJCS5ocGlfYnVmZmVyX2NhcCAgPSAwLAorCQkuc2Vuc29yX2ZsYWdzCSA9IEdPNzAwN19TRU5TT1JfNjU2IHwKKwkJCQkJR083MDA3X1NFTlNPUl9UViwKKwkJLnNlbnNvcl9oX29mZnNldCA9IDgsCisJCS5udW1faTJjX2RldnMJID0gMCwKKwkJLm51bV9pbnB1dHMJID0gMSwKKwkJLmlucHV0cyAJID0geworCQkJeworCQkJCS5uYW1lCQk9ICJDYW1lcmEiLAorCQkJfSwKKwkJfSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBnbzcwMDdfdXNiX2JvYXJkIGJvYXJkX2FkbGlua19tcGcyNCA9IHsKKwkuZmxhZ3MJCT0gMCwKKwkubWFpbl9pbmZvCT0geworCQkuZmlybXdhcmUJID0gImdvNzAwN3R2LmJpbiIsCisJCS5mbGFncwkJID0gR083MDA3X0JPQVJEX1VTRV9PTkJPQVJEX0kyQywKKwkJLmF1ZGlvX2ZsYWdzCSA9IEdPNzAwN19BVURJT19JMlNfTU9ERV8xIHwKKwkJCQkJR083MDA3X0FVRElPX0kyU19NQVNURVIgfAorCQkJCQlHTzcwMDdfQVVESU9fV09SRF8xNiwKKwkJLmF1ZGlvX3JhdGUJID0gNDgwMDAsCisJCS5hdWRpb19iY2xrX2RpdgkgPSA4LAorCQkuYXVkaW9fbWFpbl9kaXYJID0gMiwKKwkJLmhwaV9idWZmZXJfY2FwICA9IDAsCisJCS5zZW5zb3JfZmxhZ3MJID0gR083MDA3X1NFTlNPUl82NTYgfAorCQkJCQlHTzcwMDdfU0VOU09SX1RWIHwKKwkJCQkJR083MDA3X1NFTlNPUl9WQkksCisJCS5udW1faTJjX2RldnMJID0gMSwKKwkJLmkyY19kZXZzCSA9IHsKKwkJCXsKKwkJCQkuaWQJPSBJMkNfRFJJVkVSSURfV0lTX1RXMjgwNCwKKwkJCQkuYWRkcgk9IDB4MDAsIC8qIHllcywgcmVhbGx5ICovCisJCQl9LAorCQl9LAorCQkubnVtX2lucHV0cwkgPSAxLAorCQkuaW5wdXRzIAkgPSB7CisJCQl7CisJCQkJLm5hbWUJCT0gIkNvbXBvc2l0ZSIsCisJCQl9LAorCQl9LAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgZ283MDA3X3VzYl9pZF90YWJsZVtdID0geworCXsKKwkJLm1hdGNoX2ZsYWdzCT0gVVNCX0RFVklDRV9JRF9NQVRDSF9ERVZJQ0VfQU5EX1ZFUlNJT04gfAorCQkJCQlVU0JfREVWSUNFX0lEX01BVENIX0lOVF9JTkZPLAorCQkuaWRWZW5kb3IJPSAweDBlYjEsICAvKiBWZW5kb3IgSUQgb2YgV0lTIFRlY2hub2xvZ2llcyAqLworCQkuaWRQcm9kdWN0CT0gMHg3MDA3LCAgLyogUHJvZHVjdCBJRCBvZiBHTzcwMDdTQiBjaGlwICovCisJCS5iY2REZXZpY2VfbG8JPSAweDIwMCwgICAvKiBSZXZpc2lvbiBudW1iZXIgb2YgWE1lbiAqLworCQkuYmNkRGV2aWNlX2hpCT0gMHgyMDAsCisJCS5iSW50ZXJmYWNlQ2xhc3MJPSAyNTUsCisJCS5iSW50ZXJmYWNlU3ViQ2xhc3MJPSAwLAorCQkuYkludGVyZmFjZVByb3RvY29sCT0gMjU1LAorCQkuZHJpdmVyX2luZm8JPSAoa2VybmVsX3Vsb25nX3QpR083MDA3X0JPQVJESURfWE1FTiwKKwl9LAorCXsKKwkJLm1hdGNoX2ZsYWdzCT0gVVNCX0RFVklDRV9JRF9NQVRDSF9ERVZJQ0VfQU5EX1ZFUlNJT04sCisJCS5pZFZlbmRvcgk9IDB4MGViMSwgIC8qIFZlbmRvciBJRCBvZiBXSVMgVGVjaG5vbG9naWVzICovCisJCS5pZFByb2R1Y3QJPSAweDcwMDcsICAvKiBQcm9kdWN0IElEIG9mIEdPNzAwN1NCIGNoaXAgKi8KKwkJLmJjZERldmljZV9sbwk9IDB4MjAyLCAgIC8qIFJldmlzaW9uIG51bWJlciBvZiBNYXRyaXggSUkgKi8KKwkJLmJjZERldmljZV9oaQk9IDB4MjAyLAorCQkuZHJpdmVyX2luZm8JPSAoa2VybmVsX3Vsb25nX3QpR083MDA3X0JPQVJESURfTUFUUklYX0lJLAorCX0sCisJeworCQkubWF0Y2hfZmxhZ3MJPSBVU0JfREVWSUNFX0lEX01BVENIX0RFVklDRV9BTkRfVkVSU0lPTiwKKwkJLmlkVmVuZG9yCT0gMHgwZWIxLCAgLyogVmVuZG9yIElEIG9mIFdJUyBUZWNobm9sb2dpZXMgKi8KKwkJLmlkUHJvZHVjdAk9IDB4NzAwNywgIC8qIFByb2R1Y3QgSUQgb2YgR083MDA3U0IgY2hpcCAqLworCQkuYmNkRGV2aWNlX2xvCT0gMHgyMDQsICAgLyogUmV2aXNpb24gbnVtYmVyIG9mIE1hdHJpeCAqLworCQkuYmNkRGV2aWNlX2hpCT0gMHgyMDQsICAgLyogICAgIFJlbG9hZGVkICovCisJCS5kcml2ZXJfaW5mbwk9IChrZXJuZWxfdWxvbmdfdClHTzcwMDdfQk9BUkRJRF9NQVRSSVhfUkVMT0FELAorCX0sCisJeworCQkubWF0Y2hfZmxhZ3MJPSBVU0JfREVWSUNFX0lEX01BVENIX0RFVklDRV9BTkRfVkVSU0lPTiB8CisJCQkJCVVTQl9ERVZJQ0VfSURfTUFUQ0hfSU5UX0lORk8sCisJCS5pZFZlbmRvcgk9IDB4MGViMSwgIC8qIFZlbmRvciBJRCBvZiBXSVMgVGVjaG5vbG9naWVzICovCisJCS5pZFByb2R1Y3QJPSAweDcwMDcsICAvKiBQcm9kdWN0IElEIG9mIEdPNzAwN1NCIGNoaXAgKi8KKwkJLmJjZERldmljZV9sbwk9IDB4MjA1LCAgIC8qIFJldmlzaW9uIG51bWJlciBvZiBYTWVuLUlJICovCisJCS5iY2REZXZpY2VfaGkJPSAweDIwNSwKKwkJLmJJbnRlcmZhY2VDbGFzcwk9IDI1NSwKKwkJLmJJbnRlcmZhY2VTdWJDbGFzcwk9IDAsCisJCS5iSW50ZXJmYWNlUHJvdG9jb2wJPSAyNTUsCisJCS5kcml2ZXJfaW5mbwk9IChrZXJuZWxfdWxvbmdfdClHTzcwMDdfQk9BUkRJRF9YTUVOX0lJLAorCX0sCisJeworCQkubWF0Y2hfZmxhZ3MJPSBVU0JfREVWSUNFX0lEX01BVENIX0RFVklDRV9BTkRfVkVSU0lPTiwKKwkJLmlkVmVuZG9yCT0gMHgwZWIxLCAgLyogVmVuZG9yIElEIG9mIFdJUyBUZWNobm9sb2dpZXMgKi8KKwkJLmlkUHJvZHVjdAk9IDB4NzAwNywgIC8qIFByb2R1Y3QgSUQgb2YgR083MDA3U0IgY2hpcCAqLworCQkuYmNkRGV2aWNlX2xvCT0gMHgyMDgsICAgLyogUmV2aXNpb24gbnVtYmVyIG9mIFN0YXIgVHJlayAqLworCQkuYmNkRGV2aWNlX2hpCT0gMHgyMDgsCisJCS5kcml2ZXJfaW5mbwk9IChrZXJuZWxfdWxvbmdfdClHTzcwMDdfQk9BUkRJRF9TVEFSX1RSRUssCisJfSwKKwl7CisJCS5tYXRjaF9mbGFncwk9IFVTQl9ERVZJQ0VfSURfTUFUQ0hfREVWSUNFX0FORF9WRVJTSU9OIHwKKwkJCQkJVVNCX0RFVklDRV9JRF9NQVRDSF9JTlRfSU5GTywKKwkJLmlkVmVuZG9yCT0gMHgwZWIxLCAgLyogVmVuZG9yIElEIG9mIFdJUyBUZWNobm9sb2dpZXMgKi8KKwkJLmlkUHJvZHVjdAk9IDB4NzAwNywgIC8qIFByb2R1Y3QgSUQgb2YgR083MDA3U0IgY2hpcCAqLworCQkuYmNkRGV2aWNlX2xvCT0gMHgyMDksICAgLyogUmV2aXNpb24gbnVtYmVyIG9mIFhNZW4tSUlJICovCisJCS5iY2REZXZpY2VfaGkJPSAweDIwOSwKKwkJLmJJbnRlcmZhY2VDbGFzcwk9IDI1NSwKKwkJLmJJbnRlcmZhY2VTdWJDbGFzcwk9IDAsCisJCS5iSW50ZXJmYWNlUHJvdG9jb2wJPSAyNTUsCisJCS5kcml2ZXJfaW5mbwk9IChrZXJuZWxfdWxvbmdfdClHTzcwMDdfQk9BUkRJRF9YTUVOX0lJSSwKKwl9LAorCXsKKwkJLm1hdGNoX2ZsYWdzCT0gVVNCX0RFVklDRV9JRF9NQVRDSF9ERVZJQ0VfQU5EX1ZFUlNJT04sCisJCS5pZFZlbmRvcgk9IDB4MGViMSwgIC8qIFZlbmRvciBJRCBvZiBXSVMgVGVjaG5vbG9naWVzICovCisJCS5pZFByb2R1Y3QJPSAweDcwMDcsICAvKiBQcm9kdWN0IElEIG9mIEdPNzAwN1NCIGNoaXAgKi8KKwkJLmJjZERldmljZV9sbwk9IDB4MjEwLCAgIC8qIFJldmlzaW9uIG51bWJlciBvZiBNYXRyaXggKi8KKwkJLmJjZERldmljZV9oaQk9IDB4MjEwLCAgIC8qICAgICBSZXZvbHV0aW9uICovCisJCS5kcml2ZXJfaW5mbwk9IChrZXJuZWxfdWxvbmdfdClHTzcwMDdfQk9BUkRJRF9NQVRSSVhfUkVWLAorCX0sCisJeworCQkubWF0Y2hfZmxhZ3MJPSBVU0JfREVWSUNFX0lEX01BVENIX0RFVklDRV9BTkRfVkVSU0lPTiwKKwkJLmlkVmVuZG9yCT0gMHgwOTNiLCAgLyogVmVuZG9yIElEIG9mIFBsZXh0b3IgKi8KKwkJLmlkUHJvZHVjdAk9IDB4YTEwMiwgIC8qIFByb2R1Y3QgSUQgb2YgTTQwMlUgKi8KKwkJLmJjZERldmljZV9sbwk9IDB4MSwJICAgLyogcmV2aXNpb24gbnVtYmVyIG9mIEJsdWViZXJyeSAqLworCQkuYmNkRGV2aWNlX2hpCT0gMHgxLAorCQkuZHJpdmVyX2luZm8JPSAoa2VybmVsX3Vsb25nX3QpR083MDA3X0JPQVJESURfUFhfTTQwMlUsCisJfSwKKwl7CisJCS5tYXRjaF9mbGFncwk9IFVTQl9ERVZJQ0VfSURfTUFUQ0hfREVWSUNFX0FORF9WRVJTSU9OLAorCQkuaWRWZW5kb3IJPSAweDA5M2IsICAvKiBWZW5kb3IgSUQgb2YgUGxleHRvciAqLworCQkuaWRQcm9kdWN0CT0gMHhhMTA0LCAgLyogUHJvZHVjdCBJRCBvZiBUVjQwMlUgKi8KKwkJLmJjZERldmljZV9sbwk9IDB4MSwKKwkJLmJjZERldmljZV9oaQk9IDB4MSwKKwkJLmRyaXZlcl9pbmZvCT0gKGtlcm5lbF91bG9uZ190KUdPNzAwN19CT0FSRElEX1BYX1RWNDAyVV9BTlksCisJfSwKKwl7CisJCS5tYXRjaF9mbGFncwk9IFVTQl9ERVZJQ0VfSURfTUFUQ0hfREVWSUNFX0FORF9WRVJTSU9OLAorCQkuaWRWZW5kb3IJPSAweDEwZmQsICAvKiBWZW5kb3IgSUQgb2YgQW51YmlzIEVsZWN0cm9uaWNzICovCisJCS5pZFByb2R1Y3QJPSAweGRlMDAsICAvKiBQcm9kdWN0IElEIG9mIExpZmV2aWV3IExSMTkyICovCisJCS5iY2REZXZpY2VfbG8JPSAweDEsCisJCS5iY2REZXZpY2VfaGkJPSAweDEsCisJCS5kcml2ZXJfaW5mbwk9IChrZXJuZWxfdWxvbmdfdClHTzcwMDdfQk9BUkRJRF9MSUZFVklFV19MUjE5MiwKKwl9LAorCXsgfQkJCQkJLyogVGVybWluYXRpbmcgZW50cnkgKi8KK307CisKK01PRFVMRV9ERVZJQ0VfVEFCTEUodXNiLCBnbzcwMDdfdXNiX2lkX3RhYmxlKTsKKworLyoqKioqKioqKioqKioqKioqKioqKiBEcml2ZXIgZm9yIEVaLVVTQiBIUEkgaW50ZXJmYWNlICoqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIGludCBnbzcwMDdfdXNiX3ZlbmRvcl9yZXF1ZXN0KHN0cnVjdCBnbzcwMDcgKmdvLCBpbnQgcmVxdWVzdCwKKwkJaW50IHZhbHVlLCBpbnQgaW5kZXgsIHZvaWQgKnRyYW5zZmVyX2J1ZmZlciwgaW50IGxlbmd0aCwgaW50IGluKQoreworCXN0cnVjdCBnbzcwMDdfdXNiICp1c2IgPSBnby0+aHBpX2NvbnRleHQ7CisJaW50IHRpbWVvdXQgPSA1MDAwOworCisJaWYgKGluKSB7CisJCXJldHVybiB1c2JfY29udHJvbF9tc2codXNiLT51c2JkZXYsCisJCQkJdXNiX3JjdmN0cmxwaXBlKHVzYi0+dXNiZGV2LCAwKSwgcmVxdWVzdCwKKwkJCQlVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfREVWSUNFIHwgVVNCX0RJUl9JTiwKKwkJCQl2YWx1ZSwgaW5kZXgsIHRyYW5zZmVyX2J1ZmZlciwgbGVuZ3RoLCB0aW1lb3V0KTsKKwl9IGVsc2UgeworCQlyZXR1cm4gdXNiX2NvbnRyb2xfbXNnKHVzYi0+dXNiZGV2LAorCQkJCXVzYl9zbmRjdHJscGlwZSh1c2ItPnVzYmRldiwgMCksIHJlcXVlc3QsCisJCQkJVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0RFVklDRSwKKwkJCQl2YWx1ZSwgaW5kZXgsIHRyYW5zZmVyX2J1ZmZlciwgbGVuZ3RoLCB0aW1lb3V0KTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgZ283MDA3X3VzYl9pbnRlcmZhY2VfcmVzZXQoc3RydWN0IGdvNzAwNyAqZ28pCit7CisJc3RydWN0IGdvNzAwN191c2IgKnVzYiA9IGdvLT5ocGlfY29udGV4dDsKKwl1MTYgaW50cl92YWwsIGludHJfZGF0YTsKKworCS8qIFJlc2V0IGVuY29kZXIgKi8KKwlpZiAoZ283MDA3X3dyaXRlX2ludGVycnVwdChnbywgMHgwMDAxLCAweDAwMDEpIDwgMCkKKwkJcmV0dXJuIC0xOworCW1zbGVlcCgxMDApOworCisJaWYgKHVzYi0+Ym9hcmQtPmZsYWdzICYgR083MDA3X1VTQl9FWlVTQikgeworCQkvKiBSZXNldCBidWZmZXIgaW4gRVotVVNCICovCisjaWZkZWYgR083MDA3X1VTQl9ERUJVRworCQlwcmludGsoS0VSTl9ERUJVRyAiZ283MDA3LXVzYjogcmVzZXR0aW5nIEVaLVVTQiBidWZmZXJzXG4iKTsKKyNlbmRpZgorCQlpZiAoZ283MDA3X3VzYl92ZW5kb3JfcmVxdWVzdChnbywgMHgxMCwgMCwgMCwgTlVMTCwgMCwgMCkgPCAwIHx8CisJCSAgICBnbzcwMDdfdXNiX3ZlbmRvcl9yZXF1ZXN0KGdvLCAweDEwLCAwLCAwLCBOVUxMLCAwLCAwKSA8IDApCisJCQlyZXR1cm4gLTE7CisKKwkJLyogUmVzZXQgZW5jb2RlciBhZ2FpbiAqLworCQlpZiAoZ283MDA3X3dyaXRlX2ludGVycnVwdChnbywgMHgwMDAxLCAweDAwMDEpIDwgMCkKKwkJCXJldHVybiAtMTsKKwkJbXNsZWVwKDEwMCk7CisJfQorCisJLyogV2FpdCBmb3IgYW4gaW50ZXJydXB0IHRvIGluZGljYXRlIHN1Y2Nlc3NmdWwgaGFyZHdhcmUgcmVzZXQgKi8KKwlpZiAoZ283MDA3X3JlYWRfaW50ZXJydXB0KGdvLCAmaW50cl92YWwsICZpbnRyX2RhdGEpIDwgMCB8fAorCQkJKGludHJfdmFsICYgfjB4MSkgIT0gMHg1NWFhKSB7CisJCXByaW50ayhLRVJOX0VSUgorCQkJImdvNzAwNy11c2I6IHVuYWJsZSB0byByZXNldCB0aGUgVVNCIGludGVyZmFjZVxuIik7CisJCXJldHVybiAtMTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZ283MDA3X3VzYl9lenVzYl93cml0ZV9pbnRlcnJ1cHQoc3RydWN0IGdvNzAwNyAqZ28sCisJCQkJCQlpbnQgYWRkciwgaW50IGRhdGEpCit7CisJc3RydWN0IGdvNzAwN191c2IgKnVzYiA9IGdvLT5ocGlfY29udGV4dDsKKwlpbnQgaSwgcjsKKwl1MTYgc3RhdHVzX3JlZzsKKwlpbnQgdGltZW91dCA9IDUwMDsKKworI2lmZGVmIEdPNzAwN19VU0JfREVCVUcKKwlwcmludGsoS0VSTl9ERUJVRworCQkiZ283MDA3LXVzYjogV3JpdGVJbnRlcnJ1cHQ6ICUwNHggJTA0eFxuIiwgYWRkciwgZGF0YSk7CisjZW5kaWYKKworCWZvciAoaSA9IDA7IGkgPCAxMDA7ICsraSkgeworCQlyID0gdXNiX2NvbnRyb2xfbXNnKHVzYi0+dXNiZGV2LAorCQkJCXVzYl9yY3ZjdHJscGlwZSh1c2ItPnVzYmRldiwgMCksIDB4MTQsCisJCQkJVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0RFVklDRSB8IFVTQl9ESVJfSU4sCisJCQkJMCwgSFBJX1NUQVRVU19BRERSLCAmc3RhdHVzX3JlZywKKwkJCQlzaXplb2Yoc3RhdHVzX3JlZyksIHRpbWVvdXQpOworCQlpZiAociA8IDApCisJCQlnb3RvIHdyaXRlX2ludF9lcnJvcjsKKwkJX19sZTE2X3RvX2NwdXMoJnN0YXR1c19yZWcpOworCQlpZiAoIShzdGF0dXNfcmVnICYgMHgwMDEwKSkKKwkJCWJyZWFrOworCQltc2xlZXAoMTApOworCX0KKwlpZiAoaSA9PSAxMDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCQkiZ283MDA3LXVzYjogZGV2aWNlIGlzIGh1bmcsIHN0YXR1cyByZWcgPSAweCUwNHhcbiIsCisJCQlzdGF0dXNfcmVnKTsKKwkJcmV0dXJuIC0xOworCX0KKwlyID0gdXNiX2NvbnRyb2xfbXNnKHVzYi0+dXNiZGV2LCB1c2Jfc25kY3RybHBpcGUodXNiLT51c2JkZXYsIDApLCAweDEyLAorCQkJVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0RFVklDRSwgZGF0YSwKKwkJCUlOVF9QQVJBTV9BRERSLCBOVUxMLCAwLCB0aW1lb3V0KTsKKwlpZiAociA8IDApCisJCWdvdG8gd3JpdGVfaW50X2Vycm9yOworCXIgPSB1c2JfY29udHJvbF9tc2codXNiLT51c2JkZXYsIHVzYl9zbmRjdHJscGlwZSh1c2ItPnVzYmRldiwgMCksCisJCQkweDEyLCBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfREVWSUNFLCBhZGRyLAorCQkJSU5UX0lOREVYX0FERFIsIE5VTEwsIDAsIHRpbWVvdXQpOworCWlmIChyIDwgMCkKKwkJZ290byB3cml0ZV9pbnRfZXJyb3I7CisJcmV0dXJuIDA7CisKK3dyaXRlX2ludF9lcnJvcjoKKwlwcmludGsoS0VSTl9FUlIgImdvNzAwNy11c2I6IGVycm9yIGluIFdyaXRlSW50ZXJydXB0OiAlZFxuIiwgcik7CisJcmV0dXJuIHI7Cit9CisKK3N0YXRpYyBpbnQgZ283MDA3X3VzYl9vbmJvYXJkX3dyaXRlX2ludGVycnVwdChzdHJ1Y3QgZ283MDA3ICpnbywKKwkJCQkJCWludCBhZGRyLCBpbnQgZGF0YSkKK3sKKwlzdHJ1Y3QgZ283MDA3X3VzYiAqdXNiID0gZ28tPmhwaV9jb250ZXh0OworCXU4ICp0YnVmOworCWludCByOworCWludCB0aW1lb3V0ID0gNTAwOworCisjaWZkZWYgR083MDA3X1VTQl9ERUJVRworCXByaW50ayhLRVJOX0RFQlVHCisJCSJnbzcwMDctdXNiOiBXcml0ZUludGVycnVwdDogJTA0eCAlMDR4XG4iLCBhZGRyLCBkYXRhKTsKKyNlbmRpZgorCisJdGJ1ZiA9IGttYWxsb2MoOCwgR0ZQX0tFUk5FTCk7CisJaWYgKHRidWYgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisJbWVtc2V0KHRidWYsIDAsIDgpOworCXRidWZbMF0gPSBkYXRhICYgMHhmZjsKKwl0YnVmWzFdID0gZGF0YSA+PiA4OworCXRidWZbMl0gPSBhZGRyICYgMHhmZjsKKwl0YnVmWzNdID0gYWRkciA+PiA4OworCXIgPSB1c2JfY29udHJvbF9tc2codXNiLT51c2JkZXYsIHVzYl9zbmRjdHJscGlwZSh1c2ItPnVzYmRldiwgMiksIDB4MDAsCisJCQlVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfRU5EUE9JTlQsIDB4NTVhYSwKKwkJCTB4ZjBmMCwgdGJ1ZiwgOCwgdGltZW91dCk7CisJa2ZyZWUodGJ1Zik7CisJaWYgKHIgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiZ283MDA3LXVzYjogZXJyb3IgaW4gV3JpdGVJbnRlcnJ1cHQ6ICVkXG4iLCByKTsKKwkJcmV0dXJuIHI7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBnbzcwMDdfdXNiX3JlYWRpbnRlcnJ1cHRfY29tcGxldGUoc3RydWN0IHVyYiAqdXJiKQoreworCXN0cnVjdCBnbzcwMDcgKmdvID0gKHN0cnVjdCBnbzcwMDcgKil1cmItPmNvbnRleHQ7CisJdTE2ICpyZWdzID0gKHUxNiAqKXVyYi0+dHJhbnNmZXJfYnVmZmVyOworCisJaWYgKHVyYi0+c3RhdHVzICE9IDApIHsKKwkJaWYgKHVyYi0+c3RhdHVzICE9IC1FU0hVVERPV04gJiYKKwkJCQlnby0+c3RhdHVzICE9IFNUQVRVU19TSFVURE9XTikgeworCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkJImdvNzAwNy11c2I6IGVycm9yIGluIHJlYWQgaW50ZXJydXB0OiAlZFxuIiwKKwkJCQl1cmItPnN0YXR1cyk7CisJCX0gZWxzZSB7CisJCQl3YWtlX3VwKCZnby0+aW50ZXJydXB0X3dhaXRxKTsKKwkJCXJldHVybjsKKwkJfQorCX0gZWxzZSBpZiAodXJiLT5hY3R1YWxfbGVuZ3RoICE9IHVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCkgeworCQlwcmludGsoS0VSTl9FUlIgImdvNzAwNy11c2I6IHNob3J0IHJlYWQgaW4gaW50ZXJydXB0IHBpcGUhXG4iKTsKKwl9IGVsc2UgeworCQlnby0+aW50ZXJydXB0X2F2YWlsYWJsZSA9IDE7CisJCWdvLT5pbnRlcnJ1cHRfZGF0YSA9IF9fbGUxNl90b19jcHUocmVnc1swXSk7CisJCWdvLT5pbnRlcnJ1cHRfdmFsdWUgPSBfX2xlMTZfdG9fY3B1KHJlZ3NbMV0pOworI2lmZGVmIEdPNzAwN19VU0JfREVCVUcKKwkJcHJpbnRrKEtFUk5fREVCVUcgImdvNzAwNy11c2I6IFJlYWRJbnRlcnJ1cHQ6ICUwNHggJTA0eFxuIiwKKwkJCQlnby0+aW50ZXJydXB0X3ZhbHVlLCBnby0+aW50ZXJydXB0X2RhdGEpOworI2VuZGlmCisJfQorCisJd2FrZV91cCgmZ28tPmludGVycnVwdF93YWl0cSk7Cit9CisKK3N0YXRpYyBpbnQgZ283MDA3X3VzYl9yZWFkX2ludGVycnVwdChzdHJ1Y3QgZ283MDA3ICpnbykKK3sKKwlzdHJ1Y3QgZ283MDA3X3VzYiAqdXNiID0gZ28tPmhwaV9jb250ZXh0OworCWludCByOworCisJciA9IHVzYl9zdWJtaXRfdXJiKHVzYi0+aW50cl91cmIsIEdGUF9LRVJORUwpOworCWlmIChyIDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIKKwkJCSJnbzcwMDctdXNiOiB1bmFibGUgdG8gc3VibWl0IGludGVycnVwdCB1cmI6ICVkXG4iLCByKTsKKwkJcmV0dXJuIHI7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBnbzcwMDdfdXNiX3JlYWRfdmlkZW9fcGlwZV9jb21wbGV0ZShzdHJ1Y3QgdXJiICp1cmIpCit7CisJc3RydWN0IGdvNzAwNyAqZ28gPSAoc3RydWN0IGdvNzAwNyAqKXVyYi0+Y29udGV4dDsKKwlpbnQgcjsKKworCWlmICghZ28tPnN0cmVhbWluZykgeworCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJmdvLT5mcmFtZV93YWl0cSk7CisJCXJldHVybjsKKwl9CisJaWYgKHVyYi0+c3RhdHVzICE9IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJnbzcwMDctdXNiOiBlcnJvciBpbiB2aWRlbyBwaXBlOiAlZFxuIiwKKwkJCQl1cmItPnN0YXR1cyk7CisJCXJldHVybjsKKwl9CisJaWYgKHVyYi0+YWN0dWFsX2xlbmd0aCAhPSB1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJnbzcwMDctdXNiOiBzaG9ydCByZWFkIGluIHZpZGVvIHBpcGUhXG4iKTsKKwkJcmV0dXJuOworCX0KKwlnbzcwMDdfcGFyc2VfdmlkZW9fc3RyZWFtKGdvLCB1cmItPnRyYW5zZmVyX2J1ZmZlciwgdXJiLT5hY3R1YWxfbGVuZ3RoKTsKKwlyID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfQVRPTUlDKTsKKwlpZiAociA8IDApCisJCXByaW50ayhLRVJOX0VSUiAiZ283MDA3LXVzYjogZXJyb3IgaW4gdmlkZW8gcGlwZTogJWRcbiIsIHIpOworfQorCitzdGF0aWMgdm9pZCBnbzcwMDdfdXNiX3JlYWRfYXVkaW9fcGlwZV9jb21wbGV0ZShzdHJ1Y3QgdXJiICp1cmIpCit7CisJc3RydWN0IGdvNzAwNyAqZ28gPSAoc3RydWN0IGdvNzAwNyAqKXVyYi0+Y29udGV4dDsKKwlpbnQgcjsKKworCWlmICghZ28tPnN0cmVhbWluZykKKwkJcmV0dXJuOworCWlmICh1cmItPnN0YXR1cyAhPSAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiZ283MDA3LXVzYjogZXJyb3IgaW4gYXVkaW8gcGlwZTogJWRcbiIsCisJCQkJdXJiLT5zdGF0dXMpOworCQlyZXR1cm47CisJfQorCWlmICh1cmItPmFjdHVhbF9sZW5ndGggIT0gdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoKSB7CisJCXByaW50ayhLRVJOX0VSUiAiZ283MDA3LXVzYjogc2hvcnQgcmVhZCBpbiBhdWRpbyBwaXBlIVxuIik7CisJCXJldHVybjsKKwl9CisJaWYgKGdvLT5hdWRpb19kZWxpdmVyICE9IE5VTEwpCisJCWdvLT5hdWRpb19kZWxpdmVyKGdvLCB1cmItPnRyYW5zZmVyX2J1ZmZlciwgdXJiLT5hY3R1YWxfbGVuZ3RoKTsKKwlyID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfQVRPTUlDKTsKKwlpZiAociA8IDApCisJCXByaW50ayhLRVJOX0VSUiAiZ283MDA3LXVzYjogZXJyb3IgaW4gYXVkaW8gcGlwZTogJWRcbiIsIHIpOworfQorCitzdGF0aWMgaW50IGdvNzAwN191c2Jfc3RyZWFtX3N0YXJ0KHN0cnVjdCBnbzcwMDcgKmdvKQoreworCXN0cnVjdCBnbzcwMDdfdXNiICp1c2IgPSBnby0+aHBpX2NvbnRleHQ7CisJaW50IGksIHI7CisKKwlmb3IgKGkgPSAwOyBpIDwgODsgKytpKSB7CisJCXIgPSB1c2Jfc3VibWl0X3VyYih1c2ItPnZpZGVvX3VyYnNbaV0sIEdGUF9LRVJORUwpOworCQlpZiAociA8IDApIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiZ283MDA3LXVzYjogZXJyb3Igc3VibWl0dGluZyB2aWRlbyAiCisJCQkJCSJ1cmIgJWQ6ICVkXG4iLCBpLCByKTsKKwkJCWdvdG8gdmlkZW9fc3VibWl0X2ZhaWxlZDsKKwkJfQorCX0KKwlpZiAoIWdvLT5hdWRpb19lbmFibGVkKQorCQlyZXR1cm4gMDsKKworCWZvciAoaSA9IDA7IGkgPCA4OyArK2kpIHsKKwkJciA9IHVzYl9zdWJtaXRfdXJiKHVzYi0+YXVkaW9fdXJic1tpXSwgR0ZQX0tFUk5FTCk7CisJCWlmIChyIDwgMCkgeworCQkJcHJpbnRrKEtFUk5fRVJSICJnbzcwMDctdXNiOiBlcnJvciBzdWJtaXR0aW5nIGF1ZGlvICIKKwkJCQkJInVyYiAlZDogJWRcbiIsIGksIHIpOworCQkJZ290byBhdWRpb19zdWJtaXRfZmFpbGVkOworCQl9CisJfQorCXJldHVybiAwOworCithdWRpb19zdWJtaXRfZmFpbGVkOgorCWZvciAoaSA9IDA7IGkgPCA4OyArK2kpCisJCXVzYl9raWxsX3VyYih1c2ItPmF1ZGlvX3VyYnNbaV0pOwordmlkZW9fc3VibWl0X2ZhaWxlZDoKKwlmb3IgKGkgPSAwOyBpIDwgODsgKytpKQorCQl1c2Jfa2lsbF91cmIodXNiLT52aWRlb191cmJzW2ldKTsKKwlyZXR1cm4gLTE7Cit9CisKK3N0YXRpYyBpbnQgZ283MDA3X3VzYl9zdHJlYW1fc3RvcChzdHJ1Y3QgZ283MDA3ICpnbykKK3sKKwlzdHJ1Y3QgZ283MDA3X3VzYiAqdXNiID0gZ28tPmhwaV9jb250ZXh0OworCWludCBpOworCisJaWYgKGdvLT5zdGF0dXMgPT0gU1RBVFVTX1NIVVRET1dOKQorCQlyZXR1cm4gMDsKKwlmb3IgKGkgPSAwOyBpIDwgODsgKytpKQorCQl1c2Jfa2lsbF91cmIodXNiLT52aWRlb191cmJzW2ldKTsKKwlpZiAoZ28tPmF1ZGlvX2VuYWJsZWQpCisJCWZvciAoaSA9IDA7IGkgPCA4OyArK2kpCisJCQl1c2Jfa2lsbF91cmIodXNiLT5hdWRpb191cmJzW2ldKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBnbzcwMDdfdXNiX3NlbmRfZmlybXdhcmUoc3RydWN0IGdvNzAwNyAqZ28sIHU4ICpkYXRhLCBpbnQgbGVuKQoreworCXN0cnVjdCBnbzcwMDdfdXNiICp1c2IgPSBnby0+aHBpX2NvbnRleHQ7CisJaW50IHRyYW5zZmVycmVkLCBwaXBlOworCWludCB0aW1lb3V0ID0gNTAwOworCisjaWZkZWYgR083MDA3X1VTQl9ERUJVRworCXByaW50ayhLRVJOX0RFQlVHICJnbzcwMDctdXNiOiBEb3dubG9hZEJ1ZmZlciBzZW5kaW5nICVkIGJ5dGVzXG4iLCBsZW4pOworI2VuZGlmCisKKwlpZiAodXNiLT5ib2FyZC0+ZmxhZ3MgJiBHTzcwMDdfVVNCX0VaVVNCKQorCQlwaXBlID0gdXNiX3NuZGJ1bGtwaXBlKHVzYi0+dXNiZGV2LCAyKTsKKwllbHNlCisJCXBpcGUgPSB1c2Jfc25kYnVsa3BpcGUodXNiLT51c2JkZXYsIDMpOworCisJcmV0dXJuIHVzYl9idWxrX21zZyh1c2ItPnVzYmRldiwgcGlwZSwgZGF0YSwgbGVuLAorCQkJCQkmdHJhbnNmZXJyZWQsIHRpbWVvdXQpOworfQorCitzdGF0aWMgc3RydWN0IGdvNzAwN19ocGlfb3BzIGdvNzAwN191c2JfZXp1c2JfaHBpX29wcyA9IHsKKwkuaW50ZXJmYWNlX3Jlc2V0CT0gZ283MDA3X3VzYl9pbnRlcmZhY2VfcmVzZXQsCisJLndyaXRlX2ludGVycnVwdAk9IGdvNzAwN191c2JfZXp1c2Jfd3JpdGVfaW50ZXJydXB0LAorCS5yZWFkX2ludGVycnVwdAkJPSBnbzcwMDdfdXNiX3JlYWRfaW50ZXJydXB0LAorCS5zdHJlYW1fc3RhcnQJCT0gZ283MDA3X3VzYl9zdHJlYW1fc3RhcnQsCisJLnN0cmVhbV9zdG9wCQk9IGdvNzAwN191c2Jfc3RyZWFtX3N0b3AsCisJLnNlbmRfZmlybXdhcmUJCT0gZ283MDA3X3VzYl9zZW5kX2Zpcm13YXJlLAorfTsKKworc3RhdGljIHN0cnVjdCBnbzcwMDdfaHBpX29wcyBnbzcwMDdfdXNiX29uYm9hcmRfaHBpX29wcyA9IHsKKwkuaW50ZXJmYWNlX3Jlc2V0CT0gZ283MDA3X3VzYl9pbnRlcmZhY2VfcmVzZXQsCisJLndyaXRlX2ludGVycnVwdAk9IGdvNzAwN191c2Jfb25ib2FyZF93cml0ZV9pbnRlcnJ1cHQsCisJLnJlYWRfaW50ZXJydXB0CQk9IGdvNzAwN191c2JfcmVhZF9pbnRlcnJ1cHQsCisJLnN0cmVhbV9zdGFydAkJPSBnbzcwMDdfdXNiX3N0cmVhbV9zdGFydCwKKwkuc3RyZWFtX3N0b3AJCT0gZ283MDA3X3VzYl9zdHJlYW1fc3RvcCwKKwkuc2VuZF9maXJtd2FyZQkJPSBnbzcwMDdfdXNiX3NlbmRfZmlybXdhcmUsCit9OworCisvKioqKioqKioqKioqKioqKioqKioqIERyaXZlciBmb3IgRVotVVNCIEkyQyBhZGFwdGVyICoqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIGludCBnbzcwMDdfdXNiX2kyY19tYXN0ZXJfeGZlcihzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIsCisJCQkJCXN0cnVjdCBpMmNfbXNnIG1zZ3NbXSwgaW50IG51bSkKK3sKKwlzdHJ1Y3QgZ283MDA3ICpnbyA9IGkyY19nZXRfYWRhcGRhdGEoYWRhcHRlcik7CisJc3RydWN0IGdvNzAwN191c2IgKnVzYiA9IGdvLT5ocGlfY29udGV4dDsKKwl1OCBidWZbMTZdOworCWludCBidWZfbGVuLCBpOworCWludCByZXQgPSAtMTsKKworCWlmIChnby0+c3RhdHVzID09IFNUQVRVU19TSFVURE9XTikKKwkJcmV0dXJuIC0xOworCisJZG93bigmdXNiLT5pMmNfbG9jayk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbnVtOyArK2kpIHsKKwkJLyogVGhlIGhhcmR3YXJlIGNvbW1hbmQgaXMgIndyaXRlIHNvbWUgYnl0ZXMgdGhlbiByZWFkIHNvbWUKKwkJICogYnl0ZXMiLCBzbyB3ZSB0cnkgdG8gY29hbGVzY2UgYSB3cml0ZSBmb2xsb3dlZCBieSBhIHJlYWQKKwkJICogaW50byBhIHNpbmdsZSBVU0IgdHJhbnNhY3Rpb24gKi8KKwkJaWYgKGkgKyAxIDwgbnVtICYmIG1zZ3NbaV0uYWRkciA9PSBtc2dzW2kgKyAxXS5hZGRyICYmCisJCQkJIShtc2dzW2ldLmZsYWdzICYgSTJDX01fUkQpICYmCisJCQkJKG1zZ3NbaSArIDFdLmZsYWdzICYgSTJDX01fUkQpKSB7CisjaWZkZWYgR083MDA3X0kyQ19ERUJVRworCQkJcHJpbnRrKEtFUk5fREVCVUcgImdvNzAwNy11c2I6IGkyYyB3cml0ZS9yZWFkICVkLyVkICIKKwkJCQkJImJ5dGVzIG9uICUwMnhcbiIsIG1zZ3NbaV0ubGVuLAorCQkJCQltc2dzW2kgKyAxXS5sZW4sIG1zZ3NbaV0uYWRkcik7CisjZW5kaWYKKwkJCWJ1ZlswXSA9IDB4MDE7CisJCQlidWZbMV0gPSBtc2dzW2ldLmxlbiArIDE7CisJCQlidWZbMl0gPSBtc2dzW2ldLmFkZHIgPDwgMTsKKwkJCW1lbWNweSgmYnVmWzNdLCBtc2dzW2ldLmJ1ZiwgbXNnc1tpXS5sZW4pOworCQkJYnVmX2xlbiA9IG1zZ3NbaV0ubGVuICsgMzsKKwkJCWJ1ZltidWZfbGVuKytdID0gbXNnc1srK2ldLmxlbjsKKwkJfSBlbHNlIGlmIChtc2dzW2ldLmZsYWdzICYgSTJDX01fUkQpIHsKKyNpZmRlZiBHTzcwMDdfSTJDX0RFQlVHCisJCQlwcmludGsoS0VSTl9ERUJVRyAiZ283MDA3LXVzYjogaTJjIHJlYWQgJWQgIgorCQkJCQkiYnl0ZXMgb24gJTAyeFxuIiwgbXNnc1tpXS5sZW4sCisJCQkJCW1zZ3NbaV0uYWRkcik7CisjZW5kaWYKKwkJCWJ1ZlswXSA9IDB4MDE7CisJCQlidWZbMV0gPSAxOworCQkJYnVmWzJdID0gbXNnc1tpXS5hZGRyIDw8IDE7CisJCQlidWZbM10gPSBtc2dzW2ldLmxlbjsKKwkJCWJ1Zl9sZW4gPSA0OworCQl9IGVsc2UgeworI2lmZGVmIEdPNzAwN19JMkNfREVCVUcKKwkJCXByaW50ayhLRVJOX0RFQlVHICJnbzcwMDctdXNiOiBpMmMgd3JpdGUgJWQgIgorCQkJCQkiYnl0ZXMgb24gJTAyeFxuIiwgbXNnc1tpXS5sZW4sCisJCQkJCW1zZ3NbaV0uYWRkcik7CisjZW5kaWYKKwkJCWJ1ZlswXSA9IDB4MDA7CisJCQlidWZbMV0gPSBtc2dzW2ldLmxlbiArIDE7CisJCQlidWZbMl0gPSBtc2dzW2ldLmFkZHIgPDwgMTsKKwkJCW1lbWNweSgmYnVmWzNdLCBtc2dzW2ldLmJ1ZiwgbXNnc1tpXS5sZW4pOworCQkJYnVmX2xlbiA9IG1zZ3NbaV0ubGVuICsgMzsKKwkJCWJ1ZltidWZfbGVuKytdID0gMDsKKwkJfQorCQlpZiAoZ283MDA3X3VzYl92ZW5kb3JfcmVxdWVzdChnbywgMHgyNCwgMCwgMCwKKwkJCQkJCWJ1ZiwgYnVmX2xlbiwgMCkgPCAwKQorCQkJZ290byBpMmNfZG9uZTsKKwkJaWYgKG1zZ3NbaV0uZmxhZ3MgJiBJMkNfTV9SRCkgeworCQkJbWVtc2V0KGJ1ZiwgMCwgc2l6ZW9mKGJ1ZikpOworCQkJaWYgKGdvNzAwN191c2JfdmVuZG9yX3JlcXVlc3QoZ28sIDB4MjUsIDAsIDAsIGJ1ZiwKKwkJCQkJCW1zZ3NbaV0ubGVuICsgMSwgMSkgPCAwKQorCQkJCWdvdG8gaTJjX2RvbmU7CisJCQltZW1jcHkobXNnc1tpXS5idWYsIGJ1ZiArIDEsIG1zZ3NbaV0ubGVuKTsKKwkJfQorCX0KKwlyZXQgPSAwOworCitpMmNfZG9uZToKKwl1cCgmdXNiLT5pMmNfbG9jayk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHUzMiBnbzcwMDdfdXNiX2Z1bmN0aW9uYWxpdHkoc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyKQoreworCS8qIE5vIGVycm9ycyBhcmUgcmVwb3J0ZWQgYnkgdGhlIGhhcmR3YXJlLCBzbyB3ZSBkb24ndCBib3RoZXIKKwkgKiBzdXBwb3J0aW5nIHF1aWNrIHdyaXRlcyB0byBhdm9pZCBjb25mdXNpbmcgcHJvYmluZyAqLworCXJldHVybiAoSTJDX0ZVTkNfU01CVVNfRU1VTCkgJiB+STJDX0ZVTkNfU01CVVNfUVVJQ0s7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaTJjX2FsZ29yaXRobSBnbzcwMDdfdXNiX2FsZ28gPSB7CisJLm1hc3Rlcl94ZmVyCT0gZ283MDA3X3VzYl9pMmNfbWFzdGVyX3hmZXIsCisJLmZ1bmN0aW9uYWxpdHkJPSBnbzcwMDdfdXNiX2Z1bmN0aW9uYWxpdHksCit9OworCitzdGF0aWMgc3RydWN0IGkyY19hZGFwdGVyIGdvNzAwN191c2JfYWRhcF90ZW1wbCA9IHsKKwkub3duZXIJCQk9IFRISVNfTU9EVUxFLAorCS5jbGFzcwkJCT0gSTJDX0NMQVNTX1RWX0FOQUxPRywKKwkubmFtZQkJCT0gIldJUyBHTzcwMDdTQiBFWi1VU0IiLAorCS5pZAkJCT0gSTJDX0FMR09fR083MDA3X1VTQiwKKwkuYWxnbwkJCT0gJmdvNzAwN191c2JfYWxnbywKK307CisKKy8qKioqKioqKioqKioqKioqKioqKiogVVNCIGFkZC9yZW1vdmUgZnVuY3Rpb25zICoqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIGludCBnbzcwMDdfdXNiX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLAorCQljb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCit7CisJc3RydWN0IGdvNzAwNyAqZ287CisJc3RydWN0IGdvNzAwN191c2IgKnVzYjsKKwlzdHJ1Y3QgZ283MDA3X3VzYl9ib2FyZCAqYm9hcmQ7CisJc3RydWN0IHVzYl9kZXZpY2UgKnVzYmRldiA9IGludGVyZmFjZV90b191c2JkZXYoaW50Zik7CisJY2hhciAqbmFtZTsKKwlpbnQgdmlkZW9fcGlwZSwgaSwgdl91cmJfbGVuOworCisJcHJpbnRrKEtFUk5fREVCVUcgImdvNzAwNy11c2I6IHByb2JpbmcgbmV3IEdPNzAwNyBVU0IgYm9hcmRcbiIpOworCisJc3dpdGNoIChpZC0+ZHJpdmVyX2luZm8pIHsKKwljYXNlIEdPNzAwN19CT0FSRElEX01BVFJJWF9JSToKKwkJbmFtZSA9ICJXSVMgTWF0cml4IElJIG9yIGNvbXBhdGlibGUiOworCQlib2FyZCA9ICZib2FyZF9tYXRyaXhfaWk7CisJCWJyZWFrOworCWNhc2UgR083MDA3X0JPQVJESURfTUFUUklYX1JFTE9BRDoKKwkJbmFtZSA9ICJXSVMgTWF0cml4IFJlbG9hZGVkIG9yIGNvbXBhdGlibGUiOworCQlib2FyZCA9ICZib2FyZF9tYXRyaXhfcmVsb2FkOworCQlicmVhazsKKwljYXNlIEdPNzAwN19CT0FSRElEX01BVFJJWF9SRVY6CisJCW5hbWUgPSAiV0lTIE1hdHJpeCBSZXZvbHV0aW9uIG9yIGNvbXBhdGlibGUiOworCQlib2FyZCA9ICZib2FyZF9tYXRyaXhfcmV2b2x1dGlvbjsKKwkJYnJlYWs7CisJY2FzZSBHTzcwMDdfQk9BUkRJRF9TVEFSX1RSRUs6CisJCW5hbWUgPSAiV0lTIFN0YXIgVHJlayBvciBjb21wYXRpYmxlIjsKKwkJYm9hcmQgPSAmYm9hcmRfc3Rhcl90cmVrOworCQlicmVhazsKKwljYXNlIEdPNzAwN19CT0FSRElEX1hNRU46CisJCW5hbWUgPSAiV0lTIFhNZW4gb3IgY29tcGF0aWJsZSI7CisJCWJvYXJkID0gJmJvYXJkX3htZW47CisJCWJyZWFrOworCWNhc2UgR083MDA3X0JPQVJESURfWE1FTl9JSToKKwkJbmFtZSA9ICJXSVMgWE1lbiBJSSBvciBjb21wYXRpYmxlIjsKKwkJYm9hcmQgPSAmYm9hcmRfeG1lbjsKKwkJYnJlYWs7CisJY2FzZSBHTzcwMDdfQk9BUkRJRF9YTUVOX0lJSToKKwkJbmFtZSA9ICJXSVMgWE1lbiBJSUkgb3IgY29tcGF0aWJsZSI7CisJCWJvYXJkID0gJmJvYXJkX3htZW47CisJCWJyZWFrOworCWNhc2UgR083MDA3X0JPQVJESURfUFhfTTQwMlU6CisJCW5hbWUgPSAiUGxleHRvciBQWC1NNDAyVSI7CisJCWJvYXJkID0gJmJvYXJkX21hdHJpeF9paTsKKwkJYnJlYWs7CisJY2FzZSBHTzcwMDdfQk9BUkRJRF9QWF9UVjQwMlVfQU5ZOgorCQluYW1lID0gIlBsZXh0b3IgUFgtVFY0MDJVICh1bmtub3duIHR1bmVyKSI7CisJCWJvYXJkID0gJmJvYXJkX3B4X3R2NDAydTsKKwkJYnJlYWs7CisJY2FzZSBHTzcwMDdfQk9BUkRJRF9MSUZFVklFV19MUjE5MjoKKwkJcHJpbnRrKEtFUk5fRVJSICJnbzcwMDctdXNiOiBUaGUgTGlmZXZpZXcgVFYgV2Fsa2VyIFVsdHJhICIKKwkJCQkiaXMgbm90IHN1cHBvcnRlZC4gIFNvcnJ5IVxuIik7CisJCXJldHVybiAwOworCQluYW1lID0gIkxpZmV2aWV3IFRWIFdhbGtlciBVbHRyYSI7CisJCWJvYXJkID0gJmJvYXJkX2xpZmV2aWV3X2xyMTkyOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlwcmludGsoS0VSTl9FUlIgImdvNzAwNy11c2I6IHVua25vd24gYm9hcmQgSUQgJWQhXG4iLAorCQkJCSh1bnNpZ25lZCBpbnQpaWQtPmRyaXZlcl9pbmZvKTsKKwkJcmV0dXJuIDA7CisJfQorCisJdXNiID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGdvNzAwN191c2IpLCBHRlBfS0VSTkVMKTsKKwlpZiAodXNiID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCW1lbXNldCh1c2IsIDAsIHNpemVvZihzdHJ1Y3QgZ283MDA3X3VzYikpOworCisJLyogQWxsb2NhdGUgdGhlIFVSQiBhbmQgYnVmZmVyIGZvciByZWNlaXZpbmcgaW5jb21pbmcgaW50ZXJydXB0cyAqLworCXVzYi0+aW50cl91cmIgPSB1c2JfYWxsb2NfdXJiKDAsIEdGUF9LRVJORUwpOworCWlmICh1c2ItPmludHJfdXJiID09IE5VTEwpCisJCWdvdG8gYWxsb2NmYWlsOworCXVzYi0+aW50cl91cmItPnRyYW5zZmVyX2J1ZmZlciA9IGttYWxsb2MoMipzaXplb2YodTE2KSwgR0ZQX0tFUk5FTCk7CisJaWYgKHVzYi0+aW50cl91cmItPnRyYW5zZmVyX2J1ZmZlciA9PSBOVUxMKQorCQlnb3RvIGFsbG9jZmFpbDsKKworCWdvID0gZ283MDA3X2FsbG9jKCZib2FyZC0+bWFpbl9pbmZvLCAmaW50Zi0+ZGV2KTsKKwlpZiAoZ28gPT0gTlVMTCkKKwkJZ290byBhbGxvY2ZhaWw7CisJdXNiLT5ib2FyZCA9IGJvYXJkOworCXVzYi0+dXNiZGV2ID0gdXNiZGV2OworCWdvLT5ib2FyZF9pZCA9IGlkLT5kcml2ZXJfaW5mbzsKKwlzdHJuY3B5KGdvLT5uYW1lLCBuYW1lLCBzaXplb2YoZ28tPm5hbWUpKTsKKwlpZiAoYm9hcmQtPmZsYWdzICYgR083MDA3X1VTQl9FWlVTQikKKwkJZ28tPmhwaV9vcHMgPSAmZ283MDA3X3VzYl9lenVzYl9ocGlfb3BzOworCWVsc2UKKwkJZ28tPmhwaV9vcHMgPSAmZ283MDA3X3VzYl9vbmJvYXJkX2hwaV9vcHM7CisJZ28tPmhwaV9jb250ZXh0ID0gdXNiOworCXVzYl9maWxsX2ludF91cmIodXNiLT5pbnRyX3VyYiwgdXNiLT51c2JkZXYsCisJCQl1c2JfcmN2aW50cGlwZSh1c2ItPnVzYmRldiwgNCksCisJCQl1c2ItPmludHJfdXJiLT50cmFuc2Zlcl9idWZmZXIsIDIqc2l6ZW9mKHUxNiksCisJCQlnbzcwMDdfdXNiX3JlYWRpbnRlcnJ1cHRfY29tcGxldGUsIGdvLCA4KTsKKwl1c2Jfc2V0X2ludGZkYXRhKGludGYsIGdvKTsKKworCS8qIEJvb3QgdGhlIEdPNzAwNyAqLworCWlmIChnbzcwMDdfYm9vdF9lbmNvZGVyKGdvLCBnby0+Ym9hcmRfaW5mby0+ZmxhZ3MgJgorCQkJCQlHTzcwMDdfQk9BUkRfVVNFX09OQk9BUkRfSTJDKSA8IDApCisJCWdvdG8gaW5pdGZhaWw7CisKKwkvKiBSZWdpc3RlciB0aGUgRVotVVNCIEkyQyBhZGFwdGVyLCBpZiB3ZSdyZSB1c2luZyBpdCAqLworCWlmIChib2FyZC0+ZmxhZ3MgJiBHTzcwMDdfVVNCX0VaVVNCX0kyQykgeworCQltZW1jcHkoJmdvLT5pMmNfYWRhcHRlciwgJmdvNzAwN191c2JfYWRhcF90ZW1wbCwKKwkJCQlzaXplb2YoZ283MDA3X3VzYl9hZGFwX3RlbXBsKSk7CisJCWluaXRfTVVURVgoJnVzYi0+aTJjX2xvY2spOworCQlnby0+aTJjX2FkYXB0ZXIuZGV2LnBhcmVudCA9IGdvLT5kZXY7CisJCWkyY19zZXRfYWRhcGRhdGEoJmdvLT5pMmNfYWRhcHRlciwgZ28pOworCQlpZiAoaTJjX2FkZF9hZGFwdGVyKCZnby0+aTJjX2FkYXB0ZXIpIDwgMCkgeworCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkJImdvNzAwNy11c2I6IGVycm9yOiBpMmNfYWRkX2FkYXB0ZXIgZmFpbGVkXG4iKTsKKwkJCWdvdG8gaW5pdGZhaWw7CisJCX0KKwkJZ28tPmkyY19hZGFwdGVyX29ubGluZSA9IDE7CisJfQorCisJLyogUGVsY28gYW5kIEFkbGluayByZXVzZWQgdGhlIFhNZW4gYW5kIFhNZW4tSUlJIHZlbmRvciBhbmQgcHJvZHVjdAorCSAqIElEcyBmb3IgdGhlaXIgb3duIGluY29tcGF0aWJsZSBkZXNpZ25zLiAgV2UgY2FuIGRldGVjdCBYTWVuIGJvYXJkcworCSAqIGJ5IHByb2JpbmcgdGhlIHNlbnNvciwgYnV0IHRoZXJlIGlzIG5vIHdheSB0byBwcm9iZSB0aGUgc2Vuc29ycyBvbgorCSAqIHRoZSBQZWxjbyBhbmQgQWRsaW5rIGRlc2lnbnMgc28gd2UgZGVmYXVsdCB0byB0aGUgQWRsaW5rLiAgSWYgaXQKKwkgKiBpcyBhY3R1YWxseSBhIFBlbGNvLCB0aGUgdXNlciBtdXN0IHNldCB0aGUgYXNzdW1lX2VuZHVyYSBtb2R1bGUKKwkgKiBwYXJhbWV0ZXIuICovCisJaWYgKChnby0+Ym9hcmRfaWQgPT0gR083MDA3X0JPQVJESURfWE1FTiB8fAorCQkJCWdvLT5ib2FyZF9pZCA9PSBHTzcwMDdfQk9BUkRJRF9YTUVOX0lJSSkgJiYKKwkJCWdvLT5pMmNfYWRhcHRlcl9vbmxpbmUpIHsKKwkJdW5pb24gaTJjX3NtYnVzX2RhdGEgZGF0YTsKKworCQkvKiBDaGVjayB0byBzZWUgaWYgcmVnaXN0ZXIgMHgwQSBpcyAweDc2ICovCisJCWkyY19zbWJ1c194ZmVyKCZnby0+aTJjX2FkYXB0ZXIsIDB4MjEsIEkyQ19DTElFTlRfU0NDQiwKKwkJCUkyQ19TTUJVU19SRUFELCAweDBBLCBJMkNfU01CVVNfQllURV9EQVRBLCAmZGF0YSk7CisJCWlmIChkYXRhLmJ5dGUgIT0gMHg3NikgeworCQkJaWYgKGFzc3VtZV9lbmR1cmEpIHsKKwkJCQlnby0+Ym9hcmRfaWQgPSBHTzcwMDdfQk9BUkRJRF9FTkRVUkE7CisJCQkJdXNiLT5ib2FyZCA9IGJvYXJkID0gJmJvYXJkX2VuZHVyYTsKKwkJCQlnby0+Ym9hcmRfaW5mbyA9ICZib2FyZC0+bWFpbl9pbmZvOworCQkJCXN0cm5jcHkoZ28tPm5hbWUsICJQZWxjbyBFbmR1cmEiLAorCQkJCQkJc2l6ZW9mKGdvLT5uYW1lKSk7CisJCQl9IGVsc2UgeworCQkJCXUxNiBjaGFubmVsOworCisJCQkJLyogc2V0IEdQSU81IHRvIGJlIGFuIG91dHB1dCwgY3VycmVudGx5IGxvdyAqLworCQkJCWdvNzAwN193cml0ZV9hZGRyKGdvLCAweDNjODIsIDB4MDAwMCk7CisJCQkJZ283MDA3X3dyaXRlX2FkZHIoZ28sIDB4M2M4MCwgMHgwMGRmKTsKKwkJCQkvKiByZWFkIGNoYW5uZWwgbnVtYmVyIGZyb20gR1BJT1sxOjBdICovCisJCQkJZ283MDA3X3JlYWRfYWRkcihnbywgMHgzYzgxLCAmY2hhbm5lbCk7CisJCQkJY2hhbm5lbCAmPSAweDM7CisJCQkJZ28tPmJvYXJkX2lkID0gR083MDA3X0JPQVJESURfQURMSU5LX01QRzI0OworCQkJCXVzYi0+Ym9hcmQgPSBib2FyZCA9ICZib2FyZF9hZGxpbmtfbXBnMjQ7CisJCQkJZ28tPmJvYXJkX2luZm8gPSAmYm9hcmQtPm1haW5faW5mbzsKKwkJCQlnby0+Y2hhbm5lbF9udW1iZXIgPSBjaGFubmVsOworCQkJCXNucHJpbnRmKGdvLT5uYW1lLCBzaXplb2YoZ28tPm5hbWUpLAorCQkJCQkiQWRsaW5rIFBDSS1NUEcyNCwgY2hhbm5lbCAjJWQiLAorCQkJCQljaGFubmVsKTsKKwkJCX0KKwkJfQorCX0KKworCS8qIFByb2JlIHRoZSB0dW5lciBtb2RlbCBvbiB0aGUgVFY0MDJVICovCisJaWYgKGdvLT5ib2FyZF9pZCA9PSBHTzcwMDdfQk9BUkRJRF9QWF9UVjQwMlVfQU5ZKSB7CisJCXU4IGRhdGFbM107CisKKwkJLyogQm9hcmQgc3RyYXBwaW5nIGluZGljYXRlcyB0dW5lciBtb2RlbCAqLworCQlpZiAoZ283MDA3X3VzYl92ZW5kb3JfcmVxdWVzdChnbywgMHg0MSwgMCwgMCwgZGF0YSwgMywgMSkgPCAwKSB7CisJCQlwcmludGsoS0VSTl9FUlIgImdvNzAwNy11c2I6IEdQSU8gcmVhZCBmYWlsZWQhXG4iKTsKKwkJCWdvdG8gaW5pdGZhaWw7CisJCX0KKwkJc3dpdGNoIChkYXRhWzBdID4+IDYpIHsKKwkJY2FzZSAxOgorCQkJZ28tPmJvYXJkX2lkID0gR083MDA3X0JPQVJESURfUFhfVFY0MDJVX0VVOworCQkJZ28tPnR1bmVyX3R5cGUgPSBUVU5FUl9TT05ZX0JURl9QRzQ3Mlo7CisJCQlzdHJuY3B5KGdvLT5uYW1lLCAiUGxleHRvciBQWC1UVjQwMlUtRVUiLAorCQkJCQlzaXplb2YoZ28tPm5hbWUpKTsKKwkJCWJyZWFrOworCQljYXNlIDI6CisJCQlnby0+Ym9hcmRfaWQgPSBHTzcwMDdfQk9BUkRJRF9QWF9UVjQwMlVfSlA7CisJCQlnby0+dHVuZXJfdHlwZSA9IFRVTkVSX1NPTllfQlRGX1BLNDY3WjsKKwkJCXN0cm5jcHkoZ28tPm5hbWUsICJQbGV4dG9yIFBYLVRWNDAyVS1KUCIsCisJCQkJCXNpemVvZihnby0+bmFtZSkpOworCQkJYnJlYWs7CisJCWNhc2UgMzoKKwkJCWdvLT5ib2FyZF9pZCA9IEdPNzAwN19CT0FSRElEX1BYX1RWNDAyVV9OQTsKKwkJCWdvLT50dW5lcl90eXBlID0gVFVORVJfU09OWV9CVEZfUEI0NjNaOworCQkJc3RybmNweShnby0+bmFtZSwgIlBsZXh0b3IgUFgtVFY0MDJVLU5BIiwKKwkJCQkJc2l6ZW9mKGdvLT5uYW1lKSk7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXByaW50ayhLRVJOX0RFQlVHICJnbzcwMDctdXNiOiB1bmFibGUgdG8gZGV0ZWN0ICIKKwkJCQkJCSJ0dW5lciB0eXBlIVxuIik7CisJCQlicmVhazsKKwkJfQorCQkvKiBDb25maWd1cmUgdHVuZXIgbW9kZSBzZWxlY3Rpb24gaW5wdXRzIGNvbm5lY3RlZAorCQkgKiB0byB0aGUgRVotVVNCIEdQSU8gb3V0cHV0IHBpbnMgKi8KKwkJaWYgKGdvNzAwN191c2JfdmVuZG9yX3JlcXVlc3QoZ28sIDB4NDAsIDB4N2YwMiwgMCwKKwkJCQkJTlVMTCwgMCwgMCkgPCAwKSB7CisJCQlwcmludGsoS0VSTl9FUlIKKwkJCQkiZ283MDA3LXVzYjogR1BJTyB3cml0ZSBmYWlsZWQhXG4iKTsKKwkJCWdvdG8gaW5pdGZhaWw7CisJCX0KKwl9CisKKwkvKiBQcmludCBhIG5hc3R5IG1lc3NhZ2UgaWYgdGhlIHVzZXIgYXR0ZW1wdHMgdG8gdXNlIGEgVVNCMi4wIGRldmljZSBpbgorCSAqIGEgVVNCMS4xIHBvcnQuICBUaGVyZSB3aWxsIGJlIHNpbGVudCBjb3JydXB0aW9uIG9mIHRoZSBzdHJlYW0uICovCisJaWYgKChib2FyZC0+ZmxhZ3MgJiBHTzcwMDdfVVNCX0VaVVNCKSAmJgorCQkJdXNiZGV2LT5zcGVlZCAhPSBVU0JfU1BFRURfSElHSCkKKwkJcHJpbnRrKEtFUk5fRVJSICJnbzcwMDctdXNiOiAqKiogV0FSTklORyAqKiogIFRoaXMgZGV2aWNlICIKKwkJCQkibXVzdCBiZSBjb25uZWN0ZWQgdG8gYSBVU0IgMi4wIHBvcnQhICAiCisJCQkJIkF0dGVtcHRpbmcgdG8gY2FwdHVyZSB2aWRlbyB0aHJvdWdoIGEgVVNCIDEuMSAiCisJCQkJInBvcnQgd2lsbCByZXN1bHQgaW4gc3RyZWFtIGNvcnJ1cHRpb24sIGV2ZW4gIgorCQkJCSJhdCBsb3cgYml0cmF0ZXMhXG4iKTsKKworCS8qIERvIGFueSBmaW5hbCBHTzcwMDcgaW5pdGlhbGl6YXRpb24sIHRoZW4gcmVnaXN0ZXIgdGhlCisJICogVjRMMiBhbmQgQUxTQSBpbnRlcmZhY2VzICovCisJaWYgKGdvNzAwN19yZWdpc3Rlcl9lbmNvZGVyKGdvKSA8IDApCisJCWdvdG8gaW5pdGZhaWw7CisKKwkvKiBBbGxvY2F0ZSB0aGUgVVJCcyBhbmQgYnVmZmVycyBmb3IgcmVjZWl2aW5nIHRoZSB2aWRlbyBzdHJlYW0gKi8KKwlpZiAoYm9hcmQtPmZsYWdzICYgR083MDA3X1VTQl9FWlVTQikgeworCQl2X3VyYl9sZW4gPSAxMDI0OworCQl2aWRlb19waXBlID0gdXNiX3JjdmJ1bGtwaXBlKHVzYi0+dXNiZGV2LCA2KTsKKwl9IGVsc2UgeworCQl2X3VyYl9sZW4gPSA1MTI7CisJCXZpZGVvX3BpcGUgPSB1c2JfcmN2YnVsa3BpcGUodXNiLT51c2JkZXYsIDEpOworCX0KKwlmb3IgKGkgPSAwOyBpIDwgODsgKytpKSB7CisJCXVzYi0+dmlkZW9fdXJic1tpXSA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0tFUk5FTCk7CisJCWlmICh1c2ItPnZpZGVvX3VyYnNbaV0gPT0gTlVMTCkKKwkJCWdvdG8gaW5pdGZhaWw7CisJCXVzYi0+dmlkZW9fdXJic1tpXS0+dHJhbnNmZXJfYnVmZmVyID0KKwkJCQkJCWttYWxsb2Modl91cmJfbGVuLCBHRlBfS0VSTkVMKTsKKwkJaWYgKHVzYi0+dmlkZW9fdXJic1tpXS0+dHJhbnNmZXJfYnVmZmVyID09IE5VTEwpCisJCQlnb3RvIGluaXRmYWlsOworCQl1c2JfZmlsbF9idWxrX3VyYih1c2ItPnZpZGVvX3VyYnNbaV0sIHVzYi0+dXNiZGV2LCB2aWRlb19waXBlLAorCQkJCXVzYi0+dmlkZW9fdXJic1tpXS0+dHJhbnNmZXJfYnVmZmVyLCB2X3VyYl9sZW4sCisJCQkJZ283MDA3X3VzYl9yZWFkX3ZpZGVvX3BpcGVfY29tcGxldGUsIGdvKTsKKwl9CisKKwkvKiBBbGxvY2F0ZSB0aGUgVVJCcyBhbmQgYnVmZmVycyBmb3IgcmVjZWl2aW5nIHRoZSBhdWRpbyBzdHJlYW0gKi8KKwlpZiAoKGJvYXJkLT5mbGFncyAmIEdPNzAwN19VU0JfRVpVU0IpICYmIGdvLT5hdWRpb19lbmFibGVkKQorCQlmb3IgKGkgPSAwOyBpIDwgODsgKytpKSB7CisJCQl1c2ItPmF1ZGlvX3VyYnNbaV0gPSB1c2JfYWxsb2NfdXJiKDAsIEdGUF9LRVJORUwpOworCQkJaWYgKHVzYi0+YXVkaW9fdXJic1tpXSA9PSBOVUxMKQorCQkJCWdvdG8gaW5pdGZhaWw7CisJCQl1c2ItPmF1ZGlvX3VyYnNbaV0tPnRyYW5zZmVyX2J1ZmZlciA9IGttYWxsb2MoNDA5NiwKKwkJCQkJCQkJR0ZQX0tFUk5FTCk7CisJCQlpZiAodXNiLT5hdWRpb191cmJzW2ldLT50cmFuc2Zlcl9idWZmZXIgPT0gTlVMTCkKKwkJCQlnb3RvIGluaXRmYWlsOworCQkJdXNiX2ZpbGxfYnVsa191cmIodXNiLT5hdWRpb191cmJzW2ldLCB1c2ItPnVzYmRldiwKKwkJCQl1c2JfcmN2YnVsa3BpcGUodXNiLT51c2JkZXYsIDgpLAorCQkJCXVzYi0+YXVkaW9fdXJic1tpXS0+dHJhbnNmZXJfYnVmZmVyLCA0MDk2LAorCQkJCWdvNzAwN191c2JfcmVhZF9hdWRpb19waXBlX2NvbXBsZXRlLCBnbyk7CisJCX0KKworCisJZ28tPnN0YXR1cyA9IFNUQVRVU19PTkxJTkU7CisJcmV0dXJuIDA7CisKK2luaXRmYWlsOgorCWdvLT5zdGF0dXMgPSBTVEFUVVNfU0hVVERPV047CisJcmV0dXJuIDA7CisKK2FsbG9jZmFpbDoKKwlpZiAodXNiLT5pbnRyX3VyYikgeworCQlrZnJlZSh1c2ItPmludHJfdXJiLT50cmFuc2Zlcl9idWZmZXIpOworCQl1c2JfZnJlZV91cmIodXNiLT5pbnRyX3VyYik7CisJfQorCWtmcmVlKHVzYik7CisJcmV0dXJuIC1FTk9NRU07Cit9CisKK3N0YXRpYyB2b2lkIGdvNzAwN191c2JfZGlzY29ubmVjdChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKK3sKKwlzdHJ1Y3QgZ283MDA3ICpnbyA9IHVzYl9nZXRfaW50ZmRhdGEoaW50Zik7CisJc3RydWN0IGdvNzAwN191c2IgKnVzYiA9IGdvLT5ocGlfY29udGV4dDsKKwlpbnQgaTsKKworCWdvLT5zdGF0dXMgPSBTVEFUVVNfU0hVVERPV047CisJdXNiX2tpbGxfdXJiKHVzYi0+aW50cl91cmIpOworCisJLyogRnJlZSBVU0ItcmVsYXRlZCBzdHJ1Y3RzICovCisJZm9yIChpID0gMDsgaSA8IDg7ICsraSkgeworCQlpZiAodXNiLT52aWRlb191cmJzW2ldICE9IE5VTEwpIHsKKwkJCWlmICh1c2ItPnZpZGVvX3VyYnNbaV0tPnRyYW5zZmVyX2J1ZmZlciAhPSBOVUxMKQorCQkJCWtmcmVlKHVzYi0+dmlkZW9fdXJic1tpXS0+dHJhbnNmZXJfYnVmZmVyKTsKKwkJCXVzYl9mcmVlX3VyYih1c2ItPnZpZGVvX3VyYnNbaV0pOworCQl9CisJCWlmICh1c2ItPmF1ZGlvX3VyYnNbaV0gIT0gTlVMTCkgeworCQkJaWYgKHVzYi0+YXVkaW9fdXJic1tpXS0+dHJhbnNmZXJfYnVmZmVyICE9IE5VTEwpCisJCQkJa2ZyZWUodXNiLT5hdWRpb191cmJzW2ldLT50cmFuc2Zlcl9idWZmZXIpOworCQkJdXNiX2ZyZWVfdXJiKHVzYi0+YXVkaW9fdXJic1tpXSk7CisJCX0KKwl9CisJa2ZyZWUodXNiLT5pbnRyX3VyYi0+dHJhbnNmZXJfYnVmZmVyKTsKKwl1c2JfZnJlZV91cmIodXNiLT5pbnRyX3VyYik7CisKKwlrZnJlZShnby0+aHBpX2NvbnRleHQpOworCisJZ283MDA3X3JlbW92ZShnbyk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBnbzcwMDdfdXNiX2RyaXZlciA9IHsKKwkubmFtZQkJPSAiZ283MDA3IiwKKwkucHJvYmUJCT0gZ283MDA3X3VzYl9wcm9iZSwKKwkuZGlzY29ubmVjdAk9IGdvNzAwN191c2JfZGlzY29ubmVjdCwKKwkuaWRfdGFibGUJPSBnbzcwMDdfdXNiX2lkX3RhYmxlLAorfTsKKworc3RhdGljIGludCBfX2luaXQgZ283MDA3X3VzYl9pbml0KHZvaWQpCit7CisJcmV0dXJuIHVzYl9yZWdpc3RlcigmZ283MDA3X3VzYl9kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgZ283MDA3X3VzYl9jbGVhbnVwKHZvaWQpCit7CisJdXNiX2RlcmVnaXN0ZXIoJmdvNzAwN191c2JfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQoZ283MDA3X3VzYl9pbml0KTsKK21vZHVsZV9leGl0KGdvNzAwN191c2JfY2xlYW51cCk7CisKK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9nbzcwMDcvZ283MDA3LXY0bDIuYyBiL2RyaXZlcnMvc3RhZ2luZy9nbzcwMDcvZ283MDA3LXY0bDIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NGUxMTQxCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2dvNzAwNy9nbzcwMDctdjRsMi5jCkBAIC0wLDAgKzEsMTQ5OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA2IE1pY3JvbmFzIFVTQSBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKFZlcnNpb24gMikgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisgKiBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvZnMuaD4KKyNpbmNsdWRlIDxsaW51eC91bmlzdGQuaD4KKyNpbmNsdWRlIDxsaW51eC90aW1lLmg+CisjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgorI2luY2x1ZGUgPGxpbnV4L3BhZ2VtYXAuaD4KKyNpbmNsdWRlIDxsaW51eC92aWRlb2RldjIuaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWNvbW1vbi5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItaW9jdGwuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxsaW51eC9zZW1hcGhvcmUuaD4KKyNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CisjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgorCisjaW5jbHVkZSAiZ283MDA3LmgiCisjaW5jbHVkZSAiZ283MDA3LXByaXYuaCIKKyNpbmNsdWRlICJ3aXMtaTJjLmgiCisKK3N0YXRpYyB2b2lkIGRlYWN0aXZhdGVfYnVmZmVyKHN0cnVjdCBnbzcwMDdfYnVmZmVyICpnb2J1ZikKK3sKKwlpbnQgaTsKKworCWlmIChnb2J1Zi0+c3RhdGUgIT0gQlVGX1NUQVRFX0lETEUpIHsKKwkJbGlzdF9kZWwoJmdvYnVmLT5zdHJlYW0pOworCQlnb2J1Zi0+c3RhdGUgPSBCVUZfU1RBVEVfSURMRTsKKwl9CisJaWYgKGdvYnVmLT5wYWdlX2NvdW50ID4gMCkgeworCQlmb3IgKGkgPSAwOyBpIDwgZ29idWYtPnBhZ2VfY291bnQ7ICsraSkKKwkJCXBhZ2VfY2FjaGVfcmVsZWFzZShnb2J1Zi0+cGFnZXNbaV0pOworCQlnb2J1Zi0+cGFnZV9jb3VudCA9IDA7CisJfQorfQorCitzdGF0aWMgdm9pZCBhYm9ydF9xdWV1ZWQoc3RydWN0IGdvNzAwNyAqZ28pCit7CisJc3RydWN0IGdvNzAwN19idWZmZXIgKmdvYnVmLCAqbmV4dDsKKworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShnb2J1ZiwgbmV4dCwgJmdvLT5zdHJlYW0sIHN0cmVhbSkgeworCQlkZWFjdGl2YXRlX2J1ZmZlcihnb2J1Zik7CisJfQorfQorCitzdGF0aWMgaW50IGdvNzAwN19zdHJlYW1vZmYoc3RydWN0IGdvNzAwNyAqZ28pCit7CisJaW50IHJldHZhbCA9IC1FSU5WQUw7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWRvd24oJmdvLT5od19sb2NrKTsKKwlpZiAoZ28tPnN0cmVhbWluZykgeworCQlnby0+c3RyZWFtaW5nID0gMDsKKwkJZ283MDA3X3N0cmVhbV9zdG9wKGdvKTsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmdvLT5zcGlubG9jaywgZmxhZ3MpOworCQlhYm9ydF9xdWV1ZWQoZ28pOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZnby0+c3BpbmxvY2ssIGZsYWdzKTsKKwkJZ283MDA3X3Jlc2V0X2VuY29kZXIoZ28pOworCQlyZXR2YWwgPSAwOworCX0KKwl1cCgmZ28tPmh3X2xvY2spOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGdvNzAwN19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXN0cnVjdCBnbzcwMDcgKmdvID0gdmlkZW9fZ2V0X2RydmRhdGEodmlkZW9fZGV2ZGF0YShmaWxlKSk7CisJc3RydWN0IGdvNzAwN19maWxlICpnb2ZoOworCisJaWYgKGdvLT5zdGF0dXMgIT0gU1RBVFVTX09OTElORSkKKwkJcmV0dXJuIC1FQlVTWTsKKwlnb2ZoID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGdvNzAwN19maWxlKSwgR0ZQX0tFUk5FTCk7CisJaWYgKGdvZmggPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisJKytnby0+cmVmX2NvdW50OworCWdvZmgtPmdvID0gZ287CisJaW5pdF9NVVRFWCgmZ29maC0+bG9jayk7CisJZ29maC0+YnVmX2NvdW50ID0gMDsKKwlmaWxlLT5wcml2YXRlX2RhdGEgPSBnb2ZoOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGdvNzAwN19yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXN0cnVjdCBnbzcwMDdfZmlsZSAqZ29maCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgZ283MDA3ICpnbyA9IGdvZmgtPmdvOworCisJaWYgKGdvZmgtPmJ1Zl9jb3VudCA+IDApIHsKKwkJZ283MDA3X3N0cmVhbW9mZihnbyk7CisJCWdvLT5pbl91c2UgPSAwOworCQlrZnJlZShnb2ZoLT5idWZzKTsKKwkJZ29maC0+YnVmX2NvdW50ID0gMDsKKwl9CisJa2ZyZWUoZ29maCk7CisJaWYgKC0tZ28tPnJlZl9jb3VudCA9PSAwKQorCQlrZnJlZShnbyk7CisJZmlsZS0+cHJpdmF0ZV9kYXRhID0gTlVMTDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHUzMiBnZXRfZnJhbWVfdHlwZV9mbGFnKHN0cnVjdCBnbzcwMDdfYnVmZmVyICpnb2J1ZiwgaW50IGZvcm1hdCkKK3sKKwl1OCAqZiA9IHBhZ2VfYWRkcmVzcyhnb2J1Zi0+cGFnZXNbMF0pOworCisJc3dpdGNoIChmb3JtYXQpIHsKKwljYXNlIEdPNzAwN19GT1JNQVRfTUpQRUc6CisJCXJldHVybiBWNEwyX0JVRl9GTEFHX0tFWUZSQU1FOworCWNhc2UgR083MDA3X0ZPUk1BVF9NUEVHNDoKKwkJc3dpdGNoICgoZltnb2J1Zi0+ZnJhbWVfb2Zmc2V0ICsgNF0gPj4gNikgJiAweDMpIHsKKwkJY2FzZSAwOgorCQkJcmV0dXJuIFY0TDJfQlVGX0ZMQUdfS0VZRlJBTUU7CisJCWNhc2UgMToKKwkJCXJldHVybiBWNEwyX0JVRl9GTEFHX1BGUkFNRTsKKwkJY2FzZSAyOgorCQkJcmV0dXJuIFY0TDJfQlVGX0ZMQUdfQkZSQU1FOworCQlkZWZhdWx0OgorCQkJcmV0dXJuIDA7CisJCX0KKwljYXNlIEdPNzAwN19GT1JNQVRfTVBFRzE6CisJY2FzZSBHTzcwMDdfRk9STUFUX01QRUcyOgorCQlzd2l0Y2ggKChmW2dvYnVmLT5mcmFtZV9vZmZzZXQgKyA1XSA+PiAzKSAmIDB4NykgeworCQljYXNlIDE6CisJCQlyZXR1cm4gVjRMMl9CVUZfRkxBR19LRVlGUkFNRTsKKwkJY2FzZSAyOgorCQkJcmV0dXJuIFY0TDJfQlVGX0ZMQUdfUEZSQU1FOworCQljYXNlIDM6CisJCQlyZXR1cm4gVjRMMl9CVUZfRkxBR19CRlJBTUU7CisJCWRlZmF1bHQ6CisJCQlyZXR1cm4gMDsKKwkJfQorCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNldF9jYXB0dXJlX3NpemUoc3RydWN0IGdvNzAwNyAqZ28sIHN0cnVjdCB2NGwyX2Zvcm1hdCAqZm10LCBpbnQgdHJ5KQoreworCWludCBzZW5zb3JfaGVpZ2h0ID0gMCwgc2Vuc29yX3dpZHRoID0gMDsKKwlpbnQgd2lkdGgsIGhlaWdodCwgaTsKKworCWlmIChmbXQgIT0gTlVMTCAmJiBmbXQtPmZtdC5waXgucGl4ZWxmb3JtYXQgIT0gVjRMMl9QSVhfRk1UX01KUEVHICYmCisJCQlmbXQtPmZtdC5waXgucGl4ZWxmb3JtYXQgIT0gVjRMMl9QSVhfRk1UX01QRUcgJiYKKwkJCWZtdC0+Zm10LnBpeC5waXhlbGZvcm1hdCAhPSBWNEwyX1BJWF9GTVRfTVBFRzQpCisJCXJldHVybiAtRUlOVkFMOworCisJc3dpdGNoIChnby0+c3RhbmRhcmQpIHsKKwljYXNlIEdPNzAwN19TVERfTlRTQzoKKwkJc2Vuc29yX3dpZHRoID0gNzIwOworCQlzZW5zb3JfaGVpZ2h0ID0gNDgwOworCQlicmVhazsKKwljYXNlIEdPNzAwN19TVERfUEFMOgorCQlzZW5zb3Jfd2lkdGggPSA3MjA7CisJCXNlbnNvcl9oZWlnaHQgPSA1NzY7CisJCWJyZWFrOworCWNhc2UgR083MDA3X1NURF9PVEhFUjoKKwkJc2Vuc29yX3dpZHRoID0gZ28tPmJvYXJkX2luZm8tPnNlbnNvcl93aWR0aDsKKwkJc2Vuc29yX2hlaWdodCA9IGdvLT5ib2FyZF9pbmZvLT5zZW5zb3JfaGVpZ2h0OworCQlicmVhazsKKwl9CisKKwlpZiAoZm10ID09IE5VTEwpIHsKKwkJd2lkdGggPSBzZW5zb3Jfd2lkdGg7CisJCWhlaWdodCA9IHNlbnNvcl9oZWlnaHQ7CisJfSBlbHNlIGlmIChnby0+Ym9hcmRfaW5mby0+c2Vuc29yX2ZsYWdzICYgR083MDA3X1NFTlNPUl9TQ0FMSU5HKSB7CisJCWlmIChmbXQtPmZtdC5waXgud2lkdGggPiBzZW5zb3Jfd2lkdGgpCisJCQl3aWR0aCA9IHNlbnNvcl93aWR0aDsKKwkJZWxzZSBpZiAoZm10LT5mbXQucGl4LndpZHRoIDwgMTQ0KQorCQkJd2lkdGggPSAxNDQ7CisJCWVsc2UKKwkJCXdpZHRoID0gZm10LT5mbXQucGl4LndpZHRoICYgfjB4MGY7CisKKwkJaWYgKGZtdC0+Zm10LnBpeC5oZWlnaHQgPiBzZW5zb3JfaGVpZ2h0KQorCQkJaGVpZ2h0ID0gc2Vuc29yX2hlaWdodDsKKwkJZWxzZSBpZiAoZm10LT5mbXQucGl4LmhlaWdodCA8IDk2KQorCQkJaGVpZ2h0ID0gOTY7CisJCWVsc2UKKwkJCWhlaWdodCA9IGZtdC0+Zm10LnBpeC5oZWlnaHQgJiB+MHgwZjsKKwl9IGVsc2UgeworCQlpbnQgcmVxdWVzdGVkX3NpemUgPSBmbXQtPmZtdC5waXgud2lkdGggKiBmbXQtPmZtdC5waXguaGVpZ2h0OworCQlpbnQgc2Vuc29yX3NpemUgPSBzZW5zb3Jfd2lkdGggKiBzZW5zb3JfaGVpZ2h0OworCisJCWlmICg2NCAqIHJlcXVlc3RlZF9zaXplIDwgOSAqIHNlbnNvcl9zaXplKSB7CisJCQl3aWR0aCA9IHNlbnNvcl93aWR0aCAvIDQ7CisJCQloZWlnaHQgPSBzZW5zb3JfaGVpZ2h0IC8gNDsKKwkJfSBlbHNlIGlmICg2NCAqIHJlcXVlc3RlZF9zaXplIDwgMzYgKiBzZW5zb3Jfc2l6ZSkgeworCQkJd2lkdGggPSBzZW5zb3Jfd2lkdGggLyAyOworCQkJaGVpZ2h0ID0gc2Vuc29yX2hlaWdodCAvIDI7CisJCX0gZWxzZSB7CisJCQl3aWR0aCA9IHNlbnNvcl93aWR0aDsKKwkJCWhlaWdodCA9IHNlbnNvcl9oZWlnaHQ7CisJCX0KKwkJd2lkdGggJj0gfjB4ZjsKKwkJaGVpZ2h0ICY9IH4weGY7CisJfQorCisJaWYgKGZtdCAhPSBOVUxMKSB7CisJCXUzMiBwaXhlbGZvcm1hdCA9IGZtdC0+Zm10LnBpeC5waXhlbGZvcm1hdDsKKworCQltZW1zZXQoZm10LCAwLCBzaXplb2YoKmZtdCkpOworCQlmbXQtPnR5cGUgPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU7CisJCWZtdC0+Zm10LnBpeC53aWR0aCA9IHdpZHRoOworCQlmbXQtPmZtdC5waXguaGVpZ2h0ID0gaGVpZ2h0OworCQlmbXQtPmZtdC5waXgucGl4ZWxmb3JtYXQgPSBwaXhlbGZvcm1hdDsKKwkJZm10LT5mbXQucGl4LmZpZWxkID0gVjRMMl9GSUVMRF9OT05FOworCQlmbXQtPmZtdC5waXguYnl0ZXNwZXJsaW5lID0gMDsKKwkJZm10LT5mbXQucGl4LnNpemVpbWFnZSA9IEdPNzAwN19CVUZfU0laRTsKKwkJZm10LT5mbXQucGl4LmNvbG9yc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfU01QVEUxNzBNOyAvKiA/PyAqLworCX0KKworCWlmICh0cnkpCisJCXJldHVybiAwOworCisJZ28tPndpZHRoID0gd2lkdGg7CisJZ28tPmhlaWdodCA9IGhlaWdodDsKKwlnby0+ZW5jb2Rlcl9oX29mZnNldCA9IGdvLT5ib2FyZF9pbmZvLT5zZW5zb3JfaF9vZmZzZXQ7CisJZ28tPmVuY29kZXJfdl9vZmZzZXQgPSBnby0+Ym9hcmRfaW5mby0+c2Vuc29yX3Zfb2Zmc2V0OworCWZvciAoaSA9IDA7IGkgPCA0OyArK2kpCisJCWdvLT5tb2RldFtpXS5lbmFibGUgPSAwOworCWZvciAoaSA9IDA7IGkgPCAxNjI0OyArK2kpCisJCWdvLT5tb2RldF9tYXBbaV0gPSAwOworCisJaWYgKGdvLT5ib2FyZF9pbmZvLT5zZW5zb3JfZmxhZ3MgJiBHTzcwMDdfU0VOU09SX1NDQUxJTkcpIHsKKwkJc3RydWN0IHZpZGVvX2RlY29kZXJfcmVzb2x1dGlvbiByZXM7CisKKwkJcmVzLndpZHRoID0gd2lkdGg7CisJCWlmIChoZWlnaHQgPiBzZW5zb3JfaGVpZ2h0IC8gMikgeworCQkJcmVzLmhlaWdodCA9IGhlaWdodCAvIDI7CisJCQlnby0+ZW5jb2Rlcl92X2hhbHZlID0gMDsKKwkJfSBlbHNlIHsKKwkJCXJlcy5oZWlnaHQgPSBoZWlnaHQ7CisJCQlnby0+ZW5jb2Rlcl92X2hhbHZlID0gMTsKKwkJfQorCQlpZiAoZ28tPmkyY19hZGFwdGVyX29ubGluZSkKKwkJCWkyY19jbGllbnRzX2NvbW1hbmQoJmdvLT5pMmNfYWRhcHRlciwKKwkJCQkJREVDT0RFUl9TRVRfUkVTT0xVVElPTiwgJnJlcyk7CisJfSBlbHNlIHsKKwkJaWYgKHdpZHRoIDw9IHNlbnNvcl93aWR0aCAvIDQpIHsKKwkJCWdvLT5lbmNvZGVyX2hfaGFsdmUgPSAxOworCQkJZ28tPmVuY29kZXJfdl9oYWx2ZSA9IDE7CisJCQlnby0+ZW5jb2Rlcl9zdWJzYW1wbGUgPSAxOworCQl9IGVsc2UgaWYgKHdpZHRoIDw9IHNlbnNvcl93aWR0aCAvIDIpIHsKKwkJCWdvLT5lbmNvZGVyX2hfaGFsdmUgPSAxOworCQkJZ28tPmVuY29kZXJfdl9oYWx2ZSA9IDE7CisJCQlnby0+ZW5jb2Rlcl9zdWJzYW1wbGUgPSAwOworCQl9IGVsc2UgeworCQkJZ28tPmVuY29kZXJfaF9oYWx2ZSA9IDA7CisJCQlnby0+ZW5jb2Rlcl92X2hhbHZlID0gMDsKKwkJCWdvLT5lbmNvZGVyX3N1YnNhbXBsZSA9IDA7CisJCX0KKwl9CisKKwlpZiAoZm10ID09IE5VTEwpCisJCXJldHVybiAwOworCisJc3dpdGNoIChmbXQtPmZtdC5waXgucGl4ZWxmb3JtYXQpIHsKKwljYXNlIFY0TDJfUElYX0ZNVF9NUEVHOgorCQlpZiAoZ28tPmZvcm1hdCA9PSBHTzcwMDdfRk9STUFUX01QRUcxIHx8CisJCQkJZ28tPmZvcm1hdCA9PSBHTzcwMDdfRk9STUFUX01QRUcyIHx8CisJCQkJZ28tPmZvcm1hdCA9PSBHTzcwMDdfRk9STUFUX01QRUc0KQorCQkJYnJlYWs7CisJCWdvLT5mb3JtYXQgPSBHTzcwMDdfRk9STUFUX01QRUcxOworCQlnby0+cGFsaSA9IDA7CisJCWdvLT5hc3BlY3RfcmF0aW8gPSBHTzcwMDdfUkFUSU9fMV8xOworCQlnby0+Z29wX3NpemUgPSBnby0+c2Vuc29yX2ZyYW1lcmF0ZSAvIDEwMDA7CisJCWdvLT5pcGIgPSAwOworCQlnby0+Y2xvc2VkX2dvcCA9IDE7CisJCWdvLT5yZXBlYXRfc2VxaGVhZCA9IDE7CisJCWdvLT5zZXFfaGVhZGVyX2VuYWJsZSA9IDE7CisJCWdvLT5nb3BfaGVhZGVyX2VuYWJsZSA9IDE7CisJCWdvLT5kdmRfbW9kZSA9IDA7CisJCWJyZWFrOworCS8qIEJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IG9ubHkhICovCisJY2FzZSBWNEwyX1BJWF9GTVRfTVBFRzQ6CisJCWlmIChnby0+Zm9ybWF0ID09IEdPNzAwN19GT1JNQVRfTVBFRzQpCisJCQlicmVhazsKKwkJZ28tPmZvcm1hdCA9IEdPNzAwN19GT1JNQVRfTVBFRzQ7CisJCWdvLT5wYWxpID0gMHhmNTsKKwkJZ28tPmFzcGVjdF9yYXRpbyA9IEdPNzAwN19SQVRJT18xXzE7CisJCWdvLT5nb3Bfc2l6ZSA9IGdvLT5zZW5zb3JfZnJhbWVyYXRlIC8gMTAwMDsKKwkJZ28tPmlwYiA9IDA7CisJCWdvLT5jbG9zZWRfZ29wID0gMTsKKwkJZ28tPnJlcGVhdF9zZXFoZWFkID0gMTsKKwkJZ28tPnNlcV9oZWFkZXJfZW5hYmxlID0gMTsKKwkJZ28tPmdvcF9oZWFkZXJfZW5hYmxlID0gMTsKKwkJZ28tPmR2ZF9tb2RlID0gMDsKKwkJYnJlYWs7CisJY2FzZSBWNEwyX1BJWF9GTVRfTUpQRUc6CisJCWdvLT5mb3JtYXQgPSBHTzcwMDdfRk9STUFUX01KUEVHOworCQlnby0+cGFsaSA9IDA7CisJCWdvLT5hc3BlY3RfcmF0aW8gPSBHTzcwMDdfUkFUSU9fMV8xOworCQlnby0+Z29wX3NpemUgPSAwOworCQlnby0+aXBiID0gMDsKKwkJZ28tPmNsb3NlZF9nb3AgPSAwOworCQlnby0+cmVwZWF0X3NlcWhlYWQgPSAwOworCQlnby0+c2VxX2hlYWRlcl9lbmFibGUgPSAwOworCQlnby0+Z29wX2hlYWRlcl9lbmFibGUgPSAwOworCQlnby0+ZHZkX21vZGUgPSAwOworCQlicmVhazsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY2xpcF90b19tb2RldF9tYXAoc3RydWN0IGdvNzAwNyAqZ28sIGludCByZWdpb24sCisJCXN0cnVjdCB2NGwyX2NsaXAgKmNsaXBfbGlzdCkKK3sKKwlzdHJ1Y3QgdjRsMl9jbGlwIGNsaXAsICpjbGlwX3B0cjsKKwlpbnQgeCwgeSwgbWJudW07CisKKwkvKiBDaGVjayBpZiBjb29yZGluYXRlcyBhcmUgT0sgYW5kIGlmIGFueSBtYWNyb2Jsb2NrcyBhcmUgYWxyZWFkeQorCSAqIHVzZWQgYnkgb3RoZXIgcmVnaW9ucyAoYmVzaWRlcyAwKSAqLworCWNsaXBfcHRyID0gY2xpcF9saXN0OworCXdoaWxlIChjbGlwX3B0cikgeworCQlpZiAoY29weV9mcm9tX3VzZXIoJmNsaXAsIGNsaXBfcHRyLCBzaXplb2YoY2xpcCkpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisJCWlmIChjbGlwLmMubGVmdCA8IDAgfHwgKGNsaXAuYy5sZWZ0ICYgMHhGKSB8fAorCQkJCWNsaXAuYy53aWR0aCA8PSAwIHx8IChjbGlwLmMud2lkdGggJiAweEYpKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCWlmIChjbGlwLmMubGVmdCArIGNsaXAuYy53aWR0aCA+IGdvLT53aWR0aCkKKwkJCXJldHVybiAtRUlOVkFMOworCQlpZiAoY2xpcC5jLnRvcCA8IDAgfHwgKGNsaXAuYy50b3AgJiAweEYpIHx8CisJCQkJY2xpcC5jLmhlaWdodCA8PSAwIHx8IChjbGlwLmMuaGVpZ2h0ICYgMHhGKSkKKwkJCXJldHVybiAtRUlOVkFMOworCQlpZiAoY2xpcC5jLnRvcCArIGNsaXAuYy5oZWlnaHQgPiBnby0+aGVpZ2h0KQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCWZvciAoeSA9IDA7IHkgPCBjbGlwLmMuaGVpZ2h0OyB5ICs9IDE2KQorCQkJZm9yICh4ID0gMDsgeCA8IGNsaXAuYy53aWR0aDsgeCArPSAxNikgeworCQkJCW1ibnVtID0gKGdvLT53aWR0aCA+PiA0KSAqCisJCQkJCQkoKGNsaXAuYy50b3AgKyB5KSA+PiA0KSArCisJCQkJCSgoY2xpcC5jLmxlZnQgKyB4KSA+PiA0KTsKKwkJCQlpZiAoZ28tPm1vZGV0X21hcFttYm51bV0gIT0gMCAmJgorCQkJCQkJZ28tPm1vZGV0X21hcFttYm51bV0gIT0gcmVnaW9uKQorCQkJCQlyZXR1cm4gLUVCVVNZOworCQkJfQorCQljbGlwX3B0ciA9IGNsaXAubmV4dDsKKwl9CisKKwkvKiBDbGVhciBvbGQgcmVnaW9uIG1hY3JvYmxvY2tzICovCisJZm9yIChtYm51bSA9IDA7IG1ibnVtIDwgMTYyNDsgKyttYm51bSkKKwkJaWYgKGdvLT5tb2RldF9tYXBbbWJudW1dID09IHJlZ2lvbikKKwkJCWdvLT5tb2RldF9tYXBbbWJudW1dID0gMDsKKworCS8qIENsYWltIG1hY3JvYmxvY2tzIGluIHRoaXMgbGlzdCAqLworCWNsaXBfcHRyID0gY2xpcF9saXN0OworCXdoaWxlIChjbGlwX3B0cikgeworCQlpZiAoY29weV9mcm9tX3VzZXIoJmNsaXAsIGNsaXBfcHRyLCBzaXplb2YoY2xpcCkpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisJCWZvciAoeSA9IDA7IHkgPCBjbGlwLmMuaGVpZ2h0OyB5ICs9IDE2KQorCQkJZm9yICh4ID0gMDsgeCA8IGNsaXAuYy53aWR0aDsgeCArPSAxNikgeworCQkJCW1ibnVtID0gKGdvLT53aWR0aCA+PiA0KSAqCisJCQkJCQkoKGNsaXAuYy50b3AgKyB5KSA+PiA0KSArCisJCQkJCSgoY2xpcC5jLmxlZnQgKyB4KSA+PiA0KTsKKwkJCQlnby0+bW9kZXRfbWFwW21ibnVtXSA9IHJlZ2lvbjsKKwkJCX0KKwkJY2xpcF9wdHIgPSBjbGlwLm5leHQ7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGdvNzAwN19kb19pb2N0bChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJdW5zaWduZWQgaW50IGNtZCwgdm9pZCAqYXJnKQoreworCXN0cnVjdCBnbzcwMDdfZmlsZSAqZ29maCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgZ283MDA3ICpnbyA9IGdvZmgtPmdvOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHJldHZhbCA9IDA7CisKKwlzd2l0Y2ggKGNtZCkgeworCWNhc2UgVklESU9DX1FVRVJZQ0FQOgorCXsKKwkJc3RydWN0IHY0bDJfY2FwYWJpbGl0eSAqY2FwID0gYXJnOworCisJCW1lbXNldChjYXAsIDAsIHNpemVvZigqY2FwKSk7CisJCXN0cmNweShjYXAtPmRyaXZlciwgImdvNzAwNyIpOworCQlzdHJuY3B5KGNhcC0+Y2FyZCwgZ28tPm5hbWUsIHNpemVvZihjYXAtPmNhcmQpKTsKKwkJY2FwLT52ZXJzaW9uID0gS0VSTkVMX1ZFUlNJT04oMCwgOSwgOCk7CisJCWNhcC0+Y2FwYWJpbGl0aWVzID0gVjRMMl9DQVBfVklERU9fQ0FQVFVSRSB8CisJCQkJVjRMMl9DQVBfU1RSRUFNSU5HOyAvKiB8IFY0TDJfQ0FQX0FVRElPOyAqLworCQlpZiAoZ28tPmJvYXJkX2luZm8tPmZsYWdzICYgR083MDA3X0JPQVJEX0hBU19UVU5FUikKKwkJCWNhcC0+Y2FwYWJpbGl0aWVzIHw9IFY0TDJfQ0FQX1RVTkVSOworCQlyZXR1cm4gMDsKKwl9CisJY2FzZSBWSURJT0NfRU5VTV9GTVQ6CisJeworCQlzdHJ1Y3QgdjRsMl9mbXRkZXNjICpmbXQgPSBhcmc7CisJCXVuc2lnbmVkIGludCBpbmRleDsKKwkJY2hhciAqZGVzYzsKKwkJdTMyIHBpeGVsZm9ybWF0OworCisJCWlmIChmbXQtPnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCXN3aXRjaCAoZm10LT5pbmRleCkgeworCQljYXNlIDA6CisJCQlwaXhlbGZvcm1hdCA9IFY0TDJfUElYX0ZNVF9NSlBFRzsKKwkJCWRlc2MgPSAiTW90aW9uLUpQRUciOworCQkJYnJlYWs7CisJCWNhc2UgMToKKwkJCXBpeGVsZm9ybWF0ID0gVjRMMl9QSVhfRk1UX01QRUc7CisJCQlkZXNjID0gIk1QRUcxL01QRUcyL01QRUc0IjsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwkJaW5kZXggPSBmbXQtPmluZGV4OworCQltZW1zZXQoZm10LCAwLCBzaXplb2YoKmZtdCkpOworCQlmbXQtPmluZGV4ID0gaW5kZXg7CisJCWZtdC0+dHlwZSA9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRTsKKwkJZm10LT5mbGFncyA9IFY0TDJfRk1UX0ZMQUdfQ09NUFJFU1NFRDsKKwkJc3RybmNweShmbXQtPmRlc2NyaXB0aW9uLCBkZXNjLCBzaXplb2YoZm10LT5kZXNjcmlwdGlvbikpOworCQlmbXQtPnBpeGVsZm9ybWF0ID0gcGl4ZWxmb3JtYXQ7CisKKwkJcmV0dXJuIDA7CisJfQorCWNhc2UgVklESU9DX1RSWV9GTVQ6CisJeworCQlzdHJ1Y3QgdjRsMl9mb3JtYXQgKmZtdCA9IGFyZzsKKworCQlpZiAoZm10LT50eXBlICE9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSkKKwkJCXJldHVybiAtRUlOVkFMOworCQlyZXR1cm4gc2V0X2NhcHR1cmVfc2l6ZShnbywgZm10LCAxKTsKKwl9CisJY2FzZSBWSURJT0NfR19GTVQ6CisJeworCQlzdHJ1Y3QgdjRsMl9mb3JtYXQgKmZtdCA9IGFyZzsKKworCQlpZiAoZm10LT50eXBlICE9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSkKKwkJCXJldHVybiAtRUlOVkFMOworCQltZW1zZXQoZm10LCAwLCBzaXplb2YoKmZtdCkpOworCQlmbXQtPnR5cGUgPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU7CisJCWZtdC0+Zm10LnBpeC53aWR0aCA9IGdvLT53aWR0aDsKKwkJZm10LT5mbXQucGl4LmhlaWdodCA9IGdvLT5oZWlnaHQ7CisJCWZtdC0+Zm10LnBpeC5waXhlbGZvcm1hdCA9IGdvLT5mb3JtYXQgPT0gR083MDA3X0ZPUk1BVF9NSlBFRyA/CisJCQlWNEwyX1BJWF9GTVRfTUpQRUcgOiBWNEwyX1BJWF9GTVRfTVBFRzsKKwkJZm10LT5mbXQucGl4LmZpZWxkID0gVjRMMl9GSUVMRF9OT05FOworCQlmbXQtPmZtdC5waXguYnl0ZXNwZXJsaW5lID0gMDsKKwkJZm10LT5mbXQucGl4LnNpemVpbWFnZSA9IEdPNzAwN19CVUZfU0laRTsKKwkJZm10LT5mbXQucGl4LmNvbG9yc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfU01QVEUxNzBNOyAvKiA/PyAqLworCQlyZXR1cm4gMDsKKwl9CisJY2FzZSBWSURJT0NfU19GTVQ6CisJeworCQlzdHJ1Y3QgdjRsMl9mb3JtYXQgKmZtdCA9IGFyZzsKKworCQlpZiAoZm10LT50eXBlICE9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSkKKwkJCXJldHVybiAtRUlOVkFMOworCQlpZiAoZ28tPnN0cmVhbWluZykKKwkJCXJldHVybiAtRUJVU1k7CisJCXJldHVybiBzZXRfY2FwdHVyZV9zaXplKGdvLCBmbXQsIDApOworCX0KKwljYXNlIFZJRElPQ19HX0ZCVUY6CisJY2FzZSBWSURJT0NfU19GQlVGOgorCQlyZXR1cm4gLUVJTlZBTDsKKwljYXNlIFZJRElPQ19SRVFCVUZTOgorCXsKKwkJc3RydWN0IHY0bDJfcmVxdWVzdGJ1ZmZlcnMgKnJlcSA9IGFyZzsKKwkJdW5zaWduZWQgaW50IGNvdW50LCBpOworCisJCWlmIChnby0+c3RyZWFtaW5nKQorCQkJcmV0dXJuIC1FQlVTWTsKKwkJaWYgKHJlcS0+dHlwZSAhPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUgfHwKKwkJCQlyZXEtPm1lbW9yeSAhPSBWNEwyX01FTU9SWV9NTUFQKQorCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJZG93bigmZ29maC0+bG9jayk7CisJCXJldHZhbCA9IC1FQlVTWTsKKwkJZm9yIChpID0gMDsgaSA8IGdvZmgtPmJ1Zl9jb3VudDsgKytpKQorCQkJaWYgKGdvZmgtPmJ1ZnNbaV0ubWFwcGVkID4gMCkKKwkJCQlnb3RvIHVubG9ja19hbmRfcmV0dXJuOworCQlkb3duKCZnby0+aHdfbG9jayk7CisJCWlmIChnby0+aW5fdXNlID4gMCAmJiBnb2ZoLT5idWZfY291bnQgPT0gMCkgeworCQkJdXAoJmdvLT5od19sb2NrKTsKKwkJCWdvdG8gdW5sb2NrX2FuZF9yZXR1cm47CisJCX0KKwkJaWYgKGdvZmgtPmJ1Zl9jb3VudCA+IDApCisJCQlrZnJlZShnb2ZoLT5idWZzKTsKKwkJcmV0dmFsID0gLUVOT01FTTsKKwkJY291bnQgPSByZXEtPmNvdW50OworCQlpZiAoY291bnQgPiAwKSB7CisJCQlpZiAoY291bnQgPCAyKQorCQkJCWNvdW50ID0gMjsKKwkJCWlmIChjb3VudCA+IDMyKQorCQkJCWNvdW50ID0gMzI7CisJCQlnb2ZoLT5idWZzID0ga21hbGxvYyhjb3VudCAqCisJCQkJCQlzaXplb2Yoc3RydWN0IGdvNzAwN19idWZmZXIpLAorCQkJCQlHRlBfS0VSTkVMKTsKKwkJCWlmIChnb2ZoLT5idWZzID09IE5VTEwpIHsKKwkJCQl1cCgmZ28tPmh3X2xvY2spOworCQkJCWdvdG8gdW5sb2NrX2FuZF9yZXR1cm47CisJCQl9CisJCQltZW1zZXQoZ29maC0+YnVmcywgMCwKKwkJCQkJY291bnQgKiBzaXplb2Yoc3RydWN0IGdvNzAwN19idWZmZXIpKTsKKwkJCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7CisJCQkJZ29maC0+YnVmc1tpXS5nbyA9IGdvOworCQkJCWdvZmgtPmJ1ZnNbaV0uaW5kZXggPSBpOworCQkJCWdvZmgtPmJ1ZnNbaV0uc3RhdGUgPSBCVUZfU1RBVEVfSURMRTsKKwkJCQlnb2ZoLT5idWZzW2ldLm1hcHBlZCA9IDA7CisJCQl9CisJCQlnby0+aW5fdXNlID0gMTsKKwkJfSBlbHNlIHsKKwkJCWdvLT5pbl91c2UgPSAwOworCQl9CisJCWdvZmgtPmJ1Zl9jb3VudCA9IGNvdW50OworCQl1cCgmZ28tPmh3X2xvY2spOworCQl1cCgmZ29maC0+bG9jayk7CisJCW1lbXNldChyZXEsIDAsIHNpemVvZigqcmVxKSk7CisJCXJlcS0+Y291bnQgPSBjb3VudDsKKwkJcmVxLT50eXBlID0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOworCQlyZXEtPm1lbW9yeSA9IFY0TDJfTUVNT1JZX01NQVA7CisJCXJldHVybiAwOworCX0KKwljYXNlIFZJRElPQ19RVUVSWUJVRjoKKwl7CisJCXN0cnVjdCB2NGwyX2J1ZmZlciAqYnVmID0gYXJnOworCQl1bnNpZ25lZCBpbnQgaW5kZXg7CisKKwkJcmV0dmFsID0gLUVJTlZBTDsKKwkJaWYgKGJ1Zi0+dHlwZSAhPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJaW5kZXggPSBidWYtPmluZGV4OworCQlkb3duKCZnb2ZoLT5sb2NrKTsKKwkJaWYgKGluZGV4ID49IGdvZmgtPmJ1Zl9jb3VudCkKKwkJCWdvdG8gdW5sb2NrX2FuZF9yZXR1cm47CisJCW1lbXNldChidWYsIDAsIHNpemVvZigqYnVmKSk7CisJCWJ1Zi0+aW5kZXggPSBpbmRleDsKKwkJYnVmLT50eXBlID0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOworCQlzd2l0Y2ggKGdvZmgtPmJ1ZnNbaW5kZXhdLnN0YXRlKSB7CisJCWNhc2UgQlVGX1NUQVRFX1FVRVVFRDoKKwkJCWJ1Zi0+ZmxhZ3MgPSBWNEwyX0JVRl9GTEFHX1FVRVVFRDsKKwkJCWJyZWFrOworCQljYXNlIEJVRl9TVEFURV9ET05FOgorCQkJYnVmLT5mbGFncyA9IFY0TDJfQlVGX0ZMQUdfRE9ORTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJYnVmLT5mbGFncyA9IDA7CisJCX0KKwkJaWYgKGdvZmgtPmJ1ZnNbaW5kZXhdLm1hcHBlZCkKKwkJCWJ1Zi0+ZmxhZ3MgfD0gVjRMMl9CVUZfRkxBR19NQVBQRUQ7CisJCWJ1Zi0+bWVtb3J5ID0gVjRMMl9NRU1PUllfTU1BUDsKKwkJYnVmLT5tLm9mZnNldCA9IGluZGV4ICogR083MDA3X0JVRl9TSVpFOworCQlidWYtPmxlbmd0aCA9IEdPNzAwN19CVUZfU0laRTsKKwkJdXAoJmdvZmgtPmxvY2spOworCisJCXJldHVybiAwOworCX0KKwljYXNlIFZJRElPQ19RQlVGOgorCXsKKwkJc3RydWN0IHY0bDJfYnVmZmVyICpidWYgPSBhcmc7CisJCXN0cnVjdCBnbzcwMDdfYnVmZmVyICpnb2J1ZjsKKwkJaW50IHJldDsKKworCQlyZXR2YWwgPSAtRUlOVkFMOworCQlpZiAoYnVmLT50eXBlICE9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSB8fAorCQkJCWJ1Zi0+bWVtb3J5ICE9IFY0TDJfTUVNT1JZX01NQVApCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJZG93bigmZ29maC0+bG9jayk7CisJCWlmIChidWYtPmluZGV4IDwgMCB8fCBidWYtPmluZGV4ID49IGdvZmgtPmJ1Zl9jb3VudCkKKwkJCWdvdG8gdW5sb2NrX2FuZF9yZXR1cm47CisJCWdvYnVmID0gJmdvZmgtPmJ1ZnNbYnVmLT5pbmRleF07CisJCWlmIChnb2J1Zi0+bWFwcGVkID09IDApCisJCQlnb3RvIHVubG9ja19hbmRfcmV0dXJuOworCQlyZXR2YWwgPSAtRUJVU1k7CisJCWlmIChnb2J1Zi0+c3RhdGUgIT0gQlVGX1NUQVRFX0lETEUpCisJCQlnb3RvIHVubG9ja19hbmRfcmV0dXJuOworCQkvKiBvZmZzZXQgd2lsbCBiZSAwIHVudGlsIHdlIHJlYWxseSBzdXBwb3J0IFVTRVJQVFIgc3RyZWFtaW5nICovCisJCWdvYnVmLT5vZmZzZXQgPSBnb2J1Zi0+dXNlcl9hZGRyICYgflBBR0VfTUFTSzsKKwkJZ29idWYtPmJ5dGVzdXNlZCA9IDA7CisJCWdvYnVmLT5mcmFtZV9vZmZzZXQgPSAwOworCQlnb2J1Zi0+bW9kZXRfYWN0aXZlID0gMDsKKwkJaWYgKGdvYnVmLT5vZmZzZXQgPiAwKQorCQkJZ29idWYtPnBhZ2VfY291bnQgPSBHTzcwMDdfQlVGX1BBR0VTICsgMTsKKwkJZWxzZQorCQkJZ29idWYtPnBhZ2VfY291bnQgPSBHTzcwMDdfQlVGX1BBR0VTOworCQlyZXR2YWwgPSAtRU5PTUVNOworCQlkb3duX3JlYWQoJmN1cnJlbnQtPm1tLT5tbWFwX3NlbSk7CisJCXJldCA9IGdldF91c2VyX3BhZ2VzKGN1cnJlbnQsIGN1cnJlbnQtPm1tLAorCQkJCWdvYnVmLT51c2VyX2FkZHIgJiBQQUdFX01BU0ssIGdvYnVmLT5wYWdlX2NvdW50LAorCQkJCTEsIDEsIGdvYnVmLT5wYWdlcywgTlVMTCk7CisJCXVwX3JlYWQoJmN1cnJlbnQtPm1tLT5tbWFwX3NlbSk7CisJCWlmIChyZXQgIT0gZ29idWYtPnBhZ2VfY291bnQpIHsKKwkJCWludCBpOworCQkJZm9yIChpID0gMDsgaSA8IHJldDsgKytpKQorCQkJCXBhZ2VfY2FjaGVfcmVsZWFzZShnb2J1Zi0+cGFnZXNbaV0pOworCQkJZ29idWYtPnBhZ2VfY291bnQgPSAwOworCQkJZ290byB1bmxvY2tfYW5kX3JldHVybjsKKwkJfQorCQlnb2J1Zi0+c3RhdGUgPSBCVUZfU1RBVEVfUVVFVUVEOworCQlzcGluX2xvY2tfaXJxc2F2ZSgmZ28tPnNwaW5sb2NrLCBmbGFncyk7CisJCWxpc3RfYWRkX3RhaWwoJmdvYnVmLT5zdHJlYW0sICZnby0+c3RyZWFtKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZ28tPnNwaW5sb2NrLCBmbGFncyk7CisJCXVwKCZnb2ZoLT5sb2NrKTsKKwkJcmV0dXJuIDA7CisJfQorCWNhc2UgVklESU9DX0RRQlVGOgorCXsKKwkJc3RydWN0IHY0bDJfYnVmZmVyICpidWYgPSBhcmc7CisJCXN0cnVjdCBnbzcwMDdfYnVmZmVyICpnb2J1ZjsKKwkJdTMyIGZyYW1lX3R5cGVfZmxhZzsKKwkJREVGSU5FX1dBSVQod2FpdCk7CisKKwkJaWYgKGJ1Zi0+dHlwZSAhPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJaWYgKGJ1Zi0+bWVtb3J5ICE9IFY0TDJfTUVNT1JZX01NQVApCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJZG93bigmZ29maC0+bG9jayk7CisJCXJldHZhbCA9IC1FSU5WQUw7CisJCWlmIChsaXN0X2VtcHR5KCZnby0+c3RyZWFtKSkKKwkJCWdvdG8gdW5sb2NrX2FuZF9yZXR1cm47CisJCWdvYnVmID0gbGlzdF9lbnRyeShnby0+c3RyZWFtLm5leHQsCisJCQkJc3RydWN0IGdvNzAwN19idWZmZXIsIHN0cmVhbSk7CisJCXJldHZhbCA9IC1FQUdBSU47CisJCWlmIChnb2J1Zi0+c3RhdGUgIT0gQlVGX1NUQVRFX0RPTkUgJiYKKwkJCQkhKGZpbGUtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKSkgeworCQkJZm9yICg7OykgeworCQkJCXByZXBhcmVfdG9fd2FpdCgmZ28tPmZyYW1lX3dhaXRxLCAmd2FpdCwKKwkJCQkJCVRBU0tfSU5URVJSVVBUSUJMRSk7CisJCQkJaWYgKGdvYnVmLT5zdGF0ZSA9PSBCVUZfU1RBVEVfRE9ORSkKKwkJCQkJYnJlYWs7CisJCQkJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSB7CisJCQkJCXJldHZhbCA9IC1FUkVTVEFSVFNZUzsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJCXNjaGVkdWxlKCk7CisJCQl9CisJCQlmaW5pc2hfd2FpdCgmZ28tPmZyYW1lX3dhaXRxLCAmd2FpdCk7CisJCX0KKwkJaWYgKGdvYnVmLT5zdGF0ZSAhPSBCVUZfU1RBVEVfRE9ORSkKKwkJCWdvdG8gdW5sb2NrX2FuZF9yZXR1cm47CisJCXNwaW5fbG9ja19pcnFzYXZlKCZnby0+c3BpbmxvY2ssIGZsYWdzKTsKKwkJZGVhY3RpdmF0ZV9idWZmZXIoZ29idWYpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZnby0+c3BpbmxvY2ssIGZsYWdzKTsKKwkJZnJhbWVfdHlwZV9mbGFnID0gZ2V0X2ZyYW1lX3R5cGVfZmxhZyhnb2J1ZiwgZ28tPmZvcm1hdCk7CisJCWdvYnVmLT5zdGF0ZSA9IEJVRl9TVEFURV9JRExFOworCQltZW1zZXQoYnVmLCAwLCBzaXplb2YoKmJ1ZikpOworCQlidWYtPmluZGV4ID0gZ29idWYtPmluZGV4OworCQlidWYtPnR5cGUgPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU7CisJCWJ1Zi0+Ynl0ZXN1c2VkID0gZ29idWYtPmJ5dGVzdXNlZDsKKwkJYnVmLT5mbGFncyA9IFY0TDJfQlVGX0ZMQUdfTUFQUEVEIHwgZnJhbWVfdHlwZV9mbGFnOworCQlidWYtPmZpZWxkID0gVjRMMl9GSUVMRF9OT05FOworCQlidWYtPnRpbWVzdGFtcCA9IGdvYnVmLT50aW1lc3RhbXA7CisJCWJ1Zi0+c2VxdWVuY2UgPSBnb2J1Zi0+c2VxOworCQlidWYtPm1lbW9yeSA9IFY0TDJfTUVNT1JZX01NQVA7CisJCWJ1Zi0+bS5vZmZzZXQgPSBnb2J1Zi0+aW5kZXggKiBHTzcwMDdfQlVGX1NJWkU7CisJCWJ1Zi0+bGVuZ3RoID0gR083MDA3X0JVRl9TSVpFOworCQlidWYtPnJlc2VydmVkID0gZ29idWYtPm1vZGV0X2FjdGl2ZTsKKwkJdXAoJmdvZmgtPmxvY2spOworCQlyZXR1cm4gMDsKKwl9CisJY2FzZSBWSURJT0NfU1RSRUFNT046CisJeworCQl1bnNpZ25lZCBpbnQgKnR5cGUgPSBhcmc7CisKKwkJaWYgKCp0eXBlICE9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSkKKwkJCXJldHVybiAtRUlOVkFMOworCQlkb3duKCZnb2ZoLT5sb2NrKTsKKwkJZG93bigmZ28tPmh3X2xvY2spOworCQlpZiAoIWdvLT5zdHJlYW1pbmcpIHsKKwkJCWdvLT5zdHJlYW1pbmcgPSAxOworCQkJZ28tPm5leHRfc2VxID0gMDsKKwkJCWdvLT5hY3RpdmVfYnVmID0gTlVMTDsKKwkJCWlmIChnbzcwMDdfc3RhcnRfZW5jb2RlcihnbykgPCAwKQorCQkJCXJldHZhbCA9IC1FSU87CisJCQllbHNlCisJCQkJcmV0dmFsID0gMDsKKwkJfQorCQl1cCgmZ28tPmh3X2xvY2spOworCQl1cCgmZ29maC0+bG9jayk7CisJCXJldHVybiByZXR2YWw7CisJfQorCWNhc2UgVklESU9DX1NUUkVBTU9GRjoKKwl7CisJCXVuc2lnbmVkIGludCAqdHlwZSA9IGFyZzsKKworCQlpZiAoKnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCWRvd24oJmdvZmgtPmxvY2spOworCQlnbzcwMDdfc3RyZWFtb2ZmKGdvKTsKKwkJdXAoJmdvZmgtPmxvY2spOworCQlyZXR1cm4gMDsKKwl9CisJY2FzZSBWSURJT0NfUVVFUllDVFJMOgorCXsKKwkJc3RydWN0IHY0bDJfcXVlcnljdHJsICpjdHJsID0gYXJnOworCQl1MzIgaWQ7CisKKwkJaWYgKCFnby0+aTJjX2FkYXB0ZXJfb25saW5lKQorCQkJcmV0dXJuIC1FSU87CisJCWlkID0gY3RybC0+aWQ7CisJCW1lbXNldChjdHJsLCAwLCBzaXplb2YoKmN0cmwpKTsKKwkJY3RybC0+aWQgPSBpZDsKKwkJaTJjX2NsaWVudHNfY29tbWFuZCgmZ28tPmkyY19hZGFwdGVyLCBWSURJT0NfUVVFUllDVFJMLCBhcmcpOworCQlyZXR1cm4gY3RybC0+bmFtZVswXSA9PSAwID8gLUVJTlZBTCA6IDA7CisJfQorCWNhc2UgVklESU9DX0dfQ1RSTDoKKwl7CisJCXN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwgPSBhcmc7CisJCXN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCBxdWVyeTsKKworCQlpZiAoIWdvLT5pMmNfYWRhcHRlcl9vbmxpbmUpCisJCQlyZXR1cm4gLUVJTzsKKwkJbWVtc2V0KCZxdWVyeSwgMCwgc2l6ZW9mKHF1ZXJ5KSk7CisJCXF1ZXJ5LmlkID0gY3RybC0+aWQ7CisJCWkyY19jbGllbnRzX2NvbW1hbmQoJmdvLT5pMmNfYWRhcHRlciwgVklESU9DX1FVRVJZQ1RSTCwgJnF1ZXJ5KTsKKwkJaWYgKHF1ZXJ5Lm5hbWVbMF0gPT0gMCkKKwkJCXJldHVybiAtRUlOVkFMOworCQlpMmNfY2xpZW50c19jb21tYW5kKCZnby0+aTJjX2FkYXB0ZXIsIFZJRElPQ19HX0NUUkwsIGFyZyk7CisJCXJldHVybiAwOworCX0KKwljYXNlIFZJRElPQ19TX0NUUkw6CisJeworCQlzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsID0gYXJnOworCQlzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgcXVlcnk7CisKKwkJaWYgKCFnby0+aTJjX2FkYXB0ZXJfb25saW5lKQorCQkJcmV0dXJuIC1FSU87CisJCW1lbXNldCgmcXVlcnksIDAsIHNpemVvZihxdWVyeSkpOworCQlxdWVyeS5pZCA9IGN0cmwtPmlkOworCQlpMmNfY2xpZW50c19jb21tYW5kKCZnby0+aTJjX2FkYXB0ZXIsIFZJRElPQ19RVUVSWUNUUkwsICZxdWVyeSk7CisJCWlmIChxdWVyeS5uYW1lWzBdID09IDApCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJaTJjX2NsaWVudHNfY29tbWFuZCgmZ28tPmkyY19hZGFwdGVyLCBWSURJT0NfU19DVFJMLCBhcmcpOworCQlyZXR1cm4gMDsKKwl9CisJY2FzZSBWSURJT0NfR19QQVJNOgorCXsKKwkJc3RydWN0IHY0bDJfc3RyZWFtcGFybSAqcGFybSA9IGFyZzsKKwkJc3RydWN0IHY0bDJfZnJhY3QgdGltZXBlcmZyYW1lID0geworCQkJLm51bWVyYXRvciA9IDEwMDEgKiAgZ28tPmZwc19zY2FsZSwKKwkJCS5kZW5vbWluYXRvciA9IGdvLT5zZW5zb3JfZnJhbWVyYXRlLAorCQl9OworCisJCWlmIChwYXJtLT50eXBlICE9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSkKKwkJCXJldHVybiAtRUlOVkFMOworCQltZW1zZXQocGFybSwgMCwgc2l6ZW9mKCpwYXJtKSk7CisJCXBhcm0tPnR5cGUgPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU7CisJCXBhcm0tPnBhcm0uY2FwdHVyZS5jYXBhYmlsaXR5IHw9IFY0TDJfQ0FQX1RJTUVQRVJGUkFNRTsKKwkJcGFybS0+cGFybS5jYXB0dXJlLnRpbWVwZXJmcmFtZSA9IHRpbWVwZXJmcmFtZTsKKwkJcmV0dXJuIDA7CisJfQorCWNhc2UgVklESU9DX1NfUEFSTToKKwl7CisJCXN0cnVjdCB2NGwyX3N0cmVhbXBhcm0gKnBhcm0gPSBhcmc7CisJCXVuc2lnbmVkIGludCBuLCBkOworCisJCWlmIChwYXJtLT50eXBlICE9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSkKKwkJCXJldHVybiAtRUlOVkFMOworCQlpZiAocGFybS0+cGFybS5jYXB0dXJlLmNhcHR1cmVtb2RlICE9IDApCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJbiA9IGdvLT5zZW5zb3JfZnJhbWVyYXRlICoKKwkJCXBhcm0tPnBhcm0uY2FwdHVyZS50aW1lcGVyZnJhbWUubnVtZXJhdG9yOworCQlkID0gMTAwMSAqIHBhcm0tPnBhcm0uY2FwdHVyZS50aW1lcGVyZnJhbWUuZGVub21pbmF0b3I7CisJCWlmIChuICE9IDAgJiYgZCAhPSAwICYmIG4gPiBkKQorCQkJZ28tPmZwc19zY2FsZSA9IChuICsgZC8yKSAvIGQ7CisJCWVsc2UKKwkJCWdvLT5mcHNfc2NhbGUgPSAxOworCQlyZXR1cm4gMDsKKwl9CisJY2FzZSBWSURJT0NfRU5VTVNURDoKKwl7CisJCXN0cnVjdCB2NGwyX3N0YW5kYXJkICpzdGQgPSBhcmc7CisKKwkJaWYgKChnby0+Ym9hcmRfaW5mby0+ZmxhZ3MgJiBHTzcwMDdfQk9BUkRfSEFTX1RVTkVSKSAmJgorCQkJCWdvLT5pbnB1dCA9PSBnby0+Ym9hcmRfaW5mby0+bnVtX2lucHV0cyAtIDEpIHsKKwkJCWlmICghZ28tPmkyY19hZGFwdGVyX29ubGluZSkKKwkJCQlyZXR1cm4gLUVJTzsKKwkJCWkyY19jbGllbnRzX2NvbW1hbmQoJmdvLT5pMmNfYWRhcHRlciwKKwkJCQkJCVZJRElPQ19FTlVNU1RELCBhcmcpOworCQkJaWYgKCFzdGQtPmlkKSAvKiBoYWNrIHRvIGluZGljYXRlIEVJTlZBTCBmcm9tIHR1bmVyICovCisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0gZWxzZSBpZiAoZ28tPmJvYXJkX2luZm8tPnNlbnNvcl9mbGFncyAmIEdPNzAwN19TRU5TT1JfVFYpIHsKKwkJCXN3aXRjaCAoc3RkLT5pbmRleCkgeworCQkJY2FzZSAwOgorCQkJCXY0bDJfdmlkZW9fc3RkX2NvbnN0cnVjdChzdGQsCisJCQkJCQlWNEwyX1NURF9OVFNDLCAiTlRTQyIpOworCQkJCWJyZWFrOworCQkJY2FzZSAxOgorCQkJCXY0bDJfdmlkZW9fc3RkX2NvbnN0cnVjdChzdGQsCisJCQkJCQlWNEwyX1NURF9QQUwgfCBWNEwyX1NURF9TRUNBTSwKKwkJCQkJCSJQQUwvU0VDQU0iKTsKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQl9CisJCX0gZWxzZSB7CisJCQlpZiAoc3RkLT5pbmRleCAhPSAwKQorCQkJCXJldHVybiAtRUlOVkFMOworCQkJbWVtc2V0KHN0ZCwgMCwgc2l6ZW9mKCpzdGQpKTsKKwkJCXNucHJpbnRmKHN0ZC0+bmFtZSwgc2l6ZW9mKHN0ZC0+bmFtZSksICIlZHglZCwgJWRmcHMiLAorCQkJCWdvLT5ib2FyZF9pbmZvLT5zZW5zb3Jfd2lkdGgsCisJCQkJZ28tPmJvYXJkX2luZm8tPnNlbnNvcl9oZWlnaHQsCisJCQkJZ28tPmJvYXJkX2luZm8tPnNlbnNvcl9mcmFtZXJhdGUgLyAxMDAwKTsKKwkJCXN0ZC0+ZnJhbWVwZXJpb2QubnVtZXJhdG9yID0gMTAwMTsKKwkJCXN0ZC0+ZnJhbWVwZXJpb2QuZGVub21pbmF0b3IgPQorCQkJCQlnby0+Ym9hcmRfaW5mby0+c2Vuc29yX2ZyYW1lcmF0ZTsKKwkJfQorCQlyZXR1cm4gMDsKKwl9CisJY2FzZSBWSURJT0NfR19TVEQ6CisJeworCQl2NGwyX3N0ZF9pZCAqc3RkID0gYXJnOworCisJCWlmICgoZ28tPmJvYXJkX2luZm8tPmZsYWdzICYgR083MDA3X0JPQVJEX0hBU19UVU5FUikgJiYKKwkJCQlnby0+aW5wdXQgPT0gZ28tPmJvYXJkX2luZm8tPm51bV9pbnB1dHMgLSAxKSB7CisJCQlpZiAoIWdvLT5pMmNfYWRhcHRlcl9vbmxpbmUpCisJCQkJcmV0dXJuIC1FSU87CisJCQlpMmNfY2xpZW50c19jb21tYW5kKCZnby0+aTJjX2FkYXB0ZXIsCisJCQkJCQlWSURJT0NfR19TVEQsIGFyZyk7CisJCX0gZWxzZSBpZiAoZ28tPmJvYXJkX2luZm8tPnNlbnNvcl9mbGFncyAmIEdPNzAwN19TRU5TT1JfVFYpIHsKKwkJCWlmIChnby0+c3RhbmRhcmQgPT0gR083MDA3X1NURF9OVFNDKQorCQkJCSpzdGQgPSBWNEwyX1NURF9OVFNDOworCQkJZWxzZQorCQkJCSpzdGQgPSBWNEwyX1NURF9QQUwgfCBWNEwyX1NURF9TRUNBTTsKKwkJfSBlbHNlCisJCQkqc3RkID0gMDsKKwkJcmV0dXJuIDA7CisJfQorCWNhc2UgVklESU9DX1NfU1REOgorCXsKKwkJdjRsMl9zdGRfaWQgKnN0ZCA9IGFyZzsKKworCQlpZiAoZ28tPnN0cmVhbWluZykKKwkJCXJldHVybiAtRUJVU1k7CisJCWlmICghKGdvLT5ib2FyZF9pbmZvLT5zZW5zb3JfZmxhZ3MgJiBHTzcwMDdfU0VOU09SX1RWKSAmJgorCQkJCSpzdGQgIT0gMCkKKwkJCXJldHVybiAtRUlOVkFMOworCQlpZiAoKnN0ZCA9PSAwKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCWlmICgoZ28tPmJvYXJkX2luZm8tPmZsYWdzICYgR083MDA3X0JPQVJEX0hBU19UVU5FUikgJiYKKwkJCQlnby0+aW5wdXQgPT0gZ28tPmJvYXJkX2luZm8tPm51bV9pbnB1dHMgLSAxKSB7CisJCQlpZiAoIWdvLT5pMmNfYWRhcHRlcl9vbmxpbmUpCisJCQkJcmV0dXJuIC1FSU87CisJCQlpMmNfY2xpZW50c19jb21tYW5kKCZnby0+aTJjX2FkYXB0ZXIsCisJCQkJCQlWSURJT0NfU19TVEQsIGFyZyk7CisJCQlpZiAoISpzdGQpIC8qIGhhY2sgdG8gaW5kaWNhdGUgRUlOVkFMIGZyb20gdHVuZXIgKi8KKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCQlpZiAoKnN0ZCAmIFY0TDJfU1REX05UU0MpIHsKKwkJCWdvLT5zdGFuZGFyZCA9IEdPNzAwN19TVERfTlRTQzsKKwkJCWdvLT5zZW5zb3JfZnJhbWVyYXRlID0gMzAwMDA7CisJCX0gZWxzZSBpZiAoKnN0ZCAmIFY0TDJfU1REX1BBTCkgeworCQkJZ28tPnN0YW5kYXJkID0gR083MDA3X1NURF9QQUw7CisJCQlnby0+c2Vuc29yX2ZyYW1lcmF0ZSA9IDI1MDI1OworCQl9IGVsc2UgaWYgKCpzdGQgJiBWNEwyX1NURF9TRUNBTSkgeworCQkJZ28tPnN0YW5kYXJkID0gR083MDA3X1NURF9QQUw7CisJCQlnby0+c2Vuc29yX2ZyYW1lcmF0ZSA9IDI1MDI1OworCQl9IGVsc2UKKwkJCXJldHVybiAtRUlOVkFMOworCQlpZiAoZ28tPmkyY19hZGFwdGVyX29ubGluZSkKKwkJCWkyY19jbGllbnRzX2NvbW1hbmQoJmdvLT5pMmNfYWRhcHRlciwKKwkJCQkJICAgIFZJRElPQ19TX1NURCwgc3RkKTsKKwkJc2V0X2NhcHR1cmVfc2l6ZShnbywgTlVMTCwgMCk7CisJCXJldHVybiAwOworCX0KKwljYXNlIFZJRElPQ19RVUVSWVNURDoKKwl7CisJCXY0bDJfc3RkX2lkICpzdGQgPSBhcmc7CisKKwkJaWYgKChnby0+Ym9hcmRfaW5mby0+ZmxhZ3MgJiBHTzcwMDdfQk9BUkRfSEFTX1RVTkVSKSAmJgorCQkJCWdvLT5pbnB1dCA9PSBnby0+Ym9hcmRfaW5mby0+bnVtX2lucHV0cyAtIDEpIHsKKwkJCWlmICghZ28tPmkyY19hZGFwdGVyX29ubGluZSkKKwkJCQlyZXR1cm4gLUVJTzsKKwkJCWkyY19jbGllbnRzX2NvbW1hbmQoJmdvLT5pMmNfYWRhcHRlciwKKwkJCQkJCVZJRElPQ19RVUVSWVNURCwgYXJnKTsKKwkJfSBlbHNlIGlmIChnby0+Ym9hcmRfaW5mby0+c2Vuc29yX2ZsYWdzICYgR083MDA3X1NFTlNPUl9UVikKKwkJCSpzdGQgPSBWNEwyX1NURF9OVFNDIHwgVjRMMl9TVERfUEFMIHwgVjRMMl9TVERfU0VDQU07CisJCWVsc2UKKwkJCSpzdGQgPSAwOworCQlyZXR1cm4gMDsKKwl9CisJY2FzZSBWSURJT0NfRU5VTUlOUFVUOgorCXsKKwkJc3RydWN0IHY0bDJfaW5wdXQgKmlucCA9IGFyZzsKKwkJaW50IGluZGV4OworCisJCWlmIChpbnAtPmluZGV4ID49IGdvLT5ib2FyZF9pbmZvLT5udW1faW5wdXRzKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCWluZGV4ID0gaW5wLT5pbmRleDsKKwkJbWVtc2V0KGlucCwgMCwgc2l6ZW9mKCppbnApKTsKKwkJaW5wLT5pbmRleCA9IGluZGV4OworCQlzdHJuY3B5KGlucC0+bmFtZSwgZ28tPmJvYXJkX2luZm8tPmlucHV0c1tpbmRleF0ubmFtZSwKKwkJCQlzaXplb2YoaW5wLT5uYW1lKSk7CisJCS8qIElmIHRoaXMgYm9hcmQgaGFzIGEgdHVuZXIsIGl0IHdpbGwgYmUgdGhlIGxhc3QgaW5wdXQgKi8KKwkJaWYgKChnby0+Ym9hcmRfaW5mby0+ZmxhZ3MgJiBHTzcwMDdfQk9BUkRfSEFTX1RVTkVSKSAmJgorCQkJCWluZGV4ID09IGdvLT5ib2FyZF9pbmZvLT5udW1faW5wdXRzIC0gMSkKKwkJCWlucC0+dHlwZSA9IFY0TDJfSU5QVVRfVFlQRV9UVU5FUjsKKwkJZWxzZQorCQkJaW5wLT50eXBlID0gVjRMMl9JTlBVVF9UWVBFX0NBTUVSQTsKKwkJaW5wLT5hdWRpb3NldCA9IDA7CisJCWlucC0+dHVuZXIgPSAwOworCQlpZiAoZ28tPmJvYXJkX2luZm8tPnNlbnNvcl9mbGFncyAmIEdPNzAwN19TRU5TT1JfVFYpCisJCQlpbnAtPnN0ZCA9IFY0TDJfU1REX05UU0MgfCBWNEwyX1NURF9QQUwgfAorCQkJCQkJCVY0TDJfU1REX1NFQ0FNOworCQllbHNlCisJCQlpbnAtPnN0ZCA9IDA7CisJCXJldHVybiAwOworCX0KKwljYXNlIFZJRElPQ19HX0lOUFVUOgorCXsKKwkJaW50ICppbnB1dCA9IGFyZzsKKworCQkqaW5wdXQgPSBnby0+aW5wdXQ7CisJCXJldHVybiAwOworCX0KKwljYXNlIFZJRElPQ19TX0lOUFVUOgorCXsKKwkJaW50ICppbnB1dCA9IGFyZzsKKworCQlpZiAoKmlucHV0ID49IGdvLT5ib2FyZF9pbmZvLT5udW1faW5wdXRzKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCWlmIChnby0+c3RyZWFtaW5nKQorCQkJcmV0dXJuIC1FQlVTWTsKKwkJZ28tPmlucHV0ID0gKmlucHV0OworCQlpZiAoZ28tPmkyY19hZGFwdGVyX29ubGluZSkgeworCQkJaTJjX2NsaWVudHNfY29tbWFuZCgmZ28tPmkyY19hZGFwdGVyLCBWSURJT0NfU19JTlBVVCwKKwkJCQkmZ28tPmJvYXJkX2luZm8tPmlucHV0c1sqaW5wdXRdLnZpZGVvX2lucHV0KTsKKwkJCWkyY19jbGllbnRzX2NvbW1hbmQoJmdvLT5pMmNfYWRhcHRlciwgVklESU9DX1NfQVVESU8sCisJCQkJJmdvLT5ib2FyZF9pbmZvLT5pbnB1dHNbKmlucHV0XS5hdWRpb19pbnB1dCk7CisJCX0KKwkJcmV0dXJuIDA7CisJfQorCWNhc2UgVklESU9DX0dfVFVORVI6CisJeworCQlzdHJ1Y3QgdjRsMl90dW5lciAqdCA9IGFyZzsKKworCQlpZiAoIShnby0+Ym9hcmRfaW5mby0+ZmxhZ3MgJiBHTzcwMDdfQk9BUkRfSEFTX1RVTkVSKSkKKwkJCXJldHVybiAtRUlOVkFMOworCQlpZiAodC0+aW5kZXggIT0gMCkKKwkJCXJldHVybiAtRUlOVkFMOworCQlpZiAoIWdvLT5pMmNfYWRhcHRlcl9vbmxpbmUpCisJCQlyZXR1cm4gLUVJTzsKKwkJaTJjX2NsaWVudHNfY29tbWFuZCgmZ28tPmkyY19hZGFwdGVyLCBWSURJT0NfR19UVU5FUiwgYXJnKTsKKwkJdC0+aW5kZXggPSAwOworCQlyZXR1cm4gMDsKKwl9CisJY2FzZSBWSURJT0NfU19UVU5FUjoKKwl7CisJCXN0cnVjdCB2NGwyX3R1bmVyICp0ID0gYXJnOworCisJCWlmICghKGdvLT5ib2FyZF9pbmZvLT5mbGFncyAmIEdPNzAwN19CT0FSRF9IQVNfVFVORVIpKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCWlmICh0LT5pbmRleCAhPSAwKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCWlmICghZ28tPmkyY19hZGFwdGVyX29ubGluZSkKKwkJCXJldHVybiAtRUlPOworCQlzd2l0Y2ggKGdvLT5ib2FyZF9pZCkgeworCQljYXNlIEdPNzAwN19CT0FSRElEX1BYX1RWNDAyVV9OQToKKwkJY2FzZSBHTzcwMDdfQk9BUkRJRF9QWF9UVjQwMlVfSlA6CisJCQkvKiBObyBzZWxlY3RhYmxlIG9wdGlvbnMgY3VycmVudGx5ICovCisJCQlpZiAodC0+YXVkbW9kZSAhPSBWNEwyX1RVTkVSX01PREVfU1RFUkVPKQorCQkJCXJldHVybiAtRUlOVkFMOworCQkJYnJlYWs7CisJCX0KKwkJaTJjX2NsaWVudHNfY29tbWFuZCgmZ28tPmkyY19hZGFwdGVyLCBWSURJT0NfU19UVU5FUiwgYXJnKTsKKwkJcmV0dXJuIDA7CisJfQorCWNhc2UgVklESU9DX0dfRlJFUVVFTkNZOgorCXsKKwkJc3RydWN0IHY0bDJfZnJlcXVlbmN5ICpmID0gYXJnOworCisJCWlmICghKGdvLT5ib2FyZF9pbmZvLT5mbGFncyAmIEdPNzAwN19CT0FSRF9IQVNfVFVORVIpKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCWlmICghZ28tPmkyY19hZGFwdGVyX29ubGluZSkKKwkJCXJldHVybiAtRUlPOworCQltZW1zZXQoZiwgMCwgc2l6ZW9mKCpmKSk7CisJCWYtPnR5cGUgPSBWNEwyX1RVTkVSX0FOQUxPR19UVjsKKwkJaTJjX2NsaWVudHNfY29tbWFuZCgmZ28tPmkyY19hZGFwdGVyLCBWSURJT0NfR19GUkVRVUVOQ1ksIGFyZyk7CisJCXJldHVybiAwOworCX0KKwljYXNlIFZJRElPQ19TX0ZSRVFVRU5DWToKKwl7CisJCWlmICghKGdvLT5ib2FyZF9pbmZvLT5mbGFncyAmIEdPNzAwN19CT0FSRF9IQVNfVFVORVIpKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCWlmICghZ28tPmkyY19hZGFwdGVyX29ubGluZSkKKwkJCXJldHVybiAtRUlPOworCQlpMmNfY2xpZW50c19jb21tYW5kKCZnby0+aTJjX2FkYXB0ZXIsIFZJRElPQ19TX0ZSRVFVRU5DWSwgYXJnKTsKKwkJcmV0dXJuIDA7CisJfQorCWNhc2UgVklESU9DX0NST1BDQVA6CisJeworCQlzdHJ1Y3QgdjRsMl9jcm9wY2FwICpjcm9wY2FwID0gYXJnOworCisJCWlmIChjcm9wY2FwLT50eXBlICE9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSkKKwkJCXJldHVybiAtRUlOVkFMOworCQltZW1zZXQoY3JvcGNhcCwgMCwgc2l6ZW9mKCpjcm9wY2FwKSk7CisJCWNyb3BjYXAtPnR5cGUgPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU7CisJCS8qIFRoZXNlIHNwZWNpZnkgdGhlIHJhdyBpbnB1dCBvZiB0aGUgc2Vuc29yICovCisJCXN3aXRjaCAoZ28tPnN0YW5kYXJkKSB7CisJCWNhc2UgR083MDA3X1NURF9OVFNDOgorCQkJY3JvcGNhcC0+Ym91bmRzLnRvcCA9IDA7CisJCQljcm9wY2FwLT5ib3VuZHMubGVmdCA9IDA7CisJCQljcm9wY2FwLT5ib3VuZHMud2lkdGggPSA3MjA7CisJCQljcm9wY2FwLT5ib3VuZHMuaGVpZ2h0ID0gNDgwOworCQkJY3JvcGNhcC0+ZGVmcmVjdC50b3AgPSAwOworCQkJY3JvcGNhcC0+ZGVmcmVjdC5sZWZ0ID0gMDsKKwkJCWNyb3BjYXAtPmRlZnJlY3Qud2lkdGggPSA3MjA7CisJCQljcm9wY2FwLT5kZWZyZWN0LmhlaWdodCA9IDQ4MDsKKwkJCWJyZWFrOworCQljYXNlIEdPNzAwN19TVERfUEFMOgorCQkJY3JvcGNhcC0+Ym91bmRzLnRvcCA9IDA7CisJCQljcm9wY2FwLT5ib3VuZHMubGVmdCA9IDA7CisJCQljcm9wY2FwLT5ib3VuZHMud2lkdGggPSA3MjA7CisJCQljcm9wY2FwLT5ib3VuZHMuaGVpZ2h0ID0gNTc2OworCQkJY3JvcGNhcC0+ZGVmcmVjdC50b3AgPSAwOworCQkJY3JvcGNhcC0+ZGVmcmVjdC5sZWZ0ID0gMDsKKwkJCWNyb3BjYXAtPmRlZnJlY3Qud2lkdGggPSA3MjA7CisJCQljcm9wY2FwLT5kZWZyZWN0LmhlaWdodCA9IDU3NjsKKwkJCWJyZWFrOworCQljYXNlIEdPNzAwN19TVERfT1RIRVI6CisJCQljcm9wY2FwLT5ib3VuZHMudG9wID0gMDsKKwkJCWNyb3BjYXAtPmJvdW5kcy5sZWZ0ID0gMDsKKwkJCWNyb3BjYXAtPmJvdW5kcy53aWR0aCA9IGdvLT5ib2FyZF9pbmZvLT5zZW5zb3Jfd2lkdGg7CisJCQljcm9wY2FwLT5ib3VuZHMuaGVpZ2h0ID0gZ28tPmJvYXJkX2luZm8tPnNlbnNvcl9oZWlnaHQ7CisJCQljcm9wY2FwLT5kZWZyZWN0LnRvcCA9IDA7CisJCQljcm9wY2FwLT5kZWZyZWN0LmxlZnQgPSAwOworCQkJY3JvcGNhcC0+ZGVmcmVjdC53aWR0aCA9IGdvLT5ib2FyZF9pbmZvLT5zZW5zb3Jfd2lkdGg7CisJCQljcm9wY2FwLT5kZWZyZWN0LmhlaWdodCA9IGdvLT5ib2FyZF9pbmZvLT5zZW5zb3JfaGVpZ2h0OworCQkJYnJlYWs7CisJCX0KKworCQlyZXR1cm4gMDsKKwl9CisJY2FzZSBWSURJT0NfR19DUk9QOgorCXsKKwkJc3RydWN0IHY0bDJfY3JvcCAqY3JvcCA9IGFyZzsKKworCQlpZiAoY3JvcC0+dHlwZSAhPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJbWVtc2V0KGNyb3AsIDAsIHNpemVvZigqY3JvcCkpOworCQljcm9wLT50eXBlID0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOworCQkvKiBUaGVzZSBzcGVjaWZ5IHRoZSByYXcgaW5wdXQgb2YgdGhlIHNlbnNvciAqLworCQlzd2l0Y2ggKGdvLT5zdGFuZGFyZCkgeworCQljYXNlIEdPNzAwN19TVERfTlRTQzoKKwkJCWNyb3AtPmMudG9wID0gMDsKKwkJCWNyb3AtPmMubGVmdCA9IDA7CisJCQljcm9wLT5jLndpZHRoID0gNzIwOworCQkJY3JvcC0+Yy5oZWlnaHQgPSA0ODA7CisJCQlicmVhazsKKwkJY2FzZSBHTzcwMDdfU1REX1BBTDoKKwkJCWNyb3AtPmMudG9wID0gMDsKKwkJCWNyb3AtPmMubGVmdCA9IDA7CisJCQljcm9wLT5jLndpZHRoID0gNzIwOworCQkJY3JvcC0+Yy5oZWlnaHQgPSA1NzY7CisJCQlicmVhazsKKwkJY2FzZSBHTzcwMDdfU1REX09USEVSOgorCQkJY3JvcC0+Yy50b3AgPSAwOworCQkJY3JvcC0+Yy5sZWZ0ID0gMDsKKwkJCWNyb3AtPmMud2lkdGggPSBnby0+Ym9hcmRfaW5mby0+c2Vuc29yX3dpZHRoOworCQkJY3JvcC0+Yy5oZWlnaHQgPSBnby0+Ym9hcmRfaW5mby0+c2Vuc29yX2hlaWdodDsKKwkJCWJyZWFrOworCQl9CisKKwkJcmV0dXJuIDA7CisJfQorCWNhc2UgVklESU9DX1NfQ1JPUDoKKwl7CisJCXN0cnVjdCB2NGwyX2Nyb3AgKmNyb3AgPSBhcmc7CisKKwkJaWYgKGNyb3AtPnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCXJldHVybiAwOworCX0KKwljYXNlIFZJRElPQ19HX0pQRUdDT01QOgorCXsKKwkJc3RydWN0IHY0bDJfanBlZ2NvbXByZXNzaW9uICpwYXJhbXMgPSBhcmc7CisKKwkJbWVtc2V0KHBhcmFtcywgMCwgc2l6ZW9mKCpwYXJhbXMpKTsKKwkJcGFyYW1zLT5xdWFsaXR5ID0gNTA7IC8qID8/ICovCisJCXBhcmFtcy0+anBlZ19tYXJrZXJzID0gVjRMMl9KUEVHX01BUktFUl9ESFQgfAorCQkJCQlWNEwyX0pQRUdfTUFSS0VSX0RRVDsKKworCQlyZXR1cm4gMDsKKwl9CisJY2FzZSBWSURJT0NfU19KUEVHQ09NUDoKKwl7CisJCXN0cnVjdCB2NGwyX2pwZWdjb21wcmVzc2lvbiAqcGFyYW1zID0gYXJnOworCisJCWlmIChwYXJhbXMtPnF1YWxpdHkgIT0gNTAgfHwKKwkJCQlwYXJhbXMtPmpwZWdfbWFya2VycyAhPSAoVjRMMl9KUEVHX01BUktFUl9ESFQgfAorCQkJCQkJCVY0TDJfSlBFR19NQVJLRVJfRFFUKSkKKwkJCXJldHVybiAtRUlOVkFMOworCQlyZXR1cm4gMDsKKwl9CisJLyogVGVtcG9yYXJ5IGlvY3RscyBmb3IgY29udHJvbGxpbmcgY29tcHJlc3Npb24gY2hhcmFjdGVyaXN0aWNzICovCisJY2FzZSBHTzcwMDdJT0NfU19CSVRSQVRFOgorCXsKKwkJaW50ICpiaXRyYXRlID0gYXJnOworCisJCWlmIChnby0+c3RyZWFtaW5nKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCS8qIFVwcGVyIGJvdW5kIGlzIGtpbmQgb2YgYXJiaXRyYXJ5IGhlcmUgKi8KKwkJaWYgKCpiaXRyYXRlIDwgNjQwMDAgfHwgKmJpdHJhdGUgPiAxMDAwMDAwMCkKKwkJCXJldHVybiAtRUlOVkFMOworCQlnby0+Yml0cmF0ZSA9ICpiaXRyYXRlOworCQlyZXR1cm4gMDsKKwl9CisJY2FzZSBHTzcwMDdJT0NfR19CSVRSQVRFOgorCXsKKwkJaW50ICpiaXRyYXRlID0gYXJnOworCisJCSpiaXRyYXRlID0gZ28tPmJpdHJhdGU7CisJCXJldHVybiAwOworCX0KKwljYXNlIEdPNzAwN0lPQ19TX0NPTVBfUEFSQU1TOgorCXsKKwkJc3RydWN0IGdvNzAwN19jb21wX3BhcmFtcyAqY29tcCA9IGFyZzsKKworCQlpZiAoZ28tPmZvcm1hdCA9PSBHTzcwMDdfRk9STUFUX01KUEVHKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCWlmIChjb21wLT5nb3Bfc2l6ZSA+IDApCisJCQlnby0+Z29wX3NpemUgPSBjb21wLT5nb3Bfc2l6ZTsKKwkJZWxzZQorCQkJZ28tPmdvcF9zaXplID0gZ28tPnNlbnNvcl9mcmFtZXJhdGUgLyAxMDAwOworCQlpZiAoZ28tPmdvcF9zaXplICE9IDE1KQorCQkJZ28tPmR2ZF9tb2RlID0gMDsKKwkJLypnby0+aXBiID0gY29tcC0+bWF4X2JfZnJhbWVzID4gMDsqLyAvKiBjb21wbGV0ZWx5IHVudGVzdGVkICovCisJCWlmIChnby0+Ym9hcmRfaW5mby0+c2Vuc29yX2ZsYWdzICYgR083MDA3X1NFTlNPUl9UVikgeworCQkJc3dpdGNoIChjb21wLT5hc3BlY3RfcmF0aW8pIHsKKwkJCWNhc2UgR083MDA3X0FTUEVDVF9SQVRJT180XzNfTlRTQzoKKwkJCWNhc2UgR083MDA3X0FTUEVDVF9SQVRJT180XzNfUEFMOgorCQkJCWdvLT5hc3BlY3RfcmF0aW8gPSBHTzcwMDdfUkFUSU9fNF8zOworCQkJCWJyZWFrOworCQkJY2FzZSBHTzcwMDdfQVNQRUNUX1JBVElPXzE2XzlfTlRTQzoKKwkJCWNhc2UgR083MDA3X0FTUEVDVF9SQVRJT18xNl85X1BBTDoKKwkJCQlnby0+YXNwZWN0X3JhdGlvID0gR083MDA3X1JBVElPXzE2Xzk7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCWdvLT5hc3BlY3RfcmF0aW8gPSBHTzcwMDdfUkFUSU9fMV8xOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJCWlmIChjb21wLT5mbGFncyAmIEdPNzAwN19DT01QX09NSVRfU0VRX0hFQURFUikgeworCQkJZ28tPmR2ZF9tb2RlID0gMDsKKwkJCWdvLT5zZXFfaGVhZGVyX2VuYWJsZSA9IDA7CisJCX0gZWxzZSB7CisJCQlnby0+c2VxX2hlYWRlcl9lbmFibGUgPSAxOworCQl9CisJCS8qIGZhbGwtdGhyb3VnaCAqLworCX0KKwljYXNlIEdPNzAwN0lPQ19HX0NPTVBfUEFSQU1TOgorCXsKKwkJc3RydWN0IGdvNzAwN19jb21wX3BhcmFtcyAqY29tcCA9IGFyZzsKKworCQlpZiAoZ28tPmZvcm1hdCA9PSBHTzcwMDdfRk9STUFUX01KUEVHKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCW1lbXNldChjb21wLCAwLCBzaXplb2YoKmNvbXApKTsKKwkJY29tcC0+Z29wX3NpemUgPSBnby0+Z29wX3NpemU7CisJCWNvbXAtPm1heF9iX2ZyYW1lcyA9IGdvLT5pcGIgPyAyIDogMDsKKwkJc3dpdGNoIChnby0+YXNwZWN0X3JhdGlvKSB7CisJCWNhc2UgR083MDA3X1JBVElPXzRfMzoKKwkJCWlmIChnby0+c3RhbmRhcmQgPT0gR083MDA3X1NURF9OVFNDKQorCQkJCWNvbXAtPmFzcGVjdF9yYXRpbyA9CisJCQkJCUdPNzAwN19BU1BFQ1RfUkFUSU9fNF8zX05UU0M7CisJCQllbHNlCisJCQkJY29tcC0+YXNwZWN0X3JhdGlvID0KKwkJCQkJR083MDA3X0FTUEVDVF9SQVRJT180XzNfUEFMOworCQkJYnJlYWs7CisJCWNhc2UgR083MDA3X1JBVElPXzE2Xzk6CisJCQlpZiAoZ28tPnN0YW5kYXJkID09IEdPNzAwN19TVERfTlRTQykKKwkJCQljb21wLT5hc3BlY3RfcmF0aW8gPQorCQkJCQlHTzcwMDdfQVNQRUNUX1JBVElPXzE2XzlfTlRTQzsKKwkJCWVsc2UKKwkJCQljb21wLT5hc3BlY3RfcmF0aW8gPQorCQkJCQlHTzcwMDdfQVNQRUNUX1JBVElPXzE2XzlfUEFMOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQljb21wLT5hc3BlY3RfcmF0aW8gPSBHTzcwMDdfQVNQRUNUX1JBVElPXzFfMTsKKwkJCWJyZWFrOworCQl9CisJCWlmIChnby0+Y2xvc2VkX2dvcCkKKwkJCWNvbXAtPmZsYWdzIHw9IEdPNzAwN19DT01QX0NMT1NFRF9HT1A7CisJCWlmICghZ28tPnNlcV9oZWFkZXJfZW5hYmxlKQorCQkJY29tcC0+ZmxhZ3MgfD0gR083MDA3X0NPTVBfT01JVF9TRVFfSEVBREVSOworCQlyZXR1cm4gMDsKKwl9CisJY2FzZSBHTzcwMDdJT0NfU19NUEVHX1BBUkFNUzoKKwl7CisJCXN0cnVjdCBnbzcwMDdfbXBlZ19wYXJhbXMgKm1wZWcgPSBhcmc7CisKKwkJaWYgKGdvLT5mb3JtYXQgIT0gR083MDA3X0ZPUk1BVF9NUEVHMSAmJgorCQkJCWdvLT5mb3JtYXQgIT0gR083MDA3X0ZPUk1BVF9NUEVHMiAmJgorCQkJCWdvLT5mb3JtYXQgIT0gR083MDA3X0ZPUk1BVF9NUEVHNCkKKwkJCXJldHVybiAtRUlOVkFMOworCisJCWlmIChtcGVnLT5mbGFncyAmIEdPNzAwN19NUEVHX0ZPUkNFX0RWRF9NT0RFKSB7CisJCQlnby0+Zm9ybWF0ID0gR083MDA3X0ZPUk1BVF9NUEVHMjsKKwkJCWdvLT5iaXRyYXRlID0gOTgwMDAwMDsKKwkJCWdvLT5nb3Bfc2l6ZSA9IDE1OworCQkJZ28tPnBhbGkgPSAweDQ4OworCQkJZ28tPmNsb3NlZF9nb3AgPSAxOworCQkJZ28tPnJlcGVhdF9zZXFoZWFkID0gMDsKKwkJCWdvLT5zZXFfaGVhZGVyX2VuYWJsZSA9IDE7CisJCQlnby0+Z29wX2hlYWRlcl9lbmFibGUgPSAxOworCQkJZ28tPmR2ZF9tb2RlID0gMTsKKwkJfSBlbHNlIHsKKwkJCXN3aXRjaCAobXBlZy0+bXBlZ192aWRlb19zdGFuZGFyZCkgeworCQkJY2FzZSBHTzcwMDdfTVBFR19WSURFT19NUEVHMToKKwkJCQlnby0+Zm9ybWF0ID0gR083MDA3X0ZPUk1BVF9NUEVHMTsKKwkJCQlnby0+cGFsaSA9IDA7CisJCQkJYnJlYWs7CisJCQljYXNlIEdPNzAwN19NUEVHX1ZJREVPX01QRUcyOgorCQkJCWdvLT5mb3JtYXQgPSBHTzcwMDdfRk9STUFUX01QRUcyOworCQkJCWlmIChtcGVnLT5wYWxpID4+IDI0ID09IDIpCisJCQkJCWdvLT5wYWxpID0gbXBlZy0+cGFsaSAmIDB4ZmY7CisJCQkJZWxzZQorCQkJCQlnby0+cGFsaSA9IDB4NDg7CisJCQkJYnJlYWs7CisJCQljYXNlIEdPNzAwN19NUEVHX1ZJREVPX01QRUc0OgorCQkJCWdvLT5mb3JtYXQgPSBHTzcwMDdfRk9STUFUX01QRUc0OworCQkJCWlmIChtcGVnLT5wYWxpID4+IDI0ID09IDQpCisJCQkJCWdvLT5wYWxpID0gbXBlZy0+cGFsaSAmIDB4ZmY7CisJCQkJZWxzZQorCQkJCQlnby0+cGFsaSA9IDB4ZjU7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCXJldHVybiAtRUlOVkFMOworCQkJfQorCQkJZ28tPmdvcF9oZWFkZXJfZW5hYmxlID0KKwkJCQltcGVnLT5mbGFncyAmIEdPNzAwN19NUEVHX09NSVRfR09QX0hFQURFUgorCQkJCT8gMCA6IDE7CisJCQlpZiAobXBlZy0+ZmxhZ3MgJiBHTzcwMDdfTVBFR19SRVBFQVRfU0VRSEVBREVSKQorCQkJCWdvLT5yZXBlYXRfc2VxaGVhZCA9IDE7CisJCQllbHNlCisJCQkJZ28tPnJlcGVhdF9zZXFoZWFkID0gMDsKKwkJCWdvLT5kdmRfbW9kZSA9IDA7CisJCX0KKwkJLyogZmFsbC10aHJvdWdoICovCisJfQorCWNhc2UgR083MDA3SU9DX0dfTVBFR19QQVJBTVM6CisJeworCQlzdHJ1Y3QgZ283MDA3X21wZWdfcGFyYW1zICptcGVnID0gYXJnOworCisJCW1lbXNldChtcGVnLCAwLCBzaXplb2YoKm1wZWcpKTsKKwkJc3dpdGNoIChnby0+Zm9ybWF0KSB7CisJCWNhc2UgR083MDA3X0ZPUk1BVF9NUEVHMToKKwkJCW1wZWctPm1wZWdfdmlkZW9fc3RhbmRhcmQgPSBHTzcwMDdfTVBFR19WSURFT19NUEVHMTsKKwkJCW1wZWctPnBhbGkgPSAwOworCQkJYnJlYWs7CisJCWNhc2UgR083MDA3X0ZPUk1BVF9NUEVHMjoKKwkJCW1wZWctPm1wZWdfdmlkZW9fc3RhbmRhcmQgPSBHTzcwMDdfTVBFR19WSURFT19NUEVHMjsKKwkJCW1wZWctPnBhbGkgPSBHTzcwMDdfTVBFR19QUk9GSUxFKDIsIGdvLT5wYWxpKTsKKwkJCWJyZWFrOworCQljYXNlIEdPNzAwN19GT1JNQVRfTVBFRzQ6CisJCQltcGVnLT5tcGVnX3ZpZGVvX3N0YW5kYXJkID0gR083MDA3X01QRUdfVklERU9fTVBFRzQ7CisJCQltcGVnLT5wYWxpID0gR083MDA3X01QRUdfUFJPRklMRSg0LCBnby0+cGFsaSk7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJCWlmICghZ28tPmdvcF9oZWFkZXJfZW5hYmxlKQorCQkJbXBlZy0+ZmxhZ3MgfD0gR083MDA3X01QRUdfT01JVF9HT1BfSEVBREVSOworCQlpZiAoZ28tPnJlcGVhdF9zZXFoZWFkKQorCQkJbXBlZy0+ZmxhZ3MgfD0gR083MDA3X01QRUdfUkVQRUFUX1NFUUhFQURFUjsKKwkJaWYgKGdvLT5kdmRfbW9kZSkKKwkJCW1wZWctPmZsYWdzIHw9IEdPNzAwN19NUEVHX0ZPUkNFX0RWRF9NT0RFOworCQlyZXR1cm4gMDsKKwl9CisJY2FzZSBHTzcwMDdJT0NfU19NRF9QQVJBTVM6CisJeworCQlzdHJ1Y3QgZ283MDA3X21kX3BhcmFtcyAqbWRwID0gYXJnOworCisJCWlmIChtZHAtPnJlZ2lvbiA+IDMpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJaWYgKG1kcC0+dHJpZ2dlciA+IDApIHsKKwkJCWdvLT5tb2RldFttZHAtPnJlZ2lvbl0ucGl4ZWxfdGhyZXNob2xkID0KKwkJCQkJbWRwLT5waXhlbF90aHJlc2hvbGQgPj4gMTsKKwkJCWdvLT5tb2RldFttZHAtPnJlZ2lvbl0ubW90aW9uX3RocmVzaG9sZCA9CisJCQkJCW1kcC0+bW90aW9uX3RocmVzaG9sZCA+PiAxOworCQkJZ28tPm1vZGV0W21kcC0+cmVnaW9uXS5tYl90aHJlc2hvbGQgPQorCQkJCQltZHAtPnRyaWdnZXIgPj4gMTsKKwkJCWdvLT5tb2RldFttZHAtPnJlZ2lvbl0uZW5hYmxlID0gMTsKKwkJfSBlbHNlCisJCQlnby0+bW9kZXRbbWRwLT5yZWdpb25dLmVuYWJsZSA9IDA7CisJCS8qIGZhbGwtdGhyb3VnaCAqLworCX0KKwljYXNlIEdPNzAwN0lPQ19HX01EX1BBUkFNUzoKKwl7CisJCXN0cnVjdCBnbzcwMDdfbWRfcGFyYW1zICptZHAgPSBhcmc7CisJCWludCByZWdpb24gPSBtZHAtPnJlZ2lvbjsKKworCQlpZiAobWRwLT5yZWdpb24gPiAzKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCW1lbXNldChtZHAsIDAsIHNpemVvZihzdHJ1Y3QgZ283MDA3X21kX3BhcmFtcykpOworCQltZHAtPnJlZ2lvbiA9IHJlZ2lvbjsKKwkJaWYgKCFnby0+bW9kZXRbcmVnaW9uXS5lbmFibGUpCisJCQlyZXR1cm4gMDsKKwkJbWRwLT5waXhlbF90aHJlc2hvbGQgPQorCQkJKGdvLT5tb2RldFtyZWdpb25dLnBpeGVsX3RocmVzaG9sZCA8PCAxKSArIDE7CisJCW1kcC0+bW90aW9uX3RocmVzaG9sZCA9CisJCQkoZ28tPm1vZGV0W3JlZ2lvbl0ubW90aW9uX3RocmVzaG9sZCA8PCAxKSArIDE7CisJCW1kcC0+dHJpZ2dlciA9CisJCQkoZ28tPm1vZGV0W3JlZ2lvbl0ubWJfdGhyZXNob2xkIDw8IDEpICsgMTsKKwkJcmV0dXJuIDA7CisJfQorCWNhc2UgR083MDA3SU9DX1NfTURfUkVHSU9OOgorCXsKKwkJc3RydWN0IGdvNzAwN19tZF9yZWdpb24gKnJlZ2lvbiA9IGFyZzsKKworCQlpZiAocmVnaW9uLT5yZWdpb24gPCAxIHx8IHJlZ2lvbi0+cmVnaW9uID4gMykKKwkJCXJldHVybiAtRUlOVkFMOworCQlyZXR1cm4gY2xpcF90b19tb2RldF9tYXAoZ28sIHJlZ2lvbi0+cmVnaW9uLCByZWdpb24tPmNsaXBzKTsKKwl9CisJZGVmYXVsdDoKKwkJcHJpbnRrKEtFUk5fREVCVUcgImdvNzAwNzogdW5zdXBwb3J0ZWQgaW9jdGwgJWRcbiIsIGNtZCk7CisJCXJldHVybiAtRU5PSU9DVExDTUQ7CisJfQorCXJldHVybiAwOworCit1bmxvY2tfYW5kX3JldHVybjoKKwl1cCgmZ29maC0+bG9jayk7CisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIGludCBnbzcwMDdfaW9jdGwoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUsCisJCXVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQoreworCXN0cnVjdCBnbzcwMDdfZmlsZSAqZ29maCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKworCWlmIChnb2ZoLT5nby0+c3RhdHVzICE9IFNUQVRVU19PTkxJTkUpCisJCXJldHVybiAtRUlPOworCisJcmV0dXJuIHZpZGVvX3VzZXJjb3B5KGlub2RlLCBmaWxlLCBjbWQsIGFyZywgZ283MDA3X2RvX2lvY3RsKTsKK30KKworc3RhdGljIHNzaXplX3QgZ283MDA3X3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpkYXRhLAorCQlzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKK3sKKwlyZXR1cm4gLUVJTlZBTDsKK30KKworc3RhdGljIHZvaWQgZ283MDA3X3ZtX29wZW4oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCit7CisJc3RydWN0IGdvNzAwN19idWZmZXIgKmdvYnVmID0gdm1hLT52bV9wcml2YXRlX2RhdGE7CisKKwkrK2dvYnVmLT5tYXBwZWQ7Cit9CisKK3N0YXRpYyB2b2lkIGdvNzAwN192bV9jbG9zZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKK3sKKwlzdHJ1Y3QgZ283MDA3X2J1ZmZlciAqZ29idWYgPSB2bWEtPnZtX3ByaXZhdGVfZGF0YTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJaWYgKC0tZ29idWYtPm1hcHBlZCA9PSAwKSB7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZnb2J1Zi0+Z28tPnNwaW5sb2NrLCBmbGFncyk7CisJCWRlYWN0aXZhdGVfYnVmZmVyKGdvYnVmKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZ29idWYtPmdvLT5zcGlubG9jaywgZmxhZ3MpOworCX0KK30KKworLyogQ29waWVkIGZyb20gdmlkZW9idWYtZG1hLXNnLmMgKi8KK3N0YXRpYyBpbnQgZ283MDA3X3ZtX2ZhdWx0KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZikKK3sKKwlzdHJ1Y3QgcGFnZSAqcGFnZTsKKworCXBhZ2UgPSBhbGxvY19wYWdlKEdGUF9VU0VSIHwgX19HRlBfRE1BMzIpOworCWlmICghcGFnZSkKKwkJcmV0dXJuIFZNX0ZBVUxUX09PTTsKKwljbGVhcl91c2VyX3BhZ2UocGFnZV9hZGRyZXNzKHBhZ2UpLCAodW5zaWduZWQgbG9uZyl2bWYtPnZpcnR1YWxfYWRkcmVzcywKKwkJCXBhZ2UpOworCXZtZi0+cGFnZSA9IHBhZ2U7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgZ283MDA3X3ZtX29wcyA9IHsKKwkub3Blbgk9IGdvNzAwN192bV9vcGVuLAorCS5jbG9zZQk9IGdvNzAwN192bV9jbG9zZSwKKwkuZmF1bHQJPSBnbzcwMDdfdm1fZmF1bHQsCit9OworCitzdGF0aWMgaW50IGdvNzAwN19tbWFwKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKK3sKKwlzdHJ1Y3QgZ283MDA3X2ZpbGUgKmdvZmggPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJdW5zaWduZWQgaW50IGluZGV4OworCisJaWYgKGdvZmgtPmdvLT5zdGF0dXMgIT0gU1RBVFVTX09OTElORSkKKwkJcmV0dXJuIC1FSU87CisJaWYgKCEodm1hLT52bV9mbGFncyAmIFZNX1NIQVJFRCkpCisJCXJldHVybiAtRUlOVkFMOyAvKiBvbmx5IHN1cHBvcnQgVk1fU0hBUkVEIG1hcHBpbmcgKi8KKwlpZiAodm1hLT52bV9lbmQgLSB2bWEtPnZtX3N0YXJ0ICE9IEdPNzAwN19CVUZfU0laRSkKKwkJcmV0dXJuIC1FSU5WQUw7IC8qIG11c3QgbWFwIGV4YWN0bHkgb25lIGZ1bGwgYnVmZmVyICovCisJZG93bigmZ29maC0+bG9jayk7CisJaW5kZXggPSB2bWEtPnZtX3Bnb2ZmIC8gR083MDA3X0JVRl9QQUdFUzsKKwlpZiAoaW5kZXggPj0gZ29maC0+YnVmX2NvdW50KSB7CisJCXVwKCZnb2ZoLT5sb2NrKTsKKwkJcmV0dXJuIC1FSU5WQUw7IC8qIHRyeWluZyB0byBtYXAgYmV5b25kIHJlcXVlc3RlZCBidWZmZXJzICovCisJfQorCWlmIChpbmRleCAqIEdPNzAwN19CVUZfUEFHRVMgIT0gdm1hLT52bV9wZ29mZikgeworCQl1cCgmZ29maC0+bG9jayk7CisJCXJldHVybiAtRUlOVkFMOyAvKiBvZmZzZXQgaXMgbm90IGFsaWduZWQgb24gYnVmZmVyIGJvdW5kYXJ5ICovCisJfQorCWlmIChnb2ZoLT5idWZzW2luZGV4XS5tYXBwZWQgPiAwKSB7CisJCXVwKCZnb2ZoLT5sb2NrKTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisJZ29maC0+YnVmc1tpbmRleF0ubWFwcGVkID0gMTsKKwlnb2ZoLT5idWZzW2luZGV4XS51c2VyX2FkZHIgPSB2bWEtPnZtX3N0YXJ0OworCXZtYS0+dm1fb3BzID0gJmdvNzAwN192bV9vcHM7CisJdm1hLT52bV9mbGFncyB8PSBWTV9ET05URVhQQU5EOworCXZtYS0+dm1fZmxhZ3MgJj0gflZNX0lPOworCXZtYS0+dm1fcHJpdmF0ZV9kYXRhID0gJmdvZmgtPmJ1ZnNbaW5kZXhdOworCXVwKCZnb2ZoLT5sb2NrKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCBnbzcwMDdfcG9sbChzdHJ1Y3QgZmlsZSAqZmlsZSwgcG9sbF90YWJsZSAqd2FpdCkKK3sKKwlzdHJ1Y3QgZ283MDA3X2ZpbGUgKmdvZmggPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IGdvNzAwN19idWZmZXIgKmdvYnVmOworCisJaWYgKGxpc3RfZW1wdHkoJmdvZmgtPmdvLT5zdHJlYW0pKQorCQlyZXR1cm4gUE9MTEVSUjsKKwlnb2J1ZiA9IGxpc3RfZW50cnkoZ29maC0+Z28tPnN0cmVhbS5uZXh0LCBzdHJ1Y3QgZ283MDA3X2J1ZmZlciwgc3RyZWFtKTsKKwlwb2xsX3dhaXQoZmlsZSwgJmdvZmgtPmdvLT5mcmFtZV93YWl0cSwgd2FpdCk7CisJaWYgKGdvYnVmLT5zdGF0ZSA9PSBCVUZfU1RBVEVfRE9ORSkKKwkJcmV0dXJuIFBPTExJTiB8IFBPTExSRE5PUk07CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGdvNzAwN192ZmxfcmVsZWFzZShzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2ZmQpCit7CisJc3RydWN0IGdvNzAwNyAqZ28gPSB2aWRlb19nZXRfZHJ2ZGF0YSh2ZmQpOworCisJdmlkZW9fZGV2aWNlX3JlbGVhc2UodmZkKTsKKwlpZiAoLS1nby0+cmVmX2NvdW50ID09IDApCisJCWtmcmVlKGdvKTsKK30KKworc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZ283MDA3X2ZvcHMgPSB7CisJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCS5vcGVuCQk9IGdvNzAwN19vcGVuLAorCS5yZWxlYXNlCT0gZ283MDA3X3JlbGVhc2UsCisJLmlvY3RsCQk9IGdvNzAwN19pb2N0bCwKKwkubGxzZWVrCQk9IG5vX2xsc2VlaywKKwkucmVhZAkJPSBnbzcwMDdfcmVhZCwKKwkubW1hcAkJPSBnbzcwMDdfbW1hcCwKKwkucG9sbAkJPSBnbzcwMDdfcG9sbCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgdmlkZW9fZGV2aWNlIGdvNzAwN190ZW1wbGF0ZSA9IHsKKwkubmFtZQkJPSAiZ283MDA3IiwKKwkudmZsX3R5cGUJPSBWSURfVFlQRV9DQVBUVVJFLAorCS5mb3BzCQk9ICZnbzcwMDdfZm9wcywKKwkubWlub3IJCT0gLTEsCisJLnJlbGVhc2UJPSBnbzcwMDdfdmZsX3JlbGVhc2UsCit9OworCitpbnQgZ283MDA3X3Y0bDJfaW5pdChzdHJ1Y3QgZ283MDA3ICpnbykKK3sKKwlpbnQgcnY7CisKKwlnby0+dmlkZW9fZGV2ID0gdmlkZW9fZGV2aWNlX2FsbG9jKCk7CisJaWYgKGdvLT52aWRlb19kZXYgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisJbWVtY3B5KGdvLT52aWRlb19kZXYsICZnbzcwMDdfdGVtcGxhdGUsIHNpemVvZihnbzcwMDdfdGVtcGxhdGUpKTsKKwlnby0+dmlkZW9fZGV2LT5wYXJlbnQgPSBnby0+ZGV2OworCXJ2ID0gdmlkZW9fcmVnaXN0ZXJfZGV2aWNlKGdvLT52aWRlb19kZXYsIFZGTF9UWVBFX0dSQUJCRVIsIC0xKTsKKwlpZiAocnYgPCAwKSB7CisJCXZpZGVvX2RldmljZV9yZWxlYXNlKGdvLT52aWRlb19kZXYpOworCQlnby0+dmlkZW9fZGV2ID0gTlVMTDsKKwkJcmV0dXJuIHJ2OworCX0KKwl2aWRlb19zZXRfZHJ2ZGF0YShnby0+dmlkZW9fZGV2LCBnbyk7CisJKytnby0+cmVmX2NvdW50OworCisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgZ283MDA3X3Y0bDJfcmVtb3ZlKHN0cnVjdCBnbzcwMDcgKmdvKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlkb3duKCZnby0+aHdfbG9jayk7CisJaWYgKGdvLT5zdHJlYW1pbmcpIHsKKwkJZ28tPnN0cmVhbWluZyA9IDA7CisJCWdvNzAwN19zdHJlYW1fc3RvcChnbyk7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZnby0+c3BpbmxvY2ssIGZsYWdzKTsKKwkJYWJvcnRfcXVldWVkKGdvKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZ28tPnNwaW5sb2NrLCBmbGFncyk7CisJfQorCXVwKCZnby0+aHdfbG9jayk7CisJaWYgKGdvLT52aWRlb19kZXYpCisJCXZpZGVvX3VucmVnaXN0ZXJfZGV2aWNlKGdvLT52aWRlb19kZXYpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2dvNzAwNy9nbzcwMDcuaCBiL2RyaXZlcnMvc3RhZ2luZy9nbzcwMDcvZ283MDA3LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzM5OWM5MQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9nbzcwMDcvZ283MDA3LmgKQEAgLTAsMCArMSwxMTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwNiBNaWNyb25hcyBVU0EgSW5jLgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIHRoZSBhc3NvY2lhdGVkIFJFQURNRSBkb2N1bWVudGF0aW9uIGZpbGUgKHRoZQorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZworICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLAorICogZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvCisgKiBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28uCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MKKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4KKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULAorICogVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUKKyAqIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorICovCisKKy8qIERFUFJFQ0FURUQgLS0gdXNlIFY0TDJfUElYX0ZNVF9NUEVHIGFuZCB0aGVuIGNhbGwgR083MDA3SU9DX1NfTVBFR19QQVJBTVMKKyAqIHRvIHNlbGVjdCBiZXR3ZWVuIE1QRUcxLCBNUEVHMiwgYW5kIE1QRUc0ICovCisjZGVmaW5lIFY0TDJfUElYX0ZNVF9NUEVHNCAgICAgdjRsMl9mb3VyY2MoJ00nLCAnUCcsICdHJywgJzQnKSAvKiBNUEVHNCAqLworCisvKiBUaGVzZSB3aWxsIGJlIHJlcGxhY2VkIHdpdGggYSBiZXR0ZXIgaW50ZXJmYWNlCisgKiBzb29uLCBzbyBkb24ndCBnZXQgdG9vIGF0dGFjaGVkIHRvIHRoZW0gKi8KKyNkZWZpbmUJR083MDA3SU9DX1NfQklUUkFURQlfSU9XKCdWJywgQkFTRV9WSURJT0NfUFJJVkFURSArIDAsIGludCkKKyNkZWZpbmUJR083MDA3SU9DX0dfQklUUkFURQlfSU9SKCdWJywgQkFTRV9WSURJT0NfUFJJVkFURSArIDEsIGludCkKKworZW51bSBnbzcwMDdfYXNwZWN0X3JhdGlvIHsKKwlHTzcwMDdfQVNQRUNUX1JBVElPXzFfMSA9IDAsCisJR083MDA3X0FTUEVDVF9SQVRJT180XzNfTlRTQyA9IDEsCisJR083MDA3X0FTUEVDVF9SQVRJT180XzNfUEFMID0gMiwKKwlHTzcwMDdfQVNQRUNUX1JBVElPXzE2XzlfTlRTQyA9IDMsCisJR083MDA3X0FTUEVDVF9SQVRJT18xNl85X1BBTCA9IDQsCit9OworCisvKiBVc2VkIHRvIHNldCBnZW5lcmljIGNvbXByZXNzaW9uIHBhcmFtZXRlcnMgKi8KK3N0cnVjdCBnbzcwMDdfY29tcF9wYXJhbXMgeworCV9fdTMyIGdvcF9zaXplOworCV9fdTMyIG1heF9iX2ZyYW1lczsKKwllbnVtIGdvNzAwN19hc3BlY3RfcmF0aW8gYXNwZWN0X3JhdGlvOworCV9fdTMyIGZsYWdzOworCV9fdTMyIHJlc2VydmVkWzhdOworfTsKKworI2RlZmluZSBHTzcwMDdfQ09NUF9DTE9TRURfR09QCQkweDAwMDAwMDAxCisjZGVmaW5lIEdPNzAwN19DT01QX09NSVRfU0VRX0hFQURFUgkweDAwMDAwMDAyCisKK2VudW0gZ283MDA3X21wZWdfdmlkZW9fc3RhbmRhcmQgeworCUdPNzAwN19NUEVHX1ZJREVPX01QRUcxID0gMCwKKwlHTzcwMDdfTVBFR19WSURFT19NUEVHMiA9IDEsCisJR083MDA3X01QRUdfVklERU9fTVBFRzQgPSAyLAorfTsKKworLyogVXNlZCB0byBzZXQgcGFyYW1ldGVycyBmb3IgVjRMMl9QSVhfRk1UX01QRUcgZm9ybWF0ICovCitzdHJ1Y3QgZ283MDA3X21wZWdfcGFyYW1zIHsKKwllbnVtIGdvNzAwN19tcGVnX3ZpZGVvX3N0YW5kYXJkIG1wZWdfdmlkZW9fc3RhbmRhcmQ7CisJX191MzIgZmxhZ3M7CisJX191MzIgcGFsaTsKKwlfX3UzMiByZXNlcnZlZFs4XTsKK307CisKKyNkZWZpbmUgR083MDA3X01QRUdfRk9SQ0VfRFZEX01PREUJMHgwMDAwMDAwMQorI2RlZmluZSBHTzcwMDdfTVBFR19PTUlUX0dPUF9IRUFERVIJMHgwMDAwMDAwMgorI2RlZmluZSBHTzcwMDdfTVBFR19SRVBFQVRfU0VRSEVBREVSCTB4MDAwMDAwMDQKKworI2RlZmluZSBHTzcwMDdfTVBFR19QUk9GSUxFKGZvcm1hdCwgcGFsaSkJKCgoZm9ybWF0KTw8MjQpfChwYWxpKSkKKworI2RlZmluZSBHTzcwMDdfTVBFRzJfUFJPRklMRV9NQUlOX01BSU4JCUdPNzAwN19NUEVHX1BST0ZJTEUoMiwgMHg0OCkKKworI2RlZmluZSBHTzcwMDdfTVBFRzRfUFJPRklMRV9TX0wwCQlHTzcwMDdfTVBFR19QUk9GSUxFKDQsIDB4MDgpCisjZGVmaW5lIEdPNzAwN19NUEVHNF9QUk9GSUxFX1NfTDEJCUdPNzAwN19NUEVHX1BST0ZJTEUoNCwgMHgwMSkKKyNkZWZpbmUgR083MDA3X01QRUc0X1BST0ZJTEVfU19MMgkJR083MDA3X01QRUdfUFJPRklMRSg0LCAweDAyKQorI2RlZmluZSBHTzcwMDdfTVBFRzRfUFJPRklMRV9TX0wzCQlHTzcwMDdfTVBFR19QUk9GSUxFKDQsIDB4MDMpCisjZGVmaW5lIEdPNzAwN19NUEVHNF9QUk9GSUxFX0FSVFNfTDEJCUdPNzAwN19NUEVHX1BST0ZJTEUoNCwgMHg5MSkKKyNkZWZpbmUgR083MDA3X01QRUc0X1BST0ZJTEVfQVJUU19MMgkJR083MDA3X01QRUdfUFJPRklMRSg0LCAweDkyKQorI2RlZmluZSBHTzcwMDdfTVBFRzRfUFJPRklMRV9BUlRTX0wzCQlHTzcwMDdfTVBFR19QUk9GSUxFKDQsIDB4OTMpCisjZGVmaW5lIEdPNzAwN19NUEVHNF9QUk9GSUxFX0FSVFNfTDQJCUdPNzAwN19NUEVHX1BST0ZJTEUoNCwgMHg5NCkKKyNkZWZpbmUgR083MDA3X01QRUc0X1BST0ZJTEVfQVNfTDAJCUdPNzAwN19NUEVHX1BST0ZJTEUoNCwgMHhmMCkKKyNkZWZpbmUgR083MDA3X01QRUc0X1BST0ZJTEVfQVNfTDEJCUdPNzAwN19NUEVHX1BST0ZJTEUoNCwgMHhmMSkKKyNkZWZpbmUgR083MDA3X01QRUc0X1BST0ZJTEVfQVNfTDIJCUdPNzAwN19NUEVHX1BST0ZJTEUoNCwgMHhmMikKKyNkZWZpbmUgR083MDA3X01QRUc0X1BST0ZJTEVfQVNfTDMJCUdPNzAwN19NUEVHX1BST0ZJTEUoNCwgMHhmMykKKyNkZWZpbmUgR083MDA3X01QRUc0X1BST0ZJTEVfQVNfTDQJCUdPNzAwN19NUEVHX1BST0ZJTEUoNCwgMHhmNCkKKyNkZWZpbmUgR083MDA3X01QRUc0X1BST0ZJTEVfQVNfTDUJCUdPNzAwN19NUEVHX1BST0ZJTEUoNCwgMHhmNSkKKworc3RydWN0IGdvNzAwN19tZF9wYXJhbXMgeworCV9fdTE2IHJlZ2lvbjsKKwlfX3UxNiB0cmlnZ2VyOworCV9fdTE2IHBpeGVsX3RocmVzaG9sZDsKKwlfX3UxNiBtb3Rpb25fdGhyZXNob2xkOworCV9fdTMyIHJlc2VydmVkWzhdOworfTsKKworc3RydWN0IGdvNzAwN19tZF9yZWdpb24geworCV9fdTE2IHJlZ2lvbjsKKwlfX3UxNiBmbGFnczsKKwlzdHJ1Y3QgdjRsMl9jbGlwICpjbGlwczsKKwlfX3UzMiByZXNlcnZlZFs4XTsKK307CisKKyNkZWZpbmUJR083MDA3SU9DX1NfTVBFR19QQVJBTVMJX0lPV1IoJ1YnLCBCQVNFX1ZJRElPQ19QUklWQVRFICsgMiwgXAorCQkJCQlzdHJ1Y3QgZ283MDA3X21wZWdfcGFyYW1zKQorI2RlZmluZQlHTzcwMDdJT0NfR19NUEVHX1BBUkFNUwlfSU9SKCdWJywgQkFTRV9WSURJT0NfUFJJVkFURSArIDMsIFwKKwkJCQkJc3RydWN0IGdvNzAwN19tcGVnX3BhcmFtcykKKyNkZWZpbmUJR083MDA3SU9DX1NfQ09NUF9QQVJBTVMJX0lPV1IoJ1YnLCBCQVNFX1ZJRElPQ19QUklWQVRFICsgNCwgXAorCQkJCQlzdHJ1Y3QgZ283MDA3X2NvbXBfcGFyYW1zKQorI2RlZmluZQlHTzcwMDdJT0NfR19DT01QX1BBUkFNUwlfSU9SKCdWJywgQkFTRV9WSURJT0NfUFJJVkFURSArIDUsIFwKKwkJCQkJc3RydWN0IGdvNzAwN19jb21wX3BhcmFtcykKKyNkZWZpbmUJR083MDA3SU9DX1NfTURfUEFSQU1TCV9JT1dSKCdWJywgQkFTRV9WSURJT0NfUFJJVkFURSArIDYsIFwKKwkJCQkJc3RydWN0IGdvNzAwN19tZF9wYXJhbXMpCisjZGVmaW5lCUdPNzAwN0lPQ19HX01EX1BBUkFNUwlfSU9SKCdWJywgQkFTRV9WSURJT0NfUFJJVkFURSArIDcsIFwKKwkJCQkJc3RydWN0IGdvNzAwN19tZF9wYXJhbXMpCisjZGVmaW5lCUdPNzAwN0lPQ19TX01EX1JFR0lPTglfSU9XKCdWJywgQkFTRV9WSURJT0NfUFJJVkFURSArIDgsIFwKKwkJCQkJc3RydWN0IGdvNzAwN19tZF9yZWdpb24pCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZ283MDA3L3NhYTcxMzQtZ283MDA3LmMgYi9kcml2ZXJzL3N0YWdpbmcvZ283MDA3L3NhYTcxMzQtZ283MDA3LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzRhNmQ4ZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9nbzcwMDcvc2FhNzEzNC1nbzcwMDcuYwpAQCAtMCwwICsxLDQ4NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA2IE1pY3JvbmFzIFVTQSBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKFZlcnNpb24gMikgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisgKiBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KKyNpbmNsdWRlIDxtZWRpYS9hdWRpb2NoaXAuaD4KKworI2luY2x1ZGUgInNhYTcxMzQtcmVnLmgiCisjaW5jbHVkZSAic2FhNzEzNC5oIgorI2luY2x1ZGUgImdvNzAwNy1wcml2LmgiCisKKyNkZWZpbmUgR083MDA3X0hQSV9ERUJVRworCitlbnVtIGhwaV9hZGRyZXNzIHsKKwlIUElfQUREUl9WSURFT19CVUZGRVIgPSAweGU0LAorCUhQSV9BRERSX0lOSVRfQlVGRkVSID0gMHhlYSwKKwlIUElfQUREUl9JTlRSX1JFVF9WQUxVRSA9IDB4ZWUsCisJSFBJX0FERFJfSU5UUl9SRVRfREFUQSA9IDB4ZWMsCisJSFBJX0FERFJfSU5UUl9TVEFUVVMgPSAweGY0LAorCUhQSV9BRERSX0lOVFJfV1JfUEFSQU0gPSAweGY2LAorCUhQSV9BRERSX0lOVFJfV1JfSU5ERVggPSAweGY4LAorfTsKKworZW51bSBncGlvX2NvbW1hbmQgeworCUdQSU9fQ09NTUFORF9SRVNFVCA9IDB4MDAsIC8qIDAwMGIgKi8KKwlHUElPX0NPTU1BTkRfUkVRMSAgPSAweDA0LCAvKiAwMDFiICovCisJR1BJT19DT01NQU5EX1dSSVRFID0gMHgyMCwgLyogMDEwYiAqLworCUdQSU9fQ09NTUFORF9SRVEyICA9IDB4MjQsIC8qIDAxMWIgKi8KKwlHUElPX0NPTU1BTkRfUkVBRCAgPSAweDgwLCAvKiAxMDBiICovCisJR1BJT19DT01NQU5EX1ZJREVPID0gMHg4NCwgLyogMTAxYiAqLworCUdQSU9fQ09NTUFORF9JRExFICA9IDB4QTAsIC8qIDExMGIgKi8KKwlHUElPX0NPTU1BTkRfQUREUiAgPSAweEE0LCAvKiAxMTFiICovCit9OworCitzdHJ1Y3Qgc2FhNzEzNF9nbzcwMDcgeworCXN0cnVjdCBzYWE3MTM0X2RldiAqZGV2OworCXU4ICp0b3A7CisJdTggKmJvdHRvbTsKKwlkbWFfYWRkcl90IHRvcF9kbWE7CisJZG1hX2FkZHJfdCBib3R0b21fZG1hOworfTsKKworc3RhdGljIHN0cnVjdCBnbzcwMDdfYm9hcmRfaW5mbyBib2FyZF92b3lhZ2VyID0geworCS5maXJtd2FyZQkgPSAiZ283MDA3dHYuYmluIiwKKwkuZmxhZ3MJCSA9IDAsCisJLnNlbnNvcl9mbGFncwkgPSBHTzcwMDdfU0VOU09SXzY1NiB8CisJCQkJR083MDA3X1NFTlNPUl9WQUxJRF9FTkFCTEUgfAorCQkJCUdPNzAwN19TRU5TT1JfVFYgfAorCQkJCUdPNzAwN19TRU5TT1JfVkJJLAorCS5hdWRpb19mbGFncwk9IEdPNzAwN19BVURJT19JMlNfTU9ERV8xIHwKKwkJCQlHTzcwMDdfQVVESU9fV09SRF8xNiwKKwkuYXVkaW9fcmF0ZQkgPSA0ODAwMCwKKwkuYXVkaW9fYmNsa19kaXYJID0gOCwKKwkuYXVkaW9fbWFpbl9kaXYJID0gMiwKKwkuaHBpX2J1ZmZlcl9jYXAgID0gNywKKwkubnVtX2lucHV0cwkgPSAxLAorCS5pbnB1dHMgCSA9IHsKKwkJeworCQkJLm5hbWUJCT0gIlNBQTcxMzQiLAorCQl9LAorCX0sCit9OworCisvKioqKioqKioqKioqKioqKioqKioqIERyaXZlciBmb3IgR1BJTyBIUEkgaW50ZXJmYWNlICoqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIGludCBncGlvX3dyaXRlKHN0cnVjdCBzYWE3MTM0X2RldiAqZGV2LCB1OCBhZGRyLCB1MTYgZGF0YSkKK3sKKwlzYWFfd3JpdGViKFNBQTcxMzRfR1BJT19HUE1PREUwLCAweGZmKTsKKworCS8qIFdyaXRlIEhQSSBhZGRyZXNzICovCisJc2FhX3dyaXRlYihTQUE3MTM0X0dQSU9fR1BTVEFUVVMwLCBhZGRyKTsKKwlzYWFfd3JpdGViKFNBQTcxMzRfR1BJT19HUFNUQVRVUzIsIEdQSU9fQ09NTUFORF9BRERSKTsKKwlzYWFfd3JpdGViKFNBQTcxMzRfR1BJT19HUFNUQVRVUzIsIEdQSU9fQ09NTUFORF9JRExFKTsKKworCS8qIFdyaXRlIGxvdyBieXRlICovCisJc2FhX3dyaXRlYihTQUE3MTM0X0dQSU9fR1BTVEFUVVMwLCBkYXRhICYgMHhmZik7CisJc2FhX3dyaXRlYihTQUE3MTM0X0dQSU9fR1BTVEFUVVMyLCBHUElPX0NPTU1BTkRfV1JJVEUpOworCXNhYV93cml0ZWIoU0FBNzEzNF9HUElPX0dQU1RBVFVTMiwgR1BJT19DT01NQU5EX0lETEUpOworCisJLyogV3JpdGUgaGlnaCBieXRlICovCisJc2FhX3dyaXRlYihTQUE3MTM0X0dQSU9fR1BTVEFUVVMwLCBkYXRhID4+IDgpOworCXNhYV93cml0ZWIoU0FBNzEzNF9HUElPX0dQU1RBVFVTMiwgR1BJT19DT01NQU5EX1dSSVRFKTsKKwlzYWFfd3JpdGViKFNBQTcxMzRfR1BJT19HUFNUQVRVUzIsIEdQSU9fQ09NTUFORF9JRExFKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGdwaW9fcmVhZChzdHJ1Y3Qgc2FhNzEzNF9kZXYgKmRldiwgdTggYWRkciwgdTE2ICpkYXRhKQoreworCXNhYV93cml0ZWIoU0FBNzEzNF9HUElPX0dQTU9ERTAsIDB4ZmYpOworCisJLyogV3JpdGUgSFBJIGFkZHJlc3MgKi8KKwlzYWFfd3JpdGViKFNBQTcxMzRfR1BJT19HUFNUQVRVUzAsIGFkZHIpOworCXNhYV93cml0ZWIoU0FBNzEzNF9HUElPX0dQU1RBVFVTMiwgR1BJT19DT01NQU5EX0FERFIpOworCXNhYV93cml0ZWIoU0FBNzEzNF9HUElPX0dQU1RBVFVTMiwgR1BJT19DT01NQU5EX0lETEUpOworCisJc2FhX3dyaXRlYihTQUE3MTM0X0dQSU9fR1BNT0RFMCwgMHgwMCk7CisKKwkvKiBSZWFkIGxvdyBieXRlICovCisJc2FhX3dyaXRlYihTQUE3MTM0X0dQSU9fR1BTVEFUVVMyLCBHUElPX0NPTU1BTkRfUkVBRCk7CisJc2FhX2NsZWFyYihTQUE3MTM0X0dQSU9fR1BNT0RFMywgU0FBNzEzNF9HUElPX0dQUkVTQ0FOKTsKKwlzYWFfc2V0YihTQUE3MTM0X0dQSU9fR1BNT0RFMywgU0FBNzEzNF9HUElPX0dQUkVTQ0FOKTsKKwkqZGF0YSA9IHNhYV9yZWFkYihTQUE3MTM0X0dQSU9fR1BTVEFUVVMwKTsKKwlzYWFfd3JpdGViKFNBQTcxMzRfR1BJT19HUFNUQVRVUzIsIEdQSU9fQ09NTUFORF9JRExFKTsKKworCS8qIFJlYWQgaGlnaCBieXRlICovCisJc2FhX3dyaXRlYihTQUE3MTM0X0dQSU9fR1BTVEFUVVMyLCBHUElPX0NPTU1BTkRfUkVBRCk7CisJc2FhX2NsZWFyYihTQUE3MTM0X0dQSU9fR1BNT0RFMywgU0FBNzEzNF9HUElPX0dQUkVTQ0FOKTsKKwlzYWFfc2V0YihTQUE3MTM0X0dQSU9fR1BNT0RFMywgU0FBNzEzNF9HUElPX0dQUkVTQ0FOKTsKKwkqZGF0YSB8PSBzYWFfcmVhZGIoU0FBNzEzNF9HUElPX0dQU1RBVFVTMCkgPDwgODsKKwlzYWFfd3JpdGViKFNBQTcxMzRfR1BJT19HUFNUQVRVUzIsIEdQSU9fQ09NTUFORF9JRExFKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNhYTcxMzRfZ283MDA3X2ludGVyZmFjZV9yZXNldChzdHJ1Y3QgZ283MDA3ICpnbykKK3sKKwlzdHJ1Y3Qgc2FhNzEzNF9nbzcwMDcgKnNhYSA9IGdvLT5ocGlfY29udGV4dDsKKwlzdHJ1Y3Qgc2FhNzEzNF9kZXYgKmRldiA9IHNhYS0+ZGV2OworCXUzMiBzdGF0dXM7CisJdTE2IGludHJfdmFsLCBpbnRyX2RhdGE7CisJaW50IGNvdW50ID0gMjA7CisKKwlzYWFfY2xlYXJiKFNBQTcxMzRfVFNfUEFSQUxMRUwsIDB4ODApOyAvKiBEaXNhYmxlIFRTIGludGVyZmFjZSAqLworCXNhYV93cml0ZWIoU0FBNzEzNF9HUElPX0dQTU9ERTIsIDB4YTQpOworCXNhYV93cml0ZWIoU0FBNzEzNF9HUElPX0dQTU9ERTAsIDB4ZmYpOworCisJc2FhX3dyaXRlYihTQUE3MTM0X0dQSU9fR1BTVEFUVVMyLCBHUElPX0NPTU1BTkRfUkVRMSk7CisJc2FhX3dyaXRlYihTQUE3MTM0X0dQSU9fR1BTVEFUVVMyLCBHUElPX0NPTU1BTkRfUkVTRVQpOworCW1zbGVlcCgxKTsKKwlzYWFfd3JpdGViKFNBQTcxMzRfR1BJT19HUFNUQVRVUzIsIEdQSU9fQ09NTUFORF9SRVExKTsKKwlzYWFfd3JpdGViKFNBQTcxMzRfR1BJT19HUFNUQVRVUzIsIEdQSU9fQ09NTUFORF9SRVEyKTsKKwltc2xlZXAoMTApOworCisJc2FhX2NsZWFyYihTQUE3MTM0X0dQSU9fR1BNT0RFMywgU0FBNzEzNF9HUElPX0dQUkVTQ0FOKTsKKwlzYWFfc2V0YihTQUE3MTM0X0dQSU9fR1BNT0RFMywgU0FBNzEzNF9HUElPX0dQUkVTQ0FOKTsKKworCXN0YXR1cyA9IHNhYV9yZWFkYihTQUE3MTM0X0dQSU9fR1BTVEFUVVMyKTsKKwkvKnByaW50ayhLRVJOX0RFQlVHICJzdGF0dXMgaXMgJXNcbiIsIHN0YXR1cyAmIDB4NDAgPyAiT0siIDogIm5vdCBPSyIpOyAqLworCisJLyogZW50ZXIgY29tbWFuZCBtb2RlLi4uKD8pICovCisJc2FhX3dyaXRlYihTQUE3MTM0X0dQSU9fR1BTVEFUVVMyLCBHUElPX0NPTU1BTkRfUkVRMSk7CisJc2FhX3dyaXRlYihTQUE3MTM0X0dQSU9fR1BTVEFUVVMyLCBHUElPX0NPTU1BTkRfUkVRMik7CisKKwlkbyB7CisJCXNhYV9jbGVhcmIoU0FBNzEzNF9HUElPX0dQTU9ERTMsIFNBQTcxMzRfR1BJT19HUFJFU0NBTik7CisJCXNhYV9zZXRiKFNBQTcxMzRfR1BJT19HUE1PREUzLCBTQUE3MTM0X0dQSU9fR1BSRVNDQU4pOworCQlzdGF0dXMgPSBzYWFfcmVhZGIoU0FBNzEzNF9HUElPX0dQU1RBVFVTMik7CisJCS8qcHJpbnRrKEtFUk5fSU5GTyAiZ3BpbyBpcyAlMDh4XG4iLCBzYWFfcmVhZGwoU0FBNzEzNF9HUElPX0dQU1RBVFVTMCA+PiAyKSk7ICovCisJfSB3aGlsZSAoLS1jb3VudCA+IDApOworCisJLyogV2FpdCBmb3IgYW4gaW50ZXJydXB0IHRvIGluZGljYXRlIHN1Y2Nlc3NmdWwgaGFyZHdhcmUgcmVzZXQgKi8KKwlpZiAoZ283MDA3X3JlYWRfaW50ZXJydXB0KGdvLCAmaW50cl92YWwsICZpbnRyX2RhdGEpIDwgMCB8fAorCQkJKGludHJfdmFsICYgfjB4MSkgIT0gMHg1NWFhKSB7CisJCXByaW50ayhLRVJOX0VSUgorCQkJInNhYTcxMzQtZ283MDA3OiB1bmFibGUgdG8gcmVzZXQgdGhlIEdPNzAwN1xuIik7CisJCXJldHVybiAtMTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2FhNzEzNF9nbzcwMDdfd3JpdGVfaW50ZXJydXB0KHN0cnVjdCBnbzcwMDcgKmdvLCBpbnQgYWRkciwgaW50IGRhdGEpCit7CisJc3RydWN0IHNhYTcxMzRfZ283MDA3ICpzYWEgPSBnby0+aHBpX2NvbnRleHQ7CisJc3RydWN0IHNhYTcxMzRfZGV2ICpkZXYgPSBzYWEtPmRldjsKKwlpbnQgaTsKKwl1MTYgc3RhdHVzX3JlZzsKKworI2lmZGVmIEdPNzAwN19IUElfREVCVUcKKwlwcmludGsoS0VSTl9ERUJVRworCQkic2FhNzEzNC1nbzcwMDc6IFdyaXRlSW50ZXJydXB0OiAlMDR4ICUwNHhcbiIsIGFkZHIsIGRhdGEpOworI2VuZGlmCisKKwlmb3IgKGkgPSAwOyBpIDwgMTAwOyArK2kpIHsKKwkJZ3Bpb19yZWFkKGRldiwgSFBJX0FERFJfSU5UUl9TVEFUVVMsICZzdGF0dXNfcmVnKTsKKwkJaWYgKCEoc3RhdHVzX3JlZyAmIDB4MDAxMCkpCisJCQlicmVhazsKKwkJbXNsZWVwKDEwKTsKKwl9CisJaWYgKGkgPT0gMTAwKSB7CisJCXByaW50ayhLRVJOX0VSUgorCQkJInNhYTcxMzQtZ283MDA3OiBkZXZpY2UgaXMgaHVuZywgc3RhdHVzIHJlZyA9IDB4JTA0eFxuIiwKKwkJCXN0YXR1c19yZWcpOworCQlyZXR1cm4gLTE7CisJfQorCWdwaW9fd3JpdGUoZGV2LCBIUElfQUREUl9JTlRSX1dSX1BBUkFNLCBkYXRhKTsKKwlncGlvX3dyaXRlKGRldiwgSFBJX0FERFJfSU5UUl9XUl9JTkRFWCwgYWRkcik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzYWE3MTM0X2dvNzAwN19yZWFkX2ludGVycnVwdChzdHJ1Y3QgZ283MDA3ICpnbykKK3sKKwlzdHJ1Y3Qgc2FhNzEzNF9nbzcwMDcgKnNhYSA9IGdvLT5ocGlfY29udGV4dDsKKwlzdHJ1Y3Qgc2FhNzEzNF9kZXYgKmRldiA9IHNhYS0+ZGV2OworCisJLyogWFhYIHdlIG5lZWQgdG8gd2FpdCBpZiB0aGVyZSBpcyBubyBpbnRlcnJ1cHQgYXZhaWxhYmxlICovCisJZ28tPmludGVycnVwdF9hdmFpbGFibGUgPSAxOworCWdwaW9fcmVhZChkZXYsIEhQSV9BRERSX0lOVFJfUkVUX1ZBTFVFLCAmZ28tPmludGVycnVwdF92YWx1ZSk7CisJZ3Bpb19yZWFkKGRldiwgSFBJX0FERFJfSU5UUl9SRVRfREFUQSwgJmdvLT5pbnRlcnJ1cHRfZGF0YSk7CisjaWZkZWYgR083MDA3X0hQSV9ERUJVRworCXByaW50ayhLRVJOX0RFQlVHICJzYWE3MTM0LWdvNzAwNzogUmVhZEludGVycnVwdDogJTA0eCAlMDR4XG4iLAorCQkJZ28tPmludGVycnVwdF92YWx1ZSwgZ28tPmludGVycnVwdF9kYXRhKTsKKyNlbmRpZgorCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBzYWE3MTM0X2dvNzAwN19pcnFfdHNfZG9uZShzdHJ1Y3Qgc2FhNzEzNF9kZXYgKmRldiwKKwkJCQkJCXVuc2lnbmVkIGxvbmcgc3RhdHVzKQoreworCXN0cnVjdCBnbzcwMDcgKmdvID0gdmlkZW9fZ2V0X2RydmRhdGEoZGV2LT5lbXByZXNzX2Rldik7CisJc3RydWN0IHNhYTcxMzRfZ283MDA3ICpzYWEgPSBnby0+aHBpX2NvbnRleHQ7CisKKwlpZiAoIWdvLT5zdHJlYW1pbmcpCisJCXJldHVybjsKKwlpZiAoMCAhPSAoc3RhdHVzICYgMHgwMDBmMDAwMCkpCisJCXByaW50ayhLRVJOX0RFQlVHICJzYWE3MTM0LWdvNzAwNzogaXJxOiBsb3N0ICVsZFxuIiwKKwkJCQkoc3RhdHVzID4+IDE2KSAmIDB4MGYpOworCWlmIChzdGF0dXMgJiAweDEwMDAwMCkgeworCQlkbWFfc3luY19zaW5nbGUoJmRldi0+cGNpLT5kZXYsCisJCQkJc2FhLT5ib3R0b21fZG1hLCBQQUdFX1NJWkUsIERNQV9GUk9NX0RFVklDRSk7CisJCWdvNzAwN19wYXJzZV92aWRlb19zdHJlYW0oZ28sIHNhYS0+Ym90dG9tLCBQQUdFX1NJWkUpOworCQlzYWFfd3JpdGVsKFNBQTcxMzRfUlNfQkEyKDUpLCBjcHVfdG9fbGUzMihzYWEtPmJvdHRvbV9kbWEpKTsKKwl9IGVsc2UgeworCQlkbWFfc3luY19zaW5nbGUoJmRldi0+cGNpLT5kZXYsCisJCQkJc2FhLT50b3BfZG1hLCBQQUdFX1NJWkUsIERNQV9GUk9NX0RFVklDRSk7CisJCWdvNzAwN19wYXJzZV92aWRlb19zdHJlYW0oZ28sIHNhYS0+dG9wLCBQQUdFX1NJWkUpOworCQlzYWFfd3JpdGVsKFNBQTcxMzRfUlNfQkExKDUpLCBjcHVfdG9fbGUzMihzYWEtPnRvcF9kbWEpKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgc2FhNzEzNF9nbzcwMDdfc3RyZWFtX3N0YXJ0KHN0cnVjdCBnbzcwMDcgKmdvKQoreworCXN0cnVjdCBzYWE3MTM0X2dvNzAwNyAqc2FhID0gZ28tPmhwaV9jb250ZXh0OworCXN0cnVjdCBzYWE3MTM0X2RldiAqZGV2ID0gc2FhLT5kZXY7CisKKwlzYWEtPnRvcF9kbWEgPSBkbWFfbWFwX3BhZ2UoJmRldi0+cGNpLT5kZXYsIHZpcnRfdG9fcGFnZShzYWEtPnRvcCksCisJCQkwLCBQQUdFX1NJWkUsIERNQV9GUk9NX0RFVklDRSk7CisJaWYgKCFzYWEtPnRvcF9kbWEpCisJCXJldHVybiAtRU5PTUVNOworCXNhYS0+Ym90dG9tX2RtYSA9IGRtYV9tYXBfcGFnZSgmZGV2LT5wY2ktPmRldiwKKwkJCXZpcnRfdG9fcGFnZShzYWEtPmJvdHRvbSksCisJCQkwLCBQQUdFX1NJWkUsIERNQV9GUk9NX0RFVklDRSk7CisJaWYgKCFzYWEtPmJvdHRvbV9kbWEpIHsKKwkJZG1hX3VubWFwX3BhZ2UoJmRldi0+cGNpLT5kZXYsIHNhYS0+dG9wX2RtYSwgUEFHRV9TSVpFLAorCQkJCURNQV9GUk9NX0RFVklDRSk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCXNhYV93cml0ZWwoU0FBNzEzNF9WSURFT19QT1JUX0NUUkwwID4+IDIsIDB4QTMwMEIwMDApOworCXNhYV93cml0ZWwoU0FBNzEzNF9WSURFT19QT1JUX0NUUkw0ID4+IDIsIDB4NDAwMDAyMDApOworCisJLyogU2V0IEhQSSBpbnRlcmZhY2UgZm9yIHZpZGVvICovCisJc2FhX3dyaXRlYihTQUE3MTM0X0dQSU9fR1BNT0RFMCwgMHhmZik7CisJc2FhX3dyaXRlYihTQUE3MTM0X0dQSU9fR1BTVEFUVVMwLCBIUElfQUREUl9WSURFT19CVUZGRVIpOworCXNhYV93cml0ZWIoU0FBNzEzNF9HUElPX0dQU1RBVFVTMiwgR1BJT19DT01NQU5EX0FERFIpOworCXNhYV93cml0ZWIoU0FBNzEzNF9HUElPX0dQTU9ERTAsIDB4MDApOworCisJLyogRW5hYmxlIFRTIGludGVyZmFjZSAqLworCXNhYV93cml0ZWIoU0FBNzEzNF9UU19QQVJBTExFTCwgMHhlNik7CisKKwkvKiBSZXNldCBUUyBpbnRlcmZhY2UgKi8KKwlzYWFfc2V0YihTQUE3MTM0X1RTX1NFUklBTDEsIDB4MDEpOworCXNhYV9jbGVhcmIoU0FBNzEzNF9UU19TRVJJQUwxLCAweDAxKTsKKworCS8qIFNldCB1cCB0cmFuc2ZlciBibG9jayBzaXplICovCisJc2FhX3dyaXRlYihTQUE3MTM0X1RTX1BBUkFMTEVMX1NFUklBTCwgMTI4IC0gMSk7CisJc2FhX3dyaXRlYihTQUE3MTM0X1RTX0RNQTAsIChQQUdFX1NJWkUgPj4gNykgLSAxKTsKKwlzYWFfd3JpdGViKFNBQTcxMzRfVFNfRE1BMSwgMCk7CisJc2FhX3dyaXRlYihTQUE3MTM0X1RTX0RNQTIsIDApOworCisJLyogRW5hYmxlIHZpZGVvIHN0cmVhbWluZyBtb2RlICovCisJc2FhX3dyaXRlYihTQUE3MTM0X0dQSU9fR1BTVEFUVVMyLCBHUElPX0NPTU1BTkRfVklERU8pOworCisJc2FhX3dyaXRlbChTQUE3MTM0X1JTX0JBMSg1KSwgY3B1X3RvX2xlMzIoc2FhLT50b3BfZG1hKSk7CisJc2FhX3dyaXRlbChTQUE3MTM0X1JTX0JBMig1KSwgY3B1X3RvX2xlMzIoc2FhLT5ib3R0b21fZG1hKSk7CisJc2FhX3dyaXRlbChTQUE3MTM0X1JTX1BJVENIKDUpLCAxMjgpOworCXNhYV93cml0ZWwoU0FBNzEzNF9SU19DT05UUk9MKDUpLCBTQUE3MTM0X1JTX0NPTlRST0xfQlVSU1RfTUFYKTsKKworCS8qIEVuYWJsZSBUUyBGSUZPICovCisJc2FhX3NldGwoU0FBNzEzNF9NQUlOX0NUUkwsIFNBQTcxMzRfTUFJTl9DVFJMX1RFNSk7CisKKwkvKiBFbmFibGUgRE1BIElSUSAqLworCXNhYV9zZXRsKFNBQTcxMzRfSVJRMSwKKwkJCVNBQTcxMzRfSVJRMV9JTlRFX1JBMl8xIHwgU0FBNzEzNF9JUlExX0lOVEVfUkEyXzApOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2FhNzEzNF9nbzcwMDdfc3RyZWFtX3N0b3Aoc3RydWN0IGdvNzAwNyAqZ28pCit7CisJc3RydWN0IHNhYTcxMzRfZ283MDA3ICpzYWEgPSBnby0+aHBpX2NvbnRleHQ7CisJc3RydWN0IHNhYTcxMzRfZGV2ICpkZXYgPSBzYWEtPmRldjsKKworCS8qIFNodXQgZG93biBUUyBGSUZPICovCisJc2FhX2NsZWFybChTQUE3MTM0X01BSU5fQ1RSTCwgU0FBNzEzNF9NQUlOX0NUUkxfVEU1KTsKKworCS8qIERpc2FibGUgRE1BIElSUSAqLworCXNhYV9jbGVhcmwoU0FBNzEzNF9JUlExLAorCQkJU0FBNzEzNF9JUlExX0lOVEVfUkEyXzEgfCBTQUE3MTM0X0lSUTFfSU5URV9SQTJfMCk7CisKKwkvKiBEaXNhYmxlIFRTIGludGVyZmFjZSAqLworCXNhYV9jbGVhcmIoU0FBNzEzNF9UU19QQVJBTExFTCwgMHg4MCk7CisKKwlkbWFfdW5tYXBfcGFnZSgmZGV2LT5wY2ktPmRldiwgc2FhLT50b3BfZG1hLCBQQUdFX1NJWkUsCisJCQlETUFfRlJPTV9ERVZJQ0UpOworCWRtYV91bm1hcF9wYWdlKCZkZXYtPnBjaS0+ZGV2LCBzYWEtPmJvdHRvbV9kbWEsIFBBR0VfU0laRSwKKwkJCURNQV9GUk9NX0RFVklDRSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzYWE3MTM0X2dvNzAwN19zZW5kX2Zpcm13YXJlKHN0cnVjdCBnbzcwMDcgKmdvLCB1OCAqZGF0YSwgaW50IGxlbikKK3sKKwlzdHJ1Y3Qgc2FhNzEzNF9nbzcwMDcgKnNhYSA9IGdvLT5ocGlfY29udGV4dDsKKwlzdHJ1Y3Qgc2FhNzEzNF9kZXYgKmRldiA9IHNhYS0+ZGV2OworCXUxNiBzdGF0dXNfcmVnOworCWludCBpOworCisjaWZkZWYgR083MDA3X0hQSV9ERUJVRworCXByaW50ayhLRVJOX0RFQlVHICJzYWE3MTM0LWdvNzAwNzogRG93bmxvYWRCdWZmZXIgIgorCQkJInNlbmRpbmcgJWQgYnl0ZXNcbiIsIGxlbik7CisjZW5kaWYKKworCXdoaWxlIChsZW4gPiAwKSB7CisJCWkgPSBsZW4gPiA2NCA/IDY0IDogbGVuOworCQlzYWFfd3JpdGViKFNBQTcxMzRfR1BJT19HUE1PREUwLCAweGZmKTsKKwkJc2FhX3dyaXRlYihTQUE3MTM0X0dQSU9fR1BTVEFUVVMwLCBIUElfQUREUl9JTklUX0JVRkZFUik7CisJCXNhYV93cml0ZWIoU0FBNzEzNF9HUElPX0dQU1RBVFVTMiwgR1BJT19DT01NQU5EX0FERFIpOworCQlzYWFfd3JpdGViKFNBQTcxMzRfR1BJT19HUFNUQVRVUzIsIEdQSU9fQ09NTUFORF9JRExFKTsKKwkJd2hpbGUgKGktLSA+IDApIHsKKwkJCXNhYV93cml0ZWIoU0FBNzEzNF9HUElPX0dQU1RBVFVTMCwgKmRhdGEpOworCQkJc2FhX3dyaXRlYihTQUE3MTM0X0dQSU9fR1BTVEFUVVMyLCBHUElPX0NPTU1BTkRfV1JJVEUpOworCQkJc2FhX3dyaXRlYihTQUE3MTM0X0dQSU9fR1BTVEFUVVMyLCBHUElPX0NPTU1BTkRfSURMRSk7CisJCQkrK2RhdGE7CisJCQktLWxlbjsKKwkJfQorCQlmb3IgKGkgPSAwOyBpIDwgMTAwOyArK2kpIHsKKwkJCWdwaW9fcmVhZChkZXYsIEhQSV9BRERSX0lOVFJfU1RBVFVTLCAmc3RhdHVzX3JlZyk7CisJCQlpZiAoIShzdGF0dXNfcmVnICYgMHgwMDAyKSkKKwkJCQlicmVhazsKKwkJfQorCQlpZiAoaSA9PSAxMDApIHsKKwkJCXByaW50ayhLRVJOX0VSUiAic2FhNzEzNC1nbzcwMDc6IGRldmljZSBpcyBodW5nLCAiCisJCQkJCSJzdGF0dXMgcmVnID0gMHglMDR4XG4iLCBzdGF0dXNfcmVnKTsKKwkJCXJldHVybiAtMTsKKwkJfQorCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBnbzcwMDdfaHBpX29wcyBzYWE3MTM0X2dvNzAwN19ocGlfb3BzID0geworCS5pbnRlcmZhY2VfcmVzZXQJPSBzYWE3MTM0X2dvNzAwN19pbnRlcmZhY2VfcmVzZXQsCisJLndyaXRlX2ludGVycnVwdAk9IHNhYTcxMzRfZ283MDA3X3dyaXRlX2ludGVycnVwdCwKKwkucmVhZF9pbnRlcnJ1cHQJCT0gc2FhNzEzNF9nbzcwMDdfcmVhZF9pbnRlcnJ1cHQsCisJLnN0cmVhbV9zdGFydAkJPSBzYWE3MTM0X2dvNzAwN19zdHJlYW1fc3RhcnQsCisJLnN0cmVhbV9zdG9wCQk9IHNhYTcxMzRfZ283MDA3X3N0cmVhbV9zdG9wLAorCS5zZW5kX2Zpcm13YXJlCQk9IHNhYTcxMzRfZ283MDA3X3NlbmRfZmlybXdhcmUsCit9OworCisvKioqKioqKioqKioqKioqKioqKioqIEFkZC9yZW1vdmUgZnVuY3Rpb25zICoqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIGludCBzYWE3MTM0X2dvNzAwN19pbml0KHN0cnVjdCBzYWE3MTM0X2RldiAqZGV2KQoreworCXN0cnVjdCBnbzcwMDcgKmdvOworCXN0cnVjdCBzYWE3MTM0X2dvNzAwNyAqc2FhOworCisJcHJpbnRrKEtFUk5fREVCVUcgInNhYTcxMzQtZ283MDA3OiBwcm9iaW5nIG5ldyBTQUE3MTNYIGJvYXJkXG4iKTsKKworCXNhYSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBzYWE3MTM0X2dvNzAwNyksIEdGUF9LRVJORUwpOworCWlmIChzYWEgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisJbWVtc2V0KHNhYSwgMCwgc2l6ZW9mKHN0cnVjdCBzYWE3MTM0X2dvNzAwNykpOworCisJLyogQWxsb2NhdGUgYSBjb3VwbGUgcGFnZXMgZm9yIHJlY2VpdmluZyB0aGUgY29tcHJlc3NlZCBzdHJlYW0gKi8KKwlzYWEtPnRvcCA9ICh1OCAqKWdldF96ZXJvZWRfcGFnZShHRlBfS0VSTkVMKTsKKwlpZiAoIXNhYS0+dG9wKQorCQlnb3RvIGFsbG9jZmFpbDsKKwlzYWEtPmJvdHRvbSA9ICh1OCAqKWdldF96ZXJvZWRfcGFnZShHRlBfS0VSTkVMKTsKKwlpZiAoIXNhYS0+Ym90dG9tKQorCQlnb3RvIGFsbG9jZmFpbDsKKworCWdvID0gZ283MDA3X2FsbG9jKCZib2FyZF92b3lhZ2VyLCAmZGV2LT5wY2ktPmRldik7CisJaWYgKGdvID09IE5VTEwpCisJCWdvdG8gYWxsb2NmYWlsOworCWdvLT5ib2FyZF9pZCA9IEdPNzAwN19CT0FSRElEX1BDSV9WT1lBR0VSOworCXN0cm5jcHkoZ28tPm5hbWUsIHNhYTcxMzRfYm9hcmRzW2Rldi0+Ym9hcmRdLm5hbWUsIHNpemVvZihnby0+bmFtZSkpOworCWdvLT5ocGlfb3BzID0gJnNhYTcxMzRfZ283MDA3X2hwaV9vcHM7CisJZ28tPmhwaV9jb250ZXh0ID0gc2FhOworCXNhYS0+ZGV2ID0gZGV2OworCisJLyogQm9vdCB0aGUgR083MDA3ICovCisJaWYgKGdvNzAwN19ib290X2VuY29kZXIoZ28sIGdvLT5ib2FyZF9pbmZvLT5mbGFncyAmCisJCQkJCUdPNzAwN19CT0FSRF9VU0VfT05CT0FSRF9JMkMpIDwgMCkKKwkJZ290byBpbml0ZmFpbDsKKworCS8qIERvIGFueSBmaW5hbCBHTzcwMDcgaW5pdGlhbGl6YXRpb24sIHRoZW4gcmVnaXN0ZXIgdGhlCisJICogVjRMMiBhbmQgQUxTQSBpbnRlcmZhY2VzICovCisJaWYgKGdvNzAwN19yZWdpc3Rlcl9lbmNvZGVyKGdvKSA8IDApCisJCWdvdG8gaW5pdGZhaWw7CisJZGV2LT5lbXByZXNzX2RldiA9IGdvLT52aWRlb19kZXY7CisJdmlkZW9fc2V0X2RydmRhdGEoZGV2LT5lbXByZXNzX2RldiwgZ28pOworCisJZ28tPnN0YXR1cyA9IFNUQVRVU19PTkxJTkU7CisJcmV0dXJuIDA7CisKK2luaXRmYWlsOgorCWdvLT5zdGF0dXMgPSBTVEFUVVNfU0hVVERPV047CisJcmV0dXJuIDA7CisKK2FsbG9jZmFpbDoKKwlpZiAoc2FhLT50b3ApCisJCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZylzYWEtPnRvcCk7CisJaWYgKHNhYS0+Ym90dG9tKQorCQlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpc2FhLT5ib3R0b20pOworCWtmcmVlKHNhYSk7CisJcmV0dXJuIC1FTk9NRU07Cit9CisKK3N0YXRpYyBpbnQgc2FhNzEzNF9nbzcwMDdfZmluaShzdHJ1Y3Qgc2FhNzEzNF9kZXYgKmRldikKK3sKKwlzdHJ1Y3QgZ283MDA3ICpnbzsKKwlzdHJ1Y3Qgc2FhNzEzNF9nbzcwMDcgKnNhYTsKKworCWlmIChOVUxMID09IGRldi0+ZW1wcmVzc19kZXYpCisJCXJldHVybiAwOworCisJZ28gPSB2aWRlb19nZXRfZHJ2ZGF0YShkZXYtPmVtcHJlc3NfZGV2KTsKKwlzYWEgPSBnby0+aHBpX2NvbnRleHQ7CisJZ28tPnN0YXR1cyA9IFNUQVRVU19TSFVURE9XTjsKKwlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpc2FhLT50b3ApOworCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZylzYWEtPmJvdHRvbSk7CisJa2ZyZWUoc2FhKTsKKwlnbzcwMDdfcmVtb3ZlKGdvKTsKKwlkZXYtPmVtcHJlc3NfZGV2ID0gTlVMTDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHNhYTcxMzRfbXBlZ19vcHMgc2FhNzEzNF9nbzcwMDdfb3BzID0geworCS50eXBlICAgICAgICAgID0gU0FBNzEzNF9NUEVHX0dPNzAwNywKKwkuaW5pdCAgICAgICAgICA9IHNhYTcxMzRfZ283MDA3X2luaXQsCisJLmZpbmkgICAgICAgICAgPSBzYWE3MTM0X2dvNzAwN19maW5pLAorCS5pcnFfdHNfZG9uZSAgID0gc2FhNzEzNF9nbzcwMDdfaXJxX3RzX2RvbmUsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBzYWE3MTM0X2dvNzAwN19tb2RfaW5pdCh2b2lkKQoreworCXJldHVybiBzYWE3MTM0X3RzX3JlZ2lzdGVyKCZzYWE3MTM0X2dvNzAwN19vcHMpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgc2FhNzEzNF9nbzcwMDdfbW9kX2NsZWFudXAodm9pZCkKK3sKKwlzYWE3MTM0X3RzX3VucmVnaXN0ZXIoJnNhYTcxMzRfZ283MDA3X29wcyk7Cit9CisKK21vZHVsZV9pbml0KHNhYTcxMzRfZ283MDA3X21vZF9pbml0KTsKK21vZHVsZV9leGl0KHNhYTcxMzRfZ283MDA3X21vZF9jbGVhbnVwKTsKKworTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2dvNzAwNy9zbmQtZ283MDA3LmMgYi9kcml2ZXJzL3N0YWdpbmcvZ283MDA3L3NuZC1nbzcwMDcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zODI3NDBjCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2dvNzAwNy9zbmQtZ283MDA3LmMKQEAgLTAsMCArMSwzMDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwNiBNaWNyb25hcyBVU0EgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChWZXJzaW9uIDIpIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorICogSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24gTUEgMDIxMTEtMTMwNywgVVNBLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPGxpbnV4L3NlbWFwaG9yZS5oPgorI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CisjaW5jbHVkZSA8c291bmQvY29yZS5oPgorI2luY2x1ZGUgPHNvdW5kL3BjbS5oPgorI2luY2x1ZGUgPHNvdW5kL2luaXR2YWwuaD4KKworI2luY2x1ZGUgImdvNzAwNy1wcml2LmgiCisKK3N0YXRpYyBpbnQgaW5kZXhbU05EUlZfQ0FSRFNdID0gU05EUlZfREVGQVVMVF9JRFg7CitzdGF0aWMgY2hhciAqaWRbU05EUlZfQ0FSRFNdID0gU05EUlZfREVGQVVMVF9TVFI7CitzdGF0aWMgaW50IGVuYWJsZVtTTkRSVl9DQVJEU10gPSBTTkRSVl9ERUZBVUxUX0VOQUJMRV9QTlA7CisKK21vZHVsZV9wYXJhbV9hcnJheShpbmRleCwgaW50LCBOVUxMLCAwNDQ0KTsKK21vZHVsZV9wYXJhbV9hcnJheShpZCwgY2hhcnAsIE5VTEwsIDA0NDQpOworbW9kdWxlX3BhcmFtX2FycmF5KGVuYWJsZSwgYm9vbCwgTlVMTCwgMDQ0NCk7CitNT0RVTEVfUEFSTV9ERVNDKGluZGV4LCAiSW5kZXggdmFsdWUgZm9yIHRoZSBnbzcwMDcgYXVkaW8gZHJpdmVyIik7CitNT0RVTEVfUEFSTV9ERVNDKGlkLCAiSUQgc3RyaW5nIGZvciB0aGUgZ283MDA3IGF1ZGlvIGRyaXZlciIpOworTU9EVUxFX1BBUk1fREVTQyhlbmFibGUsICJFbmFibGUgZm9yIHRoZSBnbzcwMDcgYXVkaW8gZHJpdmVyIik7CisKK3N0cnVjdCBnbzcwMDdfc25kIHsKKwlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQ7CisJc3RydWN0IHNuZF9wY20gKnBjbTsKKwlzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbTsKKwlzcGlubG9ja190IGxvY2s7CisJaW50IHdfaWR4OworCWludCBod19wdHI7CisJaW50IGF2YWlsOworCWludCBjYXB0dXJpbmc7Cit9OworCitzdGF0aWMgc3RydWN0IHNuZF9wY21faGFyZHdhcmUgZ283MDA3X3NuZF9jYXB0dXJlX2h3ID0geworCS5pbmZvCQkJPSAoU05EUlZfUENNX0lORk9fTU1BUCB8CisJCQkJCVNORFJWX1BDTV9JTkZPX0lOVEVSTEVBVkVEIHwKKwkJCQkJU05EUlZfUENNX0lORk9fQkxPQ0tfVFJBTlNGRVIgfAorCQkJCQlTTkRSVl9QQ01fSU5GT19NTUFQX1ZBTElEKSwKKwkuZm9ybWF0cwkJPSBTTkRSVl9QQ01fRk1UQklUX1MxNl9MRSwKKwkucmF0ZXMJCQk9IFNORFJWX1BDTV9SQVRFXzQ4MDAwLAorCS5yYXRlX21pbgkJPSA0ODAwMCwKKwkucmF0ZV9tYXgJCT0gNDgwMDAsCisJLmNoYW5uZWxzX21pbgkJPSAyLAorCS5jaGFubmVsc19tYXgJCT0gMiwKKwkuYnVmZmVyX2J5dGVzX21heAk9ICgxMjgqMTAyNCksCisJLnBlcmlvZF9ieXRlc19taW4JPSA0MDk2LAorCS5wZXJpb2RfYnl0ZXNfbWF4CT0gKDEyOCoxMDI0KSwKKwkucGVyaW9kc19taW4JCT0gMSwKKwkucGVyaW9kc19tYXgJCT0gMzIsCit9OworCitzdGF0aWMgdm9pZCBwYXJzZV9hdWRpb19zdHJlYW1fZGF0YShzdHJ1Y3QgZ283MDA3ICpnbywgdTggKmJ1ZiwgaW50IGxlbmd0aCkKK3sKKwlzdHJ1Y3QgZ283MDA3X3NuZCAqZ29zbmQgPSBnby0+c25kX2NvbnRleHQ7CisJc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSA9IGdvc25kLT5zdWJzdHJlYW0tPnJ1bnRpbWU7CisJaW50IGZyYW1lcyA9IGJ5dGVzX3RvX2ZyYW1lcyhydW50aW1lLCBsZW5ndGgpOworCisJc3Bpbl9sb2NrKCZnb3NuZC0+bG9jayk7CisJZ29zbmQtPmh3X3B0ciArPSBmcmFtZXM7CisJaWYgKGdvc25kLT5od19wdHIgPj0gcnVudGltZS0+YnVmZmVyX3NpemUpCisJCWdvc25kLT5od19wdHIgLT0gcnVudGltZS0+YnVmZmVyX3NpemU7CisJZ29zbmQtPmF2YWlsICs9IGZyYW1lczsKKwlzcGluX3VubG9jaygmZ29zbmQtPmxvY2spOworCWlmIChnb3NuZC0+d19pZHggKyBsZW5ndGggPiBydW50aW1lLT5kbWFfYnl0ZXMpIHsKKwkJaW50IGNweSA9IHJ1bnRpbWUtPmRtYV9ieXRlcyAtIGdvc25kLT53X2lkeDsKKworCQltZW1jcHkocnVudGltZS0+ZG1hX2FyZWEgKyBnb3NuZC0+d19pZHgsIGJ1ZiwgY3B5KTsKKwkJbGVuZ3RoIC09IGNweTsKKwkJYnVmICs9IGNweTsKKwkJZ29zbmQtPndfaWR4ID0gMDsKKwl9CisJbWVtY3B5KHJ1bnRpbWUtPmRtYV9hcmVhICsgZ29zbmQtPndfaWR4LCBidWYsIGxlbmd0aCk7CisJZ29zbmQtPndfaWR4ICs9IGxlbmd0aDsKKwlzcGluX2xvY2soJmdvc25kLT5sb2NrKTsKKwlpZiAoZ29zbmQtPmF2YWlsIDwgcnVudGltZS0+cGVyaW9kX3NpemUpIHsKKwkJc3Bpbl91bmxvY2soJmdvc25kLT5sb2NrKTsKKwkJcmV0dXJuOworCX0KKwlnb3NuZC0+YXZhaWwgLT0gcnVudGltZS0+cGVyaW9kX3NpemU7CisJc3Bpbl91bmxvY2soJmdvc25kLT5sb2NrKTsKKwlpZiAoZ29zbmQtPmNhcHR1cmluZykKKwkJc25kX3BjbV9wZXJpb2RfZWxhcHNlZChnb3NuZC0+c3Vic3RyZWFtKTsKK30KKworc3RhdGljIGludCBnbzcwMDdfc25kX2h3X3BhcmFtcyhzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKKwkJCQlzdHJ1Y3Qgc25kX3BjbV9od19wYXJhbXMgKmh3X3BhcmFtcykKK3sKKwlzdHJ1Y3QgZ283MDA3ICpnbyA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKKwl1bnNpZ25lZCBpbnQgYnl0ZXM7CisKKwlieXRlcyA9IHBhcmFtc19idWZmZXJfYnl0ZXMoaHdfcGFyYW1zKTsKKwlpZiAoc3Vic3RyZWFtLT5ydW50aW1lLT5kbWFfYnl0ZXMgPiAwKQorCQl2ZnJlZShzdWJzdHJlYW0tPnJ1bnRpbWUtPmRtYV9hcmVhKTsKKwlzdWJzdHJlYW0tPnJ1bnRpbWUtPmRtYV9ieXRlcyA9IDA7CisJc3Vic3RyZWFtLT5ydW50aW1lLT5kbWFfYXJlYSA9IHZtYWxsb2MoYnl0ZXMpOworCWlmIChzdWJzdHJlYW0tPnJ1bnRpbWUtPmRtYV9hcmVhID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCXN1YnN0cmVhbS0+cnVudGltZS0+ZG1hX2J5dGVzID0gYnl0ZXM7CisJZ28tPmF1ZGlvX2RlbGl2ZXIgPSBwYXJzZV9hdWRpb19zdHJlYW1fZGF0YTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBnbzcwMDdfc25kX2h3X2ZyZWUoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCit7CisJc3RydWN0IGdvNzAwNyAqZ28gPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHN1YnN0cmVhbSk7CisKKwlnby0+YXVkaW9fZGVsaXZlciA9IE5VTEw7CisJaWYgKHN1YnN0cmVhbS0+cnVudGltZS0+ZG1hX2J5dGVzID4gMCkKKwkJdmZyZWUoc3Vic3RyZWFtLT5ydW50aW1lLT5kbWFfYXJlYSk7CisJc3Vic3RyZWFtLT5ydW50aW1lLT5kbWFfYnl0ZXMgPSAwOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGdvNzAwN19zbmRfY2FwdHVyZV9vcGVuKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQoreworCXN0cnVjdCBnbzcwMDcgKmdvID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWJzdHJlYW0pOworCXN0cnVjdCBnbzcwMDdfc25kICpnb3NuZCA9IGdvLT5zbmRfY29udGV4dDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCByOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmdvc25kLT5sb2NrLCBmbGFncyk7CisJaWYgKGdvc25kLT5zdWJzdHJlYW0gPT0gTlVMTCkgeworCQlnb3NuZC0+c3Vic3RyZWFtID0gc3Vic3RyZWFtOworCQlzdWJzdHJlYW0tPnJ1bnRpbWUtPmh3ID0gZ283MDA3X3NuZF9jYXB0dXJlX2h3OworCQlyID0gMDsKKwl9IGVsc2UKKwkJciA9IC1FQlVTWTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZnb3NuZC0+bG9jaywgZmxhZ3MpOworCXJldHVybiByOworfQorCitzdGF0aWMgaW50IGdvNzAwN19zbmRfY2FwdHVyZV9jbG9zZShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3sKKwlzdHJ1Y3QgZ283MDA3ICpnbyA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKKwlzdHJ1Y3QgZ283MDA3X3NuZCAqZ29zbmQgPSBnby0+c25kX2NvbnRleHQ7CisKKwlnb3NuZC0+c3Vic3RyZWFtID0gTlVMTDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBnbzcwMDdfc25kX3BjbV9wcmVwYXJlKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGdvNzAwN19zbmRfcGNtX3RyaWdnZXIoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sIGludCBjbWQpCit7CisJc3RydWN0IGdvNzAwNyAqZ28gPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHN1YnN0cmVhbSk7CisJc3RydWN0IGdvNzAwN19zbmQgKmdvc25kID0gZ28tPnNuZF9jb250ZXh0OworCisJc3dpdGNoIChjbWQpIHsKKwljYXNlIFNORFJWX1BDTV9UUklHR0VSX1NUQVJUOgorCQkvKiBKdXN0IHNldCBhIGZsYWcgdG8gaW5kaWNhdGUgd2Ugc2hvdWxkIHNpZ25hbCBBTFNBIHdoZW4KKwkJICogc291bmQgY29tZXMgaW4gKi8KKwkJZ29zbmQtPmNhcHR1cmluZyA9IDE7CisJCXJldHVybiAwOworCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfU1RPUDoKKwkJZ29zbmQtPmh3X3B0ciA9IGdvc25kLT53X2lkeCA9IGdvc25kLT5hdmFpbCA9IDA7CisJCWdvc25kLT5jYXB0dXJpbmcgPSAwOworCQlyZXR1cm4gMDsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9Cit9CisKK3N0YXRpYyBzbmRfcGNtX3VmcmFtZXNfdCBnbzcwMDdfc25kX3BjbV9wb2ludGVyKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQoreworCXN0cnVjdCBnbzcwMDcgKmdvID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWJzdHJlYW0pOworCXN0cnVjdCBnbzcwMDdfc25kICpnb3NuZCA9IGdvLT5zbmRfY29udGV4dDsKKworCXJldHVybiBnb3NuZC0+aHdfcHRyOworfQorCitzdGF0aWMgc3RydWN0IHBhZ2UgKmdvNzAwN19zbmRfcGNtX3BhZ2Uoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCisJCQkJCXVuc2lnbmVkIGxvbmcgb2Zmc2V0KQoreworCXJldHVybiB2bWFsbG9jX3RvX3BhZ2Uoc3Vic3RyZWFtLT5ydW50aW1lLT5kbWFfYXJlYSArIG9mZnNldCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3BjbV9vcHMgZ283MDA3X3NuZF9jYXB0dXJlX29wcyA9IHsKKwkub3BlbgkJPSBnbzcwMDdfc25kX2NhcHR1cmVfb3BlbiwKKwkuY2xvc2UJCT0gZ283MDA3X3NuZF9jYXB0dXJlX2Nsb3NlLAorCS5pb2N0bAkJPSBzbmRfcGNtX2xpYl9pb2N0bCwKKwkuaHdfcGFyYW1zCT0gZ283MDA3X3NuZF9od19wYXJhbXMsCisJLmh3X2ZyZWUJPSBnbzcwMDdfc25kX2h3X2ZyZWUsCisJLnByZXBhcmUJPSBnbzcwMDdfc25kX3BjbV9wcmVwYXJlLAorCS50cmlnZ2VyCT0gZ283MDA3X3NuZF9wY21fdHJpZ2dlciwKKwkucG9pbnRlcgk9IGdvNzAwN19zbmRfcGNtX3BvaW50ZXIsCisJLnBhZ2UJCT0gZ283MDA3X3NuZF9wY21fcGFnZSwKK307CisKK3N0YXRpYyBpbnQgZ283MDA3X3NuZF9mcmVlKHN0cnVjdCBzbmRfZGV2aWNlICpkZXZpY2UpCit7CisJc3RydWN0IGdvNzAwNyAqZ28gPSBkZXZpY2UtPmRldmljZV9kYXRhOworCisJa2ZyZWUoZ28tPnNuZF9jb250ZXh0KTsKKwlnby0+c25kX2NvbnRleHQgPSBOVUxMOworCWlmICgtLWdvLT5yZWZfY291bnQgPT0gMCkKKwkJa2ZyZWUoZ28pOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHNuZF9kZXZpY2Vfb3BzIGdvNzAwN19zbmRfZGV2aWNlX29wcyA9IHsKKwkuZGV2X2ZyZWUJPSBnbzcwMDdfc25kX2ZyZWUsCit9OworCitpbnQgZ283MDA3X3NuZF9pbml0KHN0cnVjdCBnbzcwMDcgKmdvKQoreworCXN0YXRpYyBpbnQgZGV2OworCXN0cnVjdCBnbzcwMDdfc25kICpnb3NuZDsKKwlpbnQgcmV0ID0gMDsKKworCWlmIChkZXYgPj0gU05EUlZfQ0FSRFMpCisJCXJldHVybiAtRU5PREVWOworCWlmICghZW5hYmxlW2Rldl0pIHsKKwkJZGV2Kys7CisJCXJldHVybiAtRU5PRU5UOworCX0KKwlnb3NuZCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBnbzcwMDdfc25kKSwgR0ZQX0tFUk5FTCk7CisJaWYgKGdvc25kID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCXNwaW5fbG9ja19pbml0KCZnb3NuZC0+bG9jayk7CisJZ29zbmQtPmh3X3B0ciA9IGdvc25kLT53X2lkeCA9IGdvc25kLT5hdmFpbCA9IDA7CisJZ29zbmQtPmNhcHR1cmluZyA9IDA7CisJZ29zbmQtPmNhcmQgPSBzbmRfY2FyZF9uZXcoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsIDApOworCWlmIChnb3NuZC0+Y2FyZCA9PSBOVUxMKSB7CisJCWtmcmVlKGdvc25kKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCXJldCA9IHNuZF9kZXZpY2VfbmV3KGdvc25kLT5jYXJkLCBTTkRSVl9ERVZfTE9XTEVWRUwsIGdvLAorCQkJJmdvNzAwN19zbmRfZGV2aWNlX29wcyk7CisJaWYgKHJldCA8IDApIHsKKwkJa2ZyZWUoZ29zbmQpOworCQlyZXR1cm4gcmV0OworCX0KKwlzbmRfY2FyZF9zZXRfZGV2KGdvc25kLT5jYXJkLCBnby0+ZGV2KTsKKwlyZXQgPSBzbmRfcGNtX25ldyhnb3NuZC0+Y2FyZCwgImdvNzAwNyIsIDAsIDAsIDEsICZnb3NuZC0+cGNtKTsKKwlpZiAocmV0IDwgMCkgeworCQlzbmRfY2FyZF9mcmVlKGdvc25kLT5jYXJkKTsKKwkJa2ZyZWUoZ29zbmQpOworCQlyZXR1cm4gcmV0OworCX0KKwlzdHJuY3B5KGdvc25kLT5jYXJkLT5kcml2ZXIsICJnbzcwMDciLCBzaXplb2YoZ29zbmQtPmNhcmQtPmRyaXZlcikpOworCXN0cm5jcHkoZ29zbmQtPmNhcmQtPnNob3J0bmFtZSwgZ28tPm5hbWUsIHNpemVvZihnb3NuZC0+Y2FyZC0+ZHJpdmVyKSk7CisJc3RybmNweShnb3NuZC0+Y2FyZC0+bG9uZ25hbWUsIGdvc25kLT5jYXJkLT5zaG9ydG5hbWUsCisJCQlzaXplb2YoZ29zbmQtPmNhcmQtPmxvbmduYW1lKSk7CisKKwlnb3NuZC0+cGNtLT5wcml2YXRlX2RhdGEgPSBnbzsKKwlzbmRfcGNtX3NldF9vcHMoZ29zbmQtPnBjbSwgU05EUlZfUENNX1NUUkVBTV9DQVBUVVJFLAorCQkJJmdvNzAwN19zbmRfY2FwdHVyZV9vcHMpOworCisJcmV0ID0gc25kX2NhcmRfcmVnaXN0ZXIoZ29zbmQtPmNhcmQpOworCWlmIChyZXQgPCAwKSB7CisJCXNuZF9jYXJkX2ZyZWUoZ29zbmQtPmNhcmQpOworCQlrZnJlZShnb3NuZCk7CisJCXJldHVybiByZXQ7CisJfQorCisJZ29zbmQtPnN1YnN0cmVhbSA9IE5VTEw7CisJZ28tPnNuZF9jb250ZXh0ID0gZ29zbmQ7CisJKytkZXY7CisJKytnby0+cmVmX2NvdW50OworCisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MKGdvNzAwN19zbmRfaW5pdCk7CisKK2ludCBnbzcwMDdfc25kX3JlbW92ZShzdHJ1Y3QgZ283MDA3ICpnbykKK3sKKwlzdHJ1Y3QgZ283MDA3X3NuZCAqZ29zbmQgPSBnby0+c25kX2NvbnRleHQ7CisKKwlzbmRfY2FyZF9kaXNjb25uZWN0KGdvc25kLT5jYXJkKTsKKwlzbmRfY2FyZF9mcmVlX3doZW5fY2xvc2VkKGdvc25kLT5jYXJkKTsKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0woZ283MDA3X3NuZF9yZW1vdmUpOworCitNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZ283MDA3L3dpcy1pMmMuaCBiL2RyaXZlcnMvc3RhZ2luZy9nbzcwMDcvd2lzLWkyYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk5M2Y2NTgKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvZ283MDA3L3dpcy1pMmMuaApAQCAtMCwwICsxLDU1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMDYgTWljcm9uYXMgVVNBIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoVmVyc2lvbiAyKSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKyAqIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisvKiBUZW1wb3JhcnkgSTJDIElEcyAtLSB0aGVzZSBuZWVkIHRvIGJlIHJlcGxhY2VkIHdpdGggcmVhbCByZWdpc3RlcmVkIElEcyAqLworI2RlZmluZQlJMkNfRFJJVkVSSURfV0lTX1NBQTcxMTUJMHhmMGYwCisjZGVmaW5lCUkyQ19EUklWRVJJRF9XSVNfVURBMTM0MgkweGYwZjEKKyNkZWZpbmUJSTJDX0RSSVZFUklEX1dJU19TT05ZX1RVTkVSCTB4ZjBmMgorI2RlZmluZQlJMkNfRFJJVkVSSURfV0lTX1RXOTkwMwkJMHhmMGYzCisjZGVmaW5lCUkyQ19EUklWRVJJRF9XSVNfU0FBNzExMwkweGYwZjQKKyNkZWZpbmUJSTJDX0RSSVZFUklEX1dJU19PVjc2NDAJCTB4ZjBmNQorI2RlZmluZQlJMkNfRFJJVkVSSURfV0lTX1RXMjgwNAkJMHhmMGY2CisjZGVmaW5lCUkyQ19BTEdPX0dPNzAwNwkJCTB4ZjAwMDAwCisjZGVmaW5lCUkyQ19BTEdPX0dPNzAwN19VU0IJCTB4ZjEwMDAwCisKKy8qIEZsYWcgdG8gaW5kaWNhdGUgdGhhdCB0aGUgY2xpZW50IG5lZWRzIHRvIGJlIGFjY2Vzc2VkIHdpdGggU0NDQiBzZW1hbnRpY3MgKi8KKy8qIFdlIHJlLXVzZSB0aGUgSTJDX01fVEVOIHZhbHVlIHNvIHRoZSBmbGFnIHBhc3NlcyB0aHJvdWdoIHRoZSBtYXNrcyBpbiB0aGUKKyAqIGNvcmUgSTJDIGNvZGUuICBNYWpvciBrbHVkZ2UsIGJ1dCB0aGUgSTJDIGxheWVyIGFpbid0IGV4YWN0bHkgZmxleGlibGUuICovCisjZGVmaW5lCUkyQ19DTElFTlRfU0NDQgkJCTB4MTAKKwordHlwZWRlZiBpbnQgKCpmb3VuZF9wcm9jKSAoc3RydWN0IGkyY19hZGFwdGVyICosIGludCwgaW50KTsKK2ludCB3aXNfaTJjX2FkZF9kcml2ZXIodW5zaWduZWQgaW50IGlkLCBmb3VuZF9wcm9jIGZvdW5kX3Byb2MpOwordm9pZCB3aXNfaTJjX2RlbF9kcml2ZXIoZm91bmRfcHJvYyBmb3VuZF9wcm9jKTsKKworaW50IHdpc19pMmNfcHJvYmVfZGV2aWNlKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlciwKKwkJCQl1bnNpZ25lZCBpbnQgaWQsIGludCBhZGRyKTsKKworLyogRGVmaW5pdGlvbnMgZm9yIG5ldyB2aWRlbyBkZWNvZGVyIGNvbW1hbmRzICovCisKK3N0cnVjdCB2aWRlb19kZWNvZGVyX3Jlc29sdXRpb24geworCXVuc2lnbmVkIGludCB3aWR0aDsKKwl1bnNpZ25lZCBpbnQgaGVpZ2h0OworfTsKKworI2RlZmluZQlERUNPREVSX1NFVF9SRVNPTFVUSU9OCV9JT1coJ2QnLCAyMDAsIHN0cnVjdCB2aWRlb19kZWNvZGVyX3Jlc29sdXRpb24pCisjZGVmaW5lCURFQ09ERVJfU0VUX0NIQU5ORUwJX0lPVygnZCcsIDIwMSwgaW50KQorCisvKiBTb255IHR1bmVyIHR5cGVzICovCisKKyNkZWZpbmUgVFVORVJfU09OWV9CVEZfUEc0NzJaCQkyMDAKKyNkZWZpbmUgVFVORVJfU09OWV9CVEZfUEs0NjdaCQkyMDEKKyNkZWZpbmUgVFVORVJfU09OWV9CVEZfUEI0NjNaCQkyMDIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9nbzcwMDcvd2lzLW92NzY0MC5jIGIvZHJpdmVycy9zdGFnaW5nL2dvNzAwNy93aXMtb3Y3NjQwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjVmMTFlOQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9nbzcwMDcvd2lzLW92NzY0MC5jCkBAIC0wLDAgKzEsMTMwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMDYgTWljcm9uYXMgVVNBIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoVmVyc2lvbiAyKSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKyAqIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxsaW51eC92aWRlb2RldjIuaD4KKworI2luY2x1ZGUgIndpcy1pMmMuaCIKKworc3RydWN0IHdpc19vdjc2NDAgeworCWludCBicmlnaHRuZXNzOworCWludCBjb250cmFzdDsKKwlpbnQgc2F0dXJhdGlvbjsKKwlpbnQgaHVlOworfTsKKworc3RhdGljIHU4IGluaXRpYWxfcmVnaXN0ZXJzW10gPQoreworCTB4MTIsIDB4ODAsCisJMHgxMiwgMHg1NCwKKwkweDE0LCAweDI0LAorCTB4MTUsIDB4MDEsCisJMHgyOCwgMHgyMCwKKwkweDc1LCAweDgyLAorCTB4RkYsIDB4RkYsIC8qIFRlcm1pbmF0b3IgKHJlZyAweEZGIGlzIHVudXNlZCkgKi8KK307CisKK3N0YXRpYyBpbnQgd3JpdGVfcmVncyhzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1OCAqcmVncykKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IHJlZ3NbaV0gIT0gMHhGRjsgaSArPSAyKQorCQlpZiAoaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsIHJlZ3NbaV0sIHJlZ3NbaSArIDFdKSA8IDApCisJCQlyZXR1cm4gLTE7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciB3aXNfb3Y3NjQwX2RyaXZlcjsKKworc3RhdGljIHN0cnVjdCBpMmNfY2xpZW50IHdpc19vdjc2NDBfY2xpZW50X3RlbXBsID0geworCS5uYW1lCQk9ICJPVjc2NDAgKFdJUykiLAorCS5kcml2ZXIJCT0gJndpc19vdjc2NDBfZHJpdmVyLAorfTsKKworc3RhdGljIGludCB3aXNfb3Y3NjQwX2RldGVjdChzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIsIGludCBhZGRyLCBpbnQga2luZCkKK3sKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50OworCisJaWYgKCFpMmNfY2hlY2tfZnVuY3Rpb25hbGl0eShhZGFwdGVyLCBJMkNfRlVOQ19TTUJVU19CWVRFX0RBVEEpKQorCQlyZXR1cm4gMDsKKworCWNsaWVudCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBpMmNfY2xpZW50KSwgR0ZQX0tFUk5FTCk7CisJaWYgKGNsaWVudCA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKwltZW1jcHkoY2xpZW50LCAmd2lzX292NzY0MF9jbGllbnRfdGVtcGwsCisJCQlzaXplb2Yod2lzX292NzY0MF9jbGllbnRfdGVtcGwpKTsKKwljbGllbnQtPmFkYXB0ZXIgPSBhZGFwdGVyOworCWNsaWVudC0+YWRkciA9IGFkZHI7CisJY2xpZW50LT5mbGFncyA9IEkyQ19DTElFTlRfU0NDQjsKKworCXByaW50ayhLRVJOX0RFQlVHCisJCSJ3aXMtb3Y3NjQwOiBpbml0aWFsaXppbmcgT1Y3NjQwIGF0IGFkZHJlc3MgJWQgb24gJXNcbiIsCisJCWFkZHIsIGFkYXB0ZXItPm5hbWUpOworCisJaWYgKHdyaXRlX3JlZ3MoY2xpZW50LCBpbml0aWFsX3JlZ2lzdGVycykgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAid2lzLW92NzY0MDogZXJyb3IgaW5pdGlhbGl6aW5nIE9WNzY0MFxuIik7CisJCWtmcmVlKGNsaWVudCk7CisJCXJldHVybiAwOworCX0KKworCWkyY19hdHRhY2hfY2xpZW50KGNsaWVudCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgd2lzX292NzY0MF9kZXRhY2goc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKK3sKKwlpbnQgcjsKKworCXIgPSBpMmNfZGV0YWNoX2NsaWVudChjbGllbnQpOworCWlmIChyIDwgMCkKKwkJcmV0dXJuIHI7CisKKwlrZnJlZShjbGllbnQpOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgd2lzX292NzY0MF9kcml2ZXIgPSB7CisJLmRyaXZlciA9IHsKKwkJLm5hbWUJPSAiV0lTIE9WNzY0MCBJMkMgZHJpdmVyIiwKKwl9LAorCS5pZAkJPSBJMkNfRFJJVkVSSURfV0lTX09WNzY0MCwKKwkuZGV0YWNoX2NsaWVudAk9IHdpc19vdjc2NDBfZGV0YWNoLAorfTsKKworc3RhdGljIGludCBfX2luaXQgd2lzX292NzY0MF9pbml0KHZvaWQpCit7CisJaW50IHI7CisKKwlyID0gaTJjX2FkZF9kcml2ZXIoJndpc19vdjc2NDBfZHJpdmVyKTsKKwlpZiAociA8IDApCisJCXJldHVybiByOworCXJldHVybiB3aXNfaTJjX2FkZF9kcml2ZXIod2lzX292NzY0MF9kcml2ZXIuaWQsIHdpc19vdjc2NDBfZGV0ZWN0KTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IHdpc19vdjc2NDBfY2xlYW51cCh2b2lkKQoreworCXdpc19pMmNfZGVsX2RyaXZlcih3aXNfb3Y3NjQwX2RldGVjdCk7CisJaTJjX2RlbF9kcml2ZXIoJndpc19vdjc2NDBfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQod2lzX292NzY0MF9pbml0KTsKK21vZHVsZV9leGl0KHdpc19vdjc2NDBfY2xlYW51cCk7CisKK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9nbzcwMDcvd2lzLXNhYTcxMTMuYyBiL2RyaXZlcnMvc3RhZ2luZy9nbzcwMDcvd2lzLXNhYTcxMTMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMWFmZjFiCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2dvNzAwNy93aXMtc2FhNzExMy5jCkBAIC0wLDAgKzEsMzU4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMDYgTWljcm9uYXMgVVNBIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoVmVyc2lvbiAyKSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKyAqIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxsaW51eC92aWRlb2RldjIuaD4KKyNpbmNsdWRlIDxsaW51eC9pb2N0bC5oPgorCisjaW5jbHVkZSAid2lzLWkyYy5oIgorCitzdHJ1Y3Qgd2lzX3NhYTcxMTMgeworCWludCBub3JtOworCWludCBicmlnaHRuZXNzOworCWludCBjb250cmFzdDsKKwlpbnQgc2F0dXJhdGlvbjsKKwlpbnQgaHVlOworfTsKKworc3RhdGljIHU4IGluaXRpYWxfcmVnaXN0ZXJzW10gPQoreworCTB4MDEsIDB4MDgsCisJMHgwMiwgMHhjMCwKKwkweDAzLCAweDMzLAorCTB4MDQsIDB4MDAsCisJMHgwNSwgMHgwMCwKKwkweDA2LCAweGU5LAorCTB4MDcsIDB4MGQsCisJMHgwOCwgMHhkOCwKKwkweDA5LCAweDQwLAorCTB4MGEsIDB4ODAsCisJMHgwYiwgMHg0NywKKwkweDBjLCAweDQwLAorCTB4MGQsIDB4MDAsCisJMHgwZSwgMHgwMSwKKwkweDBmLCAweDJhLAorCTB4MTAsIDB4NDAsCisJMHgxMSwgMHgwYywKKwkweDEyLCAweGZlLAorCTB4MTMsIDB4MDAsCisJMHgxNCwgMHgwMCwKKwkweDE1LCAweDA0LAorCTB4MTYsIDB4MDAsCisJMHgxNywgMHgwMCwKKwkweDE4LCAweDAwLAorCTB4MTksIDB4MDAsCisJMHgxYSwgMHgwMCwKKwkweDFiLCAweDAwLAorCTB4MWMsIDB4MDAsCisJMHgxZCwgMHgwMCwKKwkweDFlLCAweDAwLAorCTB4MWYsIDB4YzgsCisJMHg0MCwgMHgwMCwKKwkweDQxLCAweGZmLAorCTB4NDIsIDB4ZmYsCisJMHg0MywgMHhmZiwKKwkweDQ0LCAweGZmLAorCTB4NDUsIDB4ZmYsCisJMHg0NiwgMHhmZiwKKwkweDQ3LCAweGZmLAorCTB4NDgsIDB4ZmYsCisJMHg0OSwgMHhmZiwKKwkweDRhLCAweGZmLAorCTB4NGIsIDB4ZmYsCisJMHg0YywgMHhmZiwKKwkweDRkLCAweGZmLAorCTB4NGUsIDB4ZmYsCisJMHg0ZiwgMHhmZiwKKwkweDUwLCAweGZmLAorCTB4NTEsIDB4ZmYsCisJMHg1MiwgMHhmZiwKKwkweDUzLCAweGZmLAorCTB4NTQsIDB4ZmYsCisJMHg1NSwgMHhmZiwKKwkweDU2LCAweGZmLAorCTB4NTcsIDB4ZmYsCisJMHg1OCwgMHgwMCwKKwkweDU5LCAweDU0LAorCTB4NWEsIDB4MDcsCisJMHg1YiwgMHg4MywKKwkweDVjLCAweDAwLAorCTB4NWQsIDB4MDAsCisJMHg1ZSwgMHgwMCwKKwkweDVmLCAweDAwLAorCTB4NjAsIDB4MDAsCisJMHg2MSwgMHgwMCwKKwkweDAwLCAweDAwLCAvKiBUZXJtaW5hdG9yIChyZWcgMHgwMCBpcyByZWFkLW9ubHkpICovCit9OworCitzdGF0aWMgaW50IHdyaXRlX3JlZyhzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1OCByZWcsIHU4IHZhbHVlKQoreworCXJldHVybiBpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgcmVnLCB2YWx1ZSk7Cit9CisKK3N0YXRpYyBpbnQgd3JpdGVfcmVncyhzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1OCAqcmVncykKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IHJlZ3NbaV0gIT0gMHgwMDsgaSArPSAyKQorCQlpZiAoaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsIHJlZ3NbaV0sIHJlZ3NbaSArIDFdKSA8IDApCisJCQlyZXR1cm4gLTE7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgd2lzX3NhYTcxMTNfY29tbWFuZChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAorCQkJCXVuc2lnbmVkIGludCBjbWQsIHZvaWQgKmFyZykKK3sKKwlzdHJ1Y3Qgd2lzX3NhYTcxMTMgKmRlYyA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCisJc3dpdGNoIChjbWQpIHsKKwljYXNlIFZJRElPQ19TX0lOUFVUOgorCXsKKwkJaW50ICppbnB1dCA9IGFyZzsKKworCQlpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgMHgwMiwgMHhDMCB8ICppbnB1dCk7CisJCWkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCAweDA5LAorCQkJCSppbnB1dCA8IDYgPyAweDQwIDogMHg4MCk7CisJCWJyZWFrOworCX0KKwljYXNlIFZJRElPQ19TX1NURDoKKwl7CisJCXY0bDJfc3RkX2lkICppbnB1dCA9IGFyZzsKKwkJZGVjLT5ub3JtID0gKmlucHV0OworCQlpZiAoZGVjLT5ub3JtICYgVjRMMl9TVERfTlRTQykgeworCQkJd3JpdGVfcmVnKGNsaWVudCwgMHgwZSwgMHgwMSk7CisJCQl3cml0ZV9yZWcoY2xpZW50LCAweDEwLCAweDQwKTsKKwkJfSBlbHNlIGlmIChkZWMtPm5vcm0gJiBWNEwyX1NURF9QQUwpIHsKKwkJCXdyaXRlX3JlZyhjbGllbnQsIDB4MGUsIDB4MDEpOworCQkJd3JpdGVfcmVnKGNsaWVudCwgMHgxMCwgMHg0OCk7CisJCX0gZWxzZSBpZiAoZGVjLT5ub3JtICogVjRMMl9TVERfU0VDQU0pIHsKKwkJCXdyaXRlX3JlZyhjbGllbnQsIDB4MGUsIDB4NTApOworCQkJd3JpdGVfcmVnKGNsaWVudCwgMHgxMCwgMHg0OCk7CisJCX0KKwkJYnJlYWs7CisJfQorCWNhc2UgVklESU9DX1FVRVJZQ1RSTDoKKwl7CisJCXN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCAqY3RybCA9IGFyZzsKKworCQlzd2l0Y2ggKGN0cmwtPmlkKSB7CisJCWNhc2UgVjRMMl9DSURfQlJJR0hUTkVTUzoKKwkJCWN0cmwtPnR5cGUgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSOworCQkJc3RybmNweShjdHJsLT5uYW1lLCAiQnJpZ2h0bmVzcyIsIHNpemVvZihjdHJsLT5uYW1lKSk7CisJCQljdHJsLT5taW5pbXVtID0gMDsKKwkJCWN0cmwtPm1heGltdW0gPSAyNTU7CisJCQljdHJsLT5zdGVwID0gMTsKKwkJCWN0cmwtPmRlZmF1bHRfdmFsdWUgPSAxMjg7CisJCQljdHJsLT5mbGFncyA9IDA7CisJCQlicmVhazsKKwkJY2FzZSBWNEwyX0NJRF9DT05UUkFTVDoKKwkJCWN0cmwtPnR5cGUgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSOworCQkJc3RybmNweShjdHJsLT5uYW1lLCAiQ29udHJhc3QiLCBzaXplb2YoY3RybC0+bmFtZSkpOworCQkJY3RybC0+bWluaW11bSA9IDA7CisJCQljdHJsLT5tYXhpbXVtID0gMTI3OworCQkJY3RybC0+c3RlcCA9IDE7CisJCQljdHJsLT5kZWZhdWx0X3ZhbHVlID0gNzE7CisJCQljdHJsLT5mbGFncyA9IDA7CisJCQlicmVhazsKKwkJY2FzZSBWNEwyX0NJRF9TQVRVUkFUSU9OOgorCQkJY3RybC0+dHlwZSA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVI7CisJCQlzdHJuY3B5KGN0cmwtPm5hbWUsICJTYXR1cmF0aW9uIiwgc2l6ZW9mKGN0cmwtPm5hbWUpKTsKKwkJCWN0cmwtPm1pbmltdW0gPSAwOworCQkJY3RybC0+bWF4aW11bSA9IDEyNzsKKwkJCWN0cmwtPnN0ZXAgPSAxOworCQkJY3RybC0+ZGVmYXVsdF92YWx1ZSA9IDY0OworCQkJY3RybC0+ZmxhZ3MgPSAwOworCQkJYnJlYWs7CisJCWNhc2UgVjRMMl9DSURfSFVFOgorCQkJY3RybC0+dHlwZSA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVI7CisJCQlzdHJuY3B5KGN0cmwtPm5hbWUsICJIdWUiLCBzaXplb2YoY3RybC0+bmFtZSkpOworCQkJY3RybC0+bWluaW11bSA9IC0xMjg7CisJCQljdHJsLT5tYXhpbXVtID0gMTI3OworCQkJY3RybC0+c3RlcCA9IDE7CisJCQljdHJsLT5kZWZhdWx0X3ZhbHVlID0gMDsKKwkJCWN0cmwtPmZsYWdzID0gMDsKKwkJCWJyZWFrOworCQl9CisJCWJyZWFrOworCX0KKwljYXNlIFZJRElPQ19TX0NUUkw6CisJeworCQlzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsID0gYXJnOworCisJCXN3aXRjaCAoY3RybC0+aWQpIHsKKwkJY2FzZSBWNEwyX0NJRF9CUklHSFRORVNTOgorCQkJaWYgKGN0cmwtPnZhbHVlID4gMjU1KQorCQkJCWRlYy0+YnJpZ2h0bmVzcyA9IDI1NTsKKwkJCWVsc2UgaWYgKGN0cmwtPnZhbHVlIDwgMCkKKwkJCQlkZWMtPmJyaWdodG5lc3MgPSAwOworCQkJZWxzZQorCQkJCWRlYy0+YnJpZ2h0bmVzcyA9IGN0cmwtPnZhbHVlOworCQkJd3JpdGVfcmVnKGNsaWVudCwgMHgwYSwgZGVjLT5icmlnaHRuZXNzKTsKKwkJCWJyZWFrOworCQljYXNlIFY0TDJfQ0lEX0NPTlRSQVNUOgorCQkJaWYgKGN0cmwtPnZhbHVlID4gMTI3KQorCQkJCWRlYy0+Y29udHJhc3QgPSAxMjc7CisJCQllbHNlIGlmIChjdHJsLT52YWx1ZSA8IDApCisJCQkJZGVjLT5jb250cmFzdCA9IDA7CisJCQllbHNlCisJCQkJZGVjLT5jb250cmFzdCA9IGN0cmwtPnZhbHVlOworCQkJd3JpdGVfcmVnKGNsaWVudCwgMHgwYiwgZGVjLT5jb250cmFzdCk7CisJCQlicmVhazsKKwkJY2FzZSBWNEwyX0NJRF9TQVRVUkFUSU9OOgorCQkJaWYgKGN0cmwtPnZhbHVlID4gMTI3KQorCQkJCWRlYy0+c2F0dXJhdGlvbiA9IDEyNzsKKwkJCWVsc2UgaWYgKGN0cmwtPnZhbHVlIDwgMCkKKwkJCQlkZWMtPnNhdHVyYXRpb24gPSAwOworCQkJZWxzZQorCQkJCWRlYy0+c2F0dXJhdGlvbiA9IGN0cmwtPnZhbHVlOworCQkJd3JpdGVfcmVnKGNsaWVudCwgMHgwYywgZGVjLT5zYXR1cmF0aW9uKTsKKwkJCWJyZWFrOworCQljYXNlIFY0TDJfQ0lEX0hVRToKKwkJCWlmIChjdHJsLT52YWx1ZSA+IDEyNykKKwkJCQlkZWMtPmh1ZSA9IDEyNzsKKwkJCWVsc2UgaWYgKGN0cmwtPnZhbHVlIDwgLTEyOCkKKwkJCQlkZWMtPmh1ZSA9IC0xMjg7CisJCQllbHNlCisJCQkJZGVjLT5odWUgPSBjdHJsLT52YWx1ZTsKKwkJCXdyaXRlX3JlZyhjbGllbnQsIDB4MGQsIGRlYy0+aHVlKTsKKwkJCWJyZWFrOworCQl9CisJCWJyZWFrOworCX0KKwljYXNlIFZJRElPQ19HX0NUUkw6CisJeworCQlzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsID0gYXJnOworCisJCXN3aXRjaCAoY3RybC0+aWQpIHsKKwkJY2FzZSBWNEwyX0NJRF9CUklHSFRORVNTOgorCQkJY3RybC0+dmFsdWUgPSBkZWMtPmJyaWdodG5lc3M7CisJCQlicmVhazsKKwkJY2FzZSBWNEwyX0NJRF9DT05UUkFTVDoKKwkJCWN0cmwtPnZhbHVlID0gZGVjLT5jb250cmFzdDsKKwkJCWJyZWFrOworCQljYXNlIFY0TDJfQ0lEX1NBVFVSQVRJT046CisJCQljdHJsLT52YWx1ZSA9IGRlYy0+c2F0dXJhdGlvbjsKKwkJCWJyZWFrOworCQljYXNlIFY0TDJfQ0lEX0hVRToKKwkJCWN0cmwtPnZhbHVlID0gZGVjLT5odWU7CisJCQlicmVhazsKKwkJfQorCQlicmVhazsKKwl9CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgd2lzX3NhYTcxMTNfZHJpdmVyOworCitzdGF0aWMgc3RydWN0IGkyY19jbGllbnQgd2lzX3NhYTcxMTNfY2xpZW50X3RlbXBsID0geworCS5uYW1lCQk9ICJTQUE3MTEzIChXSVMpIiwKKwkuZHJpdmVyCQk9ICZ3aXNfc2FhNzExM19kcml2ZXIsCit9OworCitzdGF0aWMgaW50IHdpc19zYWE3MTEzX2RldGVjdChzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIsIGludCBhZGRyLCBpbnQga2luZCkKK3sKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50OworCXN0cnVjdCB3aXNfc2FhNzExMyAqZGVjOworCisJaWYgKCFpMmNfY2hlY2tfZnVuY3Rpb25hbGl0eShhZGFwdGVyLCBJMkNfRlVOQ19TTUJVU19CWVRFX0RBVEEpKQorCQlyZXR1cm4gMDsKKworCWNsaWVudCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBpMmNfY2xpZW50KSwgR0ZQX0tFUk5FTCk7CisJaWYgKGNsaWVudCA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKwltZW1jcHkoY2xpZW50LCAmd2lzX3NhYTcxMTNfY2xpZW50X3RlbXBsLAorCQkJc2l6ZW9mKHdpc19zYWE3MTEzX2NsaWVudF90ZW1wbCkpOworCWNsaWVudC0+YWRhcHRlciA9IGFkYXB0ZXI7CisJY2xpZW50LT5hZGRyID0gYWRkcjsKKworCWRlYyA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCB3aXNfc2FhNzExMyksIEdGUF9LRVJORUwpOworCWlmIChkZWMgPT0gTlVMTCkgeworCQlrZnJlZShjbGllbnQpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJZGVjLT5ub3JtID0gVjRMMl9TVERfTlRTQzsKKwlkZWMtPmJyaWdodG5lc3MgPSAxMjg7CisJZGVjLT5jb250cmFzdCA9IDcxOworCWRlYy0+c2F0dXJhdGlvbiA9IDY0OworCWRlYy0+aHVlID0gMDsKKwlpMmNfc2V0X2NsaWVudGRhdGEoY2xpZW50LCBkZWMpOworCisJcHJpbnRrKEtFUk5fREVCVUcKKwkJIndpcy1zYWE3MTEzOiBpbml0aWFsaXppbmcgU0FBNzExMyBhdCBhZGRyZXNzICVkIG9uICVzXG4iLAorCQlhZGRyLCBhZGFwdGVyLT5uYW1lKTsKKworCWlmICh3cml0ZV9yZWdzKGNsaWVudCwgaW5pdGlhbF9yZWdpc3RlcnMpIDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIKKwkJCSJ3aXMtc2FhNzExMzogZXJyb3IgaW5pdGlhbGl6aW5nIFNBQTcxMTNcbiIpOworCQlrZnJlZShjbGllbnQpOworCQlrZnJlZShkZWMpOworCQlyZXR1cm4gMDsKKwl9CisKKwlpMmNfYXR0YWNoX2NsaWVudChjbGllbnQpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHdpc19zYWE3MTEzX2RldGFjaChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQoreworCXN0cnVjdCB3aXNfc2FhNzExMyAqZGVjID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisJaW50IHI7CisKKwlyID0gaTJjX2RldGFjaF9jbGllbnQoY2xpZW50KTsKKwlpZiAociA8IDApCisJCXJldHVybiByOworCisJa2ZyZWUoY2xpZW50KTsKKwlrZnJlZShkZWMpOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgd2lzX3NhYTcxMTNfZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCS5uYW1lCT0gIldJUyBTQUE3MTEzIEkyQyBkcml2ZXIiLAorCX0sCisJLmlkCQk9IEkyQ19EUklWRVJJRF9XSVNfU0FBNzExMywKKwkuZGV0YWNoX2NsaWVudAk9IHdpc19zYWE3MTEzX2RldGFjaCwKKwkuY29tbWFuZAk9IHdpc19zYWE3MTEzX2NvbW1hbmQsCit9OworCitzdGF0aWMgaW50IF9faW5pdCB3aXNfc2FhNzExM19pbml0KHZvaWQpCit7CisJaW50IHI7CisKKwlyID0gaTJjX2FkZF9kcml2ZXIoJndpc19zYWE3MTEzX2RyaXZlcik7CisJaWYgKHIgPCAwKQorCQlyZXR1cm4gcjsKKwlyZXR1cm4gd2lzX2kyY19hZGRfZHJpdmVyKHdpc19zYWE3MTEzX2RyaXZlci5pZCwgd2lzX3NhYTcxMTNfZGV0ZWN0KTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IHdpc19zYWE3MTEzX2NsZWFudXAodm9pZCkKK3sKKwl3aXNfaTJjX2RlbF9kcml2ZXIod2lzX3NhYTcxMTNfZGV0ZWN0KTsKKwlpMmNfZGVsX2RyaXZlcigmd2lzX3NhYTcxMTNfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQod2lzX3NhYTcxMTNfaW5pdCk7Cittb2R1bGVfZXhpdCh3aXNfc2FhNzExM19jbGVhbnVwKTsKKworTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2dvNzAwNy93aXMtc2FhNzExNS5jIGIvZHJpdmVycy9zdGFnaW5nL2dvNzAwNy93aXMtc2FhNzExNS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVjOTRjODgKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvZ283MDA3L3dpcy1zYWE3MTE1LmMKQEAgLTAsMCArMSw0OTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwNiBNaWNyb25hcyBVU0EgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChWZXJzaW9uIDIpIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorICogSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24gTUEgMDIxMTEtMTMwNywgVVNBLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Mi5oPgorI2luY2x1ZGUgPGxpbnV4L2lvY3RsLmg+CisKKyNpbmNsdWRlICJ3aXMtaTJjLmgiCisKK3N0cnVjdCB3aXNfc2FhNzExNSB7CisJaW50IG5vcm07CisJaW50IGJyaWdodG5lc3M7CisJaW50IGNvbnRyYXN0OworCWludCBzYXR1cmF0aW9uOworCWludCBodWU7Cit9OworCitzdGF0aWMgdTggaW5pdGlhbF9yZWdpc3RlcnNbXSA9Cit7CisJMHgwMSwgMHgwOCwKKwkweDAyLCAweGMwLAorCTB4MDMsIDB4MjAsCisJMHgwNCwgMHg4MCwKKwkweDA1LCAweDgwLAorCTB4MDYsIDB4ZWIsCisJMHgwNywgMHhlMCwKKwkweDA4LCAweGYwLAkvKiBhbHdheXMgdG9nZ2xlIEZJRCAqLworCTB4MDksIDB4NDAsCisJMHgwYSwgMHg4MCwKKwkweDBiLCAweDQwLAorCTB4MGMsIDB4NDAsCisJMHgwZCwgMHgwMCwKKwkweDBlLCAweDAzLAorCTB4MGYsIDB4MmEsCisJMHgxMCwgMHgwZSwKKwkweDExLCAweDAwLAorCTB4MTIsIDB4OGQsCisJMHgxMywgMHgwMCwKKwkweDE0LCAweDAwLAorCTB4MTUsIDB4MTEsCisJMHgxNiwgMHgwMSwKKwkweDE3LCAweGRhLAorCTB4MTgsIDB4NDAsCisJMHgxOSwgMHg4MCwKKwkweDFhLCAweDAwLAorCTB4MWIsIDB4NDIsCisJMHgxYywgMHhhOSwKKwkweDMwLCAweDY2LAorCTB4MzEsIDB4OTAsCisJMHgzMiwgMHgwMSwKKwkweDM0LCAweDAwLAorCTB4MzUsIDB4MDAsCisJMHgzNiwgMHgyMCwKKwkweDM4LCAweDAzLAorCTB4MzksIDB4MjAsCisJMHgzYSwgMHg4OCwKKwkweDQwLCAweDAwLAorCTB4NDEsIDB4ZmYsCisJMHg0MiwgMHhmZiwKKwkweDQzLCAweGZmLAorCTB4NDQsIDB4ZmYsCisJMHg0NSwgMHhmZiwKKwkweDQ2LCAweGZmLAorCTB4NDcsIDB4ZmYsCisJMHg0OCwgMHhmZiwKKwkweDQ5LCAweGZmLAorCTB4NGEsIDB4ZmYsCisJMHg0YiwgMHhmZiwKKwkweDRjLCAweGZmLAorCTB4NGQsIDB4ZmYsCisJMHg0ZSwgMHhmZiwKKwkweDRmLCAweGZmLAorCTB4NTAsIDB4ZmYsCisJMHg1MSwgMHhmZiwKKwkweDUyLCAweGZmLAorCTB4NTMsIDB4ZmYsCisJMHg1NCwgMHhmNCAvKjB4ZmYqLywKKwkweDU1LCAweGZmLAorCTB4NTYsIDB4ZmYsCisJMHg1NywgMHhmZiwKKwkweDU4LCAweDQwLAorCTB4NTksIDB4NDcsCisJMHg1YSwgMHgwNiAvKjB4MDMqLywKKwkweDViLCAweDgzLAorCTB4NWQsIDB4MDYsCisJMHg1ZSwgMHgwMCwKKwkweDgwLCAweDMwLCAvKiB3aW5kb3cgZGVmaW5lZCBzY2FsZXIgb3BlcmF0aW9uLCB0YXNrIEEgYW5kIEIgZW5hYmxlZCAqLworCTB4ODEsIDB4MDMsIC8qIHVzZSBzY2FsZXIgZGF0YXBhdGggZ2VuZXJhdGVkIFYgKi8KKwkweDgzLCAweDAwLAorCTB4ODQsIDB4MDAsCisJMHg4NSwgMHgwMCwKKwkweDg2LCAweDQ1LAorCTB4ODcsIDB4MzEsCisJMHg4OCwgMHhjMCwKKwkweDkwLCAweDAyLCAvKiB0YXNrIEEgcHJvY2VzcyB0b3AgZmllbGQgKi8KKwkweDkxLCAweDA4LAorCTB4OTIsIDB4MDksCisJMHg5MywgMHg4MCwKKwkweDk0LCAweDA2LAorCTB4OTUsIDB4MDAsCisJMHg5NiwgMHhjMCwKKwkweDk3LCAweDAyLAorCTB4OTgsIDB4MTIsCisJMHg5OSwgMHgwMCwKKwkweDlhLCAweGYyLAorCTB4OWIsIDB4MDAsCisJMHg5YywgMHhkMCwKKwkweDlkLCAweDAyLAorCTB4OWUsIDB4ZjIsCisJMHg5ZiwgMHgwMCwKKwkweGEwLCAweDAxLAorCTB4YTEsIDB4MDEsCisJMHhhMiwgMHgwMSwKKwkweGE0LCAweDgwLAorCTB4YTUsIDB4NDAsCisJMHhhNiwgMHg0MCwKKwkweGE4LCAweDAwLAorCTB4YTksIDB4MDQsCisJMHhhYSwgMHgwMCwKKwkweGFjLCAweDAwLAorCTB4YWQsIDB4MDIsCisJMHhhZSwgMHgwMCwKKwkweGIwLCAweDAwLAorCTB4YjEsIDB4MDQsCisJMHhiMiwgMHgwMCwKKwkweGIzLCAweDA0LAorCTB4YjQsIDB4MDAsCisJMHhiOCwgMHgwMCwKKwkweGJjLCAweDAwLAorCTB4YzAsIDB4MDMsCS8qIHRhc2sgQiBwcm9jZXNzIGJvdHRvbSBmaWVsZCAqLworCTB4YzEsIDB4MDgsCisJMHhjMiwgMHgwOSwKKwkweGMzLCAweDgwLAorCTB4YzQsIDB4MDYsCisJMHhjNSwgMHgwMCwKKwkweGM2LCAweGMwLAorCTB4YzcsIDB4MDIsCisJMHhjOCwgMHgxMiwKKwkweGM5LCAweDAwLAorCTB4Y2EsIDB4ZjIsCisJMHhjYiwgMHgwMCwKKwkweGNjLCAweGQwLAorCTB4Y2QsIDB4MDIsCisJMHhjZSwgMHhmMiwKKwkweGNmLCAweDAwLAorCTB4ZDAsIDB4MDEsCisJMHhkMSwgMHgwMSwKKwkweGQyLCAweDAxLAorCTB4ZDQsIDB4ODAsCisJMHhkNSwgMHg0MCwKKwkweGQ2LCAweDQwLAorCTB4ZDgsIDB4MDAsCisJMHhkOSwgMHgwNCwKKwkweGRhLCAweDAwLAorCTB4ZGMsIDB4MDAsCisJMHhkZCwgMHgwMiwKKwkweGRlLCAweDAwLAorCTB4ZTAsIDB4MDAsCisJMHhlMSwgMHgwNCwKKwkweGUyLCAweDAwLAorCTB4ZTMsIDB4MDQsCisJMHhlNCwgMHgwMCwKKwkweGU4LCAweDAwLAorCTB4ODgsIDB4ZjAsIC8qIEVuZCBvZiBvcmlnaW5hbCBzdGF0aWMgbGlzdCAqLworCTB4MDAsIDB4MDAsIC8qIFRlcm1pbmF0b3IgKHJlZyAweDAwIGlzIHJlYWQtb25seSkgKi8KK307CisKK3N0YXRpYyBpbnQgd3JpdGVfcmVnKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHU4IHJlZywgdTggdmFsdWUpCit7CisJcmV0dXJuIGkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCByZWcsIHZhbHVlKTsKK30KKworc3RhdGljIGludCB3cml0ZV9yZWdzKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHU4ICpyZWdzKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgcmVnc1tpXSAhPSAweDAwOyBpICs9IDIpCisJCWlmIChpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgcmVnc1tpXSwgcmVnc1tpICsgMV0pIDwgMCkKKwkJCXJldHVybiAtMTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB3aXNfc2FhNzExNV9jb21tYW5kKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCisJCQkJdW5zaWduZWQgaW50IGNtZCwgdm9pZCAqYXJnKQoreworCXN0cnVjdCB3aXNfc2FhNzExNSAqZGVjID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisKKwlzd2l0Y2ggKGNtZCkgeworCWNhc2UgVklESU9DX1NfSU5QVVQ6CisJeworCQlpbnQgKmlucHV0ID0gYXJnOworCisJCWkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCAweDAyLCAweEMwIHwgKmlucHV0KTsKKwkJaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsIDB4MDksCisJCQkJKmlucHV0IDwgNiA/IDB4NDAgOiAweEMwKTsKKwkJYnJlYWs7CisJfQorCWNhc2UgREVDT0RFUl9TRVRfUkVTT0xVVElPTjoKKwl7CisJCXN0cnVjdCB2aWRlb19kZWNvZGVyX3Jlc29sdXRpb24gKnJlcyA9IGFyZzsKKwkJLyogQ291cnNlLWdyYWluZWQgc2NhbGVyICovCisJCWludCBoX2ludGVnZXJfc2NhbGVyID0gcmVzLT53aWR0aCA8IDcwNCA/IDcwNCAvIHJlcy0+d2lkdGggOiAxOworCQkvKiBGaW5lLWdyYWluZWQgc2NhbGVyIHRvIHRha2UgY2FyZSBvZiByZW1haW5kZXIgKi8KKwkJaW50IGhfc2NhbGluZ19pbmNyZW1lbnQgPSAoNzA0IC8gaF9pbnRlZ2VyX3NjYWxlcikgKgorCQkJCQkxMDI0IC8gcmVzLT53aWR0aDsKKwkJLyogRmluZS1ncmFpbmVkIHNjYWxlciBvbmx5ICovCisJCWludCB2X3NjYWxpbmdfaW5jcmVtZW50ID0gKGRlYy0+bm9ybSAmIFY0TDJfU1REX05UU0MgPworCQkJCTI0MCA6IDI4OCkgKiAxMDI0IC8gcmVzLT5oZWlnaHQ7CisJCXU4IHJlZ3NbXSA9IHsKKwkJCTB4ODgsCTB4YzAsCisJCQkweDljLAlyZXMtPndpZHRoICYgMHhmZiwKKwkJCTB4OWQsCXJlcy0+d2lkdGggPj4gOCwKKwkJCTB4OWUsCXJlcy0+aGVpZ2h0ICYgMHhmZiwKKwkJCTB4OWYsCXJlcy0+aGVpZ2h0ID4+IDgsCisJCQkweGEwLAloX2ludGVnZXJfc2NhbGVyLAorCQkJMHhhMSwJMSwKKwkJCTB4YTIsCTEsCisJCQkweGE4LAloX3NjYWxpbmdfaW5jcmVtZW50ICYgMHhmZiwKKwkJCTB4YTksCWhfc2NhbGluZ19pbmNyZW1lbnQgPj4gOCwKKwkJCTB4YWMsCShoX3NjYWxpbmdfaW5jcmVtZW50IC8gMikgJiAweGZmLAorCQkJMHhhZCwJKGhfc2NhbGluZ19pbmNyZW1lbnQgLyAyKSA+PiA4LAorCQkJMHhiMCwJdl9zY2FsaW5nX2luY3JlbWVudCAmIDB4ZmYsCisJCQkweGIxLAl2X3NjYWxpbmdfaW5jcmVtZW50ID4+IDgsCisJCQkweGIyLAl2X3NjYWxpbmdfaW5jcmVtZW50ICYgMHhmZiwKKwkJCTB4YjMsCXZfc2NhbGluZ19pbmNyZW1lbnQgPj4gOCwKKwkJCTB4Y2MsCXJlcy0+d2lkdGggJiAweGZmLAorCQkJMHhjZCwJcmVzLT53aWR0aCA+PiA4LAorCQkJMHhjZSwJcmVzLT5oZWlnaHQgJiAweGZmLAorCQkJMHhjZiwJcmVzLT5oZWlnaHQgPj4gOCwKKwkJCTB4ZDAsCWhfaW50ZWdlcl9zY2FsZXIsCisJCQkweGQxLAkxLAorCQkJMHhkMiwJMSwKKwkJCTB4ZDgsCWhfc2NhbGluZ19pbmNyZW1lbnQgJiAweGZmLAorCQkJMHhkOSwJaF9zY2FsaW5nX2luY3JlbWVudCA+PiA4LAorCQkJMHhkYywJKGhfc2NhbGluZ19pbmNyZW1lbnQgLyAyKSAmIDB4ZmYsCisJCQkweGRkLAkoaF9zY2FsaW5nX2luY3JlbWVudCAvIDIpID4+IDgsCisJCQkweGUwLAl2X3NjYWxpbmdfaW5jcmVtZW50ICYgMHhmZiwKKwkJCTB4ZTEsCXZfc2NhbGluZ19pbmNyZW1lbnQgPj4gOCwKKwkJCTB4ZTIsCXZfc2NhbGluZ19pbmNyZW1lbnQgJiAweGZmLAorCQkJMHhlMywJdl9zY2FsaW5nX2luY3JlbWVudCA+PiA4LAorCQkJMHg4OCwJMHhmMCwKKwkJCTAsCTAsCisJCX07CisJCXdyaXRlX3JlZ3MoY2xpZW50LCByZWdzKTsKKwkJYnJlYWs7CisJfQorCWNhc2UgVklESU9DX1NfU1REOgorCXsKKwkJdjRsMl9zdGRfaWQgKmlucHV0ID0gYXJnOworCQl1OCByZWdzW10gPSB7CisJCQkweDg4LAkweGMwLAorCQkJMHg5OCwJKmlucHV0ICYgVjRMMl9TVERfTlRTQyA/IDB4MTIgOiAweDE2LAorCQkJMHg5YSwJKmlucHV0ICYgVjRMMl9TVERfTlRTQyA/IDB4ZjIgOiAweDIwLAorCQkJMHg5YiwJKmlucHV0ICYgVjRMMl9TVERfTlRTQyA/IDB4MDAgOiAweDAxLAorCQkJMHhjOCwJKmlucHV0ICYgVjRMMl9TVERfTlRTQyA/IDB4MTIgOiAweDE2LAorCQkJMHhjYSwJKmlucHV0ICYgVjRMMl9TVERfTlRTQyA/IDB4ZjIgOiAweDIwLAorCQkJMHhjYiwJKmlucHV0ICYgVjRMMl9TVERfTlRTQyA/IDB4MDAgOiAweDAxLAorCQkJMHg4OCwJMHhmMCwKKwkJCTB4MzAsCSppbnB1dCAmIFY0TDJfU1REX05UU0MgPyAweDY2IDogMHgwMCwKKwkJCTB4MzEsCSppbnB1dCAmIFY0TDJfU1REX05UU0MgPyAweDkwIDogMHhlMCwKKwkJCTAsCTAsCisJCX07CisJCXdyaXRlX3JlZ3MoY2xpZW50LCByZWdzKTsKKwkJZGVjLT5ub3JtID0gKmlucHV0OworCQlicmVhazsKKwl9CisJY2FzZSBWSURJT0NfUVVFUllDVFJMOgorCXsKKwkJc3RydWN0IHY0bDJfcXVlcnljdHJsICpjdHJsID0gYXJnOworCisJCXN3aXRjaCAoY3RybC0+aWQpIHsKKwkJY2FzZSBWNEwyX0NJRF9CUklHSFRORVNTOgorCQkJY3RybC0+dHlwZSA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVI7CisJCQlzdHJuY3B5KGN0cmwtPm5hbWUsICJCcmlnaHRuZXNzIiwgc2l6ZW9mKGN0cmwtPm5hbWUpKTsKKwkJCWN0cmwtPm1pbmltdW0gPSAwOworCQkJY3RybC0+bWF4aW11bSA9IDI1NTsKKwkJCWN0cmwtPnN0ZXAgPSAxOworCQkJY3RybC0+ZGVmYXVsdF92YWx1ZSA9IDEyODsKKwkJCWN0cmwtPmZsYWdzID0gMDsKKwkJCWJyZWFrOworCQljYXNlIFY0TDJfQ0lEX0NPTlRSQVNUOgorCQkJY3RybC0+dHlwZSA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVI7CisJCQlzdHJuY3B5KGN0cmwtPm5hbWUsICJDb250cmFzdCIsIHNpemVvZihjdHJsLT5uYW1lKSk7CisJCQljdHJsLT5taW5pbXVtID0gMDsKKwkJCWN0cmwtPm1heGltdW0gPSAxMjc7CisJCQljdHJsLT5zdGVwID0gMTsKKwkJCWN0cmwtPmRlZmF1bHRfdmFsdWUgPSA2NDsKKwkJCWN0cmwtPmZsYWdzID0gMDsKKwkJCWJyZWFrOworCQljYXNlIFY0TDJfQ0lEX1NBVFVSQVRJT046CisJCQljdHJsLT50eXBlID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUjsKKwkJCXN0cm5jcHkoY3RybC0+bmFtZSwgIlNhdHVyYXRpb24iLCBzaXplb2YoY3RybC0+bmFtZSkpOworCQkJY3RybC0+bWluaW11bSA9IDA7CisJCQljdHJsLT5tYXhpbXVtID0gMTI3OworCQkJY3RybC0+c3RlcCA9IDE7CisJCQljdHJsLT5kZWZhdWx0X3ZhbHVlID0gNjQ7CisJCQljdHJsLT5mbGFncyA9IDA7CisJCQlicmVhazsKKwkJY2FzZSBWNEwyX0NJRF9IVUU6CisJCQljdHJsLT50eXBlID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUjsKKwkJCXN0cm5jcHkoY3RybC0+bmFtZSwgIkh1ZSIsIHNpemVvZihjdHJsLT5uYW1lKSk7CisJCQljdHJsLT5taW5pbXVtID0gLTEyODsKKwkJCWN0cmwtPm1heGltdW0gPSAxMjc7CisJCQljdHJsLT5zdGVwID0gMTsKKwkJCWN0cmwtPmRlZmF1bHRfdmFsdWUgPSAwOworCQkJY3RybC0+ZmxhZ3MgPSAwOworCQkJYnJlYWs7CisJCX0KKwkJYnJlYWs7CisJfQorCWNhc2UgVklESU9DX1NfQ1RSTDoKKwl7CisJCXN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwgPSBhcmc7CisKKwkJc3dpdGNoIChjdHJsLT5pZCkgeworCQljYXNlIFY0TDJfQ0lEX0JSSUdIVE5FU1M6CisJCQlpZiAoY3RybC0+dmFsdWUgPiAyNTUpCisJCQkJZGVjLT5icmlnaHRuZXNzID0gMjU1OworCQkJZWxzZSBpZiAoY3RybC0+dmFsdWUgPCAwKQorCQkJCWRlYy0+YnJpZ2h0bmVzcyA9IDA7CisJCQllbHNlCisJCQkJZGVjLT5icmlnaHRuZXNzID0gY3RybC0+dmFsdWU7CisJCQl3cml0ZV9yZWcoY2xpZW50LCAweDBhLCBkZWMtPmJyaWdodG5lc3MpOworCQkJYnJlYWs7CisJCWNhc2UgVjRMMl9DSURfQ09OVFJBU1Q6CisJCQlpZiAoY3RybC0+dmFsdWUgPiAxMjcpCisJCQkJZGVjLT5jb250cmFzdCA9IDEyNzsKKwkJCWVsc2UgaWYgKGN0cmwtPnZhbHVlIDwgMCkKKwkJCQlkZWMtPmNvbnRyYXN0ID0gMDsKKwkJCWVsc2UKKwkJCQlkZWMtPmNvbnRyYXN0ID0gY3RybC0+dmFsdWU7CisJCQl3cml0ZV9yZWcoY2xpZW50LCAweDBiLCBkZWMtPmNvbnRyYXN0KTsKKwkJCWJyZWFrOworCQljYXNlIFY0TDJfQ0lEX1NBVFVSQVRJT046CisJCQlpZiAoY3RybC0+dmFsdWUgPiAxMjcpCisJCQkJZGVjLT5zYXR1cmF0aW9uID0gMTI3OworCQkJZWxzZSBpZiAoY3RybC0+dmFsdWUgPCAwKQorCQkJCWRlYy0+c2F0dXJhdGlvbiA9IDA7CisJCQllbHNlCisJCQkJZGVjLT5zYXR1cmF0aW9uID0gY3RybC0+dmFsdWU7CisJCQl3cml0ZV9yZWcoY2xpZW50LCAweDBjLCBkZWMtPnNhdHVyYXRpb24pOworCQkJYnJlYWs7CisJCWNhc2UgVjRMMl9DSURfSFVFOgorCQkJaWYgKGN0cmwtPnZhbHVlID4gMTI3KQorCQkJCWRlYy0+aHVlID0gMTI3OworCQkJZWxzZSBpZiAoY3RybC0+dmFsdWUgPCAtMTI4KQorCQkJCWRlYy0+aHVlID0gLTEyODsKKwkJCWVsc2UKKwkJCQlkZWMtPmh1ZSA9IGN0cmwtPnZhbHVlOworCQkJd3JpdGVfcmVnKGNsaWVudCwgMHgwZCwgZGVjLT5odWUpOworCQkJYnJlYWs7CisJCX0KKwkJYnJlYWs7CisJfQorCWNhc2UgVklESU9DX0dfQ1RSTDoKKwl7CisJCXN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwgPSBhcmc7CisKKwkJc3dpdGNoIChjdHJsLT5pZCkgeworCQljYXNlIFY0TDJfQ0lEX0JSSUdIVE5FU1M6CisJCQljdHJsLT52YWx1ZSA9IGRlYy0+YnJpZ2h0bmVzczsKKwkJCWJyZWFrOworCQljYXNlIFY0TDJfQ0lEX0NPTlRSQVNUOgorCQkJY3RybC0+dmFsdWUgPSBkZWMtPmNvbnRyYXN0OworCQkJYnJlYWs7CisJCWNhc2UgVjRMMl9DSURfU0FUVVJBVElPTjoKKwkJCWN0cmwtPnZhbHVlID0gZGVjLT5zYXR1cmF0aW9uOworCQkJYnJlYWs7CisJCWNhc2UgVjRMMl9DSURfSFVFOgorCQkJY3RybC0+dmFsdWUgPSBkZWMtPmh1ZTsKKwkJCWJyZWFrOworCQl9CisJCWJyZWFrOworCX0KKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciB3aXNfc2FhNzExNV9kcml2ZXI7CisKK3N0YXRpYyBzdHJ1Y3QgaTJjX2NsaWVudCB3aXNfc2FhNzExNV9jbGllbnRfdGVtcGwgPSB7CisJLm5hbWUJCT0gIlNBQTcxMTUgKFdJUykiLAorCS5kcml2ZXIJCT0gJndpc19zYWE3MTE1X2RyaXZlciwKK307CisKK3N0YXRpYyBpbnQgd2lzX3NhYTcxMTVfZGV0ZWN0KHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlciwgaW50IGFkZHIsIGludCBraW5kKQoreworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQ7CisJc3RydWN0IHdpc19zYWE3MTE1ICpkZWM7CisKKwlpZiAoIWkyY19jaGVja19mdW5jdGlvbmFsaXR5KGFkYXB0ZXIsIEkyQ19GVU5DX1NNQlVTX0JZVEVfREFUQSkpCisJCXJldHVybiAwOworCisJY2xpZW50ID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGkyY19jbGllbnQpLCBHRlBfS0VSTkVMKTsKKwlpZiAoY2xpZW50ID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCW1lbWNweShjbGllbnQsICZ3aXNfc2FhNzExNV9jbGllbnRfdGVtcGwsCisJCQlzaXplb2Yod2lzX3NhYTcxMTVfY2xpZW50X3RlbXBsKSk7CisJY2xpZW50LT5hZGFwdGVyID0gYWRhcHRlcjsKKwljbGllbnQtPmFkZHIgPSBhZGRyOworCisJZGVjID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHdpc19zYWE3MTE1KSwgR0ZQX0tFUk5FTCk7CisJaWYgKGRlYyA9PSBOVUxMKSB7CisJCWtmcmVlKGNsaWVudCk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwlkZWMtPm5vcm0gPSBWNEwyX1NURF9OVFNDOworCWRlYy0+YnJpZ2h0bmVzcyA9IDEyODsKKwlkZWMtPmNvbnRyYXN0ID0gNjQ7CisJZGVjLT5zYXR1cmF0aW9uID0gNjQ7CisJZGVjLT5odWUgPSAwOworCWkyY19zZXRfY2xpZW50ZGF0YShjbGllbnQsIGRlYyk7CisKKwlwcmludGsoS0VSTl9ERUJVRworCQkid2lzLXNhYTcxMTU6IGluaXRpYWxpemluZyBTQUE3MTE1IGF0IGFkZHJlc3MgJWQgb24gJXNcbiIsCisJCWFkZHIsIGFkYXB0ZXItPm5hbWUpOworCisJaWYgKHdyaXRlX3JlZ3MoY2xpZW50LCBpbml0aWFsX3JlZ2lzdGVycykgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUgorCQkJIndpcy1zYWE3MTE1OiBlcnJvciBpbml0aWFsaXppbmcgU0FBNzExNVxuIik7CisJCWtmcmVlKGNsaWVudCk7CisJCWtmcmVlKGRlYyk7CisJCXJldHVybiAwOworCX0KKworCWkyY19hdHRhY2hfY2xpZW50KGNsaWVudCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgd2lzX3NhYTcxMTVfZGV0YWNoKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCit7CisJc3RydWN0IHdpc19zYWE3MTE1ICpkZWMgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKwlpbnQgcjsKKworCXIgPSBpMmNfZGV0YWNoX2NsaWVudChjbGllbnQpOworCWlmIChyIDwgMCkKKwkJcmV0dXJuIHI7CisKKwlrZnJlZShjbGllbnQpOworCWtmcmVlKGRlYyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciB3aXNfc2FhNzExNV9kcml2ZXIgPSB7CisJLmRyaXZlciA9IHsKKwkJLm5hbWUJPSAiV0lTIFNBQTcxMTUgSTJDIGRyaXZlciIsCisJfSwKKwkuaWQJCT0gSTJDX0RSSVZFUklEX1dJU19TQUE3MTE1LAorCS5kZXRhY2hfY2xpZW50CT0gd2lzX3NhYTcxMTVfZGV0YWNoLAorCS5jb21tYW5kCT0gd2lzX3NhYTcxMTVfY29tbWFuZCwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHdpc19zYWE3MTE1X2luaXQodm9pZCkKK3sKKwlpbnQgcjsKKworCXIgPSBpMmNfYWRkX2RyaXZlcigmd2lzX3NhYTcxMTVfZHJpdmVyKTsKKwlpZiAociA8IDApCisJCXJldHVybiByOworCXJldHVybiB3aXNfaTJjX2FkZF9kcml2ZXIod2lzX3NhYTcxMTVfZHJpdmVyLmlkLCB3aXNfc2FhNzExNV9kZXRlY3QpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgd2lzX3NhYTcxMTVfY2xlYW51cCh2b2lkKQoreworCXdpc19pMmNfZGVsX2RyaXZlcih3aXNfc2FhNzExNV9kZXRlY3QpOworCWkyY19kZWxfZHJpdmVyKCZ3aXNfc2FhNzExNV9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdCh3aXNfc2FhNzExNV9pbml0KTsKK21vZHVsZV9leGl0KHdpc19zYWE3MTE1X2NsZWFudXApOworCitNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZ283MDA3L3dpcy1zb255LXR1bmVyLmMgYi9kcml2ZXJzL3N0YWdpbmcvZ283MDA3L3dpcy1zb255LXR1bmVyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTk5N2ZiNAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9nbzcwMDcvd2lzLXNvbnktdHVuZXIuYwpAQCAtMCwwICsxLDc0MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA2IE1pY3JvbmFzIFVTQSBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKFZlcnNpb24gMikgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisgKiBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+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+YXVkbW9kZSkgeworCQkJCXQtPmF1ZG1vZGUgPSB0dW4tPmF1ZG1vZGU7CisJCQkJbXB4X3NldHVwKGNsaWVudCk7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBUVU5FUl9TT05ZX0JURl9QSzQ2N1o6CisJCWNhc2UgVFVORVJfU09OWV9CVEZfUEI0NjNaOgorCQkJYnJlYWs7CisJCX0KKwkJcmV0dXJuIDA7CisJfQorCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIHdpc19zb255X3R1bmVyX2RyaXZlcjsKKworc3RhdGljIHN0cnVjdCBpMmNfY2xpZW50IHdpc19zb255X3R1bmVyX2NsaWVudF90ZW1wbCA9IHsKKwkubmFtZQkJPSAiU29ueSBUViBUdW5lciAoV0lTKSIsCisJLmRyaXZlcgkJPSAmd2lzX3NvbnlfdHVuZXJfZHJpdmVyLAorfTsKKworc3RhdGljIGludCB3aXNfc29ueV90dW5lcl9kZXRlY3Qoc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyLAorCQkJCQlpbnQgYWRkciwgaW50IGtpbmQpCit7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudDsKKwlzdHJ1Y3Qgd2lzX3NvbnlfdHVuZXIgKnQ7CisKKwlpZiAoIWkyY19jaGVja19mdW5jdGlvbmFsaXR5KGFkYXB0ZXIsIEkyQ19GVU5DX1NNQlVTX0kyQ19CTE9DSykpCisJCXJldHVybiAwOworCisJY2xpZW50ID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGkyY19jbGllbnQpLCBHRlBfS0VSTkVMKTsKKwlpZiAoY2xpZW50ID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCW1lbWNweShjbGllbnQsICZ3aXNfc29ueV90dW5lcl9jbGllbnRfdGVtcGwsCisJCQlzaXplb2Yod2lzX3NvbnlfdHVuZXJfY2xpZW50X3RlbXBsKSk7CisJY2xpZW50LT5hZGFwdGVyID0gYWRhcHRlcjsKKwljbGllbnQtPmFkZHIgPSBhZGRyOworCisJdCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCB3aXNfc29ueV90dW5lciksIEdGUF9LRVJORUwpOworCWlmICh0ID09IE5VTEwpIHsKKwkJa2ZyZWUoY2xpZW50KTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCXQtPnR5cGUgPSAtMTsKKwl0LT5mcmVxID0gMDsKKwl0LT5tcHhtb2RlID0gMDsKKwl0LT5hdWRtb2RlID0gVjRMMl9UVU5FUl9NT0RFX1NURVJFTzsKKwlpMmNfc2V0X2NsaWVudGRhdGEoY2xpZW50LCB0KTsKKworCXByaW50ayhLRVJOX0RFQlVHCisJCSJ3aXMtc29ueS10dW5lcjogaW5pdGlhbGl6aW5nIHR1bmVyIGF0IGFkZHJlc3MgJWQgb24gJXNcbiIsCisJCWFkZHIsIGFkYXB0ZXItPm5hbWUpOworCisJaTJjX2F0dGFjaF9jbGllbnQoY2xpZW50KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHdpc19zb255X3R1bmVyX2RldGFjaChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQoreworCXN0cnVjdCB3aXNfc29ueV90dW5lciAqdCA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCWludCByOworCisJciA9IGkyY19kZXRhY2hfY2xpZW50KGNsaWVudCk7CisJaWYgKHIgPCAwKQorCQlyZXR1cm4gcjsKKworCWtmcmVlKHQpOworCWtmcmVlKGNsaWVudCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciB3aXNfc29ueV90dW5lcl9kcml2ZXIgPSB7CisJLmRyaXZlciA9IHsKKwkJLm5hbWUJPSAiV0lTIFNvbnkgVFYgVHVuZXIgSTJDIGRyaXZlciIsCisJfSwKKwkuaWQJCT0gSTJDX0RSSVZFUklEX1dJU19TT05ZX1RVTkVSLAorCS5kZXRhY2hfY2xpZW50CT0gd2lzX3NvbnlfdHVuZXJfZGV0YWNoLAorCS5jb21tYW5kCT0gdHVuZXJfY29tbWFuZCwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHdpc19zb255X3R1bmVyX2luaXQodm9pZCkKK3sKKwlpbnQgcjsKKworCXIgPSBpMmNfYWRkX2RyaXZlcigmd2lzX3NvbnlfdHVuZXJfZHJpdmVyKTsKKwlpZiAociA8IDApCisJCXJldHVybiByOworCXJldHVybiB3aXNfaTJjX2FkZF9kcml2ZXIod2lzX3NvbnlfdHVuZXJfZHJpdmVyLmlkLAorCQkJCQl3aXNfc29ueV90dW5lcl9kZXRlY3QpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgd2lzX3NvbnlfdHVuZXJfY2xlYW51cCh2b2lkKQoreworCXdpc19pMmNfZGVsX2RyaXZlcih3aXNfc29ueV90dW5lcl9kZXRlY3QpOworCWkyY19kZWxfZHJpdmVyKCZ3aXNfc29ueV90dW5lcl9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdCh3aXNfc29ueV90dW5lcl9pbml0KTsKK21vZHVsZV9leGl0KHdpc19zb255X3R1bmVyX2NsZWFudXApOworCitNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZ283MDA3L3dpcy10dzI4MDQuYyBiL2RyaXZlcnMvc3RhZ2luZy9nbzcwMDcvd2lzLXR3MjgwNC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI3ZmU0ZDAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvZ283MDA3L3dpcy10dzI4MDQuYwpAQCAtMCwwICsxLDM4MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA2IE1pY3JvbmFzIFVTQSBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKFZlcnNpb24gMikgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisgKiBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYyLmg+CisjaW5jbHVkZSA8bGludXgvaW9jdGwuaD4KKworI2luY2x1ZGUgIndpcy1pMmMuaCIKKworc3RydWN0IHdpc190dzI4MDQgeworCWludCBjaGFubmVsOworCWludCBub3JtOworCWludCBicmlnaHRuZXNzOworCWludCBjb250cmFzdDsKKwlpbnQgc2F0dXJhdGlvbjsKKwlpbnQgaHVlOworfTsKKworc3RhdGljIHU4IGdsb2JhbF9yZWdpc3RlcnNbXSA9Cit7CisJMHgzOSwgMHgwMCwKKwkweDNhLCAweGZmLAorCTB4M2IsIDB4ODQsCisJMHgzYywgMHg4MCwKKwkweDNkLCAweDgwLAorCTB4M2UsIDB4ODIsCisJMHgzZiwgMHg4MiwKKwkweGZmLCAweGZmLCAvKiBUZXJtaW5hdG9yIChyZWcgMHhmZiBkb2VzIG5vdCBleGlzdCkgKi8KK307CisKK3N0YXRpYyB1OCBjaGFubmVsX3JlZ2lzdGVyc1tdID0KK3sKKwkweDAxLCAweGM0LAorCTB4MDIsIDB4YTUsCisJMHgwMywgMHgyMCwKKwkweDA0LCAweGQwLAorCTB4MDUsIDB4MjAsCisJMHgwNiwgMHhkMCwKKwkweDA3LCAweDg4LAorCTB4MDgsIDB4MjAsCisJMHgwOSwgMHgwNywKKwkweDBhLCAweGYwLAorCTB4MGIsIDB4MDcsCisJMHgwYywgMHhmMCwKKwkweDBkLCAweDQwLAorCTB4MGUsIDB4ZDIsCisJMHgwZiwgMHg4MCwKKwkweDEwLCAweDgwLAorCTB4MTEsIDB4ODAsCisJMHgxMiwgMHg4MCwKKwkweDEzLCAweDFmLAorCTB4MTQsIDB4MDAsCisJMHgxNSwgMHgwMCwKKwkweDE2LCAweDAwLAorCTB4MTcsIDB4MDAsCisJMHgxOCwgMHhmZiwKKwkweDE5LCAweGZmLAorCTB4MWEsIDB4ZmYsCisJMHgxYiwgMHhmZiwKKwkweDFjLCAweGZmLAorCTB4MWQsIDB4ZmYsCisJMHgxZSwgMHhmZiwKKwkweDFmLCAweGZmLAorCTB4MjAsIDB4MDcsCisJMHgyMSwgMHgwNywKKwkweDIyLCAweDAwLAorCTB4MjMsIDB4OTEsCisJMHgyNCwgMHg1MSwKKwkweDI1LCAweDAzLAorCTB4MjYsIDB4MDAsCisJMHgyNywgMHgwMCwKKwkweDI4LCAweDAwLAorCTB4MjksIDB4MDAsCisJMHgyYSwgMHgwMCwKKwkweDJiLCAweDAwLAorCTB4MmMsIDB4MDAsCisJMHgyZCwgMHgwMCwKKwkweDJlLCAweDAwLAorCTB4MmYsIDB4MDAsCisJMHgzMCwgMHgwMCwKKwkweDMxLCAweDAwLAorCTB4MzIsIDB4MDAsCisJMHgzMywgMHgwMCwKKwkweDM0LCAweDAwLAorCTB4MzUsIDB4MDAsCisJMHgzNiwgMHgwMCwKKwkweDM3LCAweDAwLAorCTB4ZmYsIDB4ZmYsIC8qIFRlcm1pbmF0b3IgKHJlZyAweGZmIGRvZXMgbm90IGV4aXN0KSAqLworfTsKKworc3RhdGljIGludCB3cml0ZV9yZWcoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdTggcmVnLCB1OCB2YWx1ZSwgaW50IGNoYW5uZWwpCit7CisJcmV0dXJuIGkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCByZWcgfCAoY2hhbm5lbCA8PCA2KSwgdmFsdWUpOworfQorCitzdGF0aWMgaW50IHdyaXRlX3JlZ3Moc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdTggKnJlZ3MsIGludCBjaGFubmVsKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgcmVnc1tpXSAhPSAweGZmOyBpICs9IDIpCisJCWlmIChpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwKKwkJCQlyZWdzW2ldIHwgKGNoYW5uZWwgPDwgNiksIHJlZ3NbaSArIDFdKSA8IDApCisJCQlyZXR1cm4gLTE7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgd2lzX3R3MjgwNF9jb21tYW5kKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCisJCQkJdW5zaWduZWQgaW50IGNtZCwgdm9pZCAqYXJnKQoreworCXN0cnVjdCB3aXNfdHcyODA0ICpkZWMgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKworCWlmIChjbWQgPT0gREVDT0RFUl9TRVRfQ0hBTk5FTCkgeworCQlpbnQgKmlucHV0ID0gYXJnOworCisJCWlmICgqaW5wdXQgPCAwIHx8ICppbnB1dCA+IDMpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAid2lzLXR3MjgwNDogY2hhbm5lbCAlZCBpcyBub3QgIgorCQkJCQkiYmV0d2VlbiAwIGFuZCAzIVxuIiwgKmlucHV0KTsKKwkJCXJldHVybiAwOworCQl9CisJCWRlYy0+Y2hhbm5lbCA9ICppbnB1dDsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIndpcy10dzI4MDQ6IGluaXRpYWxpemluZyBUVzI4MDQgIgorCQkJCSJjaGFubmVsICVkXG4iLCBkZWMtPmNoYW5uZWwpOworCQlpZiAoZGVjLT5jaGFubmVsID09IDAgJiYKKwkJCQl3cml0ZV9yZWdzKGNsaWVudCwgZ2xvYmFsX3JlZ2lzdGVycywgMCkgPCAwKSB7CisJCQlwcmludGsoS0VSTl9FUlIgIndpcy10dzI4MDQ6IGVycm9yIGluaXRpYWxpemluZyAiCisJCQkJCSJUVzI4MDQgZ2xvYmFsIHJlZ2lzdGVyc1xuIik7CisJCQlyZXR1cm4gMDsKKwkJfQorCQlpZiAod3JpdGVfcmVncyhjbGllbnQsIGNoYW5uZWxfcmVnaXN0ZXJzLCBkZWMtPmNoYW5uZWwpIDwgMCkgeworCQkJcHJpbnRrKEtFUk5fRVJSICJ3aXMtdHcyODA0OiBlcnJvciBpbml0aWFsaXppbmcgIgorCQkJCQkiVFcyODA0IGNoYW5uZWwgJWRcbiIsIGRlYy0+Y2hhbm5lbCk7CisJCQlyZXR1cm4gMDsKKwkJfQorCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoZGVjLT5jaGFubmVsIDwgMCkgeworCQlwcmludGsoS0VSTl9ERUJVRyAid2lzLXR3MjgwNDogaWdub3JpbmcgY29tbWFuZCAlMDh4IHVudGlsICIKKwkJCQkiY2hhbm5lbCBudW1iZXIgaXMgc2V0XG4iLCBjbWQpOworCQlyZXR1cm4gMDsKKwl9CisKKwlzd2l0Y2ggKGNtZCkgeworCWNhc2UgVklESU9DX1NfU1REOgorCXsKKwkJdjRsMl9zdGRfaWQgKmlucHV0ID0gYXJnOworCQl1OCByZWdzW10gPSB7CisJCQkweDAxLCAqaW5wdXQgJiBWNEwyX1NURF9OVFNDID8gMHhjNCA6IDB4ODQsCisJCQkweDA5LCAqaW5wdXQgJiBWNEwyX1NURF9OVFNDID8gMHgwNyA6IDB4MDQsCisJCQkweDBhLCAqaW5wdXQgJiBWNEwyX1NURF9OVFNDID8gMHhmMCA6IDB4MjAsCisJCQkweDBiLCAqaW5wdXQgJiBWNEwyX1NURF9OVFNDID8gMHgwNyA6IDB4MDQsCisJCQkweDBjLCAqaW5wdXQgJiBWNEwyX1NURF9OVFNDID8gMHhmMCA6IDB4MjAsCisJCQkweDBkLCAqaW5wdXQgJiBWNEwyX1NURF9OVFNDID8gMHg0MCA6IDB4NGEsCisJCQkweDE2LCAqaW5wdXQgJiBWNEwyX1NURF9OVFNDID8gMHgwMCA6IDB4NDAsCisJCQkweDE3LCAqaW5wdXQgJiBWNEwyX1NURF9OVFNDID8gMHgwMCA6IDB4NDAsCisJCQkweDIwLCAqaW5wdXQgJiBWNEwyX1NURF9OVFNDID8gMHgwNyA6IDB4MGYsCisJCQkweDIxLCAqaW5wdXQgJiBWNEwyX1NURF9OVFNDID8gMHgwNyA6IDB4MGYsCisJCQkweGZmLAkweGZmLAorCQl9OworCQl3cml0ZV9yZWdzKGNsaWVudCwgcmVncywgZGVjLT5jaGFubmVsKTsKKwkJZGVjLT5ub3JtID0gKmlucHV0OworCQlicmVhazsKKwl9CisJY2FzZSBWSURJT0NfUVVFUllDVFJMOgorCXsKKwkJc3RydWN0IHY0bDJfcXVlcnljdHJsICpjdHJsID0gYXJnOworCisJCXN3aXRjaCAoY3RybC0+aWQpIHsKKwkJY2FzZSBWNEwyX0NJRF9CUklHSFRORVNTOgorCQkJY3RybC0+dHlwZSA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVI7CisJCQlzdHJuY3B5KGN0cmwtPm5hbWUsICJCcmlnaHRuZXNzIiwgc2l6ZW9mKGN0cmwtPm5hbWUpKTsKKwkJCWN0cmwtPm1pbmltdW0gPSAwOworCQkJY3RybC0+bWF4aW11bSA9IDI1NTsKKwkJCWN0cmwtPnN0ZXAgPSAxOworCQkJY3RybC0+ZGVmYXVsdF92YWx1ZSA9IDEyODsKKwkJCWN0cmwtPmZsYWdzID0gMDsKKwkJCWJyZWFrOworCQljYXNlIFY0TDJfQ0lEX0NPTlRSQVNUOgorCQkJY3RybC0+dHlwZSA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVI7CisJCQlzdHJuY3B5KGN0cmwtPm5hbWUsICJDb250cmFzdCIsIHNpemVvZihjdHJsLT5uYW1lKSk7CisJCQljdHJsLT5taW5pbXVtID0gMDsKKwkJCWN0cmwtPm1heGltdW0gPSAyNTU7CisJCQljdHJsLT5zdGVwID0gMTsKKwkJCWN0cmwtPmRlZmF1bHRfdmFsdWUgPSAxMjg7CisJCQljdHJsLT5mbGFncyA9IDA7CisJCQlicmVhazsKKwkJY2FzZSBWNEwyX0NJRF9TQVRVUkFUSU9OOgorCQkJY3RybC0+dHlwZSA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVI7CisJCQlzdHJuY3B5KGN0cmwtPm5hbWUsICJTYXR1cmF0aW9uIiwgc2l6ZW9mKGN0cmwtPm5hbWUpKTsKKwkJCWN0cmwtPm1pbmltdW0gPSAwOworCQkJY3RybC0+bWF4aW11bSA9IDI1NTsKKwkJCWN0cmwtPnN0ZXAgPSAxOworCQkJY3RybC0+ZGVmYXVsdF92YWx1ZSA9IDEyODsKKwkJCWN0cmwtPmZsYWdzID0gMDsKKwkJCWJyZWFrOworCQljYXNlIFY0TDJfQ0lEX0hVRToKKwkJCWN0cmwtPnR5cGUgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSOworCQkJc3RybmNweShjdHJsLT5uYW1lLCAiSHVlIiwgc2l6ZW9mKGN0cmwtPm5hbWUpKTsKKwkJCWN0cmwtPm1pbmltdW0gPSAwOworCQkJY3RybC0+bWF4aW11bSA9IDI1NTsKKwkJCWN0cmwtPnN0ZXAgPSAxOworCQkJY3RybC0+ZGVmYXVsdF92YWx1ZSA9IDEyODsKKwkJCWN0cmwtPmZsYWdzID0gMDsKKwkJCWJyZWFrOworCQl9CisJCWJyZWFrOworCX0KKwljYXNlIFZJRElPQ19TX0NUUkw6CisJeworCQlzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsID0gYXJnOworCisJCXN3aXRjaCAoY3RybC0+aWQpIHsKKwkJY2FzZSBWNEwyX0NJRF9CUklHSFRORVNTOgorCQkJaWYgKGN0cmwtPnZhbHVlID4gMjU1KQorCQkJCWRlYy0+YnJpZ2h0bmVzcyA9IDI1NTsKKwkJCWVsc2UgaWYgKGN0cmwtPnZhbHVlIDwgMCkKKwkJCQlkZWMtPmJyaWdodG5lc3MgPSAwOworCQkJZWxzZQorCQkJCWRlYy0+YnJpZ2h0bmVzcyA9IGN0cmwtPnZhbHVlOworCQkJd3JpdGVfcmVnKGNsaWVudCwgMHgxMiwgZGVjLT5icmlnaHRuZXNzLCBkZWMtPmNoYW5uZWwpOworCQkJYnJlYWs7CisJCWNhc2UgVjRMMl9DSURfQ09OVFJBU1Q6CisJCQlpZiAoY3RybC0+dmFsdWUgPiAyNTUpCisJCQkJZGVjLT5jb250cmFzdCA9IDI1NTsKKwkJCWVsc2UgaWYgKGN0cmwtPnZhbHVlIDwgMCkKKwkJCQlkZWMtPmNvbnRyYXN0ID0gMDsKKwkJCWVsc2UKKwkJCQlkZWMtPmNvbnRyYXN0ID0gY3RybC0+dmFsdWU7CisJCQl3cml0ZV9yZWcoY2xpZW50LCAweDExLCBkZWMtPmNvbnRyYXN0LCBkZWMtPmNoYW5uZWwpOworCQkJYnJlYWs7CisJCWNhc2UgVjRMMl9DSURfU0FUVVJBVElPTjoKKwkJCWlmIChjdHJsLT52YWx1ZSA+IDI1NSkKKwkJCQlkZWMtPnNhdHVyYXRpb24gPSAyNTU7CisJCQllbHNlIGlmIChjdHJsLT52YWx1ZSA8IDApCisJCQkJZGVjLT5zYXR1cmF0aW9uID0gMDsKKwkJCWVsc2UKKwkJCQlkZWMtPnNhdHVyYXRpb24gPSBjdHJsLT52YWx1ZTsKKwkJCXdyaXRlX3JlZyhjbGllbnQsIDB4MTAsIGRlYy0+c2F0dXJhdGlvbiwgZGVjLT5jaGFubmVsKTsKKwkJCWJyZWFrOworCQljYXNlIFY0TDJfQ0lEX0hVRToKKwkJCWlmIChjdHJsLT52YWx1ZSA+IDI1NSkKKwkJCQlkZWMtPmh1ZSA9IDI1NTsKKwkJCWVsc2UgaWYgKGN0cmwtPnZhbHVlIDwgMCkKKwkJCQlkZWMtPmh1ZSA9IDA7CisJCQllbHNlCisJCQkJZGVjLT5odWUgPSBjdHJsLT52YWx1ZTsKKwkJCXdyaXRlX3JlZyhjbGllbnQsIDB4MGYsIGRlYy0+aHVlLCBkZWMtPmNoYW5uZWwpOworCQkJYnJlYWs7CisJCX0KKwkJYnJlYWs7CisJfQorCWNhc2UgVklESU9DX0dfQ1RSTDoKKwl7CisJCXN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwgPSBhcmc7CisKKwkJc3dpdGNoIChjdHJsLT5pZCkgeworCQljYXNlIFY0TDJfQ0lEX0JSSUdIVE5FU1M6CisJCQljdHJsLT52YWx1ZSA9IGRlYy0+YnJpZ2h0bmVzczsKKwkJCWJyZWFrOworCQljYXNlIFY0TDJfQ0lEX0NPTlRSQVNUOgorCQkJY3RybC0+dmFsdWUgPSBkZWMtPmNvbnRyYXN0OworCQkJYnJlYWs7CisJCWNhc2UgVjRMMl9DSURfU0FUVVJBVElPTjoKKwkJCWN0cmwtPnZhbHVlID0gZGVjLT5zYXR1cmF0aW9uOworCQkJYnJlYWs7CisJCWNhc2UgVjRMMl9DSURfSFVFOgorCQkJY3RybC0+dmFsdWUgPSBkZWMtPmh1ZTsKKwkJCWJyZWFrOworCQl9CisJCWJyZWFrOworCX0KKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciB3aXNfdHcyODA0X2RyaXZlcjsKKworc3RhdGljIHN0cnVjdCBpMmNfY2xpZW50IHdpc190dzI4MDRfY2xpZW50X3RlbXBsID0geworCS5uYW1lCQk9ICJUVzI4MDQgKFdJUykiLAorCS5kcml2ZXIJCT0gJndpc190dzI4MDRfZHJpdmVyLAorfTsKKworc3RhdGljIGludCB3aXNfdHcyODA0X2RldGVjdChzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIsIGludCBhZGRyLCBpbnQga2luZCkKK3sKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50OworCXN0cnVjdCB3aXNfdHcyODA0ICpkZWM7CisKKwlpZiAoIWkyY19jaGVja19mdW5jdGlvbmFsaXR5KGFkYXB0ZXIsIEkyQ19GVU5DX1NNQlVTX0JZVEVfREFUQSkpCisJCXJldHVybiAwOworCisJY2xpZW50ID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGkyY19jbGllbnQpLCBHRlBfS0VSTkVMKTsKKwlpZiAoY2xpZW50ID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCW1lbWNweShjbGllbnQsICZ3aXNfdHcyODA0X2NsaWVudF90ZW1wbCwKKwkJCXNpemVvZih3aXNfdHcyODA0X2NsaWVudF90ZW1wbCkpOworCWNsaWVudC0+YWRhcHRlciA9IGFkYXB0ZXI7CisJY2xpZW50LT5hZGRyID0gYWRkcjsKKworCWRlYyA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCB3aXNfdHcyODA0KSwgR0ZQX0tFUk5FTCk7CisJaWYgKGRlYyA9PSBOVUxMKSB7CisJCWtmcmVlKGNsaWVudCk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwlkZWMtPmNoYW5uZWwgPSAtMTsKKwlkZWMtPm5vcm0gPSBWNEwyX1NURF9OVFNDOworCWRlYy0+YnJpZ2h0bmVzcyA9IDEyODsKKwlkZWMtPmNvbnRyYXN0ID0gMTI4OworCWRlYy0+c2F0dXJhdGlvbiA9IDEyODsKKwlkZWMtPmh1ZSA9IDEyODsKKwlpMmNfc2V0X2NsaWVudGRhdGEoY2xpZW50LCBkZWMpOworCisJcHJpbnRrKEtFUk5fREVCVUcgIndpcy10dzI4MDQ6IGNyZWF0aW5nIFRXMjgwNCBhdCBhZGRyZXNzICVkIG9uICVzXG4iLAorCQlhZGRyLCBhZGFwdGVyLT5uYW1lKTsKKworCWkyY19hdHRhY2hfY2xpZW50KGNsaWVudCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgd2lzX3R3MjgwNF9kZXRhY2goc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKK3sKKwlzdHJ1Y3Qgd2lzX3R3MjgwNCAqZGVjID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisJaW50IHI7CisKKwlyID0gaTJjX2RldGFjaF9jbGllbnQoY2xpZW50KTsKKwlpZiAociA8IDApCisJCXJldHVybiByOworCisJa2ZyZWUoY2xpZW50KTsKKwlrZnJlZShkZWMpOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgd2lzX3R3MjgwNF9kcml2ZXIgPSB7CisJLmRyaXZlciA9IHsKKwkJLm5hbWUJPSAiV0lTIFRXMjgwNCBJMkMgZHJpdmVyIiwKKwl9LAorCS5pZAkJPSBJMkNfRFJJVkVSSURfV0lTX1RXMjgwNCwKKwkuZGV0YWNoX2NsaWVudAk9IHdpc190dzI4MDRfZGV0YWNoLAorCS5jb21tYW5kCT0gd2lzX3R3MjgwNF9jb21tYW5kLAorfTsKKworc3RhdGljIGludCBfX2luaXQgd2lzX3R3MjgwNF9pbml0KHZvaWQpCit7CisJaW50IHI7CisKKwlyID0gaTJjX2FkZF9kcml2ZXIoJndpc190dzI4MDRfZHJpdmVyKTsKKwlpZiAociA8IDApCisJCXJldHVybiByOworCXJldHVybiB3aXNfaTJjX2FkZF9kcml2ZXIod2lzX3R3MjgwNF9kcml2ZXIuaWQsIHdpc190dzI4MDRfZGV0ZWN0KTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IHdpc190dzI4MDRfY2xlYW51cCh2b2lkKQoreworCXdpc19pMmNfZGVsX2RyaXZlcih3aXNfdHcyODA0X2RldGVjdCk7CisJaTJjX2RlbF9kcml2ZXIoJndpc190dzI4MDRfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQod2lzX3R3MjgwNF9pbml0KTsKK21vZHVsZV9leGl0KHdpc190dzI4MDRfY2xlYW51cCk7CisKK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9nbzcwMDcvd2lzLXR3OTkwMy5jIGIvZHJpdmVycy9zdGFnaW5nL2dvNzAwNy93aXMtdHc5OTAzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDhlNDE5NgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9nbzcwMDcvd2lzLXR3OTkwMy5jCkBAIC0wLDAgKzEsMzYyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMDYgTWljcm9uYXMgVVNBIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoVmVyc2lvbiAyKSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKyAqIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxsaW51eC92aWRlb2RldjIuaD4KKyNpbmNsdWRlIDxsaW51eC9pb2N0bC5oPgorCisjaW5jbHVkZSAid2lzLWkyYy5oIgorCitzdHJ1Y3Qgd2lzX3R3OTkwMyB7CisJaW50IG5vcm07CisJaW50IGJyaWdodG5lc3M7CisJaW50IGNvbnRyYXN0OworCWludCBodWU7Cit9OworCitzdGF0aWMgdTggaW5pdGlhbF9yZWdpc3RlcnNbXSA9Cit7CisJMHgwMiwgMHg0NCwgLyogaW5wdXQgMSwgY29tcG9zaXRlICovCisJMHgwMywgMHg5MiwgLyogY29ycmVjdCBkaWdpdGFsIGZvcm1hdCAqLworCTB4MDQsIDB4MDAsCisJMHgwNSwgMHg4MCwgLyogb3IgMHgwMCBmb3IgUEFMICovCisJMHgwNiwgMHg0MCwgLyogc2Vjb25kIGludGVybmFsIGN1cnJlbnQgcmVmZXJlbmNlICovCisJMHgwNywgMHgwMiwgLyogd2luZG93ICovCisJMHgwOCwgMHgxNCwgLyogd2luZG93ICovCisJMHgwOSwgMHhmMCwgLyogd2luZG93ICovCisJMHgwYSwgMHg4MSwgLyogd2luZG93ICovCisJMHgwYiwgMHhkMCwgLyogd2luZG93ICovCisJMHgwYywgMHg4YywKKwkweDBkLCAweDAwLCAvKiBzY2FsaW5nICovCisJMHgwZSwgMHgxMSwgLyogc2NhbGluZyAqLworCTB4MGYsIDB4MDAsIC8qIHNjYWxpbmcgKi8KKwkweDEwLCAweDAwLCAvKiBicmlnaHRuZXNzICovCisJMHgxMSwgMHg2MCwgLyogY29udHJhc3QgKi8KKwkweDEyLCAweDAxLCAvKiBzaGFycG5lc3MgKi8KKwkweDEzLCAweDdmLCAvKiBVIGdhaW4gKi8KKwkweDE0LCAweDVhLCAvKiBWIGdhaW4gKi8KKwkweDE1LCAweDAwLCAvKiBodWUgKi8KKwkweDE2LCAweGMzLCAvKiBzaGFycG5lc3MgKi8KKwkweDE4LCAweDAwLAorCTB4MTksIDB4NTgsIC8qIHZiaSAqLworCTB4MWEsIDB4ODAsCisJMHgxYywgMHgwZiwgLyogdmlkZW8gbm9ybSAqLworCTB4MWQsIDB4N2YsIC8qIHZpZGVvIG5vcm0gKi8KKwkweDIwLCAweGEwLCAvKiBjbGFtcGluZyBnYWluICh3b3JraW5nIDB4NTApICovCisJMHgyMSwgMHgyMiwKKwkweDIyLCAweGYwLAorCTB4MjMsIDB4ZmUsCisJMHgyNCwgMHgzYywKKwkweDI1LCAweDM4LAorCTB4MjYsIDB4NDQsCisJMHgyNywgMHgyMCwKKwkweDI4LCAweDAwLAorCTB4MjksIDB4MTUsCisJMHgyYSwgMHhhMCwKKwkweDJiLCAweDQ0LAorCTB4MmMsIDB4MzcsCisJMHgyZCwgMHgwMCwKKwkweDJlLCAweGE1LCAvKiBidXJzdCBQTEwgY29udHJvbCAod29ya2luZzogYTkpICovCisJMHgyZiwgMHhlMCwgLyogMHhlYSBpcyBibHVlIHRlc3QgZnJhbWUgLS0gMHhlMCBmb3Igbm9ybWFsICovCisJMHgzMSwgMHgwMCwKKwkweDMzLCAweDIyLAorCTB4MzQsIDB4MTEsCisJMHgzNSwgMHgzNSwKKwkweDNiLCAweDA1LAorCTB4MDYsIDB4YzAsIC8qIHJlc2V0IGRldmljZSAqLworCTB4MDAsIDB4MDAsIC8qIFRlcm1pbmF0b3IgKHJlZyAweDAwIGlzIHJlYWQtb25seSkgKi8KK307CisKK3N0YXRpYyBpbnQgd3JpdGVfcmVnKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHU4IHJlZywgdTggdmFsdWUpCit7CisJcmV0dXJuIGkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCByZWcsIHZhbHVlKTsKK30KKworc3RhdGljIGludCB3cml0ZV9yZWdzKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHU4ICpyZWdzKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgcmVnc1tpXSAhPSAweDAwOyBpICs9IDIpCisJCWlmIChpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgcmVnc1tpXSwgcmVnc1tpICsgMV0pIDwgMCkKKwkJCXJldHVybiAtMTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB3aXNfdHc5OTAzX2NvbW1hbmQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKKwkJCQl1bnNpZ25lZCBpbnQgY21kLCB2b2lkICphcmcpCit7CisJc3RydWN0IHdpc190dzk5MDMgKmRlYyA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCisJc3dpdGNoIChjbWQpIHsKKwljYXNlIFZJRElPQ19TX0lOUFVUOgorCXsKKwkJaW50ICppbnB1dCA9IGFyZzsKKworCQlpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgMHgwMiwgMHg0MCB8ICgqaW5wdXQgPDwgMSkpOworCQlicmVhazsKKwl9CisjaWYgMCAgIC8qIFRoZSBzY2FsZXIgb24gdGhpcyB0aGluZyBzZWVtcyB0byBiZSBob3JyaWJseSBicm9rZW4gKi8KKwljYXNlIERFQ09ERVJfU0VUX1JFU09MVVRJT046CisJeworCQlzdHJ1Y3QgdmlkZW9fZGVjb2Rlcl9yZXNvbHV0aW9uICpyZXMgPSBhcmc7CisJCS8qaW50IGhzY2FsZSA9IDI1NiAqIDcyMCAvIHJlcy0+d2lkdGg7Ki8KKwkJaW50IGhzY2FsZSA9IDI1NiAqIDcyMCAvIChyZXMtPndpZHRoIC0gKHJlcy0+d2lkdGggPiA3MDQgPyAwIDogOCkpOworCQlpbnQgdnNjYWxlID0gMjU2ICogKGRlYy0+bm9ybSAmIFY0TDJfU1REX05UU0MgPyAgMjQwIDogMjg4KQorCQkJCS8gcmVzLT5oZWlnaHQ7CisJCXU4IHJlZ3NbXSA9IHsKKwkJCTB4MGQsIHZzY2FsZSAmIDB4ZmYsCisJCQkweDBmLCBoc2NhbGUgJiAweGZmLAorCQkJMHgwZSwgKCh2c2NhbGUgJiAweGYwMCkgPj4gNCkgfCAoKGhzY2FsZSAmIDB4ZjAwKSA+PiA4KSwKKwkJCTB4MDYsIDB4YzAsIC8qIHJlc2V0IGRldmljZSAqLworCQkJMCwJMCwKKwkJfTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgInZzY2FsZSBpcyAlMDR4LCBoc2NhbGUgaXMgJTA0eFxuIiwKKwkJCQl2c2NhbGUsIGhzY2FsZSk7CisJCS8qd3JpdGVfcmVncyhjbGllbnQsIHJlZ3MpOyovCisJCWJyZWFrOworCX0KKyNlbmRpZgorCWNhc2UgVklESU9DX1NfU1REOgorCXsKKwkJdjRsMl9zdGRfaWQgKmlucHV0ID0gYXJnOworCQl1OCByZWdzW10gPSB7CisJCQkweDA1LCAqaW5wdXQgJiBWNEwyX1NURF9OVFNDID8gMHg4MCA6IDB4MDAsCisJCQkweDA3LCAqaW5wdXQgJiBWNEwyX1NURF9OVFNDID8gMHgwMiA6IDB4MTIsCisJCQkweDA4LCAqaW5wdXQgJiBWNEwyX1NURF9OVFNDID8gMHgxNCA6IDB4MTgsCisJCQkweDA5LCAqaW5wdXQgJiBWNEwyX1NURF9OVFNDID8gMHhmMCA6IDB4MjAsCisJCQkwLAkwLAorCQl9OworCQl3cml0ZV9yZWdzKGNsaWVudCwgcmVncyk7CisJCWRlYy0+bm9ybSA9ICppbnB1dDsKKwkJYnJlYWs7CisJfQorCWNhc2UgVklESU9DX1FVRVJZQ1RSTDoKKwl7CisJCXN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCAqY3RybCA9IGFyZzsKKworCQlzd2l0Y2ggKGN0cmwtPmlkKSB7CisJCWNhc2UgVjRMMl9DSURfQlJJR0hUTkVTUzoKKwkJCWN0cmwtPnR5cGUgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSOworCQkJc3RybmNweShjdHJsLT5uYW1lLCAiQnJpZ2h0bmVzcyIsIHNpemVvZihjdHJsLT5uYW1lKSk7CisJCQljdHJsLT5taW5pbXVtID0gLTEyODsKKwkJCWN0cmwtPm1heGltdW0gPSAxMjc7CisJCQljdHJsLT5zdGVwID0gMTsKKwkJCWN0cmwtPmRlZmF1bHRfdmFsdWUgPSAweDAwOworCQkJY3RybC0+ZmxhZ3MgPSAwOworCQkJYnJlYWs7CisJCWNhc2UgVjRMMl9DSURfQ09OVFJBU1Q6CisJCQljdHJsLT50eXBlID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUjsKKwkJCXN0cm5jcHkoY3RybC0+bmFtZSwgIkNvbnRyYXN0Iiwgc2l6ZW9mKGN0cmwtPm5hbWUpKTsKKwkJCWN0cmwtPm1pbmltdW0gPSAwOworCQkJY3RybC0+bWF4aW11bSA9IDI1NTsKKwkJCWN0cmwtPnN0ZXAgPSAxOworCQkJY3RybC0+ZGVmYXVsdF92YWx1ZSA9IDB4NjA7CisJCQljdHJsLT5mbGFncyA9IDA7CisJCQlicmVhazsKKyNpZiAwCisJCS8qIEkgZG9uJ3QgdW5kZXJzdGFuZCBob3cgdGhlIENocm9tYSBHYWluIHJlZ2lzdGVycyB3b3JrLi4uICovCisJCWNhc2UgVjRMMl9DSURfU0FUVVJBVElPTjoKKwkJCWN0cmwtPnR5cGUgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSOworCQkJc3RybmNweShjdHJsLT5uYW1lLCAiU2F0dXJhdGlvbiIsIHNpemVvZihjdHJsLT5uYW1lKSk7CisJCQljdHJsLT5taW5pbXVtID0gMDsKKwkJCWN0cmwtPm1heGltdW0gPSAxMjc7CisJCQljdHJsLT5zdGVwID0gMTsKKwkJCWN0cmwtPmRlZmF1bHRfdmFsdWUgPSA2NDsKKwkJCWN0cmwtPmZsYWdzID0gMDsKKwkJCWJyZWFrOworI2VuZGlmCisJCWNhc2UgVjRMMl9DSURfSFVFOgorCQkJY3RybC0+dHlwZSA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVI7CisJCQlzdHJuY3B5KGN0cmwtPm5hbWUsICJIdWUiLCBzaXplb2YoY3RybC0+bmFtZSkpOworCQkJY3RybC0+bWluaW11bSA9IC0xMjg7CisJCQljdHJsLT5tYXhpbXVtID0gMTI3OworCQkJY3RybC0+c3RlcCA9IDE7CisJCQljdHJsLT5kZWZhdWx0X3ZhbHVlID0gMDsKKwkJCWN0cmwtPmZsYWdzID0gMDsKKwkJCWJyZWFrOworCQl9CisJCWJyZWFrOworCX0KKwljYXNlIFZJRElPQ19TX0NUUkw6CisJeworCQlzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsID0gYXJnOworCisJCXN3aXRjaCAoY3RybC0+aWQpIHsKKwkJY2FzZSBWNEwyX0NJRF9CUklHSFRORVNTOgorCQkJaWYgKGN0cmwtPnZhbHVlID4gMTI3KQorCQkJCWRlYy0+YnJpZ2h0bmVzcyA9IDEyNzsKKwkJCWVsc2UgaWYgKGN0cmwtPnZhbHVlIDwgLTEyOCkKKwkJCQlkZWMtPmJyaWdodG5lc3MgPSAtMTI4OworCQkJZWxzZQorCQkJCWRlYy0+YnJpZ2h0bmVzcyA9IGN0cmwtPnZhbHVlOworCQkJd3JpdGVfcmVnKGNsaWVudCwgMHgxMCwgZGVjLT5icmlnaHRuZXNzKTsKKwkJCWJyZWFrOworCQljYXNlIFY0TDJfQ0lEX0NPTlRSQVNUOgorCQkJaWYgKGN0cmwtPnZhbHVlID4gMjU1KQorCQkJCWRlYy0+Y29udHJhc3QgPSAyNTU7CisJCQllbHNlIGlmIChjdHJsLT52YWx1ZSA8IDApCisJCQkJZGVjLT5jb250cmFzdCA9IDA7CisJCQllbHNlCisJCQkJZGVjLT5jb250cmFzdCA9IGN0cmwtPnZhbHVlOworCQkJd3JpdGVfcmVnKGNsaWVudCwgMHgxMSwgZGVjLT5jb250cmFzdCk7CisJCQlicmVhazsKKyNpZiAwCisJCWNhc2UgVjRMMl9DSURfU0FUVVJBVElPTjoKKwkJCWlmIChjdHJsLT52YWx1ZSA+IDEyNykKKwkJCQlkZWMtPnNhdHVyYXRpb24gPSAxMjc7CisJCQllbHNlIGlmIChjdHJsLT52YWx1ZSA8IDApCisJCQkJZGVjLT5zYXR1cmF0aW9uID0gMDsKKwkJCWVsc2UKKwkJCQlkZWMtPnNhdHVyYXRpb24gPSBjdHJsLT52YWx1ZTsKKwkJCS8qd3JpdGVfcmVnKGNsaWVudCwgMHgwYywgZGVjLT5zYXR1cmF0aW9uKTsqLworCQkJYnJlYWs7CisjZW5kaWYKKwkJY2FzZSBWNEwyX0NJRF9IVUU6CisJCQlpZiAoY3RybC0+dmFsdWUgPiAxMjcpCisJCQkJZGVjLT5odWUgPSAxMjc7CisJCQllbHNlIGlmIChjdHJsLT52YWx1ZSA8IC0xMjgpCisJCQkJZGVjLT5odWUgPSAtMTI4OworCQkJZWxzZQorCQkJCWRlYy0+aHVlID0gY3RybC0+dmFsdWU7CisJCQl3cml0ZV9yZWcoY2xpZW50LCAweDE1LCBkZWMtPmh1ZSk7CisJCQlicmVhazsKKwkJfQorCQlicmVhazsKKwl9CisJY2FzZSBWSURJT0NfR19DVFJMOgorCXsKKwkJc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCA9IGFyZzsKKworCQlzd2l0Y2ggKGN0cmwtPmlkKSB7CisJCWNhc2UgVjRMMl9DSURfQlJJR0hUTkVTUzoKKwkJCWN0cmwtPnZhbHVlID0gZGVjLT5icmlnaHRuZXNzOworCQkJYnJlYWs7CisJCWNhc2UgVjRMMl9DSURfQ09OVFJBU1Q6CisJCQljdHJsLT52YWx1ZSA9IGRlYy0+Y29udHJhc3Q7CisJCQlicmVhazsKKyNpZiAwCisJCWNhc2UgVjRMMl9DSURfU0FUVVJBVElPTjoKKwkJCWN0cmwtPnZhbHVlID0gZGVjLT5zYXR1cmF0aW9uOworCQkJYnJlYWs7CisjZW5kaWYKKwkJY2FzZSBWNEwyX0NJRF9IVUU6CisJCQljdHJsLT52YWx1ZSA9IGRlYy0+aHVlOworCQkJYnJlYWs7CisJCX0KKwkJYnJlYWs7CisJfQorCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIHdpc190dzk5MDNfZHJpdmVyOworCitzdGF0aWMgc3RydWN0IGkyY19jbGllbnQgd2lzX3R3OTkwM19jbGllbnRfdGVtcGwgPSB7CisJLm5hbWUJCT0gIlRXOTkwMyAoV0lTKSIsCisJLmRyaXZlcgkJPSAmd2lzX3R3OTkwM19kcml2ZXIsCit9OworCitzdGF0aWMgaW50IHdpc190dzk5MDNfZGV0ZWN0KHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlciwgaW50IGFkZHIsIGludCBraW5kKQoreworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQ7CisJc3RydWN0IHdpc190dzk5MDMgKmRlYzsKKworCWlmICghaTJjX2NoZWNrX2Z1bmN0aW9uYWxpdHkoYWRhcHRlciwgSTJDX0ZVTkNfU01CVVNfQllURV9EQVRBKSkKKwkJcmV0dXJuIDA7CisKKwljbGllbnQgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgaTJjX2NsaWVudCksIEdGUF9LRVJORUwpOworCWlmIChjbGllbnQgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisJbWVtY3B5KGNsaWVudCwgJndpc190dzk5MDNfY2xpZW50X3RlbXBsLAorCQkJc2l6ZW9mKHdpc190dzk5MDNfY2xpZW50X3RlbXBsKSk7CisJY2xpZW50LT5hZGFwdGVyID0gYWRhcHRlcjsKKwljbGllbnQtPmFkZHIgPSBhZGRyOworCisJZGVjID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHdpc190dzk5MDMpLCBHRlBfS0VSTkVMKTsKKwlpZiAoZGVjID09IE5VTEwpIHsKKwkJa2ZyZWUoY2xpZW50KTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCWRlYy0+bm9ybSA9IFY0TDJfU1REX05UU0M7CisJZGVjLT5icmlnaHRuZXNzID0gMDsKKwlkZWMtPmNvbnRyYXN0ID0gMHg2MDsKKwlkZWMtPmh1ZSA9IDA7CisJaTJjX3NldF9jbGllbnRkYXRhKGNsaWVudCwgZGVjKTsKKworCXByaW50ayhLRVJOX0RFQlVHCisJCSJ3aXMtdHc5OTAzOiBpbml0aWFsaXppbmcgVFc5OTAzIGF0IGFkZHJlc3MgJWQgb24gJXNcbiIsCisJCWFkZHIsIGFkYXB0ZXItPm5hbWUpOworCisJaWYgKHdyaXRlX3JlZ3MoY2xpZW50LCBpbml0aWFsX3JlZ2lzdGVycykgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAid2lzLXR3OTkwMzogZXJyb3IgaW5pdGlhbGl6aW5nIFRXOTkwM1xuIik7CisJCWtmcmVlKGNsaWVudCk7CisJCWtmcmVlKGRlYyk7CisJCXJldHVybiAwOworCX0KKworCWkyY19hdHRhY2hfY2xpZW50KGNsaWVudCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgd2lzX3R3OTkwM19kZXRhY2goc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKK3sKKwlzdHJ1Y3Qgd2lzX3R3OTkwMyAqZGVjID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisJaW50IHI7CisKKwlyID0gaTJjX2RldGFjaF9jbGllbnQoY2xpZW50KTsKKwlpZiAociA8IDApCisJCXJldHVybiByOworCisJa2ZyZWUoY2xpZW50KTsKKwlrZnJlZShkZWMpOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgd2lzX3R3OTkwM19kcml2ZXIgPSB7CisJLmRyaXZlciA9IHsKKwkJLm5hbWUJPSAiV0lTIFRXOTkwMyBJMkMgZHJpdmVyIiwKKwl9LAorCS5pZAkJPSBJMkNfRFJJVkVSSURfV0lTX1RXOTkwMywKKwkuZGV0YWNoX2NsaWVudAk9IHdpc190dzk5MDNfZGV0YWNoLAorCS5jb21tYW5kCT0gd2lzX3R3OTkwM19jb21tYW5kLAorfTsKKworc3RhdGljIGludCBfX2luaXQgd2lzX3R3OTkwM19pbml0KHZvaWQpCit7CisJaW50IHI7CisKKwlyID0gaTJjX2FkZF9kcml2ZXIoJndpc190dzk5MDNfZHJpdmVyKTsKKwlpZiAociA8IDApCisJCXJldHVybiByOworCXJldHVybiB3aXNfaTJjX2FkZF9kcml2ZXIod2lzX3R3OTkwM19kcml2ZXIuaWQsIHdpc190dzk5MDNfZGV0ZWN0KTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IHdpc190dzk5MDNfY2xlYW51cCh2b2lkKQoreworCXdpc19pMmNfZGVsX2RyaXZlcih3aXNfdHc5OTAzX2RldGVjdCk7CisJaTJjX2RlbF9kcml2ZXIoJndpc190dzk5MDNfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQod2lzX3R3OTkwM19pbml0KTsKK21vZHVsZV9leGl0KHdpc190dzk5MDNfY2xlYW51cCk7CisKK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9nbzcwMDcvd2lzLXVkYTEzNDIuYyBiL2RyaXZlcnMvc3RhZ2luZy9nbzcwMDcvd2lzLXVkYTEzNDIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMDg5NGUzCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2dvNzAwNy93aXMtdWRhMTM0Mi5jCkBAIC0wLDAgKzEsMTM2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMDYgTWljcm9uYXMgVVNBIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoVmVyc2lvbiAyKSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKyAqIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxsaW51eC92aWRlb2RldjIuaD4KKyNpbmNsdWRlIDxtZWRpYS90dmF1ZGlvLmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1jb21tb24uaD4KKworI2luY2x1ZGUgIndpcy1pMmMuaCIKKworc3RhdGljIGludCB3cml0ZV9yZWcoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgaW50IHJlZywgaW50IHZhbHVlKQoreworCS8qIFVEQTEzNDIgd2FudHMgTVNCIGZpcnN0LCBidXQgU01CdXMgc2VuZHMgTFNCIGZpcnN0ICovCisJaTJjX3NtYnVzX3dyaXRlX3dvcmRfZGF0YShjbGllbnQsIHJlZywgc3dhYjE2KHZhbHVlKSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgd2lzX3VkYTEzNDJfY29tbWFuZChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAorCQkJCXVuc2lnbmVkIGludCBjbWQsIHZvaWQgKmFyZykKK3sKKwlzd2l0Y2ggKGNtZCkgeworCWNhc2UgVklESU9DX1NfQVVESU86CisJeworCQlpbnQgKmlucCA9IGFyZzsKKworCQlzd2l0Y2ggKCppbnApIHsKKwkJY2FzZSBUVkFVRElPX0lOUFVUX1RVTkVSOgorCQkJd3JpdGVfcmVnKGNsaWVudCwgMHgwMCwgMHgxNDQxKTsgLyogc2VsZWN0IGlucHV0IDIgKi8KKwkJCWJyZWFrOworCQljYXNlIFRWQVVESU9fSU5QVVRfRVhURVJOOgorCQkJd3JpdGVfcmVnKGNsaWVudCwgMHgwMCwgMHgxMjQxKTsgLyogc2VsZWN0IGlucHV0IDEgKi8KKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcHJpbnRrKEtFUk5fRVJSICJ3aXMtdWRhMTM0MjogaW5wdXQgJWQgbm90IHN1cHBvcnRlZFxuIiwKKwkJCQkJKmlucCk7CisJCQlicmVhazsKKwkJfQorCQlicmVhazsKKwl9CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgd2lzX3VkYTEzNDJfZHJpdmVyOworCitzdGF0aWMgc3RydWN0IGkyY19jbGllbnQgd2lzX3VkYTEzNDJfY2xpZW50X3RlbXBsID0geworCS5uYW1lCQk9ICJVREExMzQyIChXSVMpIiwKKwkuZHJpdmVyCQk9ICZ3aXNfdWRhMTM0Ml9kcml2ZXIsCit9OworCitzdGF0aWMgaW50IHdpc191ZGExMzQyX2RldGVjdChzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIsIGludCBhZGRyLCBpbnQga2luZCkKK3sKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50OworCisJaWYgKCFpMmNfY2hlY2tfZnVuY3Rpb25hbGl0eShhZGFwdGVyLCBJMkNfRlVOQ19TTUJVU19XT1JEX0RBVEEpKQorCQlyZXR1cm4gMDsKKworCWNsaWVudCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBpMmNfY2xpZW50KSwgR0ZQX0tFUk5FTCk7CisJaWYgKGNsaWVudCA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKwltZW1jcHkoY2xpZW50LCAmd2lzX3VkYTEzNDJfY2xpZW50X3RlbXBsLAorCQkJc2l6ZW9mKHdpc191ZGExMzQyX2NsaWVudF90ZW1wbCkpOworCWNsaWVudC0+YWRhcHRlciA9IGFkYXB0ZXI7CisJY2xpZW50LT5hZGRyID0gYWRkcjsKKworCXByaW50ayhLRVJOX0RFQlVHCisJCSJ3aXMtdWRhMTM0MjogaW5pdGlhbGl6aW5nIFVEQTEzNDIgYXQgYWRkcmVzcyAlZCBvbiAlc1xuIiwKKwkJYWRkciwgYWRhcHRlci0+bmFtZSk7CisKKwl3cml0ZV9yZWcoY2xpZW50LCAweDAwLCAweDgwMDApOyAvKiByZXNldCByZWdpc3RlcnMgKi8KKwl3cml0ZV9yZWcoY2xpZW50LCAweDAwLCAweDEyNDEpOyAvKiBzZWxlY3QgaW5wdXQgMSAqLworCisJaTJjX2F0dGFjaF9jbGllbnQoY2xpZW50KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB3aXNfdWRhMTM0Ml9kZXRhY2goc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKK3sKKwlpbnQgcjsKKworCXIgPSBpMmNfZGV0YWNoX2NsaWVudChjbGllbnQpOworCWlmIChyIDwgMCkKKwkJcmV0dXJuIHI7CisKKwlrZnJlZShjbGllbnQpOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgd2lzX3VkYTEzNDJfZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCS5uYW1lCT0gIldJUyBVREExMzQyIEkyQyBkcml2ZXIiLAorCX0sCisJLmlkCQk9IEkyQ19EUklWRVJJRF9XSVNfVURBMTM0MiwKKwkuZGV0YWNoX2NsaWVudAk9IHdpc191ZGExMzQyX2RldGFjaCwKKwkuY29tbWFuZAk9IHdpc191ZGExMzQyX2NvbW1hbmQsCit9OworCitzdGF0aWMgaW50IF9faW5pdCB3aXNfdWRhMTM0Ml9pbml0KHZvaWQpCit7CisJaW50IHI7CisKKwlyID0gaTJjX2FkZF9kcml2ZXIoJndpc191ZGExMzQyX2RyaXZlcik7CisJaWYgKHIgPCAwKQorCQlyZXR1cm4gcjsKKwlyZXR1cm4gd2lzX2kyY19hZGRfZHJpdmVyKHdpc191ZGExMzQyX2RyaXZlci5pZCwgd2lzX3VkYTEzNDJfZGV0ZWN0KTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IHdpc191ZGExMzQyX2NsZWFudXAodm9pZCkKK3sKKwl3aXNfaTJjX2RlbF9kcml2ZXIod2lzX3VkYTEzNDJfZGV0ZWN0KTsKKwlpMmNfZGVsX2RyaXZlcigmd2lzX3VkYTEzNDJfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQod2lzX3VkYTEzNDJfaW5pdCk7Cittb2R1bGVfZXhpdCh3aXNfdWRhMTM0Ml9jbGVhbnVwKTsKKworTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL21lNDAwMC9LY29uZmlnIGIvZHJpdmVycy9zdGFnaW5nL21lNDAwMC9LY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVlNmM5ZGUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvbWU0MDAwL0tjb25maWcKQEAgLTAsMCArMSwxMCBAQAorY29uZmlnIE1FNDAwMAorCXRyaXN0YXRlICJNZWlsaGF1cyBNRS00MDAwIHN1cHBvcnQiCisJZGVmYXVsdCBuCisJZGVwZW5kcyBvbiBQQ0kKKwloZWxwCisJICBUaGlzIGRyaXZlciBzdXBwb3J0cyB0aGUgTWVpbGhhdXMgTUUtNDAwMCBmYW1pbHkgb2YgYm9hcmRzCisJICB0aGF0IGRvIGRhdGEgY29sbGVjdGlvbiBhbmQgbXVsdGlwdXJwb3NlIEkvTy4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZQorCSAgd2lsbCBiZSBjYWxsZWQgbWU0MDAwLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL21lNDAwMC9NYWtlZmlsZSBiL2RyaXZlcnMvc3RhZ2luZy9tZTQwMDAvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzQ0ODdjZAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9tZTQwMDAvTWFrZWZpbGUKQEAgLTAsMCArMSBAQAorb2JqLSQoQ09ORklHX01FNDAwMCkJCSs9IG1lNDAwMC5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvbWU0MDAwL1JFQURNRSBiL2RyaXZlcnMvc3RhZ2luZy9tZTQwMDAvUkVBRE1FCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJiYjgzODYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvbWU0MDAwL1JFQURNRQpAQCAtMCwwICsxLDEzIEBACisKK1RPRE86CisJLSBjaGVja3BhdGNoLnBsIGNsZWFudXBzCisJLSBzcGFyc2UgY2xlYW51cHMKKwktIHBvc3NpYmxlIC9wcm9jIGludGVyYWN0aW9uIGNsZWFudXBzCisJLSBtb3JlIGluZm8gbmVlZGVkIGZvciBLY29uZmlnIGVudHJ5CisJLSByZWFsIGRldmljZSBpZD8KKwktIG1vZHVsZSBwYXJhbWV0ZXIgY2xlYW51cAorCitQbGVhc2Ugc2VuZCBwYXRjaGVzIHRvIEdyZWcgS3JvYWgtSGFydG1hbiA8Z3JlZ2toQHN1c2UuZGU+CithbmQgQ2M6IFdvbGZnYW5nIEJlaXRlciA8dy5iZWl0ZXJAYW9uLmF0PiBhbmQKK0d1ZW50ZXIgR2ViaGFyZHQgPGcuZ2ViaGFyZHRAbWVpbGhhdXMuZGU+CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9tZTQwMDAvbWU0MDAwLmMgYi9kcml2ZXJzL3N0YWdpbmcvbWU0MDAwL21lNDAwMC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg2MmRkN2YKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvbWU0MDAwL21lNDAwMC5jCkBAIC0wLDAgKzEsNjEzMyBAQAorLyogRGV2aWNlIGRyaXZlciBmb3IgTWVpbGhhdXMgTUUtNDAwMCBib2FyZCBmYW1pbHkuCisgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDAzIE1laWxoYXVzIEVsZWN0cm9uaWMgR21iSCAoc3VwcG9ydEBtZWlsaGF1cy5kZSkKKyAqCisgKiAgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICoKKyAqICBBdXRob3I6CUd1ZW50ZXIgR2ViaGFyZHQJPGcuZ2ViaGFyZHRAbWVpbGhhdXMuZGU+CisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CisjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L3VuaXN0ZC5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CisKKyNpbmNsdWRlIDxsaW51eC9wb2xsLmg+CisjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgorI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CisjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorCisvKiBJbmNsdWRlLUZpbGUgZm9yIHRoZSBNZWlsaGF1cyBNRS00MDAwIEkvTyBib2FyZCAqLworI2luY2x1ZGUgIm1lNDAwMC5oIgorI2luY2x1ZGUgIm1lNDAwMF9maXJtd2FyZS5oIgorI2luY2x1ZGUgIm1lNDYxMF9maXJtd2FyZS5oIgorCisvKiBBZG1pbmlzdHJhdGl2ZSBzdHVmZiBmb3IgbW9kaW5mbyAqLworTU9EVUxFX0FVVEhPUigiR3VlbnRlciBHZWJoYXJkdCA8Zy5nZWJoYXJkdEBtZWlsaGF1cy5kZT4iKTsKK01PRFVMRV9ERVNDUklQVElPTgorICAgICgiRGV2aWNlIERyaXZlciBNb2R1bGUgZm9yIE1laWxoYXVzIE1FLTQwMDAgYm9hcmRzIHZlcnNpb24gMS4wLjUiKTsKK01PRFVMRV9TVVBQT1JURURfREVWSUNFKCJNZWlsaGF1cyBNRS00MDAwIE11bHRpIEkvTyBib2FyZHMiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKworLyogQm9hcmQgc3BlY2lmaWMgZGF0YSBhcmUga2VwdCBpbiBhIGdsb2JhbCBsaXN0ICovCitMSVNUX0hFQUQobWU0MDAwX2JvYXJkX2luZm9fbGlzdCk7CisKKy8qIE1ham9yIERldmljZSBOdW1iZXJzLiAwIG1lYW5zIHRvIGdldCBpdCBhdXRvbWF0aWNhbGx5IGZyb20gdGhlIFN5c3RlbSAqLworc3RhdGljIGludCBtZTQwMDBfYW9fbWFqb3JfZHJpdmVyX25vID0gMDsKK3N0YXRpYyBpbnQgbWU0MDAwX2FpX21ham9yX2RyaXZlcl9ubyA9IDA7CitzdGF0aWMgaW50IG1lNDAwMF9kaW9fbWFqb3JfZHJpdmVyX25vID0gMDsKK3N0YXRpYyBpbnQgbWU0MDAwX2NudF9tYWpvcl9kcml2ZXJfbm8gPSAwOworc3RhdGljIGludCBtZTQwMDBfZXh0X2ludF9tYWpvcl9kcml2ZXJfbm8gPSAwOworCisvKiBMZXQgdGhlIHVzZXIgc3BlY2lmeSBhIGN1c3RvbSBtYWpvciBkcml2ZXIgbnVtYmVyICovCittb2R1bGVfcGFyYW0obWU0MDAwX2FvX21ham9yX2RyaXZlcl9ubywgaW50LCAwKTsKK01PRFVMRV9QQVJNX0RFU0MobWU0MDAwX2FvX21ham9yX2RyaXZlcl9ubywKKwkJICJNYWpvciBkcml2ZXIgbnVtYmVyIGZvciBhbmFsb2cgb3V0cHV0IChkZWZhdWx0IDApIik7CisKK21vZHVsZV9wYXJhbShtZTQwMDBfYWlfbWFqb3JfZHJpdmVyX25vLCBpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyhtZTQwMDBfYWlfbWFqb3JfZHJpdmVyX25vLAorCQkgIk1ham9yIGRyaXZlciBudW1iZXIgZm9yIGFuYWxvZyBpbnB1dCAoZGVmYXVsdCAwKSIpOworCittb2R1bGVfcGFyYW0obWU0MDAwX2Rpb19tYWpvcl9kcml2ZXJfbm8sIGludCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKG1lNDAwMF9kaW9fbWFqb3JfZHJpdmVyX25vLAorCQkgIk1ham9yIGRyaXZlciBudW1iZXIgZGlnaXRhbCBJL08gKGRlZmF1bHQgMCkiKTsKKworbW9kdWxlX3BhcmFtKG1lNDAwMF9jbnRfbWFqb3JfZHJpdmVyX25vLCBpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyhtZTQwMDBfY250X21ham9yX2RyaXZlcl9ubywKKwkJICJNYWpvciBkcml2ZXIgbnVtYmVyIGZvciBjb3VudGVyIChkZWZhdWx0IDApIik7CisKK21vZHVsZV9wYXJhbShtZTQwMDBfZXh0X2ludF9tYWpvcl9kcml2ZXJfbm8sIGludCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKG1lNDAwMF9leHRfaW50X21ham9yX2RyaXZlcl9ubywKKwkJICJNYWpvciBkcml2ZXIgbnVtYmVyIGZvciBleHRlcm5hbCBpbnRlcnJ1cHQgKGRlZmF1bHQgMCkiKTsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICBNb2R1bGUgc3R1ZmYKKyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK2ludCBpbml0X21vZHVsZSh2b2lkKTsKK3ZvaWQgY2xlYW51cF9tb2R1bGUodm9pZCk7CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgQm9hcmQgZGV0ZWN0aW9uIGFuZCBpbml0aWFsaXphdGlvbgorICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIGludCBtZTQwMDBfcHJvYmUoc3RydWN0IHBjaV9kZXYgKmRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKTsKK3N0YXRpYyBpbnQgbWU0MDAwX3hpbGlueF9kb3dubG9hZChtZTQwMDBfaW5mb190ICopOworc3RhdGljIGludCBtZTQwMDBfcmVzZXRfYm9hcmQobWU0MDAwX2luZm9fdCAqKTsKKworc3RhdGljIHZvaWQgY2xlYXJfYm9hcmRfaW5mb19saXN0KHZvaWQpOworc3RhdGljIGludCBnZXRfcmVnaXN0ZXJzKHN0cnVjdCBwY2lfZGV2ICpkZXYsIG1lNDAwMF9pbmZvX3QgKiBpbmZvKTsKK3N0YXRpYyBpbnQgaW5pdF9ib2FyZF9pbmZvKHN0cnVjdCBwY2lfZGV2ICpkZXYsIG1lNDAwMF9pbmZvX3QgKiBib2FyZF9pbmZvKTsKK3N0YXRpYyBpbnQgYWxsb2NfYW9fY29udGV4dHMobWU0MDAwX2luZm9fdCAqIGluZm8pOworc3RhdGljIHZvaWQgcmVsZWFzZV9hb19jb250ZXh0cyhtZTQwMDBfaW5mb190ICogYm9hcmRfaW5mbyk7CitzdGF0aWMgaW50IGFsbG9jX2FpX2NvbnRleHQobWU0MDAwX2luZm9fdCAqIGluZm8pOworc3RhdGljIGludCBhbGxvY19kaW9fY29udGV4dChtZTQwMDBfaW5mb190ICogaW5mbyk7CitzdGF0aWMgaW50IGFsbG9jX2NudF9jb250ZXh0KG1lNDAwMF9pbmZvX3QgKiBpbmZvKTsKK3N0YXRpYyBpbnQgYWxsb2NfZXh0X2ludF9jb250ZXh0KG1lNDAwMF9pbmZvX3QgKiBpbmZvKTsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICBTdHVmZiB1c2VkIGJ5IGFsbCBkZXZpY2UgcGFydHMKKyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyBpbnQgbWU0MDAwX29wZW4oc3RydWN0IGlub2RlICosIHN0cnVjdCBmaWxlICopOworc3RhdGljIGludCBtZTQwMDBfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGZpbGUgKik7CisKK3N0YXRpYyBpbnQgbWU0MDAwX2dldF91c2VyX2luZm8obWU0MDAwX3VzZXJfaW5mb190ICosCisJCQkJbWU0MDAwX2luZm9fdCAqIGJvYXJkX2luZm8pOworc3RhdGljIGludCBtZTQwMDBfcmVhZF9wcm9jbWVtKGNoYXIgKiwgY2hhciAqKiwgb2ZmX3QsIGludCwgaW50ICosIHZvaWQgKik7CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgQW5hbG9nIG91dHB1dCBzdHVmZgorICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIHNzaXplX3QgbWU0MDAwX2FvX3dyaXRlX3Npbmcoc3RydWN0IGZpbGUgKiwgY29uc3QgY2hhciAqLCBzaXplX3QsCisJCQkJICAgIGxvZmZfdCAqKTsKK3N0YXRpYyBzc2l6ZV90IG1lNDAwMF9hb193cml0ZV93cmFwKHN0cnVjdCBmaWxlICosIGNvbnN0IGNoYXIgKiwgc2l6ZV90LAorCQkJCSAgICBsb2ZmX3QgKik7CitzdGF0aWMgc3NpemVfdCBtZTQwMDBfYW9fd3JpdGVfY29udChzdHJ1Y3QgZmlsZSAqLCBjb25zdCBjaGFyICosIHNpemVfdCwKKwkJCQkgICAgbG9mZl90ICopOworCitzdGF0aWMgaW50IG1lNDAwMF9hb19pb2N0bF9zaW5nKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgZmlsZSAqLCB1bnNpZ25lZCBpbnQsCisJCQkJdW5zaWduZWQgbG9uZyk7CitzdGF0aWMgaW50IG1lNDAwMF9hb19pb2N0bF93cmFwKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgZmlsZSAqLCB1bnNpZ25lZCBpbnQsCisJCQkJdW5zaWduZWQgbG9uZyk7CitzdGF0aWMgaW50IG1lNDAwMF9hb19pb2N0bF9jb250KHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgZmlsZSAqLCB1bnNpZ25lZCBpbnQsCisJCQkJdW5zaWduZWQgbG9uZyk7CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgbWU0MDAwX2FvX3BvbGxfY29udChzdHJ1Y3QgZmlsZSAqLCBwb2xsX3RhYmxlICopOworc3RhdGljIGludCBtZTQwMDBfYW9fZnN5bmNfY29udChzdHJ1Y3QgZmlsZSAqLCBzdHJ1Y3QgZGVudHJ5ICosIGludCk7CisKK3N0YXRpYyBpbnQgbWU0MDAwX2FvX3N0YXJ0KHVuc2lnbmVkIGxvbmcgKiwgbWU0MDAwX2FvX2NvbnRleHRfdCAqKTsKK3N0YXRpYyBpbnQgbWU0MDAwX2FvX3N0b3AobWU0MDAwX2FvX2NvbnRleHRfdCAqKTsKK3N0YXRpYyBpbnQgbWU0MDAwX2FvX2ltbWVkaWF0ZV9zdG9wKG1lNDAwMF9hb19jb250ZXh0X3QgKik7CitzdGF0aWMgaW50IG1lNDAwMF9hb190aW1lcl9zZXRfZGl2aXNvcih1MzIgKiwgbWU0MDAwX2FvX2NvbnRleHRfdCAqKTsKK3N0YXRpYyBpbnQgbWU0MDAwX2FvX3ByZWxvYWQobWU0MDAwX2FvX2NvbnRleHRfdCAqKTsKK3N0YXRpYyBpbnQgbWU0MDAwX2FvX3ByZWxvYWRfdXBkYXRlKG1lNDAwMF9hb19jb250ZXh0X3QgKik7CitzdGF0aWMgaW50IG1lNDAwMF9hb19leF90cmlnX3NldF9lZGdlKGludCAqLCBtZTQwMDBfYW9fY29udGV4dF90ICopOworc3RhdGljIGludCBtZTQwMDBfYW9fZXhfdHJpZ19lbmFibGUobWU0MDAwX2FvX2NvbnRleHRfdCAqKTsKK3N0YXRpYyBpbnQgbWU0MDAwX2FvX2V4X3RyaWdfZGlzYWJsZShtZTQwMDBfYW9fY29udGV4dF90ICopOworc3RhdGljIGludCBtZTQwMDBfYW9fcHJlcGFyZShtZTQwMDBfYW9fY29udGV4dF90ICogYW9faW5mbyk7CitzdGF0aWMgaW50IG1lNDAwMF9hb19yZXNldChtZTQwMDBfYW9fY29udGV4dF90ICogYW9faW5mbyk7CitzdGF0aWMgaW50IG1lNDAwMF9hb19lbmFibGVfZG8obWU0MDAwX2FvX2NvbnRleHRfdCAqKTsKK3N0YXRpYyBpbnQgbWU0MDAwX2FvX2Rpc2FibGVfZG8obWU0MDAwX2FvX2NvbnRleHRfdCAqKTsKK3N0YXRpYyBpbnQgbWU0MDAwX2FvX2ZzbV9zdGF0ZShpbnQgKiwgbWU0MDAwX2FvX2NvbnRleHRfdCAqKTsKKworc3RhdGljIGludCBtZTQwMDBfYW9fc2ltdWx0YW5lb3VzX2V4X3RyaWcobWU0MDAwX2FvX2NvbnRleHRfdCAqIGFvX2NvbnRleHQpOworc3RhdGljIGludCBtZTQwMDBfYW9fc2ltdWx0YW5lb3VzX3N3KG1lNDAwMF9hb19jb250ZXh0X3QgKiBhb19jb250ZXh0KTsKK3N0YXRpYyBpbnQgbWU0MDAwX2FvX3NpbXVsdGFuZW91c19kaXNhYmxlKG1lNDAwMF9hb19jb250ZXh0X3QgKiBhb19jb250ZXh0KTsKK3N0YXRpYyBpbnQgbWU0MDAwX2FvX3NpbXVsdGFuZW91c191cGRhdGUobWU0MDAwX2FvX2NoYW5uZWxfbGlzdF90ICogY2hhbm5lbHMsCisJCQkJCSBtZTQwMDBfYW9fY29udGV4dF90ICogYW9fY29udGV4dCk7CisKK3N0YXRpYyBpbnQgbWU0MDAwX2FvX3N5bmNocm9ub3VzX2V4X3RyaWcobWU0MDAwX2FvX2NvbnRleHRfdCAqIGFvX2NvbnRleHQpOworc3RhdGljIGludCBtZTQwMDBfYW9fc3luY2hyb25vdXNfc3cobWU0MDAwX2FvX2NvbnRleHRfdCAqIGFvX2NvbnRleHQpOworc3RhdGljIGludCBtZTQwMDBfYW9fc3luY2hyb25vdXNfZGlzYWJsZShtZTQwMDBfYW9fY29udGV4dF90ICogYW9fY29udGV4dCk7CisKK3N0YXRpYyBpbnQgbWU0MDAwX2FvX2V4X3RyaWdfdGltZW91dCh1bnNpZ25lZCBsb25nICphcmcsCisJCQkJICAgICBtZTQwMDBfYW9fY29udGV4dF90ICogYW9fY29udGV4dCk7CitzdGF0aWMgaW50IG1lNDAwMF9hb19nZXRfZnJlZV9idWZmZXIodW5zaWduZWQgbG9uZyAqYXJnLAorCQkJCSAgICAgbWU0MDAwX2FvX2NvbnRleHRfdCAqIGFvX2NvbnRleHQpOworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIEFuYWxvZyBpbnB1dCBzdHVmZgorICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIGludCBtZTQwMDBfYWlfc2luZ2xlKG1lNDAwMF9haV9zaW5nbGVfdCAqLCBtZTQwMDBfYWlfY29udGV4dF90ICopOworc3RhdGljIGludCBtZTQwMDBfYWlfaW9jdGxfc2luZyhzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGZpbGUgKiwgdW5zaWduZWQgaW50LAorCQkJCXVuc2lnbmVkIGxvbmcpOworCitzdGF0aWMgc3NpemVfdCBtZTQwMDBfYWlfcmVhZChzdHJ1Y3QgZmlsZSAqLCBjaGFyICosIHNpemVfdCwgbG9mZl90ICopOworc3RhdGljIGludCBtZTQwMDBfYWlfaW9jdGxfc3coc3RydWN0IGlub2RlICosIHN0cnVjdCBmaWxlICosIHVuc2lnbmVkIGludCwKKwkJCSAgICAgIHVuc2lnbmVkIGxvbmcpOworc3RhdGljIHVuc2lnbmVkIGludCBtZTQwMDBfYWlfcG9sbChzdHJ1Y3QgZmlsZSAqLCBwb2xsX3RhYmxlICopOworc3RhdGljIGludCBtZTQwMDBfYWlfZmFzeW5jKGludCBmZCwgc3RydWN0IGZpbGUgKmZpbGVfcCwgaW50IG1vZGUpOworCitzdGF0aWMgaW50IG1lNDAwMF9haV9pb2N0bF9leHQoc3RydWN0IGlub2RlICosIHN0cnVjdCBmaWxlICosIHVuc2lnbmVkIGludCwKKwkJCSAgICAgICB1bnNpZ25lZCBsb25nKTsKKworc3RhdGljIGludCBtZTQwMDBfYWlfcHJlcGFyZShtZTQwMDBfYWlfY29udGV4dF90ICogYWlfY29udGV4dCk7CitzdGF0aWMgaW50IG1lNDAwMF9haV9yZXNldChtZTQwMDBfYWlfY29udGV4dF90ICogYWlfY29udGV4dCk7CitzdGF0aWMgaW50IG1lNDAwMF9haV9jb25maWcobWU0MDAwX2FpX2NvbmZpZ190ICosIG1lNDAwMF9haV9jb250ZXh0X3QgKik7CitzdGF0aWMgaW50IG1lNDAwMF9haV9zdGFydChtZTQwMDBfYWlfY29udGV4dF90ICopOworc3RhdGljIGludCBtZTQwMDBfYWlfc3RhcnRfZXgodW5zaWduZWQgbG9uZyAqLCBtZTQwMDBfYWlfY29udGV4dF90ICopOworc3RhdGljIGludCBtZTQwMDBfYWlfc3RvcChtZTQwMDBfYWlfY29udGV4dF90ICopOworc3RhdGljIGludCBtZTQwMDBfYWlfaW1tZWRpYXRlX3N0b3AobWU0MDAwX2FpX2NvbnRleHRfdCAqKTsKK3N0YXRpYyBpbnQgbWU0MDAwX2FpX2V4X3RyaWdfZW5hYmxlKG1lNDAwMF9haV9jb250ZXh0X3QgKik7CitzdGF0aWMgaW50IG1lNDAwMF9haV9leF90cmlnX2Rpc2FibGUobWU0MDAwX2FpX2NvbnRleHRfdCAqKTsKK3N0YXRpYyBpbnQgbWU0MDAwX2FpX2V4X3RyaWdfc2V0dXAobWU0MDAwX2FpX3RyaWdnZXJfdCAqLAorCQkJCSAgIG1lNDAwMF9haV9jb250ZXh0X3QgKik7CitzdGF0aWMgaW50IG1lNDAwMF9haV9zY19zZXR1cChtZTQwMDBfYWlfc2NfdCAqIGFyZywKKwkJCSAgICAgIG1lNDAwMF9haV9jb250ZXh0X3QgKiBhaV9jb250ZXh0KTsKK3N0YXRpYyBpbnQgbWU0MDAwX2FpX29mZnNldF9lbmFibGUobWU0MDAwX2FpX2NvbnRleHRfdCAqIGFpX2NvbnRleHQpOworc3RhdGljIGludCBtZTQwMDBfYWlfb2Zmc2V0X2Rpc2FibGUobWU0MDAwX2FpX2NvbnRleHRfdCAqIGFpX2NvbnRleHQpOworc3RhdGljIGludCBtZTQwMDBfYWlfZnVsbHNjYWxlX2VuYWJsZShtZTQwMDBfYWlfY29udGV4dF90ICogYWlfY29udGV4dCk7CitzdGF0aWMgaW50IG1lNDAwMF9haV9mdWxsc2NhbGVfZGlzYWJsZShtZTQwMDBfYWlfY29udGV4dF90ICogYWlfY29udGV4dCk7CitzdGF0aWMgaW50IG1lNDAwMF9haV9mc21fc3RhdGUoaW50ICphcmcsIG1lNDAwMF9haV9jb250ZXh0X3QgKiBhaV9jb250ZXh0KTsKK3N0YXRpYyBpbnQgbWU0MDAwX2FpX2dldF9jb3VudF9idWZmZXIodW5zaWduZWQgbG9uZyAqYXJnLAorCQkJCSAgICAgIG1lNDAwMF9haV9jb250ZXh0X3QgKiBhaV9jb250ZXh0KTsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICBFRVBST00gc3R1ZmYKKyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyBpbnQgbWU0MDAwX2VlcHJvbV9yZWFkKG1lNDAwMF9lZXByb21fdCAqIGFyZywKKwkJCSAgICAgIG1lNDAwMF9haV9jb250ZXh0X3QgKiBhaV9jb250ZXh0KTsKK3N0YXRpYyBpbnQgbWU0MDAwX2VlcHJvbV93cml0ZShtZTQwMDBfZWVwcm9tX3QgKiBhcmcsCisJCQkgICAgICAgbWU0MDAwX2FpX2NvbnRleHRfdCAqIGFpX2NvbnRleHQpOworc3RhdGljIHVuc2lnbmVkIHNob3J0IGVlcHJvbV9yZWFkX2NtZChtZTQwMDBfYWlfY29udGV4dF90ICogYWlfY29udGV4dCwKKwkJCQkgICAgICB1bnNpZ25lZCBsb25nIGNtZCwgaW50IGxlbmd0aCk7CitzdGF0aWMgaW50IGVlcHJvbV93cml0ZV9jbWQobWU0MDAwX2FpX2NvbnRleHRfdCAqIGFpX2NvbnRleHQsIHVuc2lnbmVkIGxvbmcgY21kLAorCQkJICAgIGludCBsZW5ndGgpOworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIERpZ2l0YWwgSS9PIHN0dWZmCisgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgaW50IG1lNDAwMF9kaW9faW9jdGwoc3RydWN0IGlub2RlICosIHN0cnVjdCBmaWxlICosIHVuc2lnbmVkIGludCwKKwkJCSAgICB1bnNpZ25lZCBsb25nKTsKK3N0YXRpYyBpbnQgbWU0MDAwX2Rpb19jb25maWcobWU0MDAwX2Rpb19jb25maWdfdCAqLCBtZTQwMDBfZGlvX2NvbnRleHRfdCAqKTsKK3N0YXRpYyBpbnQgbWU0MDAwX2Rpb19nZXRfYnl0ZShtZTQwMDBfZGlvX2J5dGVfdCAqLCBtZTQwMDBfZGlvX2NvbnRleHRfdCAqKTsKK3N0YXRpYyBpbnQgbWU0MDAwX2Rpb19zZXRfYnl0ZShtZTQwMDBfZGlvX2J5dGVfdCAqLCBtZTQwMDBfZGlvX2NvbnRleHRfdCAqKTsKK3N0YXRpYyBpbnQgbWU0MDAwX2Rpb19yZXNldChtZTQwMDBfZGlvX2NvbnRleHRfdCAqKTsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICBDb3VudGVyIHN0dWZmCisgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgaW50IG1lNDAwMF9jbnRfaW9jdGwoc3RydWN0IGlub2RlICosIHN0cnVjdCBmaWxlICosIHVuc2lnbmVkIGludCwKKwkJCSAgICB1bnNpZ25lZCBsb25nKTsKK3N0YXRpYyBpbnQgbWU0MDAwX2NudF9jb25maWcobWU0MDAwX2NudF9jb25maWdfdCAqLCBtZTQwMDBfY250X2NvbnRleHRfdCAqKTsKK3N0YXRpYyBpbnQgbWU0MDAwX2NudF9yZWFkKG1lNDAwMF9jbnRfdCAqLCBtZTQwMDBfY250X2NvbnRleHRfdCAqKTsKK3N0YXRpYyBpbnQgbWU0MDAwX2NudF93cml0ZShtZTQwMDBfY250X3QgKiwgbWU0MDAwX2NudF9jb250ZXh0X3QgKik7CitzdGF0aWMgaW50IG1lNDAwMF9jbnRfcmVzZXQobWU0MDAwX2NudF9jb250ZXh0X3QgKik7CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgRXh0ZXJuYWwgaW50ZXJydXB0IHJvdXRpbmVzCisgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgaW50IG1lNDAwMF9leHRfaW50X2lvY3RsKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgZmlsZSAqLCB1bnNpZ25lZCBpbnQsCisJCQkJdW5zaWduZWQgbG9uZyk7CitzdGF0aWMgaW50IG1lNDAwMF9leHRfaW50X2VuYWJsZShtZTQwMDBfZXh0X2ludF9jb250ZXh0X3QgKik7CitzdGF0aWMgaW50IG1lNDAwMF9leHRfaW50X2Rpc2FibGUobWU0MDAwX2V4dF9pbnRfY29udGV4dF90ICopOworc3RhdGljIGludCBtZTQwMDBfZXh0X2ludF9jb3VudCh1bnNpZ25lZCBsb25nICphcmcsCisJCQkJbWU0MDAwX2V4dF9pbnRfY29udGV4dF90ICogZXh0X2ludF9jb250ZXh0KTsKK3N0YXRpYyBpbnQgbWU0MDAwX2V4dF9pbnRfZmFzeW5jKGludCBmZCwgc3RydWN0IGZpbGUgKmZpbGVfcHRyLCBpbnQgbW9kZSk7CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgVGhlIGludGVycnVwdCBzZXJ2aWNlIHJvdXRpbmVzCisgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgaXJxcmV0dXJuX3QgbWU0MDAwX2FvX2lzcihpbnQsIHZvaWQgKik7CitzdGF0aWMgaXJxcmV0dXJuX3QgbWU0MDAwX2FpX2lzcihpbnQsIHZvaWQgKik7CitzdGF0aWMgaXJxcmV0dXJuX3QgbWU0MDAwX2V4dF9pbnRfaXNyKGludCwgdm9pZCAqKTsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICBJbmxpbmUgZnVuY3Rpb25zCisgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgaW50IGlubGluZSBtZTQwMDBfYnVmX2NvdW50KG1lNDAwMF9jaXJjX2J1Zl90LCBpbnQpOworc3RhdGljIGludCBpbmxpbmUgbWU0MDAwX2J1Zl9zcGFjZShtZTQwMDBfY2lyY19idWZfdCwgaW50KTsKK3N0YXRpYyBpbnQgaW5saW5lIG1lNDAwMF9zcGFjZV90b19lbmQobWU0MDAwX2NpcmNfYnVmX3QsIGludCk7CitzdGF0aWMgaW50IGlubGluZSBtZTQwMDBfdmFsdWVzX3RvX2VuZChtZTQwMDBfY2lyY19idWZfdCwgaW50KTsKKworc3RhdGljIHZvaWQgaW5saW5lIG1lNDAwMF9vdXRiKHVuc2lnbmVkIGNoYXIgdmFsdWUsIHVuc2lnbmVkIGxvbmcgcG9ydCk7CitzdGF0aWMgdm9pZCBpbmxpbmUgbWU0MDAwX291dGwodW5zaWduZWQgbG9uZyB2YWx1ZSwgdW5zaWduZWQgbG9uZyBwb3J0KTsKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGlubGluZSBtZTQwMDBfaW5sKHVuc2lnbmVkIGxvbmcgcG9ydCk7CitzdGF0aWMgdW5zaWduZWQgY2hhciBpbmxpbmUgbWU0MDAwX2luYih1bnNpZ25lZCBsb25nIHBvcnQpOworCitzdGF0aWMgaW50IG1lNDAwMF9idWZfY291bnQobWU0MDAwX2NpcmNfYnVmX3QgYnVmLCBpbnQgc2l6ZSkKK3sKKwlyZXR1cm4gKChidWYuaGVhZCAtIGJ1Zi50YWlsKSAmIChzaXplIC0gMSkpOworfQorCitzdGF0aWMgaW50IG1lNDAwMF9idWZfc3BhY2UobWU0MDAwX2NpcmNfYnVmX3QgYnVmLCBpbnQgc2l6ZSkKK3sKKwlyZXR1cm4gKChidWYudGFpbCAtIChidWYuaGVhZCArIDEpKSAmIChzaXplIC0gMSkpOworfQorCitzdGF0aWMgaW50IG1lNDAwMF92YWx1ZXNfdG9fZW5kKG1lNDAwMF9jaXJjX2J1Zl90IGJ1ZiwgaW50IHNpemUpCit7CisJaW50IGVuZDsKKwlpbnQgbjsKKwllbmQgPSBzaXplIC0gYnVmLnRhaWw7CisJbiA9IChidWYuaGVhZCArIGVuZCkgJiAoc2l6ZSAtIDEpOworCXJldHVybiAobiA8IGVuZCkgPyBuIDogZW5kOworfQorCitzdGF0aWMgaW50IG1lNDAwMF9zcGFjZV90b19lbmQobWU0MDAwX2NpcmNfYnVmX3QgYnVmLCBpbnQgc2l6ZSkKK3sKKwlpbnQgZW5kOworCWludCBuOworCisJZW5kID0gc2l6ZSAtIDEgLSBidWYuaGVhZDsKKwluID0gKGVuZCArIGJ1Zi50YWlsKSAmIChzaXplIC0gMSk7CisJcmV0dXJuIChuIDw9IGVuZCkgPyBuIDogKGVuZCArIDEpOworfQorCitzdGF0aWMgdm9pZCBtZTQwMDBfb3V0Yih1bnNpZ25lZCBjaGFyIHZhbHVlLCB1bnNpZ25lZCBsb25nIHBvcnQpCit7CisJUE9SVF9QREVCVUcoIi0tPiAweCUwMlggcG9ydCAweCUwNGxYXG4iLCB2YWx1ZSwgcG9ydCk7CisJb3V0Yih2YWx1ZSwgcG9ydCk7Cit9CisKK3N0YXRpYyB2b2lkIG1lNDAwMF9vdXRsKHVuc2lnbmVkIGxvbmcgdmFsdWUsIHVuc2lnbmVkIGxvbmcgcG9ydCkKK3sKKwlQT1JUX1BERUJVRygiLS0+IDB4JTA4bFggcG9ydCAweCUwNGxYXG4iLCB2YWx1ZSwgcG9ydCk7CisJb3V0bCh2YWx1ZSwgcG9ydCk7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIG1lNDAwMF9pbmwodW5zaWduZWQgbG9uZyBwb3J0KQoreworCXVuc2lnbmVkIGxvbmcgdmFsdWU7CisJdmFsdWUgPSBpbmwocG9ydCk7CisJUE9SVF9QREVCVUcoIjwtLSAweCUwOGxYIHBvcnQgMHglMDRsWFxuIiwgdmFsdWUsIHBvcnQpOworCXJldHVybiB2YWx1ZTsKK30KKworc3RhdGljIHVuc2lnbmVkIGNoYXIgbWU0MDAwX2luYih1bnNpZ25lZCBsb25nIHBvcnQpCit7CisJdW5zaWduZWQgY2hhciB2YWx1ZTsKKwl2YWx1ZSA9IGluYihwb3J0KTsKKwlQT1JUX1BERUJVRygiPC0tIDB4JTA4WCBwb3J0IDB4JTA0bFhcbiIsIHZhbHVlLCBwb3J0KTsKKwlyZXR1cm4gdmFsdWU7Cit9CisKK3N0cnVjdCBwY2lfZHJpdmVyIG1lNDAwMF9kcml2ZXIgPSB7CisJLm5hbWUgPSBNRTQwMDBfTkFNRSwKKwkuaWRfdGFibGUgPSBtZTQwMDBfcGNpX3RhYmxlLAorCS5wcm9iZSA9IG1lNDAwMF9wcm9iZQorfTsKKworc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbWU0MDAwX2FvX2ZvcHNfc2luZyA9IHsKKyAgICAgIG93bmVyOlRISVNfTU9EVUxFLAorICAgICAgd3JpdGU6bWU0MDAwX2FvX3dyaXRlX3NpbmcsCisgICAgICBpb2N0bDptZTQwMDBfYW9faW9jdGxfc2luZywKKyAgICAgIG9wZW46bWU0MDAwX29wZW4sCisgICAgICByZWxlYXNlOm1lNDAwMF9yZWxlYXNlLAorfTsKKworc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbWU0MDAwX2FvX2ZvcHNfd3JhcCA9IHsKKyAgICAgIG93bmVyOlRISVNfTU9EVUxFLAorICAgICAgd3JpdGU6bWU0MDAwX2FvX3dyaXRlX3dyYXAsCisgICAgICBpb2N0bDptZTQwMDBfYW9faW9jdGxfd3JhcCwKKyAgICAgIG9wZW46bWU0MDAwX29wZW4sCisgICAgICByZWxlYXNlOm1lNDAwMF9yZWxlYXNlLAorfTsKKworc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbWU0MDAwX2FvX2ZvcHNfY29udCA9IHsKKyAgICAgIG93bmVyOlRISVNfTU9EVUxFLAorICAgICAgd3JpdGU6bWU0MDAwX2FvX3dyaXRlX2NvbnQsCisgICAgICBwb2xsOm1lNDAwMF9hb19wb2xsX2NvbnQsCisgICAgICBpb2N0bDptZTQwMDBfYW9faW9jdGxfY29udCwKKyAgICAgIG9wZW46bWU0MDAwX29wZW4sCisgICAgICByZWxlYXNlOm1lNDAwMF9yZWxlYXNlLAorICAgICAgZnN5bmM6bWU0MDAwX2FvX2ZzeW5jX2NvbnQsCit9OworCitzdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBtZTQwMDBfYWlfZm9wc19zaW5nID0geworICAgICAgb3duZXI6VEhJU19NT0RVTEUsCisgICAgICBpb2N0bDptZTQwMDBfYWlfaW9jdGxfc2luZywKKyAgICAgIG9wZW46bWU0MDAwX29wZW4sCisgICAgICByZWxlYXNlOm1lNDAwMF9yZWxlYXNlLAorfTsKKworc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbWU0MDAwX2FpX2ZvcHNfY29udF9zdyA9IHsKKyAgICAgIG93bmVyOlRISVNfTU9EVUxFLAorICAgICAgcmVhZDptZTQwMDBfYWlfcmVhZCwKKyAgICAgIHBvbGw6bWU0MDAwX2FpX3BvbGwsCisgICAgICBpb2N0bDptZTQwMDBfYWlfaW9jdGxfc3csCisgICAgICBvcGVuOm1lNDAwMF9vcGVuLAorICAgICAgcmVsZWFzZTptZTQwMDBfcmVsZWFzZSwKKyAgICAgIGZhc3luYzptZTQwMDBfYWlfZmFzeW5jLAorfTsKKworc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbWU0MDAwX2FpX2ZvcHNfY29udF9ldCA9IHsKKyAgICAgIG93bmVyOlRISVNfTU9EVUxFLAorICAgICAgcmVhZDptZTQwMDBfYWlfcmVhZCwKKyAgICAgIHBvbGw6bWU0MDAwX2FpX3BvbGwsCisgICAgICBpb2N0bDptZTQwMDBfYWlfaW9jdGxfZXh0LAorICAgICAgb3BlbjptZTQwMDBfb3BlbiwKKyAgICAgIHJlbGVhc2U6bWU0MDAwX3JlbGVhc2UsCit9OworCitzdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBtZTQwMDBfYWlfZm9wc19jb250X2V0X3ZhbHVlID0geworICAgICAgb3duZXI6VEhJU19NT0RVTEUsCisgICAgICByZWFkOm1lNDAwMF9haV9yZWFkLAorICAgICAgcG9sbDptZTQwMDBfYWlfcG9sbCwKKyAgICAgIGlvY3RsOm1lNDAwMF9haV9pb2N0bF9leHQsCisgICAgICBvcGVuOm1lNDAwMF9vcGVuLAorICAgICAgcmVsZWFzZTptZTQwMDBfcmVsZWFzZSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG1lNDAwMF9haV9mb3BzX2NvbnRfZXRfY2hhbmxpc3QgPSB7CisgICAgICBvd25lcjpUSElTX01PRFVMRSwKKyAgICAgIHJlYWQ6bWU0MDAwX2FpX3JlYWQsCisgICAgICBwb2xsOm1lNDAwMF9haV9wb2xsLAorICAgICAgaW9jdGw6bWU0MDAwX2FpX2lvY3RsX2V4dCwKKyAgICAgIG9wZW46bWU0MDAwX29wZW4sCisgICAgICByZWxlYXNlOm1lNDAwMF9yZWxlYXNlLAorfTsKKworc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbWU0MDAwX2Rpb19mb3BzID0geworICAgICAgb3duZXI6VEhJU19NT0RVTEUsCisgICAgICBpb2N0bDptZTQwMDBfZGlvX2lvY3RsLAorICAgICAgb3BlbjptZTQwMDBfb3BlbiwKKyAgICAgIHJlbGVhc2U6bWU0MDAwX3JlbGVhc2UsCit9OworCitzdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBtZTQwMDBfY250X2ZvcHMgPSB7CisgICAgICBvd25lcjpUSElTX01PRFVMRSwKKyAgICAgIGlvY3RsOm1lNDAwMF9jbnRfaW9jdGwsCisgICAgICBvcGVuOm1lNDAwMF9vcGVuLAorICAgICAgcmVsZWFzZTptZTQwMDBfcmVsZWFzZSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG1lNDAwMF9leHRfaW50X2ZvcHMgPSB7CisgICAgICBvd25lcjpUSElTX01PRFVMRSwKKyAgICAgIGlvY3RsOm1lNDAwMF9leHRfaW50X2lvY3RsLAorICAgICAgb3BlbjptZTQwMDBfb3BlbiwKKyAgICAgIHJlbGVhc2U6bWU0MDAwX3JlbGVhc2UsCisgICAgICBmYXN5bmM6bWU0MDAwX2V4dF9pbnRfZmFzeW5jLAorfTsKKworc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgKm1lNDAwMF9hb19mb3BzX2FycmF5W10gPSB7CisJJm1lNDAwMF9hb19mb3BzX3NpbmcsCS8vIHNpbmdsZSBvcGVyYXRpb25zCisJJm1lNDAwMF9hb19mb3BzX3dyYXAsCS8vIHdyYXBhcm91bmQgb3BlcmF0aW9ucworCSZtZTQwMDBfYW9fZm9wc19jb250LAkvLyBjb250aW5vdXMgb3BlcmF0aW9ucworfTsKKworc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgKm1lNDAwMF9haV9mb3BzX2FycmF5W10gPSB7CisJJm1lNDAwMF9haV9mb3BzX3NpbmcsCS8vIHNpbmdsZSBvcGVyYXRpb25zCisJJm1lNDAwMF9haV9mb3BzX2NvbnRfc3csCS8vIGNvbnRpbnVvdXMgb3BlcmF0aW9ucyB3aXRoIHNvZnR3YXJlIHN0YXJ0CisJJm1lNDAwMF9haV9mb3BzX2NvbnRfZXQsCS8vIGNvbnRpbm91cyBvcGVyYXRpb25zIHdpdGggZXh0ZXJuYWwgdHJpZ2dlcgorCSZtZTQwMDBfYWlfZm9wc19jb250X2V0X3ZhbHVlLAkvLyBzYW1wbGUgdmFsdWVzIGJ5IGV4dGVybmFsIHRyaWdnZXIKKwkmbWU0MDAwX2FpX2ZvcHNfY29udF9ldF9jaGFubGlzdCwJLy8gd29yayB0aHJvdWdoIG9uZSBjaGFubmVsIGxpc3QgYnkgZXh0ZXJuYWwgdHJpZ2dlcgorfTsKKworaW50IF9faW5pdCBtZTQwMDBfaW5pdF9tb2R1bGUodm9pZCkKK3sKKwlpbnQgcmVzdWx0ID0gMDsKKworCUNBTExfUERFQlVHKCJpbml0X21vZHVsZSgpIGlzIGV4ZWN1dGVkXG4iKTsKKworCS8qIFJlZ2lzdGVyIGRyaXZlciBjYXBhYmlsaXRpZXMgKi8KKwlyZXN1bHQgPSBwY2lfcmVnaXN0ZXJfZHJpdmVyKCZtZTQwMDBfZHJpdmVyKTsKKwlQREVCVUcoImluaXRfbW9kdWxlKCk6JWQgZGV2aWNlcyBkZXRlY3RlZFxuIiwgcmVzdWx0KTsKKwlpZiAocmVzdWx0IDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIgIk1FNDAwMDppbml0X21vZHVsZSgpOkNhbid0IHJlZ2lzdGVyIGRyaXZlclxuIik7CisJCWdvdG8gSU5JVF9FUlJPUl8xOworCX0KKworCS8qIEFsbG9jYXRlIG1ham9yIG51bWJlciBmb3IgYW5hbG9nIG91dHB1dCAqLworCXJlc3VsdCA9CisJICAgIHJlZ2lzdGVyX2NocmRldihtZTQwMDBfYW9fbWFqb3JfZHJpdmVyX25vLCBNRTQwMDBfQU9fTkFNRSwKKwkJCSAgICAmbWU0MDAwX2FvX2ZvcHNfc2luZyk7CisJaWYgKHJlc3VsdCA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJNRTQwMDA6aW5pdF9tb2R1bGUoKTpDYW4ndCBnZXQgQU8gbWFqb3Igbm9cbiIpOworCQlnb3RvIElOSVRfRVJST1JfMjsKKwl9IGVsc2UgeworCQltZTQwMDBfYW9fbWFqb3JfZHJpdmVyX25vID0gcmVzdWx0OworCX0KKwlQREVCVUcoImluaXRfbW9kdWxlKCk6TWFqb3IgZHJpdmVyIG51bWJlciBmb3IgQU8gPSAlbGRcbiIsCisJICAgICAgIG1lNDAwMF9hb19tYWpvcl9kcml2ZXJfbm8pOworCisJLyogQWxsb2NhdGUgbWFqb3IgbnVtYmVyIGZvciBhbmFsb2cgaW5wdXQgICovCisJcmVzdWx0ID0KKwkgICAgcmVnaXN0ZXJfY2hyZGV2KG1lNDAwMF9haV9tYWpvcl9kcml2ZXJfbm8sIE1FNDAwMF9BSV9OQU1FLAorCQkJICAgICZtZTQwMDBfYWlfZm9wc19zaW5nKTsKKwlpZiAocmVzdWx0IDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIgIk1FNDAwMDppbml0X21vZHVsZSgpOkNhbid0IGdldCBBSSBtYWpvciBub1xuIik7CisJCWdvdG8gSU5JVF9FUlJPUl8zOworCX0gZWxzZSB7CisJCW1lNDAwMF9haV9tYWpvcl9kcml2ZXJfbm8gPSByZXN1bHQ7CisJfQorCVBERUJVRygiaW5pdF9tb2R1bGUoKTpNYWpvciBkcml2ZXIgbnVtYmVyIGZvciBBSSA9ICVsZFxuIiwKKwkgICAgICAgbWU0MDAwX2FpX21ham9yX2RyaXZlcl9ubyk7CisKKwkvKiBBbGxvY2F0ZSBtYWpvciBudW1iZXIgZm9yIGRpZ2l0YWwgSS9PICovCisJcmVzdWx0ID0KKwkgICAgcmVnaXN0ZXJfY2hyZGV2KG1lNDAwMF9kaW9fbWFqb3JfZHJpdmVyX25vLCBNRTQwMDBfRElPX05BTUUsCisJCQkgICAgJm1lNDAwMF9kaW9fZm9wcyk7CisJaWYgKHJlc3VsdCA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCSAgICAgICAiTUU0MDAwOmluaXRfbW9kdWxlKCk6Q2FuJ3QgZ2V0IERJTyBtYWpvciBub1xuIik7CisJCWdvdG8gSU5JVF9FUlJPUl80OworCX0gZWxzZSB7CisJCW1lNDAwMF9kaW9fbWFqb3JfZHJpdmVyX25vID0gcmVzdWx0OworCX0KKwlQREVCVUcoImluaXRfbW9kdWxlKCk6TWFqb3IgZHJpdmVyIG51bWJlciBmb3IgRElPID0gJWxkXG4iLAorCSAgICAgICBtZTQwMDBfZGlvX21ham9yX2RyaXZlcl9ubyk7CisKKwkvKiBBbGxvY2F0ZSBtYWpvciBudW1iZXIgZm9yIGNvdW50ZXIgKi8KKwlyZXN1bHQgPQorCSAgICByZWdpc3Rlcl9jaHJkZXYobWU0MDAwX2NudF9tYWpvcl9kcml2ZXJfbm8sIE1FNDAwMF9DTlRfTkFNRSwKKwkJCSAgICAmbWU0MDAwX2NudF9mb3BzKTsKKwlpZiAocmVzdWx0IDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIKKwkJICAgICAgICJNRTQwMDA6aW5pdF9tb2R1bGUoKTpDYW4ndCBnZXQgQ05UIG1ham9yIG5vXG4iKTsKKwkJZ290byBJTklUX0VSUk9SXzU7CisJfSBlbHNlIHsKKwkJbWU0MDAwX2NudF9tYWpvcl9kcml2ZXJfbm8gPSByZXN1bHQ7CisJfQorCVBERUJVRygiaW5pdF9tb2R1bGUoKTpNYWpvciBkcml2ZXIgbnVtYmVyIGZvciBDTlQgPSAlbGRcbiIsCisJICAgICAgIG1lNDAwMF9jbnRfbWFqb3JfZHJpdmVyX25vKTsKKworCS8qIEFsbG9jYXRlIG1ham9yIG51bWJlciBmb3IgZXh0ZXJuYWwgaW50ZXJydXB0ICovCisJcmVzdWx0ID0KKwkgICAgcmVnaXN0ZXJfY2hyZGV2KG1lNDAwMF9leHRfaW50X21ham9yX2RyaXZlcl9ubywgTUU0MDAwX0VYVF9JTlRfTkFNRSwKKwkJCSAgICAmbWU0MDAwX2V4dF9pbnRfZm9wcyk7CisJaWYgKHJlc3VsdCA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCSAgICAgICAiTUU0MDAwOmluaXRfbW9kdWxlKCk6Q2FuJ3QgZ2V0IG1ham9yIG5vIGZvciBleHRlcm5hbCBpbnRlcnJ1cHRcbiIpOworCQlnb3RvIElOSVRfRVJST1JfNjsKKwl9IGVsc2UgeworCQltZTQwMDBfZXh0X2ludF9tYWpvcl9kcml2ZXJfbm8gPSByZXN1bHQ7CisJfQorCVBERUJVRworCSAgICAoImluaXRfbW9kdWxlKCk6TWFqb3IgZHJpdmVyIG51bWJlciBmb3IgZXh0ZXJuYWwgaW50ZXJydXB0ID0gJWxkXG4iLAorCSAgICAgbWU0MDAwX2V4dF9pbnRfbWFqb3JfZHJpdmVyX25vKTsKKworCS8qIENyZWF0ZSB0aGUgL3Byb2MvbWU0MDAwIGVudHJ5ICovCisJaWYgKCFjcmVhdGVfcHJvY19yZWFkX2VudHJ5CisJICAgICgibWU0MDAwIiwgMCwgTlVMTCwgbWU0MDAwX3JlYWRfcHJvY21lbSwgTlVMTCkpIHsKKwkJcmVzdWx0ID0gLUVOT0RFVjsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCSAgICAgICAiTUU0MDAwOmluaXRfbW9kdWxlKCk6Q2FuJ3QgY3JlYXRlIHByb2MgZW50cnlcbiIpOworCQlnb3RvIElOSVRfRVJST1JfNzsKKwl9CisKKwlyZXR1cm4gMDsKKworICAgICAgSU5JVF9FUlJPUl83OgorCXVucmVnaXN0ZXJfY2hyZGV2KG1lNDAwMF9leHRfaW50X21ham9yX2RyaXZlcl9ubywgTUU0MDAwX0VYVF9JTlRfTkFNRSk7CisKKyAgICAgIElOSVRfRVJST1JfNjoKKwl1bnJlZ2lzdGVyX2NocmRldihtZTQwMDBfY250X21ham9yX2RyaXZlcl9ubywgTUU0MDAwX0NOVF9OQU1FKTsKKworICAgICAgSU5JVF9FUlJPUl81OgorCXVucmVnaXN0ZXJfY2hyZGV2KG1lNDAwMF9kaW9fbWFqb3JfZHJpdmVyX25vLCBNRTQwMDBfRElPX05BTUUpOworCisgICAgICBJTklUX0VSUk9SXzQ6CisJdW5yZWdpc3Rlcl9jaHJkZXYobWU0MDAwX2FpX21ham9yX2RyaXZlcl9ubywgTUU0MDAwX0FJX05BTUUpOworCisgICAgICBJTklUX0VSUk9SXzM6CisJdW5yZWdpc3Rlcl9jaHJkZXYobWU0MDAwX2FvX21ham9yX2RyaXZlcl9ubywgTUU0MDAwX0FPX05BTUUpOworCisgICAgICBJTklUX0VSUk9SXzI6CisJcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZtZTQwMDBfZHJpdmVyKTsKKwljbGVhcl9ib2FyZF9pbmZvX2xpc3QoKTsKKworICAgICAgSU5JVF9FUlJPUl8xOgorCXJldHVybiByZXN1bHQ7Cit9CisKK21vZHVsZV9pbml0KG1lNDAwMF9pbml0X21vZHVsZSk7CisKK3N0YXRpYyB2b2lkIGNsZWFyX2JvYXJkX2luZm9fbGlzdCh2b2lkKQoreworCXN0cnVjdCBsaXN0X2hlYWQgKmJvYXJkX3A7CisJc3RydWN0IGxpc3RfaGVhZCAqZGFjX3A7CisJbWU0MDAwX2luZm9fdCAqYm9hcmRfaW5mbzsKKwltZTQwMDBfYW9fY29udGV4dF90ICphb19jb250ZXh0OworCisJLyogQ2xlYXIgY29udGV4dCBsaXN0cyAqLworCWZvciAoYm9hcmRfcCA9IG1lNDAwMF9ib2FyZF9pbmZvX2xpc3QubmV4dDsKKwkgICAgIGJvYXJkX3AgIT0gJm1lNDAwMF9ib2FyZF9pbmZvX2xpc3Q7IGJvYXJkX3AgPSBib2FyZF9wLT5uZXh0KSB7CisJCWJvYXJkX2luZm8gPSBsaXN0X2VudHJ5KGJvYXJkX3AsIG1lNDAwMF9pbmZvX3QsIGxpc3QpOworCQkvKiBDbGVhciBhbmFsb2cgb3V0cHV0IGNvbnRleHQgbGlzdCAqLworCQl3aGlsZSAoIWxpc3RfZW1wdHkoJmJvYXJkX2luZm8tPmFvX2NvbnRleHRfbGlzdCkpIHsKKwkJCWRhY19wID0gYm9hcmRfaW5mby0+YW9fY29udGV4dF9saXN0Lm5leHQ7CisJCQlhb19jb250ZXh0ID0KKwkJCSAgICBsaXN0X2VudHJ5KGRhY19wLCBtZTQwMDBfYW9fY29udGV4dF90LCBsaXN0KTsKKwkJCW1lNDAwMF9hb19yZXNldChhb19jb250ZXh0KTsKKwkJCWZyZWVfaXJxKGFvX2NvbnRleHQtPmlycSwgYW9fY29udGV4dCk7CisJCQlpZiAoYW9fY29udGV4dC0+Y2lyY19idWYuYnVmKQorCQkJCWtmcmVlKGFvX2NvbnRleHQtPmNpcmNfYnVmLmJ1Zik7CisJCQlsaXN0X2RlbChkYWNfcCk7CisJCQlrZnJlZShhb19jb250ZXh0KTsKKwkJfQorCisJCS8qIENsZWFyIGFuYWxvZyBpbnB1dCBjb250ZXh0ICovCisJCWlmIChib2FyZF9pbmZvLT5haV9jb250ZXh0LT5jaXJjX2J1Zi5idWYpCisJCQlrZnJlZShib2FyZF9pbmZvLT5haV9jb250ZXh0LT5jaXJjX2J1Zi5idWYpOworCQlrZnJlZShib2FyZF9pbmZvLT5haV9jb250ZXh0KTsKKworCQkvKiBDbGVhciBkaWdpdGFsIEkvTyBjb250ZXh0ICovCisJCWtmcmVlKGJvYXJkX2luZm8tPmRpb19jb250ZXh0KTsKKworCQkvKiBDbGVhciBjb3VudGVyIGNvbnRleHQgKi8KKwkJa2ZyZWUoYm9hcmRfaW5mby0+Y250X2NvbnRleHQpOworCisJCS8qIENsZWFyIGV4dGVybmFsIGludGVycnVwdCBjb250ZXh0ICovCisJCWtmcmVlKGJvYXJkX2luZm8tPmV4dF9pbnRfY29udGV4dCk7CisJfQorCisJLyogQ2xlYXIgdGhlIGJvYXJkIGluZm8gbGlzdCAqLworCXdoaWxlICghbGlzdF9lbXB0eSgmbWU0MDAwX2JvYXJkX2luZm9fbGlzdCkpIHsKKwkJYm9hcmRfcCA9IG1lNDAwMF9ib2FyZF9pbmZvX2xpc3QubmV4dDsKKwkJYm9hcmRfaW5mbyA9IGxpc3RfZW50cnkoYm9hcmRfcCwgbWU0MDAwX2luZm9fdCwgbGlzdCk7CisJCXBjaV9yZWxlYXNlX3JlZ2lvbnMoYm9hcmRfaW5mby0+cGNpX2Rldl9wKTsKKwkJbGlzdF9kZWwoYm9hcmRfcCk7CisJCWtmcmVlKGJvYXJkX2luZm8pOworCX0KK30KKworc3RhdGljIGludCBnZXRfcmVnaXN0ZXJzKHN0cnVjdCBwY2lfZGV2ICpkZXYsIG1lNDAwMF9pbmZvX3QgKiBib2FyZF9pbmZvKQoreworCisJLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gcGx4IHJlZ2Jhc2UgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworCWJvYXJkX2luZm8tPnBseF9yZWdiYXNlID0gcGNpX3Jlc291cmNlX3N0YXJ0KGRldiwgMSk7CisJaWYgKGJvYXJkX2luZm8tPnBseF9yZWdiYXNlID09IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCSAgICAgICAiTUU0MDAwOmdldF9yZWdpc3RlcnMoKTpQQ0kgYmFzZSBhZGRyZXNzIDEgaXMgbm90IGF2YWlsYWJsZVxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKwlib2FyZF9pbmZvLT5wbHhfcmVnYmFzZV9zaXplID0gcGNpX3Jlc291cmNlX2xlbihkZXYsIDEpOworCisJUERFQlVHCisJICAgICgiZ2V0X3JlZ2lzdGVycygpOlBMWCBjb25maWd1cmF0aW9uIHJlZ2lzdGVycyBhdCBhZGRyZXNzIDB4JTRsWCBbMHglNGxYXVxuIiwKKwkgICAgIGJvYXJkX2luZm8tPnBseF9yZWdiYXNlLCBib2FyZF9pbmZvLT5wbHhfcmVnYmFzZV9zaXplKTsKKworCS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIG1lNDAwMCByZWdiYXNlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKwlib2FyZF9pbmZvLT5tZTQwMDBfcmVnYmFzZSA9IHBjaV9yZXNvdXJjZV9zdGFydChkZXYsIDIpOworCWlmIChib2FyZF9pbmZvLT5tZTQwMDBfcmVnYmFzZSA9PSAwKSB7CisJCXByaW50ayhLRVJOX0VSUgorCQkgICAgICAgIk1FNDAwMDpnZXRfcmVnaXN0ZXJzKCk6UENJIGJhc2UgYWRkcmVzcyAyIGlzIG5vdCBhdmFpbGFibGVcbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisJYm9hcmRfaW5mby0+bWU0MDAwX3JlZ2Jhc2Vfc2l6ZSA9IHBjaV9yZXNvdXJjZV9sZW4oZGV2LCAyKTsKKworCVBERUJVRygiZ2V0X3JlZ2lzdGVycygpOk1FNDAwMCByZWdpc3RlcnMgYXQgYWRkcmVzcyAweCU0bFggWzB4JTRsWF1cbiIsCisJICAgICAgIGJvYXJkX2luZm8tPm1lNDAwMF9yZWdiYXNlLCBib2FyZF9pbmZvLT5tZTQwMDBfcmVnYmFzZV9zaXplKTsKKworCS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHRpbWVyIHJlZ2Jhc2UgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworCWJvYXJkX2luZm8tPnRpbWVyX3JlZ2Jhc2UgPSBwY2lfcmVzb3VyY2Vfc3RhcnQoZGV2LCAzKTsKKwlpZiAoYm9hcmRfaW5mby0+dGltZXJfcmVnYmFzZSA9PSAwKSB7CisJCXByaW50ayhLRVJOX0VSUgorCQkgICAgICAgIk1FNDAwMDpnZXRfcmVnaXN0ZXJzKCk6UENJIGJhc2UgYWRkcmVzcyAzIGlzIG5vdCBhdmFpbGFibGVcbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisJYm9hcmRfaW5mby0+dGltZXJfcmVnYmFzZV9zaXplID0gcGNpX3Jlc291cmNlX2xlbihkZXYsIDMpOworCisJUERFQlVHKCJnZXRfcmVnaXN0ZXJzKCk6VGltZXIgcmVnaXN0ZXJzIGF0IGFkZHJlc3MgMHglNGxYIFsweCU0bFhdXG4iLAorCSAgICAgICBib2FyZF9pbmZvLT50aW1lcl9yZWdiYXNlLCBib2FyZF9pbmZvLT50aW1lcl9yZWdiYXNlX3NpemUpOworCisJLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gcHJvZ3JhbSByZWdiYXNlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKwlib2FyZF9pbmZvLT5wcm9ncmFtX3JlZ2Jhc2UgPSBwY2lfcmVzb3VyY2Vfc3RhcnQoZGV2LCA1KTsKKwlpZiAoYm9hcmRfaW5mby0+cHJvZ3JhbV9yZWdiYXNlID09IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCSAgICAgICAiZ2V0X3JlZ2lzdGVycygpOk1FNDAwMDpQQ0kgYmFzZSBhZGRyZXNzIDUgaXMgbm90IGF2YWlsYWJsZVxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKwlib2FyZF9pbmZvLT5wcm9ncmFtX3JlZ2Jhc2Vfc2l6ZSA9IHBjaV9yZXNvdXJjZV9sZW4oZGV2LCA1KTsKKworCVBERUJVRygiZ2V0X3JlZ2lzdGVycygpOlByb2dyYW0gcmVnaXN0ZXJzIGF0IGFkZHJlc3MgMHglNGxYIFsweCU0bFhdXG4iLAorCSAgICAgICBib2FyZF9pbmZvLT5wcm9ncmFtX3JlZ2Jhc2UsIGJvYXJkX2luZm8tPnByb2dyYW1fcmVnYmFzZV9zaXplKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGluaXRfYm9hcmRfaW5mbyhzdHJ1Y3QgcGNpX2RldiAqcGNpX2Rldl9wLAorCQkJICAgbWU0MDAwX2luZm9fdCAqIGJvYXJkX2luZm8pCit7CisJaW50IGk7CisJaW50IHJlc3VsdDsKKwlzdHJ1Y3QgbGlzdF9oZWFkICpib2FyZF9wOworCWJvYXJkX2luZm8tPnBjaV9kZXZfcCA9IHBjaV9kZXZfcDsKKworCWZvciAoaSA9IDA7IGkgPCBNRTQwMDBfQk9BUkRfVkVSU0lPTlM7IGkrKykgeworCQlpZiAobWU0MDAwX2JvYXJkc1tpXS5kZXZpY2VfaWQgPT0gcGNpX2Rldl9wLT5kZXZpY2UpIHsKKwkJCWJvYXJkX2luZm8tPmJvYXJkX3AgPSAmbWU0MDAwX2JvYXJkc1tpXTsKKwkJCWJyZWFrOworCQl9CisJfQorCWlmIChpID09IE1FNDAwMF9CT0FSRF9WRVJTSU9OUykgeworCQlwcmludGsoS0VSTl9FUlIKKwkJICAgICAgICJNRTQwMDA6aW5pdF9ib2FyZF9pbmZvKCk6RGV2aWNlIElEIG5vdCB2YWxpZFxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCS8qIEdldCB0aGUgaW5kZXggb2YgdGhlIGJvYXJkIGluIHRoZSBnbG9iYWwgbGlzdCAqLworCWZvciAoYm9hcmRfcCA9IG1lNDAwMF9ib2FyZF9pbmZvX2xpc3QubmV4dCwgaSA9IDA7CisJICAgICBib2FyZF9wICE9ICZtZTQwMDBfYm9hcmRfaW5mb19saXN0OyBib2FyZF9wID0gYm9hcmRfcC0+bmV4dCwgaSsrKSB7CisJCWlmIChib2FyZF9wID09ICZib2FyZF9pbmZvLT5saXN0KSB7CisJCQlib2FyZF9pbmZvLT5ib2FyZF9jb3VudCA9IGk7CisJCQlicmVhazsKKwkJfQorCX0KKwlpZiAoYm9hcmRfcCA9PSAmbWU0MDAwX2JvYXJkX2luZm9fbGlzdCkgeworCQlwcmludGsoS0VSTl9FUlIKKwkJICAgICAgICJNRTQwMDA6aW5pdF9ib2FyZF9pbmZvKCk6Q2Fubm90IGdldCBpbmRleCBvZiBiYW9yZFxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCS8qIEluaXQgbGlzdCBoZWFkIGZvciBhbmFsb2cgb3V0cHV0IGNvbnRleHRzICovCisJSU5JVF9MSVNUX0hFQUQoJmJvYXJkX2luZm8tPmFvX2NvbnRleHRfbGlzdCk7CisKKwkvKiBJbml0IHNwaW4gbG9ja3MgKi8KKwlzcGluX2xvY2tfaW5pdCgmYm9hcmRfaW5mby0+cHJlbG9hZF9sb2NrKTsKKwlzcGluX2xvY2tfaW5pdCgmYm9hcmRfaW5mby0+YWlfY3RybF9sb2NrKTsKKworCS8qIEdldCB0aGUgc2VyaWFsIG51bWJlciAqLworCXJlc3VsdCA9IHBjaV9yZWFkX2NvbmZpZ19kd29yZChwY2lfZGV2X3AsIDB4MkMsICZib2FyZF9pbmZvLT5zZXJpYWxfbm8pOworCWlmIChyZXN1bHQgIT0gUENJQklPU19TVUNDRVNTRlVMKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcKKwkJICAgICAgICJNRTQwMDA6aW5pdF9ib2FyZF9pbmZvOiBDYW4ndCBnZXQgc2VyaWFsX25vXG4iKTsKKwkJcmV0dXJuIHJlc3VsdDsKKwl9CisJUERFQlVHKCJpbml0X2JvYXJkX2luZm8oKTpzZXJpYWxfbm8gPSAweCV4XG4iLCBib2FyZF9pbmZvLT5zZXJpYWxfbm8pOworCisJLyogR2V0IHRoZSBoYXJkd2FyZSByZXZpc2lvbiAqLworCXJlc3VsdCA9CisJICAgIHBjaV9yZWFkX2NvbmZpZ19ieXRlKHBjaV9kZXZfcCwgMHgwOCwgJmJvYXJkX2luZm8tPmh3X3JldmlzaW9uKTsKKwlpZiAocmVzdWx0ICE9IFBDSUJJT1NfU1VDQ0VTU0ZVTCkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HCisJCSAgICAgICAiTUU0MDAwOmluaXRfYm9hcmRfaW5mbygpOkNhbid0IGdldCBod19yZXZpc2lvblxuIik7CisJCXJldHVybiByZXN1bHQ7CisJfQorCVBERUJVRygiaW5pdF9ib2FyZF9pbmZvKCk6aHdfcmV2aXNpb24gPSAweCV4XG4iLAorCSAgICAgICBib2FyZF9pbmZvLT5od19yZXZpc2lvbik7CisKKwkvKiBHZXQgdGhlIHZlbmRvciBpZCAqLworCWJvYXJkX2luZm8tPnZlbmRvcl9pZCA9IHBjaV9kZXZfcC0+dmVuZG9yOworCVBERUJVRygiaW5pdF9ib2FyZF9pbmZvKCk6dmVuZG9yX2lkID0gMHgleFxuIiwgYm9hcmRfaW5mby0+dmVuZG9yX2lkKTsKKworCS8qIEdldCB0aGUgZGV2aWNlIGlkICovCisJYm9hcmRfaW5mby0+ZGV2aWNlX2lkID0gcGNpX2Rldl9wLT5kZXZpY2U7CisJUERFQlVHKCJpbml0X2JvYXJkX2luZm8oKTpkZXZpY2VfaWQgPSAweCV4XG4iLCBib2FyZF9pbmZvLT5kZXZpY2VfaWQpOworCisJLyogR2V0IHRoZSBwY2kgZGV2aWNlIG51bWJlciAqLworCWJvYXJkX2luZm8tPnBjaV9kZXZfbm8gPSBQQ0lfRlVOQyhwY2lfZGV2X3AtPmRldmZuKTsKKwlQREVCVUcoImluaXRfYm9hcmRfaW5mbygpOnBjaV9mdW5jX25vID0gMHgleFxuIiwKKwkgICAgICAgYm9hcmRfaW5mby0+cGNpX2Z1bmNfbm8pOworCisJLyogR2V0IHRoZSBwY2kgc2xvdCBudW1iZXIgKi8KKwlib2FyZF9pbmZvLT5wY2lfZGV2X25vID0gUENJX1NMT1QocGNpX2Rldl9wLT5kZXZmbik7CisJUERFQlVHKCJpbml0X2JvYXJkX2luZm8oKTpwY2lfZGV2X25vID0gMHgleFxuIiwgYm9hcmRfaW5mby0+cGNpX2Rldl9ubyk7CisKKwkvKiBHZXQgdGhlIHBjaSBidXMgbnVtYmVyICovCisJYm9hcmRfaW5mby0+cGNpX2J1c19ubyA9IHBjaV9kZXZfcC0+YnVzLT5udW1iZXI7CisJUERFQlVHKCJpbml0X2JvYXJkX2luZm8oKTpwY2lfYnVzX25vID0gMHgleFxuIiwgYm9hcmRfaW5mby0+cGNpX2J1c19ubyk7CisKKwkvKiBHZXQgdGhlIGlycSBhc3NpZ25lZCB0byB0aGUgYm9hcmQgKi8KKwlib2FyZF9pbmZvLT5pcnEgPSBwY2lfZGV2X3AtPmlycTsKKwlQREVCVUcoImluaXRfYm9hcmRfaW5mbygpOmlycSA9ICVkXG4iLCBib2FyZF9pbmZvLT5pcnEpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYWxsb2NfYW9fY29udGV4dHMobWU0MDAwX2luZm9fdCAqIGluZm8pCit7CisJaW50IGk7CisJaW50IGVycjsKKwltZTQwMDBfYW9fY29udGV4dF90ICphb19jb250ZXh0OworCisJZm9yIChpID0gMDsgaSA8IGluZm8tPmJvYXJkX3AtPmFvLmNvdW50OyBpKyspIHsKKwkJYW9fY29udGV4dCA9IGttYWxsb2Moc2l6ZW9mKG1lNDAwMF9hb19jb250ZXh0X3QpLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCFhb19jb250ZXh0KSB7CisJCQlwcmludGsoS0VSTl9FUlIKKwkJCSAgICAgICAiYWxsb2NfYW9fY29udGV4dHMoKTpDYW4ndCBnZXQgbWVtb3J5IGZvciBhbyBjb250ZXh0XG4iKTsKKwkJCXJlbGVhc2VfYW9fY29udGV4dHMoaW5mbyk7CisJCQlyZXR1cm4gLUVOT01FTTsKKwkJfQorCQltZW1zZXQoYW9fY29udGV4dCwgMCwgc2l6ZW9mKG1lNDAwMF9hb19jb250ZXh0X3QpKTsKKworCQlzcGluX2xvY2tfaW5pdCgmYW9fY29udGV4dC0+dXNlX2xvY2spOworCQlzcGluX2xvY2tfaW5pdCgmYW9fY29udGV4dC0+aW50X2xvY2spOworCQlhb19jb250ZXh0LT5pcnEgPSBpbmZvLT5pcnE7CisJCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmFvX2NvbnRleHQtPndhaXRfcXVldWUpOworCQlhb19jb250ZXh0LT5ib2FyZF9pbmZvID0gaW5mbzsKKworCQlpZiAoaW5mby0+Ym9hcmRfcC0+YW8uZmlmb19jb3VudCkgeworCQkJLyogQWxsb2NhdGUgY2lyY3VsYXIgYnVmZmVyICovCisJCQlhb19jb250ZXh0LT5jaXJjX2J1Zi5idWYgPQorCQkJICAgIGttYWxsb2MoTUU0MDAwX0FPX0JVRkZFUl9TSVpFLCBHRlBfS0VSTkVMKTsKKwkJCWlmICghYW9fY29udGV4dC0+Y2lyY19idWYuYnVmKSB7CisJCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkJICAgICAgICJhbGxvY19hb19jb250ZXh0cygpOkNhbid0IGdldCBjaXJjdWxhciBidWZmZXJcbiIpOworCQkJCXJlbGVhc2VfYW9fY29udGV4dHMoaW5mbyk7CisJCQkJcmV0dXJuIC1FTk9NRU07CisJCQl9CisJCQltZW1zZXQoYW9fY29udGV4dC0+Y2lyY19idWYuYnVmLCAwLAorCQkJICAgICAgIE1FNDAwMF9BT19CVUZGRVJfU0laRSk7CisKKwkJCS8qIENsZWFyIHRoZSBjaXJjdWxhciBidWZmZXIgKi8KKwkJCWFvX2NvbnRleHQtPmNpcmNfYnVmLmhlYWQgPSAwOworCQkJYW9fY29udGV4dC0+Y2lyY19idWYudGFpbCA9IDA7CisJCX0KKworCQlzd2l0Y2ggKGkpIHsKKwkJY2FzZSAwOgorCQkJYW9fY29udGV4dC0+Y3RybF9yZWcgPQorCQkJICAgIGluZm8tPm1lNDAwMF9yZWdiYXNlICsgTUU0MDAwX0FPXzAwX0NUUkxfUkVHOworCQkJYW9fY29udGV4dC0+c3RhdHVzX3JlZyA9CisJCQkgICAgaW5mby0+bWU0MDAwX3JlZ2Jhc2UgKyBNRTQwMDBfQU9fMDBfU1RBVFVTX1JFRzsKKwkJCWFvX2NvbnRleHQtPmZpZm9fcmVnID0KKwkJCSAgICBpbmZvLT5tZTQwMDBfcmVnYmFzZSArIE1FNDAwMF9BT18wMF9GSUZPX1JFRzsKKwkJCWFvX2NvbnRleHQtPnNpbmdsZV9yZWcgPQorCQkJICAgIGluZm8tPm1lNDAwMF9yZWdiYXNlICsgTUU0MDAwX0FPXzAwX1NJTkdMRV9SRUc7CisJCQlhb19jb250ZXh0LT50aW1lcl9yZWcgPQorCQkJICAgIGluZm8tPm1lNDAwMF9yZWdiYXNlICsgTUU0MDAwX0FPXzAwX1RJTUVSX1JFRzsKKwkJCWFvX2NvbnRleHQtPmlycV9zdGF0dXNfcmVnID0KKwkJCSAgICBpbmZvLT5tZTQwMDBfcmVnYmFzZSArIE1FNDAwMF9JUlFfU1RBVFVTX1JFRzsKKwkJCWFvX2NvbnRleHQtPnByZWxvYWRfcmVnID0KKwkJCSAgICBpbmZvLT5tZTQwMDBfcmVnYmFzZSArIE1FNDAwMF9BT19MT0FEU0VUUkVHX1hYOworCQkJYnJlYWs7CisJCWNhc2UgMToKKwkJCWFvX2NvbnRleHQtPmN0cmxfcmVnID0KKwkJCSAgICBpbmZvLT5tZTQwMDBfcmVnYmFzZSArIE1FNDAwMF9BT18wMV9DVFJMX1JFRzsKKwkJCWFvX2NvbnRleHQtPnN0YXR1c19yZWcgPQorCQkJICAgIGluZm8tPm1lNDAwMF9yZWdiYXNlICsgTUU0MDAwX0FPXzAxX1NUQVRVU19SRUc7CisJCQlhb19jb250ZXh0LT5maWZvX3JlZyA9CisJCQkgICAgaW5mby0+bWU0MDAwX3JlZ2Jhc2UgKyBNRTQwMDBfQU9fMDFfRklGT19SRUc7CisJCQlhb19jb250ZXh0LT5zaW5nbGVfcmVnID0KKwkJCSAgICBpbmZvLT5tZTQwMDBfcmVnYmFzZSArIE1FNDAwMF9BT18wMV9TSU5HTEVfUkVHOworCQkJYW9fY29udGV4dC0+dGltZXJfcmVnID0KKwkJCSAgICBpbmZvLT5tZTQwMDBfcmVnYmFzZSArIE1FNDAwMF9BT18wMV9USU1FUl9SRUc7CisJCQlhb19jb250ZXh0LT5pcnFfc3RhdHVzX3JlZyA9CisJCQkgICAgaW5mby0+bWU0MDAwX3JlZ2Jhc2UgKyBNRTQwMDBfSVJRX1NUQVRVU19SRUc7CisJCQlhb19jb250ZXh0LT5wcmVsb2FkX3JlZyA9CisJCQkgICAgaW5mby0+bWU0MDAwX3JlZ2Jhc2UgKyBNRTQwMDBfQU9fTE9BRFNFVFJFR19YWDsKKwkJCWJyZWFrOworCQljYXNlIDI6CisJCQlhb19jb250ZXh0LT5jdHJsX3JlZyA9CisJCQkgICAgaW5mby0+bWU0MDAwX3JlZ2Jhc2UgKyBNRTQwMDBfQU9fMDJfQ1RSTF9SRUc7CisJCQlhb19jb250ZXh0LT5zdGF0dXNfcmVnID0KKwkJCSAgICBpbmZvLT5tZTQwMDBfcmVnYmFzZSArIE1FNDAwMF9BT18wMl9TVEFUVVNfUkVHOworCQkJYW9fY29udGV4dC0+Zmlmb19yZWcgPQorCQkJICAgIGluZm8tPm1lNDAwMF9yZWdiYXNlICsgTUU0MDAwX0FPXzAyX0ZJRk9fUkVHOworCQkJYW9fY29udGV4dC0+c2luZ2xlX3JlZyA9CisJCQkgICAgaW5mby0+bWU0MDAwX3JlZ2Jhc2UgKyBNRTQwMDBfQU9fMDJfU0lOR0xFX1JFRzsKKwkJCWFvX2NvbnRleHQtPnRpbWVyX3JlZyA9CisJCQkgICAgaW5mby0+bWU0MDAwX3JlZ2Jhc2UgKyBNRTQwMDBfQU9fMDJfVElNRVJfUkVHOworCQkJYW9fY29udGV4dC0+aXJxX3N0YXR1c19yZWcgPQorCQkJICAgIGluZm8tPm1lNDAwMF9yZWdiYXNlICsgTUU0MDAwX0lSUV9TVEFUVVNfUkVHOworCQkJYW9fY29udGV4dC0+cHJlbG9hZF9yZWcgPQorCQkJICAgIGluZm8tPm1lNDAwMF9yZWdiYXNlICsgTUU0MDAwX0FPX0xPQURTRVRSRUdfWFg7CisJCQlicmVhazsKKwkJY2FzZSAzOgorCQkJYW9fY29udGV4dC0+Y3RybF9yZWcgPQorCQkJICAgIGluZm8tPm1lNDAwMF9yZWdiYXNlICsgTUU0MDAwX0FPXzAzX0NUUkxfUkVHOworCQkJYW9fY29udGV4dC0+c3RhdHVzX3JlZyA9CisJCQkgICAgaW5mby0+bWU0MDAwX3JlZ2Jhc2UgKyBNRTQwMDBfQU9fMDNfU1RBVFVTX1JFRzsKKwkJCWFvX2NvbnRleHQtPmZpZm9fcmVnID0KKwkJCSAgICBpbmZvLT5tZTQwMDBfcmVnYmFzZSArIE1FNDAwMF9BT18wM19GSUZPX1JFRzsKKwkJCWFvX2NvbnRleHQtPnNpbmdsZV9yZWcgPQorCQkJICAgIGluZm8tPm1lNDAwMF9yZWdiYXNlICsgTUU0MDAwX0FPXzAzX1NJTkdMRV9SRUc7CisJCQlhb19jb250ZXh0LT50aW1lcl9yZWcgPQorCQkJICAgIGluZm8tPm1lNDAwMF9yZWdiYXNlICsgTUU0MDAwX0FPXzAzX1RJTUVSX1JFRzsKKwkJCWFvX2NvbnRleHQtPmlycV9zdGF0dXNfcmVnID0KKwkJCSAgICBpbmZvLT5tZTQwMDBfcmVnYmFzZSArIE1FNDAwMF9JUlFfU1RBVFVTX1JFRzsKKwkJCWFvX2NvbnRleHQtPnByZWxvYWRfcmVnID0KKwkJCSAgICBpbmZvLT5tZTQwMDBfcmVnYmFzZSArIE1FNDAwMF9BT19MT0FEU0VUUkVHX1hYOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlicmVhazsKKwkJfQorCisJCWlmIChpbmZvLT5ib2FyZF9wLT5hby5maWZvX2NvdW50KSB7CisJCQkvKiBSZXF1ZXN0IHRoZSBpbnRlcnJ1cHQgbGluZSAqLworCQkJZXJyID0KKwkJCSAgICByZXF1ZXN0X2lycShhb19jb250ZXh0LT5pcnEsIG1lNDAwMF9hb19pc3IsCisJCQkJCUlSUUZfRElTQUJMRUQgfCBJUlFGX1NIQVJFRCwKKwkJCQkJTUU0MDAwX05BTUUsIGFvX2NvbnRleHQpOworCQkJaWYgKGVycikgeworCQkJCXByaW50ayhLRVJOX0VSUgorCQkJCSAgICAgICAiYWxsb2NfYW9fY29udGV4dHMoKTpDYW4ndCBnZXQgaW50ZXJydXB0IGxpbmUiKTsKKwkJCQlpZiAoYW9fY29udGV4dC0+Y2lyY19idWYuYnVmKQorCQkJCQlrZnJlZShhb19jb250ZXh0LT5jaXJjX2J1Zi5idWYpOworCQkJCWtmcmVlKGFvX2NvbnRleHQpOworCQkJCXJlbGVhc2VfYW9fY29udGV4dHMoaW5mbyk7CisJCQkJcmV0dXJuIC1FTk9ERVY7CisJCQl9CisJCX0KKworCQlsaXN0X2FkZF90YWlsKCZhb19jb250ZXh0LT5saXN0LCAmaW5mby0+YW9fY29udGV4dF9saXN0KTsKKwkJYW9fY29udGV4dC0+aW5kZXggPSBpOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCByZWxlYXNlX2FvX2NvbnRleHRzKG1lNDAwMF9pbmZvX3QgKiBib2FyZF9pbmZvKQoreworCXN0cnVjdCBsaXN0X2hlYWQgKmRhY19wOworCW1lNDAwMF9hb19jb250ZXh0X3QgKmFvX2NvbnRleHQ7CisKKwkvKiBDbGVhciBhbmFsb2cgb3V0cHV0IGNvbnRleHQgbGlzdCAqLworCXdoaWxlICghbGlzdF9lbXB0eSgmYm9hcmRfaW5mby0+YW9fY29udGV4dF9saXN0KSkgeworCQlkYWNfcCA9IGJvYXJkX2luZm8tPmFvX2NvbnRleHRfbGlzdC5uZXh0OworCQlhb19jb250ZXh0ID0gbGlzdF9lbnRyeShkYWNfcCwgbWU0MDAwX2FvX2NvbnRleHRfdCwgbGlzdCk7CisJCWZyZWVfaXJxKGFvX2NvbnRleHQtPmlycSwgYW9fY29udGV4dCk7CisJCWlmIChhb19jb250ZXh0LT5jaXJjX2J1Zi5idWYpCisJCQlrZnJlZShhb19jb250ZXh0LT5jaXJjX2J1Zi5idWYpOworCQlsaXN0X2RlbChkYWNfcCk7CisJCWtmcmVlKGFvX2NvbnRleHQpOworCX0KK30KKworc3RhdGljIGludCBhbGxvY19haV9jb250ZXh0KG1lNDAwMF9pbmZvX3QgKiBpbmZvKQoreworCW1lNDAwMF9haV9jb250ZXh0X3QgKmFpX2NvbnRleHQ7CisKKwlpZiAoaW5mby0+Ym9hcmRfcC0+YWkuY291bnQpIHsKKwkJYWlfY29udGV4dCA9IGttYWxsb2Moc2l6ZW9mKG1lNDAwMF9haV9jb250ZXh0X3QpLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCFhaV9jb250ZXh0KSB7CisJCQlwcmludGsoS0VSTl9FUlIKKwkJCSAgICAgICAiTUU0MDAwOmFsbG9jX2FpX2NvbnRleHQoKTpDYW4ndCBnZXQgbWVtb3J5IGZvciBhaSBjb250ZXh0XG4iKTsKKwkJCXJldHVybiAtRU5PTUVNOworCQl9CisJCW1lbXNldChhaV9jb250ZXh0LCAwLCBzaXplb2YobWU0MDAwX2FpX2NvbnRleHRfdCkpOworCisJCWluZm8tPmFpX2NvbnRleHQgPSBhaV9jb250ZXh0OworCisJCXNwaW5fbG9ja19pbml0KCZhaV9jb250ZXh0LT51c2VfbG9jayk7CisJCXNwaW5fbG9ja19pbml0KCZhaV9jb250ZXh0LT5pbnRfbG9jayk7CisJCWFpX2NvbnRleHQtPm51bWJlciA9IDA7CisJCWFpX2NvbnRleHQtPmlycSA9IGluZm8tPmlycTsKKwkJaW5pdF93YWl0cXVldWVfaGVhZCgmYWlfY29udGV4dC0+d2FpdF9xdWV1ZSk7CisJCWFpX2NvbnRleHQtPmJvYXJkX2luZm8gPSBpbmZvOworCisJCWFpX2NvbnRleHQtPmN0cmxfcmVnID0KKwkJICAgIGluZm8tPm1lNDAwMF9yZWdiYXNlICsgTUU0MDAwX0FJX0NUUkxfUkVHOworCQlhaV9jb250ZXh0LT5zdGF0dXNfcmVnID0KKwkJICAgIGluZm8tPm1lNDAwMF9yZWdiYXNlICsgTUU0MDAwX0FJX1NUQVRVU19SRUc7CisJCWFpX2NvbnRleHQtPmNoYW5uZWxfbGlzdF9yZWcgPQorCQkgICAgaW5mby0+bWU0MDAwX3JlZ2Jhc2UgKyBNRTQwMDBfQUlfQ0hBTk5FTF9MSVNUX1JFRzsKKwkJYWlfY29udGV4dC0+ZGF0YV9yZWcgPQorCQkgICAgaW5mby0+bWU0MDAwX3JlZ2Jhc2UgKyBNRTQwMDBfQUlfREFUQV9SRUc7CisJCWFpX2NvbnRleHQtPmNoYW5fdGltZXJfcmVnID0KKwkJICAgIGluZm8tPm1lNDAwMF9yZWdiYXNlICsgTUU0MDAwX0FJX0NIQU5fVElNRVJfUkVHOworCQlhaV9jb250ZXh0LT5jaGFuX3ByZV90aW1lcl9yZWcgPQorCQkgICAgaW5mby0+bWU0MDAwX3JlZ2Jhc2UgKyBNRTQwMDBfQUlfQ0hBTl9QUkVfVElNRVJfUkVHOworCQlhaV9jb250ZXh0LT5zY2FuX3RpbWVyX2xvd19yZWcgPQorCQkgICAgaW5mby0+bWU0MDAwX3JlZ2Jhc2UgKyBNRTQwMDBfQUlfU0NBTl9USU1FUl9MT1dfUkVHOworCQlhaV9jb250ZXh0LT5zY2FuX3RpbWVyX2hpZ2hfcmVnID0KKwkJICAgIGluZm8tPm1lNDAwMF9yZWdiYXNlICsgTUU0MDAwX0FJX1NDQU5fVElNRVJfSElHSF9SRUc7CisJCWFpX2NvbnRleHQtPnNjYW5fcHJlX3RpbWVyX2xvd19yZWcgPQorCQkgICAgaW5mby0+bWU0MDAwX3JlZ2Jhc2UgKyBNRTQwMDBfQUlfU0NBTl9QUkVfVElNRVJfTE9XX1JFRzsKKwkJYWlfY29udGV4dC0+c2Nhbl9wcmVfdGltZXJfaGlnaF9yZWcgPQorCQkgICAgaW5mby0+bWU0MDAwX3JlZ2Jhc2UgKyBNRTQwMDBfQUlfU0NBTl9QUkVfVElNRVJfSElHSF9SRUc7CisJCWFpX2NvbnRleHQtPnN0YXJ0X3JlZyA9CisJCSAgICBpbmZvLT5tZTQwMDBfcmVnYmFzZSArIE1FNDAwMF9BSV9TVEFSVF9SRUc7CisJCWFpX2NvbnRleHQtPmlycV9zdGF0dXNfcmVnID0KKwkJICAgIGluZm8tPm1lNDAwMF9yZWdiYXNlICsgTUU0MDAwX0lSUV9TVEFUVVNfUkVHOworCQlhaV9jb250ZXh0LT5zYW1wbGVfY291bnRlcl9yZWcgPQorCQkgICAgaW5mby0+bWU0MDAwX3JlZ2Jhc2UgKyBNRTQwMDBfQUlfU0FNUExFX0NPVU5URVJfUkVHOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGFsbG9jX2Rpb19jb250ZXh0KG1lNDAwMF9pbmZvX3QgKiBpbmZvKQoreworCW1lNDAwMF9kaW9fY29udGV4dF90ICpkaW9fY29udGV4dDsKKworCWlmIChpbmZvLT5ib2FyZF9wLT5kaW8uY291bnQpIHsKKwkJZGlvX2NvbnRleHQgPSBrbWFsbG9jKHNpemVvZihtZTQwMDBfZGlvX2NvbnRleHRfdCksIEdGUF9LRVJORUwpOworCQlpZiAoIWRpb19jb250ZXh0KSB7CisJCQlwcmludGsoS0VSTl9FUlIKKwkJCSAgICAgICAiTUU0MDAwOmFsbG9jX2Rpb19jb250ZXh0KCk6Q2FuJ3QgZ2V0IG1lbW9yeSBmb3IgZGlvIGNvbnRleHRcbiIpOworCQkJcmV0dXJuIC1FTk9NRU07CisJCX0KKwkJbWVtc2V0KGRpb19jb250ZXh0LCAwLCBzaXplb2YobWU0MDAwX2Rpb19jb250ZXh0X3QpKTsKKworCQlpbmZvLT5kaW9fY29udGV4dCA9IGRpb19jb250ZXh0OworCisJCXNwaW5fbG9ja19pbml0KCZkaW9fY29udGV4dC0+dXNlX2xvY2spOworCQlkaW9fY29udGV4dC0+Ym9hcmRfaW5mbyA9IGluZm87CisKKwkJZGlvX2NvbnRleHQtPmRpb19jb3VudCA9IGluZm8tPmJvYXJkX3AtPmRpby5jb3VudDsKKworCQlkaW9fY29udGV4dC0+ZGlyX3JlZyA9CisJCSAgICBpbmZvLT5tZTQwMDBfcmVnYmFzZSArIE1FNDAwMF9ESU9fRElSX1JFRzsKKwkJZGlvX2NvbnRleHQtPmN0cmxfcmVnID0KKwkJICAgIGluZm8tPm1lNDAwMF9yZWdiYXNlICsgTUU0MDAwX0RJT19DVFJMX1JFRzsKKwkJZGlvX2NvbnRleHQtPnBvcnRfMF9yZWcgPQorCQkgICAgaW5mby0+bWU0MDAwX3JlZ2Jhc2UgKyBNRTQwMDBfRElPX1BPUlRfMF9SRUc7CisJCWRpb19jb250ZXh0LT5wb3J0XzFfcmVnID0KKwkJICAgIGluZm8tPm1lNDAwMF9yZWdiYXNlICsgTUU0MDAwX0RJT19QT1JUXzFfUkVHOworCQlkaW9fY29udGV4dC0+cG9ydF8yX3JlZyA9CisJCSAgICBpbmZvLT5tZTQwMDBfcmVnYmFzZSArIE1FNDAwMF9ESU9fUE9SVF8yX1JFRzsKKwkJZGlvX2NvbnRleHQtPnBvcnRfM19yZWcgPQorCQkgICAgaW5mby0+bWU0MDAwX3JlZ2Jhc2UgKyBNRTQwMDBfRElPX1BPUlRfM19SRUc7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYWxsb2NfY250X2NvbnRleHQobWU0MDAwX2luZm9fdCAqIGluZm8pCit7CisJbWU0MDAwX2NudF9jb250ZXh0X3QgKmNudF9jb250ZXh0OworCisJaWYgKGluZm8tPmJvYXJkX3AtPmNudC5jb3VudCkgeworCQljbnRfY29udGV4dCA9IGttYWxsb2Moc2l6ZW9mKG1lNDAwMF9jbnRfY29udGV4dF90KSwgR0ZQX0tFUk5FTCk7CisJCWlmICghY250X2NvbnRleHQpIHsKKwkJCXByaW50ayhLRVJOX0VSUgorCQkJICAgICAgICJNRTQwMDA6YWxsb2NfY250X2NvbnRleHQoKTpDYW4ndCBnZXQgbWVtb3J5IGZvciBjbnQgY29udGV4dFxuIik7CisJCQlyZXR1cm4gLUVOT01FTTsKKwkJfQorCQltZW1zZXQoY250X2NvbnRleHQsIDAsIHNpemVvZihtZTQwMDBfY250X2NvbnRleHRfdCkpOworCisJCWluZm8tPmNudF9jb250ZXh0ID0gY250X2NvbnRleHQ7CisKKwkJc3Bpbl9sb2NrX2luaXQoJmNudF9jb250ZXh0LT51c2VfbG9jayk7CisJCWNudF9jb250ZXh0LT5ib2FyZF9pbmZvID0gaW5mbzsKKworCQljbnRfY29udGV4dC0+Y3RybF9yZWcgPQorCQkgICAgaW5mby0+dGltZXJfcmVnYmFzZSArIE1FNDAwMF9DTlRfQ1RSTF9SRUc7CisJCWNudF9jb250ZXh0LT5jb3VudGVyXzBfcmVnID0KKwkJICAgIGluZm8tPnRpbWVyX3JlZ2Jhc2UgKyBNRTQwMDBfQ05UX0NPVU5URVJfMF9SRUc7CisJCWNudF9jb250ZXh0LT5jb3VudGVyXzFfcmVnID0KKwkJICAgIGluZm8tPnRpbWVyX3JlZ2Jhc2UgKyBNRTQwMDBfQ05UX0NPVU5URVJfMV9SRUc7CisJCWNudF9jb250ZXh0LT5jb3VudGVyXzJfcmVnID0KKwkJICAgIGluZm8tPnRpbWVyX3JlZ2Jhc2UgKyBNRTQwMDBfQ05UX0NPVU5URVJfMl9SRUc7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYWxsb2NfZXh0X2ludF9jb250ZXh0KG1lNDAwMF9pbmZvX3QgKiBpbmZvKQoreworCW1lNDAwMF9leHRfaW50X2NvbnRleHRfdCAqZXh0X2ludF9jb250ZXh0OworCisJaWYgKGluZm8tPmJvYXJkX3AtPmNudC5jb3VudCkgeworCQlleHRfaW50X2NvbnRleHQgPQorCQkgICAga21hbGxvYyhzaXplb2YobWU0MDAwX2V4dF9pbnRfY29udGV4dF90KSwgR0ZQX0tFUk5FTCk7CisJCWlmICghZXh0X2ludF9jb250ZXh0KSB7CisJCQlwcmludGsoS0VSTl9FUlIKKwkJCSAgICAgICAiTUU0MDAwOmFsbG9jX2V4dF9pbnRfY29udGV4dCgpOkNhbid0IGdldCBtZW1vcnkgZm9yIGNudCBjb250ZXh0XG4iKTsKKwkJCXJldHVybiAtRU5PTUVNOworCQl9CisJCW1lbXNldChleHRfaW50X2NvbnRleHQsIDAsIHNpemVvZihtZTQwMDBfZXh0X2ludF9jb250ZXh0X3QpKTsKKworCQlpbmZvLT5leHRfaW50X2NvbnRleHQgPSBleHRfaW50X2NvbnRleHQ7CisKKwkJc3Bpbl9sb2NrX2luaXQoJmV4dF9pbnRfY29udGV4dC0+dXNlX2xvY2spOworCQlleHRfaW50X2NvbnRleHQtPmJvYXJkX2luZm8gPSBpbmZvOworCisJCWV4dF9pbnRfY29udGV4dC0+ZmFzeW5jX3B0ciA9IE5VTEw7CisJCWV4dF9pbnRfY29udGV4dC0+aXJxID0gaW5mby0+aXJxOworCisJCWV4dF9pbnRfY29udGV4dC0+Y3RybF9yZWcgPQorCQkgICAgaW5mby0+bWU0MDAwX3JlZ2Jhc2UgKyBNRTQwMDBfQUlfQ1RSTF9SRUc7CisJCWV4dF9pbnRfY29udGV4dC0+aXJxX3N0YXR1c19yZWcgPQorCQkgICAgaW5mby0+bWU0MDAwX3JlZ2Jhc2UgKyBNRTQwMDBfSVJRX1NUQVRVU19SRUc7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbWU0MDAwX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZCkKK3sKKwlpbnQgcmVzdWx0ID0gMDsKKwltZTQwMDBfaW5mb190ICpib2FyZF9pbmZvOworCisJQ0FMTF9QREVCVUcoIm1lNDAwMF9wcm9iZSgpIGlzIGV4ZWN1dGVkXG4iKTsKKworCS8qIEFsbG9jYXRlIHN0cnVjdHVyZSBmb3IgYm9hcmQgY29udGV4dCAqLworCWJvYXJkX2luZm8gPSBrbWFsbG9jKHNpemVvZihtZTQwMDBfaW5mb190KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFib2FyZF9pbmZvKSB7CisJCXByaW50ayhLRVJOX0VSUgorCQkgICAgICAgIk1FNDAwMDpDYW4ndCBnZXQgbWVtb3J5IGZvciBib2FyZCBpbmZvIHN0cnVjdHVyZVxuIik7CisJCXJlc3VsdCA9IC1FTk9NRU07CisJCWdvdG8gUFJPQkVfRVJST1JfMTsKKwl9CisJbWVtc2V0KGJvYXJkX2luZm8sIDAsIHNpemVvZihtZTQwMDBfaW5mb190KSk7CisKKwkvKiBBZGQgdG8gZ2xvYmFsIGxpbmtlZCBsaXN0ICovCisJbGlzdF9hZGRfdGFpbCgmYm9hcmRfaW5mby0+bGlzdCwgJm1lNDAwMF9ib2FyZF9pbmZvX2xpc3QpOworCisJLyogR2V0IHRoZSBQQ0kgYmFzZSByZWdpc3RlcnMgKi8KKwlyZXN1bHQgPSBnZXRfcmVnaXN0ZXJzKGRldiwgYm9hcmRfaW5mbyk7CisJaWYgKHJlc3VsdCkgeworCQlwcmludGsoS0VSTl9FUlIgIm1lNDAwMF9wcm9iZSgpOkNhbm5vdCBnZXQgcmVnaXN0ZXJzXG4iKTsKKwkJZ290byBQUk9CRV9FUlJPUl8yOworCX0KKworCS8qIEVuYWJsZSB0aGUgZGV2aWNlICovCisJcmVzdWx0ID0gcGNpX2VuYWJsZV9kZXZpY2UoZGV2KTsKKwlpZiAocmVzdWx0IDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIgIm1lNDAwMF9wcm9iZSgpOkNhbm5vdCBlbmFibGUgUENJIGRldmljZVxuIik7CisJCWdvdG8gUFJPQkVfRVJST1JfMjsKKwl9CisKKwkvKiBSZXF1ZXN0IHRoZSBQQ0kgcmVnaXN0ZXIgcmVnaW9ucyAqLworCXJlc3VsdCA9IHBjaV9yZXF1ZXN0X3JlZ2lvbnMoZGV2LCBNRTQwMDBfTkFNRSk7CisJaWYgKHJlc3VsdCA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJtZTQwMDBfcHJvYmUoKTpDYW5ub3QgcmVxdWVzdCBJL08gcmVnaW9uc1xuIik7CisJCWdvdG8gUFJPQkVfRVJST1JfMjsKKwl9CisKKwkvKiBJbml0aWFsaXplIGJvYXJkIGluZm8gKi8KKwlyZXN1bHQgPSBpbml0X2JvYXJkX2luZm8oZGV2LCBib2FyZF9pbmZvKTsKKwlpZiAocmVzdWx0KSB7CisJCXByaW50ayhLRVJOX0VSUiAibWU0MDAwX3Byb2JlKCk6Q2Fubm90IGluaXQgYmFvcmQgaW5mb1xuIik7CisJCWdvdG8gUFJPQkVfRVJST1JfMzsKKwl9CisKKwkvKiBEb3dubG9hZCB0aGUgeGlsaW54IGZpcm13YXJlICovCisJcmVzdWx0ID0gbWU0MDAwX3hpbGlueF9kb3dubG9hZChib2FyZF9pbmZvKTsKKwlpZiAocmVzdWx0KSB7CisJCXByaW50ayhLRVJOX0VSUiAibWU0MDAwX3Byb2JlOkNhbid0IGRvd25sb2FkIGZpcm13YXJlXG4iKTsKKwkJZ290byBQUk9CRV9FUlJPUl8zOworCX0KKworCS8qIE1ha2UgYSBoYXJkd2FyZSByZXNldCAqLworCXJlc3VsdCA9IG1lNDAwMF9yZXNldF9ib2FyZChib2FyZF9pbmZvKTsKKwlpZiAocmVzdWx0KSB7CisJCXByaW50ayhLRVJOX0VSUiAibWU0MDAwX3Byb2JlOkNhbid0IHJlc2V0IGJvYXJkXG4iKTsKKwkJZ290byBQUk9CRV9FUlJPUl8zOworCX0KKworCS8qIEFsbG9jYXRlIGFuYWxvZyBvdXRwdXQgY29udGV4dCBzdHJ1Y3R1cmVzICovCisJcmVzdWx0ID0gYWxsb2NfYW9fY29udGV4dHMoYm9hcmRfaW5mbyk7CisJaWYgKHJlc3VsdCkgeworCQlwcmludGsoS0VSTl9FUlIgIm1lNDAwMF9wcm9iZSgpOkNhbm5vdCBhbGxvY2F0ZSBhbyBjb250ZXh0c1xuIik7CisJCWdvdG8gUFJPQkVfRVJST1JfMzsKKwl9CisKKwkvKiBBbGxvY2F0ZSBhbmFsb2cgaW5wdXQgY29udGV4dCAqLworCXJlc3VsdCA9IGFsbG9jX2FpX2NvbnRleHQoYm9hcmRfaW5mbyk7CisJaWYgKHJlc3VsdCkgeworCQlwcmludGsoS0VSTl9FUlIgIm1lNDAwMF9wcm9iZSgpOkNhbm5vdCBhbGxvY2F0ZSBhaSBjb250ZXh0XG4iKTsKKwkJZ290byBQUk9CRV9FUlJPUl80OworCX0KKworCS8qIEFsbG9jYXRlIGRpZ2l0YWwgSS9PIGNvbnRleHQgKi8KKwlyZXN1bHQgPSBhbGxvY19kaW9fY29udGV4dChib2FyZF9pbmZvKTsKKwlpZiAocmVzdWx0KSB7CisJCXByaW50ayhLRVJOX0VSUiAibWU0MDAwX3Byb2JlKCk6Q2Fubm90IGFsbG9jYXRlIGRpbyBjb250ZXh0XG4iKTsKKwkJZ290byBQUk9CRV9FUlJPUl81OworCX0KKworCS8qIEFsbG9jYXRlIGNvdW50ZXIgY29udGV4dCAqLworCXJlc3VsdCA9IGFsbG9jX2NudF9jb250ZXh0KGJvYXJkX2luZm8pOworCWlmIChyZXN1bHQpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJtZTQwMDBfcHJvYmUoKTpDYW5ub3QgYWxsb2NhdGUgY250IGNvbnRleHRcbiIpOworCQlnb3RvIFBST0JFX0VSUk9SXzY7CisJfQorCisJLyogQWxsb2NhdGUgZXh0ZXJuYWwgaW50ZXJydXB0IGNvbnRleHQgKi8KKwlyZXN1bHQgPSBhbGxvY19leHRfaW50X2NvbnRleHQoYm9hcmRfaW5mbyk7CisJaWYgKHJlc3VsdCkgeworCQlwcmludGsoS0VSTl9FUlIKKwkJICAgICAgICJtZTQwMDBfcHJvYmUoKTpDYW5ub3QgYWxsb2NhdGUgZXh0X2ludCBjb250ZXh0XG4iKTsKKwkJZ290byBQUk9CRV9FUlJPUl83OworCX0KKworCXJldHVybiAwOworCisgICAgICBQUk9CRV9FUlJPUl83OgorCWtmcmVlKGJvYXJkX2luZm8tPmNudF9jb250ZXh0KTsKKworICAgICAgUFJPQkVfRVJST1JfNjoKKwlrZnJlZShib2FyZF9pbmZvLT5kaW9fY29udGV4dCk7CisKKyAgICAgIFBST0JFX0VSUk9SXzU6CisJa2ZyZWUoYm9hcmRfaW5mby0+YWlfY29udGV4dCk7CisKKyAgICAgIFBST0JFX0VSUk9SXzQ6CisJcmVsZWFzZV9hb19jb250ZXh0cyhib2FyZF9pbmZvKTsKKworICAgICAgUFJPQkVfRVJST1JfMzoKKwlwY2lfcmVsZWFzZV9yZWdpb25zKGRldik7CisKKyAgICAgIFBST0JFX0VSUk9SXzI6CisJbGlzdF9kZWwoJmJvYXJkX2luZm8tPmxpc3QpOworCWtmcmVlKGJvYXJkX2luZm8pOworCisgICAgICBQUk9CRV9FUlJPUl8xOgorCXJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBpbnQgbWU0MDAwX3hpbGlueF9kb3dubG9hZChtZTQwMDBfaW5mb190ICogaW5mbykKK3sKKwlpbnQgc2l6ZSA9IDA7CisJdTMyIHZhbHVlID0gMDsKKwlpbnQgaWR4ID0gMDsKKwl1bnNpZ25lZCBjaGFyICpmaXJtOworCXdhaXRfcXVldWVfaGVhZF90IHF1ZXVlOworCisJQ0FMTF9QREVCVUcoIm1lNDAwMF94aWxpbnhfZG93bmxvYWQoKSBpcyBleGVjdXRlZFxuIik7CisKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZxdWV1ZSk7CisKKwlmaXJtID0gKGluZm8tPmRldmljZV9pZCA9PSAweDQ2MTApID8geGlsaW54X2Zpcm1fNDYxMCA6IHhpbGlueF9maXJtOworCisJLyoKKwkgKiBTZXQgUExYIGxvY2FsIGludGVycnVwdCAyIHBvbGFyaXR5IHRvIGhpZ2guCisJICogSW50ZXJydXB0IGlzIHRocm93biBieSBpbml0IHBpbiBvZiB4aWxpbnguCisJICovCisJb3V0bCgweDEwLCBpbmZvLT5wbHhfcmVnYmFzZSArIFBMWF9JTlRDU1IpOworCisJLyogU2V0IC9DUyBhbmQgL1dSSVRFIG9mIHRoZSBYaWxpbnggKi8KKwl2YWx1ZSA9IGlubChpbmZvLT5wbHhfcmVnYmFzZSArIFBMWF9JQ1IpOworCXZhbHVlIHw9IDB4MTAwOworCW91dGwodmFsdWUsIGluZm8tPnBseF9yZWdiYXNlICsgUExYX0lDUik7CisKKwkvKiBJbml0IFhpbGlueCB3aXRoIENTMSAqLworCWluYihpbmZvLT5wcm9ncmFtX3JlZ2Jhc2UgKyAweEM4KTsKKworCS8qIFdhaXQgdW50aWwgL0lOSVQgcGluIGlzIHNldCAqLworCXVkZWxheSgyMCk7CisJaWYgKCFpbmwoaW5mby0+cGx4X3JlZ2Jhc2UgKyBQTFhfSU5UQ1NSKSAmIDB4MjApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJtZTQwMDBfeGlsaW54X2Rvd25sb2FkKCk6Q2FuJ3QgaW5pdCBYaWxpbnhcbiIpOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwkvKiBSZXNldCAvQ1MgYW5kIC9XUklURSBvZiB0aGUgWGlsaW54ICovCisJdmFsdWUgPSBpbmwoaW5mby0+cGx4X3JlZ2Jhc2UgKyBQTFhfSUNSKTsKKwl2YWx1ZSAmPSB+MHgxMDA7CisJb3V0bCh2YWx1ZSwgaW5mby0+cGx4X3JlZ2Jhc2UgKyBQTFhfSUNSKTsKKworCS8qIERvd25sb2FkIFhpbGlueCBmaXJtd2FyZSAqLworCXNpemUgPSAoZmlybVswXSA8PCAyNCkgKyAoZmlybVsxXSA8PCAxNikgKyAoZmlybVsyXSA8PCA4KSArIGZpcm1bM107CisJdWRlbGF5KDEwKTsKKworCWZvciAoaWR4ID0gMDsgaWR4IDwgc2l6ZTsgaWR4KyspIHsKKwkJb3V0YihmaXJtWzE2ICsgaWR4XSwgaW5mby0+cHJvZ3JhbV9yZWdiYXNlKTsKKworCQl1ZGVsYXkoMTApOworCisJCS8qIENoZWNrIGlmIEJVU1kgZmxhZyBpcyBsb3cgKi8KKwkJaWYgKGlubChpbmZvLT5wbHhfcmVnYmFzZSArIFBMWF9JQ1IpICYgMHgyMCkgeworCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkgICAgICAgIm1lNDAwMF94aWxpbnhfZG93bmxvYWQoKTpYaWxpbnggaXMgc3RpbGwgYnVzeSAoaWR4ID0gJWQpXG4iLAorCQkJICAgICAgIGlkeCk7CisJCQlyZXR1cm4gLUVJTzsKKwkJfQorCX0KKworCVBERUJVRygibWU0MDAwX3hpbGlueF9kb3dubG9hZCgpOiVkIGJ5dGVzIHdyaXR0ZW5cbiIsIGlkeCk7CisKKwkvKiBJZiBkb25lIGZsYWcgaXMgaGlnaCBkb3dubG9hZCB3YXMgc3VjY2Vzc2Z1bCAqLworCWlmIChpbmwoaW5mby0+cGx4X3JlZ2Jhc2UgKyBQTFhfSUNSKSAmIDB4NCkgeworCQlQREVCVUcoIm1lNDAwMF94aWxpbnhfZG93bmxvYWQoKTpEb25lIGZsYWcgaXMgc2V0XG4iKTsKKwkJUERFQlVHKCJtZTQwMDBfeGlsaW54X2Rvd25sb2FkKCk6RG93bmxvYWQgd2FzIHN1Y2Nlc3NmdWxcbiIpOworCX0gZWxzZSB7CisJCXByaW50ayhLRVJOX0VSUgorCQkgICAgICAgIk1FNDAwMDptZTQwMDBfeGlsaW54X2Rvd25sb2FkKCk6RE9ORSBmbGFnIGlzIG5vdCBzZXRcbiIpOworCQlwcmludGsoS0VSTl9FUlIKKwkJICAgICAgICJNRTQwMDA6bWU0MDAwX3hpbGlueF9kb3dubG9hZCgpOkRvd25sb2FkIG5vdCBzdWNjZXNmdWxcbiIpOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwkvKiBTZXQgL0NTIGFuZCAvV1JJVEUgKi8KKwl2YWx1ZSA9IGlubChpbmZvLT5wbHhfcmVnYmFzZSArIFBMWF9JQ1IpOworCXZhbHVlIHw9IDB4MTAwOworCW91dGwodmFsdWUsIGluZm8tPnBseF9yZWdiYXNlICsgUExYX0lDUik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtZTQwMDBfcmVzZXRfYm9hcmQobWU0MDAwX2luZm9fdCAqIGluZm8pCit7CisJdW5zaWduZWQgbG9uZyBpY3I7CisKKwlDQUxMX1BERUJVRygibWU0MDAwX3Jlc2V0X2JvYXJkKCkgaXMgZXhlY3V0ZWRcbiIpOworCisJLyogTWFrZSBhIGhhcmR3YXJlIHJlc2V0ICovCisJaWNyID0gbWU0MDAwX2lubChpbmZvLT5wbHhfcmVnYmFzZSArIFBMWF9JQ1IpOworCWljciB8PSAweDQwMDAwMDAwOworCW1lNDAwMF9vdXRsKGljciwgaW5mby0+cGx4X3JlZ2Jhc2UgKyBQTFhfSUNSKTsKKwlpY3IgJj0gfjB4NDAwMDAwMDA7CisJbWU0MDAwX291dGwoaWNyLCBpbmZvLT5wbHhfcmVnYmFzZSArIFBMWF9JQ1IpOworCisJLyogU2V0IGJvdGggc3RvcCBiaXRzIGluIHRoZSBhbmFsb2cgaW5wdXQgY29udHJvbCByZWdpc3RlciAqLworCW1lNDAwMF9vdXRsKE1FNDAwMF9BSV9DVFJMX0JJVF9JTU1FRElBVEVfU1RPUCB8IE1FNDAwMF9BSV9DVFJMX0JJVF9TVE9QLAorCQkgICAgaW5mby0+bWU0MDAwX3JlZ2Jhc2UgKyBNRTQwMDBfQUlfQ1RSTF9SRUcpOworCisJLyogU2V0IGJvdGggc3RvcCBiaXRzIGluIHRoZSBhbmFsb2cgb3V0cHV0IGNvbnRyb2wgcmVnaXN0ZXIgKi8KKwltZTQwMDBfb3V0bChNRTQwMDBfQU9fQ1RSTF9CSVRfSU1NRURJQVRFX1NUT1AgfCBNRTQwMDBfQU9fQ1RSTF9CSVRfU1RPUCwKKwkJICAgIGluZm8tPm1lNDAwMF9yZWdiYXNlICsgTUU0MDAwX0FPXzAwX0NUUkxfUkVHKTsKKwltZTQwMDBfb3V0bChNRTQwMDBfQU9fQ1RSTF9CSVRfSU1NRURJQVRFX1NUT1AgfCBNRTQwMDBfQU9fQ1RSTF9CSVRfU1RPUCwKKwkJICAgIGluZm8tPm1lNDAwMF9yZWdiYXNlICsgTUU0MDAwX0FPXzAxX0NUUkxfUkVHKTsKKwltZTQwMDBfb3V0bChNRTQwMDBfQU9fQ1RSTF9CSVRfSU1NRURJQVRFX1NUT1AgfCBNRTQwMDBfQU9fQ1RSTF9CSVRfU1RPUCwKKwkJICAgIGluZm8tPm1lNDAwMF9yZWdiYXNlICsgTUU0MDAwX0FPXzAyX0NUUkxfUkVHKTsKKwltZTQwMDBfb3V0bChNRTQwMDBfQU9fQ1RSTF9CSVRfSU1NRURJQVRFX1NUT1AgfCBNRTQwMDBfQU9fQ1RSTF9CSVRfU1RPUCwKKwkJICAgIGluZm8tPm1lNDAwMF9yZWdiYXNlICsgTUU0MDAwX0FPXzAzX0NUUkxfUkVHKTsKKworCS8qIDB4ODAwMCB0byB0aGUgREFDcyBtZWFucyBhbiBvdXRwdXQgdm9sdGFnZSBvZiAwViAqLworCW1lNDAwMF9vdXRsKDB4ODAwMCwgaW5mby0+bWU0MDAwX3JlZ2Jhc2UgKyBNRTQwMDBfQU9fMDBfU0lOR0xFX1JFRyk7CisJbWU0MDAwX291dGwoMHg4MDAwLCBpbmZvLT5tZTQwMDBfcmVnYmFzZSArIE1FNDAwMF9BT18wMV9TSU5HTEVfUkVHKTsKKwltZTQwMDBfb3V0bCgweDgwMDAsIGluZm8tPm1lNDAwMF9yZWdiYXNlICsgTUU0MDAwX0FPXzAyX1NJTkdMRV9SRUcpOworCW1lNDAwMF9vdXRsKDB4ODAwMCwgaW5mby0+bWU0MDAwX3JlZ2Jhc2UgKyBNRTQwMDBfQU9fMDNfU0lOR0xFX1JFRyk7CisKKwkvKiBFbmFibGUgaW50ZXJydXB0cyBvbiB0aGUgUExYICovCisJbWU0MDAwX291dGwoMHg0MywgaW5mby0+cGx4X3JlZ2Jhc2UgKyBQTFhfSU5UQ1NSKTsKKworCS8qIFNldCB0aGUgYWR1c3RtZW50IHJlZ2lzdGVyIGZvciBBTyBkZW11eCAqLworCW1lNDAwMF9vdXRsKE1FNDAwMF9BT19ERU1VWF9BREpVU1RfVkFMVUUsCisJCSAgICBpbmZvLT5tZTQwMDBfcmVnYmFzZSArIE1FNDAwMF9BT19ERU1VWF9BREpVU1RfUkVHKTsKKworCS8qIFNldCBkaWdpdGFsIEkvTyBkaXJlY3Rpb24gZm9yIHBvcnQgMCB0byBvdXRwdXQgb24gaXNvbGF0ZWQgdmVyc2lvbnMgKi8KKwlpZiAoIShtZTQwMDBfaW5sKGluZm8tPm1lNDAwMF9yZWdiYXNlICsgTUU0MDAwX0RJT19ESVJfUkVHKSAmIDB4MSkpIHsKKwkJbWU0MDAwX291dGwoMHgxLCBpbmZvLT5tZTQwMDBfcmVnYmFzZSArIE1FNDAwMF9ESU9fQ1RSTF9SRUcpOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG1lNDAwMF9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGVfcCwgc3RydWN0IGZpbGUgKmZpbGVfcCkKK3sKKwlpbnQgYm9hcmQsIGRldiwgbW9kZTsKKwlpbnQgZXJyID0gMDsKKwlpbnQgaTsKKwlzdHJ1Y3QgbGlzdF9oZWFkICpwdHI7CisJbWU0MDAwX2luZm9fdCAqYm9hcmRfaW5mbyA9IE5VTEw7CisJbWU0MDAwX2FvX2NvbnRleHRfdCAqYW9fY29udGV4dCA9IE5VTEw7CisJbWU0MDAwX2FpX2NvbnRleHRfdCAqYWlfY29udGV4dCA9IE5VTEw7CisJbWU0MDAwX2Rpb19jb250ZXh0X3QgKmRpb19jb250ZXh0ID0gTlVMTDsKKwltZTQwMDBfY250X2NvbnRleHRfdCAqY250X2NvbnRleHQgPSBOVUxMOworCW1lNDAwMF9leHRfaW50X2NvbnRleHRfdCAqZXh0X2ludF9jb250ZXh0ID0gTlVMTDsKKworCUNBTExfUERFQlVHKCJtZTQwMDBfb3BlbigpIGlzIGV4ZWN1dGVkXG4iKTsKKworCS8qIEFuYWxvZyBvdXRwdXQgKi8KKwlpZiAoTUFKT1IoaW5vZGVfcC0+aV9yZGV2KSA9PSBtZTQwMDBfYW9fbWFqb3JfZHJpdmVyX25vKSB7CisJCWJvYXJkID0gQU9fQk9BUkQoaW5vZGVfcC0+aV9yZGV2KTsKKwkJZGV2ID0gQU9fUE9SVChpbm9kZV9wLT5pX3JkZXYpOworCQltb2RlID0gQU9fTU9ERShpbm9kZV9wLT5pX3JkZXYpOworCisJCVBERUJVRygibWU0MDAwX29wZW4oKTpib2FyZCA9ICVkIGFvID0gJWQgbW9kZSA9ICVkXG4iLCBib2FyZCwKKwkJICAgICAgIGRldiwgbW9kZSk7CisKKwkJLyogU2VhcmNoIGZvciB0aGUgYm9hcmQgY29udGV4dCAqLworCQlmb3IgKHB0ciA9IG1lNDAwMF9ib2FyZF9pbmZvX2xpc3QubmV4dCwgaSA9IDA7CisJCSAgICAgcHRyICE9ICZtZTQwMDBfYm9hcmRfaW5mb19saXN0OyBwdHIgPSBwdHItPm5leHQsIGkrKykgeworCQkJYm9hcmRfaW5mbyA9IGxpc3RfZW50cnkocHRyLCBtZTQwMDBfaW5mb190LCBsaXN0KTsKKwkJCWlmIChpID09IGJvYXJkKQorCQkJCWJyZWFrOworCQl9CisKKwkJaWYgKHB0ciA9PSAmbWU0MDAwX2JvYXJkX2luZm9fbGlzdCkgeworCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkgICAgICAgIk1FNDAwMDptZTQwMDBfb3BlbigpOkJvYXJkICVkIG5vdCBpbiBkZXZpY2UgbGlzdFxuIiwKKwkJCSAgICAgICBib2FyZCk7CisJCQlyZXR1cm4gLUVOT0RFVjsKKwkJfQorCisJCS8qIFNlYXJjaCBmb3IgdGhlIGRhYyBjb250ZXh0ICovCisJCWZvciAocHRyID0gYm9hcmRfaW5mby0+YW9fY29udGV4dF9saXN0Lm5leHQsIGkgPSAwOworCQkgICAgIHB0ciAhPSAmYm9hcmRfaW5mby0+YW9fY29udGV4dF9saXN0OworCQkgICAgIHB0ciA9IHB0ci0+bmV4dCwgaSsrKSB7CisJCQlhb19jb250ZXh0ID0gbGlzdF9lbnRyeShwdHIsIG1lNDAwMF9hb19jb250ZXh0X3QsIGxpc3QpOworCQkJaWYgKGkgPT0gZGV2KQorCQkJCWJyZWFrOworCQl9CisKKwkJaWYgKHB0ciA9PSAmYm9hcmRfaW5mby0+YW9fY29udGV4dF9saXN0KSB7CisJCQlwcmludGsoS0VSTl9FUlIKKwkJCSAgICAgICAiTUU0MDAwOm1lNDAwMF9vcGVuKCk6RGV2aWNlICVkIG5vdCBpbiBkZXZpY2UgbGlzdFxuIiwKKwkJCSAgICAgICBkZXYpOworCQkJcmV0dXJuIC1FTk9ERVY7CisJCX0KKworCQkvKiBDaGVjayBpZiBtb2RlIGlzIHZhbGlkICovCisJCWlmIChtb2RlID4gMikgeworCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkgICAgICAgIk1FNDAwMDptZTQwMDBfb3BlbigpOk1vZGUgaXMgbm90IHZhbGlkXG4iKTsKKwkJCXJldHVybiAtRU5PREVWOworCQl9CisKKwkJLyogQ2hlY2sgaWYgbW9kZSBpcyB2YWxpZCBmb3IgdGhpcyBBTyAqLworCQlpZiAoKG1vZGUgIT0gTUU0MDAwX0FPX0NPTlZfTU9ERV9TSU5HTEUpCisJCSAgICAmJiAoZGV2ID49IGJvYXJkX2luZm8tPmJvYXJkX3AtPmFvLmZpZm9fY291bnQpKSB7CisJCQlwcmludGsoS0VSTl9FUlIKKwkJCSAgICAgICAiTUU0MDAwOm1lNDAwMF9vcGVuKCk6QU8gJWQgb25seSBpbiBzaW5nbGUgbW9kZSBhdmFpbGFibGVcbiIsCisJCQkgICAgICAgZGV2KTsKKwkJCXJldHVybiAtRU5PREVWOworCQl9CisKKwkJLyogQ2hlY2sgaWYgYWxyZWFkeSBvcGVuZWQgKi8KKwkJc3Bpbl9sb2NrKCZhb19jb250ZXh0LT51c2VfbG9jayk7CisJCWlmIChhb19jb250ZXh0LT5kYWNfaW5fdXNlKSB7CisJCQlwcmludGsoS0VSTl9FUlIKKwkJCSAgICAgICAiTUU0MDAwOm1lNDAwMF9vcGVuKCk6QU8gJWQgYWxyZWFkeSBpbiB1c2VcbiIsCisJCQkgICAgICAgZGV2KTsKKwkJCXNwaW5fdW5sb2NrKCZhb19jb250ZXh0LT51c2VfbG9jayk7CisJCQlyZXR1cm4gLUVCVVNZOworCQl9CisJCWFvX2NvbnRleHQtPmRhY19pbl91c2UgPSAxOworCQlzcGluX3VubG9jaygmYW9fY29udGV4dC0+dXNlX2xvY2spOworCisJCWFvX2NvbnRleHQtPm1vZGUgPSBtb2RlOworCisJCS8qIEhvbGQgdGhlIGNvbnRleHQgaW4gcHJpdmF0ZSBkYXRhICovCisJCWZpbGVfcC0+cHJpdmF0ZV9kYXRhID0gYW9fY29udGV4dDsKKworCQkvKiBTZXQgZmlsZSBvcGVyYXRpb25zIHBvaW50ZXIgKi8KKwkJZmlsZV9wLT5mX29wID0gbWU0MDAwX2FvX2ZvcHNfYXJyYXlbbW9kZV07CisKKwkJZXJyID0gbWU0MDAwX2FvX3ByZXBhcmUoYW9fY29udGV4dCk7CisJCWlmIChlcnIpIHsKKwkJCWFvX2NvbnRleHQtPmRhY19pbl91c2UgPSAwOworCQkJcmV0dXJuIDE7CisJCX0KKwl9CisJLyogQW5hbG9nIGlucHV0ICovCisJZWxzZSBpZiAoTUFKT1IoaW5vZGVfcC0+aV9yZGV2KSA9PSBtZTQwMDBfYWlfbWFqb3JfZHJpdmVyX25vKSB7CisJCWJvYXJkID0gQUlfQk9BUkQoaW5vZGVfcC0+aV9yZGV2KTsKKwkJbW9kZSA9IEFJX01PREUoaW5vZGVfcC0+aV9yZGV2KTsKKworCQlQREVCVUcoIm1lNDAwMF9vcGVuKCk6YWkgYm9hcmQgPSAlZCBtb2RlID0gJWRcbiIsIGJvYXJkLCBtb2RlKTsKKworCQkvKiBTZWFyY2ggZm9yIHRoZSBib2FyZCBjb250ZXh0ICovCisJCWZvciAocHRyID0gbWU0MDAwX2JvYXJkX2luZm9fbGlzdC5uZXh0LCBpID0gMDsKKwkJICAgICBwdHIgIT0gJm1lNDAwMF9ib2FyZF9pbmZvX2xpc3Q7IHB0ciA9IHB0ci0+bmV4dCwgaSsrKSB7CisJCQlib2FyZF9pbmZvID0gbGlzdF9lbnRyeShwdHIsIG1lNDAwMF9pbmZvX3QsIGxpc3QpOworCQkJaWYgKGkgPT0gYm9hcmQpCisJCQkJYnJlYWs7CisJCX0KKworCQlpZiAocHRyID09ICZtZTQwMDBfYm9hcmRfaW5mb19saXN0KSB7CisJCQlwcmludGsoS0VSTl9FUlIKKwkJCSAgICAgICAiTUU0MDAwOm1lNDAwMF9vcGVuKCk6Qm9hcmQgJWQgbm90IGluIGRldmljZSBsaXN0XG4iLAorCQkJICAgICAgIGJvYXJkKTsKKwkJCXJldHVybiAtRU5PREVWOworCQl9CisKKwkJYWlfY29udGV4dCA9IGJvYXJkX2luZm8tPmFpX2NvbnRleHQ7CisKKwkJLyogQ2hlY2sgaWYgbW9kZSBpcyB2YWxpZCAqLworCQlpZiAobW9kZSA+IDUpIHsKKwkJCXByaW50ayhLRVJOX0VSUgorCQkJICAgICAgICJNRTQwMDA6bWU0MDAwX29wZW4oKTpNb2RlIGlzIG5vdCB2YWxpZFxuIik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCisJCS8qIENoZWNrIGlmIGFscmVhZHkgb3BlbmVkICovCisJCXNwaW5fbG9jaygmYWlfY29udGV4dC0+dXNlX2xvY2spOworCQlpZiAoYWlfY29udGV4dC0+aW5fdXNlKSB7CisJCQlwcmludGsoS0VSTl9FUlIKKwkJCSAgICAgICAiTUU0MDAwOm1lNDAwMF9vcGVuKCk6QUkgYWxyZWFkeSBpbiB1c2VcbiIpOworCQkJc3Bpbl91bmxvY2soJmFpX2NvbnRleHQtPnVzZV9sb2NrKTsKKwkJCXJldHVybiAtRUJVU1k7CisJCX0KKwkJYWlfY29udGV4dC0+aW5fdXNlID0gMTsKKwkJc3Bpbl91bmxvY2soJmFpX2NvbnRleHQtPnVzZV9sb2NrKTsKKworCQlhaV9jb250ZXh0LT5tb2RlID0gbW9kZTsKKworCQkvKiBIb2xkIHRoZSBjb250ZXh0IGluIHByaXZhdGUgZGF0YSAqLworCQlmaWxlX3AtPnByaXZhdGVfZGF0YSA9IGFpX2NvbnRleHQ7CisKKwkJLyogU2V0IGZpbGUgb3BlcmF0aW9ucyBwb2ludGVyICovCisJCWZpbGVfcC0+Zl9vcCA9IG1lNDAwMF9haV9mb3BzX2FycmF5W21vZGVdOworCisJCS8qIFByZXBhcmUgYW5hbG9nIGlucHV0ICovCisJCW1lNDAwMF9haV9wcmVwYXJlKGFpX2NvbnRleHQpOworCX0KKwkvKiBEaWdpdGFsIEkvTyAqLworCWVsc2UgaWYgKE1BSk9SKGlub2RlX3AtPmlfcmRldikgPT0gbWU0MDAwX2Rpb19tYWpvcl9kcml2ZXJfbm8pIHsKKwkJYm9hcmQgPSBESU9fQk9BUkQoaW5vZGVfcC0+aV9yZGV2KTsKKwkJZGV2ID0gMDsKKwkJbW9kZSA9IDA7CisKKwkJUERFQlVHKCJtZTQwMDBfb3BlbigpOmJvYXJkID0gJWRcbiIsIGJvYXJkKTsKKworCQkvKiBTZWFyY2ggZm9yIHRoZSBib2FyZCBjb250ZXh0ICovCisJCWZvciAocHRyID0gbWU0MDAwX2JvYXJkX2luZm9fbGlzdC5uZXh0OworCQkgICAgIHB0ciAhPSAmbWU0MDAwX2JvYXJkX2luZm9fbGlzdDsgcHRyID0gcHRyLT5uZXh0KSB7CisJCQlib2FyZF9pbmZvID0gbGlzdF9lbnRyeShwdHIsIG1lNDAwMF9pbmZvX3QsIGxpc3QpOworCQkJaWYgKGJvYXJkX2luZm8tPmJvYXJkX2NvdW50ID09IGJvYXJkKQorCQkJCWJyZWFrOworCQl9CisKKwkJaWYgKHB0ciA9PSAmbWU0MDAwX2JvYXJkX2luZm9fbGlzdCkgeworCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkgICAgICAgIk1FNDAwMDptZTQwMDBfb3BlbigpOkJvYXJkICVkIG5vdCBpbiBkZXZpY2UgbGlzdFxuIiwKKwkJCSAgICAgICBib2FyZCk7CisJCQlyZXR1cm4gLUVOT0RFVjsKKwkJfQorCisJCS8qIFNlYXJjaCBmb3IgdGhlIGRpbyBjb250ZXh0ICovCisJCWRpb19jb250ZXh0ID0gYm9hcmRfaW5mby0+ZGlvX2NvbnRleHQ7CisKKwkJLyogQ2hlY2sgaWYgYWxyZWFkeSBvcGVuZWQgKi8KKwkJc3Bpbl9sb2NrKCZkaW9fY29udGV4dC0+dXNlX2xvY2spOworCQlpZiAoZGlvX2NvbnRleHQtPmluX3VzZSkgeworCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkgICAgICAgIk1FNDAwMDptZTQwMDBfb3BlbigpOkRJTyBhbHJlYWR5IGluIHVzZVxuIik7CisJCQlzcGluX3VubG9jaygmZGlvX2NvbnRleHQtPnVzZV9sb2NrKTsKKwkJCXJldHVybiAtRUJVU1k7CisJCX0KKwkJZGlvX2NvbnRleHQtPmluX3VzZSA9IDE7CisJCXNwaW5fdW5sb2NrKCZkaW9fY29udGV4dC0+dXNlX2xvY2spOworCisJCS8qIEhvbGQgdGhlIGNvbnRleHQgaW4gcHJpdmF0ZSBkYXRhICovCisJCWZpbGVfcC0+cHJpdmF0ZV9kYXRhID0gZGlvX2NvbnRleHQ7CisKKwkJLyogU2V0IGZpbGUgb3BlcmF0aW9ucyBwb2ludGVyIHRvIHNpbmdsZSBmdW5jdGlvbnMgKi8KKwkJZmlsZV9wLT5mX29wID0gJm1lNDAwMF9kaW9fZm9wczsKKworCQkvL21lNDAwMF9kaW9fcmVzZXQoZGlvX2NvbnRleHQpOworCX0KKwkvKiBDb3VudGVycyAqLworCWVsc2UgaWYgKE1BSk9SKGlub2RlX3AtPmlfcmRldikgPT0gbWU0MDAwX2NudF9tYWpvcl9kcml2ZXJfbm8pIHsKKwkJYm9hcmQgPSBDTlRfQk9BUkQoaW5vZGVfcC0+aV9yZGV2KTsKKwkJZGV2ID0gMDsKKwkJbW9kZSA9IDA7CisKKwkJUERFQlVHKCJtZTQwMDBfb3BlbigpOmJvYXJkID0gJWRcbiIsIGJvYXJkKTsKKworCQkvKiBTZWFyY2ggZm9yIHRoZSBib2FyZCBjb250ZXh0ICovCisJCWZvciAocHRyID0gbWU0MDAwX2JvYXJkX2luZm9fbGlzdC5uZXh0OworCQkgICAgIHB0ciAhPSAmbWU0MDAwX2JvYXJkX2luZm9fbGlzdDsgcHRyID0gcHRyLT5uZXh0KSB7CisJCQlib2FyZF9pbmZvID0gbGlzdF9lbnRyeShwdHIsIG1lNDAwMF9pbmZvX3QsIGxpc3QpOworCQkJaWYgKGJvYXJkX2luZm8tPmJvYXJkX2NvdW50ID09IGJvYXJkKQorCQkJCWJyZWFrOworCQl9CisKKwkJaWYgKHB0ciA9PSAmbWU0MDAwX2JvYXJkX2luZm9fbGlzdCkgeworCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkgICAgICAgIk1FNDAwMDptZTQwMDBfb3BlbigpOkJvYXJkICVkIG5vdCBpbiBkZXZpY2UgbGlzdFxuIiwKKwkJCSAgICAgICBib2FyZCk7CisJCQlyZXR1cm4gLUVOT0RFVjsKKwkJfQorCisJCS8qIEdldCB0aGUgY250IGNvbnRleHQgKi8KKwkJY250X2NvbnRleHQgPSBib2FyZF9pbmZvLT5jbnRfY29udGV4dDsKKworCQkvKiBDaGVjayBpZiBhbHJlYWR5IG9wZW5lZCAqLworCQlzcGluX2xvY2soJmNudF9jb250ZXh0LT51c2VfbG9jayk7CisJCWlmIChjbnRfY29udGV4dC0+aW5fdXNlKSB7CisJCQlwcmludGsoS0VSTl9FUlIKKwkJCSAgICAgICAiTUU0MDAwOm1lNDAwMF9vcGVuKCk6Q05UIGFscmVhZHkgaW4gdXNlXG4iKTsKKwkJCXNwaW5fdW5sb2NrKCZjbnRfY29udGV4dC0+dXNlX2xvY2spOworCQkJcmV0dXJuIC1FQlVTWTsKKwkJfQorCQljbnRfY29udGV4dC0+aW5fdXNlID0gMTsKKwkJc3Bpbl91bmxvY2soJmNudF9jb250ZXh0LT51c2VfbG9jayk7CisKKwkJLyogSG9sZCB0aGUgY29udGV4dCBpbiBwcml2YXRlIGRhdGEgKi8KKwkJZmlsZV9wLT5wcml2YXRlX2RhdGEgPSBjbnRfY29udGV4dDsKKworCQkvKiBTZXQgZmlsZSBvcGVyYXRpb25zIHBvaW50ZXIgdG8gc2luZ2xlIGZ1bmN0aW9ucyAqLworCQlmaWxlX3AtPmZfb3AgPSAmbWU0MDAwX2NudF9mb3BzOworCX0KKwkvKiBFeHRlcm5hbCBJbnRlcnJ1cHQgKi8KKwllbHNlIGlmIChNQUpPUihpbm9kZV9wLT5pX3JkZXYpID09IG1lNDAwMF9leHRfaW50X21ham9yX2RyaXZlcl9ubykgeworCQlib2FyZCA9IEVYVF9JTlRfQk9BUkQoaW5vZGVfcC0+aV9yZGV2KTsKKwkJZGV2ID0gMDsKKwkJbW9kZSA9IDA7CisKKwkJUERFQlVHKCJtZTQwMDBfb3BlbigpOmJvYXJkID0gJWRcbiIsIGJvYXJkKTsKKworCQkvKiBTZWFyY2ggZm9yIHRoZSBib2FyZCBjb250ZXh0ICovCisJCWZvciAocHRyID0gbWU0MDAwX2JvYXJkX2luZm9fbGlzdC5uZXh0OworCQkgICAgIHB0ciAhPSAmbWU0MDAwX2JvYXJkX2luZm9fbGlzdDsgcHRyID0gcHRyLT5uZXh0KSB7CisJCQlib2FyZF9pbmZvID0gbGlzdF9lbnRyeShwdHIsIG1lNDAwMF9pbmZvX3QsIGxpc3QpOworCQkJaWYgKGJvYXJkX2luZm8tPmJvYXJkX2NvdW50ID09IGJvYXJkKQorCQkJCWJyZWFrOworCQl9CisKKwkJaWYgKHB0ciA9PSAmbWU0MDAwX2JvYXJkX2luZm9fbGlzdCkgeworCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkgICAgICAgIk1FNDAwMDptZTQwMDBfb3BlbigpOkJvYXJkICVkIG5vdCBpbiBkZXZpY2UgbGlzdFxuIiwKKwkJCSAgICAgICBib2FyZCk7CisJCQlyZXR1cm4gLUVOT0RFVjsKKwkJfQorCisJCS8qIEdldCB0aGUgZXh0ZXJuYWwgaW50ZXJydXB0IGNvbnRleHQgKi8KKwkJZXh0X2ludF9jb250ZXh0ID0gYm9hcmRfaW5mby0+ZXh0X2ludF9jb250ZXh0OworCisJCS8qIENoZWNrIGlmIGFscmVhZHkgb3BlbmVkICovCisJCXNwaW5fbG9jaygmY250X2NvbnRleHQtPnVzZV9sb2NrKTsKKwkJaWYgKGV4dF9pbnRfY29udGV4dC0+aW5fdXNlKSB7CisJCQlwcmludGsoS0VSTl9FUlIKKwkJCSAgICAgICAiTUU0MDAwOm1lNDAwMF9vcGVuKCk6RXh0ZXJuYWwgaW50ZXJydXB0IGFscmVhZHkgaW4gdXNlXG4iKTsKKwkJCXNwaW5fdW5sb2NrKCZleHRfaW50X2NvbnRleHQtPnVzZV9sb2NrKTsKKwkJCXJldHVybiAtRUJVU1k7CisJCX0KKwkJZXh0X2ludF9jb250ZXh0LT5pbl91c2UgPSAxOworCQlzcGluX3VubG9jaygmZXh0X2ludF9jb250ZXh0LT51c2VfbG9jayk7CisKKwkJLyogSG9sZCB0aGUgY29udGV4dCBpbiBwcml2YXRlIGRhdGEgKi8KKwkJZmlsZV9wLT5wcml2YXRlX2RhdGEgPSBleHRfaW50X2NvbnRleHQ7CisKKwkJLyogU2V0IGZpbGUgb3BlcmF0aW9ucyBwb2ludGVyIHRvIHNpbmdsZSBmdW5jdGlvbnMgKi8KKwkJZmlsZV9wLT5mX29wID0gJm1lNDAwMF9leHRfaW50X2ZvcHM7CisKKwkJLyogUmVxdWVzdCB0aGUgaW50ZXJydXB0IGxpbmUgKi8KKwkJZXJyID0KKwkJICAgIHJlcXVlc3RfaXJxKGV4dF9pbnRfY29udGV4dC0+aXJxLCBtZTQwMDBfZXh0X2ludF9pc3IsCisJCQkJSVJRRl9ESVNBQkxFRCB8IElSUUZfU0hBUkVELCBNRTQwMDBfTkFNRSwKKwkJCQlleHRfaW50X2NvbnRleHQpOworCQlpZiAoZXJyKSB7CisJCQlwcmludGsoS0VSTl9FUlIKKwkJCSAgICAgICAiTUU0MDAwOm1lNDAwMF9vcGVuKCk6Q2FuJ3QgZ2V0IGludGVycnVwdCBsaW5lIik7CisJCQlleHRfaW50X2NvbnRleHQtPmluX3VzZSA9IDA7CisJCQlyZXR1cm4gLUVOT0RFVjsKKwkJfQorCisJCS8qIFJlc2V0IHRoZSBjb3VudGVyICovCisJCW1lNDAwMF9leHRfaW50X2Rpc2FibGUoZXh0X2ludF9jb250ZXh0KTsKKwl9IGVsc2UgeworCQlwcmludGsoS0VSTl9FUlIgIk1FNDAwMDptZTQwMDBfb3BlbigpOk1ham9yIG51bWJlciB1bmtub3duXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbWU0MDAwX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZV9wLCBzdHJ1Y3QgZmlsZSAqZmlsZV9wKQoreworCW1lNDAwMF9hb19jb250ZXh0X3QgKmFvX2NvbnRleHQ7CisJbWU0MDAwX2FpX2NvbnRleHRfdCAqYWlfY29udGV4dDsKKwltZTQwMDBfZGlvX2NvbnRleHRfdCAqZGlvX2NvbnRleHQ7CisJbWU0MDAwX2NudF9jb250ZXh0X3QgKmNudF9jb250ZXh0OworCW1lNDAwMF9leHRfaW50X2NvbnRleHRfdCAqZXh0X2ludF9jb250ZXh0OworCisJQ0FMTF9QREVCVUcoIm1lNDAwMF9yZWxlYXNlKCkgaXMgZXhlY3V0ZWRcbiIpOworCisJaWYgKE1BSk9SKGlub2RlX3AtPmlfcmRldikgPT0gbWU0MDAwX2FvX21ham9yX2RyaXZlcl9ubykgeworCQlhb19jb250ZXh0ID0gZmlsZV9wLT5wcml2YXRlX2RhdGE7CisKKwkJLyogTWFyayBEQUMgYXMgdW51c2VkICovCisJCWFvX2NvbnRleHQtPmRhY19pbl91c2UgPSAwOworCX0gZWxzZSBpZiAoTUFKT1IoaW5vZGVfcC0+aV9yZGV2KSA9PSBtZTQwMDBfYWlfbWFqb3JfZHJpdmVyX25vKSB7CisJCWFpX2NvbnRleHQgPSBmaWxlX3AtPnByaXZhdGVfZGF0YTsKKworCQkvKiBSZXNldCB0aGUgYW5hbG9nIGlucHV0ICovCisJCW1lNDAwMF9haV9yZXNldChhaV9jb250ZXh0KTsKKworCQkvKiBGcmVlIHRoZSBpbnRlcnJ1cHQgYW5kIHRoZSBjaXJjdWxhciBidWZmZXIgKi8KKwkJaWYgKGFpX2NvbnRleHQtPm1vZGUpIHsKKwkJCWZyZWVfaXJxKGFpX2NvbnRleHQtPmlycSwgYWlfY29udGV4dCk7CisJCQlrZnJlZShhaV9jb250ZXh0LT5jaXJjX2J1Zi5idWYpOworCQkJYWlfY29udGV4dC0+Y2lyY19idWYuYnVmID0gTlVMTDsKKwkJCWFpX2NvbnRleHQtPmNpcmNfYnVmLmhlYWQgPSAwOworCQkJYWlfY29udGV4dC0+Y2lyY19idWYudGFpbCA9IDA7CisJCX0KKworCQkvKiBNYXJrIEFJIGFzIHVudXNlZCAqLworCQlhaV9jb250ZXh0LT5pbl91c2UgPSAwOworCX0gZWxzZSBpZiAoTUFKT1IoaW5vZGVfcC0+aV9yZGV2KSA9PSBtZTQwMDBfZGlvX21ham9yX2RyaXZlcl9ubykgeworCQlkaW9fY29udGV4dCA9IGZpbGVfcC0+cHJpdmF0ZV9kYXRhOworCisJCS8qIE1hcmsgZGlnaXRhbCBJL08gYXMgdW51c2VkICovCisJCWRpb19jb250ZXh0LT5pbl91c2UgPSAwOworCX0gZWxzZSBpZiAoTUFKT1IoaW5vZGVfcC0+aV9yZGV2KSA9PSBtZTQwMDBfY250X21ham9yX2RyaXZlcl9ubykgeworCQljbnRfY29udGV4dCA9IGZpbGVfcC0+cHJpdmF0ZV9kYXRhOworCisJCS8qIE1hcmsgY291bnRlcnMgYXMgdW51c2VkICovCisJCWNudF9jb250ZXh0LT5pbl91c2UgPSAwOworCX0gZWxzZSBpZiAoTUFKT1IoaW5vZGVfcC0+aV9yZGV2KSA9PSBtZTQwMDBfZXh0X2ludF9tYWpvcl9kcml2ZXJfbm8pIHsKKwkJZXh0X2ludF9jb250ZXh0ID0gZmlsZV9wLT5wcml2YXRlX2RhdGE7CisKKwkJLyogRGlzYWJsZSB0aGUgZXh0ZXJuZWwgaW50ZXJydXB0ICovCisJCW1lNDAwMF9leHRfaW50X2Rpc2FibGUoZXh0X2ludF9jb250ZXh0KTsKKworCQlmcmVlX2lycShleHRfaW50X2NvbnRleHQtPmlycSwgZXh0X2ludF9jb250ZXh0KTsKKworCQkvKiBEZWxldGUgdGhlIGZhc3luYyBzdHJ1Y3R1cmUgYW5kIGZyZWUgbWVtb3J5ICovCisJCW1lNDAwMF9leHRfaW50X2Zhc3luYygwLCBmaWxlX3AsIDApOworCisJCS8qIE1hcmsgYXMgdW51c2VkICovCisJCWV4dF9pbnRfY29udGV4dC0+aW5fdXNlID0gMDsKKwl9IGVsc2UgeworCQlwcmludGsoS0VSTl9FUlIKKwkJICAgICAgICJNRTQwMDA6bWU0MDAwX3JlbGVhc2UoKTpNYWpvciBudW1iZXIgdW5rbm93blxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldHVybiAwOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gQW5hbG9nIG91dHB1dCBzdHVmZiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbnQgbWU0MDAwX2FvX3ByZXBhcmUobWU0MDAwX2FvX2NvbnRleHRfdCAqIGFvX2NvbnRleHQpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCUNBTExfUERFQlVHKCJtZTQwMDBfYW9fcHJlcGFyZSgpIGlzIGV4ZWN1dGVkXG4iKTsKKworCWlmIChhb19jb250ZXh0LT5tb2RlID09IE1FNDAwMF9BT19DT05WX01PREVfQ09OVElOVU9VUykgeworCQkvKiBPbmx5IGRvIGFueXRoaW5nIGlmIG5vdCBhbHJlYWR5IGluIHRoZSBjb3JyZWN0IG1vZGUgKi8KKwkJdW5zaWduZWQgbG9uZyBtb2RlID0gbWU0MDAwX2lubChhb19jb250ZXh0LT5jdHJsX3JlZyk7CisJCWlmICgobW9kZSAmIE1FNDAwMF9BT19DT05WX01PREVfQ09OVElOVU9VUykKKwkJICAgICYmIChtb2RlICYgTUU0MDAwX0FPX0NUUkxfQklUX0VOQUJMRV9GSUZPKSkgeworCQkJcmV0dXJuIDA7CisJCX0KKworCQkvKiBTdG9wIGFueSBjb252ZXJzaW9uICovCisJCW1lNDAwMF9hb19pbW1lZGlhdGVfc3RvcChhb19jb250ZXh0KTsKKworCQkvKiBTZXQgdGhlIGNvbnRyb2wgcmVnaXN0ZXIgdG8gZGVmYXVsdCBzdGF0ZSAgKi8KKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmFvX2NvbnRleHQtPmludF9sb2NrLCBmbGFncyk7CisJCW1lNDAwMF9vdXRsKE1FNDAwMF9BT19DT05WX01PREVfQ09OVElOVU9VUyB8CisJCQkgICAgTUU0MDAwX0FPX0NUUkxfQklUX0VOQUJMRV9GSUZPIHwKKwkJCSAgICBNRTQwMDBfQU9fQ1RSTF9CSVRfU1RPUCB8CisJCQkgICAgTUU0MDAwX0FPX0NUUkxfQklUX0lNTUVESUFURV9TVE9QLAorCQkJICAgIGFvX2NvbnRleHQtPmN0cmxfcmVnKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW9fY29udGV4dC0+aW50X2xvY2ssIGZsYWdzKTsKKworCQkvKiBTZXQgdG8gZmFzdGVzdCBzYW1wbGUgcmF0ZSAqLworCQltZTQwMDBfb3V0bCg2NSwgYW9fY29udGV4dC0+dGltZXJfcmVnKTsKKwl9IGVsc2UgaWYgKGFvX2NvbnRleHQtPm1vZGUgPT0gTUU0MDAwX0FPX0NPTlZfTU9ERV9XUkFQQVJPVU5EKSB7CisJCS8qIE9ubHkgZG8gYW55dGhpbmcgaWYgbm90IGFscmVhZHkgaW4gdGhlIGNvcnJlY3QgbW9kZSAqLworCQl1bnNpZ25lZCBsb25nIG1vZGUgPSBtZTQwMDBfaW5sKGFvX2NvbnRleHQtPmN0cmxfcmVnKTsKKwkJaWYgKChtb2RlICYgTUU0MDAwX0FPX0NPTlZfTU9ERV9XUkFQQVJPVU5EKQorCQkgICAgJiYgKG1vZGUgJiBNRTQwMDBfQU9fQ1RSTF9CSVRfRU5BQkxFX0ZJRk8pKSB7CisJCQlyZXR1cm4gMDsKKwkJfQorCisJCS8qIFN0b3AgYW55IGNvbnZlcnNpb24gKi8KKwkJbWU0MDAwX2FvX2ltbWVkaWF0ZV9zdG9wKGFvX2NvbnRleHQpOworCisJCS8qIFNldCB0aGUgY29udHJvbCByZWdpc3RlciB0byBkZWZhdWx0IHN0YXRlICAqLworCQlzcGluX2xvY2tfaXJxc2F2ZSgmYW9fY29udGV4dC0+aW50X2xvY2ssIGZsYWdzKTsKKwkJbWU0MDAwX291dGwoTUU0MDAwX0FPX0NPTlZfTU9ERV9XUkFQQVJPVU5EIHwKKwkJCSAgICBNRTQwMDBfQU9fQ1RSTF9CSVRfRU5BQkxFX0ZJRk8gfAorCQkJICAgIE1FNDAwMF9BT19DVFJMX0JJVF9TVE9QIHwKKwkJCSAgICBNRTQwMDBfQU9fQ1RSTF9CSVRfSU1NRURJQVRFX1NUT1AsCisJCQkgICAgYW9fY29udGV4dC0+Y3RybF9yZWcpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhb19jb250ZXh0LT5pbnRfbG9jaywgZmxhZ3MpOworCisJCS8qIFNldCB0byBmYXN0ZXN0IHNhbXBsZSByYXRlICovCisJCW1lNDAwMF9vdXRsKDY1LCBhb19jb250ZXh0LT50aW1lcl9yZWcpOworCX0gZWxzZSBpZiAoYW9fY29udGV4dC0+bW9kZSA9PSBNRTQwMDBfQU9fQ09OVl9NT0RFX1NJTkdMRSkgeworCQkvKiBPbmx5IGRvIGFueXRoaW5nIGlmIG5vdCBhbHJlYWR5IGluIHRoZSBjb3JyZWN0IG1vZGUgKi8KKwkJdW5zaWduZWQgbG9uZyBtb2RlID0gbWU0MDAwX2lubChhb19jb250ZXh0LT5jdHJsX3JlZyk7CisJCWlmICghCisJCSAgICAobW9kZSAmCisJCSAgICAgKE1FNDAwMF9BT19DT05WX01PREVfV1JBUEFST1VORCB8CisJCSAgICAgIE1FNDAwMF9BT19DT05WX01PREVfQ09OVElOVU9VUykpKSB7CisJCQlyZXR1cm4gMDsKKwkJfQorCisJCS8qIFN0b3AgYW55IGNvbnZlcnNpb24gKi8KKwkJbWU0MDAwX2FvX2ltbWVkaWF0ZV9zdG9wKGFvX2NvbnRleHQpOworCisJCS8qIENsZWFyIHRoZSBjb250cm9sIHJlZ2lzdGVyICovCisJCXNwaW5fbG9ja19pcnFzYXZlKCZhb19jb250ZXh0LT5pbnRfbG9jaywgZmxhZ3MpOworCQltZTQwMDBfb3V0bCgweDAsIGFvX2NvbnRleHQtPmN0cmxfcmVnKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW9fY29udGV4dC0+aW50X2xvY2ssIGZsYWdzKTsKKworCQkvKiBTZXQgdm9sdGFnZSB0byAwViAqLworCQltZTQwMDBfb3V0bCgweDgwMDAsIGFvX2NvbnRleHQtPnNpbmdsZV9yZWcpOworCX0gZWxzZSB7CisJCXByaW50ayhLRVJOX0VSUgorCQkgICAgICAgIk1FNDAwMDptZTQwMDBfYW9fcHJlcGFyZSgpOkludmFsaWQgbW9kZSBzcGVjaWZpZWRcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtZTQwMDBfYW9fcmVzZXQobWU0MDAwX2FvX2NvbnRleHRfdCAqIGFvX2NvbnRleHQpCit7CisJdTMyIHRtcDsKKwl3YWl0X3F1ZXVlX2hlYWRfdCBxdWV1ZTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJQ0FMTF9QREVCVUcoIm1lNDAwMF9hb19yZXNldCgpIGlzIGV4ZWN1dGVkXG4iKTsKKworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnF1ZXVlKTsKKworCWlmIChhb19jb250ZXh0LT5tb2RlID09IE1FNDAwMF9BT19DT05WX01PREVfV1JBUEFST1VORCkgeworCQkvKgorCQkgKiBGaXJzdCBzdG9wIGNvbnZlcnNpb24gb2YgdGhlIERBQyBiZWZvcmUgcmVjb25maWd1cmUuCisJCSAqIFRoaXMgaXMgZXNzYW50aWFsLCBjYXVzZSBvZiB0aGUgc3RhdGUgbWFjaGluZS4KKwkJICogSWYgbm90IHN0b3BwZWQgYmVmb3JlIGNvbmZpZ3VyaW5nIG1vZGUsIGl0IGNvdWxkCisJCSAqIHdhbGsgaW4gYSB1bmRlZmluZWQgc3RhdGUuCisJCSAqLworCQl0bXAgPSBtZTQwMDBfaW5sKGFvX2NvbnRleHQtPmN0cmxfcmVnKTsKKwkJdG1wIHw9IE1FNDAwMF9BT19DVFJMX0JJVF9JTU1FRElBVEVfU1RPUDsKKwkJbWU0MDAwX291dGwodG1wLCBhb19jb250ZXh0LT5jdHJsX3JlZyk7CisKKwkJd2hpbGUgKGlubChhb19jb250ZXh0LT5zdGF0dXNfcmVnKSAmIE1FNDAwMF9BT19TVEFUVVNfQklUX0ZTTSkgeworCQkJc2xlZXBfb25fdGltZW91dCgmcXVldWUsIDEpOworCQl9CisKKwkJLyogU2V0IHRvIHRyYW5zcGFyZW50IG1vZGUgKi8KKwkJbWU0MDAwX2FvX3NpbXVsdGFuZW91c19kaXNhYmxlKGFvX2NvbnRleHQpOworCisJCS8qIFNldCB0byBzaW5nbGUgbW9kZSBpbiBvcmRlciB0byBzZXQgZGVmYXVsdCB2b2x0YWdlICovCisJCW1lNDAwMF9vdXRsKDB4MCwgYW9fY29udGV4dC0+Y3RybF9yZWcpOworCisJCS8qIFNldCB2b2x0YWdlIHRvIDBWICovCisJCW1lNDAwMF9vdXRsKDB4ODAwMCwgYW9fY29udGV4dC0+c2luZ2xlX3JlZyk7CisKKwkJLyogU2V0IHRvIGZhc3Rlc3Qgc2FtcGxlIHJhdGUgKi8KKwkJbWU0MDAwX291dGwoNjUsIGFvX2NvbnRleHQtPnRpbWVyX3JlZyk7CisKKwkJLyogU2V0IHRoZSBvcmlnaW5hbCBtb2RlIGFuZCBlbmFibGUgRklGTyAqLworCQltZTQwMDBfb3V0bChNRTQwMDBfQU9fQ09OVl9NT0RFX1dSQVBBUk9VTkQgfAorCQkJICAgIE1FNDAwMF9BT19DVFJMX0JJVF9FTkFCTEVfRklGTyB8CisJCQkgICAgTUU0MDAwX0FPX0NUUkxfQklUX1NUT1AgfAorCQkJICAgIE1FNDAwMF9BT19DVFJMX0JJVF9JTU1FRElBVEVfU1RPUCwKKwkJCSAgICBhb19jb250ZXh0LT5jdHJsX3JlZyk7CisJfSBlbHNlIGlmIChhb19jb250ZXh0LT5tb2RlID09IE1FNDAwMF9BT19DT05WX01PREVfQ09OVElOVU9VUykgeworCQkvKgorCQkgKiBGaXJzdCBzdG9wIGNvbnZlcnNpb24gb2YgdGhlIERBQyBiZWZvcmUgcmVjb25maWd1cmUuCisJCSAqIFRoaXMgaXMgZXNzYW50aWFsLCBjYXVzZSBvZiB0aGUgc3RhdGUgbWFjaGluZS4KKwkJICogSWYgbm90IHN0b3BwZWQgYmVmb3JlIGNvbmZpZ3VyaW5nIG1vZGUsIGl0IGNvdWxkCisJCSAqIHdhbGsgaW4gYSB1bmRlZmluZWQgc3RhdGUuCisJCSAqLworCQlzcGluX2xvY2tfaXJxc2F2ZSgmYW9fY29udGV4dC0+aW50X2xvY2ssIGZsYWdzKTsKKwkJdG1wID0gbWU0MDAwX2lubChhb19jb250ZXh0LT5jdHJsX3JlZyk7CisJCXRtcCB8PSBNRTQwMDBfQU9fQ1RSTF9CSVRfU1RPUDsKKwkJbWU0MDAwX291dGwodG1wLCBhb19jb250ZXh0LT5jdHJsX3JlZyk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFvX2NvbnRleHQtPmludF9sb2NrLCBmbGFncyk7CisKKwkJd2hpbGUgKGlubChhb19jb250ZXh0LT5zdGF0dXNfcmVnKSAmIE1FNDAwMF9BT19TVEFUVVNfQklUX0ZTTSkgeworCQkJc2xlZXBfb25fdGltZW91dCgmcXVldWUsIDEpOworCQl9CisKKwkJLyogQ2xlYXIgdGhlIGNpcmN1bGFyIGJ1ZmZlciAqLworCQlhb19jb250ZXh0LT5jaXJjX2J1Zi5oZWFkID0gMDsKKwkJYW9fY29udGV4dC0+Y2lyY19idWYudGFpbCA9IDA7CisKKwkJLyogU2V0IHRvIHRyYW5zcGFyZW50IG1vZGUgKi8KKwkJbWU0MDAwX2FvX3NpbXVsdGFuZW91c19kaXNhYmxlKGFvX2NvbnRleHQpOworCisJCS8qIFNldCB0byBzaW5nbGUgbW9kZSBpbiBvcmRlciB0byBzZXQgZGVmYXVsdCB2b2x0YWdlICovCisJCXNwaW5fbG9ja19pcnFzYXZlKCZhb19jb250ZXh0LT5pbnRfbG9jaywgZmxhZ3MpOworCQl0bXAgPSBtZTQwMDBfaW5sKGFvX2NvbnRleHQtPmN0cmxfcmVnKTsKKwkJbWU0MDAwX291dGwoMHgwLCBhb19jb250ZXh0LT5jdHJsX3JlZyk7CisKKwkJLyogU2V0IHZvbHRhZ2UgdG8gMFYgKi8KKwkJbWU0MDAwX291dGwoMHg4MDAwLCBhb19jb250ZXh0LT5zaW5nbGVfcmVnKTsKKworCQkvKiBTZXQgdG8gZmFzdGVzdCBzYW1wbGUgcmF0ZSAqLworCQltZTQwMDBfb3V0bCg2NSwgYW9fY29udGV4dC0+dGltZXJfcmVnKTsKKworCQkvKiBTZXQgdGhlIG9yaWdpbmFsIG1vZGUgYW5kIGVuYWJsZSBGSUZPICovCisJCW1lNDAwMF9vdXRsKE1FNDAwMF9BT19DT05WX01PREVfQ09OVElOVU9VUyB8CisJCQkgICAgTUU0MDAwX0FPX0NUUkxfQklUX0VOQUJMRV9GSUZPIHwKKwkJCSAgICBNRTQwMDBfQU9fQ1RSTF9CSVRfU1RPUCB8CisJCQkgICAgTUU0MDAwX0FPX0NUUkxfQklUX0lNTUVESUFURV9TVE9QLAorCQkJICAgIGFvX2NvbnRleHQtPmN0cmxfcmVnKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW9fY29udGV4dC0+aW50X2xvY2ssIGZsYWdzKTsKKwl9IGVsc2UgeworCQkvKiBTZXQgdG8gdHJhbnNwYXJlbnQgbW9kZSAqLworCQltZTQwMDBfYW9fc2ltdWx0YW5lb3VzX2Rpc2FibGUoYW9fY29udGV4dCk7CisKKwkJLyogU2V0IHZvbHRhZ2UgdG8gMFYgKi8KKwkJbWU0MDAwX291dGwoMHg4MDAwLCBhb19jb250ZXh0LT5zaW5nbGVfcmVnKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHNzaXplX3QgbWU0MDAwX2FvX3dyaXRlX3Npbmcoc3RydWN0IGZpbGUgKmZpbGVwLCBjb25zdCBjaGFyICpidWZmLAorCQkJCSAgICBzaXplX3QgY250LCBsb2ZmX3QgKiBvZmZwKQoreworCW1lNDAwMF9hb19jb250ZXh0X3QgKmFvX2NvbnRleHQgPSBmaWxlcC0+cHJpdmF0ZV9kYXRhOworCXUzMiB2YWx1ZTsKKwljb25zdCB1MTYgKmJ1ZmZlciA9IChjb25zdCB1MTYgKilidWZmOworCisJQ0FMTF9QREVCVUcoIm1lNDAwMF9hb193cml0ZV9zaW5nKCkgaXMgZXhlY3V0ZWRcbiIpOworCisJaWYgKGNudCAhPSAyKSB7CisJCXByaW50ayhLRVJOX0VSUgorCQkgICAgICAgIm1lNDAwMF9hb193cml0ZV9zaW5nKCk6V3JpdGUgY291bnQgaXMgbm90IDJcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAoZ2V0X3VzZXIodmFsdWUsIGJ1ZmZlcikpIHsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCSAgICAgICAibWU0MDAwX2FvX3dyaXRlX3NpbmcoKTpDYW5ub3QgY29weSBkYXRhIGZyb20gdXNlclxuIik7CisJCXJldHVybiAtRUZBVUxUOworCX0KKworCW1lNDAwMF9vdXRsKHZhbHVlLCBhb19jb250ZXh0LT5zaW5nbGVfcmVnKTsKKworCXJldHVybiAyOworfQorCitzdGF0aWMgc3NpemVfdCBtZTQwMDBfYW9fd3JpdGVfd3JhcChzdHJ1Y3QgZmlsZSAqZmlsZXAsIGNvbnN0IGNoYXIgKmJ1ZmYsCisJCQkJICAgIHNpemVfdCBjbnQsIGxvZmZfdCAqIG9mZnApCit7CisJbWU0MDAwX2FvX2NvbnRleHRfdCAqYW9fY29udGV4dCA9IGZpbGVwLT5wcml2YXRlX2RhdGE7CisJc2l6ZV90IGk7CisJdTMyIHZhbHVlOworCXUzMiB0bXA7CisJY29uc3QgdTE2ICpidWZmZXIgPSAoY29uc3QgdTE2ICopYnVmZjsKKwlzaXplX3QgY291bnQgPSBjbnQgLyAyOworCisJQ0FMTF9QREVCVUcoIm1lNDAwMF9hb193cml0ZV93cmFwKCkgaXMgZXhlY3V0ZWRcbiIpOworCisJLyogQ2hlY2sgaWYgYSBjb252ZXJzaW9uIGlzIGFscmVhZHkgcnVubmluZyAqLworCWlmIChpbmwoYW9fY29udGV4dC0+c3RhdHVzX3JlZykgJiBNRTQwMDBfQU9fU1RBVFVTX0JJVF9GU00pIHsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCSAgICAgICAiTUU0MDAwOm1lNDAwMF9hb193cml0ZV93cmFwKCk6VGhlcmUgaXMgYWxyZWFkeSBhIGNvbnZlcnNpb24gcnVubmluZ1xuIik7CisJCXJldHVybiAtRUJVU1k7CisJfQorCisJaWYgKGNvdW50ID4gTUU0MDAwX0FPX0ZJRk9fQ09VTlQpIHsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCSAgICAgICAibWU0MDAwX2FvX3dyaXRlX3dyYXAoKTpDYW4ndCBsb2FkIG1vcmUgdGhhbiAlZCB2YWx1ZXNcbiIsCisJCSAgICAgICBNRTQwMDBfQU9fRklGT19DT1VOVCk7CisJCXJldHVybiAtRU5PU1BDOworCX0KKworCS8qIFJlc2V0IHRoZSBGSUZPICovCisJdG1wID0gaW5sKGFvX2NvbnRleHQtPmN0cmxfcmVnKTsKKwl0bXAgJj0gfk1FNDAwMF9BT19DVFJMX0JJVF9FTkFCTEVfRklGTzsKKwlvdXRsKHRtcCwgYW9fY29udGV4dC0+Y3RybF9yZWcpOworCXRtcCB8PSBNRTQwMDBfQU9fQ1RSTF9CSVRfRU5BQkxFX0ZJRk87CisJb3V0bCh0bXAsIGFvX2NvbnRleHQtPmN0cmxfcmVnKTsKKworCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CisJCWlmIChnZXRfdXNlcih2YWx1ZSwgYnVmZmVyICsgaSkpIHsKKwkJCXByaW50ayhLRVJOX0VSUgorCQkJICAgICAgICJtZTQwMDBfYW9fd3JpdGVfc2luZ2xlKCk6Q2Fubm90IGNvcHkgZGF0YSBmcm9tIHVzZXJcbiIpOworCQkJcmV0dXJuIC1FRkFVTFQ7CisJCX0KKwkJaWYgKCgoYW9fY29udGV4dC0+Zmlmb19yZWcgJiAweEZGKSA9PSBNRTQwMDBfQU9fMDFfRklGT19SRUcpCisJCSAgICB8fCAoKGFvX2NvbnRleHQtPmZpZm9fcmVnICYgMHhGRikgPT0gTUU0MDAwX0FPXzAzX0ZJRk9fUkVHKSkKKwkJCXZhbHVlID0gdmFsdWUgPDwgMTY7CisJCW91dGwodmFsdWUsIGFvX2NvbnRleHQtPmZpZm9fcmVnKTsKKwl9CisJQ0FMTF9QREVCVUcoIm1lNDAwMF9hb193cml0ZV93cmFwKCkgaXMgbGVhdmVkIHdpdGggJWRcbiIsIGkgKiAyKTsKKworCXJldHVybiBpICogMjsKK30KKworc3RhdGljIHNzaXplX3QgbWU0MDAwX2FvX3dyaXRlX2NvbnQoc3RydWN0IGZpbGUgKmZpbGVwLCBjb25zdCBjaGFyICpidWZmLAorCQkJCSAgICBzaXplX3QgY250LCBsb2ZmX3QgKiBvZmZwKQoreworCW1lNDAwMF9hb19jb250ZXh0X3QgKmFvX2NvbnRleHQgPSBmaWxlcC0+cHJpdmF0ZV9kYXRhOworCWNvbnN0IHUxNiAqYnVmZmVyID0gKGNvbnN0IHUxNiAqKWJ1ZmY7CisJc2l6ZV90IGNvdW50ID0gY250IC8gMjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXUzMiB0bXA7CisJaW50IGMgPSAwOworCWludCBrID0gMDsKKwlpbnQgcmV0ID0gMDsKKwl1MTYgc3ZhbHVlOworCXUzMiBsdmFsdWU7CisJaW50IGk7CisJd2FpdF9xdWV1ZV9oZWFkX3QgcXVldWU7CisKKwlDQUxMX1BERUJVRygibWU0MDAwX2FvX3dyaXRlX2NvbnQoKSBpcyBleGVjdXRlZFxuIik7CisKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZxdWV1ZSk7CisKKwkvKiBDaGVjayBjb3VudCAqLworCWlmIChjb3VudCA8PSAwKSB7CisJCVBERUJVRygibWU0MDAwX2FvX3dyaXRlX2NvbnQoKTpDb3VudCBpcyAwXG4iKTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKGZpbGVwLT5mX2ZsYWdzICYgT19BUFBFTkQpIHsKKwkJUERFQlVHKCJtZTQwMDBfYW9fd3JpdGVfY29udCgpOkFwcGVuZCBkYXRhIHRvIGRhdGEgc3RyZWFtXG4iKTsKKwkJd2hpbGUgKGNvdW50ID4gMCkgeworCQkJaWYgKGZpbGVwLT5mX2ZsYWdzICYgT19OT05CTE9DSykgeworCQkJCWlmIChhb19jb250ZXh0LT5waXBlX2ZsYWcpIHsKKwkJCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkJCSAgICAgICAiTUU0MDAwOm1lNDAwMF9hb193cml0ZV9jb250KCk6QnJva2VuIHBpcGUgaW4gbm9uYmxvY2tpbmcgd3JpdGVcbiIpOworCQkJCQlyZXR1cm4gLUVQSVBFOworCQkJCX0KKwkJCQljID0gbWU0MDAwX3NwYWNlX3RvX2VuZChhb19jb250ZXh0LT5jaXJjX2J1ZiwKKwkJCQkJCQlNRTQwMDBfQU9fQlVGRkVSX0NPVU5UKTsKKwkJCQlpZiAoIWMpIHsKKwkJCQkJUERFQlVHCisJCQkJCSAgICAoIm1lNDAwMF9hb193cml0ZV9jb250KCk6UmV0dXJuaW5nIGZyb20gbm9uYmxvY2tpbmcgd3JpdGVcbiIpOworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9IGVsc2UgeworCQkJCXdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZShhb19jb250ZXh0LT53YWl0X3F1ZXVlLAorCQkJCQkJCSAoYyA9CisJCQkJCQkJICBtZTQwMDBfc3BhY2VfdG9fZW5kCisJCQkJCQkJICAoYW9fY29udGV4dC0+Y2lyY19idWYsCisJCQkJCQkJICAgTUU0MDAwX0FPX0JVRkZFUl9DT1VOVCkpKTsKKwkJCQlpZiAoYW9fY29udGV4dC0+cGlwZV9mbGFnKSB7CisJCQkJCXByaW50ayhLRVJOX0VSUgorCQkJCQkgICAgICAgIm1lNDAwMF9hb193cml0ZV9jb250KCk6QnJva2VuIHBpcGUgaW4gYmxvY2tpbmcgd3JpdGVcbiIpOworCQkJCQlyZXR1cm4gLUVQSVBFOworCQkJCX0KKwkJCQlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHsKKwkJCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkJCSAgICAgICAibWU0MDAwX2FvX3dyaXRlX2NvbnQoKTpXYWl0IGZvciBmcmVlIGJ1ZmZlciBpbnRlcnJ1cHRlZCBmcm9tIHNpZ25hbFxuIik7CisJCQkJCXJldHVybiAtRUlOVFI7CisJCQkJfQorCQkJfQorCisJCQlQREVCVUcoIm1lNDAwMF9hb193cml0ZV9jb250KCk6U3BhY2UgdG8gZW5kID0gJWRcbiIsIGMpOworCisJCQkvKiBPbmx5IGFibGUgdG8gd3JpdGUgc2l6ZSBvZiBmcmVlIGJ1ZmZlciBvciBzaXplIG9mIGNvdW50ICovCisJCQlpZiAoY291bnQgPCBjKQorCQkJCWMgPSBjb3VudDsKKworCQkJayA9IDIgKiBjOworCQkJayAtPSBjb3B5X2Zyb21fdXNlcihhb19jb250ZXh0LT5jaXJjX2J1Zi5idWYgKworCQkJCQkgICAgYW9fY29udGV4dC0+Y2lyY19idWYuaGVhZCwgYnVmZmVyLAorCQkJCQkgICAgayk7CisJCQljID0gayAvIDI7CisJCQlQREVCVUcKKwkJCSAgICAoIm1lNDAwMF9hb193cml0ZV9jb250KCk6Q29weSAlZCB2YWx1ZXMgZnJvbSB1c2VyIHNwYWNlXG4iLAorCQkJICAgICBjKTsKKworCQkJaWYgKCFjKQorCQkJCXJldHVybiAtRUZBVUxUOworCisJCQlhb19jb250ZXh0LT5jaXJjX2J1Zi5oZWFkID0KKwkJCSAgICAoYW9fY29udGV4dC0+Y2lyY19idWYuaGVhZCArCisJCQkgICAgIGMpICYgKE1FNDAwMF9BT19CVUZGRVJfQ09VTlQgLSAxKTsKKwkJCWJ1ZmZlciArPSBjOworCQkJY291bnQgLT0gYzsKKwkJCXJldCArPSBjOworCisJCQkvKiBWYWx1ZXMgYXJlIG5vdyBhdmFpbGFibGUgc28gZW5hYmxlIGludGVycnVwdHMgKi8KKwkJCXNwaW5fbG9ja19pcnFzYXZlKCZhb19jb250ZXh0LT5pbnRfbG9jaywgZmxhZ3MpOworCQkJaWYgKG1lNDAwMF9idWZfY291bnQKKwkJCSAgICAoYW9fY29udGV4dC0+Y2lyY19idWYsIE1FNDAwMF9BT19CVUZGRVJfQ09VTlQpKSB7CisJCQkJdG1wID0gbWU0MDAwX2lubChhb19jb250ZXh0LT5jdHJsX3JlZyk7CisJCQkJdG1wIHw9IE1FNDAwMF9BT19DVFJMX0JJVF9FTkFCTEVfSVJROworCQkJCW1lNDAwMF9vdXRsKHRtcCwgYW9fY29udGV4dC0+Y3RybF9yZWcpOworCQkJfQorCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW9fY29udGV4dC0+aW50X2xvY2ssIGZsYWdzKTsKKwkJfQorCisJCS8qIFdhaXQgdW50aWwgdGhlIHN0YXRlIG1hY2hpbmUgaXMgc3RvcHBlZCBpZiBPX1NZTkMgaXMgc2V0ICovCisJCWlmIChmaWxlcC0+Zl9mbGFncyAmIE9fU1lOQykgeworCQkJd2hpbGUgKGlubChhb19jb250ZXh0LT5zdGF0dXNfcmVnKSAmCisJCQkgICAgICAgTUU0MDAwX0FPX1NUQVRVU19CSVRfRlNNKSB7CisJCQkJaW50ZXJydXB0aWJsZV9zbGVlcF9vbl90aW1lb3V0KCZxdWV1ZSwgMSk7CisJCQkJaWYgKGFvX2NvbnRleHQtPnBpcGVfZmxhZykgeworCQkJCQlQREVCVUcKKwkJCQkJICAgICgibWU0MDAwX2FvX3dyaXRlX2NvbnQoKTpCcm9rZW4gcGlwZSBkZXRlY3RlZCBhZnRlciBzeW5jXG4iKTsKKwkJCQkJcmV0dXJuIC1FUElQRTsKKwkJCQl9CisJCQkJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSB7CisJCQkJCXByaW50ayhLRVJOX0VSUgorCQkJCQkgICAgICAgIm1lNDAwMF9hb193cml0ZV9jb250KCk6V2FpdCBvbiBzdGF0ZSBtYWNoaW5lIGFmdGVyIHN5bmMgaW50ZXJydXB0ZWRcbiIpOworCQkJCQlyZXR1cm4gLUVJTlRSOworCQkJCX0KKwkJCX0KKwkJfQorCX0gZWxzZSB7CisJCVBERUJVRygibWU0MDAwX2FvX3dyaXRlX2NvbnQoKTpQcmVsb2FkIERBQyBGSUZPXG4iKTsKKwkJaWYgKChtZTQwMDBfaW5sKGFvX2NvbnRleHQtPnN0YXR1c19yZWcpICYKKwkJICAgICBNRTQwMDBfQU9fU1RBVFVTX0JJVF9GU00pKSB7CisJCQlwcmludGsoS0VSTl9FUlIKKwkJCSAgICAgICAibWU0MDAwX2FvX3dyaXRlX2NvbnQoKTpDYW4ndCBQcmVsb2FkIERBQyBGSUZPIHdoaWxlIGNvbnZlcnNpb24gaXMgcnVubmluZ1xuIik7CisJCQlyZXR1cm4gLUVCVVNZOworCQl9CisKKwkJLyogQ2xlYXIgdGhlIEZJRk8gKi8KKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmFvX2NvbnRleHQtPmludF9sb2NrLCBmbGFncyk7CisJCXRtcCA9IG1lNDAwMF9pbmwoYW9fY29udGV4dC0+Y3RybF9yZWcpOworCQl0bXAgJj0KKwkJICAgIH4oTUU0MDAwX0FPX0NUUkxfQklUX0VOQUJMRV9GSUZPIHwKKwkJICAgICAgTUU0MDAwX0FPX0NUUkxfQklUX0VOQUJMRV9JUlEpOworCQltZTQwMDBfb3V0bCh0bXAsIGFvX2NvbnRleHQtPmN0cmxfcmVnKTsKKwkJdG1wIHw9IE1FNDAwMF9BT19DVFJMX0JJVF9FTkFCTEVfRklGTzsKKwkJbWU0MDAwX291dGwodG1wLCBhb19jb250ZXh0LT5jdHJsX3JlZyk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFvX2NvbnRleHQtPmludF9sb2NrLCBmbGFncyk7CisKKwkJLyogQ2xlYXIgdGhlIGNpcmN1bGFyIGJ1ZmZlciAqLworCQlhb19jb250ZXh0LT5jaXJjX2J1Zi5oZWFkID0gMDsKKwkJYW9fY29udGV4dC0+Y2lyY19idWYudGFpbCA9IDA7CisKKwkJLyogUmVzZXQgdGhlIGJyb2tlbiBwaXBlIGZsYWcgKi8KKwkJYW9fY29udGV4dC0+cGlwZV9mbGFnID0gMDsKKworCQkvKiBPbmx5IGFibGUgdG8gd3JpdGUgc2l6ZSBvZiBmaWZvIG9yIGNvdW50ICovCisJCWMgPSBNRTQwMDBfQU9fRklGT19DT1VOVDsKKwkJaWYgKGNvdW50IDwgYykKKwkJCWMgPSBjb3VudDsKKworCQlQREVCVUcKKwkJICAgICgibWU0MDAwX2FvX3dyaXRlX2NvbnQoKTpXcml0ZSAlZCB2YWx1ZXMgdG8gREFDIG9uIDB4JWxYXG4iLAorCQkgICAgIGMsIGFvX2NvbnRleHQtPmZpZm9fcmVnKTsKKworCQkvKiBXcml0ZSB2YWx1ZXMgdG8gdGhlIGZpZm8gKi8KKwkJZm9yIChpID0gMDsgaSA8IGM7IGkrKykgeworCQkJaWYgKGdldF91c2VyKHN2YWx1ZSwgYnVmZmVyKSkKKwkJCQlyZXR1cm4gLUVGQVVMVDsKKworCQkJaWYgKCgoYW9fY29udGV4dC0+Zmlmb19yZWcgJiAweEZGKSA9PQorCQkJICAgICBNRTQwMDBfQU9fMDFfRklGT19SRUcpCisJCQkgICAgfHwgKChhb19jb250ZXh0LT5maWZvX3JlZyAmIDB4RkYpID09CisJCQkJTUU0MDAwX0FPXzAzX0ZJRk9fUkVHKSkgeworCQkJCWx2YWx1ZSA9ICgodTMyKSBzdmFsdWUpIDw8IDE2OworCQkJfSBlbHNlCisJCQkJbHZhbHVlID0gKHUzMikgc3ZhbHVlOworCisJCQlvdXRsKGx2YWx1ZSwgYW9fY29udGV4dC0+Zmlmb19yZWcpOworCQkJYnVmZmVyKys7CisJCX0KKwkJY291bnQgLT0gYzsKKwkJcmV0ICs9IGM7CisKKwkJd2hpbGUgKDEpIHsKKwkJCS8qIEdldCBmcmVlIGJ1ZmZlciAqLworCQkJYyA9IG1lNDAwMF9zcGFjZV90b19lbmQoYW9fY29udGV4dC0+Y2lyY19idWYsCisJCQkJCQlNRTQwMDBfQU9fQlVGRkVSX0NPVU5UKTsKKworCQkJaWYgKGMgPT0gMCkKKwkJCQlyZXR1cm4gKDIgKiByZXQpOworCisJCQkvKiBPbmx5IGFibGUgdG8gd3JpdGUgc2l6ZSBvZiBmcmVlIGJ1ZmZlciBvciBzaXplIG9mIGNvdW50ICovCisJCQlpZiAoY291bnQgPCBjKQorCQkJCWMgPSBjb3VudDsKKworCQkJLyogSWYgY291bnQgPSAwIHJldHVybiB0byB1c2VyICovCisJCQlpZiAoYyA8PSAwKSB7CisJCQkJUERFQlVHCisJCQkJICAgICgibWU0MDAwX2FvX3dyaXRlX2NvbnQoKTpDb3VudCByZWFjaGVkIDBcbiIpOworCQkJCWJyZWFrOworCQkJfQorCisJCQlrID0gMiAqIGM7CisJCQlrIC09IGNvcHlfZnJvbV91c2VyKGFvX2NvbnRleHQtPmNpcmNfYnVmLmJ1ZiArCisJCQkJCSAgICBhb19jb250ZXh0LT5jaXJjX2J1Zi5oZWFkLCBidWZmZXIsCisJCQkJCSAgICBrKTsKKwkJCWMgPSBrIC8gMjsKKwkJCVBERUJVRworCQkJICAgICgibWU0MDAwX2FvX3dyaXRlX2NvbnQoKTpXcm90ZSAlZCB2YWx1ZXMgdG8gYnVmZmVyXG4iLAorCQkJICAgICBjKTsKKworCQkJaWYgKCFjKQorCQkJCXJldHVybiAtRUZBVUxUOworCisJCQlhb19jb250ZXh0LT5jaXJjX2J1Zi5oZWFkID0KKwkJCSAgICAoYW9fY29udGV4dC0+Y2lyY19idWYuaGVhZCArCisJCQkgICAgIGMpICYgKE1FNDAwMF9BT19CVUZGRVJfQ09VTlQgLSAxKTsKKwkJCWJ1ZmZlciArPSBjOworCQkJY291bnQgLT0gYzsKKwkJCXJldCArPSBjOworCisJCQkvKiBJZiB2YWx1ZXMgaW4gdGhlIGJ1ZmZlciBhcmUgYXZhaWxhYmxlIHNvIGVuYWJsZSBpbnRlcnJ1cHRzICovCisJCQlzcGluX2xvY2tfaXJxc2F2ZSgmYW9fY29udGV4dC0+aW50X2xvY2ssIGZsYWdzKTsKKwkJCWlmIChtZTQwMDBfYnVmX2NvdW50CisJCQkgICAgKGFvX2NvbnRleHQtPmNpcmNfYnVmLCBNRTQwMDBfQU9fQlVGRkVSX0NPVU5UKSkgeworCQkJCVBERUJVRworCQkJCSAgICAoIm1lNDAwMF9hb193cml0ZV9jb250KCk6RW5hYmxlIEludGVycnVwdHNcbiIpOworCQkJCXRtcCA9IG1lNDAwMF9pbmwoYW9fY29udGV4dC0+Y3RybF9yZWcpOworCQkJCXRtcCB8PSBNRTQwMDBfQU9fQ1RSTF9CSVRfRU5BQkxFX0lSUTsKKwkJCQltZTQwMDBfb3V0bCh0bXAsIGFvX2NvbnRleHQtPmN0cmxfcmVnKTsKKwkJCX0KKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFvX2NvbnRleHQtPmludF9sb2NrLCBmbGFncyk7CisJCX0KKwl9CisKKwlpZiAoZmlsZXAtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKSB7CisJCXJldHVybiAocmV0ID09IDApID8gLUVBR0FJTiA6IDIgKiByZXQ7CisJfQorCisJcmV0dXJuIDIgKiByZXQ7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgbWU0MDAwX2FvX3BvbGxfY29udChzdHJ1Y3QgZmlsZSAqZmlsZV9wLCBwb2xsX3RhYmxlICogd2FpdCkKK3sKKwltZTQwMDBfYW9fY29udGV4dF90ICphb19jb250ZXh0OworCXVuc2lnbmVkIGxvbmcgbWFzayA9IDA7CisKKwlDQUxMX1BERUJVRygibWU0MDAwX2FvX3BvbGxfY29udCgpIGlzIGV4ZWN1dGVkXG4iKTsKKworCWFvX2NvbnRleHQgPSBmaWxlX3AtPnByaXZhdGVfZGF0YTsKKworCXBvbGxfd2FpdChmaWxlX3AsICZhb19jb250ZXh0LT53YWl0X3F1ZXVlLCB3YWl0KTsKKworCS8qIEdldCBmcmVlIGJ1ZmZlciAqLworCWlmIChtZTQwMDBfc3BhY2VfdG9fZW5kKGFvX2NvbnRleHQtPmNpcmNfYnVmLCBNRTQwMDBfQU9fQlVGRkVSX0NPVU5UKSkKKwkJbWFzayB8PSBQT0xMT1VUIHwgUE9MTFdSTk9STTsKKworCUNBTExfUERFQlVHKCJtZTQwMDBfYW9fcG9sbF9jb250KCk6UmV0dXJuIG1hc2sgJWxYXG4iLCBtYXNrKTsKKworCXJldHVybiBtYXNrOworfQorCitzdGF0aWMgaW50IG1lNDAwMF9hb19mc3luY19jb250KHN0cnVjdCBmaWxlICpmaWxlX3AsIHN0cnVjdCBkZW50cnkgKmRlbnRyeV9wLAorCQkJCWludCBkYXRhc3luYykKK3sKKwltZTQwMDBfYW9fY29udGV4dF90ICphb19jb250ZXh0OworCXdhaXRfcXVldWVfaGVhZF90IHF1ZXVlOworCisJQ0FMTF9QREVCVUcoIm1lNDAwMF9hb19mc3luY19jb250KCkgaXMgZXhlY3V0ZWRcbiIpOworCisJYW9fY29udGV4dCA9IGZpbGVfcC0+cHJpdmF0ZV9kYXRhOworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnF1ZXVlKTsKKworCXdoaWxlIChpbmwoYW9fY29udGV4dC0+c3RhdHVzX3JlZykgJiBNRTQwMDBfQU9fU1RBVFVTX0JJVF9GU00pIHsKKwkJaW50ZXJydXB0aWJsZV9zbGVlcF9vbl90aW1lb3V0KCZxdWV1ZSwgMSk7CisJCWlmIChhb19jb250ZXh0LT5waXBlX2ZsYWcpIHsKKwkJCXByaW50ayhLRVJOX0VSUgorCQkJICAgICAgICJtZTQwMDBfYW9fZnN5bmNfY29udCgpOkJyb2tlbiBwaXBlIGRldGVjdGVkXG4iKTsKKwkJCXJldHVybiAtRVBJUEU7CisJCX0KKworCQlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHsKKwkJCXByaW50ayhLRVJOX0VSUgorCQkJICAgICAgICJtZTQwMDBfYW9fZnN5bmNfY29udCgpOldhaXQgb24gc3RhdGUgbWFjaGluZSBpbnRlcnJ1cHRlZFxuIik7CisJCQlyZXR1cm4gLUVJTlRSOworCQl9CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbWU0MDAwX2FvX2lvY3RsX3Npbmcoc3RydWN0IGlub2RlICppbm9kZV9wLCBzdHJ1Y3QgZmlsZSAqZmlsZV9wLAorCQkJCXVuc2lnbmVkIGludCBzZXJ2aWNlLCB1bnNpZ25lZCBsb25nIGFyZykKK3sKKwltZTQwMDBfYW9fY29udGV4dF90ICphb19jb250ZXh0OworCisJQ0FMTF9QREVCVUcoIm1lNDAwMF9hb19pb2N0bF9zaW5nKCkgaXMgZXhlY3V0ZWRcbiIpOworCisJYW9fY29udGV4dCA9IGZpbGVfcC0+cHJpdmF0ZV9kYXRhOworCisJaWYgKF9JT0NfVFlQRShzZXJ2aWNlKSAhPSBNRTQwMDBfTUFHSUMpIHsKKwkJcmV0dXJuIC1FTk9UVFk7CisJCVBERUJVRygibWU0MDAwX2FvX2lvY3RsX3NpbmcoKTpXcm9uZyBtYWdpYyBudW1iZXJcbiIpOworCX0KKworCXN3aXRjaCAoc2VydmljZSkgeworCWNhc2UgTUU0MDAwX0FPX0VYX1RSSUdfU0VUVVA6CisJCXJldHVybiBtZTQwMDBfYW9fZXhfdHJpZ19zZXRfZWRnZSgoaW50ICopYXJnLCBhb19jb250ZXh0KTsKKwljYXNlIE1FNDAwMF9BT19FWF9UUklHX0VOQUJMRToKKwkJcmV0dXJuIG1lNDAwMF9hb19leF90cmlnX2VuYWJsZShhb19jb250ZXh0KTsKKwljYXNlIE1FNDAwMF9BT19FWF9UUklHX0RJU0FCTEU6CisJCXJldHVybiBtZTQwMDBfYW9fZXhfdHJpZ19kaXNhYmxlKGFvX2NvbnRleHQpOworCWNhc2UgTUU0MDAwX0FPX1BSRUxPQUQ6CisJCXJldHVybiBtZTQwMDBfYW9fcHJlbG9hZChhb19jb250ZXh0KTsKKwljYXNlIE1FNDAwMF9BT19QUkVMT0FEX1VQREFURToKKwkJcmV0dXJuIG1lNDAwMF9hb19wcmVsb2FkX3VwZGF0ZShhb19jb250ZXh0KTsKKwljYXNlIE1FNDAwMF9HRVRfVVNFUl9JTkZPOgorCQlyZXR1cm4gbWU0MDAwX2dldF91c2VyX2luZm8oKG1lNDAwMF91c2VyX2luZm9fdCAqKSBhcmcsCisJCQkJCSAgICBhb19jb250ZXh0LT5ib2FyZF9pbmZvKTsKKwljYXNlIE1FNDAwMF9BT19TSU1VTFRBTkVPVVNfRVhfVFJJRzoKKwkJcmV0dXJuIG1lNDAwMF9hb19zaW11bHRhbmVvdXNfZXhfdHJpZyhhb19jb250ZXh0KTsKKwljYXNlIE1FNDAwMF9BT19TSU1VTFRBTkVPVVNfU1c6CisJCXJldHVybiBtZTQwMDBfYW9fc2ltdWx0YW5lb3VzX3N3KGFvX2NvbnRleHQpOworCWNhc2UgTUU0MDAwX0FPX1NJTVVMVEFORU9VU19ESVNBQkxFOgorCQlyZXR1cm4gbWU0MDAwX2FvX3NpbXVsdGFuZW91c19kaXNhYmxlKGFvX2NvbnRleHQpOworCWNhc2UgTUU0MDAwX0FPX1NJTVVMVEFORU9VU19VUERBVEU6CisJCXJldHVybgorCQkgICAgbWU0MDAwX2FvX3NpbXVsdGFuZW91c191cGRhdGUoKG1lNDAwMF9hb19jaGFubmVsX2xpc3RfdCAqKQorCQkJCQkJICBhcmcsIGFvX2NvbnRleHQpOworCWNhc2UgTUU0MDAwX0FPX0VYX1RSSUdfVElNRU9VVDoKKwkJcmV0dXJuIG1lNDAwMF9hb19leF90cmlnX3RpbWVvdXQoKHVuc2lnbmVkIGxvbmcgKilhcmcsCisJCQkJCQkgYW9fY29udGV4dCk7CisJY2FzZSBNRTQwMDBfQU9fRElTQUJMRV9ETzoKKwkJcmV0dXJuIG1lNDAwMF9hb19kaXNhYmxlX2RvKGFvX2NvbnRleHQpOworCWRlZmF1bHQ6CisJCXByaW50ayhLRVJOX0VSUgorCQkgICAgICAgIm1lNDAwMF9hb19pb2N0bF9zaW5nKCk6U2VydmljZSBudW1iZXIgaW52YWxpZFxuIik7CisJCXJldHVybiAtRU5PVFRZOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG1lNDAwMF9hb19pb2N0bF93cmFwKHN0cnVjdCBpbm9kZSAqaW5vZGVfcCwgc3RydWN0IGZpbGUgKmZpbGVfcCwKKwkJCQl1bnNpZ25lZCBpbnQgc2VydmljZSwgdW5zaWduZWQgbG9uZyBhcmcpCit7CisJbWU0MDAwX2FvX2NvbnRleHRfdCAqYW9fY29udGV4dDsKKworCUNBTExfUERFQlVHKCJtZTQwMDBfYW9faW9jdGxfd3JhcCgpIGlzIGV4ZWN1dGVkXG4iKTsKKworCWFvX2NvbnRleHQgPSBmaWxlX3AtPnByaXZhdGVfZGF0YTsKKworCWlmIChfSU9DX1RZUEUoc2VydmljZSkgIT0gTUU0MDAwX01BR0lDKSB7CisJCXJldHVybiAtRU5PVFRZOworCQlQREVCVUcoIm1lNDAwMF9hb19pb2N0bF93cmFwKCk6V3JvbmcgbWFnaWMgbnVtYmVyXG4iKTsKKwl9CisKKwlzd2l0Y2ggKHNlcnZpY2UpIHsKKwljYXNlIE1FNDAwMF9BT19TVEFSVDoKKwkJcmV0dXJuIG1lNDAwMF9hb19zdGFydCgodW5zaWduZWQgbG9uZyAqKWFyZywgYW9fY29udGV4dCk7CisJY2FzZSBNRTQwMDBfQU9fU1RPUDoKKwkJcmV0dXJuIG1lNDAwMF9hb19zdG9wKGFvX2NvbnRleHQpOworCWNhc2UgTUU0MDAwX0FPX0lNTUVESUFURV9TVE9QOgorCQlyZXR1cm4gbWU0MDAwX2FvX2ltbWVkaWF0ZV9zdG9wKGFvX2NvbnRleHQpOworCWNhc2UgTUU0MDAwX0FPX1JFU0VUOgorCQlyZXR1cm4gbWU0MDAwX2FvX3Jlc2V0KGFvX2NvbnRleHQpOworCWNhc2UgTUU0MDAwX0FPX1RJTUVSX1NFVF9ESVZJU09SOgorCQlyZXR1cm4gbWU0MDAwX2FvX3RpbWVyX3NldF9kaXZpc29yKCh1MzIgKikgYXJnLCBhb19jb250ZXh0KTsKKwljYXNlIE1FNDAwMF9BT19FWF9UUklHX1NFVFVQOgorCQlyZXR1cm4gbWU0MDAwX2FvX2V4X3RyaWdfc2V0X2VkZ2UoKGludCAqKWFyZywgYW9fY29udGV4dCk7CisJY2FzZSBNRTQwMDBfQU9fRVhfVFJJR19FTkFCTEU6CisJCXJldHVybiBtZTQwMDBfYW9fZXhfdHJpZ19lbmFibGUoYW9fY29udGV4dCk7CisJY2FzZSBNRTQwMDBfQU9fRVhfVFJJR19ESVNBQkxFOgorCQlyZXR1cm4gbWU0MDAwX2FvX2V4X3RyaWdfZGlzYWJsZShhb19jb250ZXh0KTsKKwljYXNlIE1FNDAwMF9HRVRfVVNFUl9JTkZPOgorCQlyZXR1cm4gbWU0MDAwX2dldF91c2VyX2luZm8oKG1lNDAwMF91c2VyX2luZm9fdCAqKSBhcmcsCisJCQkJCSAgICBhb19jb250ZXh0LT5ib2FyZF9pbmZvKTsKKwljYXNlIE1FNDAwMF9BT19GU01fU1RBVEU6CisJCXJldHVybiBtZTQwMDBfYW9fZnNtX3N0YXRlKChpbnQgKilhcmcsIGFvX2NvbnRleHQpOworCWNhc2UgTUU0MDAwX0FPX0VOQUJMRV9ETzoKKwkJcmV0dXJuIG1lNDAwMF9hb19lbmFibGVfZG8oYW9fY29udGV4dCk7CisJY2FzZSBNRTQwMDBfQU9fRElTQUJMRV9ETzoKKwkJcmV0dXJuIG1lNDAwMF9hb19kaXNhYmxlX2RvKGFvX2NvbnRleHQpOworCWNhc2UgTUU0MDAwX0FPX1NZTkNIUk9OT1VTX0VYX1RSSUc6CisJCXJldHVybiBtZTQwMDBfYW9fc3luY2hyb25vdXNfZXhfdHJpZyhhb19jb250ZXh0KTsKKwljYXNlIE1FNDAwMF9BT19TWU5DSFJPTk9VU19TVzoKKwkJcmV0dXJuIG1lNDAwMF9hb19zeW5jaHJvbm91c19zdyhhb19jb250ZXh0KTsKKwljYXNlIE1FNDAwMF9BT19TWU5DSFJPTk9VU19ESVNBQkxFOgorCQlyZXR1cm4gbWU0MDAwX2FvX3N5bmNocm9ub3VzX2Rpc2FibGUoYW9fY29udGV4dCk7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FTk9UVFk7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG1lNDAwMF9hb19pb2N0bF9jb250KHN0cnVjdCBpbm9kZSAqaW5vZGVfcCwgc3RydWN0IGZpbGUgKmZpbGVfcCwKKwkJCQl1bnNpZ25lZCBpbnQgc2VydmljZSwgdW5zaWduZWQgbG9uZyBhcmcpCit7CisJbWU0MDAwX2FvX2NvbnRleHRfdCAqYW9fY29udGV4dDsKKworCUNBTExfUERFQlVHKCJtZTQwMDBfYW9faW9jdGxfY29udCgpIGlzIGV4ZWN1dGVkXG4iKTsKKworCWFvX2NvbnRleHQgPSBmaWxlX3AtPnByaXZhdGVfZGF0YTsKKworCWlmIChfSU9DX1RZUEUoc2VydmljZSkgIT0gTUU0MDAwX01BR0lDKSB7CisJCXJldHVybiAtRU5PVFRZOworCQlQREVCVUcoIm1lNDAwMF9hb19pb2N0bF9jb250KCk6V3JvbmcgbWFnaWMgbnVtYmVyXG4iKTsKKwl9CisKKwlzd2l0Y2ggKHNlcnZpY2UpIHsKKwljYXNlIE1FNDAwMF9BT19TVEFSVDoKKwkJcmV0dXJuIG1lNDAwMF9hb19zdGFydCgodW5zaWduZWQgbG9uZyAqKWFyZywgYW9fY29udGV4dCk7CisJY2FzZSBNRTQwMDBfQU9fU1RPUDoKKwkJcmV0dXJuIG1lNDAwMF9hb19zdG9wKGFvX2NvbnRleHQpOworCWNhc2UgTUU0MDAwX0FPX0lNTUVESUFURV9TVE9QOgorCQlyZXR1cm4gbWU0MDAwX2FvX2ltbWVkaWF0ZV9zdG9wKGFvX2NvbnRleHQpOworCWNhc2UgTUU0MDAwX0FPX1JFU0VUOgorCQlyZXR1cm4gbWU0MDAwX2FvX3Jlc2V0KGFvX2NvbnRleHQpOworCWNhc2UgTUU0MDAwX0FPX1RJTUVSX1NFVF9ESVZJU09SOgorCQlyZXR1cm4gbWU0MDAwX2FvX3RpbWVyX3NldF9kaXZpc29yKCh1MzIgKikgYXJnLCBhb19jb250ZXh0KTsKKwljYXNlIE1FNDAwMF9BT19FWF9UUklHX1NFVFVQOgorCQlyZXR1cm4gbWU0MDAwX2FvX2V4X3RyaWdfc2V0X2VkZ2UoKGludCAqKWFyZywgYW9fY29udGV4dCk7CisJY2FzZSBNRTQwMDBfQU9fRVhfVFJJR19FTkFCTEU6CisJCXJldHVybiBtZTQwMDBfYW9fZXhfdHJpZ19lbmFibGUoYW9fY29udGV4dCk7CisJY2FzZSBNRTQwMDBfQU9fRVhfVFJJR19ESVNBQkxFOgorCQlyZXR1cm4gbWU0MDAwX2FvX2V4X3RyaWdfZGlzYWJsZShhb19jb250ZXh0KTsKKwljYXNlIE1FNDAwMF9BT19FTkFCTEVfRE86CisJCXJldHVybiBtZTQwMDBfYW9fZW5hYmxlX2RvKGFvX2NvbnRleHQpOworCWNhc2UgTUU0MDAwX0FPX0RJU0FCTEVfRE86CisJCXJldHVybiBtZTQwMDBfYW9fZGlzYWJsZV9kbyhhb19jb250ZXh0KTsKKwljYXNlIE1FNDAwMF9BT19GU01fU1RBVEU6CisJCXJldHVybiBtZTQwMDBfYW9fZnNtX3N0YXRlKChpbnQgKilhcmcsIGFvX2NvbnRleHQpOworCWNhc2UgTUU0MDAwX0dFVF9VU0VSX0lORk86CisJCXJldHVybiBtZTQwMDBfZ2V0X3VzZXJfaW5mbygobWU0MDAwX3VzZXJfaW5mb190ICopIGFyZywKKwkJCQkJICAgIGFvX2NvbnRleHQtPmJvYXJkX2luZm8pOworCWNhc2UgTUU0MDAwX0FPX1NZTkNIUk9OT1VTX0VYX1RSSUc6CisJCXJldHVybiBtZTQwMDBfYW9fc3luY2hyb25vdXNfZXhfdHJpZyhhb19jb250ZXh0KTsKKwljYXNlIE1FNDAwMF9BT19TWU5DSFJPTk9VU19TVzoKKwkJcmV0dXJuIG1lNDAwMF9hb19zeW5jaHJvbm91c19zdyhhb19jb250ZXh0KTsKKwljYXNlIE1FNDAwMF9BT19TWU5DSFJPTk9VU19ESVNBQkxFOgorCQlyZXR1cm4gbWU0MDAwX2FvX3N5bmNocm9ub3VzX2Rpc2FibGUoYW9fY29udGV4dCk7CisJY2FzZSBNRTQwMDBfQU9fR0VUX0ZSRUVfQlVGRkVSOgorCQlyZXR1cm4gbWU0MDAwX2FvX2dldF9mcmVlX2J1ZmZlcigodW5zaWduZWQgbG9uZyAqKWFyZywKKwkJCQkJCSBhb19jb250ZXh0KTsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVOT1RUWTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbWU0MDAwX2FvX3N0YXJ0KHVuc2lnbmVkIGxvbmcgKmFyZywgbWU0MDAwX2FvX2NvbnRleHRfdCAqIGFvX2NvbnRleHQpCit7CisJdTMyIHRtcDsKKwl3YWl0X3F1ZXVlX2hlYWRfdCBxdWV1ZTsKKwl1bnNpZ25lZCBsb25nIHJlZjsKKwl1bnNpZ25lZCBsb25nIHRpbWVvdXQ7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCUNBTExfUERFQlVHKCJtZTQwMDBfYW9fc3RhcnQoKSBpcyBleGVjdXRlZFxuIik7CisKKwlpZiAoZ2V0X3VzZXIodGltZW91dCwgYXJnKSkgeworCQlwcmludGsoS0VSTl9FUlIKKwkJICAgICAgICJtZTQwMDBfYW9fc3RhcnQoKTpDYW5ub3QgY29weSBkYXRhIGZyb20gdXNlclxuIik7CisJCXJldHVybiAtRUZBVUxUOworCX0KKworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnF1ZXVlKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZhb19jb250ZXh0LT5pbnRfbG9jaywgZmxhZ3MpOworCXRtcCA9IGlubChhb19jb250ZXh0LT5jdHJsX3JlZyk7CisJdG1wICY9IH4oTUU0MDAwX0FPX0NUUkxfQklUX1NUT1AgfCBNRTQwMDBfQU9fQ1RSTF9CSVRfSU1NRURJQVRFX1NUT1ApOworCW1lNDAwMF9vdXRsKHRtcCwgYW9fY29udGV4dC0+Y3RybF9yZWcpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFvX2NvbnRleHQtPmludF9sb2NrLCBmbGFncyk7CisKKwlpZiAoKHRtcCAmIE1FNDAwMF9BT19DVFJMX0JJVF9FTkFCTEVfRVhfVFJJRykpIHsKKwkJaWYgKHRpbWVvdXQpIHsKKwkJCXJlZiA9IGppZmZpZXM7CisJCQl3aGlsZSAoIQorCQkJICAgICAgIChpbmwoYW9fY29udGV4dC0+c3RhdHVzX3JlZykgJgorCQkJCU1FNDAwMF9BT19TVEFUVVNfQklUX0ZTTSkpIHsKKwkJCQlpbnRlcnJ1cHRpYmxlX3NsZWVwX29uX3RpbWVvdXQoJnF1ZXVlLCAxKTsKKwkJCQlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHsKKwkJCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkJCSAgICAgICAiTUU0MDAwOm1lNDAwMF9hb19zdGFydCgpOldhaXQgb24gc3RhcnQgb2Ygc3RhdGUgbWFjaGluZSBpbnRlcnJ1cHRlZFxuIik7CisJCQkJCXJldHVybiAtRUlOVFI7CisJCQkJfQorCQkJCWlmICgoKGppZmZpZXMgLSByZWYpID4gKHRpbWVvdXQgKiBIWiAvIFVTRVJfSFopKSkgewkvLyAyLjYgaGFzIGRpZmZyZW50IGRlZmluaXRpb25zIGZvciBIWiBpbiB1c2VyIGFuZCBrZXJuZWwgc3BhY2UKKwkJCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkJCSAgICAgICAiTUU0MDAwOm1lNDAwMF9hb19zdGFydCgpOlRpbWVvdXQgcmVhY2hlZFxuIik7CisJCQkJCXJldHVybiAtRUlPOworCQkJCX0KKwkJCX0KKwkJfQorCX0gZWxzZSB7CisJCW1lNDAwMF9vdXRsKDB4ODAwMCwgYW9fY29udGV4dC0+c2luZ2xlX3JlZyk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbWU0MDAwX2FvX3N0b3AobWU0MDAwX2FvX2NvbnRleHRfdCAqIGFvX2NvbnRleHQpCit7CisJdTMyIHRtcDsKKwl3YWl0X3F1ZXVlX2hlYWRfdCBxdWV1ZTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJaW5pdF93YWl0cXVldWVfaGVhZCgmcXVldWUpOworCisJQ0FMTF9QREVCVUcoIm1lNDAwMF9hb19zdG9wKCkgaXMgZXhlY3V0ZWRcbiIpOworCisJLyogU2V0IHRoZSBzdG9wIGJpdCAqLworCXNwaW5fbG9ja19pcnFzYXZlKCZhb19jb250ZXh0LT5pbnRfbG9jaywgZmxhZ3MpOworCXRtcCA9IGlubChhb19jb250ZXh0LT5jdHJsX3JlZyk7CisJdG1wIHw9IE1FNDAwMF9BT19DVFJMX0JJVF9TVE9QOworCW1lNDAwMF9vdXRsKHRtcCwgYW9fY29udGV4dC0+Y3RybF9yZWcpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFvX2NvbnRleHQtPmludF9sb2NrLCBmbGFncyk7CisKKwl3aGlsZSAoaW5sKGFvX2NvbnRleHQtPnN0YXR1c19yZWcpICYgTUU0MDAwX0FPX1NUQVRVU19CSVRfRlNNKSB7CisJCWludGVycnVwdGlibGVfc2xlZXBfb25fdGltZW91dCgmcXVldWUsIDEpOworCQlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHsKKwkJCXByaW50ayhLRVJOX0VSUgorCQkJICAgICAgICJtZTQwMDBfYW9fc3RvcCgpOldhaXQgb24gc3RhdGUgbWFjaGluZSBhZnRlciBzdG9wIGludGVycnVwdGVkXG4iKTsKKwkJCXJldHVybiAtRUlOVFI7CisJCX0KKwl9CisKKwkvKiBDbGVhciB0aGUgc3RvcCBiaXQgKi8KKwkvL3RtcCAmPSB+TUU0MDAwX0FPX0NUUkxfQklUX1NUT1A7CisJLy9tZTQwMDBfb3V0bCh0bXAsIGFvX2NvbnRleHQtPmN0cmxfcmVnKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG1lNDAwMF9hb19pbW1lZGlhdGVfc3RvcChtZTQwMDBfYW9fY29udGV4dF90ICogYW9fY29udGV4dCkKK3sKKwl1MzIgdG1wOworCXdhaXRfcXVldWVfaGVhZF90IHF1ZXVlOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZxdWV1ZSk7CisKKwlDQUxMX1BERUJVRygibWU0MDAwX2FvX2ltbWVkaWF0ZV9zdG9wKCkgaXMgZXhlY3V0ZWRcbiIpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmFvX2NvbnRleHQtPmludF9sb2NrLCBmbGFncyk7CisJdG1wID0gaW5sKGFvX2NvbnRleHQtPmN0cmxfcmVnKTsKKwl0bXAgfD0gTUU0MDAwX0FPX0NUUkxfQklUX1NUT1AgfCBNRTQwMDBfQU9fQ1RSTF9CSVRfSU1NRURJQVRFX1NUT1A7CisJbWU0MDAwX291dGwodG1wLCBhb19jb250ZXh0LT5jdHJsX3JlZyk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW9fY29udGV4dC0+aW50X2xvY2ssIGZsYWdzKTsKKworCXdoaWxlIChpbmwoYW9fY29udGV4dC0+c3RhdHVzX3JlZykgJiBNRTQwMDBfQU9fU1RBVFVTX0JJVF9GU00pIHsKKwkJaW50ZXJydXB0aWJsZV9zbGVlcF9vbl90aW1lb3V0KCZxdWV1ZSwgMSk7CisJCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkgeworCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkgICAgICAgIm1lNDAwMF9hb19pbW1lZGlhdGVfc3RvcCgpOldhaXQgb24gc3RhdGUgbWFjaGluZSBhZnRlciBzdG9wIGludGVycnVwdGVkXG4iKTsKKwkJCXJldHVybiAtRUlOVFI7CisJCX0KKwl9CisKKwkvKiBDbGVhciB0aGUgc3RvcCBiaXRzICovCisJLy90bXAgJj0gfihNRTQwMDBfQU9fQ1RSTF9CSVRfU1RPUCB8IE1FNDAwMF9BT19DVFJMX0JJVF9JTU1FRElBVEVfU1RPUCk7CisJLy9tZTQwMDBfb3V0bCh0bXAsIGFvX2NvbnRleHQtPmN0cmxfcmVnKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG1lNDAwMF9hb190aW1lcl9zZXRfZGl2aXNvcih1MzIgKiBhcmcsCisJCQkJICAgICAgIG1lNDAwMF9hb19jb250ZXh0X3QgKiBhb19jb250ZXh0KQoreworCXUzMiBkaXZpc29yOworCXUzMiB0bXA7CisKKwlDQUxMX1BERUJVRygibWU0MDAwX2FvX3RpbWVyIHNldF9kaXZpc29yKCkgaXMgZXhlY3V0ZWRcbiIpOworCisJaWYgKGdldF91c2VyKGRpdmlzb3IsIGFyZykpCisJCXJldHVybiAtRUZBVUxUOworCisJLyogQ2hlY2sgaWYgdGhlIHN0YXRlIG1hY2hpbmUgaXMgc3RvcHBlZCAqLworCXRtcCA9IG1lNDAwMF9pbmwoYW9fY29udGV4dC0+c3RhdHVzX3JlZyk7CisJaWYgKHRtcCAmIE1FNDAwMF9BT19TVEFUVVNfQklUX0ZTTSkgeworCQlwcmludGsoS0VSTl9FUlIKKwkJICAgICAgICJtZTQwMDBfYW9fdGltZXJfc2V0X2Rpdmlzb3IoKTpDYW4ndCBzZXQgdGltZXIgd2hpbGUgREFDIGlzIHJ1bm5pbmdcbiIpOworCQlyZXR1cm4gLUVCVVNZOworCX0KKworCVBERUJVRygibWU0MDAwX2FvX3RpbWVyIHNldF9kaXZpc29yKCk6RGl2aXNvciBmcm9tIHVzZXIgPSAlZFxuIiwKKwkgICAgICAgZGl2aXNvcik7CisKKwkvKiBDaGVjayBpZiB0aGUgZGl2aXNvciBpcyByaWdodC4gTUU0MDAwX0FPX01JTl9USUNLUyBpcyB0aGUgbG93ZXN0ICovCisJaWYgKGRpdmlzb3IgPCBNRTQwMDBfQU9fTUlOX1RJQ0tTKSB7CisJCXByaW50ayhLRVJOX0VSUgorCQkgICAgICAgIk1FNDAwMDptZTQwMDBfYW9fdGltZXIgc2V0X2Rpdmlzb3IoKTpEaXZpc29yIHRvIGxvd1xuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qIEZpeCBidWcgaW4gRmlybXdhcmUgKi8KKwlkaXZpc29yIC09IDI7CisKKwlQREVCVUcoIm1lNDAwMF9hb190aW1lciBzZXRfZGl2aXNvcigpOkRpdmlzb3IgdG8gSFcgPSAlZFxuIiwgZGl2aXNvcik7CisKKwkvKiBXcml0ZSB0aGUgZGl2aXNvciAqLworCW1lNDAwMF9vdXRsKGRpdmlzb3IsIGFvX2NvbnRleHQtPnRpbWVyX3JlZyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtZTQwMDBfYW9fZXhfdHJpZ19zZXRfZWRnZShpbnQgKmFyZywKKwkJCQkgICAgICBtZTQwMDBfYW9fY29udGV4dF90ICogYW9fY29udGV4dCkKK3sKKwlpbnQgbW9kZTsKKwl1MzIgdG1wOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlDQUxMX1BERUJVRygibWU0MDAwX2FvX2V4X3RyaWdfc2V0X2VkZ2UoKSBpcyBleGVjdXRlZFxuIik7CisKKwlpZiAoZ2V0X3VzZXIobW9kZSwgYXJnKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwkvKiBDaGVjayBpZiB0aGUgc3RhdGUgbWFjaGluZSBpcyBzdG9wcGVkICovCisJdG1wID0gbWU0MDAwX2lubChhb19jb250ZXh0LT5zdGF0dXNfcmVnKTsKKwlpZiAodG1wICYgTUU0MDAwX0FPX1NUQVRVU19CSVRfRlNNKSB7CisJCXByaW50ayhLRVJOX0VSUgorCQkgICAgICAgIm1lNDAwMF9hb19leF90cmlnX3NldF9lZGdlKCk6Q2FuJ3Qgc2V0IHRyaWdnZXIgd2hpbGUgREFDIGlzIHJ1bm5pbmdcbiIpOworCQlyZXR1cm4gLUVCVVNZOworCX0KKworCWlmIChtb2RlID09IE1FNDAwMF9BT19UUklHR0VSX0VYVF9FREdFX1JJU0lORykgeworCQlzcGluX2xvY2tfaXJxc2F2ZSgmYW9fY29udGV4dC0+aW50X2xvY2ssIGZsYWdzKTsKKwkJdG1wID0gbWU0MDAwX2lubChhb19jb250ZXh0LT5jdHJsX3JlZyk7CisJCXRtcCAmPQorCQkgICAgfihNRTQwMDBfQU9fQ1RSTF9CSVRfRVhfVFJJR19FREdFIHwKKwkJICAgICAgTUU0MDAwX0FPX0NUUkxfQklUX0VYX1RSSUdfQk9USCk7CisJCW1lNDAwMF9vdXRsKHRtcCwgYW9fY29udGV4dC0+Y3RybF9yZWcpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhb19jb250ZXh0LT5pbnRfbG9jaywgZmxhZ3MpOworCX0gZWxzZSBpZiAobW9kZSA9PSBNRTQwMDBfQU9fVFJJR0dFUl9FWFRfRURHRV9GQUxMSU5HKSB7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZhb19jb250ZXh0LT5pbnRfbG9jaywgZmxhZ3MpOworCQl0bXAgPSBtZTQwMDBfaW5sKGFvX2NvbnRleHQtPmN0cmxfcmVnKTsKKwkJdG1wICY9IH5NRTQwMDBfQU9fQ1RSTF9CSVRfRVhfVFJJR19CT1RIOworCQl0bXAgfD0gTUU0MDAwX0FPX0NUUkxfQklUX0VYX1RSSUdfRURHRTsKKwkJbWU0MDAwX291dGwodG1wLCBhb19jb250ZXh0LT5jdHJsX3JlZyk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFvX2NvbnRleHQtPmludF9sb2NrLCBmbGFncyk7CisJfSBlbHNlIGlmIChtb2RlID09IE1FNDAwMF9BT19UUklHR0VSX0VYVF9FREdFX0JPVEgpIHsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmFvX2NvbnRleHQtPmludF9sb2NrLCBmbGFncyk7CisJCXRtcCA9IG1lNDAwMF9pbmwoYW9fY29udGV4dC0+Y3RybF9yZWcpOworCQl0bXAgfD0KKwkJICAgIE1FNDAwMF9BT19DVFJMX0JJVF9FWF9UUklHX0VER0UgfAorCQkgICAgTUU0MDAwX0FPX0NUUkxfQklUX0VYX1RSSUdfQk9USDsKKwkJbWU0MDAwX291dGwodG1wLCBhb19jb250ZXh0LT5jdHJsX3JlZyk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFvX2NvbnRleHQtPmludF9sb2NrLCBmbGFncyk7CisJfSBlbHNlIHsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCSAgICAgICAibWU0MDAwX2FvX2V4X3RyaWdfc2V0X2VkZ2UoKTpJbnZhbGlkIHRyaWdnZXIgbW9kZVxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG1lNDAwMF9hb19leF90cmlnX2VuYWJsZShtZTQwMDBfYW9fY29udGV4dF90ICogYW9fY29udGV4dCkKK3sKKwl1MzIgdG1wOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlDQUxMX1BERUJVRygibWU0MDAwX2FvX2V4X3RyaWdfZW5hYmxlKCkgaXMgZXhlY3V0ZWRcbiIpOworCisJLyogQ2hlY2sgaWYgdGhlIHN0YXRlIG1hY2hpbmUgaXMgc3RvcHBlZCAqLworCXRtcCA9IG1lNDAwMF9pbmwoYW9fY29udGV4dC0+c3RhdHVzX3JlZyk7CisJaWYgKHRtcCAmIE1FNDAwMF9BT19TVEFUVVNfQklUX0ZTTSkgeworCQlwcmludGsoS0VSTl9FUlIKKwkJICAgICAgICJtZTQwMDBfYW9fZXhfdHJpZ19lbmFibGUoKTpDYW4ndCBlbmFibGUgdHJpZ2dlciB3aGlsZSBEQUMgaXMgcnVubmluZ1xuIik7CisJCXJldHVybiAtRUJVU1k7CisJfQorCisJc3Bpbl9sb2NrX2lycXNhdmUoJmFvX2NvbnRleHQtPmludF9sb2NrLCBmbGFncyk7CisJdG1wID0gbWU0MDAwX2lubChhb19jb250ZXh0LT5jdHJsX3JlZyk7CisJdG1wIHw9IE1FNDAwMF9BT19DVFJMX0JJVF9FTkFCTEVfRVhfVFJJRzsKKwltZTQwMDBfb3V0bCh0bXAsIGFvX2NvbnRleHQtPmN0cmxfcmVnKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhb19jb250ZXh0LT5pbnRfbG9jaywgZmxhZ3MpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbWU0MDAwX2FvX2V4X3RyaWdfZGlzYWJsZShtZTQwMDBfYW9fY29udGV4dF90ICogYW9fY29udGV4dCkKK3sKKwl1MzIgdG1wOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlDQUxMX1BERUJVRygibWU0MDAwX2FvX2V4X3RyaWdfZGlzYWJsZSgpIGlzIGV4ZWN1dGVkXG4iKTsKKworCS8qIENoZWNrIGlmIHRoZSBzdGF0ZSBtYWNoaW5lIGlzIHN0b3BwZWQgKi8KKwl0bXAgPSBtZTQwMDBfaW5sKGFvX2NvbnRleHQtPnN0YXR1c19yZWcpOworCWlmICh0bXAgJiBNRTQwMDBfQU9fU1RBVFVTX0JJVF9GU00pIHsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCSAgICAgICAibWU0MDAwX2FvX2V4X3RyaWdfZGlzYWJsZSgpOkNhbid0IGRpc2FibGUgdHJpZ2dlciB3aGlsZSBEQUMgaXMgcnVubmluZ1xuIik7CisJCXJldHVybiAtRUJVU1k7CisJfQorCisJc3Bpbl9sb2NrX2lycXNhdmUoJmFvX2NvbnRleHQtPmludF9sb2NrLCBmbGFncyk7CisJdG1wID0gbWU0MDAwX2lubChhb19jb250ZXh0LT5jdHJsX3JlZyk7CisJdG1wICY9IH5NRTQwMDBfQU9fQ1RSTF9CSVRfRU5BQkxFX0VYX1RSSUc7CisJbWU0MDAwX291dGwodG1wLCBhb19jb250ZXh0LT5jdHJsX3JlZyk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW9fY29udGV4dC0+aW50X2xvY2ssIGZsYWdzKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG1lNDAwMF9hb19zaW11bHRhbmVvdXNfZGlzYWJsZShtZTQwMDBfYW9fY29udGV4dF90ICogYW9fY29udGV4dCkKK3sKKwl1MzIgdG1wOworCisJQ0FMTF9QREVCVUcoIm1lNDAwMF9hb19zaW11bHRhbmVvdXNfZGlzYWJsZSgpIGlzIGV4ZWN1dGVkXG4iKTsKKworCS8qIENoZWNrIGlmIHRoZSBzdGF0ZSBtYWNoaW5lIGlzIHN0b3BwZWQgKi8KKwkvKiBCZSBjYXJlZnVsIGhlcmUgYmVjYXVzZSB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBmcm9tCisJICAgbWU0MDAwX2FvX3N5bmNocm9ub3VzIGRpc2FibGUgKi8KKwl0bXAgPSBtZTQwMDBfaW5sKGFvX2NvbnRleHQtPnN0YXR1c19yZWcpOworCWlmICh0bXAgJiBNRTQwMDBfQU9fU1RBVFVTX0JJVF9GU00pIHsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCSAgICAgICAibWU0MDAwX2FvX3NpbXVsdGFuZW91c19kaXNhYmxlKCk6Q2FuJ3QgZGlzYWJsZSB3aGlsZSBEQUMgaXMgcnVubmluZ1xuIik7CisJCXJldHVybiAtRUJVU1k7CisJfQorCisJc3Bpbl9sb2NrKCZhb19jb250ZXh0LT5ib2FyZF9pbmZvLT5wcmVsb2FkX2xvY2spOworCXRtcCA9IG1lNDAwMF9pbmwoYW9fY29udGV4dC0+cHJlbG9hZF9yZWcpOworCXRtcCAmPSB+KDB4MSA8PCBhb19jb250ZXh0LT5pbmRleCk7CS8vIERpc2FibGUgcHJlbG9hZCBiaXQKKwl0bXAgJj0gfigweDEgPDwgKGFvX2NvbnRleHQtPmluZGV4ICsgMTYpKTsJLy8gRGlzYWJsZSBodyBzaW11bHRhbmVvdXMgYml0CisJbWU0MDAwX291dGwodG1wLCBhb19jb250ZXh0LT5wcmVsb2FkX3JlZyk7CisJc3Bpbl91bmxvY2soJmFvX2NvbnRleHQtPmJvYXJkX2luZm8tPnByZWxvYWRfbG9jayk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtZTQwMDBfYW9fc2ltdWx0YW5lb3VzX2V4X3RyaWcobWU0MDAwX2FvX2NvbnRleHRfdCAqIGFvX2NvbnRleHQpCit7CisJdTMyIHRtcDsKKworCUNBTExfUERFQlVHKCJtZTQwMDBfYW9fc2ltdWx0YW5lb3VzX2V4X3RyaWcoKSBpcyBleGVjdXRlZFxuIik7CisKKwlzcGluX2xvY2soJmFvX2NvbnRleHQtPmJvYXJkX2luZm8tPnByZWxvYWRfbG9jayk7CisJdG1wID0gbWU0MDAwX2lubChhb19jb250ZXh0LT5wcmVsb2FkX3JlZyk7CisJdG1wIHw9ICgweDEgPDwgYW9fY29udGV4dC0+aW5kZXgpOwkvLyBFbmFibGUgcHJlbG9hZCBiaXQKKwl0bXAgfD0gKDB4MSA8PCAoYW9fY29udGV4dC0+aW5kZXggKyAxNikpOwkvLyBFbmFibGUgaHcgc2ltdWx0YW5lb3VzIGJpdAorCW1lNDAwMF9vdXRsKHRtcCwgYW9fY29udGV4dC0+cHJlbG9hZF9yZWcpOworCXNwaW5fdW5sb2NrKCZhb19jb250ZXh0LT5ib2FyZF9pbmZvLT5wcmVsb2FkX2xvY2spOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbWU0MDAwX2FvX3NpbXVsdGFuZW91c19zdyhtZTQwMDBfYW9fY29udGV4dF90ICogYW9fY29udGV4dCkKK3sKKwl1MzIgdG1wOworCisJQ0FMTF9QREVCVUcoIm1lNDAwMF9hb19zaW11bHRhbmVvdXNfc3coKSBpcyBleGVjdXRlZFxuIik7CisKKwlzcGluX2xvY2soJmFvX2NvbnRleHQtPmJvYXJkX2luZm8tPnByZWxvYWRfbG9jayk7CisJdG1wID0gbWU0MDAwX2lubChhb19jb250ZXh0LT5wcmVsb2FkX3JlZyk7CisJdG1wIHw9ICgweDEgPDwgYW9fY29udGV4dC0+aW5kZXgpOwkvLyBFbmFibGUgcHJlbG9hZCBiaXQKKwl0bXAgJj0gfigweDEgPDwgKGFvX2NvbnRleHQtPmluZGV4ICsgMTYpKTsJLy8gRGlzYWJsZSBodyBzaW11bHRhbmVvdXMgYml0CisJbWU0MDAwX291dGwodG1wLCBhb19jb250ZXh0LT5wcmVsb2FkX3JlZyk7CisJc3Bpbl91bmxvY2soJmFvX2NvbnRleHQtPmJvYXJkX2luZm8tPnByZWxvYWRfbG9jayk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtZTQwMDBfYW9fcHJlbG9hZChtZTQwMDBfYW9fY29udGV4dF90ICogYW9fY29udGV4dCkKK3sKKwlDQUxMX1BERUJVRygibWU0MDAwX2FvX3ByZWxvYWQoKSBpcyBleGVjdXRlZFxuIik7CisJcmV0dXJuIG1lNDAwMF9hb19zaW11bHRhbmVvdXNfc3coYW9fY29udGV4dCk7Cit9CisKK3N0YXRpYyBpbnQgbWU0MDAwX2FvX3ByZWxvYWRfdXBkYXRlKG1lNDAwMF9hb19jb250ZXh0X3QgKiBhb19jb250ZXh0KQoreworCXUzMiB0bXA7CisJdTMyIGN0cmw7CisJc3RydWN0IGxpc3RfaGVhZCAqZW50cnk7CisKKwlDQUxMX1BERUJVRygibWU0MDAwX2FvX3ByZWxvYWRfdXBkYXRlKCkgaXMgZXhlY3V0ZWRcbiIpOworCisJc3Bpbl9sb2NrKCZhb19jb250ZXh0LT5ib2FyZF9pbmZvLT5wcmVsb2FkX2xvY2spOworCXRtcCA9IG1lNDAwMF9pbmwoYW9fY29udGV4dC0+cHJlbG9hZF9yZWcpOworCWxpc3RfZm9yX2VhY2goZW50cnksICZhb19jb250ZXh0LT5ib2FyZF9pbmZvLT5hb19jb250ZXh0X2xpc3QpIHsKKwkJLyogVGhlIGNoYW5uZWxzIHdlIHVwZGF0ZSBtdXN0IGJlIGluIHRoZSBmb2xsb3dpbmcgc3RhdGUgOgorCQkgICAtIE1vZGUgQQorCQkgICAtIEhhcmR3YXJlIHRyaWdnZXIgaXMgZGlzYWJsZWQKKwkJICAgLSBDb3JyZXNwb25kaW5nIHNpbXVsdGFuZW91cyBiaXQgaXMgcmVzZXQKKwkJICovCisJCWN0cmwgPSBtZTQwMDBfaW5sKGFvX2NvbnRleHQtPmN0cmxfcmVnKTsKKwkJaWYgKCEKKwkJICAgIChjdHJsICYKKwkJICAgICAoTUU0MDAwX0FPX0NUUkxfQklUX01PREVfMCB8IE1FNDAwMF9BT19DVFJMX0JJVF9NT0RFXzEgfAorCQkgICAgICBNRTQwMDBfQU9fQ1RSTF9CSVRfRU5BQkxFX0VYX1RSSUcpKSkgeworCQkJaWYgKCEKKwkJCSAgICAodG1wICYKKwkJCSAgICAgKDB4MSA8PAorCQkJICAgICAgKCgobWU0MDAwX2FvX2NvbnRleHRfdCAqKSBlbnRyeSktPmluZGV4ICsgMTYpKSkpIHsKKwkJCQl0bXAgJj0KKwkJCQkgICAgfigweDEgPDwKKwkJCQkgICAgICAoKChtZTQwMDBfYW9fY29udGV4dF90ICopIGVudHJ5KS0+aW5kZXgpKTsKKwkJCX0KKwkJfQorCX0KKwltZTQwMDBfb3V0bCh0bXAsIGFvX2NvbnRleHQtPnByZWxvYWRfcmVnKTsKKwlzcGluX3VubG9jaygmYW9fY29udGV4dC0+Ym9hcmRfaW5mby0+cHJlbG9hZF9sb2NrKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG1lNDAwMF9hb19zaW11bHRhbmVvdXNfdXBkYXRlKG1lNDAwMF9hb19jaGFubmVsX2xpc3RfdCAqIGFyZywKKwkJCQkJIG1lNDAwMF9hb19jb250ZXh0X3QgKiBhb19jb250ZXh0KQoreworCWludCBlcnI7CisJaW50IGk7CisJdTMyIHRtcDsKKwltZTQwMDBfYW9fY2hhbm5lbF9saXN0X3QgY2hhbm5lbHM7CisKKwlDQUxMX1BERUJVRygibWU0MDAwX2FvX3NpbXVsdGFuZW91c191cGRhdGUoKSBpcyBleGVjdXRlZFxuIik7CisKKwkvKiBDb3B5IGRhdGEgZnJvbSB1c2VyICovCisJZXJyID0gY29weV9mcm9tX3VzZXIoJmNoYW5uZWxzLCBhcmcsIHNpemVvZihtZTQwMDBfYW9fY2hhbm5lbF9saXN0X3QpKTsKKwlpZiAoZXJyKSB7CisJCXByaW50ayhLRVJOX0VSUgorCQkgICAgICAgIk1FNDAwMDptZTQwMDBfYW9fc2ltdWx0YW5lb3VzX3VwZGF0ZSgpOkNhbid0IGNvcHkgY29tbWFuZFxuIik7CisJCXJldHVybiAtRUZBVUxUOworCX0KKworCWNoYW5uZWxzLmxpc3QgPQorCSAgICBrbWFsbG9jKHNpemVvZih1bnNpZ25lZCBsb25nKSAqIGNoYW5uZWxzLmNvdW50LCBHRlBfS0VSTkVMKTsKKwlpZiAoIWNoYW5uZWxzLmxpc3QpIHsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCSAgICAgICAiTUU0MDAwOm1lNDAwMF9hb19zaW11bHRhbmVvdXNfdXBkYXRlKCk6Q2FuJ3QgZ2V0IGJ1ZmZlclxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwltZW1zZXQoY2hhbm5lbHMubGlzdCwgMCwgc2l6ZW9mKHVuc2lnbmVkIGxvbmcpICogY2hhbm5lbHMuY291bnQpOworCisJLyogQ29weSBjaGFubmVsIGxpc3QgZnJvbSB1c2VyICovCisJZXJyID0KKwkgICAgY29weV9mcm9tX3VzZXIoY2hhbm5lbHMubGlzdCwgYXJnLT5saXN0LAorCQkJICAgc2l6ZW9mKHVuc2lnbmVkIGxvbmcpICogY2hhbm5lbHMuY291bnQpOworCWlmIChlcnIpIHsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCSAgICAgICAiTUU0MDAwOm1lNDAwMF9hb19zaW11bHRhbmVvdXNfdXBkYXRlKCk6Q2FuJ3QgY29weSBsaXN0XG4iKTsKKwkJa2ZyZWUoY2hhbm5lbHMubGlzdCk7CisJCXJldHVybiAtRUZBVUxUOworCX0KKworCXNwaW5fbG9jaygmYW9fY29udGV4dC0+Ym9hcmRfaW5mby0+cHJlbG9hZF9sb2NrKTsKKwl0bXAgPSBtZTQwMDBfaW5sKGFvX2NvbnRleHQtPnByZWxvYWRfcmVnKTsKKwlmb3IgKGkgPSAwOyBpIDwgY2hhbm5lbHMuY291bnQ7IGkrKykgeworCQlpZiAoY2hhbm5lbHMubGlzdFtpXSA+CisJCSAgICBhb19jb250ZXh0LT5ib2FyZF9pbmZvLT5ib2FyZF9wLT5hby5jb3VudCkgeworCQkJc3Bpbl91bmxvY2soJmFvX2NvbnRleHQtPmJvYXJkX2luZm8tPnByZWxvYWRfbG9jayk7CisJCQlrZnJlZShjaGFubmVscy5saXN0KTsKKwkJCXByaW50ayhLRVJOX0VSUgorCQkJICAgICAgICJNRTQwMDA6bWU0MDAwX2FvX3NpbXVsdGFuZW91c191cGRhdGUoKTpJbnZhbGlkIGJvYXJkIG51bWJlciBzcGVjaWZpZWRcbiIpOworCQkJcmV0dXJuIC1FRkFVTFQ7CisJCX0KKwkJdG1wICY9IH4oMHgxIDw8IGNoYW5uZWxzLmxpc3RbaV0pOwkvLyBDbGVhciB0aGUgcHJlbG9hZCBiaXQKKwkJdG1wICY9IH4oMHgxIDw8IChjaGFubmVscy5saXN0W2ldICsgMTYpKTsJLy8gQ2xlYXIgdGhlIGh3IHNpbXVsdGFuZW91cyBiaXQKKwl9CisJbWU0MDAwX291dGwodG1wLCBhb19jb250ZXh0LT5wcmVsb2FkX3JlZyk7CisJc3Bpbl91bmxvY2soJmFvX2NvbnRleHQtPmJvYXJkX2luZm8tPnByZWxvYWRfbG9jayk7CisJa2ZyZWUoY2hhbm5lbHMubGlzdCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtZTQwMDBfYW9fc3luY2hyb25vdXNfZXhfdHJpZyhtZTQwMDBfYW9fY29udGV4dF90ICogYW9fY29udGV4dCkKK3sKKwl1MzIgdG1wOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlDQUxMX1BERUJVRygibWU0MDAwX2FvX3N5bmNocm9ub3VzX2V4X3RyaWcoKSBpcyBleGVjdXRlZFxuIik7CisKKwkvKiBDaGVjayBpZiB0aGUgc3RhdGUgbWFjaGluZSBpcyBzdG9wcGVkICovCisJdG1wID0gbWU0MDAwX2lubChhb19jb250ZXh0LT5zdGF0dXNfcmVnKTsKKwlpZiAodG1wICYgTUU0MDAwX0FPX1NUQVRVU19CSVRfRlNNKSB7CisJCXByaW50ayhLRVJOX0VSUgorCQkgICAgICAgIm1lNDAwMF9hb19zeW5jaHJvbm91c19leF90cmlnKCk6IERBQyBpcyBydW5uaW5nXG4iKTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisKKwlzcGluX2xvY2soJmFvX2NvbnRleHQtPmJvYXJkX2luZm8tPnByZWxvYWRfbG9jayk7CisJdG1wID0gbWU0MDAwX2lubChhb19jb250ZXh0LT5wcmVsb2FkX3JlZyk7CisJdG1wICY9IH4oMHgxIDw8IGFvX2NvbnRleHQtPmluZGV4KTsJLy8gRGlzYWJsZSBzeW5jaHJvbm91cyBzdyBiaXQKKwl0bXAgfD0gMHgxIDw8IChhb19jb250ZXh0LT5pbmRleCArIDE2KTsJLy8gRW5hYmxlIHN5bmNocm9ub3VzIGh3IGJpdAorCW1lNDAwMF9vdXRsKHRtcCwgYW9fY29udGV4dC0+cHJlbG9hZF9yZWcpOworCXNwaW5fdW5sb2NrKCZhb19jb250ZXh0LT5ib2FyZF9pbmZvLT5wcmVsb2FkX2xvY2spOworCisJLyogTWFrZSBydW5uYWJsZSAqLworCXNwaW5fbG9ja19pcnFzYXZlKCZhb19jb250ZXh0LT5pbnRfbG9jaywgZmxhZ3MpOworCXRtcCA9IG1lNDAwMF9pbmwoYW9fY29udGV4dC0+Y3RybF9yZWcpOworCWlmICh0bXAgJiAoTUU0MDAwX0FPX0NUUkxfQklUX01PREVfMCB8IE1FNDAwMF9BT19DVFJMX0JJVF9NT0RFXzEpKSB7CisJCXRtcCAmPQorCQkgICAgfihNRTQwMDBfQU9fQ1RSTF9CSVRfU1RPUCB8CisJCSAgICAgIE1FNDAwMF9BT19DVFJMX0JJVF9JTU1FRElBVEVfU1RPUCk7CisJCW1lNDAwMF9vdXRsKHRtcCwgYW9fY29udGV4dC0+Y3RybF9yZWcpOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhb19jb250ZXh0LT5pbnRfbG9jaywgZmxhZ3MpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbWU0MDAwX2FvX3N5bmNocm9ub3VzX3N3KG1lNDAwMF9hb19jb250ZXh0X3QgKiBhb19jb250ZXh0KQoreworCXUzMiB0bXA7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCUNBTExfUERFQlVHKCJtZTQwMDBfYW9fc3luY2hyb25vdXNfc3coKSBpcyBleGVjdXRlZFxuIik7CisKKwkvKiBDaGVjayBpZiB0aGUgc3RhdGUgbWFjaGluZSBpcyBzdG9wcGVkICovCisJdG1wID0gbWU0MDAwX2lubChhb19jb250ZXh0LT5zdGF0dXNfcmVnKTsKKwlpZiAodG1wICYgTUU0MDAwX0FPX1NUQVRVU19CSVRfRlNNKSB7CisJCXByaW50ayhLRVJOX0VSUiAibWU0MDAwX2FvX3N5bmNocm9ub3VzX3N3KCk6IERBQyBpcyBydW5uaW5nXG4iKTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisKKwlzcGluX2xvY2soJmFvX2NvbnRleHQtPmJvYXJkX2luZm8tPnByZWxvYWRfbG9jayk7CisJdG1wID0gbWU0MDAwX2lubChhb19jb250ZXh0LT5wcmVsb2FkX3JlZyk7CisJdG1wIHw9IDB4MSA8PCBhb19jb250ZXh0LT5pbmRleDsJLy8gRW5hYmxlIHN5bmNocm9ub3VzIHN3IGJpdAorCXRtcCAmPSB+KDB4MSA8PCAoYW9fY29udGV4dC0+aW5kZXggKyAxNikpOwkvLyBEaXNhYmxlIHN5bmNocm9ub3VzIGh3IGJpdAorCW1lNDAwMF9vdXRsKHRtcCwgYW9fY29udGV4dC0+cHJlbG9hZF9yZWcpOworCXNwaW5fdW5sb2NrKCZhb19jb250ZXh0LT5ib2FyZF9pbmZvLT5wcmVsb2FkX2xvY2spOworCisJLyogTWFrZSBydW5uYWJsZSAqLworCXNwaW5fbG9ja19pcnFzYXZlKCZhb19jb250ZXh0LT5pbnRfbG9jaywgZmxhZ3MpOworCXRtcCA9IG1lNDAwMF9pbmwoYW9fY29udGV4dC0+Y3RybF9yZWcpOworCWlmICh0bXAgJiAoTUU0MDAwX0FPX0NUUkxfQklUX01PREVfMCB8IE1FNDAwMF9BT19DVFJMX0JJVF9NT0RFXzEpKSB7CisJCXRtcCAmPQorCQkgICAgfihNRTQwMDBfQU9fQ1RSTF9CSVRfU1RPUCB8CisJCSAgICAgIE1FNDAwMF9BT19DVFJMX0JJVF9JTU1FRElBVEVfU1RPUCk7CisJCW1lNDAwMF9vdXRsKHRtcCwgYW9fY29udGV4dC0+Y3RybF9yZWcpOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhb19jb250ZXh0LT5pbnRfbG9jaywgZmxhZ3MpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbWU0MDAwX2FvX3N5bmNocm9ub3VzX2Rpc2FibGUobWU0MDAwX2FvX2NvbnRleHRfdCAqIGFvX2NvbnRleHQpCit7CisJcmV0dXJuIG1lNDAwMF9hb19zaW11bHRhbmVvdXNfZGlzYWJsZShhb19jb250ZXh0KTsKK30KKworc3RhdGljIGludCBtZTQwMDBfYW9fZ2V0X2ZyZWVfYnVmZmVyKHVuc2lnbmVkIGxvbmcgKmFyZywKKwkJCQkgICAgIG1lNDAwMF9hb19jb250ZXh0X3QgKiBhb19jb250ZXh0KQoreworCXVuc2lnbmVkIGxvbmcgYzsKKwlpbnQgZXJyOworCisJYyA9IG1lNDAwMF9idWZfc3BhY2UoYW9fY29udGV4dC0+Y2lyY19idWYsIE1FNDAwMF9BT19CVUZGRVJfQ09VTlQpOworCisJZXJyID0gY29weV90b191c2VyKGFyZywgJmMsIHNpemVvZih1bnNpZ25lZCBsb25nKSk7CisJaWYgKGVycikgeworCQlwcmludGsoS0VSTl9FUlIKKwkJICAgICAgICJNRTQwMDA6bWU0MDAwX2FvX2dldF9mcmVlX2J1ZmZlcigpOkNhbid0IGNvcHkgdG8gdXNlciBzcGFjZVxuIik7CisJCXJldHVybiAtRUZBVUxUOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG1lNDAwMF9hb19leF90cmlnX3RpbWVvdXQodW5zaWduZWQgbG9uZyAqYXJnLAorCQkJCSAgICAgbWU0MDAwX2FvX2NvbnRleHRfdCAqIGFvX2NvbnRleHQpCit7CisJdTMyIHRtcDsKKwl3YWl0X3F1ZXVlX2hlYWRfdCBxdWV1ZTsKKwl1bnNpZ25lZCBsb25nIHJlZjsKKwl1bnNpZ25lZCBsb25nIHRpbWVvdXQ7CisKKwlDQUxMX1BERUJVRygibWU0MDAwX2FvX2V4X3RyaWdfdGltZW91dCgpIGlzIGV4ZWN1dGVkXG4iKTsKKworCWlmIChnZXRfdXNlcih0aW1lb3V0LCBhcmcpKSB7CisJCXByaW50ayhLRVJOX0VSUgorCQkgICAgICAgIm1lNDAwMF9hb19leF90cmlnX3RpbWVvdXQoKTpDYW5ub3QgY29weSBkYXRhIGZyb20gdXNlclxuIik7CisJCXJldHVybiAtRUZBVUxUOworCX0KKworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnF1ZXVlKTsKKworCXRtcCA9IGlubChhb19jb250ZXh0LT5jdHJsX3JlZyk7CisKKwlpZiAoKHRtcCAmIE1FNDAwMF9BT19DVFJMX0JJVF9FTkFCTEVfRVhfVFJJRykpIHsKKwkJaWYgKHRpbWVvdXQpIHsKKwkJCXJlZiA9IGppZmZpZXM7CisJCQl3aGlsZSAoKGlubChhb19jb250ZXh0LT5zdGF0dXNfcmVnKSAmCisJCQkJTUU0MDAwX0FPX1NUQVRVU19CSVRfRlNNKSkgeworCQkJCWludGVycnVwdGlibGVfc2xlZXBfb25fdGltZW91dCgmcXVldWUsIDEpOworCQkJCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkgeworCQkJCQlwcmludGsoS0VSTl9FUlIKKwkJCQkJICAgICAgICJNRTQwMDA6bWU0MDAwX2FvX2V4X3RyaWdfdGltZW91dCgpOldhaXQgb24gc3RhcnQgb2Ygc3RhdGUgbWFjaGluZSBpbnRlcnJ1cHRlZFxuIik7CisJCQkJCXJldHVybiAtRUlOVFI7CisJCQkJfQorCQkJCWlmICgoKGppZmZpZXMgLSByZWYpID4gKHRpbWVvdXQgKiBIWiAvIFVTRVJfSFopKSkgewkvLyAyLjYgaGFzIGRpZmZyZW50IGRlZmluaXRpb25zIGZvciBIWiBpbiB1c2VyIGFuZCBrZXJuZWwgc3BhY2UKKwkJCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkJCSAgICAgICAiTUU0MDAwOm1lNDAwMF9hb19leF90cmlnX3RpbWVvdXQoKTpUaW1lb3V0IHJlYWNoZWRcbiIpOworCQkJCQlyZXR1cm4gLUVJTzsKKwkJCQl9CisJCQl9CisJCX0gZWxzZSB7CisJCQl3aGlsZSAoKGlubChhb19jb250ZXh0LT5zdGF0dXNfcmVnKSAmCisJCQkJTUU0MDAwX0FPX1NUQVRVU19CSVRfRlNNKSkgeworCQkJCWludGVycnVwdGlibGVfc2xlZXBfb25fdGltZW91dCgmcXVldWUsIDEpOworCQkJCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkgeworCQkJCQlwcmludGsoS0VSTl9FUlIKKwkJCQkJICAgICAgICJNRTQwMDA6bWU0MDAwX2FvX2V4X3RyaWdfdGltZW91dCgpOldhaXQgb24gc3RhcnQgb2Ygc3RhdGUgbWFjaGluZSBpbnRlcnJ1cHRlZFxuIik7CisJCQkJCXJldHVybiAtRUlOVFI7CisJCQkJfQorCQkJfQorCQl9CisJfSBlbHNlIHsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCSAgICAgICAiTUU0MDAwOm1lNDAwMF9hb19leF90cmlnX3RpbWVvdXQoKTpFeHRlcm5hbCBUcmlnZ2VyIGlzIG5vdCBlbmFibGVkXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbWU0MDAwX2FvX2VuYWJsZV9kbyhtZTQwMDBfYW9fY29udGV4dF90ICogYW9fY29udGV4dCkKK3sKKwl1MzIgdG1wOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlDQUxMX1BERUJVRygibWU0MDAwX2FvX2VuYWJsZV9kbygpIGlzIGV4ZWN1dGVkXG4iKTsKKworCS8qIE9ubHkgYXZhaWxhYmxlIGZvciBhbmFsb2cgb3V0cHV0IDMgKi8KKwlpZiAoYW9fY29udGV4dC0+aW5kZXggIT0gMykgeworCQlwcmludGsoS0VSTl9FUlIKKwkJICAgICAgICJtZTQwMDBfYW9fZW5hYmxlX2RvKCk6T25seSBhdmFpbGFibGUgZm9yIGFuYWxvZyBvdXRwdXQgM1xuIik7CisJCXJldHVybiAtRU5PVFRZOworCX0KKworCS8qIENoZWNrIGlmIHRoZSBzdGF0ZSBtYWNoaW5lIGlzIHN0b3BwZWQgKi8KKwl0bXAgPSBtZTQwMDBfaW5sKGFvX2NvbnRleHQtPnN0YXR1c19yZWcpOworCWlmICh0bXAgJiBNRTQwMDBfQU9fU1RBVFVTX0JJVF9GU00pIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJtZTQwMDBfYW9fZW5hYmxlX2RvKCk6IERBQyBpcyBydW5uaW5nXG4iKTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisKKwkvKiBTZXQgdGhlIHN0b3AgYml0ICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJmFvX2NvbnRleHQtPmludF9sb2NrLCBmbGFncyk7CisJdG1wID0gaW5sKGFvX2NvbnRleHQtPmN0cmxfcmVnKTsKKwl0bXAgfD0gTUU0MDAwX0FPX0NUUkxfQklUX0VOQUJMRV9ETzsKKwltZTQwMDBfb3V0bCh0bXAsIGFvX2NvbnRleHQtPmN0cmxfcmVnKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhb19jb250ZXh0LT5pbnRfbG9jaywgZmxhZ3MpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbWU0MDAwX2FvX2Rpc2FibGVfZG8obWU0MDAwX2FvX2NvbnRleHRfdCAqIGFvX2NvbnRleHQpCit7CisJdTMyIHRtcDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJQ0FMTF9QREVCVUcoIm1lNDAwMF9hb19kaXNhYmxlX2RvKCkgaXMgZXhlY3V0ZWRcbiIpOworCisJLyogT25seSBhdmFpbGFibGUgZm9yIGFuYWxvZyBvdXRwdXQgMyAqLworCWlmIChhb19jb250ZXh0LT5pbmRleCAhPSAzKSB7CisJCXByaW50ayhLRVJOX0VSUgorCQkgICAgICAgIm1lNDAwMF9hb19kaXNhYmxlKCk6T25seSBhdmFpbGFibGUgZm9yIGFuYWxvZyBvdXRwdXQgM1xuIik7CisJCXJldHVybiAtRU5PVFRZOworCX0KKworCS8qIENoZWNrIGlmIHRoZSBzdGF0ZSBtYWNoaW5lIGlzIHN0b3BwZWQgKi8KKwl0bXAgPSBtZTQwMDBfaW5sKGFvX2NvbnRleHQtPnN0YXR1c19yZWcpOworCWlmICh0bXAgJiBNRTQwMDBfQU9fU1RBVFVTX0JJVF9GU00pIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJtZTQwMDBfYW9fZGlzYWJsZV9kbygpOiBEQUMgaXMgcnVubmluZ1xuIik7CisJCXJldHVybiAtRUJVU1k7CisJfQorCisJc3Bpbl9sb2NrX2lycXNhdmUoJmFvX2NvbnRleHQtPmludF9sb2NrLCBmbGFncyk7CisJdG1wID0gaW5sKGFvX2NvbnRleHQtPmN0cmxfcmVnKTsKKwl0bXAgJj0gfihNRTQwMDBfQU9fQ1RSTF9CSVRfRU5BQkxFX0RPKTsKKwltZTQwMDBfb3V0bCh0bXAsIGFvX2NvbnRleHQtPmN0cmxfcmVnKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhb19jb250ZXh0LT5pbnRfbG9jaywgZmxhZ3MpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbWU0MDAwX2FvX2ZzbV9zdGF0ZShpbnQgKmFyZywgbWU0MDAwX2FvX2NvbnRleHRfdCAqIGFvX2NvbnRleHQpCit7CisJdW5zaWduZWQgbG9uZyB0bXA7CisKKwlDQUxMX1BERUJVRygibWU0MDAwX2FvX2ZzbV9zdGF0ZSgpIGlzIGV4ZWN1dGVkXG4iKTsKKworCXRtcCA9CisJICAgIChtZTQwMDBfaW5sKGFvX2NvbnRleHQtPnN0YXR1c19yZWcpICYgTUU0MDAwX0FPX1NUQVRVU19CSVRfRlNNKSA/IDEKKwkgICAgOiAwOworCisJaWYgKGFvX2NvbnRleHQtPnBpcGVfZmxhZykgeworCQlwcmludGsoS0VSTl9FUlIgIm1lNDAwMF9hb19mc21fc3RhdGUoKTpCcm9rZW4gcGlwZSBkZXRlY3RlZFxuIik7CisJCXJldHVybiAtRVBJUEU7CisJfQorCisJaWYgKHB1dF91c2VyKHRtcCwgYXJnKSkgeworCQlwcmludGsoS0VSTl9FUlIgIm1lNDAwMF9hb19mc21fc3RhdGUoKTpDYW5ub3QgY29weSB0byB1c2VyXG4iKTsKKwkJcmV0dXJuIC1FRkFVTFQ7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBBbmFsb2cgaW5wdXQgc3R1ZmYgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW50IG1lNDAwMF9haV9wcmVwYXJlKG1lNDAwMF9haV9jb250ZXh0X3QgKiBhaV9jb250ZXh0KQoreworCXdhaXRfcXVldWVfaGVhZF90IHF1ZXVlOworCWludCBlcnI7CisKKwlDQUxMX1BERUJVRygibWU0MDAwX2FpX3ByZXBhcmUoKSBpcyBleGVjdXRlZFxuIik7CisKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZxdWV1ZSk7CisKKwkvKiBTZXQgdGhlIG5ldyBtb2RlIGFuZCBzdG9wIGJpdHMgKi8KKwltZTQwMDBfb3V0bChhaV9jb250ZXh0LT4KKwkJICAgIG1vZGUgfCBNRTQwMDBfQUlfQ1RSTF9CSVRfU1RPUCB8CisJCSAgICBNRTQwMDBfQUlfQ1RSTF9CSVRfSU1NRURJQVRFX1NUT1AsIGFpX2NvbnRleHQtPmN0cmxfcmVnKTsKKworCS8qIFNldCB0aGUgdGltZXIgcmVnaXN0ZXJzICovCisJYWlfY29udGV4dC0+Y2hhbl90aW1lciA9IDY2OworCWFpX2NvbnRleHQtPmNoYW5fcHJlX3RpbWVyID0gNjY7CisJYWlfY29udGV4dC0+c2Nhbl90aW1lcl9sb3cgPSAwOworCWFpX2NvbnRleHQtPnNjYW5fdGltZXJfaGlnaCA9IDA7CisKKwltZTQwMDBfb3V0bCg2NSwgYWlfY29udGV4dC0+Y2hhbl90aW1lcl9yZWcpOworCW1lNDAwMF9vdXRsKDY1LCBhaV9jb250ZXh0LT5jaGFuX3ByZV90aW1lcl9yZWcpOworCW1lNDAwMF9vdXRsKDAsIGFpX2NvbnRleHQtPnNjYW5fdGltZXJfbG93X3JlZyk7CisJbWU0MDAwX291dGwoMCwgYWlfY29udGV4dC0+c2Nhbl90aW1lcl9oaWdoX3JlZyk7CisJbWU0MDAwX291dGwoMCwgYWlfY29udGV4dC0+c2Nhbl9wcmVfdGltZXJfbG93X3JlZyk7CisJbWU0MDAwX291dGwoMCwgYWlfY29udGV4dC0+c2Nhbl9wcmVfdGltZXJfaGlnaF9yZWcpOworCisJYWlfY29udGV4dC0+Y2hhbm5lbF9saXN0X2NvdW50ID0gMDsKKworCWlmIChhaV9jb250ZXh0LT5tb2RlKSB7CisJCS8qIFJlcXVlc3QgdGhlIGludGVycnVwdCBsaW5lICovCisJCWVyciA9CisJCSAgICByZXF1ZXN0X2lycShhaV9jb250ZXh0LT5pcnEsIG1lNDAwMF9haV9pc3IsCisJCQkJSVJRRl9ESVNBQkxFRCB8IElSUUZfU0hBUkVELCBNRTQwMDBfTkFNRSwKKwkJCQlhaV9jb250ZXh0KTsKKwkJaWYgKGVycikgeworCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkgICAgICAgIk1FNDAwMDptZTQwMDBfYWlfcHJlcGFyZSgpOkNhbid0IGdldCBpbnRlcnJ1cHQgbGluZSIpOworCQkJcmV0dXJuIC1FTk9ERVY7CisJCX0KKworCQkvKiBBbGxvY2F0ZSBjaXJjdWxhciBidWZmZXIgKi8KKwkJYWlfY29udGV4dC0+Y2lyY19idWYuYnVmID0KKwkJICAgIGttYWxsb2MoTUU0MDAwX0FJX0JVRkZFUl9TSVpFLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCFhaV9jb250ZXh0LT5jaXJjX2J1Zi5idWYpIHsKKwkJCXByaW50ayhLRVJOX0VSUgorCQkJICAgICAgICJNRTQwMDA6bWU0MDAwX2FpX3ByZXBhcmUoKTpDYW4ndCBnZXQgY2lyY3VsYXIgYnVmZmVyXG4iKTsKKwkJCWZyZWVfaXJxKGFpX2NvbnRleHQtPmlycSwgYWlfY29udGV4dCk7CisJCQlyZXR1cm4gLUVOT01FTTsKKwkJfQorCQltZW1zZXQoYWlfY29udGV4dC0+Y2lyY19idWYuYnVmLCAwLCBNRTQwMDBfQUlfQlVGRkVSX1NJWkUpOworCisJCS8qIENsZWFyIHRoZSBjaXJjdWxhciBidWZmZXIgKi8KKwkJYWlfY29udGV4dC0+Y2lyY19idWYuaGVhZCA9IDA7CisJCWFpX2NvbnRleHQtPmNpcmNfYnVmLnRhaWwgPSAwOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG1lNDAwMF9haV9yZXNldChtZTQwMDBfYWlfY29udGV4dF90ICogYWlfY29udGV4dCkKK3sKKwl3YWl0X3F1ZXVlX2hlYWRfdCBxdWV1ZTsKKwl1MzIgdG1wOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlDQUxMX1BERUJVRygibWU0MDAwX2FpX3Jlc2V0KCkgaXMgZXhlY3V0ZWRcbiIpOworCisJaW5pdF93YWl0cXVldWVfaGVhZCgmcXVldWUpOworCisJLyoKKwkgKiBGaXJzdCBzdG9wIGNvbnZlcnNpb24gb2YgdGhlIHN0YXRlIG1hY2hpbmUgYmVmb3JlIHJlY29uZmlndXJlLgorCSAqIElmIG5vdCBzdG9wcGVkIGJlZm9yZSBjb25maWd1cmluZyBtb2RlLCBpdCBjb3VsZAorCSAqIHdhbGsgaW4gYSB1bmRlZmluZWQgc3RhdGUuCisJICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJmFpX2NvbnRleHQtPmludF9sb2NrLCBmbGFncyk7CisJdG1wID0gbWU0MDAwX2lubChhaV9jb250ZXh0LT5jdHJsX3JlZyk7CisJdG1wIHw9IE1FNDAwMF9BSV9DVFJMX0JJVF9JTU1FRElBVEVfU1RPUDsKKwltZTQwMDBfb3V0bCh0bXAsIGFpX2NvbnRleHQtPmN0cmxfcmVnKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhaV9jb250ZXh0LT5pbnRfbG9jaywgZmxhZ3MpOworCisJd2hpbGUgKGlubChhaV9jb250ZXh0LT5zdGF0dXNfcmVnKSAmIE1FNDAwMF9BSV9TVEFUVVNfQklUX0ZTTSkgeworCQlpbnRlcnJ1cHRpYmxlX3NsZWVwX29uX3RpbWVvdXQoJnF1ZXVlLCAxKTsKKwkJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSB7CisJCQlwcmludGsoS0VSTl9FUlIKKwkJCSAgICAgICAibWU0MDAwX2FpX3Jlc2V0KCk6V2FpdCBvbiBzdGF0ZSBtYWNoaW5lIGFmdGVyIHN0b3AgaW50ZXJydXB0ZWRcbiIpOworCQkJcmV0dXJuIC1FSU5UUjsKKwkJfQorCX0KKworCS8qIENsZWFyIHRoZSBjb250cm9sIHJlZ2lzdGVyIGFuZCBzZXQgdGhlIHN0b3AgYml0cyAqLworCXNwaW5fbG9ja19pcnFzYXZlKCZhaV9jb250ZXh0LT5pbnRfbG9jaywgZmxhZ3MpOworCXRtcCA9IG1lNDAwMF9pbmwoYWlfY29udGV4dC0+Y3RybF9yZWcpOworCW1lNDAwMF9vdXRsKE1FNDAwMF9BSV9DVFJMX0JJVF9JTU1FRElBVEVfU1RPUCB8IE1FNDAwMF9BSV9DVFJMX0JJVF9TVE9QLAorCQkgICAgYWlfY29udGV4dC0+Y3RybF9yZWcpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFpX2NvbnRleHQtPmludF9sb2NrLCBmbGFncyk7CisKKwkvKiBSZXNldCB0aW1lciByZWdpc3RlcnMgKi8KKwlhaV9jb250ZXh0LT5jaGFuX3RpbWVyID0gNjY7CisJYWlfY29udGV4dC0+Y2hhbl9wcmVfdGltZXIgPSA2NjsKKwlhaV9jb250ZXh0LT5zY2FuX3RpbWVyX2xvdyA9IDA7CisJYWlfY29udGV4dC0+c2Nhbl90aW1lcl9oaWdoID0gMDsKKwlhaV9jb250ZXh0LT5zYW1wbGVfY291bnRlciA9IDA7CisJYWlfY29udGV4dC0+c2FtcGxlX2NvdW50ZXJfcmVsb2FkID0gMDsKKworCW1lNDAwMF9vdXRsKDY1LCBhaV9jb250ZXh0LT5jaGFuX3RpbWVyX3JlZyk7CisJbWU0MDAwX291dGwoNjUsIGFpX2NvbnRleHQtPmNoYW5fcHJlX3RpbWVyX3JlZyk7CisJbWU0MDAwX291dGwoMCwgYWlfY29udGV4dC0+c2Nhbl90aW1lcl9sb3dfcmVnKTsKKwltZTQwMDBfb3V0bCgwLCBhaV9jb250ZXh0LT5zY2FuX3RpbWVyX2hpZ2hfcmVnKTsKKwltZTQwMDBfb3V0bCgwLCBhaV9jb250ZXh0LT5zY2FuX3ByZV90aW1lcl9sb3dfcmVnKTsKKwltZTQwMDBfb3V0bCgwLCBhaV9jb250ZXh0LT5zY2FuX3ByZV90aW1lcl9oaWdoX3JlZyk7CisJbWU0MDAwX291dGwoMCwgYWlfY29udGV4dC0+c2FtcGxlX2NvdW50ZXJfcmVnKTsKKworCWFpX2NvbnRleHQtPmNoYW5uZWxfbGlzdF9jb3VudCA9IDA7CisKKwkvKiBDbGVhciB0aGUgY2lyY3VsYXIgYnVmZmVyICovCisJYWlfY29udGV4dC0+Y2lyY19idWYuaGVhZCA9IDA7CisJYWlfY29udGV4dC0+Y2lyY19idWYudGFpbCA9IDA7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtZTQwMDBfYWlfaW9jdGxfc2luZyhzdHJ1Y3QgaW5vZGUgKmlub2RlX3AsIHN0cnVjdCBmaWxlICpmaWxlX3AsCisJCQkJdW5zaWduZWQgaW50IHNlcnZpY2UsIHVuc2lnbmVkIGxvbmcgYXJnKQoreworCW1lNDAwMF9haV9jb250ZXh0X3QgKmFpX2NvbnRleHQ7CisKKwlDQUxMX1BERUJVRygibWU0MDAwX2FpX2lvY3RsX3NpbmcoKSBpcyBleGVjdXRlZFxuIik7CisKKwlhaV9jb250ZXh0ID0gZmlsZV9wLT5wcml2YXRlX2RhdGE7CisKKwlpZiAoX0lPQ19UWVBFKHNlcnZpY2UpICE9IE1FNDAwMF9NQUdJQykgeworCQlwcmludGsoS0VSTl9FUlIgIm1lNDAwMF9haV9pb2N0bF9zaW5nKCk6V3JvbmcgbWFnaWMgbnVtYmVyXG4iKTsKKwkJcmV0dXJuIC1FTk9UVFk7CisJfQorCWlmIChfSU9DX05SKHNlcnZpY2UpID4gTUU0MDAwX0lPQ1RMX01BWE5SKSB7CisJCXByaW50ayhLRVJOX0VSUgorCQkgICAgICAgIm1lNDAwMF9haV9pb2N0bF9zaW5nKCk6U2VydmljZSBudW1iZXIgdG8gaGlnaFxuIik7CisJCXJldHVybiAtRU5PVFRZOworCX0KKworCXN3aXRjaCAoc2VydmljZSkgeworCWNhc2UgTUU0MDAwX0FJX1NJTkdMRToKKwkJcmV0dXJuIG1lNDAwMF9haV9zaW5nbGUoKG1lNDAwMF9haV9zaW5nbGVfdCAqKSBhcmcsIGFpX2NvbnRleHQpOworCWNhc2UgTUU0MDAwX0FJX0VYX1RSSUdfRU5BQkxFOgorCQlyZXR1cm4gbWU0MDAwX2FpX2V4X3RyaWdfZW5hYmxlKGFpX2NvbnRleHQpOworCWNhc2UgTUU0MDAwX0FJX0VYX1RSSUdfRElTQUJMRToKKwkJcmV0dXJuIG1lNDAwMF9haV9leF90cmlnX2Rpc2FibGUoYWlfY29udGV4dCk7CisJY2FzZSBNRTQwMDBfQUlfRVhfVFJJR19TRVRVUDoKKwkJcmV0dXJuIG1lNDAwMF9haV9leF90cmlnX3NldHVwKChtZTQwMDBfYWlfdHJpZ2dlcl90ICopIGFyZywKKwkJCQkJICAgICAgIGFpX2NvbnRleHQpOworCWNhc2UgTUU0MDAwX0dFVF9VU0VSX0lORk86CisJCXJldHVybiBtZTQwMDBfZ2V0X3VzZXJfaW5mbygobWU0MDAwX3VzZXJfaW5mb190ICopIGFyZywKKwkJCQkJICAgIGFpX2NvbnRleHQtPmJvYXJkX2luZm8pOworCWNhc2UgTUU0MDAwX0FJX09GRlNFVF9FTkFCTEU6CisJCXJldHVybiBtZTQwMDBfYWlfb2Zmc2V0X2VuYWJsZShhaV9jb250ZXh0KTsKKwljYXNlIE1FNDAwMF9BSV9PRkZTRVRfRElTQUJMRToKKwkJcmV0dXJuIG1lNDAwMF9haV9vZmZzZXRfZGlzYWJsZShhaV9jb250ZXh0KTsKKwljYXNlIE1FNDAwMF9BSV9GVUxMU0NBTEVfRU5BQkxFOgorCQlyZXR1cm4gbWU0MDAwX2FpX2Z1bGxzY2FsZV9lbmFibGUoYWlfY29udGV4dCk7CisJY2FzZSBNRTQwMDBfQUlfRlVMTFNDQUxFX0RJU0FCTEU6CisJCXJldHVybiBtZTQwMDBfYWlfZnVsbHNjYWxlX2Rpc2FibGUoYWlfY29udGV4dCk7CisJY2FzZSBNRTQwMDBfQUlfRUVQUk9NX1JFQUQ6CisJCXJldHVybiBtZTQwMDBfZWVwcm9tX3JlYWQoKG1lNDAwMF9lZXByb21fdCAqKSBhcmcsIGFpX2NvbnRleHQpOworCWNhc2UgTUU0MDAwX0FJX0VFUFJPTV9XUklURToKKwkJcmV0dXJuIG1lNDAwMF9lZXByb21fd3JpdGUoKG1lNDAwMF9lZXByb21fdCAqKSBhcmcsIGFpX2NvbnRleHQpOworCWRlZmF1bHQ6CisJCXByaW50ayhLRVJOX0VSUgorCQkgICAgICAgIm1lNDAwMF9haV9pb2N0bF9zaW5nKCk6SW52YWxpZCBzZXJ2aWNlIG51bWJlclxuIik7CisJCXJldHVybiAtRU5PVFRZOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtZTQwMDBfYWlfc2luZ2xlKG1lNDAwMF9haV9zaW5nbGVfdCAqIGFyZywKKwkJCSAgICBtZTQwMDBfYWlfY29udGV4dF90ICogYWlfY29udGV4dCkKK3sKKwltZTQwMDBfYWlfc2luZ2xlX3QgY21kOworCWludCBlcnI7CisJdTMyIHRtcDsKKwl3YWl0X3F1ZXVlX2hlYWRfdCBxdWV1ZTsKKwl1bnNpZ25lZCBsb25nIGppZmZ5OworCisJQ0FMTF9QREVCVUcoIm1lNDAwMF9haV9zaW5nbGUoKSBpcyBleGVjdXRlZFxuIik7CisKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZxdWV1ZSk7CisKKwkvKiBDb3B5IGRhdGEgZnJvbSB1c2VyICovCisJZXJyID0gY29weV9mcm9tX3VzZXIoJmNtZCwgYXJnLCBzaXplb2YobWU0MDAwX2FpX3NpbmdsZV90KSk7CisJaWYgKGVycikgeworCQlwcmludGsoS0VSTl9FUlIKKwkJICAgICAgICJNRTQwMDA6bWU0MDAwX2FpX3NpbmdsZSgpOkNhbid0IGNvcHkgZnJvbSB1c2VyIHNwYWNlXG4iKTsKKwkJcmV0dXJuIC1FRkFVTFQ7CisJfQorCisJLyogQ2hlY2sgcmFuZ2UgcGFyYW1ldGVyICovCisJc3dpdGNoIChjbWQucmFuZ2UpIHsKKwljYXNlIE1FNDAwMF9BSV9MSVNUX1JBTkdFX0JJUE9MQVJfMTA6CisJY2FzZSBNRTQwMDBfQUlfTElTVF9SQU5HRV9CSVBPTEFSXzJfNToKKwljYXNlIE1FNDAwMF9BSV9MSVNUX1JBTkdFX1VOSVBPTEFSXzEwOgorCWNhc2UgTUU0MDAwX0FJX0xJU1RfUkFOR0VfVU5JUE9MQVJfMl81OgorCQlicmVhazsKKwlkZWZhdWx0OgorCQlwcmludGsoS0VSTl9FUlIKKwkJICAgICAgICJNRTQwMDA6bWU0MDAwX2FpX3NpbmdsZSgpOkludmFsaWQgcmFuZ2Ugc3BlY2lmaWVkXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogQ2hlY2sgbW9kZSBhbmQgY2hhbm5lbCBudW1iZXIgKi8KKwlzd2l0Y2ggKGNtZC5tb2RlKSB7CisJY2FzZSBNRTQwMDBfQUlfTElTVF9JTlBVVF9TSU5HTEVfRU5ERUQ6CisJCWlmIChjbWQuY2hhbm5lbCA+PSBhaV9jb250ZXh0LT5ib2FyZF9pbmZvLT5ib2FyZF9wLT5haS5jb3VudCkgeworCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkgICAgICAgIk1FNDAwMDptZTQwMDBfYWlfc2luZ2xlKCk6QW5hbG9nIGlucHV0IGlzIG5vdCBhdmFpbGFibGVcbiIpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBNRTQwMDBfQUlfTElTVF9JTlBVVF9ESUZGRVJFTlRJQUw6CisJCWlmIChjbWQuY2hhbm5lbCA+PQorCQkgICAgYWlfY29udGV4dC0+Ym9hcmRfaW5mby0+Ym9hcmRfcC0+YWkuZGlmZl9jb3VudCkgeworCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkgICAgICAgIk1FNDAwMDptZTQwMDBfYWlfc2luZ2xlKCk6QW5hbG9nIGlucHV0IGlzIG5vdCBhdmFpbGFibGUgaW4gZGlmZmVyZW50aWFsIG1vZGVcbiIpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcHJpbnRrKEtFUk5fRVJSCisJCSAgICAgICAiTUU0MDAwOm1lNDAwMF9haV9zaW5nbGUoKTpJbnZhbGlkIG1vZGUgc3BlY2lmaWVkXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogQ2xlYXIgY2hhbm5lbCBsaXN0LCBkYXRhIGZpZm8gYW5kIGJvdGggc3RvcCBiaXRzICovCisJdG1wID0gbWU0MDAwX2lubChhaV9jb250ZXh0LT5jdHJsX3JlZyk7CisJdG1wICY9CisJICAgIH4oTUU0MDAwX0FJX0NUUkxfQklUX0NIQU5ORUxfRklGTyB8IE1FNDAwMF9BSV9DVFJMX0JJVF9EQVRBX0ZJRk8gfAorCSAgICAgIE1FNDAwMF9BSV9DVFJMX0JJVF9TVE9QIHwgTUU0MDAwX0FJX0NUUkxfQklUX0lNTUVESUFURV9TVE9QKTsKKwltZTQwMDBfb3V0bCh0bXAsIGFpX2NvbnRleHQtPmN0cmxfcmVnKTsKKworCS8qIEVuYWJsZSBjaGFubmVsIGxpc3QgYW5kIGRhdGEgZmlmbyAqLworCXRtcCB8PSBNRTQwMDBfQUlfQ1RSTF9CSVRfQ0hBTk5FTF9GSUZPIHwgTUU0MDAwX0FJX0NUUkxfQklUX0RBVEFfRklGTzsKKwltZTQwMDBfb3V0bCh0bXAsIGFpX2NvbnRleHQtPmN0cmxfcmVnKTsKKworCS8qIEdlbmVyYXRlIGNoYW5uZWwgbGlzdCBlbnRyeSAqLworCW1lNDAwMF9vdXRsKGNtZC5jaGFubmVsIHwgY21kLnJhbmdlIHwgY21kLgorCQkgICAgbW9kZSB8IE1FNDAwMF9BSV9MSVNUX0xBU1RfRU5UUlksCisJCSAgICBhaV9jb250ZXh0LT5jaGFubmVsX2xpc3RfcmVnKTsKKworCS8qIFNldCB0aGUgdGltZXIgdG8gbWF4aW11bSAqLworCW1lNDAwMF9vdXRsKDY2LCBhaV9jb250ZXh0LT5jaGFuX3RpbWVyX3JlZyk7CisJbWU0MDAwX291dGwoNjYsIGFpX2NvbnRleHQtPmNoYW5fcHJlX3RpbWVyX3JlZyk7CisKKwlpZiAodG1wICYgTUU0MDAwX0FJX0NUUkxfQklUX0VYX1RSSUcpIHsKKwkJamlmZnkgPSBqaWZmaWVzOworCQl3aGlsZSAoIQorCQkgICAgICAgKG1lNDAwMF9pbmwoYWlfY29udGV4dC0+c3RhdHVzX3JlZykgJgorCQkJTUU0MDAwX0FJX1NUQVRVU19CSVRfRUZfREFUQSkpIHsKKwkJCWludGVycnVwdGlibGVfc2xlZXBfb25fdGltZW91dCgmcXVldWUsIDEpOworCQkJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSB7CisJCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkJICAgICAgICJNRTQwMDA6bWU0MDAwX2FpX3NpbmdsZSgpOldhaXQgb24gc3RhcnQgb2Ygc3RhdGUgbWFjaGluZSBpbnRlcnJ1cHRlZFxuIik7CisJCQkJcmV0dXJuIC1FSU5UUjsKKwkJCX0KKwkJCWlmICgoKGppZmZpZXMgLSBqaWZmeSkgPiAoY21kLnRpbWVvdXQgKiBIWiAvIFVTRVJfSFopKSAmJiBjbWQudGltZW91dCkgewkvLyAyLjYgaGFzIGRpZmZyZW50IGRlZmluaXRpb25zIGZvciBIWiBpbiB1c2VyIGFuZCBrZXJuZWwgc3BhY2UKKwkJCQlwcmludGsoS0VSTl9FUlIKKwkJCQkgICAgICAgIk1FNDAwMDptZTQwMDBfYWlfc2luZ2xlKCk6VGltZW91dCByZWFjaGVkXG4iKTsKKwkJCQlyZXR1cm4gLUVJTzsKKwkJCX0KKwkJfQorCX0gZWxzZSB7CisJCS8qIFN0YXJ0IGNvbnZlcnNpb24gKi8KKwkJbWU0MDAwX2lubChhaV9jb250ZXh0LT5zdGFydF9yZWcpOworCisJCS8qIFdhaXQgdW50aWwgcmVhZHkgKi8KKwkJdWRlbGF5KDEwKTsKKwkJaWYgKCEKKwkJICAgIChtZTQwMDBfaW5sKGFpX2NvbnRleHQtPnN0YXR1c19yZWcpICYKKwkJICAgICBNRTQwMDBfQUlfU1RBVFVTX0JJVF9FRl9EQVRBKSkgeworCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkgICAgICAgIk1FNDAwMDptZTQwMDBfYWlfc2luZ2xlKCk6VmFsdWUgbm90IGF2YWlsYWJsZSBhZnRlciB3YWl0XG4iKTsKKwkJCXJldHVybiAtRUlPOworCQl9CisJfQorCisJLyogUmVhZCB2YWx1ZSBmcm9tIGRhdGEgZmlmbyAqLworCWNtZC52YWx1ZSA9IG1lNDAwMF9pbmwoYWlfY29udGV4dC0+ZGF0YV9yZWcpICYgMHhGRkZGOworCisJLyogQ29weSByZXN1bHQgYmFjayB0byB1c2VyICovCisJZXJyID0gY29weV90b191c2VyKGFyZywgJmNtZCwgc2l6ZW9mKG1lNDAwMF9haV9zaW5nbGVfdCkpOworCWlmIChlcnIpIHsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCSAgICAgICAiTUU0MDAwOm1lNDAwMF9haV9zaW5nbGUoKTpDYW4ndCBjb3B5IHRvIHVzZXIgc3BhY2VcbiIpOworCQlyZXR1cm4gLUVGQVVMVDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtZTQwMDBfYWlfaW9jdGxfc3coc3RydWN0IGlub2RlICppbm9kZV9wLCBzdHJ1Y3QgZmlsZSAqZmlsZV9wLAorCQkJICAgICAgdW5zaWduZWQgaW50IHNlcnZpY2UsIHVuc2lnbmVkIGxvbmcgYXJnKQoreworCW1lNDAwMF9haV9jb250ZXh0X3QgKmFpX2NvbnRleHQ7CisKKwlDQUxMX1BERUJVRygibWU0MDAwX2FpX2lvY3RsX3N3KCkgaXMgZXhlY3V0ZWRcbiIpOworCisJYWlfY29udGV4dCA9IGZpbGVfcC0+cHJpdmF0ZV9kYXRhOworCisJaWYgKF9JT0NfVFlQRShzZXJ2aWNlKSAhPSBNRTQwMDBfTUFHSUMpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJtZTQwMDBfYWlfaW9jdGxfc3coKTpXcm9uZyBtYWdpYyBudW1iZXJcbiIpOworCQlyZXR1cm4gLUVOT1RUWTsKKwl9CisJaWYgKF9JT0NfTlIoc2VydmljZSkgPiBNRTQwMDBfSU9DVExfTUFYTlIpIHsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCSAgICAgICAibWU0MDAwX2FpX2lvY3RsX3N3KCk6U2VydmljZSBudW1iZXIgdG8gaGlnaFxuIik7CisJCXJldHVybiAtRU5PVFRZOworCX0KKworCXN3aXRjaCAoc2VydmljZSkgeworCWNhc2UgTUU0MDAwX0FJX1NDX1NFVFVQOgorCQlyZXR1cm4gbWU0MDAwX2FpX3NjX3NldHVwKChtZTQwMDBfYWlfc2NfdCAqKSBhcmcsIGFpX2NvbnRleHQpOworCWNhc2UgTUU0MDAwX0FJX0NPTkZJRzoKKwkJcmV0dXJuIG1lNDAwMF9haV9jb25maWcoKG1lNDAwMF9haV9jb25maWdfdCAqKSBhcmcsIGFpX2NvbnRleHQpOworCWNhc2UgTUU0MDAwX0FJX1NUQVJUOgorCQlyZXR1cm4gbWU0MDAwX2FpX3N0YXJ0KGFpX2NvbnRleHQpOworCWNhc2UgTUU0MDAwX0FJX1NUT1A6CisJCXJldHVybiBtZTQwMDBfYWlfc3RvcChhaV9jb250ZXh0KTsKKwljYXNlIE1FNDAwMF9BSV9JTU1FRElBVEVfU1RPUDoKKwkJcmV0dXJuIG1lNDAwMF9haV9pbW1lZGlhdGVfc3RvcChhaV9jb250ZXh0KTsKKwljYXNlIE1FNDAwMF9BSV9GU01fU1RBVEU6CisJCXJldHVybiBtZTQwMDBfYWlfZnNtX3N0YXRlKChpbnQgKilhcmcsIGFpX2NvbnRleHQpOworCWNhc2UgTUU0MDAwX0dFVF9VU0VSX0lORk86CisJCXJldHVybiBtZTQwMDBfZ2V0X3VzZXJfaW5mbygobWU0MDAwX3VzZXJfaW5mb190ICopIGFyZywKKwkJCQkJICAgIGFpX2NvbnRleHQtPmJvYXJkX2luZm8pOworCWNhc2UgTUU0MDAwX0FJX0VFUFJPTV9SRUFEOgorCQlyZXR1cm4gbWU0MDAwX2VlcHJvbV9yZWFkKChtZTQwMDBfZWVwcm9tX3QgKikgYXJnLCBhaV9jb250ZXh0KTsKKwljYXNlIE1FNDAwMF9BSV9FRVBST01fV1JJVEU6CisJCXJldHVybiBtZTQwMDBfZWVwcm9tX3dyaXRlKChtZTQwMDBfZWVwcm9tX3QgKikgYXJnLCBhaV9jb250ZXh0KTsKKwljYXNlIE1FNDAwMF9BSV9HRVRfQ09VTlRfQlVGRkVSOgorCQlyZXR1cm4gbWU0MDAwX2FpX2dldF9jb3VudF9idWZmZXIoKHVuc2lnbmVkIGxvbmcgKilhcmcsCisJCQkJCQkgIGFpX2NvbnRleHQpOworCWRlZmF1bHQ6CisJCXByaW50ayhLRVJOX0VSUgorCQkgICAgICAgIk1FNDAwMDptZTQwMDBfYWlfaW9jdGxfc3coKTpJbnZhbGlkIHNlcnZpY2UgbnVtYmVyICVkXG4iLAorCQkgICAgICAgc2VydmljZSk7CisJCXJldHVybiAtRU5PVFRZOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtZTQwMDBfYWlfaW9jdGxfZXh0KHN0cnVjdCBpbm9kZSAqaW5vZGVfcCwgc3RydWN0IGZpbGUgKmZpbGVfcCwKKwkJCSAgICAgICB1bnNpZ25lZCBpbnQgc2VydmljZSwgdW5zaWduZWQgbG9uZyBhcmcpCit7CisJbWU0MDAwX2FpX2NvbnRleHRfdCAqYWlfY29udGV4dDsKKworCUNBTExfUERFQlVHKCJtZTQwMDBfYWlfaW9jdGxfZXh0KCkgaXMgZXhlY3V0ZWRcbiIpOworCisJYWlfY29udGV4dCA9IGZpbGVfcC0+cHJpdmF0ZV9kYXRhOworCisJaWYgKF9JT0NfVFlQRShzZXJ2aWNlKSAhPSBNRTQwMDBfTUFHSUMpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJtZTQwMDBfYWlfaW9jdGxfZXh0KCk6V3JvbmcgbWFnaWMgbnVtYmVyXG4iKTsKKwkJcmV0dXJuIC1FTk9UVFk7CisJfQorCWlmIChfSU9DX05SKHNlcnZpY2UpID4gTUU0MDAwX0lPQ1RMX01BWE5SKSB7CisJCXByaW50ayhLRVJOX0VSUgorCQkgICAgICAgIm1lNDAwMF9haV9pb2N0bF9leHQoKTpTZXJ2aWNlIG51bWJlciB0byBoaWdoXG4iKTsKKwkJcmV0dXJuIC1FTk9UVFk7CisJfQorCisJc3dpdGNoIChzZXJ2aWNlKSB7CisJY2FzZSBNRTQwMDBfQUlfU0NfU0VUVVA6CisJCXJldHVybiBtZTQwMDBfYWlfc2Nfc2V0dXAoKG1lNDAwMF9haV9zY190ICopIGFyZywgYWlfY29udGV4dCk7CisJY2FzZSBNRTQwMDBfQUlfQ09ORklHOgorCQlyZXR1cm4gbWU0MDAwX2FpX2NvbmZpZygobWU0MDAwX2FpX2NvbmZpZ190ICopIGFyZywgYWlfY29udGV4dCk7CisJY2FzZSBNRTQwMDBfQUlfU1RBUlQ6CisJCXJldHVybiBtZTQwMDBfYWlfc3RhcnRfZXgoKHVuc2lnbmVkIGxvbmcgKilhcmcsIGFpX2NvbnRleHQpOworCWNhc2UgTUU0MDAwX0FJX1NUT1A6CisJCXJldHVybiBtZTQwMDBfYWlfc3RvcChhaV9jb250ZXh0KTsKKwljYXNlIE1FNDAwMF9BSV9JTU1FRElBVEVfU1RPUDoKKwkJcmV0dXJuIG1lNDAwMF9haV9pbW1lZGlhdGVfc3RvcChhaV9jb250ZXh0KTsKKwljYXNlIE1FNDAwMF9BSV9FWF9UUklHX0VOQUJMRToKKwkJcmV0dXJuIG1lNDAwMF9haV9leF90cmlnX2VuYWJsZShhaV9jb250ZXh0KTsKKwljYXNlIE1FNDAwMF9BSV9FWF9UUklHX0RJU0FCTEU6CisJCXJldHVybiBtZTQwMDBfYWlfZXhfdHJpZ19kaXNhYmxlKGFpX2NvbnRleHQpOworCWNhc2UgTUU0MDAwX0FJX0VYX1RSSUdfU0VUVVA6CisJCXJldHVybiBtZTQwMDBfYWlfZXhfdHJpZ19zZXR1cCgobWU0MDAwX2FpX3RyaWdnZXJfdCAqKSBhcmcsCisJCQkJCSAgICAgICBhaV9jb250ZXh0KTsKKwljYXNlIE1FNDAwMF9BSV9GU01fU1RBVEU6CisJCXJldHVybiBtZTQwMDBfYWlfZnNtX3N0YXRlKChpbnQgKilhcmcsIGFpX2NvbnRleHQpOworCWNhc2UgTUU0MDAwX0dFVF9VU0VSX0lORk86CisJCXJldHVybiBtZTQwMDBfZ2V0X3VzZXJfaW5mbygobWU0MDAwX3VzZXJfaW5mb190ICopIGFyZywKKwkJCQkJICAgIGFpX2NvbnRleHQtPmJvYXJkX2luZm8pOworCWNhc2UgTUU0MDAwX0FJX0dFVF9DT1VOVF9CVUZGRVI6CisJCXJldHVybiBtZTQwMDBfYWlfZ2V0X2NvdW50X2J1ZmZlcigodW5zaWduZWQgbG9uZyAqKWFyZywKKwkJCQkJCSAgYWlfY29udGV4dCk7CisJZGVmYXVsdDoKKwkJcHJpbnRrKEtFUk5fRVJSCisJCSAgICAgICAiTUU0MDAwOm1lNDAwMF9haV9pb2N0bF9leHQoKTpJbnZhbGlkIHNlcnZpY2UgbnVtYmVyICVkXG4iLAorCQkgICAgICAgc2VydmljZSk7CisJCXJldHVybiAtRU5PVFRZOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtZTQwMDBfYWlfZmFzeW5jKGludCBmZCwgc3RydWN0IGZpbGUgKmZpbGVfcCwgaW50IG1vZGUpCit7CisJbWU0MDAwX2FpX2NvbnRleHRfdCAqYWlfY29udGV4dDsKKworCUNBTExfUERFQlVHKCJtZTQwMDBfYW9fZmFzeW5jX2NvbnQoKSBpcyBleGVjdXRlZFxuIik7CisKKwlhaV9jb250ZXh0ID0gZmlsZV9wLT5wcml2YXRlX2RhdGE7CisJcmV0dXJuIGZhc3luY19oZWxwZXIoZmQsIGZpbGVfcCwgbW9kZSwgJmFpX2NvbnRleHQtPmZhc3luY19wKTsKK30KKworc3RhdGljIGludCBtZTQwMDBfYWlfY29uZmlnKG1lNDAwMF9haV9jb25maWdfdCAqIGFyZywKKwkJCSAgICBtZTQwMDBfYWlfY29udGV4dF90ICogYWlfY29udGV4dCkKK3sKKwltZTQwMDBfYWlfY29uZmlnX3QgY21kOworCXUzMiAqbGlzdCA9IE5VTEw7CisJdTMyIG1vZGU7CisJaW50IGk7CisJaW50IGVycjsKKwl3YWl0X3F1ZXVlX2hlYWRfdCBxdWV1ZTsKKwl1NjQgc2NhbjsKKwl1MzIgdG1wOworCisJQ0FMTF9QREVCVUcoIm1lNDAwMF9haV9jb25maWcoKSBpcyBleGVjdXRlZFxuIik7CisKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZxdWV1ZSk7CisKKwkvKiBDaGVjayBpZiBjb252ZXJzaW9uIGlzIHN0b3BwZWQgKi8KKwlpZiAoaW5sKGFpX2NvbnRleHQtPmN0cmxfcmVnKSAmIE1FNDAwMF9BSV9TVEFUVVNfQklUX0ZTTSkgeworCQlwcmludGsoS0VSTl9FUlIKKwkJICAgICAgICJNRTQwMDA6bWU0MDAwX2FpX2NvbmZpZygpOkNvbnZlcnNpb24gaXMgbm90IHN0b3BwZWRcbiIpOworCQllcnIgPSAtRUJVU1k7CisJCWdvdG8gQUlfQ09ORklHX0VSUjsKKwl9CisKKwkvKiBDb3B5IGRhdGEgZnJvbSB1c2VyICovCisJZXJyID0gY29weV9mcm9tX3VzZXIoJmNtZCwgYXJnLCBzaXplb2YobWU0MDAwX2FpX2NvbmZpZ190KSk7CisJaWYgKGVycikgeworCQlwcmludGsoS0VSTl9FUlIKKwkJICAgICAgICJNRTQwMDA6bWU0MDAwX2FpX2NvbmZpZygpOkNhbid0IGNvcHkgZnJvbSB1c2VyIHNwYWNlXG4iKTsKKwkJZXJyID0gLUVGQVVMVDsKKwkJZ290byBBSV9DT05GSUdfRVJSOworCX0KKworCVBERUJVRworCSAgICAoIm1lNDAwMF9haV9jb25maWcoKTpjaGFuID0gJWxkLCBwcmVfY2hhbiA9ICVsZCwgc2Nhbl9sb3cgPSAlbGQsIHNjYW5faGlnaCA9ICVsZCwgY291bnQgPSAlbGRcbiIsCisJICAgICBjbWQudGltZXIuY2hhbiwgY21kLnRpbWVyLnByZV9jaGFuLCBjbWQudGltZXIuc2Nhbl9sb3csCisJICAgICBjbWQudGltZXIuc2Nhbl9oaWdoLCBjbWQuY2hhbm5lbF9saXN0LmNvdW50KTsKKworCS8qIENoZWNrIHdoZXRoZXIgc2FtcGxlIGFuZCBob2xkIGlzIGF2YWlsYWJsZSBmb3IgdGhpcyBib2FyZCAqLworCWlmIChjbWQuc2gpIHsKKwkJaWYgKCFhaV9jb250ZXh0LT5ib2FyZF9pbmZvLT5ib2FyZF9wLT5haS5zaF9jb3VudCkgeworCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkgICAgICAgIk1FNDAwMDptZTQwMDBfYWlfY29uZmlnKCk6U2FtcGxlIGFuZCBIb2xkIGlzIG5vdCBhdmFpbGFibGUgZm9yIHRoaXMgYm9hcmRcbiIpOworCQkJZXJyID0gLUVOT0RFVjsKKwkJCWdvdG8gQUlfQ09ORklHX0VSUjsKKwkJfQorCX0KKworCS8qIENoZWNrIHRoZSBjaGFubmVsIGxpc3Qgc2l6ZSAqLworCWlmIChjbWQuY2hhbm5lbF9saXN0LmNvdW50ID4gTUU0MDAwX0FJX0NIQU5ORUxfTElTVF9DT1VOVCkgeworCQlwcmludGsoS0VSTl9FUlIKKwkJICAgICAgICJtZTQwMDBfYWlfY29uZmlnKCk6Q2hhbm5lbCBsaXN0IGlzIHRvIGxhcmdlXG4iKTsKKwkJZXJyID0gLUVJTlZBTDsKKwkJZ290byBBSV9DT05GSUdfRVJSOworCX0KKworCS8qIENvcHkgY2hhbm5lbCBsaXN0IGZyb20gdXNlciAqLworCWxpc3QgPSBrbWFsbG9jKHNpemVvZih1MzIpICogY21kLmNoYW5uZWxfbGlzdC5jb3VudCwgR0ZQX0tFUk5FTCk7CisJaWYgKCFsaXN0KSB7CisJCXByaW50ayhLRVJOX0VSUgorCQkgICAgICAgIk1FNDAwMDptZTQwMDBfYWlfY29uZmlnKCk6Q2FuJ3QgZ2V0IG1lbW9yeSBmb3IgY2hhbm5lbCBsaXN0XG4iKTsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBBSV9DT05GSUdfRVJSOworCX0KKwllcnIgPQorCSAgICBjb3B5X2Zyb21fdXNlcihsaXN0LCBjbWQuY2hhbm5lbF9saXN0Lmxpc3QsCisJCQkgICBzaXplb2YodTMyKSAqIGNtZC5jaGFubmVsX2xpc3QuY291bnQpOworCWlmIChlcnIpIHsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCSAgICAgICAiTUU0MDAwOm1lNDAwMF9haV9jb25maWcoKTpDYW4ndCBjb3B5IGZyb20gdXNlciBzcGFjZVxuIik7CisJCWVyciA9IC1FRkFVTFQ7CisJCWdvdG8gQUlfQ09ORklHX0VSUjsKKwl9CisKKwkvKiBDaGVjayBpZiBsYXN0IGVudHJ5IGJpdCBpcyBzZXQgKi8KKwlpZiAoIShsaXN0W2NtZC5jaGFubmVsX2xpc3QuY291bnQgLSAxXSAmIE1FNDAwMF9BSV9MSVNUX0xBU1RfRU5UUlkpKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcKKwkJICAgICAgICJtZTQwMDBfYWlfY29uZmlnKCk6TGFzdCBlbnRyeSBiaXQgaXMgbm90IHNldFxuIik7CisJCWxpc3RbY21kLmNoYW5uZWxfbGlzdC5jb3VudCAtIDFdIHw9IE1FNDAwMF9BSV9MSVNUX0xBU1RfRU5UUlk7CisJfQorCisJLyogQ2hlY2sgd2hldGhlciBtb2RlIGlzIGVxdWFsIGZvciBhbGwgZW50cmllcyAqLworCW1vZGUgPSBsaXN0WzBdICYgMHgyMDsKKwlmb3IgKGkgPSAwOyBpIDwgY21kLmNoYW5uZWxfbGlzdC5jb3VudDsgaSsrKSB7CisJCWlmICgobGlzdFtpXSAmIDB4MjApICE9IG1vZGUpIHsKKwkJCXByaW50ayhLRVJOX0VSUgorCQkJICAgICAgICJNRTQwMDA6bWU0MDAwX2FpX2NvbmZpZygpOk1vZGUgaXMgbm90IGVxdWFsIGZvciBhbGwgZW50cmllc1xuIik7CisJCQllcnIgPSAtRUlOVkFMOworCQkJZ290byBBSV9DT05GSUdfRVJSOworCQl9CisJfQorCisJLyogQ2hlY2sgd2hldGhlciBjaGFubmVscyBhcmUgYXZhaWxhYmxlIGZvciB0aGlzIG1vZGUgKi8KKwlpZiAobW9kZSA9PSBNRTQwMDBfQUlfTElTVF9JTlBVVF9TSU5HTEVfRU5ERUQpIHsKKwkJZm9yIChpID0gMDsgaSA8IGNtZC5jaGFubmVsX2xpc3QuY291bnQ7IGkrKykgeworCQkJaWYgKChsaXN0W2ldICYgMHgxRikgPj0KKwkJCSAgICBhaV9jb250ZXh0LT5ib2FyZF9pbmZvLT5ib2FyZF9wLT5haS5jb3VudCkgeworCQkJCXByaW50ayhLRVJOX0VSUgorCQkJCSAgICAgICAiTUU0MDAwOm1lNDAwMF9haV9jb25maWcoKTpDaGFubmVsIGlzIG5vdCBhdmFpbGFibGUgZm9yIHNpbmdsZSBlbmRlZFxuIik7CisJCQkJZXJyID0gLUVJTlZBTDsKKwkJCQlnb3RvIEFJX0NPTkZJR19FUlI7CisJCQl9CisJCX0KKwl9IGVsc2UgaWYgKG1vZGUgPT0gTUU0MDAwX0FJX0xJU1RfSU5QVVRfRElGRkVSRU5USUFMKSB7CisJCWZvciAoaSA9IDA7IGkgPCBjbWQuY2hhbm5lbF9saXN0LmNvdW50OyBpKyspIHsKKwkJCWlmICgobGlzdFtpXSAmIDB4MUYpID49CisJCQkgICAgYWlfY29udGV4dC0+Ym9hcmRfaW5mby0+Ym9hcmRfcC0+YWkuZGlmZl9jb3VudCkgeworCQkJCXByaW50ayhLRVJOX0VSUgorCQkJCSAgICAgICAiTUU0MDAwOm1lNDAwMF9haV9jb25maWcoKTpDaGFubmVsIGlzIG5vdCBhdmFpbGFibGUgZm9yIGRpZmZlcmVudGlhbFxuIik7CisJCQkJZXJyID0gLUVJTlZBTDsKKwkJCQlnb3RvIEFJX0NPTkZJR19FUlI7CisJCQl9CisJCX0KKwl9CisKKwkvKiBDaGVjayBpZiBiaXBvbGFyIGlzIHNldCBmb3IgYWxsIGVudHJpZXMgd2hlbiBpbiBkaWZmZXJlbnRpYWwgbW9kZSAqLworCWlmIChtb2RlID09IE1FNDAwMF9BSV9MSVNUX0lOUFVUX0RJRkZFUkVOVElBTCkgeworCQlmb3IgKGkgPSAwOyBpIDwgY21kLmNoYW5uZWxfbGlzdC5jb3VudDsgaSsrKSB7CisJCQlpZiAoKGxpc3RbaV0gJiAweEMwKSAhPSBNRTQwMDBfQUlfTElTVF9SQU5HRV9CSVBPTEFSXzEwCisJCQkgICAgJiYgKGxpc3RbaV0gJiAweEMwKSAhPQorCQkJICAgIE1FNDAwMF9BSV9MSVNUX1JBTkdFX0JJUE9MQVJfMl81KSB7CisJCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkJICAgICAgICJNRTQwMDA6bWU0MDAwX2FpX2NvbmZpZygpOkJpcG9sYXIgaXMgbm90IHNlbGVjdGVkIGluIGRpZmZlcmVudGlhbCBtb2RlXG4iKTsKKwkJCQllcnIgPSAtRUlOVkFMOworCQkJCWdvdG8gQUlfQ09ORklHX0VSUjsKKwkJCX0KKwkJfQorCX0KKworCWlmIChhaV9jb250ZXh0LT5tb2RlICE9IE1FNDAwMF9BSV9BQ1FfTU9ERV9FWFRfU0lOR0xFX1ZBTFVFKSB7CisJCS8qIENoZWNrIGZvciBtaW5pbXVtIGNoYW5uZWwgZGl2aXNvciAqLworCQlpZiAoY21kLnRpbWVyLmNoYW4gPCBNRTQwMDBfQUlfTUlOX1RJQ0tTKSB7CisJCQlwcmludGsoS0VSTl9FUlIKKwkJCSAgICAgICAiTUU0MDAwOm1lNDAwMF9haV9jb25maWcoKTpDaGFubmVsIHRpbWVyIGRpdmlzb3IgaXMgdG8gbG93XG4iKTsKKwkJCWVyciA9IC1FSU5WQUw7CisJCQlnb3RvIEFJX0NPTkZJR19FUlI7CisJCX0KKworCQkvKiBDaGVjayBpZiBtaW5pbXVtIGNoYW5uZWwgZGl2aXNvciBpcyBhZGp1c3RlZCB3aGVuIHNhbXBsZSBhbmQgaG9sZCBpcyBhY3RpdmF0ZWQgKi8KKwkJaWYgKChjbWQuc2gpICYmIChjbWQudGltZXIuY2hhbiAhPSBNRTQwMDBfQUlfTUlOX1RJQ0tTKSkgeworCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkgICAgICAgIk1FNDAwMDptZTQwMDBfYWlfY29uZmlnKCk6Q2hhbm5lbCB0aW1lciBkaXZpc29yIG11c3QgYmUgYXQgbWluaW11bSB3aGVuIHNhbXBsZSBhbmQgaG9sZCBpcyBhY3RpdmF0ZWRcbiIpOworCQkJZXJyID0gLUVJTlZBTDsKKwkJCWdvdG8gQUlfQ09ORklHX0VSUjsKKwkJfQorCisJCS8qIENoZWNrIGZvciBtaW5pbXVtIGNoYW5uZWwgcHJlIGRpdmlzb3IgKi8KKwkJaWYgKGNtZC50aW1lci5wcmVfY2hhbiA8IE1FNDAwMF9BSV9NSU5fVElDS1MpIHsKKwkJCXByaW50ayhLRVJOX0VSUgorCQkJICAgICAgICJNRTQwMDA6bWU0MDAwX2FpX2NvbmZpZygpOkNoYW5uZWwgcHJlIHRpbWVyIGRpdmlzb3IgaXMgdG8gbG93XG4iKTsKKwkJCWVyciA9IC1FSU5WQUw7CisJCQlnb3RvIEFJX0NPTkZJR19FUlI7CisJCX0KKworCQkvKiBXcml0ZSB0aGUgY2hhbm5lbCB0aW1lcnMgKi8KKwkJbWU0MDAwX291dGwoY21kLnRpbWVyLmNoYW4gLSAxLCBhaV9jb250ZXh0LT5jaGFuX3RpbWVyX3JlZyk7CisJCW1lNDAwMF9vdXRsKGNtZC50aW1lci5wcmVfY2hhbiAtIDEsCisJCQkgICAgYWlfY29udGV4dC0+Y2hhbl9wcmVfdGltZXJfcmVnKTsKKworCQkvKiBTYXZlIHRoZSB0aW1lciB2YWx1ZXMgaW4gdGhlIGJvYXJkIGNvbnRleHQgKi8KKwkJYWlfY29udGV4dC0+Y2hhbl90aW1lciA9IGNtZC50aW1lci5jaGFuOworCQlhaV9jb250ZXh0LT5jaGFuX3ByZV90aW1lciA9IGNtZC50aW1lci5wcmVfY2hhbjsKKworCQlpZiAoYWlfY29udGV4dC0+bW9kZSAhPSBNRTQwMDBfQUlfQUNRX01PREVfRVhUX1NJTkdMRV9DSEFOTElTVCkgeworCQkJLyogQ2hlY2sgZm9yIHNjYW4gdGltZXIgZGl2aXNvciAqLworCQkJc2NhbiA9CisJCQkgICAgKHU2NCkgY21kLnRpbWVyLnNjYW5fbG93IHwgKCh1NjQpIGNtZC50aW1lci4KKwkJCQkJCQlzY2FuX2hpZ2ggPDwgMzIpOworCQkJaWYgKHNjYW4gIT0gMCkgeworCQkJCWlmIChzY2FuIDwKKwkJCQkgICAgY21kLmNoYW5uZWxfbGlzdC5jb3VudCAqIGNtZC50aW1lci5jaGFuICsKKwkJCQkgICAgMSkgeworCQkJCQlwcmludGsoS0VSTl9FUlIKKwkJCQkJICAgICAgICJNRTQwMDA6bWU0MDAwX2FpX2NvbmZpZygpOlNjYW4gdGltZXIgZGl2aXNvciBpcyB0byBsb3dcbiIpOworCQkJCQllcnIgPSAtRUlOVkFMOworCQkJCQlnb3RvIEFJX0NPTkZJR19FUlI7CisJCQkJfQorCQkJfQorCisJCQkvKiBXcml0ZSB0aGUgc2NhbiB0aW1lcnMgKi8KKwkJCWlmIChzY2FuICE9IDApIHsKKwkJCQlzY2FuLS07CisJCQkJdG1wID0gKHUzMikgKHNjYW4gJiAweEZGRkZGRkZGKTsKKwkJCQltZTQwMDBfb3V0bCh0bXAsCisJCQkJCSAgICBhaV9jb250ZXh0LT5zY2FuX3RpbWVyX2xvd19yZWcpOworCQkJCXRtcCA9ICh1MzIpICgoc2NhbiA+PiAzMikgJiAweEZGRkZGRkZGKTsKKwkJCQltZTQwMDBfb3V0bCh0bXAsCisJCQkJCSAgICBhaV9jb250ZXh0LT5zY2FuX3RpbWVyX2hpZ2hfcmVnKTsKKworCQkJCXNjYW4gPQorCQkJCSAgICBzY2FuIC0gKGNtZC50aW1lci5jaGFuIC0gMSkgKworCQkJCSAgICAoY21kLnRpbWVyLnByZV9jaGFuIC0gMSk7CisJCQkJdG1wID0gKHUzMikgKHNjYW4gJiAweEZGRkZGRkZGKTsKKwkJCQltZTQwMDBfb3V0bCh0bXAsCisJCQkJCSAgICBhaV9jb250ZXh0LT5zY2FuX3ByZV90aW1lcl9sb3dfcmVnKTsKKwkJCQl0bXAgPSAodTMyKSAoKHNjYW4gPj4gMzIpICYgMHhGRkZGRkZGRik7CisJCQkJbWU0MDAwX291dGwodG1wLAorCQkJCQkgICAgYWlfY29udGV4dC0+CisJCQkJCSAgICBzY2FuX3ByZV90aW1lcl9oaWdoX3JlZyk7CisJCQl9IGVsc2UgeworCQkJCW1lNDAwMF9vdXRsKDB4MCwKKwkJCQkJICAgIGFpX2NvbnRleHQtPnNjYW5fdGltZXJfbG93X3JlZyk7CisJCQkJbWU0MDAwX291dGwoMHgwLAorCQkJCQkgICAgYWlfY29udGV4dC0+c2Nhbl90aW1lcl9oaWdoX3JlZyk7CisKKwkJCQltZTQwMDBfb3V0bCgweDAsCisJCQkJCSAgICBhaV9jb250ZXh0LT5zY2FuX3ByZV90aW1lcl9sb3dfcmVnKTsKKwkJCQltZTQwMDBfb3V0bCgweDAsCisJCQkJCSAgICBhaV9jb250ZXh0LT4KKwkJCQkJICAgIHNjYW5fcHJlX3RpbWVyX2hpZ2hfcmVnKTsKKwkJCX0KKworCQkJYWlfY29udGV4dC0+c2Nhbl90aW1lcl9sb3cgPSBjbWQudGltZXIuc2Nhbl9sb3c7CisJCQlhaV9jb250ZXh0LT5zY2FuX3RpbWVyX2hpZ2ggPSBjbWQudGltZXIuc2Nhbl9oaWdoOworCQl9CisJfQorCisJLyogQ2xlYXIgdGhlIGNoYW5uZWwgbGlzdCAqLworCXRtcCA9IG1lNDAwMF9pbmwoYWlfY29udGV4dC0+Y3RybF9yZWcpOworCXRtcCAmPSB+TUU0MDAwX0FJX0NUUkxfQklUX0NIQU5ORUxfRklGTzsKKwltZTQwMDBfb3V0bCh0bXAsIGFpX2NvbnRleHQtPmN0cmxfcmVnKTsKKwl0bXAgfD0gTUU0MDAwX0FJX0NUUkxfQklUX0NIQU5ORUxfRklGTzsKKwltZTQwMDBfb3V0bCh0bXAsIGFpX2NvbnRleHQtPmN0cmxfcmVnKTsKKworCS8qIFdyaXRlIHRoZSBjaGFubmVsIGxpc3QgKi8KKwlmb3IgKGkgPSAwOyBpIDwgY21kLmNoYW5uZWxfbGlzdC5jb3VudDsgaSsrKSB7CisJCW1lNDAwMF9vdXRsKGxpc3RbaV0sIGFpX2NvbnRleHQtPmNoYW5uZWxfbGlzdF9yZWcpOworCX0KKworCS8qIFNldHVwIHNhbXBsZSBhbmQgaG9sZCAqLworCWlmIChjbWQuc2gpIHsKKwkJdG1wIHw9IE1FNDAwMF9BSV9DVFJMX0JJVF9TQU1QTEVfSE9MRDsKKwkJbWU0MDAwX291dGwodG1wLCBhaV9jb250ZXh0LT5jdHJsX3JlZyk7CisJfSBlbHNlIHsKKwkJdG1wICY9IH5NRTQwMDBfQUlfQ1RSTF9CSVRfU0FNUExFX0hPTEQ7CisJCW1lNDAwMF9vdXRsKHRtcCwgYWlfY29udGV4dC0+Y3RybF9yZWcpOworCX0KKworCS8qIFNhdmUgdGhlIGNoYW5uZWwgbGlzdCBzaXplIGluIHRoZSBib2FyZCBjb250ZXh0ICovCisJYWlfY29udGV4dC0+Y2hhbm5lbF9saXN0X2NvdW50ID0gY21kLmNoYW5uZWxfbGlzdC5jb3VudDsKKworCWtmcmVlKGxpc3QpOworCisJcmV0dXJuIDA7CisKKyAgICAgIEFJX0NPTkZJR19FUlI6CisKKwkvKiBSZXNldCB0aGUgdGltZXJzICovCisJYWlfY29udGV4dC0+Y2hhbl90aW1lciA9IDY2OworCWFpX2NvbnRleHQtPmNoYW5fcHJlX3RpbWVyID0gNjY7CisJYWlfY29udGV4dC0+c2Nhbl90aW1lcl9sb3cgPSAwOworCWFpX2NvbnRleHQtPnNjYW5fdGltZXJfaGlnaCA9IDA7CisKKwltZTQwMDBfb3V0bCg2NSwgYWlfY29udGV4dC0+Y2hhbl90aW1lcl9yZWcpOworCW1lNDAwMF9vdXRsKDY1LCBhaV9jb250ZXh0LT5jaGFuX3ByZV90aW1lcl9yZWcpOworCW1lNDAwMF9vdXRsKDAsIGFpX2NvbnRleHQtPnNjYW5fdGltZXJfaGlnaF9yZWcpOworCW1lNDAwMF9vdXRsKDAsIGFpX2NvbnRleHQtPnNjYW5fdGltZXJfbG93X3JlZyk7CisJbWU0MDAwX291dGwoMCwgYWlfY29udGV4dC0+c2Nhbl9wcmVfdGltZXJfaGlnaF9yZWcpOworCW1lNDAwMF9vdXRsKDAsIGFpX2NvbnRleHQtPnNjYW5fcHJlX3RpbWVyX2xvd19yZWcpOworCisJYWlfY29udGV4dC0+Y2hhbm5lbF9saXN0X2NvdW50ID0gMDsKKworCXRtcCA9IG1lNDAwMF9pbmwoYWlfY29udGV4dC0+Y3RybF9yZWcpOworCXRtcCAmPQorCSAgICB+KE1FNDAwMF9BSV9DVFJMX0JJVF9DSEFOTkVMX0ZJRk8gfCBNRTQwMDBfQUlfQ1RSTF9CSVRfU0FNUExFX0hPTEQpOworCisJaWYgKGxpc3QpCisJCWtmcmVlKGxpc3QpOworCisJcmV0dXJuIGVycjsKKworfQorCitzdGF0aWMgaW50IGFpX2NvbW1vbl9zdGFydChtZTQwMDBfYWlfY29udGV4dF90ICogYWlfY29udGV4dCkKK3sKKwl1MzIgdG1wOworCUNBTExfUERFQlVHKCJhaV9jb21tb25fc3RhcnQoKSBpcyBleGVjdXRlZFxuIik7CisKKwl0bXAgPSBtZTQwMDBfaW5sKGFpX2NvbnRleHQtPmN0cmxfcmVnKTsKKworCS8qIENoZWNrIGlmIGNvbnZlcnNpb24gaXMgc3RvcHBlZCAqLworCWlmICh0bXAgJiBNRTQwMDBfQUlfU1RBVFVTX0JJVF9GU00pIHsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCSAgICAgICAiTUU0MDAwOmFpX2NvbW1vbl9zdGFydCgpOkNvbnZlcnNpb24gaXMgbm90IHN0b3BwZWRcbiIpOworCQlyZXR1cm4gLUVCVVNZOworCX0KKworCS8qIENsZWFyIGRhdGEgZmlmbywgZGlzYWJsZSBhbGwgaW50ZXJydXB0cywgY2xlYXIgc2FtcGxlIGNvdW50ZXIgcmVsb2FkICovCisJdG1wICY9IH4oTUU0MDAwX0FJX0NUUkxfQklUX0RBVEFfRklGTyB8IE1FNDAwMF9BSV9DVFJMX0JJVF9MRV9JUlEgfAorCQkgTUU0MDAwX0FJX0NUUkxfQklUX0hGX0lSUSB8IE1FNDAwMF9BSV9DVFJMX0JJVF9TQ19JUlEgfAorCQkgTUU0MDAwX0FJX0NUUkxfQklUX1NDX1JFTE9BRCk7CisKKwltZTQwMDBfb3V0bCh0bXAsIGFpX2NvbnRleHQtPmN0cmxfcmVnKTsKKworCS8qIENsZWFyIGNpcmN1bGFyIGJ1ZmZlciAqLworCWFpX2NvbnRleHQtPmNpcmNfYnVmLmhlYWQgPSAwOworCWFpX2NvbnRleHQtPmNpcmNfYnVmLnRhaWwgPSAwOworCisJLyogRW5hYmxlIGRhdGEgZmlmbyAqLworCXRtcCB8PSBNRTQwMDBfQUlfQ1RSTF9CSVRfREFUQV9GSUZPOworCisJLyogRGV0ZXJtaW5lIGludGVycnVwdCBzZXR1cCAqLworCWlmIChhaV9jb250ZXh0LT5zYW1wbGVfY291bnRlciAmJiAhYWlfY29udGV4dC0+c2FtcGxlX2NvdW50ZXJfcmVsb2FkKSB7CisJCS8qIEVuYWJsZSBIYWxmIEZ1bGwgSW50ZXJydXB0IGFuZCBTYW1wbGUgQ291bnRlciBJbnRlcnJ1cHQgKi8KKwkJdG1wIHw9IE1FNDAwMF9BSV9DVFJMX0JJVF9TQ19JUlEgfCBNRTQwMDBfQUlfQ1RSTF9CSVRfSEZfSVJROworCX0gZWxzZSBpZiAoYWlfY29udGV4dC0+c2FtcGxlX2NvdW50ZXIKKwkJICAgJiYgYWlfY29udGV4dC0+c2FtcGxlX2NvdW50ZXJfcmVsb2FkKSB7CisJCWlmIChhaV9jb250ZXh0LT5zYW1wbGVfY291bnRlciA8PSBNRTQwMDBfQUlfRklGT19DT1VOVCAvIDIpIHsKKwkJCS8qIEVuYWJsZSBvbmx5IFNhbXBsZSBDb3VudGVyIEludGVycnVwdCAqLworCQkJdG1wIHw9CisJCQkgICAgTUU0MDAwX0FJX0NUUkxfQklUX1NDX0lSUSB8CisJCQkgICAgTUU0MDAwX0FJX0NUUkxfQklUX1NDX1JFTE9BRDsKKwkJfSBlbHNlIHsKKwkJCS8qIEVuYWJsZSBIYWxmIEZ1bGwgSW50ZXJydXB0IGFuZCBTYW1wbGUgQ291bnRlciBJbnRlcnJ1cHQgKi8KKwkJCXRtcCB8PQorCQkJICAgIE1FNDAwMF9BSV9DVFJMX0JJVF9TQ19JUlEgfAorCQkJICAgIE1FNDAwMF9BSV9DVFJMX0JJVF9IRl9JUlEgfAorCQkJICAgIE1FNDAwMF9BSV9DVFJMX0JJVF9TQ19SRUxPQUQ7CisJCX0KKwl9IGVsc2UgeworCQkvKiBFbmFibGUgb25seSBIYWxmIEZ1bGwgSW50ZXJydXB0ICovCisJCXRtcCB8PSBNRTQwMDBfQUlfQ1RSTF9CSVRfSEZfSVJROworCX0KKworCS8qIENsZWFyIHRoZSBzdG9wIGJpdHMgKi8KKwl0bXAgJj0gfihNRTQwMDBfQUlfQ1RSTF9CSVRfU1RPUCB8IE1FNDAwMF9BSV9DVFJMX0JJVF9JTU1FRElBVEVfU1RPUCk7CisKKwkvKiBXcml0ZSBzZXR1cCB0byBoYXJkd2FyZSAqLworCW1lNDAwMF9vdXRsKHRtcCwgYWlfY29udGV4dC0+Y3RybF9yZWcpOworCisJLyogV3JpdGUgc2FtcGxlIGNvdW50ZXIgKi8KKwltZTQwMDBfb3V0bChhaV9jb250ZXh0LT5zYW1wbGVfY291bnRlciwgYWlfY29udGV4dC0+c2FtcGxlX2NvdW50ZXJfcmVnKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG1lNDAwMF9haV9zdGFydChtZTQwMDBfYWlfY29udGV4dF90ICogYWlfY29udGV4dCkKK3sKKwlpbnQgZXJyOworCUNBTExfUERFQlVHKCJtZTQwMDBfYWlfc3RhcnQoKSBpcyBleGVjdXRlZFxuIik7CisKKwkvKiBQcmVwYXJlIEhhcmR3YXJlICovCisJZXJyID0gYWlfY29tbW9uX3N0YXJ0KGFpX2NvbnRleHQpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwkvKiBTdGFydCBjb252ZXJzaW9uIGJ5IGR1bW15IHJlYWQgKi8KKwltZTQwMDBfaW5sKGFpX2NvbnRleHQtPnN0YXJ0X3JlZyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtZTQwMDBfYWlfc3RhcnRfZXgodW5zaWduZWQgbG9uZyAqYXJnLAorCQkJICAgICAgbWU0MDAwX2FpX2NvbnRleHRfdCAqIGFpX2NvbnRleHQpCit7CisJaW50IGVycjsKKwl3YWl0X3F1ZXVlX2hlYWRfdCBxdWV1ZTsKKwl1bnNpZ25lZCBsb25nIHJlZjsKKwl1bnNpZ25lZCBsb25nIHRpbWVvdXQ7CisKKwlDQUxMX1BERUJVRygibWU0MDAwX2FpX3N0YXJ0X2V4KCkgaXMgZXhlY3V0ZWRcbiIpOworCisJaWYgKGdldF91c2VyKHRpbWVvdXQsIGFyZykpIHsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCSAgICAgICAibWU0MDAwX2FpX3N0YXJ0X2V4KCk6Q2Fubm90IGNvcHkgZGF0YSBmcm9tIHVzZXJcbiIpOworCQlyZXR1cm4gLUVGQVVMVDsKKwl9CisKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZxdWV1ZSk7CisKKwkvKiBQcmVwYXJlIEhhcmR3YXJlICovCisJZXJyID0gYWlfY29tbW9uX3N0YXJ0KGFpX2NvbnRleHQpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwlpZiAodGltZW91dCkgeworCQlyZWYgPSBqaWZmaWVzOworCQl3aGlsZSAoIQorCQkgICAgICAgKGlubChhaV9jb250ZXh0LT5zdGF0dXNfcmVnKSAmIE1FNDAwMF9BSV9TVEFUVVNfQklUX0ZTTSkpCisJCXsKKwkJCWludGVycnVwdGlibGVfc2xlZXBfb25fdGltZW91dCgmcXVldWUsIDEpOworCQkJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSB7CisJCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkJICAgICAgICJNRTQwMDA6bWU0MDAwX2FpX3N0YXJ0X2V4KCk6V2FpdCBvbiBzdGFydCBvZiBzdGF0ZSBtYWNoaW5lIGludGVycnVwdGVkXG4iKTsKKwkJCQlyZXR1cm4gLUVJTlRSOworCQkJfQorCQkJaWYgKCgoamlmZmllcyAtIHJlZikgPiAodGltZW91dCAqIEhaIC8gVVNFUl9IWikpKSB7CS8vIDIuNiBoYXMgZGlmZnJlbnQgZGVmaW5pdGlvbnMgZm9yIEhaIGluIHVzZXIgYW5kIGtlcm5lbCBzcGFjZQorCQkJCXByaW50ayhLRVJOX0VSUgorCQkJCSAgICAgICAiTUU0MDAwOm1lNDAwMF9haV9zdGFydF9leCgpOlRpbWVvdXQgcmVhY2hlZFxuIik7CisJCQkJcmV0dXJuIC1FSU87CisJCQl9CisJCX0KKwl9IGVsc2UgeworCQl3aGlsZSAoIQorCQkgICAgICAgKGlubChhaV9jb250ZXh0LT5zdGF0dXNfcmVnKSAmIE1FNDAwMF9BSV9TVEFUVVNfQklUX0ZTTSkpCisJCXsKKwkJCWludGVycnVwdGlibGVfc2xlZXBfb25fdGltZW91dCgmcXVldWUsIDEpOworCQkJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSB7CisJCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkJICAgICAgICJNRTQwMDA6bWU0MDAwX2FpX3N0YXJ0X2V4KCk6V2FpdCBvbiBzdGFydCBvZiBzdGF0ZSBtYWNoaW5lIGludGVycnVwdGVkXG4iKTsKKwkJCQlyZXR1cm4gLUVJTlRSOworCQkJfQorCQl9CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbWU0MDAwX2FpX3N0b3AobWU0MDAwX2FpX2NvbnRleHRfdCAqIGFpX2NvbnRleHQpCit7CisJd2FpdF9xdWV1ZV9oZWFkX3QgcXVldWU7CisJdTMyIHRtcDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJQ0FMTF9QREVCVUcoIm1lNDAwMF9haV9zdG9wKCkgaXMgZXhlY3V0ZWRcbiIpOworCisJaW5pdF93YWl0cXVldWVfaGVhZCgmcXVldWUpOworCisJLyogRGlzYWJsZSBpcnFzIGFuZCBjbGVhciBkYXRhIGZpZm8gKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSgmYWlfY29udGV4dC0+aW50X2xvY2ssIGZsYWdzKTsKKwl0bXAgPSBtZTQwMDBfaW5sKGFpX2NvbnRleHQtPmN0cmxfcmVnKTsKKwl0bXAgJj0KKwkgICAgfihNRTQwMDBfQUlfQ1RSTF9CSVRfSEZfSVJRIHwgTUU0MDAwX0FJX0NUUkxfQklUX1NDX0lSUSB8CisJICAgICAgTUU0MDAwX0FJX0NUUkxfQklUX0RBVEFfRklGTyk7CisJLyogU3RvcCBjb252ZXJzaW9uIG9mIHRoZSBzdGF0ZSBtYWNoaW5lICovCisJdG1wIHw9IE1FNDAwMF9BSV9DVFJMX0JJVF9TVE9QOworCW1lNDAwMF9vdXRsKHRtcCwgYWlfY29udGV4dC0+Y3RybF9yZWcpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFpX2NvbnRleHQtPmludF9sb2NrLCBmbGFncyk7CisKKwkvKiBDbGVhciBjaXJjdWxhciBidWZmZXIgKi8KKwlhaV9jb250ZXh0LT5jaXJjX2J1Zi5oZWFkID0gMDsKKwlhaV9jb250ZXh0LT5jaXJjX2J1Zi50YWlsID0gMDsKKworCXdoaWxlIChpbmwoYWlfY29udGV4dC0+c3RhdHVzX3JlZykgJiBNRTQwMDBfQUlfU1RBVFVTX0JJVF9GU00pIHsKKwkJaW50ZXJydXB0aWJsZV9zbGVlcF9vbl90aW1lb3V0KCZxdWV1ZSwgMSk7CisJCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkgeworCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkgICAgICAgIk1FNDAwMDptZTQwMDBfYWlfc3RvcCgpOldhaXQgb24gc3RhdGUgbWFjaGluZSBhZnRlciBzdG9wIGludGVycnVwdGVkXG4iKTsKKwkJCXJldHVybiAtRUlOVFI7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtZTQwMDBfYWlfaW1tZWRpYXRlX3N0b3AobWU0MDAwX2FpX2NvbnRleHRfdCAqIGFpX2NvbnRleHQpCit7CisJd2FpdF9xdWV1ZV9oZWFkX3QgcXVldWU7CisJdTMyIHRtcDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJQ0FMTF9QREVCVUcoIm1lNDAwMF9haV9zdG9wKCkgaXMgZXhlY3V0ZWRcbiIpOworCisJaW5pdF93YWl0cXVldWVfaGVhZCgmcXVldWUpOworCisJLyogRGlzYWJsZSBpcnFzIGFuZCBjbGVhciBkYXRhIGZpZm8gKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSgmYWlfY29udGV4dC0+aW50X2xvY2ssIGZsYWdzKTsKKwl0bXAgPSBtZTQwMDBfaW5sKGFpX2NvbnRleHQtPmN0cmxfcmVnKTsKKwl0bXAgJj0KKwkgICAgfihNRTQwMDBfQUlfQ1RSTF9CSVRfSEZfSVJRIHwgTUU0MDAwX0FJX0NUUkxfQklUX1NDX0lSUSB8CisJICAgICAgTUU0MDAwX0FJX0NUUkxfQklUX0RBVEFfRklGTyk7CisJLyogU3RvcCBjb252ZXJzaW9uIG9mIHRoZSBzdGF0ZSBtYWNoaW5lICovCisJdG1wIHw9IE1FNDAwMF9BSV9DVFJMX0JJVF9JTU1FRElBVEVfU1RPUDsKKwltZTQwMDBfb3V0bCh0bXAsIGFpX2NvbnRleHQtPmN0cmxfcmVnKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhaV9jb250ZXh0LT5pbnRfbG9jaywgZmxhZ3MpOworCisJLyogQ2xlYXIgY2lyY3VsYXIgYnVmZmVyICovCisJYWlfY29udGV4dC0+Y2lyY19idWYuaGVhZCA9IDA7CisJYWlfY29udGV4dC0+Y2lyY19idWYudGFpbCA9IDA7CisKKwl3aGlsZSAoaW5sKGFpX2NvbnRleHQtPnN0YXR1c19yZWcpICYgTUU0MDAwX0FJX1NUQVRVU19CSVRfRlNNKSB7CisJCWludGVycnVwdGlibGVfc2xlZXBfb25fdGltZW91dCgmcXVldWUsIDEpOworCQlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHsKKwkJCXByaW50ayhLRVJOX0VSUgorCQkJICAgICAgICJNRTQwMDA6bWU0MDAwX2FpX3N0b3AoKTpXYWl0IG9uIHN0YXRlIG1hY2hpbmUgYWZ0ZXIgc3RvcCBpbnRlcnJ1cHRlZFxuIik7CisJCQlyZXR1cm4gLUVJTlRSOworCQl9CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbWU0MDAwX2FpX2V4X3RyaWdfZW5hYmxlKG1lNDAwMF9haV9jb250ZXh0X3QgKiBhaV9jb250ZXh0KQoreworCXUzMiB0bXA7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCUNBTExfUERFQlVHKCJtZTQwMDBfYWlfZXhfdHJpZ19lbmFibGUoKSBpcyBleGVjdXRlZFxuIik7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmYWlfY29udGV4dC0+aW50X2xvY2ssIGZsYWdzKTsKKwl0bXAgPSBtZTQwMDBfaW5sKGFpX2NvbnRleHQtPmN0cmxfcmVnKTsKKwl0bXAgfD0gTUU0MDAwX0FJX0NUUkxfQklUX0VYX1RSSUc7CisJbWU0MDAwX291dGwodG1wLCBhaV9jb250ZXh0LT5jdHJsX3JlZyk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYWlfY29udGV4dC0+aW50X2xvY2ssIGZsYWdzKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG1lNDAwMF9haV9leF90cmlnX2Rpc2FibGUobWU0MDAwX2FpX2NvbnRleHRfdCAqIGFpX2NvbnRleHQpCit7CisJdTMyIHRtcDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJQ0FMTF9QREVCVUcoIm1lNDAwMF9haV9leF90cmlnX2Rpc2FibGUoKSBpcyBleGVjdXRlZFxuIik7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmYWlfY29udGV4dC0+aW50X2xvY2ssIGZsYWdzKTsKKwl0bXAgPSBtZTQwMDBfaW5sKGFpX2NvbnRleHQtPmN0cmxfcmVnKTsKKwl0bXAgJj0gfk1FNDAwMF9BSV9DVFJMX0JJVF9FWF9UUklHOworCW1lNDAwMF9vdXRsKHRtcCwgYWlfY29udGV4dC0+Y3RybF9yZWcpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFpX2NvbnRleHQtPmludF9sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtZTQwMDBfYWlfZXhfdHJpZ19zZXR1cChtZTQwMDBfYWlfdHJpZ2dlcl90ICogYXJnLAorCQkJCSAgIG1lNDAwMF9haV9jb250ZXh0X3QgKiBhaV9jb250ZXh0KQoreworCW1lNDAwMF9haV90cmlnZ2VyX3QgY21kOworCWludCBlcnI7CisJdTMyIHRtcDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJQ0FMTF9QREVCVUcoIm1lNDAwMF9haV9leF90cmlnX3NldHVwKCkgaXMgZXhlY3V0ZWRcbiIpOworCisJLyogQ29weSBkYXRhIGZyb20gdXNlciAqLworCWVyciA9IGNvcHlfZnJvbV91c2VyKCZjbWQsIGFyZywgc2l6ZW9mKG1lNDAwMF9haV90cmlnZ2VyX3QpKTsKKwlpZiAoZXJyKSB7CisJCXByaW50ayhLRVJOX0VSUgorCQkgICAgICAgIk1FNDAwMDptZTQwMDBfYWlfZXhfdHJpZ19zZXR1cCgpOkNhbid0IGNvcHkgZnJvbSB1c2VyIHNwYWNlXG4iKTsKKwkJcmV0dXJuIC1FRkFVTFQ7CisJfQorCisJc3Bpbl9sb2NrX2lycXNhdmUoJmFpX2NvbnRleHQtPmludF9sb2NrLCBmbGFncyk7CisJdG1wID0gbWU0MDAwX2lubChhaV9jb250ZXh0LT5jdHJsX3JlZyk7CisKKwlpZiAoY21kLm1vZGUgPT0gTUU0MDAwX0FJX1RSSUdHRVJfRVhUX0RJR0lUQUwpIHsKKwkJdG1wICY9IH5NRTQwMDBfQUlfQ1RSTF9CSVRfRVhfVFJJR19BTkFMT0c7CisJfSBlbHNlIGlmIChjbWQubW9kZSA9PSBNRTQwMDBfQUlfVFJJR0dFUl9FWFRfQU5BTE9HKSB7CisJCWlmICghYWlfY29udGV4dC0+Ym9hcmRfaW5mby0+Ym9hcmRfcC0+YWkuZXhfdHJpZ19hbmFsb2cpIHsKKwkJCXByaW50ayhLRVJOX0VSUgorCQkJICAgICAgICJNRTQwMDA6bWU0MDAwX2FpX2V4X3RyaWdfc2V0dXAoKTpObyBhbmFsb2cgdHJpZ2dlciBhdmFpbGFibGVcbiIpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwkJdG1wIHw9IE1FNDAwMF9BSV9DVFJMX0JJVF9FWF9UUklHX0FOQUxPRzsKKwl9IGVsc2UgeworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhaV9jb250ZXh0LT5pbnRfbG9jaywgZmxhZ3MpOworCQlwcmludGsoS0VSTl9FUlIKKwkJICAgICAgICJNRTQwMDA6bWU0MDAwX2FpX2V4X3RyaWdfc2V0dXAoKTpJbnZhbGlkIHRyaWdnZXIgbW9kZSBzcGVjaWZpZWRcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAoY21kLmVkZ2UgPT0gTUU0MDAwX0FJX1RSSUdHRVJfRVhUX0VER0VfUklTSU5HKSB7CisJCXRtcCAmPQorCQkgICAgfihNRTQwMDBfQUlfQ1RSTF9CSVRfRVhfVFJJR19CT1RIIHwKKwkJICAgICAgTUU0MDAwX0FJX0NUUkxfQklUX0VYX1RSSUdfRkFMTElORyk7CisJfSBlbHNlIGlmIChjbWQuZWRnZSA9PSBNRTQwMDBfQUlfVFJJR0dFUl9FWFRfRURHRV9GQUxMSU5HKSB7CisJCXRtcCB8PSBNRTQwMDBfQUlfQ1RSTF9CSVRfRVhfVFJJR19GQUxMSU5HOworCQl0bXAgJj0gfk1FNDAwMF9BSV9DVFJMX0JJVF9FWF9UUklHX0JPVEg7CisJfSBlbHNlIGlmIChjbWQuZWRnZSA9PSBNRTQwMDBfQUlfVFJJR0dFUl9FWFRfRURHRV9CT1RIKSB7CisJCXRtcCB8PQorCQkgICAgTUU0MDAwX0FJX0NUUkxfQklUX0VYX1RSSUdfQk9USCB8CisJCSAgICBNRTQwMDBfQUlfQ1RSTF9CSVRfRVhfVFJJR19GQUxMSU5HOworCX0gZWxzZSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFpX2NvbnRleHQtPmludF9sb2NrLCBmbGFncyk7CisJCXByaW50ayhLRVJOX0VSUgorCQkgICAgICAgIk1FNDAwMDptZTQwMDBfYWlfZXhfdHJpZ19zZXR1cCgpOkludmFsaWQgdHJpZ2dlciBlZGdlIHNwZWNpZmllZFxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCW1lNDAwMF9vdXRsKHRtcCwgYWlfY29udGV4dC0+Y3RybF9yZWcpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFpX2NvbnRleHQtPmludF9sb2NrLCBmbGFncyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbWU0MDAwX2FpX3NjX3NldHVwKG1lNDAwMF9haV9zY190ICogYXJnLAorCQkJICAgICAgbWU0MDAwX2FpX2NvbnRleHRfdCAqIGFpX2NvbnRleHQpCit7CisJbWU0MDAwX2FpX3NjX3QgY21kOworCWludCBlcnI7CisKKwlDQUxMX1BERUJVRygibWU0MDAwX2FpX3NjX3NldHVwKCkgaXMgZXhlY3V0ZWRcbiIpOworCisJLyogQ29weSBkYXRhIGZyb20gdXNlciAqLworCWVyciA9IGNvcHlfZnJvbV91c2VyKCZjbWQsIGFyZywgc2l6ZW9mKG1lNDAwMF9haV9zY190KSk7CisJaWYgKGVycikgeworCQlwcmludGsoS0VSTl9FUlIKKwkJICAgICAgICJNRTQwMDA6bWU0MDAwX2FpX3NjX3NldHVwKCk6Q2FuJ3QgY29weSBmcm9tIHVzZXIgc3BhY2VcbiIpOworCQlyZXR1cm4gLUVGQVVMVDsKKwl9CisKKwlhaV9jb250ZXh0LT5zYW1wbGVfY291bnRlciA9IGNtZC52YWx1ZTsKKwlhaV9jb250ZXh0LT5zYW1wbGVfY291bnRlcl9yZWxvYWQgPSBjbWQucmVsb2FkOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzc2l6ZV90IG1lNDAwMF9haV9yZWFkKHN0cnVjdCBmaWxlICpmaWxlcCwgY2hhciAqYnVmZiwgc2l6ZV90IGNudCwKKwkJCSAgICAgIGxvZmZfdCAqIG9mZnApCit7CisJbWU0MDAwX2FpX2NvbnRleHRfdCAqYWlfY29udGV4dCA9IGZpbGVwLT5wcml2YXRlX2RhdGE7CisJczE2ICpidWZmZXIgPSAoczE2ICopIGJ1ZmY7CisJc2l6ZV90IGNvdW50ID0gY250IC8gMjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCB0bXA7CisJaW50IGMgPSAwOworCWludCBrID0gMDsKKwlpbnQgcmV0ID0gMDsKKwl3YWl0X3F1ZXVlX3Qgd2FpdDsKKworCUNBTExfUERFQlVHKCJtZTQwMDBfYWlfcmVhZCgpIGlzIGV4ZWN1dGVkXG4iKTsKKworCWluaXRfd2FpdHF1ZXVlX2VudHJ5KCZ3YWl0LCBjdXJyZW50KTsKKworCS8qIENoZWNrIGNvdW50ICovCisJaWYgKGNvdW50IDw9IDApIHsKKwkJUERFQlVHKCJtZTQwMDBfYWlfcmVhZCgpOkNvdW50IGlzIDBcbiIpOworCQlyZXR1cm4gMDsKKwl9CisKKwl3aGlsZSAoY291bnQgPiAwKSB7CisJCWlmIChmaWxlcC0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spIHsKKwkJCWMgPSBtZTQwMDBfdmFsdWVzX3RvX2VuZChhaV9jb250ZXh0LT5jaXJjX2J1ZiwKKwkJCQkJCSBNRTQwMDBfQUlfQlVGRkVSX0NPVU5UKTsKKwkJCWlmICghYykgeworCQkJCVBERUJVRworCQkJCSAgICAoIm1lNDAwMF9haV9yZWFkKCk6UmV0dXJuaW5nIGZyb20gbm9uYmxvY2tpbmcgcmVhZFxuIik7CisJCQkJYnJlYWs7CisJCQl9CisJCX0gZWxzZSB7CisJCQkvKiBDaGVjayBpZiBjb252ZXJzaW9uIGlzIHN0aWxsIHJ1bm5pbmcgKi8KKwkJCWlmICghCisJCQkgICAgKG1lNDAwMF9pbmwoYWlfY29udGV4dC0+c3RhdHVzX3JlZykgJgorCQkJICAgICBNRTQwMDBfQUlfU1RBVFVTX0JJVF9GU00pKSB7CisJCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkJICAgICAgICJNRTQwMDA6bWU0MDAwX2FpX3JlYWQoKTpDb252ZXJzaW9uIGludGVycnVwdGVkXG4iKTsKKwkJCQlyZXR1cm4gLUVQSVBFOworCQkJfQorCisJCQl3YWl0X2V2ZW50X2ludGVycnVwdGlibGUoYWlfY29udGV4dC0+d2FpdF9xdWV1ZSwKKwkJCQkJCSAobWU0MDAwX3ZhbHVlc190b19lbmQKKwkJCQkJCSAgKGFpX2NvbnRleHQtPmNpcmNfYnVmLAorCQkJCQkJICAgTUU0MDAwX0FJX0JVRkZFUl9DT1VOVCkpKTsKKwkJCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkgeworCQkJCXByaW50ayhLRVJOX0VSUgorCQkJCSAgICAgICAiTUU0MDAwOm1lNDAwMF9haV9yZWFkKCk6V2FpdCBvbiB2YWx1ZXMgaW50ZXJydXB0ZWQgZnJvbSBzaWduYWxcbiIpOworCQkJCXJldHVybiAtRUlOVFI7CisJCQl9CisJCX0KKworCQkvKiBPbmx5IHJlYWQgY291bnQgdmFsdWVzIG9yIGFzIG11Y2ggYXMgYXZhaWxhYmxlICovCisJCWMgPSBtZTQwMDBfdmFsdWVzX3RvX2VuZChhaV9jb250ZXh0LT5jaXJjX2J1ZiwKKwkJCQkJIE1FNDAwMF9BSV9CVUZGRVJfQ09VTlQpOworCQlQREVCVUcoIm1lNDAwMF9haV9yZWFkKCk6JWQgdmFsdWVzIHRvIGVuZFxuIiwgYyk7CisJCWlmIChjb3VudCA8IGMpCisJCQljID0gY291bnQ7CisKKwkJUERFQlVHKCJtZTQwMDBfYWlfcmVhZCgpOkNvcHkgJWQgdmFsdWVzIHRvIHVzZXIgc3BhY2VcbiIsIGMpOworCQlrID0gMiAqIGM7CisJCWsgLT0gY29weV90b191c2VyKGJ1ZmZlciwKKwkJCQkgIGFpX2NvbnRleHQtPmNpcmNfYnVmLmJ1ZiArCisJCQkJICBhaV9jb250ZXh0LT5jaXJjX2J1Zi50YWlsLCBrKTsKKwkJYyA9IGsgLyAyOworCQlpZiAoIWMpIHsKKwkJCXByaW50ayhLRVJOX0VSUgorCQkJICAgICAgICJNRTQwMDA6bWU0MDAwX2FpX3JlYWQoKTpDYW5ub3QgY29weSBuZXcgdmFsdWVzIHRvIHVzZXJcbiIpOworCQkJcmV0dXJuIC1FRkFVTFQ7CisJCX0KKworCQlhaV9jb250ZXh0LT5jaXJjX2J1Zi50YWlsID0KKwkJICAgIChhaV9jb250ZXh0LT5jaXJjX2J1Zi50YWlsICsgYykgJiAoTUU0MDAwX0FJX0JVRkZFUl9DT1VOVCAtCisJCQkJCQkgICAgICAgMSk7CisJCWJ1ZmZlciArPSBjOworCQljb3VudCAtPSBjOworCQlyZXQgKz0gYzsKKworCQlzcGluX2xvY2tfaXJxc2F2ZSgmYWlfY29udGV4dC0+aW50X2xvY2ssIGZsYWdzKTsKKwkJaWYgKG1lNDAwMF9idWZfc3BhY2UKKwkJICAgIChhaV9jb250ZXh0LT5jaXJjX2J1ZiwgTUU0MDAwX0FJX0JVRkZFUl9DT1VOVCkpIHsKKwkJCXRtcCA9IG1lNDAwMF9pbmwoYWlfY29udGV4dC0+Y3RybF9yZWcpOworCisJCQkvKiBEZXRlcm1pbmUgaW50ZXJydXB0IHNldHVwICovCisJCQlpZiAoYWlfY29udGV4dC0+c2FtcGxlX2NvdW50ZXIKKwkJCSAgICAmJiAhYWlfY29udGV4dC0+c2FtcGxlX2NvdW50ZXJfcmVsb2FkKSB7CisJCQkJLyogRW5hYmxlIEhhbGYgRnVsbCBJbnRlcnJ1cHQgYW5kIFNhbXBsZSBDb3VudGVyIEludGVycnVwdCAqLworCQkJCXRtcCB8PQorCQkJCSAgICBNRTQwMDBfQUlfQ1RSTF9CSVRfU0NfSVJRIHwKKwkJCQkgICAgTUU0MDAwX0FJX0NUUkxfQklUX0hGX0lSUTsKKwkJCX0gZWxzZSBpZiAoYWlfY29udGV4dC0+c2FtcGxlX2NvdW50ZXIKKwkJCQkgICAmJiBhaV9jb250ZXh0LT5zYW1wbGVfY291bnRlcl9yZWxvYWQpIHsKKwkJCQlpZiAoYWlfY29udGV4dC0+c2FtcGxlX2NvdW50ZXIgPAorCQkJCSAgICBNRTQwMDBfQUlfRklGT19DT1VOVCAvIDIpIHsKKwkJCQkJLyogRW5hYmxlIG9ubHkgU2FtcGxlIENvdW50ZXIgSW50ZXJydXB0ICovCisJCQkJCXRtcCB8PSBNRTQwMDBfQUlfQ1RSTF9CSVRfU0NfSVJROworCQkJCX0gZWxzZSB7CisJCQkJCS8qIEVuYWJsZSBIYWxmIEZ1bGwgSW50ZXJydXB0IGFuZCBTYW1wbGUgQ291bnRlciBJbnRlcnJ1cHQgKi8KKwkJCQkJdG1wIHw9CisJCQkJCSAgICBNRTQwMDBfQUlfQ1RSTF9CSVRfU0NfSVJRIHwKKwkJCQkJICAgIE1FNDAwMF9BSV9DVFJMX0JJVF9IRl9JUlE7CisJCQkJfQorCQkJfSBlbHNlIHsKKwkJCQkvKiBFbmFibGUgb25seSBIYWxmIEZ1bGwgSW50ZXJydXB0ICovCisJCQkJdG1wIHw9IE1FNDAwMF9BSV9DVFJMX0JJVF9IRl9JUlE7CisJCQl9CisKKwkJCW1lNDAwMF9vdXRsKHRtcCwgYWlfY29udGV4dC0+Y3RybF9yZWcpOworCQl9CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFpX2NvbnRleHQtPmludF9sb2NrLCBmbGFncyk7CisJfQorCisJLyogQ2hlY2sgaWYgY29udmVyc2lvbiBpcyBzdGlsbCBydW5uaW5nICovCisJaWYgKCEobWU0MDAwX2lubChhaV9jb250ZXh0LT5zdGF0dXNfcmVnKSAmIE1FNDAwMF9BSV9TVEFUVVNfQklUX0ZTTSkpIHsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCSAgICAgICAiTUU0MDAwOm1lNDAwMF9haV9yZWFkKCk6Q29udmVyc2lvbiBub3QgcnVubmluZyBhZnRlciBjb21wbGV0ZSByZWFkXG4iKTsKKwkJcmV0dXJuIC1FUElQRTsKKwl9CisKKwlpZiAoZmlsZXAtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKSB7CisJCXJldHVybiAoayA9PSAwKSA/IC1FQUdBSU4gOiAyICogcmV0OworCX0KKworCUNBTExfUERFQlVHKCJtZTQwMDBfYWlfcmVhZCgpIGlzIGxlYXZlZFxuIik7CisJcmV0dXJuIHJldCAqIDI7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgbWU0MDAwX2FpX3BvbGwoc3RydWN0IGZpbGUgKmZpbGVfcCwgcG9sbF90YWJsZSAqIHdhaXQpCit7CisJbWU0MDAwX2FpX2NvbnRleHRfdCAqYWlfY29udGV4dDsKKwl1bnNpZ25lZCBsb25nIG1hc2sgPSAwOworCisJQ0FMTF9QREVCVUcoIm1lNDAwMF9haV9wb2xsKCkgaXMgZXhlY3V0ZWRcbiIpOworCisJYWlfY29udGV4dCA9IGZpbGVfcC0+cHJpdmF0ZV9kYXRhOworCisJLyogUmVnaXN0ZXIgd2FpdCBxdWV1ZSAqLworCXBvbGxfd2FpdChmaWxlX3AsICZhaV9jb250ZXh0LT53YWl0X3F1ZXVlLCB3YWl0KTsKKworCS8qIEdldCBhdmFpbGFibGUgdmFsdWVzICovCisJaWYgKG1lNDAwMF92YWx1ZXNfdG9fZW5kKGFpX2NvbnRleHQtPmNpcmNfYnVmLCBNRTQwMDBfQUlfQlVGRkVSX0NPVU5UKSkKKwkJbWFzayB8PSBQT0xMSU4gfCBQT0xMUkROT1JNOworCisJUERFQlVHKCJtZTQwMDBfYWlfcG9sbCgpOlJldHVybiBtYXNrICVsWFxuIiwgbWFzayk7CisKKwlyZXR1cm4gbWFzazsKK30KKworc3RhdGljIGludCBtZTQwMDBfYWlfb2Zmc2V0X2VuYWJsZShtZTQwMDBfYWlfY29udGV4dF90ICogYWlfY29udGV4dCkKK3sKKwl1bnNpZ25lZCBsb25nIHRtcDsKKworCUNBTExfUERFQlVHKCJtZTQwMDBfYWlfb2Zmc2V0X2VuYWJsZSgpIGlzIGV4ZWN1dGVkXG4iKTsKKworCXRtcCA9IG1lNDAwMF9pbmwoYWlfY29udGV4dC0+Y3RybF9yZWcpOworCXRtcCB8PSBNRTQwMDBfQUlfQ1RSTF9CSVRfT0ZGU0VUOworCW1lNDAwMF9vdXRsKHRtcCwgYWlfY29udGV4dC0+Y3RybF9yZWcpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbWU0MDAwX2FpX29mZnNldF9kaXNhYmxlKG1lNDAwMF9haV9jb250ZXh0X3QgKiBhaV9jb250ZXh0KQoreworCXVuc2lnbmVkIGxvbmcgdG1wOworCisJQ0FMTF9QREVCVUcoIm1lNDAwMF9haV9vZmZzZXRfZGlzYWJsZSgpIGlzIGV4ZWN1dGVkXG4iKTsKKworCXRtcCA9IG1lNDAwMF9pbmwoYWlfY29udGV4dC0+Y3RybF9yZWcpOworCXRtcCAmPSB+TUU0MDAwX0FJX0NUUkxfQklUX09GRlNFVDsKKwltZTQwMDBfb3V0bCh0bXAsIGFpX2NvbnRleHQtPmN0cmxfcmVnKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG1lNDAwMF9haV9mdWxsc2NhbGVfZW5hYmxlKG1lNDAwMF9haV9jb250ZXh0X3QgKiBhaV9jb250ZXh0KQoreworCXVuc2lnbmVkIGxvbmcgdG1wOworCisJQ0FMTF9QREVCVUcoIm1lNDAwMF9haV9mdWxsc2NhbGVfZW5hYmxlKCkgaXMgZXhlY3V0ZWRcbiIpOworCisJdG1wID0gbWU0MDAwX2lubChhaV9jb250ZXh0LT5jdHJsX3JlZyk7CisJdG1wIHw9IE1FNDAwMF9BSV9DVFJMX0JJVF9GVUxMU0NBTEU7CisJbWU0MDAwX291dGwodG1wLCBhaV9jb250ZXh0LT5jdHJsX3JlZyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtZTQwMDBfYWlfZnVsbHNjYWxlX2Rpc2FibGUobWU0MDAwX2FpX2NvbnRleHRfdCAqIGFpX2NvbnRleHQpCit7CisJdW5zaWduZWQgbG9uZyB0bXA7CisKKwlDQUxMX1BERUJVRygibWU0MDAwX2FpX2Z1bGxzY2FsZV9kaXNhYmxlKCkgaXMgZXhlY3V0ZWRcbiIpOworCisJdG1wID0gbWU0MDAwX2lubChhaV9jb250ZXh0LT5jdHJsX3JlZyk7CisJdG1wICY9IH5NRTQwMDBfQUlfQ1RSTF9CSVRfRlVMTFNDQUxFOworCW1lNDAwMF9vdXRsKHRtcCwgYWlfY29udGV4dC0+Y3RybF9yZWcpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbWU0MDAwX2FpX2ZzbV9zdGF0ZShpbnQgKmFyZywgbWU0MDAwX2FpX2NvbnRleHRfdCAqIGFpX2NvbnRleHQpCit7CisJdW5zaWduZWQgbG9uZyB0bXA7CisKKwlDQUxMX1BERUJVRygibWU0MDAwX2FpX2ZzbV9zdGF0ZSgpIGlzIGV4ZWN1dGVkXG4iKTsKKworCXRtcCA9CisJICAgIChtZTQwMDBfaW5sKGFpX2NvbnRleHQtPnN0YXR1c19yZWcpICYgTUU0MDAwX0FJX1NUQVRVU19CSVRfRlNNKSA/IDEKKwkgICAgOiAwOworCisJaWYgKHB1dF91c2VyKHRtcCwgYXJnKSkgeworCQlwcmludGsoS0VSTl9FUlIgIm1lNDAwMF9haV9mc21fc3RhdGUoKTpDYW5ub3QgY29weSB0byB1c2VyXG4iKTsKKwkJcmV0dXJuIC1FRkFVTFQ7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbWU0MDAwX2FpX2dldF9jb3VudF9idWZmZXIodW5zaWduZWQgbG9uZyAqYXJnLAorCQkJCSAgICAgIG1lNDAwMF9haV9jb250ZXh0X3QgKiBhaV9jb250ZXh0KQoreworCXVuc2lnbmVkIGxvbmcgYzsKKwlpbnQgZXJyOworCisJYyA9IG1lNDAwMF9idWZfY291bnQoYWlfY29udGV4dC0+Y2lyY19idWYsIE1FNDAwMF9BSV9CVUZGRVJfQ09VTlQpOworCisJZXJyID0gY29weV90b191c2VyKGFyZywgJmMsIHNpemVvZih1bnNpZ25lZCBsb25nKSk7CisJaWYgKGVycikgeworCQlwcmludGsoS0VSTl9FUlIKKwkJICAgICAgICJNRTQwMDA6bWU0MDAwX2FpX2dldF9jb3VudF9idWZmZXIoKTpDYW4ndCBjb3B5IHRvIHVzZXIgc3BhY2VcbiIpOworCQlyZXR1cm4gLUVGQVVMVDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEVFUFJPTSBzdHVmZiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW50IGVlcHJvbV93cml0ZV9jbWQobWU0MDAwX2FpX2NvbnRleHRfdCAqIGFpX2NvbnRleHQsIHVuc2lnbmVkIGxvbmcgY21kLAorCQkJICAgIGludCBsZW5ndGgpCit7CisJaW50IGk7CisJdW5zaWduZWQgbG9uZyB2YWx1ZTsKKworCUNBTExfUERFQlVHKCJlZXByb21fd3JpdGVfY21kKCkgaXMgZXhlY3V0ZWRcbiIpOworCisJUERFQlVHKCJlZXByb21fd3JpdGVfY21kKCk6V3JpdGUgY29tbWFuZCAweCUwOGxYIHdpdGggbGVuZ3RoID0gJWRcbiIsCisJICAgICAgIGNtZCwgbGVuZ3RoKTsKKworCS8qIEdldCB0aGUgSUNSIHJlZ2lzdGVyIGFuZCBjbGVhciB0aGUgcmVsYXRlZCBiaXRzICovCisJdmFsdWUgPSBtZTQwMDBfaW5sKGFpX2NvbnRleHQtPmJvYXJkX2luZm8tPnBseF9yZWdiYXNlICsgUExYX0lDUik7CisJdmFsdWUgJj0gfihQTFhfSUNSX01BU0tfRUVQUk9NKTsKKwltZTQwMDBfb3V0bCh2YWx1ZSwgYWlfY29udGV4dC0+Ym9hcmRfaW5mby0+cGx4X3JlZ2Jhc2UgKyBQTFhfSUNSKTsKKworCS8qIFJhaXNlIHRoZSBjaGlwIHNlbGVjdCAqLworCXZhbHVlIHw9IFBMWF9JQ1JfQklUX0VFUFJPTV9DSElQX1NFTEVDVDsKKwltZTQwMDBfb3V0bCh2YWx1ZSwgYWlfY29udGV4dC0+Ym9hcmRfaW5mby0+cGx4X3JlZ2Jhc2UgKyBQTFhfSUNSKTsKKwl1ZGVsYXkoRUVQUk9NX0RFTEFZKTsKKworCWZvciAoaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgeworCQlpZiAoY21kICYgKCgweDEgPDwgKGxlbmd0aCAtIDEpKSA+PiBpKSkgeworCQkJdmFsdWUgfD0gUExYX0lDUl9CSVRfRUVQUk9NX1dSSVRFOworCQl9IGVsc2UgeworCQkJdmFsdWUgJj0gflBMWF9JQ1JfQklUX0VFUFJPTV9XUklURTsKKwkJfQorCisJCS8qIFdyaXRlIHRvIEVFUFJPTSAqLworCQltZTQwMDBfb3V0bCh2YWx1ZSwKKwkJCSAgICBhaV9jb250ZXh0LT5ib2FyZF9pbmZvLT5wbHhfcmVnYmFzZSArIFBMWF9JQ1IpOworCQl1ZGVsYXkoRUVQUk9NX0RFTEFZKTsKKworCQkvKiBSYWlzaW5nIGVkZ2Ugb2YgdGhlIGNsb2NrICovCisJCXZhbHVlIHw9IFBMWF9JQ1JfQklUX0VFUFJPTV9DTE9DS19TRVQ7CisJCW1lNDAwMF9vdXRsKHZhbHVlLAorCQkJICAgIGFpX2NvbnRleHQtPmJvYXJkX2luZm8tPnBseF9yZWdiYXNlICsgUExYX0lDUik7CisJCXVkZWxheShFRVBST01fREVMQVkpOworCisJCS8qIEZhbGxpbmcgZWRnZSBvZiB0aGUgY2xvY2sgKi8KKwkJdmFsdWUgJj0gflBMWF9JQ1JfQklUX0VFUFJPTV9DTE9DS19TRVQ7CisJCW1lNDAwMF9vdXRsKHZhbHVlLAorCQkJICAgIGFpX2NvbnRleHQtPmJvYXJkX2luZm8tPnBseF9yZWdiYXNlICsgUExYX0lDUik7CisJCXVkZWxheShFRVBST01fREVMQVkpOworCX0KKworCS8qIENsZWFyIHRoZSBjaGlwIHNlbGVjdCAqLworCXZhbHVlICY9IH5QTFhfSUNSX0JJVF9FRVBST01fQ0hJUF9TRUxFQ1Q7CisJbWU0MDAwX291dGwodmFsdWUsIGFpX2NvbnRleHQtPmJvYXJkX2luZm8tPnBseF9yZWdiYXNlICsgUExYX0lDUik7CisJdWRlbGF5KEVFUFJPTV9ERUxBWSk7CisKKwkvKiBXYWl0IHVudGlsIGhhcmR3YXJlIGlzIHJlYWR5IGZvciBzdXJlICovCisJbWRlbGF5KDEwKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdW5zaWduZWQgc2hvcnQgZWVwcm9tX3JlYWRfY21kKG1lNDAwMF9haV9jb250ZXh0X3QgKiBhaV9jb250ZXh0LAorCQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgY21kLCBpbnQgbGVuZ3RoKQoreworCWludCBpOworCXVuc2lnbmVkIGxvbmcgdmFsdWU7CisJdW5zaWduZWQgc2hvcnQgaWQgPSAwOworCisJQ0FMTF9QREVCVUcoImVlcHJvbV9yZWFkX2NtZCgpIGlzIGV4ZWN1dGVkXG4iKTsKKworCVBERUJVRygiZWVwcm9tX3JlYWRfY21kKCk6UmVhZCBjb21tYW5kIDB4JTA4bFggd2l0aCBsZW5ndGggPSAlZFxuIiwgY21kLAorCSAgICAgICBsZW5ndGgpOworCisJLyogR2V0IHRoZSBJQ1IgcmVnaXN0ZXIgYW5kIGNsZWFyIHRoZSByZWxhdGVkIGJpdHMgKi8KKwl2YWx1ZSA9IG1lNDAwMF9pbmwoYWlfY29udGV4dC0+Ym9hcmRfaW5mby0+cGx4X3JlZ2Jhc2UgKyBQTFhfSUNSKTsKKwl2YWx1ZSAmPSB+KFBMWF9JQ1JfTUFTS19FRVBST00pOworCisJbWU0MDAwX291dGwodmFsdWUsIGFpX2NvbnRleHQtPmJvYXJkX2luZm8tPnBseF9yZWdiYXNlICsgUExYX0lDUik7CisKKwkvKiBSYWlzZSB0aGUgY2hpcCBzZWxlY3QgKi8KKwl2YWx1ZSB8PSBQTFhfSUNSX0JJVF9FRVBST01fQ0hJUF9TRUxFQ1Q7CisJbWU0MDAwX291dGwodmFsdWUsIGFpX2NvbnRleHQtPmJvYXJkX2luZm8tPnBseF9yZWdiYXNlICsgUExYX0lDUik7CisJdWRlbGF5KEVFUFJPTV9ERUxBWSk7CisKKwkvKiBXcml0ZSB0aGUgcmVhZCBjb21tYW5kIHRvIHRoZSBlZXByb20gKi8KKwlmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKKwkJaWYgKGNtZCAmICgoMHgxIDw8IChsZW5ndGggLSAxKSkgPj4gaSkpIHsKKwkJCXZhbHVlIHw9IFBMWF9JQ1JfQklUX0VFUFJPTV9XUklURTsKKwkJfSBlbHNlIHsKKwkJCXZhbHVlICY9IH5QTFhfSUNSX0JJVF9FRVBST01fV1JJVEU7CisJCX0KKwkJbWU0MDAwX291dGwodmFsdWUsCisJCQkgICAgYWlfY29udGV4dC0+Ym9hcmRfaW5mby0+cGx4X3JlZ2Jhc2UgKyBQTFhfSUNSKTsKKwkJdWRlbGF5KEVFUFJPTV9ERUxBWSk7CisKKwkJLyogUmFpc2luZyBlZGdlIG9mIHRoZSBjbG9jayAqLworCQl2YWx1ZSB8PSBQTFhfSUNSX0JJVF9FRVBST01fQ0xPQ0tfU0VUOworCQltZTQwMDBfb3V0bCh2YWx1ZSwKKwkJCSAgICBhaV9jb250ZXh0LT5ib2FyZF9pbmZvLT5wbHhfcmVnYmFzZSArIFBMWF9JQ1IpOworCQl1ZGVsYXkoRUVQUk9NX0RFTEFZKTsKKworCQkvKiBGYWxsaW5nIGVkZ2Ugb2YgdGhlIGNsb2NrICovCisJCXZhbHVlICY9IH5QTFhfSUNSX0JJVF9FRVBST01fQ0xPQ0tfU0VUOworCQltZTQwMDBfb3V0bCh2YWx1ZSwKKwkJCSAgICBhaV9jb250ZXh0LT5ib2FyZF9pbmZvLT5wbHhfcmVnYmFzZSArIFBMWF9JQ1IpOworCQl1ZGVsYXkoRUVQUk9NX0RFTEFZKTsKKwl9CisKKwkvKiBSZWFkIHRoZSB2YWx1ZSBmcm9tIHRoZSBlZXByb20gKi8KKwlmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykgeworCQkvKiBSYWlzaW5nIGVkZ2Ugb2YgdGhlIGNsb2NrICovCisJCXZhbHVlIHw9IFBMWF9JQ1JfQklUX0VFUFJPTV9DTE9DS19TRVQ7CisJCW1lNDAwMF9vdXRsKHZhbHVlLAorCQkJICAgIGFpX2NvbnRleHQtPmJvYXJkX2luZm8tPnBseF9yZWdiYXNlICsgUExYX0lDUik7CisJCXVkZWxheShFRVBST01fREVMQVkpOworCisJCWlmIChtZTQwMDBfaW5sKGFpX2NvbnRleHQtPmJvYXJkX2luZm8tPnBseF9yZWdiYXNlICsgUExYX0lDUikgJgorCQkgICAgUExYX0lDUl9CSVRfRUVQUk9NX1JFQUQpIHsKKwkJCWlkIHw9ICgweDgwMDAgPj4gaSk7CisJCQlQREVCVUcoImVlcHJvbV9yZWFkX2NtZCgpOk9SIHdpdGggMHglMDRYXG4iLAorCQkJICAgICAgICgweDgwMDAgPj4gaSkpOworCQl9IGVsc2UgeworCQkJUERFQlVHKCJlZXByb21fcmVhZF9jbWQoKTpEb250J3QgT1JcbiIpOworCQl9CisKKwkJLyogRmFsbGluZyBlZGdlIG9mIHRoZSBjbG9jayAqLworCQl2YWx1ZSAmPSB+UExYX0lDUl9CSVRfRUVQUk9NX0NMT0NLX1NFVDsKKwkJbWU0MDAwX291dGwodmFsdWUsCisJCQkgICAgYWlfY29udGV4dC0+Ym9hcmRfaW5mby0+cGx4X3JlZ2Jhc2UgKyBQTFhfSUNSKTsKKwkJdWRlbGF5KEVFUFJPTV9ERUxBWSk7CisJfQorCisJLyogQ2xlYXIgdGhlIGNoaXAgc2VsZWN0ICovCisJdmFsdWUgJj0gflBMWF9JQ1JfQklUX0VFUFJPTV9DSElQX1NFTEVDVDsKKwltZTQwMDBfb3V0bCh2YWx1ZSwgYWlfY29udGV4dC0+Ym9hcmRfaW5mby0+cGx4X3JlZ2Jhc2UgKyBQTFhfSUNSKTsKKwl1ZGVsYXkoRUVQUk9NX0RFTEFZKTsKKworCXJldHVybiBpZDsKK30KKworc3RhdGljIGludCBtZTQwMDBfZWVwcm9tX3dyaXRlKG1lNDAwMF9lZXByb21fdCAqIGFyZywKKwkJCSAgICAgICBtZTQwMDBfYWlfY29udGV4dF90ICogYWlfY29udGV4dCkKK3sKKwlpbnQgZXJyOworCW1lNDAwMF9lZXByb21fdCBzZXR1cDsKKwl1bnNpZ25lZCBsb25nIGNtZDsKKwl1bnNpZ25lZCBsb25nIGRhdGVfaGlnaDsKKwl1bnNpZ25lZCBsb25nIGRhdGVfbG93OworCisJQ0FMTF9QREVCVUcoIm1lNDAwMF9lZXByb21fd3JpdGUoKSBpcyBleGVjdXRlZFxuIik7CisKKwllcnIgPSBjb3B5X2Zyb21fdXNlcigmc2V0dXAsIGFyZywgc2l6ZW9mKHNldHVwKSk7CisJaWYgKGVycikgeworCQlwcmludGsoS0VSTl9FUlIKKwkJICAgICAgICJNRTQwMDA6bWU0MDAwX2VlcHJvbV93cml0ZSgpOkNhbm5vdCBjb3B5IGZyb20gdXNlclxuIik7CisJCXJldHVybiBlcnI7CisJfQorCisJLyogRW5hYmxlIHdyaXRpbmcgKi8KKwllZXByb21fd3JpdGVfY21kKGFpX2NvbnRleHQsIE1FNDAwMF9FRVBST01fQ01EX1dSSVRFX0VOQUJMRSwKKwkJCSBNRTQwMDBfRUVQUk9NX0NNRF9MRU5HVEhfV1JJVEVfRU5BQkxFKTsKKworCS8qIENvbW1hbmQgZm9yIGRhdGUgKi8KKwlkYXRlX2hpZ2ggPSAoc2V0dXAuZGF0ZSAmIDB4RkZGRjAwMDApID4+IDE2OworCWRhdGVfbG93ID0gKHNldHVwLmRhdGUgJiAweDAwMDBGRkZGKTsKKworCWNtZCA9CisJICAgIE1FNDAwMF9FRVBST01fQ01EX1dSSVRFIHwgKE1FNDAwMF9FRVBST01fQURSX0RBVEVfSElHSCA8PAorCQkJCSAgICAgICBNRTQwMDBfRUVQUk9NX0RBVEFfTEVOR1RIKSB8ICgweEZGRkYgJgorCQkJCQkJCQkgICAgICh1bnNpZ25lZAorCQkJCQkJCQkgICAgICBsb25nKQorCQkJCQkJCQkgICAgIGRhdGVfaGlnaCk7CisJZXJyID0gZWVwcm9tX3dyaXRlX2NtZChhaV9jb250ZXh0LCBjbWQsIE1FNDAwMF9FRVBST01fQ01EX0xFTkdUSF9XUklURSk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCWNtZCA9CisJICAgIE1FNDAwMF9FRVBST01fQ01EX1dSSVRFIHwgKE1FNDAwMF9FRVBST01fQURSX0RBVEVfTE9XIDw8CisJCQkJICAgICAgIE1FNDAwMF9FRVBST01fREFUQV9MRU5HVEgpIHwgKDB4RkZGRiAmCisJCQkJCQkJCSAgICAgKHVuc2lnbmVkCisJCQkJCQkJCSAgICAgIGxvbmcpCisJCQkJCQkJCSAgICAgZGF0ZV9sb3cpOworCWVyciA9IGVlcHJvbV93cml0ZV9jbWQoYWlfY29udGV4dCwgY21kLCBNRTQwMDBfRUVQUk9NX0NNRF9MRU5HVEhfV1JJVEUpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwkvKiBDb21tYW5kIGZvciB1bmlwb2xhciAxMFYgb2Zmc2V0ICovCisJY21kID0KKwkgICAgTUU0MDAwX0VFUFJPTV9DTURfV1JJVEUgfCAoTUU0MDAwX0VFUFJPTV9BRFJfR0FJTl8xX1VOSV9PRkZTRVQgPDwKKwkJCQkgICAgICAgTUU0MDAwX0VFUFJPTV9EQVRBX0xFTkdUSCkgfCAoMHhGRkZGICYKKwkJCQkJCQkJICAgICAodW5zaWduZWQKKwkJCQkJCQkJICAgICAgbG9uZykKKwkJCQkJCQkJICAgICBzZXR1cC4KKwkJCQkJCQkJICAgICB1bmlfMTBfb2Zmc2V0KTsKKwllcnIgPSBlZXByb21fd3JpdGVfY21kKGFpX2NvbnRleHQsIGNtZCwgTUU0MDAwX0VFUFJPTV9DTURfTEVOR1RIX1dSSVRFKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJLyogQ29tbWFuZCBmb3IgdW5pcG9sYXIgMTBWIGZ1bGxzY2FsZSAqLworCWNtZCA9CisJICAgIE1FNDAwMF9FRVBST01fQ01EX1dSSVRFIHwgKE1FNDAwMF9FRVBST01fQURSX0dBSU5fMV9VTklfRlVMTFNDQUxFIDw8CisJCQkJICAgICAgIE1FNDAwMF9FRVBST01fREFUQV9MRU5HVEgpIHwgKDB4RkZGRiAmCisJCQkJCQkJCSAgICAgKHVuc2lnbmVkCisJCQkJCQkJCSAgICAgIGxvbmcpCisJCQkJCQkJCSAgICAgc2V0dXAuCisJCQkJCQkJCSAgICAgdW5pXzEwX2Z1bGxzY2FsZSk7CisJZXJyID0gZWVwcm9tX3dyaXRlX2NtZChhaV9jb250ZXh0LCBjbWQsIE1FNDAwMF9FRVBST01fQ01EX0xFTkdUSF9XUklURSk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCS8qIENvbW1hbmQgZm9yIHVuaXBvbGFyIDIsNVYgb2Zmc2V0ICovCisJY21kID0KKwkgICAgTUU0MDAwX0VFUFJPTV9DTURfV1JJVEUgfCAoTUU0MDAwX0VFUFJPTV9BRFJfR0FJTl80X1VOSV9PRkZTRVQgPDwKKwkJCQkgICAgICAgTUU0MDAwX0VFUFJPTV9EQVRBX0xFTkdUSCkgfCAoMHhGRkZGICYKKwkJCQkJCQkJICAgICAodW5zaWduZWQKKwkJCQkJCQkJICAgICAgbG9uZykKKwkJCQkJCQkJICAgICBzZXR1cC4KKwkJCQkJCQkJICAgICB1bmlfMl81X29mZnNldCk7CisJZXJyID0gZWVwcm9tX3dyaXRlX2NtZChhaV9jb250ZXh0LCBjbWQsIE1FNDAwMF9FRVBST01fQ01EX0xFTkdUSF9XUklURSk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCS8qIENvbW1hbmQgZm9yIHVuaXBvbGFyIDIsNVYgZnVsbHNjYWxlICovCisJY21kID0KKwkgICAgTUU0MDAwX0VFUFJPTV9DTURfV1JJVEUgfCAoTUU0MDAwX0VFUFJPTV9BRFJfR0FJTl80X1VOSV9GVUxMU0NBTEUgPDwKKwkJCQkgICAgICAgTUU0MDAwX0VFUFJPTV9EQVRBX0xFTkdUSCkgfCAoMHhGRkZGICYKKwkJCQkJCQkJICAgICAodW5zaWduZWQKKwkJCQkJCQkJICAgICAgbG9uZykKKwkJCQkJCQkJICAgICBzZXR1cC4KKwkJCQkJCQkJICAgICB1bmlfMl81X2Z1bGxzY2FsZSk7CisJZXJyID0gZWVwcm9tX3dyaXRlX2NtZChhaV9jb250ZXh0LCBjbWQsIE1FNDAwMF9FRVBST01fQ01EX0xFTkdUSF9XUklURSk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCS8qIENvbW1hbmQgZm9yIGJpcG9sYXIgMTBWIG9mZnNldCAqLworCWNtZCA9CisJICAgIE1FNDAwMF9FRVBST01fQ01EX1dSSVRFIHwgKE1FNDAwMF9FRVBST01fQURSX0dBSU5fMV9CSV9PRkZTRVQgPDwKKwkJCQkgICAgICAgTUU0MDAwX0VFUFJPTV9EQVRBX0xFTkdUSCkgfCAoMHhGRkZGICYKKwkJCQkJCQkJICAgICAodW5zaWduZWQKKwkJCQkJCQkJICAgICAgbG9uZykKKwkJCQkJCQkJICAgICBzZXR1cC4KKwkJCQkJCQkJICAgICBiaV8xMF9vZmZzZXQpOworCWVyciA9IGVlcHJvbV93cml0ZV9jbWQoYWlfY29udGV4dCwgY21kLCBNRTQwMDBfRUVQUk9NX0NNRF9MRU5HVEhfV1JJVEUpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwkvKiBDb21tYW5kIGZvciBiaXBvbGFyIDEwViBmdWxsc2NhbGUgKi8KKwljbWQgPQorCSAgICBNRTQwMDBfRUVQUk9NX0NNRF9XUklURSB8IChNRTQwMDBfRUVQUk9NX0FEUl9HQUlOXzFfQklfRlVMTFNDQUxFIDw8CisJCQkJICAgICAgIE1FNDAwMF9FRVBST01fREFUQV9MRU5HVEgpIHwgKDB4RkZGRiAmCisJCQkJCQkJCSAgICAgKHVuc2lnbmVkCisJCQkJCQkJCSAgICAgIGxvbmcpCisJCQkJCQkJCSAgICAgc2V0dXAuCisJCQkJCQkJCSAgICAgYmlfMTBfZnVsbHNjYWxlKTsKKwllcnIgPSBlZXByb21fd3JpdGVfY21kKGFpX2NvbnRleHQsIGNtZCwgTUU0MDAwX0VFUFJPTV9DTURfTEVOR1RIX1dSSVRFKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJLyogQ29tbWFuZCBmb3IgYmlwb2xhciAyLDVWIG9mZnNldCAqLworCWNtZCA9CisJICAgIE1FNDAwMF9FRVBST01fQ01EX1dSSVRFIHwgKE1FNDAwMF9FRVBST01fQURSX0dBSU5fNF9CSV9PRkZTRVQgPDwKKwkJCQkgICAgICAgTUU0MDAwX0VFUFJPTV9EQVRBX0xFTkdUSCkgfCAoMHhGRkZGICYKKwkJCQkJCQkJICAgICAodW5zaWduZWQKKwkJCQkJCQkJICAgICAgbG9uZykKKwkJCQkJCQkJICAgICBzZXR1cC4KKwkJCQkJCQkJICAgICBiaV8yXzVfb2Zmc2V0KTsKKwllcnIgPSBlZXByb21fd3JpdGVfY21kKGFpX2NvbnRleHQsIGNtZCwgTUU0MDAwX0VFUFJPTV9DTURfTEVOR1RIX1dSSVRFKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJLyogQ29tbWFuZCBmb3IgYmlwb2xhciAyLDVWIGZ1bGxzY2FsZSAqLworCWNtZCA9CisJICAgIE1FNDAwMF9FRVBST01fQ01EX1dSSVRFIHwgKE1FNDAwMF9FRVBST01fQURSX0dBSU5fNF9CSV9GVUxMU0NBTEUgPDwKKwkJCQkgICAgICAgTUU0MDAwX0VFUFJPTV9EQVRBX0xFTkdUSCkgfCAoMHhGRkZGICYKKwkJCQkJCQkJICAgICAodW5zaWduZWQKKwkJCQkJCQkJICAgICAgbG9uZykKKwkJCQkJCQkJICAgICBzZXR1cC4KKwkJCQkJCQkJICAgICBiaV8yXzVfZnVsbHNjYWxlKTsKKwllcnIgPSBlZXByb21fd3JpdGVfY21kKGFpX2NvbnRleHQsIGNtZCwgTUU0MDAwX0VFUFJPTV9DTURfTEVOR1RIX1dSSVRFKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJLyogQ29tbWFuZCBmb3IgZGlmZmVyZW50aWFsIDEwViBvZmZzZXQgKi8KKwljbWQgPQorCSAgICBNRTQwMDBfRUVQUk9NX0NNRF9XUklURSB8IChNRTQwMDBfRUVQUk9NX0FEUl9HQUlOXzFfRElGRl9PRkZTRVQgPDwKKwkJCQkgICAgICAgTUU0MDAwX0VFUFJPTV9EQVRBX0xFTkdUSCkgfCAoMHhGRkZGICYKKwkJCQkJCQkJICAgICAodW5zaWduZWQKKwkJCQkJCQkJICAgICAgbG9uZykKKwkJCQkJCQkJICAgICBzZXR1cC4KKwkJCQkJCQkJICAgICBkaWZmXzEwX29mZnNldCk7CisJZXJyID0gZWVwcm9tX3dyaXRlX2NtZChhaV9jb250ZXh0LCBjbWQsIE1FNDAwMF9FRVBST01fQ01EX0xFTkdUSF9XUklURSk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCS8qIENvbW1hbmQgZm9yIGRpZmZlcmVudGlhbCAxMFYgZnVsbHNjYWxlICovCisJY21kID0KKwkgICAgTUU0MDAwX0VFUFJPTV9DTURfV1JJVEUgfCAoTUU0MDAwX0VFUFJPTV9BRFJfR0FJTl8xX0RJRkZfRlVMTFNDQUxFCisJCQkJICAgICAgIDw8IE1FNDAwMF9FRVBST01fREFUQV9MRU5HVEgpIHwgKDB4RkZGRiAmCisJCQkJCQkJCQkodW5zaWduZWQKKwkJCQkJCQkJCSBsb25nKQorCQkJCQkJCQkJc2V0dXAuCisJCQkJCQkJCQlkaWZmXzEwX2Z1bGxzY2FsZSk7CisJZXJyID0gZWVwcm9tX3dyaXRlX2NtZChhaV9jb250ZXh0LCBjbWQsIE1FNDAwMF9FRVBST01fQ01EX0xFTkdUSF9XUklURSk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCS8qIENvbW1hbmQgZm9yIGRpZmZlcmVudGlhbCAyLDVWIG9mZnNldCAqLworCWNtZCA9CisJICAgIE1FNDAwMF9FRVBST01fQ01EX1dSSVRFIHwgKE1FNDAwMF9FRVBST01fQURSX0dBSU5fNF9ESUZGX09GRlNFVCA8PAorCQkJCSAgICAgICBNRTQwMDBfRUVQUk9NX0RBVEFfTEVOR1RIKSB8ICgweEZGRkYgJgorCQkJCQkJCQkgICAgICh1bnNpZ25lZAorCQkJCQkJCQkgICAgICBsb25nKQorCQkJCQkJCQkgICAgIHNldHVwLgorCQkJCQkJCQkgICAgIGRpZmZfMl81X29mZnNldCk7CisJZXJyID0gZWVwcm9tX3dyaXRlX2NtZChhaV9jb250ZXh0LCBjbWQsIE1FNDAwMF9FRVBST01fQ01EX0xFTkdUSF9XUklURSk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCS8qIENvbW1hbmQgZm9yIGRpZmZlcmVudGlhbCAyLDVWIGZ1bGxzY2FsZSAqLworCWNtZCA9CisJICAgIE1FNDAwMF9FRVBST01fQ01EX1dSSVRFIHwgKE1FNDAwMF9FRVBST01fQURSX0dBSU5fNF9ESUZGX0ZVTExTQ0FMRQorCQkJCSAgICAgICA8PCBNRTQwMDBfRUVQUk9NX0RBVEFfTEVOR1RIKSB8ICgweEZGRkYgJgorCQkJCQkJCQkJKHVuc2lnbmVkCisJCQkJCQkJCQkgbG9uZykKKwkJCQkJCQkJCXNldHVwLgorCQkJCQkJCQkJZGlmZl8yXzVfZnVsbHNjYWxlKTsKKwllcnIgPSBlZXByb21fd3JpdGVfY21kKGFpX2NvbnRleHQsIGNtZCwgTUU0MDAwX0VFUFJPTV9DTURfTEVOR1RIX1dSSVRFKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJLyogRGlzYWJsZSB3cml0aW5nICovCisJZWVwcm9tX3dyaXRlX2NtZChhaV9jb250ZXh0LCBNRTQwMDBfRUVQUk9NX0NNRF9XUklURV9ESVNBQkxFLAorCQkJIE1FNDAwMF9FRVBST01fQ01EX0xFTkdUSF9XUklURV9ESVNBQkxFKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG1lNDAwMF9lZXByb21fcmVhZChtZTQwMDBfZWVwcm9tX3QgKiBhcmcsCisJCQkgICAgICBtZTQwMDBfYWlfY29udGV4dF90ICogYWlfY29udGV4dCkKK3sKKwlpbnQgZXJyOworCXVuc2lnbmVkIGxvbmcgY21kOworCW1lNDAwMF9lZXByb21fdCBzZXR1cDsKKworCUNBTExfUERFQlVHKCJtZTQwMDBfZWVwcm9tX3JlYWQoKSBpcyBleGVjdXRlZFxuIik7CisKKwkvKiBDb21tYW5kIGZvciBkYXRlICovCisJY21kID0gTUU0MDAwX0VFUFJPTV9DTURfUkVBRCB8IE1FNDAwMF9FRVBST01fQURSX0RBVEVfSElHSDsKKwlzZXR1cC5kYXRlID0KKwkgICAgZWVwcm9tX3JlYWRfY21kKGFpX2NvbnRleHQsIGNtZCwgTUU0MDAwX0VFUFJPTV9DTURfTEVOR1RIX1JFQUQpOworCXNldHVwLmRhdGUgPDw9IDE2OworCWNtZCA9IE1FNDAwMF9FRVBST01fQ01EX1JFQUQgfCBNRTQwMDBfRUVQUk9NX0FEUl9EQVRFX0xPVzsKKwlzZXR1cC5kYXRlIHw9CisJICAgIGVlcHJvbV9yZWFkX2NtZChhaV9jb250ZXh0LCBjbWQsIE1FNDAwMF9FRVBST01fQ01EX0xFTkdUSF9SRUFEKTsKKworCS8qIENvbW1hbmQgZm9yIHVuaXBvbGFyIDEwViBvZmZzZXQgKi8KKwljbWQgPSBNRTQwMDBfRUVQUk9NX0NNRF9SRUFEIHwgTUU0MDAwX0VFUFJPTV9BRFJfR0FJTl8xX1VOSV9PRkZTRVQ7CisJc2V0dXAudW5pXzEwX29mZnNldCA9CisJICAgIGVlcHJvbV9yZWFkX2NtZChhaV9jb250ZXh0LCBjbWQsIE1FNDAwMF9FRVBST01fQ01EX0xFTkdUSF9SRUFEKTsKKworCS8qIENvbW1hbmQgZm9yIHVuaXBvbGFyIDEwViBmdWxsc2NhbGUgKi8KKwljbWQgPSBNRTQwMDBfRUVQUk9NX0NNRF9SRUFEIHwgTUU0MDAwX0VFUFJPTV9BRFJfR0FJTl8xX1VOSV9GVUxMU0NBTEU7CisJc2V0dXAudW5pXzEwX2Z1bGxzY2FsZSA9CisJICAgIGVlcHJvbV9yZWFkX2NtZChhaV9jb250ZXh0LCBjbWQsIE1FNDAwMF9FRVBST01fQ01EX0xFTkdUSF9SRUFEKTsKKworCS8qIENvbW1hbmQgZm9yIHVuaXBvbGFyIDIsNVYgb2Zmc2V0ICovCisJY21kID0gTUU0MDAwX0VFUFJPTV9DTURfUkVBRCB8IE1FNDAwMF9FRVBST01fQURSX0dBSU5fNF9VTklfT0ZGU0VUOworCXNldHVwLnVuaV8yXzVfb2Zmc2V0ID0KKwkgICAgZWVwcm9tX3JlYWRfY21kKGFpX2NvbnRleHQsIGNtZCwgTUU0MDAwX0VFUFJPTV9DTURfTEVOR1RIX1JFQUQpOworCisJLyogQ29tbWFuZCBmb3IgdW5pcG9sYXIgMiw1ViBmdWxsc2NhbGUgKi8KKwljbWQgPSBNRTQwMDBfRUVQUk9NX0NNRF9SRUFEIHwgTUU0MDAwX0VFUFJPTV9BRFJfR0FJTl80X1VOSV9GVUxMU0NBTEU7CisJc2V0dXAudW5pXzJfNV9mdWxsc2NhbGUgPQorCSAgICBlZXByb21fcmVhZF9jbWQoYWlfY29udGV4dCwgY21kLCBNRTQwMDBfRUVQUk9NX0NNRF9MRU5HVEhfUkVBRCk7CisKKwkvKiBDb21tYW5kIGZvciBiaXBvbGFyIDEwViBvZmZzZXQgKi8KKwljbWQgPSBNRTQwMDBfRUVQUk9NX0NNRF9SRUFEIHwgTUU0MDAwX0VFUFJPTV9BRFJfR0FJTl8xX0JJX09GRlNFVDsKKwlzZXR1cC5iaV8xMF9vZmZzZXQgPQorCSAgICBlZXByb21fcmVhZF9jbWQoYWlfY29udGV4dCwgY21kLCBNRTQwMDBfRUVQUk9NX0NNRF9MRU5HVEhfUkVBRCk7CisKKwkvKiBDb21tYW5kIGZvciBiaXBvbGFyIDEwViBmdWxsc2NhbGUgKi8KKwljbWQgPSBNRTQwMDBfRUVQUk9NX0NNRF9SRUFEIHwgTUU0MDAwX0VFUFJPTV9BRFJfR0FJTl8xX0JJX0ZVTExTQ0FMRTsKKwlzZXR1cC5iaV8xMF9mdWxsc2NhbGUgPQorCSAgICBlZXByb21fcmVhZF9jbWQoYWlfY29udGV4dCwgY21kLCBNRTQwMDBfRUVQUk9NX0NNRF9MRU5HVEhfUkVBRCk7CisKKwkvKiBDb21tYW5kIGZvciBiaXBvbGFyIDIsNVYgb2Zmc2V0ICovCisJY21kID0gTUU0MDAwX0VFUFJPTV9DTURfUkVBRCB8IE1FNDAwMF9FRVBST01fQURSX0dBSU5fNF9CSV9PRkZTRVQ7CisJc2V0dXAuYmlfMl81X29mZnNldCA9CisJICAgIGVlcHJvbV9yZWFkX2NtZChhaV9jb250ZXh0LCBjbWQsIE1FNDAwMF9FRVBST01fQ01EX0xFTkdUSF9SRUFEKTsKKworCS8qIENvbW1hbmQgZm9yIGJpcG9sYXIgMiw1ViBmdWxsc2NhbGUgKi8KKwljbWQgPSBNRTQwMDBfRUVQUk9NX0NNRF9SRUFEIHwgTUU0MDAwX0VFUFJPTV9BRFJfR0FJTl80X0JJX0ZVTExTQ0FMRTsKKwlzZXR1cC5iaV8yXzVfZnVsbHNjYWxlID0KKwkgICAgZWVwcm9tX3JlYWRfY21kKGFpX2NvbnRleHQsIGNtZCwgTUU0MDAwX0VFUFJPTV9DTURfTEVOR1RIX1JFQUQpOworCisJLyogQ29tbWFuZCBmb3IgZGlmZmVybnRpYWwgMTBWIG9mZnNldCAqLworCWNtZCA9IE1FNDAwMF9FRVBST01fQ01EX1JFQUQgfCBNRTQwMDBfRUVQUk9NX0FEUl9HQUlOXzFfRElGRl9PRkZTRVQ7CisJc2V0dXAuZGlmZl8xMF9vZmZzZXQgPQorCSAgICBlZXByb21fcmVhZF9jbWQoYWlfY29udGV4dCwgY21kLCBNRTQwMDBfRUVQUk9NX0NNRF9MRU5HVEhfUkVBRCk7CisKKwkvKiBDb21tYW5kIGZvciBkaWZmZXJlbnRpYWwgMTBWIGZ1bGxzY2FsZSAqLworCWNtZCA9IE1FNDAwMF9FRVBST01fQ01EX1JFQUQgfCBNRTQwMDBfRUVQUk9NX0FEUl9HQUlOXzFfRElGRl9GVUxMU0NBTEU7CisJc2V0dXAuZGlmZl8xMF9mdWxsc2NhbGUgPQorCSAgICBlZXByb21fcmVhZF9jbWQoYWlfY29udGV4dCwgY21kLCBNRTQwMDBfRUVQUk9NX0NNRF9MRU5HVEhfUkVBRCk7CisKKwkvKiBDb21tYW5kIGZvciBkaWZmZXJudGlhbCAyLDVWIG9mZnNldCAqLworCWNtZCA9IE1FNDAwMF9FRVBST01fQ01EX1JFQUQgfCBNRTQwMDBfRUVQUk9NX0FEUl9HQUlOXzRfRElGRl9PRkZTRVQ7CisJc2V0dXAuZGlmZl8yXzVfb2Zmc2V0ID0KKwkgICAgZWVwcm9tX3JlYWRfY21kKGFpX2NvbnRleHQsIGNtZCwgTUU0MDAwX0VFUFJPTV9DTURfTEVOR1RIX1JFQUQpOworCisJLyogQ29tbWFuZCBmb3IgZGlmZmVyZW50aWFsIDIsNVYgZnVsbHNjYWxlICovCisJY21kID0gTUU0MDAwX0VFUFJPTV9DTURfUkVBRCB8IE1FNDAwMF9FRVBST01fQURSX0dBSU5fNF9ESUZGX0ZVTExTQ0FMRTsKKwlzZXR1cC5kaWZmXzJfNV9mdWxsc2NhbGUgPQorCSAgICBlZXByb21fcmVhZF9jbWQoYWlfY29udGV4dCwgY21kLCBNRTQwMDBfRUVQUk9NX0NNRF9MRU5HVEhfUkVBRCk7CisKKwllcnIgPSBjb3B5X3RvX3VzZXIoYXJnLCAmc2V0dXAsIHNpemVvZihzZXR1cCkpOworCWlmIChlcnIpIHsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCSAgICAgICAiTUU0MDAwOm1lNDAwMF9lZXByb21fcmVhZCgpOkNhbm5vdCBjb3B5IHRvIHVzZXJcbiIpOworCQlyZXR1cm4gZXJyOworCX0KKworCXJldHVybiAwOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBESU8gc3R1ZmYgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbnQgbWU0MDAwX2Rpb19pb2N0bChzdHJ1Y3QgaW5vZGUgKmlub2RlX3AsIHN0cnVjdCBmaWxlICpmaWxlX3AsCisJCQkgICAgdW5zaWduZWQgaW50IHNlcnZpY2UsIHVuc2lnbmVkIGxvbmcgYXJnKQoreworCW1lNDAwMF9kaW9fY29udGV4dF90ICpkaW9fY29udGV4dDsKKworCUNBTExfUERFQlVHKCJtZTQwMDBfZGlvX2lvY3RsKCkgaXMgZXhlY3V0ZWRcbiIpOworCisJZGlvX2NvbnRleHQgPSBmaWxlX3AtPnByaXZhdGVfZGF0YTsKKworCWlmIChfSU9DX1RZUEUoc2VydmljZSkgIT0gTUU0MDAwX01BR0lDKSB7CisJCXByaW50ayhLRVJOX0VSUiAibWU0MDAwX2Rpb19pb2N0bCgpOldyb25nIG1hZ2ljIG51bWJlclxuIik7CisJCXJldHVybiAtRU5PVFRZOworCX0KKwlpZiAoX0lPQ19OUihzZXJ2aWNlKSA+IE1FNDAwMF9JT0NUTF9NQVhOUikgeworCQlwcmludGsoS0VSTl9FUlIgIm1lNDAwMF9kaW9faW9jdGwoKTpTZXJ2aWNlIG51bWJlciB0byBoaWdoXG4iKTsKKwkJcmV0dXJuIC1FTk9UVFk7CisJfQorCisJc3dpdGNoIChzZXJ2aWNlKSB7CisJY2FzZSBNRTQwMDBfRElPX0NPTkZJRzoKKwkJcmV0dXJuIG1lNDAwMF9kaW9fY29uZmlnKChtZTQwMDBfZGlvX2NvbmZpZ190ICopIGFyZywKKwkJCQkJIGRpb19jb250ZXh0KTsKKwljYXNlIE1FNDAwMF9ESU9fU0VUX0JZVEU6CisJCXJldHVybiBtZTQwMDBfZGlvX3NldF9ieXRlKChtZTQwMDBfZGlvX2J5dGVfdCAqKSBhcmcsCisJCQkJCSAgIGRpb19jb250ZXh0KTsKKwljYXNlIE1FNDAwMF9ESU9fR0VUX0JZVEU6CisJCXJldHVybiBtZTQwMDBfZGlvX2dldF9ieXRlKChtZTQwMDBfZGlvX2J5dGVfdCAqKSBhcmcsCisJCQkJCSAgIGRpb19jb250ZXh0KTsKKwljYXNlIE1FNDAwMF9ESU9fUkVTRVQ6CisJCXJldHVybiBtZTQwMDBfZGlvX3Jlc2V0KGRpb19jb250ZXh0KTsKKwlkZWZhdWx0OgorCQlwcmludGsoS0VSTl9FUlIKKwkJICAgICAgICJNRTQwMDA6bWU0MDAwX2Rpb19pb2N0bCgpOkludmFsaWQgc2VydmljZSBudW1iZXIgJWRcbiIsCisJCSAgICAgICBzZXJ2aWNlKTsKKwkJcmV0dXJuIC1FTk9UVFk7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG1lNDAwMF9kaW9fY29uZmlnKG1lNDAwMF9kaW9fY29uZmlnX3QgKiBhcmcsCisJCQkgICAgIG1lNDAwMF9kaW9fY29udGV4dF90ICogZGlvX2NvbnRleHQpCit7CisJbWU0MDAwX2Rpb19jb25maWdfdCBjbWQ7CisJdTMyIHRtcDsKKwlpbnQgZXJyOworCisJQ0FMTF9QREVCVUcoIm1lNDAwMF9kaW9fY29uZmlnKCkgaXMgZXhlY3V0ZWRcbiIpOworCisJLyogQ29weSBkYXRhIGZyb20gdXNlciAqLworCWVyciA9IGNvcHlfZnJvbV91c2VyKCZjbWQsIGFyZywgc2l6ZW9mKG1lNDAwMF9kaW9fY29uZmlnX3QpKTsKKwlpZiAoZXJyKSB7CisJCXByaW50ayhLRVJOX0VSUgorCQkgICAgICAgIk1FNDAwMDptZTQwMDBfZGlvX2NvbmZpZygpOkNhbid0IGNvcHkgZnJvbSB1c2VyIHNwYWNlXG4iKTsKKwkJcmV0dXJuIC1FRkFVTFQ7CisJfQorCisJLyogQ2hlY2sgcG9ydCBwYXJhbWV0ZXIgKi8KKwlpZiAoY21kLnBvcnQgPj0gZGlvX2NvbnRleHQtPmRpb19jb3VudCkgeworCQlwcmludGsoS0VSTl9FUlIKKwkJICAgICAgICJNRTQwMDA6bWU0MDAwX2Rpb19jb25maWcoKTpQb3J0ICVkIGlzIG5vdCBhdmFpbGFibGVcbiIsCisJCSAgICAgICBjbWQucG9ydCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCVBERUJVRygibWU0MDAwX2Rpb19jb25maWcoKTogcG9ydCAlZCwgbW9kZSAlZCwgZnVuY3Rpb24gJWRcbiIsIGNtZC5wb3J0LAorCSAgICAgICBjbWQubW9kZSwgY21kLmZ1bmN0aW9uKTsKKworCWlmIChjbWQucG9ydCA9PSBNRTQwMDBfRElPX1BPUlRfQSkgeworCQlpZiAoY21kLm1vZGUgPT0gTUU0MDAwX0RJT19QT1JUX0lOUFVUKSB7CisJCQkvKiBDaGVjayBpZiBvcHRvIGlzb2xhdGVkIHZlcnNpb24gKi8KKwkJCWlmICghKG1lNDAwMF9pbmwoZGlvX2NvbnRleHQtPmRpcl9yZWcpICYgMHgxKSkgeworCQkJCXByaW50ayhLRVJOX0VSUgorCQkJCSAgICAgICAiTUU0MDAwOm1lNDAwMF9kaW9fY29uZmlnKCk6Q2Fubm90IHNldCB0byBpbnB1dCBvbiBvcHRvIGlzb2xhdGVkIHZlcnNpb25zXG4iKTsKKwkJCQlyZXR1cm4gLUVJTzsKKwkJCX0KKworCQkJdG1wID0gbWU0MDAwX2lubChkaW9fY29udGV4dC0+Y3RybF9yZWcpOworCQkJdG1wICY9CisJCQkgICAgfihNRTQwMDBfRElPX0NUUkxfQklUX01PREVfMCB8CisJCQkgICAgICBNRTQwMDBfRElPX0NUUkxfQklUX01PREVfMSk7CisJCQltZTQwMDBfb3V0bCh0bXAsIGRpb19jb250ZXh0LT5jdHJsX3JlZyk7CisJCX0gZWxzZSBpZiAoY21kLm1vZGUgPT0gTUU0MDAwX0RJT19QT1JUX09VVFBVVCkgeworCQkJdG1wID0gbWU0MDAwX2lubChkaW9fY29udGV4dC0+Y3RybF9yZWcpOworCQkJdG1wICY9CisJCQkgICAgfihNRTQwMDBfRElPX0NUUkxfQklUX01PREVfMCB8CisJCQkgICAgICBNRTQwMDBfRElPX0NUUkxfQklUX01PREVfMSk7CisJCQl0bXAgfD0gTUU0MDAwX0RJT19DVFJMX0JJVF9NT0RFXzA7CisJCQltZTQwMDBfb3V0bCh0bXAsIGRpb19jb250ZXh0LT5jdHJsX3JlZyk7CisJCX0gZWxzZSBpZiAoY21kLm1vZGUgPT0gTUU0MDAwX0RJT19GSUZPX0xPVykgeworCQkJdG1wID0gbWU0MDAwX2lubChkaW9fY29udGV4dC0+Y3RybF9yZWcpOworCQkJdG1wICY9CisJCQkgICAgfihNRTQwMDBfRElPX0NUUkxfQklUX01PREVfMCB8CisJCQkgICAgICBNRTQwMDBfRElPX0NUUkxfQklUX01PREVfMSB8CisJCQkgICAgICBNRTQwMDBfRElPX0NUUkxfQklUX0ZJRk9fSElHSF8wKTsKKwkJCXRtcCB8PQorCQkJICAgIE1FNDAwMF9ESU9fQ1RSTF9CSVRfTU9ERV8wIHwKKwkJCSAgICBNRTQwMDBfRElPX0NUUkxfQklUX01PREVfMTsKKwkJCW1lNDAwMF9vdXRsKHRtcCwgZGlvX2NvbnRleHQtPmN0cmxfcmVnKTsKKwkJfSBlbHNlIGlmIChjbWQubW9kZSA9PSBNRTQwMDBfRElPX0ZJRk9fSElHSCkgeworCQkJdG1wID0gbWU0MDAwX2lubChkaW9fY29udGV4dC0+Y3RybF9yZWcpOworCQkJdG1wIHw9CisJCQkgICAgTUU0MDAwX0RJT19DVFJMX0JJVF9NT0RFXzAgfAorCQkJICAgIE1FNDAwMF9ESU9fQ1RSTF9CSVRfTU9ERV8xIHwKKwkJCSAgICBNRTQwMDBfRElPX0NUUkxfQklUX0ZJRk9fSElHSF8wOworCQkJbWU0MDAwX291dGwodG1wLCBkaW9fY29udGV4dC0+Y3RybF9yZWcpOworCQl9IGVsc2UgeworCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkgICAgICAgIk1FNDAwMDptZTQwMDBfZGlvX2NvbmZpZygpOk1vZGUgJWQgaXMgbm90IGF2YWlsYWJsZVxuIiwKKwkJCSAgICAgICBjbWQubW9kZSk7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCX0gZWxzZSBpZiAoY21kLnBvcnQgPT0gTUU0MDAwX0RJT19QT1JUX0IpIHsKKwkJaWYgKGNtZC5tb2RlID09IE1FNDAwMF9ESU9fUE9SVF9JTlBVVCkgeworCQkJLyogT25seSBkbyBhbnl0aGluZyB3aGVuIFRUTCB2ZXJzaW9uIGlzIGluc3RhbGxlZCAqLworCQkJaWYgKChtZTQwMDBfaW5sKGRpb19jb250ZXh0LT5kaXJfcmVnKSAmIDB4MSkpIHsKKwkJCQl0bXAgPSBtZTQwMDBfaW5sKGRpb19jb250ZXh0LT5jdHJsX3JlZyk7CisJCQkJdG1wICY9CisJCQkJICAgIH4oTUU0MDAwX0RJT19DVFJMX0JJVF9NT0RFXzIgfAorCQkJCSAgICAgIE1FNDAwMF9ESU9fQ1RSTF9CSVRfTU9ERV8zKTsKKwkJCQltZTQwMDBfb3V0bCh0bXAsIGRpb19jb250ZXh0LT5jdHJsX3JlZyk7CisJCQl9CisJCX0gZWxzZSBpZiAoY21kLm1vZGUgPT0gTUU0MDAwX0RJT19QT1JUX09VVFBVVCkgeworCQkJLyogQ2hlY2sgaWYgb3B0byBpc29sYXRlZCB2ZXJzaW9uICovCisJCQlpZiAoIShtZTQwMDBfaW5sKGRpb19jb250ZXh0LT5kaXJfcmVnKSAmIDB4MSkpIHsKKwkJCQlwcmludGsoS0VSTl9FUlIKKwkJCQkgICAgICAgIk1FNDAwMDptZTQwMDBfZGlvX2NvbmZpZygpOkNhbm5vdCBzZXQgdG8gb3V0cHV0IG9uIG9wdG8gaXNvbGF0ZWQgdmVyc2lvbnNcbiIpOworCQkJCXJldHVybiAtRUlPOworCQkJfQorCisJCQl0bXAgPSBtZTQwMDBfaW5sKGRpb19jb250ZXh0LT5jdHJsX3JlZyk7CisJCQl0bXAgJj0KKwkJCSAgICB+KE1FNDAwMF9ESU9fQ1RSTF9CSVRfTU9ERV8yIHwKKwkJCSAgICAgIE1FNDAwMF9ESU9fQ1RSTF9CSVRfTU9ERV8zKTsKKwkJCXRtcCB8PSBNRTQwMDBfRElPX0NUUkxfQklUX01PREVfMjsKKwkJCW1lNDAwMF9vdXRsKHRtcCwgZGlvX2NvbnRleHQtPmN0cmxfcmVnKTsKKwkJfSBlbHNlIGlmIChjbWQubW9kZSA9PSBNRTQwMDBfRElPX0ZJRk9fTE9XKSB7CisJCQkvKiBDaGVjayBpZiBvcHRvIGlzb2xhdGVkIHZlcnNpb24gKi8KKwkJCWlmICghKG1lNDAwMF9pbmwoZGlvX2NvbnRleHQtPmRpcl9yZWcpICYgMHgxKSkgeworCQkJCXByaW50ayhLRVJOX0VSUgorCQkJCSAgICAgICAiTUU0MDAwOm1lNDAwMF9kaW9fY29uZmlnKCk6Q2Fubm90IHNldCB0byBGSUZPIGxvdyBvdXRwdXQgb24gb3B0byBpc29sYXRlZCB2ZXJzaW9uc1xuIik7CisJCQkJcmV0dXJuIC1FSU87CisJCQl9CisKKwkJCXRtcCA9IG1lNDAwMF9pbmwoZGlvX2NvbnRleHQtPmN0cmxfcmVnKTsKKwkJCXRtcCAmPQorCQkJICAgIH4oTUU0MDAwX0RJT19DVFJMX0JJVF9NT0RFXzIgfAorCQkJICAgICAgTUU0MDAwX0RJT19DVFJMX0JJVF9NT0RFXzMgfAorCQkJICAgICAgTUU0MDAwX0RJT19DVFJMX0JJVF9GSUZPX0hJR0hfMSk7CisJCQl0bXAgfD0KKwkJCSAgICBNRTQwMDBfRElPX0NUUkxfQklUX01PREVfMiB8CisJCQkgICAgTUU0MDAwX0RJT19DVFJMX0JJVF9NT0RFXzM7CisJCQltZTQwMDBfb3V0bCh0bXAsIGRpb19jb250ZXh0LT5jdHJsX3JlZyk7CisJCX0gZWxzZSBpZiAoY21kLm1vZGUgPT0gTUU0MDAwX0RJT19GSUZPX0hJR0gpIHsKKwkJCS8qIENoZWNrIGlmIG9wdG8gaXNvbGF0ZWQgdmVyc2lvbiAqLworCQkJaWYgKCEobWU0MDAwX2lubChkaW9fY29udGV4dC0+ZGlyX3JlZykgJiAweDEpKSB7CisJCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkJICAgICAgICJNRTQwMDA6bWU0MDAwX2Rpb19jb25maWcoKTpDYW5ub3Qgc2V0IHRvIEZJRk8gaGlnaCBvdXRwdXQgb24gb3B0byBpc29sYXRlZCB2ZXJzaW9uc1xuIik7CisJCQkJcmV0dXJuIC1FSU87CisJCQl9CisKKwkJCXRtcCA9IG1lNDAwMF9pbmwoZGlvX2NvbnRleHQtPmN0cmxfcmVnKTsKKwkJCXRtcCB8PQorCQkJICAgIE1FNDAwMF9ESU9fQ1RSTF9CSVRfTU9ERV8yIHwKKwkJCSAgICBNRTQwMDBfRElPX0NUUkxfQklUX01PREVfMyB8CisJCQkgICAgTUU0MDAwX0RJT19DVFJMX0JJVF9GSUZPX0hJR0hfMTsKKwkJCW1lNDAwMF9vdXRsKHRtcCwgZGlvX2NvbnRleHQtPmN0cmxfcmVnKTsKKwkJfSBlbHNlIHsKKwkJCXByaW50ayhLRVJOX0VSUgorCQkJICAgICAgICJNRTQwMDA6bWU0MDAwX2Rpb19jb25maWcoKTpNb2RlICVkIGlzIG5vdCBhdmFpbGFibGVcbiIsCisJCQkgICAgICAgY21kLm1vZGUpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwl9IGVsc2UgaWYgKGNtZC5wb3J0ID09IE1FNDAwMF9ESU9fUE9SVF9DKSB7CisJCWlmIChjbWQubW9kZSA9PSBNRTQwMDBfRElPX1BPUlRfSU5QVVQpIHsKKwkJCXRtcCA9IG1lNDAwMF9pbmwoZGlvX2NvbnRleHQtPmN0cmxfcmVnKTsKKwkJCXRtcCAmPQorCQkJICAgIH4oTUU0MDAwX0RJT19DVFJMX0JJVF9NT0RFXzQgfAorCQkJICAgICAgTUU0MDAwX0RJT19DVFJMX0JJVF9NT0RFXzUpOworCQkJbWU0MDAwX291dGwodG1wLCBkaW9fY29udGV4dC0+Y3RybF9yZWcpOworCQl9IGVsc2UgaWYgKGNtZC5tb2RlID09IE1FNDAwMF9ESU9fUE9SVF9PVVRQVVQpIHsKKwkJCXRtcCA9IG1lNDAwMF9pbmwoZGlvX2NvbnRleHQtPmN0cmxfcmVnKTsKKwkJCXRtcCAmPQorCQkJICAgIH4oTUU0MDAwX0RJT19DVFJMX0JJVF9NT0RFXzQgfAorCQkJICAgICAgTUU0MDAwX0RJT19DVFJMX0JJVF9NT0RFXzUpOworCQkJdG1wIHw9IE1FNDAwMF9ESU9fQ1RSTF9CSVRfTU9ERV80OworCQkJbWU0MDAwX291dGwodG1wLCBkaW9fY29udGV4dC0+Y3RybF9yZWcpOworCQl9IGVsc2UgaWYgKGNtZC5tb2RlID09IE1FNDAwMF9ESU9fRklGT19MT1cpIHsKKwkJCXRtcCA9IG1lNDAwMF9pbmwoZGlvX2NvbnRleHQtPmN0cmxfcmVnKTsKKwkJCXRtcCAmPQorCQkJICAgIH4oTUU0MDAwX0RJT19DVFJMX0JJVF9NT0RFXzQgfAorCQkJICAgICAgTUU0MDAwX0RJT19DVFJMX0JJVF9NT0RFXzUgfAorCQkJICAgICAgTUU0MDAwX0RJT19DVFJMX0JJVF9GSUZPX0hJR0hfMik7CisJCQl0bXAgfD0KKwkJCSAgICBNRTQwMDBfRElPX0NUUkxfQklUX01PREVfNCB8CisJCQkgICAgTUU0MDAwX0RJT19DVFJMX0JJVF9NT0RFXzU7CisJCQltZTQwMDBfb3V0bCh0bXAsIGRpb19jb250ZXh0LT5jdHJsX3JlZyk7CisJCX0gZWxzZSBpZiAoY21kLm1vZGUgPT0gTUU0MDAwX0RJT19GSUZPX0hJR0gpIHsKKwkJCXRtcCA9IG1lNDAwMF9pbmwoZGlvX2NvbnRleHQtPmN0cmxfcmVnKTsKKwkJCXRtcCB8PQorCQkJICAgIE1FNDAwMF9ESU9fQ1RSTF9CSVRfTU9ERV80IHwKKwkJCSAgICBNRTQwMDBfRElPX0NUUkxfQklUX01PREVfNSB8CisJCQkgICAgTUU0MDAwX0RJT19DVFJMX0JJVF9GSUZPX0hJR0hfMjsKKwkJCW1lNDAwMF9vdXRsKHRtcCwgZGlvX2NvbnRleHQtPmN0cmxfcmVnKTsKKwkJfSBlbHNlIHsKKwkJCXByaW50ayhLRVJOX0VSUgorCQkJICAgICAgICJNRTQwMDA6bWU0MDAwX2Rpb19jb25maWcoKTpNb2RlICVkIGlzIG5vdCBhdmFpbGFibGVcbiIsCisJCQkgICAgICAgY21kLm1vZGUpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwl9IGVsc2UgaWYgKGNtZC5wb3J0ID09IE1FNDAwMF9ESU9fUE9SVF9EKSB7CisJCWlmIChjbWQubW9kZSA9PSBNRTQwMDBfRElPX1BPUlRfSU5QVVQpIHsKKwkJCXRtcCA9IG1lNDAwMF9pbmwoZGlvX2NvbnRleHQtPmN0cmxfcmVnKTsKKwkJCXRtcCAmPQorCQkJICAgIH4oTUU0MDAwX0RJT19DVFJMX0JJVF9NT0RFXzYgfAorCQkJICAgICAgTUU0MDAwX0RJT19DVFJMX0JJVF9NT0RFXzcpOworCQkJbWU0MDAwX291dGwodG1wLCBkaW9fY29udGV4dC0+Y3RybF9yZWcpOworCQl9IGVsc2UgaWYgKGNtZC5tb2RlID09IE1FNDAwMF9ESU9fUE9SVF9PVVRQVVQpIHsKKwkJCXRtcCA9IG1lNDAwMF9pbmwoZGlvX2NvbnRleHQtPmN0cmxfcmVnKTsKKwkJCXRtcCAmPQorCQkJICAgIH4oTUU0MDAwX0RJT19DVFJMX0JJVF9NT0RFXzYgfAorCQkJICAgICAgTUU0MDAwX0RJT19DVFJMX0JJVF9NT0RFXzcpOworCQkJdG1wIHw9IE1FNDAwMF9ESU9fQ1RSTF9CSVRfTU9ERV82OworCQkJbWU0MDAwX291dGwodG1wLCBkaW9fY29udGV4dC0+Y3RybF9yZWcpOworCQl9IGVsc2UgaWYgKGNtZC5tb2RlID09IE1FNDAwMF9ESU9fRklGT19MT1cpIHsKKwkJCXRtcCA9IG1lNDAwMF9pbmwoZGlvX2NvbnRleHQtPmN0cmxfcmVnKTsKKwkJCXRtcCAmPQorCQkJICAgIH4oTUU0MDAwX0RJT19DVFJMX0JJVF9NT0RFXzYgfAorCQkJICAgICAgTUU0MDAwX0RJT19DVFJMX0JJVF9NT0RFXzcgfAorCQkJICAgICAgTUU0MDAwX0RJT19DVFJMX0JJVF9GSUZPX0hJR0hfMyk7CisJCQl0bXAgfD0KKwkJCSAgICBNRTQwMDBfRElPX0NUUkxfQklUX01PREVfNiB8CisJCQkgICAgTUU0MDAwX0RJT19DVFJMX0JJVF9NT0RFXzc7CisJCQltZTQwMDBfb3V0bCh0bXAsIGRpb19jb250ZXh0LT5jdHJsX3JlZyk7CisJCX0gZWxzZSBpZiAoY21kLm1vZGUgPT0gTUU0MDAwX0RJT19GSUZPX0hJR0gpIHsKKwkJCXRtcCA9IG1lNDAwMF9pbmwoZGlvX2NvbnRleHQtPmN0cmxfcmVnKTsKKwkJCXRtcCB8PQorCQkJICAgIE1FNDAwMF9ESU9fQ1RSTF9CSVRfTU9ERV82IHwKKwkJCSAgICBNRTQwMDBfRElPX0NUUkxfQklUX01PREVfNyB8CisJCQkgICAgTUU0MDAwX0RJT19DVFJMX0JJVF9GSUZPX0hJR0hfMzsKKwkJCW1lNDAwMF9vdXRsKHRtcCwgZGlvX2NvbnRleHQtPmN0cmxfcmVnKTsKKwkJfSBlbHNlIHsKKwkJCXByaW50ayhLRVJOX0VSUgorCQkJICAgICAgICJNRTQwMDA6bWU0MDAwX2Rpb19jb25maWcoKTpNb2RlICVkIGlzIG5vdCBhdmFpbGFibGVcbiIsCisJCQkgICAgICAgY21kLm1vZGUpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwl9IGVsc2UgeworCQlwcmludGsoS0VSTl9FUlIKKwkJICAgICAgICJNRTQwMDA6bWU0MDAwX2Rpb19jb25maWcoKTpQb3J0ICVkIGlzIG5vdCBhdmFpbGFibGVcbiIsCisJCSAgICAgICBjbWQucG9ydCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCVBERUJVRygibWU0MDAwX2Rpb19jb25maWcoKTogcG9ydCAlZCwgbW9kZSAlZCwgZnVuY3Rpb24gJWRcbiIsIGNtZC5wb3J0LAorCSAgICAgICBjbWQubW9kZSwgY21kLmZ1bmN0aW9uKTsKKworCWlmICgoY21kLm1vZGUgPT0gTUU0MDAwX0RJT19GSUZPX0hJR0gpCisJICAgIHx8IChjbWQubW9kZSA9PSBNRTQwMDBfRElPX0ZJRk9fTE9XKSkgeworCQl0bXAgPSBtZTQwMDBfaW5sKGRpb19jb250ZXh0LT5jdHJsX3JlZyk7CisJCXRtcCAmPQorCQkgICAgfihNRTQwMDBfRElPX0NUUkxfQklUX0ZVTkNUSU9OXzAgfAorCQkgICAgICBNRTQwMDBfRElPX0NUUkxfQklUX0ZVTkNUSU9OXzEpOworCQlpZiAoY21kLmZ1bmN0aW9uID09IE1FNDAwMF9ESU9fRlVOQ1RJT05fUEFUVEVSTikgeworCQkJbWU0MDAwX291dGwodG1wLCBkaW9fY29udGV4dC0+Y3RybF9yZWcpOworCQl9IGVsc2UgaWYgKGNtZC5mdW5jdGlvbiA9PSBNRTQwMDBfRElPX0ZVTkNUSU9OX0RFTVVYKSB7CisJCQl0bXAgfD0gTUU0MDAwX0RJT19DVFJMX0JJVF9GVU5DVElPTl8wOworCQkJbWU0MDAwX291dGwodG1wLCBkaW9fY29udGV4dC0+Y3RybF9yZWcpOworCQl9IGVsc2UgaWYgKGNtZC5mdW5jdGlvbiA9PSBNRTQwMDBfRElPX0ZVTkNUSU9OX01VWCkgeworCQkJdG1wIHw9IE1FNDAwMF9ESU9fQ1RSTF9CSVRfRlVOQ1RJT05fMTsKKwkJCW1lNDAwMF9vdXRsKHRtcCwgZGlvX2NvbnRleHQtPmN0cmxfcmVnKTsKKwkJfSBlbHNlIHsKKwkJCXByaW50ayhLRVJOX0VSUgorCQkJICAgICAgICJNRTQwMDA6bWU0MDAwX2Rpb19jb25maWcoKTpJbnZhbGlkIHBvcnQgZnVuY3Rpb24gc3BlY2lmaWVkXG4iKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbWU0MDAwX2Rpb19zZXRfYnl0ZShtZTQwMDBfZGlvX2J5dGVfdCAqIGFyZywKKwkJCSAgICAgICBtZTQwMDBfZGlvX2NvbnRleHRfdCAqIGRpb19jb250ZXh0KQoreworCW1lNDAwMF9kaW9fYnl0ZV90IGNtZDsKKwlpbnQgZXJyOworCisJQ0FMTF9QREVCVUcoIm1lNDAwMF9kaW9fc2V0X2J5dGUoKSBpcyBleGVjdXRlZFxuIik7CisKKwkvKiBDb3B5IGRhdGEgZnJvbSB1c2VyICovCisJZXJyID0gY29weV9mcm9tX3VzZXIoJmNtZCwgYXJnLCBzaXplb2YobWU0MDAwX2Rpb19ieXRlX3QpKTsKKwlpZiAoZXJyKSB7CisJCXByaW50ayhLRVJOX0VSUgorCQkgICAgICAgIk1FNDAwMDptZTQwMDBfZGlvX3NldF9ieXRlKCk6Q2FuJ3QgY29weSBmcm9tIHVzZXIgc3BhY2VcbiIpOworCQlyZXR1cm4gLUVGQVVMVDsKKwl9CisKKwkvKiBDaGVjayBwb3J0IHBhcmFtZXRlciAqLworCWlmIChjbWQucG9ydCA+PSBkaW9fY29udGV4dC0+ZGlvX2NvdW50KSB7CisJCXByaW50ayhLRVJOX0VSUgorCQkgICAgICAgIk1FNDAwMDptZTQwMDBfZGlvX3NldF9ieXRlKCk6UG9ydCAlZCBpcyBub3QgYXZhaWxhYmxlXG4iLAorCQkgICAgICAgY21kLnBvcnQpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAoY21kLnBvcnQgPT0gTUU0MDAwX0RJT19QT1JUX0EpIHsKKwkJaWYgKChtZTQwMDBfaW5sKGRpb19jb250ZXh0LT5jdHJsX3JlZykgJiAweDMpICE9IDB4MSkgeworCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkgICAgICAgIk1FNDAwMDptZTQwMDBfZGlvX3NldF9ieXRlKCk6UG9ydCAlZCBpcyBub3QgaW4gb3V0cHV0IG1vZGVcbiIsCisJCQkgICAgICAgY21kLnBvcnQpOworCQkJcmV0dXJuIC1FSU87CisJCX0KKwkJbWU0MDAwX291dGwoY21kLmJ5dGUsIGRpb19jb250ZXh0LT5wb3J0XzBfcmVnKTsKKwl9IGVsc2UgaWYgKGNtZC5wb3J0ID09IE1FNDAwMF9ESU9fUE9SVF9CKSB7CisJCWlmICgobWU0MDAwX2lubChkaW9fY29udGV4dC0+Y3RybF9yZWcpICYgMHhDKSAhPSAweDQpIHsKKwkJCXByaW50ayhLRVJOX0VSUgorCQkJICAgICAgICJNRTQwMDA6bWU0MDAwX2Rpb19zZXRfYnl0ZSgpOlBvcnQgJWQgaXMgbm90IGluIG91dHB1dCBtb2RlXG4iLAorCQkJICAgICAgIGNtZC5wb3J0KTsKKwkJCXJldHVybiAtRUlPOworCQl9CisJCW1lNDAwMF9vdXRsKGNtZC5ieXRlLCBkaW9fY29udGV4dC0+cG9ydF8xX3JlZyk7CisJfSBlbHNlIGlmIChjbWQucG9ydCA9PSBNRTQwMDBfRElPX1BPUlRfQykgeworCQlpZiAoKG1lNDAwMF9pbmwoZGlvX2NvbnRleHQtPmN0cmxfcmVnKSAmIDB4MzApICE9IDB4MTApIHsKKwkJCXByaW50ayhLRVJOX0VSUgorCQkJICAgICAgICJNRTQwMDA6bWU0MDAwX2Rpb19zZXRfYnl0ZSgpOlBvcnQgJWQgaXMgbm90IGluIG91dHB1dCBtb2RlXG4iLAorCQkJICAgICAgIGNtZC5wb3J0KTsKKwkJCXJldHVybiAtRUlPOworCQl9CisJCW1lNDAwMF9vdXRsKGNtZC5ieXRlLCBkaW9fY29udGV4dC0+cG9ydF8yX3JlZyk7CisJfSBlbHNlIGlmIChjbWQucG9ydCA9PSBNRTQwMDBfRElPX1BPUlRfRCkgeworCQlpZiAoKG1lNDAwMF9pbmwoZGlvX2NvbnRleHQtPmN0cmxfcmVnKSAmIDB4QzApICE9IDB4NDApIHsKKwkJCXByaW50ayhLRVJOX0VSUgorCQkJICAgICAgICJNRTQwMDA6bWU0MDAwX2Rpb19zZXRfYnl0ZSgpOlBvcnQgJWQgaXMgbm90IGluIG91dHB1dCBtb2RlXG4iLAorCQkJICAgICAgIGNtZC5wb3J0KTsKKwkJCXJldHVybiAtRUlPOworCQl9CisJCW1lNDAwMF9vdXRsKGNtZC5ieXRlLCBkaW9fY29udGV4dC0+cG9ydF8zX3JlZyk7CisJfSBlbHNlIHsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCSAgICAgICAiTUU0MDAwOm1lNDAwMF9kaW9fc2V0X2J5dGUoKTpQb3J0ICVkIGlzIG5vdCBhdmFpbGFibGVcbiIsCisJCSAgICAgICBjbWQucG9ydCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG1lNDAwMF9kaW9fZ2V0X2J5dGUobWU0MDAwX2Rpb19ieXRlX3QgKiBhcmcsCisJCQkgICAgICAgbWU0MDAwX2Rpb19jb250ZXh0X3QgKiBkaW9fY29udGV4dCkKK3sKKwltZTQwMDBfZGlvX2J5dGVfdCBjbWQ7CisJaW50IGVycjsKKworCUNBTExfUERFQlVHKCJtZTQwMDBfZGlvX2dldF9ieXRlKCkgaXMgZXhlY3V0ZWRcbiIpOworCisJLyogQ29weSBkYXRhIGZyb20gdXNlciAqLworCWVyciA9IGNvcHlfZnJvbV91c2VyKCZjbWQsIGFyZywgc2l6ZW9mKG1lNDAwMF9kaW9fYnl0ZV90KSk7CisJaWYgKGVycikgeworCQlwcmludGsoS0VSTl9FUlIKKwkJICAgICAgICJNRTQwMDA6bWU0MDAwX2Rpb19nZXRfYnl0ZSgpOkNhbid0IGNvcHkgZnJvbSB1c2VyIHNwYWNlXG4iKTsKKwkJcmV0dXJuIC1FRkFVTFQ7CisJfQorCisJLyogQ2hlY2sgcG9ydCBwYXJhbWV0ZXIgKi8KKwlpZiAoY21kLnBvcnQgPj0gZGlvX2NvbnRleHQtPmRpb19jb3VudCkgeworCQlwcmludGsoS0VSTl9FUlIKKwkJICAgICAgICJNRTQwMDA6bWU0MDAwX2Rpb19nZXRfYnl0ZSgpOlBvcnQgJWQgaXMgbm90IGF2YWlsYWJsZVxuIiwKKwkJICAgICAgIGNtZC5wb3J0KTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKGNtZC5wb3J0ID09IE1FNDAwMF9ESU9fUE9SVF9BKSB7CisJCWNtZC5ieXRlID0gbWU0MDAwX2lubChkaW9fY29udGV4dC0+cG9ydF8wX3JlZykgJiAweEZGOworCX0gZWxzZSBpZiAoY21kLnBvcnQgPT0gTUU0MDAwX0RJT19QT1JUX0IpIHsKKwkJY21kLmJ5dGUgPSBtZTQwMDBfaW5sKGRpb19jb250ZXh0LT5wb3J0XzFfcmVnKSAmIDB4RkY7CisJfSBlbHNlIGlmIChjbWQucG9ydCA9PSBNRTQwMDBfRElPX1BPUlRfQykgeworCQljbWQuYnl0ZSA9IG1lNDAwMF9pbmwoZGlvX2NvbnRleHQtPnBvcnRfMl9yZWcpICYgMHhGRjsKKwl9IGVsc2UgaWYgKGNtZC5wb3J0ID09IE1FNDAwMF9ESU9fUE9SVF9EKSB7CisJCWNtZC5ieXRlID0gbWU0MDAwX2lubChkaW9fY29udGV4dC0+cG9ydF8zX3JlZykgJiAweEZGOworCX0gZWxzZSB7CisJCXByaW50ayhLRVJOX0VSUgorCQkgICAgICAgIk1FNDAwMDptZTQwMDBfZGlvX2dldF9ieXRlKCk6UG9ydCAlZCBpcyBub3QgYXZhaWxhYmxlXG4iLAorCQkgICAgICAgY21kLnBvcnQpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKiBDb3B5IHJlc3VsdCBiYWNrIHRvIHVzZXIgKi8KKwllcnIgPSBjb3B5X3RvX3VzZXIoYXJnLCAmY21kLCBzaXplb2YobWU0MDAwX2Rpb19ieXRlX3QpKTsKKwlpZiAoZXJyKSB7CisJCXByaW50ayhLRVJOX0VSUgorCQkgICAgICAgIk1FNDAwMDptZTQwMDBfZGlvX2dldF9ieXRlKCk6Q2FuJ3QgY29weSB0byB1c2VyIHNwYWNlXG4iKTsKKwkJcmV0dXJuIC1FRkFVTFQ7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbWU0MDAwX2Rpb19yZXNldChtZTQwMDBfZGlvX2NvbnRleHRfdCAqIGRpb19jb250ZXh0KQoreworCUNBTExfUERFQlVHKCJtZTQwMDBfZGlvX3Jlc2V0KCkgaXMgZXhlY3V0ZWRcbiIpOworCisJLyogQ2xlYXIgdGhlIGNvbnRyb2wgcmVnaXN0ZXIgKi8KKwltZTQwMDBfb3V0bCgwLCBkaW9fY29udGV4dC0+Y3RybF9yZWcpOworCisJLyogQ2hlY2sgZm9yIG9wdG8gaXNvbGF0ZWQgdmVyc2lvbiAqLworCWlmICghKG1lNDAwMF9pbmwoZGlvX2NvbnRleHQtPmRpcl9yZWcpICYgMHgxKSkgeworCQltZTQwMDBfb3V0bCgweDEsIGRpb19jb250ZXh0LT5jdHJsX3JlZyk7CisJCW1lNDAwMF9vdXRsKDB4MCwgZGlvX2NvbnRleHQtPnBvcnRfMF9yZWcpOworCX0KKworCXJldHVybiAwOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBDT1VOVEVSIFNUVUZGIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbnQgbWU0MDAwX2NudF9pb2N0bChzdHJ1Y3QgaW5vZGUgKmlub2RlX3AsIHN0cnVjdCBmaWxlICpmaWxlX3AsCisJCQkgICAgdW5zaWduZWQgaW50IHNlcnZpY2UsIHVuc2lnbmVkIGxvbmcgYXJnKQoreworCW1lNDAwMF9jbnRfY29udGV4dF90ICpjbnRfY29udGV4dDsKKworCUNBTExfUERFQlVHKCJtZTQwMDBfY250X2lvY3RsKCkgaXMgZXhlY3V0ZWRcbiIpOworCisJY250X2NvbnRleHQgPSBmaWxlX3AtPnByaXZhdGVfZGF0YTsKKworCWlmIChfSU9DX1RZUEUoc2VydmljZSkgIT0gTUU0MDAwX01BR0lDKSB7CisJCXByaW50ayhLRVJOX0VSUiAibWU0MDAwX2Rpb19pb2N0bCgpOldyb25nIG1hZ2ljIG51bWJlclxuIik7CisJCXJldHVybiAtRU5PVFRZOworCX0KKwlpZiAoX0lPQ19OUihzZXJ2aWNlKSA+IE1FNDAwMF9JT0NUTF9NQVhOUikgeworCQlwcmludGsoS0VSTl9FUlIgIm1lNDAwMF9kaW9faW9jdGwoKTpTZXJ2aWNlIG51bWJlciB0byBoaWdoXG4iKTsKKwkJcmV0dXJuIC1FTk9UVFk7CisJfQorCisJc3dpdGNoIChzZXJ2aWNlKSB7CisJY2FzZSBNRTQwMDBfQ05UX1JFQUQ6CisJCXJldHVybiBtZTQwMDBfY250X3JlYWQoKG1lNDAwMF9jbnRfdCAqKSBhcmcsIGNudF9jb250ZXh0KTsKKwljYXNlIE1FNDAwMF9DTlRfV1JJVEU6CisJCXJldHVybiBtZTQwMDBfY250X3dyaXRlKChtZTQwMDBfY250X3QgKikgYXJnLCBjbnRfY29udGV4dCk7CisJY2FzZSBNRTQwMDBfQ05UX0NPTkZJRzoKKwkJcmV0dXJuIG1lNDAwMF9jbnRfY29uZmlnKChtZTQwMDBfY250X2NvbmZpZ190ICopIGFyZywKKwkJCQkJIGNudF9jb250ZXh0KTsKKwljYXNlIE1FNDAwMF9DTlRfUkVTRVQ6CisJCXJldHVybiBtZTQwMDBfY250X3Jlc2V0KGNudF9jb250ZXh0KTsKKwlkZWZhdWx0OgorCQlwcmludGsoS0VSTl9FUlIKKwkJICAgICAgICJNRTQwMDA6bWU0MDAwX2Rpb19pb2N0bCgpOkludmFsaWQgc2VydmljZSBudW1iZXIgJWRcbiIsCisJCSAgICAgICBzZXJ2aWNlKTsKKwkJcmV0dXJuIC1FTk9UVFk7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG1lNDAwMF9jbnRfY29uZmlnKG1lNDAwMF9jbnRfY29uZmlnX3QgKiBhcmcsCisJCQkgICAgIG1lNDAwMF9jbnRfY29udGV4dF90ICogY250X2NvbnRleHQpCit7CisJbWU0MDAwX2NudF9jb25maWdfdCBjbWQ7CisJdTggY291bnRlcjsKKwl1OCBtb2RlOworCWludCBlcnI7CisKKwlDQUxMX1BERUJVRygibWU0MDAwX2NudF9jb25maWcoKSBpcyBleGVjdXRlZFxuIik7CisKKwkvKiBDb3B5IGRhdGEgZnJvbSB1c2VyICovCisJZXJyID0gY29weV9mcm9tX3VzZXIoJmNtZCwgYXJnLCBzaXplb2YobWU0MDAwX2NudF9jb25maWdfdCkpOworCWlmIChlcnIpIHsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCSAgICAgICAiTUU0MDAwOm1lNDAwMF9jbnRfY29uZmlnKCk6Q2FuJ3QgY29weSBmcm9tIHVzZXIgc3BhY2VcbiIpOworCQlyZXR1cm4gLUVGQVVMVDsKKwl9CisKKwkvKiBDaGVjayBjb3VudGVyIHBhcmFtZXRlciAqLworCXN3aXRjaCAoY21kLmNvdW50ZXIpIHsKKwljYXNlIE1FNDAwMF9DTlRfQ09VTlRFUl8wOgorCQljb3VudGVyID0gTUU0MDAwX0NOVF9DVFJMX0JJVF9DT1VOVEVSXzA7CisJCWJyZWFrOworCWNhc2UgTUU0MDAwX0NOVF9DT1VOVEVSXzE6CisJCWNvdW50ZXIgPSBNRTQwMDBfQ05UX0NUUkxfQklUX0NPVU5URVJfMTsKKwkJYnJlYWs7CisJY2FzZSBNRTQwMDBfQ05UX0NPVU5URVJfMjoKKwkJY291bnRlciA9IE1FNDAwMF9DTlRfQ1RSTF9CSVRfQ09VTlRFUl8yOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlwcmludGsoS0VSTl9FUlIKKwkJICAgICAgICJNRTQwMDA6bWU0MDAwX2NudF9jb25maWcoKTpDb3VudGVyICVkIGlzIG5vdCBhdmFpbGFibGVcbiIsCisJCSAgICAgICBjbWQuY291bnRlcik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qIENoZWNrIG1vZGUgcGFyYW1ldGVyICovCisJc3dpdGNoIChjbWQubW9kZSkgeworCWNhc2UgTUU0MDAwX0NOVF9NT0RFXzA6CisJCW1vZGUgPSBNRTQwMDBfQ05UX0NUUkxfQklUX01PREVfMDsKKwkJYnJlYWs7CisJY2FzZSBNRTQwMDBfQ05UX01PREVfMToKKwkJbW9kZSA9IE1FNDAwMF9DTlRfQ1RSTF9CSVRfTU9ERV8xOworCQlicmVhazsKKwljYXNlIE1FNDAwMF9DTlRfTU9ERV8yOgorCQltb2RlID0gTUU0MDAwX0NOVF9DVFJMX0JJVF9NT0RFXzI7CisJCWJyZWFrOworCWNhc2UgTUU0MDAwX0NOVF9NT0RFXzM6CisJCW1vZGUgPSBNRTQwMDBfQ05UX0NUUkxfQklUX01PREVfMzsKKwkJYnJlYWs7CisJY2FzZSBNRTQwMDBfQ05UX01PREVfNDoKKwkJbW9kZSA9IE1FNDAwMF9DTlRfQ1RSTF9CSVRfTU9ERV80OworCQlicmVhazsKKwljYXNlIE1FNDAwMF9DTlRfTU9ERV81OgorCQltb2RlID0gTUU0MDAwX0NOVF9DVFJMX0JJVF9NT0RFXzU7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXByaW50ayhLRVJOX0VSUgorCQkgICAgICAgIk1FNDAwMDptZTQwMDBfY250X2NvbmZpZygpOk1vZGUgJWQgaXMgbm90IGF2YWlsYWJsZVxuIiwKKwkJICAgICAgIGNtZC5tb2RlKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogV3JpdGUgdGhlIGNvbnRyb2wgd29yZCAqLworCW1lNDAwMF9vdXRiKChjb3VudGVyIHwgbW9kZSB8IDB4MzApLCBjbnRfY29udGV4dC0+Y3RybF9yZWcpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbWU0MDAwX2NudF9yZWFkKG1lNDAwMF9jbnRfdCAqIGFyZywKKwkJCSAgIG1lNDAwMF9jbnRfY29udGV4dF90ICogY250X2NvbnRleHQpCit7CisJbWU0MDAwX2NudF90IGNtZDsKKwl1OCB0bXA7CisJaW50IGVycjsKKworCUNBTExfUERFQlVHKCJtZTQwMDBfY250X3JlYWQoKSBpcyBleGVjdXRlZFxuIik7CisKKwkvKiBDb3B5IGRhdGEgZnJvbSB1c2VyICovCisJZXJyID0gY29weV9mcm9tX3VzZXIoJmNtZCwgYXJnLCBzaXplb2YobWU0MDAwX2NudF90KSk7CisJaWYgKGVycikgeworCQlwcmludGsoS0VSTl9FUlIKKwkJICAgICAgICJNRTQwMDA6bWU0MDAwX2NudF9yZWFkKCk6Q2FuJ3QgY29weSBmcm9tIHVzZXIgc3BhY2VcbiIpOworCQlyZXR1cm4gLUVGQVVMVDsKKwl9CisKKwkvKiBSZWFkIGNvdW50ZXIgKi8KKwlzd2l0Y2ggKGNtZC5jb3VudGVyKSB7CisJY2FzZSBNRTQwMDBfQ05UX0NPVU5URVJfMDoKKwkJdG1wID0gbWU0MDAwX2luYihjbnRfY29udGV4dC0+Y291bnRlcl8wX3JlZyk7CisJCWNtZC52YWx1ZSA9IHRtcDsKKwkJdG1wID0gbWU0MDAwX2luYihjbnRfY29udGV4dC0+Y291bnRlcl8wX3JlZyk7CisJCWNtZC52YWx1ZSB8PSAoKHUxNikgdG1wKSA8PCA4OworCQlicmVhazsKKwljYXNlIE1FNDAwMF9DTlRfQ09VTlRFUl8xOgorCQl0bXAgPSBtZTQwMDBfaW5iKGNudF9jb250ZXh0LT5jb3VudGVyXzFfcmVnKTsKKwkJY21kLnZhbHVlID0gdG1wOworCQl0bXAgPSBtZTQwMDBfaW5iKGNudF9jb250ZXh0LT5jb3VudGVyXzFfcmVnKTsKKwkJY21kLnZhbHVlIHw9ICgodTE2KSB0bXApIDw8IDg7CisJCWJyZWFrOworCWNhc2UgTUU0MDAwX0NOVF9DT1VOVEVSXzI6CisJCXRtcCA9IG1lNDAwMF9pbmIoY250X2NvbnRleHQtPmNvdW50ZXJfMl9yZWcpOworCQljbWQudmFsdWUgPSB0bXA7CisJCXRtcCA9IG1lNDAwMF9pbmIoY250X2NvbnRleHQtPmNvdW50ZXJfMl9yZWcpOworCQljbWQudmFsdWUgfD0gKCh1MTYpIHRtcCkgPDwgODsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcHJpbnRrKEtFUk5fRVJSCisJCSAgICAgICAiTUU0MDAwOm1lNDAwMF9jbnRfcmVhZCgpOkNvdW50ZXIgJWQgaXMgbm90IGF2YWlsYWJsZVxuIiwKKwkJICAgICAgIGNtZC5jb3VudGVyKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogQ29weSByZXN1bHQgYmFjayB0byB1c2VyICovCisJZXJyID0gY29weV90b191c2VyKGFyZywgJmNtZCwgc2l6ZW9mKG1lNDAwMF9jbnRfdCkpOworCWlmIChlcnIpIHsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCSAgICAgICAiTUU0MDAwOm1lNDAwMF9jbnRfcmVhZCgpOkNhbid0IGNvcHkgdG8gdXNlciBzcGFjZVxuIik7CisJCXJldHVybiAtRUZBVUxUOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG1lNDAwMF9jbnRfd3JpdGUobWU0MDAwX2NudF90ICogYXJnLAorCQkJICAgIG1lNDAwMF9jbnRfY29udGV4dF90ICogY250X2NvbnRleHQpCit7CisJbWU0MDAwX2NudF90IGNtZDsKKwl1OCB0bXA7CisJaW50IGVycjsKKworCUNBTExfUERFQlVHKCJtZTQwMDBfY250X3dyaXRlKCkgaXMgZXhlY3V0ZWRcbiIpOworCisJLyogQ29weSBkYXRhIGZyb20gdXNlciAqLworCWVyciA9IGNvcHlfZnJvbV91c2VyKCZjbWQsIGFyZywgc2l6ZW9mKG1lNDAwMF9jbnRfdCkpOworCWlmIChlcnIpIHsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCSAgICAgICAiTUU0MDAwOm1lNDAwMF9jbnRfd3JpdGUoKTpDYW4ndCBjb3B5IGZyb20gdXNlciBzcGFjZVxuIik7CisJCXJldHVybiAtRUZBVUxUOworCX0KKworCS8qIFdyaXRlIGNvdW50ZXIgKi8KKwlzd2l0Y2ggKGNtZC5jb3VudGVyKSB7CisJY2FzZSBNRTQwMDBfQ05UX0NPVU5URVJfMDoKKwkJdG1wID0gY21kLnZhbHVlICYgMHhGRjsKKwkJbWU0MDAwX291dGIodG1wLCBjbnRfY29udGV4dC0+Y291bnRlcl8wX3JlZyk7CisJCXRtcCA9IChjbWQudmFsdWUgPj4gOCkgJiAweEZGOworCQltZTQwMDBfb3V0Yih0bXAsIGNudF9jb250ZXh0LT5jb3VudGVyXzBfcmVnKTsKKwkJYnJlYWs7CisJY2FzZSBNRTQwMDBfQ05UX0NPVU5URVJfMToKKwkJdG1wID0gY21kLnZhbHVlICYgMHhGRjsKKwkJbWU0MDAwX291dGIodG1wLCBjbnRfY29udGV4dC0+Y291bnRlcl8xX3JlZyk7CisJCXRtcCA9IChjbWQudmFsdWUgPj4gOCkgJiAweEZGOworCQltZTQwMDBfb3V0Yih0bXAsIGNudF9jb250ZXh0LT5jb3VudGVyXzFfcmVnKTsKKwkJYnJlYWs7CisJY2FzZSBNRTQwMDBfQ05UX0NPVU5URVJfMjoKKwkJdG1wID0gY21kLnZhbHVlICYgMHhGRjsKKwkJbWU0MDAwX291dGIodG1wLCBjbnRfY29udGV4dC0+Y291bnRlcl8yX3JlZyk7CisJCXRtcCA9IChjbWQudmFsdWUgPj4gOCkgJiAweEZGOworCQltZTQwMDBfb3V0Yih0bXAsIGNudF9jb250ZXh0LT5jb3VudGVyXzJfcmVnKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcHJpbnRrKEtFUk5fRVJSCisJCSAgICAgICAiTUU0MDAwOm1lNDAwMF9jbnRfd3JpdGUoKTpDb3VudGVyICVkIGlzIG5vdCBhdmFpbGFibGVcbiIsCisJCSAgICAgICBjbWQuY291bnRlcik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG1lNDAwMF9jbnRfcmVzZXQobWU0MDAwX2NudF9jb250ZXh0X3QgKiBjbnRfY29udGV4dCkKK3sKKwlDQUxMX1BERUJVRygibWU0MDAwX2NudF9yZXNldCgpIGlzIGV4ZWN1dGVkXG4iKTsKKworCS8qIFNldCB0aGUgbW9kZSBhbmQgdmFsdWUgZm9yIGNvdW50ZXIgMCAqLworCW1lNDAwMF9vdXRiKDB4MzAsIGNudF9jb250ZXh0LT5jdHJsX3JlZyk7CisJbWU0MDAwX291dGIoMHgwMCwgY250X2NvbnRleHQtPmNvdW50ZXJfMF9yZWcpOworCW1lNDAwMF9vdXRiKDB4MDAsIGNudF9jb250ZXh0LT5jb3VudGVyXzBfcmVnKTsKKworCS8qIFNldCB0aGUgbW9kZSBhbmQgdmFsdWUgZm9yIGNvdW50ZXIgMSAqLworCW1lNDAwMF9vdXRiKDB4NzAsIGNudF9jb250ZXh0LT5jdHJsX3JlZyk7CisJbWU0MDAwX291dGIoMHgwMCwgY250X2NvbnRleHQtPmNvdW50ZXJfMV9yZWcpOworCW1lNDAwMF9vdXRiKDB4MDAsIGNudF9jb250ZXh0LT5jb3VudGVyXzFfcmVnKTsKKworCS8qIFNldCB0aGUgbW9kZSBhbmQgdmFsdWUgZm9yIGNvdW50ZXIgMiAqLworCW1lNDAwMF9vdXRiKDB4QjAsIGNudF9jb250ZXh0LT5jdHJsX3JlZyk7CisJbWU0MDAwX291dGIoMHgwMCwgY250X2NvbnRleHQtPmNvdW50ZXJfMl9yZWcpOworCW1lNDAwMF9vdXRiKDB4MDAsIGNudF9jb250ZXh0LT5jb3VudGVyXzJfcmVnKTsKKworCXJldHVybiAwOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBFeHRlcm5hbCBJbnRlcnJ1cHQgc3R1ZmYgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGludCBtZTQwMDBfZXh0X2ludF9pb2N0bChzdHJ1Y3QgaW5vZGUgKmlub2RlX3AsIHN0cnVjdCBmaWxlICpmaWxlX3AsCisJCQkJdW5zaWduZWQgaW50IHNlcnZpY2UsIHVuc2lnbmVkIGxvbmcgYXJnKQoreworCW1lNDAwMF9leHRfaW50X2NvbnRleHRfdCAqZXh0X2ludF9jb250ZXh0OworCisJQ0FMTF9QREVCVUcoIm1lNDAwMF9leHRfaW50X2lvY3RsKCkgaXMgZXhlY3V0ZWRcbiIpOworCisJZXh0X2ludF9jb250ZXh0ID0gZmlsZV9wLT5wcml2YXRlX2RhdGE7CisKKwlpZiAoX0lPQ19UWVBFKHNlcnZpY2UpICE9IE1FNDAwMF9NQUdJQykgeworCQlwcmludGsoS0VSTl9FUlIgIm1lNDAwMF9leHRfaW50X2lvY3RsKCk6V3JvbmcgbWFnaWMgbnVtYmVyXG4iKTsKKwkJcmV0dXJuIC1FTk9UVFk7CisJfQorCWlmIChfSU9DX05SKHNlcnZpY2UpID4gTUU0MDAwX0lPQ1RMX01BWE5SKSB7CisJCXByaW50ayhLRVJOX0VSUgorCQkgICAgICAgIm1lNDAwMF9leHRfaW50X2lvY3RsKCk6U2VydmljZSBudW1iZXIgdG8gaGlnaFxuIik7CisJCXJldHVybiAtRU5PVFRZOworCX0KKworCXN3aXRjaCAoc2VydmljZSkgeworCWNhc2UgTUU0MDAwX0VYVF9JTlRfRU5BQkxFOgorCQlyZXR1cm4gbWU0MDAwX2V4dF9pbnRfZW5hYmxlKGV4dF9pbnRfY29udGV4dCk7CisJY2FzZSBNRTQwMDBfRVhUX0lOVF9ESVNBQkxFOgorCQlyZXR1cm4gbWU0MDAwX2V4dF9pbnRfZGlzYWJsZShleHRfaW50X2NvbnRleHQpOworCWNhc2UgTUU0MDAwX0VYVF9JTlRfQ09VTlQ6CisJCXJldHVybiBtZTQwMDBfZXh0X2ludF9jb3VudCgodW5zaWduZWQgbG9uZyAqKWFyZywKKwkJCQkJICAgIGV4dF9pbnRfY29udGV4dCk7CisJZGVmYXVsdDoKKwkJcHJpbnRrKEtFUk5fRVJSCisJCSAgICAgICAiTUU0MDAwOm1lNDAwMF9leHRfaW50X2lvY3RsKCk6SW52YWxpZCBzZXJ2aWNlIG51bWJlciAlZFxuIiwKKwkJICAgICAgIHNlcnZpY2UpOworCQlyZXR1cm4gLUVOT1RUWTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbWU0MDAwX2V4dF9pbnRfZW5hYmxlKG1lNDAwMF9leHRfaW50X2NvbnRleHRfdCAqIGV4dF9pbnRfY29udGV4dCkKK3sKKwl1bnNpZ25lZCBsb25nIHRtcDsKKworCUNBTExfUERFQlVHKCJtZTQwMDBfZXh0X2ludF9lbmFibGUoKSBpcyBleGVjdXRlZFxuIik7CisKKwl0bXAgPSBtZTQwMDBfaW5sKGV4dF9pbnRfY29udGV4dC0+Y3RybF9yZWcpOworCXRtcCB8PSBNRTQwMDBfQUlfQ1RSTF9CSVRfRVhfSVJROworCW1lNDAwMF9vdXRsKHRtcCwgZXh0X2ludF9jb250ZXh0LT5jdHJsX3JlZyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtZTQwMDBfZXh0X2ludF9kaXNhYmxlKG1lNDAwMF9leHRfaW50X2NvbnRleHRfdCAqIGV4dF9pbnRfY29udGV4dCkKK3sKKwl1bnNpZ25lZCBsb25nIHRtcDsKKworCUNBTExfUERFQlVHKCJtZTQwMDBfZXh0X2ludF9kaXNhYmxlKCkgaXMgZXhlY3V0ZWRcbiIpOworCisJdG1wID0gbWU0MDAwX2lubChleHRfaW50X2NvbnRleHQtPmN0cmxfcmVnKTsKKwl0bXAgJj0gfk1FNDAwMF9BSV9DVFJMX0JJVF9FWF9JUlE7CisJbWU0MDAwX291dGwodG1wLCBleHRfaW50X2NvbnRleHQtPmN0cmxfcmVnKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG1lNDAwMF9leHRfaW50X2NvdW50KHVuc2lnbmVkIGxvbmcgKmFyZywKKwkJCQltZTQwMDBfZXh0X2ludF9jb250ZXh0X3QgKiBleHRfaW50X2NvbnRleHQpCit7CisKKwlDQUxMX1BERUJVRygibWU0MDAwX2V4dF9pbnRfY291bnQoKSBpcyBleGVjdXRlZFxuIik7CisKKwlwdXRfdXNlcihleHRfaW50X2NvbnRleHQtPmludF9jb3VudCwgYXJnKTsKKwlyZXR1cm4gMDsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gR2VuZXJhbCBzdHVmZiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW50IG1lNDAwMF9nZXRfdXNlcl9pbmZvKG1lNDAwMF91c2VyX2luZm9fdCAqIGFyZywKKwkJCQltZTQwMDBfaW5mb190ICogYm9hcmRfaW5mbykKK3sKKwltZTQwMDBfdXNlcl9pbmZvX3QgdXNlcl9pbmZvOworCisJQ0FMTF9QREVCVUcoIm1lNDAwMF9nZXRfdXNlcl9pbmZvKCkgaXMgZXhlY3V0ZWRcbiIpOworCisJdXNlcl9pbmZvLmJvYXJkX2NvdW50ID0gYm9hcmRfaW5mby0+Ym9hcmRfY291bnQ7CisJdXNlcl9pbmZvLnBseF9yZWdiYXNlID0gYm9hcmRfaW5mby0+cGx4X3JlZ2Jhc2U7CisJdXNlcl9pbmZvLnBseF9yZWdiYXNlX3NpemUgPSBib2FyZF9pbmZvLT5wbHhfcmVnYmFzZV9zaXplOworCXVzZXJfaW5mby5tZTQwMDBfcmVnYmFzZSA9IGJvYXJkX2luZm8tPm1lNDAwMF9yZWdiYXNlOworCXVzZXJfaW5mby5tZTQwMDBfcmVnYmFzZV9zaXplID0gYm9hcmRfaW5mby0+bWU0MDAwX3JlZ2Jhc2Vfc2l6ZTsKKwl1c2VyX2luZm8uc2VyaWFsX25vID0gYm9hcmRfaW5mby0+c2VyaWFsX25vOworCXVzZXJfaW5mby5od19yZXZpc2lvbiA9IGJvYXJkX2luZm8tPmh3X3JldmlzaW9uOworCXVzZXJfaW5mby52ZW5kb3JfaWQgPSBib2FyZF9pbmZvLT52ZW5kb3JfaWQ7CisJdXNlcl9pbmZvLmRldmljZV9pZCA9IGJvYXJkX2luZm8tPmRldmljZV9pZDsKKwl1c2VyX2luZm8ucGNpX2J1c19ubyA9IGJvYXJkX2luZm8tPnBjaV9idXNfbm87CisJdXNlcl9pbmZvLnBjaV9kZXZfbm8gPSBib2FyZF9pbmZvLT5wY2lfZGV2X25vOworCXVzZXJfaW5mby5wY2lfZnVuY19ubyA9IGJvYXJkX2luZm8tPnBjaV9mdW5jX25vOworCXVzZXJfaW5mby5pcnEgPSBib2FyZF9pbmZvLT5pcnE7CisJdXNlcl9pbmZvLmlycV9jb3VudCA9IGJvYXJkX2luZm8tPmlycV9jb3VudDsKKwl1c2VyX2luZm8uZHJpdmVyX3ZlcnNpb24gPSBNRTQwMDBfRFJJVkVSX1ZFUlNJT047CisJdXNlcl9pbmZvLmFvX2NvdW50ID0gYm9hcmRfaW5mby0+Ym9hcmRfcC0+YW8uY291bnQ7CisJdXNlcl9pbmZvLmFvX2ZpZm9fY291bnQgPSBib2FyZF9pbmZvLT5ib2FyZF9wLT5hby5maWZvX2NvdW50OworCisJdXNlcl9pbmZvLmFpX2NvdW50ID0gYm9hcmRfaW5mby0+Ym9hcmRfcC0+YWkuY291bnQ7CisJdXNlcl9pbmZvLmFpX3NoX2NvdW50ID0gYm9hcmRfaW5mby0+Ym9hcmRfcC0+YWkuc2hfY291bnQ7CisJdXNlcl9pbmZvLmFpX2V4X3RyaWdfYW5hbG9nID0gYm9hcmRfaW5mby0+Ym9hcmRfcC0+YWkuZXhfdHJpZ19hbmFsb2c7CisKKwl1c2VyX2luZm8uZGlvX2NvdW50ID0gYm9hcmRfaW5mby0+Ym9hcmRfcC0+ZGlvLmNvdW50OworCisJdXNlcl9pbmZvLmNudF9jb3VudCA9IGJvYXJkX2luZm8tPmJvYXJkX3AtPmNudC5jb3VudDsKKworCWlmIChjb3B5X3RvX3VzZXIoYXJnLCAmdXNlcl9pbmZvLCBzaXplb2YobWU0MDAwX3VzZXJfaW5mb190KSkpCisJCXJldHVybiAtRUZBVUxUOworCisJcmV0dXJuIDA7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIElTUiBTVFVGRiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW50IG1lNDAwMF9leHRfaW50X2Zhc3luYyhpbnQgZmQsIHN0cnVjdCBmaWxlICpmaWxlX3B0ciwgaW50IG1vZGUpCit7CisJaW50IHJlc3VsdCA9IDA7CisJbWU0MDAwX2V4dF9pbnRfY29udGV4dF90ICpleHRfaW50X2NvbnRleHQ7CisKKwlDQUxMX1BERUJVRygibWU0MDAwX2V4dF9pbnRfZmFzeW5jKCkgaXMgZXhlY3V0ZWRcbiIpOworCisJZXh0X2ludF9jb250ZXh0ID0gZmlsZV9wdHItPnByaXZhdGVfZGF0YTsKKworCXJlc3VsdCA9CisJICAgIGZhc3luY19oZWxwZXIoZmQsIGZpbGVfcHRyLCBtb2RlLCAmZXh0X2ludF9jb250ZXh0LT5mYXN5bmNfcHRyKTsKKworCUNBTExfUERFQlVHKCJtZTQwMDBfZXh0X2ludF9mYXN5bmMoKSBpcyBsZWF2ZWRcbiIpOworCXJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBtZTQwMDBfYW9faXNyKGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3sKKwl1MzIgdG1wOworCXUzMiB2YWx1ZTsKKwltZTQwMDBfYW9fY29udGV4dF90ICphb19jb250ZXh0OworCWludCBpOworCWludCBjID0gMDsKKwlpbnQgYzEgPSAwOworCS8vdW5zaWduZWQgbG9uZyBiZWZvcmU7CisJLy91bnNpZ25lZCBsb25nIGFmdGVyOworCisJSVNSX1BERUJVRygibWU0MDAwX2FvX2lzcigpIGlzIGV4ZWN1dGVkXG4iKTsKKworCWFvX2NvbnRleHQgPSBkZXZfaWQ7CisKKwkvKiBDaGVjayBpZiBpcnEgbnVtYmVyIGlzIHJpZ2h0ICovCisJaWYgKGlycSAhPSBhb19jb250ZXh0LT5pcnEpIHsKKwkJSVNSX1BERUJVRygibWU0MDAwX2FvX2lzcigpOmluY29ycmVjdCBpbnRlcnJ1cHQgbnVtOiAlZFxuIiwKKwkJCSAgIGlycSk7CisJCXJldHVybiBJUlFfTk9ORTsKKwl9CisKKwkvKiBDaGVjayBpZiB0aGlzIERBQyByaXNlZCBhbiBpbnRlcnJ1cHQgKi8KKwlpZiAoIQorCSAgICAoKDB4MSA8PCAoYW9fY29udGV4dC0+aW5kZXggKyAzKSkgJgorCSAgICAgbWU0MDAwX2lubChhb19jb250ZXh0LT5pcnFfc3RhdHVzX3JlZykpKSB7CisJCUlTUl9QREVCVUcoIm1lNDAwMF9hb19pc3IoKTpOb3QgdGhpcyBEQUNcbiIpOworCQlyZXR1cm4gSVJRX05PTkU7CisJfQorCisJLyogUmVhZCBzdGF0dXMgcmVnaXN0ZXIgdG8gZmluZCBvdXQgd2hhdCBoYXBwZW5lZCAqLworCXRtcCA9IG1lNDAwMF9pbmwoYW9fY29udGV4dC0+c3RhdHVzX3JlZyk7CisKKwlpZiAoISh0bXAgJiBNRTQwMDBfQU9fU1RBVFVTX0JJVF9FRikgJiYgKHRtcCAmIE1FNDAwMF9BT19TVEFUVVNfQklUX0hGKQorCSAgICAmJiAodG1wICYgTUU0MDAwX0FPX1NUQVRVU19CSVRfSEYpKSB7CisJCWMgPSBNRTQwMDBfQU9fRklGT19DT1VOVDsKKwkJSVNSX1BERUJVRygibWU0MDAwX2FvX2lzcigpOkZpZm8gZW1wdHlcbiIpOworCX0gZWxzZSBpZiAoKHRtcCAmIE1FNDAwMF9BT19TVEFUVVNfQklUX0VGKQorCQkgICAmJiAodG1wICYgTUU0MDAwX0FPX1NUQVRVU19CSVRfSEYpCisJCSAgICYmICh0bXAgJiBNRTQwMDBfQU9fU1RBVFVTX0JJVF9IRikpIHsKKwkJYyA9IE1FNDAwMF9BT19GSUZPX0NPVU5UIC8gMjsKKwkJSVNSX1BERUJVRygibWU0MDAwX2FvX2lzcigpOkZpZm8gdW5kZXIgaGFsZiBmdWxsXG4iKTsKKwl9IGVsc2UgeworCQljID0gMDsKKwkJSVNSX1BERUJVRygibWU0MDAwX2FvX2lzcigpOkZpZm8gZnVsbFxuIik7CisJfQorCisJSVNSX1BERUJVRygibWU0MDAwX2FvX2lzcigpOlRyeSB0byB3cml0ZSAweCUwNFggdmFsdWVzXG4iLCBjKTsKKworCXdoaWxlICgxKSB7CisJCWMxID0gbWU0MDAwX3ZhbHVlc190b19lbmQoYW9fY29udGV4dC0+Y2lyY19idWYsCisJCQkJCSAgTUU0MDAwX0FPX0JVRkZFUl9DT1VOVCk7CisJCUlTUl9QREVCVUcoIm1lNDAwMF9hb19pc3IoKTpWYWx1ZXMgdG8gZW5kID0gJWRcbiIsIGMxKTsKKwkJaWYgKGMxID4gYykKKwkJCWMxID0gYzsKKworCQlpZiAoYzEgPD0gMCkgeworCQkJSVNSX1BERUJVRworCQkJICAgICgibWU0MDAwX2FvX2lzcigpOldvcmsgZG9uZSBvciBidWZmZXIgZW1wdHlcbiIpOworCQkJYnJlYWs7CisJCX0KKwkJLy9yZHRzY2woYmVmb3JlKTsKKwkJaWYgKCgoYW9fY29udGV4dC0+Zmlmb19yZWcgJiAweEZGKSA9PSBNRTQwMDBfQU9fMDFfRklGT19SRUcpIHx8CisJCSAgICAoKGFvX2NvbnRleHQtPmZpZm9fcmVnICYgMHhGRikgPT0gTUU0MDAwX0FPXzAzX0ZJRk9fUkVHKSkgeworCQkJZm9yIChpID0gMDsgaSA8IGMxOyBpKyspIHsKKwkJCQl2YWx1ZSA9CisJCQkJICAgICgodTMyKQorCQkJCSAgICAgKCoKKwkJCQkgICAgICAoYW9fY29udGV4dC0+Y2lyY19idWYuYnVmICsKKwkJCQkgICAgICAgYW9fY29udGV4dC0+Y2lyY19idWYudGFpbCArIGkpKSkgPDwgMTY7CisJCQkJb3V0bCh2YWx1ZSwgYW9fY29udGV4dC0+Zmlmb19yZWcpOworCQkJfQorCQl9IGVsc2UKKwkJCW91dHN3KGFvX2NvbnRleHQtPmZpZm9fcmVnLAorCQkJICAgICAgYW9fY29udGV4dC0+Y2lyY19idWYuYnVmICsKKwkJCSAgICAgIGFvX2NvbnRleHQtPmNpcmNfYnVmLnRhaWwsIGMxKTsKKworCQkvL3JkdHNjbChhZnRlcik7CisJCS8vcHJpbnRrKEtFUk5fRVJSIk1FNDAwMDptZTQwMDBfYW9faXNyKCk6VGltZSBsYXBzZSA9ICVsdVxuIiwgYWZ0ZXIgLSBiZWZvcmUpOworCisJCWFvX2NvbnRleHQtPmNpcmNfYnVmLnRhaWwgPQorCQkgICAgKGFvX2NvbnRleHQtPmNpcmNfYnVmLnRhaWwgKyBjMSkgJiAoTUU0MDAwX0FPX0JVRkZFUl9DT1VOVCAtCisJCQkJCQkJMSk7CisJCUlTUl9QREVCVUcoIm1lNDAwMF9hb19pc3IoKTolZCB2YWx1ZXMgd3JvdGUgdG8gcG9ydCAweCUwNFhcbiIsCisJCQkgICBjMSwgYW9fY29udGV4dC0+Zmlmb19yZWcpOworCQljIC09IGMxOworCX0KKworCS8qIElmIHRoZXJlIGFyZSBubyB2YWx1ZXMgbGVmdCBpbiB0aGUgYnVmZmVyLCBkaXNhYmxlIGludGVycnVwdHMgKi8KKwlzcGluX2xvY2soJmFvX2NvbnRleHQtPmludF9sb2NrKTsKKwlpZiAoIW1lNDAwMF9idWZfY291bnQoYW9fY29udGV4dC0+Y2lyY19idWYsIE1FNDAwMF9BT19CVUZGRVJfQ09VTlQpKSB7CisJCUlTUl9QREVCVUcKKwkJICAgICgibWU0MDAwX2FvX2lzcigpOkRpc2FibGUgSW50ZXJydXB0IGJlY2F1c2Ugbm8gdmFsdWVzIGxlZnQgaW4gYnVmZmVyXG4iKTsKKwkJdG1wID0gbWU0MDAwX2lubChhb19jb250ZXh0LT5jdHJsX3JlZyk7CisJCXRtcCAmPSB+TUU0MDAwX0FPX0NUUkxfQklUX0VOQUJMRV9JUlE7CisJCW1lNDAwMF9vdXRsKHRtcCwgYW9fY29udGV4dC0+Y3RybF9yZWcpOworCX0KKwlzcGluX3VubG9jaygmYW9fY29udGV4dC0+aW50X2xvY2spOworCisJLyogUmVzZXQgdGhlIGludGVycnVwdCAqLworCXNwaW5fbG9jaygmYW9fY29udGV4dC0+aW50X2xvY2spOworCXRtcCA9IG1lNDAwMF9pbmwoYW9fY29udGV4dC0+Y3RybF9yZWcpOworCXRtcCB8PSBNRTQwMDBfQU9fQ1RSTF9CSVRfUkVTRVRfSVJROworCW1lNDAwMF9vdXRsKHRtcCwgYW9fY29udGV4dC0+Y3RybF9yZWcpOworCXRtcCAmPSB+TUU0MDAwX0FPX0NUUkxfQklUX1JFU0VUX0lSUTsKKwltZTQwMDBfb3V0bCh0bXAsIGFvX2NvbnRleHQtPmN0cmxfcmVnKTsKKworCS8qIElmIHN0YXRlIG1hY2hpbmUgaXMgc3RvcHBlZCwgZmxvdyB3YXMgaW50ZXJydXB0ZWQgKi8KKwlpZiAoIShtZTQwMDBfaW5sKGFvX2NvbnRleHQtPnN0YXR1c19yZWcpICYgTUU0MDAwX0FPX1NUQVRVU19CSVRfRlNNKSkgeworCQlwcmludGsoS0VSTl9FUlIgIk1FNDAwMDptZTQwMDBfYW9faXNyKCk6QnJva2VuIHBpcGVcbiIpOworCQlhb19jb250ZXh0LT5waXBlX2ZsYWcgPSAxOwkvLyBTZXQgZmxhZyBpbiBvcmRlciB0byBpbmZvcm0gd3JpdGUgcm91dGluZQorCQl0bXAgJj0gfk1FNDAwMF9BT19DVFJMX0JJVF9FTkFCTEVfSVJROwkvLyBEaXNhYmxlIGludGVycnVwdAorCX0KKwltZTQwMDBfb3V0bCh0bXAsIGFvX2NvbnRleHQtPmN0cmxfcmVnKTsKKwlzcGluX3VubG9jaygmYW9fY29udGV4dC0+aW50X2xvY2spOworCisJLyogV2FrZSB1cCB3YWl0aW5nIHByb2Nlc3MgKi8KKwl3YWtlX3VwX2ludGVycnVwdGlibGUoJihhb19jb250ZXh0LT53YWl0X3F1ZXVlKSk7CisKKwkvKiBDb3VudCB0aGUgaW50ZXJydXB0ICovCisJYW9fY29udGV4dC0+Ym9hcmRfaW5mby0+aXJxX2NvdW50Kys7CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBtZTQwMDBfYWlfaXNyKGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3sKKwl1MzIgdG1wOworCW1lNDAwMF9haV9jb250ZXh0X3QgKmFpX2NvbnRleHQ7CisJaW50IGk7CisJaW50IGMgPSAwOworCWludCBjMSA9IDA7CisjaWZkZWYgTUU0MDAwX0lTUl9ERUJVRworCXVuc2lnbmVkIGxvbmcgYmVmb3JlOworCXVuc2lnbmVkIGxvbmcgYWZ0ZXI7CisjZW5kaWYKKworCUlTUl9QREVCVUcoIm1lNDAwMF9haV9pc3IoKSBpcyBleGVjdXRlZFxuIik7CisKKyNpZmRlZiBNRTQwMDBfSVNSX0RFQlVHCisJcmR0c2NsKGJlZm9yZSk7CisjZW5kaWYKKworCWFpX2NvbnRleHQgPSBkZXZfaWQ7CisKKwkvKiBDaGVjayBpZiBpcnEgbnVtYmVyIGlzIHJpZ2h0ICovCisJaWYgKGlycSAhPSBhaV9jb250ZXh0LT5pcnEpIHsKKwkJSVNSX1BERUJVRygibWU0MDAwX2FpX2lzcigpOmluY29ycmVjdCBpbnRlcnJ1cHQgbnVtOiAlZFxuIiwKKwkJCSAgIGlycSk7CisJCXJldHVybiBJUlFfTk9ORTsKKwl9CisKKwlpZiAobWU0MDAwX2lubChhaV9jb250ZXh0LT5pcnFfc3RhdHVzX3JlZykgJgorCSAgICBNRTQwMDBfSVJRX1NUQVRVU19CSVRfQUlfSEYpIHsKKwkJSVNSX1BERUJVRworCQkgICAgKCJtZTQwMDBfYWlfaXNyKCk6RmlmbyBoYWxmIGZ1bGwgaW50ZXJydXB0IG9jY3VyZWRcbiIpOworCisJCS8qIFJlYWQgc3RhdHVzIHJlZ2lzdGVyIHRvIGZpbmQgb3V0IHdoYXQgaGFwcGVuZWQgKi8KKwkJdG1wID0gbWU0MDAwX2lubChhaV9jb250ZXh0LT5jdHJsX3JlZyk7CisKKwkJaWYgKCEodG1wICYgTUU0MDAwX0FJX1NUQVRVU19CSVRfRkZfREFUQSkgJiYKKwkJICAgICEodG1wICYgTUU0MDAwX0FJX1NUQVRVU19CSVRfSEZfREFUQSkKKwkJICAgICYmICh0bXAgJiBNRTQwMDBfQUlfU1RBVFVTX0JJVF9FRl9EQVRBKSkgeworCQkJSVNSX1BERUJVRygibWU0MDAwX2FpX2lzcigpOkZpZm8gZnVsbFxuIik7CisJCQljID0gTUU0MDAwX0FJX0ZJRk9fQ09VTlQ7CisKKwkJCS8qIEZJRk8gb3ZlcmZsb3csIHNvIHN0b3AgY29udmVyc2lvbiBhbmQgZGlzYWJsZSBhbGwgaW50ZXJydXB0cyAqLworCQkJc3Bpbl9sb2NrKCZhaV9jb250ZXh0LT5pbnRfbG9jayk7CisJCQl0bXAgPSBtZTQwMDBfaW5sKGFpX2NvbnRleHQtPmN0cmxfcmVnKTsKKwkJCXRtcCB8PSBNRTQwMDBfQUlfQ1RSTF9CSVRfSU1NRURJQVRFX1NUT1A7CisJCQl0bXAgJj0KKwkJCSAgICB+KE1FNDAwMF9BSV9DVFJMX0JJVF9IRl9JUlEgfAorCQkJICAgICAgTUU0MDAwX0FJX0NUUkxfQklUX1NDX0lSUSk7CisJCQlvdXRsKHRtcCwgYWlfY29udGV4dC0+Y3RybF9yZWcpOworCQkJc3Bpbl91bmxvY2soJmFpX2NvbnRleHQtPmludF9sb2NrKTsKKwkJfSBlbHNlIGlmICgodG1wICYgTUU0MDAwX0FJX1NUQVRVU19CSVRfRkZfREFUQSkgJiYKKwkJCSAgICEodG1wICYgTUU0MDAwX0FJX1NUQVRVU19CSVRfSEZfREFUQSkKKwkJCSAgICYmICh0bXAgJiBNRTQwMDBfQUlfU1RBVFVTX0JJVF9FRl9EQVRBKSkgeworCQkJSVNSX1BERUJVRygibWU0MDAwX2FpX2lzcigpOkZpZm8gaGFsZiBmdWxsXG4iKTsKKwkJCWMgPSBNRTQwMDBfQUlfRklGT19DT1VOVCAvIDI7CisJCX0gZWxzZSB7CisJCQljID0gMDsKKwkJCUlTUl9QREVCVUcKKwkJCSAgICAoIm1lNDAwMF9haV9pc3IoKTpDYW4ndCBkZXRlcm1pbmUgc3RhdGUgb2YgZmlmb1xuIik7CisJCX0KKworCQlJU1JfUERFQlVHKCJtZTQwMDBfYWlfaXNyKCk6VHJ5IHRvIHJlYWQgJWQgdmFsdWVzXG4iLCBjKTsKKworCQl3aGlsZSAoMSkgeworCQkJYzEgPSBtZTQwMDBfc3BhY2VfdG9fZW5kKGFpX2NvbnRleHQtPmNpcmNfYnVmLAorCQkJCQkJIE1FNDAwMF9BSV9CVUZGRVJfQ09VTlQpOworCQkJSVNSX1BERUJVRygibWU0MDAwX2FpX2lzcigpOlNwYWNlIHRvIGVuZCA9ICVkXG4iLCBjMSk7CisJCQlpZiAoYzEgPiBjKQorCQkJCWMxID0gYzsKKworCQkJaWYgKGMxIDw9IDApIHsKKwkJCQlJU1JfUERFQlVHCisJCQkJICAgICgibWU0MDAwX2FpX2lzcigpOldvcmsgZG9uZSBvciBidWZmZXIgZnVsbFxuIik7CisJCQkJYnJlYWs7CisJCQl9CisKKwkJCWluc3coYWlfY29udGV4dC0+ZGF0YV9yZWcsCisJCQkgICAgIGFpX2NvbnRleHQtPmNpcmNfYnVmLmJ1ZiArCisJCQkgICAgIGFpX2NvbnRleHQtPmNpcmNfYnVmLmhlYWQsIGMxKTsKKwkJCWFpX2NvbnRleHQtPmNpcmNfYnVmLmhlYWQgPQorCQkJICAgIChhaV9jb250ZXh0LT5jaXJjX2J1Zi5oZWFkICsKKwkJCSAgICAgYzEpICYgKE1FNDAwMF9BSV9CVUZGRVJfQ09VTlQgLSAxKTsKKwkJCWMgLT0gYzE7CisJCX0KKworCQkvKiBXb3JrIGlzIGRvbmUsIHNvIHJlc2V0IHRoZSBpbnRlcnJ1cHQgKi8KKwkJSVNSX1BERUJVRworCQkgICAgKCJtZTQwMDBfYWlfaXNyKCk6cmVzZXQgaW50ZXJydXB0IGZpZm8gaGFsZiBmdWxsIGludGVycnVwdFxuIik7CisJCXNwaW5fbG9jaygmYWlfY29udGV4dC0+aW50X2xvY2spOworCQl0bXAgPSBtZTQwMDBfaW5sKGFpX2NvbnRleHQtPmN0cmxfcmVnKTsKKwkJdG1wIHw9IE1FNDAwMF9BSV9DVFJMX0JJVF9IRl9JUlFfUkVTRVQ7CisJCW1lNDAwMF9vdXRsKHRtcCwgYWlfY29udGV4dC0+Y3RybF9yZWcpOworCQl0bXAgJj0gfk1FNDAwMF9BSV9DVFJMX0JJVF9IRl9JUlFfUkVTRVQ7CisJCW1lNDAwMF9vdXRsKHRtcCwgYWlfY29udGV4dC0+Y3RybF9yZWcpOworCQlzcGluX3VubG9jaygmYWlfY29udGV4dC0+aW50X2xvY2spOworCX0KKworCWlmIChtZTQwMDBfaW5sKGFpX2NvbnRleHQtPmlycV9zdGF0dXNfcmVnKSAmIE1FNDAwMF9JUlFfU1RBVFVTX0JJVF9TQykgeworCQlJU1JfUERFQlVHCisJCSAgICAoIm1lNDAwMF9haV9pc3IoKTpTYW1wbGUgY291bnRlciBpbnRlcnJ1cHQgb2NjdXJlZFxuIik7CisKKwkJaWYgKCFhaV9jb250ZXh0LT5zYW1wbGVfY291bnRlcl9yZWxvYWQpIHsKKwkJCUlTUl9QREVCVUcKKwkJCSAgICAoIm1lNDAwMF9haV9pc3IoKTpTaW5nbGUgZGF0YSBibG9jayBhdmFpbGFibGVcbiIpOworCisJCQkvKiBQb2xsIGRhdGEgdW50aWwgZmlmbyBlbXB0eSAqLworCQkJZm9yIChpID0gMDsKKwkJCSAgICAgKGkgPCBNRTQwMDBfQUlfRklGT19DT1VOVCAvIDIpCisJCQkgICAgICYmIChpbmwoYWlfY29udGV4dC0+Y3RybF9yZWcpICYKKwkJCQkgTUU0MDAwX0FJX1NUQVRVU19CSVRfRUZfREFUQSk7IGkrKykgeworCQkJCWlmIChtZTQwMDBfc3BhY2VfdG9fZW5kCisJCQkJICAgIChhaV9jb250ZXh0LT5jaXJjX2J1ZiwKKwkJCQkgICAgIE1FNDAwMF9BSV9CVUZGRVJfQ09VTlQpKSB7CisJCQkJCSooYWlfY29udGV4dC0+Y2lyY19idWYuYnVmICsKKwkJCQkJICBhaV9jb250ZXh0LT5jaXJjX2J1Zi5oZWFkKSA9CisJCSBpbncoYWlfY29udGV4dC0+ZGF0YV9yZWcpOworCQkJCQlhaV9jb250ZXh0LT5jaXJjX2J1Zi5oZWFkID0KKwkJCQkJICAgIChhaV9jb250ZXh0LT5jaXJjX2J1Zi5oZWFkICsKKwkJCQkJICAgICAxKSAmIChNRTQwMDBfQUlfQlVGRkVSX0NPVU5UIC0gMSk7CisJCQkJfSBlbHNlCisJCQkJCWJyZWFrOworCQkJfQorCQkJSVNSX1BERUJVRygibWU0MDAwX2FpX2lzcigpOiVkIHZhbHVlcyByZWFkXG4iLCBpKTsKKwkJfSBlbHNlIHsKKwkJCWlmIChhaV9jb250ZXh0LT5zYW1wbGVfY291bnRlciA8PQorCQkJICAgIE1FNDAwMF9BSV9GSUZPX0NPVU5UIC8gMikgeworCQkJCUlTUl9QREVCVUcKKwkJCQkgICAgKCJtZTQwMDBfYWlfaXNyKCk6SW50ZXJydXB0IGZyb20gYWRqdXN0YWJsZSBoYWxmIGZ1bGwgdGhyZXNob2xkXG4iKTsKKworCQkJCS8qIFJlYWQgc3RhdHVzIHJlZ2lzdGVyIHRvIGZpbmQgb3V0IHdoYXQgaGFwcGVuZWQgKi8KKwkJCQl0bXAgPSBtZTQwMDBfaW5sKGFpX2NvbnRleHQtPmN0cmxfcmVnKTsKKworCQkJCWlmICghKHRtcCAmIE1FNDAwMF9BSV9TVEFUVVNfQklUX0ZGX0RBVEEpICYmCisJCQkJICAgICEodG1wICYgTUU0MDAwX0FJX1NUQVRVU19CSVRfSEZfREFUQSkKKwkJCQkgICAgJiYgKHRtcCAmIE1FNDAwMF9BSV9TVEFUVVNfQklUX0VGX0RBVEEpKSB7CisJCQkJCUlTUl9QREVCVUcKKwkJCQkJICAgICgibWU0MDAwX2FpX2lzcigpOkZpZm8gZnVsbFxuIik7CisJCQkJCWMgPSBNRTQwMDBfQUlfRklGT19DT1VOVDsKKworCQkJCQkvKiBGSUZPIG92ZXJmbG93LCBzbyBzdG9wIGNvbnZlcnNpb24gKi8KKwkJCQkJc3Bpbl9sb2NrKCZhaV9jb250ZXh0LT5pbnRfbG9jayk7CisJCQkJCXRtcCA9IG1lNDAwMF9pbmwoYWlfY29udGV4dC0+Y3RybF9yZWcpOworCQkJCQl0bXAgfD0KKwkJCQkJICAgIE1FNDAwMF9BSV9DVFJMX0JJVF9JTU1FRElBVEVfU1RPUDsKKwkJCQkJb3V0bCh0bXAsIGFpX2NvbnRleHQtPmN0cmxfcmVnKTsKKwkJCQkJc3Bpbl91bmxvY2soJmFpX2NvbnRleHQtPmludF9sb2NrKTsKKwkJCQl9IGVsc2UgaWYgKCh0bXAgJiBNRTQwMDBfQUlfU1RBVFVTX0JJVF9GRl9EQVRBKQorCQkJCQkgICAmJiAhKHRtcCAmCisJCQkJCQlNRTQwMDBfQUlfU1RBVFVTX0JJVF9IRl9EQVRBKQorCQkJCQkgICAmJiAodG1wICYKKwkJCQkJICAgICAgIE1FNDAwMF9BSV9TVEFUVVNfQklUX0VGX0RBVEEpKSB7CisJCQkJCUlTUl9QREVCVUcKKwkJCQkJICAgICgibWU0MDAwX2FpX2lzcigpOkZpZm8gaGFsZiBmdWxsXG4iKTsKKwkJCQkJYyA9IE1FNDAwMF9BSV9GSUZPX0NPVU5UIC8gMjsKKwkJCQl9IGVsc2UgeworCQkJCQljID0gYWlfY29udGV4dC0+c2FtcGxlX2NvdW50ZXI7CisJCQkJCUlTUl9QREVCVUcKKwkJCQkJICAgICgibWU0MDAwX2FpX2lzcigpOlNhbXBsZSBjb3VudCB2YWx1ZXNcbiIpOworCQkJCX0KKworCQkJCUlTUl9QREVCVUcKKwkJCQkgICAgKCJtZTQwMDBfYWlfaXNyKCk6VHJ5IHRvIHJlYWQgJWQgdmFsdWVzXG4iLAorCQkJCSAgICAgYyk7CisKKwkJCQl3aGlsZSAoMSkgeworCQkJCQljMSA9IG1lNDAwMF9zcGFjZV90b19lbmQoYWlfY29udGV4dC0+CisJCQkJCQkJCSBjaXJjX2J1ZiwKKwkJCQkJCQkJIE1FNDAwMF9BSV9CVUZGRVJfQ09VTlQpOworCQkJCQlJU1JfUERFQlVHCisJCQkJCSAgICAoIm1lNDAwMF9haV9pc3IoKTpTcGFjZSB0byBlbmQgPSAlZFxuIiwKKwkJCQkJICAgICBjMSk7CisJCQkJCWlmIChjMSA+IGMpCisJCQkJCQljMSA9IGM7CisKKwkJCQkJaWYgKGMxIDw9IDApIHsKKwkJCQkJCUlTUl9QREVCVUcKKwkJCQkJCSAgICAoIm1lNDAwMF9haV9pc3IoKTpXb3JrIGRvbmUgb3IgYnVmZmVyIGZ1bGxcbiIpOworCQkJCQkJYnJlYWs7CisJCQkJCX0KKworCQkJCQlpbnN3KGFpX2NvbnRleHQtPmRhdGFfcmVnLAorCQkJCQkgICAgIGFpX2NvbnRleHQtPmNpcmNfYnVmLmJ1ZiArCisJCQkJCSAgICAgYWlfY29udGV4dC0+Y2lyY19idWYuaGVhZCwgYzEpOworCQkJCQlhaV9jb250ZXh0LT5jaXJjX2J1Zi5oZWFkID0KKwkJCQkJICAgIChhaV9jb250ZXh0LT5jaXJjX2J1Zi5oZWFkICsKKwkJCQkJICAgICBjMSkgJiAoTUU0MDAwX0FJX0JVRkZFUl9DT1VOVCAtIDEpOworCQkJCQljIC09IGMxOworCQkJCX0KKwkJCX0gZWxzZSB7CisJCQkJSVNSX1BERUJVRworCQkJCSAgICAoIm1lNDAwMF9haV9pc3IoKTpNdWx0aXBsZSBkYXRhIGJsb2NrIGF2YWlsYWJsZVxuIik7CisKKwkJCQkvKiBSZWFkIHN0YXR1cyByZWdpc3RlciB0byBmaW5kIG91dCB3aGF0IGhhcHBlbmVkICovCisJCQkJdG1wID0gbWU0MDAwX2lubChhaV9jb250ZXh0LT5jdHJsX3JlZyk7CisKKwkJCQlpZiAoISh0bXAgJiBNRTQwMDBfQUlfU1RBVFVTX0JJVF9GRl9EQVRBKSAmJgorCQkJCSAgICAhKHRtcCAmIE1FNDAwMF9BSV9TVEFUVVNfQklUX0hGX0RBVEEpCisJCQkJICAgICYmICh0bXAgJiBNRTQwMDBfQUlfU1RBVFVTX0JJVF9FRl9EQVRBKSkgeworCQkJCQlJU1JfUERFQlVHCisJCQkJCSAgICAoIm1lNDAwMF9haV9pc3IoKTpGaWZvIGZ1bGxcbiIpOworCQkJCQljID0gTUU0MDAwX0FJX0ZJRk9fQ09VTlQ7CisKKwkJCQkJLyogRklGTyBvdmVyZmxvdywgc28gc3RvcCBjb252ZXJzaW9uICovCisJCQkJCXNwaW5fbG9jaygmYWlfY29udGV4dC0+aW50X2xvY2spOworCQkJCQl0bXAgPSBtZTQwMDBfaW5sKGFpX2NvbnRleHQtPmN0cmxfcmVnKTsKKwkJCQkJdG1wIHw9CisJCQkJCSAgICBNRTQwMDBfQUlfQ1RSTF9CSVRfSU1NRURJQVRFX1NUT1A7CisJCQkJCW91dGwodG1wLCBhaV9jb250ZXh0LT5jdHJsX3JlZyk7CisJCQkJCXNwaW5fdW5sb2NrKCZhaV9jb250ZXh0LT5pbnRfbG9jayk7CisKKwkJCQkJd2hpbGUgKDEpIHsKKwkJCQkJCWMxID0gbWU0MDAwX3NwYWNlX3RvX2VuZAorCQkJCQkJICAgIChhaV9jb250ZXh0LT5jaXJjX2J1ZiwKKwkJCQkJCSAgICAgTUU0MDAwX0FJX0JVRkZFUl9DT1VOVCk7CisJCQkJCQlJU1JfUERFQlVHCisJCQkJCQkgICAgKCJtZTQwMDBfYWlfaXNyKCk6U3BhY2UgdG8gZW5kID0gJWRcbiIsCisJCQkJCQkgICAgIGMxKTsKKwkJCQkJCWlmIChjMSA+IGMpCisJCQkJCQkJYzEgPSBjOworCisJCQkJCQlpZiAoYzEgPD0gMCkgeworCQkJCQkJCUlTUl9QREVCVUcKKwkJCQkJCQkgICAgKCJtZTQwMDBfYWlfaXNyKCk6V29yayBkb25lIG9yIGJ1ZmZlciBmdWxsXG4iKTsKKwkJCQkJCQlicmVhazsKKwkJCQkJCX0KKworCQkJCQkJaW5zdyhhaV9jb250ZXh0LT5kYXRhX3JlZywKKwkJCQkJCSAgICAgYWlfY29udGV4dC0+Y2lyY19idWYuYnVmICsKKwkJCQkJCSAgICAgYWlfY29udGV4dC0+Y2lyY19idWYuaGVhZCwKKwkJCQkJCSAgICAgYzEpOworCQkJCQkJYWlfY29udGV4dC0+Y2lyY19idWYuaGVhZCA9CisJCQkJCQkgICAgKGFpX2NvbnRleHQtPmNpcmNfYnVmLmhlYWQgKworCQkJCQkJICAgICBjMSkgJgorCQkJCQkJICAgIChNRTQwMDBfQUlfQlVGRkVSX0NPVU5UIC0KKwkJCQkJCSAgICAgMSk7CisJCQkJCQljIC09IGMxOworCQkJCQl9CisJCQkJfSBlbHNlIGlmICgodG1wICYgTUU0MDAwX0FJX1NUQVRVU19CSVRfRkZfREFUQSkKKwkJCQkJICAgJiYgISh0bXAgJgorCQkJCQkJTUU0MDAwX0FJX1NUQVRVU19CSVRfSEZfREFUQSkKKwkJCQkJICAgJiYgKHRtcCAmCisJCQkJCSAgICAgICBNRTQwMDBfQUlfU1RBVFVTX0JJVF9FRl9EQVRBKSkgeworCQkJCQlJU1JfUERFQlVHCisJCQkJCSAgICAoIm1lNDAwMF9haV9pc3IoKTpGaWZvIGhhbGYgZnVsbFxuIik7CisJCQkJCWMgPSBNRTQwMDBfQUlfRklGT19DT1VOVCAvIDI7CisKKwkJCQkJd2hpbGUgKDEpIHsKKwkJCQkJCWMxID0gbWU0MDAwX3NwYWNlX3RvX2VuZAorCQkJCQkJICAgIChhaV9jb250ZXh0LT5jaXJjX2J1ZiwKKwkJCQkJCSAgICAgTUU0MDAwX0FJX0JVRkZFUl9DT1VOVCk7CisJCQkJCQlJU1JfUERFQlVHCisJCQkJCQkgICAgKCJtZTQwMDBfYWlfaXNyKCk6U3BhY2UgdG8gZW5kID0gJWRcbiIsCisJCQkJCQkgICAgIGMxKTsKKwkJCQkJCWlmIChjMSA+IGMpCisJCQkJCQkJYzEgPSBjOworCisJCQkJCQlpZiAoYzEgPD0gMCkgeworCQkJCQkJCUlTUl9QREVCVUcKKwkJCQkJCQkgICAgKCJtZTQwMDBfYWlfaXNyKCk6V29yayBkb25lIG9yIGJ1ZmZlciBmdWxsXG4iKTsKKwkJCQkJCQlicmVhazsKKwkJCQkJCX0KKworCQkJCQkJaW5zdyhhaV9jb250ZXh0LT5kYXRhX3JlZywKKwkJCQkJCSAgICAgYWlfY29udGV4dC0+Y2lyY19idWYuYnVmICsKKwkJCQkJCSAgICAgYWlfY29udGV4dC0+Y2lyY19idWYuaGVhZCwKKwkJCQkJCSAgICAgYzEpOworCQkJCQkJYWlfY29udGV4dC0+Y2lyY19idWYuaGVhZCA9CisJCQkJCQkgICAgKGFpX2NvbnRleHQtPmNpcmNfYnVmLmhlYWQgKworCQkJCQkJICAgICBjMSkgJgorCQkJCQkJICAgIChNRTQwMDBfQUlfQlVGRkVSX0NPVU5UIC0KKwkJCQkJCSAgICAgMSk7CisJCQkJCQljIC09IGMxOworCQkJCQl9CisJCQkJfSBlbHNlIHsKKwkJCQkJLyogUG9sbCBkYXRhIHVudGlsIGZpZm8gZW1wdHkgKi8KKwkJCQkJZm9yIChpID0gMDsKKwkJCQkJICAgICAoaSA8IE1FNDAwMF9BSV9GSUZPX0NPVU5UIC8gMikKKwkJCQkJICAgICAmJiAoaW5sKGFpX2NvbnRleHQtPmN0cmxfcmVnKSAmCisJCQkJCQkgTUU0MDAwX0FJX1NUQVRVU19CSVRfRUZfREFUQSk7CisJCQkJCSAgICAgaSsrKSB7CisJCQkJCQlpZiAobWU0MDAwX3NwYWNlX3RvX2VuZAorCQkJCQkJICAgIChhaV9jb250ZXh0LT5jaXJjX2J1ZiwKKwkJCQkJCSAgICAgTUU0MDAwX0FJX0JVRkZFUl9DT1VOVCkpIHsKKwkJCQkJCQkqKGFpX2NvbnRleHQtPmNpcmNfYnVmLgorCQkJCQkJCSAgYnVmICsKKwkJCQkJCQkgIGFpX2NvbnRleHQtPmNpcmNfYnVmLgorCQkJCQkJCSAgaGVhZCkgPQorCQkJCSAgICAgICBpbncoYWlfY29udGV4dC0+ZGF0YV9yZWcpOworCQkJCQkJCWFpX2NvbnRleHQtPmNpcmNfYnVmLgorCQkJCQkJCSAgICBoZWFkID0KKwkJCQkJCQkgICAgKGFpX2NvbnRleHQtPgorCQkJCQkJCSAgICAgY2lyY19idWYuaGVhZCArCisJCQkJCQkJICAgICAxKSAmCisJCQkJCQkJICAgIChNRTQwMDBfQUlfQlVGRkVSX0NPVU5UCisJCQkJCQkJICAgICAtIDEpOworCQkJCQkJfSBlbHNlCisJCQkJCQkJYnJlYWs7CisJCQkJCX0KKwkJCQkJSVNSX1BERUJVRworCQkJCQkgICAgKCJtZTQwMDBfYWlfaXNyKCk6JWQgdmFsdWVzIHJlYWRcbiIsCisJCQkJCSAgICAgaSk7CisJCQkJfQorCQkJfQorCQl9CisKKwkJLyogV29yayBpcyBkb25lLCBzbyByZXNldCB0aGUgaW50ZXJydXB0ICovCisJCUlTUl9QREVCVUcKKwkJICAgICgibWU0MDAwX2FpX2lzcigpOnJlc2V0IGludGVycnVwdCBmcm9tIHNhbXBsZSBjb3VudGVyXG4iKTsKKwkJc3Bpbl9sb2NrKCZhaV9jb250ZXh0LT5pbnRfbG9jayk7CisJCXRtcCA9IG1lNDAwMF9pbmwoYWlfY29udGV4dC0+Y3RybF9yZWcpOworCQl0bXAgfD0gTUU0MDAwX0FJX0NUUkxfQklUX1NDX0lSUV9SRVNFVDsKKwkJbWU0MDAwX291dGwodG1wLCBhaV9jb250ZXh0LT5jdHJsX3JlZyk7CisJCXRtcCAmPSB+TUU0MDAwX0FJX0NUUkxfQklUX1NDX0lSUV9SRVNFVDsKKwkJbWU0MDAwX291dGwodG1wLCBhaV9jb250ZXh0LT5jdHJsX3JlZyk7CisJCXNwaW5fdW5sb2NrKCZhaV9jb250ZXh0LT5pbnRfbG9jayk7CisJfQorCisJLyogVmFsdWVzIGFyZSBub3cgYXZhaWxhYmxlLCBzbyB3YWtlIHVwIHdhaXRpbmcgcHJvY2VzcyAqLworCWlmIChtZTQwMDBfYnVmX2NvdW50KGFpX2NvbnRleHQtPmNpcmNfYnVmLCBNRTQwMDBfQUlfQlVGRkVSX0NPVU5UKSkgeworCQlJU1JfUERFQlVHKCJtZTQwMDBfYWlfaXNyKCk6V2FrZSB1cCB3YWl0aW5nIHByb2Nlc3NcbiIpOworCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJihhaV9jb250ZXh0LT53YWl0X3F1ZXVlKSk7CisJfQorCisJLyogSWYgdGhlcmUgaXMgbm8gc3BhY2UgbGVmdCBpbiB0aGUgYnVmZmVyLCBkaXNhYmxlIGludGVycnVwdHMgKi8KKwlzcGluX2xvY2soJmFpX2NvbnRleHQtPmludF9sb2NrKTsKKwlpZiAoIW1lNDAwMF9idWZfc3BhY2UoYWlfY29udGV4dC0+Y2lyY19idWYsIE1FNDAwMF9BSV9CVUZGRVJfQ09VTlQpKSB7CisJCUlTUl9QREVCVUcKKwkJICAgICgibWU0MDAwX2FpX2lzcigpOkRpc2FibGUgSW50ZXJydXB0IGJlY2F1c2Ugbm8gc3BhY2UgbGVmdCBpbiBidWZmZXJcbiIpOworCQl0bXAgPSBtZTQwMDBfaW5sKGFpX2NvbnRleHQtPmN0cmxfcmVnKTsKKwkJdG1wICY9CisJCSAgICB+KE1FNDAwMF9BSV9DVFJMX0JJVF9TQ19JUlEgfCBNRTQwMDBfQUlfQ1RSTF9CSVRfSEZfSVJRIHwKKwkJICAgICAgTUU0MDAwX0FJX0NUUkxfQklUX0xFX0lSUSk7CisJCW1lNDAwMF9vdXRsKHRtcCwgYWlfY29udGV4dC0+Y3RybF9yZWcpOworCX0KKwlzcGluX3VubG9jaygmYWlfY29udGV4dC0+aW50X2xvY2spOworCisjaWZkZWYgTUU0MDAwX0lTUl9ERUJVRworCXJkdHNjbChhZnRlcik7CisJcHJpbnRrKEtFUk5fRVJSICJNRTQwMDA6bWU0MDAwX2FpX2lzcigpOlRpbWUgbGFwc2UgPSAlbHVcbiIsCisJICAgICAgIGFmdGVyIC0gYmVmb3JlKTsKKyNlbmRpZgorCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgaXJxcmV0dXJuX3QgbWU0MDAwX2V4dF9pbnRfaXNyKGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3sKKwltZTQwMDBfZXh0X2ludF9jb250ZXh0X3QgKmV4dF9pbnRfY29udGV4dDsKKwl1bnNpZ25lZCBsb25nIHRtcDsKKworCUlTUl9QREVCVUcoIm1lNDAwMF9leHRfaW50X2lzcigpIGlzIGV4ZWN1dGVkXG4iKTsKKworCWV4dF9pbnRfY29udGV4dCA9IGRldl9pZDsKKworCS8qIENoZWNrIGlmIGlycSBudW1iZXIgaXMgcmlnaHQgKi8KKwlpZiAoaXJxICE9IGV4dF9pbnRfY29udGV4dC0+aXJxKSB7CisJCUlTUl9QREVCVUcoIm1lNDAwMF9leHRfaW50X2lzcigpOmluY29ycmVjdCBpbnRlcnJ1cHQgbnVtOiAlZFxuIiwKKwkJCSAgIGlycSk7CisJCXJldHVybiBJUlFfTk9ORTsKKwl9CisKKwlpZiAobWU0MDAwX2lubChleHRfaW50X2NvbnRleHQtPmlycV9zdGF0dXNfcmVnKSAmCisJICAgIE1FNDAwMF9JUlFfU1RBVFVTX0JJVF9FWCkgeworCQlJU1JfUERFQlVHKCJtZTQwMDBfZXh0X2ludF9pc3IoKTpFeHRlcm5hbCBpbnRlcnJ1cHQgb2NjdXJlZFxuIik7CisJCXRtcCA9IG1lNDAwMF9pbmwoZXh0X2ludF9jb250ZXh0LT5jdHJsX3JlZyk7CisJCXRtcCB8PSBNRTQwMDBfQUlfQ1RSTF9CSVRfRVhfSVJRX1JFU0VUOworCQltZTQwMDBfb3V0bCh0bXAsIGV4dF9pbnRfY29udGV4dC0+Y3RybF9yZWcpOworCQl0bXAgJj0gfk1FNDAwMF9BSV9DVFJMX0JJVF9FWF9JUlFfUkVTRVQ7CisJCW1lNDAwMF9vdXRsKHRtcCwgZXh0X2ludF9jb250ZXh0LT5jdHJsX3JlZyk7CisKKwkJZXh0X2ludF9jb250ZXh0LT5pbnRfY291bnQrKzsKKworCQlpZiAoZXh0X2ludF9jb250ZXh0LT5mYXN5bmNfcHRyKSB7CisJCQlJU1JfUERFQlVHCisJCQkgICAgKCJtZTI2MDBfZXh0X2ludF9pc3IoKTpTZW5kIHNpZ25hbCB0byBwcm9jZXNzXG4iKTsKKwkJCWtpbGxfZmFzeW5jKCZleHRfaW50X2NvbnRleHQtPmZhc3luY19wdHIsIFNJR0lPLAorCQkJCSAgICBQT0xMX0lOKTsKKwkJfQorCX0KKworCXJldHVybiBJUlFfSEFORExFRDsKK30KKwordm9pZCBfX2V4aXQgbWU0MDAwX21vZHVsZV9leGl0KHZvaWQpCit7CisJc3RydWN0IGxpc3RfaGVhZCAqYm9hcmRfcDsKKwltZTQwMDBfaW5mb190ICpib2FyZF9pbmZvOworCisJQ0FMTF9QREVCVUcoImNsZWFudXBfbW9kdWxlKCkgaXMgZXhlY3V0ZWRcbiIpOworCisJdW5yZWdpc3Rlcl9jaHJkZXYobWU0MDAwX2V4dF9pbnRfbWFqb3JfZHJpdmVyX25vLCBNRTQwMDBfRVhUX0lOVF9OQU1FKTsKKworCXVucmVnaXN0ZXJfY2hyZGV2KG1lNDAwMF9jbnRfbWFqb3JfZHJpdmVyX25vLCBNRTQwMDBfQ05UX05BTUUpOworCisJdW5yZWdpc3Rlcl9jaHJkZXYobWU0MDAwX2Rpb19tYWpvcl9kcml2ZXJfbm8sIE1FNDAwMF9ESU9fTkFNRSk7CisKKwl1bnJlZ2lzdGVyX2NocmRldihtZTQwMDBfYWlfbWFqb3JfZHJpdmVyX25vLCBNRTQwMDBfQUlfTkFNRSk7CisKKwl1bnJlZ2lzdGVyX2NocmRldihtZTQwMDBfYW9fbWFqb3JfZHJpdmVyX25vLCBNRTQwMDBfQU9fTkFNRSk7CisKKwlyZW1vdmVfcHJvY19lbnRyeSgibWU0MDAwIiwgTlVMTCk7CisKKwlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJm1lNDAwMF9kcml2ZXIpOworCisJLyogUmVzZXQgdGhlIGJvYXJkcyAqLworCWZvciAoYm9hcmRfcCA9IG1lNDAwMF9ib2FyZF9pbmZvX2xpc3QubmV4dDsKKwkgICAgIGJvYXJkX3AgIT0gJm1lNDAwMF9ib2FyZF9pbmZvX2xpc3Q7IGJvYXJkX3AgPSBib2FyZF9wLT5uZXh0KSB7CisJCWJvYXJkX2luZm8gPSBsaXN0X2VudHJ5KGJvYXJkX3AsIG1lNDAwMF9pbmZvX3QsIGxpc3QpOworCQltZTQwMDBfcmVzZXRfYm9hcmQoYm9hcmRfaW5mbyk7CisJfQorCisJY2xlYXJfYm9hcmRfaW5mb19saXN0KCk7Cit9CisKK21vZHVsZV9leGl0KG1lNDAwMF9tb2R1bGVfZXhpdCk7CisKK3N0YXRpYyBpbnQgbWU0MDAwX3JlYWRfcHJvY21lbShjaGFyICpidWYsIGNoYXIgKipzdGFydCwgb2ZmX3Qgb2Zmc2V0LCBpbnQgY291bnQsCisJCQkgICAgICAgaW50ICplb2YsIHZvaWQgKmRhdGEpCit7CisJaW50IGxlbiA9IDA7CisJaW50IGxpbWl0ID0gY291bnQgLSAxMDAwOworCW1lNDAwMF9pbmZvX3QgKmJvYXJkX2luZm87CisJc3RydWN0IGxpc3RfaGVhZCAqcHRyOworCisJbGVuICs9IHNwcmludGYoYnVmICsgbGVuLCAiXG5NRTQwMDAgRFJJVkVSIFZFUlNJT04gJVguJVguJVhcblxuIiwKKwkJICAgICAgIChNRTQwMDBfRFJJVkVSX1ZFUlNJT04gJiAweEZGMDAwMCkgPj4gMTYsCisJCSAgICAgICAoTUU0MDAwX0RSSVZFUl9WRVJTSU9OICYgMHhGRjAwKSA+PiA4LAorCQkgICAgICAgKE1FNDAwMF9EUklWRVJfVkVSU0lPTiAmIDB4RkYpKTsKKworCS8qIFNlYXJjaCBmb3IgdGhlIGJvYXJkIGNvbnRleHQgKi8KKwlmb3IgKHB0ciA9IG1lNDAwMF9ib2FyZF9pbmZvX2xpc3QubmV4dDsKKwkgICAgIChwdHIgIT0gJm1lNDAwMF9ib2FyZF9pbmZvX2xpc3QpICYmIChsZW4gPCBsaW1pdCk7CisJICAgICBwdHIgPSBwdHItPm5leHQpIHsKKwkJYm9hcmRfaW5mbyA9IGxpc3RfZW50cnkocHRyLCBtZTQwMDBfaW5mb190LCBsaXN0KTsKKworCQlsZW4gKz0KKwkJICAgIHNwcmludGYoYnVmICsgbGVuLCAiQm9hcmQgbnVtYmVyICVkOlxuIiwKKwkJCSAgICBib2FyZF9pbmZvLT5ib2FyZF9jb3VudCk7CisJCWxlbiArPSBzcHJpbnRmKGJ1ZiArIGxlbiwgIi0tLS0tLS0tLS0tLS0tLVxuIik7CisJCWxlbiArPQorCQkgICAgc3ByaW50ZihidWYgKyBsZW4sICJQTFggYmFzZSByZWdpc3RlciA9IDB4JWxYXG4iLAorCQkJICAgIGJvYXJkX2luZm8tPnBseF9yZWdiYXNlKTsKKwkJbGVuICs9CisJCSAgICBzcHJpbnRmKGJ1ZiArIGxlbiwgIlBMWCBiYXNlIHJlZ2lzdGVyIHNpemUgPSAweCVsWFxuIiwKKwkJCSAgICBib2FyZF9pbmZvLT5wbHhfcmVnYmFzZV9zaXplKTsKKwkJbGVuICs9CisJCSAgICBzcHJpbnRmKGJ1ZiArIGxlbiwgIk1FNDAwMCBiYXNlIHJlZ2lzdGVyID0gMHglbFhcbiIsCisJCQkgICAgYm9hcmRfaW5mby0+bWU0MDAwX3JlZ2Jhc2UpOworCQlsZW4gKz0KKwkJICAgIHNwcmludGYoYnVmICsgbGVuLCAiTUU0MDAwIGJhc2UgcmVnaXN0ZXIgc2l6ZSA9IDB4JWxYXG4iLAorCQkJICAgIGJvYXJkX2luZm8tPm1lNDAwMF9yZWdiYXNlX3NpemUpOworCQlsZW4gKz0KKwkJICAgIHNwcmludGYoYnVmICsgbGVuLCAiU2VyaWFsIG51bWJlciA9IDB4JVhcbiIsCisJCQkgICAgYm9hcmRfaW5mby0+c2VyaWFsX25vKTsKKwkJbGVuICs9CisJCSAgICBzcHJpbnRmKGJ1ZiArIGxlbiwgIkhhcmR3YXJlIHJldmlzaW9uID0gMHglWFxuIiwKKwkJCSAgICBib2FyZF9pbmZvLT5od19yZXZpc2lvbik7CisJCWxlbiArPQorCQkgICAgc3ByaW50ZihidWYgKyBsZW4sICJWZW5kb3IgaWQgPSAweCVYXG4iLAorCQkJICAgIGJvYXJkX2luZm8tPnZlbmRvcl9pZCk7CisJCWxlbiArPQorCQkgICAgc3ByaW50ZihidWYgKyBsZW4sICJEZXZpY2UgaWQgPSAweCVYXG4iLAorCQkJICAgIGJvYXJkX2luZm8tPmRldmljZV9pZCk7CisJCWxlbiArPQorCQkgICAgc3ByaW50ZihidWYgKyBsZW4sICJQQ0kgYnVzIG51bWJlciA9ICVkXG4iLAorCQkJICAgIGJvYXJkX2luZm8tPnBjaV9idXNfbm8pOworCQlsZW4gKz0KKwkJICAgIHNwcmludGYoYnVmICsgbGVuLCAiUENJIGRldmljZSBudW1iZXIgPSAlZFxuIiwKKwkJCSAgICBib2FyZF9pbmZvLT5wY2lfZGV2X25vKTsKKwkJbGVuICs9CisJCSAgICBzcHJpbnRmKGJ1ZiArIGxlbiwgIlBDSSBmdW5jdGlvbiBudW1iZXIgPSAlZFxuIiwKKwkJCSAgICBib2FyZF9pbmZvLT5wY2lfZnVuY19ubyk7CisJCWxlbiArPSBzcHJpbnRmKGJ1ZiArIGxlbiwgIklSUSA9ICV1XG4iLCBib2FyZF9pbmZvLT5pcnEpOworCQlsZW4gKz0KKwkJICAgIHNwcmludGYoYnVmICsgbGVuLAorCQkJICAgICJDb3VudCBvZiBpbnRlcnJ1cHRzIHNpbmNlIG1vZHVsZSB3YXMgbG9hZGVkID0gJWRcbiIsCisJCQkgICAgYm9hcmRfaW5mby0+aXJxX2NvdW50KTsKKworCQlsZW4gKz0KKwkJICAgIHNwcmludGYoYnVmICsgbGVuLCAiQ291bnQgb2YgYW5hbG9nIG91dHB1dHMgPSAlZFxuIiwKKwkJCSAgICBib2FyZF9pbmZvLT5ib2FyZF9wLT5hby5jb3VudCk7CisJCWxlbiArPQorCQkgICAgc3ByaW50ZihidWYgKyBsZW4sICJDb3VudCBvZiBhbmFsb2cgb3V0cHV0IGZpZm9zID0gJWRcbiIsCisJCQkgICAgYm9hcmRfaW5mby0+Ym9hcmRfcC0+YW8uZmlmb19jb3VudCk7CisKKwkJbGVuICs9CisJCSAgICBzcHJpbnRmKGJ1ZiArIGxlbiwgIkNvdW50IG9mIGFuYWxvZyBpbnB1dHMgPSAlZFxuIiwKKwkJCSAgICBib2FyZF9pbmZvLT5ib2FyZF9wLT5haS5jb3VudCk7CisJCWxlbiArPQorCQkgICAgc3ByaW50ZihidWYgKyBsZW4sCisJCQkgICAgIkNvdW50IG9mIHNhbXBsZSBhbmQgaG9sZCBkZXZpY2VzIGZvciBhbmFsb2cgaW5wdXQgPSAlZFxuIiwKKwkJCSAgICBib2FyZF9pbmZvLT5ib2FyZF9wLT5haS5zaF9jb3VudCk7CisJCWxlbiArPQorCQkgICAgc3ByaW50ZihidWYgKyBsZW4sCisJCQkgICAgIkFuYWxvZyBleHRlcm5hbCB0cmlnZ2VyIGF2YWlsYWJsZSBmb3IgYW5hbG9nIGlucHV0ID0gJWRcbiIsCisJCQkgICAgYm9hcmRfaW5mby0+Ym9hcmRfcC0+YWkuZXhfdHJpZ19hbmFsb2cpOworCisJCWxlbiArPQorCQkgICAgc3ByaW50ZihidWYgKyBsZW4sICJDb3VudCBvZiBkaWdpdGFsIHBvcnRzID0gJWRcbiIsCisJCQkgICAgYm9hcmRfaW5mby0+Ym9hcmRfcC0+ZGlvLmNvdW50KTsKKworCQlsZW4gKz0KKwkJICAgIHNwcmludGYoYnVmICsgbGVuLCAiQ291bnQgb2YgY291bnRlciBkZXZpY2VzID0gJWRcbiIsCisJCQkgICAgYm9hcmRfaW5mby0+Ym9hcmRfcC0+Y250LmNvdW50KTsKKwkJbGVuICs9CisJCSAgICBzcHJpbnRmKGJ1ZiArIGxlbiwgIkFJIGNvbnRyb2wgcmVnaXN0ZXIgPSAweCUwOFhcbiIsCisJCQkgICAgaW5sKGJvYXJkX2luZm8tPm1lNDAwMF9yZWdiYXNlICsKKwkJCQlNRTQwMDBfQUlfQ1RSTF9SRUcpKTsKKworCQlsZW4gKz0gc3ByaW50ZihidWYgKyBsZW4sICJBTyAwIGNvbnRyb2wgcmVnaXN0ZXIgPSAweCUwOFhcbiIsCisJCQkgICAgICAgaW5sKGJvYXJkX2luZm8tPm1lNDAwMF9yZWdiYXNlICsKKwkJCQkgICBNRTQwMDBfQU9fMDBfQ1RSTF9SRUcpKTsKKwkJbGVuICs9CisJCSAgICBzcHJpbnRmKGJ1ZiArIGxlbiwgIkFPIDAgc3RhdHVzIHJlZ2lzdGVyID0gMHglMDhYXG4iLAorCQkJICAgIGlubChib2FyZF9pbmZvLT5tZTQwMDBfcmVnYmFzZSArCisJCQkJTUU0MDAwX0FPXzAwX1NUQVRVU19SRUcpKTsKKwkJbGVuICs9CisJCSAgICBzcHJpbnRmKGJ1ZiArIGxlbiwgIkFPIDEgY29udHJvbCByZWdpc3RlciA9IDB4JTA4WFxuIiwKKwkJCSAgICBpbmwoYm9hcmRfaW5mby0+bWU0MDAwX3JlZ2Jhc2UgKworCQkJCU1FNDAwMF9BT18wMV9DVFJMX1JFRykpOworCQlsZW4gKz0KKwkJICAgIHNwcmludGYoYnVmICsgbGVuLCAiQU8gMSBzdGF0dXMgcmVnaXN0ZXIgPSAweCUwOFhcbiIsCisJCQkgICAgaW5sKGJvYXJkX2luZm8tPm1lNDAwMF9yZWdiYXNlICsKKwkJCQlNRTQwMDBfQU9fMDFfU1RBVFVTX1JFRykpOworCQlsZW4gKz0KKwkJICAgIHNwcmludGYoYnVmICsgbGVuLCAiQU8gMiBjb250cm9sIHJlZ2lzdGVyID0gMHglMDhYXG4iLAorCQkJICAgIGlubChib2FyZF9pbmZvLT5tZTQwMDBfcmVnYmFzZSArCisJCQkJTUU0MDAwX0FPXzAyX0NUUkxfUkVHKSk7CisJCWxlbiArPQorCQkgICAgc3ByaW50ZihidWYgKyBsZW4sICJBTyAyIHN0YXR1cyByZWdpc3RlciA9IDB4JTA4WFxuIiwKKwkJCSAgICBpbmwoYm9hcmRfaW5mby0+bWU0MDAwX3JlZ2Jhc2UgKworCQkJCU1FNDAwMF9BT18wMl9TVEFUVVNfUkVHKSk7CisJCWxlbiArPQorCQkgICAgc3ByaW50ZihidWYgKyBsZW4sICJBTyAzIGNvbnRyb2wgcmVnaXN0ZXIgPSAweCUwOFhcbiIsCisJCQkgICAgaW5sKGJvYXJkX2luZm8tPm1lNDAwMF9yZWdiYXNlICsKKwkJCQlNRTQwMDBfQU9fMDNfQ1RSTF9SRUcpKTsKKwkJbGVuICs9CisJCSAgICBzcHJpbnRmKGJ1ZiArIGxlbiwgIkFPIDMgc3RhdHVzIHJlZ2lzdGVyID0gMHglMDhYXG4iLAorCQkJICAgIGlubChib2FyZF9pbmZvLT5tZTQwMDBfcmVnYmFzZSArCisJCQkJTUU0MDAwX0FPXzAzX1NUQVRVU19SRUcpKTsKKwl9CisKKwkqZW9mID0gMTsKKwlyZXR1cm4gbGVuOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL21lNDAwMC9tZTQwMDAuaCBiL2RyaXZlcnMvc3RhZ2luZy9tZTQwMDAvbWU0MDAwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzM1ZTRiOQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9tZTQwMDAvbWU0MDAwLmgKQEAgLTAsMCArMSw5NTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMgTWVpbGhhdXMgRWxlY3Ryb25pYyBHbWJIIChzdXBwb3J0QG1laWxoYXVzLmRlKQorICoKKyAqIFNvdXJjZSBGaWxlIDogbWU0MDAwLmgKKyAqIEF1dGhvciAgICAgIDogR0cgKEd1ZW50ZXIgR2ViaGFyZHQpICA8Zy5nZWJoYXJkdEBtZWlsaGF1cy5kZT4KKyAqLworCisjaWZuZGVmIF9NRTQwMDBfSF8KKyNkZWZpbmUgX01FNDAwMF9IXworCisjaWZkZWYgX19LRVJORUxfXworCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgIFRoZSB2ZXJzaW9uIG9mIHRoZSBkcml2ZXIgcmVsZWFzZQorICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworCisjZGVmaW5lIE1FNDAwMF9EUklWRVJfVkVSU0lPTiAgMHgxMDAwOQkvLyBWZXJzaW9uIDEuMDAuMDkKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICBEZWJ1ZyBzZWN0aW9uCisgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisKKyN1bmRlZiBNRTQwMDBfQ0FMTF9ERUJVRwkvLyBEZWJ1ZyBmdW5jdGlvbiBlbnRyeSBhbmQgZXhpdAorI3VuZGVmIE1FNDAwMF9JU1JfREVCVUcJCS8vIERlYnVnIHRoZSBpbnRlcnJ1cHQgc2VydmljZSByb3V0aW5lCisjdW5kZWYgTUU0MDAwX1BPUlRfREVCVUcJLy8gRGVidWcgcG9ydCBhY2Nlc3MKKyN1bmRlZiBNRTQwMDBfREVCVUcJCS8vIEdlbmVyYWwgcHVycG9zZSBkZWJ1ZyBtYXNzZWdlcworCisjaWZkZWYgTUU0MDAwX0NBTExfREVCVUcKKyN1bmRlZiBDQUxMX1BERUJVRworI2RlZmluZSBDQUxMX1BERUJVRyhmbXQsIGFyZ3MuLi4pIHByaW50ayhLRVJOX0RFQlVHIk1FNDAwMDoiIGZtdCwgIyNhcmdzKQorI2Vsc2UKKyMgZGVmaW5lIENBTExfUERFQlVHKGZtdCwgYXJncy4uLikJLy8gbm8gZGVidWdnaW5nLCBkbyBub3RoaW5nCisjZW5kaWYKKworI2lmZGVmIE1FNDAwMF9JU1JfREVCVUcKKyN1bmRlZiBJU1JfUERFQlVHCisjZGVmaW5lIElTUl9QREVCVUcoZm10LCBhcmdzLi4uKSBwcmludGsoS0VSTl9ERUJVRyJNRTQwMDA6IiBmbXQsICMjYXJncykKKyNlbHNlCisjZGVmaW5lIElTUl9QREVCVUcoZm10LCBhcmdzLi4uKQkvLyBubyBkZWJ1Z2dpbmcsIGRvIG5vdGhpbmcKKyNlbmRpZgorCisjaWZkZWYgTUU0MDAwX1BPUlRfREVCVUcKKyN1bmRlZiBQT1JUX1BERUJVRworI2RlZmluZSBQT1JUX1BERUJVRyhmbXQsIGFyZ3MuLi4pIHByaW50ayhLRVJOX0RFQlVHIk1FNDAwMDoiIGZtdCwgIyNhcmdzKQorI2Vsc2UKKyNkZWZpbmUgUE9SVF9QREVCVUcoZm10LCBhcmdzLi4uKQkvLyBubyBkZWJ1Z2dpbmcsIGRvIG5vdGhpbmcKKyNlbmRpZgorCisjaWZkZWYgTUU0MDAwX0RFQlVHCisjdW5kZWYgUERFQlVHCisjZGVmaW5lIFBERUJVRyhmbXQsIGFyZ3MuLi4pIHByaW50ayhLRVJOX0RFQlVHIk1FNDAwMDoiIGZtdCwgIyNhcmdzKQorI2Vsc2UKKyNkZWZpbmUgUERFQlVHKGZtdCwgYXJncy4uLikJLy8gbm8gZGVidWdnaW5nLCBkbyBub3RoaW5nCisjZW5kaWYKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICBQQ0kgdmVuZG9yIGFuZCBkZXZpY2UgSURzCisgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9NRUlMSEFVUyAweDE0MDIKKworI2RlZmluZSBQQ0lfREVWSUNFX0lEX01FSUxIQVVTX01FNDY1MAkweDQ2NTAJLy8gTG93IENvc3QgdmVyc2lvbgorCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTUVJTEhBVVNfTUU0NjYwCTB4NDY2MAkvLyBTdGFuZGFyZCB2ZXJzaW9uCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTUVJTEhBVVNfTUU0NjYwSQkweDQ2NjEJLy8gSXNvbGF0ZWQgdmVyc2lvbgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX01FSUxIQVVTX01FNDY2MFMJMHg0NjYyCS8vIFN0YW5kYXJkIHZlcnNpb24gd2l0aCBTYW1wbGUgYW5kIEhvbGQKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9NRUlMSEFVU19NRTQ2NjBJUwkweDQ2NjMJLy8gSXNvbGF0ZWQgdmVyc2lvbiB3aXRoIFNhbXBsZSBhbmQgSG9sZAorCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTUVJTEhBVVNfTUU0NjcwCTB4NDY3MAkvLyBTdGFuZGFyZCB2ZXJzaW9uCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTUVJTEhBVVNfTUU0NjcwSQkweDQ2NzEJLy8gSXNvbGF0ZWQgdmVyc2lvbgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX01FSUxIQVVTX01FNDY3MFMJMHg0NjcyCS8vIFN0YW5kYXJkIHZlcnNpb24gd2l0aCBTYW1wbGUgYW5kIEhvbGQKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9NRUlMSEFVU19NRTQ2NzBJUwkweDQ2NzMJLy8gSXNvbGF0ZWQgdmVyc2lvbiB3aXRoIFNhbXBsZSBhbmQgSG9sZAorCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTUVJTEhBVVNfTUU0NjgwCTB4NDY4MAkvLyBTdGFuZGFyZCB2ZXJzaW9uCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTUVJTEhBVVNfTUU0NjgwSQkweDQ2ODEJLy8gSXNvbGF0ZWQgdmVyc2lvbgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX01FSUxIQVVTX01FNDY4MFMJMHg0NjgyCS8vIFN0YW5kYXJkIHZlcnNpb24gd2l0aCBTYW1wbGUgYW5kIEhvbGQKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9NRUlMSEFVU19NRTQ2ODBJUwkweDQ2ODMJLy8gSXNvbGF0ZWQgdmVyc2lvbiB3aXRoIFNhbXBsZSBhbmQgSG9sZAorCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgIERldmljZSBuYW1lcywgZm9yIGVudHJpZXMgaW4gL3Byb2MvLi4KKyAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKworI2RlZmluZSBNRTQwMDBfTkFNRQkJIm1lNDAwMCIKKyNkZWZpbmUgTUU0MDAwX0FPX05BTUUJCSJtZTQwMDBfYW8iCisjZGVmaW5lIE1FNDAwMF9BSV9OQU1FCQkibWU0MDAwX2FpIgorI2RlZmluZSBNRTQwMDBfRElPX05BTUUJCSJtZTQwMDBfZGlvIgorI2RlZmluZSBNRTQwMDBfQ05UX05BTUUJCSJtZTQwMDBfY250IgorI2RlZmluZSBNRTQwMDBfRVhUX0lOVF9OQU1FCSJtZTQwMDBfZXh0X2ludCIKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICBNRS00MDAwIGJhc2UgcmVnaXN0ZXIgb2Zmc2V0cworICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworCisjZGVmaW5lIE1FNDAwMF9BT18wMF9DVFJMX1JFRwkJCTB4MDAJLy8gUi9XCisjZGVmaW5lIE1FNDAwMF9BT18wMF9TVEFUVVNfUkVHCQkJMHgwNAkvLyBSL18KKyNkZWZpbmUgTUU0MDAwX0FPXzAwX0ZJRk9fUkVHCQkJMHgwOAkvLyBfL1cKKyNkZWZpbmUgTUU0MDAwX0FPXzAwX1NJTkdMRV9SRUcJCQkweDBDCS8vIFIvVworI2RlZmluZSBNRTQwMDBfQU9fMDBfVElNRVJfUkVHCQkJMHgxMAkvLyBfL1cKKworI2RlZmluZSBNRTQwMDBfQU9fMDFfQ1RSTF9SRUcJCQkweDE4CS8vIFIvVworI2RlZmluZSBNRTQwMDBfQU9fMDFfU1RBVFVTX1JFRwkJCTB4MUMJLy8gUi9fCisjZGVmaW5lIE1FNDAwMF9BT18wMV9GSUZPX1JFRwkJCTB4MjAJLy8gXy9XCisjZGVmaW5lIE1FNDAwMF9BT18wMV9TSU5HTEVfUkVHCQkJMHgyNAkvLyBSL1cKKyNkZWZpbmUgTUU0MDAwX0FPXzAxX1RJTUVSX1JFRwkJCTB4MjgJLy8gXy9XCisKKyNkZWZpbmUgTUU0MDAwX0FPXzAyX0NUUkxfUkVHCQkJMHgzMAkvLyBSL1cKKyNkZWZpbmUgTUU0MDAwX0FPXzAyX1NUQVRVU19SRUcJCQkweDM0CS8vIFIvXworI2RlZmluZSBNRTQwMDBfQU9fMDJfRklGT19SRUcJCQkweDM4CS8vIF8vVworI2RlZmluZSBNRTQwMDBfQU9fMDJfU0lOR0xFX1JFRwkJCTB4M0MJLy8gUi9XCisjZGVmaW5lIE1FNDAwMF9BT18wMl9USU1FUl9SRUcJCQkweDQwCS8vIF8vVworCisjZGVmaW5lIE1FNDAwMF9BT18wM19DVFJMX1JFRwkJCTB4NDgJLy8gUi9XCisjZGVmaW5lIE1FNDAwMF9BT18wM19TVEFUVVNfUkVHCQkJMHg0QwkvLyBSL18KKyNkZWZpbmUgTUU0MDAwX0FPXzAzX0ZJRk9fUkVHCQkJMHg1MAkvLyBfL1cKKyNkZWZpbmUgTUU0MDAwX0FPXzAzX1NJTkdMRV9SRUcJCQkweDU0CS8vIFIvVworI2RlZmluZSBNRTQwMDBfQU9fMDNfVElNRVJfUkVHCQkJMHg1OAkvLyBfL1cKKworI2RlZmluZSBNRTQwMDBfQUlfQ1RSTF9SRUcJCQkweDc0CS8vIF8vVworI2RlZmluZSBNRTQwMDBfQUlfU1RBVFVTX1JFRwkJCTB4NzQJLy8gUi9fCisjZGVmaW5lIE1FNDAwMF9BSV9DSEFOTkVMX0xJU1RfUkVHCQkweDc4CS8vIF8vVworI2RlZmluZSBNRTQwMDBfQUlfREFUQV9SRUcJCQkweDdDCS8vIFIvXworI2RlZmluZSBNRTQwMDBfQUlfQ0hBTl9USU1FUl9SRUcJCTB4ODAJLy8gXy9XCisjZGVmaW5lIE1FNDAwMF9BSV9DSEFOX1BSRV9USU1FUl9SRUcJCTB4ODQJLy8gXy9XCisjZGVmaW5lIE1FNDAwMF9BSV9TQ0FOX1RJTUVSX0xPV19SRUcJCTB4ODgJLy8gXy9XCisjZGVmaW5lIE1FNDAwMF9BSV9TQ0FOX1RJTUVSX0hJR0hfUkVHCQkweDhDCS8vIF8vVworI2RlZmluZSBNRTQwMDBfQUlfU0NBTl9QUkVfVElNRVJfTE9XX1JFRwkweDkwCS8vIF8vVworI2RlZmluZSBNRTQwMDBfQUlfU0NBTl9QUkVfVElNRVJfSElHSF9SRUcJMHg5NAkvLyBfL1cKKyNkZWZpbmUgTUU0MDAwX0FJX1NUQVJUX1JFRwkJCTB4OTgJLy8gUi9fCisKKyNkZWZpbmUgTUU0MDAwX0lSUV9TVEFUVVNfUkVHCQkJMHg5QwkvLyBSL18KKworI2RlZmluZSBNRTQwMDBfRElPX1BPUlRfMF9SRUcJCQkweEEwCS8vIFIvVworI2RlZmluZSBNRTQwMDBfRElPX1BPUlRfMV9SRUcJCQkweEE0CS8vIFIvVworI2RlZmluZSBNRTQwMDBfRElPX1BPUlRfMl9SRUcJCQkweEE4CS8vIFIvVworI2RlZmluZSBNRTQwMDBfRElPX1BPUlRfM19SRUcJCQkweEFDCS8vIFIvVworI2RlZmluZSBNRTQwMDBfRElPX0RJUl9SRUcJCQkweEIwCS8vIFIvVworCisjZGVmaW5lIE1FNDAwMF9BT19MT0FEU0VUUkVHX1hYCQkJMHhCNAkvLyBSL1cKKworI2RlZmluZSBNRTQwMDBfRElPX0NUUkxfUkVHCQkJMHhCOAkvLyBSL1cKKworI2RlZmluZSBNRTQwMDBfQU9fREVNVVhfQURKVVNUX1JFRwkJMHhCQwkvLyAtL1cKKworI2RlZmluZSBNRTQwMDBfQUlfU0FNUExFX0NPVU5URVJfUkVHCQkweEMwCS8vIF8vVworCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgIFZhbHVlIHRvIGFkanVzdCBEZW11eAorICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworCisjZGVmaW5lIE1FNDAwMF9BT19ERU1VWF9BREpVU1RfVkFMVUUgICAgICAgICAgICAweDRDCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgQ291bnRlciBiYXNlIHJlZ2lzdGVyIG9mZnNldHMKKyAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKworI2RlZmluZSBNRTQwMDBfQ05UX0NPVU5URVJfMF9SRUcJCTB4MDAKKyNkZWZpbmUgTUU0MDAwX0NOVF9DT1VOVEVSXzFfUkVHCQkweDAxCisjZGVmaW5lIE1FNDAwMF9DTlRfQ09VTlRFUl8yX1JFRwkJMHgwMgorI2RlZmluZSBNRTQwMDBfQ05UX0NUUkxfUkVHCQkJMHgwMworCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgIFBMWCBiYXNlIHJlZ2lzdGVyIG9mZnNldHMKKyAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKworI2RlZmluZSBQTFhfSU5UQ1NSCTB4NEMJLy8gSW50ZXJydXB0IGNvbnRyb2wgYW5kIHN0YXR1cyByZWdpc3RlcgorI2RlZmluZSBQTFhfSUNSCQkweDUwCS8vIEluaXRpYWxpemF0aW9uIGNvbnRyb2wgcmVnaXN0ZXIKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICBCaXRzIGZvciB0aGUgUExYX0lDU1IgcmVnaXN0ZXIKKyAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKworI2RlZmluZSBQTFhfSU5UQ1NSX0xPQ0FMX0lOVDFfRU4gICAgICAgICAgICAgMHgwMQkvLyBJZiBzZXQsIGxvY2FsIGludGVycnVwdCAxIGlzIGVuYWJsZWQgKHIvdykKKyNkZWZpbmUgUExYX0lOVENTUl9MT0NBTF9JTlQxX1BPTCAgICAgICAgICAgIDB4MDIJLy8gSWYgc2V0LCBsb2NhbCBpbnRlcnJ1cHQgMSBwb2xhcml0eSBpcyBhY3RpdmUgaGlnaCAoci93KQorI2RlZmluZSBQTFhfSU5UQ1NSX0xPQ0FMX0lOVDFfU1RBVEUgICAgICAgICAgMHgwNAkvLyBJZiBzZXQsIGxvY2FsIGludGVycnVwdCAxIGlzIGFjdGl2ZSAoci9fKQorI2RlZmluZSBQTFhfSU5UQ1NSX0xPQ0FMX0lOVDJfRU4gICAgICAgICAgICAgMHgwOAkvLyBJZiBzZXQsIGxvY2FsIGludGVycnVwdCAyIGlzIGVuYWJsZWQgKHIvdykKKyNkZWZpbmUgUExYX0lOVENTUl9MT0NBTF9JTlQyX1BPTCAgICAgICAgICAgIDB4MTAJLy8gSWYgc2V0LCBsb2NhbCBpbnRlcnJ1cHQgMiBwb2xhcml0eSBpcyBhY3RpdmUgaGlnaCAoci93KQorI2RlZmluZSBQTFhfSU5UQ1NSX0xPQ0FMX0lOVDJfU1RBVEUgICAgICAgICAgMHgyMAkvLyBJZiBzZXQsIGxvY2FsIGludGVycnVwdCAyIGlzIGFjdGl2ZSAgKHIvXykKKyNkZWZpbmUgUExYX0lOVENTUl9QQ0lfSU5UX0VOICAgICAgICAgICAgICAgIDB4NDAJLy8gSWYgc2V0LCBQQ0kgaW50ZXJydXB0IGlzIGVuYWJsZWQgKHIvdykKKyNkZWZpbmUgUExYX0lOVENTUl9TT0ZUX0lOVCAgICAgICAgICAgICAgICAgIDB4ODAJLy8gSWYgc2V0LCBhIHNvZnR3YXJlIGludGVycnVwdCBpcyBnZW5lcmF0ZWQgKHIvdykKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICBCaXRzIGZvciB0aGUgUExYX0lDUiByZWdpc3RlcgorICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworCisjZGVmaW5lIFBMWF9JQ1JfQklUX0VFUFJPTV9DTE9DS19TRVQJCTB4MDEwMDAwMDAKKyNkZWZpbmUgUExYX0lDUl9CSVRfRUVQUk9NX0NISVBfU0VMRUNUCQkweDAyMDAwMDAwCisjZGVmaW5lIFBMWF9JQ1JfQklUX0VFUFJPTV9XUklURQkJMHgwNDAwMDAwMAorI2RlZmluZSBQTFhfSUNSX0JJVF9FRVBST01fUkVBRAkJCTB4MDgwMDAwMDAKKyNkZWZpbmUgUExYX0lDUl9CSVRfRUVQUk9NX1ZBTElECQkweDEwMDAwMDAwCisKKyNkZWZpbmUgUExYX0lDUl9NQVNLX0VFUFJPTQkJCTB4MUYwMDAwMDAKKworI2RlZmluZSBFRVBST01fREVMQVkJCQkJMQorCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgIEJpdHMgZm9yIHRoZSBNRTQwMDBfQU9fQ1RSTF9SRUcgcmVnaXN0ZXIKKyAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKworI2RlZmluZSBNRTQwMDBfQU9fQ1RSTF9CSVRfTU9ERV8wCQkweDAwMQorI2RlZmluZSBNRTQwMDBfQU9fQ1RSTF9CSVRfTU9ERV8xCQkweDAwMgorI2RlZmluZSBNRTQwMDBfQU9fQ1RSTF9NQVNLX01PREUJCTB4MDAzCisjZGVmaW5lIE1FNDAwMF9BT19DVFJMX0JJVF9TVE9QCQkJMHgwMDQKKyNkZWZpbmUgTUU0MDAwX0FPX0NUUkxfQklUX0VOQUJMRV9GSUZPCQkweDAwOAorI2RlZmluZSBNRTQwMDBfQU9fQ1RSTF9CSVRfRU5BQkxFX0VYX1RSSUcJMHgwMTAKKyNkZWZpbmUgTUU0MDAwX0FPX0NUUkxfQklUX0VYX1RSSUdfRURHRQkJMHgwMjAKKyNkZWZpbmUgTUU0MDAwX0FPX0NUUkxfQklUX0lNTUVESUFURV9TVE9QCTB4MDgwCisjZGVmaW5lIE1FNDAwMF9BT19DVFJMX0JJVF9FTkFCTEVfRE8JCTB4MTAwCisjZGVmaW5lIE1FNDAwMF9BT19DVFJMX0JJVF9FTkFCTEVfSVJRCQkweDIwMAorI2RlZmluZSBNRTQwMDBfQU9fQ1RSTF9CSVRfUkVTRVRfSVJRCQkweDQwMAorI2RlZmluZSBNRTQwMDBfQU9fQ1RSTF9CSVRfRVhfVFJJR19CT1RICQkweDgwMAorCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgIEJpdHMgZm9yIHRoZSBNRTQwMDBfQU9fU1RBVFVTX1JFRyByZWdpc3RlcgorICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworCisjZGVmaW5lIE1FNDAwMF9BT19TVEFUVVNfQklUX0ZTTQkJMHgwMQorI2RlZmluZSBNRTQwMDBfQU9fU1RBVFVTX0JJVF9GRgkJCTB4MDIKKyNkZWZpbmUgTUU0MDAwX0FPX1NUQVRVU19CSVRfSEYJCQkweDA0CisjZGVmaW5lIE1FNDAwMF9BT19TVEFUVVNfQklUX0VGCQkJMHgwOAorCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgIEJpdHMgZm9yIHRoZSBNRTQwMDBfQUlfQ1RSTF9SRUcgcmVnaXN0ZXIKKyAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKworI2RlZmluZSBNRTQwMDBfQUlfQ1RSTF9CSVRfTU9ERV8wCQkweDAwMDAwMDAxCisjZGVmaW5lIE1FNDAwMF9BSV9DVFJMX0JJVF9NT0RFXzEJCTB4MDAwMDAwMDIKKyNkZWZpbmUgTUU0MDAwX0FJX0NUUkxfQklUX01PREVfMgkJMHgwMDAwMDAwNAorI2RlZmluZSBNRTQwMDBfQUlfQ1RSTF9CSVRfU0FNUExFX0hPTEQJCTB4MDAwMDAwMDgKKyNkZWZpbmUgTUU0MDAwX0FJX0NUUkxfQklUX0lNTUVESUFURV9TVE9QCTB4MDAwMDAwMTAKKyNkZWZpbmUgTUU0MDAwX0FJX0NUUkxfQklUX1NUT1AJCQkweDAwMDAwMDIwCisjZGVmaW5lIE1FNDAwMF9BSV9DVFJMX0JJVF9DSEFOTkVMX0ZJRk8JCTB4MDAwMDAwNDAKKyNkZWZpbmUgTUU0MDAwX0FJX0NUUkxfQklUX0RBVEFfRklGTwkJMHgwMDAwMDA4MAorI2RlZmluZSBNRTQwMDBfQUlfQ1RSTF9CSVRfRlVMTFNDQUxFCQkweDAwMDAwMTAwCisjZGVmaW5lIE1FNDAwMF9BSV9DVFJMX0JJVF9PRkZTRVQJCTB4MDAwMDAyMDAKKyNkZWZpbmUgTUU0MDAwX0FJX0NUUkxfQklUX0VYX1RSSUdfQU5BTE9HCTB4MDAwMDA0MDAKKyNkZWZpbmUgTUU0MDAwX0FJX0NUUkxfQklUX0VYX1RSSUcJCTB4MDAwMDA4MDAKKyNkZWZpbmUgTUU0MDAwX0FJX0NUUkxfQklUX0VYX1RSSUdfRkFMTElORwkweDAwMDAxMDAwCisjZGVmaW5lIE1FNDAwMF9BSV9DVFJMX0JJVF9FWF9JUlEJCTB4MDAwMDIwMDAKKyNkZWZpbmUgTUU0MDAwX0FJX0NUUkxfQklUX0VYX0lSUV9SRVNFVAkJMHgwMDAwNDAwMAorI2RlZmluZSBNRTQwMDBfQUlfQ1RSTF9CSVRfTEVfSVJRCQkweDAwMDA4MDAwCisjZGVmaW5lIE1FNDAwMF9BSV9DVFJMX0JJVF9MRV9JUlFfUkVTRVQJCTB4MDAwMTAwMDAKKyNkZWZpbmUgTUU0MDAwX0FJX0NUUkxfQklUX0hGX0lSUQkJMHgwMDAyMDAwMAorI2RlZmluZSBNRTQwMDBfQUlfQ1RSTF9CSVRfSEZfSVJRX1JFU0VUCQkweDAwMDQwMDAwCisjZGVmaW5lIE1FNDAwMF9BSV9DVFJMX0JJVF9TQ19JUlEJCTB4MDAwODAwMDAKKyNkZWZpbmUgTUU0MDAwX0FJX0NUUkxfQklUX1NDX0lSUV9SRVNFVAkJMHgwMDEwMDAwMAorI2RlZmluZSBNRTQwMDBfQUlfQ1RSTF9CSVRfU0NfUkVMT0FECQkweDAwMjAwMDAwCisjZGVmaW5lIE1FNDAwMF9BSV9DVFJMX0JJVF9FWF9UUklHX0JPVEgJCTB4ODAwMDAwMDAKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICBCaXRzIGZvciB0aGUgTUU0MDAwX0FJX1NUQVRVU19SRUcgcmVnaXN0ZXIKKyAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKworI2RlZmluZSBNRTQwMDBfQUlfU1RBVFVTX0JJVF9FRl9DSEFOTkVMCQkweDAwNDAwMDAwCisjZGVmaW5lIE1FNDAwMF9BSV9TVEFUVVNfQklUX0hGX0NIQU5ORUwJCTB4MDA4MDAwMDAKKyNkZWZpbmUgTUU0MDAwX0FJX1NUQVRVU19CSVRfRkZfQ0hBTk5FTAkJMHgwMTAwMDAwMAorI2RlZmluZSBNRTQwMDBfQUlfU1RBVFVTX0JJVF9FRl9EQVRBCQkweDAyMDAwMDAwCisjZGVmaW5lIE1FNDAwMF9BSV9TVEFUVVNfQklUX0hGX0RBVEEJCTB4MDQwMDAwMDAKKyNkZWZpbmUgTUU0MDAwX0FJX1NUQVRVU19CSVRfRkZfREFUQQkJMHgwODAwMDAwMAorI2RlZmluZSBNRTQwMDBfQUlfU1RBVFVTX0JJVF9MRQkJCTB4MTAwMDAwMDAKKyNkZWZpbmUgTUU0MDAwX0FJX1NUQVRVU19CSVRfRlNNCQkweDIwMDAwMDAwCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgQml0cyBmb3IgdGhlIE1FNDAwMF9JUlFfU1RBVFVTX1JFRyByZWdpc3RlcgorICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworCisjZGVmaW5lIE1FNDAwMF9JUlFfU1RBVFVTX0JJVF9FWAkJMHgwMQorI2RlZmluZSBNRTQwMDBfSVJRX1NUQVRVU19CSVRfTEUJCTB4MDIKKyNkZWZpbmUgTUU0MDAwX0lSUV9TVEFUVVNfQklUX0FJX0hGCQkweDA0CisjZGVmaW5lIE1FNDAwMF9JUlFfU1RBVFVTX0JJVF9BT18wX0hGCQkweDA4CisjZGVmaW5lIE1FNDAwMF9JUlFfU1RBVFVTX0JJVF9BT18xX0hGCQkweDEwCisjZGVmaW5lIE1FNDAwMF9JUlFfU1RBVFVTX0JJVF9BT18yX0hGCQkweDIwCisjZGVmaW5lIE1FNDAwMF9JUlFfU1RBVFVTX0JJVF9BT18zX0hGCQkweDQwCisjZGVmaW5lIE1FNDAwMF9JUlFfU1RBVFVTX0JJVF9TQwkJMHg4MAorCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgIEJpdHMgZm9yIHRoZSBNRTQwMDBfRElPX0NUUkxfUkVHIHJlZ2lzdGVyCisgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisKKyNkZWZpbmUgTUU0MDAwX0RJT19DVFJMX0JJVF9NT0RFXzAJCTBYMDAwMQorI2RlZmluZSBNRTQwMDBfRElPX0NUUkxfQklUX01PREVfMQkJMFgwMDAyCisjZGVmaW5lIE1FNDAwMF9ESU9fQ1RSTF9CSVRfTU9ERV8yCQkwWDAwMDQKKyNkZWZpbmUgTUU0MDAwX0RJT19DVFJMX0JJVF9NT0RFXzMJCTBYMDAwOAorI2RlZmluZSBNRTQwMDBfRElPX0NUUkxfQklUX01PREVfNAkJMFgwMDEwCisjZGVmaW5lIE1FNDAwMF9ESU9fQ1RSTF9CSVRfTU9ERV81CQkwWDAwMjAKKyNkZWZpbmUgTUU0MDAwX0RJT19DVFJMX0JJVF9NT0RFXzYJCTBYMDA0MAorI2RlZmluZSBNRTQwMDBfRElPX0NUUkxfQklUX01PREVfNwkJMFgwMDgwCisKKyNkZWZpbmUgTUU0MDAwX0RJT19DVFJMX0JJVF9GVU5DVElPTl8wCQkwWDAxMDAKKyNkZWZpbmUgTUU0MDAwX0RJT19DVFJMX0JJVF9GVU5DVElPTl8xCQkwWDAyMDAKKworI2RlZmluZSBNRTQwMDBfRElPX0NUUkxfQklUX0ZJRk9fSElHSF8wCQkwWDA0MDAKKyNkZWZpbmUgTUU0MDAwX0RJT19DVFJMX0JJVF9GSUZPX0hJR0hfMQkJMFgwODAwCisjZGVmaW5lIE1FNDAwMF9ESU9fQ1RSTF9CSVRfRklGT19ISUdIXzIJCTBYMTAwMAorI2RlZmluZSBNRTQwMDBfRElPX0NUUkxfQklUX0ZJRk9fSElHSF8zCQkwWDIwMDAKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICBCaXRzIGZvciB0aGUgTUU0MDAwX0NOVF9DVFJMX1JFRyByZWdpc3RlcgorICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworCisjZGVmaW5lIE1FNDAwMF9DTlRfQ1RSTF9CSVRfQ09VTlRFUl8wICAweDAwCisjZGVmaW5lIE1FNDAwMF9DTlRfQ1RSTF9CSVRfQ09VTlRFUl8xICAweDQwCisjZGVmaW5lIE1FNDAwMF9DTlRfQ1RSTF9CSVRfQ09VTlRFUl8yICAweDgwCisKKyNkZWZpbmUgTUU0MDAwX0NOVF9DVFJMX0JJVF9NT0RFXzAgICAgIDB4MDAJLy8gQ2hhbmdlIHN0YXRlIGlmIHplcm8gY3Jvc3NpbmcKKyNkZWZpbmUgTUU0MDAwX0NOVF9DVFJMX0JJVF9NT0RFXzEgICAgIDB4MDIJLy8gUmV0cmlnZ2VyYWJsZSBPbmUtU2hvdAorI2RlZmluZSBNRTQwMDBfQ05UX0NUUkxfQklUX01PREVfMiAgICAgMHgwNAkvLyBBc3ltbWV0cmljYWwgZGl2aWRlcgorI2RlZmluZSBNRTQwMDBfQ05UX0NUUkxfQklUX01PREVfMyAgICAgMHgwNgkvLyBTeW1tZXRyaWNhbCBkaXZpZGVyCisjZGVmaW5lIE1FNDAwMF9DTlRfQ1RSTF9CSVRfTU9ERV80ICAgICAweDA4CS8vIENvdW50ZXIgc3RhcnQgYnkgc29mdHdhcmUgdHJpZ2dlcgorI2RlZmluZSBNRTQwMDBfQ05UX0NUUkxfQklUX01PREVfNSAgICAgMHgwQQkvLyBDb3VudGVyIHN0YXJ0IGJ5IGhhcmR3YXJlIHRyaWdnZXIKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICBFeHRyYWN0IGluZm9ybWF0aW9uIGZyb20gbWlub3IgZGV2aWNlIG51bWJlcgorICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworCisjZGVmaW5lIEFPX0JPQVJEKGRldikgKChNSU5PUihkZXYpID4+IDYpICYgMHgzKQorI2RlZmluZSBBT19QT1JUKGRldikgICgoTUlOT1IoZGV2KSA+PiAyKSAmIDB4RikKKyNkZWZpbmUgQU9fTU9ERShkZXYpICAoTUlOT1IoZGV2KSAmIDB4MykKKworI2RlZmluZSBBSV9CT0FSRChkZXYpICgoTUlOT1IoZGV2KSA+PiAzKSAmIDB4MUYpCisjZGVmaW5lIEFJX01PREUoZGV2KSAgKE1JTk9SKGRldikgJiAweDcpCisKKyNkZWZpbmUgRElPX0JPQVJEKGRldikgKE1JTk9SKGRldikpCisKKyNkZWZpbmUgQ05UX0JPQVJEKGRldikgKE1JTk9SKGRldikpCisKKyNkZWZpbmUgRVhUX0lOVF9CT0FSRChkZXYpIChNSU5PUihkZXYpKQorCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgIENpcmN1bGFyIGJ1ZmZlciB1c2VkIGZvciBhbmFsb2cgaW5wdXQvb3V0cHV0IHJlYWRzL3dyaXRlcy4KKyAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKwordHlwZWRlZiBzdHJ1Y3QgbWU0MDAwX2NpcmNfYnVmIHsKKwlzMTYgKmJ1ZjsKKwlpbnQgdm9sYXRpbGUgaGVhZDsKKwlpbnQgdm9sYXRpbGUgdGFpbDsKK30gbWU0MDAwX2NpcmNfYnVmX3Q7CisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgSW5mb3JtYXRpb24gYWJvdXQgdGhlIGhhcmR3YXJlIGNhcGFiaWxpdGllcworICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworCit0eXBlZGVmIHN0cnVjdCBtZTQwMDBfYW9faW5mbyB7CisJaW50IGNvdW50OworCWludCBmaWZvX2NvdW50OworfSBtZTQwMDBfYW9faW5mb190OworCit0eXBlZGVmIHN0cnVjdCBtZTQwMDBfYWlfaW5mbyB7CisJaW50IGNvdW50OworCWludCBzaF9jb3VudDsKKwlpbnQgZGlmZl9jb3VudDsKKwlpbnQgZXhfdHJpZ19hbmFsb2c7Cit9IG1lNDAwMF9haV9pbmZvX3Q7CisKK3R5cGVkZWYgc3RydWN0IG1lNDAwMF9kaW9faW5mbyB7CisJaW50IGNvdW50OworfSBtZTQwMDBfZGlvX2luZm9fdDsKKwordHlwZWRlZiBzdHJ1Y3QgbWU0MDAwX2NudF9pbmZvIHsKKwlpbnQgY291bnQ7Cit9IG1lNDAwMF9jbnRfaW5mb190OworCit0eXBlZGVmIHN0cnVjdCBtZTQwMDBfYm9hcmQgeworCXUxNiB2ZW5kb3JfaWQ7CisJdTE2IGRldmljZV9pZDsKKwltZTQwMDBfYW9faW5mb190IGFvOworCW1lNDAwMF9haV9pbmZvX3QgYWk7CisJbWU0MDAwX2Rpb19pbmZvX3QgZGlvOworCW1lNDAwMF9jbnRfaW5mb190IGNudDsKK30gbWU0MDAwX2JvYXJkX3Q7CisKK3N0YXRpYyBtZTQwMDBfYm9hcmRfdCBtZTQwMDBfYm9hcmRzW10gPSB7CisJe1BDSV9WRU5ET1JfSURfTUVJTEhBVVMsIDB4NDYxMCwgezAsIDB9LCB7MTYsIDAsIDAsIDB9LCB7NH0sIHszfX0sCisKKwl7UENJX1ZFTkRPUl9JRF9NRUlMSEFVUywgMHg0NjUwLCB7MCwgMH0sIHsxNiwgMCwgMCwgMH0sIHs0fSwgezB9fSwKKworCXtQQ0lfVkVORE9SX0lEX01FSUxIQVVTLCAweDQ2NjAsIHsyLCAwfSwgezE2LCAwLCAwLCAwfSwgezR9LCB7M319LAorCXtQQ0lfVkVORE9SX0lEX01FSUxIQVVTLCAweDQ2NjEsIHsyLCAwfSwgezE2LCAwLCAwLCAwfSwgezR9LCB7M319LAorCXtQQ0lfVkVORE9SX0lEX01FSUxIQVVTLCAweDQ2NjIsIHsyLCAwfSwgezE2LCA4LCAwLCAwfSwgezR9LCB7M319LAorCXtQQ0lfVkVORE9SX0lEX01FSUxIQVVTLCAweDQ2NjMsIHsyLCAwfSwgezE2LCA4LCAwLCAwfSwgezR9LCB7M319LAorCisJe1BDSV9WRU5ET1JfSURfTUVJTEhBVVMsIDB4NDY3MCwgezQsIDB9LCB7MzIsIDAsIDE2LCAxfSwgezR9LCB7M319LAorCXtQQ0lfVkVORE9SX0lEX01FSUxIQVVTLCAweDQ2NzEsIHs0LCAwfSwgezMyLCAwLCAxNiwgMX0sIHs0fSwgezN9fSwKKwl7UENJX1ZFTkRPUl9JRF9NRUlMSEFVUywgMHg0NjcyLCB7NCwgMH0sIHszMiwgOCwgMTYsIDF9LCB7NH0sIHszfX0sCisJe1BDSV9WRU5ET1JfSURfTUVJTEhBVVMsIDB4NDY3MywgezQsIDB9LCB7MzIsIDgsIDE2LCAxfSwgezR9LCB7M319LAorCisJe1BDSV9WRU5ET1JfSURfTUVJTEhBVVMsIDB4NDY4MCwgezQsIDR9LCB7MzIsIDAsIDE2LCAxfSwgezR9LCB7M319LAorCXtQQ0lfVkVORE9SX0lEX01FSUxIQVVTLCAweDQ2ODEsIHs0LCA0fSwgezMyLCAwLCAxNiwgMX0sIHs0fSwgezN9fSwKKwl7UENJX1ZFTkRPUl9JRF9NRUlMSEFVUywgMHg0NjgyLCB7NCwgNH0sIHszMiwgOCwgMTYsIDF9LCB7NH0sIHszfX0sCisJe1BDSV9WRU5ET1JfSURfTUVJTEhBVVMsIDB4NDY4MywgezQsIDR9LCB7MzIsIDgsIDE2LCAxfSwgezR9LCB7M319LAorCisJezB9LAorfTsKKworI2RlZmluZSBNRTQwMDBfQk9BUkRfVkVSU0lPTlMgKHNpemVvZihtZTQwMDBfYm9hcmRzKSAvIHNpemVvZihtZTQwMDBfYm9hcmRfdCkgLSAxKQorCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgIFBDSSBkZXZpY2UgdGFibGUuCisgIFRoaXMgaXMgdXNlZCBieSBtb2Rwcm9iZSB0byB0cmFuc2xhdGUgUENJIElEcyB0byBkcml2ZXJzLgorICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworCitzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgbWU0MDAwX3BjaV90YWJsZVtdIF9fZGV2aW5pdGRhdGEgPSB7CisJe1BDSV9WRU5ET1JfSURfTUVJTEhBVVMsIDB4NDYxMCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCisKKwl7UENJX1ZFTkRPUl9JRF9NRUlMSEFVUywgMHg0NjUwLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKworCXtQQ0lfVkVORE9SX0lEX01FSUxIQVVTLCAweDQ2NjAsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAorCXtQQ0lfVkVORE9SX0lEX01FSUxIQVVTLCAweDQ2NjEsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAorCXtQQ0lfVkVORE9SX0lEX01FSUxIQVVTLCAweDQ2NjIsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAorCXtQQ0lfVkVORE9SX0lEX01FSUxIQVVTLCAweDQ2NjMsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAorCisJe1BDSV9WRU5ET1JfSURfTUVJTEhBVVMsIDB4NDY3MCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCisJe1BDSV9WRU5ET1JfSURfTUVJTEhBVVMsIDB4NDY3MSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCisJe1BDSV9WRU5ET1JfSURfTUVJTEhBVVMsIDB4NDY3MiwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCisJe1BDSV9WRU5ET1JfSURfTUVJTEhBVVMsIDB4NDY3MywgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCisKKwl7UENJX1ZFTkRPUl9JRF9NRUlMSEFVUywgMHg0NjgwLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7UENJX1ZFTkRPUl9JRF9NRUlMSEFVUywgMHg0NjgxLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7UENJX1ZFTkRPUl9JRF9NRUlMSEFVUywgMHg0NjgyLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7UENJX1ZFTkRPUl9JRF9NRUlMSEFVUywgMHg0NjgzLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKworCXswfQorfTsKKworTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIG1lNDAwMF9wY2lfdGFibGUpOworCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgIEdsb2JhbCBib2FyZCBhbmQgc3ViZGV2aWNlIGluZm9ybWF0aW9uIHN0cnVjdHVyZXMKKyAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKwordHlwZWRlZiBzdHJ1Y3QgbWU0MDAwX2luZm8geworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsJLy8gTGlzdCBvZiBhbGwgZGV0ZWN0ZWQgYm9hcmRzCisJaW50IGJvYXJkX2NvdW50OwkvLyBJbmRleCBvZiB0aGUgYm9hcmQgYWZ0ZXIgZGV0ZWN0aW9uCisKKwl1bnNpZ25lZCBsb25nIHBseF9yZWdiYXNlOwkvLyBQTFggY29uZmlndXJhdGlvbiBzcGFjZSBiYXNlIGFkZHJlc3MKKwl1bnNpZ25lZCBsb25nIG1lNDAwMF9yZWdiYXNlOwkvLyBCYXNlIGFkZHJlc3Mgb2YgdGhlIE1FNDAwMAorCXVuc2lnbmVkIGxvbmcgdGltZXJfcmVnYmFzZTsJLy8gQmFzZSBhZGRyZXNzIG9mIHRoZSB0aW1lciBjaXJjdWl0CisJdW5zaWduZWQgbG9uZyBwcm9ncmFtX3JlZ2Jhc2U7CS8vIEJhc2UgYWRkcmVzcyB0byBzZXQgdGhlIHByb2dyYW0gcGluIGZvciB0aGUgeGlsaW54CisKKwl1bnNpZ25lZCBsb25nIHBseF9yZWdiYXNlX3NpemU7CS8vIFBMWCByZWdpc3RlciBzZXQgc3BhY2UKKwl1bnNpZ25lZCBsb25nIG1lNDAwMF9yZWdiYXNlX3NpemU7CS8vIE1FNDAwMCByZWdpc3RlciBzZXQgc3BhY2UKKwl1bnNpZ25lZCBsb25nIHRpbWVyX3JlZ2Jhc2Vfc2l6ZTsJLy8gVGltZXIgY2lyY3VpdCByZWdpc3RlciBzZXQgc3BhY2UKKwl1bnNpZ25lZCBsb25nIHByb2dyYW1fcmVnYmFzZV9zaXplOwkvLyBTaXplIG9mIHByb2dyYW0gYmFzZSBhZGRyZXNzIG9mIHRoZSBNRTQwMDAKKworCXVuc2lnbmVkIGludCBzZXJpYWxfbm87CS8vIFNlcmlhbCBudW1iZXIgb2YgdGhlIGJvYXJkCisJdW5zaWduZWQgY2hhciBod19yZXZpc2lvbjsJLy8gSGFyZHdhcmUgcmV2aXNpb24gb2YgdGhlIGJvYXJkCisJdW5zaWduZWQgc2hvcnQgdmVuZG9yX2lkOwkvLyBNZWlsaGF1cyB2ZW5kb3IgaWQgKDB4MTQwMikKKwl1bnNpZ25lZCBzaG9ydCBkZXZpY2VfaWQ7CS8vIERldmljZSBJRAorCisJaW50IHBjaV9idXNfbm87CQkvLyBQQ0kgYnVzIG51bWJlcgorCWludCBwY2lfZGV2X25vOwkJLy8gUENJIGRldmljZSBudW1iZXIKKwlpbnQgcGNpX2Z1bmNfbm87CS8vIFBDSSBmdW5jdGlvbiBudW1iZXIKKwlzdHJ1Y3QgcGNpX2RldiAqcGNpX2Rldl9wOwkvLyBHZW5lcmFsIFBDSSBpbmZvcm1hdGlvbgorCisJbWU0MDAwX2JvYXJkX3QgKmJvYXJkX3A7CS8vIEhvbGRzIHRoZSBib2FyZCBjYXBhYmlsaXRpZXMKKworCXVuc2lnbmVkIGludCBpcnE7CS8vIElSUSBhc3NpZ25lZCBmcm9tIHRoZSBQQ0kgQklPUworCXVuc2lnbmVkIGludCBpcnFfY291bnQ7CS8vIENvdW50IG9mIGV4dGVybmFsIGludGVycnVwdHMKKworCXNwaW5sb2NrX3QgcHJlbG9hZF9sb2NrOwkvLyBHdWFyZHMgdGhlIGFuYWxvZyBvdXRwdXQgcHJlbG9hZCByZWdpc3RlcgorCXNwaW5sb2NrX3QgYWlfY3RybF9sb2NrOwkvLyBHdWFyZHMgdGhlIGFuYWxvZyBpbnB1dCBjb250cm9sIHJlZ2lzdGVyCisKKwlzdHJ1Y3QgbGlzdF9oZWFkIGFvX2NvbnRleHRfbGlzdDsJLy8gTGlzdCB3aXRoIGFuYWxvZyBvdXRwdXQgc3BlY2lmaWMgY29udGV4dAorCXN0cnVjdCBtZTQwMDBfYWlfY29udGV4dCAqYWlfY29udGV4dDsJLy8gQW5hbG9nIGlucHV0ICBzcGVjaWZpYyBjb250ZXh0CisJc3RydWN0IG1lNDAwMF9kaW9fY29udGV4dCAqZGlvX2NvbnRleHQ7CS8vIERpZ2l0YWwgSS9PIHNwZWNpZmljIGNvbnRleHQKKwlzdHJ1Y3QgbWU0MDAwX2NudF9jb250ZXh0ICpjbnRfY29udGV4dDsJLy8gQ291bnRlciBzcGVjaWZpYyBjb250ZXh0CisJc3RydWN0IG1lNDAwMF9leHRfaW50X2NvbnRleHQgKmV4dF9pbnRfY29udGV4dDsJLy8gRXh0ZXJuYWwgaW50ZXJydXB0IHNwZWNpZmljIGNvbnRleHQKK30gbWU0MDAwX2luZm9fdDsKKwordHlwZWRlZiBzdHJ1Y3QgbWU0MDAwX2FvX2NvbnRleHQgeworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsJLy8gbGlua2VkIGxpc3Qgb2YgbWU0MDAwX2FvX2NvbnRleHRfdAorCWludCBpbmRleDsJCS8vIEluZGV4IGluIHRoZSBsaXN0CisJaW50IG1vZGU7CQkvLyBJbmRpY2F0ZXMgbW9kZSAoMCA9IHNpbmdsZSwgMSA9IHdyYXBhcm91bmQsIDIgPSBjb250aW5vdXMpCisJaW50IGRhY19pbl91c2U7CQkvLyBJbmRpY2F0ZXMgaWYgYWxyZWFkeSBvcGVuZAorCXNwaW5sb2NrX3QgdXNlX2xvY2s7CS8vIEd1YXJkcyBpbl91c2UKKwlzcGlubG9ja190IGludF9sb2NrOwkvLyBVc2VkIHdoZW4gbG9ja2luZyBvdXQgaW50ZXJydXB0cworCW1lNDAwMF9jaXJjX2J1Zl90IGNpcmNfYnVmOwkvLyBDaXJjdWxhciBidWZmZXIKKwl3YWl0X3F1ZXVlX2hlYWRfdCB3YWl0X3F1ZXVlOwkvLyBXYWl0IHF1ZXVlIHRvIHNsZWVwIHdoaWxlIGJsb2NraW5nIHdyaXRlCisJbWU0MDAwX2luZm9fdCAqYm9hcmRfaW5mbzsKKwl1bnNpZ25lZCBpbnQgaXJxOwkvLyBUaGUgaXJxIGFzc29jaWF0ZWQgd2l0aCB0aGlzIEFEQworCWludCB2b2xhdGlsZSBwaXBlX2ZsYWc7CS8vIEluZGljYXRlcyBicm9rZW4gcGlwZSBzZXQgZnJvbSBtZTQwMDBfYW9faXNyKCkKKwl1bnNpZ25lZCBsb25nIGN0cmxfcmVnOworCXVuc2lnbmVkIGxvbmcgc3RhdHVzX3JlZzsKKwl1bnNpZ25lZCBsb25nIGZpZm9fcmVnOworCXVuc2lnbmVkIGxvbmcgc2luZ2xlX3JlZzsKKwl1bnNpZ25lZCBsb25nIHRpbWVyX3JlZzsKKwl1bnNpZ25lZCBsb25nIGlycV9zdGF0dXNfcmVnOworCXVuc2lnbmVkIGxvbmcgcHJlbG9hZF9yZWc7CisJc3RydWN0IGZhc3luY19zdHJ1Y3QgKmZhc3luY19wOwkvLyBRdWV1ZSBmb3IgYXN5bmNocm9ub3VzIG5vdGlmaWNhdGlvbgorfSBtZTQwMDBfYW9fY29udGV4dF90OworCit0eXBlZGVmIHN0cnVjdCBtZTQwMDBfYWlfY29udGV4dCB7CisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OwkvLyBsaW5rZWQgbGlzdCBvZiBtZTQwMDBfYWlfaW5mb190CisJaW50IG1vZGU7CQkvLyBJbmRpY2F0ZXMgbW9kZQorCWludCBpbl91c2U7CQkvLyBJbmRpY2F0ZXMgaWYgYWxyZWFkeSBvcGVuZAorCXNwaW5sb2NrX3QgdXNlX2xvY2s7CS8vIEd1YXJkcyBpbl91c2UKKwlzcGlubG9ja190IGludF9sb2NrOwkvLyBVc2VkIHdoZW4gbG9ja2luZyBvdXQgaW50ZXJydXB0cworCWludCBudW1iZXI7CQkvLyBOdW1iZXIgb2YgdGhlIERBQworCXVuc2lnbmVkIGludCBpcnE7CS8vIFRoZSBpcnEgYXNzb2NpYXRlZCB3aXRoIHRoaXMgQURDCisJbWU0MDAwX2NpcmNfYnVmX3QgY2lyY19idWY7CS8vIENpcmN1bGFyIGJ1ZmZlcgorCXdhaXRfcXVldWVfaGVhZF90IHdhaXRfcXVldWU7CS8vIFdhaXQgcXVldWUgdG8gc2xlZXAgd2hpbGUgYmxvY2tpbmcgcmVhZAorCW1lNDAwMF9pbmZvX3QgKmJvYXJkX2luZm87CisKKwlzdHJ1Y3QgZmFzeW5jX3N0cnVjdCAqZmFzeW5jX3A7CS8vIFF1ZXVlIGZvciBhc3luY2hyb25vdXMgbm90aWZpY2F0aW9uCisKKwl1bnNpZ25lZCBsb25nIGN0cmxfcmVnOworCXVuc2lnbmVkIGxvbmcgc3RhdHVzX3JlZzsKKwl1bnNpZ25lZCBsb25nIGNoYW5uZWxfbGlzdF9yZWc7CisJdW5zaWduZWQgbG9uZyBkYXRhX3JlZzsKKwl1bnNpZ25lZCBsb25nIGNoYW5fdGltZXJfcmVnOworCXVuc2lnbmVkIGxvbmcgY2hhbl9wcmVfdGltZXJfcmVnOworCXVuc2lnbmVkIGxvbmcgc2Nhbl90aW1lcl9sb3dfcmVnOworCXVuc2lnbmVkIGxvbmcgc2Nhbl90aW1lcl9oaWdoX3JlZzsKKwl1bnNpZ25lZCBsb25nIHNjYW5fcHJlX3RpbWVyX2xvd19yZWc7CisJdW5zaWduZWQgbG9uZyBzY2FuX3ByZV90aW1lcl9oaWdoX3JlZzsKKwl1bnNpZ25lZCBsb25nIHN0YXJ0X3JlZzsKKwl1bnNpZ25lZCBsb25nIGlycV9zdGF0dXNfcmVnOworCXVuc2lnbmVkIGxvbmcgc2FtcGxlX2NvdW50ZXJfcmVnOworCisJdW5zaWduZWQgbG9uZyBjaGFuX3RpbWVyOworCXVuc2lnbmVkIGxvbmcgY2hhbl9wcmVfdGltZXI7CisJdW5zaWduZWQgbG9uZyBzY2FuX3RpbWVyX2xvdzsKKwl1bnNpZ25lZCBsb25nIHNjYW5fdGltZXJfaGlnaDsKKwl1bnNpZ25lZCBsb25nIGNoYW5uZWxfbGlzdF9jb3VudDsKKwl1bnNpZ25lZCBsb25nIHNhbXBsZV9jb3VudGVyOworCWludCBzYW1wbGVfY291bnRlcl9yZWxvYWQ7Cit9IG1lNDAwMF9haV9jb250ZXh0X3Q7CisKK3R5cGVkZWYgc3RydWN0IG1lNDAwMF9kaW9fY29udGV4dCB7CisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OwkvLyBsaW5rZWQgbGlzdCBvZiBtZTQwMDBfZGlvX2NvbnRleHRfdAorCWludCBpbl91c2U7CQkvLyBJbmRpY2F0ZXMgaWYgYWxyZWFkeSBvcGVuZAorCXNwaW5sb2NrX3QgdXNlX2xvY2s7CS8vIEd1YXJkcyBpbl91c2UKKwlpbnQgbnVtYmVyOworCWludCBkaW9fY291bnQ7CisJbWU0MDAwX2luZm9fdCAqYm9hcmRfaW5mbzsKKwl1bnNpZ25lZCBsb25nIGRpcl9yZWc7CisJdW5zaWduZWQgbG9uZyBjdHJsX3JlZzsKKwl1bnNpZ25lZCBsb25nIHBvcnRfMF9yZWc7CisJdW5zaWduZWQgbG9uZyBwb3J0XzFfcmVnOworCXVuc2lnbmVkIGxvbmcgcG9ydF8yX3JlZzsKKwl1bnNpZ25lZCBsb25nIHBvcnRfM19yZWc7Cit9IG1lNDAwMF9kaW9fY29udGV4dF90OworCit0eXBlZGVmIHN0cnVjdCBtZTQwMDBfY250X2NvbnRleHQgeworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsJLy8gbGlua2VkIGxpc3Qgb2YgbWU0MDAwX2Rpb19jb250ZXh0X3QKKwlpbnQgaW5fdXNlOwkJLy8gSW5kaWNhdGVzIGlmIGFscmVhZHkgb3BlbmQKKwlzcGlubG9ja190IHVzZV9sb2NrOwkvLyBHdWFyZHMgaW5fdXNlCisJaW50IG51bWJlcjsKKwlpbnQgY250X2NvdW50OworCW1lNDAwMF9pbmZvX3QgKmJvYXJkX2luZm87CisJdW5zaWduZWQgbG9uZyBjdHJsX3JlZzsKKwl1bnNpZ25lZCBsb25nIGNvdW50ZXJfMF9yZWc7CisJdW5zaWduZWQgbG9uZyBjb3VudGVyXzFfcmVnOworCXVuc2lnbmVkIGxvbmcgY291bnRlcl8yX3JlZzsKK30gbWU0MDAwX2NudF9jb250ZXh0X3Q7CisKK3R5cGVkZWYgc3RydWN0IG1lNDAwMF9leHRfaW50X2NvbnRleHQgeworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsJLy8gbGlua2VkIGxpc3Qgb2YgbWU0MDAwX2Rpb19jb250ZXh0X3QKKwlpbnQgaW5fdXNlOwkJLy8gSW5kaWNhdGVzIGlmIGFscmVhZHkgb3BlbmQKKwlzcGlubG9ja190IHVzZV9sb2NrOwkvLyBHdWFyZHMgaW5fdXNlCisJaW50IG51bWJlcjsKKwltZTQwMDBfaW5mb190ICpib2FyZF9pbmZvOworCXVuc2lnbmVkIGludCBpcnE7CisJdW5zaWduZWQgbG9uZyBpbnRfY291bnQ7CisJc3RydWN0IGZhc3luY19zdHJ1Y3QgKmZhc3luY19wdHI7CisJdW5zaWduZWQgbG9uZyBjdHJsX3JlZzsKKwl1bnNpZ25lZCBsb25nIGlycV9zdGF0dXNfcmVnOworfSBtZTQwMDBfZXh0X2ludF9jb250ZXh0X3Q7CisKKyNlbmRpZgorCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgIEFwcGxpY2F0aW9uIGluY2x1ZGUgc2VjdGlvbiBzdGFydHMgaGVyZQorICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIERlZmluZXMgZm9yIGFuYWxvZyBpbnB1dAorICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyogR2VuZXJhbCBzdHVmZiAqLworI2RlZmluZSBNRTQwMDBfQUlfRklGT19DT1VOVAkJMjA0OAorCisjZGVmaW5lIE1FNDAwMF9BSV9NSU5fVElDS1MJCTY2CisjZGVmaW5lIE1FNDAwMF9BSV9NQVhfU0NBTl9USUNLUwkweEZGRkZGRkZGRkZMTAorCisjZGVmaW5lIE1FNDAwMF9BSV9CVUZGRVJfU0laRSAJCSgzMiAqIDEwMjQpCS8vIFNpemUgaW4gYnl0ZXMKKworI2RlZmluZSBNRTQwMDBfQUlfQlVGRkVSX0NPVU5UCQkoKE1FNDAwMF9BSV9CVUZGRVJfU0laRSkgLyAyKQkvLyBTaXplIGluIHZhbHVlcworCisvKiBDaGFubmVsIGxpc3QgZGVmaW5lcyBhbmQgbWFza3MgKi8KKyNkZWZpbmUgTUU0MDAwX0FJX0NIQU5ORUxfTElTVF9DT1VOVAkJMTAyNAorCisjZGVmaW5lIE1FNDAwMF9BSV9MSVNUX0lOUFVUX1NJTkdMRV9FTkRFRAkweDAwMAorI2RlZmluZSBNRTQwMDBfQUlfTElTVF9JTlBVVF9ESUZGRVJFTlRJQUwJMHgwMjAKKworI2RlZmluZSBNRTQwMDBfQUlfTElTVF9SQU5HRV9CSVBPTEFSXzEwCQkweDAwMAorI2RlZmluZSBNRTQwMDBfQUlfTElTVF9SQU5HRV9CSVBPTEFSXzJfNQkweDA0MAorI2RlZmluZSBNRTQwMDBfQUlfTElTVF9SQU5HRV9VTklQT0xBUl8xMAkweDA4MAorI2RlZmluZSBNRTQwMDBfQUlfTElTVF9SQU5HRV9VTklQT0xBUl8yXzUJMHgwQzAKKworI2RlZmluZSBNRTQwMDBfQUlfTElTVF9MQVNUX0VOVFJZCQkweDEwMAorCisvKiBFeHRlcm5hbCB0cmlnZ2VyIGRlZmluZXMgKi8KKyNkZWZpbmUgTUU0MDAwX0FJX1RSSUdHRVJfU09GVFdBUkUJCTB4MAkvLyBVc2Ugb25seSB3aXRoIEFQSQorI2RlZmluZSBNRTQwMDBfQUlfVFJJR0dFUl9FWFRfRElHSVRBTAkJMHgxCisjZGVmaW5lIE1FNDAwMF9BSV9UUklHR0VSX0VYVF9BTkFMT0cJCTB4MgorCisjZGVmaW5lIE1FNDAwMF9BSV9UUklHR0VSX0VYVF9FREdFX1JJU0lORwkweDAKKyNkZWZpbmUgTUU0MDAwX0FJX1RSSUdHRVJfRVhUX0VER0VfRkFMTElORwkweDEKKyNkZWZpbmUgTUU0MDAwX0FJX1RSSUdHRVJfRVhUX0VER0VfQk9USAkJMHgyCisKKy8qIFNhbXBsZSBhbmQgSG9sZCAqLworI2RlZmluZSBNRTQwMDBfQUlfU0lNVUxUQU5FT1VTX0RJU0FCTEUJCTB4MAorI2RlZmluZSBNRTQwMDBfQUlfU0lNVUxUQU5FT1VTX0VOQUJMRQkJMHgxCisKKy8qIERlZmluZXMgZm9yIHRoZSBTYW1wbGUgQ291bnRlciAqLworI2RlZmluZSBNRTQwMDBfQUlfU0NfUkVMT0FECQkJMHgwCisjZGVmaW5lIE1FNDAwMF9BSV9TQ19PTkNFCQkJMHgxCisKKy8qIE1vZGVzIGZvciBhbmFsb2cgaW5wdXQgKi8KKyNkZWZpbmUgTUU0MDAwX0FJX0FDUV9NT0RFX1NJTkdMRQkJMHgwMAkvLyBDYXRjaCBvbmUgc2luZ2xlIHZhbHVlCisjZGVmaW5lIE1FNDAwMF9BSV9BQ1FfTU9ERV9TT0ZUV0FSRQkJMHgwMQkvLyBDb250aW5vdXMgc2FtcGxpbmcgd2l0aCBzb2Z0d2FyZSBzdGFydAorI2RlZmluZSBNRTQwMDBfQUlfQUNRX01PREVfRVhUCQkJMHgwMgkvLyBDb250aW5vdXMgc2FtcGxpbmcgd2l0aCBleHRlcm5hbCB0cmlnZ2VyIHN0YXJ0CisjZGVmaW5lIE1FNDAwMF9BSV9BQ1FfTU9ERV9FWFRfU0lOR0xFX1ZBTFVFCTB4MDMJLy8gU2FtcGxlIG9uZSB2YWx1ZSBieSBleHRlcm5hbCB0cmlnZ2VyCisjZGVmaW5lIE1FNDAwMF9BSV9BQ1FfTU9ERV9FWFRfU0lOR0xFX0NIQU5MSVNUCTB4MDQJLy8gU2FtcGxlIG9uZSBjaGFubmVsIGxpc3QgYnkgZXh0ZXJuYWwgdHJpZ2dlcgorCisvKiBTdGF1cyBvZiBBSSBGU00gKi8KKyNkZWZpbmUgTUU0MDAwX0FJX1NUQVRVU19JRExFCQkJMHgwCisjZGVmaW5lIE1FNDAwMF9BSV9TVEFUVVNfQlVTWQkJCTB4MQorCisvKiBWb2x0YWdlcyBmb3IgY2FsaWJyYXRpb24gKi8KKyNkZWZpbmUgTUU0MDAwX0FJX0dBSU5fMV9VTklfT0ZGU0VUCQkxMC4wRS0zCisjZGVmaW5lIE1FNDAwMF9BSV9HQUlOXzFfVU5JX0ZVTExTQ0FMRQkJOTk1MC4wRS0zCisjZGVmaW5lIE1FNDAwMF9BSV9HQUlOXzFfQklfT0ZGU0VUCQkwLjAKKyNkZWZpbmUgTUU0MDAwX0FJX0dBSU5fMV9CSV9GVUxMU0NBTEUJCTk5NTAuMEUtMworI2RlZmluZSBNRTQwMDBfQUlfR0FJTl80X1VOSV9PRkZTRVQJCTEwLjBFLTMKKyNkZWZpbmUgTUU0MDAwX0FJX0dBSU5fNF9VTklfRlVMTFNDQUxFCQkyNDUwLjBFLTMKKyNkZWZpbmUgTUU0MDAwX0FJX0dBSU5fNF9CSV9PRkZTRVQJCTAuMAorI2RlZmluZSBNRTQwMDBfQUlfR0FJTl80X0JJX0ZVTExTQ0FMRQkJMjQ1MC4wRS0zCisKKy8qIElkZWFsIGRpZ2l0cyBmb3IgY2FsaWJyYXRpb24gKi8KKyNkZWZpbmUgTUU0MDAwX0FJX0dBSU5fMV9VTklfT0ZGU0VUX0RJR0lUUwkoLTMyNzAyKQorI2RlZmluZSBNRTQwMDBfQUlfR0FJTl8xX1VOSV9GVUxMU0NBTEVfRElHSVRTCTMyNDQwCisjZGVmaW5lIE1FNDAwMF9BSV9HQUlOXzFfQklfT0ZGU0VUX0RJR0lUUwkwCisjZGVmaW5lIE1FNDAwMF9BSV9HQUlOXzFfQklfRlVMTFNDQUxFX0RJR0lUUwkzMjYwNAorI2RlZmluZSBNRTQwMDBfQUlfR0FJTl80X1VOSV9PRkZTRVRfRElHSVRTCSgtMzI1MDUpCisjZGVmaW5lIE1FNDAwMF9BSV9HQUlOXzRfVU5JX0ZVTExTQ0FMRV9ESUdJVFMJMzE0NTcKKyNkZWZpbmUgTUU0MDAwX0FJX0dBSU5fNF9CSV9PRkZTRVRfRElHSVRTCTAKKyNkZWZpbmUgTUU0MDAwX0FJX0dBSU5fNF9CSV9GVUxMU0NBTEVfRElHSVRTCTMyMTEzCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgRGVmaW5lcyBmb3IgYW5hbG9nIG91dHB1dAorICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyogR2VuZXJhbCBzdHVmZiAqLworI2RlZmluZSBNRTQwMDBfQU9fRklGT19DT1VOVAkJCSg0ICogMTAyNCkKKworI2RlZmluZSBNRTQwMDBfQU9fTUlOX1RJQ0tTCQkJNjYKKworI2RlZmluZSBNRTQwMDBfQU9fQlVGRkVSX1NJWkUgCQkJKDMyICogMTAyNCkJLy8gU2l6ZSBpbiBieXRlcworCisjZGVmaW5lIE1FNDAwMF9BT19CVUZGRVJfQ09VTlQgCQkJKChNRTQwMDBfQU9fQlVGRkVSX1NJWkUpIC8gMikJLy8gU2l6ZSBpbiB2YWx1ZXMKKworLyogQ29udmVyc2lvbiBtb2RlcyBmb3IgYW5hbG9nIG91dHB1dCAqLworI2RlZmluZSBNRTQwMDBfQU9fQ09OVl9NT0RFX1NJTkdMRQkJMHgwCisjZGVmaW5lIE1FNDAwMF9BT19DT05WX01PREVfV1JBUEFST1VORAkJMHgxCisjZGVmaW5lIE1FNDAwMF9BT19DT05WX01PREVfQ09OVElOVU9VUwkJMHgyCisKKy8qIFRyaWdnZXIgc2V0dXAgKi8KKyNkZWZpbmUgTUU0MDAwX0FPX1RSSUdHRVJfRVhUX0VER0VfUklTSU5HCTB4MAorI2RlZmluZSBNRTQwMDBfQU9fVFJJR0dFUl9FWFRfRURHRV9GQUxMSU5HCTB4MQorI2RlZmluZSBNRTQwMDBfQU9fVFJJR0dFUl9FWFRfRURHRV9CT1RICQkweDIKKworLyogU3RhdHVzIG9mIEFPIEZTTSAqLworI2RlZmluZSBNRTQwMDBfQU9fU1RBVFVTX0lETEUJCQkweDAKKyNkZWZpbmUgTUU0MDAwX0FPX1NUQVRVU19CVVNZCQkJMHgxCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgRGVmaW5lcyBmb3IgZWVwcm9tCisgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisjZGVmaW5lIE1FNDAwMF9FRVBST01fQ01EX1JFQUQJCQkweDE4MAorI2RlZmluZSBNRTQwMDBfRUVQUk9NX0NNRF9XUklURV9FTkFCTEUJCTB4MTMwCisjZGVmaW5lIE1FNDAwMF9FRVBST01fQ01EX1dSSVRFX0RJU0FCTEUJCTB4MTAwCisjZGVmaW5lIE1FNDAwMF9FRVBST01fQ01EX1dSSVRFCQkJMHgxNDAwMDAwCisKKyNkZWZpbmUgTUU0MDAwX0VFUFJPTV9DTURfTEVOR1RIX1JFQUQJCTkKKyNkZWZpbmUgTUU0MDAwX0VFUFJPTV9DTURfTEVOR1RIX1dSSVRFX0VOQUJMRQk5CisjZGVmaW5lIE1FNDAwMF9FRVBST01fQ01EX0xFTkdUSF9XUklURV9ESVNBQkxFCTkKKyNkZWZpbmUgTUU0MDAwX0VFUFJPTV9DTURfTEVOR1RIX1dSSVRFCQkyNQorCisjZGVmaW5lIE1FNDAwMF9FRVBST01fQURSX0RBVEVfSElHSAkJMHgzMgorI2RlZmluZSBNRTQwMDBfRUVQUk9NX0FEUl9EQVRFX0xPVwkJMHgzMworCisjZGVmaW5lIE1FNDAwMF9FRVBST01fQURSX0dBSU5fMV9VTklfT0ZGU0VUCTB4MzQKKyNkZWZpbmUgTUU0MDAwX0VFUFJPTV9BRFJfR0FJTl8xX1VOSV9GVUxMU0NBTEUJMHgzNQorI2RlZmluZSBNRTQwMDBfRUVQUk9NX0FEUl9HQUlOXzFfQklfT0ZGU0VUCTB4MzYKKyNkZWZpbmUgTUU0MDAwX0VFUFJPTV9BRFJfR0FJTl8xX0JJX0ZVTExTQ0FMRQkweDM3CisjZGVmaW5lIE1FNDAwMF9FRVBST01fQURSX0dBSU5fMV9ESUZGX09GRlNFVAkweDM4CisjZGVmaW5lIE1FNDAwMF9FRVBST01fQURSX0dBSU5fMV9ESUZGX0ZVTExTQ0FMRQkweDM5CisKKyNkZWZpbmUgTUU0MDAwX0VFUFJPTV9BRFJfR0FJTl80X1VOSV9PRkZTRVQJMHgzQQorI2RlZmluZSBNRTQwMDBfRUVQUk9NX0FEUl9HQUlOXzRfVU5JX0ZVTExTQ0FMRQkweDNCCisjZGVmaW5lIE1FNDAwMF9FRVBST01fQURSX0dBSU5fNF9CSV9PRkZTRVQJMHgzQworI2RlZmluZSBNRTQwMDBfRUVQUk9NX0FEUl9HQUlOXzRfQklfRlVMTFNDQUxFCTB4M0QKKyNkZWZpbmUgTUU0MDAwX0VFUFJPTV9BRFJfR0FJTl80X0RJRkZfT0ZGU0VUCTB4M0UKKyNkZWZpbmUgTUU0MDAwX0VFUFJPTV9BRFJfR0FJTl80X0RJRkZfRlVMTFNDQUxFCTB4M0YKKworI2RlZmluZSBNRTQwMDBfRUVQUk9NX0FEUl9MRU5HVEgJCTYKKyNkZWZpbmUgTUU0MDAwX0VFUFJPTV9EQVRBX0xFTkdUSAkJMTYKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICBEZWZpbmVzIGZvciBkaWdpdGFsIEkvTworICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworI2RlZmluZSBNRTQwMDBfRElPX1BPUlRfQQkJMHgwCisjZGVmaW5lIE1FNDAwMF9ESU9fUE9SVF9CCQkweDEKKyNkZWZpbmUgTUU0MDAwX0RJT19QT1JUX0MJCTB4MgorI2RlZmluZSBNRTQwMDBfRElPX1BPUlRfRAkJMHgzCisKKyNkZWZpbmUgTUU0MDAwX0RJT19QT1JUX0lOUFVUCQkweDAKKyNkZWZpbmUgTUU0MDAwX0RJT19QT1JUX09VVFBVVAkJMHgxCisjZGVmaW5lIE1FNDAwMF9ESU9fRklGT19MT1cJCTB4MgorI2RlZmluZSBNRTQwMDBfRElPX0ZJRk9fSElHSAkJMHgzCisKKyNkZWZpbmUgTUU0MDAwX0RJT19GVU5DVElPTl9QQVRURVJOCTB4MAorI2RlZmluZSBNRTQwMDBfRElPX0ZVTkNUSU9OX0RFTVVYCTB4MQorI2RlZmluZSBNRTQwMDBfRElPX0ZVTkNUSU9OX01VWAkJMHgyCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgRGVmaW5lcyBmb3IgY291bnRlcnMKKyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKyNkZWZpbmUgTUU0MDAwX0NOVF9DT1VOVEVSXzAgIDAKKyNkZWZpbmUgTUU0MDAwX0NOVF9DT1VOVEVSXzEgIDEKKyNkZWZpbmUgTUU0MDAwX0NOVF9DT1VOVEVSXzIgIDIKKworI2RlZmluZSBNRTQwMDBfQ05UX01PREVfMCAgICAgMAkvLyBDaGFuZ2Ugc3RhdGUgaWYgemVybyBjcm9zc2luZworI2RlZmluZSBNRTQwMDBfQ05UX01PREVfMSAgICAgMQkvLyBSZXRyaWdnZXJhYmxlIE9uZS1TaG90CisjZGVmaW5lIE1FNDAwMF9DTlRfTU9ERV8yICAgICAyCS8vIEFzeW1tZXRyaWNhbCBkaXZpZGVyCisjZGVmaW5lIE1FNDAwMF9DTlRfTU9ERV8zICAgICAzCS8vIFN5bW1ldHJpY2FsIGRpdmlkZXIKKyNkZWZpbmUgTUU0MDAwX0NOVF9NT0RFXzQgICAgIDQJLy8gQ291bnRlciBzdGFydCBieSBzb2Z0d2FyZSB0cmlnZ2VyCisjZGVmaW5lIE1FNDAwMF9DTlRfTU9ERV81ICAgICA1CS8vIENvdW50ZXIgc3RhcnQgYnkgaGFyZHdhcmUgdHJpZ2dlcgorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIEdlbmVyYWwgdHlwZSBkZWZpbml0aW9ucworICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKwordHlwZWRlZiBzdHJ1Y3QgbWU0MDAwX3VzZXJfaW5mbyB7CisJaW50IGJvYXJkX2NvdW50OwkvLyBJbmRleCBvZiB0aGUgYm9hcmQgYWZ0ZXIgZGV0ZWN0aW9uCisJdW5zaWduZWQgbG9uZyBwbHhfcmVnYmFzZTsJLy8gUExYIGNvbmZpZ3VyYXRpb24gc3BhY2UgYmFzZSBhZGRyZXNzCisJdW5zaWduZWQgbG9uZyBtZTQwMDBfcmVnYmFzZTsJLy8gQmFzZSBhZGRyZXNzIG9mIHRoZSBNRTQwMDAKKwl1bnNpZ25lZCBsb25nIHBseF9yZWdiYXNlX3NpemU7CS8vIFBMWCByZWdpc3RlciBzZXQgc3BhY2UKKwl1bnNpZ25lZCBsb25nIG1lNDAwMF9yZWdiYXNlX3NpemU7CS8vIE1FNDAwMCByZWdpc3RlciBzZXQgc3BhY2UKKwl1bnNpZ25lZCBsb25nIHNlcmlhbF9ubzsJLy8gU2VyaWFsIG51bWJlciBvZiB0aGUgYm9hcmQKKwl1bnNpZ25lZCBjaGFyIGh3X3JldmlzaW9uOwkvLyBIYXJkd2FyZSByZXZpc2lvbiBvZiB0aGUgYm9hcmQKKwl1bnNpZ25lZCBzaG9ydCB2ZW5kb3JfaWQ7CS8vIE1laWxoYXVzIHZlbmRvciBpZCAoMHgxNDAyKQorCXVuc2lnbmVkIHNob3J0IGRldmljZV9pZDsJLy8gRGV2aWNlIElECisJaW50IHBjaV9idXNfbm87CQkvLyBQQ0kgYnVzIG51bWJlcgorCWludCBwY2lfZGV2X25vOwkJLy8gUENJIGRldmljZSBudW1iZXIKKwlpbnQgcGNpX2Z1bmNfbm87CS8vIFBDSSBmdW5jdGlvbiBudW1iZXIKKwljaGFyIGlycTsJCS8vIElSUSBhc3NpZ25lZCBmcm9tIHRoZSBQQ0kgQklPUworCWludCBpcnFfY291bnQ7CQkvLyBDb3VudCBvZiBleHRlcm5hbCBpbnRlcnJ1cHRzCisKKwlpbnQgZHJpdmVyX3ZlcnNpb247CS8vIFZlcnNpb24gb2YgdGhlIGRyaXZlciByZWxlYXNlCisKKwlpbnQgYW9fY291bnQ7CQkvLyBDb3VudCBvZiBhbmFsb2cgb3V0cHV0IGNoYW5uZWxzCisJaW50IGFvX2ZpZm9fY291bnQ7CS8vIENvdW50IGZvIGFuYWxvZyBvdXRwdXQgZmlmb3MKKworCWludCBhaV9jb3VudDsJCS8vIENvdW50IG9mIGFuYWxvZyBpbnB1dCBjaGFubmVscworCWludCBhaV9zaF9jb3VudDsJLy8gQ291bnQgb2Ygc2FtcGxlIGFuZCBob2xkIGRldmljZXMKKwlpbnQgYWlfZXhfdHJpZ19hbmFsb2c7CS8vIEZsYWcgdG8gaW5kaWNhdGUgaWYgYW5hbG9nb3VzIGV4dGVybmFsIHRyaWdnZXIgaXMgYXZhaWxhYmxlCisKKwlpbnQgZGlvX2NvdW50OwkJLy8gQ291bnQgb2YgZGlnaXRhbCBJL08gcG9ydHMKKworCWludCBjbnRfY291bnQ7CQkvLyBDb3VudCBvZiBjb3VudGVycworfSBtZTQwMDBfdXNlcl9pbmZvX3Q7CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgVHlwZSBkZWZpbml0aW9ucyBmb3IgYW5hbG9nIG91dHB1dAorICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKwordHlwZWRlZiBzdHJ1Y3QgbWU0MDAwX2FvX2NoYW5uZWxfbGlzdCB7CisJdW5zaWduZWQgbG9uZyBjb3VudDsKKwl1bnNpZ25lZCBsb25nICpsaXN0OworfSBtZTQwMDBfYW9fY2hhbm5lbF9saXN0X3Q7CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgVHlwZSBkZWZpbml0aW9ucyBmb3IgYW5hbG9nIGlucHV0CisgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCit0eXBlZGVmIHN0cnVjdCBtZTQwMDBfYWlfY2hhbm5lbF9saXN0IHsKKwl1bnNpZ25lZCBsb25nIGNvdW50OworCXVuc2lnbmVkIGxvbmcgKmxpc3Q7Cit9IG1lNDAwMF9haV9jaGFubmVsX2xpc3RfdDsKKwordHlwZWRlZiBzdHJ1Y3QgbWU0MDAwX2FpX3RpbWVyIHsKKwl1bnNpZ25lZCBsb25nIHByZV9jaGFuOworCXVuc2lnbmVkIGxvbmcgY2hhbjsKKwl1bnNpZ25lZCBsb25nIHNjYW5fbG93OworCXVuc2lnbmVkIGxvbmcgc2Nhbl9oaWdoOworfSBtZTQwMDBfYWlfdGltZXJfdDsKKwordHlwZWRlZiBzdHJ1Y3QgbWU0MDAwX2FpX2NvbmZpZyB7CisJbWU0MDAwX2FpX3RpbWVyX3QgdGltZXI7CisJbWU0MDAwX2FpX2NoYW5uZWxfbGlzdF90IGNoYW5uZWxfbGlzdDsKKwlpbnQgc2g7Cit9IG1lNDAwMF9haV9jb25maWdfdDsKKwordHlwZWRlZiBzdHJ1Y3QgbWU0MDAwX2FpX3NpbmdsZSB7CisJaW50IGNoYW5uZWw7CisJaW50IHJhbmdlOworCWludCBtb2RlOworCXNob3J0IHZhbHVlOworCXVuc2lnbmVkIGxvbmcgdGltZW91dDsKK30gbWU0MDAwX2FpX3NpbmdsZV90OworCit0eXBlZGVmIHN0cnVjdCBtZTQwMDBfYWlfdHJpZ2dlciB7CisJaW50IG1vZGU7CisJaW50IGVkZ2U7Cit9IG1lNDAwMF9haV90cmlnZ2VyX3Q7CisKK3R5cGVkZWYgc3RydWN0IG1lNDAwMF9haV9zYyB7CisJdW5zaWduZWQgbG9uZyB2YWx1ZTsKKwlpbnQgcmVsb2FkOworfSBtZTQwMDBfYWlfc2NfdDsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICBUeXBlIGRlZmluaXRpb25zIGZvciBlZXByb20KKyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3R5cGVkZWYgc3RydWN0IG1lNDAwMF9lZXByb20geworCXVuc2lnbmVkIGxvbmcgZGF0ZTsKKwlzaG9ydCB1bmlfMTBfb2Zmc2V0OworCXNob3J0IHVuaV8xMF9mdWxsc2NhbGU7CisJc2hvcnQgdW5pXzJfNV9vZmZzZXQ7CisJc2hvcnQgdW5pXzJfNV9mdWxsc2NhbGU7CisJc2hvcnQgYmlfMTBfb2Zmc2V0OworCXNob3J0IGJpXzEwX2Z1bGxzY2FsZTsKKwlzaG9ydCBiaV8yXzVfb2Zmc2V0OworCXNob3J0IGJpXzJfNV9mdWxsc2NhbGU7CisJc2hvcnQgZGlmZl8xMF9vZmZzZXQ7CisJc2hvcnQgZGlmZl8xMF9mdWxsc2NhbGU7CisJc2hvcnQgZGlmZl8yXzVfb2Zmc2V0OworCXNob3J0IGRpZmZfMl81X2Z1bGxzY2FsZTsKK30gbWU0MDAwX2VlcHJvbV90OworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIFR5cGUgZGVmaW5pdGlvbnMgZm9yIGRpZ2l0YWwgSS9PCisgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCit0eXBlZGVmIHN0cnVjdCBtZTQwMDBfZGlvX2NvbmZpZyB7CisJaW50IHBvcnQ7CisJaW50IG1vZGU7CisJaW50IGZ1bmN0aW9uOworfSBtZTQwMDBfZGlvX2NvbmZpZ190OworCit0eXBlZGVmIHN0cnVjdCBtZTQwMDBfZGlvX2J5dGUgeworCWludCBwb3J0OworCXVuc2lnbmVkIGNoYXIgYnl0ZTsKK30gbWU0MDAwX2Rpb19ieXRlX3Q7CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgVHlwZSBkZWZpbml0aW9ucyBmb3IgY291bnRlcnMKKyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3R5cGVkZWYgc3RydWN0IG1lNDAwMF9jbnQgeworCWludCBjb3VudGVyOworCXVuc2lnbmVkIHNob3J0IHZhbHVlOworfSBtZTQwMDBfY250X3Q7CisKK3R5cGVkZWYgc3RydWN0IG1lNDAwMF9jbnRfY29uZmlnIHsKKwlpbnQgY291bnRlcjsKKwlpbnQgbW9kZTsKK30gbWU0MDAwX2NudF9jb25maWdfdDsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICBUeXBlIGRlZmluaXRpb25zIGZvciBleHRlcm5hbCBpbnRlcnJ1cHQKKyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3R5cGVkZWYgc3RydWN0IHsKKwlpbnQgaW50MV9jb3VudDsKKwlpbnQgaW50Ml9jb3VudDsKK30gbWU0MDAwX2ludF90eXBlOworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIFRoZSBpb2N0bHMgb2YgdGhlIGJvYXJkCisgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisjZGVmaW5lIE1FNDAwMF9JT0NUTF9NQVhOUiA1MAorI2RlZmluZSBNRTQwMDBfTUFHSUMgJ3knCisjZGVmaW5lIE1FNDAwMF9HRVRfVVNFUl9JTkZPICAgICAgICAgIF9JT1IgKE1FNDAwMF9NQUdJQywgMCwgbWU0MDAwX3VzZXJfaW5mb190KQorCisjZGVmaW5lIE1FNDAwMF9BT19TVEFSVCAgICAgICAgICAgICAgIF9JT1cgKE1FNDAwMF9NQUdJQywgMSwgdW5zaWduZWQgbG9uZykKKyNkZWZpbmUgTUU0MDAwX0FPX1NUT1AgICAgICAgICAgICAgICAgX0lPICAoTUU0MDAwX01BR0lDLCAyKQorI2RlZmluZSBNRTQwMDBfQU9fSU1NRURJQVRFX1NUT1AgICAgICBfSU8gIChNRTQwMDBfTUFHSUMsIDMpCisjZGVmaW5lIE1FNDAwMF9BT19SRVNFVCAgICAgICAgICAgICAgIF9JTyAgKE1FNDAwMF9NQUdJQywgNCkKKyNkZWZpbmUgTUU0MDAwX0FPX1BSRUxPQUQgICAgICAgICAgICAgX0lPICAoTUU0MDAwX01BR0lDLCA1KQorI2RlZmluZSBNRTQwMDBfQU9fUFJFTE9BRF9VUERBVEUgICAgICBfSU8gIChNRTQwMDBfTUFHSUMsIDYpCisjZGVmaW5lIE1FNDAwMF9BT19FWF9UUklHX0VOQUJMRSAgICAgIF9JTyAgKE1FNDAwMF9NQUdJQywgNykKKyNkZWZpbmUgTUU0MDAwX0FPX0VYX1RSSUdfRElTQUJMRSAgICAgX0lPICAoTUU0MDAwX01BR0lDLCA4KQorI2RlZmluZSBNRTQwMDBfQU9fRVhfVFJJR19TRVRVUCAgICAgICBfSU9XIChNRTQwMDBfTUFHSUMsIDksIGludCkKKyNkZWZpbmUgTUU0MDAwX0FPX1RJTUVSX1NFVF9ESVZJU09SICAgX0lPVyAoTUU0MDAwX01BR0lDLCAxMCwgdW5zaWduZWQgbG9uZykKKyNkZWZpbmUgTUU0MDAwX0FPX0VOQUJMRV9ETyAgICAgICAgICAgX0lPICAoTUU0MDAwX01BR0lDLCAxMSkKKyNkZWZpbmUgTUU0MDAwX0FPX0RJU0FCTEVfRE8gICAgICAgICAgX0lPICAoTUU0MDAwX01BR0lDLCAxMikKKyNkZWZpbmUgTUU0MDAwX0FPX0ZTTV9TVEFURSAgICAgICAgICAgX0lPUiAoTUU0MDAwX01BR0lDLCAxMywgaW50KQorCisjZGVmaW5lIE1FNDAwMF9BSV9TSU5HTEUgICAgICAgICAgICAgIF9JT1IgKE1FNDAwMF9NQUdJQywgMTQsIG1lNDAwMF9haV9zaW5nbGVfdCkKKyNkZWZpbmUgTUU0MDAwX0FJX1NUQVJUICAgICAgICAgICAgICAgX0lPVyAoTUU0MDAwX01BR0lDLCAxNSwgdW5zaWduZWQgbG9uZykKKyNkZWZpbmUgTUU0MDAwX0FJX1NUT1AgICAgICAgICAgICAgICAgX0lPICAoTUU0MDAwX01BR0lDLCAxNikKKyNkZWZpbmUgTUU0MDAwX0FJX0lNTUVESUFURV9TVE9QICAgICAgX0lPICAoTUU0MDAwX01BR0lDLCAxNykKKyNkZWZpbmUgTUU0MDAwX0FJX0VYX1RSSUdfRU5BQkxFICAgICAgX0lPICAoTUU0MDAwX01BR0lDLCAxOCkKKyNkZWZpbmUgTUU0MDAwX0FJX0VYX1RSSUdfRElTQUJMRSAgICAgX0lPICAoTUU0MDAwX01BR0lDLCAxOSkKKyNkZWZpbmUgTUU0MDAwX0FJX0VYX1RSSUdfU0VUVVAgICAgICAgX0lPVyAoTUU0MDAwX01BR0lDLCAyMCwgbWU0MDAwX2FpX3RyaWdnZXJfdCkKKyNkZWZpbmUgTUU0MDAwX0FJX0NPTkZJRyAgICAgICAgICAgICAgX0lPVyAoTUU0MDAwX01BR0lDLCAyMSwgbWU0MDAwX2FpX2NvbmZpZ190KQorI2RlZmluZSBNRTQwMDBfQUlfU0NfU0VUVVAgICAgICAgICAgICBfSU9XIChNRTQwMDBfTUFHSUMsIDIyLCBtZTQwMDBfYWlfc2NfdCkKKyNkZWZpbmUgTUU0MDAwX0FJX0ZTTV9TVEFURSAgICAgICAgICAgX0lPUiAoTUU0MDAwX01BR0lDLCAyMywgaW50KQorCisjZGVmaW5lIE1FNDAwMF9ESU9fQ09ORklHICAgICAgICAgICAgIF9JT1cgKE1FNDAwMF9NQUdJQywgMjQsIG1lNDAwMF9kaW9fY29uZmlnX3QpCisjZGVmaW5lIE1FNDAwMF9ESU9fR0VUX0JZVEUgICAgICAgICAgIF9JT1IgKE1FNDAwMF9NQUdJQywgMjUsIG1lNDAwMF9kaW9fYnl0ZV90KQorI2RlZmluZSBNRTQwMDBfRElPX1NFVF9CWVRFICAgICAgICAgICBfSU9XIChNRTQwMDBfTUFHSUMsIDI2LCBtZTQwMDBfZGlvX2J5dGVfdCkKKyNkZWZpbmUgTUU0MDAwX0RJT19SRVNFVCAgICAgICAgICAgICAgX0lPICAoTUU0MDAwX01BR0lDLCAyNykKKworI2RlZmluZSBNRTQwMDBfQ05UX1JFQUQgICAgICAgICAgICAgICBfSU9SIChNRTQwMDBfTUFHSUMsIDI4LCBtZTQwMDBfY250X3QpCisjZGVmaW5lIE1FNDAwMF9DTlRfV1JJVEUgICAgICAgICAgICAgIF9JT1cgKE1FNDAwMF9NQUdJQywgMjksIG1lNDAwMF9jbnRfdCkKKyNkZWZpbmUgTUU0MDAwX0NOVF9DT05GSUcgICAgICAgICAgICAgX0lPVyAoTUU0MDAwX01BR0lDLCAzMCwgbWU0MDAwX2NudF9jb25maWdfdCkKKyNkZWZpbmUgTUU0MDAwX0NOVF9SRVNFVCAgICAgICAgICAgICAgX0lPICAoTUU0MDAwX01BR0lDLCAzMSkKKworI2RlZmluZSBNRTQwMDBfRVhUX0lOVF9ESVNBQkxFICAgICAgICBfSU8gIChNRTQwMDBfTUFHSUMsIDMyKQorI2RlZmluZSBNRTQwMDBfRVhUX0lOVF9FTkFCTEUgICAgICAgICBfSU8gIChNRTQwMDBfTUFHSUMsIDMzKQorI2RlZmluZSBNRTQwMDBfRVhUX0lOVF9DT1VOVCAgICAgICAgICBfSU9SIChNRTQwMDBfTUFHSUMsIDM0LCBpbnQpCisKKyNkZWZpbmUgTUU0MDAwX0FJX09GRlNFVF9FTkFCTEUgICAgICAgX0lPICAoTUU0MDAwX01BR0lDLCAzNSkKKyNkZWZpbmUgTUU0MDAwX0FJX09GRlNFVF9ESVNBQkxFICAgICAgX0lPICAoTUU0MDAwX01BR0lDLCAzNikKKyNkZWZpbmUgTUU0MDAwX0FJX0ZVTExTQ0FMRV9FTkFCTEUgICAgX0lPICAoTUU0MDAwX01BR0lDLCAzNykKKyNkZWZpbmUgTUU0MDAwX0FJX0ZVTExTQ0FMRV9ESVNBQkxFICAgX0lPICAoTUU0MDAwX01BR0lDLCAzOCkKKworI2RlZmluZSBNRTQwMDBfQUlfRUVQUk9NX1JFQUQgICAgICAgICBfSU9SIChNRTQwMDBfTUFHSUMsIDM5LCBtZTQwMDBfZWVwcm9tX3QpCisjZGVmaW5lIE1FNDAwMF9BSV9FRVBST01fV1JJVEUgICAgICAgIF9JT1cgKE1FNDAwMF9NQUdJQywgNDAsIG1lNDAwMF9lZXByb21fdCkKKworI2RlZmluZSBNRTQwMDBfQU9fU0lNVUxUQU5FT1VTX0VYX1RSSUcgX0lPICAoTUU0MDAwX01BR0lDLCA0MSkKKyNkZWZpbmUgTUU0MDAwX0FPX1NJTVVMVEFORU9VU19TVyAgICAgIF9JTyAgKE1FNDAwMF9NQUdJQywgNDIpCisjZGVmaW5lIE1FNDAwMF9BT19TSU1VTFRBTkVPVVNfRElTQUJMRSBfSU8gIChNRTQwMDBfTUFHSUMsIDQzKQorI2RlZmluZSBNRTQwMDBfQU9fU0lNVUxUQU5FT1VTX1VQREFURSAgX0lPVyAoTUU0MDAwX01BR0lDLCA0NCwgbWU0MDAwX2FvX2NoYW5uZWxfbGlzdF90KQorCisjZGVmaW5lIE1FNDAwMF9BT19TWU5DSFJPTk9VU19FWF9UUklHICBfSU8gIChNRTQwMDBfTUFHSUMsIDQ1KQorI2RlZmluZSBNRTQwMDBfQU9fU1lOQ0hST05PVVNfU1cgICAgICAgX0lPICAoTUU0MDAwX01BR0lDLCA0NikKKyNkZWZpbmUgTUU0MDAwX0FPX1NZTkNIUk9OT1VTX0RJU0FCTEUgIF9JTyAgKE1FNDAwMF9NQUdJQywgNDcpCisKKyNkZWZpbmUgTUU0MDAwX0FPX0VYX1RSSUdfVElNRU9VVCAgICAgIF9JT1cgKE1FNDAwMF9NQUdJQywgNDgsIHVuc2lnbmVkIGxvbmcpCisjZGVmaW5lIE1FNDAwMF9BT19HRVRfRlJFRV9CVUZGRVIgICAgICBfSU9SIChNRTQwMDBfTUFHSUMsIDQ5LCB1bnNpZ25lZCBsb25nKQorCisjZGVmaW5lIE1FNDAwMF9BSV9HRVRfQ09VTlRfQlVGRkVSICAgICBfSU9SIChNRTQwMDBfTUFHSUMsIDUwLCB1bnNpZ25lZCBsb25nKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9tZTQwMDAvbWU0MDAwX2Zpcm13YXJlLmggYi9kcml2ZXJzL3N0YWdpbmcvbWU0MDAwL21lNDAwMF9maXJtd2FyZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg3YzIzZjYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvbWU0MDAwL21lNDAwMF9maXJtd2FyZS5oCkBAIC0wLDAgKzEsMTAwMzMgQEAKKy8qCisgICBUaGlzIGZpbGUgaXMgY29weXJpZ2h0IGJ5IE1laWxoYXVzIEVsZWN0cm9uaWMgR21iSCAyMDAzLgorICAgWW91IGFyZSBub3QgYWxsb3dlZCB0byBkaXN0cmlidXRlLCBzZWxsLCBtb2RpZnksIHJldmVyc2UgZW5naW5lZXIgb3IgdXNlIHRoaXMKKyAgIGNvZGUgKG9yIHBhcnRzIG9mIGl0KSBmb3IgYW55IG90aGVyIHB1cnBvc2Ugb3IgdW5kZXIgYW55IG90aGVyIGNvbmRpdGlvbnMKKyAgIHRoYW4gc3RhdGVkIGJlbG93LgorCisgICAxKSBZb3UgYXJlIGFsbG93ZWQgdG8gZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMgb2YgdGhpcyBmaWxlIHRvZ2V0aGVyCisgICB3aXRoIGRldmljZSBkcml2ZXJzIGZvciB0aGUgTWVpbGhhdXMgTUUtNDAwMCwgYm9hcmQgZmFtaWx5LgorCisgICAyKSBEZXJpdmVkIHdvcmsgKGRldmljZSBkcml2ZXJzIHVzaW5nIHRoaXMgZmlsZSkgY2FuIGJlIHB1Ymxpc2hlZCB1bmRlcgorICAgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLiBBbnkgb3RoZXIgbGljZW5zZSB0ZXJtcyBoYXZlCisgICB0byBiZSBhZ3JlZWQgYnkgTWVpbGhhdXMgR21iSCBpbiB3cml0dGVuLgorCisgICAyKSBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7CisgICB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCisgICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gTWVpbGhhdXMgaXMgdW5kZXIKKyAgIG5vIG1lYW5zIGxpYWJsZSBmb3IgcHJvZHVjdHMgdXNpbmcgdGhpcyBmaWxlIG9yIHBhcnRzIG9mIGl0LgorCisgICAzKSBUaGUgY29weXJpZ2h0IG9mIHRoaXMgZmlsZSBoYXMgdG8gYmUgbWVudGlvbmVkIGluIGRlcml2ZWQgd29yay4KKworICAgNCkgSWYgdGhpcyBsaWNlbnNlIHRlcm1zIGFyZSBub3QgdmFsaWQgZHVlIHRvIGFueSBvdGhlciBsYXcKKyAgIG9yIHJlc3RyaWN0aW9ucyBpbXBvc2VkIG9uIHlvdSwgeW91IGFyZSBub3QgYWxsb3dlZCB0byB1c2UKKyAgIHRoaXMgZmlsZSBpbiBhbnkgd2F5IGF0IGFsbC4KKyAqLworCisvKiBWZXJzaW9uIDE4IG9mIHN0YW5kYXJkIGZpcm13YXJlICovCitzdGF0aWMgdW5zaWduZWQgY2hhciB4aWxpbnhfZmlybVtdID0geworMHgwMCwgMHgwMSwgMHhmYiwgMHhkYywgMHgwMSwgMHgwMSwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwOSwgMHgwNCwgMHgwMiwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4NTUsIDB4OTksIDB4QUEsIDB4NjYsIDB4MEMsIDB4MDAsCisweDAxLCAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweEUwLCAweDBDLCAweDgwLCAweDA2LCAweDgwLCAweDAwLCAweDAwLCAweDAwLAorMHhGMCwgMHgwQywgMHg4MCwgMHgwNCwgMHg4MCwgMHgwMCwgMHgwMSwgMHhGQywgMHhCNCwgMHgwQywgMHgwMCwgMHgwMywgMHg4MCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MEMsIDB4MDAsIDB4MDEsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OTAsIDB4MEMsCisweDAwLCAweDA0LCAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBDLCAweDAwLCAweDAxLCAweDgwLCAweDAwLCAweDAwLAorMHgwMCwgMHg4MCwgMHgwQywgMHgwMCwgMHgwMiwgMHgwMCwgMHgwQSwgMHgwMCwgMHg2RSwgMHgwRCwgMHgwMSwgMHg0OSwgMHgwNCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDgwLCAweDAwLCAweDIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ4LCAweDA0LCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwKKzB4MDAsIDB4MjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRBLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHgwMSwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4NDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDIwLCAweDA5LCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweEZFLCAweDRCLCAweDAyLCAweDNFLCAweDAwLCAweEVBLCAweDAwLCAweEE4LCAweDAwLCAweEEwLAorMHgwQSwgMHg4MCwgMHgyQSwgMHgwMCwgMHhBRSwgMHgwMCwgMHhCOCwgMHgwMiwgMHhBMCwgMHgwMiwgMHg4MCwgMHgyOCwgMHgwMCwKKzB4QUEsIDB4MDAsIDB4QjgsIDB4MDIsIDB4NjAsIDB4MDIsIDB4ODAsIDB4MEIsIDB4MDAsIDB4MjYsIDB4MDAsIDB4QjgsIDB4MDAsCisweEUwLCAweDAyLCAweDgwLCAweDBCLCAweDAwLCAweDJFLCAweDAwLCAweEI4LCAweDAwLCAweEUwLCAweDAyLCAweDgwLCAweDBCLAorMHgwMCwgMHhBRSwgMHgwMCwgMHhCOCwgMHgwMiwgMHg4MCwgMHgwQSwgMHhGQywgMHgyMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDMsIDB4QTAsIDB4NUIsIDB4MDAsIDB4RjMsIDB4MDQsIDB4Q0MsIDB4MDEsIDB4RjIsIDB4OTYsIDB4QzIsCisweERGLCAweDMwLCAweEJCLCAweDQzLCAweEQwLCAweDczLCAweEIwLCAweDhGLCAweEMwLCAweDNELCAweDAyLCAweEZCLCAweDQ4LAorMHhGQywgMHgxMywgMHgzMCwgMHgxMywgMHhDMCwgMHg0RiwgMHgwMiwgMHgzRiwgMHgwMSwgMHhEQywgMHgxMywgMHhCMCwgMHg0RiwKKzB4QzAsIDB4NEYsIDB4MDAsIDB4M0IsIDB4QzksIDB4Q0MsIDB4MDQsIDB4RjIsIDB4MTMsIDB4QzAsIDB4RkMsIDB4MDAsIDB4RkIsCisweEM5LCAweDhDLCAweDI3LCAweDMwLCAweDAzLCAweEMwLCAweDBGLCAweDAwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMSwgMHgwOCwgMHg1NywgMHg0MCwgMHhFMSwgMHgwOCwgMHg0NCwgMHgwMywgMHhEMCwgMHgwOSwgMHg0MCwgMHgxMywKKzB4MDEsIDB4RDEsIDB4MDQsIDB4QzQsIDB4MUIsIDB4MTAsIDB4NkQsIDB4NDAsIDB4M0MsIDB4MDIsIDB4REQsIDB4MDYsIDB4RjQsCisweDBGLCAweDEwLCAweDExLCAweDQwLCAweDI3LCAweDExLCAweDU3LCAweDgxLCAweEM0LCAweDBGLCAweEQwLCAweEJGLCAweDQwLAorMHg2NCwgMHgwMCwgMHg1MSwgMHgwNCwgMHg0NCwgMHgwNCwgMHhEMCwgMHgxMSwgMHg1MCwgMHgzNCwgMHgwMCwgMHhEMSwgMHgwMCwKKzB4NTQsIDB4MTEsIDB4MTQsIDB4MTksIDB4NDAsIDB4MTcsIDB4MjAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDExLCAweDAwLCAweDM3LCAweDAwLCAweEMxLCAweDAwLCAweDA0LCAweDAwLCAweEQ4LCAweDQ4LCAweDQ0LCAweDIxLCAweDAwLAorMHhDOSwgMHgwMCwgMHgxNCwgMHgwMywgMHhEMCwgMHhDQywgMHg2NCwgMHgzMywgMHgxMSwgMHhDRCwgMHgwNiwgMHgzNCwgMHgyMywKKzB4NTAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDEsIDB4OEQsIDB4MDAsIDB4MDQsIDB4MjMsIDB4RDAsIDB4MEMsIDB4NDIsIDB4MDEsCisweDAwLCAweEMxLCAweDAwLCAweDE0LCAweDAwLCAweEQwLCAweDAwLCAweDQ0LCAweDMwLCAweDA5LCAweENELCAweDQ0LCAweDQ0LAorMHgxMiwgMHgxMCwgMHgwMCwgMHg0NCwgMHg0NywgMHg4OCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywKKzB4QTgsIDB4QjUsIDB4MDEsIDB4RDEsIDB4MDAsIDB4NDQsIDB4MEEsIDB4RDgsIDB4MDksIDB4NDAsIDB4MjcsIDB4MDAsIDB4RDEsCisweDQwLCAweDQ0LCAweDAzLCAweDUwLCAweDBELCAweDYwLCAweDM2LCAweDAwLCAweERELCAweDAwLCAweDc0LCAweDAzLCAweDUwLAorMHgwMSwgMHg0MCwgMHgyNywgMHgxMCwgMHhENSwgMHgwMCwgMHg0NCwgMHgwMywgMHhDQSwgMHgwRCwgMHg0MCwgMHg2NSwgMHgwMCwKKzB4QzEsIDB4MDAsIDB4NDQsIDB4QzYsIDB4RDAsIDB4MTksIDB4NDAsIDB4MzAsIDB4MDAsIDB4RDEsIDB4MDAsIDB4NTQsIDB4MDksCisweDE0LCAweDExLCAweDQwLCAweDFGLCAweDIwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweEE4LAorMHhFMywgMHgwMCwgMHhEMywgMHgwMCwgMHg0QywgMHgwQSwgMHhGMCwgMHgwRCwgMHhDNCwgMHhGNywgMHgwMCwgMHg5QiwgMHg0MCwKKzB4NUMsIDB4MDMsIDB4RjIsIDB4MEQsIDB4QzYsIDB4MzcsIDB4MTAsIDB4REIsIDB4MDAsIDB4NzQsIDB4MDMsIDB4NzAsIDB4QTEsCisweDgxLCAweDM3LCAweDAwLCAweENGLCAweDAzLCAweDRDLCAweDAzLCAweEYwLCAweDBELCAweEMwLCAweEM3LCAweDAxLCAweDkzLAorMHgwMCwgMHg1RCwgMHgwQywgMHhGMCwgMHgzMSwgMHhDMCwgMHgzNCwgMHgwMCwgMHg1RiwgMHhDMCwgMHgwQywgMHgwNywgMHgzMCwKKzB4NzEsIDB4ODAsIDB4MDMsIDB4MjAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4ODAsIDB4M0QsCisweDA4LCAweEZGLCAweDAwLCAweEZDLCAweDAzLCAweEYwLCAweDBCLCAweEMwLCAweEZGLCAweDE4LCAweEZGLCAweDA0LCAweEFDLAorMHgwMywgMHhCMSwgMHgwRCwgMHhDOCwgMHgzRCwgMHgwMCwgMHhGRiwgMHg4MCwgMHg3QywgMHgwMywgMHhCNCwgMHgxMywgMHhDQSwKKzB4RkYsIDB4MDAsIDB4RjcsIDB4MDMsIDB4RTQsIDB4NDMsIDB4RjAsIDB4MEUsIDB4QzEsIDB4MEUsIDB4MDAsIDB4RkYsIDB4MDAsCisweEZDLCAweDQwLCAweEYwLCAweDBCLCAweEUyLCAweDNGLCAweDAwLCAweEZGLCAweDgzLCAweEZELCAweDI1LCAweEYwLCAweDBCLAorMHhDMCwgMHgxRSwgMHgwMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHgwOCwgMHgyNSwgMHgwMCwKKzB4RDMsIDB4MDAsIDB4NEMsIDB4MEEsIDB4MzAsIDB4MEQsIDB4QzAsIDB4QTQsIDB4MDAsIDB4RDcsIDB4MDAsIDB4NUMsIDB4MDMsCisweEYwLCAweDBELCAweEMwLCAweDM1LCAweDAwLCAweEQ3LCAweDAwLCAweDBDLCAweDAzLCAweDMwLCAweDQxLCAweEM0LCAweDM1LAorMHgwMCwgMHhEMywgMHgwMiwgMHg1QywgMHgwMywgMHhGMCwgMHgwRCwgMHhDMCwgMHgwNSwgMHgwMCwgMHhERiwgMHgwMCwgMHg3QywKKzB4MEUsIDB4MzAsIDB4MDEsIDB4QzEsIDB4MzcsIDB4MTAsIDB4RDcsIDB4MDQsIDB4NEMsIDB4MEIsIDB4MzAsIDB4MjEsIDB4QzAsCisweDBCLCAweDIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEzLCAweEEwLCAweEY0LCAweDAxLCAweEY1LAorMHgwMCwgMHg0NCwgMHgyRSwgMHgxMCwgMHgwOSwgMHg0MCwgMHgyNSwgMHgwMCwgMHhEMSwgMHgwMCwgMHhDNCwgMHgwMywgMHgxMCwKKzB4MEYsIDB4QzAsIDB4M0UsIDB4MDAsIDB4RjEsIDB4MDAsIDB4RUMsIDB4MDMsIDB4MTAsIDB4MTEsIDB4QzAsIDB4MzUsIDB4MDAsCisweEQxLCAweDAxLCAweERDLCAweDA3LCAweDcwLCAweDJGLCAweEMzLCAweDIzLCAweDA2LCAweERELCAweDIwLCAweDY0LCAweDAyLAorMHhCMCwgMHgzOCwgMHg0MSwgMHgzNywgMHgwMCwgMHhEMSwgMHgwMywgMHg2QywgMHgyOSwgMHg1MCwgMHhBOSwgMHg0MCwgMHg0RSwKKzB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4QTAsIDB4MjIsIDB4MDEsIDB4RDEsIDB4MDAsCisweDA0LCAweDI5LCAweDkwLCAweDA0LCAweDQwLCAweDI0LCAweDAwLCAweEQ1LCAweDAwLCAweDM0LCAweDAzLCAweDUwLCAweDBELAorMHg0MCwgMHgzMywgMHgwMCwgMHhDRCwgMHgwMCwgMHgwNCwgMHgwMywgMHg1RCwgMHgwMCwgMHg0MCwgMHgxMiwgMHgyMCwgMHgwMSwKKzB4MDQsIDB4MTAsIDB4MEIsIDB4RDAsIDB4MUMsIDB4NDIsIDB4MjEsIDB4ODAsIDB4MEQsIDB4NDAsIDB4MzQsIDB4MDgsIDB4OTAsCisweDMwLCAweDQwLCAweDMxLCAweDEwLCAweEQ1LCAweDAzLCAweDA0LCAweDA1LCAweDE4LCAweDE4LCAweDQ0LCAweDFGLCAweDAwLAorMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHg4MCwgMHg2OCwgMHgwMCwgMHhFNSwgMHgwMSwgMHg4NCwKKzB4MDcsIDB4OTgsIDB4MUIsIDB4NDAsIDB4NjksIDB4ODAsIDB4RTEsIDB4ODEsIDB4MjQsIDB4MDcsIDB4MTAsIDB4OUUsIDB4NDAsCisweDc4LCAweDgwLCAweEVELCAweDAxLCAweEE0LCAweDA3LCAweDUwLCAweDUyLCAweDYxLCAweDc5LCAweDAwLCAweDIxLCAweDE5LAorMHg5MCwgMHgwNywgMHg1MSwgMHgxQywgMHg0MCwgMHg2QSwgMHgwMCwgMHg2RCwgMHg0MSwgMHhBNCwgMHgwNiwgMHhEMiwgMHgxMiwKKzB4NDAsIDB4N0IsIDB4MDAsIDB4RjEsIDB4MDksIDB4RTQsIDB4NDUsIDB4NTQsIDB4MUEsIDB4NDAsIDB4MTIsIDB4MDAsIDB4MDIsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDEwLCAweDIwLCAweDAyLCAweEMzLCAweDg4LCAweDQ0LCAweDAyLAorMHhCMCwgMHg4OCwgMHg0MCwgMHgyMCwgMHgwMCwgMHhENywgMHgwOCwgMHgzNCwgMHgwMywgMHg3MCwgMHgwQywgMHg0MCwgMHgzNywKKzB4MDIsIDB4REQsIDB4MDAsIDB4MDQsIDB4MDMsIDB4NzEsIDB4MTAsIDB4QzAsIDB4MTYsIDB4MDIsIDB4MDEsIDB4ODAsIDB4MUMsCisweEMzLCAweEYwLCAweDBDLCAweDQwLCAweDIxLCAweDAwLCAweENGLCAweDA5LCAweDNDLCAweDkxLCAweEIwLCAweDg4LCAweEMwLAorMHgzNywgMHgwMCwgMHhDNywgMHgxMCwgMHgwQywgMHgxMSwgMHgzOCwgMHg4NCwgMHhDMSwgMHg0QiwgMHg0MCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4QjAsIDB4MkQsIDB4MDAsIDB4RkYsIDB4MDIsIDB4RkMsIDB4MDIsIDB4NjAsCisweDBCLCAweEMwLCAweDJGLCAweDAwLCAweEZGLCAweDAwLCAweERDLCAweDQzLCAweDcwLCAweDBGLCAweEMwLCAweDNGLCAweDA0LAorMHhGMywgMHgwMCwgMHhGQywgMHgwQiwgMHhCMCwgMHgwMiwgMHhDMCwgMHgzRiwgMHg0OCwgMHhGRiwgMHgwMCwgMHg3QywgMHgyQiwKKzB4RjAsIDB4OEYsIDB4QzAsIDB4MkYsIDB4MDAsIDB4RkYsIDB4MjAsIDB4M0MsIDB4MDMsIDB4OTAsIDB4MDksIDB4QzAsIDB4M0YsCisweDAwLCAweEVFLCAweDIwLCAweDdDLCAweDAxLCAweEQ0LCAweDAxLCAweEMwLCAweDBCLCAweDYwLCAweDA2LCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwgMHhBMCwgMHgyNywgMHgwMCwgMHhERiwgMHgwRSwgMHg3QywgMHgwMCwgMHhDMCwgMHgwRCwKKzB4QzAsIDB4NzUsIDB4MDAsIDB4RDMsIDB4MDAsIDB4N0MsIDB4NTMsIDB4NzAsIDB4OEQsIDB4QzYsIDB4QjQsIDB4MDQsIDB4REYsCisweDAwLCAweDdDLCAweDEzLCAweEIwLCAweDAwLCAweEMwLCAweDM0LCAweDEwLCAweDA3LCAweDgwLCAweDVDLCAweDEzLCAweDMwLAorMHg1QywgMHhDMSwgMHgwNCwgMHgwMCwgMHg5RiwgMHg0MCwgMHg3QywgMHgwMywgMHhGMCwgMHgwOSwgMHhDMCwgMHgzNywgMHgwMCwKKzB4NUYsIDB4MDAsIDB4NEMsIDB4MDEsIDB4MzAsIDB4MDksIDB4QzAsIDB4NDcsIDB4MDAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDEyLCAweDg4LCAweDI5LCAweDAwLCAweEVELCAweDA0LCAweEI0LCAweDAzLCAweEQwLCAweDBBLCAweDQwLAorMHgzQiwgMHgwMCwgMHhFMSwgMHgwMCwgMHhCNCwgMHgxMywgMHhEMCwgMHg0RiwgMHg0MCwgMHgzQSwgMHgxMSwgMHhFRCwgMHgwMCwKKzB4QjQsIDB4MDMsIDB4RDAsIDB4MDIsIDB4NDAsIDB4MzksIDB4MDAsIDB4QUQsIDB4MDAsIDB4MDQsIDB4MDMsIDB4MTAsIDB4MkUsCisweDQwLCAweDA4LCAweDA4LCAweEVELCAweDAwLCAweEI0LCAweDAzLCAweEQwLCAweDBBLCAweDQwLCAweDNCLCAweDAwLCAweEVELAorMHgyMCwgMHhDNCwgMHgwMSwgMHgxMCwgMHgwQSwgMHg0MCwgMHg0QiwgMHgyMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDMsIDB4MDAsIDB4NjksIDB4MDAsIDB4RUQsIDB4MDEsIDB4QjQsIDB4MDYsIDB4OTAsIDB4M0UsIDB4NEMsIDB4NkYsCisweDEwLCAweEUxLCAweDAxLCAweEI0LCAweDE3LCAweEQwLCAweDBFLCAweDQwLCAweDdBLCAweDAwLCAweEVELCAweDBELCAweDk0LAorMHgyNywgMHhEMCwgMHgxMywgMHg0MSwgMHg3QSwgMHg4MCwgMHg2RCwgMHgwMSwgMHg5NCwgMHgzNywgMHg1MSwgMHg1RSwgMHg0MCwKKzB4NkEsIDB4MDQsIDB4RUQsIDB4MDEsIDB4QjQsIDB4MDcsIDB4RDEsIDB4MUEsIDB4NDgsIDB4N0IsIDB4ODAsIDB4QUQsIDB4MDEsCisweDg0LCAweDA1LCAweDE0LCAweDFFLCAweDQyLCAweDBGLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgxMiwgMHgyOCwgMHgyMywgMHg4NCwgMHhDRCwgMHgwMCwgMHgzNCwgMHgyRSwgMHhEMCwgMHgwOCwgMHg0MCwgMHgyMywgMHg0OSwKKzB4QzEsIDB4MDAsIDB4MzQsIDB4MDMsIDB4RDAsIDB4MEMsIDB4NDAsIDB4MzIsIDB4MDAsIDB4Q0QsIDB4MDAsIDB4MzYsIDB4MDMsCisweEQwLCAweDBDLCAweDQwLCAweDMzLCAweDExLCAweENELCAweDAzLCAweDA0LCAweDAzLCAweDUwLCAweDBDLCAweDQwLCAweDcwLAorMHgwMCwgMHhDRCwgMHgwMCwgMHgzNCwgMHg2RiwgMHhEMiwgMHgwQywgMHg0MCwgMHgzMywgMHgwMCwgMHg4RCwgMHg0NCwgMHgwNSwKKzB4MjEsIDB4MTQsIDB4MUMsIDB4NDAsIDB4NEIsIDB4MjAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTcsCisweEE4LCAweEQ5LCAweDAwLCAweDVGLCAweDAwLCAweEZDLCAweDAxLCAweEIwLCAweDA3LCAweEM0LCAweERGLCAweDAxLCAweDUzLAorMHgwMCwgMHg3QywgMHgwMSwgMHg3OCwgMHgwNSwgMHhDMCwgMHgxNCwgMHgwMCwgMHg1RiwgMHgwMCwgMHg3QywgMHgwMSwgMHhCMCwKKzB4MTcsIDB4QzAsIDB4OUUsIDB4MDEsIDB4N0YsIDB4MEUsIDB4NUMsIDB4MDEsIDB4NzQsIDB4MDUsIDB4QzgsIDB4MUUsIDB4MDAsCisweDdGLCAweDAyLCAweEZDLCAweDBELCAweEUwLCAweDA3LCAweEMwLCAweDE3LCAweDIwLCAweDdGLCAweDA3LCAweENDLCAweDA1LAorMHgxMCwgMHgwNywgMHhDMSwgMHg1RiwgMHgyMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHgwMCwKKzB4MDcsIDB4MDIsIDB4MUYsIDB4MDAsIDB4M0MsIDB4NDAsIDB4RjAsIDB4NDEsIDB4QzAsIDB4MDcsIDB4MDAsIDB4MUYsIDB4NjAsCisweDdDLCAweDAwLCAweEYwLCAweDAxLCAweEMwLCAweDA1LCAweDAwLCAweDFGLCAweDAwLCAweDdDLCAweDAwLCAweEYwLCAweDAxLAorMHhDMSwgMHgwNSwgMHgxMCwgMHgxRiwgMHgwMCwgMHg3QywgMHg4MCwgMHg5MSwgMHgwMSwgMHhEMCwgMHg4NywgMHgwMSwgMHgxRiwKKzB4MzAsIDB4NzAsIDB4MDgsIDB4RjAsIDB4NDEsIDB4QzAsIDB4MDcsIDB4MTgsIDB4MUYsIDB4NDAsIDB4N0QsIDB4MDAsIDB4RjAsCisweDExLCAweEMwLCAweDRCLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDI3LAorMHgwMSwgMHg5QiwgMHgwMCwgMHg0RCwgMHgwMiwgMHgzMCwgMHgwOSwgMHhDMCwgMHgyNSwgMHgwMCwgMHg5RiwgMHgwMCwgMHg3NCwKKzB4MDIsIDB4RjAsIDB4MDksIDB4QzAsIDB4MjMsIDB4NDAsIDB4OTMsIDB4MDAsIDB4N0MsIDB4MDYsIDB4RjAsIDB4MDksIDB4QzAsCisweDI0LCAweDAwLCAweDlGLCAweDAwLCAweDQ0LCAweDAyLCAweDcwLCAweDA5LCAweEM0LCAweDY3LCAweDAyLCAweDlELCAweDAwLAorMHg0QywgMHgxNiwgMHhGMCwgMHgxOSwgMHhDMCwgMHgyNywgMHg4MCwgMHg5RiwgMHgwMywgMHg0QywgMHgyMiwgMHgzNCwgMHgwOCwKKzB4QzAsIDB4NDAsIDB4MjAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MjAsIDB4NjYsIDB4MDAsCisweDk1LCAweDAwLCAweDQ0LCAweDAyLCAweDEwLCAweDA5LCAweDQwLCAweDI0LCAweDAwLCAweDlELCAweDAwLCAweDc0LCAweDAyLAorMHhEMCwgMHgwOSwgMHg0MCwgMHgyNywgMHgwMCwgMHg5MSwgMHgwMCwgMHg3NCwgMHgwNiwgMHhGMCwgMHhCOCwgMHg0MCwgMHgyNCwKKzB4MDAsIDB4OEQsIDB4MDgsIDB4MDEsIDB4MDYsIDB4MzAsIDB4MjksIDB4QzAsIDB4MjcsIDB4MjEsIDB4OEQsIDB4MDAsIDB4NDQsCisweDAyLCAweEQwLCAweDA5LCAweDQwLCAweDI3LCAweDAwLCAweDhELCAweDAzLCAweDZDLCAweDFFLCAweDU0LCAweDI5LCAweDQwLAorMHgwNSwgMHg4MCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHhBMCwgMHgyNCwgMHgwMCwgMHg4MSwKKzB4MDAsIDB4NDQsIDB4MjIsIDB4MTAsIDB4MDgsIDB4NDAsIDB4MzUsIDB4MDAsIDB4OUQsIDB4MDAsIDB4NzQsIDB4MDIsIDB4RDAsCisweDA5LCAweDQwLCAweDI2LCAweDAwLCAweDk5LCAweDAwLCAweDc0LCAweDIyLCAweEQwLCAweDA5LCAweDYwLCAweDI0LCAweDgwLAorMHhERCwgMHg4MCwgMHg1NCwgMHgxMiwgMHgwMCwgMHhBOSwgMHg0MCwgMHgyNywgMHgwMCwgMHg5RCwgMHgwMCwgMHg0NCwgMHgwMiwKKzB4RDAsIDB4NEQsIDB4NDMsIDB4MjcsIDB4MDAsIDB4OTgsIDB4MTAsIDB4MDQsIDB4MDIsIDB4MTAsIDB4QTksIDB4NDAsIDB4NjAsCisweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDIwLCAweDMwLCAweDAwLCAweDg1LCAweDA0LAorMHgwNCwgMHgxQSwgMHgxNCwgMHgwOCwgMHg0MCwgMHgyMCwgMHgyMCwgMHg4RCwgMHgwOCwgMHgzNCwgMHgxMiwgMHhEMCwgMHg4OCwKKzB4NjQsIDB4MjMsIDB4MDEsIDB4ODksIDB4MDgsIDB4MzQsIDB4MTIsIDB4RDAsIDB4MDksIDB4NDAsIDB4MjAsIDB4MDIsIDB4REQsCisweDAwLCAweDE0LCAweDAyLCAweDE0LCAweDA4LCAweDQ0LCAweDIzLCAweDAwLCAweDlELCAweDA4LCAweDA0LCAweDAyLCAweEQ4LAorMHgwOCwgMHg0MiwgMHgyMywgMHgwMiwgMHg5RCwgMHgwOCwgMHgyNCwgMHgyMiwgMHgxMCwgMHg0OCwgMHg0MCwgMHg0MSwgMHg4OCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MUQsIDB4QjAsIDB4MDYsIDB4MDAsIDB4MTMsIDB4MEEsIDB4NEMsCisweDA5LCAweDMwLCAweEExLCAweEMwLCAweDg1LCAweDAyLCAweDFELCAweDAyLCAweDdDLCAweDI4LCAweEYwLCAweDYxLCAweEMxLAorMHg4NywgMHgwMiwgMHgxOSwgMHgxNiwgMHg3NCwgMHgwMCwgMHhGMCwgMHgwNSwgMHhDMCwgMHg4NCwgMHgwMCwgMHgxRiwgMHgwMCwKKzB4NUMsIDB4NTEsIDB4NzAsIDB4NDEsIDB4NDUsIDB4MDcsIDB4MTAsIDB4MUYsIDB4MDIsIDB4NEQsIDB4MDEsIDB4RjAsIDB4MDEsCisweEM0LCAweDg3LCAweDAwLCAweDBELCAweDAyLCAweDRDLCAweDg4LCAweDMwLCAweDAxLCAweEM0LCAweDc0LCAweEMwLCAweDBBLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOSwgMHhCOCwgMHgyRiwgMHgwMCwgMHg5RiwgMHgwOCwgMHhGQywgMHgwQSwKKzB4RjAsIDB4MEIsIDB4QzAsIDB4MkIsIDB4MDAsIDB4QkYsIDB4MDQsIDB4N0MsIDB4MjIsIDB4RjAsIDB4NDksIDB4QzAsIDB4MjcsCisweDAyLCAweDkzLCAweDA0LCAweDdDLCAweDIyLCAweDcwLCAweDBCLCAweEQwLCAweDJGLCAweDAxLCAweEJGLCAweDAwLCAweDZDLAorMHgwMiwgMHg3MCwgMHgwOSwgMHhDMCwgMHgyRCwgMHgxMCwgMHhCRiwgMHgwNCwgMHhGQywgMHgwMiwgMHhGMCwgMHgwQiwgMHhDMCwKKzB4MjcsIDB4MDEsIDB4QkYsIDB4ODQsIDB4RkMsIDB4MTIsIDB4RjAsIDB4OEIsIDB4QzAsIDB4NjcsIDB4NjAsIDB4MEUsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweEEwLCAweDJGLCAweDAwLCAweDkzLCAweDhDLCAweEU4LCAweDAyLCAweEYwLAorMHgwOSwgMHhDMCwgMHgyNywgMHgwMiwgMHg5MywgMHg2MCwgMHg3QywgMHg1MiwgMHgzMCwgMHhDOSwgMHhDMCwgMHgyNSwgMHgwMCwKKzB4OUIsIDB4MDAsIDB4REMsIDB4MDIsIDB4RjAsIDB4MEIsIDB4QzAsIDB4MjcsIDB4MDAsIDB4QkYsIDB4MDAsIDB4Q0MsIDB4MDIsCisweEIwLCAweDBCLCAweEMwLCAweDJCLCAweDI4LCAweDlGLCAweDQwLCAweEJDLCAweDAyLCAweEYwLCAweDBGLCAweEMwLCAweDI0LAorMHgyMCwgMHhCRiwgMHg0MCwgMHhDQywgMHgwMiwgMHgzMCwgMHgwQiwgMHhDMCwgMHg2MCwgMHgwMCwgMHgwRSwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MUMsIDB4MDgsIDB4MDcsIDB4MDAsIDB4MTEsIDB4MEMsIDB4NDQsIDB4NDksIDB4RDAsIDB4MDEsCisweDQxLCAweDA3LCAweDAwLCAweDExLCAweDE0LCAweDc0LCAweDEwLCAweDEwLCAweEMxLCAweDQ4LCAweDg0LCAweDA0LCAweDExLAorMHgxMCwgMHg0NCwgMHgyMCwgMHhEMiwgMHgwMSwgMHg0MCwgMHgwNywgMHgwMSwgMHgxRCwgMHgwMCwgMHg1MCwgMHgwOCwgMHgxNCwKKzB4MDEsIDB4NDAsIDB4MTcsIDB4MDAsIDB4MUQsIDB4MTQsIDB4NjQsIDB4MDAsIDB4RDAsIDB4MDEsIDB4NDAsIDB4MDUsIDB4MEMsCisweDVELCAweDkwLCAweDU0LCAweDAwLCAweDE0LCAweDAxLCAweDUwLCAweDcwLCAweDIwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgxMCwgMHhBMCwgMHgyNywgMHg0MCwgMHg4MSwgMHgwNCwgMHgzNCwgMHgzMiwgMHhEMCwgMHgwOCwgMHg0MCwKKzB4MjcsIDB4NDAsIDB4ODUsIDB4MDQsIDB4MzQsIDB4NTIsIDB4MTAsIDB4NDgsIDB4NDAsIDB4MjEsIDB4MDMsIDB4ODksIDB4MDgsCisweDE0LCAweDAyLCAweEQwLCAweDA4LCAweDQwLCAweDIzLCAweDA1LCAweDlELCAweDAwLCAweDA0LCAweDIyLCAweDEyLCAweDhDLAorMHg0MiwgMHgyMywgMHgwMCwgMHg4RCwgMHgwNCwgMHgzNCwgMHgwMiwgMHg1MCwgMHgwOSwgMHg0MCwgMHgyMywgMHgwMSwgMHg4RCwKKzB4MDAsIDB4NDQsIDB4MDIsIDB4MTAsIDB4MDgsIDB4NDAsIDB4NDAsIDB4ODAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDE4LCAweEE4LCAweDI1LCAweDA0LCAweDkxLCAweDAwLCAweDc0LCAweDAyLCAweEQwLCAweDY5LCAweDYwLCAweDI3LAorMHgwMCwgMHg5NSwgMHgwMCwgMHgzNCwgMHgwMiwgMHgxMCwgMHgwOSwgMHg2MCwgMHgyMSwgMHgwMCwgMHg5MSwgMHgwMCwgMHg0NCwKKzB4MDIsIDB4RDAsIDB4MjksIDB4NDAsIDB4MjcsIDB4ODAsIDB4OUMsIDB4MDIsIDB4NTQsIDB4MDIsIDB4MTAsIDB4MDksIDB4NDAsCisweDI3LCAweDAwLCAweDlELCAweDAwLCAweDY0LCAweDBBLCAweEQwLCAweDI5LCAweDQwLCAweDI3LCAweDgwLCAweDhELCAweDA4LAorMHg1NCwgMHgxMiwgMHgxMiwgMHgxOSwgMHg0MCwgMHg2MCwgMHgyMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDUsIDB4QTgsIDB4MjcsIDB4MDAsIDB4OTMsIDB4MDAsIDB4N0MsIDB4MEUsIDB4RjAsIDB4MzksIDB4RTAsIDB4MjcsIDB4MjEsCisweDk3LCAweDAwLCAweDdDLCAweDAyLCAweDMwLCAweDA5LCAweEMyLCAweDI1LCAweDAwLCAweDlCLCAweDAwLCAweDVDLCAweDAyLAorMHhGMCwgMHgyOSwgMHhDMCwgMHgyNywgMHgwMCwgMHg5RiwgMHgwMywgMHg0QywgMHgwMiwgMHhCMCwgMHgwOSwgMHhDMCwgMHg2NywKKzB4MDAsIDB4OUYsIDB4MjQsIDB4N0MsIDB4MDIsIDB4RjgsIDB4ODgsIDB4QzAsIDB4MjcsIDB4MDAsIDB4OUYsIDB4MDAsIDB4NEMsCisweDAyLCAweDMwLCAweDU5LCAweEMwLCAweDE0LCAweEEwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LAorMHgwMCwgMHgyNSwgMHgwMCwgMHg5RiwgMHgwMCwgMHg0QywgMHg1NiwgMHhGMCwgMHgxOSwgMHhDMCwgMHg2NywgMHgwMSwgMHg5QiwKKzB4MDQsIDB4N0MsIDB4MDIsIDB4RjQsIDB4MDgsIDB4Q0MsIDB4MjYsIDB4MDAsIDB4OEYsIDB4MDAsIDB4N0MsIDB4MDIsIDB4RjAsCisweDM5LCAweEMyLCAweDI3LCAweDAwLCAweDlGLCAweDAyLCAweDNDLCAweDAyLCAweEYwLCAweDA5LCAweEMwLCAweDI3LCAweDAxLAorMHg5RiwgMHgwNSwgMHg3QywgMHgyMiwgMHhGMCwgMHgxOSwgMHhDMiwgMHgyNSwgMHgwMCwgMHg5RiwgMHgwMCwgMHg3QywgMHgwMiwKKzB4RjAsIDB4MDgsIDB4QzAsIDB4NTMsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDgsCisweDA1LCAweDAwLCAweDBGLCAweDAwLCAweDVDLCAweDA4LCAweEYwLCAweDIxLCAweEMwLCAweDg1LCAweDAwLCAweDFGLCAweDAwLAorMHg3QywgMHgwMCwgMHhGMCwgMHgwMSwgMHhFMCwgMHgwNywgMHgwMCwgMHgxRiwgMHgwMCwgMHg3QywgMHgwMCwgMHhGMCwgMHgyMSwKKzB4QzEsIDB4MDcsIDB4MDAsIDB4MUIsIDB4MDYsIDB4NEMsIDB4NDAsIDB4RjAsIDB4MDEsIDB4QzEsIDB4MDQsIDB4MDEsIDB4MTMsCisweDAyLCAweDdDLCAweDAwLCAweEIwLCAweDAxLCAweEMwLCAweDA3LCAweDAwLCAweDEzLCAweDAwLCAweDRDLCAweDIwLCAweDMxLAorMHgyMSwgMHg4MCwgMHg1MCwgMHgyMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwMCwgMHgxOCwKKzB4MDAsIDB4NUQsIDB4MDAsIDB4QzAsIDB4MDUsIDB4NzAsIDB4MDUsIDB4NDAsIDB4MTAsIDB4MDAsIDB4NUMsIDB4MDAsIDB4NzQsCisweDAxLCAweEQwLCAweDA1LCAweEMwLCAweDE1LCAweDAwLCAweDVELCAweDAwLCAweDc0LCAweDQ1LCAweEQwLCAweDA3LCAweEMwLAorMHgxNSwgMHgwMCwgMHg2MSwgMHgwMCwgMHhEQywgMHg0RCwgMHg3MCwgMHgwNywgMHg0MCwgMHhERCwgMHg0MCwgMHg1MSwgMHgwMCwKKzB4RjQsIDB4M0QsIDB4MTAsIDB4NzcsIDB4NDAsIDB4MTcsIDB4NDAsIDB4NzEsIDB4MDAsIDB4ODQsIDB4MEQsIDB4RjAsIDB4QTcsCisweEMwLCAweDUyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweEEwLCAweDIyLCAweDIwLAorMHhDRCwgMHg4MCwgMHgxMCwgMHgwRiwgMHg1MCwgMHgwQywgMHg0MCwgMHgzMywgMHg4MCwgMHhDQywgMHgwMCwgMHgzNCwgMHgwMywKKzB4RDAsIDB4MEMsIDB4MDAsIDB4MzMsIDB4MDAsIDB4Q0QsIDB4MDAsIDB4MzQsIDB4MDIsIDB4RDAsIDB4QkMsIDB4NDAsIDB4MzMsCisweDAwLCAweEM5LCAweDAxLCAweDI0LCAweDA3LCAweDUwLCAweDBDLCAweDQwLCAweEYwLCAweDAwLCAweEMxLCAweDIwLCAweDM0LAorMHgwNywgMHgxMCwgMHg0QywgMHg2MCwgMHgzMywgMHg5MCwgMHhDOSwgMHgwMCwgMHgwNCwgMHg0RiwgMHgxMCwgMHgyQywgMHg0MiwKKzB4NTAsIDB4MDAsIDB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4ODAsIDB4MzgsIDB4MDAsIDB4Q0QsCisweDA0LCAweDg0LCAweDBCLCAweDUwLCAweDFFLCAweDQwLCAweDNBLCAweDAzLCAweEVELCAweDA4LCAweEI0LCAweDAzLCAweEQwLAorMHg4RSwgMHg0MCwgMHgzOSwgMHhBMSwgMHhFRCwgMHgwMCwgMHhCNCwgMHgwMiwgMHhEMCwgMHgwRSwgMHg0MCwgMHg3RCwgMHgwMCwKKzB4RkQsIDB4NDIsIDB4OTAsIDB4MDMsIDB4NTAsIDB4MTgsIDB4NDAsIDB4RkQsIDB4MTAsIDB4RTEsIDB4MDQsIDB4RjQsIDB4MDYsCisweDEwLCAweDBFLCAweDQwLCAweDdCLCAweDAwLCAweEU5LCAweDAwLCAweEM1LCAweDAxLCAweDkwLCAweDBDLCAweDYwLCAweDEyLAorMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgxMCwgMHg2OCwgMHgwMCwgMHhFRiwgMHgwNywKKzB4OTQsIDB4MDcsIDB4NzAsIDB4MUYsIDB4QzgsIDB4N0IsIDB4MDAsIDB4RUYsIDB4MDUsIDB4QjQsIDB4MEYsIDB4RjAsIDB4MUUsCisweDQwLCAweDdCLCAweDA0LCAweEVELCAweDAxLCAweEJDLCAweDA3LCAweEYyLCAweDFBLCAweEM4LCAweDdCLCAweDI0LCAweEZCLAorMHgwMSwgMHhBQywgMHg4NCwgMHg3MCwgMHgxQSwgMHhDMCwgMHg3OCwgMHgwMCwgMHhFMSwgMHgwOSwgMHhCNCwgMHgwNiwgMHgzNCwKKzB4MUUsIDB4QzQsIDB4N0YsIDB4MDgsIDB4NzksIDB4MDEsIDB4Q0MsIDB4MDYsIDB4MzIsIDB4MTYsIDB4QzAsIDB4NTAsIDB4NDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweEI4LCAweDI1LCAweDEwLCAweERGLCAweDAyLCAweDdDLAorMHgwMywgMHg3MCwgMHhFRCwgMHhDOCwgMHhCNSwgMHgyMSwgMHhERiwgMHgwMCwgMHg3QywgMHg0MywgMHhGMCwgMHgwRCwgMHhDOCwKKzB4MzcsIDB4MDIsIDB4REYsIDB4ODgsIDB4N0MsIDB4MDMsIDB4RDAsIDB4MDksIDB4QzAsIDB4MzMsIDB4MDEsIDB4OTMsIDB4ODAsCisweDdDLCAweDAxLCAweDYwLCAweDAxLCAweEMwLCAweDE3LCAweDAwLCAweERGLCAweDJBLCAweDdDLCAweDAwLCAweDYwLCAweDA5LAorMHhDMCwgMHhCNywgMHgwNiwgMHg5NywgMHgwMCwgMHg3QywgMHgwMCwgMHhGMCwgMHgwMSwgMHhDMiwgMHg0MywgMHg2MCwgMHgwNiwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4QTAsIDB4NkYsIDB4MDAsIDB4RkYsIDB4MDMsIDB4QzgsIDB4MjEsCisweEUwLCAweDNFLCAweEMyLCAweEZDLCAweDEyLCAweEZGLCAweDA5LCAweEVDLCAweDA3LCAweDMwLCAweDFGLCAweEMwLCAweDdGLAorMHgwMiwgMHhGQiwgMHgwMSwgMHhEQywgMHgyNywgMHhGMCwgMHg5RiwgMHhDMCwgMHg3RCwgMHgwNCwgMHhCMywgMHg0MSwgMHhCQywKKzB4MjcsIDB4QjAsIDB4MTMsIDB4QzAsIDB4N0YsIDB4MDAsIDB4RkYsIDB4MjEsIDB4RkMsIDB4MDYsIDB4RjAsIDB4MUYsIDB4QzAsCisweDdGLCAweDAwLCAweEZGLCAweDAxLCAweEJDLCAweDg3LCAweDMwLCAweDFGLCAweEMwLCAweDBCLCAweDAwLCAweDBFLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwgMHg4OCwgMHgzOSwgMHgxMCwgMHhGRCwgMHgwNCwgMHg4NCwgMHgwMSwgMHhGMCwKKzB4MEUsIDB4QzEsIDB4M0EsIDB4MDAsIDB4RUQsIDB4MDAsIDB4RUMsIDB4MDMsIDB4MTUsIDB4OEUsIDB4NDgsIDB4M0IsIDB4NDAsCisweEYxLCAweDAwLCAweDg0LCAweDIzLCAweEQwLCAweEE4LCAweDQwLCAweDNCLCAweDIwLCAweDIxLCAweDAwLCAweEI0LCAweDI5LAorMHgxMCwgMHg2MiwgMHg0MCwgMHgzQiwgMHgwMCwgMHhERiwgMHgwMCwgMHg4NCwgMHgwMiwgMHhGMCwgMHgwRSwgMHg0MCwgMHgzQiwKKzB4MDIsIDB4RUQsIDB4MDgsIDB4QkMsIDB4MDEsIDB4QjAsIDB4MEUsIDB4NDEsIDB4NTcsIDB4MjAsIDB4MDYsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDI5LCAweDAwLCAweEVELCAweDAwLCAweDg2LCAweDYzLCAweEQ4LCAweDBGLAorMHg0MCwgMHgzOCwgMHg4MCwgMHhGRCwgMHg0MCwgMHg4NCwgMHgyMywgMHg5MCwgMHgwRSwgMHg0MCwgMHgzMywgMHgxMCwgMHhFMSwKKzB4MDAsIDB4QjQsIDB4MjMsIDB4RDIsIDB4MjIsIDB4NjAsIDB4MzksIDB4MDAsIDB4QTUsIDB4MDAsIDB4QjQsIDB4MDAsIDB4MTIsCisweDAyLCAweDQwLCAweDJBLCAweDAwLCAweEVELCAweDEwLCAweDk0LCAweDAyLCAweEQwLCAweDA2LCAweDQwLCAweDNCLCAweDAwLAorMHg2RCwgMHgwMCwgMHhGNCwgMHgwMiwgMHgxMCwgMHgwNiwgMHg0MCwgMHgwMywgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDYsIDB4MjgsIDB4MjMsIDB4MDAsIDB4Q0QsIDB4MDAsIDB4MDQsIDB4MDYsIDB4NTgsIDB4M0MsIDB4NDAsCisweDMyLCAweDAwLCAweENELCAweDA4LCAweDI0LCAweDAzLCAweDkwLCAweDBDLCAweDQyLCAweDMzLCAweDIwLCAweEMxLCAweDAwLAorMHgxNiwgMHgwMywgMHhEMCwgMHgwMCwgMHg0MCwgMHhCMywgMHgwMCwgMHgwNSwgMHgwQiwgMHgzNiwgMHgwMSwgMHgxMCwgMHgwMCwKKzB4NDAsIDB4MDMsIDB4MTAsIDB4Q0QsIDB4NDAsIDB4MDQsIDB4MTAsIDB4NTEsIDB4MDAsIDB4NDAsIDB4MzMsIDB4MDAsIDB4OUQsCisweDEyLCAweDE0LCAweEFGLCAweDkwLCAweDUwLCAweDAwLCAweDFCLCAweDIwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgxNSwgMHhBOCwgMHgyNSwgMHgwMSwgMHhGRiwgMHgwMCwgMHg0RCwgMHgyMiwgMHhEMCwgMHgzRiwgMHhDMCwgMHgzQywKKzB4MDAsIDB4RkYsIDB4MDAsIDB4Q0MsIDB4MDMsIDB4QjAsIDB4MEYsIDB4QzAsIDB4M0YsIDB4MDAsIDB4RjMsIDB4MDAsIDB4MUMsCisweDAyLCAweEYwLCAweDI1LCAweEMwLCAweEJELCAweDAyLCAweDU3LCAweDBCLCAweDdDLCAweDAzLCAweDExLCAweDA5LCAweEMwLAorMHhGNywgMHgwMiwgMHhFRiwgMHgwMCwgMHg1QywgMHgwQSwgMHhEMCwgMHg5RCwgMHg0MCwgMHgzRiwgMHgwMCwgMHg5RiwgMHgwMiwKKzB4NzAsIDB4MDMsIDB4MTAsIDB4MjEsIDB4QzAsIDB4NTcsIDB4MjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAxLCAweDAwLCAweDM3LCAweDAwLCAweERGLCAweDAwLCAweDdDLCAweDBBLCAweEYwLCAweDRELCAweEM0LCAweDM3LCAweDEwLAorMHhERiwgMHg4MCwgMHg3QywgMHg4MywgMHg3MCwgMHgwRCwgMHhDOCwgMHgzNywgMHgwMCwgMHhENywgMHg4MCwgMHg2NCwgMHgwMiwKKzB4RjAsIDB4M0QsIDB4QzAsIDB4MzcsIDB4NDgsIDB4NUEsIDB4MDAsIDB4N0MsIDB4MDMsIDB4NzAsIDB4MjksIDB4QzAsIDB4NjcsCisweDAwLCAweEQ3LCAweDAwLCAweDVDLCAweDBBLCAweEYwLCAweDE1LCAweEM0LCAweDM3LCAweDIwLCAweDVGLCAweDAyLCAweDdDLAorMHgwOSwgMHhGMCwgMHgyOSwgMHhDMCwgMHgwNywgMHgwMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwKKzB4MDgsIDB4MkYsIDB4MDAsIDB4RkYsIDB4MDAsIDB4RkMsIDB4MDAsIDB4MzAsIDB4MEYsIDB4QzAsIDB4M0QsIDB4MDAsIDB4RkYsCisweDAwLCAweEZFLCAweDAzLCAweEYyLCAweDBGLCAweEMyLCAweDNGLCAweDgwLCAweEZGLCAweDAwLCAweEZDLCAweDAzLCAweEIxLAorMHgxNywgMHhDMiwgMHgzRiwgMHgwMCwgMHhGMywgMHgwMSwgMHhGQywgMHgwNiwgMHhGMCwgMHgwQiwgMHhDMCwgMHg3RiwgMHgwMCwKKzB4RkYsIDB4MDAsIDB4Q0MsIDB4MDIsIDB4RDAsIDB4OEYsIDB4QzAsIDB4M0YsIDB4MDAsIDB4MzEsIDB4MDAsIDB4Q0MsIDB4NjIsCisweDMwLCAweDAzLCAweEMwLCAweDAzLCAweDIyLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgxLCAweDIwLAorMHg1NiwgMHgwMCwgMHhERCwgMHgwMCwgMHgzNCwgMHgwRSwgMHhEMCwgMHgwRCwgMHg0MCwgMHgzNywgMHg4MCwgMHhERCwgMHgwMCwKKzB4NzQsIDB4MDMsIDB4RDAsIDB4MEQsIDB4NDAsIDB4MzcsIDB4QTAsIDB4REYsIDB4MjAsIDB4NzQsIDB4MDMsIDB4MzEsIDB4OUQsCisweEMwLCAweDMxLCAweDAwLCAweDkxLCAweDBBLCAweDc0LCAweDBGLCAweDc4LCAweDExLCAweDQwLCAweDg3LCAweDAxLCAweERELAorMHgwMCwgMHg2QywgMHg0NCwgMHg3MCwgMHgwMSwgMHg0MSwgMHgzNywgMHgwMCwgMHgxMywgMHgwRiwgMHgxNCwgMHg0NCwgMHgxMCwKKzB4MzksIDB4NDAsIDB4MDcsIDB4MDIsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4QTAsIDB4QTYsCisweDAyLCAweERELCAweDAwLCAweDc0LCAweDBDLCAweDkwLCAweDBELCAweDQwLCAweDM3LCAweDAwLCAweERELCAweDgwLCAweDc0LAorMHgwMywgMHhEMiwgMHgwRCwgMHg0OCwgMHgzNywgMHgwMCwgMHhERCwgMHgwMCwgMHg3NCwgMHgwMywgMHg5MCwgMHgwNSwgMHg0MCwKKzB4MzcsIDB4MDAsIDB4NTUsIDB4ODIsIDB4NzQsIDB4MTIsIDB4RDAsIDB4MTksIDB4NDAsIDB4MTcsIDB4MDIsIDB4RDksIDB4MDAsCisweDQ0LCAweDA0LCAweEQwLCAweDA5LCAweDQyLCAweDMzLCAweDAwLCAweDk1LCAweDAwLCAweDQ0LCAweDAzLCAweDEwLCAweDE5LAorMHg0MSwgMHgwNywgMHgwMCwgMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHgzMCwgMHgwMCwKKzB4Q0QsIDB4MDAsIDB4NzQsIDB4MDAsIDB4RDAsIDB4MEMsIDB4NDAsIDB4MzMsIDB4MDAsIDB4Q0QsIDB4MDAsIDB4MzYsIDB4MDMsCisweEQwLCAweDBDLCAweDQwLCAweDMzLCAweDIwLCAweEM1LCAweDAwLCAweDM0LCAweDAzLCAweDEwLCAweDg4LCAweDQ4LCAweDM1LAorMHgwMCwgMHg0NSwgMHgwMCwgMHgzNCwgMHgwMCwgMHg1OCwgMHgwOCwgMHg2MCwgMHgwMywgMHgwMCwgMHhERCwgMHgwMCwgMHgyNSwKKzB4MDAsIDB4NTAsIDB4MDAsIDB4NDgsIDB4MzMsIDB4NDAsIDB4NDUsIDB4MDAsIDB4NDQsIDB4MDAsIDB4MTEsIDB4MDgsIDB4NDAsCisweDQzLCAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDI2LCAweDAwLCAweEZGLAorMHgwMCwgMHg3QywgMHgwMCwgMHgxMCwgMHgwRiwgMHhDMCwgMHgzRCwgMHgwMCwgMHhERCwgMHgwMCwgMHhGNCwgMHgwMywgMHhGMCwKKzB4MEQsIDB4QzAsIDB4M0YsIDB4MDAsIDB4REQsIDB4MDAsIDB4N0UsIDB4MDMsIDB4QjAsIDB4MDUsIDB4NDgsIDB4M0IsIDB4MDAsCisweEQ1LCAweDAwLCAweDdDLCAweDAyLCAweEQwLCAweDA5LCAweEMwLCAweDA3LCAweDAwLCAweEZGLCAweDA4LCAweDRDLCAweDAwLAorMHhGMCwgMHgwMSwgMHhDMCwgMHgzRiwgMHgwMCwgMHgxNywgMHgwMCwgMHg0RCwgMHgwMCwgMHgzMCwgMHgwOSwgMHhDMCwgMHgwMywKKzB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4QjgsIDB4MUYsIDB4MDAsIDB4RkYsIDB4MDAsCisweEZDLCAweDAyLCAweDcwLCAweDBGLCAweEMwLCAweDNGLCAweDAwLCAweEVGLCAweDgwLCAweEZDLCAweDAzLCAweEYwLCAweDBGLAorMHhDMCwgMHgzRiwgMHgwMCwgMHhGRiwgMHgwMCwgMHhGQywgMHgwMywgMHg3MSwgMHg0MywgMHhDMCwgMHgzRCwgMHgwMCwgMHgzQiwKKzB4MDAsIDB4RkMsIDB4MDAsIDB4NzAsIDB4MDMsIDB4QzAsIDB4MEYsIDB4MDAsIDB4RkYsIDB4MDAsIDB4REMsIDB4MDAsIDB4NzgsCisweDAzLCAweEMwLCAweDNGLCAweDAwLCAweDMzLCAweDAwLCAweEZGLCAweDgwLCAweEYwLCAweDBCLCAweEMyLCAweDE3LCAweDYwLAorMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHg4MCwgMHgwRiwgMHgwNCwgMHgzMywgMHgwMSwgMHhDNCwKKzB4MDIsIDB4QjgsIDB4MEIsIDB4QzAsIDB4QkYsIDB4MDEsIDB4RkIsIDB4MkMsIDB4RUMsIDB4OEUsIDB4NzAsIDB4MkYsIDB4QzAsCisweDRGLCAweDAwLCAweEY3LCAweDE4LCAweDhDLCAweDI0LCAweEYwLCAweDRGLCAweEMxLCAweDRGLCAweDAyLCAweEZGLCAweDQ0LAorMHhEQywgMHgyNywgMHgzMCwgMHg4RiwgMHhDMCwgMHgzRiwgMHgwMCwgMHhFNywgMHgwMCwgMHhFQywgMHgwNCwgMHhGMCwgMHgwRiwKKzB4QzAsIDB4NkMsIDB4MDAsIDB4RkIsIDB4MTAsIDB4OUMsIDB4NTIsIDB4RjAsIDB4MTMsIDB4QzAsIDB4MEMsIDB4MDAsIDB4MEUsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDA4LCAweDg3LCAweDAwLCAweDExLCAweDAwLCAweDZDLCAweDAyLAorMHhGMCwgMHgwOSwgMHg0MCwgMHhCRiwgMHgwMCwgMHhGMSwgMHgwMiwgMHg0QywgMHgxMywgMHgxMCwgMHg4RiwgMHg0MCwgMHg2NywKKzB4MDgsIDB4RjEsIDB4MDIsIDB4NDQsIDB4MTAsIDB4RDIsIDB4M0YsIDB4QzIsIDB4MjMsIDB4MDgsIDB4RjEsIDB4MDMsIDB4NDQsCisweDEzLCAweDA0LCAweDZGLCAweDQwLCAweEZDLCAweDIwLCAweEYxLCAweDBCLCAweDQ0LCAweDA0LCAweEQxLCAweDNGLCAweEMwLAorMHg0NCwgMHgwMCwgMHhENSwgMHg0MywgMHg3NCwgMHgwNCwgMHhEMCwgMHgxNSwgMHhDMCwgMHgwNiwgMHgyMCwgMHgwQywgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTEsIDB4QTAsIDB4MDMsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MTUsIDB4MDAsIDB4OTIsCisweDA4LCAweDQyLCAweDMzLCAweDAzLCAweEM5LCAweDBDLCAweDM0LCAweDAzLCAweDUwLCAweDRDLCAweDQ0LCAweDA3LCAweDgwLAorMHhDNSwgMHgyMCwgMHgwNCwgMHgxMiwgMHhEMCwgMHgwQywgMHg0MiwgMHgxMywgMHgxMCwgMHhDOSwgMHgwMiwgMHgxNCwgMHgwMywKKzB4MTAsIDB4MkMsIDB4NDAsIDB4QjEsIDB4MDAsIDB4QzUsIDB4MDAsIDB4MDcsIDB4MDAsIDB4NTAsIDB4MkMsIDB4NDAsIDB4MjYsCisweDAwLCAweEMxLCAweDIwLCAweDM0LCAweDAyLCAweEQwLCAweDA1LCAweDQwLCAweDQ0LCAweDgwLCAweDBFLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHhBOCwgMHg0MSwgMHgwNCwgMHgwMSwgMHgwMSwgMHg1NCwgMHgwRSwgMHg1MCwgMHgxOSwKKzB4NDAsIDB4MzcsIDB4MDAsIDB4RDEsIDB4MDAsIDB4NDQsIDB4MDMsIDB4MTAsIDB4MEQsIDB4NDAsIDB4NDcsIDB4MDAsIDB4RDEsCisweDAwLCAweDQ0LCAweDBDLCAweEQwLCAweDBELCAweDQwLCAweDI1LCAweDA0LCAweEQ1LCAweDAwLCAweDQ0LCAweDAzLCAweDE4LAorMHgwRCwgMHgwOCwgMHgzNCwgMHgwMCwgMHhEMSwgMHgwMCwgMHg2NCwgMHgwNCwgMHhEMCwgMHgwRCwgMHg0MCwgMHg2NCwgMHgwMCwKKzB4RDUsIDB4MDAsIDB4NzQsIDB4MDYsIDB4RDAsIDB4MzUsIDB4NDAsIDB4MEUsIDB4MjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAyLCAweEE4LCAweEM3LCAweDAwLCAweDEzLCAweDAzLCAweDU0LCAweDBDLCAweDkwLCAweDUxLCAweEMwLAorMHgzNywgMHgwMCwgMHhEQiwgMHgwMCwgMHg3QywgMHgwMywgMHg3MCwgMHgwRCwgMHhDNCwgMHg0MywgMHgwMCwgMHhENywgMHgwMCwKKzB4NEMsIDB4MEUsIDB4RjAsIDB4MEQsIDB4NDgsIDB4OTcsIDB4MDIsIDB4REYsIDB4MDAsIDB4NUMsIDB4MDMsIDB4MzIsIDB4MEQsCisweEMwLCAweDM3LCAweDEwLCAweEQ3LCAweDAwLCAweDZFLCAweDQ0LCAweEYwLCAweDBELCAweEQwLCAweDYyLCAweDAwLCAweERCLAorMHgwMCwgMHg1QywgMHgxNiwgMHhGMiwgMHgxRCwgMHhFMCwgMHgwOCwgMHgyMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDcsIDB4ODAsIDB4MDUsIDB4MDAsIDB4M0YsIDB4MDAsIDB4NkQsIDB4ODAsIDB4RjAsIDB4MDMsIDB4QzAsIDB4M0YsCisweDAwLCAweEVGLCAweDAwLCAweEVDLCAweDAzLCAweEY4LCAweDBELCAweEMwLCAweDJGLCAweDgwLCAweEVCLCAweDQwLCAweEZDLAorMHgwMCwgMHhGMiwgMHgwRiwgMHhDMCwgMHg0RiwgMHgwMCwgMHhFQiwgMHgwMCwgMHhGQywgMHgwMywgMHhGMCwgMHgwRSwgMHhDMCwKKzB4M0IsIDB4MDQsIDB4RkQsIDB4ODAsIDB4REMsIDB4NDAsIDB4RjAsIDB4MEYsIDB4QzAsIDB4MkYsIDB4MDAsIDB4RkYsIDB4MDAsCisweEZDLCAweDAwLCAweEYwLCAweDBGLCAweEMwLCAweDFGLCAweDAwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMiwgMHgwOCwgMHg4NSwgMHgwMCwgMHgxQiwgMHgwMCwgMHg0RCwgMHgwOCwgMHgzMCwgMHgwOSwgMHhDMywgMHgzMywgMHgwMCwKKzB4REYsIDB4MDAsIDB4NUMsIDB4MDMsIDB4NzAsIDB4MEQsIDB4QzAsIDB4ODUsIDB4MDAsIDB4REYsIDB4MDAsIDB4NEMsIDB4MEEsCisweDMwLCAweDBELCAweEM2LCAweDE2LCAweDAwLCAweEQzLCAweDEwLCAweDVDLCAweDAzLCAweEYwLCAweDBELCAweEMwLCAweDM2LAorMHgwMCwgMHhERiwgMHgyMCwgMHg0QywgMHgwOCwgMHg3MCwgMHgwQywgMHhDMCwgMHgyNywgMHgwMCwgMHhERiwgMHgwMCwgMHg3RSwKKzB4NDIsIDB4NzAsIDB4MkQsIDB4QzAsIDB4MDgsIDB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTMsCisweEEwLCAweDA0LCAweDAwLCAweDExLCAweDAxLCAweDQ0LCAweDRFLCAweDAwLCAweDY5LCAweDQwLCAweDNGLCAweDEwLCAweEZELAorMHgwMCwgMHg0QywgMHgwMywgMHgxMCwgMHgwRiwgMHg0MCwgMHhBNCwgMHgwMywgMHhGRCwgMHgwMCwgMHg0NCwgMHgwMCwgMHgxMiwKKzB4MEYsIDB4NDAsIDB4MjQsIDB4MDAsIDB4RjAsIDB4MDMsIDB4NTQsIDB4MDMsIDB4RDAsIDB4MEYsIDB4NDAsIDB4N0MsIDB4MDQsCisweEVELCAweDAwLCAweDQ1LCAweDA0LCAweEQwLCAweDFGLCAweDQwLCAweDQ3LCAweDAwLCAweEZELCAweDAwLCAweDc0LCAweDBFLAorMHgxMCwgMHgwRCwgMHg0MywgMHg0QywgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNywgMHhBMCwKKzB4NDIsIDB4MDAsIDB4MDksIDB4MjQsIDB4MDAsIDB4NDYsIDB4OTAsIDB4MDAsIDB4NDAsIDB4MzMsIDB4MjAsIDB4QzksIDB4MDAsCisweDUyLCAweDAyLCAweEQwLCAweDBDLCAweDQ4LCAweEExLCAweDAwLCAweENDLCAweDAwLCAweDE0LCAweDAwLCAweDEwLCAweDBDLAorMHg0OCwgMHgyNywgMHg2MCwgMHhDMSwgMHgwMSwgMHg0NCwgMHgwMywgMHhEMCwgMHgwQywgMHg0MCwgMHgzMywgMHgwMCwgMHhDRCwKKzB4MDQsIDB4MjQsIDB4MDQsIDB4RDAsIDB4OEMsIDB4NDksIDB4MjMsIDB4MTIsIDB4Q0QsIDB4MDAsIDB4MTYsIDB4MDQsIDB4NTEsCisweDBELCAweDQxLCAweDFDLCAweDAwLCAweDBBLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDgwLCAweDQ4LAorMHgyNCwgMHgyMSwgMHgwMSwgMHg4NCwgMHgwNywgMHgxOCwgMHgxRSwgMHg0MCwgMHg3QiwgMHgwMCwgMHhDRCwgMHgwMSwgMHg5NCwKKzB4MDcsIDB4OTAsIDB4OUUsIDB4NDAsIDB4NzgsIDB4QTAsIDB4RUQsIDB4MDEsIDB4RDQsIDB4MDQsIDB4MTQsIDB4MUUsIDB4NDAsCisweDY5LCAweDAwLCAweEUxLCAweDExLCAweDk0LCAweDA3LCAweEMwLCAweDFDLCAweDQwLCAweDc5LCAweDAwLCAweEVELCAweDk1LAorMHg4NCwgMHgwNSwgMHhEMiwgMHgxRSwgMHg0MCwgMHg0QiwgMHgwMCwgMHhFRCwgMHgwOSwgMHhCNiwgMHg0NCwgMHgxMCwgMHgxRiwKKzB4NDAsIDB4MTAsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4MTAsIDB4MDAsIDB4MDAsCisweDFCLCAweDEwLCAweDBELCAweDIxLCAweEIwLCAweDA0LCAweEMwLCAweDMzLCAweDAwLCAweENGLCAweDAwLCAweDVDLCAweDAzLAorMHhGMCwgMHgwQywgMHhDOCwgMHg4MSwgMHgwMCwgMHhERSwgMHgwMCwgMHgxQywgMHgwMywgMHgzMCwgMHgwQywgMHhDMCwgMHgzMywKKzB4MDMsIDB4QzMsIDB4ODAsIDB4MUMsIDB4ODMsIDB4RjAsIDB4NEMsIDB4QzAsIDB4MzMsIDB4MDAsIDB4Q0YsIDB4MDAsIDB4MEMsCisweDQwLCAweDcwLCAweDBDLCAweEU0LCAweDIzLCAweDIyLCAweENGLCAweDAwLCAweDFFLCAweDE0LCAweDcwLCAweDBDLCAweEMwLAorMHg0OCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHhCOCwgMHgyRCwgMHgxMiwgMHg3RiwKKzB4MDgsIDB4RkMsIDB4MDMsIDB4NTQsIDB4MEYsIDB4QzAsIDB4M0YsIDB4ODAsIDB4RkYsIDB4MDIsIDB4RUMsIDB4MDMsIDB4NzAsCisweDBGLCAweEMzLCAweDFGLCAweDAwLCAweEZGLCAweDA4LCAweEVDLCAweDAzLCAweEYwLCAweDJFLCAweEM0LCAweDNFLCAweDAyLAorMHhFRiwgMHgxMCwgMHhGOCwgMHgyMywgMHhGMCwgMHgwRiwgMHhDMSwgMHgzRSwgMHgwMCwgMHhGRiwgMHgwNiwgMHhEQywgMHgwMSwKKzB4RjAsIDB4MEYsIDB4QzAsIDB4MkYsIDB4MDgsIDB4RkYsIDB4MjAsIDB4RkUsIDB4MjAsIDB4RjIsIDB4MEMsIDB4QzAsIDB4MEIsCisweDYwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE1LCAweEEwLCAweDA3LCAweDAwLCAweDAzLCAweDAwLAorMHg0QywgMHgwMywgMHhGMCwgMHgwNSwgMHhDMCwgMHhCNywgMHgwMSwgMHhEQiwgMHgwRSwgMHg3QywgMHgwMywgMHhGMCwgMHg1RCwKKzB4QzEsIDB4MjQsIDB4MDAsIDB4REYsIDB4ODYsIDB4N0MsIDB4ODYsIDB4NzAsIDB4M0QsIDB4QzAsIDB4MTYsIDB4MDAsIDB4REYsCisweDEwLCAweDdDLCAweDAzLCAweEYwLCAweDRELCAweEMxLCAweDM2LCAweDAxLCAweERGLCAweDAxLCAweDRDLCAweDAwLCAweEYwLAorMHhBQywgMHhDMCwgMHgyNCwgMHgwMCwgMHhERiwgMHgwMSwgMHg0QywgMHgwNiwgMHgzMCwgMHgwRCwgMHhDMCwgMHg1NCwgMHgwMCwKKzB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4ODgsIDB4MDksIDB4MDgsIDB4MjEsIDB4MDAsIDB4ODQsCisweDAzLCAweEQwLCAweDBFLCAweDQwLCAweEJCLCAweDBELCAweEUxLCAweDAwLCAweDlDLCAweDAzLCAweEQwLCAweDRFLCAweDUwLAorMHgzOCwgMHg4MCwgMHhFRCwgMHgxMiwgMHhCNCwgMHgwMiwgMHgxMCwgMHgwRSwgMHg0MCwgMHgxOCwgMHgwMCwgMHhFRCwgMHgwNCwKKzB4QjAsIDB4ODMsIDB4RDAsIDB4NEUsIDB4NDIsIDB4QjgsIDB4ODIsIDB4Q0QsIDB4MDQsIDB4QTUsIDB4MDEsIDB4RDAsIDB4NEUsCisweDQ5LCAweDI5LCAweDAwLCAweEVELCAweDAwLCAweDk0LCAweDAwLCAweDExLCAweDBFLCAweEMwLCAweDRBLCAweDIwLCAweDA2LAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHgwMCwgMHg0OSwgMHgwNCwgMHgyMSwgMHgwMSwgMHg4NCwgMHgwRCwKKzB4RDAsIDB4MTYsIDB4NDEsIDB4NzMsIDB4MDEsIDB4RTksIDB4MDUsIDB4OTQsIDB4MDcsIDB4RDAsIDB4NUUsIDB4NDAsIDB4NjgsCisweDAwLCAweEVELCAweDA1LCAweEI0LCAweDA3LCAweDUwLCAweDlDLCAweDUwLCAweDc5LCAweDgwLCAweEVELCAweDAxLCAweEI0LAorMHg4NywgMHg1OCwgMHgxRSwgMHg0MCwgMHg3OCwgMHgwMCwgMHhFRCwgMHgwOCwgMHhBNCwgMHgwNCwgMHg1MCwgMHgxRSwgMHg0MCwKKzB4NzgsIDB4MDAsIDB4Q0QsIDB4MDEsIDB4MDQsIDB4MDYsIDB4MTAsIDB4MUYsIDB4NDAsIDB4MEMsIDB4MDAsIDB4MDQsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDI4LCAweDc3LCAweDIwLCAweEQxLCAweDA0LCAweDA0LCAweDA3LCAweEQwLAorMHgzQywgMHg0MSwgMHgzMywgMHgwMCwgMHhDMSwgMHg0MCwgMHgxNCwgMHhBNywgMHhEOCwgMHgwQywgMHg0MCwgMHhCMCwgMHgwMCwKKzB4Q0QsIDB4MDAsIDB4MzQsIDB4MEIsIDB4MTAsIDB4MEMsIDB4NDAsIDB4NzEsIDB4ODMsIDB4Q0QsIDB4MDAsIDB4MzQsIDB4MDMsCisweEQ5LCAweDBELCAweDUwLCAweDMwLCAweDAwLCAweERELCAweDAwLCAweDI0LCAweDRCLCAweEQxLCAweDBDLCAweDQ4LCAweDExLAorMHgxNCwgMHhDRCwgMHgwMCwgMHgxNiwgMHgyNywgMHgxMCwgMHgwQywgMHg0MCwgMHg0QSwgMHgyMCwgMHgwQywgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MTcsIDB4QTgsIDB4NUQsIDB4NDAsIDB4NzMsIDB4MDAsIDB4Q0QsIDB4MEQsIDB4RjAsIDB4MDcsCisweEMwLCAweDE3LCAweDAwLCAweDVCLCAweDAwLCAweDVDLCAweDAxLCAweEYwLCAweDA1LCAweEMwLCAweDE4LCAweDAyLCAweDVGLAorMHgwMCwgMHhGQywgMHgwMSwgMHg3MCwgMHgwNSwgMHhDMCwgMHg1RCwgMHgxOCwgMHg1RiwgMHgwMCwgMHg3QywgMHgwMSwgMHhGMCwKKzB4MDUsIDB4QzAsIDB4MTQsIDB4MDAsIDB4NUQsIDB4ODAsIDB4QzUsIDB4MDEsIDB4RjgsIDB4MDUsIDB4QzAsIDB4NUMsIDB4MDAsCisweDVGLCAweDAwLCAweENDLCAweDAxLCAweDMwLCAweDY3LCAweEMwLCAweDVDLCAweDIwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgxMiwgMHgwMCwgMHg4NywgMHgwMCwgMHgxRiwgMHgwMCwgMHg3QywgMHgxMCwgMHhGMCwgMHgwMSwgMHhDMCwKKzB4MDcsIDB4MDAsIDB4MUYsIDB4MDAsIDB4NUMsIDB4MDAsIDB4RjAsIDB4MDEsIDB4QzAsIDB4MDcsIDB4MDAsIDB4MUYsIDB4MDAsCisweDdDLCAweDAwLCAweEYwLCAweDAxLCAweDQwLCAweDA0LCAweDIwLCAweDFGLCAweDgyLCAweDdDLCAweDAwLCAweEYwLCAweDAxLAorMHhDMCwgMHgwMSwgMHgwMCwgMHgxRiwgMHgwMiwgMHg1QywgMHg4MCwgMHhGMCwgMHgyMSwgMHhDMCwgMHgwNywgMHgwMiwgMHgxRiwKKzB4MDAsIDB4N0MsIDB4OEMsIDB4RjAsIDB4MDEsIDB4QzEsIDB4NEIsIDB4MDAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDEwLCAweDA4LCAweDY3LCAweDAyLCAweDkzLCAweDAwLCAweDRDLCAweDBFLCAweEYwLCAweDM5LCAweEMwLCAweDI3LAorMHgwMCwgMHg5NywgMHgwMCwgMHg3QywgMHgwMiwgMHhGMCwgMHgwOSwgMHhDMCwgMHgyNywgMHgwMiwgMHg5MywgMHgwMCwgMHg3QywKKzB4NDIsIDB4RjAsIDB4MjksIDB4QzAsIDB4MjcsIDB4MDAsIDB4OUYsIDB4MDIsIDB4N0MsIDB4MDIsIDB4QjIsIDB4MDksIDB4QzIsCisweEU1LCAweDAwLCAweDk3LCAweDA1LCAweDRDLCAweDAyLCAweEYwLCAweDA4LCAweEQwLCAweDI0LCAweDAwLCAweDlGLCAweDAwLAorMHg1RSwgMHgwMiwgMHhGMCwgMHgyOSwgMHhDMCwgMHg0MCwgMHgyMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDEsIDB4MjAsIDB4RTYsIDB4NjAsIDB4OTEsIDB4MDMsIDB4NDQsIDB4MDYsIDB4RDAsIDB4MTksIDB4NDAsIDB4MjcsIDB4MDAsCisweDkxLCAweDAwLCAweDVDLCAweDAyLCAweEQwLCAweDA5LCAweDQ2LCAweDI3LCAweDAwLCAweDk1LCAweDAwLCAweDc0LCAweDAyLAorMHhEMCwgMHgxOSwgMHg0MCwgMHgyNywgMHgwMCwgMHg5RCwgMHgwMywgMHg3NCwgMHgwMiwgMHgxMCwgMHgwOSwgMHg0OCwgMHhFNCwKKzB4MDQsIDB4OTEsIDB4MDAsIDB4NDQsIDB4MjYsIDB4RDEsIDB4NDksIDB4NDAsIDB4MjQsIDB4MDAsIDB4OUQsIDB4MDAsIDB4NzQsCisweDRFLCAweEQyLCAweDE4LCAweEMwLCAweDA0LCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LAorMHhBMCwgMHgyNCwgMHgwNCwgMHhEMSwgMHgwOCwgMHg0NCwgMHgwMiwgMHhEMCwgMHgwOSwgMHg0MCwgMHgyMywgMHgwMCwgMHg5NSwKKzB4MDAsIDB4NzQsIDB4MDIsIDB4RDAsIDB4MDksIDB4NDAsIDB4MjcsIDB4MDQsIDB4OTksIDB4MDAsIDB4NzQsIDB4MDIsIDB4RDAsCisweDA5LCAweDQwLCAweDI3LCAweDAwLCAweDk1LCAweDAyLCAweDM0LCAweDAyLCAweDkwLCAweDA5LCAweDYwLCAweDI1LCAweDAwLAorMHg5NSwgMHg0MCwgMHg0NiwgMHgwMiwgMHhEMCwgMHgwOSwgMHg0MCwgMHgyNCwgMHgwMSwgMHg5RCwgMHgwMCwgMHg1NCwgMHgyMiwKKzB4RDAsIDB4MDksIDB4NDAsIDB4NjAsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MjAsCisweDIwLCAweDAxLCAweDgxLCAweDAwLCAweDA0LCAweDEzLCAweEQwLCAweEM4LCAweDQwLCAweDIzLCAweDExLCAweDgxLCAweDBDLAorMHgxNCwgMHgyMiwgMHhEMCwgMHg0OCwgMHg0MCwgMHgyMywgMHgwMCwgMHg4NSwgMHgwNCwgMHgzNCwgMHgyMiwgMHhEMCwgMHg0OCwKKzB4NjAsIDB4MjMsIDB4MDIsIDB4OEQsIDB4MDAsIDB4MzQsIDB4MjIsIDB4MTAsIDB4ODgsIDB4NDAsIDB4MjAsIDB4MDgsIDB4OTEsCisweDAwLCAweDA0LCAweDA2LCAweEQwLCAweDA4LCAweDQwLCAweDIwLCAweDAwLCAweDhELCAweDA0LCAweDM0LCAweDEyLCAweEQwLAorMHgwOCwgMHg0MCwgMHg0MCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxRCwgMHhCMCwgMHg4MiwKKzB4MDIsIDB4NTMsIDB4MEEsIDB4NEQsIDB4MzAsIDB4RjAsIDB4NDUsIDB4QzEsIDB4ODcsIDB4MDIsIDB4MTcsIDB4MDIsIDB4N0MsCisweDA4LCAweEYwLCAweEEwLCAweEMwLCAweDA3LCAweDA4LCAweDEzLCAweDBBLCAweDNDLCAweDA4LCAweEYwLCAweDAxLCAweEMwLAorMHg4NywgMHgwMCwgMHgxNywgMHgxNCwgMHg3QywgMHgwOCwgMHhCMCwgMHg2MCwgMHhDMSwgMHgwNSwgMHg4NSwgMHg1NiwgMHgxNCwKKzB4NDQsIDB4MDAsIDB4RjAsIDB4NDEsIDB4RDEsIDB4MDQsIDB4MDAsIDB4MUYsIDB4MTQsIDB4NUMsIDB4MDAsIDB4RjAsIDB4MDEsCisweEQwLCAweDc0LCAweEMwLCAweDBBLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE5LCAweDkwLCAweDJGLCAweDIyLAorMHhCRiwgMHgwMCwgMHhGQywgMHgzMywgMHhGMCwgMHg0QiwgMHhDMCwgMHgyNywgMHgwMiwgMHg5RiwgMHgwQywgMHhEQywgMHgxMiwKKzB4RjAsIDB4ODksIDB4QzAsIDB4MkYsIDB4MzAsIDB4OUYsIDB4MDgsIDB4RkMsIDB4MTIsIDB4RjAsIDB4ODksIDB4QzgsIDB4MkYsCisweDAxLCAweDlGLCAweDQwLCAweDdDLCAweDEyLCAweEYwLCAweDQ5LCAweEMyLCAweDI3LCAweDA4LCAweDlGLCAweDAwLCAweEZDLAorMHgwMiwgMHhEMCwgMHgwOSwgMHhDMCwgMHgyRiwgMHgwOCwgMHg5RiwgMHgwMCwgMHhGQywgMHgyMiwgMHhGMCwgMHgwQSwgMHhDMCwKKzB4NjUsIDB4NjAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4QTAsIDB4MkYsIDB4MDEsIDB4QkYsCisweDAwLCAweENDLCAweDMyLCAweEUwLCAweDBCLCAweEM4LCAweDI0LCAweDAwLCAweDlGLCAweDA4LCAweDZDLCAweDAyLCAweEUwLAorMHg0OSwgMHhDMSwgMHgyRSwgMHgwMCwgMHg5RiwgMHgwMCwgMHg3QywgMHgwMiwgMHgzMCwgMHgwQiwgMHhEOCwgMHgyNCwgMHgyMCwKKzB4QkYsIDB4MzQsIDB4N0MsIDB4MjIsIDB4RjAsIDB4MDksIDB4RTAsIDB4MkQsIDB4MDAsIDB4QjMsIDB4MDAsIDB4RUMsIDB4MDIsCisweEYwLCAweDRCLCAweEMxLCAweDJDLCAweDIwLCAweDlGLCAweDU1LCAweEY4LCAweDAyLCAweEYwLCAweDBBLCAweEMwLCAweDYwLAorMHgwMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxQywgMHgwOCwgMHgwNywgMHgwNSwgMHgxRCwgMHgwNCwKKzB4NDQsIDB4QjAsIDB4RDAsIDB4MjUsIDB4NDEsIDB4MDQsIDB4MDQsIDB4MUQsIDB4MDgsIDB4NDQsIDB4NTAsIDB4RDIsIDB4NDEsCisweDQ0LCAweDA0LCAweDAwLCAweDE3LCAweDEyLCAweDc0LCAweDQwLCAweDE0LCAweDgxLCAweDY4LCAweDA0LCAweDA1LCAweDFELAorMHgwMCwgMHg3NCwgMHgxMCwgMHg3MSwgMHgyMSwgMHg0MSwgMHgwNCwgMHgwMCwgMHgxNSwgMHgwOCwgMHg0NCwgMHgwMCwgMHhEMCwKKzB4MDEsIDB4NDAsIDB4MDUsIDB4MjAsIDB4MUQsIDB4MDAsIDB4NzQsIDB4MDAsIDB4RDAsIDB4MDEsIDB4QzAsIDB4NzIsIDB4MjAsCisweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweEEwLCAweDIzLCAweDAzLCAweDhELCAweDE1LCAweDA0LAorMHg5MiwgMHhEMCwgMHhDOCwgMHg0MCwgMHgyMCwgMHgwMiwgMHg4RCwgMHgwMCwgMHgyNCwgMHgxMiwgMHhEMCwgMHg0OCwgMHg0MSwKKzB4MjIsIDB4MjAsIDB4OEQsIDB4MEMsIDB4MzYsIDB4MDIsIDB4MTAsIDB4MDgsIDB4NDAsIDB4MjIsIDB4MjEsIDB4OEQsIDB4MDAsCisweDMwLCAweDEyLCAweEQxLCAweEM4LCAweDQwLCAweDMxLCAweDAyLCAweDgxLCAweDAwLCAweDE0LCAweDAyLCAweEQwLCAweDA4LAorMHg0MCwgMHgyMiwgMHgwMCwgMHg4RCwgMHg4MCwgMHgzNCwgMHgwMiwgMHhEMCwgMHgwOSwgMHg0MCwgMHg0MCwgMHg4OCwgMHgwRSwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4QTgsIDB4NjUsIDB4MDAsIDB4OEQsIDB4MDAsIDB4NDQsIDB4MDIsCisweEQwLCAweDA5LCAweDQwLCAweDI0LCAweDAwLCAweDlELCAweDAwLCAweDQ0LCAweDIyLCAweEQwLCAweDA5LCAweDQwLCAweDI0LAorMHgwMCwgMHg5NSwgMHgwMCwgMHg3NCwgMHg0MiwgMHgxMCwgMHgwOSwgMHg0MCwgMHgyNiwgMHgwNiwgMHg5RCwgMHgwMCwgMHg3NCwKKzB4MDIsIDB4NTAsIDB4MDgsIDB4NDgsIDB4MzQsIDB4MDgsIDB4OTUsIDB4MjAsIDB4NDYsIDB4NDMsIDB4RDAsIDB4MDksIDB4NDAsCisweDY3LCAweDAwLCAweDlELCAweDAwLCAweDc2LCAweDBFLCAweEQwLCAweDQ5LCAweDQwLCAweDYyLCAweDIwLCAweDA2LCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHg4OCwgMHhFNywgMHgwNCwgMHg5RiwgMHgwMSwgMHg0RCwgMHgwMiwgMHhGMCwKKzB4MzksIDB4RTAsIDB4MjQsIDB4MDAsIDB4OUQsIDB4MDAsIDB4NkMsIDB4MDIsIDB4RjAsIDB4MDksIDB4QzAsIDB4MjYsIDB4MDQsCisweDlGLCAweDAwLCAweDdDLCAweDBBLCAweDMwLCAweDA5LCAweDQwLCAweDY2LCAweDAwLCAweDlGLCAweDIwLCAweDdDLCAweDAyLAorMHhEMCwgMHgwOSwgMHg0MCwgMHgyNSwgMHgwMCwgMHg5MywgMHgwMCwgMHg1RCwgMHg4QSwgMHhGMCwgMHgwOSwgMHhDMCwgMHhFNiwKKzB4MDQsIDB4OUYsIDB4MDAsIDB4N0MsIDB4MEUsIDB4RjAsIDB4MDgsIDB4NDAsIDB4MTQsIDB4MjAsIDB4MEUsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDgwLCAweDI1LCAweDAwLCAweDlGLCAweDA0LCAweDdDLCAweDY2LCAweEYzLCAweDg4LAorMHhEMSwgMHgyNywgMHgwMCwgMHg5RiwgMHgwMCwgMHg3QywgMHgwNiwgMHhGMCwgMHgwOSwgMHhDOCwgMHgyNywgMHgwMCwgMHg5RiwKKzB4MDAsIDB4N0MsIDB4MjYsIDB4RjAsIDB4MDksIDB4QzAsIDB4MjUsIDB4MDAsIDB4OUYsIDB4MjAsIDB4N0MsIDB4MDIsIDB4RjAsCisweDA5LCAweEMwLCAweDI3LCAweDAwLCAweDhGLCAweDAwLCAweDVDLCAweDAyLCAweEYwLCAweDA4LCAweEMxLCAweDI1LCAweDAwLAorMHg5RiwgMHgwMCwgMHg3QywgMHgwMiwgMHhGMCwgMHgwOSwgMHhDMSwgMHg1MywgMHgwMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MTQsIDB4MDgsIDB4ODUsIDB4MDIsIDB4MUYsIDB4MDAsIDB4NEQsIDB4MDgsIDB4RjgsIDB4MjEsIDB4QzAsCisweDA3LCAweDAwLCAweDFGLCAweDAwLCAweDdDLCAweDAwLCAweEYwLCAweDAwLCAweEM0LCAweDA3LCAweDAwLCAweDFGLCAweDAwLAorMHg3QywgMHgwOCwgMHhGMCwgMHgwMCwgMHhDMCwgMHg4NCwgMHgwMCwgMHgxRiwgMHgwMSwgMHg0QywgMHgwMCwgMHhGMCwgMHgwMSwKKzB4QzAsIDB4MDIsIDB4MDAsIDB4MTMsIDB4MDAsIDB4N0MsIDB4NDAsIDB4RjAsIDB4MDEsIDB4QzAsIDB4MDQsIDB4MDAsIDB4MUYsCisweDAwLCAweDdDLCAweDQwLCAweDMyLCAweDAxLCAweEMwLCAweDUwLCAweDIwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgxNCwgMHhBMCwgMHgxQywgMHgwMiwgMHg3RCwgMHgwMiwgMHhDNCwgMHgwMSwgMHhEMCwgMHgzNywgMHhDMCwgMHgxNSwKKzB4MDAsIDB4NUQsIDB4MDAsIDB4NzQsIDB4MDEsIDB4RDAsIDB4MDUsIDB4NDgsIDB4NUYsIDB4MDAsIDB4NUYsIDB4MDAsIDB4NzQsCisweDAxLCAweEQwLCAweDE1LCAweDAxLCAweDE0LCAweDAwLCAweDdELCAweDA1LCAweDQ1LCAweDAxLCAweEYwLCAweDA1LCAweEMwLAorMHgxRCwgMHgwMCwgMHg3RiwgMHgyMCwgMHhGNCwgMHg0RCwgMHhEMCwgMHgwNywgMHg0MCwgMHg1NCwgMHgyMCwgMHg1RCwgMHgwMCwKKzB4RjQsIDB4MDEsIDB4MzQsIDB4MDcsIDB4RDAsIDB4NTAsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDE0LCAweEEwLCAweDcyLCAweDgwLCAweDhELCAweDEwLCAweDA0LCAweDAzLCAweEQwLCAweEJDLCAweDQwLCAweDMxLCAweDAwLAorMHhERCwgMHgwMCwgMHgzNCwgMHgwMywgMHhEMCwgMHgwQywgMHg0MCwgMHgzMywgMHgwNiwgMHhDRCwgMHgwMCwgMHg3NCwgMHgwMywKKzB4RDAsIDB4MTgsIDB4NjAsIDB4MzAsIDB4MDAsIDB4Q0QsIDB4MDAsIDB4MDQsIDB4MDMsIDB4OTAsIDB4MEMsIDB4NDAsIDB4QjAsCisweDAxLCAweEMxLCAweDEyLCAweDM0LCAweDBCLCAweEQwLCAweDM0LCAweDUwLCAweDcwLCAweDAwLCAweENELCAweDAwLCAweDM0LAorMHgwMywgMHg5MCwgMHgwQywgMHg0MCwgMHg1MCwgMHgwMCwgMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwKKzB4ODAsIDB4MjgsIDB4MDEsIDB4N0QsIDB4MDgsIDB4ODQsIDB4NDMsIDB4RDAsIDB4MEUsIDB4NDAsIDB4MzksIDB4MDAsIDB4RUQsCisweDBDLCAweEI0LCAweDEzLCAweERBLCAweENFLCAweDQwLCAweDFCLCAweDAwLCAweEVELCAweDA4LCAweEI0LCAweDEzLCAweEQxLAorMHgwQiwgMHg0MCwgMHgzOCwgMHgyMSwgMHgwRCwgMHgwMSwgMHg4NiwgMHgyMywgMHhEMiwgMHg0QywgMHg0MCwgMHgyMSwgMHgwMCwKKzB4NjUsIDB4MTAsIDB4QjAsIDB4MDEsIDB4RDAsIDB4MEUsIDB4NDEsIDB4MzgsIDB4MDQsIDB4RUQsIDB4MDAsIDB4RjQsIDB4NDcsCisweDEwLCAweDBGLCAweDQwLCAweDE2LCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE1LCAweDEwLAorMHhGOCwgMHgwMCwgMHhBRiwgMHgwNSwgMHg4QywgMHgwNywgMHhEMCwgMHgxNiwgMHhDMCwgMHg3OSwgMHgwMCwgMHhFRiwgMHgwNSwKKzB4QkMsIDB4MEYsIDB4RjAsIDB4MUUsIDB4QzQsIDB4N0IsIDB4MjAsIDB4RUQsIDB4MTEsIDB4QjQsIDB4ODcsIDB4RDAsIDB4MEYsCisweEMwLCAweDc4LCAweDAxLCAweDJGLCAweDIxLCAweDhDLCAweDU3LCAweEYwLCAweEJFLCAweEM0LCAweDY4LCAweDAwLCAweEUxLAorMHgwMSwgMHhCMCwgMHgwNSwgMHhGMCwgMHgxQywgMHhDNCwgMHg3OCwgMHgwMCwgMHhFRiwgMHgwMSwgMHhGOCwgMHgwNSwgMHhCMCwKKzB4MUUsIDB4RDAsIDB4NTQsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4QjgsIDB4MzUsCisweDAwLCAweDhGLCAweDQwLCAweDdDLCAweDAzLCAweEYwLCAweDA1LCAweEMwLCAweEI1LCAweDAwLCAweERGLCAweDAwLCAweDdDLAorMHgwMywgMHhGMSwgMHg0RCwgMHhDMSwgMHgzNywgMHgwMCwgMHhENiwgMHg0NCwgMHg3QywgMHhBQiwgMHhGMCwgMHgwRCwgMHhDQywKKzB4QjcsIDB4MDYsIDB4MUYsIDB4MDAsIDB4NkMsIDB4MDMsIDB4NjAsIDB4NkQsIDB4QzAsIDB4MjUsIDB4MDAsIDB4NUYsIDB4MDAsCisweDdDLCAweDAwLCAweEYwLCAweDBELCAweEMwLCAweDM3LCAweDAwLCAweERGLCAweDgwLCAweDdDLCAweDAzLCAweEYwLCAweDBELAorMHhDMCwgMHg0MSwgMHg2MCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhBMCwgMHg0RiwgMHgwMCwKKzB4MjMsIDB4NDEsIDB4REQsIDB4MjcsIDB4RjgsIDB4OEYsIDB4QzAsIDB4RkYsIDB4MDQsIDB4RkIsIDB4MDEsIDB4REMsIDB4MDcsCisweEYwLCAweDlGLCAweEMwLCAweDZDLCAweDAyLCAweEZGLCAweDAxLCAweEVDLCAweDJGLCAweEYyLCAweDlCLCAweEMyLCAweDdGLAorMHg0MiwgMHgzMywgMHgwMSwgMHhDQywgMHgwNywgMHhGMCwgMHgxRiwgMHhDMCwgMHg0OCwgMHgwMCwgMHhCMywgMHg4OSwgMHhBRSwKKzB4MjUsIDB4MzAsIDB4MUYsIDB4QzIsIDB4N0YsIDB4MDIsIDB4RkYsIDB4MDEsIDB4RkMsIDB4MDYsIDB4RjAsIDB4MUUsIDB4QzAsCisweDAwLCAweDAwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE1LCAweDg4LCAweDA5LCAweDAwLCAweDYxLAorMHgwOCwgMHg4NSwgMHgwMSwgMHhEOCwgMHgwRSwgMHg0MSwgMHgzRiwgMHgwMCwgMHhGMSwgMHgwMCwgMHg4NCwgMHgwMywgMHhEMiwKKzB4MEYsIDB4NTQsIDB4ODgsIDB4MjAsIDB4RTcsIDB4MDAsIDB4ODUsIDB4MjMsIDB4RDAsIDB4Q0EsIDB4NDAsIDB4M0IsIDB4MDIsCisweDIxLCAweDA4LCAweEFDLCAweDAzLCAweDcwLCAweDBGLCAweDQ4LCAweDI4LCAweDAwLCAweEVCLCAweDAwLCAweDhDLCAweDAxLAorMHhCMCwgMHg0QSwgMHg0MCwgMHgzQiwgMHgwMiwgMHhFRCwgMHgwMCwgMHgzNCwgMHgxQiwgMHhEMCwgMHgwRSwgMHg1MCwgMHg1NCwKKzB4MjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjksIDB4MDQsIDB4MjEsIDB4MDIsCisweDk0LCAweEMzLCAweEQwLCAweDg2LCAweDQwLCAweDNCLCAweDAwLCAweEU5LCAweDAwLCAweDk0LCAweDIzLCAweEQwLCAweDBFLAorMHg0MiwgMHgzOCwgMHg5MCwgMHhFRCwgMHgwMCwgMHg4NCwgMHgwMywgMHhEMiwgMHgwQSwgMHgwMCwgMHgzRiwgMHgwNCwgMHgwMSwKKzB4MDAsIDB4ODQsIDB4MjMsIDB4RDAsIDB4MEUsIDB4NDAsIDB4MDksIDB4MDAsIDB4QTEsIDB4NDAsIDB4OTcsIDB4MDEsIDB4MTIsCisweDBFLCAweDQ4LCAweDJCLCAweDEwLCAweEVELCAweDAwLCAweEI0LCAweDAzLCAweEQwLCAweDBFLCAweDQwLCAweDAwLCAweDAwLAorMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgyOCwgMHhBNywgMHgwMSwgMHgwMSwgMHg4MSwgMHg0NCwKKzB4MEUsIDB4RDAsIDB4MzEsIDB4NDAsIDB4MzMsIDB4MDAsIDB4QzEsIDB4MDAsIDB4MDQsIDB4MDMsIDB4RDgsIDB4MEMsIDB4NDAsCisweEIwLCAweDA4LCAweEM1LCAweDAwLCAweDA0LCAweDEzLCAweEQwLCAweDA4LCAweDYwLCAweDMzLCAweDAwLCAweDAxLCAweDAwLAorMHgyNCwgMHgwMywgMHg1OCwgMHgwQywgMHg1MCwgMHgyMSwgMHgwMCwgMHhDOSwgMHgwMCwgMHgwNCwgMHg0MCwgMHgxMiwgMHgwOCwKKzB4NDAsIDB4MjMsIDB4MDEsIDB4Q0QsIDB4MDAsIDB4NzQsIDB4OUUsIDB4RDEsIDB4OEMsIDB4NDAsIDB4MTAsIDB4MjAsIDB4MEMsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE1LCAweEE4LCAweEZELCAweDQwLCAweDMzLCAweDAxLCAweDVDLCAweDA0LAorMHhEMCwgMHgxOSwgMHhDMCwgMHgzRiwgMHgwMCwgMHhGQiwgMHgwMCwgMHhENCwgMHgwMywgMHhGMCwgMHgwRiwgMHhDMCwgMHg3NCwKKzB4MDAsIDB4RkUsIDB4MDAsIDB4Q0MsIDB4MDMsIDB4RjAsIDB4MDksIDB4QzAsIDB4QkIsIDB4ODAsIDB4MTMsIDB4MDAsIDB4Q0MsCisweDAzLCAweEYwLCAweDBGLCAweDQwLCAweDI1LCAweDAwLCAweEQzLCAweDAwLCAweDVDLCAweDA1LCAweDEwLCAweDA1LCAweEM4LAorMHgzNywgMHgwMCwgMHhERiwgMHgwMCwgMHg3QywgMHg0QiwgMHhGMCwgMHgwRCwgMHhDMCwgMHg1NCwgMHgyMCwgMHgwNiwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MjcsIDB4MDgsIDB4NUYsIDB4MEEsIDB4N0MsIDB4NDAsIDB4RjAsCisweDI5LCAweEMxLCAweDM3LCAweDAwLCAweERGLCAweDgwLCAweDdDLCAweDIzLCAweEYzLCAweDBELCAweEM0LCAweEM3LCAweDAwLAorMHhDNCwgMHg4MCwgMHg1QywgMHgwMywgMHhGMCwgMHgwOSwgMHhDMCwgMHgzNywgMHgwMSwgMHgxRiwgMHgwMCwgMHg3QywgMHgwMywKKzB4NzAsIDB4MEMsIDB4QzAsIDB4MjYsIDB4MDAsIDB4NUYsIDB4MDIsIDB4NTAsIDB4MDUsIDB4RjAsIDB4MEQsIDB4QzAsIDB4MjcsCisweDAwLCAweERFLCAweDQwLCAweDdDLCAweDAzLCAweEYwLCAweDJELCAweEMwLCAweDA3LCAweDAwLCAweDBDLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwOCwgMHgzRiwgMHgwMiwgMHgzMywgMHgyMCwgMHhDQywgMHgwMCwgMHgzMCwgMHgwQiwKKzB4QzAsIDB4M0MsIDB4MDAsIDB4RkUsIDB4MDAsIDB4RkUsIDB4MDMsIDB4QjIsIDB4MEYsIDB4QzIsIDB4N0YsIDB4MDUsIDB4RkYsCisweDAwLCAweENELCAweDgzLCAweEYwLCAweDBGLCAweEMwLCAweDNGLCAweDAwLCAweDMzLCAweDAwLCAweEZDLCAweDAzLCAweEYwLAorMHgwRiwgMHhDMiwgMHgwRSwgMHgwMCwgMHgwRiwgMHgwMSwgMHhDRCwgMHgwMSwgMHgzMCwgMHg0RiwgMHhDMCwgMHg3QywgMHgwMSwKKzB4RUYsIDB4MDAsIDB4Q0MsIDB4MDcsIDB4MzAsIDB4MUIsIDB4QzAsIDB4MDAsIDB4MjIsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDgxLCAweDIwLCAweDc2LCAweDIwLCAweDA1LCAweDA0LCAweDQ0LCAweDA0LCAweDEwLCAweDM5LCAweDQxLAorMHgzNCwgMHgwMCwgMHhERCwgMHgwMCwgMHgzNCwgMHgwMywgMHg3MCwgMHgwRCwgMHg0MCwgMHhBNywgMHg4MCwgMHhERCwgMHgwMCwKKzB4NDQsIDB4MDMsIDB4RDAsIDB4MEQsIDB4QzAsIDB4MzUsIDB4MDAsIDB4MTEsIDB4MDMsIDB4NzQsIDB4MDMsIDB4NzIsIDB4MEQsCisweDQ4LCAweDQ1LCAweDAwLCAweDFELCAweDA1LCAweDA0LCAweDA4LCAweDUyLCAweDBDLCAweDQwLCAweDI0LCAweDAwLCAweERELAorMHgwMCwgMHg0NCwgMHgwOSwgMHgxMCwgMHg5QywgMHg0MCwgMHgwNCwgMHgwMiwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDEsIDB4QTAsIDB4MTQsIDB4NTAsIDB4MTEsIDB4MDAsIDB4NDQsIDB4MDYsIDB4MTAsIDB4MTEsIDB4NjAsIDB4MzYsCisweDEwLCAweERELCAweDAwLCAweDc0LCAweDAzLCAweDEwLCAweDBELCAweDRBLCAweDA3LCAweDgwLCAweERELCAweDAwLCAweDQ0LAorMHgwMywgMHhEMCwgMHgwOSwgMHg2OCwgMHgzNywgMHgwMCwgMHgxMSwgMHgwMywgMHg3NCwgMHgwMywgMHhEMCwgMHgwRCwgMHg0MCwKKzB4NDQsIDB4MDAsIDB4OUQsIDB4MDgsIDB4NDQsIDB4MjAsIDB4MTAsIDB4MEQsIDB4NDAsIDB4MzUsIDB4MDAsIDB4REQsIDB4MDAsCisweDU0LCAweDEzLCAweDUwLCAweDA1LCAweDQxLCAweDA0LCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgxMCwgMHgyMiwgMHgwMCwgMHgwMCwgMHg1MSwgMHgwMCwgMHgwNSwgMHgwNCwgMHgxNCwgMHgwOCwgMHg1MCwgMHgzMiwgMHgwMCwKKzB4Q0QsIDB4MDAsIDB4NzQsIDB4MDMsIDB4NTAsIDB4MEMsIDB4NDAsIDB4MDMsIDB4MDAsIDB4Q0QsIDB4ODAsIDB4MDQsIDB4MDMsCisweEQwLCAweDA4LCAweDQwLCAweDM0LCAweDIwLCAweDAxLCAweDAwLCAweDM0LCAweDAzLCAweDUyLCAweDBDLCAweDQwLCAweDIxLAorMHgxMCwgMHhDRCwgMHgwMCwgMHg0NCwgMHgwMCwgMHg1MCwgMHgwQywgMHg0NCwgMHgyMCwgMHgwMCwgMHhDRCwgMHgwMCwgMHg0NSwKKzB4MEIsIDB4MTQsIDB4MEQsIDB4NDAsIDB4NDAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweEIwLCAweDMyLCAweDAwLCAweDExLCAweDAwLCAweDRELCAweDAyLCAweDMwLCAweDAxLCAweEMyLCAweDNFLCAweDEwLCAweERGLAorMHgwMCwgMHg3NCwgMHgwMywgMHgzMCwgMHgwRiwgMHhDMCwgMHgxNywgMHgxMCwgMHhFRCwgMHgwMCwgMHhDQywgMHgwMywgMHhGMCwKKzB4MDksIDB4ODgsIDB4M0YsIDB4NDAsIDB4MTMsIDB4NDAsIDB4RkMsIDB4MDMsIDB4RjAsIDB4MEYsIDB4RTAsIDB4MDQsIDB4MjAsCisweDFGLCAweDAwLCAweDRFLCAweDAwLCAweDMwLCAweDBELCAweEMwLCAweDI0LCAweDAwLCAweERGLCAweDAwLCAweDRDLCAweDBCLAorMHgzMCwgMHgwMSwgMHhDMCwgMHgwMCwgMHhDMCwgMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHhCOCwKKzB4M0YsIDB4MDAsIDB4M0YsIDB4MDAsIDB4RkMsIDB4MDIsIDB4RjEsIDB4MEIsIDB4Q0EsIDB4M0QsIDB4MDAsIDB4RkYsIDB4MjAsCisweEZDLCAweDAzLCAweDcwLCAweDBGLCAweEMwLCAweDBGLCAweDAwLCAweEZGLCAweDAwLCAweEZDLCAweDAzLCAweEYwLCAweDBCLAorMHhDMCwgMHgzOSwgMHgwMCwgMHgzRiwgMHgwMCwgMHhGQywgMHgwMywgMHg0MCwgMHgwRiwgMHhDMCwgMHgwRCwgMHgwMCwgMHgzRiwKKzB4MDAsIDB4RkMsIDB4MDAsIDB4RjAsIDB4MEYsIDB4QzgsIDB4MkYsIDB4MDAsIDB4RkYsIDB4MDAsIDB4RkMsIDB4MTMsIDB4RjAsCisweDBGLCAweEMwLCAweDE3LCAweDYwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweEEwLCAweDNGLAorMHgwMCwgMHhGQiwgMHgxQywgMHhFQywgMHgwNSwgMHgzMCwgMHgwQiwgMHhDMCwgMHg1RiwgMHgwMCwgMHhCRiwgMHgwMCwgMHhFQywKKzB4MDMsIDB4QjAsIDB4MEYsIDB4QzEsIDB4M0YsIDB4MDAsIDB4M0IsIDB4ODEsIDB4RUMsIDB4MzMsIDB4NzAsIDB4MEYsIDB4QzAsCisweDRGLCAweDAwLCAweDJGLCAweDAxLCAweEZDLCAweDg0LCAweEYwLCAweDRGLCAweDgwLCAweDdDLCAweDAwLCAweDdCLCAweDAxLAorMHhCQywgMHgwNCwgMHhGMCwgMHgxMywgMHhDMiwgMHg0RSwgMHgwMCwgMHhGRiwgMHgwMSwgMHhGRSwgMHgwMCwgMHhGMCwgMHgwMywKKzB4NDQsIDB4MEYsIDB4MDAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDgsIDB4RkYsIDB4MDIsCisweEYxLCAweDAyLCAweDQ0LCAweDA2LCAweDE0LCAweDE5LCAweDQwLCAweDI2LCAweDAwLCAweDhELCAweDcwLCAweDc0LCAweEFGLAorMHgxMCwgMHgxRiwgMHg0MCwgMHhGRiwgMHgwMCwgMHg5RCwgMHgwMSwgMHg3NCwgMHgzQiwgMHgxMCwgMHhCRiwgMHg0MCwgMHg3NywKKzB4MDAsIDB4REQsIDB4MDEsIDB4NzQsIDB4MDcsIDB4RDAsIDB4QkYsIDB4NDAsIDB4MzgsIDB4MDUsIDB4OTEsIDB4MDEsIDB4NzQsCisweDA0LCAweEQwLCAweDExLCAweDQwLCAweDQ3LCAweDAwLCAweERELCAweDAwLCAweDc2LCAweDg2LCAweEQyLCAweDE5LCAweDQwLAorMHgwNywgMHgyMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMSwgMHhBMCwgMHgzMywgMHgyMCwgMHhDOCwKKzB4MDQsIDB4NjQsIDB4MDEsIDB4NTAsIDB4MDgsIDB4NDAsIDB4MjEsIDB4MDAsIDB4OEQsIDB4MDQsIDB4MDYsIDB4MDMsIDB4OTAsCisweDBDLCAweDQyLCAweEIzLCAweDAwLCAweDgxLCAweDAwLCAweDM0LCAweDEzLCAweDUwLCAweDBDLCAweDYwLCAweDMzLCAweDIwLAorMHhDRCwgMHg4MCwgMHgzNCwgMHgwMiwgMHg1MiwgMHgwQywgMHg2MCwgMHgzMCwgMHg0MCwgMHg4NSwgMHg0MCwgMHgxNiwgMHgwMCwKKzB4RDAsIDB4MDAsIDB4NDIsIDB4MDMsIDB4MDAsIDB4QzUsIDB4ODAsIDB4MzQsIDB4MDAsIDB4RDIsIDB4MDAsIDB4NDIsIDB4NDcsCisweDgwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweEE4LCAweDM1LCAweDAwLCAweEQxLCAweDAwLAorMHg0NCwgMHgwMiwgMHg1MCwgMHgxOSwgMHg0MCwgMHgyNiwgMHgwMCwgMHg5RCwgMHgyMywgMHg3NCwgMHgwMywgMHg1MCwgMHgwRCwKKzB4NDAsIDB4MzcsIDB4MDAsIDB4OUMsIDB4MDEsIDB4MzQsIDB4MDMsIDB4MTAsIDB4MEQsIDB4MDAsIDB4MzcsIDB4MDAsIDB4REQsCisweDA2LCAweDc0LCAweDAzLCAweEQwLCAweDBELCAweDQwLCAweDMwLCAweDEwLCAweDk1LCAweDAwLCAweDc0LCAweDBFLCAweEQwLAorMHgxMSwgMHg0MCwgMHg2NywgMHgwMCwgMHhERCwgMHgwMCwgMHg3NCwgMHgwNiwgMHhDMCwgMHgxOSwgMHg0MCwgMHgwRiwgMHgyMCwKKzB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4QTgsIDB4MzcsIDB4MDAsIDB4REIsIDB4ODAsIDB4MkMsCisweDEyLCAweDcxLCAweDExLCAweEMxLCAweDE3LCAweDAxLCAweDFGLCAweDAzLCAweDRDLCAweDAzLCAweEIwLCAweDBELCAweEMwLAorMHgzNywgMHgwMCwgMHgxMywgMHgwMywgMHg2QywgMHgwMywgMHg3MiwgMHgwRCwgMHhDOCwgMHgwNywgMHgwMSwgMHgxRSwgMHgwMCwKKzB4N0MsIDB4MDEsIDB4RjAsIDB4MEMsIDB4QzAsIDB4MzQsIDB4MDAsIDB4NTUsIDB4MDUsIDB4N0MsIDB4MDQsIDB4RDAsIDB4MzEsCisweEMwLCAweDQ3LCAweDAxLCAweERGLCAweEEwLCAweDc0LCAweDA0LCAweEYwLCAweDE5LCAweEMxLCAweDAzLCAweDIwLCAweDBFLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNywgMHg4MCwgMHgzOSwgMHgwMCwgMHhFRiwgMHgwMCwgMHhGQywgMHgwMiwKKzB4QjAsIDB4MDMsIDB4QzAsIDB4MkYsIDB4MDAsIDB4QkYsIDB4ODAsIDB4QkMsIDB4MDMsIDB4QjAsIDB4MEYsIDB4QzAsIDB4M0YsCisweDAwLCAweDNGLCAweDAwLCAweDdDLCAweDAzLCAweEQwLCAweDBGLCAweEMwLCAweDNGLCAweDAxLCAweEZGLCAweDQxLCAweEZDLAorMHgwMywgMHhGMCwgMHgwRiwgMHhDMSwgMHgzRiwgMHgwMCwgMHhCMywgMHgwOSwgMHhGOCwgMHgwMiwgMHhGMCwgMHgwMywgMHhDMCwKKzB4MEYsIDB4MDAsIDB4RkYsIDB4MDAsIDB4RjgsIDB4NDAsIDB4RjAsIDB4MDksIDB4QzEsIDB4MUYsIDB4MDAsIDB4MDYsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweDA4LCAweDM1LCAweDAwLCAweEQ3LCAweDAwLCAweDdDLCAweDAzLCAweEYwLAorMHgyOSwgMHhDMCwgMHgzNywgMHgwMCwgMHgxRiwgMHgyMiwgMHg2QywgMHgwMywgMHgzMCwgMHg4RCwgMHhDMCwgMHgzNywgMHgwMCwKKzB4MTMsIDB4NDYsIDB4N0MsIDB4MDMsIDB4QjIsIDB4MEQsIDB4QzQsIDB4MzQsIDB4MDAsIDB4REYsIDB4MDIsIDB4NEMsIDB4MTcsCisweEIwLCAweDhELCAweEMyLCAweDM3LCAweDEwLCAweDlGLCAweDgwLCAweDdFLCAweDA4LCAweEI0LCAweDgxLCAweEM4LCAweDI3LAorMHgxMSwgMHhERiwgMHgwMCwgMHg1RSwgMHgwMCwgMHhGMCwgMHgyOSwgMHhDMCwgMHgwOCwgMHgyMCwgMHgwNCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MTMsIDB4QTAsIDB4M0MsIDB4MDAsIDB4RjEsIDB4MDAsIDB4NDQsIDB4MTIsIDB4RDAsIDB4MDksCisweDQwLCAweDI3LCAweDIyLCAweDlELCAweEEwLCAweEM0LCAweDRCLCAweDUwLCAweDFGLCAweDQwLCAweDNGLCAweDAwLCAweDFBLAorMHgwMywgMHhGNCwgMHgwMywgMHgxMCwgMHgwRiwgMHg0MCwgMHg3NCwgMHgwMSwgMHhERCwgMHgwMCwgMHg0NCwgMHgwQiwgMHgxMCwKKzB4MkYsIDB4NDIsIDB4MzcsIDB4MDAsIDB4OTEsIDB4MEIsIDB4NzQsIDB4MDIsIDB4MjEsIDB4MDEsIDB4NDAsIDB4QTcsIDB4MDEsCisweERELCAweDAwLCAweDQ2LCAweDFBLCAweDkwLCAweDI5LCAweEMwLCAweDRFLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwNywgMHhBMCwgMHgzMiwgMHgwMCwgMHhDNSwgMHgwMCwgMHgxNCwgMHgxMywgMHhEMCwgMHgwMCwgMHg0MCwKKzB4MzIsIDB4MDIsIDB4MEQsIDB4MDAsIDB4MjQsIDB4MUYsIDB4MTAsIDB4MEMsIDB4NDgsIDB4MzMsIDB4MDAsIDB4MDQsIDB4MDAsCisweDM0LCAweDAzLCAweDkwLCAweDBDLCAweDQwLCAweDQzLCAweDAxLCAweDBELCAweEEwLCAweDI2LCAweDg4LCAweDEwLCAweDJDLAorMHg0OCwgMHgzMywgMHgwMCwgMHhDNCwgMHgwOCwgMHgzNCwgMHgwMCwgMHgxMCwgMHg1MCwgMHg0OCwgMHg0MiwgMHgyMCwgMHhDOSwKKzB4ODAsIDB4MjQsIDB4MDIsIDB4RDIsIDB4MjAsIDB4NDAsIDB4MUUsIDB4MDAsIDB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDA0LCAweDgwLCAweDcwLCAweDAwLCAweEMxLCAweDAxLCAweDg0LCAweDA2LCAweEQwLCAweDFFLCAweDQwLCAweDZCLAorMHgwMCwgMHg2RCwgMHgwMSwgMHg4NCwgMHgwNywgMHg1MCwgMHgxRSwgMHg0MCwgMHg3QiwgMHgwMiwgMHhBRCwgMHgyOSwgMHhCNCwKKzB4MDcsIDB4MTAsIDB4MUUsIDB4NDAsIDB4NEIsIDB4MDAsIDB4MkQsIDB4NDEsIDB4QjQsIDB4MDcsIDB4MTAsIDB4MUUsIDB4NjAsCisweDdCLCAweDIyLCAweEUxLCAweDQxLCAweEY0LCAweDA0LCAweDkwLCAweDkyLCAweDQwLCAweDdCLCAweDAwLCAweEVELCAweDAxLAorMHg4NCwgMHgwNiwgMHg5MCwgMHgxMiwgMHg0MCwgMHgxQSwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MTIsIDB4MTAsIDB4MzAsIDB4MDAsIDB4QzcsIDB4MDgsIDB4MUMsIDB4MDMsIDB4RDAsIDB4MDQsIDB4QzAsIDB4MjMsIDB4MDAsCisweENGLCAweDAwLCAweDJFLCAweDAzLCAweDMwLCAweDBDLCAweEU4LCAweDMzLCAweDAyLCAweDg3LCAweDEyLCAweDNDLCAweDAzLAorMHhCMCwgMHgwQywgMHhDMSwgMHgwMywgMHgyMCwgMHgwRCwgMHgwMSwgMHgyRCwgMHgxNiwgMHgzMCwgMHg4QywgMHhDMCwgMHgzMywKKzB4MDAsIDB4ODcsIDB4MDgsIDB4MzQsIDB4MDYsIDB4MzAsIDB4NTAsIDB4QzIsIDB4MTMsIDB4MDAsIDB4Q0YsIDB4MDAsIDB4M0MsCisweDAzLCAweEYwLCAweDg0LCAweEMwLCAweDRBLCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLAorMHhCOCwgMHgzRCwgMHgwMCwgMHhGQywgMHgyMiwgMHhEQywgMHgwMiwgMHhGMCwgMHgwRiwgMHg4MCwgMHgyRiwgMHgwMiwgMHhGRiwKKzB4MDAsIDB4OUMsIDB4NjMsIDB4RjAsIDB4QUYsIDB4QzAsIDB4MzMsIDB4NEEsIDB4OTMsIDB4MDAsIDB4RkMsIDB4MDMsIDB4RjAsCisweDBFLCAweEMxLCAweDBDLCAweDkyLCAweDFGLCAweDgwLCAweDBDLCAweDIzLCAweDc0LCAweDBGLCAweEMwLCAweDc3LCAweDAwLAorMHhCNywgMHgwOCwgMHg3QywgMHgwMiwgMHg3MCwgMHg4NywgMHhFMCwgMHgzRiwgMHgwMCwgMHhFRiwgMHgwMCwgMHhGRCwgMHgwMiwKKzB4RjAsIDB4MEYsIDB4QzIsIDB4MEIsIDB4NjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTUsIDB4QTAsCisweEI3LCAweDAzLCAweERGLCAweDAyLCAweDdDLCAweDAyLCAweDMwLCAweDA1LCAweEMwLCAweDM3LCAweDAwLCAweDdGLCAweDAxLAorMHg2QywgMHgwMywgMHhGMCwgMHgwRCwgMHhDMCwgMHhCNywgMHg4NiwgMHgxMywgMHgwMSwgMHg1QywgMHgwMywgMHg3MSwgMHg1RCwKKzB4QzAsIDB4NDAsIDB4OTAsIDB4MTMsIDB4MDAsIDB4N0MsIDB4MDEsIDB4MzgsIDB4MEQsIDB4QzQsIDB4MzcsIDB4MDAsIDB4RDMsCisweDgwLCAweDdDLCAweDAyLCAweEQwLCAweDExLCAweEMwLCAweDI0LCAweDgwLCAweENGLCAweDAwLCAweDRDLCAweDAwLCAweEYxLAorMHgwMSwgMHhDMCwgMHg1NywgMHgwMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHg4OCwgMHgzOSwKKzB4MDMsIDB4RUQsIDB4MDIsIDB4QjQsIDB4MDIsIDB4MTAsIDB4MDYsIDB4NDAsIDB4MkIsIDB4MDAsIDB4RkQsIDB4MDAsIDB4ODQsCisweDkzLCAweEQwLCAweDJFLCAweDQyLCAweDMzLCAweDIxLCAweEExLCAweDAwLCAweDg0LCAweDEzLCAweEQwLCAweENFLCAweDY4LAorMHgzOSwgMHgzMCwgMHhFMSwgMHgwMCwgMHhCNCwgMHgwMywgMHgxMCwgMHhDRSwgMHg0MCwgMHgzRiwgMHgxOSwgMHhFMSwgMHgyMCwKKzB4QjQsIDB4MDIsIDB4RDIsIDB4MDIsIDB4NDQsIDB4MzgsIDB4MTAsIDB4RUQsIDB4MDAsIDB4ODQsIDB4MDAsIDB4RDAsIDB4MDIsCisweDQwLCAweDRCLCAweDIwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweDAwLCAweDc5LCAweDAwLAorMHhFRCwgMHgwMSwgMHg5NCwgMHgwNywgMHgxMCwgMHgxRSwgMHg0MSwgMHg3QiwgMHgwOCwgMHg2RCwgMHgwMCwgMHhCNCwgMHgwNywKKzB4RDAsIDB4NUUsIDB4NDAsIDB4N0IsIDB4MDEsIDB4QjEsIDB4MjEsIDB4QjQsIDB4MjcsIDB4NTAsIDB4MUMsIDB4NTAsIDB4M0EsCisweDAwLCAweEUxLCAweDAxLCAweDk0LCAweDA3LCAweDkxLCAweDlFLCAweDQ0LCAweDNCLCAweDAzLCAweEExLCAweDAxLCAweEI0LAorMHg0NiwgMHhEOCwgMHgxMywgMHg0NCwgMHg3OCwgMHgwMCwgMHhFNSwgMHg4MSwgMHg4NCwgMHhDNywgMHhEMCwgMHgxQSwgMHg0MCwKKzB4MEYsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4MjgsIDB4MzMsIDB4MDgsIDB4Q0QsCisweDAwLCAweDM0LCAweDJFLCAweDE1LCAweDJDLCAweDQxLCAweDIzLCAweDIwLCAweENELCAweDEzLCAweDA0LCAweDAzLCAweEQwLAorMHgwQywgMHg0MCwgMHgzMywgMHgwMCwgMHhDMSwgMHgxMSwgMHgyNCwgMHgwMywgMHhEMCwgMHgwQywgMHg0NCwgMHgzNywgMHgwMCwKKzB4QzEsIDB4MDAsIDB4MzQsIDB4ODcsIDB4OTAsIDB4MEMsIDB4NDAsIDB4MzcsIDB4MDAsIDB4ODEsIDB4MDAsIDB4MzQsIDB4NDcsCisweEQwLCAweDBDLCAweDQwLCAweDMwLCAweDAwLCAweENELCAweDAwLCAweDA0LCAweDg3LCAweEQwLCAweEVDLCAweDQwLCAweDRCLAorMHgyMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNywgMHhBOCwgMHgxNSwgMHgwMCwgMHg1RiwgMHgwMCwKKzB4QkMsIDB4MEQsIDB4MzAsIDB4MDcsIDB4QzAsIDB4NUYsIDB4MDEsIDB4N0YsIDB4NDAsIDB4N0MsIDB4MDEsIDB4RDAsIDB4MDUsCisweEMwLCAweDE3LCAweDEwLCAweDczLCAweDAzLCAweDdDLCAweDAxLCAweDcxLCAweDA1LCAweEMwLCAweDlFLCAweEMwLCAweDczLAorMHgwOSwgMHg5QywgMHgwNSwgMHg5MSwgMHgwNSwgMHhDMCwgMHgxNywgMHgwMCwgMHg2MSwgMHgwMCwgMHhGNCwgMHgwMSwgMHhGMCwKKzB4MjcsIDB4NDAsIDB4MUMsIDB4ODAsIDB4NEYsIDB4MDAsIDB4QzQsIDB4OEQsIDB4RjAsIDB4MzcsIDB4NDAsIDB4NUYsIDB4MjAsCisweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDAwLCAweDA3LCAweDAwLCAweDFGLCAweDAwLCAweDdDLAorMHg0OCwgMHhGMCwgMHgwMSwgMHhDMCwgMHg4NywgMHgyMCwgMHgxRiwgMHgwOCwgMHg3QywgMHgwMCwgMHhGMCwgMHgwMSwgMHhFMCwKKzB4MDcsIDB4NDAsIDB4MUYsIDB4MDgsIDB4NUMsIDB4MDAsIDB4RjAsIDB4MDEsIDB4QzAsIDB4ODQsIDB4MjYsIDB4MUYsIDB4OEEsCisweDdDLCAweDIwLCAweDcwLCAweDIxLCAweEMwLCAweDA3LCAweDAwLCAweDFGLCAweDAyLCAweDdDLCAweDA4LCAweEYyLCAweDAxLAorMHhDMCwgMHg4NywgMHgzOSwgMHgxRiwgMHgwMCwgMHg3RCwgMHg0MCwgMHhGMCwgMHgwMSwgMHhDMCwgMHg0QiwgMHgwMCwgMHgwQywKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4MjcsIDB4MDAsIDB4OUYsIDB4MDAsIDB4NUMsIDB4MDYsCisweDMwLCAweDA5LCAweEMwLCAweDY3LCAweDAwLCAweDgzLCAweDAwLCAweDBDLCAweDAyLCAweEIyLCAweDA5LCAweEM4LCAweDI3LAorMHgwMiwgMHg5QiwgMHgwNSwgMHg3QywgMHgwMiwgMHhGMCwgMHgwOSwgMHhDMCwgMHgyNywgMHgyMCwgMHg5MSwgMHgwMCwgMHg3QywKKzB4MjIsIDB4QjQsIDB4OTgsIDB4QzAsIDB4MjUsIDB4MDAsIDB4OTMsIDB4NDAsIDB4NEMsIDB4MjYsIDB4MzAsIDB4MDksIDB4QzEsCisweDY3LCAweDAyLCAweDlCLCAweDAwLCAweDBDLCAweDAyLCAweDMwLCAweDM5LCAweEMwLCAweDQzLCAweDIwLCAweDBDLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgyNiwgMHgwMCwgMHg5RCwgMHgwMCwgMHg0NCwgMHgwMiwgMHgxNCwKKzB4MDksIDB4QzAsIDB4MjEsIDB4MDIsIDB4OTUsIDB4MDAsIDB4NDQsIDB4MDIsIDB4MzAsIDB4MDksIDB4QzAsIDB4MjMsIDB4MDAsCisweDkwLCAweDAxLCAweDc0LCAweDAyLCAweEQwLCAweDk5LCAweDQwLCAweDI3LCAweDAwLCAweDkxLCAweDA0LCAweDdDLCAweDBFLAorMHgxMCwgMHgwOSwgMHg0MCwgMHgyQywgMHgwMCwgMHg5QiwgMHgxMiwgMHgyQywgMHgwRSwgMHgxNCwgMHg5OSwgMHg0MCwgMHhFMywKKzB4NDAsIDB4OTEsIDB4MDAsIDB4NDQsIDB4MEEsIDB4NTAsIDB4MzksIDB4NDgsIDB4MDcsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDE4LCAweEEwLCAweDI0LCAweDgwLCAweDhELCAweDAwLCAweDU0LCAweDIyLCAweDEwLCAweDA5LAorMHg2MCwgMHgyNywgMHgwMCwgMHg5MSwgMHgwMCwgMHg0NCwgMHgwMiwgMHg5MCwgMHgwOSwgMHg0NCwgMHgyNywgMHgwMCwgMHg5OSwKKzB4MDAsIDB4NzAsIDB4MDIsIDB4RDgsIDB4MDksIDB4NDAsIDB4NjcsIDB4MDAsIDB4OTUsIDB4MjAsIDB4NzYsIDB4MEEsIDB4MTgsCisweDA5LCAweDQxLCAweDI1LCAweDAwLCAweDkxLCAweDA4LCAweDQwLCAweDAyLCAweDEwLCAweDBELCAweDQwLCAweDI3LCAweDA0LAorMHg5MSwgMHgwMSwgMHg0NCwgMHg0NywgMHgxMSwgMHgyOSwgMHg0MCwgMHg2MywgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MTAsIDB4MjAsIDB4QTAsIDB4MDEsIDB4OEQsIDB4MDQsIDB4MDQsIDB4MDIsIDB4MTAsIDB4NDgsIDB4NDAsCisweEE1LCAweEEwLCAweDg1LCAweDE0LCAweDA0LCAweDAyLCAweDkwLCAweDA4LCAweDQwLCAweDIxLCAweDAwLCAweEM5LCAweDAwLAorMHgzNCwgMHgyMiwgMHhEMiwgMHgwOCwgMHg0MCwgMHgyNywgMHgwMCwgMHg4NSwgMHgwMCwgMHg3NCwgMHgwMiwgMHgxQSwgMHgwOCwKKzB4NDAsIDB4MjAsIDB4MDIsIDB4OTksIDB4MjAsIDB4MjQsIDB4MDMsIDB4MTAsIDB4MEMsIDB4NDAsIDB4MjcsIDB4MDAsIDB4ODEsCisweDAxLCAweDA0LCAweDEyLCAweDUwLCAweDQ4LCAweDQwLCAweDQzLCAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgxRCwgMHhCMCwgMHgwNiwgMHgwMCwgMHgxRCwgMHg4QSwgMHg1NCwgMHgwMSwgMHgzMSwgMHgwMSwgMHhDMSwgMHg5NywKKzB4MDAsIDB4MTMsIDB4MEEsIDB4NEMsIDB4NTAsIDB4QjAsIDB4NDEsIDB4NDEsIDB4MDcsIDB4MDUsIDB4MUIsIDB4MDAsIDB4N0MsCisweDU4LCAweEQwLCAweDQxLCAweDQxLCAweDE3LCAweDAwLCAweDE3LCAweDIwLCAweDdFLCAweDAwLCAweEIwLCAweDQxLCAweEMxLAorMHhDNSwgMHgwMCwgMHgxMywgMHgwMCwgMHg0RCwgMHgwMCwgMHgzMCwgMHgwMSwgMHhDMCwgMHgwNywgMHgwMCwgMHgxMywgMHgwQSwKKzB4NEMsIDB4MDAsIDB4MzMsIDB4MDEsIDB4QzIsIDB4NzcsIDB4QzAsIDB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDE5LCAweEI4LCAweDY3LCAweDAyLCAweDlGLCAweDA4LCAweEJDLCAweDAyLCAweEQwLCAweDBCLCAweEM4LCAweDJELCAweDAxLAorMHhCRiwgMHgwMCwgMHg3QywgMHgwMiwgMHg3MCwgMHgwOSwgMHhDMCwgMHgyNywgMHgwMCwgMHhBNiwgMHgwMCwgMHg3QywgMHgxMiwKKzB4RjAsIDB4MDksIDB4QzAsIDB4MkYsIDB4MDAsIDB4QkIsIDB4MDAsIDB4OUMsIDB4ODIsIDB4RjAsIDB4MDksIDB4QzAsIDB4QTcsCisweDA5LCAweEJGLCAweDYwLCAweERDLCAweDgyLCAweEYwLCAweDBBLCAweEMwLCAweDJGLCAweDA4LCAweDk3LCAweDAwLCAweEZELAorMHgyMiwgMHhGMCwgMHg4QiwgMHhDMCwgMHg2NywgMHg0OCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwKKzB4QTAsIDB4MjcsIDB4MDUsIDB4OUYsIDB4MEMsIDB4RkMsIDB4MDIsIDB4RjAsIDB4MDksIDB4NDAsIDB4MkYsIDB4MDIsIDB4OUYsCisweDg0LCAweEY0LCAweEQyLCAweDcwLCAweDRCLCAweEMwLCAweDJDLCAweDAwLCAweEJGLCAweDAwLCAweDdDLCAweDIyLCAweDcwLAorMHg0QiwgMHhDMCwgMHgyQywgMHgwMCwgMHhCNywgMHgyMCwgMHhGQywgMHgwMiwgMHhGMCwgMHgwQiwgMHhDMiwgMHg2NCwgMHgwMywKKzB4QTUsIDB4ODAsIDB4Q0MsIDB4MDIsIDB4NzEsIDB4MEIsIDB4NDAsIDB4MkQsIDB4MDAsIDB4QkIsIDB4MjAsIDB4Q0MsIDB4MDIsCisweEYwLCAweDBCLCAweDgyLCAweDY0LCAweDIwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFDLCAweDA4LAorMHg0NywgMHgwNSwgMHgxRCwgMHg0QywgMHg3NCwgMHgwMCwgMHhDMCwgMHgwMSwgMHg0NCwgMHgwNywgMHgyMCwgMHgxRCwgMHhCNCwKKzB4NzQsIDB4MDAsIDB4NzAsIDB4ODEsIDB4NDAsIDB4ODQsIDB4MDAsIDB4MTksIDB4ODAsIDB4NzQsIDB4QTAsIDB4RDAsIDB4MDEsCisweDQ0LCAweDA2LCAweDAwLCAweDEzLCAweDgwLCAweDVDLCAweDAwLCAweEQwLCAweDAxLCAweDQwLCAweDg0LCAweDEwLCAweDU3LAorMHgwMCwgMHg0QywgMHgwMCwgMHhEMCwgMHgwMSwgMHhDMCwgMHgxNSwgMHgyMCwgMHgxOSwgMHg1MCwgMHg2QywgMHgwMCwgMHhEMCwKKzB4MDEsIDB4NTAsIDB4NzAsIDB4NjAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4QTAsIDB4MjMsCisweDAwLCAweDhELCAweDA0LCAweDM0LCAweDAyLCAweEQwLCAweDg4LCAweDQwLCAweDIzLCAweDAwLCAweDhELCAweDBDLCAweDM0LAorMHgwMiwgMHg1MCwgMHgwOCwgMHg0MCwgMHgyMCwgMHgwMiwgMHg4RCwgMHgwMCwgMHgzNCwgMHgwMiwgMHg1MCwgMHg4OCwgMHg0OCwKKzB4MjYsIDB4ODAsIDB4OEQsIDB4MDAsIDB4MzQsIDB4MDIsIDB4RDAsIDB4ODgsIDB4NDAsIDB4QTAsIDB4MjAsIDB4ODUsIDB4MDAsCisweDE3LCAweDgyLCAweDUwLCAweDA4LCAweDQwLCAweDIxLCAweDAwLCAweDhELCAweDAwLCAweDI0LCAweDAyLCAweEQwLCAweDA4LAorMHg0MCwgMHg0MCwgMHg4MCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHhBOCwgMHgyNSwgMHgwMCwKKzB4OUQsIDB4MDAsIDB4NzQsIDB4MTMsIDB4RDAsIDB4MDksIDB4NDAsIDB4QTcsIDB4MDAsIDB4OUQsIDB4MTAsIDB4NzQsIDB4MDIsCisweDUwLCAweDA5LCAweDQwLCAweDI0LCAweDAwLCAweEQ5LCAweDAwLCAweDc0LCAweDAyLCAweEQwLCAweDA5LCAweDQwLCAweDI2LAorMHgwMCwgMHg5MSwgMHgwNiwgMHg1NiwgMHgwMiwgMHhEMCwgMHgwOSwgMHg0MCwgMHgyNCwgMHgxMCwgMHg5NSwgMHgwOCwgMHg0NCwKKzB4MDYsIDB4RDgsIDB4MTksIDB4NDAsIDB4MjUsIDB4MDAsIDB4OTksIDB4MDAsIDB4NjQsIDB4MDYsIDB4RDAsIDB4MTksIDB4MDAsCisweDYwLCAweDAwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDI4LCAweDJELCAweDAwLCAweDlGLAorMHgwMCwgMHg3QywgMHgwNiwgMHhGMCwgMHg1OSwgMHhDMCwgMHhBNywgMHgwMiwgMHg5RiwgMHgwMywgMHg3QywgMHgwMiwgMHg3MCwKKzB4MDksIDB4QzQsIDB4MjQsIDB4MDAsIDB4OUYsIDB4MDUsIDB4N0MsIDB4MDIsIDB4NzAsIDB4MDksIDB4QzAsIDB4NjAsIDB4MDEsCisweDlGLCAweDAwLCAweDdDLCAweDQyLCAweEYwLCAweDA5LCAweEMwLCAweDI0LCAweDAwLCAweDk3LCAweDAwLCAweDVDLCAweDQ2LAorMHg3MCwgMHg1OSwgMHhDRSwgMHhFNSwgMHgwMiwgMHg5QiwgMHgwMCwgMHg2QywgMHg0RSwgMHhGMCwgMHgxOSwgMHhDMSwgMHgxNCwKKzB4ODAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDAsIDB4MjUsIDB4MDAsIDB4OUYsIDB4MDAsCisweDdDLCAweDAyLCAweEYwLCAweDI5LCAweEMwLCAweDY3LCAweDAwLCAweDlGLCAweDA0LCAweDdDLCAweDAyLCAweEYwLCAweDA5LAorMHg1MCwgMHgyNywgMHgyNCwgMHg5RiwgMHgwOSwgMHg3QywgMHgwMiwgMHhGMCwgMHgwOSwgMHhDNCwgMHg2NSwgMHgwMiwgMHg5RiwKKzB4NDEsIDB4NzgsIDB4MDIsIDB4RjEsIDB4MDgsIDB4RDAsIDB4MjcsIDB4MDgsIDB4OUYsIDB4MDEsIDB4NzgsIDB4MDIsIDB4RjAsCisweDA5LCAweEMwLCAweDY3LCAweDgwLCAweDlFLCAweDAwLCAweDc4LCAweDAyLCAweEYxLCAweDA4LCAweEMwLCAweDUzLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwOCwgMHgwNSwgMHgwMCwgMHgxRiwgMHgwMCwgMHg1QywKKzB4MDAsIDB4RjgsIDB4MDEsIDB4QzAsIDB4MDcsIDB4MDAsIDB4MTMsIDB4MDAsIDB4N0MsIDB4MDAsIDB4RjAsIDB4ODAsIDB4QzAsCisweDA3LCAweDAwLCAweDFGLCAweDAzLCAweDdDLCAweDAwLCAweEQyLCAweDAwLCAweEQwLCAweDA0LCAweDAwLCAweDFGLCAweDEyLAorMHg0QywgMHg0MCwgMHhCMCwgMHg4MSwgMHhDMCwgMHgwNCwgMHgwMCwgMHgxRiwgMHgwMiwgMHg3QywgMHgxOCwgMHhGMCwgMHgyMSwKKzB4QzAsIDB4MDcsIDB4MDQsIDB4MTMsIDB4MDAsIDB4NEMsIDB4MTgsIDB4MzAsIDB4MDEsIDB4QzAsIDB4NTMsIDB4MDAsIDB4MDQsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDAwLCAweDE0LCAweDAwLCAweDVELCAweDAwLCAweEM0LCAweDAxLAorMHg3MCwgMHgwNSwgMHg0MCwgMHg5RiwgMHgwOCwgMHg1MSwgMHgwMCwgMHhGNCwgMHg2RCwgMHhEMCwgMHgxNSwgMHg0MCwgMHg5RiwKKzB4MDAsIDB4N0QsIDB4MTAsIDB4NzQsIDB4MDEsIDB4RDEsIDB4MTUsIDB4NDMsIDB4OUMsIDB4MTAsIDB4N0QsIDB4MDAsIDB4RUMsCisweDExLCAweDcwLCAweDM3LCAweEM4LCAweDE2LCAweDAwLCAweDZELCAweDEwLCAweEM1LCAweDAxLCAweEQwLCAweDg3LCAweDQwLAorMHg1RiwgMHgwNCwgMHg2MSwgMHgxOCwgMHhDNCwgMHgwOSwgMHhCMCwgMHgwNywgMHg0MCwgMHg1MywgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4QTAsIDB4MzIsIDB4MDAsIDB4Q0QsIDB4MDAsIDB4MTQsIDB4MDEsIDB4NTAsCisweDBDLCAweDQ4LCAweEIzLCAweDA0LCAweEMxLCAweDAwLCAweDM2LCAweDBFLCAweEQwLCAweDA4LCAweDQwLCAweEIzLCAweDAwLAorMHhDRCwgMHgwMSwgMHgzNCwgMHgwMywgMHhEOCwgMHgxQywgMHg0NCwgMHhCMiwgMHg4MSwgMHhDRCwgMHgwQiwgMHgyNCwgMHgwMywKKzB4NTAsIDB4M0MsIDB4NDEsIDB4MzEsIDB4MDAsIDB4Q0QsIDB4MTEsIDB4MDQsIDB4MEUsIDB4RDAsIDB4MkMsIDB4NDAsIDB4NzMsCisweDAwLCAweEMxLCAweDQwLCAweDA0LCAweDAzLCAweDEwLCAweEFDLCAweDYxLCAweDUzLCAweDAwLCAweDBBLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHg4MCwgMHgzOCwgMHgwMSwgMHhFRCwgMHgwOSwgMHg4NCwgMHgwMSwgMHg1MCwgMHgwRSwKKzB4NDAsIDB4RkIsIDB4NDAsIDB4RTEsIDB4MDAsIDB4QjYsIDB4MDIsIDB4RDAsIDB4MEUsIDB4NDAsIDB4M0IsIDB4MDQsIDB4RUQsCisweDIwLCAweEI0LCAweDkzLCAweEQwLCAweDFFLCAweDQwLCAweEFBLCAweDA4LCAweEZELCAweDAxLCAweEE0LCAweDAwLCAweDUxLAorMHgwRSwgMHg0MCwgMHgzQiwgMHgwMiwgMHgyRCwgMHgwMCwgMHg4NiwgMHgwQSwgMHhEMCwgMHgwRSwgMHg2MCwgMHg3QiwgMHgwOCwKKzB4RTEsIDB4MDAsIDB4MDUsIDB4ODcsIDB4OTAsIDB4MEUsIDB4NjAsIDB4MTMsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDE0LCAweDEwLCAweDc4LCAweDAxLCAweEZGLCAweDA1LCAweDlDLCAweDA1LCAweDcwLCAweDFFLCAweEMwLAorMHg3RiwgMHgwMCwgMHhFMywgMHgwRiwgMHhCQywgMHgwNiwgMHhGMCwgMHgxQSwgMHg0MCwgMHg3QiwgMHgwMCwgMHgyRCwgMHgwMSwKKzB4QjQsIDB4M0YsIDB4RjAsIDB4MEMsIDB4Q0MsIDB4NEEsIDB4ODAsIDB4RUYsIDB4MDEsIDB4QUUsIDB4MDQsIDB4NzAsIDB4MUMsCisweEMwLCAweDc5LCAweDA1LCAweDJELCAweDAxLCAweDlDLCAweDA3LCAweEU5LCAweDFFLCAweEMwLCAweDdCLCAweDQwLCAweEUxLAorMHgyMSwgMHg4QywgMHgwNSwgMHgzMCwgMHgxNiwgMHhDMCwgMHg1MywgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MTAsIDB4QjgsIDB4MzUsIDB4MDAsIDB4REYsIDB4MTAsIDB4N0MsIDB4MDEsIDB4NzAsIDB4MEQsIDB4QzAsIDB4MzcsCisweDAwLCAweERGLCAweDA0LCAweDdDLCAweDAyLCAweEYyLCAweDBELCAweEM0LCAweDM3LCAweDAwLCAweERGLCAweDAwLCAweDdDLAorMHg4MywgMHhGMSwgMHgwRCwgMHhDMiwgMHgyNSwgMHgwMCwgMHhDRiwgMHg0MCwgMHg3QywgMHgwMCwgMHg2MCwgMHgwRCwgMHhDMCwKKzB4QjYsIDB4MjAsIDB4MUYsIDB4MDAsIDB4NTgsIDB4ODMsIDB4RkEsIDB4MDksIDB4QzAsIDB4MTMsIDB4MDgsIDB4Q0YsIDB4MDAsCisweDc0LCAweDAyLCAweEYxLCAweDA1LCAweEMwLCAweDQzLCAweDYwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMiwgMHhBMiwgMHg3RiwgMHgxNCwgMHhGRiwgMHgwMSwgMHhGQywgMHgxMSwgMHhGMCwgMHgxRiwgMHhDMCwgMHg3RiwgMHgwMiwKKzB4RkYsIDB4MDksIDB4RkMsIDB4MDYsIDB4MzAsIDB4OUYsIDB4QzAsIDB4N0UsIDB4MDIsIDB4RkYsIDB4MDksIDB4RkMsIDB4MDcsCisweDcwLCAweDFGLCAweEM4LCAweDZGLCAweDAyLCAweEVGLCAweDQxLCAweERDLCAweDI0LCAweEYwLCAweDFFLCAweEMwLCAweDdDLAorMHgwMCwgMHgzMywgMHgwOSwgMHhGOCwgMHgwNywgMHhGMCwgMHg5RiwgMHhDMCwgMHg3RiwgMHgwMiwgMHhGQiwgMHg0MSwgMHhDQywKKzB4MDUsIDB4MzAsIDB4OTcsIDB4QzQsIDB4MEIsIDB4MDAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTUsCisweDg4LCAweDM5LCAweDAwLCAweEVELCAweDAwLCAweEI0LCAweDQxLCAweEQxLCAweDBFLCAweEMwLCAweDM5LCAweDIzLCAweEVELAorMHgwOCwgMHhCNCwgMHgwMiwgMHhCMCwgMHg4RSwgMHgwOCwgMHgzOCwgMHgwMCwgMHhFRCwgMHgwOCwgMHhEQywgMHgyMywgMHgzMCwKKzB4NEUsIDB4NDQsIDB4NkIsIDB4MkEsIDB4QzksIDB4QzAsIDB4MTAsIDB4MjAsIDB4RDAsIDB4ODIsIDB4NDAsIDB4MzksIDB4MDAsCisweDJELCAweDBDLCAweDM0LCAweDA3LCAweEQwLCAweDA0LCAweDAwLCAweDNCLCAweDA3LCAweEU3LCAweDA4LCAweEFDLCAweDI5LAorMHgzMCwgMHhBRSwgMHhDMCwgMHg1NSwgMHgyMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4NzksIDB4MDAsIDB4RUQsIDB4MDAsIDB4QjQsIDB4MjEsIDB4RDAsIDB4MEUsIDB4NDAsIDB4MUIsIDB4MjQsIDB4RUQsIDB4NDAsCisweDk2LCAweDAyLCAweDkwLCAweDhFLCAweDQ4LCAweDI5LCAweDA4LCAweDJELCAweDAwLCAweDkwLCAweDAzLCAweDUwLCAweDBBLAorMHg0OCwgMHgwQiwgMHgwNywgMHg2NSwgMHgxOCwgMHg5NCwgMHg0MCwgMHhEMCwgMHgwRSwgMHg0MCwgMHgzMSwgMHgwMCwgMHgyRCwKKzB4ODAsIDB4QjQsIDB4NDMsIDB4RDAsIDB4MEUsIDB4NDgsIDB4MkIsIDB4MDAsIDB4NjUsIDB4MDAsIDB4ODQsIDB4MDEsIDB4OTAsCisweDgyLCAweDQwLCAweDYzLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA2LCAweDI4LCAweDMzLAorMHgwMCwgMHhDRCwgMHgwMCwgMHgzNCwgMHgwRCwgMHhEMCwgMHgyQywgMHg0MCwgMHhFMSwgMHgwNCwgMHhDRCwgMHgwMiwgMHgzNCwKKzB4MDIsIDB4ODAsIDB4MEMsIDB4NTAsIDB4MjEsIDB4MTAsIDB4Q0QsIDB4MTIsIDB4MTQsIDB4MDMsIDB4MTAsIDB4MDgsIDB4NDAsCisweDYzLCAweDExLCAweDQ5LCAweDAxLCAweDA0LCAweDBDLCAweEMwLCAweDAwLCAweDQyLCAweDMxLCAweDAwLCAweDBELCAweDAwLAorMHgzNCwgMHg0QiwgMHhEOCwgMHg5MCwgMHg0MiwgMHg3MywgMHgwMSwgMHg0NSwgMHgwMCwgMHgyNCwgMHgyRSwgMHgxNCwgMHgxOCwKKzB4NDAsIDB4MTksIDB4MjAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTUsIDB4QTgsIDB4MzUsIDB4MDAsCisweEZGLCAweDAwLCAweDNDLCAweDBGLCAweEYwLCAweDJELCAweEMxLCAweDgzLCAweDAwLCAweEZGLCAweDA1LCAweDVFLCAweDAzLAorMHhCMCwgMHgwOCwgMHhDMCwgMHgzNSwgMHgwMCwgMHhDRiwgMHg4MSwgMHhEQywgMHg4MywgMHg3MCwgMHgwOSwgMHhDMiwgMHgyMywKKzB4MTAsIDB4RDcsIDB4MDAsIDB4NUMsIDB4MDAsIDB4RjAsIDB4MEQsIDB4QzAsIDB4M0QsIDB4MDgsIDB4MTcsIDB4MTgsIDB4NzQsCisweDAzLCAweEYwLCAweDM5LCAweDY4LCAweDM3LCAweDEwLCAweEQ3LCAweDAwLCAweDRDLCAweDgyLCAweEI4LCAweDU5LCAweEMwLAorMHg3NywgMHgyMSwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgzNywgMHgwMCwgMHhERiwKKzB4NDAsIDB4N0MsIDB4MTEsIDB4RjAsIDB4NEQsIDB4QzIsIDB4ODcsIDB4MDAsIDB4REYsIDB4MDAsIDB4N0MsIDB4MEEsIDB4RjEsCisweDBELCAweDQwLCAweEI0LCAweDAwLCAweERGLCAweDAxLCAweDVDLCAweDAzLCAweDcwLCAweDBELCAweDgyLCAweEE3LCAweDAwLAorMHhEQywgMHg0NCwgMHg3QywgMHgwMCwgMHhGMiwgMHgwRCwgMHhDMCwgMHgzMywgMHgwMCwgMHgxNiwgMHgyMCwgMHg3QywgMHgwMywKKzB4RjAsIDB4MDksIDB4QzUsIDB4MzYsIDB4MDAsIDB4RDcsIDB4MDAsIDB4N0MsIDB4MDIsIDB4RjAsIDB4MDksIDB4QzksIDB4MDcsCisweDAwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDA4LCAweDNGLCAweDAwLCAweEZCLCAweDAwLAorMHhGQywgMHgwQiwgMHgzMCwgMHgwRSwgMHhDMCwgMHgyQywgMHgwMCwgMHhGMywgMHgxMCwgMHhGQywgMHgyNywgMHhGMCwgMHgwOSwKKzB4QzAsIDB4MzgsIDB4NDAsIDB4MzMsIDB4MDUsIDB4Q0MsIDB4MDMsIDB4RjAsIDB4MEEsIDB4QzAsIDB4MEMsIDB4MDAsIDB4RjMsCisweEEwLCAweEU4LCAweEMwLCAweDMwLCAweDEzLCAweEMwLCAweDNGLCAweDAwLCAweDNCLCAweDAxLCAweENDLCAweDA1LCAweEYwLAorMHgwMywgMHhDMiwgMHgzRCwgMHgwMCwgMHhGQiwgMHgwMSwgMHg3QywgMHg0MiwgMHhGMCwgMHgwMiwgMHg0MCwgMHgwNCwgMHgyOCwKKzB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODEsIDB4MjAsIDB4MzYsIDB4MDAsIDB4RDEsIDB4MDAsIDB4NzQsCisweDAyLCAweDE0LCAweDBELCAweDYwLCAweDY0LCAweDgxLCAweEQ1LCAweDAwLCAweDc0LCAweDBFLCAweEQwLCAweDBELCAweDQwLAorMHgzNSwgMHg4MSwgMHhEMSwgMHgyMywgMHg0QywgMHgwMywgMHgzMCwgMHgwRCwgMHg0MCwgMHhFNSwgMHgwMCwgMHhDMSwgMHgwMCwKKzB4MTAsIDB4MjAsIDB4QjAsIDB4NTEsIDB4NDAsIDB4MzcsIDB4MDAsIDB4MDUsIDB4NDMsIDB4NDQsIDB4MTUsIDB4RDAsIDB4MTEsCisweDQzLCAweDEzLCAweDAwLCAweEQxLCAweDAwLCAweDdDLCAweDBFLCAweEQxLCAweDMxLCAweDUwLCAweDA0LCAweDA2LCAweDA4LAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHhBMCwgMHgzMiwgMHgwMCwgMHhEOSwgMHgwMCwgMHg3NCwgMHgwMywKKzB4OTIsIDB4MEQsIDB4NTAsIDB4NDQsIDB4MDgsIDB4RDEsIDB4MDAsIDB4NzQsIDB4QzMsIDB4REEsIDB4MEQsIDB4MDAsIDB4MTQsCisweDIwLCAweDExLCAweDQwLCAweDY0LCAweDAzLCAweEQwLCAweDQ5LCAweDQwLCAweEM0LCAweDAwLCAweDkxLCAweDA4LCAweDc0LAorMHg0MCwgMHg5MCwgMHg0RCwgMHg0MCwgMHgzNywgMHgwMCwgMHgxNSwgMHgxNCwgMHg2NCwgMHgyMywgMHhEMSwgMHgxOSwgMHgwNCwKKzB4MzcsIDB4MDAsIDB4OTEsIDB4MDQsIDB4NzQsIDB4MDQsIDB4RDksIDB4MTksIDB4NDAsIDB4MDUsIDB4MDAsIDB4MEEsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDIwLCAweDMwLCAweDAwLCAweEMxLCAweDAwLCAweDc0LCAweDAxLCAweDkwLAorMHgwQywgMHg0MCwgMHgwNCwgMHgwMCwgMHhDNSwgMHgwMCwgMHgzNCwgMHgwMSwgMHhEMCwgMHgwQywgMHg0MCwgMHgxMSwgMHgxMCwKKzB4MDEsIDB4MDAsIDB4MjQsIDB4MDMsIDB4NTAsIDB4MEMsIDB4NDYsIDB4MDUsIDB4RTEsIDB4OTEsIDB4MDIsIDB4NTQsIDB4MjAsCisweDkwLCAweDAwLCAweDQwLCAweDMzLCAweDAwLCAweDE1LCAweDAwLCAweDA1LCAweEIzLCAweEQ4LCAweDAwLCAweDAwLCAweDMzLAorMHhDMCwgMHg4MSwgMHg0MCwgMHgyNCwgMHgwMCwgMHhEMCwgMHgwOCwgMHg2MCwgMHg0MCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OTAsIDB4M0UsIDB4MDAsIDB4RkIsIDB4MDAsIDB4N0MsIDB4MDMsIDB4QjAsIDB4MEQsCisweDQwLCAweDA0LCAweDAwLCAweEYxLCAweDAwLCAweDdDLCAweDAzLCAweEYwLCAweDBELCAweEMwLCAweDA0LCAweDAwLCAweDExLAorMHgwMCwgMHhFQywgMHgwMywgMHhGMCwgMHgwOSwgMHhDMCwgMHgwNCwgMHgwNSwgMHgxMywgMHgwMiwgMHg2QywgMHgwMCwgMHhCMCwKKzB4MDEsIDB4NDAsIDB4M0YsIDB4MDAsIDB4MTcsIDB4MDAsIDB4NkMsIDB4MDMsIDB4RjIsIDB4QTEsIDB4QzAsIDB4MjcsIDB4MDAsCisweDQzLCAweDAwLCAweDdDLCAweDAyLCAweEYwLCAweDA5LCAweEM4LCAweDA1LCAweDQwLCAweDA4LCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwNSwgMHhCOCwgMHgzRiwgMHgwMCwgMHhGRiwgMHgwMCwgMHhGQywgMHgwMiwgMHg3MCwgMHgwRiwgMHhDMCwKKzB4MkYsIDB4MDAsIDB4RkYsIDB4MDAsIDB4QkMsIDB4MDEsIDB4RjAsIDB4MEYsIDB4QzAsIDB4MEYsIDB4MDAsIDB4M0YsIDB4MDAsCisweEQwLCAweDAzLCAweDMwLCAweDBCLCAweEMwLCAweDA3LCAweDEwLCAweDNGLCAweDgwLCAweEVDLCAweDkwLCAweEYwLCAweDAzLAorMHhDMCwgMHgzRiwgMHgwMCwgMHgzQywgMHgwMCwgMHg3QywgMHgxQiwgMHhGMCwgMHg0MywgMHhDMCwgMHgzRiwgMHgwMCwgMHg3RiwKKzB4MDAsIDB4REMsIDB4MDIsIDB4RjAsIDB4MEIsIDB4QzgsIDB4MTcsIDB4NjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAzLCAweDgwLCAweDBGLCAweDA2LCAweEFGLCAweDAwLCAweEVDLCAweDAyLCAweEUwLCAweDFFLCAweEMwLCAweDBGLAorMHgwNSwgMHhGQiwgMHgwQywgMHhGQywgMHg1MCwgMHgzMCwgMHg0MywgMHhDMCwgMHgyQywgMHgwMSwgMHgzMywgMHgwMCwgMHhDQywKKzB4MDMsIDB4MzAsIDB4MUYsIDB4QzAsIDB4MEYsIDB4MDUsIDB4MjMsIDB4MDEsIDB4RUMsIDB4MDMsIDB4QjAsIDB4MTMsIDB4QzAsCisweDNGLCAweDAxLCAweDNCLCAweDAxLCAweEM0LCAweDA2LCAweEI2LCAweDgzLCAweEMwLCAweDBELCAweDAzLCAweDM3LCAweDAwLAorMHhBQywgMHgyNywgMHgzMCwgMHgxRSwgMHhDMCwgMHgwRSwgMHgyMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDEsIDB4MTAsIDB4ODcsIDB4MDEsIDB4OUQsIDB4MDEsIDB4NDQsIDB4MDAsIDB4RDAsIDB4MEQsIDB4NDAsIDB4ODMsIDB4MDAsCisweEYxLCAweDA4LCAweDc0LCAweDEwLCAweDEwLCAweDA5LCAweDQwLCAweEI0LCAweDA3LCAweDU1LCAweDEwLCAweDg0LCAweDJCLAorMHgxMCwgMHg0MSwgMHhDMywgMHg0NCwgMHgwMCwgMHgxMSwgMHgwMSwgMHhDNCwgMHgwNywgMHhCMCwgMHgxNSwgMHhDMCwgMHhCRCwKKzB4MTIsIDB4RDEsIDB4MDEsIDB4NDQsIDB4NDIsIDB4MTAsIDB4RTEsIDB4NDAsIDB4OTAsIDB4MDMsIDB4MTEsIDB4MjMsIDB4NDQsCisweDEyLCAweDEwLCAweDExLCAweDQwLCAweDBDLCAweDIwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDExLAorMHhBMCwgMHgwMywgMHgwMCwgMHg4RCwgMHg4MCwgMHgxNCwgMHgwNiwgMHhDMCwgMHgwQywgMHg0MCwgMHgwMSwgMHgwMCwgMHhDOSwKKzB4MDQsIDB4MzYsIDB4NDAsIDB4MTAsIDB4NjQsIDB4NDksIDB4MjAsIDB4MDksIDB4MDEsIDB4MDgsIDB4MDQsIDB4QzMsIDB4MTAsCisweDQ0LCAweDQwLCAweDEzLCAweDAwLCAweDAxLCAweDAwLCAweDE0LCAweDBCLCAweDk4LCAweDA4LCAweDQyLCAweDMzLCAweDk1LAorMHgxNSwgMHgwMCwgMHg2NCwgMHgxMywgMHgxMCwgMHg0OCwgMHg0OCwgMHgwMSwgMHgwMCwgMHgwNSwgMHg4MiwgMHg3NiwgMHgxMSwKKzB4MTEsIDB4MEMsIDB4NTAsIDB4NEMsIDB4ODAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4QTAsCisweDQ1LCAweDAwLCAweERELCAweDIyLCAweDU0LCAweDA0LCAweEQxLCAweDBELCAweDQwLCAweDQ3LCAweDEwLCAweEQxLCAweDAwLAorMHg3NCwgMHgwOSwgMHgxMCwgMHgwRCwgMHg0MCwgMHgzNCwgMHgwMCwgMHhENSwgMHgxMCwgMHg0NCwgMHgwMywgMHgxMCwgMHgyMSwKKzB4NDAsIDB4ODQsIDB4MDAsIDB4MTEsIDB4MDEsIDB4NTQsIDB4MDMsIDB4ODAsIDB4MEQsIDB4NDIsIDB4MzUsIDB4MDAsIDB4MTUsCisweDEwLCAweDY0LCAweDAyLCAweDEwLCAweDA5LCAweDQ0LCAweDI1LCAweDA0LCAweEQ1LCAweDE0LCAweDU0LCAweDAzLCAweDEwLAorMHgwOSwgMHgwMCwgMHgwQywgMHgwMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHhBOCwgMHg0NywKKzB4MDAsIDB4OUYsIDB4MDksIDB4N0QsIDB4MDQsIDB4RjAsIDB4OUQsIDB4QzAsIDB4QzcsIDB4MjAsIDB4REIsIDB4ODAsIDB4N0MsCisweDA5LCAweDMxLCAweDUxLCAweEMwLCAweDY0LCAweDAyLCAweDEzLCAweDAyLCAweDRDLCAweDAzLCAweDMwLCAweDJELCAweEMwLAorMHhDNywgMHg0MiwgMHgxMywgMHgwMSwgMHg3QywgMHgwMywgMHhCMCwgMHg4OSwgMHhDMCwgMHgzNywgMHgwMCwgMHg5RiwgMHgwMiwKKzB4MkQsIDB4MDIsIDB4QjEsIDB4QjUsIDB4QzAsIDB4ODUsIDB4MDAsIDB4MDUsIDB4MDMsIDB4N0MsIDB4NkYsIDB4MjQsIDB4MUMsCisweDgwLCAweDhBLCAweDAwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA3LCAweDgwLCAweDBELCAweDAwLAorMHhBRiwgMHgwMCwgMHhFQywgMHgwMCwgMHhGMCwgMHgwRiwgMHhDMCwgMHgwQiwgMHgxMCwgMHhGRiwgMHgwMCwgMHhCQywgMHgwMiwKKzB4RjIsIDB4OTEsIDB4QzAsIDB4N0IsIDB4MDAsIDB4MkYsIDB4MDAsIDB4QkMsIDB4MDMsIDB4RjAsIDB4NTcsIDB4QzAsIDB4MkQsCisweDAwLCAweDNFLCAweDAwLCAweEFDLCAweDgzLCAweEYwLCAweDBCLCAweEM4LCAweDNCLCAweDAwLCAweEZCLCAweDQ5LCAweERDLAorMHgwMiwgMHhEMCwgMHgxMiwgMHhDMCwgMHgxQSwgMHg0MCwgMHhGQiwgMHgwMCwgMHhFQywgMHgwMywgMHhGNCwgMHg1RiwgMHhDMCwKKzB4MUYsIDB4MDAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDgsIDB4MDUsIDB4ODAsIDB4OUYsCisweDA3LCAweDZDLCAweDAyLCAweDcwLCAweDhELCAweEMwLCAweDA2LCAweDAwLCAweEQzLCAweDIwLCAweDVFLCAweDA5LCAweDM4LAorMHgwMCwgMHhDMCwgMHgyNCwgMHgwMiwgMHg1RiwgMHgwMCwgMHg0QywgMHgwMywgMHgzMCwgMHgwRCwgMHhDMCwgMHg5MywgMHgwMCwKKzB4MUYsIDB4MDYsIDB4NEMsIDB4NjMsIDB4MzAsIDB4MDksIDB4QzAsIDB4MzQsIDB4MjAsIDB4MUIsIDB4MjAsIDB4NEUsIDB4MDMsCisweEYxLCAweDBELCAweEMwLCAweDk2LCAweDBBLCAweDE3LCAweDAyLCAweDZDLCAweDQzLCAweDMwLCAweDBELCAweEMwLCAweDI4LAorMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMywgMHhBMCwgMHg0NCwgMHg4NiwgMHhERCwgMHhDMiwKKzB4NDQsIDB4RTgsIDB4MTIsIDB4MUQsIDB4NDAsIDB4MDQsIDB4MDAsIDB4RjEsIDB4MDAsIDB4NkMsIDB4MDMsIDB4MzEsIDB4MDEsCisweDQwLCAweEY0LCAweDAyLCAweERELCAweDA0LCAweEM0LCAweDAzLCAweDEwLCAweDA1LCAweEM2LCAweEU3LCAweDgxLCAweDBGLAorMHg0MCwgMHhEMCwgMHgwQiwgMHhCMSwgMHgxRCwgMHg0MCwgMHgzRCwgMHgwMCwgMHg0MSwgMHgwMCwgMHg0QywgMHgwMiwgMHg3MCwKKzB4MDksIDB4NDQsIDB4MzQsIDB4MTIsIDB4REIsIDB4MUIsIDB4MDgsIDB4NDMsIDB4MTAsIDB4N0QsIDB4NDAsIDB4NEQsIDB4MDAsCisweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweDIwLCAweDAyLCAweDMwLCAweDBELCAweDAwLCAweDA0LAorMHgwNiwgMHgxMCwgMHg1OCwgMHg1MCwgMHgwMCwgMHgwMCwgMHhDMSwgMHgwMCwgMHgyNCwgMHgwMiwgMHg5MCwgMHgwMCwgMHg0MCwKKzB4MzAsIDB4MDAsIDB4OEQsIDB4MDEsIDB4MDQsIDB4MjcsIDB4MTAsIDB4MDksIDB4NDAsIDB4MjMsIDB4MjEsIDB4MDksIDB4NDIsCisweDA0LCAweDBGLCAweDUwLCAweEY0LCAweDQ4LCAweDMwLCAweDEwLCAweDQxLCAweDAwLCAweDA2LCAweDAyLCAweERBLCAweDAwLAorMHgwMCwgMHg2MiwgMHg0MCwgMHhDQywgMHgwMywgMHgwMSwgMHgwNywgMHg1OCwgMHg3QywgMHg0MCwgMHgwQywgMHgyMCwgMHgwOCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4NEEsIDB4MDAsIDB4NkQsIDB4MDEsIDB4ODQsIDB4MDcsCisweDEyLCAweDFGLCAweDQ0LCAweDQ4LCAweDAwLCAweEUxLCAweDAxLCAweDI0LCAweDA0LCAweDEwLCAweDlBLCAweDQwLCAweDc4LAorMHg4MCwgMHg0RCwgMHgwMSwgMHg4NCwgMHgyNywgMHgxMCwgMHgxQSwgMHg0MiwgMHg1OSwgMHgwMCwgMHgzNSwgMHgwMSwgMHg5NCwKKzB4MDMsIDB4REMsIDB4MTYsIDB4NjAsIDB4NzEsIDB4MDIsIDB4RTEsIDB4MDEsIDB4ODQsIDB4MDYsIDB4NTAsIDB4OTQsIDB4NDAsCisweDc4LCAweDgzLCAweEU5LCAweDA5LCAweEM0LCAweDI3LCAweDUwLCAweDE2LCAweDQwLCAweDM1LCAweDIwLCAweDA4LCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHgwMCwgMHg4MiwgMHgwMCwgMHg4RCwgMHgwMCwgMHg0QywgMHgyMywgMHg3MCwKKzB4ODgsIDB4QzAsIDB4ODAsIDB4NDIsIDB4RDMsIDB4MDAsIDB4MzQsIDB4MDIsIDB4OTAsIDB4ODQsIDB4QzQsIDB4MzAsIDB4MDAsCisweDhELCAweDAwLCAweDBDLCAweDAzLCAweDMwLCAweDQ0LCAweDQwLCAweDMzLCAweDAxLCAweDBELCAweDA4LCAweDBDLCAweDEzLAorMHg1MCwgMHgwNCwgMHg0MCwgMHgzMCwgMHgwMCwgMHgwMywgMHgwOCwgMHgwQywgMHg4MywgMHhGMCwgMHhBMCwgMHhEMCwgMHgwMiwKKzB4MDEsIDB4MDcsIDB4ODgsIDB4MEMsIDB4MjMsIDB4NzAsIDB4NEMsIDB4QzAsIDB4NDgsIDB4NDAsIDB4MDgsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAyLCAweEI4LCAweDBELCAweDAwLCAweEZGLCAweDA4LCAweERFLCAweDAzLCAweEY0LCAweDBGLAorMHhDMiwgMHgwRCwgMHgwMCwgMHhGRiwgMHgwMCwgMHhGQywgMHgwMSwgMHhGMCwgMHg4RiwgMHhDMiwgMHgzRiwgMHgwMCwgMHhGRiwKKzB4NDAsIDB4RkMsIDB4MDMsIDB4RjAsIDB4MDMsIDB4QzAsIDB4MUYsIDB4MDAsIDB4M0YsIDB4MDgsIDB4QkMsIDB4MUIsIDB4MzAsCisweDhFLCAweEMwLCAweDNGLCAweDAwLCAweEE3LCAweEEwLCAweEZELCAweDAyLCAweEYwLCAweDg3LCAweEMwLCAweDJGLCAweDQxLAorMHhFRiwgMHgwOCwgMHg3QywgMHgyMywgMHhCMCwgMHgwRCwgMHhDNCwgMHgwQiwgMHgyMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MTAsIDB4QTgsIDB4MEYsIDB4MDAsIDB4MUYsIDB4MDAsIDB4NEMsIDB4MDEsIDB4RTEsIDB4MDksIDB4QzAsCisweDA3LCAweDA4LCAweERGLCAweDA2LCAweDVDLCAweDAzLCAweEYwLCAweDFELCAweEMwLCAweDM0LCAweDAwLCAweDkzLCAweDAwLAorMHg0QywgMHgyNywgMHgzMCwgMHgwOSwgMHhDMCwgMHgyNywgMHgwMCwgMHgxQiwgMHgwMCwgMHg3QywgMHgyMywgMHhGOCwgMHgxMSwKKzB4QzAsIDB4MzYsIDB4MDMsIDB4REIsIDB4MDAsIDB4N0MsIDB4MDIsIDB4RjAsIDB4MUQsIDB4QzAsIDB4MjQsIDB4MDAsIDB4MTMsCisweDIwLCAweDRELCAweDAzLCAweDMwLCAweDBELCAweEMwLCAweDQzLCAweDAwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgxMiwgMHg5OCwgMHgyOSwgMHgwMCwgMHg2RCwgMHgwMCwgMHg4NCwgMHgwMywgMHhEMCwgMHgwRSwgMHg0MCwgMHgwQiwKKzB4MDAsIDB4RkQsIDB4MTIsIDB4ODQsIDB4MDIsIDB4RDAsIDB4MEYsIDB4NDgsIDB4MzgsIDB4MDAsIDB4MjEsIDB4MDAsIDB4MDQsCisweDMzLCAweDE0LCAweDBBLCAweDQwLCAweDNCLCAweDQwLCAweDIyLCAweDAwLCAweEI0LCAweDEzLCAweEQwLCAweDBBLCAweDQwLAorMHgzQywgMHgwMiwgMHhFMSwgMHgwMCwgMHhCNCwgMHgwMiwgMHhEMCwgMHgwRSwgMHg1MiwgMHgzRCwgMHgwMCwgMHhDNSwgMHgwMCwKKzB4ODQsIDB4MDIsIDB4MTAsIDB4MEUsIDB4NDAsIDB4NEYsIDB4NjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDA0LCAweDAwLCAweEY5LCAweDAwLCAweDhELCAweDAxLCAweDk0LCAweDBGLCAweEQwLCAweDFBLCAweDQwLCAweDVCLCAweDA4LAorMHhFRCwgMHgwMSwgMHg5NCwgMHgwNywgMHhEMCwgMHgzRSwgMHg0MCwgMHg3OCwgMHg0MCwgMHhDMSwgMHgxMSwgMHhBNSwgMHgwNywKKzB4MTgsIDB4MUUsIDB4NDAsIDB4NzMsIDB4MDAsIDB4MjEsIDB4MDEsIDB4QjQsIDB4MDcsIDB4NTAsIDB4MTcsIDB4NDYsIDB4NzksCisweDAxLCAweEU5LCAweDAxLCAweEI0LCAweDA3LCAweEQyLCAweDFDLCAweDcwLCAweDU4LCAweDAwLCAweDIxLCAweDAxLCAweDg2LAorMHg0NywgMHgxMCwgMHgxRSwgMHg0MSwgMHgxMywgMHgwOCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNiwKKzB4MjAsIDB4QjMsIDB4MDAsIDB4Q0QsIDB4MDAsIDB4MTQsIDB4MDMsIDB4RDAsIDB4MEMsIDB4NDAsIDB4QjcsIDB4MDAsIDB4Q0QsCisweDAwLCAweDA0LCAweDE3LCAweEQ4LCAweDBDLCAweDQwLCAweDM0LCAweDAwLCAweEMxLCAweDAwLCAweDI0LCAweDAzLCAweDEwLAorMHgyQywgMHg0MCwgMHhCMywgMHgwMSwgMHhDMSwgMHgwNywgMHgzNCwgMHgwMywgMHhEOCwgMHgyQywgMHg0MCwgMHgzMSwgMHgwMCwKKzB4QzEsIDB4NDgsIDB4NzQsIDB4MDIsIDB4RDAsIDB4MkMsIDB4NjQsIDB4NzEsIDB4ODAsIDB4QzUsIDB4MEIsIDB4MDQsIDB4OUIsCisweDEyLCAweDNDLCAweDYwLCAweDVCLCAweDAwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE3LCAweEEwLAorMHgxRiwgMHgwMCwgMHg2RiwgMHgwMCwgMHhERCwgMHgwRCwgMHhGMCwgMHgwNSwgMHhDMCwgMHgxRiwgMHgwMCwgMHg1RiwgMHgwMCwKKzB4REMsIDB4NDksIDB4RjAsIDB4MDcsIDB4RDAsIDB4MTQsIDB4MDAsIDB4NzMsIDB4MDEsIDB4NkMsIDB4MDEsIDB4MzAsIDB4RDcsCisweEMwLCAweDlCLCAweDQwLCAweDczLCAweDExLCAweDdDLCAweDAxLCAweEYwLCAweEI3LCAweDU0LCAweDE3LCAweDAwLCAweDdCLAorMHgwMiwgMHg3QywgMHgwMSwgMHhGMCwgMHg0NywgMHhDMCwgMHg1QywgMHgwOSwgMHg3MywgMHg4MCwgMHg4QywgMHgwNSwgMHgzNSwKKzB4MDYsIDB4QzAsIDB4NUYsIDB4MjAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4ODAsIDB4MDUsCisweDAwLCAweDFGLCAweDAwLCAweDZDLCAweDk4LCAweEYyLCAweDAxLCAweEMwLCAweDA3LCAweDA0LCAweDBGLCAweDAwLCAweDdDLAorMHgwMCwgMHhGMCwgMHg0MSwgMHhDMCwgMHgwNywgMHgwOCwgMHgwRiwgMHgwMiwgMHg1QywgMHg4MCwgMHhGMCwgMHgwMSwgMHhDMCwKKzB4MDcsIDB4MDAsIDB4MUYsIDB4ODIsIDB4N0MsIDB4ODAsIDB4RjAsIDB4ODEsIDB4QzAsIDB4MDQsIDB4MDAsIDB4MUYsIDB4MDQsCisweDdDLCAweDAwLCAweEI4LCAweDAxLCAweEMxLCAweDA3LCAweDAwLCAweDBGLCAweDEyLCAweDdDLCAweDAwLCAweEYwLCAweDIxLAorMHhDNSwgMHg0QiwgMHgwMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHg2MSwgMHgwNCwKKzB4OTMsIDB4MDAsIDB4MEQsIDB4MEUsIDB4MzAsIDB4MTksIDB4QzAsIDB4MjcsIDB4MDAsIDB4OTMsIDB4MDAsIDB4MUMsIDB4MDIsCisweEI0LCAweDA5LCAweEMwLCAweDI3LCAweDAwLCAweDkzLCAweDAwLCAweDRELCAweDAyLCAweEYwLCAweDA5LCAweEM4LCAweDI3LAorMHgwMiwgMHg5RiwgMHg0MCwgMHg3QywgMHgwMiwgMHhGMiwgMHg4OSwgMHhDMCwgMHgyNywgMHgwMCwgMHg5NywgMHgwMCwgMHg3QywKKzB4MDIsIDB4MzAsIDB4MDksIDB4QzgsIDB4MjMsIDB4MjAsIDB4OUIsIDB4MDEsIDB4NEQsIDB4MjIsIDB4NzAsIDB4MTksIDB4QzIsCisweDQxLCAweDIwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDIwLCAweDI2LCAweDAyLCAweDk1LAorMHgwMiwgMHg0NCwgMHgwRSwgMHgxNCwgMHgwOSwgMHg0MiwgMHgyNywgMHgwMCwgMHg5MSwgMHgwMCwgMHg0NCwgMHgwMiwgMHgxMCwKKzB4MDksIDB4NDgsIDB4MjcsIDB4MDgsIDB4OTEsIDB4MTIsIDB4NDQsIDB4NDIsIDB4RDAsIDB4MDksIDB4NDQsIDB4NjcsIDB4MTAsCisweDkxLCAweDAwLCAweDc0LCAweDQ2LCAweEQwLCAweDM5LCAweEUwLCAweDI1LCAweDAwLCAweDkzLCAweDAwLCAweDVDLCAweDAyLAorMHg1MCwgMHgwOSwgMHg0MCwgMHgyNywgMHgwMCwgMHg5MSwgMHgwMywgMHg0QywgMHgwMiwgMHgxMCwgMHhBOSwgMHg0MCwgMHgwNCwKKzB4MDgsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MUMsIDB4QTAsIDB4MjQsIDB4MDAsIDB4OTEsIDB4MDIsCisweDQ0LCAweDAyLCAweDkwLCAweDg5LCAweDQwLCAweDI3LCAweDAwLCAweDkxLCAweDAwLCAweDU0LCAweDAyLCAweDEwLCAweDA5LAorMHg0MCwgMHgyNywgMHgwMCwgMHg5RCwgMHg0MCwgMHg0NCwgMHgwMiwgMHhEMCwgMHgwOSwgMHg0MCwgMHgyNywgMHgyMCwgMHhENSwKKzB4MDAsIDB4NzQsIDB4MTIsIDB4RDgsIDB4MEQsIDB4NDUsIDB4MjMsIDB4MDAsIDB4OTUsIDB4MDAsIDB4NzQsIDB4MDIsIDB4MTAsCisweDA5LCAweDQwLCAweDI3LCAweDQwLCAweDk5LCAweDg4LCAweDQ0LCAweDQyLCAweDUwLCAweDA5LCAweDQyLCAweDcxLCAweDAwLAorMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgyOCwgMHgyMCwgMHgwMSwgMHg4NSwgMHgwNCwgMHgwNCwKKzB4MUIsIDB4OTAsIDB4MjgsIDB4NDAsIDB4MjMsIDB4NDEsIDB4ODEsIDB4MEMsIDB4MDQsIDB4MTIsIDB4MTAsIDB4NDgsIDB4NDAsCisweDIzLCAweDAxLCAweDhELCAweDA0LCAweDA2LCAweDEyLCAweEQwLCAweDg4LCAweDQwLCAweDIzLCAweDAxLCAweEMxLCAweDAwLAorMHgzNiwgMHgwMiwgMHhEMCwgMHgwOCwgMHg0NCwgMHgyMywgMHgwMywgMHg4MSwgMHgwMCwgMHgxNCwgMHgwMiwgMHg1MCwgMHgwOCwKKzB4NDQsIDB4MjMsIDB4MDIsIDB4QzksIDB4MDAsIDB4NDQsIDB4MjIsIDB4MTAsIDB4MEQsIDB4NjAsIDB4NTAsIDB4QTgsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFELCAweEIwLCAweDg2LCAweDAyLCAweDEzLCAweDAwLCAweDRDLCAweDA4LAorMHhCMCwgMHgyNSwgMHhDMCwgMHg4NywgMHgwMiwgMHgxMywgMHgwMiwgMHg1QywgMHgyOCwgMHgzMCwgMHhBMSwgMHhDMCwgMHg4MywKKzB4NDIsIDB4MUYsIDB4MEEsIDB4NDQsIDB4MjgsIDB4RDAsIDB4MjEsIDB4MDAsIDB4MTcsIDB4MDAsIDB4MUYsIDB4NDAsIDB4N0MsCisweDUwLCAweEYwLCAweDAxLCAweDQwLCAweDg3LCAweDAwLCAweDE3LCAweDAwLCAweDdDLCAweDI4LCAweDMwLCAweEUxLCAweEMxLAorMHg4NywgMHg0NSwgMHgxQiwgMHgxNCwgMHgwQywgMHgwOCwgMHg3MCwgMHgwMSwgMHhDMCwgMHg3NSwgMHhDMCwgMHgwQSwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTksIDB4QTgsIDB4MkYsIDB4MTIsIDB4QkYsIDB4MDgsIDB4RkMsIDB4MEEsIDB4NzAsCisweDBCLCAweEMyLCAweDJGLCAweDAyLCAweDlGLCAweDBDLCAweEZDLCAweDIyLCAweEYwLCAweDhCLCAweEMwLCAweDJGLCAweDAyLAorMHhCMywgMHgwOCwgMHg3QywgMHgyMiwgMHhGMiwgMHg0RiwgMHhDMCwgMHgyRiwgMHgyMiwgMHhCRiwgMHgwMCwgMHg3QywgMHgwMiwKKzB4RjAsIDB4MEEsIDB4QzAsIDB4MjUsIDB4MDMsIDB4QjYsIDB4MDAsIDB4RDgsIDB4MDIsIDB4RjAsIDB4MEIsIDB4QzAsIDB4M0YsCisweDQxLCAweEI3LCAweDAwLCAweERDLCAweDEyLCAweEY0LCAweDBGLCAweEMwLCAweDY3LCAweDIwLCAweDBFLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHhBMCwgMHgyRiwgMHgwNSwgMHhCRiwgMHgwNCwgMHhDQywgMHgwMiwgMHhGMCwgMHgwQiwKKzB4QzAsIDB4MzMsIDB4MDIsIDB4OTMsIDB4MDQsIDB4N0MsIDB4RDIsIDB4QjAsIDB4QzksIDB4QzAsIDB4MkMsIDB4MDAsIDB4QjMsCisweDAwLCAweENDLCAweDIyLCAweDM0LCAweDA5LCAweEMwLCAweDI4LCAweDA1LCAweEJCLCAweDAwLCAweERDLCAweDAyLCAweEIwLAorMHgwQiwgMHhDMCwgMHgyNywgMHgwMiwgMHhCMywgMHgyMCwgMHg1QywgMHg4QSwgMHhGMiwgMHg0OSwgMHhDMiwgMHgyRCwgMHg0MCwKKzB4QkUsIDB4MDAsIDB4Q0MsIDB4MDIsIDB4MzAsIDB4MEEsIDB4RDAsIDB4NjAsIDB4MDAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDFDLCAweDE4LCAweDE1LCAweDAxLCAweDFELCAweDA4LCAweDQ1LCAweEM4LCAweEQwLCAweDAxLCAweDQ5LAorMHgwNywgMHgwMiwgMHgxMSwgMHgxNCwgMHgzMCwgMHgxMCwgMHgwMCwgMHhDMSwgMHg0MiwgMHg4NCwgMHgwNCwgMHgwMSwgMHgxMCwKKzB4NDQsIDB4MjAsIDB4MTEsIDB4NDEsIDB4ODMsIDB4MDUsIDB4MjAsIDB4NTcsIDB4NDAsIDB4NUMsIDB4MDgsIDB4MDEsIDB4MDEsCisweDQwLCAweDAzLCAweDAyLCAweDExLCAweDAwLCAweDY0LCAweDE0LCAweEQwLCAweEQxLCAweDQxLCAweDgxLCAweDQ0LCAweDU1LAorMHgwMCwgMHgwNCwgMHgwMSwgMHg1MCwgMHgwMSwgMHg0MCwgMHg3MCwgMHg2MCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MTIsIDB4MjAsIDB4MzEsIDB4MDUsIDB4OEQsIDB4MDAsIDB4MzQsIDB4QjIsIDB4RDAsIDB4MDgsIDB4NDAsIDB4MjMsCisweDAwLCAweDgxLCAweDJDLCAweDM0LCAweDUyLCAweDk4LCAweDQ4LCAweDQ4LCAweDIwLCAweDAzLCAweDgxLCAweEM4LCAweDA0LAorMHgwMiwgMHgxMCwgMHg0OSwgMHgwNCwgMHgyMCwgMHgxMCwgMHg4MSwgMHgwMCwgMHgxNCwgMHgyMiwgMHhEMSwgMHgwOCwgMHg0MCwKKzB4MjMsIDB4MjAsIDB4ODEsIDB4MDAsIDB4MTYsIDB4MTIsIDB4RDAsIDB4MDgsIDB4NDAsIDB4MjEsIDB4NEIsIDB4OEQsIDB4QzAsCisweDQ1LCAweDAyLCAweDEyLCAweDA5LCAweDQwLCAweDQ4LCAweDgwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgxOCwgMHgwMCwgMHgyNSwgMHgwMSwgMHg5RCwgMHgwMywgMHg3NCwgMHgwQSwgMHhEMiwgMHgwOSwgMHg0MCwgMHhBMywgMHg0MCwKKzB4OTEsIDB4NDAsIDB4NzQsIDB4MDIsIDB4MTAsIDB4MDgsIDB4NDAsIDB4MzAsIDB4MDAsIDB4OTEsIDB4MDMsIDB4MDQsIDB4MDIsCisweDEwLCAweDQ5LCAweDUwLCAweDI2LCAweDEyLCAweDk1LCAweDAwLCAweDU0LCAweDAzLCAweDUwLCAweEE5LCAweDQwLCAweDI3LAorMHgwMCwgMHg5MSwgMHgwMCwgMHg2NCwgMHgxMiwgMHhEMCwgMHgwOSwgMHg0MCwgMHgyNSwgMHg0MCwgMHg5NSwgMHgwOCwgMHg0NCwKKzB4MTIsIDB4NTAsIDB4MDksIDB4NDAsIDB4NjAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsCisweEE4LCAweDY3LCAweDAwLCAweDlGLCAweDAwLCAweDdDLCAweDAyLCAweEYwLCAweDA5LCAweEM0LCAweDI3LCAweDAwLCAweDkzLAorMHg2MCwgMHg3QywgMHgwMiwgMHhCMCwgMHgxOSwgMHhEMCwgMHgyNCwgMHg0MCwgMHg5MywgMHgwMiwgMHg0NCwgMHgwMiwgMHgzMCwKKzB4MDgsIDB4QzIsIDB4MjQsIDB4MDgsIDB4OTMsIDB4MDIsIDB4NUMsIDB4ODIsIDB4RjAsIDB4MTksIDB4QzgsIDB4MjcsIDB4NDAsCisweDkxLCAweDE4LCAweDVDLCAweDA2LCAweEYwLCAweDI5LCAweEMxLCAweDI1LCAweDAwLCAweDlGLCAweDAwLCAweDQ0LCAweDAyLAorMHgyMCwgMHgyOCwgMHhDMCwgMHgxNCwgMHgyMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHg4MCwKKzB4NjUsIDB4MDAsIDB4OEYsIDB4MDAsIDB4NEMsIDB4NEUsIDB4RjAsIDB4MDksIDB4QzEsIDB4RTcsIDB4MzAsIDB4OUYsIDB4NDAsCisweDdDLCAweDIyLCAweEYwLCAweDQ5LCAweEMwLCAweDI3LCAweDAwLCAweDlGLCAweDAwLCAweDdELCAweDAyLCAweEYwLCAweDA5LAorMHhDMCwgMHg2NSwgMHgwMCwgMHg5RiwgMHgxOSwgMHg3QywgMHgwMiwgMHhCMCwgMHgwOSwgMHhDMCwgMHgyNywgMHgxMCwgMHg5RiwKKzB4MDEsIDB4N0MsIDB4MDIsIDB4RjAsIDB4MDksIDB4QzgsIDB4RTcsIDB4NDAsIDB4OEIsIDB4MTAsIDB4N0MsIDB4ODIsIDB4RjAsCisweDA5LCAweEMwLCAweDRCLCAweDAwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDA1LAorMHg4MCwgMHgxRiwgMHgwNiwgMHg0RSwgMHgwOCwgMHhGMCwgMHgwMSwgMHhDNCwgMHgwNCwgMHg4MCwgMHgxMywgMHgwMCwgMHg3RSwKKzB4ODAsIDB4RjAsIDB4MDEsIDB4QzAsIDB4MDcsIDB4MDYsIDB4MUYsIDB4MTIsIDB4NUMsIDB4MjAsIDB4RjgsIDB4MjEsIDB4QzAsCisweDA3LCAweDk0LCAweDEzLCAweDAyLCAweDNDLCAweDAwLCAweEYwLCAweDIxLCAweEMwLCAweDA3LCAweDAwLCAweDFCLCAweDBBLAorMHg3QywgMHgwMCwgMHhFMSwgMHgyMCwgMHhDMCwgMHg4MCwgMHgwNCwgMHgxNywgMHgyMCwgMHg0QywgMHgwMCwgMHgzMCwgMHg4MSwKKzB4QzIsIDB4NDAsIDB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4ODAsIDB4MUMsIDB4MDAsCisweDdELCAweDAwLCAweEM0LCAweDAxLCAweDcwLCAweDU3LCAweDQwLCAweDE1LCAweDgwLCAweDVCLCAweDQwLCAweDY0LCAweDAxLAorMHhCMiwgMHgwNSwgMHhDMiwgMHgxRiwgMHgyMCwgMHg3RCwgMHgxMSwgMHhDNCwgMHgyNSwgMHg3OCwgMHgwNSwgMHhFMCwgMHhEQiwKKzB4MDAsIDB4N0IsIDB4MDQsIDB4RkMsIDB4MkQsIDB4NzAsIDB4MzcsIDB4NDQsIDB4MTcsIDB4MjAsIDB4NTMsIDB4NDAsIDB4NTgsCisweDAxLCAweDcwLCAweDA1LCAweEQwLCAweDFDLCAweDAwLCAweDcxLCAweDAwLCAweEM0LCAweDA1LCAweDE0LCAweDE3LCAweDQwLAorMHg1MSwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHhBMCwgMHgzMiwgMHgwMCwgMHhDRCwKKzB4MjAsIDB4MDYsIDB4MDMsIDB4NTAsIDB4M0MsIDB4NDAsIDB4MzAsIDB4MDAsIDB4QzEsIDB4MDAsIDB4NzQsIDB4MDMsIDB4NTAsCisweDBDLCAweDYwLCAweEYzLCAweDA4LCAweERELCAweDAyLCAweDE0LCAweDBGLCAweEQxLCAweDBDLCAweDQwLCAweDEzLCAweDAyLAorMHhDMSwgMHgwMywgMHgzNCwgMHgwRiwgMHg0MSwgMHg0QywgMHg2MCwgMHgzNywgMHg4MCwgMHg4MSwgMHgwMSwgMHgzNCwgMHgwMywKKzB4OTAsIDB4MEMsIDB4NDAsIDB4MzIsIDB4MDAsIDB4QzUsIDB4MDMsIDB4NDQsIDB4MUYsIDB4NTAsIDB4NEMsIDB4NDAsIDB4NTAsCisweDAwLCAweDBBLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDg4LCAweDI4LCAweDAwLCAweEFELCAweDAwLAorMHg4NiwgMHg0MSwgMHg1OCwgMHgxRSwgMHg2MCwgMHgzRCwgMHgxMCwgMHhFOSwgMHg0MCwgMHhCNCwgMHgzMywgMHgxMCwgMHg0RSwKKzB4NDAsIDB4MzksIDB4MDgsIDB4RUQsIDB4MDAsIDB4ODQsIDB4MDMsIDB4NTAsIDB4NEUsIDB4NDAsIDB4MTksIDB4MDgsIDB4RTksCisweDAwLCAweDk0LCAweDA5LCAweDUwLCAweDI2LCAweDQwLCAweDNCLCAweDAzLCAweEExLCAweDQwLCAweEI2LCAweDEzLCAweDUwLAorMHg4RSwgMHg0MCwgMHgwOCwgMHgwNCwgMHhDMSwgMHgwMiwgMHg4NCwgMHg0MCwgMHg1MCwgMHgwRSwgMHg0MCwgMHgwNSwgMHgyMCwKKzB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTEsIDB4MTAsIDB4NjgsIDB4MDAsIDB4Q0QsIDB4MDEsIDB4ODUsCisweDA3LCAweDcwLCAweDE3LCAweEMwLCAweDc4LCAweDAxLCAweEUxLCAweDAxLCAweEI0LCAweDA3LCAweDUwLCAweDVFLCAweDQwLAorMHg3QiwgMHgwMCwgMHhFRCwgMHgwMSwgMHg5QywgMHg4NSwgMHhEMCwgMHgxRSwgMHg2MCwgMHg3QiwgMHgwMCwgMHhFMSwgMHgwMSwKKzB4QjQsIDB4MDYsIDB4NzAsIDB4MUUsIDB4QzAsIDB4N0IsIDB4NDAsIDB4QTMsIDB4MDEsIDB4QkMsIDB4MUYsIDB4RjEsIDB4NUYsCisweEMwLCAweDdBLCAweDAwLCAweEU3LCAweDAxLCAweDhELCAweDA3LCAweDcwLCAweDFFLCAweEMwLCAweDQ0LCAweDQwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHhBMCwgMHgyRCwgMHgwMCwgMHg5RiwgMHgwMCwgMHg3QywgMHgwMSwKKzB4NzAsIDB4MEQsIDB4QzAsIDB4QjcsIDB4MDAsIDB4REYsIDB4MDAsIDB4NkMsIDB4NDMsIDB4RjEsIDB4MkQsIDB4QzEsIDB4MzcsCisweDMwLCAweERDLCAweDAwLCAweDdDLCAweDgxLCAweEYwLCAweDBELCAweEMwLCAweDI3LCAweDAwLCAweERGLCAweDAwLCAweDdDLAorMHgwMiwgMHg3MCwgMHgwRCwgMHhDMCwgMHhCNywgMHgwNCwgMHg5QiwgMHgwMCwgMHg1OCwgMHg4MywgMHhGQSwgMHgwRCwgMHhDQywKKzB4MDYsIDB4MDAsIDB4REYsIDB4MDAsIDB4N0MsIDB4MDAsIDB4QjAsIDB4MEQsIDB4QzAsIDB4NDMsIDB4MjAsIDB4MDYsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDIwLCAweDZGLCAweDAwLCAweEYzLCAweDQxLCAweENDLCAweDEzLCAweEYwLAorMHgxRiwgMHhDMCwgMHhGRiwgMHgwNCwgMHhGQiwgMHg5MSwgMHhFQywgMHgwNywgMHg4MCwgMHg5RiwgMHhDMSwgMHg1QywgMHgwOCwKKzB4N0IsIDB4ODksIDB4Q0MsIDB4MDYsIDB4MzAsIDB4MUYsIDB4QzEsIDB4NUYsIDB4MDAsIDB4QjMsIDB4MDEsIDB4RjgsIDB4QTcsCisweEIwLCAweDFGLCAweEQwLCAweDdDLCAweDAwLCAweEZGLCAweDIxLCAweEZDLCAweDA3LCAweEYwLCAweDFGLCAweEMwLCAweDdELAorMHgwMiwgMHg3NywgMHgwMSwgMHhDQywgMHgwNywgMHhCMCwgMHgxRiwgMHhDMCwgMHgwMywgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MTUsIDB4MTAsIDB4QUQsIDB4NDAsIDB4QTEsIDB4MzAsIDB4ODQsIDB4MDMsIDB4RDAsIDB4MEUsCisweDQ1LCAweDNGLCAweDAwLCAweEUxLCAweDAwLCAweDg0LCAweDYzLCAweDEwLCAweDBFLCAweDQ4LCAweDBDLCAweDAyLCAweDMxLAorMHgwQywgMHhDNSwgMHgyMiwgMHgxMCwgMHgwRSwgMHg0MywgMHg5QiwgMHgwMiwgMHhBMSwgMHgwMiwgMHhCNCwgMHgwMSwgMHg1MCwKKzB4QTIsIDB4NDAsIDB4MzgsIDB4ODAsIDB4RUQsIDB4MTAsIDB4QjQsIDB4MDMsIDB4NzAsIDB4NEUsIDB4NTAsIDB4MTgsIDB4NDcsCisweEZCLCAweDAwLCAweEM0LCAweDA4LCAweDE0LCAweDBBLCAweDQ4LCAweDU3LCAweDYwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgyOCwgMHgwMCwgMHg2MSwgMHgwOCwgMHg4NCwgMHg2MywgMHhEMCwgMHg4NiwgMHg0MCwKKzB4M0IsIDB4MDAsIDB4RTEsIDB4MDAsIDB4MjQsIDB4MDMsIDB4MTQsIDB4MEMsIDB4NTAsIDB4MTgsIDB4NDQsIDB4NjEsIDB4MDAsCisweEE0LCAweDAwLCAweDE0LCAweDBFLCAweDQwLCAweDMzLCAweDQ0LCAweDIxLCAweDEwLCAweEI0LCAweDAzLCAweDExLCAweDBFLAorMHg0MCwgMHgzOCwgMHgwMCwgMHhFRCwgMHgwMCwgMHhCNCwgMHg0MywgMHhEMCwgMHgwRSwgMHg0NCwgMHgzOSwgMHg4MCwgMHhGNSwKKzB4MDAsIDB4ODQsIDB4NDMsIDB4OTAsIDB4MEUsIDB4NDAsIDB4MDMsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDA0LCAweDIwLCAweDIzLCAweDE0LCAweDAxLCAweDIwLCAweDA0LCAweDBFLCAweEQwLCAweDE4LCAweDQwLCAweEIzLAorMHgwNCwgMHhDMSwgMHgwMCwgMHgwNCwgMHgwMywgMHgxMCwgMHgyQywgMHg0MSwgMHg0MCwgMHgwMCwgMHgwMSwgMHgwMywgMHg2NCwKKzB4MDAsIDB4MTEsIDB4MkMsIDB4NDAsIDB4RjMsIDB4MDAsIDB4MDEsIDB4MTIsIDB4MzQsIDB4MDMsIDB4NTAsIDB4MzgsIDB4NDAsCisweDMwLCAweDAwLCAweENELCAweDAzLCAweDc2LCAweDA3LCAweDUwLCAweDBELCAweDQwLCAweDU0LCAweDAwLCAweDQ5LCAweDBDLAorMHgwNSwgMHgwRSwgMHgxMCwgMHg5QywgMHg0MCwgMHgxMywgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MTUsIDB4MjgsIDB4MjUsIDB4MDAsIDB4OTMsIDB4MDEsIDB4NDUsIDB4MEEsIDB4RjgsIDB4MDksIDB4QzAsIDB4QkYsIDB4NDAsCisweEYzLCAweDAwLCAweEVDLCAweDBGLCAweDMwLCAweDJGLCAweEMwLCAweDY0LCAweDAwLCAweDkzLCAweDEyLCAweDZDLCAweDAzLAorMHgzMCwgMHgwRSwgMHhDMCwgMHgxNywgMHgxMCwgMHgxMywgMHgwMywgMHg3QywgMHg4MywgMHhCMCwgMHgxOCwgMHhDMCwgMHgzQywKKzB4MjAsIDB4OUYsIDB4MDAsIDB4RjQsIDB4MDcsIDB4RjAsIDB4NUYsIDB4QzAsIDB4NzUsIDB4MDAsIDB4OTcsIDB4MjIsIDB4MDQsCisweDJGLCAweEIwLCAweEJDLCAweEMwLCAweDU3LCAweDIwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLAorMHgwMCwgMHg4NywgMHgwMCwgMHgwRiwgMHg4MCwgMHg3RSwgMHgwMCwgMHhGMCwgMHgyMSwgMHhDMCwgMHgzNywgMHgwMCwgMHhENywKKzB4ODAsIDB4N0MsIDB4MTMsIDB4NzAsIDB4MEQsIDB4QzAsIDB4ODcsIDB4MDAsIDB4OTcsIDB4MDIsIDB4NUMsIDB4MEEsIDB4RjAsCisweDBELCAweEUwLCAweDE3LCAweDAwLCAweDlGLCAweDIwLCAweDNDLCAweDA4LCAweEYwLCAweEMxLCAweEM4LCAweDM3LCAweDAwLAorMHg5RiwgMHgwNCwgMHg3QywgMHgwMywgMHhGMSwgMHgwRCwgMHhDMCwgMHhBNywgMHg0NCwgMHhERiwgMHgwMiwgMHg3QywgMHg4OCwKKzB4RjIsIDB4MEQsIDB4QzAsIDB4MDcsIDB4MDAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODQsIDB4MDgsCisweDJELCAweDAwLCAweDlGLCAweDAwLCAweEVDLCAweDQyLCAweEUwLCAweDAzLCAweEUwLCAweDNGLCAweDAwLCAweERGLCAweDAwLAorMHhGQywgMHgwMywgMHhGOCwgMHgwRSwgMHhEMCwgMHgyQywgMHgwMiwgMHgzRiwgMHgxMCwgMHhDRCwgMHgwNywgMHgzNCwgMHgwRiwKKzB4QzEsIDB4M0MsIDB4MDQsIDB4M0YsIDB4MDAsIDB4RkMsIDB4MDIsIDB4QjEsIDB4OEYsIDB4QzAsIDB4M0UsIDB4MDAsIDB4QkYsCisweDAwLCAweENDLCAweDAzLCAweDMwLCAweDBELCAweEMwLCAweDc0LCAweDQwLCAweEY3LCAweDAwLCAweEZDLCAweDE3LCAweDMwLAorMHgwRiwgMHgwMCwgMHgxMCwgMHgyMiwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4NSwgMHgyMCwgMHhDNiwKKzB4MDgsIDB4MUQsIDB4ODEsIDB4NDQsIDB4NDQsIDB4RDAsIDB4MTEsIDB4NDEsIDB4MzcsIDB4MDAsIDB4REQsIDB4MDAsIDB4NzQsCisweDAzLCAweEQwLCAweDBELCAweDQwLCAweEM0LCAweDA4LCAweDE5LCAweDAyLCAweDRDLCAweDBBLCAweDEwLCAweDBELCAweDQwLAorMHg4NCwgMHgwMCwgMHg5NywgMHgwMywgMHg3NCwgMHgwNiwgMHhCOCwgMHgxRCwgMHgwMCwgMHgzNCwgMHgwMCwgMHg4RCwgMHgwMSwKKzB4NTQsIDB4MDMsIDB4MTAsIDB4MEQsIDB4NDAsIDB4MjQsIDB4NDIsIDB4RDMsIDB4MDksIDB4NzQsIDB4MDUsIDB4MTAsIDB4MDUsCisweDQ4LCAweDE0LCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweEEwLCAweDY0LCAweDAwLAorMHg5RCwgMHgwMSwgMHg2NCwgMHgwNCwgMHhEMCwgMHgxOSwgMHg0MCwgMHgzNywgMHgwMCwgMHhERCwgMHgwMCwgMHg1NCwgMHgwMywKKzB4RDAsIDB4MEQsIDB4NDAsIDB4MzQsIDB4MDAsIDB4Q0QsIDB4MDMsIDB4NDQsIDB4MTksIDB4MTAsIDB4MEQsIDB4NTAsIDB4MTQsCisweDAwLCAweDE4LCAweDAxLCAweDc0LCAweDIxLCAweDEwLCAweDAxLCAweDAwLCAweDM2LCAweDAwLCAweDlELCAweDA0LCAweDQ0LAorMHgwMywgMHgxMCwgMHgwRCwgMHg0MCwgMHg4NCwgMHg0MCwgMHhERCwgMHgwMiwgMHg3NCwgMHgwMywgMHgxMCwgMHgwRCwgMHg0MCwKKzB4MDQsIDB4MDgsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4MEQsCisweDAxLCAweDA1LCAweDAwLCAweEQxLCAweDA4LCAweDQ4LCAweDMzLCAweDgwLCAweENELCAweDAwLCAweDM0LCAweDAzLCAweEQwLAorMHgwQywgMHg0MCwgMHgwMCwgMHgwMCwgMHg4RCwgMHgwMCwgMHgwNiwgMHgwMCwgMHgxMCwgMHgwRCwgMHg2MCwgMHgxMCwgMHgxMCwKKzB4ODUsIDB4MDAsIDB4MzQsIDB4MDAsIDB4OTEsIDB4MDEsIDB4NDAsIDB4MzAsIDB4MDAsIDB4OUQsIDB4ODAsIDB4MTYsIDB4MDMsCisweDEwLCAweDBDLCAweDUwLCAweDAwLCAweDAwLCAweDgxLCAweDAwLCAweDc0LCAweDAwLCAweDUwLCAweDE4LCAweDUwLCAweDQxLAorMHhBMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhBMCwgMHgyNiwgMHgwMCwgMHgxRiwgMHgwMCwKKzB4NkMsIDB4MDIsIDB4RjEsIDB4MDEsIDB4NDAsIDB4M0YsIDB4MDAsIDB4REYsIDB4MDAsIDB4REMsIDB4MDMsIDB4RDAsIDB4MEYsCisweEMwLCAweDM0LCAweDAwLCAweDVELCAweDAwLCAweDRDLCAweDAxLCAweDMwLCAweDBELCAweEMwLCAweDM0LCAweDAwLCAweDFGLAorMHgwMCwgMHg3QywgMHgwMSwgMHgxMSwgMHgwNSwgMHhDMCwgMHgzRSwgMHgwMCwgMHg5RiwgMHgwMCwgMHg0QywgMHgwMywgMHgzMCwKKzB4MEQsIDB4QzAsIDB4MDQsIDB4MDAsIDB4REYsIDB4ODAsIDB4N0MsIDB4MDAsIDB4MzEsIDB4MEQsIDB4QzAsIDB4MDAsIDB4QzAsCisweDBBLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweEE4LCAweDBGLCAweDAwLCAweDNGLCAweDAwLCAweEZFLAorMHgwMiwgMHhGMCwgMHgwQiwgMHhDMCwgMHgzRiwgMHgwMCwgMHhGRiwgMHgwMCwgMHhGQywgMHgwMywgMHhGMCwgMHgwRiwgMHhDMCwKKzB4MEYsIDB4MDAsIDB4M0IsIDB4MDAsIDB4REMsIDB4MDAsIDB4RjAsIDB4MEYsIDB4QzQsIDB4M0YsIDB4MDgsIDB4MzcsIDB4MDAsCisweEJDLCAweDAwLCAweEYyLCAweDAyLCAweEMwLCAweDNGLCAweDAwLCAweEJGLCAweDAwLCAweEZDLCAweDAzLCAweEYwLCAweDBGLAorMHhDMCwgMHgwRiwgMHgwMCwgMHhGNywgMHg0MCwgMHhGQywgMHgwMCwgMHhCMCwgMHgwRiwgMHhDMCwgMHgxNiwgMHgyMSwgMHgwRSwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4QTAsIDB4NUYsIDB4MDAsIDB4NzMsIDB4MDEsIDB4Q0MsIDB4MDcsCisweEYwLCAweDFGLCAweEMwLCAweDNDLCAweDAxLCAweEIzLCAweDAxLCAweEFDLCAweDA1LCAweEYwLCAweDRGLCAweEMwLCAweDRELAorMHgwOCwgMHgzRiwgMHgwMywgMHg0QywgMHgwNCwgMHhGMCwgMHgwRiwgMHhDMCwgMHg0RiwgMHg0MCwgMHgzMywgMHgwMSwgMHhGQywKKzB4MEMsIDB4NzEsIDB4OTAsIDB4QzAsIDB4NEMsIDB4MDAsIDB4QTMsIDB4MDEsIDB4RUQsIDB4MDQsIDB4RjAsIDB4MTIsIDB4QzAsCisweDRGLCAweDAwLCAweDNGLCAweDAyLCAweENFLCAweDI2LCAweDM0LCAweDAzLCAweEMwLCAweDBGLCAweDA4LCAweDBFLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgxOCwgMHg1MywgMHgwMCwgMHg1MSwgMHgwMSwgMHhFQywgMHgwNywgMHhEMCwKKzB4MUYsIDB4NDAsIDB4NzQsIDB4MDAsIDB4OTUsIDB4MDEsIDB4NTEsIDB4MDYsIDB4RDAsIDB4OUYsIDB4NDIsIDB4NDQsIDB4MDAsCisweDFELCAweDAwLCAweDRDLCAweDA0LCAweEQwLCAweDNGLCAweDQwLCAweDQ3LCAweDAwLCAweDExLCAweDAxLCAweDc0LCAweDAwLAorMHgxMCwgMHg0NSwgMHg0NCwgMHg0NSwgMHgwMCwgMHgxMSwgMHg0MSwgMHg0NCwgMHgwMCwgMHhEMCwgMHgxMSwgMHg0MCwgMHg0NywKKzB4MDAsIDB4OTcsIDB4ODIsIDB4NkMsIDB4MTAsIDB4MTAsIDB4MTEsIDB4NDgsIDB4MEYsIDB4MDAsIDB4MEMsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDExLCAweEEwLCAweDI1LCAweDAwLCAweDgxLCAweDAwLCAweDA0LCAweDAzLCAweDUxLCAweDBDLAorMHg0MCwgMHhCMCwgMHgwMCwgMHg0NSwgMHgwMCwgMHgwNCwgMHgwMSwgMHg1MCwgMHgwQywgMHg0MCwgMHgyMSwgMHgwMCwgMHgwNSwKKzB4MDQsIDB4MjQsIDB4MDMsIDB4RDAsIDB4MkMsIDB4NDAsIDB4MDcsIDB4MDAsIDB4MDEsIDB4MDAsIDB4NzQsIDB4MTAsIDB4RDAsCisweDA5LCAweDQwLCAweDM1LCAweDAwLCAweDk1LCAweDgwLCAweDE0LCAweDUwLCAweEQxLCAweDAwLCAweDQwLCAweDAxLCAweDA4LAorMHg0RCwgMHgwNiwgMHg0NCwgMHgwMiwgMHgxMCwgMHgwOCwgMHg0MCwgMHg0RiwgMHg4MCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDMsIDB4QTAsIDB4MjcsIDB4MDAsIDB4QzEsIDB4MDAsIDB4NjQsIDB4MDMsIDB4RDAsIDB4MEQsIDB4NDAsCisweDM0LCAweDAwLCAweDU1LCAweDA2LCAweDU0LCAweDAyLCAweEQwLCAweDBELCAweDQwLCAweDQ0LCAweDAwLCAweDBELCAweDgxLAorMHg0NCwgMHgyMywgMHhEMCwgMHgwRCwgMHg0MCwgMHgwNywgMHgwMCwgMHgxMSwgMHgwNCwgMHg3NCwgMHg0NiwgMHgxMCwgMHgwRCwKKzB4NDAsIDB4MzUsIDB4NDAsIDB4MTUsIDB4MDIsIDB4NTAsIDB4MDYsIDB4RDAsIDB4MTEsIDB4NjAsIDB4MDcsIDB4MDAsIDB4OTUsCisweDA4LCAweDQ1LCAweDA2LCAweDEwLCAweDExLCAweDQwLCAweDBGLCAweDIwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHhBOCwgMHg3MywgMHgwMCwgMHg5MywgMHgwMiwgMHg0QywgMHgwMywgMHhGMCwgMHgwQywgMHhEMCwgMHgzNCwKKzB4ODAsIDB4QzcsIDB4MDMsIDB4NkMsIDB4MUIsIDB4RjAsIDB4MEMsIDB4QzAsIDB4NjUsIDB4MDEsIDB4OUYsIDB4MDEsIDB4NkMsCisweDRFLCAweEYwLCAweDBELCAweEMwLCAweDgzLCAweDAxLCAweDEzLCAweDAwLCAweDNDLCAweDA0LCAweDcwLCAweDNELCAweEMwLAorMHhGNSwgMHgwOCwgMHg4NywgMHgwMywgMHg1NCwgMHg0NCwgMHhGMCwgMHgzMSwgMHhDMSwgMHgwNywgMHgxMSwgMHgxRiwgMHgwNSwKKzB4NDQsIDB4MDYsIDB4MzAsIDB4MzEsIDB4QzAsIDB4MDMsIDB4MDAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDA3LCAweDgwLCAweEZELCAweDQwLCAweEJGLCAweDAwLCAweEZDLCAweDAzLCAweEYyLCAweDBGLCAweEMwLCAweDNCLCAweDIwLAorMHhGRiwgMHgwMCwgMHhFOCwgMHg5NiwgMHhGMCwgMHgwRiwgMHhDMCwgMHgwRiwgMHgyMCwgMHgzRiwgMHgwMCwgMHhGQywgMHgwNiwKKzB4RTAsIDB4MEQsIDB4QzQsIDB4NEUsIDB4MDIsIDB4M0YsIDB4NDEsIDB4RjQsIDB4MDIsIDB4RjAsIDB4MkYsIDB4QzAsIDB4QkYsCisweDAwLCAweEJCLCAweDAyLCAweEM0LCAweDAyLCAweEQwLCAweDAzLCAweDQxLCAweDBGLCAweDAwLCAweDFGLCAweDAxLCAweEZDLAorMHgwMCwgMHhGMCwgMHgwMywgMHhDNCwgMHgzRiwgMHgyMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwKKzB4MDgsIDB4QTUsIDB4MDAsIDB4OTMsIDB4MDIsIDB4N0MsIDB4MDMsIDB4RjAsIDB4MEQsIDB4QzAsIDB4MzcsIDB4MDAsIDB4REYsCisweDAwLCAweDZFLCAweDBCLCAweDMwLCAweDBELCAweEMwLCAweEE0LCAweDgwLCAweDlGLCAweDAyLCAweDdDLCAweDAyLCAweEYwLAorMHg4RCwgMHhDMiwgMHgwNywgMHgwMiwgMHgxRSwgMHgwMCwgMHg3QywgMHgxOCwgMHhGMCwgMHgwRCwgMHhDMCwgMHgzNiwgMHgwMSwKKzB4OUYsIDB4MDYsIDB4NkMsIDB4MDgsIDB4RjIsIDB4ODEsIDB4QzgsIDB4MTYsIDB4NDQsIDB4ODMsIDB4MDIsIDB4NEQsIDB4OEEsCisweDMwLCAweDI5LCAweEM0LCAweDA4LCAweDIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEzLCAweEEwLAorMHgyNCwgMHgwMCwgMHg5MSwgMHgwMCwgMHg3NCwgMHgwMywgMHg1MCwgMHgwRCwgMHg0MCwgMHgzRiwgMHgwMCwgMHhERCwgMHgwNywKKzB4NzYsIDB4MUUsIDB4RjAsIDB4QUYsIDB4NDAsIDB4NDQsIDB4MDAsIDB4OUYsIDB4ODAsIDB4NzQsIDB4NEYsIDB4RDAsIDB4MUYsCisweEMwLCAweEM0LCAweDAwLCAweDFGLCAweDBDLCAweDcwLCAweDAyLCAweEYwLCAweDBDLCAweDQwLCAweEYwLCAweDA4LCAweDlELAorMHgwMiwgMHg1MCwgMHgwMiwgMHhEMiwgMHgxMSwgMHg1MCwgMHg1NCwgMHgwNCwgMHg5MSwgMHgwOSwgMHg2NCwgMHgwMiwgMHgzNCwKKzB4MzksIDB4QzAsIDB4NkMsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4MjAsIDB4MjIsCisweDAwLCAweEMxLCAweDQwLCAweDI0LCAweDAzLCAweDEwLCAweDRDLCAweDYwLCAweDMzLCAweDAwLCAweDRELCAweDA0LCAweDM0LAorMHgxRSwgMHgxMCwgMHgxQywgMHg0MCwgMHg0MCwgMHgwMCwgMHg4OSwgMHgwMCwgMHgzNiwgMHgxMSwgMHhEMCwgMHg0QywgMHg2MCwKKzB4MDIsIDB4MDQsIDB4MDksIDB4MDAsIDB4MzQsIDB4MEMsIDB4REEsIDB4MDAsIDB4MDAsIDB4ODIsIDB4MDIsIDB4MDgsIDB4MDAsCisweDE0LCAweDAwLCAweEQwLCAweDIwLCAweDQwLCAweDQwLCAweDAwLCAweDA5LCAweDgzLCAweDY0LCAweDMyLCAweDkwLCAweEM4LAorMHg0MCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNiwgMHgwOCwgMHg3QSwgMHg0MCwKKzB4RTEsIDB4MDEsIDB4MzQsIDB4MDcsIDB4NTAsIDB4MUUsIDB4NDAsIDB4N0IsIDB4MDAsIDB4NkQsIDB4ODEsIDB4RjYsIDB4MjYsCisweEQwLCAweDFDLCAweDQwLCAweDQ4LCAweDAwLCAweDI1LCAweDQ5LCAweEI2LCAweDI1LCAweEQwLCAweDlFLCAweDQwLCAweDQ4LAorMHgwMCwgMHgyRCwgMHgwMSwgMHhCNCwgMHgwNSwgMHhEMSwgMHg1MywgMHg0MCwgMHg0QSwgMHgwMSwgMHg3RCwgMHg4MSwgMHg5NCwKKzB4MjQsIDB4RDgsIDB4MTIsIDB4NjAsIDB4NEMsIDB4ODAsIDB4NjksIDB4MjEsIDB4QTQsIDB4MjQsIDB4MTAsIDB4MTMsIDB4NDAsCisweDNDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDEwLCAweEEyLCAweDAwLCAweDgxLAorMHgwMCwgMHgyQywgMHgyMywgMHgxMCwgMHgwQywgMHhDMCwgMHgzMywgMHgwMCwgMHg0RiwgMHgwMCwgMHgzNCwgMHgyMiwgMHgxMCwKKzB4MEMsIDB4QzEsIDB4NjAsIDB4MDUsIDB4ODksIDB4MDcsIDB4M0MsIDB4MTUsIDB4RjAsIDB4OEMsIDB4QzAsIDB4MDMsIDB4MDIsCisweDBGLCAweDAxLCAweDM4LCAweDQ2LCAweEYwLCAweDUwLCAweEU4LCAweDQyLCAweDEwLCAweENELCAweDE0LCAweDE0LCAweDIzLAorMHhGMCwgMHg4MCwgMHhDMCwgMHgwMCwgMHgwMCwgMHhDQiwgMHgxMCwgMHg0QywgMHgyMywgMHhCMiwgMHgyRCwgMHhFMCwgMHg0QSwKKzB4NjgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4QTgsIDB4MkQsIDB4MDAsIDB4RkYsIDB4ODAsCisweEZDLCAweDA3LCAweDcwLCAweDFGLCAweEMwLCAweDNGLCAweDAwLCAweDdGLCAweDA4LCAweEZDLCAweDIyLCAweDcwLCAweDBELAorMHhEMCwgMHgyNywgMHgwMiwgMHhCRSwgMHgwMCwgMHhGQywgMHgyMywgMHhGMCwgMHg4RiwgMHhDMCwgMHgwRiwgMHgwMiwgMHgzNSwKKzB4NDAsIDB4RkMsIDB4MDMsIDB4NzAsIDB4MEYsIDB4RTgsIDB4M0QsIDB4MDAsIDB4N0YsIDB4MDAsIDB4REMsIDB4MjMsIDB4RjAsCisweDAzLCAweEM4LCAweDA5LCAweDAyLCAweEY3LCAweDAwLCAweERDLCAweDIzLCAweEQwLCAweDgzLCAweEQwLCAweDBCLCAweDYwLAorMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHhBOCwgMHg2NywgMHgwMCwgMHg5MywgMHgwMCwgMHg3QywKKzB4MjMsIDB4RjAsIDB4MUQsIDB4RDAsIDB4MzQsIDB4MDAsIDB4NTcsIDB4MDAsIDB4N0MsIDB4MDMsIDB4MzAsIDB4REMsIDB4QzAsCisweDY1LCAweDIwLCAweDlCLCAweDIwLCAweDZDLCAweDA0LCAweEIwLCAweDlELCAweEMwLCAweDA0LCAweDAwLCAweDFGLCAweDgwLAorMHg3QywgMHgwNywgMHhCQywgMHgwMSwgMHhDMCwgMHgwNywgMHgwMCwgMHg1RiwgMHgwMSwgMHg2RSwgMHgwNywgMHgzOSwgMHgwMSwKKzB4QzAsIDB4MDcsIDB4ODAsIDB4NUYsIDB4MDAsIDB4NEMsIDB4MDEsIDB4MzMsIDB4MDksIDB4QzAsIDB4NDAsIDB4MDAsIDB4MEUsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDg4LCAweDM5LCAweDAwLCAweEFCLCAweDAwLCAweEI0LCAweDEzLAorMHhEMCwgMHgyQywgMHg0MCwgMHgzOCwgMHgxMSwgMHg2MSwgMHgwMCwgMHg4QywgMHgwMiwgMHgxOCwgMHg0RSwgMHg0MSwgMHgyOCwKKzB4MzAsIDB4MzEsIDB4MDAsIDB4ODQsIDB4MDMsIDB4MTEsIDB4Q0MsIDB4NDAsIDB4MDgsIDB4ODgsIDB4MkQsIDB4MDAsIDB4QjQsCisweDAzLCAweDEwLCAweDBBLCAweDQyLCAweDNCLCAweDgwLCAweDZELCAweDAwLCAweDk0LCAweDAzLCAweDE0LCAweDAyLCAweDQwLAorMHgwQiwgMHgwMCwgMHg3RCwgMHhDMCwgMHhDNCwgMHgwMSwgMHhCMCwgMHgwQSwgMHg0MCwgMHg0RCwgMHgwMCwgMHgwNiwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4NjksIDB4MDAsIDB4QTEsIDB4MDMsIDB4OTQsIDB4MDcsIDB4NTIsCisweDVFLCAweDYwLCAweDcwLCAweDAzLCAweDY1LCAweDQzLCAweEI0LCAweDA3LCAweDkwLCAweDFFLCAweDQwLCAweDZELCAweDAwLAorMHhBNSwgMHgwMSwgMHg4NCwgMHgwNCwgMHgxMCwgMHgxRSwgMHg0MCwgMHhDOSwgMHgwMCwgMHgyNSwgMHgwMSwgMHhCNCwgMHgwNywKKzB4MTAsIDB4MTYsIDB4NDQsIDB4NEIsIDB4MTAsIDB4RkQsIDB4MDEsIDB4OTQsIDB4ODcsIDB4MTAsIDB4MTYsIDB4NDQsIDB4NUIsCisweDIwLCAweEVELCAweDAxLCAweEE0LCAweDA1LCAweDEwLCAweDFDLCAweDY0LCAweDEwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgxNiwgMHgyOCwgMHgyMywgMHgwNCwgMHg4OSwgMHgwMCwgMHgzNCwgMHgwMywgMHhEMCwgMHgwQywKKzB4NDAsIDB4MzAsIDB4MDAsIDB4NDEsIDB4NDUsIDB4MzAsIDB4MkUsIDB4MTAsIDB4MEMsIDB4NDAsIDB4MzAsIDB4MDAsIDB4QzUsCisweDIwLCAweDA0LCAweDFGLCAweDEwLCAweDBDLCAweDUwLCAweEYxLCAweDAxLCAweENELCAweDQ4LCAweDM0LCAweDBGLCAweDEyLAorMHgzQywgMHg0MSwgMHhGMywgMHgwMCwgMHhDRCwgMHgyMiwgMHgxNCwgMHgxMywgMHgxMCwgMHgxQywgMHg0MCwgMHhGMywgMHgwQywKKzB4Q0QsIDB4MDcsIDB4MjQsIDB4NEYsIDB4MTAsIDB4NEMsIDB4NDgsIDB4NTksIDB4MjAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDE3LCAweEEwLCAweDlGLCAweDAwLCAweDczLCAweDAwLCAweDdDLCAweDAxLCAweEYwLCAweDA1LCAweEMwLAorMHgxNCwgMHgwMCwgMHg3NywgMHgwMCwgMHhCNCwgMHgwMSwgMHhCNSwgMHgwNSwgMHhDMCwgMHhERCwgMHgwMSwgMHg3NywgMHgwOCwKKzB4RUMsIDB4MEQsIDB4QjAsIDB4MDUsIDB4RTAsIDB4REQsIDB4MDAsIDB4N0YsIDB4MEIsIDB4RkMsIDB4MTUsIDB4QjEsIDB4MzcsCisweEMxLCAweERCLCAweDE2LCAweDdGLCAweDAyLCAweERELCAweDA5LCAweDMwLCAweDI3LCAweEMxLCAweDVGLCAweDE0LCAweDdGLAorMHgwNCwgMHhFNCwgMHgxRCwgMHgxMCwgMHgxNywgMHg0NSwgMHg1QywgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MTIsIDB4ODAsIDB4MDUsIDB4MDAsIDB4MUYsIDB4MjQsIDB4N0MsIDB4MDAsIDB4RjAsIDB4MDEsIDB4QzAsIDB4MDcsCisweDAwLCAweDFGLCAweDgwLCAweDRDLCAweDEwLCAweEYwLCAweDIxLCAweEMwLCAweDA3LCAweDA0LCAweDEyLCAweDAwLCAweDdELAorMHgyMCwgMHhGMCwgMHgwMSwgMHgwMCwgMHg4NiwgMHgwMCwgMHgxRiwgMHgwMCwgMHg3QywgMHg0OCwgMHhGMiwgMHgwMSwgMHhDMCwKKzB4ODcsIDB4MDAsIDB4MUYsIDB4MEEsIDB4NjQsIDB4MjAsIDB4RjAsIDB4MDEsIDB4QzEsIDB4ODcsIDB4MDAsIDB4MUYsIDB4NDAsCisweDVELCAweDAwLCAweEY0LCAweDAxLCAweEMwLCAweDRCLCAweDIwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgxMCwgMHgwMCwgMHgyNSwgMHgwMCwgMHg5RiwgMHgwMCwgMHg0QywgMHgwMiwgMHhGMCwgMHg4OSwgMHhDMCwgMHgyNywgMHgwMCwKKzB4OTMsIDB4ODAsIDB4N0MsIDB4MEEsIDB4MzAsIDB4MTksIDB4NDAsIDB4MjcsIDB4MDAsIDB4OUYsIDB4MDAsIDB4NkMsIDB4MDIsCisweEYwLCAweDE5LCAweEM4LCAweDI2LCAweDAwLCAweDkzLCAweDAxLCAweDdDLCAweDAyLCAweEYwLCAweDA5LCAweEMwLCAweDI3LAorMHgwMCwgMHg5MywgMHgxMCwgMHg1QywgMHgwMiwgMHhGMCwgMHgxOSwgMHhDMCwgMHgyNCwgMHgwMCwgMHg5RiwgMHgwMiwgMHg2QywKKzB4MEEsIDB4MzAsIDB4NTgsIDB4QzQsIDB4NDAsIDB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsCisweDIwLCAweDI2LCAweDAwLCAweDhELCAweDAwLCAweEM0LCAweDAyLCAweEQ4LCAweDFCLCAweDQwLCAweDI3LCAweDAwLCAweDk1LAorMHgwMSwgMHg3NCwgMHgwMiwgMHg1MCwgMHgwOSwgMHg0NCwgMHgyNywgMHgwMCwgMHg4NywgMHgwMCwgMHg0NCwgMHgwNiwgMHhEMCwKKzB4MjksIDB4NDQsIDB4RTMsIDB4MUMsIDB4OTEsIDB4MDEsIDB4NzQsIDB4MTIsIDB4RDAsIDB4MDksIDB4NEEsIDB4NjcsIDB4MDAsCisweDk1LCAweDIyLCAweDc0LCAweDgyLCAweEQwLCAweDE4LCAweDQwLCAweDI0LCAweDA4LCAweDlDLCAweDAzLCAweDA0LCAweDQyLAorMHgxNCwgMHgxOSwgMHg0MCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxQywgMHhBMCwKKzB4MjQsIDB4MDAsIDB4REQsIDB4MDAsIDB4NDQsIDB4MDIsIDB4RDAsIDB4MDksIDB4NDAsIDB4MjMsIDB4MDAsIDB4OTEsIDB4MDQsCisweDU0LCAweDAyLCAweDEwLCAweDY5LCAweDQ0LCAweDI3LCAweDgwLCAweDlELCAweDAwLCAweDQ0LCAweDA2LCAweEQwLCAweDg5LAorMHg0MSwgMHgyNywgMHg0MSwgMHhEMSwgMHgwQSwgMHg3NCwgMHgwMiwgMHhEMiwgMHgwRCwgMHg0OCwgMHgzNywgMHgwMiwgMHg5MSwKKzB4ODIsIDB4NzQsIDB4MDIsIDB4NTIsIDB4ODksIDB4MDAsIDB4MjQsIDB4MDAsIDB4OEQsIDB4MDAsIDB4NDIsIDB4MDMsIDB4MTAsCisweDA5LCAweDQwLCAweDYwLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDI4LCAweEEwLAorMHgwMCwgMHg5RCwgMHgwMiwgMHgwNCwgMHgwQSwgMHhEMCwgMHgwOCwgMHg0MCwgMHhBMywgMHgwMCwgMHg4NSwgMHgyMCwgMHg3NCwKKzB4MDMsIDB4NTAsIDB4MDgsIDB4NDgsIDB4MjMsIDB4MDAsIDB4OTUsIDB4MDgsIDB4MDQsIDB4ODMsIDB4RDIsIDB4MDgsIDB4NDAsCisweDIzLCAweDAwLCAweDgxLCAweDAwLCAweDM0LCAweDIyLCAweEQwLCAweDg4LCAweDQwLCAweDIzLCAweDAwLCAweDg1LCAweDgwLAorMHgzNCwgMHgyMiwgMHhEMCwgMHgwOSwgMHg1MCwgMHgzMCwgMHg5MCwgMHhDRCwgMHg2OCwgMHg0NSwgMHhBMiwgMHgxMCwgMHg0OCwKKzB4NTAsIDB4NDAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MUQsIDB4QjAsIDB4MDIsIDB4MDAsCisweDFGLCAweDAwLCAweDRELCAweDA0LCAweEQwLCAweDExLCAweEMwLCAweDA3LCAweDA1LCAweDEzLCAweDgwLCAweDVDLCAweDgwLAorMHgzMCwgMHg0MSwgMHhDMSwgMHgwNywgMHgyMCwgMHgxRiwgMHgwMiwgMHg0RCwgMHgwMCwgMHhGMCwgMHg0MSwgMHhDMSwgMHgwNywKKzB4MDAsIDB4MTMsIDB4ODAsIDB4MzgsIDB4MDgsIDB4RjAsIDB4MjEsIDB4QzAsIDB4MTcsIDB4MjAsIDB4MTMsIDB4MDAsIDB4M0UsCisweDA4LCAweDcwLCAweDAxLCAweEMwLCAweDA0LCAweDA4LCAweDFGLCAweDE2LCAweDRDLCAweDA4LCAweDMwLCAweDA1LCAweEMwLAorMHg3NCwgMHhFMCwgMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOSwgMHhBOCwgMHg3RiwgMHgwMCwgMHhCRiwKKzB4MDEsIDB4N0MsIDB4MEUsIDB4RDAsIDB4MjksIDB4QzAsIDB4NjcsIDB4MTAsIDB4QkYsIDB4MDAsIDB4QkMsIDB4MDIsIDB4RjAsCisweDA5LCAweEMwLCAweDJCLCAweDAwLCAweEI3LCAweDA0LCAweDlDLCAweDAyLCAweEYyLCAweDA5LCAweEMwLCAweDNGLCAweDIwLAorMHhGRiwgMHg0MCwgMHhGQywgMHgxMiwgMHhEMCwgMHg0QiwgMHhDMCwgMHgyRiwgMHgxMCwgMHhBRiwgMHg4MCwgMHhGRSwgMHgxMiwKKzB4RjAsIDB4MEIsIDB4QzgsIDB4MkYsIDB4MDAsIDB4QkUsIDB4NDQsIDB4REMsIDB4MTMsIDB4RjAsIDB4OEIsIDB4QzAsIDB4NzcsCisweDYwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE5LCAweDAwLCAweDI3LCAweDAwLCAweDlGLCAweDQyLAorMHg3QywgMHgzNiwgMHhGMCwgMHgxQiwgMHhDMSwgMHgyNywgMHgwMiwgMHhCRiwgMHgwMCwgMHhEQywgMHgwMiwgMHhGMiwgMHg0QiwKKzB4QzEsIDB4MkYsIDB4MDAsIDB4REIsIDB4ODAsIDB4Q0MsIDB4MDIsIDB4RjAsIDB4MEIsIDB4QzgsIDB4MkYsIDB4MDAsIDB4QkYsCisweDAwLCAweEM0LCAweDIyLCAweEYwLCAweDA5LCAweDQwLCAweDI4LCAweDAwLCAweEJFLCAweDAwLCAweDRDLCAweDgyLCAweDMwLAorMHgwQiwgMHhDMCwgMHgyQiwgMHgwOCwgMHhCRiwgMHgwMCwgMHhDQywgMHgwMiwgMHgzMCwgMHgwQiwgMHhDMCwgMHg3NCwgMHgwMCwKKzB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MUMsIDB4MTAsIDB4NDcsIDB4MDUsIDB4MUQsIDB4QzEsIDB4MzQsCisweDBDLCAweEQwLCAweDIxLCAweDQwLCAweDQzLCAweDIwLCAweDFELCAweDAwLCAweDQ0LCAweDAwLCAweEQwLCAweDAxLCAweDQwLAorMHgwNywgMHgwMCwgMHgxRCwgMHg3MCwgMHg0NCwgMHgwMCwgMHhEMCwgMHg4MSwgMHg0MCwgMHgwNywgMHgwMCwgMHgxRCwgMHgwMCwKKzB4NDQsIDB4MTEsIDB4NzIsIDB4MDEsIDB4NDEsIDB4MDQsIDB4MzAsIDB4MUQsIDB4MjAsIDB4NTQsIDB4NTAsIDB4MTAsIDB4MDEsCisweDQwLCAweDE3LCAweDAwLCAweDFELCAweDAwLCAweDBDLCAweDAwLCAweDEwLCAweDAxLCAweDQ0LCAweDYxLCAweDIwLCAweDBDLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHgyOCwgMHgyMSwgMHgwMCwgMHg4RCwgMHgwMCwgMHgzNCwgMHgzMiwKKzB4RDAsIDB4MDgsIDB4NDAsIDB4MjMsIDB4MDMsIDB4OEQsIDB4MDAsIDB4MDUsIDB4MDIsIDB4RDAsIDB4MDgsIDB4NDAsIDB4MjMsCisweDAwLCAweDg5LCAweDA0LCAweDA1LCAweDAyLCAweEQwLCAweDA4LCAweDA4LCAweDMzLCAweDAwLCAweDlELCAweDAwLCAweDA1LAorMHgxMiwgMHhEOCwgMHg0OCwgMHg0MCwgMHgyMCwgMHgwMCwgMHg4RCwgMHgwMCwgMHgxNCwgMHg5MiwgMHgxMCwgMHgwOCwgMHg2MCwKKzB4MjMsIDB4MDAsIDB4OEQsIDB4MDAsIDB4MDQsIDB4ODIsIDB4MTAsIDB4MDksIDB4NDAsIDB4NEEsIDB4MDAsIDB4MDQsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDIwLCAweDI1LCAweDAwLCAweDlELCAweDAwLCAweDc0LCAweDAyLCAweEQwLAorMHgwOSwgMHg0MCwgMHgyNywgMHgwOCwgMHhERCwgMHgwMCwgMHg0NCwgMHgwMiwgMHhEMCwgMHgwRCwgMHg0MCwgMHg2NywgMHgyMCwKKzB4OEQsIDB4MTgsIDB4NDQsIDB4MDIsIDB4RDAsIDB4MDksIDB4NDQsIDB4NjYsIDB4MTAsIDB4OUQsIDB4MDAsIDB4NDQsIDB4MDIsCisweDUwLCAweDI4LCAweDU0LCAweEI0LCAweDAyLCAweDlELCAweDEwLCAweDU1LCAweDAyLCAweDEwLCAweDA5LCAweDQxLCAweDI3LAorMHgwMCwgMHhERCwgMHgwMCwgMHgwNCwgMHgwMiwgMHg5MCwgMHgxOSwgMHg2MCwgMHg2MywgMHgyOCwgMHgwNCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4QTgsIDB4RUYsIDB4MDAsIDB4QkYsIDB4MEQsIDB4RkMsIDB4ODIsIDB4RjIsIDB4MDksCisweEMwLCAweDJGLCAweDAwLCAweDlGLCAweDEzLCAweDRDLCAweDAyLCAweEYwLCAweDA5LCAweEM0LCAweEU3LCAweDI0LCAweDlCLAorMHg4MSwgMHg0NCwgMHg0NiwgMHhGMiwgMHgwOSwgMHhDOCwgMHg2NywgMHgyMCwgMHg5RiwgMHgwMCwgMHg0QywgMHgwMiwgMHhGMCwKKzB4MDksIDB4QzAsIDB4RTQsIDB4MDAsIDB4OUYsIDB4MjAsIDB4NTQsIDB4MUEsIDB4MzAsIDB4MjksIDB4QzAsIDB4MjcsIDB4MDAsCisweDlGLCAweDEyLCAweDRDLCAweDBFLCAweDM0LCAweDU5LCAweEMwLCAweDE2LCAweDAwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgxMiwgMHg4MCwgMHhFNSwgMHgwMCwgMHg5RiwgMHgwMCwgMHg3QywgMHgwMiwgMHhGMCwgMHgwOSwgMHhDMCwKKzB4MjcsIDB4MDAsIDB4OUYsIDB4MDUsIDB4NkMsIDB4MDIsIDB4RjAsIDB4MDksIDB4QzAsIDB4MjcsIDB4MDAsIDB4OUYsIDB4MDEsCisweDdDLCAweDYyLCAweEUwLCAweDA5LCAweDAwLCAweDI3LCAweDAwLCAweDlGLCAweDAyLCAweDdDLCAweDAyLCAweDcyLCAweDQ5LAorMHhDMCwgMHgyNywgMHgwMCwgMHg5RiwgMHgwMywgMHg3QywgMHgyMiwgMHhENCwgMHg5OSwgMHhDMCwgMHgyNywgMHgwMSwgMHg5RCwKKzB4MTMsIDB4N0YsIDB4RDIsIDB4NzAsIDB4MDksIDB4QzEsIDB4NTksIDB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDEwLCAweDA4LCAweDg1LCAweDAwLCAweDFGLCAweDAwLCAweDdDLCAweDAwLCAweEIwLCAweDAxLCAweEQwLCAweDA2LAorMHgwMCwgMHgxMywgMHgwMiwgMHg0QywgMHgwMCwgMHhGMCwgMHgwMSwgMHhDMCwgMHg4NywgMHg4MCwgMHgxRiwgMHgwMiwgMHg1QywKKzB4ODgsIDB4MzAsIDB4MDEsIDB4QzUsIDB4ODUsIDB4NDAsIDB4MTMsIDB4MzAsIDB4NEMsIDB4MDAsIDB4RjAsIDB4MjEsIDB4QzAsCisweDA3LCAweDAxLCAweDEzLCAweDIzLCAweDVDLCAweDA4LCAweEYwLCAweDAxLCAweEMxLCAweDA1LCAweDE0LCAweDAzLCAweDAwLAorMHg0QywgMHgwMCwgMHgyMSwgMHgwMSwgMHhDMCwgMHg1MywgMHgyMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MTQsIDB4QTAsIDB4MTQsIDB4MDAsIDB4NUQsIDB4MDAsIDB4NzQsIDB4MDEsIDB4NTgsIDB4NzcsIDB4NDAsIDB4MTQsIDB4MDAsCisweDY1LCAweDAyLCAweEQ4LCAweDAxLCAweEQwLCAweDE3LCAweDQwLCAweDE3LCAweDgwLCAweDVDLCAweDAwLCAweEQ0LCAweDAxLAorMHgxMSwgMHgwNywgMHgwMSwgMHg5RCwgMHgwMCwgMHg2MSwgMHgwMiwgMHhDNCwgMHg4NSwgMHgzMiwgMHgwNSwgMHhDMCwgMHg5RCwKKzB4NDAsIDB4NjEsIDB4MTAsIDB4NDgsIDB4MDEsIDB4RDEsIDB4MDcsIDB4NDAsIDB4NUYsIDB4MDQsIDB4NzEsIDB4MDAsIDB4RDQsCisweDgxLCAweDUwLCAweDA3LCAweDQ4LCAweDQzLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LAorMHhBMCwgMHgzMiwgMHgwMCwgMHhDRCwgMHgwMCwgMHgzNCwgMHgwMywgMHgxMCwgMHg3OCwgMHg0MCwgMHgzMCwgMHgwMCwgMHg0MSwKKzB4MDQsIDB4MjQsIDB4MDIsIDB4RDAsIDB4REMsIDB4NDAsIDB4MzMsIDB4MjAsIDB4Q0QsIDB4NDAsIDB4MTQsIDB4MDMsIDB4MTAsCisweDBDLCAweDBBLCAweEIwLCAweDBDLCAweEMxLCAweDA4LCAweDA1LCAweDA3LCAweEQwLCAweDBDLCAweDQwLCAweDcxLCAweDAwLAorMHhDMSwgMHg4MCwgMHg1MCwgMHg4MywgMHhEMCwgMHgwQywgMHg0MCwgMHgzMSwgMHgwMCwgMHhDMSwgMHgwMywgMHgwNCwgMHgyQiwKKzB4MUMsIDB4MkQsIDB4NDAsIDB4NDMsIDB4MDAsIDB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4ODAsCisweDM4LCAweDAxLCAweEVELCAweDA0LCAweEI0LCAweDI3LCAweDU4LCAweDFBLCAweDQwLCAweDc4LCAweDAxLCAweEY1LCAweDAwLAorMHg5NCwgMHgwMiwgMHhEOCwgMHgwQSwgMHg0MCwgMHgzQiwgMHgwMCwgMHhFRCwgMHgwQywgMHg5NCwgMHgwQywgMHgxMCwgMHgxQSwKKzB4NEEsIDB4N0QsIDB4MDAsIDB4RTEsIDB4MjAsIDB4ODQsIDB4NDMsIDB4MDAsIDB4NEUsIDB4NDAsIDB4NEQsIDB4MjQsIDB4RjEsCisweDQwLCAweEE0LCAweDAzLCAweEQwLCAweDBFLCAweDQwLCAweDdGLCAweDA4LCAweEUxLCAweDgyLCAweDg0LCAweDAxLCAweDEwLAorMHgwNiwgMHg0NCwgMHgxMywgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMSwgMHgwMCwgMHhGOCwKKzB4MDAsIDB4RUYsIDB4MDMsIDB4QkMsIDB4MDcsIDB4MzAsIDB4MUEsIDB4QzIsIDB4NzgsIDB4MDEsIDB4NjMsIDB4MDEsIDB4QUMsCisweDA2LCAweEYwLCAweDFFLCAweEMwLCAweDdCLCAweDAwLCAweEZELCAweDMxLCAweDk2LCAweDA0LCAweDMwLCAweDFBLCAweDQwLAorMHg3OSwgMHgwMCwgMHg2MywgMHgwMSwgMHg4QywgMHgwNywgMHhGMCwgMHgxRSwgMHhDMSwgMHg0OSwgMHgyMCwgMHhFMywgMHgwMSwKKzB4OUUsIDB4MTcsIDB4RjIsIDB4MUUsIDB4QzgsIDB4NzksIDB4NDAsIDB4RjMsIDB4MDEsIDB4OEQsIDB4MDYsIDB4MzAsIDB4MUUsCisweEMwLCAweDUzLCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweEE4LCAweDM1LCAweDAwLAorMHhERiwgMHgwMCwgMHg3QywgMHgwMywgMHhGMCwgMHgwOCwgMHhDMCwgMHgzNywgMHgxMCwgMHhDRiwgMHgwMCwgMHg3QywgMHgwMiwKKzB4RjEsIDB4MDEsIDB4QzAsIDB4MzcsIDB4MDAsIDB4REQsIDB4MDIsIDB4MkMsIDB4MDAsIDB4RjAsIDB4MDgsIDB4RTAsIDB4MzMsCisweDAwLCAweDRGLCAweDAwLCAweDdDLCAweDAxLCAweEEyLCAweDRELCAweEMwLCAweDA1LCAweDIwLCAweENGLCAweDIwLCAweDVDLAorMHgxQiwgMHhGMiwgMHgwOSwgMHhFMCwgMHgzNywgMHgwMCwgMHhERCwgMHgwMCwgMHg3QywgMHgwMCwgMHhGMCwgMHgwOSwgMHhDMCwKKzB4NDMsIDB4NjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MjAsIDB4NzksIDB4MDAsIDB4RTMsCisweDAxLCAweENDLCAweDEzLCAweEY4LCAweDhGLCAweEMwLCAweDdELCAweDA0LCAweDdGLCAweDA5LCAweENDLCAweDA2LCAweEYwLAorMHg5RiwgMHhDMCwgMHg3RiwgMHgwMiwgMHhGNywgMHgwMSwgMHgzQywgMHgyNCwgMHg3MCwgMHg5QiwgMHhDMCwgMHg0NywgMHgyMiwKKzB4QkYsIDB4MEQsIDB4Q0MsIDB4MDYsIDB4QjAsIDB4OUQsIDB4NDEsIDB4NEYsIDB4MDIsIDB4QkYsIDB4MDEsIDB4Q0QsIDB4NEYsCisweDMwLCAweDlFLCAweEM4LCAweDdDLCAweDEyLCAweDNCLCAweDA5LCAweENDLCAweDA3LCAweDM0LCAweDk3LCAweEQ4LCAweDE4LAorMHgwOCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwgMHgxOCwgMHgzOCwgMHgwMCwgMHhFMSwgMHgxOCwKKzB4ODQsIDB4MDMsIDB4RDgsIDB4MEUsIDB4NDAsIDB4MzgsIDB4MjAsIDB4RUQsIDB4MEMsIDB4QUMsIDB4MDIsIDB4RDAsIDB4MEEsCisweDQ0LCAweDMzLCAweDAwLCAweENELCAweDA4LCAweEI0LCAweDI0LCAweDEwLCAweENBLCAweDA4LCAweDdCLCAweDAxLCAweDRELAorMHg5OCwgMHg0NCwgMHg0MywgMHgxMCwgMHg1RSwgMHg0MCwgMHgwMywgMHgwMywgMHhBRCwgMHgwNCwgMHg5NCwgMHgyMywgMHgxMCwKKzB4MEUsIDB4NDIsIDB4MjksIDB4MDMsIDB4MkQsIDB4MEMsIDB4RkMsIDB4MTEsIDB4MTAsIDB4ODYsIDB4NDAsIDB4NTQsIDB4MDAsCisweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAwLCAweDdELCAweDAwLCAweEYxLCAweDAxLCAweDg0LAorMHgyNywgMHhEMCwgMHhDOCwgMHg0MCwgMHg3OSwgMHgwMiwgMHg3RCwgMHgwMCwgMHhBNiwgMHgwMiwgMHg1MCwgMHgwQSwgMHg0OCwKKzB4M0IsIDB4ODAsIDB4RUQsIDB4MDAsIDB4RjQsIDB4MDAsIDB4RDAsIDB4MDIsIDB4MEEsIDB4MDksIDB4MDgsIDB4M0QsIDB4MDYsCisweEE2LCAweDIyLCAweDEwLCAweDBFLCAweDQ0LCAweDBCLCAweDE0LCAweEJELCAweDAwLCAweEM2LCAweDAzLCAweDEwLCAweDBFLAorMHg0MCwgMHgxOSwgMHgxMCwgMHgyRCwgMHg0MCwgMHhDNCwgMHgwMiwgMHgxMiwgMHgwNiwgMHg0MiwgMHg2MCwgMHgwMiwgMHgwNCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDYsIDB4MjAsIDB4MzEsIDB4MDAsIDB4QzEsIDB4MDAsIDB4MDQsIDB4MDMsCisweEQ4LCAweDA4LCAweDQwLCAweDMwLCAweDAwLCAweENELCAweDAwLCAweDI0LCAweDIyLCAweEQwLCAweDAwLCAweDQwLCAweDMzLAorMHgwMCwgMHhDRCwgMHgyMCwgMHgzNCwgMHg0QywgMHg5MCwgMHgwMCwgMHg0MCwgMHhCMiwgMHgwMSwgMHg0RCwgMHgwMSwgMHgyNCwKKzB4ODUsIDB4OUEsIDB4MkQsIDB4NDgsIDB4QzMsIDB4MDAsIDB4OEQsIDB4MTAsIDB4MTQsIDB4OUIsIDB4MTAsIDB4MjgsIDB4NDEsCisweDgxLCAweDAwLCAweDhELCAweDA4LCAweDA1LCAweDA4LCAweDEwLCAweEI4LCAweDQwLCAweDA4LCAweDIwLCAweDA0LCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxRCwgMHhBOCwgMHgzNSwgMHg0MSwgMHhEMywgMHgwMSwgMHg0RCwgMHgwMywgMHhEMCwKKzB4MDksIDB4QzAsIDB4MzUsIDB4MDAsIDB4NUYsIDB4MDAsIDB4MkMsIDB4MDMsIDB4NzAsIDB4MDUsIDB4QzAsIDB4NzcsIDB4MDQsCisweEZGLCAweDExLCAweDdDLCAweDFDLCAweEYwLCAweDAxLCAweEMwLCAweDM1LCAweDA4LCAweERGLCAweDAyLCAweDZELCAweDA5LAorMHgzNCwgMHgwRiwgMHhDMCwgMHhDNywgMHgyMCwgMHhDRCwgMHg4MSwgMHhDNCwgMHgwMywgMHgzMCwgMHgyRCwgMHhDMCwgMHgyMSwKKzB4MDAsIDB4REIsIDB4MkIsIDB4NDQsIDB4MEIsIDB4MzAsIDB4QjksIDB4QzAsIDB4NzQsIDB4MDAsIDB4MDYsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDM3LCAweDAwLCAweERGLCAweDAwLCAweDNDLCAweDAzLCAweEYwLCAweDI5LAorMHhDMCwgMHgzNywgMHgwMCwgMHg1RiwgMHg0MiwgMHg3QywgMHg0QSwgMHhGMCwgMHgwNSwgMHhDMCwgMHgyNywgMHg5MSwgMHhERiwKKzB4MjQsIDB4N0MsIDB4MDAsIDB4NzAsIDB4MDksIDB4QzAsIDB4MzcsIDB4MEEsIDB4REYsIDB4MDIsIDB4NUMsIDB4NDIsIDB4NzAsCisweENELCAweEMwLCAweDA3LCAweDA0LCAweDlGLCAweDAxLCAweDZDLCAweDAzLCAweEYwLCAweDI1LCAweDQwLCAweDA3LCAweDAxLAorMHhERiwgMHgwMiwgMHg3QywgMHgwOSwgMHhGMCwgMHgyOSwgMHhDOCwgMHgxNywgMHgyMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDUsIDB4MDgsIDB4M0YsIDB4MDAsIDB4RkYsIDB4MDAsIDB4QzgsIDB4MDMsIDB4MzAsIDB4MUIsIDB4QzAsCisweDNGLCAweDIwLCAweDdGLCAweDQxLCAweEZDLCAweDI3LCAweDMwLCAweDQ2LCAweEMwLCAweDdFLCAweDAxLCAweEZGLCAweDIwLAorMHhDQywgMHgwQywgMHg3MCwgMHgwMywgMHhDMCwgMHgwRiwgMHgwMCwgMHhCRiwgMHgwOCwgMHhGOCwgMHgwNSwgMHhCNCwgMHgwRiwKKzB4QzAsIDB4MEQsIDB4MDgsIDB4RkYsIDB4MDAsIDB4REMsIDB4MDMsIDB4RjAsIDB4MEYsIDB4QzAsIDB4MkYsIDB4MTAsIDB4RTcsCisweDAxLCAweENDLCAweDQ2LCAweEYwLCAweDA5LCAweEMwLCAweDA3LCAweDIyLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHg4NSwgMHgyMCwgMHgzNiwgMHgwMCwgMHhERCwgMHgwMCwgMHg1NCwgMHgwMywgMHg1MCwgMHgxOSwgMHg0MCwgMHgzNywKKzB4MDAsIDB4MUQsIDB4MDIsIDB4NzQsIDB4MEQsIDB4MTAsIDB4MTUsIDB4NDAsIDB4MjQsIDB4MDAsIDB4REQsIDB4MDAsIDB4NDQsCisweDBDLCAweEQxLCAweDE5LCAweEMwLCAweDA3LCAweDAxLCAweDlELCAweDAyLCAweDc0LCAweDA4LCAweDkwLCAweDBELCAweDQwLAorMHhDNCwgMHgwMCwgMHg5RCwgMHgwMywgMHg2QywgMHgwMywgMHhEMiwgMHhGNSwgMHg0MCwgMHg0NywgMHgwMCwgMHgxMSwgMHgwMSwKKzB4NDQsIDB4MDIsIDB4RDAsIDB4MzksIDB4NDgsIDB4MDcsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAxLCAweEEwLCAweDM0LCAweDAwLCAweENELCAweDAwLCAweDU0LCAweDAzLCAweDkwLCAweDhELCAweDQxLCAweDM3LCAweDAwLAorMHg1RCwgMHgwOCwgMHg3NCwgMHg0MywgMHg1MCwgMHgwRCwgMHg0MCwgMHgzNiwgMHgwMCwgMHhDOSwgMHgwMCwgMHg0NCwgMHhDMCwKKzB4RDgsIDB4MTEsIDB4MDAsIDB4MDcsIDB4MDIsIDB4OUQsIDB4MDIsIDB4MzYsIDB4MTgsIDB4MTIsIDB4MEQsIDB4NDAsIDB4NDYsCisweDAwLCAweDlELCAweDAzLCAweDYwLCAweDAzLCAweEQwLCAweDBELCAweDQwLCAweEU3LCAweDAwLCAweDExLCAweDA0LCAweDQ0LAorMHg5QiwgMHhEMCwgMHgxMSwgMHg0RCwgMHgwNywgMHgwMCwgMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwKKzB4MjgsIDB4MzAsIDB4MDAsIDB4Q0QsIDB4MDAsIDB4MTQsIDB4MDMsIDB4NTAsIDB4MDQsIDB4NDAsIDB4MzIsIDB4MDAsIDB4Q0QsCisweDAwLCAweDM0LCAweDAyLCAweDU2LCAweDBDLCAweDQyLCAweDIwLCAweDgwLCAweENELCAweDAwLCAweDA1LCAweDEwLCAweEQwLAorMHgxOCwgMHg0MCwgMHgzMSwgMHgwOSwgMHg0RCwgMHgyMCwgMHgzNCwgMHgyMiwgMHgxMSwgMHg2QywgMHg1MCwgMHgwMiwgMHgwMiwKKzB4OEQsIDB4MDAsIDB4MjQsIDB4MDMsIDB4RDIsIDB4MEMsIDB4NDIsIDB4MDMsIDB4ODAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsCisweEQwLCAweDA4LCAweDRBLCAweDQzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweEIwLAorMHgzRSwgMHgwOCwgMHhGRiwgMHgwMCwgMHhEQywgMHgwMywgMHgzMCwgMHgwRCwgMHhDMCwgMHgzRiwgMHgwMCwgMHg1RiwgMHgwMCwKKzB4NzQsIDB4MDMsIDB4NzAsIDB4MDksIDB4QzAsIDB4MzYsIDB4MTAsIDB4RkIsIDB4MDAsIDB4NEMsIDB4NTAsIDB4NzEsIDB4MDEsCisweDY0LCAweDA3LCAweDAwLCAweDlGLCAweDA4LCAweDdDLCAweDAwLCAweEIwLCAweDZGLCAweEMwLCAweDA3LCAweEEwLCAweDlGLAorMHg4MCwgMHhEQywgMHgwMywgMHhGMCwgMHgwRCwgMHhDMCwgMHgwNywgMHg0MCwgMHg0NywgMHg4MCwgMHg0RSwgMHgwMSwgMHhGMiwKKzB4MDEsIDB4QzAsIDB4MDcsIDB4NjAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4QTAsIDB4M0YsCisweDAwLCAweEZGLCAweDAwLCAweEZDLCAweDAzLCAweDcwLCAweDA3LCAweEMwLCAweDNGLCAweDAwLCAweEFGLCAweDAwLCAweEZDLAorMHgwMSwgMHhCMCwgMHgwMywgMHhDMCwgMHgyRiwgMHgwNCwgMHhGQywgMHgxMCwgMHhGQywgMHg0MCwgMHhGMCwgMHgwMywgMHhDMCwKKzB4OEYsIDB4MDgsIDB4MkYsIDB4MDAsIDB4RkMsIDB4MTAsIDB4RDIsIDB4OEYsIDB4QzAsIDB4MEQsIDB4MDEsIDB4MkUsIDB4MDAsCisweEJDLCAweDAzLCAweEUwLCAweDBGLCAweEMyLCAweDBGLCAweDAwLCAweDNGLCAweDAwLCAweEZELCAweDAwLCAweEYwLCAweDBCLAorMHhDMiwgMHgxNywgMHg2NCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHg4MCwgMHgzRiwgMHgwMCwKKzB4QTMsIDB4NDAsIDB4Q0MsIDB4MDIsIDB4RjAsIDB4MEIsIDB4QzAsIDB4M0YsIDB4MTEsIDB4QjMsIDB4MjAsIDB4RkMsIDB4MjYsCisweEIwLCAweDlGLCAweEQyLCAweDJDLCAweDAwLCAweEZGLCAweDIxLCAweEVDLCAweDEwLCAweEIyLCAweDhGLCAweEM4LCAweDNDLAorMHgxMiwgMHhGRiwgMHgwNCwgMHhFQywgMHgyMCwgMHg3MiwgMHgwRiwgMHhDMCwgMHg3RiwgMHgwMiwgMHhGMywgMHgwMywgMHhFRCwKKzB4MUIsIDB4QjAsIDB4OUIsIDB4QzAsIDB4N0MsIDB4MEEsIDB4REYsIDB4MDEsIDB4RkMsIDB4MUEsIDB4MzQsIDB4NDksIDB4QzAsCisweDBFLCAweDAwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDNGLCAweDAwLCAweEIxLAorMHgwMSwgMHg0NCwgMHg4MiwgMHg3MCwgMHgwMSwgMHgwMiwgMHgzRiwgMHgyMiwgMHg5MSwgMHgwMCwgMHgzNCwgMHgxMywgMHgxMCwKKzB4NEMsIDB4NDgsIDB4QjQsIDB4MDEsIDB4RDEsIDB4MDEsIDB4NTQsIDB4MjQsIDB4RDAsIDB4NkYsIDB4NjAsIDB4QkMsIDB4MDEsCisweEZELCAweDA5LCAweDQ0LCAweDE4LCAweDEwLCAweDlGLCAweDQwLCAweDMzLCAweDAxLCAweEQxLCAweDAwLCAweDg0LCAweDFCLAorMHgxNCwgMHg0OCwgMHg1MCwgMHgzNCwgMHgyMSwgMHhERCwgMHgwNCwgMHg3NCwgMHgxMiwgMHgxMSwgMHgxOSwgMHg0MCwgMHgwRCwKKzB4MDAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTEsIDB4QTAsIDB4MzEsIDB4MDAsIDB4ODEsIDB4MDAsCisweDA0LCAweDAyLCAweEQwLCAweDA4LCAweDQwLCAweDMzLCAweDIwLCAweEM1LCAweDIwLCAweDE0LCAweDA3LCAweDUwLCAweDBDLAorMHg0MCwgMHg4MSwgMHgwNCwgMHhDNSwgMHgwMCwgMHgwNCwgMHgwMCwgMHhEMCwgMHg2QywgMHg0OCwgMHhCMCwgMHgwMSwgMHhDRCwKKzB4MDAsIDB4MjQsIDB4MUMsIDB4MTAsIDB4MEMsIDB4NDAsIDB4MzMsIDB4MDAsIDB4QzEsIDB4MDQsIDB4MDQsIDB4MEIsIDB4NTAsCisweDBELCAweDQwLCAweDMwLCAweDAxLCAweENELCAweDE0LCAweDM0LCAweDE4LCAweDEwLCAweDgxLCAweDQwLCAweDVDLCAweDgwLAorMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHhBOCwgMHgzNywgMHgwMCwgMHg5MSwgMHg0MSwgMHg0NCwKKzB4MEUsIDB4NTIsIDB4MTEsIDB4NDUsIDB4MzcsIDB4MTAsIDB4RDUsIDB4NDMsIDB4NzQsIDB4MDcsIDB4NTAsIDB4MEQsIDB4NDQsCisweDU1LCAweDAwLCAweEQ1LCAweDA0LCAweDU2LCAweDg4LCAweEQwLCAweDBDLCAweDQwLCAweDM0LCAweDAwLCAweERELCAweDAwLAorMHgyNCwgMHgwMiwgMHgxMywgMHgwRCwgMHg0MCwgMHgzNywgMHg4MCwgMHhDMSwgMHgwMSwgMHg0NCwgMHgwMywgMHg1MCwgMHgwRCwKKzB4NDAsIDB4MzQsIDB4MDAsIDB4REQsIDB4ODAsIDB4NzQsIDB4MDYsIDB4MTAsIDB4MTEsIDB4NDAsIDB4MUQsIDB4MjAsIDB4MDYsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweEEwLCAweDM3LCAweDAwLCAweDkzLCAweDAxLCAweDRELCAweDA0LAorMHhGMCwgMHgxMSwgMHhDNCwgMHgzNywgMHhDMCwgMHhENywgMHgwMywgMHg3QywgMHgwNywgMHhGMCwgMHg4RCwgMHhDMCwgMHhDNSwKKzB4MDAsIDB4REYsIDB4MDEsIDB4NEMsIDB4MEMsIDB4QjIsIDB4MEQsIDB4NDAsIDB4MzQsIDB4MDAsIDB4REYsIDB4MDAsIDB4NkMsCisweDAxLCAweDcwLCAweDBELCAweEMwLCAweDc3LCAweDBBLCAweEQzLCAweDgwLCAweDZDLCAweDAzLCAweEYwLCAweDA4LCAweEM0LAorMHgzNCwgMHgwMCwgMHhERiwgMHgwMCwgMHg3QywgMHgwRSwgMHgzMCwgMHgzOSwgMHhDMCwgMHg4MiwgMHgwMCwgMHgwRSwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4ODgsIDB4M0QsIDB4MTAsIDB4RUYsIDB4MDAsIDB4RkMsIDB4ODAsIDB4NzAsCisweDAzLCAweEMwLCAweDNGLCAweDAwLCAweEZCLCAweDgwLCAweEY4LCAweDAzLCAweEI0LCAweDBGLCAweEMwLCAweDFBLCAweDAwLAorMHhGQiwgMHgwMCwgMHg1QywgMHgyMiwgMHhGMCwgMHgwRiwgMHhDMiwgMHgzNywgMHgzMCwgMHhFRiwgMHgwMCwgMHg1QywgMHgwRCwKKzB4RjMsIDB4MEYsIDB4QzAsIDB4N0YsIDB4NDAsIDB4RkYsIDB4ODAsIDB4REMsIDB4MDMsIDB4QjAsIDB4MEIsIDB4QzAsIDB4M0YsCisweDIwLCAweEZGLCAweDAwLCAweEZDLCAweDAyLCAweEYwLCAweDBCLCAweEMwLCAweDBGLCAweDIwLCAweDA2LCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHgwOCwgMHgzNSwgMHgwQSwgMHg5MywgMHgwMCwgMHg0QywgMHgwQSwgMHhGMiwgMHg2OSwKKzB4QzAsIDB4MzMsIDB4MjAsIDB4REYsIDB4MDIsIDB4NUQsIDB4ODMsIDB4RjAsIDB4Q0QsIDB4QzAsIDB4ODQsIDB4MDAsIDB4RDMsCisweDAxLCAweDdDLCAweDA5LCAweDcwLCAweDBELCAweEMwLCAweDM0LCAweDQwLCAweEQzLCAweDg0LCAweDdDLCAweDgxLCAweDMwLAorMHg4RCwgMHhDMCwgMHgzNSwgMHgwMCwgMHhEMywgMHgwMCwgMHg3QywgMHgwMywgMHg3MCwgMHgwOSwgMHhDMCwgMHgzNCwgMHgwMCwKKzB4REIsIDB4MDAsIDB4N0MsIDB4MDgsIDB4RjAsIDB4MDksIDB4QzAsIDB4MkIsIDB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDEzLCAweEEwLCAweEY4LCAweDAyLCAweDUxLCAweDIwLCAweDQ0LCAweDAyLCAweEQwLCAweDA5LCAweDQ1LAorMHgzRiwgMHgwMCwgMHhERCwgMHgwMSwgMHg3QywgMHg4MywgMHgxMCwgMHgzRCwgMHg0MCwgMHgxNCwgMHgwOCwgMHhDMCwgMHgyMCwKKzB4NzQsIDB4MDMsIDB4MTIsIDB4QkYsIDB4NDAsIDB4RkMsIDB4MDIsIDB4RjEsIDB4MDAsIDB4NzQsIDB4ODMsIDB4MTAsIDB4MUYsCisweDQwLCAweDM0LCAweDAwLCAweEQxLCAweDAwLCAweEY0LCAweDAzLCAweDEwLCAweDA5LCAweDQwLCAweDM0LCAweDgwLCAweEQxLAorMHgwMCwgMHg3NCwgMHgwMiwgMHhEMCwgMHgwOSwgMHg0MCwgMHg0RiwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDMsIDB4MjAsIDB4MzAsIDB4MDAsIDB4ODEsIDB4MTIsIDB4MDQsIDB4NEMsIDB4RDksIDB4MzgsIDB4NDAsIDB4MzMsCisweDAwLCAweENELCAweDA5LCAweDU0LCAweDAzLCAweDEwLCAweDJELCAweDQwLCAweDIwLCAweDA4LCAweEMxLCAweDAwLCAweDM0LAorMHgwNywgMHgxMSwgMHhBQywgMHg0OCwgMHhCMSwgMHgwMCwgMHhDMSwgMHgwMSwgMHgzNCwgMHg4MiwgMHgxMCwgMHgxQywgMHg0MSwKKzB4MzYsIDB4MDAsIDB4QzksIDB4MjAsIDB4NzQsIDB4MDMsIDB4NTAsIDB4MDgsIDB4NDAsIDB4MzAsIDB4MDAsIDB4QzEsIDB4MDAsCisweDc0LCAweDAwLCAweEQwLCAweDAxLCAweDYwLCAweDBGLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwNCwgMHgwMCwgMHg3MCwgMHgwMCwgMHhBMSwgMHg4OSwgMHg4NCwgMHgwNywgMHhEOCwgMHgxRSwgMHg0MCwgMHg3QiwgMHgwMiwKKzB4RkQsIDB4MDksIDB4QjQsIDB4MDcsIDB4MTIsIDB4MUUsIDB4NDAsIDB4NjgsIDB4MDAsIDB4RTEsIDB4ODEsIDB4QjQsIDB4MDcsCisweDEwLCAweDFFLCAweDQwLCAweDc5LCAweDA1LCAweEUxLCAweDExLCAweEI0LCAweDI3LCAweDEwLCAweDFDLCAweDQwLCAweEZBLAorMHgwMCwgMHhFOSwgMHg4MSwgMHhCNCwgMHgwNywgMHgxMCwgMHgxQSwgMHg0MCwgMHg3OCwgMHgwMCwgMHhFOCwgMHgwQiwgMHhCNCwKKzB4ODQsIDB4RDAsIDB4MUEsIDB4NDAsIDB4M0YsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsCisweDE4LCAweDMwLCAweDAwLCAweDgzLCAweDIwLCAweDBDLCAweDQxLCAweEYwLCAweDhDLCAweEM0LCAweDMzLCAweDIwLCAweDRGLAorMHgwMCwgMHgxRCwgMHgyMywgMHg3MCwgMHg4QywgMHhDMCwgMHg4NCwgMHg0MCwgMHhDMywgMHgwMCwgMHgzQywgMHg0MywgMHg3NCwKKzB4MEQsIDB4QzAsIDB4MzEsIDB4MDAsIDB4QzMsIDB4MDAsIDB4M0MsIDB4MDAsIDB4MzAsIDB4MEMsIDB4RDAsIDB4MzMsIDB4MDAsCisweENBLCAweDA4LCAweDNDLCAweDAzLCAweDc0LCAweDBDLCAweEQwLCAweDM0LCAweDAwLCAweEMzLCAweDFELCAweDNDLCAweDA4LAorMHhGMCwgMHg3MCwgMHhDOCwgMHg0QiwgMHg2MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHgzOCwKKzB4M0QsIDB4MDAsIDB4RkYsIDB4MDAsIDB4RkMsIDB4MDMsIDB4RjAsIDB4MEYsIDB4QzAsIDB4M0YsIDB4MDQsIDB4NkYsIDB4MDAsCisweEZDLCAweEEzLCAweDcwLCAweDBGLCAweEUwLCAweDJGLCAweDAwLCAweEZGLCAweDAwLCAweEZDLCAweDAzLCAweEYwLCAweDJGLAorMHhDMSwgMHgzRSwgMHgwRCwgMHhGRiwgMHgwMCwgMHhGRSwgMHgwMywgMHhGMiwgMHgwRiwgMHhDMCwgMHgzRCwgMHgwMCwgMHhGNywKKzB4MDAsIDB4RkMsIDB4MDMsIDB4RjAsIDB4MEYsIDB4QzAsIDB4M0YsIDB4MDAsIDB4RjUsIDB4MjgsIDB4RkMsIDB4MDAsIDB4RjAsCisweDgzLCAweEMwLCAweDBCLCAweDYwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweEEwLCAweDM3LAorMHgwMSwgMHhCMywgMHgwMiwgMHg0RCwgMHgwMSwgMHhGMCwgMHgwNSwgMHhDMCwgMHhCNywgMHgwMCwgMHhEMywgMHg4MCwgMHg2QywKKzB4MDMsIDB4RjIsIDB4MEQsIDB4QzIsIDB4MTcsIDB4MDAsIDB4REYsIDB4MDAsIDB4N0MsIDB4MDAsIDB4MzAsIDB4MkQsIDB4QzAsCisweEI0LCAweDA0LCAweEQzLCAweDA0LCAweDdDLCAweDg2LCAweDMwLCAweDZELCAweEMwLCAweDc3LCAweDAwLCAweEQzLCAweDQwLAorMHg3QywgMHg1MywgMHhCMCwgMHgwOSwgMHhDMCwgMHgzNywgMHgwMCwgMHhERiwgMHgwMSwgMHg0NCwgMHg4MiwgMHhGMCwgMHgxMSwKKzB4QzAsIDB4NDAsIDB4MDAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4ODAsIDB4M0QsIDB4MDUsCisweEUxLCAweDEwLCAweDg0LCAweDAxLCAweEQwLCAweDA2LCAweDQwLCAweDNGLCAweDA0LCAweEU1LCAweDAwLCAweDg0LCAweDAzLAorMHhEMCwgMHgwRSwgMHg0MCwgMHgzQiwgMHgyMCwgMHhFRCwgMHhBMCwgMHg5QywgMHgwMiwgMHgxMCwgMHg0RiwgMHg0MiwgMHgzQywKKzB4MjEsIDB4RTEsIDB4MEEsIDB4OUMsIDB4MDMsIDB4MTgsIDB4OEUsIDB4NDAsIDB4M0IsIDB4MDAsIDB4RTEsIDB4MDAsIDB4QjQsCisweDBCLCAweDEwLCAweDBBLCAweDQ4LCAweDNCLCAweDAwLCAweEZELCAweDAwLCAweDg0LCAweDAyLCAweEQwLCAweDBBLCAweDQwLAorMHg0QywgMHgwMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHg3OSwgMHg0MiwgMHg4MSwKKzB4MDEsIDB4ODQsIDB4MDcsIDB4NTAsIDB4MUUsIDB4NDAsIDB4N0IsIDB4MDAsIDB4NDksIDB4MDEsIDB4QTQsIDB4NDcsIDB4NTAsCisweDFFLCAweDQwLCAweDVCLCAweDAwLCAweEVELCAweDAxLCAweDE0LCAweDA1LCAweDE0LCAweDFFLCAweDUwLCAweDdBLCAweDQwLAorMHhFMSwgMHgyMSwgMHgzNCwgMHgwNCwgMHhEMCwgMHg5RSwgMHg2MCwgMHg3QiwgMHg0MCwgMHhFMSwgMHgwMSwgMHgzNCwgMHgxNywKKzB4OTAsIDB4MUEsIDB4NDAsIDB4N0IsIDB4MDAsIDB4RUQsIDB4MDEsIDB4ODQsIDB4MDQsIDB4RDAsIDB4MTAsIDB4NDAsIDB4MDIsCisweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE2LCAweDI4LCAweDMzLCAweDAwLCAweDQxLCAweDBBLAorMHgwNCwgMHhDMywgMHhDMSwgMHhCQywgMHg0NCwgMHgzMywgMHgwMCwgMHg1RCwgMHgwMSwgMHgwNCwgMHgwNSwgMHhEMCwgMHgwOCwKKzB4NDAsIDB4NzMsIDB4MEEsIDB4OEQsIDB4MjAsIDB4MTQsIDB4MEYsIDB4MTAsIDB4MEMsIDB4NDAsIDB4MzIsIDB4ODAsIDB4QzEsCisweDAwLCAweDE0LCAweDAzLCAweEQwLCAweDBDLCAweDQwLCAweDIzLCAweDAwLCAweDgxLCAweDQwLCAweDM0LCAweDAzLCAweDEyLAorMHg4OSwgMHg0MiwgMHgzMywgMHgwMCwgMHhDRCwgMHgwMCwgMHgwNCwgMHg4MywgMHhEOCwgMHgxQywgMHg0MCwgMHg1QSwgMHgyMCwKKzB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTcsIDB4QTAsIDB4MTUsIDB4MDAsIDB4NzMsIDB4MDMsIDB4Q0MsCisweDBELCAweEUwLCAweDA3LCAweEMwLCAweDE3LCAweDAwLCAweDdCLCAweDAwLCAweEVDLCAweDA1LCAweEYwLCAweDE1LCAweEMyLAorMHgxRiwgMHgwMCwgMHg1RiwgMHgwNSwgMHhEQywgMHg2MSwgMHgzMCwgMHgwNSwgMHhDMCwgMHgxNiwgMHg2MCwgMHg1MywgMHg4MCwKKzB4RjQsIDB4MDEsIDB4RjEsIDB4MDUsIDB4QzAsIDB4MTcsIDB4MDAsIDB4NTMsIDB4MDAsIDB4N0MsIDB4MDEsIDB4QjAsIDB4MDUsCisweEMwLCAweDE3LCAweDEwLCAweDVGLCAweDAwLCAweENDLCAweDM5LCAweEYwLCAweDM3LCAweEMwLCAweDVFLCAweDAwLCAweDA0LAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHgwOCwgMHg4MSwgMHgwMCwgMHgwRiwgMHgwNCwgMHg3QywgMHgyOCwKKzB4RjEsIDB4MDEsIDB4QzMsIDB4MDcsIDB4MTAsIDB4MTcsIDB4MDgsIDB4N0MsIDB4MDQsIDB4RjAsIDB4QTEsIDB4QzAsIDB4MDcsCisweDAxLCAweDFGLCAweDAwLCAweDFDLCAweDAwLCAweEYwLCAweDIwLCAweEMwLCAweDA1LCAweDAwLCAweDFGLCAweDAwLCAweDVDLAorMHg4MCwgMHgzNCwgMHgyMSwgMHhDMCwgMHgwNywgMHgwMiwgMHgxRiwgMHgwMCwgMHgzQywgMHg4MCwgMHhGMCwgMHgwMSwgMHhDMCwKKzB4MDcsIDB4ODAsIDB4MUUsIDB4MDIsIDB4N0MsIDB4MDAsIDB4RjAsIDB4ODEsIDB4QzEsIDB4NDksIDB4MjAsIDB4MDQsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDY1LCAweDAwLCAweDkzLCAweDA4LCAweDZDLCAweDA2LCAweEYwLAorMHg4OSwgMHhDMCwgMHg2MywgMHgwMCwgMHg5MywgMHgwMiwgMHg0QywgMHgwMiwgMHgzMSwgMHgwOSwgMHhEMCwgMHgyNCwgMHgwMCwKKzB4OUIsIDB4MDAsIDB4N0MsIDB4MDIsIDB4MzQsIDB4MDksIDB4RDAsIDB4NjQsIDB4QzAsIDB4OTMsIDB4MDgsIDB4N0MsIDB4MDIsCisweEYwLCAweDA5LCAweEMwLCAweDI3LCAweDAwLCAweDlGLCAweDAwLCAweDdDLCAweDAyLCAweDcwLCAweDA5LCAweEMwLCAweDI0LAorMHgwMCwgMHg5NywgMHgwMCwgMHg3QywgMHgwMiwgMHhGMCwgMHgwOSwgMHhDMCwgMHg0MywgMHgyMCwgMHgwNCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MjAsIDB4NjQsIDB4NDAsIDB4OTEsIDB4MDAsIDB4NDQsIDB4NkUsIDB4RDIsIDB4MjksCisweDQwLCAweDI3LCAweDAyLCAweDkxLCAweDAzLCAweDA0LCAweDAyLCAweDEwLCAweDM5LCAweDQxLCAweDI0LCAweDA4LCAweDkxLAorMHgyMCwgMHg3QywgMHgyNiwgMHgxMSwgMHgyOSwgMHg0MCwgMHgyNCwgMHgwMiwgMHg5MSwgMHgwMiwgMHg3NCwgMHgwMiwgMHhEMCwKKzB4NzksIDB4NDAsIDB4MjcsIDB4MDAsIDB4OUQsIDB4MDAsIDB4N0MsIDB4MDIsIDB4QjAsIDB4MDksIDB4NDAsIDB4MjQsIDB4MDAsCisweDlELCAweDA0LCAweDc0LCAweDAyLCAweEQwLCAweDA5LCAweDQyLCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgxOCwgMHhBMCwgMHgyNCwgMHgwMiwgMHg5MSwgMHgwMCwgMHg2NCwgMHgwMiwgMHhEMCwgMHgyOSwgMHg0MCwKKzB4MjcsIDB4MDAsIDB4OTEsIDB4MTAsIDB4NDQsIDB4MDIsIDB4MTAsIDB4ODgsIDB4NDgsIDB4MjAsIDB4MDAsIDB4OTksIDB4MDQsCisweDc0LCAweDAyLCAweDEwLCAweDA5LCAweDQwLCAweDIwLCAweDAwLCAweDkxLCAweDEwLCAweDc0LCAweDAyLCAweDUwLCAweDQ5LAorMHg0MCwgMHg2NywgMHgwMCwgMHg5RCwgMHgwMCwgMHg3NCwgMHgwMiwgMHg1MCwgMHgwOSwgMHg0MCwgMHg2NCwgMHgwMCwgMHg5NSwKKzB4MDEsIDB4NzQsIDB4MDIsIDB4RDAsIDB4MDksIDB4NDAsIDB4NjMsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDEwLCAweDIwLCAweDIwLCAweDQxLCAweDgxLCAweDA0LCAweDA0LCAweDFBLCAweDkwLCAweDA4LCAweDQwLCAweDIzLAorMHhDMSwgMHg4MSwgMHgwNCwgMHg0NSwgMHgwMiwgMHgxOCwgMHgwOCwgMHg0MCwgMHgyMCwgMHgwMSwgMHg4OSwgMHgwMCwgMHgzNCwKKzB4MTIsIDB4MTAsIDB4NEMsIDB4NDAsIDB4MjAsIDB4MDEsIDB4ODEsIDB4MDQsIDB4MzQsIDB4MTIsIDB4RDAsIDB4NDgsIDB4NDAsCisweDIzLCAweDAwLCAweDhELCAweDAwLCAweDM0LCAweDIyLCAweDkwLCAweDA4LCAweDU0LCAweDIwLCAweDAwLCAweDhELCAweDAwLAorMHgzNCwgMHgxMiwgMHhEMCwgMHg0OCwgMHg2MCwgMHg0MywgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MUQsIDB4QjgsIDB4OTYsIDB4MDIsIDB4MTMsIDB4MDAsIDB4NkMsIDB4MDgsIDB4RjAsIDB4ODEsIDB4NDQsIDB4ODcsIDB4MDIsCisweDEzLCAweDBBLCAweDRDLCAweDI4LCAweDMwLCAweEExLCAweEMwLCAweDg0LCAweDAyLCAweDFCLCAweDAwLCAweDdDLCAweDAwLAorMHgzMCwgMHhBMSwgMHg0MiwgMHg4NCwgMHgwMiwgMHgxMSwgMHgwMCwgMHg3QywgMHhBOCwgMHhGMCwgMHgwMSwgMHhDMCwgMHg4MywKKzB4MTIsIDB4MUYsIDB4MEEsIDB4N0MsIDB4NTgsIDB4NzAsIDB4QTEsIDB4QzAsIDB4ODQsIDB4MDIsIDB4MTcsIDB4MEEsIDB4N0MsCisweDI4LCAweEYwLCAweDAxLCAweEMwLCAweDc3LCAweEUwLCAweDBBLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFELAorMHhCMCwgMHgyNywgMHgwMiwgMHhCRiwgMHgwOCwgMHhGNCwgMHgwQSwgMHhGMCwgMHg4QiwgMHhDMCwgMHgyNywgMHgwMiwgMHhGRiwKKzB4MDgsIDB4RkMsIDB4MDIsIDB4RjQsIDB4MEIsIDB4QzIsIDB4MkYsIDB4MDIsIDB4QjcsIDB4MDAsIDB4REMsIDB4MjIsIDB4RjAsCisweDg5LCAweEM4LCAweDI3LCAweDAyLCAweDlGLCAweDA4LCAweEZDLCAweDIyLCAweEYwLCAweDg5LCAweEMwLCAweDJGLCAweDA4LAorMHhCRiwgMHgwMCwgMHg1QywgMHg5MiwgMHg3MCwgMHgwQiwgMHhDMiwgMHgyNywgMHgwMCwgMHg5RiwgMHgwMCwgMHhGQywgMHgyMiwKKzB4RjAsIDB4OEIsIDB4QzAsIDB4NzcsIDB4NjAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MUMsIDB4QTAsCisweDJGLCAweDA1LCAweEIzLCAweDg0LCAweEZDLCAweDAyLCAweEYwLCAweDBCLCAweEMwLCAweDJGLCAweDAyLCAweEIzLCAweDA0LAorMHg1QywgMHgwMiwgMHgzMCwgMHg4QiwgMHhFMCwgMHgyNSwgMHgwMCwgMHhCNywgMHgwMCwgMHhEQywgMHgwMiwgMHhGMCwgMHg0QiwKKzB4QzAsIDB4MkYsIDB4MDUsIDB4QkYsIDB4MDQsIDB4NEMsIDB4MDMsIDB4RjQsIDB4MEIsIDB4QzAsIDB4MkYsIDB4MDIsIDB4REYsCisweDAwLCAweDRDLCAweDUyLCAweEIwLCAweDg5LCAweEMwLCAweDJGLCAweDAwLCAweEJGLCAweDAwLCAweDdDLCAweDAyLCAweEUyLAorMHgwOSwgMHgwMCwgMHg3NywgMHgwMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMCwgMHgwNywKKzB4MDEsIDB4MTEsIDB4ODgsIDB4NzQsIDB4NDksIDB4RDAsIDB4MDUsIDB4NDEsIDB4MDcsIDB4MDIsIDB4MTUsIDB4MTQsIDB4NDQsCisweDkwLCAweDExLCAweDQxLCAweDQyLCAweDg3LCAweDQ0LCAweDExLCAweDAwLCAweDc0LCAweDIwLCAweDcyLCAweDQxLCAweEMxLAorMHgwNSwgMHgwMSwgMHgxQywgMHgwOCwgMHg1NCwgMHg0OSwgMHgxMCwgMHgwMSwgMHg0NCwgMHgwNywgMHgwMCwgMHgxRCwgMHgxNCwKKzB4NTQsIDB4MTAsIDB4NzAsIDB4NDEsIDB4NDAsIDB4MDcsIDB4MjQsIDB4MUQsIDB4MDAsIDB4NzQsIDB4MDAsIDB4RDAsIDB4MDEsCisweDQyLCAweDYzLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDAwLCAweDIwLCAweDA1LAorMHg4MSwgMHgwMCwgMHgzNCwgMHgzMiwgMHhEMCwgMHg4OCwgMHg0MCwgMHgyMywgMHgyMCwgMHg4MSwgMHgyQywgMHg0NCwgMHg1NiwKKzB4MDQsIDB4NDgsIDB4NDAsIDB4MjUsIDB4NDMsIDB4ODUsIDB4NDAsIDB4MTQsIDB4MDIsIDB4RDAsIDB4QzgsIDB4NDAsIDB4MjMsCisweDI1LCAweENELCAweDAwLCAweDI0LCAweDMyLCAweDEwLCAweDg4LCAweDQwLCAweDMzLCAweDAwLCAweDlELCAweDA0LCAweDA0LAorMHg1MiwgMHg5MCwgMHg0OCwgMHg0NCwgMHgyMywgMHgwMSwgMHg4RCwgMHgwMCwgMHgzNCwgMHgwMiwgMHhEMCwgMHgwOCwgMHg0MCwKKzB4NEIsIDB4ODAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MjgsIDB4MjUsIDB4MDAsIDB4OTEsCisweDAxLCAweDc0LCAweDgzLCAweEQwLCAweDg5LCAweDQwLCAweDIzLCAweDAwLCAweDk1LCAweDAwLCAweDQ0LCAweDAyLCAweDEwLAorMHgxOSwgMHg0MCwgMHhBNywgMHhDMCwgMHg5MSwgMHgwMSwgMHg3NCwgMHgwNiwgMHg1MCwgMHgwOSwgMHgwMCwgMHgyNywgMHgwOCwKKzB4OTksIDB4MDAsIDB4NzQsIDB4MDIsIDB4MTAsIDB4MDksIDB4NDAsIDB4MjcsIDB4MDAsIDB4OUQsIDB4MDAsIDB4NTAsIDB4MDIsCisweDU4LCAweDA5LCAweDQwLCAweDI3LCAweDA4LCAweDlELCAweDAwLCAweDc0LCAweDEyLCAweEQwLCAweDA5LCAweDQzLCAweDYzLAorMHgyOCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHgyMCwgMHgyNCwgMHg0MCwgMHg5MywgMHgwNSwKKzB4N0MsIDB4MEUsIDB4RjAsIDB4MzksIDB4QzAsIDB4MjcsIDB4MDAsIDB4OTMsIDB4MDMsIDB4MUQsIDB4MDIsIDB4MTAsIDB4MDksCisweEM4LCAweDI1LCAweDQwLCAweDk3LCAweDIwLCAweDVDLCAweDAyLCAweEYzLCAweDA5LCAweEMwLCAweDI3LCAweDEwLCAweDlGLAorMHgwMCwgMHg2QywgMHgwMiwgMHg3MCwgMHgwOSwgMHhDMCwgMHg2NywgMHgyMCwgMHg4RiwgMHgwMSwgMHg0OSwgMHgwMiwgMHhCMCwKKzB4MTksIDB4QzgsIDB4MjcsIDB4MTAsIDB4OUYsIDB4MDAsIDB4N0MsIDB4MTYsIDB4RjAsIDB4MjksIDB4QzAsIDB4MTcsIDB4MDgsCisweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE2LCAweDA4LCAweDIxLCAweDEwLCAweDlGLCAweDIwLCAweDdDLAorMHgxMiwgMHhGMCwgMHgwOSwgMHhDMSwgMHgyNywgMHgwMCwgMHg5RiwgMHgwMiwgMHg3QywgMHgyNiwgMHhGMCwgMHgwOSwgMHhDMCwKKzB4MjcsIDB4MDAsIDB4OUYsIDB4MDAsIDB4N0MsIDB4MDIsIDB4RjAsIDB4MDksIDB4RTAsIDB4MjUsIDB4MDQsIDB4OUYsIDB4MDAsCisweDVDLCAweDAyLCAweDcwLCAweDA5LCAweEMxLCAweDI3LCAweDAxLCAweDlGLCAweDg0LCAweDZDLCAweDAyLCAweEIwLCAweDU5LAorMHhDMCwgMHgyNywgMHgwMCwgMHg5RiwgMHgwMCwgMHg3QywgMHgwNiwgMHhGMCwgMHg1OSwgMHhDMCwgMHg1QiwgMHgyMCwgMHgwNCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDgsIDB4MDUsIDB4MDAsIDB4MTMsIDB4MDQsIDB4N0UsIDB4NjgsCisweEI0LCAweDIxLCAweEQwLCAweDA0LCAweDA4LCAweDFELCAweDAyLCAweDZDLCAweDAwLCAweEYwLCAweDAxLCAweEM4LCAweDA3LAorMHgwMCwgMHgxRiwgMHgwOCwgMHg3QywgMHgwMCwgMHhGMCwgMHg4MSwgMHhDMCwgMHgwNywgMHg0MCwgMHgxMywgMHgwMCwgMHg1QywKKzB4MDgsIDB4RjAsIDB4MDEsIDB4QzAsIDB4MDQsIDB4MDAsIDB4MUYsIDB4MDAsIDB4N0MsIDB4MDAsIDB4MzAsIDB4MDEsIDB4QzAsCisweDA3LCAweDAwLCAweDFGLCAweDBDLCAweDdDLCAweDA4LCAweDMwLCAweDIxLCAweEMyLCAweDUzLCAweDIwLCAweDA0LCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHgxQywgMHg0MCwgMHg3MSwgMHgwMSwgMHhFNCwgMHgwRCwgMHgzMCwKKzB4MDcsIDB4NDEsIDB4MTQsIDB4MDAsIDB4N0QsIDB4MEQsIDB4NDQsIDB4MDEsIDB4NzAsIDB4MDcsIDB4QzAsIDB4MTEsIDB4MDAsCisweDVELCAweDAwLCAweDc2LCAweDA1LCAweDkwLCAweDA3LCAweDQwLCAweDlGLCAweDA4LCAweDYxLCAweDAyLCAweDQ0LCAweDAxLAorMHg3MCwgMHgxNywgMHhDOCwgMHg5RSwgMHgwMiwgMHg1RCwgMHgwMCwgMHg3NCwgMHgwMSwgMHg1MiwgMHgwNSwgMHg0MCwgMHgxNywKKzB4MDEsIDB4N0QsIDB4MDMsIDB4NzQsIDB4MDEsIDB4MTAsIDB4MDUsIDB4NDQsIDB4NDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDEwLCAweEEwLCAweDcyLCAweDAwLCAweDgxLCAweDA5LCAweDI0LCAweDBCLCAweDUwLCAweDJDLAorMHg0MiwgMHgzMCwgMHgwMCwgMHhERCwgMHgwMywgMHgyNCwgMHgwMywgMHhEMCwgMHg5QywgMHg0MCwgMHgzMywgMHgwMCwgMHg4RCwKKzB4MDEsIDB4MzQsIDB4MjIsIDB4RDAsIDB4MUMsIDB4NDAsIDB4MzMsIDB4MDAsIDB4QzEsIDB4MTAsIDB4NTQsIDB4ODMsIDB4NTAsCisweEI0LCAweDQwLCAweDMwLCAweDAwLCAweENELCAweDQwLCAweDc0LCAweDAzLCAweDEwLCAweDBDLCAweDQwLCAweDcyLCAweDAwLAorMHhDRCwgMHg4MSwgMHgzNiwgMHg4MywgMHgxMCwgMHgwQywgMHg0MCwgMHg0MywgMHgwMCwgMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDQsIDB4ODAsIDB4MjAsIDB4MDUsIDB4QTEsIDB4MDAsIDB4QTQsIDB4MDcsIDB4NTAsIDB4MUUsIDB4NjAsCisweDM4LCAweDAwLCAweEFELCAweDA0LCAweDg0LCAweDEzLCAweEQwLCAweDBFLCAweDQ4LCAweDNCLCAweDAwLCAweEVELCAweDgwLAorMHhCNCwgMHgwMywgMHg5MCwgMHgwRSwgMHg0NCwgMHg2QiwgMHgxMCwgMHgyMSwgMHg0MCwgMHg4NCwgMHgyMywgMHg0MCwgMHgxRSwKKzB4NDAsIDB4M0EsIDB4MDAsIDB4RUQsIDB4MDgsIDB4QjQsIDB4MTMsIDB4NTAsIDB4NEUsIDB4NDAsIDB4M0IsIDB4MTAsIDB4QUMsCisweDAwLCAweDM0LCAweDI3LCAweDEwLCAweDBFLCAweDQwLCAweDEzLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgxNCwgMHgxOCwgMHhFOCwgMHgwMCwgMHhBMSwgMHgwMSwgMHhGNCwgMHgwNywgMHg3MCwgMHgxNywgMHhDMCwgMHg3OCwKKzB4MDAsIDB4RUYsIDB4MDMsIDB4QUMsIDB4MjcsIDB4RjAsIDB4MUUsIDB4QzAsIDB4N0IsIDB4MjIsIDB4RUQsIDB4MDEsIDB4QjYsCisweDA3LCAweEYwLCAweDE2LCAweDgyLCAweDczLCAweDAwLCAweDAzLCAweDAxLCAweDlDLCAweDE3LCAweDYwLCAweDFFLCAweEMwLAorMHg3OCwgMHgwOCwgMHhFRiwgMHg4OSwgMHgzQywgMHgxNywgMHgzOCwgMHhERSwgMHhDOCwgMHg3QiwgMHgwMCwgMHhBRiwgMHgwMSwKKzB4QkMsIDB4MjcsIDB4MzAsIDB4MUUsIDB4QzAsIDB4NTMsIDB4NjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDEwLCAweEI4LCAweDA1LCAweDAwLCAweDlGLCAweDAwLCAweDc0LCAweDAzLCAweDMwLCAweDA1LCAweEMwLCAweDM3LCAweDA4LAorMHg4RiwgMHgwMCwgMHg3QywgMHgwMywgMHg3MCwgMHgwMSwgMHhDMCwgMHgzNSwgMHgwMywgMHhERiwgMHgwMCwgMHg3QywgMHg4MywKKzB4QjEsIDB4MEQsIDB4QzAsIDB4MjcsIDB4MDAsIDB4MUYsIDB4MDAsIDB4N0MsIDB4OUIsIDB4NTEsIDB4MEMsIDB4QzAsIDB4MzcsCisweDAwLCAweERGLCAweDAyLCAweDdDLCAweDRCLCAweDcwLCAweDhELCAweEMwLCAweDM3LCAweDAwLCAweDlGLCAweDAwLCAweDdDLAorMHgwMywgMHhGMiwgMHgwRCwgMHhDMCwgMHg0MywgMHg2MCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNiwKKzB4MjAsIDB4NkQsIDB4MDAsIDB4RjMsIDB4MDEsIDB4Q0MsIDB4MTEsIDB4QjAsIDB4MUYsIDB4QzAsIDB4RkYsIDB4MDAsIDB4RkYsCisweDAxLCAweENDLCAweDQ3LCAweEYwLCAweDFCLCAweEMwLCAweDdGLCAweDAwLCAweEZGLCAweDAxLCAweEJDLCAweDA3LCAweDMwLAorMHg5RiwgMHhFMCwgMHg1QywgMHgwMCwgMHgzRiwgMHgwMSwgMHhGOCwgMHgyRiwgMHgzOCwgMHgxRiwgMHhDOCwgMHg2RSwgMHgyOCwKKzB4RjMsIDB4ODEsIDB4RkMsIDB4NDcsIDB4RkEsIDB4OUYsIDB4QzgsIDB4NkYsIDB4MDAsIDB4MzMsIDB4MjEsIDB4N0MsIDB4MjcsCisweDMwLCAweDlGLCAweEM0LCAweDFCLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE1LCAweDAwLAorMHgyOSwgMHgyMCwgMHhFMSwgMHgwOCwgMHg4NCwgMHgyMSwgMHgzMSwgMHgwRSwgMHg0MCwgMHgzQiwgMHgwMCwgMHhFRCwgMHgwMCwKKzB4ODQsIDB4MDMsIDB4RDAsIDB4MEEsIDB4NDAsIDB4M0IsIDB4MTQsIDB4RUQsIDB4ODAsIDB4OUMsIDB4MjMsIDB4NzAsIDB4OEEsCisweEMwLCAweDI4LCAweDAxLCAweDJELCAweDIwLCAweDlDLCAweDAzLCAweDMwLCAweDRFLCAweDQwLCAweDBDLCAweDEyLCAweEUxLAorMHgxOCwgMHhCNCwgMHgwMywgMHg3MCwgMHgwRSwgMHg0MCwgMHgyRiwgMHgzMCwgMHgwMSwgMHgwMCwgMHhCNCwgMHgwNywgMHhCMCwKKzB4MEMsIDB4NDAsIDB4NTcsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjgsCisweDAwLCAweEExLCAweDAwLCAweDg0LCAweDAxLCAweDEwLCAweDBFLCAweDQxLCAweDNCLCAweDAwLCAweDZELCAweDAwLCAweDg0LAorMHgwQiwgMHg1MCwgMHgwRSwgMHg0MCwgMHgzQiwgMHgwMCwgMHhFRCwgMHgwMCwgMHhCNCwgMHgwMywgMHgxMCwgMHgwNiwgMHg3MCwKKzB4MTgsIDB4MTAsIDB4MkQsIDB4MDAsIDB4MTQsIDB4NDMsIDB4MUQsIDB4MEUsIDB4NDAsIDB4MjgsIDB4NDQsIDB4RTUsIDB4MDAsCisweEI0LCAweDAzLCAweEQwLCAweDBFLCAweDQ0LCAweDJCLCAweDAyLCAweEE5LCAweDAwLCAweEI0LCAweDAzLCAweDEwLCAweDBFLAorMHg0MCwgMHgyMywgMHgwMiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHgyOCwgMHgwMSwgMHgwMCwKKzB4ODEsIDB4MDYsIDB4MDUsIDB4ODAsIDB4MTAsIDB4MDgsIDB4NDAsIDB4MzcsIDB4MDAsIDB4NEQsIDB4MDAsIDB4MDQsIDB4ODcsCisweEQwLCAweDAwLCAweDQ2LCAweDczLCAweDA4LCAweENELCAweDAwLCAweDE0LCAweDkzLCAweDUxLCAweDA4LCAweDQwLCAweDIwLAorMHgwOCwgMHgwRCwgMHgwMCwgMHgxNCwgMHgwMywgMHgxMCwgMHgwQywgMHg0MCwgMHg0MCwgMHgxMCwgMHhENSwgMHg4MCwgMHgzNCwKKzB4MDMsIDB4NTAsIDB4MEMsIDB4NjAsIDB4MjMsIDB4MDAsIDB4ODksIDB4MjAsIDB4NzYsIDB4MTMsIDB4MUMsIDB4RUQsIDB4NDgsCisweDRCLCAweDIwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE1LCAweEEwLCAweDJELCAweDQwLCAweDkzLAorMHgwMCwgMHg0NCwgMHgwNiwgMHgzMCwgMHgwOSwgMHhDMCwgMHgyNywgMHgwMCwgMHhCRiwgMHgwMCwgMHhDRCwgMHgwNywgMHhGMCwKKzB4MDUsIDB4QzAsIDB4RkYsIDB4MDIsIDB4REYsIDB4MDAsIDB4N0MsIDB4MEIsIDB4MzAsIDB4MDksIDB4QzQsIDB4MzQsIDB4MDAsCisweDFGLCAweDAwLCAweERDLCAweDA3LCAweDMwLCAweDBELCAweEQwLCAweDU0LCAweDAwLCAweEY3LCAweDAxLCAweEZDLCAweDAzLAorMHhGMCwgMHgwRiwgMHhDMCwgMHgzNywgMHg0MCwgMHgxQiwgMHgwMCwgMHhGQywgMHgwMywgMHgxMCwgMHgzRCwgMHhDNCwgMHg3NywKKzB4MDAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4MDgsIDB4MjcsIDB4MDAsIDB4MEYsIDB4MDEsCisweDdDLCAweDY4LCAweDcwLCAweDI5LCAweEMwLCAweDI3LCAweDEwLCAweDlGLCAweDAwLCAweDdDLCAweDIzLCAweEYwLCAweDFELAorMHhDOCwgMHgzNywgMHgwMCwgMHhERiwgMHgwMSwgMHgxQywgMHgwMywgMHg3MiwgMHgyNSwgMHhDMCwgMHg5NSwgMHgwMCwgMHgxRiwKKzB4ODIsIDB4MUMsIDB4MDMsIDB4NzAsIDB4MEQsIDB4QzAsIDB4MTcsIDB4MDAsIDB4REIsIDB4MDAsIDB4N0MsIDB4MDMsIDB4NzAsCisweDBELCAweEMwLCAweDM3LCAweDAwLCAweDk3LCAweDAwLCAweDdDLCAweDg3LCAweEYwLCAweDBELCAweEM0LCAweDE3LCAweDIwLAorMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwOCwgMHgyRiwgMHgwMCwgMHg5MywgMHgwMCwgMHg0QywKKzB4MDIsIDB4RjAsIDB4MDIsIDB4QzEsIDB4M0MsIDB4MDAsIDB4RjMsIDB4MDIsIDB4Q0MsIDB4MDMsIDB4RjAsIDB4MDcsIDB4QzAsCisweDNDLCAweDAwLCAweEZGLCAweDAzLCAweENDLCAweDAzLCAweDMwLCAweDgyLCAweEMwLCAweDZDLCAweDQwLCAweDMzLCAweDAwLAorMHhGQywgMHg0MywgMHgzMCwgMHgwRCwgMHhDMCwgMHg0RiwgMHgwMCwgMHhGMywgMHgwMCwgMHg4RCwgMHgwMywgMHgzMCwgMHgwRiwKKzB4QzAsIDB4NkYsIDB4MDAsIDB4M0YsIDB4MDAsIDB4RkMsIDB4MDMsIDB4MzAsIDB4MEYsIDB4RDAsIDB4MDQsIDB4MjAsIDB4MEMsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgxLCAweDIwLCAweDQ2LCAweDAyLCAweDExLCAweDAyLCAweDU0LCAweDA2LAorMHg5MCwgMHg3MSwgMHg0MCwgMHgzNCwgMHgwMCwgMHg5MSwgMHgwMCwgMHg0NCwgMHgwMywgMHhEMCwgMHgyMCwgMHg0MCwgMHgzNCwKKzB4MDAsIDB4Q0QsIDB4MDAsIDB4NkMsIDB4MDMsIDB4MTAsIDB4MjUsIDB4NDEsIDB4ODQsIDB4MDYsIDB4MTEsIDB4MDEsIDB4NzQsCisweDAzLCAweDEwLCAweDFELCAweEMwLCAweDQxLCAweDAwLCAweEQxLCAweDAwLCAweDQ0LCAweDAzLCAweDUwLCAweDBELCAweDQwLAorMHg2NywgMHgwMCwgMHg5RCwgMHgwNSwgMHg3NCwgMHgwMywgMHgxMCwgMHgwRCwgMHhDMiwgMHgwNiwgMHgwMCwgMHgwOCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4QTAsIDB4MjIsIDB4MDAsIDB4RDEsIDB4MDIsIDB4NDQsIDB4MDYsIDB4RDAsCisweDExLCAweDQwLCAweDY0LCAweDAwLCAweDgxLCAweDAwLCAweDQ0LCAweDAzLCAweEQ4LCAweDIxLCAweDQwLCAweDM0LCAweDAwLAorMHhERCwgMHgwMCwgMHg0NCwgMHgwNywgMHgxMCwgMHgwOSwgMHg0MCwgMHgxMCwgMHg4MCwgMHgxMSwgMHgwMywgMHg3NCwgMHgwMywKKzB4OTAsIDB4MUQsIDB4NDEsIDB4MzcsIDB4MDEsIDB4RDEsIDB4MDAsIDB4NDQsIDB4MDMsIDB4MTAsIDB4MEQsIDB4NDAsIDB4MzcsCisweDAxLCAweDFELCAweDAxLCAweDc0LCAweDAzLCAweDE0LCAweDBELCAweDQ0LCAweDA0LCAweDAwLCAweDBBLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgyMCwgMHgyMCwgMHgwMCwgMHhDMSwgMHgwMCwgMHgxNCwgMHgwMCwgMHg5OCwgMHgwOCwKKzB4NDAsIDB4MjAsIDB4MDAsIDB4ODEsIDB4ODAsIDB4MDUsIDB4MDMsIDB4RDAsIDB4MDksIDB4NDAsIDB4MzAsIDB4MDAsIDB4REQsCisweDAwLCAweDI0LCAweDAzLCAweDE0LCAweDAwLCAweDUwLCAweDEwLCAweDAwLCAweDAxLCAweDAwLCAweDM0LCAweDAzLCAweDkwLAorMHgwQywgMHg0MCwgMHg1NywgMHgwMCwgMHhDMSwgMHgwMCwgMHgwNCwgMHgwMywgMHg1MCwgMHgwQywgMHg0MCwgMHgzMywgMHg4MCwKKzB4MEQsIDB4MDIsIDB4NzQsIDB4MDMsIDB4MTAsIDB4MEQsIDB4NEMsIDB4NDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDk4LCAweDIyLCAweDQwLCAweDkzLCAweDAwLCAweDRDLCAweDAyLCAweEYxLCAweDAxLCAweDUwLAorMHgzQywgMHgwMCwgMHg0MywgMHgwMCwgMHhDQywgMHgwMywgMHhGMCwgMHgwNSwgMHhEMCwgMHgzQywgMHgwMCwgMHhERiwgMHgwMCwKKzB4NDQsIDB4MDMsIDB4MzAsIDB4MDAsIDB4QzAsIDB4MDQsIDB4MDAsIDB4MTMsIDB4MDAsIDB4RkMsIDB4MDMsIDB4QjAsIDB4MEQsCisweEMwLCAweDI3LCAweDQwLCAweEYzLCAweDAwLCAweEM0LCAweDAzLCAweDMwLCAweDBGLCAweEMwLCAweDI3LCAweDAwLCAweDFGLAorMHgwMiwgMHhCQywgMHgxMywgMHgzMCwgMHhBRCwgMHhDMiwgMHgwNCwgMHg2MCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDUsIDB4QjAsIDB4MEYsIDB4MDAsIDB4QkYsIDB4MDAsIDB4RkMsIDB4MDIsIDB4RjgsIDB4MEIsIDB4QzAsIDB4M0YsCisweDAwLCAweDdGLCAweDAwLCAweEZDLCAweDAzLCAweEYwLCAweDAzLCAweDQwLCAweDNGLCAweDAwLCAweEZGLCAweDAwLCAweEZDLAorMHgwMywgMHhGMCwgMHgwMywgMHhDMCwgMHgwRiwgMHgwMCwgMHgzRiwgMHgwMCwgMHhGQywgMHgwMywgMHg3NCwgMHgwQiwgMHhFMCwKKzB4MEQsIDB4MDAsIDB4RkYsIDB4MDAsIDB4RkMsIDB4MDMsIDB4RjAsIDB4MEYsIDB4QzgsIDB4MkYsIDB4MzAsIDB4QkYsIDB4MDQsCisweDdDLCAweDBCLCAweEYwLCAweDRGLCAweEMwLCAweDE3LCAweDYyLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMywgMHhBMCwgMHg3RiwgMHgwMCwgMHg3RSwgMHgwMSwgMHhGQywgMHgwNywgMHgzMCwgMHgxRiwgMHg0NCwgMHgzQywgMHgwNSwKKzB4RjcsIDB4MDAsIDB4RUMsIDB4MjMsIDB4QjAsIDB4NEYsIDB4QzAsIDB4NDksIDB4MDAsIDB4MzcsIDB4MDMsIDB4RkMsIDB4MDMsCisweDMyLCAweDJGLCAweDQwLCAweDNELCAweDAyLCAweDIzLCAweDAzLCAweERDLCAweDI0LCAweDc4LCAweDkzLCAweEMwLCAweDQ4LAorMHgwMCwgMHgyMywgMHgwMSwgMHhFNCwgMHgwMywgMHhCMCwgMHgxNywgMHhDMCwgMHg0QywgMHgwMCwgMHhGRiwgMHgyMSwgMHhDQywKKzB4MDYsIDB4RTAsIDB4MDMsIDB4QzAsIDB4MEUsIDB4MDAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsCisweDA4LCAweDdGLCAweDAwLCAweERELCAweDAxLCAweEY0LCAweDA3LCAweDEwLCAweDFGLCAweDQwLCAweEY0LCAweDAwLCAweEYxLAorMHgwMywgMHg4NCwgMHgzQiwgMHgxMCwgMHg5RCwgMHhDMCwgMHg2NCwgMHgwMCwgMHgxRCwgMHgwMCwgMHhGNCwgMHgyRiwgMHgxNCwKKzB4NkYsIDB4NDQsIDB4QkMsIDB4MDMsIDB4MTEsIDB4ODQsIDB4NEMsIDB4MDAsIDB4RDAsIDB4NDEsIDB4QzAsIDB4NTQsIDB4NDgsCisweDUxLCAweDAxLCAweDQ0LCAweDJGLCAweDEwLCAweDExLCAweDUwLCAweDQ0LCAweDAwLCAweEZELCAweEExLCAweDQ0LCAweDA0LAorMHhEMSwgMHgwOSwgMHg0MCwgMHgwQywgMHgyMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMywgMHhBMCwKKzB4MzMsIDB4MDAsIDB4MEQsIDB4NDAsIDB4MzQsIDB4MDMsIDB4OTEsIDB4MEMsIDB4NDAsIDB4MzAsIDB4MDAsIDB4QzUsIDB4MjIsCisweDI0LCAweDEzLCAweDkxLCAweDBDLCAweDQwLCAweDAxLCAweDA4LCAweDBELCAweDg0LCAweDM0LCAweDAzLCAweDkwLCAweDJDLAorMHg0MCwgMHgzMSwgMHgyMSwgMHgwMSwgMHhDMCwgMHgxNCwgMHgxNCwgMHg1MCwgMHgwMSwgMHg0MCwgMHgzMiwgMHgyMCwgMHg5MSwKKzB4MDAsIDB4MDQsIDB4MDMsIDB4OTAsIDB4MEQsIDB4NDAsIDB4MDIsIDB4MDAsIDB4Q0QsIDB4MDAsIDB4MDQsIDB4MDIsIDB4RDAsCisweDAxLCAweDQyLCAweDRELCAweDgwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweEE4LCAweDM1LAorMHgwMCwgMHhERCwgMHgwMCwgMHg3NCwgMHgwMywgMHg5MCwgMHgwRCwgMHg0MCwgMHgzNCwgMHgwMCwgMHhEMSwgMHg2MCwgMHg0NCwKKzB4MDMsIDB4MTAsIDB4MEQsIDB4NDAsIDB4NjQsIDB4MjQsIDB4MUQsIDB4MDEsIDB4NzQsIDB4MDMsIDB4OTIsIDB4MEQsIDB4NDAsCisweDMyLCAweDg4LCAweDAxLCAweDAxLCAweDU0LCAweDA0LCAweEMwLCAweDE5LCAweDUwLCAweDk0LCAweDAxLCAweDkwLCAweDA4LAorMHg0NCwgMHgwMywgMHhEMCwgMHgwOSwgMHg0MCwgMHg0NiwgMHgwNCwgMHhERCwgMHgwMCwgMHg0NCwgMHg0NiwgMHhEMSwgMHgzMSwKKzB4NDAsIDB4MEQsIDB4MjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4QTgsIDB4MzcsIDB4MDAsCisweDlGLCAweDA0LCAweDNDLCAweDAzLCAweDk0LCAweDBDLCAweEQwLCAweDM0LCAweDEwLCAweEQ3LCAweDAwLCAweDZDLCAweDAzLAorMHhCMCwgMHgwRCwgMHhDOCwgMHg0NSwgMHgxMCwgMHg5RiwgMHgwMywgMHg3QywgMHgwMywgMHhCMCwgMHgwRCwgMHhDMCwgMHgzNSwKKzB4MDAsIDB4MTMsIDB4MTEsIDB4NUMsIDB4MDQsIDB4NzEsIDB4MzAsIDB4QzAsIDB4MjYsIDB4MDAsIDB4MTMsIDB4ODMsIDB4NkMsCisweDAzLCAweEIwLCAweDQ4LCAweEMwLCAweEM2LCAweDAwLCAweENGLCAweDAwLCAweDRELCAweDBFLCAweEYwLCAweDMxLCAweEQwLAorMHgyMywgMHgwMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwRiwgMHg4MCwgMHgzRCwgMHgwMCwgMHhCRiwKKzB4MDAsIDB4RkMsIDB4MDMsIDB4NzAsIDB4MEYsIDB4QzAsIDB4M0IsIDB4MDAsIDB4RUQsIDB4NDAsIDB4RkMsIDB4ODMsIDB4RjAsCisweDBFLCAweEMwLCAweDBGLCAweDAwLCAweDNGLCAweDAwLCAweEZDLCAweDAzLCAweDcwLCAweDBFLCAweEM0LCAweDNELCAweDAwLAorMHhCRiwgMHgwMCwgMHhFQywgMHgwMiwgMHhGMCwgMHgwMywgMHhDMCwgMHgwRiwgMHgwMCwgMHg3RiwgMHgwMCwgMHgzQywgMHgwMywKKzB4MTAsIDB4NEIsIDB4QzAsIDB4MEQsIDB4MDAsIDB4RkYsIDB4MDAsIDB4RkMsIDB4MDAsIDB4RjAsIDB4MDksIDB4QzAsIDB4MUUsCisweDIwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBBLCAweDA4LCAweDM1LCAweDIwLCAweDlGLCAweDAwLAorMHg3QywgMHgwMywgMHhGMCwgMHg0RCwgMHhDMCwgMHgzNywgMHgwMCwgMHhERiwgMHgwMCwgMHg1QywgMHg4MywgMHg3MCwgMHgwRCwKKzB4QzAsIDB4MDcsIDB4MDAsIDB4OTMsIDB4MDIsIDB4N0MsIDB4MDMsIDB4QjAsIDB4MEQsIDB4QzAsIDB4MzQsIDB4MDAsIDB4OUYsCisweDAyLCAweDVDLCAweDAyLCAweEYwLCAweDI5LCAweEMyLCAweEE3LCAweDAxLCAweDkzLCAweDA2LCAweDdDLCAweDQ3LCAweDMwLAorMHg0OSwgMHhDMCwgMHg4NywgMHgwMCwgMHhERiwgMHgwMCwgMHg3QywgMHgwMiwgMHhGMCwgMHgwMSwgMHhDNCwgMHgwOCwgMHgyMCwKKzB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTMsIDB4QTAsIDB4MzQsIDB4MjAsIDB4OUQsIDB4ODAsIDB4NzQsCisweDAzLCAweEQwLCAweDRELCAweDYwLCAweDNGLCAweDAwLCAweEZELCAweDAwLCAweEM0LCAweDgzLCAweDEwLCAweDBGLCAweDQ0LAorMHhBNywgMHgxQSwgMHg5MSwgMHgwMCwgMHhCQywgMHgxMywgMHhEMCwgMHgwRiwgMHg0MCwgMHgzQywgMHgwMCwgMHg5RCwgMHgwMCwKKzB4NDQsIDB4MDIsIDB4RDAsIDB4MTksIDB4NDAsIDB4ODMsIDB4MDEsIDB4QzEsIDB4NTEsIDB4QzQsIDB4MEIsIDB4NTAsIDB4MDksCisweDQwLCAweDg3LCAweDAwLCAweERDLCAweDAwLCAweDc0LCAweDBBLCAweEQwLCAweDk5LCAweDQwLCAweDZELCAweDAwLCAweDAyLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNywgMHhBMCwgMHgzMiwgMHgwMCwgMHhDRCwgMHgwMCwgMHgzNCwgMHgxMywKKzB4RDAsIDB4MkMsIDB4NDAsIDB4MzMsIDB4MDAsIDB4Q0QsIDB4MDAsIDB4NTQsIDB4MDMsIDB4NTgsIDB4MEMsIDB4NDEsIDB4MjMsCisweDAwLCAweDgxLCAweDAwLCAweDM0LCAweDEzLCAweDkwLCAweDBDLCAweDQ0LCAweDMwLCAweDAwLCAweDBELCAweDgwLCAweDE0LAorMHgwMCwgMHhEMSwgMHgwMCwgMHg0MCwgMHg4MiwgMHgwOCwgMHhDNSwgMHg2MywgMHgxNCwgMHgwMywgMHgxMCwgMHgzQywgMHg0MCwKKzB4QzMsIDB4MDMsIDB4Q0QsIDB4MDAsIDB4MzQsIDB4MTYsIDB4RDAsIDB4MTksIDB4NDAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBELCAweDgwLCAweDc4LCAweDAwLCAweEVELCAweDgxLCAweEI0LCAweDI3LCAweEQwLAorMHgxRSwgMHg0MCwgMHg3QiwgMHgwMCwgMHhDRCwgMHg4OSwgMHg4NCwgMHgwNywgMHgxOCwgMHgxRSwgMHg0MCwgMHg2RiwgMHgwMSwKKzB4MjEsIDB4MDEsIDB4QjQsIDB4MDcsIDB4QzAsIDB4MUMsIDB4NDgsIDB4NzgsIDB4MDAsIDB4QkQsIDB4NDEsIDB4ODQsIDB4MDcsCisweEQwLCAweDFBLCAweDQxLCAweDVGLCAweDAwLCAweEU1LCAweDAxLCAweDg0LCAweDA3LCAweDUwLCAweDFFLCAweDQwLCAweDRCLAorMHgwMSwgMHhFRCwgMHgyMSwgMHhCNCwgMHgwNCwgMHhEMCwgMHg1QSwgMHg0MCwgMHgzRCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4MTAsIDB4MzAsIDB4MDAsIDB4OEYsIDB4MDgsIDB4M0MsIDB4MDMsIDB4RjAsIDB4OEMsCisweDQwLCAweDMzLCAweDAwLCAweENGLCAweDAwLCAweDFDLCAweDIzLCAweDcwLCAweDFDLCAweEMwLCAweDYzLCAweDIxLCAweDgzLAorMHgwMiwgMHgzRSwgMHgwMywgMHhCMCwgMHg4QywgMHhDMCwgMHgzMCwgMHgwMCwgMHhDRiwgMHgwOCwgMHgxQywgMHgwMiwgMHhGMCwKKzB4MDQsIDB4QzAsIDB4MzMsIDB4MDEsIDB4ODcsIDB4MDQsIDB4MUMsIDB4MjMsIDB4MzgsIDB4MEMsIDB4QzEsIDB4MDMsIDB4MDIsCisweENGLCAweDAwLCAweDNDLCAweEUzLCAweEYwLCAweDAwLCAweEMxLCAweDQ4LCAweDQ4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMiwgMHhCOCwgMHg3RCwgMHgwMCwgMHhGRiwgMHgwMCwgMHhGQywgMHg4NywgMHhGMCwgMHg5RiwgMHhDMCwKKzB4M0YsIDB4MDAsIDB4RkYsIDB4NTAsIDB4RkMsIDB4MDMsIDB4RjIsIDB4OEYsIDB4QzAsIDB4MkYsIDB4NDIsIDB4QkYsIDB4MDgsCisweERDLCAweDAzLCAweEY4LCAweDBGLCAweEMyLCAweDNGLCAweDk0LCAweEZGLCAweDQwLCAweEZDLCAweDIzLCAweEYwLCAweDhELAorMHg0MCwgMHgzRiwgMHg0MCwgMHhCQiwgMHgwMCwgMHg1QywgMHg2MywgMHhGMCwgMHgwRiwgMHhDOCwgMHgwRiwgMHgwMywgMHhGRiwKKzB4MDEsIDB4RkMsIDB4MDMsIDB4RjAsIDB4NDMsIDB4QzAsIDB4MEIsIDB4NjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDE1LCAweEEwLCAweDM3LCAweDgwLCAweDlFLCAweDAwLCAweDdDLCAweDAzLCAweEIwLCAweDBELCAweEMwLCAweDM3LAorMHgwMiwgMHhERiwgMHgxMSwgMHg0QywgMHg1MywgMHhGMCwgMHgwRCwgMHhDMCwgMHgwNywgMHgwMCwgMHg5RiwgMHgyMCwgMHg0QywKKzB4MDMsIDB4RjAsIDB4NEQsIDB4QzAsIDB4RjcsIDB4MDEsIDB4NUIsIDB4MDAsIDB4N0MsIDB4MDEsIDB4NzIsIDB4MUQsIDB4QzAsCisweDI0LCAweDAwLCAweERGLCAweDAwLCAweDRDLCAweDAzLCAweEYwLCAweDA4LCAweEMwLCAweDQ0LCAweEMwLCAweERCLCAweDAxLAorMHg0QywgMHgwMSwgMHhEMCwgMHgxRCwgMHg0MCwgMHg0MCwgMHgwMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MTMsIDB4ODgsIDB4MzksIDB4MDEsIDB4QUQsIDB4MDAsIDB4MzQsIDB4OEIsIDB4MTAsIDB4MkUsIDB4NDgsIDB4M0IsIDB4MzEsCisweEVELCAweDA0LCAweEFDLCAweDAzLCAweEQwLCAweDJFLCAweDQwLCAweDBCLCAweDI4LCAweDNELCAweDAwLCAweDg0LCAweDNCLAorMHhEMCwgMHhBRSwgMHhDMCwgMHgzOSwgMHgwQSwgMHhFMSwgMHgwMCwgMHhCNCwgMHgwMywgMHhEMCwgMHgwRSwgMHgwMCwgMHgzOCwKKzB4MDAsIDB4RUQsIDB4ODAsIDB4ODQsIDB4MTMsIDB4RDIsIDB4MEEsIDB4NDAsIDB4MDgsIDB4MDAsIDB4QzUsIDB4MDIsIDB4OTQsCisweDAxLCAweEQwLCAweDBGLCAweDQwLCAweDRDLCAweDIwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLAorMHgwMCwgMHg3OSwgMHgwMiwgMHhBNSwgMHg0MywgMHhCNCwgMHgxNywgMHgxMCwgMHg1RSwgMHg0MCwgMHg3QiwgMHgwMCwgMHhFRCwKKzB4MDEsIDB4ODQsIDB4MjcsIDB4NTgsIDB4NUUsIDB4NDQsIDB4NkIsIDB4MTAsIDB4QUQsIDB4MTEsIDB4ODUsIDB4MDcsIDB4RDAsCisweDFFLCAweDQ2LCAweDczLCAweDAxLCAweEU5LCAweDkxLCAweEI0LCAweDg3LCAweDQyLCAweDFFLCAweDQwLCAweDdBLCAweDAwLAorMHhGRCwgMHgwMSwgMHg5NCwgMHgwNywgMHhEMCwgMHgwQSwgMHg0MSwgMHhDOCwgMHg0MCwgMHhFRCwgMHgwNSwgMHg4NCwgMHgwNSwKKzB4RDAsIDB4MUEsIDB4NDAsIDB4MTAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4MjgsCisweDMzLCAweDAwLCAweDhELCAweDAwLCAweDM0LCAweDAzLCAweDE0LCAweDBDLCAweDQwLCAweDMzLCAweDAwLCAweENELCAweDAwLAorMHgyNCwgMHgwMywgMHhEMCwgMHgwQywgMHg0MCwgMHg3MywgMHgwMiwgMHhDRCwgMHgwMywgMHg0NCwgMHgwMywgMHhEMCwgMHgwQywKKzB4NDAsIDB4MzEsIDB4MDAsIDB4QzksIDB4MDEsIDB4MzQsIDB4MTcsIDB4RDAsIDB4NUMsIDB4NDIsIDB4RjIsIDB4MDAsIDB4Q0QsCisweDgwLCAweDA0LCAweDAzLCAweEQwLCAweDM4LCAweDQwLCAweDcwLCAweDQxLCAweENELCAweDQwLCAweDE0LCAweDYzLCAweEQwLAorMHgzQywgMHg0OSwgMHg1OCwgMHgyMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNywgMHhBOCwgMHgxNSwKKzB4MDAsIDB4N0YsIDB4MDAsIDB4M0MsIDB4MDEsIDB4QjAsIDB4MDQsIDB4QzAsIDB4MTcsIDB4MDAsIDB4NUYsIDB4MDAsIDB4NEMsCisweDAxLCAweEYwLCAweDA0LCAweEMwLCAweDlGLCAweDAwLCAweDdGLCAweDAxLCAweDQ0LCAweDAxLCAweEYwLCAweDA1LCAweEM0LAorMHgxNywgMHgwMCwgMHg3QiwgMHgwMiwgMHhGNCwgMHgxNSwgMHg3MCwgMHgxNywgMHhEMCwgMHg5QSwgMHgxMCwgMHg3RiwgMHgxMCwKKzB4NUMsIDB4MDEsIDB4RjAsIDB4MDcsIDB4QzAsIDB4MUMsIDB4MDAsIDB4NUYsIDB4MDAsIDB4Q0MsIDB4MDUsIDB4RjAsIDB4NTcsCisweEQwLCAweDVDLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDAwLCAweDA3LCAweDAwLAorMHgxRiwgMHgwNCwgMHg3QywgMHgwMCwgMHhGMCwgMHgwMSwgMHhDMCwgMHgwNywgMHgwMCwgMHgxRiwgMHgwMCwgMHgzQywgMHgwMCwKKzB4RjAsIDB4MDEsIDB4QzQsIDB4MDcsIDB4MDAsIDB4MUQsIDB4MDAsIDB4N0MsIDB4ODgsIDB4RjAsIDB4MDEsIDB4QzAsIDB4MDUsCisweDAwLCAweDE3LCAweDEwLCAweDdDLCAweDAwLCAweEYwLCAweDgxLCAweEMwLCAweDA1LCAweDAyLCAweDFGLCAweDAwLCAweDc1LAorMHgwMCwgMHhGMCwgMHgwMSwgMHhDMCwgMHgwNywgMHg0MCwgMHgxNywgMHg4MCwgMHg3QywgMHgwOCwgMHhGMCwgMHgwMSwgMHhDMCwKKzB4NEIsIDB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4MjcsIDB4MDAsIDB4OUYsCisweDAwLCAweDRDLCAweDEyLCAweDMwLCAweDI5LCAweEMyLCAweDI0LCAweDAwLCAweDlGLCAweDAwLCAweDdDLCAweDAyLCAweDMwLAorMHg0OSwgMHhDMCwgMHgyNCwgMHgwNiwgMHg5RiwgMHgxMCwgMHg0QywgMHgyMiwgMHgzMCwgMHgwOSwgMHhFMCwgMHgyNywgMHgwMCwKKzB4OTcsIDB4MDAsIDB4N0MsIDB4MDIsIDB4MzIsIDB4NTksIDB4QzAsIDB4MjcsIDB4MjYsIDB4OTMsIDB4ODAsIDB4N0QsIDB4MEEsCisweEYwLCAweDE5LCAweEMxLCAweDY3LCAweDAyLCAweDlGLCAweDAyLCAweDdDLCAweDAyLCAweDMwLCAweDU5LCAweEMwLCAweDQzLAorMHgyMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgyMCwgMHgyRSwgMHgwMCwgMHg4RCwgMHgwMCwKKzB4QzQsIDB4MUUsIDB4MTAsIDB4MkIsIDB4NDAsIDB4MjQsIDB4MDAsIDB4OUQsIDB4MDAsIDB4NzQsIDB4MDIsIDB4MTAsIDB4NzksCisweDQwLCAweDY1LCAweDAwLCAweDlELCAweDgwLCAweDY4LCAweDA2LCAweDUwLCAweDA5LCAweDYwLCAweDI3LCAweDAwLCAweDlELAorMHgwMCwgMHg1QywgMHgwMiwgMHhCMSwgMHgzOSwgMHhDMiwgMHhFNywgMHgwMCwgMHg4MSwgMHg4MiwgMHg2QywgMHgxQSwgMHhEMCwKKzB4ODksIDB4QzAsIDB4MjUsIDB4MDAsIDB4QkQsIDB4MDMsIDB4MzQsIDB4MUEsIDB4MTIsIDB4NDksIDB4NDAsIDB4MDcsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweEEwLCAweDI0LCAweDIwLCAweDlELCAweDQwLCAweDQ0LAorMHgwMiwgMHgxMCwgMHgyOSwgMHg0MCwgMHgyNCwgMHgwMCwgMHg5RCwgMHgwMCwgMHg3NCwgMHgwMiwgMHgxOCwgMHgwOSwgMHg0MiwKKzB4MjQsIDB4MDAsIDB4OEQsIDB4MDAsIDB4NDQsIDB4ODIsIDB4MTIsIDB4MDksIDB4NDAsIDB4MjcsIDB4MDAsIDB4OTUsIDB4NjAsCisweDM0LCAweDAyLCAweDU4LCAweDJELCAweDQwLCAweEE3LCAweDgwLCAweEQxLCAweDk4LCAweDY0LCAweDAyLCAweEQwLCAweDA5LAorMHg0MCwgMHgyNywgMHgwMCwgMHg5RCwgMHg0MCwgMHg3NCwgMHgyMiwgMHgxNCwgMHgwOSwgMHg0MCwgMHg2MywgMHgwMCwgMHgwMiwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MjAsIDB4MjAsIDB4MDAsIDB4OUQsIDB4MDIsIDB4MDQsIDB4MDIsCisweDEwLCAweDA4LCAweDQwLCAweEEwLCAweDAwLCAweDhELCAweDA2LCAweDM0LCAweDAyLCAweDEwLCAweDA4LCAweDQwLCAweDIxLAorMHgwMCwgMHg4RCwgMHgwOCwgMHg0NSwgMHg4MywgMHg1QSwgMHg4OCwgMHg2MCwgMHgyMywgMHg4MiwgMHg4RCwgMHgwOCwgMHgzNCwKKzB4MjIsIDB4RDAsIDB4ODgsIDB4NDAsIDB4MjcsIDB4MDAsIDB4ODEsIDB4MDAsIDB4MjQsIDB4MDIsIDB4RDAsIDB4MDgsIDB4NDAsCisweDMxLCAweDgwLCAweENELCAweDAwLCAweDc0LCAweDAyLCAweDEwLCAweDQ4LCAweDQwLCAweDQzLCAweDgwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxRCwgMHhCMCwgMHg0NiwgMHgwMCwgMHgxRiwgMHgwMCwgMHg0RCwgMHgwNCwgMHgzNCwKKzB4MTEsIDB4NTAsIDB4MDQsIDB4MDUsIDB4MEYsIDB4MDAsIDB4N0MsIDB4NzgsIDB4MzAsIDB4NDEsIDB4NDEsIDB4MDQsIDB4MDAsCisweDFELCAweDAyLCAweDQ0LCAweDUwLCAweDMxLCAweDYxLCAweDQxLCAweDg3LCAweDA1LCAweDE3LCAweDQyLCAweDc0LCAweDA4LAorMHg3NCwgMHgyMCwgMHhDMCwgMHgwNywgMHgwMCwgMHgxMywgMHg0MCwgMHg2QywgMHg1MCwgMHhGMCwgMHgwMSwgMHhDMCwgMHgwNywKKzB4MDAsIDB4MUYsIDB4ODEsIDB4N0MsIDB4MDAsIDB4MzAsIDB4QTEsIDB4QzAsIDB4NzcsIDB4QzAsIDB4MEEsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDE5LCAweEI4LCAweEE3LCAweDAwLCAweEJGLCAweDAxLCAweDdDLCAweDBBLCAweEYxLCAweDI5LAorMHhDMCwgMHg2NywgMHgwMCwgMHg5RiwgMHgwOSwgMHg3QywgMHg4MiwgMHhGNCwgMHgwOSwgMHhDMCwgMHgyRiwgMHgyMCwgMHhCRiwKKzB4MDQsIDB4N0MsIDB4MDIsIDB4RjAsIDB4NDksIDB4QzAsIDB4MjcsIDB4MDEsIDB4RkYsIDB4MjQsIDB4REMsIDB4MTIsIDB4MDAsCisweDRCLCAweEMwLCAweDJELCAweDQwLCAweEFGLCAweDAwLCAweDZDLCAweDAyLCAweEYwLCAweDBCLCAweEM4LCAweDM5LCAweDAwLAorMHg5RiwgMHgyMiwgMHhGQywgMHgwMywgMHhGMCwgMHg4QiwgMHhDMCwgMHg3NywgMHg2MCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MTgsIDB4QTAsIDB4NjcsIDB4MDEsIDB4OTMsIDB4MDIsIDB4Q0MsIDB4MDYsIDB4RjAsIDB4MUIsIDB4QzAsCisweDI1LCAweDAyLCAweDlCLCAweEUwLCAweDdDLCAweDEyLCAweEYwLCAweDRCLCAweEM1LCAweDJGLCAweDAwLCAweDkzLCAweDAwLAorMHhEQywgMHgwMiwgMHgzOCwgMHg4OSwgMHhDMCwgMHgyNywgMHg0OSwgMHg5MywgMHgwMCwgMHg1RSwgMHgyMiwgMHgzMCwgMHgwQiwKKzB4NDAsIDB4MkMsIDB4MDAsIDB4QTMsIDB4MDAsIDB4Q0MsIDB4MTIsIDB4RjAsIDB4MEEsIDB4QzAsIDB4MkYsIDB4MDAsIDB4QkIsCisweDExLCAweEZDLCAweDgyLCAweEUwLCAweDBCLCAweEQwLCAweDc0LCAweDAwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgxQywgMHgwOCwgMHgwNywgMHgwOCwgMHgwQiwgMHgwMSwgMHg0NSwgMHgwMCwgMHhEMCwgMHgwMSwgMHg0NiwgMHg0NywKKzB4MDEsIDB4MUQsIDB4OUQsIDB4NzQsIDB4NTAsIDB4RDAsIDB4MDEsIDB4NDAsIDB4MDcsIDB4MDAsIDB4MTEsIDB4MTAsIDB4NUMsCisweDAwLCAweDE0LCAweDgxLCAweDAwLCAweDA3LCAweDI1LCAweDExLCAweDA0LCAweDVDLCAweDEwLCAweDEwLCAweDAxLCAweDUxLAorMHgwNCwgMHgyMCwgMHgxMSwgMHgwMCwgMHg3NCwgMHgwMCwgMHhEMiwgMHgwNSwgMHg0OCwgMHgwNywgMHgxMCwgMHgxMywgMHg0MiwKKzB4NzQsIDB4MDAsIDB4RDAsIDB4MDUsIDB4NDAsIDB4NjAsIDB4MDAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDEyLCAweEEwLCAweEEzLCAweDAwLCAweDgxLCAweDAwLCAweDA0LCAweDBBLCAweEQwLCAweDI4LCAweDQwLCAweDIzLCAweDAyLAorMHg4RCwgMHgwMCwgMHgzNCwgMHgzMiwgMHhEMCwgMHgwOCwgMHg0MCwgMHgyMSwgMHgwMCwgMHg4MSwgMHgwNCwgMHgxNCwgMHgyMiwKKzB4OTAsIDB4MDgsIDB4NDQsIDB4MjMsIDB4MDMsIDB4ODksIDB4MTQsIDB4NTQsIDB4MTIsIDB4MTgsIDB4NDgsIDB4NDAsIDB4MjIsCisweDQwLCAweDgxLCAweDAwLCAweDA0LCAweDIyLCAweEQwLCAweDA4LCAweDQwLCAweDIzLCAweDAwLCAweDg5LCAweDAwLCAweDM0LAorMHgwMiwgMHhEMSwgMHgwOCwgMHg0MCwgMHg0OCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwKKzB4ODgsIDB4MjUsIDB4MDAsIDB4ODksIDB4MDQsIDB4NDQsIDB4MDIsIDB4RDAsIDB4MEQsIDB4NDAsIDB4MjcsIDB4MDAsIDB4OUQsCisweDgwLCAweDc0LCAweDAyLCAweEQwLCAweDA5LCAweDAwLCAweEE3LCAweDQyLCAweDkxLCAweDAyLCAweDU0LCAweDAyLCAweDk4LAorMHgwOSwgMHg0MCwgMHgyNywgMHgwMCwgMHg5MSwgMHgwMCwgMHg1NCwgMHgwMiwgMHgxMCwgMHgwQywgMHg0MCwgMHgyNiwgMHgyMCwKKzB4OTEsIDB4MDAsIDB4NzQsIDB4MDIsIDB4RDAsIDB4MDksIDB4NDAsIDB4MjcsIDB4MDEsIDB4OTEsIDB4MDAsIDB4NzQsIDB4MDIsCisweEQwLCAweDBELCAweDQwLCAweDYwLCAweDI4LCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDI4LAorMHgyNSwgMHgwMCwgMHhCMywgMHg4MSwgMHg0QywgMHgwMiwgMHhGMCwgMHgwOSwgMHhDOCwgMHgyRiwgMHgwOCwgMHhCQiwgMHg4MCwKKzB4N0MsIDB4MDIsIDB4RjEsIDB4MDksIDB4ODAsIDB4NjUsIDB4MDAsIDB4OTMsIDB4MDAsIDB4MUMsIDB4MDIsIDB4OTAsIDB4MDksCisweDQ4LCAweDI3LCAweDAwLCAweDlCLCAweDAzLCAweDFDLCAweDFBLCAweDMwLCAweDU5LCAweEMwLCAweDIyLCAweDAxLCAweDgzLAorMHhBNywgMHg0QywgMHgwMiwgMHhEMCwgMHgyOSwgMHhDNCwgMHg2NywgMHgwMCwgMHg5QiwgMHg4MCwgMHg3QywgMHgyQSwgMHhGMCwKKzB4MjksIDB4QzAsIDB4MTQsIDB4MDAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTYsIDB4MDAsIDB4MjUsCisweDAwLCAweDlGLCAweDAxLCAweDcwLCAweDAyLCAweEYwLCAweDA5LCAweEMwLCAweDI3LCAweDgwLCAweDlDLCAweEEwLCAweDdDLAorMHg4MiwgMHhGMCwgMHgwOSwgMHhDMCwgMHg2NywgMHgwMCwgMHg5RiwgMHgwMywgMHg3RSwgMHgwMiwgMHg1MCwgMHgwOSwgMHhDNCwKKzB4MjcsIDB4MDAsIDB4OUYsIDB4MDUsIDB4N0MsIDB4MDIsIDB4RjQsIDB4NDksIDB4RTAsIDB4NjUsIDB4MDEsIDB4OUMsIDB4NDQsCisweDVDLCAweDQyLCAweEYwLCAweDA5LCAweDAwLCAweDY3LCAweDA0LCAweDlGLCAweDIwLCAweDdFLCAweDA2LCAweEQwLCAweDU4LAorMHhDMSwgMHg1QiwgMHgyMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwOCwgMHgwMSwgMHgwMCwKKzB4MUYsIDB4MDAsIDB4NUMsIDB4NDAsIDB4RjAsIDB4MDEsIDB4RTAsIDB4MDcsIDB4MDAsIDB4MUYsIDB4MDAsIDB4N0MsIDB4MDAsCisweDMxLCAweDAxLCAweEUwLCAweDA2LCAweDExLCAweDFGLCAweDAwLCAweDdDLCAweDAwLCAweDkwLCAweDAxLCAweEM4LCAweDAzLAorMHgwMCwgMHgxRiwgMHgwMCwgMHg3QywgMHg4MCwgMHhGOCwgMHgwMSwgMHhDMCwgMHg4NiwgMHgwMCwgMHgxRiwgMHg4MCwgMHg1QywKKzB4MDAsIDB4NjAsIDB4MDEsIDB4QzAsIDB4ODUsIDB4MDAsIDB4MUYsIDB4MDQsIDB4NEQsIDB4MDAsIDB4RjAsIDB4MjEsIDB4QzAsCisweDUwLCAweDIwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDIwLCAweDE0LCAweDAwLCAweDVELAorMHgwMCwgMHhENCwgMHgwRCwgMHhEOCwgMHgwNywgMHg2MCwgMHgxNywgMHgxMCwgMHg1RSwgMHgwMCwgMHg3NCwgMHgwMSwgMHgxMCwKKzB4NTcsIDB4RTAsIDB4OUIsIDB4ODAsIDB4NUQsIDB4MjAsIDB4RjQsIDB4MDEsIDB4QjIsIDB4MDUsIDB4QzAsIDB4MTcsIDB4ODAsCisweDVELCAweDAwLCAweDdDLCAweDAxLCAweDcwLCAweDE3LCAweEMwLCAweDFDLCAweDAwLCAweDdELCAweDAyLCAweEM0LCAweDAxLAorMHhCMCwgMHgxNywgMHg0MCwgMHg5OCwgMHgwMCwgMHg3RiwgMHgwMywgMHhDNCwgMHg0NSwgMHhEMiwgMHgwNywgMHg0OCwgMHg0MSwKKzB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4QTAsIDB4MzIsIDB4MDAsIDB4Q0QsIDB4MDAsCisweDA0LCAweDJFLCAweDUwLCAweDA4LCAweDQwLCAweDMxLCAweDgwLCAweEM5LCAweDAwLCAweDM0LCAweDAzLCAweDEzLCAweDE4LAorMHg2MCwgMHgzMiwgMHg4MCwgMHhDRCwgMHgwMCwgMHgzNCwgMHgwMiwgMHgxOCwgMHgwQywgMHg0MCwgMHgzMywgMHgxMCwgMHhDRCwKKzB4MDAsIDB4MzQsIDB4MDMsIDB4RDAsIDB4N0MsIDB4NTAsIDB4MjAsIDB4MDAsIDB4Q0QsIDB4MUEsIDB4MTYsIDB4MEIsIDB4MTAsCisweDA0LCAweDAwLCAweEYxLCAweDAyLCAweDhELCAweDAwLCAweDA0LCAweDFFLCAweEQwLCAweDhDLCAweDQwLCAweDQwLCAweDAwLAorMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHg4MCwgMHgzOCwgMHgwMCwgMHhFRCwgMHgwNCwgMHg5NCwKKzB4MDIsIDB4RDAsIDB4MEEsIDB4NDAsIDB4M0IsIDB4MDEsIDB4RUQsIDB4MDQsIDB4MzQsIDB4MDcsIDB4MTgsIDB4MEEsIDB4NDAsCisweDNCLCAweDAwLCAweEVELCAweDA0LCAweDM0LCAweDAyLCAweDkyLCAweDRFLCAweDQwLCAweDNCLCAweDAxLCAweEVELCAweDAwLAorMHhCNCwgMHgwMywgMHg1MCwgMHgwRSwgMHg0MSwgMHgyOCwgMHgxMCwgMHhBRCwgMHg0MCwgMHg4NCwgMHgwNCwgMHg5MCwgMHgzRSwKKzB4NDAsIDB4MzgsIDB4MDAsIDB4QUQsIDB4ODMsIDB4ODYsIDB4MDMsIDB4RDAsIDB4MEEsIDB4NDAsIDB4MTEsIDB4MDAsIDB4MDIsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDEwLCAweDc4LCAweDAwLCAweEVGLCAweDAzLCAweDk0LCAweDA3LAorMHg3MCwgMHgxQSwgMHhDMCwgMHg3OSwgMHgwMSwgMHhFRCwgMHgwNSwgMHhCNCwgMHgzNywgMHgzMSwgMHgxRSwgMHg0MCwgMHg3QSwKKzB4MDgsIDB4RUQsIDB4MEIsIDB4QjQsIDB4MDYsIDB4MzQsIDB4MUUsIDB4QzAsIDB4N0IsIDB4MDIsIDB4RUQsIDB4ODUsIDB4QkMsCisweDI3LCAweEQ4LCAweDE3LCAweEUwLCAweDY4LCAweDAwLCAweEFGLCAweDgxLCAweDlDLCAweDA0LCAweDc4LCAweDE2LCAweEMwLAorMHg3OSwgMHgwMCwgMHhFRiwgMHgwMSwgMHg4QywgMHgwNywgMHhGMCwgMHgxQiwgMHhDMCwgMHg1MCwgMHg2MCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4QjgsIDB4MzUsIDB4MTAsIDB4REYsIDB4NDAsIDB4N0MsIDB4MDMsIDB4RjAsCisweDA5LCAweEMwLCAweDM3LCAweDAwLCAweEQ3LCAweDAwLCAweDdDLCAweDJCLCAweEY0LCAweDBELCAweEMwLCAweDM1LCAweDAwLAorMHhERiwgMHgwMCwgMHg3QywgMHgwMiwgMHg3MCwgMHgwRCwgMHhDMCwgMHgzNSwgMHg4MiwgMHhERiwgMHgzRSwgMHg1QywgMHgzQiwKKzB4NzAsIDB4MDEsIDB4RTAsIDB4MjUsIDB4MjAsIDB4OUYsIDB4MDAsIDB4M0MsIDB4MDAsIDB4NzAsIDB4MEQsIDB4QzIsIDB4MjcsCisweDAwLCAweEM3LCAweDAwLCAweDdDLCAweDAzLCAweEYwLCAweDA5LCAweEMwLCAweDQzLCAweDYwLCAweDA2LCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHhBMCwgMHg3RiwgMHgwMCwgMHhFRiwgMHgwOSwgMHhDQywgMHgzMiwgMHhGOCwgMHg4QiwKKzB4QzAsIDB4N0MsIDB4MDQsIDB4RkYsIDB4MTEsIDB4RkMsIDB4MDcsIDB4RjAsIDB4MUIsIDB4QzgsIDB4N0YsIDB4MDAsIDB4RkYsCisweDAxLCAweERFLCAweDA2LCAweEYwLCAweEJELCAweEMxLCAweDc0LCAweDAwLCAweEZGLCAweDAxLCAweEZDLCAweDA3LCAweEYwLAorMHgxQiwgMHhDMCwgMHg2QywgMHgwMCwgMHg5QiwgMHg4OSwgMHhGQywgMHgyNSwgMHhGMCwgMHgxNywgMHhDMCwgMHg3QywgMHgwMCwKKzB4QkIsIDB4MDEsIDB4QkMsIDB4MDcsIDB4MzgsIDB4OUYsIDB4QzAsIDB4MUIsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDE1LCAweDgwLCAweDM5LCAweDAwLCAweEVELCAweDFDLCAweDg0LCAweDIyLCAweEQ4LCAweDBBLCAweEMwLAorMHgzQSwgMHhBMCwgMHhFRCwgMHgwOCwgMHhCNCwgMHgwMywgMHhEMCwgMHgwOCwgMHg0MCwgMHgxMywgMHgwMCwgMHhFRCwgMHgwMCwKKzB4OEMsIDB4MTIsIDB4RDAsIDB4NUUsIDB4NDAsIDB4NzgsIDB4MDIsIDB4RUQsIDB4MDAsIDB4OUMsIDB4NDMsIDB4RDAsIDB4MEIsCisweDYwLCAweDI4LCAweDA2LCAweEFELCAweDA1LCAweEI0LCAweDI0LCAweEQyLCAweDBFLCAweEMwLCAweDNBLCAweDgwLCAweEE1LAorMHgwMCwgMHhCNCwgMHgwOSwgMHhGMiwgMHhDMiwgMHg0MCwgMHg1NywgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDgsIDB4MzksIDB4MDAsIDB4RkQsIDB4ODEsIDB4QTQsIDB4MDMsIDB4RDgsIDB4ODgsIDB4NDAsIDB4NzgsCisweDAyLCAweEU1LCAweDAxLCAweEI0LCAweDAzLCAweDUwLCAweDBBLCAweDQwLCAweDNCLCAweDAyLCAweEZELCAweDE4LCAweDk0LAorMHgwMiwgMHhEMSwgMHg0RSwgMHg1NCwgMHgzQSwgMHgxMCwgMHhFRCwgMHgwMCwgMHhCNCwgMHgyMywgMHhEMCwgMHgwRSwgMHg0MCwKKzB4MjgsIDB4MDAsIDB4QTksIDB4MTQsIDB4QjQsIDB4ODAsIDB4RDgsIDB4ODYsIDB4NDAsIDB4MzksIDB4MDAsIDB4RTEsIDB4MDAsCisweEI0LCAweDAzLCAweDEwLCAweDBFLCAweDQwLCAweDYzLCAweDIwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwNiwgMHgyOCwgMHgzMywgMHgwMCwgMHhDRCwgMHgwMCwgMHgwNCwgMHgwMSwgMHhEMCwgMHgwOCwgMHg2NCwgMHgzMiwgMHgwMCwKKzB4Q0QsIDB4ODAsIDB4MzQsIDB4MDMsIDB4RDAsIDB4MDgsIDB4NjAsIDB4MTMsIDB4MDAsIDB4Q0QsIDB4ODEsIDB4MDQsIDB4MDIsCisweEQwLCAweDBELCAweDQwLCAweDM2LCAweDAwLCAweERELCAweDQwLCAweDU0LCAweDBGLCAweEQxLCAweDI4LCAweDQ0LCAweEUwLAorMHgxMCwgMHg4RCwgMHg0MCwgMHgzNCwgMHgwMCwgMHhEMCwgMHg4OCwgMHg0MCwgMHg2MywgMHgwMCwgMHhDNSwgMHgwMCwgMHgzNCwKKzB4MDksIDB4NTIsIDB4MzAsIDB4NDAsIDB4MEIsIDB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTUsCisweEE4LCAweDM1LCAweDAwLCAweERGLCAweDQxLCAweDZELCAweDAyLCAweEQwLCAweDBELCAweEMwLCAweDM0LCAweDAwLCAweERGLAorMHgwMCwgMHhGQywgMHgwMywgMHhGMCwgMHgwOSwgMHhDOCwgMHhGNywgMHgwOCwgMHhGRiwgMHgwMywgMHg1NCwgMHg4MywgMHhEMiwKKzB4MEYsIDB4NDgsIDB4M0UsIDB4MDAsIDB4RkYsIDB4MDgsIDB4RjQsIDB4MEIsIDB4RDAsIDB4MkQsIDB4RDAsIDB4MzQsIDB4MDIsCisweDhCLCAweDAxLCAweDdDLCAweDAwLCAweEQwLCAweDBDLCAweEMwLCAweEI1LCAweDA2LCAweDkzLCAweDAwLCAweDdDLCAweDBBLAorMHgxMCwgMHgyMSwgMHhDMCwgMHg1NywgMHgwMSwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwKKzB4MzMsIDB4MDAsIDB4REYsIDB4MTAsIDB4M0MsIDB4MDIsIDB4RjAsIDB4MDksIDB4QzAsIDB4MzcsIDB4MDAsIDB4REYsIDB4MDAsCisweDdDLCAweDAzLCAweEYwLCAweDI5LCAweEM0LCAweDc3LCAweDA0LCAweERGLCAweDA0LCAweDFDLCAweDBBLCAweEYwLCAweDBELAorMHhDMCwgMHgzNSwgMHgwMCwgMHhERiwgMHgwMCwgMHg1QywgMHgwMywgMHhGMCwgMHg0RCwgMHhDMCwgMHhBNywgMHgwOCwgMHg5RiwKKzB4NjAsIDB4N0MsIDB4ODgsIDB4RjEsIDB4MkQsIDB4NDAsIDB4QjYsIDB4MDAsIDB4OUYsIDB4MDAsIDB4N0MsIDB4MDIsIDB4RjAsCisweEExLCAweEM4LCAweDM3LCAweDIwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDA4LCAweDNGLAorMHgwMCwgMHhGMywgMHgwMCwgMHhGQywgMHgxMiwgMHgzMCwgMHgyRiwgMHhDMCwgMHgzRiwgMHgyMCwgMHhGMywgMHg0MCwgMHhGQywKKzB4MDMsIDB4RjAsIDB4MUYsIDB4QzAsIDB4MkMsIDB4MDIsIDB4RkYsIDB4ODAsIDB4RkMsIDB4ODcsIDB4MzAsIDB4MEYsIDB4RDAsCisweDNDLCAweDAwLCAweEY1LCAweDAwLCAweENELCAweDQzLCAweEIwLCAweDA3LCAweEMwLCAweDdGLCAweDAwLCAweEJGLCAweDAwLAorMHhDQywgMHg4MCwgMHhGMCwgMHgwRiwgMHg4MCwgMHgzQywgMHgwMCwgMHhCMywgMHgwNCwgMHhGQywgMHg0MCwgMHhGMCwgMHgwQSwKKzB4QzEsIDB4MDQsIDB4MjYsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MzYsIDB4MjAsCisweEQxLCAweDAwLCAweDc0LCAweDA2LCAweDk0LCAweDA1LCAweEMwLCAweDM1LCAweDAwLCAweEQxLCAweDAwLCAweDc0LCAweDAzLAorMHhEMCwgMHg4NCwgMHg0MSwgMHgyNSwgMHgwMCwgMHhERCwgMHgyMCwgMHg3NCwgMHgwMSwgMHgxMCwgMHgwRCwgMHg0MCwgMHgzNCwKKzB4MDAsIDB4RDEsIDB4MDAsIDB4NDQsIDB4MDMsIDB4QjAsIDB4MjEsIDB4NDAsIDB4MTcsIDB4MDAsIDB4OUQsIDB4MjMsIDB4NDQsCisweDRDLCAweEQwLCAweDBELCAweDUwLCAweDYwLCAweDg0LCAweDk1LCAweDA3LCAweDc0LCAweDBDLCAweEQwLCAweDM5LCAweDUwLAorMHgwNCwgMHg4MiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHhBMCwgMHgzNiwgMHhDMCwgMHhEMSwKKzB4MDAsIDB4NzQsIDB4MDIsIDB4OTAsIDB4MEQsIDB4NDAsIDB4MzMsIDB4MDAsIDB4RDEsIDB4MDAsIDB4NzQsIDB4MDMsIDB4RDAsCisweDA5LCAweDQwLCAweDM0LCAweDAwLCAweERELCAweDAwLCAweDY0LCAweDFCLCAweDEwLCAweDBELCAweDQwLCAweDM0LCAweDAwLAorMHhENSwgMHgwMCwgMHg2NCwgMHgwMywgMHgxMCwgMHgwMSwgMHg0MCwgMHhCNywgMHgwMSwgMHg5RCwgMHgxMSwgMHg0NCwgMHgwNCwKKzB4RDAsIDB4MEQsIDB4NDEsIDB4NDUsIDB4MDAsIDB4OTEsIDB4MDAsIDB4NzQsIDB4MDYsIDB4NTAsIDB4MTEsIDB4NDAsIDB4MDQsCisweDAwLCAweDBBLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDMwLCAweDAwLCAweDMwLCAweDAwLCAweEMxLCAweDAwLAorMHgzNCwgMHgwMiwgMHg5MCwgMHgwOCwgMHg0MCwgMHgzMSwgMHgwMCwgMHhDMSwgMHgwMCwgMHgzNCwgMHgwMywgMHhEMCwgMHgwOCwKKzB4NDAsIDB4MTEsIDB4MDAsIDB4Q0QsIDB4MDAsIDB4MzQsIDB4MDIsIDB4MTQsIDB4NEMsIDB4NDAsIDB4MzAsIDB4MDQsIDB4QzUsCisweDIwLCAweDA0LCAweDAzLCAweEQ0LCAweDAwLCAweDQ0LCAweDIzLCAweDgwLCAweDhELCAweDMwLCAweDA1LCAweDQwLCAweEQwLAorMHgwRCwgMHg0MCwgMHgyNSwgMHgwMCwgMHg4NSwgMHgwMCwgMHgzNCwgMHgwMCwgMHhEMCwgMHgwMCwgMHg0MiwgMHg0MCwgMHg4MSwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzYsIDB4MDAsIDB4RjMsIDB4NDAsIDB4N0MsCisweDAzLCAweDMwLCAweDBELCAweEM0LCAweDNGLCAweDAwLCAweEYzLCAweDAwLCAweEZDLCAweDAzLCAweEYwLCAweDJELCAweEMyLAorMHhBNCwgMHgwMiwgMHhGRCwgMHgwMCwgMHg3QywgMHgwMywgMHgzMCwgMHgwRSwgMHhDMCwgMHgzQywgMHgwMSwgMHhGNywgMHgwMCwKKzB4Q0MsIDB4MDMsIDB4MzIsIDB4MDUsIDB4QzIsIDB4MzcsIDB4MDAsIDB4OUYsIDB4MDAsIDB4NEMsIDB4MTAsIDB4RjAsIDB4MEQsCisweEMwLCAweDI1LCAweDAwLCAweDUxLCAweDAwLCAweDdDLCAweDAwLCAweDcwLCAweDA5LCAweEMwLCAweDA0LCAweDA0LCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyNSwgMHhBOCwgMHgzRiwgMHgwMCwgMHhGRiwgMHgwMCwgMHhGQywgMHgwMSwKKzB4NzgsIDB4MDcsIDB4QzgsIDB4M0YsIDB4MDAsIDB4RkYsIDB4MDAsIDB4RkMsIDB4MDMsIDB4RjAsIDB4NDcsIDB4QzEsIDB4MEYsCisweDAwLCAweEVGLCAweDAwLCAweEZDLCAweDAxLCAweEYwLCAweDJGLCAweEMwLCAweDNGLCAweDAwLCAweEZCLCAweDAwLCAweEZDLAorMHgwMywgMHgzMCwgMHgwMywgMHhDMCwgMHgxRiwgMHgwMCwgMHgzRiwgMHgwMCwgMHg3QywgMHgwMCwgMHhGMCwgMHgwQSwgMHg0MCwKKzB4MkEsIDB4MDgsIDB4N0YsIDB4MDAsIDB4RkMsIDB4MDAsIDB4RjAsIDB4MDMsIDB4QzAsIDB4MTcsIDB4MjAsIDB4MEUsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweDgwLCAweDNGLCAweDA4LCAweEEzLCAweDAwLCAweEZDLCAweDMzLCAweDMwLAorMHg5QiwgMHhDMCwgMHhFRiwgMHgwMCwgMHhGRiwgMHgwMywgMHg5RCwgMHgyNywgMHhCMCwgMHgxRiwgMHhDMCwgMHg3QywgMHgwMiwKKzB4RkIsIDB4MDksIDB4Q0QsIDB4MDcsIDB4NzAsIDB4MUYsIDB4QzgsIDB4N0EsIDB4MDgsIDB4RkYsIDB4MDEsIDB4RkMsIDB4MDcsCisweDMxLCAweDlGLCAweEMwLCAweDdGLCAweDAwLCAweEZGLCAweDA5LCAweEZFLCAweDI3LCAweDMwLCAweDFGLCAweEMwLCAweDdBLAorMHg0MCwgMHhCMywgMHgwMSwgMHhGQywgMHgwMCwgMHgzMCwgMHgyNiwgMHhDMCwgMHgwRiwgMHgwMCwgMHgwRSwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4M0IsIDB4MzgsIDB4RDEsIDB4NDMsIDB4RjQsIDB4MTMsIDB4MTIsIDB4NEMsCisweDQ0LCAweDI3LCAweDExLCAweDFDLCAweDg0LCAweDQ0LCAweDEwLCAweDEwLCAweDExLCAweDUwLCAweDA0LCAweDAxLCAweDExLAorMHgwNCwgMHg0NCwgMHhEMCwgMHg1MCwgMHgxMSwgMHg0MCwgMHgwNywgMHgwNSwgMHgwRCwgMHgxMCwgMHgzNCwgMHg0MCwgMHgxMCwKKzB4NDEsIDB4NDAsIDB4MDcsIDB4MDAsIDB4MUQsIDB4NDQsIDB4NUMsIDB4MTAsIDB4MTAsIDB4MTEsIDB4NDAsIDB4NDQsIDB4MDAsCisweDkxLCAweDAxLCAweDVDLCAweDBDLCAweDE0LCAweDQ1LCAweDQwLCAweDBGLCAweDYwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgxMSwgMHhBMCwgMHgyMywgMHgwNSwgMHg4MSwgMHgyMiwgMHgxNCwgMHgzMywgMHgxMCwgMHgwQywgMHg0OCwKKzB4MjEsIDB4MDEsIDB4Q0QsIDB4MDAsIDB4NDQsIDB4MTMsIDB4NTQsIDB4MEQsIDB4NDAsIDB4MzEsIDB4MDAsIDB4QzEsIDB4ODAsCisweDA0LCAweDAzLCAweDU2LCAweDBDLCAweDQ0LCAweDMzLCAweDAwLCAweENELCAweDA0LCAweDM0LCAweDEzLCAweDkwLCAweDRDLAorMHg0MCwgMHgzMywgMHgwNSwgMHhDRCwgMHgyMCwgMHgzNCwgMHgxMywgMHgxMCwgMHgwRCwgMHg0MCwgMHgzMCwgMHgwMCwgMHgwMSwKKzB4MDEsIDB4MzQsIDB4MEEsIDB4RDAsIDB4NDAsIDB4NDAsIDB4NEYsIDB4ODAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDA3LCAweDg4LCAweDM1LCAweDQwLCAweEQxLCAweDg0LCAweDc0LCAweDAzLCAweDE0LCAweDNELCAweDQwLCAweDI3LAorMHgyMCwgMHgwRCwgMHgwMCwgMHg1NCwgMHgwMCwgMHg5MCwgMHgwMSwgMHg0MiwgMHgwNSwgMHgwMCwgMHgwMSwgMHgwMCwgMHg0NCwKKzB4MDAsIDB4NTQsIDB4MDEsIDB4NjAsIDB4MDcsIDB4MDAsIDB4MUQsIDB4ODAsIDB4NzAsIDB4MDAsIDB4OTAsIDB4MDEsIDB4NDAsCisweDA3LCAweDAwLCAweDFELCAweDIwLCAweDE0LCAweDAwLCAweDE4LCAweDAxLCAweDQwLCAweDA0LCAweDAwLCAweDUxLCAweDAxLAorMHg3NCwgMHgwMCwgMHhEMSwgMHgwMSwgMHg0MCwgMHgwRiwgMHgwMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4QTAsIDB4MzcsIDB4MDAsIDB4OTMsIDB4MDEsIDB4NUMsIDB4MDMsIDB4MzAsIDB4M0QsIDB4QzAsIDB4NjUsIDB4MEEsCisweERGLCAweDAwLCAweDRDLCAweDgzLCAweEYwLCAweDBELCAweEM4LCAweDM1LCAweDQwLCAweERCLCAweDgwLCAweDA4LCAweDAzLAorMHg3NCwgMHgwRCwgMHhDNCwgMHgzNiwgMHgxMCwgMHhERiwgMHgwMCwgMHg3OCwgMHgwMywgMHhBMCwgMHgwRCwgMHhDMCwgMHgzNywKKzB4ODAsIDB4REYsIDB4MDAsIDB4NzQsIDB4MDMsIDB4MzQsIDB4MEMsIDB4QzIsIDB4MzYsIDB4MDAsIDB4OTEsIDB4MDEsIDB4M0MsCisweDE1LCAweEYwLCAweDE1LCAweEMwLCAweDAzLCAweDIwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLAorMHg4OCwgMHgzRCwgMHgwMCwgMHhGRiwgMHgyMSwgMHhGNCwgMHgwMywgMHhEMCwgMHgwRiwgMHhDMCwgMHgyRiwgMHgwMCwgMHgzRiwKKzB4NDAsIDB4RTQsIDB4MDAsIDB4MzAsIDB4MDMsIDB4QzAsIDB4MEUsIDB4MDAsIDB4M0YsIDB4MDAsIDB4RkMsIDB4NDAsIDB4RjAsCisweDAzLCAweDAwLCAweDBGLCAweDAwLCAweDNGLCAweDMwLCAweEZDLCAweDgwLCAweDcwLCAweDAzLCAweEMwLCAweDBGLCAweEEwLAorMHgzRiwgMHg0MCwgMHhEQywgMHgwMCwgMHhGMCwgMHgwMywgMHhDMCwgMHgwRiwgMHgxNCwgMHhGRiwgMHgwMCwgMHhEQywgMHgyNCwKKzB4MzAsIDB4NDcsIDB4QzAsIDB4MUYsIDB4MDAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDgsCisweDYxLCAweDEwLCAweDlCLCAweDAxLCAweDZDLCAweDAzLCAweDM0LCAweDNELCAweEMwLCAweDI0LCAweDAwLCAweEQzLCAweDUwLAorMHg3QywgMHgwMywgMHgzMCwgMHgwRCwgMHhDMCwgMHg3NywgMHgwMCwgMHhEMywgMHgwOCwgMHg0QywgMHgwNywgMHhCMCwgMHg0RCwKKzB4QzAsIDB4MzcsIDB4MDAsIDB4RDcsIDB4MDEsIDB4NEMsIDB4ODMsIDB4MzAsIDB4MUQsIDB4QzEsIDB4MzcsIDB4MDAsIDB4REYsCisweDAxLCAweDdDLCAweDk3LCAweEYwLCAweDFELCAweEMwLCAweDM0LCAweDAwLCAweDkzLCAweDEwLCAweDdDLCAweDIwLCAweDMwLAorMHgyNSwgMHhEMCwgMHgwOCwgMHgyMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMywgMHhBMCwgMHhCNCwKKzB4MDIsIDB4RDEsIDB4MjAsIDB4RDQsIDB4MkIsIDB4MTAsIDB4MkQsIDB4NDAsIDB4NjQsIDB4MDEsIDB4MUEsIDB4MDMsIDB4M0MsCisweDAwLCAweDE0LCAweDQwLCAweDQyLCAweDg3LCAweDAwLCAweDExLCAweDAxLCAweDQ0LCAweDAwLCAweDEwLCAweDUxLCAweEMwLAorMHgwNSwgMHg0MCwgMHgxNSwgMHgwMSwgMHg0NCwgMHgwNCwgMHgxMCwgMHgxMSwgMHg0MCwgMHgwNywgMHgwMCwgMHgxRCwgMHgyMSwKKzB4NzQsIDB4MEMsIDB4RDAsIDB4MDEsIDB4NDQsIDB4QzAsIDB4MDQsIDB4NTksIDB4MDMsIDB4NzQsIDB4MjAsIDB4MDAsIDB4QjUsCisweDQwLCAweDBDLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDIzLCAweDIwLCAweDMwLCAweDAwLAorMHg4OSwgMHg0MCwgMHg0NCwgMHgwMywgMHg5MCwgMHgyQywgMHg0MSwgMHg2MCwgMHgwMCwgMHhDOSwgMHgwMiwgMHgzNCwgMHgwMywKKzB4MTAsIDB4MUMsIDB4NDAsIDB4QjcsIDB4MDQsIDB4QzEsIDB4MDEsIDB4MTQsIDB4MDMsIDB4OTAsIDB4MkMsIDB4NDAsIDB4MzMsCisweDAwLCAweEM5LCAweDAyLCAweDU0LCAweDI3LCAweDkxLCAweDBDLCAweDQwLCAweDMzLCAweDAwLCAweENELCAweDAwLCAweDM0LAorMHgwQiwgMHhEMCwgMHgwQywgMHg0MCwgMHhGMCwgMHg0MCwgMHg4OSwgMHgwMywgMHgxNCwgMHgwQywgMHgxMCwgMHg5QywgMHg0MCwKKzB4NEMsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjQsIDB4MDAsIDB4NzgsIDB4MDAsIDB4RjEsCisweDAxLCAweDE0LCAweDA3LCAweDkwLCAweDFFLCAweDQwLCAweDY4LCAweDAwLCAweDI5LCAweDExLCAweEM0LCAweDA0LCAweDEwLAorMHg5MiwgMHg0OCwgMHg0QiwgMHgwMCwgMHgyMSwgMHgwMywgMHg5NCwgMHgwNCwgMHgxMiwgMHgxMiwgMHg0MCwgMHg0RCwgMHgyMCwKKzB4MjksIDB4MDksIDB4OTUsIDB4MEMsIDB4NTAsIDB4MTIsIDB4NDAsIDB4NEIsIDB4MjAsIDB4MkMsIDB4NDEsIDB4QjAsIDB4MDQsCisweEQwLCAweDEzLCAweDQwLCAweDQ4LCAweDAwLCAweEE5LCAweDI5LCAweEI0LCAweDE3LCAweDEwLCAweDFGLCAweDQwLCAweDNDLAorMHgyMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzMiwgMHgxOCwgMHgyMCwgMHgwMCwgMHg4QiwgMHgwMCwKKzB4MEMsIDB4MDMsIDB4MzAsIDB4MEMsIDB4QzAsIDB4MjQsIDB4MDAsIDB4Q0IsIDB4ODgsIDB4MzQsIDB4MjMsIDB4MzEsIDB4MEMsCisweEMwLCAweDM3LCAweDAwLCAweEQzLCAweDgwLCAweDVDLCAweDIzLCAweEIwLCAweDhDLCAweEMwLCAweDMzLCAweDAyLCAweENGLAorMHgwMCwgMHgxQywgMHgyMywgMHgzMCwgMHgwQywgMHhDMCwgMHgzMywgMHgwMCwgMHhDRSwgMHgwMCwgMHgzQywgMHgwMywgMHhGMiwKKzB4MEMsIDB4QzQsIDB4MzAsIDB4MDAsIDB4NDMsIDB4MzAsIDB4MUMsIDB4MDMsIDB4MzAsIDB4N0MsIDB4QzAsIDB4NDgsIDB4NDAsCisweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweDMwLCAweDNELCAweDAwLCAweEZGLCAweDAwLCAweERDLAorMHg0QiwgMHg1MCwgMHgwRiwgMHhDMCwgMHgyRiwgMHgwMiwgMHgzRiwgMHgyOCwgMHhGRSwgMHgwMCwgMHhGMiwgMHgwMywgMHg0OCwKKzB4MEYsIDB4MDAsIDB4M0YsIDB4MDAsIDB4RUMsIDB4ODAsIDB4RjAsIDB4MDMsIDB4QzAsIDB4MEYsIDB4MDAsIDB4MzcsIDB4MDAsCisweEVDLCAweDAwLCAweEIwLCAweDgzLCAweEMwLCAweDBGLCAweDAwLCAweDNGLCAweDQwLCAweEZDLCAweDAwLCAweEYwLCAweDAyLAorMHhDMCwgMHg0RiwgMHg0MCwgMHg3NywgMHgwMCwgMHgzQywgMHgxMywgMHhGMiwgMHg4RCwgMHhDMCwgMHgwQiwgMHgyMCwgMHgwNiwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4QTAsIDB4MzcsIDB4MDEsIDB4OUYsIDB4MDAsIDB4N0MsIDB4MTMsCisweEYwLCAweDBELCAweEMwLCAweDI0LCAweDAwLCAweERELCAweDAwLCAweDdDLCAweDAzLCAweEYwLCAweDFDLCAweEMwLCAweDMwLAorMHg0MCwgMHhEMywgMHgwMCwgMHg2RiwgMHgwMywgMHhGMCwgMHgwRCwgMHhDMCwgMHgzNywgMHgwMCwgMHhERiwgMHgwMCwgMHg0RCwKKzB4MDMsIDB4RjAsIDB4MUQsIDB4RDAsIDB4MzQsIDB4MDAsIDB4REYsIDB4MjEsIDB4NEQsIDB4MDcsIDB4MjQsIDB4MEQsIDB4QzAsCisweDMzLCAweDAwLCAweDUzLCAweDAwLCAweDRDLCAweDA3LCAweDMyLCAweDE1LCAweEMwLCAweDQwLCAweDAwLCAweDBFLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHg4MCwgMHgzOSwgMHgyMiwgMHhFRCwgMHgwMCwgMHhCNCwgMHgwMywgMHhEMCwKKzB4MEYsIDB4NTAsIDB4MjgsIDB4MDAsIDB4MkQsIDB4MDAsIDB4QkMsIDB4MDAsIDB4RDAsIDB4MDIsIDB4NDgsIDB4MDksIDB4MDAsCisweDIxLCAweDAwLCAweDg0LCAweDAwLCAweEQyLCAweDAyLCAweDQwLCAweDBCLCAweDAwLCAweDNELCAweDAwLCAweDg0LCAweDAwLAorMHhEMCwgMHgwMywgMHg0MCwgMHgwOCwgMHgwMCwgMHgzRCwgMHgwMCwgMHhDNCwgMHgwMCwgMHgxMCwgMHgwMiwgMHg0NCwgMHgwQiwKKzB4MDAsIDB4RTEsIDB4MjAsIDB4QUMsIDB4MDMsIDB4QjAsIDB4MDcsIDB4QzAsIDB4NEUsIDB4NjgsIDB4MDYsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweDY5LCAweDEwLCAweEVELCAweDAzLCAweDk0LCAweDE3LCAweEQwLCAweDFFLAorMHg0MCwgMHg2OCwgMHgwNCwgMHhFRCwgMHg0MSwgMHhCNCwgMHgwNywgMHg1MCwgMHgxRSwgMHg0NCwgMHg3QywgMHgyMCwgMHhGOSwKKzB4ODEsIDB4ODQsIDB4MDcsIDB4NTAsIDB4MUUsIDB4NDAsIDB4N0IsIDB4MDAsIDB4RTUsIDB4MDEsIDB4ODQsIDB4MDcsIDB4RDAsCisweDFFLCAweDQwLCAweDc5LCAweDAwLCAweEVELCAweDAxLCAweDg0LCAweDg3LCAweDE4LCAweDFFLCAweDQwLCAweDdCLCAweDQwLAorMHg3MSwgMHgwMSwgMHgwNCwgMHgwNywgMHgxMCwgMHgxNiwgMHg0MCwgMHgxMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MTYsIDB4MjgsIDB4MzMsIDB4MDAsIDB4Q0QsIDB4MDEsIDB4MzQsIDB4MDMsIDB4RDAsIDB4MjQsIDB4NEMsCisweDMwLCAweDEwLCAweDBELCAweDAwLCAweDEyLCAweDAwLCAweEQwLCAweDAwLCAweDQwLCAweDAxLCAweDEwLCAweDA5LCAweEMwLAorMHgwNCwgMHg4MCwgMHhEMCwgMHgwMCwgMHg0MiwgMHgwMywgMHgwOCwgMHgxRCwgMHgwMCwgMHg0NCwgMHgwMCwgMHhEMCwgMHgwMCwKKzB4NDAsIDB4MDEsIDB4MDAsIDB4MEQsIDB4MDAsIDB4MDYsIDB4MDAsIDB4MTAsIDB4MDAsIDB4NDAsIDB4MDMsIDB4MDAsIDB4NTEsCisweDAzLCAweDI0LCAweENGLCAweDEyLCAweDM0LCAweDQwLCAweDU4LCAweDAwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgxNywgMHhBMCwgMHgxNSwgMHgwMCwgMHg1RiwgMHgwMCwgMHg3QywgMHgwMSwgMHhEMCwgMHgyNywgMHhDMCwgMHg1NCwKKzB4MDAsIDB4NUYsIDB4MDAsIDB4NzQsIDB4MDEsIDB4NzAsIDB4MDUsIDB4QzQsIDB4MTQsIDB4MDAsIDB4NEIsIDB4MDAsIDB4NkMsCisweDAxLCAweEYwLCAweDA0LCAweEMwLCAweDE3LCAweDAwLCAweDVGLCAweDAwLCAweDRDLCAweDAxLCAweEYwLCAweDA1LCAweEMwLAorMHgxNSwgMHgwMCwgMHg1RiwgMHgwMCwgMHg0NCwgMHgwMSwgMHgzMCwgMHgwNSwgMHhDMCwgMHgxMywgMHgwMCwgMHg3MSwgMHgwNywKKzB4Q0MsIDB4MTEsIDB4MTQsIDB4MTcsIDB4NDAsIDB4NUMsIDB4MjAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDEyLCAweDA4LCAweDA0LCAweDAwLCAweDFGLCAweDAwLCAweDdDLCAweDA4LCAweEYwLCAweDIxLCAweEMxLCAweDA3LCAweDAwLAorMHgzRCwgMHgwMCwgMHhGQywgMHgwMCwgMHhGMCwgMHgwMywgMHhDMCwgMHgwRiwgMHgwMCwgMHgzNywgMHgwMiwgMHhGQywgMHgwMCwKKzB4RjAsIDB4MDMsIDB4QzAsIDB4MEYsIDB4MDAsIDB4M0YsIDB4MDAsIDB4RkMsIDB4MDAsIDB4RjAsIDB4MDMsIDB4QzAsIDB4MEUsCisweDAwLCAweDNGLCAweDAwLCAweEZDLCAweDAwLCAweEYwLCAweDAzLCAweEMwLCAweDBGLCAweDQwLCAweDFGLCAweDA2LCAweDdDLAorMHgwMCwgMHhGMCwgMHhBMSwgMHhDOSwgMHg0QiwgMHgwMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwKKzB4MDgsIDB4MjEsIDB4MDAsIDB4OTMsIDB4MDAsIDB4M0MsIDB4MDIsIDB4QjAsIDB4MDksIDB4QzAsIDB4MjQsIDB4MTAsIDB4OUYsCisweDAxLCAweDRDLCAweDAyLCAweEYwLCAweDE5LCAweEMwLCAweEU3LCAweDAwLCAweDkzLCAweDAwLCAweDZDLCAweDA2LCAweEYwLAorMHg5OSwgMHhDMCwgMHgyNSwgMHgwMCwgMHg5RiwgMHgwMCwgMHg0QywgMHgwMiwgMHgzNCwgMHg1OSwgMHhDMCwgMHgyNywgMHgwMCwKKzB4OUYsIDB4MDUsIDB4N0MsIDB4MDIsIDB4RjAsIDB4MDksIDB4QzAsIDB4MjcsIDB4NDAsIDB4OUIsIDB4MDAsIDB4NkMsIDB4MDIsCisweEYwLCAweDQ5LCAweEMwLCAweDQzLCAweDIwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDIwLAorMHgyNiwgMHg0MCwgMHg5MSwgMHg4MCwgMHg3NCwgMHg0MiwgMHgxMCwgMHhBOSwgMHg0MSwgMHgyNCwgMHgwMCwgMHg4RCwgMHgwOSwKKzB4NUUsIDB4MkEsIDB4RDAsIDB4MTksIDB4NDAsIDB4NjMsIDB4NDAsIDB4OTEsIDB4MDIsIDB4NDUsIDB4MUEsIDB4RDAsIDB4NjksCisweEMyLCAweDI2LCAweDA4LCAweDlELCAweDAyLCAweDQ0LCAweDQyLCAweDEwLCAweDM5LCAweDQwLCAweDI3LCAweDAwLCAweDlELAorMHgwMiwgMHg3NCwgMHgwQSwgMHhEMCwgMHgwOSwgMHg0OCwgMHg2NywgMHgwNCwgMHg5MSwgMHg4MiwgMHg0NCwgMHg4NiwgMHhEMCwKKzB4NjksIDB4NDAsIDB4MDcsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4QTAsIDB4NjQsCisweDAwLCAweDkxLCAweDAwLCAweDc0LCAweDAyLCAweDEwLCAweDA4LCAweDQwLCAweDI0LCAweDAwLCAweDlELCAweDAwLCAweEM0LAorMHg0MiwgMHhEMCwgMHg0QiwgMHg0MCwgMHgyRiwgMHgwMCwgMHhCOSwgMHgwMywgMHhDNCwgMHgxMiwgMHhEMCwgMHgwQiwgMHg0MCwKKzB4MkMsIDB4MDAsIDB4QkQsIDB4MDAsIDB4QzQsIDB4MDYsIDB4OTIsIDB4MEIsIDB4NDQsIDB4MkYsIDB4MDAsIDB4QkQsIDB4QzAsCisweEY0LCAweDAyLCAweEQwLCAweDFCLCAweDQwLCAweDJGLCAweDQxLCAweDkxLCAweDA4LCAweDY0LCAweDIyLCAweEQwLCAweDA5LAorMHg0MCwgMHg3MywgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgyQSwgMHgyMCwgMHgwMSwKKzB4ODEsIDB4MDQsIDB4MzQsIDB4MTIsIDB4MTgsIDB4MDgsIDB4NTAsIDB4MjAsIDB4MDAsIDB4QkMsIDB4MDAsIDB4ODQsIDB4MDIsCisweEQwLCAweDBBLCAweDQwLCAweDZGLCAweDAwLCAweEI5LCAweDAwLCAweDg0LCAweDAyLCAweEQwLCAweDBBLCAweDQwLCAweDJBLAorMHgwMCwgMHhBRCwgMHgwMSwgMHg4NCwgMHgwMiwgMHg5MCwgMHgxQSwgMHg0MCwgMHgyQiwgMHgwMCwgMHhBRCwgMHg0MSwgMHhCNCwKKzB4MDYsIDB4RDAsIDB4MEEsIDB4NDAsIDB4MkIsIDB4MDAsIDB4OTEsIDB4MDAsIDB4MjQsIDB4MDIsIDB4RDAsIDB4NDgsIDB4NDAsCisweDUzLCAweEEwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFELCAweEEwLCAweDg2LCAweDAyLCAweDEzLAorMHgwMCwgMHg3QywgMHgyOCwgMHgzNCwgMHhBMSwgMHhDMCwgMHg4NCwgMHgwMiwgMHgxRiwgMHgwQSwgMHg0NCwgMHgyOCwgMHhGMCwKKzB4MDEsIDB4QzAsIDB4ODcsIDB4MDIsIDB4MUIsIDB4MEEsIDB4NEMsIDB4MjgsIDB4RjAsIDB4MDEsIDB4QzAsIDB4ODUsIDB4MDIsCisweDFGLCAweDBBLCAweDRDLCAweDI4LCAweEIzLCAweEExLCAweEMwLCAweDg3LCAweDAyLCAweDFGLCAweDBBLCAweDdDLCAweDI4LAorMHhGMCwgMHgwMSwgMHhDMCwgMHgwRiwgMHgxMCwgMHg1MywgMHgwMCwgMHg2QywgMHg1MSwgMHhGQSwgMHhBMSwgMHhDMCwgMHg3NywKKzB4QzAsIDB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MUQsIDB4ODgsIDB4MkYsIDB4MDIsIDB4QkYsIDB4MDgsCisweDdDLCAweDIyLCAweDc4LCAweDBCLCAweEMwLCAweDJGLCAweDIwLCAweDlFLCAweDAwLCAweDVELCAweDAyLCAweEYwLCAweDA5LAorMHhDMCwgMHgyNywgMHgwMCwgMHg4NywgMHgwMCwgMHg1QywgMHgwMiwgMHhGMCwgMHgwOSwgMHhDMCwgMHgyNywgMHgwMCwgMHg5RiwKKzB4MDAsIDB4N0QsIDB4MDIsIDB4NzEsIDB4MDksIDB4QzAsIDB4MjcsIDB4MDgsIDB4OUYsIDB4MjAsIDB4N0MsIDB4ODIsIDB4RjAsCisweDA5LCAweEMyLCAweDI3LCAweDAwLCAweEE3LCAweDAwLCAweERDLCAweDAyLCAweEYwLCAweDhCLCAweEMwLCAweDY3LCAweDIwLAorMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxQywgMHhBMCwgMHgyRiwgMHgwMSwgMHhCMywgMHgxNCwgMHhDQywKKzB4QjIsIDB4MzAsIDB4MEYsIDB4QzAsIDB4MkQsIDB4MDAsIDB4QkYsIDB4MDgsIDB4Q0MsIDB4MDIsIDB4MTAsIDB4MEIsIDB4QzAsCisweDJGLCAweDAyLCAweEJGLCAweDAwLCAweENDLCAweDAyLCAweDMwLCAweDBCLCAweEMwLCAweDI0LCAweDAwLCAweEIzLCAweDAwLAorMHhGQywgMHgyMiwgMHhGMCwgMHgwQiwgMHhDMCwgMHgyNCwgMHgwMCwgMHhCMywgMHgwOCwgMHhEQywgMHgwMiwgMHgzMCwgMHgwQiwKKzB4QzAsIDB4MkYsIDB4MDAsIDB4QjMsIDB4MDAsIDB4RkMsIDB4ODIsIDB4MzAsIDB4MEIsIDB4QzAsIDB4NjcsIDB4MDAsIDB4MEUsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAwLCAweDA3LCAweDBELCAweDExLCAweDAwLCAweDQ1LCAweDMwLAorMHgxMCwgMHgwMSwgMHg0MywgMHgwNCwgMHgwNCwgMHgxRCwgMHgwMCwgMHgwNCwgMHg1MCwgMHgxMCwgMHgwMSwgMHg0MCwgMHgwMywKKzB4MDEsIDB4MUQsIDB4MTAsIDB4NEMsIDB4NDAsIDB4MTQsIDB4MDEsIDB4NTAsIDB4MDQsIDB4MDUsIDB4MDEsIDB4MDQsIDB4NzQsCisweDEwLCAweEQwLCAweDAwLCAweDQxLCAweDAwLCAweDI0LCAweDAxLCAweDQwLCAweDVDLCAweDUwLCAweDEwLCAweDAxLCAweDQwLAorMHgwNywgMHgwMCwgMHgxMSwgMHgwMCwgMHg3NCwgMHgwMCwgMHgxMCwgMHg4MSwgMHg0MCwgMHg3MywgMHg2MCwgMHgwQywgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4MDAsIDB4MjEsIDB4MDMsIDB4OTEsIDB4MjAsIDB4MDQsIDB4MTIsIDB4OTAsCisweDQ5LCAweDQwLCAweDIxLCAweDgwLCAweDhELCAweDAwLCAweDA0LCAweDEyLCAweDEwLCAweDBDLCAweDQwLCAweDIzLCAweDAxLAorMHg4RCwgMHgwNCwgMHg2NSwgMHgwMiwgMHgxMCwgMHgwOSwgMHg0MCwgMHgyNCwgMHg0MSwgMHg4MSwgMHgxNCwgMHgzNCwgMHgxMiwKKzB4RDgsIDB4NDgsIDB4NTAsIDB4MjAsIDB4MDAsIDB4ODEsIDB4MDAsIDB4MTQsIDB4MTIsIDB4MTAsIDB4MDgsIDB4NDAsIDB4MjMsCisweDAwLCAweDg5LCAweDAwLCAweDM0LCAweDAyLCAweDEwLCAweDA4LCAweDQ4LCAweDRCLCAweDAwLCAweDA0LCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgyOCwgMHgyNSwgMHg0MSwgMHg5MSwgMHgwMCwgMHg0NCwgMHgwMywgMHg5MCwgMHgyOSwKKzB4NDAsIDB4MjQsIDB4MDIsIDB4OEQsIDB4MDAsIDB4NDQsIDB4MDIsIDB4MTAsIDB4MDksIDB4NDAsIDB4MjcsIDB4MDAsIDB4OEQsCisweDAwLCAweDQ0LCAweDAyLCAweDEwLCAweDA5LCAweDQwLCAweDI0LCAweDAwLCAweDkxLCAweDAwLCAweDc0LCAweDAyLCAweEQwLAorMHgwOSwgMHg0MCwgMHgyNCwgMHgwMCwgMHhEMSwgMHgwMCwgMHg1NCwgMHgwMiwgMHgxMCwgMHgwOSwgMHg0MCwgMHgzNywgMHgyMCwKKzB4OTksIDB4MDAsIDB4NzQsIDB4MEEsIDB4MTIsIDB4ODksIDB4NDAsIDB4NjMsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDA1LCAweDAwLCAweDI1LCAweDAwLCAweDgzLCAweDg5LCAweDBDLCAweDAyLCAweEI0LCAweDE4LCAweEMwLAorMHg2NSwgMHgyMCwgMHg5RiwgMHgwMCwgMHg0RCwgMHgwMiwgMHgzNCwgMHgwOSwgMHhDMCwgMHgyNywgMHg4MCwgMHg5RiwgMHgwMCwKKzB4NkMsIDB4MDIsIDB4MzAsIDB4MDgsIDB4QzAsIDB4MjQsIDB4MDAsIDB4OTMsIDB4MDAsIDB4N0MsIDB4MDIsIDB4RjAsIDB4MDksCisweEMwLCAweDI0LCAweDQwLCAweDkzLCAweDAwLCAweDVDLCAweDAyLCAweDM0LCAweDA5LCAweEMwLCAweDI3LCAweDAwLCAweDk5LAorMHgxMiwgMHg3QywgMHgwMiwgMHgzNCwgMHgxOSwgMHhDMCwgMHgxNywgMHgyMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MTYsIDB4MDgsIDB4MjUsIDB4MDAsIDB4OUYsIDB4NDEsIDB4N0MsIDB4MDIsIDB4NzQsIDB4MjksIDB4QzAsIDB4MjcsCisweDAwLCAweDlGLCAweDUwLCAweDdDLCAweDQyLCAweEYwLCAweDA5LCAweEMwLCAweDI3LCAweDAwLCAweDlGLCAweDAwLCAweDdDLAorMHgwMiwgMHhGMCwgMHgwOSwgMHhDMCwgMHgyNywgMHgwMCwgMHg5RiwgMHgwMCwgMHg3QywgMHgwMiwgMHhGMCwgMHgwOSwgMHhDMCwKKzB4MjcsIDB4MDAsIDB4OUYsIDB4MDAsIDB4NUMsIDB4MDIsIDB4RjAsIDB4MDksIDB4QzAsIDB4MjcsIDB4NDAsIDB4OTcsIDB4MTUsCisweDdFLCAweDUyLCAweEYwLCAweDA5LCAweEUwLCAweDRCLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgxNCwgMHgwOCwgMHg0MSwgMHg0MCwgMHgxMywgMHgwMCwgMHg3QywgMHgxMCwgMHhGMCwgMHg0MSwgMHhDMCwgMHgwNywgMHgwMCwKKzB4MUYsIDB4MDgsIDB4NEMsIDB4MDAsIDB4MzQsIDB4MDEsIDB4QzAsIDB4MDcsIDB4MDAsIDB4MTMsIDB4MDAsIDB4N0MsIDB4MDAsCisweEYwLCAweDExLCAweEYwLCAweDA0LCAweDAwLCAweDFGLCAweDIwLCAweDRDLCAweDA0LCAweEQwLCAweDAxLCAweEMwLCAweDA2LAorMHg0MCwgMHgxMywgMHg0MCwgMHg0QywgMHgwMCwgMHhGMCwgMHgwMSwgMHhDMCwgMHgwNywgMHgwMCwgMHgxMywgMHgwMiwgMHgwQywKKzB4MDgsIDB4MTQsIDB4MDEsIDB4QzQsIDB4NDAsIDB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsCisweEEwLCAweDVDLCAweDAwLCAweDUxLCAweDAwLCAweEY0LCAweDA5LCAweEQwLCAweDI3LCAweEMwLCAweDE1LCAweDAwLCAweDdELAorMHgwMCwgMHhDNiwgMHgwNSwgMHg1MCwgMHgwNSwgMHg0MCwgMHg1RiwgMHgwNCwgMHg3MywgMHgwMiwgMHhCNCwgMHgyOSwgMHhEMSwKKzB4MDcsIDB4QzIsIDB4MTIsIDB4MDAsIDB4N0QsIDB4NDUsIDB4QzQsIDB4MTUsIDB4RDAsIDB4MDcsIDB4QzAsIDB4MTQsIDB4MDAsCisweDcxLCAweDAyLCAweENDLCAweDAxLCAweEQwLCAweDE1LCAweDQwLCAweDlCLCAweDA4LCAweDcxLCAweDAyLCAweEQ0LCAweDBELAorMHg1MCwgMHhGNywgMHg0MCwgMHg1MCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHhBMCwKKzB4MzIsIDB4MDAsIDB4QzEsIDB4MDAsIDB4MzQsIDB4MDMsIDB4RDAsIDB4MEMsIDB4NDAsIDB4MzEsIDB4MjAsIDB4Q0QsIDB4MDAsCisweDY0LCAweDBGLCAweDUwLCAweDA4LCAweDQ0LCAweDczLCAweDAwLCAweEMxLCAweDA0LCAweDI0LCAweDAzLCAweEQwLCAweDA0LAorMHg0MCwgMHgzMiwgMHgxMCwgMHhDRCwgMHgwMSwgMHgwNSwgMHgwMywgMHg1MCwgMHgwRCwgMHg0MCwgMHgzNCwgMHgwMCwgMHhDMSwKKzB4MDYsIDB4NjUsIDB4MDcsIDB4RDAsIDB4OTgsIDB4NDAsIDB4NjMsIDB4MDMsIDB4NDEsIDB4MDgsIDB4MDQsIDB4MjMsIDB4MTAsCisweDBDLCAweDQwLCAweDUyLCAweDAwLCAweDBBLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDgwLCAweDA4LAorMHgwNCwgMHhFMSwgMHgwMCwgMHhCNCwgMHg0MywgMHg5MCwgMHgwRSwgMHg0MCwgMHgzOSwgMHgwMCwgMHg3RCwgMHgwMCwgMHhBNSwKKzB4MEIsIDB4NTAsIDB4MEUsIDB4NDAsIDB4N0IsIDB4MDAsIDB4RTEsIDB4MDAsIDB4QjQsIDB4MDIsIDB4RDAsIDB4MEUsIDB4NDEsCisweDM4LCAweDAxLCAweEVELCAweDAxLCAweDg0LCAweDAzLCAweEQwLCAweDBFLCAweDQwLCAweDM4LCAweDBBLCAweEUxLCAweDgzLAorMHhBNCwgMHg0MywgMHhEMCwgMHgwRSwgMHg0MCwgMHgxRiwgMHgwMCwgMHg3MSwgMHgwMSwgMHgxNCwgMHgwMywgMHgxMCwgMHgxMiwKKzB4NTgsIDB4MDYsIDB4MjAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MTgsIDB4NjAsIDB4MDAsCisweEUzLCAweDAxLCAweEJDLCAweDA3LCAweEQwLCAweDFFLCAweEMwLCAweDc5LCAweDAwLCAweEVGLCAweDAxLCAweEE0LCAweDA2LAorMHg3MCwgMHgxRSwgMHhDMCwgMHg2QiwgMHg0MCwgMHhFMywgMHgwMSwgMHhCMCwgMHgwNSwgMHhGMCwgMHgxRSwgMHg0MCwgMHg3QSwKKzB4MDAsIDB4RUYsIDB4MDEsIDB4OEMsIDB4MDcsIDB4NzAsIDB4MUUsIDB4QzAsIDB4NzgsIDB4MDUsIDB4RTMsIDB4MDEsIDB4QUMsCisweDA3LCAweEYxLCAweDFFLCAweEMwLCAweDZCLCAweDAwLCAweDYzLCAweDgxLCAweDg0LCAweDA3LCAweDMwLCAweDE4LCAweEMwLAorMHg0NiwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHhCOCwgMHgwNSwgMHgwMCwgMHhERiwKKzB4MDAsIDB4N0MsIDB4MDMsIDB4RjAsIDB4MDEsIDB4QzAsIDB4MzUsIDB4MTAsIDB4MEYsIDB4MDAsIDB4NUMsIDB4MDIsIDB4QjAsCisweDBELCAweEMwLCAweDA3LCAweDAwLCAweDE3LCAweDAwLCAweDdDLCAweDgwLCAweEYwLCAweDBDLCAweEMwLCAweDM3LCAweDA0LAorMHg1RiwgMHgwMCwgMHg3QywgMHgwMCwgMHhGMCwgMHgwMSwgMHhEMCwgMHhCNSwgMHgwMCwgMHg5RiwgMHgwMCwgMHg1QywgMHgwMSwKKzB4RjAsIDB4MEQsIDB4QzAsIDB4MzMsIDB4MjAsIDB4NEYsIDB4MDAsIDB4N0MsIDB4MDMsIDB4RjAsIDB4MDksIDB4QzAsIDB4NDEsCisweDIwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA2LCAweDI4LCAweDRELCAweDAwLCAweEU3LCAweDIxLAorMHhDQywgMHgwNywgMHhGOCwgMHg4NywgMHhDMCwgMHg3QywgMHgwMiwgMHhCRiwgMHgwMSwgMHhDQywgMHgwNywgMHgzMCwgMHgxRiwKKzB4QzAsIDB4N0MsIDB4MDAsIDB4NzMsIDB4MDEsIDB4RUMsIDB4MDUsIDB4MzIsIDB4MUYsIDB4QzAsIDB4N0YsIDB4MDQsIDB4RjMsCisweDAxLCAweEZDLCAweDA0LCAweEIwLCAweDFGLCAweEMwLCAweDdGLCAweDEwLCAweEIzLCAweDAxLCAweENDLCAweDA3LCAweEYwLAorMHgxRSwgMHhDMCwgMHgzQywgMHgwMCwgMHhGMywgMHgwNSwgMHhDQywgMHgwNiwgMHhGMCwgMHgxMywgMHg4NCwgMHgwQiwgMHgwMCwKKzB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTUsIDB4MDAsIDB4OEQsIDB4MTAsIDB4RTEsIDB4MDgsIDB4ODQsCisweDIxLCAweDc4LCAweDBFLCAweDQ0LCAweDM4LCAweDAwLCAweDdELCAweDA2LCAweEM1LCAweDAzLCAweDEwLCAweDBFLCAweDQwLAorMHgyOCwgMHgwMCwgMHg3MSwgMHg0MCwgMHg4NCwgMHhFMCwgMHgxMCwgMHgwRSwgMHg0MCwgMHgzQiwgMHgwMCwgMHhBMSwgMHgxMCwKKzB4QjQsIDB4MDEsIDB4MTAsIDB4MEUsIDB4NDAsIDB4M0IsIDB4MDIsIDB4QkIsIDB4MTgsIDB4OEMsIDB4MEEsIDB4RDAsIDB4OEUsCisweDQwLCAweDE5LCAweDAyLCAweEExLCAweDA2LCAweEFDLCAweDAzLCAweEQwLCAweDIwLCAweDQwLCAweDU3LCAweDYwLCAweDA0LAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOSwgMHgwMCwgMHhFNSwgMHgwMCwgMHg4NSwgMHgwMSwKKzB4NTAsIDB4ODcsIDB4NDAsIDB4MzgsIDB4OEMsIDB4QUQsIDB4MDAsIDB4ODYsIDB4MDEsIDB4OTAsIDB4MEYsIDB4NDAsIDB4M0EsCisweDQwLCAweEUxLCAweDAwLCAweEM0LCAweDAxLCAweDEwLCAweDBFLCAweDQwLCAweDNCLCAweDAwLCAweEUxLCAweDAwLCAweEY0LAorMHgwQSwgMHgxMCwgMHgwRSwgMHg0MCwgMHgzRiwgMHgwMCwgMHg2MSwgMHgwMCwgMHg4NCwgMHgwMywgMHhEMCwgMHgwRSwgMHg0MCwKKzB4MjksIDB4NDIsIDB4NjEsIDB4MEMsIDB4OTQsIDB4NDMsIDB4RDAsIDB4MDIsIDB4NDAsIDB4MjMsIDB4MDAsIDB4MDQsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweDI4LCAweDAxLCAweDAwLCAweEMxLCAweDAwLCAweDA0LCAweDAxLCAweDUwLAorMHgzMSwgMHg0MCwgMHg3MCwgMHgwMCwgMHgxRCwgMHg0MSwgMHgwMiwgMHg0NSwgMHg5MCwgMHgzQywgMHg1MCwgMHg4MiwgMHgwNCwKKzB4MDEsIDB4MTAsIDB4MDQsIDB4MDgsIDB4MTAsIDB4MkMsIDB4NDIsIDB4NzcsIDB4MDEsIDB4MDEsIDB4MDUsIDB4MzAsIDB4MDQsCisweDEwLCAweEQwLCAweDQwLCAweEIzLCAweDA0LCAweDA5LCAweDA1LCAweDA2LCAweDM0LCAweEQwLCAweDFDLCAweDQwLCAweDkxLAorMHgwMCwgMHg4MSwgMHgxMywgMHgzNCwgMHgwRSwgMHhEMCwgMHgwMCwgMHg0MCwgMHgxQiwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MTUsIDB4ODAsIDB4MDUsIDB4MDAsIDB4RDcsIDB4MDAsIDB4NEMsIDB4MDMsIDB4NzAsIDB4RTksCisweEMwLCAweDc0LCAweDAwLCAweERGLCAweDA1LCAweDRDLCAweDA5LCAweEIwLCAweDBELCAweEMwLCAweDE2LCAweDAwLCAweDkzLAorMHgwMSwgMHg0QywgMHgwNywgMHgzNCwgMHg3QywgMHg0MCwgMHhCRiwgMHgwMCwgMHgxMywgMHgwMywgMHgzQywgMHgwMywgMHgxMCwKKzB4MjEsIDB4QzAsIDB4M0IsIDB4MDAsIDB4NTMsIDB4MDMsIDB4NEMsIDB4MDgsIDB4RjAsIDB4M0QsIDB4QzAsIDB4QjUsIDB4MDIsCisweDQzLCAweDExLCAweDUwLCAweDBELCAweEYwLCAweDA5LCAweDQwLCAweDc3LCAweDIwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwNSwgMHgwMCwgMHg0NywgMHgwMCwgMHg5RiwgMHgwMSwgMHg3QywgMHg4MywgMHg3MCwgMHgwOSwgMHhEMiwKKzB4MjcsIDB4MDAsIDB4REYsIDB4MDQsIDB4N0MsIDB4MjEsIDB4NzAsIDB4OEQsIDB4QzAsIDB4QjUsIDB4MDIsIDB4REYsIDB4MDgsCisweDdDLCAweDhCLCAweEYyLCAweDBELCAweEMwLCAweDM3LCAweDQyLCAweDlGLCAweDAwLCAweDdDLCAweDIzLCAweDcwLCAweDI5LAorMHhDMCwgMHg3NywgMHgwMCwgMHg1NywgMHgwMiwgMHg1QywgMHgwMiwgMHhGMCwgMHhDRCwgMHhDMCwgMHhGNywgMHg0MCwgMHg1RiwKKzB4NDAsIDB4MkMsIDB4MEIsIDB4RjIsIDB4MDEsIDB4QzAsIDB4MDcsIDB4MDAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDgwLCAweDAwLCAweDBCLCAweDQwLCAweEUzLCAweDAwLCAweEVDLCAweDAzLCAweEYwLCAweDhGLCAweEMwLCAweDNDLAorMHgwMCwgMHhGQiwgMHgwMCwgMHhDQywgMHgwMiwgMHgzMCwgMHgwRiwgMHhDMSwgMHgwRiwgMHgwMCwgMHhCRiwgMHgwOSwgMHhGQywKKzB4NDAsIDB4RjAsIDB4MEYsIDB4QzEsIDB4M0MsIDB4MDAsIDB4MzMsIDB4MDUsIDB4RkMsIDB4MDMsIDB4QjAsIDB4NDcsIDB4QzAsCisweDNELCAweDAwLCAweDczLCAweDAwLCAweENDLCAweDIwLCAweDMwLCAweDlGLCAweEMwLCAweEZGLCAweDAwLCAweEIzLCAweDAwLAorMHhDQywgMHg0MywgMHgzMiwgMHgwQiwgMHhDNCwgMHgxNywgMHgyMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4ODEsIDB4MjAsIDB4QzYsIDB4MDAsIDB4OTEsIDB4MDAsIDB4NDQsIDB4MEYsIDB4RjAsIDB4MTEsIDB4NjAsIDB4NjEsIDB4MDIsCisweDkxLCAweDAyLCAweDQ0LCAweDAyLCAweDEwLCAweDBELCAweDQwLCAweDg3LCAweDA0LCAweDFELCAweDAwLCAweDVDLCAweDFFLAorMHhEMSwgMHgxRCwgMHg0MCwgMHgzNCwgMHgwOCwgMHgxMSwgMHgxMiwgMHg3NCwgMHgwMCwgMHgxMCwgMHg3MSwgMHg0MCwgMHgzNCwKKzB4MDAsIDB4MTEsIDB4MDIsIDB4NEMsIDB4MEMsIDB4MTAsIDB4MEQsIDB4NDAsIDB4MzMsIDB4MDAsIDB4MTEsIDB4MDEsIDB4NDQsCisweDJGLCAweDE1LCAweDE5LCAweDQwLCAweDM3LCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLAorMHhBMCwgMHg0NiwgMHgwMCwgMHhEMSwgMHgwNCwgMHg2NCwgMHgwNCwgMHhEMCwgMHgwMSwgMHg0MCwgMHgzNywgMHgyMCwgMHgxOSwKKzB4MDAsIDB4MDQsIDB4MTAsIDB4MTAsIDB4MUQsIDB4NDgsIDB4MTcsIDB4MTAsIDB4MUQsIDB4MDAsIDB4NzQsIDB4MDUsIDB4NTAsCisweDFELCAweDQ0LCAweDM0LCAweDQwLCAweDUxLCAweDAwLCAweDc0LCAweDAwLCAweDEwLCAweDAwLCAweDQwLCAweDM2LCAweDAwLAorMHg4MSwgMHgwMCwgMHgwNCwgMHgwMSwgMHgxMCwgMHgwRCwgMHg0MCwgMHgzNywgMHgwMCwgMHhEOSwgMHgwMSwgMHg2NCwgMHhDMywKKzB4MTAsIDB4MTksIDB4NDAsIDB4MDcsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MjAsCisweDAwLCAweDE4LCAweDgxLCAweDAwLCAweDA0LCAweDAwLCAweEQ4LCAweDA4LCAweDQwLCAweDI2LCAweDgwLCAweDQxLCAweDAwLAorMHgwNSwgMHgwNCwgMHgxOCwgMHgwQywgMHg0MCwgMHgyMywgMHgwMCwgMHg0RCwgMHgwMCwgMHgzNCwgMHgwMywgMHhEMCwgMHgxRCwKKzB4NDAsIDB4MzAsIDB4MDAsIDB4ODEsIDB4MDAsIDB4NzQsIDB4MDEsIDB4MTgsIDB4MDgsIDB4NTAsIDB4MzYsIDB4MDAsIDB4ODEsCisweDAwLCAweDA0LCAweDAyLCAweDE0LCAweDBDLCAweDQwLCAweDM3LCAweDAwLCAweDg5LCAweDAwLCAweDA0LCAweDAzLCAweDEwLAorMHgwMCwgMHg0NCwgMHg0MywgMHhBMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5OCwgMHgwNiwKKzB4MDAsIDB4RDMsIDB4MDAsIDB4NkMsIDB4MDAsIDB4RjAsIDB4MDUsIDB4NTAsIDB4MzcsIDB4MDAsIDB4MUIsIDB4MDAsIDB4NEMsCisweDAwLCAweDIwLCAweDBELCAweEMwLCAweDEzLCAweDAwLCAweDlGLCAweDAwLCAweDdDLCAweDAwLCAweEYwLCAweDBELCAweDUwLAorMHgzOCwgMHgwMCwgMHg1MywgMHgwMCwgMHg3QywgMHgwMiwgMHgzMCwgMHgwNSwgMHhDMCwgMHgzRiwgMHgwMCwgMHg1MywgMHgwMCwKKzB4NEMsIDB4MDEsIDB4MzAsIDB4MEQsIDB4QzAsIDB4MzcsIDB4MTAsIDB4OUIsIDB4MjAsIDB4NkMsIDB4ODEsIDB4MzAsIDB4QTksCisweEMwLCAweDA3LCAweEMwLCAweDBBLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweEI4LCAweDBGLCAweDAwLAorMHhCRiwgMHgwMCwgMHhGQywgMHgwMCwgMHg3MCwgMHgwMiwgMHhDMCwgMHgyRCwgMHgwMCwgMHgzRiwgMHgwMCwgMHhGQywgMHgwMCwKKzB4RjAsIDB4MEUsIDB4QzAsIDB4MEYsIDB4MDAsIDB4M0YsIDB4NDAsIDB4OUMsIDB4MDIsIDB4RjAsIDB4MEIsIDB4QzAsIDB4M0YsCisweDAwLCAweDNGLCAweDAwLCAweEJDLCAweDAwLCAweDc4LCAweDAzLCAweEMwLCAweDM5LCAweDAwLCAweDNFLCAweDAwLCAweERDLAorMHg4MCwgMHhGMCwgMHgwRiwgMHhDMCwgMHgzQiwgMHgwMCwgMHhBNywgMHgwMCwgMHhGRSwgMHgwMywgMHhGMCwgMHg0QiwgMHhFMCwKKzB4MTcsIDB4MjIsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4ODAsIDB4REYsIDB4MDAsIDB4QjMsCisweDA4LCAweEZDLCAweDA2LCAweDcwLCAweDlGLCAweEM4LCAweDdFLCAweDEyLCAweEYzLCAweDA5LCAweEVDLCAweDI3LCAweDExLAorMHgxRiwgMHhDMCwgMHg3QywgMHgwMCwgMHhFMywgMHgwOSwgMHhEQywgMHgyNywgMHhGMCwgMHgxRiwgMHhDMCwgMHg3QywgMHg0MCwKKzB4RjMsIDB4MDksIDB4QkMsIDB4MEYsIDB4RjgsIDB4MUYsIDB4QzAsIDB4N0YsIDB4MDAsIDB4RkYsIDB4MDksIDB4OUMsIDB4MDcsCisweEYwLCAweDFGLCAweEMwLCAweDVDLCAweDAwLCAweDMzLCAweDAxLCAweENDLCAweDA2LCAweEYwLCAweDFCLCAweEM4LCAweDBELAorMHgwOCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgxOCwgMHgyNywgMHgwMSwgMHg5MSwgMHgyMCwKKzB4NDQsIDB4NTMsIDB4MTAsIDB4MDEsIDB4NDAsIDB4MDYsIDB4MDAsIDB4MTUsIDB4MDAsIDB4NTAsIDB4MDAsIDB4NTAsIDB4MTEsCisweDQwLCAweDQ0LCAweDA4LCAweDE1LCAweDAwLCAweDA0LCAweDEwLCAweEQyLCAweDAxLCAweDQxLCAweDQ1LCAweDAwLCAweDExLAorMHg4MCwgMHg3NCwgMHgwMCwgMHhEMCwgMHgxMSwgMHg0MiwgMHgwMywgMHgyNSwgMHgxMSwgMHgwNCwgMHg2NCwgMHgwNCwgMHhEMSwKKzB4MUYsIDB4NDgsIDB4NzQsIDB4NDAsIDB4MTUsIDB4ODEsIDB4NTQsIDB4MDIsIDB4RDIsIDB4MDksIDB4NDIsIDB4MEYsIDB4NjAsCisweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDExLCAweEEwLCAweDM3LCAweDAwLCAweEMxLCAweDQ0LCAweDE0LAorMHgxMywgMHg1MCwgMHg0RCwgMHg0OCwgMHgzNywgMHgxMSwgMHhEMSwgMHg4NCwgMHg0NiwgMHgxMywgMHgxMCwgMHgwQywgMHg2MiwKKzB4MzAsIDB4MjAsIDB4QzUsIDB4MDQsIDB4MTQsIDB4MDMsIDB4RDAsIDB4NEQsIDB4NDAsIDB4MzAsIDB4MDAsIDB4QzksIDB4NDQsCisweDE0LCAweDEzLCAweEQwLCAweDBDLCAweDQwLCAweDM2LCAweDEwLCAweEQ1LCAweDAwLCAweDE0LCAweDAzLCAweDU4LCAweDBDLAorMHg0MCwgMHgyMSwgMHgwMCwgMHgxNSwgMHgyMCwgMHgxNCwgMHgwMCwgMHhEOCwgMHgwMCwgMHg0MCwgMHg0RiwgMHg4MCwgMHgwRSwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4ODAsIDB4MjUsIDB4MTAsIDB4RDEsIDB4MjEsIDB4NjQsIDB4MDcsCisweDEwLCAweDAxLCAweDQwLCAweDA3LCAweDAwLCAweDE1LCAweDAwLCAweDU0LCAweDAwLCAweDUwLCAweDAxLCAweDcwLCAweDA0LAorMHgwMCwgMHgxNSwgMHgwMCwgMHg1NCwgMHgwMCwgMHhEMCwgMHgwMSwgMHg0MCwgMHgwNSwgMHgwMCwgMHgxOSwgMHgwMCwgMHg3NCwKKzB4MDAsIDB4RDAsIDB4MDEsIDB4NDIsIDB4MDcsIDB4MDAsIDB4MTEsIDB4MDAsIDB4NjQsIDB4MDAsIDB4RDAsIDB4MEQsIDB4MDAsCisweDI1LCAweDAwLCAweDE1LCAweDAxLCAweDU0LCAweDQ0LCAweEQwLCAweDExLCAweDQxLCAweDBGLCAweDAwLCAweDA2LCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHhBOCwgMHgxMywgMHgwMywgMHhEMywgMHgzMSwgMHg3QywgMHgxNywgMHg3MCwKKzB4MEMsIDB4QzAsIDB4MzcsIDB4MDAsIDB4RDMsIDB4MDAsIDB4MEMsIDB4MDMsIDB4MzAsIDB4MEQsIDB4QzAsIDB4MzQsIDB4MzAsCisweEQzLCAweDAwLCAweDVDLCAweDAzLCAweEYwLCAweDBELCAweDAyLCAweDM0LCAweDAwLCAweERCLCAweDAwLCAweDdDLCAweDAzLAorMHhEMCwgMHgwRCwgMHg0MCwgMHgzNywgMHgyMCwgMHhDNywgMHg0MCwgMHg1QywgMHgwMywgMHhGMCwgMHgwRCwgMHhEMCwgMHgxNSwKKzB4MDAsIDB4MDYsIDB4MDEsIDB4NUMsIDB4MEUsIDB4RjAsIDB4MzksIDB4QzAsIDB4MDksIDB4MjAsIDB4MEUsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDA3LCAweDgwLCAweDJELCAweDQwLCAweERGLCAweDAwLCAweERDLCAweDAzLCAweEYwLCAweDAzLAorMHhDMCwgMHgwQywgMHgwMCwgMHgzRiwgMHg4MCwgMHhGQywgMHgwMCwgMHhGMCwgMHgwMywgMHhDMCwgMHgwRiwgMHg0MCwgMHgzQiwKKzB4MDAsIDB4RUMsIDB4MDAsIDB4RjAsIDB4MDMsIDB4MDgsIDB4MEYsIDB4MDAsIDB4MzcsIDB4MDAsIDB4RkMsIDB4MDAsIDB4RjAsCisweDAzLCAweEMwLCAweDBGLCAweDAwLCAweDNGLCAweDAwLCAweENDLCAweDAwLCAweEQwLCAweDBGLCAweEMwLCAweDNFLCAweDgxLAorMHhCQiwgMHgwMCwgMHhGQywgMHgwMCwgMHhGMCwgMHgwMywgMHhDMCwgMHgxRiwgMHgwMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDIsIDB4MDgsIDB4QjUsIDB4MDAsIDB4REYsIDB4MDAsIDB4NEQsIDB4MDMsIDB4NzAsIDB4OEQsIDB4QzAsCisweDM3LCAweDAxLCAweEQzLCAweDAwLCAweDdDLCAweDAzLCAweDMwLCAweDhELCAweEMwLCAweDM3LCAweDAxLCAweEQ3LCAweDAwLAorMHg0QywgMHgwMywgMHgzMCwgMHgwRCwgMHhDMCwgMHgzNywgMHgwMSwgMHhERiwgMHgwMCwgMHg3QywgMHgwMywgMHhCMCwgMHgwRCwKKzB4QzIsIDB4MzQsIDB4MDAsIDB4RDcsIDB4MDAsIDB4NkMsIDB4MTMsIDB4QjAsIDB4MEMsIDB4QzAsIDB4MjQsIDB4MDEsIDB4OUYsCisweDAwLCAweDdDLCAweDA4LCAweEYwLCAweDIxLCAweDQ4LCAweDJCLCAweDIwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgxMywgMHhBMCwgMHgyNCwgMHgwMCwgMHhERCwgMHgwMCwgMHg0NCwgMHgwMywgMHgxMCwgMHgxMSwgMHg0MCwgMHgwMCwKKzB4MDQsIDB4MEIsIDB4MDAsIDB4NUMsIDB4MDAsIDB4QjAsIDB4MDAsIDB4NDAsIDB4ODMsIDB4MDAsIDB4MUIsIDB4MDAsIDB4NkUsCisweDAwLCAweDEwLCAweDAwLCAweDQwLCAweEMzLCAweDAwLCAweDFELCAweDAwLCAweDVDLCAweDAwLCAweDEwLCAweDAxLCAweEU4LAorMHgwMywgMHgwMCwgMHgxMSwgMHg4MCwgMHg0NCwgMHg0MCwgMHgxMCwgMHgwRCwgMHhDMCwgMHgyMCwgMHgwMSwgMHg5RCwgMHgwMCwKKzB4NUMsIDB4MDAsIDB4RDAsIDB4MTEsIDB4NDEsIDB4NEYsIDB4MDgsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAzLCAweDIwLCAweDIyLCAweDAwLCAweDlELCAweDAwLCAweDQ0LCAweDAzLCAweDUwLCAweDBDLCAweDQwLCAweEIxLCAweDAwLAorMHhDNSwgMHgwMCwgMHgxNCwgMHgwMywgMHgxMCwgMHgxQywgMHg0MCwgMHgzMywgMHgwMCwgMHhEMSwgMHgwMCwgMHgwNCwgMHgwMywKKzB4MTAsIDB4MEMsIDB4NDgsIDB4NzMsIDB4MDAsIDB4QzksIDB4MDAsIDB4MzQsIDB4ODMsIDB4OTAsIDB4MEMsIDB4NDAsIDB4MzAsCisweDAwLCAweEM1LCAweDAwLCAweDI0LCAweDA3LCAweDgwLCAweDBDLCAweDQwLCAweEUzLCAweDAwLCAweDRELCAweDA1LCAweDM2LAorMHgxMiwgMHhEMCwgMHg0OCwgMHg0MCwgMHg0RiwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwKKzB4MDgsIDB4NkEsIDB4MDAsIDB4RUQsIDB4MDksIDB4ODYsIDB4MDcsIDB4MTAsIDB4MTMsIDB4NjAsIDB4NEMsIDB4MDAsIDB4MkQsCisweDAxLCAweEQ0LCAweDA0LCAweDkwLCAweDEyLCAweDQwLCAweDRGLCAweDAwLCAweDM4LCAweDAxLCAweEE0LCAweDA0LCAweDFDLAorMHgxMiwgMHg0MCwgMHg0QiwgMHgwNCwgMHgyRCwgMHgwMSwgMHhENCwgMHgwNCwgMHgwMCwgMHgxMywgMHg0MCwgMHg0OSwgMHgwMCwKKzB4MjEsIDB4MDEsIDB4QzQsIDB4MDQsIDB4NTAsIDB4MUMsIDB4NDAsIDB4NzksIDB4MDAsIDB4RUQsIDB4MTEsIDB4OTQsIDB4MDcsCisweEQwLCAweDlBLCAweDQwLCAweDM3LCAweDIwLCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDEwLAorMHgzMiwgMHgwMiwgMHgwRCwgMHgwOCwgMHg0QywgMHgwMywgMHg1MCwgMHgwQywgMHg0MCwgMHgzMSwgMHgxMiwgMHhENywgMHgwMCwKKzB4MUMsIDB4MDMsIDB4MzAsIDB4MEMsIDB4NDAsIDB4MzMsIDB4MDAsIDB4QzcsIDB4MDAsIDB4MDQsIDB4MDMsIDB4MzAsIDB4MEMsCisweEMwLCAweDMzLCAweDAwLCAweENGLCAweDA4LCAweDM0LCAweDEzLCAweEIwLCAweDBELCAweDQwLCAweDMwLCAweDAyLCAweEQ3LAorMHgwMCwgMHgyQywgMHgwMywgMHhCMCwgMHgwQywgMHhEMCwgMHgyMywgMHgwMiwgMHhDRiwgMHgyMCwgMHgzQywgMHg0MiwgMHhGMCwKKzB4OEMsIDB4QzAsIDB4NEIsIDB4NDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4QTgsIDB4MkQsCisweDAwLCAweDdGLCAweDA4LCAweEY4LCAweDAzLCAweEUwLCAweDAyLCAweDgwLCAweDA5LCAweDAwLCAweDNCLCAweDAwLCAweEE4LAorMHgyMCwgMHhGMiwgMHg4MSwgMHhDMCwgMHgwQiwgMHgwMCwgMHgxRiwgMHgwMCwgMHg3QywgMHgwMCwgMHhGMCwgMHgwMywgMHhDOCwKKzB4MDcsIDB4MDAsIDB4M0YsIDB4MjgsIDB4N0MsIDB4MDAsIDB4NzAsIDB4MDMsIDB4QzAsIDB4MEYsIDB4MDAsIDB4M0YsIDB4NDAsCisweDU0LCAweDI0LCAweDIwLCAweDlELCAweEMwLCAweDJDLCAweDA4LCAweEZGLCAweDAwLCAweEZDLCAweDIzLCAweEYwLCAweDhGLAorMHhDMiwgMHgwQiwgMHgwMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHhBOCwgMHgyNywgMHgwMCwKKzB4REYsIDB4MDAsIDB4NEMsIDB4MDMsIDB4RjAsIDB4MUQsIDB4QzAsIDB4MzUsIDB4MDAsIDB4REUsIDB4MDAsIDB4N0MsIDB4MDcsCisweDMwLCAweDFELCAweEMwLCAweDM0LCAweDAwLCAweERGLCAweDAwLCAweDNDLCAweDAzLCAweDMwLCAweDFELCAweEMwLCAweDM0LAorMHgwMCwgMHhERiwgMHgwMCwgMHg3QywgMHgwMywgMHhGMCwgMHgwRCwgMHhDMCwgMHgzNywgMHgwMCwgMHhERiwgMHgwMCwgMHgzQywKKzB4MDMsIDB4QjAsIDB4MEQsIDB4QzQsIDB4MjQsIDB4MDAsIDB4NUYsIDB4MDAsIDB4N0MsIDB4ODMsIDB4MzAsIDB4MEQsIDB4QzIsCisweDQwLCAweDAwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDg4LCAweDI5LCAweDAwLCAweEZELAorMHgwMCwgMHg4NCwgMHgwMywgMHhEMCwgMHgwMywgMHg0MCwgMHgwOCwgMHgwMCwgMHgyRCwgMHgwMCwgMHhCNCwgMHgwMCwgMHg1MCwKKzB4MDIsIDB4MDAsIDB4MDgsIDB4ODgsIDB4MkQsIDB4MDAsIDB4QjQsIDB4MDAsIDB4NTAsIDB4MDIsIDB4NDAsIDB4MDksIDB4MDAsCisweDJGLCAweDAwLCAweEE0LCAweDAwLCAweEQxLCAweDAyLCAweDQ4LCAweDBCLCAweDAwLCAweDJELCAweDIwLCAweEI2LCAweDAwLAorMHgxOCwgMHg0RSwgMHg0MCwgMHgzOCwgMHgyMCwgMHhFRCwgMHgwMCwgMHhGNCwgMHgwMSwgMHgxMCwgMHgwNywgMHg0MCwgMHg0QywKKzB4NjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4NzksIDB4MDAsIDB4NkQsIDB4MDAsCisweDg0LCAweDQ3LCAweEQwLCAweDFFLCAweDQwLCAweDdCLCAweDAwLCAweEVELCAweDgxLCAweEY0LCAweDA3LCAweDE4LCAweDFGLAorMHg0OCwgMHg3OCwgMHg4MCwgMHhFRCwgMHgwMSwgMHhGNiwgMHgwNywgMHgxMywgMHgxRiwgMHg0NCwgMHg3QiwgMHg4MCwgMHhFRCwKKzB4MDEsIDB4QjQsIDB4ODcsIDB4NTgsIDB4MUUsIDB4NDAsIDB4N0IsIDB4MDAsIDB4RUQsIDB4MDEsIDB4RjQsIDB4MDcsIDB4RDgsCisweERFLCAweDQwLCAweDZBLCAweDAwLCAweEVELCAweDAxLCAweEI0LCAweDA3LCAweDEwLCAweDFFLCAweDQwLCAweDEwLCAweDAwLAorMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNiwgMHgyMCwgMHgyMywgMHgwMCwgMHg0QywgMHgwMCwgMHgwNCwKKzB4MDUsIDB4RDAsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MEQsIDB4MDAsIDB4MzQsIDB4MDAsIDB4NTAsIDB4MDAsIDB4NDAsCisweDAwLCAweEEwLCAweDBELCAweDAwLCAweDc0LCAweDAwLCAweDUwLCAweDAwLCAweDQwLCAweDAzLCAweDEwLCAweDA1LCAweDAwLAorMHgzNCwgMHgwMCwgMHhEMCwgMHgwMCwgMHg0MCwgMHgwMywgMHgwMCwgMHgwRCwgMHgyMCwgMHgzNCwgMHgwMCwgMHg1MSwgMHgwQywKKzB4NTAsIDB4MjIsIDB4MDAsIDB4OEQsIDB4MEYsIDB4NzQsIDB4MEYsIDB4MUEsIDB4NkQsIDB4NDAsIDB4NTgsIDB4MDAsIDB4MEMsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE3LCAweEEwLCAweDFGLCAweDAwLCAweDdGLCAweDEwLCAweENDLCAweDBELAorMHhGMCwgMHgwNSwgMHhDMCwgMHgxNywgMHgwMCwgMHg1RiwgMHgwMCwgMHg3QywgMHgwMSwgMHgzMCwgMHgwNSwgMHhEMCwgMHgxNCwKKzB4MDAsIDB4NUYsIDB4MDAsIDB4N0MsIDB4MDEsIDB4MzAsIDB4MDUsIDB4QzAsIDB4MTcsIDB4MDAsIDB4NUQsIDB4MDAsIDB4N0MsCisweDAxLCAweEYwLCAweDA1LCAweEMwLCAweDE3LCAweDAwLCAweDVGLCAweDAwLCAweDNDLCAweDAxLCAweEYwLCAweDA0LCAweEMwLAorMHgxQSwgMHgwMCwgMHg3RiwgMHgwMCwgMHhGQywgMHgwRCwgMHgzNCwgMHgwNywgMHhEMCwgMHg1QywgMHgyMCwgMHgwRSwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4ODAsIDB4MDUsIDB4MDAsIDB4MUYsIDB4MjAsIDB4N0MsIDB4NDAsIDB4RjIsCisweDAzLCAweEMwLCAweDBGLCAweDAwLCAweDNGLCAweDIwLCAweEZDLCAweDAwLCAweEYwLCAweDAzLCAweEMwLCAweDhGLCAweDAwLAorMHgzRiwgMHgwMCwgMHhGQywgMHgwMCwgMHhGMCwgMHgwMywgMHhDMCwgMHgwRCwgMHgwMCwgMHgzRCwgMHgwMCwgMHhFNCwgMHgwMCwKKzB4RjAsIDB4MDMsIDB4QzAsIDB4MEYsIDB4MDAsIDB4M0YsIDB4MjAsIDB4RkMsIDB4MDgsIDB4OTAsIDB4MDEsIDB4QzAsIDB4MDUsCisweDAwLCAweDFGLCAweDAwLCAweDdDLCAweDI4LCAweEYwLCAweDgxLCAweEMwLCAweDRCLCAweDAwLCAweDA2LCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHg2NSwgMHgwMCwgMHg5RiwgMHg0MCwgMHg3QywgMHgwMiwgMHhGMCwgMHgxOSwKKzB4QzAsIDB4MjcsIDB4MDAsIDB4OUYsIDB4MDAsIDB4NUMsIDB4ODIsIDB4RjAsIDB4MDksIDB4QzAsIDB4MjcsIDB4MDIsIDB4OUYsCisweDAwLCAweDdDLCAweDAyLCAweDMwLCAweDA5LCAweEMwLCAweEU3LCAweDgwLCAweDlGLCAweDAwLCAweDRELCAweDAyLCAweDM0LAorMHgwOSwgMHhDMCwgMHgyNywgMHgwMCwgMHg5QiwgMHgwMCwgMHg3QywgMHgwNiwgMHg3MiwgMHgwOSwgMHhDMCwgMHgyNCwgMHgwMCwKKzB4OTMsIDB4MDUsIDB4N0MsIDB4NDIsIDB4MzAsIDB4MDksIDB4QzAsIDB4NDAsIDB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAxLCAweDI4LCAweDY2LCAweDAwLCAweDlELCAweDAwLCAweDc0LCAweDAyLCAweEQwLCAweDE5LCAweDQwLAorMHgyNywgMHgwMCwgMHg4RCwgMHgwMCwgMHg0NCwgMHgwMiwgMHhEOCwgMHgxOSwgMHg0MCwgMHhFNywgMHgyMCwgMHg5RCwgMHgwMCwKKzB4NzQsIDB4MDIsIDB4MTAsIDB4MDksIDB4NDAsIDB4MjcsIDB4MDQsIDB4OTcsIDB4MjAsIDB4NDQsIDB4MDIsIDB4MzAsIDB4MDksCisweDQwLCAweDIzLCAweDAwLCAweDkxLCAweDIwLCAweDcwLCAweDE2LCAweDMwLCAweDBCLCAweEQwLCAweDI0LCAweDAwLCAweDkxLAorMHgwMCwgMHg3NCwgMHg5NiwgMHg1MCwgMHgzOSwgMHg0MCwgMHgwNCwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MUMsIDB4QTAsIDB4MjQsIDB4MDIsIDB4OUQsIDB4MDAsIDB4NzQsIDB4MDIsIDB4RDAsIDB4ODksIDB4NDAsIDB4NkYsCisweDAwLCAweEJELCAweDAwLCAweEQ0LCAweDAyLCAweEQwLCAweEFCLCAweDQwLCAweDJGLCAweDAwLCAweEJELCAweDAwLCAweEY0LAorMHgwMiwgMHgxMCwgMHgwQiwgMHg2MCwgMHgyRiwgMHgwMCwgMHhBRCwgMHgwMCwgMHg4NCwgMHgwMiwgMHgxMCwgMHgwQiwgMHg0MCwKKzB4MkYsIDB4ODAsIDB4QjksIDB4MDAsIDB4RjQsIDB4MTIsIDB4MTAsIDB4NjksIDB4NjAsIDB4MzYsIDB4MDAsIDB4RDksIDB4MDIsCisweDc0LCAweDA2LCAweDEwLCAweDE5LCAweDQxLCAweDcwLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgxNCwgMHgyOCwgMHhBMCwgMHgwMCwgMHg4RCwgMHgxQywgMHgzNCwgMHgyMiwgMHhEMCwgMHgyQSwgMHg0MCwgMHhFQiwgMHgwMCwKKzB4QkQsIDB4MDgsIDB4ODQsIDB4MjIsIDB4RDAsIDB4MEEsIDB4NDAsIDB4MkIsIDB4MDAsIDB4QUQsIDB4MDAsIDB4QjAsIDB4MjIsCisweDEwLCAweDhBLCAweDQwLCAweDJCLCAweDAwLCAweEE1LCAweDg4LCAweDg0LCAweDIyLCAweDEwLCAweDBBLCAweDQwLCAweDJGLAorMHgwMiwgMHhBMSwgMHgwOCwgMHhCNCwgMHgwMiwgMHgxNCwgMHgwOCwgMHg2NCwgMHgyNCwgMHgwOCwgMHg4OSwgMHgwMCwgMHgzNCwKKzB4MDIsIDB4NTAsIDB4MDksIDB4NDAsIDB4NTAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MUQsCisweEIwLCAweDA2LCAweDAwLCAweDFGLCAweDA2LCAweDdDLCAweDA4LCAweEYwLCAweDAxLCAweEMwLCAweDA3LCAweDAwLCAweDFGLAorMHgwMiwgMHg1QywgMHgwOCwgMHhEMCwgMHgwMSwgMHhDMCwgMHgxNywgMHgwMCwgMHgxRCwgMHg4QSwgMHg3QywgMHgwOCwgMHgzNCwKKzB4MjEsIDB4QzAsIDB4MDcsIDB4MDAsIDB4MUQsIDB4MDIsIDB4NDQsIDB4MDgsIDB4MzAsIDB4MDEsIDB4QzAsIDB4ODcsIDB4MDAsCisweDFCLCAweDAyLCAweEZDLCAweDAwLCAweDcwLCAweDExLCAweEMwLCAweDA2LCAweDQwLCAweDFCLCAweDAwLCAweDdDLCAweDI4LAorMHgzMiwgMHhBMSwgMHhEMCwgMHg3NCwgMHhDMCwgMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOSwgMHhBMCwKKzB4NkYsIDB4MDAsIDB4QkYsIDB4MDQsIDB4RkMsIDB4MTIsIDB4RjAsIDB4MTksIDB4NDAsIDB4NjcsIDB4MDAsIDB4OUYsIDB4NDQsCisweDNDLCAweDEyLCAweEYyLCAweDA4LCAweDQwLCAweDI3LCAweDAwLCAweDlELCAweDAwLCAweDdDLCAweDEyLCAweEYwLCAweDQ4LAorMHhDMCwgMHgyNywgMHgwMCwgMHg5NywgMHg4NCwgMHg3QywgMHgxMiwgMHg3MCwgMHgwOSwgMHhDMiwgMHgyNywgMHgwMSwgMHg5RiwKKzB4ODQsIDB4N0MsIDB4MDIsIDB4NzAsIDB4MjgsIDB4QzAsIDB4MkQsIDB4MDAsIDB4QjcsIDB4MDAsIDB4RkMsIDB4MDIsIDB4RjAsCisweDBCLCAweEMwLCAweDY3LCAweDYwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweEEwLCAweDJGLAorMHgwMCwgMHg5MywgMHgyQywgMHg3QywgMHgwMiwgMHhGMCwgMHgwQiwgMHhDMCwgMHhBQiwgMHgwMCwgMHg5NywgMHgwMCwgMHg3QywKKzB4MDIsIDB4RjAsIDB4MEIsIDB4QzAsIDB4MjgsIDB4MDAsIDB4OUYsIDB4MDAsIDB4N0MsIDB4MjIsIDB4RjAsIDB4MDksIDB4QzgsCisweDJELCAweDAwLCAweDkzLCAweDA4LCAweDVDLCAweDAyLCAweDcwLCAweDA5LCAweEMwLCAweDI3LCAweDAyLCAweDlGLCAweDAwLAorMHhEQywgMHgwMiwgMHhCMCwgMHgxQiwgMHhDMywgMHgyQiwgMHgwMCwgMHhCRiwgMHg2MCwgMHhGQywgMHg4MiwgMHgzMCwgMHgwQiwKKzB4QzAsIDB4NjMsIDB4MDAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MUMsIDB4MTgsIDB4NTQsIDB4NDUsCisweDUxLCAweDRDLCAweDc0LCAweDQwLCAweEQwLCAweDUxLCAweDQxLCAweDQ3LCAweDAxLCAweDExLCAweDE0LCAweDc0LCAweDEwLAorMHhEMCwgMHgwMSwgMHg0MCwgMHgwNCwgMHgwOCwgMHgxRCwgMHgwNSwgMHg3NCwgMHg4MCwgMHhEMiwgMHg0MSwgMHg0MSwgMHgwNCwKKzB4MDAsIDB4MTEsIDB4MDQsIDB4NEMsIDB4NDAsIDB4MTAsIDB4MDEsIDB4QzAsIDB4MDUsIDB4MDAsIDB4MUQsIDB4MTQsIDB4NzQsCisweDAwLCAweDEwLCAweDIxLCAweDQyLCAweDA3LCAweDA4LCAweDVELCAweDAwLCAweDc0LCAweDAwLCAweDUwLCAweDA1LCAweDQwLAorMHg3MywgMHg0MCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHgyMCwgMHgyMSwgMHgwMCwgMHg4MSwKKzB4MDQsIDB4MzQsIDB4MTIsIDB4RDAsIDB4MDgsIDB4NDAsIDB4MjMsIDB4MDEsIDB4ODUsIDB4MDQsIDB4MzQsIDB4NTIsIDB4RDAsCisweDA5LCAweDYyLCAweDIxLCAweDAwLCAweDhELCAweDEwLCAweDM0LCAweDAyLCAweEQwLCAweDQ4LCAweDQwLCAweDI1LCAweDAwLAorMHg5MSwgMHgwNCwgMHg1NCwgMHgxMiwgMHg1MCwgMHgwOCwgMHg0OCwgMHgyMywgMHg4MCwgMHg4RCwgMHgwNCwgMHgxNCwgMHgwMiwKKzB4RDIsIDB4MDgsIDB4NDgsIDB4MjMsIDB4MjAsIDB4OEQsIDB4MjAsIDB4NzQsIDB4MDIsIDB4MTgsIDB4MDgsIDB4NDAsIDB4NEIsCisweDI4LCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAwLCAweDI1LCAweDAwLCAweDkxLCAweDAwLAorMHg3NCwgMHgwQSwgMHhEMCwgMHgwOSwgMHg0MCwgMHgyMywgMHgwMCwgMHg5MSwgMHgwMCwgMHg3NCwgMHgwMiwgMHhEMCwgMHgwOSwKKzB4MDAsIDB4MjUsIDB4ODAsIDB4OUQsIDB4MDAsIDB4NzQsIDB4MDIsIDB4RDAsIDB4MDksIDB4NDAsIDB4MjQsIDB4MDAsIDB4OTEsCisweDAwLCAweDU0LCAweDAyLCAweDEwLCAweDA5LCAweDQwLCAweDI1LCAweDAwLCAweDlELCAweDAwLCAweDc0LCAweDAyLCAweDEwLAorMHgwRCwgMHg0MCwgMHgyNywgMHgwMCwgMHg5RCwgMHgwMCwgMHg3NiwgMHgwMiwgMHg1MCwgMHgwOSwgMHg0MCwgMHg2MywgMHgwMCwKKzB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4QTgsIDB4NkYsIDB4MDAsIDB4OTMsIDB4MDIsIDB4NzgsCisweDAyLCAweEYwLCAweDBCLCAweEMwLCAweDJGLCAweDAwLCAweDk3LCAweDAwLCAweDdDLCAweDAyLCAweEYwLCAweDA4LCAweEMwLAorMHgyNSwgMHgwMCwgMHg5RiwgMHgwMCwgMHg3QywgMHgwMiwgMHhGMCwgMHgwOSwgMHg0OCwgMHgyMSwgMHg0MCwgMHg4MSwgMHgwMCwKKzB4NTQsIDB4MDIsIDB4NzAsIDB4MDksIDB4QzAsIDB4MjcsIDB4MDAsIDB4OUYsIDB4MDAsIDB4MUMsIDB4MDIsIDB4QjAsIDB4MDksCisweEMwLCAweEU3LCAweDgxLCAweDlGLCAweDAyLCAweDc4LCAweDQyLCAweDMyLCAweDI5LCAweEMwLCAweDE3LCAweDIwLCAweDBFLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHg4MCwgMHhBNSwgMHgwMCwgMHg5RiwgMHgwNCwgMHg3QywgMHgyNiwKKzB4RjEsIDB4MDksIDB4QzAsIDB4MjcsIDB4MDAsIDB4OUYsIDB4MDAsIDB4N0MsIDB4MDIsIDB4RjAsIDB4MDksIDB4RDAsIDB4MjYsCisweDIwLCAweDlGLCAweDAwLCAweDdDLCAweDAyLCAweEYwLCAweDA5LCAweEMyLCAweDI3LCAweDA4LCAweDlGLCAweDAwLCAweDRDLAorMHgwMiwgMHhGMCwgMHgwOSwgMHhDMCwgMHgyNSwgMHgwMCwgMHg5RiwgMHg4MCwgMHg3QywgMHgwMiwgMHhCQywgMHgwOSwgMHhDMCwKKzB4NjcsIDB4MDEsIDB4OUYsIDB4MDksIDB4N0MsIDB4MDIsIDB4RjEsIDB4NDksIDB4QzAsIDB4NEIsIDB4MDAsIDB4MDYsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDA1LCAweDAwLCAweDFGLCAweDAyLCAweDRELCAweDAwLCAweEYwLAorMHgwMSwgMHhDMCwgMHgwNiwgMHgwMCwgMHgxMywgMHgwMCwgMHg3RSwgMHgwMCwgMHg3MCwgMHgwMSwgMHhDMCwgMHgwNCwgMHgwMCwKKzB4MTcsIDB4MDAsIDB4N0MsIDB4MDAsIDB4RjAsIDB4MDEsIDB4RTIsIDB4MDcsIDB4MDgsIDB4MUIsIDB4MDAsIDB4NEMsIDB4MDAsCisweEYwLCAweDAxLCAweEMwLCAweDA3LCAweDAwLCAweDFGLCAweDAwLCAweDdDLCAweDQwLCAweEYwLCAweDQxLCAweEM4LCAweDg3LAorMHg0MCwgMHgxNywgMHgwMCwgMHg3QywgMHgwMCwgMHgzNCwgMHgwMSwgMHg4NywgMHg0MCwgMHgyMCwgMHgwNCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4ODAsIDB4NTQsIDB4ODAsIDB4NUQsIDB4MDAsIDB4NDQsIDB4MDEsIDB4NzAsIDB4NDUsCisweDQwLCAweDFDLCAweDAwLCAweDVCLCAweDAwLCAweDc0LCAweDAxLCAweDcwLCAweDA3LCAweDYwLCAweDlDLCAweDAwLCAweDUxLAorMHgwMCwgMHg3NCwgMHgwMSwgMHhEOCwgMHgwNSwgMHhDMCwgMHgxRiwgMHgwMCwgMHg1NSwgMHgwMCwgMHgxRSwgMHgwMSwgMHg3MiwKKzB4MDUsIDB4NDAsIDB4MTcsIDB4MDgsIDB4NTMsIDB4MDAsIDB4Q0MsIDB4MEQsIDB4QzAsIDB4MDcsIDB4QzAsIDB4REQsIDB4MDEsCisweDcwLCAweDBBLCAweEYwLCAweDM1LCAweDEwLCAweDE3LCAweDUwLCAweDUwLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgxNCwgMHhBMCwgMHgzNiwgMHgxMCwgMHhDRCwgMHgwMCwgMHgxNiwgMHgwMywgMHg1MCwgMHgwQywgMHg0MCwKKzB4NjIsIDB4MDAsIDB4QzEsIDB4MDAsIDB4MzQsIDB4MDMsIDB4NTgsIDB4OTgsIDB4NDgsIDB4RjMsIDB4MDYsIDB4Q0QsIDB4MDAsCisweDM0LCAweDAzLCAweEQyLCAweDBELCAweDQwLCAweEIzLCAweDAxLCAweEMxLCAweDAwLCAweDA0LCAweDAzLCAweDUwLCAweDBDLAorMHg0MCwgMHgzMywgMHg4MCwgMHhDOSwgMHgwMCwgMHgxNCwgMHgwQSwgMHg5MCwgMHgzNCwgMHg0MCwgMHhFMywgMHgwMSwgMHg4MSwKKzB4MDIsIDB4NzQsIDB4MDMsIDB4OTAsIDB4MEMsIDB4NDAsIDB4NTAsIDB4MDAsIDB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAxLCAweDg4LCAweEI4LCAweDExLCAweEVELCAweEE1LCAweDk2LCAweDEzLCAweDUwLCAweDVFLCAweDQwLCAweDlDLAorMHgwMSwgMHhFOSwgMHgwOCwgMHhCNCwgMHgwMywgMHg1MCwgMHgwQiwgMHg0MCwgMHg1RiwgMHgwMCwgMHhFOSwgMHgwNCwgMHhCNCwKKzB4MTMsIDB4RDgsIDB4MEUsIDB4NDAsIDB4M0QsIDB4MDAsIDB4RjUsIDB4MDAsIDB4OTYsIDB4MTMsIDB4NTAsIDB4MEUsIDB4NDAsCisweDdGLCAweDAzLCAweEUxLCAweDA1LCAweDkwLCAweDBCLCAweEQwLCAweDI2LCAweDYwLCAweDZELCAweDAwLCAweEUxLCAweDgyLAorMHhCNCwgMHgwMiwgMHg5MCwgMHgxRSwgMHg0MSwgMHgwNCwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MTEsIDB4MTAsIDB4RjgsIDB4MDAsIDB4RkQsIDB4MDcsIDB4OUMsIDB4MTcsIDB4NzAsIDB4MUYsIDB4QzAsIDB4RkEsIDB4MDEsCisweEUzLCAweDAxLCAweEI0LCAweDE3LCAweDcwLCAweDFFLCAweDUwLCAweDZCLCAweDAwLCAweEVELCAweDA1LCAweEJDLCAweDQ3LAorMHhEMCwgMHg5RSwgMHg2OCwgMHg3QiwgMHgwOCwgMHhFQiwgMHgwMSwgMHg4NCwgMHgxNywgMHg3MCwgMHgxRSwgMHhDMCwgMHg3QiwKKzB4MDAsIDB4RkIsIDB4MDksIDB4OUMsIDB4MDcsIDB4RjAsIDB4MUUsIDB4ODAsIDB4NkIsIDB4MDAsIDB4RTYsIDB4MjEsIDB4RkMsCisweDA2LCAweEIwLCAweDFCLCAweEMwLCAweDQ0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLAorMHhBOCwgMHgzNSwgMHgwMCwgMHhERiwgMHgwMCwgMHg2QywgMHgwMywgMHg3MCwgMHg4OSwgMHhDMCwgMHgxNywgMHgwMCwgMHhERiwKKzB4MDAsIDB4N0MsIDB4MDMsIDB4RjAsIDB4MEMsIDB4QzAsIDB4MjQsIDB4MTgsIDB4RDcsIDB4MDAsIDB4N0MsIDB4QjMsIDB4RjAsCisweDRELCAweEMyLCAweDIzLCAweDAwLCAweEM3LCAweDkyLCAweDdDLCAweDRCLCAweDcwLCAweDBELCAweEMwLCAweEIzLCAweDA0LAorMHhEQiwgMHgwOCwgMHg2QywgMHgwMywgMHhGMCwgMHgwRCwgMHg4MCwgMHgyNywgMHgwMCwgMHhERiwgMHgwMCwgMHg3QywgMHgwMiwKKzB4NzAsIDB4MDEsIDB4QzAsIDB4NDMsIDB4MjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjAsCisweDc5LCAweDAwLCAweEUzLCAweDA0LCAweENELCAweDUzLCAweDcwLCAweDFCLCAweEMwLCAweDdGLCAweDQwLCAweEYyLCAweDAxLAorMHhEQywgMHg2NywgMHhGMCwgMHgxQiwgMHhDMCwgMHg2RiwgMHgwMCwgMHhFRiwgMHgxOSwgMHhDQywgMHgwNywgMHgzMCwgMHgxRiwKKzB4ODUsIDB4N0YsIDB4MDAsIDB4RjMsIDB4MTEsIDB4RkMsIDB4NjcsIDB4NzAsIDB4MUYsIDB4QzAsIDB4N0QsIDB4MDAsIDB4RjcsCisweDAxLCAweENELCAweDA3LCAweEYwLCAweDE3LCAweEMwLCAweDdGLCAweDAwLCAweEZGLCAweEMxLCAweEY0LCAweDA3LCAweEYyLAorMHgxQiwgMHhDNCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwgMHgxOCwgMHgzOSwKKzB4MDAsIDB4RTEsIDB4MDAsIDB4QUMsIDB4MDMsIDB4MTAsIDB4MEEsIDB4NDAsIDB4MUIsIDB4MDAsIDB4RTEsIDB4MDgsIDB4REMsCisweEMzLCAweDExLCAweDBBLCAweEMwLCAweDA5LCAweDA5LCAweEVELCAweDAwLCAweDk0LCAweDIzLCAweDUwLCAweDBFLCAweDQyLAorMHgxQiwgMHgwMCwgMHhFMSwgMHgwNCwgMHhEQywgMHgwMywgMHgxMCwgMHg4RSwgMHg0MCwgMHgzOCwgMHgwMCwgMHhFRCwgMHgwMCwKKzB4ODQsIDB4MkIsIDB4RDAsIDB4ODYsIDB4NDAsIDB4MkIsIDB4MDYsIDB4NkQsIDB4MDgsIDB4QjQsIDB4MTEsIDB4RDAsIDB4NEYsCisweEMwLCAweDU2LCAweDYwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDJELCAweDAwLAorMHhGMSwgMHgwMCwgMHhDNCwgMHgyMywgMHg1MCwgMHg4RSwgMHg0MSwgMHgzQiwgMHgwMCwgMHhFMSwgMHgwMCwgMHhCNCwgMHgwMywKKzB4NTksIDB4OEEsIDB4NDEsIDB4MkEsIDB4MzAsIDB4RkQsIDB4MTAsIDB4RTYsIDB4MDMsIDB4OTAsIDB4MEUsIDB4NDAsIDB4M0YsCisweDA2LCAweEUxLCAweDIwLCAweEE2LCAweDAzLCAweDUxLCAweDBGLCAweDQwLCAweDM5LCAweDAyLCAweEVELCAweDAwLCAweEE0LAorMHg0MywgMHhEMCwgMHgwRSwgMHg0MCwgMHgzQiwgMHgwMCwgMHhFRCwgMHgwMCwgMHhCNCwgMHgwMiwgMHhEMiwgMHgwQSwgMHg0MCwKKzB4MDIsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MjAsIDB4MjUsIDB4MDIsIDB4QzEsCisweDA5LCAweDI0LCAweDA3LCAweDEwLCAweDA4LCAweDYwLCAweDUzLCAweDBFLCAweEMxLCAweDBBLCAweDM0LCAweDA3LCAweDEyLAorMHgwOCwgMHg0MSwgMHhBMywgMHgyMCwgMHhDRCwgMHgwMiwgMHgzNCwgMHgxRiwgMHg1MCwgMHgzQywgMHg0MCwgMHg0MywgMHgwMCwKKzB4RDEsIDB4MEIsIDB4MTQsIDB4MzcsIDB4MTAsIDB4M0MsIDB4NDAsIDB4NzQsIDB4MDAsIDB4Q0QsIDB4MDUsIDB4MjQsIDB4MTcsCisweEQxLCAweDBDLCAweDQwLCAweDIzLCAweDAwLCAweDRELCAweDI2LCAweDM0LCAweDE4LCAweEQwLCAweDAwLCAweDQyLCAweDEyLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwgMHhBOCwgMHgyNSwgMHg0MCwgMHhGMywgMHgwMCwKKzB4Q0QsIDB4MUIsIDB4NzAsIDB4MkQsIDB4QzAsIDB4QjMsIDB4MDAsIDB4RjMsIDB4OEEsIDB4RkMsIDB4MEIsIDB4NzAsIDB4MTgsCisweEMwLCAweDI2LCAweDA0LCAweEZFLCAweDAxLCAweEVDLCAweDRGLCAweEIwLCAweDVGLCAweEMwLCAweDI3LCAweDQwLCAweEYzLAorMHgwMCwgMHhGQywgMHgwQiwgMHg3MCwgMHg5QywgMHhDMCwgMHhCRCwgMHgwMiwgMHhFNywgMHgwNiwgMHg2QywgMHgwRiwgMHhEMCwKKzB4MDUsIDB4QzAsIDB4RTcsIDB4MDAsIDB4OEQsIDB4MDYsIDB4N0UsIDB4MDAsIDB4RjAsIDB4MDEsIDB4RDAsIDB4NTYsIDB4MjAsCisweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDI3LCAweDA0LCAweERGLCAweDAwLCAweDdDLAorMHg0MywgMHhGMCwgMHgwRCwgMHhDMCwgMHhCNywgMHgwMCwgMHhERiwgMHgwMCwgMHg1QywgMHgwMywgMHg3MCwgMHgyOSwgMHhDMCwKKzB4MDUsIDB4MDAsIDB4REYsIDB4MDAsIDB4NUMsIDB4MDMsIDB4RjAsIDB4MEQsIDB4QzAsIDB4QTcsIDB4ODgsIDB4REYsIDB4MDAsCisweDdDLCAweDAzLCAweDcyLCAweDhELCAweEMwLCAweDM3LCAweDgyLCAweERGLCAweDAwLCAweDVDLCAweDBCLCAweEIwLCAweDI1LAorMHg4OCwgMHhBNywgMHgwOSwgMHg5RiwgMHgwMiwgMHg3QywgMHgwQywgMHhGMCwgMHgwMSwgMHhDMSwgMHgwNSwgMHgwMCwgMHgwNCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODQsIDB4MDgsIDB4M0YsIDB4MDAsIDB4RkIsIDB4MDAsIDB4RkMsIDB4MDMsCisweEYwLCAweDBGLCAweEMxLCAweDVGLCAweDA4LCAweEYzLCAweDAwLCAweEZDLCAweDQzLCAweEYwLCAweDAzLCAweEMyLCAweDJDLAorMHgwQywgMHhGRiwgMHgxMCwgMHhGOCwgMHg4MywgMHhGMCwgMHgwRiwgMHhDMSwgMHgwRCwgMHgwNCwgMHhGQiwgMHg5MCwgMHhDQywKKzB4MDMsIDB4RjEsIDB4MEYsIDB4QzAsIDB4M0YsIDB4MDAsIDB4RjcsIDB4NDAsIDB4RTgsIDB4MDMsIDB4RDAsIDB4MjcsIDB4QzAsCisweDZGLCAweDAwLCAweDMzLCAweDAwLCAweENDLCAweDAyLCAweEYwLCAweDAzLCAweEMwLCAweDEzLCAweDIyLCAweDBDLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4NSwgMHgyMCwgMHgzNiwgMHgwOCwgMHhEMSwgMHgwMCwgMHg3NCwgMHg4MywgMHhEMCwKKzB4MDksIDB4NjAsIDB4MTYsIDB4MEEsIDB4RDEsIDB4MDAsIDB4NzQsIDB4MDMsIDB4RDIsIDB4MTUsIDB4NDAsIDB4NjQsIDB4MDAsCisweERELCAweDAwLCAweDVDLCAweDAzLCAweEQwLCAweDBELCAweDQwLCAweEM0LCAweDA0LCAweERELCAweDAwLCAweDQ0LCAweDAzLAorMHhEOCwgMHgwRCwgMHg0MCwgMHgzNCwgMHgwMCwgMHhEMSwgMHgwMCwgMHg0NCwgMHgwNywgMHhDMCwgMHgyNSwgMHg0MiwgMHhFMywKKzB4QzAsIDB4MTMsIDB4MDUsIDB4NDQsIDB4NEUsIDB4RDAsIDB4MzEsIDB4NDAsIDB4MTcsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAxLCAweEEyLCAweDY0LCAweDIwLCAweEQ5LCAweDAwLCAweDc0LCAweDAzLCAweEQwLCAweDA5LAorMHg0OCwgMHgzNywgMHgwNCwgMHhEMSwgMHgwMCwgMHg3NCwgMHgwMywgMHg1MCwgMHgxOSwgMHg0MSwgMHg0NSwgMHgyMCwgMHhERCwKKzB4MDAsIDB4NzQsIDB4MDMsIDB4NTAsIDB4MEMsIDB4NDAsIDB4NjcsIDB4MDAsIDB4REQsIDB4MDAsIDB4NjQsIDB4MDMsIDB4RDAsCisweDBELCAweDQwLCAweDM2LCAweDAwLCAweEQ1LCAweDAwLCAweDc2LCAweDA3LCAweEQwLCAweDA1LCAweDQwLCAweEI3LCAweDAxLAorMHg5MSwgMHgwMSwgMHg0NCwgMHgwNCwgMHhEMiwgMHgzOSwgMHg0MiwgMHgwNSwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MTAsIDB4MjgsIDB4MjAsIDB4MDAsIDB4QzEsIDB4MDAsIDB4MzQsIDB4MDMsIDB4RDAsIDB4MDgsIDB4NDAsCisweDMzLCAweDA4LCAweEMxLCAweDAwLCAweDM0LCAweDAzLCAweEQwLCAweDA5LCAweDQwLCAweDQwLCAweDAwLCAweENELCAweDAwLAorMHgxNCwgMHgwMywgMHhEMCwgMHgwQywgMHg0MCwgMHgwMCwgMHgwMCwgMHhDRCwgMHgwMCwgMHgyNCwgMHgwMywgMHhEMCwgMHgwRCwKKzB4NDAsIDB4MzAsIDB4MDAsIDB4RDEsIDB4MDAsIDB4MTYsIDB4ODMsIDB4RDAsIDB4MDQsIDB4NDAsIDB4MTMsIDB4MTAsIDB4MDEsCisweDAwLCAweDA1LCAweDAwLCAweEQwLCAweDA4LCAweDYwLCAweDQzLCAweEExLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHhCMCwgMHgyNiwgMHgwMCwgMHhEQiwgMHgwMCwgMHg3QywgMHgwMywgMHhGMCwgMHgwRCwgMHg0OCwgMHgxMywKKzB4NDAsIDB4RDMsIDB4ODAsIDB4N0MsIDB4MDMsIDB4RjEsIDB4MDEsIDB4RDAsIDB4MDQsIDB4MDAsIDB4REUsIDB4MDAsIDB4RkMsCisweDAzLCAweDcyLCAweDBGLCAweEM0LCAweDA1LCAweDAwLCAweEZGLCAweDAwLCAweEVDLCAweDAzLCAweEQwLCAweDBELCAweEMwLAorMHgzRSwgMHgwMCwgMHhFNywgMHgwMCwgMHg3QywgMHgwMywgMHhGMCwgMHgwOSwgMHhDNCwgMHgzNywgMHg4OCwgMHgxMSwgMHgwMCwKKzB4NEMsIDB4ODIsIDB4RjAsIDB4MDksIDB4QzAsIDB4MDEsIDB4QzAsIDB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDA1LCAweEE4LCAweDJGLCAweDEwLCAweEZGLCAweDAwLCAweEJDLCAweDAzLCAweEYwLCAweDBCLCAweEMwLCAweDFFLCAweDAwLAorMHhGRiwgMHgwMCwgMHhGQywgMHgwMywgMHhGMCwgMHgwNywgMHhDMCwgMHgwRSwgMHgwMCwgMHhGRiwgMHgwMCwgMHg5QywgMHgwMywKKzB4RjAsIDB4MEYsIDB4QzgsIDB4MEIsIDB4MDAsIDB4RkYsIDB4MDAsIDB4REMsIDB4MDMsIDB4RjAsIDB4MEUsIDB4NDAsIDB4M0YsCisweDAwLCAweEZGLCAweDAwLCAweEVDLCAweDAxLCAweEYwLCAweDBCLCAweEMyLCAweDFGLCAweDA4LCAweDM3LCAweDAwLCAweEZDLAorMHgwMCwgMHhFMSwgMHgwMywgMHhDMCwgMHgxNywgMHgyMiwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywKKzB4QTAsIDB4MkYsIDB4MDAsIDB4M0IsIDB4MTQsIDB4QkMsIDB4MEYsIDB4MzQsIDB4MUYsIDB4QzAsIDB4N0UsIDB4MDIsIDB4RkYsCisweDA5LCAweEZDLCAweDA3LCAweEIwLCAweDFGLCAweEMwLCAweDdDLCAweDAwLCAweEYzLCAweDA5LCAweDhDLCAweDI3LCAweDcyLAorMHgxRiwgMHhDNCwgMHg3RSwgMHgwMiwgMHhGQiwgMHgyOSwgMHhDQywgMHgwNywgMHhGMCwgMHgxRiwgMHhDMCwgMHg3QywgMHgyMCwKKzB4RjMsIDB4MDksIDB4Q0MsIDB4MjcsIDB4MzAsIDB4ODMsIDB4QzIsIDB4N0MsIDB4MDIsIDB4RjMsIDB4MjQsIDB4RUUsIDB4MUEsCisweDMwLCAweDRCLCAweEM0LCAweDBDLCAweDAwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDA4LAorMHgyNywgMHgyMCwgMHgwMSwgMHgwMiwgMHg3NCwgMHgxMywgMHgxOCwgMHgxMSwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxRCwgMHg4MCwKKzB4NzQsIDB4MDQsIDB4NDAsIDB4MTEsIDB4NDAsIDB4MDAsIDB4MDQsIDB4MTEsIDB4MDAsIDB4NDQsIDB4MTAsIDB4MTAsIDB4NDAsCisweDQwLCAweDAwLCAweDAwLCAweDExLCAweDA0LCAweDQ0LCAweDA0LCAweEQwLCAweDExLCAweDQxLCAweDQ0LCAweDAwLCAweDEzLAorMHg0NCwgMHg0NCwgMHgxMCwgMHgzMCwgMHg2NSwgMHg0MCwgMHgzNCwgMHgwMCwgMHhGNSwgMHgwQiwgMHg2RSwgMHgxMCwgMHgxMCwKKzB4MTEsIDB4NDAsIDB4MDQsIDB4MjAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTEsIDB4QTAsIDB4MDIsCisweDQwLCAweDAxLCAweDQwLCAweDM2LCAweDAzLCAweDUwLCAweDBELCAweDUwLCAweDMwLCAweDAxLCAweENELCAweDg0LCAweDM0LAorMHgwMywgMHg4MSwgMHgwRCwgMHg1MCwgMHgzMCwgMHgwMSwgMHhDMSwgMHgwMCwgMHgyNCwgMHgxMywgMHhEMCwgMHgwQywgMHg0MSwKKzB4MzAsIDB4MDEsIDB4QzEsIDB4MDQsIDB4MjQsIDB4MDMsIDB4RDAsIDB4NEQsIDB4NDAsIDB4MzQsIDB4MDAsIDB4QzksIDB4MDQsCisweDI0LCAweDAzLCAweDEwLCAweDI4LCAweDQwLCAweDMxLCAweDgxLCAweENELCAweDIwLCAweDA0LCAweDFBLCAweDExLCAweDg4LAorMHg0MCwgMHg0NSwgMHg4MCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHhBOCwgMHgxNSwgMHgwMCwKKzB4MTEsIDB4MjIsIDB4MzQsIDB4MDMsIDB4NTAsIDB4MDEsIDB4NDQsIDB4MDQsIDB4MDAsIDB4MUQsIDB4MDAsIDB4NzQsIDB4ODAsCisweDkwLCAweDAxLCAweDQwLCAweDA0LCAweDAwLCAweDAxLCAweDAwLCAweDI0LCAweDAwLCAweDkwLCAweDAxLCAweDQwLCAweDA0LAorMHgwMCwgMHgwMSwgMHgwMCwgMHg2NywgMHgwMCwgMHhEMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMSwgMHgwMCwgMHg2NCwKKzB4MDAsIDB4MTAsIDB4NEQsIDB4NDIsIDB4MzYsIDB4MDgsIDB4REQsIDB4MDAsIDB4NDcsIDB4MDQsIDB4MTAsIDB4MTksIDB4NDEsCisweDBELCAweDIwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweEE4LCAweDY3LCAweDQwLCAweDFCLAorMHgwMSwgMHg3QywgMHgyNywgMHg1MCwgMHgwQywgMHhDOCwgMHgzNCwgMHgyMCwgMHhERiwgMHg4MCwgMHgzQywgMHgwMywgMHhCNCwKKzB4MEMsIDB4QzAsIDB4MzQsIDB4MDAsIDB4RDMsIDB4MDAsIDB4NkMsIDB4MDMsIDB4RjAsIDB4MEQsIDB4QzAsIDB4MzQsIDB4MDAsCisweEQzLCAweDAwLCAweDZDLCAweDAzLCAweEYyLCAweDBDLCAweDgwLCAweDMwLCAweDAwLCAweERCLCAweDAwLCAweDZELCAweDAzLAorMHgzNCwgMHgwMSwgMHhEMSwgMHgzNSwgMHgwMCwgMHhERiwgMHg0MCwgMHg0NCwgMHgwNCwgMHgyMiwgMHgzMSwgMHhDMCwgMHgwMSwKKzB4MjAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4ODAsIDB4NjksIDB4MDEsIDB4M0YsIDB4MDMsCisweEY4LCAweDAzLCAweEIwLCAweDAzLCAweDgwLCAweDBGLCAweDAwLCAweDNGLCAweDAwLCAweEZDLCAweDAwLCAweDcwLCAweDAzLAorMHhDMCwgMHgwRiwgMHgwMCwgMHgzRiwgMHgwMCwgMHhERCwgMHgwMCwgMHg3MCwgMHgwMywgMHhEMCwgMHgwRCwgMHgwMCwgMHgzNywKKzB4MDAsIDB4REMsIDB4MDAsIDB4RjAsIDB4MDMsIDB4QzQsIDB4MEYsIDB4MDAsIDB4M0YsIDB4MDAsIDB4REMsIDB4MDAsIDB4RjEsCisweDA3LCAweEMwLCAweDNELCAweDIwLCAweEY3LCAweDAwLCAweEY0LCAweDAwLCAweEY1LCAweDAzLCAweEMzLCAweDFFLCAweDAwLAorMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHgwOCwgMHgzNSwgMHg4MSwgMHgzNywgMHgwQSwgMHg0RCwKKzB4MDMsIDB4MzAsIDB4MEQsIDB4QzAsIDB4NzcsIDB4NDEsIDB4RDMsIDB4MDUsIDB4NUMsIDB4MDMsIDB4MzAsIDB4OEQsIDB4QzAsCisweDM1LCAweDAwLCAweEQzLCAweDAwLCAweDdDLCAweDAzLCAweDMwLCAweDBELCAweEMwLCAweDM0LCAweDAwLCAweEQzLCAweDAxLAorMHg0QywgMHgwMywgMHg3MCwgMHgwRCwgMHhDMCwgMHgzNCwgMHgwMiwgMHhENywgMHgwMSwgMHg3QywgMHgwMywgMHhGMCwgMHgwOSwKKzB4QzAsIDB4MzcsIDB4MDAsIDB4REYsIDB4MTAsIDB4NzQsIDB4OEEsIDB4MzMsIDB4MjEsIDB4QzQsIDB4MEIsIDB4MjAsIDB4MDQsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEzLCAweEEwLCAweEI0LCAweDAwLCAweDExLCAweDgxLCAweDQ0LCAweDAzLAorMHgxMCwgMHg0MSwgMHg0NCwgMHg0NywgMHgwMCwgMHgxMSwgMHgwMywgMHg3NCwgMHgwMCwgMHhCMCwgMHgxMSwgMHg0MCwgMHgwNCwKKzB4MDAsIDB4MTEsIDB4MjAsIDB4NzQsIDB4MDAsIDB4MTQsIDB4MDEsIDB4NDgsIDB4MDQsIDB4MDAsIDB4MTAsIDB4MDEsIDB4NDQsCisweDQ0LCAweEQwLCAweDExLCAweDQwLCAweDQ0LCAweDA4LCAweDExLCAweDAxLCAweDY0LCAweDAwLCAweEQwLCAweDBELCAweEMwLAorMHgzNywgMHgxMCwgMHhFMCwgMHgxMywgMHgzNCwgMHgwNCwgMHgxMCwgMHgzMCwgMHgwMCwgMHg0RiwgMHgwMCwgMHgwMiwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4QTAsIDB4MjIsIDB4MDAsIDB4NDEsIDB4MDAsIDB4MjUsIDB4MDMsIDB4NTAsCisweDFDLCAweDQwLCAweEIzLCAweDAwLCAweEM5LCAweDAyLCAweDM0LCAweDQzLCAweDkwLCAweDBDLCAweDQxLCAweDM1LCAweDgwLAorMHhDMSwgMHgwMCwgMHgzNCwgMHgwMywgMHgxMCwgMHgwRCwgMHg0MCwgMHgzNiwgMHgwMCwgMHhDMSwgMHgwMCwgMHgzNCwgMHgwNywKKzB4NTAsIDB4OEMsIDB4NDAsIDB4NzEsIDB4ODAsIDB4QzksIDB4MDAsIDB4NzQsIDB4MDMsIDB4RDAsIDB4MDEsIDB4NDAsIDB4MzYsCisweDA4LCAweEM0LCAweDAyLCAweDM0LCAweDAyLCAweDU0LCAweDI4LCAweDAyLCAweDFGLCAweDAwLCAweDBBLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwNiwgMHg4MCwgMHg3OCwgMHg0MCwgMHg2MSwgMHgwOSwgMHhFNCwgMHgwNywgMHgxMCwgMHgxMiwKKzB4NDAsIDB4NEIsIDB4MDAsIDB4MjksIDB4MDksIDB4QjQsIDB4MjQsIDB4OTAsIDB4OTIsIDB4NDAsIDB4NDgsIDB4MDAsIDB4MjEsCisweDAxLCAweEY2LCAweDI0LCAweDEwLCAweDEyLCAweDQwLCAweDRBLCAweDAwLCAweDIxLCAweDAxLCAweEI0LCAweDA0LCAweEQwLAorMHgxMywgMHg0MCwgMHg0RCwgMHgwOCwgMHgyOSwgMHgwOSwgMHhBNiwgMHgwNCwgMHhDMCwgMHgxMiwgMHg0MCwgMHg3QiwgMHgzMCwKKzB4RTksIDB4MDEsIDB4QjQsIDB4NjYsIDB4NTAsIDB4MTIsIDB4NDEsIDB4MUIsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDEyLCAweDEwLCAweDA0LCAweDQwLCAweDQ1LCAweDAwLCAweDJDLCAweDAzLCAweDcwLCAweDhDLCAweEMwLAorMHgzMywgMHgwMCwgMHhDQiwgMHgwMCwgMHgxQywgMHgyMywgMHgzMCwgMHgwQywgMHhDMCwgMHgzMSwgMHg5MCwgMHhDMywgMHgwMCwKKzB4M0MsIDB4MDMsIDB4MzAsIDB4MEMsIDB4QzAsIDB4MzIsIDB4MDAsIDB4RDMsIDB4MDAsIDB4MzQsIDB4MDMsIDB4NzAsIDB4MEMsCisweEMwLCAweDMxLCAweDAwLCAweENFLCAweDgwLCAweDNFLCAweDAzLCAweEYwLCAweDAwLCAweEMwLCAweDM3LCAweDAwLCAweEM3LAorMHgwOCwgMHgzQywgMHgyMiwgMHg3MCwgMHgwOCwgMHhDMCwgMHg0QiwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDIsIDB4QjAsIDB4MUQsIDB4MDAsIDB4N0YsIDB4MDAsIDB4REUsIDB4MDMsIDB4RjAsIDB4MDMsIDB4NjAsIDB4MEYsCisweDAwLCAweDM3LCAweDAwLCAweEJDLCAweDIwLCAweEYwLCAweDAyLCAweEMwLCAweDBGLCAweDAwLCAweDNGLCAweDAwLCAweEY0LAorMHgwMCwgMHhGMCwgMHgwMywgMHhDMCwgMHgwRCwgMHgwMCwgMHgzRiwgMHgwMCwgMHhDRCwgMHgwMCwgMHhGMCwgMHgwMiwgMHhDMCwKKzB4MEEsIDB4MDAsIDB4MzcsIDB4ODAsIDB4RUUsIDB4MDQsIDB4RjAsIDB4MDMsIDB4QzAsIDB4M0QsIDB4ODIsIDB4RjcsIDB4MzgsCisweEJDLCAweDIyLCAweEIwLCAweDg5LCAweEMwLCAweDBCLCAweDYwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgxNSwgMHhBMCwgMHgzNywgMHg0MCwgMHgxMywgMHgwMCwgMHg2QywgMHgwMywgMHhGMCwgMHgwRCwgMHhDMCwgMHgzNywgMHg0MCwKKzB4RDMsIDB4MDEsIDB4MEQsIDB4MDMsIDB4QjAsIDB4MUMsIDB4RDAsIDB4MzQsIDB4MDAsIDB4REYsIDB4MDAsIDB4M0MsIDB4MDcsCisweEI0LCAweDBELCAweEMwLCAweDM3LCAweDAwLCAweERGLCAweDAxLCAweDBELCAweDA3LCAweDMwLCAweDBELCAweEMwLCAweDM3LAorMHgwMCwgMHhERiwgMHgwMSwgMHg2RCwgMHgwMywgMHg3MCwgMHgwRCwgMHhDMCwgMHgzNywgMHg4MCwgMHhERiwgMHgwNCwgMHgzQywKKzB4MDAsIDB4MzAsIDB4MTksIDB4QzAsIDB4NTQsIDB4MjAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsCisweDg4LCAweDM5LCAweDAwLCAweDMxLCAweDAwLCAweDg1LCAweDAzLCAweEQwLCAweDAyLCAweDQwLCAweDBGLCAweDAwLCAweDMxLAorMHgwMCwgMHg4NCwgMHgwMCwgMHgzMCwgMHgwMiwgMHg0MCwgMHgwOCwgMHgwMCwgMHgyRCwgMHgwMCwgMHhCNCwgMHgwMCwgMHgxMCwKKzB4MDIsIDB4NDAsIDB4MEIsIDB4MDAsIDB4M0QsIDB4MDAsIDB4QTQsIDB4MDAsIDB4NzAsIDB4MDIsIDB4NDAsIDB4MEIsIDB4MDAsCisweDM3LCAweDAwLCAweDhDLCAweDgwLCAweEQwLCAweDBFLCAweEMwLCAweDM5LCAweDAwLCAweEVELCAweDE0LCAweDlDLCAweDAwLAorMHgxNCwgMHgwMywgMHhDMCwgMHg0QSwgMHg2MCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHgwMCwKKzB4NzksIDB4MDAsIDB4MjksIDB4MDEsIDB4ODQsIDB4MDcsIDB4RDAsIDB4MUUsIDB4NDAsIDB4N0IsIDB4MDAsIDB4RTEsIDB4MDEsCisweDk0LCAweDA3LCAweDkwLCAweDFGLCAweDQwLCAweDc4LCAweDAwLCAweEVELCAweDAxLCAweEY0LCAweDA3LCAweDEwLCAweDFFLAorMHg0MCwgMHg3QiwgMHgwMCwgMHhFRCwgMHgwMSwgMHhBNCwgMHgwNywgMHgxMCwgMHgxRSwgMHg0MCwgMHg3QiwgMHgwMCwgMHhFRCwKKzB4MDEsIDB4ODQsIDB4ODcsIDB4NTAsIDB4MUUsIDB4NDAsIDB4N0IsIDB4MDAsIDB4RUQsIDB4ODUsIDB4OTQsIDB4MDYsIDB4NTUsCisweDFCLCAweDQwLCAweDBELCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDI4LCAweDc3LAorMHgwMiwgMHg5MSwgMHgxMCwgMHgwNCwgMHgwNiwgMHhEMCwgMHgwMCwgMHg0MCwgMHgwNywgMHgwMCwgMHgwMSwgMHgwMCwgMHgxNCwKKzB4MDAsIDB4MTAsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MEMsIDB4MDAsIDB4MzQsIDB4MDAsIDB4MTAsIDB4MDAsIDB4NDAsCisweDAzLCAweDAwLCAweDBELCAweDAwLCAweDI0LCAweDAwLCAweDUwLCAweDAxLCAweDQwLCAweDAzLCAweDEwLCAweDA1LCAweDQwLAorMHgwNCwgMHgwMCwgMHhEMCwgMHhFQywgMHg0MCwgMHgzMSwgMHgwMCwgMHhDRCwgMHgwMCwgMHgxNCwgMHgwQiwgMHg1MCwgMHg4QywKKzB4NDAsIDB4NEIsIDB4MDAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTcsIDB4QTgsIDB4OUQsIDB4MDAsCisweDdCLCAweDg3LCAweDZDLCAweDQxLCAweEYxLCAweDA1LCAweEMwLCAweDE3LCAweDAwLCAweDUzLCAweDAwLCAweDVDLCAweDAxLAorMHhCNCwgMHgwNSwgMHhDOCwgMHgxNCwgMHgxMCwgMHg1RiwgMHgwMCwgMHg3QywgMHgwMSwgMHgzMCwgMHgwNSwgMHhDNCwgMHgxNywKKzB4MDAsIDB4NUYsIDB4MDAsIDB4NDQsIDB4MDEsIDB4MzAsIDB4MDUsIDB4QzAsIDB4MTcsIDB4MDAsIDB4NUYsIDB4MDAsIDB4NEMsCisweDAxLCAweDcwLCAweDM3LCAweEMwLCAweDE3LCAweDAwLCAweDVGLCAweDAwLCAweDlFLCAweDIxLCAweDUwLCAweEI3LCAweDQwLAorMHg1RCwgMHgwMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHgwMCwgMHgwNywgMHgwNCwgMHgxRiwKKzB4MDAsIDB4N0MsIDB4MDAsIDB4RjAsIDB4MDMsIDB4QzAsIDB4MEYsIDB4MDAsIDB4M0YsIDB4NDAsIDB4RTgsIDB4MDAsIDB4NzAsCisweDAzLCAweEMwLCAweDBGLCAweDAwLCAweDNGLCAweDIwLCAweEZDLCAweDAwLCAweEYwLCAweDAzLCAweEMwLCAweDBGLCAweDAwLAorMHgzRiwgMHgwMCwgMHhEQywgMHgwMCwgMHg3MCwgMHgwMywgMHhDMCwgMHgwRiwgMHgwMCwgMHgzNywgMHgyMCwgMHhEQywgMHgwMCwKKzB4RjAsIDB4MDEsIDB4RTAsIDB4MDUsIDB4MDAsIDB4MUYsIDB4MDAsIDB4NUUsIDB4ODAsIDB4OTAsIDB4MDEsIDB4ODAsIDB4NEEsCisweDAwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDI2LCAweDAyLCAweDkzLCAweDAwLAorMHg1QywgMHgwMiwgMHhGMCwgMHg4OSwgMHhDMCwgMHgyNywgMHgwMCwgMHg5MywgMHgwMCwgMHg3QywgMHgxNiwgMHgzMCwgMHgwOSwKKzB4QzAsIDB4MjcsIDB4MDAsIDB4OUYsIDB4MDAsIDB4N0MsIDB4MDIsIDB4RjAsIDB4MDksIDB4QzAsIDB4MjQsIDB4MDAsIDB4OTMsCisweDAwLCAweDVDLCAweDAyLCAweEYwLCAweDE5LCAweEMwLCAweDI3LCAweDAwLCAweDlGLCAweDAyLCAweDdDLCAweDAyLCAweDMwLAorMHgwOSwgMHhDMCwgMHgyNCwgMHgxMCwgMHg5RiwgMHg4MCwgMHg3RSwgMHgyNiwgMHgzMCwgMHg4OSwgMHhDMiwgMHg0MywgMHgwMCwKKzB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MjAsIDB4NjYsIDB4MDAsIDB4OTEsIDB4MjAsIDB4NDQsCisweDAyLCAweDkwLCAweDE5LCAweDQ0LCAweEE3LCAweDAwLCAweDkxLCAweDAyLCAweDM0LCAweDAyLCAweDEwLCAweDA5LCAweDQwLAorMHgyNywgMHgwMCwgMHg5RCwgMHgwMCwgMHg3NCwgMHgwMiwgMHhEMCwgMHgwOCwgMHg1MCwgMHgyMCwgMHg0MCwgMHg5MSwgMHgwMiwKKzB4NzQsIDB4MDIsIDB4RDAsIDB4MTksIDB4NDAsIDB4MjQsIDB4MDAsIDB4OUYsIDB4MDIsIDB4MzQsIDB4MDIsIDB4MTAsIDB4MDksCisweDQwLCAweDI0LCAweDAwLCAweDlELCAweDAyLCAweDc0LCAweDA2LCAweDE0LCAweDM5LCAweDQwLCAweDA3LCAweDAwLCAweDA4LAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHhBMCwgMHgyNCwgMHg0MCwgMHg5MSwgMHgwMCwgMHg0NCwgMHgwMiwKKzB4RDAsIDB4MDksIDB4NDAsIDB4MkYsIDB4MDAsIDB4QjEsIDB4MDAsIDB4RjQsIDB4MDIsIDB4MTAsIDB4MEIsIDB4NDAsIDB4MkYsCisweDAwLCAweEJELCAweDAwLCAweEY0LCAweDgyLCAweEQwLCAweDBCLCAweDQwLCAweDJDLCAweDAwLCAweEIxLCAweDAwLCAweEY0LAorMHgyMiwgMHhEMCwgMHg0QiwgMHg0MCwgMHgyRSwgMHgwMSwgMHhCRCwgMHgwMCwgMHhGNCwgMHgwMiwgMHgxMCwgMHgwOCwgMHg0MCwKKzB4MjQsIDB4MDAsIDB4OUQsIDB4MEEsIDB4NTQsIDB4MDMsIDB4MTAsIDB4MDksIDB4NDAsIDB4NjMsIDB4MDAsIDB4MDIsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDIwLCAweDIwLCAweDQxLCAweDgxLCAweDA0LCAweDA1LCAweDAyLCAweDkwLAorMHgwQSwgMHg0MCwgMHg2QiwgMHgwMCwgMHhBMSwgMHgwMSwgMHhGNCwgMHgwMiwgMHgxNSwgMHgwRSwgMHg0MiwgMHgyQiwgMHgwMCwKKzB4QUQsIDB4MDAsIDB4QjQsIDB4ODIsIDB4RDAsIDB4MEIsIDB4NDAsIDB4MkMsIDB4MDAsIDB4QTEsIDB4MDEsIDB4QjYsIDB4MDIsCisweEQwLCAweDBBLCAweDQwLCAweDI4LCAweDAwLCAweEFELCAweDAxLCAweEY0LCAweDAyLCAweDE0LCAweDQ4LCAweDQwLCAweDIwLAorMHgwMiwgMHg4RCwgMHgwNCwgMHgzNCwgMHgxMiwgMHgxMCwgMHg0QywgMHg0MCwgMHg0MywgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MUQsIDB4QjAsIDB4ODIsIDB4MDIsIDB4MTMsIDB4MEEsIDB4NUMsIDB4MjgsIDB4RjAsIDB4MDEsCisweEMwLCAweDg3LCAweDQyLCAweDEzLCAweDBBLCAweDdDLCAweDAwLCAweDMwLCAweDAxLCAweEMwLCAweDg3LCAweDAyLCAweDFGLAorMHgwQSwgMHg3QywgMHgyOCwgMHhEMCwgMHhBMSwgMHhDMCwgMHg4NCwgMHgwMiwgMHgxMywgMHgwQSwgMHg3QywgMHgwMCwgMHhGMCwKKzB4QTEsIDB4QzAsIDB4MDcsIDB4MDAsIDB4MUYsIDB4MEEsIDB4RkMsIDB4MjgsIDB4MzAsIDB4QTEsIDB4RDAsIDB4ODQsIDB4MTAsCisweDFGLCAweDAwLCAweDdDLCAweDI4LCAweDMwLCAweDAxLCAweEMwLCAweDc3LCAweEMwLCAweDBBLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgxOSwgMHhCOCwgMHgzRiwgMHgwMiwgMHhCRiwgMHgwOCwgMHhGQywgMHgwMiwgMHhGMCwgMHgwOSwgMHhDMCwKKzB4MjcsIDB4MDAsIDB4OUYsIDB4ODAsIDB4N0MsIDB4MDIsIDB4RjAsIDB4MDksIDB4QzAsIDB4MjcsIDB4MDAsIDB4OUYsIDB4MDAsCisweDdDLCAweDAyLCAweEYwLCAweDA5LCAweDgwLCAweDI3LCAweDAwLCAweDlGLCAweDAwLCAweDdDLCAweDAyLCAweEYwLCAweDA5LAorMHhDMCwgMHgyNywgMHgwMCwgMHg5NywgMHgwMCwgMHg3QywgMHgwMiwgMHhGMCwgMHg4QiwgMHhDMCwgMHgyNywgMHgyMSwgMHg5RiwKKzB4MDgsIDB4RkMsIDB4MjMsIDB4RjgsIDB4OEIsIDB4QzAsIDB4NjcsIDB4NjAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDE5LCAweEEwLCAweDJGLCAweDA1LCAweEEzLCAweDhDLCAweDVDLCAweDAyLCAweDM1LCAweDBCLCAweEMwLCAweDJGLAorMHgwMiwgMHhCRiwgMHgwMCwgMHhGQywgMHgwMiwgMHg3MCwgMHgwQiwgMHhFMCwgMHgyNSwgMHgwMCwgMHg5RiwgMHgwMCwgMHg0RCwKKzB4MjIsIDB4RjEsIDB4MDksIDB4QzAsIDB4MjQsIDB4MDAsIDB4QkYsIDB4MDgsIDB4RkMsIDB4MDIsIDB4RjAsIDB4MEIsIDB4QzAsCisweDJFLCAweDAwLCAweEJGLCAweDAwLCAweDdDLCAweDAyLCAweDMwLCAweEM5LCAweEUyLCAweDI0LCAweDgwLCAweEJGLCAweEEwLAorMHhDOCwgMHg4MywgMHgzMCwgMHgwQiwgMHhDMCwgMHg2NywgMHgwMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MUMsIDB4MDgsIDB4MDMsIDB4MDEsIDB4MTEsIDB4MEMsIDB4NDUsIDB4NDAsIDB4MTAsIDB4MDEsIDB4NDAsIDB4MDMsIDB4MDAsCisweDFELCAweDE0LCAweDc0LCAweDAwLCAweDEwLCAweDAxLCAweDQwLCAweDA0LCAweDA0LCAweDFELCAweDEwLCAweDQ0LCAweDAwLAorMHhEMCwgMHg0MSwgMHg0MSwgMHgwNCwgMHgwMSwgMHgwRCwgMHgwNCwgMHg3NCwgMHgwMCwgMHhEMCwgMHgwMSwgMHg0MSwgMHgwNCwKKzB4MTAsIDB4MEQsIDB4NTQsIDB4NzQsIDB4MTAsIDB4NTAsIDB4QzEsIDB4NTAsIDB4MDQsIDB4MjQsIDB4MUQsIDB4MDAsIDB4NDUsCisweDAwLCAweDEwLCAweDAxLCAweDQwLCAweDczLCAweDIwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLAorMHhBMCwgMHgyMywgMHgwNSwgMHg4MSwgMHgwNCwgMHgwNCwgMHgxMiwgMHgxMCwgMHgwOCwgMHg0MCwgMHgyMywgMHgwMCwgMHg4RCwKKzB4MDQsIDB4MzQsIDB4MDIsIDB4NTAsIDB4MDgsIDB4NDAsIDB4MjAsIDB4MDEsIDB4OEQsIDB4MDAsIDB4MTQsIDB4MDIsIDB4RDAsCisweDQ5LCAweDUwLCAweDIwLCAweDA1LCAweDhELCAweDA0LCAweDM0LCAweDAzLCAweEQwLCAweDA4LCAweDQwLCAweDIyLCAweDAwLAorMHg4RCwgMHgwNCwgMHgzNCwgMHg1MiwgMHg1MCwgMHg1OCwgMHg0MCwgMHgyMSwgMHgwMSwgMHg4RCwgMHhBOCwgMHgwNCwgMHg4MiwKKzB4MTAsIDB4MDgsIDB4NDAsIDB4NDMsIDB4ODAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4QTgsCisweDI1LCAweDQwLCAweDkxLCAweDAyLCAweDQ0LCAweDIyLCAweDEwLCAweDA5LCAweDQwLCAweDM3LCAweDAwLCAweDlELCAweDAwLAorMHg3NCwgMHgwMiwgMHg1MCwgMHgwOSwgMHg0MCwgMHgyNCwgMHgwMCwgMHg5RCwgMHgwMCwgMHg1NiwgMHgwMiwgMHhDMCwgMHgwOSwKKzB4NDAsIDB4MjQsIDB4MDAsIDB4REQsIDB4MDAsIDB4NzQsIDB4MDIsIDB4RDAsIDB4MDksIDB4NDAsIDB4MjQsIDB4MDAsIDB4REQsCisweDAwLCAweDM0LCAweDAyLCAweDUwLCAweDA5LCAweDQwLCAweDI0LCAweDAwLCAweDlELCAweDQwLCAweDA2LCAweDAyLCAweDE0LAorMHg0OSwgMHg0MCwgMHg2MywgMHgyOCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHhBOCwgMHhBMywKKzB4MDAsIDB4OTMsIDB4MDAsIDB4NEMsIDB4MDIsIDB4MzAsIDB4MDksIDB4QzAsIDB4MjcsIDB4MDAsIDB4OUYsIDB4MDAsIDB4N0MsCisweDAyLCAweDUwLCAweDA4LCAweDUwLCAweDI1LCAweDA4LCAweDlGLCAweDAwLCAweDVDLCAweDAyLCAweEYyLCAweDA5LCAweEM4LAorMHgyNCwgMHgwMCwgMHg5RiwgMHgwMCwgMHg3QywgMHgwMiwgMHhGMCwgMHgwOSwgMHhDMCwgMHgyNiwgMHgwMCwgMHg5RCwgMHgwMCwKKzB4N0MsIDB4MDIsIDB4MzQsIDB4MDksIDB4NDAsIDB4MjUsIDB4MDAsIDB4OUQsIDB4ODAsIDB4NEMsIDB4MEEsIDB4MjAsIDB4MDksCisweEMxLCAweDE3LCAweEEwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDgwLCAweDY1LCAweDAyLAorMHg5RiwgMHgwMCwgMHg3QywgMHgwNiwgMHhGMCwgMHgwOSwgMHhDMCwgMHgyNywgMHgwMCwgMHg5RiwgMHgwMCwgMHg3QywgMHgwMiwKKzB4QjAsIDB4MDksIDB4QzAsIDB4MjcsIDB4MDAsIDB4OUYsIDB4MDAsIDB4NkMsIDB4MDIsIDB4RjAsIDB4MDksIDB4QzQsIDB4MjcsCisweDAwLCAweDlGLCAweDAwLCAweDdDLCAweDAyLCAweEYwLCAweDA5LCAweEMwLCAweDI3LCAweDAwLCAweDlGLCAweDEwLCAweDY0LAorMHgwMiwgMHhCMCwgMHgwOCwgMHhDMCwgMHgyNywgMHgwMCwgMHg4RiwgMHgxMCwgMHg3QywgMHgwQSwgMHhGMCwgMHgwOSwgMHhDMiwKKzB4NTMsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDgsIDB4ODUsIDB4MjAsIDB4MTMsCisweDQwLCAweDVDLCAweDAwLCAweEYwLCAweDAxLCAweEMwLCAweDA3LCAweDAwLCAweDEzLCAweDAwLCAweDRDLCAweDkwLCAweEUyLAorMHgwMSwgMHhDMCwgMHgwNywgMHgyMCwgMHgxRiwgMHgwMCwgMHg2QywgMHgwMCwgMHhEMCwgMHgwMSwgMHhDMCwgMHgwNywgMHgwMCwKKzB4MUYsIDB4MDgsIDB4NEMsIDB4MDAsIDB4RjAsIDB4MDEsIDB4QzAsIDB4MDcsIDB4MDIsIDB4MTMsIDB4MDAsIDB4NEMsIDB4MDAsCisweEYwLCAweDAxLCAweEMwLCAweDA1LCAweDA4LCAweDFELCAweDAwLCAweDdDLCAweDAwLCAweDMwLCAweDAxLCAweEMwLCAweDUwLAorMHgyMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHg4MCwgMHgxQywgMHgwMiwgMHg1MSwgMHg4MSwKKzB4NDUsIDB4MDEsIDB4NzAsIDB4MTUsIDB4NDAsIDB4NUYsIDB4MDEsIDB4NzEsIDB4MDAsIDB4ODQsIDB4MEQsIDB4MTAsIDB4OTcsCisweDQwLCAweDE3LCAweDAwLCAweDVELCAweDAwLCAweDcwLCAweDAxLCAweDk4LCAweDA0LCAweDQwLCAweDE3LCAweDAwLCAweDdELAorMHgwMCwgMHg0NCwgMHgwMSwgMHg3MCwgMHgwNSwgMHg0MCwgMHg1NywgMHgwMCwgMHg3QiwgMHgwMywgMHg0NCwgMHgwMSwgMHhDMCwKKzB4MDUsIDB4NDAsIDB4MTcsIDB4MTAsIDB4N0MsIDB4MDIsIDB4NzQsIDB4MDEsIDB4MTAsIDB4MDcsIDB4MDAsIDB4NTAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweEEwLCAweDcyLCAweDAwLCAweEQxLCAweDAwLCAweDQ0LAorMHgwMywgMHg1MCwgMHg4OCwgMHg0MCwgMHg3MywgMHg0MCwgMHhDNSwgMHgwOCwgMHgwNCwgMHgwQiwgMHg1MCwgMHgyQywgMHg0MCwKKzB4MzMsIDB4MDAsIDB4REQsIDB4MDAsIDB4MjQsIDB4MDMsIDB4RDIsIDB4MEMsIDB4NDQsIDB4MzMsIDB4MDAsIDB4Q0QsIDB4MTAsCisweDI1LCAweDAyLCAweDUwLCAweDFELCAweDQwLCAweDYzLCAweDAwLCAweEMxLCAweDBBLCAweDI1LCAweDAzLCAweEQwLCAweDBDLAorMHg2MCwgMHgzMywgMHgwMCwgMHg0RCwgMHgwQiwgMHgzNCwgMHgwMiwgMHg1MCwgMHgwQywgMHgwMCwgMHg1MCwgMHgwMCwgMHgwQSwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4ODAsIDB4MzgsIDB4MDQsIDB4QjEsIDB4MDIsIDB4ODQsIDB4MzMsCisweDUwLCAweDBFLCAweDQwLCAweDVCLCAweDAwLCAweDY1LCAweDAxLCAweDg0LCAweDQzLCAweDEwLCAweDBBLCAweDQxLCAweDNCLAorMHgwMSwgMHhFRCwgMHgwNCwgMHhCNCwgMHgyMywgMHg5MCwgMHgwRSwgMHg0MCwgMHgzQiwgMHgxMCwgMHhFRCwgMHgwMSwgMHhBNCwKKzB4MDMsIDB4NTAsIDB4MkUsIDB4NDAsIDB4N0IsIDB4MDAsIDB4RTksIDB4MjEsIDB4QTYsIDB4MDMsIDB4RDAsIDB4NEUsIDB4NDAsCisweDNCLCAweDAxLCAweDY5LCAweDAwLCAweEI0LCAweDAzLCAweDU4LCAweDFDLCAweDQ0LCAweDEwLCAweDAwLCAweDAyLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwgMHgxMCwgMHg3OCwgMHgwMiwgMHhFMywgMHgwMSwgMHg5QywgMHgyNywgMHg3MSwKKzB4MUUsIDB4QzAsIDB4N0IsIDB4MjAsIDB4RjcsIDB4MDEsIDB4OEQsIDB4MDYsIDB4NzAsIDB4MUUsIDB4QzAsIDB4N0IsIDB4MDAsCisweEVELCAweDA1LCAweEFDLCAweDg3LCAweEQwLCAweDNFLCAweEMwLCAweDdCLCAweDAyLCAweEVGLCAweDAxLCAweEFDLCAweDA3LAorMHg3MCwgMHgxRSwgMHhDMCwgMHg3QiwgMHgwMCwgMHhFMywgMHgwMSwgMHhBQywgMHg5NywgMHhGMCwgMHg5RSwgMHhFMCwgMHg3QiwKKzB4MjAsIDB4NkQsIDB4MjEsIDB4QkMsIDB4MDcsIDB4NzQsIDB4MUUsIDB4QzIsIDB4NTAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDEwLCAweEIwLCAweEJELCAweDQwLCAweDlGLCAweDA2LCAweDdDLCAweDAzLCAweDcwLCAweDBELAorMHhDMCwgMHgxNywgMHgwMCwgMHg1QiwgMHgwMCwgMHgzQywgMHgwMiwgMHg3MCwgMHgwOSwgMHhDMCwgMHgzNywgMHgwNCwgMHhERiwKKzB4MDIsIDB4N0MsIDB4MEIsIDB4RjAsIDB4MkQsIDB4QzAsIDB4MzcsIDB4MDAsIDB4REYsIDB4MDAsIDB4NUMsIDB4MDMsIDB4NjAsCisweDBELCAweEMwLCAweDMzLCAweDAwLCAweDlGLCAweDAwLCAweDVDLCAweDBCLCAweEYwLCAweEFELCAweEMwLCAweDM3LCAweDAwLAorMHgxRiwgMHgwMCwgMHgzQywgMHg1QiwgMHhCMCwgMHgwOSwgMHhDMiwgMHg0MywgMHg2MCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDIsIDB4QTAsIDB4NEYsIDB4NDAsIDB4QjMsIDB4MDMsIDB4Q0MsIDB4MTMsIDB4RjAsIDB4MUUsIDB4QzAsCisweDZDLCAweDAwLCAweEJGLCAweDAxLCAweDhDLCAweDA2LCAweDMwLCAweDFCLCAweEMwLCAweDdCLCAweDA0LCAweEYzLCAweDEzLAorMHhDQywgMHgwRiwgMHgzMCwgMHgzRiwgMHhDMCwgMHg3RiwgMHgwNCwgMHhGRiwgMHg4MSwgMHhGQywgMHg4NywgMHhCMCwgMHgxRiwKKzB4QzAsIDB4N0YsIDB4MDAsIDB4QkYsIDB4MDEsIDB4RkMsIDB4NEYsIDB4RjAsIDB4MUYsIDB4QzAsIDB4N0MsIDB4MDQsIDB4N0YsCisweDA5LCAweENDLCAweDA2LCAweDMwLCAweDlELCAweEMyLCAweDBCLCAweDAwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgxNSwgMHg4OCwgMHgwOSwgMHgwMCwgMHhBMSwgMHgwMCwgMHg4NCwgMHgwMywgMHhEMCwgMHgwRSwgMHg0MCwgMHgwOCwKKzB4MDQsIDB4MkQsIDB4NDQsIDB4ODQsIDB4MDIsIDB4MTAsIDB4MEEsIDB4NDAsIDB4M0IsIDB4MDAsIDB4RTEsIDB4MDAsIDB4QzQsCisweDAzLCAweDEwLCAweDBFLCAweDQwLCAweDNCLCAweDAwLCAweEFELCAweDEwLCAweEI0LCAweDAzLCAweDEwLCAweDBFLCAweDQwLAorMHgzQiwgMHgwMCwgMHhBRCwgMHgxMCwgMHhCQywgMHgyMywgMHhEMCwgMHgwRSwgMHhDMCwgMHgzQSwgMHgwMCwgMHg2RCwgMHgwOCwKKzB4ODQsIDB4MDMsIDB4MTEsIDB4M0UsIDB4NDAsIDB4NTcsIDB4MjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDA4LCAweDAwLCAweDExLCAweDAwLCAweDgxLCAweDAwLCAweDg0LCAweDYzLCAweEQwLCAweDBGLCAweDQwLCAweDJBLCAweDAwLAorMHhBRCwgMHgwMCwgMHhDNiwgMHgwMiwgMHgxMCwgMHgwQSwgMHg0MCwgMHhCRiwgMHgwMCwgMHhGMSwgMHgwMiwgMHg4NCwgMHgyMywKKzB4MTAsIDB4MEUsIDB4NDAsIDB4M0IsIDB4MDAsIDB4NkQsIDB4MDgsIDB4RjQsIDB4MDMsIDB4MTAsIDB4MEUsIDB4NDAsIDB4M0IsCisweDAyLCAweDZELCAweDA4LCAweEI0LCAweDAzLCAweEQwLCAweDBDLCAweDQwLCAweDM4LCAweDAyLCAweENELCAweDQ4LCAweDg2LAorMHgwMywgMHg1MCwgMHg4RSwgMHg0MCwgMHgyMywgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNiwKKzB4MjgsIDB4MTMsIDB4MDAsIDB4ODEsIDB4NDIsIDB4MDYsIDB4MDcsIDB4RDAsIDB4NEMsIDB4NDAsIDB4NDIsIDB4MDEsIDB4MEQsCisweDBELCAweDA0LCAweDBFLCAweDEwLCAweDY4LCAweDQwLCAweDczLCAweDAwLCAweEMxLCAweDAxLCAweDA0LCAweDQzLCAweDEwLAorMHgxQywgMHg0MSwgMHgzMywgMHgwNCwgMHgwRCwgMHgwNSwgMHgzNCwgMHg0MywgMHgxOCwgMHgzOCwgMHg0MCwgMHg3MywgMHgwMCwKKzB4MUQsIDB4MDUsIDB4MTYsIDB4MkIsIDB4RDEsIDB4MEMsIDB4NTAsIDB4MzAsIDB4MDgsIDB4MEQsIDB4MDAsIDB4NDAsIDB4MEIsCisweDU4LCAweDI4LCAweDQxLCAweDFCLCAweDIwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFELCAweEE4LAorMHgyMSwgMHgxMSwgMHhEMSwgMHgwMiwgMHhDQywgMHgwNywgMHhGMCwgMHgyQywgMHhDMCwgMHhGNiwgMHgwMCwgMHhERiwgMHgwMiwKKzB4NEQsIDB4NDQsIDB4MzQsIDB4MUQsIDB4QzAsIDB4M0YsIDB4MDAsIDB4RTMsIDB4MDQsIDB4QzQsIDB4MDcsIDB4MzAsIDB4MEYsCisweDQwLCAweDdCLCAweDAwLCAweDFGLCAweDAzLCAweDNDLCAweDBCLCAweDMwLCAweDlELCAweDQwLCAweEI3LCAweDA0LCAweDVGLAorMHgwMywgMHhCNCwgMHgwNywgMHhGMCwgMHgwRiwgMHgwMCwgMHgzQywgMHgwMCwgMHhERiwgMHgwMCwgMHg0QywgMHgyMiwgMHg3MiwKKzB4M0QsIDB4QzQsIDB4NTcsIDB4MjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4ODcsCisweDAwLCAweERGLCAweDAwLCAweDdDLCAweDAzLCAweEYwLCAweDFELCAweEMwLCAweDI1LCAweDAwLCAweDlGLCAweDAwLCAweDdDLAorMHgwMiwgMHhGMCwgMHg4RCwgMHhDMCwgMHgzNywgMHgyMiwgMHhERiwgMHgwMCwgMHg3QywgMHgyMywgMHhGMCwgMHg4RCwgMHhDMCwKKzB4MzcsIDB4MDIsIDB4MUYsIDB4MDIsIDB4N0MsIDB4MDcsIDB4NzAsIDB4OEQsIDB4QzAsIDB4MzcsIDB4MDEsIDB4NUYsIDB4NDAsCisweDdDLCAweDQzLCAweEYwLCAweDFELCAweEMwLCAweDM3LCAweDAwLCAweERELCAweDAyLCAweDdDLCAweDA3LCAweDk2LCAweDFELAorMHg0MCwgMHgyNywgMHgwMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwOCwgMHgyRiwgMHg4MCwKKzB4RjMsIDB4MTAsIDB4Q0MsIDB4MDMsIDB4RjAsIDB4MUYsIDB4QzAsIDB4OUMsIDB4MjAsIDB4N0YsIDB4MDAsIDB4Q0MsIDB4NTEsCisweDcwLCAweDBGLCAweEMwLCAweDNGLCAweDAwLCAweEYzLCAweDIwLCAweENDLCAweDAzLCAweEYwLCAweDBGLCAweEM0LCAweDNGLAorMHg4MCwgMHgzMywgMHgwMCwgMHhGQywgMHgwMywgMHgzMSwgMHgwRiwgMHhDMCwgMHgzRiwgMHgwMCwgMHg3RiwgMHgwMCwgMHhDQywKKzB4MDMsIDB4MzAsIDB4MEUsIDB4QzAsIDB4M0MsIDB4MDAsIDB4RkYsIDB4QTAsIDB4NEMsIDB4ODMsIDB4MzAsIDB4MTcsIDB4QzIsCisweDA3LCAweDI0LCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweEExLCAweDIwLCAweDQ2LCAweDAxLCAweEMxLAorMHgwOSwgMHg0NSwgMHgwMywgMHhEMCwgMHgxRCwgMHg0MCwgMHhDNCwgMHgxMCwgMHgxRCwgMHg1QiwgMHgwNCwgMHgxRiwgMHg1MCwKKzB4NzUsIDB4NDAsIDB4MzMsIDB4MDAsIDB4RDEsIDB4MDAsIDB4NDQsIDB4MDMsIDB4RDAsIDB4MEQsIDB4NDIsIDB4MzcsIDB4NDAsCisweDExLCAweDAyLCAweDc0LCAweDAzLCAweDUwLCAweDBELCAweDQ4LCAweDM3LCAweDIwLCAweDFELCAweDAyLCAweDZDLCAweDAzLAorMHhCMCwgMHgwRCwgMHg0MCwgMHgzNSwgMHgxMCwgMHg4RCwgMHgwNywgMHg1NCwgMHgwMywgMHgxNCwgMHgzRCwgMHg0MCwgMHg4NywKKzB4MDIsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4QTAsIDB4NDQsIDB4MDAsIDB4OTksIDB4MDAsCisweDQ0LCAweDAzLCAweEQwLCAweDhELCAweDQwLCAweDM0LCAweDAwLCAweENELCAweDAwLCAweDQ0LCAweDAzLCAweDUwLCAweDFELAorMHg0MCwgMHgzNywgMHgwMCwgMHhEMSwgMHgwMCwgMHg0NCwgMHgwMywgMHhEMCwgMHgwRCwgMHg0MCwgMHgzNywgMHgwMCwgMHhEMSwKKzB4MDgsIDB4NzQsIDB4MDcsIDB4OTAsIDB4MEQsIDB4NDAsIDB4MzcsIDB4MDIsIDB4OUQsIDB4MDAsIDB4NDQsIDB4MDMsIDB4MTAsCisweDBELCAweDQwLCAweDM0LCAweDAwLCAweDFELCAweDAxLCAweDY1LCAweDAyLCAweDEwLCAweDhELCAweDQwLCAweDA3LCAweDAwLAorMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgyMCwgMHgwNCwgMHgwMCwgMHg5MSwgMHg4MCwgMHgwNCwKKzB4MDMsIDB4RDAsIDB4MEMsIDB4NDAsIDB4MjAsIDB4MDAsIDB4OEQsIDB4MDAsIDB4MDUsIDB4MDMsIDB4NTAsIDB4MEMsIDB4NDAsCisweDM3LCAweDAwLCAweEQxLCAweDAwLCAweDA0LCAweDAzLCAweEQwLCAweDBDLCAweDQwLCAweDM3LCAweDAwLCAweDgxLCAweDAwLAorMHg2NCwgMHgwMywgMHg5OCwgMHgwQywgMHg0MCwgMHgzMywgMHgwMCwgMHg4RCwgMHgwMCwgMHg2NSwgMHgwMywgMHg5MCwgMHgwQywKKzB4NDAsIDB4MzAsIDB4MDAsIDB4OEQsIDB4MDAsIDB4MTQsIDB4MDMsIDB4MTAsIDB4NEMsIDB4NDAsIDB4NDMsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweEIwLCAweDBFLCAweDAwLCAweEJCLCAweDQwLCAweENDLCAweDAzLAorMHhGMCwgMHgwRCwgMHhDMCwgMHgxNCwgMHgwMCwgMHg0RiwgMHgwMCwgMHg0QywgMHgwMywgMHg3MCwgMHgwRCwgMHhDMCwgMHgzRiwKKzB4MDAsIDB4RjMsIDB4MDAsIDB4Q0MsIDB4MDMsIDB4RjAsIDB4MEYsIDB4NDAsIDB4M0YsIDB4MDAsIDB4NTEsIDB4MDAsIDB4N0MsCisweDAzLCAweEIwLCAweDBELCAweEMwLCAweDM3LCAweDEwLCAweDVGLCAweDQwLCAweENDLCAweDAzLCAweDMwLCAweDBGLCAweEMwLAorMHgzNCwgMHgwMCwgMHg5RiwgMHgyMCwgMHhDQywgMHgwMywgMHgzMCwgMHgwNSwgMHhDMiwgMHgwNywgMHg0MCwgMHgwOCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4QjgsIDB4MEYsIDB4MDAsIDB4QkYsIDB4MDAsIDB4RkMsIDB4MDMsIDB4RjAsCisweDBGLCAweEMwLCAweDBGLCAweDAwLCAweDNGLCAweDQwLCAweEZDLCAweDAzLCAweEYwLCAweDBGLCAweEMwLCAweDNGLCAweDAwLAorMHhFRiwgMHg0MCwgMHhGQywgMHgwMywgMHhGMCwgMHgwRiwgMHhFMCwgMHgzRiwgMHgwMCwgMHgzRiwgMHg4MCwgMHhCQywgMHgwMywKKzB4NzAsIDB4MEIsIDB4QzAsIDB4M0YsIDB4MTAsIDB4M0YsIDB4ODAsIDB4REMsIDB4MDMsIDB4RjAsIDB4MEYsIDB4QzAsIDB4M0YsCisweDIwLCAweEJGLCAweDAwLCAweEZDLCAweDAzLCAweEYwLCAweDJGLCAweEMwLCAweDE3LCAweDYwLCAweDBFLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHhBMCwgMHg3QiwgMHgwMCwgMHhGRiwgMHgwMSwgMHhDQywgMHgyNywgMHhFMCwgMHgxRiwKKzB4QzAsIDB4N0MsIDB4MDIsIDB4RkIsIDB4MDEsIDB4QkUsIDB4MEYsIDB4MTEsIDB4M0YsIDB4QzAsIDB4N0MsIDB4ODIsIDB4RjMsCisweDAxLCAweEZDLCAweDA3LCAweEYwLCAweDFGLCAweEMwLCAweEZGLCAweDAwLCAweEZCLCAweDAxLCAweERDLCAweDA3LCAweDMwLAorMHg5RiwgMHhDMCwgMHg1RSwgMHgwMiwgMHhCMywgMHg4NCwgMHhFQywgMHgzMSwgMHhGMCwgMHgxRiwgMHhFNCwgMHg3RiwgMHgwMCwKKzB4RkYsIDB4QzEsIDB4RUMsIDB4MjQsIDB4QjAsIDB4MTcsIDB4QzAsIDB4MEMsIDB4MDAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAxLCAweDA4LCAweDA3LCAweDAwLCAweDFELCAweDEwLCAweDY5LCAweDAwLCAweEYxLCAweDExLCAweDQwLAorMHgwMCwgMHgyMCwgMHgxMSwgMHgwMSwgMHg3NCwgMHgwMCwgMHgxMCwgMHgwMSwgMHg0MCwgMHgwMCwgMHgwMSwgMHgxNywgMHgwMSwKKzB4NzQsIDB4MDQsIDB4RDAsIDB4MTEsIDB4NDAsIDB4MDQsIDB4MjAsIDB4MUQsIDB4MDEsIDB4NDQsIDB4ODQsIDB4QjAsIDB4MDEsCisweDQwLCAweDE1LCAweDAxLCAweEQ1LCAweDA5LCAweDQ0LCAweEIzLCAweEQwLCAweDFGLCAweDQyLCAweDdGLCAweDAwLCAweEZELAorMHgwMSwgMHgwNCwgMHgxMCwgMHgxMCwgMHgxOSwgMHg0MCwgMHgwNSwgMHgyMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MTEsIDB4QTAsIDB4MzMsIDB4MDAsIDB4REQsIDB4ODQsIDB4MDAsIDB4MTMsIDB4RDAsIDB4MEQsIDB4NDAsIDB4MzAsCisweDIxLCAweEM5LCAweDAwLCAweDMwLCAweDEzLCAweDEwLCAweDRELCAweDQwLCAweDM0LCAweDAwLCAweEMxLCAweDAwLCAweDM0LAorMHg4MywgMHhDMCwgMHgwRCwgMHgwMCwgMHgzMCwgMHgwMSwgMHhDRCwgMHg2MCwgMHg0MCwgMHgwMywgMHg5MiwgMHg0QywgMHg0MCwKKzB4MjAsIDB4MDAsIDB4ODUsIDB4MDAsIDB4MTQsIDB4MDEsIDB4NTAsIDB4MEMsIDB4NDAsIDB4MzMsIDB4ODAsIDB4QzUsIDB4MDAsCisweDQ0LCAweDEwLCAweDkxLCAweDBELCAweDY0LCAweDQ0LCAweDgwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMywgMHhBOCwgMHgwNSwgMHgwMCwgMHgxRCwgMHgwMCwgMHg0NiwgMHg4MCwgMHg1MCwgMHgwMSwgMHg0MCwgMHgwNCwgMHgwMCwKKzB4MTEsIDB4MDAsIDB4NzQsIDB4MDAsIDB4MTAsIDB4MDEsIDB4NDAsIDB4MDQsIDB4MDAsIDB4MTUsIDB4MDAsIDB4NzQsIDB4MDAsCisweEQwLCAweDAxLCAweDUwLCAweDA0LCAweDA4LCAweDFELCAweDAwLCAweDU0LCAweDAwLCAweDk4LCAweDAxLCAweDQwLCAweDIxLAorMHgwMCwgMHg5NCwgMHgwMCwgMHg2NCwgMHgxMSwgMHhEMCwgMHgwRCwgMHg2MCwgMHgzNywgMHgwMCwgMHhERCwgMHgwMCwgMHg0NCwKKzB4MDYsIDB4MTAsIDB4MDksIDB4NDAsIDB4MEQsIDB4MjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDg4LCAweDM3LCAweDAwLCAweENGLCAweDAwLCAweDQ0LCAweDAzLCAweEQxLCAweDBDLCAweEQwLCAweDM0LCAweDAwLCAweERCLAorMHgwMCwgMHg3NCwgMHgwMywgMHgzNCwgMHgwQywgMHhEMCwgMHgzMCwgMHgwMCwgMHhEMywgMHg4MCwgMHg3QywgMHgwMywgMHhGMSwKKzB4MEQsIDB4NDAsIDB4MzYsIDB4MDgsIDB4REIsIDB4MDAsIDB4MUMsIDB4MDMsIDB4QjAsIDB4MEQsIDB4QzIsIDB4QTYsIDB4MDAsCisweDg3LCAweDAxLCAweDdELCAweDAxLCAweEYwLCAweDBELCAweDQwLCAweDM3LCAweDAwLCAweENGLCAweDAwLCAweDJELCAweDA0LAorMHhCMCwgMHhENCwgMHg0MCwgMHgwMCwgMHgyMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNywgMHg4MCwKKzB4MEQsIDB4MDAsIDB4M0YsIDB4MDAsIDB4RkMsIDB4MDAsIDB4RjAsIDB4MDMsIDB4QzAsIDB4MEYsIDB4MDAsIDB4M0YsIDB4MDAsCisweEZDLCAweDAwLCAweEYwLCAweDAzLCAweEMwLCAweDBGLCAweDAwLCAweDNGLCAweDgwLCAweEY0LCAweDAwLCAweEYwLCAweDAzLAorMHhDMCwgMHgwRCwgMHgwMCwgMHgzRCwgMHgwMCwgMHhFRCwgMHg0MCwgMHhGMCwgMHgwMywgMHhDMCwgMHgzRiwgMHgwOCwgMHhGRiwKKzB4MDUsIDB4Q0MsIDB4MDMsIDB4RjAsIDB4MEYsIDB4NDAsIDB4M0UsIDB4MjAsIDB4RkYsIDB4MDAsIDB4RkUsIDB4MDAsIDB4RjAsCisweDFCLCAweEQwLCAweDFFLCAweDAwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweDA4LCAweDM1LAorMHgwNCwgMHhEMywgMHgwMSwgMHg3QywgMHgwMywgMHhGMCwgMHgwRCwgMHhDOCwgMHgzNCwgMHgxMCwgMHhENywgMHgwOCwgMHg2RSwKKzB4QTMsIDB4MzAsIDB4MEQsIDB4QzAsIDB4MzcsIDB4MDAsIDB4REIsIDB4ODQsIDB4N0MsIDB4ODMsIDB4RjAsIDB4MEQsIDB4QzAsCisweDM3LCAweDAwLCAweERGLCAweDA4LCAweDZDLCAweDAzLCAweEYwLCAweDBELCAweEMwLCAweEE2LCAweDIwLCAweDk3LCAweDI0LAorMHg2RSwgMHgwOSwgMHhGMCwgMHgwRCwgMHhDMCwgMHgzNywgMHgyOCwgMHhERiwgMHgyMCwgMHg3QywgMHgwMiwgMHgzMCwgMHgyRCwKKzB4QzAsIDB4MEIsIDB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTMsIDB4QTAsIDB4QzQsIDB4MDEsCisweDExLCAweDAxLCAweDc0LCAweDAwLCAweEQwLCAweDAxLCAweEQwLCAweDA2LCAweDAwLCAweDExLCAweDAxLCAweDQ0LCAweDA0LAorMHgxNCwgMHg1MSwgMHg0MCwgMHgwNywgMHgzMCwgMHgxMSwgMHgxMCwgMHg1QywgMHgwMCwgMHhEOSwgMHgwMCwgMHhDMSwgMHg0NSwKKzB4MjQsIDB4MEQsIDB4QUEsIDB4NjQsIDB4MDAsIDB4NzAsIDB4NDEsIDB4NDAsIDB4NjQsIDB4MDAsIDB4OUIsIDB4MDQsIDB4NzQsCisweDAxLCAweEQwLCAweDBELCAweDQ4LCAweDM3LCAweDAwLCAweERELCAweDA0LCAweDVDLCAweDZFLCAweDEwLCAweDA5LCAweEMwLAorMHg0RCwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNywgMHhBMCwgMHgzMiwgMHg4MCwgMHhDMSwKKzB4MDAsIDB4MzQsIDB4MDMsIDB4RDAsIDB4OEMsIDB4NDAsIDB4MzQsIDB4MDAsIDB4QzUsIDB4MDEsIDB4NDQsIDB4MDcsIDB4OTIsCisweDFDLCAweDAwLCAweDMzLCAweDAwLCAweEMxLCAweDAyLCAweDM0LCAweDAzLCAweEQwLCAweDFDLCAweDYwLCAweDczLCAweDIwLAorMHhDRCwgMHgyMywgMHgzNCwgMHgyNywgMHhEMCwgMHgxRCwgMHg0MCwgMHhGMCwgMHgwNCwgMHg4MSwgMHgwMywgMHgzNCwgMHgwMSwKKzB4RDAsIDB4MEMsIDB4NDAsIDB4NzMsIDB4MDAsIDB4Q0QsIDB4MDUsIDB4MzQsIDB4MEQsIDB4MTAsIDB4MDgsIDB4NDAsIDB4MUYsCisweDAwLCAweDBBLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDgwLCAweDRDLCAweDAwLCAweDIxLCAweDAxLAorMHhCNCwgMHgwNCwgMHhEMCwgMHgxMywgMHg0MCwgMHg0OCwgMHgwMCwgMHgyMSwgMHgwMSwgMHhDNCwgMHgwNCwgMHg5OCwgMHg1MiwKKzB4NDQsIDB4NEIsIDB4MDAsIDB4MjEsIDB4MDUsIDB4OTQsIDB4MDQsIDB4RDAsIDB4MTIsIDB4NjgsIDB4NEIsIDB4MDAsIDB4MkQsCisweDAxLCAweEIwLCAweDA0LCAweDUwLCAweDEyLCAweDQwLCAweDc5LCAweDAwLCAweEU5LCAweDAxLCAweEI0LCAweDA3LCAweEQwLAorMHgxRSwgMHg0MCwgMHg3QiwgMHgwMCwgMHhFRCwgMHhBMSwgMHg5NCwgMHgyNywgMHgxMCwgMHg5QSwgMHg0MCwgMHgxOSwgMHgwMCwKKzB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4MTAsIDB4MzAsIDB4MDAsIDB4QzMsIDB4MDAsIDB4M0MsCisweDAzLCAweEYwLCAweDhDLCAweDQwLCAweDMwLCAweDIwLCAweEM3LCAweDAwLCAweDA1LCAweDIzLCAweEIwLCAweDVDLCAweEM0LAorMHgzMywgMHgwMCwgMHhDMSwgMHgwNSwgMHgzQywgMHgwMywgMHhEMCwgMHgwQywgMHhDMCwgMHgzMywgMHgyMCwgMHhDRiwgMHg4OCwKKzB4M0MsIDB4MDMsIDB4RjIsIDB4MEQsIDB4NTAsIDB4QTAsIDB4MDQsIDB4QzMsIDB4MDAsIDB4MzQsIDB4MDMsIDB4RjAsIDB4OEMsCisweEMwLCAweDMzLCAweDA2LCAweENGLCAweDAwLCAweDNDLCAweDAxLCAweDMwLCAweDg4LCAweEM0LCAweDRCLCAweDQwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHhCOCwgMHgwRCwgMHgwMCwgMHgzRiwgMHg4MCwgMHhGQywgMHgwMCwKKzB4RjAsIDB4ODIsIDB4QzAsIDB4MEYsIDB4MDAsIDB4MkUsIDB4MDgsIDB4RDQsIDB4MDAsIDB4NzEsIDB4MDMsIDB4QzAsIDB4MDcsCisweDAyLCAweDE3LCAweDA4LCAweEZDLCAweDAwLCAweEYwLCAweDAxLCAweEMwLCAweDBELCAweDAwLCAweDFELCAweDgwLCAweDY0LAorMHgwMCwgMHhGMCwgMHgxMSwgMHhDMCwgMHgyMCwgMHgwMiwgMHhEOCwgMHgwMCwgMHg3QywgMHgwMywgMHhGMCwgMHgxRiwgMHhDMCwKKzB4N0YsIDB4MDgsIDB4RkYsIDB4MDEsIDB4REMsIDB4MDMsIDB4RjAsIDB4OEIsIDB4QzAsIDB4MEIsIDB4NjAsIDB4MDYsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE1LCAweEEwLCAweDM3LCAweDAwLCAweERGLCAweDAwLCAweDdDLCAweDAzLCAweEYwLAorMHgwRCwgMHhDMCwgMHgzNSwgMHgxMCwgMHhDRSwgMHgwMSwgMHg2QywgMHgwMywgMHhEMCwgMHgwQywgMHhDMCwgMHgzNCwgMHgyMCwKKzB4REYsIDB4MDAsIDB4N0MsIDB4MDMsIDB4MzAsIDB4MEQsIDB4QzAsIDB4NzMsIDB4MDAsIDB4RDcsIDB4MDAsIDB4N0MsIDB4MDMsCisweEYwLCAweDBELCAweEMwLCAweDI3LCAweDAwLCAweDlGLCAweDAwLCAweDdDLCAweDAxLCAweDcwLCAweDhELCAweEMwLCAweDM3LAorMHgwMiwgMHhERiwgMHgwMCwgMHg3QywgMHgwNywgMHgzMCwgMHgxRCwgMHhDMCwgMHg1NCwgMHgwMCwgMHgwRSwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4ODgsIDB4MDksIDB4MDAsIDB4MkQsIDB4MDAsIDB4QjQsIDB4MDAsIDB4QzAsIDB4MDIsCisweDQwLCAweDBCLCAweDAwLCAweDJELCAweDAwLCAweDg0LCAweDAwLCAweEQwLCAweDAyLCAweDQwLCAweDA5LCAweDAwLCAweDJELAorMHgwMCwgMHhCNCwgMHgwMCwgMHg1MCwgMHgwMiwgMHg0MCwgMHgwQiwgMHgwMCwgMHgyMSwgMHgwMCwgMHhBNCwgMHgwMCwgMHhEMCwKKzB4MDIsIDB4NDAsIDB4M0IsIDB4MDAsIDB4RUQsIDB4MDIsIDB4OUMsIDB4MUIsIDB4RjAsIDB4NEUsIDB4NDgsIDB4M0IsIDB4MDEsCisweEU5LCAweDAyLCAweEI0LCAweDAzLCAweDEwLCAweDBBLCAweEMwLCAweDRCLCAweDIwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMywgMHgwMiwgMHg3OSwgMHgwOCwgMHhFRCwgMHgwMSwgMHhCNCwgMHgwNywgMHhDMCwgMHgxRSwgMHg0MCwKKzB4N0IsIDB4MDAsIDB4RkQsIDB4MDEsIDB4ODQsIDB4MDcsIDB4RDAsIDB4MUYsIDB4NDAsIDB4NzgsIDB4MTAsIDB4RTQsIDB4MDEsCisweEI0LCAweDA3LCAweDEwLCAweDFFLCAweDA4LCAweDdGLCAweDAwLCAweEU1LCAweDAxLCAweEI0LCAweDA3LCAweDQwLCAweDFFLAorMHg2MCwgMHg2QiwgMHgwNCwgMHhFNSwgMHgwNSwgMHg5NCwgMHgxNywgMHhEMCwgMHgxRSwgMHg0MCwgMHg3QiwgMHgwMCwgMHhFRCwKKzB4MDUsIDB4QjQsIDB4MDcsIDB4MTAsIDB4MUUsIDB4NDQsIDB4MEUsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDEyLCAweDI4LCAweDAzLCAweDgwLCAweDBELCAweDAwLCAweDM0LCAweDAwLCAweEQwLCAweDAwLCAweDQ0LCAweDAzLAorMHgwMCwgMHgwRCwgMHgwMCwgMHgwNCwgMHgwMCwgMHhEOCwgMHgwMSwgMHg0MiwgMHgwNSwgMHgwMCwgMHgwOCwgMHgwMCwgMHgzNCwKKzB4ODAsIDB4NTIsIDB4MDAsIDB4NDAsIDB4MDMsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MzQsIDB4MDAsIDB4OTAsIDB4MDAsIDB4NDAsCisweEUzLCAweDAwLCAweENELCAweDAwLCAweDA0LCAweDA2LCAweEQwLCAweDBDLCAweDQwLCAweDMzLCAweDAwLCAweEM5LCAweDAwLAorMHgzNCwgMHgwRSwgMHgxQywgMHgwOCwgMHg0MCwgMHg0QiwgMHgyMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MTcsIDB4QTgsIDB4MTUsIDB4MDAsIDB4NUYsIDB4MDAsIDB4N0MsIDB4MDEsIDB4RjAsIDB4MDUsIDB4QzAsIDB4MTcsIDB4MDAsCisweDVGLCAweDAwLCAweDQ1LCAweDAxLCAweEYwLCAweDA1LCAweEMwLCAweDE0LCAweDAwLCAweDU3LCAweDAwLCAweDdDLCAweDAxLAorMHgzMCwgMHgwNSwgMHhDMCwgMHgxNywgMHgwMCwgMHg1NywgMHgwMCwgMHg3QywgMHgwMSwgMHhGMCwgMHgwNSwgMHhDMCwgMHgxRiwKKzB4MDAsIDB4NEYsIDB4MDAsIDB4REMsIDB4ODEsIDB4NzgsIDB4MDUsIDB4QzQsIDB4MTcsIDB4MDAsIDB4NUYsIDB4ODAsIDB4RkMsCisweDI1LCAweDMwLCAweDQ3LCAweDQwLCAweDVFLCAweDIwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLAorMHgwMCwgMHg4RiwgMHgyMCwgMHgzRiwgMHgwMCwgMHhGQywgMHgwMCwgMHhGMiwgMHgwMywgMHhDMCwgMHgwRiwgMHgwOCwgMHgzRiwKKzB4MDAsIDB4REMsIDB4MDAsIDB4RjEsIDB4MDMsIDB4QzAsIDB4MEYsIDB4MjAsIDB4M0QsIDB4MDAsIDB4RkMsIDB4MDAsIDB4RjAsCisweDAzLCAweEM4LCAweDBGLCAweDAwLCAweDNGLCAweDAwLCAweEVDLCAweDAwLCAweEYwLCAweDAzLCAweDQwLCAweDg3LCAweDAxLAorMHgxRiwgMHgwMCwgMHg1QywgMHgyMCwgMHg3MCwgMHgwMCwgMHhDMCwgMHg4NywgMHgwMCwgMHgxRiwgMHgwMCwgMHg3QywgMHgyMCwKKzB4RjAsIDB4MDEsIDB4RTAsIDB4NDksIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsCisweDY3LCAweDAwLCAweDlGLCAweDA4LCAweDdDLCAweDAyLCAweEY4LCAweDI5LCAweEMwLCAweDI3LCAweDAwLCAweDkzLCAweDA0LAorMHg3QywgMHgwMiwgMHhGMCwgMHgxOSwgMHhDMCwgMHgyNCwgMHgyMCwgMHg5NywgMHgwOSwgMHg0QywgMHgwMiwgMHhCMCwgMHgwOSwKKzB4QzAsIDB4MjcsIDB4MDEsIDB4OUYsIDB4MDAsIDB4N0MsIDB4MjIsIDB4RjAsIDB4NTksIDB4QzAsIDB4MjQsIDB4MDEsIDB4OUYsCisweDAwLCAweDVDLCAweDAyLCAweEYwLCAweDA5LCAweEMwLCAweDI0LCAweDAwLCAweDlGLCAweDAwLCAweDdDLCAweDE2LCAweEYwLAorMHgwOSwgMHhDOCwgMHg0MywgMHgyMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgyMCwgMHhBNiwKKzB4MDYsIDB4OUQsIDB4MjAsIDB4NzQsIDB4MDYsIDB4RDgsIDB4MzksIDB4NDQsIDB4MjMsIDB4MjAsIDB4OTEsIDB4MDEsIDB4NzQsCisweDA2LCAweEQwLCAweDA5LCAweDQwLCAweDI0LCAweDA4LCAweDgzLCAweDAxLCAweDA0LCAweDAyLCAweDEwLCAweDA5LCAweDQ0LAorMHgyNywgMHgwMCwgMHg5RCwgMHgxMCwgMHg3NCwgMHgwNiwgMHhEMCwgMHgxOCwgMHg1MCwgMHhFNCwgMHgwMCwgMHhCRCwgMHgwMCwKKzB4QzQsIDB4MDIsIDB4RDAsIDB4MEIsIDB4NDAsIDB4MkMsIDB4MDEsIDB4QkQsIDB4NDAsIDB4NzQsIDB4MEUsIDB4RDIsIDB4MDksCisweDQyLCAweDA3LCAweDgwLCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweEEwLCAweDI0LCAweDA4LAorMHhCRCwgMHgwMCwgMHhGNCwgMHgwNiwgMHhEMiwgMHgwQiwgMHg0MCwgMHgyRiwgMHgwMCwgMHhCMSwgMHg0MCwgMHhGNCwgMHgxMiwKKzB4NTAsIDB4OEIsIDB4NDAsIDB4MkMsIDB4MjAsIDB4QkQsIDB4MDAsIDB4RTQsIDB4MDIsIDB4OTAsIDB4MEIsIDB4NjAsIDB4MkUsCisweDAwLCAweEI1LCAweDAxLCAweEY0LCAweDBBLCAweEQwLCAweDBCLCAweDQwLCAweDI1LCAweDAwLCAweDlELCAweDAwLCAweDY0LAorMHgxMywgMHhEMiwgMHgwOSwgMHg0MCwgMHgyNCwgMHg4MCwgMHg5RCwgMHgwMCwgMHg3NCwgMHg0MywgMHhEMCwgMHgwOSwgMHg2MCwKKzB4NjMsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MjIsIDB4MjgsIDB4MDAsIDB4QUQsCisweDAyLCAweEI0LCAweDBBLCAweEQwLCAweDBFLCAweDQwLCAweDJGLCAweDAwLCAweEExLCAweDAwLCAweEI2LCAweDBBLCAweEQwLAorMHgyQSwgMHg1MCwgMHgyOCwgMHgwMiwgMHhCRCwgMHgwMCwgMHhFNSwgMHgwQSwgMHgxMCwgMHgwQSwgMHg2MCwgMHhBQiwgMHgwMCwKKzB4QUQsIDB4MDAsIDB4QjYsIDB4MDIsIDB4RDAsIDB4MkIsIDB4NjIsIDB4QTEsIDB4MDAsIDB4OEQsIDB4MjAsIDB4MDQsIDB4OEEsCisweEQyLCAweDI4LCAweDQwLCAweDIwLCAweDg4LCAweDhELCAweDgwLCAweDM0LCAweDIyLCAweEQwLCAweDI4LCAweDQwLCAweDQzLAorMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxRCwgMHhCMCwgMHgwNiwgMHgwMCwgMHgxRiwgMHgwMCwKKzB4N0MsIDB4MDAsIDB4RDAsIDB4MDEsIDB4QzAsIDB4ODcsIDB4NDIsIDB4MTMsIDB4MDAsIDB4N0UsIDB4MDAsIDB4NzAsIDB4MDEsCisweEMwLCAweDg0LCAweDAwLCAweDU3LCAweDAwLCAweDJDLCAweDAwLCAweEIwLCAweDAxLCAweEMwLCAweDA2LCAweDAwLCAweDFGLAorMHgwMCwgMHg3QywgMHgwMCwgMHhGMCwgMHgwMywgMHhDMiwgMHgxNSwgMHgwMCwgMHgxRiwgMHgwMSwgMHg0RCwgMHgwNCwgMHhFMCwKKzB4MTEsIDB4RDAsIDB4NDQsIDB4MDAsIDB4MUQsIDB4MDEsIDB4M0MsIDB4MDgsIDB4RjAsIDB4MDAsIDB4RTIsIDB4NzcsIDB4QzAsCisweDBBLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE5LCAweEI4LCAweDI3LCAweDBELCAweDlGLCAweDAxLCAweDdDLAorMHg4NiwgMHhGMiwgMHgwOSwgMHhDMCwgMHgyNywgMHgxMCwgMHg5RCwgMHgwMCwgMHg3QywgMHgwNiwgMHhGMCwgMHgxOSwgMHg0NCwKKzB4MjcsIDB4MDEsIDB4OTMsIDB4MDAsIDB4NUMsIDB4MDYsIDB4RTAsIDB4MDksIDB4NDAsIDB4NjcsIDB4MDAsIDB4OUYsIDB4MDAsCisweDdDLCAweDAyLCAweEYwLCAweDE5LCAweEM4LCAweDZFLCAweDAwLCAweEJGLCAweDAyLCAweEY0LCAweDBFLCAweEYwLCAweDM5LAorMHhDMCwgMHhBNywgMHgwOCwgMHg5RiwgMHgwMiwgMHhGQywgMHgxMiwgMHhGMCwgMHgxRiwgMHhDMCwgMHg2NywgMHg2MCwgMHgwRSwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4QTAsIDB4MkYsIDB4MDAsIDB4QjMsIDB4MDIsIDB4RkMsIDB4MDIsCisweEQxLCAweDBBLCAweEMwLCAweDI3LCAweDEwLCAweEJFLCAweDAwLCAweEQ4LCAweDAyLCAweEYwLCAweDBCLCAweEMwLCAweDI3LAorMHgwMiwgMHhCRiwgMHgwMCwgMHg3NCwgMHgwMiwgMHhGMCwgMHgwQiwgMHhDMCwgMHhBRiwgMHgwMCwgMHhCNywgMHgwMCwgMHhEQywKKzB4MDIsIDB4QzAsIDB4MkIsIDB4QzAsIDB4MkYsIDB4MDAsIDB4QjMsIDB4MDEsIDB4QkMsIDB4NDYsIDB4MzAsIDB4RDksIDB4QzAsCisweDZDLCAweDAxLCAweEIzLCAweDExLCAweEM4LCAweDAyLCAweEYwLCAweDA5LCAweEMwLCAweDY3LCAweDAwLCAweDBFLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxQywgMHgwOCwgMHgwNywgMHgwNSwgMHgxQiwgMHgwNSwgMHg3NCwgMHgxNCwgMHhEMCwKKzB4MDEsIDB4NDAsIDB4MDcsIDB4MDQsIDB4MUQsIDB4MDAsIDB4NzQsIDB4NTQsIDB4RDAsIDB4MTEsIDB4NDAsIDB4MDcsIDB4MDEsCisweDFELCAweDAwLCAweDc0LCAweDU0LCAweEQwLCAweDAxLCAweEMwLCAweDQ0LCAweDAwLCAweDExLCAweDAwLCAweDQ0LCAweDAwLAorMHg5MCwgMHg1MSwgMHg0MCwgMHg0NywgMHgwNSwgMHgxMSwgMHgyMCwgMHg3NCwgMHgxNCwgMHg1MCwgMHgzMSwgMHg0MCwgMHg4NSwKKzB4MDAsIDB4MTEsIDB4MDIsIDB4NTQsIDB4MDAsIDB4RDAsIDB4NTAsIDB4NDEsIDB4NzMsIDB4MjAsIDB4MEMsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDEwLCAweEEwLCAweDIzLCAweDAxLCAweDgxLCAweDAwLCAweDM0LCAweDQyLCAweEQwLCAweDA4LAorMHg0MCwgMHgyMywgMHgwMCwgMHhDRCwgMHgwMCwgMHgxNCwgMHgwMiwgMHhEMCwgMHg0OCwgMHg0MSwgMHgyMywgMHgyMSwgMHg4QywKKzB4MDAsIDB4MzQsIDB4MDIsIDB4RDAsIDB4MDgsIDB4NDAsIDB4MjcsIDB4MjAsIDB4OTQsIDB4MDAsIDB4MTQsIDB4MDIsIDB4OTAsCisweDA4LCAweDQwLCAweDI3LCAweDAwLCAweDgxLCAweDAyLCAweDM0LCAweDUyLCAweDUwLCAweEM4LCAweDQwLCAweDIwLCAweDAyLAorMHg4NSwgMHgwMCwgMHgwNCwgMHgwMiwgMHhEMCwgMHgwOCwgMHg0MCwgMHg0MywgMHg4MCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MTgsIDB4QTgsIDB4MjUsIDB4MDAsIDB4OTksIDB4MjAsIDB4NzQsIDB4MDIsIDB4RDAsIDB4MDksIDB4NDAsCisweDI3LCAweDEwLCAweDlELCAweDAwLCAweDc0LCAweDAyLCAweEQwLCAweDA5LCAweDQwLCAweDI3LCAweDAwLCAweDlELCAweDgwLAorMHg3NCwgMHgwMiwgMHhEMCwgMHgwOSwgMHg0MCwgMHgyNCwgMHgwMCwgMHg5MSwgMHgwMCwgMHg0NCwgMHgwMiwgMHg5MCwgMHgwOSwKKzB4MDAsIDB4QTcsIDB4MDEsIDB4OTEsIDB4MDAsIDB4NzAsIDB4NDIsIDB4NTAsIDB4MDgsIDB4NDAsIDB4MzcsIDB4MDAsIDB4OTUsCisweDAwLCAweDU2LCAweDAyLCAweEQwLCAweDA5LCAweDQwLCAweDYzLCAweDI4LCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwNSwgMHgwOCwgMHgyNSwgMHgwMCwgMHhCMywgMHgwMCwgMHhGQywgMHgwMiwgMHhGMCwgMHgwOSwgMHhDMCwgMHgyNywKKzB4MDAsIDB4OUYsIDB4MDAsIDB4REMsIDB4MDIsIDB4RjAsIDB4MEIsIDB4QzAsIDB4MjcsIDB4MDAsIDB4OUQsIDB4MDAsIDB4RkMsCisweDAyLCAweEYwLCAweDA5LCAweEMwLCAweDJCLCAweDAwLCAweDk3LCAweDAwLCAweDVDLCAweDAyLCAweDkwLCAweDBCLCAweEMwLAorMHgyRiwgMHhDMCwgMHg5MywgMHgwMSwgMHhGQywgMHgyQSwgMHg3MSwgMHgwQiwgMHhDOCwgMHgyMCwgMHg0MCwgMHg5NywgMHg0MCwKKzB4NEMsIDB4OUUsIDB4RjAsIDB4MkIsIDB4NDAsIDB4MTcsIDB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDE0LCAweDAwLCAweDI1LCAweDA0LCAweDlGLCAweDAwLCAweDdDLCAweDAyLCAweEYwLCAweDA5LCAweEUxLCAweDI3LCAweDAwLAorMHg5RiwgMHgwMCwgMHg3QywgMHgwMiwgMHhGMCwgMHgwOSwgMHhDNCwgMHgyNywgMHgwMCwgMHg5RiwgMHgwMCwgMHg3QywgMHgwMiwKKzB4RjAsIDB4MDksIDB4QzQsIDB4MjUsIDB4MDAsIDB4OUYsIDB4MjAsIDB4N0MsIDB4MDIsIDB4QjAsIDB4MDksIDB4QzIsIDB4NjcsCisweDAwLCAweDlGLCAweDg5LCAweDZDLCAweDAyLCAweEYwLCAweDA5LCAweEMwLCAweDI1LCAweDAwLCAweDlCLCAweDgwLCAweDdDLAorMHgxMiwgMHhGMCwgMHgwOSwgMHhDMCwgMHg1MywgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwKKzB4MDgsIDB4MDUsIDB4MDAsIDB4MUYsIDB4MDAsIDB4N0MsIDB4MDAsIDB4M0EsIDB4MDEsIDB4RDAsIDB4MDYsIDB4MDAsIDB4MTMsCisweDAwLCAweDZDLCAweDAwLCAweEYyLCAweDAxLCAweEMwLCAweDA0LCAweDgwLCAweDEzLCAweDI4LCAweDdDLCAweDAwLCAweEIyLAorMHgwMSwgMHhEMCwgMHgwNSwgMHg0MCwgMHgxMywgMHgwMCwgMHg3QywgMHg0MCwgMHhGMCwgMHgwMSwgMHhDMiwgMHg4NywgMHgwMCwKKzB4MUYsIDB4MDAsIDB4MEMsIDB4MDgsIDB4MzEsIDB4MDEsIDB4RDAsIDB4MDQsIDB4MDAsIDB4MDMsIDB4MDAsIDB4NEQsIDB4ODgsCisweDMwLCAweDIxLCAweEMwLCAweDUwLCAweDIwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDIwLAorMHhEQywgMHgwMCwgMHg1RCwgMHg0MCwgMHg3NCwgMHgxMSwgMHgxNSwgMHg1NywgMHhDMCwgMHgxNCwgMHgxMCwgMHg1NSwgMHg0MCwKKzB4NzQsIDB4MDEsIDB4RDAsIDB4MDUsIDB4NDAsIDB4MTQsIDB4MDAsIDB4N0IsIDB4MDAsIDB4NzQsIDB4MDEsIDB4MTAsIDB4MDUsCisweDQwLCAweDU0LCAweDAwLCAweDZCLCAweDAyLCAweEY0LCAweDBELCAweDM0LCAweDA1LCAweDQwLCAweDlCLCAweDAwLCAweDdELAorMHgwMiwgMHg2RSwgMHgwMSwgMHhCMCwgMHgwNSwgMHg0MCwgMHg5QywgMHgwMCwgMHg3QiwgMHgxQiwgMHhDNCwgMHgwNSwgMHgxMCwKKzB4MDUsIDB4QzgsIDB4NTIsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4QTAsIDB4RjYsCisweDgyLCAweENELCAweDA5LCAweDM0LCAweDAzLCAweDEwLCAweDM4LCAweDQwLCAweDMwLCAweDAwLCAweDgxLCAweDAwLCAweDM0LAorMHgwMywgMHhDMCwgMHgwQywgMHg0MCwgMHgzMCwgMHgwMCwgMHg0NSwgMHgwNSwgMHgzNCwgMHgwMywgMHg5MCwgMHgwOCwgMHg0MCwKKzB4MzIsIDB4MDIsIDB4QzEsIDB4MDQsIDB4MzQsIDB4MDEsIDB4MTgsIDB4MEMsIDB4NDAsIDB4RTMsIDB4MDMsIDB4OEQsIDB4MTAsCisweDI0LCAweDAzLCAweDEwLCAweDBDLCAweDQ0LCAweEEyLCAweDAxLCAweDg5LCAweDAzLCAweDI0LCAweDFCLCAweDFELCAweDBDLAorMHg0MCwgMHg1MCwgMHgwMCwgMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHg4MCwgMHgxOCwgMHg4MCwKKzB4QUQsIDB4NDQsIDB4RjQsIDB4MTcsIDB4MTAsIDB4MUEsIDB4NDQsIDB4N0MsIDB4MDAsIDB4RTUsIDB4MDAsIDB4QjQsIDB4MTIsCisweEQyLCAweDVBLCAweDQwLCAweDdDLCAweDAxLCAweEU5LCAweDAwLCAweEY2LCAweDE3LCAweDEwLCAweDFBLCAweDQwLCAweDJBLAorMHgwMCwgMHhFMSwgMHgwMCwgMHhGNCwgMHgwRiwgMHg5MCwgMHgwRSwgMHg0MCwgMHgzQiwgMHgwMSwgMHg4RCwgMHgxMSwgMHhGNCwKKzB4MEIsIDB4OTAsIDB4OEUsIDB4NDAsIDB4MjgsIDB4MDQsIDB4QTksIDB4MjAsIDB4QTQsIDB4MEYsIDB4MTAsIDB4NUUsIDB4NDAsCisweDEyLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDEwLCAweDc4LCAweDAwLCAweEVGLAorMHgyMSwgMHhCQywgMHgxRSwgMHgxMCwgMHgxRSwgMHhDMCwgMHg3OCwgMHgwMiwgMHhFMywgMHgwMSwgMHhCQywgMHgwNywgMHhEMiwKKzB4NUYsIDB4QzAsIDB4NzgsIDB4MDQsIDB4RTUsIDB4MDEsIDB4QkMsIDB4OTcsIDB4QjAsIDB4MUEsIDB4NjAsIDB4N0UsIDB4MDAsCisweEUxLCAweDAxLCAweEJDLCAweDA3LCAweDE5LCAweDNFLCAweEMwLCAweDdCLCAweDExLCAweEFGLCAweDAxLCAweEE2LCAweDBFLAorMHgzMCwgMHgxQywgMHg4OCwgMHg2QSwgMHgwMCwgMHhBQiwgMHgwMSwgMHhFQywgMHgwNSwgMHgzMCwgMHgzRSwgMHhDMCwgMHg1MCwKKzB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4QjgsIDB4MTUsIDB4MDgsIDB4OUYsIDB4MDAsCisweDNDLCAweDAyLCAweEYwLCAweDBELCAweEM4LCAweEIxLCAweDAxLCAweERGLCAweDAwLCAweDdDLCAweDIyLCAweEYwLCAweDg5LAorMHhEQSwgMHgzMywgMHgwMiwgMHhEQywgMHgwMCwgMHgzQywgMHgyMywgMHhGMCwgMHgwOCwgMHg4MCwgMHgyNSwgMHgwMCwgMHg5RiwKKzB4MDAsIDB4M0MsIDB4MDMsIDB4NzAsIDB4MDksIDB4ODAsIDB4MTcsIDB4MTAsIDB4OUQsIDB4MDAsIDB4NkMsIDB4MDIsIDB4QzAsCisweDBELCAweEMwLCAweDIxLCAweDAwLCAweDhGLCAweDAwLCAweDVDLCAweDAxLCAweEYwLCAweDBELCAweEM4LCAweDQzLCAweDYwLAorMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHhBMCwgMHg3QiwgMHgwMCwgMHhGMywgMHgxMSwgMHhDQywKKzB4MDcsIDB4QjgsIDB4MEIsIDB4QzAsIDB4N0YsIDB4MDQsIDB4RkYsIDB4MDEsIDB4RUQsIDB4MDcsIDB4MzAsIDB4MUYsIDB4QzAsCisweDdGLCAweDIwLCAweEVGLCAweDA5LCAweDRDLCAweDI3LCAweDMwLCAweDFCLCAweEMwLCAweDdELCAweDA0LCAweEZCLCAweDAxLAorMHg5QywgMHgwNywgMHhCMCwgMHg5RSwgMHhDMiwgMHg1RCwgMHgwNCwgMHhCRiwgMHgwMSwgMHhGQywgMHgwNywgMHhGMCwgMHgxRiwKKzB4QzgsIDB4NkMsIDB4MDAsIDB4RjMsIDB4MDEsIDB4RkMsIDB4MDcsIDB4RjAsIDB4MUUsIDB4QzAsIDB4MDgsIDB4MDAsIDB4MEUsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE1LCAweDg4LCAweDE5LCAweDA2LCAweEYxLCAweDQwLCAweEM0LCAweDEzLAorMHgzOSwgMHg0QSwgMHg0MCwgMHgzQiwgMHgwMSwgMHhFRCwgMHgwMCwgMHhDNCwgMHgwMiwgMHgxMCwgMHgwOCwgMHg0OCwgMHgzQiwKKzB4MDEsIDB4QzcsIDB4MDIsIDB4ODQsIDB4NzcsIDB4MTAsIDB4MEEsIDB4NDAsIDB4M0MsIDB4MDAsIDB4NjEsIDB4MDAsIDB4ODQsCisweDAzLCAweDQwLCAweDFFLCAweDQwLCAweDM5LCAweDAwLCAweEFELCAweDg0LCAweEE0LCAweDEzLCAweEYwLCAweDBFLCAweDQwLAorMHgyOCwgMHgwMCwgMHhFNSwgMHgwOCwgMHhCNCwgMHgwMywgMHhEMCwgMHgwRSwgMHg0MCwgMHg1NCwgMHgyMCwgMHgwNiwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4QkMsIDB4MDAsIDB4QTEsIDB4MDgsIDB4ODQsIDB4MDIsIDB4MDEsCisweDhBLCAweDQxLCAweDNCLCAweDEwLCAweEZELCAweDAwLCAweDg0LCAweDQzLCAweDEwLCAweDBFLCAweDQwLCAweDNCLCAweDIwLAorMHhFRCwgMHgwMiwgMHg4MCwgMHgxNywgMHgxMCwgMHgwQiwgMHg0MSwgMHgyOSwgMHgwMCwgMHhGMSwgMHgwMCwgMHg5NCwgMHgwMywKKzB4MTAsIDB4NEYsIDB4NDAsIDB4MUEsIDB4MDAsIDB4QUQsIDB4ODAsIDB4QjQsIDB4NDIsIDB4RDAsIDB4MUUsIDB4NDAsIDB4MjAsCisweDAwLCAweEU1LCAweDAwLCAweEI0LCAweDAxLCAweEQwLCAweDFGLCAweDQwLCAweDIwLCAweDAxLCAweDA0LCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwNiwgMHgyOCwgMHgwMywgMHgwMCwgMHg5MCwgMHgwMiwgMHg0NCwgMHgwRSwgMHgxMCwgMHgzQywKKzB4NDAsIDB4QjMsIDB4MDIsIDB4Q0QsIDB4MDIsIDB4MDYsIDB4MEUsIDB4MDAsIDB4MzgsIDB4NDAsIDB4RjMsIDB4MDEsIDB4QzksCisweDA4LCAweDA0LCAweDRGLCAweDExLCAweDY4LCAweDQyLCAweEE1LCAweDAyLCAweDAxLCAweDBCLCAweDA0LCAweDRCLCAweDUwLAorMHgwOCwgMHg0MSwgMHgxMywgMHgyMiwgMHg4RCwgMHg4MSwgMHg2NiwgMHgxQSwgMHg1MiwgMHgwQywgMHg0NCwgMHgyMCwgMHgwMCwKKzB4QzUsIDB4ODAsIDB4NzQsIDB4MDgsIDB4RDAsIDB4MEMsIDB4NDAsIDB4MTgsIDB4MjAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDE1LCAweEE4LCAweDY1LCAweDAwLCAweEQyLCAweDAxLCAweDRDLCAweDRGLCAweDM0LCAweDE4LCAweEMwLAorMHg3RiwgMHgwMCwgMHhERiwgMHgwMywgMHgwQywgMHgwNywgMHgzMCwgMHgzRCwgMHhDMSwgMHhCRiwgMHgwNCwgMHhDRCwgMHgwMSwKKzB4NEQsIDB4MEIsIDB4MzYsIDB4MkQsIDB4RTQsIDB4QjUsIDB4MDIsIDB4OTMsIDB4MDIsIDB4NTQsIDB4NDIsIDB4MTAsIDB4MTksCisweEMwLCAweDM2LCAweDAwLCAweERELCAweDA1LCAweDc0LCAweDBGLCAweEQwLCAweDBELCAweEQwLCAweDM0LCAweDAwLCAweDk3LAorMHgyMCwgMHg3QywgMHgwMiwgMHhGMiwgMHhCRCwgMHhENSwgMHg1NCwgMHgyMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDEsIDB4MDAsIDB4QTcsIDB4MjAsIDB4OUYsIDB4MTgsIDB4N0MsIDB4MDMsIDB4NzAsIDB4MjksIDB4QzAsIDB4MzcsCisweDAxLCAweERFLCAweDA4LCAweDdDLCAweDAzLCAweEY0LCAweDRELCAweEMwLCAweDM3LCAweDAwLCAweEQ3LCAweDAyLCAweDdDLAorMHgwMywgMHhGMCwgMHgwOSwgMHhDMCwgMHgyNiwgMHgwMCwgMHg5NywgMHg4MiwgMHg3QywgMHgwQiwgMHg3MCwgMHg4RCwgMHhFMCwKKzB4MzUsIDB4MDAsIDB4REYsIDB4MDIsIDB4N0MsIDB4MDMsIDB4RjAsIDB4MEQsIDB4QzAsIDB4MjcsIDB4MDAsIDB4OUQsIDB4MDIsCisweDdDLCAweDJBLCAweEYwLCAweDBELCAweEMwLCAweEE3LCAweDAwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHg4MCwgMHgwQSwgMHgyRiwgMHgwMCwgMHhGRiwgMHgwMCwgMHhDQywgMHg0MywgMHg3MCwgMHgwRiwgMHhDMSwgMHgzQywgMHgwMCwKKzB4RkYsIDB4MTUsIDB4REMsIDB4NjYsIDB4MzAsIDB4MUIsIDB4QzAsIDB4M0YsIDB4MjAsIDB4RkYsIDB4MDAsIDB4Q0MsIDB4MDMsCisweEYwLCAweDlGLCAweEMwLCAweDNGLCAweDAwLCAweDMzLCAweDEwLCAweEZDLCAweDAzLCAweEUwLCAweDBCLCAweEMwLCAweDdGLAorMHgxMCwgMHhFMywgMHg0OSwgMHhDQywgMHgwMywgMHgzMCwgMHgwRiwgMHhDMCwgMHhCRiwgMHgwMCwgMHhCRiwgMHgyMiwgMHhGQywKKzB4NDAsIDB4MzAsIDB4MEYsIDB4QzAsIDB4MDcsIDB4MjIsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODEsCisweDIwLCAweDY2LCAweDAwLCAweDlELCAweDAwLCAweDQ0LCAweDgzLCAweDEwLCAweDJELCAweDQwLCAweDM0LCAweDA4LCAweERELAorMHg0MCwgMHg3NCwgMHgwMiwgMHg1MCwgMHgwOSwgMHg0NCwgMHgzNywgMHgwOCwgMHhERCwgMHgwMywgMHg0NCwgMHgwMywgMHhEMCwKKzB4MTksIDB4NjgsIDB4MjcsIDB4ODAsIDB4MTUsIDB4MTMsIDB4NzQsIDB4NDcsIDB4RDIsIDB4OTksIDB4QzQsIDB4NTEsIDB4MjgsCisweEQxLCAweDAzLCAweDZDLCAweDI3LCAweEYwLCAweDBELCAweDQwLCAweDI3LCAweDAwLCAweDlELCAweDA0LCAweDdDLCAweDJGLAorMHgxMSwgMHgwRCwgMHg0MCwgMHgwNywgMHgwMiwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHhBMCwKKzB4NDYsIDB4MDQsIDB4REQsIDB4MDAsIDB4NDQsIDB4MTIsIDB4MTIsIDB4MDksIDB4NDEsIDB4MzYsIDB4MDAsIDB4REQsIDB4MDAsCisweDc0LCAweDAzLCAweDEyLCAweDhELCAweDQyLCAweDM3LCAweDAwLCAweERELCAweDAxLCAweDQ0LCAweDAzLCAweEQwLCAweDBELAorMHg0MiwgMHgzNywgMHgyMCwgMHg5MSwgMHgwMSwgMHg3NCwgMHgwNywgMHhEMCwgMHgwOSwgMHg0NCwgMHgxNywgMHgwMiwgMHg5NSwKKzB4NTAsIDB4NDQsIDB4MDIsIDB4MTAsIDB4MEQsIDB4NDgsIDB4MzYsIDB4MDAsIDB4OUQsIDB4MDAsIDB4NzQsIDB4MEEsIDB4MTAsCisweDBELCAweDQwLCAweDA3LCAweDAwLCAweDBBLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDAwLCAweDAwLAorMHgwMCwgMHhDRCwgMHgwMCwgMHgwNSwgMHgwMiwgMHgxMCwgMHgwOCwgMHg1MCwgMHgzMiwgMHgwOCwgMHhDRCwgMHgwMCwgMHg3NCwKKzB4MDMsIDB4NTAsIDB4OEMsIDB4NDAsIDB4MzMsIDB4MDAsIDB4REQsIDB4MDIsIDB4MDQsIDB4MTMsIDB4RDAsIDB4MDgsIDB4NDAsCisweDM2LCAweDAwLCAweDA1LCAweDAwLCAweDM0LCAweDAzLCAweEQwLCAweDBDLCAweDYxLCAweDM1LCAweDQwLCAweDQ1LCAweDgwLAorMHgyNCwgMHgwMiwgMHg5OCwgMHgwQywgMHg0MCwgMHgzMywgMHgwMCwgMHg0RCwgMHgyMCwgMHgzNCwgMHgwMCwgMHgxMCwgMHgwQywKKzB4NDAsIDB4NDMsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MjYsIDB4MDAsCisweDlGLCAweDIwLCAweDRDLCAweDAyLCAweDM0LCAweDAxLCAweEMwLCAweDNFLCAweDAwLCAweERGLCAweDAwLCAweDU4LCAweDgyLAorMHgzMCwgMHgwOSwgMHhDMCwgMHgzRiwgMHgwOCwgMHhERiwgMHgwMiwgMHg4NCwgMHg0MywgMHhGMCwgMHgwRCwgMHg0MCwgMHgyNywKKzB4MDAsIDB4MTEsIDB4MDAsIDB4N0MsIDB4MDMsIDB4RjAsIDB4MDksIDB4NDAsIDB4MTcsIDB4ODAsIDB4OTcsIDB4ODAsIDB4NEMsCisweDAyLCAweDMwLCAweDBFLCAweDgwLCAweDE3LCAweDAwLCAweDlGLCAweDAwLCAweDdDLCAweDAwLCAweDM0LCAweDBGLCAweEM4LAorMHgwNywgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHhCMCwgMHgyRiwgMHgwMCwgMHhCRiwKKzB4NDAsIDB4RkMsIDB4MDIsIDB4QjAsIDB4MDcsIDB4QzAsIDB4M0QsIDB4MDgsIDB4RUYsIDB4MDAsIDB4RkMsIDB4MDIsIDB4RjAsCisweDRCLCAweEM4LCAweDNGLCAweDAwLCAweEJGLCAweDAwLCAweEZDLCAweDAzLCAweEYwLCAweDBBLCAweEMwLCAweDJGLCAweDAwLAorMHgyRiwgMHgwMCwgMHhGQywgMHgwMywgMHhEMCwgMHgwOSwgMHhDMCwgMHgxRiwgMHgwMCwgMHg3QiwgMHgwMCwgMHhGOCwgMHgwMiwKKzB4RjAsIDB4MEYsIDB4QzIsIDB4MUYsIDB4MjAsIDB4N0YsIDB4MDAsIDB4REMsIDB4MDAsIDB4RjAsIDB4MEYsIDB4QzAsIDB4MTcsCisweDYwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweEE4LCAweDZGLCAweDAwLCAweDJGLCAweDA0LAorMHhDQywgMHgwNiwgMHg3MCwgMHg0MywgMHhDMSwgMHgwRiwgMHgwMSwgMHhFMywgMHgwMSwgMHhDQywgMHgxMCwgMHg3NCwgMHgwMywKKzB4QzAsIDB4MEYsIDB4MDAsIDB4MzMsIDB4MTAsIDB4Q0MsIDB4ODAsIDB4MzAsIDB4MDMsIDB4RDAsIDB4MEMsIDB4MDAsIDB4MzMsCisweDA0LCAweENDLCAweDAwLCAweDM0LCAweDQzLCAweEM4LCAweDdFLCAweDAyLCAweEIzLCAweDAwLCAweEZDLCAweDUzLCAweEYwLAorMHgxMiwgMHhDMCwgMHg2RCwgMHgwMiwgMHhBRiwgMHgwMSwgMHhGQywgMHgwNiwgMHhGMCwgMHg0QiwgMHhDMCwgMHgwRiwgMHgwMCwKKzB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4NjcsIDB4MDAsIDB4MUQsIDB4QUIsIDB4NDQsCisweDA3LCAweDEwLCAweDM1LCAweDQ4LCAweEQ3LCAweDAyLCAweEQxLCAweEExLCAweDQ0LCAweDBELCAweDEwLCAweDM1LCAweDQwLAorMHg1NywgMHgwMiwgMHg1MSwgMHg0MywgMHg0QywgMHgwRCwgMHgxMCwgMHhCNSwgMHg0MCwgMHhENCwgMHgwMiwgMHg1MSwgMHgwMywKKzB4NDQsIDB4MEQsIDB4MTAsIDB4OTUsIDB4NDAsIDB4MzMsIDB4MTEsIDB4RDEsIDB4MDMsIDB4NzQsIDB4OEYsIDB4RDAsIDB4MTksCisweDQwLCAweDI3LCAweDAxLCAweDlELCAweDAxLCAweDc0LCAweDA0LCAweEQyLCAweDExLCAweDQwLCAweDA3LCAweDYwLCAweDBDLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMSwgMHhBOCwgMHgyMywgMHgwMCwgMHgwRCwgMHgwMCwgMHg0NCwgMHgwMywKKzB4NTAsIDB4MDgsIDB4NDAsIDB4MjEsIDB4NDAsIDB4QzEsIDB4MDAsIDB4MTQsIDB4MEEsIDB4MTgsIDB4ODgsIDB4NDAsIDB4MjMsCisweDAwLCAweDgxLCAweDAwLCAweDA0LCAweDBBLCAweDUwLCAweDA4LCAweDQ4LCAweDIwLCAweDAwLCAweDg5LCAweDA4LCAweDA2LAorMHgwQSwgMHgxMCwgMHgwOCwgMHg0MCwgMHgzMywgMHgwMSwgMHg4MSwgMHgwMiwgMHgzNCwgMHgwMywgMHhEMCwgMHgwOCwgMHg0MCwKKzB4MDEsIDB4MTAsIDB4ODUsIDB4MDAsIDB4MzQsIDB4MDIsIDB4RDAsIDB4ODgsIDB4NDAsIDB4NDcsIDB4ODAsIDB4MEUsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweEE4LCAweDI1LCAweDAyLCAweDFELCAweEMwLCAweDY0LCAweEM3LCAweDEwLAorMHgwNSwgMHg0NCwgMHgzNywgMHgwMiwgMHhEMSwgMHgwMCwgMHg1NiwgMHgwOCwgMHgxMCwgMHgwNSwgMHg0MCwgMHhCNywgMHgwOSwKKzB4OTEsIDB4MDMsIDB4NjQsIDB4MDMsIDB4NTAsIDB4MDksIDB4NDAsIDB4MzQsIDB4MDAsIDB4OTEsIDB4MDAsIDB4NDQsIDB4MEUsCisweDEwLCAweDA5LCAweDQyLCAweDM3LCAweDAxLCAweDkxLCAweDAwLCAweDc0LCAweDAzLCAweEQwLCAweDE5LCAweDQwLCAweDU3LAorMHgwMCwgMHhERCwgMHgwMSwgMHg3NCwgMHgwNSwgMHhEMCwgMHgxOSwgMHg0MSwgMHgwRiwgMHgwMCwgMHgwNiwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4QTgsIDB4MjcsIDB4MDAsIDB4REYsIDB4NUEsIDB4MEMsIDB4MEYsIDB4NzAsIDB4OTEsCisweEMwLCAweEM3LCAweDA0LCAweEQzLCAweDAxLCAweDVDLCAweDI0LCAweDMwLCAweDExLCAweEMyLCAweEM3LCAweDAwLCAweDEzLAorMHgwMiwgMHg0QywgMHgwMCwgMHg3MCwgMHgyMSwgMHhDMSwgMHhDNCwgMHg4NiwgMHgxMywgMHgxQiwgMHg0QywgMHgwOCwgMHgzMCwKKzB4MDEsIDB4QzAsIDB4MzYsIDB4MDAsIDB4OTMsIDB4MDAsIDB4N0MsIDB4MDMsIDB4RjAsIDB4NTksIDB4QzAsIDB4RTUsIDB4MDAsCisweDlGLCAweDA3LCAweDdDLCAweDE2LCAweEYwLCAweDM5LCAweEMwLCAweDBCLCAweDIwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwNywgMHg4MCwgMHgyRCwgMHgyMCwgMHhCRiwgMHgwMCwgMHhEQywgMHgwMywgMHhGMCwgMHgxNywgMHhDMCwKKzB4NEYsIDB4MDAsIDB4RkQsIDB4MDIsIDB4RUMsIDB4MDEsIDB4QjAsIDB4M0YsIDB4QzAsIDB4MUEsIDB4NDAsIDB4NkYsIDB4MDAsCisweDlDLCAweDBELCAweEIwLCAweDA3LCAweEMwLCAweDVCLCAweDIwLCAweDdGLCAweDAwLCAweEZELCAweDAxLCAweEYwLCAweDA3LAorMHhDMiwgMHg3RiwgMHg0MCwgMHhGRiwgMHgwMCwgMHhGQywgMHgwMywgMHhGMCwgMHgwQiwgMHhDMCwgMHgyRiwgMHgwMCwgMHg3RiwKKzB4MDAsIDB4RkMsIDB4MDEsIDB4RjIsIDB4MDMsIDB4QzAsIDB4MUYsIDB4MDAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAyLCAweDA4LCAweDI1LCAweDAwLCAweEQzLCAweDEzLCAweDRDLCAweDIzLCAweEYwLCAweDA5LCAweEQwLCAweEEwLAorMHgwMCwgMHhERiwgMHgxMSwgMHgxQywgMHgwQSwgMHg3MCwgMHgwOSwgMHhFMCwgMHgyNywgMHgwMCwgMHgxRiwgMHgwMiwgMHg0QywKKzB4MkEsIDB4MzAsIDB4MkMsIDB4QzAsIDB4QTcsIDB4MDIsIDB4ODMsIDB4MDIsIDB4MEQsIDB4MDIsIDB4RjAsIDB4MkQsIDB4NDEsCisweDc0LCAweDAxLCAweEQzLCAweDAwLCAweDRDLCAweDAzLCAweEYwLCAweDI5LCAweEMwLCAweDk0LCAweDAwLCAweDlGLCAweDBFLAorMHg0QywgMHgwQSwgMHhGMCwgMHgyOSwgMHhDMCwgMHgwQiwgMHgyMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MTMsIDB4QTAsIDB4NjQsIDB4MDEsIDB4ODEsIDB4MjIsIDB4NDQsIDB4MDMsIDB4RDAsIDB4QjUsIDB4NDAsIDB4RTQsIDB4MDIsCisweENELCAweDAyLCAweDQ0LCAweDI4LCAweEQwLCAweEFELCAweDQxLCAweEI3LCAweDA2LCAweDFELCAweDFBLCAweDQ0LCAweDA3LAorMHgxMiwgMHhBRCwgMHg0MiwgMHhCNywgMHgwMCwgMHg5MSwgMHgwQiwgMHg2QywgMHgyQSwgMHhEMCwgMHgwRCwgMHg0MSwgMHhCNSwKKzB4MDgsIDB4RDEsIDB4MDEsIDB4QzQsIDB4ODMsIDB4RDAsIDB4MEQsIDB4QzAsIDB4MTQsIDB4MDAsIDB4RDEsIDB4MDEsIDB4NDQsCisweDk5LCAweEQwLCAweDE5LCAweDQwLCAweDRGLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLAorMHgyMCwgMHhFMiwgMHgwMSwgMHgwMSwgMHgwMCwgMHgxNCwgMHgxMywgMHhEMCwgMHgwMCwgMHg0MCwgMHgwMCwgMHgyOCwgMHhDRCwKKzB4MDAsIDB4MjAsIDB4MjQsIDB4ODAsIDB4MTAsIDB4NDAsIDB4NDMsIDB4MDAsIDB4MEQsIDB4MDEsIDB4MDYsIDB4OTAsIDB4MTAsCisweDkwLCAweDQwLCAweDQzLCAweDA0LCAweDAxLCAweDAwLCAweDI0LCAweDI0LCAweEQwLCAweDEwLCAweDQwLCAweDM0LCAweDAwLAorMHg4MSwgMHg4MCwgMHgyNCwgMHg4MywgMHg5MCwgMHgwOCwgMHg0MCwgMHgyMCwgMHgwMCwgMHgwMSwgMHgwMiwgMHgwNCwgMHg0MiwKKzB4RDEsIDB4MDAsIDB4NDMsIDB4MEYsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsCisweDZBLCAweDAwLCAweEUxLCAweDAxLCAweDg0LCAweDA3LCAweEQwLCAweDk4LCAweDQzLCAweDU4LCAweDAwLCAweEVELCAweDAxLAorMHhCNCwgMHgwNywgMHhEMCwgMHgxMiwgMHg0MCwgMHg2QiwgMHgwMCwgMHg0QywgMHgwMSwgMHgwNCwgMHgwNCwgMHgxMCwgMHgxRSwKKzB4NDAsIDB4NjMsIDB4MDAsIDB4QzEsIDB4MTEsIDB4ODQsIDB4MDUsIDB4RDAsIDB4MTQsIDB4NTAsIDB4NzgsIDB4MDAsIDB4RTEsCisweDAxLCAweEE0LCAweDA3LCAweEQwLCAweDBCLCAweDQwLCAweDdBLCAweDEyLCAweEIxLCAweDAxLCAweDg1LCAweDA2LCAweEQwLAorMHgxMiwgMHg0OCwgMHgxMywgMHgyMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHgwMCwgMHgyMiwKKzB4MDAsIDB4MDMsIDB4MDgsIDB4MUMsIDB4MDMsIDB4RjAsIDB4QTgsIDB4QzgsIDB4MDAsIDB4ODQsIDB4Q0YsIDB4MDAsIDB4M0MsCisweDgzLCAweDcwLCAweDBDLCAweDQwLCAweDEzLCAweDAwLCAweENFLCAweDAwLCAweDBDLCAweDAwLCAweDMwLCAweDAwLCAweENBLAorMHgxMywgMHgxMCwgMHg0MywgMHgwMCwgMHgyNCwgMHgwMSwgMHhGMCwgMHhFMCwgMHhDMCwgMHgzMCwgMHg0MCwgMHg4MywgMHgxOCwKKzB4MkMsIDB4MDMsIDB4RjAsIDB4ODgsIDB4QzAsIDB4MjQsIDB4NDAsIDB4NDcsIDB4MDgsIDB4MEMsIDB4MDMsIDB4RjAsIDB4MDAsCisweEMxLCAweDRCLCAweDQwLCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweEE4LCAweDM5LCAweDQwLAorMHhGRiwgMHgwMCwgMHhGQywgMHgwMywgMHhGMSwgMHg4QiwgMHhDMCwgMHgxRiwgMHgyMCwgMHhGRiwgMHgwMCwgMHhDQywgMHgwMywKKzB4RjgsIDB4MDcsIDB4QzAsIDB4M0YsIDB4MDAsIDB4RkYsIDB4MDAsIDB4RkMsIDB4MDAsIDB4RjAsIDB4OEIsIDB4QzAsIDB4M0YsCisweDAwLCAweEZGLCAweDA4LCAweEZDLCAweDAxLCAweEYwLCAweDgzLCAweEUwLCAweDNGLCAweDAwLCAweEFGLCAweDAwLCAweERELAorMHg0MywgMHhGMCwgMHg0RiwgMHhDMCwgMHgxRCwgMHgwMCwgMHg3RiwgMHgwMCwgMHhGQywgMHgwMSwgMHhGMCwgMHg4MywgMHhDMCwKKzB4MEIsIDB4MjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4QTAsIDB4NjcsIDB4MDAsIDB4NTMsCisweDAwLCAweDdDLCAweDAzLCAweEYwLCAweDA1LCAweEMwLCAweDM2LCAweDAwLCAweEQ3LCAweDAwLCAweDdDLCAweDAwLCAweEYwLAorMHgwMSwgMHhDMCwgMHgwNywgMHgwMCwgMHg5MywgMHg4MCwgMHg3QywgMHgwNywgMHgzMiwgMHgwMSwgMHhDMiwgMHg0NCwgMHgwMCwKKzB4MTMsIDB4MDAsIDB4NEMsIDB4MDIsIDB4MzAsIDB4MDksIDB4QzAsIDB4MzcsIDB4MDAsIDB4OTMsIDB4MDAsIDB4NUMsIDB4MDMsCisweEYwLCAweDA5LCAweEMwLCAweDU3LCAweDAwLCAweDUzLCAweDgwLCAweDdDLCAweDAxLCAweDMwLCAweDE5LCAweEMwLCAweDQwLAorMHgwMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHg5OCwgMHgzOSwgMHgwMCwgMHhFMSwgMHgwMCwKKzB4QjQsIDB4MDMsIDB4RDAsIDB4MEUsIDB4NDAsIDB4MzgsIDB4MDgsIDB4RUQsIDB4MDAsIDB4QjQsIDB4MDMsIDB4RDAsIDB4MEEsCisweDQwLCAweDIzLCAweDQwLCAweEUxLCAweDAwLCAweDM2LCAweDAzLCAweDA0LCAweDBDLCAweDQwLCAweDI4LCAweDQwLCAweEUxLAorMHgyMCwgMHgwNCwgMHgwMywgMHgxMCwgMHgwRSwgMHg0MCwgMHgzQiwgMHgwMCwgMHhFNSwgMHgwMCwgMHhCNCwgMHgxMywgMHhEMCwKKzB4MEEsIDB4NDAsIDB4M0IsIDB4MDAsIDB4NjEsIDB4MDAsIDB4RjQsIDB4MDEsIDB4QjEsIDB4MDIsIDB4NDAsIDB4NDgsIDB4NjAsCisweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDY5LCAweDAwLCAweDYxLCAweDAxLCAweEI0LAorMHgwNywgMHhEMCwgMHgxQywgMHg0NCwgMHg3OCwgMHgwMCwgMHhFNSwgMHgxMSwgMHhCNiwgMHgwNywgMHg1MCwgMHgxRSwgMHg0MCwKKzB4NUIsIDB4MDAsIDB4RTEsIDB4MDEsIDB4QjQsIDB4MDcsIDB4MTAsIDB4MTYsIDB4NDAsIDB4NTAsIDB4MDAsIDB4NDEsIDB4MDEsCisweDg0LCAweDA3LCAweDE0LCAweDNFLCAweDQwLCAweDdGLCAweDAwLCAweEUxLCAweDAxLCAweDk0LCAweDA3LCAweEQwLCAweDFBLAorMHg0MCwgMHhERiwgMHgwMCwgMHg2MSwgMHgwMSwgMHhGNCwgMHgwNywgMHgxMCwgMHgxOCwgMHg1MCwgMHgxMCwgMHgwMCwgMHgwNCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTYsIDB4MjAsIDB4MzMsIDB4MDAsIDB4QzEsIDB4MTMsIDB4MzQsIDB4MDEsCisweEQwLCAweDlDLCAweDQwLCAweEIwLCAweDA0LCAweDhELCAweDAxLCAweDM2LCAweDAzLCAweEQwLCAweDBDLCAweDQwLCAweDMzLAorMHgwMCwgMHhDMSwgMHgwMiwgMHgzNCwgMHgwNywgMHgxMCwgMHgwQywgMHg0MCwgMHgzMCwgMHgwMCwgMHhDMSwgMHgwMCwgMHgwNCwKKzB4MDMsIDB4MTAsIDB4MkMsIDB4NDAsIDB4NjMsIDB4MDIsIDB4QzUsIDB4MDgsIDB4MzQsIDB4MDMsIDB4RDAsIDB4QUMsIDB4NDEsCisweEQzLCAweDAwLCAweDQxLCAweDYyLCAweDM0LCAweDg1LCAweDkwLCAweDFDLCAweDQwLCAweDU4LCAweDAwLCAweDBDLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNywgMHhBOCwgMHg1NywgMHgwNCwgMHg3MywgMHgwNywgMHhCQywgMHgwOSwgMHhGMCwKKzB4MDcsIDB4RDAsIDB4OUUsIDB4MDQsIDB4NTcsIDB4MDAsIDB4RkMsIDB4MDEsIDB4RjAsIDB4ODcsIDB4RTAsIDB4MUYsIDB4MDAsCisweDczLCAweDAyLCAweEZDLCAweDFELCAweDMwLCAweDE3LCAweEQxLCAweDFDLCAweDAwLCAweDczLCAweDAwLCAweENELCAweDAxLAorMHgzMCwgMHgyNywgMHhDMCwgMHgxNywgMHgwMCwgMHg1MywgMHgwMSwgMHg1QywgMHgwMSwgMHhGMCwgMHgxNywgMHhDMCwgMHgxRiwKKzB4MDAsIDB4NjMsIDB4MDcsIDB4QkMsIDB4MDUsIDB4MzAsIDB4NzcsIDB4QzAsIDB4NUMsIDB4MjAsIDB4MEUsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDgwLCAweDA1LCAweDQwLCAweDBGLCAweDAwLCAweDdDLCAweDQwLCAweEYwLCAweDAxLAorMHhDMCwgMHgwNywgMHgwMCwgMHgxRiwgMHgwMCwgMHg3QywgMHgwMCwgMHhGMCwgMHgwMSwgMHhDMCwgMHgwNywgMHgwMCwgMHgxRiwKKzB4MDAsIDB4N0MsIDB4NDAsIDB4RjAsIDB4MDEsIDB4QzAsIDB4MDcsIDB4MDAsIDB4MUYsIDB4MDAsIDB4N0MsIDB4MDQsIDB4RjAsCisweDAxLCAweEMxLCAweDA3LCAweDAwLCAweDFGLCAweDAwLCAweDdDLCAweDAwLCAweEYwLCAweDAxLCAweEMwLCAweDA3LCAweDQ0LAorMHgxRiwgMHgwNiwgMHg3QywgMHgyNCwgMHhGMCwgMHg0MSwgMHhDMCwgMHg0QiwgMHgwMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4MjUsIDB4MDAsIDB4OUYsIDB4MDAsIDB4NEMsIDB4MDIsIDB4MzAsIDB4MDgsIDB4RTAsCisweDIwLCAweDAwLCAweDkzLCAweDAwLCAweDNDLCAweDAyLCAweDMwLCAweDA4LCAweEMwLCAweDIwLCAweDAwLCAweDgzLCAweDEwLAorMHg0QywgMHgwMiwgMHhGMCwgMHgwOCwgMHhDMCwgMHgyNCwgMHgwMCwgMHg4RiwgMHgwMCwgMHgwQywgMHgwMiwgMHg3MCwgMHgwOCwKKzB4QzAsIDB4NjQsIDB4MDAsIDB4OTMsIDB4MDAsIDB4M0MsIDB4MDIsIDB4MzAsIDB4MDksIDB4QzAsIDB4MjcsIDB4MDAsIDB4OUYsCisweDA4LCAweDRDLCAweDIyLCAweDMwLCAweDU5LCAweEMwLCAweDQzLCAweDIwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMSwgMHgyMCwgMHgyNiwgMHgwMCwgMHg5RCwgMHg4MCwgMHg0NCwgMHgwMiwgMHgxMCwgMHgwOSwgMHgxMCwgMHgyNCwKKzB4NDAsIDB4OTEsIDB4MDAsIDB4NzQsIDB4MDIsIDB4MTQsIDB4MDksIDB4RDAsIDB4MjQsIDB4NTAsIDB4OTEsIDB4NDAsIDB4NEQsCisweDAyLCAweEQwLCAweDA5LCAweDUwLCAweDI0LCAweDAwLCAweDlELCAweDAwLCAweDQ1LCAweDAyLCAweDE0LCAweDA5LCAweDUwLAorMHg2NCwgMHg0MiwgMHg5MSwgMHgwMCwgMHg3NCwgMHgwNiwgMHg1MCwgMHgwOSwgMHg0MCwgMHgyNywgMHgwMCwgMHg5RCwgMHgwMSwKKzB4NTQsIDB4MDYsIDB4NTQsIDB4MjksIDB4NDAsIDB4MDcsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDFDLCAweEEwLCAweDI0LCAweDAwLCAweDlELCAweDAwLCAweDQ0LCAweDAyLCAweDEwLCAweDA5LCAweDQwLCAweDI0LCAweDAwLAorMHg5MSwgMHgwMCwgMHg3NCwgMHgwMiwgMHgxMCwgMHgwOSwgMHgwMCwgMHgyNiwgMHgwMCwgMHg5OSwgMHgwMCwgMHg0NCwgMHgwMywKKzB4RDAsIDB4MDksIDB4NDAsIDB4MjQsIDB4MDAsIDB4OUQsIDB4MDAsIDB4NDQsIDB4MDIsIDB4OTAsIDB4MDksIDB4NDAsIDB4MjAsCisweDAwLCAweDkxLCAweDAwLCAweDc0LCAweDEyLCAweDEwLCAweDA5LCAweDQwLCAweDM3LCAweDAwLCAweDlELCAweDAwLCAweDQ0LAorMHg0MiwgMHgxMSwgMHgyOSwgMHg0MCwgMHg3MywgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwKKzB4MjgsIDB4MjAsIDB4MDAsIDB4OEQsIDB4MDQsIDB4MDUsIDB4MDIsIDB4MTAsIDB4NDgsIDB4NDAsIDB4MjAsIDB4MDEsIDB4ODEsCisweDAwLCAweDM0LCAweDEyLCAweDEwLCAweDQ4LCAweDQ0LCAweDIwLCAweDAxLCAweDg5LCAweDA0LCAweDA0LCAweDEyLCAweEQwLAorMHg0OCwgMHg0MCwgMHgyMCwgMHgwMSwgMHg4RCwgMHgwNCwgMHgwNCwgMHgxMiwgMHgxMCwgMHg0OCwgMHg0MCwgMHg2MCwgMHgwMCwKKzB4ODEsIDB4MDQsIDB4MzQsIDB4MTIsIDB4NTAsIDB4MDgsIDB4NDAsIDB4MjMsIDB4MDAsIDB4OEQsIDB4MDAsIDB4NTQsIDB4MDIsCisweDUwLCAweDQ4LCAweDQwLCAweDUzLCAweEEwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFELCAweEIwLAorMHgwNiwgMHgwMCwgMHgxRiwgMHgwMCwgMHg0NCwgMHgwMCwgMHgzNCwgMHgwMSwgMHg0MCwgMHgwNCwgMHgwMCwgMHgxMywgMHgwMCwKKzB4N0MsIDB4MDAsIDB4MzAsIDB4MDEsIDB4QzAsIDB4MDYsIDB4MDAsIDB4MUIsIDB4MjAsIDB4NEMsIDB4MDAsIDB4RjAsIDB4MDEsCisweEMwLCAweDA0LCAweDAwLCAweDFGLCAweDAwLCAweDRDLCAweDAwLCAweDcwLCAweDAxLCAweEMwLCAweDg0LCAweDAyLCAweDEzLAorMHgwMCwgMHg3QywgMHgwMCwgMHgzMCwgMHgwMSwgMHhDMCwgMHg4NywgMHgwMiwgMHg1RiwgMHg4MCwgMHg0QywgMHgwMCwgMHgzMiwKKzB4MDEsIDB4QzAsIDB4NzcsIDB4QzAsIDB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTksIDB4QTgsIDB4MkIsCisweDAwLCAweEJGLCAweDI4LCAweEZELCAweDAyLCAweEYxLCAweDhCLCAweEMwLCAweDJGLCAweDBBLCAweEJGLCAweDIwLCAweEZDLAorMHgyMiwgMHhGMCwgMHg4QiwgMHhDMCwgMHgyRiwgMHgwMiwgMHhCNywgMHgwOCwgMHhEQywgMHgyMiwgMHhGMiwgMHg4QiwgMHhDMCwKKzB4MkYsIDB4MjIsIDB4QkYsIDB4MDgsIDB4RkMsIDB4MjIsIDB4RjIsIDB4OEIsIDB4QzAsIDB4MkIsIDB4MDAsIDB4QkYsIDB4MDgsCisweDdDLCAweDIyLCAweEYwLCAweDBCLCAweEMwLCAweDJCLCAweDAwLCAweEJGLCAweDAwLCAweEZDLCAweDAyLCAweEYxLCAweDhCLAorMHhDMCwgMHg2NywgMHgyMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHhBMCwgMHgyNywgMHgwMCwKKzB4OUYsIDB4ODQsIDB4N0MsIDB4MDMsIDB4RjAsIDB4MDksIDB4QzAsIDB4MjcsIDB4MDAsIDB4OTMsIDB4MDAsIDB4N0MsIDB4NTIsCisweDMwLCAweDQ5LCAweEMwLCAweDI3LCAweDAwLCAweDlGLCAweDAwLCAweDdDLCAweDAyLCAweDMwLCAweDQ5LCAweEMwLCAweDI0LAorMHgwNSwgMHg5RiwgMHgwNCwgMHg3QywgMHgwMiwgMHhGMCwgMHgwOCwgMHhDMCwgMHgyQywgMHgwMiwgMHhCMywgMHgwNCwgMHhDQywKKzB4MTYsIDB4RjAsIDB4MDksIDB4QzAsIDB4MjcsIDB4MDAsIDB4QkYsIDB4MDAsIDB4QkMsIDB4MDIsIDB4RjIsIDB4MEIsIDB4QzAsCisweDYzLCAweDAwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFDLCAweDE4LCAweDA3LCAweDAwLCAweDFELAorMHgyOCwgMHg3NCwgMHg4MCwgMHhEMCwgMHgwMSwgMHg0MCwgMHgwNywgMHgwMiwgMHgxMSwgMHgwMCwgMHg3NCwgMHgwMCwgMHgxMCwKKzB4ODEsIDB4NDAsIDB4ODcsIDB4MDAsIDB4MUQsIDB4MDAsIDB4NzQsIDB4QTAsIDB4MTIsIDB4MDEsIDB4NDAsIDB4MDQsIDB4MDAsCisweDFELCAweDg4LCAweDc0LCAweDA4LCAweEQwLCAweDAzLCAweDQwLCAweDA0LCAweDQwLCAweDExLCAweDIwLCAweDQ1LCAweDAwLAorMHhEMCwgMHgwMSwgMHg0MCwgMHgxNiwgMHgxNCwgMHgxRCwgMHgwMCwgMHg3NCwgMHgwMCwgMHhEMCwgMHgwMSwgMHg0MCwgMHg3MywKKzB4NjAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4MDAsIDB4MjksIDB4MDAsIDB4QUQsIDB4MDAsCisweEI0LCAweDAyLCAweEQwLCAweDlBLCAweDQwLCAweDZCLCAweDAwLCAweEExLCAweDAwLCAweEI0LCAweDA2LCAweDEwLCAweDFBLAorMHg0MCwgMHg2QiwgMHgwMiwgMHhBRCwgMHgwOSwgMHhCNCwgMHgwNiwgMHgxMCwgMHg5QSwgMHg0OCwgMHg2OCwgMHgyMCwgMHhBRCwKKzB4MDEsIDB4QjAsIDB4MjYsIDB4RDAsIDB4OUEsIDB4NDAsIDB4MjAsIDB4MDAsIDB4ODEsIDB4MDgsIDB4MDQsIDB4MEEsIDB4RDAsCisweDA4LCAweDQwLCAweDIzLCAweDAxLCAweDhELCAweDgwLCAweDM0LCAweDAyLCAweEQwLCAweDE4LCAweDQwLCAweDRCLCAweDAwLAorMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgyMCwgMHg2NSwgMHgwMCwgMHhCRCwgMHgwMCwgMHhGNCwKKzB4OEEsIDB4RDAsIDB4MEIsIDB4NDAsIDB4MkYsIDB4MDAsIDB4QjEsIDB4MDAsIDB4RjQsIDB4MDIsIDB4MTAsIDB4MEIsIDB4NDAsCisweDZGLCAweDAwLCAweEJELCAweDAwLCAweEY0LCAweDAyLCAweDEwLCAweDBCLCAweDQwLCAweDZDLCAweDAwLCAweEJELCAweDAwLAorMHhGNCwgMHgxMiwgMHhEMCwgMHgwQiwgMHg1MCwgMHgyNCwgMHgwMCwgMHg5MSwgMHgwNCwgMHg0NCwgMHgwMiwgMHhEMCwgMHgwOSwKKzB4NDAsIDB4MjYsIDB4MDIsIDB4OUQsIDB4MDIsIDB4NzQsIDB4MEEsIDB4RDAsIDB4MTksIDB4NDAsIDB4NjMsIDB4MDAsIDB4MDYsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweEE4LCAweDI3LCAweDAwLCAweDlGLCAweDAwLCAweDdDLCAweDI2LAorMHhGMCwgMHgyOSwgMHhDOCwgMHhBNywgMHg0MCwgMHg5MSwgMHgwMCwgMHg3QywgMHgyQSwgMHgzNCwgMHgzOSwgMHhDMCwgMHhBNywKKzB4MDAsIDB4OUYsIDB4MEIsIDB4N0MsIDB4MEEsIDB4MzQsIDB4QTksIDB4RDAsIDB4QTQsIDB4MDAsIDB4OUYsIDB4MDMsIDB4N0MsCisweDBBLCAweEYwLCAweDA5LCAweEMwLCAweDY0LCAweDAwLCAweDkzLCAweDAwLCAweDRDLCAweDAyLCAweEYwLCAweDM5LCAweEMxLAorMHhBNywgMHgwMCwgMHg5RiwgMHg4MiwgMHg3QywgMHgwRSwgMHhGMCwgMHgyOSwgMHhDMCwgMHgxNywgMHgyMCwgMHgwRSwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4ODAsIDB4MjUsIDB4MDgsIDB4OUYsIDB4MDAsIDB4NzgsIDB4MDYsIDB4RjAsCisweDA5LCAweDgwLCAweDI3LCAweDAwLCAweDlGLCAweDA5LCAweDdDLCAweDAyLCAweEYwLCAweDQ5LCAweEMwLCAweDI3LCAweDAwLAorMHg5RiwgMHgwMSwgMHgzQywgMHgwMiwgMHhGMCwgMHgwOCwgMHhDMCwgMHgyNywgMHgwMCwgMHg5RiwgMHgwOSwgMHg3QywgMHgwNiwKKzB4RjAsIDB4OTgsIDB4QzAsIDB4MjcsIDB4MDEsIDB4OEYsIDB4MDEsIDB4N0MsIDB4MDIsIDB4RjAsIDB4ODksIDB4QzAsIDB4MjcsCisweDAwLCAweDlGLCAweDI4LCAweDdDLCAweDY2LCAweEYwLCAweDA5LCAweEMwLCAweDRCLCAweDAwLCAweDA2LCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHgwRCwgMHgwMCwgMHgzRiwgMHgwMCwgMHhDQywgMHgwMCwgMHhGMCwgMHgwMywKKzB4QzAsIDB4MEIsIDB4MDAsIDB4M0YsIDB4MDAsIDB4QkMsIDB4MDAsIDB4NzAsIDB4MDMsIDB4QzAsIDB4MEMsIDB4MDAsIDB4M0YsCisweDAwLCAweEZFLCAweDAwLCAweEYwLCAweDAzLCAweEMwLCAweDBGLCAweDAwLCAweDNGLCAweDAwLCAweEZDLCAweDAwLCAweEIwLAorMHgwMywgMHhDMCwgMHg0NCwgMHgwMCwgMHgxRiwgMHgwMCwgMHg3QywgMHgwMCwgMHhGMCwgMHgwMSwgMHhDMCwgMHgwNywgMHgwMCwKKzB4MUYsIDB4MTIsIDB4N0MsIDB4MDgsIDB4MzAsIDB4MDEsIDB4QzAsIDB4NDAsIDB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDE0LCAweDgwLCAweDE0LCAweDAwLCAweDVELCAweDIwLCAweDQwLCAweDAxLCAweDcwLCAweDA1LCAweDQwLAorMHgxNywgMHgwMCwgMHg1RCwgMHgwMCwgMHg3NCwgMHgwMSwgMHhEMCwgMHgwNSwgMHg0MCwgMHgxNCwgMHgwMCwgMHg1RCwgMHgyMCwKKzB4NzQsIDB4MDEsIDB4RDIsIDB4MDUsIDB4NDgsIDB4MTcsIDB4MDAsIDB4NUQsIDB4MDAsIDB4NzQsIDB4MDEsIDB4MzAsIDB4MDUsCisweEMwLCAweDFFLCAweDAwLCAweDVELCAweDAwLCAweDc0LCAweDAxLCAweEQwLCAweDA1LCAweDQwLCAweDE3LCAweDEwLCAweDdELAorMHgwMywgMHhGNCwgMHg0RCwgMHg1MCwgMHgxNywgMHg1MCwgMHg1MSwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MTQsIDB4QTAsIDB4MDIsIDB4MDAsIDB4MEQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4MDAsIDB4NDAsIDB4MDMsCisweDAwLCAweDBELCAweDAwLCAweDM0LCAweDAwLCAweDUwLCAweDAwLCAweDQwLCAweDAyLCAweDAwLCAweDBELCAweDAwLCAweDM2LAorMHgwMCwgMHhEMCwgMHgwMCwgMHg0MCwgMHgwMywgMHgwMCwgMHgwOSwgMHgwMCwgMHgzMCwgMHgwMCwgMHgxNCwgMHgwMCwgMHg0MCwKKzB4MzQsIDB4MDgsIDB4OEQsIDB4MDAsIDB4MzQsIDB4MDIsIDB4RDAsIDB4MEMsIDB4NDAsIDB4MzMsIDB4MDAsIDB4NEQsIDB4MDAsCisweDM0LCAweDA5LCAweDEwLCAweDhDLCAweDQxLCAweDUwLCAweDAwLCAweDBBLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMSwgMHg4OCwgMHgzOCwgMHgwMCwgMHhDRCwgMHgwMSwgMHg4NCwgMHgwMywgMHg1MCwgMHgwRSwgMHg0MCwgMHgzQiwgMHgwMCwKKzB4RUQsIDB4MDAsIDB4QjQsIDB4MDMsIDB4RDAsIDB4MUUsIDB4NDAsIDB4M0EsIDB4MDAsIDB4RUQsIDB4MDAsIDB4QjQsIDB4MDMsCisweEQwLCAweDBFLCAweDQwLCAweDNCLCAweDAwLCAweEVELCAweDAwLCAweDM0LCAweDA3LCAweDEwLCAweDBFLCAweDQwLCAweDJBLAorMHgwMCwgMHhBRCwgMHgwMCwgMHhCNCwgMHg0MiwgMHhEMCwgMHgwRSwgMHg0MCwgMHgzQiwgMHgwMCwgMHg2RCwgMHg0MiwgMHhCNCwKKzB4MDUsIDB4NTAsIDB4MUUsIDB4NDAsIDB4MDUsIDB4MjAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTEsCisweDEwLCAweDQ4LCAweDAwLCAweDJGLCAweDAxLCAweDhELCAweDg0LCAweDcwLCAweDEyLCAweEMwLCAweDRCLCAweDAwLCAweDJGLAorMHgwMSwgMHhCQywgMHgwNCwgMHg3MiwgMHgxMCwgMHhEMCwgMHg0QSwgMHgwOCwgMHgyRCwgMHgyMSwgMHhCNCwgMHgwNCwgMHhGMCwKKzB4MTIsIDB4QzAsIDB4NEIsIDB4MDAsIDB4MkYsIDB4MDEsIDB4QkMsIDB4MDQsIDB4MzAsIDB4MTIsIDB4QzAsIDB4NTgsIDB4MDAsCisweEFGLCAweDAxLCAweEJDLCAweDA2LCAweEYwLCAweDFFLCAweEMwLCAweDdCLCAweDAzLCAweEVGLCAweDAxLCAweEJDLCAweDA1LAorMHgzMCwgMHgxRSwgMHhDMCwgMHg0NCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHhBOCwKKzB4MzUsIDB4MDAsIDB4REYsIDB4MDAsIDB4N0UsIDB4MDMsIDB4NzAsIDB4MEQsIDB4QzAsIDB4MzcsIDB4MDAsIDB4REYsIDB4MDAsCisweDdDLCAweDAzLCAweEYwLCAweDBELCAweEMwLCAweDM1LCAweDAwLCAweERGLCAweDAwLCAweDdDLCAweDAzLCAweEYwLCAweDBELAorMHhDOCwgMHgzNywgMHgwMCwgMHhERiwgMHgwMCwgMHg3QywgMHgwMywgMHg3MCwgMHgwRCwgMHhDMCwgMHgzNywgMHgwMCwgMHg5RiwKKzB4MDAsIDB4N0MsIDB4MDIsIDB4RjAsIDB4MEQsIDB4QzAsIDB4MzcsIDB4MDAsIDB4REYsIDB4MDAsIDB4N0MsIDB4MDEsIDB4RjAsCisweDBDLCAweEMwLCAweDQzLCAweDIwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDIwLCAweDRELAorMHgwMCwgMHgzRiwgMHgwMSwgMHhDQywgMHgyMCwgMHhGMCwgMHgxMywgMHhDMCwgMHg0QywgMHgwMCwgMHgzRiwgMHgwMSwgMHhDQywKKzB4MDQsIDB4RjAsIDB4MTMsIDB4QzAsIDB4NEUsIDB4MDAsIDB4MzMsIDB4MDEsIDB4Q0MsIDB4ODQsIDB4RjAsIDB4MTMsIDB4QzIsCisweDRGLCAweDAyLCAweDNGLCAweDA5LCAweEZDLCAweDA0LCAweEYwLCAweDEzLCAweEMwLCAweDdDLCAweDAwLCAweEJGLCAweDAxLAorMHhGQywgMHgwNywgMHhGMCwgMHgxRSwgMHhDMCwgMHg3QywgMHgwNCwgMHg3MywgMHgwMSwgMHg4QywgMHgwNywgMHgzMCwgMHgxNywKKzB4QzAsIDB4MDMsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTUsIDB4MTgsIDB4MzksIDB4MDgsCisweEVELCAweDAwLCAweDg0LCAweDAzLCAweEYwLCAweDhFLCAweDQwLCAweDM4LCAweDAwLCAweEVELCAweDMwLCAweDk0LCAweDAzLAorMHhEMCwgMHgwRSwgMHg1MCwgMHgzOCwgMHg0MiwgMHhFMSwgMHgwOCwgMHg4NSwgMHgyMywgMHhEMCwgMHgwRSwgMHg0MCwgMHgzQiwKKzB4MDAsIDB4RUQsIDB4MDgsIDB4QjQsIDB4MDMsIDB4RjAsIDB4MEUsIDB4NDAsIDB4MDgsIDB4MDAsIDB4QUQsIDB4MDAsIDB4QjQsCisweDAzLCAweEYwLCAweDBFLCAweEMwLCAweDNCLCAweDAwLCAweDIxLCAweDAwLCAweEFDLCAweDEyLCAweEIwLCAweDVFLCAweDQwLAorMHg1NywgMHg2MCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOSwgMHgwMCwgMHgyRCwKKzB4MTgsIDB4ODQsIDB4MjAsIDB4RDgsIDB4MDAsIDB4NDAsIDB4MDgsIDB4MDAsIDB4M0QsIDB4MDAsIDB4ODQsIDB4MDAsIDB4RDAsCisweDAwLCAweDQwLCAweDgwLCAweDAwLCAweDAxLCAweDAwLCAweDk0LCAweDAwLCAweEQwLCAweDIyLCAweDQwLCAweDhCLCAweDIwLAorMHgyRCwgMHgwOCwgMHhCNCwgMHgwMCwgMHhEMCwgMHgxMCwgMHg0MCwgMHgxOCwgMHgwNCwgMHhBRCwgMHgwMCwgMHhCNCwgMHgwMiwKKzB4RDAsIDB4MEYsIDB4NDAsIDB4MzgsIDB4MDAsIDB4NjEsIDB4MTAsIDB4ODQsIDB4NDMsIDB4MTgsIDB4NEUsIDB4NDAsIDB4MDMsCisweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDIwLCAweDMxLCAweDAwLCAweENELCAweDA2LAorMHgwNiwgMHgwQiwgMHg1MCwgMHgyQywgMHg0MCwgMHgzMCwgMHgwMCwgMHhDRCwgMHgwMCwgMHgxNCwgMHgwQiwgMHhEMCwgMHgwQywKKzB4NDQsIDB4MzAsIDB4MDAsIDB4QzEsIDB4MDAsIDB4MDQsIDB4MDMsIDB4RDAsIDB4MEMsIDB4NDAsIDB4MzMsIDB4MDAsIDB4Q0QsCisweDAyLCAweDM0LCAweDAzLCAweDUwLCAweDBDLCAweDUwLCAweDUwLCAweDAwLCAweDhELCAweDAwLCAweDM0LCAweDAyLCAweDUwLAorMHg3QywgMHg0MCwgMHhGMywgMHgwMCwgMHg4MSwgMHgwMywgMHgyNCwgMHgxNiwgMHg5MCwgMHgyRCwgMHg0MCwgMHgxMywgMHgwMCwKKzB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTUsIDB4QTgsIDB4MDUsIDB4MDAsIDB4MUYsIDB4MDEsIDB4NEMsCisweDI4LCAweEQwLCAweDExLCAweEQwLCAweDQ0LCAweDAwLCAweDFGLCAweDAwLCAweDRDLCAweDA0LCAweEYwLCAweDMxLCAweEMwLAorMHg0NCwgMHgwMCwgMHgxMywgMHgwMSwgMHg1QywgMHgwNCwgMHhGMCwgMHgxMSwgMHhDMCwgMHg0NywgMHgwMCwgMHgxRiwgMHgwMSwKKzB4N0MsIDB4MDQsIDB4RDAsIDB4MDAsIDB4QzAsIDB4NzQsIDB4MDAsIDB4REYsIDB4MDEsIDB4M0MsIDB4MDIsIDB4RDAsIDB4MEQsCisweEMxLCAweEI4LCAweDAxLCAweDQzLCAweDAzLCAweDRDLCAweDA1LCAweDMwLCAweEJELCAweEMwLCAweDU3LCAweDIwLCAweDA2LAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHg3NywgMHgwMCwgMHhERiwgMHgyMCwgMHg3RCwgMHg4NywKKzB4RjAsIDB4MUQsIDB4QzEsIDB4NzcsIDB4MDAsIDB4REYsIDB4MDAsIDB4N0MsIDB4MDcsIDB4RjAsIDB4MUQsIDB4QzAsIDB4NzcsCisweDEwLCAweERGLCAweDAxLCAweDdDLCAweDA3LCAweEYwLCAweDFELCAweEMwLCAweDczLCAweDAwLCAweERGLCAweDgxLCAweDdDLAorMHgwNywgMHhGMCwgMHgxRCwgMHhDMCwgMHgyNywgMHgxMCwgMHg5RiwgMHgwOCwgMHg3QywgMHgwMiwgMHhGMCwgMHgwRCwgMHhDMCwKKzB4MzUsIDB4NDQsIDB4NUYsIDB4MTAsIDB4N0MsIDB4MEIsIDB4RjIsIDB4M0QsIDB4QzQsIDB4MDcsIDB4MDAsIDB4MEMsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDg0LCAweDA4LCAweDBGLCAweDAwLCAweDEzLCAweDAwLCAweEZDLCAweDgwLCAweDMwLAorMHgwMywgMHhDMCwgMHgwQiwgMHgwMCwgMHgzMywgMHgwMCwgMHhCQywgMHg0MCwgMHgzMCwgMHgwMiwgMHhDMSwgMHgwQywgMHgwOCwKKzB4M0YsIDB4MDAsIDB4RkMsIDB4MDAsIDB4RjAsIDB4MDMsIDB4QzAsIDB4MEYsIDB4MDAsIDB4MzIsIDB4MTAsIDB4RkMsIDB4ODAsCisweEYwLCAweDAzLCAweEMwLCAweDBDLCAweDAwLCAweEVGLCAweDA5LCAweENDLCAweDAyLCAweDMwLCAweDBGLCAweEMwLCAweDNGLAorMHgwMCwgMHhCMywgMHgwMCwgMHhDQywgMHgwMCwgMHgzMCwgMHg1RiwgMHhDMCwgMHgxMCwgMHgyMiwgMHgwQywgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4ODUsIDB4MjAsIDB4MzIsIDB4MDAsIDB4RDEsIDB4MDAsIDB4MzQsIDB4MDMsIDB4OTIsIDB4MEQsCisweDQyLCAweDM3LCAweDAwLCAweEQxLCAweDAwLCAweDc0LCAweDAzLCAweDEwLCAweDBELCAweDQwLCAweDM0LCAweDAwLCAweERELAorMHgwMCwgMHg3NiwgMHgwMywgMHhEMCwgMHgwRCwgMHg0MiwgMHgzNywgMHg0MCwgMHhEMSwgMHgwMCwgMHg2NCwgMHgwMywgMHhEMiwKKzB4MEQsIDB4QzAsIDB4MjQsIDB4MDgsIDB4OUQsIDB4MDEsIDB4NDQsIDB4MDIsIDB4MTQsIDB4MEQsIDB4NDAsIDB4MzcsIDB4MDAsCisweDk1LCAweDkzLCAweDE0LCAweDBDLCAweDEwLCAweDRELCAweDQwLCAweDE1LCAweDAyLCAweDA4LCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMSwgMHhBMCwgMHgwNCwgMHgwMCwgMHgxMSwgMHg0MCwgMHg3NCwgMHgwMCwgMHg5MCwgMHgwMSwgMHg0MCwKKzB4MDcsIDB4MDAsIDB4MTEsIDB4MDAsIDB4NzQsIDB4MDAsIDB4MTAsIDB4MDEsIDB4NDAsIDB4MDQsIDB4MDAsIDB4MUQsIDB4MDAsCisweDc0LCAweDAwLCAweEQwLCAweDAxLCAweDQwLCAweDA3LCAweDAwLCAweDE1LCAweDAwLCAweDU0LCAweDAwLCAweEQwLCAweDAxLAorMHg0MCwgMHg3NiwgMHg4MCwgMHhEOSwgMHgwMCwgMHg0NCwgMHgwMywgMHgxOCwgMHgwRCwgMHg0MCwgMHgzNywgMHgwMCwgMHhEMSwKKzB4MjEsIDB4NTQsIDB4MEQsIDB4MTIsIDB4MEQsIDB4NDgsIDB4MDQsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDEwLCAweDI4LCAweDM0LCAweDAwLCAweEMxLCAweDAwLCAweDM0LCAweDAzLCAweDk0LCAweDBDLCAweDQwLCAweDMzLAorMHgwMCwgMHhDMSwgMHgwMCwgMHgzNCwgMHgwMywgMHgxNCwgMHgwQywgMHg0MCwgMHgzMCwgMHgwMCwgMHhDRCwgMHgwMCwgMHgzNCwKKzB4MDMsIDB4RDAsIDB4MEMsIDB4NDAsIDB4MzMsIDB4MDAsIDB4QzUsIDB4MDAsIDB4MzQsIDB4MDMsIDB4OTAsIDB4MEMsIDB4NDgsCisweDAwLCAweDAwLCAweDhELCAweDAwLCAweDA1LCAweDAzLCAweDEwLCAweDBDLCAweDQwLCAweDM3LCAweDIwLCAweDE1LCAweDAwLAorMHg1NCwgMHgwMiwgMHgxMSwgMHgwRCwgMHg0MCwgMHg0MSwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4QjAsIDB4MDYsIDB4MDAsIDB4MTMsIDB4MDAsIDB4N0MsIDB4MDAsIDB4MzAsIDB4MDEsIDB4QzgsIDB4MDcsIDB4NDAsCisweDEzLCAweDAwLCAweDdDLCAweDAwLCAweDMyLCAweDAxLCAweEQwLCAweDA0LCAweDAwLCAweDFGLCAweDAwLCAweDc0LCAweDAwLAorMHhGMCwgMHgwMSwgMHhDMCwgMHgwNywgMHgwMCwgMHgxNywgMHgwMCwgMHg1QywgMHgwMCwgMHhGMCwgMHgwMSwgMHhEMCwgMHgwNCwKKzB4MTAsIDB4REYsIDB4MDAsIDB4NEMsIDB4MDIsIDB4MzAsIDB4MEQsIDB4QzAsIDB4M0IsIDB4MDAsIDB4OTMsIDB4MDAsIDB4NEMsCisweDAyLCAweDMyLCAweDQ1LCAweEMwLCAweDAwLCAweEMwLCAweDBBLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LAorMHhBMCwgMHgzRiwgMHg0MCwgMHhGRiwgMHg4MCwgMHhGQywgMHgwMywgMHg1MSwgMHgwRiwgMHhDMCwgMHgzRiwgMHgwMCwgMHhFRiwKKzB4MDAsIDB4RkMsIDB4MDMsIDB4RjAsIDB4MEYsIDB4QzQsIDB4M0YsIDB4MDAsIDB4RkYsIDB4MDAsIDB4RkMsIDB4MDMsIDB4RjAsCisweDBGLCAweEMwLCAweDNGLCAweDAwLCAweEZCLCAweDAwLCAweEVDLCAweDAzLCAweEYwLCAweDBGLCAweEMwLCAweDBELCAweDEwLAorMHhCRCwgMHgyMCwgMHhGQywgMHgwMiwgMHhGMCwgMHgwRiwgMHhDMCwgMHgzRiwgMHg0MCwgMHhBRiwgMHg4MCwgMHhGRCwgMHgwMiwKKzB4RjAsIDB4MjksIDB4QzAsIDB4MTcsIDB4NjAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4QTAsCisweDJGLCAweDAxLCAweDczLCAweDAxLCAweEZDLCAweDExLCAweDM0LCAweDMzLCAweEMwLCAweDFFLCAweDAxLCAweEIzLCAweDE0LAorMHhDQywgMHgwNywgMHhGMCwgMHgwQiwgMHhDMCwgMHgzQywgMHgwMSwgMHhCRiwgMHg4MCwgMHhDQywgMHgyNywgMHhGMCwgMHg4MywKKzB4QzAsIDB4NzgsIDB4MDAsIDB4MjMsIDB4MDEsIDB4Q0MsIDB4QjMsIDB4RjAsIDB4NEIsIDB4QzAsIDB4MUEsIDB4MjEsIDB4NzMsCisweDAxLCAweEVDLCAweDEwLCAweEYyLCAweDEzLCAweEMwLCAweDNDLCAweDA1LCAweDdGLCAweDAxLCAweEZDLCAweDA1LCAweEYwLAorMHgxRiwgMHhDMCwgMHgwRiwgMHgwMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHgwOCwgMHhGNywKKzB4MDAsIDB4RDEsIDB4ODEsIDB4NzQsIDB4MjUsIDB4MTIsIDB4MEQsIDB4NDAsIDB4RDQsIDB4MDIsIDB4OTEsIDB4MDMsIDB4NDQsCisweDg3LCAweEQwLCAweDM5LCAweDgwLCAweEZFLCAweDAyLCAweDlELCAweDAzLCAweDQ0LCAweDEzLCAweEQwLCAweDYxLCAweDQwLAorMHgzNCwgMHg0NCwgMHgxMywgMHg4MSwgMHhENCwgMHgyMywgMHhEMCwgMHhCOSwgMHg0MCwgMHhENCwgMHgwMiwgMHg5MSwgMHgwMSwKKzB4NDQsIDB4MzEsIDB4RDEsIDB4MTEsIDB4NDAsIDB4RkMsIDB4MDAsIDB4OUQsIDB4ODEsIDB4MzQsIDB4ODcsIDB4RDAsIDB4MUQsCisweDQ0LCAweDBGLCAweDYwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEzLCAweEEwLCAweEEzLCAweDAwLAorMHhDMSwgMHgwMCwgMHg3NCwgMHgwMSwgMHg1MCwgMHg0QywgMHg0MCwgMHgxNiwgMHgwMCwgMHhDNSwgMHgwMCwgMHgwNCwgMHgwMywKKzB4RDAsIDB4MjAsIDB4NDAsIDB4MzAsIDB4MDAsIDB4OEQsIDB4MDIsIDB4MDQsIDB4MTMsIDB4RDAsIDB4MjgsIDB4NDAsIDB4MzAsCisweDAxLCAweDAxLCAweDAwLCAweDA0LCAweDEzLCAweEQwLCAweDA4LCAweDYwLCAweDEzLCAweDAwLCAweDgxLCAweDgwLCAweDI0LAorMHg0MiwgMHhEMiwgMHgwQywgMHg0MCwgMHgzMywgMHgwMCwgMHhDRCwgMHgwMCwgMHgzNCwgMHgwMiwgMHg1MCwgMHgwQywgMHg0MCwKKzB4NEYsIDB4ODAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4QTgsIDB4NzUsIDB4MDAsIDB4RDEsCisweDAwLCAweDc0LCAweDAxLCAweDEwLCAweDFELCAweDQwLCAweDM0LCAweDA0LCAweDk1LCAweDAwLCAweDQ0LCAweDEzLCAweEQwLAorMHgzOSwgMHg2MCwgMHgzNiwgMHgwMCwgMHg5RCwgMHgwMCwgMHg0NCwgMHgwMywgMHhEMCwgMHgwMSwgMHg0MCwgMHg3NCwgMHgwMCwKKzB4NTksIDB4MDAsIDB4NTQsIDB4MDMsIDB4RDAsIDB4MEQsIDB4NDAsIDB4MTUsIDB4MDAsIDB4OTEsIDB4MTAsIDB4NDQsIDB4NjMsCisweEQwLCAweDIxLCAweDQwLCAweDM2LCAweDAwLCAweDlELCAweDA2LCAweDc0LCAweDlCLCAweEQ4LCAweDBELCAweDQwLCAweDBGLAorMHgwMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyMiwgMHhBOCwgMHgyMywgMHg0MCwgMHg5MywgMHg0MCwKKzB4M0MsIDB4M0IsIDB4NzEsIDB4MUQsIDB4QzAsIDB4RDIsIDB4MDAsIDB4OTcsIDB4MDAsIDB4NEMsIDB4MDcsIDB4RjAsIDB4MUQsCisweEMwLCAweDM0LCAweDAwLCAweDhGLCAweDAwLCAweDRELCAweDAzLCAweEYwLCAweDkxLCAweEQwLCAweDM0LCAweDAwLCAweDExLAorMHgwNywgMHg0QywgMHgwMywgMHhGMCwgMHgwQywgMHhDMCwgMHgxMywgMHg0NiwgMHg1MywgMHgwMCwgMHg2QywgMHgwQywgMHhGMCwKKzB4OTgsIDB4RTAsIDB4MzYsIDB4MDAsIDB4NUYsIDB4MDAsIDB4N0MsIDB4MDUsIDB4RTAsIDB4MEQsIDB4QzAsIDB4MEIsIDB4MjAsCisweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA3LCAweDgwLCAweDI1LCAweDAwLCAweEJGLCAweDQ1LCAweEZDLAorMHgwNSwgMHhGMCwgMHgwRiwgMHhDMCwgMHg5RiwgMHg0MCwgMHhFQiwgMHgwMCwgMHhGQywgMHgwMywgMHhGMCwgMHgwRSwgMHhDMCwKKzB4M0YsIDB4MTAsIDB4REYsIDB4MDQsIDB4RkMsIDB4MDMsIDB4RjAsIDB4MEMsIDB4QzAsIDB4M0YsIDB4NDAsIDB4QjcsIDB4MDQsCisweEZDLCAweDAzLCAweEYwLCAweDBCLCAweEM0LCAweDdFLCAweDAwLCAweEZGLCAweDAwLCAweDdDLCAweDg0LCAweEYwLCAweDAzLAorMHg3MCwgMHgzNSwgMHgwMCwgMHhCRiwgMHgwMSwgMHhGQywgMHgwNywgMHhGMCwgMHgwRiwgMHhDMCwgMHgxRiwgMHgwMCwgMHgwNiwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDgsIDB4MjUsIDB4MDAsIDB4OTMsIDB4MDEsIDB4N0MsIDB4MDMsCisweEYwLCAweDBELCAweEMwLCAweDE3LCAweDAwLCAweEQzLCAweDEwLCAweDdDLCAweDAzLCAweEYwLCAweDA1LCAweEMwLCAweDM0LAorMHgwMCwgMHg5NywgMHgwMCwgMHg0QywgMHgwMywgMHhGMCwgMHgwOSwgMHhDMCwgMHgzNCwgMHgwMCwgMHhEQiwgMHgxMCwgMHg1QywKKzB4MDMsIDB4RjAsIDB4MEQsIDB4QzAsIDB4OTYsIDB4ODQsIDB4OTMsIDB4MDIsIDB4N0MsIDB4MDgsIDB4QjQsIDB4MkQsIDB4QzAsCisweDM3LCAweDAwLCAweEQ3LCAweDAyLCAweDdDLCAweDAyLCAweEIwLCAweDBELCAweEMwLCAweDI5LCAweDIwLCAweDA0LCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxQiwgMHhBMCwgMHhFNCwgMHgwMSwgMHg5MSwgMHgwMCwgMHg3NiwgMHgwNSwgMHhEMCwKKzB4MEQsIDB4NDAsIDB4MzcsIDB4MDAsIDB4RDEsIDB4MDAsIDB4NzQsIDB4MDMsIDB4RjAsIDB4MEQsIDB4QzAsIDB4M0QsIDB4MDEsCisweEQxLCAweDAwLCAweDQ0LCAweDgzLCAweERBLCAweDBELCAweDQwLCAweDM0LCAweDAwLCAweENCLCAweDgyLCAweEM0LCAweDQzLAorMHhEMSwgMHgwRCwgMHhDMCwgMHgzNywgMHgxMCwgMHg4QiwgMHgxQSwgMHg3NiwgMHgwMCwgMHgxMCwgMHgwNSwgMHg0MCwgMHgzRiwKKzB4MDAsIDB4OTEsIDB4MDAsIDB4NzQsIDB4MDMsIDB4QjAsIDB4MUQsIDB4QzAsIDB4NEYsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDA3LCAweEEwLCAweDIyLCAweDAxLCAweDAxLCAweDAwLCAweDM0LCAweDA1LCAweEQwLCAweDBELAorMHg0MCwgMHgzMywgMHgwMiwgMHg4MSwgMHgwMiwgMHgzNCwgMHgwMywgMHhEMCwgMHgwOCwgMHg0NCwgMHgzMCwgMHgwMCwgMHhDNSwKKzB4MDAsIDB4MjQsIDB4MDMsIDB4RDAsIDB4MDQsIDB4NDAsIDB4MzQsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MTQsIDB4MDcsIDB4QzAsCisweDA4LCAweDQwLCAweEYwLCAweDIwLCAweEMxLCAweDAzLCAweDM0LCAweDAwLCAweDkwLCAweDA0LCAweDQ4LCAweDMzLCAweDAwLAorMHg4MCwgMHgwMCwgMHgzNiwgMHgwMiwgMHg1MCwgMHg4QywgMHg0MCwgMHg0RSwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MEQsIDB4ODAsIDB4NzgsIDB4MjAsIDB4RTEsIDB4ODEsIDB4QjQsIDB4NDcsIDB4RDAsIDB4MUUsIDB4NjAsCisweDVCLCAweDEwLCAweEExLCAweDgxLCAweEI0LCAweDA3LCAweDUwLCAweDlCLCAweDQyLCAweDc5LCAweDAwLCAweEExLCAweDAxLAorMHhBNCwgMHgwNywgMHhEOCwgMHgxMiwgMHg0MCwgMHg3QywgMHgwMCwgMHhGOSwgMHgwMSwgMHhBNCwgMHgwNywgMHhEMCwgMHgxQSwKKzB4NDAsIDB4NUUsIDB4MDQsIDB4QTksIDB4MDEsIDB4QjQsIDB4MDUsIDB4OTAsIDB4NTIsIDB4NDAsIDB4N0IsIDB4MDAsIDB4QTEsCisweDAxLCAweEI0LCAweDA2LCAweDkwLCAweDFFLCAweDQwLCAweDM2LCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgxMiwgMHgxMCwgMHgyMCwgMHgwMCwgMHg4MSwgMHgwMCwgMHgzNCwgMHgwMSwgMHhGMiwgMHgwQywgMHhFMCwgMHgzMywKKzB4NDAsIDB4QzMsIDB4MDAsIDB4M0MsIDB4MDMsIDB4RDAsIDB4MEQsIDB4QzAsIDB4MzAsIDB4MDAsIDB4QzYsIDB4MjAsIDB4MjQsCisweDAzLCAweEQwLCAweDRDLCAweEMwLCAweDMwLCAweDMwLCAweDgzLCAweDU4LCAweDFDLCAweDAzLCAweEYwLCAweDA4LCAweEMwLAorMHgzMCwgMHgwMCwgMHg4MSwgMHgwMCwgMHgzNCwgMHgwMiwgMHhCNCwgMHgwQywgMHhDMCwgMHgzMywgMHg0MCwgMHg4NywgMHgwMCwKKzB4M0MsIDB4MDIsIDB4NzAsIDB4MEMsIDB4QzQsIDB4NEIsIDB4NDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAyLCAweEI4LCAweDNELCAweDAwLCAweEZGLCAweDAwLCAweEZDLCAweDAzLCAweEYwLCAweDBGLCAweEMwLCAweDNCLCAweDAyLAorMHhCRiwgMHgwMCwgMHhGQywgMHgwMywgMHhGMCwgMHgwRiwgMHhDMCwgMHhCMywgMHgwMCwgMHhCRiwgMHgwMCwgMHg1QywgMHgwMywKKzB4RjAsIDB4MDMsIDB4RDAsIDB4M0YsIDB4MDAsIDB4RkYsIDB4MjAsIDB4REMsIDB4MDMsIDB4RjAsIDB4MEUsIDB4QzAsIDB4MUYsCisweDAwLCAweEJGLCAweDAwLCAweEZDLCAweDIzLCAweDcwLCAweDRCLCAweENBLCAweEJGLCAweDgyLCAweEJGLCAweDAwLCAweEZDLAorMHgwMiwgMHhGMCwgMHgwRSwgMHhDMCwgMHgwQiwgMHg2MCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwKKzB4QTgsIDB4MzcsIDB4MDAsIDB4OUYsIDB4MDAsIDB4N0MsIDB4MDMsIDB4RjAsIDB4MEQsIDB4QzIsIDB4NzcsIDB4MDAsIDB4OTMsCisweDgwLCAweDVDLCAweDgzLCAweDcwLCAweDA5LCAweDgwLCAweEI1LCAweDIyLCAweEQzLCAweDAwLCAweDVDLCAweDAzLCAweEYwLAorMHgwNSwgMHhDMCwgMHg3NywgMHgyMCwgMHg1MywgMHgwMCwgMHg3QywgMHgzMywgMHhFMCwgMHgwRCwgMHhDMCwgMHgzNywgMHgwMCwKKzB4REYsIDB4MDAsIDB4NzgsIDB4MDMsIDB4QjAsIDB4MUQsIDB4QzAsIDB4MzYsIDB4ODEsIDB4REYsIDB4MDAsIDB4NEMsIDB4MDIsCisweEYwLCAweDBELCAweEMwLCAweDQzLCAweDAwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEzLCAweDk4LAorMHhCOSwgMHgxMCwgMHhBRCwgMHg0MCwgMHg5QywgMHgwQiwgMHhEMywgMHgwRSwgMHg0MCwgMHgxMywgMHgwMSwgMHhFMSwgMHgwMCwKKzB4ODQsIDB4MDMsIDB4RDAsIDB4MkEsIDB4NDAsIDB4MzAsIDB4MTEsIDB4RTEsIDB4MjIsIDB4QjQsIDB4ODMsIDB4RDAsIDB4MEUsCisweDQwLCAweDNCLCAweDAwLCAweEUxLCAweDAwLCAweEI0LCAweDUzLCAweDgwLCAweDBBLCAweDQwLCAweEJCLCAweDAwLCAweEVELAorMHgwMCwgMHgzNCwgMHgwMywgMHgxMCwgMHgwRSwgMHg2MCwgMHgzOCwgMHgwOCwgMHhBRCwgMHgwMCwgMHg5NCwgMHgwMiwgMHhEMCwKKzB4MEUsIDB4NDAsIDB4NEYsIDB4NjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4NzksCisweDA1LCAweEFELCAweDAzLCAweEI0LCAweDU3LCAweEQwLCAweDFFLCAweDQwLCAweDdCLCAweDAzLCAweEMxLCAweDA5LCAweDk2LAorMHg0NywgMHhEMCwgMHg3QywgMHg0QywgMHg3OSwgMHg2MCwgMHhFMSwgMHgwNSwgMHhCNiwgMHgwNywgMHhEMCwgMHgxRSwgMHg0MCwKKzB4N0IsIDB4MDAsIDB4RTEsIDB4ODMsIDB4QjQsIDB4MDcsIDB4QzAsIDB4REUsIDB4MDgsIDB4N0IsIDB4MDEsIDB4QUQsIDB4MDEsCisweEI0LCAweDA3LCAweDEwLCAweDFGLCAweDQwLCAweDdBLCAweDkyLCAweEVELCAweDQzLCAweDg0LCAweDA2LCAweEQwLCAweDFFLAorMHg0MCwgMHgxMywgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHgyMCwgMHgzMywgMHgwMCwKKzB4OEQsIDB4NDAsIDB4MTQsIDB4MDIsIDB4RDAsIDB4M0QsIDB4NDEsIDB4MjMsIDB4MDAsIDB4QzEsIDB4MDAsIDB4MDQsIDB4MDYsCisweEQwLCAweDFDLCAweDQwLCAweDMwLCAweDAwLCAweEMxLCAweDAwLCAweDc0LCAweDAzLCAweEQwLCAweEVDLCAweDYwLCAweDIzLAorMHgwMCwgMHhDMSwgMHgwNywgMHgzNCwgMHgwMywgMHg5MSwgMHgxQywgMHg0MCwgMHhBMywgMHgwOSwgMHg4RCwgMHgwMCwgMHgzNCwKKzB4MUYsIDB4MTAsIDB4M0MsIDB4NDQsIDB4MzAsIDB4MDAsIDB4OEQsIDB4MDAsIDB4MTQsIDB4MDIsIDB4RDAsIDB4MEMsIDB4NDAsCisweDVCLCAweDAwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE3LCAweEEwLCAweDExLCAweDEwLCAweDZGLAorMHgwMCwgMHhCQywgMHgyMSwgMHhGMCwgMHgwNywgMHhDMSwgMHgxRiwgMHg0MCwgMHg1MywgMHgwMCwgMHg1QywgMHgwMSwgMHg3MiwKKzB4MTcsIDB4QzIsIDB4MTUsIDB4MDAsIDB4NTIsIDB4MDAsIDB4N0MsIDB4MDEsIDB4RjAsIDB4MzcsIDB4QzAsIDB4MTcsIDB4MDAsCisweDczLCAweDIzLCAweDdDLCAweDAxLCAweEYyLCAweDE1LCAweEMzLCAweDlGLCAweDAxLCAweDdGLCAweDA1LCAweEZDLCAweDFELAorMHgzNCwgMHgxNywgMHhDNSwgMHgxNiwgMHgwMCwgMHg3RiwgMHg0MCwgMHhDQywgMHg4MSwgMHhFMCwgMHgwNSwgMHhDMCwgMHg1RiwKKzB4MjAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4MDAsIDB4ODcsIDB4MjAsIDB4MUYsIDB4MDQsCisweDVDLCAweDAwLCAweEYwLCAweDAxLCAweEMwLCAweDA3LCAweDAyLCAweDFGLCAweDA4LCAweDdDLCAweDAwLCAweEYwLCAweDAxLAorMHhDMCwgMHgwNywgMHgwMCwgMHgxRiwgMHgwMCwgMHg3QywgMHgwMCwgMHhGMCwgMHgwMCwgMHhDOCwgMHgwNywgMHg0MiwgMHgxRiwKKzB4MDIsIDB4M0MsIDB4MDAsIDB4QjAsIDB4MDEsIDB4QzIsIDB4MDMsIDB4MDAsIDB4MUYsIDB4MDAsIDB4M0MsIDB4MDAsIDB4NzAsCisweDAxLCAweEMwLCAweDA3LCAweDAwLCAweDFCLCAweDIwLCAweDdDLCAweDAwLCAweEYwLCAweDAxLCAweEMwLCAweDRCLCAweDAwLAorMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHgyNywgMHgwMSwgMHg5QiwgMHgwMSwgMHg0QywKKzB4MjIsIDB4MzAsIDB4MDksIDB4QzAsIDB4MjQsIDB4MDAsIDB4OUYsIDB4MDEsIDB4NEMsIDB4MDIsIDB4RjAsIDB4MDksIDB4RDAsCisweDYxLCAweDAwLCAweDk2LCAweDA0LCAweDdDLCAweDAyLCAweDcwLCAweDA5LCAweEMyLCAweDI0LCAweDAwLCAweDlGLCAweDAwLAorMHg1QywgMHgwMiwgMHg3OCwgMHg4OSwgMHhDMCwgMHgyNywgMHgwMCwgMHg5MywgMHgwMCwgMHg3QywgMHgwMiwgMHgzMCwgMHg0OSwKKzB4QzksIDB4MjcsIDB4MDAsIDB4OUYsIDB4MDAsIDB4NEMsIDB4MDIsIDB4MzAsIDB4MDksIDB4QzAsIDB4NDMsIDB4MjAsIDB4MDQsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDIwLCAweEVFLCAweDAwLCAweDkxLCAweDg5LCAweEM0LCAweDA2LAorMHgxMCwgMHgwOSwgMHg0MCwgMHg2QywgMHgwMCwgMHhBRCwgMHgwMywgMHg0NCwgMHgwMiwgMHhEMCwgMHgwQiwgMHg0MiwgMHg2NCwKKzB4MDAsIDB4QjEsIDB4MDcsIDB4NzQsIDB4MDIsIDB4MTAsIDB4MDksIDB4NDAsIDB4QTQsIDB4ODIsIDB4OEQsIDB4MDIsIDB4NDQsCisweDAyLCAweDEwLCAweDBCLCAweDQ4LCAweDJGLCAweDAwLCAweDkxLCAweDQwLCAweDc0LCAweDAyLCAweEIwLCAweDc5LCAweDQwLAorMHgyNywgMHgwMCwgMHg4NywgMHgwMCwgMHgyQywgMHgwMiwgMHg1MCwgMHgwOSwgMHg0MCwgMHgwNywgMHgwMCwgMHgwOCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4QTAsIDB4MjQsIDB4MDQsIDB4OTEsIDB4MDAsIDB4NDQsIDB4MDIsIDB4MTYsCisweDBELCAweDYwLCAweDI0LCAweDAxLCAweDlELCAweDBBLCAweDQwLCAweDAyLCAweEQwLCAweDA4LCAweDQwLCAweDI0LCAweDAyLAorMHg5RCwgMHgwMCwgMHg3NCwgMHgwMiwgMHg1MCwgMHgwOSwgMHg0MCwgMHhBNCwgMHgyMCwgMHg5RCwgMHgxOCwgMHg1NCwgMHgwMiwKKzB4NTAsIDB4MDksIDB4NDEsIDB4MjcsIDB4MDAsIDB4OTEsIDB4MDAsIDB4NjQsIDB4MDIsIDB4MDAsIDB4MDksIDB4NDAsIDB4MjcsCisweDAwLCAweDk4LCAweDAwLCAweDQ0LCAweDAyLCAweDEwLCAweDA5LCAweDQwLCAweDczLCAweDAwLCAweDAyLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgyMCwgMHgyMCwgMHgwMCwgMHg4MSwgMHgwMCwgMHgwNCwgMHgwMiwgMHgxMCwgMHg4OCwKKzB4NDAsIDB4MjAsIDB4MDAsIDB4OEQsIDB4MDAsIDB4MDQsIDB4MEEsIDB4RDAsIDB4MjgsIDB4NDAsIDB4MjAsIDB4MDAsIDB4ODksCisweDAwLCAweDM0LCAweDIyLCAweDUwLCAweDg4LCAweDQwLCAweDIwLCAweDAyLCAweDhELCAweDQwLCAweDAwLCAweDBBLCAweDEwLAorMHgwOCwgMHg0OCwgMHgyMywgMHg0MCwgMHg4MSwgMHgwMCwgMHgzNCwgMHgyMiwgMHg5OCwgMHgwOCwgMHg0MCwgMHgyMywgMHgyMCwKKzB4OTUsIDB4QzIsIDB4NjQsIDB4MEEsIDB4MTAsIDB4MDgsIDB4NDAsIDB4NTMsIDB4QTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDFELCAweEIwLCAweDQ2LCAweDQwLCAweDEzLCAweDAwLCAweDRDLCAweDA0LCAweDMyLCAweDIxLCAweEQwLAorMHg0NCwgMHgwMCwgMHgxRiwgMHgwMSwgMHg0RCwgMHgwMCwgMHhGMCwgMHgxMSwgMHhDMCwgMHgwNSwgMHgxNSwgMHgxRiwgMHgwMSwKKzB4N0MsIDB4MDgsIDB4NzAsIDB4NjEsIDB4RDEsIDB4ODAsIDB4MDAsIDB4MUQsIDB4MDAsIDB4NUMsIDB4NTAsIDB4NTAsIDB4MTEsCisweDQwLCAweDQ3LCAweDAwLCAweDUzLCAweDQwLCAweDZDLCAweDU4LCAweDMwLCAweDAxLCAweEMwLCAweDA3LCAweDA1LCAweDBGLAorMHgwMCwgMHg0RCwgMHgwMCwgMHgzNCwgMHgwMSwgMHhDNCwgMHg3NywgMHhDMCwgMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MTksIDB4QjgsIDB4QUYsIDB4MDgsIDB4QkYsIDB4MDAsIDB4RkQsIDB4MEEsIDB4RjAsIDB4NEIsIDB4QzAsIDB4QUYsCisweDAwLCAweEJGLCAweDAyLCAweEZDLCAweDA2LCAweEYwLCAweDNCLCAweEMwLCAweDI3LCAweDAwLCAweEIzLCAweDAyLCAweDdDLAorMHgxMiwgMHhCMSwgMHg0QiwgMHg4MCwgMHgyRiwgMHgwMSwgMHhCRiwgMHgwMCwgMHg3QywgMHgwNiwgMHhGMCwgMHgyQiwgMHhDMCwKKzB4QUYsIDB4MDgsIDB4QkYsIDB4MDAsIDB4RjgsIDB4MTIsIDB4RjIsIDB4MEEsIDB4QzQsIDB4MjcsIDB4MDAsIDB4QjcsIDB4MDEsCisweERDLCAweDA2LCAweEYwLCAweDA5LCAweEMwLCAweDY3LCAweDIwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgxOCwgMHhBMCwgMHg2RiwgMHgwMCwgMHhCRiwgMHg0MCwgMHhDNCwgMHg1NiwgMHhGMCwgMHgwOSwgMHhDMCwgMHg2RiwgMHgwMSwKKzB4QkYsIDB4NDEsIDB4N0MsIDB4MDIsIDB4MzAsIDB4NzksIDB4QzAsIDB4MkMsIDB4MDAsIDB4RkYsIDB4MzEsIDB4NEMsIDB4MjIsCisweEYwLCAweDQ5LCAweEMwLCAweDJDLCAweDAwLCAweEIzLCAweDAwLCAweEZDLCAweDAyLCAweEIwLCAweDVCLCAweEMxLCAweDZELAorMHgxNCwgMHhCMywgMHg2MCwgMHg0QywgMHg1MiwgMHgzMiwgMHgwQiwgMHhDMCwgMHgyNywgMHgyOCwgMHg5RiwgMHgwMiwgMHg3QywKKzB4MEEsIDB4RjAsIDB4MEIsIDB4QzYsIDB4NjMsIDB4MDAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MUMsCisweDA4LCAweDA3LCAweDAwLCAweDFELCAweDAwLCAweDQ0LCAweDA4LCAweEQwLCAweDAxLCAweDQzLCAweDk3LCAweDAwLCAweDFELAorMHgwMiwgMHgzNCwgMHg1NCwgMHg1MiwgMHg3NSwgMHg1MCwgMHg4NCwgMHgwMCwgMHgxRCwgMHgwMiwgMHg1NCwgMHgwMCwgMHg5MCwKKzB4NDEsIDB4MTEsIDB4MDQsIDB4NDEsIDB4MTEsIDB4MDAsIDB4NzQsIDB4OUMsIDB4MTAsIDB4MjEsIDB4NDAsIDB4ODQsIDB4MDAsCisweDUxLCAweDAwLCAweDU0LCAweDExLCAweDUwLCAweDA1LCAweDAwLCAweDg3LCAweDEwLCAweDFELCAweDAxLCAweDc0LCAweDA0LAorMHhEMCwgMHgwMSwgMHg0MCwgMHg3MywgMHg2MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHhBMCwKKzB4QTMsIDB4ODAsIDB4REQsIDB4MDAsIDB4MTQsIDB4MDIsIDB4RDAsIDB4MDgsIDB4NDAsIDB4QjMsIDB4MzAsIDB4OEMsIDB4MDIsCisweDM0LCAweDAyLCAweDEwLCAweEM4LCAweDQwLCAweDIyLCAweDAyLCAweDhELCAweDAwLCAweDA0LCAweDAyLCAweDUwLCAweEM4LAorMHg0MCwgMHgyMCwgMHgyNSwgMHg4MCwgMHgwMCwgMHgzNCwgMHg2MiwgMHg5MiwgMHgwOCwgMHg2MCwgMHgyMywgMHgwMCwgMHg5NSwKKzB4MDAsIDB4MTQsIDB4NTIsIDB4RDAsIDB4MDgsIDB4NDIsIDB4MjMsIDB4ODIsIDB4OEQsIDB4MDAsIDB4MzQsIDB4MDIsIDB4RDAsCisweDA4LCAweDQwLCAweDRCLCAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweEE4LCAweDI1LAorMHgwMCwgMHg5RCwgMHgyMiwgMHg1NCwgMHgwMiwgMHhEMCwgMHg2OSwgMHg0MiwgMHgyNywgMHgwMCwgMHg5RCwgMHgwMCwgMHgzNCwKKzB4MDIsIDB4NTAsIDB4MDksIDB4NDAsIDB4MjYsIDB4ODAsIDB4OUQsIDB4MDAsIDB4NTQsIDB4ODIsIDB4OTAsIDB4MDgsIDB4NDEsCisweDIwLCAweDAwLCAweDkxLCAweDI0LCAweDc2LCAweDAyLCAweDEwLCAweDA5LCAweDQwLCAweDI0LCAweDAyLCAweEQ1LCAweDQ4LAorMHgxNCwgMHgwMiwgMHg1MCwgMHgwOSwgMHg0MiwgMHgyNywgMHgwMCwgMHg5RCwgMHgwMCwgMHg3NCwgMHgxQSwgMHhEMCwgMHgwOSwKKzB4NDAsIDB4NjMsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4QTgsIDB4MjcsIDB4MDAsCisweDhGLCAweDgyLCAweDVELCAweDgyLCAweEYwLCAweDA5LCAweEMwLCAweDI3LCAweDAyLCAweDlGLCAweDAwLCAweEZDLCAweDAyLAorMHgzMCwgMHhBQiwgMHhDMCwgMHgyNiwgMHgxMCwgMHg5RiwgMHgwMCwgMHg0QywgMHgwMiwgMHhGMCwgMHgyOSwgMHhDMCwgMHgyNCwKKzB4MDAsIDB4OTMsIDB4MDQsIDB4RkMsIDB4MDIsIDB4QjAsIDB4MTgsIDB4QzgsIDB4MjcsIDB4NDAsIDB4ODcsIDB4MDAsIDB4NUMsCisweDBBLCAweDYwLCAweDI5LCAweEMwLCAweDI3LCAweDAwLCAweEJGLCAweDI0LCAweEZDLCAweDAyLCAweEYwLCAweDA5LCAweEMwLAorMHgxNywgMHhBMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNiwgMHg4MCwgMHgyNSwgMHgwMCwgMHg5RiwKKzB4MDAsIDB4NkMsIDB4MEUsIDB4RjAsIDB4MTksIDB4QzAsIDB4MjcsIDB4MDAsIDB4OUUsIDB4MDksIDB4N0MsIDB4MEUsIDB4RjAsCisweDA4LCAweEMwLCAweDI1LCAweDgwLCAweDhGLCAweDAwLCAweDdDLCAweDAyLCAweEYwLCAweDA5LCAweEMyLCAweEE3LCAweDE0LAorMHg5RiwgMHgyMCwgMHgzQywgMHgwMiwgMHg3MCwgMHg1OSwgMHhDQSwgMHgyNywgMHgwOCwgMHg5QiwgMHgxMSwgMHg3QywgMHgwMiwKKzB4RjgsIDB4NDksIDB4QzAsIDB4MjcsIDB4ODAsIDB4OUYsIDB4MDAsIDB4N0MsIDB4MDIsIDB4RjIsIDB4MDksIDB4QzAsIDB4NEIsCisweDAwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDA4LCAweDA1LCAweDAwLCAweDFGLCAweDAwLAorMHg3QywgMHgwMCwgMHhCMCwgMHgwMSwgMHhDMCwgMHg4NywgMHgwMCwgMHgxQiwgMHgxMCwgMHg3QywgMHgwMCwgMHgzMCwgMHgyMSwKKzB4RDAsIDB4MDQsIDB4MDIsIDB4MUYsIDB4MDgsIDB4NEQsIDB4MDAsIDB4RjAsIDB4MDEsIDB4RTAsIDB4MDQsIDB4MDAsIDB4MTcsCisweDEwLCAweDRDLCAweDAwLCAweEYwLCAweDQxLCAweEMwLCAweDAyLCAweDQwLCAweDEzLCAweDAyLCAweDRDLCAweDA4LCAweEYyLAorMHgwMSwgMHhDMCwgMHgwNSwgMHgwMCwgMHgxRiwgMHgwMCwgMHg3QywgMHgwMCwgMHhGMCwgMHgwMSwgMHhDMCwgMHg0MywgMHgyMCwKKzB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4QTAsIDB4MUMsIDB4MDAsIDB4NUQsIDB4MDAsIDB4NzAsCisweDAxLCAweDE4LCAweDA1LCAweDQ4LCAweDE3LCAweDAwLCAweDdDLCAweDAzLCAweDc0LCAweDAxLCAweDEwLCAweDA1LCAweDUwLAorMHg1NCwgMHgwMCwgMHg3QywgMHgwMywgMHg0NCwgMHgwMSwgMHhEMCwgMHgwNSwgMHg0MCwgMHg5QywgMHgwMSwgMHg3RCwgMHg0MSwKKzB4N0MsIDB4MTEsIDB4NzAsIDB4MDcsIDB4QzAsIDB4REUsIDB4MDEsIDB4NzAsIDB4MDMsIDB4NjgsIDB4MDEsIDB4MTAsIDB4MzcsCisweDA1LCAweDE0LCAweDgwLCAweDVELCAweDAwLCAweDc0LCAweDAxLCAweEMwLCAweDQ1LCAweDQwLCAweDUzLCAweDAwLCAweDAyLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHhBMCwgMHgyMiwgMHgyMCwgMHg4RCwgMHgwMCwgMHgzMCwgMHgwNiwKKzB4MTAsIDB4MEMsIDB4NDAsIDB4MjMsIDB4MTAsIDB4OEMsIDB4MDgsIDB4MzYsIDB4MDMsIDB4MTAsIDB4MEMsIDB4NDAsIDB4MzAsCisweDAwLCAweDhELCAweDEzLCAweDI0LCAweDAzLCAweEMwLCAweDBDLCAweDQwLCAweEIwLCAweDAwLCAweENELCAweDAwLCAweDI0LAorMHgwMywgMHg1MCwgMHgzOCwgMHg0MCwgMHgyMCwgMHgyOSwgMHhDMCwgMHgwQSwgMHgwNCwgMHgwMywgMHg5MCwgMHgzOCwgMHgwMSwKKzB4MzEsIDB4MDAsIDB4Q0QsIDB4ODAsIDB4MzYsIDB4MDMsIDB4QzAsIDB4MEMsIDB4NDAsIDB4NTMsIDB4MDAsIDB4MEEsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDgwLCAweDM4LCAweDAwLCAweEVELCAweDQwLCAweEI0LCAweDBGLCAweDEwLAorMHgwRSwgMHg0OCwgMHgzQiwgMHgwMCwgMHhBRCwgMHgwMCwgMHhCNCwgMHgyMywgMHgxMCwgMHg0QywgMHg0MCwgMHgyOCwgMHgwMCwKKzB4QUQsIDB4MDAsIDB4QTQsIDB4MDMsIDB4RDAsIDB4NEUsIDB4NjAsIDB4MzgsIDB4ODAsIDB4RkQsIDB4MDMsIDB4QTQsIDB4MjMsCisweDUwLCAweDI4LCAweDQwLCAweDNBLCAweDAwLCAweEYxLCAweDAwLCAweDI2LCAweDIzLCAweDEwLCAweDFCLCAweDQwLCAweDM4LAorMHgwMCwgMHhFRCwgMHgwNCwgMHhCNCwgMHgxMywgMHg5MCwgMHgwRSwgMHg0MCwgMHgwNywgMHgyMCwgMHgwMiwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MTUsIDB4MTAsIDB4NjgsIDB4MDAsIDB4RUYsIDB4MDEsIDB4M0MsIDB4MDcsIDB4MzQsIDB4M0UsCisweEMwLCAweDdCLCAweDAwLCAweEFGLCAweDgxLCAweEJDLCAweDA3LCAweDM0LCAweDdFLCAweDQwLCAweDc4LCAweDAwLCAweEFELAorMHgwMSwgMHhBNCwgMHgxRiwgMHhGOSwgMHhCRiwgMHg0MCwgMHg0OCwgMHgwMCwgMHhFNywgMHgwMSwgMHhBQywgMHgxNywgMHg3MCwKKzB4MTYsIDB4RTAsIDB4NjgsIDB4MDAsIDB4RTMsIDB4MDEsIDB4OEMsIDB4NTcsIDB4QjAsIDB4MUUsIDB4RTAsIDB4NzksIDB4MDAsCisweEVELCAweDAzLCAweEJFLCAweDBGLCAweEYwLCAweDFFLCAweEM0LCAweDQ3LCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgxMCwgMHhCOCwgMHgyNSwgMHgyMCwgMHhERiwgMHgwMCwgMHg3QywgMHgwMywgMHhGMSwgMHgwRCwgMHg0NCwKKzB4MzcsIDB4MDAsIDB4OUYsIDB4MDAsIDB4N0MsIDB4MDMsIDB4RDAsIDB4MEQsIDB4NDAsIDB4MjcsIDB4MTAsIDB4OEYsIDB4MDAsCisweDVDLCAweDRCLCAweEYwLCAweDZELCAweEQwLCAweDA3LCAweDAwLCAweDBGLCAweDAwLCAweDdDLCAweDgzLCAweDcwLCAweDA1LAorMHhDMCwgMHgzMywgMHgwOCwgMHhDRiwgMHgwMCwgMHg3QywgMHgwQiwgMHg3MSwgMHgwQywgMHhDMCwgMHgzNywgMHgxMCwgMHhERiwKKzB4MDAsIDB4NzQsIDB4MDMsIDB4RjAsIDB4MEQsIDB4QzAsIDB4NDMsIDB4MjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweEEwLCAweDZGLCAweDAwLCAweEYzLCAweDA5LCAweEZDLCAweDgzLCAweDMwLCAweDlGLCAweEMwLCAweDdGLAorMHgwMiwgMHhGMywgMHgwMSwgMHhGQywgMHgwNywgMHhGMCwgMHgxRSwgMHg4MCwgMHg3RCwgMHgwMCwgMHhCRiwgMHgwMSwgMHhGQywKKzB4MjcsIDB4MzAsIDB4MUYsIDB4QzAsIDB4N0UsIDB4MjIsIDB4RkYsIDB4MDEsIDB4RkMsIDB4MDYsIDB4RjAsIDB4MUYsIDB4QzAsCisweDZDLCAweDAwLCAweEZGLCAweDAxLCAweEZDLCAweDA3LCAweEIwLCAweDFCLCAweEMwLCAweDdGLCAweDAyLCAweEVGLCAweDA5LAorMHg4QywgMHgwNywgMHgzMCwgMHgxRiwgMHhDMCwgMHgwMywgMHgyMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MTUsIDB4ODgsIDB4MzksIDB4MDAsIDB4RTEsIDB4ODAsIDB4QjAsIDB4NTMsIDB4QjQsIDB4MEUsIDB4NDYsIDB4M0IsIDB4MDIsCisweEUxLCAweDgwLCAweEI0LCAweDAzLCAweDcwLCAweDRFLCAweDQ4LCAweDM5LCAweDAwLCAweEFELCAweDA0LCAweEI0LCAweDAzLAorMHgxMCwgMHgwRSwgMHg0MSwgMHgzOCwgMHgwMCwgMHhFRCwgMHgwNiwgMHhCNCwgMHgwMiwgMHg5MCwgMHgwRSwgMHhDNCwgMHgzOSwKKzB4MDAsIDB4MkYsIDB4MDAsIDB4RjQsIDB4ODMsIDB4MTAsIDB4NEEsIDB4MDAsIDB4M0IsIDB4MDgsIDB4RUQsIDB4MjAsIDB4QUMsCisweDAzLCAweEYwLCAweDBFLCAweDQwLCAweDU3LCAweDIwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgyOSwgMHgwNCwgMHhFMSwgMHgwMCwgMHgzMCwgMHgzMywgMHgxOCwgMHgwRSwgMHg2MCwgMHgzMywgMHhDMCwgMHhFOSwKKzB4MTAsIDB4QjQsIDB4MjcsIDB4RDAsIDB4MUYsIDB4NzIsIDB4M0IsIDB4MDAsIDB4QUQsIDB4ODAsIDB4QjQsIDB4MDMsIDB4OTgsCisweDBDLCAweDQwLCAweDI5LCAweDIwLCAweEVDLCAweDEwLCAweEE0LCAweDAyLCAweEQwLCAweDBFLCAweDQwLCAweDJBLCAweDAwLAorMHhFRCwgMHgwMCwgMHhCNCwgMHgwMywgMHg1MCwgMHgwRSwgMHg0OCwgMHgzQiwgMHhBMCwgMHhGRCwgMHgxMSwgMHhDNCwgMHgwNywKKzB4MTAsIDB4MEUsIDB4NDAsIDB4MDMsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MjgsCisweDYzLCAweDAwLCAweEMxLCAweDIwLCAweDM0LCAweDhCLCAweDkwLCAweDFDLCAweDQwLCAweEIzLCAweDAxLCAweDQ5LCAweDIwLAorMHgzNCwgMHgwNywgMHg1MCwgMHgyQywgMHg0MCwgMHgzMSwgMHgwMCwgMHg4RCwgMHgwMSwgMHgzNCwgMHgwMywgMHg5NCwgMHgxQywKKzB4NjQsIDB4NjEsIDB4MDAsIDB4MEQsIDB4MTMsIDB4NzQsIDB4ODIsIDB4OTAsIDB4OUMsIDB4NDAsIDB4RjEsIDB4MDAsIDB4MDUsCisweDAzLCAweDM0LCAweDAzLCAweDExLCAweDFDLCAweDQwLCAweDMzLCAweDEwLCAweENELCAweDAzLCAweDA0LCAweDBCLCAweDU4LAorMHgwQywgMHg0MCwgMHgxMywgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwgMHg4OCwgMHg2NSwKKzB4MDAsIDB4QzMsIDB4MDQsIDB4N0MsIDB4MDcsIDB4MTAsIDB4MUYsIDB4NDAsIDB4MzcsIDB4MDQsIDB4OEIsIDB4MDEsIDB4NzQsCisweDAzLCAweEYwLCAweDBELCAweEQwLCAweDM3LCAweDAwLCAweERGLCAweDExLCAweEZDLCAweDAzLCAweEIwLCAweDJGLCAweEMwLAorMHgzNSwgMHgxMSwgMHg1RiwgMHgwMywgMHg3QywgMHgwMywgMHhGMCwgMHgwOSwgMHhDMCwgMHhBNiwgMHgwOCwgMHg5RCwgMHgwNCwKKzB4RkMsIDB4MTcsIDB4NTQsIDB4NjgsIDB4QzAsIDB4MzcsIDB4MDAsIDB4REYsIDB4QzMsIDB4NDUsIDB4MTMsIDB4MTUsIDB4MEQsCisweEMwLCAweDU3LCAweDAwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDM3LCAweDQwLAorMHhERiwgMHgwMCwgMHg3QywgMHgxMywgMHg3MCwgMHg4RCwgMHhDMCwgMHgzNywgMHgwMCwgMHg5NywgMHgwMCwgMHg3QywgMHgyMywKKzB4RjAsIDB4NEQsIDB4RDAsIDB4MjcsIDB4MDAsIDB4REYsIDB4MDIsIDB4N0MsIDB4MDMsIDB4NzAsIDB4MEQsIDB4MDAsIDB4QjQsCisweDA4LCAweDVGLCAweDgwLCAweDdDLCAweDAyLCAweEIyLCAweDA5LCAweEMwLCAweDI3LCAweDA2LCAweDlGLCAweDAyLCAweDNDLAorMHgwMywgMHg1MCwgMHgwOSwgMHhDMCwgMHgzMywgMHgwMCwgMHhERSwgMHgwMCwgMHg3QywgMHgwMywgMHhCMCwgMHgwRCwgMHhDMCwKKzB4MDcsIDB4MDAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDgsIDB4MjcsIDB4MDAsIDB4RkYsCisweDkwLCAweENELCAweDAzLCAweEYxLCAweDBGLCAweEMxLCAweDNFLCAweDAwLCAweEJGLCAweDAxLCAweENFLCAweDAzLCAweDMyLAorMHgwRiwgMHhFMCwgMHgyQywgMHgwMCwgMHhCRiwgMHgwMSwgMHhGQywgMHgwMywgMHhGMCwgMHgwRiwgMHhDMSwgMHg1RiwgMHgwMCwKKzB4N0YsIDB4MDEsIDB4RkMsIDB4MjMsIDB4MzgsIDB4MDUsIDB4RTAsIDB4MkMsIDB4MDEsIDB4MzgsIDB4OTAsIDB4RkMsIDB4MDMsCisweDMwLCAweDRCLCAweERELCAweDNELCAweDAwLCAweEYzLCAweDEwLCAweENDLCAweDQzLCAweDc4LCAweDlGLCAweEMwLCAweDEzLAorMHgwMiwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgyMCwgMHg1NiwgMHgwMCwgMHhERCwgMHg0OSwKKzB4NDQsIDB4MDMsIDB4NzAsIDB4MEMsIDB4NDAsIDB4NzQsIDB4MDgsIDB4OUQsIDB4MDAsIDB4MDQsIDB4MDMsIDB4QjAsIDB4MEQsCisweEMwLCAweDY2LCAweDgwLCAweDlELCAweDAwLCAweDc0LCAweDAzLCAweEQwLCAweDBELCAweEMwLCAweDE1LCAweDAzLCAweDFELAorMHgyMywgMHg1QywgMHgwMiwgMHhCMCwgMHgwNCwgMHg0NCwgMHgyNSwgMHgwMCwgMHgxRCwgMHg0MSwgMHg3NCwgMHgwMywgMHg3MCwKKzB4MDksIDB4NDAsIDB4MzQsIDB4MDAsIDB4RDMsIDB4MDAsIDB4N0MsIDB4MDMsIDB4RDAsIDB4MUQsIDB4NDAsIDB4MTcsIDB4MDIsCisweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweEEwLCAweEE0LCAweDAxLCAweERELCAweDAwLCAweDQ0LAorMHgwNywgMHhEMCwgMHgwRCwgMHg2MCwgMHgzNiwgMHgwMiwgMHg5RCwgMHgwNCwgMHg0NCwgMHgwMywgMHgxMCwgMHgwQywgMHg0OCwKKzB4MzQsIDB4MDIsIDB4REQsIDB4MDYsIDB4NzQsIDB4MDMsIDB4RDAsIDB4MEQsIDB4NjAsIDB4MDcsIDB4MDAsIDB4OUQsIDB4NDQsCisweDc0LCAweDAzLCAweDkzLCAweDBELCAweDQwLCAweEE0LCAweDAwLCAweDlELCAweDAxLCAweDc0LCAweDAzLCAweDEwLCAweDI5LAorMHg0MCwgMHgzNCwgMHgwMCwgMHhDMCwgMHgwMCwgMHg0NCwgMHgwMywgMHhEMCwgMHgwRCwgMHg0MCwgMHgwNywgMHgyMCwgMHgwMiwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MjAsIDB4MzAsIDB4MDAsIDB4REQsIDB4MjAsIDB4MDQsIDB4MDMsCisweEQwLCAweDBELCAweDQwLCAweDMwLCAweDgwLCAweDhELCAweDAwLCAweDQ1LCAweDAzLCAweDk5LCAweDBDLCAweDQwLCAweDMwLAorMHg4MCwgMHhDRCwgMHgwMCwgMHgzNCwgMHgwMywgMHhEMCwgMHgwQywgMHg0MCwgMHgwMSwgMHgwMCwgMHg4RCwgMHgwMCwgMHgxMCwKKzB4MDIsIDB4OTAsIDB4MEMsIDB4NjAsIDB4MTEsIDB4MDAsIDB4MEQsIDB4MDAsIDB4MzQsIDB4MDMsIDB4NTAsIDB4MDgsIDB4NDAsCisweDMwLCAweDQwLCAweEMxLCAweDAwLCAweDI0LCAweDAzLCAweEQwLCAweDA4LCAweDQwLCAweDQzLCAweEExLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhCMCwgMHgyNiwgMHgwMCwgMHhERCwgMHgwMCwgMHg0NCwgMHgwMywgMHhGOCwKKzB4MEQsIDB4QzAsIDB4MzYsIDB4MDAsIDB4REYsIDB4NDAsIDB4QzYsIDB4MDMsIDB4MzIsIDB4MEYsIDB4NTAsIDB4MjQsIDB4MjAsCisweDVELCAweDAwLCAweEJDLCAweDAzLCAweEYwLCAweDBGLCAweEMwLCAweDA3LCAweDAwLCAweDlELCAweDAwLCAweDc4LCAweDAzLAorMHg5MCwgMHgwRCwgMHg0MCwgMHgyNCwgMHgwOCwgMHgxRiwgMHgwMCwgMHhGQywgMHgwMywgMHgzMSwgMHgwNSwgMHhDMCwgMHgzNSwKKzB4MDAsIDB4RjMsIDB4MDAsIDB4Q0MsIDB4MDMsIDB4RjAsIDB4MEQsIDB4QzAsIDB4MDMsIDB4QzQsIDB4MEEsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDA1LCAweEI4LCAweDFGLCAweDIwLCAweEZGLCAweDAwLCAweEZDLCAweDAzLCAweDdBLCAweDBGLAorMHhDMCwgMHgzRiwgMHgwMCwgMHg3QywgMHgwMCwgMHhGQywgMHgwMywgMHhGMywgMHgwRiwgMHhDMCwgMHgyRiwgMHgwMCwgMHg3RiwKKzB4MDAsIDB4RkMsIDB4ODMsIDB4RjEsIDB4MEYsIDB4ODAsIDB4MEQsIDB4MDAsIDB4M0UsIDB4MDAsIDB4REMsIDB4ODIsIDB4RjAsCisweDBGLCAweEMwLCAweDFGLCAweDAwLCAweDNGLCAweDAwLCAweEZDLCAweDAzLCAweDcwLCAweDA3LCAweDQwLCAweDNGLCAweDAwLAorMHhGNywgMHgwMCwgMHhGQywgMHgwMywgMHhGOCwgMHgwQiwgMHhDMCwgMHgxNywgMHgyMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDMsIDB4ODAsIDB4NUYsIDB4MDAsIDB4MzMsIDB4OEMsIDB4Q0MsIDB4MTAsIDB4MzAsIDB4MUYsIDB4QzAsCisweDJGLCAweDAwLCAweDMzLCAweDAwLCAweENDLCAweDAyLCAweDMwLCAweDFGLCAweEUwLCAweDdGLCAweDAwLCAweEJCLCAweDAxLAorMHhGNCwgMHgwNywgMHg3MCwgMHgwQiwgMHhDMCwgMHg3QywgMHgwNSwgMHhGRiwgMHg0MiwgMHhGQywgMHgzMiwgMHhGMCwgMHg0RiwKKzB4QzgsIDB4M0YsIDB4MDEsIDB4RkYsIDB4MDEsIDB4RkMsIDB4MEMsIDB4MzAsIDB4NEYsIDB4QzAsIDB4NEUsIDB4MDAsIDB4QjMsCisweDAwLCAweDdDLCAweDczLCAweEYwLCAweDRGLCAweEMwLCAweDBGLCAweDAwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMSwgMHgwOCwgMHg3NywgMHgwMCwgMHgxMSwgMHgwRSwgMHg2QywgMHgyNCwgMHgzMCwgMHgxRCwgMHg0MCwgMHgyMywKKzB4MDAsIDB4NTEsIDB4MDMsIDB4MTQsIDB4MDIsIDB4NTAsIDB4NEQsIDB4NDksIDB4MzMsIDB4MTAsIDB4QzEsIDB4MTAsIDB4NzQsCisweDA0LCAweDEwLCAweEI5LCAweEUwLCAweEZFLCAweDAwLCAweEZELCAweDBBLCAweDc0LCAweDIyLCAweEQwLCAweEJGLCAweDQwLAorMHgzRiwgMHgwQiwgMHhDRCwgMHgwMCwgMHg3NCwgMHgwMCwgMHg1MCwgMHgzRCwgMHg0MCwgMHg0NCwgMHgwMCwgMHg5MSwgMHgwQiwKKzB4RjQsIDB4MDMsIDB4RDEsIDB4MUYsIDB4NDAsIDB4MDcsIDB4MjAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDExLCAweEEwLCAweDI3LCAweDAwLCAweDQxLCAweDAwLCAweDA1LCAweDAwLCAweDEwLCAweDBDLCAweDQwLCAweDIzLCAweDAwLAorMHg4MSwgMHgwMiwgMHgwNCwgMHgwMywgMHgxMCwgMHg0QywgMHg0MCwgMHgzMywgMHgwMCwgMHhDOSwgMHgwMCwgMHg3NCwgMHgwMywKKzB4NTQsIDB4MDQsIDB4NTAsIDB4MzIsIDB4MjAsIDB4QzUsIDB4ODQsIDB4MzQsIDB4MTIsIDB4RDAsIDB4MEMsIDB4NDAsIDB4MzEsCisweDA0LCAweENELCAweDAwLCAweDU0LCAweDExLCAweDEwLCAweDJDLCAweDQ4LCAweDQ2LCAweDgwLCAweEMxLCAweDAwLCAweDE0LAorMHgxMywgMHhEMCwgMHgyQywgMHg0MCwgMHg0NywgMHg4MCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywKKzB4QTgsIDB4MjUsIDB4MDIsIDB4NTEsIDB4MDAsIDB4NDQsIDB4MDgsIDB4MTAsIDB4MEQsIDB4NDAsIDB4MjcsIDB4MDIsIDB4NTEsCisweDAwLCAweDU0LCAweDAzLCAweDUwLCAweDBELCAweDQ4LCAweDM3LCAweDAwLCAweEQ5LCAweDAzLCAweDc0LCAweDE4LCAweDE0LAorMHgxNSwgMHg1MCwgMHgzNiwgMHgwMCwgMHhEOSwgMHgwMCwgMHg3MCwgMHgyMiwgMHhEMCwgMHgwRCwgMHg0MCwgMHgzNywgMHgyMCwKKzB4REQsIDB4MDAsIDB4NzQsIDB4MDksIDB4NTAsIDB4MEQsIDB4NDAsIDB4NDYsIDB4NDAsIDB4RDEsIDB4MTEsIDB4NzQsIDB4MDMsCisweEQxLCAweDBELCAweDQwLCAweDBGLCAweDIwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweEE4LAorMHg1MywgMHgwMSwgMHgxMywgMHgxMCwgMHg0NCwgMHgwQywgMHgzMCwgMHgwRCwgMHhDMCwgMHgyNywgMHg0MCwgMHgxMywgMHg4MCwKKzB4NDQsIDB4MDYsIDB4MzQsIDB4MEQsIDB4NDAsIDB4MzcsIDB4MDAsIDB4REIsIDB4MDEsIDB4M0MsIDB4MDksIDB4NzAsIDB4MzEsCisweDQwLCAweDM2LCAweDMwLCAweERGLCAweDAwLCAweDc4LCAweDAyLCAweEYwLCAweDBELCAweEMwLCAweDM3LCAweDAwLCAweERGLAorMHgwMCwgMHg3QywgMHgwQywgMHgzMCwgMHgwRCwgMHhDMCwgMHg0MiwgMHgxMCwgMHhEMywgMHgwMSwgMHg3QywgMHgwMywgMHhGMSwKKzB4MEQsIDB4QzAsIDB4MDMsIDB4MjAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4ODAsIDB4N0QsCisweDUwLCAweEVGLCAweDEwLCAweEJDLCAweDIyLCAweDcwLCAweDBGLCAweEMwLCAweDJCLCAweDAwLCAweDlGLCAweDAwLCAweEI4LAorMHgyNiwgMHhCMCwgMHgwRiwgMHg4OCwgMHgzRiwgMHgwMCwgMHhGNywgMHgwMCwgMHhGQywgMHgwMCwgMHhGMCwgMHgwMywgMHhDMCwKKzB4M0YsIDB4MDAsIDB4RkYsIDB4MjAsIDB4RjgsIDB4MDYsIDB4RjAsIDB4MEYsIDB4QzAsIDB4M0YsIDB4MDAsIDB4RkYsIDB4MTAsCisweEZDLCAweDI0LCAweEYwLCAweDBFLCAweEMwLCAweDBELCAweDI4LCAweEZGLCAweDAwLCAweEZDLCAweDAzLCAweEYwLCAweDBGLAorMHhDMCwgMHgxRiwgMHgwMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHgwOCwgMHgyNSwgMHgwOCwKKzB4MUYsIDB4MDAsIDB4NkMsIDB4MjksIDB4MzAsIDB4MEQsIDB4QzAsIDB4MjcsIDB4MDEsIDB4QzcsIDB4ODAsIDB4NEMsIDB4MDMsCisweDM0LCAweDBELCAweEMwLCAweDM0LCAweDAwLCAweERGLCAweDAyLCAweDRFLCAweDA4LCAweDIyLCAweDA1LCAweEM4LCAweDM0LAorMHgwMCwgMHhERiwgMHgwMCwgMHg3QywgMHgwMywgMHhGMCwgMHgwRCwgMHhDMCwgMHgzNCwgMHgwMCwgMHhERiwgMHgwMCwgMHg2RCwKKzB4MDksIDB4NzAsIDB4MEQsIDB4QzAsIDB4MDcsIDB4MDAsIDB4REYsIDB4MEEsIDB4N0MsIDB4MDMsIDB4RjEsIDB4MEQsIDB4QzQsCisweDBCLCAweDIwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEzLCAweEEwLCAweDI0LCAweDAwLCAweERELAorMHgwMCwgMHg0NSwgMHgwMywgMHgxMCwgMHgwRCwgMHg0MCwgMHhBNywgMHgwMCwgMHhEMSwgMHgwMCwgMHg0RCwgMHgwMywgMHgxMCwKKzB4MEQsIDB4QzAsIDB4NzYsIDB4MDIsIDB4RDEsIDB4MDAsIDB4NDUsIDB4MDEsIDB4QjAsIDB4MDQsIDB4QzEsIDB4M0UsIDB4MDAsCisweEZELCAweDAwLCAweDdDLCAweDAzLCAweEMxLCAweDFGLCAweEMxLCAweDNFLCAweDAwLCAweERELCAweDAwLCAweDA0LCAweDAxLAorMHgxMCwgMHgwRiwgMHhDMCwgMHg0NSwgMHgwMCwgMHhERCwgMHg0MSwgMHhGNCwgMHg4MywgMHhEMCwgMHg1RiwgMHg0MCwgMHg0RiwKKzB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4QTAsIDB4MjIsIDB4MDAsIDB4OEQsIDB4MDEsCisweDA0LCAweDA3LCAweDEwLCAweDBDLCAweDQwLCAweDMyLCAweDAwLCAweDA1LCAweDAwLCAweDA0LCAweDAzLCAweEQwLCAweDBDLAorMHg0MCwgMHhGNCwgMHgwMCwgMHhDNSwgMHgwMCwgMHgwNCwgMHgwNiwgMHgxOCwgMHgwOCwgMHg0MCwgMHg3MCwgMHgwMCwgMHhDRCwKKzB4ODAsIDB4MzQsIDB4MDMsIDB4QzAsIDB4MUMsIDB4NDAsIDB4MzAsIDB4MDgsIDB4Q0QsIDB4QzAsIDB4MDQsIDB4MDEsIDB4NTAsCisweDBDLCAweDQwLCAweDUzLCAweDAwLCAweENELCAweDAwLCAweDE0LCAweDAzLCAweEQwLCAweDBDLCAweDQwLCAweDFGLCAweDAwLAorMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHg4MCwgMHg2OCwgMHgwMCwgMHgyRCwgMHgxOSwgMHgwNCwKKzB4MDcsIDB4MTAsIDB4MUUsIDB4NDAsIDB4NkIsIDB4MDAsIDB4NjEsIDB4MDEsIDB4QTQsIDB4MjcsIDB4OTAsIDB4MUUsIDB4NDAsCisweDdBLCAweDAwLCAweEUxLCAweDAxLCAweEM0LCAweDA0LCAweDk5LCAweDlBLCAweDQwLCAweDdBLCAweDAwLCAweEVELCAweDgxLAorMHg5NCwgMHgwNywgMHhEMCwgMHg5RSwgMHg0MCwgMHg3QSwgMHgwMCwgMHhFRCwgMHg4MSwgMHg4NCwgMHgwNywgMHgxMCwgMHgxRSwKKzB4NDAsIDB4NDksIDB4MDAsIDB4NkQsIDB4MDEsIDB4QjQsIDB4MjcsIDB4RDAsIDB4MUUsIDB4NDAsIDB4MTMsIDB4MDAsIDB4MDIsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDEwLCAweDIwLCAweDAwLCAweERGLCAweDAwLCAweDA0LCAweDAzLAorMHgzMCwgMHgwQywgMHhDMCwgMHgyMiwgMHgwMiwgMHg4NSwgMHgwOCwgMHgwNCwgMHgyMywgMHhGMCwgMHgwRCwgMHg0MCwgMHgzMCwKKzB4MDQsIDB4QzcsIDB4MDgsIDB4MDQsIDB4NDIsIDB4MzAsIDB4MDAsIDB4QzAsIDB4MzAsIDB4MDQsIDB4Q0YsIDB4MDAsIDB4MzQsCisweDAyLCAweEYwLCAweDhDLCAweEMwLCAweDMwLCAweDAwLCAweENGLCAweDgwLCAweDRDLCAweDAxLCAweDcwLCAweDBDLCAweEMwLAorMHgxMywgMHg4NCwgMHhDRiwgMHgwMCwgMHgxQywgMHgxNywgMHhGMCwgMHgwQywgMHhDMCwgMHg0QiwgMHg0MCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4QjgsIDB4MkQsIDB4MDAsIDB4N0YsIDB4MDAsIDB4REQsIDB4MDMsIDB4RDAsCisweDBGLCAweEMwLCAweDJGLCAweDgwLCAweDdGLCAweDAwLCAweERFLCAweEEzLCAweDcwLCAweDBGLCAweEM4LCAweDNGLCAweDAwLAorMHhGNywgMHgwMCwgMHhCQywgMHgyMiwgMHhGMCwgMHgwQSwgMHhDMCwgMHgzRiwgMHgwMCwgMHhGRiwgMHgwOCwgMHhGQywgMHgyMiwKKzB4RjAsIDB4QUUsIDB4QzIsIDB4M0YsIDB4MjAsIDB4RkYsIDB4MDgsIDB4REMsIDB4MjEsIDB4RjAsIDB4MEYsIDB4QzQsIDB4MEYsCisweDEwLCAweEZGLCAweDAwLCAweEZDLCAweDAzLCAweEYwLCAweDJGLCAweEMwLCAweDBCLCAweDYwLCAweDA2LCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwgMHhBOCwgMHgzNywgMHgwMCwgMHg5RiwgMHgwMCwgMHg0QywgMHgwMCwgMHgzMSwgMHgwRCwKKzB4QzAsIDB4M0YsIDB4MDAsIDB4MUYsIDB4MDAsIDB4N0MsIDB4MDcsIDB4MzAsIDB4MEQsIDB4QzAsIDB4MzcsIDB4MDAsIDB4REYsCisweDAwLCAweDdDLCAweDA0LCAweDMwLCAweDE1LCAweEMwLCAweEI1LCAweDA0LCAweERGLCAweDA3LCAweDZDLCAweDAzLCAweEYwLAorMHg1RCwgMHhDMCwgMHgzNiwgMHgwNSwgMHhERiwgMHgwMCwgMHg3QywgMHgwMSwgMHhGMCwgMHgwRCwgMHhDMCwgMHg1MywgMHgwMCwKKzB4RDEsIDB4NDAsIDB4NzgsIDB4MTcsIDB4MzQsIDB4MkQsIDB4QzAsIDB4NTcsIDB4MDAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDEyLCAweDk4LCAweDM5LCAweDAwLCAweEVELCAweDAwLCAweDg0LCAweDAyLCAweDEwLCAweDBFLCAweDQwLAorMHgzQiwgMHg5MCwgMHhBQywgMHgwMCwgMHhCNCwgMHgwMywgMHgxMCwgMHgwRSwgMHg0MCwgMHgzQiwgMHgxMCwgMHhFRCwgMHgyMCwKKzB4QjQsIDB4MDAsIDB4NTAsIDB4MEUsIDB4NDAsIDB4MzgsIDB4MDEsIDB4Q0QsIDB4MTIsIDB4ODQsIDB4MDMsIDB4RDAsIDB4MEUsCisweDQwLCAweEI4LCAweDAwLCAweEU3LCAweDAwLCAweDlDLCAweDAzLCAweEQwLCAweDZFLCAweDQwLCAweDBCLCAweDAwLCAweEUxLAorMHgwMCwgMHhGNCwgMHgyQiwgMHgxMCwgMHgwRSwgMHg0MCwgMHg0QiwgMHgyMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDMsIDB4MDAsIDB4RTksIDB4MDAsIDB4OEQsIDB4MDMsIDB4MjQsIDB4MDUsIDB4OTQsIDB4MUUsIDB4NDAsIDB4N0IsCisweDEwLCAweEVDLCAweDAzLCAweEI0LCAweDA3LCAweDkwLCAweDFFLCAweDQwLCAweDdCLCAweDIwLCAweEVELCAweDAxLCAweEY2LAorMHgwNywgMHgxMCwgMHgxNCwgMHg0MSwgMHg3OSwgMHgwMiwgMHhFRCwgMHgwNSwgMHg4NCwgMHgwNywgMHg1MCwgMHhEQywgMHg0MCwKKzB4N0EsIDB4MDAsIDB4RUQsIDB4MDEsIDB4OTYsIDB4MDUsIDB4RDAsIDB4MUUsIDB4NDAsIDB4NUIsIDB4ODAsIDB4RTEsIDB4NDEsCisweEI0LCAweDE3LCAweDEwLCAweDlFLCAweDQwLCAweDBGLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgxMiwgMHgyMCwgMHg2MywgMHgwMCwgMHhDRCwgMHgwMCwgMHgwNSwgMHgxMywgMHg5MCwgMHgwQywgMHg0MCwgMHgzMywgMHgwMiwKKzB4QzksIDB4MDAsIDB4MzQsIDB4MDMsIDB4OTAsIDB4MEMsIDB4NDIsIDB4MzMsIDB4MDAsIDB4NEMsIDB4MDgsIDB4MzQsIDB4MEIsCisweDUwLCAweDNDLCAweDQwLCAweDMwLCAweDAwLCAweENDLCAweDAwLCAweDA0LCAweDA3LCAweEQxLCAweDBDLCAweDQwLCAweDMyLAorMHgyMCwgMHhDNSwgMHgwMCwgMHg1NCwgMHgwQiwgMHhEMCwgMHgwQywgMHg0NCwgMHgyMywgMHgwMCwgMHhDMSwgMHgwNywgMHgzNCwKKzB4MDMsIDB4MTAsIDB4MEMsIDB4NDAsIDB4NEIsIDB4MjAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTcsCisweEE4LCAweDFELCAweDAwLCAweDdGLCAweDBBLCAweEVDLCAweDFELCAweEIwLCAweDA1LCAweDQwLCAweDU3LCAweDAwLCAweDdGLAorMHgwQSwgMHg3QywgMHgwMSwgMHhCNCwgMHgwNSwgMHhDMCwgMHgxNywgMHgxMCwgMHg3RCwgMHgwMiwgMHhGQywgMHgyMSwgMHgzMCwKKzB4MjcsIDB4QzAsIDB4MTUsIDB4MTAsIDB4NUYsIDB4MDAsIDB4NEMsIDB4MTUsIDB4RjAsIDB4MDUsIDB4QzAsIDB4MTYsIDB4ODAsCisweDVGLCAweEMwLCAweERDLCAweDAxLCAweEYxLCAweDA1LCAweEMwLCAweDFGLCAweDAyLCAweDczLCAweDAyLCAweDc0LCAweDAxLAorMHgzMCwgMHgwNSwgMHhDMCwgMHg1RiwgMHgyMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHgwMCwKKzB4MDcsIDB4MDAsIDB4MEYsIDB4MDIsIDB4M0MsIDB4MDAsIDB4NzAsIDB4MDEsIDB4QzgsIDB4MDcsIDB4MDAsIDB4MUYsIDB4MDAsCisweDdDLCAweDAwLCAweDcwLCAweDAxLCAweEMwLCAweDA3LCAweDAwLCAweDFGLCAweDEwLCAweDdDLCAweDIwLCAweEYwLCAweDQxLAorMHhDMCwgMHgwMywgMHg4MCwgMHgxRiwgMHgwMCwgMHg1RCwgMHgwMCwgMHhGMCwgMHgwMSwgMHhDMCwgMHgwMSwgMHg4MCwgMHgxRiwKKzB4MDIsIDB4NUMsIDB4NDAsIDB4RjAsIDB4MDEsIDB4QzAsIDB4MDcsIDB4NDAsIDB4MUYsIDB4MDgsIDB4N0MsIDB4MDAsIDB4RjAsCisweDAxLCAweEMwLCAweDRCLCAweDAwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDI3LAorMHgwMCwgMHg5RiwgMHgwMCwgMHg0QywgMHgyMiwgMHgzNCwgMHgwOSwgMHhDMCwgMHgyMywgMHgwMCwgMHg4MywgMHgwMCwgMHg0QywKKzB4MDIsIDB4RjAsIDB4MDksIDB4QzAsIDB4NjcsIDB4MDAsIDB4OUYsIDB4MDAsIDB4NEMsIDB4QTIsIDB4RjAsIDB4MDksIDB4QzAsCisweDY3LCAweDAwLCAweDlCLCAweDgwLCAweDdDLCAweDAyLCAweEQyLCAweDg5LCAweEMwLCAweDI3LCAweDAwLCAweDkzLCAweDg0LAorMHg3QywgMHgwMiwgMHhCMCwgMHgwOCwgMHhDMCwgMHg2NCwgMHgwMCwgMHg4RiwgMHgwMSwgMHg2QywgMHgwMiwgMHhGMCwgMHgwOSwKKzB4QzAsIDB4NDMsIDB4MjAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MjAsIDB4MjYsIDB4MDAsCisweDlELCAweDAzLCAweDQ0LCAweDA2LCAweDEwLCAweDA5LCAweDQwLCAweDI3LCAweDAwLCAweDk1LCAweDAwLCAweDZDLCAweDIyLAorMHhEMCwgMHgwOSwgMHg0MCwgMHhBNywgMHgwMCwgMHg4RCwgMHgwMCwgMHg2QywgMHgwNiwgMHhEMCwgMHgwOSwgMHg0MCwgMHgyNywKKzB4MDAsIDB4OTEsIDB4MDAsIDB4NzQsIDB4MDIsIDB4RDAsIDB4MDksIDB4QzQsIDB4MjcsIDB4MDAsIDB4OTEsIDB4MDMsIDB4NzQsCisweDAyLCAweDUwLCAweDA5LCAweEMwLCAweDY2LCAweDAyLCAweDlELCAweDA5LCAweDZDLCAweDAyLCAweEQwLCAweDA5LCAweDQwLAorMHgwNywgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHhBMCwgMHgyNCwgMHgwMCwgMHg5RCwKKzB4MDQsIDB4NDQsIDB4MDIsIDB4MTksIDB4MDksIDB4NDAsIDB4MjcsIDB4MDAsIDB4OTEsIDB4MDAsIDB4NDQsIDB4MDIsIDB4NTgsCisweDA5LCAweDQwLCAweDI3LCAweDA1LCAweDlELCAweDAwLCAweDY2LCAweDAyLCAweDUyLCAweDhELCAweDQwLCAweDI3LCAweDAxLAorMHg5OSwgMHgwMCwgMHg3NCwgMHgwMiwgMHhEMCwgMHgwOSwgMHg0MCwgMHgyNiwgMHgwMCwgMHg5MCwgMHgwMiwgMHg3NCwgMHgwMiwKKzB4MTAsIDB4MDksIDB4NDAsIDB4MjQsIDB4MDAsIDB4OUQsIDB4QzAsIDB4NDQsIDB4ODIsIDB4RDAsIDB4MDksIDB4NDAsIDB4NjMsCisweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDIwLCAweEEwLCAweDAwLCAweDhELCAweDA0LAorMHgwNCwgMHgxMiwgMHgxMCwgMHgwOCwgMHg0MCwgMHgzMywgMHgwMSwgMHg4NSwgMHgwNCwgMHgyNCwgMHgxMiwgMHhEMCwgMHgwOCwKKzB4NDAsIDB4MjMsIDB4MDAsIDB4OUQsIDB4MDAsIDB4MDQsIDB4MDIsIDB4RDAsIDB4NDgsIDB4NDAsIDB4MjMsIDB4MDEsIDB4ODEsCisweDA0LCAweDM0LCAweDEyLCAweEQwLCAweDA4LCAweDQ4LCAweDIxLCAweDAxLCAweDgxLCAweDAwLCAweDM0LCAweDIyLCAweDUwLAorMHgwOCwgMHg0QSwgMHgyMiwgMHgwMCwgMHg4RCwgMHgwNCwgMHgyNiwgMHgxMiwgMHhEMCwgMHg0OCwgMHg0OCwgMHg0MywgMHg4MCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MUQsIDB4QjAsIDB4MDYsIDB4MDAsIDB4NUYsIDB4MEEsIDB4NEMsCisweDAwLCAweDMxLCAweDAxLCAweDQwLCAweDg3LCAweDAyLCAweDEzLCAweDAwLCAweDBDLCAweDI4LCAweDcwLCAweEExLCAweEMwLAorMHg4NywgMHgwMiwgMHgxRiwgMHgwQSwgMHg2NCwgMHgwMCwgMHg3MCwgMHgwMSwgMHhDNCwgMHgwNywgMHgwMCwgMHgxQiwgMHgwQSwKKzB4NzQsIDB4MjgsIDB4RjAsIDB4NDEsIDB4NDEsIDB4ODcsIDB4NDIsIDB4MTMsIDB4MEEsIDB4N0MsIDB4MDgsIDB4QjAsIDB4NDEsCisweEMxLCAweDA0LCAweDAwLCAweDFGLCAweDAwLCAweDRDLCAweDI4LCAweEYwLCAweDAxLCAweEMwLCAweDc3LCAweEMwLCAweDBBLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOSwgMHg5OCwgMHg2RiwgMHgwMCwgMHhCRiwgMHgyOCwgMHhGNSwgMHgyMiwKKzB4RjAsIDB4MDksIDB4QzAsIDB4MkYsIDB4MDIsIDB4QkYsIDB4MjgsIDB4RkMsIDB4MjIsIDB4RjAsIDB4MDksIDB4QzAsIDB4MjcsCisweDAwLCAweEJFLCAweDQwLCAweEJELCAweDAyLCAweEYwLCAweDhCLCAweEMwLCAweDI3LCAweDAyLCAweDlGLCAweDA4LCAweEZDLAorMHgyMiwgMHhGMCwgMHgwOSwgMHhDMiwgMHgyNywgMHgwMiwgMHg5RiwgMHgwMCwgMHhGQywgMHgxMiwgMHhGMCwgMHgwOSwgMHhDMCwKKzB4MkYsIDB4MDAsIDB4QkYsIDB4MDgsIDB4N0MsIDB4MjIsIDB4RjAsIDB4ODksIDB4QzAsIDB4NjcsIDB4NjAsIDB4MEUsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDgwLCAweDI3LCAweDAwLCAweEJGLCAweDE0LCAweENDLCAweDEyLCAweEYwLAorMHgwOSwgMHhDMCwgMHgyRiwgMHgwMCwgMHg5MywgMHgwMCwgMHhGQywgMHgxMiwgMHg3MCwgMHgwQiwgMHhDMCwgMHgyRiwgMHgwMiwKKzB4OEYsIDB4MDAsIDB4QkMsIDB4MDIsIDB4MzIsIDB4MEIsIDB4QzAsIDB4MkMsIDB4MDEsIDB4OUYsIDB4MTQsIDB4NEMsIDB4MzIsCisweDMwLCAweDBCLCAweEMwLCAweDI0LCAweDAwLCAweEIzLCAweDA4LCAweDRDLCAweDAyLCAweEYyLCAweDQ5LCAweEMxLCAweDJGLAorMHgwMCwgMHhCRiwgMHgwMCwgMHg3QywgMHgwMiwgMHgyMCwgMHgwQiwgMHhDMCwgMHg2MCwgMHgwMCwgMHgwRSwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MUMsIDB4MDgsIDB4NTcsIDB4MDUsIDB4MUQsIDB4MDQsIDB4NDQsIDB4MjAsIDB4RDAsIDB4MDEsCisweDQ4LCAweDA3LCAweDA0LCAweDFCLCAweDA4LCAweDc0LCAweDUwLCAweDEwLCAweDQxLCAweDQwLCAweDA3LCAweDgxLCAweDFELAorMHg1MCwgMHg3NCwgMHgwMCwgMHgxMSwgMHg4MSwgMHhDMCwgMHgwNiwgMHgwMCwgMHgxRCwgMHgwNCwgMHg0NSwgMHgzMCwgMHhCMCwKKzB4MjEsIDB4QzAsIDB4MDYsIDB4MEMsIDB4MTEsIDB4MDAsIDB4NDQsIDB4NTAsIDB4RDAsIDB4MDEsIDB4NDAsIDB4MDcsIDB4MDAsCisweDFELCAweDAyLCAweDc0LCAweDQwLCAweDEwLCAweDAxLCAweEMwLCAweDcyLCAweDIwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgxMCwgMHhBMCwgMHgyMywgMHgwMCwgMHg4RCwgMHgxNCwgMHgwNSwgMHgwMiwgMHhEMCwgMHgwOCwgMHg0MCwKKzB4MjMsIDB4MDIsIDB4ODEsIDB4MDEsIDB4MTQsIDB4MzIsIDB4NTEsIDB4NDgsIDB4NDEsIDB4MjMsIDB4MDEsIDB4OEQsIDB4MDUsCisweDc0LCAweDAzLCAweDEwLCAweDA4LCAweDQwLCAweDMwLCAweDAyLCAweDg5LCAweDE0LCAweDA0LCAweDEyLCAweDEwLCAweDg4LAorMHg0MCwgMHgyMCwgMHg0MiwgMHg4MSwgMHgwMCwgMHgyNCwgMHgxMiwgMHg5MCwgMHgwOCwgMHg0MCwgMHgyMywgMHg4MCwgMHg4RCwKKzB4MDksIDB4MzQsIDB4MDIsIDB4MTQsIDB4MDgsIDB4NDAsIDB4NDAsIDB4ODAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDE4LCAweEE4LCAweDI1LCAweDAyLCAweDlELCAweDA0LCAweDQ0LCAweDEyLCAweEQwLCAweDA5LCAweDQwLCAweDI3LAorMHgwMiwgMHg5OSwgMHgwMCwgMHg3NCwgMHgwMiwgMHgxMCwgMHgwOSwgMHg0MCwgMHgyNywgMHgwMCwgMHg5RCwgMHgwMCwgMHg3NCwKKzB4MDIsIDB4MTAsIDB4MjksIDB4NDAsIDB4MjQsIDB4MDAsIDB4OEQsIDB4MDAsIDB4NDQsIDB4MjIsIDB4OTQsIDB4MDksIDB4NDAsCisweDI2LCAweDAwLCAweEQxLCAweDAwLCAweDY0LCAweDAyLCAweEQwLCAweDA5LCAweDQwLCAweEE3LCAweDAwLCAweDlELCAweDA4LAorMHg3NCwgMHgwMiwgMHgxMSwgMHgwOSwgMHg0MCwgMHg2MiwgMHgyMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDUsIDB4MDgsIDB4MkQsIDB4MTAsIDB4OUYsIDB4MDEsIDB4NEMsIDB4MDYsIDB4RjAsIDB4MDksIDB4NDAsIDB4MjcsIDB4MDAsCisweDkzLCAweDAxLCAweDdDLCAweDAyLCAweDcwLCAweDA5LCAweEMwLCAweDI3LCAweDAwLCAweDlELCAweDAwLCAweDNDLCAweDQ2LAorMHgzNCwgMHgwOSwgMHg1MCwgMHgyNCwgMHgwMCwgMHg5RiwgMHgwMCwgMHg0QywgMHgwMiwgMHgzMCwgMHgwOSwgMHhDMCwgMHgyNCwKKzB4MDAsIDB4OTMsIDB4MDAsIDB4NkQsIDB4NkUsIDB4RjAsIDB4MDksIDB4QzAsIDB4QTcsIDB4MDAsIDB4OUYsIDB4MDIsIDB4NzgsCisweDAyLCAweDMwLCAweDA5LCAweEMwLCAweDE0LCAweDIwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LAorMHgwMCwgMHg2NSwgMHgwMCwgMHg5RiwgMHgwMSwgMHg3QywgMHgwMiwgMHhGMCwgMHgwOSwgMHhDMCwgMHgyNywgMHgwMCwgMHg5RiwKKzB4ODMsIDB4N0UsIDB4MEUsIDB4RjAsIDB4MDksIDB4QzAsIDB4MjcsIDB4MDgsIDB4OUYsIDB4NDksIDB4N0MsIDB4MjYsIDB4RjAsCisweDQ5LCAweEMwLCAweDI3LCAweDA4LCAweDlGLCAweDIwLCAweDNDLCAweDA2LCAweDcxLCAweDA5LCAweEMwLCAweDIzLCAweDAwLAorMHg5RiwgMHgwMCwgMHg1QywgMHg4MiwgMHhGMCwgMHgwOSwgMHhDMCwgMHgyNywgMHgwMCwgMHg5RiwgMHgwMSwgMHgzQywgMHgwMiwKKzB4RjAsIDB4MDksIDB4QzAsIDB4NTMsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDgsCisweDg1LCAweDAwLCAweDBGLCAweDAxLCAweDdDLCAweDAwLCAweEYwLCAweDAxLCAweEMwLCAweDA3LCAweDAxLCAweDFGLCAweDAwLAorMHg3RSwgMHgwMCwgMHhGMCwgMHgwMSwgMHhDMCwgMHgwNywgMHgyMCwgMHgxQiwgMHgwMCwgMHg0RiwgMHgwMCwgMHhCMCwgMHgwMSwKKzB4QzAsIDB4MDYsIDB4MDAsIDB4MUYsIDB4MDAsIDB4N0MsIDB4MDAsIDB4NzAsIDB4MDAsIDB4QzAsIDB4MDcsIDB4MDAsIDB4MUYsCisweDAwLCAweDZDLCAweDAwLCAweEYwLCAweDAxLCAweEMwLCAweDg3LCAweDAwLCAweDFGLCAweDAwLCAweDdDLCAweDAwLCAweEYwLAorMHgwMSwgMHhDMCwgMHg1MywgMHgyMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgyMCwgMHgxNCwKKzB4MDAsIDB4N0QsIDB4MDAsIDB4NzQsIDB4ODEsIDB4RDAsIDB4MDUsIDB4QzAsIDB4OUQsIDB4MDQsIDB4NUQsIDB4MDAsIDB4N0UsCisweDAxLCAweEQwLCAweDE1LCAweDQwLCAweDVGLCAweDAxLCAweDUxLCAweDAwLCAweDQ0LCAweDAxLCAweDE0LCAweDA0LCAweEQwLAorMHgxNiwgMHgwMCwgMHg1RCwgMHgwMCwgMHg3NCwgMHgwMSwgMHgxMCwgMHg0NSwgMHhDMCwgMHgxNCwgMHgwMCwgMHg3RCwgMHgxMCwKKzB4NDQsIDB4MDEsIDB4RDAsIDB4MDUsIDB4NDQsIDB4MTcsIDB4MjAsIDB4NUQsIDB4MDAsIDB4NzQsIDB4MDEsIDB4RDAsIDB4MDQsCisweDQwLCAweDUzLCAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweEEwLCAweDMyLCAweDAwLAorMHhDRCwgMHgwMCwgMHgzNCwgMHgwMiwgMHhEQSwgMHgwQywgMHg0OCwgMHgzNSwgMHgyMCwgMHhDRCwgMHgwMCwgMHg3NCwgMHgwMywKKzB4RDAsIDB4OUMsIDB4NDAsIDB4MzMsIDB4ODAsIDB4QzksIDB4MjAsIDB4MTAsIDB4MDIsIDB4OTAsIDB4OEMsIDB4NDAsIDB4MjIsCisweDAwLCAweENELCAweDAwLCAweDM2LCAweDAzLCAweDE4LCAweDA4LCAweDQwLCAweDMxLCAweDAwLCAweERELCAweDAxLCAweDI0LAorMHg4MywgMHhEMCwgMHgwQywgMHg0MCwgMHgyMywgMHg4MiwgMHhDRCwgMHgwMCwgMHgzNCwgMHgwMywgMHhEMCwgMHgwOCwgMHg0MCwKKzB4NTMsIDB4MDAsIDB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4ODAsIDB4MzgsIDB4ODEsIDB4RUQsCisweDAwLCAweEI0LCAweDQzLCAweEQ5LCAweDBFLCAweDQwLCAweDM5LCAweDAwLCAweEVELCAweDAwLCAweDk0LCAweDQzLCAweEQwLAorMHgwRSwgMHg0MCwgMHg2QiwgMHgwMSwgMHhGMSwgMHgwNSwgMHhENCwgMHgwMywgMHgxMCwgMHgwRiwgMHg1MCwgMHgzQSwgMHgwMCwKKzB4RUQsIDB4MDgsIDB4MzQsIDB4MDMsIDB4MTgsIDB4MEUsIDB4NDAsIDB4MzksIDB4MDgsIDB4RUQsIDB4MDAsIDB4QTQsIDB4MDMsCisweEMwLCAweDBFLCAweDQwLCAweDNCLCAweDgwLCAweEVELCAweDAwLCAweEI0LCAweDEzLCAweEQwLCAweDBFLCAweDQwLCAweDEzLAorMHgyMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgxMCwgMHhGOCwgMHgwMCwgMHgyRiwgMHgwMSwKKzB4QkMsIDB4MDcsIDB4RjAsIDB4MUUsIDB4QzAsIDB4NTksIDB4MDAsIDB4RUYsIDB4MDEsIDB4QjQsIDB4MDYsIDB4RjAsIDB4MUUsCisweEU0LCAweEZCLCAweDAwLCAweEVCLCAweDExLCAweDk0LCAweDA3LCAweEIyLCAweDFFLCAweEQwLCAweDdBLCAweDAwLCAweEVGLAorMHgxNSwgMHhCQywgMHg1RiwgMHg3MCwgMHgxQywgMHhDMCwgMHg3OSwgMHgwMCwgMHhGRiwgMHgwMSwgMHhBQywgMHgwNywgMHhFMCwKKzB4MUUsIDB4QzAsIDB4N0IsIDB4MDAsIDB4RUYsIDB4MDEsIDB4QjQsIDB4MzcsIDB4RjAsIDB4MUEsIDB4QzAsIDB4NTMsIDB4NDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweEI4LCAweDM1LCAweDAwLCAweERGLCAweDAwLCAweDdDLAorMHgwMywgMHhGMCwgMHgwRCwgMHhDNCwgMHgxNSwgMHgxMCwgMHhERiwgMHgwMCwgMHg3QywgMHgwQSwgMHhCMCwgMHgwRCwgMHhDMCwKKzB4MDMsIDB4MDAsIDB4REYsIDB4MDgsIDB4NkMsIDB4MDMsIDB4RjIsIDB4MEMsIDB4RDAsIDB4MzcsIDB4MDAsIDB4REYsIDB4MjAsCisweDdDLCAweDAzLCAweEY0LCAweDBELCAweEMwLCAweDM0LCAweDA3LCAweDVGLCAweDAwLCAweDVDLCAweDAzLCAweEYwLCAweDBELAorMHhDOCwgMHgzNywgMHgwMCwgMHg5RiwgMHgwMCwgMHg3QywgMHgyMywgMHhGMCwgMHgwRCwgMHhDMCwgMHg0MywgMHgyMCwgMHgwNiwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4QTAsIDB4N0IsIDB4MDAsIDB4RjMsIDB4MDEsIDB4Q0MsIDB4MDcsCisweEZBLCAweDhGLCAweEMwLCAweDZGLCAweDAyLCAweEYzLCAweDA5LCAweDhDLCAweDBGLCAweDMwLCAweDFGLCAweEMwLCAweDdGLAorMHgwMCwgMHhGMywgMHgwMSwgMHhFQywgMHgwNywgMHgzMCwgMHgxRSwgMHhDMCwgMHg3QywgMHgzMCwgMHhGNywgMHg0MSwgMHhDQywKKzB4MDcsIDB4NzAsIDB4MUYsIDB4QzQsIDB4N0MsIDB4MDAsIDB4RjMsIDB4MDEsIDB4REMsIDB4NDcsIDB4NzIsIDB4MUYsIDB4QzgsCisweDdCLCAweDIyLCAweEY3LCAweEExLCAweEZDLCAweDg3LCAweDMyLCAweDFCLCAweEMyLCAweDA4LCAweDAwLCAweDBFLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwgMHg4OCwgMHgzOSwgMHgwMCwgMHg2MSwgMHg0MCwgMHg4NCwgMHgwMywgMHg3OCwKKzB4MEUsIDB4NDQsIDB4MkIsIDB4MTAsIDB4RTEsIDB4MjAsIDB4QUMsIDB4MDMsIDB4MTAsIDB4MEUsIDB4NDAsIDB4M0IsIDB4MDAsCisweEYxLCAweDAwLCAweDg0LCAweDEzLCAweDUwLCAweDRFLCAweDQ0LCAweDM5LCAweDAwLCAweEYxLCAweDAwLCAweEM0LCAweDAzLAorMHgxMCwgMHgwRSwgMHhDMCwgMHgzRSwgMHgwMiwgMHhFMSwgMHgwMCwgMHg4NiwgMHgwMywgMHhGMCwgMHgwRSwgMHg0MCwgMHgzQiwKKzB4NDAsIDB4RTUsIDB4MDAsIDB4MzQsIDB4MDMsIDB4MTAsIDB4MEUsIDB4NDAsIDB4NTQsIDB4MjAsIDB4MDYsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDdELCAweDAwLCAweDI1LCAweDAwLCAweDg0LCAweDAzLCAweDUwLCAweDhFLAorMHg0MCwgMHgwQiwgMHgwMCwgMHhDMCwgMHgyMCwgMHg4NCwgMHgwMiwgMHgxMCwgMHgwRSwgMHg0MCwgMHgzQiwgMHgwMCwgMHhFMSwKKzB4MDIsIDB4QzQsIDB4MDMsIDB4MTIsIDB4MEUsIDB4NjAsIDB4MzgsIDB4MDAsIDB4RTUsIDB4MDAsIDB4ODQsIDB4MDMsIDB4MTAsCisweDBFLCAweDQwLCAweDM5LCAweDAwLCAweEUxLCAweDAwLCAweEQ0LCAweDAzLCAweDEwLCAweDBFLCAweDQwLCAweDNGLCAweDQwLAorMHhFRCwgMHgwMCwgMHgzNCwgMHgwMywgMHgxMCwgMHgwOCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDYsIDB4MjgsIDB4MzMsIDB4MDAsIDB4NDEsIDB4MDMsIDB4MDUsIDB4MUIsIDB4NTAsIDB4MEMsIDB4NDAsCisweDQzLCAweDQwLCAweEMxLCAweDAyLCAweDI0LCAweDAyLCAweDEwLCAweDBDLCAweDQwLCAweDEzLCAweDAwLCAweEMxLCAweDQxLAorMHgwNCwgMHgwMywgMHg1MSwgMHgwQywgMHg2MCwgMHgzMSwgMHgwMCwgMHhDMSwgMHgwMCwgMHgwNSwgMHgwMywgMHgxMCwgMHgwQywKKzB4NDAsIDB4MzMsIDB4MDAsIDB4NDEsIDB4MDAsIDB4MDQsIDB4MEIsIDB4RDAsIDB4MEMsIDB4NDAsIDB4MzMsIDB4MDIsIDB4OEQsCisweDQyLCAweDM0LCAweDAzLCAweDE0LCAweDBDLCAweDUwLCAweDE4LCAweDIwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgxNSwgMHhBOCwgMHhCNSwgMHg0MiwgMHhENywgMHgwNiwgMHgwQywgMHgwMywgMHg3MCwgMHgwRCwgMHhDMCwgMHgyNywKKzB4MDQsIDB4RDMsIDB4MDAsIDB4NEMsIDB4MDIsIDB4MzQsIDB4MEQsIDB4QzAsIDB4M0YsIDB4NDAsIDB4RjEsIDB4MDEsIDB4MEMsCisweDA3LCAweDMwLCAweEFDLCAweDQwLCAweDMwLCAweDAwLCAweEY3LCAweDAwLCAweENDLCAweDAzLCAweDMwLCAweDBELCAweEMwLAorMHgzRCwgMHgwMCwgMHhEMywgMHgwMCwgMHhEQywgMHgyMywgMHg3MCwgMHgwRCwgMHg0MCwgMHhGNywgMHg0MiwgMHhERiwgMHgwMiwKKzB4RkMsIDB4MDMsIDB4MzAsIDB4MDksIDB4QzAsIDB4NTQsIDB4MjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAxLCAweDAwLCAweDM3LCAweDAwLCAweDlGLCAweDEwLCAweDdDLCAweDAzLCAweDcwLCAweDBELCAweEMwLCAweEE3LCAweDAwLAorMHhERiwgMHgwMSwgMHg1QywgMHgwMiwgMHhGMCwgMHgwRCwgMHhDMCwgMHgyNywgMHgwMCwgMHhERiwgMHgwOCwgMHg1QywgMHg2MywKKzB4RjAsIDB4MEQsIDB4QzAsIDB4MzcsIDB4MDAsIDB4REYsIDB4MDAsIDB4N0MsIDB4MDMsIDB4RjAsIDB4MEQsIDB4QzAsIDB4MzYsCisweDAwLCAweERGLCAweDAwLCAweDdDLCAweDAzLCAweEYwLCAweDBELCAweEMwLCAweDM3LCAweDAwLCAweEQ3LCAweDAwLCAweDdDLAorMHgwMywgMHhGMCwgMHgwOSwgMHhDMCwgMHgwNywgMHgwMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwKKzB4MDgsIDB4M0YsIDB4MDAsIDB4MzMsIDB4MDAsIDB4RkMsIDB4MDMsIDB4MzAsIDB4MEYsIDB4QzAsIDB4MDcsIDB4MDAsIDB4RjcsCisweDEwLCAweEZDLCAweDAyLCAweDMwLCAweDVGLCAweEMwLCAweDJGLCAweDAwLCAweEZGLCAweDAwLCAweEZDLCAweDAzLCAweDMwLAorMHg5QiwgMHhDMCwgMHgzNCwgMHgwMCwgMHhFMywgMHgwMCwgMHhDQywgMHgwMywgMHgzMCwgMHgxRCwgMHhDMCwgMHgzRiwgMHgwMCwKKzB4QjMsIDB4MDEsIDB4RkUsIDB4MDMsIDB4RjAsIDB4MEYsIDB4Q0EsIDB4QkYsIDB4MDAsIDB4RkUsIDB4MTAsIDB4RjQsIDB4MDMsCisweDMwLCAweDVBLCAweDgwLCAweDAwLCAweDIyLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgxLCAweDIwLAorMHgzNiwgMHgwMCwgMHg5NSwgMHgwMCwgMHg3NCwgMHgwNywgMHgxMCwgMHgwRCwgMHg0MCwgMHhDNywgMHgwNCwgMHhEMSwgMHgwMCwKKzB4NzQsIDB4MjYsIDB4MTAsIDB4MUQsIDB4NDAsIDB4MDcsIDB4MDAsIDB4RDksIDB4MDAsIDB4NzQsIDB4MDMsIDB4MTAsIDB4MUQsCisweDUwLCAweDM1LCAweDAwLCAweERCLCAweDAwLCAweDQ0LCAweDAzLCAweDEwLCAweDBELCAweDQwLCAweDM3LCAweDAwLCAweDkxLAorMHgwMywgMHg3NiwgMHgwMywgMHhEMCwgMHgwRCwgMHg0MCwgMHgzNywgMHgyMCwgMHhERCwgMHgwOSwgMHg3NCwgMHgwMywgMHgxMCwKKzB4MDksIDB4QzAsIDB4MDUsIDB4MDIsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4QTAsIDB4MzIsCisweDAwLCAweEQxLCAweDAxLCAweDc0LCAweDIzLCAweDEwLCAweDBELCAweDQwLCAweDYzLCAweDAwLCAweEQ1LCAweDAwLCAweDM0LAorMHgwMywgMHgxMCwgMHgwOSwgMHg0MCwgMHgzNywgMHgwMiwgMHhERCwgMHgwMCwgMHg3NiwgMHgwNywgMHgxMCwgMHgwRCwgMHg0MCwKKzB4NzQsIDB4MjAsIDB4RDEsIDB4MDAsIDB4MDQsIDB4MDMsIDB4MTAsIDB4NEQsIDB4NDAsIDB4MzMsIDB4MjgsIDB4RDEsIDB4MDQsCisweDc0LCAweDAzLCAweEQwLCAweDBELCAweDQwLCAweDM2LCAweDAwLCAweERELCAweDAwLCAweDI0LCAweDAzLCAweDAwLCAweDA5LAorMHg0MCwgMHgwNSwgMHgwMCwgMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgyMCwgMHgzMCwgMHgwMCwKKzB4MDUsIDB4MDAsIDB4MzQsIDB4MDMsIDB4MTAsIDB4MEMsIDB4NDAsIDB4MDMsIDB4MDAsIDB4QzEsIDB4MDAsIDB4MzQsIDB4MDMsCisweDEwLCAweDA4LCAweDQwLCAweDMzLCAweDAwLCAweEM5LCAweDAwLCAweDM0LCAweDAzLCAweDEwLCAweDBDLCAweDQwLCAweDMwLAorMHgwMCwgMHhDOSwgMHgwMCwgMHgwNSwgMHgwMywgMHgxMCwgMHgwQywgMHg0MCwgMHgzMywgMHgwMCwgMHhDMSwgMHgwMCwgMHgzNCwKKzB4MDMsIDB4RDAsIDB4MEMsIDB4NDAsIDB4MzMsIDB4MDAsIDB4Q0MsIDB4MDAsIDB4MzQsIDB4MjMsIDB4MTAsIDB4MDgsIDB4NDAsCisweDQxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDkwLCAweDNFLCAweDAwLCAweDAzLAorMHgwMCwgMHg3QywgMHgwMywgMHgzMCwgMHgwRCwgMHhDMCwgMHgwNywgMHgwMCwgMHhENywgMHgwMCwgMHhGQywgMHgwMiwgMHgxNCwKKzB4MDksIDB4QzAsIDB4MjMsIDB4MTAsIDB4RkYsIDB4MDAsIDB4N0MsIDB4MDMsIDB4MzQsIDB4MEQsIDB4QzAsIDB4MzQsIDB4MDAsCisweEYzLCAweDAwLCAweENDLCAweDAzLCAweDMwLCAweDBELCAweEMwLCAweDNGLCAweDAwLCAweEMzLCAweDIwLCAweDc0LCAweDAzLAorMHhGMCwgMHgwRCwgMHhDMCwgMHgzNywgMHgwMCwgMHhERiwgMHgwMCwgMHhGQywgMHgwMywgMHgzMCwgMHgwOSwgMHhDMCwgMHgwMSwKKzB4NDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4QjgsIDB4M0YsIDB4MDAsIDB4M0YsIDB4MDAsCisweEZDLCAweDAzLCAweEYwLCAweDBGLCAweEMwLCAweDBGLCAweDAwLCAweEZGLCAweDAwLCAweEZDLCAweDAyLCAweEYwLCAweDBCLAorMHg4MCwgMHgwRiwgMHgwMCwgMHhGQSwgMHgwMCwgMHhCQywgMHgwMywgMHhGMCwgMHgwRiwgMHhDMCwgMHgzRiwgMHgwMCwgMHhGRiwKKzB4MDAsIDB4RkMsIDB4MDMsIDB4RjAsIDB4MEYsIDB4ODAsIDB4M0YsIDB4MDgsIDB4RkYsIDB4MDAsIDB4QjAsIDB4MDMsIDB4RjAsCisweDBGLCAweEM4LCAweDNGLCAweDAwLCAweEZGLCAweDAwLCAweEZDLCAweDEzLCAweEYwLCAweDBCLCAweEMwLCAweDE1LCAweDYwLAorMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHhBMCwgMHg3RiwgMHgwMCwgMHhCRiwgMHg4QywgMHhDQywKKzB4MTIsIDB4MzIsIDB4Q0YsIDB4QzAsIDB4NUUsIDB4MjIsIDB4QjMsIDB4MjEsIDB4RkMsIDB4MDYsIDB4RjAsIDB4Q0YsIDB4QzQsCisweDNELCAweDAzLCAweDIzLCAweDAxLCAweEZDLCAweDIzLCAweEYwLCAweDEzLCAweEMwLCAweDNGLCAweDAwLCAweEZGLCAweDRDLAorMHhDQywgMHgwNiwgMHhCMCwgMHgxNywgMHhEOCwgMHg1QywgMHgwMCwgMHhGNywgMHgwNCwgMHhBQywgMHgwNCwgMHhCMCwgMHg0RiwKKzB4QzEsIDB4N0EsIDB4MDgsIDB4M0YsIDB4MDEsIDB4REMsIDB4MzAsIDB4QjAsIDB4MUIsIDB4QzQsIDB4MEYsIDB4MDAsIDB4MEUsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDA4LCAweDc3LCAweDAwLCAweERELCAweDBFLCAweDQ0LCAweDI2LAorMHgxMCwgMHhFRiwgMHg0MCwgMHgyNCwgMHgwMSwgMHhEMSwgMHgwNCwgMHg3NCwgMHgwNSwgMHg3MCwgMHgyRiwgMHg0MCwgMHhCQywKKzB4MDIsIDB4OTEsIDB4MDEsIDB4RjQsIDB4MUIsIDB4OTAsIDB4NDAsIDB4NDAsIDB4RkYsIDB4MDIsIDB4RkQsIDB4MDgsIDB4NDQsCisweEMzLCAweDEwLCAweDE5LCAweDQwLCAweDM0LCAweDAwLCAweEYxLCAweDAxLCAweDQ0LCAweDA1LCAweDEwLCAweDNGLCAweDQwLAorMHg3NCwgMHgxMCwgMHgxRCwgMHhBMSwgMHgzNCwgMHgzOCwgMHhCMCwgMHgxQywgMHg0MCwgMHgwNywgMHgyMCwgMHgwQywgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTEsIDB4QTAsIDB4MzMsIDB4MDAsIDB4OEQsIDB4MDQsIDB4MDQsIDB4MDIsIDB4MTAsCisweDRDLCAweDQwLCAweDMyLCAweDAwLCAweEMxLCAweDEwLCAweDE0LCAweDAyLCAweEQwLCAweDZDLCAweDQ4LCAweDMzLCAweDExLAorMHg0NSwgMHgwMCwgMHgzNCwgMHgwQiwgMHhEMCwgMHgwMCwgMHg0MSwgMHgzMywgMHgxMCwgMHhDNSwgMHg0NCwgMHgwNCwgMHgxMywKKzB4OTAsIDB4MDgsIDB4NDAsIDB4MDAsIDB4MDUsIDB4QzksIDB4MDgsIDB4NjQsIDB4MDEsIDB4RDAsIDB4MEMsIDB4NDAsIDB4MzAsCisweDIwLCAweDA1LCAweDAwLCAweDE0LCAweDAwLCAweEQwLCAweDA0LCAweDQwLCAweDQ3LCAweDgwLCAweDBFLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHhBOCwgMHgzNSwgMHgwMCwgMHhERCwgMHgyMCwgMHg0NCwgMHgwMywgMHgxMCwgMHgwRCwKKzB4NDAsIDB4QTQsIDB4MEEsIDB4RDEsIDB4MDQsIDB4NzQsIDB4MDEsIDB4NTAsIDB4MEQsIDB4NDAsIDB4MzQsIDB4NDAsIDB4OTUsCisweDAyLCAweDc0LCAweDAzLCAweEQxLCAweDE5LCAweDQyLCAweDM3LCAweDAwLCAweENELCAweDAwLCAweDQ0LCAweDAzLCAweDkwLAorMHgwOCwgMHg0MCwgMHhCNCwgMHgwMSwgMHhEOSwgMHgwMCwgMHg2NCwgMHgwNSwgMHhEMCwgMHgwRCwgMHg1MCwgMHgzNiwgMHgwNCwKKzB4MUQsIDB4MTgsIDB4NzQsIDB4MDEsIDB4RDAsIDB4MDUsIDB4NDAsIDB4MEYsIDB4MjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweEE4LCAweDM3LCAweDAwLCAweDlGLCAweDA5LCAweDBDLCAweDAzLCAweDM0LCAweDBELCAweEMwLAorMHhENiwgMHgwOCwgMHg5MywgMHgwMSwgMHg1QywgMHgwMywgMHhGMCwgMHgwRCwgMHhDMCwgMHgzNywgMHgxMCwgMHhENywgMHgwOSwKKzB4N0MsIDB4MDMsIDB4RjAsIDB4MjEsIDB4QzAsIDB4MzcsIDB4MDAsIDB4REYsIDB4MDAsIDB4NEMsIDB4ODMsIDB4QjEsIDB4MjUsCisweEM5LCAweDM0LCAweDQwLCAweERCLCAweDAwLCAweDZDLCAweDE3LCAweEYwLCAweDBELCAweEMwLCAweEE2LCAweDAwLCAweDFGLAorMHgwMiwgMHg1QywgMHgxNiwgMHhGMCwgMHgzOSwgMHhDMCwgMHgwMywgMHgyMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDcsIDB4ODAsIDB4M0QsIDB4MDAsIDB4RUYsIDB4QzEsIDB4N0MsIDB4MDIsIDB4RjIsIDB4MEUsIDB4QzAsIDB4NkYsCisweDAwLCAweEZGLCAweDgwLCAweEZDLCAweDhELCAweEYwLCAweDBGLCAweEMwLCAweDNCLCAweDAwLCAweEJCLCAweDAwLCAweEZDLAorMHgwMywgMHhCMCwgMHgwRiwgMHhDOCwgMHgzRiwgMHgwMCwgMHhGRiwgMHgxMCwgMHhERCwgMHg4MywgMHg3MCwgMHgwQiwgMHhDMCwKKzB4M0YsIDB4MDAsIDB4RjcsIDB4MDAsIDB4REMsIDB4MDMsIDB4MzAsIDB4MEYsIDB4QzAsIDB4M0QsIDB4MDAsIDB4M0YsIDB4MDEsCisweEZDLCAweDBFLCAweEI0LCAweDJGLCAweEMwLCAweDFGLCAweDAwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMiwgMHgwOCwgMHgzNSwgMHgwMSwgMHg5MywgMHg0MCwgMHg3QywgMHgwMywgMHgzMCwgMHg4RCwgMHhDMCwgMHgzNSwgMHgwOCwKKzB4REYsIDB4MDAsIDB4NEMsIDB4MEIsIDB4RjAsIDB4MEQsIDB4QzAsIDB4MzQsIDB4ODgsIDB4REYsIDB4MDAsIDB4NUMsIDB4MDMsCisweDcwLCAweDI1LCAweEMwLCAweDM0LCAweDA4LCAweERGLCAweDAwLCAweDdDLCAweDAzLCAweDMwLCAweDJELCAweEUyLCAweDI3LAorMHgwMCwgMHhERiwgMHgwNCwgMHg3QywgMHgwOSwgMHhGMCwgMHgwRCwgMHhDMSwgMHgyNSwgMHgwMCwgMHg1NywgMHgwMCwgMHg1QywKKzB4MDIsIDB4MzAsIDB4MDUsIDB4QzAsIDB4MDgsIDB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTMsCisweEEwLCAweDM0LCAweDAwLCAweEQxLCAweDA1LCAweDc0LCAweDgzLCAweDE4LCAweDFGLCAweDQwLCAweDI0LCAweDAwLCAweERELAorMHgxMCwgMHg0NCwgMHg4MSwgMHhEMCwgMHgwRiwgMHhDMCwgMHgzRSwgMHg4OCwgMHg5RiwgMHgwMCwgMHhDNCwgMHgwMywgMHgxMCwKKzB4MEQsIDB4NDIsIDB4M0MsIDB4MDAsIDB4RkQsIDB4MDAsIDB4NzQsIDB4MDMsIDB4QjAsIDB4MDksIDB4NDAsIDB4NzcsIDB4MDAsCisweEVELCAweDAwLCAweDM2LCAweDA1LCAweDEwLCAweDZFLCAweDQwLCAweEI0LCAweDAyLCAweDFCLCAweDExLCAweDRDLCAweDAzLAorMHg0MCwgMHgwNSwgMHhDMCwgMHg0RSwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNywgMHhBMCwKKzB4QjIsIDB4MDIsIDB4ODEsIDB4MDAsIDB4MzQsIDB4ODIsIDB4MTAsIDB4MUMsIDB4NDAsIDB4NjUsIDB4MDIsIDB4Q0QsIDB4MDEsCisweDA0LCAweDgxLCAweEQwLCAweDBELCAweDQwLCAweDMwLCAweDA4LCAweDBELCAweDAwLCAweDE0LCAweDAzLCAweDUyLCAweDAwLAorMHg0MiwgMHgzMiwgMHgyMCwgMHhDRCwgMHg0MywgMHg3NCwgMHgwMiwgMHgxMCwgMHgwQywgMHg0MCwgMHg2NywgMHgwMiwgMHhDRCwKKzB4MDMsIDB4MjQsIDB4MDMsIDB4NTgsIDB4MEMsIDB4NDQsIDB4MzEsIDB4MDgsIDB4MDUsIDB4MDEsIDB4NTQsIDB4MTEsIDB4MTAsCisweDA0LCAweDQwLCAweDFDLCAweDAwLCAweDBBLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDgwLCAweDc4LAorMHgwMCwgMHhBMSwgMHgwMSwgMHhCNCwgMHgwNiwgMHgxMCwgMHgxQywgMHg0MCwgMHg2OCwgMHgwMCwgMHhFRCwgMHgwMSwgMHg4NCwKKzB4MDUsIDB4RDAsIDB4MUUsIDB4NDgsIDB4N0EsIDB4MDAsIDB4MzUsIDB4MDEsIDB4ODQsIDB4MjcsIDB4MTAsIDB4OTYsIDB4NTAsCisweDdBLCAweDAwLCAweEVELCAweDE5LCAweEI0LCAweDAzLCAweDEwLCAweDFBLCAweDQwLCAweDZCLCAweDAwLCAweEVELCAweDAxLAorMHhGNCwgMHgwNSwgMHgxOSwgMHgxQywgMHg0MCwgMHg3QywgMHgwMCwgMHgzOSwgMHg4MSwgMHhBNCwgMHgyNCwgMHgxMCwgMHgxRSwKKzB4NDAsIDB4MUEsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4MTAsIDB4MzAsIDB4MDAsCisweEMzLCAweDA0LCAweDM0LCAweDAyLCAweDEwLCAweDBDLCAweEMwLCAweDMxLCAweDAwLCAweERGLCAweDAwLCAweDBELCAweDAxLAorMHhGOCwgMHgwRCwgMHhDMCwgMHgzMCwgMHgwMiwgMHg0RCwgMHgwMCwgMHg1QywgMHgwNywgMHg3MCwgMHgyQywgMHhDMCwgMHgzMiwKKzB4MDIsIDB4Q0YsIDB4MDAsIDB4N0MsIDB4MjMsIDB4MTAsIDB4MDgsIDB4NDAsIDB4MjMsIDB4MDAsIDB4Q0YsIDB4MTQsIDB4MzQsCisweDQzLCAweDcwLCAweDBDLCAweEMwLCAweDMxLCAweDAwLCAweEM3LCAweDAwLCAweDFFLCAweDAzLCAweDM0LCAweDA0LCAweEMyLAorMHg0OCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHhCOCwgMHgzOSwgMHg0MiwgMHhGRiwKKzB4MDAsIDB4RkMsIDB4MDMsIDB4RjAsIDB4MkYsIDB4QzEsIDB4MkYsIDB4MDAsIDB4RkYsIDB4MDAsIDB4RkMsIDB4MDEsIDB4RjAsCisweDBGLCAweDgxLCAweDNGLCAweDAwLCAweEZGLCAweDAwLCAweDdDLCAweDJCLCAweEIwLCAweDBGLCAweEMwLCAweDNELCAweDA0LAorMHhGRiwgMHgxMCwgMHhGNCwgMHgxMywgMHhGMCwgMHgwOSwgMHhDMCwgMHgyRiwgMHgwMCwgMHhGRiwgMHgxMCwgMHg3QywgMHgyMSwKKzB4NzAsIDB4MEYsIDB4QzAsIDB4MUYsIDB4MTAsIDB4RUYsIDB4MDAsIDB4REMsIDB4MDMsIDB4RjAsIDB4MDcsIDB4QzAsIDB4MEIsCisweDYwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE1LCAweEEwLCAweDM3LCAweDAwLCAweDlGLCAweDAwLAorMHg0QywgMHgwMywgMHhGMCwgMHg2RCwgMHhDMCwgMHgyNywgMHgxMCwgMHhERiwgMHgwMCwgMHg3QywgMHgwMywgMHhCMCwgMHgwRCwKKzB4QzAsIDB4MzcsIDB4MDUsIDB4NTcsIDB4MDAsIDB4NUMsIDB4MzcsIDB4MzQsIDB4MDgsIDB4QzAsIDB4MzYsIDB4MDEsIDB4REYsCisweDEyLCAweDRELCAweDAzLCAweDcwLCAweDBELCAweEMwLCAweDI3LCAweDAwLCAweERGLCAweDAwLCAweDdDLCAweDAzLCAweEYyLAorMHg0QywgMHhDMSwgMHg2NiwgMHgwMCwgMHg5QiwgMHgwMSwgMHg0QywgMHgwMSwgMHhCMCwgMHgwNSwgMHhDMCwgMHg1NywgMHgwMCwKKzB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4ODgsIDB4MzksIDB4MDAsIDB4QkQsIDB4MDQsIDB4ODUsCisweDBBLCAweEQwLCAweDBFLCAweDQwLCAweDJCLCAweDAwLCAweEVELCAweDAwLCAweEI0LCAweDAxLCAweDEwLCAweDhFLCAweDQwLAorMHgzQiwgMHgwMSwgMHg2RCwgMHgwMCwgMHg5QywgMHgxMywgMHgxMCwgMHgwRSwgMHg0MCwgMHgzOCwgMHgwMywgMHhFNywgMHgwNCwKKzB4ODQsIDB4MDMsIDB4RDAsIDB4MEEsIDB4NDAsIDB4MkIsIDB4MDgsIDB4RUQsIDB4MTQsIDB4QjQsIDB4MDMsIDB4NzAsIDB4NEUsCisweEMyLCAweDNBLCAweDQwLCAweDIzLCAweDAwLCAweDg1LCAweDAwLCAweEIwLCAweDBFLCAweDQwLCAweDRCLCAweDIwLCAweDA2LAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHgwMCwgMHg3OSwgMHgwMCwgMHhFRCwgMHgwOSwgMHhBNCwgMHgxNywKKzB4RDAsIDB4MUUsIDB4NDAsIDB4N0IsIDB4MDAsIDB4RUQsIDB4MDEsIDB4QjQsIDB4MDcsIDB4OTAsIDB4NUUsIDB4NDAsIDB4N0IsCisweDAyLCAweEVELCAweDMxLCAweDE2LCAweDA3LCAweDEwLCAweDFGLCAweDQyLCAweDdBLCAweDAwLCAweEU1LCAweDAxLCAweDg0LAorMHgwNywgMHhEMCwgMHgxRSwgMHg0MCwgMHg2QiwgMHgwMCwgMHhFRCwgMHgwNSwgMHhCNCwgMHgwNywgMHg1MCwgMHhERSwgMHg0MCwKKzB4NjksIDB4MDAsIDB4RTksIDB4ODEsIDB4ODQsIDB4ODcsIDB4OTAsIDB4MTYsIDB4NDAsIDB4MEYsIDB4MDAsIDB4MDQsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDI4LCAweDMzLCAweDAwLCAweENELCAweDAwLCAweDA0LCAweDAzLCAweEQwLAorMHgwQywgMHg0MCwgMHgyMywgMHgyMCwgMHhERCwgMHg0MCwgMHgzNCwgMHg0NSwgMHgxMCwgMHgwQywgMHg0MCwgMHgzNywgMHgwOCwKKzB4Q0QsIDB4MDYsIDB4MTQsIDB4MDMsIDB4MTAsIDB4QkMsIDB4NDAsIDB4MzAsIDB4MDAsIDB4RDUsIDB4MjAsIDB4MDQsIDB4MDcsCisweEQwLCAweDE4LCAweDQwLCAweDIzLCAweDAwLCAweENELCAweDAwLCAweDM0LCAweDAxLCAweDUwLCAweDBDLCAweDQwLCAweDUzLAorMHgzMCwgMHhDMSwgMHgwOCwgMHgwNCwgMHgwQiwgMHg5MCwgMHgwNCwgMHg0MCwgMHg0QiwgMHgyMCwgMHgwQywgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MTcsIDB4ODgsIDB4MTUsIDB4MDAsIDB4NUYsIDB4MDAsIDB4NkMsIDB4NDEsIDB4RjAsIDB4MDUsCisweEMwLCAweDFGLCAweDAwLCAweDVGLCAweDAwLCAweEJDLCAweDRELCAweEIwLCAweDA1LCAweEMwLCAweDE3LCAweDAwLCAweDZGLAorMHgwMSwgMHg1QywgMHgwMSwgMHgzMCwgMHgzNywgMHhDMCwgMHgxNiwgMHgwMCwgMHg1NywgMHg4MCwgMHg0QywgMHg5MSwgMHhGMCwKKzB4NDcsIDB4QzAsIDB4OUYsIDB4MDAsIDB4NUYsIDB4MDAsIDB4QkMsIDB4MTUsIDB4NzAsIDB4MDQsIDB4QzAsIDB4NUQsIDB4MEMsCisweDdCLCAweDAzLCAweENDLCAweDA5LCAweEEwLCAweDA3LCAweEMwLCAweDVGLCAweDIwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgxMiwgMHgwMCwgMHg4NywgMHgwMCwgMHgxRiwgMHgwMCwgMHg3QywgMHgwMCwgMHhGMCwgMHgwMSwgMHhDMCwKKzB4MDcsIDB4MDAsIDB4MUYsIDB4NDAsIDB4N0MsIDB4MDAsIDB4RjAsIDB4MDEsIDB4QzAsIDB4MDcsIDB4MDAsIDB4MUYsIDB4MDAsCisweDdDLCAweDAwLCAweEYwLCAweDAxLCAweEMxLCAweDA3LCAweDAwLCAweDE3LCAweDAwLCAweDdDLCAweDAwLCAweEYwLCAweDAxLAorMHhDMCwgMHgwNywgMHgwMCwgMHgwRiwgMHgwMiwgMHg3QywgMHg0MCwgMHg3MCwgMHgyMSwgMHg4MCwgMHg4NiwgMHgwMCwgMHgxNywKKzB4MTIsIDB4M0MsIDB4MTAsIDB4RjAsIDB4MDEsIDB4QzAsIDB4NEIsIDB4MDAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDEwLCAweDA4LCAweDI3LCAweDA4LCAweDhGLCAweDQwLCAweDRELCAweDE2LCAweEYwLCAweDk5LCAweEMwLCAweEU3LAorMHgwMCwgMHg5MywgMHgwOSwgMHg0RCwgMHgwMiwgMHgzMCwgMHgwOSwgMHhDMCwgMHgyNywgMHgwMCwgMHg5NywgMHgwMCwgMHg1QywKKzB4MDIsIDB4RjAsIDB4MjksIDB4QzAsIDB4MjMsIDB4MDAsIDB4OTcsIDB4MDAsIDB4NUMsIDB4MDIsIDB4MzQsIDB4MDksIDB4QzAsCisweDY0LCAweDA2LCAweDkzLCAweDAzLCAweDVDLCAweEEyLCAweDcxLCAweDk5LCAweEMwLCAweDI0LCAweDAwLCAweDlGLCAweDAxLAorMHg3QywgMHgwNiwgMHgzMCwgMHgwOSwgMHhDMCwgMHg0MywgMHgyMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDEsIDB4MjAsIDB4QTYsIDB4MDAsIDB4QkQsIDB4NDAsIDB4QzQsIDB4MDYsIDB4NzAsIDB4MDksIDB4NDAsIDB4NjMsIDB4MDAsCisweDkxLCAweDAxLCAweDQ0LCAweDAyLCAweDE4LCAweDA5LCAweDQ0LCAweDI3LCAweDAwLCAweDk5LCAweDAwLCAweDQ0LCAweDAyLAorMHhEMCwgMHgyOCwgMHg0MCwgMHgyNCwgMHgwOCwgMHg5MywgMHgyMCwgMHgwNCwgMHgwMiwgMHg5MCwgMHgwOCwgMHg0MCwgMHg2MCwKKzB4MDAsIDB4OTEsIDB4MDQsIDB4NDQsIDB4NEUsIDB4MTAsIDB4MDksIDB4NTAsIDB4MjUsIDB4MTAsIDB4OUQsIDB4MDYsIDB4NzQsCisweDA2LCAweDUwLCAweDA5LCAweDQyLCAweDA3LCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LAorMHhBMCwgMHgyNCwgMHgxMCwgMHg5RCwgMHgwMCwgMHg0NCwgMHgwQSwgMHhEMCwgMHgwOSwgMHg0MCwgMHgyNywgMHgwMCwgMHg5MSwKKzB4ODAsIDB4NDQsIDB4MDMsIDB4MTAsIDB4MDksIDB4NDAsIDB4MjcsIDB4MDAsIDB4OUQsIDB4MDAsIDB4NTQsIDB4MDIsIDB4RDAsCisweDI5LCAweDQwLCAweDI1LCAweDAwLCAweDk1LCAweDAwLCAweDU0LCAweDAyLCAweDkwLCAweDA5LCAweDQwLCAweDI0LCAweDAwLAorMHg5MSwgMHgwMCwgMHg1NCwgMHgwMiwgMHg1MCwgMHgyOSwgMHg0MCwgMHgyNCwgMHgzMCwgMHg5RCwgMHgwOCwgMHg3NCwgMHg1MiwKKzB4MTAsIDB4MEQsIDB4NDAsIDB4NjMsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MjIsCisweDMwLCAweDAwLCAweDhELCAweDAyLCAweDA0LCAweDAyLCAweDU4LCAweDY4LCAweDQwLCAweEE3LCAweDAwLCAweDgxLCAweDAyLAorMHg0NCwgMHgwQSwgMHgxMCwgMHg4OCwgMHg0MCwgMHgyMywgMHgwMiwgMHg5OSwgMHgwMCwgMHgwNCwgMHgyMiwgMHhEMCwgMHg4OSwKKzB4NDAsIDB4MjAsIDB4MDAsIDB4ODksIDB4MDgsIDB4NDQsIDB4MjIsIDB4OTAsIDB4MjksIDB4NDAsIDB4QTQsIDB4MDAsIDB4ODEsCisweDAwLCAweDA0LCAweDAyLCAweDEyLCAweDA4LCAweDQwLCAweDIxLCAweDAwLCAweDhELCAweDAwLCAweDM0LCAweDIyLCAweDU0LAorMHgyOCwgMHg0MCwgMHg0MywgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxRCwgMHgzMCwgMHgwNiwKKzB4MDAsIDB4MUYsIDB4MDEsIDB4NEMsIDB4MDQsIDB4RjAsIDB4MDEsIDB4QzAsIDB4MDcsIDB4NDAsIDB4MTMsIDB4MDAsIDB4MEMsCisweDAwLCAweDE0LCAweDYxLCAweEMxLCAweDg3LCAweDBELCAweDE3LCAweDAwLCAweDVDLCAweDU4LCAweEYxLCAweDIxLCAweEMwLAorMHgwNSwgMHgwNSwgMHgwNywgMHgxNiwgMHg1QywgMHg4OCwgMHgzMCwgMHgwMSwgMHhEMCwgMHgwNCwgMHg0MCwgMHgxMywgMHg1NCwKKzB4NUMsIDB4ODAsIDB4NzgsIDB4NDEsIDB4QzEsIDB4MTQsIDB4MTAsIDB4MUYsIDB4MDAsIDB4M0MsIDB4NTgsIDB4MzAsIDB4MDEsCisweEMwLCAweDc3LCAweEMwLCAweDBBLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE5LCAweDM4LCAweDI3LCAweDA4LAorMHhCRiwgMHgwMywgMHhGQywgMHgwQSwgMHhGMCwgMHg5OSwgMHhDMCwgMHg2RiwgMHgwOCwgMHhCRiwgMHgwMSwgMHhGQywgMHgwNiwKKzB4RjAsIDB4NDksIDB4QzAsIDB4MjcsIDB4MDksIDB4QjcsIDB4MDAsIDB4N0MsIDB4MTIsIDB4RjAsIDB4NEIsIDB4QzIsIDB4MjUsCisweDAwLCAweDk3LCAweDA0LCAweEZDLCAweDEyLCAweDcwLCAweDFCLCAweEMwLCAweDZGLCAweDMwLCAweDlGLCAweDAwLCAweEZDLAorMHgwMiwgMHhGOCwgMHgwOSwgMHhEMiwgMHgyQiwgMHg4MCwgMHhBRiwgMHgwMCwgMHhGQywgMHgxMiwgMHhGMCwgMHgxQiwgMHhDMCwKKzB4NjcsIDB4NjAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4QTAsIDB4MkIsIDB4MDAsIDB4QkYsCisweDEzLCAweEZDLCAweDQ2LCAweEYwLCAweDBCLCAweEMwLCAweEFDLCAweDAwLCAweEJGLCAweDAwLCAweDdDLCAweDBBLCAweDMwLAorMHhDOSwgMHhDMCwgMHgyNiwgMHgwMCwgMHg5QiwgMHgwMCwgMHg3QywgMHgyMiwgMHhGMCwgMHgwQiwgMHhDMCwgMHgyNCwgMHgwNSwKKzB4QkYsIDB4MEMsIDB4NDksIDB4MDIsIDB4RjIsIDB4MjksIDB4QzIsIDB4QUYsIDB4MDAsIDB4QUYsIDB4MDQsIDB4RkMsIDB4MDIsCisweEYwLCAweDRCLCAweEMwLCAweDJDLCAweDAwLCAweEJGLCAweDAwLCAweEZDLCAweDIyLCAweEIwLCAweDA5LCAweEMwLCAweDY3LAorMHgwMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxQywgMHgwOCwgMHgwNywgMHgwMCwgMHgxRCwgMHgwNywKKzB4NzQsIDB4ODgsIDB4RDAsIDB4NTEsIDB4NDAsIDB4NDQsIDB4MjAsIDB4MUQsIDB4MDUsIDB4NzQsIDB4MDQsIDB4MTAsIDB4QzEsCisweDQ4LCAweDg0LCAweDA0LCAweDExLCAweDAwLCAweDc0LCAweDIwLCAweEQwLCAweDQ1LCAweDUzLCAweDA0LCAweDAwLCAweDFELAorMHgwQywgMHg0NCwgMHg0MCwgMHhEMCwgMHgxNCwgMHg0MCwgMHg0NywgMHgwMCwgMHgxRCwgMHgwMCwgMHg3NCwgMHgwMCwgMHgxMCwKKzB4ODEsIDB4NDAsIDB4MTQsIDB4MjAsIDB4NUQsIDB4MjAsIDB4NzQsIDB4MjAsIDB4MTQsIDB4MTEsIDB4NDAsIDB4NzMsIDB4MjAsCisweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweEEwLCAweDIzLCAweDAwLCAweDhELCAweDA0LCAweDM0LAorMHgwMiwgMHhEMCwgMHg4OCwgMHg0MSwgMHgyMCwgMHgwMCwgMHg4RCwgMHgxMCwgMHgzNCwgMHgwMiwgMHgxMCwgMHg0OCwgMHg0MCwKKzB4MjIsIDB4MDMsIDB4ODksIDB4MDAsIDB4MzQsIDB4MDIsIDB4RDEsIDB4NDgsIDB4NDAsIDB4MjAsIDB4MDAsIDB4OEQsIDB4MDQsCisweDI2LCAweDEyLCAweEQwLCAweDA4LCAweDQwLCAweDIzLCAweDEwLCAweDhELCAweDA4LCAweDM0LCAweDAyLCAweERDLCAweDA4LAorMHg0MCwgMHgyMCwgMHgxMCwgMHg4RCwgMHgwMCwgMHgzNCwgMHgwMiwgMHg5NCwgMHg0OCwgMHg0MSwgMHg0MywgMHg4MCwgMHgwRSwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4QTgsIDB4MjUsIDB4MDAsIDB4OUQsIDB4MjAsIDB4NzQsIDB4ODIsCisweEQwLCAweDA5LCAweDQwLCAweDI0LCAweDAwLCAweDlELCAweDA0LCAweDM0LCAweDAyLCAweDEwLCAweDA5LCAweDQwLCAweDIwLAorMHgwMCwgMHg5MSwgMHgxMCwgMHg3NCwgMHgwMiwgMHhEMCwgMHg4OCwgMHg0MCwgMHgyNCwgMHgwMCwgMHg5RCwgMHgwMCwgMHg2NiwKKzB4ODIsIDB4RDAsIDB4ODksIDB4NjYsIDB4MjcsIDB4MDAsIDB4OUQsIDB4MDAsIDB4NzQsIDB4MDIsIDB4NTEsIDB4MDksIDB4NTgsCisweDI0LCAweDAwLCAweDlELCAweDAxLCAweDc0LCAweDJBLCAweDEwLCAweDY5LCAweDQwLCAweDYzLCAweDIwLCAweDA2LCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHgyOCwgMHgyNSwgMHgwMCwgMHhCRiwgMHgwMSwgMHg3QywgMHgwNiwgMHhGMCwKKzB4MEIsIDB4RDAsIDB4MkMsIDB4MDMsIDB4QkYsIDB4MDAsIDB4RkMsIDB4MDIsIDB4MTAsIDB4MDksIDB4QzAsIDB4MjYsIDB4MDAsCisweDlCLCAweDAwLCAweDdDLCAweDAyLCAweEYwLCAweDM5LCAweEMwLCAweDI0LCAweDAwLCAweDlELCAweDgwLCAweDY0LCAweDIyLAorMHhGMCwgMHgzQiwgMHhDMCwgMHgyRiwgMHgwOCwgMHg5RCwgMHgwMCwgMHgzNCwgMHg0QSwgMHhGMCwgMHgwOSwgMHg0MCwgMHhBNCwKKzB4MDAsIDB4OUYsIDB4MDMsIDB4NzAsIDB4MDYsIDB4QjAsIDB4M0IsIDB4QzQsIDB4MTcsIDB4QTAsIDB4MDQsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDAwLCAweDI1LCAweDAwLCAweDlGLCAweDA0LCAweDdDLCAweDEyLCAweEYwLCAweDA5LAorMHhDNCwgMHgyNywgMHgwMCwgMHg5RiwgMHgwMCwgMHg3QywgMHgwMiwgMHhGNCwgMHgwOCwgMHhDMCwgMHgyNywgMHgxMCwgMHg5RiwKKzB4MDQsIDB4N0MsIDB4MDIsIDB4RjAsIDB4MDksIDB4QzAsIDB4MjcsIDB4MDAsIDB4OUYsIDB4NDAsIDB4NUMsIDB4MDYsIDB4RjgsCisweDE5LCAweEMyLCAweDI3LCAweDAxLCAweDlGLCAweDAwLCAweDdDLCAweDIyLCAweEIwLCAweDA5LCAweDA1LCAweDI3LCAweDgwLAorMHg5RSwgMHgxMCwgMHg2QywgMHgwNiwgMHhGMCwgMHgxOSwgMHhDMCwgMHg1MywgMHgwMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MTQsIDB4MDgsIDB4MDUsIDB4MDAsIDB4MTMsIDB4NDAsIDB4N0MsIDB4MDAsIDB4QjQsIDB4ODEsIDB4QzAsCisweDA3LCAweDAwLCAweDFGLCAweDA4LCAweDdDLCAweDAwLCAweEYwLCAweDAxLCAweEMwLCAweDA1LCAweDAwLCAweDEzLCAweDAyLAorMHg3QywgMHgwMCwgMHhGMCwgMHhBMSwgMHhEMCwgMHgwNCwgMHgwMCwgMHgwMywgMHgwMCwgMHg3QywgMHgwMCwgMHhGMiwgMHgyMSwKKzB4QzAsIDB4MDQsIDB4MjAsIDB4MTMsIDB4MTAsIDB4NUMsIDB4OTgsIDB4RjAsIDB4MDEsIDB4RDAsIDB4ODQsIDB4MDAsIDB4MUYsCisweDQyLCAweDJDLCAweDAwLCAweDM0LCAweDIxLCAweEQwLCAweDUwLCAweDIwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgxNCwgMHhBMCwgMHgxQywgMHgwMSwgMHg1MSwgMHgwMSwgMHhGNCwgMHgxRCwgMHgxMCwgMHgxNSwgMHg0MCwgMHgxNywKKzB4MDAsIDB4NUQsIDB4MDAsIDB4NzQsIDB4MDEsIDB4RDAsIDB4MDUsIDB4NDAsIDB4MTQsIDB4MDAsIDB4NTEsIDB4MDAsIDB4NzQsCisweDAxLCAweEQwLCAweDk3LCAweEMwLCAweDE0LCAweDAwLCAweDcxLCAweDAzLCAweDQ0LCAweDAxLCAweDcwLCAweDA1LCAweDQwLAorMHgxNCwgMHgwMCwgMHg3MSwgMHgwMSwgMHhDNCwgMHgwNSwgMHhEMCwgMHgxNiwgMHg0MiwgMHgxQywgMHgwMCwgMHg3RCwgMHgwMCwKKzB4RjQsIDB4MDEsIDB4MTQsIDB4MDUsIDB4NDAsIDB4NTAsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDE0LCAweEEwLCAweDYyLCAweDAwLCAweEMxLCAweDAwLCAweDM0LCAweDFFLCAweDEwLCAweDBELCAweDQ4LCAweDMzLCAweDAwLAorMHhDRCwgMHgwMCwgMHgzNCwgMHgwMywgMHhEMCwgMHgwQywgMHg0MCwgMHgzMSwgMHhDMCwgMHhDMSwgMHgwMCwgMHgzNCwgMHgwMywKKzB4RDAsIDB4MkMsIDB4NDAsIDB4MzIsIDB4NDAsIDB4QzEsIDB4MTEsIDB4MTQsIDB4MDMsIDB4NTAsIDB4MEMsIDB4NDAsIDB4MzIsCisweDAyLCAweDgxLCAweDAwLCAweDE0LCAweDA1LCAweDkwLCAweDE4LCAweDQwLCAweDYwLCAweDAxLCAweEM5LCAweDAyLCAweDI0LAorMHgwMywgMHgxNCwgMHgwQywgMHg2MCwgMHg1MCwgMHgwMCwgMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwKKzB4ODAsIDB4NjgsIDB4MDAsIDB4QTEsIDB4MDYsIDB4QjQsIDB4MDYsIDB4MTAsIDB4OEUsIDB4NDAsIDB4M0IsIDB4MDEsIDB4QUQsCisweDA0LCAweEI0LCAweDEzLCAweEQwLCAweDhFLCAweDQwLCAweDM4LCAweDgxLCAweEUxLCAweDAwLCAweEI0LCAweDEzLCAweEQwLAorMHgwRSwgMHg0MCwgMHg3OCwgMHgwMCwgMHhDMSwgMHgxMCwgMHg4NCwgMHgxMywgMHg1MCwgMHg1RSwgMHg0MCwgMHg3QSwgMHgxMSwKKzB4QTEsIDB4MTEsIDB4ODYsIDB4MDksIDB4RDAsIDB4MkMsIDB4NDIsIDB4QTgsIDB4MDAsIDB4RUQsIDB4MDAsIDB4MzQsIDB4MEIsCisweDEwLCAweDVGLCAweDYwLCAweDE0LCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDEwLAorMHg2OCwgMHgwMCwgMHhFMywgMHgwNywgMHhCQywgMHgwNiwgMHgzMCwgMHg1QSwgMHhDMCwgMHhFQiwgMHgwMCwgMHhFRiwgMHgwMywKKzB4QjQsIDB4MEYsIDB4RjAsIDB4MUMsIDB4QzAsIDB4RjEsIDB4MDAsIDB4RTEsIDB4MDEsIDB4QkMsIDB4MTcsIDB4RjAsIDB4MTcsCisweEM0LCAweDcyLCAweDAwLCAweEUzLCAweDAxLCAweDlDLCAweDE3LCAweDcwLCAweDNFLCAweEM4LCAweEZFLCAweDQwLCAweEUzLAorMHgwMSwgMHg5QywgMHgwNSwgMHhCMCwgMHgxQSwgMHhDMCwgMHg2OCwgMHgwOCwgMHhFRCwgMHgwMSwgMHhBQywgMHgwNSwgMHgzMCwKKzB4M0UsIDB4QzAsIDB4NTQsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4QjgsIDB4MjUsCisweDUwLCAweDlGLCAweDAwLCAweDNDLCAweDAyLCAweEYwLCAweDBELCAweEMwLCAweDM3LCAweDAwLCAweERGLCAweDgwLCAweDdDLAorMHgwMywgMHhGMCwgMHgwRCwgMHhDMiwgMHhCNywgMHgwRCwgMHhERiwgMHgwMCwgMHg3QywgMHg0QiwgMHhGMCwgMHgwNSwgMHhDMCwKKzB4MzcsIDB4MDAsIDB4REYsIDB4MDAsIDB4NUMsIDB4MjMsIDB4NzIsIDB4MEQsIDB4RDAsIDB4MjUsIDB4MDAsIDB4REYsIDB4MDAsCisweDdFLCAweDAxLCAweEYwLCAweDA5LCAweEM0LCAweDI3LCAweDAwLCAweDlGLCAweDAwLCAweDdDLCAweDAzLCAweEY0LCAweDBDLAorMHhDMCwgMHg0MywgMHg0MCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHhBMCwgMHg2RiwgMHgwMCwKKzB4RkYsIDB4MDksIDB4Q0MsIDB4MTMsIDB4MzAsIDB4MUYsIDB4QzAsIDB4N0IsIDB4MDAsIDB4RjMsIDB4MDEsIDB4Q0MsIDB4MjcsCisweDMwLCAweDVGLCAweDgwLCAweDdGLCAweDAwLCAweEZGLCAweDAxLCAweEZDLCAweDQ3LCAweDMwLCAweDFCLCAweEMwLCAweDdDLAorMHgwMCwgMHhCRiwgMHgwMSwgMHhDQywgMHgwNywgMHhGMCwgMHgxRSwgMHhDMCwgMHg2OCwgMHgwQSwgMHhCMSwgMHgwQywgMHhGQywKKzB4MjUsIDB4RjAsIDB4MUYsIDB4QzAsIDB4NzgsIDB4NDIsIDB4RjMsIDB4MDEsIDB4RkMsIDB4MDYsIDB4RjAsIDB4MUYsIDB4QzQsCisweDA4LCAweDAwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE1LCAweDgwLCAweDI5LCAweDAwLCAweEJELAorMHgxOCwgMHg4NCwgMHg0MywgMHgxMSwgMHgwQSwgMHg0OCwgMHgzQiwgMHgwMCwgMHhBMSwgMHgxMCwgMHg4NCwgMHgyMywgMHgxMCwKKzB4MEUsIDB4NDgsIDB4M0IsIDB4MDAsIDB4RUQsIDB4MDAsIDB4MzQsIDB4MDMsIDB4MTAsIDB4OEIsIDB4NDEsIDB4MzgsIDB4MDAsCisweDdELCAweDAwLCAweDk0LCAweDAzLCAweEQwLCAweDRFLCAweDQwLCAweDM4LCAweDAzLCAweEExLCAweDA0LCAweEI0LCAweDA5LAorMHhEMCwgMHg4RSwgMHg0MCwgMHgxOSwgMHgwMiwgMHhFMSwgMHgwMCwgMHhCNCwgMHgwQSwgMHhGMCwgMHg4RSwgMHg0MCwgMHg1NCwKKzB4MjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjksIDB4MDAsIDB4RUQsIDB4NDAsCisweEE3LCAweDIyLCAweDE0LCAweDBBLCAweDQwLCAweDJGLCAweDA2LCAweEIxLCAweDA4LCAweEM0LCAweDA3LCAweDEyLCAweDRFLAorMHg2MCwgMHgzQiwgMHgwMCwgMHhFRCwgMHgwMiwgMHhCNCwgMHgwMywgMHg5MCwgMHgwMiwgMHg1MCwgMHgzOCwgMHgwMiwgMHhBRCwKKzB4MDAsIDB4QTQsIDB4MDMsIDB4RDAsIDB4MUYsIDB4NDksIDB4MkMsIDB4MDQsIDB4RTksIDB4ODgsIDB4QjQsIDB4MDEsIDB4RDAsCisweDBBLCAweDQwLCAweDM4LCAweDgwLCAweDYxLCAweDEwLCAweEI0LCAweDAxLCAweEQwLCAweDFGLCAweDQwLCAweDYwLCAweDAwLAorMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNiwgMHgyOCwgMHgyMywgMHgwMCwgMHg4RCwgMHgwMCwgMHgyNCwKKzB4MDYsIDB4MTAsIDB4MDksIDB4NDAsIDB4NzcsIDB4MDAsIDB4ODEsIDB4MDAsIDB4MDQsIDB4MjMsIDB4MTAsIDB4MEMsIDB4NjAsCisweDMzLCAweDAwLCAweENELCAweDA4LCAweDM0LCAweDAzLCAweDkxLCAweDAwLCAweDQxLCAweDMwLCAweDAwLCAweDRELCAweDAwLAorMHgwNiwgMHgwMywgMHhEMiwgMHgzQywgMHg0MCwgMHg2MCwgMHgyMCwgMHhDOSwgMHgwMCwgMHgzNCwgMHgwOSwgMHhEMCwgMHgwOCwKKzB4NDAsIDB4MzEsIDB4MDIsIDB4MDEsIDB4MDMsIDB4MzAsIDB4MDcsIDB4NTAsIDB4MEMsIDB4NjAsIDB4MTgsIDB4MjAsIDB4MEMsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE1LCAweEE4LCAweDM1LCAweDAwLCAweERGLCAweDAxLCAweDZDLCAweDAyLAorMHgzMCwgMHgwRCwgMHg0MCwgMHhCNywgMHg0MiwgMHhEMywgMHgyMSwgMHg0RCwgMHgwMywgMHgxNCwgMHgwRiwgMHhDMiwgMHgzRiwKKzB4MDAsIDB4REYsIDB4MDAsIDB4RjQsIDB4MDMsIDB4OTAsIDB4MUQsIDB4QzAsIDB4MzQsIDB4MDAsIDB4NUYsIDB4MDAsIDB4Q0QsCisweDE3LCAweEYwLCAweDNELCAweEQwLCAweEY0LCAweDQwLCAweDlBLCAweDAwLCAweDdDLCAweDA5LCAweEYxLCAweDBELCAweEMyLAorMHhGMCwgMHgwMCwgMHhEMSwgMHgyMywgMHg3NCwgMHgwNywgMHhEMCwgMHgyRCwgMHg1MCwgMHg3NCwgMHgyMCwgMHgwNiwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4QjcsIDB4MDAsIDB4REYsIDB4MDAsIDB4NUMsIDB4MDIsIDB4RjAsCisweDBELCAweEMwLCAweDI3LCAweDAwLCAweDlGLCAweDAwLCAweDdDLCAweDQzLCAweEYwLCAweDBELCAweEMwLCAweDM3LCAweDAwLAorMHhERiwgMHgwMCwgMHgzQywgMHgwMywgMHg3MiwgMHgyRCwgMHhDMCwgMHgzNywgMHgwMCwgMHg5RiwgMHgwMCwgMHg3QywgMHgwMywKKzB4RjAsIDB4MEQsIDB4QzAsIDB4MzcsIDB4MDEsIDB4OTcsIDB4MjIsIDB4N0MsIDB4MEQsIDB4RTAsIDB4MEQsIDB4QzAsIDB4QjcsCisweDA0LCAweERGLCAweDIwLCAweDdDLCAweDIxLCAweEYwLCAweENELCAweEMwLCAweDA3LCAweDAwLCAweDBDLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwOCwgMHg3RiwgMHgwMiwgMHhGRiwgMHgwMCwgMHg3QywgMHgyMiwgMHhGMCwgMHgwQiwKKzB4RDAsIDB4MkMsIDB4MDAsIDB4RjMsIDB4MDAsIDB4RkMsIDB4MDMsIDB4RjAsIDB4MEYsIDB4QzAsIDB4M0UsIDB4MDAsIDB4RkYsCisweDAwLCAweERDLCAweDAzLCAweDMwLCAweDlCLCAweEMwLCAweDNGLCAweDAwLCAweDdGLCAweDAxLCAweEVFLCAweDAzLCAweEYwLAorMHgwRiwgMHhDMSwgMHgzRiwgMHgwMCwgMHhFRiwgMHgwNSwgMHhDQywgMHg0MSwgMHhGMCwgMHgwQiwgMHhDMCwgMHgzRCwgMHgwMCwKKzB4RkIsIDB4MTAsIDB4OEMsIDB4MTAsIDB4MzAsIDB4MEYsIDB4QzAsIDB4MDcsIDB4MjAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDgxLCAweDIwLCAweEQ2LCAweDAwLCAweERELCAweDA5LCAweDc0LCAweDBBLCAweEQwLCAweDBELCAweDQwLAorMHg2NCwgMHgyMiwgMHhEMSwgMHgyMCwgMHg3NCwgMHgwMywgMHhEMCwgMHgwRCwgMHg0MCwgMHgzNywgMHgwMCwgMHhERCwgMHgwMCwKKzB4NzQsIDB4MDMsIDB4MTAsIDB4MDksIDB4NDAsIDB4MzcsIDB4MDAsIDB4OUQsIDB4MDIsIDB4N0UsIDB4MDMsIDB4RDAsIDB4MEQsCisweDQwLCAweDI3LCAweDAwLCAweERELCAweDA3LCAweDQ0LCAweDA1LCAweEQwLCAweDM4LCAweEM4LCAweDc2LCAweDAxLCAweDg5LAorMHgwMCwgMHg1NCwgMHgwQywgMHg1MCwgMHgwRCwgMHg0MiwgMHgwNywgMHgwMiwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDEsIDB4QTAsIDB4MjQsIDB4MDQsIDB4OUQsIDB4MDAsIDB4NzQsIDB4MEIsIDB4RDIsIDB4MEQsIDB4NDIsIDB4MzQsCisweDQwLCAweEQxLCAweDAwLCAweDc0LCAweDAzLCAweEQwLCAweDBELCAweDQwLCAweDM3LCAweDAwLCAweERELCAweDAwLCAweDc0LAorMHgwMywgMHgxMCwgMHgwNSwgMHg0MSwgMHgzNywgMHg4MCwgMHgxRCwgMHg2NiwgMHg3NCwgMHgwMywgMHhEMCwgMHgwRCwgMHg0MCwKKzB4MjcsIDB4MDAsIDB4OUQsIDB4MDAsIDB4NjQsIDB4MDcsIDB4RDIsIDB4MzUsIDB4NDAsIDB4NzUsIDB4MDAsIDB4RDEsIDB4MDAsCisweDQ0LCAweDAyLCAweDExLCAweDBELCAweDQwLCAweDA3LCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgxMCwgMHgwOCwgMHgzMCwgMHgwMCwgMHg4RCwgMHgyMCwgMHgzNiwgMHgwMywgMHhEMCwgMHgwOCwgMHg0MCwgMHgyMCwgMHgwMCwKKzB4ODEsIDB4MDAsIDB4MzQsIDB4MDMsIDB4RDIsIDB4MEMsIDB4NDAsIDB4MzMsIDB4MDAsIDB4Q0QsIDB4MDAsIDB4MzQsIDB4MDMsCisweDE4LCAweDA0LCAweDQwLCAweDMzLCAweEEwLCAweDBELCAweDAwLCAweDE0LCAweDAzLCAweEQyLCAweDBDLCAweDQ4LCAweDMzLAorMHgwMCwgMHhDRCwgMHgwMCwgMHgyNCwgMHgwMywgMHhEMCwgMHgwQywgMHg1QSwgMHgzNiwgMHgwMCwgMHhEMSwgMHgwMCwgMHgxNCwKKzB4MDAsIDB4NTAsIDB4MEMsIDB4NDAsIDB4NDIsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDIwLCAweDI2LCAweDAwLCAweDlGLCAweDIwLCAweDdDLCAweDAxLCAweEYwLCAweDA5LCAweEU4LCAweDI0LCAweDAwLCAweDkzLAorMHg0MCwgMHhGQywgMHgwMywgMHhGMCwgMHgwRCwgMHg0MCwgMHgzRiwgMHgwMCwgMHhERiwgMHgwMCwgMHhCQywgMHgyMywgMHgzNCwKKzB4MDEsIDB4QzAsIDB4MzcsIDB4MDAsIDB4MUYsIDB4MDAsIDB4NjQsIDB4MDMsIDB4RjAsIDB4MEYsIDB4QzAsIDB4MjcsIDB4MDAsCisweERGLCAweDAwLCAweDZDLCAweDAxLCAweEYwLCAweDA5LCAweEMwLCAweDM1LCAweDgwLCAweDVCLCAweDgwLCAweDRFLCAweDAwLAorMHgzMiwgMHgwRiwgMHhDOCwgMHgwNywgMHhDMCwgMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHhBOCwKKzB4MUYsIDB4MDAsIDB4QkYsIDB4MDAsIDB4RkMsIDB4MDEsIDB4RjAsIDB4MEIsIDB4QzAsIDB4MkYsIDB4MDAsIDB4QUYsIDB4MjAsCisweEJDLCAweDAzLCAweEYwLCAweDBGLCAweEM4LCAweDNGLCAweDAwLCAweEZGLCAweDAwLCAweEZDLCAweDAzLCAweEYwLCAweDAzLAorMHhDMCwgMHgzRiwgMHgwMCwgMHgzRiwgMHgwMCwgMHhGQywgMHgwMywgMHhGMCwgMHgwRiwgMHhDMiwgMHgyRiwgMHgwMCwgMHgzRiwKKzB4MDAsIDB4REMsIDB4MDAsIDB4RjAsIDB4MEEsIDB4QzAsIDB4M0YsIDB4MDAsIDB4M0YsIDB4MDAsIDB4RkMsIDB4ODAsIDB4RjgsCisweDBFLCAweEMwLCAweDE3LCAweDYwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweEIwLCAweDdGLAorMHgwMCwgMHgzRiwgMHgwMCwgMHhFQywgMHgwNywgMHg3MCwgMHgwMywgMHhDMCwgMHg3RCwgMHgwMiwgMHhGMywgMHgwOSwgMHhGQywKKzB4MTAsIDB4RjAsIDB4MEIsIDB4QzAsIDB4M0MsIDB4MDEsIDB4QkYsIDB4MjEsIDB4RkMsIDB4MDMsIDB4RjAsIDB4MEYsIDB4QzEsCisweDNGLCAweDAwLCAweDNGLCAweDE4LCAweENELCAweDAzLCAweDMwLCAweDFGLCAweEMwLCAweDBGLCAweDAwLCAweEZCLCAweDAwLAorMHhGQywgMHgwMywgMHhFMCwgMHgwRiwgMHhDMCwgMHg0QywgMHgwMCwgMHhGMywgMHgwMCwgMHhDQywgMHgwMywgMHgzMCwgMHgwRiwKKzB4QzAsIDB4MEMsIDB4MDAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MTAsIDB4NzcsIDB4MDAsCisweDVELCAweDAxLCAweDQ0LCAweDA3LCAweDEwLCAweEIxLCAweDQwLCAweDMzLCAweDAwLCAweEMxLCAweDA0LCAweDc0LCAweDA2LAorMHhEMCwgMHgyOSwgMHg0MSwgMHgzRCwgMHgwMCwgMHhERCwgMHgwMSwgMHhGNCwgMHgwNywgMHhEMCwgMHgwRSwgMHg0MCwgMHg3NywKKzB4MDAsIDB4MUQsIDB4ODIsIDB4NDQsIDB4MDcsIDB4MTAsIDB4MkYsIDB4NDAsIDB4NjcsIDB4MDAsIDB4NTEsIDB4MDEsIDB4NzQsCisweDA3LCAweEQwLCAweDE1LCAweDQwLCAweDQ0LCAweDAwLCAweDVCLCAweDAxLCAweDQ0LCAweDA1LCAweDEwLCAweDFELCAweDQwLAorMHgwNCwgMHg2MCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMSwgMHhBMCwgMHgzMywgMHgwMCwgMHgwRCwKKzB4MDgsIDB4MDQsIDB4MDMsIDB4NTAsIDB4MTQsIDB4NjgsIDB4MzEsIDB4MDEsIDB4QzEsIDB4MDAsIDB4MzQsIDB4MjAsIDB4RDAsCisweDZDLCAweDQwLCAweEIxLCAweDA0LCAweENELCAweDAxLCAweDM0LCAweDIzLCAweEQwLCAweDRDLCAweDQxLCAweDMxLCAweDAyLAorMHgwRCwgMHgwNSwgMHgyNCwgMHgwMywgMHgxMCwgMHgyQywgMHg0MCwgMHgyMywgMHgwMCwgMHg4NSwgMHgwMCwgMHgzNCwgMHgwMiwKKzB4NTAsIDB4MDgsIDB4NDAsIDB4MDEsIDB4MDAsIDB4ODUsIDB4MjAsIDB4MDQsIDB4MDMsIDB4MTAsIDB4MEMsIDB4NDAsIDB4NDQsCisweDgwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweEEwLCAweDM1LCAweDgwLCAweDVELCAweDE0LAorMHg2NSwgMHgwMywgMHgxMCwgMHgwMSwgMHg0MCwgMHgzNywgMHgwMCwgMHhEMSwgMHgwMCwgMHg3NCwgMHgwMCwgMHhEMCwgMHgwRCwKKzB4NDAsIDB4MzUsIDB4MjAsIDB4REQsIDB4MDEsIDB4NzQsIDB4MDMsIDB4RDEsIDB4MEQsIDB4NDAsIDB4MzcsIDB4MDAsIDB4MUQsCisweDAwLCAweDY0LCAweDQzLCAweDEwLCAweDBELCAweDQ0LCAweDY3LCAweDAwLCAweEQ1LCAweDA2LCAweDc0LCAweDAzLCAweEQxLAorMHgwRCwgMHg1MSwgMHg0NSwgMHg0MCwgMHhERCwgMHgwMCwgMHg0NCwgMHgwMywgMHgxMCwgMHg4RCwgMHg0MCwgMHgwQywgMHgwMCwKKzB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4ODgsIDB4MzcsIDB4MDAsIDB4OUYsIDB4MDEsIDB4NkMsCisweDA3LCAweDcwLCAweDAxLCAweEMwLCAweDc1LCAweDQwLCAweEQzLCAweDAwLCAweDdDLCAweDExLCAweEYwLCAweDBELCAweEMwLAorMHgzNSwgMHgwMCwgMHhERiwgMHgwMSwgMHg3QywgMHgwMywgMHhGMCwgMHgwRCwgMHhDMCwgMHgzNywgMHgwMCwgMHg1RiwgMHgwMCwKKzB4NkMsIDB4MDMsIDB4MzAsIDB4MEQsIDB4QzAsIDB4RTcsIDB4MDAsIDB4REYsIDB4MDAsIDB4N0MsIDB4MDEsIDB4RjAsIDB4M0QsCisweEMwLCAweEMxLCAweDg0LCAweEQ3LCAweDAwLCAweDRDLCAweDA3LCAweDMwLCAweDBELCAweEMwLCAweDA4LCAweDIwLCAweDBFLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNywgMHg4MCwgMHgzRCwgMHgwMCwgMHg2RiwgMHgwMCwgMHhEQywgMHgwQiwKKzB4RjAsIDB4MEYsIDB4QzAsIDB4N0YsIDB4MDIsIDB4RkYsIDB4MDAsIDB4RkMsIDB4MEYsIDB4RjAsIDB4MEQsIDB4RTAsIDB4M0YsCisweDAwLCAweEZGLCAweDAwLCAweEZDLCAweDAzLCAweEYwLCAweDBGLCAweEM2LCAweDNGLCAweDgwLCAweDlGLCAweDI4LCAweERDLAorMHgyNywgMHhGMCwgMHgwRiwgMHhDMCwgMHgyRiwgMHg0MCwgMHg3QiwgMHgwMCwgMHhGQywgMHgwMywgMHhGMCwgMHg5NiwgMHhDMCwKKzB4MEUsIDB4MDAsIDB4RTMsIDB4MDAsIDB4QkMsIDB4MDksIDB4RjAsIDB4MUUsIDB4QzAsIDB4MUYsIDB4MDAsIDB4MDYsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweDA4LCAweDM1LCAweDAwLCAweDlGLCAweDAyLCAweDRDLCAweDAzLCAweEYwLAorMHgwNSwgMHhDMCwgMHgzNCwgMHgwMCwgMHhEMywgMHgwMCwgMHg1QywgMHgwNSwgMHg3MCwgMHgwRCwgMHhDOCwgMHgzNSwgMHgwOCwKKzB4RDMsIDB4ODAsIDB4N0MsIDB4MDcsIDB4RjEsIDB4MEQsIDB4QzIsIDB4MzQsIDB4MDAsIDB4NUYsIDB4MDAsIDB4MEMsIDB4MjMsCisweDMwLCAweDBELCAweEMwLCAweEEzLCAweDAwLCAweDk3LCAweDAwLCAweDdDLCAweDAzLCAweEIwLCAweDI5LCAweEMwLCAweDA0LAorMHgwMCwgMHhERiwgMHgwMCwgMHg0QywgMHgwMywgMHgzMCwgMHgyRCwgMHhDMCwgMHgwOCwgMHgyMCwgMHgwNCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MTMsIDB4QTAsIDB4MzQsIDB4MDAsIDB4NUMsIDB4MDAsIDB4MzQsIDB4M0YsIDB4RDAsIDB4MEQsCisweEMwLCAweDc0LCAweDAxLCAweEQxLCAweDAwLCAweDQ0LCAweDAxLCAweEQwLCAweDlDLCAweDQ4LCAweDdDLCAweDAxLCAweEQxLAorMHgwMCwgMHhGNCwgMHgwMywgMHhEMCwgMHgwRiwgMHg0MCwgMHgzQywgMHgwMSwgMHg5RCwgMHgwMCwgMHg2RSwgMHgwMywgMHhCMCwKKzB4NEYsIDB4NDAsIDB4MjcsIDB4MDgsIDB4RDEsIDB4MDAsIDB4NzQsIDB4MDMsIDB4MTAsIDB4NEQsIDB4QzAsIDB4MDQsIDB4MDAsCisweERELCAweDAwLCAweDQ0LCAweDkzLCAweDEwLCAweDBELCAweDQwLCAweDRDLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMywgMHgyMCwgMHgzMiwgMHgwMCwgMHgwRCwgMHgwMCwgMHgzNCwgMHgwRiwgMHg5MCwgMHgwOCwgMHg0MCwKKzB4MzQsIDB4MDAsIDB4QzEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4NTAsIDB4MDgsIDB4MDAsIDB4MzEsIDB4MDAsIDB4QzEsIDB4MDAsCisweDM0LCAweDAzLCAweEQ4LCAweDBDLCAweDQwLCAweDcwLCAweDAwLCAweDlELCAweDQwLCAweDA0LCAweDA0LCAweDkwLCAweDJDLAorMHg0MSwgMHgyMywgMHgwMCwgMHhDNSwgMHgwMCwgMHgzNiwgMHgwMywgMHgxMCwgMHgwQywgMHg0MCwgMHg0MiwgMHgwMiwgMHhDRCwKKzB4MDAsIDB4MjQsIDB4MDIsIDB4MTAsIDB4MDAsIDB4NDAsIDB4MEMsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDA0LCAweDAwLCAweDdBLCAweDA4LCAweEFELCAweDIxLCAweEI0LCAweDA3LCAweEQyLCAweDEwLCAweDQwLCAweEY4LAorMHgwMiwgMHhFMSwgMHgwQiwgMHg5NCwgMHgyNiwgMHhEMCwgMHgxQSwgMHg0MSwgMHhGOCwgMHgwMCwgMHhFMCwgMHgwMSwgMHhCNCwKKzB4MDcsIDB4RDgsIDB4M0UsIDB4NDAsIDB4NzgsIDB4MDAsIDB4NkQsIDB4MDEsIDB4ODQsIDB4MDYsIDB4OTAsIDB4MUUsIDB4NDAsCisweDYzLCAweDgwLCAweEUxLCAweDAxLCAweDM0LCAweDI3LCAweDEwLCAweDFDLCAweDQwLCAweDQ4LCAweDAwLCAweDRELCAweDAxLAorMHgyNCwgMHgwNywgMHgxMCwgMHgxNCwgMHg0MiwgMHgxMCwgMHgyMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MTIsIDB4MDAsIDB4MzIsIDB4MDAsIDB4MEYsIDB4MDAsIDB4M0MsIDB4MjMsIDB4RjAsIDB4MEMsIDB4QzAsIDB4MzAsIDB4MDIsCisweEMzLCAweDAwLCAweDFDLCAweDAzLCAweDcwLCAweDhDLCAweDQwLCAweDM1LCAweDAwLCAweEMxLCAweDAwLCAweDNDLCAweDIzLAorMHhGMCwgMHgwQywgMHhDMCwgMHgzMCwgMHgwMCwgMHg4RiwgMHgwMCwgMHgwNCwgMHgxMSwgMHgzMCwgMHg4QywgMHhDMCwgMHhCMywKKzB4ODIsIDB4QzcsIDB4MDAsIDB4M0MsIDB4MDIsIDB4MzAsIDB4MEMsIDB4QzAsIDB4MDIsIDB4MDAsIDB4OEYsIDB4MDAsIDB4MkMsCisweDAyLCAweDMwLCAweDJDLCAweEMwLCAweDQ4LCAweDQwLCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLAorMHhBOCwgMHgzRCwgMHgwMCwgMHhCRiwgMHgwMCwgMHhGRSwgMHhBMywgMHhGMCwgMHg4MywgMHhDMCwgMHgzRiwgMHg5MiwgMHhGRiwKKzB4MDAsIDB4RUMsIDB4ODMsIDB4RjAsIDB4MEYsIDB4QzAsIDB4QkYsIDB4MDQsIDB4RkYsIDB4MDAsIDB4RkMsIDB4MDMsIDB4RjAsCisweDBGLCAweEMwLCAweDNGLCAweDA0LCAweDdGLCAweDA4LCAweEJDLCAweDAzLCAweEYwLCAweDBGLCAweEMwLCAweDNGLCAweDAwLAorMHhGRiwgMHgwMCwgMHhGQywgMHgwMywgMHg3NSwgMHg4RiwgMHhEMCwgMHgwRiwgMHgwMCwgMHhGRiwgMHgwMCwgMHg1QywgMHgwMywKKzB4RjAsIDB4MEYsIDB4RTAsIDB4MEIsIDB4MjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4QTAsCisweDM3LCAweDAwLCAweERGLCAweDAwLCAweDdDLCAweDAzLCAweEYwLCAweDA5LCAweEMwLCAweDM3LCAweDAwLCAweEQzLCAweDAxLAorMHgwQywgMHgwNCwgMHgzMCwgMHgwRCwgMHhDMCwgMHhCNSwgMHgwMSwgMHhEQiwgMHgwMCwgMHg3QywgMHg3QiwgMHhGMCwgMHhFRCwKKzB4QzEsIDB4MzQsIDB4MDAsIDB4REYsIDB4MDAsIDB4NkMsIDB4MDMsIDB4QjgsIDB4OEQsIDB4QzEsIDB4MjcsIDB4MDAsIDB4REYsCisweDAxLCAweDRDLCAweDA1LCAweDEwLCAweDBELCAweEM0LCAweDA0LCAweDAwLCAweERGLCAweDAwLCAweDRDLCAweDAzLCAweDMwLAorMHgxOSwgMHhDMCwgMHg0MCwgMHgwMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHg5OCwgMHgzOSwKKzB4MDAsIDB4RUQsIDB4MDAsIDB4QjQsIDB4MDMsIDB4RDIsIDB4MEUsIDB4NDAsIDB4M0IsIDB4MDAsIDB4RjEsIDB4MDAsIDB4ODUsCisweDAyLCAweDUwLCAweDBFLCAweDQwLCAweDMzLCAweDAxLCAweEUxLCAweDAwLCAweEI0LCAweDAzLCAweEQwLCAweDBDLCAweDQwLAorMHgzOCwgMHgwMSwgMHhDRCwgMHgwMCwgMHhBNCwgMHg4MywgMHgxMCwgMHg0RSwgMHhDMCwgMHgyQiwgMHgwMCwgMHhFRCwgMHgwMCwKKzB4ODQsIDB4MDMsIDB4MTAsIDB4MEUsIDB4NDAsIDB4MDgsIDB4MDAsIDB4RUQsIDB4ODAsIDB4ODQsIDB4MDMsIDB4MTAsIDB4MEUsCisweDQwLCAweDQ4LCAweDY4LCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDc5LCAweDAwLAorMHhFRCwgMHgwMSwgMHhCNCwgMHg0NywgMHhEMCwgMHgxRSwgMHg0MCwgMHg3QiwgMHgwMCwgMHhFMSwgMHg4MSwgMHg4NCwgMHgwNywKKzB4MDAsIDB4MUUsIDB4NDEsIDB4N0IsIDB4MDAsIDB4RTEsIDB4MDMsIDB4QjQsIDB4OTcsIDB4RDgsIDB4NUUsIDB4NDAsIDB4N0EsCisweDAwLCAweEVELCAweDAxLCAweDA1LCAweDA3LCAweDE0LCAweDVFLCAweDQ0LCAweDdCLCAweDAwLCAweEM1LCAweDAxLCAweDA0LAorMHgwNywgMHg5MCwgMHgxQywgMHg0MCwgMHg0QSwgMHgwMCwgMHhDRCwgMHgxMSwgMHgwNCwgMHg0NywgMHgxMCwgMHgxQywgMHg0MCwKKzB4MTIsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTYsIDB4MjAsIDB4MzMsIDB4QTAsIDB4Q0QsCisweDFBLCAweDM0LCAweDg2LCAweEQwLCAweDBDLCAweDQxLCAweDIzLCAweDAyLCAweEMxLCAweDAwLCAweDA0LCAweDI3LCAweDVCLAorMHgxRCwgMHg0MiwgMHgzMywgMHg0MCwgMHg0MSwgMHgwMCwgMHgzNCwgMHgwMywgMHhEMCwgMHgwRCwgMHg1MCwgMHgzMiwgMHgwMCwKKzB4Q0QsIDB4MDYsIDB4MDQsIDB4MDcsIDB4MTAsIDB4MEQsIDB4NDAsIDB4QjEsIDB4MDAsIDB4Q0QsIDB4MDAsIDB4MDUsIDB4MDcsCisweDk0LCAweDBDLCAweDUwLCAweEYyLCAweDA0LCAweENELCAweDAwLCAweDA1LCAweDAzLCAweDE0LCAweDBDLCAweDc4LCAweDVBLAorMHgwMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNywgMHhBOCwgMHgxNywgMHgwMCwgMHg3RiwgMHgwMywKKzB4N0MsIDB4MDEsIDB4RjAsIDB4NzcsIDB4NDAsIDB4NTcsIDB4NDAsIDB4NTMsIDB4MDAsIDB4Q0MsIDB4MDUsIDB4MzAsIDB4MDUsCisweEMwLCAweDE3LCAweDAwLCAweDczLCAweEMxLCAweDc0LCAweDAxLCAweEYwLCAweDA1LCAweEM4LCAweDE2LCAweDEwLCAweDdGLAorMHgwMiwgMHhFQywgMHgxMSwgMHhCMCwgMHgwNSwgMHg0MCwgMHgxRiwgMHgwMCwgMHg3RiwgMHgwMCwgMHhDQywgMHgxNSwgMHhCMCwKKzB4MDcsIDB4QzAsIDB4REEsIDB4MDksIDB4N0YsIDB4MDMsIDB4Q0MsIDB4MDUsIDB4MzAsIDB4MjcsIDB4QzAsIDB4NUUsIDB4MjAsCisweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDgwLCAweDA1LCAweDAwLCAweDBGLCAweDAwLCAweDc0LAorMHgwMCwgMHhGMCwgMHgwMSwgMHhDMCwgMHgwNywgMHgwMCwgMHgxRiwgMHgwMCwgMHg3QywgMHgwMCwgMHhGMCwgMHgwMSwgMHhDMCwKKzB4MDcsIDB4MDAsIDB4MTcsIDB4MDEsIDB4M0MsIDB4MDAsIDB4RjAsIDB4MDEsIDB4QzAsIDB4MDUsIDB4QTAsIDB4MUIsIDB4MDAsCisweDNFLCAweDA0LCAweDcwLCAweDAxLCAweEMwLCAweDA3LCAweDA0LCAweDFGLCAweDAwLCAweDdDLCAweDAwLCAweDc0LCAweDAxLAorMHhDMCwgMHg4NSwgMHgwMCwgMHgwRiwgMHgwMCwgMHgzQywgMHgwMCwgMHhGMCwgMHgwMSwgMHhDMCwgMHg0OSwgMHgwMCwgMHgwNiwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4MjUsIDB4MDAsIDB4OUYsIDB4MDAsIDB4NEMsIDB4MDIsCisweEYwLCAweDA4LCAweEQ0LCAweDI0LCAweDAwLCAweDkzLCAweDAyLCAweDdDLCAweDAyLCAweEYwLCAweDA5LCAweEMwLCAweDI2LAorMHg0MCwgMHg5MywgMHgwMCwgMHg0QywgMHgwMiwgMHhCMCwgMHgwOSwgMHhEMCwgMHgyNCwgMHgwMCwgMHg5RiwgMHgwMCwgMHg0QywKKzB4ODIsIDB4MzAsIDB4MDksIDB4QzAsIDB4MjQsIDB4MDAsIDB4OUYsIDB4MDAsIDB4N0MsIDB4NDIsIDB4RjAsIDB4MDgsIDB4QzAsCisweDI0LCAweDAwLCAweDkzLCAweDEwLCAweDRDLCAweDAyLCAweDM0LCAweDA5LCAweEMxLCAweDQzLCAweDIwLCAweDA0LCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgyMCwgMHgyNiwgMHgwMCwgMHg5RCwgMHgwMCwgMHg0NCwgMHgwNiwgMHhEMCwKKzB4MDksIDB4NDAsIDB4MjAsIDB4MDAsIDB4OTEsIDB4MTAsIDB4NzQsIDB4MDIsIDB4RDAsIDB4MTksIDB4NDgsIDB4QTQsIDB4MDAsCisweDgxLCAweDAwLCAweDQ0LCAweDAyLCAweDEwLCAweDI5LCAweEMwLCAweDI2LCAweDAwLCAweDlELCAweDAwLCAweDQ0LCAweDAyLAorMHhCMCwgMHgwOSwgMHhDMCwgMHhBNiwgMHgwMCwgMHg5RCwgMHgwMiwgMHg1QywgMHgwQSwgMHhEMCwgMHgyOSwgMHg0MCwgMHgyNCwKKzB4MDAsIDB4OTEsIDB4MDIsIDB4NEMsIDB4MEEsIDB4MTAsIDB4MjksIDB4NDAsIDB4MDcsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDFDLCAweEEwLCAweDI0LCAweDAwLCAweDlELCAweDAwLCAweDQ0LCAweDA2LCAweEQwLCAweDA5LAorMHg0OCwgMHg2NCwgMHgwMCwgMHg5MSwgMHgwMCwgMHg3NCwgMHgwNiwgMHg1MCwgMHg4OSwgMHg0MCwgMHg2MiwgMHg4NCwgMHg5OSwKKzB4MDAsIDB4NDQsIDB4MDYsIDB4MTAsIDB4MTksIDB4NjMsIDB4NjQsIDB4ODAsIDB4OEQsIDB4MDAsIDB4NDQsIDB4MDIsIDB4MTAsCisweDA5LCAweDQyLCAweDI0LCAweDA0LCAweDkxLCAweDEwLCAweDc0LCAweDQyLCAweEQwLCAweDA5LCAweDUxLCAweDI0LCAweDAwLAorMHg5OSwgMHgzMCwgMHg0NCwgMHhDMywgMHgxMCwgMHgwOSwgMHg0MSwgMHg3MywgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MTQsIDB4MjgsIDB4MjAsIDB4MDAsIDB4OEQsIDB4MDQsIDB4MDQsIDB4MDIsIDB4RDAsIDB4NDgsIDB4NDAsCisweDM0LCAweDQwLCAweDgxLCAweDAwLCAweDM0LCAweDEyLCAweEQwLCAweDRDLCAweDQwLCAweDIwLCAweDgxLCAweDk5LCAweDAwLAorMHgwNCwgMHgxMiwgMHgxMCwgMHg0OCwgMHg0MCwgMHgyMCwgMHgyMSwgMHg4RCwgMHgwNCwgMHgwNiwgMHgxMiwgMHg5MCwgMHg0QywKKzB4NDgsIDB4MjAsIDB4MDEsIDB4OEQsIDB4MDQsIDB4MTQsIDB4MTIsIDB4RDgsIDB4NDgsIDB4NjAsIDB4MjAsIDB4MDAsIDB4ODksCisweEM0LCAweDA0LCAweDEyLCAweDEwLCAweDQ4LCAweDYwLCAweDUzLCAweEEwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgxRCwgMHhCMCwgMHgwNiwgMHgwMCwgMHgxRiwgMHgwMCwgMHg0QywgMHgwMSwgMHhGMCwgMHgwMSwgMHhDMCwgMHg4MCwKKzB4MDIsIDB4MTMsIDB4MEEsIDB4NzQsIDB4MDAsIDB4NzAsIDB4QTEsIDB4QzAsIDB4ODYsIDB4MjIsIDB4MTksIDB4MDAsIDB4NDUsCisweDAwLCAweDMwLCAweEExLCAweDQwLCAweDA0LCAweDAwLCAweDFGLCAweDBBLCAweDRELCAweDAwLCAweDMwLCAweEExLCAweDQwLAorMHgwNCwgMHgwMCwgMHgxRiwgMHgwMCwgMHg3QywgMHgwMCwgMHhGMSwgMHgwMSwgMHhDOCwgMHgxNCwgMHgwMCwgMHgxMywgMHgwMCwKKzB4NEMsIDB4MDAsIDB4MzAsIDB4MDEsIDB4QzAsIDB4NzcsIDB4QzAsIDB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDE5LCAweEE4LCAweDI3LCAweDAwLCAweEJGLCAweDg4LCAweEZELCAweDAyLCAweEYwLCAweDhCLCAweDgwLCAweDJGLCAweDAwLAorMHg5RiwgMHgwMCwgMHhGQywgMHhBMiwgMHhGMCwgMHg4QiwgMHhDMCwgMHgyNywgMHg0MiwgMHhCNywgMHgwMCwgMHg3QywgMHgyMiwKKzB4RjQsIDB4ODksIDB4QzAsIDB4MjcsIDB4MjIsIDB4QkYsIDB4MDgsIDB4RkMsIDB4MjIsIDB4NzQsIDB4ODksIDB4RDAsIDB4MkYsCisweDAyLCAweEJGLCAweDA4LCAweERDLCAweDIyLCAweEYxLCAweDhCLCAweEMwLCAweDJGLCAweDQwLCAweEI3LCAweDI4LCAweERELAorMHgyMiwgMHhGMCwgMHg4QiwgMHhDMCwgMHg2NywgMHgyMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwKKzB4QTgsIDB4MjcsIDB4MDAsIDB4OUYsIDB4MDQsIDB4RkUsIDB4MDIsIDB4RjAsIDB4MDksIDB4QzAsIDB4MkYsIDB4MDIsIDB4QkYsCisweDAwLCAweERDLCAweDUyLCAweEIwLCAweENBLCAweEM4LCAweDJFLCAweDA4LCAweEJGLCAweEEwLCAweERDLCAweDgyLCAweDMyLAorMHg0QiwgMHhDMiwgMHg2RiwgMHgwMSwgMHhERiwgMHgwQywgMHhGQywgMHgwMiwgMHgzNCwgMHgwQiwgMHhDMCwgMHgyNiwgMHgwMCwKKzB4OTMsIDB4MDQsIDB4NUMsIDB4NTIsIDB4RjAsIDB4NDksIDB4QzAsIDB4MjQsIDB4MDAsIDB4OUYsIDB4MDAsIDB4N0MsIDB4MDIsCisweDMwLCAweDQ5LCAweEMwLCAweDYzLCAweDAwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFDLCAweDA4LAorMHgwNywgMHgwMCwgMHgxRCwgMHgwOCwgMHg3NCwgMHgwMCwgMHhEMCwgMHgwMSwgMHg0MCwgMHgwNywgMHgwMCwgMHgxRCwgMHgxNCwKKzB4NzQsIDB4MDAsIDB4RDAsIDB4QzEsIDB4NDAsIDB4ODQsIDB4MDQsIDB4MUQsIDB4MDAsIDB4NUMsIDB4MjAsIDB4MTAsIDB4NDEsCisweDQzLCAweDA3LCAweDAwLCAweDFELCAweDBDLCAweDc0LCAweDA4LCAweDEwLCAweDAxLCAweDQxLCAweDA0LCAweDQyLCAweDEzLAorMHgwMCwgMHg0NCwgMHgwMCwgMHhEMCwgMHg4MSwgMHg0MCwgMHgwNCwgMHgwMCwgMHgxRCwgMHgwMCwgMHg3QywgMHgyMCwgMHgxMCwKKzB4MDMsIDB4NDAsIDB4NzMsIDB4NjAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4MDAsIDB4MjEsCisweDAwLCAweDhELCAweDAwLCAweDM0LCAweDAyLCAweEQwLCAweDg4LCAweDQwLCAweDIzLCAweDAwLCAweDhELCAweDA0LCAweDM0LAorMHgwMiwgMHg5MCwgMHg0OCwgMHg0MCwgMHgyMiwgMHgwMywgMHg4RCwgMHgwMCwgMHgzNCwgMHgwMiwgMHgxMCwgMHhDOCwgMHg0MCwKKzB4MjMsIDB4MDIsIDB4OEQsIDB4NDQsIDB4MzQsIDB4MjIsIDB4MTIsIDB4ODgsIDB4NDgsIDB4MjgsIDB4ODAsIDB4QTEsIDB4MDksCisweEI0LCAweDA2LCAweEQwLCAweDFBLCAweDQwLCAweDI4LCAweDAwLCAweEFELCAweDg5LCAweEI0LCAweDA2LCAweDEwLCAweDlBLAorMHg0MCwgMHg0QiwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgyOCwgMHgyNSwgMHgwMCwKKzB4OUQsIDB4MDAsIDB4NzQsIDB4MDYsIDB4RDAsIDB4MDksIDB4NDAsIDB4MjcsIDB4MDAsIDB4OUQsIDB4MDAsIDB4NzQsIDB4MDIsCisweEQwLCAweDBELCAweDYwLCAweDI0LCAweDAwLCAweDlELCAweDAyLCAweDc0LCAweDAyLCAweDEwLCAweDA5LCAweDQwLCAweDI3LAorMHgwMCwgMHg5RCwgMHgwMCwgMHg3NCwgMHgwMiwgMHgxMCwgMHgwRCwgMHg0MCwgMHhBNCwgMHgwMCwgMHhCOSwgMHgwMCwgMHhFNCwKKzB4MDIsIDB4RDAsIDB4NEIsIDB4NDAsIDB4MkMsIDB4MDAsIDB4QkMsIDB4NDAsIDB4RjQsIDB4MDIsIDB4MTAsIDB4OEIsIDB4NDAsCisweDYzLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweEE4LCAweDI3LCAweDAwLCAweDlGLAorMHgwMCwgMHg3NCwgMHgwMiwgMHhGMCwgMHgxOSwgMHg0MCwgMHgyNywgMHgwMCwgMHg5RiwgMHgwMCwgMHg3QywgMHg2QSwgMHg5MCwKKzB4MDksIDB4QzAsIDB4MjYsIDB4MDAsIDB4OUYsIDB4MDAsIDB4N0MsIDB4MDIsIDB4MzAsIDB4MDksIDB4QzAsIDB4MjcsIDB4MDAsCisweDlGLCAweDAwLCAweDdDLCAweDIyLCAweDMwLCAweDA5LCAweEQwLCAweDYwLCAweDAwLCAweDkzLCAweDBCLCAweDdDLCAweDBBLAorMHhGMCwgMHgzOSwgMHhEMCwgMHg2NCwgMHgwNCwgMHg5RiwgMHgwMiwgMHg3QywgMHgwQSwgMHgzNCwgMHgzOSwgMHhDMCwgMHgxNywKKzB4QTAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4ODAsIDB4MjUsIDB4MDAsIDB4OUYsIDB4MjAsCisweDdDLCAweDQyLCAweEYwLCAweDQ5LCAweEMwLCAweDY3LCAweDAyLCAweDlGLCAweDAwLCAweDdDLCAweDAyLCAweEQwLCAweDk4LAorMHhDMCwgMHgyNywgMHgwMCwgMHg5RiwgMHgwOSwgMHgxQywgMHgwMiwgMHhGNCwgMHgwOSwgMHhDMCwgMHgyNywgMHg4MCwgMHg5RiwKKzB4MDAsIDB4M0MsIDB4MDIsIDB4RjAsIDB4MDksIDB4QzAsIDB4MjUsIDB4MDEsIDB4ODcsIDB4MDEsIDB4NUMsIDB4MTYsIDB4RjAsCisweDE5LCAweEMwLCAweDY3LCAweDAxLCAweDlFLCAweDA1LCAweDVDLCAweDAyLCAweEYwLCAweDE5LCAweEMwLCAweDRCLCAweDAwLAorMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHgwNSwgMHgwMCwgMHgxRiwgMHgwMCwgMHg0QywKKzB4ODAsIDB4RjIsIDB4MDEsIDB4QzIsIDB4MDQsIDB4MDQsIDB4MUYsIDB4MDAsIDB4N0MsIDB4MDgsIDB4MzAsIDB4MDEsIDB4QzAsCisweDA3LCAweDA0LCAweDEzLCAweDAwLCAweDZDLCAweDAwLCAweEYwLCAweDAxLCAweEQwLCAweDA0LCAweDAwLCAweDFGLCAweDAwLAorMHg0QywgMHg4MCwgMHhCMCwgMHgwMSwgMHhDMCwgMHgwNiwgMHgwMCwgMHgxNywgMHgwMCwgMHg3QywgMHgwMCwgMHg3MCwgMHgwMCwKKzB4QzAsIDB4MDQsIDB4MDAsIDB4MUYsIDB4MDAsIDB4MEMsIDB4MDAsIDB4RjIsIDB4MDEsIDB4QzAsIDB4NDMsIDB4MjAsIDB4MDQsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDgwLCAweDE0LCAweDIwLCAweDVELCAweDAwLCAweEQwLCAweDExLAorMHg3MCwgMHgwNSwgMHg0MCwgMHg5QywgMHgwMCwgMHg3RCwgMHgxMSwgMHg3NCwgMHgwMSwgMHgwMCwgMHgzNywgMHhDMSwgMHg1RSwKKzB4MDAsIDB4NTEsIDB4MDUsIDB4NDAsIDB4MDUsIDB4RDAsIDB4MTcsIDB4NDAsIDB4NTQsIDB4MDAsIDB4NUQsIDB4MDAsIDB4NDQsCisweDAxLCAweDMwLCAweDA3LCAweDQwLCAweDE0LCAweDAwLCAweDUxLCAweDAwLCAweDc0LCAweDAxLCAweDUwLCAweDA1LCAweDUwLAorMHgxNCwgMHgxMCwgMHg1RCwgMHgyMSwgMHg1NCwgMHgwMSwgMHhEMCwgMHgxNSwgMHg0MCwgMHg1MywgMHgwMCwgMHgwMiwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4QTAsIDB4MzIsIDB4MDAsIDB4Q0QsIDB4MDAsIDB4MDQsIDB4MEQsIDB4NTAsCisweDBDLCAweDQwLCAweDMwLCAweDAwLCAweENELCAweDAwLCAweDM0LCAweDA2LCAweDEwLCAweDM0LCAweDUxLCAweDcxLCAweDAwLAorMHg4MSwgMHgwMSwgMHgzNCwgMHgyNiwgMHhEMCwgMHgxQywgMHg0MCwgMHg2MCwgMHgwMiwgMHhDRCwgMHgwMCwgMHgwNCwgMHgyMiwKKzB4MTAsIDB4ODUsIDB4NDAsIDB4MzIsIDB4MDAsIDB4Q0QsIDB4MDAsIDB4MzQsIDB4MDMsIDB4MTAsIDB4MEMsIDB4NDAsIDB4MzIsCisweDAwLCAweEM5LCAweDAxLCAweDA0LCAweDAzLCAweEQwLCAweDFDLCAweDYwLCAweDUzLCAweDAwLCAweDBBLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHg4OCwgMHgzOCwgMHgwMCwgMHhFRCwgMHgyMSwgMHg4NCwgMHgwMywgMHg1MCwgMHgxRSwKKzB4NDAsIDB4MzgsIDB4QTAsIDB4RUQsIDB4MDAsIDB4MzQsIDB4MEYsIDB4MTAsIDB4MDYsIDB4NDAsIDB4N0EsIDB4NDQsIDB4QTEsCisweDAxLCAweDk0LCAweDAzLCAweEQwLCAweDFFLCAweDQxLCAweDM4LCAweDAwLCAweENELCAweDA5LCAweDA0LCAweDAyLCAweDEwLAorMHgwNiwgMHg0MCwgMHgzMiwgMHgwMCwgMHhFOSwgMHgwMCwgMHhCNCwgMHgwNywgMHg1MCwgMHgwQSwgMHg0MCwgMHgyQSwgMHgwMCwKKzB4Q0QsIDB4MTEsIDB4OTQsIDB4MDIsIDB4RDAsIDB4MEUsIDB4NDEsIDB4MDcsIDB4MjAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDExLCAweDEwLCAweDc4LCAweDAwLCAweENGLCAweDAxLCAweDg1LCAweDA3LCAweDcwLCAweDFDLCAweEQwLAorMHg1OCwgMHgwMCwgMHgyRiwgMHgwMSwgMHhCQywgMHgwNywgMHgzNCwgMHgxNiwgMHhDMCwgMHg1RCwgMHgwMCwgMHhBMSwgMHgwMSwKKzB4QkMsIDB4MDcsIDB4RjAsIDB4MTcsIDB4QzAsIDB4NzgsIDB4MDAsIDB4RUUsIDB4MTEsIDB4OEQsIDB4MDYsIDB4MzksIDB4MTQsCisweEMwLCAweDVBLCAweDAwLCAweDZGLCAweDAxLCAweDNDLCAweDA1LCAweDcwLCAweDE0LCAweEMwLCAweDVBLCAweDAwLCAweDZELAorMHgwMSwgMHg4QywgMHgwNSwgMHhGMCwgMHgxNiwgMHhDNCwgMHg0NywgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MTAsIDB4QTgsIDB4MzUsIDB4MDAsIDB4REYsIDB4MDAsIDB4N0MsIDB4MDMsIDB4NzAsIDB4MEQsIDB4QzAsIDB4MDcsCisweDAwLCAweDFGLCAweDAwLCAweDdDLCAweDAzLCAweDc4LCAweDAxLCAweEM4LCAweDA3LCAweDAwLCAweDhGLCAweDAwLCAweDZDLAorMHgwMywgMHhGMCwgMHgwNSwgMHhDMCwgMHgzNywgMHgwMCwgMHhERiwgMHg4MiwgMHg3RSwgMHgwMiwgMHg3NCwgMHgwNywgMHhDNCwKKzB4MTUsIDB4MDAsIDB4NTcsIDB4MDAsIDB4N0MsIDB4MDEsIDB4QjQsIDB4MDEsIDB4QzAsIDB4MDUsIDB4MDAsIDB4NUYsIDB4MjAsCisweDZELCAweDAwLCAweEYwLCAweDA1LCAweEMwLCAweDQzLCAweDIwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgyMCwgMHg3RCwgMHgwMCwgMHhGRiwgMHgwMSwgMHg4QywgMHgxMywgMHg3MCwgMHgxRiwgMHhDMCwgMHg3RiwgMHgwMCwKKzB4RjMsIDB4MDEsIDB4Q0MsIDB4MDcsIDB4MzAsIDB4MTcsIDB4QzIsIDB4NkYsIDB4MTAsIDB4RjIsIDB4MDEsIDB4RkMsIDB4MDcsCisweEYwLCAweDFCLCAweEMwLCAweDdDLCAweDIwLCAweEY3LCAweDgxLCAweEZDLCAweDA2LCAweEYwLCAweDEzLCAweEMyLCAweDc5LAorMHgwMCwgMHhGMywgMHgwMSwgMHhGQywgMHgwNywgMHgzMCwgMHgxRiwgMHhDOCwgMHg3RiwgMHgwMCwgMHhCQiwgMHgwMSwgMHhDQywKKzB4ODcsIDB4MzAsIDB4MUIsIDB4QzAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTUsCisweDE4LCAweDM5LCAweDAwLCAweEVELCAweDA4LCAweDhDLCAweDAzLCAweDEwLCAweDBFLCAweDQwLCAweDFGLCAweDAwLCAweEUxLAorMHgwOCwgMHg4NCwgMHgwMywgMHgxNCwgMHgwMiwgMHg0MCwgMHgxQiwgMHgwMSwgMHhFMSwgMHgwMCwgMHhCNCwgMHgwMywgMHhEMCwKKzB4MEEsIDB4NDAsIDB4MzgsIDB4MDAsIDB4RTEsIDB4MTAsIDB4QjQsIDB4MTMsIDB4MTAsIDB4NDIsIDB4NDAsIDB4MzgsIDB4MDEsCisweEUxLCAweDAwLCAweDlDLCAweDAzLCAweDEwLCAweDRBLCAweDQwLCAweDJCLCAweDIwLCAweEExLCAweDAwLCAweEFDLCAweDAyLAorMHgxMCwgMHgwQSwgMHg0MCwgMHg1NCwgMHg2MCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MzksIDB4MDAsIDB4RUQsIDB4MTAsIDB4QTQsIDB4MjMsIDB4NTAsIDB4MEUsIDB4NDEsIDB4M0IsIDB4NDQsIDB4NjEsIDB4MDAsCisweDg0LCAweDAzLCAweDUwLCAweDA2LCAweDQwLCAweDJCLCAweDAwLCAweEUxLCAweDAwLCAweEI0LCAweDIzLCAweEQwLCAweDAyLAorMHg0MCwgMHgzOCwgMHgwMCwgMHhFNSwgMHgwMCwgMHgzNCwgMHgwMiwgMHg1MCwgMHgwMiwgMHg2MCwgMHgxOSwgMHgxMCwgMHg2MSwKKzB4MDAsIDB4QjQsIDB4MDEsIDB4OTAsIDB4MDYsIDB4NDQsIDB4MUYsIDB4MDIsIDB4MDEsIDB4MDAsIDB4ODQsIDB4MDEsIDB4MTAsCisweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDIwLCAweDMxLAorMHgyMCwgMHhDRCwgMHgwMywgMHgyNCwgMHgwMywgMHgxMCwgMHgwQywgMHg0MCwgMHgwMywgMHgwMCwgMHg1MSwgMHgwMCwgMHgwNCwKKzB4NEIsIDB4NTAsIDB4MDAsIDB4NDAsIDB4MDMsIDB4MDAsIDB4QzEsIDB4NDMsIDB4MzYsIDB4MDMsIDB4RDAsIDB4MDAsIDB4NDAsCisweDMwLCAweDAwLCAweEMxLCAweDAzLCAweDM0LCAweDBCLCAweDEwLCAweDAwLCAweDQwLCAweDkwLCAweDQwLCAweDQxLCAweDQyLAorMHgxNCwgMHgwMSwgMHg5MCwgMHgyMCwgMHg0MCwgMHg4MywgMHgyRSwgMHgwMSwgMHgwMiwgMHgyNCwgMHgwOCwgMHgxMCwgMHgwMCwKKzB4NDAsIDB4MTAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTUsIDB4QTgsIDB4MzUsIDB4MDAsCisweERGLCAweDAzLCAweDZELCAweDAzLCAweDcwLCAweDNELCAweEMwLCAweDY3LCAweDAwLCAweEQzLCAweDAwLCAweDRELCAweDBCLAorMHg3MCwgMHgwRCwgMHhDMiwgMHgzNywgMHg0MCwgMHg5MywgMHgwMSwgMHgzQywgMHgwMywgMHhGMCwgMHgwRCwgMHhEMCwgMHgzMCwKKzB4MDAsIDB4RjcsIDB4MjMsIDB4N0MsIDB4MEEsIDB4NzAsIDB4MDUsIDB4QzAsIDB4QTEsIDB4MDAsIDB4OTMsIDB4MDMsIDB4N0MsCisweDA2LCAweEIwLCAweDNELCAweEMwLCAweEY3LCAweDAwLCAweEQzLCAweEEzLCAweDRELCAweDhGLCAweDM0LCAweDFELCAweEQwLAorMHg1NCwgMHgyMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgzNywgMHgwMCwgMHhERiwKKzB4MDQsIDB4NUMsIDB4MEYsIDB4RjAsIDB4MEQsIDB4QzAsIDB4MzcsIDB4MDgsIDB4NUYsIDB4MDAsIDB4M0MsIDB4MDMsIDB4QjAsCisweDA5LCAweEMwLCAweDM3LCAweDIwLCAweDlGLCAweDA4LCAweDdDLCAweDgzLCAweEYwLCAweDA1LCAweEMwLCAweDM3LCAweDAwLAorMHhDRiwgMHgwNCwgMHg3QywgMHgwMiwgMHg3MCwgMHgyMCwgMHhDMCwgMHgyNywgMHgwNCwgMHg4RiwgMHgxMSwgMHgxQywgMHg0NiwKKzB4NzQsIDB4MTksIDB4QzEsIDB4MjcsIDB4MDAsIDB4RDcsIDB4MDEsIDB4NUMsIDB4MDYsIDB4RjAsIDB4MUQsIDB4QzAsIDB4MDcsCisweDAwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDg0LCAweDA4LCAweDNGLCAweDAwLCAweERGLCAweDAwLAorMHhGQywgMHgwMywgMHhGMCwgMHgwRSwgMHhDMSwgMHgwQywgMHgwOCwgMHhCRiwgMHgwMywgMHg0QywgMHgwMywgMHgzMCwgMHgwRSwKKzB4RDAsIDB4MTQsIDB4MDAsIDB4QkYsIDB4MTksIDB4Q0MsIDB4MTcsIDB4MzAsIDB4ODksIDB4QzAsIDB4MzQsIDB4MDAsIDB4RjcsCisweDAwLCAweENDLCAweDQyLCAweEYwLCAweDA1LCAweEMwLCAweDhFLCAweDAwLCAweDM3LCAweDA4LCAweDY4LCAweDIwLCAweDMwLAorMHgwNywgMHhDMCwgMHgxRiwgMHgwMCwgMHg3RiwgMHgxMCwgMHg3QywgMHg0MSwgMHhGMCwgMHgwNywgMHhDMCwgMHgxMywgMHgyMiwKKzB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODUsIDB4MDAsIDB4MzYsIDB4MDAsIDB4REQsIDB4MDAsIDB4NzQsCisweDBGLCAweEQwLCAweDBELCAweEMwLCAweDQ2LCAweDAwLCAweDFELCAweDAxLCAweDQ0LCAweDI3LCAweDEwLCAweDMxLCAweDQwLAorMHgwNCwgMHgwMCwgMHg4RCwgMHgwMSwgMHg0NCwgMHgwNywgMHgxMCwgMHgwMSwgMHg0MCwgMHgzNCwgMHgwMCwgMHhEQiwgMHgwMCwKKzB4NDQsIDB4MDIsIDB4RDAsIDB4MTksIDB4NDAsIDB4NDQsIDB4MDAsIDB4MTEsIDB4MDAsIDB4NDQsIDB4MDAsIDB4MTAsIDB4MDEsCisweDQwLCAweDA3LCAweDAwLCAweDVELCAweDAwLCAweDc0LCAweDAwLCAweEQwLCAweDA1LCAweDQwLCAweDE3LCAweDAyLCAweDA4LAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHhBMCwgMHgzNCwgMHgwMCwgMHhERCwgMHgwMCwgMHg3NCwgMHgwRiwKKzB4RDAsIDB4MEQsIDB4NDAsIDB4MjQsIDB4MDEsIDB4OUQsIDB4MTAsIDB4NTQsIDB4MDMsIDB4MTQsIDB4MUQsIDB4NDAsIDB4MjQsCisweDIwLCAweDlELCAweDAwLCAweDQ2LCAweDAzLCAweDEwLCAweDBDLCAweDQxLCAweDM2LCAweDAyLCAweEQwLCAweDAwLCAweDQ0LAorMHgwMiwgMHhEOCwgMHgxMSwgMHg0MCwgMHgyNywgMHgwMCwgMHg5NSwgMHgwMCwgMHg3NCwgMHgwMiwgMHg1MCwgMHgwRCwgMHg0MCwKKzB4MzcsIDB4MDAsIDB4OTgsIDB4MDAsIDB4NzQsIDB4MDMsIDB4RDAsIDB4MDksIDB4NDAsIDB4MDcsIDB4MDAsIDB4MDIsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDI4LCAweDMwLCAweDgwLCAweENELCAweDAwLCAweDM0LCAweDAzLCAweEQwLAorMHgwQywgMHg1MCwgMHgxMiwgMHgwMCwgMHgwRCwgMHgwMCwgMHgxNCwgMHgwMywgMHgxMCwgMHgwOCwgMHg0MCwgMHgxMCwgMHgwMCwKKzB4OUQsIDB4MDAsIDB4MDQsIDB4MDMsIDB4MTAsIDB4MDQsIDB4NDgsIDB4MzAsIDB4MDAsIDB4QzksIDB4MDAsIDB4MDQsIDB4MDMsCisweEQwLCAweDAwLCAweDQwLCAweDI1LCAweDAwLCAweDgxLCAweDAwLCAweDE1LCAweDAyLCAweDU0LCAweDA4LCAweDQwLCAweDIzLAorMHg4MCwgMHg4RCwgMHgwMCwgMHgzNCwgMHgwMiwgMHhEMCwgMHgwOCwgMHg0MCwgMHg0MywgMHhBMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4QjAsIDB4MzYsIDB4MDAsIDB4REYsIDB4MDAsIDB4N0MsIDB4MDMsIDB4RjAsIDB4MEQsCisweEMwLCAweDI0LCAweDAwLCAweDhGLCAweDAwLCAweDVELCAweDAzLCAweDE0LCAweDA1LCAweEMwLCAweDI0LCAweDIwLCAweDlFLAorMHgwMCwgMHg0RCwgMHgwMywgMHgzNCwgMHgwOSwgMHhEMCwgMHgzNCwgMHgwMCwgMHhGNywgMHgwMCwgMHg0RCwgMHgwMiwgMHhGMCwKKzB4MDEsIDB4QzAsIDB4MDcsIDB4MDAsIDB4MTcsIDB4MDAsIDB4N0MsIDB4MDAsIDB4NzAsIDB4MDUsIDB4QzgsIDB4MTcsIDB4MTAsCisweDFGLCAweDAwLCAweDdDLCAweDAxLCAweEYwLCAweDAxLCAweEMwLCAweDAzLCAweEMwLCAweDBBLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwNSwgMHhBOCwgMHgzRiwgMHgyMCwgMHhGRiwgMHgwMCwgMHhGQywgMHgwMiwgMHhGMCwgMHgwRiwgMHhDMCwKKzB4MEQsIDB4MDAsIDB4M0YsIDB4MDAsIDB4RUMsIDB4MDMsIDB4RjAsIDB4MDMsIDB4QzAsIDB4MEYsIDB4MDAsIDB4QkYsIDB4MDAsCisweEZDLCAweDAzLCAweEYwLCAweDAzLCAweEMwLCAweDNGLCAweDAwLCAweEZGLCAweDAwLCAweEZDLCAweDAzLCAweEYwLCAweDBCLAorMHhDMCwgMHgwRSwgMHgwMCwgMHgzRiwgMHgyMCwgMHhFQywgMHgwMCwgMHhCMCwgMHgwMywgMHhDMCwgMHgwQiwgMHgwMCwgMHgzRiwKKzB4NDAsIDB4RkMsIDB4MDAsIDB4RjAsIDB4MDMsIDB4QzAsIDB4MTcsIDB4MjAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAzLCAweEEwLCAweDJGLCAweDAwLCAweEJGLCAweDAwLCAweENDLCAweDAzLCAweEIwLCAweDFCLCAweEMwLCAweDJGLAorMHgyMSwgMHhGMywgMHgyNCwgMHhFQywgMHgyNSwgMHhGMCwgMHgxRiwgMHhEMCwgMHgzQywgMHgwMCwgMHhGQiwgMHg4OCwgMHhDQywKKzB4ODQsIDB4QjAsIDB4NEYsIDB4QzAsIDB4N0YsIDB4MjIsIDB4MkYsIDB4MDEsIDB4RjQsIDB4MDUsIDB4MzAsIDB4MEIsIDB4QzEsCisweEVGLCAweDAwLCAweDJGLCAweDAxLCAweEVDLCAweDA0LCAweDMwLCAweDEyLCAweEMwLCAweDVFLCAweDA4LCAweDJGLCAweDAxLAorMHhDRSwgMHgwRCwgMHgzMCwgMHgwQiwgMHhDMCwgMHgwRCwgMHgwMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDEsIDB4MDAsIDB4MjcsIDB4MTAsIDB4OUQsIDB4MDEsIDB4NDQsIDB4MEYsIDB4MTAsIDB4MTUsIDB4NDAsIDB4NjcsIDB4MDAsCisweEQxLCAweDE0LCAweDQ0LCAweDAyLCAweEQwLCAweDRELCAweDQwLCAweEJDLCAweDA0LCAweEYxLCAweDBFLCAweDQ0LCAweDA3LAorMHgxMCwgMHhCRiwgMHg0MCwgMHgzNywgMHgwMCwgMHgxNywgMHg5NCwgMHg2NCwgMHgwNSwgMHgxMCwgMHgzOSwgMHg0MCwgMHgzNywKKzB4MTEsIDB4NUQsIDB4MjEsIDB4NDQsIDB4MDUsIDB4NTEsIDB4MTksIDB4NDAsIDB4NzUsIDB4MzAsIDB4MUQsIDB4MjEsIDB4NDYsCisweDAyLCAweDEwLCAweDExLCAweEMwLCAweDBELCAweDIwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDExLAorMHhBMCwgMHgyMywgMHgwMCwgMHgwRCwgMHg4MCwgMHgwNSwgMHgwQiwgMHhEOCwgMHgwOCwgMHg0MCwgMHgyMywgMHgwMiwgMHhDMSwKKzB4MEMsIDB4MjQsIDB4MDIsIDB4NTAsIDB4MDgsIDB4NDEsIDB4QjAsIDB4ODEsIDB4QzksIDB4MDQsIDB4NTQsIDB4MDcsIDB4OTAsCisweDBDLCAweDQwLCAweDMzLCAweDExLCAweDBELCAweDAwLCAweDc0LCAweDAwLCAweDEwLCAweDBDLCAweDQ0LCAweDMxLCAweDAxLAorMHg0OSwgMHgwMCwgMHgyNCwgMHgwMCwgMHgxMiwgMHgwRCwgMHg0NCwgMHgzMSwgMHgwMCwgMHgxRCwgMHg0MCwgMHg2NCwgMHgxMywKKzB4OTAsIDB4MDgsIDB4NDAsIDB4NEQsIDB4ODAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4QTgsCisweDY1LCAweDAwLCAweDlELCAweDExLCAweDQ0LCAweDAzLCAweDE4LCAweDY1LCAweDQwLCAweDI3LCAweDAwLCAweEQxLCAweDAwLAorMHg0MiwgMHgwMiwgMHhEMCwgMHgwOCwgMHg0MCwgMHgzNCwgMHgwOCwgMHhDMSwgMHgwMCwgMHg1NSwgMHgwMywgMHgxMCwgMHgwRCwKKzB4NDAsIDB4MzcsIDB4MDAsIDB4OUQsIDB4MTEsIDB4NjQsIDB4MDAsIDB4MUMsIDB4MEQsIDB4NDAsIDB4MzcsIDB4MTAsIDB4NUQsCisweDExLCAweDQ0LCAweDQ1LCAweDUwLCAweDg5LCAweDAwLCAweDc1LCAweDAwLCAweDFELCAweDEwLCAweDY0LCAweDQzLCAweDk2LAorMHgxMSwgMHg0MCwgMHgwRCwgMHgyMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhBMCwgMHg0NywKKzB4MDQsIDB4OUYsIDB4MjEsIDB4NDQsIDB4MDMsIDB4RjIsIDB4MDUsIDB4QzAsIDB4MzMsIDB4NDAsIDB4RDMsIDB4MDAsIDB4NkMsCisweDAzLCAweEYxLCAweDBELCAweEMwLCAweDM0LCAweDAwLCAweERCLCAweDAwLCAweDU0LCAweDA0LCAweEIwLCAweDBELCAweEMwLAorMHgzNywgMHgwMCwgMHgxRiwgMHgwMSwgMHg3QywgMHgxNCwgMHgzMCwgMHgwOSwgMHhDMCwgMHgzNSwgMHgwMCwgMHg1QiwgMHgwMSwKKzB4MkMsIDB4MEQsIDB4MzAsIDB4MzEsIDB4ODIsIDB4NzcsIDB4MDEsIDB4MUQsIDB4MjIsIDB4NjQsIDB4MEYsIDB4QjEsIDB4MzEsCisweEMxLCAweDgxLCAweDAwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA3LCAweDg4LCAweDJELCAweDAwLAorMHhBRiwgMHgwMCwgMHhCQywgMHgwMywgMHhGMCwgMHgwNywgMHhDMCwgMHgzRiwgMHgwMiwgMHhFRiwgMHg4MCwgMHhGQywgMHg4MiwKKzB4RjAsIDB4OEYsIDB4QzAsIDB4M0YsIDB4MDAsIDB4RkYsIDB4MDAsIDB4RUMsIDB4QTAsIDB4RjAsIDB4MEYsIDB4QzIsIDB4M0YsCisweDEwLCAweDM3LCAweDAwLCAweEVDLCAweEE0LCAweDcwLCAweDlCLCAweEMwLCAweDNGLCAweDAwLCAweDdGLCAweDAwLCAweEZDLAorMHgwMSwgMHhGMCwgMHgxMywgMHhDMCwgMHgyRiwgMHgwMCwgMHgzRiwgMHgwOCwgMHhERCwgMHgyNywgMHg3MCwgMHgwMywgMHhDMCwKKzB4MUYsIDB4MjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDgsIDB4MDUsIDB4MDIsIDB4MTMsCisweDEwLCAweDdFLCAweDIzLCAweEIwLCAweDA1LCAweEMwLCAweDM3LCAweDAzLCAweERGLCAweDgwLCAweDdDLCAweDAzLCAweEYxLAorMHgwOSwgMHhDMCwgMHgzNSwgMHg4MCwgMHhERiwgMHgwOCwgMHg0QywgMHg4MCwgMHg3MCwgMHgwRCwgMHhDMSwgMHgzNywgMHgwMCwKKzB4OTMsIDB4MDIsIDB4NUMsIDB4MDgsIDB4RjgsIDB4MEQsIDB4QzIsIDB4MzcsIDB4MDAsIDB4NUYsIDB4MEUsIDB4NzgsIDB4MUIsCisweDcwLCAweDI1LCAweEM0LCAweEE1LCAweDAwLCAweDUzLCAweDAwLCAweDZDLCAweDRCLCAweDMxLCAweDA5LCAweEM0LCAweDBCLAorMHgyMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMywgMHhBMCwgMHhFNCwgMHgwMiwgMHg5MSwgMHgwMCwKKzB4RjQsIDB4MDcsIDB4MTAsIDB4MDUsIDB4NDEsIDB4NzcsIDB4MDAsIDB4RkQsIDB4MDAsIDB4NDQsIDB4MDIsIDB4RDAsIDB4MTksCisweEM4LCAweDNFLCAweDIwLCAweEZGLCAweDAwLCAweDAwLCAweDJDLCAweDEwLCAweDFGLCAweDQwLCAweDM3LCAweDAwLCAweDkxLAorMHgwMCwgMHgwNCwgMHgwMCwgMHhGMCwgMHgwRCwgMHg0MCwgMHgzNywgMHgwMCwgMHg0QywgMHgwMSwgMHg0NCwgMHgwNSwgMHhCMCwKKzB4MDQsIDB4NDAsIDB4MjQsIDB4MDAsIDB4NEIsIDB4MDQsIDB4MjQsIDB4ODMsIDB4MTQsIDB4NzEsIDB4NDAsIDB4NkYsIDB4MDAsCisweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweDIwLCAweDQwLCAweDAwLCAweDAxLCAweDAwLCAweDM0LAorMHg4MywgMHgxNCwgMHgzQywgMHg0MSwgMHhBMywgMHgxMCwgMHhDRCwgMHgwMCwgMHgxNCwgMHgwMSwgMHhEMCwgMHg5QywgMHg0MCwKKzB4MzUsIDB4MDgsIDB4Q0QsIDB4MDEsIDB4MDQsIDB4MDgsIDB4NTAsIDB4QkMsIDB4NjAsIDB4MzIsIDB4MDAsIDB4MDUsIDB4MDAsCisweDE0LCAweDAxLCAweEQwLCAweDY4LCAweDQwLCAweDIzLCAweDAwLCAweDQ5LCAweDAzLCAweDE0LCAweDhDLCAweEQxLCAweEI0LAorMHg0MSwgMHgzMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgyMywgMHgxMCwgMHg0OCwgMHg0MCwgMHgwRiwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4NTgsIDB4MDAsIDB4NjEsIDB4MDEsIDB4QjQsIDB4MDcsCisweDEwLCAweDE2LCAweDQwLCAweDZCLCAweDAwLCAweEVELCAweDAxLCAweDk2LCAweDA2LCAweEQwLCAweDFFLCAweDQwLCAweDdBLAorMHgwMCwgMHhDNSwgMHg0MSwgMHg4NCwgMHg0NywgMHgxMCwgMHgxRSwgMHg2OCwgMHg3QiwgMHgwMCwgMHhGMSwgMHgwMCwgMHg4NCwKKzB4MDUsIDB4NTAsIDB4OUEsIDB4NDAsIDB4N0IsIDB4MDIsIDB4N0QsIDB4MDEsIDB4QzQsIDB4MTQsIDB4OTAsIDB4MUEsIDB4NDgsCisweDc5LCAweDIwLCAweDM5LCAweDA5LCAweDg1LCAweDI3LCAweDE1LCAweDFBLCAweDQwLCAweDNGLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHgxOCwgMHgzNCwgMHgwMiwgMHg0MywgMHgwNCwgMHgzNCwgMHgwMywgMHgxMCwKKzB4MEMsIDB4QzAsIDB4MzMsIDB4MTAsIDB4REYsIDB4MDAsIDB4MUMsIDB4MDIsIDB4RjAsIDB4MEMsIDB4QzAsIDB4MzEsIDB4MDAsCisweENELCAweDAwLCAweDBDLCAweDAzLCAweDcwLCAweENDLCAweEMwLCAweDM3LCAweDQyLCAweDA1LCAweDAwLCAweDFDLCAweDExLAorMHhEMCwgMHgwOCwgMHhDMCwgMHgzMywgMHgwMCwgMHg0QiwgMHgwMCwgMHgxQywgMHg0MCwgMHhGMCwgMHg4QywgMHhDMCwgMHgzMSwKKzB4MDIsIDB4QzMsIDB4MDAsIDB4NkMsIDB4MjMsIDB4MzAsIDB4ODgsIDB4RTAsIDB4NEIsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAyLCAweDM4LCAweDNELCAweDQwLCAweDdGLCAweDAwLCAweEJDLCAweDAzLCAweDcwLCAweDA3LAorMHhDMCwgMHgzRiwgMHgwMiwgMHhGRiwgMHgwMCwgMHhDQywgMHgwMiwgMHhGMCwgMHgwQywgMHhDMCwgMHhCRiwgMHgyMCwgMHhERiwKKzB4MDAsIDB4M0MsIDB4MDMsIDB4QzAsIDB4OEYsIDB4QzgsIDB4MzcsIDB4MDgsIDB4RkYsIDB4OEMsIDB4N0MsIDB4MDEsIDB4RjAsCisweDA5LCAweEMwLCAweDNGLCAweDAwLCAweEZGLCAweDQ4LCAweDFDLCAweDExLCAweEYwLCAweDg5LCAweEMwLCAweDNBLCAweDAwLAorMHhCRiwgMHgwMCwgMHhGQywgMHgyMywgMHhGMiwgMHgwRiwgMHhDMCwgMHgwQiwgMHg2MCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MTAsIDB4QTAsIDB4MTcsIDB4MDAsIDB4REYsIDB4MDEsIDB4NkMsIDB4MDMsIDB4RjAsIDB4MEQsIDB4QzAsCisweDI3LCAweDAwLCAweERGLCAweDAwLCAweDdDLCAweDAzLCAweEYwLCAweDBDLCAweEM0LCAweDc0LCAweDAzLCAweEQxLCAweDBFLAorMHg3QywgMHg4MCwgMHg3MCwgMHg2RCwgMHhFMCwgMHgzNywgMHgwMCwgMHhENywgMHgwMCwgMHg3QywgMHgwMCwgMHg3MCwgMHgxRCwKKzB4QzAsIDB4MzYsIDB4MDAsIDB4NUIsIDB4MDAsIDB4N0MsIDB4MDQsIDB4QjAsIDB4MDUsIDB4QzAsIDB4MzcsIDB4MDAsIDB4OTcsCisweDAwLCAweDRDLCAweDAzLCAweDM0LCAweDAxLCAweEMwLCAweDQzLCAweDAwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgxMiwgMHg4MCwgMHgxOSwgMHgwMCwgMHhFRCwgMHgwMCwgMHg4NCwgMHgwQiwgMHhDMCwgMHgwNiwgMHg0MCwgMHhBQiwKKzB4MjAsIDB4RUQsIDB4MDQsIDB4QjQsIDB4MDIsIDB4RDAsIDB4MEUsIDB4NDAsIDB4MzEsIDB4MDAsIDB4RTEsIDB4MTAsIDB4QjQsCisweDAzLCAweEQwLCAweEVFLCAweEMwLCAweDM5LCAweDAwLCAweEVELCAweDAwLCAweEI0LCAweDAwLCAweEQwLCAweDRFLCAweDQwLAorMHgzOCwgMHgwMCwgMHg2MSwgMHgwMCwgMHhBNCwgMHgwMCwgMHgxMCwgMHgwRSwgMHg2MCwgMHgzQiwgMHgwMCwgMHgyRCwgMHgwMCwKKzB4OEQsIDB4MDMsIDB4QjAsIDB4MDYsIDB4NDAsIDB4NEYsIDB4MDAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDA0LCAweDAwLCAweDc5LCAweDAwLCAweEVELCAweDAxLCAweDg1LCAweDE3LCAweDUwLCAweDFFLCAweDQxLCAweDdCLCAweDAxLAorMHhFRCwgMHgwOSwgMHhCNCwgMHgwNywgMHg1MCwgMHgxRSwgMHg0MCwgMHg3OCwgMHg0MSwgMHhFMSwgMHgwNSwgMHg5NCwgMHg0NywKKzB4NTAsIDB4MUUsIDB4MDIsIDB4N0IsIDB4MTAsIDB4RUQsIDB4MDEsIDB4QjQsIDB4MDQsIDB4RDIsIDB4REMsIDB4MDAsIDB4N0EsCisweDI0LCAweDZELCAweDAxLCAweEQ2LCAweDBELCAweEQ4LCAweDFFLCAweDQwLCAweDdCLCAweDA0LCAweEU1LCAweDAxLCAweEY0LAorMHgwNywgMHgxMCwgMHgxQSwgMHg2MCwgMHgxMywgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNiwKKzB4MjgsIDB4MzMsIDB4MDAsIDB4Q0QsIDB4MUEsIDB4MDQsIDB4MDMsIDB4RDAsIDB4MTQsIDB4NDAsIDB4NzMsIDB4MDIsIDB4Q0QsCisweDAwLCAweDM0LCAweDAyLCAweEQwLCAweDBDLCAweDQwLCAweDMxLCAweDAwLCAweEMxLCAweDAwLCAweDM0LCAweDEzLCAweEQwLAorMHgwQywgMHg0OCwgMHgzMCwgMHgwMCwgMHhERCwgMHgwMSwgMHgzNCwgMHgwNiwgMHhEMCwgMHg4QywgMHg0MCwgMHgzMCwgMHgwMCwKKzB4NDUsIDB4MDgsIDB4MzQsIDB4MEQsIDB4RDAsIDB4OEMsIDB4NDAsIDB4NzMsIDB4MDAsIDB4Q0QsIDB4MDEsIDB4MDQsIDB4MDMsCisweDE3LCAweDBDLCAweDQwLCAweDVCLCAweDIwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE3LCAweEEwLAorMHgxRCwgMHgwNiwgMHg3RCwgMHgwMywgMHg2QywgMHgwMSwgMHhGMCwgMHgxNywgMHhDMCwgMHgxNywgMHgwMCwgMHg1RiwgMHgwMCwKKzB4RjQsIDB4MkQsIDB4NzAsIDB4MDQsIDB4QzQsIDB4MTQsIDB4MTAsIDB4NTMsIDB4ODAsIDB4RkMsIDB4MEQsIDB4NzEsIDB4MDUsCisweEMwLCAweDE3LCAweDAwLCAweDdGLCAweDA3LCAweEZDLCAweDE5LCAweEYwLCAweDE1LCAweEMwLCAweDU2LCAweDAwLCAweDZGLAorMHgwMiwgMHhGQywgMHgwNSwgMHhGMCwgMHgyNywgMHhDOCwgMHgxRiwgMHgyMCwgMHg2NywgMHgwNywgMHhGQywgMHgwMSwgMHgxMCwKKzB4OTcsIDB4QzIsIDB4NUYsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4MDgsIDB4MDUsCisweDAwLCAweDFGLCAweDAwLCAweDdDLCAweDAwLCAweEYwLCAweDIxLCAweEMxLCAweDg3LCAweDAwLCAweDFGLCAweDgwLCAweDdDLAorMHgyMCwgMHhGMiwgMHgwMSwgMHhDMCwgMHgwNywgMHgwMCwgMHgxQiwgMHgwMCwgMHg3QywgMHgwOCwgMHhGMCwgMHgyMSwgMHhDMCwKKzB4MDUsIDB4MDAsIDB4MUYsIDB4MDQsIDB4N0MsIDB4MDAsIDB4RjAsIDB4MDEsIDB4QzAsIDB4MDcsIDB4MDAsIDB4MTksIDB4NTAsCisweDZDLCAweDE4LCAweDEwLCAweDIxLCAweEMxLCAweEM3LCAweDA4LCAweDFCLCAweDMwLCAweDdFLCAweDBDLCAweEYwLCAweDgxLAorMHhDMCwgMHg0QiwgMHgyMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHg2NSwgMHgwMCwKKzB4OUYsIDB4NDQsIDB4N0UsIDB4MEEsIDB4RjAsIDB4MDksIDB4RDAsIDB4NjQsIDB4MTAsIDB4OUYsIDB4MDAsIDB4N0MsIDB4MDYsCisweDMwLCAweDA5LCAweEQwLCAweDI0LCAweDgwLCAweDlGLCAweDAwLCAweDdDLCAweDAyLCAweEYwLCAweDA5LCAweEMyLCAweDI3LAorMHgwMCwgMHg5MywgMHhDMCwgMHg0QywgMHg0MiwgMHhGMCwgMHgyOSwgMHhDMCwgMHgyNiwgMHgwMCwgMHg5MywgMHg4MCwgMHg1QywKKzB4MEEsIDB4RjAsIDB4MTksIDB4QzAsIDB4NjUsIDB4MDAsIDB4OUYsIDB4MDAsIDB4NUMsIDB4MjYsIDB4MzAsIDB4MjksIDB4QzAsCisweDQzLCAweDIwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDIwLCAweDI2LCAweDAyLCAweDlELAorMHg0NywgMHg3NCwgMHgwNiwgMHhEMCwgMHg0OCwgMHg0MCwgMHhFQywgMHgxMCwgMHg5RCwgMHgwMCwgMHgzNCwgMHgyNiwgMHgxMCwKKzB4MDksIDB4QzAsIDB4MjYsIDB4MTAsIDB4OUQsIDB4MDIsIDB4NzQsIDB4MUEsIDB4RDAsIDB4MDksIDB4NDQsIDB4MjcsIDB4MDAsCisweDkxLCAweDQwLCAweDRDLCAweDAyLCAweDc4LCAweDFCLCAweDQwLCAweDIzLCAweDAwLCAweDkxLCAweDEwLCAweDQ0LCAweDBFLAorMHhEMCwgMHgwOCwgMHg0MiwgMHgyMCwgMHgxMCwgMHg5QiwgMHg0MCwgMHgwQywgMHgxRSwgMHg1NCwgMHgwOSwgMHhDMCwgMHgwNywKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4QTAsIDB4MjQsIDB4MDAsIDB4OUQsIDB4MDAsCisweDc0LCAweDAyLCAweEQwLCAweDA5LCAweDQwLCAweDI0LCAweDAyLCAweDlELCAweDAwLCAweDc0LCAweDAyLCAweDEwLCAweDA5LAorMHg0MCwgMHgyNCwgMHgwMCwgMHg5OSwgMHgxMCwgMHg3NCwgMHgwMiwgMHhEMCwgMHgyOSwgMHg0MCwgMHgyMywgMHgwMCwgMHg5MSwKKzB4MDAsIDB4NjQsIDB4MDIsIDB4RDEsIDB4MjksIDB4NDAsIDB4MjcsIDB4MDAsIDB4OTEsIDB4MDEsIDB4NTQsIDB4MDIsIDB4NTAsCisweDRELCAweDQwLCAweDI1LCAweDAyLCAweDk0LCAweDAwLCAweDc0LCAweDAyLCAweDEwLCAweDA5LCAweDQwLCAweDYzLCAweDAwLAorMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgyMCwgMHgzMCwgMHgwNSwgMHg4RCwgMHgxNCwgMHgzNCwKKzB4MDIsIDB4RDAsIDB4MDksIDB4NDAsIDB4MjAsIDB4MDAsIDB4OEQsIDB4MDgsIDB4NzQsIDB4MEEsIDB4MTAsIDB4MjgsIDB4NDAsCisweDIyLCAweDAyLCAweDhELCAweDA4LCAweDM0LCAweDAyLCAweEQwLCAweDA4LCAweDQwLCAweDIzLCAweDAyLCAweDgxLCAweDA4LAorMHgwNCwgMHgwMiwgMHhEMCwgMHgwOCwgMHg0MCwgMHgyNywgMHgwMiwgMHg5MSwgMHg0MCwgMHgwNCwgMHgwMiwgMHhEMiwgMHgwOSwKKzB4NDAsIDB4MjQsIDB4MDAsIDB4OTksIDB4MDAsIDB4NDYsIDB4MjIsIDB4NTEsIDB4NDgsIDB4NDQsIDB4NDMsIDB4ODAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFELCAweEI4LCAweDA2LCAweDAxLCAweDFGLCAweDA0LCAweDc0LCAweEQwLAorMHhGMCwgMHgwMSwgMHhDMCwgMHg1NCwgMHgxMCwgMHgxRiwgMHgxNiwgMHg3RSwgMHgwMCwgMHgzNCwgMHgwMSwgMHg0MCwgMHg4NCwKKzB4MDUsIDB4MTksIDB4OTYsIDB4N0MsIDB4MDAsIDB4RjAsIDB4NDEsIDB4QzEsIDB4ODcsIDB4MDAsIDB4MTMsIDB4MDIsIDB4NkQsCisweDgwLCAweEQwLCAweDExLCAweDQwLCAweDgzLCAweDQwLCAweDEzLCAweDAwLCAweDU0LCAweDAxLCAweDcwLCAweDA1LCAweEMwLAorMHgxNSwgMHgwMCwgMHgxNywgMHgwMCwgMHg3QywgMHgwOCwgMHgzMCwgMHgwNSwgMHhDMCwgMHg3NywgMHhFMCwgMHgwQSwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MUQsIDB4QjAsIDB4MkYsIDB4MjUsIDB4QUYsIDB4MjAsIDB4N0MsIDB4MDIsIDB4RjAsCisweDBCLCAweEM4LCAweEFGLCAweDAwLCAweDlELCAweDA0LCAweEZDLCAweDA3LCAweEYwLCAweDFCLCAweEMwLCAweDI3LCAweDA5LAorMHg5RiwgMHgwNCwgMHhGQywgMHgwMiwgMHhGMiwgMHgwOSwgMHhDMiwgMHgyNywgMHg0MSwgMHhCRiwgMHgwNCwgMHhGQywgMHgwMiwKKzB4NTAsIDB4MkIsIDB4QzAsIDB4MkYsIDB4MDEsIDB4QkYsIDB4MDAsIDB4QjQsIDB4MDIsIDB4RjIsIDB4MEIsIDB4QzAsIDB4MkYsCisweDAwLCAweEE3LCAweDAwLCAweEJDLCAweDEyLCAweEY0LCAweDhCLCAweEMwLCAweDc1LCAweDYwLCAweDBFLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgxQywgMHhBMCwgMHgyRiwgMHgwNSwgMHhCRiwgMHgwNCwgMHhGQywgMHgwMiwgMHhGMCwgMHgwQiwKKzB4RDAsIDB4NkMsIDB4MDQsIDB4OTEsIDB4MjQsIDB4RkMsIDB4MEEsIDB4RjAsIDB4MkIsIDB4RDAsIDB4MjQsIDB4MDAsIDB4QkYsCisweDAwLCAweDlFLCAweDAyLCAweEYwLCAweDRCLCAweEMwLCAweDI2LCAweDAwLCAweDlGLCAweDA4LCAweDdDLCAweDgyLCAweDM0LAorMHg1QiwgMHhEMSwgMHgyNCwgMHgwMiwgMHhCRiwgMHgwMCwgMHhFQywgMHgwMiwgMHhGMiwgMHgwQiwgMHhDMCwgMHgyRSwgMHg4MCwKKzB4QTcsIDB4MDAsIDB4Q0UsIDB4ODMsIDB4MzAsIDB4MEIsIDB4QzAsIDB4NzQsIDB4MDAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDE4LCAweDAwLCAweDA3LCAweDExLCAweDFELCAweDA4LCAweDc0LCAweDA4LCAweEQwLCAweDAxLCAweDQwLAorMHg4NCwgMHgwMCwgMHgxMSwgMHgxNCwgMHg3NCwgMHgwNCwgMHhEMCwgMHg1MSwgMHg0MCwgMHg4NCwgMHgwNCwgMHgwRCwgMHgxMCwKKzB4NzYsIDB4MDAsIDB4RDEsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDEsIDB4MUQsIDB4MDQsIDB4NzQsIDB4MDAsIDB4MTksIDB4MjEsCisweDQwLCAweDA0LCAweDAwLCAweDE5LCAweDAwLCAweDVDLCAweDAwLCAweEQyLCAweDAxLCAweDQwLCAweDA0LCAweDEwLCAweDFELAorMHgwMCwgMHgwNSwgMHgwMCwgMHhCNCwgMHgwMSwgMHg0MCwgMHg2MCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MTIsIDB4MDAsIDB4MjEsIDB4MDUsIDB4OEQsIDB4MDAsIDB4MzQsIDB4MjIsIDB4RDAsIDB4MDksIDB4NDAsIDB4MjAsCisweDAwLCAweDgxLCAweDBDLCAweDM0LCAweDAyLCAweEQwLCAweDQ4LCAweDQwLCAweDIwLCAweDgzLCAweDhELCAweDA4LCAweDE0LAorMHgwMiwgMHhEMywgMHg4OCwgMHgwMCwgMHgyMiwgMHgwNSwgMHg4RCwgMHgwNCwgMHg3NCwgMHgwMiwgMHgxMCwgMHgwOCwgMHg0MCwKKzB4MjAsIDB4MTAsIDB4OEQsIDB4MDAsIDB4MzYsIDB4ODIsIDB4RDAsIDB4MDgsIDB4NDAsIDB4MjIsIDB4MDAsIDB4OTUsIDB4MDAsCisweDU0LCAweDAyLCAweDE0LCAweDBDLCAweDQwLCAweDQ4LCAweDgwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgxOCwgMHgyQSwgMHgyNSwgMHg4NiwgMHg5RCwgMHgyMCwgMHg3NCwgMHgwMiwgMHhEMiwgMHgwOSwgMHg0MCwgMHgyNCwgMHgwMCwKKzB4OTEsIDB4MjAsIDB4NzQsIDB4MDIsIDB4RDAsIDB4MUQsIDB4NDAsIDB4MjQsIDB4MDAsIDB4OUQsIDB4NDAsIDB4NzQsIDB4NDIsCisweEQwLCAweDA5LCAweDQwLCAweDI0LCAweDAwLCAweDlELCAweDAyLCAweDc0LCAweDAyLCAweDEwLCAweDA5LCAweDQ0LCAweDI0LAorMHgwMSwgMHg5RCwgMHgwMiwgMHg1NSwgMHgwQiwgMHhEMSwgMHg4OSwgMHg0MCwgMHhFNCwgMHgwMCwgMHg5RCwgMHgwMywgMHg1NCwKKzB4MkEsIDB4OTAsIDB4MkQsIDB4NDAsIDB4NjAsIDB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsCisweDAyLCAweDI1LCAweDEwLCAweDlGLCAweDEyLCAweDdDLCAweDAyLCAweEYwLCAweDA5LCAweEMwLCAweDI0LCAweDAwLCAweDkzLAorMHgwMCwgMHhGQywgMHgyMiwgMHhGMCwgMHgwOSwgMHhDMCwgMHgyNCwgMHgwMCwgMHg5RiwgMHgwMCwgMHg1QywgMHgyQSwgMHhGMCwKKzB4MDksIDB4QzIsIDB4MjYsIDB4MDAsIDB4OUYsIDB4MDAsIDB4M0UsIDB4M0EsIDB4MTAsIDB4OTksIDB4QzgsIDB4MjQsIDB4MjAsCisweDhGLCAweDRCLCAweDdDLCAweDIyLCAweEYwLCAweDQ5LCAweEMwLCAweEE2LCAweDgwLCAweDg3LCAweDAxLCAweDU0LCAweDAyLAorMHgzMSwgMHgwOSwgMHhFMCwgMHgxNCwgMHgwMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNiwgMHgwOCwKKzB4MjUsIDB4MEMsIDB4OUYsIDB4ODQsIDB4N0MsIDB4MDIsIDB4RjgsIDB4MDksIDB4RTAsIDB4MjMsIDB4NDEsIDB4OUYsIDB4MDAsCisweDdDLCAweDAyLCAweEYwLCAweDA5LCAweEMwLCAweDI3LCAweDEwLCAweDlGLCAweDEwLCAweDdDLCAweDAyLCAweEYwLCAweDA5LAorMHhDMCwgMHgyNywgMHgwMCwgMHg5RiwgMHg4MCwgMHg3QywgMHgwNiwgMHhGOCwgMHgxOSwgMHhDNCwgMHg2NywgMHgwMCwgMHg5QiwKKzB4MDAsIDB4N0MsIDB4MDIsIDB4RjAsIDB4MDksIDB4RTgsIDB4MjcsIDB4ODgsIDB4OUYsIDB4MDAsIDB4NkMsIDB4MDYsIDB4RDEsCisweDQ4LCAweEQ4LCAweDVCLCAweDIwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDA4LCAweDA1LAorMHgwMCwgMHgxRiwgMHg4MiwgMHg3QywgMHg4MCwgMHhGOCwgMHg0MSwgMHhEMCwgMHgwNiwgMHg0MCwgMHgxMywgMHgwMCwgMHg3QywKKzB4MDAsIDB4NzAsIDB4NDEsIDB4QzAsIDB4MDYsIDB4MDAsIDB4MTMsIDB4MDAsIDB4NEQsIDB4QzgsIDB4NzEsIDB4MDEsIDB4NDEsCisweDA2LCAweDAwLCAweDFGLCAweDAwLCAweDdDLCAweDA4LCAweEYwLCAweDAxLCAweEMxLCAweDA3LCAweDIwLCAweDFGLCAweDMwLAorMHg1QywgMHgxMCwgMHg3MCwgMHhDMSwgMHhDOCwgMHg4NywgMHgyMCwgMHgxRiwgMHgxMCwgMHg0QywgMHgxMCwgMHgzMiwgMHg0MSwKKzB4QzQsIDB4NTAsIDB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4REMsIDB4MDQsCisweDdELCAweDA3LCAweDc0LCAweDE1LCAweDc4LCAweDc2LCAweEMwLCAweDFDLCAweDAwLCAweDUxLCAweDAwLCAweDc0LCAweDAxLAorMHgxMCwgMHgxNiwgMHg0NSwgMHgxNCwgMHgwMCwgMHg3MSwgMHg4NiwgMHhDNCwgMHgwOSwgMHgxMiwgMHgxNiwgMHg0MCwgMHgxNywKKzB4MDAsIDB4NUQsIDB4MDAsIDB4NzQsIDB4MDEsIDB4NzAsIDB4MzYsIDB4NDAsIDB4MTcsIDB4MTAsIDB4N0QsIDB4MDAsIDB4RjAsCisweDBELCAweDEyLCAweDM2LCAweDQ4LCAweERGLCAweDAyLCAweDdELCAweDA0LCAweDgwLCAweDE1LCAweDUwLCAweDA3LCAweDUwLAorMHg0MCwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHhBMCwgMHhGMiwgMHgwMCwgMHg4RCwKKzB4MDYsIDB4MzQsIDB4MDcsIDB4NTAsIDB4MTgsIDB4NDAsIDB4MjAsIDB4MDAsIDB4QzEsIDB4MDAsIDB4MzYsIDB4MjMsIDB4NTAsCisweDA4LCAweDQwLCAweDMyLCAweDQwLCAweEM5LCAweDAwLCAweDA0LCAweDJGLCAweDUwLCAweEJDLCAweDQwLCAweDMzLCAweDAwLAorMHhDRCwgMHgwMCwgMHgxNCwgMHgwMywgMHg1MCwgMHgyOCwgMHg0MCwgMHgzMywgMHg4MCwgMHg0RCwgMHgwQSwgMHgzNCwgMHgyRiwKKzB4NTAsIDB4MUMsIDB4NDAsIDB4RDMsIDB4MDAsIDB4QzksIDB4MDAsIDB4MDQsIDB4MEIsIDB4MTEsIDB4MEMsIDB4NDAsIDB4NDAsCisweDAwLCAweDBBLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDgwLCAweDM4LCAweDgwLCAweEFELCAweDAwLAorMHhCNCwgMHgwMywgMHg1MCwgMHgwMiwgMHg0MCwgMHgyOCwgMHgwMCwgMHhFMSwgMHgwMCwgMHhCNCwgMHgxNywgMHgxOCwgMHgwRSwKKzB4NDAsIDB4NzAsIDB4MDIsIDB4RTksIDB4MDEsIDB4QzQsIDB4MDcsIDB4MTAsIDB4MEUsIDB4NDAsIDB4M0IsIDB4MDEsIDB4RUQsCisweDA4LCAweEI0LCAweDAzLCAweDUwLCAweDIyLCAweDQwLCAweDNCLCAweEIwLCAweDZELCAweDAwLCAweEI2LCAweDA3LCAweDExLAorMHgwNiwgMHg0MCwgMHgxQiwgMHg4QywgMHhGRCwgMHgwMCwgMHg4NSwgMHgwMywgMHgxMCwgMHgwQywgMHg0MCwgMHgxMCwgMHgwMCwKKzB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MTgsIDB4NzgsIDB4MDAsIDB4RUYsIDB4MDEsIDB4QkMsCisweDA3LCAweDcwLCAweDEyLCAweEMwLCAweDY4LCAweDAwLCAweEUzLCAweDAxLCAweEZDLCAweDBGLCAweDcwLCAweDFBLCAweEQwLAorMHg3QSwgMHgwMSwgMHhFOSwgMHgwMSwgMHg4QywgMHgwNywgMHg3MCwgMHgxRSwgMHhFOCwgMHg3QiwgMHgwMywgMHhFRiwgMHgwMSwKKzB4QkMsIDB4MDcsIDB4NzAsIDB4MTIsIDB4QzAsIDB4N0IsIDB4MjUsIDB4NkYsIDB4MDEsIDB4OUUsIDB4MDYsIDB4NzAsIDB4MUEsCisweEMwLCAweDZCLCAweDAwLCAweEVGLCAweDAxLCAweDhDLCAweDA2LCAweDM0LCAweDFFLCAweEMwLCAweDUwLCAweDYwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHhCOCwgMHgxNSwgMHgwMCwgMHhERiwgMHgwMCwgMHg3QywgMHgwMywKKzB4NzAsIDB4MDAsIDB4QzAsIDB4MjEsIDB4MDAsIDB4REYsIDB4NDAsIDB4N0MsIDB4MDMsIDB4RjIsIDB4MEMsIDB4QzAsIDB4MzcsCisweDIwLCAweEQ3LCAweDgwLCAweDdDLCAweDAxLCAweEYyLCAweDBELCAweEMwLCAweDM3LCAweDAyLCAweERGLCAweDEwLCAweDc4LAorMHgwMywgMHg3MCwgMHgwMSwgMHhDMiwgMHgzNywgMHgxQSwgMHgxRiwgMHg4MCwgMHgzQywgMHgwMiwgMHhGMCwgMHgwNSwgMHhDMCwKKzB4MjcsIDB4MjAsIDB4REYsIDB4MDAsIDB4N0MsIDB4MDIsIDB4RjYsIDB4MEQsIDB4QzAsIDB4NDMsIDB4NjAsIDB4MDYsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA2LCAweDIwLCAweDVELCAweDAwLCAweEEzLCAweDAxLCAweENDLCAweDEzLCAweEY4LAorMHgwMywgMHhDMCwgMHg2RCwgMHgwMCwgMHhGRiwgMHgxMSwgMHhCQywgMHgwNywgMHgyMCwgMHhEQiwgMHhDMCwgMHg3QywgMHgwMCwKKzB4N0YsIDB4MDEsIDB4Q0MsIDB4MDcsIDB4RjAsIDB4OUYsIDB4RDAsIDB4N0MsIDB4MDAsIDB4REYsIDB4MDksIDB4RkMsIDB4MDcsCisweEYwLCAweDEzLCAweEMwLCAweDdGLCAweDIwLCAweDJGLCAweDA5LCAweEVFLCAweDE3LCAweEYwLCAweDFGLCAweEMwLCAweDVGLAorMHgwMCwgMHhGRiwgMHgwMSwgMHg4QywgMHgwNSwgMHgzMCwgMHhEQiwgMHhDMCwgMHgxOCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MTUsIDB4MDAsIDB4MzksIDB4MDAsIDB4QTEsIDB4MDAsIDB4ODQsIDB4MDMsIDB4NzgsIDB4NDIsCisweDQwLCAweDI4LCAweDAyLCAweEVELCAweDAwLCAweEI0LCAweDEzLCAweDEwLCAweDhBLCAweDUwLCAweDM4LCAweDExLCAweDJELAorMHgwNCwgMHg4QywgMHgxQSwgMHhEMCwgMHg4QSwgMHg0MCwgMHgzOCwgMHgwMCwgMHhFRCwgMHgwNSwgMHhCNCwgMHgwMywgMHg5MCwKKzB4MDIsIDB4NDAsIDB4M0IsIDB4MDAsIDB4MkQsIDB4MDAsIDB4OUUsIDB4MDMsIDB4RDAsIDB4MEUsIDB4NDAsIDB4OUIsIDB4MjIsCisweEFELCAweDA0LCAweEFDLCAweDAxLCAweDEwLCAweENFLCAweDQ4LCAweDU1LCAweDIwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOSwgMHgwMCwgMHhBMSwgMHgwMCwgMHg4NSwgMHgyMywgMHg1MCwgMHg4MiwgMHg0MywKKzB4MjksIDB4MDAsIDB4RUQsIDB4MDAsIDB4RjQsIDB4MDIsIDB4MTAsIDB4NEIsIDB4NDgsIDB4MzgsIDB4ODAsIDB4NkQsIDB4ODAsCisweDg0LCAweDAzLCAweEQyLCAweDA2LCAweDAwLCAweDM4LCAweDAwLCAweEVELCAweDA0LCAweEI0LCAweDAzLCAweEQwLCAweDAyLAorMHg0MCwgMHgzQiwgMHgwMCwgMHgzRCwgMHgwMCwgMHg4NCwgMHgxMiwgMHhEMCwgMHgwQSwgMHg0MCwgMHg5QiwgMHgwMCwgMHhGNSwKKzB4MTAsIDB4RDQsIDB4MjAsIDB4MTAsIDB4QzIsIDB4NDQsIDB4NjAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAyLCAweDI4LCAweEMzLCAweDAwLCAweDAxLCAweDAxLCAweDAwLCAweDAyLCAweDUwLCAweDMwLCAweDQwLCAweDIwLAorMHgwMCwgMHhDRCwgMHgwMCwgMHgzNCwgMHgyMiwgMHgxMCwgMHgwOCwgMHg0MCwgMHgzMCwgMHgwMCwgMHgxRCwgMHgwMCwgMHgwNCwKKzB4NEMsIDB4RDAsIDB4MDAsIDB4NDAsIDB4MzAsIDB4MDAsIDB4Q0QsIDB4MDQsIDB4MzQsIDB4NDMsIDB4RDAsIDB4MDAsIDB4NDAsCisweDc3LCAweDAwLCAweDBELCAweDEyLCAweDE0LCAweEM2LCAweEQ5LCAweDhDLCAweDQwLCAweDEzLCAweDAwLCAweDhELCAweDIzLAorMHgwNSwgMHgwMywgMHgxNCwgMHgyNCwgMHg0MCwgMHgwOSwgMHgyMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MTUsIDB4QTAsIDB4RTUsIDB4NDEsIDB4OTMsIDB4MEEsIDB4NEMsIDB4MDMsIDB4NzAsIDB4MzUsIDB4QzAsIDB4MzUsIDB4MDAsCisweEZGLCAweDAwLCAweDc0LCAweDAyLCAweDM0LCAweDA4LCAweEMwLCAweDNDLCAweDAwLCAweDlGLCAweDAwLCAweDRDLCAweDRFLAorMHhGMCwgMHgwOSwgMHhDMCwgMHgzQywgMHgwMCwgMHhGRiwgMHgxMywgMHg3QywgMHgwMywgMHhGMCwgMHgwNSwgMHhDMCwgMHgzRiwKKzB4MDEsIDB4NUYsIDB4MDEsIDB4NEMsIDB4MDcsIDB4RjEsIDB4QkQsIDB4QzAsIDB4QjcsIDB4MDAsIDB4RDcsIDB4MDMsIDB4MTQsCisweDRGLCAweDMwLCAweDk0LCAweEMwLCAweDU0LCAweDAwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LAorMHgwOCwgMHgyNywgMHgwMCwgMHg5RiwgMHg4OCwgMHg3QywgMHgwMywgMHg3MCwgMHgyMSwgMHhDMCwgMHhCNywgMHgwMCwgMHhERiwKKzB4MDAsIDB4N0MsIDB4NDIsIDB4RjAsIDB4MjksIDB4QzAsIDB4MzcsIDB4MDAsIDB4OUYsIDB4MDAsIDB4NUQsIDB4MDIsIDB4RjAsCisweDAwLCAweEM0LCAweDM3LCAweDAwLCAweERGLCAweDIwLCAweDdDLCAweDAzLCAweEIwLCAweDI1LCAweEU0LCAweDM3LCAweDAwLAorMHg1RiwgMHgwMSwgMHg0RCwgMHgyMywgMHhGMCwgMHgwNSwgMHhDMCwgMHhGNywgMHgwMCwgMHhERiwgMHgwMiwgMHg3QywgMHgxQiwKKzB4RjAsIDB4M0QsIDB4QzAsIDB4MzcsIDB4MjAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDgsCisweDI3LCAweDA0LCAweEZGLCAweDAyLCAweEZDLCAweDAzLCAweEYwLCAweDE3LCAweEMxLCAweDZCLCAweDAwLCAweEY3LCAweDAwLAorMHhGQywgMHgwNywgMHhEMCwgMHgxQiwgMHhDMCwgMHgzQywgMHgwOCwgMHgxRiwgMHgwMCwgMHhDQywgMHgwMiwgMHhGMCwgMHgwOSwKKzB4QzAsIDB4M0QsIDB4ODAsIDB4RkYsIDB4ODAsIDB4Q0MsIDB4MDMsIDB4RjgsIDB4MTMsIDB4QzAsIDB4M0QsIDB4MDAsIDB4RjMsCisweDAwLCAweEZDLCAweDI2LCAweEYwLCAweDAzLCAweENDLCAweDJGLCAweDAwLCAweEY3LCAweDEwLCAweENDLCAweDAyLCAweDMwLAorMHgxMSwgMHhDOCwgMHgwNCwgMHgyNiwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MSwgMHgyMCwgMHg2NiwKKzB4MDAsIDB4REQsIDB4MDAsIDB4NzQsIDB4MDMsIDB4RDAsIDB4MDEsIDB4NDAsIDB4MTcsIDB4MDAsIDB4RDEsIDB4ODAsIDB4NzQsCisweDA3LCAweEQwLCAweDM5LCAweDUwLCAweDM0LCAweDAwLCAweDFELCAweDA5LCAweDQ0LCAweDBDLCAweEQwLCAweDExLCAweDQwLAorMHgzNCwgMHg4MCwgMHhERCwgMHgwMCwgMHg0NCwgMHgwMywgMHhEOCwgMHgwMCwgMHhDMSwgMHgzNCwgMHg0MCwgMHgxMSwgMHgwMywKKzB4NzIsIDB4MEUsIDB4NzAsIDB4MDUsIDB4NDEsIDB4MjMsIDB4MDAsIDB4Q0IsIDB4MjIsIDB4NDQsIDB4NjQsIDB4MTQsIDB4MzksCisweEMwLCAweDA2LCAweDAyLCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweEEwLCAweDQ2LCAweDBDLAorMHg5RCwgMHgwMCwgMHg3NCwgMHgwMywgMHhEMCwgMHg0NSwgMHg0MSwgMHhCNywgMHgwMSwgMHhENSwgMHgwMCwgMHg3NCwgMHgxMiwKKzB4RDAsIDB4ODEsIDB4NDAsIDB4MzYsIDB4MDAsIDB4REQsIDB4MDIsIDB4NDQsIDB4MDQsIDB4RDIsIDB4MTksIDB4NDEsIDB4MzQsCisweDAwLCAweENELCAweDAwLCAweDQ0LCAweDAzLCAweEQwLCAweDQ1LCAweDQwLCAweDM2LCAweDIwLCAweDUxLCAweDExLCAweDY0LAorMHgwMywgMHhEMCwgMHgxOSwgMHg0MCwgMHgzNywgMHgwMCwgMHg1MSwgMHgwMiwgMHg0NCwgMHgwMSwgMHgxMCwgMHg0MSwgMHg0MCwKKzB4MDQsIDB4MDAsIDB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MjAsIDB4MDAsIDB4OEQsCisweDAwLCAweDM0LCAweDAzLCAweEQwLCAweDA0LCAweDQwLCAweDMyLCAweDAwLCAweEMxLCAweDAwLCAweDM0LCAweDAyLCAweEQwLAorMHgwMCwgMHg0MCwgMHgzMiwgMHgwMCwgMHg4RCwgMHgwMCwgMHgwNCwgMHgwMCwgMHhEMiwgMHgwMCwgMHg0MCwgMHgzMCwgMHgwMCwKKzB4Q0QsIDB4MTAsIDB4MDQsIDB4MDMsIDB4RDAsIDB4MDQsIDB4NjAsIDB4MzAsIDB4MDAsIDB4NDEsIDB4MjAsIDB4MzQsIDB4MDEsCisweDUwLCAweDA4LCAweDQwLCAweDM3LCAweDgwLCAweDA5LCAweDAwLCAweDQ1LCAweDAwLCAweDEwLCAweDBDLCAweDQ0LCAweDQyLAorMHgyMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwNiwgMHgwMCwgMHhERiwgMHgwMCwKKzB4N0MsIDB4MDMsIDB4RjAsIDB4MDUsIDB4QzAsIDB4MjcsIDB4MDAsIDB4RDcsIDB4MDAsIDB4N0MsIDB4MDIsIDB4RjIsIDB4MDEsCisweEQwLCAweDM2LCAweDAwLCAweDVGLCAweDAwLCAweDQ1LCAweDAwLCAweEYwLCAweDAxLCAweEQwLCAweDNDLCAweDIwLCAweEZELAorMHgwMCwgMHg0RCwgMHgwMywgMHhEMCwgMHgwNSwgMHhDMCwgMHgzRiwgMHgxMCwgMHg1MywgMHgyMCwgMHg3NCwgMHg4MywgMHhGMCwKKzB4MDEsIDB4QzgsIDB4MzcsIDB4ODAsIDB4NTcsIDB4MDAsIDB4NEMsIDB4MDAsIDB4MzEsIDB4MDEsIDB4QzAsIDB4MDQsIDB4NDQsCisweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweEI4LCAweDJGLCAweDAwLCAweDdGLCAweDAwLCAweEZDLAorMHgwMiwgMHhGMCwgMHgwNiwgMHhDMCwgMHgxRiwgMHgwMCwgMHhGRiwgMHgwMCwgMHhGQywgMHgwMiwgMHhGMCwgMHgwMiwgMHhDMCwKKzB4M0QsIDB4MDAsIDB4M0YsIDB4MDAsIDB4RkQsIDB4MDAsIDB4RjAsIDB4MDMsIDB4ODIsIDB4M0YsIDB4MTAsIDB4RkYsIDB4ODAsCisweEZDLCAweDAzLCAweEYwLCAweDA3LCAweEMwLCAweDNGLCAweDAwLCAweDNGLCAweDAwLCAweEZDLCAweDAyLCAweDcwLCAweDAzLAorMHhDMCwgMHgzRiwgMHgwMCwgMHgyRCwgMHgwMCwgMHhGQywgMHgwMCwgMHhGMiwgMHgwMywgMHg4MCwgMHgxNCwgMHgyMCwgMHgwRSwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4QTAsIDB4N0YsIDB4MDAsIDB4RjMsIDB4MDksIDB4OEMsIDB4MDcsCisweEYwLCAweDFGLCAweEMwLCAweDdDLCAweDAwLCAweEZGLCAweDAxLCAweEZDLCAweDI3LCAweEYwLCAweDlGLCAweEMwLCAweDdGLAorMHgwMiwgMHhGRiwgMHgwOSwgMHhGQywgMHgyNywgMHhGMCwgMHg5RiwgMHhDMCwgMHg3RCwgMHgwMiwgMHhFRiwgMHgwMSwgMHhDQywKKzB4MDcsIDB4RjAsIDB4MUUsIDB4NDAsIDB4M0MsIDB4MDAsIDB4RjMsIDB4MDAsIDB4Q0MsIDB4MDMsIDB4QjAsIDB4MEYsIDB4QzAsCisweDNDLCAweDAwLCAweEYzLCAweDAxLCAweENDLCAweDA3LCAweDMwLCAweDFGLCAweEMwLCAweDBGLCAweDAwLCAweDBFLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHg0NywgMHg0MCwgMHgxMSwgMHgwMCwgMHg0NSwgMHgwNCwgMHhEMCwKKzB4MTEsIDB4NTIsIDB4MDQsIDB4MDAsIDB4MEQsIDB4MDAsIDB4NzQsIDB4MTAsIDB4RDAsIDB4MDEsIDB4NDAsIDB4MDcsIDB4MDEsCisweDFELCAweDA0LCAweDc0LCAweDEwLCAweEQwLCAweDQwLCAweEMwLCAweDA2LCAweDAxLCAweDFELCAweDgxLCAweDQ0LCAweDA0LAorMHhEMCwgMHgxMSwgMHg0MCwgMHg3NCwgMHgwOCwgMHg1MSwgMHgyMSwgMHg0NCwgMHgwNywgMHgxMCwgMHgxNSwgMHg0MiwgMHg3NCwKKzB4MDAsIDB4RDEsIDB4MDAsIDB4NDQsIDB4MDcsIDB4MTAsIDB4MTksIDB4NDgsIDB4MDcsIDB4MDAsIDB4MEMsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDExLCAweEEwLCAweDM3LCAweDAwLCAweEMxLCAweDA0LCAweDE0LCAweDAzLCAweEQwLCAweDBELAorMHg2MCwgMHgzMCwgMHgwNSwgMHhDRCwgMHgxNCwgMHgzNCwgMHgwMywgMHhEMCwgMHg0QywgMHg0MCwgMHgzMywgMHgwMCwgMHhDNSwKKzB4MDAsIDB4MzQsIDB4MDMsIDB4RDAsIDB4MEMsIDB4NDAsIDB4MzMsIDB4MDAsIDB4Q0QsIDB4MDAsIDB4MjQsIDB4MDMsIDB4RDAsCisweDBDLCAweDQwLCAweDMyLCAweDAwLCAweDgxLCAweDAwLCAweDA0LCAweDAyLCAweDUwLCAweDBDLCAweDQwLCAweDMyLCAweDAwLAorMHhDNSwgMHgwMCwgMHg0NCwgMHgwMiwgMHgxNCwgMHgwQywgMHg0MCwgMHg0NSwgMHg4MCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDMsIDB4QTgsIDB4MDUsIDB4MDAsIDB4MDEsIDB4NDAsIDB4NTQsIDB4MDAsIDB4RDAsIDB4MDEsIDB4NjAsCisweDA0LCAweDMwLCAweDFELCAweDAwLCAweDc0LCAweDAwLCAweEQwLCAweDAxLCAweDQwLCAweDA3LCAweDAwLCAweDFELCAweDIwLAorMHg3NCwgMHgwMCwgMHhEMCwgMHgwMSwgMHg0MCwgMHgwNCwgMHgwMCwgMHgxRCwgMHgwMCwgMHg2NCwgMHg4MCwgMHhDMCwgMHgwMSwKKzB4NDAsIDB4MzYsIDB4MDAsIDB4RDEsIDB4MDAsIDB4NDQsIDB4NDMsIDB4RDAsIDB4QUQsIDB4NDAsIDB4MzYsIDB4MDQsIDB4QzUsCisweDAwLCAweDQ0LCAweDAyLCAweDEwLCAweDA5LCAweDQwLCAweDBGLCAweDIwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHhBMCwgMHgzMywgMHgwMCwgMHhEMywgMHgwMCwgMHg1QywgMHgwMywgMHhGMCwgMHgwRCwgMHhDMCwgMHgzNCwKKzB4MDAsIDB4REYsIDB4ODAsIDB4N0MsIDB4ODMsIDB4RjAsIDB4MEQsIDB4QzAsIDB4MzcsIDB4MDAsIDB4REYsIDB4MDAsIDB4N0MsCisweDAzLCAweEYwLCAweDBELCAweDQwLCAweDM3LCAweDAwLCAweERGLCAweDAwLCAweDZDLCAweDAzLCAweEYwLCAweDBELCAweDQwLAorMHg4NiwgMHgwNCwgMHhEMywgMHgwOSwgMHg0QywgMHgyNSwgMHhGMCwgMHgzRCwgMHhDMCwgMHgyNiwgMHgwMCwgMHhENywgMHgwOSwKKzB4MEQsIDB4MDMsIDB4MzAsIDB4MDksIDB4QzAsIDB4MDMsIDB4MDAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDA3LCAweDg4LCAweDBELCAweDAwLCAweDNGLCAweDAwLCAweEVDLCAweDAwLCAweEYwLCAweDAzLCAweEMwLCAweDBGLCAweDAwLAorMHgzRiwgMHgwMCwgMHhGNCwgMHgwMCwgMHhGMSwgMHgwMywgMHhDOCwgMHgwRiwgMHgwMCwgMHgzRiwgMHgwMCwgMHhGQywgMHgwMCwKKzB4QTAsIDB4MDMsIDB4QzgsIDB4MEYsIDB4MDAsIDB4M0YsIDB4MDAsIDB4REMsIDB4MDAsIDB4RjEsIDB4MDMsIDB4QzgsIDB4MTksCisweDAwLCAweENGLCAweDIxLCAweEJDLCAweDAxLCAweDMwLCAweDE2LCAweEMyLCAweDM5LCAweDAyLCAweEZCLCAweDAwLCAweEZDLAorMHgxMywgMHhGMCwgMHgwRiwgMHhDMCwgMHgxRiwgMHgyMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwKKzB4MDgsIDB4MzUsIDB4MDAsIDB4REYsIDB4MDUsIDB4N0MsIDB4MDMsIDB4MzIsIDB4MEQsIDB4QzIsIDB4MzcsIDB4MDAsIDB4REYsCisweDAwLCAweDRDLCAweDA3LCAweEYwLCAweDBELCAweEMwLCAweDc3LCAweDAwLCAweERGLCAweDAxLCAweDdDLCAweDA3LCAweEYwLAorMHgwRCwgMHhDMCwgMHg3NCwgMHgwMCwgMHhERiwgMHgwMSwgMHg0QywgMHgwMywgMHgzMCwgMHgwRCwgMHhDMCwgMHhCNSwgMHgwMCwKKzB4OTMsIDB4MDAsIDB4NEMsIDB4MEEsIDB4NzAsIDB4MEQsIDB4QzIsIDB4QTQsIDB4MDAsIDB4RDcsIDB4MDAsIDB4NEMsIDB4MDIsCisweEYwLCAweDA5LCAweEMwLCAweDA4LCAweDIwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEzLCAweEEwLAorMHgwNCwgMHgxMCwgMHgxRCwgMHgwMSwgMHg3NCwgMHgwMCwgMHgxNCwgMHhCMCwgMHg0MCwgMHgwNywgMHgwMCwgMHgxRCwgMHgwMCwKKzB4NDQsIDB4MDQsIDB4QzEsIDB4QTEsIDB4NDIsIDB4MDcsIDB4MDAsIDB4MUQsIDB4MDEsIDB4NzQsIDB4ODQsIDB4RDAsIDB4RTEsCisweDQwLCAweDQ0LCAweDAwLCAweDBELCAweDAwLCAweDQ0LCAweDAwLCAweEIwLCAweDAwLCAweDQwLCAweDM0LCAweDAwLCAweEQxLAorMHg4MCwgMHg0NCwgMHgxMywgMHgxMCwgMHgwRCwgMHg0MCwgMHgzNCwgMHgxMCwgMHhERCwgMHgwQSwgMHg0NCwgMHg0NiwgMHhEMCwKKzB4MUQsIDB4NDAsIDB4NEMsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4MjAsIDB4MzAsCisweDAwLCAweENELCAweDAyLCAweDM0LCAweDAzLCAweDEwLCAweDNDLCAweDQwLCAweDMzLCAweDAwLCAweENELCAweDAwLCAweDA0LAorMHgxQiwgMHhEMCwgMHgwQywgMHg0MCwgMHgzMiwgMHgwMCwgMHhDRCwgMHgxMCwgMHgzNCwgMHgwMywgMHhEMCwgMHgwRCwgMHg0MCwKKzB4MzAsIDB4MDAsIDB4Q0QsIDB4MDAsIDB4MDQsIDB4MDMsIDB4NTAsIDB4MEMsIDB4NDQsIDB4MzAsIDB4MDAsIDB4QzEsIDB4MDAsCisweDA0LCAweDgzLCAweDE0LCAweDA4LCAweDQwLCAweDEyLCAweDAwLCAweEM0LCAweDAwLCAweDA0LCAweDAzLCAweEQwLCAweDFDLAorMHg0MCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHg0OCwgMHgwMCwKKzB4MkQsIDB4MDksIDB4RjQsIDB4MjQsIDB4MTAsIDB4MTIsIDB4NDAsIDB4NEIsIDB4MDAsIDB4MkQsIDB4MDAsIDB4ODQsIDB4MjQsCisweEQwLCAweDEyLCAweDQwLCAweDRCLCAweDAwLCAweDJELCAweDQxLCAweEI0LCAweDBDLCAweEQwLCAweDEyLCAweDYwLCAweEM4LAorMHgwMCwgMHgyRCwgMHgwMSwgMHhDNCwgMHgwNCwgMHhEMiwgMHgzMiwgMHg0MCwgMHg3MCwgMHgwMCwgMHg2MSwgMHgwMSwgMHgwNSwKKzB4MDcsIDB4MTAsIDB4MUMsIDB4NDAsIDB4N0EsIDB4MDAsIDB4RUQsIDB4MDEsIDB4ODQsIDB4MDcsIDB4RDEsIDB4MUEsIDB4NjAsCisweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDE4LCAweDMwLCAweDAwLCAweENGLAorMHgwMCwgMHgzQywgMHgwMywgMHgzMCwgMHgwQywgMHhDMywgMHgzMywgMHgwMiwgMHhDRiwgMHgwOCwgMHgwQywgMHgwMywgMHhGMCwKKzB4MEMsIDB4QzIsIDB4MzIsIDB4MDAsIDB4Q0QsIDB4MDAsIDB4M0MsIDB4MDMsIDB4RjAsIDB4MEMsIDB4QzAsIDB4MzAsIDB4MDAsCisweENGLCAweDAwLCAweDBDLCAweDAzLCAweDcwLCAweDBDLCAweEMwLCAweDMxLCAweDAwLCAweEMzLCAweDA0LCAweDBDLCAweDAzLAorMHg3MCwgMHgwQywgMHhDMCwgMHgzMiwgMHgwMCwgMHhENywgMHgwMCwgMHgwRCwgMHgwMywgMHhGMiwgMHg4QywgMHg1MSwgMHg0OCwKKzB4NjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MzgsIDB4MEQsIDB4MDAsIDB4M0YsIDB4MDAsCisweEZDLCAweDAwLCAweEYwLCAweDAzLCAweEM4LCAweDBGLCAweDA4LCAweDNGLCAweDA0LCAweEZDLCAweDAwLCAweEYwLCAweDAzLAorMHhDMCwgMHgwRiwgMHgwMCwgMHgzRiwgMHgwMCwgMHhGQywgMHgwMCwgMHhGMCwgMHgwMywgMHhDMCwgMHgwRiwgMHgwMCwgMHgzRiwKKzB4NDAsIDB4QkMsIDB4MDAsIDB4QjAsIDB4MTMsIDB4QzQsIDB4M0YsIDB4MDIsIDB4RkYsIDB4MDAsIDB4RkUsIDB4MDMsIDB4RjIsCisweDBGLCAweEMwLCAweDNELCAweDAwLCAweEZGLCAweDAwLCAweEZDLCAweDAyLCAweEYwLCAweDBBLCAweEMyLCAweDBCLCAweEUwLAorMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHhBOCwgMHgzNywgMHgwMCwgMHhERiwgMHgwMSwgMHgwRCwKKzB4MDcsIDB4MzQsIDB4MEQsIDB4QzAsIDB4MzcsIDB4MDAsIDB4REYsIDB4MDEsIDB4NEMsIDB4MDcsIDB4M0MsIDB4MEQsIDB4QzAsCisweDc3LCAweDAwLCAweEQ3LCAweDAxLCAweDRELCAweDg3LCAweDM0LCAweDFELCAweEMwLCAweDc1LCAweDQwLCAweEQzLCAweDAwLAorMHg3RSwgMHgwMywgMHhGMCwgMHgxRCwgMHhDMCwgMHgyNCwgMHgwMCwgMHhEMywgMHgwMCwgMHg0QywgMHgwMywgMHhCOCwgMHgwOSwKKzB4QzAsIDB4NTQsIDB4MDAsIDB4REIsIDB4MDAsIDB4NEQsIDB4MDIsIDB4RjAsIDB4MDksIDB4QzAsIDB4NDEsIDB4MDAsIDB4MEUsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDkwLCAweDA4LCAweDAwLCAweDJELCAweDAwLCAweDg0LCAweDAwLAorMHgxOCwgMHgwMiwgMHg0MCwgMHgwQiwgMHgwMCwgMHgzRCwgMHgwMCwgMHhENCwgMHgwMCwgMHgxMCwgMHgwMiwgMHg0MCwgMHgwRiwKKzB4MDAsIDB4MzEsIDB4MDAsIDB4QzQsIDB4MDAsIDB4MTAsIDB4MDIsIDB4NDAsIDB4MEMsIDB4MDAsIDB4MjEsIDB4MDAsIDB4OUMsCisweDgwLCAweEQwLCAweDAyLCAweDQwLCAweDM5LCAweDAwLCAweEUxLCAweDAwLCAweDg0LCAweDAzLCAweDEwLCAweDBFLCAweDQyLAorMHgzOCwgMHgwMCwgMHhGMSwgMHgwMCwgMHg4NCwgMHgwMywgMHhEMCwgMHgwRSwgMHg0MCwgMHg0QiwgMHgwMCwgMHgwNiwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4NzksIDB4MDAsIDB4RUQsIDB4MDEsIDB4QzQsIDB4ODcsIDB4MTIsCisweDFFLCAweDYwLCAweDdCLCAweDgwLCAweEU5LCAweDAxLCAweDg0LCAweDA3LCAweDEwLCAweDFFLCAweDQyLCAweDdCLCAweDIwLAorMHhFNSwgMHgwMSwgMHhBMCwgMHgwNywgMHgxMCwgMHgxRSwgMHg0MCwgMHg3QiwgMHgwMCwgMHhFOSwgMHgwMSwgMHg5NCwgMHgwNywKKzB4RDAsIDB4MUYsIDB4NDAsIDB4NzIsIDB4MDgsIDB4QzEsIDB4MDEsIDB4MDQsIDB4MDcsIDB4MTAsIDB4MUMsIDB4NDAsIDB4NzAsCisweDAwLCAweEUxLCAweDAxLCAweDg0LCAweDA2LCAweEQwLCAweDFBLCAweDQwLCAweDEzLCAweDAwLCAweDA0LCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgxNiwgMHgyMCwgMHgwMywgMHgwMCwgMHgwRCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgxMCwgMHgwMCwKKzB4NDAsIDB4MDMsIDB4MDAsIDB4MEQsIDB4MDAsIDB4MTQsIDB4MDAsIDB4MTgsIDB4MDAsIDB4NDAsIDB4MDMsIDB4MDAsIDB4MDEsCisweDAwLCAweDI0LCAweDAwLCAweDEwLCAweDAwLCAweDQwLCAweDAyLCAweDAwLCAweDA5LCAweDAwLCAweDE0LCAweDAwLCAweEQwLAorMHgwMCwgMHg0MCwgMHgzMywgMHg0MCwgMHhDMSwgMHgwMCwgMHgwNSwgMHgwMywgMHgxNCwgMHgwQywgMHg1MCwgMHgzMCwgMHg1MiwKKzB4OTEsIDB4NDgsIDB4MDQsIDB4MDIsIDB4RDAsIDB4MUMsIDB4NDAsIDB4NUIsIDB4MjAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDE3LCAweDI4LCAweDE1LCAweDAwLCAweDVGLCAweDAwLCAweDRDLCAweDAxLCAweDMwLCAweDA1LCAweEMwLAorMHgxNywgMHgwMCwgMHg1RiwgMHgwMCwgMHg0QywgMHgwMSwgMHgzMCwgMHgwNCwgMHhDMCwgMHgxNywgMHgxMCwgMHg1NywgMHgwMCwKKzB4NjQsIDB4MDEsIDB4MzAsIDB4MDUsIDB4QzAsIDB4MTcsIDB4MDAsIDB4NUIsIDB4MDAsIDB4NUMsIDB4MDEsIDB4RjAsIDB4MDUsCisweEMwLCAweDFFLCAweDAwLCAweDczLCAweDAyLCAweENDLCAweDA5LCAweDMwLCAweDA3LCAweEMwLCAweDVDLCAweDAwLCAweDUzLAorMHgwMSwgMHg0QywgMHgwMSwgMHhGMiwgMHgwNSwgMHhDMSwgMHg1RiwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MTIsIDB4MDAsIDB4MEQsIDB4MDAsIDB4M0YsIDB4MDAsIDB4RkMsIDB4MDAsIDB4RjAsIDB4MjMsIDB4QzAsIDB4MEYsCisweDAwLCAweDNGLCAweDIwLCAweEZDLCAweDAwLCAweEYwLCAweDAzLCAweEMwLCAweDBGLCAweDAwLCAweDNGLCAweDAwLCAweERDLAorMHgwMCwgMHhGMCwgMHgyMywgMHhDMCwgMHgwRCwgMHgyMCwgMHgzNywgMHgwMiwgMHhEQywgMHgwMCwgMHhGMCwgMHgwMywgMHhFMiwKKzB4NDEsIDB4MDAsIDB4MEYsIDB4MTAsIDB4N0MsIDB4NDAsIDB4RjAsIDB4MDEsIDB4QzAsIDB4MDcsIDB4MDAsIDB4MTcsIDB4MDIsCisweDdDLCAweDAwLCAweEYwLCAweDAxLCAweEMwLCAweDRCLCAweDIwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgxMCwgMHgwOCwgMHgyNSwgMHgwMCwgMHg5RiwgMHgwNSwgMHg3QywgMHgxNiwgMHhGMCwgMHgwOSwgMHhDMCwgMHgyNywgMHgwMCwKKzB4OUYsIDB4MDAsIDB4N0MsIDB4MEEsIDB4RjAsIDB4MjksIDB4QzAsIDB4MjQsIDB4MDEsIDB4OUYsIDB4MDEsIDB4NUMsIDB4MDIsCisweEYwLCAweDE5LCAweEMwLCAweDI3LCAweDAwLCAweDlGLCAweDAwLCAweDdDLCAweDAyLCAweDIwLCAweDA5LCAweEMwLCAweDI3LAorMHgyMCwgMHg5MywgMHgyMCwgMHgwQywgMHgwMiwgMHgzNCwgMHgwOCwgMHhDMCwgMHgyNCwgMHgwMCwgMHg5RiwgMHgwNSwgMHg0QywKKzB4MDYsIDB4RjAsIDB4MDksIDB4QzAsIDB4NDAsIDB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsCisweDIwLCAweDI2LCAweDAwLCAweDlELCAweDAyLCAweDc0LCAweDAyLCAweDkwLCAweDQ5LCAweDQ4LCAweDI3LCAweDAwLCAweDlELAorMHgwMCwgMHg3NCwgMHgwQSwgMHhEOSwgMHgzOSwgMHg0MCwgMHgyNCwgMHgwMCwgMHg5RCwgMHgwMiwgMHg3NCwgMHgwQSwgMHhEMCwKKzB4RDksIDB4NDAsIDB4QTcsIDB4ODAsIDB4OUYsIDB4MTIsIDB4MzQsIDB4MDIsIDB4QjAsIDB4MDksIDB4NDAsIDB4QTcsIDB4MjAsCisweDkxLCAweDgyLCAweDQ0LCAweDBBLCAweDMwLCAweDI5LCAweDQwLCAweEE0LCAweDAwLCAweDlELCAweDAyLCAweDQ0LCAweDA2LAorMHhEMCwgMHgwOCwgMHhDMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHhBMCwKKzB4MjQsIDB4MDAsIDB4QkQsIDB4MDAsIDB4RjQsIDB4MDIsIDB4RDAsIDB4MEIsIDB4NDAsIDB4MkYsIDB4MDAsIDB4QjUsIDB4MDAsCisweEY0LCAweDAyLCAweEQwLCAweDBCLCAweDYwLCAweDJDLCAweDAwLCAweEJELCAweDA4LCAweEY2LCAweDA2LCAweEQwLCAweDBCLAorMHg0MCwgMHg2RiwgMHgxMCwgMHhCRCwgMHgwMCwgMHhGNCwgMHgwMiwgMHg1MCwgMHgxQiwgMHg0MiwgMHgyNywgMHgwNCwgMHg5MSwKKzB4MTAsIDB4NjQsIDB4NDIsIDB4MDAsIDB4MDksIDB4NDEsIDB4MjQsIDB4ODQsIDB4OUQsIDB4MDAsIDB4NjQsIDB4MjIsIDB4RDAsCisweDg5LCAweDQwLCAweDYwLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDIwLCAweDI4LAorMHgwMCwgMHhBRCwgMHgwMSwgMHhCNCwgMHgwMiwgMHg5MSwgMHgwQSwgMHg0MCwgMHgyQiwgMHgwMCwgMHhBRCwgMHgwMCwgMHhCNCwKKzB4MDYsIDB4RDAsIDB4MEIsIDB4NDIsIDB4MjksIDB4MDAsIDB4QUQsIDB4MDEsIDB4QjQsIDB4MDYsIDB4RDAsIDB4MEEsIDB4NjAsCisweDZCLCAweDAwLCAweEE1LCAweDAwLCAweEY0LCAweDAyLCAweEQyLCAweDBBLCAweDYwLCAweDIzLCAweDQxLCAweDgxLCAweDA0LAorMHgyNCwgMHg5MiwgMHg5MCwgMHg0OCwgMHg0MCwgMHgyMCwgMHgwMSwgMHg4RCwgMHg0MCwgMHgyNCwgMHgwMiwgMHhEMCwgMHgwOSwKKzB4NDAsIDB4NDIsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MUQsIDB4QjgsIDB4MDYsIDB4MDAsCisweDBGLCAweDBBLCAweDdDLCAweDAwLCAweEYwLCAweDAxLCAweEMwLCAweDg3LCAweDEyLCAweDE3LCAweDBBLCAweDdDLCAweDI4LAorMHhEMCwgMHhBNSwgMHhEMCwgMHg4NCwgMHgwMiwgMHgxRCwgMHgwQSwgMHg1QywgMHgyOCwgMHhGMCwgMHhBMCwgMHhDMCwgMHg4NywKKzB4MDIsIDB4MUQsIDB4MDAsIDB4N0MsIDB4MDAsIDB4NjAsIDB4MDMsIDB4QzAsIDB4MDcsIDB4MDAsIDB4MTMsIDB4MDAsIDB4NjUsCisweDAwLCAweDMyLCAweDAxLCAweEQwLCAweDA0LCAweDAwLCAweDVGLCAweDBBLCAweDZDLCAweDAwLCAweEYwLCAweDAxLCAweEMwLAorMHg3NCwgMHhFMCwgMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxRCwgMHhCOCwgMHgyNywgMHgwMCwgMHg5RiwKKzB4MDAsIDB4N0MsIDB4MDIsIDB4QjAsIDB4MDksIDB4QzAsIDB4MjcsIDB4MDAsIDB4OUYsIDB4MDAsIDB4N0MsIDB4MDIsIDB4RjAsCisweDA5LCAweEMwLCAweDI2LCAweDAwLCAweDlGLCAweDAwLCAweDdDLCAweDAyLCAweEYwLCAweDA5LCAweEMwLCAweDI3LCAweDAwLAorMHg5RiwgMHgwMCwgMHg3QywgMHgwMiwgMHhCMCwgMHgwOCwgMHhDMCwgMHgyRiwgMHgwMiwgMHhCRiwgMHgwOCwgMHhEQywgMHgyMiwKKzB4NzAsIDB4OEIsIDB4QzAsIDB4MkYsIDB4MDIsIDB4QkYsIDB4MDAsIDB4REQsIDB4MDIsIDB4RjAsIDB4MEIsIDB4QzAsIDB4NzcsCisweDYwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFDLCAweEEwLCAweDI3LCAweDAwLCAweEIzLCAweDAwLAorMHhDQywgMHgwMiwgMHhGMCwgMHgwQiwgMHhDMCwgMHgyNCwgMHgwMCwgMHhCRiwgMHgwMCwgMHhDQywgMHgwMiwgMHhGMCwgMHgwQSwKKzB4QzAsIDB4MkQsIDB4MDIsIDB4QjcsIDB4MDAsIDB4RkUsIDB4MDIsIDB4RjAsIDB4OEIsIDB4QzAsIDB4MkYsIDB4MDAsIDB4OUYsCisweDAwLCAweDNDLCAweDAyLCAweEYwLCAweDA5LCAweEMwLCAweDM0LCAweDAwLCAweDlGLCAweDAwLCAweDZELCAweDEyLCAweDMwLAorMHg0OSwgMHhDMSwgMHgyNCwgMHgwMSwgMHhCMywgMHgwMCwgMHhDQywgMHgwMywgMHhGMCwgMHgwQiwgMHhDMCwgMHg3MywgMHgwMCwKKzB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDAsIDB4MDUsIDB4MDAsIDB4MTEsIDB4MDQsIDB4NDUsCisweDAwLCAweEQwLCAweDAxLCAweDQwLCAweDA0LCAweDAwLCAweDFELCAweDAwLCAweDQ1LCAweDUwLCAweDcwLCAweDQxLCAweDQwLAorMHgwNCwgMHgwMSwgMHgxMSwgMHgxMCwgMHg3NCwgMHg0MCwgMHhEMSwgMHgwMSwgMHg0MCwgMHgwNywgMHgwNSwgMHgxRCwgMHgwMCwKKzB4NzQsIDB4MDAsIDB4RDAsIDB4MDEsIDB4NDAsIDB4MDUsIDB4MDAsIDB4MUQsIDB4MDgsIDB4NDQsIDB4MDAsIDB4MTAsIDB4MDEsCisweDQwLCAweDBDLCAweDEyLCAweDAxLCAweDEwLCAweDQ0LCAweDAwLCAweEQwLCAweDAxLCAweDQwLCAweDYzLCAweDAwLCAweDBDLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHgyMCwgMHgyNSwgMHg0MCwgMHg4MSwgMHgxNCwgMHgwNCwgMHgwMiwKKzB4RDAsIDB4MDgsIDB4NDAsIDB4MjAsIDB4MDAsIDB4OUQsIDB4MDAsIDB4MDQsIDB4MTIsIDB4RDAsIDB4NDgsIDB4NDEsIDB4MjEsCisweDIxLCAweDg1LCAweDA0LCAweDMwLCAweDAyLCAweEQwLCAweDA4LCAweDQwLCAweDIzLCAweDAxLCAweEFELCAweDAwLCAweEI0LAorMHgwMywgMHhEMCwgMHgwQiwgMHg0MCwgMHg2QSwgMHgwMiwgMHhBRCwgMHgwMSwgMHg4NCwgMHgyNiwgMHgxMCwgMHgxQSwgMHg0MCwKKzB4NjgsIDB4MDAsIDB4OTksIDB4MDQsIDB4MDUsIDB4MDIsIDB4RDAsIDB4MEMsIDB4NDAsIDB4NEIsIDB4MDAsIDB4MDQsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDI4LCAweDI1LCAweDAwLCAweEQxLCAweDAwLCAweDQ0LCAweDAyLCAweEQwLAorMHgwOSwgMHg0MCwgMHgyNCwgMHg4MCwgMHg5RCwgMHg0MCwgMHg0NCwgMHgwMiwgMHhEMCwgMHgwOSwgMHg0MCwgMHgyNCwgMHgwMCwKKzB4OTEsIDB4ODAsIDB4NzQsIDB4MDIsIDB4RDIsIDB4MDksIDB4NDAsIDB4MjcsIDB4MDAsIDB4OUQsIDB4MDAsIDB4RjQsIDB4ODIsCisweEQwLCAweDBCLCAweDQwLCAweDJGLCAweDAwLCAweEJELCAweDAwLCAweEM0LCAweDAyLCAweDEwLCAweDBCLCAweDQwLCAweDJDLAorMHgxMCwgMHg5OSwgMHgwMSwgMHg0NCwgMHgwMiwgMHhEMCwgMHgwOSwgMHg0MCwgMHg2MywgMHgyMCwgMHgwNCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4MDAsIDB4MjUsIDB4MDAsIDB4OTMsIDB4MDAsIDB4NDgsIDB4MDIsIDB4RjAsIDB4MDgsCisweEMwLCAweDI0LCAweDAwLCAweDlGLCAweDIwLCAweDRDLCAweDAyLCAweEYwLCAweDA5LCAweEMwLCAweDI1LCAweDAwLCAweDk1LAorMHgwMCwgMHg3NCwgMHgwMiwgMHhFMCwgMHgwOSwgMHg4MCwgMHgyNywgMHgwMCwgMHg5RiwgMHg0MCwgMHg3RSwgMHgwMiwgMHhGMCwKKzB4MDksIDB4QzAsIDB4QTYsIDB4MDIsIDB4OUYsIDB4MDMsIDB4NEMsIDB4MkEsIDB4MzQsIDB4QjksIDB4QzAsIDB4QTQsIDB4MDAsCisweDhCLCAweEEwLCAweDRDLCAweDgyLCAweEYwLCAweDA5LCAweEMwLCAweDE3LCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgxNiwgMHgwOCwgMHgyNCwgMHgwMCwgMHg5RiwgMHg4MCwgMHg3QywgMHgwMiwgMHhGMCwgMHgwOSwgMHhEMCwKKzB4MjcsIDB4MDAsIDB4OUYsIDB4MDAsIDB4N0MsIDB4MDIsIDB4NzAsIDB4MDksIDB4QzgsIDB4MjcsIDB4MDAsIDB4OUYsIDB4MDAsCisweDdDLCAweDAyLCAweEYwLCAweDA5LCAweEMwLCAweDI3LCAweDAwLCAweDlGLCAweDAwLCAweDdDLCAweDAyLCAweEYwLCAweDA5LAorMHhDMCwgMHgyNSwgMHgwMCwgMHg5RiwgMHgwMywgMHg1QywgMHgwNiwgMHhGMCwgMHgxOSwgMHhEMCwgMHgyNywgMHg0MCwgMHg5NywKKzB4MjAsIDB4N0MsIDB4MTIsIDB4RjAsIDB4MDksIDB4QzAsIDB4NUIsIDB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDE0LCAweDA4LCAweDA1LCAweDAwLCAweDFGLCAweDAwLCAweDdFLCAweDAwLCAweEYwLCAweDAxLCAweEMwLCAweDA3LAorMHgwMCwgMHgxMywgMHgxMCwgMHg3QywgMHgwMCwgMHhGMiwgMHg4MSwgMHhEMSwgMHgwNiwgMHgwMCwgMHgxRiwgMHgwMCwgMHg3QywKKzB4NjAsIDB4RjIsIDB4MDEsIDB4QzAsIDB4MDcsIDB4MDAsIDB4MUYsIDB4MDAsIDB4N0MsIDB4MDAsIDB4MzAsIDB4MDEsIDB4QzAsCisweDA3LCAweDAwLCAweDAzLCAweDAwLCAweDNDLCAweDAwLCAweEYwLCAweDAwLCAweEMwLCAweDAzLCAweDAwLCAweDFGLCAweDAwLAorMHg0RCwgMHgwNCwgMHhGMCwgMHgwMSwgMHhDMCwgMHg1MywgMHgyMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MTAsIDB4MjAsIDB4MTAsIDB4MDAsIDB4N0QsIDB4MDAsIDB4NzYsIDB4NDUsIDB4RDAsIDB4MDcsIDB4QzAsIDB4MTUsIDB4MjAsCisweDY1LCAweDAwLCAweEY0LCAweDA5LCAweEQwLCAweDI3LCAweEQwLCAweDE2LCAweDAwLCAweDc3LCAweDAwLCAweEY0LCAweDA5LAorMHhEMiwgMHgwNywgMHg0MCwgMHgxRiwgMHgwMCwgMHg1RCwgMHgwMCwgMHg3NCwgMHgwMSwgMHgxNCwgMHgwNCwgMHhDMCwgMHgxNSwKKzB4MDAsIDB4NTEsIDB4MDEsIDB4NzQsIDB4MDEsIDB4RDAsIDB4MTUsIDB4NDAsIDB4NTcsIDB4MTAsIDB4N0QsIDB4NDEsIDB4QzQsCisweDAxLCAweEQwLCAweDA1LCAweDQwLCAweDQzLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLAorMHhBMCwgMHgzMiwgMHgwMCwgMHhERCwgMHg0MCwgMHgzNCwgMHgwNywgMHhEMCwgMHgwNCwgMHg0MCwgMHgzMSwgMHg4MCwgMHg0OSwKKzB4MDAsIDB4MzQsIDB4NEIsIDB4RDAsIDB4M0QsIDB4NDAsIDB4MzYsIDB4MzAsIDB4Q0QsIDB4MDAsIDB4MzQsIDB4MDcsIDB4RDgsCisweDBDLCAweDQwLCAweDMzLCAweDAwLCAweENELCAweDAwLCAweDM0LCAweDAzLCAweDEwLCAweDBDLCAweDQwLCAweDMxLCAweDAwLAorMHhDMSwgMHgyMSwgMHgzNCwgMHgwMywgMHhEMCwgMHgxQywgMHg0MCwgMHg3MywgMHgwMCwgMHhDRCwgMHgwMCwgMHgwNCwgMHgwNywKKzB4RDAsIDB4MEMsIDB4NDAsIDB4NDMsIDB4MDAsIDB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4ODAsCisweDM4LCAweDAwLCAweDZELCAweDAwLCAweEI0LCAweDAzLCAweEQwLCAweDBBLCAweDQwLCAweDc5LCAweDAyLCAweDZELCAweDEwLAorMHhCNiwgMHgwMywgMHhEMCwgMHgwRSwgMHg1OCwgMHgyQSwgMHgwMCwgMHg2RCwgMHgwMCwgMHhCNCwgMHgwMSwgMHhEOSwgMHgwMiwKKzB4NDAsIDB4MUIsIDB4MDAsIDB4QUQsIDB4MDAsIDB4QjQsIDB4MDcsIDB4MTAsIDB4MDYsIDB4NDAsIDB4NzEsIDB4NDAsIDB4RTEsCisweDEwLCAweEI0LCAweDAyLCAweEQwLCAweDBFLCAweDQxLCAweDNCLCAweDA0LCAweEVELCAweDAyLCAweDg0LCAweDQzLCAweEQwLAorMHgwQSwgMHg0MCwgMHgxMywgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgxOCwgMHg3OCwKKzB4MDAsIDB4QUYsIDB4MDEsIDB4QjQsIDB4MDcsIDB4RDAsIDB4MTYsIDB4QzAsIDB4N0QsIDB4MDAsIDB4NkIsIDB4MDEsIDB4QkMsCisweDA2LCAweEYwLCAweDE2LCAweEQwLCAweDdBLCAweDAwLCAweEFGLCAweDAxLCAweEI0LCAweDA2LCAweEYwLCAweDFFLCAweEMwLAorMHg2QiwgMHgwMCwgMHg2RiwgMHgwMSwgMHhCOCwgMHgwNywgMHgzMCwgMHgxQSwgMHhDMCwgMHg1OSwgMHgwMCwgMHg2MywgMHgwMSwKKzB4QkMsIDB4MDUsIDB4RjAsIDB4MTYsIDB4QzAsIDB4NUIsIDB4MDAsIDB4RUYsIDB4MDEsIDB4OEMsIDB4MDcsIDB4RjAsIDB4MUUsCisweEMwLCAweDUzLCAweDYwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweEI4LCAweDM1LCAweDAwLAorMHgxRiwgMHgwMCwgMHg3QywgMHgwMywgMHhGMCwgMHgwMSwgMHhDMCwgMHg3NSwgMHgyMCwgMHg1NywgMHgwMCwgMHg3QywgMHgwMCwKKzB4RjAsIDB4MDUsIDB4RDAsIDB4MjcsIDB4MDAsIDB4MTcsIDB4MDAsIDB4N0MsIDB4MDAsIDB4RjAsIDB4MDEsIDB4QzAsIDB4MDcsCisweDAwLCAweDFGLCAweDAwLCAweDdDLCAweDAzLCAweEYwLCAweDAxLCAweEMyLCAweDE1LCAweDAwLCAweDVGLCAweDAwLCAweDdDLAorMHgwMCwgMHhGOCwgMHgwNSwgMHhDMCwgMHgxNywgMHgwMCwgMHg1RiwgMHgwMCwgMHg3QywgMHgwMywgMHhGMCwgMHgwRCwgMHhDMCwKKzB4NDMsIDB4NjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDYsIDB4MjgsIDB4N0QsIDB4MDAsIDB4RkYsCisweDAxLCAweEJDLCAweDA3LCAweEY4LCAweDg3LCAweEMwLCAweDdDLCAweDAwLCAweEIzLCAweDg5LCAweENDLCAweDA1LCAweEEwLAorMHgxQiwgMHhDMCwgMHg3RiwgMHgyMCwgMHhGMywgMHgwMSwgMHhEQywgMHgwNywgMHgzMCwgMHgxRiwgMHhDMCwgMHg3QywgMHgwMCwKKzB4RjMsIDB4MDEsIDB4Q0MsIDB4MDYsIDB4RjIsIDB4MUYsIDB4QzAsIDB4N0YsIDB4MDAsIDB4QkYsIDB4MDEsIDB4Q0MsIDB4MDcsCisweEYwLCAweDFCLCAweEMwLCAweDZDLCAweDAwLCAweEYzLCAweDAxLCAweEZDLCAweDA1LCAweDMwLCAweDFGLCAweEMwLCAweDFCLAorMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwgMHgwMCwgMHgzOSwgMHgwMCwgMHg2RCwgMHgwMCwKKzB4OUMsIDB4MDMsIDB4MTgsIDB4MEEsIDB4NDAsIDB4MzgsIDB4MDAsIDB4QTEsIDB4MDAsIDB4QzQsIDB4MDMsIDB4MTEsIDB4MEEsCisweDQwLCAweDJCLCAweDAwLCAweDcxLCAweDAwLCAweEM0LCAweDAyLCAweDEwLCAweDAyLCAweDQwLCAweDFDLCAweDAwLCAweEExLAorMHgwMCwgMHg4NCwgMHgwQSwgMHhEMCwgMHgwNiwgMHg0MCwgMHgzQiwgMHgwMCwgMHhBRCwgMHgwMCwgMHg4NCwgMHgwMiwgMHhEMCwKKzB4MEEsIDB4NDAsIDB4MjgsIDB4MTIsIDB4RTEsIDB4MDAsIDB4QjQsIDB4MDAsIDB4QjAsIDB4MEUsIDB4NDAsIDB4NTcsIDB4MjAsCisweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDM5LCAweDAwLCAweEFELCAweDAwLCAweEI0LAorMHgwMywgMHg1MCwgMHg4NywgMHg0MCwgMHgzQywgMHgwMCwgMHhCMSwgMHgwMCwgMHg4NCwgMHgyMCwgMHgxMCwgMHgwMiwgMHg0MCwKKzB4QkYsIDB4MDAsIDB4QTksIDB4MDAsIDB4ODQsIDB4MDEsIDB4MTAsIDB4MEYsIDB4NDAsIDB4MkEsIDB4MDAsIDB4NzksIDB4MDIsCisweDg0LCAweDAyLCAweEQwLCAweDBBLCAweDQwLCAweDFCLCAweDAwLCAweDBELCAweDAwLCAweDg0LCAweDAxLCAweEQwLCAweDgwLAorMHg0MCwgMHgwMCwgMHgwMCwgMHhBMSwgMHgwMCwgMHhGNCwgMHg0MCwgMHgxMCwgMHgwRSwgMHg0MCwgMHgwMywgMHgwMCwgMHgwNCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MjgsIDB4RjEsIDB4MDAsIDB4MUQsIDB4MDIsIDB4MzQsIDB4NDMsCisweDEwLCAweDAwLCAweDQxLCAweEIwLCAweDA0LCAweDgxLCAweDA0LCAweDA0LCAweDM0LCAweDkxLCAweDM4LCAweDQwLCAweDIzLAorMHgwMCwgMHgwOSwgMHgwRCwgMHgwNCwgMHgzNCwgMHgxMCwgMHgwMCwgMHg0MSwgMHg0MiwgMHg0MywgMHgwOSwgMHgyMCwgMHgwNCwKKzB4MDYsIDB4RDAsIDB4MTAsIDB4NDAsIDB4MTMsIDB4MDAsIDB4MEQsIDB4MTIsIDB4MDQsIDB4MDAsIDB4RDAsIDB4MDAsIDB4NDAsCisweDgwLCAweDAwLCAweDAxLCAweDIwLCAweDM0LCAweDg0LCAweDkwLCAweDBDLCAweDQwLCAweDBCLCAweDIwLCAweDA0LCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwgMHhBOCwgMHhCNSwgMHgwMCwgMHhERiwgMHgwNSwgMHg3QywgMHgwNywgMHg1MCwKKzB4MjQsIDB4QzAsIDB4MzgsIDB4MDAsIDB4OTMsIDB4MDIsIDB4NDQsIDB4MEIsIDB4QjAsIDB4MDUsIDB4QzAsIDB4NzMsIDB4MDAsCisweEQ5LCAweDAyLCAweDQ0LCAweDBCLCAweDEwLCAweDJDLCAweEMwLCAweEI2LCAweDAwLCAweENCLCAweDAwLCAweDBDLCAweDY5LAorMHhGMSwgMHgyRCwgMHg0MSwgMHg2NywgMHgwMCwgMHhERiwgMHgwMywgMHg0RCwgMHgwNywgMHhGMCwgMHhCRCwgMHhEMCwgMHg3NCwKKzB4NDAsIDB4RDMsIDB4MDAsIDB4M0MsIDB4MDUsIDB4MzAsIDB4MEQsIDB4QzAsIDB4NTcsIDB4MDAsIDB4MDYsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDAwLCAweDM3LCAweDA2LCAweDlGLCAweDEwLCAweDVDLCAweDIzLCAweDcwLCAweDFELAorMHhDMCwgMHg3NywgMHgwMCwgMHg5RiwgMHgwMywgMHg3QywgMHgwMiwgMHg3MSwgMHg4NSwgMHhDMCwgMHgzNywgMHgyMiwgMHg5NywKKzB4MDIsIDB4N0MsIDB4MDEsIDB4RjAsIDB4M0QsIDB4QzAsIDB4MjUsIDB4MDAsIDB4OTcsIDB4MDgsIDB4N0MsIDB4MDEsIDB4RjAsCisweDA1LCAweEMxLCAweDYzLCAweDAwLCAweERGLCAweDgxLCAweDdDLCAweDA2LCAweEYwLCAweDFELCAweEMyLCAweDc3LCAweDE0LAorMHhERiwgMHgwMywgMHg3QywgMHgwMSwgMHhGMCwgMHg4RCwgMHhDMiwgMHgxNywgMHgyMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4ODAsIDB4MDgsIDB4M0YsIDB4MDAsIDB4N0YsIDB4MDAsIDB4Q0MsIDB4MEYsIDB4RjAsIDB4MDcsIDB4QzAsCisweDNFLCAweDAwLCAweEIzLCAweDAwLCAweEZDLCAweDE3LCAweDMyLCAweDAzLCAweEM1LCAweDJDLCAweDAwLCAweDczLCAweDAwLAorMHhDRSwgMHgwMiwgMHgzMCwgMHgxMywgMHhDMCwgMHgxQywgMHgwMSwgMHg3MiwgMHgwMCwgMHhDQywgMHgwMSwgMHgzMCwgMHgwQiwKKzB4QzAsIDB4MEYsIDB4MDIsIDB4NzMsIDB4MDAsIDB4RkMsIDB4MDEsIDB4RjAsIDB4MDcsIDB4QzAsIDB4MUYsIDB4MDAsIDB4RkYsCisweDAwLCAweENDLCAweDAxLCAweDMwLCAweDBGLCAweEMwLCAweDAzLCAweDIyLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHg4MSwgMHgyMCwgMHgzNiwgMHgwMCwgMHgxRCwgMHgwMCwgMHg0NCwgMHgwMywgMHhEMCwgMHgwNSwgMHg0MCwgMHgzNCwKKzB4MjAsIDB4OTEsIDB4MDksIDB4NzQsIDB4MDQsIDB4MTAsIDB4MTAsIDB4NDEsIDB4MjQsIDB4MDAsIDB4MTEsIDB4MDIsIDB4NDQsCisweDAwLCAweDEwLCAweDExLCAweDQwLCAweEM0LCAweDAxLCAweDExLCAweDAwLCAweDQ0LCAweDA5LCAweDEwLCAweDAxLCAweEMwLAorMHgwNSwgMHgwMCwgMHg1MSwgMHgyMCwgMHg3NCwgMHgwMCwgMHhEMCwgMHgwNSwgMHg0MCwgMHgxNywgMHgxMCwgMHhERCwgMHgwMCwKKzB4NDQsIDB4MDUsIDB4MTAsIDB4MEQsIDB4NDAsIDB4MDcsIDB4MDIsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAxLCAweEEwLCAweDM2LCAweDAwLCAweERELCAweDA0LCAweDQ0LCAweDAyLCAweEQ4LCAweDg1LCAweDQwLCAweDM2LCAweDAwLAorMHg5MSwgMHgwMiwgMHgxNCwgMHgwMSwgMHgxOCwgMHgxNSwgMHg0MCwgMHgzNCwgMHg4MSwgMHhDOSwgMHgwNiwgMHgwNCwgMHgwMywKKzB4MTAsIDB4NkQsIDB4NDAsIDB4MzIsIDB4ODAsIDB4RDUsIDB4MDAsIDB4NDQsIDB4MDAsIDB4MTAsIDB4MEQsIDB4NDAsIDB4MjcsCisweDAwLCAweDkxLCAweDAwLCAweDc0LCAweDAzLCAweEQwLCAweDA5LCAweDQwLCAweDI3LCAweDAwLCAweENELCAweDg2LCAweDQ0LAorMHgwNCwgMHgxMCwgMHgxRCwgMHg0MCwgMHgwNywgMHgwOCwgMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwKKzB4MDAsIDB4MzAsIDB4MDAsIDB4OEQsIDB4MDAsIDB4MDUsIDB4MDIsIDB4RDAsIDB4MEMsIDB4NDAsIDB4MzYsIDB4MDAsIDB4ODEsCisweDAwLCAweDM0LCAweDAyLCAweDE0LCAweDBELCAweDUwLCAweDM0LCAweDAwLCAweDgwLCAweDAwLCAweDA1LCAweDAyLCAweDE0LAorMHgwRCwgMHg2MCwgMHgyMiwgMHg0MCwgMHg5NSwgMHhBMCwgMHgwNCwgMHgwMCwgMHgxMCwgMHgwNCwgMHg0MCwgMHgyMywgMHg0MCwKKzB4ODEsIDB4MDAsIDB4MzQsIDB4MDIsIDB4RDAsIDB4MDgsIDB4NDAsIDB4MjMsIDB4MDAsIDB4Q0QsIDB4MDAsIDB4MDQsIDB4MDQsCisweDE0LCAweDBDLCAweDQwLCAweDQzLCAweDIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LAorMHgzNiwgMHgwMCwgMHg1RiwgMHgwMCwgMHg0QywgMHgwMywgMHhGMCwgMHgwNSwgMHhDMCwgMHgzNiwgMHgwMCwgMHg5MywgMHgwMCwKKzB4N0MsIDB4MDEsIDB4MzAsIDB4MDEsIDB4QzAsIDB4MjQsIDB4MTAsIDB4NUIsIDB4ODAsIDB4NDYsIDB4ODEsIDB4MzAsIDB4MDEsCisweEMwLCAweDE2LCAweDAwLCAweDU3LCAweDAwLCAweDRDLCAweDAwLCAweDMwLCAweDA5LCAweEMwLCAweDA3LCAweDAwLCAweDEzLAorMHgwMCwgMHg3QywgMHgwMSwgMHhGMCwgMHgwMSwgMHhDMCwgMHgwNywgMHgwMCwgMHhERiwgMHgwMCwgMHg0RCwgMHgwMCwgMHgzMCwKKzB4MEQsIDB4QzAsIDB4MDMsIDB4NDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4QjgsIDB4M0YsCisweDAwLCAweDNGLCAweDAwLCAweEZDLCAweDAzLCAweEYwLCAweDA2LCAweEMwLCAweDM5LCAweDAwLCAweEFGLCAweDgwLCAweEZDLAorMHgwMCwgMHhGMCwgMHgwQiwgMHhDMCwgMHgyQiwgMHg4MCwgMHgzRiwgMHgwMCwgMHhGRSwgMHgwMCwgMHhGMCwgMHgwMiwgMHhDMCwKKzB4MEQsIDB4MDAsIDB4MkIsIDB4MDAsIDB4RkMsIDB4MDAsIDB4RjAsIDB4MDMsIDB4QzAsIDB4MEQsIDB4MDAsIDB4M0YsIDB4MDAsCisweEZDLCAweDAwLCAweEYwLCAweDAzLCAweEMwLCAweDBGLCAweDAwLCAweEZGLCAweDAwLCAweEJDLCAweDAwLCAweEYwLCAweDBGLAorMHhDMCwgMHgxNywgMHgyMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHhBMCwgMHgyRiwgMHgwMCwKKzB4RkYsIDB4MDEsIDB4RkMsIDB4MDIsIDB4RjAsIDB4MEYsIDB4QzAsIDB4NUQsIDB4MDAsIDB4NkYsIDB4MDEsIDB4Q0MsIDB4MDYsCisweEYxLCAweDBGLCAweEMwLCAweDdDLCAweDAwLCAweDMzLCAweDAzLCAweEVDLCAweDI0LCAweEIyLCAweENGLCAweEM4LCAweDNDLAorMHgyMSwgMHhGQiwgMHg4NCwgMHhEQywgMHg4NywgMHhCMCwgMHgwRiwgMHg0MCwgMHg1QywgMHgwMiwgMHgzRiwgMHgwOCwgMHhBQywKKzB4ODUsIDB4QjAsIDB4MEYsIDB4QzIsIDB4NUYsIDB4MDAsIDB4MzcsIDB4ODAsIDB4Q0QsIDB4MDYsIDB4OTAsIDB4MEIsIDB4ODAsCisweDBFLCAweDAwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDI3LCAweDAwLCAweERELAorMHgwMSwgMHg3NCwgMHgwMCwgMHhEMCwgMHgzRCwgMHg0MiwgMHg2MCwgMHgwMCwgMHgxRCwgMHgwMSwgMHg0NCwgMHgwNiwgMHhEMiwKKzB4MUQsIDB4NDAsIDB4N0MsIDB4MDAsIDB4MTEsIDB4MjAsIDB4NDQsIDB4MTAsIDB4MTAsIDB4QUYsIDB4NDAsIDB4N0MsIDB4MDIsCisweEYxLCAweDAyLCAweDQ0LCAweDA3LCAweDE0LCAweDZELCAweDQwLCAweDA0LCAweDAxLCAweDlELCAweDA0LCAweDU0LCAweDg1LAorMHgxMCwgMHg5RiwgMHgwMCwgMHg0NywgMHg0MCwgMHg5MywgMHg4QiwgMHg0NCwgMHg1MiwgMHgxMCwgMHgwOSwgMHg0MCwgMHgwRCwKKzB4MDAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTEsIDB4QTAsIDB4MDMsIDB4MDAsIDB4Q0QsIDB4MDAsCisweDM0LCAweDAwLCAweEQwLCAweDJDLCAweDQwLCAweDMxLCAweDAwLCAweDRELCAweDAwLCAweDA0LCAweDAyLCAweEQwLCAweDBDLAorMHg2MCwgMHgzMCwgMHgyMCwgMHgxMCwgMHgwNCwgMHg2NCwgMHgxMCwgMHg5MCwgMHg0QywgMHg0OCwgMHgzMCwgMHgxMCwgMHhDOSwKKzB4MDgsIDB4MzQsIDB4MDMsIDB4MDIsIDB4MkMsIDB4NDUsIDB4MTIsIDB4MDEsIDB4MEQsIDB4MDAsIDB4MjQsIDB4MDEsIDB4RDAsCisweDBDLCAweDQyLCAweDMzLCAweDEwLCAweDA5LCAweDIwLCAweDA0LCAweDAzLCAweDEwLCAweDAwLCAweDQwLCAweDRELCAweDgwLAorMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHhBOCwgMHg2NCwgMHgwMCwgMHhERCwgMHgwMCwgMHg3NCwKKzB4MDQsIDB4QzAsIDB4MEQsIDB4NjAsIDB4MjQsIDB4MDAsIDB4MUQsIDB4MDQsIDB4NDUsIDB4MDIsIDB4RDAsIDB4MEQsIDB4NDAsCisweDM0LCAweDA4LCAweDExLCAweDAwLCAweDY0LCAweDQ0LCAweDEwLCAweDBELCAweDQ4LCAweDM0LCAweDgwLCAweEQxLCAweDAwLAorMHg2NCwgMHgwMywgMHg1MCwgMHgwRCwgMHg0MCwgMHgwNiwgMHgwNCwgMHg4RCwgMHgxMSwgMHg3NCwgMHg4NSwgMHg1NCwgMHgwRCwKKzB4NDIsIDB4MDcsIDB4MDAsIDB4NTUsIDB4MDgsIDB4NDQsIDB4MDIsIDB4MTAsIDB4MTEsIDB4NDEsIDB4MEQsIDB4MjAsIDB4MDIsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweEEwLCAweDY2LCAweDAwLCAweERGLCAweDAwLCAweDc4LCAweDRFLAorMHhFMCwgMHgwRCwgMHhDMCwgMHgyNSwgMHgxMCwgMHg0RiwgMHgwNywgMHg0QywgMHgyMiwgMHhGMCwgMHg5RCwgMHg0MCwgMHgzNCwKKzB4NDAsIDB4MTMsIDB4MEQsIDB4MkMsIDB4MEMsIDB4QjIsIDB4MEQsIDB4RDAsIDB4MzQsIDB4MTAsIDB4REIsIDB4MDAsIDB4NzQsCisweDAzLCAweDMwLCAweDBELCAweDUwLCAweDA2LCAweDI4LCAweDlFLCAweDAxLCAweDZDLCAweDE0LCAweEYwLCAweDBELCAweEMwLAorMHgxMywgMHgwMCwgMHgxQiwgMHgwMywgMHg0QywgMHgwNiwgMHgzMCwgMHgxOSwgMHhDMCwgMHgyMSwgMHg4MCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4ODgsIDB4MkQsIDB4MDAsIDB4RkYsIDB4MDAsIDB4RkMsIDB4MDIsIDB4RjAsCisweDBFLCAweEMwLCAweDJGLCAweDAwLCAweDdGLCAweDAwLCAweEZDLCAweDA2LCAweEYwLCAweDBFLCAweEMwLCAweDNGLCAweDAwLAorMHhGRiwgMHgwMCwgMHhEQywgMHgwMiwgMHg3MCwgMHgwRSwgMHhDMCwgMHgzRiwgMHgwMCwgMHhFRiwgMHgwMCwgMHhEQywgMHgwMywKKzB4QjAsIDB4MEYsIDB4QzIsIDB4MEQsIDB4MTAsIDB4QkQsIDB4MDAsIDB4REMsIDB4MDEsIDB4QjQsIDB4MEYsIDB4QzAsIDB4OEYsCisweDUwLCAweDZCLCAweDAwLCAweEZDLCAweDI2LCAweEY0LCAweDBBLCAweEMwLCAweDFGLCAweDIwLCAweDA2LCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHgwOCwgMHg4NSwgMHgwMiwgMHhERiwgMHgwMCwgMHg3QywgMHg0MCwgMHgzMCwgMHgwRCwKKzB4QzAsIDB4MzcsIDB4MDAsIDB4NTcsIDB4MDIsIDB4NEMsIDB4NDIsIDB4RjAsIDB4MEQsIDB4QzAsIDB4MzcsIDB4MDIsIDB4REYsCisweDAwLCAweDdDLCAweDBBLCAweEYwLCAweDBELCAweEM0LCAweDM0LCAweDBBLCAweERGLCAweDAwLCAweDVDLCAweDIzLCAweDcwLAorMHgwRCwgMHhDMSwgMHgxNSwgMHgwMCwgMHgxMywgMHgwMiwgMHg0QywgMHgwMCwgMHg1MCwgMHgwRCwgMHhDOSwgMHgzNiwgMHgwOCwKKzB4MTcsIDB4MTIsIDB4NEQsIDB4MDMsIDB4RjAsIDB4MDksIDB4ODIsIDB4MkIsIDB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDEzLCAweEEwLCAweDI0LCAweDAwLCAweERELCAweDYwLCAweDcwLCAweDE4LCAweDEwLCAweDBGLCAweDQwLAorMHgyNywgMHgwMCwgMHg1MSwgMHgwNSwgMHg0NCwgMHg0RSwgMHhEMCwgMHgwRCwgMHg0MCwgMHgzMywgMHgwMCwgMHhDRCwgMHgwMCwKKzB4NzQsIDB4MDIsIDB4RDAsIDB4QUYsIDB4NDAsIDB4MzgsIDB4MDIsIDB4RkQsIDB4MDAsIDB4MzQsIDB4MkIsIDB4QjAsIDB4MkUsCisweDQwLCAweDA0LCAweDQwLCAweDExLCAweDA4LCAweDJDLCAweDAzLCAweDEwLCAweDJGLCAweDQ4LCAweDA0LCAweDAyLCAweDUxLAorMHgwMCwgMHg0NCwgMHgxMywgMHhEMCwgMHgwOSwgMHg0MCwgMHg0RiwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDMsIDB4MjAsIDB4QzAsIDB4MDQsIDB4Q0QsIDB4MDAsIDB4MzQsIDB4MEUsIDB4NTAsIDB4MEMsIDB4NDAsIDB4MTMsCisweDAwLCAweDA1LCAweDA2LCAweDA1LCAweDBFLCAweEQwLCAweDA4LCAweDQwLCAweEYzLCAweDA0LCAweDBELCAweDAwLCAweDM0LAorMHgwMCwgMHhEMCwgMHgwQywgMHg2MCwgMHg3MCwgMHgwMCwgMHhDRCwgMHgwNywgMHgzNCwgMHgwMywgMHgxMCwgMHgwQywgMHg0OCwKKzB4MTEsIDB4ODAsIDB4MDQsIDB4MDAsIDB4MDQsIDB4MDAsIDB4NDAsIDB4M0MsIDB4NDAsIDB4OTAsIDB4MDAsIDB4NDksIDB4MDIsCisweDQ0LCAweDEzLCAweEQxLCAweDUwLCAweDQ0LCAweDBGLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwNCwgMHgwMCwgMHg1OCwgMHgwMCwgMHhFRCwgMHgwMSwgMHhCNCwgMHgwMSwgMHg1MCwgMHgxRSwgMHg0MCwgMHg2QiwgMHgwMCwKKzB4MzEsIDB4MDEsIDB4ODQsIDB4MDYsIDB4RDAsIDB4MUEsIDB4NDAsIDB4N0IsIDB4MDAsIDB4RUQsIDB4MDEsIDB4QjQsIDB4MDcsCisweEQwLCAweDFDLCAweDQwLCAweDc4LCAweDAwLCAweEVELCAweDMxLCAweEI0LCAweDA3LCAweDkwLCAweDFFLCAweDQwLCAweDQ4LAorMHg4MCwgMHhFNSwgMHgwMSwgMHhFNCwgMHgwNCwgMHgxMCwgMHg5QywgMHg0MCwgMHg0QywgMHgwMSwgMHhDOSwgMHgwMSwgMHg4NCwKKzB4MTYsIDB4RDgsIDB4OUEsIDB4NDAsIDB4M0YsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsCisweDFBLCAweDkwLCAweDAyLCAweENGLCAweDAwLCAweDdDLCAweDIzLCAweDcwLCAweDBDLCAweEMwLCAweDMzLCAweDAwLCAweDA3LAorMHgwNCwgMHgwQywgMHgwMiwgMHhGMCwgMHg0QywgMHhDMCwgMHgzMywgMHgwMSwgMHhDRCwgMHgwMCwgMHgzQywgMHgwMiwgMHhGMCwKKzB4OEMsIDB4NDAsIDB4MzAsIDB4MDIsIDB4Q0YsIDB4MDAsIDB4M0MsIDB4MDMsIDB4MzAsIDB4REQsIDB4QzAsIDB4MTUsIDB4MkEsCisweDU3LCAweDI0LCAweDBDLCAweDYxLCAweDcwLCAweDhDLCAweEM5LCAweDIyLCAweDkwLCAweDg5LCAweDEyLCAweDBDLCAweDAzLAorMHhGMCwgMHgwMCwgMHhDMSwgMHg0QiwgMHg2MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHgzOCwKKzB4M0QsIDB4MDgsIDB4RkYsIDB4MDAsIDB4RkMsIDB4MTMsIDB4QjAsIDB4MEYsIDB4QzEsIDB4MkYsIDB4MDAsIDB4M0YsIDB4MDAsCisweEZDLCAweDIyLCAweEYwLCAweDBGLCAweEMwLCAweDc3LCAweDAwLCAweERGLCAweDA4LCAweEZDLCAweDIzLCAweEYwLCAweDJELAorMHg1MiwgMHgzRiwgMHgyMCwgMHhERiwgMHgwMCwgMHgzQywgMHgwMywgMHhGNCwgMHgwRCwgMHhDMCwgMHgwNywgMHgyMCwgMHhEQiwKKzB4MDAsIDB4N0MsIDB4ODEsIDB4RjAsIDB4OEYsIDB4QzIsIDB4MEIsIDB4ODEsIDB4RjcsIDB4MDAsIDB4RjAsIDB4MTIsIDB4RjAsCisweDAzLCAweEMyLCAweDBCLCAweDYwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweEEwLCAweDM3LAorMHgwMCwgMHhERiwgMHgwMCwgMHg3QywgMHgwMywgMHhGMCwgMHgwRCwgMHhDMCwgMHgyNywgMHgwMCwgMHgxRiwgMHgwMCwgMHg3QywKKzB4MDIsIDB4RjAsIDB4MDksIDB4QzAsIDB4MzcsIDB4MDAsIDB4MUYsIDB4MDAsIDB4NkMsIDB4MDEsIDB4RjAsIDB4MEQsIDB4QzAsCisweEI3LCAweDAwLCAweERGLCAweDA4LCAweDNDLCAweDAzLCAweDMxLCAweDFELCAweEM4LCAweDA3LCAweDEwLCAweDlGLCAweDAwLAorMHg0RiwgMHgwMCwgMHhGMCwgMHg0RCwgMHhDOCwgMHgxMCwgMHgwOCwgMHg5QiwgMHgwMCwgMHg0RCwgMHg4MywgMHgzMCwgMHgwMSwKKzB4QzAsIDB4NDAsIDB4MDAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4ODAsIDB4MzksIDB4MDAsCisweEVELCAweDAwLCAweEI0LCAweDAzLCAweEQzLCAweDRFLCAweDQwLCAweDJCLCAweDAwLCAweDJELCAweDAwLCAweDlDLCAweDAyLAorMHhEMCwgMHgwQSwgMHg2MCwgMHhCQiwgMHgxMCwgMHhGQywgMHgwMCwgMHg4NCwgMHgwMywgMHhEMCwgMHg0RSwgMHg0MCwgMHhCQiwKKzB4MDQsIDB4RUQsIDB4MEMsIDB4QjQsIDB4MDMsIDB4NDAsIDB4MkUsIDB4NDAsIDB4MEIsIDB4MDAsIDB4RUQsIDB4MjAsIDB4ODQsCisweDAwLCAweEQwLCAweEFFLCAweDQwLCAweDA4LCAweDAwLCAweEU3LCAweDAwLCAweEM0LCAweDgzLCAweDEyLCAweDBGLCAweDQwLAorMHg0QywgMHgwMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMiwgMHg1OSwgMHgxOCwgMHhFNSwKKzB4MDEsIDB4QjQsIDB4MDcsIDB4NTAsIDB4NUUsIDB4NDAsIDB4N0IsIDB4MDAsIDB4MkQsIDB4MDEsIDB4QjQsIDB4MDYsIDB4NTAsCisweDFFLCAweDQwLCAweDdCLCAweDAxLCAweEVELCAweDExLCAweDg0LCAweDA3LCAweEQwLCAweERFLCAweDQwLCAweDdCLCAweDAxLAorMHhFRCwgMHg4MSwgMHhCNCwgMHgwNywgMHgwMCwgMHg0RSwgMHg0MCwgMHg1QiwgMHgyMCwgMHhFRCwgMHgwMSwgMHg5NCwgMHgwNCwKKzB4RDEsIDB4NUMsIDB4NTAsIDB4NjksIDB4MDAsIDB4ODUsIDB4MDEsIDB4OTQsIDB4MEYsIDB4MTAsIDB4MTYsIDB4NDAsIDB4MTIsCisweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE2LCAweDI4LCAweEIzLCAweDgwLCAweENELCAweDQwLAorMHgzNCwgMHgyNywgMHhEMCwgMHgwQywgMHg0MCwgMHgyMywgMHgxMSwgMHg4RCwgMHgwMywgMHgxNCwgMHgwNywgMHhEMCwgMHgwQywKKzB4NDAsIDB4MzMsIDB4MDAsIDB4Q0QsIDB4MDEsIDB4MDQsIDB4NDcsIDB4RDAsIDB4MEMsIDB4NDAsIDB4MzMsIDB4MDAsIDB4Q0QsCisweDAwLCAweDM0LCAweDgzLCAweDAwLCAweDBDLCAweDQ0LCAweEEzLCAweDAyLCAweERELCAweDAyLCAweDA0LCAweDA1LCAweEQwLAorMHgwQywgMHg0NCwgMHgwMSwgMHgwMCwgMHhDNSwgMHgwNywgMHgxNCwgMHg4NywgMHgxMCwgMHg2QywgMHg0MCwgMHg1QSwgMHgyMCwKKzB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTcsIDB4MjAsIDB4MUQsIDB4MDQsIDB4NUYsIDB4MDAsIDB4RkMsCisweDA5LCAweEYwLCAweDA1LCAweEMwLCAweERGLCAweDAxLCAweDdGLCAweDQ0LCAweDc0LCAweDQ1LCAweEY4LCAweDA1LCAweEMwLAorMHgxNywgMHgwMCwgMHg3RiwgMHgwMiwgMHhDRCwgMHg5NSwgMHhGMCwgMHgwNSwgMHg0MCwgMHgxNywgMHgwMCwgMHg1RiwgMHg4MCwKKzB4M0MsIDB4MDEsIDB4MzEsIDB4MDUsIDB4QzAsIDB4NUYsIDB4MDAsIDB4N0YsIDB4MDIsIDB4OEMsIDB4QkQsIDB4RjEsIDB4MDUsCisweEMwLCAweDFELCAweDAwLCAweDY3LCAweDA3LCAweDVDLCAweDAxLCAweDM2LCAweDI3LCAweEM0LCAweDVFLCAweDAwLCAweDBDLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHgwOCwgMHgwNSwgMHgwNCwgMHgxRiwgMHgwMCwgMHg3QywgMHg4MCwKKzB4RjAsIDB4MDEsIDB4QzAsIDB4MDcsIDB4MDgsIDB4MUYsIDB4MTAsIDB4NzAsIDB4MDAsIDB4RjksIDB4MDEsIDB4QzQsIDB4MDcsCisweDAwLCAweDFGLCAweDA0LCAweDdDLCAweDAwLCAweEYwLCAweDAxLCAweEMwLCAweDA3LCAweDAwLCAweDFGLCAweDQyLCAweDdDLAorMHgwOCwgMHhGNCwgMHgwMSwgMHhDMCwgMHgwNywgMHgwMSwgMHgxRCwgMHg4MiwgMHg3QywgMHgwMCwgMHhGMCwgMHgwMSwgMHhBMCwKKzB4ODYsIDB4MDAsIDB4MTYsIDB4MDAsIDB4NjgsIDB4MDgsIDB4RjIsIDB4MDEsIDB4RDAsIDB4NDksIDB4MjAsIDB4MDQsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDY1LCAweDAxLCAweDk3LCAweDAwLCAweDdDLCAweDRFLCAweEY4LAorMHgwOSwgMHhDMCwgMHgyNywgMHgwMCwgMHg5MywgMHg4MiwgMHg3QywgMHgwMiwgMHhGMCwgMHgwOSwgMHhDOCwgMHgyNywgMHg4OSwKKzB4OTMsIDB4ODAsIDB4N0MsIDB4MDIsIDB4MzAsIDB4MTksIDB4QzAsIDB4NjQsIDB4MDAsIDB4OUYsIDB4MDAsIDB4N0MsIDB4MTYsCisweDMwLCAweDA4LCAweEMwLCAweDI0LCAweDAwLCAweDlGLCAweDM5LCAweDRDLCAweDAyLCAweDM0LCAweDI5LCAweEQ4LCAweDI0LAorMHg0MCwgMHg5MSwgMHgwOSwgMHg0QywgMHgwRSwgMHgzNCwgMHgwOCwgMHhDMCwgMHg0MCwgMHgyMCwgMHgwNCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MjAsIDB4NjYsIDB4MDEsIDB4OUQsIDB4MDAsIDB4NzQsIDB4MEUsIDB4RDAsIDB4MDksCisweDYwLCAweDIzLCAweDIwLCAweDkxLCAweDAzLCAweDc2LCAweDA2LCAweEQwLCAweDA5LCAweDQwLCAweEVCLCAweDgxLCAweDhCLAorMHgwMCwgMHg2QywgMHgwMiwgMHg1MCwgMHgxOSwgMHhEMCwgMHg2NCwgMHgxMiwgMHg5RCwgMHgwMiwgMHg3NCwgMHgwMiwgMHhCMCwKKzB4MDksIDB4QzAsIDB4MjYsIDB4MDAsIDB4OUQsIDB4NDMsIDB4NDUsIDB4MkUsIDB4MTAsIDB4MzgsIDB4NDgsIDB4QTAsIDB4MTEsCisweDkxLCAweDAxLCAweDQ0LCAweDAyLCAweDEyLCAweDI5LCAweDQwLCAweDA1LCAweDgwLCAweDA4LCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgxOCwgMHhBMCwgMHgyNCwgMHgxOCwgMHg5RCwgMHgwMCwgMHg1NCwgMHgwQSwgMHhEMCwgMHgwOSwgMHg0MCwKKzB4MjcsIDB4MDAsIDB4OTEsIDB4MTAsIDB4NzQsIDB4MEUsIDB4RDEsIDB4MDksIDB4NDgsIDB4MjUsIDB4ODAsIDB4OTEsIDB4MDAsCisweDE0LCAweDAyLCAweDEwLCAweDg4LCAweDQwLCAweDI0LCAweDAwLCAweDlELCAweDAyLCAweDU0LCAweDBBLCAweDkwLCAweDA5LAorMHg0NCwgMHgyNCwgMHgwMCwgMHg5RCwgMHgwMiwgMHg0NCwgMHgwMiwgMHgxMCwgMHgwOSwgMHg0MCwgMHgyNCwgMHgwMCwgMHg5NSwKKzB4MDIsIDB4MjUsIDB4MDIsIDB4MTAsIDB4NDksIDB4NjAsIDB4NjAsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDEwLCAweDIyLCAweDIwLCAweDA1LCAweDhELCAweDAwLCAweDM0LCAweDUyLCAweEQwLCAweDA4LCAweDQwLCAweEE3LAorMHgwOCwgMHg4MSwgMHgwMCwgMHgzNiwgMHgwMiwgMHhEQSwgMHgwOCwgMHg0MCwgMHgyMywgMHgwMCwgMHg5MSwgMHgwOCwgMHgwNCwKKzB4MjIsIDB4MTAsIDB4OEMsIDB4NjAsIDB4MjIsIDB4ODAsIDB4OEQsIDB4MjQsIDB4MzQsIDB4MDIsIDB4OTQsIDB4NTgsIDB4NDAsCisweDIyLCAweDAwLCAweDhELCAweDBDLCAweDQ0LCAweDAzLCAweDEwLCAweDBDLCAweDQwLCAweDI0LCAweDAwLCAweDg1LCAweDAwLAorMHgyNCwgMHgyMiwgMHgxMCwgMHg0OCwgMHg0MCwgMHg0MSwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MUQsIDB4QjgsIDB4MDYsIDB4MTEsIDB4MUYsIDB4MDAsIDB4NUMsIDB4MTAsIDB4RDAsIDB4NDEsIDB4NDEsIDB4MDcsIDB4NDAsCisweDEzLCAweDAwLCAweDc2LCAweDAwLCAweEYwLCAweDAxLCAweEMwLCAweDQ3LCAweDQwLCAweDExLCAweDAyLCAweDU0LCAweDA4LAorMHgzNCwgMHg2MSwgMHhDMSwgMHgxNCwgMHgxNSwgMHgxRiwgMHg4QSwgMHg3QywgMHgwMCwgMHhCNCwgMHhBMSwgMHhDNCwgMHg4NCwKKzB4MDIsIDB4MEYsIDB4MDIsIDB4NEMsIDB4MDAsIDB4MzAsIDB4NDEsIDB4QzEsIDB4MDQsIDB4MDAsIDB4MTUsIDB4MTQsIDB4NkMsCisweDA5LCAweDMwLCAweEE1LCAweEMwLCAweDc0LCAweEUwLCAweDBBLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFELAorMHhCOCwgMHgyRiwgMHgwNSwgMHg5RiwgMHgwMCwgMHhGQywgMHg1MiwgMHhGMCwgMHgwOSwgMHhDMCwgMHg2RiwgMHgyMCwgMHhCRiwKKzB4MDAsIDB4RkMsIDB4MDIsIDB4RjAsIDB4MkIsIDB4QzAsIDB4QTcsIDB4MDAsIDB4QkYsIDB4MDQsIDB4RkMsIDB4MTIsIDB4RjAsCisweDQ5LCAweDQyLCAweDI1LCAweDAwLCAweDlGLCAweDA4LCAweDdDLCAweDAyLCAweEY0LCAweDg5LCAweEMwLCAweDJELCAweDAwLAorMHhCRiwgMHgwQywgMHhGQywgMHgwMiwgMHhGMCwgMHgwOSwgMHhDMCwgMHgzRiwgMHgwMCwgMHhCQiwgMHgwMCwgMHhEQywgMHgxMiwKKzB4RjAsIDB4OEIsIDB4QzAsIDB4NzcsIDB4NjAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MUMsIDB4QTgsCisweDJGLCAweDAxLCAweDlGLCAweDAwLCAweEZDLCAweDMyLCAweEIwLCAweDA5LCAweEMwLCAweEE3LCAweDIwLCAweEJGLCAweDAwLAorMHhDRCwgMHgwMiwgMHhGMCwgMHg0OSwgMHhDNSwgMHg2RiwgMHgwMCwgMHg5QiwgMHg4MCwgMHg2RSwgMHgwMiwgMHg3OSwgMHg4QiwKKzB4QzAsIDB4MkYsIDB4MDEsIDB4QkIsIDB4MTQsIDB4QUMsIDB4ODIsIDB4MzAsIDB4MEIsIDB4Q0MsIDB4MjEsIDB4MDAsIDB4QkYsCisweDI4LCAweENDLCAweDgyLCAweDMxLCAweDRCLCAweEMxLCAweDJFLCAweDY4LCAweEEzLCAweDAwLCAweEJDLCAweDAyLCAweEYwLAorMHgwRiwgMHhDMCwgMHg3NywgMHgwMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMCwgMHgwNywKKzB4MDUsIDB4MUQsIDB4MDAsIDB4NzAsIDB4MzEsIDB4MTQsIDB4MjEsIDB4NDAsIDB4NDcsIDB4MDAsIDB4MUQsIDB4MDAsIDB4NDQsCisweDAwLCAweEQwLCAweDAxLCAweDAwLCAweDA3LCAweDAwLCAweDVBLCAweDMwLCAweDQ0LCAweEMwLCAweEQ4LCAweDgxLCAweDQwLAorMHgwNywgMHgwMCwgMHgxMSwgMHgwNCwgMHg1MSwgMHgwMCwgMHgxMCwgMHgwMSwgMHhDMCwgMHgwNSwgMHgwNCwgMHg1RCwgMHgwOCwKKzB4NEMsIDB4MDAsIDB4MTEsIDB4MDEsIDB4NDAsIDB4MDcsIDB4MzAsIDB4MTEsIDB4MDAsIDB4NjQsIDB4ODAsIDB4RDAsIDB4MDEsCisweDQwLCAweDYzLCAweDAwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDAwLCAweDIxLCAweDAzLAorMHg4RCwgMHgwMCwgMHgzNCwgMHgxMiwgMHgxMCwgMHg4OCwgMHg0MCwgMHgyMywgMHgwMCwgMHg4RCwgMHg4MCwgMHgwNCwgMHg4MiwKKzB4RDIsIDB4MDgsIDB4MEEsIDB4QTMsIDB4MDAsIDB4ODksIDB4MDQsIDB4MDQsIDB4MDIsIDB4NTAsIDB4MDgsIDB4NDAsIDB4MjMsCisweDAyLCAweDg5LCAweDE0LCAweDE0LCAweDAyLCAweDE0LCAweDA4LCAweDQwLCAweDIxLCAweDAwLCAweDhELCAweDAwLCAweDA1LAorMHgwMiwgMHgxOCwgMHgwOCwgMHg0OCwgMHgyNywgMHgyMCwgMHg4NSwgMHgwMCwgMHgzNiwgMHgwMiwgMHhEMCwgMHgwOCwgMHg0MCwKKzB4NEIsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MjAsIDB4QTUsIDB4MDAsIDB4OUQsCisweDAwLCAweDc0LCAweDEyLCAweDEwLCAweDA5LCAweDQwLCAweDI3LCAweDAwLCAweDlELCAweDEwLCAweDQ0LCAweDAyLCAweEQwLAorMHgwOSwgMHg0OCwgMHgyNiwgMHgyMCwgMHg4OSwgMHgwMCwgMHg0NCwgMHgwMiwgMHhEOCwgMHgwOSwgMHg0MCwgMHgyNywgMHgwMCwKKzB4OTEsIDB4MDAsIDB4NDQsIDB4MDIsIDB4RDAsIDB4MDksIDB4NjgsIDB4MjUsIDB4MTAsIDB4OUQsIDB4MDQsIDB4NDYsIDB4MDIsCisweDk5LCAweDBELCAweDQwLCAweDI3LCAweDAwLCAweEQ1LCAweDAwLCAweDY0LCAweDIyLCAweEQwLCAweDA5LCAweDQxLCAweDYzLAorMHgyMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHgwMCwgMHg2NSwgMHgwMCwgMHg5RCwgMHgwMCwKKzB4N0MsIDB4MDYsIDB4MzAsIDB4MDksIDB4QzAsIDB4MkYsIDB4MDYsIDB4OUYsIDB4MDAsIDB4NEMsIDB4MDIsIDB4RjAsIDB4MDksCisweEMwLCAweDI3LCAweDAwLCAweDlCLCAweDAyLCAweDY1LCAweDQyLCAweDcyLCAweDA5LCAweEMyLCAweDI3LCAweDAwLCAweDlCLAorMHgwMCwgMHg1NCwgMHgwMiwgMHgzMCwgMHgwOSwgMHhDMCwgMHgyNSwgMHgzMywgMHg5RiwgMHgyMSwgMHg0QywgMHg0NiwgMHgzMCwKKzB4MDksIDB4QzAsIDB4MjIsIDB4MDAsIDB4OTUsIDB4QTcsIDB4N0UsIDB4ODIsIDB4RTAsIDB4MzksIDB4QzAsIDB4MTcsIDB4MDAsCisweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE2LCAweDAwLCAweDI1LCAweDI1LCAweDlGLCAweDgwLCAweDNDLAorMHgwNiwgMHg3MCwgMHgwOSwgMHhFMiwgMHgyNywgMHgwMCwgMHg5RiwgMHgxMCwgMHg3QywgMHgyNiwgMHhGMCwgMHg1OSwgMHhDMCwKKzB4MjcsIDB4MEMsIDB4OTcsIDB4MDIsIDB4NUMsIDB4MDIsIDB4RjAsIDB4MDksIDB4QzAsIDB4MjcsIDB4MDAsIDB4OUYsIDB4NTAsCisweDVDLCAweDAyLCAweDMyLCAweDA5LCAweEU4LCAweDI3LCAweDEwLCAweDhGLCAweDAxLCAweDVDLCAweDBBLCAweDc0LCAweDA5LAorMHhDMSwgMHhBNiwgMHgwMCwgMHg5QiwgMHgwNSwgMHg3RSwgMHgwMiwgMHhGMCwgMHg1OSwgMHhDMCwgMHg1QiwgMHgyMCwgMHgwNCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDAsIDB4MDUsIDB4MDAsIDB4MUYsIDB4MDAsIDB4NkMsIDB4NDAsCisweEYwLCAweDAxLCAweEMwLCAweDA3LCAweDAwLCAweDFGLCAweDAwLCAweDdDLCAweDgwLCAweEIwLCAweDAxLCAweEMwLCAweDAzLAorMHgwMCwgMHgxNywgMHgwMiwgMHg3QywgMHgwOCwgMHhGMCwgMHgwMSwgMHhDMiwgMHgwMCwgMHgwMSwgMHgxRiwgMHgwMCwgMHg0QywKKzB4MDAsIDB4QjAsIDB4ODEsIDB4QzEsIDB4MDcsIDB4NDAsIDB4MTcsIDB4MjIsIDB4NUMsIDB4MTAsIDB4RjAsIDB4MDEsIDB4QzAsCisweDA3LCAweDAwLCAweDEzLCAweDAyLCAweDRDLCAweDQwLCAweDMwLCAweDAxLCAweDgyLCAweDUzLCAweDIwLCAweDA0LCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHhBMCwgMHg5QywgMHgwMCwgMHg1RCwgMHg0MCwgMHhGNCwgMHgwNSwgMHhEOCwKKzB4MDUsIDB4QzAsIDB4MTUsIDB4MjAsIDB4NkMsIDB4MDAsIDB4RjQsIDB4NDksIDB4MTAsIDB4MDUsIDB4NDAsIDB4OUYsIDB4ODAsCisweDVCLCAweDAwLCAweDc2LCAweDAxLCAweEQwLCAweDg3LCAweDQwLCAweDlDLCAweDAwLCAweDdELCAweDAyLCAweDg0LCAweDAxLAorMHhGNCwgMHgyNywgMHhDMCwgMHgxNSwgMHgwMCwgMHg3MSwgMHgwMCwgMHg4NCwgMHg4OSwgMHgxMCwgMHg3NywgMHg0MCwgMHhERiwKKzB4MDAsIDB4NzAsIDB4MDcsIDB4QzQsIDB4MDEsIDB4MTYsIDB4OTcsIDB4NDAsIDB4NDMsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDEwLCAweEE4LCAweEYyLCAweDAwLCAweENELCAweDAwLCAweDM0LCAweDIzLCAweEQwLCAweDBDLAorMHg0OCwgMHgzMSwgMHgwMCwgMHg4OCwgMHgwMiwgMHgzNiwgMHgxRiwgMHg5MCwgMHgwQywgMHg0MCwgMHgxMywgMHgxMCwgMHhDNSwKKzB4MDAsIDB4MzQsIDB4MDMsIDB4OTAsIDB4M0MsIDB4NjAsIDB4QjAsIDB4MDAsIDB4RDUsIDB4MEIsIDB4MDAsIDB4MDMsIDB4OTEsCisweDNDLCAweDQ0LCAweDMxLCAweDAwLCAweEMxLCAweDAxLCAweDM0LCAweDBBLCAweDUwLCAweDE0LCAweDQwLCAweEYyLCAweDAxLAorMHhDMSwgMHgwNywgMHgyNCwgMHgwQiwgMHgxMiwgMHg4QywgMHg0NCwgMHg0MywgMHgwMCwgMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDQsIDB4ODAsIDB4MzgsIDB4MDQsIDB4RUQsIDB4MDAsIDB4QjQsIDB4MDMsIDB4RDAsIDB4MEUsIDB4NDAsCisweDM5LCAweDAxLCAweDZELCAweDEwLCAweEI0LCAweDA0LCAweDE4LCAweDBFLCAweDQwLCAweDFCLCAweDAwLCAweEUxLCAweDQ0LAorMHhCNCwgMHgwMywgMHhEMCwgMHgzNiwgMHg0MCwgMHgzOCwgMHgwMCwgMHhFRCwgMHgwMCwgMHg4NSwgMHgwMywgMHhENCwgMHgwNiwKKzB4NjAsIDB4N0QsIDB4MDIsIDB4RTEsIDB4MDIsIDB4RTYsIDB4MDIsIDB4MTAsIDB4MDYsIDB4NDAsIDB4QkIsIDB4MjAsIDB4RTEsCisweDYxLCAweEU1LCAweDhGLCAweDUwLCAweDA2LCAweDQwLCAweDEzLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgxNCwgMHgxOCwgMHg3OCwgMHgwMCwgMHhFRiwgMHgwMSwgMHhCQywgMHgwNSwgMHhEMCwgMHgxRSwgMHhDMCwgMHhGOSwKKzB4MDAsIDB4MkIsIDB4MDEsIDB4QkMsIDB4MDQsIDB4QjEsIDB4MUUsIDB4QzAsIDB4NzMsIDB4MDAsIDB4RTUsIDB4MzUsIDB4QjQsCisweDJGLCAweEIwLCAweDFGLCAweEQwLCAweDc4LCAweDAwLCAweENGLCAweDQxLCAweDhDLCAweDA1LCAweEI0LCAweDE2LCAweEMwLAorMHg3OSwgMHgwMywgMHhGMywgMHgwMSwgMHhCRCwgMHgwNCwgMHg3MCwgMHgxNiwgMHhDMCwgMHg3QiwgMHg0MCwgMHgyMywgMHgwMSwKKzB4QUMsIDB4MDcsIDB4MzEsIDB4MUUsIDB4QzQsIDB4NTMsIDB4NjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDEwLCAweEI4LCAweDM1LCAweDAwLCAweERGLCAweDAwLCAweEZDLCAweDAxLCAweEYwLCAweDBELCAweEMwLCAweDM1LCAweDAwLAorMHgxRSwgMHgwMCwgMHgzQywgMHgwMCwgMHhGMCwgMHgwRCwgMHhDMCwgMHgzNywgMHgxMCwgMHhERiwgMHg0QSwgMHg3QywgMHgxQiwKKzB4RjAsIDB4MDUsIDB4QzgsIDB4MDcsIDB4MDAsIDB4REYsIDB4MDAsIDB4N0MsIDB4MDEsIDB4RjYsIDB4MDUsIDB4QzYsIDB4QjUsCisweDAxLCAweDVFLCAweDAwLCAweDFDLCAweDAwLCAweDUwLCAweDA1LCAweEMwLCAweDMzLCAweDAwLCAweDFGLCAweDAwLCAweDVDLAorMHgwMywgMHhCMCwgMHgwOSwgMHhDOCwgMHg0MywgMHg2MCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNiwKKzB4MjAsIDB4NUQsIDB4MDAsIDB4RjMsIDB4MDEsIDB4RkMsIDB4MjcsIDB4RjgsIDB4OEYsIDB4QzAsIDB4N0IsIDB4MDAsIDB4M0IsCisweDAxLCAweEZDLCAweDA0LCAweDcwLCAweDFGLCAweEMwLCAweDVGLCAweDAwLCAweEZGLCAweDA5LCAweEZFLCAweDI3LCAweEIwLAorMHgxQiwgMHhDMCwgMHg3NiwgMHgwMCwgMHhGRiwgMHgwMSwgMHg4QywgMHgwNywgMHgzMCwgMHg5MywgMHhDNCwgMHg3RiwgMHgwMCwKKzB4QjMsIDB4MDEsIDB4Q0MsIDB4MTYsIDB4RjgsIDB4OTcsIDB4QzAsIDB4N0IsIDB4MDAsIDB4RkIsIDB4NDEsIDB4RjgsIDB4MDQsCisweDM0LCAweDlCLCAweEMwLCAweDE4LCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE1LCAweDAwLAorMHgxOSwgMHgyMiwgMHhFMSwgMHg0MCwgMHhCNCwgMHg4MSwgMHg3OCwgMHgwRSwgMHg0MiwgMHgzQiwgMHgwMCwgMHg2MSwgMHgwMCwKKzB4QjQsIDB4MDAsIDB4RDAsIDB4MEUsIDB4NDQsIDB4MUIsIDB4MjEsIDB4RTYsIDB4MDgsIDB4RjQsIDB4MjMsIDB4MTQsIDB4MEEsCisweDQwLCAweDc4LCAweDAwLCAweEJELCAweDAwLCAweDg0LCAweDIzLCAweEYwLCAweDAwLCAweDQwLCAweDNCLCAweDAxLCAweEExLAorMHgyNCwgMHhBQywgMHgxMiwgMHhCMCwgMHgwNiwgMHhDMCwgMHgzQiwgMHgwNiwgMHhFMSwgMHgwOCwgMHhCNCwgMHgyMCwgMHhCMCwKKzB4MDMsIDB4NDgsIDB4NTUsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzksCisweDA0LCAweEUxLCAweDAwLCAweEI0LCAweDAzLCAweDU4LCAweDhFLCAweDQwLCAweDdGLCAweDA0LCAweDIxLCAweDAwLCAweEI0LAorMHgwMCwgMHg1MCwgMHgwRSwgMHg0MCwgMHgxOSwgMHgwOCwgMHhFQywgMHg0MiwgMHhCNCwgMHgwMywgMHgxMCwgMHgwMiwgMHg0MCwKKzB4MzgsIDB4MDAsIDB4NkQsIDB4MDAsIDB4QTQsIDB4MDEsIDB4MTAsIDB4MDIsIDB4NjAsIDB4MzksIDB4MjQsIDB4RTEsIDB4ODAsCisweEI0LCAweDcyLCAweDFDLCAweDA2LCAweDQ2LCAweDNCLCAweDAwLCAweEVELCAweDAwLCAweEI0LCAweDQwLCAweDUwLCAweDBBLAorMHg0MiwgMHgyMCwgMHgwMiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHgyOCwgMHgyNSwgMHgwMCwKKzB4QzEsIDB4MjAsIDB4MzQsIDB4MDgsIDB4NTgsIDB4MEMsIDB4NDAsIDB4RjMsIDB4MDAsIDB4NDksIDB4MTEsIDB4MzQsIDB4MjAsCisweEQ4LCAweDBDLCAweDQwLCAweDMzLCAweDAwLCAweENELCAweDAxLCAweDM0LCAweDAzLCAweDkwLCAweDAxLCAweDQwLCAweDAyLAorMHg4MCwgMHgwRCwgMHgwMCwgMHgyNCwgMHgwMSwgMHg5MCwgMHgwMCwgMHg0MCwgMHhGMywgMHgwMCwgMHg0MSwgMHgwMSwgMHgzNCwKKzB4MDYsIDB4OTAsIDB4MDQsIDB4NDAsIDB4RjEsIDB4MDAsIDB4QzEsIDB4MDAsIDB4MzYsIDB4MDQsIDB4MTgsIDB4MzksIDB4NDAsCisweDA5LCAweDIwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE1LCAweEEwLCAweEE1LCAweDQwLCAweEQzLAorMHgwMCwgMHg3QywgMHg2RSwgMHg3MCwgMHgwRCwgMHg0MCwgMHhGNywgMHg0MCwgMHgwQiwgMHgwNywgMHg3QywgMHgwMCwgMHg3MCwKKzB4MEQsIDB4QzIsIDB4MTUsIDB4MDAsIDB4RkYsIDB4MDEsIDB4RjQsIDB4NEYsIDB4MzAsIDB4MEQsIDB4QzAsIDB4MjQsIDB4MDAsCisweDFGLCAweDAwLCAweDI0LCAweDAyLCAweDMwLCAweDAxLCAweEMwLCAweEY5LCAweDAwLCAweDUzLCAweEEzLCAweDNDLCAweDAyLAorMHgzMCwgMHgwNCwgMHg0MCwgMHg3NywgMHgwOCwgMHhERiwgMHgyNSwgMHg3QywgMHgwNywgMHg1MCwgMHg2MSwgMHhDMCwgMHg1NCwKKzB4MDAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4MDgsIDB4MjcsIDB4MTEsIDB4REYsIDB4MDAsCisweDdDLCAweDBBLCAweDcwLCAweDBELCAweEMwLCAweDM3LCAweDAwLCAweDU3LCAweDAyLCAweDdDLCAweDAwLCAweEYwLCAweDBELAorMHhDMCwgMHgxNywgMHgwMCwgMHhENywgMHgwOCwgMHg3QywgMHg0MywgMHg3MCwgMHgwNSwgMHhEOCwgMHgyNSwgMHgxMCwgMHg5RiwKKzB4MDAsIDB4NUMsIDB4MDIsIDB4RjAsIDB4MjEsIDB4QzAsIDB4MzcsIDB4MDQsIDB4REYsIDB4MDgsIDB4NjgsIDB4MEEsIDB4RjksCisweDI1LCAweDgwLCAweDM3LCAweDAxLCAweDBFLCAweDEwLCAweDdDLCAweDBCLCAweEYyLCAweDIxLCAweEMwLCAweEI3LCAweDIwLAorMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwOCwgMHgwNywgMHgwMCwgMHhGMywgMHgwMCwgMHhGQywKKzB4MDAsIDB4RjAsIDB4MEUsIDB4QzAsIDB4M0UsIDB4MDQsIDB4MzMsIDB4MDAsIDB4RUMsIDB4MDAsIDB4RjAsIDB4MEYsIDB4QzAsCisweDdGLCAweDAwLCAweEZGLCAweDAwLCAweEVDLCAweDAzLCAweDcwLCAweDJCLCAweEMwLCAweDJCLCAweDAwLCAweDNCLCAweDIwLAorMHhGQywgMHgwMCwgMHhCMCwgMHgwMywgMHhDMCwgMHgzRiwgMHgwMCwgMHgyMywgMHgxMSwgMHhDQywgMHg0MiwgMHg3NiwgMHg4NywKKzB4QzAsIDB4M0MsIDB4MDAsIDB4M0YsIDB4MDIsIDB4QzQsIDB4MDcsIDB4RjAsIDB4MDMsIDB4QzEsIDB4MDQsIDB4MjAsIDB4MEMsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgxLCAweDIwLCAweDY2LCAweDA4LCAweEQxLCAweDQwLCAweDc2LCAweDA0LAorMHhEMCwgMHgwRCwgMHg0OCwgMHgzNSwgMHgwMCwgMHgxMSwgMHgwMCwgMHg0NCwgMHgxNCwgMHhEMCwgMHgwRCwgMHhDMCwgMHgyNywKKzB4ODAsIDB4REQsIDB4ODAsIDB4N0MsIDB4MDMsIDB4RDAsIDB4MTEsIDB4NDAsIDB4QzQsIDB4NDQsIDB4OTEsIDB4MjEsIDB4N0MsCisweDA3LCAweEIwLCAweDUxLCAweDQwLCAweDM3LCAweDAwLCAweDExLCAweDBCLCAweDQ0LCAweDA3LCAweDEwLCAweDBELCAweDQ4LAorMHhGMCwgMHgwMCwgMHgxMSwgMHgwMywgMHg0NCwgMHgwMCwgMHhEMiwgMHgzMSwgMHg0MCwgMHgwNCwgMHgwMCwgMHgwOCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4QTIsIDB4NDYsIDB4MDQsIDB4RDEsIDB4MDAsIDB4NzQsIDB4MEUsIDB4RDAsCisweDBELCAweDQwLCAweDMwLCAweDAwLCAweDExLCAweDMwLCAweDY0LCAweDA0LCAweEQwLCAweDBELCAweDQ4LCAweDE3LCAweDAxLAorMHhERCwgMHgwMCwgMHg3NCwgMHgwMywgMHhEMiwgMHgwRCwgMHg0MCwgMHg0NCwgMHgwMCwgMHg5MSwgMHg4MywgMHg3NiwgMHg0NiwKKzB4OTAsIDB4MTEsIDB4NDAsIDB4MzcsIDB4MDAsIDB4MTEsIDB4MDIsIDB4NDYsIDB4MEUsIDB4NTAsIDB4MDUsIDB4NDAsIDB4NjQsCisweDQ0LCAweEQxLCAweDIwLCAweDU0LCAweDE4LCAweEQyLCAweDM5LCAweDQwLCAweDA0LCAweDA4LCAweDBBLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhDMSwgMHgwMCwgMHgzNCwgMHgwMiwgMHhEMCwgMHgwQywKKzB4NDAsIDB4MzEsIDB4MDAsIDB4NTEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4RDAsIDB4MEMsIDB4NDAsIDB4MTEsIDB4MDAsIDB4Q0QsCisweDAwLCAweDM0LCAweDAzLCAweEQwLCAweDBDLCAweDcwLCAweDAwLCAweDAxLCAweDgxLCAweDAwLCAweDM0LCAweDAyLCAweDk5LAorMHgwMCwgMHg0MCwgMHgzNywgMHgwMCwgMHg4MSwgMHgyMCwgMHgwNCwgMHgwMiwgMHgxMCwgMHgwNCwgMHg0MCwgMHgyNCwgMHgwMCwKKzB4MDEsIDB4MDAsIDB4MTQsIDB4MDMsIDB4RDAsIDB4MDAsIDB4NTIsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDA2LCAweDAwLCAweEQzLCAweDAwLCAweDc0LCAweDAyLCAweEYwLCAweDBELCAweDQwLAorMHgzQywgMHg4MCwgMHgxMywgMHgwMCwgMHg2QywgMHgwMCwgMHhGMCwgMHgwRCwgMHg2MCwgMHgxNywgMHgwMCwgMHhGRCwgMHgwMCwKKzB4RUMsIDB4MDMsIDB4RjgsIDB4MDAsIDB4QzAsIDB4MDYsIDB4MDAsIDB4MTMsIDB4MDAsIDB4N0MsIDB4MDAsIDB4QjAsIDB4ODEsCisweEMwLCAweDNCLCAweDQwLCAweDAzLCAweDAwLCAweDRDLCAweDAyLCAweDcwLCAweDAxLCAweEMwLCAweDI0LCAweDEwLCAweEQzLAorMHgwMCwgMHgxQywgMHgwMCwgMHhGMCwgMHgwOSwgMHhDNCwgMHgwNCwgMHg2NCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDUsIDB4QjgsIDB4MkYsIDB4MDAsIDB4RkYsIDB4MDAsIDB4RkMsIDB4MDIsIDB4RjAsIDB4MEYsIDB4QzIsIDB4M0QsCisweDQwLCAweDdGLCAweDAwLCAweEZDLCAweDAwLCAweEYwLCAweDBGLCAweEMwLCAweDJGLCAweDAwLCAweEZGLCAweDAwLCAweERDLAorMHgwMywgMHhGMCwgMHgwMywgMHgwMCwgMHgwRiwgMHgyQSwgMHgzRiwgMHgwMCwgMHhEQywgMHgwMywgMHg3MCwgMHgwMywgMHhDMCwKKzB4M0YsIDB4MDAsIDB4M0YsIDB4MDAsIDB4QkMsIDB4MDMsIDB4RjAsIDB4MDcsIDB4NDAsIDB4MEYsIDB4NDAsIDB4MzcsIDB4MDAsCisweEVDLCAweDAwLCAweEYwLCAweDBCLCAweEM4LCAweDE3LCAweDYwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMywgMHhBOCwgMHg3RiwgMHgwMCwgMHgzRSwgMHgwMCwgMHhGQywgMHgwNCwgMHgzMCwgMHgxRiwgMHhDMCwgMHgyQywgMHgwMCwKKzB4QkYsIDB4MjQsIDB4Q0MsIDB4MDMsIDB4RjAsIDB4NDMsIDB4QzEsIDB4M0QsIDB4MjEsIDB4M0YsIDB4QTAsIDB4REMsIDB4MTMsCisweDMwLCAweDlFLCAweEMwLCAweDNGLCAweDAwLCAweEZGLCAweDAwLCAweDk4LCAweDE3LCAweEYwLCAweDFGLCAweEMwLCAweDRDLAorMHgwMCwgMHhGRiwgMHgwMywgMHhGQywgMHgwNywgMHhGMCwgMHg0RiwgMHhDMCwgMHg3RSwgMHgwMiwgMHhGRiwgMHgwMCwgMHhDQywKKzB4MDMsIDB4MzAsIDB4ODMsIDB4QzAsIDB4MEMsIDB4MDAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsCisweDEwLCAweDM2LCAweDA1LCAweDFELCAweDAyLCAweDQ0LCAweDAwLCAweDEwLCAweDBELCAweDUwLCAweDI0LCAweDA4LCAweDlELAorMHgwOCwgMHhDNCwgMHgyQiwgMHgxMCwgMHgzOSwgMHg0NCwgMHg3QywgMHgwMiwgMHg5RCwgMHgwMSwgMHhDNCwgMHgyMywgMHgxMSwKKzB4MUQsIDB4NDAsIDB4RkYsIDB4MDEsIDB4NUQsIDB4MDEsIDB4QzQsIDB4MEYsIDB4RDAsIDB4MEQsIDB4NDAsIDB4NDQsIDB4MDAsCisweERELCAweDAwLCAweDVDLCAweDA3LCAweEQwLCAweEJGLCAweDQwLCAweDM0LCAweDAxLCAweEY3LCAweDAzLCAweEM0LCAweDJGLAorMHgxMCwgMHgwOSwgMHg0MCwgMHgwRCwgMHgyMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMSwgMHhBMCwKKzB4MzMsIDB4MDAsIDB4MEQsIDB4MDMsIDB4NTQsIDB4MDAsIDB4OTAsIDB4MEMsIDB4NDAsIDB4MjEsIDB4MDAsIDB4OEQsIDB4MDAsCisweDA0LCAweDgzLCAweDEwLCAweDAxLCAweDYwLCAweDMwLCAweDA4LCAweDA1LCAweDAwLCAweDI0LCAweDAzLCAweDEwLCAweDRDLAorMHg0MCwgMHgzMiwgMHgwNiwgMHg4OSwgMHgwMCwgMHgwNSwgMHgyMywgMHhEMiwgMHgwQywgMHg0OCwgMHgwMCwgMHgyMCwgMHhDRCwKKzB4MDQsIDB4MzYsIDB4MDMsIDB4RDAsIDB4MEMsIDB4NDAsIDB4MzAsIDB4MDEsIDB4Q0QsIDB4MDIsIDB4MDUsIDB4MDMsIDB4MTQsCisweDQwLCAweDQ0LCAweDRDLCAweDgwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweEEwLCAweDM1LAorMHgwMCwgMHgxRCwgMHgwMSwgMHg0NCwgMHg0NiwgMHg5NCwgMHgwRCwgMHg0MCwgMHhFNSwgMHgwMCwgMHg5RCwgMHgyMCwgMHg0NCwKKzB4MDMsIDB4MTAsIDB4MTksIDB4NDAsIDB4MzQsIDB4MDAsIDB4MUQsIDB4MDEsIDB4NjQsIDB4MDMsIDB4MTEsIDB4MEQsIDB4NDAsCisweDM3LCAweDIwLCAweERDLCAweDEwLCAweDQ0LCAweDAzLCAweEQwLCAweDhDLCAweDQwLCAweDQ0LCAweDAwLCAweERDLCAweDAwLAorMHg1NCwgMHgwMywgMHhEMCwgMHgwRCwgMHg0MCwgMHgzNCwgMHgwMCwgMHhENSwgMHgwMCwgMHg0NCwgMHgwMywgMHgxMCwgMHg0OSwKKzB4NDAsIDB4MEQsIDB4MjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4QTgsIDB4MzcsIDB4MDAsCisweDFGLCAweDAxLCAweDdDLCAweDBDLCAweEIwLCAweDBELCAweEMwLCAweDY1LCAweDAwLCAweDlGLCAweDgwLCAweDBDLCAweDAzLAorMHhCNCwgMHgzNSwgMHhDMCwgMHgzNSwgMHgwMCwgMHg5RiwgMHgwMSwgMHg2QywgMHgwMywgMHgzNCwgMHgwRCwgMHhDMiwgMHgzNiwKKzB4MjAsIDB4REIsIDB4ODAsIDB4NUMsIDB4MDMsIDB4RTAsIDB4MUQsIDB4ODAsIDB4NDQsIDB4MDQsIDB4OUYsIDB4MDgsIDB4N0MsCisweDA3LCAweEYwLCAweDBELCAweEMwLCAweDM2LCAweDAwLCAweERELCAweDAwLCAweDRDLCAweDAzLCAweDMwLCAweDFELCAweEMwLAorMHgwMCwgMHgyMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNywgMHg4MCwgMHgzRCwgMHgwMCwgMHgyRiwKKzB4MDAsIDB4RkMsIDB4MDAsIDB4NzAsIDB4MEYsIDB4QzAsIDB4MkUsIDB4MDAsIDB4OUYsIDB4MDAsIDB4RkQsIDB4MDMsIDB4QjAsCisweDBGLCAweEMwLCAweDNGLCAweDAwLCAweEFGLCAweDAwLCAweERDLCAweDAzLCAweEYwLCAweDJGLCAweEM2LCAweDNGLCAweDAwLAorMHg2OSwgMHgwOCwgMHhGQywgMHgwMywgMHhGMCwgMHgxRiwgMHhEMCwgMHgwRiwgMHgwMCwgMHhCRiwgMHgwMCwgMHhGQywgMHgyNywKKzB4RjEsIDB4MEUsIDB4QzQsIDB4M0YsIDB4MDEsIDB4REYsIDB4MDAsIDB4QkMsIDB4MDMsIDB4RjAsIDB4MTcsIDB4QzgsIDB4MUYsCisweDAwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweDA4LCAweDM1LCAweDA0LCAweDFGLCAweDIxLAorMHg3QywgMHgwMiwgMHhGMCwgMHgwRCwgMHhDMCwgMHhBNywgMHgwMCwgMHhEMywgMHgwMCwgMHg0QywgMHhDMywgMHgzMCwgMHgyNSwKKzB4QzAsIDB4MzQsIDB4MDAsIDB4MTcsIDB4MDAsIDB4N0MsIDB4MTMsIDB4RjAsIDB4MEQsIDB4RDAsIDB4MzQsIDB4MDAsIDB4OUYsCisweDIxLCAweDZDLCAweDQzLCAweDMwLCAweDBELCAweEQxLCAweDQ0LCAweDAwLCAweEQzLCAweDAwLCAweDdDLCAweDAzLCAweEYwLAorMHgwRCwgMHhDMiwgMHgzNiwgMHgwMCwgMHhDRiwgMHgwNCwgMHg0QywgMHgxMywgMHhGMCwgMHgwRCwgMHhDMCwgMHg4QiwgMHgyMCwKKzB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTMsIDB4QTAsIDB4QjQsIDB4MDAsIDB4MUQsIDB4MDAsIDB4MzQsCisweDEyLCAweEQwLCAweEJELCAweDQxLCAweDI3LCAweDA0LCAweEQxLCAweDAwLCAweEQ0LCAweDEzLCAweDEwLCAweDBDLCAweDQ1LAorMHgzQywgMHgwMCwgMHgxRCwgMHgwMCwgMHhFNCwgMHgwMywgMHhEMiwgMHgwRCwgMHg0MCwgMHgzQywgMHgwMCwgMHhERCwgMHgwMCwKKzB4QzQsIDB4MDcsIDB4MTAsIDB4MEQsIDB4NDAsIDB4MDQsIDB4MDAsIDB4RDEsIDB4MjAsIDB4NzQsIDB4MDMsIDB4RDAsIDB4MUYsCisweDQwLCAweDM0LCAweDAwLCAweEZELCAweDgyLCAweEM0LCAweDBCLCAweEQwLCAweDA1LCAweDQwLCAweDZGLCAweDAwLCAweDAyLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHgyMCwgMHgzMCwgMHgwMCwgMHgwRCwgMHgyMCwgMHgzNCwgMHgwMCwKKzB4RDAsIDB4MUQsIDB4NDAsIDB4MzMsIDB4MDAsIDB4OTQsIDB4NjAsIDB4MjQsIDB4MDMsIDB4MTAsIDB4MDQsIDB4NDAsIDB4MzIsCisweDAwLCAweDBELCAweDAwLCAweDc0LCAweDAzLCAweEQwLCAweDBDLCAweDQwLCAweDMyLCAweDAwLCAweENELCAweDAwLCAweDI0LAorMHgyMywgMHg1MCwgMHgyQywgMHg0MCwgMHgwMywgMHg4NCwgMHhDNSwgMHgxMiwgMHgzNCwgMHgwMywgMHhEMCwgMHg5QywgMHg0MCwKKzB4MzAsIDB4MDAsIDB4QzksIDB4NDksIDB4MjQsIDB4MjcsIDB4RDAsIDB4MDUsIDB4NDAsIDB4MUYsIDB4MDAsIDB4MEEsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDc4LCAweDAwLCAweDJELCAweDIxLCAweEI0LCAweDA3LCAweEQwLAorMHg5RSwgMHg0MCwgMHg2QiwgMHgwMiwgMHhBNCwgMHgwMSwgMHhCNCwgMHgwNywgMHgxMCwgMHgxRiwgMHg0MCwgMHg3QSwgMHgwMCwKKzB4RUQsIDB4ODEsIDB4QTQsIDB4MDcsIDB4RDAsIDB4MUYsIDB4NjAsIDB4N0EsIDB4MDAsIDB4QzksIDB4MDMsIDB4ODQsIDB4MDcsCisweDUwLCAweDFFLCAweDQwLCAweDRCLCAweDUwLCAweEU1LCAweDg5LCAweEI0LCAweDE3LCAweEQxLCAweDFDLCAweDQwLCAweDc4LAorMHgwMCwgMHhFRCwgMHg4MSwgMHhBNCwgMHgwNywgMHhEMCwgMHg5RSwgMHg0MCwgMHgzNywgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4MTgsIDB4MzAsIDB4MDAsIDB4MEYsIDB4MDAsIDB4M0MsIDB4MDAsIDB4RjAsIDB4OEMsCisweEMwLCAweDM3LCAweDA4LCAweDg3LCAweDAwLCAweDZDLCAweDEzLCAweDMwLCAweDA0LCAweEMwLCAweDMyLCAweDAwLCAweDRGLAorMHgwMiwgMHgzQywgMHgyMywgMHhGMCwgMHgwQywgMHhDMCwgMHgzMiwgMHgwMCwgMHhDRiwgMHgwMCwgMHgyQywgMHgwMywgMHg3MCwKKzB4MEQsIDB4QzAsIDB4MDMsIDB4MDAsIDB4QzcsIDB4MDgsIDB4M0MsIDB4MDMsIDB4RjAsIDB4MEMsIDB4QzAsIDB4MzAsIDB4MDAsCisweENCLCAweDAwLCAweDJDLCAweDAzLCAweEYwLCAweDg0LCAweEMwLCAweDRCLCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMiwgMHgzOCwgMHgzRCwgMHgwMCwgMHgzRiwgMHgwMCwgMHhGQywgMHgyMywgMHhGMCwgMHg4RiwgMHhFOCwKKzB4M0YsIDB4NDAsIDB4QkIsIDB4MDAsIDB4REMsIDB4MDMsIDB4RjAsIDB4MEUsIDB4QzAsIDB4M0QsIDB4MDIsIDB4RkYsIDB4MDAsCisweEVDLCAweDAzLCAweEYwLCAweDBGLCAweEMwLCAweDNELCAweDI0LCAweEZGLCAweDAwLCAweEZDLCAweDIzLCAweEIyLCAweDBGLAorMHhDMCwgMHgwOCwgMHgwMiwgMHhGQiwgMHgyOCwgMHhGQywgMHg5MywgMHhGMCwgMHgwRiwgMHhEMCwgMHgzRCwgMHgwMCwgMHhGRiwKKzB4MDAsIDB4REQsIDB4MDMsIDB4RjIsIDB4OEYsIDB4QzAsIDB4MEIsIDB4NjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDEwLCAweEIwLCAweDM3LCAweDAwLCAweDFGLCAweDAwLCAweDdDLCAweDAyLCAweEYxLCAweDFELCAweEMwLCAweDM0LAorMHgwMCwgMHg5MywgMHgwMCwgMHg0QywgMHgwMywgMHg3MCwgMHgwNSwgMHhDNCwgMHg3NywgMHgwMSwgMHg5QiwgMHgwMCwgMHg3QywKKzB4NEIsIDB4RTAsIDB4MUQsIDB4QzIsIDB4MzUsIDB4MDUsIDB4Q0QsIDB4MDEsIDB4NEMsIDB4MUIsIDB4RjAsIDB4MEQsIDB4QzAsCisweDA3LCAweDAwLCAweERGLCAweDAxLCAweDFDLCAweDA3LCAweDcwLCAweENELCAweEMwLCAweDM3LCAweDIwLCAweERGLCAweDBBLAorMHgzQywgMHg0RiwgMHgzMCwgMHgwOSwgMHhDMCwgMHg1NCwgMHgwMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MTIsIDB4ODAsIDB4MzksIDB4MDAsIDB4MkQsIDB4MDAsIDB4QjQsIDB4MDMsIDB4NzAsIDB4MEUsIDB4NDAsIDB4MUMsIDB4MDAsCisweEExLCAweDAwLCAweEFDLCAweDUzLCAweDEwLCAweDBFLCAweDQwLCAweEJCLCAweDA0LCAweEUxLCAweDAwLCAweEI0LCAweDAzLAorMHhEMCwgMHgwRSwgMHg0MCwgMHgzQywgMHgwMSwgMHhFMSwgMHgwMCwgMHg4NCwgMHg1MywgMHhEMCwgMHgwRSwgMHg0MCwgMHgwQiwKKzB4MDAsIDB4RkQsIDB4MDAsIDB4OEMsIDB4MDMsIDB4MTAsIDB4OEUsIDB4NDAsIDB4M0IsIDB4MDAsIDB4RTcsIDB4MTAsIDB4QjQsCisweDEzLCAweEIwLCAweDAwLCAweEMwLCAweDRFLCAweDIwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LAorMHgwMCwgMHg3OSwgMHgwMCwgMHg2RCwgMHgwMSwgMHg5NCwgMHgwNiwgMHhEMCwgMHgxRSwgMHg0MCwgMHg3OCwgMHgwQywgMHhDMSwKKzB4MDEsIDB4MDQsIDB4MjcsIDB4NTAsIDB4MUUsIDB4NDAsIDB4NzMsIDB4MDEsIDB4RTEsIDB4MDEsIDB4QjQsIDB4MjcsIDB4NTAsCisweDNFLCAweDQwLCAweDdCLCAweDAwLCAweEU1LCAweDAxLCAweDg1LCAweDI3LCAweEQwLCAweDFFLCAweDQzLCAweDRCLCAweDAwLAorMHhFRCwgMHgwMSwgMHg4NCwgMHgwNywgMHgxMCwgMHg1RSwgMHg0MCwgMHg2QiwgMHgwMCwgMHhFNSwgMHgyNSwgMHhCNiwgMHgzNywKKzB4MTAsIDB4MUEsIDB4NDAsIDB4MDQsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTYsIDB4MjgsCisweDMzLCAweDAwLCAweENELCAweDAxLCAweDM0LCAweDRCLCAweDUwLCAweDBDLCAweDYwLCAweDcwLCAweDAxLCAweEMxLCAweDAxLAorMHgyNCwgMHgwMywgMHgxMCwgMHgwQywgMHg0MSwgMHgzMywgMHg4MCwgMHhDMSwgMHgxMCwgMHgzNCwgMHgwMywgMHhEMCwgMHgxOCwKKzB4NDAsIDB4MzIsIDB4MDAsIDB4QzEsIDB4MDAsIDB4MDQsIDB4MDMsIDB4RDAsIDB4MDksIDB4NDAsIDB4RjMsIDB4MDAsIDB4Q0QsCisweDAxLCAweDA0LCAweDA2LCAweDE0LCAweDBDLCAweDQwLCAweDM3LCAweDEwLCAweEM1LCAweDgwLCAweDM2LCAweDAzLCAweDkwLAorMHg0MSwgMHg0MCwgMHg0QSwgMHgyMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNywgMHhBMCwgMHgxNSwKKzB4MDAsIDB4N0YsIDB4MDUsIDB4RkMsIDB4MDEsIDB4RjAsIDB4MDUsIDB4RDAsIDB4MUMsIDB4MDAsIDB4NTMsIDB4NDEsIDB4NEMsCisweDAxLCAweDcwLCAweDI3LCAweEMwLCAweDE3LCAweDQwLCAweDczLCAweEMyLCAweDdDLCAweDAxLCAweEYwLCAweDA1LCAweEMwLAorMHgxNywgMHgxMCwgMHg3RiwgMHgwMCwgMHg0QywgMHgwMSwgMHhGMCwgMHgxNSwgMHhDMCwgMHg1RiwgMHgwMSwgMHg1RiwgMHgwMSwKKzB4NUQsIDB4MTUsIDB4NzAsIDB4MDQsIDB4QzIsIDB4NTcsIDB4MDEsIDB4NDcsIDB4MDAsIDB4N0MsIDB4MDEsIDB4MzAsIDB4MTcsCisweEMxLCAweDVDLCAweDIwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDA4LCAweDg1LCAweDAwLAorMHgxRiwgMHgwMSwgMHg3QywgMHgwMCwgMHhGMCwgMHgwMSwgMHhDMCwgMHgwNywgMHg0MCwgMHgxRiwgMHgwOCwgMHgzQywgMHgwMCwKKzB4RjAsIDB4MDEsIDB4QzAsIDB4MDcsIDB4MDAsIDB4MTcsIDB4MDAsIDB4N0MsIDB4ODAsIDB4RjAsIDB4MDEsIDB4QzAsIDB4MDUsCisweDAwLCAweDFGLCAweDAwLCAweDdFLCAweDAwLCAweEYwLCAweDAxLCAweEMwLCAweDA3LCAweDAxLCAweDFGLCAweDA4LCAweDVDLAorMHgwMCwgMHhGMiwgMHgwMSwgMHhDMCwgMHgwNywgMHgwMCwgMHgxRiwgMHgwMCwgMHg3QywgMHgwOCwgMHhGMCwgMHgwMSwgMHhDOCwKKzB4NEIsIDB4MDAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4MjUsIDB4MDAsIDB4OUYsCisweDA1LCAweDRDLCAweDAyLCAweDM2LCAweDA5LCAweEMwLCAweEEzLCAweDQwLCAweDgzLCAweDA1LCAweDRDLCAweDA2LCAweEIwLAorMHgwOCwgMHhDMCwgMHgyNiwgMHgwMCwgMHg5RiwgMHgwMCwgMHg3NCwgMHgwMiwgMHhGMCwgMHgwOSwgMHhDMCwgMHgyNywgMHgwMCwKKzB4OUIsIDB4MDAsIDB4N0MsIDB4MDYsIDB4RjAsIDB4MTksIDB4QzAsIDB4MjQsIDB4MjAsIDB4OUYsIDB4MDAsIDB4N0MsIDB4MjYsCisweEYwLCAweDA5LCAweEMwLCAweDI0LCAweDAwLCAweDlDLCAweDAwLCAweDQ4LCAweDAyLCAweEYwLCAweDA5LCAweEM4LCAweDQwLAorMHgyMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgyMCwgMHg2NCwgMHgwMCwgMHg5RCwgMHgwMCwKKzB4NDQsIDB4MDIsIDB4MTAsIDB4MTksIDB4NDAsIDB4MjcsIDB4NDAsIDB4OTEsIDB4MDEsIDB4N0MsIDB4MkEsIDB4MTAsIDB4MDksCisweDQwLCAweDI0LCAweDAwLCAweDlELCAweDAwLCAweDc0LCAweDAyLCAweEQwLCAweDA5LCAweEUwLCAweDI3LCAweDAwLCAweDkxLAorMHgxMCwgMHg3NCwgMHgxRSwgMHhEMSwgMHg5OSwgMHg0MCwgMHhBNCwgMHgwMCwgMHg5RCwgMHg0MiwgMHg1QywgMHgwMiwgMHhEMCwKKzB4MDksIDB4QzAsIDB4MjYsIDB4MDAsIDB4OTUsIDB4ODAsIDB4NTQsIDB4MUEsIDB4RDAsIDB4MDksIDB4QzAsIDB4MDYsIDB4MDAsCisweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweEEwLCAweDI0LCAweDAyLCAweDhELCAweDAwLCAweDA0LAorMHgwMiwgMHgxOCwgMHg0OSwgMHg0MCwgMHgyNywgMHg0MCwgMHg5MSwgMHgwMCwgMHg0NCwgMHgwMiwgMHg5MCwgMHgxRCwgMHg0MCwKKzB4MjYsIDB4MDAsIDB4OTUsIDB4MDAsIDB4NzQsIDB4MjIsIDB4RDAsIDB4MDksIDB4NjAsIDB4MjMsIDB4MDAsIDB4OTksIDB4MDEsCisweDc0LCAweDEyLCAweEQwLCAweDI5LCAweDQwLCAweDI1LCAweDAwLCAweDlELCAweDA0LCAweDc0LCAweDAyLCAweDUwLCAweDg5LAorMHg0MCwgMHgyNCwgMHgwMCwgMHg5NSwgMHgxOCwgMHg1NCwgMHgyMiwgMHhEMCwgMHgwOSwgMHg0MCwgMHg2MCwgMHgwMCwgMHgwMiwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MjAsIDB4MjAsIDB4MDAsIDB4OEQsIDB4MDQsIDB4MDQsIDB4MDIsCisweDEwLCAweDBDLCAweDQwLCAweDIzLCAweDAxLCAweDgxLCAweDA0LCAweDE0LCAweDEzLCAweDEwLCAweDQ4LCAweDQwLCAweDIwLAorMHgwMSwgMHg4RCwgMHgwNCwgMHgzNiwgMHgxNiwgMHhEMSwgMHgwOCwgMHg0MiwgMHgyMSwgMHgwMSwgMHg4MSwgMHgwNCwgMHgzNCwKKzB4MTIsIDB4RDgsIDB4MDgsIDB4NDAsIDB4NjEsIDB4ODAsIDB4OEQsIDB4MDEsIDB4MTQsIDB4MDIsIDB4RDAsIDB4NDgsIDB4NDAsCisweDIyLCAweDMwLCAweDg1LCAweDQ0LCAweDE2LCAweDEyLCAweEQwLCAweDQ4LCAweDQwLCAweDQyLCAweDgwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxRCwgMHhBMCwgMHg5NiwgMHgwMiwgMHgxRiwgMHgwQSwgMHg0RCwgMHgyOCwgMHgzMCwKKzB4QTAsIDB4QzAsIDB4ODcsIDB4MDIsIDB4MTMsIDB4MEEsIDB4NDQsIDB4MjgsIDB4QjAsIDB4MDEsIDB4QzAsIDB4MDYsIDB4MDAsCisweDE3LCAweDEwLCAweDdDLCAweDAwLCAweEYwLCAweEEwLCAweDQwLCAweDg3LCAweDAyLCAweDFCLCAweDAwLCAweDc0LCAweDAwLAorMHhGMCwgMHhBMSwgMHhDOCwgMHgwNSwgMHgwMCwgMHgxRiwgMHgwQSwgMHg3NCwgMHgwMCwgMHhGMCwgMHgwMSwgMHhDMCwgMHg4NCwKKzB4MDAsIDB4MTcsIDB4MDAsIDB4NUMsIDB4MDAsIDB4RjIsIDB4MjEsIDB4QzAsIDB4NzQsIDB4QzAsIDB4MEEsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDFELCAweDg4LCAweDI3LCAweDAwLCAweEZGLCAweDA4LCAweEZDLCAweDAyLCAweEYwLCAweDA5LAorMHhDMCwgMHgyRiwgMHgwMiwgMHhCRiwgMHg0OCwgMHg3QywgMHgyMiwgMHhGMCwgMHg4QiwgMHhDNCwgMHgyNywgMHgwMiwgMHhCRiwKKzB4MDAsIDB4N0MsIDB4NjIsIDB4RjAsIDB4MEIsIDB4QzAsIDB4MjcsIDB4MDIsIDB4QkYsIDB4MDgsIDB4N0MsIDB4MjIsIDB4RjAsCisweDBCLCAweEQ4LCAweDJFLCAweDAwLCAweEJGLCAweDQwLCAweERDLCAweDAyLCAweEYwLCAweDg5LCAweEMyLCAweDJGLCAweDA0LAorMHg5MywgMHgwOCwgMHg3QywgMHgyMiwgMHhGMiwgMHg4QiwgMHhDMSwgMHg2NywgMHg2MCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MUMsIDB4QTAsIDB4MkQsIDB4MDAsIDB4QkYsIDB4MEMsIDB4Q0MsIDB4MDIsIDB4MzAsIDB4MEIsIDB4QzAsCisweDJDLCAweDAyLCAweEIzLCAweDAwLCAweEZDLCAweDUyLCAweDM0LCAweDRGLCAweDgwLCAweDI3LCAweDAwLCAweDlGLCAweDAwLAorMHhGOCwgMHgyMiwgMHhGMCwgMHgwOSwgMHhDMCwgMHgyNywgMHgyNSwgMHhCRiwgMHgwNCwgMHhENCwgMHgwMiwgMHg3MCwgMHgwQSwKKzB4QzAsIDB4MkMsIDB4MDAsIDB4QkYsIDB4MDAsIDB4RkMsIDB4MDIsIDB4RjAsIDB4NEIsIDB4QzAsIDB4MjcsIDB4MDAsIDB4QTMsCisweDgwLCAweEJDLCAweDAyLCAweEYwLCAweDI5LCAweEMwLCAweDYxLCAweDAwLCAweDBBLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgxOCwgMHgwMCwgMHgwNywgMHgwMSwgMHgwRCwgMHgyQywgMHg0NCwgMHg0MSwgMHgxMCwgMHgwMSwgMHg0MSwgMHgxNCwKKzB4MDIsIDB4MDEsIDB4MTQsIDB4NzQsIDB4MTAsIDB4MTMsIDB4ODEsIDB4NDAsIDB4ODcsIDB4MDAsIDB4MUQsIDB4MDAsIDB4NzQsCisweDIwLCAweEQwLCAweDQxLCAweDQxLCAweDA2LCAweDAxLCAweDFELCAweDA4LCAweDQ0LCAweDA4LCAweDEwLCAweDAxLCAweDQxLAorMHgwNCwgMHgwMCwgMHgxRCwgMHgxNCwgMHg3NCwgMHgwMCwgMHhDMCwgMHg4MSwgMHg0NCwgMHg0NywgMHgwNSwgMHgxQiwgMHgwMCwKKzB4NzQsIDB4MjAsIDB4RDAsIDB4MTEsIDB4NDAsIDB4NzEsIDB4MjAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDEyLCAweDIwLCAweDIxLCAweDA1LCAweDhELCAweDA0LCAweDA1LCAweDEyLCAweDEwLCAweDA4LCAweDQwLCAweDIwLCAweDQwLAorMHg4MSwgMHgwNCwgMHgzNCwgMHg1MiwgMHgxMCwgMHgwOCwgMHg0OCwgMHgyMiwgMHgwMiwgMHg4OCwgMHgwOCwgMHgzNCwgMHgwMiwKKzB4RDAsIDB4NDgsIDB4NDAsIDB4MjEsIDB4MDUsIDB4OEQsIDB4MDEsIDB4MTQsIDB4MjIsIDB4RDAsIDB4MDgsIDB4NDAsIDB4NjEsCisweDAwLCAweDhELCAweDA0LCAweDI0LCAweDAyLCAweEQwLCAweDA4LCAweDQwLCAweDIzLCAweDAwLCAweDgxLCAweDA4LCAweDM0LAorMHgwMiwgMHhEMCwgMHg0OCwgMHg0MCwgMHg0QiwgMHg4OCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwKKzB4MjgsIDB4MjUsIDB4MDAsIDB4OUQsIDB4MDAsIDB4MDQsIDB4MDIsIDB4MTAsIDB4MDksIDB4NjAsIDB4MjQsIDB4MDEsIDB4RDEsCisweDAwLCAweDM0LCAweDAzLCAweDEwLCAweDA5LCAweDQwLCAweDI3LCAweDAwLCAweDlELCAweDBBLCAweDc0LCAweDAyLCAweEQwLAorMHgxOSwgMHg0MCwgMHgyNCwgMHgwMCwgMHg5RCwgMHgwOCwgMHg0NCwgMHgwMiwgMHg5MCwgMHgwOCwgMHg1MCwgMHgyNSwgMHgwMSwKKzB4OUQsIDB4MDEsIDB4NzQsIDB4MDYsIDB4RDAsIDB4MDksIDB4NDAsIDB4NjcsIDB4MDAsIDB4OTgsIDB4MDAsIDB4NzQsIDB4MDIsCisweEQwLCAweDA5LCAweDQwLCAweDYzLCAweDIwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDIwLAorMHgyNSwgMHgwMCwgMHg5RiwgMHgwMiwgMHg0QywgMHgwMiwgMHgzMCwgMHgwOSwgMHhEMCwgMHhFNCwgMHgwOCwgMHg5MywgMHgwMSwKKzB4N0MsIDB4MDIsIDB4MzQsIDB4NjksIDB4QzgsIDB4MjYsIDB4MDAsIDB4OUIsIDB4MDMsIDB4N0MsIDB4MDIsIDB4RjAsIDB4MDksCisweENDLCAweDI3LCAweDAwLCAweDlGLCAweDAxLCAweDVDLCAweDAyLCAweEYwLCAweDE5LCAweEMwLCAweDI1LCAweDAwLCAweDlFLAorMHgwMCwgMHg3NCwgMHgwMiwgMHhGMCwgMHgwOSwgMHhDMCwgMHgyNywgMHgwMCwgMHg5MCwgMHgwMCwgMHg3QywgMHgwMiwgMHhGMCwKKzB4MDksIDB4QzAsIDB4MTcsIDB4QTAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTYsIDB4MDgsIDB4MjUsCisweDAwLCAweDlGLCAweDA5LCAweDdDLCAweDAyLCAweEY0LCAweDA5LCAweEMwLCAweDY3LCAweDAwLCAweDlGLCAweDA0LCAweDdDLAorMHgwMiwgMHg3MCwgMHgwOSwgMHhDMCwgMHgyNywgMHgwMCwgMHg5RiwgMHgwMSwgMHg3QywgMHg4MiwgMHhGMCwgMHgwOSwgMHhDOCwKKzB4MjcsIDB4MDAsIDB4OEYsIDB4MDAsIDB4N0MsIDB4NDIsIDB4NzAsIDB4NDksIDB4QzAsIDB4MjYsIDB4MDgsIDB4OUYsIDB4MDAsCisweDdDLCAweDAyLCAweEYwLCAweDA5LCAweEMwLCAweDI3LCAweDEwLCAweDlGLCAweDAwLCAweDdDLCAweDAyLCAweEYwLCAweDA4LAorMHhDMCwgMHg1OSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwOCwgMHgwNSwgMHgwMSwKKzB4MUYsIDB4MDAsIDB4NEMsIDB4MDAsIDB4QjAsIDB4MDEsIDB4QzAsIDB4ODQsIDB4NDAsIDB4MTMsIDB4MTAsIDB4NEMsIDB4MDAsCisweDMwLCAweDIxLCAweEMwLCAweDA3LCAweDIwLCAweDFGLCAweDAwLCAweDdDLCAweDgwLCAweEYwLCAweDAxLCAweEUwLCAweDA3LAorMHgwMCwgMHgxRiwgMHgwMCwgMHgzQywgMHgwMCwgMHhCMCwgMHgxMSwgMHhDMCwgMHgwNCwgMHgwMCwgMHgxRiwgMHgwMCwgMHg3QywKKzB4MDAsIDB4RjAsIDB4MTEsIDB4QzAsIDB4MDcsIDB4MDAsIDB4MTcsIDB4MDAsIDB4NEMsIDB4MDAsIDB4MzAsIDB4MDEsIDB4QzAsCisweDUxLCAweDIwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDAwLCAweDVDLCAweDAwLCAweDVELAorMHg4MCwgMHg0NCwgMHgwNSwgMHgzMCwgMHgwNywgMHg0MCwgMHg1NCwgMHg0MCwgMHg3MSwgMHgwNSwgMHhDNiwgMHgyOSwgMHgxMCwKKzB4MDUsIDB4NDAsIDB4MTcsIDB4MDAsIDB4NUQsIDB4MDAsIDB4RjQsIDB4MDksIDB4RDAsIDB4MDUsIDB4QzAsIDB4MTcsIDB4MDAsCisweDdELCAweDBBLCAweEY0LCAweDAxLCAweDcwLCAweDE3LCAweDQwLCAweDlDLCAweDAwLCAweDdELCAweDEwLCAweDVDLCAweDAxLAorMHhEMCwgMHgxNywgMHg0MCwgMHgxNywgMHgwMCwgMHg3MSwgMHgwNywgMHhDNCwgMHgxOSwgMHg1MCwgMHgwNSwgMHg0OCwgMHg1MCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4QTAsIDB4NzIsIDB4MDIsIDB4REQsIDB4MDAsCisweDA0LCAweDAzLCAweDUwLCAweDE1LCAweDQ5LCAweDc2LCAweDIwLCAweEMxLCAweDAyLCAweDI0LCAweDBGLCAweDEwLCAweDBDLAorMHg0MCwgMHgzMywgMHgwMCwgMHhDRCwgMHgwMCwgMHgzNCwgMHgzNywgMHhEMCwgMHgwRCwgMHg0MCwgMHgzMywgMHgwMCwgMHhDRCwKKzB4MEIsIDB4MzQsIDB4MDcsIDB4NTAsIDB4OUMsIDB4NDIsIDB4QTAsIDB4MDQsIDB4Q0QsIDB4MDUsIDB4MzQsIDB4MDMsIDB4RDAsCisweDFDLCAweDQwLCAweDM3LCAweDAwLCAweDA1LCAweDA0LCAweDA0LCAweDEwLCAweDEwLCAweDBDLCAweDQwLCAweDUxLCAweDAwLAorMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHg4MCwgMHgxOCwgMHgwMCwgMHhFRCwgMHgwMCwgMHg4NCwKKzB4MEEsIDB4MTAsIDB4MkEsIDB4NDAsIDB4MzIsIDB4MjQsIDB4RTEsIDB4MDEsIDB4QTQsIDB4MEEsIDB4MTAsIDB4MkUsIDB4NDgsCisweDNCLCAweDAwLCAweEVELCAweDAwLCAweEI0LCAweDgzLCAweEQwLCAweDRFLCAweDQwLCAweDM5LCAweDAwLCAweEFELCAweDAwLAorMHhCNCwgMHgwOSwgMHg0MCwgMHgwRiwgMHg0MCwgMHgxOCwgMHgwMCwgMHhFRCwgMHgwMCwgMHhCNCwgMHgwMywgMHhEMCwgMHgwRSwKKzB4NDksIDB4M0IsIDB4MDAsIDB4MjUsIDB4MDAsIDB4ODQsIDB4MDQsIDB4NTAsIDB4MEUsIDB4NDgsIDB4MTAsIDB4MDAsIDB4MDIsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDE4LCAweDY5LCAweDAwLCAweEVGLCAweDAxLCAweENDLCAweDA3LAorMHg3MCwgMHgxRiwgMHhEMCwgMHg3QSwgMHgwMCwgMHhBMywgMHgwMSwgMHhFNCwgMHgwNywgMHgzNCwgMHgxQSwgMHhDMCwgMHg3QiwKKzB4MDAsIDB4RUQsIDB4MDEsIDB4QkMsIDB4MDUsIDB4RjAsIDB4N0UsIDB4NDEsIDB4N0IsIDB4MDUsIDB4QUYsIDB4MDEsIDB4QjgsCisweDA1LCAweDcwLCAweDFFLCAweEMwLCAweDQ4LCAweDAwLCAweEVGLCAweDAxLCAweEJDLCAweDA2LCAweEYwLCAweDFFLCAweEMwLAorMHg3RiwgMHgwMCwgMHhBNSwgMHgwMCwgMHg4QywgMHgwNiwgMHgzMCwgMHgxRiwgMHhDMCwgMHg1MSwgMHg0MCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4QjAsIDB4MEQsIDB4MDAsIDB4OUYsIDB4MDIsIDB4N0QsIDB4MUEsIDB4NzQsCisweDZCLCAweEMwLCAweDM1LCAweDAwLCAweDlGLCAweDAwLCAweDVELCAweDFBLCAweEYwLCAweDA5LCAweEMwLCAweDM3LCAweDAwLAorMHhERiwgMHgwMCwgMHg3QywgMHgwMSwgMHhGMCwgMHgwRCwgMHhDMCwgMHgzNywgMHgwMCwgMHg5RiwgMHgwMCwgMHgzQywgMHg4MSwKKzB4NzAsIDB4MEQsIDB4RDAsIDB4MTcsIDB4MDgsIDB4REYsIDB4MDAsIDB4NUMsIDB4ODIsIDB4RjAsIDB4MEQsIDB4QzAsIDB4MzcsCisweDAwLCAweERBLCAweDAwLCAweDdDLCAweDAzLCAweEYwLCAweDBELCAweEMwLCAweDQzLCAweDYwLCAweDA2LCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwNiwgMHgyMCwgMHg0RCwgMHgwMCwgMHhGNywgMHgwMywgMHhDQywgMHgxQiwgMHg3MCwgMHgzRiwKKzB4QzAsIDB4N0MsIDB4MDAsIDB4NzMsIDB4MDEsIDB4Q0QsIDB4MEYsIDB4MzAsIDB4MUIsIDB4QzAsIDB4N0YsIDB4MDAsIDB4RjMsCisweDAxLCAweEZDLCAweDA3LCAweDMwLCAweDFGLCAweEMwLCAweDdGLCAweDA0LCAweEIzLCAweDAxLCAweENDLCAweDg1LCAweEYwLAorMHgxRiwgMHhDMCwgMHg0QywgMHgyMCwgMHhGRiwgMHgwMSwgMHhGQywgMHgwNywgMHhGMCwgMHgxNywgMHhDMCwgMHg3RiwgMHgwMCwKKzB4MjMsIDB4MDEsIDB4Q0MsIDB4MDUsIDB4RjAsIDB4MUYsIDB4QzAsIDB4MEIsIDB4MDAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDE1LCAweDAwLCAweDBELCAweDAwLCAweEYxLCAweDA4LCAweDg0LCAweEMzLCAweDE4LCAweDBCLCAweDQwLAorMHgyOCwgMHgwMCwgMHg3MSwgMHgwMCwgMHhDNCwgMHgyMiwgMHgxMCwgMHgwQSwgMHg0MCwgMHgzQiwgMHgwMCwgMHhFMSwgMHgwMCwKKzB4QjQsIDB4MjMsIDB4MTAsIDB4MEUsIDB4QzAsIDB4MzksIDB4MDIsIDB4RTEsIDB4MDIsIDB4ODQsIDB4MDAsIDB4NzAsIDB4MDcsCisweDQwLCAweDE4LCAweDIwLCAweEVELCAweDgwLCAweEI0LCAweDAzLCAweEQwLCAweDAyLCAweDQwLCAweDNCLCAweDAwLCAweDI1LAorMHgwQSwgMHhBQywgMHgyOCwgMHhEMCwgMHgwRSwgMHhDMCwgMHg1NSwgMHgyMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDksIDB4MDAsIDB4RUQsIDB4MDAsIDB4QzQsIDB4MjMsIDB4NTAsIDB4MEEsIDB4NTAsIDB4MjgsCisweDAwLCAweDI1LCAweDA4LCAweDg0LCAweDAzLCAweDEwLCAweDBBLCAweDQwLCAweDMzLCAweDAwLCAweEUxLCAweDAwLCAweDM0LAorMHgwMiwgMHgxMCwgMHgwRSwgMHg0MCwgMHgzMywgMHgwMCwgMHg0MSwgMHgwMCwgMHhBNCwgMHgwMSwgMHhEMCwgMHgwRSwgMHg0MCwKKzB4ODgsIDB4MDQsIDB4RUQsIDB4MDAsIDB4QjQsIDB4MDIsIDB4RDAsIDB4MDIsIDB4NDAsIDB4M0YsIDB4MDAsIDB4QTEsIDB4MDAsCisweDk0LCAweDAzLCAweEQwLCAweDBFLCAweDQwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMiwgMHgyOCwgMHgwMSwgMHgwMCwgMHg4OSwgMHgwMCwgMHg0NCwgMHgwQiwgMHgxMCwgMHgwOCwgMHg0MCwgMHhFNCwgMHgwMSwKKzB4MDUsIDB4MDAsIDB4NDQsIDB4MDIsIDB4MTAsIDB4MjgsIDB4NDAsIDB4MzMsIDB4MDAsIDB4QzEsIDB4MTEsIDB4MzQsIDB4MDIsCisweDEwLCAweDBDLCAweDY4LCAweDMxLCAweDAwLCAweDQxLCAweDUyLCAweDI0LCAweDAwLCAweDUwLCAweDBDLCAweDQwLCAweDUwLAorMHgwMCwgMHhERCwgMHgwMCwgMHgzNCwgMHgwMiwgMHhEMCwgMHgwMCwgMHg0MCwgMHg3MywgMHgwMiwgMHg4NSwgMHgwMCwgMHgzNCwKKzB4MDMsIDB4RDAsIDB4MEMsIDB4NDAsIDB4MTksIDB4MjAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTUsCisweEEwLCAweDI1LCAweDAwLCAweERGLCAweDAwLCAweDRELCAweDBCLCAweDUwLCAweDA1LCAweEMwLCAweDc0LCAweDQwLCAweDE3LAorMHgwMCwgMHg0NCwgMHgwMywgMHgzNCwgMHgwQywgMHhDMCwgMHgzNywgMHgwMCwgMHhEMywgMHgwNiwgMHg3QywgMHgwMiwgMHgzMCwKKzB4MEYsIDB4QzAsIDB4M0YsIDB4MDAsIDB4RDMsIDB4MDIsIDB4NkMsIDB4MDEsIDB4RjAsIDB4MUQsIDB4QzAsIDB4NDQsIDB4MDAsCisweERGLCAweDQwLCAweDdDLCAweDAyLCAweEYwLCAweDA1LCAweEMwLCAweDNGLCAweDAwLCAweDUzLCAweDAwLCAweDVDLCAweDAwLAorMHhGMCwgMHgyRiwgMHhDMCwgMHg1NSwgMHgyMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHgwOCwKKzB4ODcsIDB4MDAsIDB4RDcsIDB4MTAsIDB4N0MsIDB4MDIsIDB4RjAsIDB4MDksIDB4QzAsIDB4MzcsIDB4MDIsIDB4MUEsIDB4MDIsCisweDdDLCAweDAyLCAweEYxLCAweDA5LCAweEMxLCAweDM3LCAweDAwLCAweERGLCAweDAwLCAweDdDLCAweDAwLCAweEYwLCAweDFELAorMHhDMCwgMHgzNywgMHgyMCwgMHgxRiwgMHgwMywgMHg1QywgMHgwMSwgMHg3MCwgMHg4RCwgMHhDMCwgMHgwNywgMHgyOCwgMHhERiwKKzB4MDIsIDB4N0MsIDB4MDYsIDB4RjAsIDB4MDUsIDB4Q0EsIDB4MzcsIDB4MDAsIDB4OUYsIDB4MDIsIDB4MkMsIDB4MEEsIDB4RjAsCisweDBELCAweEMwLCAweDA1LCAweDAwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDA4LCAweDBGLAorMHgwMCwgMHhGRiwgMHgwMCwgMHhDQywgMHg0MywgMHgzMCwgMHgwRiwgMHhDMCwgMHg3NCwgMHgwMSwgMHgyMywgMHgwMSwgMHhDNCwKKzB4MDMsIDB4MzAsIDB4MEIsIDB4QzAsIDB4M0MsIDB4MDAsIDB4RkYsIDB4MDAsIDB4QkMsIDB4MDAsIDB4MzAsIDB4MEYsIDB4QzAsCisweDNCLCAweDAwLCAweEIzLCAweDAwLCAweDhFLCAweDAwLCAweDMwLCAweDBCLCAweEMwLCAweDBELCAweDAwLCAweDdCLCAweDAwLAorMHhDQywgMHgwMywgMHgzMCwgMHgwNywgMHhDMCwgMHgzRiwgMHgxMCwgMHg3RiwgMHgwMCwgMHhDQywgMHgwQywgMHgzMCwgMHgwRiwKKzB4QzEsIDB4MDMsIDB4MkEsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODEsIDB4MDAsIDB4QzYsIDB4MjQsCisweDhELCAweDAwLCAweDQ0LCAweDAyLCAweDkwLCAweDE5LCAweEMwLCAweDM2LCAweDQwLCAweDExLCAweDAzLCAweDU0LCAweDBFLAorMHg1MCwgMHgwOSwgMHg1MCwgMHgzNCwgMHgwMCwgMHhERCwgMHgwMCwgMHg3NCwgMHg0QywgMHgxMCwgMHgwRCwgMHg0MCwgMHgzNywKKzB4MDAsIDB4MDEsIDB4MDAsIDB4NTQsIDB4MEMsIDB4NTEsIDB4MDksIDB4NDAsIDB4QzAsIDB4MDAsIDB4REIsIDB4MDMsIDB4MDQsCisweDA3LCAweDEwLCAweDE1LCAweEMwLCAweDM1LCAweDAwLCAweENELCAweDA4LCAweDU0LCAweDA2LCAweDEwLCAweDBELCAweDQwLAorMHgwNywgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHhBMCwgMHg0NiwgMHg4MCwgMHhERCwKKzB4MDAsIDB4NDQsIDB4MDMsIDB4OTAsIDB4MTgsIDB4NDAsIDB4MjUsIDB4MDAsIDB4NTEsIDB4ODgsIDB4NTQsIDB4MDcsIDB4MTAsCisweDg5LCAweDQwLCAweDM0LCAweDAwLCAweEQ1LCAweDAwLCAweDc0LCAweDA2LCAweDEwLCAweDBELCAweDQwLCAweDM3LCAweDAwLAorMHg5MSwgMHgwMCwgMHg0NiwgMHg0NSwgMHg5MCwgMHgxQywgMHg0MCwgMHg0NCwgMHg0NCwgMHhEOSwgMHgwMywgMHg0NCwgMHgxMiwKKzB4MTAsIDB4MTEsIDB4NjAsIDB4MzcsIDB4MDAsIDB4NUQsIDB4MDAsIDB4NDQsIDB4MDEsIDB4MTAsIDB4MEQsIDB4NDAsIDB4MDcsCisweDAwLCAweDBBLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweERELCAweDAwLAorMHgwNCwgMHgwMywgMHg5MCwgMHgwOCwgMHg0MCwgMHgyMiwgMHgwMCwgMHg0MSwgMHgwMCwgMHgxNCwgMHgwMiwgMHgxNCwgMHgwOCwKKzB4NDgsIDB4MzAsIDB4MDAsIDB4Q0QsIDB4MDAsIDB4MzQsIDB4MDAsIDB4MTAsIDB4MEMsIDB4NDAsIDB4MzMsIDB4MjAsIDB4NDEsCisweDAwLCAweDE2LCAweDAwLCAweEQwLCAweDA0LCAweDQwLCAweDAwLCAweDQwLCAweEM5LCAweDgwLCAweDQ1LCAweDAyLCAweDE0LAorMHgxMCwgMHg2MCwgMHgzMSwgMHgwMCwgMHg0RCwgMHgwMCwgMHgxNCwgMHgwMSwgMHgxMCwgMHgwQywgMHg0MCwgMHg0MywgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDYsIDB4MDAsIDB4RkYsIDB4MDAsIDB4Q0QsCisweDAzLCAweDM0LCAweDBCLCAweEMwLCAweDI1LCAweDAwLCAweDEzLCAweDAwLCAweERDLCAweDAyLCAweDMwLCAweDA5LCAweEMwLAorMHgzNCwgMHgwMCwgMHhENywgMHgwMCwgMHg3QywgMHgwMiwgMHgxMSwgMHgwRiwgMHhDMCwgMHgzRiwgMHgwMCwgMHg1MywgMHgwMCwKKzB4NDQsIDB4MDAsIDB4QjAsIDB4MEQsIDB4QzgsIDB4MDUsIDB4NDAsIDB4OUIsIDB4MDAsIDB4NEMsIDB4MDMsIDB4MzAsIDB4MDEsCisweEMwLCAweDM3LCAweDAwLCAweERGLCAweDAwLCAweDRDLCAweDAzLCAweDMwLCAweDBELCAweEMwLCAweDAzLCAweDQwLCAweDA4LAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHhCOCwgMHgwRiwgMHgwMCwgMHhCRiwgMHgwMCwgMHhCQywgMHgwMywKKzB4NzAsIDB4MEIsIDB4QzAsIDB4MkYsIDB4MDAsIDB4M0YsIDB4MDAsIDB4RkUsIDB4MDAsIDB4RjAsIDB4MEIsIDB4QzAsIDB4M0YsCisweDAwLCAweEZGLCAweDAwLCAweEZDLCAweDAwLCAweEYwLCAweDBGLCAweEMwLCAweDNGLCAweDAwLCAweDdGLCAweDAwLCAweEZDLAorMHgwMCwgMHg3MCwgMHgwRiwgMHhDMCwgMHgwRiwgMHgwMCwgMHhCRiwgMHgwMCwgMHhGNCwgMHgwMywgMHhGMSwgMHgwMywgMHhDQSwKKzB4MzksIDB4MDAsIDB4RkYsIDB4MDAsIDB4RkMsIDB4MDMsIDB4RjAsIDB4MEYsIDB4QzAsIDB4MTcsIDB4NjAsIDB4MEUsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweEEwLCAweDJGLCAweDAwLCAweEJGLCAweDAwLCAweERDLCAweDUzLCAweEYwLAorMHgwMywgMHhDMCwgMHgwRiwgMHgwMCwgMHhBRiwgMHgwMSwgMHhGQywgMHg4NywgMHhGMCwgMHgxRiwgMHhEMCwgMHgwQywgMHgwMCwKKzB4RkYsIDB4MDEsIDB4Q0MsIDB4MDMsIDB4RjAsIDB4NEYsIDB4QzAsIDB4MEQsIDB4MDIsIDB4QjMsIDB4MDEsIDB4RUMsIDB4MDcsCisweEYwLCAweDAzLCAweEMwLCAweDBGLCAweDA4LCAweEVGLCAweDAxLCAweEJDLCAweDA1LCAweEI0LCAweDFBLCAweEMwLCAweDdCLAorMHgwMCwgMHgzMywgMHgwNCwgMHhCQywgMHgwMiwgMHgyMCwgMHgwQiwgMHhDOCwgMHgwQywgMHgwOCwgMHgwRSwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MjcsIDB4MDAsIDB4MUQsIDB4MDAsIDB4RjQsIDB4MEIsIDB4RDAsIDB4MTEsCisweDQwLCAweDQ3LCAweDAwLCAweERELCAweDAxLCAweDc0LCAweDA3LCAweEQwLCAweDBELCAweDQwLCAweDIwLCAweDAxLCAweENDLAorMHgxMCwgMHhDNCwgMHgyQiwgMHhEMCwgMHgwRCwgMHg0MCwgMHgyNywgMHgwMCwgMHhEMSwgMHgwMSwgMHg0NCwgMHgwMywgMHhEMCwKKzB4MTEsIDB4NDIsIDB4MDcsIDB4MDAsIDB4REQsIDB4MDEsIDB4NzQsIDB4MDcsIDB4MTIsIDB4MTksIDB4NDAsIDB4NTcsIDB4MjAsCisweDE1LCAweDgzLCAweDc0LCAweDA2LCAweDUxLCAweDAxLCAweDQwLCAweDBELCAweDIwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgxMSwgMHhBMCwgMHgwMywgMHgwMCwgMHg4RCwgMHgwMCwgMHgzNCwgMHgwMywgMHhEMCwgMHgwOCwgMHg0MCwKKzB4MDMsIDB4MDAsIDB4Q0QsIDB4MDAsIDB4MzQsIDB4MDMsIDB4RDAsIDB4MEMsIDB4NDAsIDB4MjAsIDB4MDQsIDB4Q0QsIDB4MDQsCisweDA1LCAweDAzLCAweEQyLCAweDhDLCAweDQyLCAweDIzLCAweDA4LCAweEQxLCAweDgwLCAweDM0LCAweDAzLCAweEQwLCAweDA4LAorMHg0MCwgMHg2MywgMHgwMCwgMHhDRCwgMHgwMCwgMHgzNCwgMHg4MSwgMHgxMCwgMHgwQywgMHg0MCwgMHgyNywgMHgwMCwgMHg4MSwKKzB4MDgsIDB4MzQsIDB4MDIsIDB4MTksIDB4MDgsIDB4NDAsIDB4NEMsIDB4ODAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAzLCAweEE4LCAweDY1LCAweDAwLCAweDFELCAweDIxLCAweDc0LCAweDAzLCAweEQwLCAweDM5LCAweDQwLCAweDQ3LAorMHgwMCwgMHhERCwgMHgwMSwgMHg3NCwgMHgwMywgMHhEMCwgMHgwRCwgMHg0MCwgMHhFNCwgMHgwMCwgMHhDRCwgMHgyMCwgMHg0NCwKKzB4MDMsIDB4RDEsIDB4MEQsIDB4NDAsIDB4NjMsIDB4MDAsIDB4RDEsIDB4MDMsIDB4NTQsIDB4MDMsIDB4OTAsIDB4MTksIDB4NDAsCisweDY3LCAweDEwLCAweERELCAweDA0LCAweDc0LCAweDA2LCAweDExLCAweDFELCAweDQwLCAweDM3LCAweDAwLCAweDU1LCAweDkwLAorMHg3NCwgMHgwNiwgMHg1OCwgMHgxOSwgMHg0MiwgMHgwRCwgMHgyMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4QTAsIDB4RTcsIDB4MDAsIDB4OUYsIDB4MTEsIDB4NUMsIDB4MDMsIDB4RjEsIDB4MTksIDB4QzAsIDB4NjcsIDB4MDQsCisweERGLCAweDA1LCAweDdDLCAweDAzLCAweEYwLCAweDBELCAweEMwLCAweEM0LCAweDAwLCAweERGLCAweDAxLCAweDRDLCAweDAzLAorMHhGMCwgMHgwRCwgMHhDMCwgMHg0NSwgMHg0MCwgMHhDMywgMHgwMSwgMHg3QywgMHgwMywgMHhGMCwgMHgzOSwgMHhDMSwgMHg2NywKKzB4MDAsIDB4REYsIDB4MDAsIDB4M0MsIDB4MEQsIDB4QjgsIDB4MzksIDB4QzAsIDB4MzcsIDB4MDAsIDB4NTMsIDB4MDIsIDB4N0MsCisweDA0LCAweDMwLCAweDExLCAweEMwLCAweDgwLCAweDAwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA3LAorMHg4OCwgMHgyRCwgMHgwMCwgMHhCRiwgMHg4MCwgMHg3QywgMHgwMywgMHhGMCwgMHgwMywgMHhDMCwgMHgwRiwgMHgwMCwgMHhGRiwKKzB4MDAsIDB4RkMsIDB4MDMsIDB4RjAsIDB4OEYsIDB4QzAsIDB4MkYsIDB4MDAsIDB4RkYsIDB4MDIsIDB4RkMsIDB4MDMsIDB4RjIsCisweDBGLCAweEUwLCAweDI3LCAweDgwLCAweEZGLCAweDAwLCAweEVDLCAweDAzLCAweEYwLCAweDA5LCAweEMwLCAweDBGLCAweDAwLAorMHhGRiwgMHgwMSwgMHhGQywgMHgwMywgMHhGMCwgMHgwMywgMHhDMCwgMHg3RiwgMHgwMSwgMHgzRiwgMHgwNCwgMHhCQywgMHgwMiwKKzB4RjAsIDB4MDEsIDB4QzEsIDB4MUYsIDB4MjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDgsCisweDA1LCAweDAyLCAweDlGLCAweDAyLCAweDdDLCAweDAzLCAweDMwLCAweDI5LCAweEMwLCAweEE3LCAweDAwLCAweERGLCAweDBBLAorMHg2QywgMHgwMywgMHg3MCwgMHgwRCwgMHhDMCwgMHgyNywgMHgwMCwgMHhEMywgMHgwNCwgMHg0QywgMHgxMywgMHhGMiwgMHg4RCwKKzB4QzIsIDB4QTcsIDB4MDAsIDB4RDcsIDB4MDMsIDB4NEMsIDB4NDcsIDB4RjAsIDB4MjksIDB4QzAsIDB4MjQsIDB4MDQsIDB4REIsCisweDA0LCAweDRDLCAweDE5LCAweDcwLCAweDJELCAweEM1LCAweDM0LCAweDAwLCAweDU3LCAweDAyLCAweDdDLCAweDYwLCAweDc0LAorMHgwMSwgMHhDMCwgMHgyOCwgMHgyMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMywgMHhBMCwgMHgyNCwKKzB4MDAsIDB4OUQsIDB4MTgsIDB4RjQsIDB4MkIsIDB4MTAsIDB4MDEsIDB4NDAsIDB4MjcsIDB4MDAsIDB4REQsIDB4MDAsIDB4NDQsCisweDAzLCAweEQwLCAweDhELCAweDQwLCAweDI3LCAweDAwLCAweEQxLCAweDAyLCAweEM0LCAweDRCLCAweEQwLCAweDJGLCAweDQwLAorMHgyNywgMHgwMCwgMHhEMSwgMHg4MCwgMHg1MCwgMHgwQiwgMHhGMCwgMHg0OSwgMHgwMCwgMHg4NSwgMHgwMCwgMHhERCwgMHg0MSwKKzB4NkMsIDB4NEYsIDB4MTAsIDB4MEQsIDB4NDAsIDB4MzAsIDB4MDIsIDB4NUIsIDB4MDAsIDB4NzAsIDB4MEEsIDB4MTAsIDB4MjEsCisweEMwLCAweDRFLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweDIwLCAweDAwLCAweDA0LAorMHgwRCwgMHgwMCwgMHgzNCwgMHgwMywgMHgxMCwgMHgwMCwgMHg0MCwgMHgyMywgMHgwMCwgMHhDRCwgMHgwMSwgMHgyNCwgMHgwMywKKzB4NTAsIDB4M0QsIDB4NDAsIDB4MDMsIDB4MDAsIDB4QzUsIDB4MDAsIDB4MDQsIDB4MDMsIDB4RDAsIDB4NEMsIDB4NDAsIDB4MDIsCisweDAwLCAweEM5LCAweDAwLCAweDA0LCAweDhCLCAweEQwLCAweDEwLCAweDQwLCAweDAwLCAweDIwLCAweENELCAweDAyLCAweDA0LAorMHgwQiwgMHg1MCwgMHgyOCwgMHg0MCwgMHgzMiwgMHgwMCwgMHgwRCwgMHgwNywgMHgzNCwgMHgwNCwgMHhENCwgMHgxOSwgMHg0MCwKKzB4MEMsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4NTgsIDB4MDAsIDB4NkQsCisweDAxLCAweEI0LCAweDI3LCAweDE0LCAweDE2LCAweDQwLCAweDdCLCAweDAwLCAweEZELCAweDAxLCAweDg0LCAweDg3LCAweEQwLAorMHgxRSwgMHg0MCwgMHg3QiwgMHgxMCwgMHhFMSwgMHgwMSwgMHg4NCwgMHgwNywgMHhEMCwgMHgxRSwgMHg0OCwgMHg2QiwgMHg1MCwKKzB4RjksIDB4MDEsIDB4OTQsIDB4ODcsIDB4NTgsIDB4MTYsIDB4NTAsIDB4NDgsIDB4MDIsIDB4RkQsIDB4MTEsIDB4RTQsIDB4MTcsCisweDEwLCAweDBGLCAweDQwLCAweDdFLCAweDhDLCAweEE5LCAweDAxLCAweEI0LCAweDI0LCAweDkwLCAweDEyLCAweDQ4LCAweDNFLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHgxQSwgMHg5MCwgMHgwMCwgMHhDRiwgMHgwMCwKKzB4M0MsIDB4MDMsIDB4MzAsIDB4MEMsIDB4QzAsIDB4MzMsIDB4MDAsIDB4Q0YsIDB4MDAsIDB4MkMsIDB4MDMsIDB4NzAsIDB4MEMsCisweEMxLCAweDAzLCAweDQwLCAweEM1LCAweDAwLCAweDBDLCAweDIzLCAweEYwLCAweDBDLCAweDQwLCAweDEyLCAweDAyLCAweEQ3LAorMHgwMCwgMHgwQywgMHgwMywgMHhEMCwgMHg4MCwgMHhDMCwgMHgzMCwgMHgwMiwgMHhDRiwgMHgwMCwgMHgwNCwgMHgwMywgMHg3MCwKKzB4OEMsIDB4QzAsIDB4MzIsIDB4MDAsIDB4Q0YsIDB4MTAsIDB4M0MsIDB4MjIsIDB4RjQsIDB4ODgsIDB4QzksIDB4NDgsIDB4NDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweDM4LCAweDFELCAweDAwLCAweEZGLCAweDAwLCAweEZDLAorMHgwMywgMHhGMCwgMHg4RiwgMHhDMCwgMHgzRiwgMHgxMCwgMHhGRiwgMHgwOCwgMHhGQywgMHgwMywgMHhGMCwgMHgwRiwgMHhDMCwKKzB4MTcsIDB4MDAsIDB4RkYsIDB4MDAsIDB4RkMsIDB4MDMsIDB4RjAsIDB4OEYsIDB4QzgsIDB4MUYsIDB4MDgsIDB4RjcsIDB4MDAsCisweEZDLCAweDAzLCAweEYwLCAweDBGLCAweEMwLCAweDNGLCAweDAyLCAweEZGLCAweDAwLCAweEZDLCAweDEzLCAweEYwLCAweDRGLAorMHhFMCwgMHgzRCwgMHgwMCwgMHhGRSwgMHgwOCwgMHhGQywgMHgyMywgMHg3NCwgMHgwRiwgMHhDMCwgMHgwQiwgMHg2MCwgMHgwNCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4QTAsIDB4MzcsIDB4MDgsIDB4NUYsIDB4MDEsIDB4NEMsIDB4MDMsCisweDcwLCAweDA5LCAweEMwLCAweDI3LCAweDAwLCAweERGLCAweDAwLCAweDdDLCAweDAzLCAweEYwLCAweDBELCAweEM0LCAweDE3LAorMHgwMCwgMHhENywgMHgwMCwgMHg1QywgMHgxQiwgMHhGMCwgMHgwRCwgMHhDMCwgMHgxNywgMHgwMCwgMHhERiwgMHgwMCwgMHg3QywKKzB4MDMsIDB4NzAsIDB4MEQsIDB4QzgsIDB4MzcsIDB4MDAsIDB4QzMsIDB4MDAsIDB4MkMsIDB4MDMsIDB4QjAsIDB4MEQsIDB4NDAsCisweDM3LCAweDAwLCAweDlGLCAweDQwLCAweDRDLCAweDgwLCAweDIwLCAweDA5LCAweEMyLCAweDQzLCAweDAwLCAweDBFLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHg4MiwgMHgzOSwgMHgwMCwgMHg2RCwgMHgwMCwgMHhDNCwgMHgyQiwgMHgxMCwKKzB4MEUsIDB4NDAsIDB4MUIsIDB4MDAsIDB4RTksIDB4MDAsIDB4QjQsIDB4MDMsIDB4RDAsIDB4MEUsIDB4NDAsIDB4M0IsIDB4MDAsCisweEVELCAweDAwLCAweEI0LCAweDMzLCAweEQwLCAweDJFLCAweDQwLCAweDNCLCAweDAwLCAweEVGLCAweDAwLCAweEI0LCAweDAzLAorMHhEMCwgMHgwRSwgMHg0MCwgMHgzQiwgMHgyMCwgMHhFMSwgMHgwMCwgMHg4NCwgMHgwMywgMHg1MCwgMHgwRSwgMHgwMCwgMHgzQiwKKzB4MDAsIDB4OEQsIDB4MDAsIDB4ODQsIDB4MDEsIDB4QjAsIDB4MDIsIDB4NDAsIDB4NEYsIDB4MDAsIDB4MDYsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDc5LCAweDAwLCAweENELCAweDAzLCAweEE1LCAweDE3LCAweDUwLCAweDFFLAorMHg0MCwgMHg3QiwgMHgwMCwgMHhFRCwgMHgxMSwgMHhCNCwgMHgwNywgMHhEMCwgMHgxRSwgMHg0MSwgMHg3QiwgMHgwMCwgMHhFRCwKKzB4MDEsIDB4OTYsIDB4MjcsIDB4RDAsIDB4MUUsIDB4NDAsIDB4N0IsIDB4ODgsIDB4RUQsIDB4MDEsIDB4QjQsIDB4MDcsIDB4RDAsCisweDM2LCAweDQwLCAweDczLCAweDAwLCAweEUxLCAweDAxLCAweEE0LCAweDA3LCAweDkwLCAweDFFLCAweDQwLCAweDdCLCAweDAwLAorMHhFRCwgMHgxMSwgMHgxNCwgMHg0NCwgMHgxOSwgMHgzRSwgMHg0MCwgMHgxMywgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MTYsIDB4MjgsIDB4NzMsIDB4MDAsIDB4Q0QsIDB4MDEsIDB4MjQsIDB4MDMsIDB4MTAsIDB4MEMsIDB4NDAsCisweDMzLCAweDAwLCAweDQ5LCAweDA1LCAweDM0LCAweDAzLCAweEQwLCAweDE4LCAweDQwLCAweEYzLCAweDAwLCAweDhELCAweDAxLAorMHg3NCwgMHgwMywgMHhEMCwgMHgwQywgMHg0MCwgMHg3MywgMHgwMiwgMHg0NSwgMHgxQSwgMHgzNCwgMHgwMywgMHhEMCwgMHg1QywKKzB4NDAsIDB4NzcsIDB4MDAsIDB4ODEsIDB4MDAsIDB4MDQsIDB4MDcsIDB4NTAsIDB4MkMsIDB4NjAsIDB4QjMsIDB4MDAsIDB4Q0QsCisweDQ3LCAweDE0LCAweDA3LCAweDkwLCAweDFDLCAweDQwLCAweDVCLCAweDIwLCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgxNywgMHhBMCwgMHgxRCwgMHgwMCwgMHg3RiwgMHgwMiwgMHg2QywgMHgwMSwgMHg3MCwgMHgyNywgMHhDMCwgMHg5RiwKKzB4MDAsIDB4N0YsIDB4MDEsIDB4N0MsIDB4MDEsIDB4RjAsIDB4MDUsIDB4QzAsIDB4MUYsIDB4MDAsIDB4NUYsIDB4MDEsIDB4NUMsCisweDAxLCAweEYwLCAweDA1LCAweEMwLCAweERGLCAweDAwLCAweDdELCAweDAyLCAweDdDLCAweDgxLCAweEYxLCAweDM3LCAweEMwLAorMHhERiwgMHg0MCwgMHg0MywgMHgwMCwgMHhFQywgMHgwMSwgMHhCMCwgMHgyNywgMHhDMCwgMHgxQiwgMHgwMSwgMHg3RiwgMHgyMywKKzB4OUQsIDB4QTUsIDB4MjAsIDB4QjcsIDB4QzAsIDB4NUYsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDEyLCAweDA4LCAweDQ1LCAweDAyLCAweDFGLCAweDAyLCAweDFDLCAweDAwLCAweEYwLCAweDAxLCAweEMwLCAweDA3LCAweDAwLAorMHgxRCwgMHgyMCwgMHg3QywgMHgwMCwgMHhGMiwgMHgyMSwgMHhDOCwgMHgwNywgMHgwNiwgMHgxRiwgMHgwQSwgMHg3QywgMHgwMCwKKzB4RjAsIDB4MjEsIDB4QzAsIDB4MDcsIDB4MDQsIDB4MUYsIDB4ODAsIDB4N0MsIDB4MDAsIDB4RjAsIDB4MDEsIDB4QzAsIDB4ODcsCisweDA2LCAweDFGLCAweDQyLCAweDdDLCAweDI4LCAweEIwLCAweDQxLCAweEMwLCAweDA3LCAweDA0LCAweDFGLCAweDAwLCAweDY0LAorMHg4OCwgMHhGMCwgMHgyMSwgMHhDMCwgMHg0QiwgMHgyMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwKKzB4MDgsIDB4MjUsIDB4MDAsIDB4OUYsIDB4MTksIDB4N0MsIDB4MDYsIDB4MzAsIDB4MDgsIDB4QzUsIDB4MjQsIDB4MDQsIDB4OUYsCisweDA4LCAweDc0LCAweDAyLCAweEYwLCAweDA5LCAweEMwLCAweDIzLCAweDAwLCAweDlCLCAweDAxLCAweDdDLCAweDAyLCAweDMwLAorMHgwOSwgMHhDMiwgMHgyMywgMHg4MCwgMHg5MywgMHgwNCwgMHg0QywgMHgwMiwgMHhGMCwgMHg1OSwgMHhDMCwgMHgyNywgMHgwMCwKKzB4OTMsIDB4MDMsIDB4NUMsIDB4MDIsIDB4NzEsIDB4NTksIDB4QzAsIDB4QTcsIDB4NDAsIDB4ODMsIDB4MDAsIDB4NEMsIDB4MjIsCisweDMwLCAweDI4LCAweEMwLCAweDQwLCAweDIwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDIwLAorMHg2NCwgMHgwMCwgMHg5RCwgMHgxMiwgMHg3NCwgMHgwQSwgMHgxNCwgMHgwOSwgMHg1MCwgMHgyNCwgMHgwMCwgMHg5NywgMHgwMSwKKzB4NzQsIDB4MDIsIDB4RDgsIDB4NDksIDB4NDAsIDB4MjcsIDB4NDAsIDB4OTEsIDB4MTEsIDB4NzQsIDB4MEEsIDB4NTAsIDB4MjksCisweDQwLCAweDI3LCAweEMwLCAweDhCLCAweDAxLCAweDQ0LCAweDRBLCAweEQwLCAweDA5LCAweDQ0LCAweEU3LCAweDQwLCAweDkxLAorMHg4NiwgMHgwMCwgMHgxMiwgMHgyMCwgMHgxOSwgMHg0MCwgMHhFNywgMHgxMCwgMHg5MSwgMHgwMSwgMHg0NCwgMHgwNiwgMHgxNCwKKzB4MzksIDB4NDEsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4ODAsIDB4MjQsCisweDI1LCAweDlELCAweDAwLCAweDc0LCAweDYyLCAweDEwLCAweDA5LCAweDQwLCAweDI0LCAweDAwLCAweDlELCAweDAwLCAweDc0LAorMHgwMiwgMHhEMCwgMHgwOSwgMHg0MCwgMHgyNywgMHgwMCwgMHg5MSwgMHgwOCwgMHg3NCwgMHgwQSwgMHgxMCwgMHgwOSwgMHg0MCwKKzB4MzcsIDB4MDgsIDB4OTEsIDB4MDAsIDB4NDQsIDB4ODIsIDB4RDAsIDB4MDksIDB4NDAsIDB4MjcsIDB4MDEsIDB4OTksIDB4MDAsCisweDUwLCAweDAzLCAweDUwLCAweDBELCAweDQwLCAweDM2LCAweDAwLCAweDk5LCAweDA0LCAweDQ0LCAweDAzLCAweDEwLCAweDBELAorMHg0MCwgMHg2MCwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgyMiwgMHgyMCwgMHgwNSwKKzB4OEQsIDB4MTQsIDB4MzYsIDB4MTIsIDB4MTAsIDB4NDgsIDB4NDAsIDB4MjAsIDB4MDEsIDB4ODUsIDB4ODAsIDB4MzQsIDB4MDIsCisweEQwLCAweDA4LCAweDQwLCAweDIzLCAweDAxLCAweDgxLCAweDA4LCAweDc0LCAweDEyLCAweDUwLCAweDA4LCAweDQwLCAweDIzLAorMHgwMSwgMHg5MSwgMHgwMCwgMHgwNCwgMHgwMiwgMHhEMiwgMHg0OCwgMHg0MCwgMHgzMywgMHgwMSwgMHg4OSwgMHgwMCwgMHg0NCwKKzB4MDIsIDB4MTAsIDB4MDgsIDB4NDQsIDB4MzMsIDB4MDAsIDB4ODksIDB4MDEsIDB4MDUsIDB4OTMsIDB4MTAsIDB4NDgsIDB4NTAsCisweDQwLCAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFELCAweEI4LCAweDA2LCAweDAxLCAweDFGLAorMHgwNCwgMHg3QywgMHgyOCwgMHgzMCwgMHgwMSwgMHhDMCwgMHgwNCwgMHgwMCwgMHgxRiwgMHgwMCwgMHg3QywgMHgwMCwgMHhEMCwKKzB4QTEsIDB4QzAsIDB4ODcsIDB4MDIsIDB4MTMsIDB4MDIsIDB4N0MsIDB4MjgsIDB4MzAsIDB4RTUsIDB4QzUsIDB4ODcsIDB4MDIsCisweDExLCAweDAwLCAweDRDLCAweDI4LCAweEYwLCAweDAxLCAweEMwLCAweDg3LCAweDIyLCAweDFCLCAweDAwLCAweDVDLCAweDAwLAorMHg3MiwgMHgwMSwgMHhDMCwgMHgwNywgMHgwMCwgMHgxQiwgMHgxNCwgMHg0QywgMHgwMCwgMHgzMCwgMHhBMSwgMHhDMCwgMHg3NCwKKzB4RTAsIDB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MUQsIDB4QjAsIDB4MkYsIDB4MDUsIDB4QkYsIDB4MTQsCisweDc0LCAweEEyLCAweEYyLCAweDhCLCAweEMwLCAweDJGLCAweDIyLCAweEJGLCAweDAwLCAweDdDLCAweDAyLCAweEYwLCAweDBCLAorMHhDMCwgMHgyRiwgMHgwQSwgMHhCNywgMHgwNCwgMHg3QywgMHgyMiwgMHhGMCwgMHgwOSwgMHhDMCwgMHgyRiwgMHgwMiwgMHhCRiwKKzB4MDAsIDB4N0QsIDB4MDIsIDB4RjAsIDB4OEYsIDB4MDAsIDB4MkYsIDB4MDIsIDB4QjcsIDB4ODAsIDB4RkMsIDB4MDIsIDB4NzAsCisweDBCLCAweEMwLCAweDJGLCAweDA4LCAweEY3LCAweDAwLCAweEZELCAweDIzLCAweEYwLCAweDhCLCAweEMyLCAweDc3LCAweDYwLAorMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxQywgMHhBMCwgMHgyRiwgMHgwNSwgMHhCRiwgMHgwQywgMHhGQywKKzB4ODIsIDB4MzIsIDB4MDksIDB4QzAsIDB4MjQsIDB4MDAsIDB4QjMsIDB4MDAsIDB4N0MsIDB4MDIsIDB4RjAsIDB4OEEsIDB4QzAsCisweDI0LCAweDAwLCAweEJGLCAweDAwLCAweEZDLCAweDIyLCAweDMwLCAweDRCLCAweEMwLCAweDI2LCAweDA1LCAweEJGLCAweDAwLAorMHhGQywgMHgwMiwgMHgzMCwgMHgwQiwgMHhFMCwgMHgyRiwgMHgwMiwgMHhGRiwgMHgwMCwgMHhDRCwgMHgwMiwgMHhCMCwgMHgwRiwKKzB4QzIsIDB4MkYsIDB4NDgsIDB4QjMsIDB4MDAsIDB4Q0MsIDB4MDIsIDB4RjAsIDB4MEIsIDB4QzQsIDB4NzQsIDB4MDAsIDB4MEUsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAwLCAweDA3LCAweDAxLCAweDFELCAweDBDLCAweDc0LCAweDQ4LAorMHgxMCwgMHgwNSwgMHg0MCwgMHgwNCwgMHgwMiwgMHg1MSwgMHgwMCwgMHg3NCwgMHgwMCwgMHhEMCwgMHg0MSwgMHg0OCwgMHg4NCwKKzB4MDQsIDB4MUQsIDB4MTAsIDB4NzQsIDB4MjAsIDB4MTQsIDB4NDEsIDB4NDEsIDB4MDQsIDB4MDEsIDB4NTcsIDB4ODAsIDB4NzQsCisweDQwLCAweDEwLCAweDAxLCAweDYwLCAweDA3LCAweDAyLCAweDFELCAweDAwLCAweDQ0LCAweDAwLCAweDEwLCAweDAxLCAweDQwLAorMHgxNywgMHg1MCwgMHgxMSwgMHgwMCwgMHg0NSwgMHgwMCwgMHhGMCwgMHgwMSwgMHhDMCwgMHg2MiwgMHgwMCwgMHgwQywgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4MDAsIDB4MjEsIDB4MDUsIDB4OEQsIDB4MDUsIDB4MzYsIDB4MzIsIDB4MTQsCisweDg4LCAweDQwLCAweDYyLCAweDYwLCAweEMxLCAweDAwLCAweDM0LCAweDAyLCAweEQwLCAweDQ4LCAweDUwLCAweDIwLCAweDAzLAorMHg4RCwgMHgwMCwgMHgzNCwgMHgwMiwgMHgxMCwgMHhDQywgMHg0MCwgMHgyMiwgMHgwNSwgMHhDRCwgMHgwMCwgMHgzNiwgMHgxMywKKzB4MTAsIDB4ODgsIDB4NDAsIDB4MjMsIDB4MDAsIDB4OEQsIDB4MDAsIDB4MjQsIDB4MDIsIDB4OTQsIDB4MTgsIDB4NDAsIDB4MjMsCisweDAwLCAweDg1LCAweDQwLCAweDE0LCAweDAyLCAweEQyLCAweDA4LCAweDQwLCAweDQ4LCAweDAwLCAweDA0LCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHhBOCwgMHgyNSwgMHgwNCwgMHg5RCwgMHg4MCwgMHg3NCwgMHgwMiwgMHgxMCwgMHgwOSwKKzB4NTAsIDB4MjYsIDB4MDEsIDB4OTEsIDB4MDEsIDB4NzQsIDB4MDIsIDB4RDAsIDB4MDksIDB4NDAsIDB4QTQsIDB4MDAsIDB4OUQsCisweDAwLCAweDc0LCAweDAyLCAweDExLCAweDA5LCAweDQwLCAweDY0LCAweDEwLCAweDlELCAweDAxLCAweDc0LCAweDAyLCAweDEwLAorMHgwOSwgMHg0MCwgMHhFNywgMHgxMCwgMHg5RCwgMHgwMCwgMHg2NCwgMHgxMiwgMHgxMiwgMHgwOSwgMHg0MCwgMHgyNywgMHgwOCwKKzB4RDUsIDB4MDQsIDB4NDQsIDB4MDIsIDB4RDAsIDB4MjksIDB4NDAsIDB4NjIsIDB4MjgsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDA1LCAweDIwLCAweDI1LCAweDAwLCAweDlGLCAweDAwLCAweDdDLCAweDAyLCAweDMwLCAweDA5LCAweEMwLAorMHg2NiwgMHgwMCwgMHg5MywgMHgwMywgMHg3QywgMHgwMiwgMHhGMCwgMHgxOSwgMHhDMCwgMHhBNCwgMHgwMCwgMHg5RiwgMHgwMSwKKzB4N0MsIDB4MDIsIDB4MzAsIDB4MDksIDB4QzAsIDB4QTYsIDB4MDQsIDB4OUYsIDB4MDMsIDB4NzQsIDB4MDIsIDB4MzQsIDB4MjksCisweDQwLCAweEE3LCAweDAwLCAweDhGLCAweDAwLCAweDJDLCAweDgyLCAweEIwLCAweDI5LCAweEMwLCAweEEzLCAweDAwLCAweDk3LAorMHgwMiwgMHg1QywgMHgwNiwgMHhGMCwgMHgyOSwgMHhDMCwgMHgxNCwgMHgwMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MTYsIDB4MDgsIDB4NjUsIDB4MEEsIDB4OUYsIDB4MTQsIDB4N0MsIDB4MDIsIDB4RjIsIDB4NDgsIDB4QzAsIDB4MjEsCisweDAwLCAweDlGLCAweDAwLCAweDdDLCAweDAyLCAweEYyLCAweDU5LCAweEMwLCAweDI3LCAweDAwLCAweDlGLCAweDAzLCAweDdDLAorMHgwMiwgMHhGMCwgMHgwOCwgMHhDMCwgMHgyNywgMHgwMCwgMHg5NywgMHg4MCwgMHg3QywgMHgwMiwgMHhGMCwgMHgwOSwgMHg4MiwKKzB4MjcsIDB4MDAsIDB4OUYsIDB4MTgsIDB4NUMsIDB4MDIsIDB4RDAsIDB4OTksIDB4QzAsIDB4QTcsIDB4NjQsIDB4OUIsIDB4MDAsCisweDdDLCAweDhFLCAweDc4LCAweDM4LCAweEMwLCAweDVCLCAweDIwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgxNCwgMHgwOCwgMHg4NSwgMHgwNCwgMHgxRiwgMHgwOCwgMHg3QywgMHg0MCwgMHhGMSwgMHgwMSwgMHhDMCwgMHgwNywgMHg4MCwKKzB4MTMsIDB4MjAsIDB4N0MsIDB4MDAsIDB4RjIsIDB4NDEsIDB4RDAsIDB4ODQsIDB4MDAsIDB4MUYsIDB4MDAsIDB4MEMsIDB4MDAsCisweDMwLCAweDAxLCAweEMyLCAweDg3LCAweDA4LCAweDFGLCAweDAyLCAweDdFLCAweDAwLCAweEYyLCAweDIxLCAweEYwLCAweDA0LAorMHgwQywgMHgxQiwgMHg4MCwgMHg3QywgMHgwMCwgMHg3MCwgMHgwMSwgMHhDOSwgMHg4NywgMHgwMCwgMHgwNywgMHg4MCwgMHg0RCwKKzB4MDgsIDB4MzIsIDB4MDEsIDB4QzAsIDB4NTAsIDB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsCisweDAwLCAweERDLCAweDIwLCAweDdELCAweDAxLCAweEY2LCAweDFELCAweDcwLCAweDA1LCAweDYwLCAweDE3LCAweDAwLCAweDUxLAorMHgwMCwgMHg3NCwgMHgwMSwgMHhEMCwgMHgwNywgMHhDMCwgMHgxNiwgMHgwMCwgMHg3RCwgMHgwNSwgMHhDRCwgMHgxOSwgMHgzMCwKKzB4MjcsIDB4NjAsIDB4MTcsIDB4MjAsIDB4NUQsIDB4MDAsIDB4RkMsIDB4QTksIDB4NzIsIDB4NDUsIDB4NjIsIDB4MUMsIDB4MTEsCisweDcxLCAweDI1LCAweERDLCAweDhELCAweDE0LCAweDI3LCAweEMwLCAweDlELCAweDAxLCAweDcxLCAweDg5LCAweENDLCAweDAxLAorMHgxMCwgMHgzNywgMHg0MCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHhBMCwKKzB4RjIsIDB4MDIsIDB4Q0QsIDB4MDIsIDB4NzQsIDB4MDMsIDB4NTIsIDB4MEMsIDB4NDQsIDB4MzMsIDB4MDAsIDB4ODEsIDB4MDAsCisweDM0LCAweDAzLCAweEQwLCAweDJELCAweDQwLCAweDMwLCAweDAwLCAweENELCAweDAxLCAweDI0LCAweDFGLCAweDEwLCAweDJDLAorMHg0OSwgMHgzMywgMHgxMCwgMHg4RCwgMHgwMCwgMHg3NCwgMHgwMywgMHg1MSwgMHgxOCwgMHg0MCwgMHgzMCwgMHgwMCwgMHg0MSwKKzB4MDEsIDB4MzQsIDB4NDAsIDB4MTAsIDB4MEMsIDB4NDAsIDB4QTMsIDB4MjAsIDB4QzUsIDB4MDksIDB4MjAsIDB4MDcsIDB4MTAsCisweDJDLCAweDQxLCAweDQwLCAweDAwLCAweDBBLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDgwLCAweDM4LAorMHgwMCwgMHhFRCwgMHgwMCwgMHhCNCwgMHgwMSwgMHg1MCwgMHgwRSwgMHg0MCwgMHgzMywgMHg0MCwgMHhFMSwgMHg4MCwgMHhCNCwKKzB4MDMsIDB4RDgsIDB4MEYsIDB4NDEsIDB4MzgsIDB4MDAsIDB4NkQsIDB4MDEsIDB4ODQsIDB4MDMsIDB4MTAsIDB4MEUsIDB4NDgsCisweDNCLCAweDAyLCAweEVELCAweDQwLCAweEI0LCAweDAxLCAweDUwLCAweDFFLCAweDQ4LCAweDU5LCAweDAwLCAweDYxLCAweDgxLAorMHhENCwgMHg0MiwgMHgxMCwgMHgwNiwgMHg0MCwgMHgyRCwgMHgwMCwgMHg2MSwgMHgwMCwgMHgwNCwgMHg0NiwgMHgxMCwgMHgwRSwKKzB4NDEsIDB4MTAsIDB4MDgsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MTgsIDB4NzgsIDB4MDAsCisweDZGLCAweDAxLCAweEI0LCAweDA3LCAweDcwLCAweDFFLCAweDQwLCAweDdCLCAweDA4LCAweEUxLCAweDAxLCAweEJDLCAweDA3LAorMHhGMCwgMHgxRSwgMHg0MCwgMHg3OCwgMHg4MSwgMHhCRCwgMHgwMSwgMHhFQywgMHgwNSwgMHgzNCwgMHgxRSwgMHg0MCwgMHg3QiwKKzB4MDIsIDB4RUYsIDB4MDEsIDB4QjQsIDB4MDcsIDB4NzAsIDB4MUUsIDB4NDAsIDB4N0MsIDB4NDAsIDB4NkIsIDB4MDAsIDB4QkMsCisweDA2LCAweDMwLCAweDFBLCAweEMwLCAweDZCLCAweDAwLCAweEU3LCAweDAxLCAweEFDLCAweDA3LCAweDM0LCAweDE3LCAweEMwLAorMHg1MCwgMHg2MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHhCOCwgMHgxNSwgMHgwMCwgMHhERiwKKzB4MDAsIDB4N0MsIDB4ODEsIDB4NzAsIDB4MEQsIDB4QzgsIDB4MzcsIDB4MDAsIDB4REYsIDB4MDAsIDB4N0MsIDB4MDMsIDB4RjAsCisweDBELCAweEMwLCAweDM3LCAweDA0LCAweDFGLCAweDAwLCAweDdDLCAweDAzLCAweEYwLCAweDBELCAweEM4LCAweEI3LCAweDAwLAorMHhERiwgMHgwMCwgMHg1QywgMHg4MywgMHg3MiwgMHgwQywgMHhFMCwgMHgxNiwgMHgwOCwgMHhERiwgMHgwMCwgMHgzQywgMHgwMiwKKzB4QzQsIDB4MDEsIDB4QzAsIDB4MjMsIDB4MDAsIDB4MEYsIDB4MDAsIDB4N0MsIDB4ODMsIDB4RjAsIDB4MDEsIDB4RDAsIDB4NDMsCisweDYwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA2LCAweDMwLCAweDdELCAweDAwLCAweEYzLCAweDAxLAorMHhDQywgMHgxMywgMHhGMCwgMHgxRiwgMHhDMCwgMHg3RiwgMHgwMSwgMHhGRiwgMHgwMSwgMHhGQywgMHgwNywgMHhGMCwgMHgxRiwKKzB4QzAsIDB4N0YsIDB4MDQsIDB4RjMsIDB4MDEsIDB4Q0MsIDB4MTMsIDB4MzAsIDB4MTcsIDB4QzAsIDB4N0MsIDB4MDIsIDB4RkYsCisweDg5LCAweEZDLCAweDg3LCAweDMwLCAweDlGLCAweEMwLCAweDdGLCAweDAwLCAweDczLCAweDAxLCAweEZDLCAweDI2LCAweEYwLAorMHgxNywgMHhDOCwgMHg2QiwgMHgyMCwgMHhCQiwgMHgwMSwgMHhGQywgMHgwNywgMHhEMCwgMHgxMywgMHhDMCwgMHgxQiwgMHgwMCwKKzB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTUsIDB4MDAsIDB4M0QsIDB4NTAsIDB4NzEsIDB4MjAsIDB4ODQsCisweDgzLCAweEQwLCAweDBFLCAweDQwLCAweDNCLCAweDAwLCAweEVELCAweDAwLCAweEI0LCAweDAzLCAweEQwLCAweDJBLCAweDQ4LAorMHgzRiwgMHgwMCwgMHg2MSwgMHgwMCwgMHhENCwgMHgwOCwgMHgxMSwgMHgwQiwgMHhDMCwgMHgzOCwgMHgwMCwgMHhFOSwgMHg4OCwKKzB4REMsIDB4ODIsIDB4MTAsIDB4Q0UsIDB4NDAsIDB4M0IsIDB4MDEsIDB4NjEsIDB4MDAsIDB4QjQsIDB4MzIsIDB4RDAsIDB4MDYsCisweDQyLCAweDNCLCAweDEyLCAweDIxLCAweDMwLCAweEI0LCAweDAyLCAweEQwLCAweDRBLCAweDQyLCAweDU3LCAweDAwLCAweDA0LAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzOSwgMHgwMCwgMHg2MSwgMHgwMCwgMHg4NCwgMHgyMCwKKzB4RDAsIDB4MEUsIDB4NDAsIDB4M0IsIDB4MDksIDB4RUQsIDB4MDAsIDB4QjQsIDB4MDMsIDB4RDAsIDB4ODYsIDB4NDAsIDB4M0IsCisweDAwLCAweEIxLCAweDAwLCAweEE0LCAweDIxLCAweDEwLCAweDBFLCAweDQwLCAweDM4LCAweDIwLCAweEVELCAweDA4LCAweEI2LAorMHgwMywgMHgxMCwgMHgwRSwgMHg0OSwgMHgyQiwgMHgwMCwgMHg2MSwgMHgxMCwgMHhCNCwgMHgwMiwgMHhEMSwgMHgwMiwgMHg0MCwKKzB4MkYsIDB4MDAsIDB4MjksIDB4MDAsIDB4QjQsIDB4MDMsIDB4RDAsIDB4MDIsIDB4NDQsIDB4MjMsIDB4MDIsIDB4MDQsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweDA4LCAweEUxLCAweDAwLCAweDAxLCAweDA3LCAweDA0LCAweDAwLCAweEQwLAorMHgwQywgMHg0MCwgMHg3MywgMHgwMCwgMHhDRCwgMHgwMywgMHgzNCwgMHgwMywgMHhEMSwgMHgwMCwgMHg0NCwgMHgzMywgMHgwMCwKKzB4MTEsIDB4MDAsIDB4MzQsIDB4MDAsIDB4MTQsIDB4MDksIDB4NTAsIDB4QjYsIDB4MTAsIDB4Q0QsIDB4MDMsIDB4MzQsIDB4MDIsCisweDE0LCAweDNDLCAweDQwLCAweEEzLCAweDQwLCAweDQxLCAweDAxLCAweDM0LCAweDRBLCAweEQwLCAweDIwLCAweDQwLCAweDIzLAorMHgwMiwgMHgwMSwgMHgwMywgMHgzNCwgMHg2RiwgMHhEMCwgMHgxMSwgMHg0MSwgMHgwQiwgMHgyMCwgMHgwNCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MTUsIDB4QTAsIDB4QzUsIDB4MDAsIDB4OTMsIDB4MDQsIDB4NDcsIDB4MDIsIDB4RjEsIDB4MkQsCisweDgwLCAweEY3LCAweDAxLCAweERGLCAweDA3LCAweDc0LCAweDAzLCAweEYwLCAweDAxLCAweDQwLCAweDNGLCAweDQyLCAweEQzLAorMHgwMCwgMHg2QywgMHgwMiwgMHgzMCwgMHgwOSwgMHhDMCwgMHgzQywgMHgwMCwgMHhERiwgMHgwNSwgMHg3NCwgMHgwMiwgMHgzMCwKKzB4MUQsIDB4QzQsIDB4MjcsIDB4MDAsIDB4NTMsIDB4MDEsIDB4N0MsIDB4MTIsIDB4RjAsIDB4MjUsIDB4QzAsIDB4NzMsIDB4MDAsCisweERCLCAweDAzLCAweDdDLCAweDBCLCAweEYyLCAweDY5LCAweDQwLCAweDU3LCAweDAwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwNSwgMHgwOCwgMHgyNywgMHgwMywgMHg5RiwgMHgwMCwgMHg3RSwgMHgwQSwgMHhGMCwgMHgxRCwgMHhDMCwKKzB4MzcsIDB4MDAsIDB4REYsIDB4MDAsIDB4N0MsIDB4MDMsIDB4RjAsIDB4MzksIDB4QzAsIDB4NzcsIDB4MTAsIDB4REYsIDB4MDMsCisweDVDLCAweDBBLCAweEYwLCAweDI5LCAweEMwLCAweDM1LCAweDAwLCAweERCLCAweDEwLCAweDU0LCAweDgwLCAweEYwLCAweDBELAorMHhDRCwgMHgyNywgMHgwMSwgMHg1RiwgMHgwMCwgMHg3QywgMHgwMywgMHhGMCwgMHg4NSwgMHhDMSwgMHhCNywgMHgwNCwgMHhERiwKKzB4MDQsIDB4N0MsIDB4MDIsIDB4RjAsIDB4MjksIDB4QzAsIDB4MzcsIDB4MjAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDgwLCAweDA4LCAweDBCLCAweDAwLCAweDMzLCAweDAwLCAweEZDLCAweDgyLCAweEYwLCAweDBGLCAweEMxLCAweDNGLAorMHgyNCwgMHhGRiwgMHgzMCwgMHhGQywgMHgwMywgMHhGMiwgMHgwMywgMHhDNCwgMHgzQiwgMHgwMCwgMHg3MywgMHgwNSwgMHg4RCwKKzB4MDIsIDB4MzAsIDB4MDMsIDB4QzIsIDB4M0MsIDB4MDQsIDB4RjMsIDB4MDQsIDB4RkMsIDB4MDAsIDB4RjEsIDB4MEUsIDB4QzAsCisweDA2LCAweDAwLCAweDNGLCAweDAwLCAweEZDLCAweDAyLCAweDcwLCAweDI3LCAweEMwLCAweDNDLCAweDQwLCAweEYzLCAweDAyLAorMHhDQywgMHgwMSwgMHhGMSwgMHgwQiwgMHhDMCwgMHgwNCwgMHgyMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4ODEsIDB4MjAsIDB4QzYsIDB4MzQsIDB4OTEsIDB4MTMsIDB4NUMsIDB4MTYsIDB4RDAsIDB4MEQsIDB4NDAsIDB4MzcsIDB4MDAsCisweERELCAweDAwLCAweDc0LCAweDAzLCAweEQ5LCAweDM5LCAweDQwLCAweDM3LCAweDAwLCAweDUxLCAweDA0LCAweDQ0LCAweDBFLAorMHgxMCwgMHg3MSwgMHg0MCwgMHgzNCwgMHgwMCwgMHhEMywgMHgwMSwgMHg3NCwgMHgwQywgMHhEMCwgMHgwRCwgMHg0MCwgMHg0NCwKKzB4MDAsIDB4NUQsIDB4MDMsIDB4MzQsIDB4MTcsIDB4MTEsIDB4MzQsIDB4NDAsIDB4RjQsIDB4MDQsIDB4ODEsIDB4MDAsIDB4NDQsCisweDA3LCAweEQwLCAweDU5LCAweDQ4LCAweDg0LCAweDAyLCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLAorMHhBMCwgMHg0NiwgMHgwMCwgMHg5MSwgMHgwMSwgMHg3NCwgMHgwNiwgMHhEMCwgMHgwRCwgMHg0MCwgMHgzNywgMHgwMCwgMHhERCwKKzB4MDQsIDB4NzQsIDB4ODMsIDB4RDAsIDB4MTksIDB4NDAsIDB4MzcsIDB4MDAsIDB4OTEsIDB4NDAsIDB4NDQsIDB4MDYsIDB4OTAsCisweDExLCAweDQwLCAweDM0LCAweDIwLCAweEQxLCAweDAwLCAweDc0LCAweDQ2LCAweEQwLCAweDFELCAweDQwLCAweDY2LCAweDA0LAorMHg1RCwgMHgxMSwgMHg3NCwgMHgwNiwgMHg1MCwgMHgyNSwgMHg0MCwgMHg3NCwgMHgwMCwgMHhEMSwgMHgwMCwgMHg0NCwgMHgwRSwKKzB4RDAsIDB4MTEsIDB4NDAsIDB4MDQsIDB4MDAsIDB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsCisweDIwLCAweDAwLCAweDgxLCAweDIwLCAweDM0LCAweDAyLCAweEQwLCAweDBDLCAweDQwLCAweDMzLCAweDAwLCAweENELCAweDAwLAorMHgzNCwgMHgwMywgMHhEMCwgMHgwOCwgMHg0MCwgMHgzMywgMHg0OCwgMHg4MSwgMHgwMCwgMHgwNiwgMHgwMCwgMHg5MCwgMHgwOCwKKzB4NDAsIDB4MzAsIDB4MDAsIDB4QzEsIDB4MDAsIDB4MzQsIDB4MDIsIDB4RDAsIDB4MEMsIDB4NDIsIDB4MjAsIDB4MDAsIDB4NDksCisweDAwLCAweDc0LCAweDAyLCAweDE4LCAweDA0LCAweDQwLCAweDEwLCAweDAwLCAweEMxLCAweDIwLCAweDA0LCAweDAyLCAweEQwLAorMHgwOCwgMHg0MiwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNiwKKzB4NDAsIDB4MTMsIDB4NDAsIDB4N0UsIDB4MDAsIDB4RjAsIDB4MEQsIDB4QzAsIDB4MzcsIDB4MDAsIDB4REYsIDB4MjAsIDB4N0UsCisweDAzLCAweEQwLCAweDAxLCAweEMyLCAweDNGLCAweDAwLCAweDEzLCAweDAwLCAweDRDLCAweDAyLCAweEIwLCAweDAxLCAweEMwLAorMHgzQywgMHgwMCwgMHhEMywgMHgwMCwgMHg3QywgMHgwMCwgMHhGMCwgMHgwRCwgMHhDMCwgMHgwNiwgMHgwMCwgMHg1RiwgMHgwMCwKKzB4N0MsIDB4MDIsIDB4NzAsIDB4MDUsIDB4RDAsIDB4MzQsIDB4MTAsIDB4NTMsIDB4MDAsIDB4NEMsIDB4MDAsIDB4RjIsIDB4MDEsCisweEQwLCAweDA0LCAweDYwLCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweEE4LCAweDJGLCAweDEwLAorMHhCRiwgMHgwMCwgMHhERSwgMHgwMCwgMHhGMCwgMHgwRiwgMHhDNiwgMHgzRiwgMHgwMCwgMHhGRiwgMHg4MCwgMHhGQywgMHgwMywKKzB4RDAsIDB4MDMsIDB4RTAsIDB4M0YsIDB4MDAsIDB4MkYsIDB4MDAsIDB4RjQsIDB4MDAsIDB4NzAsIDB4MDMsIDB4RDAsIDB4M0YsCisweDAwLCAweEY3LCAweDAwLCAweEZDLCAweDAwLCAweEYwLCAweDBGLCAweEMwLCAweDBGLCAweDAwLCAweDdGLCAweDAwLCAweEZDLAorMHgwMiwgMHhGMCwgMHgwNywgMHhDOCwgMHgzRiwgMHgwMCwgMHgzRiwgMHhBMCwgMHhGRCwgMHgwMiwgMHhGMCwgMHgwQiwgMHhDMCwKKzB4MTcsIDB4NjEsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4QTgsIDB4M0YsIDB4MDAsIDB4QjMsCisweDAwLCAweENDLCAweDAyLCAweEYwLCAweDBCLCAweEMwLCAweDJGLCAweDAwLCAweEJGLCAweDAwLCAweENDLCAweDAzLCAweDMwLAorMHgwQSwgMHhDMCwgMHgwQywgMHgwMSwgMHgzMywgMHgwMCwgMHhDQywgMHgwMCwgMHhGMCwgMHgwMywgMHhDMCwgMHgwQiwgMHgwMCwKKzB4RkIsIDB4MDYsIDB4RUMsIDB4MDUsIDB4MzAsIDB4NEYsIDB4QzEsIDB4MkYsIDB4MDAsIDB4RjMsIDB4MTQsIDB4RkMsIDB4MjMsCisweEYwLCAweDBCLCAweEMwLCAweDBGLCAweDAwLCAweEY3LCAweDA0LCAweENDLCAweDIyLCAweDM0LCAweDAzLCAweEMwLCAweDBDLAorMHgwMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgxMCwgMHgwNywgMHgxMCwgMHg5MSwgMHg4MCwKKzB4NDQsIDB4MDAsIDB4NzAsIDB4MDEsIDB4NDAsIDB4MDcsIDB4MDAsIDB4OUQsIDB4MDAsIDB4NDQsIDB4NDMsIDB4MTAsIDB4MDksCisweDQ4LCAweDg0LCAweDAwLCAweDkxLCAweDAwLCAweDQ0LCAweDAwLCAweEQwLCAweDAxLCAweDQwLCAweDI3LCAweDAwLCAweEY5LAorMHgwQiwgMHg0NCwgMHg1NSwgMHgxNSwgMHgyRiwgMHg0MCwgMHg2RiwgMHgwMCwgMHhEMSwgMHgwMywgMHg3MCwgMHgzQiwgMHhEMCwKKzB4MzksIDB4NDAsIDB4NDcsIDB4NDAsIDB4RjEsIDB4MDAsIDB4NkMsIDB4MEEsIDB4MTAsIDB4MTUsIDB4NDAsIDB4MEQsIDB4MjAsCisweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDExLCAweEEwLCAweDMzLCAweDA1LCAweDAxLCAweDIwLCAweDE0LAorMHgwMCwgMHhEMCwgMHgwMCwgMHg0MCwgMHgyMywgMHgwMCwgMHgwRCwgMHgyMCwgMHgxNCwgMHgxMywgMHgxMCwgMHgwMCwgMHg0MCwKKzB4MDEsIDB4MDIsIDB4MDEsIDB4MjAsIDB4MDQsIDB4MDIsIDB4RDAsIDB4MDgsIDB4NDIsIDB4MjMsIDB4MDAsIDB4QzEsIDB4MDQsCisweDI0LCAweDgxLCAweDEwLCAweDBDLCAweDRBLCAweDI3LCAweDA4LCAweENELCAweDAwLCAweDM0LCAweDAzLCAweEQxLCAweDg4LAorMHg0MCwgMHgwMywgMHgwMCwgMHhDNSwgMHgwOCwgMHg0NCwgMHhBMiwgMHgxMywgMHgwOCwgMHg0NiwgMHg0QywgMHg4MCwgMHgwRSwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4QTAsIDB4MDUsIDB4MTEsIDB4MTEsIDB4MDQsIDB4NTQsIDB4MDQsCisweEQwLCAweDExLCAweDQxLCAweDQ3LCAweDAwLCAweDFELCAweDExLCAweDc0LCAweDAzLCAweDEwLCAweDE1LCAweDQwLCAweDQxLAorMHgwMCwgMHgxMSwgMHgwMSwgMHg0NCwgMHgwNCwgMHhEMiwgMHgzMSwgMHg0QywgMHhFNywgMHgwMCwgMHhEMSwgMHgwMCwgMHg2NCwKKzB4MjEsIDB4MTAsIDB4MEQsIDB4NDAsIDB4MjcsIDB4MDEsIDB4REQsIDB4MDAsIDB4NzQsIDB4MDMsIDB4RDAsIDB4MTksIDB4NDgsCisweDg3LCAweDAwLCAweEQxLCAweDAwLCAweDY0LCAweDQ2LCAweDEwLCAweDBELCAweDQwLCAweDBELCAweDIwLCAweDA2LCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhBOCwgMHg2NywgMHgwMCwgMHg5MywgMHgwMCwgMHg1RCwgMHg0NiwgMHhGMCwKKzB4MzksIDB4QzAsIDB4NDcsIDB4MDEsIDB4MUYsIDB4MDMsIDB4NUMsIDB4MDMsIDB4MTAsIDB4MjksIDB4RTEsIDB4NDUsIDB4NDAsCisweDkzLCAweDA1LCAweDRDLCAweDBDLCAweEQwLCAweDE5LCAweEMwLCAweEM3LCAweDAwLCAweERCLCAweDAwLCAweDZDLCAweDE3LAorMHgzMCwgMHgwRCwgMHg2MCwgMHgyMywgMHg0MCwgMHhERiwgMHg4MCwgMHg3QywgMHgwMywgMHhGMiwgMHgwOSwgMHhDMCwgMHhDNywKKzB4MDAsIDB4RDcsIDB4MDAsIDB4MEMsIDB4MEUsIDB4MzAsIDB4QjEsIDB4ODEsIDB4MDAsIDB4MjAsIDB4MEUsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDA3LCAweDgwLCAweDY5LCAweDQwLCAweDlGLCAweDAxLCAweEVDLCAweDAwLCAweDcwLCAweDBCLAorMHhDMCwgMHgwRiwgMHgwMCwgMHhBRiwgMHgyMCwgMHg4QywgMHgwMywgMHhGMCwgMHgwQiwgMHhFMiwgMHgwRSwgMHgwMCwgMHhBRiwKKzB4MDAsIDB4RkQsIDB4MDAsIDB4RjAsIDB4MDEsIDB4QzAsIDB4MkYsIDB4MDAsIDB4RkYsIDB4MDAsIDB4REMsIDB4MDYsIDB4RjgsCisweDBGLCAweEMxLCAweDZGLCAweDAwLCAweEYyLCAweDAwLCAweEZDLCAweDAzLCAweEYwLCAweDBCLCAweDQwLCAweDRGLCAweDAyLAorMHhGRiwgMHgwMCwgMHhERiwgMHgwMiwgMHhGMCwgMHgwNywgMHhFMCwgMHgxRiwgMHgwMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDIsIDB4MDgsIDB4MzUsIDB4MDAsIDB4ODMsIDB4MDAsIDB4NEQsIDB4MEEsIDB4RjAsIDB4MjEsIDB4QzAsCisweDI0LCAweDgxLCAweDFGLCAweDAyLCAweDVDLCAweDAzLCAweDMwLCAweEE1LCAweEMwLCAweDQ0LCAweDAwLCAweDFCLCAweDAwLAorMHg3QywgMHgwQSwgMHgzMiwgMHgyOSwgMHhDOSwgMHhBNiwgMHg0MiwgMHhDMywgMHgwMCwgMHg1QywgMHgwMSwgMHgzNCwgMHgwRCwKKzB4QzAsIDB4MjcsIDB4ODAsIDB4RDMsIDB4MDgsIDB4N0MsIDB4MDMsIDB4MzAsIDB4NDksIDB4QzAsIDB4MDcsIDB4MTAsIDB4REYsCisweDAwLCAweDRDLCAweDIyLCAweDMwLCAweDA5LCAweEMwLCAweDBCLCAweDIwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgxMywgMHhBMCwgMHgyQywgMHgxNCwgMHg5MSwgMHgyMCwgMHg0NCwgMHgyQSwgMHhEMCwgMHg4OSwgMHg0MSwgMHg4NCwKKzB4MDAsIDB4MUQsIDB4MDksIDB4RjAsIDB4MDMsIDB4MzAsIDB4ODUsIDB4MDAsIDB4MjQsIDB4MDAsIDB4MTEsIDB4MUEsIDB4NzQsCisweDgyLCAweDMwLCAweDAxLCAweDQwLCAweEE0LCAweDAwLCAweEZCLCAweDQwLCAweDQ0LCAweDAxLCAweDEwLCAweDBGLCAweDQwLAorMHgyNywgMHgwMCwgMHhGMSwgMHgwMSwgMHhGNCwgMHgwMywgMHg1MCwgMHg3OSwgMHg0MCwgMHgwMywgMHgwMCwgMHhGRCwgMHgyNCwKKzB4NTQsIDB4MDIsIDB4QjAsIDB4MUMsIDB4NDAsIDB4NkYsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAzLCAweDIwLCAweDMwLCAweDA4LCAweDgxLCAweDAwLCAweDIwLCAweDI2LCAweEQxLCAweDM4LCAweDQwLCAweDYwLCAweDIwLAorMHg4RCwgMHgyMCwgMHgzNCwgMHgwMywgMHgxMCwgMHgzOSwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwOSwgMHgwMywgMHgxNiwgMHgwMiwKKzB4MTAsIDB4MjAsIDB4NDAsIDB4MDQsIDB4MDEsIDB4QzEsIDB4MDAsIDB4NTQsIDB4MDIsIDB4MTAsIDB4M0MsIDB4NDAsIDB4MzEsCisweDAwLCAweEM4LCAweDAxLCAweDE0LCAweDAzLCAweDkwLCAweDI4LCAweDQwLCAweDEzLCAweDAwLCAweEQ5LCAweDAwLCAweDA2LAorMHgwMywgMHgxMCwgMHg4QywgMHg0MCwgMHg1RiwgMHgwMCwgMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwKKzB4MDIsIDB4NTAsIDB4MDAsIDB4RTEsIDB4MDEsIDB4QTQsIDB4MDcsIDB4RDAsIDB4MTYsIDB4NjAsIDB4N0EsIDB4MjAsIDB4RUQsCisweDAxLCAweEI0LCAweDAzLCAweDkwLCAweDFFLCAweDQwLCAweDQwLCAweDAwLCAweEUxLCAweDQxLCAweEI2LCAweDBELCAweDk0LAorMHgxNiwgMHg0MiwgMHg0QSwgMHgwMCwgMHhDOSwgMHgwMSwgMHg4NCwgMHgwNSwgMHgxMCwgMHgxRSwgMHg0MCwgMHg3QiwgMHgwMCwKKzB4RTksIDB4MDEsIDB4QjQsIDB4MjcsIDB4RDAsIDB4MUEsIDB4NDAsIDB4NUIsIDB4MDAsIDB4Q0QsIDB4MDEsIDB4MTYsIDB4MjYsCisweDkwLCAweDlBLCAweDQwLCAweDNGLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDE4LAorMHgzMCwgMHgwMiwgMHgwMSwgMHgwMCwgMHgwRCwgMHgwMSwgMHhGMCwgMHg4RCwgMHhDMCwgMHgzMCwgMHgwNCwgMHhDRCwgMHgzMCwKKzB4N0MsIDB4MjMsIDB4MTAsIDB4MDgsIDB4QzAsIDB4MDAsIDB4MDEsIDB4MEIsIDB4MDAsIDB4N0MsIDB4MEIsIDB4MzAsIDB4ODgsCisweEMwLCAweDEyLCAweDAyLCAweEMzLCAweDAwLCAweDVDLCAweDIyLCAweDMyLCAweDBDLCAweEMxLCAweDIzLCAweDAwLCAweEM5LAorMHgwOCwgMHg3QywgMHgwMywgMHgzMCwgMHgwOCwgMHhDMCwgMHgyMywgMHgwMCwgMHhDRiwgMHgwMCwgMHgwQywgMHgwMywgMHgzMCwKKzB4MDQsIDB4QzAsIDB4NEIsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4QjgsIDB4MUQsCisweDE0LCAweDdGLCAweDAwLCAweERELCAweDAxLCAweEYyLCAweDg3LCAweEQwLCAweDNELCAweDAwLCAweEZGLCAweDA4LCAweEZDLAorMHgxMywgMHg3MCwgMHgwRiwgMHhDMCwgMHgwRiwgMHgwMCwgMHhGRiwgMHgwMCwgMHhGQywgMHgwMSwgMHg3MCwgMHgwRiwgMHhDOCwKKzB4MUQsIDB4NDAsIDB4RkYsIDB4MTAsIDB4RkMsIDB4MDAsIDB4RjAsIDB4MEYsIDB4QzAsIDB4QUIsIDB4NDIsIDB4RjcsIDB4MjAsCisweEZDLCAweDAzLCAweDcwLCAweDBCLCAweEM4LCAweDJGLCAweDEyLCAweEZDLCAweDAwLCAweEZDLCAweDAyLCAweEYwLCAweDAzLAorMHhDMCwgMHgwQiwgMHg2MCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHhBMCwgMHgyNywgMHgwMCwKKzB4REYsIDB4MDAsIDB4NEUsIDB4MDMsIDB4MzEsIDB4MEQsIDB4QzAsIDB4MTcsIDB4MDAsIDB4NUYsIDB4MDEsIDB4Q0MsIDB4MDMsCisweEYwLCAweDBELCAweEMwLCAweDA0LCAweDAwLCAweEQzLCAweDAwLCAweDdDLCAweDAyLCAweEYwLCAweDBELCAweEMwLCAweDFGLAorMHgyMCwgMHhERiwgMHgwNiwgMHg1QywgMHgwMCwgMHhGMCwgMHgyRCwgMHhDMSwgMHhCNiwgMHgwMCwgMHhEMywgMHgwMCwgMHg3QywKKzB4MDMsIDB4QTgsIDB4MUQsIDB4QzAsIDB4MTUsIDB4MDAsIDB4REYsIDB4MDYsIDB4NEQsIDB4MDEsIDB4MzAsIDB4MUQsIDB4QzAsCisweDU0LCAweDAwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDgwLCAweDI5LCAweDA5LCAweEVELAorMHgyMCwgMHhDNCwgMHgwMywgMHgxMCwgMHgwRSwgMHg0MCwgMHgzQiwgMHgwMCwgMHhGRCwgMHgwMCwgMHg4NCwgMHgwNywgMHhEMCwKKzB4MEMsIDB4NDAsIDB4MDgsIDB4MDAsIDB4RTEsIDB4MDAsIDB4QjQsIDB4MDMsIDB4RDgsIDB4MEUsIDB4NDAsIDB4M0IsIDB4MDgsCisweEZELCAweDEwLCAweEFDLCAweDAwLCAweEQwLCAweDJFLCAweDQ0LCAweDNCLCAweDAwLCAweEUxLCAweDAyLCAweEY0LCAweDAzLAorMHgxMCwgMHgwRSwgMHg0MCwgMHgxOCwgMHgwMCwgMHhFRCwgMHgxNiwgMHhDNCwgMHgwMiwgMHhCMCwgMHgwQSwgMHhDMCwgMHg0RSwKKzB4MjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4RjksIDB4MDAsIDB4RUQsIDB4ODEsCisweDg0LCAweDA3LCAweDExLCAweDFFLCAweDQ4LCAweEZCLCAweDA4LCAweEVELCAweDExLCAweDg0LCAweDA3LCAweEQwLCAweDFFLAorMHg0MCwgMHg0OCwgMHgwMCwgMHhFMSwgMHgwMSwgMHhCNCwgMHgwNywgMHhEMCwgMHgxRSwgMHg0MSwgMHhGQiwgMHgwMCwgMHhFRCwKKzB4MDUsIDB4OTQsIDB4NDQsIDB4RDksIDB4NUUsIDB4NDAsIDB4NzMsIDB4MDAsIDB4RTUsIDB4MDUsIDB4QjQsIDB4MDcsIDB4OTAsCisweDFDLCAweDQ0LCAweDc5LCAweDAwLCAweEVELCAweDQxLCAweDg0LCAweDA3LCAweDEwLCAweDE0LCAweDQwLCAweDA0LCAweDAwLAorMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNiwgMHgyOCwgMHhCMywgMHgwNCwgMHhDRCwgMHgwMiwgMHgwNSwKKzB4ODMsIDB4MTIsIDB4NkMsIDB4NjAsIDB4NzMsIDB4MTAsIDB4Q0QsIDB4MDMsIDB4MDQsIDB4MDMsIDB4RDAsIDB4MUMsIDB4NTAsCisweDMwLCAweDAyLCAweEMxLCAweDA5LCAweDM0LCAweDBCLCAweEQwLCAweDNDLCAweDQ0LCAweDczLCAweDAxLCAweENELCAweDQwLAorMHgyNCwgMHgwNCwgMHhEOCwgMHgwQywgMHg0MCwgMHg3MywgMHg4MCwgMHhDNSwgMHgwMCwgMHgzNCwgMHgwMywgMHgxMCwgMHgwQywKKzB4NDIsIDB4MzAsIDB4MDAsIDB4Q0QsIDB4MDAsIDB4MjQsIDB4MDIsIDB4OTAsIDB4MDAsIDB4NTAsIDB4NEEsIDB4MjAsIDB4MEMsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE3LCAweEEwLCAweDVELCAweDAwLCAweDdGLCAweDAwLCAweENDLCAweDA1LAorMHgzMCwgMHgyNywgMHhDMCwgMHgxRiwgMHgwMCwgMHg3RiwgMHgwOCwgMHg0RCwgMHgwMSwgMHhGMCwgMHgxNywgMHhDMSwgMHg1QywKKzB4NDAsIDB4NzMsIDB4MDEsIDB4RkMsIDB4MDEsIDB4RjAsIDB4MjcsIDB4NDAsIDB4NUYsIDB4MDAsIDB4NUYsIDB4MDAsIDB4REMsCisweDAxLCAweEYwLCAweDA1LCAweEMwLCAweDU2LCAweDQxLCAweDU3LCAweDAwLCAweDdDLCAweDAxLCAweEIwLCAweDA1LCAweEMwLAorMHgxRCwgMHg4OSwgMHg1RiwgMHgwMCwgMHg4QywgMHgwMSwgMHgzMCwgMHgwNywgMHhDMCwgMHg1QywgMHgyMCwgMHgwNiwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4MDgsIDB4ODEsIDB4MDgsIDB4MUYsIDB4MTAsIDB4N0MsIDB4MjQsIDB4RjQsCisweEExLCAweEMwLCAweDA3LCAweDA0LCAweDFGLCAweDAwLCAweDdDLCAweDAwLCAweEYwLCAweDAxLCAweEM0LCAweDQ3LCAweDA4LAorMHgxRiwgMHgyNiwgMHg3QywgMHgwMCwgMHhGMCwgMHg0MSwgMHhDMiwgMHg4NywgMHgwMCwgMHgwRiwgMHgwMCwgMHg3QywgMHgwMCwKKzB4RjIsIDB4MDAsIDB4QzAsIDB4MDcsIDB4MDAsIDB4MUIsIDB4MDAsIDB4N0MsIDB4MDAsIDB4NzAsIDB4MDEsIDB4QzAsIDB4MDMsCisweDAwLCAweDFGLCAweDAwLCAweDVDLCAweDA0LCAweEYwLCAweDAxLCAweEMwLCAweDRCLCAweDAwLCAweDBDLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHgyNSwgMHgwMCwgMHg4MywgMHgwMCwgMHgwQywgMHgwMiwgMHgzMCwgMHg4OSwKKzB4QzAsIDB4MjcsIDB4MDAsIDB4OUYsIDB4MDEsIDB4N0MsIDB4MDIsIDB4RjAsIDB4MDksIDB4RDAsIDB4NjAsIDB4MDIsIDB4OTMsCisweDAxLCAweDdDLCAweDQ2LCAweEYwLCAweDU5LCAweEMwLCAweDIzLCAweDAwLCAweDlCLCAweDAwLCAweDRDLCAweDQyLCAweEIwLAorMHgwOSwgMHhDMCwgMHgyMiwgMHgwMSwgMHg5MywgMHgwMCwgMHgzQywgMHgwMiwgMHg5MCwgMHg0OSwgMHhDMCwgMHhBNywgMHg0MCwKKzB4OTMsIDB4MDAsIDB4NEQsIDB4MDIsIDB4MTQsIDB4MDksIDB4QzAsIDB4NDMsIDB4MjAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAxLCAweDAwLCAweEU0LCAweDIxLCAweDkxLCAweDAwLCAweDQ0LCAweDBFLCAweDE0LCAweDI5LCAweEMwLAorMHgyNSwgMHgwMiwgMHg5RCwgMHgxQiwgMHg3NCwgMHgwMiwgMHhEMCwgMHgwOSwgMHhDMCwgMHgyNCwgMHgwMCwgMHg5NSwgMHgxMiwKKzB4NUMsIDB4MjIsIDB4RDIsIDB4MTksIDB4NDAsIDB4NjcsIDB4MDAsIDB4OTEsIDB4ODAsIDB4NDQsIDB4MDIsIDB4MTAsIDB4MjksCisweDQxLCAweDY0LCAweDAwLCAweDkxLCAweDAwLCAweDc0LCAweDAyLCAweDUwLCAweDM5LCAweDQxLCAweDY3LCAweDAwLCAweDkxLAorMHgwMiwgMHg0NCwgMHgwMiwgMHgxMCwgMHgwOSwgMHg0MCwgMHgwNywgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MTgsIDB4QTAsIDB4NjQsIDB4MDAsIDB4OTEsIDB4MDAsIDB4NDQsIDB4MjIsIDB4MTAsIDB4MDksIDB4NDEsIDB4MjcsCisweDAwLCAweDlELCAweDAwLCAweDc0LCAweDAyLCAweEQwLCAweDA4LCAweDQwLCAweDI0LCAweDAwLCAweDk5LCAweDA4LCAweDc0LAorMHgwMiwgMHhEMCwgMHgwOSwgMHg0MCwgMHgyNywgMHgwMSwgMHg5OSwgMHgwMCwgMHgwNCwgMHg4MiwgMHg5NCwgMHgwOSwgMHg0MCwKKzB4MjYsIDB4MDAsIDB4OTUsIDB4MDAsIDB4NzQsIDB4MDIsIDB4NTAsIDB4MDksIDB4NDAsIDB4MjcsIDB4MjAsIDB4ODksIDB4NDIsCisweDQ0LCAweDAyLCAweDUwLCAweDA5LCAweDQwLCAweDYzLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgxMCwgMHgyMCwgMHgyMCwgMHgwMSwgMHg4MSwgMHgwNCwgMHgwNCwgMHgxMiwgMHgxMCwgMHgwOCwgMHg0MCwgMHgyMSwgMHg4MiwKKzB4OEQsIDB4MTAsIDB4MzQsIDB4MTIsIDB4RDAsIDB4NTgsIDB4NDAsIDB4MjAsIDB4MDEsIDB4OEQsIDB4MTAsIDB4MTQsIDB4NDIsCisweEQwLCAweDc4LCAweDQxLCAweDMzLCAweDA2LCAweDgxLCAweDAwLCAweDA0LCAweDAyLCAweDEwLCAweDQ4LCAweDQwLCAweDIwLAorMHgwMSwgMHg4NSwgMHgwNCwgMHgzNCwgMHg1MiwgMHg1OSwgMHg0OCwgMHg0MCwgMHgyMywgMHgwMSwgMHg4OSwgMHgwNCwgMHg0NCwKKzB4MTIsIDB4NTAsIDB4NDgsIDB4NDAsIDB4NDMsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MUQsCisweEI4LCAweDg2LCAweDQyLCAweDAzLCAweDBBLCAweDQ1LCAweDMxLCAweDMwLCAweEUxLCAweDQwLCAweDk3LCAweDA0LCAweDFGLAorMHgwOCwgMHg3QywgMHgyOCwgMHhGMCwgMHhBMSwgMHhDMCwgMHg4MCwgMHgwMiwgMHgxQiwgMHgwNiwgMHg3QywgMHgxOSwgMHhGMCwKKzB4MjEsIDB4QzAsIDB4ODcsIDB4MDEsIDB4MUIsIDB4MUUsIDB4NEMsIDB4MjgsIDB4QjEsIDB4QTEsIDB4QzAsIDB4MDYsIDB4NDAsCisweDE3LCAweDAwLCAweDdDLCAweDIwLCAweEYwLCAweDAxLCAweDgwLCAweDA3LCAweDAwLCAweDBCLCAweDBBLCAweDRDLCAweDI4LAorMHg3MCwgMHgwMSwgMHhDMCwgMHg3NywgMHhDMCwgMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxRCwgMHhCOCwKKzB4MkYsIDB4MEEsIDB4QkYsIDB4MDgsIDB4RkMsIDB4MEEsIDB4RjIsIDB4Q0IsIDB4QzAsIDB4MkQsIDB4MDAsIDB4QkYsIDB4MDAsCisweDdDLCAweDIyLCAweEYwLCAweDhCLCAweEM4LCAweDJELCAweDAyLCAweEI3LCAweDE0LCAweERDLCAweDUyLCAweEYwLCAweDBCLAorMHhDMiwgMHgzRiwgMHgwMCwgMHg5RiwgMHgwMCwgMHhGRCwgMHg4MywgMHhGMCwgMHg4OSwgMHhDMCwgMHgyRiwgMHgwMiwgMHg5QiwKKzB4MDgsIDB4N0MsIDB4MDIsIDB4NzAsIDB4OEIsIDB4QzgsIDB4MkUsIDB4MDIsIDB4OTcsIDB4MDgsIDB4RkMsIDB4MjIsIDB4QjAsCisweDhCLCAweEMwLCAweDY3LCAweDYwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFDLCAweEE4LCAweDJGLAorMHgwNSwgMHhEMywgMHg0QywgMHhDQywgMHgwMiwgMHhGMSwgMHgwQiwgMHhDMCwgMHgyRiwgMHgwMiwgMHhCMywgMHgwNCwgMHhGQywKKzB4NTIsIDB4MzAsIDB4Q0IsIDB4QzAsIDB4MkMsIDB4MDAsIDB4QjMsIDB4MDAsIDB4Q0MsIDB4MjIsIDB4RjAsIDB4NEIsIDB4QzAsCisweDJELCAweDA1LCAweDlGLCAweDBDLCAweDVDLCAweDAyLCAweEIwLCAweDBCLCAweEMwLCAweDJDLCAweDAwLCAweEIzLCAweDA1LAorMHg1QywgMHgxNiwgMHhCMCwgMHgwRiwgMHhDMCwgMHgyQywgMHgwMCwgMHhCRiwgMHg4MCwgMHhDRCwgMHgwMiwgMHgzMSwgMHgwQiwKKzB4QzAsIDB4NjQsIDB4MDAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDAsIDB4MDcsIDB4MDEsCisweDExLCAweDBDLCAweDQ1LCAweDQ4LCAweEQwLCAweDAxLCAweDQxLCAweDA3LCAweDAyLCAweDExLCAweDU0LCAweDc0LCAweDAwLAorMHgzOCwgMHhDMSwgMHhDMCwgMHg5MCwgMHgwNCwgMHgxMSwgMHgxMCwgMHg0NCwgMHgyMCwgMHhEMiwgMHg0MSwgMHg0MSwgMHgwNywKKzB4MjEsIDB4MUQsIDB4MEMsIDB4NDQsIDB4NDAsIDB4NDAsIDB4MDEsIDB4NDEsIDB4MDQsIDB4MDIsIDB4MUIsIDB4MDAsIDB4NzAsCisweDU0LCAweDEwLCAweDAxLCAweEMwLCAweDk2LCAweDAwLCAweDAzLCAweDEwLCAweDQ1LCAweDIwLCAweDUwLCAweDAxLCAweDQwLAorMHg3MSwgMHgyMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHgwMCwgMHgyMSwgMHgwNSwgMHg4MSwKKzB4MDQsIDB4MDQsIDB4MzIsIDB4RDAsIDB4ODgsIDB4NjAsIDB4MjMsIDB4MDAsIDB4ODEsIDB4MkMsIDB4MzYsIDB4MDIsIDB4MTgsCisweDRDLCAweDYyLCAweDIxLCAweDRCLCAweDgwLCAweDA4LCAweDI0LCAweDAyLCAweEQwLCAweEM4LCAweDQwLCAweDIxLCAweDJELAorMHg4RCwgMHg0NCwgMHg3NCwgMHgxMiwgMHg4MCwgMHg4OCwgMHg1MCwgMHgyMCwgMHgwMCwgMHg4NSwgMHgwMiwgMHgxNCwgMHgwQSwKKzB4NTAsIDB4MEMsIDB4NDgsIDB4MjIsIDB4MTIsIDB4OEQsIDB4MDgsIDB4MjQsIDB4MDIsIDB4MTAsIDB4MDgsIDB4NDAsIDB4NDgsCisweDgwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDI4LCAweDI1LCAweDAwLCAweDkxLCAweDgyLAorMHg0NCwgMHg0MiwgMHhEMCwgMHgwRCwgMHg0MCwgMHgyNywgMHgwNSwgMHg5MSwgMHgwMCwgMHg3NCwgMHgwMiwgMHgxMCwgMHg0OSwKKzB4NDAsIDB4MjUsIDB4MDEsIDB4RDEsIDB4MDAsIDB4NjQsIDB4MDIsIDB4RDAsIDB4MDksIDB4NDAsIDB4MjcsIDB4MDIsIDB4OEQsCisweDAwLCAweDY0LCAweDAyLCAweDEwLCAweDA4LCAweDQwLCAweDI0LCAweDAxLCAweDlELCAweDAwLCAweDc0LCAweDAyLCAweDUwLAorMHgwRCwgMHg0MCwgMHgyNiwgMHgwMCwgMHg5MSwgMHgwMCwgMHg2NCwgMHgwMiwgMHg1MCwgMHgyOSwgMHg0MCwgMHg2MSwgMHgyMCwKKzB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4MjgsIDB4MjUsIDB4NDIsIDB4OTMsIDB4MDAsIDB4NEQsCisweDAyLCAweEYwLCAweDc5LCAweEMwLCAweDY3LCAweDQwLCAweDkzLCAweDExLCAweDdDLCAweDAyLCAweDM0LCAweDM5LCAweEMxLAorMHgyNSwgMHgwMCwgMHg5MywgMHgxMCwgMHg2RCwgMHg0RSwgMHhGMCwgMHg2OSwgMHhDMCwgMHhFNSwgMHgwMCwgMHg5RiwgMHgwMCwKKzB4N0MsIDB4OEEsIDB4QjAsIDB4MDksIDB4QzAsIDB4NjQsIDB4MDAsIDB4OTcsIDB4MDAsIDB4NUMsIDB4MDIsIDB4NzAsIDB4MDksCisweEMwLCAweEE2LCAweDAwLCAweDlGLCAweDAwLCAweDZELCAweDFBLCAweDMwLCAweDI5LCAweEMwLCAweDE0LCAweEEwLCAweDA0LAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNiwgMHgwMCwgMHg2NSwgMHgwMCwgMHg5RiwgMHgyMCwgMHg3QywgMHgyNiwKKzB4RjAsIDB4NDksIDB4QzAsIDB4MjcsIDB4MDAsIDB4OUYsIDB4MDQsIDB4M0MsIDB4MDIsIDB4RjAsIDB4MTksIDB4RDAsIDB4MjQsCisweDAwLCAweDlGLCAweDAwLCAweDRDLCAweDI2LCAweEYwLCAweDA5LCAweEMwLCAweDY3LCAweDg0LCAweDlGLCAweDAwLCAweDVDLAorMHgyMiwgMHg3MCwgMHgwOSwgMHhDMCwgMHg2NywgMHgwOCwgMHg5QiwgMHgwMCwgMHg3QywgMHgwMiwgMHgzNCwgMHgwOSwgMHhDMCwKKzB4NjcsIDB4ODIsIDB4OUYsIDB4MDAsIDB4NUQsIDB4MDIsIDB4RjAsIDB4MDksIDB4QzAsIDB4NUIsIDB4MDAsIDB4MDYsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDA4LCAweDAxLCAweDAwLCAweDBGLCAweDAwLCAweDRFLCAweDQ4LCAweEYyLAorMHg0MSwgMHhFNCwgMHg4NywgMHgwMSwgMHgxRiwgMHgwOCwgMHg3QywgMHg4MCwgMHg3MCwgMHgwMCwgMHhDMCwgMHg4NCwgMHgwMCwKKzB4MTMsIDB4MDEsIDB4N0MsIDB4MDAsIDB4RjgsIDB4MjEsIDB4QzQsIDB4ODcsIDB4MDgsIDB4MUYsIDB4MDAsIDB4NUMsIDB4MDgsCisweEYwLCAweDAxLCAweEMwLCAweDAzLCAweDAwLCAweDFGLCAweDAwLCAweDdDLCAweDAwLCAweEYwLCAweDQxLCAweEMwLCAweDg3LAorMHg0MCwgMHgxMywgMHgwMCwgMHgwQywgMHgwMCwgMHhGMCwgMHhBMCwgMHhDMCwgMHg1MCwgMHgyMCwgMHgwNCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MUMsIDB4MDAsIDB4NUQsIDB4MjAsIDB4QzYsIDB4MUQsIDB4NzAsIDB4MjcsCisweDQwLCAweDVGLCAweDA0LCAweDdELCAweDA4LCAweDc0LCAweDE1LCAweEQwLCAweDI3LCAweEMwLCAweDE0LCAweDAwLCAweDcxLAorMHgwMCwgMHhEQywgMHgwOSwgMHhGMCwgMHgzNywgMHg2MCwgMHg5RiwgMHgwMCwgMHg1RCwgMHgwMCwgMHgwNCwgMHgwMSwgMHgzMCwKKzB4NDcsIDB4NDAsIDB4MTcsIDB4NDAsIDB4NTIsIDB4MDAsIDB4NUMsIDB4MDEsIDB4RDAsIDB4MjYsIDB4NDAsIDB4MTcsIDB4MDQsCisweDc0LCAweDgyLCAweDQ0LCAweDAxLCAweEQwLCAweDA1LCAweDQwLCAweDUwLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgxMCwgMHhBMCwgMHhGMiwgMHgwNCwgMHhDRCwgMHgwMCwgMHgyNCwgMHgwRiwgMHg1MCwgMHg4QywgMHg0MCwKKzB4NzcsIDB4MDAsIDB4Q0QsIDB4MDMsIDB4MzQsIDB4MDMsIDB4RDAsIDB4MkMsIDB4NDEsIDB4MzYsIDB4MDAsIDB4RDEsIDB4MjAsCisweDM0LCAweDQ3LCAweEQyLCAweDBDLCAweDQxLCAweEIzLCAweDAwLCAweENELCAweDAwLCAweDE0LCAweDAzLCAweDUwLCAweDFDLAorMHg0MCwgMHgyMywgMHgwOCwgMHg4OCwgMHgyMCwgMHg3NCwgMHgwMywgMHhEMCwgMHgyMCwgMHg2MCwgMHg2MywgMHgwMCwgMHg5MCwKKzB4MTIsIDB4MDUsIDB4MDMsIDB4RDAsIDB4MUMsIDB4NDAsIDB4NTAsIDB4MDAsIDB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDA0LCAweDgwLCAweEE4LCAweDEwLCAweEVELCAweDAwLCAweEE0LCAweDAxLCAweDUwLCAweDBFLCAweDQwLCAweDNCLAorMHgyMCwgMHhFRCwgMHgwMCwgMHhCNCwgMHgwMywgMHhEMCwgMHgwQiwgMHg2MCwgMHgyOCwgMHgwMCwgMHhFMSwgMHgwMCwgMHg5NCwKKzB4MDksIDB4MTAsIDB4MEUsIDB4NDEsIDB4OUIsIDB4MDgsIDB4Q0QsIDB4MDQsIDB4QzQsIDB4MTMsIDB4MTIsIDB4MDYsIDB4NDAsCisweDJCLCAweDAwLCAweEU5LCAweDAwLCAweEI2LCAweDAzLCAweEQwLCAweDA2LCAweDQwLCAweDYzLCAweDAwLCAweEU1LCAweDAwLAorMHg4NCwgMHgwMiwgMHhEMCwgMHgwRSwgMHg2MCwgMHgxNCwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MTQsIDB4MTgsIDB4NDgsIDB4MTAsIDB4RkYsIDB4MDEsIDB4QTUsIDB4MDcsIDB4NzAsIDB4MUUsIDB4NDAsIDB4NUIsIDB4MDAsCisweEVELCAweDAxLCAweEJDLCAweDg3LCAweEYwLCAweDE2LCAweEMwLCAweDdBLCAweDQyLCAweEUxLCAweDAxLCAweEJDLCAweDA3LAorMHhEMCwgMHgxNiwgMHg0MCwgMHg3QiwgMHgwMCwgMHhFRiwgMHgwOSwgMHg5RCwgMHg1RiwgMHg3MCwgMHgxNiwgMHhFNCwgMHg3MywKKzB4MDAsIDB4QUIsIDB4MDEsIDB4QkMsIDB4MDcsIDB4RjAsIDB4MTIsIDB4ODAsIDB4N0IsIDB4MDAsIDB4MjEsIDB4MDEsIDB4OEMsCisweDA3LCAweEYwLCAweDFFLCAweEQwLCAweDU0LCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLAorMHhCOCwgMHgwNSwgMHgwMCwgMHhERiwgMHgxNiwgMHg1QywgMHgwMSwgMHg3MCwgMHgwRCwgMHhDMCwgMHgxNywgMHgwMCwgMHhERiwKKzB4MDAsIDB4N0MsIDB4MDMsIDB4QTEsIDB4NDIsIDB4RDEsIDB4MzcsIDB4MjAsIDB4MUYsIDB4MDAsIDB4N0MsIDB4MDEsIDB4RjAsCisweDA1LCAweEMwLCAweDI3LCAweDAwLCAweERGLCAweDA4LCAweDNDLCAweDFCLCAweDcwLCAweDA1LCAweEMwLCAweDM3LCAweDQwLAorMHhEMywgMHgwMCwgMHg1QywgMHg4MywgMHhGMCwgMHgwRCwgMHg4MCwgMHgzNywgMHgwMCwgMHg1QiwgMHgyMCwgMHg3QywgMHgwMiwKKzB4RjAsIDB4MEMsIDB4QzAsIDB4NDMsIDB4NjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDYsIDB4MjAsCisweDRELCAweDAwLCAweEY3LCAweDMxLCAweENDLCAweDEzLCAweEYwLCAweDk3LCAweEMwLCAweDdDLCAweDAwLCAweEZGLCAweDAxLAorMHhGQywgMHgwNiwgMHhCMCwgMHg5RiwgMHhDMCwgMHg3QywgMHgwMCwgMHg3MywgMHgwOSwgMHhGQywgMHgyNywgMHhGMCwgMHgxRiwKKzB4QzAsIDB4N0YsIDB4MDAsIDB4RkYsIDB4ODEsIDB4Q0MsIDB4MDcsIDB4NzAsIDB4OUYsIDB4QzAsIDB4NkMsIDB4NDAsIDB4QjcsCisweDQxLCAweENDLCAweDA3LCAweEIwLCAweDFBLCAweEMwLCAweDZDLCAweDIwLCAweEJGLCAweDIxLCAweENDLCAweDA3LCAweEYwLAorMHgxQiwgMHhDMCwgMHgwQiwgMHgwMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwgMHgwMCwgMHgwRCwKKzB4MDAsIDB4RUIsIDB4MDAsIDB4ODQsIDB4MDMsIDB4RDAsIDB4OEUsIDB4NDAsIDB4MzgsIDB4MDAsIDB4RUQsIDB4MDAsIDB4QjQsCisweDIyLCAweEQwLCAweEM2LCAweDUwLCAweDI4LCAweDMwLCAweDYwLCAweDE4LCAweDlDLCAweDIzLCAweEQwLCAweDBFLCAweEMwLAorMHgzOSwgMHgwMiwgMHhFRCwgMHgwNCwgMHg4NCwgMHgxMywgMHg0MCwgMHgwMywgMHhDMCwgMHgyQSwgMHgwMCwgMHhFNSwgMHgwMCwKKzB4QUMsIDB4MjMsIDB4MTAsIDB4MEUsIDB4QzIsIDB4MkEsIDB4MDAsIDB4RTksIDB4MDAsIDB4ODUsIDB4NDIsIDB4RDAsIDB4MEUsCisweDQwLCAweDU3LCAweDAwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA5LCAweDAwLAorMHhFNSwgMHgxMCwgMHg4NCwgMHgyMywgMHhEMCwgMHgwNiwgMHg0MiwgMHgxOCwgMHgwNCwgMHg2RCwgMHgwMCwgMHhCNCwgMHgwMiwKKzB4RDAsIDB4MDYsIDB4NDIsIDB4MzgsIDB4MDAsIDB4NjEsIDB4ODAsIDB4QjQsIDB4MDIsIDB4RDAsIDB4OEEsIDB4NDAsIDB4QkIsCisweDAwLCAweEVELCAweDIwLCAweEM0LCAweDRCLCAweDQyLCAweDA2LCAweDQwLCAweDMyLCAweDAwLCAweEE1LCAweDAwLCAweEE0LAorMHgwMywgMHg5MCwgMHgwMiwgMHg0MCwgMHgyOCwgMHgwMCwgMHhBNSwgMHgwOCwgMHhBNCwgMHgwMywgMHhEMCwgMHgwQSwgMHg0MCwKKzB4NjMsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MjgsIDB4MDEsIDB4MDAsIDB4RDEsCisweDAxLCAweDA0LCAweDAyLCAweEQwLCAweDI4LCAweDUwLCAweDgwLCAweDA0LCAweDhELCAweDQ3LCAweDM0LCAweDAyLCAweEQwLAorMHgwNSwgMHg1OCwgMHgzNCwgMHg0MiwgMHgwMSwgMHg5MSwgMHgxNCwgMHhDRSwgMHhEMCwgMHgzOSwgMHg0MCwgMHgwMSwgMHgyMCwKKzB4Q0QsIDB4MDAsIDB4MDQsIDB4MDcsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MzIsIDB4NDAsIDB4QzUsIDB4MDAsIDB4MjQsIDB4MDMsCisweDEwLCAweDBDLCAweDQwLCAweDIyLCAweDAwLCAweEM5LCAweDAwLCAweDI0LCAweDBFLCAweEQwLCAweDhDLCAweDQwLCAweDFCLAorMHgyMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwgMHhBMCwgMHgwNSwgMHgwNiwgMHhGNSwgMHgyMCwKKzB4NEMsIDB4MDIsIDB4RjAsIDB4QjksIDB4QzEsIDB4QTQsIDB4MDAsIDB4MUYsIDB4MDUsIDB4NzQsIDB4ODIsIDB4QjAsIDB4MDksCisweEMwLCAweDc0LCAweDAwLCAweDkzLCAweDAzLCAweDdDLCAweDQyLCAweEQwLCAweDM5LCAweEMxLCAweEI3LCAweDAwLCAweEZGLAorMHgwMCwgMHhDQywgMHgwNywgMHg3MCwgMHgwNSwgMHhDMCwgMHgyNiwgMHg0MCwgMHg4NSwgMHgwMCwgMHhFQywgMHgwMywgMHhCMCwKKzB4MDEsIDB4QzgsIDB4MjQsIDB4MDAsIDB4NTcsIDB4ODAsIDB4NkMsIDB4MEUsIDB4RjAsIDB4MEQsIDB4QzAsIDB4NTcsIDB4MjAsCisweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDA4LCAweDA3LCAweDIwLCAweERGLCAweDAwLCAweDdDLAorMHgyOCwgMHhGMCwgMHgyMSwgMHhDMCwgMHg4NywgMHgwMCwgMHgxRiwgMHgwMCwgMHg3QywgMHgwMiwgMHhGMiwgMHgxOSwgMHhDMCwKKzB4MjcsIDB4MDQsIDB4OUYsIDB4MDIsIDB4N0MsIDB4MDAsIDB4RjAsIDB4NDEsIDB4QzAsIDB4MTcsIDB4MDAsIDB4Q0YsIDB4MDAsCisweDdELCAweDAzLCAweEYwLCAweDA1LCAweEMwLCAweDIzLCAweDQwLCAweDlFLCAweDAwLCAweDdDLCAweDAzLCAweEYwLCAweDAxLAorMHhDMCwgMHgyNywgMHgwMCwgMHg1QywgMHgwMCwgMHgxQywgMHgwMiwgMHhGMCwgMHgwRCwgMHhDMCwgMHgyNywgMHgwMCwgMHgwQywKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDgsIDB4MEIsIDB4MDAsIDB4RkIsIDB4MDAsIDB4Q0MsIDB4NDIsCisweEYwLCAweDA5LCAweEMwLCAweDJCLCAweDAwLCAweEIzLCAweDAwLCAweEZDLCAweDAyLCAweEYwLCAweDAxLCAweEMwLCAweDM0LAorMHgwMCwgMHhCMywgMHgwMCwgMHhCNCwgMHgwMCwgMHgzMCwgMHgwMywgMHhDMCwgMHgzQywgMHgwMCwgMHhERiwgMHgwMCwgMHhDQywKKzB4MDMsIDB4RjAsIDB4MDYsIDB4QzAsIDB4RUMsIDB4MDAsIDB4OTMsIDB4MDgsIDB4MEMsIDB4MDMsIDB4MzQsIDB4NTMsIDB4NDAsCisweDM4LCAweDAwLCAweEUzLCAweEMwLCAweENDLCAweDU2LCAweDMxLCAweDBGLCAweEMwLCAweDA3LCAweDIwLCAweDBDLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MSwgMHgyMCwgMHhDNiwgMHgwMSwgMHhEMSwgMHgwMCwgMHg0NCwgMHgxNCwgMHhEMCwKKzB4MzksIDB4NDAsIDB4NDcsIDB4MDEsIDB4OTEsIDB4MDEsIDB4NzQsIDB4MDIsIDB4QzgsIDB4MTEsIDB4NTAsIDB4MzQsIDB4MDAsCisweDFGLCAweDgzLCAweDc0LCAweDBDLCAweDEyLCAweDMxLCAweDQ0LCAweEM0LCAweDBDLCAweERGLCAweDAwLCAweDU0LCAweDAzLAorMHhGMCwgMHgyNSwgMHg0NCwgMHgyNCwgMHgwMCwgMHg5MSwgMHgwMSwgMHg0NSwgMHgwMywgMHhCMCwgMHgwNCwgMHg0MCwgMHgzNSwKKzB4MDAsIDB4RDMsIDB4MDMsIDB4NTQsIDB4MDIsIDB4MTAsIDB4MEQsIDB4NDAsIDB4MDcsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAxLCAweEEwLCAweDQ2LCAweDQwLCAweEQxLCAweDAwLCAweDQ0LCAweDA0LCAweEQwLCAweDExLAorMHg0MCwgMHg2NywgMHgwMCwgMHgxMSwgMHgxMSwgMHg3NiwgMHgwNiwgMHhEMSwgMHgxOSwgMHg1NCwgMHgzNCwgMHgwMCwgMHg5MSwKKzB4MDEsIDB4NzYsIDB4NDYsIDB4MTAsIDB4MzksIDB4NjAsIDB4NjQsIDB4MTAsIDB4REQsIDB4NDAsIDB4NDQsIDB4MDMsIDB4RDAsCisweDI1LCAweDQwLCAweDI0LCAweDE4LCAweDkxLCAweDQwLCAweDU0LCAweDAzLCAweDEwLCAweDBELCAweDQwLCAweDI1LCAweDQwLAorMHhEMSwgMHgwQSwgMHg0NCwgMHgwMiwgMHgxMCwgMHgwOSwgMHg0MCwgMHgwNywgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MTAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4QzEsIDB4NDAsIDB4MDQsIDB4MDAsIDB4RDAsIDB4MDAsIDB4NDIsCisweDIzLCAweDAwLCAweDAxLCAweDAwLCAweDM0LCAweDAyLCAweEQwLCAweDAwLCAweDQwLCAweDIwLCAweDAwLCAweDgxLCAweDAwLAorMHgzNCwgMHgwMiwgMHgxMCwgMHgwMCwgMHg3MCwgMHgwMCwgMHgwMCwgMHhDNSwgMHgwMCwgMHgxNCwgMHgwMywgMHgxMCwgMHgwMCwKKzB4NTAsIDB4MjAsIDB4MjAsIDB4ODEsIDB4MDAsIDB4MTQsIDB4MDMsIDB4OTAsIDB4MEMsIDB4NDgsIDB4MjEsIDB4MDAsIDB4QzksCisweDgwLCAweDE0LCAweDAyLCAweDEwLCAweDBDLCAweDRDLCAweDQzLCAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgxOCwgMHgwNiwgMHgwMCwgMHhFMywgMHgwMCwgMHg0QywgMHgwMiwgMHhEMCwgMHgwMSwgMHhDMiwgMHgyNywKKzB4MDAsIDB4MTMsIDB4MDAsIDB4N0UsIDB4MDIsIDB4QzAsIDB4MDMsIDB4QzAsIDB4M0MsIDB4NDAsIDB4OTEsIDB4MDAsIDB4N0MsCisweDAwLCAweDM4LCAweDA5LCAweEMwLCAweDI0LCAweDAwLCAweEZDLCAweDAwLCAweENDLCAweDgzLCAweEQwLCAweDA1LCAweEMwLAorMHgyNCwgMHg0MCwgMHg5MywgMHg0MCwgMHg1QywgMHgwMywgMHgxMCwgMHgwOSwgMHhDMCwgMHgyNSwgMHgwMCwgMHhDMywgMHg4MCwKKzB4NEMsIDB4MDIsIDB4MzQsIDB4MDksIDB4QzAsIDB4MDcsIDB4ODAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDA1LCAweEI4LCAweDBELCAweDAwLCAweEY3LCAweDAwLCAweEZDLCAweDAyLCAweEYwLCAweDBCLCAweEMwLCAweDJGLCAweDQwLAorMHhCRiwgMHgwMCwgMHhGQywgMHgwMiwgMHhGMCwgMHgwMywgMHhDMCwgMHgzRiwgMHgwMCwgMHgzRiwgMHgwMCwgMHhGQywgMHgwMCwKKzB4RjAsIDB4MDMsIDB4QzQsIDB4MEYsIDB4MDAsIDB4RkYsIDB4MDAsIDB4QjgsIDB4MDMsIDB4RjAsIDB4MDMsIDB4QzQsIDB4MkYsCisweDQwLCAweEJGLCAweDAwLCAweEVDLCAweDAzLCAweDcwLCAweDBGLCAweEMwLCAweDJGLCAweDAwLCAweEY3LCAweDAwLCAweEZDLAorMHgwMiwgMHhGMCwgMHgwRiwgMHhDMCwgMHgxNywgMHhFMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywKKzB4ODAsIDB4N0YsIDB4MDAsIDB4QkYsIDB4MjAsIDB4Q0MsIDB4MTMsIDB4NzAsIDB4MUYsIDB4QzAsIDB4N0YsIDB4MDIsIDB4RjMsCisweDAxLCAweENDLCAweDA3LCAweDMwLCAweDFGLCAweEMwLCAweDdCLCAweDAwLCAweEZGLCAweDAxLCAweDhDLCAweDA3LCAweDMwLAorMHgxRiwgMHhDMCwgMHg3RCwgMHgwMCwgMHhGMywgMHgwMSwgMHhDQywgMHgwNywgMHgzMCwgMHgxRiwgMHhDMCwgMHg3RiwgMHgwMCwKKzB4RjMsIDB4MDMsIDB4RUMsIDB4MDcsIDB4QjAsIDB4MTYsIDB4QzAsIDB4NUMsIDB4MDAsIDB4MkIsIDB4MDEsIDB4RUMsIDB4MDUsCisweDMwLCAweDBCLCAweEMwLCAweDBDLCAweDAwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDA4LAorMHgzNywgMHgwMCwgMHg5RCwgMHgwMCwgMHhFQywgMHgwQiwgMHgxMCwgMHgwMSwgMHg0MCwgMHgwNywgMHgwMSwgMHgxMSwgMHgwMCwKKzB4NDQsIDB4MDAsIDB4MTQsIDB4MDEsIDB4NDAsIDB4MDcsIDB4MDAsIDB4MUQsIDB4MjAsIDB4NDAsIDB4MDAsIDB4MTAsIDB4MDEsCisweDQwLCAweDA0LCAweDAwLCAweDEzLCAweDAwLCAweDQ0LCAweDAwLCAweDEwLCAweDAxLCAweDQwLCAweDA3LCAweDAwLCAweDExLAorMHg4NCwgMHg0QywgMHgwNCwgMHg1MiwgMHgxRCwgMHg0MCwgMHg1NSwgMHgwMCwgMHgxMSwgMHgwMSwgMHg1NCwgMHgwMywgMHhCNCwKKzB4MDEsIDB4NDAsIDB4MEQsIDB4MDAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTEsIDB4QTAsIDB4MzMsCisweDAwLCAweDhELCAweDAwLCAweDA0LCAweDIzLCAweEQwLCAweDBDLCAweDYwLCAweDMzLCAweDAxLCAweEMxLCAweDAwLCAweDQ0LAorMHg4MywgMHgxMCwgMHgwQywgMHg0MCwgMHgzMywgMHgwMCwgMHhERCwgMHgwMCwgMHgwNCwgMHgwMywgMHgxMCwgMHgwRCwgMHg0OCwKKzB4MzQsIDB4ODAsIDB4QzEsIDB4MDAsIDB4NDQsIDB4MDMsIDB4MTAsIDB4MEMsIDB4NDAsIDB4MzUsIDB4MDAsIDB4QzEsIDB4MDQsCisweDY0LCAweDAzLCAweDEwLCAweDA0LCAweDQ0LCAweDE2LCAweDgwLCAweDU5LCAweDAwLCAweDY2LCAweDgzLCAweDVDLCAweDAwLAorMHg0NCwgMHg0QywgMHg4MCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHhBOCwgMHgzNSwgMHgwMCwKKzB4OUQsIDB4MjEsIDB4NDQsIDB4MDMsIDB4OTEsIDB4MDEsIDB4NjAsIDB4MDMsIDB4MDAsIDB4MTEsIDB4MDAsIDB4NjAsIDB4MDAsCisweDEwLCAweDAxLCAweDQwLCAweDA3LCAweDAwLCAweDFELCAweDAwLCAweDQ0LCAweDAwLCAweDEwLCAweDAxLCAweDQwLCAweDA0LAorMHg4MCwgMHgxOSwgMHgyMCwgMHg0NCwgMHgwMCwgMHgxMCwgMHgwMSwgMHg0MCwgMHgwNiwgMHgwMCwgMHgxMSwgMHgwMCwgMHg0NCwKKzB4MDAsIDB4NTAsIDB4MUQsIDB4NEMsIDB4MTcsIDB4MDQsIDB4NTEsIDB4MTAsIDB4NTQsIDB4MEIsIDB4REMsIDB4MTEsIDB4NDAsCisweDBELCAweDIwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweEE4LCAweDM3LCAweDAwLCAweDFGLAorMHgzMywgMHg0NCwgMHgwMywgMHhEMCwgMHgwRCwgMHhDMCwgMHgzNywgMHgxMCwgMHhEMywgMHgwMCwgMHg0QywgMHgwMywgMHgzMCwKKzB4MEQsIDB4QzAsIDB4MzcsIDB4MDAsIDB4REQsIDB4MDAsIDB4NEQsIDB4MDMsIDB4MzQsIDB4MEMsIDB4QzAsIDB4MzAsIDB4MDAsCisweEQzLCAweDIwLCAweDBDLCAweDAzLCAweDEwLCAweDBELCAweEMwLCAweDMxLCAweDAwLCAweEQzLCAweDAwLCAweDJDLCAweDAzLAorMHhCMCwgMHgxOCwgMHhDMCwgMHg5MiwgMHgwMCwgMHg5QiwgMHgwMSwgMHgyQywgMHgwQiwgMHg3MCwgMHg1OSwgMHhDMiwgMHgwMCwKKzB4MDAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4ODAsIDB4M0QsIDB4MTAsIDB4QUYsIDB4MDAsCisweEZDLCAweDAzLCAweDcyLCAweDAzLCAweENCLCAweDBGLCAweDAwLCAweDNGLCAweDAwLCAweERDLCAweDAwLCAweEYwLCAweDAzLAorMHhDMCwgMHgwRiwgMHgwMCwgMHgzRiwgMHgwMCwgMHhGQywgMHgwMCwgMHhGMCwgMHgwMywgMHhDOCwgMHgwRSwgMHgwNCwgMHgzNywKKzB4MDAsIDB4RkMsIDB4MDAsIDB4RjAsIDB4MDMsIDB4QzAsIDB4MEYsIDB4MDQsIDB4M0YsIDB4MDAsIDB4RkMsIDB4MDAsIDB4RjAsCisweDBGLCAweEMwLCAweDhELCAweDEwLCAweEJGLCAweDA4LCAweEZDLCAweDIzLCAweEIwLCAweDA5LCAweEMwLCAweDNGLCAweDIwLAorMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHgwOCwgMHgzNSwgMHgwNiwgMHgxRiwgMHgwMCwgMHg3QywKKzB4MDMsIDB4RjAsIDB4MEQsIDB4QzAsIDB4MzQsIDB4MDAsIDB4REYsIDB4MDEsIDB4N0MsIDB4NDMsIDB4RjAsIDB4MEQsIDB4QzAsCisweDM0LCAweDFCLCAweEQzLCAweDAwLCAweDRDLCAweDQ3LCAweDMwLCAweDFELCAweEMwLCAweDc3LCAweDAwLCAweEQ3LCAweDAxLAorMHg3QywgMHg0NywgMHhGMCwgMHgwRCwgMHhDMCwgMHgzNCwgMHgwMiwgMHhERiwgMHgwMCwgMHg0RCwgMHg0MywgMHgzMCwgMHgwRCwKKzB4QzAsIDB4MzUsIDB4MDAsIDB4OUYsIDB4MDYsIDB4NEMsIDB4MEIsIDB4MzAsIDB4MDEsIDB4QzAsIDB4MjksIDB4MjAsIDB4MDQsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEzLCAweEEwLCAweDc0LCAweDEwLCAweDlELCAweDA4LCAweEY0LCAweDAzLAorMHhEMSwgMHgyMSwgMHg0MCwgMHgwNCwgMHgwMCwgMHgxRCwgMHgwMywgMHgxQywgMHgwMCwgMHhEMCwgMHg4MSwgMHg0MCwgMHhDNCwKKzB4MDAsIDB4MDEsIDB4MDAsIDB4NDQsIDB4MEMsIDB4MTIsIDB4MzEsIDB4NDAsIDB4NDcsIDB4MDAsIDB4MTUsIDB4MDMsIDB4NzQsCisweDA0LCAweEQwLCAweDIxLCAweDQwLCAweDQ0LCAweDAwLCAweDFELCAweDBCLCAweDQ2LCAweDQwLCAweEIyLCAweEFELCAweDQ4LAorMHhDNCwgMHgyMiwgMHg4QiwgMHgwNywgMHg2QywgMHgwQiwgMHhBMCwgMHg5MSwgMHhDMCwgMHg0QywgMHgwMCwgMHgwMiwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4QTAsIDB4RjIsIDB4MDAsIDB4MEQsIDB4MDksIDB4NzQsIDB4MTcsIDB4RDAsCisweDBDLCAweDQwLCAweDMyLCAweDAwLCAweERELCAweDA0LCAweDM0LCAweDBCLCAweEQwLCAweDJDLCAweDQwLCAweEYwLCAweDAwLAorMHhDMSwgMHgwQywgMHg1NCwgMHgwMywgMHgxNCwgMHg0QywgMHg0MCwgMHgzMywgMHgwMCwgMHhEOSwgMHgwNCwgMHgzNCwgMHgwQiwKKzB4RDAsIDB4NEMsIDB4NDAsIDB4QjAsIDB4MjAsIDB4RDksIDB4MDAsIDB4MDQsIDB4MEIsIDB4MTAsIDB4MjQsIDB4NDAsIDB4NTMsCisweDAwLCAweEMxLCAweDAxLCAweDI0LCAweDIyLCAweDkwLCAweDk5LCAweDQwLCAweDBGLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHg4MCwgMHg3OCwgMHgwMCwgMHg2RCwgMHgwMSwgMHhCNCwgMHg0NywgMHhEOCwgMHgxMywKKzB4NDAsIDB4NEEsIDB4MDAsIDB4MkQsIDB4MDEsIDB4QjQsIDB4MDQsIDB4RDAsIDB4MTIsIDB4NDAsIDB4NEMsIDB4MDAsIDB4MjEsCisweDAxLCAweEM0LCAweDA0LCAweDEwLCAweDEyLCAweDQwLCAweDRGLCAweDAwLCAweDJELCAweDA4LCAweEI0LCAweDAwLCAweEQwLAorMHgxMiwgMHg0MCwgMHg0OCwgMHgwMCwgMHgyRCwgMHgzMSwgMHg4NCwgMHgwNCwgMHg5MCwgMHg5RiwgMHg0NCwgMHg1RSwgMHgwOCwKKzB4NzksIDB4MjEsIDB4QTQsIDB4MEYsIDB4OTAsIDB4MTIsIDB4NDgsIDB4M0MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDEyLCAweDEwLCAweDMwLCAweDAwLCAweENGLCAweDAwLCAweDNDLCAweDIzLCAweEYwLCAweDBDLCAweEMwLAorMHgzMiwgMHgwMCwgMHhDRiwgMHgwMCwgMHgzQywgMHgwMywgMHhGMCwgMHgwRCwgMHhDMCwgMHgzMCwgMHgwMCwgMHhEMywgMHgwMCwKKzB4MUMsIDB4MDMsIDB4MzAsIDB4MEMsIDB4QzAsIDB4MzcsIDB4ODAsIDB4QzksIDB4MDAsIDB4M0MsIDB4MDMsIDB4RDAsIDB4MEQsCisweDQwLCAweDMwLCAweDAwLCAweERELCAweDAwLCAweDA0LCAweDIzLCAweDMwLCAweDA0LCAweEMwLCAweDEzLCAweDE0LCAweEMzLAorMHgwMCwgMHg0QywgMHgyMywgMHhCMCwgMHg4OCwgMHhDNiwgMHg0QiwgMHg2OCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDIsIDB4QjgsIDB4M0QsIDB4MDAsIDB4RkYsIDB4MDAsIDB4RkMsIDB4ODMsIDB4RjAsIDB4MDIsIDB4QzAsIDB4MEQsCisweDAwLCAweDNGLCAweDAwLCAweERDLCAweDAwLCAweEYwLCAweDAzLCAweEMwLCAweDBGLCAweDAyLCAweDNGLCAweDA4LCAweDdDLAorMHgwMCwgMHhGMCwgMHgwMywgMHhDMCwgMHgwRiwgMHgwMCwgMHgzNiwgMHgwOCwgMHhGQywgMHgxMCwgMHhGMCwgMHgwMSwgMHg4MCwKKzB4MEYsIDB4MDAsIDB4M0UsIDB4MDAsIDB4QkMsIDB4ODQsIDB4RjksIDB4MEYsIDB4QzgsIDB4MTksIDB4MDAsIDB4N0YsIDB4MDAsCisweEZDLCAweDIzLCAweEYwLCAweDAzLCAweEM4LCAweDBCLCAweDYwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgxNSwgMHhBMCwgMHgzNywgMHgxMCwgMHg1RiwgMHgwMCwgMHg3QywgMHgwMywgMHhGMCwgMHgwRCwgMHhDMCwgMHgzNywgMHgwMCwKKzB4REYsIDB4MDAsIDB4N0MsIDB4MDcsIDB4MzQsIDB4MUQsIDB4RDAsIDB4MzAsIDB4MDAsIDB4RDMsIDB4MDEsIDB4NEQsIDB4MDMsCisweEYwLCAweDBELCAweEMwLCAweDM3LCAweDAwLCAweERGLCAweDAwLCAweDdDLCAweDAzLCAweDcwLCAweDFELCAweEQwLCAweDM0LAorMHgwMCwgMHhENywgMHgwMCwgMHg0QywgMHgwMywgMHhGMCwgMHgxQywgMHhEMCwgMHg1NCwgMHgwMCwgMHhEMywgMHgwMCwgMHg0QywKKzB4MDMsIDB4RDEsIDB4MDksIDB4QzAsIDB4NDMsIDB4MDAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsCisweDg4LCAweDM5LCAweDAwLCAweDZELCAweDAwLCAweEI0LCAweDJCLCAweEQwLCAweDAyLCAweDQwLCAweDBCLCAweDAwLCAweDJELAorMHgwMCwgMHhGNCwgMHgwMCwgMHgxMCwgMHgwMywgMHg0MCwgMHgwOCwgMHgwMCwgMHgzMSwgMHgwMCwgMHg4NCwgMHgwMCwgMHhEMCwKKzB4MDIsIDB4NDAsIDB4MEIsIDB4MDAsIDB4MkQsIDB4MDAsIDB4QjQsIDB4MDAsIDB4RDAsIDB4MDMsIDB4NDAsIDB4MDgsIDB4MTAsCisweDJELCAweDAwLCAweEE0LCAweDAwLCAweEQwLCAweDBFLCAweDQwLCAweDE4LCAweDQwLCAweEUxLCAweDAwLCAweDk0LCAweDAzLAorMHhEMCwgMHgwRSwgMHg0MCwgMHg0RiwgMHgwMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHgwMCwKKzB4NzksIDB4MDAsIDB4RUQsIDB4MDMsIDB4QjQsIDB4MDcsIDB4RDAsIDB4MUUsIDB4NDAsIDB4N0IsIDB4MDAsIDB4RUQsIDB4MDEsCisweEI0LCAweDA3LCAweDEwLCAweDFFLCAweDQwLCAweDdDLCAweDAwLCAweEUxLCAweDAxLCAweDg0LCAweDA3LCAweEQwLCAweDFFLAorMHg0MCwgMHg3QiwgMHgwMCwgMHhFRCwgMHgwMSwgMHhCNCwgMHgwNywgMHhEMCwgMHgxRSwgMHg0MCwgMHg3OCwgMHgwMCwgMHhFRCwKKzB4MDEsIDB4QTUsIDB4MDcsIDB4RDAsIDB4MUYsIDB4NDksIDB4NTgsIDB4ODAsIDB4RjUsIDB4MDEsIDB4ODQsIDB4MDcsIDB4RDAsCisweDFFLCAweDQyLCAweDEzLCAweDA4LCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDI4LCAweDMzLAorMHgwMCwgMHhERCwgMHgwMSwgMHgzNCwgMHgwMywgMHhEMCwgMHgwMSwgMHg0MCwgMHgwMywgMHgwMCwgMHgwRCwgMHgwMCwgMHgzNCwKKzB4MDAsIDB4MTAsIDB4MDAsIDB4NDAsIDB4MDQsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4RDAsIDB4MDAsIDB4NDQsCisweDA3LCAweDAwLCAweDBELCAweDAwLCAweDM0LCAweDAwLCAweEQwLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDBELCAweDAwLAorMHgyNCwgMHgwMCwgMHhEMCwgMHg1QywgMHg0NCwgMHhEMCwgMHgwMSwgMHhDNSwgMHgxMywgMHgxNCwgMHg0RiwgMHhEOCwgMHg1RCwKKzB4NDAsIDB4NUIsIDB4MjAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTcsIDB4QTgsIDB4MTUsIDB4MDAsCisweDdGLCAweDAyLCAweDdDLCAweDAxLCAweEYwLCAweDA1LCAweEMwLCAweDE3LCAweDAwLCAweDVGLCAweDAwLCAweDdDLCAweDAxLAorMHgzMCwgMHgwNSwgMHhDMCwgMHgxNCwgMHg1MCwgMHg1MywgMHgwMCwgMHg0QywgMHgwMSwgMHhGMCwgMHgwNSwgMHhDMCwgMHgxNywKKzB4MDAsIDB4NUYsIDB4MDAsIDB4N0MsIDB4MDEsIDB4RjAsIDB4MDUsIDB4QzAsIDB4MTQsIDB4MDAsIDB4NUYsIDB4MDAsIDB4NDQsCisweDAxLCAweEQwLCAweDI3LCAweEMwLCAweERDLCAweDAwLCAweDY3LCAweDA3LCAweDhDLCAweDAxLCAweEYwLCAweDU3LCAweDQ0LAorMHg1RiwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHgwMCwgMHg4NywgMHgwMCwgMHgxRiwKKzB4MTIsIDB4N0MsIDB4MDAsIDB4RjIsIDB4MjMsIDB4QzAsIDB4MEYsIDB4MDAsIDB4M0YsIDB4MDIsIDB4RkMsIDB4MDAsIDB4RjAsCisweDAzLCAweEM4LCAweDBGLCAweDAwLCAweDNGLCAweDAwLCAweEZDLCAweDAwLCAweEYwLCAweDIzLCAweEMwLCAweDBGLCAweDAwLAorMHgzRiwgMHgwMiwgMHhGQywgMHg4MCwgMHhGMywgMHgyMywgMHhDMCwgMHg4RiwgMHgwMCwgMHgzRiwgMHgyMiwgMHhEQywgMHgwMCwKKzB4RjAsIDB4MDEsIDB4QzAsIDB4MDcsIDB4MDIsIDB4MUIsIDB4MDAsIDB4N0MsIDB4MjAsIDB4RjAsIDB4MjEsIDB4QzAsIDB4NEIsCisweDIwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDI3LCAweDAwLCAweDlGLCAweDA1LAorMHg0QywgMHgwNiwgMHhGMCwgMHg5OSwgMHhDMCwgMHgyNCwgMHgwMCwgMHg5MywgMHgwNSwgMHg3QywgMHgwMiwgMHhGMCwgMHgwOSwKKzB4QzAsIDB4NjcsIDB4NDAsIDB4OTMsIDB4MDAsIDB4N0MsIDB4MDIsIDB4RjAsIDB4MzksIDB4QzAsIDB4NjcsIDB4NDAsIDB4OTMsCisweDAwLCAweDdDLCAweDAyLCAweEYwLCAweDA5LCAweEMwLCAweDI3LCAweDAwLCAweDlGLCAweDAzLCAweDRDLCAweDIyLCAweEYwLAorMHg0OSwgMHhFMCwgMHhBNywgMHgwMCwgMHg5RiwgMHgwMCwgMHg1RSwgMHgwQSwgMHgzMCwgMHgwOSwgMHhDMCwgMHg0MCwgMHgyMCwKKzB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MjAsIDB4QTYsIDB4MDQsIDB4OUQsIDB4MTIsIDB4NDQsCisweDAyLCAweEQwLCAweDI5LCAweDQxLCAweDIwLCAweDAwLCAweDkxLCAweDAwLCAweDc0LCAweDBFLCAweEQwLCAweDE5LCAweDQxLAorMHgyNywgMHgwMCwgMHg5MSwgMHgwMywgMHg3NCwgMHgwMiwgMHhEMCwgMHgxOSwgMHg0MCwgMHg2NywgMHgwMCwgMHg5MSwgMHgwMiwKKzB4NzQsIDB4MDIsIDB4RDgsIDB4MzksIDB4NDAsIDB4MjcsIDB4MDEsIDB4OUQsIDB4MDAsIDB4NDUsIDB4ODYsIDB4RDAsIDB4MzksCisweDQwLCAweDY3LCAweDE0LCAweDk3LCAweDBBLCAweDQ0LCAweDBBLCAweDU2LCAweDQ5LCAweDQwLCAweDA0LCAweDA4LCAweDA4LAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHhBMCwgMHgyNCwgMHgwMiwgMHg5RCwgMHgwMCwgMHg2NCwgMHgyQSwKKzB4RDAsIDB4MDksIDB4NDAsIDB4MkMsIDB4MDgsIDB4QjEsIDB4MDAsIDB4RjQsIDB4MEUsIDB4RDAsIDB4MUIsIDB4NDAsIDB4QUYsCisweDAyLCAweEIxLCAweDAzLCAweEY0LCAweDAyLCAweEQwLCAweDBCLCAweDQwLCAweDJGLCAweDAyLCAweEIxLCAweDAyLCAweEY0LAorMHgwQSwgMHhEMSwgMHgxQiwgMHg0MSwgMHgyRiwgMHgwMSwgMHhBOSwgMHgwMCwgMHhDNiwgMHgwMiwgMHg5MSwgMHgwOSwgMHg0MCwKKzB4MjUsIDB4MDAsIDB4OUQsIDB4NDIsIDB4NTQsIDB4MDIsIDB4MTUsIDB4NDksIDB4NDAsIDB4NjAsIDB4MDAsIDB4MDIsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDIwLCAweDIwLCAweDAwLCAweDhELCAweDE0LCAweDI1LCAweDEyLCAweEQwLAorMHgwQSwgMHg0MCwgMHgyQywgMHgwMCwgMHhFMSwgMHg4MCwgMHhCNCwgMHgwMiwgMHhEMCwgMHgwQSwgMHg0QSwgMHgyQiwgMHgwMCwKKzB4QTEsIDB4MDAsIDB4QjQsIDB4MDYsIDB4RDAsIDB4MEUsIDB4NDAsIDB4NkIsIDB4MDAsIDB4QTEsIDB4MDAsIDB4QjQsIDB4MDIsCisweEQyLCAweDBBLCAweDQwLCAweDJCLCAweDAwLCAweEVELCAweDA4LCAweDg0LCAweDAyLCAweEQyLCAweDBDLCAweDRBLCAweDIzLAorMHgwMCwgMHg5NSwgMHgwMCwgMHg2NCwgMHgwNiwgMHg1OCwgMHg0OCwgMHg0MCwgMHg0MCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MUQsIDB4QjAsIDB4MDYsIDB4MDAsIDB4MUYsIDB4MDQsIDB4NkMsIDB4MjgsIDB4RjAsIDB4QTEsCisweEM4LCAweDg0LCAweDQyLCAweDEzLCAweDBBLCAweDdDLCAweDI4LCAweEYwLCAweEExLCAweEMwLCAweDg3LCAweDAyLCAweDEzLAorMHgwQSwgMHg3QywgMHgyOCwgMHhGMCwgMHhBMSwgMHhDMCwgMHg4NywgMHgwMiwgMHgxMywgMHgwQSwgMHg3QywgMHgyOCwgMHhEMCwKKzB4QTEsIDB4QzAsIDB4ODcsIDB4MDIsIDB4MEYsIDB4ODIsIDB4Q0MsIDB4MDEsIDB4RjgsIDB4MDEsIDB4Q0EsIDB4MDUsIDB4MDAsCisweDFGLCAweDAwLCAweDVDLCAweDI4LCAweDMwLCAweEExLCAweEMwLCAweDc0LCAweEUwLCAweDBBLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgxOSwgMHhCOCwgMHgyNywgMHgwNSwgMHhCRiwgMHgxNCwgMHg1QywgMHgyMiwgMHhGMCwgMHgwOSwgMHhEMCwKKzB4MjcsIDB4MDAsIDB4OUYsIDB4MDAsIDB4N0MsIDB4MDIsIDB4RjAsIDB4MDksIDB4QzgsIDB4MjcsIDB4MjAsIDB4OUYsIDB4MDAsCisweDdDLCAweDAyLCAweEYwLCAweDA5LCAweEMwLCAweDI3LCAweDIwLCAweDlGLCAweDAwLCAweDdDLCAweDAyLCAweEYwLCAweDA5LAorMHhDMCwgMHgyNywgMHgwMCwgMHg5RiwgMHgwNCwgMHg3QywgMHgwMiwgMHhFMCwgMHgwQiwgMHhDMCwgMHgyQiwgMHgwMCwgMHhBNywKKzB4NDAsIDB4REMsIDB4MDIsIDB4RjAsIDB4OEIsIDB4RDQsIDB4NzcsIDB4NjAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDE4LCAweDgwLCAweDJGLCAweDAwLCAweEJGLCAweDE0LCAweEZDLCAweDMyLCAweDMwLCAweDBBLCAweEMwLCAweDI0LAorMHgwMCwgMHhBRiwgMHgwOCwgMHhGQywgMHgwMiwgMHhGMCwgMHgwQiwgMHhDMCwgMHgyRiwgMHgwMiwgMHhCMywgMHgwMCwgMHhGQywKKzB4MDIsIDB4RjAsIDB4OEIsIDB4QzgsIDB4MkYsIDB4MDgsIDB4QkYsIDB4MDAsIDB4RkMsIDB4MjIsIDB4NzAsIDB4MEIsIDB4QzAsCisweDJGLCAweDAwLCAweEIzLCAweDI4LCAweENFLCAweDAyLCAweEYwLCAweDBBLCAweEMwLCAweDJFLCAweDAwLCAweEIzLCAweDAwLAorMHhGQywgMHgwMiwgMHhDMSwgMHgwQiwgMHhDMiwgMHg3NCwgMHgwMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MUMsIDB4MDAsIDB4MDcsIDB4MDUsIDB4MUQsIDB4MDQsIDB4NzQsIDB4MzAsIDB4MTAsIDB4MDEsIDB4NDEsIDB4MDQsIDB4MDQsCisweDFELCAweDIwLCAweDc0LCAweDUwLCAweEQwLCAweDQxLCAweDRDLCAweDA3LCAweDAxLCAweDExLCAweDEwLCAweDc0LCAweDQwLAorMHhEMCwgMHgwMSwgMHg0MCwgMHgwNywgMHgwNSwgMHgxRCwgMHgwNCwgMHg3NCwgMHgxMCwgMHhEMCwgMHgwMSwgMHg0MSwgMHgwNywKKzB4MDQsIDB4MDEsIDB4MDAsIDB4NDQsIDB4MDAsIDB4RDAsIDB4MDEsIDB4QzAsIDB4MTYsIDB4MDAsIDB4MUIsIDB4MDAsIDB4NzQsCisweDAwLCAweEQwLCAweDAxLCAweDQwLCAweDYwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLAorMHhBMiwgMHgyMywgMHgyMSwgMHg4RCwgMHgxNCwgMHgzNCwgMHgxMiwgMHgxMCwgMHg0OCwgMHg0MCwgMHgyMCwgMHgwMCwgMHg4RCwKKzB4MDAsIDB4MzQsIDB4MTIsIDB4RDAsIDB4NDgsIDB4NDEsIDB4MjMsIDB4MDEsIDB4ODEsIDB4MDQsIDB4MzQsIDB4MDIsIDB4RDAsCisweDA4LCAweDQwLCAweDIzLCAweDAxLCAweDhELCAweDE0LCAweDM0LCAweDEyLCAweDUwLCAweDQ4LCAweDQwLCAweDI3LCAweDAwLAorMHg4NSwgMHgwMCwgMHgwNSwgMHgwMiwgMHhEMCwgMHgwOCwgMHg0NCwgMHgyNCwgMHgwMCwgMHg4NSwgMHg0MCwgMHgzNCwgMHg4MiwKKzB4RDEsIDB4MDgsIDB4NDAsIDB4NDgsIDB4ODAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4QTgsCisweDI1LCAweDAwLCAweDlELCAweDAyLCAweDc0LCAweDAyLCAweDEyLCAweDA5LCAweDUwLCAweDI0LCAweDIwLCAweDlELCAweDAwLAorMHg3NCwgMHgwMiwgMHhEMCwgMHgwOSwgMHg0MCwgMHgyNywgMHg0MCwgMHg5OSwgMHgwMCwgMHg3NCwgMHgwMiwgMHhEMCwgMHgwOSwKKzB4NDAsIDB4MjcsIDB4MDAsIDB4REQsIDB4MDAsIDB4NzQsIDB4MDIsIDB4RDAsIDB4MDksIDB4NDAsIDB4MjcsIDB4MjAsIDB4OTEsCisweDAwLCAweDY0LCAweDgyLCAweEQxLCAweDE5LCAweDQwLCAweDI2LCAweDAwLCAweDlELCAweDAxLCAweDc0LCAweDBBLCAweEQ4LAorMHgwOSwgMHg0MCwgMHg2MCwgMHgyMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHg4OCwgMHgyNywKKzB4MDAsIDB4OUQsIDB4MDEsIDB4N0MsIDB4MDIsIDB4MzQsIDB4MDksIDB4QzAsIDB4MjQsIDB4MDAsIDB4OUYsIDB4MDAsIDB4N0MsCisweDAyLCAweEYxLCAweDA5LCAweEMwLCAweDI3LCAweDIwLCAweDkzLCAweDAwLCAweDdDLCAweDAyLCAweEYwLCAweDA5LCAweDQwLAorMHgyNywgMHgwMCwgMHg5RiwgMHgwMCwgMHg3QywgMHgwMiwgMHg3MCwgMHgwOSwgMHhDMCwgMHgyNywgMHgwMCwgMHg5MywgMHgwMCwKKzB4NEMsIDB4MDIsIDB4RjAsIDB4MDksIDB4ODAsIDB4MjAsIDB4MDAsIDB4OTcsIDB4MDAsIDB4N0MsIDB4MDYsIDB4RjAsIDB4NDksCisweENBLCAweDE0LCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDgwLCAweDI1LCAweDAwLAorMHg5RiwgMHgwOCwgMHg3QywgMHgwMiwgMHhGMCwgMHgwOSwgMHhDMCwgMHgyNywgMHgwMCwgMHg5RiwgMHg0MCwgMHg3QywgMHgwMiwKKzB4RjAsIDB4MDksIDB4QzgsIDB4MjcsIDB4MDAsIDB4OTcsIDB4MDAsIDB4N0MsIDB4MDIsIDB4RjEsIDB4MDksIDB4QzAsIDB4MjcsCisweDAwLCAweDlGLCAweDAwLCAweDdDLCAweDAyLCAweEYwLCAweDA5LCAweEM2LCAweDI3LCAweDUwLCAweDlGLCAweDgwLCAweDVDLAorMHgwMiwgMHhGMCwgMHgwOSwgMHhDMCwgMHgyNywgMHgyMCwgMHg5QiwgMHgwMCwgMHg3RSwgMHgxMiwgMHhGMCwgMHg0OSwgMHhEMSwKKzB4NUIsIDB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDgsIDB4MDUsIDB4MDAsIDB4MUYsCisweDA0LCAweDNDLCAweDQwLCAweDMwLCAweDAxLCAweEQwLCAweDA2LCAweDAwLCAweDEzLCAweDAwLCAweDRELCAweDAwLCAweEYwLAorMHgwMSwgMHhDMCwgMHgwNywgMHgwMCwgMHgxRiwgMHgwMCwgMHg3QywgMHgwMCwgMHhGMCwgMHgxMSwgMHhDMCwgMHgwNiwgMHgwMCwKKzB4MUYsIDB4MDEsIDB4N0MsIDB4MjAsIDB4RjAsIDB4OTEsIDB4QzAsIDB4MDcsIDB4MDQsIDB4MTMsIDB4ODAsIDB4N0MsIDB4NDAsCisweEYwLCAweDExLCAweEM0LCAweDg0LCAweDA0LCAweDFGLCAweDEwLCAweDVDLCAweDQ4LCAweEYwLCAweDIxLCAweEMwLCAweDUzLAorMHgyMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHhBMCwgMHg5QywgMHgwMCwgMHg3RCwgMHgxMiwKKzB4RjQsIDB4MDEsIDB4MTIsIDB4MTcsIDB4QzAsIDB4MTQsIDB4MjAsIDB4NzEsIDB4MEEsIDB4RUMsIDB4MDEsIDB4RDAsIDB4ODcsCisweDQ4LCAweDlGLCAweDgwLCAweDdELCAweDAwLCAweEY0LCAweDZELCAweEQwLCAweDA3LCAweEMwLCAweDFFLCAweDAwLCAweDdELAorMHgwMCwgMHhGNCwgMHgyOSwgMHg3MCwgMHgwNywgMHhDMCwgMHg5OSwgMHgwMCwgMHg3MSwgMHg4MSwgMHhDQywgMHgwRCwgMHhEMSwKKzB4MTYsIDB4NDQsIDB4MUMsIDB4MjAsIDB4N0QsIDB4MDIsIDB4QzQsIDB4MTUsIDB4QzAsIDB4MjcsIDB4NDAsIDB4NDMsIDB4MDAsCisweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweEEwLCAweEYyLCAweDAzLCAweENELCAweDAxLCAweDM0LAorMHgwMywgMHgxMCwgMHg5RCwgMHg0MSwgMHgzMCwgMHgwMCwgMHhDMSwgMHgwMiwgMHgwNCwgMHgxMywgMHhEMCwgMHgyQywgMHg0OCwKKzB4QjcsIDB4MDEsIDB4Q0QsIDB4MTAsIDB4MzQsIDB4MEIsIDB4RDAsIDB4MEMsIDB4NDIsIDB4MzAsIDB4MDEsIDB4Q0QsIDB4MDAsCisweDM0LCAweDA3LCAweEQwLCAweDFDLCAweDQwLCAweDMxLCAweDAwLCAweEQxLCAweDA4LCAweDE0LCAweDA5LCAweEQ4LCAweDlDLAorMHg0MCwgMHgzMSwgMHgxMCwgMHgwRCwgMHgwMSwgMHgxNCwgMHgwRiwgMHhEMCwgMHg4RCwgMHg0MCwgMHg0MywgMHgwMCwgMHgwQSwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4ODAsIDB4MzgsIDB4MDAsIDB4RUQsIDB4MDAsIDB4MzQsIDB4MDEsCisweDEwLCAweDBGLCAweDQwLCAweDc4LCAweDQxLCAweEYxLCAweDAxLCAweDg0LCAweDQzLCAweEQwLCAweDBFLCAweDQxLCAweDNCLAorMHgxMCwgMHhFRCwgMHgwMCwgMHhCNCwgMHgwMywgMHhEMCwgMHgxRSwgMHg2MCwgMHgzOCwgMHgwMCwgMHhFRCwgMHgxMCwgMHhCNCwKKzB4MDEsIDB4NTAsIDB4MEUsIDB4NDIsIDB4MzksIDB4NDAsIDB4MjEsIDB4MDAsIDB4QTQsIDB4MDgsIDB4RDAsIDB4MEUsIDB4NDAsCisweDI5LCAweDAwLCAweDdELCAweDExLCAweDg0LCAweDAxLCAweEQwLCAweDA2LCAweDQwLCAweDEzLCAweDAwLCAweDAyLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwgMHgwMCwgMHg1OCwgMHgwOCwgMHhFRiwgMHgwMSwgMHhCQywgMHgwNywgMHgzMCwKKzB4MUUsIDB4QzAsIDB4N0MsIDB4MDUsIDB4RTMsIDB4MDEsIDB4ODQsIDB4MDcsIDB4RjAsIDB4MTYsIDB4QzAsIDB4N0IsIDB4MDAsCisweEVELCAweDAxLCAweEI0LCAweDA1LCAweEYwLCAweDFGLCAweDQwLCAweDU4LCAweDAwLCAweEVGLCAweDAxLCAweEJDLCAweDA3LAorMHhGMCwgMHgxRSwgMHhDMCwgMHg3RCwgMHgwMCwgMHhFMywgMHgwMSwgMHg5QywgMHgwNSwgMHhGMCwgMHgwRSwgMHhDMCwgMHg2OSwKKzB4MTAsIDB4MkYsIDB4MDEsIDB4OUMsIDB4MDUsIDB4RjIsIDB4MUUsIDB4QzQsIDB4NTMsIDB4NjAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDEwLCAweEJBLCAweDE1LCAweDAwLCAweERGLCAweDIwLCAweDdDLCAweDAyLCAweEY0LCAweDBELAorMHhDOCwgMHgzNSwgMHgyMywgMHg5RiwgMHgwMCwgMHg3QywgMHgwMywgMHhGMCwgMHgwRCwgMHhDMCwgMHgwNywgMHgwMCwgMHg5RiwKKzB4MDAsIDB4N0MsIDB4MDEsIDB4RjAsIDB4MDksIDB4RDgsIDB4MjcsIDB4MDAsIDB4REYsIDB4MDAsIDB4N0MsIDB4MDMsIDB4RjAsCisweDBELCAweEM0LCAweDI1LCAweDgwLCAweERGLCAweDAwLCAweDVDLCAweDAwLCAweEYyLCAweDBELCAweEMwLCAweDI2LCAweDAwLAorMHg4RiwgMHgyMCwgMHg3QywgMHgwMCwgMHhGMiwgMHgwMSwgMHhDMCwgMHg0MywgMHg2MCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4QTAsIDB4N0QsIDB4MDAsIDB4RkYsIDB4MDEsIDB4RkMsIDB4ODcsIDB4RjksIDB4MEYsIDB4QzAsCisweDdELCAweDAwLCAweEZGLCAweDAxLCAweEZDLCAweDI1LCAweEYwLCAweDFFLCAweEMwLCAweDdDLCAweDAwLCAweEZGLCAweDA5LAorMHhEQywgMHgwNywgMHhGMCwgMHgxNywgMHhDMCwgMHg3RiwgMHgwQSwgMHg3RiwgMHg4MSwgMHhDQywgMHg4NywgMHhGMCwgMHgxNywKKzB4QzAsIDB4NUYsIDB4MjIsIDB4RjMsIDB4MDEsIDB4Q0MsIDB4MjUsIDB4MzAsIDB4MUEsIDB4QzAsIDB4NzgsIDB4MDIsIDB4MjMsCisweDAxLCAweENDLCAweDA2LCAweEYwLCAweDlCLCAweEMwLCAweDFCLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgxNSwgMHg4OCwgMHgzOSwgMHgyMiwgMHg2RCwgMHgwMCwgMHhCNCwgMHgxOSwgMHhEOCwgMHg0NiwgMHg0MCwgMHgzQiwKKzB4MDUsIDB4RUQsIDB4MDQsIDB4QjQsIDB4ODMsIDB4RDAsIDB4OEUsIDB4NDAsIDB4MzgsIDB4MDAsIDB4NkQsIDB4MDAsIDB4QjQsCisweDg4LCAweEQwLCAweDJFLCAweDQwLCAweDNCLCAweDAwLCAweEFELCAweDE4LCAweDg1LCAweDBBLCAweEQwLCAweEFFLCAweDQwLAorMHgxRiwgMHgwMywgMHgyMSwgMHg4NCwgMHhDNCwgMHgwMSwgMHhCMCwgMHg0QSwgMHg0MCwgMHhBOCwgMHgwMiwgMHgyRiwgMHgwMCwKKzB4OTQsIDB4MDIsIDB4RDAsIDB4OEEsIDB4NDAsIDB4NTcsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDE5LCAweDAwLCAweEVELCAweDAwLCAweEI0LCAweDgxLCAweEQwLCAweDhBLCAweDQxLCAweDM5LCAweDIwLAorMHg2RCwgMHg5MCwgMHhCNCwgMHgwOCwgMHhEMSwgMHgyMywgMHg0MCwgMHgzOCwgMHgwMCwgMHhFRCwgMHgyMCwgMHg5NiwgMHgyMywKKzB4RDAsIDB4MEUsIDB4NDAsIDB4MUIsIDB4MTAsIDB4RkQsIDB4MDAsIDB4ODQsIDB4MDMsIDB4RDAsIDB4MjIsIDB4NDAsIDB4M0IsCisweDYwLCAweEIxLCAweDAwLCAweEQ2LCAweDAxLCAweDExLCAweDBFLCAweDQ4LCAweDI4LCAweDAwLCAweDI1LCAweDBBLCAweDg0LAorMHg0MCwgMHhEMCwgMHg4QSwgMHg0MSwgMHg2MywgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwKKzB4MjgsIDB4MDUsIDB4MDAsIDB4OEQsIDB4MDMsIDB4NzQsIDB4MDAsIDB4RDAsIDB4MzAsIDB4NDQsIDB4RjMsIDB4MDAsIDB4MUQsCisweDAzLCAweDc0LCAweDAyLCAweEQwLCAweDA4LCAweDQwLCAweEMwLCAweDAwLCAweDBELCAweDAyLCAweDc0LCAweDBDLCAweEQwLAorMHgzOSwgMHgwMCwgMHhFNywgMHgwMCwgMHg5RCwgMHgwMiwgMHg0NCwgMHgwRSwgMHhEMCwgMHgwOCwgMHg0MCwgMHhFMywgMHgwMCwKKzB4ODEsIDB4MDIsIDB4MTQsIDB4MDgsIDB4OTAsIDB4MUMsIDB4NDQsIDB4MjAsIDB4MDQsIDB4MEQsIDB4MDAsIDB4NTYsIDB4MEMsCisweEQwLCAweDI4LCAweDQxLCAweDBCLCAweDIwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE1LCAweDI4LAorMHgyNSwgMHgwMCwgMHgxRiwgMHgwNiwgMHg3RSwgMHgwMiwgMHhEOCwgMHg5MSwgMHhDOCwgMHhCOSwgMHgwMCwgMHgxRiwgMHgwMSwKKzB4N0MsIDB4MTYsIDB4RjAsIDB4NTksIDB4QzAsIDB4ODQsIDB4MDQsIDB4MUQsIDB4MDcsIDB4NUMsIDB4MDYsIDB4RjAsIDB4MTksCisweEMwLCAweDI3LCAweDA0LCAweDlGLCAweDAxLCAweDRDLCAweDA2LCAweEYwLCAweDU4LCAweEMwLCAweDY3LCAweDAyLCAweEMzLAorMHgwMCwgMHgxQywgMHg0RCwgMHgxMCwgMHg4QywgMHhEMCwgMHhFMCwgMHgwMSwgMHgxNywgMHgwMCwgMHg0QywgMHgwRSwgMHhGMCwKKzB4MDEsIDB4QzAsIDB4NTcsIDB4MDAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MjcsCisweDAwLCAweDlGLCAweDAyLCAweDdDLCAweDgyLCAweEYwLCAweDIxLCAweEMwLCAweDM3LCAweDAwLCAweDlGLCAweDEwLCAweDdDLAorMHgwQSwgMHhGMCwgMHgwOSwgMHhDMCwgMHgwNywgMHgwOCwgMHgxRiwgMHgwMiwgMHg3QywgMHg2QSwgMHhGMCwgMHg4OSwgMHhDMSwKKzB4QTcsIDB4MDQsIDB4OUYsIDB4MTAsIDB4N0MsIDB4NjAsIDB4RjAsIDB4MDksIDB4QzgsIDB4ODcsIDB4MDIsIDB4MUYsIDB4MjMsCisweDZDLCAweDAwLCAweEYwLCAweDhELCAweEMyLCAweDI3LCAweDAwLCAweDFGLCAweDAwLCAweDdDLCAweDAwLCAweEYwLCAweDAxLAorMHhDMCwgMHgzNywgMHgyMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwOCwgMHgyRCwgMHgwMCwKKzB4MzMsIDB4MTAsIDB4RkMsIDB4MDIsIDB4MzAsIDB4MEIsIDB4RTIsIDB4M0YsIDB4MDQsIDB4QjMsIDB4MDAsIDB4Q0MsIDB4MDAsCisweDM4LCAweDBCLCAweEMwLCAweDJGLCAweDA0LCAweEJGLCAweDEwLCAweEZDLCAweDAyLCAweDMwLCAweDAzLCAweEMyLCAweDJDLAorMHg4MCwgMHgzMywgMHgwMCwgMHhDQywgMHgwMCwgMHgzNCwgMHgwMywgMHhDMCwgMHgyQywgMHgwMCwgMHg3RiwgMHgxMCwgMHhDQywKKzB4NDEsIDB4MzEsIDB4MEYsIDB4QzAsIDB4MkQsIDB4MTAsIDB4MzMsIDB4MDAsIDB4RkMsIDB4NDIsIDB4MzAsIDB4MEEsIDB4QzAsCisweDA0LCAweDI0LCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgxLCAweDIwLCAweEU2LCAweDAwLCAweDkxLAorMHgwNSwgMHg3NCwgMHgwNiwgMHgxMiwgMHgzOSwgMHg0MCwgMHgzNywgMHgwMCwgMHg5MSwgMHg4MSwgMHg0NCwgMHgwNCwgMHhCOCwKKzB4MTksIDB4NDQsIDB4NDcsIDB4MzAsIDB4OUQsIDB4NDMsIDB4NUMsIDB4MEUsIDB4MTAsIDB4MzEsIDB4NDAsIDB4NjUsIDB4MDAsCisweDFGLCAweDAxLCAweDQ0LCAweDBDLCAweDEwLCAweDExLCAweDQwLCAweDQ0LCAweDAxLCAweDVELCAweDAyLCAweDRDLCAweDBDLAorMHg3MCwgMHgzRCwgMHg0MCwgMHhFNCwgMHgwMCwgMHg5NSwgMHgwMSwgMHg3NCwgMHgwQywgMHgxMiwgMHg3MSwgMHg0MCwgMHgwNCwKKzB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4QTAsIDB4QzQsIDB4NDAsIDB4MTEsIDB4MDEsCisweDc0LCAweDA2LCAweDE0LCAweDM5LCAweDQ0LCAweDM3LCAweDAwLCAweDExLCAweDAzLCAweDQ0LCAweDQ2LCAweDFBLCAweDExLAorMHg0MSwgMHg2NywgMHgwMCwgMHg5RCwgMHg0MywgMHg3NCwgMHgwNiwgMHgxMCwgMHgxMSwgMHg0MCwgMHg0NCwgMHgwNCwgMHgxMSwKKzB4MDEsIDB4NDQsIDB4MDYsIDB4MTAsIDB4MTksIDB4NjQsIDB4NjYsIDB4MDAsIDB4REQsIDB4MDIsIDB4NDQsIDB4NDUsIDB4MTAsCisweEE1LCAweDQwLCAweDY2LCAweDIwLCAweDE5LCAweDgxLCAweDc0LCAweDBFLCAweDExLCAweDExLCAweDU0LCAweDA0LCAweDA4LAorMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgyMCwgMHgyMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgzNCwKKzB4MDIsIDB4MTAsIDB4MDAsIDB4NjgsIDB4MzcsIDB4MDAsIDB4ODEsIDB4MDAsIDB4MDUsIDB4MDIsIDB4MTAsIDB4MDAsIDB4NDAsCisweDYzLCAweDAwLCAweDBELCAweDAwLCAweDE2LCAweDAwLCAweDE0LCAweDA4LCAweDUwLCAweDAwLCAweDQwLCAweDgxLCAweDAwLAorMHgwNSwgMHgwMiwgMHgxQywgMHgwOSwgMHg2NCwgMHgwMiwgMHgwMCwgMHgxRCwgMHgwMCwgMHg0NSwgMHgwMCwgMHg5NCwgMHgwRCwKKzB4NDAsIDB4MDIsIDB4MDAsIDB4MEQsIDB4MDAsIDB4MzQsIDB4MDIsIDB4MTAsIDB4MDAsIDB4NDAsIDB4NDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweEIwLCAweDA2LCAweDAwLCAweDExLCAweDAwLCAweDdDLCAweDAwLAorMHgzMCwgMHgwOSwgMHg2MCwgMHgzRiwgMHg0MCwgMHgxMywgMHgwMCwgMHg0QywgMHgwMCwgMHgxNCwgMHgwMSwgMHhDMCwgMHgyNywKKzB4MjAsIDB4OUYsIDB4MDAsIDB4N0UsIDB4ODIsIDB4MzAsIDB4MDEsIDB4NDAsIDB4MDQsIDB4MDAsIDB4MTEsIDB4MDAsIDB4NEMsCisweDAwLCAweDMwLCAweDAxLCAweEMwLCAweDI2LCAweDAwLCAweDFGLCAweDAwLCAweDRDLCAweDAzLCAweDMwLCAweDBELCAweEQwLAorMHgyNywgMHgwOCwgMHgxQiwgMHgwMCwgMHg3QywgMHgwMiwgMHgzMCwgMHgwOSwgMHhEMCwgMHgwNCwgMHg2NCwgMHgwOCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4QjgsIDB4MkYsIDB4MDAsIDB4QkYsIDB4MDAsIDB4RkMsIDB4MDAsIDB4RjEsCisweDAzLCAweEMyLCAweDNGLCAweDAwLCAweDNGLCAweDAwLCAweEZDLCAweDgwLCAweEYwLCAweDAzLCAweEMwLCAweDBGLCAweDAwLAorMHgzRiwgMHgwMCwgMHhEQywgMHgwMCwgMHhGMCwgMHgwMywgMHhDMCwgMHgwRiwgMHgwOCwgMHgyRiwgMHgwMCwgMHhGQywgMHgwMCwKKzB4RjAsIDB4MDMsIDB4QzAsIDB4MEQsIDB4MDAsIDB4MkYsIDB4NDAsIDB4Q0MsIDB4MDAsIDB4NTksIDB4MEYsIDB4QzgsIDB4MkQsCisweDAwLCAweDM3LCAweDgwLCAweEZDLCAweDAyLCAweEY0LCAweDBCLCAweEM4LCAweDE3LCAweDYwLCAweDBFLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHhBMCwgMHgwRiwgMHgwMCwgMHgzRiwgMHg0MSwgMHhFQywgMHgwMiwgMHhGMCwgMHgwRiwKKzB4QzAsIDB4MkMsIDB4MDAsIDB4QkYsIDB4MDAsIDB4QkUsIDB4MDcsIDB4RjAsIDB4MDMsIDB4QzEsIDB4M0UsIDB4MDAsIDB4QTMsCisweDAxLCAweERDLCAweDAwLCAweDMwLCAweDAzLCAweEMwLCAweDBGLCAweDAwLCAweEFDLCAweDAxLCAweERDLCAweDMzLCAweDM0LAorMHgzRiwgMHhDMCwgMHgyRiwgMHg4MCwgMHhBMywgMHgwMSwgMHhGQywgMHg1MywgMHhGMCwgMHg4MywgMHhDMCwgMHg0RiwgMHgwMCwKKzB4MzMsIDB4MDEsIDB4QkMsIDB4MEMsIDB4MzAsIDB4MTMsIDB4QzAsIDB4MEYsIDB4MDAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAzLCAweDA4LCAweDI3LCAweDEyLCAweDFELCAweDAwLCAweDQ0LCAweDAyLCAweEQwLCAweDBGLCAweDQ0LAorMHgwNCwgMHgxNCwgMHgxRCwgMHgwMCwgMHg1NSwgMHgwNywgMHhEMCwgMHgyMSwgMHg1MCwgMHgzQywgMHgwMCwgMHg5MSwgMHg0MSwKKzB4NDQsIDB4MDIsIDB4MTAsIDB4MDEsIDB4NDAsIDB4MjcsIDB4MjAsIDB4OUQsIDB4MTEsIDB4NTQsIDB4M0IsIDB4MTAsIDB4NEQsCisweDQwLCAweDI3LCAweDIwLCAweDkxLCAweDEwLCAweDc0LCAweDBGLCAweEQyLCAweDBCLCAweDQwLCAweDA3LCAweDA4LCAweDExLAorMHg4MCwgMHg3NCwgMHgwMCwgMHgxNCwgMHgwNSwgMHg0MCwgMHgwNywgMHgyMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MTMsIDB4QTAsIDB4MDMsIDB4MDAsIDB4MEQsIDB4MDAsIDB4MDUsIDB4MDAsIDB4RDAsIDB4MEMsIDB4NDAsIDB4MjAsCisweDA4LCAweDhELCAweDAwLCAweDM1LCAweDAyLCAweDUwLCAweDAwLCAweDQwLCAweDMxLCAweDAwLCAweEMxLCAweDAwLCAweDE0LAorMHgwMiwgMHgxMCwgMHgwOCwgMHg0NCwgMHgwMywgMHgwMCwgMHg5RCwgMHgwMCwgMHgxNCwgMHgwMywgMHg5MCwgMHgwQywgMHg2MCwKKzB4MjMsIDB4MDAsIDB4ODEsIDB4MDQsIDB4MzQsIDB4MDMsIDB4RDAsIDB4NTgsIDB4NDgsIDB4MjMsIDB4MTUsIDB4ODEsIDB4MTQsCisweDM0LCAweDEwLCAweDEwLCAweDAwLCAweDQwLCAweDQ3LCAweDgwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMywgMHg4OCwgMHg2NSwgMHgxMCwgMHgxRCwgMHgwMywgMHg0NCwgMHgwQywgMHhEMCwgMHgwRCwgMHg0MCwgMHg0NCwgMHgwMCwKKzB4MUQsIDB4MDEsIDB4NTQsIDB4MTIsIDB4RDAsIDB4MDAsIDB4NDAsIDB4MzUsIDB4MDAsIDB4RDEsIDB4MDAsIDB4NDQsIDB4MDYsCisweDE0LCAweDE5LCAweDQwLCAweDQ3LCAweDE0LCAweDlELCAweDAwLCAweDU0LCAweDAzLCAweDkwLCAweDBELCAweDQwLCAweDI3LAorMHg0MiwgMHg5MSwgMHgyMCwgMHg3NCwgMHgwMywgMHhEMCwgMHgxRCwgMHg0MCwgMHgyMywgMHgwMCwgMHg5MSwgMHgwMCwgMHg3NCwKKzB4MDQsIDB4MTAsIDB4MDUsIDB4NDAsIDB4MEYsIDB4MjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDg4LCAweDQ3LCAweDA0LCAweDFGLCAweDAxLCAweDRDLCAweDhFLCAweEYxLCAweDBELCAweEM4LCAweDY0LCAweDIwLCAweDBGLAorMHg0MywgMHg3RCwgMHgwNywgMHg3MCwgMHg1NSwgMHhDMCwgMHgzNSwgMHg0MCwgMHhDMywgMHgwMCwgMHg1QywgMHgxNCwgMHgzMCwKKzB4NTksIDB4QzAsIDB4RTcsIDB4MDAsIDB4OEUsIDB4MDAsIDB4NUMsIDB4MDMsIDB4QjAsIDB4MEQsIDB4QzAsIDB4MzcsIDB4MjAsCisweEQxLCAweDIwLCAweDdDLCAweDAzLCAweEYyLCAweDE5LCAweEMyLCAweDQ3LCAweDAwLCAweDEzLCAweDgxLCAweDNDLCAweDAyLAorMHgzNCwgMHgwMSwgMHhDMCwgMHgwQiwgMHgyMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwRiwgMHg4MCwKKzB4MkQsIDB4MDgsIDB4M0YsIDB4MDAsIDB4RkMsIDB4NDIsIDB4RjAsIDB4MEUsIDB4QzAsIDB4MkYsIDB4MDAsIDB4M0YsIDB4MDAsCisweEZDLCAweDAzLCAweEYwLCAweDg3LCAweEMwLCAweDM4LCAweDAwLCAweEZGLCAweDAwLCAweEJDLCAweDQyLCAweEYwLCAweDBCLAorMHhDMSwgMHgyRiwgMHgwMCwgMHhCRiwgMHgwNCwgMHhCQywgMHgwMywgMHg3MCwgMHgwRiwgMHhDMCwgMHg3QiwgMHgyMCwgMHhCRiwKKzB4MDAsIDB4RkMsIDB4MDMsIDB4RDAsIDB4MDksIDB4QzAsIDB4NEYsIDB4MDIsIDB4M0YsIDB4MDksIDB4RkMsIDB4MDIsIDB4RjAsCisweDA3LCAweEMxLCAweDFGLCAweDAwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBBLCAweDA4LCAweDA1LAorMHgwMCwgMHgxMywgMHgwMiwgMHg1RCwgMHgwQSwgMHhGMCwgMHgwRCwgMHhDMCwgMHgyNCwgMHgwMCwgMHg5MywgMHgwMCwgMHg3QywKKzB4ODIsIDB4MzAsIDB4MjcsIDB4QzAsIDB4MzQsIDB4NDQsIDB4RDMsIDB4MDAsIDB4NkMsIDB4MDIsIDB4RjAsIDB4MDksIDB4QzYsCisweDg3LCAweDA0LCAweDlGLCAweDAwLCAweDVDLCAweDAzLCAweDcwLCAweDBELCAweEMwLCAweDM3LCAweDAwLCAweEQzLCAweDIwLAorMHg0QywgMHgwMywgMHhGMCwgMHgwRCwgMHhDMCwgMHg2NCwgMHgwMCwgMHg5MywgMHgwMSwgMHg3QywgMHgwMiwgMHgzMCwgMHgwMSwKKzB4QzAsIDB4MEIsIDB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTMsIDB4QTAsIDB4MjQsIDB4MDAsCisweDAxLCAweDAwLCAweDQ0LCAweDA2LCAweEQwLCAweDJGLCAweEM1LCAweDI2LCAweDAwLCAweDlCLCAweDIwLCAweDc0LCAweDAyLAorMHhCMCwgMHg0NSwgMHg0MCwgMHg3QywgMHg0MCwgMHhEMSwgMHgwMSwgMHg2QywgMHgwMiwgMHhEMCwgMHgyOSwgMHg0MCwgMHg4NywKKzB4MDAsIDB4OUQsIDB4MDAsIDB4QzQsIDB4MDMsIDB4MTIsIDB4MEQsIDB4NDAsIDB4QjcsIDB4MDYsIDB4OTEsIDB4MEEsIDB4QzQsCisweDAzLCAweEQwLCAweDBELCAweDUwLCAweEU0LCAweDAwLCAweDkxLCAweDAzLCAweDc0LCAweDQyLCAweDEwLCAweDA1LCAweDQwLAorMHg0RiwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNywgMHhBMCwgMHgyMiwgMHg4MCwgMHgwMSwKKzB4MTIsIDB4MDQsIDB4MjAsIDB4RDAsIDB4M0MsIDB4NDEsIDB4MDAsIDB4MDAsIDB4ODEsIDB4MDksIDB4MjQsIDB4MDMsIDB4MTAsCisweDAwLCAweDQwLCAweDMwLCAweDIwLCAweDhELCAweDEzLCAweDI0LCAweDA4LCAweDkwLCAweDIwLCAweDQwLCAweDgzLCAweDAwLAorMHhDRCwgMHgwMCwgMHgxNCwgMHgwMywgMHg1MCwgMHgwQywgMHgwMCwgMHgyMywgMHgwMCwgMHg4MSwgMHgwMiwgMHgwNCwgMHgwMywKKzB4QzAsIDB4MDgsIDB4NDAsIDB4OTAsIDB4MTQsIDB4NDEsIDB4MTIsIDB4MzQsIDB4ODUsIDB4MTAsIDB4MDgsIDB4NDAsIDB4MUYsCisweDAwLCAweDBBLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBGLCAweDgwLCAweDY4LCAweDQwLCAweDIxLCAweDAxLAorMHg4NCwgMHgwNywgMHhEMCwgMHgxQywgMHg0MCwgMHg1QSwgMHgwMCwgMHhFOSwgMHgwMSwgMHhGNCwgMHgwNywgMHg5MCwgMHgxMCwKKzB4NTQsIDB4NzAsIDB4MjYsIDB4QUQsIDB4OTEsIDB4QTQsIDB4MDUsIDB4RDAsIDB4MTIsIDB4MDgsIDB4NkIsIDB4MDIsIDB4RkQsCisweDAxLCAweDg0LCAweDA3LCAweDEwLCAweDFFLCAweDQwLCAweDZCLCAweDAwLCAweEI1LCAweDAxLCAweDg0LCAweDA3LCAweEQwLAorMHg5QSwgMHg0MCwgMHg1OCwgMHgwMiwgMHg2MSwgMHg4MSwgMHhGNCwgMHgwRCwgMHgxMiwgMHg5RSwgMHg0MCwgMHgxMywgMHgwMCwKKzB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4MTAsIDB4MjQsIDB4MDIsIDB4MTEsIDB4MDAsIDB4MUQsCisweDIxLCAweEYwLCAweDBDLCAweDQwLCAweEI0LCAweDAwLCAweEMzLCAweDAyLCAweDNDLCAweDAzLCAweDMwLCAweDQwLCAweEMwLAorMHgzMCwgMHgwMiwgMHhDRiwgMHgwMCwgMHgyQywgMHgwMCwgMHhCMywgMHg4NCwgMHhDMCwgMHgxMywgMHg4QSwgMHhDRiwgMHgwMCwKKzB4NUMsIDB4MDMsIDB4NzAsIDB4MEMsIDB4QzAsIDB4MjcsIDB4NDAsIDB4ODMsIDB4MDgsIDB4MEMsIDB4MDMsIDB4RjAsIDB4MEMsCisweEMwLCAweDM0LCAweDAyLCAweEMzLCAweDA0LCAweDNDLCAweDAxLCAweDMwLCAweDA4LCAweEMwLCAweDRCLCAweDQwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHhCOCwgMHgyRCwgMHgwMCwgMHg3RiwgMHg4OCwgMHhGQywgMHgwMSwKKzB4QzAsIDB4MEYsIDB4QzEsIDB4MUQsIDB4MDAsIDB4RkYsIDB4MDAsIDB4RkMsIDB4MjMsIDB4RjAsIDB4MDMsIDB4QzAsIDB4QkYsCisweDA2LCAweEYzLCAweDA4LCAweEZDLCAweDIxLCAweEYwLCAweDhGLCAweEM4LCAweDNGLCAweEEyLCAweEZGLCAweDA4LCAweEZDLAorMHgyMywgMHhGMCwgMHgwRiwgMHhDMCwgMHgzRSwgMHgwMiwgMHhCQiwgMHgyMCwgMHhGRCwgMHg0MywgMHhGMCwgMHgwRiwgMHhDMCwKKzB4M0YsIDB4MDIsIDB4RkYsIDB4MDAsIDB4RkMsIDB4MDEsIDB4RjAsIDB4MEYsIDB4QzIsIDB4MEIsIDB4NjAsIDB4MDYsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE1LCAweEEwLCAweDJGLCAweDAwLCAweDBGLCAweDAwLCAweDRDLCAweDAxLCAweEYwLAorMHg0RCwgMHhDMCwgMHgxNywgMHgwMCwgMHg1RiwgMHgwMCwgMHg3QywgMHgwMywgMHhGOCwgMHgwMSwgMHhDMCwgMHhCNiwgMHg0MCwKKzB4RDMsIDB4MDEsIDB4N0MsIDB4ODEsIDB4RjIsIDB4MDUsIDB4QzgsIDB4NzcsIDB4MDAsIDB4OTMsIDB4MDAsIDB4NkMsIDB4MjMsCisweDMwLCAweDBELCAweEMwLCAweDM3LCAweDAwLCAweEQ3LCAweDAwLCAweDdDLCAweDAzLCAweEYwLCAweDI5LCAweEMwLCAweDU0LAorMHgwMCwgMHg1MywgMHgwMCwgMHg0QywgMHgwMywgMHhGMCwgMHgwOSwgMHhDMCwgMHg1NiwgMHgwMCwgMHgwRSwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MTMsIDB4ODgsIDB4MjksIDB4MDAsIDB4MkQsIDB4MDAsIDB4ODQsIDB4MDMsIDB4RDAsIDB4MEUsCisweDQxLCAweDNCLCAweDAwLCAweDZELCAweDAwLCAweEI0LCAweDAzLCAweEQwLCAweDAzLCAweDUwLCAweDM4LCAweDAxLCAweEUxLAorMHgwMCwgMHg4NCwgMHgwMywgMHhEMSwgMHgwRSwgMHg0MCwgMHgzRiwgMHgwMCwgMHhBMSwgMHgwMCwgMHg5NCwgMHg4MywgMHgxMCwKKzB4MEUsIDB4NDAsIDB4M0IsIDB4MDAsIDB4QTEsIDB4MDAsIDB4QjYsIDB4MTMsIDB4RDAsIDB4OEEsIDB4NDAsIDB4MTksIDB4MDAsCisweDYxLCAweDAwLCAweDg0LCAweDAzLCAweEQyLCAweDBFLCAweDQwLCAweDQ4LCAweDIwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHg2OSwgMHgwMCwgMHgzRCwgMHgwMSwgMHg4NCwgMHgwRiwgMHhEMSwgMHg1RSwgMHg0MCwKKzB4N0IsIDB4MDAsIDB4RUQsIDB4ODEsIDB4QjQsIDB4MDcsIDB4RDIsIDB4MTIsIDB4NDAsIDB4NzEsIDB4MDAsIDB4RTEsIDB4MTEsCisweDk0LCAweDA3LCAweEQwLCAweDE2LCAweDQwLCAweDdCLCAweDAwLCAweEI5LCAweDQzLCAweDI0LCAweDA3LCAweDUwLCAweDFFLAorMHg0MCwgMHg3MywgMHgwMCwgMHhFRCwgMHgwMSwgMHhCNCwgMHgxNywgMHhEMCwgMHgxQywgMHg0MSwgMHg3OCwgMHgwMCwgMHhFMSwKKzB4MDEsIDB4ODQsIDB4MDcsIDB4RDAsIDB4MUEsIDB4NDAsIDB4MEUsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDEyLCAweDI4LCAweDczLCAweDEwLCAweENELCAweDQwLCAweDA0LCAweDBGLCAweEQwLCAweDBDLCAweDQwLCAweEIzLAorMHgwMCwgMHhDRCwgMHgwMiwgMHgzNCwgMHgwMywgMHhEMCwgMHg2OSwgMHg0MCwgMHgzNywgMHgwMCwgMHhDMSwgMHgwMCwgMHgwNiwKKzB4MjcsIDB4RDAsIDB4OUQsIDB4NDAsIDB4MzMsIDB4MDAsIDB4OTksIDB4MDAsIDB4MTQsIDB4MDMsIDB4MTAsIDB4MEQsIDB4NDAsCisweDc3LCAweDAyLCAweDg5LCAweDA4LCAweDM0LCAweDAzLCAweEQwLCAweDZELCAweDQyLCAweDMxLCAweDAwLCAweEQxLCAweDAwLAorMHg0NCwgMHgwMywgMHhEMCwgMHgwQywgMHg1MCwgMHg0OCwgMHgyMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MTcsIDB4QTgsIDB4NUQsIDB4MDEsIDB4N0YsIDB4MDIsIDB4Q0QsIDB4MDUsIDB4RjAsIDB4MDUsIDB4QzAsIDB4NUYsIDB4MDQsCisweDdELCAweDBCLCAweDdDLCAweDgxLCAweEYwLCAweDM3LCAweEMwLCAweDE1LCAweDAwLCAweDUzLCAweDAwLCAweERDLCAweDA5LAorMHhGMCwgMHhBNywgMHhDMCwgMHgxRiwgMHg0MSwgMHg1QiwgMHgwMCwgMHg2QywgMHgwMSwgMHgzNCwgMHgwNSwgMHhDMCwgMHgxNywKKzB4MDAsIDB4NUYsIDB4MDAsIDB4N0MsIDB4MDEsIDB4RjAsIDB4MzcsIDB4RTAsIDB4MTQsIDB4NDAsIDB4NTMsIDB4MDAsIDB4NEQsCisweDAxLCAweEYwLCAweDA1LCAweEMwLCAweDVFLCAweDIwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLAorMHgwMCwgMHgwNywgMHgwMCwgMHgxRiwgMHgxMiwgMHg3QywgMHgwMCwgMHhGMCwgMHgwMSwgMHhDQywgMHgwNywgMHgwMCwgMHgxRiwKKzB4MEEsIDB4N0MsIDB4MDAsIDB4RjgsIDB4ODEsIDB4NDAsIDB4MDQsIDB4MTAsIDB4MUYsIDB4MDIsIDB4NUMsIDB4NDgsIDB4RjgsCisweDIxLCAweEMyLCAweDA3LCAweDAxLCAweDE3LCAweDAwLCAweDdDLCAweDAwLCAweEYxLCAweDAxLCAweEMwLCAweDg3LCAweDQwLAorMHgxNywgMHgwMCwgMHg3QywgMHg4MCwgMHhGMCwgMHgwMSwgMHhDMCwgMHgwNywgMHgwMCwgMHgxRiwgMHgwMCwgMHg3QywgMHgwNCwKKzB4RjAsIDB4MDEsIDB4QzgsIDB4NEIsIDB4MDAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsCisweDIzLCAweDAwLCAweDlCLCAweDAwLCAweDRFLCAweDYyLCAweEYwLCAweDE5LCAweEMwLCAweDI3LCAweDA0LCAweDg3LCAweDA0LAorMHg0QywgMHg4MiwgMHhGMCwgMHgwOSwgMHhDNCwgMHgyNCwgMHgxMCwgMHg5MywgMHg0MCwgMHg3QywgMHgwMiwgMHhGMiwgMHgwOSwKKzB4QzAsIDB4MjQsIDB4MDAsIDB4OUUsIDB4ODAsIDB4MkMsIDB4MDIsIDB4NzAsIDB4MDksIDB4QzAsIDB4NjQsIDB4MDgsIDB4OTMsCisweDA1LCAweDc4LCAweDA2LCAweEYwLCAweDA5LCAweDQwLCAweDI2LCAweDAwLCAweDlGLCAweDAxLCAweDRDLCAweDAyLCAweDMwLAorMHgzOSwgMHhDMCwgMHg0MCwgMHgyMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgyMCwgMHgyNiwKKzB4MDAsIDB4ODEsIDB4MDQsIDB4NDQsIDB4MEEsIDB4RDAsIDB4MTksIDB4NDAsIDB4MjcsIDB4MDAsIDB4OUQsIDB4MTAsIDB4NDQsCisweDAyLCAweEQwLCAweDA5LCAweEMwLCAweDI2LCAweDQwLCAweDkxLCAweDAxLCAweDc0LCAweDE2LCAweEQwLCAweDE5LCAweDQwLAorMHhBNCwgMHgwMCwgMHg5RCwgMHg4MCwgMHg0QywgMHg4MiwgMHgxMCwgMHgwOSwgMHg0MCwgMHgyNCwgMHg0MSwgMHg5MSwgMHgwMSwKKzB4NzQsIDB4MDYsIDB4RDIsIDB4MDksIDB4NDAsIDB4QTQsIDB4MjAsIDB4OUQsIDB4MDMsIDB4NDQsIDB4MDIsIDB4MTIsIDB4MDgsCisweDQwLCAweDA0LCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweEEwLCAweDI0LCAweDA4LAorMHg5OSwgMHgwMCwgMHg0NCwgMHg4QSwgMHhEMCwgMHg2OSwgMHg0MCwgMHgyNywgMHgwMCwgMHg5RCwgMHgwMCwgMHg0NCwgMHg4MiwKKzB4NTAsIDB4MDksIDB4NDAsIDB4MjQsIDB4MDIsIDB4OTksIDB4MjEsIDB4NTYsIDB4MTIsIDB4OTAsIDB4NjksIDB4NDIsIDB4MjQsCisweDg2LCAweDlELCAweDAwLCAweDY0LCAweDAyLCAweDUwLCAweDA5LCAweDQwLCAweDI0LCAweDAyLCAweDkxLCAweDAwLCAweDc0LAorMHgyMiwgMHhEMCwgMHgwOSwgMHg0MCwgMHg2NywgMHgwMCwgMHhCRCwgMHgwNCwgMHhDNCwgMHgwMiwgMHgxQywgMHgwRiwgMHg0MCwKKzB4NjAsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MjAsIDB4MjAsIDB4MDEsIDB4OTEsCisweDAwLCAweDA0LCAweDgyLCAweEQwLCAweDY4LCAweDQwLCAweDIzLCAweDAwLCAweDhELCAweDAyLCAweDA0LCAweDAyLCAweEQyLAorMHg0OCwgMHg0MCwgMHgzMCwgMHgwMSwgMHhDOSwgMHgwMCwgMHgzNCwgMHgxQSwgMHhEOCwgMHgwOCwgMHg0MSwgMHgyMCwgMHg4MCwKKzB4OEQsIDB4MDAsIDB4MDQsIDB4MjIsIDB4MTAsIDB4MDgsIDB4NTAsIDB4MjAsIDB4MDEsIDB4ODEsIDB4MDAsIDB4MzQsIDB4MTIsCisweEQwLCAweDQ4LCAweDQwLCAweDY5LCAweDAwLCAweEFELCAweDAxLCAweDg0LCAweDA2LCAweDAwLCAweDBCLCAweDQwLCAweDQwLAorMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxRCwgMHhCMCwgMHg4NiwgMHgyMiwgMHgxQiwgMHgwQSwKKzB4NDUsIDB4MTgsIDB4RjAsIDB4MjEsIDB4QzAsIDB4ODcsIDB4MDIsIDB4MUYsIDB4MDYsIDB4NEMsIDB4MDAsIDB4RjAsIDB4QTEsCisweDUwLCAweDg0LCAweDAyLCAweDFCLCAweDAwLCAweDVDLCAweDA4LCAweEIwLCAweDYxLCAweEQwLCAweDg0LCAweDAwLCAweDFGLAorMHgwQSwgMHg2QywgMHg1OCwgMHg3MSwgMHhBMSwgMHhDMCwgMHg4NCwgMHgwMiwgMHgxMywgMHgwQSwgMHg3QywgMHgwMCwgMHhGMCwKKzB4QTEsIDB4QzAsIDB4ODMsIDB4MDIsIDB4MEYsIDB4NEEsIDB4NEMsIDB4MjgsIDB4MzAsIDB4QTIsIDB4RDAsIDB4NzQsIDB4QzAsCisweDBBLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE5LCAweEI4LCAweDJGLCAweDEyLCAweEJGLCAweDAwLCAweEZDLAorMHg1QSwgMHhGMCwgMHg4OSwgMHhDMCwgMHgyRiwgMHgwMiwgMHhCRiwgMHg0NiwgMHhGRCwgMHgwMiwgMHhGMCwgMHg4QiwgMHhDMCwKKzB4MjcsIDB4MjIsIDB4QTcsIDB4MjAsIDB4RkMsIDB4MEEsIDB4RjAsIDB4NEIsIDB4QzMsIDB4MkYsIDB4MjcsIDB4QUYsIDB4MDAsCisweDVDLCAweDEyLCAweEYwLCAweDA5LCAweEM4LCAweDJGLCAweDAyLCAweEJELCAweDAwLCAweDdDLCAweDIyLCAweEYwLCAweDhCLAorMHhDMCwgMHgyNiwgMHgwMCwgMHg5RiwgMHgwMCwgMHg3RCwgMHgwMiwgMHhGMCwgMHgwOSwgMHhDMCwgMHg2NywgMHg2MCwgMHgwRSwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTksIDB4QTAsIDB4MjcsIDB4MDUsIDB4QkYsIDB4MDgsIDB4RUMsIDB4MDIsCisweDMwLCAweDBCLCAweEMwLCAweDI0LCAweDAwLCAweEJGLCAweDA0LCAweDdDLCAweDAyLCAweDMwLCAweENBLCAweEMwLCAweDJDLAorMHgwMCwgMHg4MywgMHg0MCwgMHhEMCwgMHgyMiwgMHhGMCwgMHg0QiwgMHhDMCwgMHgyRiwgMHgwNSwgMHg4RiwgMHg4OCwgMHg1QywKKzB4ODIsIDB4QjAsIDB4MDksIDB4QzAsIDB4MkYsIDB4MDIsIDB4QjMsIDB4MDAsIDB4RkMsIDB4MTYsIDB4RjAsIDB4NDksIDB4RDAsCisweDJGLCAweDAwLCAweEJGLCAweDAwLCAweENDLCAweDIyLCAweDMwLCAweDBCLCAweEMwLCAweDYwLCAweDAwLCAweDBFLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxQywgMHgwOCwgMHgwMywgMHgwMSwgMHg1RCwgMHgwNCwgMHg0NCwgMHg0OCwgMHgxNCwKKzB4MDEsIDB4NDksIDB4MDQsIDB4MDIsIDB4MTcsIDB4MTQsIDB4NzQsIDB4MDAsIDB4MTQsIDB4QzEsIDB4NDQsIDB4ODAsIDB4MDQsCisweDExLCAweDAwLCAweDQ0LCAweDIwLCAweEQyLCAweDQxLCAweDQ5LCAweDA3LCAweDIxLCAweDFELCAweDA0LCAweDQ0LCAweDQ4LAorMHgxMCwgMHgwMSwgMHg0MCwgMHgwNywgMHgwMiwgMHgxMSwgMHgwMCwgMHg3NCwgMHgwMCwgMHhEMiwgMHg4MSwgMHg0MCwgMHgxNiwKKzB4MDQsIDB4NUQsIDB4OTAsIDB4NDQsIDB4MDAsIDB4MTAsIDB4MDEsIDB4NDAsIDB4NzEsIDB4MjAsIDB4MEMsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDEyLCAweEEwLCAweDIzLCAweDA1LCAweDhELCAweDA0LCAweDA1LCAweDMyLCAweDEwLCAweDg4LAorMHg0MCwgMHgyMCwgMHgwMCwgMHg4RCwgMHg4RCwgMHg3NCwgMHgwMiwgMHgxMSwgMHg1OCwgMHg0MCwgMHgyMCwgMHg0MywgMHg4MSwKKzB4NDAsIDB4MTYsIDB4MDIsIDB4RDAsIDB4QzgsIDB4NDAsIDB4MjMsIDB4MDUsIDB4OEQsIDB4MjQsIDB4MTQsIDB4MzIsIDB4OTAsCisweDA4LCAweDQwLCAweDIzLCAweDAwLCAweDgxLCAweDAwLCAweDM0LCAweDBBLCAweEQwLCAweDA4LCAweDQwLCAweDIxLCAweDAxLAorMHg4RCwgMHgwMCwgMHg0NCwgMHgwMiwgMHgxMCwgMHgwOCwgMHg0MCwgMHg0MCwgMHg4MCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MTgsIDB4QTgsIDB4MjUsIDB4MDAsIDB4OUQsIDB4MDQsIDB4NDQsIDB4NDIsIDB4MTAsIDB4MDksIDB4NDAsCisweEE0LCAweDAxLCAweDk1LCAweDQwLCAweDc0LCAweDA2LCAweDEwLCAweDA5LCAweDQyLCAweDI0LCAweDAwLCAweDkxLCAweDAwLAorMHg0NiwgMHgwMywgMHhEMCwgMHgwRCwgMHg0MCwgMHgyNywgMHgwMCwgMHg5RCwgMHgwMCwgMHg0NCwgMHgwMiwgMHgxMCwgMHgwOSwKKzB4NDAsIDB4MjcsIDB4NDAsIDB4OTEsIDB4MjAsIDB4NzQsIDB4MDIsIDB4RDAsIDB4MjksIDB4NDAsIDB4MjQsIDB4MDAsIDB4OEQsCisweDIwLCAweDQ1LCAweDAyLCAweDAwLCAweDA5LCAweDQwLCAweDYxLCAweDIwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwNSwgMHhBOCwgMHgyNywgMHgwMiwgMHg5RiwgMHgwMSwgMHg0NCwgMHgwMiwgMHgzMCwgMHgwOSwgMHhEMCwgMHgyNCwKKzB4MDAsIDB4OUYsIDB4MDEsIDB4M0MsIDB4MDIsIDB4MzAsIDB4MDksIDB4RjAsIDB4MjQsIDB4MDAsIDB4ODMsIDB4MDEsIDB4NUMsCisweDFBLCAweEQyLCAweDM5LCAweEM1LCAweDI3LCAweDI0LCAweDlFLCAweDAwLCAweDVFLCAweDAyLCAweEIwLCAweDA5LCAweEMwLAorMHg2NywgMHg0MCwgMHg5MywgMHgwMCwgMHg3QywgMHgwMiwgMHhGMCwgMHgwOSwgMHhDMCwgMHhBNywgMHgwMCwgMHg5RiwgMHgwMiwKKzB4NEMsIDB4MDIsIDB4MzAsIDB4MDksIDB4QzAsIDB4MTQsIDB4QTAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDE2LCAweDgwLCAweDY1LCAweDAwLCAweDlGLCAweDAwLCAweDFDLCAweDI2LCAweEYwLCAweDA4LCAweEMwLCAweDY3LCAweDAwLAorMHg5NywgMHgwMiwgMHg3QywgMHgwMiwgMHhGMCwgMHgwOSwgMHhDMCwgMHgyNywgMHgwMCwgMHhERiwgMHg4MiwgMHg3QywgMHhDMiwKKzB4RjAsIDB4NDksIDB4QzAsIDB4RTcsIDB4MDAsIDB4OUQsIDB4MDAsIDB4M0MsIDB4MDIsIDB4RjAsIDB4MDksIDB4QzAsIDB4RTcsCisweDAwLCAweDlGLCAweDAwLCAweDdDLCAweDAyLCAweEYwLCAweDg5LCAweEMwLCAweDI3LCAweDAwLCAweDlGLCAweDgwLCAweDdDLAorMHg0MiwgMHhGNCwgMHgwOSwgMHhDMCwgMHg1MywgMHgwMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwKKzB4MDgsIDB4MDUsIDB4MDAsIDB4MTMsIDB4MDAsIDB4NEMsIDB4NDgsIDB4RjAsIDB4MDEsIDB4RDMsIDB4MDQsIDB4MDAsIDB4MUYsCisweDAwLCAweDdDLCAweDgwLCAweEYwLCAweDgxLCAweEMwLCAweDA0LCAweDQwLCAweDEzLCAweDAwLCAweDRDLCAweDA4LCAweEYzLAorMHgyMSwgMHhDNSwgMHhDNywgMHgwMCwgMHgxRiwgMHgwMCwgMHg1QywgMHgwMCwgMHhGMCwgMHgwMSwgMHhDMCwgMHgwNywgMHgwMCwKKzB4MUIsIDB4MDAsIDB4NkMsIDB4MDAsIDB4RjAsIDB4MDEsIDB4QzAsIDB4ODQsIDB4NDEsIDB4MTMsIDB4MDIsIDB4NEQsIDB4MDAsCisweEYwLCAweDQxLCAweEMwLCAweDUzLCAweDIwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDgwLAorMHgxNCwgMHgwMCwgMHg3MSwgMHgwNywgMHhDNSwgMHgwRCwgMHg3MCwgMHgxNywgMHg0MCwgMHgxNCwgMHgwMCwgMHg3RCwgMHgwNCwKKzB4NzQsIDB4MDEsIDB4RDAsIDB4MDUsIDB4NDIsIDB4NTgsIDB4MDAsIDB4NTEsIDB4MDAsIDB4RDQsIDB4MDksIDB4RDAsIDB4MjcsCisweDQwLCAweDFGLCAweDAwLCAweDVELCAweDAwLCAweDQ0LCAweDAxLCAweDc4LCAweDA1LCAweDQwLCAweDVGLCAweDAwLCAweDcxLAorMHgwMCwgMHg3NCwgMHgwMSwgMHhEMCwgMHgwNSwgMHhDMCwgMHgxRSwgMHgwMCwgMHg3MSwgMHgxMSwgMHg4NCwgMHgwNSwgMHhEMiwKKzB4MjcsIDB4NDAsIDB4NTMsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4QTAsIDB4MzIsCisweDAwLCAweDkxLCAweDA3LCAweDI0LCAweDJGLCAweDUwLCAweDFDLCAweDQwLCAweDMwLCAweDgwLCAweDRELCAweDExLCAweDM0LAorMHgwMywgMHhEMCwgMHgwRCwgMHg0MCwgMHgzMiwgMHgxMCwgMHhDOSwgMHgwNiwgMHgwNCwgMHgwNywgMHhEMCwgMHgzQywgMHg0MCwKKzB4MzMsIDB4ODAsIDB4REQsIDB4MDAsIDB4MTQsIDB4MDMsIDB4NTAsIDB4MEMsIDB4NDAsIDB4MzcsIDB4ODYsIDB4OEQsIDB4MDAsCisweDM0LCAweDAyLCAweEQwLCAweDBELCAweDQwLCAweDMwLCAweDAwLCAweEMxLCAweDAwLCAweDA0LCAweDJGLCAweEQwLCAweDAxLAorMHg0MCwgMHg1MywgMHgwMCwgMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHg4MCwgMHg3OCwgMHgwMCwKKzB4MjEsIDB4MjQsIDB4ODQsIDB4MDMsIDB4NTAsIDB4MEUsIDB4NDEsIDB4MzgsIDB4MDIsIDB4NkQsIDB4MDAsIDB4QjQsIDB4MDMsCisweEQwLCAweDBCLCAweDUwLCAweDI4LCAweDA1LCAweDY5LCAweDEwLCAweEI0LCAweDA5LCAweEQwLCAweDJFLCAweDQyLCAweDNCLAorMHgwNCwgMHhGRCwgMHgwMCwgMHg4NCwgMHgwMywgMHg1MSwgMHgwRSwgMHg0MCwgMHgxQiwgMHgwMCwgMHgyNSwgMHgwMCwgMHhCNCwKKzB4MDIsIDB4RDIsIDB4NEYsIDB4NjQsIDB4N0EsIDB4MjAsIDB4RTEsIDB4MDAsIDB4ODQsIDB4MDMsIDB4RDAsIDB4MEEsIDB4NjAsCisweDE3LCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE1LCAweDEwLCAweDc4LCAweDAwLCAweDIzLAorMHgwNywgMHhBRCwgMHgwNSwgMHg3MCwgMHgxNCwgMHhDMCwgMHg3OCwgMHgwMSwgMHhFRiwgMHgwMSwgMHhCQywgMHgwNywgMHhGMCwKKzB4OUUsIDB4QzAsIDB4NjgsIDB4NDEsIDB4QTksIDB4MDksIDB4OEMsIDB4MDcsIDB4RjMsIDB4MUUsIDB4QzAsIDB4N0IsIDB4MTAsCisweEVGLCAweDAxLCAweDk0LCAweDE3LCAweDcwLCAweDNFLCAweDgwLCAweDdGLCAweDAwLCAweEVGLCAweDAxLCAweEJDLCAweDA3LAorMHhGMCwgMHg1RSwgMHg4MCwgMHg3QywgMHgwMCwgMHhGMSwgMHgwMSwgMHg4QywgMHgwNywgMHhGMCwgMHgxNiwgMHhDMCwgMHg1NywKKzB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4QjgsIDB4QjUsIDB4NDIsIDB4MEYsIDB4MDAsCisweDdDLCAweDAxLCAweDcyLCAweDA1LCAweEMwLCAweDc3LCAweDAwLCAweERGLCAweDAwLCAweDdDLCAweDAzLCAweEYwLCAweDQ5LAorMHhEMCwgMHgwNywgMHgwQSwgMHgxNywgMHgwMCwgMHg1QywgMHgwMSwgMHhGMCwgMHgwRCwgMHhDMCwgMHgzNywgMHgwMCwgMHhERiwKKzB4MDYsIDB4N0MsIDB4MDMsIDB4NzAsIDB4MUQsIDB4QzAsIDB4MjcsIDB4NDAsIDB4NUIsIDB4MDAsIDB4N0MsIDB4MDMsIDB4RjAsCisweDFDLCAweEMwLCAweDI3LCAweDAwLCAweERFLCAweDAwLCAweDdDLCAweDAzLCAweEYwLCAweDBELCAweEMwLCAweDQzLCAweDYwLAorMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHhBOCwgMHhGRiwgMHgwMCwgMHhCMywgMHgwMSwgMHhDQywKKzB4MjMsIDB4RjAsIDB4NUYsIDB4QzIsIDB4N0YsIDB4MDAsIDB4RkYsIDB4MDEsIDB4RkMsIDB4MDcsIDB4MzAsIDB4MUYsIDB4QzAsCisweDZDLCAweDAwLCAweEZCLCAweDQxLCAweEM4LCAweDI3LCAweDMwLCAweDE3LCAweEMwLCAweDVGLCAweDIwLCAweEZGLCAweDEzLAorMHhEQywgMHg0NywgMHhCMCwgMHgxRiwgMHhDOCwgMHg3RiwgMHgwMCwgMHhCRiwgMHgwMSwgMHhEQywgMHgwNiwgMHgzMCwgMHgxRiwKKzB4RDEsIDB4N0MsIDB4MDAsIDB4RkYsIDB4ODEsIDB4RkMsIDB4ODcsIDB4RjAsIDB4MUIsIDB4QzAsIDB4MDMsIDB4MDgsIDB4MEUsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE1LCAweDg4LCAweDNELCAweDAwLCAweEExLCAweDBBLCAweDg0LCAweDA5LAorMHg3MCwgMHgwRSwgMHg0OCwgMHgzQiwgMHgwNCwgMHhBRCwgMHgwMCwgMHhCNCwgMHgwMywgMHgxMCwgMHgwRiwgMHg0MCwgMHgyOCwKKzB4MTAsIDB4NjEsIDB4MDQsIDB4QzQsIDB4MjMsIDB4MTAsIDB4ODYsIDB4NDAsIDB4M0IsIDB4MEEsIDB4RUQsIDB4MDAsIDB4QzQsCisweDAzLCAweEIyLCAweDBFLCAweDQwLCAweDNCLCAweDAwLCAweDNELCAweDAwLCAweDg0LCAweDAyLCAweEIwLCAweDBFLCAweDQwLAorMHgzOCwgMHgwMCwgMHhBRCwgMHg4OCwgMHhCNCwgMHgyMiwgMHhEMCwgMHgwMiwgMHg0MCwgMHg1NywgMHgyMCwgMHgwNiwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDAsIDB4MzksIDB4MDAsIDB4MzEsIDB4MDAsIDB4ODQsIDB4MjMsIDB4RDgsCisweDQ2LCAweDQwLCAweDNCLCAweDAwLCAweEVELCAweDAyLCAweEY0LCAweDAzLCAweDkwLCAweDJFLCAweDQwLCAweDIwLCAweDAwLAorMHhBMSwgMHgyMCwgMHg4NiwgMHgyMiwgMHg5OCwgMHgyQSwgMHg0MCwgMHg4QiwgMHgwMCwgMHhFRCwgMHgwMCwgMHg5NCwgMHgwMywKKzB4MTAsIDB4MEUsIDB4NDAsIDB4M0IsIDB4MDAsIDB4RUQsIDB4MDAsIDB4OTQsIDB4MjMsIDB4MTAsIDB4MEMsIDB4NDAsIDB4MTgsCisweDAwLCAweEVELCAweDAwLCAweEI0LCAweDAzLCAweEQwLCAweDBFLCAweDQxLCAweDAzLCAweDA4LCAweDA0LCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwNiwgMHgyMCwgMHgzMywgMHgwNCwgMHgwMSwgMHgwMywgMHg0NSwgMHgwMCwgMHg1MCwgMHgwMSwKKzB4NDAsIDB4RjMsIDB4MDAsIDB4OUQsIDB4NDAsIDB4MzYsIDB4ODMsIDB4OTAsIDB4MEMsIDB4NDAsIDB4MDQsIDB4MDAsIDB4MDEsCisweDIwLCAweDA2LCAweDAyLCAweDkwLCAweDA4LCAweDQ0LCAweDIzLCAweDA4LCAweENELCAweDAwLCAweDA0LCAweDAzLCAweDkwLAorMHgwQywgMHg0MCwgMHgzMywgMHgwMiwgMHg0RCwgMHgwOCwgMHgwNCwgMHgwMywgMHg5MCwgMHgxQywgMHg0MCwgMHgyMCwgMHgwMCwKKzB4Q0QsIDB4MDAsIDB4NzQsIDB4MDIsIDB4RDAsIDB4MTQsIDB4NDAsIDB4MTMsIDB4MjAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDFELCAweEEwLCAweEJELCAweDQwLCAweDczLCAweDExLCAweDRDLCAweDBBLCAweEYwLCAweDA5LCAweEMwLAorMHgzRiwgMHgxMCwgMHg1RiwgMHgwMywgMHg3NCwgMHg4MywgMHhCNCwgMHgwOSwgMHg0MCwgMHgyQywgMHgwMCwgMHhEMywgMHgwMCwKKzB4NEMsIDB4MUEsIDB4QjAsIDB4MDksIDB4QzAsIDB4MjcsIDB4MDAsIDB4RkYsIDB4MDAsIDB4REMsIDB4MDMsIDB4MzAsIDB4MEYsCisweDQwLCAweDI3LCAweDAwLCAweDVGLCAweDAwLCAweDFDLCAweDAyLCAweDMwLCAweEJGLCAweEMxLCAweDM0LCAweDAwLCAweERGLAorMHgwMCwgMHg3QywgMHgwMywgMHhGMCwgMHgxNCwgMHhDMCwgMHg1NywgMHgyMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDEsIDB4MDAsIDB4NzcsIDB4MDAsIDB4NUYsIDB4MDYsIDB4N0MsIDB4NjIsIDB4RjAsIDB4MDksIDB4QzAsIDB4MzcsCisweDAxLCAweDVGLCAweDAxLCAweDdDLCAweDAzLCAweDcwLCAweDA5LCAweEMwLCAweDI3LCAweDAwLCAweEQ3LCAweDAyLCAweDdELAorMHgwMCwgMHg3MCwgMHgwMSwgMHhDMCwgMHgyNywgMHgwMCwgMHhERiwgMHgwMCwgMHg3QywgMHgwMywgMHhGMiwgMHgwRCwgMHhDNCwKKzB4MjcsIDB4MDAsIDB4NUYsIDB4MDIsIDB4N0MsIDB4MDIsIDB4RjAsIDB4MEQsIDB4RTAsIDB4MzcsIDB4MDAsIDB4REYsIDB4MDIsCisweDdDLCAweDBCLCAweEYxLCAweDBELCAweEMwLCAweDA3LCAweDAwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMSwgMHgwMCwgMHgzRiwgMHgwMCwgMHg3MywgMHgwOCwgMHhDQywgMHgwMCwgMHgzMCwgMHgwQiwgMHhDMiwgMHgzOCwgMHgwMCwKKzB4RjMsIDB4MDAsIDB4Q0MsIDB4MDMsIDB4MzEsIDB4MUIsIDB4QzAsIDB4MkUsIDB4MDAsIDB4RjMsIDB4MDAsIDB4Q0MsIDB4NDAsCisweEYwLCAweDBBLCAweEM0LCAweDA4LCAweDAwLCAweEYzLCAweDAwLCAweEJDLCAweDAzLCAweDMwLCAweDBGLCAweEMwLCAweDJGLAorMHgwMCwgMHg3RiwgMHgwMSwgMHg0QywgMHgwNiwgMHgzMCwgMHgwRSwgMHhDOCwgMHgzQywgMHgwMCwgMHg3RiwgMHgwMCwgMHhGQywKKzB4MDMsIDB4MzAsIDB4ODMsIDB4QzAsIDB4MDAsIDB4MjIsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsCisweDIwLCAweDM2LCAweDAwLCAweDUxLCAweDAwLCAweDQ1LCAweDBDLCAweDExLCAweDM5LCAweDQxLCAweDM0LCAweDAwLCAweEQxLAorMHgwMSwgMHgyQywgMHgwMywgMHg1MCwgMHgwOSwgMHg0MCwgMHg0NCwgMHgwMCwgMHhDMSwgMHgwMiwgMHg3QywgMHgwQywgMHhEMCwKKzB4MzEsIDB4QzAsIDB4NDYsIDB4MDAsIDB4RDEsIDB4MDAsIDB4NzQsIDB4MDMsIDB4NTAsIDB4MEQsIDB4QzAsIDB4NjUsIDB4MDAsCisweDVELCAweDAyLCAweDZDLCAweDA2LCAweDE0LCAweDBELCAweDQwLCAweDM0LCAweDAwLCAweERELCAweDA0LCAweDcwLCAweDA3LAorMHgxMCwgMHgwOSwgMHg0MCwgMHgwNCwgMHgwMiwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHhBOCwKKzB4MzAsIDB4NDAsIDB4MDEsIDB4MDAsIDB4NjQsIDB4MDYsIDB4OTAsIDB4MTEsIDB4NDAsIDB4MzQsIDB4MDAsIDB4RDEsIDB4MDEsCisweDQ0LCAweDAzLCAweDE4LCAweDg4LCAweDQwLCAweDI0LCAweDAxLCAweEQxLCAweDE0LCAweDQ0LCAweDA2LCAweEQwLCAweDExLAorMHg0MCwgMHg0NCwgMHgwMCwgMHhEMSwgMHgwMCwgMHg1NCwgMHgwMywgMHg5MCwgMHgwRCwgMHg0MCwgMHg2NywgMHgwNCwgMHg0OSwKKzB4MDYsIDB4NDQsIDB4MjIsIDB4MTAsIDB4MEQsIDB4NDAsIDB4MzQsIDB4MjIsIDB4REQsIDB4NDAsIDB4NzQsIDB4MEYsIDB4MTAsCisweDBELCAweDQwLCAweDA0LCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDIwLCAweDMwLAorMHgwMCwgMHgwMSwgMHgwMCwgMHgwNSwgMHgwMiwgMHg5MCwgMHgwOCwgMHg1NiwgMHgzMCwgMHg0MCwgMHhDMSwgMHgwMCwgMHg0NSwKKzB4MDMsIDB4NTAsIDB4MDgsIDB4NDAsIDB4MjAsIDB4MDAsIDB4ODEsIDB4MDAsIDB4MTQsIDB4MDIsIDB4RDAsIDB4MDAsIDB4NDAsCisweDYwLCAweDAwLCAweEMxLCAweDAwLCAweDM0LCAweDAzLCAweEQyLCAweDBDLCAweDQwLCAweDIxLCAweDAwLCAweDRELCAweDAwLAorMHgyNCwgMHgwMiwgMHgxMCwgMHgwQywgMHgwMCwgMHgzMCwgMHgwOCwgMHg4RCwgMHgwMCwgMHgzNCwgMHgwMywgMHgxMCwgMHgwNSwKKzB4MDAsIDB4NDAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4QjAsIDB4M0UsIDB4MTAsCisweDEzLCAweDAwLCAweDRELCAweDAyLCAweEIwLCAweDAxLCAweDQyLCAweDM0LCAweDAwLCAweDkzLCAweDIwLCAweDQ2LCAweDAzLAorMHgzMCwgMHgwQiwgMHhDMCwgMHgyNiwgMHgwMCwgMHg1MywgMHgwMCwgMHg0NCwgMHgwMCwgMHhGMSwgMHgwOSwgMHg0MCwgMHgwNCwKKzB4NDAsIDB4RTMsIDB4MDAsIDB4N0MsIDB4MDMsIDB4QjAsIDB4MEQsIDB4QzAsIDB4MjcsIDB4MDAsIDB4NUYsIDB4MDAsIDB4NEMsCisweDAyLCAweDMwLCAweDBELCAweDkwLCAweDE0LCAweDAwLCAweDVGLCAweDAwLCAweDdDLCAweDAzLCAweDMwLCAweDA5LCAweEQwLAorMHgwMCwgMHhDMCwgMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHg5OCwgMHgzRiwgMHgwMCwgMHgyRiwKKzB4MDAsIDB4RkMsIDB4MDIsIDB4NzAsIDB4MEIsIDB4QzQsIDB4M0YsIDB4MDAsIDB4QkYsIDB4MDAsIDB4QkMsIDB4MDMsIDB4RjAsCisweDBCLCAweEMwLCAweDBGLCAweDAwLCAweDJGLCAweDAwLCAweEZDLCAweDAwLCAweEYwLCAweDAzLCAweEMyLCAweDBGLCAweDAwLAorMHhGRiwgMHgyMCwgMHhGQywgMHgwMywgMHg3MCwgMHgwRiwgMHhDMCwgMHgyRCwgMHgwMCwgMHg3RiwgMHgwMCwgMHhGQywgMHgwMiwKKzB4RjAsIDB4MEYsIDB4QzAsIDB4M0YsIDB4MDgsIDB4RkYsIDB4MDAsIDB4RkMsIDB4MDEsIDB4RjAsIDB4MDMsIDB4QzAsIDB4MTcsCisweDYwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweEEwLCAweEZGLCAweDAwLCAweEZGLCAweDA5LAorMHhGQywgMHgzMiwgMHhGMCwgMHg0RiwgMHhFMSwgMHgyRCwgMHgyMSwgMHhGRiwgMHgwOSwgMHhGQywgMHgwMCwgMHhGMCwgMHgwRiwKKzB4QzAsIDB4M0MsIDB4MDAsIDB4RkYsIDB4MUMsIDB4Q0MsIDB4NTIsIDB4RjAsIDB4NEYsIDB4QzAsIDB4N0MsIDB4ODAsIDB4RkYsCisweDAwLCAweENDLCAweDEzLCAweEIwLCAweDBGLCAweEMwLCAweDdDLCAweDAwLCAweEZGLCAweDg0LCAweEJDLCAweDA1LCAweDMwLAorMHgxRiwgMHhDMCwgMHg3QywgMHg0MCwgMHhGQiwgMHgwMSwgMHhDQywgMHgwNCwgMHhCMCwgMHgwQiwgMHhDMCwgMHgwQywgMHgwMCwKKzB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MzcsIDB4MDAsIDB4Q0QsIDB4MDAsIDB4NzQsCisweDNBLCAweEQwLCAweDNGLCAweDQwLCAweEE3LCAweDAzLCAweERELCAweDA0LCAweDc0LCAweDA2LCAweEQwLCAweDJGLCAweDQwLAorMHhGQywgMHgwMCwgMHhGRCwgMHgwNiwgMHg0NCwgMHgxQSwgMHhEMCwgMHhCRiwgMHg0NiwgMHg3NCwgMHgwMCwgMHhGRCwgMHgwNiwKKzB4QzQsIDB4M0IsIDB4MzQsIDB4QUYsIDB4NDAsIDB4NzQsIDB4MDAsIDB4RkMsIDB4MDIsIDB4NzQsIDB4MDUsIDB4MTAsIDB4MUQsCisweDQwLCAweDc0LCAweDAwLCAweDkxLCAweDAxLCAweDU0LCAweDAzLCAweDUyLCAweDAxLCAweDQwLCAweDBELCAweDAwLCAweDBDLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMSwgMHhBMCwgMHgzMywgMHgwMSwgMHhDRCwgMHgwMCwgMHgzNCwgMHgwMCwKKzB4RDAsIDB4MEMsIDB4NDAsIDB4MDMsIDB4MDQsIDB4Q0QsIDB4MDQsIDB4MzQsIDB4MDIsIDB4RDAsIDB4OEMsIDB4NDAsIDB4MzIsCisweDAyLCAweENELCAweDAwLCAweDA0LCAweDQwLCAweEQxLCAweDBDLCAweDQwLCAweDMwLCAweDAwLCAweENELCAweDE4LCAweDA0LAorMHg0MywgMHgxMCwgMHgwQywgMHg0MiwgMHgzMCwgMHgwMCwgMHhDRCwgMHgwMiwgMHg3NCwgMHgwMywgMHgxMCwgMHgwRCwgMHg0MCwKKzB4MzEsIDB4MDAsIDB4NDksIDB4ODAsIDB4MDQsIDB4MDEsIDB4ODAsIDB4MDgsIDB4NjAsIDB4NEMsIDB4ODAsIDB4MEUsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweEE4LCAweDM1LCAweDAwLCAweERELCAweDAwLCAweDc0LCAweDBDLCAweEQwLAorMHgwRCwgMHg0MCwgMHg0NywgMHgwMCwgMHhERCwgMHgwMCwgMHg3NCwgMHgwRSwgMHhEMCwgMHgwRCwgMHg0MCwgMHgzNiwgMHgwMCwKKzB4REQsIDB4MDAsIDB4NDUsIDB4MDYsIDB4RDAsIDB4MEQsIDB4NDAsIDB4MzQsIDB4MTAsIDB4REQsIDB4MDAsIDB4NDQsIDB4MDMsCisweDEwLCAweDBELCAweDQwLCAweDM0LCAweDE0LCAweERELCAweDAwLCAweDc0LCAweDIxLCAweDEwLCAweDBELCAweDYwLCAweDc0LAorMHg5MCwgMHgxMSwgMHgwMCwgMHg1NiwgMHgwMSwgMHgwOSwgMHgzMSwgMHg0MCwgMHgwRCwgMHgyMCwgMHgwNiwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4QTAsIDB4MzcsIDB4MDAsIDB4REYsIDB4MDAsIDB4N0MsIDB4MEMsIDB4RjAsIDB4MEQsCisweEMwLCAweDY3LCAweDA0LCAweERGLCAweDAwLCAweDdDLCAweDA0LCAweEYwLCAweDBELCAweDQwLCAweDM2LCAweDAwLCAweERGLAorMHgyMCwgMHg0QywgMHgxRSwgMHhGMCwgMHgwRCwgMHhDMCwgMHgzNCwgMHgwMCwgMHhERCwgMHgwMCwgMHg0QywgMHgwMywgMHgzMCwKKzB4MEQsIDB4QzAsIDB4MzQsIDB4MDAsIDB4REYsIDB4MDAsIDB4N0MsIDB4ODEsIDB4MzEsIDB4MkMsIDB4QzAsIDB4RjAsIDB4MDQsCisweERCLCAweDAwLCAweDRDLCAweDE2LCAweEEwLCAweDMxLCAweEMwLCAweDAwLCAweDAwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwNywgMHg4OCwgMHgzRCwgMHgwMCwgMHhGRiwgMHgwMCwgMHg3QywgMHgwMiwgMHhGMCwgMHgwRiwgMHhDMiwKKzB4MkYsIDB4MDAsIDB4RkYsIDB4MDAsIDB4N0MsIDB4MDIsIDB4RjAsIDB4MEYsIDB4RDAsIDB4MzUsIDB4MDAsIDB4REYsIDB4MDAsCisweEZDLCAweDAyLCAweEYwLCAweDBFLCAweEMwLCAweDNGLCAweDAwLCAweEVGLCAweDAwLCAweEZDLCAweDQzLCAweEYwLCAweDBGLAorMHhDNCwgMHgzRiwgMHgwMiwgMHhGRCwgMHgwMCwgMHhGOCwgMHgwMSwgMHhGNCwgMHgyRiwgMHg0MCwgMHgzRiwgMHg0MCwgMHhGRiwKKzB4MDAsIDB4RkMsIDB4NjcsIDB4RjAsIDB4MDIsIDB4QzIsIDB4MUYsIDB4MjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAyLCAweDA4LCAweDM1LCAweDgwLCAweERGLCAweDAwLCAweDVDLCAweDA4LCAweDMwLCAweDBELCAweEMwLCAweEE0LAorMHgwOCwgMHhERiwgMHgwMCwgMHg0QywgMHgwOCwgMHgzMCwgMHg1QywgMHhDMCwgMHgzNCwgMHgwMCwgMHhDMywgMHg0MCwgMHg0QywKKzB4NDgsIDB4RjAsIDB4MEQsIDB4QzAsIDB4MzQsIDB4MDAsIDB4RDMsIDB4MDAsIDB4M0MsIDB4ODMsIDB4RjAsIDB4MEMsIDB4QzAsCisweDM0LCAweDA0LCAweEQ3LCAweDkxLCAweDRDLCAweDEzLCAweDc0LCAweDBELCAweEM1LCAweDM1LCAweDAwLCAweERGLCAweDg0LAorMHg0QywgMHgwNSwgMHhFMCwgMHgyOSwgMHg4MSwgMHgwOSwgMHgyMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MTMsIDB4QTAsIDB4MzQsIDB4MDAsIDB4REQsIDB4MDAsIDB4NDQsIDB4MDQsIDB4MTAsIDB4MEYsIDB4NDAsIDB4RTQsIDB4MDIsCisweERELCAweDAwLCAweDQ0LCAweDAwLCAweEIwLCAweDJGLCAweDQwLCAweDNELCAweDAwLCAweEYxLCAweDAxLCAweDQ0LCAweDE2LAorMHhEMCwgMHgwRiwgMHhDMCwgMHgzNCwgMHgwMCwgMHhGNywgMHgwNCwgMHhGNCwgMHg0QiwgMHhEMCwgMHhBRiwgMHg0MCwgMHhCNSwKKzB4MDAsIDB4RjAsIDB4MDIsIDB4MDQsIDB4MTUsIDB4MTAsIDB4M0QsIDB4NDQsIDB4MzQsIDB4MTAsIDB4QzksIDB4ODAsIDB4NDQsCisweDg1LCAweDkwLCAweDMxLCAweDQxLCAweDZELCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA3LAorMHgyMCwgMHgzMCwgMHgxMCwgMHhDRCwgMHgwMCwgMHgwNCwgMHg0RSwgMHgxMSwgMHgwQywgMHg0NCwgMHg0MCwgMHgwMCwgMHhDRCwKKzB4MDAsIDB4MDQsIDB4MDAsIDB4MTAsIDB4MkMsIDB4NDAsIDB4MzAsIDB4MDgsIDB4QzEsIDB4MDQsIDB4MjQsIDB4MDQsIDB4RDAsCisweDBDLCAweDUwLCAweDMyLCAweDAwLCAweEMxLCAweDA3LCAweDM0LCAweDA3LCAweEQwLCAweDBDLCAweDQwLCAweEQwLCAweDAwLAorMHhDNSwgMHgwMiwgMHgwMCwgMHgwOSwgMHgxMCwgMHgxNCwgMHg0MCwgMHg4MywgMHg0MSwgMHhDMSwgMHgwMiwgMHg2NCwgMHgwMCwKKzB4RDAsIDB4MTgsIDB4NDAsIDB4MEYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsCisweDc4LCAweDAwLCAweEVELCAweDAxLCAweDg1LCAweDA3LCAweDE0LCAweDFDLCAweDUwLCAweDc4LCAweDA0LCAweEVELCAweDAxLAorMHg4NSwgMHgwNiwgMHgxMCwgMHgxRSwgMHg0MCwgMHg3OCwgMHg4MCwgMHhFMSwgMHgxMSwgMHhBNCwgMHgwNSwgMHhEMCwgMHgxQywKKzB4NDAsIDB4N0MsIDB4MDAsIDB4RUQsIDB4MDEsIDB4QjQsIDB4MDcsIDB4RDAsIDB4MUUsIDB4NDAsIDB4NTksIDB4MDYsIDB4RTUsCisweDAxLCAweDg0LCAweDA1LCAweDEwLCAweDlFLCAweDQwLCAweDdBLCAweDA3LCAweEExLCAweDAxLCAweEE0LCAweDA2LCAweDkxLAorMHgxQSwgMHg0MCwgMHg3RiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNiwgMHgxOCwgMHgzMCwKKzB4MDAsIDB4Q0QsIDB4MDAsIDB4MUMsIDB4NDMsIDB4MzAsIDB4MEMsIDB4QzAsIDB4MTAsIDB4MDAsIDB4REYsIDB4MDAsIDB4MDQsCisweDAzLCAweDEwLCAweDBELCAweEMwLCAweDMwLCAweDAwLCAweEMzLCAweDAwLCAweDJDLCAweDIxLCAweEYwLCAweDBDLCAweEMwLAorMHgzNiwgMHgwMiwgMHhDMywgMHgwMCwgMHgzQywgMHgwMywgMHhGMiwgMHgwRCwgMHhFMCwgMHgyMCwgMHgwMCwgMHhENywgMHgwMCwKKzB4MEMsIDB4MzMsIDB4MzAsIDB4OEMsIDB4QzEsIDB4MjMsIDB4MDMsIDB4NEIsIDB4MjAsIDB4MkMsIDB4MjAsIDB4RjAsIDB4MDksCisweEMwLCAweDRCLCAweDY4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweDM4LCAweDNELCAweDEwLAorMHhGRiwgMHg0OCwgMHhGQywgMHgyMywgMHhGOCwgMHgwRiwgMHhDMCwgMHgxRiwgMHgwMCwgMHhGRiwgMHgwMCwgMHhGQywgMHgwMywKKzB4RjAsIDB4MEYsIDB4QzAsIDB4M0YsIDB4MTAsIDB4RkYsIDB4MDIsIDB4NUQsIDB4MjEsIDB4RjAsIDB4MEYsIDB4QzAsIDB4M0YsCisweDAwLCAweEY3LCAweDEwLCAweDdDLCAweDQzLCAweEYwLCAweDBELCAweEMxLCAweDJBLCAweDAwLCAweEZCLCAweDAyLCAweDdDLAorMHgyMSwgMHhGMiwgMHg4OCwgMHgwMCwgMHgyOCwgMHgwMywgMHgyRiwgMHgwOCwgMHhEQywgMHgyMiwgMHhGMiwgMHg4QiwgMHhDNCwKKzB4MDksIDB4NjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4QTAsIDB4MzcsIDB4ODAsIDB4REYsCisweDAwLCAweDdFLCAweDAxLCAweDMwLCAweDRELCAweEMxLCAweDE3LCAweDAwLCAweERGLCAweDAwLCAweDdDLCAweDAxLCAweEYwLAorMHhBRCwgMHhEMCwgMHgzNCwgMHgwMSwgMHhERiwgMHgwMiwgMHg1QywgMHgwMywgMHhGMCwgMHhDRCwgMHhDMCwgMHgzNywgMHgwMCwKKzB4REYsIDB4MDQsIDB4N0MsIDB4MUIsIDB4RjgsIDB4NkQsIDB4QzAsIDB4MzcsIDB4MDAsIDB4RDMsIDB4MEUsIDB4N0MsIDB4MDEsCisweEYwLCAweDFELCAweEMwLCAweDIyLCAweDQwLCAweENCLCAweDAwLCAweDRDLCAweDAyLCAweEYwLCAweDExLCAweDQwLCAweDQwLAorMHgwMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHg4MCwgMHgzOSwgMHgwMCwgMHhFRCwgMHgwMCwKKzB4RjQsIDB4MDMsIDB4MTAsIDB4NEUsIDB4NDAsIDB4M0IsIDB4MDAsIDB4RUMsIDB4MDAsIDB4QjQsIDB4MDMsIDB4RDAsIDB4OEUsCisweDQwLCAweEI4LCAweDA1LCAweEZELCAweDA0LCAweDg0LCAweDAzLCAweEQwLCAweDBFLCAweDQxLCAweDNCLCAweDAwLCAweEVELAorMHgwQywgMHhCNCwgMHg1MywgMHg3MCwgMHhDRSwgMHg0MCwgMHgzQiwgMHgwMCwgMHhFNSwgMHgwMCwgMHhCNCwgMHgwMCwgMHhEMCwKKzB4MEUsIDB4NDAsIDB4MjgsIDB4MDAsIDB4RUIsIDB4MDAsIDB4ODQsIDB4MDMsIDB4RDAsIDB4MDYsIDB4NDAsIDB4NEMsIDB4MDAsCisweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDc5LCAweDAwLCAweEU1LCAweDAxLCAweEI0LAorMHg4NywgMHg5MiwgMHhERSwgMHg0MiwgMHg3QiwgMHgwMCwgMHhFRCwgMHgwMSwgMHhCNCwgMHgwNywgMHhEMCwgMHg1QywgMHg0MCwKKzB4NzgsIDB4MDAsIDB4RkQsIDB4NEQsIDB4OTQsIDB4MDcsIDB4RDAsIDB4NUUsIDB4NDAsIDB4N0IsIDB4MDAsIDB4RUQsIDB4MDUsCisweEI0LCAweDA3LCAweEQwLCAweDFFLCAweDQ0LCAweDdGLCAweDAwLCAweEUxLCAweDA1LCAweEI0LCAweDA3LCAweEQwLCAweDFFLAorMHg0MSwgMHg2RSwgMHg4MCwgMHhGOSwgMHgwMSwgMHg4NCwgMHgwNywgMHhEMCwgMHgxQywgMHg2MCwgMHgxMCwgMHgyMCwgMHgwNCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4MjgsIDB4MzMsIDB4MDAsIDB4REQsIDB4MDAsIDB4NzQsIDB4NDMsCisweDk0LCAweDBDLCAweDQwLCAweEYzLCAweDAxLCAweENELCAweDAwLCAweDM2LCAweDNGLCAweEQwLCAweDBELCAweDQwLCAweDMwLAorMHgxMCwgMHhERCwgMHgwMCwgMHgwNCwgMHg0NywgMHg5MCwgMHgwQywgMHg0MiwgMHgzMywgMHgwMCwgMHhERCwgMHgwMCwgMHg3NCwKKzB4MDMsIDB4NTIsIDB4MEMsIDB4NDAsIDB4QjMsIDB4MDIsIDB4QzUsIDB4MDAsIDB4MzQsIDB4MDAsIDB4RDAsIDB4NEMsIDB4NDYsCisweDYwLCAweEEyLCAweEM5LCAweDA5LCAweDQ0LCAweDAzLCAweEMwLCAweDFDLCAweDQwLCAweDU4LCAweDIwLCAweDBDLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNywgMHhBMCwgMHgxNSwgMHgwOCwgMHg1RiwgMHgwMCwgMHhGNCwgMHgxNSwgMHhCMCwKKzB4MDUsIDB4QzAsIDB4OUYsIDB4MDEsIDB4NUYsIDB4MDAsIDB4RkMsIDB4MDEsIDB4RjIsIDB4MDUsIDB4QzAsIDB4MTQsIDB4MDgsCisweDVGLCAweDAwLCAweERDLCAweDE5LCAweEYzLCAweDA1LCAweEMwLCAweDE3LCAweDAwLCAweDVGLCAweDAwLCAweDdDLCAweDAxLAorMHhGMCwgMHgwNSwgMHhDMCwgMHg1RiwgMHgyMCwgMHg1MywgMHgwMCwgMHhGQywgMHgxNSwgMHhGMCwgMHgwNywgMHhDQywgMHg5QSwKKzB4MjAsIDB4NkIsIDB4MDIsIDB4Q0QsIDB4MDksIDB4RjAsIDB4MzcsIDB4RDAsIDB4NUMsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDBBLCAweDA1LCAweDAwLCAweDFGLCAweDAwLCAweDdDLCAweDAwLCAweDcwLCAweDAxLAorMHhDMCwgMHgwNywgMHgwMCwgMHgxRiwgMHgwMCwgMHg3QywgMHgwMCwgMHhGMCwgMHgwMSwgMHhDMCwgMHgwNywgMHgyMCwgMHgxRiwKKzB4NDAsIDB4N0MsIDB4MDAsIDB4RjAsIDB4MDEsIDB4QzAsIDB4MDcsIDB4MDAsIDB4MUYsIDB4MDAsIDB4N0MsIDB4MDAsIDB4NzAsCisweDIxLCAweEMwLCAweDg3LCAweDAxLCAweDFGLCAweDAyLCAweDdFLCAweDAwLCAweEYyLCAweDAxLCAweEMwLCAweDA3LCAweDA0LAorMHgxRiwgMHgxMCwgMHg3QywgMHg0OCwgMHhCMCwgMHhFMSwgMHhDOCwgMHg0QiwgMHgyMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4MjUsIDB4MDAsIDB4OUYsIDB4ODAsIDB4NEMsIDB4MDIsIDB4MzAsIDB4MDksIDB4QzAsCisweEE3LCAweDAwLCAweDlGLCAweDAwLCAweDdDLCAweDAyLCAweEYwLCAweDA5LCAweEMwLCAweDI1LCAweDgwLCAweDlGLCAweDA4LAorMHgwQywgMHgwMiwgMHgzMCwgMHgwOSwgMHhDMCwgMHgyNywgMHgwMCwgMHg5RiwgMHgwMCwgMHg0QywgMHgwRSwgMHgzMCwgMHgwOCwKKzB4QzAsIDB4MjQsIDB4MDAsIDB4OTcsIDB4MDAsIDB4N0MsIDB4ODYsIDB4NzIsIDB4MjksIDB4Q0EsIDB4QTcsIDB4MDgsIDB4OTcsCisweDA1LCAweDVDLCAweDAyLCAweDMwLCAweDE5LCAweEMwLCAweDQzLCAweDIwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMSwgMHgyMCwgMHgyNCwgMHgwOCwgMHg5RCwgMHgyMCwgMHg0NCwgMHgzNiwgMHgwNCwgMHgwOSwgMHg0NCwgMHhFNywKKzB4MDAsIDB4OUQsIDB4MDAsIDB4NzQsIDB4MDIsIDB4RDAsIDB4MjksIDB4NDAsIDB4MjUsIDB4OTAsIDB4OUMsIDB4MDEsIDB4NDQsCisweDBBLCAweDE0LCAweDA5LCAweDQwLCAweDI3LCAweDAwLCAweDlELCAweDAzLCAweDQ1LCAweDBBLCAweEE0LCAweDA5LCAweDUxLAorMHhBMCwgMHgwMCwgMHg5MCwgMHgxMiwgMHgzNCwgMHgyNiwgMHgxMCwgMHgyOSwgMHg0MCwgMHgyNywgMHgwMCwgMHg5OSwgMHgwMCwKKzB4NkMsIDB4OEEsIDB4NTAsIDB4MTksIDB4NDEsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDE4LCAweEEwLCAweDI0LCAweDAwLCAweDlELCAweDAwLCAweDQ1LCAweDAyLCAweDAwLCAweDA5LCAweDQwLCAweDI3LCAweDAwLAorMHg5RCwgMHgwMCwgMHg0MCwgMHgwMiwgMHhEMCwgMHgwOSwgMHgwMCwgMHgyNCwgMHgyMCwgMHg5QywgMHgxMCwgMHg0NCwgMHgyMiwKKzB4MTAsIDB4MDksIDB4NDQsIDB4MjUsIDB4MDAsIDB4OUQsIDB4MTQsIDB4NDQsIDB4NDIsIDB4OTAsIDB4MTksIDB4NDAsIDB4MjQsCisweDA0LCAweDk1LCAweDAwLCAweDU0LCAweDAyLCAweDQwLCAweDBELCAweDQxLCAweDI2LCAweDAwLCAweDlELCAweDQyLCAweDU0LAorMHgxMiwgMHgxMCwgMHg0OSwgMHg0MCwgMHg2MywgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwKKzB4MjAsIDB4MjAsIDB4MDAsIDB4OEQsIDB4MDAsIDB4MDQsIDB4MTIsIDB4MTEsIDB4NDgsIDB4NDAsIDB4MzMsIDB4MDEsIDB4OEQsCisweDAwLCAweDM0LCAweDEyLCAweEQwLCAweDRELCAweDRDLCAweDIxLCAweDExLCAweDhELCAweDA0LCAweDA0LCAweDEzLCAweDEwLAorMHg0OCwgMHg2MCwgMHgyMywgMHgwMCwgMHg4RCwgMHgwNCwgMHgwNCwgMHgxMiwgMHg5MCwgMHg0OCwgMHg0NCwgMHgyNCwgMHgwMCwKKzB4ODEsIDB4ODQsIDB4NzYsIDB4MDIsIDB4MUEsIDB4MDgsIDB4NDAsIDB4MjMsIDB4ODgsIDB4ODksIDB4ODAsIDB4MjQsIDB4MDIsCisweDUwLCAweDQ4LCAweDQwLCAweDQzLCAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFELCAweDM4LAorMHg4NiwgMHgwQSwgMHgxRiwgMHgwQSwgMHg0QywgMHgyOCwgMHgzMCwgMHgwMSwgMHhDMCwgMHg4NywgMHgwMiwgMHgxRiwgMHgwQSwKKzB4N0MsIDB4MDAsIDB4RjAsIDB4QTEsIDB4QzAsIDB4MDQsIDB4MDAsIDB4MUQsIDB4MEEsIDB4NEQsIDB4MjgsIDB4MzIsIDB4MDEsCisweEM0LCAweDA3LCAweDAwLCAweDFGLCAweDBBLCAweDRDLCAweDI4LCAweDMwLCAweEExLCAweDQwLCAweDA0LCAweDA4LCAweDE3LAorMHg0QSwgMHg1QywgMHgwMCwgMHg3MCwgMHgwMSwgMHhDMCwgMHgwNiwgMHgwMCwgMHgxNywgMHgwMCwgMHg1QywgMHgyOSwgMHgzMCwKKzB4QTEsIDB4QzAsIDB4NzcsIDB4ODAsIDB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MUQsIDB4QjIsIDB4MjUsCisweDAwLCAweDlGLCAweDQwLCAweEZDLCAweDIyLCAweEYwLCAweDg5LCAweEMwLCAweDJGLCAweDAyLCAweDlGLCAweDAwLCAweEZDLAorMHgyMiwgMHhGMCwgMHg4OSwgMHhDMCwgMHgyNywgMHgwMiwgMHg5RiwgMHg0OCwgMHhGQywgMHgyMiwgMHhGMCwgMHg4OSwgMHhDMiwKKzB4MjcsIDB4MDAsIDB4OUYsIDB4MDgsIDB4N0MsIDB4MjIsIDB4NzAsIDB4ODksIDB4QzAsIDB4M0IsIDB4MDAsIDB4OUYsIDB4MDgsCisweEZDLCAweDAyLCAweEYwLCAweDBBLCAweEMwLCAweDJGLCAweDAwLCAweEI3LCAweDgwLCAweERDLCAweDAyLCAweEYxLCAweDhGLAorMHhDMCwgMHg3NywgMHgyMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxQywgMHg4MCwgMHgyNywgMHgwMCwKKzB4OUYsIDB4MDgsIDB4RkMsIDB4MDIsIDB4MzAsIDB4MDksIDB4QzAsIDB4MkMsIDB4MDIsIDB4OTMsIDB4MDAsIDB4N0MsIDB4NTIsCisweEYwLCAweENCLCAweEMwLCAweDI3LCAweDAwLCAweEJGLCAweDAwLCAweEZDLCAweDIyLCAweEIwLCAweDQ5LCAweEMwLCAweDI3LAorMHgwMCwgMHhCRiwgMHgwQywgMHhGQywgMHgwMiwgMHhFMCwgMHgwQiwgMHhDMCwgMHgyRCwgMHgwMCwgMHhCMywgMHgwNCwgMHhEQywKKzB4MDIsIDB4QjAsIDB4MEIsIDB4QzAsIDB4MkEsIDB4NDAsIDB4QjMsIDB4MDAsIDB4QkMsIDB4MDMsIDB4MzAsIDB4MEIsIDB4QzAsCisweDc3LCAweDgwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAwLCAweDA3LCAweDAxLCAweDFELAorMHgwNCwgMHg3NCwgMHg0OSwgMHgxMCwgMHgwMSwgMHg0NCwgMHgxNCwgMHg0MiwgMHgwMSwgMHgxNCwgMHg3NCwgMHgwMCwgMHhEMCwKKzB4QzEsIDB4NEMsIDB4ODcsIDB4MTAsIDB4MUQsIDB4NTAsIDB4NzQsIDB4MjAsIDB4MTAsIDB4MDEsIDB4NDAsIDB4MDcsIDB4MDAsCisweDFELCAweDBDLCAweDc0LCAweDQ4LCAweEQwLCAweDAxLCAweDQ1LCAweDA3LCAweDAwLCAweDExLCAweDE0LCAweDc0LCAweDAwLAorMHhEMCwgMHgwNSwgMHg0MCwgMHgwNCwgMHgwMCwgMHgxMSwgMHgwMCwgMHg3NCwgMHgwMCwgMHgxMCwgMHgwMSwgMHg0MCwgMHg2MywKKzB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4MDAsIDB4MjEsIDB4MDUsIDB4OEQsIDB4MDQsCisweDM0LCAweEIyLCAweDE0LCAweDg4LCAweDQwLCAweDIwLCAweDAwLCAweDgxLCAweDA0LCAweDM2LCAweDAyLCAweEQwLCAweDQ4LAorMHg0OCwgMHgyMywgMHg4MiwgMHg4RCwgMHgwOCwgMHgzNCwgMHgwMiwgMHgxNCwgMHg4OCwgMHg2MCwgMHgyMywgMHgwMCwgMHg4RCwKKzB4MDQsIDB4MzQsIDB4MzIsIDB4RDAsIDB4ODgsIDB4NDAsIDB4MjcsIDB4MDAsIDB4ODEsIDB4MEMsIDB4MzYsIDB4MDIsIDB4NTIsCisweDA4LCAweDQwLCAweDIzLCAweDAwLCAweDgxLCAweDAwLCAweDE0LCAweDAyLCAweDE4LCAweDA4LCAweDQwLCAweDRCLCAweDgwLAorMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgyOCwgMHgyNSwgMHgwMCwgMHg5RCwgMHgwMCwgMHg3NCwKKzB4MTIsIDB4MTAsIDB4MDksIDB4NTAsIDB4MjQsIDB4MDEsIDB4OTEsIDB4MDAsIDB4NzQsIDB4MDIsIDB4RDAsIDB4MDksIDB4NDAsCisweDI3LCAweDAwLCAweDlELCAweDAwLCAweDc0LCAweDBCLCAweDEwLCAweDA5LCAweDQwLCAweDI3LCAweDAwLCAweERELCAweDAwLAorMHg3NCwgMHgwMiwgMHhEOCwgMHgwOSwgMHg0MCwgMHgyNywgMHgwMCwgMHg5MSwgMHgwMCwgMHg3NCwgMHgwMiwgMHhEMCwgMHgwOSwKKzB4NDAsIDB4MjcsIDB4MDQsIDB4OTEsIDB4MDIsIDB4NzAsIDB4MTIsIDB4MTksIDB4MDksIDB4NDAsIDB4NjMsIDB4MjAsIDB4MDQsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDIwLCAweDI0LCAweDAwLCAweDlGLCAweDAwLCAweDc4LCAweDA2LAorMHgzMCwgMHgwOSwgMHhDMCwgMHg2NCwgMHgwMCwgMHg5MywgMHgwMCwgMHg3QywgMHg0RSwgMHhGMCwgMHgwOSwgMHhDMCwgMHgyNywKKzB4MDAsIDB4OUYsIDB4MDAsIDB4N0MsIDB4MDIsIDB4QjIsIDB4MDksIDB4QzAsIDB4MjcsIDB4MDAsIDB4OUYsIDB4MDAsIDB4N0MsCisweDAyLCAweEYyLCAweDA5LCAweEMwLCAweDY3LCAweDQwLCAweDkzLCAweDAwLCAweDdDLCAweDQyLCAweEIwLCAweEI5LCAweEMwLAorMHgyNywgMHgwMCwgMHg5MywgMHgwMCwgMHg3QywgMHg0NiwgMHgzNCwgMHgxOSwgMHhDMCwgMHgxNywgMHgwMCwgMHgwQywgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTYsIDB4MDgsIDB4MjUsIDB4MDAsIDB4OUYsIDB4MDAsIDB4M0MsIDB4MDYsIDB4RjAsCisweDA4LCAweEMwLCAweDY3LCAweDAwLCAweDlDLCAweDAwLCAweDdDLCAweDEyLCAweEYwLCAweDA5LCAweEMxLCAweDI3LCAweDAwLAorMHg5RiwgMHgwMCwgMHg3QywgMHgyMiwgMHhGMCwgMHgwOSwgMHhDMCwgMHgyNywgMHgwMCwgMHg5RiwgMHgwMCwgMHg3QywgMHgwMiwKKzB4RjAsIDB4MDksIDB4QzEsIDB4MjcsIDB4MDIsIDB4OUYsIDB4QjAsIDB4N0MsIDB4NDIsIDB4RjAsIDB4MTksIDB4MDIsIDB4MjQsCisweDAxLCAweDlGLCAweDAwLCAweDdDLCAweDA2LCAweEYwLCAweDk5LCAweEMxLCAweDVCLCAweDIwLCAweDA0LCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwOCwgMHgwNSwgMHgwMCwgMHgxRiwgMHgwMCwgMHg3QywgMHgwOCwgMHhGMCwgMHgwMSwKKzB4QzAsIDB4QzcsIDB4MDAsIDB4MUYsIDB4MDAsIDB4NEMsIDB4MDgsIDB4MzAsIDB4MDEsIDB4QzAsIDB4MDQsIDB4MDAsIDB4MUYsCisweDAxLCAweDdDLCAweDMwLCAweEYwLCAweDAxLCAweEMwLCAweDA3LCAweDAwLCAweDFGLCAweDAxLCAweDVDLCAweDA0LCAweEYwLAorMHgwMSwgMHhDOCwgMHg4NiwgMHgwOSwgMHgxMywgMHgwOCwgMHg2RCwgMHgwOCwgMHhFMCwgMHg0MSwgMHhDMCwgMHg4NCwgMHgwMCwKKzB4MTcsIDB4NDAsIDB4NkMsIDB4MTAsIDB4MTAsIDB4QTEsIDB4QzIsIDB4NTAsIDB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDEwLCAweDAwLCAweDE0LCAweDAwLCAweDVELCAweDgwLCAweEY0LCAweDFELCAweDcwLCAweDA1LCAweDQwLAorMHg1RiwgMHgyMCwgMHg1RCwgMHgwMCwgMHg0QywgMHgwMSwgMHgxMCwgMHgyNywgMHg0MCwgMHgxNCwgMHgwMCwgMHg3RCwgMHgwMCwKKzB4RjQsIDB4MEQsIDB4RDAsIDB4MDUsIDB4NDAsIDB4MTcsIDB4MDAsIDB4N0QsIDB4MDEsIDB4QzQsIDB4MDUsIDB4NzAsIDB4MjcsCisweDQwLCAweDE4LCAweDAwLCAweDcxLCAweDgyLCAweEM0LCAweDE5LCAweEQwLCAweDE2LCAweDQxLCAweDE4LCAweDAxLCAweDcxLAorMHgxQiwgMHhFNCwgMHg0NSwgMHgxMCwgMHgwNywgMHg0MCwgMHg0MSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MTAsIDB4QTAsIDB4MzIsIDB4MDAsIDB4Q0QsIDB4MDAsIDB4MzQsIDB4MUYsIDB4NTgsIDB4MEMsIDB4NDAsIDB4NzcsCisweDAwLCAweEM5LCAweDAwLCAweDI1LCAweDAzLCAweDE0LCAweDJDLCAweDUwLCAweDMwLCAweDAwLCAweENELCAweDAxLCAweDc0LAorMHgwNywgMHhEMCwgMHgwQywgMHg0MCwgMHgzMywgMHgwMCwgMHhDRCwgMHgwMCwgMHgxNCwgMHgwMywgMHg1MCwgMHgxQywgMHg1MCwKKzB4QjAsIDB4NDIsIDB4QzEsIDB4MDAsIDB4MDQsIDB4MDMsIDB4RDAsIDB4MkMsIDB4NDAsIDB4NTAsIDB4NDAsIDB4QzUsIDB4MDIsCisweDY0LCAweDA3LCAweDk0LCAweDFDLCAweDQwLCAweDQwLCAweDAwLCAweDBBLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwNCwgMHg4MCwgMHgzOCwgMHgwMiwgMHhFRCwgMHgwOCwgMHhCNCwgMHgwMywgMHg1OCwgMHgwRSwgMHg0MCwgMHgzQiwgMHgwQywKKzB4RUQsIDB4MDUsIDB4MDQsIDB4MDcsIDB4MTAsIDB4MUUsIDB4NDEsIDB4MzgsIDB4MDAsIDB4NkQsIDB4MTAsIDB4QjQsIDB4MDMsCisweEQwLCAweDBFLCAweDQwLCAweDNCLCAweDAwLCAweEVELCAweDAzLCAweDg0LCAweDA5LCAweDUwLCAweDM2LCAweDQwLCAweDNDLAorMHgwMCwgMHhFMSwgMHgwMSwgMHg4NCwgMHgwMywgMHhEMCwgMHgwRiwgMHg0MCwgMHgxQywgMHgwMCwgMHhFMSwgMHgwMCwgMHhFNiwKKzB4ODIsIDB4OTAsIDB4MTYsIDB4NDAsIDB4MTEsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsCisweDE4LCAweDc4LCAweDAwLCAweEVGLCAweDExLCAweEJDLCAweDA1LCAweDcwLCAweDFFLCAweEMwLCAweDdCLCAweDAwLCAweEVGLAorMHg4NywgMHhBQywgMHg4NywgMHgzMCwgMHgxRiwgMHhDMCwgMHg3OCwgMHgwMCwgMHhFRCwgMHgyMSwgMHhCQywgMHgwNywgMHhGMCwKKzB4MUUsIDB4QzAsIDB4N0IsIDB4MDAsIDB4Q0YsIDB4ODEsIDB4OUMsIDB4MDcsIDB4NzgsIDB4MUYsIDB4QzAsIDB4NzgsIDB4MDAsCisweEMzLCAweDgxLCAweDhDLCAweDA3LCAweERBLCAweDBBLCAweEM0LCAweDU4LCAweDIwLCAweEU3LCAweDIxLCAweEFFLCAweDA3LAorMHhCMSwgMHgxQiwgMHhDNCwgMHg1MCwgMHg2MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHhCOCwKKzB4MzUsIDB4MDEsIDB4REYsIDB4MDYsIDB4N0UsIDB4MDEsIDB4NzAsIDB4MEQsIDB4QzAsIDB4MzcsIDB4MDAsIDB4REYsIDB4MTYsCisweDdDLCAweDAzLCAweEYwLCAweDBELCAweEMwLCAweDM3LCAweDAwLCAweERGLCAweDAwLCAweDdDLCAweDAzLCAweEYwLCAweDBELAorMHhDMCwgMHgzNywgMHgyMCwgMHhERiwgMHgwMCwgMHg3QywgMHgwMSwgMHg3MCwgMHgwNSwgMHhDMCwgMHgzMSwgMHgwMCwgMHg1RiwKKzB4MDAsIDB4NUMsIDB4MDMsIDB4RjgsIDB4MEMsIDB4QzAsIDB4MTcsIDB4MDAsIDB4REYsIDB4MDAsIDB4NzAsIDB4MDIsIDB4NzAsCisweDAxLCAweEMwLCAweDQzLCAweDYwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA2LCAweDIwLCAweEZELAorMHgwMiwgMHhGMywgMHgwMSwgMHhGQywgMHgyMywgMHhGMCwgMHgxRiwgMHhDMCwgMHg3RiwgMHgwMCwgMHhGMywgMHg4MSwgMHhGQywKKzB4MDcsIDB4RjAsIDB4MUYsIDB4QzAsIDB4N0YsIDB4MDIsIDB4RkYsIDB4MDEsIDB4Q0MsIDB4MDcsIDB4MzAsIDB4MUYsIDB4QzAsCisweDdGLCAweDAwLCAweEY3LCAweDAxLCAweENDLCAweDI3LCAweDM4LCAweDFGLCAweEMwLCAweDdGLCAweDAwLCAweDczLCAweDAxLAorMHg4QywgMHg4NywgMHhCOCwgMHg5NywgMHhDMCwgMHg1QywgMHgwMCwgMHhFRiwgMHgyMSwgMHhDQywgMHgwNSwgMHhGMCwgMHgxNywKKzB4QzAsIDB4MTgsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTUsIDB4MDAsIDB4MzksIDB4MDAsCisweEUxLCAweDAwLCAweEI0LCAweDAzLCAweEQ4LCAweDBFLCAweDQwLCAweDNCLCAweDAyLCAweEUxLCAweDAwLCAweEI0LCAweDAzLAorMHhEMCwgMHg4MiwgMHg0MCwgMHgzQiwgMHgwMCwgMHg3RCwgMHgwOCwgMHhDNCwgMHgwMywgMHgxMCwgMHgwRSwgMHg0MCwgMHgzQiwKKzB4MDAsIDB4N0QsIDB4MDQsIDB4ODQsIDB4MDEsIDB4MTQsIDB4NEUsIDB4NDAsIDB4M0IsIDB4MDEsIDB4M0IsIDB4MDAsIDB4ODUsCisweDQzLCAweDEwLCAweENFLCAweDQwLCAweDE4LCAweDAxLCAweEVELCAweDA4LCAweDk0LCAweDYyLCAweEQwLCAweDYyLCAweDQwLAorMHg1NCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHgzOSwgMHgwOCwgMHhFMSwKKzB4MDAsIDB4QjQsIDB4MjMsIDB4RDgsIDB4MEUsIDB4NDAsIDB4OUIsIDB4MDQsIDB4RTEsIDB4MDAsIDB4QjQsIDB4MjMsIDB4RDAsCisweDBFLCAweDQwLCAweDNCLCAweDg4LCAweDZELCAweDAwLCAweDg0LCAweDA5LCAweDEwLCAweDBFLCAweDQwLCAweDNCLCAweDAwLAorMHhFNSwgMHg4MCwgMHg5NCwgMHgwMywgMHgxOCwgMHgwQSwgMHg0QywgMHgzQiwgMHgxMCwgMHhFMSwgMHgwMCwgMHhCNCwgMHgwMywKKzB4OTAsIDB4MEYsIDB4NDQsIDB4ODksIDB4MTAsIDB4RUQsIDB4MDAsIDB4ODQsIDB4MDAsIDB4RDAsIDB4MEEsIDB4NjEsIDB4NjAsCisweDAyLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweDI4LCAweDM1LCAweDAwLCAweEMxLCAweDQwLAorMHgzNCwgMHgxQSwgMHhEMCwgMHgwQywgMHg0MCwgMHg2NywgMHhDMCwgMHhDMSwgMHgwMCwgMHgzNCwgMHgwMywgMHhEMCwgMHgwMCwKKzB4NDAsIDB4MzMsIDB4ODAsIDB4MEQsIDB4MDAsIDB4MDUsIDB4MDIsIDB4MTAsIDB4MEMsIDB4NDAsIDB4MzMsIDB4MTAsIDB4OEQsCisweDQwLCAweDQ0LCAweDAwLCAweDE4LCAweDA4LCAweDQwLCAweDMzLCAweDIwLCAweDAxLCAweDAwLCAweDI0LCAweDAzLCAweDEwLAorMHgyQywgMHg0MCwgMHg1MCwgMHgxMCwgMHhDRCwgMHgwMSwgMHgxNCwgMHgwQSwgMHhEOCwgMHgyMCwgMHg0MiwgMHgwOCwgMHgyMCwKKzB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTUsIDB4QTAsIDB4M0QsIDB4MDAsIDB4RjMsIDB4MDAsIDB4N0MsCisweDE2LCAweEQwLCAweDBELCAweEM0LCAweDQ3LCAweDAwLCAweEYzLCAweDAwLCAweDdDLCAweDBCLCAweEQwLCAweDAxLCAweEMwLAorMHgzNywgMHgwMCwgMHg5RiwgMHgwMCwgMHg0QywgMHgwNCwgMHgzMCwgMHgwRCwgMHhDMCwgMHgzNywgMHgwMCwgMHgxNywgMHgwMCwKKzB4NUMsIDB4MDIsIDB4MzAsIDB4MDksIDB4MDAsIDB4MzcsIDB4MDAsIDB4OTEsIDB4MDAsIDB4NkMsIDB4OEIsIDB4QjAsIDB4MkMsCisweEMxLCAweDUwLCAweDAxLCAweERGLCAweDAwLCAweDQwLCAweDA4LCAweEQwLCAweDg5LCAweEMwLCAweDc0LCAweDAwLCAweDA2LAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHgwOCwgMHgzNywgMHgwMCwgMHhERiwgMHgwMCwgMHg3QywgMHgwMiwKKzB4RjAsIDB4MEQsIDB4QzAsIDB4MDcsIDB4MDAsIDB4REYsIDB4MDAsIDB4N0MsIDB4NDMsIDB4RjAsIDB4MDEsIDB4QzAsIDB4MzMsCisweDAwLCAweDFGLCAweDAyLCAweDdDLCAweDIwLCAweEYwLCAweDBELCAweEM4LCAweDM3LCAweDAwLCAweDlGLCAweDAyLCAweDdDLAorMHgwQSwgMHhGMCwgMHgwOSwgMHhFMCwgMHhBNywgMHgwOCwgMHg5RiwgMHg0MiwgMHg1QywgMHg0MywgMHhGMiwgMHgwRCwgMHhEMCwKKzB4QjcsIDB4MDgsIDB4REYsIDB4MkEsIDB4N0MsIDB4MDgsIDB4RjAsIDB4MjksIDB4RDAsIDB4MTcsIDB4MjAsIDB4MEMsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDA4LCAweDNGLCAweDAwLCAweEYzLCAweDAwLCAweEZDLCAweDAwLCAweEYwLAorMHgwRiwgMHhDMCwgMHgyNywgMHgwMCwgMHhGMywgMHgwMCwgMHhGQywgMHgwMywgMHhGMCwgMHgwQiwgMHhDMCwgMHgzRiwgMHg0MCwKKzB4QjMsIDB4MDAsIDB4OUMsIDB4MDIsIDB4MzAsIDB4MEYsIDB4QzAsIDB4M0YsIDB4MDAsIDB4M0YsIDB4MDAsIDB4N0MsIDB4MDIsCisweEIwLCAweDAzLCAweEMwLCAweDNGLCAweDIwLCAweEFGLCAweDIwLCAweERDLCAweDAzLCAweDMwLCAweDBGLCAweEMxLCAweDFELAorMHgwMCwgMHhCNiwgMHgwMCwgMHhDQywgMHg0MiwgMHg4MCwgMHgwOSwgMHhDMCwgMHgwNywgMHgyMCwgMHgwQywgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4ODEsIDB4MjAsIDB4MzYsIDB4NDAsIDB4RDEsIDB4MDAsIDB4NzQsIDB4MDQsIDB4RDAsIDB4MEQsCisweDYwLCAweDY3LCAweDAwLCAweEQxLCAweDAwLCAweDc0LCAweDAzLCAweEQwLCAweDM5LCAweDQwLCAweDM3LCAweDAwLCAweDkxLAorMHgwMywgMHg1QywgMHgwNiwgMHgxMCwgMHgwRCwgMHg0MCwgMHgzNywgMHgwMCwgMHg5RCwgMHgwMSwgMHg3NCwgMHg0NiwgMHgxMCwKKzB4MTEsIDB4NDEsIDB4NjcsIDB4MDEsIDB4MTksIDB4MDEsIDB4MDQsIDB4MDYsIDB4QjAsIDB4M0QsIDB4NDAsIDB4NzQsIDB4MDEsCisweDAxLCAweDQ1LCAweDQ0LCAweDRFLCAweDkwLCAweDE5LCAweDQwLCAweDA3LCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMSwgMHhBMCwgMHgzNCwgMHgwMCwgMHhEMSwgMHgwMCwgMHg3NiwgMHgwNCwgMHhEMCwgMHgwRCwgMHg0QSwKKzB4NDcsIDB4MDQsIDB4RDEsIDB4MDAsIDB4NzQsIDB4MDMsIDB4RDAsIDB4MzksIDB4NDAsIDB4MzcsIDB4MDAsIDB4OTEsIDB4MTEsCisweDc0LCAweDA0LCAweDEwLCAweDBELCAweDQwLCAweDM3LCAweDAwLCAweDFELCAweDAxLCAweDc0LCAweDA0LCAweDEwLCAweDE5LAorMHg0MCwgMHg3NywgMHgwMCwgMHg5RCwgMHgwMywgMHg0MCwgMHg0NywgMHgxMCwgMHg4RCwgMHgwMSwgMHg1NSwgMHgwMCwgMHhENSwKKzB4ODEsIDB4NDQsIDB4ODQsIDB4OTAsIDB4MTEsIDB4NDgsIDB4MDcsIDB4MDAsIDB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDEwLCAweDAwLCAweDMwLCAweDAwLCAweEMxLCAweDAwLCAweDM0LCAweDA2LCAweEQwLCAweDBDLCAweDQwLCAweDAzLAorMHgwMCwgMHhDMSwgMHgwMCwgMHgzNCwgMHgwMywgMHhEMCwgMHgwMCwgMHg0MCwgMHgzMywgMHgwMCwgMHgwMSwgMHgwMCwgMHgxNCwKKzB4MDAsIDB4MTAsIDB4MEMsIDB4NDAsIDB4MzMsIDB4MDAsIDB4MEQsIDB4MDAsIDB4MzQsIDB4MDAsIDB4OTAsIDB4MDgsIDB4NjQsCisweDMzLCAweDAwLCAweDg5LCAweDAwLCAweDQ3LCAweDAxLCAweDkwLCAweDBDLCAweDQwLCAweDMwLCAweDA4LCAweEQ1LCAweDAwLAorMHgwNCwgMHgwMCwgMHg5MCwgMHgwMCwgMHg0NCwgMHg0MywgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MzgsIDB4M0EsIDB4MDAsIDB4RjMsIDB4MDAsIDB4N0MsIDB4MDAsIDB4RjAsIDB4MEQsIDB4NDAsIDB4MDcsIDB4MDAsCisweEYzLCAweDAwLCAweDdDLCAweDAzLCAweEYwLCAweDA5LCAweEMwLCAweDM3LCAweDAwLCAweDkzLCAweDAwLCAweDVDLCAweDAwLAorMHgzMCwgMHgwRCwgMHhDMCwgMHgzNywgMHgwMCwgMHgxRCwgMHgwMCwgMHg3QywgMHgwMiwgMHgzMCwgMHgwMSwgMHhDMCwgMHgzNywKKzB4MDAsIDB4OUYsIDB4MDAsIDB4NUMsIDB4MDMsIDB4MzAsIDB4MEQsIDB4QzAsIDB4MTUsIDB4MDgsIDB4RDcsIDB4MDAsIDB4NEQsCisweDgwLCAweEIwLCAweDA5LCAweEMwLCAweDA3LCAweDYwLCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LAorMHhCOCwgMHgzRiwgMHgwMCwgMHhGRiwgMHgwMCwgMHhGQywgMHgwMiwgMHhGMCwgMHgwRiwgMHhDNCwgMHgyRiwgMHgwMCwgMHhGRiwKKzB4MDAsIDB4RkMsIDB4MDMsIDB4RjIsIDB4MDMsIDB4QzAsIDB4M0YsIDB4MDAsIDB4QkYsIDB4MDAsIDB4REMsIDB4MDIsIDB4RjAsCisweDBGLCAweEMwLCAweDNGLCAweDAwLCAweEJGLCAweDAwLCAweEZDLCAweDAyLCAweDcwLCAweDAzLCAweEMwLCAweDFCLCAweDgwLAorMHgzRiwgMHgwMCwgMHhGQywgMHgwMSwgMHhEMCwgMHgwRSwgMHhDMCwgMHgzRiwgMHgwMCwgMHhGQiwgMHgwMCwgMHhGRSwgMHgwMiwKKzB4RjAsIDB4MEIsIDB4QzAsIDB4MTcsIDB4NDIsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4QTAsCisweDZGLCAweDAwLCAweEYzLCAweDAxLCAweEZDLCAweDQwLCAweEYwLCAweDAyLCAweEMwLCAweDJDLCAweDAwLCAweEIzLCAweDQwLAorMHhFQywgMHgwMiwgMHg3MCwgMHgxRiwgMHhDMCwgMHgyRiwgMHgwMCwgMHhGQiwgMHgxMCwgMHhGQywgMHgwMiwgMHgzMCwgMHgwMywKKzB4QzAsIDB4NjgsIDB4MDAsIDB4RkYsIDB4MDAsIDB4Q0MsIDB4MDcsIDB4QjAsIDB4MEYsIDB4QzAsIDB4M0UsIDB4MDksIDB4RkYsCisweDAxLCAweEFDLCAweDA3LCAweEYwLCAweDRGLCAweEMwLCAweDdCLCAweDAwLCAweEIzLCAweDAwLCAweENELCAweDAzLCAweDM0LAorMHgwRiwgMHhDMCwgMHgwRiwgMHgwMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHgwOCwgMHgyMSwKKzB4MDAsIDB4RDEsIDB4MTAsIDB4NUMsIDB4MDAsIDB4RDAsIDB4MTEsIDB4NDAsIDB4NkMsIDB4MDgsIDB4OTEsIDB4MEIsIDB4NTgsCisweDAwLCAweDEwLCAweDFELCAweEMwLCAweEE1LCAweDA2LCAweEMxLCAweDEyLCAweDc0LCAweDAyLCAweDEwLCAweDExLCAweEM4LAorMHg2NSwgMHgwMCwgMHhDRCwgMHgwMCwgMHg1NCwgMHgwNywgMHgxMCwgMHgwRCwgMHg0MCwgMHg3NCwgMHgxMiwgMHhERCwgMHgwMSwKKzB4NTQsIDB4MDcsIDB4RDIsIDB4QkQsIDB4NDAsIDB4NzcsIDB4NDAsIDB4OTEsIDB4MTAsIDB4NDQsIDB4MEIsIDB4MTAsIDB4MUQsCisweDAwLCAweDBGLCAweDIwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEzLCAweDIwLCAweDMzLCAweDAwLAorMHhDMSwgMHgwMCwgMHgzNCwgMHgwNCwgMHhEMCwgMHgxMCwgMHg0MCwgMHgyMCwgMHgwMCwgMHhEMSwgMHgwMCwgMHgwNCwgMHgwMCwKKzB4NTAsIDB4MEMsIDB4NDAsIDB4MjMsIDB4MDksIDB4QzEsIDB4ODQsIDB4MzQsIDB4MDIsIDB4MTIsIDB4MDAsIDB4NDAsIDB4MjAsCisweDAwLCAweEMxLCAweDAwLCAweDA0LCAweDAzLCAweDkwLCAweDBDLCAweDQwLCAweDMwLCAweDAwLCAweERELCAweDAwLCAweDA0LAorMHgwMywgMHg5MCwgMHgwQywgMHg0MCwgMHgzNSwgMHg4MCwgMHg5NSwgMHg4NCwgMHgwNCwgMHg3MCwgMHgxNCwgMHgwQywgMHg0MCwKKzB4NEYsIDB4ODAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4QTgsIDB4MzUsIDB4MDAsIDB4RDEsCisweDAwLCAweDc0LCAweDA0LCAweEQwLCAweDQxLCAweDQwLCAweDY0LCAweDQwLCAweEQxLCAweDA4LCAweDc0LCAweDQ0LCAweDEwLAorMHgwRCwgMHg0MCwgMHgyNywgMHg0MCwgMHhEMSwgMHgwMCwgMHg3NCwgMHgwNiwgMHgxMCwgMHgwMSwgMHg0MCwgMHgyNiwgMHgwMCwKKzB4REQsIDB4MDAsIDB4NTQsIDB4ODMsIDB4MTAsIDB4MEQsIDB4NDAsIDB4MzQsIDB4MDAsIDB4MUQsIDB4MDEsIDB4NTQsIDB4MTMsCisweEQwLCAweDBELCAweDQwLCAweDI3LCAweDQwLCAweEQ1LCAweDE4LCAweDQ0LCAweDAyLCAweDEwLCAweDBELCAweDQ4LCAweDBGLAorMHgyMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4OCwgMHgzNiwgMHgwMCwgMHhEMywgMHgwMCwKKzB4N0MsIDB4MDQsIDB4RjIsIDB4MTQsIDB4RDAsIDB4NjQsIDB4MDAsIDB4ODMsIDB4ODAsIDB4NEMsIDB4MEUsIDB4NzAsIDB4MEQsCisweEMwLCAweDI3LCAweDAwLCAweERCLCAweDAwLCAweDdDLCAweDFFLCAweDMwLCAweDE1LCAweEQwLCAweDI0LCAweDAwLCAweERGLAorMHgwMCwgMHgwQywgMHgwMywgMHhCMSwgMHgwRCwgMHhDMCwgMHgzNiwgMHgwMCwgMHhDRiwgMHg4MSwgMHg0QywgMHgwMywgMHhGMCwKKzB4MEQsIDB4QzAsIDB4MzMsIDB4MDAsIDB4ODcsIDB4MDMsIDB4NEMsIDB4MjcsIDB4MzAsIDB4MEQsIDB4QzAsIDB4MDMsIDB4MjAsCisweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA3LCAweDgwLCAweDNELCAweDAwLCAweEZGLCAweDAwLCAweERDLAorMHg0MCwgMHhGMCwgMHgwNywgMHhDMCwgMHgzRiwgMHgwOCwgMHhCRiwgMHgwMCwgMHg5QywgMHgwMiwgMHhEMCwgMHgwRiwgMHhDMCwKKzB4MjEsIDB4MDAsIDB4RkYsIDB4MDAsIDB4QkMsIDB4MDIsIDB4RjAsIDB4OTYsIDB4QzAsIDB4NkQsIDB4MDEsIDB4RUYsIDB4MDAsCisweEZDLCAweDAzLCAweEYwLCAweDBFLCAweEMwLCAweDNGLCAweDAwLCAweEZGLCAweDAwLCAweERDLCAweDA3LCAweEYwLCAweDBGLAorMHhDMCwgMHgzRiwgMHgwMCwgMHhGQiwgMHgwMSwgMHhGQywgMHgwMywgMHhGMCwgMHgwRCwgMHhDMCwgMHgxRiwgMHgwMCwgMHgwNiwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MEEsIDB4MDgsIDB4MzUsIDB4MDAsIDB4RDMsIDB4MDAsIDB4NzQsIDB4MDAsCisweDMwLCAweDg1LCAweEMwLCAweDI1LCAweDAwLCAweEQzLCAweDAwLCAweDdDLCAweDA4LCAweEYwLCAweDBELCAweEMwLCAweDM3LAorMHgwMCwgMHhERiwgMHgwMCwgMHg0QywgMHgzQSwgMHhEMCwgMHgwNSwgMHg0MCwgMHgyNCwgMHgyMCwgMHhEMywgMHgwOCwgMHg0RCwKKzB4MDMsIDB4RjAsIDB4MEQsIDB4QzAsIDB4MzQsIDB4MDAsIDB4RDMsIDB4MDAsIDB4N0MsIDB4MDIsIDB4NzAsIDB4MEQsIDB4QzAsCisweDM3LCAweDAwLCAweDkzLCAweDAwLCAweDRELCAweDAzLCAweEYwLCAweDBELCAweEMwLCAweDI4LCAweDIwLCAweDA0LCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMywgMHhBMCwgMHgzNCwgMHgwMCwgMHhENSwgMHgwNSwgMHg3NCwgMHgxNCwgMHgxMCwKKzB4MDcsIDB4QzAsIDB4QjIsIDB4MDAsIDB4RDEsIDB4MDAsIDB4NzQsIDB4MjgsIDB4RDAsIDB4MEQsIDB4NDAsIDB4MzcsIDB4MDAsCisweEYxLCAweDAwLCAweDdDLCAweDA2LCAweEQxLCAweDBELCAweDQzLCAweDI1LCAweDAwLCAweEY1LCAweDAwLCAweDU0LCAweDJGLAorMHhEMCwgMHgwRiwgMHg0MCwgMHg3QywgMHgwMCwgMHg1MSwgMHgxMSwgMHg3QywgMHgwMiwgMHgxMCwgMHgxRiwgMHg0MCwgMHgzNywKKzB4MDAsIDB4RDEsIDB4MDQsIDB4MkMsIDB4MkYsIDB4RDAsIDB4MEYsIDB4NTAsIDB4NEMsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDA3LCAweEEwLCAweDI2LCAweDAwLCAweEMxLCAweDAxLCAweDM0LCAweDBDLCAweDE4LCAweDEwLAorMHg0MCwgMHgyMCwgMHgwNCwgMHg4MSwgMHgwMCwgMHgzNCwgMHgwNiwgMHhEOCwgMHgwQywgMHg0MCwgMHgyMywgMHgwMCwgMHhDOSwKKzB4NDAsIDB4MTQsIDB4MEMsIDB4RDAsIDB4MDQsIDB4NzAsIDB4MjAsIDB4NDAsIDB4QzEsIDB4MDAsIDB4MDQsIDB4MDMsIDB4RDgsCisweDBDLCAweDQwLCAweDcxLCAweDAwLCAweEMxLCAweDAwLCAweDM0LCAweDAyLCAweDE4LCAweDFDLCAweDQwLCAweDMzLCAweDAwLAorMHg4OCwgMHg4MCwgMHgxNCwgMHgwNywgMHhEMCwgMHgwQywgMHg0MCwgMHgxQywgMHgwMCwgMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MEYsIDB4ODAsIDB4NjgsIDB4MDAsIDB4RTEsIDB4MDEsIDB4QjQsIDB4MjQsIDB4MTgsIDB4M0IsIDB4NDAsCisweDYyLCAweDAwLCAweEEwLCAweDAxLCAweEI0LCAweDQ1LCAweEQ4LCAweDFFLCAweDQyLCAweDZCLCAweDYwLCAweEUxLCAweDAzLAorMHhBNCwgMHgyNiwgMHhEMCwgMHgxNCwgMHg0MCwgMHg2RCwgMHgwMCwgMHhFNSwgMHgwMSwgMHg5NCwgMHgwNywgMHhEMCwgMHgxRSwKKzB4NDAsIDB4NzksIDB4MDAsIDB4RTEsIDB4MDEsIDB4RjQsIDB4MDYsIDB4MTAsIDB4MUUsIDB4NDAsIDB4N0YsIDB4NDAsIDB4NDksCisweDgxLCAweEI0LCAweDQ3LCAweEQwLCAweDFFLCAweDQwLCAweDdDLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgxMiwgMHgxMCwgMHgzMCwgMHgwOCwgMHhDMywgMHgwOCwgMHg3QywgMHgyMCwgMHgzMCwgMHgwMCwgMHg0MCwgMHhBMSwKKzB4NDAsIDB4QzMsIDB4MDAsIDB4M0MsIDB4MDMsIDB4RjAsIDB4MEMsIDB4QzAsIDB4MjMsIDB4MDAsIDB4Q0YsIDB4MDAsIDB4MUMsCisweDAzLCAweEYwLCAweDg0LCAweDQyLCAweDIwLCAweDAyLCAweEMzLCAweDAwLCAweDBDLCAweDQzLCAweEYwLCAweDBELCAweDQ4LAorMHgzMSwgMHg0NCwgMHhDMywgMHg4OCwgMHgzRSwgMHgwMiwgMHg3MSwgMHgwQywgMHhDMSwgMHgzMywgMHgwMCwgMHgwQiwgMHgwMCwKKzB4MUMsIDB4MDEsIDB4RjAsIDB4OEMsIDB4QzAsIDB4NDgsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAyLCAweEI4LCAweDNELCAweDAwLCAweEZGLCAweDAwLCAweEZDLCAweDIwLCAweEM0LCAweDhCLCAweEMwLCAweDFGLCAweDAyLAorMHhGRiwgMHgwMCwgMHhGQywgMHgyMywgMHhGMCwgMHgwRiwgMHhDMCwgMHgyRiwgMHgwMCwgMHhGNywgMHgxMCwgMHhGQywgMHgwMywKKzB4QTAsIDB4ODcsIDB4QzAsIDB4MkUsIDB4MTAsIDB4RkIsIDB4MDAsIDB4RUMsIDB4MDMsIDB4RjAsIDB4MEYsIDB4QzAsIDB4M0EsCisweDAyLCAweDdGLCAweDA4LCAweERDLCAweDIyLCAweEY0LCAweDhGLCAweEMwLCAweDJGLCAweDQyLCAweEY3LCAweDAwLCAweENFLAorMHgwMywgMHhGMCwgMHgwRiwgMHhDMCwgMHgwQiwgMHg2MCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwKKzB4QTAsIDB4MzcsIDB4MDAsIDB4REYsIDB4MDAsIDB4N0UsIDB4MDQsIDB4MzAsIDB4MDEsIDB4QzAsIDB4MkMsIDB4MDEsIDB4OTMsCisweDAwLCAweEVDLCAweDA3LCAweDMwLCAweDBELCAweEMwLCAweDI2LCAweDAwLCAweERGLCAweDAwLCAweDFDLCAweDAyLCAweDMwLAorMHgwNSwgMHhDMCwgMHgyNiwgMHgwMCwgMHhGRiwgMHgwMCwgMHg0QywgMHgwMywgMHhGMCwgMHg4RCwgMHhFMCwgMHgzNywgMHgwMCwKKzB4RDMsIDB4MDAsIDB4N0MsIDB4MDIsIDB4RjAsIDB4MUQsIDB4QzAsIDB4MzQsIDB4MDAsIDB4MTMsIDB4ODEsIDB4NEMsIDB4MDcsCisweDM0LCAweDBGLCAweEMwLCAweDU3LCAweDAwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEzLCAweDg4LAorMHgzOSwgMHgwMCwgMHhFRCwgMHgwMCwgMHhCNiwgMHgwMCwgMHgxMiwgMHg2MiwgMHhDMCwgMHgzOCwgMHgwNCwgMHhFMSwgMHgwMCwKKzB4RjQsIDB4MDMsIDB4MTAsIDB4MEUsIDB4NDAsIDB4MkIsIDB4MDAsIDB4RkIsIDB4MDEsIDB4ODQsIDB4MDIsIDB4MTAsIDB4MDYsCisweDQwLCAweDNCLCAweDAwLCAweEZELCAweDAxLCAweDg1LCAweDAzLCAweEQwLCAweDRFLCAweDQwLCAweDNCLCAweDAwLCAweEUxLAorMHg0MCwgMHhCNCwgMHgwMiwgMHhEMCwgMHgwRSwgMHg0MCwgMHgzOCwgMHgwMCwgMHhFMSwgMHgwMCwgMHhBRCwgMHgwMywgMHgxMCwKKzB4MUUsIDB4NDAsIDB4NEYsIDB4MjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4NzksCisweDAwLCAweEVELCAweDAxLCAweEI0LCAweDg2LCAweDEyLCAweDEzLCAweDQwLCAweDYwLCAweDAwLCAweEVELCAweDIxLCAweEI0LAorMHgwRiwgMHhEMCwgMHgxRSwgMHg0MCwgMHg3MywgMHgwMCwgMHhFNSwgMHgwNSwgMHhENCwgMHgwNywgMHhEOSwgMHgxNiwgMHg0MSwKKzB4NkIsIDB4MDAsIDB4RUQsIDB4MjEsIDB4QTQsIDB4MDcsIDB4NTAsIDB4MUUsIDB4NDAsIDB4NzIsIDB4MjAsIDB4RTEsIDB4MDMsCisweEI0LCAweDA2LCAweEQwLCAweDFDLCAweDQwLCAweDdFLCAweDAwLCAweDI1LCAweDAzLCAweDg0LCAweDA3LCAweDEwLCAweDFFLAorMHg0MCwgMHgwNywgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHgyOCwgMHg3MywgMHgwMiwKKzB4Q0QsIDB4MDAsIDB4MzQsIDB4MDMsIDB4MTAsIDB4NDgsIDB4MDYsIDB4NTIsIDB4MDAsIDB4QzksIDB4MDAsIDB4MzQsIDB4Q0YsCisweDkwLCAweDBDLCAweDQwLCAweDczLCAweDAwLCAweEM5LCAweDAwLCAweDA0LCAweDEzLCAweDkwLCAweDdDLCAweDQwLCAweDIzLAorMHgwMCwgMHhERCwgMHgwMCwgMHgyNCwgMHgwMywgMHhEMCwgMHgwQywgMHg0MCwgMHgzMywgMHgwMCwgMHg0OSwgMHgwMSwgMHgzNCwKKzB4MDIsIDB4RDAsIDB4MEMsIDB4NDAsIDB4NzAsIDB4MDAsIDB4QzUsIDB4MDQsIDB4MjQsIDB4NEIsIDB4MTAsIDB4MEMsIDB4NDAsCisweDRCLCAweDIwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE3LCAweEE4LCAweDU1LCAweDAwLCAweDVGLAorMHgwMCwgMHhGQywgMHg0OSwgMHgzNCwgMHg0NywgMHhEMCwgMHg1QywgMHg0MSwgMHg1RiwgMHgxMSwgMHhGQywgMHgwMSwgMHhGNCwKKzB4MDUsIDB4QzAsIDB4NTcsIDB4MDAsIDB4NTcsIDB4MDAsIDB4REMsIDB4MDEsIDB4RTAsIDB4MjcsIDB4RTAsIDB4MTcsIDB4MDAsCisweDVGLCAweDAwLCAweDZFLCAweDgxLCAweEYwLCAweDA1LCAweEMwLCAweDE3LCAweDAwLCAweDYzLCAweDAxLCAweDNDLCAweDE1LAorMHhGMiwgMHgwNSwgMHhGMCwgMHg1NCwgMHgwMSwgMHg3NywgMHgwMywgMHhDNCwgMHgxRCwgMHgzMCwgMHgwNSwgMHhDMCwgMHg1RiwKKzB4MjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4MDAsIDB4MDcsIDB4MDAsIDB4MUYsIDB4MDIsCisweDdDLCAweEMwLCAweEYwLCAweDAxLCAweEMwLCAweDg1LCAweDAwLCAweDE3LCAweDAwLCAweDdDLCAweDA4LCAweDcyLCAweDAxLAorMHhDMCwgMHgwNywgMHgwMiwgMHgxRiwgMHgwMiwgMHg3QywgMHgwMCwgMHg3NCwgMHgwMSwgMHhDMCwgMHgwNywgMHgwMiwgMHgxRiwKKzB4NDAsIDB4NUMsIDB4MDAsIDB4RjAsIDB4MDEsIDB4QzAsIDB4MDcsIDB4NDAsIDB4MTcsIDB4MDAsIDB4N0MsIDB4MDAsIDB4RjAsCisweDIxLCAweEUwLCAweDA3LCAweDQwLCAweDFBLCAweDAwLCAweDdDLCAweDA4LCAweEYwLCAweDAxLCAweEM4LCAweDRCLCAweDAwLAorMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHgyNywgMHgwMCwgMHg5MywgMHgwMiwgMHg3QywKKzB4MDIsIDB4RjAsIDB4MDgsIDB4QzAsIDB4MjAsIDB4MDAsIDB4ODMsIDB4MDMsIDB4NkMsIDB4MDYsIDB4RjAsIDB4MDksIDB4QzAsCisweDIzLCAweDQwLCAweDkxLCAweDAwLCAweDA0LCAweDI2LCAweDM0LCAweDA5LCAweDAwLCAweDI3LCAweDAwLCAweDlGLCAweDAwLAorMHg2OCwgMHgwNiwgMHhEMCwgMHgwOSwgMHhFMCwgMHhFNywgMHgwOCwgMHg5MywgMHg0NSwgMHg0QywgMHgwNiwgMHgzMiwgMHgwOSwKKzB4QzAsIDB4MjcsIDB4MDgsIDB4OTMsIDB4MDAsIDB4N0MsIDB4MjIsIDB4RjAsIDB4MDksIDB4QzAsIDB4NDMsIDB4MjAsIDB4MEMsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDIwLCAweDIyLCAweDQwLCAweDkxLCAweDAxLCAweDc0LCAweDgyLAorMHhEMCwgMHgwOSwgMHg0MCwgMHhBNCwgMHgwNCwgMHg5MSwgMHgwMSwgMHg0NCwgMHgzNiwgMHhEMCwgMHgwOSwgMHg0MCwgMHgyNywKKzB4MDAsIDB4OTUsIDB4MTIsIDB4NkMsIDB4MEEsIDB4MTAsIDB4MTksIDB4NDIsIDB4MjcsIDB4MDAsIDB4OUQsIDB4MjAsIDB4NDQsCisweDA2LCAweEYwLCAweDA5LCAweDQwLCAweDYzLCAweDAxLCAweDlCLCAweDAxLCAweDQ0LCAweDA2LCAweEIwLCAweDI5LCAweDQ0LAorMHgyMywgMHg0MCwgMHg5MywgMHgwRSwgMHg1QywgMHgxRSwgMHhEMCwgMHgwOSwgMHg0MCwgMHgwNywgMHgwMCwgMHgwOCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4QTAsIDB4MjQsIDB4MjAsIDB4OTEsIDB4MDAsIDB4NTQsIDB4MDYsIDB4RDIsCisweDA5LCAweDQwLCAweDI0LCAweDAwLCAweDkxLCAweDAwLCAweDY0LCAweDAyLCAweEQwLCAweDA5LCAweDQwLCAweDI1LCAweDAwLAorMHg4RCwgMHgwMSwgMHg3NCwgMHgwMiwgMHg1MCwgMHg4OSwgMHg2NCwgMHgyNywgMHgwMCwgMHg5RCwgMHgwMCwgMHg3NSwgMHgxMiwKKzB4RDIsIDB4MDksIDB4MDAsIDB4MjcsIDB4ODAsIDB4OTEsIDB4MDAsIDB4NDUsIDB4MTIsIDB4NTAsIDB4ODksIDB4NDEsIDB4MjcsCisweDAwLCAweDk5LCAweDAwLCAweDc0LCAweDAyLCAweEQyLCAweDA5LCAweDQ0LCAweDYzLCAweDAwLCAweDAyLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgyMiwgMHgyNCwgMHgwMCwgMHg4MSwgMHgwMCwgMHgzNCwgMHgxMiwgMHhEMCwgMHg0OCwKKzB4NTAsIDB4MjAsIDB4MDEsIDB4ODEsIDB4ODQsIDB4MDQsIDB4MDIsIDB4RDgsIDB4MDgsIDB4NDAsIDB4MjMsIDB4MDEsIDB4ODksCisweDA0LCAweDM0LCAweDEzLCAweDAwLCAweDQ4LCAweDYwLCAweDIzLCAweDIwLCAweDhELCAweDA0LCAweDE0LCAweDAyLCAweDUwLAorMHhDOCwgMHg0MCwgMHgyMywgMHgwMSwgMHg4OSwgMHgwMCwgMHgwNCwgMHgwMiwgMHhEMCwgMHgwOCwgMHg0MCwgMHgyNywgMHgwMCwKKzB4ODEsIDB4MDQsIDB4MzQsIDB4MTIsIDB4RDAsIDB4NDgsIDB4NDgsIDB4NDMsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDFELCAweEIwLCAweDg2LCAweDAyLCAweDUzLCAweDBBLCAweDFDLCAweDI4LCAweEYwLCAweDA1LCAweDUwLAorMHgwNCwgMHg0MCwgMHgxMywgMHgwMCwgMHg2QywgMHgwOCwgMHhGMCwgMHgwMSwgMHhDNCwgMHg4NywgMHgwMiwgMHgxRCwgMHgwQSwKKzB4N0MsIDB4MjgsIDB4NTAsIDB4MDEsIDB4QzAsIDB4MDcsIDB4MDAsIDB4MUQsIDB4MEEsIDB4N0MsIDB4ODAsIDB4QzIsIDB4NjEsCisweDQwLCAweDA3LCAweDA1LCAweDEzLCAweDAwLCAweDRDLCAweDAwLCAweDcwLCAweDAxLCAweEMwLCAweDA3LCAweDAwLCAweDFCLAorMHg4QSwgMHgzOCwgMHgyOCwgMHhGMCwgMHgwMSwgMHhDMCwgMHg3NywgMHhDMCwgMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MTksIDB4QjgsIDB4MkYsIDB4MDAsIDB4OUYsIDB4MDAsIDB4RkMsIDB4MjIsIDB4RjIsIDB4OEEsIDB4RDAsIDB4MkYsCisweDAyLCAweEJGLCAweDA4LCAweEZDLCAweDYyLCAweEYwLCAweDA5LCAweEMwLCAweDJGLCAweDAyLCAweDk3LCAweDA4LCAweEVDLAorMHgyMiwgMHhGMiwgMHg4QiwgMHhDMCwgMHgyRiwgMHgwMCwgMHg5QiwgMHgwOCwgMHg2QywgMHgwMiwgMHhGMCwgMHgyOSwgMHhDQSwKKzB4MjcsIDB4MDAsIDB4RkYsIDB4MDAsIDB4RkMsIDB4MDIsIDB4QjAsIDB4ODksIDB4QzIsIDB4MkIsIDB4MDAsIDB4QTcsIDB4MDgsCisweERDLCAweDIyLCAweEYwLCAweDg5LCAweEMwLCAweDY3LCAweDYwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgxOSwgMHhBMCwgMHgyNywgMHgwMCwgMHhCRiwgMHgwOCwgMHhGQywgMHgwMiwgMHgzMCwgMHgwQiwgMHhDMCwgMHgyQywgMHgwMCwKKzB4QkYsIDB4MDQsIDB4RkMsIDB4NTIsIDB4QjAsIDB4MEIsIDB4QzAsIDB4MjcsIDB4NDAsIDB4QkIsIDB4MDAsIDB4QzgsIDB4MjIsCisweDM0LCAweDRCLCAweEMwLCAweDI0LCAweDAwLCAweEJGLCAweDBDLCAweERELCAweDAyLCAweEIwLCAweDE5LCAweEMwLCAweDZGLAorMHgwMCwgMHhCMywgMHgwMCwgMHhGQywgMHgwMiwgMHhGMCwgMHg1QiwgMHhDMCwgMHgyMCwgMHgwMCwgMHhCMywgMHgwMCwgMHhDQywKKzB4MjIsIDB4MzAsIDB4NEIsIDB4QzAsIDB4NjcsIDB4MDAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MUMsCisweDA4LCAweDA3LCAweDAxLCAweDFELCAweDA0LCAweDM2LCAweEM5LCAweDEwLCAweDA1LCAweEUyLCAweDA0LCAweDAyLCAweDFELAorMHgwMCwgMHg3NCwgMHgxMCwgMHhEMCwgMHgwMSwgMHg0MCwgMHgwNywgMHgwMCwgMHgxMywgMHgwMCwgMHg1NCwgMHgyMCwgMHgxOCwKKzB4MDEsIDB4RTAsIDB4MDYsIDB4ODAsIDB4MEQsIDB4MEMsIDB4NDQsIDB4MDAsIDB4NTAsIDB4MTEsIDB4NDAsIDB4MDcsIDB4MDIsCisweDExLCAweDAwLCAweDc0LCAweDAwLCAweEQwLCAweEExLCAweDQwLCAweDA0LCAweDAwLCAweDExLCAweDEwLCAweDQ0LCAweDIwLAorMHgxMCwgMHgwMSwgMHg0MCwgMHg3MywgMHgyMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHhBMCwKKzB4MjMsIDB4MDUsIDB4OEQsIDB4MDQsIDB4MzQsIDB4QjIsIDB4MTAsIDB4ODgsIDB4NDAsIDB4MjAsIDB4MDAsIDB4OEQsIDB4MDgsCisweDM0LCAweDUyLCAweEQwLCAweDA4LCAweDQyLCAweDIzLCAweDAwLCAweDg1LCAweDAwLCAweDA0LCAweDAyLCAweDU0LCAweDg4LAorMHg0MiwgMHgyMiwgMHgwMCwgMHg4RCwgMHgwNCwgMHgxNCwgMHgwMiwgMHgxMCwgMHg2OCwgMHg0MSwgMHgyMywgMHgwMCwgMHg4MSwKKzB4MDAsIDB4MzQsIDB4MDIsIDB4RDAsIDB4MDgsIDB4NDAsIDB4MjYsIDB4MTAsIDB4ODUsIDB4NDgsIDB4MDQsIDB4MDcsIDB4MTQsCisweDg4LCAweDQwLCAweDRCLCAweDgwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweEE4LCAweDI1LAorMHgwMCwgMHg5RCwgMHgwMCwgMHg3NCwgMHgwNiwgMHgxNCwgMHgwOSwgMHg0MCwgMHgyNiwgMHgwNCwgMHg5RCwgMHgwMSwgMHg3NCwKKzB4MDIsIDB4RDAsIDB4MDksIDB4NDAsIDB4MjcsIDB4MDAsIDB4ODksIDB4MDAsIDB4NTQsIDB4NTIsIDB4MTAsIDB4MDksIDB4NDAsCisweDI2LCAweDAxLCAweDlELCAweDAwLCAweDQ0LCAweDAyLCAweDUyLCAweDA5LCAweDQwLCAweDI3LCAweDQwLCAweDkxLCAweDA4LAorMHg3NCwgMHgxMiwgMHhEMCwgMHgwRCwgMHg0MCwgMHg2NiwgMHg0MCwgMHg5NSwgMHgwNCwgMHgwNCwgMHgwNiwgMHgxMCwgMHgwOSwKKzB4NDAsIDB4NjMsIDB4MjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4QTgsIDB4MjcsIDB4MDAsCisweDlGLCAweDAwLCAweDc0LCAweDBFLCAweDMwLCAweDI5LCAweDUwLCAweEU0LCAweDAwLCAweDlGLCAweDAxLCAweDdDLCAweDQ2LAorMHhGMCwgMHgwOSwgMHhDMCwgMHg2NywgMHgwMCwgMHg5NywgMHgwMCwgMHg0QywgMHgwMiwgMHg1MCwgMHgwOSwgMHg0MSwgMHgyNiwKKzB4ODAsIDB4OUQsIDB4MDAsIDB4NUMsIDB4MDIsIDB4MzAsIDB4MDksIDB4QzAsIDB4MjcsIDB4MDAsIDB4OTIsIDB4MDMsIDB4N0MsCisweDA2LCAweEYyLCAweDA5LCAweEQwLCAweDIyLCAweDAwLCAweDk3LCAweDA3LCAweDRELCAweDAyLCAweDMwLCAweDA5LCAweEMwLAorMHgxNywgMHhBMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNiwgMHg4MCwgMHg2NSwgMHgwMiwgMHg5RiwKKzB4MTAsIDB4N0MsIDB4MDIsIDB4RjAsIDB4MDksIDB4QzAsIDB4MjUsIDB4MDUsIDB4OUYsIDB4MDAsIDB4N0MsIDB4NEUsIDB4RjAsCisweDA5LCAweEMwLCAweDY3LCAweDAyLCAweDk3LCAweDAwLCAweDdDLCAweDA2LCAweEYwLCAweDA5LCAweEMwLCAweDY3LCAweDAwLAorMHg5RiwgMHgwMCwgMHg3QywgMHgwMiwgMHg3MCwgMHgwOSwgMHg4MCwgMHgyMywgMHgwMCwgMHg5RiwgMHgwMCwgMHg3QywgMHgwNiwKKzB4RjAsIDB4MDgsIDB4QzAsIDB4MjUsIDB4MDAsIDB4OUIsIDB4MDAsIDB4N0MsIDB4MDIsIDB4RjAsIDB4MDksIDB4QzIsIDB4NUIsCisweDAwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDA4LCAweDA1LCAweDAwLCAweDFGLCAweDAwLAorMHg3QywgMHgxOCwgMHg5NCwgMHgzMSwgMHg1MCwgMHgwNiwgMHg0MCwgMHgxMywgMHgwMCwgMHg3QywgMHgyMCwgMHg3MCwgMHgwMSwKKzB4QzAsIDB4MDcsIDB4MDAsIDB4MUQsIDB4NDgsIDB4NzgsIDB4NDgsIDB4MzIsIDB4MjEsIDB4QzAsIDB4MDcsIDB4MDAsIDB4MUYsCisweDAwLCAweDRDLCAweDQwLCAweEYwLCAweDAxLCAweEMwLCAweDA3LCAweDAwLCAweDFCLCAweDAwLCAweDdDLCAweDAwLCAweEYwLAorMHg0MSwgMHhDMCwgMHgwNywgMHgwMCwgMHgwMywgMHgwMiwgMHg0QywgMHgwNCwgMHgzMCwgMHgwMSwgMHhDMCwgMHg1MCwgMHgyMCwKKzB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4ODAsIDB4MTQsIDB4MDAsIDB4N0QsIDB4MDQsIDB4RjQsCisweDAxLCAweDMwLCAweDQ2LCAweDQwLCAweDVDLCAweDAwLCAweDUxLCAweDExLCAweEY0LCAweDA5LCAweDcwLCAweDU1LCAweDQwLAorMHgxNywgMHgwMCwgMHg3RCwgMHgwMCwgMHhGNCwgMHgwOSwgMHgxMCwgMHgxNCwgMHg0MCwgMHgxNywgMHgwMCwgMHg1RCwgMHgwMCwKKzB4ODQsIDB4NDEsIDB4NzAsIDB4MDUsIDB4NDAsIDB4MUYsIDB4MDEsIDB4NUQsIDB4MDAsIDB4NzQsIDB4MDEsIDB4RDAsIDB4MjcsCisweDQwLCAweDE3LCAweDAwLCAweDcyLCAweDAwLCAweEM0LCAweDAxLCAweDE0LCAweDA1LCAweEMxLCAweDUyLCAweDAwLCAweDAyLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHhBMCwgMHgzMiwgMHgwMCwgMHhDRCwgMHgwMywgMHg3NCwgMHgwMywKKzB4MTAsIDB4MUMsIDB4NjAsIDB4QjAsIDB4MDAsIDB4QzEsIDB4MDAsIDB4MzQsIDB4MEIsIDB4NTgsIDB4MEMsIDB4NDAsIDB4MzcsCisweDAwLCAweDhELCAweDAxLCAweDc0LCAweDA5LCAweDEwLCAweDBDLCAweDQwLCAweDMzLCAweDAwLCAweERELCAweDAxLCAweDE0LAorMHg4RiwgMHhEMCwgMHgwQywgMHg0MCwgMHhGMywgMHgwMSwgMHg4OSwgMHgwMCwgMHgzNCwgMHgwMywgMHhEMCwgMHgyNCwgMHg0MCwKKzB4MzMsIDB4ODAsIDB4NDksIDB4MEQsIDB4MDQsIDB4MDIsIDB4MTIsIDB4MTgsIDB4MDAsIDB4NTAsIDB4MDAsIDB4MEEsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDgwLCAweDM4LCAweDAxLCAweEE5LCAweDAwLCAweEI0LCAweDE4LCAweDEwLAorMHgwMiwgMHg0MCwgMHg3MCwgMHgwNCwgMHhFMSwgMHgwMCwgMHhCNCwgMHgwMSwgMHg1MCwgMHgwRSwgMHg0MCwgMHgzQSwgMHgwMSwKKzB4MjksIDB4MDAsIDB4QTQsIDB4MDAsIDB4MTQsIDB4MEEsIDB4NDEsIDB4M0IsIDB4MDAsIDB4RUQsIDB4MDIsIDB4ODQsIDB4MDMsCisweDQwLCAweDRFLCAweDQwLCAweDJCLCAweDAwLCAweEFELCAweDAwLCAweEI0LCAweDAzLCAweEQwLCAweDA2LCAweDQxLCAweDNGLAorMHgwMCwgMHg2MSwgMHgwMCwgMHg4NCwgMHgwMiwgMHgxMCwgMHgxOCwgMHg0MCwgMHgxNiwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MTUsIDB4MTAsIDB4NzgsIDB4MDEsIDB4QUQsIDB4MDEsIDB4QkMsIDB4MEUsIDB4MzAsIDB4MTQsCisweEQwLCAweDc4LCAweDAwLCAweEUzLCAweDQxLCAweEJFLCAweDA3LCAweDcwLCAweDFFLCAweEMwLCAweDdCLCAweDAxLCAweDZELAorMHgwMSwgMHgzQywgMHgwNSwgMHgzMCwgMHgxQSwgMHhDMCwgMHg3QiwgMHgwMCwgMHhFRiwgMHgwMSwgMHg5RCwgMHgwNywgMHhEMCwKKzB4NUUsIDB4QzIsIDB4N0IsIDB4MDAsIDB4QUIsIDB4MDEsIDB4QjQsIDB4MDYsIDB4RjAsIDB4MTYsIDB4QzAsIDB4N0IsIDB4MDAsCisweEY5LCAweDAxLCAweDhELCAweDA3LCAweDMwLCAweDFBLCAweEM0LCAweDU0LCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgxMCwgMHhCOCwgMHhCNSwgMHgwMCwgMHhCRiwgMHgwMCwgMHg3QywgMHgwMCwgMHg3MCwgMHgwMSwgMHhDMCwKKzB4MTcsIDB4MDAsIDB4REYsIDB4MDAsIDB4N0UsIDB4MDMsIDB4QzAsIDB4MEQsIDB4QzAsIDB4NzcsIDB4MDAsIDB4NUYsIDB4MDAsCisweEZDLCAweDAwLCAweEYwLCAweDA5LCAweDgwLCAweDM3LCAweDAwLCAweERGLCAweDAyLCAweDdDLCAweDAzLCAweDcwLCAweDhELAorMHhDMCwgMHgyNywgMHgwMCwgMHhERiwgMHgwMCwgMHg3QywgMHgwMiwgMHhGMCwgMHgwNSwgMHhDMCwgMHgzNywgMHg0MCwgMHhERiwKKzB4MDAsIDB4M0MsIDB4MDAsIDB4RjQsIDB4MDksIDB4QzAsIDB4NDMsIDB4NjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAyLCAweEEwLCAweEZGLCAweDA0LCAweEIzLCAweDAxLCAweEZDLCAweDIzLCAweDM4LCAweDAzLCAweEMwLCAweDZDLAorMHgwMCwgMHhGMywgMHgwMSwgMHhGQywgMHgwNywgMHhGMCwgMHgxRiwgMHg0MCwgMHg3RiwgMHgwNiwgMHhGMywgMHgwMSwgMHhDQywKKzB4ODUsIDB4MzAsIDB4MUIsIDB4RTAsIDB4N0YsIDB4MDIsIDB4QUYsIDB4MDMsIDB4Q0MsIDB4MDYsIDB4RjAsIDB4MUYsIDB4QzAsCisweDRGLCAweDAwLCAweEJGLCAweDAxLCAweEZDLCAweDA3LCAweEYwLCAweDE2LCAweEMwLCAweDdDLCAweDQwLCAweEZCLCAweDgxLAorMHhGQywgMHgwNiwgMHgzMSwgMHgxQSwgMHhDMCwgMHgwOCwgMHgwMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MTUsIDB4ODgsIDB4M0QsIDB4MDAsIDB4QTEsIDB4MDAsIDB4QjQsIDB4MTMsIDB4MTgsIDB4NDIsIDB4MDAsIDB4MjgsIDB4NDAsCisweEUxLCAweDUwLCAweEI0LCAweDAxLCAweEQwLCAweDBFLCAweDQwLCAweDNGLCAweDAwLCAweDZGLCAweDAwLCAweDk0LCAweDAyLAorMHgxMCwgMHgwQSwgMHhDMCwgMHgzQiwgMHgwMCwgMHhFRCwgMHgyNCwgMHg4NCwgMHgwMywgMHhEMCwgMHg4RSwgMHg0MCwgMHgxQiwKKzB4MDAsIDB4QUQsIDB4MDAsIDB4QjQsIDB4MjMsIDB4RDAsIDB4MDYsIDB4QzAsIDB4MzgsIDB4MDAsIDB4RTEsIDB4MDAsIDB4QjQsCisweDAyLCAweDEwLCAweDBBLCAweDQwLCAweDU1LCAweDIwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LAorMHgwMCwgMHgzOSwgMHgwMCwgMHgyMSwgMHgwMCwgMHhCNCwgMHgyMiwgMHgxOCwgMHg4MywgMHg0MCwgMHgyMCwgMHgwMCwgMHhFOSwKKzB4MDgsIDB4QjQsIDB4MDMsIDB4RDAsIDB4MEUsIDB4NDAsIDB4M0IsIDB4NDAsIDB4NjEsIDB4MDAsIDB4MDQsIDB4MDEsIDB4OTAsCisweDBBLCAweDQwLCAweDNCLCAweDIwLCAweEFELCAweDQwLCAweEE0LCAweDAzLCAweEQwLCAweDBFLCAweDQwLCAweDJCLCAweDAwLAorMHhBRCwgMHgwMCwgMHhCNCwgMHgwMiwgMHhEMCwgMHgwNiwgMHg0MCwgMHgzRCwgMHgwMCwgMHhFMSwgMHgwMCwgMHgzNCwgMHgwQiwKKzB4MTAsIDB4MEEsIDB4NDAsIDB4MjAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTYsIDB4MjgsCisweDMzLCAweDAwLCAweDExLCAweDAwLCAweDM0LCAweDAyLCAweDEyLCAweDIwLCAweDQwLCAweDAwLCAweDAwLCAweEM5LCAweDAwLAorMHgzNCwgMHgyNiwgMHhEMCwgMHgwQywgMHg0MCwgMHgzMywgMHgwMCwgMHg0RCwgMHgwMCwgMHgxNCwgMHgwMCwgMHg5MCwgMHgyOCwKKzB4NDAsIDB4NzEsIDB4MDAsIDB4Q0QsIDB4MDAsIDB4MjQsIDB4MDMsIDB4RDAsIDB4MEMsIDB4NDAsIDB4MzMsIDB4MDAsIDB4Q0QsCisweDAyLCAweDI0LCAweDAyLCAweEQwLCAweDA0LCAweDQwLCAweDMwLCAweDEwLCAweDgxLCAweDAyLCAweDM0LCAweDAzLCAweDExLAorMHgwOCwgMHg0MCwgMHgxOSwgMHgyMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxRCwgMHhBOCwgMHgzRCwKKzB4NDAsIDB4OTMsIDB4MDAsIDB4RkMsIDB4MDMsIDB4MTQsIDB4MjEsIDB4QzAsIDB4RTQsIDB4MDIsIDB4REIsIDB4MDEsIDB4NzQsCisweDJBLCAweEYwLCAweDBDLCAweEMwLCAweDNGLCAweDAwLCAweDkzLCAweDAwLCAweDRDLCAweDAxLCAweEI0LCAweDA5LCAweDQwLAorMHgzNywgMHgwMCwgMHg5RiwgMHgwMCwgMHg2RCwgMHgwMSwgMHhGMCwgMHgwRiwgMHhDMCwgMHgzNywgMHgwMCwgMHg4RiwgMHgxMywKKzB4N0MsIDB4MDIsIDB4RjAsIDB4MDQsIDB4QzAsIDB4MzQsIDB4MDAsIDB4NTMsIDB4MEIsIDB4N0MsIDB4ODIsIDB4MzAsIDB4MEQsCisweEMwLCAweDU0LCAweDIwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDM3LCAweDAwLAorMHg5RiwgMHgwMCwgMHg3QywgMHgyMCwgMHhGMCwgMHgwMCwgMHhEMCwgMHhFNywgMHgxMCwgMHhENywgMHgwMCwgMHg3QywgMHg4MCwKKzB4RjAsIDB4MEQsIDB4QzAsIDB4MzcsIDB4MDAsIDB4MTcsIDB4MDAsIDB4M0MsIDB4NDAsIDB4NzAsIDB4MDksIDB4QzAsIDB4MzcsCisweDAyLCAweDlGLCAweDAwLCAweDVDLCAweDgzLCAweEYyLCAweDBELCAweEMwLCAweDI3LCAweDAwLCAweERGLCAweDAwLCAweDdDLAorMHgwMiwgMHhGMCwgMHgwNSwgMHhDMCwgMHg3NSwgMHgwMCwgMHg0NywgMHg4MSwgMHg3QywgMHgwMiwgMHhGMCwgMHgwRCwgMHhDMCwKKzB4MjcsIDB4MDAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDgsIDB4M0YsIDB4MDAsIDB4QkYsCisweDAwLCAweDhDLCAweDIzLCAweEIwLCAweDAzLCAweEQxLCAweDI4LCAweDAwLCAweEIzLCAweDA1LCAweEZDLCAweDAwLCAweEYwLAorMHgwRiwgMHhDMCwgMHgzOCwgMHgwMCwgMHg2QiwgMHgwMCwgMHhDQywgMHgwMCwgMHhCMCwgMHg4QiwgMHhFMSwgMHgzRiwgMHgwMCwKKzB4QkYsIDB4MDAsIDB4Q0MsIDB4MDEsIDB4RjAsIDB4MEYsIDB4QzAsIDB4NEYsIDB4MDAsIDB4QkYsIDB4MTQsIDB4REMsIDB4MEYsCisweEYwLCAweDBGLCAweEMwLCAweDNDLCAweDAwLCAweEYzLCAweDAwLCAweDhDLCAweDIyLCAweDEwLCAweDlGLCAweEMwLCAweDA3LAorMHgyMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgyMCwgMHgzNiwgMHgwMCwgMHg5RCwgMHgwMSwKKzB4NDQsIDB4MDQsIDB4OTAsIDB4MTEsIDB4NTgsIDB4NDQsIDB4MDQsIDB4OTEsIDB4MDAsIDB4NzYsIDB4MDQsIDB4RDAsIDB4MEQsCisweEUwLCAweDM2LCAweDAwLCAweDUxLCAweDAwLCAweDQ0LCAweDA0LCAweDEwLCAweDA5LCAweEMwLCAweDM2LCAweDAwLCAweDlELAorMHgwMCwgMHg2QywgMHg0NywgMHhEMCwgMHgwRCwgMHg0MCwgMHg5NywgMHgwMiwgMHhERCwgMHgwMSwgMHg2QywgMHgwNywgMHhEMCwKKzB4M0QsIDB4QzAsIDB4MzIsIDB4MDAsIDB4RDEsIDB4MDEsIDB4NDQsIDB4MDQsIDB4MTAsIDB4MUQsIDB4QzIsIDB4MjUsIDB4MDAsCisweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweEEwLCAweDM0LCAweDEwLCAweDlELCAweDAxLCAweDQ0LAorMHgwMywgMHg5MCwgMHgxMSwgMHg0MCwgMHg0NiwgMHg0MCwgMHhEMSwgMHgwMCwgMHg3NCwgMHgwRSwgMHhEMSwgMHgxOSwgMHg0MiwKKzB4MzQsIDB4MDAsIDB4RDksIDB4MDAsIDB4NDQsIDB4MDUsIDB4OUEsIDB4MDksIDB4NDAsIDB4MzcsIDB4MjAsIDB4OEQsIDB4MDgsCisweDQ2LCAweDA3LCAweEQwLCAweDBELCAweDQyLCAweDE3LCAweDA0LCAweDlELCAweDAwLCAweDU0LCAweDAyLCAweEQwLCAweDFELAorMHg0MCwgMHgzNCwgMHgwMCwgMHhEMSwgMHgwMSwgMHg0MCwgMHgwMiwgMHg1MCwgMHgwOSwgMHg0MCwgMHgwNywgMHgwMCwgMHgwMiwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MjAsIDB4MzAsIDB4MDAsIDB4OEQsIDB4MDAsIDB4MDQsIDB4MDMsCisweDkwLCAweDEwLCAweDQwLCAweDAyLCAweDAwLCAweEMxLCAweDAwLCAweDM0LCAweDAwLCAweEQyLCAweDA4LCAweDQwLCAweDMyLAorMHgwMCwgMHg0MSwgMHgwMCwgMHgwNCwgMHgwMiwgMHgxMCwgMHgwOCwgMHg2MCwgMHgzMSwgMHgwMCwgMHg4RCwgMHgwMCwgMHgwNSwKKzB4MDMsIDB4RDgsIDB4MEMsIDB4NDAsIDB4MDMsIDB4MDAsIDB4REQsIDB4MDAsIDB4MDQsIDB4MDIsIDB4RDAsIDB4MEMsIDB4NDgsCisweDM2LCAweDAwLCAweEMxLCAweDAwLCAweDA0LCAweDAyLCAweDUwLCAweDA4LCAweDQwLCAweDQxLCAweDgwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHhCMCwgMHgzRSwgMHgwMCwgMHgxRiwgMHgwMCwgMHgwNSwgMHgwMywgMHhCMCwKKzB4MDEsIDB4QzAsIDB4MDYsIDB4MDAsIDB4RDMsIDB4MDAsIDB4NzQsIDB4MDIsIDB4RjAsIDB4MDksIDB4NDAsIDB4MzQsIDB4MDAsCisweDRCLCAweDAwLCAweDRDLCAweDAwLCAweEIwLCAweDA5LCAweDQ0LCAweDM3LCAweDAwLCAweEJGLCAweDAwLCAweDQ0LCAweDAzLAorMHhGMCwgMHgwRCwgMHhDMCwgMHgwNywgMHgwMCwgMHg5RiwgMHgwMCwgMHg1NCwgMHgwMywgMHhGMCwgMHgwRCwgMHhDMCwgMHgzNCwKKzB4MDAsIDB4RDMsIDB4MDAsIDB4NEQsIDB4MDIsIDB4NzAsIDB4MDksIDB4QzAsIDB4MDcsIDB4QzAsIDB4MEEsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDA1LCAweEI4LCAweDNGLCAweDAwLCAweDNGLCAweDAwLCAweEZDLCAweDAzLCAweDc4LCAweDAyLAorMHhDMCwgMHgwRCwgMHgwMCwgMHhGRiwgMHg0MCwgMHhGNiwgMHgwMiwgMHhGMCwgMHgwQiwgMHhDMCwgMHgzRiwgMHgwMCwgMHg3RiwKKzB4MDAsIDB4RkQsIDB4MDAsIDB4RjAsIDB4MEIsIDB4QzgsIDB4M0UsIDB4MDAsIDB4QkYsIDB4MDAsIDB4RkMsIDB4MDMsIDB4RjAsCisweDBGLCAweEMwLCAweDFGLCAweDAwLCAweEZGLCAweDAwLCAweEZDLCAweDAzLCAweEYwLCAweDBCLCAweEMwLCAweDNCLCAweDAwLAorMHhGRiwgMHgwMCwgMHhGQywgMHgwMiwgMHhCMCwgMHgwQiwgMHhDMCwgMHgxNSwgMHg2MCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDMsIDB4QTAsIDB4N0YsIDB4MDIsIDB4RjMsIDB4MDEsIDB4RkMsIDB4MjcsIDB4RjAsIDB4MUYsIDB4QzAsCisweDdGLCAweDAwLCAweEYzLCAweDAxLCAweEZDLCAweDA3LCAweEYwLCAweDFGLCAweEMwLCAweDdGLCAweDAwLCAweEZGLCAweDA5LAorMHhDQywgMHgwNywgMHhGMCwgMHgzRiwgMHhDMCwgMHg3QywgMHgwMiwgMHhGRiwgMHgyMSwgMHhDQywgMHgwNywgMHgzMCwgMHg5RiwKKzB4QzAsIDB4NzgsIDB4MDAsIDB4RjMsIDB4MDEsIDB4RkMsIDB4MjIsIDB4RjAsIDB4M0YsIDB4QzAsIDB4NUUsIDB4MTAsIDB4QkIsCisweDAxLCAweEVDLCAweDg0LCAweDM4LCAweDBCLCAweEMwLCAweDBDLCAweDAwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMSwgMHgwMCwgMHgwNywgMHgwMCwgMHgxMSwgMHgwMSwgMHg3NCwgMHgxMCwgMHhEMSwgMHgwMSwgMHg0MCwgMHg0NywKKzB4MDAsIDB4MTEsIDB4MDQsIDB4NzQsIDB4MDQsIDB4RDAsIDB4MTEsIDB4NDAsIDB4NDcsIDB4MDAsIDB4MUQsIDB4MDQsIDB4NDQsCisweDg0LCAweEQwLCAweDAxLCAweDQ4LCAweDA0LCAweDAxLCAweDFELCAweDAxLCAweDQ0LCAweDA0LCAweDEyLCAweDQxLCAweDQwLAorMHg0NCwgMHg0MCwgMHgxMSwgMHgwMSwgMHg3NCwgMHgzOCwgMHhEMCwgMHgwRCwgMHg0MCwgMHg1NSwgMHgwMCwgMHhEMSwgMHgwMSwKKzB4NTQsIDB4MDMsIDB4QjAsIDB4MDEsIDB4NDAsIDB4MEQsIDB4NjAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDExLCAweEEwLCAweDMzLCAweDExLCAweEMxLCAweDAwLCAweDM0LCAweDgzLCAweEQwLCAweDRDLCAweDQxLCAweDM3LCAweDAwLAorMHhDMSwgMHgxMCwgMHgzNCwgMHgwMywgMHhEMCwgMHgwQywgMHg0MCwgMHgzMywgMHgwMCwgMHhERCwgMHgwMCwgMHgwNCwgMHgwMywKKzB4RDAsIDB4NEQsIDB4NDAsIDB4MzAsIDB4MDEsIDB4RDUsIDB4QTAsIDB4NjQsIDB4ODMsIDB4MTAsIDB4NEMsIDB4NDAsIDB4MzUsCisweDAwLCAweEM5LCAweDAwLCAweDM0LCAweDEwLCAweEQwLCAweDRDLCAweDQwLCAweDMwLCAweDYwLCAweEQ5LCAweDQwLCAweDI0LAorMHgwMSwgMHgxMCwgMHgwOCwgMHg0NCwgMHg0QywgMHg4MCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywKKzB4QTgsIDB4MDUsIDB4NDAsIDB4MTEsIDB4MDAsIDB4NzQsIDB4MDAsIDB4RDIsIDB4MDEsIDB4NDAsIDB4MDcsIDB4MDAsIDB4MTEsCisweDAwLCAweDc0LCAweDAwLCAweEQxLCAweDAxLCAweDQwLCAweDA3LCAweDAwLCAweDFELCAweDAwLCAweDQ0LCAweDAwLCAweEQwLAorMHgwMSwgMHg0OCwgMHgwNCwgMHgwMCwgMHgxRCwgMHgwMCwgMHg2NCwgMHgwMCwgMHgxMCwgMHgwMSwgMHg0MCwgMHgwNCwgMHgyMCwKKzB4MTksIDB4MDAsIDB4NzQsIDB4MEMsIDB4RDAsIDB4MUMsIDB4NDAsIDB4NzUsIDB4MDAsIDB4RDEsIDB4MDEsIDB4NTQsIDB4MEIsCisweDE1LCAweDE5LCAweDQxLCAweDBELCAweDAwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweEEwLAorMHgzNywgMHgwMCwgMHhEMywgMHgwMCwgMHg3QywgMHgwMywgMHhGMCwgMHgwRCwgMHhDMCwgMHgzMywgMHgwMCwgMHhEMywgMHgwMCwKKzB4N0MsIDB4MDMsIDB4RDAsIDB4MEQsIDB4QzAsIDB4MzcsIDB4MDAsIDB4Q0YsIDB4MDAsIDB4NEMsIDB4MDMsIDB4RjAsIDB4MEQsCisweEQwLCAweDM0LCAweDAwLCAweEQ3LCAweDAwLCAweDZDLCAweDAzLCAweDMwLCAweDBELCAweEQwLCAweDM0LCAweDAwLCAweERCLAorMHgwMCwgMHg3QywgMHgwRSwgMHhFMCwgMHgxRCwgMHhDMCwgMHhDMCwgMHgwNCwgMHhDQiwgMHgwMSwgMHg2QywgMHgwNCwgMHgxMCwKKzB4MTksIDB4QzAsIDB4MjAsIDB4MjAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4ODgsIDB4MEQsCisweDAwLCAweDNGLCAweDAwLCAweEZDLCAweDAwLCAweEYwLCAweDAzLCAweDQwLCAweDBGLCAweDAwLCAweDNGLCAweDAwLCAweEZDLAorMHgwMCwgMHhGMCwgMHgwMywgMHhDMCwgMHgwRiwgMHgwMCwgMHgzRiwgMHgwMCwgMHhGQywgMHgwMCwgMHhGMCwgMHgwMywgMHhDNCwKKzB4MEYsIDB4MDAsIDB4M0YsIDB4MDAsIDB4REMsIDB4MDAsIDB4RjEsIDB4MDMsIDB4QzgsIDB4MEYsIDB4MDAsIDB4MzcsIDB4NDAsCisweDdDLCAweDQyLCAweEYwLCAweDA3LCAweEMyLCAweDFGLCAweDAwLCAweEZGLCAweDAwLCAweEVDLCAweEE0LCAweEYwLCAweDAwLAorMHhDMCwgMHgxRiwgMHgwMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHgwOCwgMHg3NSwgMHgwMSwKKzB4REYsIDB4MDAsIDB4N0MsIDB4MDMsIDB4MzAsIDB4MEQsIDB4RDAsIDB4NzQsIDB4MDAsIDB4RDMsIDB4MDAsIDB4NEQsIDB4MDMsCisweEYwLCAweDBELCAweEM4LCAweDM3LCAweDQwLCAweEQzLCAweDAwLCAweDdDLCAweDA3LCAweDMwLCAweDhELCAweEMxLCAweDM3LAorMHgxNCwgMHhERiwgMHgwMSwgMHg0QywgMHgyMywgMHhGMCwgMHgwRCwgMHhDMCwgMHg3NiwgMHgwNCwgMHhEMywgMHg0MCwgMHg2QywKKzB4MjgsIDB4MzAsIDB4MDksIDB4QzAsIDB4MzcsIDB4MDEsIDB4RDMsIDB4MDAsIDB4N0MsIDB4QzgsIDB4MjAsIDB4MjksIDB4QzYsCisweDI4LCAweDIwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEzLCAweEEwLCAweDA0LCAweDAwLCAweDFELAorMHgwRiwgMHg3NCwgMHgxMCwgMHgxMCwgMHgxMSwgMHg0MiwgMHgwNCwgMHgwMCwgMHgxMSwgMHgwQSwgMHg0NCwgMHgwMCwgMHhEMCwKKzB4MDEsIDB4NDAsIDB4MDcsIDB4MDAsIDB4MTEsIDB4MTMsIDB4NzQsIDB4MDAsIDB4MTAsIDB4MDAsIDB4NDAsIDB4QzcsIDB4MTAsCisweDBELCAweDAwLCAweDM0LCAweDA0LCAweEQwLCAweDMxLCAweDQwLCAweDgzLCAweDAwLCAweDExLCAweEE1LCAweDc0LCAweDA4LAorMHgxMCwgMHgwNSwgMHg0MCwgMHgzNywgMHgwMCwgMHhEMSwgMHgxMSwgMHg3NCwgMHgwRSwgMHhCMCwgMHgwOSwgMHg0MCwgMHg0QywKKzB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4MjAsIDB4QjQsIDB4MDAsIDB4Q0QsIDB4MDMsCisweDM0LCAweDQzLCAweDEwLCAweDZDLCAweDQwLCAweDMwLCAweDAwLCAweEMxLCAweDAxLCAweDA0LCAweDAzLCAweEQwLCAweDBDLAorMHg0MCwgMHg3MywgMHgwMCwgMHhDMSwgMHgwMCwgMHgxNCwgMHgwMywgMHgxMCwgMHgyQywgMHg0NCwgMHgzMywgMHgwMCwgMHhDRCwKKzB4MDAsIDB4MzQsIDB4MDcsIDB4RDAsIDB4N0QsIDB4NDAsIDB4MzMsIDB4ODAsIDB4QzEsIDB4ODEsIDB4MzQsIDB4MEUsIDB4RDAsCisweDBDLCAweDQwLCAweEIzLCAweDAwLCAweEMxLCAweDExLCAweDY0LCAweDAyLCAweDEwLCAweDAwLCAweDQwLCAweDBDLCAweDAwLAorMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHg0OCwgMHgwMCwgMHgyRCwgMHgwMSwgMHhGNCwKKzB4MDQsIDB4MTAsIDB4MTMsIDB4NDgsIDB4NEMsIDB4MDAsIDB4MjEsIDB4MDEsIDB4ODQsIDB4MDQsIDB4RDAsIDB4MTIsIDB4NDAsCisweDRCLCAweDA0LCAweDIxLCAweDAzLCAweEY0LCAweDA0LCAweDEwLCAweDEyLCAweDQwLCAweDRCLCAweDE0LCAweDJELCAweDAxLAorMHhCNCwgMHgwNCwgMHhEMCwgMHgxMiwgMHg0MCwgMHg0RiwgMHg0MCwgMHgyMSwgMHgwMSwgMHhCNCwgMHgwNSwgMHhEMCwgMHgxRSwKKzB4NDAsIDB4N0YsIDB4MDAsIDB4NjEsIDB4MDEsIDB4QjQsIDB4QTcsIDB4OTAsIDB4MTIsIDB4NDAsIDB4M0MsIDB4MjAsIDB4MDgsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDE4LCAweDMwLCAweDkyLCAweENGLCAweDAwLCAweDNDLCAweDAzLAorMHgzMCwgMHgwQywgMHhDMSwgMHgzMCwgMHgwMCwgMHhEMywgMHgxMCwgMHgwQywgMHgyMywgMHhGMCwgMHgwQywgMHhDMCwgMHgzMywKKzB4MDAsIDB4QzMsIDB4MDAsIDB4MUMsIDB4MDMsIDB4MzAsIDB4MEMsIDB4QzAsIDB4MzMsIDB4MDAsIDB4Q0YsIDB4MDAsIDB4MUMsCisweDAzLCAweEYwLCAweDBDLCAweEMxLCAweDMzLCAweDIwLCAweEMxLCAweDAwLCAweDNFLCAweDIzLCAweEY0LCAweDBDLCAweEMwLAorMHgzMywgMHg4MCwgMHhDMywgMHgwOCwgMHg3QywgMHg2MywgMHgzMCwgMHg4MCwgMHhEMCwgMHg0OCwgMHg0MCwgMHgwOCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MzgsIDB4MEQsIDB4MDAsIDB4M0YsIDB4MDAsIDB4QkMsIDB4MDAsIDB4RjAsCisweDAyLCAweEMwLCAweDBCLCAweDAwLCAweDNGLCAweDAwLCAweEZDLCAweDAwLCAweEYwLCAweDgzLCAweEMwLCAweDAzLCAweDAwLAorMHgxRiwgMHg0MCwgMHhCQywgMHgyMCwgMHhGMiwgMHgwMywgMHhDMCwgMHgwRiwgMHgwMCwgMHgxRiwgMHgwMCwgMHg3QywgMHgwMCwKKzB4RjAsIDB4ODEsIDB4QzAsIDB4MDcsIDB4MDIsIDB4MUYsIDB4NDEsIDB4RkMsIDB4QTMsIDB4MjAsIDB4OEYsIDB4QzgsIDB4M0IsCisweDAwLCAweDdGLCAweDAwLCAweEZDLCAweDIzLCAweEYwLCAweDA3LCAweEMwLCAweDBCLCAweDIwLCAweDA2LCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHhBMCwgMHgzNywgMHgwMCwgMHhERiwgMHgwMCwgMHg3QywgMHgwMywgMHhGMCwgMHgwRCwKKzB4QzAsIDB4MzcsIDB4MDAsIDB4REYsIDB4MDAsIDB4N0MsIDB4MDMsIDB4RjAsIDB4MUQsIDB4QzAsIDB4MzQsIDB4MDAsIDB4REYsCisweDAwLCAweDdDLCAweDAzLCAweEYwLCAweDFELCAweEQwLCAweDc0LCAweDQwLCAweEQzLCAweDAwLCAweDdDLCAweDAzLCAweEYwLAorMHgxRCwgMHhEMCwgMHgzMCwgMHgwMCwgMHhDMywgMHgwMCwgMHg0QywgMHgwMywgMHhGMCwgMHgwRCwgMHhDMCwgMHgzNywgMHg4MCwKKzB4REYsIDB4MDAsIDB4N0MsIDB4MDAsIDB4MzAsIDB4MDksIDB4QzAsIDB4NDMsIDB4MDAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDMyLCAweDg4LCAweDA5LCAweDAwLCAweDJELCAweDAwLCAweEI0LCAweDAwLCAweEQwLCAweDAyLCAweDQwLAorMHgwQiwgMHgyMCwgMHgyRCwgMHgwMCwgMHhCNCwgMHgwMCwgMHhEMCwgMHgwMiwgMHg0MCwgMHgwOCwgMHgwMCwgMHgyRCwgMHgwMCwKKzB4QjQsIDB4MDAsIDB4RDAsIDB4MDMsIDB4NDAsIDB4MEMsIDB4MDAsIDB4MjEsIDB4MDAsIDB4QjQsIDB4MDAsIDB4RDAsIDB4MDMsCisweDQwLCAweDA4LCAweDAwLCAweDIxLCAweDAwLCAweDg0LCAweDgzLCAweEQwLCAweDA2LCAweDQwLCAweDNCLCAweDIwLCAweDZELAorMHg0MCwgMHhGNCwgMHgwMSwgMHgxMCwgMHgwMiwgMHg0MCwgMHg0RiwgMHg2MCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDQsIDB4MDAsIDB4NzksIDB4MDAsIDB4RUQsIDB4MDEsIDB4QjQsIDB4MDcsIDB4RDAsIDB4MUUsIDB4NDAsIDB4N0IsCisweDAwLCAweEVELCAweDAxLCAweEI0LCAweDA3LCAweEQwLCAweDFGLCAweDQwLCAweDdBLCAweDAwLCAweEVELCAweDAxLCAweEI0LAorMHg4NywgMHhEMCwgMHgxRSwgMHg0MCwgMHg3QSwgMHgwMCwgMHhFMSwgMHgwMSwgMHhCNCwgMHgwNywgMHhEMCwgMHgxRSwgMHg0MCwKKzB4NzgsIDB4MDAsIDB4RjEsIDB4MDEsIDB4ODQsIDB4MDcsIDB4RDAsIDB4MUUsIDB4NDAsIDB4N0IsIDB4MjAsIDB4RUQsIDB4NTEsCisweEI0LCAweDg3LCAweDEwLCAweDFFLCAweDQxLCAweDEzLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgzNiwgMHgyOCwgMHgwMywgMHgwMCwgMHgwRCwgMHgwMCwgMHgzNCwgMHgwMCwgMHhEMCwgMHgwMCwgMHg0MCwgMHgwMywgMHgwMCwKKzB4MEQsIDB4MDAsIDB4MzQsIDB4MDAsIDB4RDAsIDB4MDAsIDB4NDAsIDB4MDIsIDB4MTAsIDB4MUQsIDB4MjAsIDB4MzQsIDB4MDAsCisweEQwLCAweDAwLCAweDQwLCAweDAyLCAweDAwLCAweDAxLCAweDAwLCAweDM0LCAweDAwLCAweEQwLCAweDAwLCAweDQwLCAweDAwLAorMHgxMCwgMHgwMSwgMHgwMCwgMHgxNCwgMHg5QiwgMHhEMCwgMHgwNCwgMHg0MiwgMHgzMywgMHgwMCwgMHg0RCwgMHgwMSwgMHgzNCwKKzB4MDMsIDB4MTEsIDB4MkMsIDB4NDEsIDB4NUIsIDB4MDAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTcsCisweEEwLCAweDE1LCAweDAwLCAweDRGLCAweDAwLCAweDdDLCAweDAxLCAweEYwLCAweDA1LCAweEM0LCAweDEzLCAweDAwLCAweDVGLAorMHgwMCwgMHg3QywgMHgwMSwgMHhGMCwgMHgwNSwgMHhEMCwgMHgxNiwgMHgwMCwgMHg1RiwgMHgwMCwgMHg3NCwgMHgwMSwgMHhGMCwKKzB4MDUsIDB4QzIsIDB4MTYsIDB4MDAsIDB4NTEsIDB4MDAsIDB4M0MsIDB4MDEsIDB4RjAsIDB4MDUsIDB4QzQsIDB4MTQsIDB4NDAsCisweDUzLCAweDAwLCAweENDLCAweDA5LCAweEQxLCAweDg3LCAweDQwLCAweDFGLCAweDAwLCAweDdELCAweDAxLCAweEJDLCAweDA1LAorMHgxNCwgMHgyNywgMHhDMCwgMHg1RiwgMHgyMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHgwOCwKKzB4MEQsIDB4MDgsIDB4M0YsIDB4MDAsIDB4RkMsIDB4MDAsIDB4RjIsIDB4MDMsIDB4QzQsIDB4MEYsIDB4MDAsIDB4M0YsIDB4MDAsCisweEZDLCAweDAwLCAweEYwLCAweDAzLCAweEMwLCAweDBELCAweDIwLCAweDNGLCAweDgwLCAweEZDLCAweDAwLCAweEIwLCAweDAzLAorMHhDMCwgMHgwRCwgMHgwMCwgMHgzRiwgMHg4MCwgMHhGQywgMHgwMCwgMHhGMiwgMHgwMywgMHhDNCwgMHgwRiwgMHgwMCwgMHgzRiwKKzB4MDAsIDB4NjUsIDB4MjAsIDB4RjAsIDB4ODEsIDB4QzAsIDB4MDcsIDB4MDIsIDB4MUYsIDB4MDAsIDB4N0MsIDB4MzgsIDB4RjAsCisweDAxLCAweEMwLCAweDRCLCAweDAwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDI1LAorMHgwMiwgMHg5RiwgMHgwMCwgMHg2QywgMHgwRSwgMHhGMCwgMHgxOSwgMHhDMCwgMHgyNywgMHgwMCwgMHg5MywgMHgwNSwgMHg3QywKKzB4MDIsIDB4MzAsIDB4MDksIDB4QzAsIDB4NjcsIDB4MDIsIDB4OUYsIDB4MDgsIDB4NkMsIDB4ODIsIDB4RjAsIDB4NDksIDB4QzAsCisweDY3LCAweDAwLCAweDlGLCAweDAwLCAweDdDLCAweDAyLCAweDMwLCAweDE5LCAweEM4LCAweDI3LCAweDAwLCAweDkzLCAweDA1LAorMHgwQywgMHgwMiwgMHgzMiwgMHgwOSwgMHhDMiwgMHgyNywgMHgwMiwgMHg5RCwgMHgwNCwgMHg1QywgMHgwMiwgMHgzNCwgMHgwOSwKKzB4QzAsIDB4NDMsIDB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MjAsIDB4RTYsIDB4MDAsCisweDlELCAweDAyLCAweDQ0LCAweDBFLCAweEQ4LCAweDI5LCAweDQwLCAweDI3LCAweDAwLCAweDlCLCAweDQzLCAweDM0LCAweDAyLAorMHgxMCwgMHgwOSwgMHg0MCwgMHgyNywgMHgwOCwgMHg5RiwgMHgwMiwgMHg0NCwgMHgwMiwgMHhFMCwgMHgyOSwgMHg0MCwgMHhBNywKKzB4MDAsIDB4OUQsIDB4MDAsIDB4NzQsIDB4MDIsIDB4QjAsIDB4MjksIDB4NDAsIDB4MjMsIDB4MTAsIDB4OEIsIDB4MDEsIDB4NDQsCisweDE2LCAweDEwLCAweDA5LCAweDQ4LCAweEE3LCAweDA0LCAweDhELCAweDAwLCAweDZDLCAweDRFLCAweDEwLCAweDA5LCAweDQ4LAorMHgwNywgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHg4MCwgMHgyNCwgMHgwMCwgMHhCRCwKKzB4NTAsIDB4RTYsIDB4MDIsIDB4RDAsIDB4OEIsIDB4NDEsIDB4NkYsIDB4MDgsIDB4QjUsIDB4NDAsIDB4RjQsIDB4MDIsIDB4MTAsCisweDBCLCAweDQwLCAweDJGLCAweDAwLCAweEJELCAweDEwLCAweEM0LCAweDA2LCAweEMwLCAweDBCLCAweDQwLCAweDJGLCAweDAxLAorMHhCRCwgMHgwOCwgMHhGNCwgMHgwNiwgMHgxMCwgMHg4QiwgMHg0MCwgMHgyRiwgMHgwMCwgMHhCMSwgMHgwMCwgMHg0NSwgMHgyMiwKKzB4MTgsIDB4MDksIDB4NDAsIDB4MjcsIDB4MDAsIDB4REMsIDB4MDAsIDB4NjQsIDB4MDYsIDB4MTAsIDB4MDksIDB4NDAsIDB4NzMsCisweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDI4LCAweDY4LCAweDAwLCAweEFELCAweDAwLAorMHg4NiwgMHg4NiwgMHhEMCwgMHgwQSwgMHg0MCwgMHgyQiwgMHg4MCwgMHhBMSwgMHgwMSwgMHhGNCwgMHgwMiwgMHgxMCwgMHgwQSwKKzB4NDAsIDB4MkIsIDB4MDAsIDB4QTUsIDB4MDAsIDB4ODQsIDB4MDIsIDB4NTAsIDB4MUEsIDB4NDAsIDB4NkIsIDB4MDAsIDB4QUQsCisweDAwLCAweEI0LCAweDAyLCAweDkwLCAweDFBLCAweDQwLCAweDJCLCAweDAwLCAweEI5LCAweDAwLCAweDA0LCAweDEyLCAweDE0LAorMHgwOCwgMHg0MCwgMHgyMywgMHgwMCwgMHhDRCwgMHgwMCwgMHg2NCwgMHgwMiwgMHgxMCwgMHg0OCwgMHg0MCwgMHg1MywgMHhBMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MUQsIDB4QjAsIDB4ODYsIDB4MDIsIDB4MUYsIDB4MDAsIDB4NkMsCisweDI4LCAweEQwLCAweEExLCAweEMwLCAweDA3LCAweDAwLCAweDE1LCAweDRBLCAweDdDLCAweDAwLCAweDM0LCAweDAxLCAweEMwLAorMHgwNywgMHgwMCwgMHgxRCwgMHgwQSwgMHg0RCwgMHgwMCwgMHhEMCwgMHhBMSwgMHhDMCwgMHg4NywgMHgwMiwgMHgxRiwgMHgwMCwKKzB4N0MsIDB4MDAsIDB4MzAsIDB4QTEsIDB4NDAsIDB4MDcsIDB4MDAsIDB4MzMsIDB4MDAsIDB4NEMsIDB4MjgsIDB4MzAsIDB4QTEsCisweEMwLCAweDA3LCAweDgwLCAweDFGLCAweDAwLCAweDdDLCAweDI4LCAweDM5LCAweEExLCAweEMwLCAweDc3LCAweEMwLCAweDBBLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxRCwgMHhBOCwgMHgyNywgMHgwMCwgMHg5RiwgMHgwMCwgMHg3QywgMHg4MiwKKzB4RjAsIDB4MDksIDB4QzAsIDB4MjcsIDB4NDgsIDB4OUYsIDB4MDAsIDB4N0MsIDB4MDIsIDB4RjEsIDB4MDgsIDB4QzAsIDB4MjcsCisweDA4LCAweDlGLCAweDQwLCAweDVDLCAweDAyLCAweEYwLCAweDA5LCAweEMwLCAweDI3LCAweDAwLCAweDlGLCAweDAwLCAweDdDLAorMHgwMiwgMHhGMiwgMHgwOSwgMHhDMCwgMHgyNywgMHgwMCwgMHg5RiwgMHgwMCwgMHhGQywgMHhBMiwgMHhGMCwgMHgwQiwgMHhDMCwKKzB4MkYsIDB4MDAsIDB4QkYsIDB4MjAsIDB4RkMsIDB4MDIsIDB4RjAsIDB4OEYsIDB4QzAsIDB4NjcsIDB4MjAsIDB4MEUsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFDLCAweEEwLCAweDJGLCAweDAwLCAweEIzLCAweDAwLCAweEZDLCAweDAyLCAweDMwLAorMHgwQiwgMHhDMiwgMHgyQywgMHgwMCwgMHhCRiwgMHgwMCwgMHg3QywgMHgwMiwgMHhGMCwgMHgwOSwgMHhDMCwgMHgyRiwgMHgyOCwKKzB4QkYsIDB4MDAsIDB4REMsIDB4MDIsIDB4MzAsIDB4MEIsIDB4QzAsIDB4MkYsIDB4MDAsIDB4QkYsIDB4MDAsIDB4REMsIDB4MDIsCisweEYwLCAweDBCLCAweDgwLCAweDJGLCAweDEwLCAweEJGLCAweDAwLCAweERDLCAweDUyLCAweDMwLCAweDg4LCAweEMyLCAweDI5LAorMHgwMCwgMHhCMywgMHgwMCwgMHhEQywgMHgwMiwgMHhGMCwgMHgwOSwgMHhDMCwgMHg2NywgMHgwMCwgMHgwRSwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDAsIDB4MDcsIDB4MDEsIDB4MTEsIDB4MDAsIDB4NzQsIDB4NDAsIDB4MTIsIDB4MDEsCisweDQ5LCAweDA0LCAweDAwLCAweDFELCAweDE0LCAweDc0LCAweDAwLCAweEQwLCAweDAxLCAweDQ4LCAweDA3LCAweDIwLCAweDE3LAorMHgxMCwgMHg3NCwgMHgwMCwgMHg1MCwgMHg0MSwgMHg0MSwgMHgwNywgMHgwMSwgMHgxRCwgMHg4MCwgMHg3NCwgMHgwMCwgMHhEMCwKKzB4MDEsIDB4NDksIDB4MDcsIDB4MDAsIDB4MUQsIDB4MDAsIDB4NzQsIDB4MTAsIDB4MTAsIDB4NDEsIDB4NDQsIDB4MDcsIDB4MDAsCisweDExLCAweDAwLCAweDVDLCAweDgxLCAweEQyLCAweDQxLCAweDQ1LCAweDczLCAweDYwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgxMiwgMHgwMCwgMHgyMSwgMHgwNSwgMHg4MSwgMHg2MCwgMHgxNCwgMHgxMiwgMHgxNCwgMHgwOCwgMHg0MCwKKzB4MjAsIDB4MDAsIDB4OEQsIDB4MDQsIDB4MzQsIDB4MDIsIDB4RDAsIDB4MDgsIDB4NDAsIDB4MzMsIDB4MDAsIDB4OEQsIDB4MDAsCisweDE0LCAweDAzLCAweDEwLCAweDQ4LCAweDQwLCAweDMzLCAweDg1LCAweENELCAweDAwLCAweDE0LCAweDAzLCAweEQwLCAweDA4LAorMHg0MCwgMHgyMywgMHgwMCwgMHg4RCwgMHgwMCwgMHgxNCwgMHg1MiwgMHhEMCwgMHg0OCwgMHg0MCwgMHgyMSwgMHgwMCwgMHg4OSwKKzB4MDAsIDB4MTQsIDB4MDIsIDB4RDksIDB4NDgsIDB4NDAsIDB4NEIsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDE4LCAweDA4LCAweDI1LCAweDAwLCAweDkxLCAweDAwLCAweDc0LCAweDAzLCAweDEwLCAweDBELCAweDUwLCAweDI0LAorMHgxMCwgMHg5RCwgMHgwMCwgMHg3NCwgMHgwMiwgMHhEMCwgMHgwOSwgMHg0MCwgMHgyNywgMHgwMCwgMHg5NSwgMHgwMCwgMHg3NCwKKzB4MDIsIDB4NTEsIDB4MDksIDB4NDAsIDB4MjcsIDB4MDAsIDB4OUQsIDB4MDAsIDB4NzQsIDB4MDIsIDB4RDAsIDB4MEQsIDB4NDAsCisweDI3LCAweDAwLCAweDlELCAweDAwLCAweDc0LCAweDA2LCAweEQwLCAweDg5LCAweDQwLCAweEU3LCAweDAwLCAweDk5LCAweDAxLAorMHg1MCwgMHgxMiwgMHhEMCwgMHgwOSwgMHg2MCwgMHg2MywgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDUsIDB4MjAsIDB4MjUsIDB4MDAsIDB4OTMsIDB4ODAsIDB4NUMsIDB4MDIsIDB4MzEsIDB4MDksIDB4QzIsIDB4MjQsIDB4MDAsCisweDlGLCAweDAwLCAweDdDLCAweDAyLCAweEYwLCAweDA5LCAweEUwLCAweDI3LCAweDAwLCAweDlGLCAweDQwLCAweDVDLCAweDAyLAorMHgzMCwgMHgwOSwgMHhDMCwgMHgyNywgMHgwMCwgMHg5RiwgMHgwMCwgMHg1QywgMHgwMiwgMHhGMCwgMHgwOSwgMHhDMCwgMHgyNywKKzB4MDAsIDB4OUYsIDB4ODAsIDB4NUMsIDB4MTIsIDB4QjQsIDB4MDksIDB4QzAsIDB4RTEsIDB4NDAsIDB4OUIsIDB4MDEsIDB4NTgsCisweDA2LCAweEYwLCAweDA5LCAweEM0LCAweDE3LCAweEEwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE2LAorMHgwOCwgMHgyNSwgMHg0MCwgMHg5RiwgMHgwMCwgMHg3QywgMHgwMiwgMHhGMywgMHgwOSwgMHg0MCwgMHgyNywgMHgxMCwgMHg5RiwKKzB4MDAsIDB4N0MsIDB4MDIsIDB4RjAsIDB4MDksIDB4ODAsIDB4MjcsIDB4MDAsIDB4OTYsIDB4MDAsIDB4NzAsIDB4MDIsIDB4NzAsCisweDA5LCAweEMwLCAweDI3LCAweDAwLCAweDlGLCAweDAwLCAweDdDLCAweDAyLCAweEYwLCAweDA5LCAweEMyLCAweDI3LCAweDA0LAorMHg5RiwgMHhBMCwgMHg3QywgMHgwMiwgMHgyMCwgMHgwOSwgMHhDMCwgMHgyNywgMHgwMCwgMHg5NiwgMHgwMCwgMHg1QywgMHg0MiwKKzB4RjEsIDB4NDksIDB4QzAsIDB4NEIsIDB4MDAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDgsCisweDA1LCAweDA2LCAweDFGLCAweDAxLCAweDZDLCAweDEwLCAweEYwLCAweDAxLCAweEMwLCAweDA0LCAweDAwLCAweDFGLCAweDAwLAorMHg0QywgMHgwMCwgMHhGMCwgMHgwMSwgMHhDMCwgMHgwNywgMHgwMCwgMHgxRiwgMHgwMCwgMHg3QywgMHgwMCwgMHhGMCwgMHgwMSwKKzB4QzMsIDB4MDQsIDB4MDAsIDB4MTMsIDB4MDAsIDB4N0MsIDB4MDAsIDB4RjAsIDB4MDEsIDB4QzAsIDB4MDcsIDB4MDgsIDB4MTMsCisweDAwLCAweDRDLCAweDAwLCAweEIwLCAweDAxLCAweEMwLCAweDA1LCAweDA4LCAweDE3LCAweDAwLCAweDZDLCAweDI4LCAweEYwLAorMHgyMSwgMHhDMCwgMHg0MywgMHgyMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHg1QywKKzB4MDAsIDB4N0QsIDB4MTEsIDB4QzQsIDB4MEQsIDB4NzIsIDB4NTcsIDB4NDAsIDB4MTQsIDB4MDQsIDB4N0YsIDB4NDEsIDB4NDQsCisweDAxLCAweEQwLCAweDA1LCAweDQwLCAweDE3LCAweDAwLCAweDdELCAweDIwLCAweDM0LCAweDAxLCAweDcyLCAweDA3LCAweEM5LAorMHgxRSwgMHgwMiwgMHg1MSwgMHgwMCwgMHg3NCwgMHgwMSwgMHg3MCwgMHhENywgMHgwMCwgMHg5RiwgMHgwNCwgMHg1MSwgMHgwMSwKKzB4QzQsIDB4MTUsIDB4MDAsIDB4MDUsIDB4NDAsIDB4MUMsIDB4MDAsIDB4NzEsIDB4MDUsIDB4RTQsIDB4MEQsIDB4RDAsIDB4MDUsCisweDQwLCAweDUzLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweEEwLCAweEY2LCAweDAwLAorMHg0RCwgMHgyMSwgMHg2NCwgMHgyRiwgMHg1MCwgMHg0RCwgMHg0MCwgMHgyMCwgMHgyMCwgMHhDRCwgMHgwNCwgMHgwNCwgMHgwMywKKzB4RDAsIDB4MEMsIDB4NDAsIDB4MjMsIDB4MDAsIDB4Q0QsIDB4MEQsIDB4MzQsIDB4MDIsIDB4RDAsIDB4MEMsIDB4NDAsIDB4QjAsCisweDAwLCAweDg5LCAweDAwLCAweDM0LCAweDAyLCAweDUwLCAweDJDLCAweDQwLCAweEYzLCAweDAwLCAweDgxLCAweDg5LCAweDQ0LAorMHgxMywgMHg5MSwgMHgwQywgMHg0MCwgMHgwMSwgMHgwMCwgMHg4NSwgMHgwMSwgMHgyNCwgMHgwRiwgMHhEMCwgMHgwQywgMHg0MiwKKzB4NTMsIDB4MDAsIDB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4ODAsIDB4MzgsIDB4MDAsIDB4RUQsCisweDAxLCAweDg2LCAweDAxLCAweDUwLCAweDBFLCAweDUwLCAweDM4LCAweDAwLCAweEY1LCAweDExLCAweDg0LCAweDAzLCAweEQwLAorMHgwRSwgMHg0MCwgMHgzQiwgMHgwMCwgMHhFRCwgMHgwMCwgMHhCNCwgMHgwMywgMHhEMCwgMHgxRiwgMHg0MCwgMHg1QSwgMHg0MCwKKzB4RTksIDB4MDAsIDB4QjQsIDB4MDMsIDB4NTAsIDB4MEUsIDB4NDAsIDB4NkIsIDB4NDAsIDB4RTEsIDB4MDEsIDB4QzYsIDB4MDMsCisweDEwLCAweDVGLCAweDQwLCAweDJDLCAweDA4LCAweDYxLCAweDAwLCAweEE0LCAweDAzLCAweEQyLCAweDRFLCAweDYwLCAweDA3LAorMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgxOCwgMHg3OCwgMHgwMCwgMHhFRiwgMHgwMSwKKzB4QUMsIDB4MDcsIDB4NzAsIDB4MUYsIDB4QzAsIDB4NzgsIDB4MjAsIDB4RUQsIDB4MDEsIDB4ODUsIDB4MDcsIDB4RjAsIDB4MUUsCisweEM2LCAweDdCLCAweDAwLCAweEVELCAweDAxLCAweEJDLCAweDA3LCAweEYwLCAweDFGLCAweEMwLCAweDdDLCAweDAwLCAweEVCLAorMHgwMSwgMHhCQywgMHgwNywgMHg3MCwgMHgxRSwgMHhDMCwgMHg3QiwgMHgwMCwgMHhFMywgMHgwMSwgMHhDQywgMHgwNSwgMHhCMCwKKzB4OUUsIDB4QzAsIDB4NzksIDB4MDAsIDB4NjUsIDB4NDEsIDB4QUMsIDB4MDQsIDB4RjAsIDB4NUUsIDB4QzAsIDB4NDcsIDB4NDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweEI4LCAweDM1LCAweDAwLCAweENGLCAweDAwLCAweDdDLAorMHgwMSwgMHg3MSwgMHgwRCwgMHhDNCwgMHgzNywgMHgwMCwgMHhDRiwgMHgwMCwgMHg3QywgMHgwMywgMHhGMCwgMHgwRCwgMHg0MCwKKzB4MzcsIDB4MDAsIDB4REYsIDB4NDAsIDB4N0MsIDB4MDMsIDB4NzAsIDB4MEQsIDB4QzAsIDB4MTcsIDB4MTAsIDB4RDcsIDB4ODAsCisweDdDLCAweDgzLCAweDcwLCAweDBELCAweEMwLCAweDIzLCAweDAwLCAweENGLCAweDAwLCAweDdDLCAweDAxLCAweEYwLCAweDhELAorMHhDMCwgMHgzNywgMHgwMCwgMHg1RiwgMHgwMCwgMHg3QywgMHgwMCwgMHhGMCwgMHg4RCwgMHhDMCwgMHg0MywgMHg2MCwgMHgwNiwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDYsIDB4MjAsIDB4NUQsIDB4MDAsIDB4RkYsIDB4MDEsIDB4Q0MsIDB4MTMsCisweEYwLCAweDVGLCAweEMwLCAweDdCLCAweDYyLCAweDczLCAweDQxLCAweEJDLCAweDA3LCAweDMwLCAweDFGLCAweEMwLCAweDdGLAorMHgwMCwgMHhGMywgMHgwMSwgMHhGQywgMHgyNywgMHhGMCwgMHgxNywgMHhDMCwgMHg3OCwgMHgwMCwgMHhGQiwgMHgwOSwgMHhFQywKKzB4MjcsIDB4MzAsIDB4MUUsIDB4QzAsIDB4NzgsIDB4MDAsIDB4RjMsIDB4MDAsIDB4RkMsIDB4MDcsIDB4RjAsIDB4MUYsIDB4QzAsCisweDRDLCAweDAwLCAweEZGLCAweDAxLCAweEZDLCAweDA3LCAweEYwLCAweDFGLCAweEMwLCAweDA4LCAweDAwLCAweDA2LCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwgMHgwMCwgMHgxOSwgMHgxNiwgMHhFRCwgMHgwMCwgMHg4NCwgMHgwMSwgMHhEMCwKKzB4MDYsIDB4NDAsIDB4M0IsIDB4MDYsIDB4NjUsIDB4MDAsIDB4QjQsIDB4MDMsIDB4MTAsIDB4OEUsIDB4NDAsIDB4M0IsIDB4MDIsCisweDYxLCAweDA4LCAweEI0LCAweDAzLCAweEQyLCAweDQ3LCAweDQwLCAweDM4LCAweDAwLCAweEUxLCAweDA4LCAweDg0LCAweDAzLAorMHgxMCwgMHgwRSwgMHg0MCwgMHgzOCwgMHgwNCwgMHhFNSwgMHgwOCwgMHhCNCwgMHgyOSwgMHhEMCwgMHgwRiwgMHg0MCwgMHgyOSwKKzB4MDIsIDB4NkQsIDB4MDAsIDB4QjQsIDB4MjIsIDB4RDAsIDB4MEUsIDB4QzAsIDB4NTYsIDB4NjAsIDB4MDQsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDk5LCAweDAwLCAweEZELCAweDAwLCAweDg0LCAweDIzLCAweEQwLCAweDRFLAorMHg0OCwgMHgzQiwgMHgxMiwgMHg2MCwgMHgwMCwgMHhGNCwgMHgwMywgMHgxMCwgMHgyRSwgMHg0MCwgMHgzRiwgMHgwMCwgMHhFMSwKKzB4MDAsIDB4QjQsIDB4MDMsIDB4QzEsIDB4MDYsIDB4NjAsIDB4OUMsIDB4MDAsIDB4RjEsIDB4ODAsIDB4QzYsIDB4MDMsIDB4MTAsCisweDg3LCAweDQwLCAweEI4LCAweDAwLCAweEUxLCAweDA4LCAweEI0LCAweDAzLCAweEQwLCAweDBFLCAweDQwLCAweDM4LCAweDAwLAorMHg2RCwgMHgwMCwgMHhCNCwgMHgwMiwgMHhEMCwgMHgwRSwgMHg0MCwgMHg2MCwgMHgwOCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDIsIDB4MjgsIDB4MDEsIDB4MDAsIDB4Q0QsIDB4MTIsIDB4NDQsIDB4MkMsIDB4RDAsIDB4QTgsIDB4NDAsCisweEIzLCAweDA0LCAweDExLCAweDAzLCAweDM0LCAweDBCLCAweDEwLCAweDBDLCAweDQwLCAweEIzLCAweDA0LCAweDkxLCAweDAzLAorMHgzNCwgMHgwQiwgMHg5MCwgMHgyMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHhDMSwgMHgwMiwgMHgwNCwgMHgwQiwgMHgxMCwgMHgwOCwKKzB4NDEsIDB4MzAsIDB4NDAsIDB4QzUsIDB4MDEsIDB4NzQsIDB4NDAsIDB4RDAsIDB4MUMsIDB4NDAsIDB4MzEsIDB4MTAsIDB4NEQsCisweDBBLCAweDMwLCAweDAyLCAweEMxLCAweDJELCAweDQ4LCAweDFBLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgxNSwgMHhBMCwgMHg2MSwgMHgwMCwgMHhDRiwgMHgwMCwgMHg0QywgMHgyMiwgMHhGMCwgMHgyMSwgMHhDMCwgMHhGNywKKzB4MDAsIDB4OTMsIDB4MTEsIDB4N0MsIDB4MEIsIDB4MzQsIDB4NUMsIDB4QzAsIDB4MzMsIDB4MDAsIDB4MTMsIDB4MDEsIDB4N0MsCisweDIzLCAweEYwLCAweDc5LCAweEQwLCAweDY0LCAweDAxLCAweEMzLCAweDA4LCAweDRDLCAweDIzLCAweDMwLCAweDUxLCAweEMwLAorMHgzNCwgMHgwMCwgMHhEMywgMHgwMCwgMHg3QywgMHgwNiwgMHhGMCwgMHg1RiwgMHhDMCwgMHgxMCwgMHgyMCwgMHhDRiwgMHgyMywKKzB4N0MsIDB4MDgsIDB4QzAsIDB4QkYsIDB4ODAsIDB4NTQsIDB4MjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDA1LCAweDA4LCAweDI3LCAweDIwLCAweERGLCAweDAxLCAweDdDLCAweDAyLCAweEYxLCAweDIxLCAweEM4LCAweDM3LCAweDAwLAorMHg5RiwgMHgwMiwgMHg3QywgMHgyMywgMHhGMSwgMHgwRCwgMHhDMCwgMHg3NywgMHgwMCwgMHgxRiwgMHgxQSwgMHg3QywgMHgwNywKKzB4RjAsIDB4MjksIDB4QzgsIDB4ODcsIDB4MDAsIDB4REYsIDB4MDEsIDB4N0MsIDB4MDcsIDB4RjAsIDB4MjEsIDB4QzAsIDB4ODcsCisweDAwLCAweERGLCAweDA4LCAweDdDLCAweDIyLCAweEYwLCAweDBELCAweEMwLCAweDM3LCAweDAyLCAweDVGLCAweDA0LCAweDdDLAorMHgzQSwgMHhGMSwgMHg4RCwgMHhDMCwgMHgyNywgMHgwMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwKKzB4MDgsIDB4MEYsIDB4MDAsIDB4RjMsIDB4MDAsIDB4Q0MsIDB4MDAsIDB4MzAsIDB4MDMsIDB4QzEsIDB4N0MsIDB4MDgsIDB4M0YsCisweDkwLCAweENDLCAweDQzLCAweEYwLCAweDBGLCAweEMwLCAweDNDLCAweDAwLCAweDMzLCAweDAwLCAweENDLCAweDA3LCAweDMwLAorMHgwMywgMHhDMSwgMHgyRiwgMHgwMCwgMHhGRiwgMHgwMCwgMHhDQywgMHgwNywgMHhGMCwgMHgwMywgMHhDMCwgMHgzRiwgMHgwMCwKKzB4RkYsIDB4MTIsIDB4RkMsIDB4MDAsIDB4MzAsIDB4MEYsIDB4QzEsIDB4N0YsIDB4MDEsIDB4NzMsIDB4MDEsIDB4Q0MsIDB4MDAsCisweEYxLCAweDBELCAweEMwLCAweDE0LCAweDIwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgxLCAweDIwLAorMHhFNiwgMHgwOSwgMHhEMCwgMHgwMSwgMHg0NCwgMHgwNCwgMHgxMiwgMHgzMCwgMHg0MiwgMHgzNCwgMHgwOCwgMHg5RCwgMHgwMywKKzB4NEMsIDB4MDMsIDB4RDAsIDB4MEQsIDB4NjAsIDB4MzQsIDB4MDAsIDB4MTEsIDB4MjUsIDB4MDQsIDB4MDcsIDB4MTIsIDB4MzksCisweDQwLCAweEM3LCAweDAwLCAweERELCAweDgwLCAweDZDLCAweDAzLCAweEQwLCAweDExLCAweDQwLCAweDg3LCAweDAwLCAweERELAorMHgwMSwgMHg3MCwgMHgwQywgMHgxMCwgMHgwRCwgMHg0MCwgMHgzNywgMHgwMCwgMHg1MSwgMHgwOCwgMHg3RCwgMHg0QywgMHhEMiwKKzB4MEQsIDB4NEMsIDB4MTQsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4QTAsIDB4NjYsCisweDAwLCAweEQxLCAweDAxLCAweDQ0LCAweDA2LCAweDk4LCAweDE5LCAweDQwLCAweDM2LCAweDAxLCAweDlELCAweDExLCAweDY0LAorMHgwMywgMHhEMCwgMHgwRCwgMHg0MCwgMHg3NCwgMHgwMCwgMHg5MCwgMHgwMSwgMHg0NCwgMHgyMywgMHgxMCwgMHgxOSwgMHg0MSwKKzB4NjcsIDB4MDQsIDB4REQsIDB4MDQsIDB4NTQsIDB4QTMsIDB4RDEsIDB4MTksIDB4NDAsIDB4MzcsIDB4MDQsIDB4REQsIDB4MDAsCisweDc0LCAweDA2LCAweDE4LCAweDBELCAweDQwLCAweDE3LCAweDAwLCAweEQxLCAweDAwLCAweDQ0LCAweDA0LCAweEQwLCAweDBELAorMHg1OCwgMHgwNCwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHgyNCwgMHgwMCwKKzB4OTEsIDB4MDEsIDB4MDQsIDB4MDIsIDB4OTQsIDB4MDEsIDB4NTAsIDB4MzIsIDB4MDAsIDB4OEQsIDB4MDAsIDB4MDQsIDB4MDMsCisweEQwLCAweDBELCAweDQwLCAweDM0LCAweDAwLCAweDAxLCAweDAwLCAweDQ1LCAweDAzLCAweDEwLCAweDA4LCAweDQwLCAweDIzLAorMHgwMCwgMHhDRCwgMHgwMCwgMHgyNCwgMHgwMywgMHhEMCwgMHgwOCwgMHg0OCwgMHgzMywgMHgwMCwgMHhDRCwgMHgwMCwgMHgzNCwKKzB4MDIsIDB4MTAsIDB4MEMsIDB4NDAsIDB4MzcsIDB4MDAsIDB4NTEsIDB4MDAsIDB4MjQsIDB4MDIsIDB4OTAsIDB4MEMsIDB4NDAsCisweDQwLCAweEEwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDA2LCAweDAwLCAweEQzLAorMHgwMCwgMHg0QywgMHgwMiwgMHhCMCwgMHgwOSwgMHhDNCwgMHgzNiwgMHgwMCwgMHgxRiwgMHgwMCwgMHg2RCwgMHgwMywgMHhGMCwKKzB4MEQsIDB4NDAsIDB4MzQsIDB4MDAsIDB4OTMsIDB4MDAsIDB4NEMsIDB4MDMsIDB4MzAsIDB4MDEsIDB4QzQsIDB4MjcsIDB4MDAsCisweERGLCAweDAwLCAweDVDLCAweDAzLCAweEYxLCAweDAxLCAweDQwLCAweDM3LCAweDAwLCAweERGLCAweDAwLCAweDdDLCAweDAyLAorMHgzNCwgMHgwRiwgMHhDMCwgMHgzNywgMHgwMCwgMHg1MywgMHgwMCwgMHg0QywgMHgwMCwgMHhGMCwgMHgwRCwgMHhDMCwgMHgwNCwKKzB4QzAsIDB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4OTgsIDB4MkYsIDB4MDAsIDB4QUYsIDB4MDAsCisweEY0LCAweDAyLCAweDcwLCAweDBCLCAweEM0LCAweDNELCAweDEwLCAweEJGLCAweDAwLCAweEZDLCAweDAzLCAweEYwLCAweDBGLAorMHg4MCwgMHgzQiwgMHgwMCwgMHhCRiwgMHgwMCwgMHhGQywgMHgwMywgMHhGMCwgMHgwQiwgMHhDMCwgMHgyRiwgMHgwMCwgMHhFRiwKKzB4MDAsIDB4QjgsIDB4MDMsIDB4RjAsIDB4MEIsIDB4QzgsIDB4M0YsIDB4MDAsIDB4RkYsIDB4MDAsIDB4RkMsIDB4MDIsIDB4RjAsCisweDBGLCAweEMwLCAweDNGLCAweDAwLCAweDdGLCAweDAwLCAweEZDLCAweDAyLCAweEY4LCAweDBGLCAweEMwLCAweDE3LCAweDI0LAorMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHhBMCwgMHgwQiwgMHg4MCwgMHgzMywgMHgwMCwgMHhGQywKKzB4MTAsIDB4MzAsIDB4MEYsIDB4QzAsIDB4M0MsIDB4MDAsIDB4RjMsIDB4MDAsIDB4Q0MsIDB4MjcsIDB4MzAsIDB4MDMsIDB4QzgsCisweDJDLCAweDA1LCAweEI1LCAweDAwLCAweENDLCAweDAyLCAweDMwLCAweDgzLCAweEMwLCAweDJGLCAweDAzLCAweDMzLCAweDAxLAorMHhDQywgMHgwMSwgMHhGMCwgMHgxQiwgMHhDMCwgMHgyRiwgMHgwMSwgMHgzRiwgMHgwMSwgMHhDQywgMHgyNiwgMHhCMCwgMHgwQiwKKzB4QzAsIDB4N0MsIDB4MDAsIDB4QkYsIDB4MTQsIDB4RkMsIDB4MjcsIDB4MzAsIDB4NEYsIDB4QzEsIDB4MEMsIDB4MDAsIDB4MEUsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDI3LCAweDEwLCAweDExLCAweDBBLCAweDc0LCAweDI4LAorMHgxMiwgMHg0RiwgMHg0MCwgMHg3QywgMHgxMCwgMHhENSwgMHgwMSwgMHgwNCwgMHgwMiwgMHgxMCwgMHgwMSwgMHg1MCwgMHhFNCwKKzB4MDgsIDB4OTEsIDB4MDgsIDB4NTQsIDB4MDIsIDB4MTAsIDB4MEIsIDB4NDAsIDB4QUYsIDB4MDAsIDB4OTEsIDB4MDAsIDB4NDQsCisweDJDLCAweEQwLCAweDE5LCAweDQwLCAweEU3LCAweDAwLCAweDFELCAweDAxLCAweDQ0LCAweDAyLCAweDE0LCAweDA4LCAweDQwLAorMHg3NCwgMHgwMCwgMHg5RCwgMHgwMywgMHg3NCwgMHgwMywgMHgxMCwgMHgzRCwgMHg0MCwgMHgwNCwgMHg2MCwgMHgwQywgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTEsIDB4QTAsIDB4MjMsIDB4MDAsIDB4MDEsIDB4MjAsIDB4MzQsIDB4MDAsIDB4NTAsCisweDBDLCAweDUxLCAweDMwLCAweDAwLCAweEMxLCAweDAwLCAweDA0LCAweDAyLCAweDEwLCAweDAwLCAweDQwLCAweDIwLCAweDAwLAorMHg4NSwgMHgwMCwgMHgwNCwgMHgwMiwgMHgxNCwgMHg0OCwgMHg0MCwgMHhCNywgMHgyMCwgMHg5MSwgMHgxNCwgMHgxNiwgMHg4MSwKKzB4OTAsIDB4MEMsIDB4NDIsIDB4QjMsIDB4MDAsIDB4MUQsIDB4MDAsIDB4NjQsIDB4MDIsIDB4MTAsIDB4MDgsIDB4NDAsIDB4MzAsCisweDAwLCAweDA5LCAweDAxLCAweDM0LCAweDAzLCAweDEwLCAweDBDLCAweDQwLCAweDQ0LCAweDgwLCAweDBFLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHhBOCwgMHgyNSwgMHgwMCwgMHgxMSwgMHgwMSwgMHg3NCwgMHg0NCwgMHgxMCwgMHg4RCwKKzB4NDAsIDB4MzQsIDB4MDAsIDB4RDUsIDB4MDAsIDB4NDQsIDB4MDIsIDB4MTAsIDB4MDEsIDB4NDAsIDB4MjQsIDB4MDEsIDB4RDEsCisweDIwLCAweDU0LCAweDQ2LCAweDEwLCAweDE5LCAweDQwLCAweDI3LCAweDAwLCAweDkxLCAweDAxLCAweDU0LCAweDQwLCAweEQwLAorMHgxNSwgMHg0MCwgMHg3NywgMHgwMCwgMHgxRCwgMHgxMSwgMHg2NCwgMHgxMiwgMHgxMCwgMHgwOSwgMHg0MSwgMHg3NCwgMHgwMCwKKzB4REQsIDB4NDQsIDB4NzQsIDB4MjMsIDB4MTAsIDB4MEQsIDB4NDAsIDB4MUMsIDB4MDAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQ3LCAweDQyLCAweDExLCAweDgxLCAweDdDLCAweDBDLCAweDM0LCAweDFELCAweEMwLAorMHgzNCwgMHgwMCwgMHhEMywgMHgwMCwgMHg0OSwgMHgwMywgMHgzMCwgMHgxNSwgMHhEMCwgMHgyNCwgMHgwMCwgMHg5NywgMHg4MCwKKzB4NEMsIDB4MDYsIDB4MzAsIDB4MzksIDB4QzAsIDB4NjMsIDB4NDAsIDB4ODMsIDB4MDEsIDB4NUQsIDB4MDEsIDB4RjAsIDB4MTksCisweEMwLCAweDc3LCAweDAwLCAweDBGLCAweDAxLCAweDJELCAweDA3LCAweEIwLCAweDI5LCAweEQwLCAweDM0LCAweDAwLCAweDlGLAorMHgwMSwgMHg3RSwgMHgwNiwgMHgzMCwgMHgwRCwgMHhDMCwgMHgwMCwgMHgyMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDcsIDB4ODgsIDB4NkQsIDB4MDAsIDB4M0YsIDB4MDAsIDB4QkMsIDB4MDAsIDB4RTIsIDB4MUUsIDB4RTEsIDB4M0YsCisweDAwLCAweEZGLCAweDAwLCAweEY4LCAweDAzLCAweEYwLCAweDRFLCAweEUwLCAweDZCLCAweDAwLCAweDhGLCAweDIwLCAweDdDLAorMHgwMiwgMHhGMCwgMHgwRiwgMHhDMCwgMHg2NywgMHgyMiwgMHhCRiwgMHgxMCwgMHhFQywgMHgyNSwgMHhGMCwgMHgwQiwgMHhDMCwKKzB4M0YsIDB4MDgsIDB4M0YsIDB4MDAsIDB4REMsIDB4MDMsIDB4RjAsIDB4NDcsIDB4QzAsIDB4M0YsIDB4MDAsIDB4QkYsIDB4ODEsCisweEZFLCAweDA2LCAweEY0LCAweDBDLCAweEMwLCAweDFGLCAweDAwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMiwgMHgwOCwgMHgyMSwgMHgwMCwgMHgxMywgMHg4MCwgMHg2QywgMHgxOCwgMHgzMiwgMHgwRCwgMHhDMCwgMHg3MywgMHgwMCwKKzB4RDMsIDB4MDAsIDB4N0MsIDB4MDMsIDB4MzAsIDB4MDUsIDB4QzAsIDB4MjQsIDB4MDAsIDB4OTMsIDB4MDAsIDB4NEMsIDB4M0EsCisweDM0LCAweDJELCAweEMwLCAweDNDLCAweDAwLCAweDkzLCAweDAwLCAweDdDLCAweDAxLCAweDMwLCAweDBELCAweEMwLCAweDc3LAorMHgwMCwgMHgxRiwgMHgwMiwgMHg3QywgMHgyMywgMHgzMCwgMHgyNCwgMHhEMCwgMHgzNCwgMHgwMCwgMHhERiwgMHgwMCwgMHg0QywKKzB4MDIsIDB4RjAsIDB4MEQsIDB4RTAsIDB4MEEsIDB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTMsCisweEEwLCAweDZDLCAweDAxLCAweDkxLCAweDAxLCAweDQ0LCAweDBDLCAweDEwLCAweDFELCAweEU0LCAweDNGLCAweDAwLCAweEUxLAorMHgwMCwgMHg3NCwgMHgwNywgMHgxMCwgMHgwRCwgMHg0OCwgMHgyNCwgMHgwMCwgMHhEMSwgMHgwMCwgMHg2QywgMHgwQSwgMHgxMiwKKzB4MEQsIDB4NDgsIDB4MjQsIDB4MzAsIDB4OUIsIDB4MDAsIDB4NzAsIDB4MTUsIDB4MTEsIDB4MDUsIDB4NDAsIDB4MzQsIDB4MDAsCisweDFELCAweDAwLCAweDc0LCAweDA3LCAweDEwLCAweEE1LCAweDQwLCAweDM0LCAweDAwLCAweERELCAweDg0LCAweDQ0LCAweDAyLAorMHhEMCwgMHgwRiwgMHg0MCwgMHg0QywgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNywgMHgyMCwKKzB4NDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MjQsIDB4ODQsIDB4MTAsIDB4MDgsIDB4NDAsIDB4MzMsIDB4NDAsIDB4QzEsIDB4ODAsCisweDc0LCAweDA3LCAweDkwLCAweDIwLCAweDQxLCAweDIwLCAweDQwLCAweDgxLCAweDAwLCAweDQ0LCAweDAzLCAweDkxLCAweDA4LAorMHg0MCwgMHgyMSwgMHgyMCwgMHg4MSwgMHgwMiwgMHgzMCwgMHg0MSwgMHgxNiwgMHgwQywgMHg1MiwgMHgzMywgMHgwMCwgMHg0RCwKKzB4MDAsIDB4MzQsIDB4MDYsIDB4MTAsIDB4MDgsIDB4NDAsIDB4MzAsIDB4MDAsIDB4OEQsIDB4MDEsIDB4NDQsIDB4MDIsIDB4RDAsCisweDBDLCAweDQwLCAweDBDLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDZDLAorMHgwMCwgMHgwMSwgMHgxMSwgMHg4NCwgMHg2NCwgMHgxMCwgMHgxRSwgMHg0MCwgMHg3OSwgMHg0MCwgMHhFMSwgMHg2MSwgMHhCNCwKKzB4NEUsIDB4OTAsIDB4MTIsIDB4NTAsIDB4NzgsIDB4MDAsIDB4QTEsIDB4MTEsIDB4QTQsIDB4MjYsIDB4OTAsIDB4MEEsIDB4NDAsCisweDY5LCAweDAwLCAweEU5LCAweDAxLCAweEI0LCAweDA2LCAweDEwLCAweDFGLCAweDQwLCAweDVBLCAweDAwLCAweDZELCAweDAxLAorMHhCNCwgMHgwNiwgMHgxMCwgMHgxQSwgMHg0MCwgMHg3OCwgMHgyMCwgMHg4RCwgMHgwMSwgMHg4NCwgMHgwNiwgMHhEMCwgMHgxRSwKKzB4NDAsIDB4MTksIDB4MjAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTYsIDB4MTgsIDB4MjAsIDB4MDAsCisweDAzLCAweDIwLCAweDZFLCAweDIwLCAweDM0LCAweDA4LCAweDQxLCAweDMzLCAweDAwLCAweEMzLCAweDAwLCAweDNDLCAweDAyLAorMHg5MCwgMHgwMSwgMHhDMSwgMHgyMCwgMHgwMCwgMHg4MywgMHgwMCwgMHgwQywgMHgyMywgMHhCNCwgMHg4OSwgMHhDMCwgMHgzMSwKKzB4MDksIDB4ODMsIDB4MDAsIDB4M0MsIDB4MDAsIDB4MzAsIDB4MEMsIDB4QzAsIDB4MzMsIDB4MDAsIDB4MEYsIDB4MDAsIDB4N0MsCisweDAyLCAweDM0LCAweDA4LCAweEMwLCAweDMwLCAweDAwLCAweENGLCAweDA4LCAweDBELCAweDAyLCAweEYyLCAweDBDLCAweEQwLAorMHg0OCwgMHg0MCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHgzOCwgMHgyRCwgMHg0MCwgMHgzRiwKKzB4MDAsIDB4RjYsIDB4MjAsIDB4RjUsIDB4MEYsIDB4QzAsIDB4M0IsIDB4MDAsIDB4RkYsIDB4MDAsIDB4RkMsIDB4MDIsIDB4NTAsCisweDAzLCAweEMwLCAweDNCLCAweDAyLCAweEZGLCAweDA4LCAweEZDLCAweEExLCAweDcwLCAweENCLCAweEUwLCAweEJFLCAweDAwLAorMHhCRiwgMHgwMCwgMHhCQywgMHgwMiwgMHhGMCwgMHgwNiwgMHhDMCwgMHgzRCwgMHgwMCwgMHgzRiwgMHgwMCwgMHhGQywgMHgwMiwKKzB4RjAsIDB4OEIsIDB4QzAsIDB4M0YsIDB4MDAsIDB4RkYsIDB4MDAsIDB4RkMsIDB4MDIsIDB4RjAsIDB4MEYsIDB4QzAsIDB4MEEsCisweDIwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweEEwLCAweDA3LCAweDAwLCAweDEzLCAweDAwLAorMHhDQywgMHgwMCwgMHgzMCwgMHg1OSwgMHhDOCwgMHgzMCwgMHgxMywgMHhGNywgMHgwMCwgMHg3NCwgMHgwMywgMHg3MCwgMHgwMSwKKzB4QzAsIDB4MjQsIDB4MDAsIDB4OUUsIDB4MDAsIDB4NEMsIDB4MDMsIDB4MzAsIDB4MkQsIDB4QzEsIDB4QUMsIDB4MDAsIDB4OTMsCisweDAwLCAweDdDLCAweDAxLCAweEMwLCAweDFELCAweEMwLCAweDM0LCAweDAwLCAweDVCLCAweDAwLCAweDdDLCAweDAyLCAweDMwLAorMHgwNSwgMHhEMCwgMHgzMCwgMHgwMCwgMHg5MywgMHgwMCwgMHg3QywgMHgwNywgMHgzMCwgMHgwRCwgMHhDMCwgMHg1MywgMHgwMCwKKzB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4ODAsIDB4QTksIDB4MDAsIDB4MjEsIDB4QzAsIDB4ODQsCisweDAyLCAweDExLCAweDBFLCAweEMxLCAweDM4LCAweDA0LCAweEUxLCAweDAxLCAweEI0LCAweDAzLCAweEQwLCAweDBGLCAweDQwLAorMHgzOCwgMHgwMCwgMHhBRCwgMHgwMCwgMHhCQywgMHgwMywgMHgxMCwgMHgwRSwgMHg0MiwgMHgyMCwgMHgwMCwgMHhFMSwgMHhDMCwKKzB4QjQsIDB4MDMsIDB4QzAsIDB4MEUsIDB4QzAsIDB4MzgsIDB4MDAsIDB4NkQsIDB4MDAsIDB4QjQsIDB4MDIsIDB4NTAsIDB4MEMsCisweDQwLCAweDM4LCAweDAwLCAweEE1LCAweDAwLCAweEI0LCAweDAzLCAweDEwLCAweDBFLCAweDQwLCAweDRCLCAweDYwLCAweDA2LAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHg2OSwgMHgwMSwgMHgyMSwgMHgwMSwgMHg4NCwgMHgwNywKKzB4MTAsIDB4MTgsIDB4MDAsIDB4NzgsIDB4MDEsIDB4RTUsIDB4MDEsIDB4QjQsIDB4NDcsIDB4RDEsIDB4MTIsIDB4NTAsIDB4NkEsCisweDAwLCAweDhELCAweDAxLCAweDA0LCAweDA3LCAweDEwLCAweDFDLCAweDQ4LCAweDc4LCAweDAwLCAweEEwLCAweDAxLCAweEI0LAorMHgwNSwgMHhEMCwgMHgxRiwgMHg1MCwgMHg3OCwgMHgwMCwgMHgyRCwgMHgwMSwgMHhCNCwgMHgwNiwgMHgxOCwgMHgxRSwgMHg0MCwKKzB4NjgsIDB4MDAsIDB4RTksIDB4MDEsIDB4RjQsIDB4MDcsIDB4MTAsIDB4MUUsIDB4NDAsIDB4MDMsIDB4MDAsIDB4MDQsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDI4LCAweDMzLCAweDAwLCAweEQxLCAweDUzLCAweDA0LCAweDAzLCAweDEwLAorMHgwQywgMHg1MCwgMHgzMiwgMHgwMCwgMHhDMSwgMHgwMCwgMHgzNCwgMHgwNywgMHhEMCwgMHgwRCwgMHg0MCwgMHgzMiwgMHgwMCwKKzB4Q0QsIDB4NDAsIDB4MzQsIDB4MkIsIDB4MTAsIDB4NUMsIDB4NjAsIDB4MzAsIDB4MDAsIDB4ODEsIDB4MDAsIDB4MzQsIDB4MDMsCisweEQwLCAweDA0LCAweDQwLCAweEYyLCAweDAwLCAweDhELCAweDAwLCAweDM0LCAweDI2LCAweDUwLCAweDdDLCAweDQyLCAweDMwLAorMHgwMCwgMHhDRCwgMHgwMCwgMHgzNCwgMHgwNywgMHgxNCwgMHgwQywgMHg0MCwgMHg1QiwgMHgwMCwgMHgwQywgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MTcsIDB4QTAsIDB4MUQsIDB4MDAsIDB4NzMsIDB4MjcsIDB4Q0MsIDB4MEQsIDB4MzQsIDB4MDUsCisweEM4LCAweDEwLCAweDAwLCAweDU3LCAweDIwLCAweDdDLCAweDA1LCAweEYwLCAweDI3LCAweEMxLCAweDE2LCAweDAwLCAweDVGLAorMHgwMCwgMHhDQywgMHgwNSwgMHgzNCwgMHg1NywgMHhEMCwgMHgxNCwgMHg0MCwgMHg3MywgMHgwMCwgMHhGQywgMHgwMSwgMHhGMCwKKzB4MDcsIDB4QzAsIDB4MUMsIDB4MDEsIDB4NkIsIDB4MDAsIDB4N0MsIDB4MDEsIDB4MzAsIDB4NzcsIDB4RDAsIDB4MTQsIDB4MDAsCisweDZCLCAweDAwLCAweDdDLCAweDAxLCAweDMwLCAweDA1LCAweEMwLCAweDVGLCAweDIwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgxMiwgMHgwOCwgMHgwNSwgMHg0MCwgMHgxRiwgMHgwMCwgMHg3RCwgMHgyMCwgMHhGMCwgMHgwMSwgMHhDMCwKKzB4MDUsIDB4MDAsIDB4MUYsIDB4MDIsIDB4N0MsIDB4MDAsIDB4RjIsIDB4MDEsIDB4QzUsIDB4MDUsIDB4MDAsIDB4MUYsIDB4MDAsCisweDdDLCAweDQwLCAweEYwLCAweDAwLCAweEMwLCAweDAzLCAweDQwLCAweDFGLCAweDA0LCAweDdDLCAweDIwLCAweEYwLCAweDAxLAorMHhDMCwgMHgwNSwgMHgzMCwgMHgxRiwgMHgwMSwgMHg3QywgMHgwMCwgMHhGNCwgMHgyMSwgMHhDNCwgMHgwNywgMHgwMCwgMHgxNywKKzB4MDEsIDB4N0MsIDB4MjAsIDB4RjAsIDB4MDEsIDB4QzAsIDB4NEIsIDB4MDAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDEwLCAweDA4LCAweDI1LCAweDAwLCAweDk3LCAweDAwLCAweDRDLCAweDRBLCAweDMwLCAweDU5LCAweEMwLCAweEU3LAorMHgwMCwgMHg4QiwgMHgwMSwgMHg2QywgMHgwMiwgMHhGMCwgMHgxOSwgMHg4MCwgMHgyNCwgMHgxMCwgMHg4RiwgMHg4OSwgMHg0QywKKzB4MDIsIDB4MzgsIDB4MDksIDB4QzAsIDB4MjQsIDB4MDAsIDB4OTMsIDB4MDUsIDB4N0MsIDB4MDIsIDB4RjAsIDB4MDksIDB4QzAsCisweDIzLCAweDA0LCAweDkzLCAweDAxLCAweDZELCAweDAyLCAweDMwLCAweDU5LCAweDQwLCAweEE0LCAweDAwLCAweDkzLCAweDAwLAorMHg0QywgMHgwMiwgMHhGMCwgMHgwOSwgMHhDMCwgMHg0MywgMHgyMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDEsIDB4MjAsIDB4MjQsIDB4MDAsIDB4OTEsIDB4MDAsIDB4NDQsIDB4MEEsIDB4MTAsIDB4MTksIDB4NDAsIDB4MjcsIDB4MDAsCisweDkxLCAweDAzLCAweDQ0LCAweDAyLCAweEQwLCAweDE5LCAweDQwLCAweDI0LCAweDAwLCAweDlELCAweDAxLCAweDZDLCAweDAyLAorMHgxMCwgMHgwOSwgMHg0MCwgMHgyNCwgMHgwMCwgMHg5MSwgMHgwMywgMHg3NCwgMHgwNiwgMHhEMCwgMHgwOSwgMHg0MCwgMHgyNywKKzB4MjAsIDB4OUIsIDB4MDAsIDB4MkMsIDB4MTIsIDB4NTAsIDB4NzksIDB4NTAsIDB4NjAsIDB4MDAsIDB4OUIsIDB4MDAsIDB4NDQsCisweDAyLCAweEQyLCAweDA5LCAweDQwLCAweDA3LCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LAorMHhBMCwgMHgyMCwgMHg0MCwgMHg5NSwgMHgyMCwgMHgwNCwgMHgwQSwgMHg1NiwgMHgyOSwgMHg0MCwgMHgyNywgMHg0MCwgMHg5OSwKKzB4QTgsIDB4NjQsIDB4MDYsIDB4RDgsIDB4ODksIDB4NjAsIDB4MjUsIDB4QTAsIDB4OUQsIDB4MDAsIDB4MDQsIDB4MDIsIDB4MTQsCisweDBELCAweDQwLCAweDI2LCAweDAwLCAweEQxLCAweDAwLCAweDc0LCAweDA2LCAweEQ4LCAweDA5LCAweDQwLCAweDc3LCAweDAwLAorMHg5MSwgMHgwOCwgMHg2NiwgMHg5MiwgMHgxMiwgMHgwOCwgMHg0MiwgMHgyNSwgMHhBMCwgMHg5OSwgMHgwMCwgMHg0NCwgMHgwMiwKKzB4RDAsIDB4MDksIDB4NDAsIDB4NzMsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MjAsCisweDIwLCAweDAxLCAweDgxLCAweDA0LCAweDA0LCAweDEyLCAweDUwLCAweDQ4LCAweDQwLCAweDIzLCAweDAxLCAweDgxLCAweDA0LAorMHgwMCwgMHgwNiwgMHhEMCwgMHg0OCwgMHg1MCwgMHgyMSwgMHgwMSwgMHg4RCwgMHgwNCwgMHgyNSwgMHgxMywgMHgxMCwgMHg0OCwKKzB4NDAsIDB4MjIsIDB4MTEsIDB4QzEsIDB4MDAsIDB4MzYsIDB4MTIsIDB4RDAsIDB4MDgsIDB4NDIsIDB4MjMsIDB4MjEsIDB4OTksCisweDAwLCAweDY0LCAweDAyLCAweDUwLCAweDQ4LCAweDQwLCAweDI1LCAweDAwLCAweDg5LCAweDA0LCAweDA1LCAweDAyLCAweEQwLAorMHg0OCwgMHg0MSwgMHg1MywgMHhBMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxRCwgMHhCOCwgMHg4MywKKzB4MDIsIDB4MDcsIDB4MEEsIDB4MEMsIDB4MjgsIDB4NzIsIDB4QTEsIDB4NDAsIDB4MDcsIDB4MDAsIDB4NUIsIDB4MDAsIDB4NkMsCisweDI4LCAweEYwLCAweEExLCAweEMwLCAweDA1LCAweDAwLCAweDFGLCAweDBBLCAweDRDLCAweDI4LCAweDEwLCAweEExLCAweDUwLAorMHg4NiwgMHgwMiwgMHgxMywgMHgwQSwgMHg3QywgMHgwMSwgMHhEMSwgMHgwMSwgMHhDMCwgMHgwNywgMHgwMCwgMHgxMywgMHgwMCwKKzB4NkQsIDB4MjgsIDB4MzAsIDB4QTEsIDB4QzAsIDB4MDUsIDB4MDAsIDB4MUIsIDB4MDAsIDB4NEMsIDB4MDgsIDB4RjAsIDB4MDEsCisweEMwLCAweDc3LCAweEMwLCAweDBBLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFELCAweEI4LCAweDNGLCAweDAyLAorMHhCRiwgMHgwOCwgMHhGRCwgMHgyMiwgMHhCMCwgMHg4QiwgMHhDMCwgMHgyNywgMHg0MiwgMHg5RiwgMHgwOCwgMHhGQywgMHgwMiwKKzB4RjAsIDB4OEIsIDB4QzgsIDB4MkUsIDB4MTIsIDB4QkYsIDB4NDgsIDB4RkMsIDB4MjIsIDB4RjAsIDB4OEIsIDB4QzAsIDB4MkQsCisweDQyLCAweEJGLCAweDAwLCAweEZDLCAweDIyLCAweEYwLCAweDBBLCAweEMwLCAweDJGLCAweDAyLCAweEJGLCAweDAwLCAweEJELAorMHgwMiwgMHhGMCwgMHg4QiwgMHhDMCwgMHgyRSwgMHgwMCwgMHhCRiwgMHgwOCwgMHhCQywgMHg0MiwgMHhGMCwgMHgwOSwgMHhDMCwKKzB4NjcsIDB4MjAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MUMsIDB4QTAsIDB4M0YsIDB4MDUsIDB4QjMsCisweDBDLCAweENDLCAweDAyLCAweDMwLCAweDBCLCAweEMwLCAweDJGLCAweDAwLCAweEEzLCAweDA0LCAweDhDLCAweDAyLCAweEYwLAorMHhDQiwgMHhDMCwgMHgyQywgMHgwMCwgMHhCMywgMHgwMCwgMHhDQywgMHgyMiwgMHhGMCwgMHg0QiwgMHhDMCwgMHgyNCwgMHgwNSwKKzB4QUYsIDB4MDgsIDB4RkMsIDB4MTYsIDB4RjAsIDB4MDksIDB4QzAsIDB4MkYsIDB4MDAsIDB4QkYsIDB4MDAsIDB4RkMsIDB4MDIsCisweEYwLCAweENBLCAweEMwLCAweDNDLCAweDAwLCAweEYzLCAweDAwLCAweDdDLCAweDIyLCAweEYwLCAweDE5LCAweEMwLCAweDY3LAorMHgwMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMCwgMHgwNywgMHgwMSwgMHg1MSwgMHgwQywKKzB4NEMsIDB4NDgsIDB4MTQsIDB4MDEsIDB4QzEsIDB4MDQsIDB4MDIsIDB4MTEsIDB4NjAsIDB4NDQsIDB4MTAsIDB4NzAsIDB4QzAsCisweDQwLCAweDA1LCAweDAwLCAweDExLCAweDEwLCAweDQ0LCAweDIwLCAweEQwLCAweDA1LCAweDQwLCAweDA0LCAweDAxLCAweDFELAorMHgwNCwgMHg3NCwgMHgwOCwgMHhDMCwgMHgwMSwgMHg0MCwgMHgwNywgMHgwMiwgMHgxRCwgMHgwMCwgMHg3NCwgMHgxMCwgMHhEMiwKKzB4QzEsIDB4NDAsIDB4MDQsIDB4MDAsIDB4NTUsIDB4MDAsIDB4NzQsIDB4MDQsIDB4RDAsIDB4MDEsIDB4NDAsIDB4NzMsIDB4NjAsCisweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDAwLCAweDIxLCAweDA1LCAweDgxLCAweDA0LCAweDI0LAorMHgzMiwgMHgxMCwgMHg4OCwgMHg0MCwgMHgyMSwgMHgwMCwgMHg4MSwgMHgwOCwgMHgwNCwgMHg1MiwgMHhEMiwgMHg0OCwgMHg0MCwKKzB4MjAsIDB4MDAsIDB4ODEsIDB4MDAsIDB4MDQsIDB4MDYsIDB4RDAsIDB4ODgsIDB4NDQsIDB4MjAsIDB4MDUsIDB4OEQsIDB4MDQsCisweDM0LCAweDIyLCAweEQ4LCAweDE4LCAweDQwLCAweDYzLCAweDAwLCAweDhELCAweDIwLCAweDM0LCAweDUyLCAweEQwLCAweDQ4LAorMHg0MCwgMHgyMCwgMHgwMCwgMHg4MSwgMHgwOCwgMHgzNCwgMHgxMiwgMHhEMCwgMHgyOCwgMHg0MCwgMHg0QiwgMHgwMCwgMHgwNCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MjgsIDB4NjUsIDB4NTgsIDB4ODEsIDB4MDAsIDB4NDQsIDB4MDIsCisweDEwLCAweDA5LCAweDQwLCAweDI2LCAweDAwLCAweDkxLCAweDAwLCAweDQ1LCAweDEyLCAweDUwLCAweDA4LCAweDUwLCAweDI1LAorMHgwMCwgMHg5MSwgMHgwNCwgMHg0NSwgMHgwMiwgMHhEMCwgMHgwOSwgMHg0MCwgMHgyNCwgMHgyMCwgMHg5RCwgMHgyNCwgMHg3NCwKKzB4ODMsIDB4RDAsIDB4MDksIDB4NDAsIDB4MjcsIDB4MDAsIDB4OUQsIDB4MDYsIDB4NzQsIDB4MDIsIDB4RDAsIDB4NDksIDB4NDEsCisweDI0LCAweDAwLCAweDk1LCAweDAwLCAweDc0LCAweDAyLCAweEQwLCAweDA5LCAweDQwLCAweDYzLCAweDAwLCAweDA0LCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHgyMCwgMHgyNSwgMHgwMCwgMHg5MywgMHg4MiwgMHg2RCwgMHgxQSwgMHgzMiwKKzB4MDksIDB4QzAsIDB4MjUsIDB4NDAsIDB4OTMsIDB4MDAsIDB4NEMsIDB4MDYsIDB4RjIsIDB4MDksIDB4QzAsIDB4MjQsIDB4MDAsCisweDkzLCAweDAwLCAweDRDLCAweDA2LCAweEYwLCAweEI5LCAweEMwLCAweDI0LCAweDAwLCAweDlGLCAweDA2LCAweDdDLCAweDAyLAorMHhGMCwgMHgwOSwgMHhDMCwgMHhFNywgMHgwMCwgMHg5RiwgMHgwMCwgMHg3QywgMHgwMiwgMHhGMCwgMHgwOSwgMHhEMCwgMHgyNCwKKzB4MDIsIDB4OTMsIDB4MDksIDB4N0MsIDB4MDIsIDB4RjAsIDB4MDksIDB4QzAsIDB4MTcsIDB4QTAsIDB4MDQsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDE2LCAweDA4LCAweDI1LCAweDAwLCAweDlGLCAweDAzLCAweDdDLCAweDI2LCAweEYwLCAweDA5LAorMHhDMSwgMHgyMSwgMHgwMCwgMHg4RiwgMHgwMCwgMHg3QywgMHg0NiwgMHg3MCwgMHgwOSwgMHg0MCwgMHgyNiwgMHg0MCwgMHg5RiwKKzB4MDEsIDB4N0MsIDB4MEEsIDB4RjAsIDB4MTgsIDB4RDAsIDB4NjcsIDB4MDEsIDB4OUYsIDB4MDAsIDB4N0MsIDB4MTIsIDB4RjAsCisweDM5LCAweEMwLCAweDI3LCAweDAxLCAweDlGLCAweDAwLCAweDdDLCAweDAyLCAweEYwLCAweDE5LCAweEQwLCAweDI3LCAweDgwLAorMHg5RiwgMHgwMCwgMHg3QywgMHgwMiwgMHhGMCwgMHgwOSwgMHhDMCwgMHg0QiwgMHgwMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MTQsIDB4MDgsIDB4ODUsIDB4MDAsIDB4MTMsIDB4MDIsIDB4NEMsIDB4MDAsIDB4QjAsIDB4MDEsIDB4QzAsCisweDA0LCAweDQwLCAweDEzLCAweDA0LCAweDRDLCAweDIwLCAweDMwLCAweDAxLCAweEMwLCAweDA0LCAweDgwLCAweDFGLCAweDAwLAorMHg0QywgMHgwMCwgMHgzNCwgMHgwMSwgMHhDMCwgMHgwNCwgMHgwMCwgMHgxMywgMHg4MiwgMHg0QywgMHg4NCwgMHhCMCwgMHgwMSwKKzB4QzAsIDB4MDcsIDB4MDAsIDB4MUYsIDB4MDIsIDB4N0MsIDB4NDAsIDB4RjAsIDB4MDEsIDB4QzAsIDB4MDQsIDB4MDAsIDB4MUYsCisweDAwLCAweDdDLCAweDAwLCAweDMwLCAweDAxLCAweEMwLCAweDQzLCAweDIwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgxMCwgMHgwMCwgMHgxNCwgMHg0OCwgMHg1MSwgMHgwMCwgMHhENCwgMHgwMSwgMHgzNCwgMHgwNywgMHg0MCwgMHgxNCwKKzB4MDAsIDB4NzEsIDB4MDAsIDB4QzQsIDB4MDEsIDB4MTAsIDB4MDcsIDB4NTAsIDB4MTAsIDB4MDAsIDB4NUQsIDB4MTAsIDB4RkMsCisweDExLCAweDEyLCAweDA1LCAweDQwLCAweDE0LCAweDAwLCAweDcxLCAweDAyLCAweEMwLCAweDA1LCAweDMwLCAweDA1LCAweDQwLAorMHg1NywgMHgwNCwgMHg1RCwgMHgwMSwgMHhGNCwgMHg0MSwgMHhEMCwgMHgwNywgMHg0MCwgMHgxMCwgMHgwMCwgMHg1RCwgMHgwMSwKKzB4NzQsIDB4MDEsIDB4MTAsIDB4MDUsIDB4NDAsIDB4NTMsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDEwLCAweEEwLCAweDM2LCAweDAwLCAweEMxLCAweDAwLCAweDQ0LCAweDAzLCAweDEwLCAweDJELCAweDQwLCAweDMwLCAweDAwLAorMHg4MSwgMHgwMCwgMHgwNCwgMHgwRiwgMHhENCwgMHgxQywgMHg0MCwgMHgzMCwgMHgwMCwgMHhERCwgMHgwMCwgMHgwNCwgMHgwNywKKzB4MTAsIDB4MUMsIDB4NDAsIDB4MzAsIDB4MjAsIDB4QzEsIDB4MTIsIDB4MDAsIDB4MDMsIDB4MEMsIDB4MEMsIDB4NDAsIDB4MjMsCisweDAwLCAweENELCAweDAxLCAweDM0LCAweDAxLCAweDkwLCAweDA5LCAweDQwLCAweDIwLCAweDAwLCAweDhELCAweDAwLCAweDM0LAorMHgwMywgMHgxMCwgMHgwQywgMHg0MCwgMHg1MywgMHgwMCwgMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwKKzB4ODAsIDB4MzAsIDB4MDgsIDB4QzEsIDB4MDAsIDB4OTQsIDB4MDMsIDB4MTAsIDB4MDIsIDB4NDAsIDB4MzgsIDB4MDAsIDB4QTEsCisweDAyLCAweEM0LCAweDA3LCAweEQwLCAweDBFLCAweDQxLCAweDM4LCAweDA0LCAweENELCAweDAwLCAweEI0LCAweDA1LCAweDEwLAorMHgyQywgMHg0MCwgMHg3QSwgMHgwMCwgMHhGMSwgMHgwMSwgMHg4NCwgMHgwRiwgMHgxMCwgMHgwRSwgMHg0MCwgMHgzQiwgMHgwMCwKKzB4RUQsIDB4MTAsIDB4QjQsIDB4MDEsIDB4RDAsIDB4MDMsIDB4NDAsIDB4MjgsIDB4MDAsIDB4QUQsIDB4MDIsIDB4QjQsIDB4MDcsCisweDEwLCAweDBFLCAweDQwLCAweDA3LCAweDIwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDE4LAorMHg3OCwgMHg0MCwgMHhFMywgMHgwMSwgMHhDQywgMHgwNCwgMHgzMywgMHgxMiwgMHg1MCwgMHg2MCwgMHgyMCwgMHgyMywgMHgwMSwKKzB4OEQsIDB4MDcsIDB4RjAsIDB4MUEsIDB4QzIsIDB4NzgsIDB4MDAsIDB4RUQsIDB4MDEsIDB4QzgsIDB4ODUsIDB4MzAsIDB4MUUsCisweEQwLCAweDdDLCAweDQxLCAweEUzLCAweDAxLCAweDhELCAweDA2LCAweDMwLCAweDFFLCAweEMwLCAweDdCLCAweDAwLCAweEVGLAorMHgwMSwgMHhCQywgMHgwNywgMHhGMCwgMHgxRSwgMHhEMCwgMHg3OCwgMHgwMCwgMHhBRCwgMHgwMSwgMHhGQywgMHgwNywgMHgzNCwKKzB4MUUsIDB4QzAsIDB4NDcsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4QjgsIDB4QjUsCisweDA1LCAweERGLCAweDAyLCAweDdDLCAweDAyLCAweDcwLCAweDAwLCAweEMwLCAweDM3LCAweDAwLCAweDFDLCAweDAwLCAweDdDLAorMHgwMywgMHgzMCwgMHgyOSwgMHhDMCwgMHgzNywgMHgwMCwgMHhERiwgMHgwMCwgMHg3QywgMHg4MSwgMHhGMCwgMHgwRCwgMHhDMCwKKzB4MzUsIDB4MDIsIDB4REYsIDB4MDAsIDB4M0QsIDB4MDAsIDB4NzAsIDB4MEQsIDB4QzAsIDB4MzcsIDB4MDAsIDB4REYsIDB4MDAsCisweDdDLCAweDAzLCAweEYwLCAweDBELCAweEMwLCAweDM3LCAweDAwLCAweDlGLCAweDAwLCAweDdDLCAweDAzLCAweEYwLCAweDBELAorMHhDMCwgMHg0MywgMHgyMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNiwgMHgyMCwgMHg3RCwgMHgwMCwKKzB4RjMsIDB4MDMsIDB4Q0MsIDB4MTMsIDB4MzAsIDB4MTcsIDB4QzAsIDB4N0MsIDB4MTAsIDB4RjMsIDB4MDEsIDB4RkMsIDB4MDcsCisweEYwLCAweDNGLCAweEMwLCAweDc4LCAweDAwLCAweEYzLCAweDAxLCAweENDLCAweDA2LCAweDMwLCAweDFBLCAweEMwLCAweDdELAorMHgwMCwgMHhGRiwgMHgwMSwgMHhDQywgMHgwNywgMHhGMCwgMHgxRiwgMHhDMCwgMHg3RiwgMHgwMCwgMHhGRiwgMHgwMSwgMHhGQywKKzB4MjcsIDB4RjAsIDB4MUIsIDB4RDAsIDB4NkMsIDB4MDAsIDB4QkYsIDB4MDEsIDB4RkMsIDB4MDcsIDB4RjAsIDB4MUYsIDB4QzAsCisweDBCLCAweDAwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE1LCAweDAwLCAweDM5LCAweDQwLCAweEYxLAorMHgwMCwgMHg4NiwgMHgwMywgMHgxMCwgMHgwMiwgMHg0MCwgMHgzOCwgMHgwMiwgMHhFMSwgMHgwNCwgMHhCNCwgMHgwMCwgMHhEMCwKKzB4OEUsIDB4NDAsIDB4MzgsIDB4MDAsIDB4QjEsIDB4MDAsIDB4ODQsIDB4MDEsIDB4MTAsIDB4OEEsIDB4NDMsIDB4MzgsIDB4MDgsCisweEVELCAweDAyLCAweDg0LCAweDAyLCAweDEwLCAweDBFLCAweDQwLCAweDNCLCAweDAwLCAweEVELCAweDAwLCAweEI0LCAweDIzLAorMHhEMCwgMHg4MiwgMHg0MCwgMHgyOCwgMHgwMCwgMHhFRCwgMHgwOCwgMHhCNCwgMHgwMywgMHhEMCwgMHgwRSwgMHg0MCwgMHg1NywKKzB4NjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4QjEsIDB4MDIsIDB4RTEsIDB4MDAsCisweDg0LCAweDIwLCAweDEwLCAweDAwLCAweDQxLCAweDIwLCAweDAwLCAweEE5LCAweDQwLCAweEI0LCAweDAzLCAweEQwLCAweDA4LAorMHg0MCwgMHgzOCwgMHgwNiwgMHhBMSwgMHgwMCwgMHg4NCwgMHg2MCwgMHgxMCwgMHgwQiwgMHg0MCwgMHgzOCwgMHgwNCwgMHhFRCwKKzB4MDAsIDB4MDQsIDB4MDAsIDB4NTAsIDB4MkUsIDB4NDAsIDB4M0IsIDB4MDAsIDB4RUQsIDB4MDAsIDB4QjQsIDB4MjMsIDB4RDgsCisweDBFLCAweDQwLCAweDNBLCAweDAwLCAweEE5LCAweDAwLCAweEI0LCAweDAzLCAweEQwLCAweDBFLCAweDQwLCAweDIzLCAweDAwLAorMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHgyOCwgMHgzNSwgMHgwMCwgMHhDMSwgMHgwQSwgMHg0NCwKKzB4NDIsIDB4MTAsIDB4MDAsIDB4NDgsIDB4MzAsIDB4MDAsIDB4ODksIDB4MDAsIDB4MzQsIDB4MDcsIDB4RDAsIDB4QjksIDB4NDAsCisweDcwLCAweDQ4LCAweDkxLCAweDAxLCAweDA0LCAweDAxLCAweDEwLCAweDI4LCAweDQwLCAweDMwLCAweDAwLCAweERELCAweDEwLAorMHgwNCwgMHgyNCwgMHgxMCwgMHgwQywgMHg0MCwgMHgzMywgMHg5MCwgMHhDRCwgMHgwMiwgMHgzNCwgMHgwMiwgMHhEMCwgMHgyRCwKKzB4NDAsIDB4MzIsIDB4MDAsIDB4Q0QsIDB4MDMsIDB4MzQsIDB4ODMsIDB4RDIsIDB4MEMsIDB4NDAsIDB4NUIsIDB4MDAsIDB4MDQsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE1LCAweEEwLCAweDI1LCAweDAwLCAweEQzLCAweDAzLCAweDRELCAweDBCLAorMHgzMCwgMHgxMCwgMHhDMCwgMHgzNCwgMHg1MCwgMHg5QiwgMHgwMCwgMHg3QywgMHg0NywgMHhGMCwgMHgyRCwgMHhEMCwgMHg2MCwKKzB4MDAsIDB4RDMsIDB4MDUsIDB4NEQsIDB4MEUsIDB4MzQsIDB4MTksIDB4RDAsIDB4N0MsIDB4MDAsIDB4REYsIDB4MDEsIDB4NEQsCisweDIyLCAweDcwLCAweDBELCAweEMwLCAweEI3LCAweDAyLCAweENGLCAweDBBLCAweDdDLCAweDAxLCAweEYwLCAweEY1LCAweEQwLAorMHg2NiwgMHgwMCwgMHg5RiwgMHgwOSwgMHhGQywgMHgwMywgMHhGMCwgMHgwRCwgMHhDMCwgMHg1NywgMHgyMCwgMHgwNiwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4MDgsIDB4NzcsIDB4MDAsIDB4OUYsIDB4MDAsIDB4N0MsIDB4MDIsIDB4RjAsCisweDIxLCAweEMwLCAweDM3LCAweDAwLCAweDk3LCAweDAwLCAweDdDLCAweDAzLCAweEYwLCAweDA1LCAweEMwLCAweDI3LCAweDAwLAorMHhERiwgMHgwMCwgMHg3QywgMHg0MCwgMHhGMSwgMHgwOCwgMHhDMSwgMHgzNywgMHgwMCwgMHhERiwgMHgwMSwgMHg3QywgMHgwMiwKKzB4NzAsIDB4MEQsIDB4QzAsIDB4MzcsIDB4MDAsIDB4REYsIDB4MDAsIDB4N0MsIDB4MDEsIDB4RjAsIDB4MEQsIDB4QzAsIDB4MjUsCisweDAyLCAweDlGLCAweDA4LCAweDdDLCAweDAzLCAweEYwLCAweDBELCAweEMwLCAweDI3LCAweDAwLCAweDBDLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwOCwgMHgyRiwgMHg0MCwgMHhGMywgMHgxMCwgMHhEQywgMHgwNCwgMHgzMCwgMHgwMywKKzB4QzAsIDB4RjgsIDB4MDAsIDB4MzMsIDB4MDAsIDB4RkMsIDB4MDMsIDB4RjAsIDB4MEIsIDB4QzEsIDB4QUMsIDB4NDAsIDB4RjMsCisweDAwLCAweDRDLCAweDA0LCAweEYwLCAweDBCLCAweEUwLCAweDNDLCAweDAwLCAweEJGLCAweDAwLCAweENDLCAweDAwLCAweEQwLAorMHgwRiwgMHhDMCwgMHg3RiwgMHgwMSwgMHhCNywgMHgwMSwgMHhDQywgMHgwMywgMHhGMCwgMHgzRiwgMHhDMCwgMHhFQywgMHgwMCwKKzB4QkYsIDB4MDMsIDB4Q0MsIDB4MDMsIDB4RjAsIDB4MEYsIDB4NDAsIDB4MTcsIDB4MjAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDgxLCAweDIwLCAweDM2LCAweDAwLCAweDkxLCAweDAxLCAweDc0LCAweDAyLCAweDEwLCAweDcxLCAweDQwLAorMHg3NCwgMHgwMCwgMHgxMSwgMHg0MCwgMHg3NCwgMHgwMywgMHhEMCwgMHgzMSwgMHg0MSwgMHgyNCwgMHg1MCwgMHhEMSwgMHgwOCwKKzB4NDQsIDB4MDAsIDB4RDAsIDB4OTksIDB4NDAsIDB4MzQsIDB4MDAsIDB4OUMsIDB4MDMsIDB4NDQsIDB4MEMsIDB4RDAsIDB4MEQsCisweDQ4LCAweDM3LCAweDAwLCAweDlELCAweDA5LCAweDQ0LCAweDA3LCAweEQwLCAweDFELCAweDQwLCAweDI0LCAweDAwLCAweDhELAorMHgwMCwgMHg0NSwgMHgwMywgMHhEMCwgMHgwRCwgMHg0MCwgMHgxNywgMHgwMiwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDEsIDB4QTAsIDB4NjYsIDB4MDAsIDB4RDEsIDB4MDgsIDB4NzQsIDB4MjMsIDB4OTAsIDB4MTEsIDB4NDAsIDB4MzQsCisweDgwLCAweEQxLCAweDAwLCAweDc0LCAweDAzLCAweEQwLCAweDFELCAweDQwLCAweDM0LCAweDAwLCAweDkxLCAweDAwLCAweDQ0LAorMHgxMiwgMHhEMCwgMHgwOSwgMHg0MCwgMHgzNiwgMHgwMCwgMHg1RCwgMHgwMSwgMHg0NCwgMHgwNiwgMHhEMSwgMHgwRCwgMHg0MCwKKzB4MzcsIDB4MDAsIDB4REQsIDB4MDAsIDB4NzQsIDB4MDcsIDB4RDAsIDB4MDUsIDB4NDEsIDB4MjQsIDB4MDAsIDB4REQsIDB4MDAsCisweDQ0LCAweDAzLCAweEQwLCAweDBELCAweDQwLCAweDA3LCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgxMCwgMHgwMCwgMHgzMCwgMHgwMCwgMHg4MSwgMHgwMCwgMHgzNCwgMHgwMiwgMHg5MCwgMHgwMCwgMHg0MiwgMHgzMCwgMHhDMCwKKzB4QzEsIDB4MDAsIDB4MzQsIDB4MDAsIDB4RDAsIDB4MDAsIDB4NTAsIDB4MzAsIDB4MDAsIDB4ODEsIDB4MDAsIDB4MDQsIDB4MDAsCisweEQwLCAweDA4LCAweDQ4LCAweDMwLCAweDAwLCAweENELCAweDAwLCAweDA0LCAweDAyLCAweEQ4LCAweDBDLCAweDQyLCAweDMzLAorMHgwMCwgMHhDRCwgMHg4MCwgMHgzNSwgMHgwMywgMHhEMCwgMHgwQywgMHg3MCwgMHgyMCwgMHgwMCwgMHhERCwgMHgwMCwgMHgwNCwKKzB4MDMsIDB4RDAsIDB4MEMsIDB4NDAsIDB4NDMsIDB4QTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDE4LCAweDJFLCAweDAwLCAweEYzLCAweDAwLCAweDFDLCAweDAwLCAweEIwLCAweDAxLCAweEQwLCAweDM0LCAweDAwLCAweDkzLAorMHgwMCwgMHg3QywgMHgwMywgMHhGMiwgMHgwQiwgMHhDMCwgMHgzNCwgMHgwMCwgMHg5MywgMHg4MCwgMHg0QywgMHg4MCwgMHhGMCwKKzB4MDksIDB4RDAsIDB4MzQsIDB4MDAsIDB4OUYsIDB4MDAsIDB4NEQsIDB4MDAsIDB4RjAsIDB4MEQsIDB4QzAsIDB4MzcsIDB4MjAsCisweEQ3LCAweDAwLCAweDdDLCAweDAzLCAweEYwLCAweDBDLCAweEQwLCAweDI0LCAweDAwLCAweERGLCAweDAwLCAweDRDLCAweDAzLAorMHhGMCwgMHgwRCwgMHhDMCwgMHgwNywgMHhDMCwgMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHhCOCwKKzB4M0YsIDB4MDAsIDB4QkYsIDB4MDAsIDB4RkMsIDB4MDIsIDB4NzAsIDB4MDMsIDB4QzAsIDB4M0YsIDB4MDAsIDB4QkYsIDB4MDAsCisweEZDLCAweDAzLCAweEYwLCAweDAzLCAweEMwLCAweDNGLCAweDAwLCAweEJGLCAweDQwLCAweEZDLCAweDAwLCAweEYwLCAweDBCLAorMHhDMCwgMHgzRiwgMHgwMCwgMHhBRiwgMHgwMCwgMHhGQywgMHgwMCwgMHhGMCwgMHgwRiwgMHhDMCwgMHgzRiwgMHgyMCwgMHhGRiwKKzB4MDAsIDB4Q0MsIDB4MDMsIDB4RjAsIDB4MEYsIDB4QzAsIDB4MkYsIDB4MDAsIDB4RkYsIDB4MDAsIDB4RkMsIDB4MDMsIDB4RjAsCisweDBGLCAweEM4LCAweDE3LCAweDIwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweDgwLCAweDJGLAorMHgwMCwgMHhCRiwgMHgwQywgMHhDQywgMHgxMiwgMHhGMCwgMHgxRiwgMHhDMCwgMHhCRSwgMHgwOSwgMHhCRiwgMHhDMCwgMHg5RCwKKzB4NDAsIDB4QjAsIDB4OEYsIDB4QzAsIDB4MkYsIDB4MDEsIDB4QjMsIDB4MTAsIDB4REMsIDB4RTIsIDB4MzAsIDB4MUYsIDB4QzAsCisweDNGLCAweDAxLCAweEYzLCAweDAyLCAweENDLCAweDAyLCAweDMzLCAweDE2LCAweEM0LCAweDNDLCAweDAwLCAweEVGLCAweDAxLAorMHhDQywgMHgzMywgMHgzMCwgMHgxRiwgMHhDMCwgMHg1QSwgMHgwMCwgMHhGQiwgMHgwMSwgMHhBQywgMHgyNywgMHhCMCwgMHgwQiwKKzB4QzAsIDB4MEYsIDB4MDAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDgsIDB4MDcsIDB4MDAsCisweDFELCAweDBFLCAweDQ0LCAweDEyLCAweEQwLCAweDRELCAweDQwLCAweDNDLCAweDAzLCAweDFELCAweDAzLCAweDQ0LCAweDBGLAorMHgxMCwgMHgyRiwgMHg0MCwgMHgyNywgMHgwNSwgMHhEMSwgMHgwNiwgMHg0NCwgMHgxMiwgMHgxMCwgMHgxRCwgMHg0OCwgMHhCRiwKKzB4MDAsIDB4RjEsIDB4MDYsIDB4NDQsIDB4MkMsIDB4MTAsIDB4MDUsIDB4NDEsIDB4QkMsIDB4MDIsIDB4REQsIDB4MDEsIDB4RDQsCisweDBCLCAweDEwLCAweDFELCAweDQwLCAweDc0LCAweDAwLCAweEQxLCAweDAxLCAweDQ0LCAweDAzLCAweDEwLCAweDAxLCAweDQwLAorMHgwRiwgMHgwMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMSwgMHhBMCwgMHhBMywgMHgwNSwgMHg4RCwKKzB4MDEsIDB4MDYsIDB4NjIsIDB4RDAsIDB4MDksIDB4NDEsIDB4MzAsIDB4MjAsIDB4OEQsIDB4MDgsIDB4MTUsIDB4MDMsIDB4OTIsCisweENDLCAweDQwLCAweDQzLCAweDAzLCAweEM1LCAweDEwLCAweDM0LCAweDEwLCAweDEyLCAweDBDLCAweDQyLCAweEIyLCAweDI1LAorMHhDMSwgMHg4QywgMHgwNCwgMHgwNCwgMHg1MCwgMHgwMSwgMHg1MCwgMHgzMCwgMHgwQywgMHg1RCwgMHgwMCwgMHgyNCwgMHgzMywKKzB4MTAsIDB4MEMsIDB4NDAsIDB4MDYsIDB4MDAsIDB4RDksIDB4QTAsIDB4NjQsIDB4MTIsIDB4OTAsIDB4MDgsIDB4NDAsIDB4NEYsCisweDgwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweEE4LCAweDY1LCAweDAwLCAweDFELCAweDAxLAorMHg0NCwgMHgwNiwgMHhEMCwgMHgxOSwgMHg1MCwgMHgzNCwgMHgwMCwgMHg5RCwgMHgwMywgMHg1NSwgMHgwRiwgMHgxMCwgMHgwRCwKKzB4NDIsIDB4NjcsIDB4MDAsIDB4RDUsIDB4MDAsIDB4NjQsIDB4MEMsIDB4MTAsIDB4MEQsIDB4NDAsIDB4MzcsIDB4MDAsIDB4RDEsCisweDAwLCAweDQ0LCAweDA0LCAweDQwLCAweDA1LCAweDQwLCAweDM0LCAweDAwLCAweERELCAweDgwLCAweDc0LCAweDAzLCAweDEwLAorMHgwRCwgMHg0MCwgMHg3NCwgMHgwMCwgMHg1OSwgMHgwMSwgMHg0NCwgMHgwMywgMHgxOCwgMHgxMSwgMHg0MSwgMHgwRiwgMHhBMCwKKzB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4QTgsIDB4NjcsIDB4MDQsIDB4MUYsIDB4MDEsIDB4NEMsCisweDE0LCAweEYwLCAweDVDLCAweEMwLCAweDM0LCAweDAwLCAweDlGLCAweDAxLCAweDVELCAweDBGLCAweEIwLCAweDBELCAweEMwLAorMHg0NywgMHgwMCwgMHhENywgMHgwMCwgMHg3QywgMHgwNiwgMHgzMCwgMHgwRCwgMHhFMCwgMHgzNywgMHgwMCwgMHhEMSwgMHgyMCwKKzB4NEMsIDB4MDYsIDB4NjAsIDB4MDQsIDB4QzAsIDB4MzQsIDB4MDAsIDB4OUYsIDB4MDEsIDB4NkUsIDB4MDMsIDB4MzAsIDB4MEMsCisweEMwLCAweDc2LCAweDAwLCAweERCLCAweDA1LCAweDJDLCAweDAzLCAweEIwLCAweDE5LCAweDQ0LCAweDIzLCAweDAwLCAweDBFLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNywgMHg4MCwgMHgwNSwgMHgwMCwgMHgxRiwgMHgxMCwgMHhGQywgMHgwMiwKKzB4RjAsIDB4MEYsIDB4QzAsIDB4M0YsIDB4MDQsIDB4M0YsIDB4NDAsIDB4QUMsIDB4MDMsIDB4RjIsIDB4MEYsIDB4QzAsIDB4MDcsCisweDBDLCAweEVCLCAweDA1LCAweDFDLCAweDAyLCAweEYwLCAweDBGLCAweEM4LCAweDNGLCAweDAwLCAweEZGLCAweDAwLCAweDNDLAorMHgwMCwgMHhCMiwgMHgwRiwgMHhDMCwgMHgzRiwgMHgwMCwgMHhCRiwgMHg4OSwgMHg5QywgMHgwMywgMHhGMCwgMHg1RiwgMHhDOCwKKzB4M0YsIDB4NDAsIDB4RjcsIDB4MDAsIDB4RkMsIDB4MDMsIDB4RjAsIDB4MEIsIDB4QzAsIDB4MUYsIDB4MjAsIDB4MDYsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweDA4LCAweEE1LCAweDgwLCAweDkzLCAweDAwLCAweDRDLCAweDAwLCAweEYwLAorMHgwOSwgMHhDMCwgMHgzNywgMHgwMCwgMHg5MywgMHg4MCwgMHg2QywgMHgwQiwgMHgzQywgMHgwRCwgMHhDMCwgMHgwNCwgMHgwMCwKKzB4RDMsIDB4MDAsIDB4N0MsIDB4MDIsIDB4MzAsIDB4MEQsIDB4QzAsIDB4MzIsIDB4MDAsIDB4REIsIDB4MDAsIDB4NEMsIDB4MDIsCisweDMxLCAweDBELCAweEUwLCAweDM0LCAweDEwLCAweDkzLCAweDAyLCAweDRDLCAweDAzLCAweDM0LCAweDRELCAweEMwLCAweDc0LAorMHgwMCwgMHg5MywgMHgwMCwgMHg0QywgMHgwMiwgMHhGMCwgMHgwOSwgMHhDMCwgMHgwOCwgMHgyMCwgMHgwNCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MTMsIDB4QTAsIDB4MjQsIDB4MTAsIDB4OUIsIDB4MDYsIDB4NDQsIDB4MDIsIDB4RDAsIDB4MDksCisweDQwLCAweDNGLCAweDAwLCAweDgxLCAweDBCLCAweDY4LCAweDA3LCAweEIwLCAweDFGLCAweEMwLCAweEU0LCAweDAwLCAweEQwLAorMHgwMCwgMHg3NCwgMHgwMiwgMHgxMCwgMHgwRCwgMHg0OCwgMHgzRiwgMHgwMCwgMHhGQiwgMHgxMCwgMHg0NCwgMHgwMiwgMHgwMCwKKzB4MEQsIDB4QzAsIDB4M0YsIDB4MDAsIDB4ODEsIDB4ODEsIDB4QzQsIDB4MkIsIDB4MTAsIDB4MkQsIDB4NDAsIDB4NzAsIDB4MDAsCisweDA1LCAweDA1LCAweDZDLCAweDJGLCAweDEwLCAweDQ5LCAweEMwLCAweDZFLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwNywgMHhBMCwgMHgwMiwgMHgwMCwgMHg5MSwgMHgwMiwgMHgyNCwgMHgwMCwgMHhEMCwgMHgwOCwgMHg2NCwKKzB4RjMsIDB4MDAsIDB4MDEsIDB4MDMsIDB4MjAsIDB4MDcsIDB4MTAsIDB4NUMsIDB4NDgsIDB4RTQsIDB4MDAsIDB4QzUsIDB4MDAsCisweDM0LCAweDAwLCAweDExLCAweDBDLCAweDQwLCAweDMxLCAweDAyLCAweEQ1LCAweDAxLCAweDA0LCAweDAyLCAweDUwLCAweDE0LAorMHg0MCwgMHg3MCwgMHgwMSwgMHhDMSwgMHgwMCwgMHgyNCwgMHgyMywgMHg5MCwgMHgyQywgMHg0MCwgMHgxMCwgMHgwMCwgMHhDMSwKKzB4MDEsIDB4MDQsIDB4MDcsIDB4NTAsIDB4NjAsIDB4NDQsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDA0LCAweDgwLCAweDU4LCAweDAwLCAweEU5LCAweDAxLCAweEE0LCAweDA1LCAweEQwLCAweDFBLCAweDYwLCAweDdCLAorMHgwNCwgMHg2MSwgMHgwMSwgMHhFNCwgMHgwNywgMHg5NCwgMHgxRSwgMHg0MCwgMHg3OCwgMHgwMCwgMHhFNSwgMHgwMSwgMHhCNCwKKzB4MDcsIDB4MTAsIDB4MUUsIDB4MDAsIDB4RkIsIDB4MDAsIDB4RUQsIDB4MDMsIDB4ODQsIDB4MDcsIDB4NTgsIDB4MzcsIDB4NDEsCisweDc5LCAweDA0LCAweEYxLCAweDAwLCAweEEwLCAweDA3LCAweDkxLCAweDBFLCAweDQwLCAweDc4LCAweDAwLCAweEY1LCAweDAxLAorMHhFNCwgMHgyNywgMHgxOCwgMHgxMiwgMHg0OCwgMHgzRSwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MTIsIDB4MTAsIDB4MTAsIDB4MDAsIDB4QzEsIDB4MDAsIDB4MjQsIDB4MDMsIDB4RjAsIDB4MDgsIDB4QzAsIDB4MzcsIDB4MDAsCisweDQzLCAweDE0LCAweDJDLCAweDQzLCAweDEwLCAweDhELCAweEMxLCAweDEwLCAweDA0LCAweEM3LCAweDAwLCAweDM0LCAweDIxLAorMHgzMCwgMHgwQywgMHhDMCwgMHgzNywgMHgwMCwgMHhENywgMHg4OCwgMHgwQywgMHgwMSwgMHg3MCwgMHgwMCwgMHg0MCwgMHgzNCwKKzB4MDAsIDB4QzMsIDB4MTgsIDB4NjQsIDB4MTMsIDB4QjAsIDB4OEMsIDB4NDAsIDB4MTAsIDB4MDAsIDB4QzMsIDB4MDAsIDB4MEMsCisweDQyLCAweDcwLCAweDA5LCAweEMwLCAweDQ4LCAweDYwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLAorMHg5OCwgMHgzRCwgMHgyMCwgMHhGNywgMHgwMCwgMHhEQywgMHgwMywgMHhGMCwgMHgwQiwgMHhDMCwgMHgzRiwgMHg0MCwgMHhFRiwKKzB4MDAsIDB4RkMsIDB4MjMsIDB4RjUsIDB4MEYsIDB4QzQsIDB4MzUsIDB4MDAsIDB4RkIsIDB4MDAsIDB4RkMsIDB4MDMsIDB4RjAsCisweDBGLCAweEMwLCAweEJGLCAweDAyLCAweEYzLCAweDAwLCAweEZDLCAweDAxLCAweEIwLCAweDA3LCAweEMwLCAweDNGLCAweDAwLAorMHhGRiwgMHgwQywgMHhEQywgMHgwMywgMHg3MCwgMHg0RSwgMHhDMCwgMHgzRiwgMHgwMCwgMHhFRiwgMHgwMCwgMHhGRSwgMHg4MywKKzB4NzAsIDB4MDcsIDB4QzgsIDB4MEIsIDB4NjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTUsIDB4QTAsCisweDM3LCAweDgwLCAweDVCLCAweDAwLCAweDVDLCAweDAxLCAweDM0LCAweDA5LCAweEMwLCAweEI3LCAweDA0LCAweENGLCAweDgwLAorMHg1QywgMHgwMywgMHhGOCwgMHg0RCwgMHhDOSwgMHgzNywgMHgwMCwgMHhERiwgMHgwMSwgMHg0QywgMHgwMSwgMHhGMCwgMHgwRCwKKzB4QzAsIDB4MzcsIDB4MDMsIDB4REYsIDB4MDIsIDB4N0UsIDB4MDMsIDB4RjAsIDB4MDUsIDB4QzAsIDB4QjYsIDB4MDIsIDB4REYsCisweDAwLCAweDVDLCAweDVCLCAweEYwLCAweDFELCAweEMwLCAweDM2LCAweDAwLCAweENGLCAweDIwLCAweDRDLCAweDAzLCAweDIyLAorMHgwMSwgMHhDNCwgMHg0MCwgMHgwMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHg4OCwgMHgxRCwKKzB4MDgsIDB4NjMsIDB4MDAsIDB4QjQsIDB4MDEsIDB4MTAsIDB4MEEsIDB4NDAsIDB4QkIsIDB4MTEsIDB4NkQsIDB4MDAsIDB4OTQsCisweDAzLCAweDMwLCAweDZFLCAweDQ4LCAweDNCLCAweDAwLCAweEVELCAweDAwLCAweDg0LCAweDAzLCAweEQwLCAweDBFLCAweDQwLAorMHgzQiwgMHgwMSwgMHhFRCwgMHg0OCwgMHhCNCwgMHgwMywgMHhEMCwgMHgwRiwgMHg0MCwgMHgzOCwgMHgwNCwgMHhBRCwgMHgwMCwKKzB4QjQsIDB4MEIsIDB4RDAsIDB4MEUsIDB4NDAsIDB4MzgsIDB4MDAsIDB4RUQsIDB4ODAsIDB4RDQsIDB4ODMsIDB4MTAsIDB4MDYsCisweEMwLCAweDRFLCAweDIwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweDAwLCAweDc5LCAweDAwLAorMHhFMSwgMHgwMSwgMHhCNCwgMHg0NywgMHgxMCwgMHgxQSwgMHg0MCwgMHg3QiwgMHgwMCwgMHhFRCwgMHgxMSwgMHhENCwgMHg0NywKKzB4NTAsIDB4MUUsIDB4NDgsIDB4NUIsIDB4MDAsIDB4RUQsIDB4MDEsIDB4QTUsIDB4MDUsIDB4RDAsIDB4MUUsIDB4NDAsIDB4N0IsCisweDAwLCAweEVELCAweDA5LCAweEI0LCAweDA3LCAweEQyLCAweDFFLCAweDU1LCAweDc4LCAweDAwLCAweEFELCAweDAxLCAweEI0LAorMHgwNywgMHhEMCwgMHgxQiwgMHg0MCwgMHg3QSwgMHgwMCwgMHhGNSwgMHgwMSwgMHg4NCwgMHgwNiwgMHgxNCwgMHgxOCwgMHg0MCwKKzB4MTAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4MjgsIDB4MzMsIDB4MTAsIDB4QzEsCisweDBELCAweDM0LCAweDA3LCAweDkwLCAweDAwLCAweDQwLCAweDMzLCAweDAwLCAweENELCAweDAzLCAweDE0LCAweDBCLCAweDkwLAorMHgwQywgMHg0MCwgMHhGMywgMHgwNCwgMHhDRCwgMHgwOCwgMHgwNCwgMHgwNywgMHhEMCwgMHgwQywgMHg0MCwgMHgzNywgMHgyMCwKKzB4Q0QsIDB4MDAsIDB4MzQsIDB4MjcsIDB4RDAsIDB4NEMsIDB4NDAsIDB4MzAsIDB4MDAsIDB4OEQsIDB4MDQsIDB4MzQsIDB4MDMsCisweEQwLCAweDE4LCAweDQwLCAweDcwLCAweDA4LCAweENELCAweDAxLCAweDE0LCAweDAzLCAweDEwLCAweEFELCAweDQzLCAweDVBLAorMHgyMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNywgMHhBOCwgMHgxRCwgMHgwNCwgMHg3MywgMHgwMiwKKzB4RkMsIDB4MDEsIDB4MzAsIDB4MjcsIDB4QzAsIDB4MTcsIDB4MTAsIDB4N0YsIDB4MDIsIDB4REQsIDB4QTksIDB4NzQsIDB4MDUsCisweEMwLCAweDlGLCAweDAwLCAweDVGLCAweDAwLCAweEVDLCAweDE1LCAweEYwLCAweDA1LCAweDQwLCAweDE3LCAweDgwLCAweDVGLAorMHgwMCwgMHhGQywgMHgwOSwgMHhGMCwgMHgzNiwgMHhDMCwgMHgxNCwgMHgwMCwgMHg3RiwgMHgwMiwgMHg3QywgMHgwMSwgMHhGOSwKKzB4MTUsIDB4QzIsIDB4MUUsIDB4MDQsIDB4NjcsIDB4ODEsIDB4NDQsIDB4MDEsIDB4MTAsIDB4MjcsIDB4QzAsIDB4NUMsIDB4MDAsCisweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDAwLCAweDQ3LCAweDQwLCAweDFGLCAweDAwLCAweDdDLAorMHg0MCwgMHg3MCwgMHg0MSwgMHhDMCwgMHg4MywgMHgwMCwgMHgxRiwgMHgxMiwgMHg3QywgMHgwMCwgMHg3NCwgMHgwMSwgMHhDMCwKKzB4MDcsIDB4MDIsIDB4MUYsIDB4MDAsIDB4NUMsIDB4MDQsIDB4RjAsIDB4MDEsIDB4QzIsIDB4ODcsIDB4MDAsIDB4MUYsIDB4MDAsCisweDdDLCAweDAwLCAweEYwLCAweDAxLCAweEMwLCAweDA1LCAweDAwLCAweDFGLCAweDBBLCAweDdDLCAweDAwLCAweEYwLCAweDgxLAorMHhDMCwgMHgwNywgMHgxMCwgMHgxRiwgMHgwOCwgMHg3QywgMHgwMCwgMHhGMCwgMHgyMSwgMHhDMCwgMHg0QiwgMHgyMCwgMHgwNCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4MjcsIDB4ODAsIDB4OTMsIDB4MDUsIDB4M0MsIDB4MDIsCisweDMwLCAweDA5LCAweEMwLCAweDY3LCAweDAyLCAweDgzLCAweDAwLCAweDRDLCAweDAyLCAweEIwLCAweDI4LCAweEMwLCAweDY0LAorMHgwMSwgMHg5RSwgMHgwMCwgMHg3OCwgMHgwMiwgMHgzMCwgMHgwOSwgMHhDMCwgMHhBNywgMHg0MCwgMHg5QiwgMHgwMSwgMHg3QywKKzB4NDIsIDB4RjAsIDB4NTksIDB4QzAsIDB4MjAsIDB4MDEsIDB4OTMsIDB4NDIsIDB4N0MsIDB4ODIsIDB4RjAsIDB4MzksIDB4QzAsCisweDI3LCAweDA0LCAweDk3LCAweDA4LCAweDZDLCAweDE2LCAweDMwLCAweDg5LCAweEMwLCAweDQwLCAweDIwLCAweDA0LCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgyNiwgMHgwMCwgMHg5MSwgMHgwMSwgMHg3NCwgMHgwMiwgMHgxMCwKKzB4MDksIDB4QzAsIDB4QTcsIDB4MDQsIDB4OTEsIDB4ODYsIDB4MEMsIDB4MDIsIDB4QjAsIDB4MDksIDB4NDAsIDB4NjQsIDB4MDAsCisweDlELCAweDAwLCAweDdDLCAweDAyLCAweDEwLCAweDA5LCAweDQwLCAweEU3LCAweDAwLCAweDkxLCAweDAxLCAweDc0LCAweDAyLAorMHhEMCwgMHg0OSwgMHhDMCwgMHhFNiwgMHgwNCwgMHg5MSwgMHgyMCwgMHg3NCwgMHgwRSwgMHhEMCwgMHgyOSwgMHg0MCwgMHgyMywKKzB4NDAsIDB4OUIsIDB4NDEsIDB4NDQsIDB4NDYsIDB4MTQsIDB4MzksIDB4NDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDE4LCAweEEwLCAweDIwLCAweDAwLCAweDkxLCAweDAwLCAweDc0LCAweDAyLCAweDEwLCAweDA5LAorMHg2MCwgMHgyNywgMHgwMCwgMHg5MSwgMHgwMCwgMHg2NSwgMHgyMiwgMHg5NCwgMHgwOSwgMHg1OCwgMHgyNiwgMHgwMCwgMHg5RCwKKzB4MDAsIDB4MzYsIDB4MDIsIDB4MTAsIDB4MDksIDB4NDAsIDB4MjcsIDB4MDAsIDB4OTEsIDB4MDgsIDB4NzQsIDB4MDIsIDB4RDAsCisweDA5LCAweDYwLCAweDI0LCAweDAwLCAweEQxLCAweDAwLCAweDc0LCAweDIyLCAweEQwLCAweDA5LCAweDQwLCAweDY3LCAweDAwLAorMHg5NSwgMHgwMCwgMHgwNCwgMHgwMiwgMHgxMiwgMHgyOSwgMHg0MCwgMHg2MCwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MTAsIDB4MjAsIDB4MjAsIDB4ODEsIDB4ODEsIDB4MDUsIDB4MzQsIDB4MTIsIDB4MTAsIDB4MDgsIDB4NDAsCisweDIxLCAweDA5LCAweDgxLCAweDA0LCAweDQ0LCAweDEyLCAweDkwLCAweDU4LCAweDQwLCAweDYyLCAweDAxLCAweDhELCAweDA0LAorMHgxNCwgMHgxMiwgMHgxMCwgMHgwOCwgMHg0MCwgMHgyMywgMHgwMSwgMHhDMSwgMHgwNCwgMHgzNCwgMHgxMiwgMHhEMCwgMHgwOSwKKzB4NjgsIDB4MjIsIDB4MDEsIDB4QzEsIDB4MDAsIDB4MzYsIDB4MTIsIDB4RDAsIDB4MEMsIDB4NDAsIDB4MjMsIDB4MDgsIDB4OTksCisweDAwLCAweDA1LCAweDIyLCAweDEwLCAweDQ4LCAweDUwLCAweDQwLCAweEEwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgxRCwgMHhCMCwgMHg4NiwgMHgwMiwgMHgxMSwgMHgwQSwgMHgzQywgMHgyOCwgMHgzMCwgMHhBMSwgMHg0MCwgMHg4NywKKzB4MDIsIDB4MTMsIDB4NDAsIDB4NkMsIDB4MDAsIDB4QjQsIDB4QTEsIDB4QzgsIDB4ODYsIDB4MDIsIDB4MEYsIDB4MEEsIDB4NzQsCisweDI4LCAweDM0LCAweDAxLCAweDg0LCAweDk3LCAweDAyLCAweDFCLCAweDBBLCAweDdDLCAweDAwLCAweEQwLCAweEExLCAweEMwLAorMHg4NCwgMHg0MiwgMHgxMywgMHg0MCwgMHg3QywgMHgyOSwgMHhGMCwgMHgwMSwgMHhDMCwgMHgwNywgMHgwMCwgMHgxNywgMHgwMCwKKzB4NEMsIDB4MDgsIDB4MzAsIDB4QTEsIDB4QzAsIDB4NzQsIDB4QzAsIDB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDE5LCAweDk4LCAweDJGLCAweDRBLCAweEJGLCAweDA4LCAweEZDLCAweDIyLCAweEQ0LCAweDBCLCAweEMwLCAweDI3LCAweDYyLAorMHhCRiwgMHg4OCwgMHhCQywgMHgyMiwgMHhGNCwgMHg4OSwgMHhDMCwgMHgyRCwgMHgwMiwgMHhCRiwgMHgwOCwgMHhGQywgMHgyMiwKKzB4RjAsIDB4MDksIDB4QzQsIDB4MjcsIDB4MDIsIDB4OUYsIDB4MDgsIDB4RkMsIDB4MjIsIDB4RjAsIDB4MEIsIDB4QzAsIDB4MjcsCisweDAyLCAweEJGLCAweDQwLCAweDdDLCAweDIyLCAweEQwLCAweDBBLCAweEMwLCAweDJGLCAweDgwLCAweEJGLCAweDAwLCAweERFLAorMHg5MiwgMHhGMCwgMHg4QiwgMHhDMCwgMHg3NywgMHgyMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwKKzB4QTAsIDB4MjcsIDB4MDEsIDB4QjMsIDB4MTQsIDB4N0MsIDB4MzIsIDB4MzAsIDB4MDksIDB4RDAsIDB4MkMsIDB4NDAsIDB4QTMsCisweDAwLCAweDlDLCAweDEyLCAweDMwLCAweDRCLCAweEMxLCAweDJDLCAweDAzLCAweDlGLCAweDI1LCAweDdDLCAweDAyLCAweEYwLAorMHgwOSwgMHhDMCwgMHgyRCwgMHgwMSwgMHhCRiwgMHgxNCwgMHg0QywgMHgxMiwgMHg3MCwgMHgwQiwgMHhDMCwgMHgyRiwgMHg0MCwKKzB4QjMsIDB4MDAsIDB4RkMsIDB4MTIsIDB4RjAsIDB4MEIsIDB4QzAsIDB4MkYsIDB4MDAsIDB4QUIsIDB4MDAsIDB4OEMsIDB4MDIsCisweEYwLCAweDBCLCAweEMwLCAweDc2LCAweDAwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFDLCAweDA4LAorMHgxNywgMHgwRCwgMHgxMSwgMHg0NCwgMHg3NCwgMHhCMCwgMHgxMCwgMHgwMCwgMHg0MSwgMHgwNCwgMHgwNCwgMHgxMSwgMHgwOCwKKzB4NDQsIDB4MDAsIDB4OTAsIDB4NDEsIDB4NDAsIDB4MDQsIDB4MDMsIDB4MUQsIDB4MUEsIDB4NzQsIDB4NDAsIDB4RDAsIDB4MDEsCisweDQwLCAweDA3LCAweDA1LCAweDFELCAweDA0LCAweDQ0LCAweDIwLCAweEQwLCAweDAxLCAweDQzLCAweDA3LCAweDA0LCAweDExLAorMHgwMCwgMHg3NCwgMHg1MCwgMHhEMCwgMHgwMSwgMHg0MCwgMHgwNywgMHgwMCwgMHgxMSwgMHg0MCwgMHg0NSwgMHgwMCwgMHhEMiwKKzB4MDUsIDB4NDAsIDB4NjAsIDB4MDAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4QTAsIDB4MjMsCisweDAzLCAweDgxLCAweDM0LCAweDM0LCAweDEyLCAweDEwLCAweDQ4LCAweDQwLCAweDIwLCAweDAyLCAweDgxLCAweDAwLCAweDU0LAorMHgyNywgMHg5MCwgMHg0OCwgMHg0MSwgMHgyMCwgMHgwMSwgMHg4RCwgMHgwNCwgMHgzNCwgMHgyMiwgMHhEMCwgMHgwOCwgMHg0MCwKKzB4MjEsIDB4MDMsIDB4OEQsIDB4QjQsIDB4MDQsIDB4ODIsIDB4NTAsIDB4NDgsIDB4NDAsIDB4MjMsIDB4MDIsIDB4QzUsIDB4MDAsCisweDM0LCAweDMyLCAweEQwLCAweDA4LCAweDQwLCAweDI3LCAweDgwLCAweDg5LCAweDAwLCAweDI0LCAweDgyLCAweEQwLCAweDBDLAorMHg0MCwgMHg0QSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHhBOCwgMHgyNSwgMHg0MCwKKzB4OTEsIDB4MDYsIDB4NzQsIDB4MDIsIDB4MTAsIDB4MjksIDB4NDAsIDB4MjQsIDB4MDAsIDB4OTEsIDB4MDQsIDB4NDQsIDB4MDIsCisweDkwLCAweDA5LCAweDUwLCAweDI0LCAweDAxLCAweDlELCAweDA4LCAweDc0LCAweDAyLCAweEQwLCAweDA5LCAweDQwLCAweDI3LAorMHgwMCwgMHg5RCwgMHgwMCwgMHg0NCwgMHgwMiwgMHhEMCwgMHgwRCwgMHg0OCwgMHgzNywgMHgwMCwgMHg5NSwgMHgxMCwgMHg3NCwKKzB4ODIsIDB4RDAsIDB4OEQsIDB4NDQsIDB4NjcsIDB4ODgsIDB4OTEsIDB4MDgsIDB4NjQsIDB4ODIsIDB4RDAsIDB4MTksIDB4NDAsCisweDYyLCAweDIwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDA4LCAweDI1LCAweDAwLCAweDkzLAorMHg4MiwgMHg3QywgMHgxRSwgMHgzMSwgMHgwOSwgMHhDMCwgMHgyNCwgMHgxMCwgMHg5MywgMHgwNiwgMHg1QywgMHgwQSwgMHgzNCwKKzB4MDksIDB4QzQsIDB4MjQsIDB4MDEsIDB4OUUsIDB4MDAsIDB4N0MsIDB4MzIsIDB4RjAsIDB4MDksIDB4QzAsIDB4MjUsIDB4MDAsCisweDlGLCAweDAwLCAweDRDLCAweDFFLCAweDcwLCAweEU5LCAweEMwLCAweDI3LCAweDAwLCAweDk3LCAweDAwLCAweDc0LCAweDAyLAorMHhGMCwgMHgwOSwgMHhDMCwgMHgyMywgMHgwMCwgMHg5QiwgMHgwNCwgMHg2RSwgMHgyNiwgMHhEMiwgMHgwOSwgMHhDMCwgMHgxNiwKKzB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDAsIDB4RTEsIDB4MDAsIDB4OUYsIDB4MDAsCisweDdDLCAweDE2LCAweEY2LCAweDk5LCAweEMwLCAweDIzLCAweDI4LCAweDlGLCAweDIwLCAweDdDLCAweDEyLCAweDcwLCAweDA5LAorMHhDNSwgMHgyNywgMHgwQywgMHg5RiwgMHgwMCwgMHg3QywgMHgwMiwgMHhGMCwgMHgwOSwgMHhFMCwgMHgyNywgMHhBMCwgMHg4RiwKKzB4MDAsIDB4N0QsIDB4MTIsIDB4RjAsIDB4MTksIDB4QzMsIDB4MjcsIDB4MDAsIDB4OUIsIDB4MDIsIDB4N0MsIDB4NDIsIDB4RjAsCisweDA5LCAweEMwLCAweDI3LCAweDAwLCAweDlGLCAweDAwLCAweDVFLCAweDA2LCAweEYyLCAweDA4LCAweEMwLCAweDU5LCAweDIwLAorMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwOCwgMHgwNSwgMHgwMCwgMHgxRiwgMHgwMiwgMHg3QywKKzB4MDAsIDB4MzAsIDB4MDEsIDB4QzAsIDB4MDYsIDB4MDEsIDB4MUYsIDB4MDIsIDB4NkMsIDB4MDAsIDB4QjAsIDB4MDAsIDB4QzAsCisweDA3LCAweDAwLCAweDFGLCAweDAwLCAweDdDLCAweDA4LCAweEYwLCAweDAxLCAweEMwLCAweDA3LCAweDA0LCAweDEzLCAweDAwLAorMHg3QywgMHgwOCwgMHhGMCwgMHgyMSwgMHhDMCwgMHgwNiwgMHg0MSwgMHgxMywgMHgwMCwgMHg0QywgMHgwMCwgMHgzMSwgMHgwMSwKKzB4QzEsIDB4MDcsIDB4MjAsIDB4MUYsIDB4MDIsIDB4NEQsIDB4MDAsIDB4NzAsIDB4MDEsIDB4QzEsIDB4NTAsIDB4MjAsIDB4MDQsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDIwLCAweDE0LCAweDAwLCAweDdELCAweDAyLCAweDc0LCAweDAxLAorMHgxMiwgMHgwNSwgMHhDMCwgMHg5QywgMHgwNCwgMHg2RCwgMHgyMSwgMHgwNCwgMHg4MSwgMHgxMCwgMHg1NywgMHg0MCwgMHg1RiwKKzB4MDEsIDB4NUQsIDB4ODAsIDB4NzQsIDB4MDEsIDB4RDAsIDB4MDUsIDB4NDIsIDB4MUYsIDB4MjAsIDB4NzEsIDB4MDgsIDB4NzQsCisweDAxLCAweEQwLCAweDU3LCAweEMwLCAweDFDLCAweDAxLCAweDcxLCAweDAwLCAweEM0LCAweDA1LCAweDEwLCAweDI3LCAweEMxLAorMHg5RCwgMHgwNCwgMHg0MSwgMHgwNSwgMHhDNCwgMHhBRCwgMHgxMCwgMHgwNywgMHg1MCwgMHg0MCwgMHgwMCwgMHgwMiwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4QTAsIDB4MzIsIDB4MDAsIDB4Q0QsIDB4MTMsIDB4NzQsIDB4MDMsIDB4MTAsCisweDBELCAweDQyLCAweDMwLCAweDEwLCAweENELCAweDA0LCAweDI0LCAweDAyLCAweDkwLCAweDNDLCAweDQwLCAweDczLCAweDAwLAorMHhDRCwgMHgwMCwgMHgzNCwgMHgwMywgMHhEMCwgMHgwQywgMHg0MCwgMHhGMywgMHgwMCwgMHhDMSwgMHgwMCwgMHgzNCwgMHgwMywKKzB4RDAsIDB4MEMsIDB4NDAsIDB4MzQsIDB4ODAsIDB4NDksIDB4NTAsIDB4MDUsIDB4MDcsIDB4MTAsIDB4MTgsIDB4NDAsIDB4RDMsCisweDAxLCAweEM1LCAweDAxLCAweDA0LCAweDA3LCAweDUwLCAweDBDLCAweDQwLCAweDQwLCAweDAwLCAweDBBLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHg4OCwgMHgzOCwgMHgwMiwgMHhFRCwgMHgwMiwgMHgzNCwgMHgwMywgMHgxNCwgMHg0RSwKKzB4NDAsIDB4MzgsIDB4MDAsIDB4RUQsIDB4MDIsIDB4QzQsIDB4MDMsIDB4MTAsIDB4MEUsIDB4NDIsIDB4M0IsIDB4MDgsIDB4RUQsCisweDBDLCAweEI2LCAweDAzLCAweEQwLCAweDBFLCAweDQwLCAweEYzLCAweDAwLCAweEUxLCAweDEwLCAweEI0LCAweDAzLCAweEQwLAorMHgxRSwgMHg0MCwgMHgzOCwgMHg4MCwgMHg2OSwgMHgwMSwgMHg4NCwgMHg0NSwgMHgxMiwgMHgwQSwgMHg0MCwgMHgxOSwgMHgwMCwKKzB4QjEsIDB4MDAsIDB4QzQsIDB4NDUsIDB4MTAsIDB4MEEsIDB4NDIsIDB4MTAsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDE0LCAweDEwLCAweDc4LCAweDAwLCAweEVGLCAweDAxLCAweEJDLCAweDQ3LCAweDMwLCAweDVFLCAweEMyLAorMHg3OCwgMHgxMCwgMHg2RiwgMHgwMSwgMHhBQywgMHgwNywgMHhCMCwgMHgxRSwgMHhDMCwgMHg3QiwgMHgwMCwgMHhFRiwgMHgwMSwKKzB4QjQsIDB4MTcsIDB4RjAsIDB4MUUsIDB4ODAsIDB4N0IsIDB4NDAsIDB4RTMsIDB4MDEsIDB4QjQsIDB4MDcsIDB4RjAsIDB4MTcsCisweEQwLCAweDcwLCAweDAwLCAweEVCLCAweDAxLCAweENDLCAweDA3LCAweDM0LCAweDFBLCAweEMwLCAweDVCLCAweDAwLCAweEU3LAorMHgwMSwgMHg4QywgMHgwNywgMHg3MCwgMHgxNywgMHhDMCwgMHg1MCwgMHg2MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MTAsIDB4QTgsIDB4MzUsIDB4MDQsIDB4REYsIDB4MDAsIDB4N0MsIDB4MzMsIDB4RjAsIDB4OEQsIDB4RDAsIDB4MTUsCisweDAwLCAweDVGLCAweDAwLCAweDdDLCAweDAzLCAweEYwLCAweDA1LCAweEM0LCAweDM3LCAweDEwLCAweERGLCAweDA2LCAweDdDLAorMHg1MywgMHhGMCwgMHgwRCwgMHhDNCwgMHgzNywgMHgwMCwgMHg1RiwgMHgwMCwgMHg3QywgMHg4MywgMHhGMCwgMHgwNSwgMHhDMCwKKzB4MzUsIDB4MDAsIDB4QzcsIDB4MDAsIDB4N0MsIDB4MDEsIDB4RjAsIDB4MDksIDB4QzQsIDB4MTMsIDB4MDAsIDB4OTcsIDB4MDAsCisweDdDLCAweDAxLCAweEYwLCAweDAxLCAweEMwLCAweDQzLCAweDYwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMiwgMHhBMCwgMHg3RiwgMHgwMCwgMHg3RiwgMHgyMSwgMHhDQywgMHgwNywgMHhGOCwgMHhBRSwgMHhDMCwgMHg1RiwgMHgwOCwKKzB4RUYsIDB4MDEsIDB4Q0MsIDB4MDcsIDB4NzAsIDB4OUYsIDB4QzQsIDB4NUMsIDB4MDIsIDB4RjMsIDB4MEIsIDB4Q0MsIDB4NDcsCisweDMxLCAweDFGLCAweDQwLCAweDVGLCAweDIwLCAweDdGLCAweDAxLCAweENDLCAweDA3LCAweEYwLCAweDFGLCAweEMwLCAweDdDLAorMHgwMCwgMHhGRiwgMHgwMSwgMHhGQywgMHgwNywgMHgzMSwgMHg5QiwgMHhDMCwgMHg3RiwgMHgwMCwgMHhFRiwgMHgwMSwgMHhDRiwKKzB4MzYsIDB4MzAsIDB4REYsIDB4RDAsIDB4MTgsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTUsCisweDg4LCAweDM5LCAweDAwLCAweDdELCAweDEwLCAweDg0LCAweDIzLCAweEQ4LCAweDRFLCAweDA0LCAweEI4LCAweDAwLCAweEFELAorMHgwNCwgMHg4MSwgMHgwMywgMHgxMCwgMHhBRiwgMHg0MCwgMHgxQywgMHgwMiwgMHhGMSwgMHgyMCwgMHhENSwgMHgwMywgMHgxNCwKKzB4MEUsIDB4NDAsIDB4MUEsIDB4MDEsIDB4NkQsIDB4MDgsIDB4ODUsIDB4MDMsIDB4RDAsIDB4OEUsIDB4MDAsIDB4MzksIDB4MDIsCisweEVELCAweDAwLCAweEE0LCAweDExLCAweDEwLCAweDhBLCAweDQwLCAweEJCLCAweDAxLCAweEVELCAweDA0LCAweERDLCAweDIwLAorMHgxMCwgMHhDQSwgMHg0MCwgMHg1NCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MzksIDB4MDAsIDB4NkQsIDB4MDAsIDB4ODUsIDB4MDMsIDB4RDAsIDB4OEYsIDB4NDAsIDB4MTksIDB4MDAsIDB4NkQsIDB4NDAsCisweEMwLCAweDAzLCAweDUwLCAweDBFLCAweDQyLCAweDE4LCAweDY0LCAweEUxLCAweDAwLCAweDgwLCAweDQzLCAweDEwLCAweDBFLAorMHg0MCwgMHgzQSwgMHgwOCwgMHhDRCwgMHgwMCwgMHg4NCwgMHgwMywgMHhEMCwgMHgwNywgMHg0MCwgMHgxOCwgMHgwMCwgMHhFRCwKKzB4MDAsIDB4MzQsIDB4MDMsIDB4MTIsIDB4MEEsIDB4NDgsIDB4M0IsIDB4MjQsIDB4RkQsIDB4MjAsIDB4ODQsIDB4NTIsIDB4MTIsCisweENBLCAweDQwLCAweDIwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA2LCAweDI4LCAweDczLAorMHgxMiwgMHgwRCwgMHgwMiwgMHgwNCwgMHg0QiwgMHhEMCwgMHgyQywgMHg0MCwgMHgwNCwgMHgwMCwgMHgwRCwgMHgwOCwgMHgwNCwKKzB4NkYsIDB4MTAsIDB4MDgsIDB4NDAsIDB4NDAsIDB4MDAsIDB4QzEsIDB4NDAsIDB4MDQsIDB4MEYsIDB4MTAsIDB4MEMsIDB4NDAsCisweDIyLCAweDAwLCAweDBELCAweDAwLCAweDA0LCAweDBGLCAweEQyLCAweDAwLCAweDQwLCAweDIxLCAweDAwLCAweENELCAweDg1LAorMHgyNCwgMHgwMCwgMHgxMCwgMHgwOCwgMHg0MCwgMHg3MywgMHgxMSwgMHhDRCwgMHgwMCwgMHgxNCwgMHgwNCwgMHgxMCwgMHgzOCwKKzB4NDAsIDB4MDgsIDB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTUsIDB4QTgsIDB4M0QsIDB4MDAsCisweDlGLCAweDAwLCAweENDLCAweDFGLCAweEQwLCAweDJGLCAweDgwLCAweDI1LCAweDAwLCAweDhGLCAweDIwLCAweDRDLCAweDBGLAorMHg3NCwgMHgwMSwgMHhEMiwgMHhFNCwgMHgwMCwgMHhGMywgMHgwMCwgMHhDNCwgMHgwNywgMHgzMCwgMHgwRCwgMHhDMCwgMHgyNiwKKzB4MDAsIDB4OUYsIDB4MDAsIDB4NEMsIDB4MEIsIDB4RjAsIDB4MzksIDB4QzEsIDB4MDQsIDB4MDAsIDB4NEYsIDB4NDcsIDB4NzQsCisweDAyLCAweDM0LCAweDA5LCAweEMwLCAweEYzLCAweDAwLCAweERGLCAweDAwLCAweDQ0LCAweDA3LCAweDM0LCAweDIxLCAweDgwLAorMHg1NCwgMHgwMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgzNywgMHgyMSwgMHg5RiwKKzB4MTAsIDB4N0MsIDB4MDMsIDB4RjAsIDB4MEQsIDB4QzAsIDB4QTUsIDB4MDAsIDB4OUYsIDB4MTAsIDB4N0QsIDB4MDMsIDB4RjAsCisweDA5LCAweEMwLCAweEE3LCAweDA0LCAweERGLCAweDAxLCAweDdDLCAweDAzLCAweEYwLCAweDBELCAweEMwLCAweDg2LCAweDAwLAorMHg5RiwgMHgwMiwgMHg3QywgMHgyMywgMHhGMCwgMHg0MSwgMHhDMCwgMHg4NywgMHgwMCwgMHg1RiwgMHg0MCwgMHg2QywgMHgwMiwKKzB4RjAsIDB4MjksIDB4QzAsIDB4QjcsIDB4MDAsIDB4OUYsIDB4OTAsIDB4NUMsIDB4MDksIDB4RjAsIDB4QzksIDB4QzAsIDB4MzcsCisweDIwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDA4LCAweDNGLCAweDgwLCAweDNGLCAweDAwLAorMHhGQywgMHgwMywgMHhGMCwgMHgwRiwgMHhDMSwgMHgyRiwgMHgwMCwgMHgzMywgMHg4OSwgMHhDQywgMHgwNywgMHgxMCwgMHgwMywKKzB4QzAsIDB4MEYsIDB4MDAsIDB4RkYsIDB4MDAsIDB4RjQsIDB4NDMsIDB4RjAsIDB4MEYsIDB4QzAsIDB4MkYsIDB4MDAsIDB4QkYsCisweDAwLCAweEZDLCAweDQzLCAweEMwLCAweDBCLCAweEMwLCAweDJDLCAweDAwLCAweEZGLCAweDAwLCAweERDLCAweDAyLCAweEYwLAorMHgwQiwgMHhDMCwgMHgzRiwgMHgwMCwgMHhCNywgMHgwMCwgMHhGQywgMHgwNywgMHgzNCwgMHgwMSwgMHhDOCwgMHgwNywgMHgyNCwKKzB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODEsIDB4MjAsIDB4MzYsIDB4ODAsIDB4OUQsIDB4MDcsIDB4NzQsCisweDgzLCAweEQwLCAweDBELCAweDQyLCAweEU3LCAweDIwLCAweDExLCAweDg3LCAweDA0LCAweDA3LCAweEIwLCAweDMxLCAweDQwLAorMHhFNywgMHgwMCwgMHhERCwgMHgyMCwgMHg2NCwgMHgwMywgMHhEMCwgMHgwRCwgMHg0MCwgMHg0NiwgMHgwMCwgMHg5OSwgMHgwMSwKKzB4NzQsIDB4ODMsIDB4OTEsIDB4MzAsIDB4NDAsIDB4RTUsIDB4MDAsIDB4REQsIDB4MDEsIDB4NDQsIDB4MDYsIDB4RDAsIDB4MzksCisweDQwLCAweDc3LCAweDAwLCAweDkxLCAweDAwLCAweDc0LCAweDAyLCAweDEwLCAweDMxLCAweDQ0LCAweDg3LCAweDAwLCAweDA4LAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHhBMCwgMHgzNiwgMHgyMCwgMHg5RCwgMHgwMSwgMHg3NCwgMHgwMywKKzB4RDAsIDB4MEQsIDB4NjQsIDB4NDcsIDB4NDAsIDB4OTEsIDB4MDAsIDB4NDQsIDB4MjMsIDB4NTAsIDB4MTEsIDB4NDAsIDB4NjcsCisweDA0LCAweERELCAweDAwLCAweDc0LCAweDAzLCAweEQwLCAweDBELCAweDQwLCAweEM3LCAweDAwLCAweDFELCAweDAzLCAweDc0LAorMHgwMywgMHhEMCwgMHgxOSwgMHg0MCwgMHg0NywgMHgwMCwgMHg5RCwgMHgwMSwgMHg1NCwgMHhDNCwgMHhEMCwgMHgxRCwgMHg0MCwKKzB4NzcsIDB4MDAsIDB4RDUsIDB4MDEsIDB4MzQsIDB4MUEsIDB4MTAsIDB4MzEsIDB4NDAsIDB4MDcsIDB4MDAsIDB4MEEsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDAwLCAweDMwLCAweDAwLCAweDhELCAweDAwLCAweDM0LCAweDAzLCAweEQwLAorMHgwQywgMHg2MCwgMHgyMywgMHgwMCwgMHg4MSwgMHgwMCwgMHg0NCwgMHgwMywgMHhENCwgMHgwOCwgMHg0MCwgMHgyMywgMHgyMCwKKzB4Q0QsIDB4MDAsIDB4MzQsIDB4MDMsIDB4RDAsIDB4MEMsIDB4NDAsIDB4MDMsIDB4MDAsIDB4MDksIDB4MDAsIDB4MzQsIDB4MDMsCisweDkwLCAweDA5LCAweDQwLCAweDAzLCAweDAwLCAweENELCAweDAwLCAweDA0LCAweDAwLCAweEQwLCAweDBDLCAweDQwLCAweDMzLAorMHgwMCwgMHhDMSwgMHgwMCwgMHgzNCwgMHgwMSwgMHgxMCwgMHgwOCwgMHg0MCwgMHg0MywgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4M0UsIDB4MDAsIDB4MUQsIDB4MDAsIDB4RkMsIDB4MDMsIDB4RjAsIDB4MEYsCisweEMwLCAweDA3LCAweDA4LCAweDkzLCAweDAwLCAweDRELCAweDAzLCAweDcwLCAweDAxLCAweEMwLCAweDA3LCAweDAwLCAweEZGLAorMHgwMCwgMHhGQywgMHgwMywgMHhGMCwgMHgwRCwgMHhDNCwgMHgyNywgMHgwMCwgMHg5RiwgMHgwMCwgMHg3QywgMHgwMywgMHhGMCwKKzB4MDksIDB4RDAsIDB4MDYsIDB4MDAsIDB4REYsIDB4MDAsIDB4NUMsIDB4MDIsIDB4RjAsIDB4MDksIDB4QzAsIDB4MzcsIDB4MDAsCisweDk3LCAweDAwLCAweDdDLCAweDAwLCAweDMwLCAweDAxLCAweEMwLCAweDA3LCAweDYwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwNSwgMHhCOCwgMHgzRiwgMHgwMCwgMHhCRiwgMHgwMCwgMHhGQywgMHgwMywgMHhGMCwgMHgwRiwgMHhDMCwKKzB4MkYsIDB4MDAsIDB4M0YsIDB4MDAsIDB4QkMsIDB4MDMsIDB4QTAsIDB4MEIsIDB4QzAsIDB4MkYsIDB4MDAsIDB4RkUsIDB4MDAsCisweEVDLCAweDAzLCAweEYwLCAweDBGLCAweEMwLCAweDBFLCAweDAwLCAweEJBLCAweDAwLCAweEZDLCAweDAzLCAweEIwLCAweDBBLAorMHhDMCwgMHgyRCwgMHgwMCwgMHhGRiwgMHgwMCwgMHhGQywgMHgwMiwgMHhGMCwgMHgwMywgMHhDMiwgMHgyRiwgMHgwMCwgMHhCRiwKKzB4MDAsIDB4RkMsIDB4MDAsIDB4RjIsIDB4MEIsIDB4QzAsIDB4MTcsIDB4NjEsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAzLCAweEEwLCAweDJGLCAweDQwLCAweDIzLCAweDEwLCAweENELCAweDAwLCAweDMwLCAweDAzLCAweEMwLCAweDRDLAorMHg0MCwgMHgzMywgMHg4MSwgMHhDQywgMHgyNCwgMHgzMCwgMHgxMywgMHhEMCwgMHgyQywgMHgwNSwgMHhGMywgMHgwOSwgMHhEQywKKzB4MDAsIDB4MzAsIDB4NEUsIDB4QzAsIDB4MkMsIDB4MDAsIDB4M0YsIDB4MDEsIDB4Q0QsIDB4MDQsIDB4RjEsIDB4MTMsIDB4QzAsCisweDRDLCAweDA4LCAweDMzLCAweDAxLCAweEZDLCAweDA0LCAweEIwLCAweDEzLCAweEQ0LCAweDRDLCAweDQwLCAweEYzLCAweDAwLAorMHhDRCwgMHgwNywgMHhGMCwgMHg0RiwgMHhDMSwgMHgwQywgMHgwMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDEsIDB4MDAsIDB4MjcsIDB4MDAsIDB4NTEsIDB4OTIsIDB4MDQsIDB4MDgsIDB4MTMsIDB4MDksIDB4NDAsIDB4MDQsIDB4MDUsCisweDExLCAweDEwLCAweDQ0LCAweDAxLCAweDEwLCAweDAxLCAweDQxLCAweEE0LCAweDA1LCAweEMxLCAweDA0LCAweDQ0LCAweDJDLAorMHgxMCwgMHgzRiwgMHhDMCwgMHg2NCwgMHgwMiwgMHgxRCwgMHgwMCwgMHg2NCwgMHgwNCwgMHhEMCwgMHgwNSwgMHhDMCwgMHgwNCwKKzB4MjAsIDB4MTEsIDB4MDEsIDB4NzQsIDB4MDQsIDB4MTAsIDB4MDEsIDB4NjAsIDB4MDQsIDB4MDAsIDB4QzEsIDB4MDAsIDB4NDQsCisweDA3LCAweEQxLCAweDJELCAweDQwLCAweDBDLCAweDIwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDExLAorMHhBMCwgMHgyNywgMHgwMCwgMHgwMSwgMHgwNSwgMHgwNiwgMHgwQywgMHgxMCwgMHgwMCwgMHg0MCwgMHgyMCwgMHgwMSwgMHg4MSwKKzB4MDAsIDB4MTQsIDB4MDIsIDB4MTAsIDB4NDgsIDB4NDgsIDB4MjEsIDB4MDAsIDB4ODEsIDB4MDQsIDB4MzQsIDB4MDAsIDB4RDQsCisweDhDLCAweDQ0LCAweDMwLCAweDAwLCAweDhELCAweDAwLCAweDM0LCAweDAxLCAweEQwLCAweDAwLCAweDQyLCAweDQ2LCAweDIwLAorMHgwRCwgMHgwMSwgMHg3NCwgMHgwMiwgMHgxMCwgMHgwOCwgMHg0MCwgMHgyMCwgMHgwMCwgMHhDOSwgMHgwMCwgMHgyNCwgMHgwMywKKzB4RDAsIDB4MEMsIDB4NDAsIDB4NEMsIDB4ODAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4QTgsCisweDI1LCAweDAyLCAweDUxLCAweDQ0LCAweDE0LCAweDA0LCAweDE0LCAweDFELCAweDQwLCAweDIwLCAweDAwLCAweDgwLCAweDAwLAorMHg1NSwgMHgwMywgMHgxNCwgMHgwOSwgMHg0MCwgMHg2NCwgMHgwMCwgMHg1MSwgMHgwMCwgMHg2NCwgMHgwQywgMHhDMCwgMHgxRCwKKzB4NDQsIDB4NzYsIDB4MDQsIDB4OEQsIDB4MDAsIDB4NzQsIDB4ODksIDB4RDAsIDB4MDUsIDB4NTAsIDB4MDQsIDB4MDAsIDB4MTUsCisweDAwLCAweDc0LCAweDAyLCAweDEwLCAweDA4LCAweDQwLCAweDIwLCAweDAwLCAweDk5LCAweDAwLCAweDQ0LCAweDAzLCAweEQwLAorMHgxQywgMHg0MCwgMHgwQywgMHgyMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhBMCwgMHg0MywKKzB4MDAsIDB4MTMsIDB4MDAsIDB4NEMsIDB4MDQsIDB4MzAsIDB4MzEsIDB4QzIsIDB4MDQsIDB4MDAsIDB4MTMsIDB4MDEsIDB4NUMsCisweDAwLCAweDMwLCAweDExLCAweEMwLCAweEU0LCAweDA0LCAweEQzLCAweDA0LCAweDdDLCAweDBDLCAweEYwLCAweDM1LCAweEMwLAorMHhFNCwgMHgwMCwgMHgxRiwgMHgwMCwgMHg1QywgMHgwMCwgMHhGMCwgMHgyMSwgMHhDMCwgMHgxMiwgMHgwMCwgMHg1NywgMHgwMCwKKzB4M0MsIDB4MDEsIDB4QjAsIDB4MDEsIDB4NDAsIDB4MDQsIDB4MDAsIDB4REIsIDB4MDAsIDB4NEMsIDB4MDMsIDB4RjAsIDB4MUQsCisweEMwLCAweDA4LCAweDIwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA3LCAweDg4LCAweDRELCAweDAwLAorMHg3RiwgMHgwMCwgMHhFQywgMHgwMCwgMHhGMCwgMHgwRiwgMHhDMCwgMHgwRiwgMHgxMiwgMHgzRiwgMHgwOSwgMHhFQywgMHgwMSwKKzB4RjAsIDB4OTMsIDB4ODAsIDB4MkYsIDB4NTAsIDB4RkYsIDB4MDAsIDB4NUMsIDB4MDAsIDB4MzAsIDB4MDYsIDB4QzAsIDB4MjUsCisweDAwLCAweDNGLCAweDA4LCAweENDLCAweDAwLCAweEYyLCAweDA3LCAweEM0LCAweDFGLCAweDAwLCAweDdCLCAweDAwLCAweEZDLAorMHg4MSwgMHhGMCwgMHg4MywgMHhDMCwgMHgwRiwgMHgwMiwgMHhFNywgMHgwOCwgMHhGQywgMHgwMywgMHhGMCwgMHgwRiwgMHhENCwKKzB4MUYsIDB4MDAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDgsIDB4MjUsIDB4NDAsIDB4MzMsCisweDAwLCAweDRDLCAweDAwLCAweDMyLCAweDMxLCAweEMwLCAweDY0LCAweDAwLCAweDlGLCAweDAxLCAweDRDLCAweDAyLCAweEYwLAorMHgwOSwgMHhDMCwgMHgyNCwgMHgwMCwgMHg1MywgMHgwNCwgMHg2QywgMHg4OCwgMHhCMCwgMHgyRCwgMHhDMCwgMHgzNCwgMHgxMSwKKzB4OTcsIDB4MDUsIDB4N0MsIDB4MDEsIDB4MzAsIDB4NDEsIDB4QzAsIDB4MTcsIDB4MDIsIDB4NUIsIDB4MTAsIDB4NEMsIDB4MDMsCisweDMwLCAweDE5LCAweEMwLCAweDY0LCAweDAwLCAweDlGLCAweDA0LCAweDRDLCAweDAzLCAweEYwLCAweDE1LCAweEMwLCAweDA4LAorMHgyMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMywgMHhBMCwgMHgyNCwgMHgyMCwgMHg0MSwgMHgwMSwKKzB4NDQsIDB4MTQsIDB4MTAsIDB4QkQsIDB4NDAsIDB4NjQsIDB4MDAsIDB4OUQsIDB4MEIsIDB4NDQsIDB4MkYsIDB4RDAsIDB4QTgsCisweEMyLCAweDI2LCAweDAwLCAweEQxLCAweDgyLCAweDA0LCAweDAwLCAweDEwLCAweEFELCAweDQwLCAweEI0LCAweDAwLCAweDkxLAorMHgwMywgMHg3MCwgMHgwOSwgMHgxMSwgMHgzNSwgMHg0MCwgMHg5NywgMHgwMiwgMHg1MSwgMHgxMywgMHg0NCwgMHg0MywgMHgxMCwKKzB4QjksIDB4NDAsIDB4NjQsIDB4MDAsIDB4OUQsIDB4MDIsIDB4NDUsIDB4MTMsIDB4RDAsIDB4MTUsIDB4NDAsIDB4NkMsIDB4MDAsCisweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweDIwLCAweDIwLCAweDAyLCAweDAxLCAweDFBLCAweDIwLAorMHgwMCwgMHgxNCwgMHgyMSwgMHg0MCwgMHgxMCwgMHgwMCwgMHg0RCwgMHgwMCwgMHg2MCwgMHgyQywgMHhEMCwgMHgxNCwgMHg0MCwKKzB4MzQsIDB4NDAsIDB4RDEsIDB4MDIsIDB4MjQsIDB4MDAsIDB4RDAsIDB4MkMsIDB4NDAsIDB4MDAsIDB4MjAsIDB4NDUsIDB4MDIsCisweDMwLCAweDYyLCAweDEwLCAweDE5LCAweDQwLCAweDIxLCAweDAwLCAweDgwLCAweDQxLCAweDA0LCAweDA0LCAweDEwLCAweDA0LAorMHg0MCwgMHgxMCwgMHgwMCwgMHhDRCwgMHgwMCwgMHgwNCwgMHgwNywgMHhEMCwgMHgwOCwgMHg0MCwgMHgxQywgMHgwMCwgMHgwQSwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4NjgsIDB4MDAsIDB4MzEsIDB4MDEsIDB4QTUsIDB4MDQsCisweDEwLCAweDFCLCAweDQwLCAweDU4LCAweDAwLCAweDZELCAweDAxLCAweEE0LCAweDA1LCAweEQwLCAweDE2LCAweDQwLCAweDZBLAorMHgwMCwgMHhFMSwgMHgwMSwgMHg4NCwgMHgyNCwgMHg1MCwgMHg5RSwgMHg0MCwgMHg1OCwgMHgwMCwgMHg2MSwgMHgwMSwgMHhCNiwKKzB4MDYsIDB4MTAsIDB4MUUsIDB4NDAsIDB4NkYsIDB4MDAsIDB4QjEsIDB4ODEsIDB4QzQsIDB4MDQsIDB4MTAsIDB4MTYsIDB4NDAsCisweDU4LCAweDAwLCAweEVELCAweDA5LCAweDg0LCAweDA3LCAweEQwLCAweDJGLCAweDQwLCAweDc0LCAweDAwLCAweDAyLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHgxOCwgMHgyNCwgMHgwMSwgMHgwMywgMHgwOCwgMHgyNCwgMHgwMCwgMHgzMCwKKzB4NjQsIDB4QzAsIDB4MzAsIDB4MDAsIDB4REYsIDB4MDAsIDB4MkMsIDB4MDIsIDB4RjAsIDB4MEMsIDB4QzEsIDB4MTQsIDB4MjAsCisweDgzLCAweDAwLCAweDJDLCAweDIwLCAweEYyLCAweDA4LCAweEQwLCAweDEwLCAweDAwLCAweEM3LCAweDAwLCAweDNDLCAweDAzLAorMHgzMCwgMHg0OCwgMHhDMSwgMHgyMywgMHgxMCwgMHg4MywgMHgwMCwgMHgwQywgMHgwMiwgMHgzMiwgMHgwRCwgMHhEMCwgMHgzMCwKKzB4MDAsIDB4OEYsIDB4MDAsIDB4MEQsIDB4MDMsIDB4RjAsIDB4OEMsIDB4QzgsIDB4NDgsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAyLCAweDM4LCAweDNELCAweDQwLCAweDNGLCAweDAwLCAweERDLCAweDAwLCAweEYwLCAweDBFLAorMHhDMCwgMHgzRiwgMHgwMCwgMHhGRiwgMHgwOCwgMHhERCwgMHgwMywgMHhGMiwgMHg4RSwgMHhDNCwgMHgyRiwgMHgyMCwgMHhGRiwKKzB4MDAsIDB4RkMsIDB4MjAsIDB4QjAsIDB4MEYsIDB4QzIsIDB4MUYsIDB4MDIsIDB4RkYsIDB4MDgsIDB4QkMsIDB4MjMsIDB4RjAsCisweDBGLCAweEMwLCAweDJCLCAweDAwLCAweEE3LCAweDAwLCAweEJDLCAweDAyLCAweEYxLCAweDBGLCAweEMwLCAweDNGLCAweDAwLAorMHhGRiwgMHgwMCwgMHhGQywgMHgwMywgMHhGMCwgMHg0RSwgMHhDMCwgMHgwQiwgMHg2MCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MTQsIDB4QTAsIDB4MDcsIDB4MDAsIDB4MTMsIDB4MDAsIDB4N0MsIDB4MDAsIDB4MzQsIDB4MDUsIDB4QzAsCisweDE0LCAweDAwLCAweDVGLCAweDAxLCAweDRDLCAweDAwLCAweEYwLCAweDA1LCAweEMwLCAweDM0LCAweDAwLCAweENGLCAweDAwLAorMHg0QywgMHgwNCwgMHgzMCwgMHg0QywgMHhDMCwgMHgzNCwgMHgwMCwgMHg1QiwgMHgwMCwgMHg3QywgMHgwMiwgMHhGMCwgMHgwOSwKKzB4RDAsIDB4MzQsIDB4MDAsIDB4RDMsIDB4MDAsIDB4N0MsIDB4MDEsIDB4RjAsIDB4MDUsIDB4QzAsIDB4MTcsIDB4MDAsIDB4REYsCisweDAwLCAweDBELCAweDAzLCAweDMwLCAweDBDLCAweEQwLCAweDU0LCAweDAwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgxMiwgMHg4MCwgMHgwRCwgMHgxMCwgMHgyMSwgMHgwMCwgMHhGNCwgMHgwMiwgMHgxMCwgMHgwRSwgMHg0MCwgMHgxOCwKKzB4MzAsIDB4NkQsIDB4MDAsIDB4ODQsIDB4MDEsIDB4RDAsIDB4MDYsIDB4NDAsIDB4MjgsIDB4MDAsIDB4RUQsIDB4MDAsIDB4QUMsCisweDAwLCAweDkwLCAweDBFLCAweDQzLCAweDM4LCAweDQ4LCAweDYxLCAweDAwLCAweEI0LCAweDAyLCAweEQwLCAweDBFLCAweDQyLAorMHgzOCwgMHgwMCwgMHhFMSwgMHgwMCwgMHhCNCwgMHgwMSwgMHhEMCwgMHgwNiwgMHg0MCwgMHgxQiwgMHgwMCwgMHhGRCwgMHgwMCwKKzB4ODQsIDB4MDMsIDB4MTAsIDB4MEUsIDB4NjAsIDB4NEMsIDB4MjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDc5LCAweDAwLCAweDIxLCAweDAxLCAweEI0LCAweDA0LCAweDEwLCAweDFFLCAweDQwLCAweDc4LCAweDAwLAorMHhFRCwgMHgwMSwgMHg4NCwgMHgwNiwgMHhEMCwgMHgxRSwgMHg2MCwgMHg3OCwgMHgwMCwgMHhGRCwgMHgwMSwgMHgwNCwgMHg0MCwKKzB4RDAsIDB4MUEsIDB4NDAsIDB4NzgsIDB4MDAsIDB4RTksIDB4MjEsIDB4QjYsIDB4MDcsIDB4RDAsIDB4MUEsIDB4NDAsIDB4NzgsCisweDAwLCAweEUxLCAweDAxLCAweEI0LCAweDA3LCAweEQwLCAweDFFLCAweDQwLCAweDdCLCAweDAwLCAweEVELCAweDAxLCAweDg0LAorMHgwNywgMHgxMCwgMHgxNywgMHg0MCwgMHgwNCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNiwKKzB4MjgsIDB4MzMsIDB4MDIsIDB4ODEsIDB4MDAsIDB4NzQsIDB4MjcsIDB4MTAsIDB4N0MsIDB4NDAsIDB4MzAsIDB4MDAsIDB4Q0QsCisweDAwLCAweDQ0LCAweDAzLCAweEQwLCAweDBDLCAweDYyLCAweDIwLCAweDAxLCAweENELCAweDgzLCAweDI0LCAweDA3LCAweEQwLAorMHgyQywgMHg0MCwgMHg3MCwgMHgwMCwgMHhDMSwgMHgwMCwgMHgzNCwgMHgwMywgMHhEMCwgMHgwRCwgMHg0MiwgMHgzNCwgMHgwMCwKKzB4QzEsIDB4NDAsIDB4MzQsIDB4MDMsIDB4RDAsIDB4MEMsIDB4NDAsIDB4MzMsIDB4MDAsIDB4Q0QsIDB4MDksIDB4MDQsIDB4MDMsCisweDE1LCAweDA0LCAweDYwLCAweDQ4LCAweDIwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE3LCAweDIwLAorMHgxOSwgMHg0MCwgMHg3MywgMHg0MiwgMHhGQywgMHgwNSwgMHgzMCwgMHg1NywgMHhEMCwgMHgxNCwgMHgwMCwgMHg1RiwgMHgwMCwKKzB4NEQsIDB4MDEsIDB4RjAsIDB4MDUsIDB4RDAsIDB4MUMsIDB4MjAsIDB4N0YsIDB4MDUsIDB4Q0MsIDB4MDksIDB4NzQsIDB4MjcsCisweEMwLCAweERDLCAweDAzLCAweDVCLCAweDgwLCAweDNDLCAweDAxLCAweEYxLCAweDA1LCAweEMwLCAweDE0LCAweDAwLCAweDUzLAorMHgwMCwgMHg3QywgMHgwMSwgMHhGMCwgMHgwNSwgMHhDMCwgMHgxNywgMHgwMCwgMHg1RiwgMHgwMCwgMHgwQywgMHgwMSwgMHgzMCwKKzB4MjcsIDB4QzAsIDB4NUMsIDB4MjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4MDgsIDB4ODUsCisweDE0LCAweDBGLCAweDI0LCAweDdDLCAweDA0LCAweEY0LCAweDIxLCAweEMwLCAweDA3LCAweDAwLCAweDFGLCAweDgwLCAweDdDLAorMHgwMCwgMHhGMCwgMHgwMSwgMHhDMCwgMHgwMywgMHgwMCwgMHgxRiwgMHgxMCwgMHg3QywgMHgxMCwgMHgzMCwgMHg2MSwgMHhEMCwKKzB4MDcsIDB4MDAsIDB4MUYsIDB4MDAsIDB4N0MsIDB4MDgsIDB4RDEsIDB4MDEsIDB4QzgsIDB4MDcsIDB4NDAsIDB4MUYsIDB4MDAsCisweDdDLCAweDAwLCAweEYwLCAweDAxLCAweEMwLCAweDA3LCAweDIwLCAweDFGLCAweDAwLCAweDdDLCAweDAwLCAweEYwLCAweDAxLAorMHhDMSwgMHg0QiwgMHgwMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHg2NSwgMHgwMCwKKzB4OTMsIDB4MDEsIDB4NEMsIDB4MDIsIDB4MzAsIDB4MDksIDB4QzAsIDB4MjQsIDB4MDAsIDB4OUYsIDB4MDAsIDB4N0MsIDB4MDIsCisweDMwLCAweDg5LCAweEMwLCAweDI0LCAweDAwLCAweDkzLCAweDA0LCAweDBDLCAweDBBLCAweDMwLCAweDI5LCAweEMwLCAweDIyLAorMHg3MCwgMHg5MywgMHg4MCwgMHg3QywgMHgwNiwgMHgzMCwgMHgwOSwgMHhDMCwgMHg2NCwgMHgwMiwgMHg5MywgMHgwNSwgMHg3QywKKzB4MDIsIDB4RjAsIDB4NDksIDB4QzAsIDB4MjcsIDB4MDIsIDB4OUYsIDB4MDEsIDB4NEMsIDB4MDIsIDB4MzAsIDB4MDksIDB4QzAsCisweDQwLCAweDIwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDIwLCAweDI2LCAweDEwLCAweDkxLAorMHgyOCwgMHg0NCwgMHgwMiwgMHgxMCwgMHgyOCwgMHg0MCwgMHhBNCwgMHgwMCwgMHg5RCwgMHgwMiwgMHg3NCwgMHgwMiwgMHgxMCwKKzB4MzksIDB4NDAsIDB4MjQsIDB4MjAsIDB4ODEsIDB4MDAsIDB4NkMsIDB4MDIsIDB4MTAsIDB4MjgsIDB4NDAsIDB4QTQsIDB4MDAsCisweDkxLCAweDAyLCAweDVDLCAweDAyLCAweDEwLCAweDA5LCAweDQwLCAweEU0LCAweDA4LCAweDkxLCAweDIxLCAweDc0LCAweDgyLAorMHhEMCwgMHgyOSwgMHg0MCwgMHhFNywgMHgwMCwgMHg5RCwgMHgwMywgMHg0NSwgMHgwMiwgMHgxNCwgMHgwOSwgMHg0MCwgMHgwNCwKKzB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4QTAsIDB4MjQsIDB4NDYsIDB4OTEsIDB4MjAsCisweDQ0LCAweDAyLCAweDEyLCAweDI5LCAweDQwLCAweDI0LCAweDAxLCAweEJELCAweDA0LCAweEY0LCAweDAyLCAweDE4LCAweDBBLAorMHg0MCwgMHgyNCwgMHgwMCwgMHg5MSwgMHg4MCwgMHg2NCwgMHgwMiwgMHgxOSwgMHgwRCwgMHg0MCwgMHgyNiwgMHgwMCwgMHg5MSwKKzB4MDAsIDB4RjQsIDB4MjIsIDB4MUMsIDB4MEYsIDB4NDAsIDB4MkMsIDB4MDQsIDB4QjEsIDB4MDAsIDB4RjQsIDB4MDYsIDB4RDAsCisweDBCLCAweDQwLCAweDJGLCAweDAwLCAweDhELCAweDBBLCAweDY0LCAweDAyLCAweDEwLCAweDE4LCAweDQwLCAweDYyLCAweDAwLAorMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgyMCwgMHgyNCwgMHgwMSwgMHg4MSwgMHgwNCwgMHgwNCwKKzB4MTIsIDB4MTAsIDB4NDgsIDB4NTAsIDB4NjgsIDB4MDAsIDB4QUQsIDB4MDEsIDB4QjQsIDB4MDIsIDB4MTAsIDB4MUEsIDB4NDIsCisweDIwLCAweDAxLCAweDkxLCAweDAwLCAweDI0LCAweDEyLCAweDEwLCAweDQ4LCAweDQwLCAweDMyLCAweDAxLCAweEExLCAweDAxLAorMHhENCwgMHgwMywgMHgxMCwgMHgwQSwgMHg0MCwgMHgyOCwgMHgyMCwgMHhBMSwgMHgwMSwgMHhCNCwgMHgwMiwgMHhEMCwgMHgxQSwKKzB4NDAsIDB4NkIsIDB4MDAsIDB4OEQsIDB4MDQsIDB4MjUsIDB4MDIsIDB4MTAsIDB4NTgsIDB4NTAsIDB4NDIsIDB4ODAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFELCAweEI4LCAweDg2LCAweDAyLCAweDUzLCAweDBBLCAweDRELCAweDI4LAorMHgzNCwgMHhBMCwgMHg0MCwgMHg4NCwgMHgwMiwgMHgwRiwgMHgwQSwgMHg3QywgMHgyOSwgMHgzMCwgMHhBMiwgMHg0MCwgMHg4NCwKKzB4MDIsIDB4MTMsIDB4MEEsIDB4NkMsIDB4MDAsIDB4MzAsIDB4MDUsIDB4QzAsIDB4MDYsIDB4MDAsIDB4MTMsIDB4MEEsIDB4N0MsCisweDAwLCAweDMwLCAweEEwLCAweEQwLCAweDgwLCAweDAyLCAweDEzLCAweDAwLCAweDdDLCAweDAwLCAweEYwLCAweEExLCAweEMwLAorMHg4RiwgMHgwMiwgMHgxRiwgMHgwQSwgMHg2QywgMHgwMCwgMHgzMCwgMHhBMSwgMHhDMCwgMHg3NiwgMHhDMCwgMHgwQSwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MUQsIDB4QjgsIDB4MkYsIDB4MDIsIDB4QkYsIDB4MDgsIDB4RkMsIDB4MjIsIDB4RjAsCisweDhCLCAweEMwLCAweDI3LCAweDAwLCAweDlGLCAweDAwLCAweDdDLCAweDAyLCAweEY0LCAweDA5LCAweEQwLCAweDJGLCAweDQyLAorMHhCRiwgMHg4MCwgMHhGQywgMHgyMiwgMHhGMCwgMHg4QiwgMHhDMCwgMHgyOSwgMHg4MiwgMHg5RiwgMHgwMCwgMHg1QywgMHgwMiwKKzB4RjAsIDB4MDksIDB4QzAsIDB4MjcsIDB4NDAsIDB4OUYsIDB4MDAsIDB4N0MsIDB4MDIsIDB4RjAsIDB4MDksIDB4QzAsIDB4MjcsCisweDAwLCAweEJGLCAweDA4LCAweDVDLCAweDAyLCAweEYwLCAweDhCLCAweEMwLCAweDY1LCAweDYwLCAweDBFLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgxQywgMHhBMCwgMHgyRiwgMHgwMSwgMHhBMywgMHgxNCwgMHhGQywgMHgzMiwgMHhGMCwgMHgwQiwKKzB4RDAsIDB4MkMsIDB4MDAsIDB4QjMsIDB4MDgsIDB4RkMsIDB4MDIsIDB4MzAsIDB4MEIsIDB4QzAsIDB4MjYsIDB4MTksIDB4QjMsCisweDAwLCAweENDLCAweDA2LCAweDMwLCAweDFCLCAweEMxLCAweDZFLCAweDA0LCAweEJGLCAweDAwLCAweEZDLCAweDAyLCAweDMwLAorMHgwQiwgMHhDMCwgMHgzQywgMHgwMCwgMHhGMywgMHgwMCwgMHhDQywgMHgwMywgMHgzMSwgMHgwQiwgMHhDMCwgMHgyQywgMHgwMiwKKzB4QkYsIDB4MDAsIDB4Q0MsIDB4MDIsIDB4RjAsIDB4OEYsIDB4QzAsIDB4NjAsIDB4MDAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDE4LCAweDAwLCAweDE3LCAweDQ1LCAweDExLCAweDA0LCAweDc0LCAweDMwLCAweEQwLCAweDIwLCAweDQxLAorMHgxNCwgMHg0NCwgMHg1MSwgMHgwMCwgMHg3NCwgMHg1MCwgMHgxMCwgMHg0MSwgMHg1MCwgMHgwNCwgMHgwMiwgMHgxMywgMHgwMCwKKzB4NkMsIDB4MjgsIDB4MTQsIDB4MDEsIDB4NDAsIDB4MDQsIDB4MDAsIDB4NUQsIDB4MDQsIDB4NzQsIDB4MDAsIDB4MTAsIDB4MDEsCisweDQxLCAweDA0LCAweDA0LCAweDExLCAweDAwLCAweDQ0LCAweDAwLCAweDEwLCAweDQ1LCAweDQwLCAweDE0LCAweDAxLCAweDFELAorMHgxMiwgMHg0NSwgMHgwMCwgMHhEMCwgMHg4MSwgMHg0MCwgMHg3MCwgMHgyMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MTIsIDB4MDAsIDB4MjEsIDB4NDMsIDB4ODEsIDB4MTQsIDB4MzQsIDB4MTIsIDB4RDAsIDB4QzgsIDB4NTAsIDB4MjAsCisweDEwLCAweDgxLCAweDAwLCAweDc0LCAweDE2LCAweDE0LCAweDQ4LCAweDQxLCAweDI0LCAweDAwLCAweDgxLCAweDAwLCAweDI0LAorMHgwMiwgMHg5MCwgMHgwOCwgMHg0MCwgMHgyMiwgMHgwMCwgMHg4RCwgMHg5NCwgMHg3NCwgMHgwMiwgMHg5OCwgMHg0OSwgMHg0MCwKKzB4MjIsIDB4MDAsIDB4OTEsIDB4MDAsIDB4MTQsIDB4MDIsIDB4OTAsIDB4NDgsIDB4NDEsIDB4MjIsIDB4MTEsIDB4OEQsIDB4MEMsCisweDA0LCAweDAyLCAweEQwLCAweDE4LCAweDQwLCAweDQ4LCAweDgwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgxOCwgMHgyOCwgMHgyNSwgMHgwMCwgMHg5MSwgMHgxMCwgMHg3NCwgMHgwMiwgMHhEMCwgMHg0OSwgMHg0MSwgMHgyMCwgMHgwMCwKKzB4OTEsIDB4MDAsIDB4NzQsIDB4MDIsIDB4MTAsIDB4MjksIDB4NDAsIDB4QTQsIDB4MDAsIDB4OTEsIDB4MDAsIDB4NjQsIDB4NjIsCisweDk4LCAweDE5LCAweDQ0LCAweDI0LCAweDAyLCAweDlELCAweDAwLCAweDc0LCAweDAyLCAweDlDLCAweDA5LCAweDUwLCAweDIyLAorMHgwMCwgMHg5MSwgMHgwMCwgMHg1NCwgMHgwMiwgMHg5MCwgMHgwOCwgMHg1MCwgMHgyNiwgMHgwMCwgMHg5RCwgMHgwOCwgMHg0NCwKKzB4MDIsIDB4RDAsIDB4MDgsIDB4NDAsIDB4NjAsIDB4MjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsCisweDAwLCAweDI1LCAweDAwLCAweDkzLCAweDAwLCAweDdDLCAweDA2LCAweEYwLCAweDA5LCAweEMwLCAweEE0LCAweDAwLCAweDkzLAorMHgwMiwgMHg3QywgMHgwMiwgMHgzMCwgMHgwOSwgMHhDMCwgMHgyNCwgMHg0MCwgMHg5MywgMHgxMCwgMHg2RCwgMHgwQSwgMHhCMCwKKzB4NzksIDB4QzAsIDB4MjYsIDB4MTAsIDB4OUYsIDB4MDIsIDB4M0MsIDB4MDIsIDB4QjAsIDB4MDgsIDB4QzIsIDB4MjYsIDB4NDAsCisweDgzLCAweDAwLCAweDVDLCAweDQyLCAweEI0LCAweDI5LCAweEMwLCAweEE2LCAweDAwLCAweDlGLCAweDAwLCAweDRDLCAweDAyLAorMHhGMCwgMHgxOSwgMHhDMCwgMHgxNCwgMHgyMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNiwgMHgwOCwKKzB4RTUsIDB4MDAsIDB4OUYsIDB4MTAsIDB4N0MsIDB4QTYsIDB4RjAsIDB4MTgsIDB4RDAsIDB4MjcsIDB4MDAsIDB4OUYsIDB4MDAsCisweDdDLCAweDAyLCAweEYyLCAweDA5LCAweEMwLCAweDI1LCAweDAwLCAweDk3LCAweDE1LCAweDdFLCAweDA2LCAweDcwLCAweDA5LAorMHhDMCwgMHgyNSwgMHgwMCwgMHg5RiwgMHgwMCwgMHg3QywgMHgyNiwgMHg3MiwgMHgwOSwgMHhDMSwgMHgyNSwgMHgwMCwgMHg5RiwKKzB4MDAsIDB4NkQsIDB4MDIsIDB4NzAsIDB4MDksIDB4QzAsIDB4MjUsIDB4MDQsIDB4OUYsIDB4MTAsIDB4N0UsIDB4MDIsIDB4RjAsCisweDQ5LCAweEQxLCAweDVCLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDA4LCAweDgxLAorMHgwMSwgMHgxMywgMHgwMiwgMHg0QywgMHgyMCwgMHgzNCwgMHg4MSwgMHhDMCwgMHg4NiwgMHg0NCwgMHgxMywgMHgxMiwgMHg2RCwKKzB4MDQsIDB4RjAsIDB4ODEsIDB4QzAsIDB4MDQsIDB4MDAsIDB4MUYsIDB4MDIsIDB4NEMsIDB4ODgsIDB4MzAsIDB4MjAsIDB4QzAsCisweDA0LCAweDA4LCAweDFGLCAweDAyLCAweDRELCAweDQwLCAweEYwLCAweDAxLCAweEMwLCAweDA2LCAweDAwLCAweDEzLCAweDAwLAorMHg3QywgMHg0MCwgMHhGMCwgMHgyMSwgMHhEMCwgMHg4NCwgMHg0MCwgMHgxMywgMHgwOCwgMHg0QywgMHgwMCwgMHhGMCwgMHgwMSwKKzB4QzAsIDB4NTAsIDB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MjAsIDB4MUMsIDB4MDAsCisweDcxLCAweDgyLCAweDQ0LCAweDA1LCAweDEwLCAweDE3LCAweEMwLCAweDlDLCAweDAwLCAweDcxLCAweDAyLCAweDg0LCAweDA1LAorMHhEMCwgMHgxNiwgMHg0MCwgMHgxMCwgMHgwMCwgMHg3RCwgMHgwMCwgMHgxNCwgMHgwMSwgMHgxNCwgMHgzNywgMHg0MCwgMHg5QywKKzB4MDAsIDB4N0QsIDB4MDMsIDB4QzQsIDB4MTEsIDB4RDAsIDB4MTcsIDB4QzAsIDB4MUMsIDB4MDAsIDB4NzEsIDB4MDAsIDB4QjAsCisweDRELCAweEQwLCAweDA3LCAweDQwLCAweDFDLCAweDAwLCAweDcxLCAweDAxLCAweDQ1LCAweDAxLCAweEQwLCAweDE3LCAweDQxLAorMHg1MCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHhBMCwgMHgzMiwgMHg0MCwgMHg4MSwKKzB4MDIsIDB4MjQsIDB4MDcsIDB4MTAsIDB4MEMsIDB4NDAsIDB4QjAsIDB4MDAsIDB4QzEsIDB4MDIsIDB4MDQsIDB4MjcsIDB4RDAsCisweDA4LCAweDQwLCAweDMwLCAweDAwLCAweDVELCAweDAwLCAweDA0LCAweDAzLCAweDkwLCAweEI4LCAweDUxLCAweEIwLCAweDIxLAorMHhDRCwgMHgwNSwgMHgwMCwgMHgwNywgMHhEMCwgMHgyQywgMHg0MCwgMHgzMCwgMHgwMCwgMHhDMSwgMHgxMywgMHgzNCwgMHgwQiwKKzB4RDgsIDB4MEMsIDB4NDAsIDB4MzAsIDB4MDAsIDB4OTEsIDB4MDMsIDB4MDQsIDB4MDIsIDB4RDAsIDB4MkMsIDB4NDAsIDB4NTAsCisweDAwLCAweDBBLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDgwLCAweDI4LCAweDAwLCAweDMxLCAweDAxLAorMHhBNCwgMHgwNiwgMHgxMCwgMHgwNiwgMHg0MCwgMHgzOCwgMHgwMCwgMHhFMSwgMHgwMSwgMHg4NCwgMHgwMywgMHhEMCwgMHgwRSwKKzB4NDIsIDB4MzgsIDB4MjEsIDB4RUQsIDB4MDAsIDB4OTQsIDB4MDMsIDB4OTAsIDB4MDgsIDB4NDAsIDB4MTgsIDB4MDQsIDB4RUQsCisweDAzLCAweDg0LCAweDAxLCAweEQxLCAweDJGLCAweDUwLCAweDM4LCAweDAwLCAweDIxLCAweDEwLCAweEI0LCAweDAzLCAweEQwLAorMHgwRSwgMHg0MCwgMHg3OCwgMHgwMCwgMHhBMSwgMHgwMCwgMHg4NCwgMHgwMiwgMHhEMCwgMHgwOCwgMHg0MCwgMHgxNCwgMHgwMCwKKzB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MTgsIDB4NUMsIDB4MDIsIDB4NjMsIDB4MDEsIDB4RUMsCisweDA3LCAweDMwLCAweDFFLCAweEQxLCAweDdDLCAweDAwLCAweEYzLCAweDAxLCAweDhDLCAweDA3LCAweEYwLCAweDFBLCAweEQwLAorMHhGOCwgMHgyMSwgMHgzRiwgMHgwMSwgMHg4NCwgMHgwNywgMHhCMCwgMHgxNiwgMHhDMCwgMHg3OCwgMHgwMCwgMHhGRiwgMHgyMSwKKzB4OEMsIDB4MDcsIDB4RjAsIDB4MUUsIDB4QzAsIDB4N0MsIDB4NDAsIDB4MjMsIDB4MDEsIDB4QkMsIDB4MDcsIDB4RjAsIDB4MUYsCisweEMwLCAweDdDLCAweDAwLCAweDczLCAweDAxLCAweDg0LCAweDA2LCAweEYwLCAweDFFLCAweEQwLCAweDU0LCAweDQwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHhCOCwgMHg5RCwgMHgwMCwgMHgxRiwgMHg4MCwgMHg1RCwgMHgxMiwKKzB4RjAsIDB4MDcsIDB4QzAsIDB4MzUsIDB4MDgsIDB4NUYsIDB4MDAsIDB4N0MsIDB4MDMsIDB4RjIsIDB4MDAsIDB4QzAsIDB4NzcsCisweDAwLCAweDlGLCAweDAwLCAweDNDLCAweDAzLCAweDcwLCAweDBELCAweEMwLCAweDM3LCAweDAwLCAweERGLCAweDAwLCAweDdDLAorMHgwMywgMHhGMCwgMHgwQywgMHhDMCwgMHgzNSwgMHgwOCwgMHgxRiwgMHgwMCwgMHg3QywgMHgwMiwgMHhGMCwgMHgwRCwgMHhDMCwKKzB4MzcsIDB4MDAsIDB4REYsIDB4MDAsIDB4N0MsIDB4MDIsIDB4RjAsIDB4MDEsIDB4QzAsIDB4NDMsIDB4NjAsIDB4MDYsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA2LCAweDIwLCAweDdELCAweDAwLCAweDIzLCAweDAxLCAweENDLCAweDNGLCAweEY4LAorMHg4QiwgMHhDMCwgMHg3QywgMHgwMCwgMHhGMywgMHgwMSwgMHhGQywgMHgwNywgMHhCMCwgMHg5QiwgMHhDMCwgMHg3RiwgMHgwMCwKKzB4RTcsIDB4MDEsIDB4OEMsIDB4ODcsIDB4MjQsIDB4MUUsIDB4QzAsIDB4NUQsIDB4MDAsIDB4RjMsIDB4MDEsIDB4RDQsIDB4MjUsCisweEIwLCAweDFGLCAweEQ4LCAweDdDLCAweDAwLCAweDMyLCAweDAxLCAweEZDLCAweDA1LCAweEYwLCAweDFGLCAweEMwLCAweDdDLAorMHgwMCwgMHg3MywgMHgwMSwgMHhDQywgMHgwNiwgMHhGMCwgMHgxNywgMHhDMCwgMHgwMywgMHgwMCwgMHgwRSwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MTUsIDB4MDAsIDB4MjksIDB4MDAsIDB4MjEsIDB4ODIsIDB4ODQsIDB4NjIsIDB4MzAsIDB4NDcsCisweDQwLCAweDNDLCAweDAwLCAweEUxLCAweDAwLCAweEJDLCAweDAyLCAweDEwLCAweENFLCAweDQwLCAweDNCLCAweDAwLCAweEVCLAorMHgwMCwgMHhBQywgMHgxMywgMHgzMCwgMHgwRSwgMHg0MCwgMHg5OCwgMHg0MCwgMHhFMSwgMHgwOCwgMHg4NCwgMHgwMSwgMHgxNCwKKzB4NEIsIDB4QzEsIDB4M0MsIDB4MDAsIDB4MjEsIDB4MDgsIDB4QjQsIDB4MDgsIDB4RDAsIDB4MkUsIDB4NDAsIDB4M0MsIDB4MDAsCisweEUxLCAweDAwLCAweDg0LCAweDAyLCAweEQwLCAweDgyLCAweDQwLCAweDU3LCAweDIwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOSwgMHgwMCwgMHg2MSwgMHgwMCwgMHgwNCwgMHgxMywgMHg1MCwgMHg4QSwgMHg1MCwKKzB4MzgsIDB4MDAsIDB4RTksIDB4MDAsIDB4RjQsIDB4MDMsIDB4MTAsIDB4MEEsIDB4NjAsIDB4MzMsIDB4MDAsIDB4QjUsIDB4MDAsCisweEE0LCAweDgzLCAweDgwLCAweDBGLCAweDUwLCAweDNCLCAweDAwLCAweDYxLCAweDAwLCAweDk0LCAweDAwLCAweDk0LCAweDBFLAorMHg2MCwgMHgzOCwgMHgwMCwgMHgyOSwgMHgwMCwgMHhCNCwgMHgwMSwgMHhEMCwgMHgwRSwgMHg0MCwgMHgzOCwgMHgwMCwgMHhFMSwKKzB4MDAsIDB4ODQsIDB4MDIsIDB4RDAsIDB4MDYsIDB4NDAsIDB4MDMsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAyLCAweDI4LCAweDUxLCAweDAwLCAweDAxLCAweDA2LCAweDA1LCAweDBBLCAweDEyLCAweEI1LCAweDQxLCAweDMwLAorMHgwMCwgMHhDOSwgMHgwMCwgMHgzNCwgMHgwMiwgMHgxMCwgMHgwNCwgMHg2MCwgMHhGMywgMHg0MCwgMHg4OSwgMHgwMywgMHgyNCwKKzB4MjMsIDB4MTAsIDB4MUMsIDB4NDAsIDB4MzIsIDB4MDAsIDB4RDEsIDB4MDAsIDB4MDQsIDB4MDEsIDB4OTAsIDB4MDgsIDB4NDAsCisweDMwLCAweDAwLCAweDA5LCAweDAwLCAweDM0LCAweDAwLCAweEQwLCAweDBELCAweDQwLCAweDMwLCAweDAwLCAweEQxLCAweDAwLAorMHgwNSwgMHgwMiwgMHhEMCwgMHgxOCwgMHg0MCwgMHgxMywgMHgyMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MTUsIDB4QTAsIDB4NjUsIDB4NDAsIDB4MTMsIDB4MDcsIDB4NEMsIDB4MEUsIDB4NzAsIDB4MDksIDB4QzAsIDB4MzQsIDB4MDAsCisweERCLCAweDAwLCAweDdDLCAweDAzLCAweEIwLCAweDA4LCAweEMyLCAweDNGLCAweDIwLCAweDA3LCAweDBELCAweDBDLCAweDBBLAorMHhCMCwgMHg1RCwgMHhDMCwgMHg3MywgMHgwNCwgMHhEMywgMHgwMCwgMHg1QywgMHgwMiwgMHhCMCwgMHgwRCwgMHhDMCwgMHgzNCwKKzB4MDAsIDB4MEIsIDB4MDAsIDB4N0MsIDB4MDEsIDB4RjAsIDB4MEQsIDB4RDAsIDB4MzQsIDB4MDAsIDB4OTMsIDB4MDUsIDB4NEMsCisweDAzLCAweEYwLCAweDBDLCAweEMxLCAweDU3LCAweDIwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LAorMHgwOCwgMHgyNywgMHgwMiwgMHgzRiwgMHgwMCwgMHg3QywgMHgwMiwgMHg3MCwgMHgyMSwgMHhDMCwgMHgyNywgMHgyMCwgMHg5NywKKzB4MDAsIDB4NUMsIDB4MDcsIDB4RjAsIDB4MjksIDB4QzAsIDB4MzcsIDB4MDYsIDB4OTcsIDB4MDAsIDB4N0MsIDB4NDIsIDB4RjAsCisweDBELCAweEMwLCAweDM1LCAweDIwLCAweDlGLCAweDAwLCAweDdDLCAweDAwLCAweDcyLCAweDI1LCAweEMwLCAweEE1LCAweDAwLAorMHgxMywgMHgwMCwgMHg3QywgMHgwOCwgMHhGMCwgMHgwOSwgMHhDMCwgMHgyNywgMHgwMCwgMHg5RiwgMHgwMCwgMHg3QywgMHgwMiwKKzB4RjAsIDB4MDksIDB4QzAsIDB4MDcsIDB4MDAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDgsCisweDBGLCAweDYwLCAweDczLCAweDAwLCAweEFDLCAweDQyLCAweEIwLCAweDAzLCAweEMwLCAweDFDLCAweDAwLCAweEZGLCAweDAwLAorMHhGQywgMHgwMywgMHgzMCwgMHg0QiwgMHhDMCwgMHgzRSwgMHgwMCwgMHgzMywgMHgwNSwgMHhDQywgMHgwNywgMHgzMCwgMHg0RiwKKzB4NDAsIDB4MzcsIDB4MDAsIDB4RjMsIDB4MDAsIDB4RUMsIDB4MDIsIDB4RTAsIDB4M0YsIDB4QzAsIDB4MUMsIDB4MDAsIDB4MzEsCisweDAwLCAweENDLCAweDAxLCAweEYwLCAweDA3LCAweDgwLCAweDVDLCAweDAwLCAweDUzLCAweDAwLCAweENDLCAweDA3LCAweEYwLAorMHgzRiwgMHhFMCwgMHgwMCwgMHgyMiwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MSwgMHgyMCwgMHhDNiwKKzB4MDAsIDB4MTEsIDB4MjIsIDB4NDQsIDB4MDYsIDB4MTAsIDB4MzEsIDB4NDAsIDB4MTQsIDB4MDAsIDB4NUQsIDB4MDEsIDB4MzQsCisweDA3LCAweDEwLCAweDU5LCAweDQyLCAweDMwLCAweDQwLCAweDkxLCAweDQwLCAweDU0LCAweDAzLCAweDEwLCAweDdELCAweDQwLAorMHhGNywgMHgwMCwgMHg5QiwgMHgwMSwgMHg0NCwgMHgwNiwgMHhEMCwgMHgwNSwgMHg1MCwgMHgzNCwgMHgwMCwgMHgxMSwgMHgwNywKKzB4NEMsIDB4MEMsIDB4RDAsIDB4M0QsIDB4NDAsIDB4RDQsIDB4MDIsIDB4RDEsIDB4MDAsIDB4NDQsIDB4MDIsIDB4RDAsIDB4MzksCisweDUwLCAweDA0LCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweEEwLCAweEMyLCAweDAwLAorMHgwMSwgMHgwMCwgMHg2NCwgMHgxMywgMHg5MCwgMHgxOSwgMHg0MSwgMHg3NiwgMHgwMCwgMHhERCwgMHg4OCwgMHg3NCwgMHgwNywKKzB4MTQsIDB4MDksIDB4NDgsIDB4MzQsIDB4MDAsIDB4OTksIDB4NDAsIDB4NDYsIDB4MTIsIDB4MTAsIDB4MEQsIDB4NDgsIDB4NjcsCisweDAwLCAweEQxLCAweDA0LCAweDY0LCAweDA0LCAweEQwLCAweDJDLCAweDQwLCAweEIyLCAweDAxLCAweDE1LCAweDAxLCAweDY0LAorMHgwNSwgMHhEMCwgMHg4RCwgMHg0MCwgMHgzMSwgMHgwNCwgMHg1MSwgMHgwMCwgMHg0NCwgMHgxMywgMHhEMCwgMHgyRCwgMHg0MCwKKzB4MDYsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4MDEsCisweDAwLCAweDA0LCAweDAyLCAweDEwLCAweDAwLCAweDUwLCAweDYyLCAweDAwLCAweDhELCAweDAwLCAweDM0LCAweDA3LCAweDE0LAorMHgwOSwgMHg0MiwgMHgzNCwgMHgwMCwgMHg5MSwgMHgwMCwgMHgxNCwgMHgwMiwgMHgxMCwgMHgwQywgMHg2MCwgMHgyMywgMHg0MCwKKzB4QzksIDB4MDAsIDB4MDQsIDB4MDAsIDB4RDAsIDB4MEMsIDB4NDAsIDB4MjIsIDB4ODAsIDB4MDUsIDB4ODAsIDB4MDQsIDB4MDAsCisweEQwLCAweDA4LCAweDQwLCAweDIxLCAweDAwLCAweEMxLCAweDAwLCAweDA0LCAweDAyLCAweEQwLCAweDA4LCAweDQwLCAweDQwLAorMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5OCwgMHgwRSwgMHgwMCwgMHg1MywgMHgwMCwKKzB4RUMsIDB4MDMsIDB4QjIsIDB4MDMsIDB4RDAsIDB4MzYsIDB4MDAsIDB4REYsIDB4ODAsIDB4N0MsIDB4MDMsIDB4MTQsIDB4MDksCisweEQwLCAweDM2LCAweDAwLCAweDkyLCAweDAwLCAweDRDLCAweDAzLCAweDM0LCAweDBELCAweDQwLCAweDI3LCAweDEwLCAweDQzLAorMHgwMCwgMHg2QywgMHgwMCwgMHhGMCwgMHgwRCwgMHhEMCwgMHgxNiwgMHgwMCwgMHgxNywgMHgwMCwgMHg2QywgMHgwMSwgMHhGMCwKKzB4MDQsIDB4RDAsIDB4MzUsIDB4MDAsIDB4RDMsIDB4MDAsIDB4NEMsIDB4MDMsIDB4RjAsIDB4MDksIDB4QzAsIDB4MDAsIDB4QzAsCisweDBBLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweEI4LCAweDBCLCAweDAwLCAweDNGLCAweDAwLCAweEZDLAorMHgwMiwgMHhGMSwgMHgwMywgMHhDMCwgMHgzRCwgMHgwMCwgMHhGRiwgMHgwMCwgMHhCQywgMHgwMSwgMHhGNCwgMHgwQiwgMHhDMCwKKzB4M0YsIDB4MDAsIDB4QkYsIDB4MDAsIDB4RkMsIDB4MDMsIDB4RjAsIDB4MEYsIDB4QzAsIDB4MkYsIDB4MDAsIDB4RkYsIDB4MDAsCisweEI0LCAweDAwLCAweEYwLCAweDBGLCAweEMwLCAweDNELCAweDAwLCAweDNCLCAweDAwLCAweEZDLCAweDAwLCAweEYwLCAweDBGLAorMHhDMCwgMHgzRSwgMHgwMCwgMHhGRiwgMHgwMCwgMHhGQywgMHgwMiwgMHhGMCwgMHgwQiwgMHhDMCwgMHgxNywgMHg2MCwgMHgwRSwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4QTAsIDB4N0YsIDB4MDAsIDB4RkYsIDB4MDEsIDB4RkMsIDB4MDIsCisweEYwLCAweDFGLCAweEM4LCAweDNGLCAweDAxLCAweEJGLCAweDIyLCAweEZDLCAweDBBLCAweDMwLCAweDBCLCAweEMwLCAweEJGLAorMHgwNSwgMHhFRiwgMHgwOSwgMHhFQywgMHgxMCwgMHhCMCwgMHgzRiwgMHhDMCwgMHhCRCwgMHgwMCwgMHhCMywgMHgwNCwgMHhDQywKKzB4ODIsIDB4MzIsIDB4MkYsIDB4QzQsIDB4MkYsIDB4NDAsIDB4RjIsIDB4MDEsIDB4Q0MsIDB4MTMsIDB4RjAsIDB4MTIsIDB4NDQsCisweDdBLCAweDIwLCAweDMzLCAweENDLCAweEVDLCAweDA2LCAweDkwLCAweDFGLCAweDQwLCAweDBFLCAweDAwLCAweDBFLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHgwOCwgMHg3NywgMHgwMCwgMHhERCwgMHgwMSwgMHg3NCwgMHgyNiwgMHhEMCwKKzB4MUQsIDB4NDAsIDB4QkYsIDB4MDUsIDB4MUQsIDB4MDIsIDB4NzQsIDB4MzgsIDB4MTAsIDB4QzEsIDB4NDAsIDB4QkYsIDB4MDAsCisweERELCAweDAwLCAweDY0LCAweDJDLCAweDA0LCAweDRELCAweDQwLCAweEJGLCAweDA4LCAweDExLCAweDE0LCAweDc0LCAweDQwLAorMHgxMCwgMHg2RiwgMHg0MCwgMHhFNywgMHgwMCwgMHhENSwgMHgwMSwgMHhDNCwgMHgwRiwgMHhEMCwgMHgxOSwgMHg0MCwgMHg3NCwKKzB4MDAsIDB4MDEsIDB4MjIsIDB4NDQsIDB4MDYsIDB4MTIsIDB4MUQsIDB4NDAsIDB4MEMsIDB4MDAsIDB4MEMsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDEzLCAweEEwLCAweDMxLCAweDAwLCAweENELCAweDAwLCAweDM0LCAweDgwLCAweEQ4LCAweDBDLAorMHg0MCwgMHhCMywgMHgwMCwgMHg4RCwgMHgyNiwgMHgzNCwgMHgwMiwgMHgxMCwgMHgwMCwgMHg0MSwgMHgzMywgMHgxMSwgMHhDRCwKKzB4ODAsIDB4MjQsIDB4MDIsIDB4MDAsIDB4MEMsIDB4NDAsIDB4MzEsIDB4ODMsIDB4ODEsIDB4OEMsIDB4MDQsIDB4QjIsIDB4MTIsCisweDJDLCAweDYwLCAweDAzLCAweDQyLCAweEQ1LCAweDAwLCAweDE0LCAweDIzLCAweEQwLCAweDA4LCAweDQwLCAweDMzLCAweDAwLAorMHg0NSwgMHgyNiwgMHg2NCwgMHgwMSwgMHg5MCwgMHgwQywgMHg0MCwgMHg0RSwgMHg4MCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDMsIDB4MjgsIDB4MzUsIDB4MDAsIDB4REQsIDB4MDAsIDB4NzQsIDB4MDQsIDB4RDAsIDB4MEQsIDB4NDQsCisweDM3LCAweDAwLCAweDlELCAweDAxLCAweDc0LCAweDA0LCAweDEwLCAweDExLCAweDQ0LCAweDM3LCAweDAwLCAweERELCAweDAwLAorMHg2NiwgMHg4NCwgMHgxMCwgMHgwRCwgMHg0MCwgMHgzNywgMHgwMCwgMHg5MSwgMHgwMSwgMHg3NCwgMHgwNiwgMHgxOCwgMHgwRCwKKzB4NDAsIDB4NDcsIDB4MDAsIDB4NTUsIDB4MTEsIDB4NTQsIDB4MDMsIDB4RDAsIDB4MTksIDB4NDMsIDB4MzcsIDB4ODAsIDB4MTEsCisweDE4LCAweDQ0LCAweDBFLCAweDEwLCAweDBELCAweDQyLCAweDBDLCAweDIwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgyMCwgMHhBOCwgMHgzNywgMHgwMCwgMHhERiwgMHgwMCwgMHg3QywgMHgxRSwgMHhGMCwgMHgwRCwgMHhDMCwgMHgzNywKKzB4MDAsIDB4OUYsIDB4ODcsIDB4N0MsIDB4QzQsIDB4MzAsIDB4MTksIDB4QzIsIDB4MzcsIDB4MTgsIDB4REYsIDB4MDAsIDB4NkMsCisweDA0LCAweDMwLCAweDBELCAweEM0LCAweDM1LCAweDA4LCAweDEzLCAweDAxLCAweDRDLCAweDFFLCAweDM0LCAweDBELCAweEMyLAorMHg2NywgMHg0MCwgMHhENywgMHgwMSwgMHg1QywgMHgwMywgMHhGMCwgMHgxOSwgMHhDMCwgMHgzNywgMHgwMCwgMHg5NSwgMHgwMiwKKzB4MkMsIDB4MEUsIDB4QjAsIDB4MEQsIDB4QzAsIDB4MjIsIDB4MDAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDA3LCAweDgwLCAweDNELCAweDAwLCAweEZGLCAweDAwLCAweEZDLCAweDgyLCAweEYwLCAweDBGLCAweEMwLCAweDNGLCAweDkwLAorMHgzRiwgMHg5MCwgMHhCQywgMHgwMCwgMHhGMCwgMHgwQiwgMHhDMCwgMHgzRiwgMHgwMCwgMHhGRiwgMHgwMywgMHg5QywgMHg0MCwKKzB4NzAsIDB4MEYsIDB4QzAsIDB4MzcsIDB4NDAsIDB4M0YsIDB4NDAsIDB4RkMsIDB4MDAsIDB4NzAsIDB4MEYsIDB4QzAsIDB4MkYsCisweDAwLCAweEJGLCAweDAwLCAweEVDLCAweDAzLCAweEYwLCAweDBCLCAweEMwLCAweDNDLCAweDBDLCAweDJGLCAweDAxLCAweEZDLAorMHgwMiwgMHhGMCwgMHgwRiwgMHhDMCwgMHgxRiwgMHgyMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwKKzB4MDgsIDB4MzUsIDB4MDAsIDB4REYsIDB4MDAsIDB4N0MsIDB4MDIsIDB4RjAsIDB4MEQsIDB4QzAsIDB4MzcsIDB4MDAsIDB4OTMsCisweDAyLCAweDdDLCAweDBBLCAweDMwLCAweDAxLCAweEMwLCAweDM0LCAweDQwLCAweEQzLCAweDA0LCAweDRFLCAweDAyLCAweEYxLAorMHgwRCwgMHhDMCwgMHgzMCwgMHgwMCwgMHgxMywgMHgwOCwgMHg3QywgMHgwQSwgMHhGMCwgMHgwRCwgMHhDMCwgMHgyNCwgMHgwMCwKKzB4RDMsIDB4MjIsIDB4N0MsIDB4MDMsIDB4MzAsIDB4MjksIDB4QzAsIDB4MzQsIDB4MDAsIDB4MTMsIDB4MDIsIDB4NEMsIDB4MEQsCisweEYwLCAweDBELCAweEMwLCAweDBCLCAweDIwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFCLCAweEEwLAorMHgzNCwgMHgwMCwgMHhERCwgMHgwMCwgMHg3NCwgMHgxMiwgMHhEMSwgMHgwRCwgMHgwMCwgMHgzRiwgMHgwMCwgMHg5MSwgMHg4MCwKKzB4NzQsIDB4MDAsIDB4MTAsIDB4MDEsIDB4NDAsIDB4M0MsIDB4MjQsIDB4REIsIDB4MDIsIDB4NjYsIDB4NEEsIDB4RDAsIDB4MEQsCisweDQ4LCAweEJDLCAweDQyLCAweDFCLCAweDhCLCAweDc0LCAweDAyLCAweEYwLCAweDNGLCAweEMxLCAweDYyLCAweDAxLCAweDhBLAorMHgwNCwgMHhGMCwgMHgwMywgMHhCMSwgMHhBOCwgMHg0MCwgMHgzMCwgMHgwMCwgMHgxQiwgMHgwRSwgMHg0NCwgMHgwRiwgMHhEMCwKKzB4MEMsIDB4NDAsIDB4NkYsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4QTAsIDB4MzIsCisweDAwLCAweENELCAweDAwLCAweDM0LCAweDAwLCAweEQwLCAweDBDLCAweDQwLCAweDMzLCAweDAwLCAweDAxLCAweDAwLCAweDM0LAorMHgwMiwgMHgxMCwgMHgwOCwgMHg0MCwgMHhGMCwgMHgwOSwgMHhEMSwgMHg4MSwgMHgyNCwgMHgwRSwgMHhEMCwgMHgwQywgMHg0OCwKKzB4NzAsIDB4MDAsIDB4ODksIDB4MDMsIDB4NzQsIDB4MDAsIDB4RDAsIDB4NkMsIDB4NDIsIDB4MDIsIDB4MDEsIDB4QzUsIDB4MzAsCisweDIwLCAweDA3LCAweDAwLCAweEJDLCAweDQwLCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDAzLCAweEQwLCAweDBDLAorMHg0MCwgMHgwRiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwRCwgMHg4MCwgMHg3OCwgMHgwMCwKKzB4RUQsIDB4MDEsIDB4QjQsIDB4MDcsIDB4RDAsIDB4MUUsIDB4NDAsIDB4N0IsIDB4MDAsIDB4NjEsIDB4MTEsIDB4QjQsIDB4MDcsCisweDEwLCAweDE2LCAweDQwLCAweDc4LCAweDAwLCAweEUxLCAweDAxLCAweEE0LCAweDI1LCAweEQwLCAweDFFLCAweDQwLCAweDc4LAorMHgwMCwgMHg2MSwgMHgwMSwgMHhCNCwgMHgwNSwgMHg1MCwgMHgxRSwgMHg0MCwgMHg3QSwgMHgwMCwgMHhFRCwgMHgwMSwgMHhCNCwKKzB4MDcsIDB4OTAsIDB4MEYsIDB4NDAsIDB4NzgsIDB4MDQsIDB4RTksIDB4MDEsIDB4ODQsIDB4MEUsIDB4RDAsIDB4MUUsIDB4NDAsCisweDNGLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDEwLCAweDMwLCAweDAwLCAweENGLAorMHgwMCwgMHgzQywgMHgwMSwgMHhEMCwgMHg4QywgMHhDMCwgMHgzNywgMHgwMCwgMHg0MywgMHgwMCwgMHg3QywgMHgwMywgMHgxMCwKKzB4OEQsIDB4RDAsIDB4MzQsIDB4MjIsIDB4QzEsIDB4OTAsIDB4MDQsIDB4MkIsIDB4RDgsIDB4MEQsIDB4RDAsIDB4MzAsIDB4MDYsCisweEM5LCAweDAwLCAweDNDLCAweDAxLCAweEQwLCAweDRELCAweEMwLCAweDEyLCAweDAwLCAweEMzLCAweDA0LCAweDJDLCAweDUzLAorMHgzMCwgMHg4QywgMHg4MCwgMHgzMCwgMHgwMCwgMHhDMywgMHhFNCwgMHgwQywgMHg4MywgMHhGMCwgMHgwQywgMHhDMCwgMHg0QiwKKzB4NjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4QjgsIDB4M0QsIDB4MDAsIDB4RkYsIDB4MDAsCisweEZDLCAweDAxLCAweEYwLCAweDBGLCAweEMwLCAweDNGLCAweDQwLCAweEZGLCAweDAwLCAweEZDLCAweDAzLCAweEY0LCAweDhGLAorMHhDMCwgMHgzRiwgMHgwMiwgMHhGRiwgMHgwMCwgMHg1RCwgMHhBMSwgMHhGOCwgMHgwRiwgMHhDMCwgMHhCRiwgMHgwMCwgMHhGRiwKKzB4ODAsIDB4RkMsIDB4MDMsIDB4RjAsIDB4MEYsIDB4QzEsIDB4MUIsIDB4MDIsIDB4RkIsIDB4MDAsIDB4QjAsIDB4NEIsIDB4RjAsCisweENGLCAweEMwLCAweDNGLCAweDAwLCAweEZGLCAweDAwLCAweEZDLCAweDAyLCAweEYwLCAweDBGLCAweEMwLCAweDBCLCAweDYwLAorMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwgMHhBMCwgMHgzNywgMHg4MCwgMHhERiwgMHgwMCwgMHg3QywKKzB4MDEsIDB4NzAsIDB4MEQsIDB4QzQsIDB4MzcsIDB4MDAsIDB4REYsIDB4MDAsIDB4N0MsIDB4MDUsIDB4MzAsIDB4MEQsIDB4QzIsCisweEI1LCAweDAyLCAweENGLCAweDAwLCAweDVELCAweDAzLCAweDM4LCAweDFELCAweEMwLCAweDM1LCAweDAxLCAweERGLCAweDAwLAorMHg3QywgMHgwMywgMHhGMCwgMHg2RCwgMHhDMCwgMHgxMCwgMHgwMCwgMHhDMywgMHgwMCwgMHg2QywgMHgxMywgMHhGMCwgMHgwOSwKKzB4QzAsIDB4MzcsIDB4QTAsIDB4REYsIDB4MDAsIDB4NEMsIDB4MDMsIDB4RDAsIDB4MEMsIDB4QzAsIDB4NDIsIDB4MDAsIDB4MEUsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEzLCAweDg4LCAweDM5LCAweDAwLCAweEVELCAweDAwLCAweEI0LCAweDAzLAorMHhEMCwgMHgwRSwgMHgwMCwgMHgzQiwgMHgxMywgMHg2QywgMHgwMCwgMHhCNCwgMHgwMywgMHgxMCwgMHgwRSwgMHg0MCwgMHgzQiwKKzB4MDQsIDB4RUQsIDB4MDAsIDB4OTQsIDB4MDMsIDB4NDEsIDB4MEUsIDB4NDAsIDB4MzgsIDB4MDAsIDB4RUQsIDB4MDAsIDB4QjQsCisweDAxLCAweEQwLCAweDhGLCAweEMwLCAweDNBLCAweDAwLCAweEU1LCAweDAwLCAweDg0LCAweDAzLCAweEQwLCAweDBBLCAweDQyLAorMHgzQiwgMHg4MCwgMHhDRCwgMHgwMCwgMHg4NCwgMHgwMywgMHhEMCwgMHgwRSwgMHg0MCwgMHg0QywgMHgwMCwgMHgwNiwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4NzksIDB4ODgsIDB4RTUsIDB4MjEsIDB4QjQsIDB4NDcsIDB4RDAsCisweDFFLCAweDQ0LCAweDdCLCAweDEyLCAweEVDLCAweDAxLCAweDM0LCAweDA3LCAweDkwLCAweDFFLCAweDQwLCAweDdCLCAweDAxLAorMHhFRCwgMHgyMSwgMHgxNCwgMHgwNywgMHgwMSwgMHgxRSwgMHg0QywgMHg3OSwgMHgwMiwgMHhFRCwgMHgwMSwgMHhCNCwgMHgwNywKKzB4RDgsIDB4NUYsIDB4NDAsIDB4NzgsIDB4MDAsIDB4RjUsIDB4MTEsIDB4QjQsIDB4MTcsIDB4RDAsIDB4M0EsIDB4NDAsIDB4N0IsCisweDAwLCAweEVELCAweDIxLCAweDg0LCAweDQ3LCAweEQwLCAweDFFLCAweDQ4LCAweDEyLCAweDAwLCAweDA0LCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHgyOCwgMHgzMywgMHgwMCwgMHhDRCwgMHgwMCwgMHgzNiwgMHgwRiwgMHhEMCwgMHgwQywKKzB4NDAsIDB4MzMsIDB4MDAsIDB4Q0QsIDB4MDEsIDB4MzQsIDB4MDMsIDB4MTAsIDB4OUMsIDB4NDAsIDB4MzMsIDB4MDAsIDB4OEQsCisweEEwLCAweDE1LCAweDA3LCAweDEwLCAweDBDLCAweDQwLCAweDMwLCAweDEwLCAweERELCAweDAzLCAweDM0LCAweDA3LCAweEQwLAorMHgwQywgMHg0MCwgMHhGMiwgMHgwMCwgMHhDNSwgMHgwMSwgMHgxNCwgMHgwMywgMHhEMCwgMHgwOCwgMHg0MCwgMHgzMywgMHg4MCwKKzB4REQsIDB4MEQsIDB4MDQsIDB4MDcsIDB4RDAsIDB4MEMsIDB4NDAsIDB4NUEsIDB4MjAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDE3LCAweEE4LCAweDE1LCAweDA4LCAweDVGLCAweDAwLCAweEZDLCAweDAxLCAweEYwLCAweDA1LCAweEMwLAorMHgxNywgMHgwMCwgMHg3RiwgMHgwRSwgMHhGNCwgMHgwMSwgMHhCMCwgMHhBNywgMHhDMiwgMHgxNSwgMHgwOCwgMHg0RiwgMHgwNSwKKzB4REMsIDB4MUQsIDB4MzUsIDB4MDUsIDB4QzQsIDB4MTUsIDB4MDAsIDB4N0YsIDB4ODUsIDB4RkMsIDB4RUQsIDB4RjAsIDB4MDUsCisweEMwLCAweDFDLCAweDgxLCAweDc3LCAweDAxLCAweDdDLCAweDAxLCAweEYxLCAweDA2LCAweEMwLCAweDE3LCAweDA4LCAweDdELAorMHgwMiwgMHhDRCwgMHgwNSwgMHhGMCwgMHgwNCwgMHhDMCwgMHg1RSwgMHgwMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MTIsIDB4MDAsIDB4MDcsIDB4MDAsIDB4MUYsIDB4MDAsIDB4N0MsIDB4NDAsIDB4RjAsIDB4MDEsIDB4QzAsIDB4MDcsCisweDAwLCAweDFGLCAweDAyLCAweDc4LCAweDA0LCAweDc0LCAweDAxLCAweDAwLCAweDA3LCAweDAwLCAweDFFLCAweDAwLCAweDdELAorMHg0MCwgMHhGMCwgMHgwMSwgMHhDMCwgMHgwNywgMHgwMCwgMHgxRiwgMHgwNiwgMHg3QywgMHgwMCwgMHhDMCwgMHgwMCwgMHhDMCwKKzB4ODcsIDB4ODEsIDB4MUYsIDB4MTAsIDB4NjQsIDB4MDgsIDB4RjIsIDB4MjEsIDB4QzEsIDB4ODcsIDB4MjAsIDB4MUYsIDB4MDIsCisweDdELCAweDA4LCAweEYwLCAweDAxLCAweEMwLCAweDQ5LCAweDIwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgxMCwgMHgwOCwgMHgyNywgMHgwMCwgMHg5RiwgMHgwMCwgMHgzQywgMHgwMiwgMHgzMCwgMHgwOSwgMHhFMCwgMHgyNywgMHgwMCwKKzB4ODMsIDB4MDAsIDB4NEMsIDB4MDIsIDB4RjAsIDB4MDksIDB4QzgsIDB4MjYsIDB4MDIsIDB4OUYsIDB4MDQsIDB4MEMsIDB4MDIsCisweDM0LCAweDA5LCAweEMwLCAweDI3LCAweDAxLCAweDlDLCAweDA4LCAweDBDLCAweDAyLCAweDMwLCAweDU5LCAweEMwLCAweEEwLAorMHgyMCwgMHg5MywgMHgwMCwgMHg1QywgMHg4NiwgMHhGMCwgMHgxOSwgMHhDMCwgMHhBNCwgMHgwMCwgMHg5RiwgMHgwMCwgMHg0QywKKzB4MDYsIDB4RjAsIDB4MDksIDB4RDAsIDB4NDAsIDB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsCisweDIwLCAweDI2LCAweDAwLCAweDlELCAweDAwLCAweDc0LCAweDAyLCAweDE0LCAweDA5LCAweDQwLCAweDI3LCAweDAwLCAweDkxLAorMHgwMCwgMHg0NSwgMHgwMiwgMHhEMCwgMHgwOSwgMHhEMCwgMHhBNCwgMHgwMCwgMHg5RCwgMHgwMiwgMHg2QywgMHg0MiwgMHg1MCwKKzB4MDksIDB4NDAsIDB4MjcsIDB4MjEsIDB4OUQsIDB4MDIsIDB4NDUsIDB4MDIsIDB4MTQsIDB4MjksIDB4NTAsIDB4RTQsIDB4NDAsCisweDgxLCAweDEzLCAweDQ0LCAweDg2LCAweEQwLCAweDg5LCAweDQwLCAweDY0LCAweDA4LCAweDlELCAweDAyLCAweDQ0LCAweDFBLAorMHhEMCwgMHgxOSwgMHg0MCwgMHgwNCwgMHg4MCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHhBMCwKKzB4MjQsIDB4MDAsIDB4OUQsIDB4MDAsIDB4NzQsIDB4MDIsIDB4MTAsIDB4MDksIDB4NDAsIDB4MjMsIDB4MDAsIDB4OTEsIDB4MDgsCisweDQ0LCAweDAyLCAweEQ5LCAweDBDLCAweDQwLCAweDI0LCAweDAwLCAweDlELCAweDAwLCAweDY1LCAweDIyLCAweDkyLCAweDA5LAorMHg0NCwgMHgyNywgMHgwMCwgMHhERCwgMHgwMiwgMHg1NiwgMHgwMiwgMHg1MCwgMHgwOSwgMHg0OCwgMHgzNCwgMHgwNCwgMHg5MSwKKzB4QTQsIDB4NTQsIDB4MkEsIDB4RDEsIDB4MjksIDB4NTAsIDB4QTYsIDB4MDAsIDB4OUQsIDB4MEEsIDB4NjQsIDB4MjIsIDB4RDAsCisweDg5LCAweDYwLCAweDYwLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDIwLCAweDIwLAorMHgwMCwgMHg4RCwgMHgwMCwgMHgzNCwgMHgxMiwgMHgxMCwgMHgwOCwgMHg0MCwgMHgyMywgMHgzMSwgMHg4MSwgMHgwNCwgMHgwNCwKKzB4MTIsIDB4RDgsIDB4NDgsIDB4NEMsIDB4MjAsIDB4MDEsIDB4OEQsIDB4MDEsIDB4MjQsIDB4MTIsIDB4OTAsIDB4MDgsIDB4NDAsCisweDIzLCAweDIxLCAweDhELCAweDI0LCAweDE2LCAweDEyLCAweDUwLCAweDRDLCAweDA0LCAweDIwLCAweDAxLCAweDkwLCAweDIwLAorMHgwMCwgMHgxMiwgMHhEMCwgMHgwOCwgMHg0MCwgMHgyMiwgMHgwMCwgMHg4RCwgMHgwOCwgMHgyNCwgMHgwMiwgMHhEMCwgMHgwOCwKKzB4NDAsIDB4NDAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MUQsIDB4QjAsIDB4MDYsIDB4MDAsCisweDFGLCAweDAwLCAweDc0LCAweDAwLCAweDMwLCAweDAxLCAweDQwLCAweDg3LCAweDBBLCAweDUzLCAweDBBLCAweDRDLCAweDI4LAorMHhGMCwgMHhBMSwgMHhDMiwgMHg5NCwgMHgwMiwgMHgxRiwgMHgwQSwgMHg2QywgMHgwMCwgMHgzMCwgMHhBMCwgMHhDMCwgMHg4NywKKzB4MDIsIDB4MUYsIDB4MEEsIDB4NUMsIDB4MjgsIDB4NzAsIDB4QTEsIDB4ODAsIDB4MDQsIDB4MTAsIDB4MTIsIDB4MDAsIDB4NUMsCisweDAwLCAweEYwLCAweDAxLCAweEMwLCAweDA2LCAweDAwLCAweDFELCAweDM2LCAweDZELCAweDAwLCAweEYwLCAweDAxLCAweEMwLAorMHg3NCwgMHhFMCwgMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOSwgMHhCOCwgMHgyNywgMHgwMCwgMHg5RiwKKzB4MDAsIDB4RkMsIDB4MjMsIDB4RjAsIDB4MDksIDB4QzAsIDB4MjcsIDB4NDIsIDB4QkYsIDB4MDgsIDB4RkMsIDB4MjIsIDB4RjAsCisweDhCLCAweDQwLCAweDI3LCAweDAyLCAweEJGLCAweDIwLCAweEZELCAweDIyLCAweDcwLCAweDA5LCAweEMwLCAweDI3LCAweDAyLAorMHhCRiwgMHgwOCwgMHhFOCwgMHgyMiwgMHhCMCwgMHg4OSwgMHhDMCwgMHgyRiwgMHgwMiwgMHhCRiwgMHgwMCwgMHg3QywgMHgyMiwKKzB4RjMsIDB4MEIsIDB4QzAsIDB4MjUsIDB4MDAsIDB4QkYsIDB4MDQsIDB4REMsIDB4MDIsIDB4RjAsIDB4MDksIDB4QzAsIDB4NzcsCisweDYwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweEEwLCAweDI3LCAweDAwLCAweDlGLCAweDIwLAorMHhGQywgMHgxNiwgMHgzMCwgMHgwOSwgMHhDMCwgMHhFNywgMHgyMCwgMHhCRiwgMHgyMSwgMHg2QywgMHgxMywgMHhGMCwgMHhEOSwKKzB4QzYsIDB4RUYsIDB4MDgsIDB4QjMsIDB4MDIsIDB4Q0MsIDB4MTYsIDB4RjAsIDB4MDksIDB4QzAsIDB4NkYsIDB4MDQsIDB4QjMsCisweDA3LCAweDRDLCAweDFFLCAweEYwLCAweDVCLCAweEMwLCAweDY4LCAweDAwLCAweEIzLCAweDAwLCAweEZDLCAweDEyLCAweDM0LAorMHgwQiwgMHhDMiwgMHgyRiwgMHgyMCwgMHhCRiwgMHgwMCwgMHhDNCwgMHgwMiwgMHhCNCwgMHgwQiwgMHhDMCwgMHg3NywgMHg4MCwKKzB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MUMsIDB4MDgsIDB4MDcsIDB4MDAsIDB4MUQsIDB4MDAsIDB4NzQsCisweDI4LCAweDEwLCAweDAxLCAweDRDLCAweDQ3LCAweDA4LCAweDFDLCAweDE3LCAweDQ1LCAweDUxLCAweEQwLCAweEY1LCAweDQwLAorMHhDNywgMHg0MCwgMHgxMSwgMHgwNSwgMHg1NCwgMHgwOCwgMHg3MCwgMHg1MSwgMHg0MSwgMHg0NywgMHg0MCwgMHgxMSwgMHgwMywKKzB4NDUsIDB4MEQsIDB4RDAsIDB4NzEsIDB4NTEsIDB4ODQsIDB4NDAsIDB4MTUsIDB4MDAsIDB4NzQsIDB4MDAsIDB4MTEsIDB4MDEsCisweDQwLCAweDA3LCAweDAwLCAweDFELCAweDIwLCAweDQ0LCAweDAxLCAweDEwLCAweDAxLCAweDQwLCAweDYyLCAweDAwLCAweDBDLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHhBMCwgMHgyMywgMHgwMCwgMHg4RCwgMHgwMCwgMHgzNCwgMHgwMywKKzB4MTAsIDB4MDgsIDB4NDAsIDB4QTMsIDB4MDEsIDB4OEQsIDB4MDIsIDB4MDQsIDB4QjIsIDB4RDAsIDB4MDgsIDB4NDAsIDB4QTMsCisweDAxLCAweDgxLCAweDAwLCAweDI1LCAweDBFLCAweEMxLCAweDA4LCAweDQwLCAweDIxLCAweDA0LCAweDgxLCAweDA3LCAweDI0LAorMHgzMiwgMHg1MCwgMHg4OCwgMHg0MCwgMHhBMiwgMHgyMCwgMHg4MSwgMHg0MCwgMHgzNCwgMHgyMiwgMHg1MCwgMHgwOCwgMHg0MCwKKzB4MjMsIDB4MDAsIDB4OEQsIDB4MDAsIDB4NDYsIDB4MDMsIDB4RDEsIDB4MDgsIDB4NDAsIDB4NEIsIDB4ODAsIDB4MDQsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweEE4LCAweDI1LCAweDAwLCAweDlELCAweDAwLCAweDc0LCAweDIyLCAweDEwLAorMHgwOSwgMHg0MCwgMHgyNywgMHgwMCwgMHg5RCwgMHgxNCwgMHg0NCwgMHgwMiwgMHhEMCwgMHgwOSwgMHg0MCwgMHgzNywgMHgwMCwKKzB4OTEsIDB4MDAsIDB4NzQsIDB4MDIsIDB4MTAsIDB4MDksIDB4NDAsIDB4MjcsIDB4ODAsIDB4OTEsIDB4NDAsIDB4NjQsIDB4MTIsCisweEQ4LCAweDA5LCAweDYwLCAweDI2LCAweDAxLCAweDk1LCAweDAyLCAweDY0LCAweDAyLCAweDU4LCAweDBELCAweDQwLCAweDI3LAorMHgwMCwgMHhERCwgMHgwNCwgMHg0NCwgMHgwMiwgMHg1MCwgMHgwOSwgMHg0MCwgMHg2MiwgMHgyMCwgMHgwNiwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4MjgsIDB4MjUsIDB4MDAsIDB4OUYsIDB4MDAsIDB4N0MsIDB4MEEsIDB4MzQsIDB4MDksCisweEMwLCAweDI3LCAweDA4LCAweDlGLCAweDQyLCAweDRDLCAweDAyLCAweEYwLCAweDI5LCAweEMwLCAweDI3LCAweDIwLCAweDkxLAorMHgwOCwgMHg2RCwgMHgwQSwgMHhGMCwgMHgwOSwgMHhDMCwgMHgyNSwgMHgyMCwgMHg5MywgMHgwMCwgMHg2QywgMHgwNiwgMHg3MCwKKzB4MDksIDB4NDIsIDB4QTYsIDB4QTEsIDB4OTMsIDB4MjIsIDB4NzQsIDB4MDIsIDB4NzgsIDB4MDksIDB4QzEsIDB4MjcsIDB4MDAsCisweDlGLCAweDA2LCAweDRELCAweDAyLCAweEY0LCAweDA5LCAweEMwLCAweDE3LCAweDgwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgxNiwgMHgwMCwgMHgyNSwgMHgwOCwgMHg5RiwgMHgwMCwgMHgzQywgMHgwMiwgMHhGMCwgMHgwOSwgMHhDMCwKKzB4MjcsIDB4MDAsIDB4OUYsIDB4ODAsIDB4N0MsIDB4MjIsIDB4RjAsIDB4OTksIDB4QzAsIDB4MjcsIDB4MDAsIDB4OUYsIDB4MTEsCisweDVDLCAweDE2LCAweEYwLCAweDA5LCAweEMwLCAweDI3LCAweDAwLCAweDhGLCAweDEzLCAweDVDLCAweDA2LCAweEYwLCAweDA5LAorMHhDMCwgMHg2NSwgMHg4MCwgMHg5RiwgMHgwMCwgMHg3QywgMHgwMiwgMHhCMCwgMHgwOSwgMHhDMSwgMHgyNywgMHgwMCwgMHg5RiwKKzB4MDEsIDB4N0UsIDB4MjIsIDB4QjQsIDB4MDksIDB4QzAsIDB4NUIsIDB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDE0LCAweDA4LCAweDA1LCAweDAwLCAweDFGLCAweDAwLCAweDdDLCAweDA4LCAweEY4LCAweDAxLCAweEMwLCAweDA3LAorMHg4MCwgMHgxMywgMHgwNiwgMHg3QywgMHgwOCwgMHhGMCwgMHgwMSwgMHhDMCwgMHg0NywgMHg4MCwgMHgxRiwgMHgwMCwgMHg0QywKKzB4MDAsIDB4NzAsIDB4MDEsIDB4QzAsIDB4NDcsIDB4MTAsIDB4MUYsIDB4MDAsIDB4N0MsIDB4MDgsIDB4MzQsIDB4MTEsIDB4QzAsCisweDg3LCAweDA0LCAweDEzLCAweDI2LCAweDJDLCAweDEwLCAweEYwLCAweDAxLCAweEMwLCAweDA1LCAweDAwLCAweDFGLCAweDA0LAorMHg3QywgMHg0OCwgMHgzMCwgMHg4MSwgMHhDMCwgMHg1MywgMHgyMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MTQsIDB4MjAsIDB4MTQsIDB4MDAsIDB4NUQsIDB4MDAsIDB4NzQsIDB4MDEsIDB4RDAsIDB4MDUsIDB4NDAsIDB4MTcsIDB4QzAsCisweDcwLCAweDAwLCAweDc0LCAweDAxLCAweEQwLCAweDA1LCAweDAwLCAweDVGLCAweDgwLCAweDZGLCAweDQ2LCAweEM1LCAweDA1LAorMHg3MCwgMHgwNSwgMHg0MCwgMHgxRiwgMHgwMCwgMHg3RCwgMHg4MSwgMHg3NCwgMHgwMSwgMHgzMCwgMHg0NywgMHg0MCwgMHgxQiwKKzB4MDAsIDB4NzEsIDB4MDMsIDB4Q0MsIDB4MDksIDB4NjAsIDB4MzcsIDB4NDAsIDB4MUMsIDB4QTAsIDB4N0QsIDB4MDIsIDB4QjQsCisweDA5LCAweDEwLCAweDA1LCAweDQwLCAweDQzLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LAorMHhBMCwgMHgzMiwgMHgwMCwgMHhDRCwgMHgwMCwgMHgzNCwgMHgwMiwgMHhEMCwgMHgwQywgMHg0MCwgMHgzMSwgMHgxMCwgMHhEMSwKKzB4MDMsIDB4MzQsIDB4MDMsIDB4RDIsIDB4MEMsIDB4NDgsIDB4NzcsIDB4MEEsIDB4Q0QsIDB4MDMsIDB4MDQsIDB4MDcsIDB4RDMsCisweDBDLCAweDQ0LCAweDM3LCAweDAwLCAweENELCAweDA4LCAweDM2LCAweDAzLCAweDEwLCAweDFELCAweDQwLCAweEIxLCAweDYwLAorMHgwMSwgMHgwMiwgMHgwNCwgMHgyMywgMHhEMCwgMHgzQywgMHg0MCwgMHg4MSwgMHgwNCwgMHhERCwgMHg4MCwgMHgzNCwgMHgwQiwKKzB4MDQsIDB4MUMsIDB4NjAsIDB4NDMsIDB4MDAsIDB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4ODAsCisweDM4LCAweDAwLCAweEVELCAweDAwLCAweEI0LCAweDAzLCAweEQwLCAweDBFLCAweDQwLCAweDdCLCAweDAwLCAweEUxLCAweDAyLAorMHhCNiwgMHgwMywgMHhEMCwgMHgwRSwgMHg0MCwgMHgzQiwgMHgwMCwgMHhFNSwgMHg4MCwgMHg4NSwgMHgwOCwgMHg1MCwgMHgwRSwKKzB4NjAsIDB4OUIsIDB4MDAsIDB4NkQsIDB4NDAsIDB4MzYsIDB4MDcsIDB4MTgsIDB4MEUsIDB4NDAsIDB4M0IsIDB4NDAsIDB4MjEsCisweDEwLCAweDg2LCAweDAzLCAweDUwLCAweDE3LCAweDQ5LCAweDA4LCAweDAwLCAweEFELCAweDAyLCAweEI2LCAweDAzLCAweDEwLAorMHgwRSwgMHg2MCwgMHgxMywgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgxMCwgMHg3OCwKKzB4MDAsIDB4RUYsIDB4MDEsIDB4QkMsIDB4MDYsIDB4RDAsIDB4MUUsIDB4QzIsIDB4NzEsIDB4MDIsIDB4NjEsIDB4MDEsIDB4QkMsCisweDNGLCAweEYwLCAweEZFLCAweEMwLCAweDVCLCAweDAwLCAweEVELCAweDAxLCAweDhELCAweDA1LCAweDc4LCAweDNFLCAweDQxLAorMHg3QiwgMHgwMCwgMHhFRCwgMHgwMSwgMHhCQywgMHgwNywgMHgzMCwgMHgxRSwgMHhDMiwgMHg2OSwgMHgwMCwgMHg2MywgMHhBMCwKKzB4OEMsIDB4MDcsIDB4RDEsIDB4MTIsIDB4QzAsIDB4NDksIDB4MDAsIDB4RUQsIDB4ODEsIDB4QkMsIDB4MDYsIDB4MzgsIDB4MUUsCisweEMwLCAweDUzLCAweDYwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweEIwLCAweDM1LCAweDAwLAorMHhERiwgMHgwMCwgMHg3QywgMHgwMywgMHhGMCwgMHgwRCwgMHhDMCwgMHhCNywgMHgwMCwgMHg1RiwgMHgwMCwgMHg3QywgMHgwMywKKzB4QzAsIDB4MEQsIDB4NDAsIDB4MTcsIDB4MDAsIDB4Q0YsIDB4MDAsIDB4N0MsIDB4MDAsIDB4RjEsIDB4MkQsIDB4QzAsIDB4MzcsCisweDIwLCAweDVGLCAweDgwLCAweDdDLCAweEIzLCAweEMwLCAweDBELCAweEM4LCAweDI3LCAweDAwLCAweDRGLCAweDAwLCAweDdDLAorMHgwMywgMHhGMCwgMHgwNCwgMHhDMCwgMHgxNywgMHgwMCwgMHg5RCwgMHgwMCwgMHgzQywgMHgwMCwgMHhGMSwgMHgwRCwgMHhDOCwKKzB4NDMsIDB4NjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4QTAsIDB4N0YsIDB4MDAsIDB4RkYsCisweDAxLCAweEZDLCAweDEzLCAweEY4LCAweDhGLCAweEMwLCAweDdGLCAweDA0LCAweEY3LCAweDA5LCAweENDLCAweDg3LCAweEYwLAorMHgxRiwgMHhDMCwgMHg3QywgMHgwMCwgMHhFQiwgMHgwMSwgMHhFQywgMHgwNywgMHhGOSwgMHg5RiwgMHhDMCwgMHg3RiwgMHgwMCwKKzB4RkYsIDB4MDksIDB4Q0MsIDB4MEYsIDB4QjEsIDB4MUYsIDB4QzAsIDB4M0IsIDB4MDAsIDB4MzMsIDB4MDEsIDB4RUUsIDB4MjcsCisweDMwLCAweDE3LCAweEMwLCAweDRGLCAweDAwLCAweDdGLCAweDgxLCAweENDLCAweDA1LCAweEMwLCAweDlBLCAweEMwLCAweDFBLAorMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwgMHg4OCwgMHgzOSwgMHgwMCwgMHhFRCwgMHgwOCwKKzB4QjQsIDB4MjMsIDB4RDAsIDB4MEUsIDB4NDgsIDB4M0IsIDB4MDEsIDB4RUQsIDB4MDAsIDB4ODQsIDB4MDMsIDB4RDEsIDB4MEUsCisweDRFLCAweDM4LCAweDQwLCAweEUxLCAweDAwLCAweDg0LCAweDAwLCAweDc4LCAweDBFLCAweDQwLCAweDFCLCAweDA4LCAweEZELAorMHgwMCwgMHg4NCwgMHgxMywgMHgxMCwgMHgwRSwgMHg0MiwgMHgzQiwgMHgwMywgMHhBMSwgMHg4MCwgMHhCQywgMHgwMywgMHgxNCwKKzB4MDYsIDB4NDAsIDB4MEIsIDB4MDgsIDB4MkQsIDB4OTgsIDB4ODQsIDB4MjAsIDB4OTAsIDB4MEEsIDB4NDAsIDB4NTQsIDB4MjAsCisweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDM5LCAweDAwLCAweEVELCAweDAwLCAweEI0LAorMHgwQiwgMHhEMCwgMHg4RSwgMHg0MCwgMHgzQiwgMHgyOCwgMHhFRCwgMHgwMCwgMHhBNCwgMHgwMywgMHhEMCwgMHgwRSwgMHg0MCwKKzB4MUEsIDB4MDAsIDB4RTEsIDB4MDAsIDB4ODQsIDB4NDEsIDB4RDAsIDB4MEUsIDB4NDQsIDB4MUIsIDB4MDAsIDB4RUQsIDB4OTAsCisweEE0LCAweEMzLCAweDE4LCAweDg2LCAweDQwLCAweEFCLCAweDBBLCAweDYxLCAweDA4LCAweEE0LCAweDAxLCAweDU0LCAweDA2LAorMHg0MCwgMHgwQiwgMHgwMCwgMHg2RCwgMHgwMCwgMHg4NCwgMHg0MCwgMHhEMCwgMHgwRSwgMHg0MCwgMHgyMiwgMHgwMSwgMHgwNCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDYsIDB4MjgsIDB4MzMsIDB4MDAsIDB4Q0QsIDB4MDAsIDB4MzQsIDB4MDMsCisweEQwLCAweDBDLCAweDAwLCAweDMzLCAweDEwLCAweDlELCAweDBCLCAweDI0LCAweDJGLCAweEQwLCAweDFDLCAweDVBLCAweDAyLAorMHgwMCwgMHhDMSwgMHg0MCwgMHgwNSwgMHgwMSwgMHg1MCwgMHgwQywgMHg0MCwgMHgwNywgMHgwMCwgMHg4RCwgMHgwMiwgMHgyNCwKKzB4MDcsIDB4MUEsIDB4MDgsIDB4NDAsIDB4NjMsIDB4QzAsIDB4NDEsIDB4MDAsIDB4MTQsIDB4MDEsIDB4NTAsIDB4MjQsIDB4NDAsCisweDEzLCAweDIwLCAweDBELCAweDAzLCAweDA1LCAweDBDLCAweDkwLCAweDBDLCAweDQwLCAweDA4LCAweDIwLCAweDBDLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwgMHhBOCwgMHgzNSwgMHgwMCwgMHhERiwgMHgwMCwgMHgzQywgMHg0MiwgMHhEMCwKKzB4MEQsIDB4QzAsIDB4M0YsIDB4MDAsIDB4OUYsIDB4MDAsIDB4RUMsIDB4MDMsIDB4RjAsIDB4MUYsIDB4QzAsIDB4MjYsIDB4MDAsCisweEMxLCAweDAwLCAweDRDLCAweDIzLCAweEYwLCAweDBGLCAweEMwLCAweDI3LCAweDAwLCAweDlGLCAweDAxLCAweEVDLCAweDBGLAorMHgxNCwgMHgwMSwgMHhFMiwgMHg3NywgMHgwNCwgMHgxMywgMHgwMiwgMHg2NCwgMHgwMywgMHg1MCwgMHhBNSwgMHg0MCwgMHgwNywKKzB4MDAsIDB4REYsIDB4MDMsIDB4NEMsIDB4MEYsIDB4RDAsIDB4MEQsIDB4QzIsIDB4NTYsIDB4MDAsIDB4MDYsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDM3LCAweDAwLCAweERELCAweDAwLCAweDdDLCAweDAzLCAweEYxLCAweDBELAorMHg0MCwgMHgzNywgMHgyMCwgMHg5RiwgMHgxMCwgMHg1QywgMHgwMywgMHhGMCwgMHhDRCwgMHhDMCwgMHhBMSwgMHgxMCwgMHg5NywKKzB4MDEsIDB4N0QsIDB4MDAsIDB4NzAsIDB4MEQsIDB4QzAsIDB4ODcsIDB4MDAsIDB4MUYsIDB4MDQsIDB4NUMsIDB4NDMsIDB4NzIsCisweDIxLCAweEUwLCAweEE3LCAweDgwLCAweDFGLCAweDI4LCAweDc0LCAweDAzLCAweEEwLCAweDA1LCAweEMwLCAweDA3LCAweDAwLAorMHg5RCwgMHgwNCwgMHg3QywgMHgwQiwgMHhCMCwgMHgwRCwgMHhDMCwgMHhCNywgMHgyMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4ODAsIDB4MDgsIDB4M0YsIDB4MDAsIDB4RkYsIDB4MjAsIDB4RkMsIDB4MDIsIDB4QjAsIDB4MEYsIDB4RTAsCisweDNCLCAweEEwLCAweDFCLCAweDAwLCAweENFLCAweDQzLCAweDMwLCAweDBDLCAweEMwLCAweDI0LCAweDAwLCAweEZCLCAweDAwLAorMHhBQywgMHgwMSwgMHhCMCwgMHgwRiwgMHhDMCwgMHgyRiwgMHgwMCwgMHhBMywgMHgwMCwgMHhDQywgMHgwMywgMHhGMCwgMHgwQSwKKzB4QzAsIDB4MjgsIDB4MTAsIDB4NzMsIDB4NTksIDB4OEMsIDB4MDMsIDB4MzIsIDB4NDcsIDB4QzAsIDB4MEMsIDB4MDAsIDB4RUQsCisweDAyLCAweENDLCAweDQ3LCAweDMwLCAweDBGLCAweEMwLCAweDA3LCAweDIwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMSwgMHgyMCwgMHgzNiwgMHgwMCwgMHhERCwgMHgwMCwgMHg3NCwgMHgwMywgMHg5MCwgMHgwRCwgMHg0MCwgMHgzNywKKzB4OTgsIDB4MTEsIDB4MDEsIDB4NDQsIDB4MDMsIDB4MTAsIDB4MEQsIDB4NDIsIDB4NjQsIDB4MDgsIDB4RDEsIDB4MDEsIDB4NkMsCisweDA0LCAweEIwLCAweDBELCAweEMyLCAweEU3LCAweDA0LCAweDExLCAweDAxLCAweDQ0LCAweDAzLCAweEQwLCAweDM5LCAweDQ0LAorMHg2NCwgMHgwMSwgMHg0MSwgMHgwMSwgMHg2QywgMHgwNywgMHgxMCwgMHgyNCwgMHg0MCwgMHg4NCwgMHgwMiwgMHgxRCwgMHgwMCwKKzB4MDUsIDB4MDEsIDB4MTAsIDB4MEQsIDB4NEUsIDB4MDcsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAxLCAweEEwLCAweDM2LCAweDAwLCAweERELCAweDAwLCAweDc0LCAweDAzLCAweDkwLCAweDBELCAweDQ4LCAweDM3LCAweDIwLAorMHgxMSwgMHgwMSwgMHgwNCwgMHgwMywgMHgxMCwgMHgwRCwgMHg2MCwgMHg0NCwgMHgwMCwgMHhEMSwgMHgxMSwgMHg2NCwgMHgwNywKKzB4OTIsIDB4MEQsIDB4NDIsIDB4NjcsIDB4ODAsIDB4MTEsIDB4MDEsIDB4NjQsIDB4ODMsIDB4NTAsIDB4MTEsIDB4NDEsIDB4NTYsCisweDAwLCAweDE5LCAweDAwLCAweDQ2LCAweDA3LCAweDEwLCAweDA1LCAweDQwLCAweDA0LCAweDA0LCAweDVELCAweDAwLCAweDQ0LAorMHgxQiwgMHgxNCwgMHgwOSwgMHg0MCwgMHgwNywgMHgwMCwgMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwKKzB4MDgsIDB4MzAsIDB4MDAsIDB4Q0QsIDB4MDAsIDB4MzQsIDB4MDMsIDB4OTAsIDB4MEMsIDB4NDAsIDB4MzMsIDB4MDAsIDB4ODEsCisweDAxLCAweDA0LCAweDAzLCAweDE0LCAweDBDLCAweDYwLCAweDIwLCAweDIwLCAweEMxLCAweDAwLCAweDI0LCAweDAwLCAweDkyLAorMHgwQywgMHg2MCwgMHgwMSwgMHg5MCwgMHgwMSwgMHgwMSwgMHgyNCwgMHgwMywgMHhEMCwgMHgwMCwgMHg0MiwgMHgyMiwgMHgwMCwKKzB4Q0QsIDB4MDAsIDB4MjQsIDB4MDMsIDB4MTQsIDB4MDQsIDB4NDAsIDB4MjAsIDB4MDAsIDB4Q0QsIDB4MDAsIDB4MDQsIDB4MDIsCisweDEwLCAweDA4LCAweDQwLCAweDQzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLAorMHgzNiwgMHgwMCwgMHhERiwgMHgwMCwgMHg3QywgMHgwMywgMHhCMCwgMHgwRCwgMHg0MCwgMHgzRiwgMHgwMCwgMHgxMSwgMHgyMCwKKzB4QzQsIDB4MDMsIDB4MzAsIDB4MEYsIDB4QzAsIDB4MDQsIDB4MjAsIDB4REIsIDB4MDAsIDB4NkQsIDB4MDEsIDB4QjEsIDB4MEYsCisweDQwLCAweDI3LCAweDE4LCAweDkzLCAweDAwLCAweEFDLCAweDAzLCAweDcwLCAweDAxLCAweEMwLCAweDI2LCAweDAwLCAweDVCLAorMHgwMCwgMHg0QywgMHgwMSwgMHgzMCwgMHgwNSwgMHhFMCwgMHgwNCwgMHgwMCwgMHgwRiwgMHgwMCwgMHg0QywgMHgwMywgMHgzMCwKKzB4MEQsIDB4QzIsIDB4MDcsIDB4NDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4QTgsIDB4M0YsCisweDAwLCAweEZGLCAweDAwLCAweEZDLCAweDAzLCAweDc4LCAweDBGLCAweEMwLCAweDNGLCAweDEwLCAweEI3LCAweDAwLCAweEZDLAorMHgwMywgMHhGMCwgMHgwRiwgMHhDMCwgMHgyRiwgMHgxMCwgMHg3RiwgMHgwMCwgMHhGQywgMHgwMCwgMHg3MCwgMHgwRiwgMHhDMCwKKzB4MkYsIDB4MDAsIDB4QkYsIDB4MDAsIDB4REMsIDB4MDMsIDB4RjAsIDB4MEIsIDB4QzAsIDB4MkQsIDB4MDAsIDB4NzMsIDB4MDAsCisweEJDLCAweDAwLCAweEYwLCAweDA3LCAweDAwLCAweDBGLCAweDA4LCAweDNGLCAweDAwLCAweEZDLCAweDAwLCAweEYwLCAweDBGLAorMHhDMCwgMHgxNywgMHg2MSwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHhBMCwgMHg3QiwgMHgwMCwKKzB4MzMsIDB4MDAsIDB4Q0MsIDB4MDMsIDB4MzAsIDB4MEIsIDB4QzAsIDB4MkYsIDB4MDAsIDB4QTMsIDB4MDAsIDB4OEMsIDB4MDYsCisweEIwLCAweDAzLCAweEMwLCAweDY4LCAweDAyLCAweDNGLCAweDAxLCAweDhDLCAweDA0LCAweDcwLCAweDFCLCAweEMwLCAweDNGLAorMHgwMCwgMHgzMywgMHgwQywgMHhDQywgMHgwNCwgMHhCMCwgMHgyQiwgMHgxMCwgMHg0QywgMHgwMCwgMHhGMywgMHgwMSwgMHhDQywKKzB4MDIsIDB4MzAsIDB4MEIsIDB4RDAsIDB4NEMsIDB4MDAsIDB4QjMsIDB4MDAsIDB4Q0MsIDB4MDcsIDB4RjAsIDB4MEYsIDB4QzAsCisweDBDLCAweDAwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDM3LCAweDE0LCAweDExLAorMHgwMCwgMHhDNCwgMHgwMywgMHgxMSwgMHg0OSwgMHg0MCwgMHg2RiwgMHgwMCwgMHg5MSwgMHgwQiwgMHg0NCwgMHg4NCwgMHg1MCwKKzB4MDEsIDB4NDAsIDB4MjQsIDB4MjEsIDB4MUQsIDB4MjEsIDB4NDQsIDB4ODQsIDB4MTAsIDB4MTksIDB4NDAsIDB4M0YsIDB4MDQsCisweDExLCAweDAyLCAweDQ0LCAweDA0LCAweDEwLCAweDJGLCAweDQyLCAweDI0LCAweDEwLCAweEQxLCAweDIwLCAweDQ0LCAweDAyLAorMHgxMCwgMHgwQywgMHg0MSwgMHg0NCwgMHgwMCwgMHg4QiwgMHgwMCwgMHg1NCwgMHgwNywgMHhEMCwgMHgxRCwgMHg0MCwgMHgwQywKKzB4MjAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTEsIDB4QTAsIDB4MzcsIDB4MjEsIDB4MDAsIDB4MDAsCisweDA0LCAweDAzLCAweDEwLCAweDA4LCAweDQxLCAweDIzLCAweDAwLCAweEMxLCAweDAwLCAweDQ0LCAweDAyLCAweDEwLCAweDAwLAorMHg0MCwgMHgyMCwgMHgxMCwgMHgxRCwgMHgwMCwgMHgwNSwgMHgwMCwgMHg1MiwgMHgwOCwgMHg0MiwgMHgzMywgMHg4MiwgMHg4MSwKKzB4MDIsIDB4MDQsIDB4MDAsIDB4MTIsIDB4NjgsIDB4NjAsIDB4MDAsIDB4MDAsIDB4RDEsIDB4NDAsIDB4MDQsIDB4MDYsIDB4NTAsCisweDU4LCAweDQwLCAweDAwLCAweDAwLCAweEMxLCAweDAwLCAweDI0LCAweDAzLCAweEQwLCAweDBDLCAweDQwLCAweDRFLCAweDgwLAorMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHhBOCwgMHgzNSwgMHgwOCwgMHg1MSwgMHgwMSwgMHg0NCwKKzB4MDMsIDB4MTAsIDB4MDksIDB4NDAsIDB4NjcsIDB4NDAsIDB4RDEsIDB4MDAsIDB4NDUsIDB4MDAsIDB4NTAsIDB4MTEsIDB4NTAsCisweDM0LCAweDAwLCAweDFELCAweDAxLCAweDQ0LCAweDQ0LCAweDExLCAweDE5LCAweDQxLCAweDM3LCAweDAwLCAweDkxLCAweDAwLAorMHg0MCwgMHgwNCwgMHgxOCwgMHgwQywgMHg2MCwgMHg0MCwgMHg0MCwgMHhEMSwgMHgwNCwgMHg0NCwgMHgwNiwgMHg1MCwgMHg0MSwKKzB4NDAsIDB4NDQsIDB4MjAsIDB4RDksIDB4MDAsIDB4NzQsIDB4MDMsIDB4RDAsIDB4MEQsIDB4NDAsIDB4MEUsIDB4MjAsIDB4MDYsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweEEwLCAweDczLCAweDAwLCAweDEzLCAweDEzLCAweDRELCAweDAzLAorMHgzNCwgMHgwMSwgMHhDMCwgMHg2NywgMHgwMCwgMHg5MywgMHgwMCwgMHg0QywgMHgwMywgMHgzMCwgMHgzOSwgMHhDOCwgMHgyNCwKKzB4MTAsIDB4MEYsIDB4MDMsIDB4NEMsIDB4MEMsIDB4NzAsIDB4MTksIDB4QzgsIDB4MzcsIDB4NDAsIDB4MTMsIDB4MDQsIDB4NEMsCisweDE4LCAweDM0LCAweDA5LCAweEMwLCAweEU0LCAweDAwLCAweEMzLCAweDAwLCAweDRELCAweDA2LCAweDcwLCAweDFELCAweEMwLAorMHhDNCwgMHgwMCwgMHg5MywgMHgwMSwgMHg2QywgMHgwMywgMHhGMCwgMHg0RCwgMHhEMCwgMHgwMiwgMHgyMCwgMHgwRSwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4ODgsIDB4RkQsIDB4NDAsIDB4MkYsIDB4MDAsIDB4QkMsIDB4MDMsIDB4RjEsCisweDkzLCAweEMwLCAweDM3LCAweDAwLCAweEFGLCAweDAyLCAweEZDLCAweDAyLCAweDcwLCAweDBELCAweEMwLCAweDJGLCAweDAwLAorMHgzRiwgMHgxMCwgMHhGQywgMHg4MCwgMHhGMCwgMHgwMywgMHhDOCwgMHgzRiwgMHgyMCwgMHgzRiwgMHgyMywgMHhGQywgMHgwMCwKKzB4NzAsIDB4OUQsIDB4QzAsIDB4MkYsIDB4MDAsIDB4RkYsIDB4MDAsIDB4RkMsIDB4MDAsIDB4QjQsIDB4MUYsIDB4QzAsIDB4MEYsCisweDAwLCAweEFGLCAweDA5LCAweERDLCAweDAzLCAweEYwLCAweDAxLCAweEMwLCAweDFELCAweDAwLCAweDA2LCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHgwOCwgMHgyNSwgMHgwMCwgMHg1MywgMHgwMCwgMHg2RCwgMHgwMywgMHgzMiwgMHgwOSwKKzB4RDAsIDB4MjQsIDB4MDAsIDB4RDMsIDB4ODAsIDB4NEMsIDB4MDMsIDB4MzQsIDB4NkQsIDB4QzAsIDB4MjQsIDB4MDAsIDB4MTMsCisweDQyLCAweDdDLCAweDEwLCAweDMwLCAweDI5LCAweEQxLCAweDMwLCAweDAwLCAweDgzLCAweDAwLCAweDRDLCAweDE4LCAweDMwLAorMHgwOSwgMHhDMCwgMHg4NCwgMHgwMCwgMHhEMywgMHgwMCwgMHgzQywgMHgwMiwgMHhCMCwgMHgxMSwgMHhDMCwgMHgwNCwgMHgwMCwKKzB4REIsIDB4MDAsIDB4NEQsIDB4MDMsIDB4RjAsIDB4MEMsIDB4QzAsIDB4QTgsIDB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDEzLCAweEEwLCAweDI0LCAweDAwLCAweEQxLCAweDAwLCAweEM0LCAweDQzLCAweDEwLCAweDA5LCAweDQwLAorMHgxMCwgMHgwMCwgMHhEMSwgMHgwMCwgMHgwNCwgMHg0NiwgMHgxMCwgMHgyRCwgMHg1MCwgMHgzNCwgMHgwMCwgMHgxMywgMHg4MiwKKzB4MzQsIDB4MDgsIDB4MTAsIDB4NzksIDB4NDAsIDB4N0MsIDB4MDQsIDB4QjUsIDB4MjAsIDB4MkMsIDB4MEMsIDB4QjIsIDB4QUQsCisweDQwLCAweEM0LCAweDA2LCAweEQxLCAweDAxLCAweDc0LCAweDJBLCAweDEwLCAweDA4LCAweDQwLCAweDQwLCAweDAwLCAweERCLAorMHgwMCwgMHg0NCwgMHgwMywgMHhEMCwgMHgwMSwgMHg0MCwgMHg0QywgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDMsIDB4MjAsIDB4MzAsIDB4NDAsIDB4ODEsIDB4MjEsIDB4MDQsIDB4MDMsIDB4MTQsIDB4MDgsIDB4MDgsIDB4MjAsCisweDg5LCAweDgxLCAweDAwLCAweDA2LCAweDA2LCAweDEwLCAweDAxLCAweDQwLCAweDIwLCAweDAwLCAweDA4LCAweDAzLCAweDM0LAorMHgwQywgMHgxOCwgMHgwOCwgMHg0MCwgMHg3MCwgMHgwMCwgMHgwOSwgMHgwMCwgMHgxNCwgMHgyQywgMHg5NCwgMHg4QywgMHg0MCwKKzB4MDIsIDB4MDAsIDB4QzEsIDB4NDEsIDB4MzQsIDB4MDIsIDB4OTAsIDB4MEMsIDB4NDAsIDB4NTIsIDB4NDAsIDB4QzksIDB4MDAsCisweDA1LCAweDAzLCAweEQwLCAweDBDLCAweDQwLCAweDFDLCAweDAwLCAweDBBLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwNCwgMHgwMCwgMHg3QywgMHg0MCwgMHhGMSwgMHgxOSwgMHgwNCwgMHgwNywgMHgxMCwgMHgxOCwgMHg0MCwgMHg2OCwgMHgwMCwKKzB4QjEsIDB4ODEsIDB4QzYsIDB4MDQsIDB4MTAsIDB4OTYsIDB4NDAsIDB4NkMsIDB4NDAsIDB4MjEsIDB4MjEsIDB4QjQsIDB4NDQsCisweDE4LCAweDE2LCAweDYyLCAweDc4LCAweDEwLCAweDBELCAweDAxLCAweEI0LCAweDA0LCAweDk0LCAweDFFLCAweDQwLCAweDZBLAorMHgwMCwgMHhFMSwgMHg1MCwgMHgzNiwgMHgwNiwgMHgxMCwgMHgzRSwgMHg1MCwgMHg0RSwgMHgwNCwgMHhFOSwgMHgwMSwgMHg4NiwKKzB4MDcsIDB4RDAsIDB4MTYsIDB4NjAsIDB4M0MsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsCisweDE4LCAweDMwLCAweDAwLCAweDgzLCAweDA4LCAweDBELCAweDAzLCAweDEwLCAweDA4LCAweEMwLCAweDIwLCAweDQwLCAweEMzLAorMHgwMCwgMHgwRCwgMHgyMiwgMHgzMCwgMHgwNCwgMHg0OCwgMHgyMCwgMHhCMiwgMHgwOSwgMHg1MiwgMHgzQywgMHgyMCwgMHgzNCwKKzB4ODgsIDB4QzAsIDB4MzAsIDB4MDAsIDB4MEIsIDB4MDAsIDB4MUMsIDB4MDAsIDB4OTAsIDB4MEMsIDB4QzAsIDB4ODYsIDB4MDAsCisweEMzLCAweDAwLCAweDNDLCAweDAyLCAweEIwLCAweDAwLCAweEMwLCAweDkyLCAweDEwLCAweENCLCAweDA0LCAweDBDLCAweDAzLAorMHhGMCwgMHgwQywgMHhEMCwgMHg0OCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHgzOCwKKzB4M0QsIDB4MDAsIDB4RUYsIDB4NjgsIDB4RkUsIDB4MEIsIDB4RjAsIDB4MEYsIDB4QzAsIDB4QkYsIDB4MDAsIDB4RkYsIDB4MDAsCisweEZDLCAweDAwLCAweEYwLCAweDA3LCAweEMwLCAweDNGLCAweDIwLCAweEJGLCAweDAwLCAweEZDLCAweDIwLCAweEYwLCAweDhFLAorMHhDMCwgMHgzQiwgMHgwMCwgMHhCNywgMHg4MCwgMHhBRCwgMHgyMiwgMHhGMCwgMHg4RiwgMHhDMCwgMHgyRCwgMHg0MCwgMHhGRiwKKzB4MDQsIDB4RkMsIDB4MDIsIDB4RTAsIDB4MEIsIDB4RTAsIDB4MDksIDB4NDAsIDB4RkYsIDB4MDAsIDB4RkMsIDB4MDMsIDB4RjAsCisweDA3LCAweEMwLCAweDBCLCAweDYwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweEEwLCAweDM3LAorMHgwMCwgMHhENywgMHg2MCwgMHg0QywgMHgwQiwgMHgzNCwgMHgwMSwgMHhDMCwgMHg2RiwgMHgwMCwgMHg5NywgMHgwMCwgMHg3QywKKzB4MDMsIDB4RjAsIDB4MDksIDB4RDAsIDB4MjQsIDB4MDAsIDB4OUYsIDB4MDEsIDB4NEMsIDB4MDAsIDB4RjAsIDB4MDEsIDB4QzAsCisweDM3LCAweDgxLCAweDEyLCAweDA4LCAweDBDLCAweDAwLCAweDMxLCAweDRELCAweEMwLCAweDI0LCAweDAwLCAweEQzLCAweDAwLAorMHg0QywgMHgwMiwgMHhCMCwgMHgxRCwgMHhEMCwgMHg1NCwgMHgwMCwgMHhEMywgMHhBMCwgMHg0QywgMHg4MywgMHhGMCwgMHgwRCwKKzB4QzAsIDB4NTcsIDB4MDAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4ODAsIDB4M0QsIDB4MDAsCisweEUxLCAweDAwLCAweDA2LCAweDEzLCAweDEwLCAweDAyLCAweDQwLCAweDNCLCAweDAwLCAweEUxLCAweDAwLCAweEI0LCAweDAyLAorMHhEMCwgMHgwRSwgMHg0MiwgMHgyOCwgMHgyMCwgMHhBOCwgMHgwMCwgMHg4NCwgMHgwMCwgMHhEMCwgMHgwRSwgMHg0MCwgMHgzRiwKKzB4MDUsIDB4MzEsIDB4MDAsIDB4ODQsIDB4MDAsIDB4RDQsIDB4MEYsIDB4NTEsIDB4MkMsIDB4MDAsIDB4RTEsIDB4MDAsIDB4MDQsCisweDAyLCAweDE0LCAweDBDLCAweDQwLCAweDA4LCAweDQwLCAweEYxLCAweDAwLCAweDk0LCAweDAzLCAweEQwLCAweDBBLCAweDQ0LAorMHg0RiwgMHgyMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHg3OSwgMHgwMCwgMHhDNSwKKzB4MDEsIDB4ODQsIDB4MjcsIDB4MDAsIDB4MUUsIDB4NDAsIDB4NjMsIDB4MDAsIDB4RUQsIDB4MDEsIDB4QjQsIDB4NDcsIDB4RDAsCisweDNDLCAweDQwLCAweDY4LCAweDA4LCAweEFDLCAweDExLCAweDg0LCAweDA1LCAweEQwLCAweDFBLCAweDQwLCAweDdCLCAweDQzLAorMHgyOSwgMHgwNSwgMHhBNSwgMHgwNCwgMHg5OCwgMHgxRSwgMHg0MCwgMHg2OCwgMHg4MCwgMHhFMSwgMHgwMSwgMHg4NCwgMHgwNywKKzB4MTAsIDB4MTIsIDB4NjAsIDB4NUMsIDB4MDAsIDB4RTEsIDB4MDEsIDB4ODQsIDB4MDcsIDB4RDAsIDB4MUUsIDB4NDAsIDB4MDcsCisweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE2LCAweDI4LCAweDMzLCAweDEwLCAweEQxLCAweDAwLAorMHgwNCwgMHgwMywgMHgxMCwgMHgwQywgMHg0MCwgMHg1MywgMHgyMiwgMHhDOSwgMHgwMCwgMHgzNCwgMHgwQSwgMHhEMCwgMHgxNSwKKzB4NDAsIDB4MzAsIDB4MDAsIDB4QzksIDB4ODIsIDB4MDQsIDB4NkIsIDB4RDAsIDB4MkMsIDB4NDAsIDB4MzMsIDB4MDAsIDB4RDksCisweDAxLCAweDI0LCAweDAzLCAweEQwLCAweDBDLCAweDUwLCAweEYwLCAweDgxLCAweDkxLCAweDAxLCAweDA0LCAweDA3LCAweDEwLAorMHgwOCwgMHg2MCwgMHgyMCwgMHgwMCwgMHhDMSwgMHgwMCwgMHgxNCwgMHgwMywgMHhEMCwgMHg5OCwgMHg0MCwgMHg0QiwgMHgyMCwKKzB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTcsIDB4MjAsIDB4MTUsIDB4MDAsIDB4NzcsIDB4OEEsIDB4NEQsCisweDgxLCAweDMwLCAweDc2LCAweEMwLCAweDlGLCAweDAwLCAweDVGLCAweDAxLCAweEZDLCAweDBELCAweEYxLCAweEI3LCAweEMwLAorMHgxNCwgMHgyMCwgMHg3RiwgMHg0QiwgMHhDQywgMHgwRCwgMHhGMCwgMHgyNiwgMHhDMCwgMHgxNywgMHgxMCwgMHg3QiwgMHgwMSwKKzB4QUMsIDB4MDUsIDB4MzQsIDB4MDUsIDB4QzIsIDB4OUMsIDB4MDQsIDB4NTMsIDB4MDEsIDB4Q0MsIDB4MDksIDB4MzAsIDB4MDcsCisweEMxLCAweDFDLCAweDAwLCAweDUzLCAweDAwLCAweDRELCAweDAxLCAweEYyLCAweDI3LCAweEMyLCAweDVGLCAweDIwLCAweDA2LAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHgwOCwgMHgwNSwgMHgxMCwgMHgxRiwgMHgwMCwgMHgzQywgMHgwMCwKKzB4RjAsIDB4MDEsIDB4QzEsIDB4MDcsIDB4MDAsIDB4MTcsIDB4MDgsIDB4N0MsIDB4MTAsIDB4RjAsIDB4MjEsIDB4QzAsIDB4MDcsCisweDAwLCAweDFCLCAweDAyLCAweDdELCAweDA4LCAweEYwLCAweDQxLCAweEMwLCAweDg3LCAweDAwLCAweDE3LCAweDA4LCAweDVDLAorMHgyOCwgMHg3MCwgMHgyMCwgMHhEMCwgMHgwNywgMHg0MCwgMHgxRiwgMHgwOCwgMHg3RCwgMHg2MCwgMHg3MCwgMHgxMSwgMHhDMCwKKzB4NDcsIDB4MDAsIDB4MUYsIDB4MDAsIDB4N0MsIDB4MDAsIDB4RjAsIDB4MDAsIDB4QzEsIDB4NEIsIDB4MDAsIDB4MEMsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDI1LCAweDAwLCAweDkzLCAweDAwLCAweDRDLCAweDI2LCAweDMwLAorMHgwOSwgMHhDMCwgMHgyNCwgMHgwNCwgMHg5RiwgMHgwMCwgMHg3QywgMHgxNiwgMHhGMCwgMHgwOSwgMHhDMCwgMHgyNCwgMHgwMCwKKzB4OUYsIDB4MDQsIDB4N0MsIDB4ODIsIDB4QjAsIDB4MDksIDB4QzQsIDB4MjYsIDB4NDAsIDB4OTMsIDB4MDQsIDB4NEMsIDB4MTIsCisweDM0LCAweDE5LCAweEMwLCAweDI0LCAweDAxLCAweDkzLCAweDA4LCAweDBDLCAweDAyLCAweDMwLCAweDA5LCAweEMwLCAweDI3LAorMHgwMCwgMHg5RiwgMHgwMSwgMHg0QywgMHgwMiwgMHhGMCwgMHgwOSwgMHhDMCwgMHg0MCwgMHgyMCwgMHgwQywgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MjAsIDB4MjIsIDB4MDAsIDB4OTEsIDB4MDAsIDB4NDQsIDB4MDIsIDB4MTEsIDB4MDksCisweDQwLCAweDI0LCAweDAwLCAweDlELCAweDAwLCAweDc0LCAweDAyLCAweEQwLCAweEE5LCAweDQxLCAweDI0LCAweDAwLCAweDlELAorMHgwMCwgMHgzNCwgMHgwQSwgMHgxMCwgMHg2OSwgMHg0MCwgMHgyNCwgMHgwMCwgMHg5MSwgMHgwMSwgMHg0NCwgMHgxNiwgMHgxMCwKKzB4MTksIDB4RDAsIDB4MjIsIDB4MDAsIDB4OTEsIDB4MDIsIDB4NDUsIDB4MDIsIDB4MTAsIDB4MDksIDB4NDAsIDB4MjcsIDB4MjAsCisweDlELCAweDA5LCAweDZDLCAweDAyLCAweEQwLCAweDA5LCAweDUwLCAweDA0LCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgxOCwgMHhBMCwgMHgyNCwgMHg0MCwgMHg5MSwgMHgyMCwgMHg0NCwgMHgwMiwgMHgxMSwgMHgwOSwgMHg0MCwKKzB4MjUsIDB4MDAsIDB4OUQsIDB4MDAsIDB4NzQsIDB4MDIsIDB4RDAsIDB4MEQsIDB4NTAsIDB4MjUsIDB4MDAsIDB4OUQsIDB4MDAsCisweDc0LCAweDA2LCAweDkwLCAweDA5LCAweDQwLCAweDIyLCAweDAyLCAweDkxLCAweDAwLCAweDY0LCAweDAyLCAweDE0LCAweDQ5LAorMHg0OCwgMHgyNCwgMHgwMCwgMHg5MSwgMHgwMiwgMHg2NCwgMHgyMiwgMHgxOCwgMHgxOSwgMHg0MCwgMHgyNywgMHgwMCwgMHg4RCwKKzB4MDAsIDB4NjUsIDB4MDIsIDB4RDAsIDB4MDksIDB4NDAsIDB4NjAsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDEwLCAweDIwLCAweDI0LCAweDAwLCAweDgxLCAweDA0LCAweDI0LCAweDEyLCAweDEwLCAweDQ5LCAweDQwLCAweDYxLAorMHg5MSwgMHg4RCwgMHgwNCwgMHgzNCwgMHgwMiwgMHhDMCwgMHg0OCwgMHg0MCwgMHgyMSwgMHgwMCwgMHg4RCwgMHgyMCwgMHg3NCwKKzB4MDIsIDB4MDAsIDB4MDgsIDB4NDIsIDB4MjAsIDB4ODksIDB4ODEsIDB4NDQsIDB4MjYsIDB4MDIsIDB4MTgsIDB4NDgsIDB4NDAsCisweDI2LCAweDQwLCAweDgxLCAweDAwLCAweDI0LCAweDEyLCAweDE0LCAweDU4LCAweDQwLCAweDIzLCAweDAwLCAweDhELCAweDA0LAorMHgyNCwgMHgwMiwgMHhEMCwgMHg0OCwgMHg0MCwgMHg0MCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MUQsIDB4QjgsIDB4ODYsIDB4MDIsIDB4MTMsIDB4MEEsIDB4NEMsIDB4MjgsIDB4MzQsIDB4QTEsIDB4RDAsIDB4MDUsIDB4MDAsCisweDFGLCAweDAwLCAweDdDLCAweDAwLCAweEYwLCAweEExLCAweEMwLCAweDg1LCAweDAyLCAweDVGLCAweDAwLCAweDc0LCAweDAxLAorMHhCMSwgMHgwMSwgMHhDOCwgMHg5NiwgMHg0MiwgMHgxMywgMHgwQSwgMHg2RCwgMHgwMCwgMHgzMCwgMHhBNSwgMHg0MCwgMHg4NCwKKzB4MEEsIDB4MDMsIDB4NEEsIDB4NkMsIDB4MjgsIDB4MzAsIDB4QTEsIDB4QzAsIDB4MDcsIDB4MDAsIDB4MUYsIDB4MEEsIDB4NkQsCisweDAwLCAweEYwLCAweDAxLCAweEMwLCAweDc0LCAweEMwLCAweDBBLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFELAorMHhCOCwgMHgyRiwgMHgxMCwgMHhCRiwgMHgwOCwgMHg1RCwgMHgyMiwgMHhGMCwgMHg4QiwgMHhDMCwgMHgzRSwgMHgwMiwgMHhCRiwKKzB4MDgsIDB4RjQsIDB4MDIsIDB4RjAsIDB4OEIsIDB4QzAsIDB4MkUsIDB4MDAsIDB4QUYsIDB4MDAsIDB4RkMsIDB4MDIsIDB4RjIsCisweDBCLCAweDAwLCAweDI3LCAweDAyLCAweEJGLCAweDg4LCAweERDLCAweDgyLCAweEYyLCAweDhCLCAweEMwLCAweDNGLCAweDAwLAorMHhCRiwgMHgwMCwgMHhEQywgMHgyMiwgMHhEMCwgMHg4QiwgMHhDMCwgMHgyQiwgMHgwMCwgMHhCRiwgMHgwOCwgMHg3QywgMHgwMiwKKzB4RjAsIDB4OEIsIDB4QzAsIDB4NjcsIDB4NjAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MUMsIDB4QTgsCisweDNCLCAweDAwLCAweEYyLCAweDE0LCAweENDLCAweDMyLCAweDM0LCAweDBCLCAweEMwLCAweDJDLCAweDAwLCAweDkzLCAweDAwLAorMHhDQywgMHgwMiwgMHhGMCwgMHg0QiwgMHhDMSwgMHgyNCwgMHgwMCwgMHhCMywgMHgwMCwgMHhGQywgMHgwMiwgMHgzMCwgMHgwQiwKKzB4QzAsIDB4RUQsIDB4MDAsIDB4QjMsIDB4MDMsIDB4Q0MsIDB4MDIsIDB4MzAsIDB4M0IsIDB4QzAsIDB4MkMsIDB4MDAsIDB4QkYsCisweDg4LCAweEZDLCAweDEyLCAweDMwLCAweDRBLCAweEMxLCAweDJDLCAweDAwLCAweEIzLCAweDAwLCAweDRELCAweDAyLCAweEYwLAorMHgwOSwgMHhDMCwgMHg2NCwgMHgwMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMCwgMHgwNSwKKzB4MDUsIDB4MDEsIDB4MDQsIDB4MDQsIDB4MzAsIDB4MTEsIDB4MjEsIDB4NDMsIDB4MDQsIDB4MDgsIDB4MTEsIDB4MDgsIDB4NDQsCisweDAwLCAweEQwLCAweDQxLCAweDUwLCAweDA0LCAweDAwLCAweDExLCAweDAwLCAweDc0LCAweDAwLCAweDEwLCAweDAxLCAweDQwLAorMHhDNCwgMHgwOCwgMHg0MSwgMHg0MywgMHg0NCwgMHgwMSwgMHgxMCwgMHgzMCwgMHg0MCwgMHgwMCwgMHgwNCwgMHgxRCwgMHgwMCwKKzB4NUMsIDB4NTEsIDB4MTAsIDB4NDEsIDB4NDIsIDB4MDQsIDB4MDgsIDB4MEIsIDB4MTIsIDB4NTQsIDB4MDAsIDB4RDAsIDB4ODEsCisweDQwLCAweDcwLCAweDIwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDIwLCAweDI1LCAweDAxLAorMHg4MSwgMHg5NCwgMHgwNSwgMHg5MiwgMHg5MCwgMHhDQywgMHg0MCwgMHgyMCwgMHgwMiwgMHg5MSwgMHgyMCwgMHgwNCwgMHgwMiwKKzB4RDAsIDB4NDgsIDB4NDEsIDB4MjAsIDB4MDAsIDB4ODEsIDB4MDEsIDB4NzQsIDB4MDIsIDB4MTAsIDB4MEQsIDB4NDAsIDB4QTEsCisweDA5LCAweDgxLCAweDA2LCAweDA0LCAweDgyLCAweDEwLCAweDY4LCAweDQ4LCAweDIwLCAweDAwLCAweDhELCAweDAwLCAweDM0LAorMHgzMiwgMHgxMCwgMHg0OCwgMHg1MSwgMHgyMCwgMHgwMCwgMHg4OSwgMHgwQywgMHgwNCwgMHgwMiwgMHhEMCwgMHgwOCwgMHg0MCwKKzB4NDgsIDB4ODAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MjgsIDB4MjUsIDB4NEEsIDB4OTEsCisweDEwLCAweDQ0LCAweDAyLCAweDkwLCAweDM5LCAweDQwLCAweDI0LCAweDQwLCAweDkxLCAweDAwLCAweDQ0LCAweDAyLCAweEQwLAorMHgwOSwgMHg0MCwgMHgyNCwgMHgwMCwgMHg5MSwgMHg0MCwgMHg3NCwgMHgxMiwgMHgxMCwgMHgwOSwgMHg0MCwgMHgyNCwgMHgwMCwKKzB4OTEsIDB4MDAsIDB4NDUsIDB4MTIsIDB4MTAsIDB4MDksIDB4NDAsIDB4MjQsIDB4MDAsIDB4OUQsIDB4MDAsIDB4MTQsIDB4MDIsCisweDEwLCAweDY5LCAweDQwLCAweDI0LCAweDIwLCAweDg5LCAweDAwLCAweDU0LCAweDAyLCAweEQwLCAweDA5LCAweDQwLCAweDYwLAorMHgyMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHgwOCwgMHgyMSwgMHgwMCwgMHg5MywgMHgwMCwKKzB4NEMsIDB4MDIsIDB4QjAsIDB4MjksIDB4RDAsIDB4QTQsIDB4MDIsIDB4ODMsIDB4MDAsIDB4NEQsIDB4MDIsIDB4RjAsIDB4MDksCisweEM5LCAweDI0LCAweDQwLCAweDkzLCAweDAzLCAweDdDLCAweDRFLCAweDM0LCAweDQ4LCAweEMwLCAweDI1LCAweDQwLCAweDkzLAorMHgwQiwgMHg0QywgMHgwNiwgMHgyNCwgMHgwOSwgMHhEMCwgMHg2NCwgMHgwMiwgMHg5RiwgMHgwMCwgMHg3QywgMHgwRSwgMHgzNCwKKzB4MDksIDB4QzAsIDB4QTQsIDB4MjQsIDB4OUIsIDB4MDEsIDB4NEQsIDB4MDIsIDB4RjAsIDB4MDksIDB4RDAsIDB4MTQsIDB4MjAsCisweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE2LCAweDAwLCAweDY1LCAweDEwLCAweDlGLCAweDA0LCAweDNDLAorMHg0MiwgMHg3MCwgMHgwOSwgMHhDMCwgMHg2NywgMHgwMCwgMHg5RiwgMHgwMiwgMHg3QywgMHgwMiwgMHhGMSwgMHg0OCwgMHhDMCwKKzB4RTcsIDB4MDAsIDB4OUYsIDB4MDIsIDB4N0MsIDB4MDYsIDB4RjEsIDB4MDksIDB4QzgsIDB4MjMsIDB4NDAsIDB4OUYsIDB4MDEsCisweDdDLCAweDA2LCAweEYwLCAweDA4LCAweEMwLCAweDY3LCAweDAwLCAweDlGLCAweDA1LCAweDdDLCAweDEyLCAweEYwLCAweDE5LAorMHhDMSwgMHgyNywgMHgwMCwgMHg5RiwgMHgwNCwgMHg3RCwgMHgwMiwgMHhGMCwgMHgwOCwgMHhDMCwgMHg1QiwgMHgwMCwgMHgwNCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDgsIDB4MDUsIDB4MDAsIDB4MTMsIDB4ODAsIDB4NEMsIDB4MDAsCisweDMwLCAweDAwLCAweEMwLCAweDgzLCAweDQwLCAweDEzLCAweDAwLCAweDdDLCAweDAwLCAweEYwLCAweDAxLCAweEMwLCAweDA0LAorMHgwMCwgMHgxRiwgMHgxMCwgMHg3RSwgMHgwOCwgMHhGMiwgMHgwMSwgMHhEMSwgMHgwNiwgMHgwMSwgMHgwMywgMHg4MiwgMHg0QywKKzB4NDAsIDB4MzEsIDB4MDEsIDB4QzEsIDB4QzYsIDB4MDAsIDB4MTMsIDB4MDAsIDB4NEMsIDB4MDQsIDB4MzAsIDB4MjAsIDB4QzAsCisweDg0LCAweDAwLCAweDFGLCAweDAwLCAweDRELCAweDAwLCAweEYwLCAweDAxLCAweEMwLCAweDUwLCAweDIwLCAweDA0LCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgyMCwgMHgxNCwgMHgwNCwgMHg1MSwgMHgwMSwgMHhDNSwgMHgwOSwgMHgxMCwKKzB4MDUsIDB4QzAsIDB4NUQsIDB4MDAsIDB4NTEsIDB4MDAsIDB4NzQsIDB4MDEsIDB4RDAsIDB4MTcsIDB4NjAsIDB4MTQsIDB4MDAsCisweDdELCAweDAzLCAweEI0LCAweDAxLCAweEQwLCAweDI3LCAweDQ0LCAweDVDLCAweDAwLCAweDVCLCAweDExLCAweEFDLCAweDE1LAorMHhCMSwgMHg1NywgMHhDMCwgMHgxRSwgMHg0MCwgMHg3MCwgMHgwMCwgMHhDNCwgMHgxMSwgMHgxNCwgMHgzNywgMHg0MCwgMHgxMCwKKzB4MDAsIDB4NUQsIDB4MTEsIDB4NDQsIDB4MDEsIDB4RDAsIDB4MDUsIDB4NTAsIDB4NTAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDEwLCAweEEwLCAweDMyLCAweDQwLCAweEQxLCAweDAwLCAweDI0LCAweDA3LCAweDExLCAweDBDLAorMHg0MCwgMHgzMSwgMHgwNCwgMHhDMSwgMHgwMCwgMHgzNCwgMHgwNywgMHhEMCwgMHgxQywgMHg0OCwgMHgzNCwgMHgwMCwgMHhDRCwKKzB4MDIsIDB4MzQsIDB4MDIsIDB4RDgsIDB4MkMsIDB4NjAsIDB4MzIsIDB4OTAsIDB4QzksIDB4MjEsIDB4MDQsIDB4ODcsIDB4NTgsCisweDBDLCAweDQyLCAweDMwLCAweDAwLCAweEMwLCAweDA0LCAweDA0LCAweDAzLCAweDEwLCAweDNDLCAweDQwLCAweDIwLCAweDAwLAorMHhDRCwgMHgwMCwgMHgwNCwgMHg4MywgMHhEMCwgMHgwQywgMHg0MCwgMHg1MCwgMHgwMCwgMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDQsIDB4ODAsIDB4M0MsIDB4MjAsIDB4QTEsIDB4MTAsIDB4QTUsIDB4MUEsIDB4MTAsIDB4MEUsIDB4NDAsCisweDMxLCAweDA0LCAweEUxLCAweDAwLCAweEI0LCAweDBBLCAweEQwLCAweDA0LCAweDQxLCAweDM4LCAweDAxLCAweDZELCAweDAyLAorMHhCNiwgMHg0MCwgMHhEOCwgMHgwMywgMHg0MCwgMHhBQSwgMHg4MiwgMHhFOSwgMHgwMCwgMHhBNCwgMHgwMCwgMHhEMCwgMHgwRSwKKzB4NDAsIDB4N0EsIDB4MDAsIDB4RTEsIDB4MDEsIDB4ODQsIDB4MDMsIDB4MTAsIDB4MEYsIDB4NDEsIDB4MjgsIDB4MDAsIDB4RUQsCisweDAwLCAweDg1LCAweDAzLCAweEQwLCAweDBFLCAweDQwLCAweDE0LCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgxNCwgMHgxOCwgMHg3OCwgMHgwMCwgMHhFMywgMHgwMSwgMHhBQywgMHgxNiwgMHgzNCwgMHgxRSwgMHhDMCwgMHg3OSwKKzB4MDAsIDB4RTMsIDB4MDEsIDB4QkMsIDB4MDYsIDB4RDAsIDB4MTYsIDB4NDAsIDB4RjgsIDB4MDEsIDB4MkQsIDB4MDEsIDB4QjQsCisweDA1LCAweEYwLCAweDE2LCAweEQwLCAweDcyLCAweDAwLCAweEFCLCAweDAxLCAweDhDLCAweDA0LCAweDc0LCAweDlFLCAweEMwLAorMHg3OCwgMHgwMCwgMHhGMywgMHg4MSwgMHhDQywgMHgwNywgMHgzNCwgMHgxRSwgMHhDMCwgMHg2OCwgMHgwMCwgMHhBRiwgMHgwMSwKKzB4ODQsIDB4MDcsIDB4RjAsIDB4MUMsIDB4QzAsIDB4NTQsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDEwLCAweEI4LCAweDM1LCAweDQwLCAweDlGLCAweDE0LCAweDVDLCAweDIyLCAweEYwLCAweDBELCAweEMwLCAweDM1LCAweDAwLAorMHhERiwgMHgwMCwgMHg3QywgMHgwMiwgMHhGMCwgMHgwNSwgMHhEMCwgMHg3NywgMHgwMCwgMHg1RiwgMHgwMCwgMHg2QywgMHgwMCwKKzB4RjAsIDB4MDAsIDB4RDAsIDB4MjUsIDB4MjAsIDB4OUYsIDB4MDIsIDB4M0MsIDB4MDAsIDB4QjEsIDB4MDksIDB4RDAsIDB4MzcsCisweDAwLCAweERGLCAweDAwLCAweDdELCAweDAzLCAweEUwLCAweDBELCAweEMwLCAweDI3LCAweDAwLCAweDlGLCAweDAyLCAweDdELAorMHgwMywgMHhGMCwgMHgwRCwgMHhDMCwgMHg0MywgMHg2MCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNiwKKzB4MjAsIDB4N0QsIDB4MDAsIDB4RkYsIDB4MjEsIDB4OEMsIDB4MDYsIDB4MzgsIDB4OEYsIDB4QzAsIDB4NkQsIDB4MDAsIDB4RjMsCisweDAxLCAweEZDLCAweDA2LCAweEYwLCAweDFGLCAweEQwLCAweDdDLCAweDAwLCAweDNGLCAweDAxLCAweEZDLCAweDA2LCAweEYwLAorMHgxMywgMHhDMCwgMHg1RiwgMHgyMCwgMHhGNywgMHgyMywgMHhDQywgMHgwNCwgMHgzMSwgMHg5RiwgMHhDMCwgMHg3QywgMHgwOCwKKzB4RjMsIDB4MDEsIDB4OEMsIDB4MDcsIDB4MzEsIDB4MEIsIDB4QzAsIDB4NkYsIDB4MDAsIDB4RUYsIDB4MDMsIDB4Q0MsIDB4MDcsCisweEYyLCAweDFGLCAweEMyLCAweDA4LCAweDAwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE1LCAweDAwLAorMHgzOSwgMHgwMCwgMHhFRCwgMHgwMCwgMHg4NCwgMHgwMiwgMHgzOCwgMHgwRiwgMHg0MCwgMHgwOCwgMHg0MCwgMHhFMSwgMHgwMCwKKzB4QkMsIDB4MDIsIDB4RDAsIDB4MjYsIDB4NDAsIDB4MzgsIDB4MDIsIDB4NkQsIDB4MTAsIDB4QjQsIDB4QTAsIDB4RDAsIDB4ODIsCisweDQwLCAweDBGLCAweDEwLCAweEUxLCAweDA0LCAweDk0LCAweDEwLCAweDEwLCAweEU2LCAweDQxLCAweDNDLCAweDAwLCAweEYxLAorMHgxMCwgMHg4NCwgMHg4MywgMHgxNCwgMHg4QSwgMHg0MCwgMHgyQiwgMHgwNCwgMHhFRCwgMHgwOCwgMHg4NCwgMHgwMywgMHhEMCwKKzB4MEUsIDB4NDAsIDB4NTQsIDB4MjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzksCisweDAwLCAweEVELCAweDAwLCAweDg0LCAweDAyLCAweDkwLCAweDhFLCAweDQwLCAweDI5LCAweDAwLCAweEUxLCAweDAwLCAweEI0LAorMHg0MiwgMHhEMCwgMHgwNiwgMHg0MCwgMHgzOCwgMHgwNCwgMHgyRCwgMHgwMCwgMHhCNCwgMHgwMCwgMHhEMCwgMHgwMiwgMHg0MCwKKzB4MkIsIDB4MDIsIDB4RUQsIDB4ODAsIDB4QzQsIDB4MDAsIDB4MTAsIDB4MDQsIDB4NDAsIDB4MzgsIDB4MDQsIDB4NjEsIDB4MDAsCisweEY0LCAweDAzLCAweDEwLCAweDhBLCAweDQxLCAweDJCLCAweDAyLCAweEFELCAweDAwLCAweDg0LCAweDAzLCAweEQwLCAweDJDLAorMHg0MCwgMHgyMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHgyOCwgMHgzMSwgMHgwMCwKKzB4Q0QsIDB4MDAsIDB4NDQsIDB4MDIsIDB4MTAsIDB4MUMsIDB4NDAsIDB4MDAsIDB4MDQsIDB4QzEsIDB4NDksIDB4MzQsIDB4MDIsCisweEQwLCAweDI1LCAweDQwLCAweDcwLCAweDAwLCAweDRELCAweDAxLCAweDM0LCAweDAwLCAweEQyLCAweDEwLCAweDQwLCAweDIzLAorMHgwMCwgMHhDOSwgMHgwQSwgMHgxNCwgMHhDOCwgMHgxNCwgMHgwNCwgMHg1MCwgMHhGMCwgMHgwMCwgMHg0MSwgMHgwMCwgMHgzNCwKKzB4MEIsIDB4MTAsIDB4MTgsIDB4NDAsIDB4MjMsIDB4MDAsIDB4OUQsIDB4MDAsIDB4MDQsIDB4MDMsIDB4RDAsIDB4MEMsIDB4NDAsCisweDU4LCAweDIwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE1LCAweEEwLCAweDM1LCAweDAwLCAweERGLAorMHgwNywgMHhDQywgMHgwMiwgMHhCMCwgMHg0RCwgMHhDMCwgMHhFNSwgMHgwMCwgMHhEMywgMHgwMCwgMHgzQywgMHgwMiwgMHhGMCwKKzB4MDUsIDB4RDAsIDB4M0MsIDB4MDAsIDB4MUYsIDB4MDIsIDB4N0MsIDB4MDgsIDB4RjAsIDB4MjEsIDB4QzEsIDB4M0YsIDB4MDAsCisweERGLCAweDIzLCAweDBELCAweDA4LCAweDMwLCAweDExLCAweEMwLCAweEY0LCAweDA4LCAweEQzLCAweDAwLCAweDdDLCAweDIzLAorMHgzMCwgMHgwRCwgMHhDMCwgMHhCNywgMHgwMCwgMHg5RiwgMHgwMCwgMHg0RCwgMHgwMywgMHhGMCwgMHgwRCwgMHhDMCwgMHg3NCwKKzB4MjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4MDgsIDB4MzcsIDB4MTAsIDB4OUYsIDB4MDAsCisweDdFLCAweDAyLCAweDcwLCAweDBELCAweEMyLCAweDYzLCAweDEwLCAweERGLCAweDAwLCAweDVDLCAweDAyLCAweEYwLCAweEM1LAorMHhDMCwgMHgzNywgMHgwMCwgMHg1RiwgMHgwMCwgMHg3QywgMHgxMCwgMHhGMCwgMHg0MSwgMHhDMCwgMHgzNywgMHgwMCwgMHhENywKKzB4MTAsIDB4N0MsIDB4MEMsIDB4RjAsIDB4MDAsIDB4QzAsIDB4MzcsIDB4MDQsIDB4REYsIDB4MDAsIDB4NDQsIDB4MEIsIDB4RjAsCisweDBDLCAweEMxLCAweDI3LCAweDAxLCAweDlGLCAweDAwLCAweDdDLCAweDAzLCAweEYwLCAweDFELCAweEMyLCAweDA3LCAweDAwLAorMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwOCwgMHgzRiwgMHgwMCwgMHhFRiwgMHgxMCwgMHhDQywKKzB4MDYsIDB4MzAsIDB4MEYsIDB4QzAsIDB4MDQsIDB4MDAsIDB4RjMsIDB4MDAsIDB4RkUsIDB4NTIsIDB4MzAsIDB4MDUsIDB4QzAsCisweDNDLCAweDAwLCAweDM3LCAweDEwLCAweEZDLCAweDgwLCAweEYwLCAweDAzLCAweEMwLCAweDdCLCAweDAwLCAweDkzLCAweDAwLAorMHhDQywgMHgwMCwgMHhCMCwgMHgwMywgMHg0MCwgMHgyQywgMHgwMCwgMHhCMywgMHgwMCwgMHhDQywgMHg4MywgMHgzMiwgMHg4RiwKKzB4QzIsIDB4QkMsIDB4MDAsIDB4QkYsIDB4MDAsIDB4Q0MsIDB4MDMsIDB4RjAsIDB4MEUsIDB4QzAsIDB4MDQsIDB4MjAsIDB4MEMsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgxLCAweDIwLCAweDM2LCAweDAwLCAweDlELCAweDIwLCAweDQ0LCAweDBBLAorMHgxMCwgMHgwQywgMHg1MCwgMHhDNCwgMHgwMCwgMHhEMSwgMHgwMCwgMHg3NCwgMHgwNiwgMHg1MCwgMHgxNSwgMHg1MCwgMHgzNSwKKzB4MDAsIDB4NUQsIDB4MDcsIDB4NzQsIDB4MEMsIDB4RDAsIDB4MTEsIDB4QzAsIDB4MzUsIDB4MDIsIDB4ODEsIDB4MDAsIDB4NDQsCisweDRDLCAweDExLCAweDMxLCAweEMwLCAweDM2LCAweDAwLCAweEQxLCAweDAyLCAweDQ0LCAweDQzLCAweDEwLCAweDIxLCAweDQyLAorMHgyNCwgMHgwMCwgMHg5RCwgMHgwOSwgMHg0NCwgMHgwMywgMHhEMCwgMHgwRCwgMHg0MCwgMHgwNCwgMHgwMCwgMHgwOCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4QTAsIDB4NjYsIDB4MDAsIDB4REQsIDB4MDAsIDB4NDQsIDB4MjgsIDB4MTAsCisweDE5LCAweDQwLCAweEU2LCAweDAwLCAweEQxLCAweDAwLCAweDc0LCAweDAyLCAweEQwLCAweDExLCAweDQwLCAweDM2LCAweDAwLAorMHgxRCwgMHgwMSwgMHg3NCwgMHg0NCwgMHhEMCwgMHgzMSwgMHg0MCwgMHgxNywgMHg0MCwgMHhEMSwgMHgwMCwgMHg0NCwgMHg4NCwKKzB4MTAsIDB4MTEsIDB4MDIsIDB4RDMsIDB4MDAsIDB4QzEsIDB4MTEsIDB4MDYsIDB4MDQsIDB4MTAsIDB4MjksIDB4NDAsIDB4MzYsCisweDAwLCAweERELCAweDAwLCAweDQ0LCAweDAzLCAweEQwLCAweDBELCAweDQwLCAweDA2LCAweDAwLCAweDAyLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgyMCwgMHgyMCwgMHgwMCwgMHhDRCwgMHgwMCwgMHgwNSwgMHgwMCwgMHgxMCwgMHgwOSwKKzB4NDAsIDB4MDIsIDB4NDAsIDB4QzEsIDB4MDAsIDB4MzQsIDB4ODIsIDB4NTAsIDB4MDAsIDB4NDAsIDB4MzMsIDB4MDgsIDB4NEQsCisweDQwLCAweDM2LCAweDAwLCAweEQwLCAweDAwLCAweDQwLCAweDExLCAweDgwLCAweEQxLCAweDAwLCAweDQ0LCAweDAwLCAweDEwLAorMHgwMCwgMHg0MCwgMHgzMywgMHgwMCwgMHhDMSwgMHgwMCwgMHgwNiwgMHgwMiwgMHgxMCwgMHgwOCwgMHg1MCwgMHgyMiwgMHgwMCwKKzB4Q0QsIDB4MDAsIDB4MDQsIDB4MDMsIDB4RDAsIDB4MEMsIDB4NDAsIDB4NDIsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDk4LCAweDI2LCAweDAwLCAweEVGLCAweDAwLCAweDRDLCAweDAwLCAweDM0LCAweDA5LCAweEMwLAorMHgwNiwgMHgwMCwgMHhEMywgMHgwMCwgMHg3NCwgMHgwMiwgMHg3MCwgMHgwNSwgMHhDMCwgMHgzNiwgMHgwMCwgMHgxNywgMHgwMCwKKzB4NzQsIDB4MDAsIDB4RjIsIDB4MDEsIDB4QzIsIDB4MjcsIDB4MjAsIDB4RjMsIDB4MjAsIDB4NEMsIDB4MDAsIDB4QjAsIDB4MDMsCisweEQwLCAweDA3LCAweDAwLCAweDkzLCAweDAwLCAweDRDLCAweDAxLCAweDMwLCAweDA5LCAweEMwLCAweDM2LCAweDAwLCAweEJGLAorMHgwMCwgMHg0RCwgMHgwMywgMHhGMCwgMHgwRCwgMHhDMCwgMHgwNiwgMHhDMCwgMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDUsIDB4QjgsIDB4MkYsIDB4MDAsIDB4RkYsIDB4MDAsIDB4RkMsIDB4MDAsIDB4RjAsIDB4MEIsIDB4QzAsIDB4MEQsCisweDAwLCAweEZGLCAweDAwLCAweEZDLCAweDAyLCAweEYwLCAweDA3LCAweEMwLCAweDNELCAweDAwLCAweDdGLCAweDAwLCAweEZDLAorMHgwMCwgMHhEMCwgMHgwMywgMHhDMCwgMHgyRiwgMHgwMCwgMHhGRiwgMHgwMCwgMHhCRCwgMHgwMCwgMHhGNCwgMHgwMywgMHhDMiwKKzB4M0UsIDB4MDAsIDB4RkYsIDB4MDAsIDB4RkMsIDB4MDMsIDB4RjAsIDB4MEIsIDB4QzAsIDB4MkQsIDB4MDAsIDB4QkYsIDB4MDAsCisweEZDLCAweDAzLCAweEYwLCAweDBGLCAweEMwLCAweDE1LCAweDYwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMywgMHhBMCwgMHg3RiwgMHgwMCwgMHhGRiwgMHgwMSwgMHhGQywgMHgyNywgMHgzMCwgMHgxRiwgMHhDOCwgMHg3RiwgMHgwQSwKKzB4RkYsIDB4MDEsIDB4Q0MsIDB4MjcsIDB4RjAsIDB4MUYsIDB4QzAsIDB4N0MsIDB4MDAsIDB4RjMsIDB4MDksIDB4RkMsIDB4MjcsCisweEYwLCAweDNGLCAweEMwLCAweDdGLCAweDAwLCAweEYzLCAweDAxLCAweENDLCAweDI3LCAweDMwLCAweDlGLCAweEMwLCAweDc4LAorMHgwMCwgMHhGRiwgMHgwOSwgMHhDQywgMHgwNywgMHhCMCwgMHgxMywgMHhDMCwgMHg3RSwgMHgwMCwgMHhFRiwgMHgwMSwgMHhGQywKKzB4MDcsIDB4MzAsIDB4MUYsIDB4QzAsIDB4MEYsIDB4MDAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsCisweDA4LCAweDc3LCAweDAwLCAweERELCAweDAxLCAweDc0LCAweDAwLCAweDEwLCAweDExLCAweDQwLCAweDA3LCAweDAxLCAweDFELAorMHgwMSwgMHg0NCwgMHgwMCwgMHg5MCwgMHgxMSwgMHg0MCwgMHgwNCwgMHgwMSwgMHgxMSwgMHgwMCwgMHg3NCwgMHgxMCwgMHhEMCwKKzB4MDEsIDB4NDAsIDB4NDcsIDB4MDAsIDB4MTEsIDB4MDEsIDB4NDQsIDB4MDAsIDB4MTAsIDB4MDEsIDB4NDgsIDB4NDQsIDB4MDAsCisweDFELCAweDAwLCAweDQ0LCAweDg3LCAweDUxLCAweDExLCAweDQwLCAweDc0LCAweDAwLCAweDlELCAweDAxLCAweDc0LCAweDEzLAorMHgxMCwgMHgxRCwgMHg0MCwgMHgwRiwgMHgyMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMSwgMHhBMCwKKzB4MzMsIDB4MDAsIDB4Q0QsIDB4MDAsIDB4MzQsIDB4MDMsIDB4MTAsIDB4MEMsIDB4NDAsIDB4MzMsIDB4MDAsIDB4REQsIDB4MDAsCisweDA0LCAweDAzLCAweEQwLCAweDBELCAweDQ4LCAweDM0LCAweDE0LCAweEMxLCAweDIwLCAweDM0LCAweDAzLCAweEQwLCAweDRDLAorMHg0MCwgMHgzNywgMHgwMCwgMHhEOSwgMHgwMCwgMHg2NCwgMHgwMywgMHgxMCwgMHgwRCwgMHg0MCwgMHgzMSwgMHgwMCwgMHhDRCwKKzB4MDQsIDB4MjQsIDB4MDMsIDB4MTAsIDB4MDEsIDB4NDgsIDB4MzIsIDB4ODAsIDB4OEQsIDB4MDAsIDB4MzQsIDB4NDMsIDB4MTksCisweDBDLCAweDQwLCAweDRGLCAweDgwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweEE4LCAweDM1LAorMHgwMCwgMHhERCwgMHgwMCwgMHg3NCwgMHgwMCwgMHgxMCwgMHgwMSwgMHg0MCwgMHgwNywgMHgwMCwgMHgxRCwgMHgwMCwgMHg0NCwKKzB4MDAsIDB4OTAsIDB4MDEsIDB4NDAsIDB4MDQsIDB4MDAsIDB4MTEsIDB4MDAsIDB4NzQsIDB4ODAsIDB4RDAsIDB4MDEsIDB4NDAsCisweDA3LCAweDAwLCAweDE5LCAweDAwLCAweDY0LCAweDAwLCAweDExLCAweDAxLCAweDQyLCAweDA1LCAweDA4LCAweDFELCAweDIwLAorMHg2NCwgMHgwNywgMHg1MCwgMHgxMSwgMHg0MSwgMHgzNCwgMHg4MCwgMHgxRCwgMHgwMSwgMHgzNCwgMHgwMywgMHgxOCwgMHgwRCwKKzB4NDIsIDB4MEYsIDB4MjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4QTgsIDB4MzcsIDB4MDAsCisweERGLCAweDAwLCAweDdDLCAweDAzLCAweDMwLCAweDBELCAweEMwLCAweDM3LCAweDE4LCAweENGLCAweDAwLCAweDRDLCAweDAzLAorMHhGMCwgMHgwRCwgMHhDMCwgMHgzNCwgMHgwMCwgMHhEMywgMHgwMCwgMHg3QywgMHgwMywgMHhGMCwgMHgwRCwgMHhDMCwgMHgzMywKKzB4MDAsIDB4Q0IsIDB4MDAsIDB4NkMsIDB4MDMsIDB4MzAsIDB4MEMsIDB4QzAsIDB4MzUsIDB4MDAsIDB4REYsIDB4MDAsIDB4NkQsCisweDA3LCAweDMwLCAweDEwLCAweEMyLCAweDM2LCAweDAwLCAweDlGLCAweDEzLCAweDdDLCAweDAzLCAweDMwLCAweDBELCAweEMyLAorMHgyMywgMHgwMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNywgMHg4MCwgMHgzRCwgMHgwMCwgMHhGRiwKKzB4MDAsIDB4RkMsIDB4NDAsIDB4RjIsIDB4MDMsIDB4QzAsIDB4MEYsIDB4MDAsIDB4M0YsIDB4MDAsIDB4RkQsIDB4MDAsIDB4RjAsCisweDAzLCAweEQyLCAweDBGLCAweDAwLCAweDNGLCAweDAwLCAweEZFLCAweDAwLCAweEYwLCAweDAzLCAweEMyLCAweDBGLCAweDAwLAorMHgzNywgMHgwMCwgMHhEQywgMHgwMCwgMHhGNiwgMHgwMywgMHhDMCwgMHgwRSwgMHgyMCwgMHgzRiwgMHgwMCwgMHhEQywgMHgwMywKKzB4RjAsIDB4MDcsIDB4QzAsIDB4M0YsIDB4MDAsIDB4QkYsIDB4MDAsIDB4RkMsIDB4MDMsIDB4RjAsIDB4MEYsIDB4QzAsIDB4MUYsCisweDIwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweDA4LCAweDM1LCAweDAwLCAweERGLCAweDAwLAorMHg3QywgMHgwMywgMHgzMCwgMHg4RCwgMHhDMCwgMHgzNiwgMHgwMCwgMHhERiwgMHgwMSwgMHg0QywgMHgyMywgMHhGMCwgMHgwRCwKKzB4QzIsIDB4MzQsIDB4MDQsIDB4REYsIDB4MDEsIDB4NEMsIDB4NDMsIDB4RjAsIDB4MEQsIDB4RTAsIDB4MzcsIDB4MDAsIDB4REIsCisweDAxLCAweDRDLCAweDEzLCAweEYwLCAweDhELCAweDgwLCAweDM0LCAweDAyLCAweEQzLCAweDE4LCAweDRDLCAweDBFLCAweEYwLAorMHgwMSwgMHhDMCwgMHgzNywgMHgwMCwgMHg5MywgMHgwMiwgMHg0QywgMHg0MywgMHhGMCwgMHgwRCwgMHhDMCwgMHgyQiwgMHgyMCwKKzB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTMsIDB4QTAsIDB4MzQsIDB4MDAsIDB4REQsIDB4MDAsIDB4NzQsCisweDAwLCAweDExLCAweDAxLCAweDQwLCAweDg0LCAweDAwLCAweDFELCAweDAwLCAweDQ0LCAweDAwLCAweEQwLCAweDEwLCAweDQwLAorMHg4MCwgMHgwMCwgMHgxRCwgMHg4MCwgMHg0NCwgMHg5QywgMHhEMCwgMHg1MSwgMHg0MCwgMHhDNywgMHgwQSwgMHgxRCwgMHgwMCwKKzB4MDQsIDB4NDgsIDB4RDAsIDB4MjEsIDB4NDAsIDB4NDQsIDB4MjAsIDB4MTEsIDB4QTAsIDB4MkMsIDB4MDIsIDB4RDAsIDB4QTUsCisweDQwLCAweDc3LCAweDA0LCAweDkxLCAweDAwLCAweDY4LCAweDA3LCAweEQwLCAweDBELCAweDQwLCAweDRGLCAweDAwLCAweDAyLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNywgMHhBMCwgMHgzMiwgMHgwMCwgMHhDRCwgMHgwMCwgMHg3NCwgMHgwRiwKKzB4MTAsIDB4MUMsIDB4NDAsIDB4MzIsIDB4MDIsIDB4Q0QsIDB4MDAsIDB4MDQsIDB4NDMsIDB4RDAsIDB4OEMsIDB4NDAsIDB4RjAsCisweDA4LCAweENELCAweDAwLCAweDA0LCAweDAzLCAweEQwLCAweDRDLCAweDQwLCAweDczLCAweDAyLCAweENELCAweDAwLCAweDA0LAorMHgwRiwgMHhEMCwgMHgwQywgMHg0MCwgMHg3MCwgMHgwMCwgMHhEMSwgMHgwMCwgMHgyNCwgMHgwMywgMHhEMCwgMHgwNCwgMHg0OCwKKzB4NzMsIDB4MDAsIDB4ODgsIDB4MDAsIDB4MDQsIDB4MjcsIDB4RDAsIDB4MEMsIDB4NDAsIDB4MEYsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDgwLCAweDc4LCAweDAwLCAweEVELCAweDAxLCAweEY0LCAweDY0LCAweDEwLAorMHgxMiwgMHg0MCwgMHhDOCwgMHgwMCwgMHgzRCwgMHgwMSwgMHg4NCwgMHgwNCwgMHhEMCwgMHgxMiwgMHg1MCwgMHg0OCwgMHgwNCwKKzB4MkQsIDB4MDMsIDB4ODQsIDB4MDQsIDB4RDAsIDB4MTIsIDB4NDAsIDB4NEIsIDB4MDIsIDB4M0QsIDB4MDEsIDB4ODQsIDB4MDQsCisweEQwLCAweDMzLCAweDQwLCAweDRDLCAweDAwLCAweDMxLCAweDAxLCAweEE0LCAweDA3LCAweEQwLCAweDE2LCAweDQwLCAweDNCLAorMHgwMCwgMHhCOSwgMHgwMSwgMHhBNCwgMHgwNywgMHhEMCwgMHgxRSwgMHg0MCwgMHgzRiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4MTAsIDB4MzAsIDB4MDAsIDB4Q0YsIDB4MDAsIDB4M0MsIDB4MDMsIDB4MzAsIDB4MEMsCisweEMwLCAweDMyLCAweDAwLCAweENGLCAweDAwLCAweDBDLCAweDAzLCAweEYwLCAweDBDLCAweEMwLCAweDMwLCAweDAyLCAweERGLAorMHgwMCwgMHgwQywgMHgwMywgMHhGMCwgMHgwQywgMHg0MCwgMHgzMywgMHgwMCwgMHhDRiwgMHgwNCwgMHgwQywgMHgyMywgMHhGMiwKKzB4MEQsIDB4NDAsIDB4MzAsIDB4MDAsIDB4QzMsIDB4MDAsIDB4MkMsIDB4MEIsIDB4RjAsIDB4MDAsIDB4QzAsIDB4MzMsIDB4MDIsCisweDhCLCAweDgwLCAweDBDLCAweDIzLCAweEYwLCAweDBDLCAweEMwLCAweDRCLCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMiwgMHhCOCwgMHgzRCwgMHgwMCwgMHhGRiwgMHgwMCwgMHhCQywgMHgwMCwgMHhGMCwgMHg4MiwgMHg4MCwKKzB4MEYsIDB4MDIsIDB4MkYsIDB4MDAsIDB4RkMsIDB4MDAsIDB4RjEsIDB4MDIsIDB4QzAsIDB4MEYsIDB4MDgsIDB4M0YsIDB4MDAsCisweDdDLCAweDAwLCAweEYwLCAweDgzLCAweEMwLCAweDBGLCAweDA4LCAweDJGLCAweDAwLCAweDdDLCAweDAwLCAweEYwLCAweDAzLAorMHhEMCwgMHgwRiwgMHgwMCwgMHgyRiwgMHgwOSwgMHhGQywgMHgwMywgMHhGMCwgMHg4MywgMHhDNCwgMHgzQiwgMHgwMSwgMHhCNywKKzB4MDAsIDB4RkMsIDB4MjMsIDB4RjAsIDB4MEYsIDB4QzAsIDB4MEIsIDB4NjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDE1LCAweEEwLCAweDM3LCAweDAwLCAweERGLCAweDAwLCAweDdDLCAweDA3LCAweDM0LCAweDBELCAweEMwLCAweDc3LAorMHg0MCwgMHhEMywgMHgwMCwgMHg3QywgMHgwNywgMHgzNCwgMHgwRCwgMHhDMCwgMHgzNywgMHgwOCwgMHhERiwgMHgwMCwgMHg3QywKKzB4MDcsIDB4MzAsIDB4MUQsIDB4RDAsIDB4NzAsIDB4MDAsIDB4QzMsIDB4MDEsIDB4NEMsIDB4MDMsIDB4RjAsIDB4MEQsIDB4QzAsCisweDM3LCAweDIwLCAweERGLCAweDQwLCAweDdDLCAweDAxLCAweEYwLCAweDA0LCAweEMwLCAweDM0LCAweDAwLCAweDlGLCAweDAwLAorMHg3QywgMHgwMywgMHhGMCwgMHgwRCwgMHhDMCwgMHg0MywgMHgwMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MTIsIDB4ODgsIDB4MzksIDB4MDAsIDB4RUQsIDB4MDAsIDB4RjQsIDB4MDAsIDB4MTAsIDB4MDIsIDB4NDgsIDB4MEYsIDB4MDAsCisweDIxLCAweDAwLCAweEY0LCAweDAwLCAweDEwLCAweDAyLCAweDQwLCAweDBCLCAweDAwLCAweDJELCAweDAwLCAweEY0LCAweDAwLAorMHgxMywgMHgwMywgMHg0MCwgMHgwOCwgMHgwMCwgMHgyNSwgMHgwMCwgMHg4NCwgMHgwMCwgMHhEMCwgMHgwMiwgMHg0MCwgMHgwQiwKKzB4MDAsIDB4MkQsIDB4MDAsIDB4QjQsIDB4MDEsIDB4RDAsIDB4MDYsIDB4NDAsIDB4MzgsIDB4MDAsIDB4QTksIDB4MDAsIDB4QjQsCisweDAzLCAweEQwLCAweDBFLCAweDQwLCAweDRGLCAweDAwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLAorMHgwMCwgMHg3OSwgMHgwMCwgMHhFRCwgMHgwMSwgMHhCNCwgMHgwNywgMHg1MCwgMHgxRSwgMHg0MCwgMHg3QiwgMHgwMCwgMHhFMSwKKzB4MDEsIDB4QjQsIDB4MDcsIDB4MTAsIDB4MUUsIDB4MDAsIDB4N0IsIDB4MDAsIDB4RUQsIDB4MDEsIDB4QjQsIDB4MDcsIDB4NTQsCisweDFFLCAweDQwLCAweDc4LCAweDAwLCAweEUxLCAweDAxLCAweDg0LCAweDA3LCAweEQwLCAweDFFLCAweDQwLCAweDdCLCAweDAwLAorMHhFRCwgMHgwMSwgMHhCNCwgMHgwNywgMHhEMCwgMHgxMiwgMHg0MCwgMHg3OCwgMHg4MCwgMHhBRCwgMHgxMSwgMHhCNCwgMHgwNywKKzB4RDAsIDB4MUUsIDB4NDAsIDB4MTMsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4MjgsCisweDMzLCAweDAwLCAweENELCAweDAwLCAweDM0LCAweDgwLCAweDUwLCAweDAwLCAweDQwLCAweDAzLCAweDAwLCAweDAxLCAweDAwLAorMHgzNCwgMHgwMCwgMHgxMCwgMHgwMCwgMHg0MCwgMHgwMywgMHgwMCwgMHgwRCwgMHgwMCwgMHgzNCwgMHgwMCwgMHg1MCwgMHgwMCwKKzB4NDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4MDAsIDB4MTYsIDB4MDAsIDB4RDAsIDB4MDAsIDB4NDAsIDB4MDMsIDB4MDAsIDB4MEQsCisweDAwLCAweDM0LCAweDA3LCAweEQwLCAweDZDLCAweDQwLCAweDMwLCAweDgwLCAweDg5LCAweDAxLCAweDM0LCAweDAzLCAweEQwLAorMHgwQywgMHg0MCwgMHg1QiwgMHgyMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNywgMHgyOCwgMHgxNSwKKzB4MDAsIDB4NUYsIDB4MDAsIDB4N0MsIDB4MDEsIDB4NzAsIDB4MDUsIDB4QzAsIDB4MTcsIDB4MDAsIDB4NTMsIDB4MDAsIDB4N0MsCisweDAxLCAweDMwLCAweDA1LCAweEMwLCAweDE3LCAweDAwLCAweDVGLCAweDAwLCAweDdDLCAweDAxLCAweDcwLCAweDA1LCAweEMwLAorMHgxNCwgMHgwMCwgMHg1MSwgMHgwMCwgMHg0RCwgMHgwMSwgMHhGMCwgMHgwNSwgMHhDMCwgMHgxNywgMHgwMCwgMHg1RiwgMHgwMCwKKzB4QkMsIDB4OTUsIDB4RjAsIDB4MjcsIDB4RDAsIDB4MTQsIDB4MDAsIDB4NkYsIDB4MDIsIDB4N0MsIDB4MDEsIDB4RDAsIDB4MDUsCisweEMwLCAweDVGLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDAwLCAweDA3LCAweDAwLAorMHgxRiwgMHgwMCwgMHhGQywgMHgwMCwgMHg5MCwgMHgwMywgMHhDMCwgMHgwRiwgMHgwMCwgMHgzRiwgMHgwMCwgMHhGQywgMHgwMCwKKzB4RjAsIDB4MDMsIDB4QzAsIDB4MEYsIDB4MDAsIDB4M0YsIDB4ODAsIDB4RkMsIDB4MDAsIDB4OTAsIDB4MDMsIDB4QzAsIDB4MEYsCisweDAwLCAweDNGLCAweDAwLCAweEVDLCAweDAwLCAweEYwLCAweDAzLCAweEMwLCAweDBGLCAweDAwLCAweDNDLCAweDAwLCAweDdDLAorMHg0MCwgMHhFMCwgMHgyMSwgMHhDMCwgMHgwNywgMHgwOCwgMHgxRiwgMHgxMCwgMHg3NCwgMHgwMCwgMHhGMCwgMHgwMSwgMHhDMCwKKzB4NEIsIDB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4MjUsIDB4MDAsIDB4OUYsCisweDAwLCAweDdDLCAweDA2LCAweEYwLCAweDA5LCAweEMwLCAweDI3LCAweDEwLCAweDlGLCAweDAwLCAweDdDLCAweDAyLCAweEYwLAorMHgwOSwgMHhDMCwgMHgyNywgMHgwMCwgMHg5RiwgMHgwMCwgMHg3QywgMHgwNiwgMHhGMCwgMHgxOSwgMHhDMCwgMHgyNywgMHgwMSwKKzB4OUYsIDB4MDAsIDB4N0MsIDB4MjYsIDB4RjAsIDB4MDksIDB4QzAsIDB4MjcsIDB4MDAsIDB4OUYsIDB4MDAsIDB4N0MsIDB4MDYsCisweDcwLCAweDQ5LCAweEMwLCAweEU1LCAweDAwLCAweDlGLCAweDAwLCAweDRDLCAweDE2LCAweEYwLCAweDA5LCAweEMwLCAweDQzLAorMHgyMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgyMCwgMHgyNiwgMHgwMCwgMHg5RCwgMHgwMCwKKzB4NzQsIDB4MEEsIDB4RDAsIDB4MDksIDB4NDAsIDB4MjcsIDB4MDQsIDB4OUQsIDB4MDAsIDB4NzQsIDB4MkUsIDB4RDAsIDB4MDksCisweDQ2LCAweEE3LCAweDAwLCAweDlELCAweDAzLCAweDc0LCAweDJBLCAweEQwLCAweDI5LCAweDQwLCAweDY3LCAweDgwLCAweDlELAorMHgwMCwgMHg3NCwgMHgwQSwgMHhEMCwgMHgwOSwgMHg0MCwgMHgyNywgMHgwMCwgMHg5RCwgMHg0MywgMHg3NCwgMHhBMiwgMHgzMCwKKzB4MzgsIDB4NDAsIDB4MjQsIDB4MDEsIDB4OUQsIDB4ODAsIDB4NkMsIDB4MEUsIDB4RDEsIDB4MDksIDB4NDAsIDB4MDcsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweEEwLCAweDI0LCAweDAwLCAweDlELCAweDAwLCAweDc0LAorMHgxMiwgMHhEMCwgMHg0QiwgMHg0MCwgMHg2RiwgMHgwMCwgMHhCRCwgMHgwMSwgMHhGNCwgMHgwMiwgMHhEMCwgMHgxQiwgMHg0MCwKKzB4NkYsIDB4MDAsIDB4QkQsIDB4MDgsIDB4RjQsIDB4MDIsIDB4RDAsIDB4OEIsIDB4NDAsIDB4MkYsIDB4MTgsIDB4QkQsIDB4MDEsCisweEY0LCAweDAyLCAweEQwLCAweDFCLCAweDQxLCAweDZGLCAweDAwLCAweEJELCAweDA0LCAweDY0LCAweDAyLCAweDU4LCAweDA5LAorMHg0MCwgMHgyNSwgMHgwOCwgMHg5RCwgMHgwMCwgMHg0NCwgMHgwQSwgMHhEMCwgMHgwOSwgMHg0MCwgMHg2MywgMHgwMCwgMHgwMiwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MjAsIDB4MjAsIDB4MDAsIDB4OEQsIDB4MDAsIDB4QjQsIDB4MDYsCisweEQwLCAweDBBLCAweDQwLCAweDJCLCAweDAwLCAweEFELCAweDAwLCAweEI0LCAweDA2LCAweEQyLCAweDBBLCAweDQwLCAweDZCLAorMHgwMCwgMHhBRCwgMHgwMSwgMHhCNCwgMHgwNiwgMHhEMCwgMHgxQSwgMHg0OCwgMHg2QiwgMHgyMCwgMHhBRCwgMHhDMCwgMHhCNCwKKzB4MDYsIDB4RDAsIDB4MEEsIDB4NDgsIDB4MkIsIDB4MDAsIDB4QUQsIDB4MDEsIDB4NzQsIDB4MDIsIDB4MTAsIDB4MDksIDB4NDAsCisweDIwLCAweDAwLCAweDlELCAweDAwLCAweDI1LCAweDIyLCAweEQwLCAweDA4LCAweDQwLCAweDQzLCAweDgwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxRCwgMHhCMCwgMHgwNiwgMHgwMCwgMHgxRiwgMHgwMCwgMHg3QywgMHgyOCwgMHhGMCwKKzB4MDEsIDB4QzIsIDB4ODcsIDB4MDIsIDB4MUYsIDB4MDAsIDB4N0MsIDB4MjgsIDB4RjAsIDB4MDEsIDB4QzAsIDB4ODcsIDB4MjIsCisweDFGLCAweDJBLCAweDdDLCAweDI4LCAweEYwLCAweEExLCAweEMwLCAweDA3LCAweDAwLCAweDFELCAweDAwLCAweDdDLCAweDI4LAorMHhGMCwgMHhBMSwgMHg0MCwgMHgwNywgMHgwMCwgMHgzRiwgMHgwQSwgMHg2QywgMHgwMCwgMHg3MiwgMHgwNSwgMHhDMCwgMHgwNSwKKzB4MDAsIDB4MUYsIDB4MDAsIDB4NEMsIDB4MDgsIDB4RjAsIDB4MDEsIDB4QzgsIDB4NzcsIDB4RTAsIDB4MEEsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDE5LCAweEI4LCAweDI3LCAweDAwLCAweDlGLCAweDAwLCAweDdDLCAweDAyLCAweEYxLCAweDA5LAorMHhDQSwgMHgyNywgMHgwOCwgMHg5RiwgMHgwMCwgMHg3QywgMHgwMiwgMHhGMCwgMHgwOSwgMHhDMCwgMHgyNywgMHgwMCwgMHg5RiwKKzB4MDAsIDB4NzQsIDB4ODIsIDB4RjEsIDB4MDksIDB4QzAsIDB4MjcsIDB4MDgsIDB4OUYsIDB4MDAsIDB4N0MsIDB4MDIsIDB4RjAsCisweDA5LCAweEMwLCAweDI3LCAweDAwLCAweDlGLCAweDAwLCAweEY4LCAweDAyLCAweDcyLCAweDBCLCAweEMwLCAweDI3LCAweDAwLAorMHhCRiwgMHgwMCwgMHg3QywgMHgxMiwgMHhGOCwgMHgwOSwgMHhDMCwgMHg3NywgMHg2MCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MTgsIDB4QTAsIDB4MjcsIDB4MDAsIDB4OUYsIDB4MDAsIDB4RkMsIDB4MjIsIDB4RjAsIDB4MEIsIDB4QzYsCisweEFDLCAweDE4LCAweEJGLCAweDAwLCAweEZDLCAweDIyLCAweEIwLCAweDBCLCAweEMwLCAweEFGLCAweDIwLCAweEJGLCAweDAyLAorMHhDQywgMHgwQSwgMHhGMCwgMHgwQiwgMHhDMCwgMHgyQywgMHgwMCwgMHhCNywgMHgwMCwgMHhGQywgMHgwQSwgMHgzMCwgMHgyQiwKKzB4QzAsIDB4MkMsIDB4MjAsIDB4QkYsIDB4NDgsIDB4QkMsIDB4MDIsIDB4MzAsIDB4MEYsIDB4QzAsIDB4MkYsIDB4MjAsIDB4OUYsCisweDAwLCAweEY0LCAweDAyLCAweDMwLCAweDA5LCAweEMwLCAweDc3LCAweDAwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgxQywgMHgwOCwgMHgwNywgMHgwMCwgMHgxRCwgMHgwMCwgMHg3NCwgMHgxNCwgMHhEMCwgMHgwMSwgMHg0MCwgMHg0NCwKKzB4MDAsIDB4MUQsIDB4MDAsIDB4NzQsIDB4MTQsIDB4RDAsIDB4MDEsIDB4NDgsIDB4NDcsIDB4MDEsIDB4MUQsIDB4ODEsIDB4NDQsCisweDk0LCAweDkwLCAweDExLCAweDUyLCAweDA0LCAweDAwLCAweDExLCAweDAwLCAweDc0LCAweDA0LCAweDEwLCAweDUxLCAweDQwLAorMHgwNCwgMHgwMCwgMHgxRCwgMHgwNSwgMHg3NCwgMHgwMCwgMHgxMCwgMHgwMSwgMHg0MCwgMHgwNywgMHgwMCwgMHgxRCwgMHgwMCwKKzB4NjQsIDB4MDAsIDB4MTQsIDB4MDEsIDB4NDAsIDB4NjMsIDB4MDAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDEwLCAweEEwLCAweDIzLCAweDAwLCAweDhELCAweDAwLCAweDM0LCAweDAzLCAweEQwLCAweDBELCAweDUwLCAweDIxLCAweDAxLAorMHg4RCwgMHgwMCwgMHgzNCwgMHgwMywgMHg5MCwgMHgwQywgMHg0MCwgMHgyMywgMHgwMSwgMHhDNSwgMHgwNCwgMHgxNSwgMHgwMywKKzB4RDAsIDB4NEQsIDB4NDEsIDB4MjAsIDB4MDAsIDB4ODEsIDB4MDAsIDB4MzQsIDB4MTMsIDB4MTAsIDB4MDgsIDB4MTQsIDB4MzIsCisweDIwLCAweDhELCAweDAwLCAweDc2LCAweDgyLCAweDUwLCAweDA4LCAweDQ4LCAweDIzLCAweDEwLCAweDhELCAweDAwLCAweDM0LAorMHgwMiwgMHgxMCwgMHgwOCwgMHg0MCwgMHg0QiwgMHgyMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwKKzB4QTgsIDB4MjUsIDB4MDAsIDB4OUQsIDB4MDAsIDB4NzQsIDB4MDIsIDB4RDAsIDB4MDksIDB4NDAsIDB4MjUsIDB4MDAsIDB4OUQsCisweDAwLCAweDc0LCAweDAyLCAweEQwLCAweDA5LCAweDQwLCAweDI3LCAweDAwLCAweDlELCAweDAwLCAweDU0LCAweDAyLCAweEQwLAorMHgwRCwgMHg0MCwgMHgyNCwgMHgwMCwgMHg5MSwgMHhDMCwgMHg3NCwgMHgwMiwgMHgxMiwgMHgwOSwgMHgwMCwgMHgyNCwgMHgwMCwKKzB4OUQsIDB4MDAsIDB4NzQsIDB4MTIsIDB4NTQsIDB4MTksIDB4NDAsIDB4MjcsIDB4MDAsIDB4OUQsIDB4MDAsIDB4MjQsIDB4MDIsCisweDEwLCAweDA5LCAweDQwLCAweDYzLCAweDIwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweEE4LAorMHgyNywgMHgwMCwgMHg5RiwgMHgwMCwgMHg3QywgMHgwMiwgMHhGMCwgMHgwOSwgMHhDMCwgMHgyNSwgMHgwMCwgMHg5RiwgMHgwMCwKKzB4N0MsIDB4MDIsIDB4QjAsIDB4MDksIDB4QzAsIDB4MjcsIDB4MDAsIDB4OTcsIDB4MDAsIDB4NUMsIDB4MDIsIDB4RjAsIDB4MDksCisweEMwLCAweDI0LCAweDQwLCAweDk1LCAweDAwLCAweDdDLCAweDAyLCAweDM0LCAweDA5LCAweEMwLCAweDI2LCAweDAwLCAweDlGLAorMHgwMCwgMHg3QywgMHg0RSwgMHg3MCwgMHg2OSwgMHhDMCwgMHgyNywgMHgwMCwgMHg5RiwgMHgwNSwgMHg3QywgMHgwMiwgMHgxMCwKKzB4MDksIDB4NDAsIDB4MTcsIDB4MDAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4ODAsIDB4MjUsCisweDAwLCAweDlGLCAweDAwLCAweDdDLCAweDAyLCAweEYwLCAweDA5LCAweEMwLCAweDI2LCAweDA0LCAweDlGLCAweDAwLCAweDdDLAorMHgwMiwgMHhGMCwgMHgwOSwgMHhDMCwgMHgyNywgMHgwMCwgMHg5RiwgMHgwMCwgMHg2QywgMHgwMiwgMHhCMCwgMHgwOSwgMHhDMCwKKzB4MjcsIDB4MjAsIDB4OUYsIDB4MDAsIDB4N0MsIDB4MDIsIDB4RjAsIDB4MDksIDB4QzIsIDB4MjUsIDB4MjAsIDB4OUYsIDB4MDAsCisweDdDLCAweDAyLCAweEIyLCAweDA5LCAweEMwLCAweDI3LCAweDA0LCAweDlGLCAweDA0LCAweDZDLCAweDAyLCAweEYwLCAweDA5LAorMHhDMCwgMHg1QiwgMHgyMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwOCwgMHgwNSwgMHgwMCwKKzB4MUYsIDB4MDAsIDB4N0MsIDB4MDAsIDB4RjAsIDB4MDEsIDB4QzAsIDB4MDcsIDB4MDAsIDB4MUYsIDB4MDAsIDB4N0UsIDB4MDAsCisweDM0LCAweDAxLCAweEMwLCAweDA3LCAweDQwLCAweDFCLCAweDAwLCAweDdDLCAweDAwLCAweEYwLCAweDAxLCAweEM0LCAweDQ3LAorMHgwMCwgMHgxRiwgMHgwMCwgMHg3QywgMHgwMCwgMHgzMCwgMHg0MSwgMHhDMiwgMHgwNCwgMHgwMCwgMHgxMywgMHgwMCwgMHg3QywKKzB4MDAsIDB4NzAsIDB4MDEsIDB4QzAsIDB4MDcsIDB4MDAsIDB4MUYsIDB4MDAsIDB4N0MsIDB4MTAsIDB4RjAsIDB4MDEsIDB4QzAsCisweDUzLCAweDIwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweEEwLCAweDE0LCAweDAwLCAweDVELAorMHgwMCwgMHhGNCwgMHgwMSwgMHhEMCwgMHgwNCwgMHg0MCwgMHg5RiwgMHgwNCwgMHg1RCwgMHgwMSwgMHhGNCwgMHgyMSwgMHgxMCwKKzB4MDUsIDB4MDAsIDB4REYsIDB4MDIsIDB4NzEsIDB4ODgsIDB4RjAsIDB4MDEsIDB4RDAsIDB4ODYsIDB4QzAsIDB4MTksIDB4MDEsCisweDVELCAweDExLCAweEY0LCAweDA5LCAweDEwLCAweDM3LCAweDQ4LCAweDE0LCAweDIwLCAweDdCLCAweDkxLCAweDc0LCAweDAxLAorMHgxMCwgMHhCNywgMHg0MCwgMHgxRiwgMHgwMCwgMHg1RCwgMHgwMCwgMHhGNCwgMHg0NSwgMHhEMCwgMHgwNSwgMHg0MCwgMHg0MywKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4QTAsIDB4MzIsIDB4MDAsIDB4Q0QsIDB4MDAsCisweDM0LCAweDQzLCAweEQwLCAweDA4LCAweDQwLCAweEYzLCAweDAwLCAweDhELCAweDA4LCAweDM0LCAweDAzLCAweDEwLCAweDA4LAorMHg0MCwgMHhGMywgMHgyMCwgMHhEMCwgMHgwMiwgMHgzNCwgMHgxMywgMHhEMCwgMHgyQywgMHg0MCwgMHg1MywgMHgwMCwgMHg4RCwKKzB4NDAsIDB4NzYsIDB4NDMsIDB4MTQsIDB4M0QsIDB4NDAsIDB4MjAsIDB4MDAsIDB4QzEsIDB4MDQsIDB4NzQsIDB4MDIsIDB4NTAsCisweDMwLCAweDQ4LCAweDQzLCAweDAwLCAweENDLCAweDAwLCAweDM0LCAweDAzLCAweEQwLCAweDBDLCAweDQwLCAweDQzLCAweDAwLAorMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHg4MCwgMHgzOCwgMHgwMCwgMHhFRCwgMHgwMCwgMHhCNCwKKzB4MDMsIDB4RDAsIDB4MEUsIDB4NDAsIDB4M0IsIDB4MDAsIDB4RUQsIDB4MDAsIDB4QjQsIDB4MDcsIDB4MTAsIDB4MEUsIDB4NDAsCisweDdCLCAweDE0LCAweEUxLCAweDQwLCAweEI0LCAweDAzLCAweEQwLCAweDBFLCAweDQwLCAweDM5LCAweDAwLCAweEVELCAweDAwLAorMHhCNCwgMHgwMywgMHgxMiwgMHgyRSwgMHg1MCwgMHg3OCwgMHgwMCwgMHhFOSwgMHgwMCwgMHhGNCwgMHhDMiwgMHgwMCwgMHgwMiwKKzB4NDEsIDB4MEIsIDB4MDQsIDB4RUQsIDB4MDAsIDB4QjQsIDB4MDMsIDB4RDAsIDB4MEUsIDB4NDAsIDB4MTMsIDB4MDAsIDB4MDIsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE1LCAweDEwLCAweDc4LCAweDAwLCAweEVGLCAweDAxLCAweEJDLCAweDA3LAorMHhGMCwgMHgxRSwgMHhDMiwgMHg1QiwgMHgwMCwgMHhFRiwgMHgwMSwgMHhGNCwgMHgwNywgMHgzMCwgMHgxRSwgMHhDOCwgMHg3RiwKKzB4MTAsIDB4RTMsIDB4MDEsIDB4QkMsIDB4MDcsIDB4RDAsIDB4MUUsIDB4QzAsIDB4N0IsIDB4MDAsIDB4RUYsIDB4MDEsIDB4RkMsCisweDA3LCAweDMwLCAweDE3LCAweEM4LCAweDc4LCAweDA4LCAweEUzLCAweDIxLCAweEJDLCAweDA3LCAweDcwLCAweDE2LCAweEMwLAorMHg0QiwgMHgwMCwgMHhFRiwgMHgyMSwgMHhCQywgMHgwNSwgMHhGMCwgMHgxRSwgMHhDMCwgMHg1MywgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4QjgsIDB4MzUsIDB4MDAsIDB4REYsIDB4MDAsIDB4N0MsIDB4MDMsIDB4RjAsCisweDBELCAweEMwLCAweDE3LCAweDA4LCAweERGLCAweDAwLCAweDdDLCAweDAzLCAweEYwLCAweDBELCAweDQwLCAweDE3LCAweDAwLAorMHhENywgMHgyMCwgMHg3QywgMHgwMSwgMHhGMCwgMHgwRCwgMHhDNCwgMHgzNywgMHgwMCwgMHhERiwgMHgwMCwgMHg3QywgMHgwMSwKKzB4RjMsIDB4MDUsIDB4QzAsIDB4MzIsIDB4MTAsIDB4NUYsIDB4MDAsIDB4N0MsIDB4MDMsIDB4RTAsIDB4MDUsIDB4QzAsIDB4MDcsCisweDAwLCAweERGLCAweDAwLCAweDdDLCAweDAxLCAweEYxLCAweDBELCAweEMwLCAweDQzLCAweDIwLCAweDA2LCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhBMCwgMHg3RiwgMHgwMCwgMHhGRiwgMHgwMSwgMHhGQywgMHgwNSwgMHhGMCwgMHgxRiwKKzB4QzAsIDB4N0YsIDB4MDAsIDB4RjMsIDB4MDEsIDB4RkMsIDB4MDcsIDB4RjAsIDB4MUYsIDB4QzAsIDB4N0MsIDB4MDAsIDB4RkYsCisweDIxLCAweEJDLCAweDg1LCAweDMwLCAweDFGLCAweEMwLCAweDc4LCAweDAyLCAweEYzLCAweDAxLCAweEZDLCAweDA1LCAweEYwLAorMHg1RiwgMHhDMCwgMHg3RiwgMHgwMCwgMHhGRiwgMHgwOSwgMHhGQywgMHgxNiwgMHhGMCwgMHgxNywgMHhDNCwgMHg2RCwgMHgwMCwKKzB4RkYsIDB4MDksIDB4RjQsIDB4MjcsIDB4MzAsIDB4OUYsIDB4QzAsIDB4MUIsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDE1LCAweDgwLCAweDM5LCAweDAwLCAweEVELCAweDAwLCAweEI0LCAweDA5LCAweEQwLCAweDBFLCAweDQwLAorMHgzQiwgMHgwMCwgMHhFMSwgMHgyOCwgMHhCNCwgMHgwMywgMHhEMCwgMHgwRSwgMHg0MCwgMHgzOCwgMHgwMCwgMHhFRCwgMHgwOCwKKzB4QjQsIDB4MDMsIDB4MTIsIDB4MEYsIDB4NDAsIDB4MzgsIDB4MDYsIDB4RTEsIDB4MTgsIDB4QjQsIDB4NDMsIDB4RDAsIDB4MDYsCisweDQxLCAweDNCLCAweDAwLCAweEVELCAweDBBLCAweEI0LCAweDAzLCAweEQwLCAweDA3LCAweDQwLCAweDI4LCAweDAwLCAweEVELAorMHgwOCwgMHhGNCwgMHgwQiwgMHgxNCwgMHgwRSwgMHg0MCwgMHg1NywgMHgyMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MzksIDB4MDAsIDB4RUQsIDB4MDAsIDB4QjQsIDB4MDEsIDB4RDAsIDB4OEUsIDB4NDAsIDB4MUYsCisweDAwLCAweEUxLCAweDAwLCAweEI0LCAweDA5LCAweEQwLCAweDhGLCAweDQwLCAweDM5LCAweDAyLCAweDZELCAweDAyLCAweEY0LAorMHgwOSwgMHgxMCwgMHgyNiwgMHg0MCwgMHhCQywgMHgwOCwgMHhFMSwgMHgwMCwgMHhCNCwgMHgwMSwgMHhEMCwgMHg0RSwgMHg0MCwKKzB4M0IsIDB4MDIsIDB4RUQsIDB4ODAsIDB4QjQsIDB4OTMsIDB4RDAsIDB4MDcsIDB4NDAsIDB4MTksIDB4MDAsIDB4RUQsIDB4NDAsCisweEI0LCAweDAxLCAweDEyLCAweDBFLCAweDQwLCAweDIzLCAweDAxLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwNCwgMHgyOCwgMHgzMywgMHgwMCwgMHhDRCwgMHgwMCwgMHgzNCwgMHgwOCwgMHhEMCwgMHgwQywgMHg0MSwgMHgwNywgMHgwMSwKKzB4QzEsIDB4MDEsIDB4MzQsIDB4ODIsIDB4RDAsIDB4MkMsIDB4NEQsIDB4NjUsIDB4MDIsIDB4OEQsIDB4ODgsIDB4NzQsIDB4MjQsCisweDEwLCAweDA4LCAweDQwLCAweDMwLCAweDAwLCAweEMxLCAweDAyLCAweDM0LCAweDBDLCAweEQwLCAweDAwLCAweDQwLCAweDczLAorMHgwNCwgMHg5RCwgMHgwRiwgMHgzNCwgMHgwMiwgMHhEMCwgMHgyNCwgMHg0MCwgMHgwMCwgMHgyMCwgMHhDRCwgMHgwOSwgMHg3NCwKKzB4MDAsIDB4MTAsIDB4MEMsIDB4NjAsIDB4MEIsIDB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTUsCisweEE4LCAweDM1LCAweDAwLCAweERGLCAweDAwLCAweDdDLCAweDM2LCAweEYwLCAweDBELCAweEMwLCAweEE3LCAweDAwLCAweEMzLAorMHgxMiwgMHgzQywgMHgxNCwgMHhGMCwgMHgyRCwgMHhDMCwgMHg4NSwgMHgwMCwgMHgwRiwgMHgwMCwgMHg3QywgMHgwMiwgMHgzMCwKKzB4NTEsIDB4NDAsIDB4NzQsIDB4ODAsIDB4RDMsIDB4MDksIDB4NzQsIDB4MjYsIDB4RjAsIDB4MTksIDB4QzAsIDB4MzMsIDB4MDQsCisweDFFLCAweDAwLCAweDdDLCAweDAyLCAweEYwLCAweDE0LCAweEMwLCAweDA1LCAweDAwLCAweERGLCAweDAxLCAweDdDLCAweDAyLAorMHgzMCwgMHgwRCwgMHhDOCwgMHg3NywgMHgwMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwKKzB4MzcsIDB4MDAsIDB4REYsIDB4MDAsIDB4N0MsIDB4MDIsIDB4RjAsIDB4MUQsIDB4QzgsIDB4QzcsIDB4MjAsIDB4REYsIDB4MDQsCisweDdDLCAweDAwLCAweEYwLCAweDFELCAweDAwLCAweDI2LCAweDAxLCAweDFELCAweDgwLCAweDdDLCAweDBBLCAweEYwLCAweDAxLAorMHhEMCwgMHgzNywgMHgwMCwgMHhERiwgMHgwMCwgMHg3QywgMHgwQSwgMHhGMCwgMHgwOSwgMHg0MSwgMHgzNywgMHgyMCwgMHg5RiwKKzB4MDAsIDB4NzgsIDB4MDIsIDB4QzAsIDB4MTUsIDB4QzAsIDB4MDcsIDB4MDAsIDB4REYsIDB4MDAsIDB4N0MsIDB4MEEsIDB4RjAsCisweDBELCAweEMwLCAweDE3LCAweDIwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDA4LCAweDNGLAorMHgwMCwgMHhGRiwgMHgwMCwgMHhGQywgMHgwMCwgMHhGMCwgMHgwRiwgMHhDMCwgMHgyQywgMHgwMCwgMHhGMywgMHgwNSwgMHhFQywKKzB4MDAsIDB4QjAsIDB4NUYsIDB4QzAsIDB4MEYsIDB4MDAsIDB4MzMsIDB4MjAsIDB4Q0MsIDB4MDIsIDB4MzAsIDB4MDMsIDB4QzAsCisweDNGLCAweDAwLCAweEZGLCAweDA0LCAweEZDLCAweDAyLCAweEYwLCAweDAzLCAweEMwLCAweDNGLCAweDIwLCAweDMzLCAweDIwLAorMHhDQywgMHgxNywgMHhGMCwgMHgxNywgMHhEMSwgMHgwQywgMHgwMCwgMHhGRiwgMHgxMCwgMHhGQywgMHgwMCwgMHgxMCwgMHgwRiwKKzB4QzIsIDB4MjcsIDB4MjAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODEsIDB4MjAsIDB4MzYsIDB4MDAsCisweERELCAweDAwLCAweDc0LCAweDA2LCAweEQxLCAweDBDLCAweDQwLCAweDQ0LCAweDA4LCAweEQxLCAweDAxLCAweDQ0LCAweDA0LAorMHgxMCwgMHgxRCwgMHg0MCwgMHg0NywgMHgwMSwgMHgxMSwgMHgwMSwgMHg0NCwgMHgwNiwgMHgxMCwgMHgzMSwgMHg0MCwgMHhGNywKKzB4MDQsIDB4REQsIDB4MDEsIDB4NzQsIDB4MUUsIDB4RDAsIDB4NTEsIDB4NDAsIDB4MzcsIDB4MjAsIDB4MTEsIDB4MDMsIDB4NDQsCisweDAzLCAweEQwLCAweEM1LCAweDQwLCAweDQ0LCAweDAxLCAweERELCAweDAwLCAweDc0LCAweDJDLCAweDEwLCAweDBELCAweDQ2LAorMHgwNywgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHhBMCwgMHgzNCwgMHgwMCwgMHhERCwKKzB4MDAsIDB4NzQsIDB4MDYsIDB4RDAsIDB4MUQsIDB4NDAsIDB4NjQsIDB4MDQsIDB4RDEsIDB4MDAsIDB4NjQsIDB4MEUsIDB4MTAsCisweDBELCAweDQwLCAweDQ3LCAweDgwLCAweDkxLCAweDAzLCAweDQ0LCAweDBDLCAweDEwLCAweDE5LCAweDQyLCAweDc3LCAweDAwLAorMHhERCwgMHgwMCwgMHg3NCwgMHgwNCwgMHhEMCwgMHgxOSwgMHg0MCwgMHgzNywgMHgwOSwgMHgxMSwgMHgwMSwgMHg0NCwgMHgwMiwKKzB4RDAsIDB4MDUsIDB4NDAsIDB4NDQsIDB4MDAsIDB4REQsIDB4MDAsIDB4NzQsIDB4ODIsIDB4NDAsIDB4MEQsIDB4NDAsIDB4MDcsCisweDAwLCAweDBBLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDI4LCAweDMwLCAweDAwLCAweENELCAweDAwLAorMHgzNCwgMHgwMiwgMHhEMCwgMHgwRCwgMHg0MCwgMHgyMCwgMHg0MCwgMHhDMSwgMHgwMCwgMHg0NCwgMHgwMiwgMHgxMCwgMHgwQywKKzB4NDAsIDB4MjMsIDB4NjAsIDB4OTEsIDB4MDAsIDB4MDQsIDB4MDIsIDB4MTYsIDB4MDgsIDB4NDAsIDB4MzMsIDB4MjAsIDB4Q0QsCisweDAwLCAweDM0LCAweDAyLCAweEQwLCAweDA4LCAweDQwLCAweDM3LCAweDA4LCAweDgxLCAweDIwLCAweDA1LCAweDAyLCAweEQwLAorMHgwNCwgMHg0MCwgMHgwMCwgMHgwMCwgMHhDRCwgMHgwMCwgMHgzNCwgMHgwMCwgMHg1MCwgMHgwQywgMHg0MCwgMHg0MywgMHgyMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4QTAsIDB4MzYsIDB4MDAsIDB4REYsIDB4MDAsIDB4N0MsCisweDAwLCAweEYwLCAweDBELCAweEMyLCAweDI0LCAweDAwLCAweEQzLCAweDAwLCAweDZDLCAweDAwLCAweDMwLCAweDBELCAweEMwLAorMHgwNywgMHgwMCwgMHgxMywgMHgwMCwgMHg0QywgMHgwMCwgMHgzMCwgMHgwMSwgMHhDMCwgMHgzNywgMHgwMCwgMHhERiwgMHgwMCwKKzB4N0MsIDB4MDAsIDB4RjAsIDB4MDksIDB4QzAsIDB4MzcsIDB4MDAsIDB4MTMsIDB4NDAsIDB4NEMsIDB4MDMsIDB4RjAsIDB4MDUsCisweEMwLCAweDA0LCAweDAwLCAweERGLCAweDAwLCAweDdDLCAweDAzLCAweDc0LCAweDBELCAweEMwLCAweDA3LCAweDQwLCAweDA4LAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHhBOCwgMHgzRiwgMHgwMCwgMHhGRiwgMHgwMCwgMHhGQywgMHgwMiwKKzB4RjAsIDB4MEYsIDB4QzgsIDB4MkIsIDB4MDgsIDB4RkYsIDB4MjAsIDB4RkMsIDB4MDIsIDB4RjAsIDB4MEUsIDB4QzAsIDB4MkYsCisweDAwLCAweEJGLCAweDAwLCAweEZDLCAweDAyLCAweEYwLCAweDBCLCAweEMyLCAweDJGLCAweDAwLCAweEZGLCAweDAwLCAweEZDLAorMHgwMiwgMHhGMCwgMHgwQiwgMHhDMCwgMHgzRiwgMHgwMCwgMHhCRiwgMHgwMCwgMHhGQywgMHgwMywgMHhGMCwgMHgwRiwgMHhDMCwKKzB4MEYsIDB4MDAsIDB4RkYsIDB4MDAsIDB4RkMsIDB4MDAsIDB4QjAsIDB4MEYsIDB4QzAsIDB4MTcsIDB4MjIsIDB4MEUsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweEEwLCAweDRGLCAweDAwLCAweDMzLCAweDAxLCAweENDLCAweDI0LCAweDMwLAorMHgxMywgMHhDMCwgMHgyQywgMHgwMiwgMHhGMywgMHgwMCwgMHg4QywgMHgwNywgMHgzMCwgMHhDRiwgMHhDMCwgMHgyQywgMHg0MCwKKzB4MzMsIDB4MDgsIDB4Q0MsIDB4MjMsIDB4NzIsIDB4QzcsIDB4QzAsIDB4Q0UsIDB4MDAsIDB4MzMsIDB4MDQsIDB4REMsIDB4MDAsCisweDMwLCAweDEzLCAweEMwLCAweENGLCAweDAwLCAweDNGLCAweDAxLCAweEVELCAweDA0LCAweDMwLCAweDEzLCAweEMwLCAweDRDLAorMHgwMCwgMHgzMywgMHgwMSwgMHhDQywgMHgwNCwgMHgzMCwgMHgxMywgMHhDMCwgMHgwQywgMHgwMCwgMHgwRSwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDMsIDB4MjEsIDB4MTEsIDB4MDAsIDB4NDQsIDB4MDAsIDB4MTAsIDB4MDQsCisweDQwLCAweDI0LCAweDA5LCAweEYxLCAweDAwLCAweDQ0LCAweDAzLCAweDMwLCAweDIxLCAweDQwLCAweEIwLCAweDA1LCAweDAxLAorMHgyNiwgMHgwNSwgMHgzQiwgMHgzMCwgMHhFMSwgMHg0MCwgMHgwNSwgMHgyMSwgMHg1MSwgMHgwQiwgMHg0NCwgMHgxOCwgMHgxNSwKKzB4NDEsIDB4QzAsIDB4MjMsIDB4MDAsIDB4MUQsIDB4MDAsIDB4NDQsIDB4ODIsIDB4MTAsIDB4MDEsIDB4NDIsIDB4NDQsIDB4MDAsCisweDExLCAweDgwLCAweDQ0LCAweDAwLCAweDEwLCAweDAxLCAweDQwLCAweDA0LCAweDIwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgxMSwgMHhBMCwgMHgwMywgMHgwNCwgMHgxMSwgMHgwMSwgMHgwNCwgMHgxMiwgMHgxMCwgMHgwMCwgMHg0MCwKKzB4MDAsIDB4MDAsIDB4QzEsIDB4MDAsIDB4NjQsIDB4NTMsIDB4OTAsIDB4M0MsIDB4NDgsIDB4MjQsIDB4MDIsIDB4MDEsIDB4MDYsCisweDI1LCAweDgzLCAweEQwLCAweDA1LCAweDQwLCAweDAwLCAweDAwLCAweDA5LCAweDAwLCAweDM0LCAweDQ4LCAweDkwLCAweDAwLAorMHg0MSwgMHgwMywgMHgwMSwgMHg4OSwgMHgwMCwgMHg0NCwgMHgwMCwgMHg5MCwgMHgwMSwgMHg0MCwgMHg0NiwgMHgwMCwgMHg4OSwKKzB4MDAsIDB4MjQsIDB4MDIsIDB4MTAsIDB4MDgsIDB4NDAsIDB4NDUsIDB4ODAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAzLCAweEE4LCAweDA1LCAweDAwLCAweDExLCAweDQwLCAweDA0LCAweDAyLCAweDEwLCAweDA1LCAweDQwLCAweDA0LAorMHgxMiwgMHhDMSwgMHgwMCwgMHg2NCwgMHgwMywgMHgxNCwgMHgwOSwgMHg0MCwgMHgzNCwgMHgwMiwgMHgxMSwgMHgwMSwgMHg2NCwKKzB4MDcsIDB4MTAsIDB4MDEsIDB4NDAsIDB4NDUsIDB4MDQsIDB4NTksIDB4MjAsIDB4NjQsIDB4NDQsIDB4OTIsIDB4MTEsIDB4NDIsCisweDI3LCAweDAwLCAweDhDLCAweDAwLCAweDQ0LCAweDAyLCAweDk4LCAweDExLCAweDAwLCAweDA2LCAweDAwLCAweDg5LCAweDAwLAorMHgyNCwgMHgwMiwgMHgxMCwgMHgwOCwgMHg0MCwgMHgwRCwgMHgyMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4QTAsIDB4MzcsIDB4NDAsIDB4NDMsIDB4MDAsIDB4NEMsIDB4MDQsIDB4MzAsIDB4MjEsIDB4QzEsIDB4NjQsIDB4MDAsCisweEQzLCAweDAwLCAweDJELCAweDAzLCAweEIwLCAweDBELCAweEM0LCAweEMwLCAweDQwLCAweDEzLCAweDAwLCAweDZDLCAweDA3LAorMHhGMiwgMHgwRCwgMHhDMCwgMHg4NCwgMHg0MCwgMHg1QiwgMHg4MSwgMHg3QywgMHgwQywgMHhCMSwgMHg1MSwgMHhFMCwgMHgwNywKKzB4MDAsIDB4MUYsIDB4MDAsIDB4NEMsIDB4MDEsIDB4QjAsIDB4MDgsIDB4QzAsIDB4MTIsIDB4MTgsIDB4MUIsIDB4MDEsIDB4NkMsCisweDA0LCAweDMwLCAweDExLCAweEMwLCAweDA5LCAweDIwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA3LAorMHg4OCwgMHgzRCwgMHgyMCwgMHg3RiwgMHgwMCwgMHhGQywgMHgyNCwgMHhGMCwgMHgwNywgMHhDMCwgMHg3MywgMHgwMCwgMHhGRiwKKzB4MDAsIDB4REMsIDB4MDIsIDB4RjAsIDB4MjYsIDB4QzAsIDB4MEYsIDB4MzAsIDB4M0YsIDB4MjAsIDB4OUMsIDB4MDMsIDB4RjAsCisweDA1LCAweEMwLCAweDBELCAweDAwLCAweDc3LCAweDAzLCAweERDLCAweDAwLCAweDcyLCAweDAzLCAweEMwLCAweDJELCAweDAyLAorMHgzRiwgMHgwOCwgMHhEQywgMHgwMywgMHg3NCwgMHgwQiwgMHhDMCwgMHgxRCwgMHgxOCwgMHgzNiwgMHg0OSwgMHhEQywgMHgyNCwKKzB4RjAsIDB4OTMsIDB4QzAsIDB4MUUsIDB4MDAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDgsCisweDc1LCAweDAwLCAweDUzLCAweDEwLCAweDRDLCAweDA2LCAweDMyLCAweDAxLCAweENBLCAweDI0LCAweDAwLCAweEQzLCAweDAwLAorMHg0RCwgMHgwMywgMHgzMCwgMHgwRCwgMHhDMCwgMHgyNCwgMHgwMCwgMHgxMywgMHgwMiwgMHg2QywgMHgwMiwgMHgzMCwgMHgwRCwKKzB4QzEsIDB4ODYsIDB4MDAsIDB4NEYsIDB4NTAsIDB4Q0MsIDB4MTgsIDB4MzAsIDB4MDEsIDB4QzgsIDB4MDcsIDB4NDAsIDB4OTMsCisweDA1LCAweDdDLCAweDAxLCAweEYwLCAweDA5LCAweEMwLCAweDE0LCAweDA0LCAweDkzLCAweDExLCAweDRDLCAweDQ2LCAweDMwLAorMHg1OSwgMHhDMCwgMHgwOCwgMHgyMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMywgMHhBMCwgMHg3NCwKKzB4MDAsIDB4NTEsIDB4ODAsIDB4NDQsIDB4MDYsIDB4MTIsIDB4MDUsIDB4NDAsIDB4MzQsIDB4MDksIDB4RjEsIDB4MDAsIDB4NDQsCisweDBCLCAweDEwLCAweEJELCAweDQwLCAweEE0LCAweDAyLCAweDM1LCAweDAwLCAweDQ0LCAweDAwLCAweDEwLCAweDdDLCAweDQwLAorMHgwNCwgMHgwNiwgMHg1RCwgMHgxMSwgMHgyQywgMHgwOCwgMHgxMCwgMHgxMSwgMHgwMCwgMHg2NywgMHgwOCwgMHg5QiwgMHgyMywKKzB4MzQsIDB4MkIsIDB4RDAsIDB4QTksIDB4NDAsIDB4OTQsIDB4MDQsIDB4OTEsIDB4MDMsIDB4NDQsIDB4MEUsIDB4MTAsIDB4MzksCisweDQwLCAweDRDLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweDIwLCAweDA0LCAweDAwLAorMHg4OSwgMHgwMCwgMHgwNCwgMHgwMSwgMHgxMCwgMHgwOSwgMHg0MCwgMHg2MCwgMHgwMCwgMHhDMSwgMHgwMSwgMHgwNCwgMHg0QiwKKzB4MTQsIDB4M0MsIDB4NDAsIDB4QTAsIDB4MDAsIDB4MTEsIDB4MDAsIDB4MjQsIDB4MDMsIDB4MTgsIDB4MjQsIDB4NDAsIDB4MDYsCisweDA4LCAweDhELCAweDAyLCAweDE0LCAweDAwLCAweDExLCAweDEwLCAweDQ4LCAweDUzLCAweDAyLCAweDQ1LCAweDAwLCAweDM0LAorMHgwMCwgMHhEMCwgMHgwNCwgMHg0MCwgMHg2MSwgMHgwMCwgMHg0MSwgMHgwMiwgMHgwNCwgMHgwOSwgMHgxMCwgMHgwNCwgMHgwMiwKKzB4MUMsIDB4MDAsIDB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4NDgsIDB4MDAsIDB4QjksCisweDA5LCAweDg0LCAweDBELCAweDEwLCAweDFFLCAweDQyLCAweEY4LCAweDAwLCAweEUxLCAweDAxLCAweEM0LCAweDg3LCAweDE0LAorMHgxQywgMHg0MSwgMHg2OCwgMHgwMiwgMHhBNSwgMHgwMSwgMHg4NCwgMHgwNywgMHgxMCwgMHg5MiwgMHg1MCwgMHg0OCwgMHgyMCwKKzB4QUQsIDB4MjEsIDB4MzYsIDB4ODQsIDB4MTgsIDB4MTIsIDB4NDAsIDB4N0IsIDB4MDAsIDB4NkQsIDB4MDEsIDB4QjQsIDB4MDYsCisweEQwLCAweDk3LCAweDQwLCAweDZELCAweDAwLCAweDYxLCAweDA5LCAweDg0LCAweDI1LCAweDEwLCAweDE2LCAweDQwLCAweDEwLAorMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHgxOCwgMHgwMCwgMHg0MCwgMHg4QiwgMHgwOCwKKzB4NEMsIDB4MTMsIDB4MzAsIDB4MDgsIDB4QzAsIDB4MDAsIDB4NDIsIDB4RDMsIDB4MTAsIDB4MEMsIDB4MDMsIDB4MzAsIDB4MEMsCisweDQwLCAweDIwLCAweDAyLCAweDgzLCAweDAwLCAweDJDLCAweDAzLCAweDEyLCAweDA0LCAweEMyLCAweDAyLCAweDAwLCAweDhGLAorMHgwOCwgMHgxQywgMHgxMiwgMHgzMCwgMHgwMCwgMHhFNSwgMHgxMywgMHgwMCwgMHhDNywgMHgwMCwgMHgzQywgMHgyMCwgMHhGMCwKKzB4MDQsIDB4QzAsIDB4MjEsIDB4MDAsIDB4RDMsIDB4MDgsIDB4NEMsIDB4MjMsIDB4MzAsIDB4MEQsIDB4QzAsIDB4NDgsIDB4NDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweDM4LCAweDBELCAweDAwLCAweEE3LCAweDA4LCAweEZDLAorMHgwMywgMHhGMCwgMHgwRiwgMHhDOCwgMHgxRiwgMHgwMCwgMHhGRiwgMHg4MCwgMHhGRCwgMHgwMywgMHhGMCwgMHgwRiwgMHhDMCwKKzB4M0YsIDB4MEEsIDB4QkUsIDB4ODAsIDB4RkMsIDB4MDMsIDB4RjQsIDB4MDMsIDB4QzIsIDB4MEYsIDB4MDIsIDB4RUYsIDB4MjAsCisweEVDLCAweDAyLCAweEYwLCAweDgzLCAweEMwLCAweDNGLCAweDAyLCAweEZCLCAweDAwLCAweEZDLCAweDAyLCAweEYxLCAweDA2LAorMHhDMCwgMHgyQSwgMHgwMiwgMHhGRiwgMHgwOCwgMHhGQywgMHgyMywgMHhGMCwgMHg4RiwgMHhDMCwgMHgwQiwgMHg2MCwgMHgwNiwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4QTAsIDB4MzcsIDB4MDAsIDB4Q0YsIDB4MDAsIDB4NUMsIDB4MDUsCisweDMwLCAweDA5LCAweEMwLCAweDI0LCAweDAwLCAweERGLCAweDBELCAweDRDLCAweDAzLCAweEYwLCAweDBELCAweEMwLCAweDI3LAorMHgwMCwgMHgxMywgMHgwMCwgMHhDRCwgMHgwMywgMHgzNCwgMHgwRCwgMHhEOCwgMHgwNSwgMHgxMCwgMHgxMywgMHgwMCwgMHg3QywKKzB4MDIsIDB4NzAsIDB4MDEsIDB4QzQsIDB4MTMsIDB4MDAsIDB4NTMsIDB4MDAsIDB4N0MsIDB4MDEsIDB4RjAsIDB4MEQsIDB4RDAsCisweDM0LCAweDAwLCAweDVGLCAweDAwLCAweDRFLCAweDAxLCAweDMwLCAweDE1LCAweEMwLCAweDU0LCAweDAwLCAweDBFLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHg4MCwgMHgzOSwgMHgwMCwgMHhFRCwgMHg4MCwgMHg4NCwgMHgwMSwgMHgxMCwKKzB4MEUsIDB4NDAsIDB4MzgsIDB4MDAsIDB4Q0QsIDB4MTAsIDB4ODQsIDB4MDIsIDB4RDAsIDB4MEUsIDB4NDAsIDB4MkIsIDB4MTAsCisweDgxLCAweDA0LCAweDg0LCAweDAzLCAweDEwLCAweDA0LCAweEMwLCAweDBBLCAweDAwLCAweDIxLCAweDAwLCAweEI0LCAweDAyLAorMHgxMSwgMHgwNiwgMHg0OCwgMHgzQiwgMHgwMCwgMHg2MSwgMHgwMCwgMHhCNCwgMHgwMywgMHhEMiwgMHgwRiwgMHg0MCwgMHgzOCwKKzB4MjAsIDB4NkQsIDB4MDAsIDB4ODQsIDB4MDEsIDB4MTAsIDB4MDYsIDB4NDAsIDB4NDgsIDB4MjAsIDB4MDYsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDc5LCAweDAwLCAweEVELCAweDAxLCAweDk0LCAweDA3LCAweDEwLCAweDFBLAorMHg1MCwgMHg2OCwgMHgwMCwgMHhFRCwgMHgwNSwgMHg4NCwgMHg0NywgMHhEOCwgMHgxRSwgMHg0MCwgMHg2RiwgMHgwMCwgMHhBMSwKKzB4MUQsIDB4ODUsIDB4MDcsIDB4MTAsIDB4MUUsIDB4NDAsIDB4QzksIDB4MTgsIDB4RTEsIDB4MDEsIDB4RjQsIDB4MEUsIDB4NTAsCisweDEyLCAweDQwLCAweDVCLCAweDAwLCAweEUxLCAweDAxLCAweEI0LCAweDA1LCAweEQwLCAweDFFLCAweDQyLCAweDc4LCAweDAwLAorMHhFRCwgMHgwMSwgMHg4NCwgMHg4NywgMHgxMCwgMHgxRSwgMHg0MCwgMHgwQywgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MTYsIDB4MjgsIDB4NzMsIDB4MDIsIDB4REQsIDB4MDAsIDB4MDQsIDB4MDMsIDB4MTAsIDB4MEMsIDB4NDAsCisweEIwLCAweDAwLCAweENELCAweDAwLCAweDA0LCAweDA3LCAweEQwLCAweDBELCAweDQwLCAweEEzLCAweDAxLCAweEMxLCAweDQwLAorMHgwNCwgMHgwOSwgMHgxMCwgMHg4RCwgMHg0MCwgMHg3NiwgMHgwMCwgMHhDMSwgMHgwMywgMHgzNCwgMHgwRiwgMHgxMCwgMHg4OCwKKzB4NDIsIDB4MzMsIDB4MDAsIDB4QzEsIDB4MDAsIDB4MzQsIDB4MDcsIDB4RDAsIDB4MEMsIDB4NDAsIDB4MzAsIDB4MDAsIDB4Q0QsCisweDAwLCAweDA0LCAweDAzLCAweDEwLCAweDBDLCAweDQwLCAweDQ4LCAweDIwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgxNywgMHhBMCwgMHg5NSwgMHgwMCwgMHg1RiwgMHgwMCwgMHg1QywgMHgwMSwgMHgzNCwgMHgwNSwgMHhDMCwgMHgxQywKKzB4MDEsIDB4NUYsIDB4MDAsIDB4NEMsIDB4MDEsIDB4RjAsIDB4MDcsIDB4QzAsIDB4REYsIDB4NDQsIDB4NzMsIDB4MDAsIDB4Q0MsCisweDMxLCAweDMwLCAweDE3LCAweEMyLCAweDlELCAweDQwLCAweDczLCAweDA3LCAweEZDLCAweDI5LCAweDcyLCAweDE2LCAweEMwLAorMHgxNywgMHg1MCwgMHg1MywgMHgyMCwgMHg3QywgMHgwMSwgMHhGMSwgMHgwNSwgMHhDMCwgMHgxNCwgMHgxMCwgMHg1RiwgMHgwMCwKKzB4NEQsIDB4MDEsIDB4MzQsIDB4MDUsIDB4RDAsIDB4NUMsIDB4MjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDEyLCAweDA4LCAweDA1LCAweDA0LCAweDFELCAweDAwLCAweDdDLCAweDAwLCAweEYyLCAweDAxLCAweEM4LCAweDAzLCAweDA0LAorMHgxRiwgMHg0MCwgMHg3RCwgMHgwOCwgMHhGMCwgMHgwMSwgMHhDMCwgMHgwNywgMHgxMCwgMHgxRiwgMHgyMCwgMHg3QywgMHgwMCwKKzB4RjIsIDB4MTEsIDB4RDAsIDB4MDcsIDB4MDQsIDB4MEYsIDB4MTIsIDB4M0MsIDB4MDgsIDB4RjEsIDB4NDEsIDB4QzAsIDB4MDcsCisweDAwLCAweDFGLCAweDAwLCAweDdDLCAweDIwLCAweEYwLCAweDExLCAweEM4LCAweDA3LCAweDAwLCAweDFGLCAweDAwLCAweDdDLAorMHgwMCwgMHhGMCwgMHgwMSwgMHhDMCwgMHg0QiwgMHgwMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwKKzB4MDgsIDB4MjUsIDB4MDAsIDB4OUYsIDB4MDIsIDB4NEMsIDB4MDIsIDB4RjAsIDB4MDksIDB4QzAsIDB4MjQsIDB4MDIsIDB4OTAsCisweDAxLCAweDdDLCAweDAyLCAweDM0LCAweDA5LCAweEMwLCAweDI0LCAweDAwLCAweDgzLCAweDAwLCAweDRDLCAweDAyLCAweDMwLAorMHgwOSwgMHhDMCwgMHg2NCwgMHgwMCwgMHg5MywgMHgwNSwgMHg0QywgMHgwNiwgMHgxMCwgMHgwOSwgMHhDOCwgMHgyNCwgMHgwMCwKKzB4OTMsIDB4MDAsIDB4NjQsIDB4MEEsIDB4MzAsIDB4MDksIDB4QzAsIDB4RTQsIDB4MTAsIDB4OUYsIDB4MDIsIDB4NEQsIDB4MEEsCisweDMwLCAweDU5LCAweEMwLCAweDQzLCAweDIwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLAorMHhBNiwgMHgxMCwgMHg5RCwgMHgwMCwgMHg0NSwgMHgwQSwgMHhEMCwgMHgwOCwgMHhDMCwgMHg2NiwgMHgwMCwgMHg5MSwgMHgwMSwKKzB4MzQsIDB4MUEsIDB4MTIsIDB4MDksIDB4NDgsIDB4QTQsIDB4MDIsIDB4OTUsIDB4MDAsIDB4NDQsIDB4MDIsIDB4MTIsIDB4OTksCisweDUxLCAweDI0LCAweDA4LCAweDkxLCAweDI1LCAweDQ0LCAweEE2LCAweDEwLCAweDA5LCAweDQwLCAweDIwLCAweDAwLCAweDkxLAorMHgwMiwgMHgwNCwgMHgwQSwgMHgxMCwgMHgyOSwgMHg1MCwgMHg2NCwgMHgwOCwgMHg5RCwgMHg0MiwgMHg0NCwgMHgwQSwgMHgxMCwKKzB4MzksIDB4NDAsIDB4MDcsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4QTAsIDB4MjQsCisweDgwLCAweEJELCAweDAwLCAweEM0LCAweDAyLCAweEQwLCAweDBCLCAweDQwLCAweDI0LCAweDQwLCAweDk1LCAweDA4LCAweDc0LAorMHgyMiwgMHgxNCwgMHgwOSwgMHg0OCwgMHhCMCwgMHgwMCwgMHhEOSwgMHgwNCwgMHgyNCwgMHgwMiwgMHgxNCwgMHgwOSwgMHg0MCwKKzB4MjQsIDB4NDIsIDB4RDEsIDB4MDAsIDB4NDUsIDB4NDIsIDB4NTAsIDB4MDksIDB4NTIsIDB4MjQsIDB4NDAsIDB4QTEsIDB4MDAsCisweEY0LCAweDAyLCAweDEwLCAweDJBLCAweDQyLCAweDJDLCAweDAwLCAweEFELCAweDAwLCAweEE0LCAweDAyLCAweDEwLCAweDBCLAorMHg0MiwgMHg2MywgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgyMCwgMHg2OCwgMHgwMCwKKzB4RUQsIDB4MDAsIDB4ODQsIDB4MDYsIDB4RDAsIDB4MEIsIDB4NDAsIDB4MjIsIDB4MDEsIDB4ODUsIDB4MDQsIDB4NzQsIDB4MDIsCisweDEwLCAweDQ4LCAweDQwLCAweDIwLCAweDAxLCAweDhELCAweDA0LCAweDI1LCAweDEyLCAweDEwLCAweDQ4LCAweDQwLCAweDYwLAorMHgyMCwgMHg4MSwgMHg4NCwgMHgwNSwgMHgxMiwgMHgxNCwgMHgwOCwgMHg0MCwgMHgyQywgMHgwMCwgMHhBMSwgMHgwMSwgMHhENCwKKzB4MDIsIDB4MTAsIDB4MEEsIDB4NDIsIDB4NjgsIDB4ODAsIDB4QUQsIDB4MDEsIDB4QTQsIDB4MDYsIDB4MTAsIDB4MUEsIDB4NDAsCisweDQzLCAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFELCAweEI4LCAweDg2LCAweDAyLCAweDFGLAorMHgwQSwgMHgwRCwgMHgyOCwgMHhGMCwgMHhBMiwgMHhDMCwgMHg5NCwgMHgwMiwgMHgxNywgMHgwQSwgMHg3QywgMHgyOCwgMHgzMCwKKzB4QTUsIDB4RDAsIDB4ODQsIDB4MDIsIDB4MUIsIDB4MEEsIDB4MkMsIDB4MjgsIDB4MzEsIDB4QTEsIDB4RDAsIDB4ODAsIDB4MjIsCisweDEzLCAweDAwLCAweDRDLCAweDI4LCAweDcwLCAweEExLCAweEMwLCAweDg0LCAweDAyLCAweDEzLCAweDBBLCAweDdDLCAweDI5LAorMHgzMCwgMHhBMSwgMHhDMCwgMHgwNCwgMHgwMCwgMHgwRiwgMHgwQSwgMHgyQywgMHgyOCwgMHgzMiwgMHhBMiwgMHhDMCwgMHg3NywKKzB4QzAsIDB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MUQsIDB4QjgsIDB4MjcsIDB4MDAsIDB4OUYsIDB4MDAsCisweDdDLCAweDAyLCAweEYwLCAweDA5LCAweEMwLCAweDJGLCAweDAyLCAweDlCLCAweDA4LCAweEVDLCAweDAyLCAweEY0LCAweDhCLAorMHhDOCwgMHgyQiwgMHgwMiwgMHhCNywgMHgwOCwgMHhEQywgMHgyMywgMHhGMCwgMHg4QiwgMHhDMiwgMHgyRiwgMHgwMCwgMHhCRiwKKzB4NjgsIDB4QkMsIDB4MjIsIDB4RjAsIDB4MEIsIDB4QzIsIDB4MjcsIDB4MDAsIDB4OUYsIDB4MjAsIDB4NkMsIDB4MDIsIDB4RjQsCisweDA5LCAweEM4LCAweDI3LCAweDAwLCAweDlGLCAweDAwLCAweDVDLCAweDAyLCAweEY0LCAweDA5LCAweEMwLCAweDY3LCAweDYwLAorMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxQywgMHhBMCwgMHgyRiwgMHgwMCwgMHhGMywgMHgyOCwgMHhEQywKKzB4MDIsIDB4RjAsIDB4MDksIDB4QzAsIDB4MkYsIDB4NDIsIDB4QjMsIDB4MDQsIDB4Q0MsIDB4MDIsIDB4MzAsIDB4Q0YsIDB4QzAsCisweDJCLCAweDAwLCAweEEzLCAweDA1LCAweDRELCAweDE2LCAweDMyLCAweDlCLCAweEMwLCAweEFGLCAweDEwLCAweEIzLCAweDA1LAorMHhEQywgMHgzNiwgMHgzMCwgMHgwQiwgMHhDNCwgMHgyQywgMHgwMCwgMHhCMywgMHgwMCwgMHhGQywgMHgwMiwgMHhGMCwgMHg4QiwKKzB4QzAsIDB4M0MsIDB4MTgsIDB4QkYsIDB4NDAsIDB4RkMsIDB4MjIsIDB4RjAsIDB4MEIsIDB4QzAsIDB4NjMsIDB4MDAsIDB4MEUsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAwLCAweDA3LCAweDAxLCAweDAxLCAweDA0LCAweDQ0LCAweDQxLAorMHhEMCwgMHgwMSwgMHg0MSwgMHgwNywgMHgwMiwgMHgxMSwgMHgxNCwgMHg0NCwgMHgxMCwgMHgxMCwgMHhDMCwgMHg0MCwgMHg4NywKKzB4NDQsIDB4MTEsIDB4MTcsIDB4NDQsIDB4NUMsIDB4MTQsIDB4MzEsIDB4NDQsIDB4NDcsIDB4MDAsIDB4MTEsIDB4MjIsIDB4NDQsCisweDA0LCAweDEwLCAweDU1LCAweDQxLCAweDQ0LCAweDA1LCAweDUxLCAweDE0LCAweDc0LCAweDEwLCAweEQwLCAweDQxLCAweDUwLAorMHgwNCwgMHgwMCwgMHg1RCwgMHgxMCwgMHg3NCwgMHgwMSwgMHhEMCwgMHg0NSwgMHg0MSwgMHg3MywgMHgyMCwgMHgwQywgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4MDAsIDB4MjEsIDB4NDUsIDB4ODEsIDB4MDQsIDB4MTQsIDB4MTIsIDB4RDAsCisweDA4LCAweDQwLCAweDIzLCAweDAwLCAweDgxLCAweDBDLCAweDI0LCAweDUyLCAweDEwLCAweDQ4LCAweDQ0LCAweDIzLCAweDAzLAorMHg4MSwgMHgwOCwgMHgwNCwgMHgyMiwgMHgxMCwgMHg2OCwgMHg0MCwgMHgyNywgMHgwMSwgMHg4OSwgMHgwOCwgMHgzNCwgMHgxQSwKKzB4MTQsIDB4MDksIDB4NTAsIDB4MjQsIDB4MDAsIDB4ODksIDB4MjQsIDB4MzQsIDB4NTIsIDB4RDEsIDB4NDgsIDB4NDAsIDB4MjAsCisweDAwLCAweDhELCAweDAwLCAweDM0LCAweDAyLCAweEQwLCAweDQ4LCAweDQwLCAweDQzLCAweDgwLCAweDBFLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgyOCwgMHgyMSwgMHgwMCwgMHg5MSwgMHgwMCwgMHg0NCwgMHgwMiwgMHhEMiwgMHgwOSwKKzB4NDAsIDB4MjcsIDB4MDAsIDB4OTEsIDB4MDAsIDB4NjUsIDB4MDIsIDB4MTQsIDB4MjksIDB4NDAsIDB4QTcsIDB4MDEsIDB4OTEsCisweDExLCAweDQ0LCAweDEyLCAweDEwLCAweDA5LCAweDQwLCAweDY3LCAweDAwLCAweDk5LCAweDA2LCAweDY0LCAweDBBLCAweDEwLAorMHgxOSwgMHg0MCwgMHgyNCwgMHg0MCwgMHg5OSwgMHgwMCwgMHg3NCwgMHgwMiwgMHhEMCwgMHgwOSwgMHg0MCwgMHgyNCwgMHgwMCwKKzB4OUQsIDB4MDAsIDB4NzQsIDB4MDIsIDB4RDAsIDB4MDksIDB4NDAsIDB4NjMsIDB4MjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDA1LCAweDIwLCAweDI1LCAweDAwLCAweDkzLCAweDAwLCAweDVDLCAweDBBLCAweEYwLCAweDA5LCAweEMwLAorMHhBNywgMHgwMSwgMHg5MywgMHgwMCwgMHg2RCwgMHgwNiwgMHgzMCwgMHgwOSwgMHhDMCwgMHgyNywgMHgwMCwgMHg5MywgMHgwMSwKKzB4NEMsIDB4MEEsIDB4MzAsIDB4NjksIDB4QzAsIDB4MjMsIDB4MjQsIDB4OUIsIDB4MDAsIDB4N0MsIDB4MDYsIDB4MzIsIDB4MTgsCisweEMwLCAweDI0LCAweDAwLCAweDlBLCAweDAyLCAweDdDLCAweDAyLCAweEYwLCAweDA5LCAweEMwLCAweDI0LCAweDgwLCAweDlGLAorMHgwMiwgMHg3QywgMHgwQSwgMHhGMCwgMHgyOSwgMHhDMCwgMHgxNywgMHhBMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MTYsIDB4MDgsIDB4MjUsIDB4MTAsIDB4OUYsIDB4MDAsIDB4N0MsIDB4MDIsIDB4RjAsIDB4MDksIDB4QzAsIDB4MjMsCisweDAwLCAweDhGLCAweDAwLCAweDVDLCAweDRFLCAweEYwLCAweDA5LCAweEMwLCAweDI3LCAweDQ0LCAweDhGLCAweDQwLCAweDdDLAorMHgwMiwgMHhGMiwgMHgwOSwgMHhDMiwgMHgyNywgMHg0MCwgMHg4NywgMHgwMSwgMHg1NCwgMHhDQSwgMHhGMCwgMHgwOSwgMHhDMCwKKzB4MjcsIDB4MDAsIDB4OTcsIDB4MDAsIDB4N0MsIDB4MDIsIDB4RjEsIDB4MDksIDB4QzAsIDB4MjcsIDB4MEMsIDB4OUYsIDB4MDAsCisweDdDLCAweDAyLCAweEYwLCAweDA5LCAweEMwLCAweDUzLCAweDAwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgxNCwgMHgwOCwgMHgwNSwgMHgwNCwgMHgxRiwgMHgwNCwgMHg0QywgMHgwOCwgMHhCNCwgMHgwMSwgMHhEMCwgMHgwNCwgMHgwMSwKKzB4MTMsIDB4MDAsIDB4NEMsIDB4MDAsIDB4MzAsIDB4MDEsIDB4QzAsIDB4MDAsIDB4MDAsIDB4MTMsIDB4MDIsIDB4NEMsIDB4MDgsCisweDMwLCAweDIxLCAweEMwLCAweDg0LCAweDAwLCAweDEzLCAweDAxLCAweDBDLCAweDAwLCAweEI0LCAweDAxLCAweEMwLCAweDA3LAorMHgwMCwgMHgxRiwgMHgwNiwgMHg0RCwgMHgwMCwgMHgzMCwgMHgwMSwgMHhDMCwgMHgwNywgMHgwMiwgMHgxRiwgMHgwMiwgMHg0RCwKKzB4NDgsIDB4MzQsIDB4MjEsIDB4RDAsIDB4NTAsIDB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsCisweDAwLCAweERDLCAweDAwLCAweDZELCAweDAwLCAweEM0LCAweDA1LCAweDMwLCAweDA1LCAweDQwLCAweDFDLCAweDAwLCAweDUxLAorMHgwMCwgMHhDNSwgMHgwNSwgMHgxMCwgMHgwNywgMHg0OCwgMHgxQywgMHgwMCwgMHg1MSwgMHgyMCwgMHg0NCwgMHgwMSwgMHg1MCwKKzB4NjcsIDB4NDAsIDB4MUMsIDB4NDgsIDB4NzEsIDB4MTAsIDB4RUMsIDB4MDksIDB4MTAsIDB4MTUsIDB4NDAsIDB4MTMsIDB4MDAsCisweDdELCAweDgzLCAweEM0LCAweDAxLCAweDAwLCAweDE3LCAweDQwLCAweDFGLCAweDAwLCAweDdELCAweDAwLCAweEM0LCAweDA5LAorMHgxMCwgMHgwNywgMHg0MCwgMHg1MCwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHhBMCwKKzB4RjIsIDB4MDIsIDB4OEQsIDB4MDIsIDB4MDQsIDB4MDcsIDB4NTAsIDB4MEMsIDB4NDAsIDB4QjAsIDB4NDAsIDB4QzUsIDB4MDAsCisweDQ0LCAweDBGLCAweDEwLCAweDhDLCAweDQwLCAweDIwLCAweDAwLCAweEMxLCAweDAwLCAweDQ1LCAweDAzLCAweDE4LCAweDZDLAorMHg0NCwgMHgzMCwgMHgyMCwgMHhDMSwgMHgwMSwgMHgwNCwgMHgwNywgMHgxMCwgMHgxOCwgMHg0MCwgMHgzMywgMHgwOCwgMHhDRCwKKzB4MDMsIDB4MDQsIDB4MDUsIDB4MTAsIDB4ODksIDB4NDAsIDB4MzMsIDB4MDAsIDB4Q0QsIDB4MDAsIDB4MDUsIDB4MEIsIDB4MTAsCisweDBDLCAweDQwLCAweDUwLCAweDAwLCAweDBBLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDgwLCAweDM4LAorMHgxMCwgMHgyRCwgMHgwNCwgMHg4NCwgMHg0NywgMHg1MCwgMHhERiwgMHg0MiwgMHgwOCwgMHgwNCwgMHhFNSwgMHgwMCwgMHg4NCwKKzB4NDEsIDB4MTAsIDB4MUUsIDB4NDAsIDB4MkMsIDB4MDAsIDB4RjEsIDB4MDAsIDB4ODQsIDB4MTMsIDB4NTAsIDB4MUUsIDB4NTAsCisweDNDLCAweDA1LCAweDQxLCAweDIwLCAweEE0LCAweDBCLCAweDEwLCAweDBFLCAweDQxLCAweDNCLCAweDAwLCAweEVELCAweDAzLAorMHg4NCwgMHgwRCwgMHgxMSwgMHgwMiwgMHg0MCwgMHgwQiwgMHgwMCwgMHhFRCwgMHgwMSwgMHg4NCwgMHgwNywgMHgxMCwgMHgxRSwKKzB4NDQsIDB4MTQsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MTgsIDB4NzksIDB4MDAsCisweEFGLCAweDA3LCAweENELCAweDA3LCAweDcwLCAweDFFLCAweEMwLCAweDQwLCAweDQwLCAweDg3LCAweDg5LCAweDhDLCAweDA0LAorMHgzNCwgMHgxRSwgMHgxMCwgMHg3OCwgMHg0MCwgMHhFMywgMHgzMSwgMHhDQywgMHgwRiwgMHgzNCwgMHgxRSwgMHhDMCwgMHhFOCwKKzB4MDAsIDB4NjMsIDB4MDEsIDB4MEMsIDB4MDQsIDB4MzQsIDB4MUEsIDB4QzAsIDB4N0IsIDB4MDAsIDB4RkYsIDB4MDEsIDB4Q0MsCisweDA2LCAweDM0LCAweDEyLCAweEMwLCAweDRCLCAweDAwLCAweEZELCAweDAxLCAweENDLCAweDA3LCAweDMwLCAweDFGLCAweEMwLAorMHg1NCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHhCOCwgMHgzNSwgMHgwMCwgMHgxRiwKKzB4MjAsIDB4N0MsIDB4MDMsIDB4MzAsIDB4MkMsIDB4QzAsIDB4MDcsIDB4MDAsIDB4REIsIDB4MDQsIDB4M0MsIDB4MDAsIDB4RjIsCisweDA1LCAweEMwLCAweDM3LCAweDAwLCAweERGLCAweDA2LCAweDdDLCAweDVCLCAweEIwLCAweDg4LCAweEMwLCAweDEzLCAweDAwLAorMHg1RiwgMHgyMCwgMHg3QywgMHgwMCwgMHhGMCwgMHgwRiwgMHhDMCwgMHhCNywgMHgwRCwgMHhERiwgMHgwMCwgMHhGQywgMHg4MCwKKzB4RjAsIDB4MDksIDB4QzAsIDB4MDcsIDB4MDAsIDB4REYsIDB4MjAsIDB4N0MsIDB4MDEsIDB4RjAsIDB4MDksIDB4QzIsIDB4NDMsCisweDYwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA2LCAweDIwLCAweDdELCAweDAwLCAweDJGLCAweDAxLAorMHhEQywgMHgxMywgMHhGMCwgMHgzRiwgMHhDMCwgMHg0QywgMHgxMCwgMHhGNywgMHgwMSwgMHhEQywgMHgwNCwgMHgzMCwgMHgxRiwKKzB4QzgsIDB4NkMsIDB4MDAsIDB4RjMsIDB4MDEsIDB4Q0MsIDB4MDcsIDB4MzEsIDB4MUIsIDB4RDAsIDB4NkQsIDB4MDAsIDB4NzMsCisweDAxLCAweDlELCAweDA0LCAweEIyLCAweDRGLCAweEMwLCAweDdDLCAweDAwLCAweEYzLCAweDAxLCAweERDLCAweDA1LCAweDMwLAorMHgxRiwgMHhDMCwgMHg0QywgMHgwMCwgMHhGRiwgMHgwMSwgMHhGQywgMHgwNywgMHhGMCwgMHgxRiwgMHhDMCwgMHgwMywgMHgwOCwKKzB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTUsIDB4MDAsIDB4MzksIDB4MDAsIDB4MjcsIDB4MDAsIDB4ODQsCisweDBBLCAweEQwLCAweDhGLCAweDQxLCAweDBDLCAweDAwLCAweEUxLCAweDAwLCAweEVDLCAweDAwLCAweDEyLCAweDRBLCAweDQwLAorMHgwOCwgMHgwMiwgMHhFMCwgMHgwMCwgMHg4NCwgMHgxMywgMHhBMSwgMHgwQiwgMHg0MCwgMHgzOCwgMHgwMCwgMHg2MSwgMHgwOCwKKzB4ODQsIDB4MDIsIDB4NTAsIDB4MEYsIDB4NDAsIDB4M0MsIDB4MDIsIDB4QTcsIDB4MDAsIDB4QzQsIDB4MjEsIDB4MTIsIDB4MDcsCisweDQwLCAweDA4LCAweDAwLCAweEVELCAweDAwLCAweEI0LCAweDAzLCAweEQwLCAweDJFLCAweDQwLCAweDU3LCAweDIwLCAweDA2LAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzOSwgMHgwMCwgMHhBRCwgMHgwMCwgMHg5NCwgMHgyMywKKzB4RDAsIDB4MEUsIDB4NDAsIDB4MDgsIDB4MDAsIDB4ODUsIDB4MDAsIDB4OTQsIDB4NDAsIDB4MTAsIDB4MEUsIDB4NDAsIDB4M0MsCisweDAwLCAweEUxLCAweDA4LCAweDg0LCAweDAzLCAweDgwLCAweDAyLCAweDQwLCAweDI5LCAweDAyLCAweDIxLCAweDAwLCAweEQ0LAorMHgwMCwgMHgxNCwgMHgyRSwgMHg0MCwgMHgzOCwgMHgwMCwgMHg2MSwgMHgwMCwgMHg5NCwgMHgwMiwgMHgxMCwgMHgwNiwgMHg0MCwKKzB4MDgsIDB4MDAsIDB4RUQsIDB4MDAsIDB4QjQsIDB4MDMsIDB4RDAsIDB4MEUsIDB4NDAsIDB4MDMsIDB4MDAsIDB4MDQsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweDI4LCAweDM1LCAweDAwLCAweDA1LCAweDAwLCAweDA0LCAweDAyLCAweEQwLAorMHgxQywgMHg0MCwgMHgwMCwgMHgwMCwgMHhDMSwgMHgwMCwgMHgyNCwgMHgwMCwgMHgxMiwgMHgzMSwgMHg0MCwgMHgzMCwgMHgwMCwKKzB4QzEsIDB4MDAsIDB4MDUsIDB4ODMsIDB4OTAsIDB4MTAsIDB4NDAsIDB4MTAsIDB4MDQsIDB4NDEsIDB4NjEsIDB4MDQsIDB4MDQsCisweDU0LCAweDlDLCAweDQ0LCAweDMwLCAweDA4LCAweDk1LCAweDAwLCAweDA0LCAweDAwLCAweDEwLCAweDBDLCAweDQwLCAweDAwLAorMHgwMCwgMHhDRCwgMHgwMCwgMHgzNCwgMHgwMywgMHhEMCwgMHgwOCwgMHg0MCwgMHgxMywgMHgyMCwgMHgwQywgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MTUsIDB4QTAsIDB4MzUsIDB4MDAsIDB4RkYsIDB4MDAsIDB4NUMsIDB4MDMsIDB4RjAsIDB4MUYsCisweEQwLCAweDI0LCAweDAwLCAweEQ3LCAweDAwLCAweDFDLCAweDA0LCAweDMwLCAweDhELCAweEQ1LCAweDYwLCAweDAwLCAweEQzLAorMHgwQSwgMHhDQywgMHgwQiwgMHhCMCwgMHg4MywgMHhEMSwgMHgzOSwgMHg0OCwgMHgxMywgMHgxMCwgMHg1RCwgMHgwMiwgMHgzMCwKKzB4MEQsIDB4QzQsIDB4QTQsIDB4MDAsIDB4RDMsIDB4MDAsIDB4NUMsIDB4MDksIDB4MzAsIDB4MEQsIDB4QzAsIDB4MDAsIDB4MDAsCisweERGLCAweDAwLCAweDdDLCAweDAzLCAweEYwLCAweDBELCAweEMwLCAweDU3LCAweDIwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwNSwgMHgwOCwgMHgyNywgMHgwMCwgMHg1RiwgMHgwMCwgMHg3QywgMHgwMywgMHhGMCwgMHgwRCwgMHhDMCwKKzB4MDcsIDB4MDIsIDB4REYsIDB4MjAsIDB4NUMsIDB4MDgsIDB4RjQsIDB4MkQsIDB4QzAsIDB4RTcsIDB4NDAsIDB4REYsIDB4MDgsCisweDdDLCAweDAzLCAweEYwLCAweDA5LCAweEMwLCAweDM3LCAweDAyLCAweDFGLCAweDIwLCAweDdDLCAweEEyLCAweDc0LCAweDBELAorMHhDMCwgMHgzNywgMHgwMSwgMHhENywgMHg0MCwgMHg3QywgMHgxMSwgMHhGMCwgMHgyRCwgMHhDMCwgMHgwNywgMHgwMCwgMHg5RiwKKzB4MDAsIDB4N0MsIDB4MDIsIDB4RjAsIDB4MEQsIDB4QzAsIDB4MDcsIDB4MDAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDgwLCAweDA4LCAweDFGLCAweDAwLCAweEIzLCAweDAwLCAweENDLCAweDAxLCAweEYwLCAweDBGLCAweEMwLCAweDBCLAorMHgwMCwgMHhCMiwgMHgwMCwgMHhDQywgMHgwMCwgMHgzMCwgMHgxRiwgMHhDMCwgMHgyQywgMHg0MCwgMHg5NywgMHgwMCwgMHg3QywKKzB4NDMsIDB4MzIsIDB4NTMsIDB4RDAsIDB4MkUsIDB4MDAsIDB4MTMsIDB4MDAsIDB4RkMsIDB4MjAsIDB4MjAsIDB4MUYsIDB4QzAsCisweDJGLCAweDAwLCAweEZELCAweDAwLCAweEVDLCAweDAwLCAweEYwLCAweDBGLCAweEMwLCAweDBDLCAweDEwLCAweDcyLCAweDAwLAorMHhGQywgMHgyNywgMHhGMCwgMHgwNywgMHhDMCwgMHgwMywgMHgyMiwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4ODEsIDB4MDAsIDB4MDYsIDB4MDgsIDB4MTEsIDB4MDAsIDB4NDUsIDB4MEIsIDB4RDAsIDB4MEQsIDB4QzgsIDB4NDUsIDB4MDAsCisweEQxLCAweDAwLCAweDQ0LCAweDA0LCAweDEwLCAweEJELCAweDQxLCAweDY0LCAweDIwLCAweDkxLCAweDA4LCAweDM0LCAweDAzLAorMHgxMiwgMHgwOSwgMHg0MCwgMHgxNSwgMHgwMCwgMHgxMSwgMHgwMSwgMHg3QywgMHgwMCwgMHg1MCwgMHgxRCwgMHg0MCwgMHg3NywKKzB4MDAsIDB4REQsIDB4MDksIDB4NDQsIDB4MDQsIDB4RDAsIDB4M0QsIDB4NDgsIDB4QzQsIDB4MDQsIDB4RDEsIDB4MDAsIDB4NzQsCisweDA1LCAweEQwLCAweEJELCAweDQwLCAweDA3LCAweDAyLCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLAorMHhBMCwgMHg3NiwgMHgwMCwgMHg0MSwgMHgwOCwgMHg0NCwgMHgyMywgMHhEMCwgMHgwRCwgMHg0MCwgMHg0NywgMHgwMCwgMHhDNSwKKzB4MDAsIDB4NDQsIDB4MEMsIDB4MTAsIDB4MEQsIDB4NDAsIDB4RTUsIDB4MDAsIDB4RDEsIDB4MDAsIDB4NzQsIDB4MDMsIDB4MTIsCisweDAwLCAweDQxLCAweDI2LCAweDAwLCAweDExLCAweDIzLCAweDM0LCAweDAwLCAweEQ4LCAweDRELCAweDQwLCAweDI3LCAweDAxLAorMHhERCwgMHgwMCwgMHg2NCwgMHg0NCwgMHhEMCwgMHg2QywgMHg0MCwgMHg0NCwgMHg4MCwgMHhENSwgMHgwMSwgMHg3NCwgMHgwMywKKzB4RDAsIDB4MEQsIDB4NDAsIDB4MDcsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MjAsCisweDcwLCAweDAwLCAweDQxLCAweDAwLCAweDA0LCAweDAzLCAweEQwLCAweDBDLCAweDQwLCAweDAxLCAweDAwLCAweEM1LCAweDAwLAorMHgwNCwgMHg4MCwgMHgxNCwgMHgwQywgMHg1MCwgMHgyMSwgMHgwMCwgMHhDMSwgMHgwMCwgMHg3NCwgMHg4MywgMHgxOCwgMHgwOCwKKzB4NTAsIDB4MzEsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MzQsIDB4MDIsIDB4RDAsIDB4MEMsIDB4NDAsIDB4MzMsIDB4MDAsIDB4Q0QsCisweDAwLCAweDA0LCAweDAwLCAweEQwLCAweDBDLCAweDQwLCAweDAwLCAweDgwLCAweDg1LCAweDAxLCAweDM0LCAweDAyLCAweEQwLAorMHgwQywgMHg0MCwgMHg0MywgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5OCwgMHgzNiwKKzB4MDAsIDB4OTMsIDB4ODAsIDB4NEMsIDB4ODEsIDB4RjAsIDB4MEYsIDB4QzAsIDB4MDcsIDB4MjAsIDB4QjcsIDB4MDAsIDB4NEQsCisweDAwLCAweDMwLCAweDBDLCAweDQ0LCAweDI1LCAweDAwLCAweEIzLCAweDAwLCAweEZDLCAweDAzLCAweDMxLCAweDAxLCAweEM0LAorMHgyMiwgMHgwMCwgMHgxMywgMHgwMCwgMHg3QywgMHgwMCwgMHhGMCwgMHgwRCwgMHhDMiwgMHgyRiwgMHgwMCwgMHg0RiwgMHg0MCwKKzB4NkMsIDB4MDAsIDB4RjAsIDB4MEQsIDB4QzAsIDB4MDQsIDB4MDAsIDB4NTcsIDB4MDAsIDB4N0MsIDB4MDMsIDB4RjAsIDB4MDUsCisweEM0LCAweDAzLCAweEMwLCAweDBBLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweEI4LCAweDNGLCAweDAwLAorMHgzRiwgMHg0MCwgMHhGQywgMHgwMywgMHhGMCwgMHgwRiwgMHhDMCwgMHgwRiwgMHgwMCwgMHhGQiwgMHg0MCwgMHhGQywgMHgwMCwKKzB4RjAsIDB4MEYsIDB4QzAsIDB4MkEsIDB4MDAsIDB4QkYsIDB4MDAsIDB4RkMsIDB4MDMsIDB4RjAsIDB4MDMsIDB4NDAsIDB4MUYsCisweDQwLCAweDNGLCAweDAwLCAweEQ4LCAweDAwLCAweDcyLCAweDBGLCAweEMwLCAweDNGLCAweDAwLCAweEZGLCAweDAwLCAweEZDLAorMHgwMCwgMHhGMCwgMHgwRiwgMHhDOCwgMHgwRiwgMHgwOCwgMHhGQiwgMHgwMCwgMHhGQywgMHgwMywgMHhGMCwgMHgwRiwgMHhDMCwKKzB4MTcsIDB4NjAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4QTAsIDB4N0YsIDB4MDAsIDB4RkYsCisweDAxLCAweEZDLCAweDEzLCAweDMyLCAweDhCLCAweEMyLCAweDJDLCAweDA5LCAweEZGLCAweDAxLCAweEZDLCAweDYzLCAweDMwLAorMHg0QiwgMHhDMiwgMHg3QywgMHgwMCwgMHhCRiwgMHgwNCwgMHhDQywgMHg4MiwgMHgzMCwgMHgyRiwgMHhDMSwgMHg3QywgMHgwMCwKKzB4RjMsIDB4MDEsIDB4RkMsIDB4NDMsIDB4MzAsIDB4NEYsIDB4NTAsIDB4MjgsIDB4MDAsIDB4RjMsIDB4MDEsIDB4RkUsIDB4MDcsCisweEIwLCAweDFGLCAweEMwLCAweDdDLCAweDAwLCAweEY5LCAweDAxLCAweEZDLCAweDAzLCAweEYwLCAweDFGLCAweEMwLCAweDBGLAorMHgwMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwOCwgMHg3NywgMHgwMCwgMHhERCwgMHgwMSwKKzB4RjQsIDB4NjMsIDB4MTAsIDB4ODEsIDB4NDYsIDB4RTQsIDB4MEEsIDB4REQsIDB4NDEsIDB4RjQsIDB4MEIsIDB4NTAsIDB4OTEsCisweDQyLCAweDc0LCAweDAwLCAweDlDLCAweDIyLCAweDQ0LCAweDA4LCAweDEwLCAweDJGLCAweEM0LCAweDM0LCAweDA4LCAweEQ1LAorMHgyMSwgMHhGNCwgMHgwRiwgMHg0MSwgMHg5RiwgMHg0MCwgMHhDNCwgMHgwMiwgMHhEMSwgMHgwMSwgMHg3NCwgMHgwNywgMHgxMCwKKzB4MTUsIDB4NDAsIDB4NzQsIDB4MDAsIDB4RDksIDB4MDEsIDB4NzQsIDB4MDcsIDB4RDAsIDB4MUQsIDB4NDAsIDB4MEYsIDB4MjAsCisweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDExLCAweEEwLCAweDMzLCAweDI4LCAweENELCAweDgwLCAweDM0LAorMHgxMywgMHgwMCwgMHgwOCwgMHg0OCwgMHg0MCwgMHgyMCwgMHhDRCwgMHg4MCwgMHgzMCwgMHgwMywgMHgxMiwgMHgxMCwgMHg0MCwKKzB4MzAsIDB4MTAsIDB4MEQsIDB4MUMsIDB4MDQsIDB4NzYsIDB4MTAsIDB4NEMsIDB4NDAsIDB4MzMsIDB4MDUsIDB4QzEsIDB4NDAsCisweDM0LCAweDgzLCAweDgwLCAweDBDLCAweDQwLCAweDIwLCAweDA4LCAweEMxLCAweDgwLCAweDM0LCAweDAzLCAweDkwLCAweDBELAorMHg0MCwgMHgzMiwgMHgwMCwgMHhDRCwgMHgwMCwgMHgzNCwgMHgwMywgMHhEMCwgMHgwQywgMHg0MCwgMHg0RiwgMHg4MCwgMHgwRSwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4QTgsIDB4MzUsIDB4MDAsIDB4REQsIDB4MDAsIDB4NzQsIDB4MDMsCisweDExLCAweDExLCAweDQwLCAweDY0LCAweDAwLCAweERELCAweDQwLCAweDY0LCAweDAzLCAweDEwLCAweDExLCAweDQwLCAweDM0LAorMHgyMCwgMHgwOSwgMHgwMywgMHgwNCwgMHgwNiwgMHgxMCwgMHgwRCwgMHg0NCwgMHgzNSwgMHgwMCwgMHhEMSwgMHgwMCwgMHg3NCwKKzB4MDMsIDB4OTAsIDB4MEQsIDB4NDAsIDB4NjQsIDB4MDQsIDB4RDEsIDB4MDAsIDB4NzQsIDB4MDMsIDB4NTAsIDB4MTksIDB4NDAsCisweDM2LCAweDAwLCAweERELCAweDAwLCAweDc0LCAweDAzLCAweEQwLCAweDBELCAweDAwLCAweDBGLCAweDIwLCAweDA2LCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHhBOCwgMHgzNywgMHgwMCwgMHhERiwgMHgwMCwgMHg3NCwgMHgwMywgMHgzMCwKKzB4MzEsIDB4QzAsIDB4NDQsIDB4MDAsIDB4REYsIDB4NDAsIDB4N0MsIDB4MDMsIDB4MzIsIDB4MTksIDB4QzAsIDB4MzQsIDB4MDgsCisweDlGLCAweDAxLCAweDRDLCAweDA0LCAweDMwLCAweDBELCAweEM2LCAweDM3LCAweDAwLCAweEQxLCAweDgwLCAweDdDLCAweDgzLAorMHhBMCwgMHgwRCwgMHhDMCwgMHg2NCwgMHgwMCwgMHhEMywgMHgwMCwgMHg3NCwgMHgwMywgMHhCMCwgMHgzRCwgMHhDMSwgMHgzNiwKKzB4MDAsIDB4REYsIDB4MDAsIDB4N0MsIDB4MDMsIDB4RDAsIDB4MEQsIDB4QzAsIDB4ODMsIDB4MDAsIDB4MEUsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDA3LCAweDgwLCAweDNELCAweDAwLCAweEZGLCAweDAwLCAweDdDLCAweDAzLCAweEYwLCAweDAyLAorMHhDMCwgMHgwNywgMHgwMCwgMHhGRiwgMHg0MCwgMHhGQywgMHgwMywgMHhGMCwgMHgwMCwgMHg0MCwgMHgzRiwgMHgwMCwgMHg5RiwKKzB4MjAsIDB4N0MsIDB4ODAsIDB4RjEsIDB4MEYsIDB4QzAsIDB4M0UsIDB4MDAsIDB4RkQsIDB4MDAsIDB4RkMsIDB4MDMsIDB4NzIsCisweDBGLCAweDQwLCAweDBCLCAweDAwLCAweEZELCAweDAwLCAweEZDLCAweDAzLCAweEIwLCAweDBGLCAweDQwLCAweDNELCAweDAwLAorMHhGQiwgMHgwMCwgMHhGQywgMHgwMywgMHhGMCwgMHgwRiwgMHhDMCwgMHgxRiwgMHgyMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDIsIDB4MDgsIDB4MzUsIDB4MDAsIDB4REYsIDB4MDAsIDB4M0MsIDB4MDMsIDB4MzAsIDB4QTksIDB4QzAsCisweDA0LCAweDAwLCAweEQzLCAweDYwLCAweDJDLCAweDYzLCAweDMwLCAweDA5LCAweEMwLCAweDM0LCAweDAwLCAweDlCLCAweDIwLAorMHg0QywgMHgwMCwgMHgzMCwgMHg4QywgMHhDMCwgMHgzNCwgMHgwMCwgMHhEMiwgMHgwMCwgMHgzQywgMHgwMywgMHgzMCwgMHgwQywKKzB4QzAsIDB4MjcsIDB4MDAsIDB4RDcsIDB4MDAsIDB4N0MsIDB4MjMsIDB4RjEsIDB4MkQsIDB4QzAsIDB4MzcsIDB4MTAsIDB4REYsCisweDAwLCAweDdDLCAweDAzLCAweEYwLCAweDBELCAweEMwLCAweDJCLCAweDIwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgxMywgMHhBMCwgMHgzNCwgMHgwMCwgMHhERCwgMHgwMCwgMHhGNCwgMHgwMywgMHgxMCwgMHgzMSwgMHg0MCwgMHgyNCwKKzB4MDAsIDB4RDEsIDB4MDAsIDB4RjQsIDB4MEIsIDB4MTAsIDB4MDksIDB4NDQsIDB4MzQsIDB4MDAsIDB4OUQsIDB4MDAsIDB4NDQsCisweDAyLCAweDEyLCAweEFGLCAweDQwLCAweDc0LCAweDIwLCAweEQxLCAweDAwLCAweEY0LCAweDAzLCAweDEwLCAweDBGLCAweDQwLAorMHgyNywgMHgwMCwgMHhEMSwgMHg4MCwgMHgzNCwgMHgwRiwgMHhEMCwgMHgwQywgMHg0MCwgMHgzNywgMHgwMCwgMHhERCwgMHgwMCwKKzB4RjQsIDB4MDMsIDB4RDAsIDB4MEQsIDB4NDAsIDB4NEYsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDA3LCAweEEwLCAweDMyLCAweDAwLCAweENELCAweDAwLCAweDM0LCAweDAzLCAweDE0LCAweDA4LCAweDQxLCAweDIwLCAweDAwLAorMHhDMSwgMHgwMCwgMHgzNCwgMHgwQiwgMHgxMCwgMHgwOCwgMHg0MCwgMHgzMCwgMHgwMCwgMHgwRCwgMHgwMCwgMHgwNCwgMHgwMiwKKzB4MTAsIDB4MkMsIDB4NDAsIDB4MzQsIDB4MDIsIDB4QzEsIDB4MDAsIDB4MzQsIDB4MDMsIDB4MTAsIDB4MEMsIDB4NDAsIDB4MDMsCisweDAwLCAweEM1LCAweDIwLCAweDM0LCAweDRGLCAweEQwLCAweDBDLCAweDQwLCAweDMzLCAweDAwLCAweENELCAweDAwLCAweDM0LAorMHgwMywgMHhEMCwgMHgwQywgMHg0MCwgMHgwRiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwKKzB4ODAsIDB4NzgsIDB4MDAsIDB4RUQsIDB4MDEsIDB4QjQsIDB4MjcsIDB4MTAsIDB4MUUsIDB4NDAsIDB4NzgsIDB4MDAsIDB4RTEsCisweDAxLCAweEI0LCAweDA3LCAweDEwLCAweDFFLCAweDQwLCAweDc4LCAweDAwLCAweEVELCAweDAxLCAweDg0LCAweDA1LCAweDEwLAorMHgxRSwgMHg0MCwgMHhGOCwgMHgwMCwgMHhFMSwgMHgwMSwgMHhGNCwgMHgwNywgMHgxMCwgMHgxRSwgMHg0MCwgMHg1QiwgMHgwMCwKKzB4RTEsIDB4MDEsIDB4QjAsIDB4MDcsIDB4RDAsIDB4MUUsIDB4NDAsIDB4N0IsIDB4MDAsIDB4RUQsIDB4MDEsIDB4QjQsIDB4MDcsCisweEQwLCAweDFFLCAweDQwLCAweDNGLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDEwLAorMHgzMCwgMHgwMCwgMHhDRiwgMHgwMCwgMHgzQywgMHgwMywgMHgzMCwgMHgyRCwgMHhDMCwgMHgxMCwgMHgwOCwgMHhDMywgMHgwOCwKKzB4N0MsIDB4MDMsIDB4MzAsIDB4NDQsIDB4QzAsIDB4MzAsIDB4MDIsIDB4NEYsIDB4MDAsIDB4MEMsIDB4MDMsIDB4MzAsIDB4OEQsCisweEUwLCAweDM0LCAweDAwLCAweEMzLCAweDA4LCAweDdDLCAweDIzLCAweDMwLCAweDBDLCAweEMwLCAweDEzLCAweDAwLCAweEM3LAorMHgwMCwgMHgzQywgMHgwMywgMHhGMSwgMHgwQywgMHhDMCwgMHgzMywgMHgwMCwgMHhDRiwgMHgwMCwgMHgzQywgMHgwMywgMHhGMCwKKzB4MEMsIDB4QzAsIDB4NEIsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4QjgsIDB4MzUsCisweDEwLCAweERGLCAweDAwLCAweDdDLCAweDBCLCAweEMwLCAweDBELCAweDQwLCAweDM3LCAweDAwLCAweERGLCAweDAwLCAweDc0LAorMHgwMywgMHhGMCwgMHgwNSwgMHhDMCwgMHgzNywgMHgyMCwgMHhERSwgMHgwMCwgMHg3QywgMHgwMywgMHhGMCwgMHgyRCwgMHhDMCwKKzB4MzcsIDB4MDAsIDB4REYsIDB4MDgsIDB4N0MsIDB4ODMsIDB4QjQsIDB4MEQsIDB4QzEsIDB4MzcsIDB4MDAsIDB4REYsIDB4MDAsCisweDdDLCAweDAzLCAweEYwLCAweDBELCAweEMwLCAweDM3LCAweDAwLCAweERGLCAweDAwLCAweDdDLCAweDAzLCAweEYwLCAweDBELAorMHhDMCwgMHgwQiwgMHg2MCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwgMHhBMCwgMHgzNywgMHgwMCwKKzB4REYsIDB4MDAsIDB4N0MsIDB4QjMsIDB4MzAsIDB4MTUsIDB4QzAsIDB4MzQsIDB4MDAsIDB4REYsIDB4MDAsIDB4N0MsIDB4NEIsCisweEYwLCAweDBELCAweEM4LCAweDM3LCAweDI4LCAweDVGLCAweDAwLCAweDdDLCAweDAzLCAweEYwLCAweEFELCAweEMwLCAweDM3LAorMHgwMCwgMHhERiwgMHgwMCwgMHg3QywgMHg1MywgMHhGMCwgMHgxRCwgMHhDNCwgMHgzNCwgMHgxMCwgMHhEMywgMHgwMCwgMHg3QywKKzB4MDMsIDB4RjAsIDB4MEQsIDB4QzAsIDB4MzcsIDB4MDAsIDB4REYsIDB4MDAsIDB4N0MsIDB4MDMsIDB4RjAsIDB4MEQsIDB4QzAsCisweDQzLCAweDAwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDg4LCAweDM5LCAweDAwLCAweEVELAorMHgwMCwgMHhCNCwgMHgwMywgMHgxMCwgMHgwRSwgMHg0MCwgMHgzOCwgMHgwMCwgMHhFRCwgMHgwMCwgMHhCNCwgMHgxMywgMHhEMCwKKzB4MEUsIDB4NDAsIDB4M0IsIDB4MDAsIDB4RUQsIDB4MDAsIDB4QjQsIDB4MDEsIDB4RDMsIDB4NEUsIDB4NDAsIDB4M0IsIDB4MDAsCisweEVELCAweDAwLCAweEI0LCAweDFCLCAweEQwLCAweDRFLCAweDQxLCAweDE4LCAweDA4LCAweEUxLCAweDgwLCAweEI0LCAweDAzLAorMHhEMCwgMHgwRSwgMHg0MCwgMHgzQiwgMHgwMCwgMHhFRCwgMHgwMCwgMHhCNCwgMHgwQiwgMHhEMCwgMHgwRSwgMHg0MCwgMHg0RiwKKzB4MjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4MDAsIDB4NzksIDB4MDAsIDB4RUQsIDB4MDEsCisweEIwLCAweDE3LCAweDEwLCAweDFDLCAweDUxLCAweDU4LCAweDAwLCAweEVELCAweDAxLCAweEI0LCAweDI3LCAweEQwLCAweDFFLAorMHg0MCwgMHg3QiwgMHgwMCwgMHg2RCwgMHgyMSwgMHhCNCwgMHgwNywgMHhEMCwgMHgxRSwgMHg0MCwgMHg3QiwgMHgwMCwgMHhFRCwKKzB4MDEsIDB4QjQsIDB4MDcsIDB4RDAsIDB4MUMsIDB4NDAsIDB4NzAsIDB4NDAsIDB4RTEsIDB4MDEsIDB4QjQsIDB4MDcsIDB4RDAsCisweDFFLCAweDQxLCAweDdCLCAweDgwLCAweEVELCAweDAxLCAweEI0LCAweDA3LCAweEQwLCAweDFFLCAweDQwLCAweDEzLCAweDAwLAorMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHgyOCwgMHgzMywgMHgwMCwgMHhDRCwgMHgwMCwgMHg3NCwKKzB4ODMsIDB4MTAsIDB4M0MsIDB4NDUsIDB4RjAsIDB4MDIsIDB4Q0QsIDB4MDAsIDB4MzQsIDB4MDMsIDB4RDgsIDB4QkMsIDB4NDAsCisweDMzLCAweDAwLCAweERELCAweDAxLCAweDM0LCAweDJCLCAweEQxLCAweDBELCAweDQwLCAweDMzLCAweDAwLCAweENELCAweDAwLAorMHgzNCwgMHgwMywgMHhEMCwgMHgwQywgMHg0MCwgMHg3MCwgMHgwMCwgMHhEMSwgMHg4MCwgMHgzNCwgMHgwMywgMHhEMCwgMHg3QywKKzB4NDAsIDB4MzMsIDB4MDAsIDB4Q0QsIDB4MDAsIDB4MzQsIDB4MDMsIDB4RDAsIDB4MEMsIDB4NjAsIDB4NUIsIDB4MjAsIDB4MEMsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE3LCAweEE4LCAweDE1LCAweDAwLCAweDVGLCAweEMwLCAweDdDLCAweDAxLAorMHgzMCwgMHgxNywgMHhDMCwgMHhEQywgMHgwMCwgMHg1RiwgMHgwMCwgMHg3QywgMHgwMSwgMHhGMCwgMHgxNywgMHhDMCwgMHgxNywKKzB4MDAsIDB4N0YsIDB4MDUsIDB4RkMsIDB4MjUsIDB4RjAsIDB4MDUsIDB4QzAsIDB4MTcsIDB4MDAsIDB4NUYsIDB4MDAsIDB4N0MsCisweDAxLCAweEYwLCAweDA1LCAweEMwLCAweDU4LCAweDAxLCAweDUzLCAweDAwLCAweDdDLCAweDAxLCAweEYwLCAweDM3LCAweEMwLAorMHgxNywgMHgwMCwgMHg1RiwgMHgwMCwgMHg3QywgMHgwMSwgMHhGMCwgMHgwNSwgMHhDMCwgMHg1RiwgMHgwMCwgMHgwNCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4MDAsIDB4MDcsIDB4MDAsIDB4MUYsIDB4MDAsIDB4N0MsIDB4MDAsIDB4RjQsCisweDAxLCAweEMwLCAweDA3LCAweDA0LCAweDFGLCAweDAwLCAweDdDLCAweDAwLCAweEYwLCAweDAxLCAweEMxLCAweDA2LCAweDEwLAorMHgxRiwgMHg0MSwgMHg3QywgMHgwMCwgMHhFMCwgMHgwMSwgMHhDMCwgMHgwNywgMHgwMCwgMHgxRiwgMHgwMCwgMHg3QywgMHgwMCwKKzB4RjAsIDB4MDEsIDB4RDAsIDB4QzcsIDB4MDAsIDB4MUYsIDB4MDAsIDB4N0MsIDB4MDgsIDB4RjAsIDB4MDEsIDB4QzAsIDB4MDcsCisweDAwLCAweDFGLCAweDAwLCAweDdDLCAweDAwLCAweEYwLCAweDAxLCAweEMwLCAweDRCLCAweDIwLCAweDA0LCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHgyNywgMHgwMCwgMHg5RiwgMHgwMCwgMHg3QywgMHgwMiwgMHgzMCwgMHg1OSwKKzB4QzAsIDB4MjcsIDB4MDAsIDB4OUYsIDB4MDAsIDB4N0MsIDB4MjYsIDB4RjAsIDB4MDksIDB4QzQsIDB4MjcsIDB4MDAsIDB4OUYsCisweDAwLCAweDRDLCAweDAyLCAweEYwLCAweDk5LCAweEMwLCAweDY0LCAweDAwLCAweDlGLCAweDQwLCAweDdDLCAweDAyLCAweEYwLAorMHgwOSwgMHhDMCwgMHg2NywgMHgwMCwgMHg5NywgMHgwMCwgMHg0QywgMHgwMiwgMHg3MCwgMHgwOSwgMHhDMCwgMHgyNywgMHgwMCwKKzB4OUYsIDB4MDAsIDB4N0MsIDB4MDIsIDB4RjAsIDB4MDksIDB4QzAsIDB4NDMsIDB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAxLCAweDIwLCAweDI2LCAweDAwLCAweDlELCAweDAwLCAweDc0LCAweDAyLCAweDEwLCAweDE5LCAweDQwLAorMHgyNywgMHgwMCwgMHg5RCwgMHgwMCwgMHg3NiwgMHg4MiwgMHhEMCwgMHgwOSwgMHg0MCwgMHgyNywgMHgwMCwgMHg5RCwgMHgwMCwKKzB4NDQsIDB4MDIsIDB4RDAsIDB4NjksIDB4QzAsIDB4QTQsIDB4MDEsIDB4OUQsIDB4MDAsIDB4NzQsIDB4MDIsIDB4RDAsIDB4MDksCisweDQwLCAweEE3LCAweDEyLCAweDkxLCAweDQwLCAweDBDLCAweDlBLCAweDExLCAweDA5LCAweDQwLCAweDI3LCAweDAwLCAweDlELAorMHgwMCwgMHg3NCwgMHgwMiwgMHhEMCwgMHgwOSwgMHg0MCwgMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MTgsIDB4QTAsIDB4MjQsIDB4MDAsIDB4OUQsIDB4MDAsIDB4NzQsIDB4MDIsIDB4MTAsIDB4MDksIDB4NDAsIDB4MjcsCisweDAwLCAweDlELCAweDQwLCAweDc0LCAweDAyLCAweEQwLCAweDA5LCAweDQwLCAweDI3LCAweDAwLCAweDlELCAweDIwLCAweDQ0LAorMHg4MiwgMHhEMCwgMHgwOSwgMHg0MCwgMHgyNCwgMHgwQSwgMHg5RCwgMHgwMCwgMHg3NCwgMHgwMiwgMHhEMCwgMHgwOSwgMHg0MCwKKzB4QTcsIDB4MDAsIDB4OTUsIDB4MDAsIDB4NDQsIDB4MDIsIDB4NTAsIDB4MDksIDB4NDAsIDB4MjcsIDB4MDAsIDB4OUQsIDB4MDAsCisweDc0LCAweDAyLCAweEQwLCAweDA5LCAweDQwLCAweDYzLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgxMCwgMHgyMCwgMHgyMCwgMHgwMCwgMHg4RCwgMHgwMCwgMHgzNCwgMHgxMiwgMHgxMCwgMHg1OCwgMHg0MCwgMHgyMywgMHgwMSwKKzB4OEQsIDB4NDAsIDB4MzQsIDB4MTYsIDB4RDAsIDB4NDgsIDB4NDAsIDB4MjMsIDB4MDAsIDB4OEQsIDB4NDQsIDB4MDQsIDB4MTIsCisweEQwLCAweDQ4LCAweDQwLCAweDIwLCAweDAwLCAweDhELCAweDAwLCAweDM0LCAweDEyLCAweEQ4LCAweDQ4LCAweDQwLCAweDIzLAorMHgwMSwgMHg5MSwgMHgwMCwgMHgwNCwgMHgwMiwgMHgxMCwgMHgwOCwgMHg0MCwgMHgyMywgMHgwMCwgMHg4RCwgMHgwMCwgMHgzNCwKKzB4MTIsIDB4RDAsIDB4MDgsIDB4NDAsIDB4NDMsIDB4QTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MUQsCisweEIwLCAweDA2LCAweDAwLCAweDFGLCAweDAwLCAweDNDLCAweDI4LCAweDMwLCAweEExLCAweEMwLCAweDA3LCAweDAwLCAweDFGLAorMHgwMCwgMHg3NCwgMHgyOCwgMHhGMCwgMHgwMSwgMHhDMCwgMHgwNywgMHgwMCwgMHgxRiwgMHgwQSwgMHg0RCwgMHgyOCwgMHhGMSwKKzB4QTEsIDB4NDAsIDB4ODQsIDB4MDIsIDB4MUYsIDB4MDAsIDB4N0MsIDB4MDAsIDB4RjAsIDB4MDEsIDB4QzAsIDB4MDcsIDB4MDAsCisweDE3LCAweDAwLCAweDRELCAweDAwLCAweDcwLCAweDAxLCAweEMwLCAweDA3LCAweDAwLCAweDFGLCAweDAwLCAweDdDLCAweDAwLAorMHhGMCwgMHgwMSwgMHhDMCwgMHg3NywgMHhDMCwgMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOSwgMHhCOCwKKzB4MjcsIDB4MDAsIDB4OUYsIDB4MDAsIDB4N0MsIDB4MjIsIDB4RjQsIDB4OEIsIDB4QzAsIDB4MkYsIDB4MEEsIDB4OUYsIDB4MDAsCisweDdDLCAweDIyLCAweEYwLCAweDhCLCAweEMwLCAweDI3LCAweDAwLCAweEZGLCAweDA4LCAweEZDLCAweDIyLCAweEYwLCAweDg5LAorMHhEMCwgMHgyNSwgMHgwMCwgMHg5RiwgMHgwMCwgMHg3QywgMHgyMiwgMHhGMCwgMHg4OSwgMHhDMCwgMHgyRiwgMHgwMiwgMHg5RiwKKzB4MDAsIDB4NUMsIDB4MDIsIDB4RjAsIDB4MEIsIDB4QzAsIDB4MjcsIDB4MDAsIDB4OUYsIDB4MDAsIDB4N0MsIDB4MjIsIDB4RjAsCisweDA5LCAweEMwLCAweDc3LCAweDIwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweEEwLCAweDI3LAorMHgwMCwgMHg5RiwgMHgwMCwgMHg3QywgMHgxRSwgMHhGMCwgMHhEQiwgMHhDMCwgMHg2NywgMHgwMSwgMHg5RiwgMHgwMCwgMHhGQywKKzB4MzYsIDB4MzQsIDB4NTksIDB4QzAsIDB4MjcsIDB4MDAsIDB4OUYsIDB4MDcsIDB4NEMsIDB4MUUsIDB4RjEsIDB4N0IsIDB4RDAsCisweEFDLCAweDAwLCAweDlGLCAweDAwLCAweDdDLCAweDA2LCAweEYwLCAweDU5LCAweEMwLCAweDZGLCAweDAxLCAweDlCLCAweDAwLAorMHhGQywgMHgwMiwgMHhGMCwgMHgwOCwgMHhDMCwgMHgyNywgMHgwMCwgMHg5RiwgMHgwMCwgMHg3QywgMHgwMiwgMHhGMCwgMHgwOSwKKzB4QzAsIDB4NzcsIDB4MDAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MUMsIDB4MDgsIDB4MDcsIDB4MDAsCisweDFELCAweDAwLCAweDc0LCAweDNDLCAweEQwLCAweEY1LCAweDQyLCAweDg3LCAweDAyLCAweDFELCAweDAwLCAweDc0LCAweDNDLAorMHgxMCwgMHgwMSwgMHg0MCwgMHgwNywgMHgwMCwgMHgxRCwgMHgwNSwgMHg0NCwgMHgxRCwgMHhEMCwgMHg3MSwgMHg0MCwgMHg0NCwKKzB4MDEsIDB4MUQsIDB4MDAsIDB4NzQsIDB4MDgsIDB4RDAsIDB4MjEsIDB4NDAsIDB4OTcsIDB4MDIsIDB4MTEsIDB4MDAsIDB4NzQsCisweDAwLCAweEQwLCAweDAxLCAweDQwLCAweDA3LCAweDAwLCAweDFELCAweDAwLCAweDc0LCAweDIwLCAweEQwLCAweDAxLCAweDQwLAorMHg2MywgMHgwMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHhBMCwgMHgyMywgMHgwMCwgMHg4RCwKKzB4MDAsIDB4MzQsIDB4MTIsIDB4RDAsIDB4MDgsIDB4NDAsIDB4MjMsIDB4MDAsIDB4OEQsIDB4MDAsIDB4MzQsIDB4MDIsIDB4MTAsCisweDI4LCAweDQwLCAweDIzLCAweDAwLCAweDhELCAweDA2LCAweDA0LCAweDBBLCAweEQwLCAweDI4LCAweDQwLCAweDIwLCAweDAwLAorMHg4RCwgMHgwMCwgMHgzNCwgMHgwQSwgMHhEMCwgMHg4OCwgMHg0MCwgMHgyMywgMHgwMCwgMHg4OSwgMHgwMCwgMHgzNCwgMHgwMiwKKzB4RDAsIDB4MDgsIDB4NDAsIDB4MjMsIDB4MDAsIDB4OEQsIDB4MDAsIDB4MzQsIDB4MDIsIDB4RDAsIDB4MDgsIDB4NDAsIDB4NEIsCisweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweEE4LCAweDI1LCAweDAwLCAweDlELCAweDAwLAorMHg3NCwgMHgwMiwgMHhEMCwgMHg0OSwgMHg0MCwgMHgyNywgMHgwMCwgMHg5RCwgMHgwMCwgMHg3NCwgMHgwMiwgMHgxMCwgMHg2OSwKKzB4NDAsIDB4MjcsIDB4MDAsIDB4OUQsIDB4MDAsIDB4NDQsIDB4MDIsIDB4RDAsIDB4MEQsIDB4NDAsIDB4MjQsIDB4MDAsIDB4OUQsCisweDAwLCAweDc0LCAweDAyLCAweEQwLCAweDA5LCAweDQwLCAweDI3LCAweDAwLCAweDkxLCAweDgwLCAweDc0LCAweDgyLCAweEQwLAorMHg4OSwgMHg0MCwgMHgyNywgMHgwMCwgMHg5RCwgMHgwMCwgMHg3NCwgMHgwMiwgMHhEMCwgMHgwOSwgMHg0MCwgMHg2MywgMHgyMCwKKzB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4QTgsIDB4MjcsIDB4MDAsIDB4OUYsIDB4MDAsIDB4N0MsCisweDAyLCAweEYwLCAweDA5LCAweEMwLCAweEE3LCAweDE2LCAweDlGLCAweDAwLCAweDdDLCAweDAyLCAweDMwLCAweDM5LCAweEMwLAorMHgyNywgMHgwMCwgMHg5RiwgMHgwOCwgMHg0QywgMHgwNiwgMHhGMCwgMHgwOSwgMHhDMCwgMHgyNCwgMHgwMCwgMHg5RiwgMHgwMCwKKzB4N0MsIDB4MDIsIDB4RjAsIDB4MDksIDB4QzQsIDB4MjMsIDB4MDAsIDB4OUIsIDB4MDAsIDB4N0MsIDB4MDIsIDB4RjAsIDB4MTksCisweDQxLCAweDI3LCAweDIwLCAweDlELCAweDAwLCAweDdDLCAweDAyLCAweEYwLCAweDA5LCAweEMwLCAweDE3LCAweDgwLCAweDA0LAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHg4MCwgMHgyNSwgMHgwMCwgMHg5RiwgMHgwMCwgMHg3QywgMHgwMiwKKzB4RjAsIDB4MDksIDB4QzAsIDB4MjcsIDB4MDAsIDB4OUYsIDB4MDAsIDB4M0MsIDB4MDIsIDB4RjAsIDB4MTksIDB4QzAsIDB4MjcsCisweDAwLCAweDhGLCAweDAwLCAweDdELCAweDE2LCAweEYxLCAweDA4LCAweEMwLCAweDI3LCAweDAwLCAweDlGLCAweDAwLCAweDdDLAorMHgwMiwgMHhGMCwgMHgwOSwgMHhDQSwgMHgyNywgMHgwMSwgMHg5RiwgMHgwMCwgMHg3QywgMHgwMiwgMHhGMCwgMHgxOSwgMHhDMCwKKzB4MjcsIDB4MDAsIDB4OUYsIDB4MDAsIDB4NzQsIDB4MDIsIDB4RjAsIDB4MDksIDB4ODAsIDB4NUIsIDB4MjAsIDB4MDQsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDA4LCAweDA1LCAweDAwLCAweDFGLCAweDAwLCAweDdDLCAweDAwLCAweEYwLAorMHgyMSwgMHhDMCwgMHg4NywgMHgwMCwgMHgxRiwgMHgwMCwgMHg3QywgMHgwMCwgMHhGMCwgMHgwMSwgMHhDNCwgMHgwNywgMHgwMCwKKzB4MUYsIDB4MDIsIDB4N0MsIDB4MDAsIDB4RjAsIDB4MDEsIDB4QzAsIDB4MDcsIDB4ODAsIDB4MUYsIDB4MDAsIDB4N0MsIDB4MDAsCisweEYwLCAweDAxLCAweEMwLCAweDg3LCAweDA0LCAweDE3LCAweDAwLCAweDdDLCAweDQwLCAweEYyLCAweDIxLCAweEMwLCAweDA0LAorMHgwMCwgMHgxRiwgMHgwMCwgMHg3QywgMHgwMCwgMHhGMCwgMHgwMSwgMHhDMCwgMHg1MywgMHgyMCwgMHgwNCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4QTAsIDB4MTQsIDB4MDAsIDB4NUQsIDB4MDAsIDB4NzQsIDB4MDEsIDB4RDAsIDB4MjcsCisweDQwLCAweDE3LCAweDAwLCAweDVELCAweDAwLCAweEY0LCAweDE5LCAweEQwLCAweDA1LCAweDQwLCAweDE3LCAweDAwLCAweDVELAorMHgwMCwgMHg3NCwgMHgwMSwgMHhEMCwgMHhDNywgMHg0MCwgMHg5RiwgMHg4MywgMHg1RCwgMHgwMCwgMHg3NCwgMHgwMSwgMHhEMCwKKzB4MDUsIDB4NDAsIDB4NUYsIDB4MDEsIDB4NTEsIDB4MDAsIDB4RjQsIDB4MDEsIDB4NzAsIDB4MDUsIDB4NDAsIDB4MTQsIDB4MDAsCisweDVELCAweDAwLCAweDc0LCAweDAxLCAweEQwLCAweDA1LCAweDQwLCAweDQzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgxNCwgMHhBMCwgMHgzMiwgMHgwMCwgMHhDRCwgMHgwMCwgMHgzNCwgMHgwMywgMHhEMCwgMHgyQywgMHg0MSwKKzB4MzMsIDB4MDAsIDB4Q0QsIDB4MDAsIDB4MzQsIDB4NDcsIDB4RDAsIDB4MEMsIDB4NDAsIDB4MzMsIDB4MDAsIDB4Q0QsIDB4MDAsCisweDM0LCAweDAzLCAweEQwLCAweDJDLCAweDQwLCAweEYzLCAweDAwLCAweENELCAweDQwLCAweDM0LCAweDAzLCAweEQwLCAweDBDLAorMHg0MCwgMHg1MywgMHgwOCwgMHhDNSwgMHgwMCwgMHgzNCwgMHgwMCwgMHhEMCwgMHgwQywgMHg0MCwgMHgzMCwgMHgwMCwgMHhDRCwKKzB4MDAsIDB4MzQsIDB4MDMsIDB4RDAsIDB4MEMsIDB4NDAsIDB4NDMsIDB4MDAsIDB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDA1LCAweDgwLCAweDM4LCAweDAwLCAweEVELCAweDAwLCAweEI0LCAweDEzLCAweEQwLCAweDBFLCAweDQxLCAweDNCLAorMHgwMCwgMHhFRCwgMHgwMCwgMHhCNCwgMHgwMSwgMHhEMCwgMHgwRSwgMHg0MCwgMHgzQiwgMHgwMCwgMHhFRCwgMHgwNCwgMHhCNCwKKzB4MTMsIDB4RDAsIDB4MEUsIDB4NDAsIDB4M0IsIDB4MDAsIDB4RUQsIDB4MDAsIDB4QjQsIDB4MDMsIDB4RDAsIDB4MEUsIDB4NDAsCisweDFCLCAweDAwLCAweEUxLCAweDQwLCAweEI0LCAweDA5LCAweDUwLCAweDBGLCAweDQwLCAweDM4LCAweDAwLCAweEVELCAweDAwLAorMHhCNCwgMHgwMywgMHhEMCwgMHgwRSwgMHg0MiwgMHgxMywgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MTUsIDB4MTAsIDB4NzgsIDB4MDAsIDB4RUYsIDB4MDEsIDB4QkMsIDB4MTcsIDB4RjAsIDB4MUUsIDB4QzAsIDB4N0IsIDB4MDgsCisweEVGLCAweDAxLCAweEJDLCAweDA3LCAweEYwLCAweDFFLCAweEMyLCAweDdCLCAweDAwLCAweEVGLCAweDBELCAweEJDLCAweDM3LAorMHhGMCwgMHgxNiwgMHhDMCwgMHg3QiwgMHgwMCwgMHhFRCwgMHg0MSwgMHhCQywgMHgwNywgMHhGMCwgMHgxRSwgMHhDMCwgMHg1QiwKKzB4MDAsIDB4RTcsIDB4MDEsIDB4QkMsIDB4MDQsIDB4RjAsIDB4MEUsIDB4QzQsIDB4NzgsIDB4MDAsIDB4RUQsIDB4MDEsIDB4QkMsCisweDA3LCAweEYwLCAweDFFLCAweEMwLCAweDUzLCAweDYwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLAorMHhCOCwgMHgzNSwgMHgwMCwgMHhERiwgMHgwMCwgMHg3QywgMHg1MywgMHhGMCwgMHgwRCwgMHhDMCwgMHgzNywgMHgwMCwgMHhERiwKKzB4MDAsIDB4N0MsIDB4MDEsIDB4RjAsIDB4MEQsIDB4QzAsIDB4MzcsIDB4MDAsIDB4REYsIDB4MDgsIDB4N0MsIDB4MDMsIDB4RjAsCisweDA1LCAweEM0LCAweDE3LCAweDAwLCAweERGLCAweDAwLCAweDdDLCAweDAzLCAweEYwLCAweDBELCAweEM4LCAweDEzLCAweDEwLAorMHhERiwgMHgwMCwgMHg3QywgMHgwMSwgMHhGMCwgMHgwRCwgMHhDOCwgMHgzNywgMHgwOCwgMHhERiwgMHgwMCwgMHg3QywgMHgwMywKKzB4RjAsIDB4MEQsIDB4QzAsIDB4NDMsIDB4NjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4QTAsCisweDdGLCAweDAwLCAweEZGLCAweDAxLCAweEZDLCAweDYzLCAweEYwLCAweDE3LCAweEMwLCAweDdGLCAweDAwLCAweEZGLCAweDA5LAorMHhGQywgMHgyNywgMHhGMywgMHgxRiwgMHhDMCwgMHg3RiwgMHgwMCwgMHhGRiwgMHg4MSwgMHhGOCwgMHg0NywgMHgzMCwgMHgxRiwKKzB4NDgsIDB4NUYsIDB4MDIsIDB4RkUsIDB4MjEsIDB4RkMsIDB4MDcsIDB4RDAsIDB4OUYsIDB4ODAsIDB4NUQsIDB4MDAsIDB4RjMsCisweDA5LCAweEZDLCAweDI3LCAweEYwLCAweDFGLCAweEMwLCAweDdGLCAweDAyLCAweEZGLCAweDA5LCAweEZDLCAweDA3LCAweEYwLAorMHgxRiwgMHhDMCwgMHgxQiwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwgMHg4OCwgMHgzOSwKKzB4MDAsIDB4RUQsIDB4MDAsIDB4QjQsIDB4MDMsIDB4RDAsIDB4ODYsIDB4NDEsIDB4M0IsIDB4MDAsIDB4RUQsIDB4MDAsIDB4QjQsCisweDAxLCAweEMwLCAweDBFLCAweDQwLCAweDNCLCAweDAwLCAweEVELCAweDA4LCAweEI0LCAweDAzLCAweDE0LCAweDhFLCAweDQwLAorMHgxQSwgMHgwMCwgMHhFOSwgMHgwMCwgMHhCNCwgMHgwMywgMHhEMCwgMHgwRiwgMHg0MiwgMHgxQywgMHgwNSwgMHhFNSwgMHgwOCwKKzB4QjQsIDB4MDksIDB4RDAsIDB4MEUsIDB4NDAsIDB4M0IsIDB4MDAsIDB4RUQsIDB4MDAsIDB4QjQsIDB4MDMsIDB4RDAsIDB4OEUsCisweDQwLCAweDU3LCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDM5LCAweDAwLAorMHhFRCwgMHgwMCwgMHhCNCwgMHgyMywgMHg1OCwgMHgwNiwgMHg0MCwgMHgzQiwgMHgwNiwgMHhFRCwgMHg4MCwgMHhCMCwgMHgwMywKKzB4RDEsIDB4OEUsIDB4NDAsIDB4M0IsIDB4MDAsIDB4RUQsIDB4MDAsIDB4QjQsIDB4MDMsIDB4MTAsIDB4MEUsIDB4NDAsIDB4M0IsCisweDAwLCAweEVELCAweDAwLCAweEI0LCAweDAzLCAweEQwLCAweDBGLCAweDQ0LCAweDNELCAweDAwLCAweEU1LCAweDQwLCAweEI0LAorMHg4MSwgMHhEMCwgMHgwRSwgMHg0MCwgMHgzQiwgMHgyMCwgMHhFRCwgMHg0MCwgMHhCNCwgMHgyMywgMHhEMCwgMHgwRSwgMHg0MCwKKzB4MjMsIDB4MDEsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MjgsIDB4MzMsIDB4MDAsIDB4Q0QsCisweDAwLCAweDM0LCAweDAzLCAweEQwLCAweDAwLCAweDQwLCAweEIzLCAweDAwLCAweENELCAweDAwLCAweDc0LCAweDAwLCAweDkwLAorMHgxQywgMHg0MCwgMHgzNywgMHgxMCwgMHhDRCwgMHgwMiwgMHg3NCwgMHgyNywgMHgxMCwgMHgwOCwgMHgwOCwgMHgwMiwgMHgwMCwKKzB4QzksIDB4MDAsIDB4MzQsIDB4MDMsIDB4RDAsIDB4MEMsIDB4NDAsIDB4NzAsIDB4MDAsIDB4QzUsIDB4NDAsIDB4MzQsIDB4MDEsCisweEQxLCAweDBDLCAweDQwLCAweDMzLCAweDAwLCAweENDLCAweDAwLCAweDM0LCAweDAzLCAweEQwLCAweDBDLCAweDQwLCAweDBCLAorMHgyMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwgMHhBOCwgMHgzNSwgMHgwMCwgMHhERiwgMHgwMCwKKzB4RkMsIDB4MDMsIDB4NzAsIDB4MTksIDB4QzAsIDB4NzcsIDB4MDAsIDB4REYsIDB4MDAsIDB4N0MsIDB4MDIsIDB4RjAsIDB4MkQsCisweEMzLCAweDM3LCAweDAwLCAweEZGLCAweDQ0LCAweEZDLCAweDAzLCAweDMxLCAweDA5LCAweDgwLCAweDI3LCAweDEwLCAweERFLAorMHgwMCwgMHg3QywgMHgwMywgMHhGMCwgMHgwRCwgMHhDMCwgMHg0NSwgMHgwMCwgMHhENywgMHg0MCwgMHg3OCwgMHgwMSwgMHhEMCwKKzB4MEQsIDB4QzEsIDB4MzcsIDB4MTAsIDB4REQsIDB4MDAsIDB4N0MsIDB4MDMsIDB4RjAsIDB4MEQsIDB4QzAsIDB4NTcsIDB4MDAsCisweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDM3LCAweDIwLCAweERGLCAweDAwLCAweDdDLAorMHgwMywgMHhGMCwgMHg0OSwgMHhDNCwgMHgzNywgMHgwNCwgMHhERiwgMHgyMCwgMHg3QywgMHgwQSwgMHhGMCwgMHgwRCwgMHhDOCwKKzB4MzcsIDB4MTAsIDB4REYsIDB4MTAsIDB4N0MsIDB4NDMsIDB4RjAsIDB4MjksIDB4QzQsIDB4MjYsIDB4MjAsIDB4REIsIDB4ODAsCisweDdDLCAweDAzLCAweEYyLCAweDBELCAweEMwLCAweDg3LCAweDA0LCAweERFLCAweDAwLCAweDdDLCAweDA5LCAweEYxLCAweDRELAorMHhDMCwgMHgzNywgMHgxMCwgMHhERiwgMHgwMCwgMHg3QywgMHgwMywgMHhGMCwgMHgwRCwgMHhDMCwgMHgzNywgMHgyMCwgMHgwQywKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDgsIDB4M0YsIDB4MDAsIDB4RkYsIDB4MDAsIDB4RkMsIDB4MDMsCisweEYwLCAweDAzLCAweEMwLCAweDNCLCAweDAwLCAweEYzLCAweDAwLCAweEZDLCAweDAwLCAweDMwLCAweDBGLCAweEMxLCAweDNGLAorMHgwOCwgMHhGMywgMHgwMCwgMHg3QywgMHgwMywgMHgzMCwgMHgwMywgMHhDMCwgMHgyRiwgMHgwMCwgMHhGRiwgMHgwMCwgMHhCQywKKzB4MDMsIDB4MzQsIDB4MEYsIDB4QzAsIDB4NUYsIDB4MDIsIDB4RkYsIDB4MDAsIDB4RkMsIDB4MDUsIDB4RDAsIDB4MEYsIDB4QzQsCisweDNELCAweDAwLCAweEZGLCAweDAwLCAweEJDLCAweDAzLCAweDMwLCAweDBGLCAweEM0LCAweDA3LCAweDIwLCAweDBDLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MSwgMHgyMCwgMHgzNiwgMHgwMCwgMHhERCwgMHgwMCwgMHg3NCwgMHgwMywgMHhEMCwKKzB4NzksIDB4NDgsIDB4MzcsIDB4MzAsIDB4RDEsIDB4MDAsIDB4NzQsIDB4MUMsIDB4MTAsIDB4MEQsIDB4NDAsIDB4MzcsIDB4MDAsCisweEQxLCAweDAwLCAweDc0LCAweDAzLCAweDEwLCAweDMxLCAweDQwLCAweDY3LCAweDA0LCAweERELCAweDAwLCAweDc0LCAweDAzLAorMHgxMCwgMHgwRCwgMHg0MCwgMHgxNywgMHgwMSwgMHhERCwgMHg0MCwgMHg3NCwgMHg4RCwgMHhEMCwgMHgwQywgMHg0OCwgMHgzNCwKKzB4MDAsIDB4REQsIDB4MDAsIDB4NzQsIDB4MDMsIDB4MTAsIDB4MEQsIDB4NDgsIDB4ODcsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAxLCAweEEwLCAweDM0LCAweDAwLCAweERELCAweDAwLCAweDc0LCAweDAzLCAweEQwLCAweDE5LAorMHg0MCwgMHgzNywgMHgwMCwgMHhEMSwgMHgwMCwgMHg3NCwgMHgwNiwgMHgxMCwgMHgwRCwgMHg0MCwgMHgzNywgMHg0MCwgMHhEMSwKKzB4MDAsIDB4NzQsIDB4MDMsIDB4MTAsIDB4MTEsIDB4NDgsIDB4NDcsIDB4MjAsIDB4REQsIDB4MDAsIDB4NzQsIDB4MDMsIDB4OTAsCisweDBELCAweDQwLCAweDE3LCAweDAwLCAweERDLCAweDAwLCAweDc0LCAweDExLCAweEQwLCAweDBELCAweDQyLCAweDM1LCAweDAwLAorMHhERCwgMHg0MCwgMHg3NCwgMHgwMywgMHgxMCwgMHgwRCwgMHg0MCwgMHgwNywgMHgwMCwgMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MTAsIDB4MjAsIDB4MzAsIDB4MDAsIDB4Q0QsIDB4MDAsIDB4MzQsIDB4MDMsIDB4RDIsIDB4MDgsIDB4NDAsCisweDMzLCAweDAwLCAweEMxLCAweDgwLCAweDM0LCAweDAyLCAweDE1LCAweDBDLCAweDQwLCAweDM3LCAweDIwLCAweEMxLCAweEMwLAorMHgzNCwgMHgwMywgMHgxNCwgMHgwOCwgMHg0NCwgMHgwMywgMHgwMCwgMHhDRCwgMHgwMCwgMHgzNCwgMHgwMywgMHg5MCwgMHgwQywKKzB4NDAsIDB4MTMsIDB4MDAsIDB4Q0QsIDB4MDAsIDB4MzQsIDB4MDEsIDB4RDAsIDB4MEQsIDB4NDQsIDB4MzAsIDB4MDAsIDB4Q0QsCisweDAwLCAweDM0LCAweDAzLCAweDEwLCAweDBDLCAweDQ4LCAweDQzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHhCMCwgMHgzNiwgMHgwMCwgMHhERiwgMHgwMCwgMHhGQywgMHgwMywgMHhGMCwgMHgwMSwgMHhDNCwgMHgzNywKKzB4NDAsIDB4RDMsIDB4MDAsIDB4N0MsIDB4MDIsIDB4MzAsIDB4MEQsIDB4QzAsIDB4MzcsIDB4MDAsIDB4RjMsIDB4MDAsIDB4RkMsCisweDAzLCAweDMwLCAweDAxLCAweEMwLCAweDI3LCAweDAwLCAweERGLCAweDAwLCAweDdDLCAweDAzLCAweEIwLCAweDBELCAweEMwLAorMHgxNywgMHgwMCwgMHhERiwgMHgwMCwgMHg3QywgMHgwMSwgMHhGOCwgMHgwRCwgMHhDMCwgMHgzNSwgMHg4MCwgMHhERiwgMHgwMCwKKzB4N0MsIDB4MDMsIDB4MzAsIDB4MEQsIDB4QzAsIDB4MDcsIDB4NjAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDA1LCAweEI4LCAweDNGLCAweDAwLCAweEZGLCAweDAwLCAweEZDLCAweDAzLCAweEYwLCAweDBCLCAweDQwLCAweDNGLCAweDIwLAorMHhGRiwgMHhDMCwgMHhGQywgMHgwMiwgMHhGMCwgMHgwRiwgMHhDMCwgMHgzRiwgMHgwMCwgMHhGRiwgMHgwMCwgMHhGQywgMHg4MywKKzB4RjAsIDB4MEIsIDB4QzAsIDB4MkYsIDB4MDAsIDB4RkYsIDB4MDAsIDB4RjgsIDB4MDMsIDB4NzAsIDB4MEYsIDB4QzAsIDB4MUYsCisweDAwLCAweEZGLCAweDAwLCAweEZDLCAweDAxLCAweEYwLCAweDBGLCAweEMwLCAweDNGLCAweDAwLCAweEZGLCAweDIwLCAweEZDLAorMHgwMywgMHhGMiwgMHgwRiwgMHhDMCwgMHgxNywgMHg2MSwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywKKzB4QTAsIDB4N0YsIDB4MDAsIDB4QjMsIDB4MDIsIDB4Q0QsIDB4MjcsIDB4MzAsIDB4MEIsIDB4QzAsIDB4MEMsIDB4MDUsIDB4M0YsCisweDA0LCAweEZDLCAweDA3LCAweDMwLCAweDQ3LCAweEM4LCAweDNGLCAweDA1LCAweEZGLCAweDA0LCAweEJDLCAweEQzLCAweDMwLAorMHg5QiwgMHhDMCwgMHgyQywgMHgwMSwgMHgyMywgMHg4OSwgMHhDQywgMHgxMiwgMHhGMCwgMHgwMywgMHhDOCwgMHgyQywgMHgwMiwKKzB4MzMsIDB4MDQsIDB4RkMsIDB4MDcsIDB4RjAsIDB4MEYsIDB4QzAsIDB4N0MsIDB4MTgsIDB4QjMsIDB4MDAsIDB4Q0MsIDB4MDQsCisweEYwLCAweDFGLCAweEMwLCAweDBGLCAweDAwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDA4LAorMHgzNywgMHgxMSwgMHg5MSwgMHgwMiwgMHg0NCwgMHgwMywgMHgxMCwgMHgxQiwgMHg1MCwgMHg4NCwgMHgxMCwgMHgxRCwgMHgwQiwKKzB4NzQsIDB4MDcsIDB4MTQsIDB4QkQsIDB4NDAsIDB4RjcsIDB4MDAsIDB4RkQsIDB4NDksIDB4RjQsIDB4MEYsIDB4MTIsIDB4NDgsCisweDUwLCAweEZDLCAweDQwLCAweDExLCAweDg0LCAweDQ0LCAweDRBLCAweEQwLCAweDMxLCAweDQ0LCAweEFDLCAweDIzLCAweDEzLAorMHgwQSwgMHg3NCwgMHgwMywgMHhEMSwgMHgwNCwgMHg0MCwgMHgzNCwgMHgwMCwgMHhEMSwgMHgwMywgMHg0NSwgMHgwNSwgMHhEMCwKKzB4MUQsIDB4NDAsIDB4MDcsIDB4MjAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTEsIDB4QTAsIDB4MzMsCisweDA0LCAweDkxLCAweDhDLCAweDM0LCAweDEzLCAweDE0LCAweDA4LCAweDQwLCAweDIwLCAweDAwLCAweDBELCAweDAwLCAweDM0LAorMHgwMywgMHgxMCwgMHgwQywgMHg0MCwgMHgyMywgMHgwMCwgMHhDRCwgMHgwMCwgMHgzNCwgMHgwMywgMHgxMCwgMHgwOCwgMHg0MCwKKzB4QTAsIDB4MDAsIDB4MDUsIDB4MDAsIDB4MDQsIDB4MEEsIDB4RDIsIDB4MjEsIDB4NDAsIDB4MjAsIDB4NDEsIDB4ODEsIDB4MDAsCisweDM0LCAweDAzLCAweEQ4LCAweDA4LCAweDYwLCAweDMyLCAweDEwLCAweEMxLCAweDgyLCAweDA0LCAweDAwLCAweEQwLCAweDBDLAorMHg0MCwgMHg0NywgMHg4MCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHhBOCwgMHgzNSwgMHg0MCwKKzB4OTEsIDB4MDEsIDB4NjQsIDB4MDMsIDB4MTAsIDB4ODksIDB4NDAsIDB4NjQsIDB4MDAsIDB4MUMsIDB4MTEsIDB4NzQsIDB4MDMsCisweDEwLCAweDFELCAweDQwLCAweDM3LCAweDAwLCAweERELCAweDAwLCAweDc0LCAweDAzLCAweDE0LCAweDA5LCAweDQwLCAweDM0LAorMHgwMCwgMHgxNSwgMHgwMSwgMHg0NSwgMHg0MiwgMHhEMCwgMHg0OSwgMHg0MCwgMHgyMCwgMHhDMiwgMHg5MSwgMHgwMywgMHg3NCwKKzB4MDMsIDB4RDAsIDB4MEQsIDB4NTAsIDB4MzYsIDB4NDAsIDB4RDEsIDB4MDEsIDB4NDYsIDB4MDcsIDB4RDAsIDB4MEQsIDB4NDAsCisweDBGLCAweDIwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweEE4LCAweDM3LCAweDAwLCAweDgzLAorMHgwMSwgMHg2QywgMHgwMywgMHgzMCwgMHgwOCwgMHhDMCwgMHg0NCwgMHgyMCwgMHgxRSwgMHgwMSwgMHg3QywgMHgwMywgMHgzMCwKKzB4M0QsIDB4QzAsIDB4MzcsIDB4MDAsIDB4REYsIDB4QzAsIDB4N0MsIDB4MDMsIDB4MzAsIDB4OTksIDB4QzAsIDB4MjQsIDB4MDIsCisweDE3LCAweDgxLCAweDRDLCAweDAyLCAweEYxLCAweDAwLCAweEQwLCAweDI0LCAweDAwLCAweDEzLCAweDAxLCAweDdDLCAweDAzLAorMHhGMCwgMHgwRCwgMHhFMCwgMHgzNiwgMHgwMCwgMHg5MywgMHgwMSwgMHg0QywgMHgwNCwgMHhGMiwgMHgwRCwgMHhDMiwgMHgwQiwKKzB4MjAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4ODAsIDB4M0QsIDB4MDAsIDB4QkYsIDB4MDAsCisweERDLCAweDAzLCAweEYwLCAweDE5LCAweEMwLCAweDBGLCAweDEwLCAweDNGLCAweDAwLCAweEY0LCAweDAzLCAweEYxLCAweDBELAorMHhDMCwgMHg3RiwgMHgxMiwgMHhGRiwgMHgxMCwgMHhCQywgMHgwMywgMHhDMCwgMHgwQiwgMHhDMCwgMHg3RiwgMHgyMCwgMHgzQiwKKzB4MDAsIDB4RjgsIDB4MjYsIDB4RTEsIDB4MDMsIDB4QzAsIDB4MjcsIDB4MDAsIDB4MTQsIDB4MDAsIDB4RkMsIDB4MDMsIDB4RjAsCisweDVGLCAweEMwLCAweEJELCAweDAwLCAweEVGLCAweDAwLCAweEZDLCAweDgxLCAweEYxLCAweDBGLCAweEMwLCAweDFGLCAweDAwLAorMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHgwOCwgMHgzNSwgMHgwMCwgMHg5MywgMHgwNCwgMHg0QywKKzB4MTMsIDB4RjAsIDB4MDksIDB4QzQsIDB4MjQsIDB4MDAsIDB4MTMsIDB4MDIsIDB4N0MsIDB4MDMsIDB4RjAsIDB4MEQsIDB4QzAsCisweDI0LCAweDAwLCAweERGLCAweDQwLCAweDRDLCAweDAzLCAweEIwLCAweDA5LCAweEM4LCAweDIwLCAweDQwLCAweDEzLCAweDAyLAorMHg2QywgMHgwRSwgMHhCMCwgMHgwMywgMHhDMCwgMHgzNywgMHgwMCwgMHg5MywgMHgwNiwgMHg2QywgMHgwMywgMHhEMCwgMHgwOCwKKzB4QzAsIDB4MzQsIDB4ODAsIDB4NUYsIDB4MDAsIDB4N0MsIDB4MDAsIDB4MzAsIDB4MEQsIDB4QzAsIDB4MEIsIDB4MjAsIDB4MDQsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEzLCAweEEwLCAweDMwLCAweDAwLCAweDkxLCAweDAwLCAweDQ0LCAweDBCLAorMHhEMCwgMHgwOSwgMHg1MCwgMHg2NCwgMHgwOCwgMHg5MSwgMHgwMCwgMHgzNCwgMHgyQiwgMHhEMCwgMHgwRCwgMHg0MCwgMHhCNCwKKzB4MDIsIDB4RkQsIDB4MDYsIDB4QzUsIDB4NkYsIDB4MTAsIDB4NDksIDB4NTQsIDB4QjQsIDB4MDMsIDB4MTAsIDB4MjQsIDB4NDQsCisweDA2LCAweDEwLCAweEI5LCAweDQ1LCAweDM3LCAweDAwLCAweDkxLCAweDgzLCAweDQ0LCAweDAzLCAweEQxLCAweEFELCAweDQwLAorMHhCNCwgMHgwMiwgMHhERCwgMHgwMCwgMHg3NCwgMHg0NywgMHgxMCwgMHgxRCwgMHg0MywgMHg0RiwgMHgwMCwgMHgwMiwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4QTAsIDB4NzIsIDB4MDAsIDB4QzEsIDB4MDIsIDB4NDQsIDB4OEIsIDB4RDAsCisweDY4LCAweDQwLCAweDYwLCAweDAwLCAweDA1LCAweDAwLCAweDM0LCAweDAzLCAweEQwLCAweDA4LCAweDQwLCAweDEyLCAweDIwLAorMHhDRCwgMHgwMiwgMHgwNCwgMHgwMywgMHg5MCwgMHgwOSwgMHg0OCwgMHhGMCwgMHgxMCwgMHgxMSwgMHgyMCwgMHgwNCwgMHg0QSwKKzB4OTIsIDB4MTAsIDB4NDAsIDB4MjMsIDB4MjAsIDB4MDksIDB4MDAsIDB4MjQsIDB4MDMsIDB4RDAsIDB4MEMsIDB4NDAsIDB4MzYsCisweDEwLCAweEM1LCAweDA4LCAweDM0LCAweDA0LCAweDEwLCAweDBDLCAweDQwLCAweDFGLCAweDAwLCAweDBBLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHg4MCwgMHg3OCwgMHg0MCwgMHhFMSwgMHgwMSwgMHg4NCwgMHgwNywgMHhEMCwgMHg5RSwKKzB4NDAsIDB4NjgsIDB4MDQsIDB4MjUsIDB4MDEsIDB4QjQsIDB4MDcsIDB4RDEsIDB4MUEsIDB4NTAsIDB4NTgsIDB4MDAsIDB4Q0QsCisweDg5LCAweDg0LCAweDA3LCAweDEwLCAweDlBLCAweDQwLCAweDc4LCAweDAwLCAweDMxLCAweDI5LCAweDg1LCAweDA0LCAweDEwLAorMHgxMiwgMHg0MCwgMHg2QiwgMHgwOCwgMHhBOSwgMHgwMSwgMHg4NCwgMHgwNywgMHhEMCwgMHgxNiwgMHg1MCwgMHg3QSwgMHg4MCwKKzB4RUQsIDB4NDEsIDB4QjQsIDB4MDUsIDB4MTAsIDB4MUUsIDB4NDAsIDB4MTMsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDEyLCAweDEwLCAweDMwLCAweDA0LCAweDUzLCAweDAwLCAweDBFLCAweDAzLCAweEYwLCAweDA4LCAweEQwLAorMHhBNCwgMHg0MCwgMHgwNywgMHgwOCwgMHgzQywgMHgwMywgMHhGMCwgMHgwQywgMHhDMCwgMHgzMCwgMHgwMiwgMHhDRiwgMHgwMCwKKzB4MEMsIDB4MDMsIDB4QjAsIDB4MDgsIDB4QzAsIDB4MzAsIDB4MDAsIDB4MDMsIDB4NEEsIDB4NkMsIDB4MDIsIDB4QjAsIDB4MDAsCisweEMwLCAweDMzLCAweDQxLCAweENCLCAweDEwLCAweDJDLCAweDIzLCAweEYwLCAweDBDLCAweEQwLCAweDMyLCAweDAyLCAweENGLAorMHgwMCwgMHgzQywgMHgwMCwgMHgzNCwgMHgwQywgMHhDMCwgMHg0QiwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDIsIDB4QjgsIDB4MzksIDB4MDAsIDB4RkYsIDB4MDAsIDB4RkQsIDB4MDMsIDB4RjAsIDB4MEIsIDB4QzAsIDB4MkYsCisweDEwLCAweDdCLCAweDAwLCAweEZDLCAweDAzLCAweEY4LCAweDBGLCAweEMwLCAweDNGLCAweDAwLCAweEZGLCAweDAwLCAweEZDLAorMHgwMywgMHhGMCwgMHgwQiwgMHhDNCwgMHgzQiwgMHgwMCwgMHgzRiwgMHgyOCwgMHhGQywgMHgwMCwgMHhGMCwgMHgwRiwgMHhDMCwKKzB4M0YsIDB4MDAsIDB4RjcsIDB4MDAsIDB4RkMsIDB4ODMsIDB4RjAsIDB4MEYsIDB4RDAsIDB4M0QsIDB4MDAsIDB4RkYsIDB4MDgsCisweEJDLCAweDAzLCAweEYwLCAweDBGLCAweEMwLCAweDBCLCAweDYwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgxNSwgMHhBMCwgMHgzNywgMHgwMCwgMHg5RiwgMHgwMCwgMHg3QywgMHgwMywgMHhGMCwgMHg0OSwgMHhEMCwgMHgyQywgMHgwMCwKKzB4MzMsIDB4MDAsIDB4N0MsIDB4MDMsIDB4RjAsIDB4MEQsIDB4QzgsIDB4MzcsIDB4MDAsIDB4REYsIDB4MDQsIDB4NUMsIDB4NEYsCisweDMwLCAweDA5LCAweEMwLCAweEI1LCAweDAwLCAweDEzLCAweDAwLCAweDZDLCAweDAyLCAweEYyLCAweDAxLCAweEMwLCAweEE3LAorMHgwMSwgMHhEMywgMHgwMCwgMHg1QywgMHgwMywgMHhGMCwgMHgwRCwgMHhDMCwgMHgzNywgMHgwMCwgMHhERiwgMHgwMCwgMHg3QywKKzB4MDAsIDB4RjAsIDB4MEQsIDB4QzAsIDB4NTcsIDB4MDAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsCisweDg4LCAweDM5LCAweDAwLCAweEFELCAweDQwLCAweEI0LCAweDAzLCAweEQwLCAweDhDLCAweDQ0LCAweDI4LCAweDAwLCAweDJCLAorMHgwMCwgMHhCNCwgMHgwMywgMHhEMCwgMHgwRSwgMHg0MCwgMHgzQiwgMHgwMCwgMHhDRCwgMHgwRSwgMHgwNCwgMHgwMywgMHgxMCwKKzB4MEUsIDB4NDAsIDB4MzAsIDB4MDIsIDB4NjEsIDB4MDAsIDB4ODYsIDB4MDAsIDB4RDAsIDB4MDIsIDB4NDQsIDB4MjMsIDB4MDQsCisweEYxLCAweDAwLCAweDg0LCAweDAzLCAweEQwLCAweDBFLCAweDQwLCAweDNCLCAweDEwLCAweEVELCAweDAwLCAweEI0LCAweDAxLAorMHhEMCwgMHgwRSwgMHg0MCwgMHg0QiwgMHgyMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHgwMCwKKzB4NzksIDB4MDAsIDB4QUQsIDB4MDEsIDB4QjQsIDB4MDcsIDB4RDAsIDB4MUEsIDB4NDAsIDB4NjAsIDB4MDAsIDB4QTEsIDB4NDEsCisweEI0LCAweDA3LCAweEQwLCAweDFFLCAweDQwLCAweDdCLCAweDAwLCAweEVELCAweDA1LCAweDk0LCAweDM3LCAweDEwLCAweDNCLAorMHg0MCwgMHg3OSwgMHgwOCwgMHgyOSwgMHgxMSwgMHg4NCwgMHgwNiwgMHhEMCwgMHgxMiwgMHg0MCwgMHhGQiwgMHgwMCwgMHhFMSwKKzB4ODEsIDB4OTQsIDB4ODcsIDB4RDAsIDB4MUUsIDB4NDAsIDB4N0IsIDB4MDAsIDB4RUQsIDB4MDEsIDB4QjQsIDB4MDUsIDB4RDAsCisweDFFLCAweDQwLCAweDBGLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDI4LCAweDMzLAorMHgxMCwgMHg4RCwgMHgwOSwgMHgzNCwgMHgwMywgMHhEMCwgMHg5QywgMHg1MCwgMHg3MCwgMHgwMCwgMHhDOSwgMHgwNiwgMHgzNCwKKzB4MDMsIDB4RDAsIDB4M0MsIDB4NDAsIDB4QjMsIDB4MDQsIDB4Q0QsIDB4MDAsIDB4MDQsIDB4MDMsIDB4MTQsIDB4MUMsIDB4NDAsCisweDMwLCAweEMwLCAweDk5LCAweDA2LCAweDA1LCAweDAxLCAweEQxLCAweDBDLCAweDQ0LCAweDczLCAweDIwLCAweEMxLCAweDAzLAorMHgwNCwgMHgwMywgMHhEMSwgMHgwRCwgMHg0MSwgMHg2MywgMHgwMCwgMHhDRCwgMHgwNiwgMHgzNCwgMHgwNywgMHhEMCwgMHgwQywKKzB4NDAsIDB4NEIsIDB4MjAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTcsIDB4QTgsIDB4MTUsIDB4MDAsCisweDdGLCAweDAyLCAweDdDLCAweDAxLCAweEYwLCAweDA0LCAweEMwLCAweDU4LCAweDAxLCAweDczLCAweDAyLCAweDdDLCAweDAxLAorMHhGMCwgMHgxNiwgMHhDMCwgMHg5RiwgMHgxMCwgMHg1RiwgMHgwMCwgMHg1QywgMHgwMSwgMHgzMCwgMHgwNCwgMHhDNCwgMHgxNSwKKzB4MDAsIDB4N0IsIDB4MDAsIDB4Q0MsIDB4NDUsIDB4RjEsIDB4MDcsIDB4QzAsIDB4MTcsIDB4NDgsIDB4NzMsIDB4MDUsIDB4NUMsCisweDAxLCAweEYwLCAweDI3LCAweEMwLCAweDU3LCAweDAwLCAweDdGLCAweDAyLCAweEZDLCAweDA1LCAweEYwLCAweDA1LCAweEMwLAorMHg1RiwgMHgyMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHgwMCwgMHgwNywgMHgwMCwgMHgxRiwKKzB4MDAsIDB4N0MsIDB4MDAsIDB4RjAsIDB4MDEsIDB4RDAsIDB4MDcsIDB4MTAsIDB4MUYsIDB4MDAsIDB4N0MsIDB4MDAsIDB4RjAsCisweDgxLCAweEMwLCAweDA3LCAweDAwLCAweDFGLCAweDAwLCAweDdDLCAweDA4LCAweEYwLCAweDAxLCAweEMwLCAweDA3LCAweDAwLAorMHgxNywgMHgwMCwgMHg1QywgMHgwMCwgMHhGMCwgMHgwMSwgMHhDMCwgMHgwNywgMHgwMCwgMHgxRiwgMHgxMCwgMHg3QywgMHgwMCwKKzB4RjAsIDB4MDEsIDB4QzAsIDB4MDcsIDB4MTIsIDB4MUYsIDB4MDAsIDB4N0MsIDB4MjAsIDB4RjAsIDB4MDEsIDB4QzAsIDB4NEIsCisweDAwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDI3LCAweDAwLCAweDkzLCAweDExLAorMHg0QywgMHgyMiwgMHhGMCwgMHgwOSwgMHhDMCwgMHg2NCwgMHgwMCwgMHg5MywgMHgwMiwgMHg3QywgMHgwMiwgMHhGMCwgMHgwOSwKKzB4QzEsIDB4MjAsIDB4MDAsIDB4ODMsIDB4MDAsIDB4NkQsIDB4MEUsIDB4RjAsIDB4NTksIDB4QzAsIDB4MjAsIDB4MDAsIDB4OTEsCisweDQwLCAweDRDLCAweDAyLCAweDEwLCAweDg5LCAweEMwLCAweDI0LCAweDAwLCAweDgzLCAweDA4LCAweDRDLCAweDAyLCAweEYwLAorMHgxOSwgMHhDMCwgMHg2NCwgMHgwMSwgMHg5MCwgMHgwMCwgMHg3QywgMHgwMiwgMHgzMCwgMHgxOSwgMHhDMCwgMHg0MywgMHgyMCwKKzB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MjAsIDB4QTYsIDB4MDIsIDB4OTEsIDB4MDEsIDB4NDQsCisweDA2LCAweEQwLCAweDM5LCAweDQxLCAweDY0LCAweDEwLCAweDkxLCAweDAwLCAweDc0LCAweDAyLCAweEQwLCAweDA5LCAweDUwLAorMHgyNCwgMHg0MCwgMHg5MSwgMHg0MCwgMHg0NCwgMHgwMiwgMHhEMCwgMHgxOSwgMHg0NCwgMHhFNCwgMHg0MCwgMHg5MSwgMHgwMSwKKzB4MDQsIDB4MDIsIDB4MTUsIDB4MDgsIDB4NDAsIDB4MjAsIDB4MDAsIDB4OUIsIDB4MDMsIDB4NDQsIDB4MDIsIDB4RDAsIDB4MTksCisweDQwLCAweDIwLCAweDIwLCAweDkxLCAweDA5LCAweDM0LCAweDAyLCAweDEwLCAweDE5LCAweDQwLCAweDA3LCAweDAwLCAweDA4LAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHhBMCwgMHgyMCwgMHg0NCwgMHhDMSwgMHgwNCwgMHg0NSwgMHgwMiwKKzB4RDAsIDB4NDksIDB4NDAsIDB4MjQsIDB4MDEsIDB4OTEsIDB4MDAsIDB4NzQsIDB4MDIsIDB4RDAsIDB4MEQsIDB4NTAsIDB4MzQsCisweDEwLCAweDk5LCAweDAwLCAweDY1LCAweDAyLCAweEMwLCAweDA5LCAweDQwLCAweDI0LCAweDAxLCAweDk1LCAweDA0LCAweDQ0LAorMHgxMiwgMHg1MSwgMHgyOSwgMHg1MCwgMHgyNCwgMHgyMCwgMHg5MSwgMHgwMCwgMHg0NCwgMHgwMiwgMHhEMCwgMHg0OSwgMHg1MCwKKzB4MjQsIDB4NDAsIDB4REQsIDB4ODAsIDB4NzQsIDB4MTIsIDB4MTAsIDB4ODksIDB4NDAsIDB4NjMsIDB4MDAsIDB4MDIsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDIwLCAweDIwLCAweDAwLCAweDgxLCAweDA0LCAweDA0LCAweDAyLCAweEQwLAorMHg0OCwgMHg0MCwgMHgyMCwgMHgwMSwgMHg4MSwgMHgwNCwgMHgzNCwgMHgwMiwgMHhEMCwgMHg0OSwgMHg0MCwgMHgyMCwgMHgwMSwKKzB4ODksIDB4MDQsIDB4MDQsIDB4MTMsIDB4RDAsIDB4MDgsIDB4NDAsIDB4NjAsIDB4ODEsIDB4ODUsIDB4MjAsIDB4NDYsIDB4MTIsCisweDUwLCAweDQ4LCAweDQwLCAweDI0LCAweDAxLCAweEM5LCAweDA0LCAweDA0LCAweDAyLCAweEQwLCAweDQ4LCAweDQwLCAweDI0LAorMHgwMCwgMHg4RCwgMHgwNCwgMHg3NCwgMHgwMiwgMHgxNCwgMHgwOCwgMHg0MCwgMHg0MywgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MUQsIDB4QjAsIDB4ODYsIDB4MDIsIDB4MTMsIDB4MEEsIDB4NEMsIDB4MjksIDB4RjAsIDB4MDEsCisweEMwLCAweDg0LCAweDAyLCAweDEzLCAweDAwLCAweDdDLCAweDAwLCAweEYwLCAweDAxLCAweEMwLCAweDA0LCAweDAwLCAweDFCLAorMHgwMCwgMHg2QywgMHgwMCwgMHhEMiwgMHhBMSwgMHhDMCwgMHgwNCwgMHgyMCwgMHgwNywgMHgyQSwgMHg0QywgMHgyOCwgMHg3MCwKKzB4MDEsIDB4RDAsIDB4ODQsIDB4NDIsIDB4MTMsIDB4MEEsIDB4NEQsIDB4MjgsIDB4RjAsIDB4QTEsIDB4QzAsIDB4ODQsIDB4MDIsCisweDFGLCAweDAwLCAweDdDLCAweDAwLCAweDMwLCAweDAxLCAweEMwLCAweDc3LCAweEMwLCAweDBBLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgxOSwgMHhCOCwgMHgyNywgMHgwMCwgMHhCRiwgMHgwOCwgMHg3QywgMHgwMiwgMHhGMCwgMHg4QiwgMHhEMCwKKzB4MkYsIDB4NDIsIDB4QkYsIDB4MDgsIDB4N0MsIDB4MDIsIDB4RjAsIDB4OEIsIDB4RDAsIDB4MkYsIDB4MDIsIDB4OTcsIDB4MDgsCisweDdDLCAweDIyLCAweEYwLCAweDBBLCAweEQwLCAweDJGLCAweDIyLCAweEJCLCAweDAwLCAweEZELCAweDIyLCAweEIwLCAweDhCLAorMHhEMCwgMHgyRiwgMHgwMiwgMHhCRiwgMHgwOCwgMHg3QywgMHgwMiwgMHhGMCwgMHg4QiwgMHhDMCwgMHgyRiwgMHgxMCwgMHhCMywKKzB4MDgsIDB4RkMsIDB4MDIsIDB4RjAsIDB4MDksIDB4QzAsIDB4NjcsIDB4NjAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDE4LCAweEEwLCAweDJGLCAweDAwLCAweEI3LCAweDBDLCAweENDLCAweDAyLCAweEYwLCAweDBCLCAweEMwLCAweDJDLAorMHgwMiwgMHhCMywgMHgwNCwgMHgzQywgMHgwMiwgMHhGMCwgMHg0OSwgMHhDMCwgMHgyNCwgMHgwMCwgMHg5RiwgMHgwMSwgMHhDQywKKzB4MTYsIDB4MzAsIDB4MEEsIDB4QzAsIDB4NkMsIDB4MjgsIDB4QkYsIDB4MDAsIDB4Q0MsIDB4MUUsIDB4MzAsIDB4NUIsIDB4QzAsCisweDZGLCAweDQxLCAweEIzLCAweDA1LCAweENDLCAweDAyLCAweEYwLCAweENCLCAweEMwLCAweDJDLCAweDAwLCAweEIzLCAweDAwLAorMHhGQywgMHgwMiwgMHhGMCwgMHgwQiwgMHhDMCwgMHg2MCwgMHgwMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MUMsIDB4MDgsIDB4MDcsIDB4MDEsIDB4MTEsIDB4MEMsIDB4NkMsIDB4NDAsIDB4RDAsIDB4MDEsIDB4NDAsIDB4MDQsIDB4MDIsCisweDExLCAweDAwLCAweDc0LCAweDAwLCAweEQwLCAweDgxLCAweDQwLCAweDg0LCAweDEwLCAweDNELCAweDAyLCAweDQ1LCAweDA4LAorMHhCMCwgMHg1MSwgMHg0MCwgMHgwNCwgMHgwMCwgMHgxRCwgMHgxNSwgMHg0NSwgMHgxNCwgMHgxMCwgMHgwMSwgMHg0MCwgMHhDMywKKzB4MTUsIDB4MTEsIDB4MTQsIDB4NDQsIDB4MTAsIDB4RDEsIDB4QzEsIDB4NDAsIDB4MDQsIDB4MDQsIDB4MTEsIDB4MDAsIDB4NzQsCisweDAwLCAweEQwLCAweDAxLCAweDQwLCAweDcwLCAweDIwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLAorMHhBMCwgMHgyMywgMHgwNSwgMHg4NSwgMHgwNCwgMHgwNCwgMHgxMiwgMHhEMCwgMHg4OCwgMHg0MCwgMHg3MCwgMHg2MCwgMHg4MSwKKzB4MDgsIDB4QjQsIDB4MDIsIDB4RDAsIDB4MUEsIDB4NTAsIDB4NkEsIDB4MDIsIDB4QUQsIDB4MDIsIDB4MDQsIDB4MjIsIDB4MTAsCisweDA4LCAweDYxLCAweEEwLCAweDAwLCAweDhELCAweDgxLCAweDA0LCAweDFBLCAweDkwLCAweDM4LCAweDQwLCAweDIzLCAweDQyLAorMHg4MSwgMHgwNiwgMHgwNCwgMHg1MiwgMHhEMSwgMHg1OCwgMHg0MCwgMHgyMCwgMHg0MSwgMHhDMSwgMHgwOCwgMHgzNCwgMHgwNiwKKzB4RDAsIDB4MEMsIDB4NDAsIDB4NDAsIDB4ODAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4QTgsCisweDIxLCAweDAwLCAweDkxLCAweDEwLCAweDY0LCAweDAyLCAweEQwLCAweDg5LCAweDEwLCAweDIwLCAweDAxLCAweDkxLCAweDA0LAorMHg3NCwgMHgwMiwgMHhEMCwgMHgwQiwgMHg0MCwgMHgyRSwgMHgwMSwgMHhCRCwgMHgwMCwgMHg0NCwgMHgwMiwgMHg5MCwgMHgwOSwKKzB4NjAsIDB4MjQsIDB4MDAsIDB4OUQsIDB4NDAsIDB4NDQsIDB4MDIsIDB4OTAsIDB4MDksIDB4NDAsIDB4MjcsIDB4MjAsIDB4OTEsCisweDA0LCAweDQ0LCAweDAyLCAweEQwLCAweDA5LCAweDQwLCAweDMwLCAweDAwLCAweDkxLCAweDExLCAweDc0LCAweDAyLCAweEQwLAorMHgwOSwgMHg0MCwgMHg2MCwgMHgyMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHgyOCwgMHgyNSwKKzB4MDAsIDB4OTcsIDB4MDAsIDB4NEMsIDB4MDIsIDB4RjAsIDB4MTksIDB4QzAsIDB4MjQsIDB4MDAsIDB4OTMsIDB4MDUsIDB4N0MsCisweDAyLCAweEYwLCAweDA5LCAweEMwLCAweEE2LCAweDAwLCAweDlGLCAweDAwLCAweDRDLCAweDAyLCAweDMwLCAweDA5LCAweEQwLAorMHgyNCwgMHgyMCwgMHg5RiwgMHgwMiwgMHg0QywgMHgwNiwgMHhCMCwgMHgyOSwgMHhFMCwgMHg2NywgMHgwMiwgMHg5MywgMHgwNCwKKzB4NEQsIDB4MDIsIDB4RjAsIDB4MTksIDB4RDAsIDB4NjQsIDB4MDAsIDB4OTMsIDB4MDMsIDB4N0MsIDB4MDIsIDB4RjIsIDB4MDksCisweEQwLCAweDE0LCAweEEwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDAwLCAweDI1LCAweDAwLAorMHg5RiwgMHgwMCwgMHg3QywgMHgwMiwgMHhGMCwgMHgwOSwgMHhDMCwgMHgyNywgMHgxMCwgMHg5RiwgMHgwMSwgMHg3QywgMHgwMiwKKzB4RjAsIDB4OTgsIDB4QzAsIDB4MjUsIDB4MDAsIDB4OUYsIDB4NDAsIDB4N0MsIDB4MDIsIDB4RjIsIDB4MDksIDB4QzAsIDB4MjcsCisweDAwLCAweDlGLCAweDA5LCAweDdDLCAweDBFLCAweDcwLCAweDg5LCAweEMwLCAweDI3LCAweDAwLCAweDlGLCAweDAwLCAweDdDLAorMHgwMiwgMHhGMCwgMHgzOSwgMHhDMCwgMHhFNywgMHgwMCwgMHg5RiwgMHg0MCwgMHg3QywgMHgxMiwgMHhGMCwgMHgwOSwgMHhDMCwKKzB4NTMsIDB4MDAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDgsIDB4MDUsIDB4MDAsIDB4MEYsCisweDAzLCAweDRELCAweDA0LCAweEYwLCAweDExLCAweEMwLCAweDA0LCAweDAwLCAweDEzLCAweDAwLCAweDdDLCAweDAwLCAweDMwLAorMHgxMSwgMHhDMCwgMHgwNywgMHgwMCwgMHgxMywgMHgwMCwgMHgyQywgMHgwMCwgMHhGOCwgMHgwMSwgMHhDMSwgMHgwNiwgMHgwNCwKKzB4MTMsIDB4MDAsIDB4MEMsIDB4NDAsIDB4RjAsIDB4MDEsIDB4QzAsIDB4MDQsIDB4MDIsIDB4MTMsIDB4MDIsIDB4N0MsIDB4MDAsCisweEYwLCAweDQxLCAweEMwLCAweDQ0LCAweDAyLCAweDEzLCAweDAyLCAweDRDLCAweDAwLCAweEYwLCAweDAxLCAweEMwLCAweDUzLAorMHgyMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwMCwgMHhEQywgMHgwMCwgMHg3RCwgMHgwMSwKKzB4QzQsIDB4MTUsIDB4NzAsIDB4MTYsIDB4NDAsIDB4OUMsIDB4MDAsIDB4NTEsIDB4MDEsIDB4NzQsIDB4MDEsIDB4MTQsIDB4MDUsCisweDQwLCAweDU3LCAweDAwLCAweDQxLCAweDAwLCAweEM0LCAweDQxLCAweEQwLCAweDA3LCAweDQwLCAweDFDLCAweDIwLCAweDUxLAorMHgwNCwgMHhDNCwgMHgwOSwgMHhEMSwgMHg1NywgMHg0MCwgMHgxNCwgMHgxMCwgMHg3QiwgMHgwMCwgMHg3NCwgMHgwMSwgMHhEMCwKKzB4MzcsIDB4NDAsIDB4MUMsIDB4MDAsIDB4NTEsIDB4MDAsIDB4NDUsIDB4MDEsIDB4RDAsIDB4MDQsIDB4NDAsIDB4NTMsIDB4MDAsCisweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweEEwLCAweEUyLCAweDA0LCAweENELCAweDAxLCAweDA0LAorMHgwMywgMHg1MCwgMHgxQywgMHg0MCwgMHhCMSwgMHgwNCwgMHg4MSwgMHgwMSwgMHgzNCwgMHgwMywgMHgxMCwgMHgwQywgMHg0MCwKKzB4NzMsIDB4MDAsIDB4QzEsIDB4MDAsIDB4MjQsIDB4MTMsIDB4RDAsIDB4MkQsIDB4NDAsIDB4NzIsIDB4MDAsIDB4RDEsIDB4NDAsCisweDA0LCAweDJBLCAweDU4LCAweDdDLCAweDQwLCAweDM0LCAweDAwLCAweEQxLCAweDAwLCAweDM0LCAweDI3LCAweEQwLCAweDBELAorMHg0MCwgMHgzMCwgMHgwMCwgMHg4MSwgMHgwMCwgMHgwNCwgMHgwMywgMHhEMCwgMHgwQywgMHg0MCwgMHg1MywgMHgwMCwgMHgwQSwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4ODAsIDB4MzgsIDB4MDQsIDB4RkQsIDB4MTAsIDB4ODQsIDB4MDMsCisweDUwLCAweDA2LCAweDQxLCAweDI5LCAweDAxLCAweEExLCAweDEwLCAweEI0LCAweDA1LCAweDEwLCAweDBFLCAweDQwLCAweDUzLAorMHgwNCwgMHgwMSwgMHgwMCwgMHg4NCwgMHgwMCwgMHhEMCwgMHgwQiwgMHg0MCwgMHg0QSwgMHhDNCwgMHhBMSwgMHgwMCwgMHg4NCwKKzB4MDUsIDB4RDAsIDB4MTIsIDB4NDAsIDB4MzgsIDB4MDAsIDB4RTksIDB4MDAsIDB4QjQsIDB4MDMsIDB4RDAsIDB4MkUsIDB4NDAsCisweDM4LCAweDAwLCAweEMxLCAweDAxLCAweDg0LCAweDAzLCAweEQwLCAweDBFLCAweDQwLCAweDE3LCAweDAwLCAweDAyLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgxMCwgMHg2OCwgMHgwMCwgMHhFRiwgMHgwMSwgMHg4QywgMHgwNywgMHg3MCwKKzB4MTAsIDB4QzAsIDB4RkQsIDB4NDAsIDB4RTMsIDB4MDEsIDB4QkMsIDB4MDcsIDB4MzAsIDB4MUUsIDB4QzAsIDB4N0IsIDB4NDAsCisweEUzLCAweDAxLCAweEFDLCAweDA0LCAweEQwLCAweDFBLCAweEMwLCAweDQyLCAweDAwLCAweEEzLCAweDAxLCAweDhELCAweDAyLAorMHg3OCwgMHgxMCwgMHhDMCwgMHg3OCwgMHgwNCwgMHhFMywgMHgwMSwgMHhCQywgMHgwNywgMHhGMCwgMHgxRiwgMHhDMCwgMHg3QywKKzB4MDAsIDB4RTEsIDB4MDEsIDB4OEMsIDB4MDcsIDB4RjAsIDB4MUEsIDB4QzAsIDB4NTcsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDEwLCAweEI4LCAweDI1LCAweDAwLCAweENGLCAweDAwLCAweDdDLCAweDAzLCAweDcwLCAweDAxLAorMHhEMCwgMHgyNiwgMHgwMCwgMHhERiwgMHgwMCwgMHg3QywgMHgwMSwgMHhGMCwgMHgwRCwgMHhDMCwgMHgxNywgMHgwMCwgMHgxRiwKKzB4MDAsIDB4N0MsIDB4MDAsIDB4RjAsIDB4MDksIDB4QzAsIDB4MDUsIDB4MDAsIDB4OEYsIDB4MDIsIDB4RkMsIDB4MDAsIDB4RjAsCisweDAxLCAweEQwLCAweEI3LCAweDAwLCAweERGLCAweDAwLCAweDdDLCAweDAzLCAweEYwLCAweDBELCAweEQwLCAweDM3LCAweDUwLAorMHhERiwgMHgwMCwgMHg3QywgMHgwMywgMHhGMCwgMHgwRCwgMHhDMCwgMHg0MywgMHg2MCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDIsIDB4QTAsIDB4NkIsIDB4MDAsIDB4RjMsIDB4MDEsIDB4Q0MsIDB4MjMsIDB4QjQsIDB4MTMsIDB4QzAsCisweDZDLCAweDIwLCAweEYzLCAweDAxLCAweENDLCAweDA3LCAweEYwLCAweDE2LCAweEMwLCAweDZDLCAweDAwLCAweEYzLCAweDAxLAorMHhCQywgMHgwNCwgMHgzMCwgMHgxRiwgMHhEMCwgMHg0RCwgMHgwMCwgMHhGMywgMHgwMywgMHhDQywgMHgyNCwgMHhGMCwgMHgxMywKKzB4QzAsIDB4N0YsIDB4MDgsIDB4RjMsIDB4MDEsIDB4REMsIDB4MDYsIDB4MzAsIDB4MUYsIDB4QzAsIDB4N0MsIDB4MTAsIDB4RjMsCisweDgxLCAweEZDLCAweDA3LCAweEYwLCAweDFGLCAweEMwLCAweDAzLCAweDAwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgxNSwgMHg4MCwgMHhCOSwgMHgwMCwgMHg3MSwgMHgwMiwgMHg4NCwgMHgwMywgMHgxMCwgMHgwMiwgMHg0MCwgMHgyOCwKKzB4MDAsIDB4RTEsIDB4MDAsIDB4QUMsIDB4MDEsIDB4QzAsIDB4MDYsIDB4QzAsIDB4MDgsIDB4MDAsIDB4MjEsIDB4MDAsIDB4ODQsCisweDA4LCAweDAwLCAweDRCLCAweDQwLCAweDA4LCAweDAxLCAweEE1LCAweDA0LCAweDk0LCAweDAwLCAweEQwLCAweDAyLCAweEMwLAorMHgzOSwgMHgwMCwgMHhFNSwgMHgwMiwgMHhDNCwgMHgwMiwgMHg1MCwgMHgwRSwgMHg0MCwgMHgxQywgMHgwMCwgMHhFMSwgMHgxNCwKKzB4QjQsIDB4MDMsIDB4RDAsIDB4MEUsIDB4NDAsIDB4NTcsIDB4MjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDA4LCAweDA5LCAweDAwLCAweEUxLCAweDAwLCAweDg0LCAweDIyLCAweDE4LCAweDAyLCAweDQxLCAweDM4LCAweDAwLAorMHhBMSwgMHgxMCwgMHg4NCwgMHgwMywgMHhEMCwgMHgyNiwgMHg0MCwgMHgyMCwgMHgwMCwgMHhDMSwgMHgwMCwgMHg5NCwgMHgwMCwKKzB4MTAsIDB4MEEsIDB4NDUsIDB4MDksIDB4MjAsIDB4RTEsIDB4ODAsIDB4ODQsIDB4MDgsIDB4RDgsIDB4MDIsIDB4NDAsIDB4MzMsCisweDAwLCAweEUxLCAweDAwLCAweDk0LCAweDAyLCAweDEwLCAweDBDLCAweDQwLCAweDM4LCAweDAwLCAweEUxLCAweDAwLCAweEI0LAorMHgwQiwgMHhEMCwgMHgwRSwgMHg0MCwgMHgwMywgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNiwKKzB4MjgsIDB4MTMsIDB4MDAsIDB4NDEsIDB4MDAsIDB4NDQsIDB4MDIsIDB4MTQsIDB4MDAsIDB4NDAsIDB4MjAsIDB4MDIsIDB4ODEsCisweDAxLCAweDI0LCAweDAxLCAweEQwLCAweDA0LCAweDQwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDA1LCAweDAwLCAweDE0LAorMHgxOCwgMHg0MCwgMHg0MCwgMHgwQSwgMHg4MSwgMHg1MywgMHgxNCwgMHgwNCwgMHhEMCwgMHgzMCwgMHg0MCwgMHgzMSwgMHgyMCwKKzB4QzUsIDB4MDIsIDB4MDQsIDB4MDIsIDB4NTAsIDB4MkMsIDB4NDAsIDB4NTAsIDB4MDAsIDB4QzEsIDB4MDAsIDB4MzQsIDB4MjMsCisweEQwLCAweDBDLCAweDQwLCAweDEzLCAweDIwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE1LCAweEE4LAorMHgyMSwgMHgwMCwgMHhEMywgMHgwMiwgMHg0QywgMHgwMywgMHgzNCwgMHgwMSwgMHhEMCwgMHgxQywgMHg1MCwgMHg4MywgMHgwMywKKzB4NEQsIDB4MDIsIDB4RjAsIDB4MDksIDB4QzAsIDB4NzQsIDB4NDAsIDB4RDMsIDB4MDAsIDB4NUMsIDB4MDAsIDB4MzAsIDB4MUQsCisweEM4LCAweDQ1LCAweEUwLCAweDkzLCAweDA1LCAweDBDLCAweDEyLCAweEYwLCAweDY5LCAweEMwLCAweDM3LCAweDAwLCAweEQzLAorMHgwMiwgMHg1QywgMHgwMiwgMHgzMSwgMHgwRCwgMHhDNCwgMHg3NCwgMHgyNCwgMHhEMywgMHg4MCwgMHg3QywgMHgwNywgMHhGMCwKKzB4MEQsIDB4QzAsIDB4NTcsIDB4MjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4QTcsCisweDQwLCAweERGLCAweDQyLCAweDdDLCAweDAzLCAweDcwLCAweDAxLCAweEMwLCAweDk3LCAweDA4LCAweDlGLCAweDEwLCAweDVDLAorMHgwMCwgMHhGMCwgMHgwOSwgMHhDMCwgMHg1MSwgMHgwMCwgMHgxRiwgMHgwMCwgMHg1QywgMHgwOCwgMHhGMCwgMHgwRCwgMHhDMCwKKzB4ODMsIDB4MDAsIDB4OUYsIDB4MDAsIDB4N0MsIDB4MDAsIDB4RjAsIDB4MDEsIDB4QzAsIDB4MzcsIDB4MDAsIDB4REYsIDB4MDAsCisweDdDLCAweDAyLCAweEYwLCAweDc1LCAweEQwLCAweDM3LCAweDAwLCAweERGLCAweDAwLCAweDdDLCAweDAyLCAweEYwLCAweDBELAorMHhDMCwgMHgwNywgMHgwMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwOCwgMHg2RiwgMHgyMSwKKzB4QjMsIDB4OTAsIDB4Q0MsIDB4MDMsIDB4MzAsIDB4MDAsIDB4QzAsIDB4MUMsIDB4MDAsIDB4REYsIDB4MDAsIDB4Q0MsIDB4MDYsCisweEYwLCAweDBCLCAweEMwLCAweDNDLCAweDAwLCAweEYzLCAweDAwLCAweDhDLCAweDA0LCAweDMwLCAweDRCLCAweEM4LCAweDA0LAorMHgwMCwgMHhCRCwgMHgwNSwgMHhGQywgMHgwMiwgMHgxMCwgMHgwMywgMHhDMSwgMHg3QiwgMHgwMCwgMHgzMywgMHgxOSwgMHhDQywKKzB4MDIsIDB4RjAsIDB4MEEsIDB4QzAsIDB4MkMsIDB4MDAsIDB4RjEsIDB4MTAsIDB4RkMsIDB4MDMsIDB4RjAsIDB4MEYsIDB4QzAsCisweDAzLCAweDIyLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgxLCAweDIwLCAweEU2LCAweDQwLCAweDkxLAorMHgwMiwgMHg0NCwgMHgwNywgMHgxMCwgMHgxMSwgMHg0MCwgMHg5NCwgMHgwMiwgMHhERCwgMHgwMCwgMHg0NCwgMHgwMCwgMHhEMCwKKzB4MDgsIDB4NDAsIDB4MTQsIDB4MDAsIDB4MDEsIDB4MDAsIDB4NDQsIDB4MDAsIDB4MTAsIDB4NDksIDB4NDAsIDB4QzQsIDB4MDAsCisweDkxLCAweDAwLCAweDY0LCAweDA0LCAweDEwLCAweDExLCAweDQwLCAweDM3LCAweDEyLCAweEQ1LCAweDAzLCAweDQ0LCAweDA2LAorMHhEMCwgMHgxMSwgMHg1MCwgMHhBNCwgMHgwMCwgMHhEMSwgMHgwMCwgMHg3NCwgMHgwMywgMHhEMCwgMHgwRCwgMHg0MCwgMHgwNywKKzB4MDIsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4QTAsIDB4MjYsIDB4MDAsIDB4QzEsIDB4MDEsCisweDQ0LCAweDA3LCAweDkyLCAweDExLCAweDQwLCAweEE0LCAweDAwLCAweERELCAweDAwLCAweDQ0LCAweDIyLCAweDUwLCAweDExLAorMHg0MCwgMHgyNCwgMHgwMCwgMHhEMSwgMHgwMCwgMHg0NCwgMHgyMCwgMHgxNCwgMHgwNCwgMHg0MCwgMHg0NCwgMHgwNCwgMHg5MSwKKzB4MDAsIDB4NzQsIDB4MDQsIDB4RDAsIDB4MTEsIDB4NDQsIDB4MjcsIDB4MDAsIDB4QzEsIDB4MDAsIDB4NDQsIDB4MTIsIDB4RDAsCisweDRELCAweDUxLCAweDcwLCAweDAwLCAweEQ1LCAweDAxLCAweDc0LCAweDA3LCAweEQwLCAweDFELCAweDQ4LCAweDA3LCAweDAwLAorMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgyMCwgMHgyMCwgMHgwMCwgMHhDMSwgMHgwMCwgMHgwNCwKKzB4MDcsIDB4OTAsIDB4MTAsIDB4NTAsIDB4MjAsIDB4MDAsIDB4Q0QsIDB4MDAsIDB4MDUsIDB4MDAsIDB4RDAsIDB4MDAsIDB4NDAsCisweDAwLCAweDQwLCAweDAxLCAweDAwLCAweDA2LCAweDAwLCAweDUwLCAweDA0LCAweDQwLCAweDAwLCAweDAwLCAweDgxLCAweDAwLAorMHg2NCwgMHgwMCwgMHhEMCwgMHgwMCwgMHgwMCwgMHgyMywgMHg0MCwgMHhDNSwgMHgyMCwgMHgwNCwgMHgwMiwgMHhEMCwgMHgwQywKKzB4NDgsIDB4MzAsIDB4MDAsIDB4QzUsIDB4MDAsIDB4MzQsIDB4MDIsIDB4RDAsIDB4MEMsIDB4NDAsIDB4NDMsIDB4ODAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDI2LCAweDAwLCAweEQzLCAweDQwLCAweDRDLCAweDAzLAorMHhCNCwgMHgwMSwgMHhDMCwgMHgzMCwgMHgwMCwgMHg5RiwgMHgwMCwgMHg0QywgMHgwMiwgMHg3MCwgMHgwMSwgMHhDMCwgMHgyNCwKKzB4MjAsIDB4RDMsIDB4MDAsIDB4NEQsIDB4MDAsIDB4MzAsIDB4MDEsIDB4QzAsIDB4MDQsIDB4MDAsIDB4QUIsIDB4MDAsIDB4N0MsCisweDAwLCAweEY0LCAweDAxLCAweEM4LCAweDJGLCAweDQwLCAweDAzLCAweDAwLCAweDRELCAweDAyLCAweEYwLCAweDBELCAweEMwLAorMHgzNCwgMHgwMCwgMHhENywgMHgwMCwgMHg3QywgMHgwMywgMHhGMCwgMHgwRCwgMHg4MCwgMHgwMywgMHhDMCwgMHgwQSwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4QTgsIDB4MkYsIDB4MDAsIDB4RkYsIDB4MDAsIDB4QkMsIDB4MDEsIDB4NzAsCisweDAzLCAweEMwLCAweDNGLCAweDAwLCAweEJGLCAweDAwLCAweEZDLCAweDAwLCAweEYwLCAweDAzLCAweEMwLCAweDBGLCAweDAwLAorMHgzRiwgMHgwMCwgMHhGQywgMHgwMCwgMHg5MSwgMHgwMywgMHhDMCwgMHgwRiwgMHgxMCwgMHhCQiwgMHgwMCwgMHhFQywgMHgwMCwKKzB4MzAsIDB4MDMsIDB4QzAsIDB4MkYsIDB4MDAsIDB4RkYsIDB4MDAsIDB4RkMsIDB4MDIsIDB4RjAsIDB4MEYsIDB4QzAsIDB4M0YsCisweDAwLCAweEZCLCAweDAwLCAweEZDLCAweDAzLCAweEYwLCAweDBGLCAweEMwLCAweDE3LCAweDYwLCAweDBFLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhBMywgMHg4MCwgMHhDMCwgMHgwRSwgMHgwMiwgMHgzQSwgMHgwOCwgMHhFOCwgMHgyOCwKKzB4QjgsIDB4QTMsIDB4QzAsIDB4OEUsIDB4MDIsIDB4M0EsIDB4MDgsIDB4RUMsIDB4MjgsIDB4QTAsIDB4ODMsIDB4RTAsIDB4OEUsCisweDgyLCAweDNCLCAweDBBLCAweEVDLCAweDI4LCAweEE4LCAweDgzLCAweEMwLCAweDhFLCAweDgyLCAweDNCLCAweDBFLCAweEU2LAorMHgyOCwgMHhBMCwgMHg4MywgMHhFMCwgMHg4RSwgMHg4MiwgMHgzQiwgMHgwQSwgMHhFQywgMHgyMCwgMHhCOCwgMHg4MywgMHhFMCwKKzB4MEUsIDB4ODIsIDB4M0EsIDB4MEEsIDB4RUUsIDB4MjAsIDB4QjAsIDB4MDMsIDB4OEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDgzLCAweDIyLCAweDIwLCAweDhFLCAweDgwLCAweDNCLCAweDAyLCAweENBLCAweDA4LCAweEE4LAorMHgyMywgMHhBMCwgMHg4RSwgMHg4MCwgMHgzQSwgMHgwMiwgMHhFOCwgMHgwOCwgMHhBOCwgMHgyMywgMHhFMCwgMHg4RSwgMHgwMCwKKzB4MTMsIDB4MDIsIDB4RTgsIDB4MDgsIDB4QTgsIDB4MjMsIDB4QTAsIDB4ODQsIDB4MDAsIDB4M0IsIDB4MDIsIDB4RUMsIDB4MDgsCisweDI4LCAweDIzLCAweEUwLCAweDhBLCAweDAwLCAweDM5LCAweDAyLCAweEU4LCAweDA4LCAweEJBLCAweDIzLCAweDQwLCAweDg0LAorMHg4MCwgMHgzQiwgMHgwMCwgMHhFRSwgMHgwOCwgMHhBOCwgMHgwMywgMHg4QywgMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MjEsIDB4NDAsIDB4ODAsIDB4MDQsIDB4MDEsIDB4MTIsIDB4MDQsIDB4NDAsIDB4MTAsIDB4MjAsIDB4NDEsCisweDgwLCAweDA0LCAweDAxLCAweDEyLCAweDA0LCAweDQ4LCAweDEwLCAweDIwLCAweDQxLCAweDgwLCAweDg0LCAweDAxLCAweDEyLAorMHgwNiwgMHg0OCwgMHgxMCwgMHgyMCwgMHg0MSwgMHg4MCwgMHgwNCwgMHgwMSwgMHgxMiwgMHgwNiwgMHg0OCwgMHgxMCwgMHgwMCwKKzB4NDEsIDB4ODAsIDB4MDQsIDB4MDEsIDB4MTIsIDB4MDQsIDB4NDgsIDB4MTAsIDB4MjAsIDB4NDEsIDB4ODAsIDB4MDQsIDB4MDEsCisweDEyLCAweDA0LCAweDQ4LCAweDEwLCAweDIwLCAweDAxLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHg4MywgMHgwMCwgMHg4MCwgMHgwRSwgMHgwMCwgMHgxQSwgMHgwMCwgMHg2QSwgMHgwOCwgMHhBMiwgMHg2MSwgMHg4MCwKKzB4ODYsIDB4QTAsIDB4MUEsIDB4MDAsIDB4MjgsIDB4MDgsIDB4QTgsIDB4MDEsIDB4ODAsIDB4MDYsIDB4MDAsIDB4MUEsIDB4ODAsCisweDY4LCAweDA4LCAweEFBLCAweDAxLCAweDgwLCAweDg2LCAweDAxLCAweDFBLCAweDAwLCAweDY4LCAweDA4LCAweEE4LCAweDAwLAorMHg4MCwgMHg4NiwgMHgwMCwgMHgzQSwgMHgwMiwgMHg2OCwgMHgwMCwgMHhBMCwgMHgwMSwgMHg4MCwgMHgwRSwgMHgwMCwgMHgwQSwKKzB4MDQsIDB4NjAsIDB4MDAsIDB4QTAsIDB4MDEsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweEEwLCAweDEyLCAweEEwLCAweDRFLCAweDgwLCAweDNBLCAweDAxLCAweEVBLCAweDA0LCAweEEwLCAweDEzLCAweEEwLCAweDRFLAorMHg4MSwgMHgzQSwgMHgwMSwgMHhFOCwgMHgwNCwgMHhBOCwgMHgxMywgMHhBMCwgMHhDRSwgMHg4MCwgMHgzQSwgMHgwMSwgMHhFOCwKKzB4MzQsIDB4QTgsIDB4MTMsIDB4QTAsIDB4Q0UsIDB4ODAsIDB4M0EsIDB4MDEsIDB4RUEsIDB4MDQsIDB4QTgsIDB4MTMsIDB4QTAsCisweDRFLCAweDgwLCAweDJBLCAweDAxLCAweEE4LCAweDA0LCAweEE4LCAweDEyLCAweEEwLCAweDRFLCAweDgwLCAweDMyLCAweDAxLAorMHhFQSwgMHgwNCwgMHhBOCwgMHgwMywgMHg4QywgMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhBMywKKzB4MDIsIDB4MDAsIDB4MDYsIDB4MDAsIDB4MTgsIDB4MDAsIDB4NjAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDYsIDB4MDAsCisweDE4LCAweDAxLCAweDYyLCAweDAwLCAweDgwLCAweDgxLCAweDAwLCAweDA2LCAweDAxLCAweDE4LCAweDAwLCAweDQyLCAweDAwLAorMHg4MCwgMHgwMSwgMHgwMCwgMHgwNiwgMHgwMCwgMHgxOCwgMHgwOCwgMHg2MCwgMHgxMCwgMHg4MCwgMHgwMSwgMHgwMCwgMHgwNiwKKzB4MDMsIDB4MTgsIDB4MDAsIDB4NjIsIDB4MDAsIDB4ODAsIDB4MDEsIDB4MDAsIDB4MDYsIDB4MDAsIDB4MTgsIDB4MDAsIDB4NjAsCisweDAwLCAweDgwLCAweDAxLCAweDhDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweEEzLCAweDgyLAorMHgyMCwgMHgwNCwgMHg4MCwgMHgxMCwgMHgwMCwgMHg0MiwgMHgxNCwgMHgwMCwgMHgxMCwgMHgyMCwgMHg4NCwgMHg4MCwgMHgxMCwKKzB4MDgsIDB4NDIsIDB4MTAsIDB4MDgsIDB4MTEsIDB4MjAsIDB4MDQsIDB4ODAsIDB4MTAsIDB4MEMsIDB4NDIsIDB4MDgsIDB4MDgsCisweDExLCAweDIwLCAweDA0LCAweDgwLCAweDEwLCAweDAwLCAweDQyLCAweDAwLCAweDA4LCAweDExLCAweDIwLCAweDA0LCAweDgwLAorMHgxMCwgMHgwNCwgMHg0MiwgMHgwNCwgMHgwOCwgMHgwMSwgMHgyMCwgMHgwNCwgMHg4MCwgMHgxMCwgMHgwMSwgMHg0MiwgMHgwNCwKKzB4MDgsIDB4MDEsIDB4OEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4QTIsIDB4RjIsIDB4QTAsCisweDAyLCAweDAzLCAweDBBLCAweDA0LCAweDI4LCAweDFDLCAweEFBLCAweDUwLCAweEEwLCAweDAyLCAweDAxLCAweDBBLCAweDA2LAorMHgyQSwgMHgxMCwgMHhBMCwgMHhEMCwgMHg4MCwgMHgwMiwgMHgwMSwgMHgwQSwgMHgwNCwgMHgwQSwgMHgzMCwgMHhBMCwgMHg1MCwKKzB4QTAsIDB4MDIsIDB4MDEsIDB4MEEsIDB4MEUsIDB4MjgsIDB4MTAsIDB4QTAsIDB4NTAsIDB4ODAsIDB4ODIsIDB4MDEsIDB4MEEsCisweDA0LCAweDJBLCAweDE0LCAweEEwLCAweDQwLCAweDgwLCAweDAyLCAweDAxLCAweDJBLCAweDA1LCAweDI4LCAweDNDLCAweEE4LAorMHgwMCwgMHg4QywgMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgzMCwgMHg4MCwgMHhDOCwKKzB4MDAsIDB4QTIsIDB4MDMsIDB4QTgsIDB4MkUsIDB4QTAsIDB4MzIsIDB4ODAsIDB4RUEsIDB4MDAsIDB4QUEsIDB4MDMsIDB4MDgsCisweDBDLCAweEEwLCAweDNBLCAweDgwLCAweDZBLCAweDAwLCAweDgyLCAweDAxLCAweDA4LCAweDBDLCAweDIwLCAweDNBLCAweDgwLAorMHg2QSwgMHgwMCwgMHg4MiwgMHgwMywgMHgwOCwgMHgwQywgMHhBMCwgMHgzQSwgMHg4MCwgMHhFQSwgMHgwMSwgMHhBMiwgMHgwMywKKzB4MDgsIDB4MEUsIDB4QTAsIDB4M0EsIDB4ODAsIDB4RTAsIDB4MDAsIDB4QUEsIDB4MDMsIDB4MDgsIDB4MUMsIDB4MjAsIDB4MDIsCisweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDMwLCAweDAwLCAweDA4LCAweDgwLAorMHgzMCwgMHgwMSwgMHgyMCwgMHgxOCwgMHg4MCwgMHgwMCwgMHgwMCwgMHhDMiwgMHgwMSwgMHgwOCwgMHgwMiwgMHgwMCwgMHgwNCwKKzB4ODAsIDB4MDAsIDB4MDAsIDB4ODIsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDgsIDB4MDgsIDB4MDIsIDB4MDAsIDB4ODIsCisweDAwLCAweDEwLCAweDA2LCAweDAwLCAweDA0LCAweDgwLCAweDAwLCAweDAwLCAweDgyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHg4MCwgMHgwMCwgMHgwMCwgMHg0NCwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwMCwgMHg4MiwgMHgwNCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4QTMsIDB4MTYsIDB4NDAsIDB4MTgsIDB4MDAsIDB4NjEsCisweDAwLCAweDA0LCAweDIxLCAweDEwLCAweDA0LCAweDQwLCAweDEwLCAweDAwLCAweDQxLCAweDAxLCAweDA2LCAweDAxLCAweDEwLAorMHgwNCwgMHg0MCwgMHgxMCwgMHg4MCwgMHg0MSwgMHgwMCwgMHgwNiwgMHgwMSwgMHgxMCwgMHgwNiwgMHg0MCwgMHgxMCwgMHg4MCwKKzB4NDEsIDB4MDAsIDB4MDYsIDB4MDEsIDB4MTAsIDB4MDQsIDB4NDAsIDB4MTAsIDB4ODAsIDB4NDEsIDB4MDAsIDB4MDYsIDB4MDEsCisweDEwLCAweDA0LCAweDYwLCAweDE0LCAweDAwLCAweDQxLCAweDAwLCAweDA0LCAweDAxLCAweDEwLCAweDgyLCAweDhDLCAweDBBLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhBMywgMHgwMiwgMHhBMCwgMHgwNiwgMHg4MCwgMHg5QSwgMHgwMCwKKzB4NkQsIDB4MDIsIDB4QTAsIDB4MDEsIDB4QTAsIDB4MjYsIDB4NDAsIDB4OUIsIDB4MDAsIDB4NEEsIDB4MDAsIDB4QjAsIDB4MDksCisweDg4LCAweDI2LCAweDgwLCAweDkyLCAweDAwLCAweDQ4LCAweDAwLCAweDgwLCAweDA5LCAweEEwLCAweDI2LCAweDQwLCAweDkyLAorMHgwMCwgMHg0OCwgMHgwMCwgMHhCMCwgMHgwOSwgMHg4MCwgMHgyNiwgMHg4MCwgMHg5QSwgMHgwMCwgMHg0QSwgMHgwMiwgMHhBOCwKKzB4MDksIDB4QTAsIDB4MjQsIDB4ODAsIDB4OUIsIDB4MDAsIDB4NEEsIDB4MDAsIDB4QTgsIDB4MDEsIDB4OEMsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweEEzLCAweDAyLCAweEMwLCAweDA2LCAweDAwLCAweDFBLCAweDAxLCAweDY4LAorMHgwMCwgMHhCMCwgMHgwMSwgMHhDMCwgMHg0NiwgMHg4MCwgMHgxQSwgMHgwMCwgMHg2RSwgMHgwNCwgMHhBOCwgMHgwMSwgMHhDMCwKKzB4MDYsIDB4ODAsIDB4MUIsIDB4MDAsIDB4NkEsIDB4MDAsIDB4QjAsIDB4MDEsIDB4RTAsIDB4MDYsIDB4ODAsIDB4MUIsIDB4MDAsCisweDZFLCAweDA0LCAweEE4LCAweDAxLCAweEM4LCAweDA2LCAweDAwLCAweDFBLCAweDAwLCAweDZFLCAweDAwLCAweEIwLCAweDAxLAorMHhFMCwgMHg0NiwgMHg4MCwgMHgxQSwgMHgwMCwgMHg2RSwgMHgwMCwgMHhCMCwgMHgwMSwgMHg4QywgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4QTMsIDB4NDIsIDB4MjAsIDB4MEMsIDB4ODEsIDB4MzEsIDB4MEMsIDB4ODIsIDB4MTAsCisweDA4LCAweDQzLCAweDIwLCAweDBDLCAweDgxLCAweDMwLCAweDA0LCAweEMwLCAweDMwLCAweDA4LCAweDQzLCAweDIwLCAweDBDLAorMHgwMSwgMHgzMCwgMHgwQywgMHhDMiwgMHgzMCwgMHgxMCwgMHg0MywgMHgyMCwgMHgwQywgMHgwMywgMHgzMCwgMHgwQywgMHhDMCwKKzB4MzAsIDB4MDgsIDB4NDMsIDB4MjAsIDB4MEMsIDB4ODEsIDB4MzAsIDB4MEMsIDB4QzAsIDB4MTAsIDB4MDgsIDB4NDMsIDB4MDAsCisweDBDLCAweDgxLCAweDMwLCAweDA0LCAweEMyLCAweDEwLCAweDA4LCAweDAzLCAweDhDLCAweDBBLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg0QywgMHgwMCwgMHgzMCwgMHgwMCwgMHhDMCwgMHgwMCwgMHgwMCwKKzB4MDMsIDB4MDAsIDB4MEMsIDB4MDAsIDB4MzAsIDB4MDEsIDB4QzAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4MDAsIDB4NEMsIDB4MDAsCisweDMwLCAweDAxLCAweEMwLCAweDA0LCAweDAwLCAweDAzLCAweDAwLCAweDRDLCAweDAwLCAweDMwLCAweDAxLCAweEMwLCAweDAwLAorMHgwMCwgMHgwMywgMHgwMCwgMHg0QywgMHgwMCwgMHgzMCwgMHgwMSwgMHhDMCwgMHgwMCwgMHgwMCwgMHgxMywgMHgwOCwgMHgwOCwKKzB4MDAsIDB4MjAsIDB4MDAsIDB4QzAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDIxLCAweDQwLCAweDgwLCAweDRDLCAweDIzLCAweDMyLCAweDA0LCAweENBLCAweDEwLCAweDIwLCAweDQzLAorMHg4MCwgMHgwQywgMHgwMywgMHgzMiwgMHgwQywgMHhDQSwgMHgxMCwgMHgyMCwgMHg0MywgMHg4OCwgMHg0QywgMHgyMywgMHgzMiwKKzB4MDUsIDB4QzgsIDB4MTQsIDB4MjAsIDB4NDMsIDB4ODAsIDB4NEMsIDB4ODEsIDB4MzIsIDB4MDUsIDB4Q0EsIDB4MTAsIDB4MjAsCisweDQzLCAweDgwLCAweDQ4LCAweDAzLCAweDMyLCAweDA1LCAweDg4LCAweDEwLCAweDIwLCAweEQzLCAweEEwLCAweDBDLCAweDAzLAorMHgzMiwgMHgwNCwgMHhDQSwgMHgxMCwgMHgyMCwgMHgwMywgMHg4NCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4QTIsIDB4NDIsIDB4QTAsIDB4MDYsIDB4ODMsIDB4M0EsIDB4MDQsIDB4NkEsIDB4MTAsIDB4QTgsIDB4NDEsIDB4QTAsCisweDA2LCAweDgzLCAweDFBLCAweDBDLCAweDRBLCAweDMwLCAweEE4LCAweDQxLCAweEEwLCAweDA2LCAweDgxLCAweDFBLCAweDBDLAorMHg0QSwgMHgzMCwgMHhBOCwgMHg0MSwgMHg4MCwgMHgwRSwgMHg4MywgMHgxQSwgMHgwQywgMHg0QSwgMHgzMCwgMHg4OCwgMHg0MSwKKzB4QTAsIDB4MDYsIDB4MDEsIDB4MEEsIDB4MEMsIDB4MDgsIDB4MTAsIDB4QTgsIDB4NDEsIDB4QTAsIDB4MDYsIDB4ODMsIDB4MUEsCisweDA0LCAweDZBLCAweDEwLCAweEE4LCAweDAxLCAweDhDLCAweDBBLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHhBMywgMHg0MCwgMHgwMCwgMHgwNCwgMHgwMSwgMHgxOCwgMHgwNCwgMHhDMCwgMHgxMCwgMHgwMCwgMHg0MSwgMHgwMCwgMHgwNCwKKzB4MDEsIDB4MjAsIDB4MDQsIDB4NDAsIDB4MTAsIDB4MDAsIDB4NDIsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MTAsIDB4MDQsIDB4NDAsCisweDEwLCAweDgwLCAweDQxLCAweDAwLCAweDA0LCAweDAxLCAweDEwLCAweDA0LCAweDAwLCAweDEwLCAweDAwLCAweDQzLCAweDAwLAorMHgwMCwgMHg4MSwgMHgxMCwgMHgwNCwgMHg0MCwgMHgxMCwgMHgwMCwgMHg0MSwgMHgwMCwgMHgwQywgMHgwMSwgMHgzMCwgMHgwNCwKKzB4NDAsIDB4MTAsIDB4MDAsIDB4MDEsIDB4OEMsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4QTMsCisweDRBLCAweDIwLCAweDJDLCAweDgxLCAweDEwLCAweDBDLCAweDgyLCAweDEyLCAweDg4LCAweDQxLCAweDIwLCAweDI2LCAweDgxLAorMHhCMCwgMHgwNCwgMHg0MiwgMHgxMCwgMHgwOCwgMHg0MywgMHgyMCwgMHgyNiwgMHg4MywgMHg5MCwgMHgwNCwgMHgwMiwgMHgxMiwKKzB4MDgsIDB4NDEsIDB4MDAsIDB4MjYsIDB4ODEsIDB4OTAsIDB4MDQsIDB4NDIsIDB4MTAsIDB4MDgsIDB4NDMsIDB4MjAsIDB4MjYsCisweDgzLCAweDkwLCAweDA0LCAweDQwLCAweDEwLCAweDg4LCAweEM5LCAweDIwLCAweDBDLCAweDgxLCAweEIwLCAweDA0LCAweDYyLAorMHgxMiwgMHg4OCwgMHgwMSwgMHg4QywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhBMiwgMHgwNiwKKzB4MjAsIDB4MUEsIDB4MDAsIDB4NjIsIDB4MDAsIDB4ODgsIDB4MDEsIDB4QTgsIDB4MDYsIDB4QTAsIDB4MUEsIDB4ODAsIDB4NjIsCisweDAwLCAweDgwLCAweDAxLCAweDI4LCAweDA2LCAweEEwLCAweDFBLCAweDgwLCAweDQyLCAweDAwLCAweDBBLCAweDAxLCAweEEwLAorMHgwNiwgMHg4MCwgMHgxOCwgMHgwMCwgMHg2QSwgMHgwMCwgMHg4OCwgMHgwMSwgMHgyOCwgMHgwNiwgMHhBMCwgMHgxQSwgMHg4MCwKKzB4NkEsIDB4ODAsIDB4MDgsIDB4MDEsIDB4QTgsIDB4MDYsIDB4ODAsIDB4MTgsIDB4ODAsIDB4NjIsIDB4MDAsIDB4QTgsIDB4MDEsCisweDg4LCAweDAyLCAweDhDLCAweDBBLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDYwLCAweDgwLAorMHg4MiwgMHgwMSwgMHgwQSwgMHgwNiwgMHgyOCwgMHgxOCwgMHhBMCwgMHg2MCwgMHg4MCwgMHg4MiwgMHgwMSwgMHgwQSwgMHgwNiwKKzB4MjgsIDB4MTgsIDB4QTAsIDB4NjAsIDB4ODAsIDB4ODIsIDB4MDEsIDB4MEEsIDB4MDYsIDB4MjgsIDB4MTgsIDB4QTAsIDB4NjAsCisweEEwLCAweDgyLCAweDAxLCAweDJBLCAweDA2LCAweDI4LCAweDE4LCAweEEwLCAweDYwLCAweDgwLCAweDgyLCAweDAxLCAweDBBLAorMHgwNiwgMHhBQSwgMHgxOCwgMHhBMCwgMHg2MCwgMHg4MCwgMHg4QSwgMHgwMSwgMHgwQSwgMHgwNiwgMHgyOCwgMHgxOCwgMHhBMCwKKzB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4NDgsIDB4ODAsIDB4MjAsCisweDgxLCAweDAyLCAweDg0LCAweDA4LCAweDEyLCAweDIwLCAweDQwLCAweDgwLCAweDIwLCAweDgxLCAweDgyLCAweDA0LCAweDA4LAorMHgxMCwgMHgyMCwgMHg0MCwgMHg4MCwgMHgyMCwgMHgwMSwgMHg4MiwgMHgwNCwgMHg0QSwgMHgxMiwgMHgyMCwgMHg0MCwgMHg4MCwKKzB4MjAsIDB4MDEsIDB4ODIsIDB4MDQsIDB4MDgsIDB4MTAsIDB4MjAsIDB4NDAsIDB4ODAsIDB4MjAsIDB4MDEsIDB4ODIsIDB4MDQsCisweDA4LCAweDEwLCAweDIwLCAweDQ4LCAweDgwLCAweDAwLCAweDAxLCAweDgyLCAweDA0LCAweDQ4LCAweDEyLCAweDIwLCAweDAwLAorMHgwQywgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhBMywgMHg2MiwgMHhDMCwgMHg4MCwgMHgwMSwKKzB4MDMsIDB4MDYsIDB4QUMsIDB4MTgsIDB4QjAsIDB4NjIsIDB4QzAsIDB4OEEsIDB4MDEsIDB4MkIsIDB4MDYsIDB4QUUsIDB4MTgsCisweEIwLCAweDYyLCAweEMwLCAweDhBLCAweDgxLCAweDJCLCAweDA2LCAweEFDLCAweDE4LCAweEEwLCAweDYyLCAweEMwLCAweDhBLAorMHg4MSwgMHgyOSwgMHgwNiwgMHhBRSwgMHgxOCwgMHhCMCwgMHg2MiwgMHhDMCwgMHg4QSwgMHgwMSwgMHgyQiwgMHgwNiwgMHhBNiwKKzB4MTgsIDB4QjAsIDB4NjIsIDB4NjAsIDB4OEEsIDB4MDEsIDB4MkIsIDB4MDYsIDB4QUMsIDB4MTgsIDB4QjAsIDB4MDIsIDB4OEMsCisweDBBLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweEEyLCAweDYyLCAweDgwLCAweDhFLCAweDAxLCAweDNBLAorMHgwNiwgMHhFRSwgMHgxOCwgMHhBNCwgMHg2MywgMHg4MCwgMHg4RSwgMHg4MSwgMHgzQSwgMHgwNiwgMHhFOCwgMHgxOCwgMHhCMCwKKzB4NjMsIDB4ODAsIDB4OEUsIDB4MDEsIDB4M0EsIDB4MDYsIDB4RUEsIDB4MTgsIDB4QTgsIDB4NjMsIDB4ODAsIDB4OEUsIDB4ODEsCisweDNBLCAweDA2LCAweEUwLCAweDE4LCAweEIwLCAweDYzLCAweDgwLCAweDhFLCAweDgxLCAweDNCLCAweDA2LCAweEU4LCAweDE4LAorMHhBOCwgMHg2MywgMHgyMCwgMHg4RSwgMHg4MSwgMHgzQiwgMHgwNiwgMHhFQSwgMHgxOCwgMHhBOCwgMHgwMywgMHg4QywgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4QTIsIDB4NjIsIDB4QzAsIDB4OEUsIDB4MDEsIDB4M0EsIDB4MDYsCisweEU4LCAweDE4LCAweEIwLCAweDYzLCAweEMwLCAweDhFLCAweDAxLCAweDNBLCAweDA2LCAweENDLCAweDE4LCAweEEwLCAweDYzLAorMHhDMCwgMHg4RSwgMHgwMSwgMHgzQiwgMHg4NiwgMHhFQSwgMHgxOCwgMHgzMCwgMHg2MywgMHhDMCwgMHg4RSwgMHgwMSwgMHgzQiwKKzB4MDYsIDB4Q0MsIDB4MTgsIDB4QTAsIDB4NjMsIDB4QzAsIDB4OEUsIDB4MDEsIDB4M0IsIDB4MDYsIDB4RUMsIDB4MTgsIDB4QjAsCisweDYzLCAweEUwLCAweDhFLCAweDgxLCAweDNBLCAweDA2LCAweEVFLCAweDE4LCAweEIwLCAweDAzLCAweDg4LCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhBMiwgMHg2MiwgMHhBMCwgMHg4RSwgMHg4MSwgMHgzMSwgMHgwNiwgMHhDMiwKKzB4MTgsIDB4QTgsIDB4NjMsIDB4QTAsIDB4OEUsIDB4ODEsIDB4MzAsIDB4MDYsIDB4QzIsIDB4MTgsIDB4MEEsIDB4NjMsIDB4QTAsCisweDhFLCAweDAxLCAweDEwLCAweDA2LCAweEM0LCAweDE4LCAweDMwLCAweDYzLCAweDAwLCAweDhDLCAweDIxLCAweDEwLCAweDA2LAorMHhDMCwgMHgxOCwgMHgwOCwgMHg2MSwgMHhBMCwgMHg4RSwgMHhBMSwgMHgzOCwgMHg4NiwgMHg4MCwgMHgxOCwgMHhBOCwgMHg2MywKKzB4MDAsIDB4ODQsIDB4ODEsIDB4MzgsIDB4MDYsIDB4RUUsIDB4MTgsIDB4QTgsIDB4MDMsIDB4ODgsIDB4MEEsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDgwLCAweDA0LCAweDAxLCAweDFBLCAweDA0LCAweEU4LCAweDEwLAorMHgyMCwgMHg0MSwgMHg4MCwgMHgwNCwgMHgwMSwgMHgzQSwgMHgwNCwgMHg0OCwgMHgxMCwgMHhBMCwgMHg0MywgMHg4MCwgMHgwNCwKKzB4MDEsIDB4MTIsIDB4MDQsIDB4NjgsIDB4MTAsIDB4MjAsIDB4NDEsIDB4MDAsIDB4MDQsIDB4MDEsIDB4MTIsIDB4MDQsIDB4NDgsCisweDEwLCAweDIwLCAweDQzLCAweDgwLCAweDA0LCAweDAxLCAweDMyLCAweDA0LCAweDY4LCAweDEwLCAweDIwLCAweDQxLCAweDgwLAorMHgwNCwgMHgwMSwgMHgzMiwgMHgwNCwgMHg0OCwgMHgxMCwgMHgyMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjAsIDB4ODAsIDB4ODYsIDB4MDEsIDB4MTIsIDB4MDYsIDB4NkEsIDB4MTgsIDB4QTAsCisweDYwLCAweDg4LCAweDg2LCAweDgxLCAweDFBLCAweDA2LCAweDQ4LCAweDE4LCAweEE4LCAweDYwLCAweDAwLCAweDgyLCAweDAxLAorMHgwMiwgMHg4NiwgMHg0OCwgMHgxOCwgMHhBMCwgMHg2MSwgMHg4MCwgMHg4NCwgMHgwMSwgMHgxQSwgMHgwNiwgMHg0OCwgMHgxOCwKKzB4QTgsIDB4NjEsIDB4ODgsIDB4ODYsIDB4MDEsIDB4MUEsIDB4MDYsIDB4NDgsIDB4MTgsIDB4QTAsIDB4NjEsIDB4ODAsIDB4ODQsCisweDAxLCAweDE4LCAweDA2LCAweDY4LCAweDE4LCAweEEwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHhBMiwgMHgwMiwgMHhBMCwgMHgwRSwgMHg4MCwgMHgzQSwgMHgwMCwgMHhDQSwgMHgwMCwgMHgyOCwgMHgwMywKKzB4QTAsIDB4MEEsIDB4ODAsIDB4MzIsIDB4MDAsIDB4QzgsIDB4MDAsIDB4QTgsIDB4MDIsIDB4QTAsIDB4MEMsIDB4MDAsIDB4MzIsCisweDAwLCAweEM4LCAweDAwLCAweEE4LCAweDAzLCAweEEwLCAweDBDLCAweDAwLCAweDMyLCAweDAwLCAweEM4LCAweDAwLCAweEE4LAorMHgwMywgMHhBMCwgMHgwQywgMHgwMCwgMHgzMiwgMHgwMCwgMHhFOCwgMHgwMCwgMHgyOCwgMHgwMywgMHhBMCwgMHgwQywgMHg4MCwKKzB4MzIsIDB4MDAsIDB4Q0EsIDB4MDAsIDB4QTgsIDB4MDMsIDB4ODgsIDB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweEEyLCAweDQyLCAweDAwLCAweDA2LCAweDAxLCAweDE4LCAweDA0LCAweDQwLCAweDEwLCAweDAwLCAweDQxLCAweDAwLAorMHgwNiwgMHgwMSwgMHgxMCwgMHgwQywgMHg0MiwgMHgxMCwgMHg4MCwgMHg0MSwgMHgwMCwgMHgwNCwgMHg4MywgMHgxMCwgMHgwQywKKzB4NDAsIDB4MTAsIDB4ODAsIDB4QzEsIDB4MDAsIDB4MDQsIDB4ODMsIDB4MTAsIDB4MDQsIDB4NDIsIDB4MTAsIDB4ODAsIDB4QzEsCisweDAwLCAweDA0LCAweDgzLCAweDEwLCAweDBDLCAweDQyLCAweDMwLCAweDAwLCAweEMwLCAweDAwLCAweDA0LCAweDAzLCAweDEwLAorMHgwNCwgMHg2MCwgMHgxMCwgMHg4MCwgMHgwMSwgMHg4OCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4QTIsIDB4NDIsIDB4MjAsIDB4MDQsIDB4ODEsIDB4MTAsIDB4MDQsIDB4NjIsIDB4MTAsIDB4ODgsIDB4NDEsIDB4MjAsIDB4MDQsCisweDgxLCAweDE4LCAweDA0LCAweDYyLCAweDEwLCAweDA4LCAweDQxLCAweDIwLCAweDA2LCAweDgxLCAweDE4LCAweDA0LCAweDYwLAorMHgxMCwgMHgwOCwgMHg0MSwgMHgyMCwgMHgwNiwgMHg4MSwgMHgxOCwgMHgwNCwgMHg2MiwgMHgxMCwgMHgwOCwgMHg0MSwgMHgyMCwKKzB4MDYsIDB4ODEsIDB4MTgsIDB4MDQsIDB4NjIsIDB4MTAsIDB4ODgsIDB4NDEsIDB4MjAsIDB4MDYsIDB4ODEsIDB4MTgsIDB4MDUsCisweDQyLCAweDEwLCAweDA4LCAweDAxLCAweDg4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweEEyLAorMHg0MiwgMHhBMCwgMHgwMiwgMHgwMSwgMHgwQSwgMHgwQywgMHhBOCwgMHgzMCwgMHhBOCwgMHg0MiwgMHhBMCwgMHgwMiwgMHgwMywKKzB4MkEsIDB4MDQsIDB4QUEsIDB4MTAsIDB4QTAsIDB4QzAsIDB4QTAsIDB4MEEsIDB4ODEsIDB4MkEsIDB4ODQsIDB4QTAsIDB4MTAsCisweEEwLCAweDQwLCAweEEwLCAweDBBLCAweDgxLCAweDJBLCAweDBDLCAweEFBLCAweDEwLCAweEEwLCAweDQwLCAweEE4LCAweDBBLAorMHg4MSwgMHgyQSwgMHgwNCwgMHgyQSwgMHgxMCwgMHhBOCwgMHg0MiwgMHhBMCwgMHgwQSwgMHg4MSwgMHgyQSwgMHgwQywgMHhBOCwKKzB4MTAsIDB4QTgsIDB4MDAsIDB4ODgsIDB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisweDgwLCAweDBBLCAweDAxLCAweDJBLCAweDBDLCAweEE4LCAweDMwLCAweEEwLCAweEMyLCAweDgwLCAweDBBLCAweDAzLCAweDJBLAorMHgwQywgMHhBOCwgMHgzMCwgMHhBMCwgMHhDMiwgMHg4MCwgMHgwQSwgMHgwMSwgMHgyQSwgMHgwNCwgMHhBOCwgMHgzMCwgMHhBMCwKKzB4QzIsIDB4ODAsIDB4MEEsIDB4MDEsIDB4MkEsIDB4MEMsIDB4QTgsIDB4MzAsIDB4QTAsIDB4QzIsIDB4ODAsIDB4MEEsIDB4MDEsCisweDJBLCAweDA0LCAweEE4LCAweDMwLCAweEEwLCAweDQyLCAweDgwLCAweDBBLCAweDAzLCAweDJBLCAweDA1LCAweEE4LCAweDMwLAorMHhBMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHgxMCwgMHgwMCwKKzB4NDIsIDB4ODAsIDB4MDgsIDB4MDAsIDB4MjAsIDB4MDAsIDB4ODAsIDB4MTAsIDB4MDAsIDB4MDIsIDB4ODAsIDB4MDgsIDB4MDAsCisweDIwLCAweDA0LCAweDgyLCAweDAwLCAweDAwLCAweDAyLCAweDAwLCAweDA4LCAweDAwLCAweDIyLCAweDA0LCAweDgwLCAweDAwLAorMHgwMCwgMHgwMiwgMHgyMCwgMHgwOCwgMHgwMCwgMHgyMCwgMHgwNCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMiwgMHgyMCwgMHgwOCwKKzB4MDAsIDB4MjAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDgsIDB4MDAsIDB4NjAsIDB4MDQsIDB4ODAsCisweDAxLCAweDgwLCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweEEyLCAweDQyLCAweDQwLCAweDAwLAorMHgwMSwgMHgwMSwgMHgwNSwgMHgwNCwgMHgxNCwgMHgxMCwgMHg0MCwgMHg0MCwgMHg0MCwgMHgwMSwgMHgwMSwgMHgwQywgMHg0NCwKKzB4MTAsIDB4MTAsIDB4NTAsIDB4NDAsIDB4MDAsIDB4ODEsIDB4MDEsIDB4MDQsIDB4MDAsIDB4MzAsIDB4MDAsIDB4NTAsIDB4MDAsCisweDAwLCAweDgxLCAweDAxLCAweDBDLCAweDA2LCAweDEwLCAweDEwLCAweDUwLCAweDQwLCAweDAwLCAweDAxLCAweDAxLCAweDA0LAorMHg0NiwgMHgxNCwgMHgxMCwgMHg0MCwgMHg2MCwgMHg0NCwgMHgwMSwgMHgwMSwgMHgwNCwgMHgwNCwgMHgzMCwgMHgxMCwgMHgwMCwKKzB4ODgsIDB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4QTIsIDB4MDAsIDB4QTAsIDB4MDYsIDB4ODAsCisweDFBLCAweDAwLCAweDZFLCAweDAwLCAweEE4LCAweDAxLCAweDgwLCAweDA2LCAweDgwLCAweDFBLCAweDAwLCAweDZBLCAweDAwLAorMHhCOCwgMHgwMSwgMHhBMCwgMHgwNiwgMHg4MCwgMHgxQSwgMHgwMCwgMHg2QSwgMHgwMCwgMHhBOCwgMHgwMSwgMHhBMCwgMHgwNiwKKzB4ODAsIDB4MUEsIDB4MDAsIDB4NjgsIDB4MDAsIDB4QjAsIDB4MDEsIDB4ODAsIDB4MDYsIDB4ODAsIDB4MUEsIDB4MDAsIDB4NkEsCisweDAwLCAweEE4LCAweDAxLCAweEEwLCAweDA2LCAweDgwLCAweDFCLCAweDAwLCAweDZBLCAweDAwLCAweEE4LCAweDAxLCAweDg4LAorMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhBMywgMHgwMiwgMHhDMCwgMHgwNiwgMHgwMCwgMHgxMiwKKzB4MDAsIDB4RTgsIDB4MDAsIDB4QjAsIDB4MDEsIDB4QzAsIDB4MDYsIDB4ODAsIDB4M0EsIDB4MDAsIDB4NEMsIDB4MDAsIDB4QTAsCisweDAzLCAweEMwLCAweDA2LCAweDgwLCAweDEzLCAweDAwLCAweDRFLCAweDAwLCAweEIwLCAweDAxLCAweEMwLCAweDA2LCAweDAwLAorMHgxMywgMHgwMCwgMHg2RSwgMHgwMCwgMHhBMCwgMHgwMywgMHhDMCwgMHgwNiwgMHgwMCwgMHgxQiwgMHgwMCwgMHg0QywgMHgwMCwKKzB4QjAsIDB4MDEsIDB4QzAsIDB4MDQsIDB4MDAsIDB4M0EsIDB4MDAsIDB4NkUsIDB4MDAsIDB4QjAsIDB4MDEsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDIwLCAweDBDLCAweDgwLCAweDExLCAweDAwLAorMHg2MiwgMHgwMCwgMHgwOCwgMHgwMiwgMHgyMCwgMHgwQywgMHg4MCwgMHgxOCwgMHgwMCwgMHg0MiwgMHgwMCwgMHg4QSwgMHgwMSwKKzB4MjAsIDB4MEMsIDB4MDIsIDB4MTAsIDB4MDAsIDB4NDQsIDB4MDAsIDB4MTAsIDB4MDEsIDB4MDAsIDB4MEMsIDB4MDIsIDB4MTAsCisweDAwLCAweDQwLCAweDAwLCAweDgwLCAweDAxLCAweDIwLCAweDBDLCAweDAwLCAweDEwLCAweDAwLCAweDQwLCAweDAwLCAweDA4LAorMHg4MywgMHgwMCwgMHgwNCwgMHg4MCwgMHgxOCwgMHgwMCwgMHhDMiwgMHgwMCwgMHgwOCwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MkMsIDB4MDAsIDB4OTAsIDB4MDAsIDB4NDAsCisweDAyLCAweDAwLCAweDBCLCAweDAwLCAweDJDLCAweDAwLCAweDkwLCAweDEyLCAweDQwLCAweDAyLCAweDAwLCAweDIxLCAweDAwLAorMHhBOCwgMHgwMSwgMHg5MCwgMHgxMiwgMHg0MCwgMHgwMiwgMHgwMCwgMHgyMSwgMHgwMiwgMHhBQywgMHgwOCwgMHg5MCwgMHgyMiwKKzB4NDAsIDB4MDIsIDB4MDAsIDB4MjEsIDB4MDAsIDB4QUMsIDB4MDUsIDB4OTAsIDB4MjIsIDB4NDAsIDB4MDgsIDB4MDAsIDB4MkIsCisweDAyLCAweEE0LCAweDAwLCAweDkwLCAweDAwLCAweEMwLCAweDAwLCAweDAwLCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4MCwgMHg4QywgMHgwMCwgMHgzMiwgMHgwQSwgMHhDQSwgMHgyOCwKKzB4MjIsIDB4QTMsIDB4ODAsIDB4OEMsIDB4MDIsIDB4MzIsIDB4MDYsIDB4NDgsIDB4MjgsIDB4MjgsIDB4QTIsIDB4ODgsIDB4OEMsCisweDgyLCAweDEyLCAweDAwLCAweDQ4LCAweDA4LCAweDIwLCAweEExLCAweDgwLCAweDhDLCAweDAzLCAweDMyLCAweDAwLCAweDQ4LAorMHgyOCwgMHgyOCwgMHhBMiwgMHg4MCwgMHg4QywgMHgwMCwgMHgyMiwgMHgwNiwgMHgwOCwgMHgzOCwgMHgyMCwgMHhBMywgMHg4MCwKKzB4ODQsIDB4ODIsIDB4MzIsIDB4MDIsIDB4Q0EsIDB4MDgsIDB4MjAsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweEM0LCAweEEwLCAweDE2LCAweDgzLCAweDVBLCAweDBDLCAweDRBLCAweDMxLCAweEE4LAorMHhDNSwgMHhBMCwgMHgxNiwgMHg4MywgMHg1QSwgMHgwRSwgMHg2OCwgMHgzMSwgMHhBOCwgMHg4NSwgMHhBMCwgMHgxNiwgMHg4MywKKzB4NUEsIDB4MEMsIDB4NjAsIDB4MzEsIDB4QTgsIDB4ODUsIDB4QTAsIDB4MTYsIDB4MDMsIDB4NUEsIDB4MEMsIDB4NkEsIDB4MzEsCisweEE4LCAweEM1LCAweEEwLCAweDE2LCAweDAzLCAweDU4LCAweDBFLCAweDI4LCAweDMxLCAweEE4LCAweEU0LCAweDgwLCAweDEyLAorMHg4MiwgMHg1QSwgMHgwQywgMHg2QSwgMHgzMSwgMHhBOCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4MDAsIDB4OTAsIDB4MDEsIDB4NDAsIDB4MDYsIDB4MDAsIDB4MDksCisweDAwLCAweDY0LCAweDAwLCAweDkwLCAweDAwLCAweDQyLCAweDAyLCAweDAwLCAweDkxLCAweDAwLCAweEE0LCAweDAwLCAweDkwLAorMHgwMCwgMHg0MCwgMHgwMiwgMHgwMCwgMHg5MSwgMHgwMCwgMHhBNCwgMHg4MCwgMHg5MCwgMHgwOCwgMHg0MCwgMHgwMiwgMHgwMCwKKzB4MzEsIDB4MDAsIDB4QTQsIDB4ODAsIDB4ODAsIDB4MDAsIDB4NDIsIDB4MEMsIDB4MDAsIDB4MDksIDB4MjAsIDB4NjQsIDB4MDIsCisweDkwLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgxMCwgMHgyMiwgMHg0MiwgMHg4OCwgMHgxOCwgMHgyMCwgMHg0MiwgMHg4MCwgMHg4OCwgMHgxMSwgMHgyMiwKKzB4MDYsIDB4ODgsIDB4MTgsIDB4MjAsIDB4NjIsIDB4ODQsIDB4ODgsIDB4MDEsIDB4MjIsIDB4MDYsIDB4ODgsIDB4MTgsIDB4MjAsCisweDYwLCAweDg0LCAweDg4LCAweDAxLCAweDIyLCAweDA2LCAweDg4LCAweDE4LCAweDIwLCAweDYyLCAweDg0LCAweDg4LCAweDIxLAorMHgyNiwgMHgwNiwgMHg4OCwgMHgxOCwgMHgyMCwgMHg2MiwgMHg4MCwgMHg4OCwgMHgyMSwgMHgyMiwgMHgwNiwgMHg4OCwgMHgxOCwKKzB4MjAsIDB4NjIsIDB4ODQsIDB4ODgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweEEyLCAweDBBLCAweDA4LCAweDJBLCAweDIwLCAweDA4LCAweDAwLCAweEE4LCAweDAyLCAweEEyLCAweDBBLAorMHg4NCwgMHgyQSwgMHgyMCwgMHhBQSwgMHg4MCwgMHhBMCwgMHgwMiwgMHhBNiwgMHgwQSwgMHgxQywgMHgyQSwgMHgyOCwgMHhBOCwKKzB4QzAsIDB4QTAsIDB4MDIsIDB4QTIsIDB4MEEsIDB4ODgsIDB4MkEsIDB4MjAsIDB4QUEsIDB4ODAsIDB4QTAsIDB4MDIsIDB4QTIsCisweDBBLCAweDg4LCAweDJBLCAweEEwLCAweEFBLCAweDgwLCAweEE5LCAweDAyLCAweEEyLCAweDBBLCAweDE4LCAweDI4LCAweDIwLAorMHhBOCwgMHg4MCwgMHhBOCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MTAsIDB4ODQsIDB4NDIsIDB4MTAsIDB4MEEsIDB4NDEsIDB4QTgsIDB4MDQsIDB4QTAsIDB4MTIsIDB4ODAsIDB4NDIsIDB4MTAsCisweDJBLCAweDQxLCAweDI4LCAweDg0LCAweEExLCAweDEwLCAweDg0LCAweDRBLCAweDEwLCAweDJBLCAweDYxLCAweEE4LCAweDA0LAorMHhBMSwgMHgxMCwgMHg4NCwgMHg0QSwgMHgxOCwgMHgyQSwgMHg2MSwgMHhBOCwgMHg0NCwgMHhBMSwgMHgxMCwgMHg4NCwgMHg0QSwKKzB4MTQsIDB4MkEsIDB4NjEsIDB4QTgsIDB4MDQsIDB4QTEsIDB4MTIsIDB4ODQsIDB4NEEsIDB4MTAsIDB4MkEsIDB4MDEsIDB4QTgsCisweDA0LCAweDgxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLAorMHg4MCwgMHg0MCwgMHg4MSwgMHgwMiwgMHg4RCwgMHgwOCwgMHgxNCwgMHgwMCwgMHg1MCwgMHg4MCwgMHg0MCwgMHg4MywgMHgwMiwKKzB4MDUsIDB4MDgsIDB4MTQsIDB4MjAsIDB4NTAsIDB4ODAsIDB4NDAsIDB4MDEsIDB4MDAsIDB4MDUsIDB4MDgsIDB4MTQsIDB4MjAsCisweDUwLCAweDAwLCAweDQwLCAweDAxLCAweDAyLCAweDA1LCAweDA4LCAweDE0LCAweDI4LCAweDUwLCAweDgwLCAweDQwLCAweDAxLAorMHgwMiwgMHg4NSwgMHgwMCwgMHgxNCwgMHgyMCwgMHg1MCwgMHgwMCwgMHg0MCwgMHgwMSwgMHgwMCwgMHgwNSwgMHgwMCwgMHgxNCwKKzB4MjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzAsIDB4QzAsCisweENBLCAweDAwLCAweDJCLCAweDAzLCAweEE0LCAweDBDLCAweDEwLCAweDMyLCAweEMwLCAweENBLCAweDAwLCAweDAxLCAweDAzLAorMHgwQywgMHgwQywgMHhCMCwgMHgzMiwgMHg0MCwgMHhDMCwgMHg4MCwgMHgyMSwgMHgwMywgMHg4NiwgMHgwQywgMHhBMSwgMHgzMiwKKzB4MDAsIDB4QzgsIDB4ODAsIDB4MDEsIDB4MDMsIDB4ODYsIDB4MEMsIDB4QTAsIDB4MzIsIDB4NDAsIDB4QzgsIDB4MDAsIDB4MjAsCisweDAzLCAweDg2LCAweDBDLCAweDEwLCAweDMwLCAweDYwLCAweEM4LCAweDIwLCAweDIxLCAweDAzLCAweDg0LCAweDBDLCAweEIwLAorMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHhBMiwgMHg0RSwKKzB4ODAsIDB4M0EsIDB4MDksIDB4RUUsIDB4MDQsIDB4QTAsIDB4MTMsIDB4ODAsIDB4NEUsIDB4ODIsIDB4M0EsIDB4MTEsIDB4RUEsCisweDA0LCAweEI4LCAweDEzLCAweDkwLCAweDRFLCAweDkwLCAweDNBLCAweDIxLCAweDZBLCAweDA0LCAweEE4LCAweDEzLCAweEEwLAorMHg0RSwgMHg4OCwgMHgzQSwgMHgyMSwgMHhDQSwgMHgwNCwgMHhBOCwgMHgxMywgMHgxMCwgMHg0QywgMHg4NCwgMHgzMiwgMHgwMSwKKzB4RTgsIDB4MDQsIDB4QTgsIDB4MTMsIDB4QTAsIDB4NEUsIDB4ODAsIDB4M0IsIDB4MDEsIDB4RUEsIDB4MDQsIDB4QTksIDB4MDMsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweEM0LCAweDEwLCAweDEyLCAweDAzLAorMHgwOCwgMHg4QywgMHgyMCwgMHgzMiwgMHg4MCwgMHhDNCwgMHgwOCwgMHgwMiwgMHgwMywgMHgwOCwgMHgwQywgMHgyMCwgMHgzMSwKKzB4ODIsIDB4QzAsIDB4MTgsIDB4MDIsIDB4MDMsIDB4MDgsIDB4MEMsIDB4MjAsIDB4MzEsIDB4ODAsIDB4QzAsIDB4MTgsIDB4MDIsCisweDAzLCAweDA4LCAweDBDLCAweDIwLCAweDMxLCAweDgyLCAweEMwLCAweDE4LCAweDAyLCAweDAzLCAweDA4LCAweDBDLCAweDIwLAorMHgzMCwgMHg4NiwgMHhDMCwgMHgwMCwgMHgwMiwgMHgyMywgMHgwOCwgMHgwQywgMHgyMCwgMHgzMSwgMHg4NCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4RkMsIDB4RkYsIDB4RjIsIDB4RkYsIDB4Q0IsCisweEZGLCAweDJGLCAweEZGLCAweEJGLCAweEZDLCAweEZGLCAweEYyLCAweEZGLCAweENCLCAweEZGLCAweDJGLCAweEZGLCAweEJGLAorMHhGQywgMHhGRiwgMHhGMiwgMHhGRiwgMHhDQiwgMHhGRiwgMHgyRiwgMHhGRiwgMHhCRiwgMHhGQywgMHhGRiwgMHhGMiwgMHhGRiwKKzB4Q0IsIDB4RkYsIDB4MkYsIDB4RkYsIDB4QkYsIDB4RkMsIDB4RkYsIDB4RjIsIDB4RkYsIDB4Q0IsIDB4RkYsIDB4MkYsIDB4RkYsCisweEJGLCAweEZDLCAweEZGLCAweEYyLCAweEZGLCAweENCLCAweEZGLCAweDJGLCAweEZGLCAweEJGLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweEI0LCAweERGLCAweEQwLCAweDZDLCAweDQzLCAweEIzLCAweDBELAorMHhFRCwgMHhCRiwgMHgzNCwgMHhGQiwgMHhEMiwgMHhGRSwgMHhDQiwgMHhGRiwgMHgwRCwgMHhDRCwgMHhCRSwgMHg3QywgMHhEQiwKKzB4RjAsIDB4RkYsIDB4Q0IsIDB4RkYsIDB4MkYsIDB4RUQsIDB4QkYsIDB4N0MsIDB4REIsIDB4RjAsIDB4RkYsIDB4Q0IsIDB4RkYsCisweDJGLCAweENELCAweEJFLCAweDdDLCAweERCLCAweEYwLCAweEZGLCAweENCLCAweEI3LCAweDJGLCAweERGLCAweDM2LCAweDdDLAorMHhEQiwgMHhGMCwgMHg2RCwgMHg0MywgMHhCMywgMHgyRiwgMHhFRCwgMHgzNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4Q0MsIDB4M0YsIDB4MzIsIDB4RjMsIDB4QzgsIDB4Q0MsIDB4MjMsIDB4RjMsCisweEJGLCAweENDLCAweEZDLCAweDMyLCAweEZGLCAweENCLCAweEZGLCAweDIzLCAweDMzLCAweEJGLCAweEZDLCAweDNDLCAweEYyLAorMHhGRiwgMHhDQiwgMHhGRiwgMHgyRiwgMHhGMywgMHhCRiwgMHhGQywgMHgzQywgMHhGMiwgMHhGRiwgMHhDQiwgMHhGRiwgMHgyRiwKKzB4MzMsIDB4QkYsIDB4RkMsIDB4M0MsIDB4RjIsIDB4RkYsIDB4Q0IsIDB4Q0YsIDB4MkYsIDB4M0YsIDB4OEYsIDB4RkMsIDB4M0MsCisweEYyLCAweEYzLCAweEM4LCAweENDLCAweDJGLCAweEYzLCAweDhGLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhEQywgMHg3OCwgMHg3MiwgMHg2MywgMHg0OCwgMHhFQywgMHgyMSwgMHhCMSwgMHg5RiwKKzB4REMsIDB4N0UsIDB4MTIsIDB4N0IsIDB4NDgsIDB4OEMsIDB4MjEsIDB4QjcsIDB4ODcsIDB4QzQsIDB4N0UsIDB4MTIsIDB4NjMsCisweDQ4LCAweDhDLCAweDIxLCAweDM3LCAweDg2LCAweEM0LCAweDdFLCAweDEyLCAweDYzLCAweDQ4LCAweDhDLCAweDIxLCAweEI3LAorMHg4NywgMHhDNCwgMHg3RSwgMHgxMiwgMHg2MywgMHg0OCwgMHg4QywgMHgyMSwgMHhCMSwgMHg5RiwgMHhDNCwgMHgxOCwgMHgxMiwKKzB4N0IsIDB4NDgsIDB4OEMsIDB4MjcsIDB4MzcsIDB4OUUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDBFLCAweDAyLCAweDM5LCAweDBBLCAweEU0LCAweDIwLCAweDkwLCAweDgzLAorMHgwMCwgMHgwRSwgMHgwMiwgMHgzOSwgMHgwOCwgMHhFMCwgMHgyMCwgMHg4MCwgMHg4MywgMHg0MCwgMHgwRSwgMHgwMiwgMHgzOSwKKzB4MDgsIDB4RTQsIDB4MjAsIDB4OTAsIDB4ODMsIDB4MDAsIDB4MEUsIDB4MDIsIDB4MzgsIDB4MEEsIDB4RTQsIDB4MjAsIDB4ODAsCisweDgzLCAweDQwLCAweDBFLCAweDAyLCAweDM4LCAweDA2LCAweEU2LCAweDIwLCAweDkwLCAweEEzLCAweDQwLCAweDBFLCAweDAyLAorMHgzOSwgMHgwOCwgMHhFNCwgMHgyOCwgMHg5MCwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MjAsIDB4NjAsIDB4OEUsIDB4MDAsIDB4M0EsIDB4MDIsIDB4RUEsIDB4MDgsIDB4QTAsIDB4MjMsIDB4QTAsCisweDhFLCAweDAwLCAweDNBLCAweDAyLCAweEVBLCAweDA4LCAweEI4LCAweDIzLCAweEEwLCAweDhFLCAweDAwLCAweDNBLCAweDAyLAorMHhFOCwgMHgwOCwgMHhBMCwgMHgyMywgMHhBMCwgMHg4RSwgMHg4MCwgMHgzQSwgMHgwMiwgMHhFQSwgMHgwOCwgMHhBOCwgMHgyMywKKzB4QTAsIDB4OEUsIDB4ODAsIDB4M0EsIDB4MDIsIDB4RUUsIDB4MDgsIDB4QTgsIDB4MjMsIDB4QTAsIDB4OEUsIDB4ODAsIDB4M0EsCisweDAyLCAweEVBLCAweDA4LCAweEE4LCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHg0MCwgMHg4MCwgMHgwNCwgMHgwMSwgMHgxMiwgMHgwNiwgMHg0OCwgMHgxMCwgMHgyMCwgMHg0MSwgMHg4MCwgMHgwNCwKKzB4MDEsIDB4MTIsIDB4MDQsIDB4NDgsIDB4MTAsIDB4MjAsIDB4NDEsIDB4ODAsIDB4MDQsIDB4MDEsIDB4MTIsIDB4MDQsIDB4NDgsCisweDEwLCAweDIwLCAweDQxLCAweDgwLCAweDA0LCAweDAxLCAweDEyLCAweDA0LCAweDQ4LCAweDEwLCAweDIwLCAweDQxLCAweDgwLAorMHgwNCwgMHgwMSwgMHgxMiwgMHgwNiwgMHg0OCwgMHgxMCwgMHgyMCwgMHg2MSwgMHg4MCwgMHgwNCwgMHgwMSwgMHgxMiwgMHgwNCwKKzB4NDgsIDB4MTgsIDB4MjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDgwLCAweDBFLCAweDAwLCAweDE4LCAweDAwLCAweDYwLCAweDAwLCAweDgwLCAweDAxLCAweDIwLCAweDA2LCAweDAwLAorMHgxOCwgMHgwMCwgMHg2MiwgMHgwMCwgMHg4MCwgMHgwMSwgMHgwMCwgMHgwNiwgMHgwMCwgMHgxOCwgMHgwMCwgMHg2MCwgMHgwMCwKKzB4ODAsIDB4MDEsIDB4MjgsIDB4MDYsIDB4ODAsIDB4MTgsIDB4MDIsIDB4NjAsIDB4MDAsIDB4ODgsIDB4MDEsIDB4MDAsIDB4MDYsCisweDgwLCAweDE4LCAweDAwLCAweDYwLCAweDAwLCAweDgwLCAweDAxLCAweDAwLCAweDA2LCAweDAwLCAweDE4LCAweDAwLCAweDYwLAorMHgwMCwgMHg4MCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwKKzB4MjAsIDB4NEUsIDB4MDAsIDB4MzgsIDB4MDUsIDB4RTIsIDB4MDQsIDB4ODAsIDB4MTMsIDB4MjAsIDB4NEUsIDB4MDAsIDB4MzgsCisweDA5LCAweEUyLCAweDA0LCAweDg4LCAweDEzLCAweDIwLCAweDRFLCAweDAwLCAweDM4LCAweDAxLCAweEUwLCAweDA0LCAweDgwLAorMHgxMywgMHgyMCwgMHg0RSwgMHg4MiwgMHgzOCwgMHgwNSwgMHhFMiwgMHgwNCwgMHg4OCwgMHgxMiwgMHgyMCwgMHg0RSwgMHg4MCwKKzB4MzgsIDB4QTEsIDB4RTIsIDB4MDQsIDB4MjgsIDB4NTEsIDB4MjAsIDB4NEUsIDB4ODAsIDB4MzAsIDB4MDEsIDB4RTIsIDB4MTQsCisweDg4LCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwNiwgMHg4MCwgMHgxOCwgMHgwMCwgMHg2MCwgMHgwMCwgMHg4OCwgMHgwMSwgMHgwMCwgMHgwNiwgMHg4MCwgMHgxOCwgMHgwMCwKKzB4NjAsIDB4MDAsIDB4ODAsIDB4MDEsIDB4MDAsIDB4MDYsIDB4ODAsIDB4MTgsIDB4MDAsIDB4NjIsIDB4MDAsIDB4ODgsIDB4ODEsCisweDAwLCAweDA2LCAweDAyLCAweDE4LCAweDAwLCAweDYwLCAweDAwLCAweDgwLCAweDAxLCAweDAwLCAweDA2LCAweDAwLCAweDE4LAorMHgwMCwgMHg2MCwgMHgwMCwgMHg4MCwgMHgwMSwgMHgwMCwgMHgwNiwgMHgwOCwgMHgxMCwgMHgwMCwgMHg2MCwgMHgwMCwgMHg4MCwKKzB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MjAsIDB4MjQsCisweDgwLCAweDkwLCAweDAxLCAweDQyLCAweDAyLCAweDA4LCAweDI5LCAweDIwLCAweDI0LCAweDgwLCAweDkwLCAweDAyLCAweDQyLAorMHgwMiwgMHgwOCwgMHgxMSwgMHgyMCwgMHgyNCwgMHg4MCwgMHg5MCwgMHgwMCwgMHg0MiwgMHgwMiwgMHgwOCwgMHgwOSwgMHgyMCwKKzB4QTQsIDB4ODAsIDB4OTAsIDB4MDEsIDB4NDIsIDB4MDIsIDB4MDgsIDB4MTEsIDB4MjAsIDB4QTQsIDB4ODAsIDB4OTAsIDB4MDEsCisweDQyLCAweDA0LCAweDA4LCAweDM5LCAweDIwLCAweDQ0LCAweDgwLCAweDE4LCAweDAxLCAweDQyLCAweDA2LCAweDA4LCAweDAxLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhDNCwgMHgwMCwgMHgxMiwgMHg4MSwKKzB4NDgsIDB4MDUsIDB4MjIsIDB4MTEsIDB4ODgsIDB4NDQsIDB4MDAsIDB4MTIsIDB4ODEsIDB4NDgsIDB4MDQsIDB4MjAsIDB4MzEsCisweDgwLCAweDU0LCAweDIwLCAweDEyLCAweDgxLCAweDQ4LCAweDA0LCAweDIyLCAweDExLCAweDg4LCAweEM0LCAweDAwLCAweDEyLAorMHgwMywgMHg0OCwgMHgwRCwgMHgyMiwgMHgxMSwgMHg4MCwgMHg1NCwgMHgyMCwgMHgxMiwgMHgwMSwgMHg0OCwgMHgwNSwgMHgyMCwKKzB4MTUsIDB4ODgsIDB4NTQsIDB4MjAsIDB4NTIsIDB4ODEsIDB4NjgsIDB4MEQsIDB4MjIsIDB4MUQsIDB4ODgsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDAzLCAweDMwLCAweDAwLCAweEM4LCAweDAwLCAweDAwLAorMHgwMywgMHgwMCwgMHgwQywgMHgwMCwgMHgzMCwgMHgwMCwgMHhDQSwgMHgwMCwgMHgyMCwgMHgwMywgMHhBMCwgMHgwQywgMHgwMCwKKzB4MzIsIDB4MDAsIDB4QzAsIDB4MDIsIDB4MDAsIDB4MDMsIDB4MDAsIDB4MEMsIDB4MDAsIDB4MzAsIDB4MDAsIDB4Q0EsIDB4MDAsCisweDI4LCAweDAzLCAweDgwLCAweDBDLCAweDgwLCAweDMyLCAweDAwLCAweENBLCAweDAwLCAweDI4LCAweDAzLCAweEEwLCAweDBDLAorMHg4MCwgMHg3MiwgMHgwMCwgMHhDQSwgMHgwMCwgMHgyOCwgMHgwMywgMHg4MCwgMHgxQywgMHg4MCwgMHgwMiwgMHgwOCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4MDgsIDB4MjAsIDB4MkMsIDB4MDAsIDB4OTAsIDB4MDAsCisweDAwLCAweDAyLCAweDAwLCAweDc4LCAweDAwLCAweDI2LCAweDAwLCAweDkwLCAweDAzLCAweDYwLCAweDAyLCAweDA4LCAweDAzLAorMHgwMCwgMHgyMCwgMHgwMCwgMHg5MCwgMHgwMCwgMHg0MCwgMHgwMiwgMHgwMCwgMHgxOSwgMHgwMCwgMHhFMiwgMHgwMCwgMHg4OCwKKzB4MDAsIDB4ODAsIDB4MDYsIDB4ODAsIDB4MDAsIDB4MDAsIDB4RTIsIDB4MDEsIDB4ODgsIDB4MDAsIDB4MjAsIDB4MDAsIDB4ODAsCisweDI4LCAweDAwLCAweDAyLCAweDAwLCAweDA4LCAweDAwLCAweDgwLCAweDBBLCAweDgwLCAweDAwLCAweDBDLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMywgMHgwMiwgMHg0MCwgMHgwOCwgMHg4MCwgMHgwMSwgMHgwMCwgMHgwNCwKKzB4MDAsIDB4MTgsIDB4MDAsIDB4NDAsIDB4MDAsIDB4ODAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MTAsIDB4MDIsIDB4NDAsCisweDAwLCAweDgyLCAweDAxLCAweDAwLCAweDA2LCAweDAwLCAweDE4LCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLAorMHg4NCwgMHgwMCwgMHgxMCwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgxMCwgMHgwMCwKKzB4NDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4ODQsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDAzLCAweDAyLCAweDIwLCAweDA2LCAweDgwLCAweDEwLCAweDAwLCAweDQyLCAweDAwLAorMHgwOCwgMHgwMSwgMHg2MCwgMHgwNiwgMHg4MCwgMHgxMCwgMHgwMCwgMHg2NiwgMHgwMCwgMHg4OCwgMHgwMSwgMHgyMCwgMHgwNCwKKzB4ODAsIDB4MTAsIDB4MDAsIDB4NDIsIDB4MDAsIDB4MDgsIDB4MDEsIDB4NDAsIDB4MDYsIDB4ODAsIDB4MTksIDB4MDAsIDB4NjIsCisweDAwLCAweDk4LCAweDAxLCAweDIwLCAweDA2LCAweDgwLCAweDE5LCAweDAwLCAweDYyLCAweDAwLCAweDg4LCAweDAxLCAweDIwLAorMHgwNiwgMHg4MCwgMHgxOCwgMHgwMCwgMHg2MiwgMHgwMCwgMHg4OCwgMHgwMSwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDgsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDYsIDB4MDAsIDB4MTksIDB4MDAsIDB4NjQsIDB4MDAsIDB4OTAsCisweDExLCAweDAwLCAweDA2LCAweDAwLCAweDE5LCAweDAxLCAweDYwLCAweDAwLCAweDgwLCAweDAxLCAweDQwLCAweDA2LCAweDAwLAorMHgxOSwgMHgwMCwgMHg2NCwgMHgwMCwgMHg5MCwgMHgxMSwgMHgwMCwgMHg0NiwgMHgwMCwgMHgxOCwgMHgwMCwgMHg2NCwgMHgwNCwKKzB4ODAsIDB4MDEsIDB4NDAsIDB4NDYsIDB4MDAsIDB4MTgsIDB4MDAsIDB4NjYsIDB4MDAsIDB4OTAsIDB4MDEsIDB4NDAsIDB4MDYsCisweDAwLCAweDE5LCAweDAwLCAweDY0LCAweDAwLCAweDkwLCAweDQxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMiwgMHhBMiwgMHg0MiwgMHg2MCwgMHgwQywgMHgwMSwgMHgzMCwgMHgwNCwgMHhDMiwgMHgxMCwgMHgwMCwgMHg0MywKKzB4MjAsIDB4MEMsIDB4MDEsIDB4MzAsIDB4MDQsIDB4QzIsIDB4MTAsIDB4MTgsIDB4NDMsIDB4MjAsIDB4MEMsIDB4MDEsIDB4MzAsCisweDA0LCAweEMwLCAweDEwLCAweDAwLCAweDQzLCAweDIwLCAweDBDLCAweDgxLCAweDMwLCAweDA0LCAweEMyLCAweDEwLCAweDA4LAorMHg0MywgMHgyMCwgMHgwQywgMHg4MSwgMHgzMCwgMHgwNCwgMHhDMiwgMHgxMCwgMHgwOCwgMHg0MywgMHgyMCwgMHgwQywgMHg4MSwKKzB4MzAsIDB4MDQsIDB4QzIsIDB4MTAsIDB4MDgsIDB4MDMsIDB4ODgsIDB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAyLCAweDAwLCAweDEwLCAweDAwLCAweDRDLCAweDAwLCAweDMwLCAweDAwLCAweEMwLCAweDA0LCAweDAwLCAweDAzLCAweDAwLAorMHg0QywgMHgwMCwgMHgzMCwgMHgwMCwgMHhDMCwgMHgwNCwgMHgwMCwgMHgwMywgMHgwMCwgMHg0QywgMHgwMCwgMHgzMCwgMHgwMSwKKzB4QzAsIDB4MDQsIDB4MDAsIDB4MDMsIDB4MDAsIDB4MEMsIDB4MDAsIDB4MzAsIDB4MDAsIDB4QzAsIDB4MDAsIDB4MDAsIDB4MDMsCisweDAwLCAweDBDLCAweDAwLCAweDMwLCAweDAwLCAweEMwLCAweDAwLCAweDAwLCAweDAzLCAweDAwLCAweDBDLCAweDAwLCAweDMwLAorMHgwMCwgMHhDMCwgMHgwMCwgMHgwMCwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwKKzB4MDAsIDB4RDAsIDB4MDAsIDB4NEMsIDB4MDMsIDB4MzAsIDB4MDQsIDB4QzAsIDB4MzQsIDB4MDAsIDB4QzMsIDB4MjAsIDB4NEMsCisweDAzLCAweDMwLCAweDBDLCAweEMyLCAweDM0LCAweDAwLCAweDQzLCAweDAwLCAweDRDLCAweDAzLCAweDMwLCAweDBELCAweEMwLAorMHgzNCwgMHgwMCwgMHhDMywgMHgyMCwgMHgwQywgMHg4MywgMHgzMCwgMHgwNCwgMHhDMCwgMHgzMCwgMHgwOCwgMHg0MywgMHgwMCwKKzB4MEMsIDB4ODMsIDB4MzAsIDB4MDQsIDB4QzIsIDB4MTAsIDB4MDAsIDB4NDMsIDB4MDAsIDB4MEMsIDB4MDEsIDB4MzAsIDB4MDQsCisweEMwLCAweDEwLCAweDAwLCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweEEyLAorMHhDMiwgMHgyMCwgMHgwRSwgMHgwMywgMHgxMCwgMHgwNCwgMHg2MiwgMHgzMCwgMHgwMCwgMHhDMSwgMHgyMCwgMHgwNiwgMHgwMywKKzB4MTAsIDB4MEMsIDB4NjIsIDB4MzAsIDB4ODgsIDB4NDMsIDB4MjAsIDB4MDYsIDB4MDMsIDB4MTgsIDB4MEMsIDB4NDAsIDB4MzAsCisweDAwLCAweEMxLCAweDIwLCAweDA2LCAweDgxLCAweDE4LCAweDA0LCAweDYyLCAweDMwLCAweDg4LCAweDQxLCAweDIwLCAweDA2LAorMHg4MywgMHgxOCwgMHgwNCwgMHg2MCwgMHgxMCwgMHg4OCwgMHg0MSwgMHgyMCwgMHgwNiwgMHg4MSwgMHgxOCwgMHgwNCwgMHg2MiwKKzB4MTAsIDB4ODgsIDB4MDEsIDB4ODgsIDB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4ODAsIDB4NDIsCisweDAwLCAweDA2LCAweDgxLCAweDEwLCAweDA0LCAweDQwLCAweDEwLCAweDA4LCAweDQxLCAweDAwLCAweDBDLCAweDgxLCAweDEwLAorMHgwNCwgMHhDMCwgMHgxMCwgMHg4MCwgMHg0MSwgMHgwMCwgMHgwNCwgMHg4MSwgMHgxMCwgMHgwNCwgMHg0MiwgMHgxMCwgMHgwOCwKKzB4NDEsIDB4MDAsIDB4MDgsIDB4MDEsIDB4MzAsIDB4MDQsIDB4NDAsIDB4MTAsIDB4MDAsIDB4NDMsIDB4MDAsIDB4MDQsIDB4MDEsCisweDMwLCAweDA0LCAweDQyLCAweDEwLCAweDAwLCAweDQxLCAweDAwLCAweDA0LCAweDAxLCAweDEwLCAweDA0LCAweDQwLCAweDEwLAorMHgwMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwQSwgMHg4MCwgMHg0MiwgMHgyMCwKKzB4MDQsIDB4ODEsIDB4MTAsIDB4MDQsIDB4NjIsIDB4MTAsIDB4MDgsIDB4NDEsIDB4MjAsIDB4MEMsIDB4ODEsIDB4MTAsIDB4MDQsCisweEMyLCAweDEwLCAweDA4LCAweDQxLCAweDIwLCAweDA2LCAweDgxLCAweDEwLCAweDA0LCAweDQyLCAweDEwLCAweDA4LCAweDQxLAorMHgyMCwgMHgwQywgMHg4MywgMHgzMCwgMHgwNCwgMHg2MiwgMHgxMCwgMHgwOCwgMHg0MywgMHgyMCwgMHgwNiwgMHg4MSwgMHgzMCwKKzB4MDQsIDB4NjIsIDB4MTAsIDB4ODgsIDB4NDEsIDB4MjAsIDB4MDYsIDB4ODEsIDB4MTgsIDB4MDQsIDB4NjIsIDB4MTAsIDB4ODgsCisweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweEEyLCAweDAyLCAweDAwLCAweDA4LAorMHg4MCwgMHgwMCwgMHgwMCwgMHhBMiwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwOCwgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwKKzB4MDAsIDB4MDAsIDB4MDIsIDB4MjAsIDB4MEEsIDB4ODAsIDB4MjAsIDB4MDAsIDB4ODIsIDB4MDAsIDB4MDgsIDB4MDIsIDB4MDAsCisweDA4LCAweDAwLCAweDIwLCAweDAwLCAweEEyLCAweDAwLCAweDAwLCAweDAyLCAweDIwLCAweDBBLCAweDAwLCAweDIwLCAweDAwLAorMHhBMCwgMHgwMCwgMHg4OCwgMHgwMiwgMHgyMCwgMHgwQSwgMHg4MCwgMHgyOCwgMHgwMCwgMHhBMiwgMHgwMCwgMHg4OCwgMHg0MiwKKzB4ODgsIDB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4MDAsIDB4NjAsIDB4MDAsIDB4ODIsIDB4MDEsCisweDA4LCAweDA2LCAweDIwLCAweDE4LCAweDgwLCAweDYwLCAweDAwLCAweDgyLCAweDAxLCAweDA4LCAweDA2LCAweDIwLCAweDE4LAorMHg4MCwgMHg2MCwgMHgwMCwgMHg4MiwgMHgwMSwgMHgwOCwgMHgwNiwgMHgyMCwgMHgxOCwgMHg4MCwgMHg2MCwgMHgwMCwgMHg4MiwKKzB4MDEsIDB4MDgsIDB4MDYsIDB4MjAsIDB4MTgsIDB4ODAsIDB4NjAsIDB4MDAsIDB4ODIsIDB4MDEsIDB4MDgsIDB4MDYsIDB4MjAsCisweDE4LCAweDgwLCAweDYwLCAweDAwLCAweDgyLCAweDAxLCAweDI4LCAweDA2LCAweDIwLCAweDE4LCAweDgwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHgwMCwgMHg0MCwgMHhBMCwgMHgwMCwgMHgwMSwgMHgwMiwKKzB4MDQsIDB4MDgsIDB4MTAsIDB4MjAsIDB4NDEsIDB4ODAsIDB4MDAsIDB4MDEsIDB4MDIsIDB4MDQsIDB4NDgsIDB4MTAsIDB4MjgsCisweDQwLCAweDgwLCAweDA0LCAweDAxLCAweDAyLCAweDA0LCAweDQ4LCAweDEwLCAweDIwLCAweDQwLCAweDgwLCAweDAwLCAweDAxLAorMHgwMiwgMHgwNCwgMHgwOCwgMHgxMCwgMHgyMCwgMHg0MCwgMHg4MCwgMHgwMCwgMHgwMSwgMHgwMiwgMHgwNCwgMHgwOCwgMHgxMCwKKzB4MjAsIDB4NDAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4MDIsIDB4MDQsIDB4MDgsIDB4MTAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweEEyLCAweDYyLCAweEMwLCAweDhBLCAweDgxLCAweDJCLCAweDA2LAorMHhBQywgMHgxOCwgMHhCOCwgMHg2MiwgMHhDMCwgMHg4QSwgMHg4MSwgMHgyQiwgMHgwNiwgMHhBQywgMHgxOCwgMHhCMCwgMHg2MiwKKzB4QzAsIDB4OEEsIDB4ODEsIDB4MkIsIDB4MDYsIDB4QUUsIDB4MTgsIDB4QjgsIDB4NjIsIDB4QzAsIDB4OEEsIDB4MDEsIDB4MkIsCisweDA2LCAweEFDLCAweDE4LCAweEIwLCAweDYyLCAweEMwLCAweDhBLCAweDAxLCAweDJCLCAweDA2LCAweEFDLCAweDE4LCAweEIwLAorMHg2MiwgMHhDMCwgMHg4QSwgMHgwMSwgMHgyOSwgMHgwNiwgMHhBQywgMHgxOCwgMHhCMCwgMHgwMiwgMHg4OCwgMHgwQSwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NjIsIDB4MjAsIDB4OEUsIDB4ODEsIDB4MzgsIDB4MDYsIDB4RTIsCisweDE4LCAweDg4LCAweDYzLCAweDYwLCAweDhFLCAweDgxLCAweDM4LCAweDA2LCAweEU2LCAweDE4LCAweDg4LCAweDYzLCAweDIwLAorMHg4RSwgMHg4MSwgMHgzOCwgMHgwNiwgMHhFMiwgMHgxOCwgMHg4OCwgMHg2MywgMHg1MCwgMHg4RSwgMHg4MSwgMHgzOSwgMHgwNiwKKzB4RTIsIDB4MTgsIDB4OTgsIDB4NjMsIDB4MjAsIDB4OEUsIDB4ODEsIDB4MzksIDB4MDQsIDB4RTIsIDB4MTgsIDB4ODgsIDB4NjMsCisweDIwLCAweDhFLCAweDgxLCAweDNBLCAweDA2LCAweEUyLCAweDE4LCAweDg4LCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHg4MCwgMHg2MiwgMHgwMCwgMHg4RSwgMHgwMSwgMHgzQiwgMHgwNiwgMHhFNCwgMHgxOCwKKzB4QjAsIDB4NjMsIDB4MDAsIDB4OEUsIDB4MDEsIDB4MzksIDB4MDYsIDB4RTAsIDB4MTgsIDB4ODAsIDB4NjMsIDB4NDAsIDB4OEUsCisweDAxLCAweDM5LCAweDA2LCAweEVDLCAweDE4LCAweEIwLCAweDYzLCAweDgwLCAweDhFLCAweDAxLCAweDM4LCAweDA2LCAweEU0LAorMHgxOCwgMHg4MCwgMHg2MywgMHg0MCwgMHg4RSwgMHgwMSwgMHgzOCwgMHgwNiwgMHhFNCwgMHgxOCwgMHg5MCwgMHg2MywgMHg0MCwKKzB4MEUsIDB4MDEsIDB4MzksIDB4MDYsIDB4RTQsIDB4MTgsIDB4OTAsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDBBLCAweEEyLCAweDYyLCAweDYwLCAweDhDLCAweDAxLCAweDMwLCAweDA2LCAweEVBLCAweDE4LCAweDgwLAorMHg2MywgMHgyMCwgMHg4QywgMHgwMSwgMHgzMCwgMHgwNiwgMHhDMiwgMHgxOCwgMHgxOCwgMHg2MywgMHhBMCwgMHg4RSwgMHgwMSwKKzB4MzAsIDB4MDYsIDB4QzAsIDB4MTgsIDB4MDAsIDB4NjMsIDB4MjAsIDB4OEUsIDB4ODEsIDB4MzAsIDB4MDYsIDB4RUEsIDB4MTgsCisweDA4LCAweDYzLCAweEEwLCAweDhFLCAweDgxLCAweDMwLCAweDA2LCAweEVBLCAweDE4LCAweEE4LCAweDYzLCAweEEwLCAweDhFLAorMHg4MSwgMHgzQSwgMHgwNiwgMHhFQSwgMHgxOCwgMHhBOCwgMHg0MywgMHg4OCwgMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDIsIDB4MDAsIDB4NDgsIDB4MDAsIDB4MjQsIDB4MDEsIDB4OUEsIDB4MDQsIDB4NDgsIDB4MTIsIDB4MjAsIDB4NDksCisweDgwLCAweDJFLCAweDAxLCAweDkwLCAweDA0LCAweEU4LCAweDEyLCAweDAwLCAweDQ5LCAweDgwLCAweDI0LCAweDAxLCAweDkwLAorMHgwNCwgMHg2OCwgMHgxMiwgMHhBMCwgMHg0MSwgMHg4MCwgMHgyQywgMHgwMSwgMHhCQSwgMHgwNCwgMHg0OCwgMHgxMCwgMHhBMCwKKzB4NDMsIDB4ODAsIDB4MjQsIDB4MDEsIDB4QkEsIDB4MDQsIDB4NDgsIDB4MTAsIDB4MjAsIDB4NDksIDB4ODAsIDB4MDQsIDB4MDEsCisweDkyLCAweDA0LCAweDQ4LCAweDEyLCAweDIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMiwgMHgwMCwgMHg2MCwgMHgwMCwgMHg4NCwgMHgwMSwgMHgxMCwgMHgwNiwgMHg2MCwgMHgxOCwgMHgwMCwgMHg2MSwgMHgyMCwKKzB4ODYsIDB4MDEsIDB4MTAsIDB4MDYsIDB4NjIsIDB4MTgsIDB4MDAsIDB4NjEsIDB4MDAsIDB4ODYsIDB4MDEsIDB4MTAsIDB4MDYsCisweDQwLCAweDE4LCAweDAwLCAweDYxLCAweDIwLCAweDg2LCAweDgxLCAweDE4LCAweDA2LCAweDYwLCAweDE4LCAweDg4LCAweDYxLAorMHgwMCwgMHg4NiwgMHg4MSwgMHg1OCwgMHgwNiwgMHg2MCwgMHgxOCwgMHg4MCwgMHg2MSwgMHgwMCwgMHg4NiwgMHgwMSwgMHgxOCwKKzB4MDYsIDB4NjAsIDB4MTgsIDB4ODAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweEEyLCAweDA2LCAweDIwLCAweDFFLCAweDAwLCAweDcwLCAweDAwLCAweEMyLCAweDAxLCAweDAwLCAweDA3LCAweDIwLCAweDFFLAorMHgwMCwgMHg3MCwgMHgwMCwgMHhDMiwgMHgwMSwgMHg4OCwgMHgwNywgMHgyMCwgMHgxQywgMHgwMCwgMHg3MCwgMHgwMCwgMHhDMCwKKzB4MDEsIDB4MDAsIDB4MDcsIDB4MjAsIDB4MUMsIDB4ODAsIDB4NzAsIDB4MDAsIDB4RTIsIDB4MDEsIDB4ODgsIDB4MDcsIDB4MjAsCisweDFFLCAweDgwLCAweDc4LCAweDAwLCAweEMyLCAweDAxLCAweDg4LCAweDA3LCAweDIwLCAweDFFLCAweDgwLCAweDc4LCAweDAwLAorMHhFMiwgMHgwMSwgMHg4OCwgMHgwMywgMHg4OCwgMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHg4MCwKKzB4NEEsIDB4MDAsIDB4MjYsIDB4ODMsIDB4OTAsIDB4MDQsIDB4NDAsIDB4MTIsIDB4MDgsIDB4NDksIDB4MDAsIDB4MjYsIDB4ODEsCisweDkwLCAweDA0LCAweDQwLCAweDEyLCAweDgwLCAweDQ5LCAweDAwLCAweDI0LCAweDgxLCAweDkwLCAweDA0LCAweDQyLCAweDEyLAorMHgwOCwgMHg0MSwgMHgwMCwgMHgyNCwgMHgwMSwgMHg5MCwgMHgwNCwgMHg2MCwgMHgxMCwgMHg4MCwgMHg0MSwgMHgwMCwgMHgyNiwKKzB4MDEsIDB4OTgsIDB4MDQsIDB4NDAsIDB4MTAsIDB4ODAsIDB4NDksIDB4MDAsIDB4MDYsIDB4MDEsIDB4OTgsIDB4MDQsIDB4NjAsCisweDEyLCAweDgwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweDgwLCAweDQyLAorMHgyMCwgMHgwNCwgMHg4MSwgMHgxOCwgMHgwNSwgMHg2MiwgMHgxMCwgMHg4OCwgMHg0MSwgMHgyMCwgMHgwNCwgMHg4MSwgMHgxOCwKKzB4MDQsIDB4NjIsIDB4MTAsIDB4MDgsIDB4NTEsIDB4MjAsIDB4MDYsIDB4ODEsIDB4MTgsIDB4MDQsIDB4NjIsIDB4MTAsIDB4ODgsCisweDQxLCAweDIwLCAweDA2LCAweDgxLCAweDE4LCAweDA0LCAweDQyLCAweDEwLCAweDA4LCAweDQxLCAweDIwLCAweDA0LCAweDgxLAorMHgxMCwgMHgwNCwgMHg2MiwgMHgxMCwgMHgwOCwgMHg0MSwgMHgyMCwgMHgwNCwgMHg4MSwgMHgxMCwgMHgwNCwgMHg0MiwgMHgxMCwKKzB4MDgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4QTIsIDB4NDIsIDB4MDAsCisweDAyLCAweDgxLCAweDI4LCAweDBDLCAweEEyLCAweDMwLCAweDg4LCAweDQyLCAweDAwLCAweDAyLCAweDgzLCAweDI4LCAweDBDLAorMHhBMCwgMHgxMCwgMHg4MCwgMHhDMCwgMHgyMCwgMHgwQSwgMHg4MywgMHgyOCwgMHgwQywgMHhBMiwgMHgzMCwgMHg4OCwgMHhDMiwKKzB4MDAsIDB4MEEsIDB4MDMsIDB4MjgsIDB4MDQsIDB4MjIsIDB4MTAsIDB4ODAsIDB4NDAsIDB4MjAsIDB4MDIsIDB4MDEsIDB4MDgsCisweDA0LCAweEEyLCAweDEwLCAweDg4LCAweDQwLCAweDIwLCAweDAyLCAweDgxLCAweDA4LCAweDA0LCAweDIyLCAweDEwLCAweDg4LAorMHgwMCwgMHg4OCwgMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwQSwKKzB4MDEsIDB4MjgsIDB4MDUsIDB4QTAsIDB4MTAsIDB4ODAsIDB4QzIsIDB4MDAsIDB4MEEsIDB4MDMsIDB4MjgsIDB4MEMsIDB4QTAsCisweDEwLCAweDgwLCAweDUyLCAweDAwLCAweDBBLCAweDAxLCAweDI4LCAweDA0LCAweEEwLCAweDEwLCAweDgwLCAweEMyLCAweDAwLAorMHgwQSwgMHgwMywgMHgyOCwgMHgwQywgMHhBMCwgMHgzMCwgMHg4MCwgMHhDMiwgMHgwMCwgMHgwQSwgMHgwMywgMHgyOCwgMHgwQywKKzB4ODAsIDB4MzAsIDB4ODAsIDB4QzIsIDB4MDAsIDB4MEEsIDB4MDMsIDB4MjgsIDB4MDQsIDB4QTAsIDB4MzAsIDB4ODAsIDB4MDIsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweDAwLCAweDEwLCAweDIwLCAweDA2LCAweDAwLAorMHgwOCwgMHgwMCwgMHg2MCwgMHgwMCwgMHg4MCwgMHgxMSwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwOCwgMHgwMCwgMHgyMCwgMHgwNCwKKzB4ODgsIDB4MDEsIDB4MDAsIDB4MDYsIDB4MDAsIDB4MTgsIDB4MDAsIDB4MjAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDIsCisweDAwLCAweDA4LCAweDAxLCAweDIwLCAweDA0LCAweDgwLCAweDEwLCAweDAwLCAweDQyLCAweDAwLCAweDA4LCAweDAwLCAweDgwLAorMHgwNCwgMHg4MCwgMHgxMCwgMHgwMCwgMHg0MiwgMHgwMCwgMHgwOCwgMHgwMSwgMHgyMCwgMHgwNCwgMHg4MCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4QTIsIDB4NDIsIDB4NDAsIDB4MDAsIDB4ODEsIDB4MDEsCisweDA0LCAweDA0LCAweDEwLCAweDE4LCAweDQwLCAweDQwLCAweDAwLCAweDgzLCAweDAxLCAweDA1LCAweDA0LCAweDEwLCAweDEwLAorMHg0MCwgMHg0MCwgMHgwMCwgMHg4MSwgMHgwMSwgMHgwNCwgMHgwNiwgMHgxMCwgMHgxOCwgMHg1MCwgMHg0MCwgMHg0MCwgMHgwMSwKKzB4MDEsIDB4MEMsIDB4MDQsIDB4MTAsIDB4MTAsIDB4NDAsIDB4NDAsIDB4MDAsIDB4MDEsIDB4MDEsIDB4MDUsIDB4ODQsIDB4MTAsCisweDEwLCAweDQwLCAweDQwLCAweDAwLCAweDAxLCAweDAxLCAweDA0LCAweDA0LCAweDEwLCAweDEwLCAweDAwLCAweDg4LCAweDBBLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHg4MCwgMHgwMiwgMHgyMCwgMHgwNiwgMHg4MCwgMHgxOCwgMHgwMCwKKzB4NjIsIDB4MDAsIDB4ODgsIDB4MDEsIDB4NjAsIDB4MDYsIDB4ODAsIDB4MTgsIDB4MDAsIDB4NjYsIDB4MDAsIDB4ODgsIDB4MDEsCisweDIwLCAweDA2LCAweDgwLCAweDE4LCAweDAwLCAweDYyLCAweDAwLCAweDg4LCAweDAxLCAweDYwLCAweDA2LCAweDgwLCAweDE5LAorMHgwMCwgMHg2MiwgMHgwMCwgMHg5OCwgMHgwMSwgMHgyMCwgMHgwNiwgMHg4MCwgMHgxOSwgMHgwMCwgMHg2MiwgMHgwMCwgMHg4OCwKKzB4MDEsIDB4MjAsIDB4MDYsIDB4ODAsIDB4MTgsIDB4MDAsIDB4NjIsIDB4MDAsIDB4ODgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweDgwLCAweDAyLCAweDAwLCAweDI0LCAweDAwLCAweDk5LCAweDAwLCAweDY0LAorMHgwMiwgMHgxMCwgMHgwOSwgMHgwMCwgMHgyRSwgMHgwMCwgMHg5MSwgMHgwMCwgMHhFMCwgMHgwMCwgMHgwMCwgMHgwOSwgMHg0MCwKKzB4MjYsIDB4MDAsIDB4OTEsIDB4MDAsIDB4NDQsIDB4MDIsIDB4MTAsIDB4MDksIDB4MDAsIDB4MkUsIDB4MDAsIDB4QjgsIDB4MDAsCisweDY0LCAweDAwLCAweDgwLCAweDBCLCAweDQwLCAweDI2LCAweDAwLCAweEI4LCAweDAwLCAweDY0LCAweDAyLCAweDk4LCAweDA5LAorMHg0MCwgMHgyNiwgMHgwMCwgMHg5OSwgMHgwMCwgMHg2NCwgMHgwMCwgMHg5MCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4QTIsIDB4MDYsIDB4NjAsIDB4MTQsIDB4MDAsIDB4NTAsIDB4MDAsIDB4QzIsIDB4MDEsCisweDAwLCAweDA1LCAweDIwLCAweDE2LCAweDAwLCAweDUwLCAweDAwLCAweDYyLCAweDAxLCAweDE4LCAweDA1LCAweDIwLCAweDFDLAorMHgwMCwgMHg1MCwgMHgwMCwgMHg0MCwgMHgwMSwgMHgwMCwgMHgwNSwgMHgyMCwgMHgxNiwgMHg4MCwgMHg1OCwgMHgwMCwgMHhDMiwKKzB4MDEsIDB4ODgsIDB4MDUsIDB4MjgsIDB4MUMsIDB4ODAsIDB4NTgsIDB4MDAsIDB4QzIsIDB4MDEsIDB4MDgsIDB4MDcsIDB4MjAsCisweDFDLCAweDgwLCAweDcwLCAweDA4LCAweEMyLCAweDAxLCAweDA4LCAweDAzLCAweDg4LCAweDBBLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwQSwgMHgwMCwgMHg4MCwgMHgwMCwgMHgwNCwgMHgwMiwgMHgxMCwgMHgwOCwgMHhDMCwgMHgyMCwgMHgwMCwKKzB4QTEsIDB4MDAsIDB4MDQsIDB4MDIsIDB4MTAsIDB4MDgsIDB4NDAsIDB4MjAsIDB4MDAsIDB4ODEsIDB4MDAsIDB4MEMsIDB4MDIsCisweDEwLCAweDA4LCAweDQwLCAweDIwLCAweDAwLCAweDgxLCAweDAwLCAweDA0LCAweDAyLCAweDEwLCAweDBBLCAweEMwLCAweDIwLAorMHgwMCwgMHhBMSwgMHgwMCwgMHg4QywgMHgwMiwgMHgxMCwgMHgwOCwgMHhDMCwgMHgyOCwgMHgwMCwgMHhFMywgMHgwMCwgMHgxQywKKzB4MDIsIDB4MzAsIDB4MEEsIDB4QzAsIDB4MjAsIDB4MDAsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAyLCAweDAwLCAweDIwLCAweDAwLCAweEE0LCAweDAwLCAweDkwLCAweDAyLCAweEMwLCAweDBBLCAweDAwLCAweEE5LAorMHgyMCwgMHhBQywgMHgwMCwgMHhCMCwgMHgwQSwgMHhDMiwgMHgwOCwgMHgwMCwgMHgyOSwgMHgwMCwgMHhBQywgMHgwMCwgMHhCMCwKKzB4MDIsIDB4QzAsIDB4MEEsIDB4MDAsIDB4QUIsIDB4MjAsIDB4QUMsIDB4ODIsIDB4QjAsIDB4MDYsIDB4QzAsIDB4MjgsIDB4MDgsCisweEFCLCAweDAwLCAweEFDLCAweDgyLCAweEIwLCAweDBBLCAweEMwLCAweDNBLCAweDA4LCAweEFCLCAweDAwLCAweEFDLCAweDAyLAorMHhCMCwgMHgwRSwgMHhDMCwgMHgyOCwgMHgwMCwgMHg0MywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDIsIDB4QTIsIDB4QzIsIDB4MjAsIDB4MDYsIDB4MDMsIDB4MTgsIDB4MEMsIDB4NjIsIDB4MzAsIDB4ODAsIDB4RTEsIDB4MjAsCisweDA2LCAweDAzLCAweDE4LCAweDBDLCAweDYyLCAweDMwLCAweDg4LCAweEMxLCAweDIwLCAweDA2LCAweDAzLCAweDE4LCAweDBDLAorMHg2MCwgMHgzMCwgMHg4MCwgMHhDMSwgMHgyMCwgMHgwNiwgMHg4MywgMHgxOCwgMHgwRSwgMHg2MiwgMHgzMCwgMHg4OCwgMHhFMSwKKzB4MjAsIDB4MDYsIDB4ODMsIDB4MTgsIDB4MEMsIDB4NjIsIDB4MzgsIDB4ODAsIDB4RTEsIDB4MjAsIDB4MDYsIDB4ODMsIDB4MTgsCisweDBFLCAweDYyLCAweDMwLCAweDg4LCAweDAxLCAweDg4LCAweDBBLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLAorMHg4MCwgMHgwMiwgMHgwMCwgMHgwNCwgMHg4MCwgMHgxMCwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwOCwgMHgwMSwgMHgwMCwgMHgwNCwKKzB4ODAsIDB4MTAsIDB4MDEsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4ODAsIDB4MTAsIDB4MDAsIDB4NDIsCisweDAwLCAweDA4LCAweDExLCAweDAwLCAweDQ0LCAweDAwLCAweDEwLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLAorMHg4NCwgMHgwMCwgMHgxMCwgMHgwMSwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgxMCwgMHgwMCwKKzB4NDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4ODAsCisweDEyLCAweDIyLCAweDA2LCAweDg4LCAweDE4LCAweDIwLCAweDYyLCAweDgwLCAweDg4LCAweDExLCAweDIwLCAweDA2LCAweDg4LAorMHgxOCwgMHgyMCwgMHg2MiwgMHg4NCwgMHg4OCwgMHgwMSwgMHgyMiwgMHgwNiwgMHg4OCwgMHgxOCwgMHgyMCwgMHg2MiwgMHg4MCwKKzB4ODgsIDB4MDEsIDB4MjIsIDB4MDYsIDB4ODgsIDB4MTgsIDB4MDEsIDB4NjIsIDB4ODQsIDB4ODgsIDB4MzEsIDB4MjAsIDB4NDYsCisweDgwLCAweDE4LCAweDIwLCAweDYyLCAweDA0LCAweDgwLCAweDExLCAweDIwLCAweDQ2LCAweDg4LCAweDE4LCAweDAxLCAweDYyLAorMHg4NCwgMHg4OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHhBMiwgMHgwMiwKKzB4MDIsIDB4MEEsIDB4ODgsIDB4MjgsIDB4MjAsIDB4QTIsIDB4ODAsIDB4ODgsIDB4MjIsIDB4MDAsIDB4MEEsIDB4ODgsIDB4MjgsCisweDAwLCAweEEwLCAweDgwLCAweDgwLCAweDAyLCAweDIyLCAweDBBLCAweDg4LCAweDI4LCAweDIwLCAweEEyLCAweDgwLCAweDg4LAorMHgwMiwgMHgwMiwgMHgwQSwgMHgwMCwgMHgyOCwgMHgyMCwgMHhBMiwgMHg4MCwgMHg4MCwgMHgwMiwgMHgyMiwgMHgwQSwgMHgwMiwKKzB4MjgsIDB4MjAsIDB4QTIsIDB4ODAsIDB4ODAsIDB4MDIsIDB4MjAsIDB4MEEsIDB4ODgsIDB4MjgsIDB4MjAsIDB4QTIsIDB4MDAsCisweDg4LCAweDAyLCAweDg4LCAweDBBLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweDAwLCAweDEwLCAweDA0LAorMHg0MiwgMHgxMCwgMHgyOCwgMHgwMSwgMHhBMCwgMHgwNCwgMHg4MSwgMHgxMiwgMHgwNCwgMHg0MiwgMHgxMCwgMHgyOCwgMHg0MSwKKzB4QTAsIDB4MDQsIDB4ODEsIDB4MTAsIDB4MDQsIDB4NEEsIDB4MTAsIDB4MjgsIDB4NDEsIDB4QTAsIDB4MDQsIDB4ODEsIDB4MTIsCisweDA0LCAweDRBLCAweDEwLCAweDI4LCAweDAxLCAweDIwLCAweDA0LCAweDgxLCAweDEwLCAweDA0LCAweDQyLCAweDEwLCAweDA4LAorMHgwMSwgMHhBMCwgMHgwNCwgMHg4MSwgMHgxMCwgMHgwMCwgMHg0MiwgMHgxMCwgMHgwOCwgMHg0MSwgMHgyMCwgMHgwNCwgMHg4MCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4QTAsIDB4NDAsCisweDAxLCAweDAwLCAweDA1LCAweDA4LCAweDE0LCAweDAwLCAweDUwLCAweDgwLCAweDQwLCAweDAxLCAweDAyLCAweDA1LCAweDAwLAorMHgxNCwgMHgyOCwgMHg1MCwgMHgwMCwgMHg0MCwgMHgwMSwgMHgwMCwgMHgwNSwgMHgwMCwgMHgxNCwgMHgyMCwgMHg1MCwgMHgwMCwKKzB4NDAsIDB4MDEsIDB4MDAsIDB4ODUsIDB4MDgsIDB4MzQsIDB4MjAsIDB4NTAsIDB4ODAsIDB4NDAsIDB4MDMsIDB4MDIsIDB4MDUsCisweDAwLCAweDE0LCAweDIwLCAweDUwLCAweDgwLCAweDQwLCAweDAxLCAweDAyLCAweDA1LCAweDA4LCAweDE0LCAweDIwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHg4MiwgMHhCMiwgMHhDMCwgMHhDQSwgMHg4MiwKKzB4MjEsIDB4MEIsIDB4QTQsIDB4MkMsIDB4MTgsIDB4QjIsIDB4QzAsIDB4Q0EsIDB4MDIsIDB4MjgsIDB4MEIsIDB4ODQsIDB4MkMsCisweEIwLCAweEIyLCAweDQwLCAweEM4LCAweDgyLCAweDIxLCAweDBCLCAweDg2LCAweDJDLCAweDgwLCAweEIyLCAweDQwLCAweEM4LAorMHgwMiwgMHgyMSwgMHgwQiwgMHhBQywgMHgyQywgMHhCMCwgMHhCMiwgMHhDMCwgMHhDQSwgMHgwMiwgMHgyQiwgMHgwQiwgMHg4NCwKKzB4MkMsIDB4QjAsIDB4QjIsIDB4QzAsIDB4Q0EsIDB4MDIsIDB4MkIsIDB4MEIsIDB4QUMsIDB4MkMsIDB4QjAsIDB4MDIsIDB4ODgsCisweDBBLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweDgwLCAweDEyLCAweDIwLCAweDRFLCAweDgwLCAweDM4LAorMHgwMSwgMHhFQSwgMHgwNCwgMHg4OCwgMHgxMywgMHg2MCwgMHg0RSwgMHg4MCwgMHgzQSwgMHgwMSwgMHhFNiwgMHgwNCwgMHg4OCwKKzB4MTMsIDB4MjAsIDB4NEUsIDB4ODAsIDB4MzgsIDB4MDEsIDB4RTIsIDB4MDQsIDB4QTgsIDB4MTMsIDB4NjAsIDB4NEUsIDB4MDAsCisweDM5LCAweDAxLCAweEUyLCAweDI0LCAweDk4LCAweDEzLCAweDIwLCAweDRFLCAweDgyLCAweDM5LCAweDAxLCAweEUyLCAweDA0LAorMHg4OCwgMHgxMywgMHgyMCwgMHg0RSwgMHg4MiwgMHgzOCwgMHgwMSwgMHhFMiwgMHgwNCwgMHg4OCwgMHgwMywgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4QzQsIDB4MDAsIDB4MDIsIDB4MDMsIDB4MDgsIDB4MEMsCisweDIwLCAweDMwLCAweDgwLCAweEMwLCAweDAwLCAweDAyLCAweDAzLCAweDA4LCAweDBDLCAweDIwLCAweDMxLCAweDgwLCAweEMwLAorMHgxMCwgMHgwMiwgMHgwMywgMHgwOCwgMHgwQywgMHgyMCwgMHgzMCwgMHg4MCwgMHhDMCwgMHgwOCwgMHgwMiwgMHgwMywgMHgwOCwKKzB4MEMsIDB4MjAsIDB4MzEsIDB4ODIsIDB4QzAsIDB4MTgsIDB4MDIsIDB4NDMsIDB4MDgsIDB4MEMsIDB4MjAsIDB4MzAsIDB4ODYsCisweEMwLCAweDAwLCAweDAyLCAweDYzLCAweDA4LCAweDBDLCAweDIxLCAweDMxLCAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhGQywgMHhGRiwgMHhGMiwgMHhGRiwgMHhDQiwgMHhGRiwgMHgyRiwKKzB4RkYsIDB4QkYsIDB4RkMsIDB4RkYsIDB4RjIsIDB4RkYsIDB4Q0IsIDB4RkYsIDB4MkYsIDB4RkYsIDB4QkYsIDB4RkMsIDB4RkYsCisweEYyLCAweEZGLCAweENCLCAweEZGLCAweDJGLCAweEZGLCAweEJGLCAweEZDLCAweEZGLCAweEYyLCAweEZGLCAweENCLCAweEZGLAorMHgyRiwgMHhGRiwgMHhCRiwgMHhGQywgMHhGRiwgMHhGMiwgMHhGRiwgMHhDQiwgMHhGRiwgMHgyRiwgMHhGRiwgMHhCRiwgMHhGQywKKzB4RkYsIDB4RjIsIDB4RkYsIDB4Q0IsIDB4RkYsIDB4MkYsIDB4RkYsIDB4QkYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzQsIDB4REIsIDB4RDAsIDB4NkMsIDB4NDMsIDB4QjMsIDB4MkYsIDB4Q0QsIDB4MzYsCisweEZDLCAweERGLCAweEQwLCAweDZDLCAweDQzLCAweEZCLCAweDBELCAweENELCAweDM2LCAweDM0LCAweERCLCAweEQwLCAweDZDLAorMHg0MywgMHhCMywgMHgwRCwgMHhDRCwgMHgzNiwgMHgzNCwgMHhEQiwgMHhEMCwgMHg3RSwgMHhDMywgMHhCNywgMHgyRiwgMHhDRCwKKzB4MzYsIDB4N0MsIDB4REIsIDB4RjAsIDB4N0YsIDB4NDMsIDB4QjMsIDB4MkYsIDB4REYsIDB4MzYsIDB4RkMsIDB4RkYsIDB4RDIsCisweDZDLCAweEMzLCAweEI3LCAweDBELCAweEVELCAweEJGLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHhDQywgMHgzQywgMHgzMiwgMHhGMywgMHhDOCwgMHhDQywgMHgyRiwgMHgzMywgMHg4RiwgMHhGQywKKzB4M0YsIDB4MzIsIDB4RjMsIDB4QzgsIDB4RkMsIDB4MjMsIDB4MzMsIDB4OEYsIDB4Q0MsIDB4M0MsIDB4MzIsIDB4RjMsIDB4QzgsCisweENDLCAweDIzLCAweDMzLCAweDhGLCAweENDLCAweDNDLCAweDMyLCAweEZGLCAweEM4LCAweENGLCAweDJGLCAweDMzLCAweDhGLAorMHhGQywgMHgzQywgMHhGMiwgMHhGRiwgMHhDOCwgMHhDQywgMHgyRiwgMHgzRiwgMHg4RiwgMHhGQywgMHhGRiwgMHgzMiwgMHhGMywKKzB4QzgsIDB4Q0YsIDB4MjMsIDB4RjMsIDB4QkYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweERDLCAweDE4LCAweDEyLCAweDYzLCAweDQ4LCAweDhDLCAweDI3LCAweDMxLCAweDg2LCAweERDLCAweDFFLAorMHgxMiwgMHg2MywgMHg0OCwgMHhFQywgMHgyMSwgMHgzNywgMHg4NiwgMHhDNCwgMHg3OCwgMHgxMiwgMHg2MywgMHg0OCwgMHg4QywKKzB4MjEsIDB4MzEsIDB4ODYsIDB4QzQsIDB4MUUsIDB4MTIsIDB4N0IsIDB4QzgsIDB4OEQsIDB4MjcsIDB4QjcsIDB4ODcsIDB4REMsCisweDdFLCAweDcyLCAweDdCLCAweDQ4LCAweDhDLCAweDI3LCAweEI3LCAweDlGLCAweERDLCAweDdFLCAweDEyLCAweEZCLCAweEM5LAorMHg4RCwgMHgyNywgMHhCNywgMHg5RiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4NDAsIDB4RTEsIDB4MEMsIDB4ODUsIDB4MzMsIDB4MTQsIDB4MDIsIDB4NTAsIDB4MDgsIDB4NDAsIDB4MjEsIDB4MDAsCisweDg1LCAweDAwLCAweDE0LCAweDAyLCAweDUwLCAweDA4LCAweDQwLCAweDIxLCAweDAwLCAweDg1LCAweDAwLCAweDE0LCAweDAyLAorMHg1MCwgMHgwOCwgMHg0MCwgMHgyMSwgMHgwMCwgMHg4NSwgMHgwMCwgMHgxNCwgMHhDRSwgMHg1MCwgMHgwOCwgMHg0MCwgMHgyMSwKKzB4MDAsIDB4ODUsIDB4MDAsIDB4MTQsIDB4MDIsIDB4NTAsIDB4MDgsIDB4NDAsIDB4RTEsIDB4MEMsIDB4ODUsIDB4MDAsIDB4MTQsCisweDAyLCAweDUwLCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgxMCwgMHgyMCwgMHg0MCwgMHg4MCwgMHgwMCwgMHgwMSwgMHgwMiwgMHgwNCwgMHgwOCwgMHgxMCwgMHgyMCwgMHg0MCwgMHg4MCwKKzB4MDAsIDB4MDEsIDB4MDIsIDB4MDQsIDB4MDgsIDB4MTAsIDB4MjAsIDB4NDAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4MDIsIDB4MDQsCisweDA4LCAweDEwLCAweDIwLCAweDQwLCAweDgwLCAweDAwLCAweDAxLCAweDAyLCAweDA0LCAweDA4LCAweDEwLCAweDIwLCAweDQwLAorMHg4MCwgMHgwMCwgMHgwMSwgMHgwMiwgMHgwNCwgMHgwOCwgMHgwMCwgMHgyMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMSwgMHgwMiwKKzB4MDQsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsCisweDIxLCAweDQwLCAweDg0LCAweDAwLCAweDExLCAweDAyLCAweDQwLCAweDA4LCAweDAwLCAweDIxLCAweDAwLCAweDg0LCAweDAwLAorMHgxMCwgMHgwMiwgMHg0MCwgMHgwOCwgMHgwMCwgMHgyMSwgMHgwMCwgMHg4NCwgMHgwMCwgMHgxMCwgMHgwMiwgMHg0MCwgMHgwOCwKKzB4MDAsIDB4MjEsIDB4MDAsIDB4ODQsIDB4MDAsIDB4MTAsIDB4MDIsIDB4NDAsIDB4MDgsIDB4MDAsIDB4MjEsIDB4MDAsIDB4ODQsCisweDAwLCAweDEwLCAweDAyLCAweDQwLCAweDA4LCAweDAwLCAweDIxLCAweDAwLCAweDg0LCAweDAwLCAweDEwLCAweDAyLCAweDQwLAorMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhFMCwKKzB4MEMsIDB4ODAsIDB4MzMsIDB4MDAsIDB4MDIsIDB4MDQsIDB4MDgsIDB4MDAsIDB4MjAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDAsCisweDAyLCAweDAwLCAweDA4LCAweDAwLCAweDIwLCAweDQwLCAweDgwLCAweDAwLCAweDAxLCAweDAyLCAweDA0LCAweDA4LCAweDEwLAorMHgyMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMCwgMHhDRSwgMHgwMCwgMHgwOCwgMHgwMCwgMHgyMCwgMHg0MCwgMHg4MCwgMHgwMCwKKzB4MDAsIDB4MDIsIDB4MDQsIDB4MDgsIDB4MDAsIDB4RTAsIDB4NEMsIDB4ODAsIDB4MDAsIDB4MDEsIDB4MDIsIDB4MDAsIDB4MDgsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLAorMHgwNCwgMHgwMCwgMHgxMCwgMHhDQywgMHg0MCwgMHgwMCwgMHgxMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgxMCwgMHgwMCwKKzB4NDQsIDB4MDAsIDB4MTAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MzMsIDB4MTAsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4QzEsCisweDBDLCAweDA0LCAweDAwLCAweDEwLCAweENDLCAweDQwLCAweDMwLCAweDAzLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDEwLAorMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHhDMSwgMHgwQywgMHgwNCwgMHgwMCwgMHgxMCwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDEsCisweDAwLCAweDA0LCAweDAwLCAweDEwLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDEwLAorMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgxMCwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwKKzB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MTAsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsCisweDEwLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDEwLCAweDAwLCAweDQwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHgxMCwgMHgwMSwgMHg0MCwgMHgwNCwgMHgwMCwKKzB4MTEsIDB4MDAsIDB4NDQsIDB4MDAsIDB4MTAsIDB4MDEsIDB4NDAsIDB4MDQsIDB4MDAsIDB4MTEsIDB4MDAsIDB4NDQsIDB4MDAsCisweDEwLCAweDAxLCAweDQwLCAweDA0LCAweDAwLCAweDExLCAweDAwLCAweDQ0LCAweDAwLCAweDEwLCAweDAxLCAweDQwLCAweDA0LAorMHgwMCwgMHgxMSwgMHgwMCwgMHg0NCwgMHgwMCwgMHgxMCwgMHgwMSwgMHg0MCwgMHgwNCwgMHgwMCwgMHgxMSwgMHgwMCwgMHg0NCwKKzB4MDAsIDB4MTAsIDB4MDEsIDB4NDAsIDB4MDQsIDB4MDAsIDB4MTEsIDB4MDAsIDB4NDQsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDAwLCAweDEwLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDAxLAorMHhDQywgMHgwNCwgMHgwMCwgMHgxMCwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgxMCwKKzB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MTAsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsCisweDAxLCAweDAwLCAweDA0LCAweDMwLCAweDEzLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLAorMHgxMCwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4NTAsIDB4MjEsIDB4NDAsIDB4ODUsIDB4MDAsIDB4MTUsIDB4MDIsCisweDU0LCAweDA4LCAweDUwLCAweDIxLCAweDQwLCAweDg1LCAweDAwLCAweDE1LCAweDAyLCAweDU0LCAweDA4LCAweDUwLCAweDIxLAorMHg0MCwgMHg4NSwgMHgwMCwgMHgxNSwgMHgwMiwgMHg1NCwgMHgwOCwgMHg1MCwgMHgyMSwgMHg0MCwgMHg4NSwgMHgwMCwgMHgxNSwKKzB4MDIsIDB4NTQsIDB4MDgsIDB4NTAsIDB4MjEsIDB4NDAsIDB4ODUsIDB4MDAsIDB4MTUsIDB4MDIsIDB4NTQsIDB4MDgsIDB4NTAsCisweDIxLCAweDQwLCAweDg1LCAweDAwLCAweDE1LCAweDAyLCAweDU0LCAweDA4LCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHgxMCwgMHgyMCwgMHg0MCwgMHg4MCwgMHgwMCwgMHgwMSwgMHgwMiwgMHgwNCwKKzB4MDgsIDB4MTAsIDB4MjAsIDB4NDAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4MDIsIDB4MDQsIDB4MDgsIDB4MTAsIDB4MjAsIDB4NDAsCisweDgwLCAweDAwLCAweDAxLCAweDAyLCAweDA0LCAweDA4LCAweDEwLCAweDIwLCAweDQwLCAweDgwLCAweDAwLCAweDAxLCAweDAyLAorMHgwNCwgMHgwOCwgMHgxMCwgMHgyMCwgMHg0MCwgMHg4MCwgMHgwMCwgMHgwMSwgMHgwMiwgMHgwNCwgMHgwOCwgMHgxMCwgMHgyMCwKKzB4NDAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4MDIsIDB4MDQsIDB4MDgsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDIxLCAweDAwLCAweDg0LCAweDAwLCAweDEwLCAweDAyLCAweDQwLCAweDA4LAorMHgwMCwgMHgyMSwgMHgwMCwgMHg4NCwgMHgwMCwgMHgxMCwgMHgwMiwgMHg0MCwgMHgwOCwgMHgwMCwgMHgyMSwgMHgwMCwgMHg4NCwKKzB4MDAsIDB4MTAsIDB4MDIsIDB4NDAsIDB4MDgsIDB4MDAsIDB4MjEsIDB4MDAsIDB4ODQsIDB4MDAsIDB4MTAsIDB4MDIsIDB4NDAsCisweDA4LCAweDAwLCAweDIxLCAweDAwLCAweDg0LCAweDAwLCAweDEwLCAweDAyLCAweDQwLCAweDA4LCAweDAwLCAweDIxLCAweDAwLAorMHg4NCwgMHgwMCwgMHgxMCwgMHgwMiwgMHg0MCwgMHgwOCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MTAsIDB4MDgsIDB4MDAsIDB4RTAsIDB4MEMsIDB4ODAsIDB4MzMsIDB4MDAsIDB4Q0UsIDB4MDAsIDB4MzgsIDB4MDMsCisweEUwLCAweDBDLCAweDgwLCAweDMzLCAweDAwLCAweDAyLCAweDAwLCAweDM4LCAweDAzLCAweDIwLCAweDAwLCAweDgwLCAweDMzLAorMHgwMCwgMHgwMiwgMHgwMCwgMHgzOCwgMHgwMywgMHhFMCwgMHgwQywgMHg4MCwgMHgzMywgMHgwMCwgMHhDRSwgMHgwMCwgMHgwOCwKKzB4MDAsIDB4MjAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MzgsIDB4MDMsIDB4RTAsIDB4MEMsIDB4ODAsCisweDAwLCAweDAwLCAweENFLCAweDAwLCAweDM4LCAweDQzLCAweDIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgxMCwgMHgwMCwgMHgwMCwgMHgyMSwgMHgwMCwgMHg4NCwgMHgzMywgMHgxMCwgMHgwMiwgMHg0MCwgMHgwOCwgMHgwMCwgMHgyMSwKKzB4MDAsIDB4ODQsIDB4MDAsIDB4MTAsIDB4MDIsIDB4NDAsIDB4MDgsIDB4MDAsIDB4MjEsIDB4MDAsIDB4ODQsIDB4MDAsIDB4MTAsCisweENFLCAweDQwLCAweDA4LCAweDAwLCAweEUxLCAweDBDLCAweDg0LCAweDAwLCAweDEwLCAweENFLCAweDQwLCAweDM4LCAweDAzLAorMHgyMSwgMHgwMCwgMHg4NCwgMHgzMywgMHgxMCwgMHhDRSwgMHg0MCwgMHgwOCwgMHgwMCwgMHgyMSwgMHgwMCwgMHg4NCwgMHgzMywKKzB4MTAsIDB4MDIsIDB4NDAsIDB4MDgsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDgxLCAweDAwLCAweDA0LCAweDAwLCAweDEwLCAweDAwLCAweDQwLCAweDAwLCAweDAwLAorMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgxMCwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMiwKKzB4MTAsIDB4MDAsIDB4NDAsIDB4MjAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDIsIDB4MTAsIDB4MDgsIDB4NDAsIDB4MDAsCisweDAwLCAweDgxLCAweDAwLCAweDA0LCAweDAyLCAweDEwLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDgxLCAweDAwLCAweDA0LAorMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDEsIDB4MDAsIDB4ODQsIDB4MDAsIDB4MTAsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDQsCisweDAwLCAweDEwLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDEwLCAweDAyLCAweDQwLAorMHgwMCwgMHgwMCwgMHgyMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgxMCwgMHgwMiwgMHg0MCwgMHgwOCwgMHgwMCwgMHgwMSwgMHgwMCwKKzB4ODQsIDB4MDAsIDB4MTAsIDB4MDIsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4ODQsIDB4MDAsIDB4MTAsIDB4MDAsCisweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDAxLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgzMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4Q0MsIDB4MDAsIDB4MDAsCisweDAwLCAweEMwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweENDLCAweDAwLCAweDMwLCAweDAzLCAweDAwLCAweDAwLCAweDAwLAorMHgzMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzQywgMHgzQywgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4RjAsCisweEYwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweEZDLCAweEZGLCAweEZGLCAweEZGLCAweDAzLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHhGQywgMHhGRiwgMHhGRiwgMHhGRiwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhGQywgMHhGRiwKKzB4RkYsIDB4RkYsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4RkMsIDB4RkYsIDB4RkYsIDB4RkYsIDB4MDMsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweEZDLCAweEZGLCAweEZGLCAweEZGLCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweEZDLAorMHhGRiwgMHhGRiwgMHhGRiwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4RkMsIDB4RkYsIDB4RkYsIDB4RkYsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweEZDLCAweEZGLCAweEZGLCAweEZGLCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweEZDLCAweEZGLCAweEZGLAorMHhGRiwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhGQywgMHhGRiwgMHhGRiwgMHhGRiwgMHgwMywgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4RkMsIDB4RkYsIDB4RkYsIDB4RkYsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4RkMsIDB4RkYsCisweEZGLCAweEZGLCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhGQywgMHhGRiwgMHhGRiwgMHhGRiwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4RkMsIDB4RkYsIDB4RkYsIDB4RkYsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4RkMsIDB4RkYsIDB4RkYsIDB4RkYsCisweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweEZDLCAweEZGLCAweEZGLCAweEZGLCAweDAzLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHhGQywgMHhGRiwgMHhGRiwgMHhGRiwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhGQywgMHhGRiwgMHhGRiwKKzB4RkYsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweEZDLCAweEZGLCAweEZGLCAweEZGLCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweEZDLAorMHhGRiwgMHhGRiwgMHhGRiwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhGQywgMHhGRiwgMHhGRiwgMHhGRiwgMHgwMywKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4RkMsIDB4RkYsIDB4RkYsIDB4RkYsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweEZDLCAweEZGLCAweEZGLCAweEZGLCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweEZDLCAweEZGLCAweEZGLCAweEZGLAorMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4RkMsIDB4RkYsIDB4RkYsIDB4RkYsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4RkMsIDB4RkYsCisweEZGLCAweEZGLCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweEZDLCAweEZGLCAweEZGLCAweEZGLCAweDAzLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHhGQywgMHhGRiwgMHhGRiwgMHhGRiwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhGQywKKzB4RkYsIDB4RkYsIDB4RkYsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4RkMsIDB4RkYsIDB4RkYsIDB4RkYsIDB4MDMsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHhGQywgMHhGRiwgMHhGRiwgMHhGRiwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhGQywgMHhGRiwgMHhGRiwKKzB4RkYsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4RkMsIDB4RkYsIDB4RkYsIDB4RkYsIDB4MDMsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweEZDLCAweEZGLCAweEZGLCAweEZGLCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweEZDLCAweEZGLAorMHhGRiwgMHhGRiwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhGQywgMHhGRiwgMHhGRiwgMHhGRiwgMHgwMywgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDQwLCAweDIxLCAweDAwLCAweDg1LCAweDAwLCAweDE0LCAweDAyLCAweDUwLCAweDA4LCAweDQwLCAweDIxLCAweDAwLCAweDg1LAorMHgwMCwgMHgxNCwgMHgwMiwgMHg1MCwgMHgwOCwgMHg0MCwgMHgyMSwgMHgwMCwgMHg4NSwgMHgwMCwgMHgxNCwgMHgwMiwgMHg1MCwKKzB4MDgsIDB4NDAsIDB4MjEsIDB4MDAsIDB4ODUsIDB4MDAsIDB4MTQsIDB4MDIsIDB4NTAsIDB4MDgsIDB4NDAsIDB4MjEsIDB4MDAsCisweDg1LCAweDAwLCAweDE0LCAweDAyLCAweDUwLCAweDA4LCAweDQwLCAweDIxLCAweDAwLCAweDg1LCAweDAwLCAweDE0LCAweDAyLAorMHg1MCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwKKzB4MjAsIDB4NDAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4MDIsIDB4MDQsIDB4MDgsIDB4MTAsIDB4MjAsIDB4NDAsIDB4ODAsIDB4MDAsCisweDAxLCAweDAyLCAweDA0LCAweDA4LCAweDEwLCAweDIwLCAweDQwLCAweDgwLCAweDAwLCAweDAxLCAweDAyLCAweDA0LCAweDA4LAorMHgxMCwgMHgyMCwgMHg0MCwgMHg4MCwgMHgwMCwgMHgwMSwgMHgwMiwgMHgwNCwgMHgwOCwgMHgxMCwgMHgyMCwgMHg0MCwgMHg4MCwKKzB4MDAsIDB4MDEsIDB4MDIsIDB4MDQsIDB4MDgsIDB4MTAsIDB4MjAsIDB4NDAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4MDIsIDB4MDQsCisweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDIxLAorMHgwMCwgMHg4NCwgMHgwMCwgMHgxMCwgMHgwMiwgMHg0MCwgMHgwOCwgMHgwMCwgMHgyMSwgMHgwMCwgMHg4NCwgMHgwMCwgMHgxMCwKKzB4MDIsIDB4NDAsIDB4MDgsIDB4MDAsIDB4MjEsIDB4MDAsIDB4ODQsIDB4MDAsIDB4MTAsIDB4MDIsIDB4NDAsIDB4MDgsIDB4MDAsCisweDIxLCAweDAwLCAweDg0LCAweDAwLCAweDEwLCAweDAyLCAweDQwLCAweDA4LCAweDAwLCAweDIxLCAweDAwLCAweDg0LCAweDAwLAorMHgxMCwgMHgwMiwgMHg0MCwgMHgwOCwgMHgwMCwgMHgyMSwgMHgwMCwgMHg4NCwgMHgwMCwgMHgxMCwgMHgwMiwgMHg0MCwgMHgwOCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4MDAsCisweDgwLCAweDAwLCAweDAwLCAweDAyLCAweDAwLCAweDA4LCAweDAwLCAweDIwLCAweDAwLCAweDgwLCAweDAwLCAweDAwLCAweDAyLAorMHgwMCwgMHgwOCwgMHgwMCwgMHgyMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwOCwgMHgwMCwgMHgyMCwKKzB4NDAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4MDIsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MjAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDAsCisweDAyLCAweDAwLCAweDA4LCAweDAwLCAweDIwLCAweDAwLCAweDgwLCAweDAwLCAweDAwLCAweDAyLCAweDAwLCAweDA4LCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwNCwKKzB4MDAsIDB4MTAsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MTAsIDB4MDAsIDB4NDAsCisweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDEwLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLAorMHgwNCwgMHgwMCwgMHgxMCwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgxMCwgMHgwMCwKKzB4NDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MTAsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLAorMHgwNCwgMHgwMCwgMHgxMCwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgxMCwgMHgwMCwKKzB4NDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MTAsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDEsCisweDAwLCAweDA0LCAweDAwLCAweDEwLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDEwLAorMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgxMCwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MTAsIDB4MDEsIDB4NDAsIDB4MDQsIDB4MDAsIDB4MTEsCisweDAwLCAweDQ0LCAweDAwLCAweDEwLCAweDAxLCAweDQwLCAweDA0LCAweDAwLCAweDExLCAweDAwLCAweDQ0LCAweDAwLCAweDEwLAorMHgwMSwgMHg0MCwgMHgwNCwgMHgwMCwgMHgxMSwgMHgwMCwgMHg0NCwgMHgwMCwgMHgxMCwgMHgwMSwgMHg0MCwgMHgwNCwgMHgwMCwKKzB4MTEsIDB4MDAsIDB4NDQsIDB4MDAsIDB4MTAsIDB4MDEsIDB4NDAsIDB4MDQsIDB4MDAsIDB4MTAsIDB4MDAsIDB4NDQsIDB4MDAsCisweDEwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDExLCAweDAwLCAweDQ0LCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwKKzB4MDQsIDB4MDAsIDB4MTAsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MTAsIDB4MDAsCisweDQwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDEwLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDAxLAorMHgwMCwgMHgwNCwgMHgwMCwgMHgxMCwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgxMCwKKzB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDAwLCAweDUwLCAweDIxLCAweDQwLCAweDg1LCAweDAwLCAweDE1LCAweENFLCAweDU0LAorMHgwOCwgMHg1MCwgMHgyMSwgMHg0MCwgMHg4NSwgMHgzMywgMHgxNSwgMHgwMiwgMHg1NCwgMHgwOCwgMHg1MCwgMHgyMSwgMHg0MCwKKzB4ODUsIDB4MDAsIDB4MTUsIDB4MDIsIDB4NTQsIDB4MzgsIDB4NTMsIDB4MjEsIDB4NDAsIDB4ODUsIDB4MDAsIDB4MTUsIDB4MDIsCisweDU0LCAweDA4LCAweDUwLCAweDIxLCAweDQwLCAweDg1LCAweDAwLCAweDE1LCAweDAyLCAweDU0LCAweDA4LCAweDUwLCAweDIxLAorMHg0MCwgMHg4NSwgMHgwMCwgMHgxNSwgMHgwMiwgMHg1NCwgMHgwOCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MTAsIDB4MjAsIDB4NDAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4MDIsIDB4MDQsIDB4MDgsCisweDEwLCAweDIwLCAweDQwLCAweDgwLCAweDAwLCAweDAxLCAweDAyLCAweDA0LCAweDA4LCAweDEwLCAweDIwLCAweDQwLCAweDgwLAorMHgwMCwgMHgwMSwgMHgwMiwgMHgwNCwgMHgwOCwgMHgxMCwgMHgyMCwgMHg0MCwgMHg4MCwgMHgwMCwgMHgwMSwgMHgwMiwgMHgwNCwKKzB4MDgsIDB4MTAsIDB4MjAsIDB4NDAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4MDIsIDB4MDQsIDB4MDgsIDB4MTAsIDB4MjAsIDB4NDAsCisweDgwLCAweDAwLCAweDAxLCAweDAyLCAweDA0LCAweDA4LCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgyMSwgMHgwMCwgMHg4NCwgMHgwMCwgMHgxMCwgMHgwMiwgMHg0MCwgMHgwOCwgMHgwMCwKKzB4MjEsIDB4MDAsIDB4ODQsIDB4MDAsIDB4MTAsIDB4MDIsIDB4NDAsIDB4MDgsIDB4MDAsIDB4MjEsIDB4MDAsIDB4ODQsIDB4MDAsCisweDEwLCAweDAyLCAweDQwLCAweDA4LCAweDAwLCAweDIxLCAweDAwLCAweDg0LCAweDAwLCAweDEwLCAweDAyLCAweDQwLCAweDA4LAorMHgwMCwgMHgyMSwgMHgwMCwgMHg4NCwgMHgwMCwgMHgxMCwgMHgwMiwgMHg0MCwgMHgwOCwgMHgwMCwgMHgyMSwgMHgwMCwgMHg4NCwKKzB4MDAsIDB4MTAsIDB4MDIsIDB4NDAsIDB4MDgsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDEwLCAweDA4LCAweDAwLCAweEUwLCAweDBDLCAweDgwLCAweDMzLCAweDAwLCAweENFLCAweDAwLCAweDM4LCAweDAzLCAweEUwLAorMHgwQywgMHg4MCwgMHgzMywgMHgwMCwgMHhDRSwgMHgwMCwgMHgzOCwgMHgwMywgMHhFMCwgMHgwQywgMHg4MCwgMHgzMywgMHgwMCwKKzB4MDIsIDB4MDAsIDB4MzgsIDB4MDMsIDB4RTAsIDB4MEMsIDB4ODAsIDB4MzMsIDB4MDAsIDB4Q0UsIDB4MDAsIDB4MzgsIDB4MDMsCisweEUwLCAweDBDLCAweDgwLCAweDMzLCAweDAwLCAweENFLCAweDAwLCAweDM4LCAweDAzLCAweDIwLCAweDAwLCAweDgwLCAweDMzLAorMHgwMCwgMHhDRSwgMHgwMCwgMHgzOCwgMHg0MywgMHgyMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwKKzB4MDAsIDB4MDAsIDB4MjEsIDB4MDAsIDB4ODQsIDB4MDAsIDB4MTAsIDB4MDIsIDB4NDAsIDB4MDgsIDB4MDAsIDB4MjEsIDB4MDAsCisweDg0LCAweDAwLCAweDEwLCAweDAyLCAweDQwLCAweDA4LCAweDAwLCAweDIxLCAweDAwLCAweDg0LCAweDAwLCAweDEwLCAweDAyLAorMHg0MCwgMHgwOCwgMHgwMCwgMHgyMSwgMHgwMCwgMHg4NCwgMHgwMCwgMHgxMCwgMHgwMiwgMHg0MCwgMHgwOCwgMHgwMCwgMHgyMSwKKzB4MDAsIDB4ODQsIDB4MDAsIDB4MTAsIDB4MDIsIDB4NDAsIDB4MDgsIDB4MDAsIDB4MjEsIDB4MDAsIDB4ODQsIDB4MDAsIDB4MTAsCisweDAyLCAweDQwLCAweDA4LCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHg0MCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgxMCwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMSwKKzB4MDAsIDB4MDQsIDB4MDAsIDB4MTAsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MTAsCisweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDEwLCAweDAwLCAweDQwLCAweDAwLCAweDAwLAorMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgxMCwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwKKzB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDEwLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLAorMHgxMCwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgxMCwgMHgwMCwgMHg0MCwgMHgwMCwKKzB4MDAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MTAsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDQsCisweDAwLCAweDEwLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDEwLCAweDAwLCAweDQwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwMSwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDIwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4M0MsIDB4M0MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweEYwLCAweEYwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhGQywgMHhGRiwgMHhGRiwgMHhGRiwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4RkMsIDB4RkYsIDB4RkYsIDB4RkYsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4RkMsIDB4RkYsIDB4RkYsCisweEZGLCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweEZDLCAweEZGLCAweEZGLCAweEZGLCAweDAzLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHhGQywgMHhGRiwgMHhGRiwgMHhGRiwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhGQywgMHhGRiwKKzB4RkYsIDB4RkYsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweEZDLCAweEZGLCAweEZGLCAweEZGLCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHhGQywgMHhGRiwgMHhGRiwgMHhGRiwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhGQywgMHhGRiwgMHhGRiwgMHhGRiwKKzB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4RkMsIDB4RkYsIDB4RkYsIDB4RkYsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweEZDLCAweEZGLCAweEZGLCAweEZGLCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweEZDLCAweEZGLCAweEZGLAorMHhGRiwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4RkMsIDB4RkYsIDB4RkYsIDB4RkYsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4RkMsCisweEZGLCAweEZGLCAweEZGLCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweEZDLCAweEZGLCAweEZGLCAweEZGLCAweDAzLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhGQywgMHhGRiwgMHhGRiwgMHhGRiwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4RkMsIDB4RkYsIDB4RkYsIDB4RkYsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4RkMsIDB4RkYsIDB4RkYsIDB4RkYsCisweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHhGQywgMHhGRiwgMHhGRiwgMHhGRiwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhGQywgMHhGRiwKKzB4RkYsIDB4RkYsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4RkMsIDB4RkYsIDB4RkYsIDB4RkYsIDB4MDMsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweEZDLCAweEZGLCAweEZGLCAweEZGLCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweEZDLAorMHhGRiwgMHhGRiwgMHhGRiwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhGQywgMHhGRiwgMHhGRiwgMHhGRiwgMHgwMywKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweEZDLCAweEZGLCAweEZGLCAweEZGLCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweEZDLCAweEZGLCAweEZGLAorMHhGRiwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhGQywgMHhGRiwgMHhGRiwgMHhGRiwgMHgwMywgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4RkMsIDB4RkYsIDB4RkYsIDB4RkYsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4RkMsIDB4RkYsCisweEZGLCAweEZGLCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweEZDLCAweEZGLCAweEZGLCAweEZGLCAweDAzLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4RkMsIDB4RkYsIDB4RkYsIDB4RkYsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4RkMsIDB4RkYsIDB4RkYsIDB4RkYsCisweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweEZDLCAweEZGLCAweEZGLCAweEZGLCAweDAzLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHhGQywgMHhGRiwgMHhGRiwgMHhGRiwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhGQywgMHhGRiwgMHhGRiwKKzB4RkYsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4RkMsIDB4RkYsIDB4RkYsIDB4RkYsIDB4MDMsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MEMsIDB4MDAsIDB4MDQsIDB4ODAsCisweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDBDLCAweDAwLCAweDIyLCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MEMsIDB4MDAsIDB4MDQsIDB4ODAsIDB4NDAsCisweDQwLCAweDAwLCAweDAwLCAweDBDLCAweDAwLCAweDIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBDLCAweDAwLCAweDAwLCAweDgwLCAweDAwLAorMHgwMCwgMHgyMiwgMHgyNSwgMHgwQywgMHgwMCwgMHgwMSwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhDMCwgMHgwQywgMHgwMCwKKzB4MDIsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwQywgMHgwMCwgMHgwMSwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhBMCwgMHgwQywgMHgwMCwgMHgwNSwgMHg4MCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODcsIDB4RTgsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMAorfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9tZTQwMDAvbWU0NjEwX2Zpcm13YXJlLmggYi9kcml2ZXJzL3N0YWdpbmcvbWU0MDAwL21lNDYxMF9maXJtd2FyZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM1NTBkOTkKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvbWU0MDAwL21lNDYxMF9maXJtd2FyZS5oCkBAIC0wLDAgKzEsNTQwOSBAQAorLyoKKyAgIFRoaXMgZmlsZSBpcyBjb3B5cmlnaHQgYnkgTWVpbGhhdXMgRWxlY3Ryb25pYyBHbWJIIDIwMDMuCisgICBZb3UgYXJlIG5vdCBhbGxvd2VkIHRvIGRpc3RyaWJ1dGUsIHNlbGwsIG1vZGlmeSwgcmV2ZXJzZSBlbmdpbmVlciBvciB1c2UgdGhpcworICAgY29kZSAob3IgcGFydHMgb2YgaXQpIGZvciBhbnkgb3RoZXIgcHVycG9zZSBvciB1bmRlciBhbnkgb3RoZXIgY29uZGl0aW9ucworICAgdGhhbiBzdGF0ZWQgYmVsb3cuCisKKyAgIDEpIFlvdSBhcmUgYWxsb3dlZCB0byBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcyBvZiB0aGlzIGZpbGUgdG9nZXRoZXIKKyAgIHdpdGggZGV2aWNlIGRyaXZlcnMgZm9yIHRoZSBNZWlsaGF1cyBNRS00MDAwLCBib2FyZCBmYW1pbHkuCisKKyAgIDIpIERlcml2ZWQgd29yayAoZGV2aWNlIGRyaXZlcnMgdXNpbmcgdGhpcyBmaWxlKSBjYW4gYmUgcHVibGlzaGVkIHVuZGVyCisgICB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uIEFueSBvdGhlciBsaWNlbnNlIHRlcm1zIGhhdmUKKyAgIHRvIGJlIGFncmVlZCBieSBNZWlsaGF1cyBHbWJIIGluIHdyaXR0ZW4uCisKKyAgIDIpIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsKKyAgIHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKKyAgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBNZWlsaGF1cyBpcyB1bmRlcgorICAgbm8gbWVhbnMgbGlhYmxlIGZvciBwcm9kdWN0cyB1c2luZyB0aGlzIGZpbGUgb3IgcGFydHMgb2YgaXQuCisKKyAgIDMpIFRoZSBjb3B5cmlnaHQgb2YgdGhpcyBmaWxlIGhhcyB0byBiZSBtZW50aW9uZWQgaW4gZGVyaXZlZCB3b3JrLgorCisgICA0KSBJZiB0aGlzIGxpY2Vuc2UgdGVybXMgYXJlIG5vdCB2YWxpZCBkdWUgdG8gYW55IG90aGVyIGxhdworICAgb3IgcmVzdHJpY3Rpb25zIGltcG9zZWQgb24geW91LCB5b3UgYXJlIG5vdCBhbGxvd2VkIHRvIHVzZQorICAgdGhpcyBmaWxlIGluIGFueSB3YXkgYXQgYWxsLgorICovCisKKy8qIFZlcnNpb24gMCBvZiBNRS00NjEwIGZpcm13YXJlICovCitzdGF0aWMgdW5zaWduZWQgY2hhciB4aWxpbnhfZmlybV80NjEwW10gPSB7CisweDAwLCAweDAxLCAweDExLCAweDBjLCAweDAxLCAweDAxLCAweDA0LCAweDAwLCAweDAwLCAweDA5LCAweDA0LCAweDAyLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHg1NSwgMHg5OSwgMHhBQSwgMHg2NiwgMHgwQywgMHgwMCwKKzB4MDEsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4RTAsIDB4MEMsIDB4ODAsIDB4MDYsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsCisweEQwLCAweDBDLCAweDgwLCAweDA0LCAweDgwLCAweDAwLCAweDAxLCAweEZDLCAweEI0LCAweDBDLCAweDAwLCAweDAzLCAweDgwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwQywgMHgwMCwgMHgwMSwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5MCwgMHgwQywKKzB4MDAsIDB4MDQsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MEMsIDB4MDAsIDB4MDEsIDB4ODAsIDB4MDAsIDB4MDAsCisweDAwLCAweDgwLCAweDBDLCAweDAwLCAweDAyLCAweDAwLCAweDBBLCAweDAwLCAweDdDLCAweDIwLCAweDQwLCAweDU4LCAweDA0LAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweDIwLCAweDAxLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0OCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHgyMCwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0OCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyMCwKKzB4MDksIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4QkYsIDB4NTgsIDB4ODAsIDB4NTQsIDB4MDAsCisweDQ0LCAweDAxLCAweDE4LCAweDA1LCAweDYwLCAweDA0LCAweDgwLCAweDAxLCAweDAwLCAweDY2LCAweDAwLCAweEQ4LCAweDAwLAorMHg2MCwgMHgwQSwgMHg4MCwgMHgyRCwgMHgwMCwgMHhGNiwgMHgwMCwgMHhEOCwgMHgwMywgMHg2MCwgMHgwQSwgMHg4MCwgMHg2OSwKKzB4MDAsIDB4QzYsIDB4MDEsIDB4OTgsIDB4MDUsIDB4MjAsIDB4MTYsIDB4RkMsIDB4MjMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweEEwLCAweEZGLCAweDAwLCAweEJGLCAweDAwLCAweERDLCAweDMyLCAweEYwLAorMHgxMywgMHhDMCwgMHg0RiwgMHgwMCwgMHhGQiwgMHgyOCwgMHhCQywgMHgwNCwgMHhCMCwgMHgxNywgMHhDMCwgMHg0RSwgMHgxMiwKKzB4MUIsIDB4MTAsIDB4RkMsIDB4MTMsIDB4MzAsIDB4OTMsIDB4QzAsIDB4NEIsIDB4MDAsIDB4MUYsIDB4MDEsIDB4RkMsIDB4MjQsCisweDMwLCAweENGLCAweEUyLCAweDBDLCAweDAwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMSwgMHgwOCwgMHgzNywgMHgwMSwgMHg5RCwgMHgwNiwgMHg0NCwgMHgzMCwgMHhEMSwgMHgxMSwgMHg0MCwgMHg0NywgMHgwMCwKKzB4RkQsIDB4MEEsIDB4NzQsIDB4MDYsIDB4MTAsIDB4MDksIDB4NDAsIDB4MTcsIDB4MDksIDB4MTEsIDB4NDIsIDB4RjQsIDB4MEIsCisweDUwLCAweDQ5LCAweDQwLCAweDA2LCAweDBDLCAweDFELCAweDAwLCAweDc0LCAweDAwLCAweDEwLCAweDhGLCAweDQwLCAweDA0LAorMHgyMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMSwgMHgwMCwgMHgzMywgMHgwMCwKKzB4OEQsIDB4MTgsIDB4MDUsIDB4MTYsIDB4REEsIDB4MDgsIDB4NDAsIDB4MzMsIDB4MDAsIDB4Q0QsIDB4NDAsIDB4NzQsIDB4MDMsCisweDkxLCAweDBDLCAweDQwLCAweDM1LCAweDAxLCAweDBELCAweDIwLCAweDM0LCAweEEzLCAweDEwLCAweDQ4LCAweDQwLCAweDAxLAorMHgwMSwgMHhDRCwgMHhBMCwgMHg3NCwgMHgxMywgMHhEMiwgMHg0QywgMHg0MCwgMHg0NCwgMHg4MCwgMHgwRSwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4QTgsIDB4MzQsIDB4MDAsIDB4OUQsIDB4MDEsIDB4NDQsIDB4ODYsCisweEQwLCAweDM5LCAweDQwLCAweDA3LCAweDAwLCAweERELCAweDAwLCAweDY0LCAweDhBLCAweDEwLCAweDg5LCAweDAyLCAweDM3LAorMHgwMCwgMHgxNSwgMHgxMCwgMHg3NCwgMHgwMywgMHg1MCwgMHgxOSwgMHgwNywgMHg0NywgMHgyMCwgMHg1RCwgMHgwNCwgMHg3NCwKKzB4QTMsIDB4REEsIDB4MEQsIDB4NDgsIDB4MEMsIDB4MjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweEE4LCAweDc3LCAweDAwLCAweDFGLCAweDkxLCAweDRDLCAweDg2LCAweEUwLCAweDE5LCAweEMwLCAweDU3LAorMHgyMSwgMHhEQiwgMHgwMCwgMHg3QywgMHgwMSwgMHhCMCwgMHgwNSwgMHg4MCwgMHgwNiwgMHg5MSwgMHgxQiwgMHgwQiwgMHg3QywKKzB4MDMsIDB4MzEsIDB4MzEsIDB4QzAsIDB4NDcsIDB4MDEsIDB4OUYsIDB4NDQsIDB4N0MsIDB4MDIsIDB4RDAsIDB4MEQsIDB4NjAsCisweDAwLCAweDIwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA3LCAweDgwLCAweDNELAorMHgwMiwgMHgzRSwgMHg0MCwgMHhFOCwgMHgwMCwgMHhGMCwgMHgwQiwgMHg0MCwgMHg4RiwgMHgwMCwgMHhGRSwgMHgwMCwgMHhGNCwKKzB4NDgsIDB4RjAsIDB4MEIsIDB4QzAsIDB4MUYsIDB4ODAsIDB4MUEsIDB4MjAsIDB4QkMsIDB4MDMsIDB4RTEsIDB4MEIsIDB4QzgsCisweDBFLCAweDAwLCAweDNFLCAweDAxLCAweEY4LCAweDAyLCAweDMwLCAweDBGLCAweEQxLCAweDFGLCAweDAwLCAweDA2LCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHgwOCwgMHgzNSwgMHgwMCwgMHg5RiwgMHgwMCwgMHg1QywKKzB4NDYsIDB4NzAsIDB4MDksIDB4QzAsIDB4MzcsIDB4MDAsIDB4REYsIDB4MjAsIDB4N0MsIDB4MjEsIDB4MzAsIDB4MEQsIDB4QzQsCisweDM0LCAweDAwLCAweERGLCAweDAwLCAweDRDLCAweDgzLCAweEIwLCAweDI5LCAweEMwLCAweDg0LCAweDA4LCAweDlGLCAweDQ0LAorMHg3QywgMHg0MywgMHhGMCwgMHgwQywgMHhDNCwgMHgwQSwgMHgyMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MTMsIDB4QTAsIDB4MzQsIDB4MDAsIDB4OUQsIDB4MDAsIDB4NzQsIDB4MEEsIDB4OTAsIDB4MDksIDB4NDAsCisweDY3LCAweDAwLCAweEYwLCAweDgwLCAweDM0LCAweDA0LCAweEIwLCAweEI5LCAweDQwLCAweDMyLCAweDAwLCAweEQxLCAweDQxLAorMHhDMCwgMHgwMywgMHhEMCwgMHgwOSwgMHg0MCwgMHgwNywgMHgwMCwgMHg1MSwgMHgwMCwgMHgzNCwgMHg0MywgMHhEMCwgMHgzRiwKKzB4NDAsIDB4NEMsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4QTAsCisweDMyLCAweDEwLCAweDFELCAweDQwLCAweDMwLCAweDAwLCAweDkwLCAweDEwLCAweDQwLCAweEEzLCAweDg0LCAweEM5LCAweDAwLAorMHgzNCwgMHgwMCwgMHgxMCwgMHgwOCwgMHg0MCwgMHgyMCwgMHgwMCwgMHhDMCwgMHgyMSwgMHgwMCwgMHgwMywgMHg5MCwgMHgwMCwKKzB4NDAsIDB4MDAsIDB4MDAsIDB4NDksIDB4ODMsIDB4MDQsIDB4ODksIDB4RDgsIDB4MEMsIDB4NDAsIDB4MUMsIDB4MDAsIDB4MEEsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA2LCAweDgyLCAweDc4LCAweDAyLCAweEVDLCAweDgxLAorMHhCNCwgMHgwNSwgMHg5QSwgMHg5MiwgMHg2MCwgMHg0QiwgMHg5MCwgMHhFMSwgMHhBOSwgMHhCNiwgMHgwNiwgMHg5MCwgMHgxQSwKKzB4NjAsIDB4N0EsIDB4MDAsIDB4RTEsIDB4MTMsIDB4QTQsIDB4MDcsIDB4QzAsIDB4MTIsIDB4NDAsIDB4NEYsIDB4MDAsIDB4NjEsCisweDM1LCAweEI0LCAweDI1LCAweEMwLCAweDlGLCAweDYxLCAweDE4LCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHgxMCwgMHgzMCwgMHgxMCwgMHg0RCwgMHgwMCwgMHgxQywgMHhBMSwgMHg3OCwgMHg4MCwKKzB4RTEsIDB4MzMsIDB4MjUsIDB4Q0YsIDB4MjAsIDB4M0MsIDB4MjMsIDB4MzAsIDB4MkMsIDB4QzEsIDB4MzQsIDB4MDgsIDB4MDcsCisweDA1LCAweDBELCAweDAzLCAweEIwLCAweEMwLCAweEU4LCAweDEwLCAweDIyLCAweENGLCAweDQxLCAweDNDLCAweDE3LCAweEYyLAorMHhERCwgMHhEMCwgMHg0OCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwKKzB4QjIsIDB4M0QsIDB4MDgsIDB4RkYsIDB4MDAsIDB4RkUsIDB4QTMsIDB4ODAsIDB4OEYsIDB4QzIsIDB4MUIsIDB4MDAsIDB4RkYsCisweDgwLCAweEZFLCAweDAzLCAweEYwLCAweDBCLCAweDQwLCAweDNGLCAweDEwLCAweDM3LCAweDA4LCAweERDLCAweDYzLCAweEYwLAorMHg4NywgMHhDNiwgMHgzRiwgMHgwOCwgMHhERiwgMHgwMCwgMHg3QywgMHgyMywgMHhGQSwgMHg4RiwgMHhDMiwgMHgwOSwgMHg2MCwKKzB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTUsIDB4QTgsIDB4NzcsIDB4MDAsIDB4NTcsCisweDAwLCAweDdDLCAweDAzLCAweEYwLCAweDExLCAweEMwLCAweDM1LCAweDAwLCAweERGLCAweDEwLCAweDVDLCAweDAxLCAweEYwLAorMHgxOCwgMHhDMCwgMHg2NiwgMHgwMCwgMHhEMywgMHgwMCwgMHg2QywgMHgxMywgMHhGMCwgMHgwMSwgMHhDOCwgMHgxNywgMHgxMCwKKzB4OUYsIDB4MDAsIDB4N0MsIDB4MDMsIDB4MzIsIDB4QkQsIDB4QzUsIDB4NTQsIDB4MjAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDk4LCAweDNELCAweDAwLCAweDYxLCAweDgwLCAweEI2LCAweDAxLCAweEQwLAorMHgwQSwgMHg0OCwgMHgzOCwgMHgwMCwgMHhGRCwgMHgwNiwgMHg4NCwgMHgwMywgMHhEMiwgMHgwQSwgMHg0MCwgMHgzOSwgMHg0MCwKKzB4RjEsIDB4ODAsIDB4ODYsIDB4NDMsIDB4RDAsIDB4MEEsIDB4NDgsIDB4MUIsIDB4MDAsIDB4RUQsIDB4MDAsIDB4QjQsIDB4MDMsCisweDEwLCAweDBGLCAweDQwLCAweDQ4LCAweDYwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMywgMHgwMCwgMHg3OSwgMHg4MCwgMHhFNSwgMHgwMSwgMHg5NCwgMHgwNywgMHhEMCwgMHgxNywgMHg0MCwgMHg3OSwgMHgwOCwKKzB4RUMsIDB4MDEsIDB4OTQsIDB4MDcsIDB4RDAsIDB4MUYsIDB4NDAsIDB4N0IsIDB4MDAsIDB4RTEsIDB4MDEsIDB4ODQsIDB4MDcsCisweEQwLCAweDFFLCAweDYwLCAweDc5LCAweDAwLCAweEFELCAweDExLCAweEE0LCAweDA3LCAweDUwLCAweDFFLCAweDQwLCAweDBDLAorMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHgyMCwgMHgyMywgMHgwMCwKKzB4QzEsIDB4MDAsIDB4MzQsIDB4MDMsIDB4RDAsIDB4MEMsIDB4NDIsIDB4MzEsIDB4MDIsIDB4Q0QsIDB4MDAsIDB4MTQsIDB4NEIsCisweEQxLCAweDA4LCAweDQwLCAweDMxLCAweDAwLCAweEMxLCAweDBELCAweDA0LCAweDAzLCAweEQwLCAweDBDLCAweDQwLCAweDczLAorMHgwMSwgMHhDRCwgMHg4MCwgMHg3NCwgMHgwQiwgMHg1MCwgMHgwQywgMHg0MCwgMHg0OCwgMHgwMCwgMHgwQywgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTcsIDB4QTAsIDB4MTQsIDB4MDEsIDB4NzcsIDB4MDMsIDB4RkMsIDB4MjksCisweEQwLCAweDE3LCAweEMxLCAweDVELCAweDAwLCAweDVGLCAweDAwLCAweDlDLCAweDE5LCAweEQwLCAweDA3LCAweEMwLCAweDFFLAorMHgwMCwgMHg3MywgMHgwMiwgMHg0QywgMHgwMSwgMHhGMCwgMHg0NywgMHhDMCwgMHgxRiwgMHg4QywgMHg3RiwgMHgwMCwgMHhGQywKKzB4MDksIDB4NzIsIDB4MDUsIDB4NDAsIDB4NUMsIDB4MjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDEyLCAweDAwLCAweDA3LCAweDAwLCAweDFGLCAweDA4LCAweDdDLCAweDAwLCAweEQwLCAweDExLCAweDQwLCAweDQ2LAorMHgwMCwgMHgwRSwgMHg0MCwgMHg2OCwgMHgwMCwgMHhGMCwgMHgwMSwgMHhDMCwgMHgwNiwgMHgwMCwgMHgxRiwgMHg0MiwgMHg1QywKKzB4MDAsIDB4QjIsIDB4MTEsIDB4QzAsIDB4MDcsIDB4MDAsIDB4MUIsIDB4MTAsIDB4N0MsIDB4MTAsIDB4ODIsIDB4MDEsIDB4QzAsCisweDRCLCAweDAwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDAwLCAweDI3LAorMHgwMCwgMHg4RiwgMHgxMCwgMHg1NCwgMHgwQSwgMHhGMiwgMHgwOSwgMHg0MCwgMHgyNywgMHgwMCwgMHg5QiwgMHgwMCwgMHg0QywKKzB4MDYsIDB4RDAsIDB4OTksIDB4QzAsIDB4MjcsIDB4MDAsIDB4OEYsIDB4MDQsIDB4NUMsIDB4ODIsIDB4RTAsIDB4MDksIDB4QzAsCisweDI3LCAweDAwLCAweDk3LCAweDAwLCAweDdDLCAweDAyLCAweDMwLCAweDg5LCAweEMyLCAweDQzLCAweDIwLCAweDBDLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgyMCwgMHgyNiwgMHgxMCwgMHg5QywgMHgwMCwgMHg1NCwKKzB4MDIsIDB4RDAsIDB4QjksIDB4NDAsIDB4RTcsIDB4MDAsIDB4OUQsIDB4MDAsIDB4NDQsIDB4NkEsIDB4MTAsIDB4MTksIDB4MDQsCisweDI3LCAweDAwLCAweDlELCAweDAyLCAweDQ1LCAweDAyLCAweEMyLCAweDA5LCAweDQwLCAweDI3LCAweDAwLCAweDkwLCAweDEzLAorMHg3NCwgMHgyMiwgMHgxMCwgMHg1OSwgMHg0MCwgMHgwNywgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MTgsIDB4QTAsIDB4MjQsIDB4MDAsIDB4OUQsIDB4MDAsIDB4NDQsIDB4MDIsIDB4OTAsIDB4MDksIDB4NDAsCisweEU3LCAweDAwLCAweDlELCAweDgwLCAweDQ1LCAweDAyLCAweDkwLCAweDA5LCAweDQxLCAweDI2LCAweDAwLCAweDlELCAweDAyLAorMHg0NCwgMHg4MiwgMHg5MCwgMHgwOSwgMHg0MCwgMHgyMywgMHgwMCwgMHg5MSwgMHgwMSwgMHg3NCwgMHgwMiwgMHgxMCwgMHgwOSwKKzB4NDAsIDB4NjMsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MjAsCisweDIwLCAweDAyLCAweDhELCAweDE0LCAweDE0LCAweDU2LCAweEQwLCAweDBDLCAweDQwLCAweDIzLCAweDA4LCAweDhELCAweDAwLAorMHgwNCwgMHgwMiwgMHgxMCwgMHgwOCwgMHg0MCwgMHgyMywgMHgwMiwgMHg4RCwgMHgwMCwgMHgwNCwgMHgwMiwgMHhEMCwgMHg4OCwKKzB4MDAsIDB4MjMsIDB4MDIsIDB4ODEsIDB4MDAsIDB4MzAsIDB4MDIsIDB4MTQsIDB4NDgsIDB4NDksIDB4NDMsIDB4ODAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFELCAweEIwLCAweDg2LCAweDAwLCAweDFGLCAweDI0LAorMHg0QywgMHgxMCwgMHhGMCwgMHgwMSwgMHhDMCwgMHgwNywgMHgxMCwgMHgxRSwgMHgxNCwgMHg0QywgMHgwMCwgMHhCMCwgMHhBMSwKKzB4QzIsIDB4ODMsIDB4MDAsIDB4MUYsIDB4MUUsIDB4NEMsIDB4NzgsIDB4RjAsIDB4MjEsIDB4QzAsIDB4ODcsIDB4MDAsIDB4MTcsCisweDBBLCAweDNDLCAweDgxLCAweDMwLCAweDQxLCAweEMwLCAweDc3LCAweEMwLCAweDBBLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgxOSwgMHhCMCwgMHgyRiwgMHgwMSwgMHhCRiwgMHg5NCwgMHhGQywgMHg1MiwgMHhGMiwgMHgwQSwKKzB4QzgsIDB4MkYsIDB4MDAsIDB4OUMsIDB4MTQsIDB4RkMsIDB4MDIsIDB4QjAsIDB4MUYsIDB4ODAsIDB4MkYsIDB4MDEsIDB4QkYsCisweDgxLCAweDcwLCAweDA2LCAweEYxLCAweDRGLCAweEMwLCAweDJGLCAweDQxLCAweEJGLCAweDAxLCAweEZDLCAweDUzLCAweEYwLAorMHg0OSwgMHg0MSwgMHg2NywgMHg2MCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOSwKKzB4ODAsIDB4MjMsIDB4MDAsIDB4OTcsIDB4MDgsIDB4RjAsIDB4MzcsIDB4MzAsIDB4MEEsIDB4QzAsIDB4MkYsIDB4MjAsIDB4OUYsCisweDBDLCAweEZDLCAweDAyLCAweEYwLCAweDBCLCAweEMwLCAweEEyLCAweDAwLCAweEJGLCAweDEwLCAweDRDLCAweDAyLCAweEYwLAorMHgyOSwgMHhDMCwgMHgyNSwgMHgwMiwgMHhCMywgMHgwMCwgMHhGQywgMHgwMiwgMHgzMCwgMHgwQiwgMHhDMCwgMHg2NCwgMHgwMCwKKzB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MUMsIDB4MDgsIDB4MDcsIDB4MDEsIDB4MDEsCisweDA1LCAweDc0LCAweDNELCAweEIwLCAweDAxLCAweDQwLCAweDE3LCAweDAwLCAweDFELCAweDAxLCAweDc0LCAweDAxLCAweEQxLAorMHgwMSwgMHg0MCwgMHgwNCwgMHgwMCwgMHgwRCwgMHgwMiwgMHg1MSwgMHgyOCwgMHg5MSwgMHgwMSwgMHg0MCwgMHgxNCwgMHgxMSwKKzB4MTEsIDB4MDAsIDB4NzQsIDB4MDAsIDB4MTAsIDB4MDEsIDB4NDgsIDB4NzEsIDB4MDAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweEEwLCAweDIzLCAweDA0LCAweDg1LCAweDQyLCAweDM0LCAweDAyLCAweDU5LAorMHgwOCwgMHg0MCwgMHgyMywgMHgwOCwgMHg4RCwgMHgwMiwgMHgzNCwgMHgwMiwgMHhEMCwgMHgwOSwgMHg0MiwgMHgyMiwgMHgxMCwKKzB4OEQsIDB4MDAsIDB4MTYsIDB4ODIsIDB4RDAsIDB4MDksIDB4NDAsIDB4MjEsIDB4MDAsIDB4QzUsIDB4MjAsIDB4NzQsIDB4MDIsCisweDExLCAweDA4LCAweDUwLCAweDQwLCAweDgwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgxOCwgMHhBOCwgMHgyMSwgMHgwMCwgMHg5MSwgMHgwNCwgMHg3NCwgMHgwMywgMHhEMCwgMHgzOSwgMHg2MCwgMHgyNywgMHgwOCwKKzB4OUQsIDB4MDAsIDB4NzQsIDB4MDIsIDB4RDAsIDB4OEQsIDB4NDIsIDB4MjQsIDB4MDAsIDB4OUQsIDB4MDAsIDB4NTQsIDB4MDIsCisweEQwLCAweDA5LCAweDQwLCAweDI0LCAweDQwLCAweDk1LCAweDA0LCAweDc0LCAweDAyLCAweDUyLCAweDA5LCAweDQwLCAweDYxLAorMHgyMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHgyOCwgMHgyNSwgMHgwOCwKKzB4OTcsIDB4OTMsIDB4NzgsIDB4MEEsIDB4NzQsIDB4MTksIDB4QzAsIDB4RTcsIDB4MDAsIDB4OUYsIDB4MDAsIDB4N0MsIDB4MEEsCisweEYwLCAweDA4LCAweEM4LCAweEU2LCAweDAxLCAweDlGLCAweEI4LCAweDVDLCAweDAyLCAweEYwLCAweDI4LCAweEMyLCAweDI1LAorMHgwMCwgMHg5NywgMHgwNCwgMHgzQywgMHgwRSwgMHgyMCwgMHgwOSwgMHhDNCwgMHgxNCwgMHgyMCwgMHgwNCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDIsIDB4NjQsIDB4MDIsIDB4OUYsIDB4MDAsIDB4M0MsIDB4MTYsCisweEIwLCAweDA5LCAweEM0LCAweEU3LCAweDAwLCAweDlGLCAweDgwLCAweDdDLCAweDI2LCAweEYwLCAweDA5LCAweEMwLCAweDI3LAorMHgwMSwgMHg5RiwgMHgwMSwgMHg2OCwgMHgwMiwgMHhCMCwgMHgyOSwgMHhDNCwgMHgyNywgMHgwMSwgMHg5QiwgMHgwMCwgMHg3QywKKzB4MEUsIDB4QjQsIDB4MDgsIDB4NDAsIDB4NTIsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDE0LCAweDA4LCAweDA1LCAweDAwLCAweDEzLCAweDAyLCAweDRDLCAweDA4LCAweEYwLCAweDYxLCAweEMwLCAweDA3LAorMHgwMCwgMHgxNywgMHgwMCwgMHg0QywgMHg0MCwgMHhGMCwgMHgyMSwgMHg0MCwgMHgwNCwgMHgwMCwgMHgwMywgMHg0MiwgMHg1QywKKzB4MDAsIDB4MzAsIDB4MjEsIDB4QzAsIDB4ODcsIDB4MTAsIDB4MUYsIDB4MDAsIDB4NEMsIDB4MDgsIDB4RjAsIDB4MDEsIDB4RDEsCisweDUwLCAweDIwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDIwLCAweDE0LAorMHgwMCwgMHg1MSwgMHgwMCwgMHhDNCwgMHgwRCwgMHhEMCwgMHgzNywgMHg0MCwgMHgxQywgMHgwMiwgMHg1MSwgMHgyMCwgMHhDQywKKzB4NDEsIDB4RDIsIDB4MDcsIDB4NDgsIDB4MTQsIDB4MDAsIDB4NzEsIDB4NDksIDB4NDQsIDB4ODEsIDB4NTAsIDB4MDUsIDB4NDAsCisweDE3LCAweDAwLCAweDdDLCAweDgyLCAweEM0LCAweDY5LCAweEQwLCAweDA3LCAweDQwLCAweDUwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHhBMCwgMHgzMiwgMHg2MCwgMHhDMSwgMHg0MCwgMHgxNCwKKzB4Q0YsIDB4QzAsIDB4QjQsIDB4NDAsIDB4NzIsIDB4MDIsIDB4QzUsIDB4MDAsIDB4MjQsIDB4MDMsIDB4RDAsIDB4OEMsIDB4NDAsCisweDMwLCAweDEwLCAweEMxLCAweDBCLCAweDI0LCAweDAzLCAweDEwLCAweDBDLCAweDQwLCAweDM3LCAweDAwLCAweEM5LCAweDA0LAorMHgwNCwgMHg4MCwgMHhEMCwgMHgzMCwgMHg0MCwgMHg1MCwgMHgwMCwgMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDQsIDB4ODIsIDB4M0MsIDB4MjIsIDB4RTEsIDB4MEQsIDB4OTQsIDB4NDMsIDB4RDAsIDB4MTIsIDB4NDAsCisweDdFLCAweDAwLCAweEMxLCAweDAxLCAweDg0LCAweDAxLCAweEQwLCAweDBFLCAweDQwLCAweDdDLCAweDQzLCAweDYxLCAweDAwLAorMHhBNCwgMHgyNywgMHg1MCwgMHgwRSwgMHg0MCwgMHgzQiwgMHgxMCwgMHhBRCwgMHgyMSwgMHg4NCwgMHgwMSwgMHhEMCwgMHgyMywKKzB4NDQsIDB4MTAsIDB4MjAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MTAsCisweDc4LCAweDAxLCAweEUzLCAweDkxLCAweDlELCAweDA3LCAweEYwLCAweDE2LCAweEMwLCAweDRBLCAweDAwLCAweEU3LCAweDAxLAorMHhBRCwgMHgwNywgMHhFMSwgMHgxMywgMHhDMCwgMHg3OCwgMHgwMiwgMHhBMywgMHg2MSwgMHhGQywgMHgzNywgMHgzMCwgMHg1RSwKKzB4QzEsIDB4N0IsIDB4MDAsIDB4QkIsIDB4MDEsIDB4OEMsIDB4MDYsIDB4RkEsIDB4MUIsIDB4QzAsIDB4NTAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweEIwLCAweDM1LCAweDA0LCAweERGLCAweDQwLAorMHg2QywgMHgwMywgMHhGMywgMHgwMSwgMHhDMCwgMHgwMCwgMHgyMCwgMHhERiwgMHgwMCwgMHg3QywgMHgwMSwgMHhEMCwgMHgwNSwKKzB4OTAsIDB4MzcsIDB4MDEsIDB4MUYsIDB4MDAsIDB4NUMsIDB4OTMsIDB4RjEsIDB4QUQsIDB4ODAsIDB4QjcsIDB4MDMsIDB4OUMsCisweDQwLCAweDdDLCAweDAyLCAweEYwLCAweDA5LCAweEMwLCAweDQzLCAweDIwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHhBMCwgMHg3RiwgMHgwMCwgMHhGRiwgMHgwMSwgMHhEQywgMHgyNSwgMHgzMCwgMHgxRiwKKzB4QzAsIDB4N0YsIDB4MDAsIDB4RjcsIDB4MTEsIDB4RkMsIDB4MjYsIDB4MTAsIDB4MUYsIDB4QzAsIDB4N0YsIDB4MTAsIDB4N0YsCisweDA5LCAweENDLCAweDg3LCAweDMwLCAweDlGLCAweEMwLCAweEZDLCAweDhBLCAweEJGLCAweDBELCAweEVDLCAweDI0LCAweEYxLAorMHgxNywgMHhDMCwgMHgwQiwgMHgwMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwKKzB4ODgsIDB4MzksIDB4MjQsIDB4RUQsIDB4MDAsIDB4RjQsIDB4MDMsIDB4QjAsIDB4NEEsIDB4NDgsIDB4MEIsIDB4MDAsIDB4RUQsCisweDA0LCAweEI0LCAweDIxLCAweDEwLCAweDRFLCAweDQyLCAweDdCLCAweDAxLCAweDI5LCAweDAxLCAweDg0LCAweDAzLCAweEYwLAorMHgwRSwgMHg0NCwgMHgzOCwgMHgwMCwgMHg4RCwgMHg0MywgMHgzNCwgMHgyMSwgMHhEMCwgMHg4NCwgMHg0MCwgMHg1NywgMHgyMCwKKzB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDgsIDB4MDAsIDB4MzksIDB4MDAsIDB4RUQsCisweDEwLCAweDk0LCAweDAxLCAweDk4LCAweDAyLCAweDQwLCAweDBCLCAweDA0LCAweEVELCAweDgwLCAweEY0LCAweDAwLCAweDkwLAorMHgwMiwgMHg0MSwgMHgzQiwgMHgwMSwgMHgwRCwgMHgwOCwgMHg5NCwgMHgwMywgMHgxMCwgMHgwRSwgMHg0OCwgMHgzOCwgMHgyMCwKKzB4MjUsIDB4MDIsIDB4QjQsIDB4MjAsIDB4RDgsIDB4MEUsIDB4NDAsIDB4MjMsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA2LCAweDI4LCAweDMzLCAweDAwLCAweENELCAweDAxLCAweDc0LCAweDQyLCAweDkwLAorMHgwMCwgMHg0MCwgMHgwMywgMHgwMCwgMHhDRCwgMHgwMCwgMHgzNCwgMHgyRCwgMHg5MCwgMHgxMCwgMHg0MCwgMHgzNywgMHgwMCwKKzB4MTksIDB4MDAsIDB4MTQsIDB4MDMsIDB4RDAsIDB4MkQsIDB4NDAsIDB4QjAsIDB4MDAsIDB4MEQsIDB4MDgsIDB4MzQsIDB4MDMsCisweEQwLCAweDBDLCAweDQwLCAweDFCLCAweDIwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwNSwgMHg4OCwgMHgzRCwgMHgwMCwgMHhGRiwgMHgwMSwgMHg1QywgMHgwMiwgMHhCMCwgMHhBNSwgMHhDMCwgMHgyNywgMHg5MCwKKzB4RjcsIDB4MDAsIDB4N0MsIDB4MjcsIDB4QjYsIDB4QjksIDB4QzgsIDB4M0YsIDB4MDAsIDB4OUYsIDB4MjAsIDB4REMsIDB4MDMsCisweDMwLCAweEFGLCAweEM4LCAweDNDLCAweDA4LCAweDhGLCAweDAxLCAweDZDLCAweDgzLCAweEQwLCAweDBELCAweEM4LCAweDU3LAorMHgyMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgzNywgMHgwMCwKKzB4REYsIDB4MTAsIDB4N0MsIDB4MjgsIDB4RjAsIDB4MTUsIDB4QzAsIDB4QTcsIDB4MDAsIDB4REYsIDB4MDAsIDB4N0MsIDB4MDMsCisweDcwLCAweDIxLCAweEMwLCAweDc3LCAweDAwLCAweDFFLCAweDQyLCAweDI1LCAweDgzLCAweEIwLCAweDhELCAweEMwLCAweDM3LAorMHgwMCwgMHgxRCwgMHgwMiwgMHg3QywgMHgwMywgMHhEMCwgMHgwRCwgMHhDNCwgMHgyNywgMHgwMCwgMHgwQywgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODEsIDB4MDgsIDB4M0YsIDB4MjgsIDB4RkIsIDB4NDAsIDB4RkMsIDB4MDIsCisweDMwLCAweDM3LCAweEMwLCAweDJGLCAweDA0LCAweEZGLCAweDAwLCAweEZDLCAweDE2LCAweEYwLCAweDAzLCAweEMwLCAweDNGLAorMHgwMCwgMHgzMywgMHgwMCwgMHhDQywgMHgwMywgMHg3MSwgMHgwRiwgMHhFMCwgMHgzQywgMHgwQywgMHhCRiwgMHgyMCwgMHhEQywKKzB4MDMsIDB4RjIsIDB4MEIsIDB4QzIsIDB4MDQsIDB4MjAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweEExLCAweDAwLCAweDM2LCAweDAwLCAweERELCAweDAwLCAweDc0LCAweDA2LCAweEIwLCAweDA1LCAweEMwLCAweEU3LAorMHgwMCwgMHhERCwgMHgwMCwgMHg3NCwgMHgwQSwgMHhEMCwgMHgxMSwgMHg0MCwgMHgzNiwgMHgwMCwgMHgxQiwgMHgwMCwgMHg2QywKKzB4MDMsIDB4MTAsIDB4MEQsIDB4NDAsIDB4MzUsIDB4MDAsIDB4MUMsIDB4MDMsIDB4NDAsIDB4MDQsIDB4RDAsIDB4MzUsIDB4NDAsCisweDg0LCAweDA2LCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweEEwLCAweDM0LAorMHgwMCwgMHhERCwgMHgwMCwgMHg3NCwgMHgwNCwgMHgxOCwgMHgwRCwgMHg0MCwgMHg2NywgMHgwNCwgMHhERCwgMHgwMCwgMHg2NCwKKzB4MEEsIDB4RDAsIDB4MUIsIDB4NDAsIDB4MzcsIDB4MDAsIDB4MzEsIDB4MDYsIDB4QzAsIDB4MDMsIDB4MDAsIDB4MEQsIDB4NDQsCisweDM2LCAweDAwLCAweEJELCAweDAxLCAweDQ0LCAweEEzLCAweEQwLCAweDY0LCAweDUwLCAweDA0LCAweDAwLCAweDBBLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgyMCwgMHgzMCwgMHg4MCwgMHhDRCwgMHgwMCwgMHgzNiwKKzB4MDAsIDB4MTgsIDB4MEMsIDB4NDAsIDB4MDEsIDB4MDAsIDB4Q0QsIDB4MDAsIDB4MzQsIDB4MDMsIDB4RDEsIDB4MDAsIDB4NDIsCisweDM2LCAweDIxLCAweDE5LCAweDI0LCAweDI0LCAweDAzLCAweDE1LCAweDBDLCAweDQwLCAweDMwLCAweDAwLCAweDFELCAweDA0LAorMHgwNCwgMHhBNiwgMHhEMCwgMHgyOCwgMHg0MCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDEsIDB4QjAsIDB4M0UsIDB4MDgsIDB4RkIsIDB4ODAsIDB4N0MsIDB4MDAsIDB4MTQsIDB4MDEsIDB4NDAsCisweDI3LCAweDA4LCAweERGLCAweDAwLCAweDZDLCAweDAwLCAweEYwLCAweDAxLCAweEMyLCAweDNGLCAweDA1LCAweDEzLCAweDE2LAorMHg4QywgMHgwMywgMHg3MCwgMHgwRSwgMHhEMCwgMHgzQywgMHgxMCwgMHgxRiwgMHgxQywgMHg1QywgMHgwMSwgMHhGMCwgMHgyMSwKKzB4QzAsIDB4MDQsIDB4NDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4QjAsCisweDNGLCAweDAwLCAweEZGLCAweDQwLCAweEZDLCAweDAyLCAweEYyLCAweDAzLCAweEMwLCAweDBGLCAweDAwLCAweEZGLCAweDQwLAorMHhCQywgMHgwMCwgMHhGMCwgMHgwMywgMHhDMCwgMHgzNiwgMHgwMCwgMHgxRiwgMHgxNCwgMHhGQywgMHgwMywgMHhGMCwgMHgwRiwKKzB4QzQsIDB4M0YsIDB4MDAsIDB4MUYsIDB4MDQsIDB4RkQsIDB4MTAsIDB4RjIsIDB4NDMsIDB4MDAsIDB4MTcsIDB4NjAsIDB4MEUsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweEEwLCAweDdELCAweDAyLCAweEZBLCAweDAwLAorMHhGQywgMHgyMCwgMHhCMCwgMHgwRiwgMHhDMCwgMHgzRiwgMHgyMCwgMHhGNywgMHhBMCwgMHhFQywgMHgwMywgMHgzMCwgMHg0RiwKKzB4QzQsIDB4MEQsIDB4MTAsIDB4MzMsIDB4MDEsIDB4RkMsIDB4MjcsIDB4RjEsIDB4MzMsIDB4QzAsIDB4M0UsIDB4MDAsIDB4MkYsCisweDAxLCAweDZDLCAweDgwLCAweEYyLCAweDAzLCAweEM0LCAweDBGLCAweDAwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwOCwgMHgzNywgMHgyMCwgMHhGMSwgMHg4MiwgMHgzNCwgMHgzQSwgMHgxMCwgMHgzRiwKKzB4NDAsIDB4QkUsIDB4MTYsIDB4RjEsIDB4ODksIDB4RjQsIDB4MEYsIDB4MTAsIDB4OUYsIDB4QzgsIDB4NDUsIDB4MzIsIDB4OTUsCisweDAwLCAweDc0LCAweDExLCAweEQxLCAweDQxLCAweDQwLCAweDNGLCAweDIwLCAweDFELCAweDU0LCAweDQ0LCAweDA0LCAweEQwLAorMHgwMSwgMHg0MCwgMHgwNywgMHgyMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMSwKKzB4MjAsIDB4MzMsIDB4MTEsIDB4QzEsIDB4MzYsIDB4NzQsIDB4MDMsIDB4MTEsIDB4MkMsIDB4NDQsIDB4MzMsIDB4MDEsIDB4QzUsCisweDgwLCAweDM0LCAweDIzLCAweDEwLCAweDBDLCAweDQwLCAweDAzLCAweDAwLCAweDAxLCAweDAwLCAweDM0LCAweDEzLCAweDkwLAorMHgwMCwgMHg0MCwgMHgzMiwgMHgwMCwgMHhDRCwgMHgwMCwgMHgyNCwgMHg4MCwgMHhEOCwgMHgwMCwgMHg0MCwgMHg0NywgMHg4MCwKKzB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4QTgsIDB4NzUsIDB4MjAsIDB4RDEsCisweDAwLCAweDc0LCAweDA3LCAweDEwLCAweDBELCAweDQwLCAweDM2LCAweDIwLCAweEQxLCAweDAwLCAweDc0LCAweDgzLCAweDEwLAorMHgwRCwgMHg0MCwgMHg5NywgMHgwMCwgMHg5NCwgMHgwNCwgMHg3NCwgMHgyMSwgMHhEMCwgMHgxMSwgMHg0MywgMHgzRiwgMHgwMCwKKzB4MUQsIDB4MTAsIDB4QzAsIDB4NjAsIDB4QzAsIDB4M0IsIDB4NDAsIDB4MEYsIDB4MjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweEE4LCAweDM3LCAweDQwLCAweERCLCAweDAwLCAweDNDLCAweDA2LCAweEI0LAorMHgwRCwgMHhDMCwgMHgzNywgMHgwMCwgMHhENywgMHgwMCwgMHg2RSwgMHgwMywgMHgzMCwgMHgwRCwgMHhDMCwgMHg4MywgMHgwMCwKKzB4RDMsIDB4ODAsIDB4N0MsIDB4OTcsIDB4RjAsIDB4MTEsIDB4QzgsIDB4MzYsIDB4MDAsIDB4REYsIDB4MDAsIDB4NkMsIDB4MDAsCisweEYxLCAweDMxLCAweEMwLCAweDBCLCAweDIwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwNywgMHg4MCwgMHgzRCwgMHgwMCwgMHhGRiwgMHg4MCwgMHhGQywgMHgwMiwgMHhGMCwgMHgwRiwgMHhDMCwgMHgzRiwgMHgyMCwKKzB4REYsIDB4MDAsIDB4RkEsIDB4NDMsIDB4RjAsIDB4MEQsIDB4QzIsIDB4NEQsIDB4MDEsIDB4RkYsIDB4MDEsIDB4RkMsIDB4MDEsCisweEYwLCAweDAzLCAweEMwLCAweDNGLCAweDAwLCAweDNGLCAweDA5LCAweEZDLCAweDAwLCAweEYwLCAweDAzLCAweDQwLCAweDFGLAorMHgwMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHgwOCwgMHgzNSwgMHgwMSwKKzB4REYsIDB4MDgsIDB4N0MsIDB4MDMsIDB4MzAsIDB4MEQsIDB4QzAsIDB4MzMsIDB4MDAsIDB4REYsIDB4NDAsIDB4M0MsIDB4MDMsCisweEYwLCAweDBELCAweEMwLCAweDI3LCAweDA4LCAweERCLCAweDAwLCAweDdDLCAweDAzLCAweDMwLCAweDIxLCAweEMwLCAweDM3LAorMHgwNCwgMHhERiwgMHgwMiwgMHg0QywgMHgwMCwgMHhGMCwgMHgwOSwgMHhDMCwgMHgwQiwgMHgyMCwgMHgwNCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTMsIDB4QTAsIDB4RjQsIDB4MDksIDB4RkQsIDB4QzEsIDB4NzQsIDB4ODMsCisweDUwLCAweDNGLCAweDQ0LCAweDNGLCAweDAwLCAweEZDLCAweDBBLCAweEM0LCAweDhGLCAweEQwLCAweDBGLCAweDQxLCAweDM0LAorMHgwMCwgMHhERCwgMHgwMSwgMHg3NCwgMHg4MSwgMHgwMCwgMHgwMSwgMHgwMCwgMHhGRiwgMHgwMCwgMHgxQywgMHgwMCwgMHg0NCwKKzB4MTIsIDB4RDAsIDB4MzksIDB4NDAsIDB4NEYsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDA3LCAweEEwLCAweDc2LCAweDAwLCAweEM5LCAweDQ3LCAweDM0LCAweDAzLCAweDE4LCAweDBDLCAweDQ5LCAweDMzLAorMHgwMCwgMHhDRCwgMHgwMywgMHgwNCwgMHgyRiwgMHhEMCwgMHg1QywgMHg0MCwgMHgzMSwgMHgwMCwgMHg0OSwgMHgwMCwgMHgzNCwKKzB4MDIsIDB4MTAsIDB4MDAsIDB4NDAsIDB4RjMsIDB4MDAsIDB4MUQsIDB4MDAsIDB4MTQsIDB4MDQsIDB4RDAsIDB4MDAsIDB4MDEsCisweDFGLCAweDAwLCAweDBBLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDgwLCAweDc4LAorMHgwMCwgMHhFRCwgMHgwMSwgMHhCNCwgMHgyNywgMHg1MCwgMHg5RSwgMHg0MCwgMHg3QiwgMHgwMCwgMHhFRCwgMHgzNSwgMHg4NSwKKzB4MDcsIDB4RDAsIDB4NUUsIDB4NDAsIDB4NjksIDB4ODAsIDB4RUQsIDB4MDMsIDB4RjQsIDB4MDYsIDB4OTAsIDB4OTIsIDB4MDIsCisweDdCLCAweDAwLCAweDNELCAweDAxLCAweDk2LCAweDI0LCAweEQwLCAweDlBLCAweDQ4LCAweDEzLCAweDAwLCAweDAyLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHgxMCwgMHgzMCwgMHgwMiwgMHhDRiwgMHgwOCwgMHgzQywKKzB4MDMsIDB4M0EsIDB4MEMsIDB4QzEsIDB4MzMsIDB4MDAsIDB4Q0YsIDB4MEQsIDB4MkMsIDB4MDMsIDB4RjAsIDB4NUMsIDB4QzAsCisweDExLCAweDAwLCAweDRCLCAweDEwLCAweDNDLCAweDA2LCAweDMwLCAweDAwLCAweEMyLCAweDMzLCAweDA2LCAweENGLCAweDAwLAorMHgxQywgMHgxNCwgMHhGMCwgMHgwMCwgMHhDMSwgMHg0QiwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDIsIDB4QjgsIDB4M0QsIDB4MDAsIDB4RkUsIDB4MDAsIDB4RjgsIDB4MDMsIDB4RjgsIDB4MEYsIDB4QzksCisweDNGLCAweDAwLCAweEZGLCAweDAwLCAweEZDLCAweDAzLCAweEYwLCAweDBGLCAweEMxLCAweDFDLCAweDAwLCAweEZGLCAweDA4LAorMHgzQywgMHgwMiwgMHg3NSwgMHgwNywgMHhDNiwgMHgzRiwgMHgwMCwgMHhGRiwgMHgwMCwgMHhFRCwgMHgyMCwgMHhGMCwgMHgwQiwKKzB4RTgsIDB4MEIsIDB4NjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTUsIDB4QTAsCisweDM3LCAweDEwLCAweERFLCAweDQ0LCAweDdDLCAweDAzLCAweDMwLCAweDVELCAweEMyLCAweDM0LCAweDExLCAweEQzLCAweDA0LAorMHg3QywgMHgwQiwgMHhGMywgMHgzRCwgMHhEMSwgMHgzNCwgMHgwMCwgMHhEMywgMHgwMSwgMHg0QywgMHgwMywgMHhGMCwgMHgwMSwKKzB4RDAsIDB4QjQsIDB4MDcsIDB4Q0UsIDB4MDAsIDB4NEMsIDB4MDQsIDB4MzIsIDB4MTksIDB4QzAsIDB4NTQsIDB4MDAsIDB4MEUsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDg4LCAweDM4LCAweDAwLCAweEVELCAweDk2LAorMHhGNCwgMHgwMywgMHhCMCwgMHgwQywgMHg1NSwgMHgzOCwgMHgxNCwgMHhFMSwgMHgxNiwgMHhCNCwgMHg1QiwgMHhEMCwgMHg0QywKKzB4NDAsIDB4MjAsIDB4MTAsIDB4RjEsIDB4ODAsIDB4ODQsIDB4MDMsIDB4RDAsIDB4MDIsIDB4NDAsIDB4MzgsIDB4MDEsIDB4RUQsCisweDAwLCAweDg0LCAweDAyLCAweDExLCAweDBCLCAweEMwLCAweDRBLCAweDIwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHgwMCwgMHg3OCwgMHgwMCwgMHhFRCwgMHgwMSwgMHhCNCwgMHgwNywgMHgxMCwgMHgxRSwKKzB4NEEsIDB4NzAsIDB4MTMsIDB4RTEsIDB4MDEsIDB4QTQsIDB4MDcsIDB4RDAsIDB4NUUsIDB4NDAsIDB4NzgsIDB4NDAsIDB4RTEsCisweDAxLCAweDg0LCAweDA3LCAweEQwLCAweDE2LCAweDQzLCAweDc4LCAweDgxLCAweEZELCAweDAxLCAweDA0LCAweDg0LCAweDE4LAorMHgxQSwgMHg0MCwgMHgwQywgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwKKzB4MjgsIDB4MjMsIDB4MDIsIDB4REQsIDB4MDAsIDB4MzQsIDB4MDMsIDB4OTIsIDB4MEMsIDB4NDAsIDB4MzAsIDB4NDAsIDB4QzEsCisweDIwLCAweDM0LCAweDAzLCAweEQwLCAweDBDLCAweDQ4LCAweDMwLCAweDA0LCAweEMxLCAweDA4LCAweDA0LCAweDA3LCAweEQwLAorMHgyQywgMHg0MSwgMHgzMCwgMHgwMCwgMHhERCwgMHgxMCwgMHgwNCwgMHgwRiwgMHgxOCwgMHgzQywgMHg0MCwgMHg0QSwgMHgyMCwKKzB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTcsIDB4QTgsIDB4NTUsIDB4MDAsIDB4NUYsCisweDgwLCAweEZDLCAweDI5LCAweDMwLCAweDA1LCAweEMwLCAweDE0LCAweDAwLCAweDQzLCAweDAwLCAweDdDLCAweDAxLCAweEYwLAorMHgwNSwgMHg4MiwgMHgxQywgMHgwMCwgMHg3MywgMHgwMywgMHhDRCwgMHgxNSwgMHhGMCwgMHgzNywgMHhDMCwgMHgxNCwgMHgwMCwKKzB4N0YsIDB4MTIsIDB4Q0MsIDB4MTUsIDB4MzAsIDB4MTcsIDB4QzAsIDB4NUMsIDB4MjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDAwLCAweDA3LCAweDAwLCAweDFGLCAweDIwLCAweDdDLCAweDAwLCAweEYwLAorMHgwMSwgMHhDMCwgMHgwNywgMHgwOCwgMHgxRiwgMHgwMiwgMHg3QywgMHgwMCwgMHhGMCwgMHgwMSwgMHhDOCwgMHg4NywgMHgwMCwKKzB4MUYsIDB4MTAsIDB4N0MsIDB4ODAsIDB4RjMsIDB4MDEsIDB4QzAsIDB4MDcsIDB4MzAsIDB4MUYsIDB4MDAsIDB4N0QsIDB4MTAsCisweEYxLCAweDgxLCAweEMxLCAweDRCLCAweDAwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgxMCwgMHgwOCwgMHg2NywgMHgwMCwgMHg5MywgMHgwMCwgMHg0QywgMHgwMiwgMHg3MCwgMHgxOSwgMHhDMCwgMHgyNywgMHgwMCwKKzB4OTcsIDB4MDEsIDB4NUMsIDB4MjYsIDB4RjAsIDB4MTksIDB4QzAsIDB4MjMsIDB4MDAsIDB4OTAsIDB4ODAsIDB4N0MsIDB4MDIsCisweDMwLCAweDA5LCAweEMwLCAweEE0LCAweDAwLCAweDlGLCAweDA1LCAweDRDLCAweDEyLCAweEYwLCAweDI5LCAweEMwLCAweDQzLAorMHgyMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgyMCwgMHhFMiwgMHgyMiwKKzB4OTEsIDB4MDAsIDB4MTQsIDB4MDIsIDB4MTAsIDB4MDksIDB4NDAsIDB4MjcsIDB4MDAsIDB4OTEsIDB4MDMsIDB4NDQsIDB4OEEsCisweEQwLCAweDk5LCAweDQ0LCAweDI3LCAweDAyLCAweDkxLCAweDAyLCAweDc0LCAweDgyLCAweDEyLCAweDA4LCAweDQyLCAweDI0LAorMHgwMCwgMHg5RCwgMHgwMSwgMHg0NCwgMHgwMiwgMHhEMCwgMHgwOSwgMHg0MCwgMHgwNywgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4QTAsIDB4MjQsIDB4NDQsIDB4OTEsIDB4MjEsIDB4NTQsIDB4MDMsCisweDUwLCAweDQ5LCAweDQxLCAweDIzLCAweDAwLCAweDk1LCAweDg2LCAweDU0LCAweDBBLCAweEQxLCAweDA5LCAweDQwLCAweDI3LAorMHgwMCwgMHg5NSwgMHgwMSwgMHgzNCwgMHgwMiwgMHgxMCwgMHgwOSwgMHg0MCwgMHgyNCwgMHgwMCwgMHg5RCwgMHgwMCwgMHg0NCwKKzB4MDIsIDB4RDAsIDB4MDksIDB4NDEsIDB4NjMsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDEwLCAweDIwLCAweDI0LCAweDAwLCAweEMxLCAweDAwLCAweDU0LCAweDUyLCAweDU0LCAweDA4LCAweDQwLCAweDIzLAorMHgwMiwgMHg4MSwgMHg4MCwgMHgwMCwgMHgwMiwgMHhEMCwgMHgwOCwgMHg0MCwgMHgyMywgMHg0MCwgMHg4NSwgMHgwMSwgMHgzNCwKKzB4MjIsIDB4MTAsIDB4ODksIDB4NDIsIDB4NjAsIDB4MDEsIDB4OEQsIDB4MDgsIDB4MDQsIDB4MTIsIDB4RDAsIDB4NDgsIDB4NDgsCisweDQzLCAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFELCAweEIwLCAweDA2LAorMHgwMCwgMHgxMywgMHg5NCwgMHg1QywgMHgxMCwgMHg3NCwgMHg0MSwgMHhDMSwgMHg4NywgMHgwNSwgMHgxNiwgMHg5NCwgMHg1QywKKzB4NTAsIDB4RjEsIDB4NDUsIDB4QzEsIDB4MTcsIDB4MDUsIDB4MTcsIDB4MEEsIDB4N0MsIDB4MDgsIDB4MzQsIDB4MjAsIDB4QzAsCisweEM0LCAweDAyLCAweDFGLCAweDAyLCAweDRELCAweDA0LCAweEYwLCAweEIxLCAweEMwLCAweDc3LCAweEMwLCAweDBBLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOSwgMHhCOCwgMHgyRiwgMHgwNSwgMHg5RiwgMHgzNCwgMHhGQywKKzB4NTIsIDB4QjAsIDB4MDksIDB4QzIsIDB4MjcsIDB4MDEsIDB4OUYsIDB4MDAsIDB4N0MsIDB4MDIsIDB4RjAsIDB4MDksIDB4QzAsCisweDJGLCAweDAwLCAweEJCLCAweDAxLCAweEZDLCAweDEyLCAweEYwLCAweDRCLCAweEQwLCAweDY3LCAweDAyLCAweEJGLCAweDA0LAorMHhGQywgMHgyMiwgMHhGMCwgMHg5QiwgMHhDMiwgMHg2NywgMHg2MCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MTgsIDB4QTAsIDB4MkYsIDB4MDIsIDB4QkYsIDB4ODYsIDB4MEMsIDB4MTYsIDB4QjAsIDB4NEIsIDB4QzAsCisweDI3LCAweDA1LCAweEJCLCAweDAwLCAweERDLCAweDgyLCAweDMwLCAweDBCLCAweEMwLCAweDJELCAweDAwLCAweEJGLCAweEMwLAorMHg3QywgMHgyMiwgMHgzMCwgMHgyOSwgMHhDMCwgMHgyRiwgMHgwMCwgMHhCMSwgMHgwMiwgMHhDQywgMHgwMiwgMHhFMCwgMHgwQiwKKzB4QzAsIDB4NjAsIDB4MDAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MUMsIDB4MDgsCisweDQ3LCAweDAxLCAweDFELCAweDAxLCAweDQ0LCAweDVDLCAweDEwLCAweDAxLCAweDQwLCAweDg3LCAweDAxLCAweDFELCAweDAwLAorMHg0NCwgMHgwMCwgMHgxNCwgMHhBMSwgMHg0MCwgMHgwNCwgMHgwMCwgMHgwRCwgMHgwMCwgMHg3NCwgMHgwMCwgMHgxMCwgMHgwMSwKKzB4NDAsIDB4MDcsIDB4MDAsIDB4MTUsIDB4MDQsIDB4NDUsIDB4MDAsIDB4RDIsIDB4MDEsIDB4NDgsIDB4NzAsIDB4MjAsIDB4MEMsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweEEwLCAweDIzLCAweDAwLCAweDhELCAweDA2LAorMHgwNCwgMHgyMiwgMHg5MiwgMHgyOCwgMHg0MCwgMHgyMywgMHgwNCwgMHg4RCwgMHgyMiwgMHgwNCwgMHg4QSwgMHgxMCwgMHgwOCwKKzB4NTAsIDB4QTAsIDB4MDAsIDB4OEQsIDB4MDAsIDB4MzQsIDB4MTIsIDB4MTAsIDB4MDgsIDB4NjAsIDB4MjMsIDB4MTAsIDB4ODEsCisweDIwLCAweDA1LCAweDgzLCAweEQwLCAweDA5LCAweDYwLCAweDQyLCAweDgwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHhBOCwgMHgyNSwgMHg4MCwgMHg5RCwgMHgwMCwgMHg0NSwgMHgwMiwgMHgxMCwgMHgwOSwKKzB4NjAsIDB4MjcsIDB4MDAsIDB4OUQsIDB4MDAsIDB4NDcsIDB4MDIsIDB4MTAsIDB4MDksIDB4MDAsIDB4MjQsIDB4MDEsIDB4OUQsCisweDAwLCAweDc0LCAweDAyLCAweDEwLCAweEE5LCAweDQwLCAweDI3LCAweDAwLCAweDk1LCAweDE0LCAweDQ1LCAweDBFLCAweEQxLAorMHg2OSwgMHg0MCwgMHg2MiwgMHgyMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwKKzB4ODgsIDB4NjcsIDB4MDIsIDB4OUYsIDB4MDAsIDB4NEMsIDB4MzYsIDB4QjAsIDB4MDksIDB4QzgsIDB4MjcsIDB4MDAsIDB4OUIsCisweDQwLCAweDVDLCAweDAyLCAweDEyLCAweDA5LCAweEMwLCAweDI0LCAweDAxLCAweDlFLCAweDAwLCAweDdDLCAweDAyLCAweDM0LAorMHgyOSwgMHhDMCwgMHgyNywgMHgwMCwgMHg4MywgMHgwMSwgMHg0QywgMHgwRSwgMHhGMiwgMHgyOSwgMHhEMCwgMHgxNiwgMHgyMCwKKzB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4ODAsIDB4NjUsIDB4MTAsIDB4OUYsCisweDAwLCAweDNDLCAweDAyLCAweEYwLCAweDA5LCAweEMwLCAweDI3LCAweDAwLCAweDlGLCAweDUwLCAweDNDLCAweDAyLCAweEYwLAorMHgwOSwgMHhDMCwgMHgyNiwgMHgwMCwgMHg5RiwgMHgwMCwgMHg3QywgMHgwMiwgMHhGMCwgMHgwOSwgMHhDMCwgMHgyNywgMHgwMCwKKzB4OUYsIDB4MDEsIDB4N0QsIDB4MDIsIDB4RjAsIDB4MDksIDB4QzAsIDB4NTEsIDB4MDAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDA4LCAweDA0LCAweDAwLCAweDAzLCAweDAwLCAweDRELCAweDAwLCAweDUwLAorMHgwMSwgMHhDMCwgMHgwNSwgMHgwMCwgMHgwMywgMHgwOCwgMHg3QywgMHgwMCwgMHhGMCwgMHgwMSwgMHhDMSwgMHg4NywgMHgwMSwKKzB4MTMsIDB4MDAsIDB4NEMsIDB4MDAsIDB4RjAsIDB4MDEsIDB4QzAsIDB4MDEsIDB4MDEsIDB4MTMsIDB4MDIsIDB4NEMsIDB4MDAsCisweDMwLCAweDIxLCAweEMxLCAweDUwLCAweDIwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgxNCwgMHhBMCwgMHhEQywgMHgwMCwgMHg3NSwgMHgxOSwgMHg0NCwgMHgwMSwgMHg1MCwgMHgyNywgMHhDMCwgMHgxNiwgMHg1MCwKKzB4NzEsIDB4MjMsIDB4RjQsIDB4MjEsIDB4RDAsIDB4MDYsIDB4NDEsIDB4MUYsIDB4MjAsIDB4NzUsIDB4MDEsIDB4NDQsIDB4MDEsCisweEQwLCAweDA1LCAweDQ4LCAweDFGLCAweDE4LCAweDc1LCAweDBBLCAweDQ0LCAweDAxLCAweDExLCAweDI3LCAweEMwLCAweDUyLAorMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHhBMCwgMHg3MiwgMHg4MSwKKzB4QzksIDB4MDMsIDB4MDQsIDB4MDMsIDB4MTAsIDB4OUMsIDB4NDEsIDB4MzMsIDB4MDAsIDB4ODEsIDB4MDMsIDB4MzQsIDB4MkIsCisweEQwLCAweDJDLCAweDQwLCAweDMzLCAweDAwLCAweEM1LCAweDExLCAweDQ0LCAweDAzLCAweEQwLCAweDBDLCAweDQwLCAweEYxLAorMHg4MCwgMHhDOSwgMHgwMSwgMHgwNCwgMHgwMywgMHgxMiwgMHg4RCwgMHg0MCwgMHg1MiwgMHgwMCwgMHgwQSwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4ODAsIDB4NzgsIDB4MDQsIDB4RUQsIDB4MjAsIDB4QzQsIDB4MDMsCisweDUwLCAweDFBLCAweDQwLCAweDdBLCAweDAwLCAweEUxLCAweDAwLCAweEIwLCAweDAxLCAweEQwLCAweDBFLCAweDQwLCAweDdCLAorMHg0OCwgMHhFNSwgMHgxMSwgMHg4NCwgMHgyMywgMHhDMCwgMHg4RSwgMHg0MCwgMHgxMywgMHgwNCwgMHhFRCwgMHgxMCwgMHhDNCwKKzB4MDcsIDB4MUMsIDB4MEIsIDB4NDAsIDB4MTYsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDE1LCAweDEwLCAweDdDLCAweDAwLCAweEZCLCAweDgxLCAweDhDLCAweDQ3LCAweDc0LCAweDFFLCAweEMwLCAweDczLAorMHgwMSwgMHhBMywgMHgwMSwgMHhCQywgMHgwNiwgMHhGMCwgMHgxRSwgMHhDMCwgMHg3QiwgMHgwMCwgMHg2NywgMHg4MSwgMHg4NCwKKzB4RDcsIDB4RjAsIDB4MUUsIDB4QzEsIDB4NjksIDB4MjAsIDB4QkIsIDB4MDEsIDB4OEQsIDB4MDcsIDB4MzAsIDB4MUIsIDB4QzAsCisweDU2LCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweEI4LCAweDE1LAorMHgwMCwgMHhENywgMHgwMCwgMHg3QywgMHgzMywgMHhGMCwgMHgwMCwgMHhDMCwgMHhCNSwgMHgyMCwgMHg5RiwgMHgwMCwgMHg3QywKKzB4MDAsIDB4RjEsIDB4MDksIDB4QzAsIDB4MzMsIDB4MDAsIDB4MUIsIDB4MDAsIDB4NzUsIDB4MDMsIDB4RjIsIDB4NkQsIDB4QzAsCisweDA3LCAweDAwLCAweDk3LCAweDAwLCAweDNDLCAweDAyLCAweEYxLCAweDAxLCAweEMwLCAweDQzLCAweDYwLCAweDA2LCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhBMCwgMHg1RiwgMHgwMCwgMHg3RiwgMHgwMSwgMHhGQywKKzB4MDcsIDB4NzAsIDB4MUYsIDB4QzAsIDB4RkYsIDB4NDQsIDB4QjMsIDB4MDksIDB4OUMsIDB4MjcsIDB4NzAsIDB4OUYsIDB4QzAsCisweDdGLCAweDAwLCAweEEzLCAweDQxLCAweEVDLCAweDA3LCAweDMxLCAweDFELCAweEMwLCAweDRGLCAweDAwLCAweEYzLCAweDAxLAorMHhDQywgMHgwNywgMHgzMCwgMHg5QiwgMHhDMCwgMHgwMCwgMHgwMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MTUsIDB4ODgsIDB4QjksIDB4MDAsIDB4NkQsIDB4MDIsIDB4QjQsIDB4MDMsIDB4QjAsIDB4MEEsIDB4NjAsCisweDNCLCAweDAwLCAweEMxLCAweDA4LCAweEI0LCAweDgyLCAweDEwLCAweDA0LCAweDQ4LCAweDNCLCAweDAwLCAweDIxLCAweDAwLAorMHgwNCwgMHgzNywgMHgxMCwgMHgxRSwgMHhDMCwgMHgwRiwgMHgwMCwgMHhGQiwgMHgxOCwgMHhDNCwgMHgyMywgMHhCMiwgMHhDQSwKKzB4NTAsIDB4NTQsIDB4MjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDE5LCAweDAwLCAweDZELCAweDA4LCAweEY0LCAweDAzLCAweDUwLCAweDBBLCAweDQwLCAweDM5LCAweDAwLCAweEE5LCAweDgwLAorMHg5NCwgMHgwMiwgMHg1MCwgMHgwRSwgMHg2MCwgMHgxQiwgMHgwMiwgMHgzOSwgMHgwMCwgMHhDNCwgMHgxMywgMHgxMCwgMHgwRSwKKzB4NDEsIDB4MEIsIDB4MDAsIDB4QjEsIDB4MDAsIDB4QzQsIDB4NDMsIDB4NTAsIDB4MEEsIDB4NDAsIDB4MDEsIDB4MDAsIDB4MDQsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDI4LCAweDQzLCAweDIwLCAweDBELCAweDgwLAorMHgzNCwgMHgwMywgMHg5MCwgMHgwMCwgMHg0MCwgMHgzNywgMHgwOCwgMHg0OSwgMHg0MCwgMHgzNCwgMHgwMiwgMHgxMCwgMHgwMCwKKzB4NDQsIDB4NTMsIDB4NDIsIDB4MDksIDB4MDIsIDB4MDQsIDB4MDMsIDB4OTQsIDB4MUQsIDB4NDAsIDB4MDEsIDB4MDAsIDB4ODksCisweDEwLCAweDA0LCAweDA2LCAweEQ4LCAweDYwLCAweDQwLCAweDExLCAweDIwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwgMHhBOCwgMHg2NCwgMHgwMSwgMHg5RiwgMHgwMCwgMHhGQywgMHgwMywgMHg3NCwgMHgwMSwKKzB4QzAsIDB4M0YsIDB4MDAsIDB4OUIsIDB4MDAsIDB4NUMsIDB4MDIsIDB4NTAsIDB4MDEsIDB4QzAsIDB4MzcsIDB4MDgsIDB4MTMsCisweDAyLCAweENDLCAweDAzLCAweDMwLCAweEJGLCAweDQwLCAweDM3LCAweDAwLCAweDUzLCAweDAwLCAweDRELCAweEFCLCAweDUwLAorMHgwOSwgMHhDMSwgMHg1NSwgMHgyMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwKKzB4MDAsIDB4QTcsIDB4MDAsIDB4OUYsIDB4MDAsIDB4N0MsIDB4NDMsIDB4RjAsIDB4MjEsIDB4QzAsIDB4MzcsIDB4MDAsIDB4RDcsCisweDIwLCAweDdDLCAweDA4LCAweEYwLCAweDAxLCAweEMwLCAweDMzLCAweDAwLCAweDE3LCAweDgyLCAweDVDLCAweDQzLCAweDcwLAorMHgwRCwgMHhDMCwgMHg4NywgMHgwMCwgMHg1RiwgMHhDMiwgMHg3QywgMHgwMywgMHhCMCwgMHgyOSwgMHg4OCwgMHgwNiwgMHgwMCwKKzB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDgsIDB4MkYsIDB4MjAsIDB4MkYsCisweDgwLCAweEQ0LCAweDAzLCAweDNDLCAweDAyLCAweEM4LCAweDM0LCAweDAwLCAweEIzLCAweDAwLCAweERDLCAweDAwLCAweEYwLAorMHgyQiwgMHhFMCwgMHgyNCwgMHgyMCwgMHgzMywgMHgxMCwgMHhGNCwgMHgwMywgMHhCMCwgMHgwRiwgMHhDMCwgMHgwQywgMHgwMCwKKzB4N0YsIDB4MDAsIDB4Q0MsIDB4MjcsIDB4RjAsIDB4MDksIDB4QzAsIDB4MDMsIDB4MjIsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgxLCAweDIwLCAweEU2LCAweDAwLCAweDlELCAweDQzLCAweDA2LCAweDAzLCAweDEwLAorMHgxMSwgMHg0MCwgMHgzNCwgMHgwMCwgMHg4MSwgMHgwMCwgMHg0NCwgMHgxNCwgMHhEMCwgMHgxOCwgMHhFMCwgMHgyNiwgMHgwMCwKKzB4MTEsIDB4MDQsIDB4NzQsIDB4MDMsIDB4RDAsIDB4MEQsIDB4QzAsIDB4NDQsIDB4MDEsIDB4NDcsIDB4ODUsIDB4N0MsIDB4MDIsCisweEQwLCAweDUxLCAweDQwLCAweDA3LCAweDAyLCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMSwgMHhBMCwgMHg0NCwgMHgwMCwgMHg5RCwgMHgyMSwgMHg0MCwgMHgwMywgMHg5MiwgMHgzOSwgMHg0NCwgMHgzNCwgMHgwMCwKKzB4OTEsIDB4MDAsIDB4NTYsIDB4MDYsIDB4RDIsIDB4MjUsIDB4NDgsIDB4NzQsIDB4MDAsIDB4MzEsIDB4ODQsIDB4NzQsIDB4ODMsCisweEQ4LCAweDBELCAweDQwLCAweDRDLCAweDAwLCAweDlELCAweDAxLCAweDQ1LCAweDAyLCAweEQwLCAweDEzLCAweDQwLCAweDA3LAorMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgyMCwgMHgyMCwgMHgwMCwKKzB4OEQsIDB4MjAsIDB4NTQsIDB4MDMsIDB4MTIsIDB4MDgsIDB4NDAsIDB4MzAsIDB4MjAsIDB4QzEsIDB4NDAsIDB4MTYsIDB4MDIsCisweEQwLCAweDI0LCAweDQ0LCAweDMyLCAweDEwLCAweDAxLCAweDAwLCAweDM0LCAweDMzLCAweEQ4LCAweDBDLCAweDQ1LCAweDAwLAorMHgxMCwgMHg4NSwgMHgwMCwgMHgzNCwgMHgyMiwgMHhEMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4QjAsIDB4MDYsIDB4MDgsIDB4MUYsIDB4MDAsIDB4RDQsIDB4MDMsCisweDMyLCAweDA5LCAweEMyLCAweDNDLCAweDAwLCAweDkzLCAweDJBLCAweDU0LCAweDAwLCAweEQ5LCAweDBELCAweDQwLCAweDA0LAorMHgwMCwgMHgxMywgMHgwMCwgMHhGQywgMHg5QiwgMHhCMSwgMHgwRiwgMHhDMCwgMHgwNCwgMHgwMCwgMHg5RiwgMHgwMCwgMHg0QywKKzB4MDIsIDB4RjEsIDB4MDEsIDB4QzAsIDB4MDMsIDB4QzAsIDB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDA1LCAweEIyLCAweDJGLCAweDAwLCAweEJGLCAweDAwLCAweEFELCAweDAzLCAweEYxLCAweDAzLCAweEMwLCAweDNGLAorMHgxMCwgMHg3RiwgMHgwNCwgMHhFQywgMHgwMCwgMHhGMCwgMHgwMywgMHhDNiwgMHgwRiwgMHg0MCwgMHgzRiwgMHgwMCwgMHgzQywKKzB4MEIsIDB4RjAsIDB4MEYsIDB4QzAsIDB4MEQsIDB4MTAsIDB4QjcsIDB4MDAsIDB4RkMsIDB4MTIsIDB4RjgsIDB4MDMsIDB4QzAsCisweDE3LCAweDYwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweDgwLCAweDJGLAorMHgwMSwgMHhCRiwgMHgwOCwgMHhGQywgMHg0MywgMHgzMCwgMHg4RiwgMHhDMCwgMHgzRiwgMHgwNSwgMHgzRiwgMHgwMywgMHhEQywKKzB4MjMsIDB4RjAsIDB4M0IsIDB4RDAsIDB4M0MsIDB4MDAsIDB4RkIsIDB4MDAsIDB4RkMsIDB4MTMsIDB4MzAsIDB4MTMsIDB4QzAsCisweDdDLCAweDEwLCAweDNELCAweDYxLCAweENDLCAweDE4LCAweDMwLCAweDQzLCAweEMxLCAweDBDLCAweDAwLCAweDBFLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHgxMCwgMHg4NywgMHgxRCwgMHg5RCwgMHgwMiwgMHhEQywKKzB4MEYsIDB4MDAsIDB4NkYsIDB4NDAsIDB4QkYsIDB4MDEsIDB4MUQsIDB4MDQsIDB4QzQsIDB4MEIsIDB4NzAsIDB4MEQsIDB4NDAsCisweEZDLCAweDAwLCAweEYxLCAweDAzLCAweEY0LCAweEE3LCAweDEwLCAweDExLCAweDQwLCAweDA0LCAweDA4LCAweDFELCAweDAwLAorMHgwNCwgMHhBQiwgMHgxMCwgMHgyOSwgMHg1MSwgMHgwQywgMHg2MCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MTMsIDB4QTAsIDB4MjEsIDB4ODIsIDB4MEQsIDB4MDgsIDB4MTQsIDB4MDMsIDB4MTAsIDB4NkMsIDB4NDgsCisweDMzLCAweDE0LCAweDlELCAweDAwLCAweDE0LCAweDMzLCAweEQyLCAweDQ4LCAweDYwLCAweDMwLCAweDBBLCAweEM5LCAweDA4LAorMHgzNCwgMHgwMywgMHgxMCwgMHgwMSwgMHg0MCwgMHgzMCwgMHgyMCwgMHgxRCwgMHgwMCwgMHgwNCwgMHgxMCwgMHgxMCwgMHg0MCwKKzB4NDIsIDB4NEQsIDB4ODAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4QTAsCisweDQ3LCAweDAwLCAweDlELCAweDAzLCAweDU0LCAweDgzLCAweDE0LCAweDBELCAweDQwLCAweDM3LCAweDAwLCAweDlELCAweDAxLAorMHg0NCwgMHgwMywgMHg1MCwgMHgwQywgMHg2MCwgMHgzNCwgMHgxMCwgMHhEMCwgMHgwMCwgMHg3NCwgMHgwMywgMHgxNCwgMHgxNSwKKzB4MTgsIDB4MjQsIDB4MDAsIDB4MUQsIDB4MDEsIDB4NDQsIDB4ODEsIDB4MTYsIDB4MDEsIDB4NDEsIDB4MEQsIDB4MDAsIDB4MDYsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDIyLCAweEE4LCAweEM3LCAweDAwLCAweDlGLCAweDAxLAorMHg1QywgMHgwMywgMHgzMCwgMHgwRCwgMHhDMCwgMHgzNywgMHgwMCwgMHgwRiwgMHgwMywgMHg1QywgMHg4MywgMHhGMCwgMHg4RCwKKzB4QzAsIDB4MzAsIDB4MDgsIDB4REIsIDB4NjAsIDB4M0MsIDB4MDMsIDB4MzAsIDB4MjAsIDB4QzQsIDB4MzQsIDB4MDAsIDB4MEYsCisweDUzLCAweDRDLCAweDI0LCAweDMwLCAweDExLCAweEM0LCAweDI5LCAweDIwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwNywgMHg4MCwgMHgwRCwgMHgwMCwgMHhCRiwgMHgwMCwgMHhEQywgMHgwMywgMHhGMSwgMHgwRCwKKzB4QzAsIDB4M0YsIDB4MDAsIDB4M0YsIDB4MDAsIDB4RkMsIDB4MDMsIDB4RDAsIDB4MUYsIDB4QzAsIDB4M0YsIDB4MDAsIDB4RkYsCisweDUwLCAweEYwLCAweDgzLCAweEYwLCAweDAzLCAweEM4LCAweDhGLCAweDAwLCAweDNGLCAweDAwLCAweEJDLCAweEM3LCAweEYwLAorMHgzRCwgMHhDMCwgMHgxRSwgMHgwMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwQSwKKzB4MDgsIDB4QTUsIDB4MDAsIDB4MUYsIDB4MDAsIDB4MEMsIDB4MDMsIDB4RjAsIDB4MEQsIDB4QzQsIDB4MzUsIDB4MDAsIDB4MUYsCisweDAyLCAweDdDLCAweDAzLCAweEYwLCAweDBELCAweEMwLCAweDM3LCAweDAwLCAweEQ3LCAweDAwLCAweDdDLCAweDAzLCAweEYwLAorMHgwNSwgMHhDMCwgMHgzNCwgMHgxMCwgMHgxRiwgMHgwMCwgMHg0QywgMHgyMiwgMHgzNCwgMHgyQywgMHhDMCwgMHgyOCwgMHgyMCwKKzB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTMsIDB4QTAsIDB4NjQsIDB4MDQsIDB4OUQsCisweDAwLCAweEM0LCAweDNCLCAweEQwLCAweDBGLCAweDQwLCAweDNDLCAweDAwLCAweDlELCAweDAwLCAweEZDLCAweDAzLCAweEQwLAorMHgwRCwgMHg0OCwgMHgzRiwgMHgwMCwgMHhGMSwgMHgwMywgMHhGNCwgMHgyQiwgMHhEMCwgMHhBNSwgMHhDMCwgMHgyNiwgMHgwOCwKKzB4MUQsIDB4MDAsIDB4NDQsIDB4MEYsIDB4MTAsIDB4M0QsIDB4NDAsIDB4NEMsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweDIwLCAweEUyLCAweDM0LCAweDBELCAweDQwLCAweDA0LCAweDA3LCAweDkwLAorMHgwQywgMHg0NCwgMHgzMCwgMHgwOCwgMHg4QywgMHgwMCwgMHgzNCwgMHgwMywgMHg5MCwgMHgwQywgMHg0OCwgMHgzMiwgMHgwMCwKKzB4QzAsIDB4MDEsIDB4MzQsIDB4MjcsIDB4RDAsIDB4MjAsIDB4NDAsIDB4MzAsIDB4MDQsIDB4MEQsIDB4MDAsIDB4MDQsIDB4MDAsCisweDEwLCAweDA0LCAweDQxLCAweDBDLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwRCwgMHgwMiwgMHg3QSwgMHgwMiwgMHg2RCwgMHgwMSwgMHg4NCwgMHgwNywgMHhEMCwgMHg5RSwgMHg0MiwgMHg3OCwgMHgwMCwKKzB4QUQsIDB4MDEsIDB4OTQsIDB4MDcsIDB4RDAsIDB4MUUsIDB4NDAsIDB4NzMsIDB4MDIsIDB4RTUsIDB4MDEsIDB4QjQsIDB4MDcsCisweEQwLCAweDE3LCAweDQwLCAweDVCLCAweDA0LCAweDNELCAweDAxLCAweDg0LCAweDA2LCAweDEyLCAweDkyLCAweDQxLCAweDM0LAorMHgyMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHgwMCwgMHgzMiwgMHgwMCwKKzB4NUYsIDB4MDgsIDB4MEQsIDB4MDMsIDB4RjAsIDB4MEMsIDB4QzAsIDB4MzEsIDB4MDIsIDB4OEYsIDB4MDgsIDB4MzQsIDB4MDMsCisweEYwLCAweDRDLCAweEMwLCAweDMzLCAweDBBLCAweEM3LCAweDEwLCAweDNDLCAweDAzLCAweEYwLCAweEExLCAweEUwLCAweDMwLAorMHgwMCwgMHg1RiwgMHgwMCwgMHgwQywgMHg4MCwgMHgzMCwgMHg1MCwgMHhEMCwgMHg0OCwgMHg0MCwgMHgwOCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4QkEsIDB4M0QsIDB4MjAsIDB4RkYsIDB4MDAsIDB4RkMsIDB4MDMsCisweEYwLCAweDBGLCAweEMzLCAweDNGLCAweDAwLCAweEJGLCAweDI4LCAweEZDLCAweDIzLCAweEYwLCAweDBGLCAweEM0LCAweDNGLAorMHgwMiwgMHhEQiwgMHgxMCwgMHhGQywgMHgyMywgMHhGMCwgMHgwNywgMHhFMCwgMHgzRSwgMHg4MCwgMHg3RiwgMHgwMCwgMHhGQywKKzB4MDAsIDB4RjgsIDB4ODEsIDB4QzIsIDB4MEIsIDB4MjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDEwLCAweEEwLCAweDU3LCAweDAwLCAweEQzLCAweDAwLCAweDdDLCAweDZGLCAweEIwLCAweDVELCAweEUwLCAweEI3LAorMHgxNCwgMHgxRiwgMHgwMCwgMHg3QywgMHgxMywgMHhGMCwgMHgwRCwgMHhDMCwgMHhCNywgMHgwMywgMHhEMywgMHgxNSwgMHg0QywKKzB4NTMsIDB4RjAsIDB4MDUsIDB4RTAsIDB4NzcsIDB4MDAsIDB4NTMsIDB4MDAsIDB4N0MsIDB4MDEsIDB4MzAsIDB4MEQsIDB4QzAsCisweDQwLCAweDAwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEzLCAweDk4LCAweDFELAorMHgwMCwgMHhFQiwgMHgwMCwgMHhCNCwgMHgwMywgMHgxOCwgMHhDRiwgMHg2MCwgMHhCOCwgMHgwMSwgMHhFRCwgMHgwMCwgMHhCNCwKKzB4NEIsIDB4RDAsIDB4MEUsIDB4NDAsIDB4M0IsIDB4MDMsIDB4QzEsIDB4MDQsIDB4ODQsIDB4MUIsIDB4RDAsIDB4MDYsIDB4NDAsCisweDFCLCAweDIwLCAweDYxLCAweDIwLCAweEY0LCAweDAzLCAweDE0LCAweDBGLCAweDQwLCAweDRDLCAweDYwLCAweDA2LCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMiwgMHg3OSwgMHgxNCwgMHg2MSwgMHgyMSwgMHgzNiwKKzB4MDcsIDB4MTgsIDB4NUUsIDB4NEMsIDB4NzksIDB4MDAsIDB4NkQsIDB4MDEsIDB4QjQsIDB4MDcsIDB4RDAsIDB4MUUsIDB4NjQsCisweDcxLCAweDAxLCAweEUxLCAweDQxLCAweDk2LCAweDE3LCAweEQwLCAweDE2LCAweDQwLCAweDdGLCAweDAwLCAweDY1LCAweDAxLAorMHhCNiwgMHgwNywgMHg5NCwgMHgxRSwgMHg0MiwgMHgxMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MTYsIDB4MjAsIDB4MzMsIDB4MDAsIDB4QzksIDB4MEIsIDB4MzQsIDB4ODMsIDB4MTAsIDB4MEMsIDB4NDAsCisweDMwLCAweDAwLCAweENELCAweDA3LCAweDc0LCAweDAzLCAweEQwLCAweDlDLCAweDYwLCAweDMzLCAweDQwLCAweEMxLCAweDAwLAorMHgxNSwgMHgwMywgMHhEMSwgMHgxQywgMHg0MiwgMHgzMywgMHgwMCwgMHhDNCwgMHgwNiwgMHgzNCwgMHgxNywgMHg5MCwgMHg5QywKKzB4NDAsIDB4NTgsIDB4MDAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTcsIDB4QTgsCisweDFGLCAweDAwLCAweDczLCAweDAyLCAweDdDLCAweDAxLCAweEIwLCAweDA1LCAweEMyLCAweDE3LCAweDAwLCAweDdGLCAweDEwLAorMHg3QywgMHgwMSwgMHhGMCwgMHgxNSwgMHhDMCwgMHgxMywgMHgwMCwgMHg1MSwgMHgwMCwgMHg1QywgMHgwMSwgMHhGMCwgMHg0NiwKKzB4QzAsIDB4MUYsIDB4MDAsIDB4NzcsIDB4MTIsIDB4RkEsIDB4MUQsIDB4QjAsIDB4QjcsIDB4QzQsIDB4NUMsIDB4MjAsIDB4MEUsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDgwLCAweDA1LCAweDAwLCAweDFGLCAweDA0LAorMHg3QywgMHgwMCwgMHhGNCwgMHgwMSwgMHhDOCwgMHgwNywgMHgwMCwgMHgxQywgMHgwMCwgMHg3QywgMHgwMCwgMHhGMCwgMHgwMSwKKzB4QzAsIDB4MDcsIDB4MDAsIDB4MUYsIDB4MDAsIDB4NjQsIDB4MDAsIDB4RjAsIDB4MDEsIDB4QzQsIDB4MDcsIDB4NDAsIDB4MUIsCisweDAwLCAweDdDLCAweDA4LCAweDcwLCAweDAxLCAweEMwLCAweDRCLCAweDAwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHhFNSwgMHgwNCwgMHg5RiwgMHgwMCwgMHg3QywgMHgwNiwgMHhGMCwgMHgwOSwKKzB4QzAsIDB4MjcsIDB4MDAsIDB4OUYsIDB4QTAsIDB4NEMsIDB4MDIsIDB4MzIsIDB4MDksIDB4QzgsIDB4MjcsIDB4MDksIDB4OTMsCisweDAwLCAweDNDLCAweDkyLCAweDMwLCAweDE5LCAweEMxLCAweDI2LCAweDAxLCAweDlGLCAweDAwLCAweDNDLCAweDA2LCAweDMwLAorMHg4OSwgMHhDMCwgMHg0MSwgMHgyMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwKKzB4MjAsIDB4MjYsIDB4MTAsIDB4OUQsIDB4ODAsIDB4NzQsIDB4MzIsIDB4RDAsIDB4MDksIDB4NDAsIDB4MjcsIDB4MDAsIDB4OUQsCisweDAwLCAweDQ0LCAweDAyLCAweDEwLCAweDA5LCAweDQwLCAweDI3LCAweDA5LCAweDkxLCAweDIzLCAweDc0LCAweDRFLCAweDE0LAorMHg5OSwgMHg0MiwgMHhBNCwgMHgwNCwgMHg5RCwgMHgwMCwgMHg3NCwgMHgwQSwgMHgxMCwgMHgyOSwgMHg0NCwgMHgwNCwgMHgwMCwKKzB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MUMsIDB4QTAsIDB4MzQsIDB4MDAsIDB4OUQsCisweDAwLCAweDU0LCAweDAyLCAweEMwLCAweDA5LCAweDQwLCAweDI3LCAweDAwLCAweENELCAweDAwLCAweDQ0LCAweDAyLCAweDUwLAorMHgwOSwgMHg0MiwgMHgyNSwgMHg0MCwgMHg5MSwgMHgxOCwgMHg3NCwgMHgwMiwgMHg5MCwgMHgyOSwgMHg0MCwgMHgyNiwgMHgwMCwKKzB4OUQsIDB4MDAsIDB4NzQsIDB4MjIsIDB4MDgsIDB4MDgsIDB4NDAsIDB4NzEsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDI4LCAweDMwLCAweDA1LCAweDhELCAweDU0LCAweDM0LCAweDAyLCAweEQwLAorMHg4OCwgMHg0MCwgMHgyMywgMHgwMiwgMHg4RCwgMHg4OCwgMHgwNSwgMHgyMiwgMHgxMCwgMHg4OCwgMHg0MCwgMHgyMywgMHgwMCwKKzB4ODEsIDB4MDAsIDB4MzAsIDB4MDIsIDB4MTAsIDB4MDgsIDB4NDIsIDB4MjAsIDB4MDAsIDB4OEQsIDB4MDAsIDB4MzYsIDB4MjMsCisweDEwLCAweDA4LCAweDQwLCAweDUwLCAweEEwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgxRCwgMHhCMCwgMHgwNiwgMHgyMSwgMHgxRiwgMHgyNCwgMHg1QywgMHhEMCwgMHhGMCwgMHg2MSwgMHhDNSwgMHg4NywgMHgwNSwKKzB4MUYsIDB4MDIsIDB4NEMsIDB4NTgsIDB4NzAsIDB4MjEsIDB4QzAsIDB4MDUsIDB4MDUsIDB4MTMsIDB4MzQsIDB4N0MsIDB4NTAsCisweDMwLCAweDAxLCAweEMwLCAweDg2LCAweDAyLCAweDFGLCAweDBBLCAweDdDLCAweDU4LCAweDM0LCAweDQ1LCAweEMxLCAweDc1LAorMHhDMCwgMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOSwgMHhBMCwgMHgyRiwgMHgwNSwKKzB4QkYsIDB4MzQsIDB4N0MsIDB4MDIsIDB4RjAsIDB4NDksIDB4QzAsIDB4MjcsIDB4MDEsIDB4QkYsIDB4MDQsIDB4N0MsIDB4MTIsCisweEY0LCAweDRCLCAweEMwLCAweDI3LCAweDAwLCAweDlGLCAweDAwLCAweDdDLCAweDAyLCAweEYwLCAweDBCLCAweEMwLCAweDZCLAorMHgwMCwgMHhCRiwgMHgyMSwgMHhGQywgMHgxMiwgMHhGMCwgMHg0QiwgMHhDMSwgMHg2NywgMHgyMCwgMHgwRSwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4QTAsIDB4MkYsIDB4MDAsIDB4OTMsIDB4MDIsIDB4REMsIDB4MDIsCisweEYwLCAweDg5LCAweEMwLCAweEE2LCAweDE1LCAweDlCLCAweDAwLCAweDVDLCAweDQyLCAweDMwLCAweDA5LCAweEMwLCAweDJFLAorMHgwNCwgMHhCRiwgMHgwMCwgMHhEQywgMHgwMiwgMHhCMiwgMHgwQiwgMHhDMCwgMHgyRiwgMHgwOCwgMHg5RiwgMHgwMCwgMHhDQywKKzB4QzIsIDB4MzIsIDB4MEIsIDB4RDAsIDB4NjAsIDB4MjAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDFDLCAweDE4LCAweDA3LCAweDAxLCAweDFCLCAweDYwLCAweDc0LCAweEE4LCAweEQwLCAweEEwLCAweDQyLCAweDg0LAorMHgwMCwgMHgxMSwgMHgyMCwgMHg3NCwgMHgwOCwgMHgxMCwgMHg0MSwgMHg0MCwgMHg4NCwgMHgwMCwgMHgxNywgMHg0QSwgMHg0NCwKKzB4MjgsIDB4MTAsIDB4MDEsIDB4NDQsIDB4MDcsIDB4MjAsIDB4MUQsIDB4MDAsIDB4NDQsIDB4MDgsIDB4MTQsIDB4MDEsIDB4NDAsCisweDcwLCAweDAwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweEEwLCAweEExLAorMHg4NCwgMHg4MSwgMHgwMiwgMHgzNCwgMHgwMiwgMHhEMCwgMHg0OCwgMHg0MCwgMHgyMiwgMHgwMSwgMHg4NSwgMHgxNCwgMHgzNCwKKzB4NTIsIDB4MTIsIDB4MDksIDB4NjEsIDB4MjIsIDB4MDAsIDB4OEQsIDB4MDAsIDB4MTQsIDB4MDIsIDB4MTAsIDB4MDgsIDB4NDAsCisweDMzLCAweDgwLCAweDhELCAweDAwLCAweDA0LCAweDAyLCAweDEwLCAweDA4LCAweDYyLCAweDRBLCAweDAwLCAweDA0LCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgyMCwgMHgyNSwgMHgwMCwgMHg5OSwgMHg4MCwgMHg3NCwKKzB4MDIsIDB4QzAsIDB4MDgsIDB4NDAsIDB4MjYsIDB4MjAsIDB4OTUsIDB4MDIsIDB4MzQsIDB4MDIsIDB4MTAsIDB4MDksIDB4NEEsCisweDI0LCAweDAwLCAweDk1LCAweDAwLCAweDU0LCAweDAyLCAweDEwLCAweDBELCAweDQwLCAweEE3LCAweDAwLCAweDhELCAweDE0LAorMHg0NSwgMHgwMiwgMHgxMCwgMHgwRCwgMHg0MCwgMHg2MiwgMHgyMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDUsIDB4QTgsIDB4MjcsIDB4MDEsIDB4OTMsIDB4ODcsIDB4N0MsIDB4MDIsIDB4RjAsIDB4MDksIDB4QzgsCisweDI2LCAweDA4LCAweDk3LCAweDAwLCAweDVFLCAweDAyLCAweDEwLCAweDA4LCAweEMwLCAweDI2LCAweDIwLCAweDlGLCAweDIwLAorMHg1QywgMHgwMiwgMHhCMCwgMHg1OSwgMHhDMCwgMHgyNywgMHgyMCwgMHg5RSwgMHgyMywgMHg0QywgMHg0MiwgMHgzMCwgMHg0OSwKKzB4QzAsIDB4MTYsIDB4MjAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4ODAsCisweDYxLCAweDAyLCAweDlGLCAweDA1LCAweDdDLCAweDAyLCAweEQwLCAweDA5LCAweEMwLCAweDIxLCAweDQwLCAweDlCLCAweDg0LAorMHg3QywgMHgwMiwgMHhGNCwgMHgwOSwgMHhDMCwgMHgyNywgMHgwMCwgMHg5RiwgMHgwMCwgMHg2QywgMHg0MiwgMHhENCwgMHgzOSwKKzB4QzAsIDB4MjcsIDB4MDAsIDB4OUYsIDB4MjEsIDB4N0MsIDB4MDIsIDB4RjAsIDB4NDgsIDB4QzAsIDB4NDksIDB4MDAsIDB4MDYsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDg0LCAweDA0LCAweDFGLCAweDAyLAorMHg2QywgMHgwMCwgMHhFMCwgMHgwMSwgMHhDMCwgMHgwNCwgMHgwMCwgMHgxMywgMHg4MCwgMHg3QywgMHgwMCwgMHgzMCwgMHgwMSwKKzB4QzAsIDB4MDUsIDB4MDQsIDB4MUYsIDB4MTAsIDB4NEMsIDB4MDAsIDB4NzAsIDB4MTEsIDB4QzIsIDB4MDcsIDB4MDEsIDB4MUYsCisweEEyLCAweDNDLCAweDIwLCAweDEwLCAweDQxLCAweEMyLCAweDQzLCAweDIwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHhBMCwgMHhEQywgMHgwMCwgMHg1RCwgMHgyMCwgMHhENCwgMHg2NSwgMHhDMCwgMHgwNSwKKzB4NDAsIDB4MTQsIDB4MDAsIDB4NTAsIDB4MDAsIDB4NzQsIDB4ODEsIDB4MTAsIDB4MDUsIDB4QzAsIDB4MUMsIDB4MDAsIDB4NkQsCisweDIwLCAweDgwLCAweDBELCAweDcwLCAweDA3LCAweDgwLCAweDFELCAweDEwLCAweDVELCAweDgwLCAweEY0LCAweDAxLCAweDEwLAorMHgzNywgMHg0MiwgMHg1MywgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwKKzB4QTAsIDB4RjIsIDB4MDIsIDB4Q0QsIDB4MDAsIDB4MDQsIDB4MDMsIDB4RDAsIDB4MEMsIDB4NTAsIDB4MzAsIDB4ODAsIDB4QzEsCisweDAwLCAweDM0LCAweDAzLCAweDEwLCAweDBDLCAweDQwLCAweDMxLCAweDAwLCAweENELCAweDBBLCAweDAwLCAweDBCLCAweEQ4LAorMHg4QywgMHg0OCwgMHhCMiwgMHgwMCwgMHhDQywgMHgwMCwgMHgzNiwgMHg5MywgMHg5MCwgMHgwMCwgMHg0NCwgMHg1MywgMHgwMCwKKzB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4ODgsIDB4MzgsIDB4MDAsIDB4Q0QsCisweDAxLCAweDk0LCAweDAwLCAweEQwLCAweDBFLCAweDQwLCAweDM4LCAweEMyLCAweEUxLCAweDA0LCAweEI0LCAweDIzLCAweDExLAorMHgwRSwgMHg0MCwgMHgzOCwgMHg4MCwgMHg4RCwgMHgwMCwgMHg4NSwgMHgwQiwgMHhEOCwgMHgwNiwgMHg0MCwgMHgwOSwgMHgyMCwKKzB4RUQsIDB4MDQsIDB4MzQsIDB4MDAsIDB4OTQsIDB4MEEsIDB4NDEsIDB4MDcsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDExLCAweDEwLCAweDc4LCAweDAwLCAweEVGLCAweDBELCAweDg0LCAweDA0LCAweEYwLAorMHgxRSwgMHhDMSwgMHg3MCwgMHgwNSwgMHhFMSwgMHgwRCwgMHgzNCwgMHg1NywgMHgzNCwgMHgzRiwgMHhDMCwgMHg3OSwgMHgwMCwKKzB4QUYsIDB4MDEsIDB4OEMsIDB4MDcsIDB4NzAsIDB4MTYsIDB4QzAsIDB4NkIsIDB4MDAsIDB4RUYsIDB4MEIsIDB4QkMsIDB4MDcsCisweEIwLCAweDE2LCAweEMwLCAweDQ3LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgxMCwgMHhBMiwgMHgxNSwgMHgxMCwgMHhERiwgMHg4NCwgMHg1QywgMHgwMCwgMHhGMCwgMHg0RCwgMHhDMCwgMHgzNywgMHgwMCwKKzB4REYsIDB4MDQsIDB4N0MsIDB4MUIsIDB4RjAsIDB4NkQsIDB4QzksIDB4MzcsIDB4MjAsIDB4MUIsIDB4MDAsIDB4N0MsIDB4MDAsCisweDc4LCAweDA1LCAweEMwLCAweDA3LCAweDEwLCAweERGLCAweDAwLCAweDdDLCAweDAwLCAweDc0LCAweDBELCAweEMwLCAweDQzLAorMHg2MCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyOCwgMHg3RCwgMHgwMCwKKzB4RkYsIDB4MTEsIDB4OEMsIDB4MjQsIDB4NzAsIDB4MUYsIDB4QzUsIDB4N0MsIDB4MDAsIDB4RjMsIDB4MTEsIDB4RkMsIDB4MDcsCisweDMwLCAweDFGLCAweEMwLCAweDdGLCAweDAyLCAweEI3LCAweDA1LCAweEZDLCAweDA3LCAweEY4LCAweDk2LCAweEMwLCAweDZDLAorMHgwMiwgMHhGMywgMHg4OSwgMHhDQywgMHgwNywgMHgyNCwgMHgxQiwgMHhDNCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTUsIDB4MDgsIDB4MzksIDB4MjAsIDB4RUQsIDB4MDQsIDB4ODQsIDB4MDAsCisweDE4LCAweDBFLCAweDUwLCAweDM4LCAweDIyLCAweEUxLCAweDAwLCAweEI0LCAweDIzLCAweDEwLCAweDBFLCAweDQwLCAweDNCLAorMHgwMCwgMHhBNywgMHgwMCwgMHhCNCwgMHgyMywgMHhEMCwgMHgwNiwgMHg0OCwgMHgwRCwgMHgwMiwgMHhGQiwgMHg0MCwgMHg4NSwKKzB4MDAsIDB4RjAsIDB4ODgsIDB4RTEsIDB4NTQsIDB4NjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDM5LCAweDA0LCAweEVELCAweDgwLCAweEE0LCAweDAwLCAweDU4LCAweDBDLCAweDQwLCAweDM5LAorMHgwMCwgMHhFOSwgMHgwMCwgMHhCNCwgMHgwMywgMHgxMCwgMHgwRSwgMHg0MCwgMHgxQiwgMHgwMCwgMHhBNSwgMHgwNCwgMHhCNCwKKzB4MDMsIDB4RDAsIDB4MDMsIDB4NDYsIDB4MDgsIDB4ODIsIDB4RTEsIDB4MDAsIDB4ODQsIDB4MDMsIDB4NTAsIDB4MEMsIDB4NDAsCisweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDI4LCAweDYxLAorMHgwMCwgMHhDRCwgMHg0MSwgMHgwNCwgMHgwMCwgMHgxMCwgMHgwQywgMHg0MCwgMHgzNCwgMHgwMCwgMHhEMSwgMHg0MiwgMHgzNCwKKzB4MDMsIDB4MTIsIDB4OEMsIDB4NDAsIDB4MTMsIDB4MDAsIDB4MDUsIDB4MDAsIDB4MzQsIDB4MDAsIDB4RDAsIDB4QjAsIDB4NDQsCisweDAxLCAweDAwLCAweEM5LCAweDAyLCAweDA0LCAweDQxLCAweEQwLCAweDM0LCAweDUwLCAweDEwLCAweDAwLCAweDA0LCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwgMHhBOCwgMHg0NSwgMHgyMCwgMHhGRiwgMHg5QSwgMHg2QywKKzB4MDAsIDB4NDEsIDB4MEYsIDB4QzAsIDB4M0QsIDB4MDAsIDB4RkIsIDB4MDAsIDB4RkMsIDB4MDMsIDB4MzAsIDB4MUYsIDB4QzAsCisweDM3LCAweDAwLCAweDk3LCAweDAwLCAweDdDLCAweDAzLCAweEYwLCAweDAxLCAweDQ0LCAweDAwLCAweDA2LCAweEYzLCAweDQyLAorMHg0QywgMHg0QiwgMHgzMCwgMHgyNSwgMHhDMCwgMHg1NCwgMHgyMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4QTcsIDB4MDEsIDB4REYsIDB4MDAsIDB4N0MsIDB4MDgsIDB4RjAsIDB4MEQsIDB4QzAsCisweDM3LCAweDIwLCAweERGLCAweDA4LCAweDdDLCAweDAzLCAweEYwLCAweDBELCAweEM0LCAweDM3LCAweDAwLCAweDlGLCAweDgwLAorMHgzQywgMHg4QiwgMHhGMCwgMHgwMSwgMHhDOCwgMHg4NywgMHgwMCwgMHhERiwgMHgwMCwgMHgzQywgMHgwMCwgMHg5NiwgMHg2NSwKKzB4QzAsIDB4MDUsIDB4MDAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODQsIDB4MDgsCisweDBGLCAweDAwLCAweEZGLCAweDAwLCAweEZDLCAweDAwLCAweEYwLCAweDBGLCAweEMwLCAweDNDLCAweDAwLCAweEYzLCAweDEwLAorMHg1QywgMHgwMywgMHhFMCwgMHgwRiwgMHhDMCwgMHgyRiwgMHgwMiwgMHhCRiwgMHgwMCwgMHhGQywgMHg4MywgMHgzMCwgMHgwMywKKzB4QzEsIDB4MEQsIDB4MjAsIDB4RjMsIDB4MTAsIDB4N0MsIDB4MDcsIDB4MzAsIDB4OTcsIDB4QzIsIDB4MTMsIDB4MjIsIDB4MEMsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDg1LCAweDIwLCAweEM2LCAweDA0LCAweERELCAweDAwLAorMHg3NCwgMHgwQywgMHhEMCwgMHgwRCwgMHg1MCwgMHgzNCwgMHgyMCwgMHhEMSwgMHgwMCwgMHg0NCwgMHgwMywgMHhEMCwgMHgwRCwKKzB4NDAsIDB4MjcsIDB4MDAsIDB4MTksIDB4MDEsIDB4NzQsIDB4MTgsIDB4MDAsIDB4MzEsIDB4QzAsIDB4NDcsIDB4MDEsIDB4RDEsCisweDAwLCAweDc0LCAweDIwLCAweDEwLCAweDI5LCAweDQwLCAweDE3LCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHhBMCwgMHg0NCwgMHgwMCwgMHhERCwgMHgwMCwgMHg3NCwgMHg0NCwgMHhEMCwgMHgwQywKKzB4NDAsIDB4MzQsIDB4MDAsIDB4RDEsIDB4MDAsIDB4NDQsIDB4MDMsIDB4RDAsIDB4MEQsIDB4NDAsIDB4MzcsIDB4ODAsIDB4MUQsCisweDAzLCAweDc0LCAweDEwLCAweDEwLCAweDExLCAweDQwLCAweDRGLCAweDAwLCAweEYxLCAweDAwLCAweDc0LCAweDQzLCAweDE5LAorMHgwOSwgMHg0MCwgMHgwNywgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwKKzB4MjgsIDB4MjAsIDB4MjAsIDB4Q0QsIDB4ODAsIDB4MjQsIDB4MDAsIDB4RDIsIDB4MEMsIDB4NDAsIDB4MzAsIDB4MjAsIDB4QzEsCisweDAwLCAweDA0LCAweDAzLCAweEQwLCAweDBDLCAweDQwLCAweDMzLCAweDgwLCAweDA5LCAweDAwLCAweDM0LCAweDAwLCAweDEwLAorMHgwMCwgMHg0NCwgMHgwNywgMHg0MCwgMHhDMSwgMHgwMCwgMHgzNCwgMHgwMiwgMHgxMywgMHg4NCwgMHg0MCwgMHg0MywgMHhBMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4QjAsIDB4MDYsIDB4MDAsIDB4RUYsCisweDgwLCAweDdDLCAweDgwLCAweEYwLCAweDBGLCAweEMwLCAweDM4LCAweDAwLCAweEYzLCAweDAwLCAweEM1LCAweDAzLCAweEYwLAorMHgwRiwgMHhDMCwgMHgwNywgMHgwMCwgMHgxRiwgMHgwMCwgMHg3QywgMHgwMCwgMHgzMCwgMHgwMSwgMHhDMCwgMHgwNSwgMHgwMCwKKzB4RjMsIDB4MDAsIDB4N0MsIDB4MDAsIDB4MzAsIDB4MDksIDB4QzgsIDB4MDMsIDB4QzAsIDB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDg1LCAweEE4LCAweDJGLCAweDAwLCAweEZGLCAweDAwLCAweEZDLCAweDAwLCAweEYwLAorMHgwRiwgMHhDMCwgMHgzRiwgMHgwMCwgMHhGRiwgMHgwMCwgMHhFQywgMHg4MywgMHhGMCwgMHgwRiwgMHhDMCwgMHgwRiwgMHgwMCwKKzB4M0IsIDB4NDAsIDB4RkMsIDB4MDAsIDB4RjAsIDB4MDMsIDB4RTgsIDB4MEQsIDB4MDAsIDB4RkYsIDB4MDAsIDB4RkMsIDB4MDAsCisweEYwLCAweDQzLCAweEMwLCAweDE3LCAweDIxLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMywgMHhBOCwgMHgzRiwgMHgwNCwgMHhCMywgMHgwOCwgMHhDQywgMHg5MywgMHhGMSwgMHhDRiwgMHhDMCwgMHgzQywgMHg0MiwKKzB4RjMsIDB4MDAsIDB4RkMsIDB4MDMsIDB4MzAsIDB4MTMsIDB4QzAsIDB4M0QsIDB4MDUsIDB4RjcsIDB4MkMsIDB4RkMsIDB4MDQsCisweEIwLCAweDBGLCAweEMwLCAweDNFLCAweDA2LCAweDNGLCAweDA0LCAweEVDLCAweDAzLCAweEYwLCAweDgzLCAweEMwLCAweDBGLAorMHgwMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgxOCwgMHhCRiwgMHgwMCwKKzB4MUIsIDB4MDQsIDB4QzQsIDB4QUYsIDB4RDAsIDB4NkYsIDB4NDAsIDB4QkMsIDB4MDMsIDB4RjEsIDB4ODQsIDB4RjQsIDB4MEYsCisweDEwLCAweDA5LCAweEM0LCAweDdELCAweDA4LCAweEQ1LCAweDA4LCAweDc0LCAweDAwLCAweDUwLCAweDJGLCAweDQyLCAweDNDLAorMHgxMCwgMHgxRCwgMHgxMiwgMHhDNCwgMHg4NywgMHhEMCwgMHg0MCwgMHg0MCwgMHgwNywgMHgyMCwgMHgwQywgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTEsIDB4QTAsIDB4MzMsIDB4MDQsIDB4ODEsIDB4MjIsIDB4MDQsIDB4MDMsCisweEQwLCAweDJDLCAweDQ0LCAweDMxLCAweDAxLCAweEMxLCAweDE4LCAweDI0LCAweDBCLCAweDUwLCAweDA0LCAweDQwLCAweDMxLAorMHgwMCwgMHhDNSwgMHgwMCwgMHg3NCwgMHgwMiwgMHgxMCwgMHgyQywgMHg0NCwgMHgzMywgMHgwMSwgMHg4RCwgMHgwNiwgMHgyNCwKKzB4MDMsIDB4RDAsIDB4MDAsIDB4NDAsIDB4NDcsIDB4ODAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAzLCAweEEwLCAweDM0LCAweDMwLCAweDA5LCAweDQxLCAweDQ2LCAweDAzLCAweEQwLCAweDBELCAweDQwLCAweDM1LAorMHgwMCwgMHhEMSwgMHgwMCwgMHg3NCwgMHgwMywgMHgxNCwgMHgwRCwgMHg0MCwgMHgzNSwgMHgwMCwgMHhENCwgMHgwMCwgMHg3NCwKKzB4MjIsIDB4NTAsIDB4MEQsIDB4NDAsIDB4MzUsIDB4MDAsIDB4REQsIDB4MDAsIDB4QzQsIDB4MDMsIDB4RDAsIDB4MzMsIDB4NDAsCisweDBGLCAweDIwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweEE4LCAweDM3LAorMHgwMCwgMHg5MywgMHgwMywgMHg0QywgMHg4MywgMHhGMCwgMHgwRCwgMHhDMCwgMHgzNSwgMHgyMCwgMHhEMywgMHg4MCwgMHg3QywKKzB4MDMsIDB4NzIsIDB4OTEsIDB4QzgsIDB4MzUsIDB4MDAsIDB4RDcsIDB4ODAsIDB4N0MsIDB4NDUsIDB4QjAsIDB4MEQsIDB4QzAsCisweDM3LCAweDE4LCAweDFGLCAweEEyLCAweDZDLCAweDAzLCAweEYwLCAweDExLCAweEMwLCAweDAzLCAweDIwLCAweDBFLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNywgMHg4MCwgMHgzRCwgMHgwMCwgMHhCRiwgMHg0MCwgMHhGRCwKKzB4MDMsIDB4RjAsIDB4MEQsIDB4QzIsIDB4MzYsIDB4MDAsIDB4RkYsIDB4MDAsIDB4QkMsIDB4MDMsIDB4RjAsIDB4MDMsIDB4QzEsCisweDNGLCAweDAwLCAweEQ5LCAweDAwLCAweEZDLCAweDQxLCAweEYwLCAweDBELCAweEMwLCAweDNFLCAweDA4LCAweEZDLCAweDA5LAorMHhGQywgMHgwMywgMHhGMCwgMHgwMywgMHg4MCwgMHgxRiwgMHgwMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDIsIDB4MDgsIDB4MzEsIDB4MDEsIDB4OUYsIDB4MDIsIDB4N0MsIDB4MDMsIDB4RjAsIDB4MEQsIDB4QzAsCisweDMxLCAweDAwLCAweEQzLCAweDAwLCAweDdDLCAweDAzLCAweEYwLCAweDAxLCAweEMwLCAweDM1LCAweDAwLCAweEQ3LCAweDAwLAorMHg0QywgMHgyMiwgMHhCMCwgMHgwQywgMHhDOCwgMHgzNCwgMHgwOCwgMHgwNywgMHgwMCwgMHg1QywgMHgwMywgMHgzMCwgMHgyMSwKKzB4QzAsIDB4MDgsIDB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTMsIDB4QTAsCisweEZDLCAweDBDLCAweDlELCAweDAwLCAweEZDLCAweDBGLCAweEQwLCAweDBGLCAweDQ0LCAweDNDLCAweDAwLCAweEYxLCAweDAwLAorMHhGNCwgMHgwNywgMHhEMCwgMHgxNSwgMHhDMiwgMHgzOSwgMHgwOCwgMHhGMCwgMHgwMywgMHgyQywgMHg4QiwgMHhEMCwgMHgwRiwKKzB4NDgsIDB4M0MsIDB4MDAsIDB4RDUsIDB4MTAsIDB4QzQsIDB4MkYsIDB4MTAsIDB4MDksIDB4NDAsIDB4NEMsIDB4MDAsIDB4MDIsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA3LCAweDgwLCAweDMyLCAweDAwLCAweDBELCAweDAwLAorMHgzNCwgMHg0MywgMHhEMCwgMHgwRCwgMHg0MCwgMHgzMSwgMHgwMCwgMHhDMSwgMHgwMCwgMHgzNCwgMHgxQiwgMHhEMiwgMHgxNCwKKzB4NDgsIDB4MzIsIDB4MDAsIDB4QzgsIDB4ODcsIDB4MDQsIDB4MEQsIDB4RDAsIDB4MEMsIDB4MDAsIDB4MzEsIDB4MDAsIDB4NDEsCisweDEwLCAweDE0LCAweDIzLCAweDEwLCAweDAwLCAweDQwLCAweDFDLCAweDAwLCAweDBBLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwNiwgMHg4OCwgMHg3OCwgMHgwMCwgMHg2RCwgMHgwMSwgMHhCNCwgMHg2NywgMHhEMCwgMHg5RSwKKzB4NDAsIDB4NzgsIDB4MDAsIDB4RTEsIDB4MDEsIDB4QjQsIDB4MDcsIDB4RDAsIDB4MUUsIDB4NDAsIDB4NzMsIDB4NDgsIDB4RUQsCisweDAxLCAweEE0LCAweDA1LCAweEQxLCAweDFFLCAweDQwLCAweDcxLCAweDAwLCAweEU1LCAweDAxLCAweEM0LCAweDE3LCAweDE0LAorMHg5MiwgMHg0MCwgMHgxOCwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwKKzB4MTAsIDB4MzAsIDB4MDIsIDB4Q0YsIDB4MEMsIDB4MzQsIDB4MDMsIDB4RjAsIDB4MEMsIDB4NDgsIDB4MzEsIDB4MDAsIDB4QzMsCisweDAwLCAweDNDLCAweDQzLCAweEYwLCAweDA0LCAweEMxLCAweDMyLCAweDAwLCAweENGLCAweDEwLCAweDBDLCAweDAwLCAweEIwLAorMHg4QywgMHhEMCwgMHgzMSwgMHhBMCwgMHgxNywgMHgyMiwgMHg1QywgMHgxNywgMHgzMCwgMHg1MCwgMHhEMCwgMHg0OCwgMHg0MCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4QTgsIDB4M0QsIDB4MEMsIDB4RkYsCisweDg4LCAweERDLCAweDgzLCAweEYwLCAweDJGLCAweDAwLCAweDNGLCAweDAwLCAweERGLCAweDAwLCAweEY0LCAweDAzLCAweEYwLAorMHgwRiwgMHhDMCwgMHgzRCwgMHgzMCwgMHhGMywgMHgwOCwgMHg3QywgMHgwMSwgMHhGMCwgMHgwRiwgMHhDMCwgMHgzRSwgMHhBMCwKKzB4RkYsIDB4MDAsIDB4RkMsIDB4MDMsIDB4RjAsIDB4ODksIDB4QzAsIDB4MEIsIDB4NjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE1LCAweEEwLCAweDM3LCAweDI0LCAweDVGLCAweDQwLCAweDdDLCAweDZGLCAweDMwLAorMHhCRCwgMHhDMCwgMHhGNCwgMHgwNSwgMHhEMywgMHg2OCwgMHgxQywgMHg2MywgMHg3MCwgMHgwMSwgMHhEMCwgMHgzNiwgMHgwMSwKKzB4REYsIDB4NDksIDB4NEMsIDB4MDUsIDB4MzAsIDB4NEQsIDB4QzksIDB4MzcsIDB4MDMsIDB4MUYsIDB4MDAsIDB4NEQsIDB4NjMsCisweEYwLCAweDExLCAweDg0LCAweDU0LCAweDAwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgxMiwgMHg4OCwgMHgzOSwgMHgwMSwgMHg2RCwgMHg2MCwgMHgzNiwgMHgxMywgMHgxMCwgMHg0RSwgMHg0MCwgMHhCOCwgMHgwMSwKKzB4RTEsIDB4MEMsIDB4ODQsIDB4MDMsIDB4MTAsIDB4MDcsIDB4QzAsIDB4QjgsIDB4MDQsIDB4RUQsIDB4ODQsIDB4QUMsIDB4MDEsCisweDEwLCAweDRFLCAweDQ4LCAweDNCLCAweDA0LCAweENELCAweDAwLCAweDg0LCAweDAzLCAweEQwLCAweDAyLCAweDQwLCAweDQ4LAorMHgyMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHgwMCwgMHg3OSwgMHgwMSwKKzB4RUQsIDB4MDMsIDB4OTQsIDB4MDcsIDB4MTgsIDB4MUUsIDB4NTAsIDB4N0EsIDB4MDAsIDB4QzUsIDB4MDEsIDB4OTQsIDB4MTcsCisweDUwLCAweDEyLCAweDQxLCAweDc4LCAweDAwLCAweENELCAweDAxLCAweEM0LCAweDA0LCAweDkyLCAweDlFLCAweDQyLCAweDdCLAorMHgwMSwgMHgyRCwgMHgyMSwgMHg4NCwgMHgwNywgMHhEMCwgMHgxMCwgMHg0MCwgMHgwRCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4MjgsIDB4MzMsIDB4MDAsIDB4Q0QsIDB4MDAsIDB4MzQsIDB4MDMsCisweDE1LCAweDBDLCAweDYwLCAweDMwLCAweDAwLCAweEMxLCAweDAwLCAweDI0LCAweDAzLCAweDEwLCAweDE0LCAweDQxLCAweDMwLAorMHgwMCwgMHhDRCwgMHg0MCwgMHgyNCwgMHgyMSwgMHg5MCwgMHgwQywgMHg0MCwgMHgzMywgMHgwMCwgMHhDRCwgMHgwNCwgMHgwNCwKKzB4MDMsIDB4RDAsIDB4OEMsIDB4NDAsIDB4NDksIDB4MjAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDE3LCAweEE4LCAweDE1LCAweDAwLCAweDdGLCAweDBBLCAweDdDLCAweDgxLCAweDM4LCAweDA1LCAweEMwLCAweDE2LAorMHgwMCwgMHg1MywgMHgwMCwgMHg1QywgMHgwMSwgMHg3MCwgMHgyNywgMHhDMCwgMHgxNCwgMHgwMCwgMHg1RiwgMHgwMCwgMHhDQywKKzB4ODUsIDB4QjAsIDB4MDUsIDB4QzAsIDB4MTcsIDB4MTAsIDB4N0YsIDB4MDQsIDB4NEMsIDB4MDEsIDB4RjAsIDB4MTcsIDB4QzAsCisweDVELCAweDIwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDgwLCAweDA3LAorMHgwOCwgMHgxRiwgMHgwMCwgMHg3QywgMHgwMCwgMHhGMCwgMHgwMSwgMHhDMCwgMHgwNywgMHg0MCwgMHgxRiwgMHgwMCwgMHgxQywKKzB4MDAsIDB4RjAsIDB4MDEsIDB4QzQsIDB4MDUsIDB4ODAsIDB4MUYsIDB4MDAsIDB4N0MsIDB4MDAsIDB4NzQsIDB4MDEsIDB4QzIsCisweDA3LCAweDAwLCAweDFGLCAweDAyLCAweDdDLCAweDAwLCAweEYyLCAweDQxLCAweDgwLCAweDRBLCAweDAwLCAweDBDLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHg2NSwgMHgwMCwgMHg5RiwgMHg0MCwgMHg3QywKKzB4MDYsIDB4NzAsIDB4MDksIDB4QzAsIDB4MjcsIDB4MDAsIDB4OUYsIDB4MDgsIDB4NEMsIDB4MTYsIDB4MzAsIDB4MzksIDB4QzAsCisweDI0LCAweDAwLCAweDlELCAweDAwLCAweDc0LCAweDEyLCAweEYwLCAweDA5LCAweEMwLCAweDIzLCAweDAwLCAweDk3LCAweDA4LAorMHg1QywgMHgwNiwgMHgzMCwgMHgwOSwgMHhDMCwgMHg0MywgMHgyMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDEsIDB4MjAsIDB4NjYsIDB4MEUsIDB4OUQsIDB4MjAsIDB4NzQsIDB4MEEsIDB4RDIsIDB4MDksIDB4NDAsCisweDI3LCAweDAwLCAweDlELCAweDAzLCAweDQ0LCAweDBFLCAweDE1LCAweDA4LCAweDQwLCAweDY0LCAweDIwLCAweDlELCAweDFCLAorMHg3MCwgMHgwMiwgMHhEMCwgMHgwOSwgMHg0MCwgMHgyNywgMHgwMCwgMHg5MSwgMHgxMSwgMHgwNCwgMHhBRSwgMHgxMCwgMHgwOSwKKzB4NDAsIDB4MDcsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4QTAsCisweDI0LCAweDAwLCAweERELCAweDAwLCAweDc0LCAweDYyLCAweEQwLCAweDA5LCAweDQwLCAweDI3LCAweDAwLCAweDhELCAweDAyLAorMHg0NCwgMHg0MiwgMHgxMSwgMHgwOSwgMHg0MCwgMHgyNywgMHgwOSwgMHg5RCwgMHgwMCwgMHg3MCwgMHg0MiwgMHhEMiwgMHgwOSwKKzB4NDAsIDB4MjcsIDB4MDAsIDB4ODEsIDB4MDAsIDB4NTQsIDB4MEEsIDB4MTAsIDB4MDksIDB4NDAsIDB4NjMsIDB4MDAsIDB4MDIsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDI4LCAweDIwLCAweDA1LCAweDhELCAweDE0LAorMHgzNCwgMHgwMiwgMHhEMCwgMHg4OCwgMHg0MCwgMHgyMywgMHgyMiwgMHg4RCwgMHg0OCwgMHgwNCwgMHgwMiwgMHgxMSwgMHgwOSwKKzB4NDAsIDB4MjEsIDB4MTAsIDB4OEQsIDB4MDgsIDB4MzQsIDB4MDIsIDB4RDgsIDB4MDgsIDB4NDAsIDB4MjMsIDB4NDAsIDB4ODEsCisweDA4LCAweDA0LCAweDkyLCAweDEwLCAweDQ4LCAweDQ4LCAweDQzLCAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgxRCwgMHhCMCwgMHgwNiwgMHgwMSwgMHgxRiwgMHgwNCwgMHg3QywgMHg1MCwgMHg3MCwgMHg2MCwKKzB4QzEsIDB4ODMsIDB4MDUsIDB4MUYsIDB4OTYsIDB4NEMsIDB4NTAsIDB4MzAsIDB4QTEsIDB4RDAsIDB4MDUsIDB4MDUsIDB4MUYsCisweDE2LCAweDdDLCAweDI4LCAweEUwLCAweEUxLCAweEM5LCAweDA3LCAweDE1LCAweDE3LCAweDE2LCAweDVDLCAweDA0LCAweDMwLAorMHgxMSwgMHhDMCwgMHg3NywgMHhDMCwgMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOSwKKzB4QTgsIDB4MjcsIDB4MjUsIDB4QkYsIDB4MzQsIDB4N0UsIDB4MDIsIDB4RjAsIDB4NDksIDB4QzAsIDB4MjcsIDB4MDEsIDB4OUYsCisweDA0LCAweDdELCAweDAyLCAweEYwLCAweDFCLCAweEMwLCAweDI2LCAweDIwLCAweDlGLCAweDA0LCAweEJDLCAweDA3LCAweEYwLAorMHgxOSwgMHhDMCwgMHgyNywgMHgwNSwgMHhCRiwgMHgwNCwgMHg3QywgMHgyMiwgMHhGNCwgMHhDQiwgMHhDMSwgMHg2NywgMHg2MCwKKzB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTksIDB4QTAsIDB4MkYsIDB4MDMsIDB4OTMsCisweDAzLCAweENDLCAweDEyLCAweDcwLCAweDI5LCAweEMwLCAweEE1LCAweDAwLCAweEJGLCAweDAwLCAweENDLCAweDQyLCAweDMwLAorMHgwQiwgMHhDMCwgMHgyRSwgMHgwMCwgMHhCMywgMHgwMCwgMHhDQywgMHgwMiwgMHhCMCwgMHgwOSwgMHhDMCwgMHgyNCwgMHgwQiwKKzB4QjMsIDB4NDAsIDB4Q0MsIDB4MDIsIDB4MzAsIDB4MDksIDB4QzAsIDB4NjcsIDB4MDAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFDLCAweDA4LCAweDQ3LCAweDAxLCAweDFCLCAweDQzLCAweDY4LCAweDI4LCAweDEwLAorMHgwMSwgMHg0MCwgMHg4NCwgMHgwMiwgMHgxRCwgMHgwRSwgMHg0NSwgMHgwOCwgMHgxMCwgMHgwMSwgMHg0MCwgMHg4NSwgMHgwMiwKKzB4MTEsIDB4MjAsIDB4NDQsIDB4MDAsIDB4MTMsIDB4MjEsIDB4QzAsIDB4NDYsIDB4MDEsIDB4MUIsIDB4MDAsIDB4NDQsIDB4MDAsCisweDEwLCAweDAxLCAweDQ0LCAweDczLCAweDIwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgxMCwgMHhBMiwgMHhBMywgMHgxMCwgMHg4MSwgMHgwNiwgMHgwNCwgMHgwMiwgMHg1MCwgMHg2OCwgMHg0MCwgMHgyMSwgMHg4MSwKKzB4OEQsIDB4OTAsIDB4MDYsIDB4MDIsIDB4MTAsIDB4MDksIDB4NDAsIDB4MjEsIDB4NDAsIDB4ODEsIDB4MTYsIDB4NDQsIDB4MDIsCisweDkwLCAweDI4LCAweDQwLCAweEEwLCAweDAxLCAweDgxLCAweDQwLCAweDA1LCAweDAyLCAweDkwLCAweDA4LCAweDQwLCAweDQzLAorMHg4MCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHhBOCwgMHgyNSwgMHgyMCwKKzB4OTksIDB4MDIsIDB4NjYsIDB4MDIsIDB4MTAsIDB4MDksIDB4NDAsIDB4MjQsIDB4MDAsIDB4OEQsIDB4MjAsIDB4NDYsIDB4MDIsCisweDA0LCAweDA5LCAweDQwLCAweDI1LCAweDAwLCAweEMxLCAweDAwLCAweDQ0LCAweDAzLCAweDE4LCAweDA5LCAweDQwLCAweDI3LAorMHgyMCwgMHg4OSwgMHgwMCwgMHg0NCwgMHgwMiwgMHg4NCwgMHg2OSwgMHg0MCwgMHg2MywgMHgyMCwgMHgwNiwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4MjgsIDB4MjUsIDB4MjAsIDB4OTMsIDB4MjEsIDB4NEMsIDB4MDIsCisweDcwLCAweDA5LCAweEMwLCAweDI1LCAweDAwLCAweDlGLCAweDgwLCAweDRDLCAweDAyLCAweDMyLCAweDA5LCAweEM4LCAweDI3LAorMHgwMCwgMHg5MywgMHgwMCwgMHg0QywgMHgwMiwgMHhCMSwgMHgwOSwgMHhDNCwgMHgyNCwgMHgxMCwgMHg5MywgMHgxMywgMHg0QywKKzB4MDIsIDB4QjAsIDB4MDksIDB4QzAsIDB4MTcsIDB4MjAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDE0LCAweDAwLCAweDIxLCAweDAwLCAweDhGLCAweDA0LCAweDdDLCAweDAyLCAweEYwLCAweDA5LCAweEMwLCAweDI3LAorMHgwMCwgMHg5RiwgMHgwMCwgMHgzQywgMHgwMiwgMHhGMCwgMHg4OSwgMHhDMCwgMHgyMywgMHgwMCwgMHg5RiwgMHgwMCwgMHg3RCwKKzB4MjYsIDB4RjEsIDB4MDksIDB4QzQsIDB4MjYsIDB4QTgsIDB4OUYsIDB4MDMsIDB4M0MsIDB4ODIsIDB4NzAsIDB4MDksIDB4QzAsCisweDUzLCAweDA4LCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDA4LCAweDA1LAorMHgwNCwgMHgxRiwgMHg0MCwgMHg0QywgMHgxMCwgMHhGMCwgMHgwMCwgMHhDMCwgMHgwNywgMHg4MCwgMHgxMywgMHgxMCwgMHg1QywKKzB4ODQsIDB4NzAsIDB4MDEsIDB4QzAsIDB4MDYsIDB4MDAsIDB4MUYsIDB4MjAsIDB4NEMsIDB4MDgsIDB4MzAsIDB4MDEsIDB4QzAsCisweDA3LCAweDAwLCAweDFGLCAweDI2LCAweDRDLCAweDAwLCAweDMwLCAweDIxLCAweEMwLCAweDUzLCAweDIwLCAweDA0LCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgyMCwgMHg1QywgMHgwNCwgMHg1RCwgMHgwMCwgMHg4NCwKKzB4MDEsIDB4RDAsIDB4MDUsIDB4NDQsIDB4MTcsIDB4NDAsIDB4NzEsIDB4ODMsIDB4RjQsIDB4MDEsIDB4RDAsIDB4MDcsIDB4NDAsCisweDE0LCAweDAwLCAweDdELCAweDAwLCAweDg0LCAweEM1LCAweDM0LCAweDA1LCAweDQwLCAweDE3LCAweDAwLCAweDdELCAweDAxLAorMHhDNCwgMHgxRCwgMHg1MCwgMHgwNSwgMHg0MCwgMHg1MywgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MTQsIDB4QTAsIDB4QjIsIDB4MjAsIDB4Q0QsIDB4MjAsIDB4MjQsIDB4MkIsIDB4RDEsIDB4MEMsIDB4NDAsCisweDMzLCAweDAwLCAweEM5LCAweDA4LCAweDE0LCAweDA3LCAweDUyLCAweDBELCAweDIxLCAweDcyLCAweDgwLCAweENELCAweDAxLAorMHgwNCwgMHgwNywgMHgxMCwgMHgwRCwgMHg0MCwgMHgzNywgMHgwMCwgMHhDRCwgMHgwMCwgMHgwNywgMHg0RiwgMHg1MCwgMHgwQywKKzB4NDYsIDB4NTMsIDB4MDAsIDB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4ODIsCisweDM4LCAweDAwLCAweENELCAweDA0LCAweEE0LCAweDAxLCAweEQwLCAweDRFLCAweDQwLCAweDdCLCAweDAyLCAweEU5LCAweDAwLAorMHhCNCwgMHgwQSwgMHhEMCwgMHgyNywgMHg0OCwgMHgzOCwgMHgwNCwgMHhFRCwgMHgwMiwgMHg4NCwgMHgwMywgMHgxMCwgMHgwRSwKKzB4NDAsIDB4M0IsIDB4MDAsIDB4RUQsIDB4ODIsIDB4QzQsIDB4MDMsIDB4NTAsIDB4MEUsIDB4NDAsIDB4MTcsIDB4MDgsIDB4MDIsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDEwLCAweDc4LCAweDAwLCAweEVGLCAweDA1LAorMHhBRCwgMHgwNywgMHhGMCwgMHg1RSwgMHhDMCwgMHg3RiwgMHgwMSwgMHg2OSwgMHg0MSwgMHg5QywgMHgwNSwgMHg3MCwgMHgxRSwKKzB4RTAsIDB4N0EsIDB4MDAsIDB4RkUsIDB4MDEsIDB4Q0QsIDB4ODQsIDB4MzAsIDB4MUUsIDB4QzAsIDB4N0IsIDB4MDAsIDB4RkYsCisweDAxLCAweENDLCAweDA3LCAweDcwLCAweDlFLCAweEMyLCAweDU3LCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHhCOCwgMHgxNSwgMHgwMCwgMHhERiwgMHg0MiwgMHg1QywgMHgwMCwgMHhGMCwgMHhBRCwKKzB4QzAsIDB4MzcsIDB4MDAsIDB4NTcsIDB4MDAsIDB4N0MsIDB4MDIsIDB4RjAsIDB4MDQsIDB4QzAsIDB4MzUsIDB4MDAsIDB4MUYsCisweDAwLCAweDdDLCAweDAwLCAweEYwLCAweDBELCAweEMxLCAweDM3LCAweDAyLCAweERGLCAweDAwLCAweDdDLCAweDAzLCAweEYwLAorMHg0RCwgMHhDMCwgMHg0MywgMHg0MCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwKKzB4QTAsIDB4NUYsIDB4MDAsIDB4RjMsIDB4NTMsIDB4RkMsIDB4MjYsIDB4MzAsIDB4M0YsIDB4QzAsIDB4RkYsIDB4MDAsIDB4RkYsCisweDAxLCAweENDLCAweDA3LCAweEYwLCAweDFCLCAweEMwLCAweDdGLCAweDIyLCAweEJGLCAweDAxLCAweENDLCAweDA3LCAweEYwLAorMHgxRiwgMHhDMSwgMHg3QywgMHgwMCwgMHhGMywgMHgwMSwgMHhFQywgMHgwNywgMHgzMCwgMHgxRiwgMHhDMSwgMHgwOCwgMHgwMCwKKzB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTUsIDB4ODgsIDB4QkQsIDB4MDAsIDB4RTEsCisweDAwLCAweEI0LCAweDBBLCAweDEwLCAweDBFLCAweDQwLCAweDNCLCAweDAwLCAweEVELCAweDIyLCAweDgwLCAweDAyLCAweEQwLAorMHgwMiwgMHg0MCwgMHgzQiwgMHgwMCwgMHhBRCwgMHgwOCwgMHg4NCwgMHgyMywgMHhEMiwgMHgwRSwgMHg2MCwgMHgzRCwgMHgwMCwKKzB4RUIsIDB4MDAsIDB4MDQsIDB4MTUsIDB4MTAsIDB4REQsIDB4NDAsIDB4NTQsIDB4MjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDAwLCAweDE5LCAweDAwLCAweEUxLCAweDAwLCAweEI0LCAweDAyLCAweDk0LAorMHgwRSwgMHg0MCwgMHgzQiwgMHgwMCwgMHg4RCwgMHgwMCwgMHg4NCwgMHgwMCwgMHhEMCwgMHgwRSwgMHg0MCwgMHgzQiwgMHg4MCwKKzB4RUQsIDB4MDAsIDB4ODQsIDB4NDEsIDB4RDAsIDB4MEUsIDB4NDAsIDB4MzgsIDB4MDAsIDB4RTEsIDB4MDgsIDB4MjQsIDB4MTIsCisweDEwLCAweDRFLCAweDQwLCAweDIwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwNiwgMHgyOCwgMHgwNywgMHgxMCwgMHhEMSwgMHgxMSwgMHgzNiwgMHgwMiwgMHg5OCwgMHgwQywgMHg0MCwgMHgzMywgMHg4OCwKKzB4OUQsIDB4NDAsIDB4MDQsIDB4MDIsIDB4RDEsIDB4MzAsIDB4NDAsIDB4MzMsIDB4MDgsIDB4MUQsIDB4MDAsIDB4MDQsIDB4MDAsCisweEQwLCAweDBDLCAweDQwLCAweDMxLCAweDAwLCAweDA5LCAweDA1LCAweDA0LCAweDgwLCAweDE4LCAweDNDLCAweDUwLCAweDU4LAorMHgyMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxRCwgMHhBOCwgMHgyNCwgMHgwMCwKKzB4RjMsIDB4MTMsIDB4N0MsIDB4MDIsIDB4QjAsIDB4MEYsIDB4QzAsIDB4M0YsIDB4MDAsIDB4OUYsIDB4NDAsIDB4NEUsIDB4MDIsCisweEYwLCAweDI5LCAweEMxLCAweDM3LCAweDAwLCAweDVGLCAweDAwLCAweDRDLCAweDAyLCAweEQxLCAweDBGLCAweDQwLCAweDNDLAorMHgwMCwgMHgxMywgMHgxMywgMHgyQywgMHgwMywgMHgzMCwgMHgwRiwgMHhDMSwgMHg3NCwgMHgyMCwgMHgwNiwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjEsIDB4MDAsIDB4QTcsIDB4MDAsIDB4REYsIDB4ODAsIDB4N0MsIDB4MDAsCisweDcwLCAweDBELCAweEMwLCAweDM3LCAweDAwLCAweDlGLCAweDQyLCAweDNGLCAweDAyLCAweEYwLCAweDAxLCAweEMwLCAweDM3LAorMHgwMCwgMHg1RiwgMHg4MiwgMHg3QywgMHgwMCwgMHhGMCwgMHgwRCwgMHhDOCwgMHgzNywgMHgxMCwgMHgxRiwgMHhBMiwgMHg3QywKKzB4MDIsIDB4RjUsIDB4NEQsIDB4QzAsIDB4MDcsIDB4MDAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDgxLCAweDA5LCAweDJGLCAweDEwLCAweEYzLCAweDAwLCAweDQ0LCAweDAwLCAweEYwLCAweDBGLCAweEMwLCAweDNGLAorMHgwMCwgMHgzRiwgMHgwOCwgMHhDRCwgMHgwMCwgMHgzMCwgMHgwQiwgMHhDMSwgMHg3RiwgMHgwMCwgMHhGRiwgMHgwMCwgMHhDQywKKzB4MDAsIDB4RjAsIDB4MEYsIDB4QzAsIDB4M0IsIDB4MDAsIDB4MDMsIDB4MDIsIDB4Q0MsIDB4MjUsIDB4MzIsIDB4MEYsIDB4QzAsCisweDA3LCAweDIwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgxLCAweDIwLCAweDY2LAorMHgwMCwgMHhENSwgMHgwMCwgMHg0NCwgMHgwQywgMHhEMCwgMHgwRCwgMHg0MCwgMHgzNywgMHgwMCwgMHgxRCwgMHgwMiwgMHg0NCwKKzB4MDYsIDB4NTAsIDB4MzEsIDB4NDEsIDB4MzcsIDB4MDAsIDB4MUQsIDB4MDIsIDB4NDQsIDB4MEMsIDB4RDAsIDB4MEQsIDB4NDAsCisweDM3LCAweDAwLCAweDExLCAweDAyLCAweDQ0LCAweDQ0LCAweDUwLCAweDBELCAweDQwLCAweDA3LCAweDAyLCAweDA4LCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHhBMCwgMHg0NiwgMHgwMCwgMHhEMSwgMHgwMCwgMHg1NCwKKzB4MDYsIDB4RDgsIDB4MEQsIDB4NDAsIDB4MzcsIDB4MDAsIDB4NUQsIDB4MDAsIDB4NDQsIDB4NDQsIDB4MTAsIDB4MTMsIDB4NDAsCisweDM3LCAweDEyLCAweDFELCAweDAwLCAweEU0LCAweDA2LCAweEQwLCAweDBGLCAweDQwLCAweDM3LCAweDAwLCAweDExLCAweDUwLAorMHg0NCwgMHg4MywgMHg1MCwgMHgwRCwgMHg0OCwgMHgwNywgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MTAsIDB4MjAsIDB4MjAsIDB4MDAsIDB4QzUsIDB4MDAsIDB4MTQsIDB4MDIsIDB4RDgsIDB4MEMsIDB4NDAsCisweDMzLCAweDA4LCAweDRDLCAweDAwLCAweDA1LCAweDAwLCAweDUwLCAweDAwLCAweDQwLCAweDMzLCAweDAwLCAweDBELCAweDAwLAorMHgwNCwgMHgwMCwgMHhEMCwgMHgwQywgMHg0OCwgMHgzMywgMHgwMCwgMHhDMSwgMHgwMCwgMHgwNCwgMHgxMCwgMHg1MSwgMHg0QywKKzB4NDAsIDB4NDMsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4OTAsCisweDA2LCAweDAwLCAweEYzLCAweDQwLCAweDVDLCAweDAwLCAweEYwLCAweDBGLCAweEMwLCAweDNGLCAweDAwLCAweDFGLCAweDAwLAorMHg0QywgMHgwMCwgMHgzMiwgMHgwMSwgMHhDMCwgMHgyNywgMHgwMCwgMHhDRiwgMHgwMCwgMHg0QywgMHgwMCwgMHhGMCwgMHgwRSwKKzB4QzQsIDB4MzcsIDB4MDAsIDB4MTMsIDB4MDAsIDB4NEQsIDB4NjAsIDB4MzAsIDB4QUYsIDB4QzAsIDB4MDcsIDB4QzAsIDB4MEEsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweEI4LCAweDJGLCAweDIwLCAweEZGLCAweDAwLAorMHhFQywgMHgwMCwgMHhGMSwgMHgwRiwgMHhDMCwgMHgzRiwgMHgwMCwgMHgzRiwgMHg0MCwgMHhGQywgMHgwMCwgMHhGMCwgMHgwMywKKzB4QzIsIDB4MkYsIDB4MDAsIDB4M0YsIDB4MDAsIDB4RkMsIDB4MDAsIDB4RjAsIDB4MEYsIDB4RTAsIDB4M0YsIDB4MDAsIDB4M0YsCisweDQwLCAweDdDLCAweDEwLCAweEUwLCAweDZELCAweEMwLCAweDE3LCAweDYwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHhBOCwgMHgzRiwgMHgwQiwgMHhGRiwgMHgyQywgMHhGQywgMHgwQSwgMHhEMCwgMHg4RiwKKzB4QzAsIDB4NEMsIDB4MDAsIDB4M0YsIDB4NDksIDB4RUMsIDB4OTMsIDB4MzAsIDB4NEYsIDB4QzAsIDB4MEYsIDB4MTAsIDB4MzMsCisweDAwLCAweEZDLCAweDI0LCAweEIwLCAweDRGLCAweEMwLCAweDZDLCAweDAwLCAweEYzLCAweDAwLCAweDhDLCAweDAzLCAweEIxLAorMHgwMywgMHhDMCwgMHgwRiwgMHgwMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywKKzB4MTAsIDB4QkYsIDB4MDEsIDB4RkQsIDB4MDgsIDB4NzQsIDB4OEEsIDB4RDAsIDB4NkYsIDB4NDQsIDB4NjQsIDB4MDAsIDB4MTksCisweDAwLCAweEY0LCAweDBGLCAweDUxLCAweEFGLCAweDQwLCAweDI3LCAweDEyLCAweDExLCAweDQxLCAweDc0LCAweDEyLCAweDEwLAorMHg5RiwgMHg0MCwgMHg3NCwgMHgwMCwgMHhGMSwgMHg0MiwgMHg0NCwgMHg4NywgMHgxMCwgMHgxMSwgMHg0MCwgMHgwRiwgMHgwMCwKKzB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTMsIDB4QTgsIDB4QjMsIDB4MDEsIDB4Q0QsCisweDAwLCAweDM2LCAweDFBLCAweEQwLCAweDJDLCAweDUwLCAweDIwLCAweDAwLCAweDhELCAweDQ0LCAweDI0LCAweDBCLCAweDExLAorMHgwQywgMHg0MCwgMHgwMSwgMHgwMCwgMHgwNSwgMHg4MCwgMHg3NCwgMHg5MCwgMHg5MCwgMHgwQywgMHg0MCwgMHgzNSwgMHgwMCwKKzB4QzEsIDB4MDIsIDB4MDQsIDB4MDcsIDB4OTAsIDB4MDAsIDB4NDAsIDB4NEYsIDB4ODAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweEEwLCAweDM1LCAweDAwLCAweERELCAweDAwLCAweDc0LCAweDA2LCAweEQwLAorMHgwRCwgMHg0MCwgMHhFNCwgMHgwMCwgMHgxOSwgMHgwMSwgMHg3NCwgMHgwMywgMHg1MCwgMHgwRCwgMHg2MCwgMHgwNywgMHgwMCwKKzB4MzEsIDB4MDEsIDB4NzQsIDB4MEUsIDB4MTAsIDB4MEQsIDB4MDAsIDB4NzQsIDB4MDAsIDB4RDEsIDB4MDAsIDB4NDQsIDB4ODcsCisweDAwLCAweDExLCAweDQwLCAweDBGLCAweDIwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHhBOCwgMHgzNywgMHgwMCwgMHhERiwgMHg4MCwgMHg3QywgMHg4QywgMHhGMCwgMHgwRCwgMHhDMCwgMHhDNCwgMHgzMCwKKzB4OUYsIDB4MDEsIDB4NkMsIDB4MDMsIDB4MzQsIDB4MEQsIDB4QzAsIDB4MDcsIDB4MDAsIDB4MTIsIDB4MDUsIDB4M0MsIDB4MEUsCisweEIxLCAweDBDLCAweEMwLCAweDYwLCAweDAwLCAweEQzLCAweDAwLCAweDRDLCAweDgwLCAweEIwLCAweDE5LCAweEMwLCAweDIzLAorMHgwMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNywgMHg4MCwgMHgzRCwgMHgwMCwKKzB4RkYsIDB4MDAsIDB4RkMsIDB4MDIsIDB4RjIsIDB4MEUsIDB4NDAsIDB4MkYsIDB4MDgsIDB4M0QsIDB4NDAsIDB4RkMsIDB4MDMsCisweEIwLCAweDBGLCAweEMwLCAweDZCLCAweEQxLCAweEJGLCAweDQwLCAweEZDLCAweDAyLCAweEYxLCAweDBGLCAweEMwLCAweDJGLAorMHgwMCwgMHhFRiwgMHgxMCwgMHhGRCwgMHgwMCwgMHhGMCwgMHgwMywgMHhDMCwgMHgxRiwgMHgyMCwgMHgwNiwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MEEsIDB4MDgsIDB4MzUsIDB4MDgsIDB4REYsIDB4MDUsIDB4N0MsIDB4MTAsCisweDcwLCAweDBELCAweEM2LCAweDI1LCAweDAwLCAweDlGLCAweEMwLCAweDNDLCAweDAzLCAweEYwLCAweDBELCAweEMwLCAweDM3LAorMHgwOSwgMHgxRiwgMHgxMCwgMHg3QywgMHgwMiwgMHhGMCwgMHg0RCwgMHhDMCwgMHgwNiwgMHgwMSwgMHhENywgMHgwMCwgMHgwQywKKzB4MDEsIDB4MzAsIDB4MDksIDB4QzAsIDB4MkIsIDB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDEzLCAweEEwLCAweDNDLCAweDIwLCAweEZELCAweDQyLCAweDc0LCAweDBFLCAweEQwLCAweDBGLCAweDUwLCAweDY0LAorMHgwMCwgMHgxRCwgMHg4MCwgMHhGMCwgMHgxMywgMHhEMCwgMHhBRiwgMHg0MCwgMHhCNywgMHgwMSwgMHg5RCwgMHgyMywgMHg3NCwKKzB4MDIsIDB4RDAsIDB4M0YsIDB4NDAsIDB4QTcsIDB4ODAsIDB4RjEsIDB4MDEsIDB4NTQsIDB4MDEsIDB4MTQsIDB4MDksIDB4NDEsCisweDRGLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweDIwLCAweDMwLAorMHgwMCwgMHhDRCwgMHgwMiwgMHgzNCwgMHgyQywgMHg1MCwgMHgwQywgMHg0OCwgMHgwMCwgMHgwMiwgMHgwOSwgMHg0MCwgMHgzMCwKKzB4MDMsIDB4RDAsIDB4MUMsIDB4NDAsIDB4MTMsIDB4MDAsIDB4MEQsIDB4MEIsIDB4MzQsIDB4MDAsIDB4OTAsIDB4M0MsIDB4NEMsCisweEEyLCAweDA4LCAweENELCAweDQxLCAweDA0LCAweDAzLCAweDUxLCAweDA4LCAweDQwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxRiwgMHgwMCwgMHg3OCwgMHgwMCwgMHhFRCwgMHgwMSwgMHhCNCwKKzB4MDUsIDB4RDEsIDB4MUMsIDB4NDAsIDB4QzgsIDB4MDAsIDB4MkQsIDB4MDEsIDB4QjYsIDB4MEYsIDB4RDAsIDB4MUUsIDB4NDEsCisweDdCLCAweDAyLCAweDJELCAweDAxLCAweEI0LCAweDA0LCAweEQwLCAweDFFLCAweDQwLCAweDdGLCAweDAwLCAweEUxLCAweDQxLAorMHhENCwgMHgyRiwgMHg1MCwgMHgxNiwgMHg2MCwgMHgzRiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MTIsIDB4MDIsIDB4MzAsIDB4MDgsIDB4Q0YsIDB4MDAsIDB4M0MsIDB4MDMsIDB4NzAsIDB4OEMsIDB4QzAsCisweDAxLCAweDAwLCAweDhGLCAweDhBLCAweDNFLCAweDIzLCAweEYwLCAweDBDLCAweEMwLCAweDEzLCAweDAwLCAweDRGLCAweDAwLAorMHgzQywgMHg4MCwgMHhGMSwgMHgwQywgMHhDMSwgMHgzMiwgMHgwMCwgMHhENywgMHgxMCwgMHgwQywgMHgyMywgMHg3MCwgMHg0QywKKzB4QzAsIDB4NEIsIDB4NjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MjgsCisweDNELCAweDI0LCAweEZGLCAweDAwLCAweEY4LCAweDAzLCAweEYwLCAweDBGLCAweDgwLCAweDFGLCAweDAwLCAweEZGLCAweDI4LAorMHhGQywgMHg2MywgMHhGMCwgMHgwRiwgMHhDMCwgMHgxRiwgMHg4MCwgMHgzRiwgMHgwMCwgMHg3QywgMHgwMywgMHhGMCwgMHgwRiwKKzB4RTksIDB4M0IsIDB4MDAsIDB4RkYsIDB4MDAsIDB4RkMsIDB4MjMsIDB4QjQsIDB4MEQsIDB4RTAsIDB4MEIsIDB4NjAsIDB4MDQsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweEE4LCAweEY3LCAweDA0LCAweEQ3LCAweDAyLAorMHg3QywgMHgwNSwgMHgzMCwgMHhDRCwgMHhDMCwgMHgwNywgMHgwMCwgMHg5QiwgMHgwMCwgMHg3QywgMHgxMywgMHhGMSwgMHhDRCwKKzB4RDAsIDB4MDQsIDB4NDAsIDB4RDMsIDB4MDEsIDB4NEQsIDB4MDAsIDB4RjAsIDB4NkQsIDB4QzAsIDB4MjcsIDB4ODAsIDB4RDcsCisweDAyLCAweDdDLCAweDAzLCAweDM0LCAweDE4LCAweEM0LCAweDQwLCAweDAwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgxMywgMHg4MCwgMHgzMCwgMHgwMCwgMHhFMSwgMHg1NiwgMHhCNCwgMHgwMywgMHhCMCwgMHg4RSwKKzB4NDQsIDB4MkIsIDB4MDAsIDB4RUQsIDB4MDAsIDB4QjQsIDB4MzMsIDB4RDAsIDB4MEYsIDB4NDEsIDB4MkMsIDB4MDAsIDB4RTEsCisweDAwLCAweDg0LCAweDAxLCAweEQwLCAweDRFLCAweDQxLCAweDNCLCAweDgwLCAweEVELCAweDBFLCAweEI0LCAweDAzLCAweEIwLAorMHgwNiwgMHg0MCwgMHg0QywgMHgwMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwKKzB4MDAsIDB4NzgsIDB4MDEsIDB4RUQsIDB4MDEsIDB4MzYsIDB4MDUsIDB4MTAsIDB4NUUsIDB4NDAsIDB4N0IsIDB4MTgsIDB4QUQsCisweDAxLCAweEE0LCAweDE3LCAweEQwLCAweDVFLCAweDQwLCAweDdBLCAweDAwLCAweEMxLCAweDAxLCAweEE0LCAweDA2LCAweEQwLAorMHgxRSwgMHg0MCwgMHg1QiwgMHgwNCwgMHhFRCwgMHgyNSwgMHhCNCwgMHgwNywgMHgxMCwgMHgxRSwgMHg0MCwgMHgxMCwgMHgwMCwKKzB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTYsIDB4MjgsIDB4MzMsIDB4MDAsIDB4QzksCisweDAwLCAweDM0LCAweDQzLCAweDk4LCAweDBDLCAweDQwLCAweDMzLCAweDIyLCAweENELCAweDBBLCAweDM0LCAweDAzLCAweEQwLAorMHgwQywgMHg0MCwgMHhCMiwgMHgwMywgMHhDMSwgMHgwQSwgMHgyNCwgMHgwMywgMHhEMCwgMHgwQywgMHg0MCwgMHg3MywgMHgwMSwKKzB4Q0QsIDB4MDAsIDB4MzQsIDB4MDMsIDB4OTAsIDB4NkMsIDB4NDAsIDB4NTgsIDB4MjAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE3LCAweDI4LCAweDE3LCAweDEwLCAweDVGLCAweDAwLCAweEZDLCAweDgxLCAweDMwLAorMHgwNSwgMHhFMCwgMHg1QiwgMHgwMCwgMHg3QiwgMHg2MSwgMHgzQywgMHgwMSwgMHhGMiwgMHgwNSwgMHhDMCwgMHhERSwgMHgwMCwKKzB4NzMsIDB4MDEsIDB4RUMsIDB4MDUsIDB4RjAsIDB4MDUsIDB4Q0EsIDB4MUIsIDB4MDAsIDB4NUYsIDB4MDAsIDB4RkMsIDB4MDEsCisweDMwLCAweDA3LCAweEQ0LCAweDVDLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgxMiwgMHgwMCwgMHgwNSwgMHgwOCwgMHgxNywgMHgwMCwgMHg3OCwgMHgyMCwgMHhGMCwgMHgwMSwgMHhDNiwgMHg0NywgMHgwOCwKKzB4MUYsIDB4MTAsIDB4N0MsIDB4MDAsIDB4RjAsIDB4MjAsIDB4QzgsIDB4MDEsIDB4MDAsIDB4MUYsIDB4MDQsIDB4NUMsIDB4MjQsCisweEYwLCAweDAxLCAweEMwLCAweDA3LCAweDIwLCAweDFGLCAweDAwLCAweDdDLCAweDA0LCAweEYxLCAweDIxLCAweEMwLCAweDRCLAorMHgyMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHgyNSwgMHgwMCwKKzB4OEYsIDB4MDEsIDB4NEMsIDB4MDIsIDB4RjAsIDB4MDksIDB4QzAsIDB4MjcsIDB4MDIsIDB4OUIsIDB4MjAsIDB4NEMsIDB4ODIsCisweEIwLCAweDE5LCAweDgwLCAweDI0LCAweDAwLCAweDkxLCAweDAxLCAweDdDLCAweDAyLCAweDMwLCAweDA5LCAweEMwLCAweEU1LAorMHgwMCwgMHg5MywgMHgwMCwgMHg3QywgMHgwMiwgMHgzMiwgMHgwOSwgMHhDMCwgMHg0MywgMHgyMCwgMHgwNCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MjAsIDB4MjYsIDB4MDAsIDB4OUQsIDB4MDMsIDB4NDUsIDB4OEUsCisweEQwLCAweDA5LCAweDQwLCAweEU3LCAweDEwLCAweDgwLCAweDAwLCAweDQ0LCAweDA2LCAweDEwLCAweDQ5LCAweDUwLCAweDI0LAorMHgwMiwgMHg5MSwgMHgwMiwgMHg3NCwgMHgwMiwgMHgxMCwgMHgwOSwgMHg0MCwgMHhBNywgMHgwMCwgMHg5MSwgMHgwQiwgMHgzNCwKKzB4MDIsIDB4MTQsIDB4MjksIDB4NDQsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDE4LCAweEEwLCAweDI0LCAweDAwLCAweDlELCAweDE4LCAweDU0LCAweDJCLCAweEQwLCAweDA5LCAweDQwLCAweDI3LAorMHgwMCwgMHg5OCwgMHgyMCwgMHg0NCwgMHg1MiwgMHg5MiwgMHg0OSwgMHg0OCwgMHgyNSwgMHgwOCwgMHg5NSwgMHgzOCwgMHgzNCwKKzB4MDIsIDB4MDAsIDB4MDksIDB4NDIsIDB4MjcsIDB4NDAsIDB4OTEsIDB4MDAsIDB4NzQsIDB4MDYsIDB4MUMsIDB4MkQsIDB4NDAsCisweDYzLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDIwLCAweDIwLAorMHgwMCwgMHg4OSwgMHgxNCwgMHgxNCwgMHg1MiwgMHhEMSwgMHg4OCwgMHg0MCwgMHgyMywgMHgwOCwgMHg5MSwgMHg0OCwgMHgwMCwKKzB4MDIsIDB4MDAsIDB4MDgsIDB4NjAsIDB4MjEsIDB4MDAsIDB4ODUsIDB4MDQsIDB4MzYsIDB4MjIsIDB4MTQsIDB4MDgsIDB4NDAsCisweDIzLCAweDAwLCAweEMxLCAweDE0LCAweDM0LCAweDU2LCAweDEwLCAweDQ4LCAweDQxLCAweDQzLCAweDgwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxRCwgMHhCOCwgMHgwNiwgMHgwNSwgMHgxRiwgMHgwNCwgMHg1QywKKzB4MTAsIDB4RjAsIDB4NjEsIDB4QzEsIDB4MTcsIDB4MDAsIDB4MUEsIDB4MDIsIDB4NEMsIDB4NTAsIDB4QjAsIDB4RTEsIDB4QzEsCisweDg1LCAweDQ3LCAweDE3LCAweDAxLCAweDdDLCAweDA4LCAweDIwLCAweDQxLCAweEMxLCAweDE1LCAweDAwLCAweDEzLCAweDBFLAorMHg3QywgMHgxMCwgMHgzMCwgMHg0MSwgMHhDMCwgMHg3NywgMHhFMCwgMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MUQsIDB4QjgsIDB4MjcsIDB4MDUsIDB4OUYsIDB4MTQsIDB4RUMsIDB4NTIsIDB4RjAsIDB4NDksIDB4QzIsCisweDJGLCAweDEwLCAweEJGLCAweDQ0LCAweDdELCAweDAyLCAweEYwLCAweDE5LCAweEMyLCAweDZFLCAweDAwLCAweEJCLCAweDA4LAorMHhGQywgMHgxMiwgMHhGMCwgMHgwOSwgMHhDMCwgMHgyRiwgMHgwMCwgMHg5RiwgMHg4MSwgMHhCQywgMHgwMiwgMHhGMCwgMHgwQiwKKzB4QzAsIDB4NzcsIDB4NjAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MUQsIDB4MDAsCisweEE3LCAweDEwLCAweEJGLCAweDA2LCAweENDLCAweDQ2LCAweDEwLCAweDI5LCAweEMwLCAweDJELCAweDAwLCAweDlGLCAweDgyLAorMHhEQywgMHgxMiwgMHhGMCwgMHgwQiwgMHhDMCwgMHgyQywgMHgwNSwgMHhCMywgMHgwMCwgMHg3QywgMHg4MiwgMHgzMCwgMHg0QiwKKzB4QzEsIDB4MkYsIDB4MDAsIDB4QjMsIDB4MDAsIDB4QkMsIDB4OTMsIDB4MzAsIDB4MEIsIDB4QzAsIDB4NzcsIDB4MDAsIDB4MEUsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAwLCAweDg3LCAweDAwLCAweDExLCAweDBBLAorMHg0NSwgMHgwQywgMHhCMCwgMHhFMCwgMHg0MCwgMHgwNywgMHgwOCwgMHgxNywgMHgwMCwgMHg0NCwgMHgwMCwgMHhEMCwgMHhBMSwKKzB4NDAsIDB4ODQsIDB4MDgsIDB4MTEsIDB4MDAsIDB4NzQsIDB4NTAsIDB4MTAsIDB4MjEsIDB4NDAsIDB4MTcsIDB4MDAsIDB4MTEsCisweDAwLCAweDc0LCAweDAwLCAweDEwLCAweDAxLCAweDQ0LCAweDYzLCAweDAwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHgyMCwgMHhBMSwgMHgwMSwgMHg4NSwgMHgwNCwgMHgwNCwgMHg1MiwgMHg1OCwgMHg0OCwKKzB4NDAsIDB4MjMsIDB4MDAsIDB4ODksIDB4MDAsIDB4MTQsIDB4MEIsIDB4RDAsIDB4MDgsIDB4NDAsIDB4MjAsIDB4MDAsIDB4ODUsCisweDgwLCAweDM0LCAweDAyLCAweDEwLCAweDA4LCAweDQyLCAweDI1LCAweDAwLCAweEMxLCAweDAwLCAweDM0LCAweDhBLCAweDEwLAorMHgwOCwgMHg0MCwgMHg0QiwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwKKzB4MjgsIDB4MjUsIDB4MDAsIDB4RDEsIDB4MDAsIDB4NDQsIDB4MDMsIDB4RDEsIDB4MDksIDB4NDAsIDB4MjcsIDB4MEMsIDB4OTUsCisweDA0LCAweDQ0LCAweDAyLCAweEQwLCAweDA5LCAweDEwLCAweDI0LCAweDE0LCAweDk0LCAweDA0LCAweDc0LCAweDBBLCAweDE0LAorMHgwOSwgMHg0MCwgMHgyNywgMHgwMCwgMHg5MSwgMHgwMCwgMHg3NCwgMHgxMiwgMHgxOCwgMHg0OSwgMHg0MCwgMHg2MywgMHgyOCwKKzB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4QTIsIDB4MjcsIDB4MTAsIDB4OTcsCisweDAwLCAweDQ4LCAweDFBLCAweDcwLCAweDA5LCAweEUwLCAweEE1LCAweDAwLCAweDlGLCAweDkzLCAweDU0LCAweDAyLCAweEYwLAorMHgwOSwgMHhDNCwgMHhFNCwgMHg0MCwgMHg5NywgMHgwMCwgMHg3QywgMHgwMiwgMHgzMywgMHgwOSwgMHhDMCwgMHg2NywgMHgwMCwKKzB4OTEsIDB4MDAsIDB4N0MsIDB4MDYsIDB4MzQsIDB4NDksIDB4NDIsIDB4MTcsIDB4MDgsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE2LCAweDA4LCAweDIwLCAweDAwLCAweDlGLCAweDkwLCAweDdDLCAweDEyLCAweEIwLAorMHgwOSwgMHhDMCwgMHg2NywgMHgwOSwgMHg5NywgMHgyMSwgMHg3QywgMHgwMiwgMHhGMCwgMHgwOCwgMHhDMCwgMHgyMywgMHgxMSwKKzB4OUIsIDB4MDAsIDB4N0MsIDB4MEEsIDB4RjAsIDB4MDksIDB4QzAsIDB4MjcsIDB4NDEsIDB4OUYsIDB4MjAsIDB4N0MsIDB4MDYsCisweEYwLCAweDA5LCAweEMwLCAweDVCLCAweDIwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgxNCwgMHgwOCwgMHgwNCwgMHgwMCwgMHgxRiwgMHgwMCwgMHg2QywgMHgwOCwgMHhGMiwgMHgwMSwgMHhDMCwgMHg4NiwgMHgxNCwKKzB4MUYsIDB4MDIsIDB4NEMsIDB4NDAsIDB4RjAsIDB4MDEsIDB4QzAsIDB4ODYsIDB4MDMsIDB4MUYsIDB4MjgsIDB4N0MsIDB4MDAsCisweEYwLCAweDExLCAweEM0LCAweDA0LCAweDAxLCAweDEzLCAweDEwLCAweDdDLCAweDQwLCAweDMwLCAweDIxLCAweEMwLCAweDUwLAorMHgyMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgyMCwgMHgxNCwgMHgwMCwKKzB4N0QsIDB4ODUsIDB4QzQsIDB4ODEsIDB4RDAsIDB4MDUsIDB4NTgsIDB4REMsIDB4MDAsIDB4NUMsIDB4MDAsIDB4RUMsIDB4MDEsCisweEQwLCAweDI3LCAweDQxLCAweDFGLCAweDEwLCAweDdELCAweDAwLCAweDc0LCAweDAxLCAweEQwLCAweDA3LCAweDQwLCAweEQ4LAorMHg0MCwgMHg3MywgMHgwMiwgMHhCNCwgMHgwOSwgMHgxNSwgMHgwNywgMHg0MCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4QTAsIDB4MzIsIDB4MDAsIDB4REQsIDB4MDMsIDB4NzQsIDB4MzMsCisweEQwLCAweDBDLCAweDQwLCAweDcxLCAweDAwLCAweERELCAweDAwLCAweDA0LCAweDBCLCAweEQwLCAweDJDLCAweDQxLCAweEIyLAorMHgwMCwgMHhDQywgMHgwNCwgMHg3NCwgMHgwMywgMHhEMCwgMHgwQywgMHg0MCwgMHg3MCwgMHgwMCwgMHhDMSwgMHgwMiwgMHgzNCwKKzB4MDMsIDB4OTAsIDB4MEMsIDB4NDAsIDB4NDAsIDB4MDAsIDB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDA0LCAweDgwLCAweDM4LCAweDAwLCAweEVELCAweDAwLCAweDk0LCAweDAzLCAweEQxLCAweDlFLCAweDQwLCAweDk5LAorMHgyOCwgMHhGRCwgMHgwOCwgMHhBMCwgMHgwMywgMHhEQSwgMHgwRSwgMHg0MCwgMHgzQiwgMHgwMCwgMHhFRCwgMHgwMCwgMHhCNiwKKzB4MTMsIDB4RDAsIDB4MUUsIDB4NTAsIDB4M0MsIDB4MDQsIDB4QTksIDB4MDAsIDB4RjQsIDB4MDMsIDB4OTAsIDB4MUMsIDB4NDEsCisweDEwLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDE4LCAweDc4LAorMHgxMCwgMHhGRiwgMHgwMSwgMHhCQywgMHgwNywgMHhGMSwgMHg1RSwgMHhDMSwgMHg2QiwgMHgwMCwgMHhGRSwgMHgxMSwgMHg4QywKKzB4MDYsIDB4QzAsIDB4MTIsIDB4QzAsIDB4NkEsIDB4MDAsIDB4RUYsIDB4MjEsIDB4QkMsIDB4NDcsIDB4RjAsIDB4MUMsIDB4RTIsCisweDU4LCAweDAwLCAweEEzLCAweDAxLCAweEJDLCAweDA3LCAweEIwLCAweDFFLCAweEQwLCAweDUwLCAweDYwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHhCMCwgMHhCNSwgMHgwNSwgMHg1RiwgMHgwMCwgMHg2QywKKzB4MDEsIDB4RjEsIDB4MkQsIDB4QzAsIDB4MDYsIDB4MDAsIDB4REYsIDB4MDYsIDB4N0MsIDB4MDAsIDB4RjAsIDB4MDEsIDB4QzAsCisweDI3LCAweDEwLCAweERGLCAweDAwLCAweDdDLCAweDJCLCAweEYwLCAweDBELCAweEMwLCAweDEzLCAweDAwLCAweDE3LCAweDQwLAorMHg3QywgMHgwMywgMHg3NCwgMHgwRCwgMHhEMCwgMHg0MywgMHg2MCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDYsIDB4MjgsIDB4N0QsIDB4MDQsIDB4NzMsIDB4MDEsIDB4Q0QsIDB4MjcsIDB4MzAsIDB4MUYsIDB4QzIsCisweDdGLCAweDAyLCAweEY3LCAweDAxLCAweENDLCAweDA1LCAweEI0LCAweDlGLCAweEM4LCAweDVGLCAweDkyLCAweDZGLCAweDA5LAorMHhEQywgMHgwNywgMHhGMCwgMHgxRiwgMHhDMCwgMHg1OCwgMHg0MCwgMHhCMywgMHgwOSwgMHhDQywgMHhBNSwgMHgzMCwgMHgxRiwKKzB4QzAsIDB4MTgsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTUsIDB4MDgsCisweDM5LCAweEEwLCAweDYxLCAweDAwLCAweEFDLCAweDAzLCAweDEwLCAweDRFLCAweDQ4LCAweDJCLCAweDgyLCAweEUxLCAweDAwLAorMHg4NCwgMHgwOCwgMHgxMCwgMHgwNiwgMHg0MCwgMHgxQiwgMHgwMCwgMHhFRCwgMHgwOCwgMHg4NCwgMHgwMywgMHhEMCwgMHgwNiwKKzB4NTAsIDB4MTgsIDB4MDIsIDB4QTEsIDB4MDAsIDB4ODUsIDB4MzMsIDB4QjAsIDB4MEEsIDB4QzgsIDB4NTYsIDB4MDAsIDB4MDQsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ4LCAweDAwLCAweDM5LCAweDAwLCAweEMxLCAweDA4LAorMHg5NCwgMHg0MywgMHgxOCwgMHgwRSwgMHg2MCwgMHgyRiwgMHg4NCwgMHhFNSwgMHgwMCwgMHg4NCwgMHgwMCwgMHgxMCwgMHgwNiwKKzB4MDgsIDB4MUIsIDB4MDAsIDB4MkQsIDB4MDAsIDB4OTQsIDB4NDMsIDB4RDAsIDB4OEUsIDB4NDAsIDB4MEUsIDB4MDAsIDB4ODEsCisweDgwLCAweEM0LCAweDAxLCAweDE4LCAweDBFLCAweDQwLCAweDIwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHgyOCwgMHgzNSwgMHgwMCwgMHgwMSwgMHgwMCwgMHg1MCwgMHgwMiwgMHgxOCwgMHgwRCwKKzB4NDQsIDB4NjMsIDB4MDAsIDB4QzUsIDB4MDIsIDB4MDQsIDB4MDAsIDB4MTAsIDB4MDAsIDB4NDQsIDB4ODMsIDB4MDAsIDB4OEQsCisweDAyLCAweDA0LCAweDRGLCAweEQwLCAweDA0LCAweDQwLCAweEMyLCAweDAyLCAweDAxLCAweDAwLCAweDQ0LCAweDAxLCAweDkwLAorMHhBOCwgMHg0MCwgMHgwQSwgMHgyMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwKKzB4QTgsIDB4M0QsIDB4MDAsIDB4OTMsIDB4MDAsIDB4NTQsIDB4MjgsIDB4MzAsIDB4MEYsIDB4QzAsIDB4NjcsIDB4MDAsIDB4RjcsCisweDAwLCAweDRDLCAweDAyLCAweDMwLCAweDA5LCAweDQwLCAweDI3LCAweDAwLCAweDlGLCAweDA2LCAweERDLCAweDBGLCAweEYwLAorMHgwQywgMHg0MCwgMHg2MiwgMHgwOCwgMHg5MSwgMHgwMCwgMHg0QywgMHgwMywgMHgxMSwgMHgzRCwgMHhDOCwgMHg1NCwgMHgwMCwKKzB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4MDAsIDB4MzcsIDB4MDAsIDB4OUYsCisweDAyLCAweDY0LCAweDAyLCAweEYwLCAweDBELCAweEMwLCAweDg3LCAweDI4LCAweERBLCAweDExLCAweDdDLCAweDBBLCAweDcwLAorMHgwOSwgMHhDMCwgMHg4NywgMHgxMCwgMHhERiwgMHgxMCwgMHg3QywgMHgwMywgMHhGMCwgMHgwOSwgMHhDNCwgMHgwNSwgMHgwNCwKKzB4OUYsIDB4QzAsIDB4NkMsIDB4MDMsIDB4RjAsIDB4MkQsIDB4QzIsIDB4MzcsIDB4MjAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgxLCAweDA4LCAweDNGLCAweDAwLCAweEIzLCAweDgwLCAweDdDLCAweDAwLCAweDMxLAorMHgwRiwgMHhFMCwgMHgwQywgMHgwNCwgMHhGNywgMHgwMCwgMHg3QywgMHgwMiwgMHhGMCwgMHgwMywgMHg0MCwgMHgyRiwgMHgwNCwKKzB4MzcsIDB4MDAsIDB4Q0MsIDB4MDMsIDB4RjAsIDB4MEQsIDB4QzAsIDB4MEMsIDB4NDAsIDB4QjIsIDB4MDAsIDB4RkMsIDB4MDIsCisweDcwLCAweDA1LCAweEMxLCAweDA1LCAweDIwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHhBMSwgMHgyMCwgMHgzNiwgMHgwMCwgMHg5MSwgMHgwMywgMHg3NCwgMHgwNCwgMHgxMCwgMHgwRCwgMHg0OCwgMHg0NCwgMHgwMSwKKzB4REQsIDB4MDAsIDB4NzQsIDB4MDQsIDB4RDAsIDB4MTEsIDB4NDAsIDB4NDcsIDB4MDAsIDB4NEQsIDB4MDAsIDB4NkMsIDB4MDMsCisweEQwLCAweDA5LCAweDQwLCAweDQ0LCAweDAwLCAweDExLCAweDA3LCAweDc0LCAweDAyLCAweDEwLCAweDQ0LCAweDQyLCAweDg0LAorMHgwNCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHhBMCwgMHgzNiwgMHgwMCwKKzB4MTEsIDB4MDEsIDB4NzQsIDB4MDQsIDB4MTAsIDB4MEQsIDB4NDAsIDB4NjQsIDB4MTgsIDB4REQsIDB4MDAsIDB4NzQsIDB4MDYsCisweEQwLCAweDFCLCAweDYwLCAweENGLCAweDAwLCAweDFELCAweDU4LCAweDQ0LCAweDAzLCAweEQwLCAweDFELCAweDcwLCAweEM0LAorMHgwMCwgMHgzNSwgMHg4MSwgMHg3NCwgMHgyMSwgMHg1MCwgMHgwRCwgMHg0MCwgMHgwNSwgMHgwMCwgMHgwQSwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MjAsIDB4MzAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MjQsIDB4MDIsCisweDEwLCAweDBDLCAweDQwLCAweDIwLCAweDAwLCAweENELCAweDAwLCAweDM0LCAweDAyLCAweEQwLCAweDAwLCAweDQwLCAweDAyLAorMHgyMCwgMHhDRCwgMHgwMCwgMHgyNCwgMHgwMywgMHhEMCwgMHgwMCwgMHg0MCwgMHgwNCwgMHgwMCwgMHgwNSwgMHgwMCwgMHg2NCwKKzB4ODMsIDB4MTQsIDB4MDgsIDB4NDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAxLCAweDEwLCAweDNBLCAweDA4LCAweDkzLCAweDAwLCAweDdDLCAweDAwLCAweDMwLCAweDBGLCAweDQwLCAweDA0LAorMHgxMCwgMHhFNywgMHgwMCwgMHg3QywgMHgwMiwgMHhGMCwgMHgwMSwgMHhDMCwgMHgwNywgMHgwMCwgMHgxNywgMHg2MCwgMHhDQywKKzB4MDMsIDB4RjAsIDB4MEQsIDB4QzAsIDB4MDQsIDB4MDAsIDB4MTcsIDB4MDAsIDB4N0MsIDB4MDAsIDB4NzEsIDB4MDUsIDB4QzAsCisweDA1LCAweDYwLCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweDM4LCAweDNGLAorMHgyMCwgMHhCRiwgMHg4MCwgMHhGRSwgMHgwMiwgMHhGMCwgMHgwRiwgMHhDMCwgMHgwQiwgMHgwMCwgMHhGRiwgMHgwMCwgMHhGQywKKzB4MDAsIDB4RjAsIDB4MDMsIDB4QzAsIDB4MEYsIDB4MDAsIDB4M0YsIDB4MDAsIDB4RkMsIDB4ODMsIDB4RjAsIDB4MDMsIDB4QzgsCisweDBGLCAweDAwLCAweDNCLCAweDAwLCAweEJDLCAweDAwLCAweEYwLCAweDAzLCAweEMyLCAweDE3LCAweDYyLCAweDBFLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNywgMHhBMCwgMHg3RiwgMHgwMiwgMHhGQiwgMHgwOSwgMHhBQywKKzB4MDcsIDB4QjAsIDB4MUYsIDB4QzAsIDB4N0EsIDB4MDAsIDB4RkQsIDB4MjEsIDB4RUMsIDB4MDcsIDB4QjAsIDB4MUYsIDB4QzAsCisweDdBLCAweDA4LCAweEZCLCAweDg5LCAweENDLCAweDA3LCAweEYyLCAweDFGLCAweEMwLCAweDdELCAweDEyLCAweEZCLCAweDA5LAorMHhFQywgMHg4NywgMHgzMywgMHgxRSwgMHhEMiwgMHgwQywgMHgwMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDMsIDB4MDAsIDB4MDcsIDB4MDEsIDB4MTEsIDB4MDQsIDB4NDQsIDB4MDQsIDB4MzAsIDB4MTEsIDB4NDAsCisweDQ0LCAweDAwLCAweDExLCAweDAxLCAweDQwLCAweDAwLCAweDEwLCAweDQwLCAweDQ3LCAweDQ0LCAweDAwLCAweDBELCAweDAwLAorMHg0NCwgMHgwNCwgMHgxMCwgMHgxMSwgMHhDMCwgMHgwNSwgMHgzOSwgMHgxMSwgMHgyNCwgMHg0NCwgMHgxMCwgMHhCMiwgMHgxMSwKKzB4NDQsIDB4MEMsIDB4NjAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTMsIDB4QTAsCisweDM1LCAweDE4LCAweEQ5LCAweDYwLCAweDM0LCAweDAzLCAweEQwLCAweDBELCAweDQwLCAweDM2LCAweDAwLCAweEQ5LCAweEEwLAorMHg2NCwgMHg1MywgMHg5MiwgMHgwRCwgMHg0MCwgMHgzMywgMHgwMCwgMHhENSwgMHgwMCwgMHg0NCwgMHgwMywgMHg5MCwgMHgwQywKKzB4NDAsIDB4MzYsIDB4MDAsIDB4REQsIDB4MDQsIDB4MzQsIDB4NDMsIDB4MTksIDB4MEMsIDB4NDAsIDB4NEMsIDB4ODAsIDB4MEUsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA3LCAweEE4LCAweDA3LCAweDA4LCAweDExLCAweDAwLAorMHg0NCwgMHgwMCwgMHhEMSwgMHgwMSwgMHg0MCwgMHgwNCwgMHgwOCwgMHgxMSwgMHgwMCwgMHg0NCwgMHgwMCwgMHgxMCwgMHgwMSwKKzB4NDAsIDB4MDUsIDB4MDAsIDB4MUQsIDB4MDAsIDB4NDQsIDB4MDAsIDB4MTAsIDB4MDEsIDB4NDAsIDB4MDUsIDB4MTgsIDB4MTUsCisweDAwLCAweDE0LCAweDAwLCAweDkwLCAweDAxLCAweDQwLCAweDBDLCAweDAwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhBMCwgMHgzMiwgMHgyMCwgMHhDQiwgMHgyMCwgMHg2QywgMHgwMywgMHhGMCwgMHgwRCwKKzB4QzAsIDB4MzYsIDB4ODAsIDB4Q0YsIDB4MDAsIDB4MkMsIDB4MDMsIDB4QjAsIDB4MEQsIDB4QzAsIDB4MzcsIDB4MDgsIDB4REIsCisweDAwLCAweDRDLCAweDAzLCAweEIwLCAweDBDLCAweDgwLCAweDM2LCAweDAwLCAweERGLCAweDAwLCAweDdDLCAweDAzLCAweDMyLAorMHgwQywgMHhDOCwgMHgyMCwgMHgyMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywKKzB4ODgsIDB4MEQsIDB4MDAsIDB4M0YsIDB4ODAsIDB4RjgsIDB4NDAsIDB4MzAsIDB4MDMsIDB4QzMsIDB4MEQsIDB4ODAsIDB4M0UsCisweDAwLCAweEY4LCAweDAwLCAweEYwLCAweDAzLCAweEMwLCAweDBFLCAweDA4LCAweDNELCAweDAwLCAweEY4LCAweDAwLCAweEIwLAorMHgwMywgMHg4MiwgMHgwRiwgMHgwMCwgMHgzQiwgMHgzMCwgMHhFOCwgMHgwMCwgMHhGMCwgMHgwMywgMHhDMCwgMHgxRiwgMHgwMCwKKzB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MEEsIDB4MDgsIDB4MzUsIDB4MDAsIDB4RDcsCisweDAwLCAweDZDLCAweDAzLCAweDcxLCAweDBELCAweEMwLCAweDM3LCAweDAwLCAweERGLCAweDAwLCAweDdDLCAweDAzLCAweEYwLAorMHgwRCwgMHhDMCwgMHgzNiwgMHgwNCwgMHhERiwgMHgwMCwgMHg1QywgMHg5MywgMHgzMSwgMHgwRCwgMHhDMSwgMHgzNCwgMHgwMiwKKzB4REYsIDB4MDAsIDB4N0MsIDB4MDMsIDB4NzAsIDB4MEQsIDB4QzEsIDB4MDksIDB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEzLCAweEEwLCAweDg0LCAweDA2LCAweDExLCAweDQwLCAweDM0LCAweDRDLCAweDEwLAorMHgyMCwgMHg0MSwgMHg4MywgMHgyNCwgMHgxMCwgMHgwMCwgMHg3NCwgMHgwNCwgMHgxMCwgMHhCMCwgMHgwMCwgMHgwNCwgMHgwMCwKKzB4MDIsIDB4MDAsIDB4MDQsIDB4MEMsIDB4MTAsIDB4MzEsIDB4NDIsIDB4MDMsIDB4MDAsIDB4MEMsIDB4MDMsIDB4NzAsIDB4ODAsCisweDEwLCAweDIxLCAweDQwLCAweDZDLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgxMywgMHgyMCwgMHg3MCwgMHgxMCwgMHhDNSwgMHg4MCwgMHgyNCwgMHgwNywgMHg0MCwgMHgwQywgMHg0MCwgMHgzMywgMHgwMSwKKzB4QzUsIDB4MDAsIDB4MjQsIDB4NDcsIDB4NTAsIDB4QUMsIDB4NDAsIDB4MzEsIDB4MDgsIDB4QzQsIDB4MDAsIDB4MTQsIDB4MEIsCisweDE0LCAweDNDLCAweDAwLCAweDMwLCAweDA0LCAweENELCAweDAwLCAweDM0LCAweDAzLCAweDk4LCAweDJDLCAweDQwLCAweDBGLAorMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwRiwgMHgwMiwgMHg0QywgMHgwQSwKKzB4MjEsIDB4MDksIDB4RjQsIDB4MDQsIDB4MTAsIDB4MTIsIDB4NDAsIDB4NEYsIDB4MDAsIDB4MjUsIDB4MzcsIDB4RjYsIDB4MDQsCisweDEyLCAweDEyLCAweDYwLCAweDQ5LCAweDAyLCAweDIxLCAweDAxLCAweDg0LCAweDA0LCAweDAwLCAweDEyLCAweDQxLCAweDRCLAorMHgwMiwgMHgyRCwgMHgxMSwgMHhCNCwgMHgyNCwgMHg4MCwgMHgxMiwgMHg0MiwgMHgzRSwgMHgyMCwgMHgwOCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4MTgsIDB4MzAsIDB4MDAsIDB4QzcsIDB4MDAsIDB4MkMsIDB4MjMsCisweDUxLCAweDhDLCAweEMwLCAweDMzLCAweDAwLCAweENGLCAweDA4LCAweDNDLCAweDQzLCAweDcwLCAweDBDLCAweEM0LCAweDMxLAorMHgwNiwgMHhDNywgMHgwMCwgMHgxQywgMHg0MywgMHgzMCwgMHgwQywgMHhDMCwgMHgzMCwgMHgwMCwgMHhDRiwgMHgwMCwgMHg3QywKKzB4MDMsIDB4RjAsIDB4MEMsIDB4RTQsIDB4NEIsIDB4NDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAyLCAweDM4LCAweDA5LCAweDIwLCAweDNGLCAweDAwLCAweEYwLCAweDAwLCAweEYwLCAweDAzLCAweEMyLCAweDBGLAorMHgwMCwgMHgzQiwgMHgyQywgMHhCQywgMHgyMCwgMHg3MCwgMHgwMywgMHhDMCwgMHgwQywgMHgwMiwgMHgzRiwgMHgwMCwgMHhCQywKKzB4MjAsIDB4RjgsIDB4ODMsIDB4QzAsIDB4MEYsIDB4MDAsIDB4MUYsIDB4MDAsIDB4RkMsIDB4MDAsIDB4NzEsIDB4MTEsIDB4QzgsCisweDA5LCAweDIwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweEE4LCAweDc3LAorMHgwMCwgMHhDMywgMHg0MCwgMHg2QywgMHgwMywgMHhGMCwgMHgwRCwgMHhDMCwgMHg3MywgMHgwMCwgMHhDNywgMHgwMSwgMHg2QywKKzB4MDcsIDB4MzYsIDB4MEQsIDB4QzQsIDB4NzAsIDB4MDAsIDB4REIsIDB4NDAsIDB4NkMsIDB4MDMsIDB4RjAsIDB4MEMsIDB4RDAsCisweDM0LCAweDQwLCAweEQzLCAweDAwLCAweDdDLCAweDAzLCAweEIwLCAweDBELCAweEMwLCAweDQzLCAweDAwLCAweDBFLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMywgMHg5OCwgMHgwRCwgMHgwOCwgMHgyQiwgMHgwMCwgMHg4NCwKKzB4MDAsIDB4RDIsIDB4MDIsIDB4NDAsIDB4MEIsIDB4MDAsIDB4MjEsIDB4NjAsIDB4ODQsIDB4MDAsIDB4MTAsIDB4MDIsIDB4NDIsCisweDA4LCAweDAwLCAweDMxLCAweDAwLCAweDg0LCAweDAwLCAweDkwLCAweDAyLCAweDQwLCAweDA4LCAweDAwLCAweDIxLCAweDAwLAorMHhCNCwgMHgwMCwgMHgxMCwgMHgwMiwgMHg0MCwgMHg0RiwgMHg2OCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzksIDB4MDAsIDB4RjksIDB4MDEsIDB4QTYsIDB4MDcsIDB4RDksIDB4MUUsIDB4NDAsCisweDdCLCAweDAwLCAweEY1LCAweDAxLCAweEE0LCAweDA3LCAweDEwLCAweDFFLCAweDQwLCAweDc4LCAweDEwLCAweEU5LCAweDAxLAorMHhCNCwgMHgwNywgMHhEMCwgMHgxRSwgMHg2MCwgMHg3OCwgMHgwMCwgMHhFMSwgMHgwMSwgMHhENCwgMHgwNywgMHg5MCwgMHgxRSwKKzB4NjAsIDB4MTMsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTYsIDB4MjAsCisweDAzLCAweDAwLCAweDE5LCAweDAwLCAweDA2LCAweDAwLCAweEQwLCAweDAwLCAweDQyLCAweDAzLCAweDAwLCAweDA1LCAweDAwLAorMHgwNCwgMHgwMCwgMHgxOCwgMHgwMCwgMHg1MCwgMHgwMSwgMHgwMCwgMHgwMSwgMHgwMCwgMHgxNCwgMHgwMCwgMHg5MCwgMHgwMCwKKzB4NjAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4MDAsIDB4NzQsIDB4MDAsIDB4MTAsIDB4MDAsIDB4NDAsIDB4NUIsIDB4MDAsIDB4MEMsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE3LCAweDI4LCAweDE1LCAweDAwLCAweDVCLCAweDgwLAorMHgyQywgMHgwMSwgMHhGMCwgMHgwNSwgMHhDMCwgMHgxNywgMHgwMCwgMHg1NywgMHg0MCwgMHg2QywgMHgwMSwgMHgzMCwgMHgwNSwKKzB4Q0EsIDB4MTQsIDB4MTAsIDB4NUIsIDB4MDAsIDB4N0MsIDB4MDEsIDB4RjAsIDB4MDQsIDB4QzAsIDB4MTAsIDB4MDAsIDB4NTMsCisweDAwLCAweDdDLCAweDAxLCAweEIwLCAweDA1LCAweEMwLCAweDVGLCAweDIwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHgwMCwgMHg4RCwgMHgwOCwgMHgzRiwgMHgwMCwgMHhGQywgMHgwOCwgMHhFMCwgMHgwMywKKzB4QzAsIDB4MEYsIDB4MjAsIDB4MzksIDB4MjAsIDB4RkMsIDB4MDgsIDB4RjAsIDB4MDMsIDB4MDAsIDB4MEUsIDB4MDAsIDB4M0YsCisweDQwLCAweEU0LCAweDgwLCAweEMyLCAweDAzLCAweEMwLCAweDhGLCAweDAwLCAweDNCLCAweDIwLCAweEZDLCAweDAwLCAweEYwLAorMHgwMywgMHhDMCwgMHg0QiwgMHgwOCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwKKzB4MDgsIDB4MjUsIDB4MDAsIDB4OUYsIDB4MDAsIDB4NEMsIDB4MjIsIDB4MzAsIDB4NDksIDB4QzAsIDB4MjUsIDB4MDAsIDB4OUYsCisweEMwLCAweDdDLCAweDAyLCAweEYxLCAweDA5LCAweDgwLCAweEU1LCAweDA4LCAweDlGLCAweDAwLCAweDVDLCAweDAyLCAweDcwLAorMHgwOSwgMHhDMCwgMHgyNCwgMHgwMCwgMHg5NywgMHgwMSwgMHg3QywgMHgxNiwgMHgzMCwgMHgwOSwgMHg4MCwgMHg0MSwgMHgyMCwKKzB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4RTQsIDB4MjMsIDB4OUQsCisweDAwLCAweDQ1LCAweDBBLCAweDEwLCAweDE4LCAweDgwLCAweDI2LCAweDAwLCAweDlDLCAweDExLCAweDcwLCAweDA2LCAweEQwLAorMHgyOCwgMHg0MCwgMHg2NCwgMHgwNCwgMHg4RCwgMHg4MCwgMHgwNCwgMHgwMiwgMHgwMCwgMHgwOSwgMHg0MCwgMHg2NCwgMHgwMywKKzB4OTEsIDB4MDIsIDB4NzQsIDB4MEUsIDB4MTAsIDB4MTgsIDB4NDAsIDB4MDQsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweEEwLCAweDI0LCAweDgwLCAweEJELCAweDgwLCAweEM0LCAweDAyLCAweDUwLAorMHgwQiwgMHg0MCwgMHgyQywgMHgwMSwgMHhCQywgMHgwOCwgMHhGMCwgMHgyMiwgMHhEMiwgMHgwQiwgMHg0MSwgMHgyRCwgMHgwMCwKKzB4QkQsIDB4MDAsIDB4RDQsIDB4MDIsIDB4NDIsIDB4MEIsIDB4NDAsIDB4MkMsIDB4MDAsIDB4QjUsIDB4MEEsIDB4RjQsIDB4QzIsCisweDAwLCAweDRCLCAweDQwLCAweDcxLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgxMCwgMHgyMCwgMHgyOSwgMHgwMCwgMHhBRCwgMHgwMCwgMHhENCwgMHgwMywgMHg1NCwgMHgxQiwgMHg0MCwgMHg2QSwgMHgyMCwKKzB4QUMsIDB4QTAsIDB4QjAsIDB4QTMsIDB4RDEsIDB4OEIsIDB4NDAsIDB4MjksIDB4MDAsIDB4QkQsIDB4NjgsIDB4QzQsIDB4MDIsCisweDUxLCAweDBCLCAweDQwLCAweDI4LCAweDAyLCAweEExLCAweDA4LCAweEIwLCAweDIyLCAweDExLCAweDBCLCAweDQ0LCAweDUxLAorMHhBMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxRCwgMHhCMCwgMHgwNywgMHgwOCwKKzB4MUYsIDB4ODAsIDB4NEMsIDB4MDAsIDB4NzQsIDB4MDEsIDB4QzAsIDB4MDUsIDB4MDAsIDB4MUYsIDB4MDAsIDB4MzgsIDB4MDgsCisweEYwLCAweDIwLCAweEMwLCAweDA1LCAweDAwLCAweDFGLCAweDIyLCAweDVDLCAweDAwLCAweDcyLCAweDAxLCAweEQwLCAweDgwLAorMHgwMCwgMHgxNywgMHgwMiwgMHg3OCwgMHgwOCwgMHgzNCwgMHgwMywgMHhDMCwgMHg3NSwgMHhDMCwgMHgwQSwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MUQsIDB4QjgsIDB4MjcsIDB4MDUsIDB4OUYsIDB4MTQsIDB4NkMsIDB4MDIsCisweEIwLCAweDA5LCAweEMwLCAweDI3LCAweDAwLCAweDlGLCAweDAwLCAweDdDLCAweDEyLCAweEYwLCAweDQ5LCAweDgwLCAweDI2LAorMHgwMCwgMHg5RiwgMHgwNCwgMHg3QywgMHgwMiwgMHhCMCwgMHgwOSwgMHhDMCwgMHgyNywgMHgwMSwgMHg5RiwgMHgwNCwgMHgzQywKKzB4MTIsIDB4RjQsIDB4MDksIDB4QzAsIDB4NjYsIDB4MDAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDFELCAweEE4LCAweEFGLCAweDAwLCAweDlGLCAweDAyLCAweEY0LCAweDAyLCAweDMwLCAweDBCLCAweEMwLCAweDJCLAorMHgwMCwgMHhCRiwgMHg4MCwgMHhDQywgMHg4MiwgMHhGMCwgMHgwQiwgMHhEMCwgMHgyQywgMHgwMCwgMHg4QiwgMHg4MiwgMHg4QywKKzB4MDIsIDB4QjAsIDB4MEIsIDB4QzAsIDB4MkUsIDB4MDAsIDB4QUYsIDB4MDAsIDB4Q0QsIDB4MEEsIDB4QjAsIDB4MEEsIDB4QzAsCisweDY0LCAweDAwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDEwLCAweDQ3LAorMHgwMSwgMHgwRCwgMHgwNSwgMHg3NCwgMHgwMCwgMHhCMCwgMHgwMSwgMHg0MCwgMHgwNywgMHgwOCwgMHgxRCwgMHgwMCwgMHg2QywKKzB4MTAsIDB4RDAsIDB4NDEsIDB4NDAsIDB4MDQsIDB4MDAsIDB4MTEsIDB4MDAsIDB4NTQsIDB4MDAsIDB4MTAsIDB4MDEsIDB4NDAsCisweDAwLCAweDAxLCAweDFELCAweDAwLCAweDQ1LCAweDEwLCAweDEwLCAweDAxLCAweDQyLCAweDcwLCAweDYwLCAweDBDLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHhBMiwgMHgyMSwgMHgwMCwgMHg4RCwgMHgwMCwgMHgzNCwKKzB4MDIsIDB4MTAsIDB4MEMsIDB4NDAsIDB4MjMsIDB4MDgsIDB4OUQsIDB4QTAsIDB4MDQsIDB4NDIsIDB4RDAsIDB4MDgsIDB4NDEsCisweDI0LCAweDAwLCAweDg5LCAweDAwLCAweDY0LCAweDAyLCAweDkwLCAweDA5LCAweDQwLCAweDIyLCAweDA0LCAweDhELCAweDAwLAorMHg0NCwgMHgwMiwgMHg5MCwgMHgwOCwgMHg1MCwgMHg0OCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MTgsIDB4MjAsIDB4MjUsIDB4MTAsIDB4OUQsIDB4MDAsIDB4NzQsIDB4MDMsIDB4OTAsIDB4MEQsIDB4NDAsCisweDI3LCAweDAwLCAweDlELCAweDAwLCAweDY0LCAweDAyLCAweEQwLCAweDA5LCAweDQwLCAweDI0LCAweDAwLCAweDkxLCAweDAwLAorMHg3NCwgMHgwMiwgMHgxMCwgMHgwOSwgMHg0MCwgMHgyNCwgMHgwMCwgMHg4QywgMHgwMCwgMHg0NCwgMHgwMiwgMHgxMCwgMHgwOSwKKzB4NDAsIDB4NjAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4MjgsCisweDI1LCAweDAwLCAweDlGLCAweDAwLCAweDNDLCAweDAyLCAweDMwLCAweDA5LCAweEMwLCAweDI3LCAweDAwLCAweDlGLCAweDIwLAorMHg0QywgMHgwMiwgMHhGMCwgMHgwOSwgMHhDMCwgMHgyMCwgMHgwMCwgMHg5QiwgMHgwMCwgMHgyQywgMHgwMiwgMHhCMCwgMHgwOCwKKzB4QzAsIDB4MjYsIDB4MDAsIDB4OUUsIDB4MDAsIDB4NEMsIDB4MDIsIDB4QjAsIDB4MDksIDB4QzAsIDB4MTQsIDB4MjgsIDB4MEUsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE2LCAweDgwLCAweDI1LCAweDAwLCAweDlGLCAweDAwLAorMHg3QywgMHgwMiwgMHhGOCwgMHgwOSwgMHhDMCwgMHgyNywgMHgxMCwgMHg5RiwgMHgwMCwgMHg3QywgMHg4MiwgMHhGMCwgMHgwOSwKKzB4QzAsIDB4MjcsIDB4MDAsIDB4OUYsIDB4MDAsIDB4NTgsIDB4MDIsIDB4RjAsIDB4MDksIDB4QzAsIDB4MjcsIDB4MDAsIDB4OUYsCisweDAwLCAweDdDLCAweDAyLCAweEYwLCAweDA5LCAweEMxLCAweDRCLCAweDAwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwOCwgMHgwNSwgMHgwMSwgMHgxRiwgMHgwMCwgMHg0RCwgMHgxMCwgMHhGMCwgMHgwMSwKKzB4QzAsIDB4MDcsIDB4MDQsIDB4MTcsIDB4NDAsIDB4N0MsIDB4MDAsIDB4MzAsIDB4MDEsIDB4QzAsIDB4MDcsIDB4MDAsIDB4MTcsCisweDAwLCAweDVDLCAweDQwLCAweDMwLCAweDgxLCAweEMwLCAweDA3LCAweDAwLCAweDE3LCAweDAwLCAweDVDLCAweDkwLCAweDM0LAorMHgwMSwgMHhDMCwgMHg0MSwgMHgyMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwKKzB4QTAsIDB4REMsIDB4MDEsIDB4NUQsIDB4MDAsIDB4QzQsIDB4MDUsIDB4RDAsIDB4ODcsIDB4NDgsIDB4NUYsIDB4MDQsIDB4NzEsCisweDA3LCAweEY0LCAweDAxLCAweDEwLCAweDA3LCAweDQwLCAweDFGLCAweDAyLCAweDUxLCAweDAwLCAweEMwLCAweDExLCAweDEwLAorMHhCNywgMHg0MCwgMHg1RiwgMHgwMCwgMHg3MCwgMHgwMSwgMHg4NCwgMHgwMSwgMHgxMCwgMHgwNiwgMHg0MCwgMHg1MCwgMHgwMCwKKzB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4QTAsIDB4QjIsIDB4MDgsIDB4Q0QsCisweDAwLCAweDE0LCAweDBBLCAweEQ4LCAweDJDLCAweDQwLCAweEIzLCAweDAwLCAweEQ0LCAweDExLCAweDM0LCAweDA3LCAweDEwLAorMHgxRCwgMHg0MCwgMHhBMywgMHgwMCwgMHhENSwgMHgwMCwgMHgxNCwgMHgwRSwgMHgxNCwgMHgxQywgMHg0MCwgMHg2MywgMHgwMCwKKzB4QzQsIDB4MDUsIDB4MTQsIDB4MkIsIDB4MTQsIDB4MjQsIDB4NDAsIDB4NTEsIDB4MDAsIDB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDgwLCAweDM5LCAweDAwLCAweEVELCAweDAxLCAweDg0LCAweDA4LCAweEQxLAorMHgwRSwgMHg0MCwgMHg3RiwgMHgwMCwgMHg2MSwgMHg4MCwgMHhCMCwgMHgwRiwgMHgxMCwgMHgwRSwgMHg0RCwgMHgyRiwgMHgwMCwKKzB4RjEsIDB4MDAsIDB4ODQsIDB4MDIsIDB4MTAsIDB4MEUsIDB4NDAsIDB4NkIsIDB4MDQsIDB4RjUsIDB4MzAsIDB4ODQsIDB4MDMsCisweDE0LCAweDA3LCAweDQwLCAweDA0LCAweDIwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgxNCwgMHgxOCwgMHg1OSwgMHgwMCwgMHhFRiwgMHgwOSwgMHg5QywgMHgwNSwgMHhGMSwgMHgxQSwgMHhDMCwgMHg0QiwgMHgwMCwKKzB4RTcsIDB4NDEsIDB4RkMsIDB4MDcsIDB4MzQsIDB4MTYsIDB4QzAsIDB4N0IsIDB4MDAsIDB4RTcsIDB4NzcsIDB4OUMsIDB4MDYsCisweDMwLCAweDFFLCAweEMyLCAweDdCLCAweDAwLCAweDY3LCAweEUxLCAweERDLCAweDA2LCAweDMwLCAweDE2LCAweDgwLCAweDQ1LAorMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHhCOCwgMHgxNSwgMHgwMCwKKzB4REYsIDB4MDAsIDB4N0MsIDB4MDAsIDB4RjIsIDB4MDEsIDB4QzQsIDB4MjcsIDB4MDAsIDB4REYsIDB4MDAsIDB4N0MsIDB4MDAsCisweEUwLCAweDA1LCAweEMwLCAweDMzLCAweDAwLCAweERGLCAweDAwLCAweDdDLCAweDAyLCAweEYwLCAweDBELCAweEM0LCAweDE3LAorMHgwMCwgMHg1QiwgMHgwMCwgMHg3QywgMHgwMiwgMHhGMCwgMHgwNSwgMHhDOCwgMHg0MywgMHgyMCwgMHgwNiwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDYsIDB4MjAsIDB4N0YsIDB4MjIsIDB4RkYsIDB4MTEsIDB4RjgsIDB4MDQsCisweEYwLCAweDlGLCAweEMwLCAweDdGLCAweDAwLCAweEFGLCAweDAxLCAweERDLCAweDg2LCAweDMwLCAweDlGLCAweEM4LCAweDZCLAorMHgwMCwgMHhGQiwgMHgwMSwgMHhDQywgMHgwNywgMHhGMCwgMHgxQiwgMHhFNCwgMHg2RiwgMHgwMCwgMHhCMywgMHgwOSwgMHhDNCwKKzB4MDcsIDB4MzAsIDB4MTYsIDB4QzgsIDB4MEEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDE1LCAweDAwLCAweDM5LCAweDAwLCAweEVELCAweDA0LCAweEJDLCAweDQwLCAweEQ4LCAweDhBLCAweDQwLCAweDJCLAorMHgwMSwgMHgyRCwgMHgwMCwgMHg4NCwgMHgyMiwgMHgxMCwgMHg4QSwgMHg0MiwgMHgyQiwgMHgwMCwgMHhFMSwgMHgwOCwgMHg4NCwKKzB4NDIsIDB4RDAsIDB4MDIsIDB4NDAsIDB4MkIsIDB4MDEsIDB4QkIsIDB4MEMsIDB4QzQsIDB4MTMsIDB4QjAsIDB4MEUsIDB4NDAsCisweDU0LCAweDYwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDAyLCAweDE5LAorMHgzMCwgMHhFRCwgMHg0MCwgMHhCNCwgMHgwMSwgMHhEMCwgMHgwQSwgMHg0OCwgMHgwQiwgMHg4MCwgMHhFRCwgMHgwMCwgMHhCNCwKKzB4MDMsIDB4OTQsIDB4ODYsIDB4NDQsIDB4M0YsIDB4MDQsIDB4RTksIDB4MDAsIDB4ODQsIDB4MDMsIDB4RDAsIDB4OEEsIDB4NDEsCisweDJCLCAweDI0LCAweDIxLCAweDQwLCAweEQ1LCAweDAwLCAweDExLCAweDA3LCAweDQwLCAweDIyLCAweDAwLCAweDA0LCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHgyOCwgMHg4MywgMHgwMCwgMHhDRCwgMHgwOSwgMHgzNiwKKzB4ODUsIDB4RDAsIDB4QTAsIDB4NDAsIDB4RTMsIDB4ODQsIDB4Q0QsIDB4MEMsIDB4NzQsIDB4MDgsIDB4OTAsIDB4MDEsIDB4NDAsCisweEQzLCAweDAwLCAweEQxLCAweDUyLCAweDA0LCAweDA2LCAweEQwLCAweDAwLCAweDQ4LCAweEQzLCAweDgwLCAweDA5LCAweDAzLAorMHgxNCwgMHgyOCwgMHg5MCwgMHhBQywgMHg0MCwgMHgxOCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MUQsIDB4QTAsIDB4RTUsIDB4MkMsIDB4RkYsIDB4MEIsIDB4N0MsIDB4MkMsIDB4RjAsIDB4MzAsIDB4QzAsCisweDY3LCAweDAxLCAweERGLCAweDAyLCAweDdDLCAweDE5LCAweEIwLCAweEQ5LCAweEMwLCAweEE3LCAweDAyLCAweEZCLCAweDg3LAorMHg0RiwgMHgwMiwgMHhFMCwgMHgyQywgMHgwMCwgMHgwNywgMHgwMiwgMHhEMywgMHgxMSwgMHg1RCwgMHgwRCwgMHgzMSwgMHg5NSwKKzB4QzAsIDB4NTYsIDB4MjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4MDgsCisweEE3LCAweDAwLCAweERFLCAweDYwLCAweDVDLCAweDAwLCAweEYwLCAweDIxLCAweEMwLCAweDI3LCAweDAwLCAweDFGLCAweDAyLAorMHg0MCwgMHgwMSwgMHg3MCwgMHgyNSwgMHhDMCwgMHgyNywgMHgyMCwgMHhERiwgMHg4MCwgMHg3QywgMHhDQSwgMHhGMCwgMHgwOSwKKzB4QzksIDB4MDcsIDB4MDAsIDB4REYsIDB4NTIsIDB4NjgsIDB4NDEsIDB4RjAsIDB4MDUsIDB4QzAsIDB4QTcsIDB4MDAsIDB4MEMsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgxLCAweDA5LCAweDJGLCAweDE0LCAweEZGLCAweDAwLAorMHhGQywgMHgwMSwgMHhGOCwgMHgwMywgMHhDMSwgMHgwRSwgMHgwMCwgMHhGRiwgMHgwMSwgMHhDQywgMHg0MywgMHgzMCwgMHg4QiwKKzB4QzAsIDB4NkMsIDB4MjAsIDB4RkYsIDB4MDAsIDB4Q0QsIDB4MDYsIDB4RjAsIDB4OEYsIDB4QzgsIDB4M0MsIDB4MDAsIDB4NzcsCisweDA1LCAweEZDLCAweDA3LCAweDM0LCAweDAzLCAweEMwLCAweDE1LCAweDIwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHg4OSwgMHgyMCwgMHg2NiwgMHgwMSwgMHhERCwgMHgwMCwgMHg3NCwgMHgwOCwgMHhEOCwgMHgzMSwKKzB4NDAsIDB4NjQsIDB4MDAsIDB4OEQsIDB4MDUsIDB4NDQsIDB4MDgsIDB4NTAsIDB4MDUsIDB4NDAsIDB4MzQsIDB4MDAsIDB4REUsCisweDAwLCAweDQ0LCAweDYyLCAweEQwLCAweDE5LCAweDQ0LCAweDkwLCAweDAwLCAweDkxLCAweDA0LCAweDc0LCAweDRCLCAweDMwLAorMHgwMCwgMHg0MCwgMHgxNCwgMHgwMiwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwKKzB4QTAsIDB4NDYsIDB4MDAsIDB4REQsIDB4ODAsIDB4NzQsIDB4MDAsIDB4RDAsIDB4MTksIDB4MDAsIDB4NDYsIDB4MDAsIDB4MUQsCisweDA4LCAweDQ0LCAweDA4LCAweDEwLCAweDA5LCAweDQxLCAweDI1LCAweDAyLCAweEQ5LCAweDAwLCAweDY0LCAweDAzLCAweEQwLAorMHgwOSwgMHg0MCwgMHg4NCwgMHgzMCwgMHg5NSwgMHgwMCwgMHgzMCwgMHgyMCwgMHgwMiwgMHg0NSwgMHg0MCwgMHgwNSwgMHgwMCwKKzB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MjAsIDB4MjAsIDB4MDAsIDB4Q0QsCisweDAwLCAweDM0LCAweDAwLCAweEQwLCAweDA4LCAweDQ0LCAweDQwLCAweDAwLCAweDBELCAweDAwLCAweDA1LCAweDAwLCAweDUwLAorMHgwMCwgMHg1MCwgMHgyMCwgMHgxMCwgMHhDNSwgMHgwMCwgMHgwNCwgMHgwMSwgMHhEMCwgMHgwMSwgMHgxMCwgMHgwNCwgMHg4OCwKKzB4NDEsIDB4MDAsIDB4MzQsIDB4MDAsIDB4MTEsIDB4MEMsIDB4NDAsIDB4NDAsIDB4QTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDE5LCAweDA2LCAweDAwLCAweEZGLCAweDAwLCAweDdDLCAweDAxLCAweEQwLAorMHgwOSwgMHhDMCwgMHgwNiwgMHgwMCwgMHg1RiwgMHgwMCwgMHgwQywgMHgwMywgMHgzMCwgMHgwOSwgMHhDMCwgMHgyNCwgMHgxMCwKKzB4RUQsIDB4MDAsIDB4NEMsIDB4MDMsIDB4RjAsIDB4MDksIDB4QzAsIDB4MjAsIDB4MjAsIDB4MTcsIDB4MDAsIDB4N0MsIDB4MDAsCisweDM0LCAweDAxLCAweEMwLCAweDA1LCAweEMwLCAweDBBLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwNSwgMHhCOCwgMHgyRCwgMHgwMCwgMHhGRiwgMHgwMCwgMHhGQywgMHgwMSwgMHhGMCwgMHgwMywgMHhDMCwgMHgwRiwgMHgwMCwKKzB4M0YsIDB4MDAsIDB4RkMsIDB4MDAsIDB4RjAsIDB4MDMsIDB4QzQsIDB4MUYsIDB4MDAsIDB4RkYsIDB4MDAsIDB4RkMsIDB4MDEsCisweEYxLCAweDAzLCAweEUwLCAweDFGLCAweDAwLCAweDNGLCAweDAwLCAweEZDLCAweDAwLCAweDcwLCAweDBCLCAweEQwLCAweDE3LAorMHgyNCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHhBOCwgMHgyRiwgMHgwNCwKKzB4RkYsIDB4MDEsIDB4RUMsIDB4NTIsIDB4RDAsIDB4MUYsIDB4QzAsIDB4M0UsIDB4MjEsIDB4MkYsIDB4MDEsIDB4RkMsIDB4MTMsCisweDMwLCAweDBELCAweEMwLCAweDU3LCAweDAwLCAweDhCLCAweDIxLCAweENFLCAweDIzLCAweEIwLCAweDZGLCAweEMwLCAweEJDLAorMHgwOSwgMHgzRiwgMHgwNCwgMHhDQywgMHg5MywgMHgzMywgMHgwMywgMHhDMiwgMHgwRiwgMHgwMCwgMHgwRSwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4MDgsIDB4ODcsIDB4MTAsIDB4REQsIDB4MDAsIDB4NzQsIDB4MEUsCisweEQ4LCAweDFELCAweDQwLCAweDdGLCAweDBBLCAweDlELCAweDAxLCAweEY0LCAweDJGLCAweDEwLCAweDJGLCAweDQ0LCAweDU3LAorMHgxMCwgMHg5MSwgMHgwMCwgMHg0NCwgMHgzMywgMHgxMCwgMHgyRiwgMHg0MCwgMHhCQywgMHgwMSwgMHg1RCwgMHgwOSwgMHhDNCwKKzB4REIsIDB4MTAsIDB4MDEsIDB4NDAsIDB4MEYsIDB4MDAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDEzLCAweEEwLCAweDAzLCAweDA1LCAweENELCAweDU0LCAweDM0LCAweDAwLCAweEQwLCAweDBDLCAweDQwLCAweDMzLAorMHgwMCwgMHhDRCwgMHgwMSwgMHgzNCwgMHgwMywgMHgxOCwgMHgyQywgMHg0MCwgMHgxNCwgMHgwMCwgMHhERCwgMHgwMCwgMHgxNSwKKzB4MTMsIDB4RDAsIDB4NkMsIDB4NDAsIDB4QjEsIDB4MDgsIDB4OEQsIDB4MDAsIDB4NTQsIDB4MjMsIDB4MTAsIDB4MDAsIDB4NDAsCisweDRELCAweDgwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweEE4LCAweDQ1LAorMHgwMCwgMHhERCwgMHgwNCwgMHg3NCwgMHg4NCwgMHhEMSwgMHgwRCwgMHg0MCwgMHgzNywgMHgwMCwgMHhEQywgMHgwMCwgMHg3NCwKKzB4MDMsIDB4MTAsIDB4MEQsIDB4NDAsIDB4MTcsIDB4MDAsIDB4OTUsIDB4MDAsIDB4NjQsIDB4MDMsIDB4NTAsIDB4MEQsIDB4NEEsCisweDM1LCAweDAwLCAweERELCAweDAwLCAweDU0LCAweDAzLCAweDEwLCAweDExLCAweDQwLCAweDBGLCAweDIwLCAweDAyLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhBOCwgMHg2NywgMHgwMCwgMHhERiwgMHgyMCwgMHg2QywKKzB4MTQsIDB4RDAsIDB4MEQsIDB4QzAsIDB4MzYsIDB4MDAsIDB4NUYsIDB4RTgsIDB4N0MsIDB4MDMsIDB4MzEsIDB4MEQsIDB4QzAsCisweDQyLCAweDAwLCAweDhCLCAweDQwLCAweDRDLCAweDAzLCAweEYwLCAweDBELCAweDQwLCAweDM1LCAweDEwLCAweDRFLCAweDUyLAorMHgxQywgMHgwMywgMHgxNCwgMHgxOSwgMHhDMCwgMHgyMywgMHgwMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MEYsIDB4ODAsIDB4MDUsIDB4MDAsIDB4RkYsIDB4NDEsIDB4RkMsIDB4MDIsIDB4RjIsIDB4MkYsIDB4QzEsCisweDNGLCAweDBDLCAweDdGLCAweDAxLCAweEIwLCAweDAzLCAweEYwLCAweDBGLCAweEMwLCAweDRGLCAweDAyLCAweEI4LCAweDQwLAorMHhEOCwgMHgwMywgMHhCMCwgMHgwRiwgMHhDMCwgMHgzRSwgMHgwMCwgMHhGRiwgMHgwMywgMHhFQywgMHgyMywgMHhGNCwgMHgwMywKKzB4NDAsIDB4MUYsIDB4MjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MEEsIDB4MDgsCisweDY1LCAweDAxLCAweEQzLCAweDAwLCAweDdDLCAweDBDLCAweEYwLCAweDBELCAweEM4LCAweDM3LCAweDAwLCAweDVCLCAweDAwLAorMHg0QywgMHg0MywgMHhGMCwgMHg4RCwgMHhDMCwgMHg5NywgMHgwMCwgMHhERiwgMHgwOCwgMHg1QywgMHgwMywgMHhGMSwgMHgwRCwKKzB4QzAsIDB4MzcsIDB4MDAsIDB4NUYsIDB4MDAsIDB4NUMsIDB4NDMsIDB4RjAsIDB4ODksIDB4QzAsIDB4MkIsIDB4MjAsIDB4MDQsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEzLCAweEEwLCAweDA0LCAweDAwLCAweEQxLCAweDBCLAorMHg3NCwgMHgwMCwgMHhEMCwgMHgzRCwgMHg0MCwgMHhCRiwgMHgyNCwgMHg1MSwgMHgwQSwgMHhDNCwgMHgxQiwgMHhEMCwgMHhCRiwKKzB4NDAsIDB4MTcsIDB4MDYsIDB4OUMsIDB4MDAsIDB4QzQsIDB4MDMsIDB4RDAsIDB4MEYsIDB4MDQsIDB4M0MsIDB4MTAsIDB4REMsCisweDAxLCAweDQwLCAweDBCLCAweDEwLCAweEI5LCAweDQwLCAweDRGLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHgyMCwgMHhBMCwgMHgwMCwgMHhDMSwgMHgwMSwgMHgyNCwgMHgwMiwgMHhEMCwgMHgxQywKKzB4NDAsIDB4MzMsIDB4MDAsIDB4MDksIDB4MEIsIDB4MzQsIDB4MDMsIDB4RDAsIDB4MUMsIDB4NjAsIDB4ODMsIDB4MDgsIDB4ODgsCisweDAxLCAweDU0LCAweDAzLCAweEQwLCAweDBELCAweDQwLCAweDMwLCAweDAwLCAweDRELCAweDEzLCAweDEwLCAweDJGLCAweDUwLAorMHgwOCwgMHg0MCwgMHgwRiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwRiwKKzB4MDAsIDB4NzgsIDB4NDAsIDB4RTEsIDB4MDEsIDB4QjQsIDB4MDcsIDB4RDAsIDB4MUUsIDB4NDksIDB4N0IsIDB4MDAsIDB4QjUsCisweDA5LCAweEE0LCAweDg3LCAweEQwLCAweDVFLCAweDQwLCAweDRCLCAweDA5LCAweEFELCAweDI1LCAweDgwLCAweDA3LCAweEQwLAorMHgxQywgMHg0MCwgMHg3OCwgMHgwMCwgMHhDRCwgMHgyMSwgMHhDMCwgMHgyNywgMHgwMCwgMHgxMiwgMHg0MCwgMHgzRiwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4MTAsIDB4MTAsIDB4MDIsIDB4QzMsCisweDE4LCAweDNDLCAweDIzLCAweEY4LCAweDBDLCAweEMwLCAweDMzLCAweDAxLCAweDhCLCAweDA4LCAweDJDLCAweDAzLCAweEYwLAorMHg1QywgMHg4MCwgMHg0MywgMHgwMSwgMHhDRiwgMHgwNSwgMHgxQywgMHgwMywgMHhGMCwgMHg0QywgMHhDMCwgMHgzMSwgMHgwMCwKKzB4NEYsIDB4MTAsIDB4NUMsIDB4MzcsIDB4NzAsIDB4MEMsIDB4QzAsIDB4NEIsIDB4NjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweDM4LCAweDNELCAweDAwLCAweEZGLCAweDA4LCAweEZDLCAweDIzLCAweEYwLAorMHgwRiwgMHhDOCwgMHgzQiwgMHgwMCwgMHhGQiwgMHg2OCwgMHhEQywgMHgyMywgMHhGMCwgMHgyRiwgMHhDMSwgMHgwRiwgMHgyMCwKKzB4OUYsIDB4MDAsIDB4N0MsIDB4MDMsIDB4RjAsIDB4MEYsIDB4QzAsIDB4M0MsIDB4MDAsIDB4RkYsIDB4MDgsIDB4N0MsIDB4QUIsCisweDUyLCAweDBGLCAweEMwLCAweDBCLCAweDYwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgxMCwgMHhBOCwgMHgzNywgMHgwMCwgMHhERiwgMHgwMCwgMHg3OCwgMHgwMSwgMHhGMCwgMHgwRCwgMHhDMCwgMHgzNiwgMHgwNCwKKzB4MUYsIDB4MDAsIDB4NEMsIDB4NjMsIDB4RjAsIDB4NEQsIDB4QzgsIDB4MDYsIDB4MDgsIDB4OTMsIDB4MDAsIDB4N0MsIDB4MDMsCisweEYxLCAweEZELCAweEMwLCAweEI2LCAweDAxLCAweDVGLCAweDAxLCAweDZDLCAweDBBLCAweDMwLCAweDBELCAweEMwLCAweDQwLAorMHgwMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMywgMHg5MCwgMHgzOSwgMHgwMCwKKzB4RUQsIDB4ODAsIDB4QjQsIDB4MDMsIDB4QzEsIDB4MEUsIDB4QzAsIDB4MzksIDB4MDEsIDB4RUQsIDB4MDAsIDB4ODQsIDB4MDMsCisweEQxLCAweDRFLCAweDQyLCAweDBBLCAweDAwLCAweEE1LCAweDAwLCAweEI0LCAweDEzLCAweEQxLCAweDBFLCAweDQxLCAweDM4LAorMHgwRCwgMHhFRCwgMHgwMCwgMHg4NCwgMHgwMiwgMHgxMiwgMHgwNiwgMHhDMCwgMHg0RSwgMHgwMCwgMHgwNiwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4NzksIDB4MjgsIDB4RUQsIDB4MjEsIDB4QjAsIDB4MDcsCisweEQ5LCAweDFFLCAweDQwLCAweDdCLCAweDAzLCAweEFELCAweDAxLCAweEE0LCAweDE3LCAweEQwLCAweDVFLCAweDQwLCAweDRBLAorMHgwOCwgMHhFMSwgMHgyMSwgMHhCNCwgMHgyNywgMHhEMCwgMHgxQywgMHg0MCwgMHg3QSwgMHgwMiwgMHg3RCwgMHgwMSwgMHhBNCwKKzB4MDYsIDB4MTAsIDB4MUMsIDB4NDAsIDB4MTAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDE2LCAweDAwLCAweDM3LCAweDA0LCAweDlELCAweDQxLCAweDM0LCAweDQ3LCAweEQwLCAweDA4LCAweDQwLCAweDMxLAorMHgwMCwgMHhDRCwgMHgwOCwgMHgyNCwgMHgwMywgMHhEMCwgMHgwQywgMHg0MCwgMHg2MiwgMHg4MCwgMHg4NSwgMHgwMCwgMHgzNCwKKzB4MDMsIDB4RDAsIDB4MEMsIDB4NDAsIDB4MzAsIDB4MDAsIDB4Q0QsIDB4MDMsIDB4MDQsIDB4MDIsIDB4MTAsIDB4MkQsIDB4NDAsCisweDVBLCAweDIwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE3LCAweDI4LCAweDlGLAorMHgwMCwgMHg1RCwgMHgwMSwgMHhGRSwgMHgxRCwgMHhGMCwgMHgxNSwgMHhFMSwgMHgxNiwgMHgwMCwgMHg2RiwgMHgwMywgMHg2RiwKKzB4MDEsIDB4RjAsIDB4MDUsIDB4QzAsIDB4NUEsIDB4MDQsIDB4NTMsIDB4MDAsIDB4N0MsIDB4MDEsIDB4RjAsIDB4MDUsIDB4QzAsCisweDE2LCAweDAwLCAweDdGLCAweDEwLCAweDZDLCAweDQ1LCAweDMwLCAweDQ3LCAweEMwLCAweDVDLCAweDAwLCAweDA0LCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHgwMiwgMHgwNSwgMHgwMCwgMHgxRiwgMHgwOCwgMHg3RSwKKzB4MDAsIDB4RjAsIDB4MDEsIDB4QTAsIDB4MDcsIDB4MDAsIDB4MUYsIDB4MDQsIDB4NUUsIDB4MDAsIDB4RjAsIDB4MjAsIDB4MDgsCisweDA3LCAweDAxLCAweDFGLCAweDgwLCAweDdDLCAweDAwLCAweEQwLCAweDAxLCAweEMwLCAweDAzLCAweDIwLCAweDFELCAweDI0LAorMHg3QywgMHgwMCwgMHhGMCwgMHgyMSwgMHhEOCwgMHg0QiwgMHgyMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4NjUsIDB4MDAsIDB4OTMsIDB4QzEsIDB4MkMsIDB4ODIsIDB4RTEsIDB4MTksIDB4QzAsCisweDI1LCAweDA5LCAweDlGLCAweDAwLCAweDRDLCAweDkyLCAweEQwLCAweDE5LCAweEMwLCAweDY0LCAweDEwLCAweDkzLCAweDA4LAorMHgzQywgMHgwMiwgMHg0MCwgMHgwOSwgMHhDNCwgMHgyNywgMHgwMCwgMHg5MywgMHg4MCwgMHg3QywgMHgwMiwgMHg3NSwgMHgwOSwKKzB4QzEsIDB4NDAsIDB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MjAsCisweDY2LCAweDAwLCAweDkxLCAweDgxLCAweDRDLCAweDAyLCAweDEwLCAweDk4LCAweDAwLCAweEE1LCAweDAwLCAweDlELCAweDE4LAorMHg0NSwgMHgwQSwgMHhEMCwgMHhBOSwgMHg1MCwgMHgyNCwgMHgwMywgMHg5NSwgMHgwMCwgMHg3NCwgMHgwMiwgMHgxMywgMHgwOSwKKzB4NDQsIDB4MjcsIDB4MDAsIDB4OTEsIDB4MUIsIDB4MzQsIDB4MDYsIDB4MTIsIDB4NjksIDB4NTAsIDB4MDQsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweEEwLCAweDM0LCAweDgyLCAweDk5LCAweDA4LAorMHg2NCwgMHgwNiwgMHgxMCwgMHgwOSwgMHgwMCwgMHhBNCwgMHgwMCwgMHg5OSwgMHgwMCwgMHg1NCwgMHg0MiwgMHhEMiwgMHgwOSwKKzB4NDUsIDB4MzQsIDB4MDAsIDB4OTEsIDB4MDAsIDB4NzQsIDB4MDIsIDB4NTAsIDB4MDksIDB4NDAsIDB4MjcsIDB4NDAsIDB4OTEsCisweDAwLCAweDc0LCAweDEyLCAweDUxLCAweDBELCAweDQwLCAweDYwLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgyMiwgMHgzMCwgMHgxNSwgMHhDMSwgMHgwMCwgMHgwNCwgMHg1MiwgMHgxMiwgMHgxOSwKKzB4NDIsIDB4MjEsIDB4ODAsIDB4OEQsIDB4NDAsIDB4MDYsIDB4ODIsIDB4RDAsIDB4MDgsIDB4NDAsIDB4MjQsIDB4MDAsIDB4ODUsCisweDAwLCAweDM0LCAweDIyLCAweDUwLCAweDg4LCAweDQwLCAweDIzLCAweDAyLCAweDgxLCAweDAwLCAweDcwLCAweEQyLCAweDEwLAorMHg0OCwgMHg0MSwgMHg0MCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxRCwKKzB4MzgsIDB4MDcsIDB4MDEsIDB4MUIsIDB4MDAsIDB4NkMsIDB4MTAsIDB4NzAsIDB4MDEsIDB4QzAsIDB4MDUsIDB4MDUsIDB4MUIsCisweDQwLCAweDQ4LCAweEQwLCAweEYwLCAweEUxLCAweEMxLCAweDA0LCAweDAwLCAweDUzLCAweDBBLCAweDdDLCAweDU4LCAweDcxLAorMHg2MSwgMHhDMSwgMHg4NywgMHgwNSwgMHgxMywgMHgxNCwgMHgzOCwgMHgxMSwgMHg3MCwgMHg0MSwgMHhDMCwgMHg3NCwgMHhFMCwKKzB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MUQsIDB4QjAsIDB4MkQsIDB4NDUsIDB4QkYsCisweDE0LCAweERDLCAweDAyLCAweEI0LCAweDBCLCAweEMwLCAweDI3LCAweDAwLCAweEFDLCAweDAwLCAweDdDLCAweDAyLCAweEYwLAorMHgxOSwgMHhDMCwgMHgyQiwgMHgwOCwgMHhCRiwgMHgwMSwgMHg3QywgMHgxMiwgMHhCMSwgMHg0OSwgMHhDMCwgMHgyNywgMHgxMSwKKzB4QUYsIDB4MDAsIDB4RkMsIDB4NTIsIDB4RjAsIDB4NEIsIDB4QzEsIDB4NzcsIDB4NjAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFELCAweEEwLCAweEJGLCAweDAwLCAweEIzLCAweDAwLCAweEZDLCAweDUyLCAweEYwLAorMHgwQiwgMHhDMCwgMHgyRCwgMHgwNSwgMHhCMywgMHgwMCwgMHhDQywgMHgwMiwgMHhGMCwgMHgwQiwgMHhDMCwgMHgyQywgMHgwMCwKKzB4QkYsIDB4ODAsIDB4NkMsIDB4MDIsIDB4MTAsIDB4MDksIDB4QzAsIDB4MjQsIDB4MDAsIDB4QkYsIDB4MDAsIDB4Q0MsIDB4MDIsCisweDMyLCAweDBCLCAweEQwLCAweDc0LCAweDAwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgxOCwgMHgwMCwgMHg4NywgMHgwMCwgMHgxQiwgMHhBNCwgMHg3NCwgMHgwOCwgMHhEMCwgMHgwMSwgMHg0MCwgMHg4NCwgMHg0OCwKKzB4MTEsIDB4MjAsIDB4NDQsIDB4MDAsIDB4RDIsIDB4QTEsIDB4NDAsIDB4MDUsIDB4MDAsIDB4MUQsIDB4MDAsIDB4NDAsIDB4OTAsCisweDEwLCAweDQxLCAweDQwLCAweDA0LCAweDAxLCAweDFELCAweDAwLCAweDQ0LCAweDAwLCAweDEwLCAweDAxLCAweDQwLCAweDYwLAorMHgwMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHhBMCwgMHhBMSwgMHgyMSwKKzB4ODEsIDB4MTAsIDB4MzAsIDB4MDIsIDB4RDAsIDB4MDgsIDB4NDAsIDB4MjEsIDB4MDAsIDB4RDUsIDB4MDAsIDB4MDQsIDB4MEIsCisweEQwLCAweDBELCAweDQwLCAweDIwLCAweDAwLCAweDhELCAweDgwLCAweDMwLCAweDRBLCAweDExLCAweDI4LCAweDQxLCAweEEyLAorMHgwNCwgMHg4RCwgMHgwMCwgMHgwNSwgMHg4MiwgMHgxNCwgMHgwOCwgMHg0MCwgMHg0OSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MjgsIDB4MjUsIDB4MDAsIDB4OTksIDB4MDQsIDB4NzQsIDB4MDIsCisweEQwLCAweDQ5LCAweDQwLCAweDI2LCAweDA4LCAweDk1LCAweDAwLCAweDQ0LCAweDAyLCAweEMwLCAweDA5LCAweDQwLCAweDI1LAorMHgwRCwgMHg5RCwgMHg4MCwgMHgxNCwgMHgwMiwgMHgxMCwgMHgwOCwgMHg0NiwgMHgyNiwgMHgwMCwgMHg5RCwgMHgxMCwgMHg0NCwKKzB4MDIsIDB4MTAsIDB4MEQsIDB4NDAsIDB4NjAsIDB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDA1LCAweDIwLCAweEU1LCAweDA2LCAweDkzLCAweDQwLCAweDc4LCAweDFBLCAweEQxLCAweDA5LCAweEMwLCAweDI1LAorMHgwMCwgMHg5NywgMHgwRiwgMHg0NSwgMHgwMiwgMHhGMCwgMHgwOSwgMHhDMCwgMHhBNCwgMHgwMCwgMHg4RiwgMHg4MSwgMHg3RSwKKzB4MDIsIDB4MzQsIDB4MDksIDB4RDAsIDB4MjYsIDB4MDAsIDB4OUYsIDB4MDAsIDB4NEMsIDB4MDIsIDB4MzAsIDB4NDksIDB4QzAsCisweDE1LCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE2LCAweDA4LCAweDI0LAorMHgwMCwgMHg5RiwgMHhDMCwgMHg3QywgMHgxMiwgMHhGMCwgMHgwOSwgMHhDOCwgMHgyNSwgMHgwMCwgMHg5QiwgMHgwMCwgMHg3QywKKzB4MDIsIDB4RjAsIDB4MDksIDB4QzAsIDB4NjcsIDB4MDAsIDB4OUYsIDB4MDUsIDB4NkMsIDB4MDIsIDB4RjAsIDB4MDksIDB4QzAsCisweDI1LCAweDAwLCAweDlGLCAweDQwLCAweDdDLCAweDAyLCAweEYwLCAweDQ5LCAweEMxLCAweDVCLCAweDIwLCAweDA0LCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwOCwgMHgwNSwgMHgwMCwgMHgxRiwgMHgxMCwgMHg3OCwKKzB4MDgsIDB4RjAsIDB4MDEsIDB4QzEsIDB4MDEsIDB4MDQsIDB4MUYsIDB4MDQsIDB4N0MsIDB4OTAsIDB4QjAsIDB4MDEsIDB4QzAsCisweDg0LCAweDAwLCAweDFGLCAweDEwLCAweDRDLCAweDAwLCAweEYxLCAweDAxLCAweEMwLCAweDA3LCAweDEwLCAweDA3LCAweDEwLAorMHgzQywgMHgwNCwgMHgzMCwgMHgyMSwgMHhDMCwgMHg1MCwgMHgyMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MTAsIDB4MjAsIDB4REMsIDB4MDEsIDB4N0QsIDB4MDcsIDB4NzQsIDB4MDEsIDB4MTAsIDB4MjYsIDB4NDAsCisweDFGLCAweDE5LCAweDZELCAweDAwLCAweEY0LCAweDA5LCAweDEwLCAweDA3LCAweDQwLCAweERDLCAweDAyLCAweDdELCAweDAzLAorMHg0NCwgMHgwMSwgMHhEMCwgMHgwNSwgMHg0MCwgMHgxNywgMHgwMCwgMHg3MSwgMHg0NSwgMHhGNCwgMHg0MSwgMHgxMSwgMHgyNywKKzB4NDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4QTAsCisweEY2LCAweDAxLCAweENELCAweDAzLCAweDM0LCAweDIyLCAweDU4LCAweDJDLCAweDQ4LCAweDczLCAweDAwLCAweENDLCAweDAwLAorMHgzNCwgMHgwMywgMHhEMCwgMHgwRCwgMHg0MCwgMHgzMCwgMHgwMCwgMHhDRCwgMHgwQSwgMHgzMiwgMHgwMywgMHhEMCwgMHgwQywKKzB4NDAsIDB4MzMsIDB4ODAsIDB4QzUsIDB4MDAsIDB4MzQsIDB4MDQsIDB4OTAsIDB4QUQsIDB4NDAsIDB4NDAsIDB4MDAsIDB4MEEsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDgwLCAweDM4LCAweDAwLCAweDZELCAweDAwLAorMHhCNCwgMHgwNywgMHg1QSwgMHgyQSwgMHg0MCwgMHgzQiwgMHgwMCwgMHhFRCwgMHgwMCwgMHhCMCwgMHgwNywgMHg1MiwgMHgwQSwKKzB4NDAsIDB4OTgsIDB4MDAsIDB4RUQsIDB4MDAsIDB4ODQsIDB4MTMsIDB4RDAsIDB4NEUsIDB4NDAsIDB4N0IsIDB4ODEsIDB4RTEsCisweDAwLCAweEI0LCAweDAyLCAweDkwLCAweDA0LCAweDQ0LCAweDEwLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgxOCwgMHg3OSwgMHgwOCwgMHhFRiwgMHgwMSwgMHhCQywgMHg4NywgMHg3MCwgMHgxRSwKKzB4QzAsIDB4NUIsIDB4MDAsIDB4RUUsIDB4MDEsIDB4QkMsIDB4MDYsIDB4RjAsIDB4MUYsIDB4QzAsIDB4NzgsIDB4MDAsIDB4QkYsCisweDAxLCAweDlDLCAweDA3LCAweEYwLCAweEJFLCAweEM0LCAweDdGLCAweDIxLCAweEU3LCAweDAxLCAweEZDLCAweDA0LCAweEIwLAorMHgxRSwgMHhEMCwgMHg1MCwgMHg2MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwKKzB4QjIsIDB4MzUsIDB4MDAsIDB4NUYsIDB4NjAsIDB4M0MsIDB4MDMsIDB4MzgsIDB4MDEsIDB4QzgsIDB4MDcsIDB4MDAsIDB4REYsCisweDAwLCAweDNDLCAweDAwLCAweEIwLCAweDA1LCAweEMwLCAweDM3LCAweDAwLCAweDlGLCAweDIwLCAweDdDLCAweDJCLCAweEYwLAorMHg2RCwgMHhDOCwgMHhCNywgMHgyMCwgMHg5RCwgMHgwMCwgMHg3QywgMHg4MiwgMHg3MSwgMHgwNSwgMHhDMCwgMHg0MywgMHg2MCwKKzB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDYsIDB4MjgsIDB4N0QsIDB4MDIsIDB4RkYsCisweDgxLCAweENDLCAweDE3LCAweDcxLCAweDE3LCAweEMwLCAweDZGLCAweDAyLCAweEZGLCAweDgxLCAweEZDLCAweDg1LCAweEYwLAorMHg5RiwgMHg0MCwgMHg3OCwgMHgwMiwgMHhCMywgMHgyOSwgMHhGRSwgMHgyRiwgMHhCMCwgMHgxRiwgMHhFMCwgMHhGRiwgMHgwNCwKKzB4NzMsIDB4MDksIDB4RkMsIDB4MjcsIDB4RjEsIDB4NUYsIDB4QzAsIDB4MUIsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE1LCAweDAwLCAweDE5LCAweDI2LCAweDZELCAweDA4LCAweEFDLCAweDgzLCAweEQwLAorMHgyMiwgMHg0MCwgMHg4QiwgMHgwMCwgMHgyRCwgMHgwMCwgMHhCNCwgMHgwOCwgMHhEMCwgMHgxQSwgMHg0MCwgMHg5OCwgMHgwMCwKKzB4QTEsIDB4MDEsIDB4QjQsIDB4MDMsIDB4RDAsIDB4MEUsIDB4QzAsIDB4MzksIDB4MDEsIDB4RUIsIDB4MDAsIDB4MzQsIDB4MDcsCisweEQwLCAweDBBLCAweDQwLCAweDU3LCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHg0OCwgMHgwOCwgMHgzOSwgMHgxOCwgMHhGRCwgMHgwMCwgMHhBNCwgMHgxMywgMHhEMCwgMHgwMiwgMHg0MCwgMHgwQiwgMHgwMCwKKzB4RUQsIDB4MTAsIDB4QjQsIDB4MjAsIDB4RDAsIDB4MEUsIDB4NDAsIDB4MkIsIDB4NDAsIDB4MjEsIDB4MDAsIDB4QjQsIDB4ODMsCisweDkxLCAweDBFLCAweDQwLCAweDM5LCAweDEwLCAweDYxLCAweDEwLCAweEI0LCAweDAyLCAweEQwLCAweDRFLCAweDQwLCAweDIzLAorMHgwMiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHgyOCwgMHgyMSwgMHgwMCwKKzB4MUQsIDB4MDEsIDB4MjYsIDB4MDcsIDB4RDAsIDB4MDAsIDB4NDAsIDB4MDMsIDB4MDAsIDB4MEQsIDB4MDMsIDB4MzQsIDB4ODAsCisweEQwLCAweDAwLCAweDQwLCAweEEzLCAweDAwLCAweDAxLCAweDAxLCAweDM0LCAweDAzLCAweEQwLCAweDBDLCAweDQ4LCAweDMxLAorMHg4MCwgMHg4NSwgMHgwMCwgMHgzNCwgMHg4MSwgMHhEMCwgMHgyOSwgMHg0MCwgMHgwQiwgMHgyMCwgMHgwNCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTUsIDB4ODgsIDB4MDQsIDB4MDAsIDB4OUYsIDB4MDEsIDB4NjQsIDB4MEIsCisweDcxLCAweDA5LCAweEMwLCAweDI3LCAweDkwLCAweDFGLCAweDAzLCAweDdDLCAweDAyLCAweEYwLCAweDAxLCAweEMwLCAweDI3LAorMHgyMCwgMHhEMywgMHgxMSwgMHhGQywgMHgwMywgMHhCMCwgMHgwRiwgMHhDMCwgMHgzRCwgMHgwMCwgMHg4MSwgMHgwMSwgMHg3QywKKzB4MDEsIDB4RDAsIDB4MjksIDB4QzAsIDB4NTcsIDB4MDAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDBELCAweDAwLCAweDg3LCAweDAxLCAweDlGLCAweDA4LCAweDdDLCAweDIzLCAweEYwLCAweDE5LCAweEMwLCAweDI3LAorMHgwMCwgMHgxRiwgMHgzMiwgMHgzRSwgMHgwQSwgMHhGMCwgMHgwMSwgMHg0MCwgMHgxNCwgMHhBMSwgMHg5RiwgMHgwMCwgMHg3MCwKKzB4MDMsIDB4RDAsIDB4MEQsIDB4QzgsIDB4MzUsIDB4NDAsIDB4OUIsIDB4MTAsIDB4NzQsIDB4MDEsIDB4RTAsIDB4MjEsIDB4QzAsCisweDM3LCAweDIwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDg5LCAweDA4LCAweDBCLAorMHgwMCwgMHhCQiwgMHgwMCwgMHg4QywgMHg0MywgMHhCMCwgMHgwQiwgMHhDNCwgMHgyQiwgMHgwMCwgMHhGMywgMHgwMCwgMHhGQywKKzB4MDIsIDB4MzIsIDB4MDEsIDB4QzQsIDB4MkYsIDB4MDEsIDB4QkYsIDB4NDAsIDB4RUMsIDB4MDMsIDB4RjAsIDB4MEYsIDB4QzQsCisweDNCLCAweDAwLCAweDM3LCAweDA1LCAweDk0LCAweDgxLCAweDMzLCAweDAzLCAweDgxLCAweDA0LCAweDI4LCAweDBDLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MSwgMHgyMCwgMHhDNiwgMHgyMSwgMHg5MSwgMHgwNywgMHg0NCwKKzB4ODMsIDB4QjAsIDB4MzEsIDB4NDAsIDB4RTcsIDB4MDAsIDB4RDEsIDB4MDYsIDB4NzQsIDB4MDQsIDB4MTAsIDB4MzEsIDB4NDgsCisweDc3LCAweDEwLCAweDlDLCAweDAxLCAweDc0LCAweDAzLCAweDcxLCAweDBELCAweDQwLCAweDM3LCAweDAwLCAweDExLCAweDMyLAorMHg0NCwgMHgwQiwgMHgxMCwgMHgzMSwgMHg0MCwgMHg4NSwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDEsIDB4QTAsIDB4NjQsIDB4MDAsIDB4MTksIDB4MDEsIDB4NTQsIDB4MDcsIDB4OTAsIDB4MTksIDB4MDAsCisweDY2LCAweDAwLCAweDExLCAweDAxLCAweDc0LCAweDA2LCAweDEwLCAweDEzLCAweDQxLCAweDA3LCAweDAwLCAweEI5LCAweDAxLAorMHg3NCwgMHgwMywgMHhEMCwgMHgwRCwgMHg0MCwgMHgzNywgMHgwMCwgMHg1NSwgMHgwMCwgMHg1NCwgMHg0NywgMHg1MCwgMHgxOSwKKzB4NDAsIDB4MDUsIDB4MDgsIDB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MjAsCisweDAwLCAweDAwLCAweDAxLCAweDIwLCAweDE0LCAweDAzLCAweDkwLCAweDA4LCAweDYyLCAweDAzLCAweDAwLCAweDAwLCAweDAwLAorMHgzNCwgMHgwMiwgMHgxNCwgMHg0MCwgMHg0MCwgMHgxMywgMHgwMCwgMHg4RCwgMHgwNCwgMHgzNCwgMHgwMywgMHg1MCwgMHgwQywKKzB4NDAsIDB4MzMsIDB4MDgsIDB4QzEsIDB4MDAsIDB4MTQsIDB4MjAsIDB4MTAsIDB4MDgsIDB4NDIsIDB4NDEsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweEEwLCAweDI2LCAweDA4LCAweDlCLCAweDAwLAorMHg1RSwgMHgwMywgMHhCMSwgMHgwOSwgMHhDMCwgMHgyNywgMHg0MCwgMHhEMSwgMHgwMCwgMHg3QywgMHgwMiwgMHgzMCwgMHg0MSwKKzB4QzAsIDB4MDcsIDB4MTAsIDB4MUYsIDB4MUMsIDB4RUMsIDB4MDMsIDB4RjEsIDB4MEYsIDB4RTQsIDB4M0IsIDB4MDAsIDB4NTcsCisweDAwLCAweDVDLCAweDEyLCAweDM0LCAweDAxLCAweEMwLCAweDA1LCAweDYwLCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHhBOCwgMHgyRiwgMHgwMCwgMHhBRiwgMHgwMCwgMHhFQywgMHgwMywgMHg3MCwgMHgwMywKKzB4QzAsIDB4MEYsIDB4MDAsIDB4M0YsIDB4MDAsIDB4RkMsIDB4MDAsIDB4RjAsIDB4QzEsIDB4QzEsIDB4MEYsIDB4MDQsIDB4MUYsCisweDA0LCAweEZDLCAweDAzLCAweDcyLCAweDBGLCAweEM0LCAweDNGLCAweDAwLCAweDNGLCAweDAwLCAweDZDLCAweDMwLCAweEYwLAorMHgwMywgMHhDNCwgMHgxNywgMHg2MiwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywKKzB4QTAsIDB4MkQsIDB4MTEsIDB4QkYsIDB4MDAsIDB4RkMsIDB4MTMsIDB4QjIsIDB4OTMsIDB4QzgsIDB4M0QsIDB4MTEsIDB4MTMsCisweDA4LCAweERDLCAweDIyLCAweDMyLCAweDRGLCAweEM4LCAweDBGLCAweDIwLCAweDdCLCAweDQxLCAweEVDLCAweDAzLCAweEYwLAorMHgxNywgMHhDMCwgMHgzQywgMHgwMCwgMHhCRiwgMHgwMSwgMHhFQywgMHgwMCwgMHgzMCwgMHgwMywgMHhDNCwgMHgwQywgMHgwMCwKKzB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4MDAsIDB4NDcsIDB4MDIsIDB4OUMsCisweDhDLCAweEY0LCAweDI3LCAweDA0LCAweDA5LCAweDRDLCAweDdELCAweDIyLCAweDFELCAweDA0LCAweDc0LCAweDEyLCAweDUwLAorMHhBRiwgMHg0MiwgMHgwNywgMHgwMCwgMHg5OSwgMHg4MSwgMHg0NCwgMHgwQiwgMHhEMCwgMHgwOSwgMHg0MCwgMHgzQywgMHgxMCwKKzB4OUQsIDB4NDAsIDB4NDQsIDB4MDAsIDB4MTAsIDB4MTEsIDB4NDAsIDB4MEMsIDB4MDAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEzLCAweDIwLCAweDIxLCAweDA4LCAweDBELCAweDUwLCAweDM0LCAweDAzLCAweDE4LAorMHg1MSwgMHg0NCwgMHgzMSwgMHgwMCwgMHgwRCwgMHgyMCwgMHg3NCwgMHgwMiwgMHgxMCwgMHgwQywgMHg2NCwgMHgwMSwgMHgwMCwKKzB4ODksIDB4MDAsIDB4MjQsIDB4MEIsIDB4RDAsIDB4MDEsIDB4NTAsIDB4MzAsIDB4MDAsIDB4OUQsIDB4MDAsIDB4MjQsIDB4MDAsCisweDEwLCAweDAwLCAweDQwLCAweDRDLCAweDgwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMywgMHhBOCwgMHg0NywgMHg4MCwgMHgxRCwgMHg1MSwgMHg3NCwgMHgwMywgMHgxMCwgMHgxMSwgMHg0MCwgMHgzNSwgMHgwMCwKKzB4M0QsIDB4MDIsIDB4RjQsIDB4MDIsIDB4NTAsIDB4MEQsIDB4MDAsIDB4NEYsIDB4MDgsIDB4ODksIDB4MDgsIDB4NDQsIDB4MDMsCisweEQyLCAweDE5LCAweDAwLCAweDNDLCAweDAwLCAweDlELCAweDAxLCAweDQ0LCAweDA0LCAweDEwLCAweDExLCAweDQyLCAweDBDLAorMHhBMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhBMCwgMHg2NywgMHgwMCwKKzB4OUYsIDB4MDMsIDB4N0MsIDB4MDMsIDB4MzAsIDB4MTgsIDB4Q0MsIDB4MzUsIDB4MTgsIDB4MUIsIDB4MDEsIDB4NUUsIDB4MDYsCisweDIwLCAweDBELCAweEMwLCAweEM3LCAweDAwLCAweERCLCAweDAwLCAweDZDLCAweDAzLCAweEYwLCAweDFDLCAweEMwLCAweDM0LAorMHgyMCwgMHhDRiwgMHgwMSwgMHg2QywgMHg4NCwgMHgzMCwgMHgxMSwgMHhDMCwgMHgwMCwgMHgwMCwgMHgwRSwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4ODgsIDB4MkQsIDB4MDAsIDB4QkYsIDB4ODAsIDB4QkMsIDB4MDMsCisweEYwLCAweDBCLCAweEMwLCAweDNFLCAweDgwLCAweDFELCAweDAzLCAweEZDLCAweDI2LCAweEYwLCAweDBGLCAweEMwLCAweDJGLAorMHgwMCwgMHhCRiwgMHgwMSwgMHhGQywgMHgwMywgMHhGMiwgMHgwQiwgMHhDMCwgMHgzRiwgMHgwMCwgMHhGRiwgMHgwMCwgMHhGQywKKzB4MDAsIDB4RjQsIDB4MDksIDB4RDAsIDB4MUYsIDB4MjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAyLCAweDA4LCAweDI1LCAweDE4LCAweDkzLCAweDAxLCAweDdDLCAweEEzLCAweEYwLCAweDAxLCAweEMwLCAweDc3LAorMHgwMCwgMHgxQiwgMHgwMiwgMHg0QywgMHg0MiwgMHhGMCwgMHgwRCwgMHhDMCwgMHg4NywgMHgwMCwgMHg5RiwgMHgwMCwgMHg3QywKKzB4MDMsIDB4MzAsIDB4MDksIDB4ODAsIDB4MzcsIDB4MDAsIDB4NUYsIDB4MDAsIDB4N0MsIDB4MDAsIDB4MzAsIDB4MDEsIDB4QzEsCisweDA4LCAweDIwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFCLCAweEEwLCAweDY0LAorMHgwNCwgMHg5MSwgMHgwMiwgMHhGNCwgMHgyRiwgMHhEMCwgMHgwMSwgMHg0MCwgMHhCRiwgMHgwMCwgMHgxMSwgMHg4MCwgMHg0NSwKKzB4NDcsIDB4RDEsIDB4MEYsIDB4NDQsIDB4MjcsIDB4MDAsIDB4OUQsIDB4MDAsIDB4RjQsIDB4MDMsIDB4MTAsIDB4MDksIDB4NDAsCisweDNGLCAweDAwLCAweDVELCAweDAwLCAweDM0LCAweDQ0LCAweDEwLCAweDM4LCAweDU4LCAweDZDLCAweDAwLCAweDAyLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMywgMHgyMCwgMHgwMCwgMHg2MCwgMHgwOCwgMHgzMCwgMHgzNiwKKzB4MEYsIDB4RDgsIDB4MDAsIDB4NDAsIDB4MzMsIDB4MDEsIDB4MDksIDB4MDAsIDB4NTAsIDB4MEUsIDB4RDAsIDB4OUMsIDB4MjIsCisweDQzLCAweDAyLCAweDRDLCAweDgwLCAweDM0LCAweDAzLCAweDEwLCAweDAwLCAweDQwLCAweDMzLCAweDAwLCAweENELCAweDA2LAorMHgzNCwgMHgwMCwgMHgxNCwgMHhBMCwgMHg0MCwgMHg0QywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MEYsIDB4MDAsIDB4NTgsIDB4MDIsIDB4RTksIDB4ODEsIDB4QjQsIDB4MDcsIDB4RDAsIDB4MUEsIDB4NDAsCisweDdCLCAweDAwLCAweDIxLCAweDA5LCAweDg0LCAweDA2LCAweEQxLCAweDlFLCAweDQwLCAweDVCLCAweDAwLCAweEFELCAweDAxLAorMHhCNCwgMHgwNywgMHgxMCwgMHgxQSwgMHg0MCwgMHg3QiwgMHgwMCwgMHhFRCwgMHg0MSwgMHhCNCwgMHgwNywgMHgxOCwgMHg5QSwKKzB4NDAsIDB4M0MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4MUEsCisweDMwLCAweDAwLCAweDRCLCAweDA4LCAweDNDLCAweDAzLCAweEYwLCAweDgwLCAweEMwLCAweDMzLCAweDAwLCAweDBCLCAweDA1LAorMHgwQywgMHgwMiwgMHhGMCwgMHgwQywgMHhDMCwgMHg0MywgMHgwMSwgMHhDRiwgMHgwMCwgMHg3QywgMHgyMywgMHgzNCwgMHgwMCwKKzB4NDAsIDB4MzMsIDB4MDAsIDB4Q0YsIDB4MDAsIDB4M0MsIDB4MDEsIDB4MzAsIDB4MDQsIDB4QzgsIDB4NDgsIDB4NjgsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweDMwLCAweDE5LCAweDAwLCAweEYwLCAweDYwLAorMHhGQywgMHg2MywgMHhGMCwgMHgwRiwgMHhDMCwgMHgzQiwgMHgwMiwgMHhGRiwgMHgwOCwgMHhGMCwgMHgyMywgMHhGMCwgMHgwRiwKKzB4QzQsIDB4MUYsIDB4MDIsIDB4QkYsIDB4MDAsIDB4RkMsIDB4ODMsIDB4RjAsIDB4MEIsIDB4QzAsIDB4QkYsIDB4MTAsIDB4RkYsCisweDAwLCAweEJDLCAweDAzLCAweEYxLCAweDBELCAweEMwLCAweDBCLCAweDYwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHhBMCwgMHgxNywgMHgxMCwgMHg1MywgMHgwMCwgMHg3NCwgMHg1RiwgMHgzNCwgMHgwOSwKKzB4QzAsIDB4MzcsIDB4MDAsIDB4MUYsIDB4MDAsIDB4NEMsIDB4MDIsIDB4MzEsIDB4OUQsIDB4ODAsIDB4NzQsIDB4MDAsIDB4RDMsCisweDAwLCAweDdDLCAweDAzLCAweEYwLCAweDBELCAweEMwLCAweEI3LCAweDgyLCAweENGLCAweDAwLCAweDJDLCAweDAyLCAweDMwLAorMHgxNSwgMHhEMCwgMHg0MCwgMHgwMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMywKKzB4OEEsIDB4MzksIDB4MDAsIDB4RTEsIDB4MDAsIDB4MzQsIDB4MTMsIDB4MTAsIDB4MEEsIDB4NDAsIDB4QkIsIDB4MDMsIDB4OEQsCisweDgwLCAweDg0LCAweDAyLCAweDEyLCAweDhDLCAweDQyLCAweDNDLCAweDA4LCAweEExLCAweDAwLCAweEI0LCAweDEzLCAweEQwLAorMHgwQSwgMHg0MCwgMHgzQSwgMHg4MCwgMHhFRCwgMHgwMCwgMHg4NCwgMHgwMywgMHgxMCwgMHgwRSwgMHg0MCwgMHg0QywgMHgwMCwKKzB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4NzksIDB4NDAsIDB4NjksCisweDAxLCAweEI0LCAweDE3LCAweEQwLCAweDFFLCAweDQwLCAweDdCLCAweDAwLCAweDZELCAweDExLCAweDk0LCAweDQ2LCAweDkwLAorMHg1RSwgMHg0MCwgMHg2OCwgMHgwMCwgMHhFMSwgMHgwMSwgMHhCNCwgMHgzNywgMHg5MCwgMHgxRSwgMHg0MCwgMHg3QiwgMHgwMCwKKzB4N0QsIDB4NjEsIDB4QTQsIDB4MDcsIDB4MTQsIDB4MTQsIDB4NDAsIDB4MTAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE2LCAweDI4LCAweEIzLCAweDAwLCAweEM5LCAweDAxLCAweDM0LCAweDAzLCAweDUwLAorMHg4QywgMHg0MCwgMHgzMywgMHgwMCwgMHhDRCwgMHhDMywgMHg1NCwgMHgwNywgMHg5MCwgMHgwQywgMHg1MCwgMHg3MCwgMHgwMSwKKzB4ODEsIDB4MDAsIDB4MzQsIDB4MDMsIDB4RDAsIDB4NDgsIDB4NDAsIDB4MzYsIDB4MDAsIDB4NEQsIDB4MDksIDB4MDQsIDB4MDMsCisweDEwLCAweDFDLCAweDQxLCAweDU4LCAweDIwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgxNywgMHhBMCwgMHgxRiwgMHgyMCwgMHg3QiwgMHg4NSwgMHg3QywgMHgwMSwgMHg3OCwgMHgxNywgMHhDNiwgMHgxNywgMHgwOCwKKzB4N0YsIDB4MDMsIDB4NUMsIDB4MDUsIDB4QjYsIDB4MDUsIDB4QzAsIDB4NUMsIDB4MDEsIDB4NzMsIDB4MDIsIDB4N0MsIDB4MDEsCisweEIwLCAweDM3LCAweEMxLCAweDE3LCAweDAwLCAweDdGLCAweDA5LCAweEFDLCAweDAxLCAweDMwLCAweDc3LCAweEMwLCAweDVDLAorMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHg4OCwgMHgwNSwgMHgyNCwKKzB4MTcsIDB4NDYsIDB4N0MsIDB4MDAsIDB4QTAsIDB4MDEsIDB4RTAsIDB4ODMsIDB4MjAsIDB4MUUsIDB4QTAsIDB4NkMsIDB4MDAsCisweDcwLCAweDAxLCAweEMwLCAweDg3LCAweDAwLCAweDFGLCAweDA0LCAweDdDLCAweDAwLCAweEYwLCAweDAxLCAweEMwLCAweDA2LAorMHgwMCwgMHgxRiwgMHgwMiwgMHg3QywgMHgwNCwgMHhGMCwgMHgwMSwgMHhDMCwgMHg0QiwgMHgyMCwgMHgwNCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4QTEsIDB4MDAsIDB4OTMsIDB4MDgsIDB4N0MsIDB4ODYsCisweEYwLCAweDA5LCAweEMxLCAweDI1LCAweDA4LCAweDkzLCAweDEwLCAweDRDLCAweDAyLCAweDMwLCAweDA5LCAweEMwLCAweDY3LAorMHgwMCwgMHg5RiwgMHgwMCwgMHg0QywgMHgwMiwgMHhGMCwgMHgwOSwgMHhDMCwgMHgyNywgMHgwMCwgMHg5MywgMHgwMCwgMHg0OCwKKzB4MTYsIDB4MzAsIDB4NDksIDB4QzAsIDB4NDMsIDB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAxLCAweDIwLCAweDI2LCAweDAwLCAweDk1LCAweDAzLCAweDc0LCAweDY2LCAweEQwLCAweDA5LCAweDQwLCAweDI3LAorMHgyMCwgMHg5MSwgMHgwMCwgMHg0NCwgMHgwQSwgMHgxMCwgMHgzOSwgMHg0NCwgMHhBNywgMHgwMiwgMHg4RCwgMHgyMCwgMHg0NCwKKzB4MDIsIDB4RDAsIDB4MDksIDB4NDAsIDB4MjcsIDB4MDAsIDB4ODUsIDB4NDAsIDB4NDQsIDB4NDIsIDB4MTAsIDB4NDksIDB4NDAsCisweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweEEwLCAweDM0LAorMHgwMCwgMHg5MSwgMHg4MiwgMHg3NCwgMHg4MiwgMHhEMCwgMHgwOSwgMHg0MCwgMHg2NywgMHgwMCwgMHg4MSwgMHgwMCwgMHg1NCwKKzB4MEEsIDB4MTAsIDB4NDksIDB4NDksIDB4QjcsIDB4MDAsIDB4OUQsIDB4MDAsIDB4NDQsIDB4MDIsIDB4RDAsIDB4MDksIDB4NDAsCisweDI3LCAweDAwLCAweDkxLCAweDAwLCAweDU1LCAweDAzLCAweDEwLCAweDBELCAweDQwLCAweDYzLCAweDAwLCAweDAyLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgyMCwgMHgzMCwgMHhBNSwgMHg4NSwgMHgxNCwgMHgzNCwKKzB4ODIsIDB4RDAsIDB4ODgsIDB4NDAsIDB4MzMsIDB4NjAsIDB4ODEsIDB4NEMsIDB4MDQsIDB4MzIsIDB4MTgsIDB4MDgsIDB4NDAsCisweDIzLCAweDAxLCAweDlELCAweDAyLCAweDA0LCAweDAyLCAweEQwLCAweDA4LCAweDQwLCAweDIzLCAweDAxLCAweDg1LCAweDAwLAorMHgxNCwgMHhEMiwgMHgxMCwgMHg0OCwgMHg0MSwgMHg0MywgMHg4MCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MUQsIDB4QjAsIDB4MDcsIDB4MDEsIDB4MTMsIDB4MjQsIDB4N0MsIDB4NTAsIDB4RjAsIDB4MjEsIDB4QzQsCisweDA1LCAweDA1LCAweDEzLCAweDAzLCAweDA5LCAweDBDLCAweDMwLCAweEUxLCAweEMxLCAweEM3LCAweDAyLCAweDFGLCAweDAwLAorMHg0RCwgMHg3OCwgMHhGMCwgMHhBMSwgMHhDOCwgMHhDNywgMHgwQSwgMHg1MywgMHgwMCwgMHg1QywgMHgxMCwgMHgzMiwgMHg0MSwKKzB4QzAsIDB4NzcsIDB4RTAsIDB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MUQsIDB4QjgsCisweDJCLCAweDAwLCAweEJGLCAweDE0LCAweDdDLCAweDAyLCAweEYwLCAweDRCLCAweEMwLCAweDI3LCAweDAwLCAweEJGLCAweDBDLAorMHhGQywgMHgzMiwgMHhGNCwgMHgxOSwgMHhDMiwgMHg2RiwgMHgwMiwgMHhCRCwgMHgwMSwgMHg3QywgMHgwNiwgMHhGMCwgMHgxQiwKKzB4QzAsIDB4NjcsIDB4MDIsIDB4RkYsIDB4MTQsIDB4RTQsIDB4NTIsIDB4RjQsIDB4MEIsIDB4QzAsIDB4NzcsIDB4NDAsIDB4MEUsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFELCAweEE4LCAweDdGLCAweDA0LCAweEJGLCAweDAyLAorMHhGQywgMHgwMiwgMHhGMCwgMHgyOSwgMHhDMCwgMHgyRCwgMHgyMCwgMHg5RiwgMHgwMCwgMHhGQywgMHgwQSwgMHgzMCwgMHg0QiwKKzB4QzAsIDB4MkMsIDB4MDAsIDB4OTMsIDB4MDIsIDB4N0MsIDB4MDIsIDB4MzAsIDB4MDksIDB4QzAsIDB4MjQsIDB4MDAsIDB4QjMsCisweDAwLCAweEZDLCAweDBBLCAweDMwLCAweDBCLCAweEMwLCAweDc0LCAweDAwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwOCwgMHgxNywgMHgwMCwgMHgxRCwgMHgwMiwgMHg3NCwgMHgyOCwgMHhEMCwgMHgwMCwKKzB4NDgsIDB4ODcsIDB4MDIsIDB4MUQsIDB4MDQsIDB4NUMsIDB4MTAsIDB4MTQsIDB4QTEsIDB4NTAsIDB4MDQsIDB4MDAsIDB4MTUsCisweDAxLCAweDc0LCAweDI4LCAweDEwLCAweDAxLCAweDQwLCAweDA1LCAweDAwLCAweDFCLCAweDAwLCAweDc0LCAweDEwLCAweDEwLAorMHgwMSwgMHhDMCwgMHg2MiwgMHgwMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwKKzB4MDAsIDB4MjEsIDB4MjAsIDB4OEQsIDB4ODYsIDB4MzQsIDB4MDIsIDB4QzAsIDB4MDgsIDB4NDAsIDB4MjMsIDB4MDAsIDB4OEQsCisweDEwLCAweDMwLCAweDEyLCAweDE4LCAweDA4LCAweDQwLCAweDI0LCAweDAwLCAweDgxLCAweDAxLCAweDM0LCAweDAyLCAweDE0LAorMHgwOCwgMHg0MCwgMHgyMCwgMHgwMCwgMHg4MSwgMHgwMCwgMHgzNCwgMHgxMywgMHgxMCwgMHgwOCwgMHg0NCwgMHg0OCwgMHgwMCwKKzB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MjgsIDB4MjUsIDB4MDAsIDB4REQsCisweDBBLCAweDc0LCAweDAyLCAweEMwLCAweDA5LCAweDQwLCAweDM3LCAweDAwLCAweDlELCAweDAyLCAweDE0LCAweDIyLCAweDEwLAorMHgwOSwgMHg0MCwgMHgyNCwgMHgwMCwgMHg5NSwgMHgwMSwgMHgzNCwgMHgwMiwgMHgxMCwgMHg0OSwgMHg0NCwgMHgyNSwgMHgwMCwKKzB4OTksIDB4MDAsIDB4MzQsIDB4MDYsIDB4MTQsIDB4NDksIDB4NDAsIDB4NjIsIDB4MjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDBBLCAweDI1LCAweDEwLCAweDlGLCAweDAwLCAweDdDLCAweDAyLCAweEUwLAorMHgyOSwgMHhDMSwgMHgyNywgMHgwMCwgMHg5RiwgMHgwMiwgMHg3QywgMHgwMiwgMHgzMCwgMHgwOCwgMHhDNiwgMHg2NCwgMHgwMiwKKzB4QjMsIDB4MDAsIDB4N0MsIDB4MDIsIDB4MzAsIDB4MDksIDB4QzAsIDB4MjQsIDB4MDAsIDB4OTMsIDB4MDIsIDB4N0MsIDB4MDYsCisweDMwLCAweDA5LCAweEMwLCAweDE0LCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgxNiwgMHgwMCwgMHhBNSwgMHgyMCwgMHg5RiwgMHgyMSwgMHg3QywgMHgwMiwgMHhGMCwgMHgzOSwgMHhDMCwgMHgyNywgMHgwNCwKKzB4OUYsIDB4MDQsIDB4N0MsIDB4MDIsIDB4RjAsIDB4MDksIDB4NDAsIDB4NjcsIDB4MDAsIDB4OUYsIDB4MDAsIDB4N0MsIDB4MDIsCisweEYyLCAweDE5LCAweEMwLCAweDIzLCAweDAwLCAweDlGLCAweDAwLCAweDdDLCAweDAyLCAweEYyLCAweDA4LCAweEMwLCAweDVCLAorMHgyMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwOCwgMHgwNSwgMHgwMCwKKzB4MUYsIDB4MDQsIDB4NkMsIDB4MDAsIDB4NzAsIDB4MjEsIDB4QzAsIDB4MDQsIDB4MDIsIDB4MUYsIDB4MDIsIDB4N0MsIDB4MDAsCisweDMxLCAweDAxLCAweEMwLCAweDA0LCAweDAwLCAweDEzLCAweDQwLCAweDRDLCAweDAwLCAweEYwLCAweDAxLCAweEMwLCAweDA3LAorMHgwOCwgMHgxMywgMHgwQSwgMHg3QywgMHgwNCwgMHgzMCwgMHhDMSwgMHhDMCwgMHg1MywgMHgyMCwgMHgwNCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MjAsIDB4REMsIDB4MEUsIDB4N0QsIDB4MDYsIDB4RjQsIDB4NDEsCisweDEwLCAweDA1LCAweDgwLCAweDVFLCAweDAwLCAweDVELCAweDYwLCAweEY0LCAweDZELCAweDEwLCAweDM3LCAweDQwLCAweDFDLAorMHgwMCwgMHg1MSwgMHgwMCwgMHg2QywgMHgwMSwgMHhEMCwgMHgwNSwgMHg0MCwgMHgxNywgMHgwMCwgMHg3NSwgMHg0MCwgMHhGNCwKKzB4MDEsIDB4MTAsIDB4MTcsIDB4NDAsIDB4NDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDEwLCAweEEwLCAweEUyLCAweDAwLCAweENELCAweDQxLCAweDI0LCAweDE3LCAweDgwLCAweDBDLCAweDU4LCAweEYwLAorMHgyMCwgMHhDRCwgMHgwMCwgMHgzNCwgMHgwRiwgMHg5MCwgMHgyQywgMHg0MSwgMHg3NCwgMHgwNCwgMHhDMSwgMHgwMCwgMHgwNCwKKzB4MDMsIDB4RDEsIDB4MEQsIDB4NDAsIDB4MzMsIDB4MDAsIDB4ODEsIDB4MTAsIDB4MzQsIDB4MDMsIDB4MTAsIDB4MkMsIDB4NDAsCisweDQzLCAweDAwLCAweDBBLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDg4LCAweDI5LAorMHg4MCwgMHhFRCwgMHg4MCwgMHhCNCwgMHgwNywgMHg5NCwgMHhERSwgMHg0MCwgMHgyOCwgMHgyMCwgMHhFQywgMHgwOCwgMHgzNCwKKzB4MDMsIDB4OTAsIDB4MkMsIDB4NTAsIDB4MjAsIDB4MDQsIDB4RjEsIDB4NDUsIDB4QTQsIDB4MjMsIDB4RDAsIDB4MEUsIDB4NDAsCisweDNCLCAweDAwLCAweDI1LCAweDAwLCAweDM0LCAweDAzLCAweDEyLCAweDBBLCAweDQwLCAweDEzLCAweDAwLCAweDAyLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgxMCwgMHg3OSwgMHgwMCwgMHhFRiwgMHgwMSwgMHhBQywKKzB4MDUsIDB4QjEsIDB4NUUsIDB4NDEsIDB4NzgsIDB4MDAsIDB4RUYsIDB4MDUsIDB4QkMsIDB4MDUsIDB4QjAsIDB4MUEsIDB4QzAsCisweDc4LCAweDAwLCAweEYzLCAweDQzLCAweDhDLCAweDU3LCAweEYwLCAweDFFLCAweEMzLCAweDczLCAweDAwLCAweEEzLCAweDAxLAorMHhCQywgMHgwNywgMHgzNCwgMHgxMiwgMHhDMCwgMHg1MywgMHg2MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MTAsIDB4QTgsIDB4MzUsIDB4MDAsIDB4NUYsIDB4NDAsIDB4M0MsIDB4MDAsIDB4MzEsIDB4NEQsIDB4QzgsCisweDI3LCAweDA4LCAweERGLCAweDEwLCAweDdDLCAweDAxLCAweDcwLCAweDA5LCAweEM4LCAweDM3LCAweDQwLCAweERGLCAweDAwLAorMHg3QywgMHgxMywgMHhGMCwgMHhDRCwgMHhDMCwgMHhCNywgMHgwMiwgMHgxRiwgMHgwMCwgMHg3QywgMHgwMywgMHhCNCwgMHgwOSwKKzB4QzAsIDB4NDMsIDB4NjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDYsIDB4MjAsCisweDZELCAweDAwLCAweEZGLCAweDAxLCAweENDLCAweDA2LCAweEYwLCAweDlGLCAweEMwLCAweDVGLCAweDAyLCAweEZGLCAweDA5LAorMHhDQywgMHgyNywgMHhGMCwgMHgxQiwgMHhDMCwgMHg3RCwgMHgwMCwgMHhFRiwgMHg0MSwgMHhDQywgMHg4NywgMHg3MCwgMHgxRiwKKzB4QzAsIDB4RkMsIDB4MDAsIDB4RTMsIDB4MDEsIDB4Q0MsIDB4MDcsIDB4MzAsIDB4MUYsIDB4QzgsIDB4MUIsIDB4MDAsIDB4MDQsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE1LCAweDAwLCAweDI5LCAweDIwLCAweEZELCAweDAwLAorMHhBQywgMHgxQSwgMHhEMiwgMHhDRSwgMHg0MCwgMHgyQiwgMHgwMCwgMHhGRCwgMHgwMCwgMHg4NCwgMHgwNCwgMHhEMCwgMHgwRiwKKzB4QzAsIDB4MjAsIDB4MDEsIDB4RUQsIDB4MjUsIDB4QzQsIDB4MDcsIDB4NTAsIDB4MEUsIDB4QzEsIDB4M0EsIDB4MjAsIDB4NkIsCisweDAwLCAweDk0LCAweDAzLCAweEIwLCAweDBBLCAweDQwLCAweDU3LCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwMCwgMHgyOSwgMHgwMCwgMHhFRCwgMHgwMCwgMHhCNCwgMHgwMiwgMHhEMiwgMHgwRSwKKzB4NjAsIDB4MEIsIDB4MjAsIDB4RUQsIDB4MDAsIDB4OTYsIDB4MDMsIDB4RDAsIDB4MDIsIDB4NDAsIDB4MUIsIDB4ODAsIDB4RkQsCisweDA1LCAweEM0LCAweDAzLCAweDExLCAweDhFLCAweDQwLCAweDM4LCAweDAwLCAweEYxLCAweDAwLCAweDg0LCAweDQzLCAweDEwLAorMHgyRSwgMHg0MCwgMHgyMywgMHgwMSwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwKKzB4MjgsIDB4RjEsIDB4MDQsIDB4OEQsIDB4MTMsIDB4MzQsIDB4MDIsIDB4RDAsIDB4MkQsIDB4NDAsIDB4MjMsIDB4MDAsIDB4QzksCisweDAzLCAweDU0LCAweDA0LCAweEQwLCAweDAwLCAweDQwLCAweEMwLCAweDEwLCAweENELCAweDA0LCAweDA0LCAweDAzLCAweDU4LAorMHgzQywgMHg0MSwgMHgzMiwgMHgwMCwgMHg1OSwgMHgwMCwgMHgxNCwgMHgwNywgMHg5MSwgMHgwQywgMHg0MCwgMHgwQiwgMHgyMCwKKzB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTUsIDB4QTAsIDB4MjUsIDB4MTAsIDB4MUYsCisweDEyLCAweDdDLCAweDAyLCAweEYwLCAweDJGLCAweEMwLCAweDI3LCAweDAwLCAweEZGLCAweDA1LCAweDVDLCAweDQ2LCAweEYwLAorMHgwNSwgMHhDMCwgMHgwNywgMHgwMSwgMHhERiwgMHgwNywgMHhDRCwgMHgwMywgMHgzMiwgMHgwRiwgMHg0MCwgMHgzQywgMHgwMCwKKzB4NTMsIDB4MDAsIDB4NEMsIDB4MDcsIDB4MzAsIDB4MjUsIDB4QzAsIDB4NTcsIDB4MDAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBELCAweDA4LCAweDI3LCAweDAyLCAweDlGLCAweDAwLCAweDY0LCAweDA4LCAweEYwLAorMHhDRCwgMHhDMCwgMHgyNywgMHgwMCwgMHhERiwgMHgwMCwgMHg2QywgMHgwMiwgMHhGMCwgMHgwNSwgMHhDMCwgMHg4NywgMHgwMCwKKzB4REYsIDB4MDAsIDB4N0MsIDB4MDMsIDB4RTAsIDB4MEQsIDB4QzAsIDB4MzcsIDB4MDAsIDB4NUYsIDB4MDAsIDB4N0MsIDB4MDMsCisweEYwLCAweDAxLCAweEMyLCAweDM3LCAweDIwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHg4OSwgMHgwOSwgMHgzRiwgMHgxMCwgMHgyRiwgMHgwMCwgMHhDQywgMHg4MCwgMHhGMCwgMHgwRiwgMHhDMCwgMHgwOCwgMHgwMCwKKzB4RjMsIDB4MTAsIDB4RkMsIDB4MjAsIDB4MzAsIDB4MDMsIDB4QzAsIDB4MEYsIDB4MDQsIDB4RkYsIDB4MDAsIDB4QkMsIDB4MDMsCisweDEwLCAweDBGLCAweEMwLCAweDNGLCAweDEwLCAweEZGLCAweDAxLCAweDRDLCAweDY1LCAweEYwLCAweDk3LCAweEMwLCAweDA3LAorMHgyMiwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MSwgMHgyMCwgMHhCNiwgMHgwMCwKKzB4MUQsIDB4MjEsIDB4NTQsIDB4MDQsIDB4RDAsIDB4MEQsIDB4NDAsIDB4QzQsIDB4MDAsIDB4RDEsIDB4NDAsIDB4NzQsIDB4MDAsCisweDEwLCAweDIxLCAweDQwLCAweEM2LCAweDAxLCAweERELCAweDAwLCAweDc0LCAweDAzLCAweEIwLCAweDBELCAweEMwLCAweDM1LAorMHgwMCwgMHhERCwgMHgwQiwgMHg1NCwgMHgwMCwgMHhEMCwgMHgyRCwgMHg0NCwgMHg4NywgMHgwMiwgMHgwOCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4QTAsIDB4MjQsIDB4MTQsIDB4MUQsIDB4MDEsIDB4NDYsIDB4MDYsCisweEQwLCAweDBELCAweDQwLCAweDQ0LCAweDAwLCAweEQxLCAweDAwLCAweDc0LCAweDAzLCAweDEwLCAweDEzLCAweDQxLCAweDRGLAorMHg4MCwgMHhERCwgMHgwMCwgMHhGNCwgMHgwMywgMHg1MCwgMHgwRiwgMHg0MCwgMHgzRiwgMHgwMCwgMHg5RCwgMHgxMCwgMHg0NCwKKzB4MDMsIDB4OTAsIDB4MjUsIDB4NDAsIDB4MDcsIDB4MDgsIDB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDEwLCAweDIyLCAweDIwLCAweDAwLCAweDhELCAweDgwLCAweDE0LCAweDAwLCAweEQ4LCAweDBDLCAweDQwLCAweDIwLAorMHgwMCwgMHhDMSwgMHgyMiwgMHgzNCwgMHg0MCwgMHgxNCwgMHgwMCwgMHg0MCwgMHgwMywgMHgwMCwgMHhDRCwgMHgwNCwgMHgzNCwKKzB4MTMsIDB4RDAsIDB4MEMsIDB4NDAsIDB4MzMsIDB4MDAsIDB4OEQsIDB4MDAsIDB4MTQsIDB4MDcsIDB4RDAsIDB4MDAsIDB4NDAsCisweDQzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweEI4LCAweDA2LAorMHgwMCwgMHgxRiwgMHgwMCwgMHg0QywgMHgwMiwgMHhGMCwgMHgwRiwgMHhDMCwgMHgwNCwgMHgwMCwgMHhGMSwgMHgwMiwgMHg3NCwKKzB4MTMsIDB4MzAsIDB4MDEsIDB4QzAsIDB4ODcsIDB4MDIsIDB4RkYsIDB4MTAsIDB4RkMsIDB4NTMsIDB4NzAsIDB4MEUsIDB4QzAsCisweDNCLCAweDAwLCAweDlGLCAweDAwLCAweDRDLCAweDAzLCAweEYwLCAweDBELCAweEMwLCAweDA3LCAweDYwLCAweDA4LCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4NSwgMHhCMCwgMHgxRiwgMHgwMCwgMHhCRiwgMHg4MCwgMHhGOCwKKzB4MDAsIDB4RjAsIDB4MEYsIDB4QzIsIDB4MEYsIDB4MDAsIDB4RkYsIDB4MjAsIDB4N0MsIDB4MDAsIDB4RjAsIDB4MDMsIDB4QzAsCisweDBFLCAweDAwLCAweERGLCAweDAwLCAweDdDLCAweDAzLCAweEIxLCAweDBGLCAweEMwLCAweDNELCAweDAwLCAweEJGLCAweDAwLAorMHhGQywgMHg4MywgMHhGMCwgMHgwRiwgMHhDMCwgMHgxNywgMHg2MSwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDMsIDB4QTAsIDB4N0YsIDB4MDAsIDB4RkYsIDB4MDksIDB4RkMsIDB4MDIsIDB4MzAsIDB4NEIsIDB4QzEsCisweDNGLCAweDEzLCAweEZGLCAweDAwLCAweENDLCAweDEzLCAweDcwLCAweDgzLCAweEMwLCAweDNDLCAweDQwLCAweEYzLCAweDAwLAorMHhCQywgMHgwNiwgMHhCMCwgMHgwRiwgMHhDMCwgMHgyQywgMHgxNywgMHgzQiwgMHgwQywgMHhDQywgMHgwMCwgMHhCMCwgMHgwMywKKzB4QzAsIDB4MEYsIDB4MDAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4MTgsCisweDM3LCAweDAxLCAweENELCAweDA0LCAweDc0LCAweEVBLCAweDEwLCAweDY5LCAweEM4LCAweEJELCAweDIyLCAweEZELCAweERFLAorMHhENCwgMHgyRiwgMHgxMCwgMHgwMSwgMHg0MCwgMHhGQywgMHgwMCwgMHhEMSwgMHgwMiwgMHg0NCwgMHg4NywgMHgxMCwgMHgxRiwKKzB4NDAsIDB4QTUsIDB4MDEsIDB4MTEsIDB4MEUsIDB4NDQsIDB4MDgsIDB4MTAsIDB4MDEsIDB4NDAsIDB4MEYsIDB4NjAsIDB4MEMsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEzLCAweEEwLCAweDMzLCAweDA0LCAweENELCAweDAwLAorMHgzNCwgMHgxMCwgMHg1MCwgMHgwMCwgMHg0MSwgMHgzMywgMHgwOSwgMHhDRCwgMHg0NCwgMHgxNCwgMHgwMywgMHgxMCwgMHg1MCwKKzB4NjAsIDB4QjEsIDB4MDAsIDB4QzUsIDB4MDIsIDB4MTQsIDB4ODIsIDB4OTAsIDB4MEQsIDB4NjAsIDB4MzQsIDB4MDEsIDB4QzksCisweDAwLCAweDA0LCAweDA4LCAweDEyLCAweDAwLCAweDQwLCAweDRGLCAweDgwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHhBMCwgMHgzNSwgMHgwMCwgMHhERCwgMHgwNCwgMHgzNiwgMHgwRSwgMHg1NCwgMHgxOSwKKzB4NDIsIDB4MzcsIDB4MDAsIDB4REQsIDB4MDAsIDB4NDQsIDB4MDMsIDB4MTAsIDB4MTIsIDB4NDAsIDB4MzUsIDB4MDAsIDB4RDUsCisweDIwLCAweDU1LCAweDAzLCAweDEwLCAweDBGLCAweDQwLCAweDU1LCAweDAwLCAweEMxLCAweDE4LCAweDQ1LCAweDYzLCAweDEwLAorMHgxMSwgMHg0MCwgMHgwRiwgMHgwMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwKKzB4QTgsIDB4MzcsIDB4MDAsIDB4REQsIDB4MDAsIDB4N0MsIDB4MDYsIDB4NzAsIDB4MzEsIDB4QzAsIDB4MzcsIDB4MDAsIDB4REYsCisweDAwLCAweDRDLCAweDAzLCAweDMwLCAweDExLCAweDQwLCAweDM1LCAweDAwLCAweEQ2LCAweDAwLCAweDdDLCAweDAyLCAweEIwLAorMHgwRCwgMHhDMCwgMHg2NCwgMHg4MCwgMHgxQiwgMHgwMywgMHg0RSwgMHgwNywgMHgzMCwgMHgxOSwgMHhDMCwgMHgyQiwgMHgyMCwKKzB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MEYsIDB4ODAsIDB4RkQsIDB4MjAsIDB4RkYsCisweDgxLCAweDdFLCAweDAyLCAweEIwLCAweDAxLCAweEM0LCAweDNELCAweDAwLCAweERGLCAweDAwLCAweEJDLCAweDQzLCAweEIwLAorMHgwQiwgMHhDMCwgMHgzRSwgMHgxMCwgMHhGQSwgMHgwMCwgMHhFQywgMHgwMiwgMHhGMCwgMHgwRiwgMHhDMCwgMHgzRiwgMHgwMCwKKzB4RkYsIDB4ODAsIDB4N0MsIDB4MDEsIDB4NzAsIDB4MDMsIDB4QzAsIDB4MUYsIDB4MDAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweDA4LCAweDM1LCAweDAwLCAweERGLCAweDAwLCAweDRDLCAweDA4LCAweDM4LAorMHgyMSwgMHhDMCwgMHgzNCwgMHgwOCwgMHhENywgMHhDMCwgMHg0QywgMHgwMywgMHg3MCwgMHgwMSwgMHhEMSwgMHgzMCwgMHgwMCwKKzB4REYsIDB4ODQsIDB4NEQsIDB4NDIsIDB4MzIsIDB4NEQsIDB4QzAsIDB4MjcsIDB4MDAsIDB4MUIsIDB4MTIsIDB4M0MsIDB4MDIsCisweDMwLCAweDA5LCAweEMwLCAweDJCLCAweDIwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgxQiwgMHhBMCwgMHgzNCwgMHgwMCwgMHhERCwgMHgwMCwgMHg2QywgMHg4MiwgMHgxMCwgMHgxOSwgMHg0MSwgMHgzQywgMHgwMCwKKzB4RjEsIDB4MDAsIDB4QzQsIDB4NEIsIDB4RDAsIDB4MTksIDB4NDAsIDB4M0MsIDB4MDEsIDB4RTcsIDB4MDEsIDB4MDQsIDB4NDYsCisweDEyLCAweDNGLCAweEMwLCAweDExLCAweDAwLCAweERELCAweDAwLCAweDc0LCAweDFCLCAweDEwLCAweEI5LCAweDQxLCAweDRGLAorMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHgwMCwgMHgzMiwgMHgwMCwKKzB4Q0QsIDB4MDAsIDB4MjQsIDB4MDAsIDB4MTAsIDB4NTgsIDB4NDAsIDB4MzAsIDB4MDAsIDB4RDUsIDB4MDAsIDB4MDQsIDB4MEIsCisweDUwLCAweDIwLCAweDQwLCAweDMyLCAweDAwLCAweEM4LCAweDJCLCAweDA0LCAweDBBLCAweDEyLCAweDBELCAweDQ0LCAweDIzLAorMHgxMCwgMHgwOSwgMHgwOCwgMHgzNCwgMHg0MCwgMHg5MCwgMHgxOCwgMHg0MCwgMHgwRSwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MEQsIDB4MDgsIDB4N0EsIDB4MDAsIDB4RUQsIDB4MDEsIDB4QTQsIDB4MDUsCisweDEwLCAweDFFLCAweDQwLCAweDc4LCAweDAwLCAweEUxLCAweDAxLCAweDg0LCAweDA3LCAweEQwLCAweDFFLCAweDQxLCAweDc4LAorMHg4MCwgMHhFNSwgMHgwMSwgMHhDNCwgMHgwNywgMHgxMCwgMHgxRSwgMHg0MCwgMHg3OSwgMHgwMCwgMHhFRCwgMHgwMSwgMHhCNCwKKzB4MTUsIDB4OTAsIDB4MTIsIDB4NDAsIDB4MzcsIDB4MjAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDEyLCAweDEwLCAweDMyLCAweDAwLCAweENFLCAweDQwLCAweDJDLCAweDIxLCAweDEwLCAweDg0LCAweEMwLCAweDM0LAorMHgwMiwgMHhDNywgMHgwOCwgMHgwNiwgMHgwMywgMHg3MCwgMHgwNSwgMHhDMCwgMHgzMiwgMHgwMCwgMHhDRiwgMHg0MCwgMHgwQywKKzB4MDIsIDB4MzAsIDB4MEMsIDB4QzEsIDB4MjMsIDB4MDAsIDB4MEIsIDB4MDQsIDB4M0MsIDB4MDIsIDB4QjAsIDB4MEMsIDB4QzAsCisweDRCLCAweDQwLCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweEEwLCAweDNELAorMHgyMCwgMHhGRiwgMHg4MCwgMHhERCwgMHg4MSwgMHhGMCwgMHg4RiwgMHhDMCwgMHgzRiwgMHgwMCwgMHhGRiwgMHgyMCwgMHhGRSwKKzB4MDMsIDB4RjAsIDB4MEYsIDB4QzAsIDB4QkQsIDB4MDQsIDB4RUYsIDB4MDAsIDB4RkMsIDB4MDMsIDB4RjUsIDB4MEYsIDB4QzAsCisweDFGLCAweDAwLCAweERGLCAweDAwLCAweDdDLCAweDEzLCAweDcyLCAweDBGLCAweEMwLCAweDBCLCAweDIwLCAweDA2LCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHhBOCwgMHgzNywgMHgyMCwgMHhERiwgMHgwMCwgMHg3QywKKzB4MDMsIDB4NzAsIDB4MEQsIDB4QzAsIDB4MzcsIDB4MDEsIDB4REYsIDB4MDQsIDB4N0MsIDB4MTMsIDB4RDEsIDB4MTEsIDB4RDAsCisweDMwLCAweDAxLCAweEQzLCAweDA4LCAweDRDLCAweDA2LCAweDMwLCAweDVELCAweEM4LCAweDIwLCAweDAwLCAweDE3LCAweDAwLAorMHg1QywgMHgwMCwgMHhCNCwgMHgwRCwgMHhDMCwgMHg0MCwgMHgwMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MTMsIDB4ODgsIDB4MzgsIDB4MTAsIDB4RUQsIDB4MjAsIDB4QjYsIDB4MDMsIDB4RDAsIDB4MEUsIDB4NDAsCisweEJCLCAweDAzLCAweEVELCAweDI4LCAweEI0LCAweDIzLCAweEQwLCAweDBCLCAweDQwLCAweDM4LCAweDAwLCAweEUxLCAweDAwLAorMHhBQywgMHgwMiwgMHg1MCwgMHhBRSwgMHg0MCwgMHgzOCwgMHgwMCwgMHhFMSwgMHg0MCwgMHhCNCwgMHgwMSwgMHgxMCwgMHgwNiwKKzB4NDAsIDB4NEMsIDB4NjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsCisweDc5LCAweDgwLCAweEVELCAweDgxLCAweDk0LCAweDA3LCAweEQ4LCAweDE2LCAweDQwLCAweDdCLCAweDAwLCAweEVELCAweDA5LAorMHhCNCwgMHgyNywgMHhEMCwgMHgxNiwgMHg0OSwgMHg3OCwgMHgwMSwgMHhFMSwgMHgwNSwgMHg5NCwgMHgwNiwgMHg5MCwgMHg1RSwKKzB4NTgsIDB4NkMsIDB4NDAsIDB4MjEsIDB4MDMsIDB4MzQsIDB4MDYsIDB4NTAsIDB4MUMsIDB4NDAsIDB4MTAsIDB4MDAsIDB4MDQsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE2LCAweDI4LCAweDIzLCAweDgwLCAweDhELCAweDAwLAorMHgzNCwgMHgwNywgMHhEOCwgMHhBQywgMHg0MCwgMHgzMywgMHgxMCwgMHhDRCwgMHgwMCwgMHgzNCwgMHgwMywgMHhEMCwgMHgyQywKKzB4NDAsIDB4MzAsIDB4ODAsIDB4QzEsIDB4MDAsIDB4MzQsIDB4ODYsIDB4RDAsIDB4MEMsIDB4NDAsIDB4MTAsIDB4MDAsIDB4QzEsCisweDEwLCAweDc0LCAweDJGLCAweDUwLCAweDJELCAweDQwLCAweDU4LCAweDAwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgxNywgMHhBOCwgMHgxNywgMHgwMSwgMHg1RiwgMHgwMCwgMHhGQywgMHgwRCwgMHg3MiwgMHgxNywKKzB4Q0EsIDB4MTcsIDB4MDgsIDB4NUYsIDB4MDAsIDB4N0MsIDB4MDEsIDB4RjAsIDB4MDcsIDB4NDgsIDB4MTQsIDB4MDAsIDB4NDMsCisweDAwLCAweDU0LCAweDAxLCAweEIwLCAweDA1LCAweEM0LCAweDFDLCAweDAxLCAweDczLCAweDAzLCAweERDLCAweDJELCAweDcwLAorMHg0NywgMHhDMCwgMHg1QywgMHgyMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwKKzB4MDAsIDB4MDUsIDB4MjAsIDB4MUYsIDB4MDAsIDB4N0MsIDB4NjAsIDB4RjgsIDB4MDEsIDB4QzEsIDB4MDcsIDB4MDAsIDB4MEYsCisweDAwLCAweDdDLCAweDA4LCAweEYwLCAweDQxLCAweEM4LCAweDAzLCAweDQwLCAweDFGLCAweDAwLCAweDY0LCAweDIwLCAweDczLAorMHgwMSwgMHhDMCwgMHgwNywgMHgyMCwgMHgxOSwgMHgwMiwgMHg3QywgMHgwMCwgMHhCMCwgMHgyMSwgMHhEMCwgMHg0QiwgMHgwMCwKKzB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4MjcsIDB4MDAsIDB4OUYsCisweDAwLCAweDc4LCAweDAyLCAweEYwLCAweDg5LCAweEMyLCAweDI3LCAweDAwLCAweDlCLCAweDAwLCAweDRDLCAweDA2LCAweEYwLAorMHgwOSwgMHhDMCwgMHgyNSwgMHgwMSwgMHg5MywgMHgwOSwgMHg1QywgMHgwMiwgMHhGMCwgMHg5OSwgMHhDMCwgMHgyMywgMHgwMCwKKzB4OTcsIDB4MjgsIDB4NDQsIDB4ODIsIDB4MzEsIDB4MDksIDB4QzEsIDB4NDAsIDB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDIwLCAweDI2LCAweDAwLCAweDlELCAweDAwLCAweDc0LCAweDAyLCAweEQwLAorMHgwOSwgMHg0MCwgMHgyNywgMHgwMCwgMHg5RCwgMHgwMCwgMHg0NCwgMHgwRSwgMHhEMCwgMHgyOSwgMHg0MCwgMHgyNywgMHgwMCwKKzB4OTEsIDB4MDMsIDB4NDQsIDB4MDIsIDB4RDAsIDB4MzksIDB4NDAsIDB4MjcsIDB4MDAsIDB4OTEsIDB4MDcsIDB4NDQsIDB4MEEsCisweDEwLCAweDI5LCAweDUxLCAweDA0LCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgxQywgMHhBMCwgMHgyNCwgMHgwMCwgMHg5RCwgMHgwMCwgMHg3MCwgMHgwMiwgMHhEMCwgMHgwRCwgMHg0MCwgMHgyNywgMHgwMCwKKzB4OUQsIDB4MDAsIDB4NDQsIDB4MUEsIDB4RDAsIDB4MjksIDB4MDAsIDB4MjcsIDB4NDAsIDB4OTEsIDB4MDIsIDB4NTQsIDB4MDIsCisweEQ4LCAweDA5LCAweDQxLCAweDI3LCAweDAwLCAweDg1LCAweDAwLCAweDU0LCAweDAyLCAweDEwLCAweDBELCAweDQwLCAweDcwLAorMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgyMCwgMHgyMCwgMHgwMCwKKzB4OEQsIDB4MDAsIDB4MzQsIDB4NTIsIDB4RDAsIDB4NEMsIDB4NDEsIDB4MjMsIDB4MDIsIDB4OEQsIDB4MDgsIDB4MDQsIDB4ODIsCisweEQwLCAweEM4LCAweDQwLCAweDIzLCAweDAwLCAweDgxLCAweDE0LCAweDA0LCAweDAzLCAweEQ5LCAweDQ4LCAweDQwLCAweDIzLAorMHgwMCwgMHg4MSwgMHgwOCwgMHgxNCwgMHg4MiwgMHgxNCwgMHg0OCwgMHg0MSwgMHg1MCwgMHhBMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MUQsIDB4QjAsIDB4MDYsIDB4MDAsIDB4MUYsIDB4NDAsIDB4N0MsIDB4MTAsCisweEYwLCAweDQxLCAweEMwLCAweDg3LCAweDA1LCAweDFCLCAweDE2LCAweDRDLCAweDUwLCAweEYwLCAweDMxLCAweEMwLCAweDA1LAorMHgwNSwgMHgwMywgMHgwRSwgMHg1QywgMHgwMCwgMHhGMCwgMHgxMSwgMHhDMCwgMHg4NywgMHgwNSwgMHgxNywgMHgxNiwgMHg1RCwKKzB4NTEsIDB4MzAsIDB4NDEsIDB4QzAsIDB4NzQsIDB4QzAsIDB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDE5LCAweEI4LCAweDJGLCAweDBELCAweEJGLCAweDM0LCAweEZDLCAweDUyLCAweEYwLCAweDRCLCAweEMxLCAweDI3LAorMHgwMSwgMHg5RiwgMHgwNCwgMHg3RCwgMHg4MiwgMHhGMCwgMHhDQiwgMHg4MCwgMHgyNywgMHgwMCwgMHg5RiwgMHgwMSwgMHhCQywKKzB4MDIsIDB4RjAsIDB4ODgsIDB4QzAsIDB4MkYsIDB4MDQsIDB4QkYsIDB4MDQsIDB4RUMsIDB4NTIsIDB4RjgsIDB4NEIsIDB4QzEsCisweDY3LCAweDIwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweEEwLCAweEE3LAorMHgwMCwgMHhERiwgMHgwMiwgMHg1NCwgMHgxRSwgMHhGMCwgMHgyQiwgMHhDMCwgMHgyNSwgMHgwMSwgMHg5RiwgMHg1NCwgMHhGQywKKzB4MTIsIDB4MzAsIDB4OEIsIDB4QzAsIDB4MkUsIDB4MDUsIDB4QjMsIDB4MDEsIDB4Q0MsIDB4MDIsIDB4RjAsIDB4MEIsIDB4QzAsCisweEE0LCAweDAwLCAweEJGLCAweDAwLCAweENDLCAweDAyLCAweDMyLCAweDBCLCAweEMwLCAweDYwLCAweDAwLCAweDBFLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxQywgMHgxOCwgMHgwMywgMHgyMCwgMHgxRCwgMHgwMSwgMHg2RSwKKzB4MDgsIDB4MTAsIDB4ODUsIDB4NDAsIDB4MDAsIDB4MDUsIDB4MEQsIDB4MDQsIDB4NzQsIDB4ODAsIDB4MTAsIDB4MDEsIDB4NTAsCisweDg0LCAweDAwLCAweDExLCAweDAwLCAweDQ0LCAweDAwLCAweEQwLCAweDAxLCAweDQwLCAweDU0LCAweDAxLCAweDFELCAweDQwLAorMHg0NCwgMHgwMCwgMHhCQSwgMHgwNSwgMHhDMCwgMHg3MiwgMHg2MCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MTIsIDB4QTAsIDB4MjEsIDB4ODEsIDB4OUQsIDB4MDAsIDB4MDQsIDB4QjIsIDB4NTgsIDB4NDgsIDB4NDAsCisweDIxLCAweDAyLCAweDhELCAweDE0LCAweDM0LCAweDBBLCAweDEyLCAweDQ4LCAweDQ0LCAweDIwLCAweDAwLCAweDgxLCAweDIyLAorMHgwNCwgMHgwMiwgMHhEMCwgMHgwOCwgMHg1MCwgMHgyMSwgMHgwMSwgMHg4RCwgMHgwMCwgMHgxNCwgMHgwMiwgMHgxMCwgMHgwOCwKKzB4NDAsIDB4NDgsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MjAsCisweDI1LCAweDgwLCAweDlELCAweDAwLCAweDY0LCAweDYyLCAweDU4LCAweDBELCAweDQwLCAweDI0LCAweDAwLCAweDlDLCAweDAwLAorMHg3MCwgMHgwMiwgMHgwMCwgMHgwQywgMHg2MCwgMHgyNCwgMHg0MCwgMHg5MSwgMHgwMCwgMHg0NSwgMHgwMiwgMHhEMCwgMHgwRCwKKzB4NDAsIDB4MjUsIDB4MjIsIDB4OUQsIDB4ODAsIDB4NTQsIDB4MkEsIDB4OTAsIDB4MDksIDB4NDAsIDB4NjIsIDB4MDAsIDB4MDQsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweEE4LCAweDY3LCAweDAwLCAweDhELCAweDQwLAorMHg0NCwgMHgwNiwgMHg2OCwgMHgwOSwgMHhDMCwgMHgyNSwgMHgwMCwgMHg5RiwgMHgwMCwgMHgzQywgMHgwMiwgMHgzMCwgMHgxOSwKKzB4QzQsIDB4MjYsIDB4MDAsIDB4OTMsIDB4MDAsIDB4NEMsIDB4MDIsIDB4RjAsIDB4MDksIDB4NDAsIDB4MjUsIDB4MDAsIDB4OUQsCisweDBGLCAweDVDLCAweDA2LCAweDMwLCAweDI5LCAweEMwLCAweDE0LCAweDIwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHg4MCwgMHgyNCwgMHgwMSwgMHg5RiwgMHgwNCwgMHgzQywgMHgwMiwgMHhCMCwgMHg1OSwKKzB4QzAsIDB4MjcsIDB4MDgsIDB4OUYsIDB4MDAsIDB4N0UsIDB4MDIsIDB4RjQsIDB4NDksIDB4QzAsIDB4MjEsIDB4MDAsIDB4OUYsCisweDAwLCAweDdDLCAweDAyLCAweEYwLCAweDA4LCAweEMwLCAweDY2LCAweDAwLCAweDlGLCAweDExLCAweDZELCAweDQyLCAweEYyLAorMHg0OSwgMHhDMSwgMHg0QiwgMHgwMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwKKzB4MDgsIDB4MDUsIDB4NDgsIDB4MUIsIDB4MDAsIDB4N0MsIDB4MDAsIDB4QjgsIDB4MjEsIDB4QzEsIDB4MDcsIDB4MDAsIDB4MTcsCisweDAwLCAweDRDLCAweDAwLCAweEYwLCAweDAxLCAweEMwLCAweDA2LCAweDAwLCAweDEzLCAweDAwLCAweDVDLCAweDIwLCAweEYwLAorMHgxMSwgMHhDMCwgMHgwNSwgMHgwMCwgMHgwNywgMHgyMiwgMHg0QywgMHgwOCwgMHhFMCwgMHgyMSwgMHhEMCwgMHg0MCwgMHgyMCwKKzB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4ODAsIDB4MTQsIDB4MDAsIDB4NTEsCisweDAwLCAweDc0LCAweDAxLCAweEI4LCAweDA3LCAweDQwLCAweDE3LCAweDAwLCAweDUxLCAweDAwLCAweEM0LCAweDA5LCAweEQwLAorMHgxNywgMHhDMCwgMHgxNCwgMHgwMCwgMHg3MywgMHg4MSwgMHhDNCwgMHgyOSwgMHhEMCwgMHgwNywgMHg0MCwgMHgxNCwgMHgwMCwKKzB4NzEsIDB4MDIsIDB4QzAsIDB4NDUsIDB4RDEsIDB4MDcsIDB4NDAsIDB4NTAsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweEEwLCAweDMyLCAweDAwLCAweEMxLCAweDgwLCAweDM0LCAweDAzLCAweDkzLAorMHg4RCwgMHg0NiwgMHgzMywgMHgwMCwgMHhDNSwgMHgwMCwgMHgxNCwgMHgxNywgMHhEMCwgMHgwQywgMHg0MCwgMHgyMiwgMHgzMCwKKzB4NTksIDB4OEYsIDB4MTQsIDB4MDIsIDB4QzgsIDB4MUMsIDB4NDAsIDB4MzEsIDB4ODAsIDB4QzUsIDB4MDMsIDB4NDUsIDB4MEIsCisweEQwLCAweDhELCAweDQwLCAweDUwLCAweDAwLCAweDBBLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMSwgMHg4OCwgMHg3OCwgMHgwOSwgMHhFMSwgMHgwMCwgMHhCNCwgMHgxMywgMHgxMCwgMHgwRSwgMHg0MCwgMHg3QiwgMHgwMywKKzB4RTQsIDB4MEQsIDB4OTEsIDB4NDMsIDB4RDAsIDB4MjgsIDB4NDAsIDB4MzAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4QTQsIDB4MDEsCisweEQxLCAweDBFLCAweDQxLCAweDc4LCAweDAwLCAweEUxLCAweDAyLCAweDg0LCAweDAzLCAweEQwLCAweDA0LCAweDQwLCAweDA0LAorMHgyMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMSwgMHgxMCwgMHg3OSwgMHgwNCwKKzB4RTMsIDB4MEQsIDB4QjQsIDB4MEYsIDB4OTAsIDB4MUUsIDB4QzAsIDB4N0IsIDB4MDQsIDB4RTcsIDB4MTUsIDB4OUMsIDB4MDcsCisweEYwLCAweDE2LCAweEUwLCAweDZBLCAweDAwLCAweDJCLCAweDAxLCAweDlDLCAweDA0LCAweEYwLCAweDFFLCAweEMwLCAweDdELAorMHgwMCwgMHg3NywgMHgwMSwgMHg4RCwgMHgwNywgMHhGMCwgMHgxRSwgMHhDNCwgMHg0NCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4QTgsIDB4MzUsIDB4MjMsIDB4RDcsIDB4ODAsIDB4N0MsIDB4NDMsCisweEYwLCAweDBELCAweEMwLCAweEI3LCAweDAxLCAweERCLCAweDA0LCAweDZDLCAweDAzLCAweEYwLCAweDAxLCAweEMyLCAweDI3LAorMHg0MCwgMHgxRiwgMHgyMiwgMHg1QywgMHgwMSwgMHhGMCwgMHgwOCwgMHhDMCwgMHgzNywgMHgwOCwgMHg1RiwgMHgwMCwgMHg3QywKKzB4MDEsIDB4RjIsIDB4MDUsIDB4QzAsIDB4NDMsIDB4MjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDIwLCAweDdELCAweDAwLCAweEYzLCAweDE5LCAweEY4LCAweDI3LCAweDc4LCAweDlGLCAweEMwLCAweDdELAorMHgwMCwgMHhGMywgMHgwMSwgMHhCQywgMHgwNiwgMHgzMCwgMHgxRiwgMHhDMCwgMHg2RiwgMHgwMCwgMHg2MywgMHg4MywgMHhDQywKKzB4MDQsIDB4RjAsIDB4MTcsIDB4QzQsIDB4NzgsIDB4MDAsIDB4QjMsIDB4MDEsIDB4Q0UsIDB4MjUsIDB4MzAsIDB4MUYsIDB4QzAsCisweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE1LCAweDE4LCAweDM5LAorMHgxQSwgMHhFQiwgMHgzOCwgMHhCNCwgMHgwMywgMHg3MCwgMHgwRSwgMHg0MCwgMHgzOCwgMHgwMiwgMHhFMSwgMHgwMCwgMHhCNCwKKzB4ODAsIDB4MTAsIDB4MEUsIDB4NDAsIDB4M0IsIDB4MDEsIDB4NjUsIDB4MDAsIDB4ODQsIDB4MDgsIDB4RDAsIDB4NTYsIDB4NDAsCisweDM5LCAweDAwLCAweEExLCAweDAyLCAweDg0LCAweDI4LCAweDEwLCAweDYyLCAweEMwLCAweDU2LCAweDYwLCAweDA0LCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzRCwgMHgwNCwgMHhFMSwgMHg4OCwgMHhCNCwKKzB4MDMsIDB4RDgsIDB4MDYsIDB4NDUsIDB4MzEsIDB4NDAsIDB4RTksIDB4MDAsIDB4QjQsIDB4MjMsIDB4OTAsIDB4MDYsIDB4NDAsCisweDIzLCAweDgwLCAweEE5LCAweDAwLCAweDg0LCAweDAwLCAweEQwLCAweDRDLCAweDQwLCAweDNFLCAweDAwLCAweDA1LCAweDA4LAorMHgwNSwgMHg4MSwgMHgxMCwgMHgwNiwgMHg0MCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDQsIDB4MjAsIDB4NzUsIDB4MDAsIDB4RDgsIDB4MDAsIDB4NzQsIDB4MDcsIDB4REEsIDB4MTksIDB4NDEsCisweDMwLCAweDAwLCAweEM5LCAweDAwLCAweDM0LCAweDAxLCAweDkzLCAweDI1LCAweDQwLCAweDI3LCAweDAwLCAweDFELCAweDAwLAorMHgwNCwgMHgyMCwgMHhEMCwgMHgwOCwgMHg0MCwgMHg3MSwgMHg0MCwgMHg0NSwgMHgwMSwgMHg0NCwgMHg4MCwgMHgxOCwgMHgyMSwKKzB4NDAsIDB4MTMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTUsIDB4QTgsCisweDdELCAweDAwLCAweEYzLCAweDAxLCAweEZDLCAweDEzLCAweEYwLCAweDAxLCAweEM0LCAweDNELCAweDAwLCAweEZCLCAweDgwLAorMHg3RSwgMHgwMSwgMHhCMCwgMHg1RCwgMHhDMCwgMHgyNywgMHgwMCwgMHgxQiwgMHgwMCwgMHg0RCwgMHg4NCwgMHhGMCwgMHgwOSwKKzB4QzAsIDB4N0MsIDB4MDQsIDB4RDUsIDB4MTMsIDB4NEMsIDB4M0UsIDB4MzYsIDB4MjksIDB4QzAsIDB4NTUsIDB4MjAsIDB4MDYsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDM3LCAweDAwLCAweERGLCAweDQwLAorMHg3QywgMHg0MywgMHg3MCwgMHgwMSwgMHhDMCwgMHgzNywgMHgwMCwgMHhENywgMHgwMCwgMHgzRSwgMHgwOCwgMHg3MiwgMHgwMSwKKzB4QzAsIDB4MzcsIDB4MDAsIDB4MTcsIDB4MDIsIDB4N0MsIDB4MDEsIDB4RjAsIDB4MDEsIDB4QzAsIDB4MzcsIDB4MEMsIDB4REEsCisweDA0LCAweDdDLCAweDBBLCAweEYwLCAweDI5LCAweDgwLCAweDA2LCAweDAwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHg4NCwgMHgwOCwgMHgzRiwgMHgwMCwgMHhGMywgMHgwMCwgMHhDRSwgMHg4MywgMHgzMCwgMHgwMSwKKzB4QzAsIDB4MzgsIDB4MDAsIDB4RjMsIDB4MDAsIDB4RkUsIDB4ODMsIDB4MzIsIDB4MUYsIDB4QzEsIDB4MkMsIDB4MTAsIDB4MzMsCisweDAwLCAweENDLCAweDE0LCAweEYwLCAweDBCLCAweDgwLCAweDNCLCAweDAwLCAweDYzLCAweDA4LCAweENDLCAweDAyLCAweEYwLAorMHgwOSwgMHhEMSwgMHgxMCwgMHgyMiwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4NSwKKzB4MjAsIDB4MzYsIDB4MDAsIDB4RDEsIDB4MjAsIDB4NDQsIDB4MDMsIDB4MTgsIDB4MTEsIDB4NDAsIDB4MzUsIDB4MDAsIDB4RDEsCisweDAwLCAweDc0LCAweDEyLCAweDUwLCAweDIxLCAweEMwLCAweDI2LCAweDAwLCAweDFCLCAweDIzLCAweDZDLCAweDA5LCAweEQwLAorMHgyMSwgMHgwMCwgMHgzNywgMHgwMCwgMHg5MSwgMHgwMiwgMHg0NCwgMHgwNCwgMHgxMCwgMHgxOSwgMHg0MCwgMHgxNCwgMHgwMCwKKzB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4QTAsIDB4MzQsIDB4MTAsIDB4RDEsCisweDAwLCAweDQ0LCAweDAzLCAweDEwLCAweDE5LCAweDQwLCAweDM0LCAweDQwLCAweEQxLCAweDAwLCAweDU0LCAweDEwLCAweDUwLAorMHg0OSwgMHg0MCwgMHgyNCwgMHgwMCwgMHgzMSwgMHgxMSwgMHg0NCwgMHgwMCwgMHhEMCwgMHgxNSwgMHg0MCwgMHgzNywgMHgwMCwKKzB4OTEsIDB4MDAsIDB4NDQsIDB4ODYsIDB4NTAsIDB4MTksIDB4NDAsIDB4MDQsIDB4MDgsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDJBLCAweDMwLCAweDAwLCAweEMxLCAweDAwLCAweDA0LCAweDgzLCAweDEwLAorMHgwOCwgMHg0OCwgMHgzMSwgMHgwMCwgMHhDMSwgMHgwMCwgMHgzNCwgMHgwMCwgMHgxMCwgMHgwMSwgMHg0MCwgMHgzNiwgMHg4MCwKKzB4MTksIDB4MDAsIDB4MjAsIDB4MDEsIDB4RDAsIDB4NDQsIDB4NDQsIDB4MzMsIDB4MDAsIDB4MDEsIDB4NjAsIDB4MDQsIDB4ODIsCisweDEyLCAweDA4LCAweDQwLCAweDQwLCAweEExLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgzMCwgMHgzQywgMHgwOCwgMHhGMywgMHgwMCwgMHhDNCwgMHgwMywgMHgxMCwgMHgwMSwgMHg0MCwgMHgzQywgMHgwMCwKKzB4RjMsIDB4MDAsIDB4N0MsIDB4MDMsIDB4NzAsIDB4MDksIDB4QzAsIDB4MjQsIDB4MDAsIDB4MzMsIDB4MDAsIDB4NEMsIDB4MDAsCisweEYxLCAweDRELCAweEMxLCAweDM3LCAweDQwLCAweDEzLCAweDAwLCAweDRELCAweDAyLCAweDcwLCAweDAxLCAweEMwLCAweDAwLAorMHhDNCwgMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHhBOCwgMHgzQiwgMHgwMCwKKzB4RkYsIDB4MDAsIDB4RkMsIDB4MDMsIDB4RjAsIDB4MEIsIDB4QzAsIDB4M0YsIDB4MDAsIDB4RkYsIDB4NDAsIDB4RjQsIDB4MDAsCisweEYxLCAweDAzLCAweEM4LCAweDJGLCAweDAwLCAweDNFLCAweDIwLCAweEZDLCAweDgxLCAweEYwLCAweDAxLCAweEMwLCAweDNGLAorMHgyMCwgMHgzRiwgMHgwMCwgMHhGRCwgMHgwMCwgMHhFMCwgMHgwMywgMHhDMCwgMHgxNywgMHgyMCwgMHgwRSwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4QTAsIDB4M0IsIDB4MDQsIDB4RkYsIDB4QzAsIDB4RkMsIDB4NDMsCisweEIyLCAweDRGLCAweEMwLCAweDNELCAweDAwLCAweEVGLCAweDA0LCAweEVDLCAweDIzLCAweEYxLCAweDEyLCAweEMwLCAweDM1LAorMHgwMywgMHg3QiwgMHgwMSwgMHhGQywgMHg0MiwgMHhCMCwgMHgxMywgMHhDMCwgMHgyRSwgMHgwMCwgMHhCQiwgMHgwMSwgMHhFQywKKzB4ODYsIDB4MzAsIDB4MDMsIDB4QzAsIDB4MEYsIDB4MDAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAxLCAweDA4LCAweEZGLCAweDAwLCAweEZELCAweDBDLCAweEY0LCAweDhGLCAweEQwLCAweDlGLCAweDQ4LCAweEZDLAorMHgyMiwgMHhERCwgMHgwMywgMHhDNCwgMHgzQiwgMHhEMiwgMHgxOSwgMHg0MCwgMHhCNCwgMHgwMSwgMHg5MSwgMHhFMSwgMHg3NCwKKzB4MEUsIDB4MTAsIDB4MDUsIDB4NDMsIDB4NzQsIDB4MDAsIDB4OTEsIDB4MDEsIDB4NDQsIDB4MDMsIDB4MTMsIDB4MTEsIDB4NDgsCisweDA3LCAweDIwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDExLCAweEEwLCAweDMzLAorMHgxOCwgMHhDRCwgMHg1MCwgMHgzNCwgMHgwMywgMHhDMCwgMHgwQywgMHg0MCwgMHgzMiwgMHgwMCwgMHhDRCwgMHg0MiwgMHgyNCwKKzB4MTMsIDB4RDIsIDB4MDEsIDB4NjAsIDB4QjEsIDB4MDAsIDB4Q0QsIDB4MDAsIDB4MzQsIDB4MDIsIDB4RDAsIDB4NDEsIDB4NDAsCisweDIyLCAweDAwLCAweDRELCAweDAwLCAweDc0LCAweDA0LCAweDEwLCAweDAwLCAweDQwLCAweDQ3LCAweDgwLCAweDBFLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHhBOCwgMHgzNCwgMHgwOCwgMHhERCwgMHgwMCwgMHg3NCwKKzB4ODMsIDB4RDAsIDB4MEQsIDB4NDAsIDB4MzYsIDB4MDgsIDB4REQsIDB4MDAsIDB4NDQsIDB4ODMsIDB4RDAsIDB4MTEsIDB4NDgsCisweDM0LCAweDA4LCAweDk5LCAweDAwLCAweDc0LCAweDA3LCAweDUxLCAweDgxLCAweDQxLCAweDM0LCAweDAwLCAweEQ1LCAweDA4LAorMHg1NiwgMHg5MSwgMHgxMCwgMHgxOSwgMHg0MCwgMHgwRiwgMHgyMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4QTgsIDB4MzcsIDB4MDAsIDB4REYsIDB4MDAsIDB4N0MsIDB4MDMsIDB4QTAsIDB4MEQsIDB4QzAsCisweDM2LCAweDIwLCAweERGLCAweDIwLCAweDZDLCAweDAzLCAweEYyLCAweDM4LCAweEM4LCAweDM1LCAweDMwLCAweERCLCAweDA4LAorMHg3QywgMHgwMiwgMHhGMCwgMHgzNSwgMHg4NiwgMHg2MiwgMHgwMCwgMHhDRiwgMHgwMywgMHgzQywgMHgwNywgMHgzMCwgMHgxMSwKKzB4QzAsIDB4MDMsIDB4MjAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4ODAsCisweDNELCAweDI0LCAweEZGLCAweDAwLCAweEZDLCAweDAzLCAweEYwLCAweDBGLCAweEMwLCAweDNDLCAweDAwLCAweEZGLCAweDAwLAorMHhGQywgMHgwMywgMHhFMCwgMHgwQiwgMHg4MCwgMHgzNiwgMHgwMCwgMHhCNSwgMHgwMCwgMHhCQywgMHg0MywgMHhCMCwgMHgxNywKKzB4QzAsIDB4N0YsIDB4MEEsIDB4RkIsIDB4MDAsIDB4RUMsIDB4MDEsIDB4RjIsIDB4MEIsIDB4QzAsIDB4MUYsIDB4MDAsIDB4MDYsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweDA4LCAweDM1LCAweDAwLCAweEQ3LCAweDA0LAorMHg3QywgMHgwMywgMHg3MSwgMHgwRCwgMHhDMCwgMHgzNywgMHgwMCwgMHhERiwgMHgwMCwgMHg1QywgMHgwMywgMHhGMCwgMHgyMSwKKzB4QzAsIDB4MzUsIDB4MDAsIDB4RDcsIDB4MDAsIDB4N0MsIDB4MjIsIDB4RjAsIDB4MjEsIDB4QzAsIDB4MjcsIDB4MDAsIDB4NUYsCisweDAwLCAweDdDLCAweDExLCAweDMwLCAweDgxLCAweEMwLCAweDBCLCAweDIwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgxMywgMHhBMCwgMHgzQywgMHgwMCwgMHhGMSwgMHg4MiwgMHhGNCwgMHg4RiwgMHgxOCwgMHg1RSwKKzB4NDQsIDB4RkYsIDB4MjQsIDB4RUQsIDB4MDIsIDB4QzQsIDB4MDMsIDB4RDIsIDB4ODEsIDB4NDEsIDB4N0MsIDB4MDAsIDB4OUIsCisweDAwLCAweDc0LCAweDBGLCAweEMwLCAweDAwLCAweDQwLCAweDM3LCAweDAwLCAweERDLCAweDA5LCAweDQwLCAweDA5LCAweDEwLAorMHgwOSwgMHg0MCwgMHg0RiwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNywKKzB4QTAsIDB4RjIsIDB4MDAsIDB4QzUsIDB4MDEsIDB4MzQsIDB4MTcsIDB4NTEsIDB4MEMsIDB4NDAsIDB4QjIsIDB4MDQsIDB4Q0QsCisweDEwLCAweDE0LCAweDAzLCAweEQwLCAweDAwLCAweDQwLCAweDM3LCAweDAyLCAweDA1LCAweDAwLCAweDM0LCAweDBCLCAweEMwLAorMHgwMCwgMHg0QSwgMHgzMywgMHgxMCwgMHg0QywgMHgwMSwgMHgxNCwgMHgwMywgMHgxMCwgMHgwMCwgMHg0MSwgMHgxRiwgMHgwMCwKKzB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDYsIDB4ODAsIDB4NzgsIDB4MDYsIDB4RTEsCisweEIxLCAweEI0LCAweDA3LCAweDEwLCAweDFFLCAweDQwLCAweDdCLCAweDIwLCAweEVELCAweDg5LCAweDk0LCAweDA3LCAweEQwLAorMHgxRSwgMHg0MiwgMHg3QSwgMHgwMSwgMHhBOSwgMHg4MSwgMHhCNCwgMHg4NywgMHhEMCwgMHgxNiwgMHg0MCwgMHg2QiwgMHgwMCwKKzB4NkQsIDB4MzEsIDB4QzAsIDB4MDcsIDB4MTAsIDB4MTIsIDB4NDAsIDB4MUIsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDEwLCAweDMwLCAweDAwLCAweEM3LCAweDA4LCAweDNDLCAweDQzLCAweDUwLAorMHgwQywgMHhDMCwgMHgzMywgMHgwMCwgMHhDRiwgMHgyMCwgMHgxQywgMHgwMywgMHhGMCwgMHg0MCwgMHhDMCwgMHg3MywgMHg4MSwKKzB4QzcsIDB4MDAsIDB4M0MsIDB4MzIsIDB4RjAsIDB4NDAsIDB4QzAsIDB4MzMsIDB4MDAsIDB4NEYsIDB4MjIsIDB4MUMsIDB4MTIsCisweDMwLCAweDg0LCAweEMwLCAweDRCLCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMiwgMHhCOCwgMHgzRCwgMHgwMCwgMHhGRiwgMHg0MCwgMHhCQywgMHgyQiwgMHhCMSwgMHgwRiwgMHhDMCwgMHgzRiwgMHgwMCwKKzB4RkYsIDB4OTAsIDB4RTQsIDB4MDMsIDB4RjAsIDB4MEIsIDB4QzAsIDB4M0QsIDB4MDAsIDB4QjcsIDB4MDAsIDB4RkMsIDB4NjMsCisweEYwLCAweDA3LCAweEMwLCAweDJGLCAweDAyLCAweDZGLCAweDAwLCAweDFDLCAweDAzLCAweEYwLCAweDhELCAweEMyLCAweDBCLAorMHg0MCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwgMHhBOCwgMHg3MywgMHgwMSwKKzB4REIsIDB4MEEsIDB4N0MsIDB4OTcsIDB4MzksIDB4NkQsIDB4QzEsIDB4QjcsIDB4MDEsIDB4REYsIDB4MDAsIDB4NUMsIDB4NEIsCisweDcxLCAweDE4LCAweEMwLCAweDM2LCAweDIwLCAweDlGLCAweDIwLCAweDdDLCAweDAyLCAweEYwLCAweDA1LCAweEMwLCAweDMyLAorMHgwMCwgMHg1QiwgMHgwMCwgMHg3QywgMHgwMywgMHgzNiwgMHgwNSwgMHhDMCwgMHg1NywgMHgwMCwgMHgwRSwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4ODgsIDB4QjksIDB4MDUsIDB4RTEsIDB4NTQsIDB4QjQsIDB4MTMsCisweDE4LCAweDJFLCAweDYwLCAweEJCLCAweDAzLCAweEVELCAweDA0LCAweDA0LCAweDAzLCAweDEwLCAweDBFLCAweDYwLCAweDM4LAorMHgwMSwgMHhBNywgMHgwMCwgMHhCNCwgMHgxMywgMHhEMCwgMHgwNywgMHg0MiwgMHgyOCwgMHgxMCwgMHg2MSwgMHgyMCwgMHhCNCwKKzB4MDEsIDB4MTAsIDB4MEUsIDB4NDAsIDB4NEIsIDB4MjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAzLCAweDAwLCAweDc5LCAweDAwLCAweEU5LCAweDA1LCAweDM0LCAweDI3LCAweDEyLCAweDVFLCAweDQwLCAweDdCLAorMHgwMCwgMHhDRCwgMHgwNSwgMHg5NCwgMHgyNywgMHg1MiwgMHgxQSwgMHg2NCwgMHg3QSwgMHgwMiwgMHhFRCwgMHgwMSwgMHhCNCwKKzB4MEUsIDB4RDAsIDB4MUUsIDB4NDAsIDB4N0EsIDB4MjAsIDB4NkQsIDB4MjEsIDB4RjQsIDB4MDcsIDB4MTAsIDB4MTYsIDB4NDAsCisweDBGLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDIwLCAweDMzLAorMHgwOCwgMHhDMSwgMHgwMCwgMHgzNCwgMHg4MywgMHgxMCwgMHgwQywgMHg0MCwgMHgzMywgMHgxMCwgMHhDRCwgMHgyMCwgMHgwNCwKKzB4MDMsIDB4MTAsIDB4MEMsIDB4NDAsIDB4MzIsIDB4MDAsIDB4ODUsIDB4MDAsIDB4MzQsIDB4MDMsIDB4RDAsIDB4MjUsIDB4NDEsCisweDIwLCAweDAwLCAweDQ1LCAweDA4LCAweDM0LCAweDhGLCAweDEwLCAweEVDLCAweDQwLCAweDRCLCAweDIwLCAweDBDLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNywgMHhBMCwgMHgxNSwgMHgwMCwgMHg1QiwgMHgyMCwgMHg3QywKKzB4MDEsIDB4MzUsIDB4MDUsIDB4QzAsIDB4MTcsIDB4MDAsIDB4NUYsIDB4MDAsIDB4NUMsIDB4MDEsIDB4NzAsIDB4MjcsIDB4QzIsCisweDE2LCAweDAwLCAweDdGLCAweDIyLCAweDdDLCAweDAxLCAweEY4LCAweDI3LCAweEQzLCAweDE2LCAweDIwLCAweDZGLCAweDIwLAorMHhGNCwgMHgwRCwgMHgzMCwgMHgxNywgMHhDMiwgMHg1RiwgMHgyMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MTIsIDB4MDAsIDB4MDcsIDB4MDAsIDB4MUYsIDB4MDIsIDB4N0MsIDB4MDgsIDB4RjAsIDB4MjEsIDB4QzQsCisweDg3LCAweDAwLCAweDFGLCAweDAwLCAweDdDLCAweDAwLCAweEYwLCAweDIxLCAweEMwLCAweDA1LCAweDAwLCAweDE3LCAweDA0LAorMHg3QywgMHgwOCwgMHhGMiwgMHgwMSwgMHhDMCwgMHg4NywgMHgwMCwgMHgxQSwgMHgwMiwgMHg3NCwgMHg2MCwgMHhGMCwgMHgwMSwKKzB4QzAsIDB4NEIsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsCisweDI3LCAweDAyLCAweDlGLCAweDA5LCAweDdDLCAweDA2LCAweEYwLCAweDE5LCAweEMwLCAweDY3LCAweDgwLCAweDgzLCAweDA4LAorMHg1QywgMHgwMiwgMHgzMCwgMHg5OSwgMHhDMywgMHgyMywgMHgwMCwgMHg5MiwgMHgwMCwgMHgwQywgMHg4NiwgMHg3MCwgMHgwOSwKKzB4QzAsIDB4MjEsIDB4MDEsIDB4OTMsIDB4MDQsIDB4NUMsIDB4MDYsIDB4MzIsIDB4MDgsIDB4QzIsIDB4NDAsIDB4MjAsIDB4MEMsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDIwLCAweEU2LCAweDAwLCAweDlELCAweDAzLAorMHg3NCwgMHgwMiwgMHhEMCwgMHhBOSwgMHg0MSwgMHhFMywgMHgwNCwgMHg5QiwgMHgwMSwgMHg0NCwgMHgwMiwgMHgxMCwgMHgwOSwKKzB4NDAsIDB4MjcsIDB4MDAsIDB4ODEsIDB4MDAsIDB4QzQsIDB4MEEsIDB4QjAsIDB4MDksIDB4NDAsIDB4QTQsIDB4MDAsIDB4OTUsCisweDAwLCAweDA0LCAweDBFLCAweDEwLCAweDA5LCAweDQwLCAweDA1LCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHg4OCwgMHgyNCwgMHgwNCwgMHg5RCwgMHgxMCwgMHg3NCwgMHgyMiwgMHhEMCwgMHgwOSwKKzB4NDAsIDB4MjcsIDB4MDEsIDB4OTEsIDB4MDAsIDB4MTQsIDB4MDIsIDB4MTQsIDB4MEQsIDB4NDEsIDB4MjcsIDB4NDEsIDB4OTUsCisweDAwLCAweDU0LCAweDEyLCAweDUwLCAweDA5LCAweDQwLCAweEE1LCAweDAwLCAweDkxLCAweDAwLCAweDU0LCAweDEyLCAweDE0LAorMHg4OSwgMHg0MCwgMHg2MCwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwKKzB4MjAsIDB4MjAsIDB4MDUsIDB4OEQsIDB4MzQsIDB4MzYsIDB4NTIsIDB4RDIsIDB4MDgsIDB4NDAsIDB4MjMsIDB4NDAsIDB4ODksCisweEMwLCAweDA0LCAweDIyLCAweDEwLCAweDA4LCAweDQwLCAweEEzLCAweDAwLCAweDk1LCAweDAyLCAweDE0LCAweDAzLCAweDkwLAorMHg4OCwgMHg0MCwgMHgyMCwgMHgwNSwgMHg5NCwgMHgwMCwgMHg0NCwgMHgwNiwgMHgxMCwgMHg0OCwgMHg0MSwgMHg0MSwgMHg4MCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MUQsIDB4QjAsIDB4MDYsIDB4MDEsIDB4MUYsCisweDI0LCAweDdDLCAweDkxLCAweEYwLCAweDQxLCAweEMxLCAweDA3LCAweDA1LCAweDExLCAweDU0LCAweDVDLCAweDU4LCAweDMwLAorMHgwMSwgMHhDQSwgMHgwNywgMHgwNSwgMHgxNywgMHgwMCwgMHg1RCwgMHgwNCwgMHg3MCwgMHgyMSwgMHhDMCwgMHgwNSwgMHgwMSwKKzB4NTMsIDB4MDAsIDB4NUMsIDB4MDAsIDB4MzAsIDB4NDUsIDB4QzAsIDB4NzQsIDB4QzAsIDB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE5LCAweEI4LCAweDI3LCAweDAwLCAweDlGLCAweDU0LCAweDdDLCAweDAyLCAweEYwLAorMHgwOSwgMHhDMCwgMHgyNywgMHgwMCwgMHg5NywgMHgwMCwgMHg3QywgMHgxMiwgMHhGMiwgMHgwQiwgMHhDMCwgMHg2NywgMHgwMCwKKzB4QkIsIDB4MDEsIDB4RUMsIDB4MEEsIDB4NzAsIDB4NEIsIDB4QzgsIDB4MkYsIDB4MDAsIDB4RkYsIDB4MDAsIDB4QUUsIDB4NTIsCisweEY0LCAweDBCLCAweEMwLCAweDY3LCAweDYwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgxOSwgMHhBOCwgMHg2RiwgMHgwNCwgMHhCRiwgMHgzNiwgMHhGQywgMHg0MiwgMHhGMCwgMHgwQSwgMHhDMCwgMHgyQywgMHgwMCwKKzB4QkYsIDB4OTAsIDB4N0YsIDB4MzIsIDB4RjAsIDB4MEYsIDB4QzAsIDB4QUYsIDB4MDQsIDB4OUYsIDB4MDIsIDB4Q0QsIDB4ODYsCisweDM0LCAweDg5LCAweEMwLCAweDJGLCAweDAwLCAweEFGLCAweDAwLCAweEZDLCAweDAyLCAweDMwLCAweDBCLCAweEMwLCAweDY0LAorMHgwMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxQywgMHgxOCwgMHgwNywgMHgwMCwKKzB4MUQsIDB4MDIsIDB4NzQsIDB4MDgsIDB4RDAsIDB4QTEsIDB4NTIsIDB4ODQsIDB4MDIsIDB4MUQsIDB4MDIsIDB4NDQsIDB4MDAsCisweDcwLCAweDA1LCAweDQwLCAweEM3LCAweDAwLCAweDFELCAweDAxLCAweDQ0LCAweDg4LCAweDEwLCAweDA1LCAweDQ4LCAweDA0LAorMHgwMCwgMHgxRCwgMHgwMCwgMHg3NCwgMHgwMCwgMHgxMCwgMHgwMSwgMHg0MCwgMHg3MCwgMHgyMCwgMHgwQywgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4QTAsIDB4MjMsIDB4MDAsIDB4OEQsIDB4MDQsIDB4MzQsIDB4MDIsCisweEQwLCAweDA4LCAweDQwLCAweDIwLCAweDAwLCAweDhELCAweDAwLCAweDE0LCAweDFBLCAweEQwLCAweDA4LCAweDYyLCAweDIzLAorMHgwMCwgMHg4RCwgMHgwMCwgMHgwNCwgMHgwQSwgMHgxMCwgMHg0OCwgMHg0MCwgMHgyMiwgMHgwMCwgMHg4RCwgMHgwMCwgMHg3NCwKKzB4MDMsIDB4MTAsIDB4MDgsIDB4NDAsIDB4NDAsIDB4ODAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDE4LCAweEEwLCAweDI1LCAweDAwLCAweDlELCAweEEwLCAweDc0LCAweDAyLCAweEQwLCAweDA5LCAweDQwLCAweDI0LAorMHgyMCwgMHg5RCwgMHgwMCwgMHg0NCwgMHgwMiwgMHg1MCwgMHgwOSwgMHg0OCwgMHgyNywgMHgwMCwgMHg4RCwgMHgwMCwgMHg0NCwKKzB4MDIsIDB4MTEsIDB4ODksIDB4NDAsIDB4MjQsIDB4MDAsIDB4OUQsIDB4MDAsIDB4NzQsIDB4MDIsIDB4MTAsIDB4MjksIDB4NDAsCisweDYwLCAweDI4LCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweEE4LCAweDI3LAorMHgxMCwgMHg5RiwgMHgwMCwgMHg3OCwgMHgwMiwgMHhGMCwgMHgwOSwgMHhDMCwgMHgyNCwgMHgwOCwgMHg5RiwgMHgwMCwgMHg3QywKKzB4MDIsIDB4RjAsIDB4MDksIDB4NDAsIDB4MkYsIDB4MDAsIDB4QkUsIDB4MDcsIDB4NEMsIDB4MDIsIDB4MzEsIDB4MzksIDB4QzIsCisweDI3LCAweDAwLCAweDlGLCAweDAwLCAweDNDLCAweDE2LCAweDIwLCAweDA5LCAweEQwLCAweDE0LCAweDIwLCAweDA0LCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwMCwgMHgyNCwgMHgwMCwgMHg5RiwgMHg4MCwgMHg3QywKKzB4NDIsIDB4RjAsIDB4MDgsIDB4RTAsIDB4MjcsIDB4MEMsIDB4OEYsIDB4MTAsIDB4N0QsIDB4MDIsIDB4RjAsIDB4MzksIDB4QzAsCisweDI3LCAweDAwLCAweDlGLCAweDAyLCAweDdDLCAweDRBLCAweEYwLCAweDA5LCAweEMwLCAweDI3LCAweDAwLCAweDlGLCAweDIzLAorMHg3QywgMHgxNiwgMHhGNCwgMHg1OSwgMHhDMCwgMHg1MywgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MTQsIDB4MDgsIDB4MDUsIDB4MDEsIDB4MUYsIDB4MDAsIDB4NEMsIDB4MjAsIDB4MzAsIDB4NDEsIDB4QzAsCisweDA0LCAweDAwLCAweDEyLCAweDAwLCAweDVDLCAweDgwLCAweDMwLCAweDAxLCAweEMwLCAweDA3LCAweDAwLCAweDEzLCAweDAyLAorMHg3QywgMHgwMCwgMHhGMCwgMHgyMSwgMHhDMCwgMHgwNywgMHgyNCwgMHgxRiwgMHgyMiwgMHg1QywgMHgwMCwgMHgzMCwgMHg0MSwKKzB4QzAsIDB4NTAsIDB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDAsCisweERDLCAweDA0LCAweDdELCAweDAwLCAweEM0LCAweDA5LCAweEYwLCAweDE3LCAweDQ0LCAweERELCAweDRDLCAweDcxLCAweDAzLAorMHg0NCwgMHgwMSwgMHgxMCwgMHg3NywgMHhDMCwgMHg1NSwgMHgwMCwgMHg1QiwgMHgwMCwgMHhCNCwgMHgxMSwgMHhEMCwgMHgwNSwKKzB4NDAsIDB4NUYsIDB4MDAsIDB4N0QsIDB4MDMsIDB4QzQsIDB4MDEsIDB4NTAsIDB4MzYsIDB4NDAsIDB4NTAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweEEwLCAweEUyLCAweDAwLCAweENELCAweDQ1LAorMHgxNCwgMHgwQSwgMHgxMCwgMHgyNCwgMHg0MCwgMHg3MCwgMHg4MCwgMHg4MSwgMHgwMCwgMHgxNCwgMHgwMywgMHgxMCwgMHg0OCwKKzB4NDAsIDB4MzMsIDB4MDAsIDB4QzUsIDB4MDAsIDB4MzQsIDB4MDIsIDB4RDAsIDB4MEQsIDB4NDIsIDB4QTMsIDB4MDAsIDB4OEQsCisweDEyLCAweDE0LCAweDAzLCAweDEwLCAweDhDLCAweDQwLCAweDUwLCAweDAwLCAweDBBLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHg4MCwgMHgzOCwgMHgwMCwgMHhFRCwgMHgwMywgMHg5NCwgMHgwNSwgMHg1MSwgMHgyMiwKKzB4NDAsIDB4NjEsIDB4MDAsIDB4ODEsIDB4MTAsIDB4ODQsIDB4MTcsIDB4MTQsIDB4MEEsIDB4NDAsIDB4RkQsIDB4MDEsIDB4RUQsCisweDA0LCAweEI0LCAweDAyLCAweEQwLCAweDRFLCAweDAwLCAweDJCLCAweDA0LCAweEJELCAweDExLCAweDg0LCAweDAzLCAweDUyLAorMHgwMCwgMHg0MCwgMHgxMCwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwKKzB4MTAsIDB4NjgsIDB4MDAsIDB4Q0YsIDB4MDEsIDB4MTUsIDB4MDQsIDB4MTAsIDB4MTYsIDB4RTAsIDB4NzgsIDB4ODgsIDB4QTMsCisweDAxLCAweERDLCAweDQ3LCAweDMwLCAweDFFLCAweEU4LCAweDdGLCAweDAxLCAweEU3LCAweDAzLCAweEJDLCAweDA2LCAweEYwLAorMHgxRSwgMHhDMCwgMHg2QiwgMHgwMCwgMHhBRiwgMHg0MSwgMHhEQywgMHgwNywgMHgzMiwgMHgxRSwgMHhDMCwgMHg1MCwgMHg0MCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4QjgsIDB4MzUsIDB4MDAsIDB4NUYsCisweDAwLCAweDZDLCAweDAxLCAweEYwLCAweDAxLCAweEMyLCAweDI3LCAweDAwLCAweDlGLCAweDIwLCAweDdFLCAweDIzLCAweEYwLAorMHgwOSwgMHhDMCwgMHgzNywgMHgxMiwgMHhEQiwgMHgwMCwgMHg3QywgMHgwMiwgMHhGMCwgMHg4RCwgMHhDMCwgMHgyNywgMHgwMCwKKzB4OUYsIDB4MDAsIDB4N0MsIDB4MDEsIDB4RjAsIDB4MEQsIDB4RDAsIDB4NDMsIDB4NjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweEEwLCAweDZGLCAweDQwLCAweDczLCAweDgxLCAweEU0LCAweDA0LCAweEYxLAorMHgxNywgMHhDMCwgMHg3OCwgMHgwMCwgMHhGMywgMHgwMSwgMHhGQywgMHgwNywgMHhGMCwgMHgxQiwgMHhDMCwgMHg2RiwgMHg4MCwKKzB4RTcsIDB4MDksIDB4Q0MsIDB4MDcsIDB4RjAsIDB4MUYsIDB4QzIsIDB4N0MsIDB4MDAsIDB4RkYsIDB4MDEsIDB4RkMsIDB4MDcsCisweDMwLCAweDE3LCAweEMwLCAweDA4LCAweDAwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgxNSwgMHg4OCwgMHgyOSwgMHgwMCwgMHg2MSwgMHgwMCwgMHg4NCwgMHgxMCwgMHg3MCwgMHgwMiwgMHg0MCwgMHg5OCwgMHgwMiwKKzB4RTEsIDB4ODAsIDB4QjQsIDB4MDMsIDB4RDAsIDB4MEEsIDB4NDAsIDB4MkIsIDB4ODEsIDB4RTEsIDB4MDAsIDB4ODQsIDB4MDIsCisweEQwLCAweDhFLCAweEMwLCAweDNBLCAweDAwLCAweEVELCAweDAwLCAweEY0LCAweDIzLCAweDE4LCAweDI2LCAweDQwLCAweDU0LAorMHgyMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwMCwgMHgyMSwgMHgwMCwKKzB4RTEsIDB4MDAsIDB4ODQsIDB4MDAsIDB4RDEsIDB4MDgsIDB4NDAsIDB4MzgsIDB4MDAsIDB4RTEsIDB4MDgsIDB4QjQsIDB4MDMsCisweEQwLCAweDBFLCAweDQxLCAweDJCLCAweDMwLCAweEY1LCAweDAxLCAweDg0LCAweDAzLCAweEQwLCAweDBGLCAweDQwLCAweDI4LAorMHgwNCwgMHhBRCwgMHgwMCwgMHhCNCwgMHgwMiwgMHg1MCwgMHgyNiwgMHg0MCwgMHgyMCwgMHgwMSwgMHgwNCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTYsIDB4MjgsIDB4MTMsIDB4MDAsIDB4MTEsIDB4NDAsIDB4MDQsIDB4MDEsCisweDUwLCAweDA4LCAweDRDLCAweDEwLCAweDAwLCAweEM5LCAweDAwLCAweDM0LCAweDAzLCAweEQwLCAweDI0LCAweDQwLCAweDIzLAorMHgwMCwgMHhDMSwgMHgwNCwgMHgwNCwgMHgwNSwgMHhEMCwgMHgyQywgMHg0MCwgMHgyMiwgMHg4MCwgMHg0RCwgMHgwMCwgMHgzNiwKKzB4MEMsIDB4NTAsIDB4MEMsIDB4NTIsIDB4MTgsIDB4MjAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDA1LCAweEE4LCAweDI1LCAweDAwLCAweDkzLCAweDAwLCAweDRDLCAweDAwLCAweEYwLCAweDA1LCAweEM0LCAweDE0LAorMHgwMCwgMHg5MywgMHgwMCwgMHhGQywgMHgwMywgMHhEMCwgMHgwOSwgMHhDNCwgMHgzNywgMHgwMCwgMHhENywgMHgwNCwgMHg0RCwKKzB4MTIsIDB4RjAsIDB4M0YsIDB4QzEsIDB4MjQsIDB4MDAsIDB4OUYsIDB4MEEsIDB4N0MsIDB4MEMsIDB4NzAsIDB4MjksIDB4QzAsCisweDU0LCAweDIwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDM3LAorMHgxMCwgMHg5RiwgMHg4MiwgMHg1QywgMHgwMSwgMHhGMCwgMHgwNSwgMHhDMCwgMHgwMywgMHgwMCwgMHg5NywgMHg4MCwgMHg3RSwKKzB4MDMsIDB4RjAsIDB4MDksIDB4QzAsIDB4MzcsIDB4MDAsIDB4REYsIDB4MDAsIDB4N0MsIDB4MDIsIDB4RjAsIDB4MEQsIDB4QzEsCisweEE3LCAweDAwLCAweDlGLCAweDAwLCAweDdDLCAweDYwLCAweEI0LCAweDI5LCAweEMwLCAweDI3LCAweDAwLCAweDBDLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MSwgMHgwQSwgMHgyQiwgMHgyMCwgMHg5MywgMHg4MCwgMHhDQywKKzB4MDAsIDB4MzAsIDB4MDcsIDB4QzAsIDB4QUYsIDB4MDAsIDB4QTMsIDB4MDksIDB4OEQsIDB4MDMsIDB4MzIsIDB4MEYsIDB4QzEsCisweDc3LCAweDAwLCAweEZCLCAweDAwLCAweENDLCAweDAyLCAweDM0LCAweDBGLCAweDAwLCAweDJFLCAweDAwLCAweEJGLCAweDAwLAorMHhGQywgMHgwMCwgMHgzMCwgMHgwOSwgMHhDMCwgMHgwNywgMHgyQSwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4ODEsIDB4MjEsIDB4MzYsIDB4MDAsIDB4OTEsIDB4MTEsIDB4MTQsIDB4NDEsIDB4NTEsIDB4OTUsIDB4NDAsCisweEE3LCAweDAwLCAweDkxLCAweDAyLCAweDQ0LCAweDAzLCAweDEwLCAweDA5LCAweDQ0LCAweDY3LCAweDAyLCAweERELCAweDAwLAorMHgwNCwgMHgwMiwgMHgzMCwgMHgwRCwgMHg0MCwgMHgyNywgMHgwNCwgMHg5RCwgMHgwMCwgMHgzNCwgMHgxQywgMHgxMCwgMHhCRCwKKzB4NDQsIDB4ODcsIDB4MDIsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4QTAsCisweDI0LCAweDEwLCAweDExLCAweDgxLCAweDY0LCAweDgwLCAweDE4LCAweDA1LCAweDQwLCAweDE3LCAweDAwLCAweDkxLCAweDAyLAorMHg0NCwgMHgwMywgMHgxNCwgMHgwOSwgMHg0MCwgMHgyNywgMHgwMCwgMHhDRCwgMHgwMCwgMHg0NCwgMHgwMywgMHgxMCwgMHgwRCwKKzB4NDAsIDB4MzYsIDB4MDIsIDB4REQsIDB4MDAsIDB4NzQsIDB4MDQsIDB4MTAsIDB4MDEsIDB4NDAsIDB4MDcsIDB4MDAsIDB4MEEsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDI4LCAweDIwLCAweDAwLCAweDAxLCAweDAwLAorMHgxNiwgMHg4MCwgMHg1MCwgMHgwNCwgMHg0MCwgMHgxMywgMHgwMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMywgMHgxMCwgMHgwOCwKKzB4NDgsIDB4QjMsIDB4MjAsIDB4Q0QsIDB4MDAsIDB4MDUsIDB4MDIsIDB4MTAsIDB4MEMsIDB4NDAsIDB4MzMsIDB4MDAsIDB4Q0QsCisweDAwLCAweDc0LCAweDAwLCAweDEwLCAweDBDLCAweDQwLCAweDQzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHhCMCwgMHgyNiwgMHgwMCwgMHg5MywgMHgwMCwgMHg0QywgMHgwMCwgMHgzMCwgMHgwOSwKKzB4QzAsIDB4MjcsIDB4MDAsIDB4RDEsIDB4MDAsIDB4Q0MsIDB4MDMsIDB4MzAsIDB4MEQsIDB4QzAsIDB4MjcsIDB4MDgsIDB4RkIsCisweDAwLCAweDRDLCAweDAzLCAweDMwLCAweDBELCAweEMwLCAweDE2LCAweDAwLCAweDlGLCAweDAwLCAweDdDLCAweDAwLCAweDMwLAorMHgwMSwgMHhDNCwgMHgwNywgMHg0MCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwKKzB4QTgsIDB4MUYsIDB4MDAsIDB4QkYsIDB4MDAsIDB4RkMsIDB4MDEsIDB4RjAsIDB4MEIsIDB4QzAsIDB4MEYsIDB4MDAsIDB4N0YsCisweDQwLCAweEZDLCAweDAzLCAweEYxLCAweDA3LCAweEMwLCAweDJGLCAweDAxLCAweEZGLCAweDAwLCAweEZDLCAweDAxLCAweDcwLAorMHgwRSwgMHhDMCwgMHgxRiwgMHgwMCwgMHg3RiwgMHgwMCwgMHhGQywgMHgwMCwgMHhGMCwgMHgwRiwgMHhDMCwgMHgxNywgMHg2MCwKKzB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4ODgsIDB4N0IsIDB4MjIsIDB4RkIsCisweDI5LCAweEVDLCAweDI3LCAweEYwLCAweDlGLCAweEM0LCAweDdDLCAweDAyLCAweEVGLCAweDA5LCAweENDLCAweDA3LCAweDMwLAorMHg5RiwgMHhDMCwgMHg3QywgMHgwMCwgMHhFMywgMHgwMSwgMHhDQywgMHgwNywgMHhGMCwgMHg5RiwgMHhDMCwgMHg3QywgMHgwMCwKKzB4RUYsIDB4MDksIDB4Q0MsIDB4MDcsIDB4RjAsIDB4MUYsIDB4QzAsIDB4MEYsIDB4MDAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweDE4LCAweDA3LCAweDAwLCAweDExLCAweDA0LCAweDRDLCAweDAwLCAweEQxLAorMHgwMSwgMHgwMCwgMHgwNCwgMHgzMSwgMHgxRCwgMHgwNCwgMHg0NCwgMHgwNCwgMHg1MCwgMHg0MSwgMHgwMCwgMHgwNSwgMHgwNSwKKzB4MTEsIDB4MDAsIDB4NUMsIDB4MTAsIDB4RDAsIDB4NDEsIDB4NDAsIDB4MDAsIDB4MjUsIDB4MUQsIDB4MDQsIDB4NDQsIDB4MDAsCisweEQwLCAweDAxLCAweDQwLCAweDBGLCAweDAwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgxMywgMHhBMCwgMHgzNSwgMHgwMCwgMHhEOSwgMHgwMCwgMHgyNCwgMHgxMywgMHg1MiwgMHg0QywgMHg0MiwgMHgzMSwgMHgwMSwKKzB4Q0QsIDB4MDQsIDB4NDQsIDB4ODMsIDB4NTAsIDB4MEQsIDB4MEEsIDB4MzAsIDB4MDAsIDB4RDUsIDB4MDAsIDB4MDQsIDB4NDMsCisweEQwLCAweDRDLCAweDYwLCAweDMwLCAweDAwLCAweENELCAweDAwLCAweDA1LCAweDAzLCAweEQwLCAweDBDLCAweDQwLCAweDRELAorMHg4MCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHhBMCwgMHgwNywgMHgwMCwKKzB4MTEsIDB4MDAsIDB4NDAsIDB4ODAsIDB4RDAsIDB4MDEsIDB4NDAsIDB4MDUsIDB4MDAsIDB4MUQsIDB4MDAsIDB4NDcsIDB4MDAsCisweDUwLCAweDAxLCAweDQ4LCAweDAxLCAweDQwLCAweDE1LCAweDIwLCAweDc0LCAweDAwLCAweEQwLCAweDAwLCAweDQ4LCAweDA1LAorMHgwMCwgMHgwRCwgMHgwMCwgMHg1NCwgMHgwMCwgMHhDMCwgMHgwMSwgMHg0MCwgMHgwRiwgMHgyMCwgMHgwNiwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4QTgsIDB4MzYsIDB4MDAsIDB4REIsIDB4MDAsIDB4NkMsIDB4MDMsCisweEYwLCAweDBELCAweEMwLCAweDM1LCAweDAwLCAweERGLCAweDQwLCAweDBDLCAweDAzLCAweDcwLCAweDBELCAweDQwLCAweDM0LAorMHgwMCwgMHhENywgMHgwMCwgMHg0QywgMHgwMywgMHhGMCwgMHgwRCwgMHhDMCwgMHgzNCwgMHgwMCwgMHhERiwgMHgwMCwgMHg0QywKKzB4MDMsIDB4RTAsIDB4MEQsIDB4QzAsIDB4MDMsIDB4MDAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDA3LCAweDgwLCAweDBELCAweDAwLCAweDNGLCAweDAwLCAweERDLCAweDQwLCAweEYzLCAweDAzLCAweEQ0LCAweDBFLAorMHgxMCwgMHgzRiwgMHgwMCwgMHhGOCwgMHg0MCwgMHhGMCwgMHgwMywgMHhDMCwgMHgwRiwgMHgyMCwgMHgzQiwgMHgwMCwgMHhEQywKKzB4MDAsIDB4RjEsIDB4MDMsIDB4QzAsIDB4MEUsIDB4MDAsIDB4M0YsIDB4MDAsIDB4RUMsIDB4MDAsIDB4RjAsIDB4MDMsIDB4QzAsCisweDFGLCAweDIwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweDA4LCAweDM1LAorMHgwMCwgMHhENywgMHgwNCwgMHg3QywgMHgwMywgMHhGMCwgMHg0RCwgMHhDMCwgMHgzNywgMHgwMCwgMHhENywgMHg2MCwgMHg1QywKKzB4MDcsIDB4QjAsIDB4MEQsIDB4QzAsIDB4MzcsIDB4MDAsIDB4RDcsIDB4MDAsIDB4NEMsIDB4MTMsIDB4RjAsIDB4MEQsIDB4QzAsCisweDM0LCAweDQwLCAweEQzLCAweDA0LCAweDRDLCAweDQzLCAweEYwLCAweDBELCAweEMwLCAweEFCLCAweDIwLCAweDA0LCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxQiwgMHhBMCwgMHgwMCwgMHgwNiwgMHgwMSwgMHgxMiwgMHg3NCwKKzB4MTQsIDB4RDAsIDB4NzEsIDB4NjAsIDB4MDcsIDB4MDAsIDB4MTEsIDB4MDAsIDB4NkMsIDB4MDAsIDB4MTAsIDB4MDAsIDB4NDAsCisweEM3LCAweDAyLCAweDBELCAweDExLCAweDZDLCAweDE4LCAweEQyLCAweDAxLCAweDQwLCAweDA0LCAweDAwLCAweDExLCAweDEyLAorMHg2QywgMHgwMCwgMHhEMCwgMHhCMSwgMHg0MCwgMHg0QywgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDMsIDB4MjAsIDB4RjAsIDB4MTAsIDB4QzUsIDB4ODAsIDB4MzQsIDB4MDMsIDB4RDEsIDB4MEQsIDB4NDIsCisweDMzLCAweDAwLCAweERELCAweDAwLCAweDI0LCAweDBCLCAweDkwLCAweDBDLCAweDQwLCAweEIzLCAweDAwLCAweEM1LCAweDAxLAorMHgwNCwgMHgwRiwgMHhEOCwgMHgwQywgMHg0MCwgMHgzMiwgMHgwMCwgMHhDMSwgMHgwMSwgMHgwNCwgMHgwQiwgMHhEMiwgMHgxQywKKzB4NDAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MUYsIDB4MDIsCisweDRDLCAweDAwLCAweDIxLCAweDAxLCAweEI0LCAweDA0LCAweEQ5LCAweDEyLCAweDQwLCAweDRGLCAweDAyLCAweDM5LCAweDAxLAorMHhBNCwgMHgwNCwgMHgxMCwgMHgxMiwgMHg0MCwgMHg0QiwgMHgwNCwgMHgzRCwgMHgwMSwgMHhBNiwgMHgyNCwgMHhEMCwgMHgxMiwKKzB4NjgsIDB4NEEsIDB4MDAsIDB4MzEsIDB4MDEsIDB4QTQsIDB4MDQsIDB4RDAsIDB4MTIsIDB4NTMsIDB4M0MsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDEwLCAweDMwLCAweDAwLCAweEM3LCAweDAwLAorMHgzQywgMHgwMywgMHhGMCwgMHgwQywgMHg0OCwgMHgzMywgMHgxMCwgMHhDRiwgMHgwMCwgMHgzQywgMHgwMywgMHhCMCwgMHgwQywKKzB4NDAsIDB4MzMsIDB4MDAsIDB4QzcsIDB4MDAsIDB4MEMsIDB4QTMsIDB4RjEsIDB4MEQsIDB4Q0MsIDB4MzIsIDB4ODAsIDB4QzMsCisweDAwLCAweDBDLCAweDAzLCAweEYwLCAweDBELCAweEMwLCAweDQ5LCAweDYwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHgzOCwgMHgwRCwgMHgwMCwgMHgzRiwgMHgwMCwgMHhGQywgMHgwMCwgMHhGOCwgMHgwMywKKzB4ODAsIDB4MEIsIDB4MDgsIDB4MzYsIDB4MDAsIDB4QkMsIDB4MDAsIDB4RjAsIDB4MDMsIDB4QzAsIDB4MEYsIDB4MDAsIDB4M0YsCisweDAwLCAweEZDLCAweDIwLCAweEQyLCAweDAzLCAweEMwLCAweDBELCAweDEwLCAweDNGLCAweDAwLCAweEZDLCAweDAwLCAweEZBLAorMHgxMSwgMHhDMCwgMHgwOSwgMHg2MCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwKKzB4QTgsIDB4NzcsIDB4MjAsIDB4RDcsIDB4NDEsIDB4NkMsIDB4MDMsIDB4RjAsIDB4MEQsIDB4QzAsIDB4NzQsIDB4MDAsIDB4QzMsCisweDAxLCAweDRDLCAweDAzLCAweEYwLCAweDBELCAweEMwLCAweDMzLCAweDAwLCAweEQzLCAweDAxLCAweDRELCAweDAzLCAweDcwLAorMHgxRCwgMHhDMCwgMHgzMCwgMHgwMCwgMHhEMywgMHgwMSwgMHg0QywgMHgwNywgMHgzMCwgMHgxRCwgMHhEMCwgMHg0MCwgMHgwMCwKKzB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTMsIDB4ODAsIDB4MEQsIDB4NDgsIDB4MjEsCisweDQwLCAweDg0LCAweDAwLCAweEQwLCAweDAyLCAweDQwLCAweDA5LCAweDAwLCAweDI1LCAweDAwLCAweDkwLCAweDAwLCAweEQwLAorMHgwMiwgMHg0MCwgMHgwQiwgMHgwMCwgMHgzNSwgMHgwMCwgMHhDNCwgMHgwMCwgMHgxMCwgMHgwMiwgMHg0MCwgMHgwOSwgMHgwMCwKKzB4MkIsIDB4NDAsIDB4ODQsIDB4MDAsIDB4QjAsIDB4MDMsIDB4QzAsIDB4NEUsIDB4MDgsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDc5LCAweDAwLCAweEY5LCAweDAxLCAweEE0LCAweDA3LCAweEMyLAorMHgxRiwgMHg0MCwgMHg3QywgMHgwMCwgMHhGNSwgMHgwMSwgMHg4NCwgMHgwNywgMHhEMCwgMHgxRSwgMHg0MCwgMHg3RiwgMHgwMCwKKzB4RTEsIDB4MDEsIDB4OTQsIDB4MDcsIDB4NTAsIDB4MUYsIDB4NDgsIDB4N0MsIDB4ODAsIDB4RTEsIDB4MDEsIDB4QzQsIDB4MDcsCisweDE4LCAweDFFLCAweDQ4LCAweDEwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgxNiwgMHgyOCwgMHgwMywgMHgwMCwgMHgwOSwgMHgwMCwgMHg0MCwgMHgwMCwgMHhEOCwgMHgwMCwgMHg0MiwgMHgwMSwgMHgwMCwKKzB4MDUsIDB4MjAsIDB4MTQsIDB4MDAsIDB4RDAsIDB4MDAsIDB4NDAsIDB4MDcsIDB4MDAsIDB4MDUsIDB4MDAsIDB4MTQsIDB4MDAsCisweDUwLCAweDAwLCAweDQwLCAweDA1LCAweDA4LCAweDA5LCAweDAwLCAweDA0LCAweDAwLCAweDk4LCAweDAwLCAweDQwLCAweDVBLAorMHgyMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNywgMHgyOCwgMHgxNSwgMHgwMCwKKzB4NUIsIDB4MDAsIDB4NkMsIDB4MDEsIDB4RDAsIDB4MDQsIDB4QzAsIDB4MTQsIDB4MDAsIDB4NTcsIDB4MDAsIDB4NEMsIDB4MDEsCisweEYwLCAweDA1LCAweEM0LCAweDE3LCAweDAwLCAweDUzLCAweDAwLCAweDFDLCAweDAxLCAweDcwLCAweDA1LCAweEMwLCAweDE0LAorMHgwOCwgMHg1MywgMHg2MCwgMHg0QywgMHgwMSwgMHgzMCwgMHgwNSwgMHg0MCwgMHg1QywgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4MDAsIDB4OEQsIDB4MDAsIDB4MzcsIDB4MDIsIDB4RkMsIDB4MDAsCisweEYwLCAweDAzLCAweEMwLCAweDBGLCAweDAwLCAweDNGLCAweDAwLCAweEZDLCAweDA4LCAweEYwLCAweDAzLCAweEM4LCAweDBGLAorMHgwMCwgMHgzRiwgMHgwMiwgMHhFNCwgMHgwOCwgMHhCMCwgMHgwMywgMHhDMCwgMHgwRiwgMHgwMCwgMHgzRiwgMHg4MCwgMHhGRCwKKzB4MDAsIDB4RjAsIDB4MDMsIDB4QzAsIDB4NEIsIDB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDEwLCAweDA4LCAweDI1LCAweDAwLCAweDlGLCAweDAwLCAweDdDLCAweDAyLCAweDMwLCAweDE5LCAweDQwLCAweDI0LAorMHgwMCwgMHg5RiwgMHgwMCwgMHg3QywgMHgwMiwgMHhGMCwgMHgwOSwgMHhDMCwgMHgyNCwgMHgwMCwgMHg5MywgMHgwMCwgMHg3QywKKzB4MTYsIDB4MzAsIDB4MDksIDB4QzAsIDB4MjcsIDB4NDAsIDB4OTMsIDB4MDQsIDB4NzgsIDB4MTYsIDB4RjAsIDB4MDksIDB4QzAsCisweDQzLCAweDIwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDI0LAorMHgwMSwgMHg5RCwgMHgwMCwgMHg3NCwgMHg0MiwgMHgxNCwgMHg1OSwgMHhDMCwgMHgyNiwgMHgwMCwgMHg5RCwgMHgwMCwgMHg3NCwKKzB4MEEsIDB4RDAsIDB4MDksIDB4NDAsIDB4QTQsIDB4MDAsIDB4OTEsIDB4OUEsIDB4NzQsIDB4OEUsIDB4QjIsIDB4MDksIDB4NDAsCisweDI3LCAweDEwLCAweDkxLCAweDAyLCAweDY0LCAweDE2LCAweEQxLCAweDA5LCAweDQwLCAweDA3LCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHhBMCwgMHg2QywgMHg4MCwgMHhCRCwgMHgwMSwgMHhFNCwKKzB4MDYsIDB4MTAsIDB4NEIsIDB4NDAsIDB4MkQsIDB4MDAsIDB4QkQsIDB4MDAsIDB4RjQsIDB4MEUsIDB4RDAsIDB4MEEsIDB4NDAsCisweDJDLCAweDA0LCAweEIxLCAweDAwLCAweEY0LCAweDAyLCAweDEwLCAweDBCLCAweDAwLCAweDJGLCAweDAwLCAweEIxLCAweDEwLAorMHhGNCwgMHgwMiwgMHhEMCwgMHgwQiwgMHg0MSwgMHg2MywgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MTAsIDB4MjAsIDB4MjgsIDB4MDAsIDB4RUMsIDB4MDAsIDB4QjQsIDB4MDIsIDB4MTAsIDB4MEIsIDB4NDAsCisweDJCLCAweDIyLCAweEFELCAweDA4LCAweEI0LCAweDgyLCAweEQwLCAweDhBLCAweDYwLCAweDI4LCAweDQyLCAweEExLCAweDQwLAorMHhGNCwgMHgwMiwgMHg5MCwgMHg4QSwgMHg0MCwgMHgyQiwgMHgwQSwgMHhBMSwgMHgwOCwgMHhBNCwgMHgwMiwgMHhEMCwgMHgwQSwKKzB4NDAsIDB4NDMsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MUQsIDB4QjgsCisweDA2LCAweDAwLCAweDFGLCAweDQwLCAweDZDLCAweDAwLCAweDMwLCAweDAxLCAweEMwLCAweDg1LCAweDAwLCAweDFELCAweDAyLAorMHg3QywgMHgwMCwgMHhGMCwgMHgyMSwgMHhEMCwgMHg4NCwgMHgwMCwgMHgxMywgMHgwQSwgMHg3QywgMHgwMSwgMHgzMCwgMHgyMSwKKzB4QzAsIDB4ODcsIDB4MDgsIDB4MDMsIDB4MjIsIDB4N0MsIDB4MDAsIDB4RjAsIDB4MDMsIDB4RTAsIDB4NzcsIDB4RTAsIDB4MEEsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFELCAweEI4LCAweDI3LCAweDA1LCAweDhELCAweDE0LAorMHg3QywgMHg1MiwgMHhGMCwgMHg0OCwgMHhDMSwgMHgyMiwgMHgwMSwgMHg5RiwgMHgwNCwgMHg3QywgMHgwMiwgMHhGMCwgMHg0OSwKKzB4QzAsIDB4MjcsIDB4MDEsIDB4OUYsIDB4ODEsIDB4N0MsIDB4NTIsIDB4RjAsIDB4NDgsIDB4QzAsIDB4MjcsIDB4MDEsIDB4OUYsCisweDI0LCAweDNDLCAweDUyLCAweEYwLCAweDQ5LCAweEMxLCAweDc3LCAweDYwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgxRCwgMHhBMCwgMHhBRiwgMHgwMCwgMHhCNywgMHgwMiwgMHhEQywgMHgwQSwgMHhCMCwgMHgyQiwKKzB4QzAsIDB4MjcsIDB4MDAsIDB4OUYsIDB4MDIsIDB4REMsIDB4MDIsIDB4MzAsIDB4ODksIDB4QzAsIDB4MkYsIDB4MTAsIDB4QjMsCisweDAwLCAweEZDLCAweDAyLCAweEYwLCAweDI5LCAweEMwLCAweEE3LCAweDEwLCAweEJGLCAweDAwLCAweENDLCAweDAyLCAweEIwLAorMHgwQiwgMHhDMCwgMHg3NywgMHgwMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwKKzB4MDAsIDB4MDUsIDB4MDEsIDB4MTEsIDB4ODEsIDB4NDQsIDB4MDAsIDB4MTAsIDB4NDEsIDB4NDAsIDB4MDcsIDB4MDUsIDB4MUQsCisweDAwLCAweDQ0LCAweDAwLCAweDUwLCAweDAxLCAweDQwLCAweDA3LCAweDAxLCAweDExLCAweDAwLCAweDc0LCAweDUwLCAweEQwLAorMHgwMSwgMHg0MCwgMHgwNywgMHgwMCwgMHgxRCwgMHgwMCwgMHg0NCwgMHgwMCwgMHg1MCwgMHgwMSwgMHg0MCwgMHg2MywgMHgwMCwKKzB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4MjAsIDB4MjEsIDB4MDEsIDB4ODUsCisweDAwLCAweDU0LCAweDEyLCAweDkwLCAweDQ4LCAweDQwLCAweDIzLCAweDgwLCAweDhELCAweDA0LCAweDQ0LCAweDAyLCAweDEwLAorMHg0OCwgMHg0MCwgMHgyMywgMHg0NCwgMHg4MSwgMHgwMCwgMHgzNCwgMHgwMiwgMHhEMCwgMHgwOCwgMHg0MCwgMHgyMywgMHg4MCwKKzB4OEQsIDB4MDAsIDB4MDYsIDB4MDIsIDB4OTAsIDB4MDgsIDB4NDAsIDB4NEIsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDI4LCAweDI1LCAweDAwLCAweDkxLCAweDAwLCAweDQ0LCAweDAzLCAweDA4LAorMHgwOSwgMHg0MCwgMHgyNywgMHgwMCwgMHg4QywgMHgwMCwgMHg0NSwgMHg4MiwgMHg1MCwgMHgwOSwgMHg0MiwgMHgyMywgMHgwOCwKKzB4OTEsIDB4MDAsIDB4NzQsIDB4MDIsIDB4RDAsIDB4MDksIDB4NDAsIDB4MjcsIDB4MDAsIDB4OUQsIDB4MDAsIDB4NDQsIDB4MDIsCisweEQ4LCAweDA5LCAweDQwLCAweDYzLCAweDIwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwNSwgMHgyMCwgMHgyNSwgMHgwMCwgMHg5NywgMHgwMCwgMHgxQywgMHgwMiwgMHhCMCwgMHgwOSwgMHhDNCwgMHgyNywgMHgwMCwKKzB4OUYsIDB4MDAsIDB4NUMsIDB4MDIsIDB4MzAsIDB4MDksIDB4QzAsIDB4MjcsIDB4MDAsIDB4OTIsIDB4MDAsIDB4N0MsIDB4MDIsCisweEYwLCAweDA5LCAweEMwLCAweDI3LCAweDAwLCAweDlGLCAweDAwLCAweDRDLCAweDAyLCAweEIwLCAweDA5LCAweEM4LCAweDE3LAorMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNiwgMHg4OCwgMHgyNSwgMHgwMCwKKzB4OUYsIDB4MDAsIDB4N0MsIDB4MDIsIDB4RjgsIDB4MDksIDB4QzAsIDB4MjcsIDB4MDAsIDB4OUYsIDB4ODAsIDB4N0MsIDB4MDIsCisweEYwLCAweDA5LCAweEMyLCAweDI3LCAweDAwLCAweDlGLCAweDAwLCAweDdDLCAweDAyLCAweEYwLCAweDA5LCAweEMwLCAweDI3LAorMHgwMCwgMHg5RiwgMHg4MCwgMHg3RCwgMHg0MiwgMHg3MCwgMHgwOSwgMHhDMCwgMHg1QiwgMHgyMCwgMHgwNCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDgsIDB4MDUsIDB4MDAsIDB4MUQsIDB4MTAsIDB4N0MsIDB4MTAsCisweEQwLCAweDAxLCAweEMwLCAweDA3LCAweDAwLCAweDFCLCAweDAwLCAweDVDLCAweDAwLCAweDcwLCAweDAxLCAweEMwLCAweDA0LAorMHgwMCwgMHgxQiwgMHg0OSwgMHg3QywgMHg0MCwgMHhGMCwgMHgwMSwgMHhDMCwgMHgwNCwgMHgwMCwgMHgxRiwgMHgwMCwgMHg3QywKKzB4MDAsIDB4QjQsIDB4NDEsIDB4QzAsIDB4NTMsIDB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDEwLCAweEEwLCAweERDLCAweDAwLCAweDdELCAweDIzLCAweEY0LCAweDlELCAweDEwLCAweDk3LCAweDQwLCAweDE3LAorMHgwMCwgMHg1RCwgMHgwMCwgMHhCNCwgMHgyMSwgMHhEMCwgMHgwNSwgMHg0MCwgMHgxQywgMHgwMCwgMHg3RCwgMHgwMSwgMHhGNCwKKzB4MDEsIDB4RDAsIDB4MDUsIDB4NDAsIDB4MTUsIDB4MjAsIDB4N0QsIDB4MDIsIDB4RjQsIDB4MDksIDB4MTAsIDB4MDcsIDB4NDAsCisweDQzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweEEwLCAweEI2LAorMHgwNiwgMHhERCwgMHgwQiwgMHgzNCwgMHgwMywgMHg1MCwgMHhBQywgMHg0MCwgMHgzMywgMHgwMCwgMHhDRCwgMHg4MCwgMHgxNCwKKzB4OEYsIDB4RDAsIDB4MEMsIDB4NTAsIDB4NzAsIDB4ODAsIDB4QzksIDB4MjEsIDB4MzIsIDB4MjcsIDB4RDAsIDB4MEMsIDB4NDAsCisweDMyLCAweDAwLCAweERELCAweDEyLCAweDc0LCAweDIzLCAweDEwLCAweDFDLCAweDQwLCAweDQzLCAweDAwLCAweDBBLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHg4MCwgMHgzOSwgMHgwMCwgMHhFRCwgMHgwMCwgMHhGNCwKKzB4MDMsIDB4MTAsIDB4MEUsIDB4NDAsIDB4M0IsIDB4MDMsIDB4RUMsIDB4MDQsIDB4QjQsIDB4MEEsIDB4QzAsIDB4NUUsIDB4NDAsCisweDM4LCAweDA0LCAweEU5LCAweDAwLCAweEI0LCAweDAzLCAweEQwLCAweDVGLCAweDQwLCAweDNCLCAweDAwLCAweDJELCAweDEwLAorMHhCNCwgMHgwMywgMHgxMCwgMHgyRSwgMHg0MCwgMHgxMywgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MTQsIDB4MTgsIDB4NzksIDB4MDAsIDB4RUYsIDB4MDEsIDB4QkMsIDB4MDcsIDB4NzAsIDB4MUUsIDB4QzAsCisweDdCLCAweDA1LCAweEVCLCAweDg5LCAweDlDLCAweDA3LCAweDcwLCAweEJGLCAweEMwLCAweDc4LCAweDIwLCAweDJCLCAweDIxLAorMHhCQywgMHgwNywgMHhGMCwgMHgzRSwgMHhDMCwgMHg3QSwgMHgwNSwgMHhFRiwgMHgwMSwgMHhGQywgMHgwNywgMHgzMSwgMHgxRSwKKzB4QzAsIDB4NTMsIDB4NjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4QjgsCisweDE1LCAweDEwLCAweDVGLCAweDAwLCAweDNDLCAweDAzLCAweDcwLCAweDBELCAweDgwLCAweEI3LCAweDAxLCAweERGLCAweDBDLAorMHg3QywgMHgwMCwgMHhGMCwgMHg0RCwgMHhDMCwgMHgxNywgMHgwMCwgMHgxRiwgMHgyMCwgMHg3QywgMHgwMywgMHhGMCwgMHgwQywKKzB4NDEsIDB4MzUsIDB4MDgsIDB4MUYsIDB4MDAsIDB4N0MsIDB4MDEsIDB4NzAsIDB4MEQsIDB4QzAsIDB4NDMsIDB4NjAsIDB4MDYsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA2LCAweDAwLCAweDdELCAweDAwLCAweEZGLCAweDg5LAorMHhGOCwgMHgwNSwgMHg3MCwgMHgxRiwgMHhDMiwgMHg3RCwgMHgwMCwgMHhGQiwgMHgwMSwgMHhGQywgMHgwNywgMHhGMCwgMHgxRiwKKzB4QzAsIDB4NkYsIDB4MDAsIDB4RjcsIDB4MDEsIDB4Q0UsIDB4MjUsIDB4MzAsIDB4MUYsIDB4QzAsIDB4N0YsIDB4MDQsIDB4RjMsCisweDAxLCAweDhDLCAweDI1LCAweDMwLCAweDFFLCAweEMwLCAweDE4LCAweDIwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwgMHgwOCwgMHgzOSwgMHgwNCwgMHhFRCwgMHgwOCwgMHhGNCwgMHgxMSwgMHgwMCwgMHgwRSwKKzB4NDAsIDB4M0YsIDB4MDAsIDB4RTAsIDB4MTAsIDB4QjQsIDB4NDIsIDB4RDAsIDB4OEUsIDB4NDEsIDB4M0IsIDB4MDAsIDB4RjUsCisweDAyLCAweDk0LCAweDBCLCAweDUwLCAweDBFLCAweEMwLCAweDNCLCAweDAwLCAweDNCLCAweDA4LCAweDg1LCAweDM5LCAweEIwLAorMHgwQSwgMHg0MCwgMHg1NSwgMHg0MCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5OCwKKzB4MDAsIDB4MzksIDB4MDIsIDB4RUQsIDB4MDgsIDB4QjAsIDB4MDEsIDB4RDEsIDB4MDYsIDB4NDAsIDB4MzksIDB4MDQsIDB4RTksCisweDA4LCAweEI0LCAweDAyLCAweEQwLCAweDBFLCAweDQwLCAweDJGLCAweDAwLCAweDcxLCAweDA4LCAweEM0LCAweDAxLCAweDkwLAorMHgwRSwgMHg0MCwgMHgzRiwgMHgwMCwgMHhFOSwgMHgwMCwgMHhDNCwgMHgwMCwgMHgxOCwgMHgwNywgMHg0MCwgMHgyMCwgMHgwMCwKKzB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDgsIDB4MjEsIDB4MTAsIDB4OUQsCisweDAzLCAweDM0LCAweDAwLCAweDkwLCAweDg5LCAweDQwLCAweEYyLCAweDgwLCAweEMxLCAweDAyLCAweDM0LCAweDBDLCAweEQwLAorMHgxQywgMHg2MCwgMHg1NywgMHgwMCwgMHgwNSwgMHgwNiwgMHgxNCwgMHgwRSwgMHhEOCwgMHgyQywgMHg0MCwgMHhCMSwgMHgwMCwKKzB4Q0QsIDB4MEEsIDB4MDAsIDB4QUMsIDB4OTgsIDB4MDAsIDB4NDIsIDB4MDksIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDU1LCAweEEwLCAweEM0LCAweDIwLCAweDFGLCAweDUyLCAweDdDLCAweDBBLCAweEQwLAorMHhBMSwgMHhDMCwgMHhGRCwgMHg4MCwgMHhGQiwgMHgwMSwgMHg3QywgMHgyQywgMHhGMCwgMHgwRiwgMHhDOCwgMHhENywgMHgwMSwKKzB4OTMsIDB4MTEsIDB4NEMsIDB4MTIsIDB4QjAsIDB4M0YsIDB4NDEsIDB4QkYsIDB4MDAsIDB4QzksIDB4MDgsIDB4NDgsIDB4MEUsCisweDEwLCAweDkxLCAweEMwLCAweDc0LCAweDIwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwRCwgMHgwOCwgMHgyNywgMHgyMCwgMHg5RiwgMHg4NCwgMHg3RSwgMHg2MCwgMHg3MCwgMHgyMSwgMHhDOCwgMHgzNywgMHgwOSwKKzB4REYsIDB4MDAsIDB4N0MsIDB4MDgsIDB4RjAsIDB4MEQsIDB4QzEsIDB4QTYsIDB4MDAsIDB4OUUsIDB4NDAsIDB4N0UsIDB4NDAsCisweDcwLCAweDBELCAweEMxLCAweDM3LCAweDIyLCAweDFCLCAweDAwLCAweDdDLCAweDFBLCAweEYwLCAweDg5LCAweEM0LCAweDk3LAorMHgwMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MSwgMHgwOCwgMHgwQiwgMHg4NCwKKzB4MzMsIDB4ODAsIDB4Q0MsIDB4MDIsIDB4RjAsIDB4MDMsIDB4QzAsIDB4M0UsIDB4MDAsIDB4RjcsIDB4MTAsIDB4RjgsIDB4MDAsCisweEYyLCAweDBGLCAweEMwLCAweDFDLCAweDA0LCAweDMzLCAweDgwLCAweEZDLCAweDAyLCAweEYwLCAweDBGLCAweEMwLCAweDNGLAorMHgwNCwgMHhGRiwgMHgwMCwgMHhDQywgMHgwMiwgMHhGMCwgMHgwMywgMHhDMCwgMHgwNCwgMHgyMCwgMHgwQywgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODEsIDB4MjAsIDB4NDYsIDB4MDgsIDB4MTcsIDB4MTEsIDB4NEMsIDB4MDYsCisweEQwLCAweDExLCAweDQwLCAweDM0LCAweDAwLCAweEQxLCAweDgwLCAweDc0LCAweDA0LCAweEYwLCAweDBDLCAweDQwLCAweDg1LAorMHgwMiwgMHgxMSwgMHgwMywgMHg2NCwgMHgwNiwgMHhEMCwgMHgwRCwgMHg0MCwgMHgzNywgMHgwOCwgMHgxRCwgMHgxMSwgMHg2QywKKzB4MDQsIDB4RDAsIDB4MzgsIDB4QzgsIDB4MDYsIDB4MDQsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAxLCAweEEwLCAweDQ0LCAweDA0LCAweDExLCAweDIxLCAweDU0LCAweDA2LCAweEQ4LCAweDM5LCAweDY2LCAweDMyLAorMHgwMCwgMHhENSwgMHgwMCwgMHg3NCwgMHgwRSwgMHhEMCwgMHgwRCwgMHg0MCwgMHgwNCwgMHgwNCwgMHgzMSwgMHgyMSwgMHg3NCwKKzB4MDQsIDB4RDgsIDB4MEQsIDB4NDAsIDB4MzcsIDB4MDAsIDB4REQsIDB4MDgsIDB4NDQsIDB4MDYsIDB4RDAsIDB4MzEsIDB4NDAsCisweDA0LCAweDAwLCAweDBBLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLCAweDBBLCAweDI0LAorMHgwMCwgMHg4NSwgMHgwMCwgMHgwNSwgMHgwMCwgMHhEMiwgMHgwOCwgMHg2MCwgMHgzMCwgMHgwMCwgMHhDMSwgMHgwMCwgMHgzNCwKKzB4MDIsIDB4RDAsIDB4MEQsIDB4NDAsIDB4MjEsIDB4MjAsIDB4MDEsIDB4MDAsIDB4MzQsIDB4MDAsIDB4RDIsIDB4MEMsIDB4NDAsCisweDMzLCAweDAwLCAweDFELCAweDAwLCAweDI0LCAweDAyLCAweEQwLCAweDA5LCAweDQwLCAweDQyLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgzMCwgMHgwNiwgMHgwMCwgMHgxMSwgMHgwMCwgMHg1QywKKzB4ODIsIDB4RjgsIDB4MDEsIDB4QzAsIDB4M0UsIDB4MDAsIDB4RjYsIDB4MDAsIDB4N0MsIDB4MDIsIDB4RjAsIDB4MEYsIDB4NDAsCisweDA0LCAweDAwLCAweDEzLCAweDAwLCAweDc0LCAweDAwLCAweEYwLCAweDBGLCAweEMwLCAweDNGLCAweDkwLCAweDFGLCAweDAwLAorMHg0QywgMHgwMiwgMHhGMCwgMHgwMSwgMHhDMCwgMHgwNCwgMHg2MCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4ODUsIDB4QTgsIDB4MkYsIDB4MDAsIDB4QjYsIDB4MDAsIDB4Q0MsIDB4MDIsIDB4RjgsIDB4MEIsIDB4QzAsCisweDNGLCAweDAwLCAweEZFLCAweDgwLCAweEZDLCAweDAwLCAweDcwLCAweDBGLCAweEMwLCAweDBCLCAweDQwLCAweDNGLCAweDAwLAorMHhBNCwgMHgwMiwgMHhGMiwgMHgwRiwgMHhDMCwgMHgzQiwgMHgwMCwgMHgzRiwgMHgwMCwgMHhGQywgMHgwMCwgMHhGMCwgMHgwMywKKzB4QzAsIDB4MTcsIDB4NjEsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4QTgsCisweDdGLCAweDQwLCAweEYzLCAweDQ2LCAweEZDLCAweDAzLCAweDMwLCAweDRGLCAweEMwLCAweDRGLCAweDEyLCAweDNCLCAweDRDLAorMHhDQywgMHgyMywgMHgzMCwgMHg0RiwgMHhDMiwgMHgwQywgMHg4MCwgMHgzRiwgMHgwMSwgMHhGQywgMHgwNywgMHg3MSwgMHg4RiwKKzB4QzAsIDB4MEYsIDB4MDgsIDB4NzMsIDB4MDEsIDB4RkMsIDB4MDAsIDB4MzAsIDB4MDMsIDB4QzAsIDB4MEMsIDB4MDAsIDB4MEUsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweDEwLCAweDdELCAweDAwLCAweEUxLCAweDA4LAorMHhGNCwgMHhBRiwgMHgxMCwgMHhCRiwgMHg0MCwgMHgyNywgMHgwMSwgMHg1RCwgMHgwOCwgMHhDNCwgMHgzQiwgMHg1MCwgMHg5RiwKKzB4NDAsIDB4NDQsIDB4MDAsIDB4NUQsIDB4MDAsIDB4RjQsIDB4MDcsIDB4MTAsIDB4MEYsIDB4NDAsIDB4MDcsIDB4MDAsIDB4RDUsCisweDgxLCAweDc0LCAweDAwLCAweEIxLCAweDAxLCAweDgwLCAweDBFLCAweDAwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgxMywgMHgyMCwgMHgzMywgMHgwMCwgMHhDNCwgMHgwNCwgMHgzNCwgMHgwMywgMHg1NSwgMHgwQywKKzB4NDAsIDB4NDMsIDB4MDEsIDB4OEQsIDB4NDQsIDB4MTQsIDB4MDMsIDB4NTAsIDB4MEMsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MEQsCisweDgwLCAweDM0LCAweDAzLCAweDEwLCAweDRDLCAweDQwLCAweDA3LCAweDAwLCAweDQxLCAweDAwLCAweDM0LCAweDAwLCAweEQwLAorMHgwMCwgMHg0MCwgMHg0RCwgMHg4MCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywKKzB4QTAsIDB4MzUsIDB4MDAsIDB4RDUsIDB4MDAsIDB4NzAsIDB4MDMsIDB4NTAsIDB4MEQsIDB4NDAsIDB4NjcsIDB4MDAsIDB4NUQsCisweDE0LCAweDU0LCAweDAzLCAweDEwLCAweDBELCAweDAwLCAweDZDLCAweDAwLCAweDVELCAweDEwLCAweDc0LCAweDAzLCAweDEwLAorMHgwRiwgMHg0MCwgMHg2RiwgMHgwMCwgMHhENSwgMHgwNCwgMHg3MCwgMHgwNiwgMHhEMCwgMHgxMSwgMHg0MCwgMHgwRiwgMHgyMCwKKzB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4QTgsIDB4MzYsIDB4MDAsIDB4RDcsCisweDAwLCAweDdFLCAweDAzLCAweDcwLCAweDBELCAweEM0LCAweDQ3LCAweDAwLCAweDFCLCAweDAzLCAweDVELCAweDAzLCAweDcwLAorMHgwRCwgMHg4MCwgMHg0NCwgMHgyMCwgMHhERCwgMHgwMCwgMHgzQywgMHgwMywgMHg3NCwgMHgwRCwgMHhDNCwgMHg0NywgMHgwMCwKKzB4OTMsIDB4MDYsIDB4NzgsIDB4MDQsIDB4NzAsIDB4NTEsIDB4QzAsIDB4MDEsIDB4MDAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA3LCAweDgwLCAweDNELCAweDAwLCAweEZCLCAweDAwLCAweEJDLCAweDAzLCAweEIwLAorMHgwRiwgMHhDMCwgMHgwRiwgMHgwMCwgMHg2QSwgMHgyMCwgMHhFQywgMHgwMywgMHhGMCwgMHgwRiwgMHg4NCwgMHgwRiwgMHgwOCwKKzB4RkMsIDB4MDAsIDB4RkUsIDB4MDMsIDB4RTAsIDB4MEYsIDB4ODAsIDB4MEYsIDB4MDAsIDB4QkYsIDB4MDEsIDB4QjgsIDB4MDIsCisweEIwLCAweDA5LCAweEMyLCAweDNFLCAweDIwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMiwgMHgwOCwgMHgzMSwgMHgxMCwgMHhEMywgMHg0MCwgMHg1QywgMHgwMywgMHhGMywgMHgwRCwgMHhDMCwgMHgwNiwgMHgwMCwKKzB4OUYsIDB4MDIsIDB4MkMsIDB4MDMsIDB4NzAsIDB4NEMsIDB4QzAsIDB4MjYsIDB4MDQsIDB4RDcsIDB4MjIsIDB4N0MsIDB4MTMsCisweDMwLCAweDBELCAweEMwLCAweDI0LCAweDAwLCAweDlGLCAweDAyLCAweDRDLCAweDAwLCAweDMwLCAweDAxLCAweEMwLCAweDI4LAorMHgyMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxQiwgMHhBMCwgMHgzNCwgMHgwMCwKKzB4RjEsIDB4MjAsIDB4QzQsIDB4MTcsIDB4RDAsIDB4NEYsIDB4NDAsIDB4MjQsIDB4MDAsIDB4NUQsIDB4NDAsIDB4QzAsIDB4MTcsCisweDEwLCAweDdGLCAweDQwLCAweEU3LCAweDAwLCAweERELCAweDA2LCAweDcwLCAweDAzLCAweDExLCAweEFGLCAweDEwLCAweDI0LAorMHgwMCwgMHg5RCwgMHg0NSwgMHg0NCwgMHg0NiwgMHgxMSwgMHgxOSwgMHgxMSwgMHg0QywgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTMsIDB4QTAsIDB4NzIsIDB4NDAsIDB4QzksIDB4MjAsIDB4MjQsIDB4MDMsCisweEQwLCAweDZDLCAweDQwLCAweDIyLCAweDAwLCAweDA4LCAweDIwLCAweDIwLCAweDAzLCAweEQwLCAweDFDLCAweDQwLCAweEMyLAorMHg4OCwgMHg4NCwgMHgyMCwgMHgzMCwgMHgwQiwgMHgxMCwgMHgwQywgMHg0MCwgMHgwNCwgMHgwMCwgMHg4RCwgMHgyMSwgMHgyNSwKKzB4MDQsIDB4MTQsIDB4MTEsIDB4MDIsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDBGLCAweDAwLCAweDcwLCAweDA0LCAweEU5LCAweDAxLCAweEI0LCAweDE3LCAweEQ4LCAweDFFLCAweDQwLCAweDZBLAorMHgwOCwgMHhBRCwgMHgwNSwgMHhBNCwgMHgwNywgMHg5MCwgMHgxRSwgMHg0QSwgMHg1QiwgMHgwQSwgMHhFRCwgMHg2QiwgMHgzNCwKKzB4MDcsIDB4ODEsIDB4OUUsIDB4NDIsIDB4NTgsIDB4MDAsIDB4QUQsIDB4MDEsIDB4QjYsIDB4MDUsIDB4MTAsIDB4QjYsIDB4NDAsCisweDNDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDE4LCAweDMwLAorMHgwMCwgMHhDQiwgMHgwMCwgMHgyQywgMHgwMywgMHhGMCwgMHgwQywgMHhDMCwgMHgyMiwgMHgwMSwgMHg5RiwgMHgwMCwgMHg2QywKKzB4MDMsIDB4RjAsIDB4MEMsIDB4QzAsIDB4MDIsIDB4MDQsIDB4ODcsIDB4MDUsIDB4M0MsIDB4NDMsIDB4MjAsIDB4MEQsIDB4QzAsCisweDEwLCAweDAwLCAweENGLCAweDAwLCAweDZDLCAweDAxLCAweDMwLCAweDAwLCAweEMwLCAweDQ4LCAweDY4LCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHgzOCwgMHg3RCwgMHgwMCwgMHhGNywgMHgxMCwgMHhDMSwKKzB4NTMsIDB4RjAsIDB4MEUsIDB4QzAsIDB4M0QsIDB4MDAsIDB4QkIsIDB4MDQsIDB4REMsIDB4MEIsIDB4N0EsIDB4OEYsIDB4QzEsCisweDNGLCAweDA4LCAweEZGLCAweDI4LCAweEZDLCAweDA3LCAweDcyLCAweDJGLCAweEMwLCAweDNGLCAweDAwLCAweEVGLCAweDAwLAorMHg0QywgMHgwMywgMHhGMCwgMHgwNywgMHhDMCwgMHgwQiwgMHg2MCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MTAsIDB4QTAsIDB4MzcsIDB4MDAsIDB4REYsIDB4MDMsIDB4NUMsIDB4NEYsIDB4MzAsIDB4M0QsIDB4QzksCisweDA0LCAweDEwLCAweDVGLCAweDQwLCAweDRDLCAweDM3LCAweDMwLCAweDJELCAweEMwLCAweDU2LCAweDQwLCAweERCLCAweDAxLAorMHg0QywgMHgwMywgMHhCMywgMHgyRCwgMHhDMiwgMHgxNCwgMHgwMCwgMHg4RiwgMHgwMCwgMHg0QywgMHgwMCwgMHhGMCwgMHgwRCwKKzB4QzAsIDB4NDAsIDB4MDAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTMsIDB4ODAsCisweDM5LCAweDAxLCAweENELCAweDE0LCAweDAyLCAweDEzLCAweEIwLCAweDRDLCAweDRBLCAweDA4LCAweDAwLCAweENDLCAweDAwLAorMHg4NCwgMHgxMywgMHhCMCwgMHg0RSwgMHg0MSwgMHgxQiwgMHgwMCwgMHhFMSwgMHgwMCwgMHg4NCwgMHgwQiwgMHhEMCwgMHgwRiwKKzB4NDAsIDB4MTgsIDB4MDAsIDB4QUQsIDB4MDAsIDB4ODQsIDB4MDMsIDB4RDAsIDB4MEUsIDB4QzAsIDB4NEUsIDB4MDAsIDB4MDYsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDc5LCAweDAyLCAweEVELCAweDAxLAorMHg5NCwgMHgxNywgMHgxMCwgMHg5RSwgMHg0MCwgMHg3OSwgMHgwMCwgMHhFRCwgMHgwMSwgMHgwNCwgMHgxNywgMHgxMCwgMHgxRSwKKzB4NDAsIDB4NjEsIDB4ODgsIDB4RTEsIDB4MjEsIDB4OTYsIDB4MTcsIDB4RDAsIDB4OUUsIDB4NDQsIDB4NzgsIDB4MDAsIDB4QkQsCisweDAxLCAweDg1LCAweDA1LCAweEQwLCAweDFDLCAweDQwLCAweDExLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgxNiwgMHgyOCwgMHgzMywgMHgwMCwgMHhDRCwgMHgwMCwgMHgxNCwgMHgwMywgMHg5MCwgMHgwQywKKzB4NDAsIDB4NzEsIDB4MDEsIDB4Q0QsIDB4ODgsIDB4MDQsIDB4MDMsIDB4OTAsIDB4MEMsIDB4NDAsIDB4MzMsIDB4MDAsIDB4QzEsCisweDNBLCAweDE0LCAweDAzLCAweEQwLCAweDBDLCAweDQyLCAweEYwLCAweDA0LCAweDhELCAweDAzLCAweDQ0LCAweDBCLCAweEQwLAorMHg4RCwgMHg0MCwgMHg1QiwgMHgyMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNywKKzB4MjAsIDB4MTUsIDB4MDAsIDB4NUYsIDB4MDAsIDB4NUMsIDB4MDEsIDB4MzAsIDB4MDUsIDB4NDAsIDB4REQsIDB4MDEsIDB4N0YsCisweEMxLCAweDRELCAweDAxLCAweDMxLCAweDA1LCAweEMwLCAweDlFLCAweDA0LCAweDcxLCAweDAzLCAweDVDLCAweDAxLCAweEIwLAorMHgwNSwgMHhDNCwgMHhEQywgMHgwMSwgMHg3RiwgMHg1OSwgMHhDQywgMHgwOSwgMHhGMCwgMHhCNywgMHg0MCwgMHg1RCwgMHgwMCwKKzB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4MDgsIDB4MDUsIDB4MDAsIDB4MUYsCisweDAwLCAweDY0LCAweDAwLCAweEYwLCAweDIxLCAweDUwLCAweDA2LCAweDIwLCAweDBCLCAweDgwLCAweDdDLCAweDAwLCAweEYwLAorMHgwMSwgMHhDMCwgMHg4NiwgMHgwNCwgMHgxNywgMHgwMCwgMHg2OCwgMHgwOCwgMHhBMiwgMHgwMSwgMHhEMCwgMHgwNywgMHgwOCwKKzB4MUYsIDB4MjIsIDB4N0MsIDB4NDgsIDB4RjAsIDB4MDEsIDB4QzAsIDB4NEEsIDB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDY1LCAweDAwLCAweDlGLCAweDAwLCAweDZDLCAweDgyLCAweEYwLAorMHgwOSwgMHhDMCwgMHgyNywgMHgwMCwgMHg5NywgMHgwMCwgMHg2QywgMHgyMiwgMHhGMCwgMHg0OSwgMHhDNCwgMHgyNywgMHgwMCwKKzB4OUYsIDB4MDAsIDB4N0MsIDB4MEEsIDB4RDAsIDB4MjksIDB4QzAsIDB4MjQsIDB4MDAsIDB4OUYsIDB4MDAsIDB4NTAsIDB4MDIsCisweDMwLCAweDA5LCAweEMwLCAweDQwLCAweDIwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMSwgMHgyMCwgMHgyQywgMHgwMCwgMHg5RCwgMHg0MCwgMHg3NCwgMHgwMiwgMHhEMCwgMHhBOSwgMHg0MCwgMHgyNywgMHgxMCwKKzB4OTQsIDB4MDAsIDB4NDQsIDB4MDIsIDB4RDAsIDB4MjksIDB4MDQsIDB4QTcsIDB4MDEsIDB4OUQsIDB4MTEsIDB4RjQsIDB4NEUsCisweEMyLCAweDI5LCAweDUwLCAweDI0LCAweDAwLCAweDhELCAweDA0LCAweDQ0LCAweDJBLCAweDUwLCAweDA5LCAweDQwLCAweDA0LAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHhBMCwgMHgyNCwgMHgwMiwKKzB4OUQsIDB4MDAsIDB4NzQsIDB4MjIsIDB4RDAsIDB4MDksIDB4NDAsIDB4MjMsIDB4MDAsIDB4OTAsIDB4NDAsIDB4NjQsIDB4MDIsCisweEQwLCAweDA5LCAweDAxLCAweDI2LCAweDgyLCAweDlELCAweDAxLCAweDc0LCAweDAyLCAweEMwLCAweDI4LCAweDQwLCAweDI0LAorMHgwMCwgMHg5QywgMHg4MCwgMHg1NCwgMHgwMiwgMHgxMiwgMHgyOSwgMHg0NiwgMHg2MCwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MjAsIDB4MjEsIDB4MDAsIDB4OEQsIDB4NDgsIDB4MzQsIDB4MDIsCisweEQxLCAweDA4LCAweDQwLCAweDIzLCAweDYyLCAweDgxLCAweDA4LCAweDA0LCAweDBBLCAweEQwLCAweDA4LCAweDQwLCAweDIzLAorMHgyMSwgMHg4RCwgMHgyMCwgMHgzNCwgMHgwMiwgMHhEMCwgMHhDOCwgMHg0MCwgMHgyMCwgMHgwMSwgMHg4RCwgMHg4MCwgMHgxMCwKKzB4NTMsIDB4NTIsIDB4NDgsIDB4NDEsIDB4NDAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDFELCAweEI4LCAweDQ2LCAweDAwLCAweDFGLCAweDM2LCAweDdDLCAweDUwLCAweEYwLCAweDQ1LCAweEMxLCAweDg3LAorMHgwMCwgMHgxMiwgMHgxNiwgMHg2QywgMHg1MCwgMHhGMSwgMHg0MSwgMHg4MSwgMHg0NiwgMHgwMCwgMHgwRiwgMHgwQSwgMHg3QywKKzB4MDQsIDB4RjAsIDB4MzEsIDB4QzQsIDB4QzQsIDB4MDIsIDB4MUYsIDB4MDAsIDB4NTgsIDB4MTAsIDB4MzAsIDB4NDEsIDB4RTIsCisweDc0LCAweEUwLCAweDBBLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFELCAweEI4LCAweEE3LAorMHgwMCwgMHg5RiwgMHgyNCwgMHg3OCwgMHg4MiwgMHhGMCwgMHgwOSwgMHhDQSwgMHgyRiwgMHgwMSwgMHhGQywgMHgwNCwgMHg3QywKKzB4MDYsIDB4RjEsIDB4MDksIDB4ODAsIDB4MkYsIDB4MDIsIDB4QkYsIDB4MDEsIDB4N0MsIDB4MEEsIDB4QjAsIDB4QzksIDB4QzAsCisweDZGLCAweDAyLCAweEJGLCAweDAwLCAweEVDLCAweDUyLCAweEYwLCAweDRCLCAweEQxLCAweDc3LCAweDYwLCAweDBFLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxRCwgMHhBOCwgMHg2RiwgMHgwMCwgMHg5RiwgMHgxNiwgMHhGQywKKzB4MDIsIDB4MzQsIDB4NEIsIDB4QzAsIDB4MjQsIDB4MDAsIDB4OUYsIDB4MDIsIDB4RkMsIDB4MjIsIDB4RjAsIDB4MEIsIDB4QzAsCisweDJDLCAweDYwLCAweEIzLCAweDAwLCAweEZDLCAweDQ2LCAweEYwLCAweDBCLCAweEMwLCAweDI0LCAweDAwLCAweEIzLCAweDgwLAorMHhDRCwgMHg4MiwgMHhGMCwgMHgwQiwgMHhDMCwgMHg3NywgMHgwMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MTgsIDB4MDAsIDB4ODcsIDB4MDAsIDB4MUQsIDB4MDIsIDB4NzQsIDB4MDAsIDB4MTAsIDB4MDEsIDB4NDAsCisweDA0LCAweDAxLCAweDBELCAweDhBLCAweDc0LCAweDA0LCAweEQwLCAweEExLCAweDQwLCAweDA0LCAweDA4LCAweDExLCAweDAwLAorMHg3NCwgMHgwOCwgMHhEMCwgMHg0MSwgMHg0MCwgMHgwNCwgMHgwMCwgMHgxMSwgMHgwMCwgMHg0NCwgMHgwMCwgMHhEMSwgMHgwMSwKKzB4NDIsIDB4NjMsIDB4MDAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4QTAsCisweEExLCAweDAwLCAweDhELCAweDAwLCAweDM0LCAweDBBLCAweDExLCAweDJDLCAweDQwLCAweDIwLCAweDI0LCAweDg5LCAweDQwLAorMHgzNCwgMHgxQSwgMHhEMCwgMHgwOCwgMHg0MCwgMHgyMCwgMHgxMCwgMHg4NSwgMHgwMCwgMHgzNCwgMHgwMiwgMHhEOCwgMHgwOCwKKzB4NjEsIDB4MjAsIDB4NDAsIDB4OTUsIDB4MDAsIDB4MTQsIDB4MDYsIDB4RDAsIDB4MDgsIDB4NDAsIDB4NEIsIDB4MDAsIDB4MDQsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDI4LCAweDI1LCAweDAwLCAweDlELCAweDAwLAorMHg3MCwgMHgwMiwgMHgxMiwgMHgwOSwgMHg0MCwgMHhBNCwgMHgwQSwgMHg5RCwgMHgyMCwgMHg3NCwgMHgwMiwgMHhEMCwgMHgwOSwKKzB4MTAsIDB4MjQsIDB4MTAsIDB4OTUsIDB4MjAsIDB4NzQsIDB4ODIsIDB4RDAsIDB4MDgsIDB4NEMsIDB4MjQsIDB4MDQsIDB4OTUsCisweDA4LCAweDU0LCAweEEzLCAweEQwLCAweDA5LCAweDQwLCAweDYzLCAweDI4LCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHgyQSwgMHgyNSwgMHgyMCwgMHg5RCwgMHgwMCwgMHg3NCwgMHgwMiwgMHgxMCwgMHgwOSwKKzB4RDAsIDB4NjQsIDB4MDAsIDB4OUYsIDB4MDIsIDB4RkMsIDB4MDIsIDB4RjAsIDB4MDksIDB4QzQsIDB4QTQsIDB4MDQsIDB4OTcsCisweDAwLCAweDdDLCAweDAyLCAweEYyLCAweDA5LCAweDUwLCAweDY0LCAweDAyLCAweDg3LCAweDAwLCAweDVDLCAweDAyLCAweEYwLAorMHgwOSwgMHhDMCwgMHgxNywgMHgwOCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNiwKKzB4MDAsIDB4MjUsIDB4MDAsIDB4OUYsIDB4MDAsIDB4N0UsIDB4MDIsIDB4RjAsIDB4MDgsIDB4QzAsIDB4NjcsIDB4MjAsIDB4OUYsCisweDAwLCAweDdDLCAweDAyLCAweEYwLCAweDA5LCAweEMzLCAweDI3LCAweDAyLCAweDlCLCAweDEwLCAweDdDLCAweDgyLCAweEYwLAorMHgwOSwgMHhDMCwgMHg2NywgMHgwMCwgMHg5QSwgMHgwMCwgMHg2QywgMHgwMiwgMHhGMCwgMHgwOSwgMHhDMCwgMHg1QiwgMHgyMCwKKzB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDgsIDB4MDUsIDB4MDAsIDB4MTcsCisweDAwLCAweDRDLCAweDAwLCAweEIwLCAweDAxLCAweEM4LCAweDA3LCAweDAwLCAweDEzLCAweDAyLCAweDZDLCAweDIwLCAweEYwLAorMHg4MSwgMHhDMCwgMHgwNywgMHgwMCwgMHgxRiwgMHgwMCwgMHg0QywgMHgwMCwgMHgzNCwgMHgwMSwgMHhDMCwgMHg4NywgMHgwMCwKKzB4MTMsIDB4MDQsIDB4N0MsIDB4MDQsIDB4MzAsIDB4MDEsIDB4QzAsIDB4NTMsIDB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDIwLCAweDE0LCAweDA0LCAweDUxLCAweDAwLCAweDJDLCAweDAxLCAweEQwLAorMHhBNywgMHg0OCwgMHgxNywgMHgwOCwgMHg1MSwgMHgwMCwgMHg0NCwgMHgwMSwgMHhEMCwgMHgyNiwgMHg0MCwgMHg1QiwgMHgyMCwKKzB4N0MsIDB4ODMsIDB4QzQsIDB4MDEsIDB4MTEsIDB4MDcsIDB4NDEsIDB4MTcsIDB4MDAsIDB4NzAsIDB4MDAsIDB4RjQsIDB4MDEsCisweDEwLCAweDA3LCAweDQ0LCAweDQzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgxMCwgMHg4MCwgMHgzMiwgMHgwMCwgMHhDNSwgMHgwMCwgMHgxNCwgMHgyNywgMHg5QSwgMHgwQywgMHg0NCwgMHgzMywgMHgwMCwKKzB4QzAsIDB4MDAsIDB4MjQsIDB4MDcsIDB4RDAsIDB4MkMsIDB4NDAsIDB4NjMsIDB4MjAsIDB4Q0QsIDB4MDAsIDB4MDAsIDB4MDIsCisweDkwLCAweDVDLCAweDQwLCAweDM3LCAweDAwLCAweDgxLCAweDAzLCAweDMwLCAweDAzLCAweDk0LCAweDFDLCAweDQwLCAweDQzLAorMHgwMCwgMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHg4MCwgMHg3OSwgMHgwMCwKKzB4RTEsIDB4MDEsIDB4QTUsIDB4MDMsIDB4RDAsIDB4MDYsIDB4NDAsIDB4N0IsIDB4MDIsIDB4RTEsIDB4NDksIDB4ODQsIDB4MDIsCisweEQwLCAweDA2LCAweDQwLCAweEJCLCAweDgwLCAweDZELCAweDAzLCAweDg0LCAweDQ2LCAweDkyLCAweDA2LCAweDQwLCAweDMzLAorMHgwMCwgMHhFMSwgMHgwMiwgMHhCNCwgMHgwNywgMHg5MCwgMHgyNiwgMHg0MCwgMHgxMywgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MTgsIDB4NzksIDB4MDAsIDB4RjcsIDB4MDksIDB4OUMsIDB4MDYsCisweEIwLCAweDFFLCAweEMwLCAweDdGLCAweDQ1LCAweEUyLCAweDE1LCAweEFDLCAweDA3LCAweEYwLCAweDFBLCAweEMwLCAweDZCLAorMHgyMCwgMHhCRiwgMHgwMSwgMHg4QywgMHgwNiwgMHhBMCwgMHgxQSwgMHhDMCwgMHg3QiwgMHgwNSwgMHhBMywgMHgwMSwgMHhGQywKKzB4MDcsIDB4QjAsIDB4MUUsIDB4QzAsIDB4NTMsIDB4NjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDEwLCAweEI4LCAweDMxLCAweDAwLCAweERGLCAweDBDLCAweDVDLCAweDAyLCAweEYxLCAweDAxLCAweEMwLCAweEI3LAorMHgwMSwgMHhERiwgMHg4NiwgMHg3QywgMHgyMiwgMHhGMCwgMHgwOSwgMHhFMCwgMHgyNiwgMHgwMCwgMHgxRiwgMHgwMCwgMHgzQywKKzB4MDIsIDB4NzAsIDB4MDksIDB4QzAsIDB4MzcsIDB4MDEsIDB4REYsIDB4ODAsIDB4N0MsIDB4MDIsIDB4NzIsIDB4MDUsIDB4QzAsCisweDQzLCAweDYwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA2LCAweDI4LCAweDdELAorMHgwMCwgMHhGRiwgMHgwMSwgMHhERSwgMHgyNywgMHg3MCwgMHg5QiwgMHhDMCwgMHg3RiwgMHgwMCwgMHhGRiwgMHgyMSwgMHhEQywKKzB4MjcsIDB4RjAsIDB4MUYsIDB4QzAsIDB4NkYsIDB4MDAsIDB4N0IsIDB4MDksIDB4Q0MsIDB4MDcsIDB4MzAsIDB4MUYsIDB4QzAsCisweDdDLCAweDI2LCAweEJGLCAweDgxLCAweEZDLCAweDI3LCAweDMxLCAweDlGLCAweEMwLCAweDE4LCAweDAwLCAweDA0LCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwgMHgxMCwgMHgzOSwgMHgwMCwgMHhFRCwgMHgwMCwgMHg4NCwKKzB4MDIsIDB4QzAsIDB4MjIsIDB4NDIsIDB4M0IsIDB4MDAsIDB4RTksIDB4MDAsIDB4ODAsIDB4MDIsIDB4RDAsIDB4MjIsIDB4NDAsCisweDNCLCAweDAwLCAweDE5LCAweDAxLCAweDk0LCAweDBBLCAweDUwLCAweDA2LCAweDQwLCAweDc5LCAweDBBLCAweEVELCAweDAwLAorMHhCNCwgMHgzMywgMHgzMCwgMHgyMiwgMHg0MCwgMHg1NCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4ODgsIDB4MDAsIDB4MzksIDB4MDAsIDB4RUQsIDB4MDAsIDB4OTQsIDB4ODIsIDB4NTAsIDB4MDIsIDB4MDAsCisweDNCLCAweDAwLCAweEVELCAweDA4LCAweDk0LCAweDAzLCAweEQxLCAweDBBLCAweDQwLCAweDJCLCAweDAwLCAweDM5LCAweDEwLAorMHgyNCwgMHgwMywgMHhEMCwgMHgwNCwgMHg0MCwgMHgzOCwgMHgwMCwgMHhBRCwgMHgwMCwgMHhCNCwgMHgwOSwgMHgxMiwgMHgwRSwKKzB4NjAsIDB4NjEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4MjAsCisweDIxLCAweDAwLCAweENELCAweDAwLCAweDA0LCAweDAyLCAweEQwLCAweDAwLCAweDQwLCAweEYzLCAweDAwLCAweENELCAweDAyLAorMHgwNCwgMHgwMiwgMHhEMCwgMHgwOCwgMHg0OCwgMHg3MywgMHg4NCwgMHgwOSwgMHgwMSwgMHgzNCwgMHgwMywgMHhEMCwgMHgwNCwKKzB4NjQsIDB4MzEsIDB4ODIsIDB4Q0QsIDB4MDAsIDB4MzQsIDB4MDQsIDB4MTEsIDB4MDAsIDB4NDAsIDB4MDksIDB4MjAsIDB4MDQsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE1LCAweEE4LCAweDM1LCAweDEwLCAweEZGLCAweDAwLAorMHg1NCwgMHgwMywgMHg3MCwgMHgwOSwgMHhDMCwgMHgzRiwgMHgwMywgMHhGRiwgMHgwMSwgMHg1QywgMHgwMywgMHhGMCwgMHgwOSwKKzB4QzgsIDB4QTcsIDB4MDEsIDB4OUIsIDB4MDEsIDB4NjQsIDB4MDIsIDB4QjAsIDB4MEQsIDB4Q0MsIDB4RkMsIDB4MTIsIDB4OUQsCisweDBBLCAweDdDLCAweDkwLCAweDMzLCAweDE5LCAweEMyLCAweDc1LCAweDAwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwRCwgMHgwMCwgMHgzNywgMHgyMCwgMHhERiwgMHgwMCwgMHg3QywgMHgwMywgMHhGMCwgMHgyOSwKKzB4QzAsIDB4MzcsIDB4MDgsIDB4REIsIDB4MTgsIDB4N0UsIDB4MDIsIDB4RjIsIDB4MDEsIDB4NDAsIDB4MzcsIDB4MDAsIDB4MUUsCisweDAwLCAweDVDLCAweDBBLCAweDM4LCAweDA1LCAweEMwLCAweDM3LCAweDAwLCAweDlGLCAweDAwLCAweDdDLCAweDA4LCAweDc0LAorMHg4MSwgMHg1MCwgMHgxNiwgMHgyMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MSwKKzB4MDgsIDB4M0YsIDB4MTAsIDB4REYsIDB4MDAsIDB4RkMsIDB4MEIsIDB4RjAsIDB4MEIsIDB4QzAsIDB4M0YsIDB4MDAsIDB4REYsCisweDAwLCAweEZDLCAweDA3LCAweEYxLCAweDBBLCAweEMwLCAweDJDLCAweDQwLCAweDMyLCAweDAxLCAweEZDLCAweDAyLCAweEYyLAorMHgxQSwgMHg4MCwgMHgzQywgMHgwMCwgMHhCMywgMHgwMCwgMHg3QywgMHgwMCwgMHhGMCwgMHgwMSwgMHhDMSwgMHgwNywgMHgyNiwKKzB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODEsIDB4MjAsIDB4MzYsIDB4MDAsIDB4REQsCisweDAwLCAweDY0LCAweDA3LCAweEQwLCAweDE5LCAweDQyLCAweDMzLCAweDAwLCAweEQxLCAweDgwLCAweDc0LCAweDA3LCAweEQwLAorMHgzOSwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMSwgMHgwNywgMHg3NCwgMHgwMCwgMHhEMCwgMHgxOSwgMHhDMCwgMHgzNywgMHgwMCwKKzB4OUIsIDB4MTgsIDB4NjQsIDB4MEMsIDB4RDAsIDB4MzEsIDB4NDAsIDB4MDcsIDB4MDIsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweEEwLCAweDM2LCAweDAwLCAweERELCAweDAwLCAweDc0LCAweDAzLCAweEQ4LAorMHgxOSwgMHg0MCwgMHgzNywgMHgwMCwgMHhEOSwgMHgwMCwgMHg3NCwgMHgxMywgMHhEMCwgMHgxMSwgMHg0MCwgMHhBNiwgMHgwMCwKKzB4MzUsIDB4MDgsIDB4NzQsIDB4MDMsIDB4QzgsIDB4NDksIDB4NDYsIDB4MzksIDB4MDAsIDB4OTEsIDB4MDAsIDB4NjAsIDB4MDQsCisweEQwLCAweDE5LCAweDQwLCAweDA3LCAweDA4LCAweDBBLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgxMCwgMHgyMCwgMHgzMCwgMHgwMCwgMHhDRCwgMHgwMCwgMHgyNCwgMHgwMiwgMHhEOCwgMHgwOCwgMHg0MCwgMHgzNywgMHgwMCwKKzB4QzEsIDB4MDAsIDB4MzQsIDB4ODIsIDB4RDAsIDB4MDAsIDB4NDAsIDB4MzAsIDB4ODAsIDB4MDUsIDB4MDAsIDB4MzQsIDB4MDIsCisweEQwLCAweDAwLCAweDQwLCAweDMyLCAweDAxLCAweEM5LCAweEEwLCAweDI0LCAweDAwLCAweEQwLCAweDAwLCAweDQwLCAweDQzLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHg5OCwgMHgzNiwgMHgwMCwKKzB4RkYsIDB4MDAsIDB4N0MsIDB4MDMsIDB4RjAsIDB4MDEsIDB4QzAsIDB4M0YsIDB4MDAsIDB4RkIsIDB4MDAsIDB4NzQsIDB4MDIsCisweEQxLCAweDAxLCAweEMwLCAweDI0LCAweDAwLCAweDE3LCAweDA0LCAweDdDLCAweDAzLCAweEYwLCAweDAxLCAweEMwLCAweDNELAorMHgwNSwgMHgxMywgMHg0MCwgMHg3QywgMHgwMCwgMHhGMCwgMHgwMSwgMHhDMiwgMHgwNywgMHg2NCwgMHgwOCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODUsIDB4QjgsIDB4MkYsIDB4MDAsIDB4RkYsIDB4MDAsIDB4RUMsIDB4MDIsCisweEYwLCAweDAzLCAweENDLCAweDNGLCAweDAwLCAweEZCLCAweDAwLCAweEY4LCAweDAyLCAweEYyLCAweDAzLCAweDg4LCAweDFGLAorMHgwMCwgMHgxQiwgMHgxNiwgMHhGQywgMHgwMSwgMHhGMCwgMHgwMywgMHhDMCwgMHgzNywgMHgwMCwgMHg3RiwgMHgwMCwgMHhGQywKKzB4MDAsIDB4RjAsIDB4MDMsIDB4QzAsIDB4MTcsIDB4NjAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAzLCAweEFBLCAweDdCLCAweDEyLCAweEVGLCAweDA5LCAweEVDLCAweDA3LCAweEIwLCAweDlFLCAweEMwLCAweDdBLAorMHgwMCwgMHhGNywgMHgwOSwgMHhFQywgMHgwNywgMHhGMCwgMHgzRiwgMHhDMCwgMHg3QiwgMHgwMCwgMHhGNywgMHgyOSwgMHhDQywKKzB4MDcsIDB4RjAsIDB4MUYsIDB4QzAsIDB4N0YsIDB4MDAsIDB4RjMsIDB4MDEsIDB4RkMsIDB4QTcsIDB4QjAsIDB4MUYsIDB4QzAsCisweDBDLCAweDAwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweDE4LCAweDA3LAorMHgwMCwgMHgxRCwgMHg0NCwgMHg0NCwgMHgwNCwgMHgzMiwgMHgwMSwgMHg0MCwgMHg0NCwgMHgyMCwgMHgxMSwgMHgwNCwgMHg0QywKKzB4MTAsIDB4MTAsIDB4MDEsIDB4QzAsIDB4NDQsIDB4MDAsIDB4MTEsIDB4MDAsIDB4NDQsIDB4MTAsIDB4RDAsIDB4MDEsIDB4NDAsCisweDQ0LCAweDEwLCAweDExLCAweDIwLCAweDc0LCAweDAwLCAweDEwLCAweDExLCAweEMwLCAweDBFLCAweDAwLCAweDBDLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMywgMHhBMCwgMHgzMywgMHgxMSwgMHhERCwgMHgwMCwgMHgyNCwKKzB4MDMsIDB4OTEsIDB4NEQsIDB4NDIsIDB4MzMsIDB4MDAsIDB4QzUsIDB4MDAsIDB4MzQsIDB4NDMsIDB4RDAsIDB4NEMsIDB4NDAsCisweDMyLCAweDAwLCAweEM1LCAweDQ0LCAweDE0LCAweDQzLCAweEQwLCAweDBDLCAweDYyLCAweDMyLCAweDAwLCAweEMxLCAweDgwLAorMHgzNCwgMHgxMywgMHg5MCwgMHgwRCwgMHg0MiwgMHg0RCwgMHg4MCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDMsIDB4QTAsIDB4MDUsIDB4MDAsIDB4MUQsIDB4MDAsIDB4NTQsIDB4MDAsIDB4OTAsIDB4MDEsIDB4NDAsCisweDA1LCAweDA4LCAweDAxLCAweDAwLCAweDM0LCAweDAwLCAweDEwLCAweDAxLCAweDQwLCAweDA0LCAweDAwLCAweDA1LCAweDAwLAorMHg1NCwgMHgwMCwgMHhEQSwgMHgwMSwgMHg0NCwgMHgwNCwgMHg0MCwgMHgxMSwgMHgwMCwgMHgzNCwgMHgwMCwgMHgxMSwgMHgwMSwKKzB4NDAsIDB4MEYsIDB4MjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4QTAsCisweDM3LCAweDA4LCAweERGLCAweDgwLCAweDZDLCAweDgzLCAweEIwLCAweDBELCAweEMwLCAweDM3LCAweDAwLCAweEQ2LCAweDAwLAorMHg3QywgMHgwMywgMHhGMCwgMHgwRCwgMHhDMCwgMHgzMywgMHgwMCwgMHhENywgMHgwMCwgMHg1QywgMHgwMywgMHhFMCwgMHgwRCwKKzB4QzAsIDB4MzIsIDB4MDAsIDB4RDMsIDB4MDAsIDB4N0MsIDB4MDMsIDB4QjEsIDB4MEMsIDB4QzAsIDB4MjEsIDB4MDAsIDB4MEUsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA3LCAweDgwLCAweDBELCAweDAwLCAweDNGLCAweDAwLAorMHhFQywgMHgwMCwgMHg3MCwgMHgwMywgMHhDOCwgMHgwRSwgMHgyMCwgMHgzRSwgMHgwMCwgMHhDQywgMHgwMCwgMHhGMCwgMHgwMywKKzB4QzAsIDB4MEMsIDB4MDgsIDB4M0IsIDB4MDAsIDB4RUMsIDB4MDAsIDB4RjIsIDB4MDMsIDB4QzAsIDB4MEUsIDB4MDAsIDB4M0YsCisweDAwLCAweEU0LCAweDAwLCAweEYwLCAweDAzLCAweEMwLCAweDFFLCAweDIwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwQSwgMHgwMCwgMHgzNSwgMHgyMCwgMHhENywgMHhDOCwgMHg1QywgMHg4MywgMHhDMCwgMHgwRCwKKzB4QzAsIDB4MzUsIDB4MDEsIDB4RDcsIDB4MDAsIDB4NUMsIDB4MDMsIDB4RjAsIDB4NEQsIDB4QzAsIDB4MzYsIDB4MDAsIDB4RDcsCisweDAwLCAweDdDLCAweDEzLCAweDMwLCAweDRELCAweEM0LCAweDM2LCAweDAwLCAweEQ3LCAweDAwLCAweDdDLCAweDAzLCAweEYwLAorMHgwRCwgMHhEMCwgMHgyOCwgMHgyMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMywKKzB4QTAsIDB4QzQsIDB4MDAsIDB4MDEsIDB4ODMsIDB4MDQsIDB4MDQsIDB4MTAsIDB4RTAsIDB4NDAsIDB4ODAsIDB4MDAsIDB4MTEsCisweDAwLCAweDQ0LCAweDAwLCAweEQwLCAweDAxLCAweDQwLCAweDA3LCAweDAyLCAweDExLCAweDAwLCAweDc0LCAweDQ4LCAweEIwLAorMHg1MCwgMHg0MCwgMHhDNywgMHgwMCwgMHgxMSwgMHgwMCwgMHg3MCwgMHgyNCwgMHhEMSwgMHgwMSwgMHg0MCwgMHg0RCwgMHgwMCwKKzB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTMsIDB4MjAsIDB4QjAsIDB4MDQsIDB4QzUsCisweDUzLCAweDE0LCAweDAzLCAweDUwLCAweDBDLCAweDQyLCAweDMxLCAweDAwLCAweEM1LCAweDAwLCAweDE0LCAweDAzLCAweEQwLAorMHgwRCwgMHgwMCwgMHgzMiwgMHgwMCwgMHhDNSwgMHgwMCwgMHgzNCwgMHgwRiwgMHg5MiwgMHgzQywgMHg0NCwgMHhCMiwgMHgwOSwKKzB4QzUsIDB4MDAsIDB4MjQsIDB4MDMsIDB4RDAsIDB4MEMsIDB4NDAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBGLCAweDA4LCAweDRDLCAweDA2LCAweDMxLCAweDAxLCAweEM0LCAweDA0LCAweDExLAorMHgxMywgMHg0MCwgMHg0OCwgMHgwOCwgMHgyNSwgMHgwMSwgMHg4NCwgMHgwNCwgMHhEMCwgMHgxMiwgMHg0MCwgMHg0QiwgMHgwMCwKKzB4MjEsIDB4MDEsIDB4RjQsIDB4MDQsIDB4RDIsIDB4OTIsIDB4NDAsIDB4NEIsIDB4MEMsIDB4MjEsIDB4MDEsIDB4QjQsIDB4MTQsCisweEQwLCAweDkyLCAweDQwLCAweDNGLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgxMiwgMHgxMCwgMHgzMCwgMHgwMCwgMHhDNywgMHgwOCwgMHgxQywgMHg2MywgMHg3MiwgMHgwQywgMHhDMCwgMHgzMSwgMHgwMiwKKzB4RDUsIDB4MDAsIDB4MUMsIDB4MTMsIDB4RjAsIDB4NEMsIDB4QzAsIDB4MzIsIDB4MDEsIDB4QzcsIDB4MjgsIDB4M0MsIDB4MjMsCisweEIwLCAweDhDLCAweEMwLCAweDMyLCAweDAwLCAweEM2LCAweDAwLCAweDNDLCAweDYzLCAweEYyLCAweDhDLCAweEMwLCAweDRBLAorMHg2MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHgyOCwgMHgwRCwgMHgwMCwKKzB4M0YsIDB4MDAsIDB4QkMsIDB4MDAsIDB4NzAsIDB4MDMsIDB4QzAsIDB4MEYsIDB4MEEsIDB4M0IsIDB4MDgsIDB4RkMsIDB4MDAsCisweEYwLCAweDAzLCAweEMwLCAweDBGLCAweDAwLCAweDNGLCAweDA4LCAweEJDLCAweEEwLCAweEEwLCAweDgxLCAweEMwLCAweDBCLAorMHgxMCwgMHgxRiwgMHgwMCwgMHhGQywgMHgzMCwgMHhGMCwgMHg5MCwgMHhDMCwgMHgwOSwgMHg2MCwgMHgwNCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4QTAsIDB4MzcsIDB4MDAsIDB4RDMsIDB4MDAsIDB4N0UsIDB4MDMsCisweDcwLCAweDBELCAweDgwLCAweDM3LCAweDAwLCAweERGLCAweDAwLCAweDdDLCAweDAzLCAweDMwLCAweDBELCAweEMwLCAweDMwLAorMHgwMCwgMHhEQSwgMHgwMCwgMHg1QywgMHgwMywgMHhGMCwgMHgwQywgMHhDMCwgMHgzMCwgMHgwMCwgMHhEMywgMHgwMCwgMHg3QywKKzB4MDMsIDB4MzQsIDB4MEQsIDB4QzAsIDB4NDAsIDB4MDAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDEzLCAweDgwLCAweDBELCAweDA4LCAweDIwLCAweDAwLCAweEIyLCAweDAwLCAweEQxLCAweDAyLCAweDQwLCAweDBCLAorMHgwMCwgMHgyRCwgMHgwMCwgMHhCNCwgMHgwMCwgMHg1MCwgMHgwMiwgMHhDMCwgMHgwOSwgMHgwMCwgMHgyMSwgMHhBMCwgMHhCNCwKKzB4MDAsIDB4RDAsIDB4MDIsIDB4QzQsIDB4MEEsIDB4MDAsIDB4MkIsIDB4ODAsIDB4QjQsIDB4MDAsIDB4MTAsIDB4MDIsIDB4QzAsCisweDRFLCAweDAwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDAyLCAweDc5LAorMHgyMCwgMHhFOSwgMHgwMSwgMHg5NCwgMHg4NywgMHhEMCwgMHgxRSwgMHg2MCwgMHg3QiwgMHgwMCwgMHhFRCwgMHgwMSwgMHhGNCwKKzB4MDcsIDB4RDAsIDB4MUYsIDB4NDAsIDB4N0IsIDB4MDAsIDB4RTksIDB4MDEsIDB4QjQsIDB4MDcsIDB4RDAsIDB4MUYsIDB4NDAsCisweDdFLCAweDAwLCAweEU5LCAweDIxLCAweEI0LCAweDA3LCAweDEwLCAweDFFLCAweDQwLCAweDEwLCAweDAwLCAweDA0LCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNiwgMHgyOCwgMHgwMiwgMHgwMCwgMHgwOSwgMHgwMCwgMHgzNCwKKzB4MDAsIDB4RDIsIDB4MDEsIDB4NDAsIDB4MDMsIDB4MDAsIDB4MEQsIDB4MDAsIDB4NzQsIDB4MDAsIDB4RDAsIDB4MDAsIDB4NDAsCisweDAxLCAweDgwLCAweDBELCAweDAwLCAweDM0LCAweDgwLCAweEQwLCAweDAwLCAweDQwLCAweDAyLCAweDAwLCAweDA5LCAweDAwLAorMHgzNiwgMHgwMCwgMHgxMCwgMHgwMCwgMHg0MCwgMHg1QSwgMHgyMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MTcsIDB4QTAsIDB4MTEsIDB4MDAsIDB4NUIsIDB4MDAsIDB4NzgsIDB4MDEsIDB4NzAsIDB4MDUsIDB4RTAsCisweDE3LCAweDAwLCAweDVGLCAweDAwLCAweDdFLCAweDAxLCAweEIxLCAweDA0LCAweEMwLCAweDE2LCAweDAwLCAweDVCLCAweDIwLAorMHg1QywgMHgwMSwgMHhGMCwgMHgwNSwgMHhDNCwgMHgxNCwgMHgwMCwgMHg1QiwgMHgyMCwgMHg3QywgMHgwMSwgMHgzMCwgMHgwNSwKKzB4QzAsIDB4NUMsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4ODgsCisweDhGLCAweDQwLCAweDM3LCAweDAwLCAweEZDLCAweDAwLCAweEYwLCAweDAzLCAweEUwLCAweDBGLCAweDAwLCAweDNGLCAweDAwLAorMHhGQSwgMHgwMCwgMHg3MCwgMHgyMywgMHhDMCwgMHgwRiwgMHgwMCwgMHgzMywgMHgwMCwgMHhGNCwgMHgwOCwgMHhGMCwgMHgyMywKKzB4QzAsIDB4OEYsIDB4MDAsIDB4M0YsIDB4NDAsIDB4RjQsIDB4MDgsIDB4RjAsIDB4MDMsIDB4QzAsIDB4NEIsIDB4MjAsIDB4MDQsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDI1LCAweDAxLCAweDk3LCAweDAwLAorMHg3QywgMHgxNiwgMHg1MCwgMHgwOSwgMHhDMCwgMHgyNywgMHgxMCwgMHg5RiwgMHhBMCwgMHg3QywgMHgwMiwgMHgzMywgMHgwOSwKKzB4QzIsIDB4MjUsIDB4MjAsIDB4OTMsIDB4NDAsIDB4NzQsIDB4MDIsIDB4MDIsIDB4MDksIDB4NTQsIDB4QTQsIDB4MDAsIDB4OTcsCisweDAwLCAweDdDLCAweDA2LCAweDMyLCAweDI5LCAweEMyLCAweDQwLCAweDIwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgyMCwgMHhFNiwgMHgwMCwgMHg5MSwgMHgwNSwgMHgzNCwgMHg4NiwgMHgxMCwgMHgzOSwKKzB4NDAsIDB4MjQsIDB4MDAsIDB4OUQsIDB4MDAsIDB4NzQsIDB4MDIsIDB4NTAsIDB4MDksIDB4MTAsIDB4QTAsIDB4MDQsIDB4OTEsCisweDAwLCAweDM0LCAweDA2LCAweEIyLCAweDI4LCAweDQwLCAweEUwLCAweDA4LCAweDk1LCAweDAwLCAweDMwLCAweDA2LCAweDUxLAorMHgwOCwgMHg0MCwgMHgwNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwKKzB4QTAsIDB4MjQsIDB4MDAsIDB4QjUsIDB4MDQsIDB4RjQsIDB4MDIsIDB4NTAsIDB4NkIsIDB4NDAsIDB4MkQsIDB4MDAsIDB4QkQsCisweDgwLCAweEQ0LCAweDgyLCAweDE4LCAweDBCLCAweDQxLCAweDJDLCAweEMwLCAweEIxLCAweDAwLCAweEQ0LCAweDEyLCAweDEwLAorMHgyQiwgMHg0MCwgMHgyRCwgMHg5MCwgMHhCMCwgMHg4MCwgMHhGNCwgMHgyMiwgMHgxMiwgMHgwQiwgMHg0MiwgMHg2MCwgMHgwMCwKKzB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MjAsIDB4M0QsIDB4MDAsIDB4QTEsCisweDAwLCAweEY0LCAweDAyLCAweDUwLCAweDBBLCAweDQwLCAweDI4LCAweDIwLCAweEFDLCAweDI4LCAweEI0LCAweDIyLCAweDUwLAorMHgwQSwgMHg0MCwgMHgyOCwgMHgwMCwgMHhBMSwgMHhDOCwgMHhGNCwgMHgwMywgMHhEMCwgMHgwQSwgMHg0MCwgMHgyRCwgMHgwMCwKKzB4QTQsIDB4MDAsIDB4RjQsIDB4MjMsIDB4NTAsIDB4MEUsIDB4NDAsIDB4NDEsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFELCAweDM4LCAweDA2LCAweDAwLCAweDE3LCAweDgwLCAweDdDLCAweDAwLCAweDcwLAorMHgwMSwgMHhDMCwgMHgwNywgMHgwMCwgMHgxQywgMHgwMiwgMHg3QywgMHgwOCwgMHgzMCwgMHgwMSwgMHhDMCwgMHgwNSwgMHgwMCwKKzB4MTMsIDB4MDIsIDB4NUMsIDB4MDAsIDB4MzIsIDB4QTEsIDB4QzAsIDB4MTUsIDB4MDAsIDB4MTcsIDB4MEEsIDB4MzgsIDB4MDgsCisweDMwLCAweDAzLCAweEM4LCAweDc0LCAweEUwLCAweDBBLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgxRCwgMHhCMCwgMHgyNSwgMHgwNSwgMHg5RiwgMHgzNCwgMHg3QywgMHgwMiwgMHhCMCwgMHg0OSwgMHhDMSwgMHgyNywgMHgwMCwKKzB4OUYsIDB4MDQsIDB4MkMsIDB4MTIsIDB4RjAsIDB4NDgsIDB4QzksIDB4MjcsIDB4MDAsIDB4OUYsIDB4MDQsIDB4N0MsIDB4NTIsCisweEIwLCAweDE5LCAweEMwLCAweDI2LCAweDAwLCAweDlGLCAweDAxLCAweDdDLCAweDEyLCAweEYwLCAweDA4LCAweEMwLCAweDc3LAorMHg0MCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxRCwgMHg4MCwgMHgyRiwgMHgwMCwKKzB4QkYsIDB4MDgsIDB4REMsIDB4MDIsIDB4RjgsIDB4MEIsIDB4QzIsIDB4MkYsIDB4MDAsIDB4OEYsIDB4MDIsIDB4N0MsIDB4MDIsCisweDM0LCAweDBCLCAweEMwLCAweDJDLCAweDAwLCAweDkzLCAweDAwLCAweEZDLCAweDBBLCAweDMwLCAweDBCLCAweEMwLCAweDJDLAorMHg0MCwgMHg4MywgMHgwMCwgMHhDQywgMHgwMiwgMHhCMCwgMHgwQiwgMHhDMCwgMHg3NCwgMHgwMCwgMHgwRSwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDgsIDB4NDcsIDB4MDEsIDB4MUQsIDB4MjUsIDB4NDQsIDB4MDAsCisweEQxLCAweDQxLCAweDQxLCAweDA3LCAweDAwLCAweDFELCAweDA0LCAweDc0LCAweDgwLCAweDEwLCAweDAxLCAweDQyLCAweDA1LAorMHgwOCwgMHgxMSwgMHgwMCwgMHg3NCwgMHgwMCwgMHhCMCwgMHgwMSwgMHg0MiwgMHgwNCwgMHgwMCwgMHgxMSwgMHg0MCwgMHg0NCwKKzB4MDAsIDB4MTEsIDB4MDEsIDB4NDAsIDB4NjEsIDB4MDAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDEyLCAweDAwLCAweDMxLCAweDE1LCAweDhELCAweDQ0LCAweDEwLCAweDAyLCAweEQ4LCAweDBDLCAweDQwLCAweDIzLAorMHgwMCwgMHg4RCwgMHgwNCwgMHgzNCwgMHg0MiwgMHgxMCwgMHgwOSwgMHg0MCwgMHgyMCwgMHgwMCwgMHg4MSwgMHgxNCwgMHgzNCwKKzB4MDIsIDB4MTAsIDB4MDgsIDB4NTAsIDB4MjAsIDB4ODAsIDB4ODEsIDB4MjAsIDB4MTUsIDB4MDIsIDB4RDAsIDB4MDksIDB4NDAsCisweDQ4LCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDJBLCAweDI1LAorMHgwMCwgMHg5RCwgMHgwMCwgMHg0NCwgMHg4MiwgMHhEMCwgMHgwOSwgMHg0MCwgMHgyNywgMHgwMCwgMHg5RCwgMHgwMCwgMHg3NCwKKzB4MDIsIDB4MTEsIDB4MDksIDB4NDAsIDB4MjUsIDB4MjAsIDB4OTEsIDB4MDAsIDB4NzQsIDB4MDIsIDB4OTAsIDB4MDgsIDB4NjAsCisweDI0LCAweDAwLCAweDkxLCAweDAwLCAweDU0LCAweDAyLCAweEQwLCAweDA5LCAweDQwLCAweDYxLCAweDIwLCAweDA0LCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHgyMiwgMHgyNSwgMHgxMCwgMHg5RiwgMHgwMCwgMHg1QywKKzB4MDIsIDB4RDAsIDB4MDksIDB4QzAsIDB4MjcsIDB4MDAsIDB4OUYsIDB4MDAsIDB4N0MsIDB4MDIsIDB4MzAsIDB4MDksIDB4QzAsCisweDIwLCAweDA4LCAweDkzLCAweDgwLCAweDdDLCAweDAyLCAweDMwLCAweDA5LCAweEMwLCAweDIwLCAweDAwLCAweDkzLCAweDAwLAorMHg1QywgMHg4MiwgMHhGMCwgMHgwOSwgMHhDMCwgMHgxNCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MTYsIDB4MDgsIDB4MjUsIDB4MDAsIDB4OUYsIDB4MDAsIDB4N0MsIDB4MDIsIDB4RjAsIDB4MDksIDB4QzAsCisweDI3LCAweDAwLCAweDlGLCAweDAwLCAweDdDLCAweDAyLCAweEYwLCAweDA5LCAweEMwLCAweDI3LCAweDQwLCAweDlGLCAweDAwLAorMHg3QywgMHgwMiwgMHhGMCwgMHgwOSwgMHhDMSwgMHgyNywgMHgwNCwgMHg5RiwgMHgwMCwgMHg2QywgMHg0MiwgMHgzMCwgMHgwOSwKKzB4NDAsIDB4NUIsIDB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDgsCisweDA1LCAweDAwLCAweDE3LCAweDAwLCAweDRDLCAweDAwLCAweEYwLCAweDQxLCAweEM0LCAweDA3LCAweDAxLCAweDE3LCAweDAwLAorMHg0QywgMHgwMCwgMHg3MCwgMHgwMSwgMHhDMywgMHgwNywgMHgwMCwgMHgxRiwgMHgwMCwgMHg1QywgMHg0MCwgMHhCMCwgMHgwMSwKKzB4QzAsIDB4MDQsIDB4MDAsIDB4MUYsIDB4MDAsIDB4NEMsIDB4MDAsIDB4MzAsIDB4MDEsIDB4QzEsIDB4NTEsIDB4MjAsIDB4MDQsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDAwLCAweDFDLCAweDAyLCAweDdELCAweEQ4LAorMHg0NCwgMHgwMSwgMHg3MCwgMHgyNywgMHg0MCwgMHg5RiwgMHgwMCwgMHg1MSwgMHgyMCwgMHg2QywgMHgwMSwgMHhEMCwgMHg3NiwKKzB4NDIsIDB4REYsIDB4MDAsIDB4NUQsIDB4NDAsIDB4RUMsIDB4MEQsIDB4MTEsIDB4MjcsIDB4NDAsIDB4MUMsIDB4MDAsIDB4NTksCisweDAwLCAweEQ0LCAweDAxLCAweDE0LCAweDA2LCAweDUwLCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHhBMCwgMHgzMiwgMHgwMCwgMHhENSwgMHg0MCwgMHgwNCwgMHgyNiwgMHhEMCwgMHgwQywKKzB4NDAsIDB4QTMsIDB4MDAsIDB4QzUsIDB4MDAsIDB4NDQsIDB4MDMsIDB4NTgsIDB4MEMsIDB4NDgsIDB4RjMsIDB4MDMsIDB4Q0QsCisweDAwLCAweDQ2LCAweDA3LCAweDkwLCAweDJDLCAweDQwLCAweDMyLCAweDAwLCAweERELCAweDAwLCAweDQwLCAweDBGLCAweDAwLAorMHgzQywgMHg0MCwgMHg0MCwgMHgwMCwgMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwKKzB4ODAsIDB4MzgsIDB4MjAsIDB4RUQsIDB4NDAsIDB4ODUsIDB4MDMsIDB4NTgsIDB4MEUsIDB4NjgsIDB4RUYsIDB4MDAsIDB4RjUsCisweDA5LCAweEE0LCAweDIzLCAweEQwLCAweDA2LCAweDQwLCAweDNCLCAweDAwLCAweEZELCAweDQ1LCAweEE0LCAweDBCLCAweDEwLAorMHgwMiwgMHg0MSwgMHgyQSwgMHgwNCwgMHhGOSwgMHgwNCwgMHg5NiwgMHgwQiwgMHgxMiwgMHgwRSwgMHg0NSwgMHgxMCwgMHgwMCwKKzB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MTAsIDB4NTksIDB4MDAsIDB4NzcsCisweDAxLCAweDhDLCAweDA3LCAweEYxLCAweDFFLCAweDQwLCAweDZCLCAweDAwLCAweEU3LCAweDE1LCAweDhDLCAweDA3LCAweDcwLAorMHgxNiwgMHg4MCwgMHg3QiwgMHgwMCwgMHhFRiwgMHgwMSwgMHhEQywgMHgwNSwgMHhCMCwgMHgxRSwgMHhEMCwgMHg1QSwgMHgwOCwKKzB4RUYsIDB4MDcsIDB4Q0MsIDB4MDYsIDB4MzAsIDB4MUUsIDB4QzAsIDB4NTEsIDB4NjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweEI4LCAweDE1LCAweDAwLCAweDVGLCAweDQwLCAweDdDLCAweDgzLCAweEYwLAorMHgwRCwgMHhDMCwgMHgyMywgMHgwMCwgMHhEQiwgMHgwNiwgMHg3QywgMHgwMywgMHhGMCwgMHgwNSwgMHhDMCwgMHgzNywgMHgwMCwKKzB4Q0YsIDB4MDgsIDB4N0UsIDB4ODMsIDB4RjAsIDB4NjAsIDB4RDUsIDB4MTUsIDB4MjAsIDB4REIsIDB4MDYsIDB4N0MsIDB4MDIsCisweEQwLCAweDBDLCAweEMwLCAweDQzLCAweDYwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwNiwgMHgyMCwgMHg3RCwgMHgwQSwgMHhGRiwgMHgwMSwgMHhEQywgMHhBNywgMHhGMCwgMHgxRiwgMHhDMCwgMHg3RiwgMHgwMCwKKzB4RTcsIDB4MDEsIDB4OEMsIDB4MEYsIDB4QjAsIDB4MTMsIDB4QzgsIDB4N0IsIDB4MDAsIDB4RjMsIDB4MDMsIDB4Q0MsIDB4MDcsCisweDMwLCAweDFCLCAweEQwLCAweDc4LCAweEEyLCAweEZCLCAweDAzLCAweENDLCAweDA3LCAweEYwLCAweDFBLCAweEMwLCAweDE4LAorMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwgMHgwMCwgMHgzOSwgMHgwMCwKKzB4RUMsIDB4MTgsIDB4QjQsIDB4ODMsIDB4RDAsIDB4MEUsIDB4NDIsIDB4M0IsIDB4MjgsIDB4RTEsIDB4MTAsIDB4OTQsIDB4MDMsCisweDUwLCAweDIyLCAweDQ0LCAweDNCLCAweDA2LCAweEU1LCAweDAwLCAweEQ0LCAweDAzLCAweDUwLCAweDQzLCAweDQwLCAweDI4LAorMHgwMiwgMHhFMSwgMHgwNCwgMHg4NCwgMHgxMywgMHg3MSwgMHg0QSwgMHg0OCwgMHg1NCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OTgsIDB4MDIsIDB4MzksIDB4MTAsIDB4RUQsIDB4MDAsIDB4OTQsIDB4MDMsCisweEMwLCAweDA2LCAweDQwLCAweDNCLCAweDA0LCAweEY1LCAweDAwLCAweEU0LCAweDQzLCAweDEwLCAweDAyLCAweDQwLCAweDNGLAorMHgwMCwgMHhGRCwgMHgwMCwgMHhENCwgMHgwMSwgMHg1MCwgMHgwQSwgMHg2MSwgMHgxOCwgMHg4NCwgMHhFMSwgMHhCMCwgMHg4NCwKKzB4NDIsIDB4RDIsIDB4MEEsIDB4NDAsIDB4MjAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAyLCAweDI4LCAweDY1LCAweDAwLCAweDhELCAweDAwLCAweDM2LCAweDEzLCAweEQwLCAweDM5LCAweDQwLCAweEYzLAorMHgwMCwgMHhDNSwgMHgwMywgMHgzNCwgMHgwQiwgMHg1MCwgMHhBMCwgMHg0MCwgMHhGMywgMHgwMCwgMHhERCwgMHgwMiwgMHgxNCwKKzB4MkEsIDB4NTAsIDB4MzgsIDB4NjIsIDB4NDAsIDB4MDQsIDB4QzksIDB4NTMsIDB4MDUsIDB4MDQsIDB4NTAsIDB4MjgsIDB4NDAsCisweDA4LCAweDIwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFELCAweEEwLCAweEU1LAorMHgxMCwgMHg5RiwgMHgwMSwgMHg1QywgMHg0MywgMHhEMCwgMHhBMSwgMHhDNCwgMHgwNywgMHgwMiwgMHhGNywgMHgwMSwgMHhFQywKKzB4MDcsIDB4MzAsIDB4QjEsIDB4QzgsIDB4QjcsIDB4MDAsIDB4RkYsIDB4MDEsIDB4NUUsIDB4MEUsIDB4MTAsIDB4OTksIDB4QzQsCisweDQ0LCAweDAwLCAweEVCLCAweDAwLCAweDBDLCAweDgxLCAweEYzLCAweDNELCAweEM2LCAweDU0LCAweDAwLCAweDA2LCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHgwOCwgMHgyNywgMHgwNiwgMHg5RiwgMHgwNCwgMHg3QywKKzB4MDMsIDB4RjAsIDB4ODEsIDB4QzAsIDB4QTcsIDB4MTAsIDB4REEsIDB4MDAsIDB4NUMsIDB4NDMsIDB4NzgsIDB4MjEsIDB4ODAsCisweDM3LCAweDBDLCAweEQ3LCAweEI4LCAweDc4LCAweDAwLCAweEYwLCAweDA5LCAweEMwLCAweEE3LCAweDQwLCAweEQ3LCAweDAwLAorMHg3QywgMHg4MSwgMHg3MCwgMHhBRCwgMHhDMSwgMHgzNywgMHgyMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4ODEsIDB4MDgsIDB4MEYsIDB4MDAsIDB4M0IsIDB4MDAsIDB4RkMsIDB4MDMsIDB4RjAsIDB4MEIsIDB4QzAsCisweDBFLCAweDAwLCAweEYzLCAweDEwLCAweENDLCAweDAzLCAweEYwLCAweDAzLCAweDQwLCAweDNFLCAweDAwLCAweEYzLCAweDAwLAorMHhGQywgMHg0MCwgMHhGMCwgMHgwQiwgMHhDMCwgMHgwQywgMHgwMCwgMHhGNywgMHgwMCwgMHhENCwgMHg1NCwgMHgzMCwgMHgwRiwKKzB4QzAsIDB4MDQsIDB4MjgsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODEsIDB4MjAsCisweEM2LCAweDAwLCAweDExLCAweDAzLCAweDc0LCAweDAzLCAweEQwLCAweDE5LCAweDQwLCAweDYwLCAweDAxLCAweERCLCAweDAwLAorMHg1NCwgMHgwMywgMHhEMCwgMHgxMSwgMHg0MCwgMHhEMywgMHgwMCwgMHhEQiwgMHgwMCwgMHg0NCwgMHgwQywgMHhEMCwgMHgxOCwKKzB4QzAsIDB4ODMsIDB4MjAsIDB4RDEsIDB4MDAsIDB4NTQsIDB4ODksIDB4NTEsIDB4NEMsIDB4NTAsIDB4ODQsIDB4MDQsIDB4MDgsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDgwLCAweEM2LCAweDAwLCAweDE5LCAweDAzLAorMHg3NCwgMHgxMywgMHhEOCwgMHgzMSwgMHg0MCwgMHg2NiwgMHgwMCwgMHhDMSwgMHg4MCwgMHg0NCwgMHgwMywgMHhEMCwgMHgxMSwKKzB4NDAsIDB4NjYsIDB4MDQsIDB4RDEsIDB4MDAsIDB4NDQsIDB4QzYsIDB4OTAsIDB4MUIsIDB4NDAsIDB4MDQsIDB4MDYsIDB4RjUsCisweDAwLCAweDQwLCAweDA5LCAweDUwLCAweDQ1LCAweDQ4LCAweDA0LCAweDAwLCAweDBBLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHgyMCwgMHgwMCwgMHg4MSwgMHgwMCwgMHgzNCwgMHg4MywgMHhEMCwgMHgwMCwKKzB4NDAsIDB4MjQsIDB4MDAsIDB4Q0QsIDB4MDAsIDB4MTQsIDB4MDMsIDB4RDAsIDB4MDAsIDB4NDAsIDB4MjcsIDB4MDAsIDB4QzksCisweDAwLCAweDA0LCAweDgyLCAweEMyLCAweDE5LCAweDQwLCAweDAyLCAweEEwLCAweEQxLCAweDQwLCAweDU0LCAweDAyLCAweDUwLAorMHgwNCwgMHg0MiwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwKKzB4MTgsIDB4MDYsIDB4MTAsIDB4MUIsIDB4MDAsIDB4N0MsIDB4MDMsIDB4REEsIDB4MDEsIDB4QzAsIDB4MjYsIDB4MDAsIDB4RjMsCisweDAwLCAweEM0LCAweDAzLCAweEYwLCAweDAxLCAweEM0LCAweDI2LCAweDAwLCAweEYzLCAweDAwLCAweDVELCAweDAwLCAweEYwLAorMHgwQiwgMHhDMCwgMHgwNCwgMHgwMCwgMHhFNywgMHgwMCwgMHg1QywgMHgwMCwgMHgzMCwgMHgwOSwgMHhEMCwgMHgwNCwgMHg2MCwKKzB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODUsIDB4QjgsIDB4MkYsIDB4MDAsIDB4QkYsCisweDAwLCAweEZDLCAweDAzLCAweEQwLCAweDBCLCAweEMwLCAweDJCLCAweDAwLCAweEZCLCAweDAwLCAweEZDLCAweDAzLCAweEUwLAorMHgwMywgMHhDMCwgMHgyRiwgMHgwMCwgMHhFRiwgMHgwMCwgMHhGQywgMHgwMiwgMHhGMSwgMHgwQiwgMHhDMiwgMHgwRiwgMHgwMCwKKzB4RkYsIDB4MDAsIDB4RkMsIDB4MDAsIDB4RjAsIDB4MEIsIDB4QzQsIDB4MTcsIDB4NjIsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweEEwLCAweDZGLCAweDAwLCAweEJGLCAweDEwLCAweEZDLCAweDA1LCAweDMwLAorMHgxNiwgMHhDOCwgMHgzRiwgMHgxMCwgMHhGRiwgMHgxNCwgMHhGQywgMHgwMCwgMHgzMCwgMHgxNywgMHhDMCwgMHgyQywgMHgwMCwKKzB4NjMsIDB4MDEsIDB4RkMsIDB4MEYsIDB4MzAsIDB4NEIsIDB4QzAsIDB4NUYsIDB4MDAsIDB4RjMsIDB4MDEsIDB4QkMsIDB4MDIsCisweEIwLCAweDFGLCAweEM4LCAweDBGLCAweDAwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMSwgMHgwMCwgMHg2NywgMHgwMCwgMHhERCwgMHgwMSwgMHg3NCwgMHgwNSwgMHgwMCwgMHgxOSwgMHg0MCwgMHhGRiwgMHgzMCwKKzB4RkQsIDB4MDMsIDB4NzQsIDB4MEQsIDB4MTAsIDB4MUQsIDB4NDIsIDB4RTQsIDB4MDAsIDB4OTUsIDB4MDEsIDB4RjQsIDB4MTMsCisweDEyLCAweDE5LCAweDQwLCAweDc3LCAweDAwLCAweEYxLCAweDQxLCAweDc0LCAweDAyLCAweDUwLCAweDExLCAweDQwLCAweDBGLAorMHgwMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMSwgMHhBMCwgMHgzMywgMHgwMCwKKzB4OEQsIDB4NDAsIDB4NzQsIDB4MDAsIDB4MDAsIDB4MDgsIDB4NDAsIDB4QjMsIDB4MDAsIDB4Q0QsIDB4MDAsIDB4MTQsIDB4MDgsCisweDE0LCAweDBELCAweDQ4LCAweEIwLCAweDEwLCAweDg0LCAweDAwLCAweDM0LCAweDEzLCAweDEwLCAweDhDLCAweDQwLCAweDIzLAorMHgwMCwgMHhDMSwgMHgwMCwgMHg1NCwgMHgwMiwgMHg5MCwgMHgwQywgMHg0MCwgMHg0RiwgMHg4MCwgMHgwNiwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4QTgsIDB4MzUsIDB4MDAsIDB4OUQsIDB4MDAsIDB4NzQsIDB4MTAsCisweDE4LCAweDA5LCAweDQwLCAweDM3LCAweDIwLCAweERELCAweDAwLCAweDc2LCAweDIzLCAweDEwLCAweDBELCAweDQ4LCAweDMwLAorMHgwMCwgMHg5MSwgMHgwMCwgMHg3NCwgMHgwMywgMHgxMCwgMHgwRCwgMHgwNCwgMHgyMywgMHgwMCwgMHhEMSwgMHg0MCwgMHg3NCwKKzB4MDYsIDB4NTAsIDB4MEQsIDB4NDIsIDB4MEYsIDB4QTAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweEEwLCAweDc3LCAweDAwLCAweDlGLCAweDAxLCAweDNDLCAweDA5LCAweDMwLCAweDBELCAweEMyLCAweDM3LAorMHgwMCwgMHhERiwgMHg2MCwgMHg1QywgMHgxMywgMHgzMSwgMHgwOCwgMHhDOCwgMHg2NCwgMHgwMiwgMHhEMywgMHgwMCwgMHg3QywKKzB4MDMsIDB4MzQsIDB4MEQsIDB4QzAsIDB4RDcsIDB4MDAsIDB4RDMsIDB4MDAsIDB4N0MsIDB4MTcsIDB4QjIsIDB4NkQsIDB4QzAsCisweDAzLCAweDAwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA3LCAweDg4LCAweDNELAorMHgyMSwgMHg5RiwgMHgwNCwgMHhGQywgMHg0NSwgMHhGNCwgMHgwQiwgMHhDMiwgMHgzRiwgMHgwMCwgMHhGRiwgMHgwMCwgMHhGQywKKzB4MDMsIDB4RjAsIDB4MkIsIDB4RDAsIDB4M0YsIDB4NDAsIDB4RkQsIDB4MDAsIDB4RkMsIDB4MDMsIDB4RjAsIDB4MEYsIDB4QzAsCisweDdGLCAweDAxLCAweEZGLCAweDgwLCAweEZDLCAweDAzLCAweEYxLCAweDIzLCAweEMwLCAweDFGLCAweDIwLCAweDA2LCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHgwOCwgMHgzNSwgMHgwMSwgMHg5RiwgMHgwMCwgMHg1QywKKzB4MDksIDB4QjgsIDB4MEQsIDB4QzEsIDB4MzQsIDB4MDAsIDB4REIsIDB4NTAsIDB4N0MsIDB4MDEsIDB4QjAsIDB4MEQsIDB4QzAsCisweDI3LCAweDgwLCAweDlFLCAweDA0LCAweDBDLCAweDAzLCAweEQwLCAweDBELCAweEM0LCAweEI3LCAweDA4LCAweERGLCAweDQwLAorMHg3QywgMHgxMywgMHgzMiwgMHgwRCwgMHhDMiwgMHgwQiwgMHgyMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MTMsIDB4ODAsIDB4MzQsIDB4MDAsIDB4OUQsIDB4MDAsIDB4NDQsIDB4MEQsIDB4RjAsIDB4MjksIDB4NDAsCisweDNDLCAweDAwLCAweEZELCAweDAxLCAweDM0LCAweDBCLCAweDEwLCAweDBELCAweDQ4LCAweDM3LCAweDgwLCAweDlGLCAweDEyLAorMHg0NCwgMHgyQiwgMHhEMCwgMHgwRCwgMHg0MCwgMHgzNywgMHgwMCwgMHhERCwgMHgxMSwgMHgzNCwgMHgwMywgMHhCMCwgMHgxRCwKKzB4NDEsIDB4NkYsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4MjAsCisweDMwLCAweDAwLCAweDhELCAweDAwLCAweDE0LCAweDBDLCAweEQwLCAweEI0LCAweDUwLCAweDcwLCAweDAxLCAweENELCAweDAyLAorMHgyMCwgMHgxMCwgMHg5MiwgMHgwMCwgMHg0QywgMHgyMywgMHgwMCwgMHg0RCwgMHgwMSwgMHgyNCwgMHgyMywgMHhEMCwgMHgwOCwKKzB4NDAsIDB4MjMsIDB4MDAsIDB4Q0QsIDB4MDAsIDB4MzQsIDB4MDgsIDB4MUMsIDB4MEMsIDB4NDAsIDB4MEYsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA2LCAweDAwLCAweDc4LCAweDAwLCAweEVELCAweDAxLAorMHg4NCwgMHg0NCwgMHg1MCwgMHgxQiwgMHg0MCwgMHg3OCwgMHgwMCwgMHhFRCwgMHgwMSwgMHgzNCwgMHgwNiwgMHgxMCwgMHgxQSwKKzB4NDAsIDB4N0IsIDB4MDAsIDB4QjUsIDB4MDksIDB4QTYsIDB4OTcsIDB4RDAsIDB4MUEsIDB4NDAsIDB4NkIsIDB4MDAsIDB4RUQsCisweDAxLCAweEY0LCAweDg2LCAweDkwLCAweDEyLCAweDQwLCAweDdGLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHgxOCwgMHgzMCwgMHgwNCwgMHhDRiwgMHgwOCwgMHgxQywgMHgwMCwgMHhEQSwgMHgwOCwKKzB4QzgsIDB4MzAsIDB4MTQsIDB4Q0IsIDB4MTAsIDB4MkMsIDB4MjAsIDB4QjAsIDB4NDgsIDB4QzAsIDB4MjMsIDB4MDIsIDB4OEQsCisweDAwLCAweDJDLCAweDIzLCAweEYwLCAweDhDLCAweDQwLCAweEEzLCAweDAwLCAweENGLCAweDhDLCAweDNFLCAweDAwLCAweDMwLAorMHgwQywgMHhDMCwgMHg0QiwgMHg2MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwKKzB4MzgsIDB4M0QsIDB4MDAsIDB4RkYsIDB4MDAsIDB4RkMsIDB4MDAsIDB4RjAsIDB4MEIsIDB4QzAsIDB4M0YsIDB4MDAsIDB4RkYsCisweDEyLCAweEY0LCAweDIzLCAweEYwLCAweDBCLCAweEMwLCAweDNGLCAweDAwLCAweEJGLCAweDAwLCAweERELCAweDM3LCAweEYwLAorMHgwRiwgMHgwMCwgMHgyRiwgMHgwMCwgMHhERiwgMHgyOSwgMHg3RSwgMHgyMiwgMHhGNCwgMHgwRiwgMHhDMCwgMHgwQiwgMHg2MCwKKzB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4QTAsIDB4MzMsIDB4MDAsIDB4RDMsCisweDQ4LCAweDdDLCAweDAwLCAweDYwLCAweDBDLCAweEMwLCAweEI0LCAweDA0LCAweERGLCAweDA0LCAweDVDLCAweDAwLCAweEYwLAorMHgwOSwgMHhDMCwgMHgyNCwgMHgwMCwgMHhENywgMHgwMSwgMHg2QywgMHgyNywgMHgzMCwgMHgwRCwgMHhDMCwgMHgyNywgMHgwMCwKKzB4REYsIDB4MDAsIDB4N0MsIDB4MDAsIDB4MzAsIDB4MDAsIDB4QzAsIDB4NDAsIDB4MDAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDgwLCAweDM5LCAweDAwLCAweEUxLCAweEMwLCAweEI0LCAweDAwLCAweEQwLAorMHgwQSwgMHg0NCwgMHgzOCwgMHgwMCwgMHhFRCwgMHgwNCwgMHhCNCwgMHgwMiwgMHhEMCwgMHgwQSwgMHg0MCwgMHgzOCwgMHgwMCwKKzB4RUQsIDB4MDAsIDB4MDQsIDB4MTMsIDB4MTAsIDB4MEUsIDB4NDAsIDB4MkIsIDB4MDAsIDB4RUQsIDB4MDQsIDB4QjQsIDB4MDIsCisweDUwLCAweDAyLCAweDQwLCAweDRDLCAweDA4LCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMiwgMHg3OSwgMHgxMCwgMHhFMSwgMHgwNSwgMHhCNCwgMHg0NCwgMHhEOCwgMHgxRiwgMHg1MSwgMHg3OCwgMHgxMywKKzB4RTksIDB4MDUsIDB4OTQsIDB4MjUsIDB4RDAsIDB4M0EsIDB4NDAsIDB4RTgsIDB4MDIsIDB4QUQsIDB4MDEsIDB4QTQsIDB4MDcsCisweDkwLCAweDFFLCAweDQwLCAweDZCLCAweDA0LCAweEVELCAweDA5LCAweEY0LCAweDBDLCAweDEwLCAweDAyLCAweDQwLCAweDEwLAorMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNiwgMHgyOCwgMHgzMywgMHgwMCwKKzB4QzEsIDB4MDEsIDB4MzQsIDB4MTYsIDB4RDAsIDB4MzgsIDB4NDAsIDB4MzAsIDB4MTAsIDB4Q0QsIDB4MDAsIDB4MzQsIDB4MDcsCisweEQwLCAweDE4LCAweDQxLCAweDcwLCAweDAwLCAweDhELCAweDAwLCAweDA0LCAweDAzLCAweDkwLCAweDlDLCAweDQwLCAweDYzLAorMHgwMCwgMHhDRCwgMHgwMCwgMHgzNCwgMHgwNiwgMHg1MCwgMHg4QywgMHg0MCwgMHg1OCwgMHgyMCwgMHgwQywgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTcsIDB4MjAsIDB4MTUsIDB4MDAsIDB4NDMsIDB4MTEsIDB4RkMsIDB4MDUsCisweEYwLCAweDM2LCAweEMwLCAweDE0LCAweDIwLCAweDRGLCAweDAwLCAweERDLCAweDE1LCAweEYxLCAweDI3LCAweEQ0LCAweDE0LAorMHgwMCwgMHg3NywgMHgxQiwgMHg2QywgMHgwMSwgMHhCNSwgMHgxNSwgMHhDMCwgMHgxRiwgMHgwMCwgMHg1RiwgMHgwMCwgMHhCQywKKzB4MDEsIDB4MzQsIDB4MzcsIDB4QzQsIDB4NUMsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDEyLCAweDA4LCAweDA1LCAweDQyLCAweDFGLCAweDAwLCAweDdDLCAweDA4LCAweEYwLCAweDIxLCAweEMwLCAweDA3LAorMHgyMCwgMHgxRiwgMHgwMCwgMHg3MCwgMHgwMCwgMHhGMCwgMHgwMSwgMHhDMCwgMHgwNywgMHgwMCwgMHgxRiwgMHgwMCwgMHg3QywKKzB4MDgsIDB4NzEsIDB4MDEsIDB4QzAsIDB4MDcsIDB4MDAsIDB4MUYsIDB4MjIsIDB4N0MsIDB4MDAsIDB4RjAsIDB4MDEsIDB4QzEsCisweDRCLCAweDIwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDI1LAorMHgwMCwgMHg5MywgMHgwMCwgMHg0NSwgMHgwNiwgMHg1MCwgMHgxOSwgMHhEMSwgMHgyNCwgMHg0MCwgMHg5MywgMHgwOCwgMHg1QywKKzB4NDIsIDB4RjAsIDB4MDksIDB4NDAsIDB4MjIsIDB4NDAsIDB4OTMsIDB4MDIsIDB4N0MsIDB4MTYsIDB4RjAsIDB4MjksIDB4QzAsCisweDI3LCAweDAwLCAweDkzLCAweDgyLCAweDdDLCAweDA2LCAweDM0LCAweDA5LCAweEMwLCAweDQzLCAweDIwLCAweDA0LCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgyMCwgMHgyMCwgMHgwMCwgMHhCMSwgMHgwMywgMHg0NCwKKzB4MDIsIDB4RDAsIDB4MjksIDB4NDAsIDB4MjAsIDB4MTMsIDB4OTEsIDB4NDAsIDB4QzQsIDB4MDIsIDB4RDAsIDB4MDksIDB4NDAsCisweDJDLCAweDAwLCAweDkxLCAweDQwLCAweEY0LCAweDBFLCAweEQwLCAweDA5LCAweDQwLCAweDIyLCAweDIwLCAweEIxLCAweDgzLAorMHg3NCwgMHgwNiwgMHgxMCwgMHgwOSwgMHg0MCwgMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MTgsIDB4QTAsIDB4MjQsIDB4NDAsIDB4OTEsIDB4MDgsIDB4NTQsIDB4MUIsIDB4RDAsIDB4NjksIDB4NDAsCisweDI0LCAweDAwLCAweDkxLCAweDUwLCAweDUwLCAweDFBLCAweEQwLCAweDA4LCAweDQwLCAweDI3LCAweDAwLCAweDkxLCAweDAwLAorMHg3NCwgMHgwQSwgMHhEOCwgMHgwOSwgMHg0MCwgMHgyNywgMHgwMCwgMHg5MSwgMHg0MCwgMHg3NCwgMHg1MiwgMHgxMCwgMHgwOSwKKzB4NDAsIDB4NjMsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MjAsCisweDIxLCAweDAwLCAweDgxLCAweDAwLCAweDA0LCAweDAyLCAweEQwLCAweDA4LCAweDQwLCAweDIwLCAweDAwLCAweDgwLCAweDAwLAorMHgwNCwgMHgwMiwgMHhEMCwgMHgyOCwgMHg0MCwgMHhBMCwgMHgwMCwgMHg4MSwgMHgwMCwgMHgzNCwgMHgwQSwgMHg4MCwgMHgwOCwKKzB4NDAsIDB4QTYsIDB4MDAsIDB4ODEsIDB4MDAsIDB4NzQsIDB4MDIsIDB4MTQsIDB4MDgsIDB4NDAsIDB4NDMsIDB4ODAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFELCAweEI4LCAweDA3LCAweDAwLCAweDUzLCAweDAxLAorMHg1QywgMHgwMCwgMHg3MCwgMHgwMSwgMHhDMCwgMHgwNCwgMHgwNSwgMHgxMiwgMHgxNCwgMHg1QywgMHgwNCwgMHhGMCwgMHgwMCwKKzB4QzAsIDB4NDcsIDB4MDAsIDB4MTMsIDB4MDAsIDB4N0MsIDB4MDQsIDB4RjAsIDB4MTEsIDB4QzAsIDB4MDcsIDB4NDAsIDB4NTMsCisweDgxLCAweDdDLCAweDAwLCAweDM0LCAweDAxLCAweEMwLCAweDc3LCAweEUwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgxRCwgMHhCOCwgMHgyRiwgMHgwMCwgMHhCRiwgMHgwMiwgMHhGQywgMHgwMiwgMHhGMCwgMHgwQiwKKzB4QzAsIDB4MjcsIDB4MDgsIDB4OUYsIDB4NDAsIDB4RkMsIDB4MEEsIDB4RjEsIDB4MUIsIDB4QzAsIDB4RUYsIDB4MDAsIDB4RUYsCisweDAwLCAweDdDLCAweDBFLCAweEYwLCAweDJCLCAweDAwLCAweDZFLCAweDIwLCAweDlGLCAweDgyLCAweEJDLCAweDVBLCAweEUwLAorMHgwQiwgMHhDMCwgMHg3NywgMHg2MCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxRCwKKzB4QTAsIDB4MjksIDB4MDAsIDB4QkYsIDB4MDEsIDB4Q0MsIDB4MDIsIDB4MzQsIDB4MEIsIDB4RDAsIDB4MkMsIDB4NDAsIDB4QTMsCisweDAwLCAweEJDLCAweDQ2LCAweEIwLCAweDA5LCAweDQwLCAweDY3LCAweDAwLCAweEJCLCAweDAwLCAweEM0LCAweDE2LCAweDI0LAorMHg1QiwgMHhDMCwgMHhBNywgMHgxMCwgMHhCMywgMHgxNSwgMHhDRCwgMHg0MiwgMHhCMCwgMHgwQiwgMHhDMCwgMHg3NCwgMHgwMCwKKzB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDAsIDB4MDcsIDB4MDAsIDB4MUQsCisweDAwLCAweDQ0LCAweDAwLCAweDEwLCAweDA1LCAweDQwLCAweDg1LCAweDAyLCAweDExLCAweDQwLCAweDc0LCAweDA4LCAweDMwLAorMHg1NSwgMHg0MSwgMHhDMywgMHgwMSwgMHgxMSwgMHgwMCwgMHg1NCwgMHgxNCwgMHgxMCwgMHgwMSwgMHg0MCwgMHg0NywgMHgwOCwKKzB4MTEsIDB4MDIsIDB4NDQsIDB4MDgsIDB4MTEsIDB4MDEsIDB4NDAsIDB4NjAsIDB4MDAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDIyLCAweDIxLCAweDAwLCAweDhELCAweDAyLCAweDE0LCAweDAyLCAweDkwLAorMHgwOCwgMHg2OCwgMHgyMCwgMHgwMCwgMHg4MSwgMHgwMiwgMHgzNCwgMHgwMiwgMHg5MCwgMHgwOCwgMHg0MCwgMHhBMywgMHgwNCwKKzB4OTksIDB4MDAsIDB4MDQsIDB4NEEsIDB4MTAsIDB4MjgsIDB4NDAsIDB4MjMsIDB4MDAsIDB4ODEsIDB4MjAsIDB4MDQsIDB4NTIsCisweDkxLCAweDA5LCAweDQyLCAweDQ4LCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgxOCwgMHgyOCwgMHgyNSwgMHgwMCwgMHg5RCwgMHgwMCwgMHg0NCwgMHgwMiwgMHgxMCwgMHgwOSwgMHg2NCwgMHgyNCwgMHgwMCwKKzB4OTAsIDB4MDAsIDB4NzQsIDB4MDYsIDB4MTAsIDB4ODksIDB4NEMsIDB4MjcsIDB4MDAsIDB4OTEsIDB4MDAsIDB4MTQsIDB4MDIsCisweDEwLCAweDA5LCAweDQwLCAweDIzLCAweDQwLCAweDkxLCAweDAwLCAweDQ0LCAweDAyLCAweDkwLCAweDE5LCAweDQwLCAweDYwLAorMHgyMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHgyMCwgMHg2NSwgMHgwMiwKKzB4OEYsIDB4MDksIDB4NUMsIDB4MTIsIDB4QjAsIDB4MTgsIDB4NDAsIDB4MjQsIDB4MDAsIDB4OTMsIDB4MDAsIDB4N0MsIDB4NEEsCisweEIwLCAweDNCLCAweEMwLCAweDZGLCAweDAwLCAweDlCLCAweDAwLCAweENDLCAweDAyLCAweDMwLCAweDE5LCAweEMwLCAweEVGLAorMHgwMSwgMHg5MywgMHg4MCwgMHg0QywgMHgwMiwgMHhCMCwgMHg0OSwgMHhEMCwgMHgxNCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTYsIDB4MDgsIDB4MjUsIDB4MDAsIDB4OUYsIDB4MDAsIDB4NkQsIDB4MTIsCisweEYwLCAweDU5LCAweEMwLCAweDI3LCAweDAwLCAweDlGLCAweDAwLCAweDdDLCAweDAyLCAweDcwLCAweDA5LCAweEMwLCAweDIzLAorMHgwMSwgMHg5RiwgMHgwMiwgMHg3QywgMHgwMiwgMHhGMCwgMHg4OSwgMHhDMCwgMHg2NywgMHgwMSwgMHg5RiwgMHgwMCwgMHg3QywKKzB4MDIsIDB4NzEsIDB4MDksIDB4QzAsIDB4NUIsIDB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDE0LCAweDA4LCAweDA1LCAweDEwLCAweDEzLCAweDA4LCAweDdDLCAweDAwLCAweDMwLCAweDAxLCAweEMwLCAweDA1LAorMHhDMSwgMHgxMywgMHgwOCwgMHgxQywgMHgxMCwgMHgzNCwgMHgwMSwgMHhDMCwgMHgwNywgMHgwMCwgMHgxQiwgMHgwMCwgMHg3QywKKzB4MDAsIDB4MzAsIDB4MDEsIDB4QzAsIDB4ODcsIDB4MDAsIDB4MUYsIDB4MDgsIDB4N0MsIDB4MDAsIDB4MzEsIDB4MDEsIDB4QzAsCisweDUzLCAweDIwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDIwLCAweERDLAorMHgwNiwgMHg3MSwgMHgwMCwgMHhCMCwgMHgxRCwgMHg1MCwgMHgwNywgMHg0MiwgMHgxQiwgMHg4MCwgMHg3MSwgMHgwMSwgMHhDNCwKKzB4MEQsIDB4MTAsIDB4MDUsIDB4NDAsIDB4MTcsIDB4MDAsIDB4NzEsIDB4MDIsIDB4RjQsIDB4NjEsIDB4QjAsIDB4MDUsIDB4NDAsCisweDE3LCAweDAwLCAweDZELCAweDAwLCAweEY0LCAweDAxLCAweDExLCAweDA0LCAweDQwLCAweDQzLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHhBMCwgMHhFMiwgMHgwMCwgMHg4MSwgMHgxMCwgMHgzNCwKKzB4MUUsIDB4MTgsIDB4MDQsIDB4NDAsIDB4MjMsIDB4MTAsIDB4ODUsIDB4NTEsIDB4MTQsIDB4MEQsIDB4MTAsIDB4MEMsIDB4NDAsCisweDMzLCAweDAwLCAweEQ5LCAweDEzLCAweDM0LCAweDA2LCAweDE0LCAweDFDLCAweDQwLCAweDMzLCAweDAwLCAweDhELCAweDEwLAorMHg3NCwgMHgwMiwgMHgxMCwgMHgwOCwgMHg0MCwgMHg0MywgMHgwMCwgMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDQsIDB4ODIsIDB4N0MsIDB4MDAsIDB4QTEsIDB4MDAsIDB4RjQsIDB4MDMsIDB4NTAsIDB4MDYsIDB4NDAsCisweDMzLCAweDAwLCAweEE1LCAweDAxLCAweDg0LCAweDA5LCAweDExLCAweDRFLCAweDQwLCAweDNCLCAweDAzLCAweEUxLCAweDAyLAorMHhCNCwgMHgzMywgMHg5MCwgMHgwRSwgMHg2MSwgMHgzQiwgMHgwOSwgMHhFRCwgMHgwMCwgMHhCNCwgMHgwMiwgMHgxMCwgMHgwRSwKKzB4NDAsIDB4MTMsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MTgsCisweDY4LCAweDAwLCAweEEzLCAweDAxLCAweEJDLCAweDA2LCAweDMwLCAweDE2LCAweEMwLCAweDZCLCAweDAwLCAweEU1LCAweDAxLAorMHg5QywgMHgwNSwgMHgzMCwgMHgzRSwgMHhDMCwgMHg3QiwgMHgwMCwgMHhFQiwgMHgwMSwgMHhCQywgMHgwNywgMHgzMCwgMHgxRSwKKzB4QzAsIDB4RkIsIDB4MDAsIDB4QUYsIDB4MDEsIDB4M0MsIDB4MDEsIDB4MzAsIDB4MUEsIDB4QzAsIDB4NTMsIDB4NjAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweEI4LCAweDM1LCAweDQwLCAweDlELCAweDAwLAorMHgzQywgMHgwMiwgMHhGMCwgMHgwNSwgMHhDMCwgMHgyNywgMHgwMCwgMHhEQiwgMHgwMCwgMHg3QywgMHgwMSwgMHhGMCwgMHgwRCwKKzB4QzAsIDB4MzcsIDB4MDAsIDB4REYsIDB4MDAsIDB4M0MsIDB4MDMsIDB4NzAsIDB4MEQsIDB4QzAsIDB4MzcsIDB4MDAsIDB4REYsCisweDAwLCAweDdDLCAweDAzLCAweEYwLCAweDBELCAweEMwLCAweDQzLCAweDYwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwNiwgMHgyOCwgMHg2RCwgMHgwMCwgMHhCQiwgMHgyMSwgMHhGQywgMHgwNiwgMHhGMCwgMHgxNywKKzB4QzAsIDB4NkYsIDB4MDAsIDB4QjMsIDB4MDEsIDB4REUsIDB4MDcsIDB4MzEsIDB4OUUsIDB4QzgsIDB4N0MsIDB4MDAsIDB4QUUsCisweDAxLCAweEVDLCAweDA3LCAweEY4LCAweDlGLCAweEMwLCAweDc4LCAweDAwLCAweEIzLCAweDQxLCAweENDLCAweDA2LCAweDMwLAorMHgxQiwgMHhDMCwgMHgxOCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwKKzB4MTAsIDB4MjksIDB4MDAsIDB4QUQsIDB4MDgsIDB4QjQsIDB4MDMsIDB4RDAsIDB4MDYsIDB4NDAsIDB4M0IsIDB4MDgsIDB4QTEsCisweDAwLCAweDg0LCAweDEzLCAweEIwLCAweDBFLCAweDQwLCAweDM4LCAweDAwLCAweEVELCAweDAyLCAweDg0LCAweDAzLCAweEQwLAorMHgwRSwgMHhDMCwgMHgzQSwgMHgwMiwgMHhBMSwgMHgwMCwgMHg5NCwgMHgwMiwgMHhCMCwgMHgwRSwgMHg0NCwgMHg1NCwgMHgwMCwKKzB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODgsIDB4MDAsIDB4MjksIDB4MDAsIDB4QUQsCisweDAwLCAweEI0LCAweDAyLCAweEQwLCAweDA2LCAweDQwLCAweDIzLCAweDAwLCAweEExLCAweDAwLCAweEQ0LCAweDAxLCAweDExLAorMHgxRiwgMHgwMCwgMHg3OCwgMHgwMCwgMHhFRCwgMHgwMCwgMHhBNCwgMHgwMywgMHhEMCwgMHgwRSwgMHg0NCwgMHg3QywgMHgwMCwKKzB4ODEsIDB4MDAsIDB4ODQsIDB4MDEsIDB4NTAsIDB4MEIsIDB4NDAsIDB4MjAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweDIwLCAweDIxLCAweDAwLCAweDhELCAweDAxLCAweDM0LCAweDQxLCAweEQwLAorMHgwNCwgMHg0MCwgMHgwMywgMHgwMCwgMHg0MSwgMHgwMCwgMHgwNCwgMHgzMywgMHg5MCwgMHgyQywgMHg0MSwgMHgzMCwgMHgyMCwKKzB4Q0QsIDB4MEMsIDB4MDQsIDB4MDEsIDB4RDAsIDB4MEMsIDB4NDAsIDB4MzIsIDB4MDQsIDB4QzEsIDB4MDAsIDB4NTQsIDB4MDMsCisweEQwLCAweDNDLCAweDQwLCAweDA4LCAweDIwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgxRCwgMHhBOCwgMHgyNSwgMHgxMCwgMHhERiwgMHgxMSwgMHg3QywgMHg4QSwgMHhGMCwgMHg4RCwgMHhDMSwgMHgyNywgMHgwMCwKKzB4OTMsIDB4MDAsIDB4NUMsIDB4MDUsIDB4MzEsIDB4MEQsIDB4RDAsIDB4MzQsIDB4MDEsIDB4NEYsIDB4MDIsIDB4NkMsIDB4MDEsCisweEYxLCAweDBDLCAweEMwLCAweEI0LCAweDQwLCAweDkzLCAweDAwLCAweDRDLCAweEFBLCAweDcwLCAweDI5LCAweEMwLCAweDc0LAorMHgwMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHgwMCwgMHgzNywgMHgwMCwKKzB4REYsIDB4MDAsIDB4N0MsIDB4MDMsIDB4RjAsIDB4MjUsIDB4QzAsIDB4MzcsIDB4MDAsIDB4OEYsIDB4MDAsIDB4N0UsIDB4MDEsCisweEYwLCAweDBELCAweEMwLCAweDM3LCAweDAwLCAweERGLCAweDgwLCAweDdDLCAweDA5LCAweEYwLCAweDBELCAweEMwLCAweDM3LAorMHgwOCwgMHhERiwgMHgwMCwgMHg3QywgMHgwMiwgMHhCMCwgMHg4OSwgMHhDMCwgMHgxNywgMHgyMCwgMHgwQywgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODEsIDB4MDgsIDB4NkYsIDB4MDAsIDB4QUYsIDB4MDAsIDB4REMsIDB4MDIsCisweDM0LCAweDFGLCAweDAwLCAweDZGLCAweDAwLCAweERGLCAweDAwLCAweEVDLCAweDg5LCAweEYxLCAweDBGLCAweEMwLCAweDNGLAorMHgwMCwgMHg3RiwgMHgwMCwgMHhDQywgMHgwMSwgMHg3MCwgMHg0RCwgMHhEMCwgMHgzQywgMHgwMCwgMHhCRiwgMHgwMCwgMHhDRCwKKzB4MDAsIDB4MzQsIDB4MEIsIDB4QzEsIDB4MDcsIDB4MjYsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweEExLCAweDIwLCAweDM2LCAweDEwLCAweDlELCAweDAzLCAweDA0LCAweDAyLCAweDEwLCAweDg5LCAweDQzLCAweDM3LAorMHgwMCwgMHhERCwgMHgwMCwgMHg0NCwgMHgwNSwgMHhEMCwgMHgwRCwgMHg0MCwgMHgzNywgMHgwMCwgMHhERCwgMHgwMywgMHg0NCwKKzB4MTksIDB4MTAsIDB4MEQsIDB4NDIsIDB4MzQsIDB4MDAsIDB4Q0QsIDB4MDIsIDB4NDQsIDB4MDYsIDB4MTAsIDB4MTksIDB4NDAsCisweDI3LCAweDAyLCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweEEwLCAweEE2LAorMHgwMSwgMHhERCwgMHgwNiwgMHg1NCwgMHgwMiwgMHgxMCwgMHgwRCwgMHg0MCwgMHgyNywgMHgwMSwgMHg5RCwgMHgwMCwgMHg2MCwKKzB4MDMsIDB4RDAsIDB4MEQsIDB4NDQsIDB4MzcsIDB4MDAsIDB4REQsIDB4MDEsIDB4MDQsIDB4ODUsIDB4NTAsIDB4MEQsIDB4NDAsCisweDM0LCAweDEwLCAweDlELCAweDUwLCAweDQ0LCAweDA2LCAweDEwLCAweDQ5LCAweDQwLCAweDA3LCAweDAwLCAweDBBLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHhDRCwgMHgwMCwgMHgwNCwKKzB4MDMsIDB4MTAsIDB4MDQsIDB4NDAsIDB4MzMsIDB4MDAsIDB4OEQsIDB4MDAsIDB4MDQsIDB4MDMsIDB4RDAsIDB4MEMsIDB4NDAsCisweDMzLCAweDgwLCAweERELCAweEEwLCAweDA0LCAweDAzLCAweDEwLCAweDBDLCAweDQwLCAweDMwLCAweDAwLCAweDhELCAweEMwLAorMHg0NCwgMHgwMiwgMHgxMCwgMHgwOCwgMHg0NCwgMHg0MywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDEsIDB4MTgsIDB4MjYsIDB4MDAsIDB4NUYsIDB4MDAsIDB4NUMsIDB4MDIsIDB4MzAsIDB4MEQsIDB4QzAsCisweDI3LCAweDAwLCAweDlGLCAweDAwLCAweDZDLCAweDAwLCAweEYwLCAweDBGLCAweEMwLCAweDNGLCAweDAwLCAweERGLCAweDAwLAorMHg0QywgMHgwMSwgMHg3MCwgMHgwOSwgMHg4MCwgMHgzQywgMHgwMCwgMHgxRiwgMHgwMCwgMHg0QywgMHgwMCwgMHgzMCwgMHgwOSwKKzB4QzAsIDB4MDcsIDB4NjAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4QjgsCisweDFGLCAweDAwLCAweDdGLCAweDAwLCAweEZDLCAweDAxLCAweEYwLCAweDBCLCAweEMwLCAweDFGLCAweDAwLCAweDdGLCAweDAwLAorMHhCQywgMHgwMiwgMHhGMCwgMHgwRiwgMHhDMCwgMHgzRiwgMHgwMCwgMHhGRiwgMHgwMCwgMHhGRCwgMHgwMSwgMHhEMCwgMHgwQiwKKzB4QzAsIDB4M0YsIDB4MDAsIDB4N0YsIDB4MDAsIDB4QkMsIDB4MDIsIDB4RjAsIDB4MEEsIDB4QzQsIDB4MTcsIDB4NjIsIDB4MEUsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweEEwLCAweDdGLCAweDAwLCAweEIzLCAweDBDLAorMHhEQywgMHgwMCwgMHgzMCwgMHg0RiwgMHhDMCwgMHgzQywgMHgwMSwgMHhGMywgMHgxOCwgMHhGQywgMHgzMiwgMHg3MCwgMHgxNywKKzB4QzAsIDB4N0YsIDB4MDAsIDB4NUIsIDB4MDEsIDB4OEMsIDB4MDYsIDB4MzIsIDB4MUEsIDB4QzIsIDB4N0UsIDB4MDAsIDB4M0IsCisweDA4LCAweENELCAweDAwLCAweEIwLCAweDAzLCAweEMyLCAweDBDLCAweDAwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHgxOCwgMHgzNywgMHgwMSwgMHg5MSwgMHg4RSwgMHg0NCwgMHgyNywgMHgxMCwgMHgzRiwKKzB4NDAsIDB4QkMsIDB4NDAsIDB4RjUsIDB4MjYsIDB4NzQsIDB4MzgsIDB4MTAsIDB4MDUsIDB4NDQsIDB4NzcsIDB4MDAsIDB4NTMsCisweDAxLCAweDU0LCAweDA1LCAweDUyLCAweDE5LCAweDQwLCAweDU1LCAweDAwLCAweDExLCAweDA2LCAweDQ0LCAweDgyLCAweDEwLAorMHgwMSwgMHhDMCwgMHgwRSwgMHg2MCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMywKKzB4QTAsIDB4MzMsIDB4MDQsIDB4ODEsIDB4MDAsIDB4NTQsIDB4MDMsIDB4MTAsIDB4MkMsIDB4NDQsIDB4QjIsIDB4MDUsIDB4QzEsCisweDAwLCAweDM0LCAweDAyLCAweDUwLCAweDQ0LCAweDQxLCAweDMxLCAweDAwLCAweDRELCAweDAwLCAweDU0LCAweDAzLCAweDEwLAorMHgwOCwgMHg0MCwgMHgyMiwgMHgwMCwgMHg4OSwgMHgwMiwgMHgwNCwgMHgyMSwgMHhEMCwgMHgxMCwgMHg0MiwgMHg0RiwgMHg4MCwKKzB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4QTAsIDB4MzEsIDB4MDAsIDB4OTEsCisweDAxLCAweDQ0LCAweDA3LCAweDEwLCAweDBELCAweDQwLCAweDM2LCAweDAwLCAweEQxLCAweDAwLCAweDc0LCAweDg0LCAweDEwLAorMHgwNSwgMHg0MSwgMHgzNywgMHgwMSwgMHg1MSwgMHgwMSwgMHg1NCwgMHgwOSwgMHg1MCwgMHgxRCwgMHgwMCwgMHgzNSwgMHgwMCwKKzB4MTEsIDB4MDIsIDB4NDQsIDB4ODMsIDB4NTEsIDB4MTEsIDB4NDAsIDB4MEYsIDB4MDAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweDg4LCAweDM2LCAweDAwLCAweDEzLCAweDA3LCAweDEwLCAweDE3LCAweDMwLAorMHgwRCwgMHhDMCwgMHgzNiwgMHgwOCwgMHhEMywgMHg0MCwgMHg3QywgMHg0NCwgMHg1MCwgMHhCMSwgMHhFMCwgMHgzNSwgMHgyMCwKKzB4NUIsIDB4MDcsIDB4NUMsIDB4MEIsIDB4MzAsIDB4MTgsIDB4ODAsIDB4MzYsIDB4MDAsIDB4MUIsIDB4MDIsIDB4NEMsIDB4MjgsCisweEY0LCAweDE5LCAweEMwLCAweDJCLCAweDIwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwRiwgMHg4MCwgMHgzRCwgMHgwMCwgMHg5RiwgMHgwMCwgMHg3QywgMHgwMywgMHhGNCwgMHgwRiwgMHhDMCwgMHgzOSwgMHgwMCwKKzB4REYsIDB4MDAsIDB4N0MsIDB4NDAsIDB4RjAsIDB4MTMsIDB4QzAsIDB4N0YsIDB4MDAsIDB4NzksIDB4MTAsIDB4RkMsIDB4MTMsCisweEUwLCAweDBGLCAweEMwLCAweDFGLCAweDAwLCAweDVGLCAweDAyLCAweEJDLCAweDA0LCAweEIwLCAweDAyLCAweEMwLCAweDFFLAorMHgwMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHgwOCwgMHgzNSwgMHgwMCwKKzB4MUYsIDB4MDQsIDB4NEMsIDB4MDMsIDB4NzAsIDB4MEMsIDB4RTEsIDB4MzUsIDB4MDQsIDB4RDcsIDB4MDgsIDB4NEMsIDB4MDIsCisweDcwLCAweDI1LCAweEMwLCAweDM3LCAweDAwLCAweDU3LCAweDAyLCAweDVDLCAweDBCLCAweEIwLCAweDQ5LCAweEMwLCAweDM0LAorMHgwMCwgMHg1QiwgMHgwMCwgMHg0QywgMHg0OSwgMHgzNCwgMHgwOSwgMHhDMCwgMHgyQiwgMHgyMCwgMHgwNCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MUIsIDB4QTAsIDB4MzQsIDB4MDAsIDB4OUQsIDB4MDAsIDB4NDQsIDB4MDMsCisweDExLCAweDFGLCAweEM0LCAweEZDLCAweDA0LCAweEYxLCAweDAwLCAweDQ0LCAweDEwLCAweDEwLCAweDA1LCAweDQwLCAweDcwLAorMHgwMCwgMHg0QiwgMHg0MSwgMHg2OCwgMHgyRiwgMHhCMCwgMHgyRCwgMHg0MCwgMHhCMCwgMHgwMSwgMHg1MSwgMHgwMCwgMHg0NCwKKzB4ODksIDB4MDAsIDB4MTksIDB4NDAsIDB4NEYsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAzLCAweDIwLCAweDMyLCAweDAwLCAweDFELCAweDAwLCAweDM0LCAweDgzLCAweDUwLCAweDFDLCAweDQwLCAweDczLAorMHg4MCwgMHhDMSwgMHgyNiwgMHg2NCwgMHgwRSwgMHgxMCwgMHgwMCwgMHg0OCwgMHgzMSwgMHgwMCwgMHhDNSwgMHgwMywgMHg3MCwKKzB4MEYsIDB4OTAsIDB4MDAsIDB4NDgsIDB4MzEsIDB4MjEsIDB4NTksIDB4MEYsIDB4MDQsIDB4MjQsIDB4MTAsIDB4MDgsIDB4NjAsCisweDBGLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBELCAweDAwLCAweDdBLAorMHg4MCwgMHg2RCwgMHg1MSwgMHg5NSwgMHg0NywgMHgxMCwgMHg5RSwgMHg0MSwgMHg3MCwgMHg4MCwgMHhFMSwgMHg4MSwgMHhBNiwKKzB4MDcsIDB4MTQsIDB4MTIsIDB4MDAsIDB4NzgsIDB4MDAsIDB4NjksIDB4MDUsIDB4QjQsIDB4NDcsIDB4OTksIDB4REEsIDB4NDAsCisweDVELCAweDAwLCAweEExLCAweDQ5LCAweDA0LCAweDI2LCAweDEwLCAweDMyLCAweDQxLCAweDM3LCAweDIwLCAweDA4LCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHgxMCwgMHgzMiwgMHgwMCwgMHhDRiwgMHgyMCwgMHgxQywKKzB4MDMsIDB4NTAsIDB4OEMsIDB4NDAsIDB4MzMsIDB4MDAsIDB4QzEsIDB4MDAsIDB4MkMsIDB4MTMsIDB4MzAsIDB4NDEsIDB4QzAsCisweDMzLCAweDI0LCAweDQ3LCAweDE1LCAweDNDLCAweDAzLCAweEIwLCAweDVDLCAweEM4LCAweDIxLCAweDA4LCAweDhCLCAweDA1LAorMHgwRCwgMHgwOCwgMHgzMCwgMHgwQywgMHhDMCwgMHg0QiwgMHg0MCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDIsIDB4QjgsIDB4M0QsIDB4MjAsIDB4RkYsIDB4MDAsIDB4RTgsIDB4MDMsIDB4RjAsIDB4QUUsIDB4QzAsCisweDNGLCAweDQwLCAweEZCLCAweDAwLCAweERELCAweDAzLCAweEYxLCAweDAzLCAweEMwLCAweDNCLCAweDAwLCAweDQ1LCAweDgwLAorMHhFQywgMHgwMywgMHhGMCwgMHgwRCwgMHhDMCwgMHgzQSwgMHgwMCwgMHhCRiwgMHgwMCwgMHhGQywgMHgwMiwgMHhGNCwgMHg4RiwKKzB4QzAsIDB4MEIsIDB4MjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4QTAsCisweDc3LCAweDIwLCAweDUzLCAweDIwLCAweDdFLCAweDgzLCAweEYwLCAweENELCAweEMwLCAweDM0LCAweDExLCAweERGLCAweDQ0LAorMHg1QywgMHgwMSwgMHhGMCwgMHgxMSwgMHhDMCwgMHgzMiwgMHgwMCwgMHgxQiwgMHgwMCwgMHgxQywgMHgwMywgMHg3MCwgMHgwRCwKKzB4QzIsIDB4MzYsIDB4MDAsIDB4REYsIDB4MDAsIDB4NEQsIDB4MDMsIDB4MzAsIDB4MEQsIDB4QzIsIDB4NDAsIDB4MDAsIDB4MEUsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEzLCAweDk4LCAweDNELCAweDAwLCAweDYxLCAweDAwLAorMHhCNCwgMHg4MywgMHgxNCwgMHgwRSwgMHg0MCwgMHhCOCwgMHgwNSwgMHhGRCwgMHgxNiwgMHg4NCwgMHgwMywgMHhEMCwgMHgwMiwKKzB4NDAsIDB4MzgsIDB4ODAsIDB4MjcsIDB4NDAsIDB4ODQsIDB4MDMsIDB4MTEsIDB4MEUsIDB4NDAsIDB4MTgsIDB4MDAsIDB4RUQsCisweDAwLCAweDg1LCAweDAzLCAweDEwLCAweDA3LCAweDQwLCAweDRDLCAweDYwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3OSwgMHgwMCwgMHhFMSwgMHgwMSwgMHhGNiwgMHg4NywgMHhEMiwgMHg0RSwKKzB4NDAsIDB4N0IsIDB4MDAsIDB4RUQsIDB4MDEsIDB4OTQsIDB4MDcsIDB4RDAsIDB4MzMsIDB4NDAsIDB4N0IsIDB4MDAsIDB4MzEsCisweDAxLCAweDk0LCAweDA3LCAweDU4LCAweDFGLCAweDQxLCAweDdBLCAweDAwLCAweEVELCAweDAxLCAweDA0LCAweDA3LCAweDU0LAorMHgxRSwgMHg0MCwgMHgxMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNiwKKzB4MjAsIDB4MzMsIDB4MDAsIDB4QzEsIDB4NDMsIDB4MzYsIDB4MDMsIDB4MTAsIDB4MEMsIDB4NDAsIDB4MzAsIDB4MDAsIDB4REQsCisweDAwLCAweDQ0LCAweDFGLCAweEQwLCAweDQ4LCAweDYwLCAweDIxLCAweDAyLCAweDA1LCAweDAxLCAweDA2LCAweDBGLCAweDEwLAorMHgzQywgMHg0MCwgMHg3MiwgMHgwMCwgMHhDRCwgMHgxOSwgMHgwNCwgMHgyMywgMHg1MCwgMHgyRCwgMHg0MCwgMHg1OCwgMHgwMCwKKzB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTcsIDB4QTgsIDB4MTcsIDB4MDAsIDB4NzEsCisweDA1LCAweEZDLCAweDQ5LCAweEYwLCAweDA1LCAweEMwLCAweDE2LCAweDAwLCAweDVGLCAweDAwLCAweERDLCAweDBELCAweEYwLAorMHgxNywgMHhDMCwgMHgxNywgMHgwMCwgMHg2MywgMHgwMiwgMHg5QywgMHg2RCwgMHg3MCwgMHgyNywgMHhFMCwgMHgxRSwgMHgwOSwKKzB4N0YsIDB4MDIsIDB4Q0MsIDB4MjUsIDB4NzAsIDB4ODcsIDB4QzAsIDB4NUMsIDB4MjAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDgwLCAweDA1LCAweDQwLCAweDFGLCAweDMwLCAweDdDLCAweDEwLCAweDc0LAorMHgwMSwgMHhDMCwgMHg4NywgMHgwMCwgMHgxRiwgMHgwMCwgMHg3RSwgMHgyOCwgMHhGMCwgMHgwMSwgMHhDMCwgMHgwNiwgMHgwOCwKKzB4MTcsIDB4NTgsIDB4N0MsIDB4MDAsIDB4RjAsIDB4NjEsIDB4QzAsIDB4ODUsIDB4MDAsIDB4MUUsIDB4ODIsIDB4M0MsIDB4MDAsCisweDkwLCAweDIxLCAweEQwLCAweDRCLCAweDAwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgxMCwgMHgwOCwgMHgyNSwgMHgwMCwgMHg5RiwgMHgwMCwgMHg3QywgMHgwMiwgMHgzMCwgMHgxOSwgMHhDMCwgMHg2NywgMHgwMSwKKzB4OUYsIDB4MDEsIDB4NjgsIDB4MDYsIDB4MzIsIDB4MDksIDB4QzIsIDB4MjcsIDB4MDAsIDB4OTIsIDB4MjAsIDB4NUMsIDB4MDYsCisweDcwLCAweDE5LCAweEQwLCAweDI0LCAweDAwLCAweDhBLCAweDA1LCAweDQ0LCAweDAyLCAweDcwLCAweDA5LCAweEMyLCAweDQwLAorMHgyMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgyMCwgMHgyNiwgMHgwMCwKKzB4OUQsIDB4MTEsIDB4MzQsIDB4MDIsIDB4MTAsIDB4NTksIDB4NDAsIDB4RTcsIDB4MDAsIDB4OUQsIDB4OEIsIDB4NDQsIDB4MDYsCisweDEwLCAweDA5LCAweDQwLCAweDIzLCAweDAwLCAweDkxLCAweDA4LCAweDQ0LCAweDhBLCAweDEwLCAweDg4LCAweDQwLCAweEU0LAorMHgyMCwgMHg5RCwgMHgwNywgMHg0NCwgMHgwQSwgMHg1MCwgMHgyOSwgMHg0MCwgMHgwNCwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MUMsIDB4QTAsIDB4MjQsIDB4MDAsIDB4OUQsIDB4MDgsIDB4NzQsIDB4MTIsCisweDUwLCAweDg5LCAweDQyLCAweDI3LCAweDA0LCAweDlELCAweDAwLCAweDc0LCAweDUyLCAweDUwLCAweDA5LCAweDQ4LCAweDI3LAorMHg0MCwgMHg5RCwgMHg5MCwgMHg1NCwgMHhBMiwgMHg1MywgMHgwRCwgMHg2MSwgMHg2NCwgMHgwMCwgMHg5OCwgMHgwMCwgMHg1NCwKKzB4MkEsIDB4NTEsIDB4MzksIDB4NDAsIDB4NzAsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDE0LCAweDI4LCAweDIwLCAweDAwLCAweDhELCAweDE0LCAweDc0LCAweDUyLCAweDE1LCAweDQ4LCAweDQxLCAweDIzLAorMHgyNSwgMHhDRCwgMHgxNCwgMHgxNCwgMHg1MiwgMHg1MCwgMHgwOCwgMHg0MCwgMHgyMywgMHgwMCwgMHg5NSwgMHgwMCwgMHgwNCwKKzB4MDIsIDB4MTEsIDB4MDgsIDB4NjAsIDB4MjAsIDB4MDAsIDB4OEQsIDB4MDgsIDB4MTQsIDB4MDIsIDB4NTAsIDB4NDgsIDB4NTEsCisweDUwLCAweEEwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFELCAweDMwLCAweDA2LAorMHgwMCwgMHgxRiwgMHgwNCwgMHg3QywgMHgxMCwgMHg3MCwgMHg0MSwgMHhDOCwgMHgwNywgMHgwMSwgMHgxRiwgMHgwNCwgMHg3QywKKzB4MTAsIDB4NzAsIDB4MDEsIDB4QzgsIDB4MDcsIDB4MDgsIDB4MTcsIDB4MDAsIDB4NTgsIDB4MDEsIDB4NzIsIDB4MDEsIDB4RDAsCisweDE0LCAweDAwLCAweDBCLCAweDE2LCAweDVDLCAweDUwLCAweDcwLCAweDQxLCAweEMwLCAweDc0LCAweEMwLCAweDBBLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOSwgMHhBOCwgMHgyNSwgMHgwNSwgMHhCRiwgMHgzNCwgMHhCQywKKzB4MDIsIDB4RjYsIDB4MDgsIDB4QzAsIDB4MjcsIDB4MDUsIDB4OUYsIDB4MTQsIDB4RTQsIDB4NTIsIDB4QjQsIDB4NEEsIDB4QzEsCisweDJGLCAweDEwLCAweEFCLCAweDAwLCAweEZDLCAweDAyLCAweEYwLCAweDBBLCAweEMwLCAweDJGLCAweDAwLCAweEJGLCAweDA0LAorMHhFRCwgMHg1MiwgMHhGMCwgMHg0QiwgMHhDMSwgMHg2NywgMHgyMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MTgsIDB4QTAsIDB4MjcsIDB4MDAsIDB4QkYsIDB4MTEsIDB4QkMsIDB4MDIsIDB4QzQsIDB4MEIsIDB4QzAsCisweDZFLCAweDAxLCAweEJGLCAweDU0LCAweEZDLCAweDMyLCAweEYwLCAweDA5LCAweEM4LCAweDI5LCAweDkwLCAweEIzLCAweDAwLAorMHhBRCwgMHgwMiwgMHhCMCwgMHgwQiwgMHhDMCwgMHgyQywgMHgwMCwgMHhCNywgMHgwMCwgMHhDQywgMHgxMiwgMHgzNiwgMHgwRiwKKzB4QzAsIDB4NjMsIDB4MDAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MUMsIDB4MTgsCisweDQ3LCAweDA1LCAweDFELCAweDg3LCAweDc0LCAweDAwLCAweDEwLCAweDgxLCAweDQwLCAweDA3LCAweDA1LCAweDFELCAweDA0LAorMHg3QywgMHgzMCwgMHhEMCwgMHgwNSwgMHg0MCwgMHgwNywgMHg4MCwgMHg1NSwgMHg0MCwgMHg0NCwgMHgwMCwgMHgxMiwgMHgwNSwKKzB4NTQsIDB4MDQsIDB4MDAsIDB4MTEsIDB4MDAsIDB4NDUsIDB4MjgsIDB4NTQsIDB4MDEsIDB4NDAsIDB4NzMsIDB4NjAsIDB4MEMsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweEEwLCAweDIxLCAweDAwLCAweENELCAweDEwLAorMHg3NCwgMHgyNywgMHhDMCwgMHgwQywgMHg0MCwgMHhBMywgMHgwMCwgMHg4RCwgMHgxNCwgMHgzNCwgMHgxMywgMHhEMiwgMHgwOCwKKzB4NDAsIDB4MjcsIDB4MDAsIDB4ODEsIDB4MDAsIDB4MjQsIDB4MDMsIDB4OTAsIDB4MDksIDB4NDAsIDB4MjQsIDB4MDAsIDB4ODUsCisweDgwLCAweDA0LCAweDAyLCAweDE4LCAweDA4LCAweDQwLCAweDRCLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgyMCwgMHgyNSwgMHgwMCwgMHg5RCwgMHgwMiwgMHg3NiwgMHgwMiwgMHgxMCwgMHgwOSwKKzB4NDAsIDB4MjcsIDB4MDAsIDB4OUQsIDB4MDAsIDB4NzQsIDB4MDIsIDB4QzIsIDB4MDksIDB4NDgsIDB4MjcsIDB4MDEsIDB4OTUsCisweDAwLCAweDQ0LCAweDIyLCAweDEwLCAweDA5LCAweDQ0LCAweEE0LCAweDAyLCAweDkxLCAweDAwLCAweDQ0LCAweDIyLCAweDUwLAorMHgwOSwgMHgwMCwgMHg2MywgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwKKzB4QTgsIDB4MjcsIDB4MDAsIDB4OUQsIDB4MDEsIDB4M0MsIDB4MEEsIDB4RjAsIDB4MDksIDB4QzAsIDB4MjYsIDB4MDgsIDB4OUYsCisweDQwLCAweDdBLCAweDQyLCAweEYwLCAweEI5LCAweEMwLCAweDIxLCAweDgwLCAweDkxLCAweDAwLCAweDJDLCAweDAyLCAweEIwLAorMHgxOSwgMHhDMCwgMHg2NCwgMHgwMCwgMHg5NywgMHgwNCwgMHg0QywgMHgwMiwgMHgzMCwgMHg0OSwgMHhDMCwgMHgxNywgMHgyOCwKKzB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4ODAsIDB4MjUsIDB4MjAsIDB4OUYsCisweDA0LCAweDdDLCAweDE2LCAweEY0LCAweDA5LCAweEMwLCAweDI3LCAweDBDLCAweDlGLCAweDIwLCAweDVFLCAweDUyLCAweEYwLAorMHgxOSwgMHhDMCwgMHgyNywgMHgyMCwgMHg5RiwgMHgwMCwgMHg3QywgMHgwMiwgMHhGMCwgMHg4OSwgMHhDMSwgMHgyNywgMHgwMCwKKzB4OUYsIDB4NTMsIDB4N0MsIDB4MDIsIDB4RjAsIDB4NDksIDB4QzEsIDB4NEIsIDB4MDAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDA1LCAweDAwLCAweDFGLCAweDQyLCAweDdDLCAweDAwLCAweDcwLAorMHgxMSwgMHhDQywgMHgwNywgMHgwMCwgMHgxQiwgMHgwMCwgMHg0QywgMHgwMCwgMHhGMCwgMHgyMSwgMHhDMCwgMHgwNywgMHgwMCwKKzB4MTIsIDB4MzAsIDB4NEMsIDB4NDAsIDB4NzAsIDB4MDEsIDB4QzAsIDB4ODUsIDB4MDksIDB4MEYsIDB4OEEsIDB4NUMsIDB4MDAsCisweDM0LCAweDIxLCAweEMwLCAweDQwLCAweDIwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgxNCwgMHhBMCwgMHgxNCwgMHgwMCwgMHg3RCwgMHgwQSwgMHg3NCwgMHgwMSwgMHgxMCwgMHgwNywgMHg0MCwgMHg5RiwgMHgwMCwKKzB4NzEsIDB4ODAsIDB4QzQsIDB4MDEsIDB4RDAsIDB4MDUsIDB4QzAsIDB4OUYsIDB4MDAsIDB4NjEsIDB4NDEsIDB4QzUsIDB4MDksCisweDEwLCAweDA2LCAweDQyLCAweDU4LCAweDA4LCAweDdELCAweDIxLCAweEM0LCAweDA5LCAweDEwLCAweDA3LCAweDQwLCAweDUwLAorMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHhBMCwgMHgzMiwgMHgwMCwKKzB4Q0QsIDB4MDAsIDB4MzQsIDB4MDIsIDB4RDAsIDB4MDAsIDB4NDgsIDB4NzMsIDB4ODAsIDB4QzksIDB4MTEsIDB4MTQsIDB4MDMsCisweEQwLCAweDBDLCAweDQwLCAweEIzLCAweDA2LCAweEMxLCAweDg4LCAweDA0LCAweDAzLCAweDUxLCAweDJDLCAweDQwLCAweDMxLAorMHgwMiwgMHhDRCwgMHgwMSwgMHg1NCwgMHg0MywgMHg5MCwgMHgyQywgMHg0MCwgMHg1MywgMHgwMCwgMHgwQSwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4ODgsIDB4MzgsIDB4MDEsIDB4RUQsIDB4ODAsIDB4RjQsIDB4MDMsCisweDE0LCAweDAyLCAweDQwLCAweEZCLCAweDAwLCAweEUxLCAweDAzLCAweDk0LCAweDAzLCAweEQwLCAweDhFLCAweDY0LCAweDJCLAorMHg0MCwgMHhGMSwgMHgwMCwgMHg4NCwgMHgwMywgMHgxMCwgMHgwRSwgMHg0NCwgMHgxOCwgMHgwMCwgMHhBRCwgMHgwMCwgMHhDNCwKKzB4MDMsIDB4OTEsIDB4MUMsIDB4NDAsIDB4MDcsIDB4MjAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDExLCAweDEwLCAweDc4LCAweDAwLCAweEVGLCAweDgxLCAweEI0LCAweDA3LCAweDcwLCAweDEyLCAweENBLCAweDdGLAorMHgwMCwgMHg0QiwgMHgwMSwgMHg5RCwgMHgwNSwgMHhGMiwgMHgxRSwgMHhDOCwgMHg3QiwgMHg4MCwgMHg2MiwgMHgwMSwgMHg4QywKKzB4MDcsIDB4NzAsIDB4MUUsIDB4RTgsIDB4NjksIDB4MjAsIDB4RkYsIDB4MDEsIDB4REMsIDB4ODUsIDB4QjAsIDB4MUUsIDB4RDAsCisweDQ3LCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweEE4LCAweEI1LAorMHgwQSwgMHhERiwgMHgwMCwgMHg3QywgMHgwMywgMHhGMCwgMHgwMSwgMHhDMCwgMHgxNywgMHgwMCwgMHhERiwgMHgwMCwgMHg2QywKKzB4MDMsIDB4RjAsIDB4MEQsIDB4QzAsIDB4MjUsIDB4MDAsIDB4Q0YsIDB4MDAsIDB4N0MsIDB4MDMsIDB4RjAsIDB4MEMsIDB4NDAsCisweDI3LCAweDAwLCAweDlGLCAweDAwLCAweDdDLCAweDAwLCAweDcwLCAweDA5LCAweEMyLCAweDQwLCAweDAwLCAweDA2LCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHhGRCwgMHgwMCwgMHhGRiwgMHgwMSwgMHhDQywKKzB4ODcsIDB4QjAsIDB4MTcsIDB4ODAsIDB4NUYsIDB4MDAsIDB4RkYsIDB4NDEsIDB4RkMsIDB4MDcsIDB4RjksIDB4OUUsIDB4QzAsCisweDU4LCAweDAwLCAweDczLCAweDgxLCAweDhDLCAweDg2LCAweEIwLCAweDlFLCAweEMwLCAweDdELCAweDA4LCAweERGLCAweDAxLAorMHhGQywgMHgwNywgMHgzNCwgMHgxNywgMHhDMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MTUsIDB4MTgsIDB4MzksIDB4MDAsIDB4N0QsIDB4MDgsIDB4ODQsIDB4MjMsIDB4MTAsIDB4ODIsIDB4NDAsCisweDFCLCAweDAwLCAweEVELCAweDAwLCAweEI0LCAweDAxLCAweEQwLCAweDBFLCAweDYyLCAweDE4LCAweDAxLCAweDZCLCAweDA0LAorMHg4NCwgMHgyMiwgMHgxMCwgMHgxQywgMHhDMCwgMHgyQSwgMHgwNCwgMHg4RCwgMHgwRCwgMHhCNCwgMHgyOSwgMHhCNCwgMHgwNywKKzB4NDAsIDB4NTQsIDB4NjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDM5LCAweDAwLCAweEVELCAweDAwLCAweEM0LCAweDAzLCAweDkwLCAweDAyLCAweDQwLCAweDNCLCAweDAwLCAweDZELCAweDAwLAorMHhCNCwgMHgwMSwgMHhEMCwgMHgwRiwgMHg1QSwgMHgxOCwgMHgyMCwgMHg3MSwgMHgwMCwgMHhGNCwgMHg0MywgMHhEMCwgMHg0RiwKKzB4NDAsIDB4MkIsIDB4MDAsIDB4RUQsIDB4MDAsIDB4QjQsIDB4MDEsIDB4OTAsIDB4MEUsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDQsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDIwLCAweDMxLCAweDgwLCAweDhELCAweDIyLAorMHgwNCwgMHgwQiwgMHgxOSwgMHgwOCwgMHg0MCwgMHgwNywgMHgwMCwgMHg4RCwgMHgwMCwgMHgzNCwgMHgwOCwgMHhEMSwgMHgyQywKKzB4NDAsIDB4NTAsIDB4MDAsIDB4NDksIDB4MDAsIDB4MzQsIDB4NEEsIDB4NTEsIDB4M0MsIDB4NDAsIDB4RTMsIDB4MDQsIDB4MEQsCisweDEwLCAweDM0LCAweDAwLCAweDkwLCAweDI4LCAweDUxLCAweDEwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwgMHhBOCwgMHgzRCwgMHgxMCwgMHgxRiwgMHgwMSwgMHg0QywgMHgwQiwgMHhCMCwgMHgwMSwKKzB4QzAsIDB4MjcsIDB4MDAsIDB4OUYsIDB4MDAsIDB4N0MsIDB4MUEsIDB4RjAsIDB4MkYsIDB4QzAsIDB4MzAsIDB4MDQsIDB4QzEsCisweDIwLCAweDdDLCAweDgwLCAweEYwLCAweDBDLCAweENDLCAweEEzLCAweDAwLCAweDVELCAweDIwLCAweDdDLCAweDBBLCAweDkwLAorMHgyOSwgMHg0OCwgMHg1NCwgMHgyMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwKKzB4MDAsIDB4MzcsIDB4MjgsIDB4OUYsIDB4MEMsIDB4N0QsIDB4MjMsIDB4RjAsIDB4MDEsIDB4QzAsIDB4MjcsIDB4MDAsIDB4MUYsCisweDAyLCAweDdDLCAweDRBLCAweEYwLCAweDBELCAweEMwLCAweDI3LCAweEMwLCAweEQ3LCAweDUwLCAweDQ5LCAweDBBLCAweEEwLAorMHhDRCwgMHgwMCwgMHhBNiwgMHgwMCwgMHgwRiwgMHgwOCwgMHg3OCwgMHgxMiwgMHg3NCwgMHgwMSwgMHhDMCwgMHgwNywgMHgwMCwKKzB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODQsIDB4MDgsIDB4M0YsIDB4MTAsIDB4MkYsCisweDAwLCAweEVDLCAweDQ3LCAweEIwLCAweDAyLCAweEQwLCAweDJDLCAweDAwLCAweDMzLCAweDAwLCAweEJDLCAweDgwLCAweEIwLAorMHgwRiwgMHhDMywgMHgzRiwgMHgwMCwgMHg3RiwgMHhDMCwgMHhFQywgMHg4MCwgMHg3MSwgMHgwQiwgMHhDMCwgMHgyRSwgMHgwOCwKKzB4NzMsIDB4MDAsIDB4MEQsIDB4MDIsIDB4MTQsIDB4MEEsIDB4RDAsIDB4MTEsIDB4MjIsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDg1LCAweDIwLCAweDM2LCAweDAwLCAweDlELCAweDI1LCAweDA0LCAweDI3LCAweDEwLAorMHgyMSwgMHg0MCwgMHg2NCwgMHgwMCwgMHgxMSwgMHgwNSwgMHg3NCwgMHgxNiwgMHgxMiwgMHgwRCwgMHg0MCwgMHgyNywgMHgxMCwKKzB4RDUsIDB4MDEsIDB4MDQsIDB4MjQsIDB4MTAsIDB4MTksIDB4NDUsIDB4RTQsIDB4MDEsIDB4NTUsIDB4MEEsIDB4NDQsIDB4MDYsCisweDU0LCAweDcxLCAweDQyLCAweDE0LCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMSwgMHhBMCwgMHgzNCwgMHgwMCwgMHgxRCwgMHg4MSwgMHg2NCwgMHgwMywgMHg5MCwgMHgwNSwgMHg0OSwgMHhDNCwgMHg4MCwKKzB4OTEsIDB4MDEsIDB4NzYsIDB4MDYsIDB4OTAsIDB4MEQsIDB4NDAsIDB4QjcsIDB4MDAsIDB4NTUsIDB4MDEsIDB4NjYsIDB4OEEsCisweDUwLCAweDFELCAweDYwLCAweDY2LCAweDgwLCAweDU1LCAweDAyLCAweDQ0LCAweDA2LCAweDU0LCAweDExLCAweDQwLCAweDA0LAorMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgyOCwgMHgzMCwgMHgwOCwKKzB4MEQsIDB4MDAsIDB4NDQsIDB4MDMsIDB4MTQsIDB4MDAsIDB4NDAsIDB4MDAsIDB4NDgsIDB4ODEsIDB4NDAsIDB4MzYsIDB4MDIsCisweDEwLCAweDBDLCAweDQwLCAweDMzLCAweDAwLCAweDExLCAweDA4LCAweDQ0LCAweDAyLCAweDEwLCAweDRELCAweDYwLCAweDA0LAorMHhDMCwgMHgwNSwgMHgwNiwgMHgwNCwgMHgwMCwgMHg1OCwgMHgwMCwgMHg0MCwgMHg0MCwgMHhBMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4QjAsIDB4M0UsIDB4MDAsIDB4MUYsIDB4MDAsIDB4NkMsIDB4ODMsCisweEIwLCAweDAxLCAweEMwLCAweDI0LCAweDAwLCAweDEzLCAweDAwLCAweDdDLCAweDAwLCAweEIwLCAweDBELCAweEM4LCAweDM3LAorMHg0MCwgMHgxRiwgMHgwMiwgMHg2QywgMHgwMiwgMHg3MCwgMHhFOSwgMHhDMywgMHgyNiwgMHg4MCwgMHg5MywgMHgxNiwgMHg0QywKKzB4MDIsIDB4NzAsIDB4MDksIDB4QzIsIDB4MDEsIDB4QzAsIDB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDg1LCAweEEwLCAweDNGLCAweDIwLCAweEJGLCAweDAwLCAweEJDLCAweDAzLCAweEYwLCAweDAzLCAweEMwLCAweDJGLAorMHgwMCwgMHhCRiwgMHg0MCwgMHhGQywgMHgwMiwgMHhGMSwgMHgwRiwgMHhDMCwgMHgzRiwgMHgwOCwgMHgyRiwgMHgwMCwgMHhGQywKKzB4MDIsIDB4RjAsIDB4NDEsIDB4QzAsIDB4MkYsIDB4MDAsIDB4M0YsIDB4MDQsIDB4RkMsIDB4MDAsIDB4RjAsIDB4MDMsIDB4QzAsCisweDE3LCAweDIyLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweEEwLCAweDdGLAorMHgwMCwgMHg2MywgMHgwNCwgMHhDQywgMHgzMiwgMHg3MiwgMHgxRiwgMHhDOCwgMHgyQywgMHgwMywgMHg3MiwgMHgwMSwgMHhDQywKKzB4MDUsIDB4NzAsIDB4MEIsIDB4QzAsIDB4M0QsIDB4MDAsIDB4QkIsIDB4ODAsIDB4RUMsIDB4MDQsIDB4RDAsIDB4OUIsIDB4RDAsCisweDVDLCAweDRBLCAweEYzLCAweDAxLCAweENDLCAweDEyLCAweEYxLCAweDE3LCAweEMwLCAweDBDLCAweDAwLCAweDBFLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHgwOCwgMHg3RiwgMHgwMCwgMHg1MSwgMHgwMywgMHg0NCwKKzB4QjIsIDB4MTIsIDB4MUYsIDB4NDAsIDB4MjQsIDB4MTMsIDB4RDEsIDB4MDEsIDB4NDQsIDB4MDcsIDB4MTAsIDB4M0QsIDB4NDAsCisweEZDLCAweDAwLCAweEIxLCAweDAzLCAweDQ0LCAweDgwLCAweEQwLCAweDQ1LCAweDQwLCAweDA0LCAweDAxLCAweEYxLCAweDIxLAorMHg0NCwgMHgyNiwgMHhEMCwgMHgxRCwgMHg0MCwgMHgwNSwgMHgyMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MTEsIDB4QTAsIDB4MzMsIDB4MDAsIDB4NTUsIDB4MDIsIDB4MDQsIDB4MTIsIDB4NTAsIDB4MEMsIDB4NDAsCisweDIxLCAweDAxLCAweDkxLCAweDAwLCAweDE2LCAweDAyLCAweDUwLCAweDg4LCAweDQwLCAweDMxLCAweDAyLCAweDg5LCAweDA4LAorMHgyNCwgMHgwMCwgMHhEOCwgMHgwOCwgMHg0MCwgMHgzMCwgMHg4OCwgMHhDMSwgMHgwMCwgMHgxNCwgMHg4MiwgMHhEMiwgMHgwOCwKKzB4NDAsIDB4NDQsIDB4ODAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4QTgsCisweDM1LCAweDAwLCAweEQ1LCAweDAwLCAweDQ0LCAweDgyLCAweDUwLCAweDBELCAweDQwLCAweDI1LCAweDAwLCAweEQxLCAweDAwLAorMHgxMCwgMHgyMiwgMHgwMCwgMHgwOSwgMHg0MCwgMHgzNSwgMHg4MCwgMHg5NSwgMHgwNCwgMHg0NCwgMHgwNiwgMHhDMCwgMHg4MSwKKzB4MDAsIDB4MzQsIDB4MDQsIDB4RDEsIDB4NDAsIDB4NTQsIDB4MTIsIDB4RDAsIDB4MEMsIDB4NDAsIDB4MEQsIDB4MjAsIDB4MDYsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweEE4LCAweDMzLCAweDQwLCAweEM3LCAweDAwLAorMHg0QywgMHgyNiwgMHg3MSwgMHgwRCwgMHhEMCwgMHg2NCwgMHgwMCwgMHg4MywgMHg4MCwgMHg1QywgMHgwNywgMHg3MCwgMHgwNSwKKzB4QzAsIDB4MzUsIDB4MDAsIDB4OUIsIDB4MDAsIDB4NkMsIDB4NEMsIDB4RjAsIDB4MDksIDB4QzgsIDB4MjQsIDB4MDAsIDB4RDMsCisweDAwLCAweDVDLCAweDA3LCAweEYwLCAweDBELCAweEMwLCAweDAwLCAweDIwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwNywgMHg4MCwgMHgzRCwgMHgxMCwgMHg3QiwgMHgwOSwgMHhGQywgMHgwMywgMHhCMywgMHgwRiwKKzB4QzAsIDB4M0UsIDB4NDEsIDB4QkYsIDB4MDAsIDB4RUQsIDB4ODMsIDB4RjAsIDB4OUYsIDB4ODIsIDB4MzYsIDB4MjAsIDB4OUIsCisweDAxLCAweEZDLCAweDAwLCAweEYwLCAweDFGLCAweEMwLCAweDJGLCAweDAwLCAweEZELCAweDgwLCAweEVDLCAweDAyLCAweEYyLAorMHg4RiwgMHhDMCwgMHgxRiwgMHgwMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwKKzB4MDgsIDB4MzUsIDB4MTIsIDB4REYsIDB4MEEsIDB4NEQsIDB4MDMsIDB4RjAsIDB4OEMsIDB4QzQsIDB4MzQsIDB4MDAsIDB4OUYsCisweDAwLCAweDdDLCAweDAzLCAweEYwLCAweDAwLCAweEMwLCAweDczLCAweDAwLCAweDhCLCAweDAwLCAweDVDLCAweDA4LCAweEYwLAorMHgwOSwgMHhDMCwgMHhBNywgMHgwMCwgMHhDRiwgMHgwMCwgMHg3QywgMHg0MiwgMHhGMiwgMHgwOSwgMHhDMiwgMHgwOCwgMHgyMCwKKzB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTMsIDB4QTIsIDB4MzQsIDB4MDAsIDB4REQsCisweDgwLCAweDQ0LCAweDAzLCAweEQwLCAweDBELCAweDQwLCAweDc0LCAweDAwLCAweDlELCAweDAwLCAweDc0LCAweDAzLCAweEQwLAorMHgwQiwgMHgwMiwgMHgzRiwgMHgwMCwgMHg5MSwgMHgwMSwgMHg0NCwgMHgwMiwgMHhEMCwgMHgwRCwgMHg0MCwgMHg2NywgMHgwNCwKKzB4REQsIDB4MDAsIDB4NzQsIDB4MDIsIDB4RDIsIDB4MEQsIDB4NDAsIDB4NEMsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA3LCAweEEwLCAweDMyLCAweDBDLCAweDRDLCAweDAwLCAweDQ0LCAweDAzLCAweEQwLAorMHgwQywgMHg1MSwgMHgzNCwgMHgwMiwgMHg0RCwgMHgwMCwgMHgzMCwgMHgwMCwgMHhEMCwgMHgwOCwgMHg0MCwgMHgzMiwgMHgwMCwKKzB4ODEsIDB4MDAsIDB4MTQsIDB4MDAsIDB4RDAsIDB4MEQsIDB4NDAsIDB4MzcsIDB4MDAsIDB4Q0QsIDB4MjAsIDB4MzQsIDB4MkUsCisweEQwLCAweDAwLCAweDUwLCAweDFDLCAweDAwLCAweDBBLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwNCwgMHg4MCwgMHg3OCwgMHgwMCwgMHg2RCwgMHg0MSwgMHg4NCwgMHg0NiwgMHhEMCwgMHgxRSwgMHg0OCwgMHg2OCwgMHgwMCwKKzB4RUQsIDB4MDEsIDB4QjQsIDB4MDYsIDB4RDAsIDB4MUUsIDB4NDIsIDB4N0IsIDB4NjAsIDB4QTEsIDB4MjEsIDB4ODQsIDB4ODQsCisweEQwLCAweDVFLCAweDQxLCAweDZCLCAweDAwLCAweEVDLCAweDgxLCAweEI0LCAweDA3LCAweEQyLCAweDFCLCAweDQwLCAweDE4LAorMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHgxMCwgMHgzMCwgMHgwMCwKKzB4Q0YsIDB4MDAsIDB4MEMsIDB4MDIsIDB4RjIsIDB4MEMsIDB4QzAsIDB4MjAsIDB4MDAsIDB4OEYsIDB4MDAsIDB4M0MsIDB4MTIsCisweEYwLCAweDQ4LCAweEMwLCAweDMzLCAweDAwLCAweDgzLCAweDEwLCAweDFDLCAweDgwLCAweEY4LCAweDA4LCAweEUwLCAweDMzLAorMHgwMCwgMHhDRiwgMHg0OCwgMHgzQywgMHgwMywgMHhGMCwgMHgwOSwgMHhDMCwgMHg0OCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4QjgsIDB4N0QsIDB4MDAsIDB4RkYsIDB4MDAsIDB4RkMsIDB4NDIsCisweEYwLCAweDFFLCAweEMwLCAweDJGLCAweDAwLCAweEZGLCAweDAwLCAweEZDLCAweDAyLCAweEYwLCAweDBGLCAweEMwLCAweDNGLAorMHgwMCwgMHhCNywgMHgwMCwgMHhFQywgMHgyMiwgMHhGMiwgMHg0QiwgMHhDMCwgMHgzRiwgMHgwMCwgMHhGRSwgMHgwMSwgMHhGQywKKzB4NDMsIDB4RjAsIDB4MDksIDB4QzAsIDB4MEIsIDB4NjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDExLCAweEEwLCAweDM3LCAweDAwLCAweDVGLCAweDAwLCAweDdDLCAweDAzLCAweEYwLCAweDBELCAweEMwLCAweDM3LAorMHgwMCwgMHg5RiwgMHgwMCwgMHg3OCwgMHgwMiwgMHhGMCwgMHg4NSwgMHhDMCwgMHhGMCwgMHgyMiwgMHhEQiwgMHgxNCwgMHg3NCwKKzB4MDAsIDB4RTAsIDB4MUMsIDB4QzAsIDB4MjQsIDB4MDAsIDB4REYsIDB4MDAsIDB4N0MsIDB4MDMsIDB4RjAsIDB4MDksIDB4QzAsCisweDU3LCAweDAwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDg4LCAweEI5LAorMHgwMCwgMHg2RCwgMHgwNCwgMHhCNCwgMHgxMywgMHhEMCwgMHg0RSwgMHg0MCwgMHgzQiwgMHgwMCwgMHhBRCwgMHgwMCwgMHhCNiwKKzB4MDIsIDB4RDAsIDB4NEUsIDB4NTAsIDB4MzgsIDB4MDQsIDB4QTEsIDB4MDAsIDB4QjQsIDB4MDIsIDB4RDAsIDB4MEUsIDB4NDAsCisweDI4LCAweDAwLCAweEVELCAweDA0LCAweEI0LCAweDAzLCAweEQwLCAweDBBLCAweDQwLCAweDRCLCAweDIwLCAweDA2LCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHgwMCwgMHg3OSwgMHg4OSwgMHhFRCwgMHgwOSwgMHhCNCwKKzB4MDcsIDB4RDAsIDB4OUUsIDB4NDAsIDB4NzksIDB4MDMsIDB4QUQsIDB4MDEsIDB4QjQsIDB4MDYsIDB4RDAsIDB4MTQsIDB4NjIsCisweDc4LCAweDAxLCAweEU5LCAweDExLCAweEI0LCAweDA0LCAweEQwLCAweDFGLCAweDQwLCAweDY5LCAweDg4LCAweEVELCAweDBELAorMHhCNCwgMHg1NywgMHhEMCwgMHgxQSwgMHg0MCwgMHgwRiwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MTIsIDB4MjgsIDB4MzMsIDB4MDAsIDB4OEQsIDB4QTAsIDB4MzQsIDB4MDcsIDB4RDAsIDB4MEMsIDB4NDAsCisweDczLCAweDEwLCAweDhELCAweDBCLCAweDM0LCAweDJBLCAweEQwLCAweDJDLCAweDQwLCAweDMwLCAweDAwLCAweEMxLCAweDAxLAorMHgzNCwgMHgwMywgMHhEMCwgMHhEQywgMHg0MCwgMHgyMSwgMHgyMywgMHhDRCwgMHgwMCwgMHgzNCwgMHgwNywgMHhEMCwgMHgwOCwKKzB4NDEsIDB4NEIsIDB4MjAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTcsIDB4QTgsCisweDExLCAweDAwLCAweDdGLCAweDIwLCAweDdDLCAweDExLCAweEYwLCAweDA1LCAweEMwLCAweDE3LCAweDI0LCAweDdGLCAweDAyLAorMHhGQywgMHgwRCwgMHhGMCwgMHgwNywgMHhDMCwgMHgxNCwgMHgwMCwgMHg1QiwgMHgwMSwgMHhGQywgMHgzMSwgMHhGMCwgMHgwNywKKzB4RDAsIDB4OUQsIDB4MDAsIDB4NUYsIDB4MDAsIDB4N0MsIDB4MDEsIDB4RjAsIDB4MjcsIDB4QzAsIDB4NUYsIDB4MjAsIDB4MDYsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDAwLCAweDg3LCAweDAwLCAweDFGLCAweDAxLAorMHg3QywgMHgwMCwgMHhGMCwgMHgwMSwgMHhDMCwgMHgwNywgMHgwMCwgMHgxRiwgMHgxMCwgMHg3MCwgMHg0MCwgMHhGMCwgMHg4MCwKKzB4QzAsIDB4MDcsIDB4MDAsIDB4MUYsIDB4MDAsIDB4N0MsIDB4MDAsIDB4RjEsIDB4MDEsIDB4ODAsIDB4MDYsIDB4MjgsIDB4MUYsCisweDgwLCAweDc4LCAweDA4LCAweEYwLCAweDAxLCAweEMwLCAweDRCLCAweDAwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHg2NywgMHgwMCwgMHg5MywgMHgwMCwgMHg3QywgMHgyNiwgMHhGMCwgMHgzOSwKKzB4QzAsIDB4MjcsIDB4MDEsIDB4OUYsIDB4MDAsIDB4NEQsIDB4MDIsIDB4MzIsIDB4MDksIDB4QzMsIDB4NjQsIDB4MDAsIDB4OEYsCisweDAxLCAweDRDLCAweDAyLCAweEYxLCAweDI5LCAweEMwLCAweDI3LCAweDAxLCAweDlGLCAweDAwLCAweDRDLCAweDA2LCAweDMwLAorMHgwOSwgMHhDMCwgMHg0MCwgMHgyMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwKKzB4MjAsIDB4MkUsIDB4MDAsIDB4QjEsIDB4MDMsIDB4RjQsIDB4MDIsIDB4RDAsIDB4MEIsIDB4NDAsIDB4NkYsIDB4MDAsIDB4OUQsCisweDAwLCAweDA0LCAweDAyLCAweDEwLCAweDA5LCAweDQwLCAweDI0LCAweDAwLCAweDlELCAweDAxLCAweDQ0LCAweDAyLCAweEQwLAorMHgwOSwgMHg0MCwgMHg2NywgMHgwOCwgMHhCRCwgMHgwMCwgMHg4NCwgMHgwRSwgMHgxMCwgMHgwOCwgMHg0MCwgMHgwNCwgMHgwMCwKKzB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4QTAsIDB4MjQsIDB4MDIsIDB4RDEsCisweDA4LCAweDc0LCAweDAyLCAweEQwLCAweDA5LCAweDQxLCAweDI3LCAweDAwLCAweDhELCAweDAwLCAweDQ0LCAweDAyLCAweDEwLAorMHgwOSwgMHg1MCwgMHgyNCwgMHgwMSwgMHg5RCwgMHgwNCwgMHg0NCwgMHgwMiwgMHhEMCwgMHgwRCwgMHg0MiwgMHgyNywgMHgwMCwKKzB4OEQsIDB4MDAsIDB4NDQsIDB4MUEsIDB4MTAsIDB4MDksIDB4NDAsIDB4NjAsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDIwLCAweDIwLCAweDAwLCAweDgxLCAweDAwLCAweDM0LCAweDBBLCAweEQwLAorMHgwOCwgMHg0MiwgMHhBMywgMHgwOCwgMHg4RCwgMHgwMiwgMHg0NCwgMHgwQSwgMHgxMCwgMHg2OCwgMHg0MSwgMHgyMCwgMHgwNSwKKzB4OEQsIDB4MTQsIDB4MDUsIDB4MDIsIDB4RDAsIDB4MjgsIDB4NDAsIDB4QTMsIDB4MDgsIDB4OEQsIDB4MDIsIDB4MDUsIDB4MDIsCisweDEwLCAweDI5LCAweDQwLCAweDQwLCAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgxRCwgMHhCMCwgMHg1NiwgMHg0MCwgMHg1MywgMHgwMSwgMHg3QywgMHgwNCwgMHhGMCwgMHgxMSwgMHhDMCwgMHg0NywgMHgwMCwKKzB4MUYsIDB4MDAsIDB4NEMsIDB4MDAsIDB4MzQsIDB4NDEsIDB4QzAsIDB4MDQsIDB4MDEsIDB4MUYsIDB4MDQsIDB4NEMsIDB4MjgsCisweEYwLCAweDAxLCAweEMwLCAweDA3LCAweDAwLCAweDFGLCAweDAxLCAweDRDLCAweDA0LCAweDM0LCAweDAxLCAweEQwLCAweDc0LAorMHhDMCwgMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOSwgMHhCOCwgMHhBNywgMHgwMCwKKzB4QkYsIDB4MDIsIDB4RkMsIDB4MEUsIDB4RjAsIDB4MjksIDB4QzAsIDB4RUYsIDB4MDAsIDB4QkYsIDB4MDEsIDB4RkMsIDB4MDYsCisweEYwLCAweDFCLCAweEMwLCAweDI3LCAweDAwLCAweEJGLCAweDgwLCAweEZDLCAweDA2LCAweEYwLCAweDFCLCAweEMwLCAweDZGLAorMHgwOCwgMHg5RiwgMHgyMywgMHhGQywgMHgwQSwgMHhGMCwgMHgxQiwgMHhDMCwgMHg2NywgMHg2MCwgMHgwRSwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4QTAsIDB4NkYsIDB4MDAsIDB4RkIsIDB4MTEsIDB4Q0QsIDB4MTYsCisweEYwLCAweDFCLCAweEMwLCAweDZGLCAweDAxLCAweDkzLCAweDAwLCAweDZDLCAweDBBLCAweDIwLCAweDU5LCAweDgwLCAweDZELAorMHgwMSwgMHhBMywgMHgwNSwgMHgwQywgMHgwMiwgMHhGMCwgMHgyQiwgMHhDOCwgMHgyQiwgMHgwMCwgMHg5RCwgMHg4NSwgMHhDQywKKzB4MDYsIDB4MzAsIDB4MjksIDB4QzAsIDB4NjcsIDB4MjAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDFDLCAweDA4LCAweDA3LCAweDAwLCAweDExLCAweDQyLCAweDQ0LCAweDE0LCAweEQwLCAweDIxLCAweDQwLCAweEM3LAorMHgwMywgMHg1MSwgMHgxNSwgMHg2NCwgMHgwNCwgMHgxMCwgMHgzMCwgMHg0MCwgMHgwNCwgMHgwMCwgMHgxMSwgMHgwMCwgMHg1NCwKKzB4MDAsIDB4RDAsIDB4NTEsIDB4NDAsIDB4NTcsIDB4MDAsIDB4MUQsIDB4MDcsIDB4NDQsIDB4MjgsIDB4MTAsIDB4MTEsIDB4NDAsCisweDczLCAweDYwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweEEwLCAweEEzLAorMHgwMCwgMHg4OSwgMHgwMCwgMHgwNCwgMHg0QSwgMHhEMCwgMHgyOCwgMHg0MiwgMHgyMywgMHgwNCwgMHg4MSwgMHgyMCwgMHgyNCwKKzB4MDIsIDB4MTAsIDB4QzgsIDB4NjEsIDB4QTMsIDB4MDAsIDB4ODEsIDB4MDIsIDB4MDQsIDB4MDIsIDB4NTAsIDB4NDgsIDB4NjAsCisweDMzLCAweDA1LCAweDhELCAweDEyLCAweDE0LCAweDAyLCAweEQwLCAweDA4LCAweDQwLCAweDQzLCAweDgwLCAweDBFLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHhBOCwgMHgyNSwgMHgwMCwgMHg5MSwgMHg0MCwgMHg0NCwKKzB4MDIsIDB4RDAsIDB4MDksIDB4NDIsIDB4MjcsIDB4NjAsIDB4OTEsIDB4MDgsIDB4MjQsIDB4MDIsIDB4MTAsIDB4MDksIDB4NDIsCisweDI2LCAweDAwLCAweDkxLCAweDA0LCAweDU0LCAweDBBLCAweEQwLCAweDg5LCAweDQyLCAweDI3LCAweDAxLCAweDlELCAweDAwLAorMHg1NCwgMHgwNiwgMHhEMCwgMHgwOSwgMHg0MCwgMHg2MywgMHgwMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDUsIDB4MjgsIDB4MjUsIDB4MDAsIDB4OUIsIDB4MEUsIDB4Q0MsIDB4MjIsIDB4RjAsIDB4MDksIDB4QzAsCisweDJGLCAweDAwLCAweEIzLCAweDAzLCAweEVDLCAweDEyLCAweDMwLCAweDFCLCAweEMwLCAweDI3LCAweDAwLCAweDkzLCAweDAwLAorMHg0QywgMHgwNiwgMHhFMCwgMHgxQiwgMHhDMCwgMHhFRiwgMHgyMCwgMHhCRiwgMHgwMCwgMHg1RCwgMHgwMiwgMHhGMCwgMHg2QiwKKzB4QzAsIDB4MTcsIDB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDAsCisweDI1LCAweDAwLCAweDlGLCAweDEwLCAweDdDLCAweDAyLCAweEYwLCAweDA5LCAweEMwLCAweEE3LCAweDAwLCAweDlGLCAweDIxLAorMHg3QywgMHgxMiwgMHhGNCwgMHgzOCwgMHhEMCwgMHgyMSwgMHg0MCwgMHg5RiwgMHgwMCwgMHg3QywgMHgwQSwgMHhGMiwgMHgwOSwKKzB4QzAsIDB4NjcsIDB4MDgsIDB4OUYsIDB4MDAsIDB4MkMsIDB4ODIsIDB4MzQsIDB4MzksIDB4QzAsIDB4NTMsIDB4MDAsIDB4MDQsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDA4LCAweDAxLCAweDAxLCAweDBGLCAweDAwLAorMHg0RCwgMHg4MCwgMHgzMCwgMHg4MSwgMHhDMCwgMHgwNywgMHgwMCwgMHgxRiwgMHgwMiwgMHg3QywgMHgwMCwgMHhGMCwgMHgwMSwKKzB4QzAsIDB4MDQsIDB4MTAsIDB4MTcsIDB4MDAsIDB4NEMsIDB4MDgsIDB4NzIsIDB4MDEsIDB4RDAsIDB4MDQsIDB4NDAsIDB4MDMsCisweDAwLCAweDdDLCAweDAwLCAweEYwLCAweDAxLCAweEMwLCAweDUzLCAweDIwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgyMCwgMHhEQywgMHgyMCwgMHg3RCwgMHgwMCwgMHg0NCwgMHgwNSwgMHgxMCwgMHgwNywKKzB4NDAsIDB4MTcsIDB4MDQsIDB4NUQsIDB4MDAsIDB4NzQsIDB4MDEsIDB4RDAsIDB4MDUsIDB4QzAsIDB4MTYsIDB4MDAsIDB4NDEsCisweDExLCAweDQ0LCAweDAxLCAweDEwLCAweDE1LCAweDQzLCAweDE0LCAweDAwLCAweDUxLCAweDAwLCAweEYwLCAweDAxLCAweEMwLAorMHgwNSwgMHg0MCwgMHg1MywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwKKzB4QTAsIDB4RTIsIDB4MDAsIDB4OEQsIDB4MDAsIDB4MDQsIDB4MDcsIDB4MTAsIDB4MDgsIDB4NDIsIDB4MzcsIDB4MDAsIDB4Q0QsCisweDAwLCAweDMwLCAweDAzLCAweEQwLCAweDBDLCAweDQwLCAweDMyLCAweDAwLCAweDg1LCAweDAxLCAweDA1LCAweDAzLCAweDUwLAorMHgwQywgMHg0MCwgMHgzMiwgMHgwMCwgMHhDMSwgMHg4MCwgMHgzNCwgMHgwMiwgMHhDMCwgMHgwQywgMHg0MCwgMHg1MywgMHgwMCwKKzB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4ODAsIDB4QjgsIDB4MDAsIDB4QUQsCisweDAwLCAweDA0LCAweDc3LCAweDE0LCAweDBFLCAweDQwLCAweDJCLCAweDgyLCAweEVELCAweDA0LCAweEI0LCAweDEzLCAweEQwLAorMHg0RSwgMHg0MCwgMHgyQSwgMHgwMCwgMHhGNSwgMHgwMCwgMHhDNCwgMHgwNywgMHg1MCwgMHhERSwgMHg0MCwgMHg3RSwgMHgwMSwKKzB4RTEsIDB4MEMsIDB4QjQsIDB4MDMsIDB4RDEsIDB4NEUsIDB4NDAsIDB4MTMsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDEwLCAweDY4LCAweDAwLCAweEFGLCAweDAxLCAweDg0LCAweDA2LCAweDMwLAorMHgxQSwgMHhDMCwgMHg3QiwgMHgwMSwgMHhFRiwgMHgwMywgMHhCQywgMHgwRiwgMHhGMCwgMHg1RSwgMHhDMCwgMHg2QSwgMHgwMCwKKzB4RTcsIDB4MDEsIDB4OEMsIDB4MDcsIDB4NzAsIDB4MUYsIDB4ODAsIDB4RkEsIDB4MDAsIDB4RTMsIDB4MDEsIDB4QkMsIDB4MDYsCisweEYwLCAweDNFLCAweEMwLCAweDUzLCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgxMCwgMHhCOCwgMHgzNSwgMHgwMCwgMHg4RiwgMHgwMCwgMHg3QywgMHgwMiwgMHhDMCwgMHgwRCwgMHhDMCwgMHgyNywgMHgwMCwKKzB4REYsIDB4MDAsIDB4N0MsIDB4MDMsIDB4RTAsIDB4OEQsIDB4QzQsIDB4MjMsIDB4MDAsIDB4REIsIDB4MDAsIDB4N0MsIDB4NjMsCisweEI4LCAweDBELCAweEMwLCAweDM1LCAweDAwLCAweERGLCAweDAwLCAweDdDLCAweDAzLCAweEYwLCAweDBELCAweEMwLCAweDQzLAorMHg2MCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHhBMCwgMHg2RiwgMHgwMCwKKzB4QjMsIDB4MDEsIDB4RkMsIDB4ODcsIDB4MzAsIDB4MUIsIDB4ODAsIDB4N0YsIDB4MDIsIDB4RTMsIDB4MDEsIDB4OEMsIDB4MDcsCisweDMwLCAweDFGLCAweDQwLCAweDdDLCAweDAxLCAweEZGLCAweDAxLCAweEVDLCAweDA3LCAweDMwLCAweDFCLCAweEMwLCAweDc4LAorMHgyOCwgMHhGMywgMHgyMSwgMHhGQywgMHgwNiwgMHgzMCwgMHgxRSwgMHhDOCwgMHgwOCwgMHgwMCwgMHgwRSwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTUsIDB4ODgsIDB4MjksIDB4NDAsIDB4QTEsIDB4MDAsIDB4RjQsIDB4MDMsCisweDE0LCAweDBBLCAweDQwLCAweDJCLCAweDQ4LCAweEUxLCAweDAwLCAweDg0LCAweDIzLCAweDEwLCAweDhFLCAweDQwLCAweDI5LAorMHgwMCwgMHhFRCwgMHgwMCwgMHhDNCwgMHg0MywgMHhCMCwgMHgwQSwgMHhDMCwgMHgzQSwgMHgwMiwgMHhFMSwgMHgwMCwgMHhCNCwKKzB4MEIsIDB4MTAsIDB4OEUsIDB4NDAsIDB4NTQsIDB4MjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDIxLCAweDAwLCAweEExLCAweDEwLCAweEI0LCAweDAyLCAweDEwLCAweDBBLCAweDQwLCAweDNCLAorMHg4MCwgMHhGMSwgMHgwMSwgMHhDNCwgMHgwNywgMHgxMCwgMHgxRiwgMHg0MCwgMHgyOCwgMHgwMSwgMHhDRCwgMHgwMCwgMHhBNCwKKzB4MDMsIDB4MTAsIDB4MEIsIDB4NDEsIDB4M0QsIDB4MDAsIDB4RTEsIDB4MDEsIDB4QjQsIDB4NjIsIDB4MTQsIDB4MUYsIDB4NDAsCisweDIwLCAweDAyLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA2LCAweDI4LCAweDEzLAorMHgwMCwgMHg4MSwgMHgwMSwgMHgzNCwgMHg4NiwgMHgxMCwgMHgwQywgMHg0MCwgMHg2MywgMHgwMCwgMHhDMSwgMHgwNywgMHgwNCwKKzB4MEIsIDB4MTgsIDB4M0MsIDB4NDAsIDB4MjEsIDB4MDAsIDB4Q0QsIDB4MDAsIDB4MDQsIDB4MTcsIDB4OTAsIDB4M0MsIDB4NDMsCisweDY3LCAweDAwLCAweEMxLCAweDAwLCAweDM0LCAweDA3LCAweDEwLCAweDFDLCAweDQwLCAweDE4LCAweDIwLCAweDBDLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwgMHhBOCwgMHgyNSwgMHgwMCwgMHhEMywgMHgwMywgMHg3QywKKzB4MTMsIDB4MzAsIDB4MDksIDB4QzIsIDB4NzcsIDB4MDQsIDB4RDMsIDB4MDQsIDB4NDUsIDB4MkIsIDB4MzQsIDB4NkQsIDB4QzAsCisweDI0LCAweDAwLCAweERGLCAweDExLCAweEVDLCAweDAzLCAweDMwLCAweDNDLCAweEMwLCAweDY1LCAweDQ0LCAweEQzLCAweDIwLAorMHgzQywgMHgwMiwgMHgzMCwgMHg2RCwgMHhEMCwgMHg1NCwgMHgyMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MzcsIDB4MDAsIDB4Q0YsIDB4MDAsIDB4N0MsIDB4MDMsIDB4RjAsIDB4MkQsIDB4QzAsCisweDI3LCAweDA4LCAweERGLCAweDAwLCAweDdDLCAweDAzLCAweEYwLCAweDBELCAweEMwLCAweDI3LCAweDAwLCAweERELCAweDQwLAorMHg3QywgMHg4MywgMHhGMiwgMHgwRCwgMHhDMCwgMHgyNiwgMHgwMCwgMHhERiwgMHgwMCwgMHg3QywgMHgwQSwgMHhGMCwgMHg0RCwKKzB4QzAsIDB4MjcsIDB4MDAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDgsCisweDJGLCAweDAwLCAweEJGLCAweDEwLCAweDhDLCAweDA2LCAweDMxLCAweDBCLCAweEQwLCAweEI0LCAweDAwLCAweEZGLCAweDAwLAorMHhDQywgMHgwMywgMHhGMCwgMHgwRiwgMHhDMSwgMHhFRiwgMHgwMCwgMHhGRiwgMHg4NSwgMHhDQywgMHgwMywgMHgzMCwgMHg0RiwKKzB4QzAsIDB4RUMsIDB4MDAsIDB4RjMsIDB4MDAsIDB4NEMsIDB4MTYsIDB4MzAsIDB4MEYsIDB4QzAsIDB4MDQsIDB4MjAsIDB4MEMsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgxLCAweDIwLCAweDM2LCAweDAwLCAweERELCAweDAzLAorMHg0NCwgMHgwMiwgMHgxMSwgMHgyNCwgMHg0MCwgMHg3NCwgMHgwMCwgMHhERCwgMHg0MCwgMHg0NCwgMHgwMywgMHhEMCwgMHgwRCwKKzB4NDIsIDB4NjcsIDB4MjAsIDB4Q0QsIDB4MDEsIDB4NDQsIDB4MDMsIDB4MTAsIDB4MTksIDB4NDgsIDB4NzQsIDB4MjAsIDB4RDEsCisweDAwLCAweDQ0LCAweDAxLCAweDAwLCAweDBELCAweDQwLCAweDg0LCAweDAyLCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHhBMCwgMHgyNiwgMHgwMCwgMHhERCwgMHgwNiwgMHg0NCwgMHhBMywgMHgxNCwgMHgwOSwKKzB4NDEsIDB4MzQsIDB4MDAsIDB4Q0QsIDB4MDAsIDB4NjQsIDB4MDMsIDB4RDAsIDB4MEQsIDB4NDAsIDB4MjcsIDB4MTAsIDB4REQsCisweDAwLCAweDg0LCAweDAzLCAweDEwLCAweDA5LCAweDQwLCAweDI0LCAweDQwLCAweEMxLCAweDAwLCAweDQ0LCAweDAyLCAweDEwLAorMHgwQywgMHg0MCwgMHgwNCwgMHgwMCwgMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwKKzB4MDAsIDB4MjAsIDB4MDAsIDB4Q0QsIDB4MDAsIDB4MTQsIDB4MDIsIDB4MTAsIDB4MDgsIDB4NDAsIDB4MjAsIDB4MDAsIDB4Q0QsCisweDAwLCAweDA1LCAweDAzLCAweEQwLCAweDBDLCAweDQwLCAweDIzLCAweDgwLCAweERELCAweDQwLCAweDA0LCAweDAzLCAweDE0LAorMHgwOSwgMHg1MCwgMHgyMCwgMHgwMCwgMHhDMSwgMHg0MCwgMHgwNCwgMHgwMiwgMHgxNiwgMHgwQywgMHg1NCwgMHg0MCwgMHg4MCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MjYsIDB4MDAsIDB4MUYsCisweDAwLCAweDRDLCAweDAzLCAweDMwLCAweDA5LCAweENBLCAweDI0LCAweDAwLCAweEZGLCAweDAwLCAweEVDLCAweDAzLCAweEYwLAorMHgwRiwgMHhDMCwgMHgyNywgMHgwMCwgMHhERiwgMHgwMCwgMHhDRCwgMHgwMywgMHgzMCwgMHgwOSwgMHhDMCwgMHgyNCwgMHgwMCwKKzB4RjMsIDB4MDAsIDB4NEQsIDB4MDIsIDB4MzAsIDB4MEYsIDB4QzAsIDB4MDQsIDB4NDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweEI4LCAweDFGLCAweDAwLCAweDdGLCAweDAwLCAweEVELCAweDAyLCAweEYwLAorMHgwNywgMHhDMCwgMHgyRiwgMHgwMCwgMHhGRiwgMHgwMCwgMHhGQywgMHgwMywgMHhGMCwgMHgwRSwgMHhDMCwgMHgyRiwgMHgwMCwKKzB4RkYsIDB4MDAsIDB4RkMsIDB4MDMsIDB4RjAsIDB4MEEsIDB4QzAsIDB4MkYsIDB4MDAsIDB4RkYsIDB4MDAsIDB4RkMsIDB4MDEsCisweEYwLCAweDBGLCAweEMwLCAweDE3LCAweDYwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMywgMHhBMCwgMHg3RiwgMHgwMCwgMHhGNywgMHgwQywgMHhDQywgMHgxQiwgMHg3MCwgMHgzQSwgMHhDMCwgMHhFQywgMHgwMCwKKzB4QkIsIDB4MDQsIDB4RkMsIDB4MDMsIDB4MzAsIDB4MUUsIDB4QzAsIDB4M0UsIDB4MDAsIDB4QTcsIDB4MDEsIDB4OEMsIDB4MDYsCisweDMwLCAweDFCLCAweEMwLCAweDdFLCAweDEyLCAweEJGLCAweDA0LCAweENDLCAweDA3LCAweEYwLCAweDAzLCAweEM0LCAweDBFLAorMHgwMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwOCwgMHg3NywgMHgwMCwKKzB4RjEsIDB4OEUsIDB4QzQsIDB4M0IsIDB4MTAsIDB4NDksIDB4NDAsIDB4MjQsIDB4MDAsIDB4OTEsIDB4MEUsIDB4RjQsIDB4MkYsCisweDUwLCAweDE5LCAweDQwLCAweEY0LCAweDAwLCAweDVELCAweDAxLCAweDQ0LCAweDUwLCAweDEwLCAweDE5LCAweDQwLCAweDM0LAorMHgwMCwgMHhDOSwgMHgxNCwgMHg0NCwgMHgwMywgMHhEMCwgMHgxOSwgMHg0MCwgMHgwNCwgMHgyMCwgMHgwQywgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTEsIDB4QTIsIDB4MzMsIDB4MjAsIDB4QzUsIDB4MDQsIDB4MDQsIDB4MTMsCisweDUwLCAweDQ5LCAweDQwLCAweDMwLCAweDAxLCAweDA5LCAweDEwLCAweDE0LCAweDAzLCAweDEyLCAweDA4LCAweDYwLCAweDMyLAorMHgwMiwgMHhDRCwgMHg4MCwgMHg0NCwgMHgxMCwgMHgxMCwgMHgwOCwgMHg0MCwgMHgzMywgMHgwMCwgMHg4RCwgMHgwQywgMHgwNCwKKzB4MDMsIDB4RDAsIDB4MDgsIDB4NDAsIDB4NDcsIDB4ODAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAzLCAweEE4LCAweDM1LCAweDAwLCAweEQxLCAweDAwLCAweDQ2LCAweDAzLCAweDEwLCAweDE5LCAweDQxLCAweDcwLAorMHgwMCwgMHgxMSwgMHgwMSwgMHg3NCwgMHgwMywgMHgxMCwgMHgxOSwgMHg0MCwgMHgzNCwgMHgwMCwgMHhERCwgMHg4NCwgMHg0NiwKKzB4ODQsIDB4MTAsIDB4MDksIDB4NDAsIDB4MzUsIDB4MDAsIDB4OTksIDB4MDAsIDB4NDQsIDB4MDMsIDB4RDAsIDB4MTksIDB4NDEsCisweDBELCAweDIwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweEE4LCAweDM2LAorMHgwOCwgMHhENywgMHgwMCwgMHg0OCwgMHgwMywgMHg3MCwgMHgzOSwgMHhDMCwgMHg0NCwgMHgwMSwgMHg5QiwgMHgwNSwgMHg1QywKKzB4ODMsIDB4MzAsIDB4MTksIDB4QzAsIDB4MzYsIDB4ODAsIDB4RDcsIDB4MDAsIDB4NEMsIDB4NEUsIDB4MzEsIDB4MDgsIDB4QzAsCisweDM3LCAweDAyLCAweDlGLCAweDAwLCAweDRELCAweDA3LCAweEYwLCAweDMwLCAweEMwLCAweDAzLCAweDIwLCAweDBFLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNywgMHg4MiwgMHgzRCwgMHgxMCwgMHhFRiwgMHgwMCwgMHhGQywKKzB4MDMsIDB4RjAsIDB4MEIsIDB4QzAsIDB4MkYsIDB4MDAsIDB4QkYsIDB4ODAsIDB4RkMsIDB4NDMsIDB4RjAsIDB4MEIsIDB4QzAsCisweDNGLCAweEE0LCAweEZGLCAweDAxLCAweEZELCAweDAzLCAweEYwLCAweDBGLCAweEMyLCAweDNFLCAweDAwLCAweEVGLCAweDAyLAorMHhGQywgMHg4RiwgMHhGMCwgMHgwMywgMHhDMCwgMHgxRSwgMHgwMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDIsIDB4MDgsIDB4MzUsIDB4MDAsIDB4REYsIDB4MDAsIDB4N0MsIDB4MDMsIDB4NzAsIDB4MjEsIDB4QzAsCisweDM1LCAweDAwLCAweDk3LCAweDA4LCAweDBDLCAweDAzLCAweDcwLCAweDAxLCAweEMwLCAweDM0LCAweDAyLCAweEQ3LCAweDEwLAorMHg0QywgMHgwMCwgMHhCMSwgMHgwRCwgMHhDMCwgMHgzNywgMHgwNCwgMHhEMywgMHgxOCwgMHg0NCwgMHgwMywgMHhGMCwgMHgyMSwKKzB4QzAsIDB4MEIsIDB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTMsIDB4QTAsCisweDcwLCAweDAwLCAweEZELCAweDBGLCAweEY0LCAweDAzLCAweEQwLCAweDBDLCAweDYwLCAweDM0LCAweDAwLCAweDkxLCAweDAzLAorMHhDNCwgMHg0RiwgMHgzMCwgMHhDMCwgMHhDMCwgMHgzQywgMHgwOCwgMHhDMSwgMHgxMSwgMHgyQywgMHgwMCwgMHgxMCwgMHg4RCwKKzB4NDAsIDB4RjQsIDB4MDAsIDB4RDUsIDB4MDAsIDB4NDQsIDB4MEIsIDB4RDAsIDB4QjEsIDB4NDAsIDB4NEMsIDB4MDAsIDB4MDIsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweEEwLCAweDcyLCAweDAwLCAweENELCAweDAzLAorMHg3NCwgMHgwNywgMHg1MCwgMHgwOCwgMHg0NCwgMHgzMSwgMHgwMCwgMHgwNSwgMHgxMiwgMHgxNCwgMHgwQiwgMHhEMCwgMHgxOCwKKzB4NDAsIDB4RjAsIDB4MjAsIDB4QzUsIDB4MDAsIDB4MjQsIDB4MDIsIDB4RDIsIDB4MDAsIDB4MDYsIDB4RjMsIDB4MDAsIDB4ODksCisweDAxLCAweDA0LCAweDM3LCAweEQwLCAweDkwLCAweDQwLCAweDFELCAweDAwLCAweDBBLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwNiwgMHg4MiwgMHg3OCwgMHgwNCwgMHhFRCwgMHg4MSwgMHhCNCwgMHg0RiwgMHhEMCwgMHgxQiwKKzB4NDgsIDB4N0QsIDB4MDgsIDB4RTEsIDB4MDksIDB4OTUsIDB4MDcsIDB4MDAsIDB4OUIsIDB4NDAsIDB4NzgsIDB4MDAsIDB4NjEsCisweDAxLCAweEU0LCAweDA0LCAweDEwLCAweDlBLCAweDQwLCAweDc4LCAweDA2LCAweEFELCAweDAxLCAweDg0LCAweDA3LCAweEQ5LAorMHgxQSwgMHg0OCwgMHgxOCwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNiwKKzB4MTAsIDB4MzAsIDB4MDAsIDB4Q0QsIDB4MDAsIDB4MzQsIDB4MDMsIDB4NzAsIDB4MDgsIDB4NDAsIDB4MzEsIDB4MDAsIDB4NTcsCisweDAwLCAweDFDLCAweDAzLCAweEYwLCAweDg4LCAweEMwLCAweDMwLCAweDAwLCAweEM3LCAweDAwLCAweDJDLCAweDAwLCAweEIwLAorMHgwMCwgMHhDMCwgMHgzNywgMHgwMCwgMHg4QiwgMHgwQywgMHgwQywgMHgwMywgMHhGMCwgMHgwQywgMHhDMCwgMHg0OSwgMHg0OCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4QjAsIDB4M0QsIDB4MDAsIDB4RkYsCisweDAyLCAweEZDLCAweDRCLCAweEYwLCAweDhCLCAweDgwLCAweDNBLCAweDAyLCAweEZGLCAweDAwLCAweEFDLCAweDYzLCAweEYxLAorMHg4QiwgMHhEMCwgMHgzQiwgMHgwMCwgMHhGRiwgMHg0OCwgMHhGQywgMHgwMCwgMHhGMCwgMHgwQSwgMHhDMiwgMHgzRiwgMHgwMCwKKzB4OTcsIDB4MjgsIDB4RkQsIDB4MDMsIDB4RjAsIDB4OEUsIDB4QzAsIDB4MDksIDB4NjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE1LCAweEEwLCAweDM3LCAweDAwLCAweERGLCAweDBDLCAweDdDLCAweDBCLCAweEYwLAorMHgwOSwgMHhDMCwgMHgzNCwgMHgwMCwgMHg1NywgMHgwMSwgMHg0QywgMHgxQiwgMHhGMSwgMHgwOSwgMHhDMCwgMHgzNCwgMHgxMiwKKzB4Q0YsIDB4MDAsIDB4NEMsIDB4MDMsIDB4QjAsIDB4MDEsIDB4QzAsIDB4NzYsIDB4OTAsIDB4REIsIDB4MDAsIDB4N0MsIDB4ODMsCisweDMwLCAweDA1LCAweEMwLCAweDU0LCAweDAwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgxMiwgMHg4OCwgMHgzOSwgMHgwMCwgMHhFRCwgMHgwNCwgMHhCNCwgMHgxMywgMHhEMCwgMHgwRiwgMHg0NCwgMHgzOCwgMHgwMCwKKzB4RTEsIDB4MDAsIDB4ODQsIDB4MzMsIDB4RDgsIDB4MEEsIDB4NDIsIDB4MzgsIDB4MDAsIDB4RUQsIDB4QTAsIDB4ODQsIDB4ODEsCisweDE0LCAweDBFLCAweDQ0LCAweDM5LCAweDAwLCAweEU1LCAweDAwLCAweEI0LCAweDAzLCAweDUwLCAweDBFLCAweDQwLCAweDQ4LAorMHgyMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHgwMiwgMHg3OSwgMHgwMCwKKzB4RUQsIDB4MDUsIDB4QjQsIDB4MDcsIDB4RDAsIDB4MUEsIDB4NTQsIDB4N0MsIDB4MDAsIDB4NDUsIDB4MDEsIDB4ODQsIDB4MTcsCisweEMwLCAweDEzLCAweDQ4LCAweDc4LCAweDAxLCAweEVDLCAweDAxLCAweEM1LCAweDA1LCAweDEyLCAweDE2LCAweDQwLCAweDdELAorMHg4MCwgMHhFMSwgMHhBMSwgMHhGNCwgMHg4RiwgMHgxMSwgMHgxQywgMHg2MCwgMHgwQywgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4MjgsIDB4MzMsIDB4MDAsIDB4Q0QsIDB4MDAsIDB4MzQsIDB4MDMsCisweEQ4LCAweDJDLCAweDQwLCAweDMwLCAweDAwLCAweEMxLCAweDAzLCAweDA0LCAweDAzLCAweEQwLCAweDgwLCAweDQwLCAweDMwLAorMHgyMCwgMHhDRCwgMHgwNSwgMHgwNCwgMHgxNSwgMHgxMCwgMHgwQywgMHg0MCwgMHgyMSwgMHgwMCwgMHhDNSwgMHgwOCwgMHg3NCwKKzB4MDYsIDB4NTAsIDB4MkMsIDB4NDEsIDB4NDgsIDB4MjAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDE3LCAweEE4LCAweDE1LCAweDAwLCAweDVGLCAweDAwLCAweDdDLCAweDAxLCAweEQwLCAweDQ3LCAweEMwLCAweDk4LAorMHgwMCwgMHg3NywgMHg0OSwgMHg0QywgMHgwMSwgMHhGMCwgMHhBNywgMHhDOCwgMHgxNCwgMHgwMCwgMHg3RiwgMHgwNywgMHg4QywKKzB4MTUsIDB4MzAsIDB4NDcsIDB4QzAsIDB4NTUsIDB4MDAsIDB4NUIsIDB4MjEsIDB4N0MsIDB4MDEsIDB4MTAsIDB4MjcsIDB4RDEsCisweDVDLCAweDIwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDAwLCAweDA3LAorMHgwMCwgMHgxRiwgMHg4MiwgMHg3QywgMHgwMCwgMHhGMSwgMHgwMSwgMHhDMSwgMHgwNywgMHgwMSwgMHgxRiwgMHhBOCwgMHg3RCwKKzB4MDgsIDB4RDAsIDB4MjEsIDB4RDQsIDB4ODcsIDB4MDAsIDB4MUYsIDB4NDAsIDB4N0MsIDB4MDAsIDB4NzAsIDB4MjEsIDB4QzAsCisweDA1LCAweDAyLCAweDFGLCAweDAwLCAweDdDLCAweDAwLCAweEYwLCAweDIxLCAweEMwLCAweDRCLCAweDAwLCAweDBDLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHgyNywgMHgwMSwgMHg5RiwgMHgwMywgMHgzQywKKzB4MDIsIDB4MzAsIDB4MDksIDB4QzAsIDB4MjQsIDB4MDgsIDB4OTcsIDB4MDEsIDB4N0MsIDB4MTIsIDB4RjIsIDB4MjksIDB4QzAsCisweDI2LCAweDAwLCAweDlGLCAweDA4LCAweDVDLCAweDAyLCAweDM0LCAweDA5LCAweEMwLCAweDI0LCAweDAwLCAweDhGLCAweDA5LAorMHg0RCwgMHgwMiwgMHgzMCwgMHg0OCwgMHhDMCwgMHg0MCwgMHgyMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDEsIDB4MjAsIDB4MjYsIDB4MDAsIDB4OUQsIDB4MDMsIDB4NzQsIDB4MEEsIDB4MTAsIDB4MDksIDB4NDAsCisweDI0LCAweDAwLCAweDkxLCAweDAxLCAweDc0LCAweDFBLCAweEQwLCAweDA4LCAweDQxLCAweEU0LCAweDAxLCAweDhELCAweDYwLAorMHg0NCwgMHgwMiwgMHgxMiwgMHg2OCwgMHg0MCwgMHgyNCwgMHgwMywgMHg5RCwgMHgwMiwgMHg0NCwgMHgwMiwgMHgzMCwgMHgyOSwKKzB4NTAsIDB4MDQsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4QTAsCisweDI0LCAweDAwLCAweDlELCAweDAwLCAweDc0LCAweDQ2LCAweDUwLCAweDA4LCAweDQyLCAweDI0LCAweDAwLCAweDk1LCAweDA4LAorMHg3NCwgMHg4MiwgMHhEMCwgMHgwOSwgMHg0MCwgMHgyNywgMHgwMiwgMHg5RCwgMHgwMCwgMHg1NCwgMHgwMiwgMHg1MiwgMHgwRCwKKzB4NDAsIDB4MjQsIDB4MDAsIDB4OUQsIDB4MDIsIDB4NDQsIDB4MEEsIDB4MTAsIDB4MDksIDB4NDAsIDB4NjAsIDB4MDAsIDB4MDIsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDIwLCAweDIwLCAweDAwLCAweENELCAweDE0LAorMHgzNCwgMHg1MiwgMHg1NCwgMHgwOCwgMHg0MCwgMHgyNCwgMHgwQSwgMHhDMSwgMHg5NCwgMHgzMCwgMHhEMiwgMHhEMCwgMHgwOSwKKzB4NDAsIDB4MjEsIDB4MDAsIDB4OEQsIDB4MDAsIDB4NDQsIDB4MDIsIDB4MTksIDB4MDksIDB4NzAsIDB4MjAsIDB4MTAsIDB4OEQsCisweDA4LCAweDA0LCAweDAyLCAweDE0LCAweDRDLCAweDQxLCAweDQwLCAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgxRCwgMHhCMCwgMHgwNywgMHgwMCwgMHgxRiwgMHgwNCwgMHg3QywgMHgxMCwgMHg3MCwgMHgwMSwKKzB4RDAsIDB4ODQsIDB4MDAsIDB4MTcsIDB4MDQsIDB4NzgsIDB4MTAsIDB4RjAsIDB4MDEsIDB4QzQsIDB4MDcsIDB4MDUsIDB4MUQsCisweDQwLCAweDVDLCAweDAwLCAweDMwLCAweDAxLCAweEMwLCAweDA0LCAweDAwLCAweDFGLCAweDE2LCAweDRDLCAweDAwLCAweDMwLAorMHg0MSwgMHhDMCwgMHg3NCwgMHhDMCwgMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOSwKKzB4QjAsIDB4MjcsIDB4MDAsIDB4OUYsIDB4MTQsIDB4N0MsIDB4NTIsIDB4QjEsIDB4NEIsIDB4QzEsIDB4MkIsIDB4MDEsIDB4QkYsCisweDk0LCAweDdDLCAweDAyLCAweEYyLCAweDBBLCAweEMwLCAweDI2LCAweDEwLCAweEZFLCAweDAwLCAweEJDLCAweDUzLCAweEYwLAorMHgwQSwgMHhDMCwgMHgyQiwgMHgxNSwgMHhCRiwgMHgwNCwgMHhCQywgMHg1MiwgMHg3MCwgMHgwQiwgMHhDMCwgMHg2NywgMHg2MCwKKzB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTksIDB4QTAsIDB4MkYsIDB4MDAsIDB4QkYsCisweDAxLCAweENDLCAweDVFLCAweEUwLCAweDI4LCAweEMwLCAweEE3LCAweDAwLCAweEI3LCAweDA5LCAweEVDLCAweDEyLCAweDcwLAorMHgwQSwgMHhDMCwgMHgyRiwgMHgwNCwgMHhBRCwgMHgwMCwgMHg0QywgMHgwMiwgMHgzMCwgMHgwQSwgMHhDMCwgMHhBRSwgMHgwMCwKKzB4QkIsIDB4MDAsIDB4Q0QsIDB4MDIsIDB4QjAsIDB4MEIsIDB4QzAsIDB4NjcsIDB4MDAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFDLCAweDA4LCAweDA3LCAweDAwLCAweDFELCAweDBGLCAweDQ0LCAweDA4LCAweEQwLAorMHgwMSwgMHg0MCwgMHgwNywgMHgwMSwgMHgxMSwgMHgwQiwgMHg0NCwgMHgwMCwgMHgxMCwgMHgwMSwgMHg0MCwgMHg4NywgMHgwMCwKKzB4MTksIDB4MDAsIDB4NDQsIDB4MTAsIDB4MTAsIDB4MDEsIDB4NDAsIDB4MDQsIDB4MDEsIDB4MTEsIDB4MDAsIDB4NDQsIDB4MDAsCisweDEwLCAweDAxLCAweDQwLCAweDczLCAweDIwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgxMCwgMHhBMCwgMHgyMywgMHgwMCwgMHg4RCwgMHgxMCwgMHgwNCwgMHgxMiwgMHhEMCwgMHg0OCwgMHg0MCwgMHg2NywgMHgwMCwKKzB4ODUsIDB4MDQsIDB4MjQsIDB4MEIsIDB4NTAsIDB4MDgsIDB4NDAsIDB4MzMsIDB4MDAsIDB4OTksIDB4MDAsIDB4MDQsIDB4NDIsCisweDEwLCAweDA5LCAweDQwLCAweDIyLCAweDAxLCAweDg5LCAweDAwLCAweDI0LCAweDAyLCAweDkwLCAweDA4LCAweDQwLCAweDQzLAorMHg4MCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHhBOCwgMHgyNSwgMHgwMCwKKzB4OUQsIDB4NjAsIDB4NDQsIDB4MDIsIDB4QzgsIDB4MDksIDB4NDEsIDB4MjcsIDB4MDIsIDB4OTEsIDB4MDAsIDB4NjQsIDB4MDIsCisweDEwLCAweDA5LCAweDQ0LCAweDI3LCAweDAwLCAweDk5LCAweDAwLCAweDAwLCAweDAyLCAweDExLCAweDA5LCAweDAwLCAweDY0LAorMHgwMCwgMHg5MSwgMHgwMCwgMHg0NCwgMHgwMiwgMHgxMCwgMHgwOSwgMHg0MCwgMHg2MywgMHgyMCwgMHgwNiwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4MDgsIDB4MjUsIDB4MDAsIDB4OUYsIDB4MDAsIDB4NEMsIDB4MDIsCisweEMxLCAweDM5LCAweEM4LCAweDY3LCAweDAwLCAweDk1LCAweDUxLCAweDZDLCAweDAyLCAweDcwLCAweDc5LCAweEMwLCAweDI3LAorMHgwMCwgMHg5QiwgMHgwMSwgMHg0QywgMHgwRSwgMHgzMCwgMHgxOSwgMHhDMCwgMHgyNiwgMHgwMCwgMHg5QiwgMHgwMCwgMHg0QywKKzB4MDYsIDB4QjAsIDB4MDksIDB4QzEsIDB4MTcsIDB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDE0LCAweDAwLCAweDI1LCAweDAwLCAweDlGLCAweDAwLCAweDdELCAweDAyLCAweEYwLCAweDI5LCAweEMwLCAweDY3LAorMHgwMCwgMHg4RiwgMHgwNSwgMHgxQywgMHgwMiwgMHhGMCwgMHg5OSwgMHhDNCwgMHgyNywgMHgyNCwgMHg5QiwgMHgwMywgMHg3RCwKKzB4MTIsIDB4RjQsIDB4OTksIDB4QzMsIDB4MjcsIDB4MDAsIDB4OUYsIDB4MTMsIDB4N0MsIDB4RDYsIDB4RjAsIDB4NDksIDB4QzEsCisweDUzLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDA4LCAweDA0LAorMHgwMCwgMHgwRiwgMHgwNCwgMHg3QywgMHgwMCwgMHhGNCwgMHgyMSwgMHhDMiwgMHgwNCwgMHg0MCwgMHgxMywgMHgwMCwgMHg2QywKKzB4NDAsIDB4RjAsIDB4MDEsIDB4QzAsIDB4MDYsIDB4MDAsIDB4MUYsIDB4MDIsIDB4NUMsIDB4MDgsIDB4MzEsIDB4MDEsIDB4QzAsCisweDA0LCAweDAwLCAweDFGLCAweDAwLCAweDRDLCAweDAwLCAweDMwLCAweDAxLCAweEMwLCAweDUwLCAweDIwLCAweDA0LCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgyMCwgMHg1NCwgMHgwNCwgMHg3RCwgMHgwMCwgMHhGNCwKKzB4NjEsIDB4MTAsIDB4MDUsIDB4QzAsIDB4MTIsIDB4MDAsIDB4NzEsIDB4MDcsIDB4QzQsIDB4MDksIDB4RDAsIDB4MjcsIDB4NDAsCisweDFDLCAweDAwLCAweDZELCAweDYwLCAweDQ0LCAweDAxLCAweDEyLCAweDM2LCAweDQxLCAweDFDLCAweDAxLCAweDdELCAweDQ3LAorMHhDNCwgMHg4NSwgMHg1MCwgMHgyNywgMHg0MCwgMHg1MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MTQsIDB4QTAsIDB4MzIsIDB4ODAsIDB4Q0QsIDB4MDAsIDB4MzQsIDB4MEYsIDB4MTAsIDB4MEMsIDB4NDAsCisweDMwLCAweDAwLCAweEMxLCAweDA3LCAweDI0LCAweDA5LCAweEQxLCAweEM0LCAweDQwLCAweEIzLCAweDAwLCAweDhELCAweDAwLAorMHgxNCwgMHgwMywgMHgxMCwgMHgwMCwgMHg0OCwgMHgzNSwgMHgwOSwgMHhERCwgMHgwMywgMHg0NSwgMHhBRiwgMHgxMCwgMHhBQywKKzB4NDAsIDB4NTAsIDB4MDAsIDB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4ODgsCisweDI4LCAweDAwLCAweDZELCAweDgyLCAweEI0LCAweDA3LCAweDEwLCAweERGLCAweDQwLCAweDNBLCAweDAzLCAweEUxLCAweDAwLAorMHg4NCwgMHgwMywgMHhEMCwgMHgxMywgMHg0OCwgMHgzOSwgMHg4MCwgMHg3RCwgMHg4MCwgMHhENCwgMHgxMywgMHgxQywgMHgwMiwKKzB4NDAsIDB4MzksIDB4MTAsIDB4RUQsIDB4MjAsIDB4QzQsIDB4MDMsIDB4NDEsIDB4MUMsIDB4NDAsIDB4MTAsIDB4MDAsIDB4MDIsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDEwLCAweDY4LCAweDAwLCAweEVGLCAweDAxLAorMHgzQywgMHgwNSwgMHgzMCwgMHhERSwgMHhDMCwgMHg3QywgMHgwMCwgMHg3MywgMHgwMSwgMHhBQywgMHgwNywgMHhGMCwgMHgxRSwKKzB4QzAsIDB4NUIsIDB4MDAsIDB4QUYsIDB4MDEsIDB4OUMsIDB4MTcsIDB4MzAsIDB4MTIsIDB4RDAsIDB4NzksIDB4OTAsIDB4QkYsCisweDAxLCAweENDLCAweDA3LCAweDIwLCAweDFFLCAweEMwLCAweDUwLCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHhBOCwgMHgyNSwgMHgwMCwgMHhERiwgMHgwMCwgMHg3QywgMHgwMSwgMHgzMSwgMHgwRCwKKzB4QzgsIDB4QjcsIDB4MDUsIDB4NUYsIDB4MjAsIDB4NzAsIDB4MDMsIDB4RjEsIDB4MDEsIDB4QzAsIDB4MTYsIDB4MDAsIDB4NUYsCisweDgwLCAweDJDLCAweDZCLCAweEYwLCAweDAxLCAweEQwLCAweDM2LCAweDAwLCAweDlGLCAweDAwLCAweDdDLCAweDAxLCAweEYwLAorMHgwRCwgMHhEMCwgMHg0MywgMHg2MCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwKKzB4QTAsIDB4NkYsIDB4MDIsIDB4RjcsIDB4MDksIDB4RkMsIDB4MDcsIDB4RjAsIDB4MUYsIDB4QzAsIDB4NzgsIDB4MDAsIDB4RkIsCisweDAxLCAweEZDLCAweDA3LCAweEYwLCAweDE3LCAweEMwLCAweDdFLCAweDAwLCAweEJCLCAweDAxLCAweENDLCAweDE3LCAweEIwLAorMHg5NywgMHhDMCwgMHg3QywgMHgwOCwgMHg3RiwgMHgwMSwgMHhDQywgMHgwNSwgMHhGMSwgMHgxRiwgMHhDMCwgMHgwQiwgMHgwMCwKKzB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTUsIDB4ODgsIDB4MjksIDB4MDAsIDB4NkQsCisweDQ4LCAweEIwLCAweDAzLCAweEQwLCAweDRFLCAweEMwLCAweDNCLCAweDAxLCAweDYxLCAweDIyLCAweEI0LCAweDhCLCAweEQwLAorMHg0NiwgMHg0MCwgMHhCOCwgMHgwOCwgMHg3MSwgMHgwMCwgMHhGQywgMHgxMywgMHgxMCwgMHhDNiwgMHg0MCwgMHgzOCwgMHgwMCwKKzB4NkQsIDB4NDgsIDB4ODQsIDB4MDAsIDB4RDAsIDB4NDIsIDB4NDAsIDB4NTcsIDB4MjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDAwLCAweDI5LCAweDIwLCAweEU1LCAweDQwLCAweEI0LCAweDAzLCAweEQwLAorMHgwRiwgMHg0MCwgMHgzQywgMHgxMCwgMHhFOSwgMHgwOCwgMHhCNCwgMHgwMywgMHhEMCwgMHgwNywgMHg0MSwgMHgxQiwgMHgwMiwKKzB4QjksIDB4MDgsIDB4QTQsIDB4NzMsIDB4OTIsIDB4MDYsIDB4NDEsIDB4MTgsIDB4MDAsIDB4MkQsIDB4MDAsIDB4QTQsIDB4NjEsCisweEQwLCAweDBFLCAweDYwLCAweDIzLCAweDAyLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwNiwgMHgyOCwgMHgyMywgMHgwMCwgMHg5RCwgMHgwMCwgMHgzNCwgMHgwMiwgMHhEMCwgMHhFQywgMHg2MCwgMHhCMiwgMHgwNCwKKzB4MDksIDB4MDEsIDB4MzQsIDB4MDMsIDB4RDAsIDB4MTAsIDB4NDAsIDB4MTAsIDB4MDAsIDB4NDEsIDB4MjMsIDB4MzYsIDB4MEYsCisweDEyLCAweDM0LCAweDQxLCAweDIwLCAweDIwLCAweDBELCAweDA5LCAweDYwLCAweDA0LCAweEQwLCAweDAwLCAweDQwLCAweDFCLAorMHgyMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1NSwgMHhBOCwgMHgyNSwgMHgwMCwKKzB4OTcsIDB4MDAsIDB4NzQsIDB4MDIsIDB4RjAsIDB4MEYsIDB4QzAsIDB4M0MsIDB4MDAsIDB4OUIsIDB4MDIsIDB4N0MsIDB4MDMsCisweEYwLCAweDA1LCAweDgwLCAweDM3LCAweDAwLCAweDRCLCAweDA1LCAweEVDLCAweDA3LCAweEIwLCAweDM0LCAweEQwLCAweDA0LAorMHg4MCwgMHhERiwgMHgwMSwgMHg2RCwgMHgwNiwgMHhEMCwgMHgwRCwgMHg0OCwgMHg1NywgMHgyMCwgMHgwNiwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjksIDB4MDAsIDB4MjcsIDB4MDAsIDB4MUYsIDB4MDAsIDB4N0MsIDB4MDIsCisweEYwLCAweDBELCAweEMwLCAweDM3LCAweDA4LCAweDk3LCAweDBFLCAweDc0LCAweDBCLCAweEUwLCAweDAxLCAweEEwLCAweDM2LAorMHgxMCwgMHg1RiwgMHgwMiwgMHg1QywgMHgxMywgMHhGMCwgMHgwNSwgMHhDMCwgMHg4NywgMHgwQSwgMHhERiwgMHgwMiwgMHg1QywKKzB4MDIsIDB4RjAsIDB4MEQsIDB4QzgsIDB4MjcsIDB4MDAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDgxLCAweDA4LCAweEFGLCAweDAwLCAweDNGLCAweDAwLCAweEVDLCAweDAwLCAweEYwLCAweDBGLCAweEMwLCAweDNFLAorMHgwMCwgMHgzRiwgMHgwMCwgMHhGQywgMHgwMywgMHhGMSwgMHgwNywgMHhDOCwgMHgxNywgMHgyMCwgMHgzQiwgMHgxOCwgMHhDQywKKzB4MDMsIDB4QjIsIDB4MDcsIDB4RDAsIDB4MEUsIDB4MDAsIDB4QkYsIDB4MDEsIDB4RkMsIDB4MDIsIDB4MzAsIDB4MjMsIDB4QzEsCisweDA3LCAweDIwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgxLCAweDAxLCAweDI2LAorMHgyMCwgMHgxRCwgMHgwMSwgMHg0NCwgMHgwNCwgMHhEMCwgMHgwQywgMHhDMCwgMHgzNiwgMHgwMCwgMHgxRCwgMHgwMSwgMHg3NCwKKzB4MEYsIDB4RDAsIDB4MzEsIDB4NDIsIDB4RDcsIDB4MDAsIDB4NUQsIDB4NTIsIDB4MDQsIDB4MDMsIDB4MTAsIDB4MzUsIDB4NDAsCisweDQ0LCAweDA0LCAweDFELCAweDAzLCAweDc0LCAweDhDLCAweDEwLCAweDIxLCAweDQwLCAweDg3LCAweDAyLCAweDA4LCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHhBMCwgMHgyNiwgMHg4MCwgMHg5RCwgMHgzMSwgMHg2NCwKKzB4MEMsIDB4RDAsIDB4MEQsIDB4NDAsIDB4MzYsIDB4MDAsIDB4OUQsIDB4MDEsIDB4NzQsIDB4MDcsIDB4NTAsIDB4MTUsIDB4NDEsCisweDc3LCAweDAwLCAweDVELCAweDAwLCAweDQ3LCAweDAzLCAweDkwLCAweDFELCAweDQxLCAweDY0LCAweDAwLCAweDVELCAweDk0LAorMHg3NCwgMHg0NiwgMHgxMCwgMHgyRCwgMHg0OCwgMHgwNywgMHgwMCwgMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MTAsIDB4MjAsIDB4MjAsIDB4MDAsIDB4MEQsIDB4MDAsIDB4MDQsIDB4MDIsIDB4RDAsIDB4MEQsIDB4NDAsCisweDMyLCAweDAwLCAweDhELCAweDIwLCAweDM0LCAweDgzLCAweEQwLCAweDAwLCAweDQwLCAweDIzLCAweDAwLCAweDRELCAweDAwLAorMHg0NiwgMHgwMywgMHgxMCwgMHgwNCwgMHg0MCwgMHgyMCwgMHgwMCwgMHg4RCwgMHgwMCwgMHgyNiwgMHg4MiwgMHgxQywgMHgwMCwKKzB4NDAsIDB4NDMsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MTAsCisweDI0LCAweDAwLCAweDlGLCAweDgwLCAweDZDLCAweDAwLCAweEYxLCAweDBGLCAweEMwLCAweDNFLCAweDAwLCAweDlGLCAweDAwLAorMHg3QywgMHgwMywgMHg3MCwgMHgwNSwgMHhDNCwgMHgxNywgMHgwMCwgMHgxQiwgMHgwMCwgMHhDQywgMHgwMywgMHhCNCwgMHgwNSwKKzB4QzAsIDB4MDQsIDB4MDAsIDB4NEYsIDB4MDAsIDB4N0MsIDB4MDIsIDB4MzAsIDB4MDEsIDB4QzQsIDB4MDcsIDB4NDAsIDB4MDgsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweEIwLCAweDJGLCAweDAwLCAweEJFLCAweDAwLAorMHhGQywgMHgwMiwgMHhGMCwgMHgwRSwgMHhDMCwgMHgzRiwgMHgwMCwgMHhCRiwgMHgwMCwgMHhGQywgMHgwMiwgMHhGMCwgMHgwMiwKKzB4QzAsIDB4M0YsIDB4MjAsIDB4N0YsIDB4NDAsIDB4RkMsIDB4MDMsIDB4RjAsIDB4MDYsIDB4QzAsIDB4MkYsIDB4MDAsIDB4M0YsCisweDAwLCAweEZDLCAweDAwLCAweEYyLCAweDAzLCAweEUwLCAweDE3LCAweDYwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHhBMCwgMHg3RiwgMHgwMCwgMHhCRiwgMHgwMSwgMHhFQywgMHgzMiwgMHhGMiwgMHhDNywKKzB4QzgsIDB4NUYsIDB4MDIsIDB4MzMsIDB4QTEsIDB4RkMsIDB4MDcsIDB4MzAsIDB4NkIsIDB4QzgsIDB4M0YsIDB4MDgsIDB4QjMsCisweDAwLCAweEVDLCAweDA0LCAweDEwLCAweDFCLCAweEM4LCAweDFGLCAweDAzLCAweEZELCAweDA5LCAweENDLCAweDgyLCAweDMyLAorMHgxRiwgMHhDNiwgMHgwRiwgMHgwMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwKKzB4MDgsIDB4N0YsIDB4MDAsIDB4REQsIDB4ODEsIDB4NzQsIDB4MzIsIDB4RDIsIDB4QzUsIDB4NDAsIDB4MDcsIDB4MTEsIDB4RDEsCisweDAxLCAweEY0LCAweDA3LCAweDEwLCAweDY5LCAweDQ4LCAweEZGLCAweDAwLCAweDk1LCAweDAzLCAweDc0LCAweDA0LCAweDEwLAorMHgxRCwgMHg0MCwgMHg5NywgMHgwMSwgMHhFRCwgMHgwNCwgMHg0NCwgMHgwRSwgMHgxMCwgMHgxRiwgMHg0MCwgMHgwRiwgMHg2MCwKKzB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTEsIDB4QTAsIDB4MzMsIDB4MDAsIDB4Q0QsCisweDAwLCAweDI0LCAweDAzLCAweEQwLCAweDQ0LCAweDQwLCAweDM3LCAweDAxLCAweEM1LCAweDAxLCAweDE0LCAweDgzLCAweDEwLAorMHgyOCwgMHg0MCwgMHgzMywgMHgwQSwgMHgwMSwgMHgwOCwgMHg3NCwgMHgwMCwgMHgxMCwgMHgwQywgMHg0MCwgMHg5MywgMHgwMCwKKzB4Q0QsIDB4MDAsIDB4MTQsIDB4MjIsIDB4MUEsIDB4MEMsIDB4NDAsIDB4NEYsIDB4ODAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweDg4LCAweDM1LCAweDAwLCAweERELCAweDAxLCAweDc0LCAweDgyLCAweEQwLAorMHg2NSwgMHg0MCwgMHgyNywgMHgwMCwgMHhEMCwgMHgwMSwgMHg3NCwgMHgwMywgMHg1MCwgMHgwRCwgMHg0MiwgMHgzNywgMHgwOCwKKzB4OTUsIDB4MjAsIDB4NzQsIDB4MDQsIDB4MTAsIDB4MUQsIDB4NDIsIDB4MzcsIDB4MDksIDB4REMsIDB4MDAsIDB4NTQsIDB4MTMsCisweDEwLCAweDBELCAweDQwLCAweDBGLCAweDAwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMiwgMHhBOCwgMHgzNywgMHgwMCwgMHhERiwgMHgwNSwgMHg2QywgMHgwMiwgMHhGMCwgMHgwNSwgMHhDMCwgMHhCMywgMHgwMSwKKzB4RDcsIDB4MjEsIDB4M0MsIDB4MDMsIDB4MzQsIDB4MUQsIDB4QzAsIDB4MzcsIDB4MTAsIDB4OTMsIDB4ODAsIDB4MjgsIDB4MEMsCisweDMyLCAweDFELCAweEMxLCAweDU3LCAweDAwLCAweERGLCAweDgwLCAweDVDLCAweDg2LCAweDMxLCAweDBELCAweEMwLCAweDBCLAorMHgyMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNywgMHg4MCwgMHgzRCwgMHgwMCwKKzB4RkUsIDB4MDAsIDB4RkMsIDB4MjMsIDB4RjEsIDB4MEYsIDB4QzAsIDB4QkYsIDB4NDAsIDB4RkYsIDB4MDAsIDB4RkMsIDB4MDMsCisweEEwLCAweDNCLCAweEMwLCAweDM3LCAweDA0LCAweEJGLCAweDIzLCAweEYwLCAweDAwLCAweEYwLCAweDBGLCAweEMxLCAweDFGLAorMHgwMCwgMHhGRiwgMHgwMCwgMHgyQywgMHgwMiwgMHhGMCwgMHgwRiwgMHhDNCwgMHgxRiwgMHgwMCwgMHgwNiwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDgsIDB4MzUsIDB4MDAsIDB4RDcsIDB4MDAsIDB4N0MsIDB4MDcsCisweDcwLCAweDBELCAweEMwLCAweDM0LCAweDAwLCAweEQzLCAweDgwLCAweDdDLCAweDQzLCAweDM0LCAweDBELCAweEMwLCAweDMzLAorMHg0MiwgMHgxMywgMHgwMCwgMHg0QywgMHgwMCwgMHhGMCwgMHgwRCwgMHhDMCwgMHhCNywgMHgwOCwgMHhDMywgMHgwMCwgMHg0QywKKzB4NDMsIDB4NzAsIDB4MEQsIDB4QzEsIDB4MEIsIDB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDEzLCAweEEwLCAweDM0LCAweDAwLCAweEQxLCAweDAwLCAweDc0LCAweDAzLCAweDEwLCAweDBELCAweDQwLCAweEI0LAorMHgwOCwgMHhEQSwgMHgwMSwgMHg3NCwgMHgwNywgMHgwMCwgMHg0RCwgMHg0NiwgMHhCRiwgMHgwMCwgMHhCMSwgMHgwMCwgMHg0NCwKKzB4NDgsIDB4RDAsIDB4MkQsIDB4NDAsIDB4NzcsIDB4MDQsIDB4RDEsIDB4MDAsIDB4NDAsIDB4MEYsIDB4MTAsIDB4M0QsIDB4NDAsCisweDZGLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA3LCAweEEwLCAweDMyLAorMHgwMCwgMHhDMSwgMHgwMCwgMHgyMCwgMHgwMiwgMHgxMCwgMHg5QywgMHg0MCwgMHg2MCwgMHgyNiwgMHhDNSwgMHgwMSwgMHgyNCwKKzB4MjcsIDB4MTAsIDB4MDgsIDB4MDAsIDB4RjMsIDB4MDAsIDB4ODksIDB4MDEsIDB4MzUsIDB4NDQsIDB4RDAsIDB4MkMsIDB4NDAsCisweDMzLCAweDAwLCAweEM1LCAweDI5LCAweDA0LCAweDJGLCAweDkwLCAweEJDLCAweDQyLCAweDBGLCAweDAwLCAweDA4LCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHg4MCwgMHg3OCwgMHgwMCwgMHhFMSwgMHgwMSwgMHhCNiwKKzB4MDYsIDB4MTAsIDB4MTQsIDB4NTgsIDB4NjgsIDB4MTAsIDB4RUQsIDB4NTEsIDB4MzQsIDB4MDcsIDB4MTAsIDB4MUEsIDB4NDIsCisweDdCLCAweDEwLCAweDg5LCAweDAxLCAweDk0LCAweDA0LCAweEQwLCAweDFFLCAweDQwLCAweDVCLCAweEMyLCAweEU1LCAweDAzLAorMHg4NCwgMHgwNiwgMHg5MCwgMHgxRSwgMHg0MCwgMHg3NywgMHgyMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MTIsIDB4MTAsIDB4MzAsIDB4MDAsIDB4QzcsIDB4MDAsIDB4N0UsIDB4MDIsIDB4NzAsIDB4MDQsIDB4QzAsCisweDIwLCAweDgyLCAweEM3LCAweDgwLCAweDJDLCAweDEzLCAweDM4LCAweDBDLCAweEUwLCAweDMzLCAweDAwLCAweDBCLCAweDkwLAorMHgxQywgMHgzMCwgMHhGMCwgMHgwQywgMHhDMCwgMHhCNywgMHhBMCwgMHhDNywgMHg4MCwgMHgwQywgMHgwMywgMHhGMCwgMHgwQywKKzB4QzAsIDB4NEIsIDB4NDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4QjgsCisweDc5LCAweEMwLCAweEZGLCAweDAwLCAweEY0LCAweDAyLCAweEY4LCAweDA3LCAweEM4LCAweDJCLCAweDA4LCAweEZCLCAweDA4LAorMHhGQywgMHgwNywgMHhGMCwgMHgwRiwgMHhDMCwgMHgzRiwgMHgwMCwgMHhCNywgMHgxMCwgMHhFQywgMHhBMCwgMHhGMCwgMHgwRiwKKzB4QzAsIDB4M0YsIDB4MDAsIDB4RkIsIDB4MDEsIDB4N0UsIDB4MjMsIDB4NzAsIDB4MUQsIDB4QzEsIDB4MEIsIDB4MjAsIDB4MDYsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE1LCAweEEwLCAweDM3LCAweDAwLCAweERGLCAweDAwLAorMHg3QywgMHg4MywgMHhGMCwgMHg4RCwgMHg4MCwgMHgyNywgMHgwMCwgMHhERiwgMHg0MCwgMHg3RSwgMHg4MywgMHhGMCwgMHg4OSwKKzB4NDAsIDB4MzcsIDB4MDMsIDB4OUYsIDB4MDAsIDB4NkUsIDB4MDAsIDB4RjAsIDB4MEQsIDB4QzAsIDB4MTcsIDB4MTAsIDB4RDMsCisweDAwLCAweDdFLCAweDAyLCAweEYwLCAweDBELCAweEMwLCAweDQwLCAweDIwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHg4OCwgMHgzOSwgMHgwMCwgMHhFRCwgMHgwMCwgMHhCNCwgMHgxQiwgMHhEMCwgMHgwRSwKKzB4NDAsIDB4MkIsIDB4MDAsIDB4RUQsIDB4MDAsIDB4QjYsIDB4MEIsIDB4RDAsIDB4NEEsIDB4NDQsIDB4M0IsIDB4MDIsIDB4OEQsCisweDA0LCAweDg0LCAweDgwLCAweEQwLCAweDBFLCAweDQwLCAweDkzLCAweDAxLCAweEUxLCAweDA0LCAweEI0LCAweDgyLCAweEQ4LAorMHg0QywgMHg0MCwgMHg0RCwgMHgyMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywKKzB4MDAsIDB4NzksIDB4MDIsIDB4RUQsIDB4MDEsIDB4OTQsIDB4MDcsIDB4RDAsIDB4MUUsIDB4NjAsIDB4NkIsIDB4MjQsIDB4RUQsCisweDAxLCAweEI0LCAweDk3LCAweEQwLCAweDVFLCAweDYyLCAweDdCLCAweDE4LCAweDJELCAweDAxLCAweEE0LCAweEM0LCAweEQyLAorMHgxRSwgMHg0MSwgMHhGQiwgMHgwMCwgMHhFMSwgMHgwRCwgMHhCNCwgMHgyRiwgMHhEMSwgMHgxRSwgMHg0MCwgMHgxMCwgMHgwMCwKKzB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4MjgsIDB4MzMsIDB4MTAsIDB4NEQsCisweDA3LCAweDc0LCAweDA3LCAweEQwLCAweDM4LCAweDQ5LCAweEUzLCAweDIwLCAweENELCAweDA1LCAweDM0LCAweDAzLCAweEQwLAorMHgxQywgMHg0MCwgMHgzMywgMHg4MCwgMHhDRCwgMHgwMCwgMHgwNCwgMHgwRiwgMHhEMCwgMHg3NCwgMHg0MCwgMHg2MywgMHg0MCwKKzB4QzEsIDB4MDAsIDB4MzQsIDB4MDcsIDB4RDAsIDB4MEMsIDB4NDAsIDB4NTksIDB4MjAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE3LCAweEE4LCAweDE1LCAweDAwLCAweDdGLCAweDEwLCAweDdDLCAweDQxLCAweEYwLAorMHgxNywgMHhDMCwgMHhERiwgMHgwMCwgMHg3RiwgMHgwNCwgMHgzQywgMHgwMSwgMHhGMCwgMHgwNSwgMHhDMCwgMHgxNywgMHgwMCwKKzB4N0YsIDB4MTEsIDB4QUMsIDB4MDUsIDB4RjAsIDB4MjcsIDB4QzgsIDB4REYsIDB4MDgsIDB4NTMsIDB4ODAsIDB4N0MsIDB4MDEsCisweEYxLCAweDA0LCAweEMwLCAweDVDLCAweDIwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgxMiwgMHgwMCwgMHg4NywgMHgwOCwgMHgxRiwgMHg4MCwgMHg3OCwgMHgwMCwgMHhGMCwgMHg4MSwgMHhDOCwgMHg4NywgMHgwMCwKKzB4MUMsIDB4MDAsIDB4N0MsIDB4MDgsIDB4RjAsIDB4ODEsIDB4ODIsIDB4MDIsIDB4MDAsIDB4MEYsIDB4MDAsIDB4N0MsIDB4MTAsCisweEYwLCAweDIxLCAweEMwLCAweDAzLCAweDAwLCAweDFGLCAweDAyLCAweDc0LCAweDAwLCAweEYwLCAweDAxLCAweEM4LCAweDRCLAorMHgwMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHg2NywgMHgwMiwKKzB4OUYsIDB4MDAsIDB4N0MsIDB4MDYsIDB4MzAsIDB4NDksIDB4QzAsIDB4NjcsIDB4MDQsIDB4OUYsIDB4QzgsIDB4N0MsIDB4MDIsCisweDMxLCAweDE5LCAweEMwLCAweDI3LCAweDAwLCAweDkzLCAweDAwLCAweDRELCAweDhBLCAweDMwLCAweDQ5LCAweEMwLCAweDY3LAorMHgwNCwgMHg5MywgMHgwOCwgMHg0QywgMHgyMiwgMHgzMCwgMHgwOSwgMHhDMCwgMHg0MCwgMHgyMCwgMHgwNCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MjAsIDB4RUUsIDB4MDAsIDB4OUQsIDB4NDAsIDB4RjAsIDB4MDYsCisweDEwLCAweDBCLCAweDQwLCAweEE3LCAweDAyLCAweDlELCAweDAxLCAweEY0LCAweDBBLCAweDEwLCAweDlCLCAweDQwLCAweDI3LAorMHgwMSwgMHg5QiwgMHg4MCwgMHg0NCwgMHgwNiwgMHgxMCwgMHgyOSwgMHg0NCwgMHgyRiwgMHgwMCwgMHhCMSwgMHgwMywgMHg4NCwKKzB4MDIsIDB4MTAsIDB4MEIsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDE4LCAweEEwLCAweDI0LCAweDA0LCAweDlELCAweDgwLCAweDcwLCAweDIyLCAweDEwLCAweDA5LCAweDQwLCAweDI3LAorMHgwMCwgMHg5RCwgMHgwMCwgMHg3NCwgMHg0MiwgMHgxMCwgMHgwOSwgMHg0MCwgMHgyNywgMHgwMCwgMHg5MSwgMHgwOCwgMHg0NCwKKzB4NDMsIDB4MTQsIDB4MjksIDB4NDAsIDB4MjcsIDB4MDIsIDB4ODAsIDB4MDAsIDB4NDQsIDB4QzIsIDB4MTAsIDB4MDksIDB4NDAsCisweDcwLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDIwLCAweDIwLAorMHgxOCwgMHg4RCwgMHg0MiwgMHgzNCwgMHgwQSwgMHgxNCwgMHgyOCwgMHg0NCwgMHhCMywgMHgwMCwgMHg4RCwgMHgwMCwgMHgzNiwKKzB4MDIsIDB4MTEsIDB4MjgsIDB4NDAsIDB4MjMsIDB4NDUsIDB4ODksIDB4MTQsIDB4MDQsIDB4MDIsIDB4MTAsIDB4MDgsIDB4NDAsCisweEEzLCAweDAwLCAweDgxLCAweDAyLCAweDA0LCAweDAyLCAweDEwLCAweDA4LCAweDQwLCAweDUwLCAweEEwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxRCwgMHhCMCwgMHg0NiwgMHgwMCwgMHgxRiwgMHgwMCwgMHg3QywKKzB4MDQsIDB4MTIsIDB4MTEsIDB4QzIsIDB4MDcsIDB4MTAsIDB4MUYsIDB4MDAsIDB4N0MsIDB4MDQsIDB4MzQsIDB4MTEsIDB4QzAsCisweDA3LCAweDAxLCAweDEzLCAweDA0LCAweDRDLCAweDAwLCAweDMyLCAweDAxLCAweEMwLCAweDQ3LCAweDQwLCAweDUzLCAweDAxLAorMHg0QywgMHgwNCwgMHgzNCwgMHgxMSwgMHhEMCwgMHg3NCwgMHhDMCwgMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MTksIDB4QjgsIDB4QTcsIDB4MDAsIDB4QkYsIDB4MDEsIDB4RkMsIDB4OEUsIDB4RjAsIDB4M0IsIDB4QzAsCisweDdGLCAweDIwLCAweEJFLCAweDAwLCAweDdDLCAweDBBLCAweEYwLCAweDNCLCAweEMwLCAweDI3LCAweDAwLCAweEY3LCAweDAwLAorMHhGQywgMHgwMiwgMHhGMCwgMHgwQiwgMHhDMCwgMHhFRiwgMHgwMCwgMHg5QywgMHgyMywgMHhGRCwgMHgwQSwgMHhGMCwgMHgyOSwKKzB4QzAsIDB4NjcsIDB4MjAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4QTAsCisweDZCLCAweDAwLCAweDkzLCAweDgyLCAweEZDLCAweDE2LCAweEYwLCAweDdCLCAweEMxLCAweDJDLCAweDAwLCAweEIzLCAweDAwLAorMHhGQywgMHgwNiwgMHhGMCwgMHg3QiwgMHhDMSwgMHg2QywgMHgwMSwgMHhCRSwgMHg4MSwgMHhDQywgMHgwMiwgMHhGMCwgMHgwQiwKKzB4RDAsIDB4RUMsIDB4MDEsIDB4QkYsIDB4MDcsIDB4RkMsIDB4MTYsIDB4RjAsIDB4MUIsIDB4QzAsIDB4NjAsIDB4MDAsIDB4MEUsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFDLCAweDA4LCAweDg3LCAweDAwLCAweDUxLCAweDA1LAorMHg3NCwgMHg1NCwgMHhEMCwgMHgzMSwgMHg0MCwgMHg0MCwgMHgwNSwgMHgxMSwgMHgwMCwgMHg3NCwgMHgwMCwgMHhEMSwgMHgzMSwKKzB4NDQsIDB4MDUsIDB4MDAsIDB4MUQsIDB4MEEsIDB4NDQsIDB4MDEsIDB4RDAsIDB4MDEsIDB4NDAsIDB4NDQsIDB4MjAsIDB4MUQsCisweDAzLCAweDc0LCAweDI4LCAweEQyLCAweDAxLCAweDQ4LCAweDcwLCAweDYwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHhBMCwgMHhBMywgMHg0MCwgMHg4NSwgMHg0NCwgMHgzNiwgMHgwQSwgMHhEOCwgMHg0OSwKKzB4NDAsIDB4MjIsIDB4MDAsIDB4ODEsIDB4MjEsIDB4MzQsIDB4MEEsIDB4RDEsIDB4NDgsIDB4NDAsIDB4QTAsIDB4MDAsIDB4OEQsCisweEEwLCAweDA0LCAweDAyLCAweEQxLCAweDA4LCAweDYwLCAweEEyLCAweDExLCAweENELCAweDA2LCAweDM0LCAweDgyLCAweEQwLAorMHgyOCwgMHg0MCwgMHg0OCwgMHg4MCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwKKzB4QTgsIDB4MjUsIDB4ODAsIDB4OTUsIDB4MDEsIDB4NzQsIDB4ODIsIDB4RDAsIDB4MTksIDB4NDEsIDB4MjIsIDB4NDAsIDB4OTEsCisweDAwLCAweDc0LCAweDAzLCAweEQwLCAweDA5LCAweDQwLCAweDI1LCAweDAwLCAweDlELCAweDAwLCAweDQ0LCAweDAyLCAweEQwLAorMHgwOSwgMHg0MSwgMHgyNiwgMHgwNSwgMHg5RCwgMHgwMCwgMHg3NCwgMHgwMiwgMHhEMCwgMHgwOSwgMHg0MCwgMHg2MCwgMHgwMCwKKzB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4QTgsIDB4MjcsIDB4MDAsIDB4QjcsCisweDAwLCAweEZDLCAweDA2LCAweEYyLCAweDBBLCAweEQwLCAweEFFLCAweDEwLCAweDkzLCAweDBCLCAweDdDLCAweDAyLCAweEYwLAorMHgwQiwgMHhDMCwgMHgyNCwgMHgyMCwgMHg5RiwgMHgwMywgMHg0QywgMHg4RSwgMHhGMCwgMHgwOCwgMHhDMCwgMHhFRSwgMHgwMCwKKzB4QkYsIDB4MDAsIDB4N0MsIDB4MDYsIDB4RjAsIDB4MDgsIDB4RDAsIDB4MTQsIDB4MjAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDgwLCAweDI1LCAweDAwLCAweDlCLCAweDAwLCAweDdDLCAweDBFLCAweEYwLAorMHgwOSwgMHhDMCwgMHgyNSwgMHgwMCwgMHg5RiwgMHgwMCwgMHg3QywgMHgwMiwgMHhGMCwgMHgzOSwgMHhDMCwgMHgyNywgMHgwQywKKzB4OEYsIDB4NDksIDB4N0QsIDB4MTIsIDB4RjEsIDB4NDksIDB4QzAsIDB4MjUsIDB4MDAsIDB4OUYsIDB4MDAsIDB4N0MsIDB4NTIsCisweEYwLCAweDA5LCAweDgxLCAweDRCLCAweDAwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgxNCwgMHgwOCwgMHgwMSwgMHgwMSwgMHgxMywgMHgwMiwgMHg3QywgMHgwMCwgMHgzMCwgMHgwMSwgMHhDMCwgMHgwNCwgMHgwMCwKKzB4MUIsIDB4MDgsIDB4N0MsIDB4ODAsIDB4RjAsIDB4MDEsIDB4QzAsIDB4MDQsIDB4MDAsIDB4MTcsIDB4ODgsIDB4N0MsIDB4MDAsCisweEYxLCAweDIxLCAweEMwLCAweDA1LCAweDAwLCAweDFCLCAweDA0LCAweDdDLCAweDAwLCAweEYwLCAweDAxLCAweEMwLCAweDQzLAorMHgyMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHhBMCwgMHhEQywgMHgwMCwKKzB4NTAsIDB4MDAsIDB4NzQsIDB4MDEsIDB4MTAsIDB4MDUsIDB4NDIsIDB4NUMsIDB4MDIsIDB4NTEsIDB4MDAsIDB4RjQsIDB4MDUsCisweEQwLCAweDE1LCAweDQxLCAweDFDLCAweDAwLCAweDUxLCAweDgxLCAweEY0LCAweDA1LCAweEQwLCAweDA3LCAweDQxLCAweDE0LAorMHgwNCwgMHg3MSwgMHg0MCwgMHhGNCwgMHgwRCwgMHhEMCwgMHgyNywgMHg0MCwgMHg1MywgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4QTAsIDB4RTIsIDB4MDAsIDB4QzksIDB4MDAsIDB4MzQsIDB4MDcsCisweDkwLCAweDlDLCAweDQwLCAweDIwLCAweDIyLCAweDg5LCAweDIwLCAweDM0LCAweDA2LCAweEQwLCAweDBELCAweDQwLCAweEIwLAorMHgwQSwgMHg4NSwgMHgwMSwgMHgzNCwgMHgyMywgMHhEMCwgMHgwOCwgMHg0MywgMHg3MywgMHgwMCwgMHg4OSwgMHgwMCwgMHgzNCwKKzB4MEUsIDB4RDAsIDB4QTgsIDB4NDAsIDB4NTMsIDB4MDAsIDB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDA1LCAweDgwLCAweEE4LCAweDAwLCAweEU5LCAweDA0LCAweDM0LCAweDBFLCAweDkwLCAweENBLCAweDUwLCAweDM4LAorMHgwMSwgMHhFMSwgMHgwMCwgMHhCNCwgMHgwQSwgMHhEMCwgMHgwRSwgMHg3MCwgMHg0OCwgMHgwMCwgMHhFMSwgMHgwMCwgMHhCNCwKKzB4MDAsIDB4RDAsIDB4MDIsIDB4NDAsIDB4N0EsIDB4MDAsIDB4NjEsIDB4MDAsIDB4QjQsIDB4NDIsIDB4RDEsIDB4MEEsIDB4NjAsCisweDA3LCAweDIwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE1LCAweDEwLCAweDY4LAorMHgwMCwgMHhFQiwgMHgwNywgMHhCQywgMHgwNywgMHhCMCwgMHgxQywgMHhDMCwgMHhEOCwgMHgwMCwgMHhFQiwgMHgwMSwgMHhCQywKKzB4MDYsIDB4RjAsIDB4NUYsIDB4QzAsIDB4NTgsIDB4MDAsIDB4RTcsIDB4MDEsIDB4QkMsIDB4MDQsIDB4RjEsIDB4MTYsIDB4QzIsCisweDczLCAweDAwLCAweEVCLCAweDA3LCAweEJDLCAweDA2LCAweEYwLCAweDFBLCAweEMwLCAweDQ3LCAweDQwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHhCOCwgMHgyNSwgMHg0MCwgMHhENywgMHgwMCwgMHg3QywKKzB4MDIsIDB4NzQsIDB4MDksIDB4QzAsIDB4MTcsIDB4MDAsIDB4REUsIDB4MDAsIDB4N0MsIDB4MDIsIDB4RjAsIDB4MEQsIDB4QzAsCisweDAzLCAweDAwLCAweERGLCAweDAwLCAweDdDLCAweDAwLCAweEYwLCAweDA0LCAweEM2LCAweDM1LCAweDAyLCAweDVGLCAweDAwLAorMHg3QywgMHgwMiwgMHhGQSwgMHgwOSwgMHhDMCwgMHg0MywgMHgyMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4QTAsIDB4N0YsIDB4MDAsIDB4RjMsIDB4MDEsIDB4REMsIDB4NDcsIDB4MzAsIDB4MUYsIDB4QzIsCisweDc4LCAweDAwLCAweEYzLCAweDAxLCAweEZDLCAweDA3LCAweDMwLCAweDFCLCAweDQxLCAweDRELCAweDAwLCAweEYxLCAweDA5LAorMHhDQywgMHgwNiwgMHhFMCwgMHgxNiwgMHhFMCwgMHg2QywgMHgwMSwgMHhFMywgMHgwMSwgMHhDQywgMHgwNywgMHgzMCwgMHg5QiwKKzB4QzIsIDB4MDMsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTUsIDB4ODgsCisweEI5LCAweDEwLCAweEUxLCAweDEwLCAweDg0LCAweDAyLCAweDEyLCAweDBCLCAweDQxLCAweDM4LCAweDIwLCAweEUxLCAweDAwLAorMHhCNCwgMHgwMiwgMHgxMCwgMHgwQSwgMHg0MCwgMHgwOCwgMHgwMSwgMHhFMSwgMHgwOCwgMHg4NCwgMHgwMCwgMHhEMSwgMHgwRSwKKzB4RDAsIDB4MkMsIDB4NDEsIDB4NjEsIDB4MDAsIDB4QzQsIDB4MDIsIDB4MTAsIDB4OEEsIDB4NDAsIDB4NTcsIDB4NjAsIDB4MDQsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDIxLCAweDAwLCAweEY5LCAweDAxLAorMHg5NCwgMHgwMywgMHgxNCwgMHg4RSwgMHg0MCwgMHgxQywgMHgwMCwgMHhFMSwgMHgwMCwgMHgzNCwgMHgwMywgMHg5MCwgMHgwQSwKKzB4NDAsIDB4MDgsIDB4MDAsIDB4RjksIDB4MDAsIDB4QTQsIDB4MDAsIDB4RDAsIDB4OEUsIDB4NDEsIDB4MjgsIDB4MTMsIDB4RTEsCisweDAwLCAweEQ0LCAweDIzLCAweDkwLCAweDBBLCAweDQ0LCAweDAzLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgyOCwgMHgyMywgMHgwMCwgMHhDOSwgMHgwMiwgMHgwNiwgMHgwNiwgMHgxMCwgMHgwOSwKKzB4NDIsIDB4MTAsIDB4MDAsIDB4QzEsIDB4MDYsIDB4MzQsIDB4MDIsIDB4OTAsIDB4MDgsIDB4NDAsIDB4MDAsIDB4MDAsIDB4QzksCisweDAxLCAweDI2LCAweDRDLCAweEQwLCAweDBDLCAweDQyLCAweDIwLCAweDA0LCAweDQxLCAweDAwLCAweDE0LCAweDgxLCAweDkwLAorMHgwOCwgMHg0MCwgMHgxMywgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwKKzB4QTgsIDB4MjUsIDB4MDAsIDB4REIsIDB4MDAsIDB4NUMsIDB4MDMsIDB4MzAsIDB4MUQsIDB4QzAsIDB4NzQsIDB4NDgsIDB4RDMsCisweDEzLCAweDdDLCAweDAyLCAweEI0LCAweDFELCAweEMwLCAweDA1LCAweDAwLCAweENCLCAweDAxLCAweDZDLCAweDQ2LCAweEYwLAorMHgxRCwgMHhFMCwgMHg3NCwgMHgwMCwgMHhEMywgMHg0MCwgMHgxRCwgMHgwNiwgMHhCMCwgMHgwRCwgMHhDMCwgMHg1NywgMHgyMCwKKzB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MjcsIDB4NDAsIDB4RDcsCisweDAwLCAweDdDLCAweDIyLCAweEYwLCAweDQ5LCAweEQwLCAweDM3LCAweDAyLCAweERGLCAweDAwLCAweDdDLCAweDBBLCAweDcwLAorMHg4RCwgMHhEMCwgMHgwNywgMHgwMCwgMHhENywgMHgwQywgMHg1RCwgMHgwMCwgMHhGMCwgMHgwNSwgMHhDOSwgMHgzNSwgMHgwMiwKKzB4NEYsIDB4MDAsIDB4NjQsIDB4MjIsIDB4NzQsIDB4MjksIDB4QzAsIDB4MDcsIDB4MDAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDA4LCAweDJGLCAweDAwLCAweEZGLCAweDEwLCAweDRDLCAweDBCLCAweEYwLAorMHgwRiwgMHhDMCwgMHg1QywgMHgwMCwgMHhGRiwgMHg4MCwgMHhFQywgMHgwRSwgMHhGMCwgMHg4QywgMHhDMCwgMHgwNCwgMHgwMCwKKzB4RkYsIDB4MDgsIDB4Q0MsIDB4MDAsIDB4RjAsIDB4ODcsIDB4QzAsIDB4N0UsIDB4MjAsIDB4RjMsIDB4MDgsIDB4Q0MsIDB4MDIsCisweDMzLCAweDJGLCAweEM2LCAweDEzLCAweDIyLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHg4MSwgMHgwMCwgMHgyNiwgMHgwMCwgMHhERCwgMHgwMCwgMHg0NCwgMHg4NywgMHhEMCwgMHgxOSwgMHhDMCwgMHhGNiwgMHgwMCwKKzB4Q0QsIDB4MDksIDB4NDQsIDB4MDAsIDB4RDIsIDB4MTksIDB4NDAsIDB4NDQsIDB4MDQsIDB4REMsIDB4MjAsIDB4NkMsIDB4MDQsCisweDkwLCAweDA0LCAweDQwLCAweDIxLCAweDAwLCAweEQzLCAweDAyLCAweDQ0LCAweDAyLCAweDEwLCAweDE5LCAweDQwLCAweDE3LAorMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHhBMCwgMHgzNCwgMHg4MiwKKzB4Q0QsIDB4MDAsIDB4NDQsIDB4MDMsIDB4RDAsIDB4NEQsIDB4NTAsIDB4QjQsIDB4MDIsIDB4REQsIDB4MDAsIDB4NjQsIDB4MDMsCisweEQ4LCAweDA5LCAweDQwLCAweDQ0LCAweDIwLCAweERELCAweDAwLCAweDQ0LCAweDA2LCAweEQwLCAweDA1LCAweDQ0LCAweDI0LAorMHgwMSwgMHhEMCwgMHgxMCwgMHg0NCwgMHgwMywgMHgxMCwgMHgwRCwgMHg0MSwgMHgwNywgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MjAsIDB4MzAsIDB4MDAsIDB4Q0QsIDB4MDAsIDB4MDQsIDB4MDIsCisweEQwLCAweDBDLCAweDQwLCAweDEyLCAweDAwLCAweERELCAweDAwLCAweDA0LCAweDAzLCAweEQwLCAweDA4LCAweDQwLCAweDAwLAorMHgwMCwgMHhDRCwgMHgwMCwgMHgyNiwgMHgwMCwgMHg5MCwgMHgwRCwgMHg0MCwgMHgzNSwgMHg0MCwgMHg0MSwgMHgwMCwgMHgwNSwKKzB4MDIsIDB4MUMsIDB4MDQsIDB4NDQsIDB4NDMsIDB4QTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweEIwLCAweDE2LCAweDAwLCAweEZGLCAweDQwLCAweDRDLCAweDAyLCAweEYwLCAweDA5LCAweDQwLCAweDE0LAorMHgyMCwgMHhERiwgMHgwMCwgMHg2QywgMHgwMywgMHhEMCwgMHgwRCwgMHhDNCwgMHgwNCwgMHgwOCwgMHhERiwgMHgwMCwgMHg0QywKKzB4MDAsIDB4RjAsIDB4MEQsIDB4QzAsIDB4MjYsIDB4MTAsIDB4NTMsIDB4MDAsIDB4NEMsIDB4MDMsIDB4MzAsIDB4MEQsIDB4QzIsCisweDAzLCAweEMwLCAweDBBLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweEI4LCAweDFGLAorMHgwMCwgMHhFRiwgMHgwMCwgMHhGQywgMHgwMiwgMHhGMCwgMHgwQiwgMHhDMCwgMHgxRCwgMHgwMCwgMHhGRiwgMHgwMCwgMHhGQywKKzB4MDEsIDB4RjAsIDB4MEIsIDB4RDAsIDB4MEYsIDB4MDAsIDB4RUYsIDB4MDAsIDB4RkMsIDB4MDAsIDB4RjAsIDB4MEYsIDB4QzAsCisweDJGLCAweDAwLCAweDc3LCAweDQwLCAweEZDLCAweDAxLCAweEYwLCAweDA3LCAweEMwLCAweDE3LCAweDIyLCAweDBFLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHg4MCwgMHg3RiwgMHgwMCwgMHhFRiwgMHgwOSwgMHhEQywKKzB4MDYsIDB4RjIsIDB4MUYsIDB4QzAsIDB4N0QsIDB4MDAsIDB4RTMsIDB4MDEsIDB4REMsIDB4MTIsIDB4MzAsIDB4MTMsIDB4QzAsCisweDRFLCAweDEwLCAweEIzLCAweDAwLCAweERDLCAweDMyLCAweDcwLCAweDJCLCAweEMwLCAweEJDLCAweDAwLCAweEIzLCAweDIwLAorMHhGQywgMHgxMCwgMHgzMCwgMHgwMiwgMHgwMCwgMHgwRSwgMHgwMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDMsIDB4MTgsIDB4NzcsIDB4MDAsIDB4REQsIDB4MDQsIDB4NDQsIDB4MDYsIDB4MTAsIDB4MUQsIDB4NDAsCisweDc0LCAweDAwLCAweEQxLCAweDAxLCAweDQ0LCAweDBFLCAweDEwLCAweDExLCAweDQwLCAweDc0LCAweDAwLCAweDUxLCAweDQzLAorMHg0NCwgMHhCMiwgMHgxMCwgMHhBMSwgMHg0MCwgMHhCQywgMHgwMywgMHgxMSwgMHgzMiwgMHg3NCwgMHgyNiwgMHg1MCwgMHgxMSwKKzB4NDAsIDB4MEMsIDB4NjAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTMsIDB4QTAsCisweDMzLCAweDAwLCAweENELCAweDA0LCAweDE0LCAweDAzLCAweDU4LCAweDBDLCAweDQwLCAweDI3LCAweDAwLCAweEQ1LCAweDAwLAorMHgxNywgMHgwOCwgMHgxMCwgMHgwMSwgMHg2MCwgMHgwNiwgMHgwOCwgMHg4MSwgMHgyOCwgMHgxNiwgMHgxMiwgMHhEOCwgMHg0MCwKKzB4NDAsIDB4MzAsIDB4MDAsIDB4MDUsIDB4ODYsIDB4MzQsIDB4MDAsIDB4MTgsIDB4MDgsIDB4NjAsIDB4NEUsIDB4ODAsIDB4MEUsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweEEwLCAweDM1LCAweDAwLCAweERELCAweDA0LAorMHg1NCwgMHgwNywgMHgxMCwgMHgwRCwgMHg0NiwgMHgyNiwgMHgwMCwgMHhENSwgMHgxMSwgMHg0NCwgMHgwQywgMHgxMiwgMHgxMSwKKzB4NDAsIDB4NzQsIDB4MDAsIDB4OTEsIDB4MDEsIDB4NDQsIDB4NDYsIDB4MTgsIDB4MTAsIDB4NDAsIDB4MzYsIDB4MDAsIDB4MTUsCisweDAxLCAweDc0LCAweDQzLCAweDUyLCAweDE5LCAweDQxLCAweDBDLCAweDAwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHhBOCwgMHgzNywgMHgwOCwgMHhERiwgMHgwMCwgMHgxRSwgMHgwNiwgMHg3MCwgMHhENSwKKzB4QzAsIDB4RDMsIDB4MDAsIDB4QzcsIDB4MDMsIDB4NUMsIDB4MEMsIDB4MzAsIDB4MzAsIDB4QzQsIDB4NTIsIDB4MDQsIDB4OTIsCisweDA3LCAweDVELCAweDA0LCAweDcwLCAweDM5LCAweEMwLCAweDM0LCAweDAwLCAweDk3LCAweDYxLCAweDdDLCAweDhELCAweDMwLAorMHgzOSwgMHhDMCwgMHgyQSwgMHgyMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNywKKzB4ODAsIDB4M0QsIDB4MzAsIDB4RkYsIDB4MDEsIDB4RUMsIDB4MDIsIDB4RjAsIDB4MEYsIDB4QzAsIDB4N0QsIDB4MDIsIDB4RkIsCisweDAwLCAweEZDLCAweDAyLCAweEYwLCAweDAzLCAweEMwLCAweDFGLCAweDAwLCAweDZGLCAweDIwLCAweEJDLCAweDAwLCAweEYwLAorMHgwMywgMHhEMCwgMHgzRCwgMHgwMCwgMHgzQiwgMHgyMCwgMHhGQywgMHgyNCwgMHhGMSwgMHgwQiwgMHhDMCwgMHgxRiwgMHgwMCwKKzB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MEEsIDB4MDgsIDB4MzUsIDB4MDAsIDB4REYsCisweDAwLCAweDVDLCAweDAzLCAweEIwLCAweDQ5LCAweEMwLCAweEE1LCAweDAwLCAweERCLCAweDAyLCAweDRDLCAweDAwLCAweEYwLAorMHgyMSwgMHhDMCwgMHgxNywgMHgwMiwgMHhENywgMHgwNSwgMHg2QywgMHgwMiwgMHhGMSwgMHgwOSwgMHhDMCwgMHgzNywgMHg0NCwKKzB4OTMsIDB4MDIsIDB4NkMsIDB4MEIsIDB4RjAsIDB4MjksIDB4QzQsIDB4MkIsIDB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEzLCAweEEwLCAweDM0LCAweDAwLCAweERELCAweDRELCAweDQwLCAweDBGLCAweDE1LAorMHgzOCwgMHg0MCwgMHgyNCwgMHgxMCwgMHg5MSwgMHgwMCwgMHgyQywgMHg0NCwgMHhEMSwgMHhCMSwgMHg0NCwgMHg1NCwgMHgxMCwKKzB4RDEsIDB4MDEsIDB4NzQsIDB4QjIsIDB4RDIsIDB4MDEsIDB4NEEsIDB4RkYsIDB4MDAsIDB4OTAsIDB4MzAsIDB4MzQsIDB4ODMsCisweEQxLCAweDA4LCAweDQwLCAweDRDLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgxMywgMHhBMCwgMHgzMiwgMHgwMCwgMHhERCwgMHgwMCwgMHgxNCwgMHgyNiwgMHgxMCwgMHg5QywgMHg0OCwgMHgzMSwgMHgwMCwKKzB4Q0MsIDB4MDgsIDB4MjUsIDB4MDIsIDB4RDAsIDB4MTAsIDB4NDAsIDB4MTEsIDB4MDAsIDB4ODUsIDB4MDIsIDB4MzQsIDB4MDAsCisweEQwLCAweDA4LCAweDQyLCAweDM2LCAweDAwLCAweDg1LCAweDI1LCAweDI0LCAweDAwLCAweEQwLCAweEIwLCAweDQxLCAweDBELAorMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwRCwgMHgwOCwgMHg3QSwgMHgwMCwKKzB4RkQsIDB4MDEsIDB4QzQsIDB4MUUsIDB4MTgsIDB4OUYsIDB4NDAsIDB4N0MsIDB4MTAsIDB4RjUsIDB4NDEsIDB4QjQsIDB4MDcsCisweEQwLCAweDEyLCAweDAwLCAweDU4LCAweDAwLCAweEEwLCAweDAxLCAweEI0LCAweDA3LCAweEQwLCAweDFFLCAweDAwLCAweDczLAorMHgwNCwgMHhFNSwgMHgwMSwgMHhCNCwgMHgwNCwgMHhEMSwgMHgxNiwgMHgwMCwgMHgzNCwgMHgyMCwgMHgwOCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4MTAsIDB4MzAsIDB4MDAsIDB4Q0YsIDB4MDAsIDB4MUMsIDB4MDIsCisweDMwLCAweDhDLCAweEMwLCAweEIxLCAweDAwLCAweENGLCAweDAwLCAweDJDLCAweDAzLCAweEYwLCAweEUwLCAweEMzLCAweDExLAorMHgwMCwgMHg4NywgMHgwMCwgMHgyOCwgMHgwMSwgMHhGMCwgMHgwNCwgMHhDMCwgMHgzMiwgMHgzMCwgMHg0NywgMHgwMCwgMHgyQywKKzB4MDMsIDB4RjAsIDB4MDAsIDB4QzAsIDB4NDksIDB4NDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAyLCAweEEwLCAweDNELCAweDAwLCAweEZGLCAweDAwLCAweEJDLCAweDEyLCAweDcwLCAweDhFLCAweEMwLCAweDNCLAorMHgwMiwgMHhGQiwgMHg4OCwgMHhFQywgMHgyMywgMHhGMCwgMHg4MiwgMHhDMCwgMHgxOSwgMHgwMCwgMHhCQiwgMHgwMCwgMHhGQywKKzB4MDMsIDB4RjAsIDB4MEYsIDB4QzAsIDB4M0YsIDB4MjAsIDB4N0IsIDB4NDAsIDB4RkMsIDB4MjMsIDB4RjAsIDB4OEYsIDB4QzAsCisweDA5LCAweDIwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweEEwLCAweDM3LAorMHgwMCwgMHg5RiwgMHgwMCwgMHgzQywgMHgwNiwgMHg3MCwgMHgwRCwgMHhFMCwgMHgzNSwgMHgwMCwgMHhERiwgMHgwMCwgMHg0NCwKKzB4MDEsIDB4QjIsIDB4MDUsIDB4QzIsIDB4MTMsIDB4MDAsIDB4Q0IsIDB4MDAsIDB4NkMsIDB4MDUsIDB4NzIsIDB4MEQsIDB4QzIsCisweEI3LCAweDAzLCAweERELCAweDAwLCAweDZDLCAweDAwLCAweEYwLCAweDE1LCAweDgwLCAweDQwLCAweDAwLCAweDBFLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMywgMHg5OCwgMHgzOSwgMHgxMCwgMHhFQywgMHgwMCwgMHhCNCwKKzB4ODIsIDB4MTAsIDB4MEUsIDB4NTIsIDB4MzgsIDB4MDAsIDB4NkQsIDB4MDAsIDB4OTQsIDB4MDMsIDB4OTAsIDB4MDYsIDB4NDAsCisweDFCLCAweDAwLCAweEUxLCAweDAwLCAweEM1LCAweDAxLCAweDEwLCAweDBFLCAweDQ4LCAweDNCLCAweDA1LCAweEVELCAweDAwLAorMHg4NCwgMHgwMCwgMHg5MCwgMHgwRSwgMHg0MCwgMHg0QywgMHg2MCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4NzksIDB4MjAsIDB4QUMsIDB4OTEsIDB4QjQsIDB4MDYsIDB4RDAsIDB4MUYsIDB4NDgsCisweDc5LCAweDIwLCAweEZELCAweDAxLCAweEI0LCAweDQ3LCAweDkwLCAweDFFLCAweDYwLCAweDVCLCAweDAwLCAweEU5LCAweDAxLAorMHhBNCwgMHgwNywgMHg1MCwgMHgxRSwgMHg0MSwgMHg3QiwgMHgwMCwgMHhDRCwgMHgwMywgMHhCNCwgMHgwNywgMHhEOCwgMHgxNCwKKzB4NjQsIDB4MTAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTYsIDB4MjAsCisweDMzLCAweDAwLCAweENELCAweDAxLCAweDM0LCAweDQwLCAweEQwLCAweDVDLCAweDQwLCAweDMxLCAweDAwLCAweENELCAweDA1LAorMHgzNCwgMHgwMywgMHg5OCwgMHgyNCwgMHg0MCwgMHg5MywgMHgwOCwgMHhDMSwgMHgwOCwgMHgwNCwgMHgwMywgMHgxMCwgMHgyQywKKzB4NDEsIDB4MzMsIDB4ODgsIDB4REQsIDB4MDAsIDB4MTQsIDB4MUYsIDB4OTAsIDB4MkMsIDB4NDAsIDB4NTgsIDB4MDAsIDB4MEMsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE3LCAweEE4LCAweDE3LCAweDAwLCAweDVGLCAweDAxLAorMHhGQywgMHgwOSwgMHhGMCwgMHgwNywgMHg0MCwgMHgxRCwgMHgwMCwgMHg3RiwgMHgwMSwgMHhGQywgMHgwMSwgMHhCMCwgMHg3NywKKzB4QzAsIDB4NUIsIDB4MDAsIDB4NkIsIDB4MDEsIDB4RUMsIDB4MjksIDB4NzAsIDB4MDcsIDB4QzAsIDB4MTcsIDB4MDAsIDB4N0YsCisweDA4LCAweEZDLCAweDAxLCAweEYwLCAweDQ3LCAweDQwLCAweDVDLCAweDIwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHg4MCwgMHgwNSwgMHgwMCwgMHgxRiwgMHhDMiwgMHg3QywgMHgwMCwgMHgwMCwgMHhBMSwKKzB4ODAsIDB4MDYsIDB4MDEsIDB4MUMsIDB4MDgsIDB4NTgsIDB4MDAsIDB4QzMsIDB4MDEsIDB4ODgsIDB4MDcsIDB4MDIsIDB4MUYsCisweDQyLCAweDdDLCAweDIwLCAweEYwLCAweDAxLCAweEMwLCAweDg3LCAweDIwLCAweDFGLCAweDQwLCAweDYwLCAweDIwLCAweEIwLAorMHgwMSwgMHhEMCwgMHg0QiwgMHgwMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwKKzB4MDgsIDB4MjUsIDB4MDAsIDB4OUYsIDB4MDMsIDB4N0MsIDB4MTIsIDB4RjksIDB4MDksIDB4QzgsIDB4MjUsIDB4MDAsIDB4OUYsCisweDA0LCAweDFDLCAweDU2LCAweDMxLCAweDg5LCAweEMzLCAweDI3LCAweDA0LCAweDk3LCAweDA1LCAweDQwLCAweDA2LCAweEYwLAorMHgwOSwgMHhDMCwgMHgyNywgMHgwMSwgMHg5RiwgMHgwMCwgMHg0QywgMHg4MiwgMHhGMywgMHgzOSwgMHhDMSwgMHg0MywgMHgyMCwKKzB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MjAsIDB4MjYsIDB4MDAsIDB4OUQsCisweDAzLCAweDc0LCAweDBBLCAweEQ4LCAweDQ4LCAweDQwLCAweDI0LCAweDEwLCAweDhELCAweDAwLCAweDQ0LCAweDA2LCAweDE0LAorMHgxOSwgMHg0NCwgMHhFNywgMHg4MSwgMHg5QiwgMHgxMiwgMHg0NCwgMHgwRSwgMHhEMCwgMHgwOSwgMHg0MCwgMHg2NywgMHgyMCwKKzB4OUQsIDB4MEUsIDB4NDQsIDB4MDIsIDB4NzgsIDB4MzksIDB4NDAsIDB4MDcsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFDLCAweEEwLCAweDI0LCAweDAwLCAweDlELCAweDAwLCAweDc0LCAweDBCLCAweDk4LAorMHgwOSwgMHg0MCwgMHgyNSwgMHgwMCwgMHg5RCwgMHgwMiwgMHg1NiwgMHgwMiwgMHg1MCwgMHgwOSwgMHg0OCwgMHg2NywgMHgwMCwKKzB4OTUsIDB4MDAsIDB4NTQsIDB4MUEsIDB4RDAsIDB4MEQsIDB4NjAsIDB4MjcsIDB4MDAsIDB4REQsIDB4MDAsIDB4NDQsIDB4MDIsCisweDUwLCAweDI5LCAweDQwLCAweDczLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgxNCwgMHgyOCwgMHgyMCwgMHgwMCwgMHhDRCwgMHgwMCwgMHgzNCwgMHgwMiwgMHhEMCwgMHgwOSwgMHg0MCwgMHgyMCwgMHgwMCwKKzB4OEQsIDB4ODAsIDB4MTQsIDB4RDIsIDB4NTAsIDB4MEMsIDB4NDAsIDB4MjMsIDB4MDAsIDB4ODEsIDB4MDAsIDB4MTAsIDB4NTIsCisweEQwLCAweDQ4LCAweDYxLCAweDMzLCAweDBELCAweDhELCAweDE0LCAweDE0LCAweDAyLCAweDUwLCAweDQ4LCAweDQxLCAweDUzLAorMHhBMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxRCwgMHgzMCwgMHgwNCwgMHgwMCwKKzB4MUYsIDB4MDAsIDB4N0MsIDB4MDAsIDB4OTAsIDB4MDEsIDB4QzAsIDB4MDUsIDB4MDAsIDB4MUYsIDB4ODAsIDB4NUMsIDB4MTAsCisweDcwLCAweDAxLCAweEMwLCAweDA3LCAweDIwLCAweDE0LCAweDE0LCAweDRELCAweDEwLCAweEYwLCAweDQxLCAweEMwLCAweDA3LAorMHgwMSwgMHgxRiwgMHgwNCwgMHg0RCwgMHg1MCwgMHg3MCwgMHg0MSwgMHhFMiwgMHg3NywgMHhDMCwgMHgwQSwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTksIDB4QTAsIDB4MjcsIDB4MDAsIDB4QkYsIDB4OTQsIDB4RkMsIDB4MDIsCisweEMwLCAweDBFLCAweDQwLCAweDNGLCAweDAwLCAweEFGLCAweDgwLCAweEVDLCAweDAyLCAweEIwLCAweDBCLCAweEMwLCAweDJGLAorMHgwMCwgMHhCRiwgMHgwMCwgMHhFQywgMHg1MiwgMHhGMCwgMHg0QiwgMHg0MSwgMHgyNywgMHgwNSwgMHhCRiwgMHgxNCwgMHhFQywKKzB4MDIsIDB4NzAsIDB4MEIsIDB4QzAsIDB4NjcsIDB4MjAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDE4LCAweEEwLCAweDI3LCAweDAwLCAweEJGLCAweDA4LCAweEZDLCAweDAyLCAweDc5LCAweDBBLCAweEMwLCAweDI1LAorMHgwMCwgMHhCRiwgMHgwMCwgMHhDQywgMHgwNiwgMHhCMSwgMHgwQiwgMHhDMCwgMHgyRiwgMHgwMCwgMHhCRiwgMHgwMCwgMHhERCwKKzB4MTIsIDB4RjAsIDB4OTksIDB4QzAsIDB4NkQsIDB4MDMsIDB4QjksIDB4MEQsIDB4RjgsIDB4MDIsIDB4MzAsIDB4MEIsIDB4QzgsCisweDYwLCAweDAwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFDLCAweDE4LCAweDA3LAorMHgwMCwgMHgxRCwgMHg0MSwgMHg3NCwgMHgwMCwgMHgxMCwgMHgwMSwgMHg0MCwgMHgwNCwgMHgwMCwgMHgxRCwgMHgwMCwgMHg0NCwKKzB4MjgsIDB4MTAsIDB4MDEsIDB4NDAsIDB4MDcsIDB4MDAsIDB4MUQsIDB4NDAsIDB4NDQsIDB4MTAsIDB4RDAsIDB4QjEsIDB4NDAsCisweEM0LCAweDAzLCAweDExLCAweDBGLCAweDc0LCAweDAwLCAweDEwLCAweDAxLCAweDUwLCAweDcwLCAweDYwLCAweDBDLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHgwMCwgMHgyMywgMHgwMCwgMHg4RCwgMHgwNCwgMHg3NCwKKzB4MDIsIDB4RDQsIDB4MDgsIDB4NDAsIDB4MjEsIDB4MjAsIDB4OUQsIDB4MDAsIDB4MTcsIDB4MDIsIDB4OTAsIDB4MDgsIDB4NDAsCisweDIzLCAweDAwLCAweDlELCAweDAwLCAweDM2LCAweDYyLCAweEQwLCAweDQ4LCAweDQwLCAweDIzLCAweDAwLCAweDg5LCAweDAwLAorMHgzNCwgMHgwMiwgMHgxNCwgMHgwOCwgMHg0OCwgMHg0OSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MTgsIDB4QTAsIDB4MjUsIDB4MDAsIDB4OUQsIDB4ODAsIDB4NzQsIDB4NDIsIDB4MTIsIDB4MDksIDB4NDQsCisweDI0LCAweDAwLCAweDlELCAweDQwLCAweDUyLCAweDQ2LCAweDAwLCAweDA5LCAweDQxLCAweDI3LCAweDAwLCAweDlELCAweDAwLAorMHg3NCwgMHg4RSwgMHhEMCwgMHgwOSwgMHg2MSwgMHgyNCwgMHgwMCwgMHg5MSwgMHgxMCwgMHg3NCwgMHgwMiwgMHgxMCwgMHgwOSwKKzB4NDAsIDB4NjAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4QTgsCisweDI2LCAweDAwLCAweDlELCAweDAwLCAweDc4LCAweDBBLCAweEYyLCAweDA4LCAweEMwLCAweDI1LCAweDgwLCAweDlGLCAweDA0LAorMHg1QywgMHgwQSwgMHhCMiwgMHgwOSwgMHhDMiwgMHgyNywgMHgwOCwgMHg5RiwgMHgxOSwgMHg3QywgMHgwMiwgMHhGMCwgMHgzOSwKKzB4QzAsIDB4MjUsIDB4MjAsIDB4OUEsIDB4MDMsIDB4N0UsIDB4MTYsIDB4MjAsIDB4MDksIDB4RTUsIDB4MTUsIDB4MjAsIDB4MEUsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDgwLCAweDI1LCAweDAwLCAweDlGLCAweDAwLAorMHg3QywgMHgxMiwgMHhGMCwgMHgyOSwgMHhDMCwgMHhBNiwgMHgwMCwgMHg5RiwgMHgyOCwgMHgyQywgMHgwMiwgMHhGMCwgMHgwOSwKKzB4QzAsIDB4MjcsIDB4MDAsIDB4OUYsIDB4OTAsIDB4NEMsIDB4MDIsIDB4RjAsIDB4NDgsIDB4QzQsIDB4MjcsIDB4MDAsIDB4OUYsCisweDg5LCAweDdFLCAweDIyLCAweEYyLCAweDA4LCAweEUwLCAweDRCLCAweDAwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHgwNSwgMHgwMCwgMHgxRiwgMHgwNCwgMHg3QywgMHgxOCwgMHhCMiwgMHg0MSwKKzB4QzAsIDB4MDQsIDB4MjAsIDB4MUYsIDB4MDYsIDB4NEMsIDB4MjgsIDB4RjIsIDB4NjEsIDB4QzAsIDB4MDUsIDB4MDIsIDB4MUYsCisweDAyLCAweDZDLCAweDA4LCAweEIwLCAweDIxLCAweEMyLCAweDA3LCAweDAwLCAweDFGLCAweDEyLCAweDFDLCAweDA4LCAweDMwLAorMHgyMSwgMHhDMCwgMHg0MCwgMHgyMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwKKzB4QTAsIDB4MTQsIDB4MDAsIDB4N0QsIDB4MTEsIDB4QjAsIDB4MEQsIDB4MTAsIDB4MTcsIDB4NTgsIDB4MTQsIDB4MDAsIDB4NkQsCisweDAzLCAweDQ1LCAweDA1LCAweEQwLCAweDE3LCAweDQ0LCAweDlGLCAweDAyLCAweDZELCAweDAwLCAweEMwLCAweDAxLCAweDEwLAorMHgwNSwgMHg0MCwgMHg5RiwgMHgwMiwgMHg3RCwgMHg4MCwgMHg0NCwgMHgwMSwgMHgxMCwgMHgyNywgMHgwMCwgMHg1MCwgMHgwMCwKKzB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4QTAsIDB4MzIsIDB4MDAsIDB4Q0QsCisweDAwLCAweDM0LCAweDhBLCAweDkwLCAweEFDLCAweDA0LCAweDMwLCAweDAwLCAweDQ1LCAweDAyLCAweDEyLCAweDA2LCAweEQxLAorMHgyQywgMHg0MCwgMHg5MSwgMHgwMCwgMHhDRCwgMHgyMiwgMHgyNCwgMHgxNywgMHg5MCwgMHgwQywgMHg0MCwgMHgzNywgMHhBMiwKKzB4Q0QsIDB4MDgsIDB4MTYsIDB4QTcsIDB4MTAsIDB4NEMsIDB4NTAsIDB4NTAsIDB4MDAsIDB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDgwLCAweDM4LCAweDAwLCAweDZELCAweDAwLCAweEY0LCAweDBBLCAweDEwLAorMHgwRSwgMHg0MCwgMHgzOCwgMHgwMCwgMHg2RCwgMHgxMCwgMHhCNCwgMHgwMywgMHhEMCwgMHgwRSwgMHg2MSwgMHgxQiwgMHg4MCwKKzB4RkQsIDB4MzAsIDB4QTAsIDB4NDcsIDB4OTAsIDB4NEUsIDB4NDAsIDB4M0IsIDB4QTAsIDB4NkQsIDB4MDEsIDB4ODQsIDB4MDMsCisweDUwLCAweDJDLCAweDQwLCAweDA0LCAweDIwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgxMSwgMHgxMCwgMHg3OCwgMHgwMCwgMHhFRiwgMHgwMSwgMHhCQywgMHgwNiwgMHhCMCwgMHgxRSwgMHhDMCwgMHg3OCwgMHgyMCwKKzB4NkYsIDB4MDEsIDB4OUMsIDB4MDcsIDB4RjAsIDB4MUUsIDB4RTAsIDB4NTksIDB4MDAsIDB4RUYsIDB4MDEsIDB4RTgsIDB4MDcsCisweEIwLCAweEJFLCAweEMwLCAweDdCLCAweDIwLCAweEZGLCAweDIxLCAweDFDLCAweDA3LCAweDM0LCAweDFFLCAweEMwLCAweDQ0LAorMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHhCOCwgMHgzNSwgMHgwMCwKKzB4REYsIDB4MDAsIDB4M0MsIDB4MDIsIDB4RjAsIDB4MEQsIDB4QzAsIDB4MzcsIDB4MTAsIDB4NEYsIDB4MDAsIDB4NEQsIDB4ODMsCisweEYwLCAweDBELCAweEUwLCAweDE3LCAweDAwLCAweENGLCAweDAwLCAweDVDLCAweDAzLCAweDcwLCAweDZELCAweEM0LCAweDE3LAorMHgwOCwgMHg1RSwgMHg0MCwgMHg3QywgMHgwMywgMHhCMCwgMHgwOSwgMHhDMCwgMHg0MywgMHgyMCwgMHgwNiwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4N0QsIDB4MDAsIDB4RkYsIDB4MDEsIDB4RkMsIDB4MDcsCisweDMwLCAweDE3LCAweEMwLCAweDdELCAweDAwLCAweDdGLCAweDAxLCAweERDLCAweDI3LCAweEYxLCAweDlGLCAweEMwLCAweDVGLAorMHgwMCwgMHhFRiwgMHgwMSwgMHhFQywgMHg4NSwgMHhCMCwgMHg5RiwgMHgwMCwgMHg1RiwgMHgwMiwgMHhGMywgMHg0RCwgMHhDOCwKKzB4MDcsIDB4MjAsIDB4MUYsIDB4QzAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDE1LCAweDE4LCAweDM5LCAweDAwLCAweDZELCAweDQyLCAweEI0LCAweDEyLCAweDEwLCAweDBFLCAweDQwLCAweDM4LAorMHgwMCwgMHgyOSwgMHg0NCwgMHg4MCwgMHgwMywgMHhEMCwgMHgwRSwgMHg0MCwgMHgxQiwgMHgwMCwgMHg2RCwgMHgwMiwgMHg5NCwKKzB4MDEsIDB4RDAsIDB4MEUsIDB4NDMsIDB4MUEsIDB4MDAsIDB4RTEsIDB4MTgsIDB4ODQsIDB4NTMsIDB4MTAsIDB4MDcsIDB4NDEsCisweDU1LCAweDYwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDM5LAorMHgwMCwgMHhFRCwgMHgwMCwgMHhGNCwgMHgwMiwgMHgxOCwgMHgyRSwgMHg1MCwgMHhCOSwgMHgwMCwgMHg2RCwgMHhCMiwgMHg4MCwKKzB4NDMsIDB4RDAsIDB4MEUsIDB4NDIsIDB4MUIsIDB4MDQsIDB4RUQsIDB4MTgsIDB4OTUsIDB4MDEsIDB4OTAsIDB4MEUsIDB4NDIsCisweDNBLCAweDMwLCAweEUxLCAweDQ0LCAweEI1LCAweDAzLCAweDFDLCAweDBGLCAweDQwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgyMCwgMHgzMCwgMHgwMCwgMHg4RCwgMHgwMCwgMHgzNCwKKzB4MEEsIDB4MTgsIDB4MEMsIDB4NTgsIDB4MzEsIDB4MDgsIDB4NDksIDB4MDEsIDB4MDQsIDB4MDcsIDB4RDAsIDB4MDgsIDB4NDAsCisweEQzLCAweDAwLCAweDRELCAweDAzLCAweDA0LCAweDlDLCAweEQwLCAweDFELCAweDQ4LCAweDAyLCAweDgwLCAweDkxLCAweDAxLAorMHgzNCwgMHgxMywgMHgxMCwgMHgzMCwgMHgwMCwgMHgxMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MTUsIDB4QTgsIDB4MzUsIDB4MDAsIDB4OUYsIDB4MDAsIDB4NzQsIDB4MEIsIDB4MzAsIDB4MkQsIDB4QzAsCisweDMxLCAweDAwLCAweENGLCAweDAyLCAweDRELCAweDIzLCAweEYyLCAweDBELCAweEMwLCAweEQ3LCAweDAwLCAweENGLCAweDA5LAorMHg1QywgMHgxQSwgMHhCMCwgMHgzRiwgMHg0MCwgMHgyNiwgMHgyMCwgMHg5MSwgMHgwMiwgMHg3QywgMHgwMiwgMHgzMCwgMHgyRCwKKzB4QzAsIDB4NTQsIDB4MjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsCisweDM3LCAweDAwLCAweDFGLCAweDAxLCAweDdDLCAweDQzLCAweEYwLCAweDBELCAweDQwLCAweDM2LCAweDAwLCAweERCLCAweDAyLAorMHg3QywgMHgwMywgMHhGMCwgMHg2RCwgMHhDNCwgMHgxNywgMHgwMSwgMHhERiwgMHgwMCwgMHg3NCwgMHgwMCwgMHhEMCwgMHgwRCwKKzB4QzEsIDB4MjYsIDB4MDAsIDB4MUYsIDB4MDIsIDB4NEMsIDB4MDIsIDB4RjEsIDB4NEQsIDB4QzAsIDB4MDcsIDB4MDAsIDB4MEMsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDg0LCAweDA4LCAweDNGLCAweDA4LCAweDNGLCAweDAwLAorMHhGQywgMHgwMiwgMHhGMCwgMHgwRiwgMHhDMCwgMHgzRCwgMHgwOCwgMHg3NywgMHgwMCwgMHhDQywgMHgwMywgMHhFMCwgMHg5RiwKKzB4RDAsIDB4MUMsIDB4MDAsIDB4RjksIDB4MDAsIDB4OEQsIDB4MDIsIDB4QjAsIDB4MEYsIDB4QzAsIDB4MjQsIDB4MDAsIDB4OUYsCisweDEwLCAweDQ4LCAweDgyLCAweEQwLCAweDA3LCAweEMwLCAweDEzLCAweDIyLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHg4NSwgMHgyMCwgMHgzNiwgMHgwMCwgMHgxRCwgMHgwMywgMHg3NCwgMHg4NiwgMHhEMiwgMHgzQywKKzB4NDEsIDB4MzQsIDB4MDAsIDB4NTEsIDB4MjEsIDB4NDQsIDB4MDMsIDB4RDAsIDB4NUMsIDB4NDAsIDB4NTQsIDB4MDgsIDB4REQsCisweDQzLCAweDQ0LCAweDRFLCAweDEwLCAweDBELCAweDQwLCAweDY0LCAweDAwLCAweDFELCAweDA3LCAweDZDLCAweEEyLCAweEQyLAorMHgwMSwgMHg0MCwgMHgxNywgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwKKzB4QTAsIDB4MzQsIDB4MDAsIDB4OUQsIDB4MDEsIDB4NzQsIDB4MDcsIDB4RDAsIDB4MUQsIDB4NDAsIDB4MzUsIDB4MDAsIDB4NTUsCisweDAzLCAweDQ1LCAweDA3LCAweEQyLCAweDBELCAweDQyLCAweDU1LCAweDA0LCAweDlELCAweDgxLCAweDU0LCAweDA2LCAweDkwLAorMHgwRCwgMHg1MCwgMHhDNCwgMHgwMCwgMHgxRCwgMHgwMSwgMHg1NCwgMHgwMywgMHhEMCwgMHg4OSwgMHg0MSwgMHgwNywgMHgwOCwKKzB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MjgsIDB4MzAsIDB4MDAsIDB4MEQsCisweDAwLCAweDM0LCAweDA3LCAweEQwLCAweDA5LCAweDQwLCAweDM0LCAweDAwLCAweDUxLCAweDAwLCAweDA0LCAweDAzLCAweEQwLAorMHgwNCwgMHg0MCwgMHgxMCwgMHgwMCwgMHg0RCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgxOCwgMHgwQywgMHg0MCwgMHgwMCwgMHgwMCwKKzB4MUQsIDB4MDAsIDB4MzYsIDB4ODMsIDB4RDAsIDB4MDAsIDB4NDAsIDB4NDMsIDB4QTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweEIxLCAweDM2LCAweDAwLCAweDlGLCAweDAwLCAweDdDLCAweDAyLCAweEYwLAorMHgwRCwgMHhDMCwgMHgzNSwgMHgwMCwgMHg1NywgMHgwMCwgMHg0OCwgMHgwMywgMHhGMCwgMHgwRCwgMHg0MCwgMHgzNCwgMHgxMCwKKzB4NUIsIDB4MDAsIDB4NDgsIDB4MDIsIDB4QjAsIDB4MEYsIDB4QzAsIDB4MjQsIDB4MDAsIDB4OUYsIDB4MDAsIDB4NUMsIDB4MDMsCisweEYwLCAweDAxLCAweEM4LCAweDAzLCAweEMwLCAweDBBLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwNSwgMHhBMCwgMHgzRiwgMHgwMCwgMHhCRiwgMHgwMCwgMHhCNCwgMHgwMCwgMHhGMCwgMHgwQSwgMHhDMCwgMHgzRiwgMHgyMCwKKzB4NkYsIDB4MDAsIDB4RkMsIDB4MDMsIDB4RTAsIDB4MEYsIDB4QzAsIDB4MkYsIDB4MDAsIDB4N0UsIDB4MDAsIDB4RkMsIDB4MDIsCisweEYwLCAweDBGLCAweEMwLCAweDJGLCAweDAwLCAweEJGLCAweDAwLCAweEVDLCAweDAzLCAweEYwLCAweDAzLCAweEMwLCAweDE3LAorMHgyMSwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHhBOCwgMHg3RiwgMHgwMCwKKzB4RUYsIDB4MDksIDB4Q0MsIDB4MjcsIDB4RjIsIDB4MUYsIDB4QzAsIDB4N0MsIDB4MDAsIDB4RkYsIDB4MDEsIDB4QkMsIDB4MjcsCisweEYwLCAweDNGLCAweEMwLCAweDdGLCAweDAwLCAweEVFLCAweDA5LCAweENDLCAweDA3LCAweDMxLCAweDFFLCAweEMwLCAweDdDLAorMHgwMCwgMHhGMywgMHgwOSwgMHhGQywgMHgwNywgMHgzMCwgMHgxRiwgMHhDMCwgMHgwQywgMHgwMCwgMHgwRSwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDgsIDB4NDcsIDB4MTAsIDB4MUQsIDB4NDQsIDB4NDQsIDB4MTAsCisweEQwLCAweDExLCAweDQwLCAweDQ0LCAweDAwLCAweDFELCAweDAxLCAweDc0LCAweDAwLCAweEQyLCAweDAxLCAweDQ4LCAweDQ3LAorMHgwMCwgMHgxRCwgMHg0NCwgMHg0NCwgMHgwNCwgMHg1MCwgMHgxMSwgMHg0MCwgMHg0NCwgMHgwMCwgMHgxMSwgMHg4NCwgMHg3NCwKKzB4MDQsIDB4MTQsIDB4MTEsIDB4NDAsIDB4MDQsIDB4MjAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDExLCAweEEwLCAweDMzLCAweDAwLCAweERELCAweDAwLCAweDE0LCAweDAzLCAweEQwLCAweDBELCAweDQwLCAweDMwLAorMHgwOCwgMHhDQywgMHg4MCwgMHgzNiwgMHgxMywgMHhEMCwgMHg0QywgMHg0MCwgMHgzMywgMHgwMCwgMHhDRCwgMHgwMCwgMHgwNCwKKzB4MDMsIDB4MTEsIDB4MEMsIDB4NDAsIDB4MzAsIDB4MDAsIDB4QzEsIDB4ODAsIDB4NzQsIDB4MDMsIDB4MTgsIDB4MEMsIDB4NDAsCisweDQ0LCAweDgwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweDgwLCAweDA1LAorMHgwMCwgMHgxRCwgMHgwMCwgMHg1NCwgMHg4MCwgMHhEMCwgMHgwMSwgMHg0MCwgMHgwNCwgMHgxOCwgMHgxRCwgMHgwMCwgMHg3NCwKKzB4MDAsIDB4RDAsIDB4MDEsIDB4NDAsIDB4MDcsIDB4MDAsIDB4MEQsIDB4MDAsIDB4NDUsIDB4MDAsIDB4NTAsIDB4MDEsIDB4NDAsCisweDA0LCAweDAwLCAweDExLCAweDYwLCAweDc2LCAweDAwLCAweDEwLCAweDAxLCAweDQwLCAweDBDLCAweDIwLCAweDA2LCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhBMCwgMHgzNywgMHgwMCwgMHhERiwgMHgyMCwgMHg1QywKKzB4MDMsIDB4RjIsIDB4MEQsIDB4RDAsIDB4MzQsIDB4MDAsIDB4REYsIDB4MDAsIDB4N0MsIDB4MDMsIDB4RjAsIDB4MEQsIDB4QzAsCisweDM3LCAweDAwLCAweERGLCAweDAwLCAweDRDLCAweDgzLCAweDMwLCAweDBDLCAweEMwLCAweDMwLCAweDAwLCAweEQzLCAweDAwLAorMHgzQywgMHg4MywgMHgzMSwgMHgwRCwgMHhDMCwgMHgwMCwgMHgyMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDcsIDB4ODAsIDB4MEQsIDB4MDAsIDB4M0YsIDB4MDAsIDB4RUMsIDB4MDAsIDB4RjAsIDB4MDMsIDB4QzAsCisweDBGLCAweDAwLCAweDNGLCAweDAwLCAweEZDLCAweDAwLCAweEYyLCAweDAzLCAweEMwLCAweDBGLCAweDAwLCAweDNGLCAweEIwLAorMHhGQywgMHgwMCwgMHhGMiwgMHgwMywgMHhEMCwgMHgwRiwgMHgwMCwgMHgzRiwgMHg4MCwgMHhGQywgMHgwMCwgMHhGMCwgMHgwMywKKzB4RDEsIDB4MUYsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDAsCisweDM1LCAweDAwLCAweERGLCAweDAxLCAweDRDLCAweDAzLCAweDMwLCAweDBELCAweEMwLCAweDM0LCAweDAwLCAweEQzLCAweDgwLAorMHg0QywgMHgyMywgMHgzNCwgMHg4RCwgMHhDMCwgMHg3NCwgMHgwMCwgMHhERiwgMHgwMCwgMHg0QywgMHgwMywgMHgzMCwgMHgwRCwKKzB4QzAsIDB4MzQsIDB4MDEsIDB4RDMsIDB4MDAsIDB4NEMsIDB4ODMsIDB4RjAsIDB4MEQsIDB4QzAsIDB4MEIsIDB4MjAsIDB4MDQsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEzLCAweEEwLCAweDA0LCAweDAwLCAweDBELCAweDAwLAorMHg0MCwgMHg0MCwgMHgxMCwgMHgxMCwgMHg1MCwgMHgwNCwgMHgwMCwgMHgxQSwgMHgwNSwgMHg0NCwgMHgwMCwgMHgxMCwgMHgxMSwKKzB4QzAsIDB4ODYsIDB4MDAsIDB4MUQsIDB4MDMsIDB4MDQsIDB4MDQsIDB4MTAsIDB4MTEsIDB4NDAsIDB4ODUsIDB4MDgsIDB4MTEsCisweDExLCAweDZFLCAweDJDLCAweEQwLCAweDMwLCAweDQwLCAweDRGLCAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwNywgMHhBOCwgMHg3MiwgMHgwMiwgMHhDRCwgMHgwMCwgMHgwNiwgMHgwNywgMHgwMCwgMHg5QywKKzB4NDAsIDB4NzAsIDB4ODAsIDB4QzEsIDB4MDEsIDB4MjAsIDB4ODcsIDB4MTAsIDB4MEMsIDB4NDIsIDB4MzAsIDB4MDQsIDB4Q0QsCisweDIwLCAweDA0LCAweDIzLCAweDFBLCAweDFDLCAweDQwLCAweDMwLCAweDAwLCAweEMxLCAweDgxLCAweDI0LCAweDA3LCAweEQwLAorMHgzQywgMHg0MCwgMHgxRiwgMHgwMCwgMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwKKzB4ODAsIDB4NDgsIDB4MDIsIDB4M0QsIDB4MDEsIDB4ODQsIDB4MDQsIDB4MTAsIDB4OTIsIDB4NDAsIDB4NDgsIDB4MDAsIDB4MzksCisweDAxLCAweEU0LCAweDA0LCAweDEwLCAweDMzLCAweDQwLCAweDRBLCAweDIwLCAweDJELCAweDkxLCAweDg1LCAweDE0LCAweDE4LAorMHgxMywgMHg0MSwgMHg0OSwgMHgwMCwgMHgyMSwgMHgwMSwgMHhBNCwgMHg0NCwgMHhEMCwgMHgxMiwgMHg0MSwgMHgxQiwgMHgwMCwKKzB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4MTAsIDB4MzAsIDB4MDAsIDB4Q0YsCisweDgwLCAweDQ0LCAweDIzLCAweDM0LCAweDBDLCAweEMwLCAweDMwLCAweDI2LCAweEMzLCAweDAwLCAweDJELCAweDIzLCAweDMwLAorMHgwQywgMHg0MCwgMHgzMCwgMHgyMCwgMHhDRiwgMHg0NCwgMHgwRSwgMHgwMywgMHgzNCwgMHgwQywgMHhDMCwgMHgzMCwgMHg0MCwKKzB4RDMsIDB4MDgsIDB4MjUsIDB4MDMsIDB4RjAsIDB4MEMsIDB4QzAsIDB4NEIsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweEI4LCAweDBELCAweDA4LCAweDNGLCAweDgwLCAweEZELCAweDAwLCAweEYwLAorMHgwMiwgMHhDMCwgMHgwQiwgMHg4MCwgMHgyRiwgMHgwMCwgMHhEQywgMHgyMCwgMHhGMCwgMHg4MiwgMHhFMCwgMHgwRiwgMHgwMiwKKzB4M0YsIDB4MDAsIDB4QkMsIDB4MTAsIDB4RjAsIDB4MDMsIDB4QzAsIDB4MEIsIDB4MDAsIDB4M0YsIDB4MDAsIDB4NUUsIDB4MDAsCisweEYwLCAweDEzLCAweEMwLCAweDBCLCAweDYwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgxNSwgMHhBMCwgMHgzMywgMHgwMCwgMHhENywgMHgwMCwgMHg3QywgMHg4MywgMHhGMCwgMHgxRCwgMHhDMCwgMHgzNCwgMHgwMCwKKzB4REYsIDB4MDAsIDB4N0MsIDB4MDMsIDB4RjAsIDB4MEQsIDB4QzAsIDB4NzMsIDB4MDAsIDB4RDMsIDB4MDAsIDB4MUMsIDB4MDMsCisweDMwLCAweDBELCAweEMwLCAweDMzLCAweDAwLCAweEQzLCAweDAwLCAweDdFLCAweDAzLCAweEYwLCAweDFELCAweEMwLCAweDU0LAorMHgyMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHg4OCwgMHgwOSwgMHgyMCwKKzB4MjEsIDB4MjAsIDB4QjQsIDB4MDAsIDB4RDAsIDB4MDIsIDB4NDAsIDB4MDgsIDB4MTAsIDB4MkQsIDB4NDAsIDB4QjQsIDB4MDAsCisweEQwLCAweDAyLCAweDQwLCAweDBCLCAweDAwLCAweDIxLCAweDAwLCAweDg0LCAweDAwLCAweDUyLCAweDAyLCAweDQwLCAweDBCLAorMHgwMCwgMHgyMSwgMHgwMCwgMHhCNiwgMHgwMCwgMHhEMSwgMHgwMiwgMHg0MCwgMHg0OCwgMHg2MCwgMHgwNiwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4MDAsIDB4NzksIDB4MDAsIDB4RTUsIDB4QzEsIDB4QjQsIDB4MDcsCisweEQ4LCAweDFGLCAweDQwLCAweDc4LCAweDAwLCAweEVELCAweDAxLCAweEI0LCAweDA3LCAweEQwLCAweDFFLCAweDRBLCAweDdCLAorMHg4OCwgMHhFMSwgMHgwMSwgMHg5NCwgMHgwNywgMHg5NCwgMHgxRSwgMHg0MCwgMHg3RiwgMHgwMCwgMHhFOSwgMHgwMSwgMHhCNCwKKzB4ODcsIDB4RDIsIDB4MUUsIDB4NTIsIDB4MEMsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDEyLCAweDI4LCAweDAzLCAweDAwLCAweDAxLCAweDAwLCAweDM0LCAweDAwLCAweEQ5LCAweDAwLCAweDU2LCAweDAwLAorMHgwOCwgMHgwRCwgMHg4MCwgMHg3NiwgMHgwMCwgMHhEMCwgMHgwMCwgMHg0NCwgMHgwMywgMHgwMCwgMHgwMSwgMHg0MCwgMHgwNCwKKzB4MDAsIDB4RDAsIDB4MDAsIDB4NDgsIDB4MDMsIDB4MDgsIDB4MDksIDB4MDAsIDB4MzQsIDB4MDAsIDB4RDAsIDB4MDAsIDB4NDAsCisweDQ4LCAweDAwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE3LCAweEE4LCAweDExLAorMHgwMCwgMHg1NywgMHgwMCwgMHgzQywgMHgwMSwgMHhGMCwgMHgwNSwgMHhDMCwgMHgxMCwgMHgwMCwgMHg1RiwgMHgwMCwgMHg3QywKKzB4MDEsIDB4RjAsIDB4MDQsIDB4QzAsIDB4MTcsIDB4NDAsIDB4NDMsIDB4MDAsIDB4MUMsIDB4MDEsIDB4QjQsIDB4MDUsIDB4QzAsCisweDE3LCAweDAwLCAweDVCLCAweDAwLCAweDdDLCAweDAxLCAweEYwLCAweDA1LCAweEMwLCAweDVDLCAweDIwLCAweDA2LCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHgwMCwgMHgwRiwgMHgwMCwgMHgzRiwgMHgwMCwgMHhGQywKKzB4MDAsIDB4RjAsIDB4MDMsIDB4QzAsIDB4MEYsIDB4MDAsIDB4M0YsIDB4MDAsIDB4RjQsIDB4MDAsIDB4RjAsIDB4MDMsIDB4QzQsCisweDhGLCAweDAwLCAweDNGLCAweDAwLCAweEZELCAweDA4LCAweDcwLCAweDIzLCAweEMwLCAweDhGLCAweDQwLCAweDM3LCAweDAwLAorMHhGQywgMHgwMCwgMHhGMCwgMHgwMywgMHhDMCwgMHg0QiwgMHgwMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4MjcsIDB4MDAsIDB4OTMsIDB4MDksIDB4N0MsIDB4MjYsIDB4MzAsIDB4MTksIDB4QzAsCisweDY3LCAweDAwLCAweDkzLCAweDA4LCAweDdDLCAweDBBLCAweDMxLCAweDE5LCAweEM4LCAweDY2LCAweDAyLCAweDlGLCAweDgwLAorMHg2QywgMHgwMiwgMHgzNCwgMHgwOSwgMHhDMCwgMHg2NywgMHg0MCwgMHg5MiwgMHgwNSwgMHg3QywgMHgwMiwgMHhGMCwgMHgwOSwKKzB4QzAsIDB4NDMsIDB4MjAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MjAsCisweDI2LCAweDAwLCAweDkxLCAweDAxLCAweDc0LCAweDAyLCAweDUxLCAweDE5LCAweDQwLCAweDI3LCAweDAwLCAweDkxLCAweDAxLAorMHg3NCwgMHgwMiwgMHgxMCwgMHg4OSwgMHg0MCwgMHg2NCwgMHgwMSwgMHg5RCwgMHgwMCwgMHg0NCwgMHgxMiwgMHgxMCwgMHgzOSwKKzB4NDgsIDB4MjMsIDB4MDIsIDB4OTEsIDB4MDEsIDB4NzQsIDB4MEUsIDB4RDAsIDB4MDksIDB4NDAsIDB4MDcsIDB4MDAsIDB4MDgsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweEEwLCAweDI0LCAweDAxLCAweEIxLCAweDgwLAorMHhGNCwgMHgwMiwgMHgxMCwgMHg4QiwgMHg0MCwgMHgyRiwgMHgwMSwgMHhCMSwgMHgwMCwgMHhGNCwgMHgwMiwgMHgxMCwgMHgwQiwKKzB4NDAsIDB4MkUsIDB4MjAsIDB4QkQsIDB4MDAsIDB4QzQsIDB4MDIsIDB4MTAsIDB4OEIsIDB4NDAsIDB4MkYsIDB4ODAsIDB4QjUsCisweDAwLCAweEY0LCAweDUyLCAweEQwLCAweDBCLCAweDQwLCAweDYzLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgyMCwgMHgyQywgMHgwMCwgMHhBMSwgMHgwMiwgMHhGNCwgMHgwQSwgMHg1MCwgMHgwQSwKKzB4NDAsIDB4MkYsIDB4MDAsIDB4QTEsIDB4MDAsIDB4QjQsIDB4MEEsIDB4MDQsIDB4MUEsIDB4NDAsIDB4MkEsIDB4MDAsIDB4QkQsCisweDAwLCAweDg1LCAweDAyLCAweDE4LCAweDBFLCAweDQwLCAweDJCLCAweDAwLCAweEE1LCAweDAyLCAweEI0LCAweDAyLCAweEQwLAorMHgwQSwgMHg0MCwgMHg0MywgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxRCwKKzB4QjAsIDB4MDYsIDB4MDAsIDB4MTMsIDB4MDAsIDB4N0MsIDB4MDAsIDB4MzAsIDB4MDEsIDB4QzgsIDB4MDcsIDB4NDAsIDB4MTMsCisweDAwLCAweDdDLCAweDAwLCAweDMwLCAweDAxLCAweEMwLCAweDA2LCAweDAwLCAweDBGLCAweDQwLCAweDRDLCAweDAwLCAweDMyLAorMHgwMSwgMHhDMiwgMHgxNywgMHg0MCwgMHgxNywgMHgwMCwgMHg3QywgMHgwMCwgMHhGMCwgMHgwMywgMHhDMCwgMHg3NywgMHhDMCwKKzB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTksIDB4QjgsIDB4MjcsIDB4NDAsIDB4OUYsCisweDAxLCAweDdDLCAweDg2LCAweEYwLCAweDA4LCAweEMwLCAweDI3LCAweDAwLCAweDlGLCAweDAwLCAweDdDLCAweDA2LCAweEYyLAorMHg0OSwgMHg0MSwgMHgyNSwgMHgyMCwgMHg5RiwgMHgxNCwgMHg3QywgMHgwMiwgMHhGMCwgMHgwOSwgMHhDMCwgMHgyNywgMHgwMCwKKzB4OUIsIDB4MDEsIDB4N0MsIDB4MDIsIDB4RjAsIDB4MDgsIDB4QzAsIDB4NjcsIDB4NjAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweEEwLCAweDJGLCAweDAwLCAweEJGLCAweDAwLCAweENDLCAweDAyLCAweEYwLAorMHgwQiwgMHhDMCwgMHgyRiwgMHgwMCwgMHhCRiwgMHgwMCwgMHhGQywgMHgwMiwgMHgzMCwgMHgwQSwgMHhDMCwgMHgyQiwgMHgyMCwKKzB4QUYsIDB4NDIsIDB4OEQsIDB4MDIsIDB4MzAsIDB4MEIsIDB4QzAsIDB4MjgsIDB4MDAsIDB4QjMsIDB4MDIsIDB4Q0MsIDB4MDIsCisweEYwLCAweDBBLCAweEMwLCAweDY0LCAweDAwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgxQywgMHgwOCwgMHgwNywgMHgwMCwgMHgxRCwgMHgxNSwgMHg0NCwgMHg1NCwgMHhEMCwgMHgwMSwgMHg0OCwgMHgwNywgMHgwMCwKKzB4MUQsIDB4MDAsIDB4NzQsIDB4MTQsIDB4MTAsIDB4NTEsIDB4NDEsIDB4MDcsIDB4MDAsIDB4MUQsIDB4ODEsIDB4NDQsIDB4MDAsCisweDUwLCAweDAxLCAweDQ4LCAweDA0LCAweDEwLCAweDE1LCAweDAxLCAweDQ0LCAweDAwLCAweEQwLCAweDAxLCAweDQwLCAweDcxLAorMHgyMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHhBMCwgMHgyMywgMHgwMCwKKzB4OEQsIDB4MDAsIDB4MDQsIDB4MDIsIDB4RDAsIDB4MDgsIDB4NDgsIDB4MjMsIDB4MDAsIDB4OEQsIDB4MDAsIDB4MzQsIDB4NDIsCisweDEwLCAweDA4LCAweDQwLCAweDIzLCAweEEwLCAweDhELCAweDAwLCAweDQ0LCAweDAzLCAweDEwLCAweDA4LCAweDUyLCAweDIwLAorMHgwMCwgMHhEMSwgMHgwNCwgMHgwNCwgMHgwMiwgMHhEMCwgMHgwOSwgMHg0MCwgMHg0MCwgMHg4MCwgMHgwRSwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4QTgsIDB4MjUsIDB4MDAsIDB4OUQsIDB4MDAsIDB4NDQsIDB4MDIsCisweEQwLCAweDA5LCAweDQwLCAweDI3LCAweDEwLCAweDlELCAweDAwLCAweDc0LCAweDAyLCAweDE0LCAweDA5LCAweDQ0LCAweDI3LAorMHgwMCwgMHg4RCwgMHgwMCwgMHg0NCwgMHg4MiwgMHg1MCwgMHgwOSwgMHg0NiwgMHgyNCwgMHgwMCwgMHg5NSwgMHgwMCwgMHg0NCwKKzB4MDIsIDB4RDAsIDB4MDksIDB4NDAsIDB4NjEsIDB4MjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDA1LCAweDI4LCAweDI1LCAweDAwLCAweEJGLCAweDAwLCAweENELCAweDgyLCAweEYwLCAweDA5LCAweEMwLCAweDI3LAorMHgwMCwgMHg5RiwgMHgwMCwgMHhGQywgMHgwMiwgMHgzMCwgMHgwOSwgMHhDMCwgMHgyNywgMHgwMCwgMHg5RiwgMHgwMCwgMHg0QywKKzB4MDIsIDB4MzAsIDB4MDksIDB4QzAsIDB4MjAsIDB4MDgsIDB4QTMsIDB4MDAsIDB4NEQsIDB4MDIsIDB4RjAsIDB4MDksIDB4QzAsCisweDE0LCAweDIwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDAwLCAweDI1LAorMHgwMCwgMHg5RiwgMHgwMCwgMHg3QywgMHgwMiwgMHhGMCwgMHgwOSwgMHhDMCwgMHgyNywgMHgwMCwgMHg5RiwgMHgwMCwgMHg3QywKKzB4MDIsIDB4RjAsIDB4MDksIDB4QzIsIDB4MjcsIDB4MDAsIDB4OUYsIDB4MDAsIDB4N0MsIDB4ODIsIDB4RjAsIDB4MDksIDB4QzAsCisweDI3LCAweDAwLCAweDlGLCAweDAwLCAweDdDLCAweDAyLCAweEYwLCAweDA5LCAweEMwLCAweDUzLCAweDAwLCAweDA0LCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwOCwgMHgwNSwgMHgwMiwgMHgxRiwgMHgwMCwgMHg0QywKKzB4MDAsIDB4RjAsIDB4MDEsIDB4QzAsIDB4MDcsIDB4MDIsIDB4MUYsIDB4MDAsIDB4N0MsIDB4MDAsIDB4NzAsIDB4MDEsIDB4RDAsCisweDA0LCAweDQwLCAweDEzLCAweDAwLCAweDRDLCAweDEwLCAweDMwLCAweDAxLCAweEMwLCAweDA3LCAweDQwLCAweDEzLCAweDAwLAorMHg3QywgMHgwNCwgMHgzMCwgMHgwMSwgMHhDMSwgMHg1MCwgMHgyMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MTQsIDB4MjAsIDB4MTQsIDB4MDAsIDB4NUQsIDB4MjAsIDB4NDQsIDB4MDEsIDB4RDEsIDB4MDUsIDB4NDAsCisweDE3LCAweDEwLCAweDVELCAweDAxLCAweDcwLCAweDAxLCAweEQwLCAweDA3LCAweDQwLCAweERDLCAweDAwLCAweDcxLCAweDgxLAorMHg5NCwgMHgwMSwgMHg1MCwgMHgxNiwgMHg0MSwgMHgxRiwgMHgwMCwgMHg1MSwgMHgwMCwgMHhGNCwgMHgwNSwgMHgxMSwgMHgyNiwKKzB4NTAsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4QTAsCisweDYyLCAweDAwLCAweERELCAweDA4LCAweDA0LCAweDA3LCAweEQwLCAweDg4LCAweDQ4LCAweDMzLCAweDAwLCAweDhELCAweDgwLAorMHg3NCwgMHgwMywgMHg1MCwgMHgwNCwgMHg0MCwgMHhBMCwgMHgwNiwgMHhDOSwgMHgxMSwgMHgwNiwgMHgwMSwgMHgxMCwgMHg0QywKKzB4NDgsIDB4MzMsIDB4MEMsIDB4QzEsIDB4ODAsIDB4MzQsIDB4MDUsIDB4OTAsIDB4MTgsIDB4NDQsIDB4NTAsIDB4MDAsIDB4MEEsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDgwLCAweDM4LCAweDAwLCAweEVELCAweDA4LAorMHg4NCwgMHg1MywgMHhEMCwgMHgwRSwgMHg0MCwgMHgzQiwgMHgwMCwgMHhFRCwgMHgxMCwgMHhCNCwgMHg0MywgMHhEMCwgMHgxRiwKKzB4NDAsIDB4NUMsIDB4MjAsIDB4RjksIDB4NTAsIDB4RDQsIDB4ODAsIDB4NTAsIDB4MEEsIDB4NDAsIDB4MUYsIDB4MjAsIDB4RTEsCisweDA4LCAweEY0LCAweDQ3LCAweDkxLCAweDJCLCAweDQwLCAweDEwLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgxMCwgMHg3OCwgMHgwMCwgMHhGRiwgMHgwNSwgMHg4QywgMHgwNywgMHhGMCwgMHgxRSwKKzB4QzAsIDB4N0IsIDB4MDAsIDB4RUYsIDB4MDEsIDB4QkMsIDB4ODcsIDB4NzAsIDB4MUUsIDB4QzAsIDB4NDgsIDB4MDAsIDB4RUIsCisweDAxLCAweDhDLCAweDA3LCAweDMwLCAweDEyLCAweEMwLCAweDdCLCAweDAwLCAweEEzLCAweDgxLCAweEJDLCAweDA3LCAweEI0LAorMHgxQSwgMHhDMCwgMHg1MCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwKKzB4QjgsIDB4MzUsIDB4MTAsIDB4REYsIDB4MDAsIDB4N0MsIDB4MjMsIDB4RjEsIDB4MEQsIDB4QzAsIDB4MzcsIDB4MDAsIDB4REYsCisweDAwLCAweDdDLCAweDAzLCAweEYwLCAweDBGLCAweEMwLCAweDA2LCAweDAwLCAweEQ3LCAweDAwLCAweDc4LCAweDAyLCAweEYwLAorMHgwMSwgMHhDMCwgMHgzNywgMHgwMCwgMHg5RCwgMHgwMCwgMHgzQywgMHgwMywgMHg3MCwgMHgwOSwgMHhDMCwgMHg0MywgMHg2MCwKKzB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4QTgsIDB4N0YsIDB4MDAsIDB4QkYsCisweDAwLCAweEZDLCAweDA2LCAweDMwLCAweDlGLCAweEMwLCAweDdGLCAweDAwLCAweEUzLCAweDAxLCAweDhDLCAweDQ3LCAweDMwLAorMHgxNywgMHhDMCwgMHg0RiwgMHgwMCwgMHgzRiwgMHgwMSwgMHg5QywgMHgwNCwgMHg3MCwgMHgxNiwgMHhDNCwgMHg1QywgMHgwMCwKKzB4RUYsIDB4MDEsIDB4Q0MsIDB4MDcsIDB4RjAsIDB4MUIsIDB4QzIsIDB4MEIsIDB4MDAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE1LCAweDk4LCAweDM5LCAweDA0LCAweEFELCAweDBDLCAweEI0LCAweDAyLCAweDExLAorMHg4RSwgMHg0MCwgMHgzQiwgMHgxMCwgMHhFMSwgMHgwMCwgMHg4NCwgMHgyMywgMHgxMCwgMHgwRSwgMHg0MCwgMHgwQiwgMHgxMCwKKzB4NkQsIDB4MEEsIDB4ODUsIDB4NjAsIDB4NTUsIDB4ODYsIDB4QzAsIDB4OUEsIDB4MTAsIDB4RUQsIDB4MDAsIDB4ODQsIDB4MDMsCisweEQwLCAweDBBLCAweDQ0LCAweDU3LCAweDIwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgzOSwgMHgwMCwgMHhBRCwgMHgwOCwgMHhGNCwgMHgwMiwgMHgxMCwgMHg4RSwgMHg0MCwgMHgzRiwgMHgwNCwKKzB4RTEsIDB4MTAsIDB4RTQsIDB4MDMsIDB4MTAsIDB4MEUsIDB4NDEsIDB4MEIsIDB4MDAsIDB4MkQsIDB4MTAsIDB4OTQsIDB4MDAsCisweEQwLCAweDA3LCAweDQxLCAweDNBLCAweDAwLCAweEJELCAweDBBLCAweEE0LCAweDAzLCAweEQwLCAweDBBLCAweDQxLCAweDIzLAorMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNiwgMHgyMCwgMHgzMywgMHgwMCwKKzB4OEQsIDB4MDMsIDB4NzQsIDB4MEEsIDB4MTAsIDB4NUMsIDB4NDAsIDB4RTMsIDB4MDAsIDB4QzEsIDB4NDEsIDB4MjQsIDB4MEUsCisweDEwLCAweDFELCAweDQwLCAweDgzLCAweDAyLCAweDVELCAweDAzLCAweDA0LCAweDA0LCAweEQwLCAweDE0LCAweDQwLCAweDcyLAorMHgxMCwgMHg5RCwgMHgwMSwgMHgyNCwgMHgwQiwgMHhEMSwgMHgxOCwgMHg0MCwgMHgxQiwgMHgyMCwgMHgwQywgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTUsIDB4QTgsIDB4MzUsIDB4MDAsIDB4REYsIDB4ODksIDB4N0MsIDB4MDMsCisweDMwLCAweDJELCAweEMwLCAweDc3LCAweDQwLCAweEQzLCAweDAxLCAweDZDLCAweDQ2LCAweDM0LCAweDE5LCAweEMwLCAweDgzLAorMHgwMCwgMHg1RiwgMHg0MSwgMHgxQywgMHgwOCwgMHhGMCwgMHhCMSwgMHhDMCwgMHg3NiwgMHgwNCwgMHhERiwgMHgxMSwgMHgyQywKKzB4MDIsIDB4RjAsIDB4MUQsIDB4QzIsIDB4NzcsIDB4MjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAxLCAweDAwLCAweDM3LCAweDAwLCAweERGLCAweDA4LCAweDc4LCAweDE3LCAweEYwLCAweDhELCAweEMwLCAweDM3LAorMHgwMCwgMHhERiwgMHgxMCwgMHg1QywgMHgwMiwgMHhGMCwgMHgwRCwgMHhDMSwgMHgwNywgMHgwNCwgMHhERiwgMHgwMCwgMHg3QywKKzB4NDgsIDB4NjAsIDB4MDEsIDB4QzQsIDB4MzcsIDB4MDAsIDB4REYsIDB4MDAsIDB4NUMsIDB4MEYsIDB4RjAsIDB4MkQsIDB4QzEsCisweDA3LCAweDAwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDA4LCAweDNGLAorMHgwNiwgMHhGMywgMHgwNCwgMHhGQywgMHgwQiwgMHgzMCwgMHg5RiwgMHhDOCwgMHgzRiwgMHgwNCwgMHhGRiwgMHg4MCwgMHhDQywKKzB4NTYsIDB4RjAsIDB4MEYsIDB4RDAsIDB4MEMsIDB4MDAsIDB4NzMsIDB4MTAsIDB4Q0MsIDB4MDAsIDB4QjAsIDB4MDMsIDB4QzAsCisweDJGLCAweDA0LCAweEIyLCAweDAzLCAweEM4LCAweDQzLCAweDMwLCAweDBGLCAweEMwLCAweDA3LCAweDI0LCAweDBDLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MSwgMHgyMCwgMHg3MiwgMHg0MCwgMHg5MSwgMHgwMSwgMHg3NCwKKzB4MDYsIDB4MTAsIDB4MUQsIDB4NDQsIDB4MzcsIDB4MDgsIDB4Q0QsIDB4NDAsIDB4NDQsIDB4MDYsIDB4RDAsIDB4M0QsIDB4NDAsCisweDQ0LCAweDMwLCAweERGLCAweEMwLCAweDQ1LCAweDA0LCAweDEwLCAweDcxLCAweDQ0LCAweDYzLCAweDEwLCAweEQxLCAweDAxLAorMHg0NCwgMHgxNywgMHhCMCwgMHgwRCwgMHg0MCwgMHgyNywgMHgwMiwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDEsIDB4QTAsIDB4MzYsIDB4MDAsIDB4OTEsIDB4ODAsIDB4NzQsIDB4MDIsIDB4MTAsIDB4MEQsIDB4NDAsCisweDM3LCAweDAwLCAweERELCAweDA0LCAweDQ0LCAweDAyLCAweEQwLCAweDE5LCAweDQxLCAweDQ2LCAweDAwLCAweDExLCAweDAwLAorMHg0NCwgMHgwQywgMHg5QSwgMHgxNSwgMHg0MiwgMHg3NywgMHgwMCwgMHhENSwgMHgwMCwgMHg3NywgMHgwNywgMHgwMCwgMHg0OSwKKzB4NDEsIDB4MDcsIDB4MDAsIDB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsCisweDM0LCAweDAwLCAweDgxLCAweDAwLCAweDM0LCAweDAyLCAweDE0LCAweDBDLCAweDQwLCAweDMzLCAweDAwLCAweERELCAweDAwLAorMHgwNiwgMHgwMywgMHhEMCwgMHgwQywgMHg0MCwgMHg0NCwgMHgyOCwgMHg0NSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgxMCwgMHgwNCwKKzB4NDAsIDB4MzMsIDB4NjAsIDB4ODUsIDB4MDAsIDB4MzQsIDB4MDMsIDB4OTAsIDB4MDQsIDB4NDAsIDB4NDMsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDM2LCAweDAwLCAweEQzLCAweDAwLAorMHg3QywgMHgwMywgMHgxMCwgMHgwRCwgMHhDMCwgMHgzNywgMHgyMCwgMHhERiwgMHgwMCwgMHg0RCwgMHgwMiwgMHhGMCwgMHgwRCwKKzB4QzAsIDB4MDQsIDB4MDAsIDB4MDEsIDB4ODAsIDB4NEMsIDB4MDAsIDB4QjQsIDB4MDUsIDB4QzAsIDB4MjcsIDB4MDAsIDB4OTcsCisweDAwLCAweDdDLCAweDAzLCAweDMwLCAweDA5LCAweEMwLCAweDA3LCAweDQwLCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHhCOCwgMHgzRiwgMHgwMCwgMHhCRiwgMHgwMCwgMHhCQywgMHgwMiwgMHhGMSwgMHgwRiwKKzB4QzAsIDB4MkIsIDB4MTAsIDB4RkYsIDB4MDAsIDB4RkMsIDB4MDIsIDB4RjAsIDB4MEYsIDB4ODAsIDB4MEYsIDB4MjAsIDB4N0YsCisweDAwLCAweEZELCAweDAwLCAweEYwLCAweDA3LCAweEMwLCAweDJGLCAweDAwLCAweEJCLCAweDQwLCAweENDLCAweDgzLCAweEYwLAorMHgwNywgMHhDNCwgMHgxNywgMHg2MCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywKKzB4QTAsIDB4N0YsIDB4MDAsIDB4RUYsIDB4MDEsIDB4OEMsIDB4MDcsIDB4NzAsIDB4MUIsIDB4RDAsIDB4MjgsIDB4MDEsIDB4QTcsCisweDAxLCAweEZDLCAweDMyLCAweDMwLCAweDFBLCAweEMwLCAweDNDLCAweDAwLCAweEIzLCAweDE0LCAweEVDLCAweDEyLCAweDMwLAorMHg4QiwgMHhDMCwgMHgzRCwgMHgwQywgMHhCRiwgMHgwOCwgMHhDQywgMHgwMiwgMHhGMSwgMHgwRiwgMHhDMCwgMHgwRiwgMHgwMCwKKzB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4MTgsIDB4NzcsIDB4MDAsIDB4OUQsCisweDAxLCAweDQ0LCAweDA2LCAweDEwLCAweDExLCAweDQyLCAweDY0LCAweDAwLCAweDUxLCAweDAxLCAweDQ0LCAweDBBLCAweDEwLAorMHgxOSwgMHg0MCwgMHhGQywgMHgxMiwgMHg5MSwgMHgwMiwgMHg0NCwgMHgzQSwgMHgxMCwgMHg0OSwgMHg0MCwgMHhCQywgMHgwMCwKKzB4OUQsIDB4MDAsIDB4NDQsIDB4MkEsIDB4RDAsIDB4MEQsIDB4NDQsIDB4MEYsIDB4NjAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEzLCAweEEwLCAweDMxLCAweDAwLCAweERELCAweDAwLCAweDQ0LCAweDg1LCAweDUwLAorMHgwNCwgMHg0OCwgMHgwMCwgMHg4MiwgMHhENSwgMHgwMCwgMHgxNCwgMHgxOCwgMHg1MCwgMHgwOSwgMHg0MCwgMHgzMiwgMHgwMCwKKzB4ODUsIDB4MDAsIDB4MzQsIDB4NDAsIDB4NTAsIDB4ODgsIDB4NDIsIDB4MzEsIDB4MjQsIDB4MDksIDB4MDYsIDB4MDQsIDB4MDAsCisweEQwLCAweDBDLCAweDQwLCAweDRGLCAweDgwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMywgMHhBMCwgMHgzNywgMHgwMCwgMHhERCwgMHgxMSwgMHg0NSwgMHgwNSwgMHgxMCwgMHgxMSwgMHg0NCwgMHg0NCwgMHgwMCwKKzB4RDEsIDB4MDMsIDB4MDQsIDB4OEMsIDB4MTEsIDB4ODksIDB4NDAsIDB4MzYsIDB4ODAsIDB4OTQsIDB4NDEsIDB4MTQsIDB4MDQsCisweDUwLCAweDE5LCAweDQwLCAweDM0LCAweDAwLCAweDBELCAweDExLCAweDQ0LCAweDBDLCAweEQwLCAweDBELCAweDIwLCAweDBGLAorMHgwMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHhBOCwgMHgzNywgMHgwMCwKKzB4Q0YsIDB4MDEsIDB4MEMsIDB4MDQsIDB4NzAsIDB4MTAsIDB4NDAsIDB4NDQsIDB4MjAsIDB4QzcsIDB4MDMsIDB4NUMsIDB4MEUsCisweDcwLCAweDQwLCAweEQwLCAweDMyLCAweDA4LCAweDE3LCAweEEzLCAweDdDLCAweDk2LCAweDcxLCAweDExLCAweEMwLCAweDM1LAorMHgxMCwgMHgxRiwgMHgwMywgMHg0RSwgMHgwRSwgMHhGOCwgMHgwRCwgMHhDMCwgMHgwQiwgMHgyMCwgMHgwRSwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4ODAsIDB4M0QsIDB4MDAsIDB4RkYsIDB4ODAsIDB4RkMsIDB4MDAsCisweEYwLCAweDAzLCAweEMwLCAweDJCLCAweDAwLCAweDdGLCAweDAwLCAweDdDLCAweDAyLCAweEYyLCAweDBCLCAweEMwLCAweDNELAorMHg2MCwgMHg5QiwgMHgwMCwgMHhFQywgMHgwMiwgMHhCMCwgMHgwMCwgMHhDMCwgMHgzRiwgMHgwMCwgMHhCRiwgMHhBMCwgMHhGRiwKKzB4MDIsIDB4RjAsIDB4MEQsIDB4QzAsIDB4MUYsIDB4MDAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDJBLCAweDA4LCAweDM1LCAweDAwLCAweERGLCAweDAzLCAweDRDLCAweDAxLCAweDMwLCAweDA1LCAweEMwLCAweDA3LAorMHgyNCwgMHhEMywgMHgwNCwgMHg1QywgMHgwMiwgMHgzMCwgMHgyMSwgMHhDMCwgMHgzNiwgMHgwMSwgMHgxNywgMHgwMCwgMHg1QywKKzB4ODIsIDB4RjAsIDB4MjksIDB4QzAsIDB4NzYsIDB4MDQsIDB4MTMsIDB4MDIsIDB4N0MsIDB4MDYsIDB4MzAsIDB4MEQsIDB4QzIsCisweEE5LCAweDIwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEzLCAweEEwLCAweDM0LAorMHgwOCwgMHhEQywgMHgwMSwgMHg0NiwgMHgwNSwgMHgxMCwgMHg0MSwgMHg0OCwgMHgyNywgMHgwMCwgMHg1MSwgMHg4MSwgMHg0NCwKKzB4MDIsIDB4MTAsIDB4MTksIDB4QzQsIDB4QkUsIDB4MDAsIDB4OUIsIDB4MDAsIDB4NDQsIDB4MDIsIDB4RDEsIDB4MDksIDB4NDgsCisweEJDLCAweDAwLCAweDExLCAweDgwLCAweDc0LCAweDIyLCAweDEwLCAweDBGLCAweDQwLCAweDRDLCAweDAwLCAweDAyLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHgyMCwgMHgzMiwgMHgwOCwgMHhDRCwgMHgwMCwgMHgwNiwKKzB4MzMsIDB4MTAsIDB4MDQsIDB4NDAsIDB4MjMsIDB4MDIsIDB4NDksIDB4MDIsIDB4MTQsIDB4MDAsIDB4MTAsIDB4MkMsIDB4NTEsCisweDMzLCAweDAwLCAweDE0LCAweDAwLCAweDEwLCAweDAwLCAweEQwLCAweDAwLCAweDQwLCAweEIyLCAweDAwLCAweDgxLCAweDgwLAorMHgzNCwgMHgwMCwgMHgxMSwgMHgwQywgMHg0OCwgMHgwRiwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MEQsIDB4MDgsIDB4N0EsIDB4MDAsIDB4RkQsIDB4MDEsIDB4ODQsIDB4MDcsIDB4MTEsIDB4MTIsIDB4NDAsCisweDdCLCAweDEwLCAweDc5LCAweDExLCAweDk0LCAweDA3LCAweDEwLCAweDFGLCAweDQxLCAweDdCLCAweDAwLCAweDZDLCAweDAxLAorMHg5NCwgMHgwNywgMHhEOCwgMHgxRSwgMHg0MCwgMHg3MCwgMHg0MiwgMHhFMSwgMHgwMSwgMHhCNCwgMHgwNywgMHg1QywgMHgxRSwKKzB4NDAsIDB4MzcsIDB4MjAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4MTAsCisweDMyLCAweDAwLCAweENGLCAweDAwLCAweDA0LCAweDIxLCAweDEyLCAweDg0LCAweEMwLCAweDMzLCAweDAxLCAweENCLCAweDAwLAorMHgxQywgMHgyMSwgMHgzMCwgMHg0QywgMHhDMCwgMHgzMywgMHgwMCwgMHhDNywgMHhFOCwgMHgxQywgMHg4MSwgMHhGMCwgMHgyNCwKKzB4QzAsIDB4MzIsIDB4MDIsIDB4QzMsIDB4MDAsIDB4N0MsIDB4MTEsIDB4MzAsIDB4MEMsIDB4QzAsIDB4NEIsIDB4NDAsIDB4MDgsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweEE4LCAweDNELCAweDAwLCAweEZGLCAweDAwLAorMHhGQywgMHg4MSwgMHhGMCwgMHg4MywgMHhDMCwgMHgzRiwgMHgwMCwgMHhGNywgMHgwMCwgMHhFQywgMHgwMywgMHhGMCwgMHgwRiwKKzB4Q0MsIDB4M0EsIDB4MDAsIDB4RkIsIDB4MDAsIDB4RUMsIDB4MDMsIDB4RjAsIDB4MEYsIDB4QzAsIDB4QkYsIDB4MDIsIDB4RkYsCisweDQ4LCAweEZDLCAweDAxLCAweEIwLCAweDBGLCAweEMwLCAweDA4LCAweDIwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHhBMiwgMHgzNywgMHgyMCwgMHhERiwgMHgwMCwgMHg0QywgMHgwMywgMHhGMCwgMHgwNSwKKzB4QzIsIDB4MTMsIDB4MDAsIDB4NTcsIDB4MDAsIDB4N0MsIDB4MDEsIDB4RjAsIDB4MUQsIDB4QzAsIDB4MzYsIDB4MDAsIDB4NUYsCisweDQwLCAweDdDLCAweDAxLCAweDcwLCAweDE1LCAweEMwLCAweDM0LCAweDAxLCAweDUzLCAweDAxLCAweDRELCAweDAxLCAweDEwLAorMHgwRCwgMHhDNCwgMHg0MywgMHgwMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMywKKzB4OTgsIDB4MzksIDB4MDgsIDB4RUQsIDB4MDAsIDB4ODQsIDB4MDEsIDB4RDAsIDB4MDIsIDB4NDAsIDB4M0IsIDB4MDAsIDB4NjEsCisweDAwLCAweEI0LCAweDAzLCAweEQwLCAweDBFLCAweDQwLCAweDNBLCAweDA0LCAweEVELCAweDAwLCAweEI0LCAweDAzLCAweEQwLAorMHgwNywgMHg1MCwgMHhCQywgMHgwMCwgMHhGMSwgMHgwMCwgMHhDNCwgMHgwMywgMHgxMCwgMHg0RSwgMHg0MCwgMHg0RiwgMHg2MCwKKzB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4NzksIDB4MDAsIDB4RkQsCisweDExLCAweEE2LCAweDA1LCAweEQwLCAweDE2LCAweDQwLCAweDVCLCAweDA0LCAweDY1LCAweDAxLCAweEI0LCAweDA1LCAweEQwLAorMHgwQSwgMHg1MCwgMHg3QSwgMHg5MywgMHg2RCwgMHgwMSwgMHhCNCwgMHgwNSwgMHg1MCwgMHgxRSwgMHg0MCwgMHg3OCwgMHg0MSwKKzB4RTUsIDB4MDMsIDB4ODQsIDB4MDcsIDB4MTAsIDB4OUUsIDB4NDAsIDB4MTMsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE2LCAweDIwLCAweDMzLCAweDAwLCAweDRELCAweDEyLCAweDA2LCAweEJELCAweEQwLAorMHgyMCwgMHg0MCwgMHgzMywgMHgwMCwgMHg0MSwgMHgwMSwgMHg3NCwgMHg0NywgMHhEMCwgMHhFQywgMHg0MCwgMHgzMiwgMHg4MCwKKzB4Q0QsIDB4MEEsIDB4MzQsIDB4MkIsIDB4RDAsIDB4MEMsIDB4NDAsIDB4MzQsIDB4MDAsIDB4QzUsIDB4MDAsIDB4MDQsIDB4OEIsCisweDEwLCAweDBDLCAweDQwLCAweDVCLCAweDAwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgxNywgMHhBOCwgMHgxNywgMHgwMCwgMHg2RiwgMHgwMiwgMHhFQywgMHgwOSwgMHhGMiwgMHgwNywgMHhDMCwgMHgxQiwgMHgwQSwKKzB4NzcsIDB4MDcsIDB4RkMsIDB4MTUsIDB4RjAsIDB4MDYsIDB4QzAsIDB4MTYsIDB4MDAsIDB4N0YsIDB4MjEsIDB4RjQsIDB4MkQsCisweDc4LCAweDg3LCAweEMxLCAweDE0LCAweDAwLCAweDc3LCAweDAwLCAweENDLCAweDM5LCAweDMwLCAweDA1LCAweEMwLCAweDVGLAorMHgyMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHg4MCwgMHgwNSwgMHgwMCwKKzB4MUYsIDB4ODIsIDB4N0QsIDB4MDAsIDB4RjMsIDB4MDEsIDB4MDEsIDB4MDcsIDB4MDAsIDB4MUYsIDB4MTAsIDB4N0MsIDB4MDAsCisweEMwLCAweDIxLCAweEMwLCAweDA1LCAweDIwLCAweDFGLCAweDEwLCAweDdDLCAweDAwLCAweEYwLCAweDAxLCAweEMwLCAweDA3LAorMHgwMCwgMHgxOSwgMHgwNCwgMHg3QywgMHgwOCwgMHhGNCwgMHgwMSwgMHhDMCwgMHg0QiwgMHgwMCwgMHgwNiwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4MjUsIDB4MDAsIDB4OUYsIDB4MDQsIDB4NUMsIDB4MEUsCisweEYwLCAweDQ5LCAweEM0LCAweDI0LCAweDA4LCAweDlCLCAweDAwLCAweDRELCAweDAyLCAweDMwLCAweDk5LCAweDAyLCAweDY3LAorMHgwMSwgMHg5RiwgMHgwMCwgMHg3QywgMHgwMiwgMHhGMCwgMHgwOSwgMHhDMCwgMHgyNywgMHgxMCwgMHg5NywgMHg4MCwgMHgzQywKKzB4MEUsIDB4NzAsIDB4NDksIDB4QzAsIDB4NDMsIDB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAxLCAweDIwLCAweDI2LCAweDAwLCAweDlELCAweDAwLCAweDQ0LCAweDFBLCAweEQwLCAweDc4LCAweDQ0LCAweDI0LAorMHgxMCwgMHg4MSwgMHgwMCwgMHg0NCwgMHgwMiwgMHgxMCwgMHgyOSwgMHg0NCwgMHhBNCwgMHgwOCwgMHg5RCwgMHgwMCwgMHg3NCwKKzB4ODIsIDB4RDEsIDB4MDksIDB4NDAsIDB4NjcsIDB4MDAsIDB4OTEsIDB4ODAsIDB4NzQsIDB4MDYsIDB4MTAsIDB4MDksIDB4NDAsCisweDA3LCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFDLCAweEEwLCAweDI0LAorMHgwMCwgMHg5RCwgMHgwMCwgMHg1NCwgMHgwMiwgMHhEMCwgMHgwRCwgMHg0NCwgMHgzNCwgMHgyMCwgMHg5OSwgMHgwOCwgMHg0NCwKKzB4MDIsIDB4MTAsIDB4MDksIDB4NjAsIDB4MjcsIDB4MDQsIDB4REQsIDB4MDAsIDB4NzQsIDB4MDIsIDB4RDAsIDB4MDksIDB4NDAsCisweDI3LCAweDAxLCAweDk1LCAweDAwLCAweDc0LCAweDQyLCAweDUwLCAweDA5LCAweDQwLCAweDczLCAweDAwLCAweDAyLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgyOCwgMHgyMCwgMHgwMCwgMHhDRCwgMHgwMCwgMHgwNCwKKzB4MDIsIDB4RDAsIDB4MDksIDB4NDgsIDB4MjAsIDB4MDUsIDB4ODEsIDB4MDAsIDB4MDQsIDB4NTIsIDB4MTAsIDB4MEMsIDB4NDAsCisweDIxLCAweDE1LCAweDhELCAweDE0LCAweDM0LCAweDUyLCAweEQwLCAweDQ4LCAweDQxLCAweDMzLCAweDA1LCAweDgxLCAweDE0LAorMHgzNCwgMHg1MiwgMHgxMCwgMHg0OCwgMHg0MCwgMHg1MywgMHhBMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MUQsIDB4QjAsIDB4MDYsIDB4MDAsIDB4MUYsIDB4MDAsIDB4NUMsIDB4MDAsIDB4RjAsIDB4MDEsIDB4QzAsCisweDA0LCAweDAxLCAweDFCLCAweDAwLCAweDRDLCAweDEwLCAweDM0LCAweDAxLCAweEMwLCAweDA3LCAweDIxLCAweDFGLCAweDA2LAorMHg3QywgMHgxMCwgMHhGMCwgMHg0MSwgMHhDOCwgMHgwNywgMHgwMSwgMHgxNywgMHgwNCwgMHg3QywgMHgxMCwgMHg3MCwgMHgwMSwKKzB4QzQsIDB4NzcsIDB4QzAsIDB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTksIDB4QTAsCisweDI3LCAweDAwLCAweEFGLCAweDAwLCAweEZDLCAweDAyLCAweEYyLCAweDBCLCAweEQwLCAweDJGLCAweDAwLCAweEJGLCAweDAwLAorMHhGQywgMHg1MiwgMHhGMCwgMHgwQSwgMHhDMCwgMHgyNiwgMHgwMCwgMHhCRiwgMHgxMCwgMHhGQywgMHg1MiwgMHhGMCwgMHg0QiwKKzB4QzEsIDB4MjcsIDB4MDUsIDB4QkYsIDB4MTQsIDB4RkMsIDB4NTIsIDB4RjAsIDB4NjksIDB4QzMsIDB4NjcsIDB4MjAsIDB4MEUsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDgwLCAweDI1LCAweDAwLCAweEJGLCAweDAwLAorMHhDQywgMHgwMiwgMHhGMCwgMHgwQiwgMHhDMCwgMHg2RiwgMHg2MCwgMHhCMywgMHgwMCwgMHg3QywgMHgyNiwgMHhGMCwgMHgwQSwKKzB4QzAsIDB4MkQsIDB4MDAsIDB4OTMsIDB4MDIsIDB4N0MsIDB4NTIsIDB4MzAsIDB4MzksIDB4QzEsIDB4QUYsIDB4MDAsIDB4OUYsCisweDA5LCAweENDLCAweDA2LCAweEYwLCAweDVCLCAweEUwLCAweDYzLCAweDAwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgxQywgMHgxOCwgMHgwNywgMHgwMCwgMHg1RCwgMHgwMCwgMHg0NCwgMHgwMCwgMHhEMCwgMHgwMSwKKzB4NDAsIDB4MDcsIDB4MDAsIDB4MTEsIDB4MDAsIDB4NzQsIDB4MkMsIDB4RDAsIDB4MDEsIDB4NDAsIDB4MDQsIDB4MDAsIDB4MTEsCisweDAxLCAweDc0LCAweDE4LCAweDEwLCAweDIxLCAweDQwLCAweDQ3LCAweDA5LCAweDFELCAweDBCLCAweDQ0LCAweDAwLCAweEQwLAorMHgwMSwgMHg0MCwgMHg3MywgMHg2MCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwKKzB4MjAsIDB4MjEsIDB4MDAsIDB4OEQsIDB4MDAsIDB4MDQsIDB4MDIsIDB4RDAsIDB4MDgsIDB4NDAsIDB4QTMsIDB4MDAsIDB4ODUsCisweDAxLCAweDM0LCAweDEyLCAweEQwLCAweDA5LCAweDQwLCAweEEzLCAweDgwLCAweDgxLCAweDI2LCAweDM0LCAweDQyLCAweDE0LAorMHgwOCwgMHg0MCwgMHhBMywgMHgwMCwgMHg4RCwgMHgwNCwgMHgwNCwgMHgwQSwgMHhEMCwgMHg2OCwgMHg0MSwgMHg0QiwgMHgwMCwKKzB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MjAsIDB4MjUsIDB4MDAsIDB4OUQsCisweDAwLCAweDQ2LCAweDA2LCAweEQzLCAweDE5LCAweDQwLCAweDI3LCAweDA0LCAweDk1LCAweDA0LCAweDc2LCAweDEyLCAweEQyLAorMHg0OSwgMHg0MCwgMHgyNCwgMHhDMCwgMHg5MSwgMHgwMiwgMHg3NCwgMHg4MiwgMHgwMCwgMHgwOSwgMHg0MSwgMHgyNywgMHgwMCwKKzB4OUQsIDB4MDIsIDB4NDQsIDB4MDIsIDB4RDIsIDB4MDksIDB4NDgsIDB4NjMsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweEE4LCAweDI3LCAweDAwLCAweDhGLCAweDAyLCAweDQ0LCAweDE2LCAweEYyLAorMHgzOSwgMHhDMSwgMHhBNywgMHgwMCwgMHg5NywgMHgwMiwgMHg3QywgMHgxNiwgMHhGMiwgMHgwOSwgMHhDMCwgMHgyNSwgMHgwMCwKKzB4OTMsIDB4QzIsIDB4N0MsIDB4MTIsIDB4MzAsIDB4MDksIDB4QzAsIDB4MjcsIDB4MDAsIDB4OUYsIDB4MDksIDB4NEQsIDB4NkUsCisweEQ4LCAweDA5LCAweDQ4LCAweDE3LCAweDI4LCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgxMiwgMHg4MCwgMHgyNSwgMHgwMCwgMHg5RiwgMHgwMiwgMHg3RCwgMHgwMiwgMHhGMCwgMHgwOSwgMHhDMCwgMHg2MywgMHgwMiwKKzB4OUIsIDB4QTAsIDB4N0MsIDB4MDIsIDB4RjEsIDB4MTksIDB4QzAsIDB4MjcsIDB4MjAsIDB4OUYsIDB4MDUsIDB4N0MsIDB4MTYsCisweEYwLCAweDU5LCAweEMwLCAweDI3LCAweDAwLCAweDhGLCAweDAxLCAweDdDLCAweDQ2LCAweEYwLCAweDA5LCAweEMwLCAweDRCLAorMHgwMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHgwNSwgMHgwMCwKKzB4MUYsIDB4MDQsIDB4NkMsIDB4MDgsIDB4RjAsIDB4MDEsIDB4QzAsIDB4ODcsIDB4MDAsIDB4MUYsIDB4MDAsIDB4N0MsIDB4MDgsCisweEYwLCAweDAxLCAweEQwLCAweDAwLCAweDAwLCAweDE3LCAweDAwLCAweDdDLCAweDA4LCAweEYwLCAweDIxLCAweEMyLCAweDA0LAorMHgwNCwgMHgxRiwgMHgwMiwgMHg0QywgMHgwOCwgMHgzMCwgMHgwMSwgMHhDMCwgMHg0MCwgMHgyMCwgMHgwNCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4QTAsIDB4MTQsIDB4MDAsIDB4N0QsIDB4MDIsIDB4QzQsIDB4NDUsCisweEMyLCAweDA3LCAweDAwLCAweDFGLCAweDIwLCAweDdELCAweDIxLCAweDdDLCAweDAxLCAweEQwLCAweDE2LCAweDU4LCAweDFDLAorMHgwMCwgMHg1RCwgMHgwMCwgMHg3NCwgMHgwMSwgMHhEMSwgMHgwNSwgMHhDMCwgMHgxRSwgMHgwNCwgMHg1RCwgMHgwMCwgMHhDNCwKKzB4ODksIDB4MTAsIDB4MDUsIDB4NTAsIDB4NTAsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDE0LCAweEEwLCAweDMyLCAweDAwLCAweDhELCAweDhCLCAweDI0LCAweDA2LCAweEM4LCAweENDLCAweDAwLCAweDUzLAorMHgwNCwgMHgwQywgMHgwNSwgMHgzNCwgMHgwMywgMHhEMSwgMHhENCwgMHg0MCwgMHg0MCwgMHgwMCwgMHhDNSwgMHgwMCwgMHg3NCwKKzB4MDMsIDB4RDAsIDB4MEMsIDB4NjAsIDB4NzIsIDB4MDAsIDB4Q0QsIDB4MDAsIDB4MDQsIDB4MEIsIDB4MTUsIDB4OEMsIDB4NDAsCisweDUwLCAweDAwLCAweDBBLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDgwLCAweDM4LAorMHgwMCwgMHhBRCwgMHgwMCwgMHg4NCwgMHgwMiwgMHhEMCwgMHgwQSwgMHg0MCwgMHhCQiwgMHg4MCwgMHgyRCwgMHg4MiwgMHg5NCwKKzB4MDMsIDB4RDAsIDB4MDcsIDB4NDAsIDB4ODgsIDB4MDAsIDB4RUQsIDB4MjQsIDB4QjQsIDB4MjMsIDB4RDAsIDB4MUYsIDB4NDAsCisweDNBLCAweDAwLCAweEZELCAweDgwLCAweDA0LCAweDA3LCAweDEyLCAweDFFLCAweDQwLCAweDA0LCAweDIwLCAweDAyLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMSwgMHgxMCwgMHg3OSwgMHgwMCwgMHhBRiwgMHgwMSwgMHhBQywKKzB4MDYsIDB4RjAsIDB4MUEsIDB4QzgsIDB4NUIsIDB4MDAsIDB4MkYsIDB4MDEsIDB4QjAsIDB4MDcsIDB4RjAsIDB4MTIsIDB4Q0EsCisweDc4LCAweDAwLCAweEU3LCAweEEzLCAweEJDLCAweDg3LCAweEYwLCAweDdGLCAweEM0LCAweDVBLCAweDAwLCAweEZGLCAweDBGLAorMHg4OSwgMHgwNywgMHgzMiwgMHgxRiwgMHhDMCwgMHg0NCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MTAsIDB4QjgsIDB4MzUsIDB4MDAsIDB4OEYsIDB4MDAsIDB4NUMsIDB4MDAsIDB4RjAsIDB4MDksIDB4QzAsCisweDM3LCAweDAwLCAweDFGLCAweDgwLCAweDdDLCAweDAzLCAweEYwLCAweDA1LCAweEMwLCAweDE3LCAweDEwLCAweERGLCAweDAwLAorMHg3QywgMHgwQiwgMHhGMCwgMHgyRCwgMHhDNCwgMHgzNywgMHgwMCwgMHhERiwgMHhBNCwgMHg3QywgMHgwMiwgMHhGMCwgMHgwRCwKKzB4QzAsIDB4NDMsIDB4MjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjAsCisweDdELCAweDAwLCAweEJGLCAweDAxLCAweENDLCAweDI2LCAweEYwLCAweDlCLCAweEMwLCAweDZGLCAweDAyLCAweDMzLCAweDA5LAorMHhEQywgMHhFRiwgMHg3MywgMHgxNywgMHhDOCwgMHg1QywgMHgyMiwgMHhGRCwgMHgwOSwgMHhGQywgMHgwRiwgMHhGMSwgMHgzRiwKKzB4QzAsIDB4N0YsIDB4MDIsIDB4RjcsIDB4ODEsIDB4REMsIDB4MDUsIDB4MTAsIDB4OUIsIDB4QzAsIDB4MDAsIDB4MDAsIDB4MDQsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE1LCAweDE4LCAweDM5LCAweDAwLCAweEFELCAweDQ4LAorMHg4NSwgMHgyMiwgMHhEMCwgMHgwQSwgMHgwMCwgMHgzQiwgMHgwMCwgMHgyMSwgMHhDMCwgMHg4NCwgMHhFMywgMHgxMCwgMHg4NiwKKzB4NDEsIDB4OTgsIDB4MDAsIDB4RUQsIDB4MTgsIDB4QjQsIDB4MDMsIDB4RDAsIDB4MEUsIDB4NDAsIDB4M0IsIDB4MDAsIDB4RTEsCisweDAwLCAweEY0LCAweDExLCAweDEyLCAweENCLCAweDQwLCAweDU1LCAweDYwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzOSwgMHgwMCwgMHgyRCwgMHgxMCwgMHg4NCwgMHgyQSwgMHhEOCwgMHgwQSwKKzB4NjEsIDB4MkIsIDB4NjAsIDB4MzEsIDB4NTAsIDB4OTQsIDB4MjMsIDB4NTEsIDB4MDYsIDB4NTAsIDB4M0EsIDB4OTgsIDB4RUQsCisweDA4LCAweEI0LCAweDIzLCAweEQwLCAweDBFLCAweDQxLCAweDFCLCAweDAwLCAweEUxLCAweDAwLCAweDk0LCAweDQzLCAweDk5LAorMHgwRiwgMHg0NCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwKKzB4MjAsIDB4MzEsIDB4MDAsIDB4MEQsIDB4NDcsIDB4MDQsIDB4MDAsIDB4RDgsIDB4NTgsIDB4NDAsIDB4QjMsIDB4MDIsIDB4MDEsCisweDUzLCAweDA0LCAweDA3LCAweDU4LCAweDM0LCAweDQwLCAweDEyLCAweDgwLCAweENELCAweDQxLCAweDI0LCAweDMzLCAweEQwLAorMHgzQywgMHg0MCwgMHgyMywgMHg1MCwgMHhDMSwgMHg0MiwgMHgzNCwgMHg0NiwgMHg5OCwgMHgwQywgMHg0MCwgMHgxMSwgMHgwMCwKKzB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTUsIDB4QTgsIDB4MzUsIDB4MTAsIDB4OUQsCisweDAwLCAweDRDLCAweDAyLCAweEQwLCAweDE5LCAweEMwLCAweDkzLCAweDQwLCAweDEzLCAweDAxLCAweERDLCAweDBCLCAweDcwLAorMHgwNSwgMHhDMCwgMHgwNiwgMHgwMCwgMHhGRiwgMHgwMywgMHhGQywgMHgwQiwgMHhGOCwgMHgzRiwgMHhDNCwgMHgyNywgMHgwMCwKKzB4RjMsIDB4MEYsIDB4NUMsIDB4MDIsIDB4QjQsIDB4MEQsIDB4NDAsIDB4NTUsIDB4MjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDM2LCAweDAwLCAweERGLCAweDAwLCAweDdDLCAweDIyLCAweEYwLAorMHgwOSwgMHhDMCwgMHgzNywgMHgwMSwgMHg5RiwgMHgwMCwgMHg3QywgMHgxMywgMHg5MCwgMHg0NSwgMHhDMCwgMHgwNSwgMHgwMCwKKzB4REYsIDB4MTAsIDB4NzQsIDB4MDMsIDB4RjAsIDB4NEQsIDB4QzAsIDB4ODcsIDB4MDAsIDB4REYsIDB4MDAsIDB4N0MsIDB4MDAsCisweDcwLCAweDBELCAweDg4LCAweDA3LCAweDAwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHg4NCwgMHgwOCwgMHgzRSwgMHgwMCwgMHhCRiwgMHgwMCwgMHhGQywgMHgwMiwgMHhDMCwgMHgwMywgMHhDOCwgMHgxRiwgMHgwMCwKKzB4M0IsIDB4MDIsIDB4N0MsIDB4MDMsIDB4RjAsIDB4MDcsIDB4QzAsIDB4MTgsIDB4MDAsIDB4RkEsIDB4MDAsIDB4QUMsIDB4MDMsCisweEIwLCAweDBGLCAweEM4LCAweDA2LCAweDEwLCAweEVGLCAweDAwLCAweERDLCAweDAyLCAweEYwLCAweDBGLCAweDgwLCAweDEzLAorMHgyMiwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4NSwgMHgyMCwgMHgzNiwgMHgwMCwKKzB4OUQsIDB4MDEsIDB4NzQsIDB4MDUsIDB4RDAsIDB4MTEsIDB4NDAsIDB4MzcsIDB4MDAsIDB4RDEsIDB4ODMsIDB4NzQsIDB4MDMsCisweEQwLCAweDE0LCAweDQwLCAweDk0LCAweDAwLCAweEQxLCAweDAwLCAweDc0LCAweDAzLCAweDEwLCAweDBELCAweDQwLCAweEM0LAorMHgwNCwgMHhERCwgMHgwMCwgMHg0NCwgMHgxQywgMHhEMiwgMHgwRCwgMHg0MiwgMHgxNywgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4QTAsIDB4MzQsIDB4MDAsIDB4OUQsIDB4MDEsIDB4NzQsIDB4MDYsCisweEQwLCAweDY5LCAweDQwLCAweDI3LCAweDAwLCAweDE5LCAweDEwLCAweDc0LCAweDAzLCAweEQwLCAweDM1LCAweDYwLCAweDE0LAorMHgwMCwgMHhENSwgMHgwMCwgMHg2NCwgMHgwMywgMHhEMCwgMHgwQywgMHg2MCwgMHg2NSwgMHgwMCwgMHhERCwgMHgyMCwgMHg1NCwKKzB4MDQsIDB4RDgsIDB4MDksIDB4NDAsIDB4MDcsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDEwLCAweDI4LCAweDMwLCAweDAwLCAweDhELCAweDAwLCAweDM0LCAweDAyLCAweEQwLCAweDA4LCAweDQwLCAweDMzLAorMHgwMCwgMHgwMCwgMHgyMCwgMHgzNCwgMHg4MywgMHhEMCwgMHgwNSwgMHg0MCwgMHgxMCwgMHgwMCwgMHhDNSwgMHgwMCwgMHgzNCwKKzB4MDMsIDB4MTAsIDB4MEMsIDB4NjAsIDB4MjAsIDB4MDAsIDB4Q0QsIDB4MDAsIDB4MDYsIDB4MDAsIDB4RDgsIDB4MDgsIDB4NDAsCisweDQzLCAweEEwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweEIwLCAweDM2LAorMHgwMCwgMHgxRiwgMHgwMCwgMHg3QywgMHgwMiwgMHhGMCwgMHgwOSwgMHhDMCwgMHgyNywgMHgwMCwgMHgxQiwgMHgyMCwgMHhGQywKKzB4MDMsIDB4RjIsIDB4MDUsIDB4RDAsIDB4MTQsIDB4MTAsIDB4RDcsIDB4MDAsIDB4RUMsIDB4MDMsIDB4QjAsIDB4MEYsIDB4QzAsCisweDA0LCAweDEwLCAweEZGLCAweDIwLCAweDVDLCAweDAyLCAweEYwLCAweDBELCAweEM4LCAweDAzLCAweEMwLCAweDBBLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4NSwgMHhBOCwgMHgzRiwgMHgwMCwgMHgyRiwgMHgwMCwgMHhGQywKKzB4ODAsIDB4RjEsIDB4MEIsIDB4QzAsIDB4M0IsIDB4MDAsIDB4MkYsIDB4MDAsIDB4RkMsIDB4MDMsIDB4RjAsIDB4MEUsIDB4QzAsCisweDFGLCAweDIwLCAweEZCLCAweDAwLCAweEZDLCAweDAzLCAweEYwLCAweDBGLCAweEMwLCAweDJGLCAweDIwLCAweEZGLCAweDAwLAorMHhGQywgMHgwMCwgMHhGMCwgMHgwRiwgMHhFMCwgMHgxNywgMHgyMSwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDMsIDB4QTAsIDB4NUYsIDB4NDAsIDB4QjMsIDB4MDAsIDB4RkMsIDB4MTIsIDB4RjAsIDB4MTcsIDB4QzAsCisweDdGLCAweDAwLCAweDczLCAweDgxLCAweEZDLCAweDEwLCAweEYxLCAweEMzLCAweEMwLCAweDJDLCAweDAyLCAweDMzLCAweDgxLAorMHhDQywgMHgyMywgMHgzMCwgMHgwRiwgMHhDMCwgMHg0OCwgMHgxMCwgMHhCRiwgMHgyMCwgMHhGQywgMHgwNSwgMHgzMCwgMHgxRiwKKzB4QzAsIDB4MEMsIDB4MjAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDgsCisweDc3LCAweDA4LCAweDkxLCAweDRCLCAweDc0LCAweDJFLCAweEQyLCAweDE5LCAweDAwLCAweDdGLCAweDAwLCAweDUxLCAweDAxLAorMHg3NCwgMHgyQywgMHhEMCwgMHhFMSwgMHg0MCwgMHhBNCwgMHgwMSwgMHgxMSwgMHgwMSwgMHhDNCwgMHgxQiwgMHg1MSwgMHhCQiwKKzB4NDgsIDB4NjQsIDB4MDAsIDB4OEQsIDB4NEUsIDB4NzQsIDB4MDcsIDB4MTAsIDB4MEYsIDB4NDgsIDB4MDQsIDB4NjAsIDB4MEMsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDExLCAweEEwLCAweDIzLCAweDAwLCAweDgxLCAweDQwLAorMHgzNCwgMHgwMiwgMHhEMCwgMHgwQywgMHg0MCwgMHgzMywgMHgwMCwgMHg4MSwgMHgwMCwgMHgzNCwgMHgwMCwgMHhEMCwgMHgwOSwKKzB4NDAsIDB4QTAsIDB4ODAsIDB4MTUsIDB4MDAsIDB4MDQsIDB4MUIsIDB4MTAsIDB4MEMsIDB4NDAsIDB4MDAsIDB4MDAsIDB4OEQsCisweDEwLCAweDM0LCAweDgyLCAweDEwLCAweDBDLCAweDQwLCAweDQ0LCAweDgwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHhBOCwgMHgyNSwgMHgyMCwgMHhEMSwgMHgwMCwgMHg3NCwgMHgwMiwgMHhEMCwgMHgwRCwKKzB4NDAsIDB4MzcsIDB4MDAsIDB4OTEsIDB4ODIsIDB4NzQsIDB4MDQsIDB4RDAsIDB4MDksIDB4NDgsIDB4MjUsIDB4ODQsIDB4MTEsCisweDAxLCAweDQ1LCAweDA3LCAweDUzLCAweDg5LCAweDQwLCAweDY0LCAweDAwLCAweDlELCAweDQwLCAweDM0LCAweDQzLCAweDEwLAorMHgwRCwgMHg0MCwgMHgwQywgMHgwMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwKKzB4ODgsIDB4MjMsIDB4MDAsIDB4RDMsIDB4MDgsIDB4N0MsIDB4MDIsIDB4RjAsIDB4MEQsIDB4NDQsIDB4MzMsIDB4NDAsIDB4RDMsCisweDAwLCAweDdDLCAweDBDLCAweEYwLCAweDg4LCAweEMwLCAweDY0LCAweDQwLCAweDEzLCAweDgxLCAweDRDLCAweDA1LCAweDMwLAorMHgxRCwgMHg5MCwgMHg0NCwgMHgwMCwgMHg5RSwgMHg0MCwgMHg3QywgMHgyRCwgMHgzNCwgMHgwRCwgMHhDMCwgMHgwMCwgMHgyMCwKKzB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4ODAsIDB4QUQsIDB4MDAsIDB4QkYsCisweDgxLCAweEZDLCAweDEzLCAweEQwLCAweDRCLCAweDQ4LCAweDNGLCAweDAwLCAweEZGLCAweDA5LCAweDdDLCAweDAwLCAweEYwLAorMHgxQiwgMHhDMCwgMHg2RSwgMHgyQSwgMHgzRSwgMHgxMCwgMHhCQywgMHg4MywgMHhGMCwgMHgwOSwgMHhDNCwgMHgyRiwgMHgyOCwKKzB4QkYsIDB4MDAsIDB4RjQsIDB4MDMsIDB4RjEsIDB4MEYsIDB4QzAsIDB4MUYsIDB4MDAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweDA4LCAweDI1LCAweDAyLCAweEQzLCAweDAwLCAweDdDLCAweDAzLCAweEYwLAorMHgwRCwgMHhDMCwgMHgzNywgMHgwMiwgMHg5MywgMHgwMiwgMHg3QywgMHgwMCwgMHgzNCwgMHgwOSwgMHhFMCwgMHgyNCwgMHgyMCwKKzB4MUIsIDB4MDEsIDB4N0MsIDB4MDMsIDB4MzAsIDB4MEQsIDB4QzgsIDB4MDQsIDB4NDQsIDB4RDMsIDB4MDAsIDB4NEMsIDB4MDIsCisweEYwLCAweDBELCAweEM1LCAweDA4LCAweDIwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgxMywgMHhBMCwgMHgyNCwgMHgwMCwgMHhEMSwgMHgwMCwgMHg3NCwgMHgwMywgMHhEMCwgMHgwRCwgMHhDMCwgMHgzNSwgMHgwMiwKKzB4OTUsIDB4MDAsIDB4NzQsIDB4MDQsIDB4MTAsIDB4MEIsIDB4NDIsIDB4NjQsIDB4MDQsIDB4MDEsIDB4MDMsIDB4NUMsIDB4QUYsCisweDUxLCAweDE4LCAweEMwLCAweEU2LCAweDE4LCAweEQxLCAweDAxLCAweDZDLCAweDAzLCAweEQwLCAweDZELCAweDQwLCAweDRDLAorMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNywgMHhBMCwgMHgxMiwgMHgwNCwKKzB4ODEsIDB4MDAsIDB4MzQsIDB4MDMsIDB4RDAsIDB4MDAsIDB4NDAsIDB4MzMsIDB4MDAsIDB4ODEsIDB4MDAsIDB4MzQsIDB4MTAsCisweDEyLCAweDAwLCAweDAxLCAweDY0LCAweDg4LCAweDA5LCAweDAwLCAweDM0LCAweDBGLCAweDUxLCAweEJDLCAweDQxLCAweDgxLAorMHgxMCwgMHg4NSwgMHgxMSwgMHgwNCwgMHg4MiwgMHhEMiwgMHgyRCwgMHg0MiwgMHgxQywgMHgwMCwgMHgwQSwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4ODAsIDB4NzgsIDB4ODIsIDB4QTEsIDB4MjEsIDB4QjQsIDB4MTYsCisweEQwLCAweDFBLCAweDQwLCAweDczLCAweDA4LCAweEE1LCAweDAxLCAweEI0LCAweDA0LCAweDE4LCAweDkyLCAweDQwLCAweDY4LAorMHgwOCwgMHgyOSwgMHgwMSwgMHgxNCwgMHgyNywgMHg1MiwgMHgxRSwgMHg2NCwgMHg2RiwgMHgwMCwgMHhBNSwgMHgyOSwgMHhBNCwKKzB4MDYsIDB4RDAsIDB4MUUsIDB4NDAsIDB4MTgsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDEyLCAweDEwLCAweDIwLCAweDAwLCAweEMzLCAweDA4LCAweDNDLCAweDAyLCAweEYwLCAweDA4LCAweDQyLCAweDMzLAorMHgwMiwgMHg4MywgMHgwMCwgMHgzNCwgMHg0OCwgMHgzMCwgMHgwOCwgMHg0MCwgMHgyMCwgMHgwMSwgMHgwQiwgMHgwMCwgMHgzQywKKzB4NDMsIDB4NzAsIDB4MEMsIDB4QzAsIDB4MDEsIDB4MDQsIDB4ODcsIDB4NTAsIDB4MEEsIDB4MDIsIDB4RjAsIDB4MEQsIDB4QzAsCisweDQ4LCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweEI4LCAweDI5LAorMHg0MCwgMHhGRiwgMHgwOCwgMHhGQywgMHgxMiwgMHhGMCwgMHgwQiwgMHhDMCwgMHg3RCwgMHgwOCwgMHhCRiwgMHgwMCwgMHhGQywKKzB4MDAsIDB4RDAsIDB4MEUsIDB4NTIsIDB4MkIsIDB4MDAsIDB4MzcsIDB4MDAsIDB4RkMsIDB4MEIsIDB4RjAsIDB4MEYsIDB4RTAsCisweDNFLCAweDEwLCAweDlCLCAweDAwLCAweEZDLCAweDIyLCAweEYwLCAweDFGLCAweEMwLCAweDBCLCAweDYwLCAweDA2LCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwgMHhBMCwgMHg3NywgMHgwMCwgMHg5MywgMHgwMCwgMHg3QywKKzB4MjMsIDB4MzAsIDB4MDksIDB4QzAsIDB4MzcsIDB4MDAsIDB4REYsIDB4ODAsIDB4RkMsIDB4MDAsIDB4RjAsIDB4MDksIDB4QzAsCisweDA2LCAweDEwLCAweDkzLCAweDgwLCAweDNDLCAweDA4LCAweDM0LCAweDRELCAweEUxLCAweDA3LCAweDA4LCAweDlGLCAweDAxLAorMHg0QywgMHgwMiwgMHhGMCwgMHgwRCwgMHhEMCwgMHg1NCwgMHgwMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MTIsIDB4ODgsIDB4MzksIDB4MDAsIDB4QTEsIDB4MDQsIDB4QjQsIDB4MTMsIDB4MTAsIDB4MEEsIDB4NDAsCisweEJCLCAweDI4LCAweEVDLCAweDIwLCAweEI0LCAweDgyLCAweEQwLCAweDZFLCAweDQ4LCAweDA4LCAweDAwLCAweEExLCAweDAwLAorMHhCNCwgMHgwMiwgMHg1MCwgMHgwRSwgMHg0QSwgMHgzQiwgMHgwMCwgMHhCRCwgMHg0MCwgMHhCQywgMHgwMiwgMHhEMCwgMHg0RSwKKzB4NDAsIDB4NDgsIDB4MjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4MDAsCisweEVELCAweDAwLCAweEU5LCAweDA5LCAweDM0LCAweDBGLCAweDEwLCAweDFBLCAweDQwLCAweDdCLCAweDAxLCAweEFELCAweDAxLAorMHhCNCwgMHgwNCwgMHhEMCwgMHgxOCwgMHg0MCwgMHg0OCwgMHgwMCwgMHhBMSwgMHgwMSwgMHhCNCwgMHgwNywgMHg5MCwgMHgxRSwKKzB4NDAsIDB4NkIsIDB4MTAsIDB4RUQsIDB4MDEsIDB4QTQsIDB4MDYsIDB4RDAsIDB4OUUsIDB4NTAsIDB4MEMsIDB4MDAsIDB4MDQsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDI4LCAweEUzLCAweDAwLCAweEM5LCAweDg4LAorMHgzNCwgMHgwNywgMHgxMCwgMHgyOCwgMHg0MSwgMHgzMywgMHgwMCwgMHg4RCwgMHgyMywgMHgzNCwgMHgwNywgMHhEMCwgMHgwRCwKKzB4NDAsIDB4MTQsIDB4MDIsIDB4QzEsIDB4MDEsIDB4MzQsIDB4Q0IsIDB4RDAsIDB4MEMsIDB4NDAsIDB4NzMsIDB4MDQsIDB4Q0QsCisweDAwLCAweDM0LCAweDAyLCAweEQwLCAweDBELCAweDUwLCAweDQ4LCAweDIwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgxNywgMHhBOCwgMHhERCwgMHgyMCwgMHg1QiwgMHgyMSwgMHg3QywgMHgwNSwgMHgzNCwgMHgwNywKKzB4QzAsIDB4MTcsIDB4MDAsIDB4N0YsIDB4MDMsIDB4RkMsIDB4MDEsIDB4RjEsIDB4MDcsIDB4QzAsIDB4NUMsIDB4NDAsIDB4NzMsCisweDA1LCAweEJDLCAweDFELCAweEIwLCAweDA1LCAweEM0LCAweERGLCAweDIxLCAweDVGLCAweDAwLCAweEVDLCAweDAxLCAweEYwLAorMHgwNSwgMHhDMCwgMHg1QywgMHgyMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwKKzB4MDAsIDB4ODcsIDB4NDEsIDB4MTcsIDB4MDAsIDB4N0MsIDB4MDAsIDB4RjAsIDB4MDEsIDB4QzAsIDB4MDcsIDB4MDAsIDB4MUYsCisweDA4LCAweDZDLCAweDMwLCAweEYwLCAweDMxLCAweEQwLCAweDQ1LCAweDAwLCAweDFGLCAweDAxLCAweDdDLCAweDAwLCAweDcwLAorMHgyMSwgMHhDMCwgMHg4NywgMHgxMCwgMHgxRiwgMHgwMCwgMHg3RSwgMHgwMCwgMHhGMCwgMHgyMSwgMHhDOCwgMHg0QiwgMHgwMCwKKzB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4MjcsIDB4MDAsIDB4OEYsCisweDgwLCAweDRDLCAweDAyLCAweDM0LCAweDA5LCAweEMwLCAweDI0LCAweDAwLCAweDlGLCAweDEwLCAweDRDLCAweDAyLCAweEYwLAorMHgwOSwgMHhDMCwgMHg2NiwgMHgwMSwgMHg5QiwgMHgwMSwgMHg0QywgMHgwMiwgMHhCMCwgMHgxOSwgMHhDMCwgMHgyNywgMHgwMCwKKzB4OUYsIDB4MDQsIDB4N0MsIDB4ODIsIDB4MzAsIDB4MDksIDB4QzAsIDB4NDAsIDB4MjAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDI2LCAweDAxLCAweEJELCAweDAwLCAweDg1LCAweDAyLCAweDEwLAorMHgwOCwgMHhDMCwgMHgyQywgMHgwMCwgMHg5RCwgMHgwMCwgMHg1NCwgMHgwQSwgMHhEMiwgMHgyOSwgMHg0MCwgMHhFNCwgMHgyMCwKKzB4ODEsIDB4NEYsIDB4NTQsIDB4MDIsIDB4QjAsIDB4RDksIDB4NDYsIDB4QTcsIDB4MUUsIDB4OUQsIDB4MDAsIDB4MzQsIDB4MDIsCisweDEwLCAweDZCLCAweDQwLCAweDA0LCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgxOCwgMHhBMCwgMHgyNCwgMHg4MCwgMHg5RCwgMHgwMCwgMHg0NCwgMHg2MiwgMHgxMCwgMHgwOSwgMHg0MCwgMHgyNCwgMHgwMCwKKzB4OEQsIDB4MDAsIDB4NDAsIDB4MkEsIDB4RDAsIDB4MTksIDB4NjAsIDB4MjYsIDB4MDAsIDB4RDEsIDB4MjAsIDB4NDQsIDB4MkEsCisweDgwLCAweDA5LCAweDIwLCAweDM3LCAweDAwLCAweDlELCAweDAwLCAweDc0LCAweDAyLCAweDEwLCAweDA5LCAweDQwLCAweDYwLAorMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgyMCwgMHgyMCwgMHgxMCwKKzB4OEQsIDB4MDIsIDB4MDQsIDB4MDIsIDB4MTAsIDB4MjksIDB4NDAsIDB4MjAsIDB4MDAsIDB4OEQsIDB4MDIsIDB4MTQsIDB4NTIsCisweEQwLCAweDQ4LCAweDQxLCAweDIwLCAweDBELCAweDkxLCAweDIwLCAweDU0LCAweDUyLCAweDk4LCAweDQ4LCAweDQ5LCAweDIzLAorMHgwMCwgMHg4RCwgMHg5NSwgMHg3NiwgMHgwQSwgMHgxMCwgMHgwOCwgMHg0MCwgMHg0MCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MUQsIDB4QjAsIDB4MDYsIDB4MDAsIDB4MUYsIDB4MDEsIDB4NEMsIDB4ODQsCisweDMwLCAweDAxLCAweEQwLCAweDQ0LCAweDAwLCAweDFELCAweDAwLCAweDRDLCAweDEwLCAweEYwLCAweDQ1LCAweEQwLCAweDEyLAorMHgwMSwgMHgxMywgMHgwMCwgMHg0QywgMHg5MCwgMHhCMCwgMHg0MSwgMHhDMCwgMHgwNywgMHgwMCwgMHgxRiwgMHgyNCwgMHg3QywKKzB4MDAsIDB4MzQsIDB4MTAsIDB4RDAsIDB4NzQsIDB4QzAsIDB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDE5LCAweEI4LCAweDNCLCAweDEwLCAweEJGLCAweDAzLCAweEZDLCAweDBBLCAweEMwLCAweDFGLCAweEMwLCAweEE1LAorMHgwMCwgMHhGRiwgMHgwMSwgMHhGQywgMHgwMiwgMHhGMCwgMHg0QiwgMHhDMywgMHgyRiwgMHg0NSwgMHhCRiwgMHgwMCwgMHhGQywKKzB4NTIsIDB4ODAsIDB4MEIsIDB4QzAsIDB4MkYsIDB4MDAsIDB4QkYsIDB4MTQsIDB4RkMsIDB4MDYsIDB4RjAsIDB4NjksIDB4QzEsCisweDY3LCAweDYwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweEEwLCAweDJGLAorMHgwMCwgMHg5RiwgMHgwNywgMHhDQywgMHg4NiwgMHgzNCwgMHgyOSwgMHhDMCwgMHg2QywgMHgwNCwgMHg4RiwgMHgwMCwgMHhGQywKKzB4MDYsIDB4RjAsIDB4NUYsIDB4QzAsIDB4NkMsIDB4MDUsIDB4QkIsIDB4NDAsIDB4Q0MsIDB4MDYsIDB4MzAsIDB4MUIsIDB4QzIsCisweDJDLCAweDA4LCAweEYzLCAweDA1LCAweDRDLCAweDBBLCAweEYwLCAweDdCLCAweEMwLCAweDY0LCAweDAwLCAweDBFLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxQywgMHgwOCwgMHgwNywgMHgwMCwgMHgxRCwgMHgwMSwgMHg0NCwKKzB4ODAsIDB4MTAsIDB4MTEsIDB4NTAsIDB4ODQsIDB4MDAsIDB4MUQsIDB4MjEsIDB4NzQsIDB4MjAsIDB4RDAsIDB4NTAsIDB4QzEsCisweDQyLCAweDAxLCAweDExLCAweDAwLCAweDQ0LCAweDZELCAweDUwLCAweDAxLCAweDUwLCAweDA0LCAweDAwLCAweDAxLCAweDU1LAorMHg0NCwgMHgwNSwgMHhEMCwgMHg2MSwgMHg0MCwgMHg3MCwgMHgyMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MTAsIDB4QTAsIDB4MjMsIDB4MDAsIDB4OEQsIDB4MDIsIDB4MDUsIDB4MEEsIDB4MTAsIDB4MDgsIDB4NDAsCisweDIyLCAweDAwLCAweDhELCAweDE0LCAweDM0LCAweDAyLCAweEQwLCAweEM4LCAweDQwLCAweDIwLCAweDA1LCAweDg1LCAweDAwLAorMHgwNSwgMHg5MiwgMHg1OCwgMHg4OCwgMHg0MCwgMHg2MCwgMHg0MCwgMHg4MSwgMHgwOCwgMHgwNCwgMHg4MiwgMHhEMCwgMHg4OCwKKzB4NDAsIDB4NDIsIDB4ODAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4QTgsCisweDI1LCAweDgwLCAweDhELCAweDAxLCAweDQ0LCAweDEyLCAweDEwLCAweDA4LCAweDQwLCAweDI2LCAweDAwLCAweDlELCAweDgwLAorMHg3NCwgMHgyMiwgMHhEMCwgMHgwOSwgMHg1MCwgMHgyNiwgMHgyMCwgMHg5NSwgMHgwOCwgMHgwNCwgMHgwMiwgMHg1OCwgMHgwOSwKKzB4NDAsIDB4MzQsIDB4MDIsIDB4OTEsIDB4MDAsIDB4NDUsIDB4MjIsIDB4RDAsIDB4MDksIDB4NDAsIDB4NjIsIDB4MjAsIDB4MDYsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweEE4LCAweDY3LCAweDAwLCAweEJGLCAweDgwLAorMHg0QywgMHgwNiwgMHgzMCwgMHgxQiwgMHhDMCwgMHgyNiwgMHgwMCwgMHhCRiwgMHgwMCwgMHg3QywgMHgwMiwgMHhGMCwgMHg0OSwKKzB4QzAsIDB4NjQsIDB4MDAsIDB4OTcsIDB4MDAsIDB4NEMsIDB4ODYsIDB4NzIsIDB4MDksIDB4Q0EsIDB4NjQsIDB4MjAsIDB4OTMsCisweDIxLCAweENDLCAweDBFLCAweEYwLCAweDA5LCAweEQwLCAweDE2LCAweDIwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHg4MCwgMHgyNSwgMHgwMiwgMHg5RiwgMHgwMCwgMHg3QywgMHg0MiwgMHhGMCwgMHg0OSwKKzB4QzAsIDB4MjUsIDB4MDQsIDB4OUYsIDB4MDMsIDB4N0MsIDB4MDYsIDB4RjAsIDB4NTgsIDB4RDAsIDB4MjcsIDB4MDIsIDB4OTMsCisweDIwLCAweDdDLCAweDIyLCAweEYwLCAweDA4LCAweEMwLCAweDY3LCAweDAwLCAweDhGLCAweDA5LCAweDdDLCAweDAyLCAweEQwLAorMHgwOSwgMHhDMCwgMHg1MSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwKKzB4MDgsIDB4MDUsIDB4MDAsIDB4MTMsIDB4MDAsIDB4N0MsIDB4MDAsIDB4RjAsIDB4MjEsIDB4QzAsIDB4MDcsIDB4NDAsIDB4MTMsCisweDAyLCAweDRELCAweDAwLCAweDMyLCAweDIxLCAweEYwLCAweDAwLCAweDAwLCAweDEzLCAweDQ0LCAweDRDLCAweDIwLCAweDM0LAorMHg0MSwgMHhDMCwgMHgwNCwgMHgwQSwgMHgxMywgMHgwMCwgMHg0QywgMHgwMCwgMHhGMCwgMHg4MSwgMHhDNiwgMHg1MCwgMHgyMCwKKzB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4QTAsIDB4NUMsIDB4MDAsIDB4NTEsCisweDAwLCAweEI0LCAweDAxLCAweEQwLCAweDA1LCAweDQwLCAweDFGLCAweDgwLCAweDUxLCAweDAwLCAweEM0LCAweDA5LCAweDUwLAorMHgyNywgMHg1MCwgMHgxRCwgMHgwMCwgMHg2MSwgMHhEMiwgMHhDNCwgMHgwNSwgMHgyMCwgMHgwNywgMHg0MCwgMHgxOCwgMHgwMCwKKzB4NzUsIDB4MDgsIDB4NkMsIDB4MDEsIDB4RDAsIDB4MTcsIDB4RDAsIDB4NTIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweEEwLCAweDYyLCAweDAwLCAweEM5LCAweDAwLCAweDM0LCAweDAyLCAweEQwLAorMHgwQywgMHg0MCwgMHgyMywgMHgwOCwgMHhDMSwgMHgwMCwgMHgwNCwgMHg0QSwgMHgxMCwgMHgzQywgMHg0OSwgMHgzMCwgMHgwMCwKKzB4QzAsIDB4MDEsIDB4MDUsIDB4MTcsIDB4MTksIDB4MjgsIDB4NDAsIDB4MzAsIDB4ODQsIDB4QzEsIDB4MDEsIDB4MDQsIDB4MDMsCisweEQwLCAweDE5LCAweDQwLCAweDUwLCAweDAwLCAweDBBLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwNSwgMHg4MCwgMHhGQywgMHgwMCwgMHhFOSwgMHgwNCwgMHhCNCwgMHg0MiwgMHhEMCwgMHg0RSwgMHg0MCwgMHhGQiwgMHgwMCwKKzB4RjUsIDB4MjUsIDB4ODQsIDB4NDYsIDB4NTAsIDB4NkUsIDB4NjgsIDB4NjksIDB4MjEsIDB4MjEsIDB4MjAsIDB4ODQsIDB4MDEsCisweDE4LCAweDA2LCAweDQxLCAweDM4LCAweDAwLCAweEU1LCAweDEwLCAweEE2LCAweDEzLCAweEQwLCAweDBFLCAweDQwLCAweDEyLAorMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwgMHgxMCwgMHg2OCwgMHgwMCwKKzB4RUIsIDB4MDcsIDB4QkMsIDB4MDYsIDB4RjAsIDB4M0UsIDB4QzAsIDB4NkIsIDB4MDAsIDB4RTEsIDB4MDMsIDB4OEMsIDB4MDYsCisweDMyLCAweDcyLCAweDQwLCAweDI4LCAweDQxLCAweDIzLCAweDAxLCAweDg0LCAweDA3LCAweDMyLCAweDEwLCAweEMwLCAweDc4LAorMHgwMCwgMHhFMywgMHgwMSwgMHg4QywgMHgwRiwgMHhGMCwgMHgxMCwgMHhDMCwgMHg1MCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4QjgsIDB4MzEsIDB4NDAsIDB4RDcsIDB4MDAsIDB4N0MsIDB4MDIsCisweEYwLCAweDBELCAweEMwLCAweDMzLCAweDAwLCAweERCLCAweDAwLCAweDNDLCAweDAyLCAweEYwLCAweDAxLCAweEQ4LCAweDI3LAorMHgwMiwgMHgwRiwgMHgyMCwgMHgzQywgMHgwMCwgMHhGMCwgMHgwMSwgMHhEMiwgMHgzMywgMHgxMCwgMHg1RiwgMHgxMiwgMHg3QywKKzB4MDMsIDB4RjAsIDB4MEQsIDB4QzAsIDB4NDMsIDB4NjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweEEyLCAweDZGLCAweDAwLCAweEZGLCAweDAxLCAweENDLCAweDA3LCAweEYwLCAweDFFLCAweEMwLCAweDZDLAorMHgwMCwgMHhFRiwgMHgwMSwgMHhDQywgMHgwNywgMHgzMiwgMHgxRiwgMHhDMCwgMHg3OCwgMHgxMCwgMHgyMywgMHgwMSwgMHg4QywKKzB4MDUsIDB4MzAsIDB4MTMsIDB4QzAsIDB4N0YsIDB4MDgsIDB4N0YsIDB4MDEsIDB4QkMsIDB4MDcsIDB4MzAsIDB4MUYsIDB4QzAsCisweDBCLCAweDAwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE1LCAweDg4LCAweDI5LAorMHgwMCwgMHhFRCwgMHgwMCwgMHg4NCwgMHgwMywgMHhEMiwgMHgwRSwgMHg0MCwgMHhBOCwgMHgwMCwgMHhFRCwgMHgwOCwgMHg4NCwKKzB4MDMsIDB4QjAsIDB4MkYsIDB4NDAsIDB4MjgsIDB4MDEsIDB4MjEsIDB4ODAsIDB4OTQsIDB4MDAsIDB4NTIsIDB4MDIsIDB4NDAsCisweDNCLCAweDBBLCAweDZELCAweDA0LCAweEI0LCAweDAzLCAweDEwLCAweDBFLCAweDQwLCAweDU3LCAweDIwLCAweDA2LCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyOSwgMHgwMCwgMHhFRCwgMHgwMSwgMHg4NCwKKzB4MDMsIDB4RDAsIDB4MUYsIDB4NDAsIDB4MjgsIDB4MDAsIDB4RkQsIDB4MDEsIDB4ODQsIDB4MjIsIDB4MTAsIDB4OEUsIDB4NDAsCisweDJDLCAweDEwLCAweDM5LCAweDA4LCAweDg0LCAweDAzLCAweDEwLCAweDAyLCAweDQwLCAweDNCLCAweDAwLCAweDJELCAweDAwLAorMHhGNCwgMHgwNywgMHgxMCwgMHgwNiwgMHg0MCwgMHg2MywgMHgwMSwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDQsIDB4MjgsIDB4MjMsIDB4MDEsIDB4Q0QsIDB4MDAsIDB4MDQsIDB4MDcsIDB4RDAsIDB4MEMsIDB4NDEsCisweDIwLCAweDAwLCAweENELCAweDAwLCAweDA2LCAweDQ1LCAweDkwLCAweDFDLCAweDQwLCAweDIwLCAweDAwLCAweDA5LCAweDAxLAorMHgxNiwgMHgxOSwgMHg1MCwgMHg5MCwgMHg0MCwgMHhCMywgMHgwMCwgMHg1RCwgMHgwMCwgMHgzNCwgMHg2RiwgMHgxMCwgMHgwQywKKzB4NDAsIDB4MUIsIDB4MjAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTUsIDB4QTgsCisweEE1LCAweDAwLCAweERGLCAweDA0LCAweDRDLCAweDEyLCAweEYwLCAweDBELCAweEQwLCAweDI0LCAweDAwLCAweERGLCAweDAwLAorMHg0RCwgMHgxMiwgMHgzMCwgMHgxQiwgMHhDMCwgMHgzQywgMHg0MSwgMHgxQiwgMHgwNSwgMHg0QywgMHgwMSwgMHgzNCwgMHgwMSwKKzB4QzAsIDB4NDcsIDB4MTIsIDB4OUYsIDB4MDAsIDB4N0MsIDB4MEYsIDB4MzYsIDB4MDEsIDB4QzgsIDB4NTcsIDB4MjAsIDB4MDYsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweEI3LCAweDAwLCAweERGLCAweDQwLAorMHg3QywgMHgwMiwgMHhGMCwgMHg4RCwgMHhDMCwgMHgzMywgMHgxMCwgMHhERiwgMHgwMCwgMHg3QywgMHgwMiwgMHhGMCwgMHg4MCwKKzB4QzAsIDB4QTcsIDB4MDAsIDB4MTcsIDB4NDAsIDB4N0MsIDB4MDgsIDB4RjEsIDB4MDAsIDB4QzAsIDB4RDcsIDB4MDAsIDB4MUYsCisweDQwLCAweDdDLCAweDAzLCAweEYwLCAweDBELCAweENDLCAweDI3LCAweDAwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwOCwgMHg2RiwgMHgwMCwgMHhFRiwgMHgwMCwgMHg4QywgMHgwRSwgMHgzMCwgMHgwRiwKKzB4QzAsIDB4MkMsIDB4MDAsIDB4RjMsIDB4MDAsIDB4Q0MsIDB4MDIsIDB4RjAsIDB4MzMsIDB4QzQsIDB4MEMsIDB4MDAsIDB4MzMsCisweDAwLCAweEJDLCAweDA5LCAweDMwLCAweDAzLCAweEMwLCAweDFDLCAweDAwLCAweEJGLCAweDAwLCAweENDLCAweDAzLCAweDMwLAorMHgwQiwgMHhEMCwgMHgwNCwgMHgyMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MSwKKzB4MjAsIDB4RDYsIDB4MTAsIDB4REQsIDB4NDAsIDB4NDQsIDB4NEEsIDB4MTAsIDB4MEQsIDB4NDAsIDB4RjUsIDB4NTAsIDB4RDEsCisweDAwLCAweDQ0LCAweDAyLCAweEQwLCAweDMxLCAweDQyLCAweDAxLCAweDA4LCAweDExLCAweDIzLCAweDc0LCAweDBELCAweDEwLAorMHg1MSwgMHhDMCwgMHhCNiwgMHgwMCwgMHgxRCwgMHg2MSwgMHg0NCwgMHgwMywgMHgxMSwgMHgyRCwgMHg0MCwgMHgwNCwgMHgwMiwKKzB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4QTAsIDB4QTQsIDB4MDEsIDB4REQsCisweDAwLCAweDQ0LCAweDAyLCAweDEwLCAweDBDLCAweDQwLCAweDI0LCAweDAyLCAweEMxLCAweDIwLCAweDQ0LCAweDAzLCAweEQwLAorMHgwRCwgMHg0MCwgMHhCNCwgMHg5MCwgMHgxOSwgMHg1MSwgMHg3NCwgMHgwOSwgMHgxMCwgMHgxMSwgMHgwMCwgMHgxNCwgMHgwMiwKKzB4MUQsIDB4MDMsIDB4MDUsIDB4ODMsIDB4MTAsIDB4MjQsIDB4NDAsIDB4MDQsIDB4MDAsIDB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDIwLCAweDMwLCAweDAwLCAweENELCAweDAwLCAweDA0LCAweDAyLCAweDE0LAorMHgwQywgMHg0MCwgMHgxMSwgMHgwMCwgMHhDMSwgMHgwMCwgMHgwNCwgMHgwMywgMHhEMCwgMHgwNCwgMHg0MCwgMHgyNSwgMHgwMCwKKzB4MDEsIDB4MDAsIDB4MzQsIDB4MDEsIDB4MTQsIDB4MDAsIDB4NjAsIDB4MzIsIDB4MDAsIDB4MUQsIDB4MDAsIDB4MDQsIDB4MDMsCisweDEwLCAweDBDLCAweDQwLCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHhCMCwgMHgyNiwgMHgwMCwgMHhFRiwgMHgwMCwgMHg0RCwgMHgwMSwgMHgzMCwgMHgwRiwgMHhDMCwgMHgyNCwgMHgwMCwKKzB4RjMsIDB4MDAsIDB4NDUsIDB4MDIsIDB4RjAsIDB4MEQsIDB4QzAsIDB4MDQsIDB4MDAsIDB4MTMsIDB4MDAsIDB4N0MsIDB4MDEsCisweDMwLCAweDAxLCAweEMwLCAweDE0LCAweDAwLCAweDNGLCAweDAwLCAweENDLCAweDAzLCAweDM0LCAweDBELCAweEM4LCAweDA0LAorMHg0MCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHhCOCwgMHgxRiwgMHgwMCwKKzB4RkYsIDB4MDAsIDB4RkMsIDB4ODEsIDB4RjAsIDB4MEYsIDB4QzAsIDB4MUYsIDB4MDAsIDB4RkYsIDB4MDAsIDB4QkMsIDB4MDEsCisweEUyLCAweDA3LCAweDk4LCAweDBGLCAweDQwLCAweDNGLCAweDQwLCAweEZDLCAweDAxLCAweEYwLCAweDAzLCAweEMwLCAweDNGLAorMHgwMCwgMHgzRiwgMHgwMCwgMHhGQywgMHgwMywgMHhGMCwgMHgwRiwgMHhDMCwgMHgxNywgMHg2MCwgMHgwRSwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4QTAsIDB4N0YsIDB4MDAsIDB4RkIsIDB4MTAsIDB4OUMsIDB4MDcsCisweEYwLCAweDFGLCAweEMwLCAweDRGLCAweDAwLCAweEJGLCAweDAxLCAweEZDLCAweDA1LCAweEYwLCAweDE3LCAweEM4LCAweDJFLAorMHgxMCwgMHhCRiwgMHgwNCwgMHhGQywgMHgwMywgMHgzMCwgMHgxRiwgMHhDMCwgMHg3RiwgMHgwOCwgMHhCNiwgMHgwMCwgMHhGQywKKzB4MjcsIDB4NzAsIDB4MDIsIDB4QzAsIDB4MEUsIDB4MDAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAxLCAweDA4LCAweDc3LCAweDAwLCAweEZELCAweDAzLCAweDQ0LCAweDA2LCAweDEwLCAweDFELCAweDQwLCAweDQ3LAorMHgwMCwgMHhERCwgMHgwMSwgMHg3NCwgMHgwMCwgMHgxMCwgMHgxRCwgMHg0MCwgMHhFNCwgMHgwMiwgMHgxRCwgMHgwNCwgMHhGNCwKKzB4NUIsIDB4MTAsIDB4MDEsIDB4NDAsIDB4NDcsIDB4MDgsIDB4OUQsIDB4MDEsIDB4NzQsIDB4MDMsIDB4RDAsIDB4MTksIDB4NDAsCisweDBDLCAweDYwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDExLCAweEEwLCAweDMzLAorMHgwMCwgMHhDRCwgMHgwMCwgMHgxNCwgMHgwMywgMHhEMCwgMHgwQywgMHg0MCwgMHgwMywgMHgwMCwgMHg4RCwgMHg0MCwgMHg3NCwKKzB4NTEsIDB4OTAsIDB4MDUsIDB4NDgsIDB4MDIsIDB4MDAsIDB4MEQsIDB4MTIsIDB4MzQsIDB4MUIsIDB4MTAsIDB4NEMsIDB4NDksCisweDMzLCAweDAwLCAweDBELCAweDAyLCAweDM0LCAweDEzLCAweEQwLCAweDAwLCAweDQwLCAweDRFLCAweDgwLCAweDBFLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHhBOCwgMHgzNSwgMHgwMCwgMHhERCwgMHgyMCwgMHg0MCwKKzB4MDcsIDB4MTAsIDB4MEQsIDB4NDAsIDB4NjcsIDB4MDAsIDB4REQsIDB4MjMsIDB4NzQsIDB4ODEsIDB4MTQsIDB4MUQsIDB4NDEsCisweDQ0LCAweDAwLCAweDFELCAweDAxLCAweDc0LCAweDAzLCAweDE0LCAweDAxLCAweDQwLCAweDA3LCAweDA4LCAweDlELCAweDUxLAorMHg3NCwgMHgwMywgMHhEMCwgMHgxOSwgMHg0MSwgMHgwQywgMHgwMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDIsIDB4ODgsIDB4MzcsIDB4MDAsIDB4REYsIDB4MDAsIDB4NTQsIDB4MUYsIDB4RjAsIDB4MEQsIDB4QzAsCisweDQ3LCAweDAwLCAweDlGLCAweDAxLCAweDdDLCAweDE5LCAweEYwLCAweDE0LCAweEMwLCAweEM2LCAweDAwLCAweDlGLCAweDA3LAorMHg3NCwgMHgwMywgMHgzMCwgMHgwRCwgMHhDMCwgMHgzNywgMHgwMCwgMHgxNywgMHgwMSwgMHg3QywgMHgwMywgMHg3OSwgMHgzOSwKKzB4QzAsIDB4MjIsIDB4MjAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4ODAsCisweDNDLCAweDAwLCAweEVGLCAweDAwLCAweEZDLCAweDAzLCAweEYwLCAweDBGLCAweEMwLCAweDBGLCAweDAwLCAweEZGLCAweDQwLAorMHhGQywgMHgwMCwgMHhGMCwgMHgwRiwgMHhDMCwgMHgyNywgMHgwMCwgMHgzRiwgMHgwMCwgMHhGQywgMHgwMywgMHhGMCwgMHgwMywKKzB4QzQsIDB4MEYsIDB4MzAsIDB4MUYsIDB4MjAsIDB4RkUsIDB4QTcsIDB4RjAsIDB4MEIsIDB4NDAsIDB4MUYsIDB4MDAsIDB4MDYsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweDA4LCAweDM1LCAweDAwLCAweERGLCAweDAwLAorMHg3QywgMHgwMywgMHgzMCwgMHgwRCwgMHhDMCwgMHgwNywgMHgwMCwgMHgxRiwgMHgwMiwgMHg1QywgMHg0OSwgMHhCMCwgMHgyNSwKKzB4QzAsIDB4MDYsIDB4MDAsIDB4OUIsIDB4MDAsIDB4NEUsIDB4MDMsIDB4RjAsIDB4MEQsIDB4QzAsIDB4MzQsIDB4MDAsIDB4MTcsCisweDAyLCAweDRDLCAweDEzLCAweEYyLCAweDI5LCAweEM1LCAweDI5LCAweDIwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgxMywgMHhBMCwgMHgzNCwgMHgwMCwgMHhGRCwgMHgwMCwgMHgzNCwgMHgwNywgMHgxMCwgMHgwRCwKKzB4QzAsIDB4MDcsIDB4MDAsIDB4REQsIDB4MDUsIDB4MDQsIDB4MUQsIDB4MTAsIDB4MEQsIDB4NDAsIDB4NjQsIDB4MDAsIDB4MTEsCisweDAwLCAweEVDLCAweDYzLCAweEQwLCAweDcxLCAweDQwLCAweDg0LCAweDBCLCAweDExLCAweDAxLCAweDQ0LCAweDQzLCAweEQwLAorMHgxOCwgMHhDMCwgMHg0RSwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNywKKzB4QTAsIDB4MzIsIDB4MDAsIDB4Q0QsIDB4MDAsIDB4MzQsIDB4M0IsIDB4MTAsIDB4MEMsIDB4NDAsIDB4MDMsIDB4MDAsIDB4Q0QsCisweDAwLCAweDE0LCAweDBCLCAweDk0LCAweDAwLCAweDQyLCAweDYyLCAweDAwLCAweDg5LCAweDgwLCAweDU0LCAweDA3LCAweEQwLAorMHg0QywgMHg0MCwgMHhGMSwgMHgxMCwgMHg4NSwgMHgwMCwgMHgwNCwgMHgwMywgMHhEMCwgMHhCMCwgMHg0MCwgMHgwRCwgMHgwMCwKKzB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4ODAsIDB4NzgsIDB4ODAsIDB4RUQsCisweDQxLCAweEI0LCAweDA3LCAweDEwLCAweDFFLCAweDQwLCAweDQ5LCAweDMwLCAweEVELCAweEM5LCAweDk0LCAweDA2LCAweDEwLAorMHgxNywgMHgwMCwgMHg3OCwgMHgwMCwgMHhGMCwgMHg0OSwgMHhCNCwgMHgwNywgMHhEMCwgMHgxMywgMHg0MCwgMHg0OCwgMHgwMCwKKzB4RTEsIDB4MTEsIDB4ODQsIDB4MDcsIDB4RDAsIDB4MTYsIDB4NDAsIDB4M0UsIDB4MjAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDEwLCAweDMwLCAweDAwLCAweENGLCAweDAwLCAweDNDLCAweDAxLCAweDMwLAorMHg4QywgMHg0MCwgMHgwMywgMHgwMCwgMHhDRiwgMHgwMCwgMHg1QywgMHgzMywgMHhCMCwgMHgwMCwgMHhDMCwgMHgzMiwgMHgwNCwKKzB4NUIsIDB4ODAsIDB4MTQsIDB4MDMsIDB4RjIsIDB4MEMsIDB4RDAsIDB4MzAsIDB4MDMsIDB4NDYsIDB4MDgsIDB4MEQsIDB4MDMsCisweEYwLCAweDAwLCAweEMwLCAweDQ5LCAweDQwLCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMiwgMHhCMCwgMHgzNSwgMHgwMCwgMHhERiwgMHgwMCwgMHg3QywgMHgwMSwgMHhGMCwgMHgwRCwgMHhDMiwgMHgzNywgMHgwMCwKKzB4Q0YsIDB4MDAsIDB4NkMsIDB4QTMsIDB4RjAsIDB4MEMsIDB4QzAsIDB4MzcsIDB4MDAsIDB4REYsIDB4MjAsIDB4NkMsIDB4NDMsCisweEYwLCAweDgwLCAweEMwLCAweDAzLCAweDBBLCAweERGLCAweDA4LCAweDdDLCAweDIzLCAweEYwLCAweDhELCAweEMwLCAweDA5LAorMHgyMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwgMHhBMCwgMHgzNywgMHgwMCwKKzB4REYsIDB4MUUsIDB4N0MsIDB4MDMsIDB4MzAsIDB4MEQsIDB4QzQsIDB4MDcsIDB4MDAsIDB4REYsIDB4MDAsIDB4NUMsIDB4MDEsCisweEYwLCAweDE1LCAweEMwLCAweDE0LCAweDAwLCAweERGLCAweDAwLCAweDRDLCAweDRGLCAweDcxLCAweDBELCAweEM4LCAweDM0LAorMHgxMCwgMHhERiwgMHgwMCwgMHg3QywgMHgwMywgMHhGMCwgMHgwNSwgMHhDNCwgMHg0MCwgMHgwMCwgMHgwRSwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4ODgsIDB4MzksIDB4MDAsIDB4RUQsIDB4MDAsIDB4QjQsIDB4MDMsCisweDEwLCAweDBFLCAweDQ4LCAweDBCLCAweDEwLCAweEVELCAweDAwLCAweDg0LCAweDAyLCAweEQwLCAweDBFLCAweDQwLCAweDM4LAorMHgwOCwgMHhGRCwgMHg4MCwgMHgwNCwgMHgwMywgMHgxMiwgMHgwMiwgMHg0MCwgMHgwOCwgMHgwNCwgMHhFRCwgMHgwMCwgMHhCNCwKKzB4MDMsIDB4RDAsIDB4MDYsIDB4NjAsIDB4NEMsIDB4NjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAzLCAweDAwLCAweDc5LCAweDAwLCAweEVELCAweDAxLCAweEY0LCAweDA3LCAweDE0LCAweDFFLCAweDQwLCAweDRCLAorMHgwMCwgMHhFRCwgMHgwMSwgMHg5NCwgMHgwNywgMHhEMCwgMHgxNywgMHg1MCwgMHg1OCwgMHgwMCwgMHhFRCwgMHgwMSwgMHg4NSwKKzB4MDcsIDB4NTAsIDB4MUYsIDB4NDAsIDB4NzgsIDB4MDAsIDB4RUQsIDB4MDEsIDB4QjQsIDB4ODcsIDB4RDAsIDB4MUMsIDB4NDAsCisweDEwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDI4LCAweDMzLAorMHgwMCwgMHhDRCwgMHgwMCwgMHgzNCwgMHg0RiwgMHg5MCwgMHgwQywgMHg0OCwgMHhDMywgMHg4MywgMHhDRCwgMHgxMiwgMHgwNCwKKzB4NEIsIDB4RDAsIDB4N0MsIDB4NDAsIDB4QjAsIDB4MEMsIDB4Q0QsIDB4MDIsIDB4MDQsIDB4MDMsIDB4MTAsIDB4MDEsIDB4NDAsCisweDAwLCAweDAwLCAweENELCAweDg4LCAweDMwLCAweDIyLCAweEQwLCAweDFDLCAweDQwLCAweDU4LCAweDAwLCAweDBDLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNywgMHhBOCwgMHgxNSwgMHgwMCwgMHg1RiwgMHgwMCwgMHhCQywKKzB4NDksIDB4MzAsIDB4MDUsIDB4QzIsIDB4OUYsIDB4MDAsIDB4NkYsIDB4MDIsIDB4OUMsIDB4MDksIDB4RjAsIDB4MjcsIDB4QzgsCisweDFDLCAweDAwLCAweDdGLCAweDAwLCAweDRDLCAweDAxLCAweDcwLCAweDA1LCAweEQwLCAweDE0LCAweDAwLCAweDdELCAweDIxLAorMHg3QywgMHgwNSwgMHhEMCwgMHgyNywgMHg0MCwgMHg1QywgMHgyMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MTIsIDB4MDAsIDB4MDcsIDB4MDAsIDB4MUYsIDB4MDAsIDB4N0MsIDB4MDAsIDB4NzAsIDB4MDEsIDB4QzAsCisweDA3LCAweDAwLCAweDFGLCAweDAwLCAweDdDLCAweDA4LCAweEYwLCAweDgxLCAweEMwLCAweDA3LCAweDAwLCAweDFGLCAweDE4LAorMHg3QywgMHgwMCwgMHhGMCwgMHgyMywgMHhDMCwgMHg4RiwgMHgwMCwgMHgxRiwgMHgwMCwgMHg3QywgMHgwMCwgMHhGMCwgMHhBMSwKKzB4RDEsIDB4NEIsIDB4MDAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsCisweDI3LCAweDAwLCAweDlGLCAweDAwLCAweDdDLCAweDAyLCAweDM0LCAweDA5LCAweEMwLCAweDI3LCAweDAwLCAweDlGLCAweDA4LAorMHg2QywgMHgyNiwgMHg3MSwgMHgwOSwgMHhDMCwgMHgyNywgMHgwMCwgMHg5RSwgMHgwMCwgMHg0QywgMHgxNiwgMHhGMCwgMHgwOSwKKzB4QzAsIDB4MjUsIDB4MjAsIDB4OTMsIDB4MzgsIDB4NzgsIDB4MEUsIDB4RjIsIDB4MTgsIDB4QzAsIDB4NDAsIDB4MjAsIDB4MDQsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDIwLCAweDI2LCAweDAwLCAweDlELCAweDAwLAorMHg3NCwgMHgwMiwgMHgxMSwgMHgwOSwgMHg0MCwgMHgyNywgMHgwMCwgMHg5RCwgMHg0MCwgMHg0NCwgMHgwNiwgMHgxMSwgMHgwOSwKKzB4NDQsIDB4MjcsIDB4MDAsIDB4OUQsIDB4ODAsIDB4NDQsIDB4OEUsIDB4RDEsIDB4MjksIDB4NDAsIDB4MjAsIDB4MDQsIDB4OTEsCisweDAxLCAweDc0LCAweDA2LCAweEQwLCAweDg5LCAweDQxLCAweDA0LCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHhBMCwgMHgyNCwgMHgwMCwgMHg5RCwgMHgwMCwgMHg3NCwgMHgxMiwgMHgxQywgMHgwOSwKKzB4NDAsIDB4MjcsIDB4MDAsIDB4OUQsIDB4MDAsIDB4NjQsIDB4NDIsIDB4NDAsIDB4MDksIDB4NDIsIDB4MzcsIDB4ODAsIDB4OEQsCisweDAwLCAweDQ0LCAweDAyLCAweEQwLCAweDE5LCAweDQxLCAweDJELCAweDQwLCAweDkxLCAweDAwLCAweDc0LCAweDQyLCAweEQwLAorMHgwOSwgMHg0MCwgMHg3MCwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwKKzB4MDAsIDB4MjAsIDB4MDAsIDB4OEQsIDB4MTQsIDB4NzQsIDB4MDIsIDB4MTAsIDB4MDgsIDB4NDAsIDB4MjMsIDB4MDAsIDB4OEQsCisweDAwLCAweDQ0LCAweDAyLCAweDEwLCAweDA4LCAweDQwLCAweDIzLCAweDA1LCAweDhELCAweDM0LCAweDA0LCAweDUyLCAweEQwLAorMHgwQSwgMHg0MCwgMHgyQywgMHgyMCwgMHg4MSwgMHgxNCwgMHgzNCwgMHgwMiwgMHhEMCwgMHg0OCwgMHg1MSwgMHg1MCwgMHhBMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MUQsIDB4MzAsIDB4MDYsIDB4MDAsIDB4MUYsCisweDA0LCAweDdDLCAweDAwLCAweDMwLCAweDAxLCAweEM4LCAweDA3LCAweDAwLCAweDFGLCAweDAwLCAweDZDLCAweDAwLCAweDcwLAorMHgwMSwgMHhDMCwgMHgwNywgMHgyMSwgMHgxRiwgMHgwNCwgMHg0QywgMHgxMSwgMHhGMCwgMHgwMSwgMHhDMCwgMHgwRCwgMHgwMCwKKzB4MTMsIDB4QzQsIDB4N0MsIDB4MDAsIDB4RjAsIDB4NDEsIDB4QzAsIDB4NzQsIDB4QzAsIDB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE5LCAweEIwLCAweDI3LCAweDAwLCAweDlGLCAweDAwLCAweEJDLCAweDAzLCAweEYwLAorMHgwOSwgMHhDMCwgMHgyRiwgMHgwMCwgMHhFRiwgMHg4MCwgMHhGQywgMHg1MiwgMHhGMCwgMHgwQSwgMHhDMCwgMHgyRiwgMHgwMCwKKzB4QkYsIDB4MTQsIDB4N0QsIDB4NTIsIDB4RjAsIDB4NDgsIDB4QzUsIDB4MjcsIDB4MDAsIDB4QkYsIDB4NDAsIDB4RkMsIDB4NTIsCisweEYwLCAweDBCLCAweEMwLCAweDY3LCAweDIwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgxOCwgMHhBMCwgMHgyNywgMHgwMCwgMHg5RiwgMHgwMSwgMHhGQywgMHgwMiwgMHhCMCwgMHgwOSwgMHhDMCwgMHgyNywgMHg2MCwKKzB4QjMsIDB4MDAsIDB4OUMsIDB4MEEsIDB4NzAsIDB4MDksIDB4QzAsIDB4M0QsIDB4MDAsIDB4OTMsIDB4MDIsIDB4Q0MsIDB4QzYsCisweEYwLCAweDJCLCAweEMyLCAweDJGLCAweDAwLCAweEJGLCAweDgwLCAweENDLCAweDBBLCAweEQwLCAweDBCLCAweEMwLCAweDY3LAorMHgwMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxQywgMHgwOCwgMHgwNywgMHgwMCwKKzB4MUQsIDB4MEEsIDB4NzQsIDB4MDAsIDB4MTAsIDB4MDEsIDB4NDAsIDB4MDcsIDB4MDAsIDB4MTEsIDB4MDAsIDB4NDQsIDB4MDQsCisweDEwLCAweDAxLCAweDQwLCAweDA0LCAweDAwLCAweDExLCAweDAwLCAweDQ0LCAweDEwLCAweEQwLCAweDAxLCAweDQwLCAweDA3LAorMHgwMCwgMHgxRCwgMHgwMCwgMHg0NCwgMHgwMCwgMHhEMCwgMHgwMSwgMHg0MCwgMHg3MywgMHg2MCwgMHgwQywgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4QTAsIDB4MjMsIDB4MDAsIDB4OEQsIDB4MDAsIDB4NzQsIDB4MDIsCisweDkwLCAweDA4LCAweDQwLCAweDI3LCAweDAwLCAweDgxLCAweDAwLCAweDU0LCAweDAyLCAweDUyLCAweDA5LCAweDQwLCAweEExLAorMHgwMCwgMHg4MSwgMHgyMiwgMHgwNCwgMHg0MiwgMHhEMiwgMHgwOCwgMHg0MCwgMHgyMywgMHgwMCwgMHg4RCwgMHgwMiwgMHgwNCwKKzB4MDIsIDB4RDAsIDB4MDgsIDB4NDAsIDB4NEIsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDE4LCAweEE4LCAweDI1LCAweDAwLCAweDlELCAweDAwLCAweDc0LCAweDA2LCAweDEwLCAweDA5LCAweDQwLCAweDI3LAorMHgwMCwgMHg5MSwgMHgwMCwgMHg0NCwgMHgxQSwgMHgxMiwgMHgyOSwgMHg0MiwgMHgyNCwgMHg0MCwgMHg5MSwgMHg4MCwgMHg0NSwKKzB4ODIsIDB4RDAsIDB4MDksIDB4NDAsIDB4MjcsIDB4MDgsIDB4OUQsIDB4MDAsIDB4NDQsIDB4MDMsIDB4RDAsIDB4MjksIDB4NDAsCisweDYzLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweEE4LCAweDI3LAorMHgwMCwgMHg5RiwgMHgwMCwgMHg3QywgMHgwMiwgMHhCMCwgMHgwOSwgMHhDNCwgMHhFMywgMHgwNCwgMHg5MywgMHgwMiwgMHg1QywKKzB4MEUsIDB4NzAsIDB4MDgsIDB4QzAsIDB4RTUsIDB4MDQsIDB4OTIsIDB4MUIsIDB4NDgsIDB4MDIsIDB4RTAsIDB4MDksIDB4QzAsCisweDI3LCAweDAwLCAweDlGLCAweDE5LCAweDRELCAweDA2LCAweEYwLCAweDA5LCAweEMwLCAweDE3LCAweDI4LCAweDBFLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHg4MCwgMHgyNSwgMHgwMCwgMHg5RiwgMHgwMCwgMHg3QywKKzB4MDIsIDB4RjAsIDB4MDksIDB4QzQsIDB4NjcsIDB4MDIsIDB4OUYsIDB4MDAsIDB4N0MsIDB4MDYsIDB4RjAsIDB4MDksIDB4QzAsCisweDI3LCAweDAxLCAweDhGLCAweDIxLCAweDdDLCAweDgyLCAweEYwLCAweDA5LCAweEMwLCAweDI3LCAweDEwLCAweDhGLCAweDAxLAorMHg3QywgMHgxMiwgMHhGMCwgMHgwOSwgMHhDMCwgMHg0QiwgMHgwMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MTQsIDB4MDgsIDB4MDUsIDB4MDAsIDB4MUYsIDB4MDAsIDB4NkMsIDB4MDgsIDB4RjAsIDB4MDEsIDB4QzAsCisweDA3LCAweDAwLCAweDFGLCAweDAwLCAweDdDLCAweDQwLCAweDMxLCAweDIxLCAweEM4LCAweDg3LCAweDAwLCAweDFFLCAweDAyLAorMHg3QywgMHgwMCwgMHgzMiwgMHg4MSwgMHg4MSwgMHgwNCwgMHgwNCwgMHgxRiwgMHg4MCwgMHg0QywgMHgwMCwgMHgzNCwgMHgwMSwKKzB4QzAsIDB4NDMsIDB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4QTAsCisweDE0LCAweDAwLCAweDVELCAweDAwLCAweDg0LCAweDAxLCAweEQwLCAweDA1LCAweDQwLCAweDE3LCAweDEwLCAweDZELCAweDgwLAorMHhCNCwgMHgwNSwgMHgxMCwgMHgwNSwgMHg0MCwgMHgxMywgMHgwMCwgMHg1RCwgMHgwMCwgMHhGNCwgMHgwMSwgMHgxMCwgMHgyNywKKzB4NDAsIDB4REMsIDB4MDAsIDB4NUQsIDB4MDUsIDB4QzQsIDB4NjEsIDB4MTIsIDB4MDcsIDB4NDAsIDB4NTMsIDB4MDAsIDB4MDIsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweEEwLCAweDMyLCAweDAwLCAweENELCAweDAwLAorMHgyNCwgMHgwNSwgMHhEMCwgMHgwQywgMHg0MCwgMHgzMywgMHgwMCwgMHg4RCwgMHgwQywgMHgzNCwgMHgwRiwgMHgxNCwgMHgwQywKKzB4NDAsIDB4MzMsIDB4MDIsIDB4Q0QsIDB4MDAsIDB4MzQsIDB4MUYsIDB4NTAsIDB4MkMsIDB4NDQsIDB4RDAsIDB4MjAsIDB4OEQsCisweDAwLCAweDA0LCAweDBGLCAweDEwLCAweDJDLCAweDQxLCAweDUzLCAweDAwLCAweDBBLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHg4MCwgMHgzOCwgMHgwMCwgMHhFRCwgMHgwMSwgMHg4NCwgMHgwQiwgMHhEMCwgMHgwRSwKKzB4NDAsIDB4M0IsIDB4ODAsIDB4QUQsIDB4MDAsIDB4RjQsIDB4NDMsIDB4MTAsIDB4MEUsIDB4NDAsIDB4MkIsIDB4MDAsIDB4RUQsCisweDQ4LCAweEI0LCAweDQ3LCAweDUwLCAweDFFLCAweDUwLCAweDM4LCAweDA0LCAweEVELCAweDAwLCAweDg0LCAweDA1LCAweDEwLAorMHgyRSwgMHg0MCwgMHgwNywgMHgyMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwKKzB4MTAsIDB4NzgsIDB4MDAsIDB4Q0YsIDB4MDEsIDB4QUMsIDB4MDUsIDB4RjAsIDB4MUUsIDB4QzQsIDB4N0IsIDB4MTAsIDB4QUYsCisweDAxLCAweEJDLCAweDA3LCAweDMwLCAweDFFLCAweEMwLCAweDdCLCAweDAwLCAweEVGLCAweDhELCAweEZDLCAweDA3LCAweDcwLAorMHgxNywgMHhDMCwgMHg3OCwgMHgwOCwgMHhFRSwgMHgwMSwgMHhDRCwgMHgwNywgMHgzMCwgMHgxRSwgMHhDMCwgMHg0NywgMHg0MCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4QjgsIDB4MzUsIDB4MDAsIDB4REYsCisweDAwLCAweDdDLCAweDAzLCAweEYwLCAweDBELCAweEM0LCAweDM3LCAweDAwLCAweDlGLCAweDAwLCAweDdDLCAweDAzLCAweEYwLAorMHgwRCwgMHhDMCwgMHgyNywgMHgwMCwgMHhERiwgMHg0MiwgMHg3QywgMHgwMywgMHhCNCwgMHgwRCwgMHhDMCwgMHgzNywgMHgwMCwKKzB4Q0YsIDB4MDAsIDB4N0MsIDB4MDEsIDB4RjAsIDB4MDUsIDB4QzgsIDB4NDMsIDB4MjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweEEwLCAweDdGLCAweDAwLCAweEZGLCAweDAxLCAweEZDLCAweDg1LCAweEYwLAorMHgxRiwgMHhDMCwgMHg3RiwgMHgwMiwgMHgyRiwgMHgwOSwgMHg4QywgMHgwNSwgMHhGMCwgMHg5RiwgMHhDMiwgMHg2RCwgMHgwMiwKKzB4RkIsIDB4MDksIDB4RkMsIDB4MDcsIDB4MzAsIDB4MUYsIDB4QzAsIDB4N0YsIDB4MjAsIDB4RkYsIDB4MDEsIDB4RkMsIDB4MDcsCisweDMwLCAweDFGLCAweEMwLCAweDBBLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgxNSwgMHg4OCwgMHgzOSwgMHgwMCwgMHhFRCwgMHgwMCwgMHhCNCwgMHgwMywgMHhEMCwgMHgwRSwgMHg0MCwgMHgzQiwgMHgwMCwKKzB4MkQsIDB4MTAsIDB4ODQsIDB4MDEsIDB4MTIsIDB4MEUsIDB4NDAsIDB4MzgsIDB4MDQsIDB4RTksIDB4MDAsIDB4ODQsIDB4MTEsCisweDEwLCAweDA2LCAweDQwLCAweDNCLCAweDAwLCAweEVELCAweDAwLCAweEE0LCAweDExLCAweDE4LCAweDBBLCAweDQwLCAweDU0LAorMHg2MCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzOSwgMHgwMCwKKzB4RUQsIDB4MDAsIDB4QjQsIDB4MDEsIDB4RDAsIDB4MEUsIDB4NDAsIDB4MzksIDB4MjAsIDB4M0QsIDB4MDAsIDB4QzUsIDB4MDEsCisweEQwLCAweDBGLCAweDA5LCAweDI5LCAweDAwLCAweEVELCAweDQwLCAweDk2LCAweDgzLCAweDE0LCAweDA2LCAweDQwLCAweDNCLAorMHgwMiwgMHhFRCwgMHgwMCwgMHhGNCwgMHg4MywgMHgxMCwgMHgwRSwgMHg0MSwgMHgyMiwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MjgsIDB4MzMsIDB4MDAsIDB4Q0QsIDB4NDAsIDB4MzQsIDB4MDMsCisweEQwLCAweDBDLCAweDY0LCAweEIzLCAweDA0LCAweDBELCAweDA3LCAweDA0LCAweDBDLCAweDkwLCAweDNDLCAweDQwLCAweDcwLAorMHgwMCwgMHhDRCwgMHgwMywgMHgwNCwgMHgwMiwgMHgxMCwgMHhBMSwgMHg0NCwgMHg3MywgMHgwMCwgMHhDRCwgMHgwMiwgMHg2NCwKKzB4MjQsIDB4MTAsIDB4MTAsIDB4NDAsIDB4MTgsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDE1LCAweEE4LCAweDM1LCAweDAwLCAweERGLCAweDAwLCAweDdDLCAweDA3LCAweEYwLCAweDBELCAweEMwLCAweDc3LAorMHgxNCwgMHg5RiwgMHgwMywgMHgwQywgMHg0RSwgMHhGMCwgMHg5RCwgMHhDMCwgMHhGNSwgMHgwMCwgMHhGRiwgMHgxMiwgMHg3OCwKKzB4MDAsIDB4MzAsIDB4MzksIDB4NDAsIDB4NzMsIDB4MDEsIDB4REQsIDB4MTAsIDB4N0MsIDB4MDIsIDB4MTQsIDB4MUQsIDB4QzAsCisweDU2LCAweDIwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDM3LAorMHgwMCwgMHhERiwgMHgwMCwgMHg3QywgMHgyMiwgMHhGMCwgMHgwRCwgMHhDMCwgMHgzNywgMHgwOCwgMHg5RiwgMHgwMiwgMHg3QywKKzB4MDgsIDB4NzAsIDB4MEQsIDB4QzAsIDB4MjcsIDB4MDAsIDB4REIsIDB4MDQsIDB4N0MsIDB4MEEsIDB4RjAsIDB4MDksIDB4QzQsCisweDM3LCAweDAwLCAweERGLCAweDMwLCAweDZDLCAweDgyLCAweEYwLCAweDZELCAweEMwLCAweEE3LCAweDAwLCAweDBDLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwOCwgMHgzRiwgMHgwMCwgMHhGRiwgMHg4MCwgMHhGQywKKzB4ODMsIDB4RjAsIDB4MEYsIDB4QzAsIDB4M0YsIDB4MDgsIDB4QkYsIDB4MDAsIDB4REMsIDB4NDIsIDB4NzAsIDB4MEYsIDB4QzAsCisweDNELCAweDA0LCAweERGLCAweDQwLCAweDc4LCAweDAwLCAweEUwLCAweDAzLCAweDAxLCAweDNDLCAweDI0LCAweEYyLCAweDgwLAorMHhGQywgMHgwMCwgMHgzMCwgMHgwOSwgMHhFMCwgMHgxNywgMHgyMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4ODEsIDB4MDAsIDB4MzYsIDB4MDAsIDB4REQsIDB4MDAsIDB4NzQsIDB4MUYsIDB4RDAsIDB4MEQsIDB4QzAsCisweDM1LCAweDAwLCAweDhELCAweDQxLCAweDQ2LCAweDE2LCAweDEwLCAweDBDLCAweDQ2LCAweDI0LCAweDIwLCAweERELCAweDAwLAorMHg3NCwgMHgwRSwgMHhEMCwgMHgxOSwgMHhDMSwgMHhGNiwgMHgwMSwgMHhEMSwgMHgwMCwgMHg3NCwgMHgwNCwgMHgzMCwgMHg0MSwKKzB4NDAsIDB4MTcsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4QTAsCisweDM0LCAweDgwLCAweERELCAweDAwLCAweDc0LCAweDA3LCAweEQwLCAweDBELCAweDQ4LCAweDM1LCAweDEwLCAweDlELCAweDAzLAorMHg1NCwgMHgwNiwgMHg1MCwgMHgwRCwgMHg0MCwgMHgyNSwgMHgwMCwgMHhERCwgMHgwMCwgMHg1NCwgMHgwQywgMHhEMCwgMHgxOSwKKzB4NjAsIDB4NzUsIDB4MTAsIDB4RDUsIDB4MDQsIDB4NzQsIDB4MDYsIDB4MTAsIDB4ODUsIDB4NDAsIDB4MDUsIDB4MDAsIDB4MDIsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDIwLCAweDMwLCAweDgwLCAweENELCAweDAwLAorMHgzNCwgMHgwMywgMHhEMCwgMHgwQywgMHg0MiwgMHgzMSwgMHgwMCwgMHhERCwgMHgyMCwgMHg0NCwgMHgwMCwgMHgxOCwgMHgwRCwKKzB4NDAsIDB4MzAsIDB4MDAsIDB4Q0QsIDB4MDAsIDB4MzQsIDB4MDAsIDB4RDAsIDB4MDksIDB4NDgsIDB4MjcsIDB4ODAsIDB4QzUsCisweDAwLCAweDM0LCAweDAyLCAweDkzLCAweDAwLCAweDQwLCAweDQzLCAweEEwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhCMCwgMHgzNiwgMHgwMCwgMHhERiwgMHgwMCwgMHg3QywgMHgwMywgMHhGMCwgMHgwRCwKKzB4QzAsIDB4MzUsIDB4MDAsIDB4OUYsIDB4MDAsIDB4NTQsIDB4MDIsIDB4NzAsIDB4MEQsIDB4QzAsIDB4MjUsIDB4MjAsIDB4RkQsCisweDAwLCAweDVDLCAweDAwLCAweEYwLCAweDAxLCAweEMwLCAweDM1LCAweDgwLCAweEQ3LCAweDgwLCAweDdDLCAweDAyLCAweDI0LAorMHgwMSwgMHhDMCwgMHgwNywgMHhDNCwgMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwKKzB4QjgsIDB4M0YsIDB4MTAsIDB4RkYsIDB4MjAsIDB4RkMsIDB4MDMsIDB4RjAsIDB4MEYsIDB4QzQsIDB4M0QsIDB4MDAsIDB4QkYsCisweDgwLCAweEY0LCAweDAyLCAweEYyLCAweDBFLCAweEMwLCAweDNGLCAweDAwLCAweEZGLCAweDAwLCAweEZDLCAweDAyLCAweEYwLAorMHgwQiwgMHhDMCwgMHgyRSwgMHg0MCwgMHhGQiwgMHgwMCwgMHhCQywgMHgwMiwgMHg3MCwgMHgwMywgMHhDOCwgMHgxNywgMHgwMCwKKzB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4QTAsIDB4NUYsIDB4MDAsIDB4N0YsCisweDQxLCAweEZDLCAweDg1LCAweEYwLCAweDFCLCAweEMwLCAweDVDLCAweDAyLCAweEFGLCAweDE0LCAweENDLCAweDA0LCAweEYwLAorMHhDMywgMHhDMCwgMHgwQywgMHgwNCwgMHhCMywgMHgxMCwgMHhDQywgMHgwQywgMHgzMCwgMHg4QiwgMHhDMCwgMHgzRiwgMHgwMCwKKzB4QjMsIDB4MTQsIDB4Q0MsIDB4NTMsIDB4MzAsIDB4MEIsIDB4QzAsIDB4MEMsIDB4MDAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDA4LCAweDU3LCAweDAwLCAweDlELCAweDAxLCAweDc0LCAweDA1LCAweEQxLAorMHgxNSwgMHg0NCwgMHgxNCwgMHgyMSwgMHhGRCwgMHgwMywgMHg0NCwgMHgxMCwgMHhEMCwgMHhFMSwgMHgwMCwgMHg4NCwgMHgwMSwKKzB4QUIsIDB4MDYsIDB4NDQsIDB4MDAsIDB4MTAsIDB4RTksIDB4NDAsIDB4NzcsIDB4MDAsIDB4QjUsIDB4MDYsIDB4RDQsIDB4MEYsCisweDEwLCAweDA5LCAweDQwLCAweDA0LCAweDIwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgxMSwgMHhBMCwgMHgzMywgMHgwMCwgMHg4RCwgMHgwMCwgMHgzNCwgMHgwMiwgMHhEMCwgMHgwOSwgMHg0MCwgMHgyMCwgMHgyMCwKKzB4Q0QsIDB4MDAsIDB4MTYsIDB4NDAsIDB4RDIsIDB4MDEsIDB4NTAsIDB4MDQsIDB4NDQsIDB4ODEsIDB4MTAsIDB4MDUsIDB4MTAsCisweDEwLCAweDAwLCAweDQwLCAweDMzLCAweDAwLCAweEMxLCAweDEwLCAweDA0LCAweDAzLCAweEQwLCAweDQ4LCAweDQxLCAweDQ0LAorMHg4MCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHhBOCwgMHgzNSwgMHgwMSwKKzB4OUQsIDB4MDQsIDB4NzQsIDB4MDIsIDB4RDAsIDB4ODUsIDB4NDAsIDB4MjQsIDB4MDAsIDB4REQsIDB4MDAsIDB4NTUsIDB4MDQsCisweEQwLCAweDAxLCAweDQ2LCAweDY0LCAweDAwLCAweDk5LCAweDQ4LCAweDQ0LCAweDA0LCAweDEwLCAweDMxLCAweDQ4LCAweDM3LAorMHgwMCwgMHhDNSwgMHgwMCwgMHg1NCwgMHgwMywgMHhEMCwgMHgwOSwgMHg0MCwgMHgwQywgMHgyMCwgMHgwNiwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4QTgsIDB4QTcsIDB4MDEsIDB4REYsIDB4MDEsIDB4N0MsIDB4MjcsCisweEYwLCAweDBELCAweEQwLCAweDc0LCAweDEyLCAweDhGLCAweDAwLCAweDVDLCAweDQ0LCAweEYwLCAweDIwLCAweEMxLCAweEMwLAorMHgwMCwgMHg5MywgMHgwMCwgMHg0QywgMHgxNCwgMHgzNCwgMHgxRCwgMHhDMCwgMHgzNywgMHgwMCwgMHg5MywgMHg4MCwgMHg0QywKKzB4MDMsIDB4RjQsIDB4MzksIDB4RDAsIDB4MDgsIDB4MjAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDA3LCAweDgwLCAweDZELCAweDAwLCAweEJGLCAweDAxLCAweEY4LCAweDA3LCAweEYwLCAweDBGLCAweEM4LCAweDNGLAorMHgwMCwgMHhGOCwgMHgxMCwgMHhFQywgMHgwMCwgMHhGMCwgMHgyMywgMHhDMCwgMHgwRiwgMHgwMCwgMHhCRiwgMHgwMCwgMHhGQywKKzB4NDAsIDB4RjAsIDB4MEYsIDB4QzAsIDB4M0IsIDB4MTAsIDB4OUYsIDB4MDksIDB4QjgsIDB4ODMsIDB4MzAsIDB4M0IsIDB4QzAsCisweDFGLCAweDAwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweDA4LCAweDI1LAorMHgwMCwgMHg5RiwgMHg0MCwgMHg3QywgMHgwMiwgMHhGMCwgMHgwRCwgMHhDMCwgMHgyNywgMHgwMCwgMHhERiwgMHg4MCwgMHg0QywKKzB4MDAsIDB4MzIsIDB4MDEsIDB4RDAsIDB4OEMsIDB4MDAsIDB4OTMsIDB4MDAsIDB4NEMsIDB4MDAsIDB4RjAsIDB4MjUsIDB4QzAsCisweDM0LCAweDAwLCAweEQzLCAweDA0LCAweDRELCAweDAzLCAweEYwLCAweDI4LCAweEMwLCAweDBCLCAweDIwLCAweDA0LCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMywgMHhBMCwgMHgyNCwgMHgwMCwgMHg5QywgMHgwMCwgMHg3MCwKKzB4MDIsIDB4RDAsIDB4MEMsIDB4NjAsIDB4NjcsIDB4MDAsIDB4REQsIDB4MDMsIDB4NDAsIDB4MkMsIDB4MTAsIDB4MDMsIDB4NDAsCisweDY0LCAweDAwLCAweDkxLCAweDBGLCAweDZELCAweDA4LCAweDkxLCAweEI1LCAweDQwLCAweEJDLCAweDQwLCAweEQ1LCAweDEzLAorMHhDNCwgMHgwMywgMHhDMCwgMHg0OSwgMHg0MCwgMHg0RiwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDcsIDB4QTAsIDB4MjIsIDB4MjAsIDB4NEQsIDB4ODAsIDB4MzQsIDB4MDIsIDB4QzAsIDB4MDQsIDB4NDgsCisweDYzLCAweDAwLCAweDhELCAweDAxLCAweDI0LCAweDA0LCAweDEwLCAweDA4LCAweDQyLCAweDQwLCAweDAwLCAweDkxLCAweDAxLAorMHg0NCwgMHgwNCwgMHhEMSwgMHgxOCwgMHg0MCwgMHhCMCwgMHgwNCwgMHhDMSwgMHgwMiwgMHgwNCwgMHgwMywgMHhEMCwgMHgwOCwKKzB4NDAsIDB4MUYsIDB4MDAsIDB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDYsIDB4ODAsCisweDY4LCAweDAwLCAweEVELCAweDIxLCAweEI0LCAweDA2LCAweEQwLCAweDE2LCAweDQwLCAweDZCLCAweDA2LCAweEVELCAweDExLAorMHhBNSwgMHg0NCwgMHgxNCwgMHg5OCwgMHg1MCwgMHg2QywgMHgwNCwgMHhFMSwgMHgwOSwgMHhBNCwgMHgwNCwgMHg5MCwgMHgxRSwKKzB4NDAsIDB4NzgsIDB4MDIsIDB4RTUsIDB4MjEsIDB4ODQsIDB4MDcsIDB4RDEsIDB4MTYsIDB4NDAsIDB4MTMsIDB4MDAsIDB4MDIsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDEwLCAweDMwLCAweDAwLCAweDhGLCAweDAwLAorMHgzQywgMHgwMiwgMHhGMCwgMHgwNCwgMHg0MCwgMHgyMywgMHgwQSwgMHhDRiwgMHgwMCwgMHg2QywgMHgwMCwgMHgzMiwgMHg4OCwKKzB4QzgsIDB4ODAsIDB4NDAsIDB4QzMsIDB4MDgsIDB4MEMsIDB4NDAsIDB4RjIsIDB4OEQsIDB4RDEsIDB4MzAsIDB4MDIsIDB4QzMsCisweDAwLCAweDBELCAweDAzLCAweEYwLCAweDA0LCAweEMwLCAweDRCLCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHhCOCwgMHgzRCwgMHgwMCwgMHhCRiwgMHg4MCwgMHhGMCwgMHgwMiwgMHhGMCwgMHgwNywKKzB4QzAsIDB4MkYsIDB4MEEsIDB4RkYsIDB4MDIsIDB4REMsIDB4MDAsIDB4RjAsIDB4OEIsIDB4RDAsIDB4M0IsIDB4NDIsIDB4RkYsCisweDA4LCAweEY0LCAweDAwLCAweEIwLCAweDhGLCAweEMwLCAweDNCLCAweDAyLCAweEZGLCAweDAwLCAweEZDLCAweDQzLCAweEYwLAorMHg4NywgMHhDMCwgMHgwQiwgMHg2MCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwKKzB4QTAsIDB4NjcsIDB4MDAsIDB4RDMsIDB4MjAsIDB4N0MsIDB4MDcsIDB4MzQsIDB4MDUsIDB4QzAsIDB4NzAsIDB4MDAsIDB4OTMsCisweDA2LCAweDVDLCAweDAwLCAweEYwLCAweDgxLCAweEQwLCAweDAwLCAweDEwLCAweDkzLCAweDg2LCAweDRELCAweDA0LCAweDMwLAorMHgwRCwgMHhDMCwgMHgzNywgMHgwMCwgMHhEMywgMHgwNCwgMHgwRCwgMHgxMywgMHgzMSwgMHgwNSwgMHhDMCwgMHg1NCwgMHgwMCwKKzB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4ODgsIDB4MjksIDB4MDAsIDB4RTEsCisweDAwLCAweEI0LCAweDAzLCAweDEwLCAweDA2LCAweEMwLCAweDNBLCAweDEwLCAweEUxLCAweDAwLCAweDg0LCAweDAyLCAweEQwLAorMHg0MywgMHg0MCwgMHgyOSwgMHgwMCwgMHhFQiwgMHgwOCwgMHg4NCwgMHgwMSwgMHg1MSwgMHgwRSwgMHg0MCwgMHgzQiwgMHgwMSwKKzB4RjEsIDB4MDgsIDB4OTQsIDB4NDMsIDB4MTAsIDB4MEYsIDB4QzAsIDB4NEEsIDB4MjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweDAwLCAweDZELCAweDAwLCAweEExLCAweDAxLCAweEY2LCAweDA2LCAweDEwLAorMHgxNiwgMHg0MCwgMHg2QywgMHgxMCwgMHhGMCwgMHgwMSwgMHhCNCwgMHgwNCwgMHhEMCwgMHgzQSwgMHg0MCwgMHg0QywgMHgwMCwKKzB4QzEsIDB4MDEsIDB4QzYsIDB4MDQsIDB4MTAsIDB4M0UsIDB4NDAsIDB4NzMsIDB4MDIsIDB4RTksIDB4MDEsIDB4ODQsIDB4MDMsCisweDEwLCAweDFFLCAweDQwLCAweDBDLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgxMiwgMHgyOCwgMHg2MywgMHgwMCwgMHg4MSwgMHgwNCwgMHgzNiwgMHgxNiwgMHgxMCwgMHgxNCwgMHg0NCwgMHgyMiwgMHgwMiwKKzB4QzEsIDB4MDAsIDB4MjQsIDB4MEIsIDB4RDEsIDB4MEQsIDB4NDEsIDB4MzAsIDB4MDgsIDB4QzksIDB4MDAsIDB4MDQsIDB4MUYsCisweDUwLCAweDFELCAweDQwLCAweDMzLCAweDEwLCAweEQ5LCAweDAwLCAweDE1LCAweDAzLCAweDEwLCAweEVDLCAweDQwLCAweDRBLAorMHgyMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNywgMHhBOCwgMHgxRCwgMHgwMSwKKzB4NzMsIDB4ODAsIDB4RkMsIDB4MDUsIDB4MzMsIDB4RTcsIDB4Q0MsIDB4REMsIDB4NDAsIDB4NTMsIDB4QzAsIDB4QkMsIDB4MTUsCisweEYxLCAweDI3LCAweEQwLCAweDFDLCAweDA4LCAweDUzLCAweDAwLCAweENELCAweDA1LCAweDMyLCAweDE3LCAweEMwLCAweDE3LAorMHg0MCwgMHg1QiwgMHgwMCwgMHg0QywgMHgwMSwgMHgzMCwgMHgzNywgMHhDMCwgMHg1QywgMHgyMCwgMHgwNiwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4MDAsIDB4MDcsIDB4NTQsIDB4MUYsIDB4MDAsIDB4N0MsIDB4MjAsCisweEYwLCAweDAxLCAweEMwLCAweDA3LCAweDI0LCAweDFGLCAweDAyLCAweDVDLCAweDQ4LCAweEYwLCAweDAxLCAweEMwLCAweDAzLAorMHgwMCwgMHgxRiwgMHgwMCwgMHg3QywgMHgyMCwgMHhGMCwgMHgwMSwgMHhDMCwgMHgwNywgMHgwMCwgMHgxNywgMHgyMCwgMHg3QywKKzB4ODAsIDB4RjAsIDB4MDAsIDB4QzAsIDB4NEIsIDB4MDAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDEwLCAweDA4LCAweDI3LCAweDAwLCAweDlGLCAweDAwLCAweDdDLCAweDAyLCAweEYwLCAweDA5LCAweEMwLCAweDI0LAorMHgwMCwgMHg5RiwgMHgwNSwgMHg0QywgMHgwRSwgMHgzMCwgMHgwOSwgMHhDMCwgMHg2NCwgMHgyMCwgMHg4QSwgMHgwMSwgMHg2QywKKzB4MDIsIDB4RjAsIDB4MDksIDB4QzgsIDB4NjAsIDB4MDAsIDB4OTMsIDB4MDAsIDB4NEMsIDB4MjIsIDB4RjAsIDB4ODksIDB4QzIsCisweDQwLCAweDIwLCAweDBDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDIwLCAweDI2LAorMHgwMCwgMHg5RCwgMHgwMCwgMHg3MCwgMHgwMiwgMHhEMCwgMHgwOSwgMHg0MCwgMHgyNSwgMHgwMCwgMHg4QywgMHgwMCwgMHg0NCwKKzB4MTIsIDB4MTAsIDB4MDksIDB4NDAsIDB4NjUsIDB4MDgsIDB4OUIsIDB4MDEsIDB4NkMsIDB4MDIsIDB4RDAsIDB4QTksIDB4NDEsCisweEU0LCAweDAxLCAweDkxLCAweDAyLCAweDQ1LCAweDA2LCAweEQwLCAweDE5LCAweDQwLCAweDA0LCAweDAwLCAweDA4LCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHhBMCwgMHgyNCwgMHgwMCwgMHg5RCwgMHgyMCwgMHg3MCwKKzB4MDMsIDB4RDAsIDB4MEMsIDB4NDAsIDB4MzQsIDB4MDAsIDB4OUMsIDB4MTAsIDB4NDQsIDB4MDIsIDB4MTQsIDB4MDksIDB4NDAsCisweDI0LCAweDAyLCAweDlELCAweDQ4LCAweDY1LCAweDEyLCAweEQyLCAweDA5LCAweDQwLCAweDI0LCAweDQyLCAweDkxLCAweDE0LAorMHg0NCwgMHg4MiwgMHhEMCwgMHgwRCwgMHg0NCwgMHg2MCwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MTAsIDB4MjAsIDB4QTAsIDB4MTAsIDB4OEQsIDB4MDIsIDB4MzQsIDB4MEEsIDB4RDAsIDB4MjgsIDB4NDAsCisweDIxLCAweDEwLCAweDlELCAweDE0LCAweDQ2LCAweDAyLCAweDE4LCAweDQ4LCAweDQ1LCAweDIxLCAweDQ1LCAweENELCAweDE0LAorMHgyNCwgMHgwMiwgMHhEMCwgMHg0OCwgMHg3MSwgMHgyMCwgMHg4NSwgMHg4MSwgMHgxNCwgMHgwNCwgMHg1MiwgMHhEMCwgMHg0OCwKKzB4NDEsIDB4NDAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MUQsIDB4QjAsCisweDA2LCAweDAwLCAweDFGLCAweDAwLCAweDdDLCAweDAwLCAweEQwLCAweDAwLCAweDQwLCAweDA0LCAweDEwLCAweDFGLCAweDA0LAorMHg0QywgMHgwMCwgMHgzMCwgMHg0MSwgMHhDNCwgMHgxNCwgMHgyMSwgMHgxRiwgMHg0NCwgMHg2QywgMHgwMCwgMHhGMSwgMHg0MSwKKzB4QzAsIDB4MDQsIDB4MDEsIDB4MTMsIDB4QzQsIDB4NEMsIDB4MTAsIDB4RjAsIDB4NDEsIDB4RDAsIDB4NzQsIDB4QzAsIDB4MEEsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE5LCAweEI4LCAweDdCLCAweDAwLCAweEZGLCAweDAxLAorMHhCQywgMHgwNiwgMHhGMCwgMHgxQiwgMHhDMCwgMHgyRiwgMHgwNSwgMHhBRSwgMHgwMCwgMHhGRCwgMHg1MiwgMHhGMSwgMHg0RiwKKzB4QzEsIDB4MkYsIDB4NDUsIDB4QkIsIDB4MTQsIDB4QkMsIDB4NTIsIDB4RjAsIDB4NEIsIDB4QzEsIDB4MjcsIDB4NDAsIDB4QkYsCisweDE0LCAweDdDLCAweDAyLCAweEYyLCAweDRCLCAweEMxLCAweDY3LCAweDYwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgxOSwgMHhBMCwgMHhBNywgMHgwMCwgMHg5MywgMHgwMiwgMHg0QywgMHgwMiwgMHgzMCwgMHgyOCwKKzB4QzAsIDB4QUYsIDB4MDAsIDB4QUYsIDB4MDEsIDB4REMsIDB4MEEsIDB4RjAsIDB4MzksIDB4QzAsIDB4RUQsIDB4MDUsIDB4QjMsCisweDAzLCAweERDLCAweDAyLCAweDMyLCAweDVCLCAweEMxLCAweDJDLCAweDAwLCAweEIzLCAweDAxLCAweENDLCAweDA2LCAweDMwLAorMHg2QSwgMHhDMCwgMHg2MCwgMHgwMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxQywKKzB4MDgsIDB4NDcsIDB4MDEsIDB4MUIsIDB4MDEsIDB4NkMsIDB4MTQsIDB4QjAsIDB4NTEsIDB4NDAsIDB4NDcsIDB4MDAsIDB4MUQsCisweDAyLCAweDQ1LCAweDA0LCAweEQxLCAweDEwLCAweDQwLCAweEMwLCAweDAwLCAweDExLCAweDAxLCAweDQ1LCAweDE0LCAweDEwLAorMHg3NSwgMHhDMCwgMHgwNywgMHgxMCwgMHgxMSwgMHgwNSwgMHg1NCwgMHgwMCwgMHgxMCwgMHg2MSwgMHg0MCwgMHg3MCwgMHgyMCwKKzB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4QTAsIDB4MjMsIDB4MDAsIDB4ODEsCisweDIwLCAweDA0LCAweDQyLCAweDEwLCAweDA4LCAweDQwLCAweDIzLCAweDA4LCAweDhELCAweDAyLCAweDE0LCAweDEyLCAweEQwLAorMHgyOCwgMHg0MCwgMHgyMSwgMHgwMCwgMHg4NSwgMHgwMiwgMHgxNCwgMHg0NiwgMHgxMCwgMHgwOCwgMHg0OSwgMHgyMSwgMHgwMCwKKzB4ODEsIDB4MTIsIDB4MDQsIDB4MEEsIDB4MTAsIDB4MjgsIDB4NDAsIDB4NDAsIDB4ODAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweEE4LCAweDIxLCAweDAwLCAweDg5LCAweDAwLCAweDI0LCAweDQyLCAweDkwLAorMHgwOSwgMHg0MCwgMHgyNywgMHgwMCwgMHg5RCwgMHgwNCwgMHg0NCwgMHgxMiwgMHhEMCwgMHgxOSwgMHg0MCwgMHhBNCwgMHgwMCwKKzB4OTUsIDB4MDAsIDB4NDQsIDB4MDIsIDB4MTAsIDB4MDksIDB4NDAsIDB4MjcsIDB4MDAsIDB4OTAsIDB4MDQsIDB4NTQsIDB4MDIsCisweDEwLCAweDM5LCAweDQwLCAweDYwLCAweDIwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwNSwgMHhBOCwgMHgyRiwgMHgwMiwgMHhCMywgMHgwMCwgMHhDQywgMHgwQSwgMHgzMCwgMHgwQiwgMHhDMCwgMHhBNywgMHgwNCwKKzB4OUYsIDB4MDEsIDB4NUMsIDB4MDIsIDB4RjAsIDB4MjksIDB4QzgsIDB4MjUsIDB4NDAsIDB4OTcsIDB4MDAsIDB4NUMsIDB4MEEsCisweDM0LCAweDA5LCAweEM4LCAweDI1LCAweDQwLCAweDkzLCAweDAwLCAweDRELCAweDAyLCAweDM0LCAweDI5LCAweEQwLCAweDE0LAorMHgyMCwgMHgwRSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHg4MCwgMHg2NSwgMHgwMCwKKzB4OUYsIDB4MDMsIDB4N0MsIDB4MEEsIDB4RTAsIDB4MDksIDB4QzAsIDB4QTcsIDB4MDAsIDB4OEYsIDB4MDAsIDB4N0MsIDB4MDIsCisweEYwLCAweDA4LCAweEM0LCAweDI3LCAweDAxLCAweDhCLCAweDQ1LCAweDdDLCAweDAyLCAweEYwLCAweDk4LCAweEUwLCAweDIxLAorMHgwMCwgMHg5RiwgMHgwMCwgMHgzQywgMHgwMiwgMHhGMCwgMHgwOSwgMHhDMCwgMHg1MywgMHgwMCwgMHgwNiwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDgsIDB4MDUsIDB4MDAsIDB4MTMsIDB4MDAsIDB4NEQsIDB4MDgsCisweEYwLCAweDAxLCAweEMwLCAweDA0LCAweDAwLCAweDEzLCAweDEwLCAweDZDLCAweDAwLCAweEYwLCAweDAxLCAweEQwLCAweDA0LAorMHg0MCwgMHgxMywgMHgwMCwgMHg2QywgMHgwMCwgMHgzMCwgMHgwMSwgMHhDMCwgMHgwNCwgMHgwNCwgMHgwMywgMHg4MCwgMHg3QywKKzB4MDAsIDB4MzQsIDB4MjAsIDB4QzAsIDB4NTAsIDB4MjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDE0LCAweEEwLCAweDE0LCAweDEwLCAweDUxLCAweDAwLCAweDQ0LCAweDAxLCAweEQwLCAweDA1LCAweDQwLCAweDU0LAorMHgwMSwgMHg3NSwgMHgwMiwgMHhDNCwgMHgwNSwgMHhEMCwgMHgwNSwgMHg1MCwgMHhEOCwgMHg0MCwgMHg3NSwgMHgwMCwgMHhDNCwKKzB4MTEsIDB4MTAsIDB4NDcsIDB4NTAsIDB4MUMsIDB4MDAsIDB4NzEsIDB4MDAsIDB4NzQsIDB4MDEsIDB4MTAsIDB4MTUsIDB4NDAsCisweDUwLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweEEwLCAweDMyLAorMHgwMCwgMHhDMSwgMHgwMCwgMHgwNCwgMHgwMywgMHhEMCwgMHgwQywgMHg0MCwgMHgyMCwgMHgwMCwgMHhDMSwgMHgwQSwgMHgyNCwKKzB4MjYsIDB4RDAsIDB4MEMsIDB4NDQsIDB4RjAsIDB4ODYsIDB4QzQsIDB4MDksIDB4NjUsIDB4MDcsIDB4NTAsIDB4MEMsIDB4MDAsCisweEYwLCAweDAwLCAweEM1LCAweDIwLCAweDM0LCAweDAyLCAweDEwLCAweDFDLCAweDQwLCAweDUwLCAweDAwLCAweDBBLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHg4MCwgMHgzQywgMHgwMSwgMHhGMSwgMHgwNCwgMHg4NCwKKzB4QTMsIDB4RDAsIDB4MUYsIDB4NDAsIDB4NzgsIDB4MDAsIDB4MjUsIDB4MDAsIDB4ODQsIDB4MDAsIDB4RDAsIDB4NEUsIDB4NDAsCisweDI4LCAweDAwLCAweDY1LCAweDAwLCAweDg1LCAweDEzLCAweDUwLCAweDBBLCAweDQwLCAweDkwLCAweDAwLCAweEE1LCAweDAwLAorMHhCMCwgMHgwMiwgMHgxMCwgMHgwRiwgMHg0MSwgMHgxNCwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MTUsIDB4MTAsIDB4NzgsIDB4MDAsIDB4RTMsIDB4MDcsIDB4OEMsIDB4MTcsIDB4RjAsIDB4N0UsIDB4RDAsCisweDZDLCAweDAwLCAweEEzLCAweDAxLCAweEFDLCAweDA1LCAweEYwLCAweDNFLCAweEMxLCAweDY4LCAweDAwLCAweDc3LCAweDAxLAorMHhFRCwgMHgwRiwgMHg3NCwgMHgxMywgMHg4NCwgMHg0OCwgMHgwMCwgMHhBNywgMHgwMSwgMHgzQywgMHgwNiwgMHgzMCwgMHgxRSwKKzB4QzAsIDB4NTQsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4QjgsCisweDMxLCAweDQwLCAweENGLCAweDAwLCAweDdDLCAweDAzLCAweEYwLCAweDBELCAweEMwLCAweDNGLCAweDAwLCAweDlGLCAweDAwLAorMHhGRCwgMHgwMCwgMHhGMCwgMHgyRCwgMHhDMCwgMHgyNywgMHgwMiwgMHg1RCwgMHgwMCwgMHg3QywgMHgwMywgMHg5MCwgMHgwMSwKKzB4QzAsIDB4MDcsIDB4NDAsIDB4MUIsIDB4MDAsIDB4N0MsIDB4MDIsIDB4RjAsIDB4MEQsIDB4RDAsIDB4NDMsIDB4NjAsIDB4MDYsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweEEwLCAweDdGLCAweDA0LCAweEYzLCAweDAxLAorMHhDQywgMHgyNywgMHgzQywgMHgxRiwgMHhDMCwgMHg3QiwgMHgwMCwgMHgzNywgMHgwMSwgMHhEQywgMHgwNiwgMHg3MiwgMHgxRiwKKzB4QzAsIDB4NkQsIDB4MDAsIDB4RjcsIDB4ODEsIDB4Q0MsIDB4MDYsIDB4MzEsIDB4MUIsIDB4QzAsIDB4NEMsIDB4MTAsIDB4RTMsCisweDAxLCAweENDLCAweDA2LCAweEYwLCAweDFGLCAweEMwLCAweDAzLCAweDAwLCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwgMHg4OCwgMHgzOSwgMHgwMCwgMHhFMSwgMHgwMCwgMHhBQywgMHgyMywgMHgxOCwgMHg0RSwKKzB4NDAsIDB4M0IsIDB4MDAsIDB4MjEsIDB4MDQsIDB4ODQsIDB4ODAsIDB4RDAsIDB4NEUsIDB4NDAsIDB4MkMsIDB4MDAsIDB4NjEsCisweDAyLCAweDhDLCAweDAyLCAweDEwLCAweDBBLCAweDQwLCAweDA5LCAweDAwLCAweEFCLCAweDAwLCAweDk0LCAweDAyLCAweEQwLAorMHgwRSwgMHg0MCwgMHg1NywgMHgyMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwKKzB4MDAsIDB4NzksIDB4MDAsIDB4RTEsIDB4MTEsIDB4ODQsIDB4MDcsIDB4MTIsIDB4MUUsIDB4NDAsIDB4M0IsIDB4MDAsIDB4MDUsCisweDAwLCAweDkwLCAweDAwLCAweDUwLCAweDBFLCAweDQ0LCAweDA5LCAweDA0LCAweDNELCAweDEwLCAweDg0LCAweDAzLCAweDEwLAorMHgwMiwgMHg0MSwgMHgwQSwgMHgwMCwgMHhBMSwgMHgwMCwgMHg4NCwgMHgwMiwgMHhEMCwgMHgyRSwgMHg0MCwgMHgwMywgMHgwMCwKKzB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDYsIDB4MjgsIDB4MzMsIDB4NDAsIDB4QzEsCisweDEwLCAweDI0LCAweDAzLCAweDExLCAweDhDLCAweDQwLCAweDMzLCAweDAwLCAweDAxLCAweDAwLCAweDA0LCAweDBDLCAweEQwLAorMHg4QywgMHg0MCwgMHg4MCwgMHgwMSwgMHgwOSwgMHg0MCwgMHgyNCwgMHgwRiwgMHgxMSwgMHgxMSwgMHg0NCwgMHgwMywgMHgwMCwKKzB4MDksIDB4MDAsIDB4MTQsIDB4MDIsIDB4RDAsIDB4MEMsIDB4NDAsIDB4MTMsIDB4MjAsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFELCAweEE4LCAweDM1LCAweDAwLCAweEQzLCAweDAwLCAweDBDLCAweDAzLCAweDMwLAorMHgzRCwgMHhDMCwgMHgzNywgMHgwMCwgMHg4NywgMHgwMCwgMHg1QywgMHgxRSwgMHg3MCwgMHgxRiwgMHhDMCwgMHg0RCwgMHgwMCwKKzB4OUYsIDB4MDAsIDB4Q0QsIDB4MTMsIDB4MzQsIDB4MDksIDB4QzAsIDB4MDYsIDB4MDgsIDB4RDMsIDB4MDAsIDB4NEMsIDB4MDMsCisweEYzLCAweDBELCAweEM0LCAweDU3LCAweDIwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMSwgMHgwMCwgMHgzNywgMHgwMCwgMHhERiwgMHgwMCwgMHg3QywgMHgwMywgMHhGMCwgMHgwRCwgMHhDMSwgMHgzNywgMHgwMCwKKzB4MUYsIDB4MDgsIDB4N0MsIDB4NDAsIDB4RjAsIDB4MEQsIDB4QzQsIDB4ODMsIDB4MDAsIDB4NDcsIDB4MDAsIDB4NUMsIDB4MDAsCisweEYwLCAweDAxLCAweEMwLCAweDg1LCAweDEwLCAweENGLCAweDAwLCAweDNDLCAweDAzLCAweEYwLCAweDhELCAweEM0LCAweDA3LAorMHgwMCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwOCwgMHgzRiwgMHgwMCwKKzB4RkYsIDB4MDAsIDB4Q0MsIDB4MDMsIDB4MzAsIDB4MEYsIDB4QzAsIDB4M0YsIDB4MDAsIDB4QjMsIDB4NDAsIDB4RUMsIDB4MDAsCisweDMwLCAweDBELCAweEMwLCAweDRELCAweDAwLCAweEIzLCAweDAyLCAweENDLCAweDQzLCAweDEwLCAweDAxLCAweDQwLCAweDA0LAorMHgwMCwgMHhCRiwgMHgwMSwgMHhDQywgMHgxNiwgMHgzMCwgMHgwRiwgMHhDMCwgMHgwMywgMHgyMiwgMHgwQywgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODEsIDB4MjAsIDB4MzYsIDB4MDAsIDB4Q0QsIDB4MDAsIDB4NDQsIDB4MDMsCisweDE0LCAweDBELCAweDQ0LCAweDczLCAweDAyLCAweDkxLCAweDAxLCAweDA0LCAweDA0LCAweDE0LCAweDBELCAweDUwLCAweDA0LAorMHg4NiwgMHg1MSwgMHgwMiwgMHg2QywgMHgzQywgMHg1MCwgMHgzMSwgMHg0MCwgMHhDNSwgMHgwMSwgMHgxRCwgMHgwMSwgMHg0NCwKKzB4MDIsIDB4QjAsIDB4MDksIDB4NDAsIDB4MDcsIDB4MDIsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAxLCAweEEwLCAweDM0LCAweDAwLCAweERELCAweDAwLCAweDQ0LCAweDAzLCAweDEwLCAweDBELCAweDQwLCAweDM3LAorMHgwMCwgMHgxMSwgMHgwMSwgMHg2NCwgMHgwNiwgMHgxMCwgMHgwQywgMHg0QSwgMHgwNCwgMHgwMCwgMHg5NSwgMHgwMCwgMHgwNCwKKzB4MDIsIDB4NTAsIDB4MzksIDB4NDAsIDB4NDUsIDB4MTAsIDB4REQsIDB4MDQsIDB4NDAsIDB4MDMsIDB4MTEsIDB4MUQsIDB4NDAsCisweDA3LCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDIwLCAweDMwLAorMHgwMCwgMHhERCwgMHgwMCwgMHg0NSwgMHgwMywgMHgxMCwgMHgwQywgMHg0MCwgMHgzNywgMHg0MCwgMHgwMSwgMHgwMCwgMHg0NCwKKzB4MDAsIDB4MTAsIDB4MEMsIDB4NDAsIDB4MDEsIDB4ODAsIDB4NDEsIDB4MDAsIDB4MjQsIDB4MDAsIDB4NDAsIDB4MDAsIDB4NDAsCisweDAxLCAweDAwLCAweENELCAweDAwLCAweDA1LCAweDAzLCAweDgwLCAweDBDLCAweDQwLCAweDQzLCAweDgwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHhCMCwgMHgzQSwgMHgxMCwgMHhFRiwgMHgwMCwgMHg4QywKKzB4MDMsIDB4MzAsIDB4MEYsIDB4NDAsIDB4MzcsIDB4MDAsIDB4MTMsIDB4MDAsIDB4NkMsIDB4MDAsIDB4MzgsIDB4MEYsIDB4RDAsCisweDA0LCAweDAwLCAweDk1LCAweDAwLCAweDBELCAweDAzLCAweDYxLCAweDAxLCAweDgwLCAweDA1LCAweDIwLCAweDlGLCAweDAwLAorMHg0RCwgMHgwMiwgMHgzMCwgMHgwRCwgMHhDMCwgMHgwMywgMHhDMCwgMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDUsIDB4QjgsIDB4M0YsIDB4MDAsIDB4RkYsIDB4MDAsIDB4RkMsIDB4MDMsIDB4RjAsIDB4MEYsIDB4QzAsCisweDNGLCAweDIwLCAweDNGLCAweDAwLCAweEZDLCAweDAwLCAweEYxLCAweDBGLCAweEMwLCAweDBFLCAweDAwLCAweDJFLCAweDAwLAorMHhGQywgMHgwMCwgMHhGMCwgMHgwMywgMHhDMCwgMHgwRiwgMHgwMCwgMHgzRiwgMHgwMCwgMHhGQywgMHgwMiwgMHhGMSwgMHgwRiwKKzB4QzAsIDB4MTcsIDB4NjAsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4QTEsCisweDgyLCAweEMwLCAweDBFLCAweDAyLCAweDNCLCAweDA4LCAweEUwLCAweDI4LCAweEIwLCAweDgzLCAweEUwLCAweDBFLCAweDgyLAorMHgzOCwgMHgwOCwgMHhFQywgMHgyMCwgMHg5MCwgMHg4MywgMHhDOCwgMHgwRSwgMHgwMiwgMHgxQiwgMHgwOCwgMHhFQywgMHgyOCwKKzB4QTgsIDB4ODMsIDB4QTAsIDB4MEUsIDB4MDIsIDB4M0EsIDB4MDgsIDB4Q0MsIDB4MjAsIDB4OTgsIDB4MDMsIDB4OEMsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweEEzLCAweDIyLCAweEEwLCAweDhFLCAweEEwLAorMHgzQSwgMHgwMiwgMHhFQSwgMHgwOCwgMHhBMCwgMHgyMywgMHgyMCwgMHg4RSwgMHhBMCwgMHgzQiwgMHgwMiwgMHhFQSwgMHgwOCwKKzB4QTgsIDB4MjMsIDB4QTAsIDB4OEUsIDB4QTAsIDB4MzIsIDB4MDIsIDB4NEEsIDB4MDgsIDB4QTgsIDB4MjMsIDB4ODgsIDB4OEUsCisweDgwLCAweDNBLCAweDAyLCAweENBLCAweDA4LCAweEE4LCAweDAzLCAweDhDLCAweDBBLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MSwgMHg0MCwgMHg4MCwgMHgwNCwgMHgwMSwgMHgxMiwgMHgwNCwgMHg0OCwgMHgxOCwKKzB4MjAsIDB4NDEsIDB4ODAsIDB4MDQsIDB4MDEsIDB4MTIsIDB4MDQsIDB4NDgsIDB4MTAsIDB4MjAsIDB4NDEsIDB4ODAsIDB4MDQsCisweDAxLCAweDEyLCAweDA0LCAweDQ4LCAweDE4LCAweDIwLCAweDQxLCAweEEwLCAweDA0LCAweDAxLCAweDEyLCAweDA0LCAweDQ4LAorMHgxMCwgMHgyMCwgMHgwMSwgMHg4NCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MjEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4ODAsIDB4MUEsIDB4MDAsIDB4NjgsIDB4MDAsIDB4QTAsIDB4MDEsIDB4QTAsIDB4MEUsCisweDIwLCAweDFBLCAweDAwLCAweDY4LCAweDAwLCAweEEwLCAweDAxLCAweDAwLCAweDA2LCAweDAwLCAweDBBLCAweDAwLCAweDI4LAorMHgxMCwgMHhBOCwgMHgwMSwgMHg4OCwgMHgwNiwgMHg4MCwgMHgxQSwgMHgwMCwgMHg2OCwgMHgwMCwgMHg4OCwgMHgwMSwgMHgwNCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4QTMsIDB4MTIsIDB4QTAsIDB4NEUsCisweDgwLCAweDNBLCAweDAxLCAweEVBLCAweDE0LCAweEEwLCAweDEzLCAweEEwLCAweDRBLCAweDgwLCAweDNBLCAweDAxLCAweEVBLAorMHgwNCwgMHhBOCwgMHgxMywgMHhBMCwgMHg0RSwgMHg4MiwgMHgzQSwgMHgwMSwgMHhFQSwgMHgwNCwgMHhBMCwgMHgxMywgMHg4MCwKKzB4NEEsIDB4ODAsIDB4M0EsIDB4MDEsIDB4RUEsIDB4MEMsIDB4QTgsIDB4MDMsIDB4OEMsIDB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweEEzLCAweDAwLCAweDAwLCAweDA2LCAweDAwLCAweDE4LCAweDAwLCAweDYwLAorMHgwMCwgMHg4OCwgMHgwMSwgMHgwMCwgMHgwNiwgMHgwMCwgMHgxOCwgMHgwMCwgMHg2MCwgMHgwMCwgMHg4MCwgMHgwMSwgMHgwMCwKKzB4MDYsIDB4MDAsIDB4MTgsIDB4MDAsIDB4NjAsIDB4MDAsIDB4ODAsIDB4MDEsIDB4MDAsIDB4MDYsIDB4MDAsIDB4MTgsIDB4MDAsCisweDYwLCAweDAwLCAweDgwLCAweDAxLCAweDhDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHhBMywgMHgyMCwgMHgyMCwgMHgwNCwgMHg4MCwgMHgxMCwgMHgwMSwgMHg0MiwgMHgwMCwgMHgwOCwgMHgxMSwgMHgyMCwKKzB4MDQsIDB4ODAsIDB4MTAsIDB4MDEsIDB4NDIsIDB4MDQsIDB4MDgsIDB4MTEsIDB4MjAsIDB4QzAsIDB4ODAsIDB4MTAsIDB4MDEsCisweDQyLCAweDAwLCAweDAwLCAweDExLCAweDAwLCAweDA0LCAweDgwLCAweDEwLCAweDAxLCAweDQyLCAweDA0LCAweDA4LCAweDAxLAorMHg4QywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MiwgMHhEMiwgMHhBMCwKKzB4MDIsIDB4MDEsIDB4MEEsIDB4MDUsIDB4MkEsIDB4MTAsIDB4QTgsIDB4NTAsIDB4ODAsIDB4MDIsIDB4MDEsIDB4MEEsIDB4MDcsCisweDJBLCAweDFDLCAweEE4LCAweDUwLCAweEEwLCAweDQyLCAweDgzLCAweDBBLCAweDA1LCAweDJBLCAweDEwLCAweEEwLCAweDUwLAorMHg4OCwgMHgwMiwgMHgwMSwgMHgwQSwgMHgwNSwgMHgyQSwgMHgzQywgMHhBMCwgMHgwMCwgMHg4QywgMHgwQSwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjEsIDB4MzAsIDB4ODAsIDB4QzgsIDB4MDAsIDB4QUEsIDB4MDMsCisweEE4LCAweDBFLCAweDIwLCAweDM4LCAweDgwLCAweEUwLCAweDAwLCAweEFBLCAweDA3LCAweDA4LCAweDFFLCAweEEwLCAweDMyLAorMHg4MCwgMHhDQSwgMHgwMCwgMHgyMiwgMHgwMywgMHhBOCwgMHgwQywgMHhBMCwgMHgzQSwgMHhBMCwgMHhDQSwgMHgwMCwgMHgyQSwKKzB4MDMsIDB4QTgsIDB4MEMsIDB4MjAsIDB4MDIsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDIxLCAweDcyLCAweDAwLCAweDQ4LCAweDIwLCAweDE4LCAweDgwLCAweDIyLCAweDAwLCAweDAwLCAweDAwLAorMHgwOCwgMHg0MCwgMHgyMCwgMHgwOCwgMHgwMiwgMHgwMCwgMHgwOCwgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MiwgMHgwMCwgMHgyMCwKKzB4MDAsIDB4MjAsIDB4MDQsIDB4ODAsIDB4MDAsIDB4MDgsIDB4NDIsIDB4MDAsIDB4MTgsIDB4MDAsIDB4MjAsIDB4MDgsIDB4MDAsCisweDgyLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweEEzLCAweDE2LAorMHg0MCwgMHgxOCwgMHgwMCwgMHg0MSwgMHgwMCwgMHgwNCwgMHgwMSwgMHgxQSwgMHgwNCwgMHg0MCwgMHgxMCwgMHgyMCwgMHg0MSwKKzB4ODAsIDB4MDQsIDB4MDEsIDB4MTAsIDB4MDQsIDB4NDAsIDB4MTAsIDB4MDAsIDB4NjEsIDB4MDAsIDB4MDQsIDB4MDEsIDB4MTAsCisweDA0LCAweDA4LCAweDEwLCAweDAwLCAweDQxLCAweDAwLCAweDA0LCAweDAxLCAweDEwLCAweDgyLCAweDhDLCAweDBBLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhBMywgMHgwMiwgMHhBMCwgMHgwNiwgMHg4MCwgMHg5QSwKKzB4MDAsIDB4NkEsIDB4MDIsIDB4MjgsIDB4MDksIDB4QTAsIDB4MjQsIDB4MDAsIDB4OUIsIDB4MDAsIDB4NDgsIDB4MDIsIDB4QTgsCisweDAxLCAweEEwLCAweDA2LCAweDAwLCAweDFBLCAweDAwLCAweDZBLCAweDAwLCAweEI4LCAweDA5LCAweEEwLCAweDA2LCAweEEwLAorMHgxQiwgMHgwMCwgMHg2QSwgMHgwMCwgMHhBOCwgMHgwMSwgMHg4QywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4QTMsIDB4MDAsIDB4QzAsIDB4NDYsIDB4MDAsIDB4MUEsIDB4MDAsIDB4NkMsIDB4MDAsIDB4QkMsCisweDAxLCAweDkwLCAweDQ2LCAweDAwLCAweDFCLCAweDAwLCAweDZDLCAweDAwLCAweEE4LCAweDAxLCAweEMwLCAweDA2LCAweDIwLAorMHgxQiwgMHg4MCwgMHg2QywgMHgwNCwgMHhBMCwgMHgwMSwgMHhFOCwgMHg0NiwgMHgwMCwgMHgxQSwgMHgwMCwgMHg2QywgMHgwMCwKKzB4MzIsIDB4MDEsIDB4OEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4QTIsCisweDQyLCAweDIwLCAweDBDLCAweDgxLCAweDMwLCAweDA0LCAweEMyLCAweDEwLCAweDA4LCAweDQzLCAweDIwLCAweDA4LCAweDgxLAorMHgzMCwgMHgwNCwgMHhDMiwgMHgxMCwgMHgxOCwgMHg0MywgMHgyOCwgMHgwQywgMHgwMSwgMHgzMCwgMHgwNCwgMHhDMiwgMHgzMCwKKzB4MDgsIDB4NDMsIDB4MjAsIDB4MEMsIDB4ODEsIDB4MzAsIDB4MDQsIDB4QzIsIDB4MTAsIDB4MDgsIDB4MDMsIDB4OEMsIDB4MEEsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDIwLCAweDAyLCAweDAwLCAweDBDLCAweDAwLAorMHgzMCwgMHgwMCwgMHhDMCwgMHgwNCwgMHgwMCwgMHgwMywgMHgwMCwgMHgwQywgMHgwMCwgMHgzMCwgMHgwMCwgMHg4MCwgMHgwMCwKKzB4MDAsIDB4MDMsIDB4MDAsIDB4MEMsIDB4MDAsIDB4MzAsIDB4MDAsIDB4QzAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4MDAsIDB4MDgsCisweDAwLCAweDMwLCAweDAwLCAweEMwLCAweDAwLCAweDAwLCAweDAxLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHg0MCwgMHg4MCwgMHgwQywgMHg4MywgMHgzMiwgMHgwNCwgMHhDOCwgMHgzNCwKKzB4MjgsIDB4NDMsIDB4ODAsIDB4MEMsIDB4ODMsIDB4MzIsIDB4MDQsIDB4QzgsIDB4MTAsIDB4MjAsIDB4NDMsIDB4ODAsIDB4MEMsCisweDAxLCAweDMyLCAweDA0LCAweEM4LCAweDEwLCAweDI4LCAweDQzLCAweDgwLCAweDBDLCAweDgzLCAweDMyLCAweDA0LCAweEM4LAorMHgxMCwgMHgyMCwgMHgwMywgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4QTMsIDB4NDIsIDB4QTAsIDB4MDYsIDB4ODMsIDB4MUEsIDB4MDQsIDB4NkEsIDB4MzAsIDB4QTgsIDB4NDEsIDB4QTAsIDB4MDYsCisweDgzLCAweDFBLCAweDA0LCAweDZBLCAweDEwLCAweEE4LCAweDQxLCAweEEwLCAweDA2LCAweDgxLCAweDFBLCAweDA0LCAweDZBLAorMHgzMCwgMHhBOCwgMHg0MSwgMHg4MCwgMHgwRSwgMHg4MywgMHgwQSwgMHgwNCwgMHg2QSwgMHgxMCwgMHhBOCwgMHgwMSwgMHg4QywKKzB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4QTMsIDB4NDIsIDB4MDAsIDB4MDQsCisweDAxLCAweDMwLCAweDA0LCAweDQwLCAweDEwLCAweDAwLCAweDQxLCAweDAwLCAweDBDLCAweDAxLCAweDMwLCAweDA0LCAweEMwLAorMHgxMCwgMHgwMCwgMHg0MSwgMHgwMCwgMHgwNCwgMHgwMSwgMHgxMCwgMHgwNCwgMHg0MCwgMHgxMCwgMHgwMCwgMHg0MywgMHgwMCwKKzB4MDAsIDB4MDEsIDB4MzAsIDB4MDQsIDB4NDAsIDB4MTAsIDB4MDAsIDB4MDEsIDB4OEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweEEzLCAweDRBLCAweDIwLCAweDA2LCAweDgxLCAweDMwLCAweDA0LCAweDYyLAorMHgxMiwgMHgwOCwgMHg0QiwgMHgyMCwgMHgwNiwgMHg4MSwgMHhCMCwgMHgwNCwgMHg2MiwgMHgxMiwgMHg4OCwgMHg0MSwgMHgyMCwKKzB4MjYsIDB4ODEsIDB4MTgsIDB4MDQsIDB4NjIsIDB4MTAsIDB4MDgsIDB4NDMsIDB4MDAsIDB4MDYsIDB4ODEsIDB4MzAsIDB4MDQsCisweDYyLCAweDEyLCAweDg4LCAweDAxLCAweDhDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgyMywgMHgwNiwgMHhBMCwgMHgxQSwgMHgwMCwgMHg2MiwgMHgwMCwgMHhBQSwgMHgwMSwgMHgyMCwgMHgwNCwgMHhBMCwKKzB4MTgsIDB4MDAsIDB4NjIsIDB4MDAsIDB4OEEsIDB4MDEsIDB4QTAsIDB4MDYsIDB4QTAsIDB4MUEsIDB4ODAsIDB4NkEsIDB4ODAsCisweEFBLCAweDAxLCAweDIwLCAweDA2LCAweDgwLCAweDE4LCAweDAwLCAweDYyLCAweDAwLCAweEFBLCAweDAxLCAweEE4LCAweDAyLAorMHg4QywgMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MiwgMHg2MCwgMHg4MCwKKzB4ODIsIDB4MDEsIDB4MkEsIDB4MDYsIDB4MjgsIDB4MTgsIDB4QTAsIDB4NjAsIDB4ODAsIDB4ODIsIDB4MDEsIDB4MEEsIDB4MDYsCisweDI4LCAweDE4LCAweEEwLCAweDYwLCAweDAwLCAweDgyLCAweDAxLCAweDBBLCAweDA2LCAweDI4LCAweDE4LCAweEEwLCAweDYwLAorMHhBMCwgMHg4MiwgMHgwMSwgMHgwQSwgMHgwNiwgMHgyOCwgMHgxOCwgMHhBMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4NDgsIDB4ODAsIDB4MDAsIDB4MDEsIDB4MDIsIDB4MDQsCisweDQ4LCAweDEyLCAweDIwLCAweDQ5LCAweEEwLCAweDAwLCAweDAxLCAweDkyLCAweDA0LCAweDQ4LCAweDEyLCAweDI4LCAweDQxLAorMHg4MCwgMHgyMCwgMHgwMSwgMHgwMiwgMHgwNCwgMHgwOCwgMHgxMCwgMHgyMCwgMHg0MCwgMHg4OCwgMHgwMCwgMHgwMSwgMHgwMiwKKzB4MDQsIDB4MDgsIDB4MTIsIDB4MjAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweEEzLCAweDYyLCAweEMwLCAweDhBLCAweDAxLCAweDAxLCAweDA2LCAweEFDLCAweDE4LCAweEIwLCAweDYzLAorMHhDMCwgMHg4QSwgMHgwMSwgMHgyQiwgMHgwNiwgMHg4QywgMHgxOCwgMHhCMCwgMHg2MiwgMHhDMCwgMHg4QSwgMHgwMSwgMHgyQSwKKzB4MDYsIDB4QUMsIDB4MTgsIDB4QjAsIDB4NjIsIDB4QzAsIDB4OEEsIDB4MDEsIDB4MkIsIDB4MDYsIDB4OEMsIDB4MTgsIDB4QjAsCisweDAyLCAweDhDLCAweDBBLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweEEzLCAweDYyLAorMHhBMCwgMHg4RSwgMHgwMSwgMHgzQiwgMHgwNiwgMHhFQSwgMHgxOCwgMHhBOCwgMHg2MywgMHhBMCwgMHg4RSwgMHg4MSwgMHgzQSwKKzB4MDYsIDB4NjgsIDB4MTgsIDB4ODgsIDB4NjMsIDB4QTAsIDB4OEUsIDB4ODEsIDB4M0EsIDB4MDYsIDB4RUEsIDB4MTgsIDB4OTgsCisweDYzLCAweDIwLCAweDhFLCAweDgxLCAweDNCLCAweDA2LCAweENBLCAweDE4LCAweDg4LCAweDAzLCAweDhDLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhBMiwgMHg2MiwgMHg4MCwgMHg4RSwgMHgwMSwgMHgzQSwKKzB4MDYsIDB4RUMsIDB4MTgsIDB4QTAsIDB4NjEsIDB4QzAsIDB4OEUsIDB4MDEsIDB4M0EsIDB4MDYsIDB4RTgsIDB4MTgsIDB4QTAsCisweDYzLCAweEUwLCAweDhFLCAweDAxLCAweDFCLCAweDA2LCAweEUwLCAweDE4LCAweEEwLCAweDYzLCAweEMwLCAweDhFLCAweDAxLAorMHgzQSwgMHgwNiwgMHhFRSwgMHgxOCwgMHhCMCwgMHgwMywgMHg4OCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4QTIsIDB4NjIsIDB4QTAsIDB4OEUsIDB4ODEsIDB4MzIsIDB4MDYsIDB4RUEsIDB4MTgsIDB4MDgsCisweDYzLCAweEEwLCAweDhFLCAweEExLCAweDM4LCAweDg2LCAweEVBLCAweDE4LCAweDI4LCAweDYxLCAweDIwLCAweDhFLCAweDgxLAorMHgzMiwgMHg4NiwgMHhFOCwgMHgxOCwgMHhBOCwgMHg2MywgMHhBMCwgMHg4RSwgMHhBMSwgMHgzMCwgMHgwNiwgMHhFQSwgMHgxOCwKKzB4QTgsIDB4MDMsIDB4ODgsIDB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDQwLCAweDgwLCAweDA0LCAweDAxLCAweDFBLCAweDg0LCAweDQ4LCAweDEwLCAweDIwLCAweDQxLCAweDgwLCAweDA0LCAweDAxLAorMHgzMiwgMHgwNCwgMHg0OCwgMHgxMCwgMHgyMiwgMHg0MSwgMHg4MCwgMHgwNCwgMHgwMSwgMHgxMiwgMHgwNCwgMHg0OCwgMHgxMCwKKzB4MjAsIDB4NDEsIDB4ODgsIDB4MDQsIDB4MDEsIDB4M0EsIDB4MDQsIDB4NDgsIDB4MTAsIDB4MjAsIDB4MDEsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDYwLCAweDgwLCAweDg2LCAweDgxLAorMHgxQSwgMHgwNiwgMHg2OCwgMHgxOCwgMHhBMCwgMHg2MSwgMHg4MCwgMHg4NiwgMHg4MSwgMHgxOCwgMHgwNiwgMHg2OCwgMHgxOCwKKzB4QTAsIDB4NjEsIDB4ODAsIDB4ODQsIDB4MDEsIDB4MUEsIDB4MDYsIDB4NjgsIDB4MTgsIDB4QTgsIDB4NjEsIDB4ODAsIDB4ODYsCisweDgxLCAweDFBLCAweDA2LCAweDZBLCAweDE4LCAweEEwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhBMiwgMHgwMiwgMHhBMCwgMHgwRSwgMHg4MCwgMHgzQSwgMHgwMCwgMHhDQSwgMHgwMCwKKzB4MjIsIDB4MDMsIDB4QTAsIDB4MEMsIDB4ODAsIDB4MzIsIDB4MDAsIDB4Q0EsIDB4MDAsIDB4MjgsIDB4MDMsIDB4ODAsIDB4MEUsCisweDgwLCAweDJBLCAweDAwLCAweEVBLCAweDAwLCAweEE4LCAweDAzLCAweEEwLCAweDBFLCAweDgwLCAweDNBLCAweDAwLCAweEU4LAorMHgwMCwgMHhBOCwgMHgwMywgMHg4OCwgMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4QTIsIDB4NDIsIDB4MDAsIDB4MDYsIDB4MDEsIDB4MDgsIDB4MDQsIDB4NDAsIDB4MTAsIDB4MDgsIDB4NDEsIDB4MDAsIDB4MDQsCisweDAxLCAweDAwLCAweDBDLCAweDQwLCAweDEwLCAweDgwLCAweDQxLCAweDAwLCAweDA2LCAweDAxLCAweDE4LCAweDA0LCAweDYwLAorMHgxMCwgMHg4MCwgMHg0MSwgMHgwMCwgMHgwNCwgMHgwMSwgMHgxOCwgMHgwNCwgMHg2MCwgMHgxMCwgMHg4MCwgMHgwMSwgMHg4OCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4QTIsIDB4NDIsIDB4MjAsIDB4MDQsCisweDgxLCAweDEwLCAweDA0LCAweDIyLCAweDEwLCAweDg4LCAweDUxLCAweDIwLCAweDA2LCAweDgxLCAweDE4LCAweDA1LCAweDYyLAorMHgxMCwgMHgwOCwgMHg0MSwgMHgwMCwgMHgwNCwgMHg4MSwgMHgxMCwgMHgwNCwgMHg0MiwgMHgxMCwgMHgwQSwgMHg0MSwgMHgyMCwKKzB4MDYsIDB4ODEsIDB4MTAsIDB4MDQsIDB4NDAsIDB4MTAsIDB4MDgsIDB4MDEsIDB4ODgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweEEyLCAweDQyLCAweEEwLCAweDAyLCAweDAxLCAweDBBLCAweDBDLCAweEFBLAorMHgzMCwgMHhBOCwgMHhDMiwgMHhBMCwgMHgwQSwgMHgwMywgMHgyQSwgMHgwNCwgMHhBQSwgMHgzMCwgMHhBOCwgMHg0MiwgMHhBMCwKKzB4MDIsIDB4ODEsIDB4MEEsIDB4MDQsIDB4MkEsIDB4MTAsIDB4QTAsIDB4QzAsIDB4QTAsIDB4MDIsIDB4MjEsIDB4MEEsIDB4MDQsCisweDI4LCAweDEwLCAweEE4LCAweDAwLCAweDg4LCAweDBBLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHg0MCwgMHg4MCwgMHgwQSwgMHgwMywgMHgyQSwgMHgwQywgMHhBOCwgMHgxMCwgMHhBMCwgMHg1MiwgMHg4MCwKKzB4MEEsIDB4MDMsIDB4MkEsIDB4MDUsIDB4QTgsIDB4MzAsIDB4QTAsIDB4QzIsIDB4ODAsIDB4MEEsIDB4MDEsIDB4MkEsIDB4MEMsCisweEE4LCAweDMwLCAweEEwLCAweEMyLCAweDgwLCAweDBBLCAweDAzLCAweDJBLCAweDBDLCAweEE4LCAweDEwLCAweEEwLCAweDAyLAorMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwKKzB4NDIsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MjAsIDB4MDAsIDB4ODgsIDB4MDEsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDgsIDB4ODAsCisweDIwLCAweDAwLCAweDg4LCAweDEwLCAweDAwLCAweDQyLCAweDIwLCAweDA4LCAweDAxLCAweDIwLCAweDA0LCAweDgyLCAweDAwLAorMHgwMCwgMHg0MiwgMHgwMCwgMHgwOCwgMHgwMSwgMHgyMCwgMHgwNCwgMHg4MCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4QTIsIDB4NDIsIDB4NDAsIDB4MDAsIDB4MDEsIDB4MDEsIDB4MDQsCisweDA0LCAweDEwLCAweDEwLCAweDQxLCAweDQwLCAweDQ0LCAweDAxLCAweDAxLCAweDA0LCAweDA0LCAweDE0LCAweDEwLCAweDQwLAorMHg0MCwgMHgwMCwgMHgwMSwgMHgwMSwgMHgwNCwgMHgwMCwgMHgxMCwgMHgxMCwgMHg1MCwgMHg0MCwgMHgwMCwgMHgwMSwgMHgwMSwKKzB4MDQsIDB4MDQsIDB4MTAsIDB4MTAsIDB4MDAsIDB4ODgsIDB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweEEyLCAweDAyLCAweEUwLCAweDA2LCAweDgwLCAweDFCLCAweDAwLCAweDY4LCAweDAwLCAweEE4LCAweDAxLAorMHhBMCwgMHgwNiwgMHg4MCwgMHgxQiwgMHgwMCwgMHg2RSwgMHgwMCwgMHhBOCwgMHgwMSwgMHg4MCwgMHgwNiwgMHg4MCwgMHgxQSwKKzB4MDAsIDB4NkUsIDB4MDAsIDB4QjgsIDB4MDEsIDB4QTAsIDB4MDYsIDB4ODAsIDB4MUIsIDB4MDAsIDB4NkEsIDB4MDAsIDB4QTgsCisweDAxLCAweDg4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweEEzLCAweDAyLAorMHhDMCwgMHgwNiwgMHgwMCwgMHgzQiwgMHgwMCwgMHg2QywgMHgwMCwgMHhBMCwgMHgwMSwgMHhDMCwgMHgwNiwgMHgwMCwgMHgzQSwKKzB4MDAsIDB4NjgsIDB4MDAsIDB4QjAsIDB4MDEsIDB4QzAsIDB4MDYsIDB4MDAsIDB4MUEsIDB4MDAsIDB4NkMsIDB4MDAsIDB4QTAsCisweDAzLCAweEMwLCAweDA2LCAweDAwLCAweDNBLCAweDAwLCAweDRDLCAweDAwLCAweEIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHgwQywgMHg4MCwgMHgxOCwKKzB4MDAsIDB4QzIsIDB4MDAsIDB4MDgsIDB4MDEsIDB4MjgsIDB4MEMsIDB4ODAsIDB4MTgsIDB4ODAsIDB4QzAsIDB4MDAsIDB4MDgsCisweDAzLCAweDIwLCAweDBDLCAweDgyLCAweDM4LCAweDAwLCAweEMyLCAweDAwLCAweDg4LCAweDAxLCAweDIwLCAweDBDLCAweDgwLAorMHgxOCwgMHgwMCwgMHhDMiwgMHgwMCwgMHgwOCwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MkMsIDB4MDAsIDB4MTAsIDB4MDAsIDB4QzAsIDB4MDIsIDB4MDAsCisweDYzLCAweDAwLCAweDJDLCAweDAwLCAweDEwLCAweDAwLCAweEMyLCAweDAwLCAweDAwLCAweDAzLCAweDAwLCAweDBDLCAweDAwLAorMHgxMCwgMHgwMCwgMHhDMCwgMHgwMiwgMHgwMCwgMHgyMSwgMHgwMCwgMHgyQywgMHgwMCwgMHgxMCwgMHgwMCwgMHg0MCwgMHgwMCwKKzB4MDAsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDIwLCAweDgwLCAweDhDLCAweDgyLCAweDMyLCAweDBBLCAweEM4LCAweDA4LCAweDIwLCAweDIxLCAweDgwLCAweDhDLCAweDgyLAorMHgzMiwgMHgwMiwgMHg4OCwgMHgyOCwgMHgyMCwgMHhBMywgMHg4MCwgMHg4QywgMHgwMiwgMHgyMiwgMHgwQSwgMHhDOCwgMHgyOCwKKzB4MjgsIDB4QTMsIDB4ODAsIDB4OEMsIDB4ODIsIDB4MzIsIDB4MEEsIDB4QzgsIDB4MDgsIDB4MjAsIDB4MDMsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweEM0LCAweEEwLCAweDE2LCAweDgzLAorMHg1QSwgMHgwQywgMHg2QSwgMHgzMSwgMHhBMCwgMHhDNCwgMHhBMCwgMHgxNiwgMHg4MywgMHg1QSwgMHgwQywgMHg2QSwgMHgzMSwKKzB4QTgsIDB4QzUsIDB4QTAsIDB4MTYsIDB4ODMsIDB4NEEsIDB4MEMsIDB4NkEsIDB4MzEsIDB4QTgsIDB4RTUsIDB4QTAsIDB4MTYsCisweDgzLCAweDVBLCAweDBDLCAweDZBLCAweDMxLCAweEE4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyNCwgMHgwMCwgMHgxMCwgMHgwMSwgMHg0MCwgMHgwMiwKKzB4MDgsIDB4MjEsIDB4MDAsIDB4NjQsIDB4MDAsIDB4MTAsIDB4MDAsIDB4NDAsIDB4MDQsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDQsCisweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDAyLCAweDAwLCAweDkxLCAweDAwLCAweDI0LCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MTAsIDB4MjIsIDB4NDYsIDB4ODgsIDB4MTgsIDB4MjEsIDB4NjIsIDB4ODAsIDB4OEEsIDB4MDEsIDB4MjYsIDB4MDYsCisweDg4LCAweDE4LCAweDIwLCAweDYyLCAweDgwLCAweDg4LCAweDExLCAweDIyLCAweDQ2LCAweDg4LCAweDE4LCAweDIxLCAweDYyLAorMHg4NCwgMHg4OCwgMHgwMSwgMHgyMiwgMHg0NiwgMHg4OCwgMHgxOCwgMHgyMSwgMHg2MiwgMHg4NCwgMHg4OCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4QTIsIDB4MEEsCisweDA4LCAweDJBLCAweDIwLCAweEFBLCAweDgwLCAweDg4LCAweDAyLCAweEEyLCAweDBBLCAweDA4LCAweDJBLCAweDIwLCAweEFBLAorMHgwMCwgMHhBQSwgMHgwMiwgMHhBMiwgMHgwQSwgMHg4OCwgMHgyOCwgMHgyMCwgMHhBQSwgMHg4MCwgMHhBMCwgMHgwMiwgMHhBNiwKKzB4MEEsIDB4MDgsIDB4MkEsIDB4MjAsIDB4QUEsIDB4ODAsIDB4QTgsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDg0LCAweDQyLCAweDEwLCAweDBBLCAweDQxLCAweDI4LAorMHg0NCwgMHhBMSwgMHgxMCwgMHg4QywgMHg0QSwgMHgxMCwgMHgyQSwgMHg0MSwgMHgyOCwgMHgwNCwgMHhBMSwgMHgxMCwgMHgwNCwKKzB4NDIsIDB4MTAsIDB4MEEsIDB4NDEsIDB4MjgsIDB4ODQsIDB4ODEsIDB4MTAsIDB4ODQsIDB4NEEsIDB4MTAsIDB4MEEsIDB4NDEsCisweDIwLCAweDA0LCAweEExLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHg1MCwgMHg4MCwgMHg0MCwgMHgwMSwgMHgwMiwgMHgwNSwgMHgwMCwgMHgxNCwgMHgwMCwgMHg1MCwgMHg4MCwKKzB4NDAsIDB4MDEsIDB4MDIsIDB4MDUsIDB4MDAsIDB4MTQsIDB4MDAsIDB4NTAsIDB4ODAsIDB4NDAsIDB4MDEsIDB4MDIsIDB4MDUsCisweDA4LCAweDE0LCAweDIwLCAweDUwLCAweDgwLCAweDQwLCAweDAxLCAweDAyLCAweDA1LCAweDA4LCAweDE0LCAweDIwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzMCwgMHhDMCwKKzB4Q0EsIDB4MjAsIDB4MkIsIDB4MDMsIDB4OEMsIDB4MEMsIDB4MzAsIDB4MzIsIDB4NDAsIDB4QzAsIDB4MDAsIDB4MDEsIDB4MDMsCisweDg4LCAweDBDLCAweDMwLCAweDMyLCAweEMwLCAweENBLCAweDAwLCAweDJCLCAweDAzLCAweEFDLCAweDBDLCAweEIwLCAweDMyLAorMHg0MCwgMHhDMCwgMHgwMCwgMHgyQiwgMHgwMywgMHhBQywgMHgwQywgMHhCMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4QTQsIDB4NEUsIDB4ODAsIDB4M0EsIDB4MDEsCisweEVBLCAweDA0LCAweEI4LCAweDEzLCAweEEwLCAweDRFLCAweDgwLCAweDNCLCAweDQxLCAweEVBLCAweDA0LCAweEE4LCAweDEzLAorMHhBMCwgMHg0RSwgMHg4NCwgMHgzQiwgMHgwMSwgMHhFQSwgMHgwNCwgMHhCOCwgMHgxMywgMHhBMCwgMHg0RSwgMHg4MCwgMHgzQiwKKzB4MDEsIDB4RTIsIDB4NDQsIDB4QTgsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweEM0LCAweDEwLCAweDEyLCAweDIzLCAweDA4LCAweDhDLCAweDIxLCAweDMwLCAweDgwLCAweEMwLAorMHgxMCwgMHgwMiwgMHgyMywgMHgwOCwgMHgwQywgMHgyMSwgMHgzMCwgMHg4NCwgMHhDNCwgMHgxOCwgMHgxMiwgMHg0MywgMHg0OCwKKzB4OEMsIDB4MjEsIDB4MzEsIDB4ODIsIDB4QzAsIDB4MTgsIDB4MTIsIDB4QTMsIDB4NDgsIDB4OEMsIDB4MjEsIDB4MzEsIDB4ODQsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweEZDLAorMHhGRiwgMHhGMiwgMHhGRiwgMHhDQiwgMHhGRiwgMHgyRiwgMHhGRiwgMHhCRiwgMHhGQywgMHhGRiwgMHhGMiwgMHhGRiwgMHhDQiwKKzB4RkYsIDB4MkYsIDB4RkYsIDB4QkYsIDB4RkMsIDB4RkYsIDB4RjIsIDB4RkYsIDB4Q0IsIDB4RkYsIDB4MkYsIDB4RkYsIDB4QkYsCisweEZDLCAweEZGLCAweEYyLCAweEZGLCAweENCLCAweEZGLCAweDJGLCAweEZGLCAweEJGLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4QjQsIDB4REYsIDB4RDAsIDB4NkMsIDB4NDMsIDB4QjMsIDB4MEQsIDB4Q0QsIDB4QkUsCisweDdDLCAweERCLCAweEQwLCAweDZDLCAweDQzLCAweEZCLCAweDBELCAweEVELCAweDM3LCAweDM0LCAweERCLCAweEQwLCAweDdFLAorMHg0MywgMHhCMywgMHgwRCwgMHhDRCwgMHhCRSwgMHg3QywgMHhEQiwgMHhEMCwgMHg2QywgMHg0MywgMHhCMywgMHgwRCwgMHhFRCwKKzB4MzcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweENDLCAweDNGLCAweDMyLCAweEYzLCAweEM4LCAweENDLCAweDIzLCAweDMzLCAweEJGLCAweEZDLCAweDNDLCAweDMyLCAweEYzLAorMHhDOCwgMHhGQywgMHgyMywgMHhGMywgMHg4RiwgMHhDQywgMHgzQywgMHgzMiwgMHhGRiwgMHhDOCwgMHhDQywgMHgyMywgMHgzMywKKzB4QkYsIDB4RkMsIDB4M0MsIDB4MzIsIDB4RjMsIDB4QzgsIDB4Q0MsIDB4MjMsIDB4RjMsIDB4OEYsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweERDLCAweDc4LCAweDcyLCAweDdCLAorMHg0OCwgMHhFQywgMHgyNywgMHgzMSwgMHg4NiwgMHhDNCwgMHg3OCwgMHgxMiwgMHg3QiwgMHg0OCwgMHg4QywgMHgyNywgMHhCMSwKKzB4OUYsIDB4REMsIDB4N0UsIDB4NzIsIDB4RTMsIDB4QzksIDB4RUQsIDB4MjcsIDB4QjcsIDB4ODcsIDB4QzQsIDB4N0UsIDB4NzIsCisweDdCLCAweEM4LCAweEVELCAweDI3LCAweDM3LCAweDlFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwgMHg4RSwgMHgwMiwgMHgzOSwgMHgwOCwgMHhFNCwgMHgyMCwKKzB4ODAsIDB4ODMsIDB4NDAsIDB4MEUsIDB4MDIsIDB4MzksIDB4MDgsIDB4RTQsIDB4MjAsIDB4OTAsIDB4ODMsIDB4NDAsIDB4MEUsCisweDAyLCAweDM5LCAweDA4LCAweEUwLCAweDIwLCAweDkwLCAweDgzLCAweDQwLCAweDhFLCAweDAyLCAweDM5LCAweDBBLCAweEUwLAorMHgyOCwgMHg4MCwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MjAsIDB4QTAsIDB4OEUsIDB4ODEsIDB4M0EsIDB4MDIsIDB4RUEsIDB4MDgsIDB4QTgsIDB4MjMsIDB4QTAsIDB4OEUsCisweDgwLCAweDNBLCAweDAyLCAweEVBLCAweDA4LCAweEE4LCAweDIzLCAweEEwLCAweDhFLCAweDgwLCAweDNBLCAweDAyLCAweEVBLAorMHgwOCwgMHhBQSwgMHgyMywgMHhBMCwgMHg4RSwgMHg4MSwgMHgzQSwgMHgwNiwgMHhFQSwgMHgxOCwgMHhCOCwgMHgwMywgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODAsIDB4MDQsCisweDAxLCAweDEyLCAweDA0LCAweDQ4LCAweDEwLCAweDIwLCAweDQxLCAweDgwLCAweDA0LCAweDAxLCAweDEyLCAweDA0LCAweDQ4LAorMHgxMCwgMHgyMCwgMHg0MSwgMHg4MCwgMHgwNCwgMHgwMSwgMHgxMiwgMHgwNCwgMHg0OCwgMHgxMCwgMHgyMCwgMHg0MSwgMHg4MCwKKzB4ODQsIDB4MDEsIDB4MTIsIDB4MDYsIDB4NDgsIDB4MTgsIDB4MjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDg2LCAweDAwLCAweDE4LCAweDAwLCAweDYwLAorMHgwMCwgMHg4OCwgMHgwMSwgMHgwMCwgMHgwNiwgMHgwMCwgMHgxOCwgMHgwMCwgMHg2MCwgMHgwMCwgMHg4MCwgMHgwMSwgMHgyMCwKKzB4MDYsIDB4MDAsIDB4MTgsIDB4MDAsIDB4NjIsIDB4MDAsIDB4ODAsIDB4MDEsIDB4MDAsIDB4MDYsIDB4MDAsIDB4MTgsIDB4MDAsCisweDYyLCAweDAwLCAweDgwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgxMCwgMHgyMCwgMHg0RSwgMHg4MCwgMHgzOCwgMHgwMSwgMHhFMiwgMHgwNCwgMHg4OCwgMHg5MywgMHgyMCwKKzB4NEUsIDB4ODAsIDB4MzgsIDB4MDEsIDB4RTIsIDB4MDQsIDB4ODgsIDB4MTMsIDB4MjAsIDB4NEEsIDB4ODAsIDB4MzgsIDB4MDEsCisweEUyLCAweDA0LCAweDg4LCAweDEzLCAweDIwLCAweDRFLCAweDgwLCAweDM4LCAweDAxLCAweEUyLCAweDA0LCAweDg4LCAweDAzLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDYsIDB4MDAsIDB4MTgsIDB4MDAsIDB4NjAsIDB4MDAsIDB4ODAsIDB4MDEsIDB4MDAsIDB4MDYsIDB4MDAsIDB4MTgsIDB4MDAsCisweDYwLCAweDAwLCAweDgwLCAweDAxLCAweDAwLCAweDA2LCAweDAwLCAweDE4LCAweDAwLCAweDYwLCAweDAwLCAweDgwLCAweDAxLAorMHgwMCwgMHgwNiwgMHgwMCwgMHgxOCwgMHgwOCwgMHg2MCwgMHgyOCwgMHg4MCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MjAsIDB4NjQsIDB4ODAsIDB4MTAsIDB4MDEsCisweDQyLCAweDBBLCAweDA4LCAweDMxLCAweDIwLCAweDQ0LCAweDgwLCAweDEwLCAweDAxLCAweDQyLCAweDBDLCAweDA4LCAweDA5LAorMHgyMCwgMHg0NCwgMHg4MCwgMHg5MCwgMHgwMCwgMHg0MiwgMHgwNCwgMHgwOCwgMHgxMSwgMHgyMCwgMHg2NCwgMHg4MCwgMHg5MCwKKzB4MDAsIDB4NDIsIDB4MDIsIDB4MDgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweEQ0LCAweDIwLCAweDUyLCAweDgxLCAweDQ4LCAweDA1LCAweDIyLCAweDExLCAweDgwLCAweDU0LAorMHgyMCwgMHg1MiwgMHg4MSwgMHg0OCwgMHgwNSwgMHgyMiwgMHgxNSwgMHg4OCwgMHg0NCwgMHgwMCwgMHg1MiwgMHg4MSwgMHg0OCwKKzB4MDQsIDB4MjAsIDB4MTUsIDB4ODgsIDB4NTQsIDB4MjAsIDB4NTIsIDB4ODEsIDB4NDgsIDB4MEMsIDB4MjAsIDB4MTEsIDB4ODAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDAzLCAweDMwLAorMHgwMCwgMHhDOCwgMHgwMCwgMHgyOCwgMHgwMywgMHhBMCwgMHgzQywgMHgyMCwgMHgzMCwgMHgwMCwgMHhDQSwgMHgwMCwgMHgwMCwKKzB4MDMsIDB4QTAsIDB4MEMsIDB4ODAsIDB4MzIsIDB4MDAsIDB4Q0EsIDB4MDAsIDB4MjgsIDB4MDMsIDB4QTAsIDB4MEMsIDB4ODAsCisweDMyLCAweDAwLCAweENBLCAweDAwLCAweDI4LCAweDAzLCAweEEwLCAweDA0LCAweDAwLCAweDAyLCAweDA4LCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHgwMCwgMHgwMCwgMHgyOCwgMHgwMCwgMHgwOCwKKzB4MDAsIDB4MjAsIDB4MEUsIDB4ODAsIDB4MjAsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4MTgsIDB4ODAsCisweDE4LCAweDAwLCAweDAyLCAweDAwLCAweDg4LCAweDAxLCAweDYwLCAweDAwLCAweDgwLCAweDAwLCAweDAwLCAweDIyLCAweDAwLAorMHg4OCwgMHgwMSwgMHgyMCwgMHgwQSwgMHgwOCwgMHgwMiwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MTAsIDB4MDMsIDB4MDIsIDB4NDAsIDB4MDgsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MjAsIDB4MTAsCisweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDEwLCAweDAwLCAweDQwLCAweDAwLCAweDAwLAorMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgxMCwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwKKzB4MTAsIDB4MDIsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDMsCisweDAyLCAweDIwLCAweDA2LCAweDgwLCAweDE4LCAweDAwLCAweDYyLCAweDAwLCAweDk4LCAweDAxLCAweDIwLCAweDA2LCAweDgwLAorMHgxMCwgMHgwMCwgMHg2MiwgMHgwMCwgMHg4OCwgMHgwMSwgMHgyMCwgMHgwNiwgMHg4MCwgMHgxOCwgMHgwMCwgMHg2NiwgMHgwMCwKKzB4ODgsIDB4MDEsIDB4MjAsIDB4MDYsIDB4ODAsIDB4MTgsIDB4MDAsIDB4NjYsIDB4MDAsIDB4ODgsIDB4MDEsIDB4MEMsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDgwLCAweDAyLCAweDQwLCAweDA2LCAweDAwLAorMHgxOSwgMHgwMCwgMHg2NCwgMHgwNCwgMHg4MCwgMHgwMSwgMHg0MCwgMHgwNiwgMHgwMCwgMHgxOCwgMHgwMCwgMHg2NCwgMHgwMCwKKzB4OTAsIDB4MTEsIDB4MDAsIDB4MDYsIDB4MDAsIDB4MTksIDB4MDEsIDB4NjAsIDB4MDAsIDB4OTAsIDB4MDEsIDB4NDAsIDB4MDYsCisweDAwLCAweDE5LCAweDAxLCAweDYyLCAweDAwLCAweDgwLCAweDQxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHhBMiwgMHg0MiwgMHgyMCwgMHgwQywgMHg4MSwgMHgzMCwgMHgwNCwgMHhDMiwgMHgxMCwKKzB4MDgsIDB4NDMsIDB4MjAsIDB4MEMsIDB4ODEsIDB4MzAsIDB4MDQsIDB4QzIsIDB4MTAsIDB4MDgsIDB4NDMsIDB4MjgsIDB4MEMsCisweDgxLCAweDMwLCAweDA0LCAweEMyLCAweDEwLCAweDA4LCAweDQzLCAweDIwLCAweDBDLCAweDgxLCAweDMwLCAweDA0LCAweEMyLAorMHgxMCwgMHgxOCwgMHgwMywgMHg4OCwgMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MEMsIDB4MDAsIDB4MzAsIDB4MDAsIDB4QzAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4MDAsIDB4MEMsCisweDAwLCAweDMwLCAweDAwLCAweEMwLCAweDAwLCAweDAwLCAweDAzLCAweDAwLCAweDBDLCAweDAwLCAweDMwLCAweDAwLCAweEMwLAorMHgwMCwgMHgwMCwgMHgwMywgMHgwMCwgMHgwQywgMHgwMCwgMHgzMCwgMHgwMCwgMHhDMCwgMHgwNCwgMHgwMCwgMHgwMywgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MEMsCisweDAxLCAweDMwLCAweDA0LCAweEMwLCAweDMwLCAweDA4LCAweDQzLCAweDAwLCAweDBDLCAweDAxLCAweDMwLCAweDA0LCAweEMwLAorMHgxMCwgMHgwMCwgMHhDMywgMHgyMCwgMHgwQywgMHgwMSwgMHgzMCwgMHgwQywgMHhDMiwgMHgxMCwgMHgwMCwgMHg0MywgMHgwMCwKKzB4MEMsIDB4MDEsIDB4MzAsIDB4MEMsIDB4QzIsIDB4MzQsIDB4MDAsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweEEyLCAweDQyLCAweDIwLCAweDA2LCAweDgxLCAweDE4LCAweDA0LCAweDYyLAorMHgzMCwgMHg4OCwgMHg0MSwgMHgyMCwgMHgwNiwgMHg4MSwgMHgxOCwgMHgwNCwgMHg2MiwgMHgxMCwgMHg4OCwgMHhDMSwgMHgyMCwKKzB4MDYsIDB4ODEsIDB4MTgsIDB4MEMsIDB4NjIsIDB4MTAsIDB4ODgsIDB4NDEsIDB4MjAsIDB4MDYsIDB4ODEsIDB4MTgsIDB4MEMsCisweDYwLCAweDEwLCAweDg4LCAweDAzLCAweDg4LCAweDBBLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMiwgMHg4MCwgMHg0MiwgMHgwMCwgMHgwNCwgMHgwMSwgMHgxMCwgMHgwNCwgMHg0MCwgMHgxMCwgMHgwMCwgMHg0MywgMHgwMCwKKzB4MDQsIDB4MDEsIDB4MTAsIDB4MDQsIDB4NDAsIDB4MTAsIDB4MDAsIDB4NDEsIDB4MDAsIDB4MEMsIDB4MDEsIDB4MTAsIDB4MDQsCisweEMwLCAweDEwLCAweDAwLCAweDQxLCAweDAwLCAweDA0LCAweDAxLCAweDEwLCAweDA0LCAweEMwLCAweDEwLCAweDgwLCAweDAxLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwQSwgMHg4MCwgMHg0MiwgMHgyMCwKKzB4MDYsIDB4ODEsIDB4MTgsIDB4MDQsIDB4NjIsIDB4MTAsIDB4MDgsIDB4NDMsIDB4MjAsIDB4MDYsIDB4ODEsIDB4MTgsIDB4MDQsCisweDYyLCAweDEwLCAweDg4LCAweDQxLCAweDIwLCAweDBDLCAweDgxLCAweDE4LCAweDA0LCAweEMyLCAweDEwLCAweDg4LCAweDQxLAorMHgyMCwgMHgwNiwgMHg4MSwgMHgxOCwgMHgwNCwgMHhDMCwgMHgzMCwgMHgwOCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4QTIsIDB4MDIsIDB4MjAsIDB4MEEsIDB4ODAsIDB4MjgsIDB4MDAsCisweEEyLCAweDAwLCAweDAwLCAweDAyLCAweDIwLCAweDBBLCAweDgwLCAweDI4LCAweDAwLCAweEEyLCAweDAwLCAweDg4LCAweDAyLAorMHgwMCwgMHgwOCwgMHg4MCwgMHgyOCwgMHgwMCwgMHg4MCwgMHgwMCwgMHg4OCwgMHgwMiwgMHgyMCwgMHgwQSwgMHg4MCwgMHgyOCwKKzB4ODAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4ODgsIDB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDEyLCAweDAwLCAweDYwLCAweDAwLCAweDgyLCAweDAxLCAweDA4LCAweDA2LCAweDIwLCAweDE4LCAweDgwLCAweDYwLAorMHgwMCwgMHg4MiwgMHgwMSwgMHgwOCwgMHgwNiwgMHgyMCwgMHgxOCwgMHg4MCwgMHg2MCwgMHgwMCwgMHg4MiwgMHgwMSwgMHgwOCwKKzB4MDYsIDB4MjAsIDB4MTgsIDB4ODAsIDB4NjAsIDB4MDAsIDB4ODIsIDB4MDEsIDB4MDgsIDB4MDYsIDB4MjAsIDB4MTgsIDB4ODAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDAwLCAweDQwLAorMHg4MCwgMHgwMCwgMHgwMSwgMHgxMiwgMHgwNCwgMHgwOCwgMHgxMCwgMHgyMCwgMHg0MCwgMHg4MCwgMHgwMCwgMHg4MSwgMHgwMiwKKzB4MDQsIDB4MDgsIDB4MTAsIDB4MjAsIDB4NDAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4MDIsIDB4MDQsIDB4NDgsIDB4MTAsIDB4MjAsCisweDQwLCAweDgwLCAweDAwLCAweDAxLCAweDAyLCAweDA0LCAweDA4LCAweDEwLCAweDI4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHhBMiwgMHg2MiwgMHhDMCwgMHg4QSwgMHgwMSwgMHgyQiwKKzB4MDYsIDB4QUMsIDB4MTgsIDB4QjAsIDB4NjIsIDB4QzAsIDB4OEEsIDB4MDEsIDB4MkIsIDB4MDYsIDB4QUMsIDB4MTgsIDB4QjAsCisweDYyLCAweEMwLCAweDhBLCAweDAxLCAweDJCLCAweDA2LCAweEFDLCAweDE4LCAweEIwLCAweDYyLCAweEMwLCAweDhBLCAweDAxLAorMHgyQiwgMHgwNiwgMHhBQywgMHgxOCwgMHhCMCwgMHgwMiwgMHg4OCwgMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NjIsIDB4MjAsIDB4OEUsIDB4ODEsIDB4MzgsIDB4MDYsIDB4RTIsIDB4MTgsIDB4OTgsCisweDYzLCAweDIwLCAweDhFLCAweDgxLCAweDM4LCAweDA2LCAweEUyLCAweDE4LCAweDg4LCAweDYzLCAweDQwLCAweDhFLCAweDgxLAorMHgzOCwgMHgwNiwgMHhFNiwgMHgxOCwgMHg4OCwgMHg2MywgMHgyMCwgMHg4RSwgMHg4MSwgMHgzOCwgMHg4NiwgMHhFNiwgMHgxOCwKKzB4ODgsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4ODAsCisweDYyLCAweDQwLCAweDhFLCAweDAxLCAweDM5LCAweDA2LCAweEUwLCAweDE4LCAweEEwLCAweDYzLCAweDQwLCAweDhFLCAweDAxLAorMHgzOSwgMHgwNiwgMHhFNCwgMHgxOCwgMHg5MCwgMHg2MywgMHgwMCwgMHg4RSwgMHgwMSwgMHgzOSwgMHgwNiwgMHhFMCwgMHgxOCwKKzB4OTAsIDB4NjMsIDB4NDAsIDB4OEUsIDB4MDEsIDB4MzksIDB4MDYsIDB4RTAsIDB4MTgsIDB4ODAsIDB4MDMsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBBLCAweEEyLCAweDYyLCAweEEwLCAweDhFLCAweDgxLAorMHgzQSwgMHgwNiwgMHhFOCwgMHgxOCwgMHg4OCwgMHg2MywgMHhBMCwgMHg4RSwgMHhBMSwgMHgzQSwgMHgwNiwgMHhFQSwgMHgxOCwKKzB4QTgsIDB4NjMsIDB4MjAsIDB4OEMsIDB4ODEsIDB4M0EsIDB4MDYsIDB4QzIsIDB4MTgsIDB4QTgsIDB4NjMsIDB4QTAsIDB4OEUsCisweDgxLCAweDNBLCAweDA2LCAweEMyLCAweDE4LCAweDE4LCAweDQzLCAweDg4LCAweDBBLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHgwMCwgMHg0OCwgMHg4MCwgMHgwNCwgMHgwMSwgMHgxMiwgMHgwNCwgMHg0OCwgMHgxMiwKKzB4MjAsIDB4NEIsIDB4ODAsIDB4MjQsIDB4MDEsIDB4MTIsIDB4MDQsIDB4NDgsIDB4MTIsIDB4MjAsIDB4NDEsIDB4ODAsIDB4MEUsCisweDAxLCAweDEyLCAweDA0LCAweEU4LCAweDEwLCAweDIwLCAweDQxLCAweDgwLCAweDA0LCAweDAxLCAweDEyLCAweDA0LCAweEU4LAorMHgxMiwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwKKzB4MDAsIDB4NjAsIDB4MDAsIDB4ODYsIDB4MDEsIDB4MTgsIDB4MDYsIDB4NjAsIDB4MTgsIDB4ODgsIDB4NjEsIDB4MDAsIDB4ODYsCisweDAxLCAweDE4LCAweDA2LCAweDYwLCAweDE4LCAweDgwLCAweDYxLCAweDIwLCAweDg2LCAweDAxLCAweDE4LCAweDA2LCAweDYyLAorMHgxOCwgMHg4MCwgMHg2MSwgMHgwMCwgMHg4NiwgMHgwMSwgMHgxOCwgMHgwNiwgMHg2MiwgMHgxOCwgMHgwMCwgMHgwMSwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4QTIsIDB4MDYsIDB4MjAsIDB4MUUsCisweDgwLCAweDcwLCAweDAwLCAweEUyLCAweDAxLCAweDA4LCAweDA3LCAweDIwLCAweDFFLCAweDgwLCAweDcwLCAweDAwLCAweEUyLAorMHgwMSwgMHg4OCwgMHgwNywgMHgyMCwgMHgxRSwgMHg4MCwgMHg3OCwgMHgwMCwgMHhDMiwgMHgwMSwgMHg4OCwgMHgwNywgMHgyMCwKKzB4MUUsIDB4ODAsIDB4NzgsIDB4MDAsIDB4QzIsIDB4MDEsIDB4ODgsIDB4MDMsIDB4ODgsIDB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweDgwLCAweDRBLCAweDAwLCAweDA2LCAweDAxLCAweDEwLCAweDA0LCAweDYwLAorMHgxMiwgMHgwMCwgMHg0OSwgMHgwMCwgMHgyNiwgMHgwMSwgMHgxMCwgMHgwNCwgMHg2MCwgMHgxMiwgMHg4MCwgMHg0MSwgMHgwMCwKKzB4MDYsIDB4MDEsIDB4MTgsIDB4MDQsIDB4NDAsIDB4MTAsIDB4ODAsIDB4NDEsIDB4MDAsIDB4MDYsIDB4MDEsIDB4MTgsIDB4MDQsCisweDQwLCAweDEyLCAweDgwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMiwgMHg4MCwgMHg0MiwgMHgyMCwgMHgwNCwgMHg4MSwgMHgxOCwgMHgwNCwgMHg0MiwgMHgxMCwgMHg4OCwgMHg0MSwgMHgyMCwKKzB4NDQsIDB4ODEsIDB4MTgsIDB4MDQsIDB4NDIsIDB4MTAsIDB4MDgsIDB4NDEsIDB4MjAsIDB4MDQsIDB4ODEsIDB4MTAsIDB4MDQsCisweDYyLCAweDEwLCAweDA4LCAweDQxLCAweDIwLCAweDA0LCAweDgxLCAweDEwLCAweDA0LCAweDYyLCAweDEwLCAweDA4LCAweDAxLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHhBMiwgMHg0MiwgMHgyMCwKKzB4MDIsIDB4ODMsIDB4MjgsIDB4MDQsIDB4MjIsIDB4MzAsIDB4ODAsIDB4NDIsIDB4MjAsIDB4MDIsIDB4ODMsIDB4MjgsIDB4MDQsCisweDIyLCAweDEwLCAweDg4LCAweDQwLCAweDAwLCAweDAyLCAweDgxLCAweDA4LCAweDBDLCAweEEwLCAweDEwLCAweDg4LCAweDQwLAorMHgyMCwgMHgwMiwgMHg4MSwgMHgwOCwgMHgwQywgMHhBMCwgMHgxMCwgMHg4MCwgMHgwMCwgMHg4OCwgMHgwQSwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MEEsIDB4MDMsIDB4MjgsIDB4MEMsCisweEEwLCAweDMwLCAweDgwLCAweEMyLCAweDAwLCAweDRBLCAweDAxLCAweDI4LCAweDBDLCAweEEwLCAweDMwLCAweDgwLCAweEMyLAorMHgwMCwgMHgwQSwgMHgwMywgMHgyOCwgMHgwQywgMHhBMCwgMHgzMCwgMHg4MCwgMHhDMiwgMHgwMCwgMHgwQSwgMHgwMywgMHgyOCwKKzB4MEMsIDB4QTAsIDB4MTAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAyLCAweDAwLCAweDEwLCAweDAwLCAweDA2LCAweDAwLCAweDA4LCAweDAxLCAweDIwLCAweDAwLCAweDgwLCAweDEwLAorMHgwMCwgMHgwMiwgMHgwMCwgMHgwOCwgMHgwMSwgMHgyMCwgMHgwNCwgMHg4MCwgMHgxMCwgMHgwMCwgMHg0MiwgMHgwMCwgMHgwOCwKKzB4MDAsIDB4MjAsIDB4MDQsIDB4ODAsIDB4MTAsIDB4MDAsIDB4NDIsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MjAsIDB4MDQsIDB4ODgsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweEEyLCAweDQyLAorMHg0MCwgMHg0MCwgMHgwMSwgMHgwMSwgMHgwNCwgMHgwMCwgMHgxNCwgMHgxMCwgMHg0MCwgMHg0MCwgMHgwMCwgMHgwMSwgMHgwMSwKKzB4MDQsIDB4MDQsIDB4MTAsIDB4MTAsIDB4NDAsIDB4NDAsIDB4MDAsIDB4MDEsIDB4MDEsIDB4MDUsIDB4MDQsIDB4MTAsIDB4MTAsCisweDQwLCAweDQwLCAweDAwLCAweDAxLCAweDAxLCAweDA1LCAweDA0LCAweDEwLCAweDEwLCAweDAwLCAweDg4LCAweDBBLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHg4MCwgMHgwMiwgMHgyMCwgMHgwNiwgMHg4MCwgMHgxOCwKKzB4MDAsIDB4NjYsIDB4MDAsIDB4OTgsIDB4MDEsIDB4MjAsIDB4MDYsIDB4ODAsIDB4MTgsIDB4MDAsIDB4NjIsIDB4MDAsIDB4ODgsCisweDAxLCAweDYwLCAweDA2LCAweDgwLCAweDE4LCAweDAwLCAweDY2LCAweDAwLCAweDg4LCAweDAxLCAweDIwLCAweDA2LCAweDgwLAorMHgxOCwgMHgwMCwgMHg2NiwgMHgwMCwgMHg4OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDIsIDB4ODAsIDB4MDIsIDB4NDAsIDB4MjYsIDB4MDAsIDB4OTksIDB4MDAsIDB4NjQsIDB4MDIsIDB4ODAsCisweDBCLCAweDQwLCAweDI2LCAweDAwLCAweDk5LCAweDAwLCAweDY0LCAweDAwLCAweDkwLCAweDAxLCAweDAwLCAweDBFLCAweDAwLAorMHg5OCwgMHgwMCwgMHhFMCwgMHgwMCwgMHg5MCwgMHgwMSwgMHg0MCwgMHgwNiwgMHg4MCwgMHg5OSwgMHgwMCwgMHhFMCwgMHgwMCwKKzB4MDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4QTIsCisweDA2LCAweDIwLCAweDFDLCAweDgwLCAweDcwLCAweDAwLCAweEMyLCAweDAxLCAweDg4LCAweDA1LCAweDIwLCAweDFDLCAweDgyLAorMHg3MCwgMHgwMCwgMHhDMiwgMHgwMSwgMHgwOCwgMHgwNywgMHgyMCwgMHgxNiwgMHgwMCwgMHg3MCwgMHgwMCwgMHg2MiwgMHgwMSwKKzB4MDgsIDB4MDcsIDB4MjgsIDB4MUMsIDB4MDAsIDB4NzAsIDB4MDAsIDB4NjIsIDB4MDEsIDB4MTgsIDB4MDEsIDB4ODgsIDB4MEEsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBBLCAweDAwLCAweDgwLCAweDAwLCAweDBDLCAweDAyLAorMHgzMCwgMHgwRSwgMHhDMCwgMHgyMCwgMHgwMCwgMHhFMSwgMHgwMCwgMHgwQywgMHgwMiwgMHgzMCwgMHgwQSwgMHhDMCwgMHgyMCwKKzB4MDAsIDB4ODMsIDB4MDAsIDB4MDQsIDB4MDIsIDB4MzAsIDB4MDgsIDB4NDAsIDB4MjAsIDB4MDAsIDB4ODMsIDB4MDAsIDB4MEMsCisweDAyLCAweDMwLCAweDBBLCAweDQwLCAweDIwLCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHgwMCwgMHgyMCwgMHgwMCwgMHhBQywgMHgwMiwgMHhCMCwgMHgwQSwgMHhDMCwgMHgyQSwKKzB4MDgsIDB4QUIsIDB4MDAsIDB4QUMsIDB4MDIsIDB4QjAsIDB4MEEsIDB4QzAsIDB4MjgsIDB4MDAsIDB4QTMsIDB4MjAsIDB4OEMsCisweDAyLCAweEIwLCAweDBBLCAweEMyLCAweDI4LCAweDAwLCAweEEzLCAweDAwLCAweDhDLCAweDgyLCAweEIwLCAweDFFLCAweEMyLAorMHgwOCwgMHgwMCwgMHg0MSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwKKzB4QTIsIDB4QzIsIDB4MjAsIDB4MDYsIDB4ODMsIDB4MTgsIDB4MEUsIDB4NjIsIDB4MzAsIDB4ODgsIDB4RTEsIDB4MjAsIDB4MDYsCisweDgzLCAweDE4LCAweDBFLCAweDYyLCAweDMwLCAweDg4LCAweEMxLCAweDIwLCAweDA2LCAweDgzLCAweDE4LCAweDBDLCAweDYyLAorMHgzMCwgMHg4OCwgMHhDMSwgMHgyMCwgMHgwNiwgMHgwMywgMHgxOCwgMHgxRSwgMHg2MiwgMHgzMCwgMHg4OCwgMHgwMSwgMHg4OCwKKzB4MEEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4ODAsIDB4MDIsIDB4MDAsIDB4NDQsCisweDAwLCAweDEwLCAweDAwLCAweDQwLCAweDA0LCAweDAwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDEwLCAweDA4LCAweDQwLAorMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgxMCwgMHgwMSwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwKKzB4MDQsIDB4MDAsIDB4MTAsIDB4MDEsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweDgwLCAweDEyLCAweDIyLCAweDA2LCAweDg4LCAweDE4LCAweDAxLCAweDYyLAorMHg4MCwgMHg4OCwgMHgxMSwgMHgyMCwgMHgwNiwgMHg4OCwgMHgxOCwgMHgwMSwgMHg2MiwgMHg4NCwgMHg4OCwgMHgxMSwgMHgyMiwKKzB4NDYsIDB4ODgsIDB4MTgsIDB4MjAsIDB4NjIsIDB4ODQsIDB4ODgsIDB4MTEsIDB4MjIsIDB4NDYsIDB4MDgsIDB4MTgsIDB4NDAsCisweDYyLCAweDg0LCAweDg4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMiwgMHhBMiwgMHgwMiwgMHgyMiwgMHgwQSwgMHg4OCwgMHgyOCwgMHgyMCwgMHhBMiwgMHgwMCwgMHg4MCwgMHgwMiwgMHgyMCwKKzB4MEEsIDB4ODgsIDB4MjgsIDB4MjAsIDB4QTIsIDB4MDAsIDB4ODgsIDB4MDIsIDB4MDIsIDB4MEEsIDB4ODgsIDB4MjgsIDB4MjAsCisweEEwLCAweDgwLCAweDg4LCAweDAyLCAweDIyLCAweDBBLCAweDA4LCAweDI4LCAweDIwLCAweEEwLCAweDQwLCAweDgwLCAweDAyLAorMHg4OCwgMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHgwMCwgMHgxMCwgMHgwNCwKKzB4NDIsIDB4MDAsIDB4MjgsIDB4NDEsIDB4MjAsIDB4MDQsIDB4ODEsIDB4MTIsIDB4MDQsIDB4NDIsIDB4MTAsIDB4MEEsIDB4NDEsCisweDIwLCAweDA0LCAweDgxLCAweDEwLCAweDA0LCAweDQyLCAweDEwLCAweDA4LCAweDQxLCAweEEwLCAweDA0LCAweDgxLCAweDEwLAorMHgwNCwgMHg0MiwgMHgwMCwgMHgwOCwgMHgwMCwgMHhBMCwgMHgwNCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4ODAsIDB4NDAsIDB4MDEsIDB4MDAsIDB4MDUsCisweDA4LCAweDE0LCAweDAwLCAweDUwLCAweDgwLCAweDQwLCAweDAxLCAweDAwLCAweDA1LCAweDA4LCAweDE0LCAweDIwLCAweDUwLAorMHg4MCwgMHg0MCwgMHgwMSwgMHgwMiwgMHgwNSwgMHgwMCwgMHgxNCwgMHgyMCwgMHg1MCwgMHg4MCwgMHg0MCwgMHgwMSwgMHgwMiwKKzB4NkQsIDB4MDAsIDB4OTQsIDB4MjgsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAyLCAweEEyLCAweEIyLCAweEMwLCAweENBLCAweDAyLCAweDIxLCAweDBCLCAweEFDLCAweDJDLCAweDEwLCAweEIyLAorMHhDMCwgMHhDQSwgMHgwMiwgMHgyMywgMHgwQiwgMHhBQywgMHgyQywgMHhCMCwgMHhCMiwgMHhDMCwgMHhDQSwgMHgwMiwgMHgyQSwKKzB4MEIsIDB4ODQsIDB4MkMsIDB4QjAsIDB4QjIsIDB4QzAsIDB4Q0EsIDB4MDIsIDB4MkEsIDB4MkIsIDB4ODQsIDB4NkMsIDB4QjAsCisweDAyLCAweDg4LCAweDBBLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweDgwLCAweDEyLAorMHgyMCwgMHg0RSwgMHg4MCwgMHgzOCwgMHgwMSwgMHhFMiwgMHgwNCwgMHg5OCwgMHgxMywgMHgyMCwgMHg0RSwgMHg4MCwgMHgzOCwKKzB4MDEsIDB4RTIsIDB4MDQsIDB4ODAsIDB4MTMsIDB4NjAsIDB4NEUsIDB4ODAsIDB4MzksIDB4MDEsIDB4RTYsIDB4MDQsIDB4ODgsCisweDEzLCAweDIwLCAweDRFLCAweDgwLCAweDM4LCAweDA5LCAweEU2LCAweDAwLCAweDg5LCAweDAzLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhDNCwgMHgxMCwgMHgwMiwgMHgyMywgMHgwOCwKKzB4OEMsIDB4MjEsIDB4MzAsIDB4ODAsIDB4QzAsIDB4MTAsIDB4MDIsIDB4NDMsIDB4MDgsIDB4OEMsIDB4MjEsIDB4MzEsIDB4ODQsCisweEM0LCAweDA4LCAweDEyLCAweDYzLCAweDA4LCAweDhDLCAweDIwLCAweDMxLCAweDg2LCAweEM0LCAweDE4LCAweDEyLCAweDIzLAorMHgwOCwgMHg4QywgMHgyMCwgMHgzMSwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4RkMsIDB4RkYsIDB4RjIsIDB4RkYsIDB4Q0IsIDB4RkYsIDB4MkYsIDB4RkYsIDB4QkYsCisweEZDLCAweEZGLCAweEYyLCAweEZGLCAweENCLCAweEZGLCAweDJGLCAweEZGLCAweEJGLCAweEZDLCAweEZGLCAweEYyLCAweEZGLAorMHhDQiwgMHhGRiwgMHgyRiwgMHhGRiwgMHhCRiwgMHhGQywgMHhGRiwgMHhGMiwgMHhGRiwgMHhDQiwgMHhGRiwgMHgyRiwgMHhGRiwKKzB4QkYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDM0LCAweERCLCAweEQwLCAweEVDLAorMHhDQiwgMHhCNywgMHgwRCwgMHhFRCwgMHgzNywgMHhGQywgMHhERiwgMHhEMCwgMHg2QywgMHhDMywgMHhCNywgMHgwRCwgMHhFRCwKKzB4MzcsIDB4MzQsIDB4REIsIDB4RDAsIDB4NkMsIDB4NDMsIDB4QjMsIDB4MEQsIDB4Q0QsIDB4MzYsIDB4MzQsIDB4REIsIDB4RDAsCisweEVDLCAweENCLCAweEI3LCAweDJGLCAweEVELCAweEJGLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhDQywgMHgzQywgMHgzMiwgMHhGMywgMHhDQiwgMHhDRiwgMHgyMywgMHhGMywKKzB4OEYsIDB4RkMsIDB4M0YsIDB4MzIsIDB4RjMsIDB4QzgsIDB4Q0YsIDB4MjMsIDB4RjMsIDB4OEYsIDB4Q0MsIDB4M0MsIDB4MzIsCisweEYzLCAweEM4LCAweENDLCAweDIzLCAweDMzLCAweDhGLCAweENDLCAweDNDLCAweDMyLCAweEYzLCAweENCLCAweENGLCAweDJGLAorMHhGMywgMHhCRiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4REMsIDB4NzgsIDB4MTIsIDB4RkIsIDB4QzksIDB4RUQsIDB4MjcsIDB4QjEsIDB4ODcsIDB4REMsIDB4N0UsIDB4MTIsCisweEUzLCAweEM5LCAweEVELCAweDI3LCAweEI3LCAweDlGLCAweERDLCAweDFFLCAweDcyLCAweEZCLCAweDQ5LCAweEVDLCAweDIxLAorMHhCNywgMHg5RiwgMHhEQywgMHg3RSwgMHg3MiwgMHhGQiwgMHg0OSwgMHhFQywgMHgyMSwgMHgzNywgMHg4NiwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MjEsIDB4MDAsCisweDg1LCAweDMzLCAweDE0LCAweDAyLCAweDUwLCAweDA4LCAweDQwLCAweDIxLCAweDAwLCAweDg1LCAweDAwLCAweDE0LCAweENFLAorMHg1MCwgMHgzMCwgMHg0MywgMHgyMSwgMHgwMCwgMHg4NSwgMHgwMCwgMHgxNCwgMHgwMiwgMHg1MCwgMHgzOCwgMHg0MywgMHhFMSwKKzB4MEMsIDB4ODUsIDB4MDAsIDB4MTQsIDB4Q0UsIDB4NTAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDIwLCAweDAwLCAweDgwLCAweDAwLCAweDAwLCAweDAyLAorMHgwMCwgMHgwOCwgMHgwMCwgMHgyMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwOCwgMHgwMCwgMHgyMCwKKzB4MDAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDQsIDB4MDgsIDB4MDAsIDB4MjAsIDB4NDAsIDB4ODAsIDB4MDAsIDB4MDAsCisweDAyLCAweDAwLCAweDE4LCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgxMCwgMHgyMSwgMHg0MCwgMHg4NCwgMHgwMCwgMHgxMSwgMHgwMiwgMHg0NCwgMHgwOCwgMHgxMCwgMHgyMSwKKzB4NDAsIDB4ODQsIDB4MDAsIDB4MTEsIDB4MDIsIDB4NDQsIDB4MDgsIDB4MTAsIDB4MjEsIDB4NDAsIDB4ODQsIDB4MDAsIDB4MTEsCisweDAyLCAweDQ0LCAweDA4LCAweDEwLCAweDIxLCAweDQwLCAweDg0LCAweDAwLCAweDExLCAweDAyLCAweDQ0LCAweDE4LCAweDAyLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyMCwKKzB4MDAsIDB4ODAsIDB4MzMsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDgsIDB4MTAsIDB4MjAsIDB4NDAsIDB4ODAsIDB4MDAsIDB4MDEsCisweENFLCAweDAwLCAweDA4LCAweDEwLCAweDIwLCAweDQwLCAweDgwLCAweDAwLCAweDAwLCAweDAyLCAweDAwLCAweDM4LCAweDAzLAorMHhFMCwgMHg0QywgMHg4MCwgMHgwMCwgMHgwMSwgMHhDRSwgMHgwMCwgMHgzOCwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MTAsCisweENDLCAweDQwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDA0LCAweDMzLCAweDEwLCAweDAwLCAweDQwLCAweDMwLCAweDAzLAorMHgwMSwgMHgwMCwgMHgwNCwgMHgzMywgMHgxMCwgMHhDQywgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwKKzB4MTAsIDB4Q0MsIDB4NDAsIDB4MzAsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDEwLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDEwLCAweDAwLCAweDQwLAorMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgxMCwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwKKzB4MDQsIDB4MDAsIDB4MTAsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MTAsIDB4MDAsCisweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDAwLCAweDEwLAorMHgwMSwgMHg0MCwgMHgwNCwgMHgwMCwgMHgxMSwgMHgwMCwgMHg0NCwgMHgwMCwgMHgxMCwgMHgwMSwgMHg0MCwgMHgwNCwgMHgwMCwKKzB4MTEsIDB4MDAsIDB4NDQsIDB4MDAsIDB4MTAsIDB4MDEsIDB4NDAsIDB4MDQsIDB4MDAsIDB4MTEsIDB4MDAsIDB4NDQsIDB4MDAsCisweDEwLCAweDAxLCAweDQwLCAweDA0LCAweDAwLCAweDExLCAweDAwLCAweDQ0LCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwKKzB4MDEsIDB4Q0MsIDB4MDQsIDB4MDAsIDB4MTAsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MzMsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MzAsCisweDEzLCAweDAwLCAweDQwLCAweDAwLCAweDMzLCAweDAxLCAweENDLCAweDA0LCAweDAwLCAweDEwLCAweDAwLCAweDQwLCAweDAwLAorMHgwMCwgMHgwMSwgMHhDQywgMHgwNCwgMHgzMCwgMHg0MywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4NTAsIDB4MjEsIDB4NDAsIDB4ODUsIDB4MDAsIDB4MTUsIDB4MDIsIDB4NTQsIDB4MzgsCisweDUzLCAweDIxLCAweDQwLCAweDg1LCAweDAwLCAweDE1LCAweDAyLCAweDU0LCAweDA4LCAweDUwLCAweDIxLCAweDQwLCAweDg1LAorMHgzMywgMHgxNSwgMHgwMiwgMHg1NCwgMHgwOCwgMHg1MCwgMHgyMSwgMHg0MCwgMHg4NSwgMHgwMCwgMHgxNSwgMHgwMCwgMHg1NCwKKzB4MDgsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsCisweDEwLCAweDIwLCAweDQwLCAweDgwLCAweDAwLCAweDAxLCAweDAyLCAweDA0LCAweDA4LCAweDEwLCAweDIwLCAweDQwLCAweDgwLAorMHgwMCwgMHgwMSwgMHgwMiwgMHgwNCwgMHgwOCwgMHgxMCwgMHgyMCwgMHg0MCwgMHg4MCwgMHgwMCwgMHgwMSwgMHgwMiwgMHgwNCwKKzB4MDgsIDB4MTAsIDB4MjAsIDB4NDAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4ODYsIDB4MDQsIDB4MDgsIDB4NDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDIxLCAweDAwLCAweDg0LAorMHgwMCwgMHgxMCwgMHgwMiwgMHg0MCwgMHgwMCwgMHgwMCwgMHgyMSwgMHgwMCwgMHg4NCwgMHgwMCwgMHgxMCwgMHgwMiwgMHg0MCwKKzB4MDgsIDB4MDAsIDB4MjEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MTAsIDB4MDIsIDB4NDAsIDB4MDgsIDB4MDAsIDB4MjEsIDB4MDAsCisweDg0LCAweDAwLCAweDEwLCAweDg2LCAweDQwLCAweDA4LCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHgwMCwgMHhFMCwgMHgwQywgMHg4MCwgMHgwMCwgMHgwMCwgMHhDRSwgMHgwMCwKKzB4MDgsIDB4MDAsIDB4RTAsIDB4MEMsIDB4ODAsIDB4MzMsIDB4MDAsIDB4Q0UsIDB4MDAsIDB4MzgsIDB4MDMsIDB4RTAsIDB4MEMsCisweDgwLCAweDAwLCAweDAwLCAweENFLCAweDAwLCAweDA4LCAweDAwLCAweEUwLCAweDBDLCAweDgwLCAweDMzLCAweDAwLCAweENFLAorMHgwMCwgMHgwOCwgMHg0MCwgMHgyMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwKKzB4MDAsIDB4MDAsIDB4MjEsIDB4MDAsIDB4ODQsIDB4MDAsIDB4MTAsIDB4MDIsIDB4NDAsIDB4MDgsIDB4MDAsIDB4MjEsIDB4MDAsCisweDg0LCAweDMzLCAweDEwLCAweDAyLCAweDQwLCAweDM4LCAweDAzLCAweDIxLCAweDAwLCAweDg0LCAweDMzLCAweDEwLCAweENFLAorMHg0MCwgMHgzOCwgMHgwMywgMHgyMSwgMHgwMCwgMHg4NCwgMHgwMCwgMHgxMCwgMHgwMiwgMHg0MCwgMHgwOCwgMHg0MCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsCisweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDEwLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDgxLCAweDAwLCAweDA0LCAweDAwLAorMHgxMCwgMHgwOCwgMHg0MCwgMHgwMCwgMHgwMCwgMHg4MSwgMHgwMCwgMHgwNCwgMHgwMiwgMHgxMCwgMHgwOCwgMHg0MCwgMHgwMCwKKzB4MDAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDEwLCAweDAwLAorMHg0MCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHg4NCwgMHgwMCwgMHgxMCwgMHgwMCwgMHg0MCwgMHgwOCwgMHgwMCwgMHgwMSwKKzB4MDAsIDB4ODQsIDB4MDAsIDB4MTAsIDB4MDIsIDB4NDAsIDB4MDgsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MTAsCisweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwOCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MzMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzAsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzMsIDB4MDAsCisweENDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgyMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4M0MsIDB4M0MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4RjAsIDB4RjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4RkMsIDB4RkYsIDB4RkYsIDB4RkYsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweEZDLCAweEZGLCAweEZGLCAweEZGLCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweEZDLCAweEZGLCAweEZGLCAweEZGLAorMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhGQywgMHhGRiwgMHhGRiwgMHhGRiwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweEZDLCAweEZGLCAweEZGLCAweEZGLCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweEZDLCAweEZGLCAweEZGLCAweEZGLAorMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhGQywgMHhGRiwgMHhGRiwgMHhGRiwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4RkMsIDB4RkYsIDB4RkYsIDB4RkYsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweEZDLCAweEZGLCAweEZGLCAweEZGLAorMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhGQywgMHhGRiwgMHhGRiwgMHhGRiwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4RkMsIDB4RkYsIDB4RkYsIDB4RkYsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4RkMsIDB4RkYsIDB4RkYsCisweEZGLCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhGQywgMHhGRiwgMHhGRiwgMHhGRiwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4RkMsIDB4RkYsIDB4RkYsIDB4RkYsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4RkMsIDB4RkYsIDB4RkYsCisweEZGLCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweEZDLCAweEZGLCAweEZGLCAweEZGLCAweDAzLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4RkMsIDB4RkYsIDB4RkYsIDB4RkYsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4RkMsIDB4RkYsIDB4RkYsCisweEZGLCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweEZDLCAweEZGLCAweEZGLCAweEZGLCAweDAzLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHhGQywgMHhGRiwgMHhGRiwgMHhGRiwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4RkMsIDB4RkYsIDB4RkYsCisweEZGLCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweEZDLCAweEZGLCAweEZGLCAweEZGLCAweDAzLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHhGQywgMHhGRiwgMHhGRiwgMHhGRiwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhGQywgMHhGRiwKKzB4RkYsIDB4RkYsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDIxLCAweDAwLCAweDg1LCAweDAwLCAweDE0LCAweDAyLAorMHg1MCwgMHgwOCwgMHg0MCwgMHgyMSwgMHgwMCwgMHg4NSwgMHgwMCwgMHgxNCwgMHgwMiwgMHg1MCwgMHgwOCwgMHg0MCwgMHgyMSwKKzB4MDAsIDB4ODUsIDB4MDAsIDB4MTQsIDB4MDIsIDB4NTAsIDB4MDgsIDB4NDAsIDB4MjEsIDB4MDAsIDB4ODUsIDB4MDAsIDB4MTQsCisweDAyLCAweDUwLCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwOCwgMHgwMCwgMHgyMCwKKzB4MDAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MjAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDEsCisweDAyLCAweDAwLCAweDA4LCAweDAwLCAweDIwLCAweDAwLCAweDgwLCAweDAwLCAweDAwLCAweDAyLCAweDAwLCAweDA4LCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyMSwKKzB4MDAsIDB4ODQsIDB4MDAsIDB4MTAsIDB4MDIsIDB4NDAsIDB4MDgsIDB4MTAsIDB4MjEsIDB4NDAsIDB4ODQsIDB4MDAsIDB4MTEsCisweDAyLCAweDQ0LCAweDA4LCAweDEwLCAweDIxLCAweDQwLCAweDg0LCAweDAwLCAweDExLCAweDAyLCAweDQ0LCAweDA4LCAweDEwLAorMHgyMSwgMHg0MCwgMHg4NCwgMHgwMCwgMHgxMSwgMHgwMiwgMHg0NCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDAsCisweDAyLCAweDAwLCAweDA4LCAweDEwLCAweDIwLCAweDQwLCAweDgwLCAweDAwLCAweDAwLCAweDAyLCAweDAwLCAweDA4LCAweDAwLAorMHgyMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwOCwgMHgwMCwgMHgyMCwgMHgwMCwgMHg4MCwgMHgwMCwKKzB4MDAsIDB4MDIsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDAxLCAweDQwLCAweDA0LCAweDAwLCAweDExLCAweDAwLCAweDQ0LCAweDAwLCAweDEwLAorMHgwMSwgMHg0MCwgMHgwNCwgMHgwMCwgMHgxMSwgMHgwMCwgMHg0NCwgMHgwMCwgMHgxMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwKKzB4MTEsIDB4MDAsIDB4NDQsIDB4MDAsIDB4MTAsIDB4MDEsIDB4NDAsIDB4MDQsIDB4MDAsIDB4MTEsIDB4MDAsIDB4NDQsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDAwLCAweDQwLAorMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgxMCwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwKKzB4MDQsIDB4MDAsIDB4MTAsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MTAsIDB4MDAsCisweDQwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDEwLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHgxMCwgMHgwMSwgMHg0MCwgMHgwNCwgMHgwMCwKKzB4MTEsIDB4MDAsIDB4NDQsIDB4MDAsIDB4MTAsIDB4MDEsIDB4NDAsIDB4MDQsIDB4MDAsIDB4MTEsIDB4MDAsIDB4NDQsIDB4MDAsCisweDEwLCAweDAxLCAweDQwLCAweDA0LCAweDAwLCAweDExLCAweDAwLCAweDQ0LCAweDAwLCAweDEwLCAweDAxLCAweDQwLCAweDA0LAorMHgwMCwgMHgxMSwgMHgwMCwgMHg0NCwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsCisweDEwLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDEwLCAweDAwLCAweDQwLCAweDAwLAorMHgwMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgxMCwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwNCwKKzB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsCisweDUwLCAweDIxLCAweDQwLCAweDg1LCAweDAwLCAweDE1LCAweDAyLCAweDU0LCAweDA4LCAweDUwLCAweDIxLCAweDQwLCAweDg1LAorMHgwMCwgMHgxNSwgMHgwMiwgMHg1NCwgMHgwOCwgMHg1MCwgMHgyMSwgMHg0MCwgMHg4NSwgMHgzMywgMHgxNSwgMHgwMiwgMHg1NCwKKzB4MDgsIDB4NTAsIDB4MjEsIDB4NDAsIDB4ODUsIDB4MDAsIDB4MTUsIDB4MDIsIDB4NTQsIDB4MDgsIDB4NDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDAwLCAweDEwLCAweDIwLCAweDQwLCAweDgwLAorMHgwMCwgMHgwMSwgMHgwMiwgMHgwNCwgMHgwOCwgMHgxMCwgMHgyMCwgMHg0MCwgMHg4MCwgMHgwMCwgMHgwMSwgMHgwMiwgMHgwNCwKKzB4MDgsIDB4MTAsIDB4MjAsIDB4NDAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4MDIsIDB4MDQsIDB4MDgsIDB4MTAsIDB4MjAsIDB4NDAsCisweDgwLCAweDAwLCAweDAxLCAweDAyLCAweDA0LCAweDA4LCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgyMSwgMHgwMCwgMHg4NCwgMHgwMCwgMHgxMCwgMHgwMiwgMHg0MCwKKzB4MDgsIDB4MDAsIDB4MjEsIDB4MDAsIDB4ODQsIDB4MDAsIDB4MTAsIDB4MDIsIDB4NDAsIDB4MDgsIDB4MDAsIDB4MjEsIDB4MDAsCisweDg0LCAweDAwLCAweDEwLCAweDAyLCAweDQwLCAweDA4LCAweDAwLCAweDIxLCAweDAwLCAweDg0LCAweDAwLCAweDEwLCAweDAyLAorMHg0MCwgMHgwOCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwKKzB4MDgsIDB4MDAsIDB4RTAsIDB4MEMsIDB4ODAsIDB4MzMsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MzgsIDB4MDMsIDB4MjAsIDB4MDAsCisweDgwLCAweDMzLCAweDAwLCAweENFLCAweDAwLCAweDM4LCAweDAzLCAweEUwLCAweDBDLCAweDgwLCAweDMzLCAweDAwLCAweENFLAorMHgwMCwgMHgzOCwgMHgwMywgMHhFMCwgMHgwQywgMHg4MCwgMHgzMywgMHgwMCwgMHhDRSwgMHgwMCwgMHgzOCwgMHg0MywgMHgyMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MjEsIDB4MDAsCisweDg0LCAweDAwLCAweDEwLCAweDAyLCAweDQwLCAweDA4LCAweDAwLCAweDIxLCAweDAwLCAweDg0LCAweDAwLCAweDEwLCAweDAyLAorMHg0MCwgMHgwOCwgMHgwMCwgMHgyMSwgMHgwMCwgMHg4NCwgMHgwMCwgMHgxMCwgMHgwMiwgMHg0MCwgMHgwOCwgMHgwMCwgMHgyMSwKKzB4MDAsIDB4ODQsIDB4MDAsIDB4MTAsIDB4MDIsIDB4NDAsIDB4MDgsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLAorMHgxMCwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgxMCwgMHgwMCwgMHg0MCwgMHgwMCwKKzB4MDAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MTAsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDQsCisweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgxMCwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMSwKKzB4MDAsIDB4MDQsIDB4MDAsIDB4MTAsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MTAsCisweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDEwLCAweDAwLCAweDQwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwMSwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHgwNCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDNDLCAweDNDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweEYwLCAweEYwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweEZDLCAweEZGLCAweEZGLCAweEZGLCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweEZDLCAweEZGLCAweEZGLCAweEZGLAorMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhGQywgMHhGRiwgMHhGRiwgMHhGRiwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4RkMsIDB4RkYsIDB4RkYsIDB4RkYsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweEZDLCAweEZGLCAweEZGLCAweEZGLAorMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhGQywgMHhGRiwgMHhGRiwgMHhGRiwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4RkMsIDB4RkYsIDB4RkYsIDB4RkYsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4RkMsIDB4RkYsIDB4RkYsCisweEZGLCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhGQywgMHhGRiwgMHhGRiwgMHhGRiwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4RkMsIDB4RkYsIDB4RkYsIDB4RkYsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4RkMsIDB4RkYsIDB4RkYsCisweEZGLCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweEZDLCAweEZGLCAweEZGLCAweEZGLCAweDAzLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4RkMsIDB4RkYsIDB4RkYsIDB4RkYsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4RkMsIDB4RkYsIDB4RkYsCisweEZGLCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweEZDLCAweEZGLCAweEZGLCAweEZGLCAweDAzLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHhGQywgMHhGRiwgMHhGRiwgMHhGRiwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4RkMsIDB4RkYsIDB4RkYsCisweEZGLCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweEZDLCAweEZGLCAweEZGLCAweEZGLCAweDAzLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHhGQywgMHhGRiwgMHhGRiwgMHhGRiwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhGQywgMHhGRiwKKzB4RkYsIDB4RkYsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweEZDLCAweEZGLCAweEZGLCAweEZGLCAweDAzLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHhGQywgMHhGRiwgMHhGRiwgMHhGRiwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhGQywgMHhGRiwKKzB4RkYsIDB4RkYsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4RkMsIDB4RkYsIDB4RkYsIDB4RkYsIDB4MDMsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwQywgMHgwMCwgMHgwNCwgMHg4MCwKKzB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MEMsIDB4MDAsIDB4QzIsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MEMsIDB4MDAsIDB4MDQsIDB4ODAsIDB4NDAsCisweDQwLCAweDAwLCAweDAwLCAweDBDLCAweDAwLCAweEMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MEMsIDB4MDAsCisweDAwLCAweDgwLCAweDAwLCAweDAwLCAweEE0LCAweDA3LCAweDBDLCAweDAwLCAweDAxLCAweDgwLCAweDAwLCAweDAwLCAweDAwLAorMHhDMCwgMHgwQywgMHgwMCwgMHgwMiwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MEMsIDB4MDAsIDB4MDEsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4QTAsIDB4MEMsIDB4MDAsIDB4MDUsIDB4ODAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBDLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDAwLCAweDg3LCAweDVBLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAKK307CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvc2xpY29zcy9LY29uZmlnIGIvZHJpdmVycy9zdGFnaW5nL3NsaWNvc3MvS2NvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMjk5M2QzCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3NsaWNvc3MvS2NvbmZpZwpAQCAtMCwwICsxLDE0IEBACitjb25maWcgU0xJQ09TUworCXRyaXN0YXRlICJBbGFjcml0ZWNoIEdpZ2FiaXQgSVMtTklDIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBQQ0kgJiYgWDg2ICYmIE5FVERFVl8xMDAwCisJZGVmYXVsdCBuCisJaGVscAorCSAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgQWxhY3JpdGVjaCdzIElTLU5JQyBnaWdhYml0IGV0aGVybmV0IGNhcmRzLgorCisJICBUaGlzIGluY2x1ZGVzIHRoZSBmb2xsb3dpbmcgZGV2aWNlczoKKwkgICAgTW9qYXZlIGNhcmRzIChzaW5nbGUgcG9ydCBQQ0kgR2lnYWJpdCkgYm90aCBjb3BwZXIgYW5kIGZpYmVyCisJICAgIE9hc2lzIGNhcmRzIChzaW5nbGUgYW5kIGR1YWwgcG9ydCBQQ0kteCBHaWdhYml0KSBjb3BwZXIgYW5kIGZpYmVyCisJICAgIEthbGFoYXJpIGNhcmRzIChkdWFsIGFuZCBxdWFkIHBvcnQgUENJLWUgR2lnYWJpdCkgY29wcGVyIGFuZCBmaWJlcgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlCisJICB3aWxsIGJlIGNhbGxlZCBzbGljb3NzLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3NsaWNvc3MvTWFrZWZpbGUgYi9kcml2ZXJzL3N0YWdpbmcvc2xpY29zcy9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YmM5ZTliCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3NsaWNvc3MvTWFrZWZpbGUKQEAgLTAsMCArMSBAQAorb2JqLSQoQ09ORklHX1NMSUNPU1MpICs9IHNsaWNvc3MubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3NsaWNvc3MvUkVBRE1FIGIvZHJpdmVycy9zdGFnaW5nL3NsaWNvc3MvUkVBRE1FCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJkNWIxMTIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvc2xpY29zcy9SRUFETUUKQEAgLTAsMCArMSwxOSBAQAorVGhpcyBkcml2ZXIgaXMgc3VwcG9zZWQgdG8gc3VwcG9ydDoKKworCU1vamF2ZSBjYXJkcyAoc2luZ2xlIHBvcnQgUENJIEdpZ2FiaXQpIGJvdGggY29wcGVyIGFuZCBmaWJlcgorCU9hc2lzIGNhcmRzIChzaW5nbGUgYW5kIGR1YWwgcG9ydCBQQ0kteCBHaWdhYml0KSBjb3BwZXIgYW5kIGZpYmVyCisJS2FsYWhhcmkgY2FyZHMgKGR1YWwgYW5kIHF1YWQgcG9ydCBQQ0ktZSBHaWdhYml0KSBjb3BwZXIgYW5kIGZpYmVyCisKK1RoZSBkcml2ZXIgd2FzIGFjdHVhbGx5IHRlc3RlZCBvbiBPYXNpcyBhbmQgS2FsYWhhcmkgY2FyZHMuCisKK1RPRE86CisJLSBtb3ZlIGZpcm13YXJlIGxvYWRpbmcgdG8gcmVxdWVzdF9maXJtd2FyZSgpCisJLSByZW1vdmUgZGlyZWN0IG1lbW9yeSBhY2Nlc3Mgb2Ygc3RydWN0dXJlcworCS0gYW55IHJlbWFpbmluZyBzcGFyc2UgYW5kIGNoZWNrcGF0Y2gucGwgd2FybmluZ3MKKwktIGFueSBuZXRkZXYgcmVjb21tZW5kZWQgY2hhbmdlcworCitQbGVhc2Ugc2VuZCBwYXRjaGVzIHRvOgorICAgICAgICBHcmVnIEtyb2FoLUhhcnRtYW4gPGdyZWdraEBzdXNlLmRlPgorYW5kIENjOiBMaW9yIERvdGFuIDxsaW9kb3RAZ21haWwuY29tPiBhbmQgQ2hyaXN0b3BoZXIgSGFycmVyCis8Y2hhcnJlckBhbGFjcml0ZWNoLmNvbT4gYXMgd2VsbCBhcyB0aGV5IGFyZSBhbHNvIGFibGUgdG8gdGVzdCBvdXQgYW55CitjaGFuZ2VzLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3NsaWNvc3MvZ2Jkb3dubG9hZC5oIGIvZHJpdmVycy9zdGFnaW5nL3NsaWNvc3MvZ2Jkb3dubG9hZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc5NDQzMmJkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3NsaWNvc3MvZ2Jkb3dubG9hZC5oCkBAIC0wLDAgKzEsODIxNSBAQAorI2RlZmluZSBNT0pBVkVfVUNPREVfVkVSU19TVFJJTkcJIjEuMiIKKyNkZWZpbmUgTU9KQVZFX1VDT0RFX1ZFUlNfREFURSAgCSIyMDA2LzAzLzI3IDE1OjEyOjIyIgorI2RlZmluZSBNT0pBVkVfVUNPREVfSE9TVElGX0lEICAJMworCitzdGF0aWMgczMyIE1OdW1TZWN0aW9ucyA9IDB4MjsKK3N0YXRpYyB1MzIgTVNlY3Rpb25TaXplW10gPQoreworCTB4MDAwMDgwMDAsIDB4MDAwMTAwMDAsCit9OworCitzdGF0aWMgdTMyIE1TZWN0aW9uU3RhcnRbXSA9Cit7CisJMHgwMDAwMDAwMCwgMHgwMDAwODAwMCwKK307CisKK3N0YXRpYyB1OCBNb2phdmVVQ29kZVsyXVs2NTUzNl0gPQoreworCXsKKwkweDEyLCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDE4LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MWUsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwMywgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOCwKKwkweDk4LCAweGIwLCAweDAxLCAweDAwLCAweDA0LCAweDgwLCAweGEyLCAweDQwLCAweGZkLCAweDdmLCAweDAwLCAweDAwLAorCTB4MDksIDB4MDAsIDB4YTIsIDB4NDksIDB4ZGQsIDB4N2QsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGMsCisJMHg4MCwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwNywgMHgwMCwgMHgwMCwgMHg0MCwgMHhkMSwgMHhiMSwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDRjLCAweDgwLCAweGIyLCAweDAxLCAweDAwLCAweDA5LCAweDAwLCAweGEyLCAweDQwLAorCTB4NzUsIDB4N2QsIDB4MDAsIDB4MDAsIDB4NjAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjEsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgwYiwgMHgwMCwgMHhhOCwgMHhiMSwgMHg3ZSwgMHgzMSwgMHgwMCwgMHgwMCwgMHgwOSwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDExLCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4ODAsIDB4MWYsIDB4ZTksIDB4MTgsIDB4MzEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ZTksCisJMHg4MCwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwZiwgMHgwMCwgMHg0MCwgMHhlOSwgMHg4MCwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGE1LCAweDk5LCAweDAxLCAweDAwLCAweDE2LCAweDAwLCAweDI5LCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MTYsIDB4MDAsIDB4MTQsIDB4YmMsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwZiwgMHgwMCwgMHg5MywgMHhiYywgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MTAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4YTUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MWMsIDB4MDAsIDB4MjksIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgxYywgMHgwMCwgMHgxNCwgMHhiYywgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDExLCAweDAwLCAweDkzLCAweGJjLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDEsIDB4ODAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgyMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhhNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgyMiwgMHgwMCwgMHgyOSwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDIyLCAweDAwLCAweDE0LCAweGJjLCAweDgwLCAweDMyLCAweDAwLCAweDAwLAorCTB4MGUsIDB4MDAsIDB4OTMsIDB4YmMsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDksCisJMHhkZCwgMHg4MSwgMHgwMSwgMHgwMCwgMHgyYiwgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDNjLCAweDAxLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDI3LCAweDAwLCAweDE0LCAweGJjLAorCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDEsIDB4MTMsIDB4YmMsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHg1NCwgMHg5NSwgMHgwMCwgMHg0MCwgMHg0NSwgMHg5OSwgMHgwMSwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHg0MCwKKwkweGU1LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJmLCAweDQwLCAweDQ5LCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZTEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGIsCisJMHhiNywgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhiNSwgMHhiMywgMHgwMSwgMHgwMCwKKwkweGQ5LCAweDAwLCAweDAwLCAweDQwLCAweGIzLCAweDMzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4YjYsIDB4ZDMsIDB4MDEsIDB4MDAsIDB4MzIsIDB4MDAsIDB4OTUsIDB4ZTgsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHhmZiwgMHhmZiwgMHgwMCwgMHhlOCwgMHg4MCwgMHg4OCwgMHgwMSwgMHgwMCwgMHhiOCwgMHgwMCwgMHgyNiwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGZkLCAweGIzLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZmYsIDB4YjMsIDB4MDEsIDB4MDAsIDB4M2MsIDB4MDAsIDB4MjIsIDB4NTAsCisJMHg4MywgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHhmZCwgMHg5MywgMHgwMSwgMHgwMCwKKwkweGE1LCAweGE1LCAweDAwLCAweGE2LCAweGI0LCAweGE3LCAweDAxLCAweDAwLCAweDNjLCAweDAwLCAweGEyLCAweDUwLAorCTB4YjUsIDB4NzMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHgzYywgMHgwMCwgMHhhMiwgMHg0NSwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NiwKKwkweGZkLCAweDkzLCAweDAxLCAweDAwLCAweDQxLCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4N2YsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ZjUsIDB4Y2YsIDB4MDEsIDB4MDAsIDB4MWMsIDB4MDEsIDB4MDAsIDB4ZmEsCisJMHhiMywgMHgzMywgMHgwMSwgMHgwMCwgMHhhNSwgMHhhNSwgMHgwMCwgMHhkYSwgMHhiNSwgMHhhYiwgMHgwMSwgMHgwMCwKKwkweDk5LCAweDAwLCAweGEyLCAweDUwLCAweGI1LCAweDYzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LAorCTB4ZmQsIDB4OTMsIDB4MDEsIDB4MDAsIDB4ZDUsIDB4MDAsIDB4MDAsIDB4NDQsIDB4YjMsIDB4MzMsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhkNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkYSwKKwkweGQ3LCAweGIxLCAweDAxLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweGRhLCAweGVkLCAweDhiLCAweDAxLCAweDAwLAorCTB4ZDUsIDB4MDAsIDB4MDAsIDB4NDYsIDB4YjMsIDB4MzMsIDB4MDEsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHhkNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkYSwgMHhkNywgMHhiMSwgMHgwMSwgMHgwMCwKKwkweGZmLCAweDAwLCAweDAwLCAweGRhLCAweGVmLCAweDhiLCAweDAxLCAweDAwLCAweGZmLCAweDAwLCAweDAwLCAweGRhLAorCTB4ZTMsIDB4OGYsIDB4MDEsIDB4MDAsIDB4ZDUsIDB4MDAsIDB4MDAsIDB4NDgsIDB4YjMsIDB4MzMsIDB4MDEsIDB4MDAsCisJMHgzYywgMHgwMCwgMHgwMCwgMHg0MCwgMHhkNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHhmZiwgMHgwMCwgMHgwMCwgMHhkYSwKKwkweGQ3LCAweDhkLCAweDAxLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweGRhLCAweGYxLCAweGRiLCAweDAxLCAweDAwLAorCTB4ZmYsIDB4MDAsIDB4MDAsIDB4ZGEsIDB4ZTksIDB4OGIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDgsCisJMHhlOSwgMHhlMywgMHgwMSwgMHgwMCwgMHhkNSwgMHgwMCwgMHgwMCwgMHg0YiwgMHhiMywgMHgzMywgMHgwMSwgMHgwMCwKKwkweDJjLCAweDAwLCAweDAwLCAweDQwLCAweGQ1LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGRhLAorCTB4ZDcsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZDUsIDB4MDAsIDB4MDAsIDB4NGMsIDB4YjMsIDB4MzMsIDB4MDEsIDB4MDAsCisJMHhmZiwgMHhmZiwgMHgwMCwgMHhkYSwgMHhlYiwgMHhkYiwgMHgwMSwgMHgwMCwgMHhkNSwgMHgwMCwgMHgwMCwgMHg0ZSwKKwkweGIzLCAweDMzLCAweDAxLCAweDAwLCAweDAzLCAweDAwLCAweDAwLCAweGRhLCAweDgxLCAweDg4LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NWMsIDB4ODEsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4ZGEsCisJMHhiNSwgMHhkYiwgMHgwMSwgMHgwMCwgMHg1YywgMHgwMCwgMHgyNiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDAxLCAweDAwLCAweDAwLCAweGRhLCAweGI1LCAweGNmLCAweDAxLCAweDAwLCAweDAwLCAweGYwLCAweDAwLCAweGE3LAorCTB4YjQsIDB4ODcsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZGEsIDB4ODEsIDB4OTQsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhkOCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhkNSwgMHgwMCwgMHgwMCwgMHg1MCwKKwkweGIzLCAweDMzLCAweDAxLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweGRhLCAweGI1LCAweDhiLCAweDAxLCAweDAwLAorCTB4NjIsIDB4MDAsIDB4MjYsIDB4NGMsIDB4YjUsIDB4NjMsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ZGEsCisJMHhiNSwgMHhjZiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkYSwgMHhkZiwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweGQ1LCAweDAwLCAweDAwLCAweDUyLCAweGIzLCAweDMzLCAweDAxLCAweDAwLCAweGZmLCAweDAwLCAweDAwLCAweGRhLAorCTB4NGIsIDB4ODksIDB4MDEsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4ZGEsIDB4ZGYsIDB4ZjcsIDB4MDEsIDB4MDAsCisJMHhmZiwgMHgwMCwgMHgwMCwgMHhlZiwgMHhkZiwgMHg4YiwgMHgwMSwgMHgwMCwgMHg2OSwgMHgwMCwgMHgyMiwgMHg0MCwKKwkweGRmLCAweDdmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ3LCAweGZkLCAweDkzLCAweDAxLCAweDAwLAorCTB4MjAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4YjMsIDB4OWIsIDB4MDEsIDB4MDAsIDB4ZDUsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHg0MCwgMHhkNSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDA4LCAweDAwLCAweDAwLCAweGRhLCAweGQ3LCAweGU1LCAweDAxLCAweDAwLCAweGY4LCAweDAwLCAweDAwLCAweGRhLAorCTB4YjMsIDB4OGIsIDB4MDEsIDB4MDAsIDB4MzQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZDUsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhkOSwgMHhkNywgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhkOSwKKwkweGQ1LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGRhLCAweGQ3LCAweGIxLCAweDAxLCAweDAwLAorCTB4MjIsIDB4MDAsIDB4MDAsIDB4NDAsIDB4YjMsIDB4OWIsIDB4MDEsIDB4MDAsIDB4ZDUsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0OCwgMHhiNSwgMHhmMywgMHgwMSwgMHgwMCwKKwkweDAzLCAweDAwLCAweDAwLCAweGRhLCAweDdiLCAweDg5LCAweDAxLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDQwLAorCTB4ZGQsIDB4OWIsIDB4MDEsIDB4MDAsIDB4ZDUsIDB4MDAsIDB4MDAsIDB4NWQsIDB4YjMsIDB4MzMsIDB4MDEsIDB4MDAsCisJMHhmZiwgMHhmZiwgMHgwMCwgMHhkYSwgMHhlNywgMHg4YiwgMHgwMSwgMHgwMCwgMHg4YSwgMHgwMCwgMHgyNiwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweGZkLCAweDkzLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4ZTcsIDB4ZTMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4NDAsCisJMHhkNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmNiwgMHhlNywgMHg5NywgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGYzLCAweGQ3LCAweGIxLCAweDAxLCAweDAwLCAweGQ1LCAweDAwLCAweDAwLCAweDVlLAorCTB4YjMsIDB4MzMsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4ZGEsIDB4ZTUsIDB4OGIsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0OCwgMHhlNSwgMHhlMywgMHgwMSwgMHgwMCwgMHgwOCwgMHgwMSwgMHgwMCwgMHg0MCwKKwkweGQ1LCAweDk5LCAweDAxLCAweDAwLCAweGZmLCAweDAwLCAweDAwLCAweGRhLCAweGI1LCAweDhmLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjcsIDB4YjUsIDB4OTcsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZGEsCisJMHhkNywgMHhiMSwgMHgwMSwgMHgwMCwgMHgzYywgMHgwMSwgMHgwMCwgMHg0MCwgMHhkNSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGY4LCAweGU1LCAweDk3LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYyLAorCTB4ZDcsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDAsIDB4NDAsIDB4ZGQsIDB4OWIsIDB4MDEsIDB4MDAsCisJMHg5NiwgMHgwMCwgMHgyMiwgMHhmNSwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwKKwkweGZkLCAweDkzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGVlLCAweGQ1LCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjYsIDB4ZWIsIDB4OTcsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjUsCisJMHhkNywgMHhiMSwgMHgwMSwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHhlYSwgMHhkNCwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGY3LCAweGUzLCAweDk3LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYxLAorCTB4ZDcsIDB4YjEsIDB4MDEsIDB4MDAsIDB4M2MsIDB4MDAsIDB4MDAsIDB4ZWUsIDB4ZGQsIDB4Y2IsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhlZSwgMHhkNSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwKKwkweGU5LCAweDk3LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY0LCAweGQ3LCAweGIxLCAweDAxLCAweDAwLAorCTB4ZDUsIDB4MDAsIDB4MDAsIDB4NGEsIDB4YjMsIDB4MzMsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4ZGEsCisJMHhkZCwgMHg4OSwgMHgwMSwgMHgwMCwgMHhiNywgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGQ1LCAweDk5LCAweDAxLCAweDAwLCAweDA1LCAweDAwLCAweDAwLCAweGE2LAorCTB4ZDYsIDB4YjEsIDB4MDEsIDB4MDAsIDB4OWEsIDB4MTMsIDB4MDAsIDB4ZWIsIDB4ZDYsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgwOCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhkNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMiwgMHgwMCwgMHhhNiwKKwkweGQ2LCAweGIxLCAweDAxLCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweGViLCAweGQ2LCAweDk5LCAweDAxLCAweDAwLAorCTB4MmMsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZDUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDUsIDB4MDAsIDB4MDAsIDB4YTYsCisJMHhkNiwgMHhiMSwgMHgwMSwgMHgwMCwgMHg5YSwgMHgxMywgMHgwMCwgMHhlYiwgMHhkNiwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDNjLCAweDAxLCAweDAwLCAweDQwLCAweGQ1LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAyLCAweDAwLCAweDQwLAorCTB4ZDcsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4ZmQsIDB4OTMsIDB4MDEsIDB4MDAsCisJMHgzYywgMHgwMCwgMHgwMCwgMHg0MCwgMHhkNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhNiwKKwkweGQ2LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweGViLCAweGQ2LCAweDk5LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ZDUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4YTYsCisJMHhkNiwgMHhiMSwgMHgwMSwgMHgwMCwgMHg5YSwgMHgxMywgMHgwMCwgMHhlYiwgMHhkNiwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDA4LCAweDAxLCAweDAwLCAweDQwLCAweGQ1LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAyLCAweDAwLCAweGE2LAorCTB4ZDYsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ZWIsIDB4ZDYsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhkOSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweGRmLCAweGIxLCAweDAxLCAweDAwLCAweDA2LCAweDAwLCAweDAwLCAweDQwLCAweGQ1LCAweDk5LCAweDAxLCAweDAwLAorCTB4YTAsIDB4MDAsIDB4MDAsIDB4YTYsIDB4ZDYsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NjQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg0YiwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg3YiwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDAyLCAweDA0LCAweDAwLCAweDQwLCAweGRkLCAweDk5LCAweDAxLCAweDAwLCAweGI3LCAweDAwLCAweDEzLCAweGJjLAorCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDgsIDB4MDAsIDB4NDAsIDB4ZGQsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0YywgMHhkZCwgMHg5MSwgMHgwMSwgMHgwMCwgMHhiOCwgMHgwMCwgMHg5NSwgMHhlOCwKKwkweDg0LCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDJmLCAweGU5LCAweGZhLCAweGIzLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZDEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4NDIsCisJMHg4MCwgMHg4OCwgMHgwMSwgMHgwMCwgMHgzNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MCwgMHhjZSwgMHgwMSwgMHgwMCwKKwkweGI4LCAweDAwLCAweGE2LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweGMxLCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDIsIDB4ODAsIDB4MjIsIDB4NDAsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHhiOCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZiwKKwkweDgxLCAweGIwLCAweDAxLCAweDAwLCAweGNhLCAweDAwLCAweDA5LCAweGY5LCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4YzgsIDB4MDAsIDB4MDgsIDB4ZjksIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ZDQsIDB4MDAsIDB4MWYsIDB4ZmQsCisJMHhmOSwgMHgzMywgMHgwMCwgMHgwMCwgMHhjNywgMHgwMCwgMHg5ZSwgMHhmZCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDRhLCAweGYzLCAweDkzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQ4LAorCTB4ZjMsIDB4OTMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmQsIDB4ZjcsIDB4YjMsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg4MCwgMHg0OSwgMHhmMywgMHg5MywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmYywKKwkweDE5LCAweGIxLCAweDAxLCAweDAwLCAweGNmLCAweDAwLCAweDBhLCAweGY5LCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4NDAsIDB4ZmIsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ZmQsCisJMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwNywgMHg4MCwgMHhmOSwgMHhmMywgMHg4ZiwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDA3LCAweDQyLCAweGY5LCAweGYzLCAweDhmLCAweDAxLCAweDAwLCAweGQzLCAweDAwLCAweGEyLCAweGZmLAorCTB4ZjcsIDB4NmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHhhMiwgMHhmZiwgMHhmYiwgMHhlZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHhmYywKKwkweGUxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQwLCAweDgxLCAweGIwLCAweDAxLCAweDAwLAorCTB4ZDgsIDB4MDAsIDB4MDYsIDB4ZmUsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCisJMHhiMywgMHhlMywgMHgwMSwgMHgwMCwgMHgxYywgMHgwMSwgMHgwMCwgMHhmYSwgMHhiMywgMHhjMywgMHgwMCwgMHgwMCwKKwkweGRhLCAweDAwLCAweDAwLCAweDQyLCAweDhkLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAorCTB4OGQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4NDAsIDB4ODMsIDB4OTgsIDB4MDEsIDB4MDAsCisJMHhlYiwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwKKwkweDgzLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDg0LCAweDk2LCAweDgwLCAweGIyLCAweDAwLCAweDAwLAorCTB4MjYsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MjUsIDB4MDEsIDB4MDAsIDB4NDAsCisJMHgyZCwgMHgxMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgyZCwgMHg4MSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGRhLCAweGI1LCAweGViLCAweDAxLCAweDAwLCAweGU0LCAweDAwLCAweDg0LCAweDk2LAorCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ZTUsIDB4MDAsIDB4MDAsIDB4NDAsIDB4YjUsIDB4OTMsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhiNSwgMHg4MywgMHgwMSwgMHgwMCwgMHhkZSwgMHgwMCwgMHhhMiwgMHg0MSwKKwkweDgzLCAweDUwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLCAweDJkLCAweDgxLCAweDAxLCAweDAwLAorCTB4MjYsIDB4MDEsIDB4MDAsIDB4NDEsIDB4MmQsIDB4MDEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCisJMHhiMywgMHhjMywgMHgwMSwgMHgwMCwgMHhkYSwgMHgwMCwgMHhhMiwgMHg0MSwgMHg4ZCwgMHg1MCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDgwLCAweGRhLCAweGI1LCAweGJmLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRiLAorCTB4ODEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZGIsIDB4ODEsIDB4ZDAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhkOSwgMHhiOSwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweGI4LCAweGUzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGRjLCAweGI5LCAweGViLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4YjgsIDB4OTcsIDB4MDEsIDB4MDAsIDB4MTUsIDB4MDAsIDB4MDAsIDB4ZGMsCisJMHhiOSwgMHhlNywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgyZCwgMHg4MSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGRiLCAweDgxLCAweGIwLCAweDAxLCAweDAwLCAweDI3LCAweDAxLCAweDAwLCAweDQyLAorCTB4MmQsIDB4MTEsIDB4MDEsIDB4MDAsIDB4MjUsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MmQsIDB4MTEsIDB4MDEsIDB4MDAsCisJMHgyOCwgMHgwMSwgMHgwMCwgMHg0MCwgMHgyZCwgMHgwMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKKwkweDJkLCAweDkxLCAweDAxLCAweDAwLCAweDI2LCAweDAxLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4MjUsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MmQsIDB4MTEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHgyZCwgMHg4MSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMiwgMHg0MSwgMHg4MSwgMHhkMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDg0LCAweDk2LCAweDgwLCAweDMyLCAweDAxLCAweDAwLCAweGZmLCAweDAwLCAweGEwLCAweGRjLAorCTB4YjksIDB4NmIsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MmQsIDB4OTEsIDB4MDAsIDB4MDAsCisJMHhmOCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgyZCwgMHg4MSwgMHgwMCwgMHgwMCwgMHhkOCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweGIzLCAweDMzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDkwLCAweGRhLCAweDhiLCAweGIwLCAweDAwLCAweDAwLAorCTB4MTEsIDB4MDAsIDB4MDAsIDB4NDUsIDB4ODgsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4NDQsCisJMHg4MCwgMHhjZSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhNCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweGEzLCAweDQ0LCAweDg5LCAweGVjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLAorCTB4ODksIDB4ZDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4ODcsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHhkOSwgMHgwMCwgMHgwMCwgMHg0MywgMHhiMiwgMHgzMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwKKwkweGI1LCAweGYzLCAweDAxLCAweDAwLCAweDBjLCAweDAxLCAweGEwLCAweGRhLCAweDhiLCAweDQwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4OGIsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCisJMHg4NywgMHhjMCwgMHgwMSwgMHgwMCwgMHgwOCwgMHgwMSwgMHhhMiwgMHg0MSwgMHg4OSwgMHg1MCwgMHgwMCwgMHgwMCwKKwkweGZmLCAweGZmLCAweDAwLCAweDQ1LCAweDg4LCAweDg4LCAweDAxLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDQ1LAorCTB4OGEsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4MTIsIDB4MDEsIDB4OTAsIDB4NDQsIDB4OGEsIDB4NDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4YiwgMHhjMCwgMHgwMSwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHg0NSwKKwkweDhhLCAweGE4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDUwLCAweDhiLCAweGUwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4NDAsIDB4ZjksIDB4OWIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4YzAsIDB4MDAsIDB4NDAsCisJMHhiMywgMHhjZiwgMHgwMSwgMHgwMCwgMHgxYywgMHgwMSwgMHgwMCwgMHhmYywgMHgxOSwgMHgzMSwgMHgwMSwgMHgwMCwKKwkweDFjLCAweDAxLCAweDQwLCAweGRhLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweGRhLAorCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ZjksIDB4YzMsIDB4MDEsIDB4MDAsCisJMHgxNiwgMHgwMSwgMHg5ZiwgMHhkYSwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMiwgMHg4MCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDkxLCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZDksIDB4MmIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MWUsIDB4MDEsIDB4OWYsIDB4OTQsCisJMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMCwgMHgwMCwgMHg5NCwgMHg5MiwgMHhlNCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ4LCAweGI1LCAweGYzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ5LAorCTB4YjQsIDB4OTcsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4YjMsIDB4YzMsIDB4MDEsIDB4MDAsCisJMHgxZCwgMHgwMSwgMHhhMiwgMHg0MSwgMHg5MSwgMHg1MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwKKwkweDJiLCAweGIxLCAweDAxLCAweDAwLCAweDI5LCAweDAxLCAweDAwLCAweDUxLCAweDkzLCAweGIwLCAweDAwLCAweDAwLAorCTB4MjksIDB4MDEsIDB4MDAsIDB4NGQsIDB4OTMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MjksIDB4MDEsIDB4MDAsIDB4NDksCisJMHg5MywgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHg5MywgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDI5LCAweDAxLCAweGEyLCAweDQxLCAweDkzLCAweDUwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgxMSwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDEzLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MTQsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTUsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNiwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDE3LCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTksIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgxYSwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYiwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDFjLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MWQsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWUsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxZiwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDgwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDQwLAorCTB4YTEsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4YTEsIDB4ZDEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgxYiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDE5LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDE3LCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MTUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHgxMywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgxMSwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDBmLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4MGQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MGIsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwOSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDA3LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDA1LCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHgwMSwgMHhiMCwgMHgwMSwgMHgwMCwgMHg0NCwgMHgwMSwgMHgyMCwgMHg0OCwgMHhhMSwgMHg1MSwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDgwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDUwLCAweDAxLCAweDIyLCAweDRiLAorCTB4NzQsIDB4N2QsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCisJMHg2MCwgMHgwMCwgMHgwMCwgMHg0YiwgMHg2MCwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiMSwKKwkweDdlLCAweGIxLCAweDAxLCAweDAwLCAweDUxLCAweDAxLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4NGUsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4ODAsIDB4NDAsCisJMHg5NywgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1OCwgMHgwNywgMHg5MCwgMHgwMSwgMHgwMCwKKwkweGYzLCAweDlmLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LAorCTB4YTUsIDB4YjMsIDB4MDEsIDB4MDAsIDB4YWYsIDB4MDIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHhjNSwgMHgwMiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1YywKKwkweDA3LCAweDkwLCAweDAxLCAweDAwLCAweGYzLCAweDlmLCAweDAwLCAweDQwLCAweGJmLCAweGIzLCAweDAwLCAweDAwLAorCTB4NWYsIDB4MDEsIDB4MjIsIDB4Y2MsIDB4ODUsIDB4N2YsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTEsCisJMHgwNywgMHg5MCwgMHgwMSwgMHgwMCwgMHhmMywgMHg5ZiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDQ5LCAweGIxLCAweDAxLCAweDAwLCAweGFlLCAweDAzLCAweDAwLCAweGNiLAorCTB4YTMsIDB4YzksIDB4MDEsIDB4MDAsIDB4ZDAsIDB4MTQsIDB4MDAsIDB4NDAsIDB4YTEsIDB4OWIsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg0NiwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0OCwKKwkweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQwLCAweGYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4Y2EsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDUsCisJMHhlMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwNywgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDIwLCAweDAwLCAweDAwLCAweDIwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDY4LCAweDAxLCAweGE4LCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4Y2MsIDB4ODUsIDB4OTMsIDB4MDEsIDB4MDAsCisJMHhjNSwgMHgwMiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhkMCwgMHgxNCwgMHgwMCwgMHg0MCwKKwkweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZhLCAweGJhLCAweGIzLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZmEsIDB4YTQsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsCisJMHhiYywgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgxNCwgMHgyZiwgMHg0MCwgMHg4MSwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGU3LCAweGE3LCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LAorCTB4YTksIDB4YjMsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4ZGQsIDB4ODEsIDB4ODgsIDB4MDEsIDB4MDAsCisJMHgwMiwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MCwgMHhmNCwgMHgwMSwgMHgwMCwgMHg3OCwgMHgwMSwgMHgwMCwgMHg0MCwKKwkweDgwLCAweGM4LCAweDAxLCAweDAwLCAweDg4LCAweDAxLCAweDAwLCAweGRkLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MTAsIDB4YjEsIDB4MDAsIDB4MDAsIDB4ODksIDB4MDEsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg4YSwgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDhiLCAweDAxLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDhjLCAweDAxLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4OGQsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHg4ZiwgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg5MSwgMHgwMSwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDU1LCAweDAxLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4ZDIsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4NTUsIDB4MDEsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweGUxLCAweDAxLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDdmLCAweDAyLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHhmMSwgMHg5ZiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhmMiwgMHg5ZiwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDc3LCAweDAxLCAweDAwLCAweDQxLCAweDgxLCAweGMwLCAweDFhLCAweDAwLAorCTB4NWEsIDB4MDEsIDB4NTEsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MWEsIDB4MDAsIDB4NWEsIDB4MDEsIDB4NTIsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgxYSwgMHgwMCwgMHg1YSwgMHgwMSwgMHg1NSwgMHg0MCwgMHg4MSwgMHhiMiwgMHgxYSwgMHgwMCwKKwkweDVhLCAweDAxLCAweDU2LCAweDQwLCAweDgxLCAweGIyLCAweDFhLCAweDAwLCAweDU1LCAweDAxLCAweDkxLCAweDgxLAorCTB4ODAsIDB4MzAsIDB4MWEsIDB4MDAsIDB4NWEsIDB4MDEsIDB4NDUsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MWEsIDB4MDAsCisJMHg1NSwgMHgwMSwgMHg5MSwgMHg4MiwgMHg4MCwgMHgzMCwgMHgxYSwgMHgwMCwgMHg1YSwgMHgwMSwgMHg0NiwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDg5LCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MmYsIDB4NDAsIDB4ODEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDAsIDB4NDAsCisJMHg0OSwgMHg5OSwgMHgwMSwgMHgwMCwgMHhiNSwgMHgwMSwgMHgyMiwgMHhkZSwgMHhlMSwgMHg2ZCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDRjLCAweDQ5LCAweGMxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAorCTB4ODEsIDB4YzAsIDB4MDEsIDB4MDAsIDB4OTQsIDB4MDEsIDB4YTIsIDB4NDQsIDB4ODEsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0YywgMHg0OSwgMHhkMSwgMHgwMSwgMHgwMCwgMHg5YywgMHgwMSwgMHgyMiwgMHg0MCwKKwkweGUxLCAweDZkLCAweDAwLCAweDAwLCAweDk4LCAweDAxLCAweGEyLCAweDQxLCAweDgxLCAweDUwLCAweDAwLCAweDAwLAorCTB4NTUsIDB4MDEsIDB4MDAsIDB4NDEsIDB4YmYsIDB4YjMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsCisJMHhiZiwgMHhiMywgMHgwMSwgMHgwMCwgMHg1NSwgMHgwMSwgMHhhMCwgMHgwZiwgMHhiZCwgMHg2ZiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGRlLCAweGUxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LAorCTB4NDksIDB4YzEsIDB4MDEsIDB4MDAsIDB4YjcsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MTksIDB4OTksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg0MiwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywgMHhmZiwKKwkweDg1LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGRlLCAweDE5LCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4NDIsIDB4ZmYsIDB4ODcsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4ZmYsCisJMHhlMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg0OSwgMHhjMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDJmLCAweGZmLCAweGUxLCAweGIxLCAweDAxLCAweDAwLCAweDA4LCAweDE0LCAweDAwLCAweGE0LAorCTB4ODAsIDB4Y2MsIDB4MDEsIDB4MDAsIDB4YWMsIDB4MDEsIDB4MjYsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4NSwgMHhjMCwgMHgwMSwgMHgwMCwgMHhhYSwgMHgwMSwgMHhhMiwgMHg0YywKKwkweDgxLCAweDUwLCAweDAwLCAweDAwLCAweGI2LCAweDAxLCAweDIyLCAweGQyLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4YjEsIDB4MDEsIDB4MjIsIDB4NDEsIDB4YTUsIDB4NmYsIDB4MDAsIDB4MDAsIDB4NTUsIDB4MDEsIDB4YTIsIDB4ZTAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkMiwgMHhjMSwgMHhiMywgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDVjLCAweDg5LCAweDkwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDQyLAorCTB4ODAsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4NDMsIDB4ODAsIDB4YjIsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHg4OCwgMHg5NCwgMHgwMSwgMHgwMCwgMHg1YSwgMHgwMSwgMHgwMCwgMHg0NCwKKwkweGUwLCAweGIxLCAweDAwLCAweDAwLCAweGIzLCAweDAxLCAweDAwLCAweDQ4LCAweDQ5LCAweGMxLCAweDAwLCAweDAwLAorCTB4YjEsIDB4MDEsIDB4MDAsIDB4NWIsIDB4ODksIDB4OTAsIDB4MDAsIDB4MDAsIDB4YjAsIDB4OWYsIDB4MDAsIDB4YTAsCisJMHg5ZSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZCwgMHg4MSwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQzLCAweGNiLCAweDgzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4YmEsIDB4MDEsIDB4YTIsIDB4NDEsIDB4ODEsIDB4NTAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg0NSwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweGM0LCAweDAxLCAweDkxLCAweDgyLCAweDgyLCAweDMwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4OGEsIDB4ODAsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YjYsIDB4OWYsIDB4MDAsIDB4NDAsCisJMHg4MCwgMHhjZSwgMHgwMSwgMHgwMCwgMHhjMywgMHgwMSwgMHhhNiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweGM0LCAweDAxLCAweDU2LCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUzLAorCTB4NmYsIDB4OTMsIDB4MDEsIDB4MDAsIDB4ZjMsIDB4OWYsIDB4MDAsIDB4NTIsIDB4NmYsIDB4OTMsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZCwgMHg4MSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwKKwkweGNkLCAweDgzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDQ2LCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAorCTB4YzcsIDB4MDEsIDB4YTIsIDB4NDEsIDB4ODEsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NiwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKKwkweGQxLCAweDAxLCAweDkxLCAweDgxLCAweDgyLCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDg5LAorCTB4ODAsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YjYsIDB4OWYsIDB4MDAsIDB4NDAsIDB4ODAsIDB4Y2UsIDB4MDEsIDB4MDAsCisJMHhkMCwgMHgwMSwgMHhhNiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhkMSwgMHgwMSwgMHg1NSwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUyLCAweDZmLCAweDkzLCAweDAxLCAweDAwLAorCTB4ZjMsIDB4OWYsIDB4MDAsIDB4NTMsIDB4NmYsIDB4OTMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwMCwgMHg0MCwgMHg0OSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDIzLCAweDQwLCAweDgxLCAweGIwLCAweDAxLCAweDAwLCAweGRhLCAweDAxLCAweDIyLCAweGRlLAorCTB4ZTEsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGMsIDB4NDksIDB4YzEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4MSwgMHhjMCwgMHgwMSwgMHgwMCwgMHhkNSwgMHgwMSwgMHhhMiwgMHg0NCwKKwkweDgxLCAweDZjLCAweDAwLCAweDAwLCAweDU1LCAweDAxLCAweDAwLCAweDQzLCAweGJmLCAweGIzLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MTgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjgsCisJMHg4MCwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHhmMCwgMHg4MCwgMHhiMiwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NWEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ZTEsIDB4YjEsIDB4MDAsIDB4MDAsCisJMHhlMiwgMHgwMSwgMHgwMCwgMHg0MCwgMHg5MSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKKwkweDkxLCAweGIwLCAweDAxLCAweDAwLCAweGQwLCAweDE0LCAweDJlLCAweDQwLCAweDQ5LCAweGIxLCAweDAxLCAweDAwLAorCTB4MDUsIDB4MDAsIDB4MDAsIDB4NDAsIDB4YTMsIDB4OWIsIDB4MDEsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4ZGQsCisJMHg4MSwgMHhmNCwgMHgwMSwgMHgwMCwgMHhlNywgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MCwgMHhjOCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDEwLCAweGIxLCAweDAwLCAweDAwLCAweGVkLCAweDAxLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NTgsIDB4MDEsIDB4MDAsIDB4ZGUsIDB4YTEsIDB4YjMsIDB4MDAsIDB4MDAsCisJMHhmZiwgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMiwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIwLCAweDAwLCAweDAwLCAweDA3LCAweDAyLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4NTcsIDB4MDEsIDB4MDAsIDB4ZGYsIDB4ZTEsIDB4YjEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDAsCisJMHhiYSwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkZSwgMHhhMSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAyLCAweDAwLCAweDAwLCAweGQyLCAweGE1LCAweGU3LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQyLAorCTB4YzEsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHhmNywgMHgwMSwgMHgyMiwgMHg0NCwgMHhjMSwgMHg1MywgMHgwMCwgMHgwMCwgMHhmNiwgMHgwMSwgMHg4NCwgMHg0MSwKKwkweDgxLCAweDQwLCAweDAwLCAweDAwLCAweGZhLCAweDAxLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZDAsIDB4NDUsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZjEsIDB4MDEsIDB4MDAsIDB4NDEsCisJMHhhMSwgMHhjMSwgMHgwMCwgMHgwMCwgMHhiMSwgMHgwMiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweGM1LCAweDAyLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDVhLCAweDAxLCAweDAwLCAweGRkLAorCTB4YTEsIDB4YjEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHg0MCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhhNSwgMHg5YiwgMHgwMSwgMHgwMCwgMHhiMSwgMHgwMiwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweGQzLCAweGE3LCAweGNiLCAweDAxLCAweDAwLAorCTB4YzUsIDB4MDIsIDB4MDAsIDB4ZTAsIDB4YTUsIDB4YjMsIDB4MDAsIDB4MDAsIDB4MDMsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHhhMywgMHg5YiwgMHgwMSwgMHgwMCwgMHg1OCwgMHgwMSwgMHgwMCwgMHhkZSwgMHhhMSwgMHhiMywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweGJmLCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGRlLAorCTB4ODEsIDB4OTAsIDB4MDEsIDB4MDAsIDB4NTUsIDB4MDEsIDB4YTIsIDB4YmEsIDB4ODAsIDB4MDQsIDB4MDAsIDB4MDAsCisJMHg2MCwgMHgwMCwgMHgwMCwgMHhkZSwgMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMiwgMHhhOCwgMHhiMSwKKwkweDgwLCAweDMwLCAweDAwLCAweDAwLCAweDU3LCAweDAxLCAweDAwLCAweDQwLCAweGUwLCAweGIxLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZDAsIDB4YmEsIDB4YjMsIDB4MDEsIDB4MDAsIDB4NjgsIDB4MDIsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHg5OCwgMHgwMSwgMHgwMCwgMHg1ZCwgMHgwMiwgMHgwMCwgMHg0ZCwgMHg4MywgMHgzMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweGUxLCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LAorCTB4ZTMsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4ZTUsIDB4YjMsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHhlOSwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwKKwkweGViLCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweGY1LCAweGIzLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4ZjcsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsCisJMHhmOSwgMHhiMywgMHgwMSwgMHgwMCwgMHgxNSwgMHgwMiwgMHgyMiwgMHg0MCwgMHg4ZiwgMHg2ZiwgMHgwMCwgMHgwMCwKKwkweDc1LCAweDAyLCAweDAwLCAweDQwLCAweDgxLCAweDk4LCAweDAxLCAweDAwLCAweDVkLCAweDAyLCAweDAwLCAweGM3LAorCTB4ODMsIDB4MzAsIDB4MDEsIDB4MDAsIDB4N2QsIDB4MDIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4OTgsIDB4MDEsIDB4MDAsCisJMHg1ZCwgMHgwMiwgMHgwMCwgMHg0MiwgMHg4MywgMHgzMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlOCwKKwkweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGU5LCAweGYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZWEsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZWIsCisJMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4NSwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGVjLCAweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGVkLAorCTB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjIsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHhlMCwgMHg5ZiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4YWIsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjgsCisJMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiOSwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGJhLCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGJiLAorCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MjksIDB4MDIsIDB4YjgsIDB4NDAsIDB4ODEsIDB4MzAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHg5MCwgMHgwMSwgMHgwMCwgMHgyYiwgMHgwMiwgMHhiOSwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDgxLCAweDkwLCAweDAxLCAweDAwLAorCTB4MmQsIDB4MDIsIDB4YmEsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsCisJMHg4MSwgMHg5MCwgMHgwMSwgMHgwMCwgMHgyZiwgMHgwMiwgMHhiYiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQzLCAweDgxLCAweDkwLCAweDAxLCAweDAwLCAweDMxLCAweDAyLCAweGJjLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4ODEsIDB4OTAsIDB4MDEsIDB4MDAsCisJMHgzMywgMHgwMiwgMHhiZCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwKKwkweDgxLCAweDkwLCAweDAxLCAweDAwLCAweDM1LCAweDAyLCAweGJlLCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsIDB4ODEsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MzcsIDB4MDIsIDB4YmYsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywgMHg4MSwgMHg5MCwgMHgwMSwgMHgwMCwKKwkweDM5LCAweDAyLCAweGM4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ4LAorCTB4ODEsIDB4OTAsIDB4MDEsIDB4MDAsIDB4M2IsIDB4MDIsIDB4YzksIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0OSwgMHg4MSwgMHg5MCwgMHgwMSwgMHgwMCwgMHgzZCwgMHgwMiwgMHhjYSwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRhLCAweDgxLCAweDkwLCAweDAxLCAweDAwLAorCTB4M2YsIDB4MDIsIDB4Y2IsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGIsCisJMHg4MSwgMHg5MCwgMHgwMSwgMHgwMCwgMHg0MSwgMHgwMiwgMHhjYywgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDRjLCAweDgxLCAweDkwLCAweDAxLCAweDAwLCAweDQzLCAweDAyLCAweGNkLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGQsIDB4ODEsIDB4OTAsIDB4MDEsIDB4MDAsCisJMHg0NSwgMHgwMiwgMHhjZSwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZSwKKwkweDgxLCAweDkwLCAweDAxLCAweDAwLCAweDQ3LCAweDAyLCAweGNmLCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGYsIDB4ODEsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhhNSwgMHg5YiwgMHgwMSwgMHgwMCwKKwkweGFmLCAweDAyLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGM1LCAweDAyLCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4ZDAsIDB4MTQsIDB4MmUsIDB4MDYsIDB4YTUsIDB4YjMsIDB4MDEsIDB4MDAsCisJMHg0MCwgMHgwMCwgMHgwMCwgMHhkMywgMHhhNywgMHhjYiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwKKwkweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYxLCAweGYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjIsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjQsCisJMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmNSwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGZhLCAweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZiLAorCTB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmMsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhlYiwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlZSwKKwkweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGVmLCAweGYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjMsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjYsCisJMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmZCwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweGY3LCAweDAxLCAweDAwLCAweGM3LCAweGUxLCAweGIxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4NjMsIDB4MDIsIDB4MDAsIDB4NDgsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg1MSwgMHg0MCwgMHgxYSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAorCTB4NjAsIDB4MDIsIDB4YTIsIDB4NDEsIDB4ODMsIDB4NTAsIDB4MDAsIDB4MDAsIDB4NWMsIDB4MDIsIDB4NDksIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MiwgMHg0MCwgMHgxYywgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDRlLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDQ2LCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4NjUsIDB4MDIsIDB4YTIsIDB4NDEsIDB4ODMsIDB4NTAsIDB4MDAsIDB4MDAsCisJMHg1YywgMHgwMiwgMHg0YSwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMCwKKwkweDllLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweGQ4LCAweGIzLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4YTEsIDB4ZDAsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTIsCisJMHhkMiwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhNCwgMHhkNCwgMHhiMywgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGQwLCAweGQ2LCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQxLAorCTB4ZGMsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDIsIDB4ZGUsIDB4YjMsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg4OCwgMHhkYSwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkNCwKKwkweDhlLCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQzLCAweGU2LCAweGIzLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4YWMsIDB4ZWMsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OTksCisJMHhmYSwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkNSwgMHhlMCwgMHhiMywgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGQ1LCAweGUyLCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ1LAorCTB4ZTQsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDUsIDB4ZTgsIDB4YjMsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhkNSwgMHhlYSwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkNSwKKwkweGY0LCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ1LCAweGY2LCAweGIzLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZDUsIDB4ZjgsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YzcsCisJMHhhOSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZiwgMHg0MCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDgxLCAweDAyLCAweDAwLCAweDQwLCAweDkxLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAorCTB4OTEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDcsIDB4MDAsIDB4MDAsIDB4NDAsIDB4YTMsIDB4OWIsIDB4MDEsIDB4MDAsCisJMHgwOCwgMHgwMCwgMHgwMCwgMHhkZCwgMHg4MSwgMHhmNCwgMHgwMSwgMHgwMCwgMHg4NSwgMHgwMiwgMHgwMCwgMHg0MCwKKwkweDgwLCAweGM4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDEwLCAweGIxLCAweDAwLCAweDAwLAorCTB4OGEsIDB4MDIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4OTUsIDB4MDIsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg5NSwgMHgwMiwgMHgwMCwgMHg0NiwgMHhhMywgMHhiMywgMHgwMCwgMHgwMCwKKwkweDk4LCAweDAyLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDllLCAweDAyLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4OGMsIDB4MDIsIDB4MjMsIDB4NTAsIDB4YTUsIDB4NmYsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHhhNSwgMHhiMywgMHgwMSwgMHgwMCwgMHhiYywgMHgwMiwgMHgwMCwgMHg0MiwKKwkweGE1LCAweDYzLCAweDAxLCAweDAwLCAweGM1LCAweDAyLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4ZDAsIDB4MTQsIDB4MmQsIDB4NDAsIDB4NDksIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDAsCisJMHhiYSwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkZSwgMHhhMSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDAwLCAweGIwLCAweDAxLCAweDAwLCAweDk0LCAweDAyLCAweDIyLCAweDQ0LAorCTB4YTUsIDB4NTMsIDB4MDAsIDB4MDAsIDB4OTEsIDB4MDIsIDB4MDAsIDB4NDEsIDB4YTEsIDB4YzEsIDB4MDAsIDB4MDAsCisJMHg1YSwgMHgwMSwgMHgwMCwgMHhkZCwgMHhhMSwgMHhiMSwgMHgwMCwgMHgwMCwgMHhiYywgMHgwMiwgMHgwMCwgMHhkZSwKKwkweGExLCAweDMzLCAweDAxLCAweDAwLCAweGM1LCAweDAyLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4NWEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsCisJMHhiZiwgMHhiMywgMHgwMSwgMHgwMCwgMHg1NSwgMHgwMSwgMHhhMiwgMHhkMiwgMHg3NywgMHg3ZCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGQyLCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGRlLAorCTB4NjMsIDB4YjEsIDB4MDEsIDB4MDAsIDB4OWIsIDB4MDIsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHg1YSwgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhiYywgMHgwMiwgMHgwMCwgMHg1NCwKKwkweGE1LCAweDMzLCAweDAxLCAweDAwLCAweGM1LCAweDAyLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4ZDAsIDB4MTQsIDB4MmQsIDB4NDAsIDB4NDksIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsCisJMHhkMCwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHhkMiwgMHhiMywgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGY4LCAweGQ0LCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LAorCTB4ZDYsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MDgsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHhhOSwgMHgwMiwgMHgwMCwgMHg0MCwgMHg4MSwgMHg5OCwgMHgwMSwgMHgwMCwgMHg1ZCwgMHgwMiwgMHgwMCwgMHg0NiwKKwkweDgzLCAweDMwLCAweDAxLCAweDAwLCAweDVhLCAweDAxLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4YTAsIDB4OWUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTgsCisJMHg0MywgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlOSwgMHg0NSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGVhLCAweDQ5LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGViLAorCTB4YTEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGYsIDB4NDAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhlNywgMHhhNywgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkOCwKKwkweGE5LCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDQ5LCAweGIxLCAweDAxLCAweDAwLAorCTB4YWUsIDB4MDMsIDB4MDAsIDB4Y2IsIDB4YTMsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg0NiwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkMiwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGQzLCAweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ0LAorCTB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDAsIDB4ZTEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhkMSwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweGI5LCAweDAyLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4ODAsIDB4Y2MsIDB4ODUsIDB4OTMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTcsCisJMHhhNywgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkOCwgMHhhOSwgMHhiMywgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDQ5LCAweGIxLCAweDAxLCAweDAwLCAweGFlLCAweDAzLCAweDAwLCAweGNiLAorCTB4YTMsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4NDYsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhkMiwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkMCwKKwkweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQzLCAweGYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4YjgsIDB4MDIsIDB4MDAsIDB4ZDQsIDB4ZTEsIDB4YjEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTIsIDB4Y2MsCisJMHg4NSwgMHhmZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHg4MSwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweGM3LCAweDAyLCAweGEyLCAweDQxLCAweDgxLCAweDUwLCAweDAwLCAweDAwLCAweGM2LCAweDAyLCAweGEyLCAweGYyLAorCTB4ODAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4Y2MsIDB4ODUsIDB4ODMsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMCwgMHgwMSwgMHgwMCwgMHhjYiwgMHgwMiwgMHg4MCwgMHhhNSwKKwkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweGNjLCAweDAyLCAweDAwLCAweGE1LCAweDgwLCAweDMyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ODEsIDB4YzAsIDB4MDEsIDB4MDAsIDB4Y2QsIDB4MDIsIDB4ODAsIDB4YTUsCisJMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MywgMHg5OCwgMHgwMSwgMHgwMCwKKwkweGQ2LCAweDAyLCAweDIwLCAweDRmLCAweDgxLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDQwLAorCTB4ODMsIDB4OTgsIDB4MDEsIDB4MDAsIDB4ZDYsIDB4MDIsIDB4MjAsIDB4NGIsIDB4ODEsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHg4MCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MywgMHg5OCwgMHgwMSwgMHgwMCwgMHhkNiwgMHgwMiwgMHgyMCwgMHg0NywKKwkweDgxLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDgzLCAweDk4LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ODIsIDB4ZGMsIDB4MDEsIDB4MDAsIDB4MDMsIDB4OTAsIDB4MDAsIDB4NDEsCisJMHgyMCwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0OSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDE0LCAweDJmLCAweDRjLCAweDgzLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZGEsIDB4MDIsIDB4YTIsIDB4NDEsIDB4ODMsIDB4NTAsIDB4MDAsIDB4MDAsCisJMHgwMiwgMHgwMCwgMHgwMCwgMHhhNSwgMHg4MCwgMHhjOCwgMHgwMSwgMHgwMCwgMHhkZCwgMHgwMiwgMHhhMiwgMHhhNSwKKwkweDgwLCAweDZjLCAweDAwLCAweDAwLCAweDIwLCAweDAwLCAweDAwLCAweDkwLCAweDIwLCAweDk5LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NWYsIDB4MjMsIDB4OTEsIDB4MDEsIDB4MDAsIDB4ZTAsIDB4MDIsIDB4MWYsIDB4OTEsCisJMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMCwgMHgwMCwgMHg5MCwgMHgyMCwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDVmLCAweDIzLCAweDkxLCAweDAxLCAweDAwLCAweGUzLCAweDAyLCAweDFmLCAweDkxLAorCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4NzAsIDB4MDAsIDB4MDAsIDB4OTAsIDB4MjAsIDB4YTksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1ZiwgMHgyMywgMHg5MSwgMHgwMSwgMHgwMCwgMHhlNiwgMHgwMiwgMHgxZiwgMHg5MSwKKwkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVmLCAweDIzLCAweDkxLCAweDAxLCAweDAwLAorCTB4ZTgsIDB4MDIsIDB4MWYsIDB4OTEsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjgsIDB4MDAsIDB4OTAsCisJMHgyMCwgMHhhOSwgMHgwMSwgMHgwMCwgMHhlMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDIxLCAweDAwLCAweDAwLCAweDQwLCAweDYxLCAweDk5LCAweDAxLCAweDAwLCAweDIyLCAweDAwLCAweDAwLCAweDQwLAorCTB4NjEsIDB4OTksIDB4MDEsIDB4MDAsIDB4MjMsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjEsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgyNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgyNSwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDYxLCAweDk5LCAweDAxLCAweDAwLCAweDI2LCAweDAwLCAweDAwLCAweDQwLCAweDYxLCAweDk5LCAweDAxLCAweDAwLAorCTB4MjcsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjEsIDB4OTksIDB4MDEsIDB4MDAsIDB4YzAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwgMHhkMCwgMHgxNCwgMHgwMCwgMHg0MCwgMHg0NSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDAyLCAweDAxLCAweDAwLCAweGE2LCAweDgwLCAweGIwLCAweDAxLCAweDAwLCAweDA0LCAweDAzLCAweDAwLCAweDQwLAorCTB4ODAsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDYsIDB4MDUsIDB4MDAsIDB4YTYsIDB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwOCwgMHgwNywgMHgwMCwgMHg0MSwgMHg4MiwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweGUwLCAweGIxLCAweDAxLCAweDAwLAorCTB4MzAsIDB4MDMsIDB4MDAsIDB4NDAsIDB4ODUsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MzksIDB4MDMsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhkOCwgMHgxNCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwKKwkweGZmLCAweDAyLCAweGEyLCAweGY4LCAweDgwLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweDIyLCAweGYwLAorCTB4ODIsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4MjEsIDB4OTEsIDB4MDEsIDB4MDAsCisJMHhkMCwgMHgxNCwgMHgyMCwgMHg0MCwgMHhlMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgzMCwgMHgwMywgMHgwMCwgMHgwYywKKwkweDg1LCAweDMwLCAweDAxLCAweDAwLCAweDMwLCAweDAzLCAweDAwLCAweDRkLCAweDg1LCAweDEwLCAweDAxLCAweDAwLAorCTB4MzAsIDB4MDMsIDB4MDAsIDB4NGUsIDB4ODUsIDB4MTAsIDB4MDEsIDB4MDAsIDB4ZDAsIDB4MTQsIDB4MjAsIDB4NGYsCisJMHhlMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgzMCwgMHgwMywgMHgwMCwgMHg0ZiwgMHg4NSwgMHgxMCwgMHgwMSwgMHgwMCwKKwkweDM5LCAweDAzLCAweDAwLCAweDBjLCAweDg1LCAweDMwLCAweDAxLCAweDAwLCAweGQ4LCAweDE0LCAweDIwLCAweDQzLAorCTB4ODEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MGYsIDB4MDMsIDB4MjIsIDB4ZjAsIDB4OWUsIDB4NmUsIDB4MDAsIDB4MDAsCisJMHgzOSwgMHgwMywgMHgwMCwgMHg0ZCwgMHg4NSwgMHgxMCwgMHgwMSwgMHgwMCwgMHhkOCwgMHgxNCwgMHgyMCwgMHg0MiwKKwkweDgxLCAweGIwLCAweDAxLCAweDAwLCAweDBmLCAweDAzLCAweDIyLCAweGYwLCAweDllLCAweDZlLCAweDAwLCAweDAwLAorCTB4MzksIDB4MDMsIDB4MDAsIDB4NGUsIDB4ODUsIDB4MTAsIDB4MDEsIDB4MDAsIDB4ZDgsIDB4MTQsIDB4MjAsIDB4NDEsCisJMHg4MSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgxMSwgMHgwMywgMHhhMiwgMHhmMCwgMHg5ZSwgMHg2ZSwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ5LCAweDgxLCAweGUwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4MjAsIDB4OTUsIDB4MDEsIDB4MDAsIDB4MDMsIDB4MDAsIDB4MDAsIDB4OTAsIDB4MjAsIDB4OGQsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywgMHgyMSwgMHg5NSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYiwKKwkweDg5LCAweGIwLCAweDAxLCAweDAwLCAweGQwLCAweDE0LCAweDIwLCAweDQwLCAweGUxLCAweGIxLCAweDAxLCAweDAwLAorCTB4MzAsIDB4MDMsIDB4MDAsIDB4MTcsIDB4ODUsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MzAsIDB4MDMsIDB4MDAsIDB4NTgsCisJMHg4NSwgMHgxMCwgMHgwMSwgMHgwMCwgMHgzMCwgMHgwMywgMHgwMCwgMHg1OSwgMHg4NSwgMHgxMCwgMHgwMSwgMHgwMCwKKwkweGQwLCAweDE0LCAweDIwLCAweDRmLCAweGUxLCAweGIxLCAweDAxLCAweDAwLCAweDMwLCAweDAzLCAweDAwLCAweDVhLAorCTB4ODUsIDB4MTAsIDB4MDEsIDB4MDAsIDB4MzksIDB4MDMsIDB4MDAsIDB4MTcsIDB4ODUsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHhkOCwgMHgxNCwgMHgyMCwgMHg0MCwgMHg4MSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgyMywgMHgwMywgMHgyMiwgMHhmMCwKKwkweDllLCAweDZlLCAweDAwLCAweDAwLCAweDM5LCAweDAzLCAweDAwLCAweDU4LCAweDg1LCAweDEwLCAweDAxLCAweDAwLAorCTB4ZDgsIDB4MTQsIDB4MjAsIDB4NDEsIDB4ODEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MjMsIDB4MDMsIDB4MjIsIDB4ZjAsCisJMHg5ZSwgMHg2ZSwgMHgwMCwgMHgwMCwgMHgzOSwgMHgwMywgMHgwMCwgMHg1OSwgMHg4NSwgMHgxMCwgMHgwMSwgMHgwMCwKKwkweGQ4LCAweDE0LCAweDIwLCAweDQyLCAweDgxLCAweGIwLCAweDAxLCAweDAwLCAweDI3LCAweDAzLCAweGEyLCAweGYwLAorCTB4OWUsIDB4NmUsIDB4MDAsIDB4MDAsIDB4MDMsIDB4MDAsIDB4MDAsIDB4OTAsIDB4MjAsIDB4OGQsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgyMCwgMHg5NSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwKKwkweDg5LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDg4LCAweGUwLCAweDAxLCAweDAwLAorCTB4MmYsIDB4MDMsIDB4YTIsIDB4NDIsIDB4MjEsIDB4N2QsIDB4MDAsIDB4MDAsIDB4YTUsIDB4YTUsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHg5OCwgMHgwMSwgMHgwMCwgMHhkMCwgMHgxNCwgMHgyMCwgMHg0MCwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDMwLCAweDAzLCAweDAwLCAweDQ0LCAweDg0LCAweDMwLCAweDAxLCAweDAwLCAweDM5LCAweDAzLCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4ZDgsIDB4MTQsIDB4MjAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCisJMHgyZiwgMHgwMywgMHhhMiwgMHhmMCwgMHg4MCwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKKwkweDg5LCAweGUwLCAweDAxLCAweDAwLCAweGUwLCAweDAwLCAweDgwLCAweDQwLCAweDYxLCAweDk5LCAweDAxLCAweDAwLAorCTB4NzAsIDB4MTUsIDB4MDAsIDB4NDAsIDB4NDcsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDgsCisJMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweGQwLCAweDE0LCAweDAwLCAweDQwLCAweGYxLCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDU1LAorCTB4ODcsIDB4YjQsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjEsIDB4OTksIDB4MDEsIDB4MDAsCisJMHg3MCwgMHgxNSwgMHgwMCwgMHg0MywgMHg2MiwgMHg5OSwgMHgwMSwgMHgwMCwgMHgzNiwgMHgwMywgMHhhOCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDQxLCAweDAzLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4NzAsIDB4MTUsIDB4MDAsIDB4NDAsIDB4NDcsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDgsCisJMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhkOCwgMHgxNCwgMHgwMCwgMHg0MCwgMHhmMSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQyLCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDU1LAorCTB4ODcsIDB4YjQsIDB4MDEsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjEsIDB4OTksIDB4MDEsIDB4MDAsCisJMHg3MCwgMHgxNSwgMHgwMCwgMHg0MywgMHg2MiwgMHg5OSwgMHgwMSwgMHgwMCwgMHgzZiwgMHgwMywgMHhhOCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ4LCAweDg3LCAweGIwLCAweDAxLCAweDAwLAorCTB4NDIsIDB4MDMsIDB4YTIsIDB4NDEsIDB4ODcsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTIsIDB4ZjIsCisJMHg4NiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHhmMSwgMHg4NiwgMHhmNCwgMHgwMSwgMHgwMCwKKwkweDQxLCAweDAzLCAweDI2LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsIDB4ODQsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHhhMiwgMHg0OCwgMHg4NCwgMHg4NCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1ZiwKKwkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVjLCAweDhmLCAweDkwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsIDB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDksIDB4MDMsIDB4YTgsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhmNSwgMHg5ZiwgMHgwMCwgMHg0NywgMHg5OCwgMHgzMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDA4LCAweDAwLCAweDQ3LCAweDhlLCAweGM4LCAweDAxLCAweDAwLCAweDQ3LCAweDAzLCAweDAwLCAweDVjLAorCTB4OGYsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjEsIDB4OTksIDB4MDEsIDB4MDAsCisJMHg1OCwgMHgxNSwgMHgyZCwgMHg0MCwgMHg4ZCwgMHhiMCwgMHgwMSwgMHgwMCwgMHhkMCwgMHgxNCwgMHgyZCwgMHhmMCwKKwkweDg4LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZhLCAweDhhLCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4ODEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDcsIDB4MDAsIDB4MDAsIDB4NDUsCisJMHg4MiwgMHg4OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywgMHg4YiwgMHhmMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ4LCAweDgzLCAweGUwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ2LAorCTB4ODIsIDB4OTQsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4NjAsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4ZCwgMHhjMCwgMHgwMSwgMHgwMCwgMHg2NCwgMHgwMywgMHgyMiwgMHg1ZiwKKwkweDhkLCAweDZjLCAweDAwLCAweDAwLCAweDU1LCAweDAzLCAweGEyLCAweDQxLCAweDgxLCAweDUwLCAweDAwLCAweDAwLAorCTB4NTMsIDB4MDMsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4NSwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDg2LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDFjLCAweDAwLCAweDQzLAorCTB4ODYsIDB4ZDgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTYsIDB4NDEsIDB4ODUsIDB4NTAsIDB4MDEsIDB4MDAsCisJMHg2MCwgMHgwMywgMHgwMCwgMHg0MSwgMHg4MywgMHhlMCwgMHgwMCwgMHgwMCwgMHg1ZSwgMHgwMywgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ4LCAweDg1LCAweGUwLCAweDAxLCAweDAwLAorCTB4ZDAsIDB4MTQsIDB4MmYsIDB4NDYsIDB4ODQsIDB4OTQsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4NDIsCisJMHg2MCwgMHg5OSwgMHgwMSwgMHgwMCwgMHhjMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDgwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDA3LCAweDAwLCAweDAwLCAweDQ1LAorCTB4ODAsIDB4ODgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4OGIsIDB4ZjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwNCwgMHgwMCwgMHg0MCwgMHg4MywgMHg5OCwgMHgwMSwgMHgwMCwgMHg2ZiwgMHgwMywgMHhhMCwgMHg0MSwKKwkweDgxLCAweDUwLCAweDAwLCAweDAwLCAweDZkLCAweDAzLCAweDAwLCAweDQxLCAweDgyLCAweGU4LCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4ODAsIDB4NDEsIDB4OGUsIDB4YzAsIDB4MDEsIDB4MDAsIDB4YWUsIDB4MDMsIDB4MDAsIDB4NDAsCisJMHhhMywgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1NCwgMHg4MSwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDYwLCAweDE1LCAweDAwLCAweDQwLCAweDg1LCAweDk4LCAweDAxLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDQwLAorCTB4NDAsIDB4ZTQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWEsIDB4NDEsIDB4OTQsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHg0MSwgMHhlMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwKKwkweDQwLCAweDk0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDgxLCAweGMwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4YTMsIDB4NTUsIDB4ODEsIDB4NmMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCisJMHhhMywgMHhjMSwgMHgwMSwgMHgwMCwgMHg3MywgMHgwMywgMHgwMCwgMHg1MCwgMHg4NSwgMHhjMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDQ5LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAyLCAweDAwLCAweDQwLAorCTB4ODMsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MTYsIDB4MDAsIDB4NDAsIDB4NDUsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg3ZSwgMHgwMywgMHhhMiwgMHg0MSwKKwkweDgzLCAweDUwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDg1LCAweGIwLCAweDAxLCAweDAwLAorCTB4MGIsIDB4MDAsIDB4MDAsIDB4NDQsIDB4ODIsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4MWEsIDB4MTUsIDB4MDAsIDB4YTYsCisJMHg4NiwgMHhiMCwgMHgwMSwgMHgwMCwgMHg3MCwgMHgxNSwgMHgwMCwgMHg0MCwgMHg0NSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDA4LCAweDAwLCAweDQwLCAweGYxLCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLAorCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MTYsIDB4MDAsIDB4NDAsIDB4ZTEsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwgMHg3MCwgMHgxNSwgMHgwMCwgMHg0MywKKwkweDYyLCAweDk5LCAweDAxLCAweDAwLCAweDg4LCAweDAzLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4OGEsIDB4MDMsIDB4MjIsIDB4NWEsIDB4NzMsIDB4N2QsIDB4MDAsIDB4MDAsIDB4N2EsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwgMHg4YiwgMHgwMywgMHhhOCwgMHhiMSwgMHg3ZSwgMHgzMSwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDA4LCAweDAwLCAweDQyLCAweDg0LCAweGM4LCAweDAxLCAweDAwLCAweDgzLCAweDAzLCAweGEyLCAweDQxLAorCTB4ODMsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGY3LCAweDBmLCAweDAwLCAweGJjLAorCTB4ODAsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDMsIDB4ODAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwMywgMHg4MCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMywgMHg4MCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAzLCAweDgwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDMsIDB4ODAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDMsIDB4ODAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMywgMHg4MCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDAzLCAweDgwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCX0sCisJeworCTB4MzEsIDB4ODAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MzQsIDB4ODAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgzNSwgMHg4MCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDFiLCAweDgwLCAweDgxLCAweDgwLAorCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ZTYsIDB4ODksIDB4YTIsIDB4NDAsIDB4OTEsIDB4NmYsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0YywgMHg5MCwgMHhiMywgMHgwMSwgMHgwMCwgMHg1YywgMHg5NSwgMHgyZSwgMHhhMiwKKwkweDgwLCAweGIwLCAweDAxLCAweDAwLCAweGZmLCAweDAwLCAweDAwLCAweDgwLCAweGY0LCAweDg5LCAweDAxLCAweDAwLAorCTB4OTAsIDB4OTUsIDB4MmEsIDB4YzgsIDB4ZTUsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTEsCisJMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGE0LCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQwLAorCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDEsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhkMiwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YywKKwkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ0LCAweGYwLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZDMsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZWUsCisJMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZSwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDQ0LCAweGIxLCAweDAxLCAweDAwLCAweDE4LCAweDgwLCAweDExLCAweDgxLAorCTB4OTgsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTEsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCisJMHgxYSwgMHg4MCwgMHgxMSwgMHg4MiwgMHg5OCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MiwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweGU2LCAweDg5LCAweDAwLCAweDQ4LCAweGZkLCAweDkzLCAweDAwLCAweDAwLAorCTB4YjYsIDB4MDMsIDB4MDAsIDB4NDAsIDB4YTEsIDB4OTksIDB4MDEsIDB4MDAsIDB4MjMsIDB4ODAsIDB4YTIsIDB4NDIsCisJMHhmZCwgMHg3ZiwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4MCwgMHgwMCwgMHg4MCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDIyLCAweDgwLCAweDExLCAweDgxLCAweDgyLCAweDMwLCAweDAwLCAweDAwLCAweDIyLCAweDgwLCAweDUxLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MjIsIDB4ODAsIDB4MTEsIDB4ODIsIDB4ODIsIDB4MzAsIDB4MDAsIDB4MDAsCisJMHgyMiwgMHg4MCwgMHg1MiwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgyYywgMHg4MCwgMHgwMCwgMHg0OCwKKwkweGZkLCAweDkzLCAweDAwLCAweDAwLCAweDI3LCAweDgwLCAweDAwLCAweDgwLCAweDgwLCAweDMyLCAweDAwLCAweDAwLAorCTB4MjYsIDB4ODAsIDB4YTIsIDB4NTMsIDB4MDcsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTEsIDB4NTMsCisJMHgwNywgMHg5MCwgMHgwMSwgMHgwMCwgMHgyYSwgMHg4MCwgMHgwMCwgMHg1MiwgMHgwNywgMHg5MCwgMHgwMCwgMHgwMCwKKwkweDI5LCAweDgwLCAweGEyLCAweDUyLCAweDA3LCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUyLCAweDUyLAorCTB4MDcsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTMsIDB4MDcsIDB4OTAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0OCwgMHhmZCwgMHg5MywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwKKwkweGYzLCAweDkzLCAweDAxLCAweDAwLCAweDVjLCAweDk1LCAweDJlLCAweGEyLCAweDUyLCAweGIzLCAweDAxLCAweDAwLAorCTB4ZmYsIDB4MDAsIDB4MDAsIDB4ODAsIDB4ZjQsIDB4ODksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGMsCisJMHhlNCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOSwgMHg0NSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDMwLCAweDgwLCAweDAwLCAweDRjLCAweDgwLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTUsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCisJMHgxYiwgMHg4NCwgMHgwNSwgMHg0MCwgMHg0OSwgMHhiMSwgMHgwMCwgMHgwMCwgMHgxYiwgMHg4NCwgMHgwNSwgMHg0MCwKKwkweDQ5LCAweGIxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDQwLCAweDQ5LCAweGIxLCAweDAxLCAweDAwLAorCTB4ZTEsIDB4ODAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGIsCisJMHhkZSwgMHhiMiwgMHgwMSwgMHgwMCwgMHg3NywgMHgwMCwgMHgwMCwgMHg0MCwgMHg0YiwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGZkLCAweDkzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ4LAorCTB4ZmQsIDB4ODMsIDB4MDEsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4NDAsIDB4OWIsIDB4OWIsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhhNSwgMHg5YywgMHhiMywgMHgwMSwgMHgwMCwgMHhkZSwgMHg5OSwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDU4LCAweDk1LCAweDIwLCAweDQ0LCAweGUwLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4YzAsIDB4MDAsIDB4YTYsIDB4MzYsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZDAsIDB4MTQsIDB4MDAsIDB4NDAsCisJMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwgMHgwNSwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmNSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDM4LCAweDAwLCAweDQwLCAweGY1LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDA2LCAweDAwLCAweDQwLAorCTB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgwNSwgMHgxOCwgMHgwMCwgMHg0MCwgMHhmNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMiwgMHgwOSwgMHgwMCwgMHg0MCwKKwkweGY1LCAweDk5LCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweGY1LCAweDk5LCAweDAxLCAweDAwLAorCTB4NTAsIDB4MDMsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4N2IsIDB4MDMsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhlMCwgMHg4MywgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDEwLCAweDg0LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDA4LCAweDg0LCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4NjAsIDB4OTUsIDB4MjAsIDB4NDAsIDB4ZTEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg3MCwgMHg5NSwgMHgyMCwgMHg0MCwgMHhlMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0OSwKKwkweGRkLCAweDkxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDkxLCAweGIzLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODUsIDB4YjMsIDB4MDEsIDB4MDAsIDB4NWMsIDB4OTUsIDB4MjAsIDB4NDAsCisJMHhlMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgxYSwgMHg4MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDcxLCAweDgzLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDk3LAorCTB4ODAsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MmUsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMiwgMHgwMCwgMHgwMCwgMHg0MCwgMHgyZSwgMHhkZCwgMHgwMSwgMHgwMCwgMHg5MCwgMHgwMSwgMHgwMCwgMHg0MCwKKwkweDkzLCAweDk4LCAweDAxLCAweDAwLCAweDI5LCAweDAxLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4NWMsIDB4ODEsIDB4MDAsIDB4NDAsIDB4YWYsIDB4MzMsIDB4MDEsIDB4MDAsIDB4NjEsIDB4OTksIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDU1LCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDQ5LCAweDg0LCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4NzcsIDB4MDEsIDB4MDAsIDB4NDEsIDB4ODEsIDB4YzAsIDB4MDAsIDB4MDAsCisJMHg3MSwgMHg4MCwgMHg1MSwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg3MiwgMHg4MCwgMHg1MiwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDczLCAweDgwLCAweDU1LCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4NzQsIDB4ODAsIDB4NTYsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4NTUsIDB4MDEsIDB4OTEsIDB4ODEsCisJMHg4MCwgMHgzMCwgMHgwMCwgMHgwMCwgMHg1YSwgMHgwMSwgMHg0NSwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDU1LCAweDAxLCAweDkxLCAweDgyLCAweDgwLCAweDMwLCAweDAwLCAweDAwLCAweDVhLCAweDAxLCAweDQ2LCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4NWEsIDB4MDEsIDB4MDAsIDB4NDgsIDB4ZmQsIDB4OTMsIDB4MDAsIDB4MDAsCisJMHg1YSwgMHgwMSwgMHgwMCwgMHg0OCwgMHhmZCwgMHg5MywgMHgwMCwgMHgwMCwgMHg1YSwgMHgwMSwgMHgwMCwgMHg0OSwKKwkweGZkLCAweDgzLCAweDAwLCAweDAwLCAweDVhLCAweDAxLCAweDAwLCAweDRhLCAweGZkLCAweDgzLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDksIDB4YjEsIDB4MDEsIDB4MDAsIDB4YWUsIDB4MDMsIDB4MDAsIDB4Y2IsCisJMHhhMywgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg0NiwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGQyLCAweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQzLAorCTB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGE4LCAweGQwLCAweGUxLCAweGIxLCAweDAwLCAweDAwLAorCTB4N2MsIDB4ODAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTgsCisJMHg5OCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHg4MCwgMHgwMCwgMHg0MCwgMHg4YiwgMHhiMywgMHgwMCwgMHgwMCwKKwkweGIxLCAweDAzLCAweDAwLCAweDQwLCAweGExLCAweDk5LCAweDAxLCAweDAwLCAweDg0LCAweDgwLCAweGEyLCAweDQxLAorCTB4OTcsIDB4NmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4YTEsIDB4YzEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMiwgMHgwNCwKKwkweDgwLCAweDk0LCAweDAwLCAweDAwLCAweDgwLCAweDE1LCAweDNmLCAweDQyLCAweDk3LCAweGUzLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDksIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjAsIDB4MDMsCisJMHgwMiwgMHg5NCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwNywgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweGNiLCAweDk5LCAweGNiLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGNjLAorCTB4ZjMsIDB4ODMsIDB4MDEsIDB4MDAsIDB4OGUsIDB4ODAsIDB4YTIsIDB4NDEsIDB4OTcsIDB4NmYsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhjYiwgMHhmMywgMHg5MywgMHgwMSwgMHgwMCwgMHhhZSwgMHgwMywgMHgwMCwgMHhjYiwKKwkweGEzLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDIwLCAweDQ0LCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGExLCAweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDA1LCAweDAwLCAweDAwLCAweDQwLAorCTB4NjEsIDB4OTksIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCisJMHg5NSwgMHg4MCwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhjNiwgMHgwMiwgMHgwMCwgMHgyMCwKKwkweDQyLCAweDMxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGEyLCAweDQxLCAweDA1LCAweDZjLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4ODAsIDB4Y2IsIDB4ZGIsIDB4OTEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTksIDB4NDEsCisJMHg4YiwgMHhiMywgMHgwMSwgMHgwMCwgMHg2MCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDliLCAweDgwLCAweGE4LCAweGIxLCAweDhjLCAweDMzLCAweDAwLCAweDAwLCAweDYwLCAweDAwLCAweDAwLCAweDQwLAorCTB4NjEsIDB4OTksIDB4MDEsIDB4MDAsIDB4OWQsIDB4ODAsIDB4YTgsIDB4YjEsIDB4OTQsIDB4MzMsIDB4MDAsIDB4MDAsCisJMHhhMywgMHg4MCwgMHgxNCwgMHhjNiwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMCwgMHgwMCwgMHhjNiwKKwkweDgzLCAweGY0LCAweDAxLCAweDAwLCAweDZhLCAweDg0LCAweDIyLCAweDRmLCAweDgzLCAweDA0LCAweDAwLCAweDAwLAorCTB4N2YsIDB4ODAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4MDEsIDB4MDAsIDB4YzYsCisJMHg4MSwgMHg4OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjNiwgMHg5NywgMHhhMywgMHgwMSwgMHgwMCwKKwkweDdmLCAweDgwLCAweDFmLCAweDVjLCAweDk3LCAweDUzLCAweDAwLCAweDAwLCAweDllLCAweDgzLCAweDFkLCAweGM2LAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmYsIDB4NDMsIDB4ODEsIDB4ZjAsIDB4MDEsIDB4MDAsCisJMHhhOSwgMHg4MCwgMHgwMCwgMHg0MCwgMHgxMCwgMHhjOSwgMHgwMCwgMHgwMCwgMHgwNSwgMHg4MSwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDM2LCAweDgxLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4ZGEsIDB4ODEsIDB4MDAsIDB4Y2EsIDB4NjMsIDB4YjMsIDB4MDAsIDB4MDAsIDB4MmQsIDB4ODEsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgxNCwgMHg4MSwgMHgwMCwgMHg0ZCwgMHg4MywgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDFlLCAweDgxLCAweDAwLCAweDRlLCAweDYxLCAweGIxLCAweDAwLCAweDAwLCAweDBkLCAweDgxLCAweDAwLCAweDQwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4ODEsIDB4MDAsIDB4NGMsIDB4ODMsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHhmMCwgMHg4MCwgMHgwMCwgMHg0MCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg5MSwgMHg4MSwgMHgwMCwgMHg0MCwKKwkweDQ5LCAweGIxLCAweDAwLCAweDAwLCAweDNkLCAweDgxLCAweDAwLCAweDQwLCAweGMxLCAweGIxLCAweDAwLCAweDAwLAorCTB4OGQsIDB4ODEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MGQsIDB4ODEsIDB4MDAsIDB4NDAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhkZCwgMHg4MSwgMHgwMCwgMHg0MCwgMHg0OSwgMHhiMSwgMHgwMCwgMHgwMCwKKwkweDZhLCAweDg0LCAweDAwLCAweGNhLCAweDliLCAweGIzLCAweDAwLCAweDAwLCAweDQ2LCAweDgxLCAweDAwLCAweDQwLAorCTB4YzEsIDB4YjEsIDB4MDAsIDB4MDAsIDB4NGUsIDB4ODEsIDB4MDAsIDB4NDAsIDB4YzEsIDB4YjEsIDB4MDAsIDB4MDAsCisJMHg1NSwgMHg4MSwgMHgwMCwgMHg0MCwgMHhjMSwgMHhiMSwgMHgwMCwgMHgwMCwgMHg1NiwgMHg4MSwgMHgwMCwgMHg0MCwKKwkweGMxLCAweGIxLCAweDAwLCAweDAwLCAweDU3LCAweDgxLCAweDAwLCAweDQwLCAweGMxLCAweGIxLCAweDAwLCAweDAwLAorCTB4NTgsIDB4ODEsIDB4MDAsIDB4NDAsIDB4YzEsIDB4YjEsIDB4MDAsIDB4MDAsIDB4NTksIDB4ODEsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg1OSwgMHg4MSwgMHgwMCwgMHg0MSwgMHg4MSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweGNlLCAweDgxLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGRkLCAweDgzLCAweDAwLCAweGJiLAorCTB4YWIsIDB4YjMsIDB4MDAsIDB4MDAsIDB4ZGIsIDB4ODEsIDB4MDAsIDB4Y2EsIDB4Y2YsIDB4YjMsIDB4MDAsIDB4MDAsCisJMHhkMywgMHg4MCwgMHgwMCwgMHg0MCwgMHg0OSwgMHhiMSwgMHgwMCwgMHgwMCwgMHhkZiwgMHg4MCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGRjLCAweDgxLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4NmEsIDB4ODQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4ZGEsIDB4ODAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg2YSwgMHg4NCwgMHgwMCwgMHhjYSwgMHg3NywgMHhiMywgMHgwMCwgMHgwMCwKKwkweDE1LCAweDgxLCAweDAwLCAweDRkLCAweDgzLCAweGIwLCAweDAwLCAweDAwLCAweDFjLCAweDgxLCAweDAwLCAweDRlLAorCTB4NjEsIDB4YjEsIDB4MDAsIDB4MDAsIDB4MGQsIDB4ODEsIDB4MDAsIDB4YmIsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgxNSwgMHg4MSwgMHgwMCwgMHg0YywgMHg4MywgMHhiMCwgMHgwMCwgMHgwMCwgMHgwZCwgMHg4MSwgMHgwMCwgMHhiYiwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweGYwLCAweDgwLCAweDAwLCAweGJiLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4ZTIsIDB4ODAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4NmEsIDB4ODQsIDB4MDAsIDB4Y2EsCisJMHg0ZCwgMHhiMywgMHgwMCwgMHgwMCwgMHg2NCwgMHg4MiwgMHgwMCwgMHg0MCwgMHg0OSwgMHhiMSwgMHgwMCwgMHgwMCwKKwkweDhmLCAweDgyLCAweDAwLCAweDQwLCAweDQ5LCAweGIxLCAweDAwLCAweDAwLCAweGM4LCAweDE0LCAweDJlLCAweGJiLAorCTB4ODUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZWUsIDB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhmZiwgMHg3ZiwgMHgwMCwgMHhhMiwKKwkweGEwLCAweDhiLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweGE1LCAweGIzLCAweDAxLCAweDAwLAorCTB4NzUsIDB4ODAsIDB4MDAsIDB4Y2EsIDB4YTcsIDB4MzMsIDB4MDEsIDB4MDAsIDB4MDIsIDB4ODEsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg0ZSwgMHgwMSwgMHgwMCwgMHg0ZCwgMHg5MywgMHgzMCwgMHgwMSwgMHgwMCwKKwkweDRlLCAweDAxLCAweDAwLCAweDRlLCAweDkzLCAweDMwLCAweDAxLCAweDAwLCAweDRlLCAweDAxLCAweDAwLCAweDRjLAorCTB4OTMsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDgsIDB4ODQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHg2YSwgMHg4NCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg1NCwgMHg5NSwgMHgwMCwgMHg0MCwKKwkweDQ1LCAweDk5LCAweDAxLCAweDAwLCAweDZhLCAweDg0LCAweDAwLCAweGNhLCAweGU1LCAweGIxLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsIDB4OTcsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ZTgsIDB4ODAsIDB4MjIsIDB4NDIsCisJMHg4ZiwgMHg2ZiwgMHgwMCwgMHgwMCwgMHhlYSwgMHg4MCwgMHgyMiwgMHg0MSwgMHg4ZiwgMHg2ZiwgMHgwMCwgMHgwMCwKKwkweGVjLCAweDgwLCAweDFlLCAweGNhLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweGVlLCAweDgwLCAweDFmLCAweGNhLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4Y2EsIDB4YzksIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg2YSwgMHg4NCwgMHgwMCwgMHg0MiwgMHg4ZiwgMHhiMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjYSwKKwkweGNkLCAweGIxLCAweDAxLCAweDAwLCAweDZhLCAweDg0LCAweDAwLCAweDQxLCAweDhmLCAweGIzLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4Y2EsIDB4Y2YsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NmEsIDB4ODQsIDB4MDAsIDB4NDAsCisJMHg4ZiwgMHhiMywgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MSwgMHgwMCwgMHhhNiwgMHhjNiwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDZhLCAweDg0LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweGE2LAorCTB4YzYsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NmEsIDB4ODQsIDB4MDAsIDB4NDAsIDB4OGYsIDB4YjMsIDB4MDAsIDB4MDAsCisJMHg3OCwgMHgxOCwgMHgwMCwgMHg0MCwgMHg0OSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMCwgMHgyZiwgMHg5YywKKwkweDg5LCAweGIwLCAweDAxLCAweDAwLCAweDA3LCAweDgxLCAweDAwLCAweDQwLCAweDM5LCAweDMzLCAweDAxLCAweDAwLAorCTB4MTgsIDB4MDAsIDB4MmYsIDB4OWIsIDB4ODksIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDcsIDB4ODEsIDB4MDAsIDB4NDAsCisJMHgzNywgMHgzMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZiwgMHg5YSwgMHg4OSwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDA3LCAweDgxLCAweDAwLCAweDQwLCAweDM1LCAweDMzLCAweDAxLCAweDAwLCAweDA4LCAweDAwLCAweDJmLCAweDk5LAorCTB4ODksIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDcsIDB4ODEsIDB4MDAsIDB4NDAsIDB4MzMsIDB4MzMsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHhhZSwgMHg0NywgMHhjOSwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweGYxLCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGNhLCAweGYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MTgsIDB4MDAsIDB4NDAsCisJMHhlMSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDIwLCAweDAwLCAweDAwLCAweGFlLCAweDYzLCAweGRkLCAweDAxLCAweDAwLCAweDAyLCAweDgxLCAweDI4LCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4ODAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwMiwgMHg4MSwgMHg0MiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1YywKKwkweDY5LCAweDkzLCAweDAxLCAweDAwLCAweDZhLCAweDg0LCAweDFhLCAweDQ0LCAweDkzLCAweDkzLCAweDAwLCAweDAwLAorCTB4MDUsIDB4ODEsIDB4NDIsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4ODEsIDB4MDAsIDB4NTgsCisJMHg2OSwgMHg5MywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHhmMCwgMHhkMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweGE0LCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDBjLCAweDgxLCAweGEyLCAweDQwLAorCTB4ZTEsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4NDUsIDB4ZDEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwgMHhlMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MSwKKwkweGUxLCAweGQxLCAweDAxLCAweDAwLCAweDBkLCAweDgxLCAweDM3LCAweDVjLCAweDYxLCAweDMxLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MTEsIDB4ODEsIDB4MjgsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwZSwgMHg4MSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGNhLCAweDYzLCAweGIxLCAweDAxLCAweDAwLCAweDExLCAweDgxLCAweGE4LCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4NmEsIDB4ODQsIDB4MTcsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgxNiwgMHg4MSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgxNiwgMHg4MSwgMHgwMCwgMHhiYiwKKwkweDgxLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDYwLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MTcsIDB4ODEsIDB4YTgsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjYSwgMHg2MywgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDZhLCAweDg0LCAweDI4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDE5LCAweDgxLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4NTAsIDB4OTUsIDB4MDAsIDB4NDAsIDB4NDcsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgxZiwgMHg4MSwgMHgwMCwgMHhiYiwgMHg4NywgMHhiMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHg5NSwgMHgyZiwgMHg0MCwKKwkweDg3LCAweGIwLCAweDAxLCAweDAwLCAweDIxLCAweDgxLCAweDIyLCAweDQwLCAweDk1LCAweDdmLCAweDAwLCAweDAwLAorCTB4NmEsIDB4ODQsIDB4NjAsIDB4NDAsIDB4OTUsIDB4ODMsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MmQsIDB4ZjAsCisJMHg4NCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgyMiwgMHg4MSwgMHgzNiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQyLCAweDYyLCAweGIxLCAweDAxLCAweDAwLCAweDIzLCAweDgxLCAweGE4LCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgyNSwgMHg4MSwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjYSwKKwkweDYzLCAweGIxLCAweDAxLCAweDAwLCAweDI3LCAweDgxLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MTYsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4NmEsIDB4ODQsIDB4MjIsIDB4NDEsCisJMHg0MywgMHg1MSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwMCwgMHhjYSwgMHg5NSwgMHhjYiwgMHgwMSwgMHgwMCwKKwkweDIyLCAweDgxLCAweDAwLCAweDQxLCAweDg1LCAweGMwLCAweDAwLCAweDAwLCAweDJmLCAweDgxLCAweGEyLCAweDQyLAorCTB4NjcsIDB4NmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4NjcsIDB4YjMsIDB4MDEsIDB4MDAsCisJMHgyZiwgMHg4MSwgMHg0MiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDY1LCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDkzLCAweDgzLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MWEsIDB4Y2EsIDB4NjksIDB4OTcsIDB4MDEsIDB4MDAsIDB4NmEsIDB4ODQsIDB4MjYsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgzNCwgMHg4MSwgMHg0MiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDZhLCAweDg0LCAweDFhLCAweDQ0LCAweDkzLCAweDkzLCAweDAwLCAweDAwLCAweDZhLCAweDg0LCAweDIwLCAweDQzLAorCTB4OTUsIDB4NmYsIDB4MDAsIDB4MDAsIDB4NmEsIDB4ODQsIDB4ODAsIDB4Y2EsIDB4NjcsIDB4MzMsIDB4MDAsIDB4MDAsCisJMHg2YSwgMHg4NCwgMHgyMiwgMHg0MCwgMHg2NSwgMHg2ZiwgMHgwMCwgMHgwMCwgMHg2YSwgMHg4NCwgMHgwMCwgMHg2ZiwKKwkweGRiLCAweDkxLCAweDAwLCAweDAwLCAweGMxLCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4MzUsIDB4ODAsIDB4MjIsIDB4NDAsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4NmEsIDB4ODQsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1ZiwgMHg5NSwgMHg5MywgMHgwMSwgMHgwMCwKKwkweDQyLCAweDgxLCAweGEyLCAweDQ0LCAweDIxLCAweDZmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVmLAorCTB4OTUsIDB4ODMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWUsIDB4OTUsIDB4OTMsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1NywgMHg5NSwgMHg5MywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjYSwKKwkweGMzLCAweGIxLCAweDAxLCAweDAwLCAweDQ1LCAweDgxLCAweDIyLCAweDViLCAweDk1LCAweDdmLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGIsIDB4ZmQsIDB4OTMsIDB4MDEsIDB4MDAsIDB4NmEsIDB4ODQsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg0OSwgMHg4MSwgMHgyMiwgMHg0MCwgMHhhZiwgMHg2ZiwgMHgwMCwgMHgwMCwKKwkweDFiLCAweGY1LCAweDAwLCAweGNhLCAweDk1LCAweDliLCAweDAxLCAweDAwLCAweDRhLCAweDgxLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MWIsIDB4ZmQsIDB4MDAsIDB4Y2EsIDB4OTUsIDB4OWIsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhjYSwgMHg3ZiwgMHhiMywgMHgwMSwgMHgwMCwgMHgyNiwgMHgwMSwgMHgwMCwgMHhjYSwKKwkweGM1LCAweDMxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVmLCAweDk1LCAweDgzLCAweDAxLCAweDAwLAorCTB4NmEsIDB4ODQsIDB4MDAsIDB4Y2EsIDB4YzUsIDB4YjEsIDB4MDAsIDB4MDAsIDB4ZGYsIDB4NmYsIDB4MDAsIDB4Y2EsCisJMHg5NSwgMHg5YiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1NSwgMHg5NSwgMHg5MywgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGNhLCAweGM3LCAweGIxLCAweDAxLCAweDAwLCAweDZhLCAweDg0LCAweDIyLCAweDVmLAorCTB4OTUsIDB4N2YsIDB4MDAsIDB4MDAsIDB4MjYsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1ZiwgMHg5NSwgMHg4MywgMHgwMSwgMHgwMCwgMHg2YSwgMHg4NCwgMHgwMCwgMHhjYSwKKwkweGM3LCAweGIxLCAweDAwLCAweDAwLCAweDZhLCAweDg0LCAweDAwLCAweGNhLCAweGM5LCAweGIxLCAweDAwLCAweDAwLAorCTB4NmEsIDB4ODQsIDB4MDAsIDB4Y2EsIDB4Y2IsIDB4YjEsIDB4MDAsIDB4MDAsIDB4NmEsIDB4ODQsIDB4MDAsIDB4Y2EsCisJMHhjZCwgMHhiMSwgMHgwMCwgMHgwMCwgMHg2YSwgMHg4NCwgMHgwMCwgMHhjYSwgMHhjZiwgMHhiMSwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDJlLCAweDQyLCAweDgxLCAweGUwLCAweDAxLCAweDAwLCAweDk4LCAweDE0LCAweDAwLCAweDQwLAorCTB4NDgsIDB4YzksIDB4MDEsIDB4MDAsIDB4NmEsIDB4ODQsIDB4MDAsIDB4Y2EsIDB4ZTEsIDB4YjEsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwOSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHhhNiwKKwkweDgyLCAweGIwLCAweDAxLCAweDAwLCAweDVlLCAweDgxLCAweGEyLCAweDVlLCAweDBiLCAweDdkLCAweDAwLCAweDAwLAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4NDEsIDB4MDgsIDB4OTksIDB4MDEsIDB4MDAsIDB4NjAsIDB4ODEsIDB4YTIsIDB4NWUsCisJMHgwYiwgMHg3ZCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4MCwgMHgwMCwgMHhhNiwgMHgwOCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDYyLCAweDgxLCAweDlmLCAweDg1LCAweDgyLCAweDMwLCAweDAwLCAweDAwLCAweDYxLCAweDgxLCAweGEyLCAweDRmLAorCTB4MGIsIDB4N2QsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MjEsIDB4YjMsIDB4MDEsIDB4MDAsCisJMHgwMiwgMHg4MCwgMHgwMCwgMHhhNiwgMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHhjOSwgMHg4MSwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDQxLCAweDg0LCAweGU0LCAweDAxLCAweDAwLAorCTB4MDMsIDB4ODAsIDB4MDAsIDB4YTYsIDB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YzksIDB4ODEsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhmMCwgMHhmZiwgMHgwMCwgMHg0MSwgMHg4NiwgMHg4OCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQzLCAweDg0LCAweDk0LCAweDAxLCAweDAwLCAweDBmLCAweDAwLCAweDAwLCAweGE2LAorCTB4ODYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MTAsIDB4YzQsIDB4MDAsIDB4NDMsIDB4ODYsIDB4OTgsIDB4MDEsIDB4MDAsCisJMHg3NSwgMHg4MSwgMHhhMiwgMHg0MywgMHg4NCwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywKKwkweDIxLCAweGIzLCAweDAxLCAweDAwLCAweDIwLCAweDAwLCAweDAwLCAweGE2LCAweDgyLCAweGIwLCAweDAxLCAweDAwLAorCTB4MWMsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ODIsIDB4ZGMsIDB4MDEsIDB4MDAsIDB4NzIsIDB4ODEsIDB4YTIsIDB4NWUsCisJMHgwYiwgMHg3ZCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgwOCwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDdlLCAweDgxLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDQxLCAweDAxLCAweDAwLCAweGE2LAorCTB4ODYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NTAsIDB4MGMsIDB4MDAsIDB4NDMsIDB4ODYsIDB4OTgsIDB4MDEsIDB4MDAsCisJMHg3YSwgMHg4MSwgMHhhMiwgMHg0MywgMHg4NCwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKKwkweDIxLCAweGIzLCAweDAxLCAweDAwLCAweDdlLCAweDgxLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4NDEsIDB4MDEsIDB4MDAsIDB4YTYsIDB4ODYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NjAsIDB4MGMsIDB4MDAsIDB4NDMsCisJMHg4NiwgMHg5OCwgMHgwMSwgMHgwMCwgMHg3ZSwgMHg4MSwgMHhhMiwgMHg0MywgMHg4NCwgMHg2YywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQyLCAweDIxLCAweGIzLCAweDAxLCAweDAwLCAweDIwLCAweDAwLCAweDAwLCAweGE2LAorCTB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4N2YsIDB4ODEsIDB4YTIsIDB4NWUsIDB4MGIsIDB4N2QsIDB4MDAsIDB4MDAsCisJMHg0MCwgMHgxMywgMHgwMCwgMHg0MSwgMHgwOCwgMHg5OSwgMHgwMSwgMHgwMCwgMHg4NywgMHg4MSwgMHgyMiwgMHg0MywKKwkweDIxLCAweDZmLCAweDAwLCAweDAwLCAweDIwLCAweDAwLCAweDAwLCAweGE2LCAweDgyLCAweGIwLCAweDAxLCAweDAwLAorCTB4MTIsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ODIsIDB4ZGMsIDB4MDEsIDB4MDAsIDB4ODQsIDB4ODEsIDB4YTIsIDB4NWUsCisJMHgwYiwgMHg3ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHg0MSwgMHgwOCwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDhjLCAweDgxLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDIwLCAweDAwLCAweDAwLCAweGE2LAorCTB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MTksIDB4MDAsIDB4MDAsIDB4NDEsIDB4ODIsIDB4ZGMsIDB4MDEsIDB4MDAsCisJMHg4OSwgMHg4MSwgMHhhMiwgMHg1ZSwgMHgwYiwgMHg3ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMCwgMHgwMCwgMHg0MSwKKwkweDA4LCAweDk5LCAweDAxLCAweDAwLCAweDhjLCAweDgxLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4YTYsCisJMHg4MCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjYSwgMHg4MSwgMHg5NCwgMHgwMSwgMHgwMCwKKwkweDhmLCAweDgxLCAweGEyLCAweDVlLCAweDBiLCAweDdkLCAweDAwLCAweDAwLCAweDZhLCAweDg0LCAweDAwLCAweDQwLAorCTB4MDgsIDB4YjEsIDB4MDAsIDB4MDAsIDB4YzgsIDB4MTQsIDB4MmUsIDB4YmIsIDB4ODUsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHg5MiwgMHg4MSwgMHhhMiwgMHg1ZSwgMHgwYiwgMHg3ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDg3LCAweGIwLCAweDAxLCAweDAwLCAweGExLCAweDgxLCAweDIyLCAweDQzLCAweDIxLCAweDZmLCAweDAwLCAweDAwLAorCTB4YjAsIDB4ODEsIDB4MjIsIDB4NDQsIDB4MjEsIDB4NmYsIDB4MDAsIDB4MDAsIDB4MTEsIDB4ODAsIDB4MDAsIDB4YTYsCisJMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHhjOSwgMHg4MSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweGI4LCAweDgxLCAweDIyLCAweDRhLCAweDgzLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4ODcsIDB4OTAsIDB4MDEsIDB4MDAsIDB4OWMsIDB4ODEsIDB4MjIsIDB4NGQsIDB4ODMsIDB4N2MsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4NywgMHg5MCwgMHgwMSwgMHgwMCwgMHg5ZSwgMHg4MSwgMHgyMiwgMHg0ZiwKKwkweDgzLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQzLCAweDg3LCAweDkwLCAweDAxLCAweDAwLAorCTB4YTAsIDB4ODEsIDB4MjIsIDB4NGUsIDB4ODMsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsCisJMHg4NywgMHg5MCwgMHgwMSwgMHgwMCwgMHhiOCwgMHg4MSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDAxLCAweDgwLCAweDAwLCAweGE2LCAweDgyLCAweGIwLCAweDAxLCAweDAwLCAweGM5LCAweDgxLCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDEsIDB4ODAsIDB4MDAsIDB4YTYsIDB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHhjOSwgMHg4MSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhiOCwgMHg4MSwgMHgyMiwgMHg0MiwKKwkweDgzLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDg3LCAweDkwLCAweDAxLCAweDAwLAorCTB4MWMsIDB4ODAsIDB4MDAsIDB4YTYsIDB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YzksIDB4ODEsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhhYiwgMHg4MSwgMHgyMiwgMHg0NSwgMHg4MywgMHg3YywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDg3LCAweDkwLCAweDAxLCAweDAwLCAweGFkLCAweDgxLCAweDIyLCAweDQ0LAorCTB4ODMsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4ODcsIDB4OTAsIDB4MDEsIDB4MDAsCisJMHhhZiwgMHg4MSwgMHgyMiwgMHg0MywgMHg4MywgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwKKwkweDg3LCAweDkwLCAweDAxLCAweDAwLCAweGI4LCAweDgxLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDEsIDB4ODAsIDB4MDAsIDB4YTYsIDB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YzksIDB4ODEsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMSwgMHg4MCwgMHgwMCwgMHhhNiwgMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweGM5LCAweDgxLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGI4LCAweDgxLCAweDIyLCAweDQyLAorCTB4ODMsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODcsIDB4OTAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywgMHg4NywgMHg5MCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKKwkweDg3LCAweDkwLCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweGE2LCAweDgyLCAweGIwLCAweDAxLCAweDAwLAorCTB4YzksIDB4ODEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4YmMsIDB4ODEsIDB4MjIsIDB4NGIsCisJMHg4MywgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4NywgMHg4MCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQzLCAweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4YWYsIDB4YjMsIDB4MDEsIDB4MDAsIDB4YzUsIDB4ODEsIDB4MjIsIDB4NDAsIDB4ODcsIDB4N2MsIDB4MDAsIDB4MDAsCisJMHhjNSwgMHg4MSwgMHhhMiwgMHg0MSwgMHg4NywgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKKwkweGFlLCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIzLCAweDAxLCAweDAwLAorCTB4YzQsIDB4ODEsIDB4MjIsIDB4NDIsIDB4ODcsIDB4N2MsIDB4MDAsIDB4MDAsIDB4YzUsIDB4ODEsIDB4MDAsIDB4MGIsCisJMHg3ZCwgMHhiMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwZiwgMHg3ZCwgMHhiMywgMHgwMSwgMHgwMCwKKwkweGZmLCAweDdmLCAweDAwLCAweGEyLCAweGEwLCAweDhiLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LAorCTB4YTUsIDB4YjMsIDB4MDEsIDB4MDAsIDB4NzUsIDB4ODAsIDB4MDAsIDB4Y2EsIDB4YTcsIDB4MzMsIDB4MDEsIDB4MDAsCisJMHgwMiwgMHg4MSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHg0MSwKKwkweDgyLCAweGRjLCAweDAxLCAweDAwLCAweGNhLCAweDgxLCAweGEyLCAweDVlLCAweDBiLCAweDdkLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4Y2MsIDB4ODEsIDB4OWYsIDB4ODUsCisJMHg4MiwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKKwkweGQxLCAweDgxLCAweDE0LCAweGY3LCAweDgxLCAweDMwLCAweDAwLCAweDAwLCAweGQxLCAweDgxLCAweGEyLCAweDQ5LAorCTB4ZmQsIDB4N2YsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDgsIDB4ZmQsIDB4OTMsIDB4MDEsIDB4MDAsCisJMHhkNCwgMHg4MSwgMHgxNSwgMHhmOCwgMHg4MSwgMHgxNCwgMHgwMCwgMHgwMCwgMHhkNCwgMHg4MSwgMHhhMiwgMHg0YSwKKwkweGZkLCAweDdmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ4LCAweGZkLCAweDkzLCAweDAxLCAweDAwLAorCTB4ZDYsIDB4ODEsIDB4YTIsIDB4YzgsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MCwgMHhkYywgMHgwMSwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHg0MCwgMHg4MCwgMHhkYywgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGVmLCAweGIzLCAweDAxLCAweDAwLCAweGQ4LCAweDgxLCAweDQyLCAweDQwLAorCTB4ZjEsIDB4MzMsIDB4MDAsIDB4MDAsIDB4MDQsIDB4ODEsIDB4MDAsIDB4NDAsIDB4NjgsIDB4OTcsIDB4MDAsIDB4MDAsCisJMHg2YSwgMHg4NCwgMHgwMCwgMHhiYiwgMHg2YiwgMHhiMywgMHgwMCwgMHgwMCwgMHg2YSwgMHg4NCwgMHgwMCwgMHhiYiwKKwkweGIxLCAweGIzLCAweDAwLCAweDAwLCAweDZhLCAweDg0LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4Y2MsIDB4MTQsIDB4MmUsIDB4NDAsIDB4ODcsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4N2YsIDB4MDAsIDB4YTIsCisJMHhhMCwgMHg4YiwgMHgwMSwgMHgwMCwgMHhkOCwgMHgwMCwgMHgwMCwgMHg0MywgMHhiMiwgMHgzMywgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDY4LCAweGRhLCAweDg5LCAweGIwLCAweDAxLCAweDAwLCAweDdjLCAweDAwLCAweDAwLCAweDQwLAorCTB4OGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4ODksIDB4ZjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4OSwgMHhkMCwgMHgwMSwgMHgwMCwgMHgwMywgMHgwMCwgMHgwMCwgMHg0NCwKKwkweDg4LCAweDhjLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLCAweDg3LCAweGMwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4YTUsIDB4YjMsIDB4MDEsIDB4MDAsIDB4ZDgsIDB4MDAsIDB4MDAsIDB4NDMsCisJMHhiMiwgMHgzMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkYSwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQyLCAweDg3LCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAorCTB4YTUsIDB4YzMsIDB4MDEsIDB4MDAsIDB4ZjgsIDB4ODEsIDB4MjIsIDB4NDQsIDB4ODksIDB4NTAsIDB4MDAsIDB4MDAsCisJMHhmOCwgMHg4MSwgMHgyMiwgMHg0NCwgMHg4YiwgMHg1MCwgMHgwMCwgMHgwMCwgMHhlNywgMHg4MSwgMHhhMiwgMHg1MCwKKwkweGE1LCAweDZmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLCAweGE1LCAweGUzLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4Y2EsIDB4YTcsIDB4YjMsIDB4MDEsIDB4MDAsIDB4NzUsIDB4ODAsIDB4MDAsIDB4YmIsCisJMHg4NSwgMHgzMCwgMHgwMSwgMHgwMCwgMHhjYywgMHgxNCwgMHgyZSwgMHhkMiwgMHg5NSwgMHhjMywgMHgwMSwgMHgwMCwKKwkweGFlLCAweDAzLCAweDAwLCAweGNiLCAweGEzLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDIwLAorCTB4NDIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4ODEsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHhmNSwgMHg4MSwgMHhhMiwgMHg0MSwgMHg4MSwgMHg1MCwgMHgwMCwgMHgwMCwgMHhmNCwgMHg4MSwgMHhhMiwgMHhmMiwKKwkweDgwLCAweDMwLCAweDAwLCAweDAwLCAweGU3LCAweDgxLCAweDAwLCAweDQwLCAweGE1LCAweGIzLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4YTUsIDB4ZTMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4Y2EsCisJMHhhNywgMHhiMywgMHgwMSwgMHgwMCwgMHg3NSwgMHg4MCwgMHgwMCwgMHhiYiwgMHg4NSwgMHgzMCwgMHgwMSwgMHgwMCwKKwkweDAyLCAweDgxLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGQ5LCAweDAwLCAweDAwLCAweDQxLAorCTB4YjMsIDB4NzMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NTAsIDB4YjUsIDB4ZjMsIDB4MDEsIDB4MDAsCisJMHhkOCwgMHgwMCwgMHgwMCwgMHg0MSwgMHhiMywgMHhmMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkOSwKKwkweGIzLCAweGZiLCAweDAxLCAweDAwLCAweDAwLCAweDMwLCAweDAwLCAweGE2LCAweGI4LCAweGIzLCAweDAxLCAweDAwLAorCTB4ZjIsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MjUsIDB4MDEsIDB4MDAsIDB4NDIsCisJMHgyZCwgMHgwMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMiwgMHgwMCwgMHg0MCwgMHg4MywgMHg5OCwgMHgwMSwgMHgwMCwKKwkweGViLCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLAorCTB4ODEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MjYsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHgwOSwgMHg4MiwgMHgxMCwgMHhkYSwgMHhiNSwgMHg2YiwgMHgwMCwgMHgwMCwgMHgwYSwgMHg4MiwgMHgwMCwgMHg0MSwKKwkweDJkLCAweDgxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDJkLCAweDkxLCAweDAxLCAweDAwLAorCTB4MjgsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MjUsIDB4MDEsIDB4MDAsIDB4NDAsCisJMHgyZCwgMHgxMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgyZCwgMHg4MSwgMHgwMSwgMHgwMCwKKwkweDA2LCAweDgyLCAweGEyLCAweDQxLCAweDgxLCAweDUwLCAweDAwLCAweDAwLCAweDI2LCAweDAxLCAweDAwLCAweDQyLAorCTB4MmQsIDB4MDEsIDB4MDEsIDB4MDAsIDB4MjUsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHgyNiwgMHgwMSwgMHgwMCwgMHg0MiwgMHgyZCwgMHgxMSwgMHgwMSwgMHgwMCwgMHgyNSwgMHgwMSwgMHgwMCwgMHg0MCwKKwkweDJkLCAweDExLCAweDAxLCAweDAwLCAweDE1LCAweDgyLCAweDA0LCAweDQwLCAweDJkLCAweDAxLCAweDAwLCAweDAwLAorCTB4MjUsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MTEsIDB4ODIsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgyOCwgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDI1LCAweDAxLCAweDAwLCAweDQyLCAweDJkLCAweDAxLCAweDAxLCAweDAwLCAweGYyLCAweDAwLCAweDAwLCAweDQwLAorCTB4YjksIDB4MzMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4MmQsIDB4ODEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg4MCwgMHg0MSwgMHgyZCwgMHg4MSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAzLCAweDAwLCAweDQwLCAweDgxLCAweDk4LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MTgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MywgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgxOSwgMHgwMCwgMHg0MCwgMHg0NSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDQyLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDQzLCAweGZmLAorCTB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4MSwgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDE4LCAweGIxLCAweDAxLCAweDAwLCAweDFmLCAweDgyLCAweGEyLCAweDQxLCAweDgzLCAweDUwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MTYsIDB4MDAsIDB4NDAsIDB4NDUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MTksIDB4MDAsIDB4NDAsCisJMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywgMHg0MywgMHhjMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDgzLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYzLAorCTB4ODAsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWIsIDB4ODEsIDB4ZDAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4MCwgMHhkMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweGY2LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDViLCAweDQzLCAweGMxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ODMsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MjksIDB4ODIsIDB4YTIsIDB4NTQsCisJMHg4MywgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmNywgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDgzLCAweGMwLCAweDAxLCAweDAwLCAweDMwLCAweDgyLCAweGEyLCAweDA2LAorCTB4ODMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg4MCwgMHgwNywgMHg5MSwgMHhiMCwgMHgwMSwgMHgwMCwgMHhlMSwgMHg4MCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDM5LCAweDgyLCAweGEyLCAweDQwLCAweDk3LCAweDZjLCAweDAwLCAweDAwLAorCTB4MjgsIDB4MDAsIDB4MDAsIDB4NDAsIDB4YjMsIDB4OWIsIDB4MDEsIDB4MDAsIDB4M2EsIDB4ODIsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgyOCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhiMywgMHg5YiwgMHgwMSwgMHgwMCwKKwkweGZjLCAweDgxLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGRhLAorCTB4ZjUsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZmMsIDB4ODEsIDB4MDAsIDB4NDIsIDB4YjMsIDB4NDMsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhkYSwgMHhmNSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhmYywgMHg4MSwgMHgwMCwgMHg0MiwKKwkweGIzLCAweDQzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGRhLCAweGY1LCAweGIxLCAweDAxLCAweDAwLAorCTB4NGUsIDB4MDAsIDB4MDAsIDB4NDAsIDB4YjMsIDB4OWIsIDB4MDEsIDB4MDAsIDB4ZmMsIDB4ODEsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHhkYSwgMHhmNywgMHhmNSwgMHgwMSwgMHgwMCwKKwkweDUwLCAweDAwLCAweDAwLCAweDQwLCAweDkxLCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ3LAorCTB4OGYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ZmMsIDB4ODEsIDB4MDAsIDB4NDgsIDB4YjIsIDB4MzMsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhkYSwgMHhmNywgMHhiMSwgMHgwMSwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHhkYSwKKwkweGY3LCAweGY1LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLCAweDkxLCAweGMwLCAweDAxLCAweDAwLAorCTB4NDUsIDB4ODIsIDB4YTIsIDB4NDEsIDB4OGYsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCisJMHg0NSwgMHhkMSwgMHgwMSwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhiMywgMHg5YiwgMHgwMSwgMHgwMCwKKwkweGZjLCAweDgxLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGRhLAorCTB4ZmQsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MGEsIDB4MDAsIDB4MDAsIDB4NDAsIDB4YjMsIDB4OWIsIDB4MDEsIDB4MDAsCisJMHhmYywgMHg4MSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkYSwKKwkweGZkLCAweGIxLCAweDAxLCAweDAwLCAweDE4LCAweDAwLCAweDAwLCAweDQwLCAweGIzLCAweDliLCAweDAxLCAweDAwLAorCTB4ZmMsIDB4ODEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZGEsCisJMHhmZCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgxNiwgMHgwMCwgMHgwMCwgMHg0MCwgMHhiMywgMHg5YiwgMHgwMSwgMHgwMCwKKwkweGZjLCAweDgxLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGRhLAorCTB4ZmQsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MzQsIDB4ODIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHgxZSwgMHgwMCwgMHgwMCwgMHg0OCwgMHhiMiwgMHhjYiwgMHgwMSwgMHgwMCwgMHhmYywgMHg4MSwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGRhLCAweDkxLCAweGMwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDgsIDB4YjIsIDB4Y2IsIDB4MDEsIDB4MDAsIDB4ZmMsIDB4ODEsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2ZSwgMHhkYSwgMHg4ZiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAyLCAweDAwLCAweDAwLCAweDQ4LCAweGIyLCAweGNiLCAweDAxLCAweDAwLCAweGZjLCAweDgxLCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZGEsIDB4ZmQsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0OCwgMHhiMiwgMHhjYiwgMHgwMSwgMHgwMCwgMHhmYywgMHg4MSwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweGRhLCAweGZkLCAweGIxLCAweDAxLCAweDAwLAorCTB4NmYsIDB4ODIsIDB4MjIsIDB4NTAsIDB4ZmQsIDB4N2YsIDB4MDAsIDB4MDAsIDB4NmYsIDB4ODIsIDB4MjIsIDB4NDUsCisJMHhmZCwgMHg3ZiwgMHgwMCwgMHgwMCwgMHg0MCwgMHgxNiwgMHgwMCwgMHg0MCwgMHg0NSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDM1LCAweDgyLCAweDAwLCAweDQwLCAweDQ5LCAweDMxLCAweDAxLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDQ4LAorCTB4YjIsIDB4Y2IsIDB4MDEsIDB4MDAsIDB4ZmUsIDB4ODEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHg2ZCwgMHg4MiwgMHhhMiwgMHg0MCwgMHg4ZiwgMHg2YywgMHgwMCwgMHgwMCwgMHg3MiwgMHg4MiwgMHgyMiwgMHgyMCwKKwkweGI1LCAweDZmLCAweDAwLCAweDAwLCAweDZmLCAweDgyLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4ZGIsIDB4ODIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4NzIsIDB4ODIsIDB4MjIsIDB4NDAsCisJMHg5NywgMHg2YywgMHgwMCwgMHgwMCwgMHg2ZiwgMHg4MiwgMHg0MiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDRmLCAweDY5LCAweDkzLCAweDAxLCAweDAwLCAweDA0LCAweDgxLCAweDAwLCAweDU4LAorCTB4NjksIDB4OTMsIDB4MDAsIDB4MDAsIDB4NTQsIDB4MTYsIDB4MDAsIDB4NDAsIDB4NDcsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmZSwgMHhmNCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZlLCAweGY0LCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmUsCisJMHhmNCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGZlLCAweGY0LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmUsIDB4ZjQsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmZSwKKwkweGY0LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZmUsIDB4ZjQsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDYsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHhiMywgMHg5YiwgMHgwMSwgMHgwMCwgMHhmYywgMHg4MSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDA4LCAweDAwLCAweDAwLCAweGRhLCAweGY3LCAweGY1LCAweDAxLCAweDAwLCAweDQ4LCAweDAwLCAweDAwLCAweDQwLAorCTB4OTUsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4OTcsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHhmYywgMHg4MSwgMHgwMCwgMHg0YSwgMHhiMiwgMHgzMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkYSwKKwkweGY3LCAweGIxLCAweDAxLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweGRhLCAweGY3LCAweGY1LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4OTUsIDB4YzAsIDB4MDEsIDB4MDAsIDB4ODUsIDB4ODIsIDB4YTIsIDB4NDEsCisJMHg5NywgMHg1MCwgMHgwMCwgMHgwMCwgMHgyYSwgMHgwMCwgMHgwMCwgMHg0MCwgMHhhNSwgMHg5YiwgMHgwMSwgMHgwMCwKKwkweDQwLCAweDE2LCAweDAwLCAweDQwLCAweGExLCAweDliLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGNhLAorCTB4YTcsIDB4YjMsIDB4MDEsIDB4MDAsIDB4NzUsIDB4ODAsIDB4MDAsIDB4YmIsIDB4ODUsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHgwMiwgMHg4MSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhhNywgMHg4MiwgMHgyMiwgMHg0NSwKKwkweGZkLCAweDdmLCAweDAwLCAweDAwLCAweGUwLCAweDE1LCAweDAwLCAweDQwLCAweDQ3LCAweDk5LCAweDAxLCAweDAwLAorCTB4MWEsIDB4MDAsIDB4MDAsIDB4YTIsIDB4ODAsIDB4ZGMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsCisJMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhmMCwgMHgxNSwgMHgwMCwgMHg0MCwgMHhmMSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGNhLCAweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDA3LCAweDAwLCAweDAwLCAweDQwLAorCTB4NjEsIDB4OTksIDB4MDEsIDB4MDAsIDB4YTAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCisJMHg5NiwgMHg4MiwgMHhhOCwgMHhiYiwgMHhlMSwgMHgzMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwKKwkweDgzLCAweGIwLCAweDAxLCAweDAwLCAweDk5LCAweDgyLCAweGEyLCAweDQxLCAweDgzLCAweDUwLCAweDAwLCAweDAwLAorCTB4OTgsIDB4ODIsIDB4YTIsIDB4ZjIsIDB4ODIsIDB4MzAsIDB4MDAsIDB4MDAsIDB4ZTEsIDB4ODAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHg5ZiwgMHg4MiwgMHhhMiwgMHg0MCwgMHg5NywgMHg2YywgMHgwMCwgMHgwMCwKKwkweDI4LCAweDAwLCAweDAwLCAweDQwLCAweGIzLCAweDliLCAweDAxLCAweDAwLCAweGEwLCAweDgyLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MjgsIDB4MDAsIDB4MDAsIDB4NDAsIDB4YjMsIDB4OWIsIDB4MDEsIDB4MDAsCisJMHhmMCwgMHgxNSwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHhmYywgMHg4MSwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGE3LCAweDgyLCAweGEyLCAweGZhLCAweGI0LCAweDZmLCAweDAwLCAweDAwLAorCTB4ZmMsIDB4ODEsIDB4MDAsIDB4NDIsIDB4YjMsIDB4NDMsIDB4MDEsIDB4MDAsIDB4YTcsIDB4ODIsIDB4YTIsIDB4ZmEsCisJMHhiNCwgMHg2ZiwgMHgwMCwgMHgwMCwgMHhmYywgMHg4MSwgMHgwMCwgMHg0MiwgMHhiMywgMHg0MywgMHgwMSwgMHgwMCwKKwkweGFhLCAweDgyLCAweDIyLCAweGZhLCAweGI0LCAweDZmLCAweDAwLCAweDAwLCAweGE3LCAweDgyLCAweDQyLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGUsIDB4NjksIDB4OTMsIDB4MDEsIDB4MDAsCisJMHgwNCwgMHg4MSwgMHgwMCwgMHg1OCwgMHg2OSwgMHg5MywgMHgwMCwgMHgwMCwgMHg0MCwgMHgxNiwgMHgwMCwgMHg0MCwKKwkweDQ1LCAweDk5LCAweDAxLCAweDAwLCAweDM1LCAweDgyLCAweDAwLCAweDQwLCAweDQ5LCAweDMxLCAweDAxLCAweDAwLAorCTB4ZjYsIDB4MTUsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4NWMsIDB4MTYsIDB4MDAsIDB4NDAsCisJMHg0NSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2ZSwgMHhmYSwgMHg4ZSwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZlLAorCTB4ZjQsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmZSwgMHhmNCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLCAweGI0LCAweGIzLCAweDAxLCAweDAwLAorCTB4YjgsIDB4ODIsIDB4YTIsIDB4NDAsIDB4OGYsIDB4NmMsIDB4MDAsIDB4MDAsIDB4ZmMsIDB4MTUsIDB4MjAsIDB4MjAsCisJMHhlMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhiZCwgMHg4MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweGRiLCAweDgyLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGJkLCAweDgyLCAweDIyLCAweDQwLAorCTB4OTcsIDB4NmMsIDB4MDAsIDB4MDAsIDB4YmEsIDB4ODIsIDB4NDIsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZiwgMHg2OSwgMHg5MywgMHgwMSwgMHgwMCwgMHgwNCwgMHg4MSwgMHgwMCwgMHg1OCwKKwkweDY5LCAweDkzLCAweDAwLCAweDAwLCAweDM0LCAweDgyLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4MWUsIDB4MDAsIDB4MDAsIDB4NDgsIDB4YjIsIDB4Y2IsIDB4MDEsIDB4MDAsIDB4ZmMsIDB4ODEsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhjMiwgMHg4MiwgMHgyMiwgMHg1MCwgMHhiNSwgMHg2ZiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDUwLCAweDkxLCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ4LAorCTB4YjIsIDB4Y2IsIDB4MDEsIDB4MDAsIDB4ZjYsIDB4MTUsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsCisJMHhmZiwgMHg4MSwgMHgwMCwgMHhmMiwgMHhiNCwgMHgzMywgMHgwMSwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg0OCwKKwkweGIyLCAweGNiLCAweDAxLCAweDAwLCAweGY4LCAweDE1LCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLAorCTB4ZmYsIDB4ODEsIDB4MDAsIDB4ZjIsIDB4YjQsIDB4MzMsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDgsCisJMHhiMiwgMHhjYiwgMHgwMSwgMHgwMCwgMHhmYSwgMHgxNSwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwKKwkweGZmLCAweDgxLCAweDAwLCAweGYyLCAweGI0LCAweDMzLCAweDAxLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDQ4LAorCTB4YjIsIDB4Y2IsIDB4MDEsIDB4MDAsIDB4ZmMsIDB4MTUsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHg5NCwgMHhiMCwgMHgwMSwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHg0YSwKKwkweGI0LCAweDhiLCAweDAxLCAweDAwLCAweGZmLCAweDgxLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4MGEsIDB4MDAsIDB4MDAsIDB4NDgsIDB4YjIsIDB4Y2IsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4NGEsCisJMHhiNCwgMHhmNywgMHgwMSwgMHgwMCwgMHhmZiwgMHg4MSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDM0LCAweDgyLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDFlLCAweDAwLCAweDAwLCAweDQ4LAorCTB4YjIsIDB4Y2IsIDB4MDEsIDB4MDAsIDB4ZmMsIDB4ODEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHhkOCwgMHg4MiwgMHgyMiwgMHg1MCwgMHhiNSwgMHg2ZiwgMHgwMCwgMHgwMCwgMHhkOSwgMHg4MiwgMHgwMCwgMHg1MCwKKwkweGI1LCAweGIzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGI1LCAweGIzLCAweDAxLCAweDAwLAorCTB4ZmYsIDB4ODEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDIsIDB4ODEsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNiwgMHgwMCwgMHg0MCwgMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDMwLCAweDMxLCAweDAwLCAweDQwLCAweGY1LCAweDk5LCAweDAxLCAweDAwLCAweDMyLCAweDMzLCAweDAwLCAweDQwLAorCTB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MzQsIDB4MzUsIDB4MDAsIDB4NDAsIDB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgzNiwgMHgzNywgMHgwMCwgMHg0MCwgMHhmNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgzOCwgMHgzOSwgMHgwMCwgMHg0MCwKKwkweGY1LCAweDk5LCAweDAxLCAweDAwLCAweDQxLCAweDQyLCAweDAwLCAweDQwLCAweGY1LCAweDk5LCAweDAxLCAweDAwLAorCTB4NDMsIDB4NDQsIDB4MDAsIDB4NDAsIDB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsIDB4NDUsIDB4NDYsIDB4MDAsIDB4NDAsCisJMHhmNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHg0NywgMHg0OCwgMHgwMCwgMHg0MCwgMHhmNSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDQ5LCAweDRhLCAweDAwLCAweDQwLCAweGY1LCAweDk5LCAweDAxLCAweDAwLCAweDJjLCAweDAwLCAweDAwLCAweDQwLAorCTB4ODMsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjcsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHhlNywgMHg4MiwgMHhhMiwgMHg0MSwgMHg4MywgMHg1MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgxNiwgMHgyZSwgMHgwNiwKKwkweDgzLCAweGIwLCAweDAxLCAweDAwLCAweDM2LCAweDAwLCAweDAwLCAweGZiLCAweGY2LCAweGE5LCAweDAxLCAweDAwLAorCTB4ZWEsIDB4ODIsIDB4YTIsIDB4NDEsIDB4ODMsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MjIsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MywgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmYiwgMHhmNiwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweGVkLCAweDgyLCAweGEyLCAweDQxLCAweDgzLCAweDUwLCAweDAwLCAweDAwLCAweDYyLCAweDAwLCAweDAwLCAweDQwLAorCTB4OTUsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ODMsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgxNiwgMHgyZCwgMHgwNiwgMHg4MywgMHhiMCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgxNiwgMHgwMCwgMHg0MCwKKwkweDQ1LCAweDk5LCAweDAxLCAweDAwLCAweDVjLCAweDAwLCAweDAwLCAweGZiLCAweGY2LCAweGE5LCAweDAxLCAweDAwLAorCTB4ZjMsIDB4ODIsIDB4YTIsIDB4NDEsIDB4ODMsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzAsCisJMHhmOSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3MSwgMHhmOSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDcyLCAweGY5LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDczLAorCTB4ZjksIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzQsIDB4ZjksIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg1NCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg5NSwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MywgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDcwLCAweDk1LCAweGIwLCAweDAxLCAweDAwLAorCTB4ZmYsIDB4ODIsIDB4MjIsIDB4NzAsIDB4YjUsIDB4NmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDEsCisJMHg5NywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwgMHg5NywgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDQ1LCAweDY3LCAweDAwLCAweGE2LCAweGUwLCAweGIyLCAweDAxLCAweDAwLCAweDAxLCAweDIzLCAweDAwLCAweDcwLAorCTB4ZTEsIDB4OWEsIDB4MDEsIDB4MDAsIDB4Y2QsIDB4ZWYsIDB4MDAsIDB4YTYsIDB4ZTIsIDB4YjIsIDB4MDEsIDB4MDAsCisJMHg4OSwgMHhhYiwgMHgwMCwgMHg3MSwgMHhlMywgMHg5YSwgMHgwMSwgMHgwMCwgMHhiYSwgMHg5OCwgMHgwMCwgMHhhNiwKKwkweGU0LCAweGIyLCAweDAxLCAweDAwLCAweGZlLCAweGRjLCAweDAwLCAweDcyLCAweGU1LCAweDlhLCAweDAxLCAweDAwLAorCTB4MzIsIDB4MTAsIDB4MDAsIDB4YTYsIDB4ZTYsIDB4YjIsIDB4MDEsIDB4MDAsIDB4NzYsIDB4NTQsIDB4MDAsIDB4NzMsCisJMHhlNywgMHg5YSwgMHgwMSwgMHgwMCwgMHhkMiwgMHhjMywgMHgwMCwgMHhhNiwgMHhlOCwgMHhiMiwgMHgwMSwgMHgwMCwKKwkweGYwLCAweGUxLCAweDAwLCAweDc0LCAweGU5LCAweDlhLCAweDAxLCAweDAwLCAweDgwLCAweDE2LCAweDAwLCAweDRhLAorCTB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4ODEsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0YSwgMHg4MCwgMHhkMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweGY3LCAweGIxLCAweDAxLCAweDAwLCAweDBkLCAweDgzLCAweGEyLCAweDQxLCAweDgxLCAweDUwLCAweDAwLCAweDAwLAorCTB4ODAsIDB4MTYsIDB4MDAsIDB4NGEsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4ZmMsIDB4MTYsIDB4MmEsIDB4NDcsCisJMHhlNywgMHhiNSwgMHgwMSwgMHgwMCwgMHgwMywgMHgwMCwgMHgwMCwgMHg0YSwgMHhlOCwgMHhlNSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDhkLCAweGIwLCAweDAxLCAweDAwLCAweDUwLCAweDAzLCAweDAwLCAweDQwLAorCTB4YTMsIDB4OTksIDB4MDEsIDB4MDAsIDB4ODAsIDB4MTYsIDB4M2QsIDB4NDYsIDB4OGQsIDB4ZTAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHg4OSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmYywKKwkweDQwLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweGEzLCAweGMxLCAweDAxLCAweDAwLAorCTB4MTYsIDB4ODMsIDB4YTIsIDB4NDEsIDB4ODksIDB4NTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzAsCisJMHhlYiwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3MSwgMHhlZCwgMHhiMiwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDcyLCAweGVmLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDczLAorCTB4ZjEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzQsIDB4ZjMsIDB4YjIsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwZiwgMHgwMCwgMHgwMCwgMHg0MSwKKwkweDgwLCAweDg4LCAweDAxLCAweDAwLCAweDUwLCAweDAzLCAweDAwLCAweDQwLCAweGEyLCAweGM5LCAweDAxLCAweDAwLAorCTB4MzMsIDB4ODMsIDB4YTAsIDB4NTAsIDB4ODMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MGQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg5OCwgMHhjOCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZiwgMHg5OSwgMHg4NCwgMHgwMSwgMHgwMCwKKwkweDUwLCAweDAzLCAweDAwLCAweDRjLCAweGEyLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDIwLAorCTB4ODYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4NDAsIDB4OTgsIDB4YzgsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZiwgMHg5OSwgMHg4NCwgMHgwMSwgMHgwMCwgMHg1MCwgMHgwMywgMHgwMCwgMHg0YywKKwkweGEyLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDIwLCAweDg2LCAweGE0LCAweDAxLCAweDAwLAorCTB4MDIsIDB4MDAsIDB4MDAsIDB4NDAsIDB4OTgsIDB4YzgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGYsCisJMHg5OSwgMHg4NCwgMHgwMSwgMHgwMCwgMHg1MCwgMHgwMywgMHgwMCwgMHg0YywgMHhhMiwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDIwLCAweDg2LCAweGE0LCAweDAxLCAweDAwLCAweDUwLCAweDAzLCAweDAwLCAweDQwLAorCTB4YTIsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4NDAsIDB4YTQsIDB4MDEsIDB4MDAsCisJMHgwMSwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4OCwgMHhlNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1ZiwKKwkweDQxLCAweGYwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDQwLCAweDk0LCAweDAxLCAweDAwLAorCTB4MDUsIDB4MDAsIDB4MDAsIDB4NzUsIDB4ODksIDB4ZTQsIDB4MDEsIDB4MDAsIDB4MWIsIDB4MDAsIDB4MDAsIDB4NzUsCisJMHg4NSwgMHhmNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg4NCwgMHg5NCwgMHgwMSwgMHgwMCwKKwkweDNkLCAweDgzLCAweGEzLCAweDUzLCAweDgzLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc2LAorCTB4ODksIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzcsIDB4ODksIDB4ODQsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg3NiwgMHg4YiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDhiLCAweGE0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweDhiLCAweDg0LCAweDAxLCAweDAwLAorCTB4NGMsIDB4ODMsIDB4MDAsIDB4NDUsIDB4ODgsIDB4OTQsIDB4MDAsIDB4MDAsIDB4MjcsIDB4MDAsIDB4MDAsIDB4NDEsCisJMHg4MCwgMHhjZSwgMHgwMSwgMHgwMCwgMHg0MiwgMHg4MywgMHhhYSwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDc2LCAweDg5LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc3LAorCTB4ODksIDB4YTQsIDB4MDEsIDB4MDAsIDB4NGMsIDB4ODMsIDB4MDAsIDB4NzgsIDB4ODksIDB4YTQsIDB4MDAsIDB4MDAsCisJMHgzYiwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4MCwgMHhjZSwgMHgwMSwgMHgwMCwgMHgzZiwgMHg4MywgMHhhYSwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc2LCAweDg5LCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NzcsIDB4ODksIDB4ODQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzYsCisJMHg4YiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3OCwgMHg4YiwgMHg4NCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweDg4LCAweDk0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc3LAorCTB4OGIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzgsIDB4OGIsIDB4ODQsIDB4MDEsIDB4MDAsCisJMHg0YywgMHg4MywgMHgwMCwgMHg0NSwgMHg4OCwgMHg5NCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwKKwkweDg0LCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc5LCAweDg1LCAweGMwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODQsIDB4YzAsIDB4MDEsIDB4MDAsIDB4NTMsIDB4ODMsIDB4YTMsIDB4NTMsCisJMHg4MywgMHg2YywgMHgwMCwgMHgwMCwgMHg4MiwgMHg1YSwgMHgwMCwgMHhhNiwgMHg4NCwgMHhjMCwgMHgwMSwgMHgwMCwKKwkweDk5LCAweDc5LCAweDAwLCAweDQyLCAweDg0LCAweGM4LCAweDAxLCAweDAwLCAweDYwLCAweDgzLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MjcsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ODAsIDB4Y2UsIDB4MDEsIDB4MDAsCisJMHg1OCwgMHg4MywgMHhhYSwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhkOSwgMHg2ZSwgMHgwMCwgMHhhNiwKKwkweDg0LCAweGMwLCAweDAxLCAweDAwLCAweGExLCAweGViLCAweDAwLCAweDQyLCAweDg0LCAweGM4LCAweDAxLCAweDAwLAorCTB4NjAsIDB4ODMsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4M2IsIDB4MDAsIDB4MDAsIDB4NDEsCisJMHg4MCwgMHhjZSwgMHgwMSwgMHgwMCwgMHg1ZCwgMHg4MywgMHhhYSwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDFiLCAweDhmLCAweDAwLCAweGE2LCAweDg0LCAweGMwLCAweDAxLCAweDAwLCAweGRjLCAweGJjLCAweDAwLCAweDQyLAorCTB4ODQsIDB4YzgsIDB4MDEsIDB4MDAsIDB4NjAsIDB4ODMsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHg2MiwgMHhjYSwgMHgwMCwgMHhhNiwgMHg4NCwgMHhjMCwgMHgwMSwgMHgwMCwgMHhkNiwgMHhjMSwgMHgwMCwgMHg0MiwKKwkweDg0LCAweGM4LCAweDAxLCAweDAwLCAweDYwLCAweDgzLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NzgsIDB4ZjMsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzcsCisJMHhmMSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgxZSwgMHgwMCwgMHgwMCwgMHg3NiwgMHg4OSwgMHhlNCwgMHgwMSwgMHgwMCwKKwkweDAyLCAweDAwLCAweDAwLCAweDc2LCAweGVmLCAweGY2LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LAorCTB4ZWUsIDB4OTYsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzUsIDB4ZWQsIDB4YjIsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHhlYSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKKwkweDgzLCAweGMwLCAweDAxLCAweDAwLCAweDRmLCAweDAwLCAweDAwLCAweDQxLCAweDgwLCAweGNlLCAweDAxLCAweDAwLAorCTB4MWYsIDB4ODMsIDB4MmEsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzUsCisJMHhlMSwgMHhjMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3NiwgMHhlMywgMHhjMiwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDc3LCAweGU1LCAweGMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LAorCTB4ZTcsIDB4YzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzksIDB4ZTksIDB4YzIsIDB4MDEsIDB4MDAsCisJMHgxMywgMHg4MywgMHg4MSwgMHg0MSwgMHg4ZCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDlkLCAweDgzLCAweGEyLCAweDRiLCAweGI3LCAweDZmLCAweDAwLCAweDAwLAorCTB4OWQsIDB4ODMsIDB4YTIsIDB4NDEsIDB4MmYsIDB4N2QsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsCisJMHhmZCwgMHg5MywgMHgwMSwgMHgwMCwgMHg0MCwgMHgxNiwgMHgwMCwgMHg0MCwgMHg0NSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDM1LCAweDgyLCAweDAwLCAweDQwLCAweDQ5LCAweDMxLCAweDAxLCAweDAwLCAweDljLCAweDgzLCAweDIyLCAweDQwLAorCTB4OGYsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4NDgsIDB4YjIsIDB4Y2IsIDB4MDEsIDB4MDAsCisJMHhmZSwgMHg4MSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhkYiwgMHg4MiwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDljLCAweDgzLCAweGEyLCAweDQwLCAweDk3LCAweDZjLCAweDAwLCAweDAwLAorCTB4NWUsIDB4MTYsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4N2MsIDB4MTYsIDB4MjAsIDB4ZjYsCisJMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgzMSwgMHhiMywgMHgwMSwgMHgwMCwKKwkweDgwLCAweDgzLCAweDIyLCAweDRmLCAweDhmLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUxLAorCTB4ZmQsIDB4OTMsIDB4MDEsIDB4MDAsIDB4ODIsIDB4ODMsIDB4MjIsIDB4NDAsIDB4OGYsIDB4N2MsIDB4MDAsIDB4MDAsCisJMHg4NiwgMHg4MywgMHgwMCwgMHg1NCwgMHhmZCwgMHg5MywgMHgwMCwgMHgwMCwgMHg4NCwgMHg4MywgMHgyMiwgMHg0MiwKKwkweDhmLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUyLCAweGZkLCAweDkzLCAweDAxLCAweDAwLAorCTB4ODYsIDB4ODMsIDB4MjIsIDB4NDEsIDB4OGYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTMsCisJMHhmZCwgMHg5MywgMHgwMSwgMHgwMCwgMHg5YSwgMHg4MywgMHgyMiwgMHg1MSwgMHhmZCwgMHg3ZiwgMHgwMCwgMHgwMCwKKwkweDM0LCAweDgyLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDBjLCAweDAwLCAweDAwLCAweDQ4LAorCTB4YjIsIDB4Y2IsIDB4MDEsIDB4MDAsIDB4ZmMsIDB4ODEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHg5NSwgMHg4MywgMHhhMiwgMHg0MCwgMHhiNSwgMHg2ZiwgMHgwMCwgMHgwMCwgMHgxZSwgMHgwMCwgMHgwMCwgMHg0OCwKKwkweGIyLCAweGNiLCAweDAxLCAweDAwLCAweGZjLCAweDgxLCAweDAwLCAweDQ4LCAweDk2LCAweDMwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZGEsIDB4OTcsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NGIsCisJMHhiMiwgMHhjYiwgMHgwMSwgMHgwMCwgMHhmYywgMHg4MSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDBlLCAweDAwLCAweDAwLCAweDQ4LCAweGIyLCAweGNiLCAweDAxLCAweDAwLCAweGZmLCAweDgxLCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MGMsIDB4MDAsIDB4MDAsIDB4NDgsIDB4YjIsIDB4Y2IsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgzMCwgMHhiNSwgMHhiMywgMHgwMSwgMHgwMCwgMHhmZiwgMHg4MSwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDBlLCAweDAwLCAweDAwLCAweDQ4LCAweGIyLCAweGNiLCAweDAxLCAweDAwLAorCTB4ZmMsIDB4ODEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4OTksIDB4ODMsIDB4MjIsIDB4NDAsCisJMHhiNSwgMHg2ZiwgMHgwMCwgMHgwMCwgMHg5ZCwgMHg4MywgMHgwMCwgMHg1NCwgMHhmZCwgMHg5MywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDUxLCAweGZkLCAweDgzLCAweDAxLCAweDAwLCAweDFjLCAweDAwLCAweDAwLCAweGZlLAorCTB4N2YsIDB4ZDksIDB4MDEsIDB4MDAsIDB4OWQsIDB4ODMsIDB4YTYsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1NSwgMHhmZCwgMHg5MywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweGI2LCAweDAzLCAweDAwLCAweDQwLCAweGExLCAweDk5LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MmYsIDB4NDEsIDB4OTksIDB4YjMsIDB4MDEsIDB4MDAsIDB4YTgsIDB4ODMsIDB4MjIsIDB4NDQsCisJMHg4MSwgMHg2YywgMHgwMCwgMHgwMCwgMHhiMCwgMHg4MywgMHgyMiwgMHg0OCwgMHg4MSwgMHg2YywgMHgwMCwgMHgwMCwKKwkweGFhLCAweDgzLCAweDIyLCAweDRjLCAweDgxLCAweDZjLCAweDAwLCAweDAwLCAweGI0LCAweDgzLCAweDIyLCAweDUwLAorCTB4ODEsIDB4NmMsIDB4MDAsIDB4MDAsIDB4YjUsIDB4ODMsIDB4MjIsIDB4NTQsIDB4ODEsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHhiNywgMHg4MywgMHgyMiwgMHg1OCwgMHg4MSwgMHg2YywgMHgwMCwgMHgwMCwgMHhiYywgMHg4MywgMHgyMiwgMHg1YywKKwkweDgxLCAweDZjLCAweDAwLCAweDAwLCAweDU1LCAweDAxLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4YmMsIDB4MDksIDB4YjAsIDB4MDEsIDB4MDAsIDB4NmEsIDB4ODQsIDB4MDAsIDB4Y2EsCisJMHgwMSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwMywgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweGYzLCAweDgzLCAweDAxLCAweDAwLCAweGFlLCAweDgzLCAweGEyLCAweDQyLAorCTB4MDUsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MDUsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHg2YSwgMHg4NCwgMHgyMiwgMHhjYSwgMHgwNywgMHgxNCwgMHgwMCwgMHgwMCwgMHg2YSwgMHg4NCwgMHgwMCwgMHg0NSwKKwkweGYzLCAweDkzLCAweDAwLCAweDAwLCAweDZhLCAweDg0LCAweDIwLCAweDQzLCAweDk1LCAweDZmLCAweDAwLCAweDAwLAorCTB4NmEsIDB4ODQsIDB4ODAsIDB4Y2EsIDB4MDUsIDB4MzAsIDB4MDAsIDB4MDAsIDB4NmEsIDB4ODQsIDB4MjIsIDB4MDEsCisJMHg4MCwgMHgzMCwgMHgwMCwgMHgwMCwgMHg2YSwgMHg4NCwgMHgwMCwgMHhjYiwgMHhkYiwgMHg5MSwgMHgwMCwgMHgwMCwKKwkweDVjLCAweDAxLCAweDAwLCAweGJjLCAweGFiLCAweGIzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGJjLAorCTB4YjEsIDB4YjMsIDB4MDEsIDB4MDAsIDB4NmEsIDB4ODQsIDB4MDAsIDB4Y2EsIDB4Y2YsIDB4YjMsIDB4MDAsIDB4MDAsCisJMHhmZiwgMHgwMCwgMHgwMCwgMHhjYSwgMHg4MSwgMHg4OCwgMHgwMSwgMHgwMCwgMHg2YSwgMHg4NCwgMHhhMiwgMHg0MCwKKwkweDc0LCAweDdkLCAweDAwLCAweDAwLCAweDYwLCAweDAwLCAweDIwLCAweDQwLCAweDYwLCAweDk5LCAweDAxLCAweDAwLAorCTB4YjksIDB4ODMsIDB4YTgsIDB4YjEsIDB4ODIsIDB4MzAsIDB4MDAsIDB4MDAsIDB4YjgsIDB4ODMsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg2YSwgMHg4NCwgMHgwMCwgMHhjYSwgMHg3OSwgMHhiMywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDRlLCAweDgxLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQzLAorCTB4Y2IsIDB4ODMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCisJMHhiZiwgMHg4MywgMHhhMiwgMHg0MSwgMHg4MSwgMHg1MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAorCTB4Y2EsIDB4ODMsIDB4OTEsIDB4ODIsIDB4ODIsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OGEsCisJMHg4MCwgMHhiMCwgMHgwMSwgMHgwMCwgMHhiNiwgMHg5ZiwgMHgwMCwgMHg0MCwgMHg4MCwgMHhjZSwgMHgwMSwgMHgwMCwKKwkweGM4LCAweDgzLCAweGE2LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweGNhLCAweDgzLCAweDU2LCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4YjYsIDB4MDMsIDB4MDAsIDB4NDAsIDB4YTEsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1MywgMHgwNywgMHg5MCwgMHgwMSwgMHgwMCwgMHhiNiwgMHgwMywgMHgwMCwgMHg0MCwKKwkweGExLCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUyLCAweDA3LCAweDkwLCAweDAxLCAweDAwLAorCTB4ZjMsIDB4OWYsIDB4MDAsIDB4NDEsIDB4OGIsIDB4YjMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGUsCisJMHg4MSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHhjZCwgMHg4MywgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDQ2LCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweGNmLCAweDgzLCAweGEyLCAweDQxLAorCTB4ODEsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg0NiwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHhkYSwgMHg4MywgMHg5MSwgMHg4MSwKKwkweDgyLCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDg5LCAweDgwLCAweGIwLCAweDAxLCAweDAwLAorCTB4YjYsIDB4OWYsIDB4MDAsIDB4NDAsIDB4ODAsIDB4Y2UsIDB4MDEsIDB4MDAsIDB4ZDgsIDB4ODMsIDB4YTYsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhkYSwgMHg4MywgMHg1NSwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweGI2LCAweDAzLCAweDAwLCAweDQwLCAweGExLCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUyLAorCTB4MDcsIDB4OTAsIDB4MDEsIDB4MDAsIDB4YjYsIDB4MDMsIDB4MDAsIDB4NDAsIDB4YTEsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1MywgMHgwNywgMHg5MCwgMHgwMSwgMHgwMCwgMHhmMywgMHg5ZiwgMHgwMCwgMHg0MSwKKwkweDhiLCAweGIzLCAweDAwLCAweDAwLCAweGIxLCAweDAzLCAweDAwLCAweDQwLCAweGExLCAweDk5LCAweDAxLCAweDAwLAorCTB4YzQsIDB4MTQsIDB4MmYsIDB4NDAsIDB4OTksIDB4YjMsIDB4MDEsIDB4MDAsIDB4NWMsIDB4MDEsIDB4MDAsIDB4NDAsCisJMHg0OSwgMHhiMSwgMHgwMCwgMHgwMCwgMHg1OCwgMHgxNSwgMHgyZCwgMHg0MCwgMHg4ZCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweGQwLCAweDE0LCAweDJkLCAweGYwLCAweDg4LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4OGYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4YTYsIDB4OTAsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHhmOCwgMHgwMCwgMHg0OCwgMHg5MCwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwKKwkweDkzLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZhLCAweDhhLCAweGIwLCAweDAxLCAweDAwLAorCTB4NmEsIDB4MDMsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4YTYsCisJMHg4MCwgMHhiMCwgMHgwMSwgMHgwMCwgMHhlYywgMHg4MywgMHgyMiwgMHg0MCwgMHg4MiwgMHg2YywgMHgwMCwgMHgwMCwKKwkweGYwLCAweDgzLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDQ3LCAweDAzLCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4OGQsIDB4YzAsIDB4MDEsIDB4MDAsCisJMHhmNSwgMHg4MywgMHgyMiwgMHg1ZiwgMHg4ZCwgMHg2YywgMHgwMCwgMHgwMCwgMHhlNywgMHg4MywgMHhhMiwgMHg0MSwKKwkweDkzLCAweDUwLCAweDAwLCAweDAwLCAweGU1LCAweDgzLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4ZmYsIDB4MDcsIDB4MDAsIDB4NDcsIDB4ODQsIDB4ODgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTYsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhmNSwgMHg5ZiwgMHgwMCwgMHg0NywgMHg4MCwgMHgzMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAyLCAweDAwLCAweDQ3LCAweDhlLCAweGM4LCAweDAxLCAweDAwLCAweGYwLCAweDgzLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4NTAsIDB4YjMsIDB4MDEsIDB4MDAsCisJMHhmYiwgMHg4MywgMHgyMCwgMHgxOCwgMHg4OSwgMHg2YywgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHhhNiwKKwkweDg0LCAweGIwLCAweDAxLCAweDAwLCAweDIwLCAweDAwLCAweDAwLCAweGE2LCAweDg2LCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MTAsIDB4MDAsIDB4NDAsIDB4NTUsIDB4OWIsIDB4MDEsIDB4MDAsIDB4ZmUsIDB4ODMsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHhhNiwgMHg4NCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDIwLCAweDAwLCAweDAwLCAweGE2LCAweDg2LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDEwLCAweDAwLCAweDQwLAorCTB4NTUsIDB4OWIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4NTAsIDB4ZDMsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhhOCwgMHg0ZiwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywKKwkweDRlLCAweGQzLCAweDAxLCAweDAwLCAweDVlLCAweDAzLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4NmMsIDB4MDMsIDB4MDAsIDB4NDIsIDB4ODAsIDB4MzAsIDB4MDEsIDB4MDAsIDB4ZjAsIDB4ODMsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwNywgMHg4NCwgMHgyMiwgMHhhNywgMHg4ZiwgMHg2YywgMHgwMCwgMHgwMCwKKwkweDQ5LCAweDAzLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDA0LCAweDg0LCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCisJMHhhMCwgMHg5NCwgMHgyZSwgMHg0MywgMHg5NywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDA5LCAweDg0LCAweGEyLCAweDQxLCAweDk3LCAweDUwLCAweDAwLCAweDAwLAorCTB4NTAsIDB4OTUsIDB4MjAsIDB4NDAsIDB4ZTEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YWMsIDB4OTQsIDB4MmUsIDB4NDMsCisJMHg5NywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDBkLCAweDg0LCAweGEyLCAweDQxLCAweDk3LCAweDUwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4YWUsIDB4MDMsIDB4MDAsIDB4NDAsIDB4YTMsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMCwgMHgwMSwgMHgwMCwgMHg2MCwgMHgxNSwgMHgwMCwgMHg0MCwKKwkweDg1LCAweDk4LCAweDAxLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDQwLCAweDQwLCAweGU0LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTksIDB4NDEsIDB4OTQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsCisJMHg0MSwgMHhlMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHg0MCwgMHg5NCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDgxLCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGEzLCAweDQxLAorCTB4ODEsIDB4NmMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4YTMsIDB4YzEsIDB4MDEsIDB4MDAsCisJMHgxMywgMHg4NCwgMHgwMCwgMHg1MCwgMHg4NSwgMHhjMCwgMHgwMCwgMHgwMCwgMHg0OSwgMHg4NCwgMHhhMiwgMHg0MSwKKwkweDAxLCAweDdkLCAweDAwLCAweDAwLCAweDIxLCAweDg0LCAweDIyLCAweDU4LCAweDczLCAweDdkLCAweDAwLCAweDAwLAorCTB4NzgsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjEsIDB4OTksIDB4MDEsIDB4MDAsIDB4MWMsIDB4ODQsIDB4YTgsIDB4YjEsCisJMHg5YywgMHgzMCwgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMCwgMHgzOCwgMHg0NSwgMHg5ZCwgMHhlMCwgMHgwMSwgMHgwMCwKKwkweDAxLCAweDAwLCAweDAwLCAweDBlLCAweDEwLCAweGM5LCAweDAwLCAweDAwLCAweDIxLCAweDg0LCAweDMzLCAweGM0LAorCTB4ODEsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MjQsIDB4ODQsIDB4YTEsIDB4YWQsIDB4OWQsIDB4MjAsIDB4MDAsIDB4MDAsCisJMHgxYiwgMHg4NCwgMHgxMywgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMywgMHg0ZSwKKwkweDVhLCAweDgzLCAweDAxLCAweDAwLCAweDMwLCAweDAwLCAweDM4LCAweDQ1LCAweDlkLCAweGUwLCAweDAxLCAweDAwLAorCTB4MmMsIDB4ODQsIDB4MjIsIDB4YWIsIDB4ODAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MmEsIDB4ODQsIDB4YTIsIDB4NDAsCisJMHgwMSwgMHg3ZCwgMHgwMCwgMHgwMCwgMHgyYywgMHg4NCwgMHgyMiwgMHg1ZiwgMHg1NywgMHg3ZCwgMHgwMCwgMHgwMCwKKwkweDIxLCAweDhhLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDJjLCAweDg0LCAweDIyLCAweDVlLAorCTB4NTcsIDB4N2QsIDB4MDAsIDB4MDAsIDB4ODQsIDB4OGEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgzMSwgMHg4NCwgMHgyMiwgMHg1NCwgMHg3MywgMHg3ZCwgMHgwMCwgMHgwMCwgMHg3NCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDYxLCAweDk5LCAweDAxLCAweDAwLCAweDJjLCAweDg0LCAweGE4LCAweGIxLCAweDAwLCAweDMwLCAweDAwLCAweDAwLAorCTB4ZmEsIDB4ODUsIDB4YTIsIDB4NWYsIDB4MDEsIDB4N2MsIDB4MDAsIDB4MDAsIDB4NWMsIDB4ODksIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgzMywgMHg4NCwgMHhhMiwgMHg1ZiwgMHg1OSwgMHgyNywgMHgwMCwgMHgwMCwKKwkweDM1LCAweDg0LCAweGEyLCAweDVjLCAweDczLCAweDdkLCAweDAwLCAweDAwLCAweDNjLCAweDg0LCAweGEyLCAweDVlLAorCTB4NzMsIDB4N2QsIDB4MDAsIDB4MDAsIDB4NDYsIDB4ODQsIDB4MjIsIDB4NWMsIDB4NzMsIDB4N2QsIDB4MDAsIDB4MDAsCisJMHg0NywgMHg4NCwgMHgzNywgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHg3YywgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDYxLCAweDk5LCAweDAxLCAweDAwLCAweDM2LCAweDg0LCAweGE4LCAweGIxLCAweDM2LCAweDMwLCAweDAwLCAweDAwLAorCTB4N2MsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjEsIDB4OTksIDB4MDEsIDB4MDAsIDB4MzgsIDB4ODQsIDB4YTgsIDB4YjEsCisJMHgwMCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgxZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHg4OCwgMHgwMSwgMHgwMCwKKwkweDI5LCAweDg2LCAweDE3LCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDQ3LCAweDg0LCAweDM0LCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4N2UsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjEsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgzZCwgMHg4NCwgMHhhOCwgMHhiMSwgMHgxMiwgMHgzMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg4NCwgMHg1MiwgMHgyMSwKKwkweDEzLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDQxLCAweDJmLCAweGMzLCAweDAxLCAweDAwLAorCTB4ZmYsIDB4M2YsIDB4MDAsIDB4MDksIDB4MDAsIDB4OGMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsCisJMHgwMSwgMHhmMCwgMHgwMSwgMHgwMCwgMHg4NywgMHg4NCwgMHgwMCwgMHgzNCwgMHgxMywgMHg4NCwgMHgwMCwgMHgwMCwKKwkweGZmLCAweDNmLCAweDE0LCAweDA5LCAweDAwLCAweDhjLCAweDAxLCAweDAwLCAweGU1LCAweDg0LCAweDAwLCAweDQzLAorCTB4MDEsIDB4ZjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCisJMHg0NywgMHg4NCwgMHgzMywgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgxYiwgMHg4NCwgMHgxMywgMHg0ZSwKKwkweDVhLCAweDkzLCAweDAwLCAweDAwLCAweGU2LCAweDg5LCAweGEyLCAweDQ4LCAweGZkLCAweDdmLCAweDAwLCAweDAwLAorCTB4NGUsIDB4ODQsIDB4MjIsIDB4NTksIDB4NzMsIDB4N2QsIDB4MDAsIDB4MDAsIDB4NzksIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwgMHg0YSwgMHg4NCwgMHgyOCwgMHhiMSwgMHg3ZSwgMHgzMSwgMHgwMCwgMHgwMCwKKwkweDRiLCAweDg0LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDUyLCAweDg0LCAweDIxLCAweGFjLAorCTB4OWMsIDB4MjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MWYsIDB4YzMsIDB4MDEsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHhhMCwgMHg1ZiwgMHg5ZCwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZSwKKwkweDU4LCAweDkxLCAweDAxLCAweDAwLCAweDU2LCAweDg0LCAweDIyLCAweDVhLCAweDczLCAweDdkLCAweDAwLCAweDAwLAorCTB4N2EsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjEsIDB4OTksIDB4MDEsIDB4MDAsIDB4NTMsIDB4ODQsIDB4YTgsIDB4YjEsCisJMHg3ZSwgMHgzMSwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHhjZiwgMHgxMSwgMHhjOSwgMHgwMCwgMHgwMCwKKwkweDVjLCAweDg0LCAweGEyLCAweDQwLCAweDkzLCAweDdmLCAweDAwLCAweDAwLCAweDVjLCAweDg0LCAweDIyLCAweDQ0LAorCTB4OTMsIDB4N2YsIDB4MDAsIDB4MDAsIDB4NTgsIDB4ODQsIDB4NDIsIDB4YTUsIDB4ODAsIDB4MzAsIDB4MDAsIDB4MDAsCisJMHg1YiwgMHg4NCwgMHhhMiwgMHg0MCwgMHg5MywgMHg3ZiwgMHgwMCwgMHgwMCwgMHg3MSwgMHg4NCwgMHgxYSwgMHg0MCwKKwkweDkzLCAweDkzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFhLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAorCTB4OWEsIDB4ODAsIDB4YTIsIDB4NDAsIDB4NzMsIDB4N2QsIDB4MDAsIDB4MDAsIDB4OWIsIDB4ODksIDB4MjIsIDB4NDQsCisJMHgyMSwgMHg2ZiwgMHgwMCwgMHgwMCwgMHg5MiwgMHg4OSwgMHgyMiwgMHg0MCwgMHg2NSwgMHg3ZCwgMHgwMCwgMHgwMCwKKwkweGEwLCAweDg5LCAweGEyLCAweDViLCAweDczLCAweDdkLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDQ5LAorCTB4MzMsIDB4N2QsIDB4MDAsIDB4MDAsIDB4NjYsIDB4ODQsIDB4MjIsIDB4NDgsIDB4MzMsIDB4N2QsIDB4MDAsIDB4MDAsCisJMHhmZiwgMHgwMSwgMHgwMCwgMHg5OSwgMHg4MCwgMHhkOCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwKKwkweDgxLCAweGUwLCAweDAxLCAweDAwLCAweGE4LCAweDk4LCAweDJmLCAweDQwLCAweDMzLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZTAsIDB4YzEsIDB4MDEsIDB4MDAsIDB4NjksIDB4ODQsIDB4MjIsIDB4NDAsCisJMHhhZiwgMHg2ZiwgMHgwMCwgMHgwMCwgMHg2OSwgMHg4NCwgMHgyMiwgMHg0MCwgMHg4MSwgMHg2ZiwgMHgwMCwgMHgwMCwKKwkweGVmLCAweDg5LCAweDFmLCAweGE1LCAweDgyLCAweDZmLCAweDAwLCAweDAwLCAweDQ5LCAweDg0LCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MWIsIDB4ODQsIDB4MDAsIDB4NDAsIDB4OGIsIDB4YjMsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1OCwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZSwKKwkweDYyLCAweGIxLCAweDAxLCAweDAwLCAweDFiLCAweDg0LCAweDI4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4NmMsIDB4ODQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4NmYsIDB4ODQsIDB4MzMsIDB4NDAsCisJMHgxZiwgMHgzMCwgMHgwMCwgMHgwMCwgMHgxYiwgMHg4NCwgMHgxMywgMHg0ZSwgMHg1YSwgMHg5MywgMHgwMCwgMHgwMCwKKwkweDczLCAweDg0LCAweGEwLCAweGNlLCAweDgxLCAweDUwLCAweDAwLCAweDAwLCAweDg1LCAweDg0LCAweGEwLCAweGNkLAorCTB4ODEsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTUsIDB4OWMsIDB4YjMsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhiMSwgMHg4MSwgMHhiMCwgMHgwMSwgMHgwMCwgMHg4NSwgMHg4NCwgMHgyMiwgMHhiNSwKKwkweDgxLCAweDE0LCAweDAwLCAweDAwLCAweDgwLCAweDE1LCAweDJmLCAweDQwLCAweDQ5LCAweGIxLCAweDAxLCAweDAwLAorCTB4NzcsIDB4ODQsIDB4NDIsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjAsIDB4YjQsCisJMHg2NSwgMHg5NywgMHgwMSwgMHgwMCwgMHhkMCwgMHgxNSwgMHgyZSwgMHg0MCwgMHg2OSwgMHhiMywgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDFhLCAweDQ0LCAweDkzLCAweDgzLCAweDAxLCAweDAwLCAweDFhLCAweDAwLCAweDAwLCAweGEyLAorCTB4ODAsIDB4ZGMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhiMSwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiNSwKKwkweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDA1LCAweDAwLCAweDAwLCAweDQwLCAweDYxLCAweDk5LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ODQsIDB4YTgsIDB4YTEsCisJMHhlMCwgMHgzMSwgMHgwMCwgMHgwMCwgMHg1YywgMHg4NCwgMHgwMCwgMHg4OCwgMHg5ZSwgMHhiMywgMHgwMCwgMHgwMCwKKwkweDVjLCAweDg0LCAweGEyLCAweDQxLCAweDY3LCAweDZmLCAweDAwLCAweDAwLCAweDVjLCAweDg0LCAweDAwLCAweDZmLAorCTB4ZGIsIDB4OTEsIDB4MDAsIDB4MDAsIDB4ODUsIDB4ODQsIDB4NDIsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHg1YywgMHg4NCwgMHgxYSwgMHg0MCwgMHg5MywgMHg4MywgMHgwMCwgMHgwMCwgMHgwMCwgMHg5OSwgMHgwMCwgMHgwOSwKKwkweDQ2LCAweGM5LCAweDAxLCAweDAwLCAweDNmLCAweDAwLCAweDAwLCAweGYzLCAweDBjLCAweDg4LCAweDAxLCAweDAwLAorCTB4OTAsIDB4ODQsIDB4YTYsIDB4NDIsIDB4MTMsIDB4NjAsIDB4MDAsIDB4MDAsIDB4M2YsIDB4OTcsIDB4MDAsIDB4OTUsCisJMHgwMywgMHgzMCwgMHgwMSwgMHgwMCwgMHg4YiwgMHg4NCwgMHg0NSwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDc1LCAweDAwLCAweDAwLCAweDQwLCAweDYxLCAweDk5LCAweDAxLCAweDAwLCAweDhjLCAweDg0LCAweGE4LCAweGIxLAorCTB4MGMsIDB4MzAsIDB4MDAsIDB4MDAsIDB4NDYsIDB4OTcsIDB4MWQsIDB4MTAsIDB4OTQsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHg5MSwgMHg4NCwgMHgwMCwgMHg1OCwgMHgxZiwgMHg5MCwgMHgwMCwgMHgwMCwgMHgzOCwgMHg5NywgMHgwMCwgMHg5NSwKKwkweDAzLCAweDMwLCAweDAxLCAweDAwLCAweDFiLCAweDg0LCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MmQsIDB4MDMsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MmQsIDB4ZjAsCisJMHgyZSwgMHhiMCwgMHgwMSwgMHgwMCwgMHhlZSwgMHgwNywgMHgwMCwgMHg0MCwgMHg5NywgMHg5OCwgMHgwMSwgMHgwMCwKKwkweDk4LCAweDg0LCAweDIzLCAweDRiLCAweGU0LCAweDZkLCAweDAwLCAweDAwLCAweDk4LCAweDg0LCAweDIyLCAweDRiLAorCTB4ZmQsIDB4N2YsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MWYsIDB4OTAsIDB4MDEsIDB4MDAsCisJMHgyMiwgMHgwMCwgMHgyZiwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHg5YiwgMHg4NCwgMHg4MywgMHgxNywKKwkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDI2LCAweDAwLCAweDAwLCAweDQwLCAweDQ3LCAweDk5LCAweDAxLCAweDAwLAorCTB4OWQsIDB4ODQsIDB4ODUsIDB4MTcsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDgsCisJMHg0NywgMHhjMSwgMHgwMSwgMHgwMCwgMHhhMiwgMHg4NCwgMHgyMiwgMHg1NSwgMHgyZiwgMHg3YywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQyLCAweDQzLCAweGQxLCAweDAxLCAweDAwLCAweDBmLCAweDAwLCAweDAwLCAweGZhLAorCTB4OTYsIDB4ODgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4OTcsIDB4ZTAsIDB4MDEsIDB4MDAsCisJMHhhMywgMHg4NCwgMHgwMCwgMHg0YiwgMHg0NCwgMHhjMSwgMHgwMCwgMHgwMCwgMHgxMiwgMHgwMCwgMHgwMCwgMHhhMiwKKwkweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDI4LCAweDAwLCAweDAwLCAweGY2LCAweDAyLCAweGNjLCAweDAxLCAweDAwLAorCTB4MGEsIDB4MDAsIDB4MDAsIDB4YTEsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsCisJMHgxNiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyOCwgMHhmMCwgMHgxMCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGYwLCAweDFhLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGEyLAorCTB4MmEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YzAsIDB4MjgsIDB4M2MsIDB4NDYsIDB4MGQsIDB4ZTAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgyZCwgMHg0NCwgMHg5NSwgMHhiMCwgMHgwMSwgMHgwMCwgMHhhZiwgMHg4NCwgMHhhMiwgMHhmOCwKKwkweDBlLCAweDMwLCAweDAwLCAweDAwLCAweGJmLCAweDg0LCAweDIyLCAweDQxLCAweDk1LCAweDUwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MmQsIDB4NTAsIDB4NDksIDB4YzEsIDB4MDEsIDB4MDAsIDB4YWIsIDB4ODQsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhhYywgMHg4NCwgMHhhMiwgMHhmOCwgMHgxNiwgMHg2YywgMHgwMCwgMHgwMCwKKwkweGFjLCAweDg0LCAweGEyLCAweGY4LCAweDEwLCAweDZjLCAweDAwLCAweDAwLCAweGFjLCAweDg0LCAweGEyLCAweGYwLAorCTB4MWEsIDB4NmMsIDB4MDAsIDB4MDAsIDB4YmQsIDB4ODQsIDB4MjIsIDB4NTgsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHg5OSwgMHgzZiwgMHg0MiwgMHgxMywgMHhmMCwgMHgwMSwgMHgwMCwgMHhiNCwgMHg4NCwgMHg0NywgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweGI4LCAweDg0LCAweGEyLCAweGYzLCAweDc0LCAweDA2LCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDYsIDB4ZTYsIDB4OTUsIDB4MDEsIDB4MDAsIDB4YmQsIDB4ODQsIDB4MWYsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNiwgMHg5NiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDNmLCAweDAwLCAweDFmLCAweGYzLCAweDBjLCAweDg4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDU1LAorCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGIsIDB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHhiYiwgMHg4NCwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhiZCwgMHg4NCwgMHg0NywgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweGM1LCAweDg0LCAweDFmLCAweDQxLCAweDJkLCAweGMzLCAweDAwLCAweDAwLAorCTB4YzMsIDB4ODQsIDB4MjIsIDB4NTgsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTUsCisJMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNiwgMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweGMxLCAweDg0LCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweGMzLCAweDg0LCAweDQ3LCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ZWMsIDB4ODQsIDB4MWYsIDB4NDEsIDB4MmQsIDB4YzMsIDB4MDAsIDB4MDAsCisJMHgwMywgMHgwMCwgMHgwMCwgMHgwNywgMHgxYSwgMHhmNCwgMHgwMSwgMHgwMCwgMHgwYiwgMHg5NiwgMHgwMCwgMHgwNywKKwkweDE2LCAweDMwLCAweDAxLCAweDAwLCAweGQzLCAweDg0LCAweDIyLCAweDQxLCAweDgxLCAweDZjLCAweDAwLCAweDAwLAorCTB4Y2IsIDB4ODQsIDB4MjIsIDB4NDIsIDB4ODEsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MWIsIDB4ODQsIDB4MDAsIDB4ODgsCisJMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHhkMiwgMHg4NCwgMHgyMiwgMHg1ZiwgMHgwZiwgMHg3YywgMHgwMCwgMHgwMCwKKwkweGZmLCAweDk2LCAweDAwLCAweDVmLCAweDAxLCAweDEwLCAweDAxLCAweDAwLCAweGQxLCAweDg0LCAweDIyLCAweDQwLAorCTB4OTUsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDQsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmMiwgMHgwMiwgMHhiMCwgMHgwMSwgMHgwMCwgMHg3NCwgMHg5NiwgMHgwMCwgMHg1MiwKKwkweDk1LCAweDMwLCAweDAxLCAweDAwLCAweDdiLCAweDk2LCAweDAwLCAweDRiLCAweDAyLCAweGIwLCAweDAwLCAweDAwLAorCTB4ZmYsIDB4ODksIDB4MDAsIDB4NDAsIDB4MGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZGIsIDB4ODQsIDB4YTIsIDB4NWEsCisJMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHg4NiwgMHg5NSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweGRiLCAweDg0LCAweDIyLCAweDIwLCAweDg1LCAweDZjLCAweDAwLCAweDAwLCAweGQ4LCAweDg0LCAweDljLCAweDBmLAorCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MWIsIDB4ODQsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHg2NiwgMHg5NiwgMHgwMCwgMHg1YywgMHgxZiwgMHgwMCwgMHgwMSwgMHgwMCwgMHg4NSwgMHg5OCwgMHgwMCwgMHg0MiwKKwkweDYxLCAweDMxLCAweDAxLCAweDAwLCAweDFiLCAweDg0LCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAorCTB4Y2UsIDB4OTksIDB4MDAsIDB4MDcsIDB4OTYsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmQsIDB4MDUsCisJMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhkZSwgMHg4NCwgMHg4MiwgMHhmMCwgMHgxOCwgMHgzMCwgMHgwMCwgMHgwMCwKKwkweDY2LCAweDhiLCAweDAwLCAweDQ1LCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDI4LCAweDIwLCAweDAwLCAweGE2LAorCTB4OTYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ZTIsIDB4ODQsIDB4MjIsIDB4MTcsIDB4OTYsIDB4MDQsIDB4MDAsIDB4MDAsCisJMHhmNSwgMHg5NywgMHgwMCwgMHg0YiwgMHg5NSwgMHgzMCwgMHgwMSwgMHgwMCwgMHg2NiwgMHg4YiwgMHgwMCwgMHg0YiwKKwkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDBiLCAweDk3LCAweDAwLCAweDAzLCAweDQ4LCAweDMxLCAweDAxLCAweDAwLAorCTB4ZTcsIDB4OTQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4NjYsIDB4OGIsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZSwgMHgxMCwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDY4LCAweDUwLCAweDAzLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLAorCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHhlOSwgMHg4NCwgMHhhOCwgMHgwMCwKKwkweGUwLCAweDMxLCAweDAwLCAweDAwLCAweDFiLCAweDg0LCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MmQsIDB4MDMsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHgwZiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgyZSwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGYyLCAweDAyLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4MTcsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MDAsIDB4YTYsIDB4OTYsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHhlZSwgMHgwNywgMHgyZSwgMHg0NywgMHg5NywgMHg5MCwgMHgwMSwgMHgwMCwgMHhmZiwgMHg4NCwgMHgyMiwgMHgxNywKKwkweDk2LCAweDA0LCAweDAwLCAweDAwLCAweGZkLCAweDg0LCAweDIyLCAweDRiLCAweGZkLCAweDdmLCAweDAwLCAweDAwLAorCTB4ZmQsIDB4ODQsIDB4MjMsIDB4YTIsIDB4MDIsIDB4NmMsIDB4MDAsIDB4MDAsIDB4NzQsIDB4OTYsIDB4MDAsIDB4NTIsCisJMHg5NSwgMHgzMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHg0MSwgMHg5NywgMHg1MCwgMHgwMCwgMHgwMCwKKwkweDBjLCAweDAwLCAweDJkLCAweDAwLCAweDEyLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLAorCTB4MDAsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWMsIDB4MDEsIDB4ODAsIDB4MDEsIDB4MDAsCisJMHg3YiwgMHg5NiwgMHgwMCwgMHg0YiwgMHgwMiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOSwKKwkweDAwLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLCAweDAzLCAweGIwLCAweDAxLCAweDAwLAorCTB4MWMsIDB4ODUsIDB4MDAsIDB4NWMsIDB4MTcsIDB4OTAsIDB4MDAsIDB4MDAsIDB4MTEsIDB4ODUsIDB4MjIsIDB4NDMsCisJMHgyZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHgxZiwgMHg5MCwgMHgwMSwgMHgwMCwKKwkweDBhLCAweDg1LCAweDIyLCAweDVmLCAweDJmLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDJlLCAweDEwLAorCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTgsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgxMCwgMHgwMCwgMHgwMCwgMHgwMywgMHhmMCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweGUwLCAweGM5LCAweDAxLCAweDAwLCAweDA2LCAweDg1LCAweDQ1LCAweDQyLCAweDYxLCAweDMxLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDcsIDB4ODUsIDB4YTgsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgxYiwgMHg4NCwgMHgxZCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDIwLCAweDAwLCAweDJkLCAweDAzLCAweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweGZmLCAweDBmLCAweDAwLCAweGY2LAorCTB4ODAsIDB4ODgsIDB4MDEsIDB4MDAsIDB4MGUsIDB4ODUsIDB4YTIsIDB4YTYsIDB4ODEsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgxMSwgMHg4NSwgMHgwMCwgMHhmMiwgMHgzYSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhmNywgMHg4NSwgMHhhMiwgMHg0YiwKKwkweGZkLCAweDdmLCAweDAwLCAweDAwLCAweGNjLCAweDk1LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4MTUsIDB4OGEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MWMsIDB4ODUsIDB4MjIsIDB4NGEsCisJMHgyZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgxYywgMHg4NSwgMHgyMiwgMHg0OCwgMHgyZiwgMHg3YywgMHgwMCwgMHgwMCwKKwkweDBhLCAweDAwLCAweDJkLCAweDAzLCAweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDNmLCAweDAwLCAweDAwLCAweGYyLAorCTB4ODYsIDB4ODgsIDB4MDEsIDB4MDAsIDB4MWYsIDB4MDAsIDB4MDAsIDB4NDMsIDB4ODQsIDB4ODgsIDB4MDEsIDB4MDAsCisJMHgwNSwgMHgwMCwgMHgwMCwgMHg0MywgMHg4MCwgMHhmNCwgMHgwMSwgMHgwMCwgMHg5OCwgMHg5NCwgMHgzZCwgMHg0MiwKKwkweDgxLCAweGUwLCAweDAxLCAweDAwLCAweDFjLCAweDg1LCAweGEyLCAweDQyLCAweGUwLCAweDdkLCAweDAwLCAweDAwLAorCTB4ZjcsIDB4ODUsIDB4YTIsIDB4NGIsIDB4ZmQsIDB4N2YsIDB4MDAsIDB4MDAsIDB4Y2MsIDB4OTUsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgxNSwgMHg4YSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDFjLCAweDg1LCAweDQ3LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGEzLAorCTB4MDksIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWYsIDB4NDEsIDB4NDcsIDB4YzMsIDB4MDEsIDB4MDAsCisJMHgyMiwgMHg4NSwgMHgyMiwgMHhhMSwgMHgwOSwgMHg2YywgMHgwMCwgMHgwMCwgMHg2YiwgMHg4NCwgMHgwMCwgMHg4OCwKKwkweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDFmLCAweDg1LCAweDAwLCAweDAzLCAweDQ4LCAweGIxLCAweDAwLCAweDAwLAorCTB4NWIsIDB4ODUsIDB4YTMsIDB4OTIsIDB4MDMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4ZjQsIDB4OTgsIDB4MDAsIDB4NDAsCisJMHg5NSwgMHgzMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg0MywgMHhjMywgMHgwMSwgMHgwMCwKKwkweDE1LCAweDhhLCAweDIyLCAweDA4LCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDI4LCAweDg1LCAweDIyLCAweDVjLAorCTB4MTcsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MjksIDB4ODUsIDB4MDAsIDB4MDAsIDB4MmEsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgxMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyYSwgMHhjOCwgMHgwMSwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwOCwKKwkweDgwLCAweGM4LCAweDAxLCAweDAwLCAweDJkLCAweDg1LCAweGEyLCAweDQzLCAweDJmLCAweDdjLCAweDAwLCAweDAwLAorCTB4ZjgsIDB4OTcsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4NDksIDB4ODUsIDB4MDAsIDB4NWUsCisJMHgxNywgMHg5MCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMSwgMHg4YywgMHhjYywgMHgwMSwgMHgwMCwKKwkweGY4LCAweDk3LCAweDAwLCAweDRjLCAweDAzLCAweDMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJlLCAweDQ2LAorCTB4MDIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MTAsIDB4ODAsIDB4MDAsIDB4MTAsIDB4NDgsIDB4YzksIDB4MDEsIDB4MDAsCisJMHgwYywgMHgwMCwgMHgwMCwgMHgwMSwgMHhmMCwgMHhjZCwgMHgwMSwgMHgwMCwgMHgyYywgMHgwMCwgMHgwMCwgMHg0MCwKKwkweGYwLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE2LCAweGYwLCAweGIxLCAweDAxLCAweDAwLAorCTB4MTAsIDB4MDAsIDB4MDAsIDB4MTUsIDB4ZTAsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsCisJMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhhMCwgMHgwMCwgMHgwMCwgMHhhNCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKKwkweDM2LCAweDg1LCAweGE4LCAweDU0LCAweDE3LCAweDEwLCAweDAwLCAweDAwLCAweDQ5LCAweDg1LCAweDAwLCAweDVlLAorCTB4MTcsIDB4OTAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmEsIDB4YzgsIDB4MDEsIDB4MDAsCisJMHg0OCwgMHg4NSwgMHgyMiwgMHg0MywgMHgyZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMSwKKwkweDhjLCAweGNjLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRjLCAweDAzLCAweGIwLCAweDAxLCAweDAwLAorCTB4MTksIDB4OTgsIDB4MDAsIDB4NDMsIDB4NjEsIDB4MzEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmUsIDB4NDYsCisJMHgwMiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgxMCwgMHg4MCwgMHgwMCwgMHgxMCwgMHg0OCwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDBjLCAweDAwLCAweDAwLCAweDAxLCAweGYwLCAweGNkLCAweDAxLCAweDAwLCAweDBjLCAweDAwLCAweDAwLCAweDA5LAorCTB4ZjAsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgxMCwgMHgwMCwgMHgwMCwgMHgxNSwgMHhlMCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywKKwkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweGEwLCAweDAwLCAweDAwLCAweGE0LCAweDYyLCAweGRkLCAweDAxLCAweDAwLAorCTB4NDksIDB4ODUsIDB4MjgsIDB4NTQsIDB4MTcsIDB4MTAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4ODUsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgxOSwgMHg5OCwgMHgwMCwgMHg0MywgMHg2MSwgMHgzMSwgMHgwMSwgMHgwMCwKKwkweDRiLCAweDg1LCAweDIyLCAweDUwLCAweDJmLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDU2LAorCTB4MTcsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MTcsIDB4OTgsIDB4ODgsIDB4MDEsIDB4MDAsCisJMHg0ZSwgMHg4NSwgMHhhMiwgMHg0MSwgMHg5OSwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1NSwKKwkweDE3LCAweDkwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQzLCAweDYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4NGYsIDB4ODUsIDB4YTgsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgxYiwgMHg4NCwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDk4LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDU2LCAweDg1LCAweDIyLCAweDQzLAorCTB4MmYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MTYsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgxZCwgMHhlNCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhhMSwgMHg5NywgMHgwMCwgMHg1ZSwKKwkweDA1LCAweDEwLCAweDAxLCAweDAwLCAweDU5LCAweDg1LCAweGEyLCAweDVmLCAweDJmLCAweDdjLCAweDAwLCAweDAwLAorCTB4YjksIDB4OTQsIDB4MDAsIDB4MDEsIDB4MzgsIDB4NDMsIDB4MDEsIDB4MDAsIDB4Y2MsIDB4OTUsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgxNSwgMHg4YSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDVkLCAweDg1LCAweGEyLCAweDRiLCAweGZkLCAweDdmLCAweDAwLCAweDAwLCAweGY0LCAweDg1LCAweDAwLCAweDQxLAorCTB4NDMsIDB4YzMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MjcsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgxMSwgMHhiMCwgMHgwMSwgMHgwMCwgMHg1ZiwgMHg4NSwgMHgzNSwgMHgwMSwKKwkweDg2LCAweDMwLCAweDAwLCAweDAwLCAweDZkLCAweDAwLCAweDAwLCAweDQwLCAweDYxLCAweDk5LCAweDAxLCAweDAwLAorCTB4NjYsIDB4ODUsIDB4MjgsIDB4YjEsIDB4MzAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4NjAsIDB4ODUsIDB4MjIsIDB4NGQsCisJMHg3NSwgMHg3ZCwgMHgwMCwgMHgwMCwgMHhlNCwgMHg4NSwgMHhhMiwgMHg0MCwgMHgxMSwgMHg2YywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDQzLCAweGMzLCAweDAxLCAweDAwLCAweGYzLCAweDg1LCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4NmQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjEsIDB4OTksIDB4MDEsIDB4MDAsCisJMHg2NiwgMHg4NSwgMHhhOCwgMHhiMSwgMHgxMiwgMHgzMCwgMHgwMCwgMHgwMCwgMHg2ZiwgMHg4NSwgMHhhMiwgMHg0MCwKKwkweDExLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDQzLCAweGMzLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDksIDB4MTAsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsCisJMHgyYywgMHhiMCwgMHgwMSwgMHgwMCwgMHhkZSwgMHgwNywgMHgwMCwgMHg0MywgMHg4MCwgMHhjZSwgMHgwMSwgMHgwMCwKKwkweDYwLCAweDg1LCAweGFhLCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDc0LCAweDg1LCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDAsIDB4M2UsIDB4NDMsIDB4MjcsIDB4ZTAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwOSwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwKKwkweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDI3LCAweGMwLCAweDAxLCAweDAwLAorCTB4NjAsIDB4ODUsIDB4YTMsIDB4MGIsIDB4ODcsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTUsIDB4NDAsCisJMHgxYiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgyMywgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDEyLCAweDAwLCAweDAwLCAweDAwLCAweDJhLCAweGM4LCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDJkLCAweDQwLAorCTB4MzksIDB4YjAsIDB4MDEsIDB4MDAsIDB4N2MsIDB4ODUsIDB4YTIsIDB4NDAsIDB4MjcsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgyMiwgMHgwMCwgMHgwMCwgMHgwOCwgMHgxMiwgMHhjOCwgMHgwMSwgMHgwMCwgMHhkZSwgMHgwNywgMHgwMCwgMHg0MCwKKwkweDI1LCAweDk4LCAweDAxLCAweDAwLCAweDdmLCAweDg1LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MTIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsCisJMHgzMCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYiwgMHgyNSwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDMyLCAweGIwLCAweDAxLCAweDAwLCAweDE0LCAweDAwLCAweDIwLCAweDAxLAorCTB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZWUsIDB4MDcsIDB4MDAsIDB4NDAsIDB4MzcsIDB4OTgsIDB4MDEsIDB4MDAsCisJMHg4NCwgMHg4NSwgMHgyMywgMHgwMSwgMHgzNiwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwKKwkweDM2LCAweGIwLCAweDAxLCAweDAwLCAweDhmLCAweDg1LCAweDgyLCAweDQxLCAweDIzLCAweDQwLCAweDAwLCAweDAwLAorCTB4MjAsIDB4ODAsIDB4MDAsIDB4MTAsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4OGIsIDB4ODUsIDB4MjIsIDB4NDAsCisJMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDg4LCAweDg1LCAweGE4LCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MWIsIDB4ODQsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHhlYiwgMHg5NSwgMHgwMCwgMHg0MywgMHgyMywgMHgzMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwKKwkweDMyLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDIzLCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MTksCisJMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHg5ZSwgMHg4NSwgMHgyMiwgMHg0NSwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDRjLCAweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA5LAorCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHgxOSwKKwkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDk1LCAweDg1LCAweGE4LCAweDE1LCAweGUwLCAweDMxLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4MDMsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsCisJMHgzMywgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YywgMHgyNSwgMHhkMCwgMHgwMSwgMHgwMCwKKwkweDBjLCAweDAwLCAweDJkLCAweDRjLCAweDEzLCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLAorCTB4MzcsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4MmIsIDB4YzAsIDB4MDEsIDB4MDAsCisJMHg4NCwgMHg4NSwgMHgwMCwgMHg0NSwgMHgxZiwgMHg4MCwgMHgwMCwgMHgwMCwgMHhhMCwgMHg4NSwgMHhhMywgMHgxMiwKKwkweDM2LCAweDZjLCAweDAwLCAweDAwLCAweGExLCAweDg1LCAweDY4LCAweDFiLCAweDI4LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4NjgsIDB4MTIsIDB4MjgsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDksCisJMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQzLCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDIwLCAweDAwLCAweDAwLCAweDE5LAorCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4YTQsIDB4ODUsIDB4YTgsIDB4MTUsIDB4ZTAsIDB4MzEsIDB4MDAsIDB4MDAsCisJMHhjYSwgMHg4NSwgMHgyMiwgMHgxNCwgMHgwMiwgMHg1MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwKKwkweDMzLCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDI0LCAweGQwLCAweDAxLCAweDAwLAorCTB4MGMsIDB4MDAsIDB4MmQsIDB4MTQsIDB4MTIsIDB4YzAsIDB4MDEsIDB4MDAsIDB4YzMsIDB4ODUsIDB4YTIsIDB4MTQsCisJMHgzNiwgMHg1MCwgMHgwMCwgMHgwMCwgMHhiNCwgMHg4NSwgMHgyMiwgMHg1YywgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwKKwkweDMwLCAweDgwLCAweDAwLCAweDEwLCAweDQyLCAweGM5LCAweDAxLCAweDAwLCAweGIyLCAweDg1LCAweDIyLCAweDQwLAorCTB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHhhZiwgMHg4NSwgMHhhOCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDFiLCAweDg0LCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MGMsIDB4MDAsIDB4MmQsIDB4NWMsCisJMHgxZiwgMHg4MCwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHgyYSwgMHhjOCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDVjLCAweDJiLCAweDgwLCAweDAxLCAweDAwLCAweGYwLCAweDA3LCAweDAwLCAweDQwLAorCTB4MzcsIDB4OTgsIDB4MDEsIDB4MDAsIDB4YjksIDB4ODUsIDB4MjMsIDB4MDEsIDB4MzYsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgzNiwgMHhiMCwgMHgwMSwgMHgwMCwgMHhjNCwgMHg4NSwgMHgyMiwgMHgxYiwKKwkweDAyLCAweDZjLCAweDAwLCAweDAwLCAweDMwLCAweDAwLCAweDAwLCAweDEwLCAweDQ4LCAweGM5LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MmUsIDB4NWMsIDB4MWYsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsCisJMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweGZmLCAweDA3LCAweDAwLCAweDE1LCAweGUwLCAweDhkLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLAorCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YTAsIDB4MDAsIDB4MDAsIDB4YTQsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCisJMHhjMCwgMHg4NSwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhjNCwgMHg4NSwgMHgwMCwgMHgwMywKKwkweDQ4LCAweGIxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDJhLCAweGMwLCAweDAxLCAweDAwLAorCTB4ODQsIDB4ODUsIDB4YTIsIDB4NDAsIDB4MjUsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCisJMHgzOSwgMHhjMCwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgzZCwgMHg0MywgMHgzOSwgMHhlMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDBiLCAweDI1LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LAorCTB4MTIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ODQsIDB4ODUsIDB4MDAsIDB4ZjAsIDB4MzAsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHgxOSwgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHhkMCwgMHg4NSwgMHgyMiwgMHg0MCwKKwkweGUzLCAweDZkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQzLCAweDYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4NDAsIDB4MDAsIDB4MDAsIDB4MTksIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4Y2QsIDB4ODUsIDB4YTgsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgxYiwgMHg4NCwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKKwkweGViLCAweDk1LCAweDAwLCAweDQwLCAweDJiLCAweDMwLCAweDAxLCAweDAwLCAweDE4LCAweDAwLCAweDJlLCAweDAzLAorCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZDQsIDB4ODUsIDB4MjIsIDB4NTAsIDB4MmYsIDB4N2MsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1NiwgMHgxNywgMHg5MCwgMHgwMSwgMHgwMCwgMHgwNywgMHgwMCwgMHgwMCwgMHgxNywKKwkweDk4LCAweDg4LCAweDAxLCAweDAwLCAweGQ3LCAweDg1LCAweGEyLCAweDQxLCAweDk5LCAweDZjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTUsIDB4MTcsIDB4OTAsIDB4MDEsIDB4MDAsIDB4ZGEsIDB4ODUsIDB4MjIsIDB4NDMsCisJMHgyZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1NCwgMHgxNywgMHg5MCwgMHgwMSwgMHgwMCwKKwkweDE2LCAweDAwLCAweDIwLCAweDFkLCAweGU0LCAweGIxLCAweDAxLCAweDAwLCAweGRjLCAweDg1LCAweGEzLCAweDQwLAorCTB4MjcsIDB4NmMsIDB4MDAsIDB4MDAsIDB4ZGUsIDB4ODUsIDB4NjAsIDB4NWYsIDB4MTcsIDB4OTAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHg4NCwgMHgwMCwgMHgwYiwgMHgxNiwgMHhkYywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2MCwgMHgxMywKKwkweDE2LCAweDk0LCAweDAxLCAweDAwLCAweGExLCAweDk3LCAweDAwLCAweDVlLCAweDA1LCAweDEwLCAweDAxLCAweDAwLAorCTB4MTUsIDB4OGEsIDB4YTIsIDB4NWYsIDB4MmYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MTQsIDB4ODAsIDB4MDAsIDB4MDMsCisJMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMiwgMHgwMiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweGI5LCAweDk0LCAweDAwLCAweDAxLCAweDM4LCAweDQzLCAweDAxLCAweDAwLCAweDE1LCAweDhhLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODMsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZCwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNiwKKwkweDYyLCAweGIxLCAweDAxLCAweDAwLCAweGU2LCAweDg1LCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZTgsIDB4ODUsIDB4YTgsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhmMywgMHg4NSwgMHgyMiwgMHgxMywgMHg4MiwgMHg2YywgMHgwMCwgMHgwMCwKKwkweDQwLCAweDAwLCAweDNkLCAweDQzLCAweDgzLCAweGUwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LAorCTB4MTAsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4MmMsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgxNiwgMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHhlZSwgMHg4NSwgMHhhOCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDYyLCAweGIxLCAweDAxLCAweDAwLAorCTB4ZjAsIDB4ODUsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ZWEsIDB4ODUsIDB4MDAsIDB4NDEsCisJMHg4MywgMHhjMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDgyLCAweDAwLCAweGE2LCAweDA0LCAweGIwLCAweDAxLCAweDAwLCAweGEwLCAweDk4LCAweDAwLCAweDQwLAorCTB4NDcsIDB4OTksIDB4MDEsIDB4MDAsIDB4ZTMsIDB4ODksIDB4MDAsIDB4NDEsIDB4ODksIDB4MzAsIDB4MDEsIDB4MDAsCisJMHg3NCwgMHg5NiwgMHgwMCwgMHg1MiwgMHg5NSwgMHgzMCwgMHgwMSwgMHgwMCwgMHg3YiwgMHg5NiwgMHgwMCwgMHg0YiwKKwkweDAyLCAweGIwLCAweDAwLCAweDAwLCAweDE1LCAweDhhLCAweDAwLCAweDQwLCAweDBmLCAweGIwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NWYsIDB4MDEsIDB4ODAsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwZSwgMHhmNCwgMHgwMSwgMHgwMCwgMHgzZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4OCwgMHgwMSwgMHgwMCwKKwkweDAzLCAweDAwLCAweDAwLCAweDA3LCAweDFhLCAweGY0LCAweDAxLCAweDAwLCAweDBiLCAweDk2LCAweDAwLCAweDA3LAorCTB4MTYsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDUsIDB4ODYsIDB4MjIsIDB4NDEsIDB4ODEsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgwMywgMHg4NiwgMHgyMiwgMHg0MiwgMHg4MSwgMHg2YywgMHgwMCwgMHgwMCwgMHgxYiwgMHg4NCwgMHgwMCwgMHg4OCwKKwkweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDg2LCAweDIyLCAweDVmLCAweDBmLCAweDdjLCAweDAwLCAweDAwLAorCTB4ZmYsIDB4ODksIDB4MDAsIDB4NDAsIDB4MGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MGQsIDB4ODYsIDB4YTIsIDB4NWEsCisJMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHg4NiwgMHg5NSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDBkLCAweDg2LCAweDIyLCAweDIwLCAweDg1LCAweDZjLCAweDAwLCAweDAwLCAweDBhLCAweDg2LCAweDljLCAweDBmLAorCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MWIsIDB4ODQsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHg2NiwgMHg5NiwgMHgwMCwgMHg1YywgMHgxZiwgMHgwMCwgMHgwMSwgMHgwMCwgMHg4NSwgMHg5OCwgMHgwMCwgMHg0MiwKKwkweDYxLCAweDMxLCAweDAxLCAweDAwLCAweDFiLCAweDg0LCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAorCTB4Y2UsIDB4OTksIDB4MDAsIDB4MDcsIDB4OTYsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmQsIDB4MDUsCisJMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHgxOCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDEzLCAweDg2LCAweDIyLCAweDNhLCAweDAxLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4OGUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NjYsIDB4OGIsIDB4MDAsIDB4NDAsIDB4MDEsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgyZSwgMHgwMCwgMHgyZCwgMHgwNSwKKwkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDE3LCAweDg2LCAweGEyLCAweDQwLCAweGU3LCAweDZkLCAweDAwLCAweDAwLAorCTB4MGEsIDB4MDAsIDB4MDAsIDB4NDAsIDB4OGYsIDB4OTgsIDB4MDEsIDB4MDAsIDB4NjYsIDB4OGIsIDB4MDAsIDB4NDAsCisJMHgwMSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg1MSwgMHg5NSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDM4LCAweDk3LCAweDAwLCAweDk1LCAweDAzLCAweDMwLCAweDAxLCAweDAwLCAweDFiLCAweDg0LCAweDAwLCAweDg4LAorCTB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmQsIDB4MDMsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgyMiwgMHgwMCwgMHgyZCwgMHhmMCwgMHgyZSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgyOCwgMHgyMCwgMHgwMCwgMHhhNiwKKwkweDk2LCAweGIwLCAweDAxLCAweDAwLCAweDIwLCAweDg2LCAweDIyLCAweDE3LCAweDk2LCAweDA0LCAweDAwLCAweDAwLAorCTB4ZjUsIDB4OTcsIDB4MDAsIDB4NGIsIDB4OTUsIDB4MzAsIDB4MDEsIDB4MDAsIDB4NjYsIDB4OGIsIDB4MDAsIDB4NGMsCisJMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgyMiwgMHg4NiwgMHg4MywgMHgxNywgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDQzLCAweGMxLCAweDAxLCAweDAwLCAweDI0LCAweDg2LCAweDg1LCAweDE3LAorCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDgsIDB4NDMsIDB4YzEsIDB4MDEsIDB4MDAsCisJMHgyOCwgMHgwMCwgMHgwMCwgMHhmNiwgMHgwMiwgMHhjYywgMHgwMSwgMHgwMCwgMHgxMiwgMHgwMCwgMHgwMCwgMHhhMSwKKwkweDJhLCAweGM4LCAweDAxLCAweDAwLCAweDBiLCAweDk3LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4ZTcsIDB4OTQsIDB4MDAsIDB4NDEsIDB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4NjYsIDB4OGIsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHhkMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDJlLCAweDEwLCAweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDI4LCAweDAwLCAweDAwLCAweDQwLAorCTB4ZjEsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyZSwgMHg4NiwgMHg0NiwgMHg0NywKKwkweDYxLCAweDMxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGIxLCAweDAxLCAweDAwLAorCTB4MmYsIDB4ODYsIDB4YTgsIDB4MWIsIDB4ZTAsIDB4MzEsIDB4MDAsIDB4MDAsIDB4MWIsIDB4ODQsIDB4MWUsIDB4ODgsCisJMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHgwMywgMHhlMCwgMHgwMSwgMHgwMCwKKwkweDA4LCAweDAwLCAweDJkLCAweDAzLCAweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDU0LCAweDg2LCAweDAxLCAweGZiLAorCTB4MDgsIDB4MzAsIDB4MDAsIDB4MDAsIDB4YTcsIDB4ODYsIDB4ODcsIDB4ZmIsIDB4MjIsIDB4MzAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmYSwgMHgwZSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwKKwkweDE0LCAweGIwLCAweDAxLCAweDAwLCAweDAzLCAweDAwLCAweDAwLCAweDA3LCAweDFhLCAweGY0LCAweDAxLCAweDAwLAorCTB4MGIsIDB4OTYsIDB4MDAsIDB4MDcsIDB4MTYsIDB4MzAsIDB4MDEsIDB4MDAsIDB4NGEsIDB4ODYsIDB4MjIsIDB4NDEsCisJMHg4MSwgMHg2YywgMHgwMCwgMHgwMCwgMHgzZSwgMHg4NiwgMHgyMiwgMHg0MiwgMHg4MSwgMHg2YywgMHgwMCwgMHgwMCwKKwkweDFiLCAweDg0LCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDQ5LCAweDg2LCAweDIyLCAweDVmLAorCTB4MGYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MzgsIDB4MDAsIDB4MDAsIDB4MDQsIDB4N2UsIDB4ODksIDB4MDEsIDB4MDAsCisJMHg0MiwgMHg4NiwgMHhhNiwgMHg1ZiwgMHgwZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1ZiwgMHg5NSwgMHgwMCwgMHg0MCwKKwkweDA1LCAweDMwLCAweDAxLCAweDAwLCAweDQ3LCAweDg2LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MTMsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODcsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmQsIDB4MDMsCisJMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwYywgMHgwMCwgMHgyZCwgMHhmMCwgMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGYwLCAweDg0LCAweGIwLCAweDAxLCAweDAwLCAweGVhLCAweDk2LCAweDAwLCAweDQwLAorCTB4MDUsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWMsIDB4MWYsIDB4OTAsIDB4MDEsIDB4MDAsCisJMHhmZiwgMHg4OSwgMHgwMCwgMHg0MCwgMHgwZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHg1MiwgMHg4NiwgMHhhMiwgMHg1YSwKKwkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDg2LCAweDk1LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4NTIsIDB4ODYsIDB4MjIsIDB4MjAsIDB4ODUsIDB4NmMsIDB4MDAsIDB4MDAsIDB4NGYsIDB4ODYsIDB4OWMsIDB4MGYsCisJMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgxYiwgMHg4NCwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDY2LCAweDk2LCAweDAwLCAweDVjLCAweDFmLCAweDAwLCAweDAxLCAweDAwLCAweDg1LCAweDk4LCAweDAwLCAweDQyLAorCTB4NjEsIDB4MzEsIDB4MDEsIDB4MDAsIDB4MWIsIDB4ODQsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHhjZSwgMHg5OSwgMHgwMCwgMHgwNywgMHg5NiwgMHgzMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZCwgMHgwNSwKKwkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLCAweDE4LCAweGIwLCAweDAxLCAweDAwLAorCTB4NTYsIDB4ODYsIDB4MjEsIDB4MDQsIDB4ODAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4NTcsIDB4ODYsIDB4MDAsIDB4NDAsCisJMHgxMCwgMHhjOSwgMHgwMCwgMHgwMCwgMHhhOCwgMHg4YSwgMHgwMCwgMHg0YiwgMHg4MSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDc2LCAweDg2LCAweDAwLCAweDQzLCAweDgxLCAweGIwLCAweDAwLCAweDAwLCAweDdhLCAweDg2LCAweDAwLCAweGZiLAorCTB4MjIsIDB4YjAsIDB4MDAsIDB4MDAsIDB4YTgsIDB4OGEsIDB4MDAsIDB4NDEsIDB4ODEsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHg2NiwgMHg4YiwgMHgwMCwgMHg0ZSwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHg3MiwgMHg4NiwgMHgwMCwgMHg1YSwKKwkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDVmLCAweDg2LCAweDAwLCAweDQ3LCAweDhmLCAweGIwLCAweDAwLCAweDAwLAorCTB4YTgsIDB4OGEsIDB4MDAsIDB4NTMsIDB4ODEsIDB4YjAsIDB4MDAsIDB4MDAsIDB4YTgsIDB4OGEsIDB4MDAsIDB4NTYsCisJMHg4MSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgzMiwgMHgwMCwgMHgyZCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDY2LCAweDhiLCAweGEwLCAweDBhLCAweGU0LCAweDZkLCAweDAwLCAweDAwLCAweDY1LCAweDg2LCAweGEyLCAweDQxLAorCTB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4NjQsIDB4ODYsIDB4MjIsIDB4MGEsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHg2NiwgMHg4YiwgMHgwMCwgMHg1MywgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHg2NiwgMHg4YiwgMHgwMCwgMHg1NCwKKwkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDZlLCAweDg2LCAweDIyLCAweDBhLCAweDgwLCAweDMyLCAweDAwLCAweDAwLAorCTB4NjgsIDB4ODYsIDB4YTIsIDB4MGEsIDB4ZTQsIDB4NmQsIDB4MDAsIDB4MDAsIDB4NjYsIDB4OGIsIDB4MDAsIDB4NWQsCisJMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMiwgMHg4MCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDBhLCAweDgwLCAweGQwLCAweDAxLCAweDAwLCAweDZjLCAweDg2LCAweGEwLCAweDkxLAorCTB4ODEsIDB4NmMsIDB4MDAsIDB4MDAsIDB4NjYsIDB4OGIsIDB4MDAsIDB4NWUsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgyNSwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4ZiwgMHg5OCwgMHgwMSwgMHgwMCwgMHg2NiwgMHg4YiwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDcwLCAweDg2LCAweDIwLCAweDkxLCAweGU1LCAweDZkLCAweDAwLCAweDAwLAorCTB4NjYsIDB4OGIsIDB4MDAsIDB4NTQsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MjEsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4ZiwgMHg5OCwgMHgwMSwgMHgwMCwgMHg2NiwgMHg4YiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDMyLCAweDAwLCAweDJkLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDY2LCAweDhiLCAweGEwLCAweDBhLAorCTB4ZTQsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MjQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4OGYsIDB4OTgsIDB4MDEsIDB4MDAsCisJMHg2NiwgMHg4YiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgzNywgMHgwMCwgMHgyZCwgMHgwNSwKKwkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweGYzLCAweDgyLCAweGY0LCAweDAxLCAweDAwLAorCTB4YTgsIDB4OGEsIDB4YTAsIDB4NDIsIDB4ODMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4YTgsIDB4OGEsIDB4MDAsIDB4NTQsCisJMHg4MSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMiwgMHgwZSwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAzLCAweDAwLCAweDAwLCAweDA3LCAweDFhLCAweGY0LCAweDAxLCAweDAwLCAweDAwLCAweGI1LCAweDAwLCAweDBkLAorCTB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MTYsIDB4ODgsIDB4MDEsIDB4MDAsCisJMHg4MywgMHg4NiwgMHgyMiwgMHgwYiwgMHhlNiwgMHg3ZCwgMHgwMCwgMHgwMCwgMHgwYSwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDg3LCAweDk4LCAweDAxLCAweDAwLCAweDNkLCAweDk5LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MGYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4ODksIDB4MDAsIDB4NWMsCisJMHgxZiwgMHg5MCwgMHgwMCwgMHgwMCwgMHg5NSwgMHg4NiwgMHgyMiwgMHg1MCwgMHhmZCwgMHg3ZiwgMHgwMCwgMHgwMCwKKwkweDkwLCAweDg2LCAweGEyLCAweDU0LCAweGZkLCAweDdmLCAweDAwLCAweDAwLCAweDg4LCAweDg2LCAweDIyLCAweDU1LAorCTB4ZmQsIDB4N2YsIDB4MDAsIDB4MDAsIDB4ODIsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODcsIDB4OTgsIDB4MDEsIDB4MDAsCisJMHg4MCwgMHg4NiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg4MCwgMHg4NiwgMHgyMiwgMHg1MywKKwkweGZkLCAweDdmLCAweDAwLCAweDAwLCAweDE0LCAweDgwLCAweDAwLCAweDAzLCAweDQyLCAweGM5LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4OTYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4NGIsCisJMHg4MCwgMHhmNCwgMHgwMSwgMHgwMCwgMHgwYywgMHhiYywgMHgwMCwgMHg0MCwgMHg4NywgMHg5OCwgMHgwMSwgMHgwMCwKKwkweDkwLCAweDg2LCAweDIyLCAweDQzLCAweDgwLCAweDZjLCAweDAwLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweDRiLAorCTB4ODAsIDB4ODgsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ODYsIDB4YTIsIDB4NDMsIDB4ODAsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHg3YywgMHg5NiwgMHgwMCwgMHg0MCwgMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwgMHg5MSwgMHg4NiwgMHg0MywgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDk0LCAweDg2LCAweGEwLCAweGYwLCAweDMwLCAweDZmLCAweDAwLCAweDAwLAorCTB4ODYsIDB4ODYsIDB4MWIsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWIsIDB4NDEsCisJMHgzMSwgMHhjMywgMHgwMSwgMHgwMCwgMHg5MCwgMHg5NSwgMHgwMCwgMHg0MCwgMHgyNSwgMHgzMCwgMHgwMSwgMHgwMCwKKwkweDk5LCAweDg2LCAweDljLCAweDBmLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDFiLCAweDg0LCAweDAwLCAweDg4LAorCTB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NjYsIDB4OTYsIDB4MDAsIDB4NWMsIDB4MWYsIDB4MDAsIDB4MDEsIDB4MDAsCisJMHgxNCwgMHg4MCwgMHgwMCwgMHgwMywgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwKKwkweDk2LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJmLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLAorCTB4MTAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MTgsIDB4ZTQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MGMsCisJMHhlMCwgMHg5OSwgMHgwMSwgMHgwMCwgMHhjZSwgMHg5OSwgMHgwMCwgMHgwNywgMHg5NiwgMHgzMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweGI1LCAweDAwLCAweDBkLCAweDQ2LCAweGM5LCAweDAxLCAweDAwLCAweGEwLCAweDg2LCAweDMwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGIsIDB4ZTYsIDB4OTEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMiwgMHgwMCwgMHhhMSwgMHg0NiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYiwKKwkweGU2LCAweDkxLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDJlLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MTAsIDB4NDAsIDB4ZTEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YTgsIDB4OGEsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmYiwgMHgyOCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGZiLCAweDg2LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LAorCTB4MTQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YjEsIDB4ODYsIDB4MjIsIDB4NDYsIDB4MjMsIDB4N2MsIDB4MDAsIDB4MDAsCisJMHhhZCwgMHg4NiwgMHgyMiwgMHg0MCwgMHg4NywgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0OCwKKwkweDFmLCAweDkwLCAweDAxLCAweDAwLCAweGFmLCAweDg2LCAweDIyLCAweDQxLCAweDg3LCAweDdjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsIDB4MWYsIDB4OTAsIDB4MDEsIDB4MDAsIDB4YjEsIDB4ODYsIDB4MjIsIDB4NDIsCisJMHg4NywgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHgxZiwgMHg5MCwgMHgwMSwgMHgwMCwKKwkweGIxLCAweDg2LCAweDQ3LCAweDFiLCAweDJjLCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGEwLAorCTB4MTMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWYsIDB4NDEsIDB4NDEsIDB4YzMsIDB4MDEsIDB4MDAsCisJMHhlMCwgMHg4NiwgMHgyMywgMHg5MiwgMHgxNSwgMHg2YywgMHgwMCwgMHgwMCwgMHhlMCwgMHg4NiwgMHhhMiwgMHg0NSwKKwkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweGU0LCAweDg2LCAweDIyLCAweDRiLCAweGZkLCAweDdmLCAweDAwLCAweDAwLAorCTB4MTcsIDB4MDAsIDB4MDAsIDB4ZDAsIDB4YTIsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHgyNywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwYSwgMHgyNCwgMHhjOCwgMHgwMSwgMHgwMCwKKwkweGM3LCAweDk1LCAweDAwLCAweDQwLCAweDBmLCAweDMwLCAweDAxLCAweDAwLCAweGRlLCAweDg2LCAweDIyLCAweDA4LAorCTB4NDAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4YTMsIDB4YzEsIDB4MDEsIDB4MDAsCisJMHhmMCwgMHgwNywgMHgwMCwgMHgxMiwgMHgyNCwgMHhjYywgMHgwMSwgMHgwMCwgMHhiYSwgMHg4NiwgMHhhYSwgMHg0MSwKKwkweDI3LCAweDQwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweDEzLCAweDgwLCAweGNjLCAweDAxLCAweDAwLAorCTB4ZGEsIDB4ODYsIDB4MjYsIDB4NDAsIDB4MjMsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MywgMHhiMCwgMHgwMSwgMHgwMCwgMHg2MCwgMHgwMCwgMHgwMCwgMHgwMywgMHg4NCwgMHhjOCwgMHgwMSwgMHgwMCwKKwkweDEwLCAweDAwLCAweDAwLCAweDEwLCAweDQ4LCAweGNkLCAweDAxLCAweDAwLCAweDE3LCAweDAwLCAweDAwLCAweGQwLAorCTB4YTIsIDB4YzksIDB4MDEsIDB4MDAsIDB4YzcsIDB4ODYsIDB4YTIsIDB4NDAsIDB4ODMsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHhkMywgMHg4NiwgMHgwMCwgMHg0MSwgMHg4MywgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHg0MiwKKwkweDQ0LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDY4LCAweDIxLCAweDM4LCAweDk2LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MmUsIDB4NTAsIDB4NDksIDB4YzEsIDB4MDEsIDB4MDAsIDB4Y2MsIDB4ODYsIDB4YTIsIDB4NDQsCisJMHgyMywgMHg2YywgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwMywgMHg0OCwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDBjLCAweDAwLCAweDAwLCAweDIwLAorCTB4ZjAsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHhhMCwgMHgwMCwgMHgwMCwgMHhhNCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHhjZiwgMHg4NiwgMHhhOCwgMHg0MiwKKwkweGUwLCAweDMxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDg1LCAweGMwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MjMsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCisJMHhhMywgMHhjMSwgMHgwMSwgMHgwMCwgMHhjNSwgMHg4NiwgMHhhMiwgMHg0MSwgMHg4MSwgMHg1MCwgMHgwMCwgMHgwMCwKKwkweGRhLCAweDg2LCAweDIyLCAweDQwLCAweDIzLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LAorCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCisJMHhkNywgMHg4NiwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgxYiwgMHg4NCwgMHgwMCwgMHg4OCwKKwkweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweDQ4LCAweGIxLCAweDAxLCAweDAwLAorCTB4ZWUsIDB4MDcsIDB4MDAsIDB4NDAsIDB4MjUsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MTcsIDB4MDAsIDB4MDAsIDB4ZDAsCisJMHgyYSwgMHhjOCwgMHgwMSwgMHgwMCwgMHhlZCwgMHg4NiwgMHgwMCwgMHgxNywgMHgxMCwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweGFhLCAweDk3LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGU0LCAweDg2LCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4YzcsIDB4OTUsIDB4MDAsIDB4OTIsIDB4MjUsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgzMSwgMHhiMCwgMHgwMSwgMHgwMCwgMHhlNCwgMHg4NiwgMHgyMiwgMHgwOCwKKwkweDJlLCAweDMwLCAweDAwLCAweDAwLCAweGVkLCAweDg2LCAweDAwLCAweDQxLCAweDI3LCAweGIwLCAweDAwLCAweDAwLAorCTB4ODAsIDB4ODAsIDB4MDAsIDB4YTYsIDB4MDQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4NywgMHg5OCwgMHgwMSwgMHgwMCwgMHgzZCwgMHg5OSwgMHgwMCwgMHgwYSwgMHg4YywgMHgzMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDBmLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVjLAorCTB4MWYsIDB4OTAsIDB4MDEsIDB4MDAsIDB4ZWMsIDB4ODYsIDB4MjIsIDB4OWYsIDB4MTMsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgwMiwgMHgwMCwgMHgwMCwgMHg4OCwgMHgxYywgMHhjYywgMHgwMSwgMHgwMCwgMHg2YiwgMHg4NCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGZmLCAweDg5LCAweDAwLCAweDQxLCAweDNmLCAweGMzLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MGYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MjgsIDB4MDAsIDB4MDAsIDB4MDEsCisJMHg4MCwgMHhjZSwgMHgwMSwgMHgwMCwgMHgwMSwgMHg4NywgMHgyYSwgMHg0MCwgMHg4MSwgMHgzMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDgwLCAweDAwLCAweDEwLCAweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4OTgsIDB4MDEsIDB4MDAsIDB4ZjYsIDB4ODYsIDB4YTIsIDB4NDgsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsCisJMHhmNiwgMHg4NiwgMHhhMiwgMHg0NywgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHhmNiwgMHg4NiwgMHhhMywgMHgwNywKKwkweDAzLCAweDZjLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweDk4LCAweDAxLCAweDAwLAorCTB4ZjksIDB4ODYsIDB4YTMsIDB4NDAsIDB4MDIsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MjgsIDB4MDAsIDB4MDAsIDB4MDEsCisJMHhmMCwgMHhjZCwgMHgwMSwgMHgwMCwgMHhmYiwgMHg4NiwgMHgwMCwgMHg0MCwgMHgwZiwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDI4LCAweDAwLCAweDAwLCAweDQwLCAweGYwLCAweGNkLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4MGUsIDB4Y2MsIDB4MDEsIDB4MDAsIDB4MjgsIDB4MDAsIDB4MDAsIDB4MDMsIDB4ZjAsIDB4YzksIDB4MDEsIDB4MDAsCisJMHgyOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNiwKKwkweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ3LCAweDYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4MjAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4ODYsIDB4YTgsIDB4NWMsCisJMHgxZiwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGYwLCAweDA4LCAweGIwLCAweDAxLCAweDAwLCAweGEwLCAweDAxLCAweDJkLCAweDQwLAorCTB4MDAsIDB4YzAsIDB4MDEsIDB4MDAsIDB4ZTcsIDB4ODgsIDB4MjIsIDB4MGYsIDB4NDIsIDB4MDUsIDB4MDAsIDB4MDAsCisJMHgxMiwgMHg4NywgMHg5YywgMHgwZiwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1YywKKwkweDFmLCAweDgwLCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDEwLCAweDQyLCAweGM5LCAweDAxLCAweDAwLAorCTB4MGQsIDB4ODcsIDB4MjIsIDB4NDAsIDB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsCisJMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKKwkweDBhLCAweDg3LCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDFiLCAweDg0LCAweDAwLCAweDg4LAorCTB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4ODcsIDB4MjIsIDB4MDcsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHg0MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNywKKwkweDQyLCAweGMxLCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweGExLCAweDQ2LCAweDk5LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NWYsIDB4ZTEsIDB4OTEsIDB4MDEsIDB4MDAsIDB4ZDEsIDB4ODcsIDB4YTIsIDB4NDUsCisJMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMywgMHg0OCwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDJkLCAweDU0LCAweDI5LCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LAorCTB4MTgsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MDQsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgwZSwgMHhiMCwgMHgwMSwgMHgwMCwgMHg0MiwgMHgwMCwgMHgwMCwgMHgwMywKKwkweDBhLCAweGM4LCAweDAxLCAweDAwLCAweDBjLCAweDAwLCAweDAwLCAweGE0LCAweDBjLCAweGM4LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MTcsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsCisJMHgwMiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgyNCwgMHhkMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDEwLCAweGMwLCAweDAxLCAweDAwLCAweDEyLCAweDAwLCAweDAwLCAweDA4LAorCTB4MTAsIDB4YzgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MjMsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHhmZSwgMHg3ZiwgMHgwMCwgMHgwNSwgMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgyMywgMHg4NywgMHgyMCwgMHg5NCwKKwkweDE1LCAweDZjLCAweDAwLCAweDAwLCAweDI0LCAweDg3LCAweDAwLCAweDk0LCAweGU1LCAweGIxLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MGEsIDB4ZTQsIDB4YjEsIDB4MDEsIDB4MDAsIDB4M2QsIDB4ODcsIDB4MjIsIDB4MDEsCisJMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzYywgMHg0NCwgMHgyMywgMHhlMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDJlLCAweGE0LCAweDgwLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLAorCTB4NDgsIDB4YzEsIDB4MDEsIDB4MDAsIDB4MmEsIDB4ODcsIDB4YTMsIDB4MDcsIDB4MDIsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgyYiwgMHg4NywgMHg2OCwgMHgwMSwgMHgxYSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2OCwgMHgwNywKKwkweDFhLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBkLCAweDAyLCAweGQwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGMsCisJMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDBkLCAweDBhLCAweGMwLCAweDAxLCAweDAwLCAweDM3LCAweDg3LCAweDIyLCAweDQwLAorCTB4MDMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MzcsIDB4ODcsIDB4MjIsIDB4NDIsIDB4MjMsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgyMywgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywKKwkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweGEwLCAweDAwLCAweDAwLCAweGE0LCAweDYyLCAweGRkLCAweDAxLCAweDAwLAorCTB4NWYsIDB4ODcsIDB4MjgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MzQsIDB4ODcsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg4MCwgMHhjMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ3LCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MzksIDB4ODcsIDB4YTgsIDB4NDAsIDB4MjMsIDB4MzAsIDB4MDAsIDB4MDAsCisJMHgxYiwgMHg4NCwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHg1ZiwgMHg4NywgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDNjLCAweDQ0LCAweDIzLCAweGUwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4YTQsIDB4ODYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmUsIDB4MTAsCisJMHg0OCwgMHhjMSwgMHgwMSwgMHgwMCwgMHg0MiwgMHg4NywgMHhhMywgMHgxMiwgMHgwZSwgMHg2YywgMHgwMCwgMHgwMCwKKwkweDQzLCAweDg3LCAweDY4LCAweDA3LCAweDFhLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDY4LCAweDEyLAorCTB4MWEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NDYsIDB4ODcsIDB4ODAsIDB4MDgsIDB4ZjAsIDB4MzEsIDB4MDAsIDB4MDAsCisJMHgwMSwgMHgwMCwgMHgwMCwgMHgxMSwgMHg5OCwgMHhjOCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YywKKwkweDFlLCAweDkwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBjLCAweGYwLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsCisJMHg4NiwgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NiwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAxLCAweDFmLCAweDAwLCAweDQzLCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDRhLCAweDg3LCAweGE4LCAweDVjLAorCTB4MWYsIDB4MTAsIDB4MDAsIDB4MDAsIDB4N2QsIDB4ODcsIDB4MjIsIDB4MGQsIDB4MTQsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHg1MCwgMHg4NywgMHgyMiwgMHgwZCwgMHgyNCwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwZCwKKwkweDEwLCAweGMwLCAweDAxLCAweDAwLCAweDU0LCAweDg3LCAweDAwLCAweDBkLCAweDI0LCAweGQwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MmIsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTUsCisJMHhhMiwgMHhiMSwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHgxMCwgMHhjOCwgMHgwMSwgMHgwMCwKKwkweGYwLCAweDA3LCAweDAwLCAweDQwLCAweDI1LCAweDk4LCAweDAxLCAweDAwLCAweDU2LCAweDg3LCAweDIyLCAweDQyLAorCTB4MjMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4NWYsIDB4ODcsIDB4MDAsIDB4NDEsIDB4MjMsIDB4YzAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NiwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwKKwkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDU3LCAweDg3LCAweGE4LCAweDVjLCAweDFmLCAweDAwLCAweDAwLCAweDAwLAorCTB4MWIsIDB4ODQsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsCisJMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg1ZCwgMHg4NywgMHgyMiwgMHg0NywgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwKKwkweGZiLCAweDk1LCAweDAwLCAweDQzLCAweDIzLCAweDMwLCAweDAxLCAweDAwLCAweDBlLCAweDAwLCAweDAwLCAweDBmLAorCTB4MWUsIDB4OGMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MjMsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHg3ZCwgMHg4NywgMHgyMiwgMHgwZCwgMHgxNCwgMHg1MCwgMHgwMCwgMHgwMCwgMHg3YywgMHg4NywgMHhhMiwgMHgwZCwKKwkweDBlLCAweDUwLCAweDAwLCAweDAwLCAweDZiLCAweDg3LCAweDIyLCAweDQ2LCAweDFmLCAweDdjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsIDB4MWYsIDB4ODAsIDB4MDEsIDB4MDAsIDB4MzAsIDB4ODAsIDB4MDAsIDB4MTAsCisJMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHg2OSwgMHg4NywgMHgyMiwgMHg0MCwgMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ3LCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLAorCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4NjYsIDB4ODcsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgxYiwgMHg4NCwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4MCwgMHgwMCwgMHgwMywKKwkweDQ2LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVmLCAweGUxLCAweDkxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MmQsIDB4MDYsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsCisJMHgxOCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgwNCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDcwLCAweDg3LCAweDFmLCAweGYwLCAweDBlLCAweDMwLCAweDAwLCAweDAwLCAweDI0LCAweDg3LCAweDAwLCAweDRjLAorCTB4MGQsIDB4YzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmUsIDB4NWYsIDB4MGYsIDB4ODAsIDB4MDEsIDB4MDAsCisJMHgyNCwgMHg4NywgMHgyMywgMHgwNywgMHgxNCwgMHg2YywgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgxMCwKKwkweDQ4LCAweGM5LCAweDAxLCAweDAwLCAweDI0LCAweDAwLCAweDAwLCAweDQwLCAweGYxLCAweDk5LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNiwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDI0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGM4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ3LAorCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YTAsIDB4MDAsIDB4MDAsIDB4YTQsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCisJMHg3OSwgMHg4NywgMHhhOCwgMHg0NiwgMHgxZiwgMHgxMCwgMHgwMCwgMHgwMCwgMHgyNCwgMHg4NywgMHgwMCwgMHgwMywKKwkweDBjLCAweGIwLCAweDAwLCAweDAwLCAweDI0LCAweDg3LCAweDAwLCAweDBkLCAweDE4LCAweGMwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MmUsIDB4MTQsIDB4MGEsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MDUsCisJMHg0OCwgMHhjZCwgMHgwMSwgMHgwMCwgMHhmZSwgMHg3ZiwgMHgwMCwgMHgwNSwgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDBjLCAweDAwLCAweDJhLCAweGYyLCAweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDgzLCAweDg3LCAweDIyLCAweDQwLAorCTB4MzEsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjAsIDB4MTgsIDB4MzgsIDB4OTYsIDB4MDEsIDB4MDAsCisJMHgxZSwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MSwgMHgwMCwgMHhmNiwKKwkweDgwLCAweGNlLCAweDAxLCAweDAwLCAweDg3LCAweDg3LCAweGE2LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4NDMsIDB4YzEsIDB4MDEsIDB4MDAsIDB4ODksIDB4ODcsIDB4MjIsIDB4MGIsCisJMHhlZCwgMHg2ZCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHhhMSwgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDAyLCAweDAwLCAweDAwLCAweGExLCAweDQ2LCAweGM5LCAweDAxLCAweDAwLCAweDBmLCAweDAwLCAweDAwLCAweGZhLAorCTB4OTQsIDB4ODgsIDB4MDEsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4NGEsIDB4ODYsIDB4ZTQsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmNiwgMHgwZSwgMHhiMCwgMHgwMSwgMHgwMCwgMHg5MSwgMHg4NywgMHgyMiwgMHg0NywKKwkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDFmLCAweDQzLCAweDBlLCAweDUwLCAweDAwLCAweDAwLAorCTB4OTEsIDB4ODcsIDB4YTAsIDB4NDYsIDB4MGYsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCisJMHgwZiwgMHhjMCwgMHgwMSwgMHgwMCwgMHg5NSwgMHg4NywgMHgyMiwgMHg0OCwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDkxLCAweGIwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDBmLCAweGEyLAorCTB4NDIsIDB4MzEsIDB4MDAsIDB4MDAsIDB4OTgsIDB4ODcsIDB4MDAsIDB4NDAsIDB4ODksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwYywgMHgwMCwgMHgwMCwgMHhhMiwgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywKKwkweDg5LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQzLCAweDk1LCAweGQwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZmMsIDB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4OWIsIDB4ODcsIDB4YTAsIDB4NDEsCisJMHg5MCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg5MSwgMHhjMCwgMHgwMSwgMHgwMCwKKwkweGEwLCAweDg3LCAweDIyLCAweDQ3LCAweDFmLCAweDdjLCAweDAwLCAweDAwLCAweGEwLCAweDg3LCAweGEwLCAweDQzLAorCTB4ODksIDB4NmMsIDB4MDAsIDB4MDAsIDB4YTAsIDB4ODcsIDB4MjAsIDB4NDUsIDB4ODksIDB4NmMsIDB4MDAsIDB4MDAsCisJMHhhMCwgMHg4NywgMHhhMCwgMHg0MSwgMHgwZSwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKKwkweDBmLCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDg5LCAweGMwLCAweDAxLCAweDAwLAorCTB4OTgsIDB4ODcsIDB4YTIsIDB4NDEsIDB4OTUsIDB4NTAsIDB4MDAsIDB4MDAsIDB4YTksIDB4ODcsIDB4MjIsIDB4NDgsCisJMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHg0OCwgMHg5MiwgMHhmNCwgMHgwMSwgMHgwMCwKKwkweGZmLCAweGZmLCAweDAwLCAweDQ4LCAweDkwLCAweDg4LCAweDAxLCAweDAwLCAweGE3LCAweDg3LCAweDkwLCAweDQ4LAorCTB4OTIsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4OTMsIDB4YzAsIDB4MDEsIDB4MDAsCisJMHgwYSwgMHgwMCwgMHgwMCwgMHhhMiwgMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2NiwgMHgyMCwKKwkweDkzLCAweGE0LCAweDAxLCAweDAwLCAweDMwLCAweDgwLCAweDAwLCAweDEwLCAweDQ0LCAweGM5LCAweDAxLCAweDAwLAorCTB4MTIsIDB4MDAsIDB4MDAsIDB4MTQsIDB4ZjAsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTcsCisJMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgxMiwgMHgwMCwgMHgwMCwgMHgwNSwgMHhlMCwgMHhjZCwgMHgwMSwgMHgwMCwKKwkweDMwLCAweDAwLCAweDAwLCAweDEwLCAweDgwLCAweGM4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LAorCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCisJMHhhZiwgMHg4NywgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhiYywgMHg4NywgMHgyMiwgMHg1YywKKwkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDNjLCAweDQ0LCAweDIzLCAweGUwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MmQsIDB4MTAsIDB4NDgsIDB4YzEsIDB4MDEsIDB4MDAsIDB4YjksIDB4ODcsIDB4MjIsIDB4NDAsCisJMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NiwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweGI2LCAweDg3LCAweGE4LCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MWIsIDB4ODQsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHhiYywgMHg4NywgMHg4NywgMHg1YywgMHgxZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwKKwkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweGZiLCAweDk1LCAweDAwLCAweDQxLCAweDIzLCAweDQwLCAweDAxLCAweDAwLAorCTB4YmUsIDB4ODcsIDB4YTIsIDB4NDcsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4NTIsIDB4ODksIDB4MDAsIDB4MTcsCisJMHgxMCwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZiwgMHgwMywgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweGMxLCAweDg3LCAweGEwLCAweDA3LCAweDE2LCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAorCTB4MTcsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGIsIDB4ZTQsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHgxNywgMHhmMCwgMHgwMSwgMHgwMCwgMHhjNSwgMHg4NywgMHg5MCwgMHhmMiwKKwkweDE2LCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDE3LCAweGMwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4NjYsIDB4MjAsIDB4MTcsIDB4YTQsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MTQsCisJMHgyYSwgMHhjOCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHgyYiwgMHhlMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGYyLCAweDJhLCAweDk0LCAweDAxLCAweDAwLCAweDMwLCAweDgwLCAweDAwLCAweDEwLAorCTB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4Y2YsIDB4ODcsIDB4MjIsIDB4NDAsIDB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwKKwkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweGNjLCAweDg3LCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4MWIsIDB4ODQsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MTcsCisJMHgxMCwgMHhkYywgMHgwMSwgMHgwMCwgMHg1MiwgMHg4OSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDkwLCAweDk1LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGQ1LCAweDg3LCAweDIyLCAweDVjLAorCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MWIsIDB4ODQsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHg2NiwgMHg5NiwgMHgwMCwgMHg1YywgMHgxZiwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgwNSwKKwkweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGUxLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MmQsIDB4MDMsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsCisJMHgzYywgMHhiMCwgMHgwMSwgMHgwMCwgMHgyOCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwMiwgMHhjOCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDM0LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJkLCAweDA1LAorCTB4MzIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MjIsIDB4MDAsIDB4MDAsIDB4MDUsIDB4MGEsIDB4YzgsIDB4MDEsIDB4MDAsCisJMHgxMCwgMHgwMCwgMHgwMCwgMHgwMywgMHg0OCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwKKwkweDE4LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDA0LCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MGUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MGMsIDB4MDAsIDB4MDAsIDB4YTQsCisJMHgwYywgMHhjOCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgxNywgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDIzLCAweGIwLCAweDAxLCAweDAwLCAweDFiLCAweDg4LCAweDIyLCAweDAxLAorCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4M2MsIDB4NDQsIDB4MjMsIDB4ZTAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgyZSwgMHhhNCwgMHg4MCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwKKwkweDQ4LCAweGMxLCAweDAxLCAweDAwLCAweGVhLCAweDg3LCAweGEzLCAweDA3LCAweDAyLCAweDZjLCAweDAwLCAweDAwLAorCTB4ZWIsIDB4ODcsIDB4NjgsIDB4MDEsIDB4MWEsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjgsIDB4MDcsCisJMHgxYSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwZCwgMHgwMiwgMHhkMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDA1LCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBjLAorCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwZCwgMHgwYSwgMHhjMCwgMHgwMSwgMHgwMCwgMHhmZCwgMHg4NywgMHgyMiwgMHg0MCwKKwkweDAzLCAweDZjLCAweDAwLCAweDAwLCAweGY3LCAweDg3LCAweDIyLCAweDQyLCAweDIzLCAweDZjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MjMsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsCisJMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhhMCwgMHgwMCwgMHgwMCwgMHhhNCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKKwkweDM3LCAweDg4LCAweDI4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweGY0LCAweDg3LCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4ODAsIDB4YzAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDYyLCAweGIxLCAweDAxLCAweDAwLCAweGY5LCAweDg3LCAweGE4LCAweDQwLCAweDIzLCAweDMwLCAweDAwLCAweDAwLAorCTB4MWIsIDB4ODQsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MzcsIDB4ODgsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg4MCwgMHhjMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ3LCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4ODcsIDB4YTgsIDB4NDAsIDB4MjMsIDB4MzAsIDB4MDAsIDB4MDAsCisJMHgxYiwgMHg4NCwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgyMiwgMHgwMCwgMHgwMCwgMHgxOSwKKwkweDQ4LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJkLCAweDE0LCAweDQ4LCAweGMxLCAweDAxLCAweDAwLAorCTB4MGYsIDB4MDAsIDB4MDAsIDB4ZjIsIDB4M2EsIDB4ODgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsCisJMHgzYiwgMHhlMCwgMHgwMSwgMHgwMCwgMHgwZSwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwMiwgMHhjOCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDFkLCAweDAyLCAweGMwLCAweDAxLCAweDAwLCAweDBiLCAweDg4LCAweDIzLCAweDFhLAorCTB4MDIsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsIDB4MDMsIDB4YzAsIDB4MDEsIDB4MDAsCisJMHgzNywgMHg4OCwgMHgwMCwgMHgwMSwgMHgzNCwgMHhjMCwgMHgwMCwgMHgwMCwgMHgwYywgMHgwMCwgMHgyZCwgMHgxZCwKKwkweDQ4LCAweGMxLCAweDAxLCAweDAwLCAweGYwLCAweDAwLCAweDAwLCAweGYyLCAweDMwLCAweDg4LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4MzEsIDB4ZjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsCisJMHgwMiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxZCwgMHgwMiwgMHhjMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAyLCAweGMwLCAweDAxLCAweDAwLCAweDEzLCAweDg4LCAweDIyLCAweDFhLAorCTB4MDIsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MzcsIDB4ODgsIDB4MDAsIDB4MDEsIDB4MzQsIDB4YzAsIDB4MDAsIDB4MDAsCisJMHgyMiwgMHgwMCwgMHgwMCwgMHgxOSwgMHg0OCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMiwgMHgwMCwgMHgyZCwgMHgxNCwKKwkweDQ4LCAweGMxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY2LCAweDE0LCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MWQsIDB4MTQsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsCisJMHgxNCwgMHhkMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxZSwgMHgyNCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDEyLCAweDAwLCAweDAwLCAweDE3LCAweDEwLCAweGM4LCAweDAxLCAweDAwLCAweDM3LCAweDg4LCAweDAwLCAweDFhLAorCTB4MTAsIDB4YzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4M2MsIDB4NDQsIDB4MjMsIDB4ZTAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhhNCwgMHg4NiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZSwgMHgxMCwKKwkweDQ4LCAweGMxLCAweDAxLCAweDAwLCAweDIwLCAweDg4LCAweGEzLCAweDEyLCAweDBlLCAweDZjLCAweDAwLCAweDAwLAorCTB4MjEsIDB4ODgsIDB4NjgsIDB4MDcsIDB4MWEsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjgsIDB4MTIsCisJMHgxYSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgyNCwgMHg4OCwgMHg4MCwgMHgwOCwgMHhmMCwgMHgzMSwgMHgwMCwgMHgwMCwKKwkweDAxLCAweDAwLCAweDAwLCAweDExLCAweDk4LCAweGM4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRjLAorCTB4MWUsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGMsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwKKwkweDg2LCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ2LCAweDYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDEsIDB4MWYsIDB4MDAsIDB4NDMsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4MjgsIDB4ODgsIDB4YTgsIDB4NWMsCisJMHgxZiwgMHgxMCwgMHgwMCwgMHgwMCwgMHg1NCwgMHg4OCwgMHgyMiwgMHgwZCwgMHgxNCwgMHg1MCwgMHgwMCwgMHgwMCwKKwkweDU0LCAweDg4LCAweDIyLCAweDBkLCAweDI0LCAweDUwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBkLAorCTB4MTAsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MmYsIDB4ODgsIDB4MjIsIDB4NDIsIDB4MjMsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgzNywgMHg4OCwgMHgwMCwgMHg0MSwgMHgyMywgMHhjMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NiwKKwkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLAorCTB4MzAsIDB4ODgsIDB4YTgsIDB4NWMsIDB4MWYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWIsIDB4ODQsIDB4MDAsIDB4ODgsCisJMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweGZiLCAweDk1LCAweDAwLCAweDQzLCAweDIzLCAweDMwLCAweDAxLCAweDAwLCAweDBlLCAweDAwLCAweDAwLCAweDBmLAorCTB4MWUsIDB4OGMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MjMsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHg1MywgMHg4OCwgMHhhMiwgMHgwZCwgMHgwZSwgMHg1MCwgMHgwMCwgMHgwMCwgMHg0MiwgMHg4OCwgMHgyMiwgMHg0NiwKKwkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ2LCAweDFmLCAweDgwLCAweDAxLCAweDAwLAorCTB4MzAsIDB4ODAsIDB4MDAsIDB4MTAsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4NDAsIDB4ODgsIDB4MjIsIDB4NDAsCisJMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDNkLCAweDg4LCAweGE4LCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MWIsIDB4ODQsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgyMCwgMHg4MCwgMHgwMCwgMHgwMywgMHg0NiwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1ZiwKKwkweGUxLCAweDkxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJkLCAweDA2LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MTgsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsCisJMHgwNCwgMHhiMCwgMHgwMSwgMHgwMCwgMHg0NywgMHg4OCwgMHgxZiwgMHhmMCwgMHgwZSwgMHgzMCwgMHgwMCwgMHgwMCwKKwkweGU0LCAweDg3LCAweDAwLCAweDRjLCAweDBkLCAweGMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDJlLCAweDVmLAorCTB4MGYsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ZTQsIDB4ODcsIDB4MjMsIDB4MDcsIDB4MTQsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgzMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg0OCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgyNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweGYxLCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweGYwLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTYsCisJMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjOCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ3LCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweGEwLCAweDAwLCAweDAwLCAweGE0LAorCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4NTAsIDB4ODgsIDB4YTgsIDB4NDYsIDB4MWYsIDB4MTAsIDB4MDAsIDB4MDAsCisJMHhlNCwgMHg4NywgMHgwMCwgMHgwMywgMHgwYywgMHhiMCwgMHgwMCwgMHgwMCwgMHhlNCwgMHg4NywgMHgwMCwgMHgwZCwKKwkweDE4LCAweGMwLCAweDAwLCAweDAwLCAweDcxLCAweDg4LCAweGEyLCAweDQ0LCAweDFmLCAweDdjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MTksIDB4MGEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MjIsIDB4MDAsIDB4MDAsIDB4MDUsCisJMHg0OCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwYSwgMHgwMCwgMHgyZCwgMHgxNCwgMHg0OCwgMHhjMSwgMHgwMSwgMHgwMCwKKwkweDAyLCAweDAwLCAweDIwLCAweDQwLCAweGU1LCAweGIxLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDIwLCAweDQwLAorCTB4ZTUsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MGQsIDB4MDAsIDB4MmQsIDB4MWQsIDB4NDgsIDB4YzEsIDB4MDEsIDB4MDAsCisJMHgwOSwgMHgwMCwgMHgwMCwgMHhmMywgMHgzOCwgMHg4OCwgMHgwMSwgMHgwMCwgMHgwZCwgMHgwMCwgMHgyMCwgMHg1MCwKKwkweGU3LCAweGIxLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDJkLCAweDQwLCAweDNmLCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjQsIDB4MzIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjAsIDB4NDAsCisJMHhlMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyMiwgMHgwMCwgMHgwMCwgMHgwNSwgMHg0OCwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDJkLCAweDE0LCAweDQ4LCAweGMxLCAweDAxLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDFkLAorCTB4OTQsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4OTEsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHg2NiwgMHg4OCwgMHhhMCwgMHhmYywgMHg5MCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKKwkweDkxLCAweGMwLCAweDAxLCAweDAwLCAweDY0LCAweDg4LCAweGEyLCAweDQxLCAweDk1LCAweDUwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4ODAsIDB4MDAsIDB4MDUsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDgsCisJMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHg0OCwgMHhjMSwgMHgwMSwgMHgwMCwKKwkweDAyLCAweDAwLCAweDAwLCAweDE4LCAweDk0LCAweGY0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJkLCAweDE4LAorCTB4OTAsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NmUsIDB4ODgsIDB4YTAsIDB4ZmMsIDB4OTAsIDB4NDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg5MSwgMHhjMCwgMHgwMSwgMHgwMCwgMHg2YywgMHg4OCwgMHhhMiwgMHg0MSwKKwkweDk1LCAweDUwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ4LCAweGUwLCAweGIxLCAweDAxLCAweDAwLAorCTB4MTAsIDB4MDAsIDB4MjAsIDB4NDAsIDB4ZTUsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MjIsIDB4MDAsIDB4MDAsIDB4MDUsCisJMHg0OCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHg0OCwgMHhjMSwgMHgwMSwgMHgwMCwKKwkweDA0LCAweDgwLCAweDAwLCAweDA1LCAweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LAorCTB4ODAsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4MTYsIDB4YzAsIDB4MDEsIDB4MDAsCisJMHg3NiwgMHg4OCwgMHg0MiwgMHgzMCwgMHgzZCwgMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5ZSwKKwkweDg1LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDFhLCAweDQxLCAweDNkLCAweGMzLCAweDAxLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MjAsIDB4NDIsIDB4ZWMsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWUsCisJMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMiwgMHgwMCwgMHgyZSwgMHgxZCwgMHg4MiwgMHhjMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDY2LCAweDE4LCAweDgyLCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLAorCTB4ODAsIDB4YzAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ODgsIDB4YTAsIDB4NDEsIDB4ODAsIDB4NDQsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4MSwgMHhjMCwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDkyLCAweGY0LCAweDAxLCAweDAwLCAweDBhLCAweDAwLCAweDJlLCAweDMwLCAweDgxLCAweDg0LCAweDAxLCAweDAwLAorCTB4ODQsIDB4ODgsIDB4OTAsIDB4NDAsIDB4OTIsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCisJMHg5MywgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2NiwgMHgyMCwgMHg5MywgMHhhNCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDFkLCAweDQ4LCAweGMxLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDIwLCAweDE5LAorCTB4ZTgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWUsIDB4MTYsIDB4YzAsIDB4MDEsIDB4MDAsCisJMHg4YSwgMHg4OCwgMHhhMCwgMHgxOSwgMHgxNiwgMHg0NCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKKwkweDE3LCAweGMwLCAweDAxLCAweDAwLCAweDBkLCAweDAwLCAweDJmLCAweDFlLCAweDMyLCAweGMwLCAweDAxLCAweDAwLAorCTB4OGYsIDB4ODgsIDB4YTIsIDB4NDAsIDB4MTUsIDB4NmMsIDB4MDAsIDB4MDAsIDB4OGUsIDB4ODgsIDB4YTAsIDB4MWMsCisJMHgxNiwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgxNywgMHhjMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDYzLCAweGYzLCAweDM4LCAweDk0LCAweDAxLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDA1LAorCTB4NDgsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MmUsIDB4MWUsIDB4OTgsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg2MCwgMHgxYSwgMHg5OCwgMHhjMCwgMHgwMSwgMHgwMCwgMHgwYywgMHgwMCwgMHgyMCwgMHg0MCwKKwkweGUxLCAweGIxLCAweDAxLCAweDAwLCAweDlkLCAweDg4LCAweDIyLCAweDQ2LCAweDFmLCAweDdjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsIDB4MWYsIDB4ODAsIDB4MDEsIDB4MDAsIDB4MzAsIDB4ODAsIDB4MDAsIDB4MTAsCisJMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHg5YiwgMHg4OCwgMHgyMiwgMHg0MCwgMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ3LCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLAorCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4OTgsIDB4ODgsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgxYiwgMHg4NCwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4MCwgMHgwMCwgMHgwMywKKwkweDQ2LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVmLCAweGUxLCAweDkxLCAweDAxLCAweDAwLAorCTB4MzAsIDB4ODAsIDB4MDAsIDB4MTAsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MWEsCisJMHhmMCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNywgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDEwLCAweDAwLCAweDAwLCAweDA1LCAweGUwLCAweGM5LCAweDAxLCAweDAwLCAweDMwLCAweDAwLCAweDAwLCAweDEwLAorCTB4ODAsIDB4YzgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgyMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHhhMywgMHg4OCwgMHhhOCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweGIxLCAweDg4LCAweDIyLCAweDVjLCAweDFmLCAweDdjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4M2MsIDB4NDQsIDB4MjMsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmQsIDB4MTAsCisJMHg0OCwgMHhjMSwgMHgwMSwgMHgwMCwgMHhhZCwgMHg4OCwgMHgyMiwgMHg0MCwgMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ2LCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLAorCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4YWEsIDB4ODgsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgxYiwgMHg4NCwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1YywKKwkweDFmLCAweDgwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDQ4LCAweGIxLCAweDAxLCAweDAwLAorCTB4ZmIsIDB4OTUsIDB4MDAsIDB4NDEsIDB4MjMsIDB4NDAsIDB4MDEsIDB4MDAsIDB4MGUsIDB4MDAsIDB4MDAsIDB4MGYsCisJMHgxZSwgMHg4YywgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgyZiwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDBiLCAweGU0LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLAorCTB4MTcsIDB4ZjAsIDB4MDEsIDB4MDAsIDB4YjYsIDB4ODgsIDB4OTAsIDB4ZjIsIDB4MTYsIDB4NDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgxNywgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2NiwgMHgyMCwKKwkweDE3LCAweGE0LCAweDAxLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDE0LCAweDJhLCAweGM4LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MWQsIDB4MmEsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsCisJMHgyYiwgMHhlMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMiwgMHgyYSwgMHg5NCwgMHgwMSwgMHgwMCwKKwkweDMwLCAweDgwLCAweDAwLCAweDEwLCAweDQyLCAweGM5LCAweDAxLCAweDAwLCAweGMxLCAweDg4LCAweDIyLCAweDQwLAorCTB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHhiZSwgMHg4OCwgMHhhOCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDFiLCAweDg0LCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4MTcsIDB4MTAsIDB4ZGMsIDB4MDEsIDB4MDAsIDB4ZGUsIDB4ODgsIDB4MjIsIDB4NDAsCisJMHgxNSwgMHg2YywgMHgwMCwgMHgwMCwgMHhjOSwgMHg4OCwgMHhhMiwgMHg0NCwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDFmLCAweDkwLCAweDAxLCAweDAwLCAweGM4LCAweDg4LCAweDIyLCAweDlmLAorCTB4MTMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4ODgsIDB4MWMsIDB4Y2MsIDB4MDEsIDB4MDAsCisJMHg2YiwgMHg4NCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKKwkweDNmLCAweGMzLCAweDAxLCAweDAwLCAweDRlLCAweDk5LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4Y2MsIDB4ODgsIDB4YTIsIDB4NDEsIDB4ODcsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWUsCisJMHgzZSwgMHhjMCwgMHgwMSwgMHgwMCwgMHhkZSwgMHg4OCwgMHgyMiwgMHg0MCwgMHgxNSwgMHg2YywgMHgwMCwgMHgwMCwKKwkweGNmLCAweDg4LCAweDIwLCAweDFlLCAweDE0LCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBhLAorCTB4M2MsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YzcsIDB4OTUsIDB4MDAsIDB4MWUsIDB4MjQsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHhkNCwgMHg4OCwgMHgyMiwgMHgwOCwgMHgyZSwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MiwKKwkweDExLCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFhLCAweDEwLCAweGMwLCAweDAxLCAweDAwLAorCTB4MzcsIDB4ODgsIDB4MDAsIDB4NDAsIDB4MTcsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NmIsIDB4ODQsIDB4MDAsIDB4ODgsCisJMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHhjNywgMHg5NSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweGQxLCAweDg4LCAweGEyLCAweDA4LCAweDJlLCAweDMwLCAweDAwLCAweDAwLCAweDgwLCAweDgwLCAweDAwLCAweGE2LAorCTB4MDQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODcsIDB4OTgsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHgwMywgMHg0NCwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHgwNCwKKwkweGUwLCAweDMxLCAweDAwLCAweDAwLCAweDNkLCAweDk5LCAweDAwLCAweDFmLCAweDhjLCAweDMwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MGYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4ODksIDB4MDAsIDB4NWMsCisJMHgxZiwgMHg5MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMywgMHg0NCwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDA0LCAweDAwLCAweDIyLCAweDA0LCAweGUwLCAweDMxLCAweDAwLCAweDAwLCAweDRlLCAweDk5LCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4ZTMsIDB4ODgsIDB4YTIsIDB4NDEsIDB4ODcsIDB4N2MsIDB4MDAsIDB4MDAsCisJMHhlNCwgMHg4OCwgMHgwMCwgMHgxZSwgMHgzZSwgMHhjMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxZiwKKwkweDhjLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDA1LCAweGIwLCAweDAxLCAweDAwLAorCTB4M2QsIDB4OTksIDB4MDAsIDB4NDAsIDB4MGYsIDB4MzAsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4ODksIDB4MDAsIDB4NWMsCisJMHgxZiwgMHg5MCwgMHgwMCwgMHgwMCwgMHhlZiwgMHg4OCwgMHg5YywgMHgwZiwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDVjLCAweDFmLCAweDgwLCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDEwLAorCTB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4ZWYsIDB4ODgsIDB4MjIsIDB4NDAsIDB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwKKwkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweGVjLCAweDg4LCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4MWIsIDB4ODQsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZjQsIDB4ODgsIDB4MjIsIDB4MDcsCisJMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHg0MiwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDA3LCAweDQyLCAweGMxLCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweGExLAorCTB4NDYsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWYsIDB4ZTEsIDB4OTEsIDB4MDEsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgyZSwgMHgwMywgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhmNywgMHg4OCwgMHgyMCwgMHg5NCwKKwkweDE1LCAweDZjLCAweDAwLCAweDAwLCAweGY4LCAweDg4LCAweDAwLCAweDk0LCAweGUxLCAweGIxLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MGEsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZmIsIDB4ODgsIDB4MjIsIDB4NDAsCisJMHgzMSwgMHg2YywgMHgwMCwgMHgwMCwgMHgwYywgMHgwMCwgMHgwMCwgMHg0MCwgMHg0NSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDYwLCAweDE4LCAweDM4LCAweDk2LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJlLCAweDEwLAorCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywKKwkweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ODksIDB4YTgsIDB4NDAsCisJMHgyMywgMHgzMCwgMHgwMCwgMHgwMCwgMHgxYiwgMHg4NCwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDJkLCAweDUyLCAweDExLCAweGMwLCAweDAxLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDAzLAorCTB4NDgsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MTgsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgwNCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwKKwkweDBlLCAweGIwLCAweDAxLCAweDAwLCAweDBjLCAweDAwLCAweDAwLCAweGE0LCAweDBjLCAweGM4LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4M2MsIDB4NDQsIDB4MjMsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTQsCisJMHg4NiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZSwgMHgxMCwgMHg0OCwgMHhjMSwgMHgwMSwgMHgwMCwKKwkweDBlLCAweDg5LCAweGEzLCAweDEyLCAweDBlLCAweDZjLCAweDAwLCAweDAwLCAweDBmLCAweDg5LCAweDY4LCAweDA3LAorCTB4MWEsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjgsIDB4MTIsIDB4MWEsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg4NiwgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwKKwkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBjLCAweGYwLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsCisJMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMSwgMHgxZiwgMHgwMCwgMHg0MywgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKKwkweDE0LCAweDg5LCAweGE4LCAweDVjLCAweDFmLCAweDEwLCAweDAwLCAweDAwLCAweDQ1LCAweDg5LCAweDIyLCAweDBkLAorCTB4MTQsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MWEsIDB4ODksIDB4MjIsIDB4MGQsIDB4MjQsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwZCwgMHgxMCwgMHhjMCwgMHgwMSwgMHgwMCwgMHgxZSwgMHg4OSwgMHgwMCwgMHgwZCwKKwkweDI0LCAweGQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDJiLCAweGMwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MTUsIDB4YTIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHgxMCwgMHhjOCwgMHgwMSwgMHgwMCwgMHhmMCwgMHgwNywgMHgwMCwgMHg0MCwgMHgyNSwgMHg5OCwgMHgwMSwgMHgwMCwKKwkweDIwLCAweDg5LCAweDIyLCAweDQyLCAweDIzLCAweDZjLCAweDAwLCAweDAwLCAweDI3LCAweDg5LCAweDAwLCAweDQxLAorCTB4MjMsIDB4YzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHgyMSwgMHg4OSwgMHhhOCwgMHg1YywKKwkweDFmLCAweDAwLCAweDAwLCAweDAwLCAweDFiLCAweDg0LCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YzIsIDB4OTQsIDB4MDAsIDB4NDMsCisJMHgyMywgMHgzMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgyMywgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDA0LCAweDAwLCAweDIyLCAweDBkLCAweDE0LCAweDUwLCAweDAwLCAweDAwLCAweDQ0LCAweDg5LCAweGEyLCAweDBkLAorCTB4MGUsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MzMsIDB4ODksIDB4MjIsIDB4NDYsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NiwgMHgxZiwgMHg4MCwgMHgwMSwgMHgwMCwgMHgzMCwgMHg4MCwgMHgwMCwgMHgxMCwKKwkweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDMxLCAweDg5LCAweDIyLCAweDQwLCAweGUzLCAweDZkLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsCisJMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHgyZSwgMHg4OSwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDFiLCAweDg0LCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDIwLCAweDgwLCAweDAwLCAweDAzLAorCTB4NDYsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWYsIDB4ZTEsIDB4OTEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgyZCwgMHgwNiwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwKKwkweDE4LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDA0LCAweGIwLCAweDAxLCAweDAwLAorCTB4MzgsIDB4ODksIDB4MWYsIDB4ZjAsIDB4MGUsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDksIDB4ODksIDB4MDAsIDB4NGMsCisJMHgwZCwgMHhjMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZSwgMHg1ZiwgMHgwZiwgMHg4MCwgMHgwMSwgMHgwMCwKKwkweDA5LCAweDg5LCAweDIzLCAweDA3LCAweDE0LCAweDZjLCAweDAwLCAweDAwLCAweDMwLCAweDAwLCAweDAwLCAweDEwLAorCTB4NDgsIDB4YzksIDB4MDEsIDB4MDAsIDB4MjQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjEsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE2LCAweGYwLCAweGIxLCAweDAxLCAweDAwLAorCTB4MjQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YzgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsCisJMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhhMCwgMHgwMCwgMHgwMCwgMHhhNCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKKwkweDQxLCAweDg5LCAweGE4LCAweDQ2LCAweDFmLCAweDEwLCAweDAwLCAweDAwLCAweDA5LCAweDg5LCAweDAwLCAweDAzLAorCTB4MGMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDksIDB4ODksIDB4MDAsIDB4MGQsIDB4MTgsIDB4YzAsIDB4MDAsIDB4MDAsCisJMHg0ZSwgMHg4OSwgMHgyMiwgMHg1YywgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1YywKKwkweDFmLCAweDgwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDNjLCAweDQ0LCAweDIzLCAweGUwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MmQsIDB4MTAsIDB4NDgsIDB4YzEsIDB4MDEsIDB4MDAsIDB4NGUsIDB4ODksIDB4MjIsIDB4NDAsCisJMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NiwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDRiLCAweDg5LCAweGE4LCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MWIsIDB4ODQsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhjMiwgMHg5NCwgMHgwMCwgMHg0MSwKKwkweDIzLCAweDQwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE3LCAweDEwLCAweGIwLCAweDAxLCAweDAwLAorCTB4NTIsIDB4ODksIDB4MDAsIDB4NDAsIDB4MmIsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDMsCisJMHg0NCwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDU3LCAweDg5LCAweDIyLCAweDlmLCAweDEzLCAweDZjLCAweDAwLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDg4LAorCTB4MWMsIDB4Y2MsIDB4MDEsIDB4MDAsIDB4NmIsIDB4ODQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHg0ZSwgMHg5OSwgMHgwMCwgMHg0MSwgMHgzZiwgMHg0MywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDhkLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDA1LCAweGIwLCAweDAxLCAweDAwLAorCTB4M2QsIDB4OTksIDB4MDAsIDB4NDAsIDB4MGYsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MTUsIDB4OGEsIDB4MDAsIDB4NWMsCisJMHgxZiwgMHg5MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwZSwgMHhmNCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDNhLCAweDAxLCAweDg0LCAweDAxLCAweDAwLCAweDAzLCAweDAwLCAweDAwLCAweDA3LAorCTB4MWEsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4MGIsIDB4OTYsIDB4MDAsIDB4MDcsIDB4MTYsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHg2NiwgMHg4OSwgMHgyMiwgMHg0MSwgMHg4MSwgMHg2YywgMHgwMCwgMHgwMCwgMHg2NCwgMHg4OSwgMHgyMiwgMHg0MiwKKwkweDgxLCAweDZjLCAweDAwLCAweDAwLCAweDFiLCAweDg0LCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAorCTB4NjUsIDB4ODksIDB4MjIsIDB4NWYsIDB4MGYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4ODksIDB4MDAsIDB4NDAsCisJMHgwZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHg2ZSwgMHg4OSwgMHhhMiwgMHg1YSwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwKKwkweDg2LCAweDk1LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDZlLCAweDg5LCAweDIyLCAweDIwLAorCTB4ODUsIDB4NmMsIDB4MDAsIDB4MDAsIDB4NmIsIDB4ODksIDB4OWMsIDB4MGYsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgxYiwgMHg4NCwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHg2NiwgMHg5NiwgMHgwMCwgMHg1YywKKwkweDFmLCAweDAwLCAweDAxLCAweDAwLCAweDg1LCAweDk4LCAweDAwLCAweDQyLCAweDYxLCAweDMxLCAweDAxLCAweDAwLAorCTB4MWIsIDB4ODQsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4Y2UsIDB4OTksIDB4MDAsIDB4MDcsCisJMHg5NiwgMHgzMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGYwLCAweDE4LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4ODAsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YTgsIDB4OGEsIDB4YTIsIDB4NWYsIDB4ODEsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHhhOCwgMHgwMCwgMHgyZCwgMHg0MywgMHgxOSwgMHg4MCwgMHgwMSwgMHgwMCwgMHgzNywgMHgwMCwgMHgyZCwgMHhmMCwKKwkweDI0LCAweGIwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweGYzLCAweDhlLCAweGY0LCAweDAxLCAweDAwLAorCTB4MGYsIDB4MDAsIDB4MDAsIDB4ZjMsIDB4OTAsIDB4ODgsIDB4MDEsIDB4MDAsIDB4N2QsIDB4ODksIDB4MjIsIDB4NDgsCisJMHg4ZSwgMHg2YywgMHgwMCwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDU4LCAweDAwLCAweDNkLCAweDQzLCAweGU3LCAweGUxLCAweDAxLCAweDAwLCAweDdkLCAweDg5LCAweDFmLCAweGYwLAorCTB4MjQsIDB4NmMsIDB4MDAsIDB4MDAsIDB4N2MsIDB4ODksIDB4MjMsIDB4NDEsIDB4OGYsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHhhOCwgMHg4YSwgMHgwMCwgMHg0NywgMHg4MSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhhOCwgMHg4YSwgMHgwMCwgMHg0OCwKKwkweDgxLCAweGIwLCAweDAwLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLAorCTB4YjAsIDB4MDAsIDB4MmQsIDB4ZjAsIDB4MTQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ODIsIDB4ODksIDB4MjIsIDB4MGEsCisJMHg5MCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgyMSwgMHg5OSwgMHgwMCwgMHg0MCwgMHg5MSwgMHgzMCwgMHgwMSwgMHgwMCwKKwkweGE4LCAweDhhLCAweGEyLCAweDQwLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweGIwLCAweDAwLCAweDJkLCAweDQ1LAorCTB4ODEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4OGUsIDB4ODksIDB4MjIsIDB4ZjAsIDB4MmMsIDB4MzAsIDB4MDAsIDB4MDAsCisJMHhhMywgMHgwMCwgMHgyZCwgMHgzMCwgMHg4MywgMHhiMCwgMHgwMSwgMHgwMCwgMHhhYywgMHgwMCwgMHgyZCwgMHhmMywKKwkweDgyLCAweGUwLCAweDAxLCAweDAwLCAweDg4LCAweDg5LCAweGEzLCAweDQxLCAweDJjLCAweDZjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MTYsIDB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4OTgsIDB4MDAsIDB4MmQsIDB4ZjAsCisJMHg4MiwgMHhjMCwgMHgwMSwgMHgwMCwgMHg4OCwgMHgwMCwgMHgyZCwgMHhmMCwgMHg4MiwgMHhkMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGYyLCAweDk4LCAweGU4LCAweDAxLCAweDAwLCAweGE4LCAweDhhLCAweDIwLCAweDRjLAorCTB4ODIsIDB4NmMsIDB4MDAsIDB4MDAsIDB4N2MsIDB4MDAsIDB4MmQsIDB4NDEsIDB4OTgsIDB4ZTgsIDB4MDEsIDB4MDAsCisJMHhhOCwgMHg4YSwgMHgyMCwgMHhmMCwgMHg5OCwgMHg2YywgMHgwMCwgMHgwMCwgMHhmZiwgMHg4OSwgMHgyMiwgMHgwYSwKKwkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDQwLCAweDAyLCAweDAwLCAweDBjLCAweDdlLCAweDg5LCAweDAxLCAweDAwLAorCTB4ZmYsIDB4ODksIDB4YTYsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4YTgsIDB4OGEsIDB4MDAsIDB4NDksCisJMHg4MSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHhhNiwgMHg4MCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDk2LCAweDg5LCAweDIyLCAweDQzLCAweDIxLCAweDZmLCAweDAwLCAweDAwLCAweDEzLCAweDgwLCAweDAwLCAweDQwLAorCTB4ODAsIDB4ZGMsIDB4MDEsIDB4MDAsIDB4OTcsIDB4ODksIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgxYSwgMHg4MCwgMHgwMCwgMHg0MCwgMHg4MCwgMHhkYywgMHgwMSwgMHgwMCwgMHg5NywgMHg4OSwgMHhhMiwgMHg1ZSwKKwkweDBiLCAweDdkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDA4LCAweGIxLCAweDAxLCAweDAwLAorCTB4OTksIDB4ODksIDB4OWYsIDB4ODUsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4OWQsIDB4ODksIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg1ZiwgMHg4NCwgMHgyMiwgMHg0MCwgMHg1NywgMHg3ZCwgMHgwMCwgMHgwMCwKKwkweDAxLCAweDAwLCAweDAwLCAweDQwLCAweDU3LCAweDk5LCAweDAxLCAweDAwLCAweDlkLCAweDg5LCAweDQyLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4OTMsIDB4OTMsIDB4MDEsIDB4MDAsCisJMHg0OSwgMHg4NCwgMHgxYSwgMHg1YiwgMHg2OSwgMHg5MywgMHgwMCwgMHgwMCwgMHg3YiwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDYxLCAweDk5LCAweDAxLCAweDAwLCAweGEwLCAweDg5LCAweGE4LCAweGIxLCAweDgwLCAweDMwLCAweDAwLCAweDAwLAorCTB4YzksIDB4ODksIDB4MWQsIDB4NDAsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4YmEsIDB4ODksIDB4MjIsIDB4NDAsCisJMHhhZiwgMHg2ZiwgMHgwMCwgMHgwMCwgMHhiYSwgMHg4OSwgMHgyMiwgMHg1YiwgMHg4MSwgMHg3YywgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDIyLCAweDVkLCAweDczLCAweDdkLCAweDAwLCAweDAwLCAweDdkLCAweDAwLCAweDAwLCAweDQwLAorCTB4NjEsIDB4OTksIDB4MDEsIDB4MDAsIDB4YTYsIDB4ODksIDB4YTgsIDB4YjEsIDB4OTQsIDB4MzAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1ZiwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YSwKKwkweDYyLCAweGIxLCAweDAxLCAweDAwLCAweGE5LCAweDg5LCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4YWIsIDB4ODksIDB4NDMsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4YjksIDB4ODksIDB4MjIsIDB4NTcsCisJMHg3MywgMHg3ZCwgMHgwMCwgMHgwMCwgMHg3NywgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweGFkLCAweDg5LCAweGE4LCAweGIxLCAweDk0LCAweDMwLCAweDAwLCAweDAwLCAweDc3LCAweDAwLCAweDAwLCAweDQwLAorCTB4NjEsIDB4OTksIDB4MDEsIDB4MDAsIDB4YWYsIDB4ODksIDB4YTgsIDB4YjEsIDB4OTYsIDB4MzAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0OCwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YSwKKwkweDYyLCAweGIxLCAweDAxLCAweDAwLCAweGIyLCAweDg5LCAweGE4LCAweDRhLCAweDgwLCAweDMzLCAweDAwLCAweDAwLAorCTB4YjcsIDB4ODksIDB4MjIsIDB4NWYsIDB4OTUsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGIsCisJMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHhiNSwgMHg4OSwgMHhhOCwgMHg0YiwgMHhhYywgMHgzMywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDFiLCAweGE1LCAweDgyLCAweGIzLCAweDAxLCAweDAwLCAweGJhLCAweDg5LCAweDAwLCAweGJlLAorCTB4ODMsIDB4YzMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWIsIDB4NDAsIDB4ODEsIDB4YjMsIDB4MDEsIDB4MDAsCisJMHg0MCwgMHgxOCwgMHgwMCwgMHg0MCwgMHg0OSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHhhNiwKKwkweDg2LCAweGIwLCAweDAxLCAweDAwLCAweGM3LCAweDg5LCAweGEyLCAweDQwLCAweDg2LCAweDA0LCAweDAwLCAweDAwLAorCTB4MWIsIDB4ODQsIDB4OWMsIDB4NDAsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4NDAsCisJMHg4OCwgMHg4OCwgMHgwMSwgMHgwMCwgMHhlMywgMHg4OSwgMHgwMCwgMHg1MCwgMHg0NywgMHgzMSwgMHgwMSwgMHgwMCwKKwkweDM2LCAweDAwLCAweDAwLCAweDQ0LCAweDg4LCAweGNjLCAweDAxLCAweDAwLCAweGMzLCAweDg5LCAweDUyLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ZTMsIDB4ODksIDB4MDAsIDB4NDAsIDB4NDcsIDB4MzEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4OSwgMHhiMCwgMHgwMSwgMHgwMCwgMHhlMywgMHg4OSwgMHgwMCwgMHg0OCwKKwkweDQ3LCAweDMxLCAweDAxLCAweDAwLCAweGUzLCAweDg5LCAweDAwLCAweDA1LCAweDQ3LCAweDMxLCAweDAxLCAweDAwLAorCTB4MWIsIDB4ODQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MjgsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwgMHgxYiwgMHg4NCwgMHgwMCwgMHg0MSwgMHhlMSwgMHhjMSwgMHgwMCwgMHgwMCwKKwkweDc4LCAweDE4LCAweDAwLCAweDQwLCAweDQ5LCAweDk5LCAweDAxLCAweDAwLCAweGQwLCAweDg5LCAweDIyLCAweDU0LAorCTB4ODEsIDB4N2MsIDB4MDAsIDB4MDAsIDB4Y2IsIDB4ODksIDB4NDIsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHg4MiwgMHgwMCwgMHhiNCwgMHg2OSwgMHhkZiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYSwgMHg0NCwKKwkweDkzLCAweDkzLCAweDAxLCAweDAwLCAweDI4LCAweDAwLCAweDAwLCAweDQwLCAweDQ3LCAweDk5LCAweDAxLCAweDAwLAorCTB4ZTMsIDB4ODksIDB4MDAsIDB4NDEsIDB4ODksIDB4MzAsIDB4MDEsIDB4MDAsIDB4ZGUsIDB4ODksIDB4MGYsIDB4NDAsCisJMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHhmZiwgMHg3ZiwgMHgwMCwgMHg0MCwgMHg4OCwgMHg4OCwgMHgwMSwgMHgwMCwKKwkweGUzLCAweDg5LCAweDAwLCAweDUwLCAweDQ3LCAweDMxLCAweDAxLCAweDAwLCAweDM2LCAweDAwLCAweDAwLCAweDQ0LAorCTB4ODgsIDB4Y2MsIDB4MDEsIDB4MDAsIDB4ZDYsIDB4ODksIDB4OTksIDB4NDAsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0OCwgMHg4OSwgMHhkMCwgMHgwMSwgMHgwMCwgMHhkOCwgMHg4OSwgMHg5YiwgMHg0MCwKKwkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRjLCAweDg5LCAweGQwLCAweDAxLCAweDAwLAorCTB4ZGEsIDB4ODksIDB4MWYsIDB4NDQsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ZTMsIDB4ODksIDB4MDAsIDB4NDAsCisJMHg0NywgMHgzMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4OSwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweGUzLCAweDg5LCAweDAwLCAweDQ4LCAweDQ3LCAweDMxLCAweDAxLCAweDAwLCAweGUzLCAweDg5LCAweDAwLCAweDU4LAorCTB4NDcsIDB4MzEsIDB4MDEsIDB4MDAsIDB4MWIsIDB4ODQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgxMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4NiwgMHhmNCwgMHgwMSwgMHgwMCwgMHg2ZiwgMHgwMCwgMHgwMCwgMHg0MywKKwkweDg2LCAweDg4LCAweDAxLCAweDAwLCAweDFiLCAweDg0LCAweDI2LCAweDA1LCAweDQ3LCAweDMxLCAweDAwLCAweDAwLAorCTB4ZTMsIDB4ODksIDB4MDAsIDB4NDEsIDB4ODksIDB4MzAsIDB4MDEsIDB4MDAsIDB4MWIsIDB4ODQsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMCwgMHg0NCwgMHhmMCwgMHg0MSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQxLAorCTB4ZTEsIDB4YzEsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4Y2IsIDB4ODEsIDB4YzgsIDB4MDEsIDB4MDAsCisJMHhlOSwgMHg4OSwgMHgyMiwgMHg0MCwgMHhmMiwgMHg3ZiwgMHgwMCwgMHgwMCwgMHg4MSwgMHg4MCwgMHgwMCwgMHg2ZiwKKwkweDk3LCAweDMzLCAweDAxLCAweDAwLCAweGViLCAweDg5LCAweDIyLCAweDQwLCAweDczLCAweDdkLCAweDAwLCAweDAwLAorCTB4OWIsIDB4ODAsIDB4MDAsIDB4NDEsIDB4OGIsIDB4YjMsIDB4MDAsIDB4MDAsIDB4ZTYsIDB4ODksIDB4MjIsIDB4NTksCisJMHg3MywgMHg3ZCwgMHgwMCwgMHgwMCwgMHg3OSwgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweGU2LCAweDg5LCAweDI4LCAweGIxLCAweDdlLCAweDMxLCAweDAwLCAweDAwLCAweGVjLCAweDg5LCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjIsIDB4YzAsIDB4OTUsIDB4MzAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhkNiwgMHg5NywgMHhiMCwgMHgwMSwgMHgwMCwgMHhmNCwgMHg4OSwgMHgyMiwgMHg1ZCwKKwkweDczLCAweDdkLCAweDAwLCAweDAwLCAweDdkLCAweDAwLCAweDAwLCAweDQwLCAweDYxLCAweDk5LCAweDAxLCAweDAwLAorCTB4ZjIsIDB4ODksIDB4YTgsIDB4YjEsIDB4ODAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWUsCisJMHg3ZiwgMHg4MywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiZiwgMHhjNSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweDk4LCAweDAxLCAweDAwLCAweDI1LCAweDAxLCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4ZjcsIDB4ODksIDB4YTIsIDB4NDEsIDB4ODEsIDB4NTAsIDB4MDAsIDB4MDAsCisJMHhmOSwgMHg4OSwgMHg0MywgMHg1ZiwgMHg3ZiwgMHgxMywgMHgwMCwgMHgwMCwgMHgyNiwgMHgwMSwgMHgwMCwgMHhiZiwKKwkweGM1LCAweDMxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVmLCAweDdmLCAweDgzLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NWUsIDB4N2YsIDB4OTMsIDB4MDEsIDB4MDAsIDB4NzUsIDB4OTgsIDB4MDAsIDB4YmYsCisJMHhjNSwgMHgzMSwgMHgwMSwgMHgwMCwgMHgxYiwgMHg4NCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA2LCAweDhhLCAweDljLCAweDBmLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDEwLAorCTB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDYsIDB4OGEsIDB4MjIsIDB4NDAsIDB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwKKwkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDAzLCAweDhhLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4MWIsIDB4ODQsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NjIsIDB4OTUsIDB4MjIsIDB4MDIsCisJMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwNywgMHg4YSwgMHg0MiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDkzLCAweDkzLCAweDAxLCAweDAwLCAweDYyLCAweDk1LCAweDFhLCAweDAyLAorCTB4NjgsIDB4OTcsIDB4MDAsIDB4MDAsIDB4MTEsIDB4OGEsIDB4OWMsIDB4MGYsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHgxMCwgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgxMSwgMHg4YSwgMHgyMiwgMHg0MCwKKwkweGUzLCAweDZkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweDYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4MGUsIDB4OGEsIDB4YTgsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgxYiwgMHg4NCwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDZjLCAweDk1LCAweDIyLCAweDAyLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDEyLCAweDhhLCAweDQyLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4OTMsIDB4OTMsIDB4MDEsIDB4MDAsCisJMHg2YywgMHg5NSwgMHgxYSwgMHgwMiwgMHg2OCwgMHg5NywgMHgwMCwgMHgwMCwgMHgxYywgMHg4YSwgMHg5YywgMHgwZiwKKwkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDEwLCAweDQyLCAweGM5LCAweDAxLCAweDAwLAorCTB4MWMsIDB4OGEsIDB4MjIsIDB4NDAsIDB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsCisJMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKKwkweDE5LCAweDhhLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDFiLCAweDg0LCAweDAwLCAweDg4LAorCTB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NmYsIDB4ODQsIDB4MjIsIDB4MDIsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgxZCwgMHg4YSwgMHg0MiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwKKwkweDkzLCAweDkzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDFhLCAweDAyLCAweDY4LCAweDk3LCAweDAxLCAweDAwLAorCTB4NmYsIDB4ODQsIDB4MDAsIDB4NDAsIDB4MDUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4YTYsCisJMHg1NiwgMHhiMSwgMHgwMSwgMHgwMCwgMHg1NiwgMHg5NSwgMHgyZiwgMHg0MCwgMHgwNSwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDZkLCAweDhhLCAweGEyLCAweDQwLCAweGU3LCAweDZkLCAweDAwLCAweDAwLCAweGI4LCAweDk0LCAweDI5LCAweDQxLAorCTB4ZTcsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTQsIDB4ZWYsIDB4OTMsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmMiwgMHgwZSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgyOSwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDBkLCAweDk4LCAweDAxLCAweDAwLCAweDA5LCAweDAwLCAweDAwLCAweDA3LCAweDEyLCAweGU0LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4YTcsIDB4MTMsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDcsCisJMHgxYSwgMHhmNCwgMHgwMSwgMHgwMCwgMHgwNywgMHgwMCwgMHgwMCwgMHgwNywgMHgxNiwgMHg4OCwgMHgwMSwgMHgwMCwKKwkweGZmLCAweGZmLCAweDAwLCAweDEwLCAweDM0LCAweGQ4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLAorCTB4MzQsIDB4OTQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MjMsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgyMCwgMHgxOCwgMHgwMCwgMHg0MCwgMHgxMSwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHhiNSwgMHgwMCwgMHgwZCwKKwkweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDUxLCAweDhhLCAweDIyLCAweDBiLCAweGU2LCAweDdkLCAweDAwLCAweDAwLAorCTB4MzIsIDB4OGEsIDB4NDQsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDcsCisJMHg4NCwgMHg4OSwgMHgwMSwgMHgwMCwgMHgzOSwgMHg4YSwgMHgwNSwgMHhjMiwgMHgyNCwgMHgzMCwgMHgwMCwgMHgwMCwKKwkweDUxLCAweDk4LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJkLCAweDA1LAorCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NmUsIDB4OGEsIDB4MWMsIDB4ZjAsIDB4MTgsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHg1MSwgMHg4YSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYywgMHg0MCwKKwkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDQ4LCAweDhhLCAweGEwLCAweDQ4LCAweDIzLCAweDZjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4MzUsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MWEsCisJMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHg0MiwgMHg4YSwgMHgyMiwgMHg0MCwgMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQyLCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDFhLAorCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4M2YsIDB4OGEsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgxYiwgMHg4NCwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg5OCwgMHgwMCwgMHg0MCwKKwkweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDZlLCAweDhhLCAweDAwLCAweGY4LCAweDE4LCAweDMwLCAweDAxLCAweDAwLAorCTB4NDMsIDB4OGEsIDB4YTIsIDB4NDEsIDB4MjMsIDB4NTAsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MTAsCisJMHgzNCwgMHhkOCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHgzNCwgMHg5NCwgMHgwMSwgMHgwMCwKKwkweDIwLCAweDE4LCAweDAwLCAweDQwLCAweDExLCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJlLCAweDFhLAorCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwKKwkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDIwLCAweDAwLCAweDAwLCAweDFhLCAweDYyLCAweGRkLCAweDAxLCAweDAwLAorCTB4NGMsIDB4OGEsIDB4YTgsIDB4MDksIDB4ZTAsIDB4MzEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCisJMHgyMywgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHgzNSwgMHhjMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDExLCAweGMwLCAweDAxLCAweDAwLCAweDVkLCAweDhhLCAweDIyLCAweDQxLAorCTB4MGQsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MGYsIDB4YzAsIDB4MDEsIDB4MDAsCisJMHg1OSwgMHg4YSwgMHhhMCwgMHhhYSwgMHgwZiwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKKwkweDBmLCAweGIwLCAweDAxLCAweDAwLCAweDA5LCAweDAwLCAweDAwLCAweDA3LCAweDEyLCAweGU0LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4YTcsIDB4MTMsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHgxYiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgzMCwgMHg4YSwgMHgwMCwgMHg0MSwgMHgxNywgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAyLCAweDAwLCAweDA5LCAweDEyLCAweGM4LCAweDAxLCAweDAwLCAweDMwLCAweDhhLCAweDgzLCAweDQxLAorCTB4MTcsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MTcsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgzMCwgMHg4YSwgMHgwMCwgMHg0MSwgMHgxYiwgMHhjMCwgMHgwMCwgMHgwMCwgMHg2OCwgMHg4YSwgMHgyMywgMHg0MCwKKwkweDIzLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLCAweDM1LCAweGQwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4MWEsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4NjUsIDB4OGEsIDB4MjIsIDB4NDAsCisJMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDQwLCAweDAwLCAweDAwLCAweDFhLCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDYyLCAweDhhLCAweGE4LCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MWIsIDB4ODQsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgyMCwgMHg5OCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHg2ZSwgMHg4YSwgMHgwMCwgMHhmOCwKKwkweDE4LCAweDMwLCAweDAxLCAweDAwLCAweDY2LCAweDhhLCAweGEyLCAweDQxLCAweDIzLCAweDUwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MGYsIDB4YzAsIDB4MDEsIDB4MDAsIDB4NmIsIDB4OGEsIDB4YTAsIDB4YWEsCisJMHgwZiwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgwZiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweGI4LCAweDk0LCAweDIwLCAweDA3LCAweGU0LCAweGIxLCAweDAxLCAweDAwLCAweDU2LCAweDk1LCAweDIwLCAweDQwLAorCTB4ZTcsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4ODksIDB4MDAsIDB4NDAsIDB4MGYsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHhmZiwgMHhmZiwgMHgwMCwgMHgwYywgMHg4MCwgMHhkOCwgMHgwMSwgMHgwMCwgMHhjMCwgMHgwMiwgMHgwMCwgMHgwYywKKwkweDdlLCAweDg5LCAweDAxLCAweDAwLCAweDgwLCAweDhhLCAweDI2LCAweDU0LCAweDYxLCAweDMxLCAweDAwLCAweDAwLAorCTB4NzYsIDB4OGEsIDB4ODcsIDB4MGMsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MGYsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg2MiwgMHg5OSwgMHgwMSwgMHgwMCwgMHg3NiwgMHg4YSwgMHgyOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDc2LCAweDhhLCAweGEyLCAweDU0LCAweDc3LCAweDdkLCAweDAwLCAweDAwLCAweDcyLCAweDhhLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4N2IsIDB4OGEsIDB4MjIsIDB4NDYsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsCisJMHgwZCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MiwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGEyLCAweDU0LCAweDc3LCAweDdkLCAweDAxLCAweDAwLAorCTB4NzcsIDB4OGEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4ODAsIDB4OGEsIDB4MjIsIDB4NDksCisJMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHgwZSwgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MiwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweGE4LCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGEyLCAweDU0LAorCTB4NzcsIDB4N2QsIDB4MDEsIDB4MDAsIDB4N2IsIDB4OGEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgxMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MiwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGEyLCAweDU0LCAweDc3LCAweDdkLCAweDAxLCAweDAwLAorCTB4ODAsIDB4OGEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MzAsIDB4OTQsIDB4MmYsIDB4NTUsCisJMHhmMSwgMHg5MywgMHgwMSwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwMCwgMHhhNiwgMHg1NiwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDZmLCAweDg0LCAweGEyLCAweDQxLCAweGU1LCAweDUxLCAweDAwLCAweDAwLCAweDY0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ZTUsIDB4OTksIDB4MDEsIDB4MDAsIDB4ODgsIDB4OGEsIDB4NDIsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHg4YiwgMHg4YSwgMHhhMiwgMHg5MywgMHg1NywgMHg2ZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKKwkweDU3LCAweGMzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDFhLCAweGFiLCAweDI3LCAweGIzLCAweDAxLCAweDAwLAorCTB4NmYsIDB4ODQsIDB4MjIsIDB4NTAsIDB4ZmQsIDB4N2YsIDB4MDAsIDB4MDAsIDB4NmYsIDB4ODQsIDB4MjIsIDB4NTEsCisJMHhmZCwgMHg3ZiwgMHgwMCwgMHgwMCwgMHg2ZiwgMHg4NCwgMHhhMiwgMHg0MSwgMHgxZCwgMHg1MywgMHgwMCwgMHgwMCwKKwkweDUwLCAweDQ2LCAweDAwLCAweDQwLCAweDFkLCAweDliLCAweDAxLCAweDAwLCAweDM0LCAweDgyLCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MGUsIDB4MDAsIDB4MDAsIDB4NDgsIDB4YjIsIDB4Y2IsIDB4MDEsIDB4MDAsCisJMHhmYywgMHg4MSwgMHgwMCwgMHg0MCwgMHg0OSwgMHgzMSwgMHgwMSwgMHgwMCwgMHg5NywgMHg4YSwgMHgyMiwgMHg0MCwKKwkweGI1LCAweDZmLCAweDAwLCAweDAwLCAweDBlLCAweDAwLCAweDAwLCAweDQ4LCAweGIyLCAweGNiLCAweDAxLCAweDAwLAorCTB4ZmYsIDB4ODEsIDB4MDAsIDB4NDEsIDB4YjUsIDB4NTMsIDB4MDEsIDB4MDAsIDB4NmYsIDB4ODQsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MSwgMHhmZCwgMHg4MywgMHgwMSwgMHgwMCwKKwkweDQwLCAweDE2LCAweDAwLCAweDQwLCAweDQ1LCAweDk5LCAweDAxLCAweDAwLCAweDM1LCAweDgyLCAweDAwLCAweDQwLAorCTB4NDksIDB4MzEsIDB4MDEsIDB4MDAsIDB4MWUsIDB4MDAsIDB4MDAsIDB4NDgsIDB4YjIsIDB4Y2IsIDB4MDEsIDB4MDAsCisJMHhmYywgMHg4MSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkYSwKKwkweDkxLCAweGMwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQ4LCAweGIyLCAweGNiLCAweDAxLCAweDAwLAorCTB4ZmYsIDB4ODEsIDB4MDAsIDB4NDAsIDB4YjUsIDB4MzMsIDB4MDEsIDB4MDAsIDB4NjAsIDB4MTYsIDB4MjAsIDB4NDAsCisJMHhlNSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhkYiwgMHg4MiwgMHgwMCwgMHg0MCwgMHhiNSwgMHgzMywgMHgwMSwgMHgwMCwKKwkweDA4LCAweDAwLCAweDAwLCAweDQ4LCAweGIyLCAweGNiLCAweDAxLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweDRhLAorCTB4YjQsIDB4OGIsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4ODEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHgwYSwgMHgwMCwgMHgwMCwgMHg0OCwgMHhiMiwgMHhjYiwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHg0YSwKKwkweGI0LCAweGY3LCAweDAxLCAweDAwLCAweGZmLCAweDgxLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4NmYsIDB4ODQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDUsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMywgMHgwOCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDA0LCAweDAwLCAweDIwLCAweDQwLCAweGU2LCAweGIxLCAweDAxLCAweDAwLCAweDAzLCAweDAwLCAweDAwLCAweDQwLAorCTB4OTYsIDB4ZTQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4OTYsIDB4YzAsIDB4MDEsIDB4MDAsCisJMHhhZSwgMHg4YSwgMHgwMCwgMHg0YiwgMHgxMCwgMHhjOSwgMHgwMCwgMHgwMCwgMHhkMSwgMHg4ZCwgMHgwMCwgMHg0MSwKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHg4ZSwgMHgwMCwgMHg0MSwKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgzNywgMHg4ZSwgMHgwMCwgMHg0NSwKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDM3LCAweDhlLCAweDAwLCAweDQ1LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MzcsIDB4OGUsIDB4MDAsIDB4NDUsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MzcsIDB4OGUsIDB4MDAsIDB4NDUsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHg3NiwgMHg4ZSwgMHgwMCwgMHg0MywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg5ZiwgMHg4ZSwgMHgwMCwgMHg0MywKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweGEzLCAweDhlLCAweDAwLCAweDQ0LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MGIsIDB4OTAsIDB4MDAsIDB4NDUsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHhhZiwgMHg4ZSwgMHgwMCwgMHg0MywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhhZSwgMHg4ZSwgMHgwMCwgMHg0MywKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweGNmLCAweDhkLCAweDAwLCAweDQ1LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDZmLCAweDhmLCAweDAwLCAweDQyLAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4NmYsIDB4OGYsIDB4MDAsIDB4NDMsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHg2ZiwgMHg4ZiwgMHgwMCwgMHg0NCwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhjZiwgMHg4ZCwgMHgwMCwgMHg0NSwKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDliLCAweDhmLCAweDAwLCAweDQzLAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHhjZiwgMHg4ZCwgMHgwMCwgMHg0NSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweGI5LCAweDhmLCAweDAwLCAweDQzLCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweGI5LCAweDhmLCAweDAwLCAweDQ0LAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4Y2YsIDB4OGQsIDB4MDAsIDB4NDUsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHhiOSwgMHg4ZiwgMHgwMCwgMHg0MiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweGNmLCAweDhkLCAweDAwLCAweDQ1LAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZTEsIDB4OGYsIDB4MDAsIDB4NDQsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweGNmLCAweDhkLCAweDAwLCAweDQ1LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweGNmLCAweDhkLCAweDAwLCAweDQyLCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4ZjIsIDB4OGYsIDB4MDAsIDB4NDUsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZjIsIDB4OGYsIDB4MDAsIDB4NDUsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhjZiwgMHg4ZCwgMHgwMCwgMHg0NSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHhmNCwgMHg4ZiwgMHgwMCwgMHg0MiwKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweGY0LCAweDhmLCAweDAwLCAweDQzLCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4ZjQsIDB4OGYsIDB4MDAsIDB4NDQsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZjQsIDB4OGYsIDB4MDAsIDB4NDUsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweGZjLCAweDhmLCAweDAwLCAweDQ0LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4Y2YsIDB4OGQsIDB4MDAsIDB4NDUsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MGQsIDB4OTAsIDB4MDAsIDB4NDIsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHhmZCwgMHg4ZiwgMHgwMCwgMHg0MywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwZCwgMHg5MCwgMHgwMCwgMHg0NCwKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweGNmLCAweDhkLCAweDAwLCAweDQ1LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MGUsIDB4OTAsIDB4MDAsIDB4NDMsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHg5MCwgMHgwMCwgMHg0NCwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhjZiwgMHg4ZCwgMHgwMCwgMHg0NSwKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHhjZiwgMHg4ZCwgMHgwMCwgMHg0MSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDZkLCAweDhmLCAweDAwLCAweDQyLCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDZkLCAweDhmLCAweDAwLCAweDQzLAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4NmQsIDB4OGYsIDB4MDAsIDB4NDQsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHhjZiwgMHg4ZCwgMHgwMCwgMHg0NSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4Y2YsIDB4OGQsIDB4MDAsIDB4NDEsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwZiwgMHg5MCwgMHgwMCwgMHg0MiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDBmLCAweDkwLCAweDAwLCAweDQzLCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDBmLCAweDkwLCAweDAwLCAweDQ0LAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4Y2YsIDB4OGQsIDB4MDAsIDB4NDUsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDE2LCAweDkwLCAweDAwLCAweDQ1LAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDE4LCAweDkwLCAweDAwLCAweDQyLCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDI0LCAweDkwLCAweDAwLCAweDQzLCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4OGQsIDB4OTAsIDB4MDAsIDB4NDMsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4YTMsIDB4OGUsIDB4MDAsIDB4NDQsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwYiwgMHg5MCwgMHgwMCwgMHg0NSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDk1LCAweDkwLCAweDAwLCAweDQzLCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4YTMsIDB4OGUsIDB4MDAsIDB4NDQsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MGIsIDB4OTAsIDB4MDAsIDB4NDUsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHhhNiwgMHg5MCwgMHgwMCwgMHg0MywKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAorCTB4Y2YsIDB4OGQsIDB4MDAsIDB4NDUsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NzMsIDB4OGUsIDB4MDAsIDB4NDMsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHg5MSwgMHg5MCwgMHgwMCwgMHg0MywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhhMywgMHg4ZSwgMHgwMCwgMHg0NCwKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDBiLCAweDkwLCAweDAwLCAweDQ1LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwMCwgMHgyZCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGYzLCAweDA4LCAweGIwLCAweDAxLCAweDAwLCAweDA2LCAweDAwLCAweDIwLCAweDQ3LAorCTB4ZTYsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDcsIDB4OTYsIDB4ZTQsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywgMHg5NiwgMHhkMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywKKwkweDk2LCAweGQwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDk2LCAweGMwLCAweDAxLCAweDAwLAorCTB4NmUsIDB4OGIsIDB4MDAsIDB4NGIsIDB4MTAsIDB4YzksIDB4MDAsIDB4MDAsIDB4YmUsIDB4OTAsIDB4MDAsIDB4NDksCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhmNywgMHg5MCwgMHgwMCwgMHg0MiwKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweGZkLCAweDkwLCAweDAwLCAweDQ2LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MGIsIDB4OTEsIDB4MDAsIDB4NDIsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgyYywgMHg5MSwgMHgwMCwgMHg0MiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MjcsIDB4OTEsIDB4MDAsIDB4NGEsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MmYsIDB4OTEsIDB4MDAsIDB4NDMsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg4NywgMHg5MSwgMHgwMCwgMHg0NCwKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ODYsIDB4OTEsIDB4MDAsIDB4NGIsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4OTEsIDB4MDAsIDB4NDEsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5MSwgMHgwMCwgMHg0MywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDkxLCAweDAwLCAweDQ0LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDkxLCAweDAwLCAweDQ1LAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OTEsIDB4MDAsIDB4NDYsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHg5MSwgMHgwMCwgMHg0NywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5MSwgMHgwMCwgMHg0OCwKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDkxLCAweDAwLCAweDQ5LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4OTEsIDB4MDAsIDB4NGEsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OTEsIDB4MDAsIDB4NGIsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5MSwgMHgwMCwgMHg0YywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDkxLCAweDAwLCAweDRkLCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHhlNiwgMHg5MSwgMHgwMCwgMHg0MiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweGU2LCAweDkxLCAweDAwLCAweDQ0LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHhlNiwgMHg5MSwgMHgwMCwgMHg0YiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweGZlLCAweDkxLCAweDAwLCAweDQ1LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDE1LCAweDkyLCAweDAwLCAweDQ3LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZjIsIDB4OTEsIDB4MDAsIDB4NDUsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDZhLCAweDk0LCAweDAwLCAweDQ2LAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MmMsIDB4OTEsIDB4MDAsIDB4NDYsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwYiwgMHg5MSwgMHgwMCwgMHg0NiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDI1LCAweDkxLCAweDAwLCAweDQ3LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDI1LCAweDkxLCAweDAwLCAweDQ4LAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDI3LCAweDkxLCAweDAwLCAweDRhLCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHg4NywgMHg5MSwgMHgwMCwgMHg0NSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgyZiwgMHg5MSwgMHgwMCwgMHg0MywKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDI1LCAweDkxLCAweDAwLCAweDQ3LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MjUsIDB4OTEsIDB4MDAsIDB4NDgsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDg2LCAweDkxLCAweDAwLCAweDRjLAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgxYiwgMHg5MiwgMHgwMCwgMHg0NCwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDFiLCAweDkyLCAweDAwLCAweDQyLCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweGJhLCAweDhkLCAweDAwLCAweDQ3LAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4YmEsIDB4OGQsIDB4MDAsIDB4NDgsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MWIsIDB4OTIsIDB4MDAsIDB4NGIsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDkxLCAweDAwLCAweDQxLCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDNlLCAweDkyLCAweDAwLCAweDQ3LAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgyNiwgMHg5MiwgMHgwMCwgMHg0NywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDI2LCAweDkyLCAweDAwLCAweDQ3LAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDI2LCAweDkyLCAweDAwLCAweDQ3LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDNlLCAweDkyLCAweDAwLCAweDQ3LAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MjUsIDB4OTEsIDB4MDAsIDB4NDcsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgyNSwgMHg5MSwgMHgwMCwgMHg0OCwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MjYsIDB4OTIsIDB4MDAsIDB4NDcsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NGQsIDB4OTIsIDB4MDAsIDB4NDcsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg0ZCwgMHg5MiwgMHgwMCwgMHg0OCwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4YWYsIDB4OTIsIDB4MDAsIDB4NDAsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4Y2MsIDB4OTIsIDB4MDAsIDB4NDcsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhjMCwgMHg5MiwgMHgwMCwgMHg0OCwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDFlLCAweDkyLCAweDAwLCAweDQ3LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDFlLCAweDkyLCAweDAwLCAweDQ3LAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4Y2MsIDB4OTIsIDB4MDAsIDB4NDcsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHhkMywgMHg5MiwgMHgwMCwgMHg0NywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhkMywgMHg5MiwgMHgwMCwgMHg0OCwKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4YzAsIDB4OTIsIDB4MDAsIDB4NDgsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MWUsIDB4OTIsIDB4MDAsIDB4NDcsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgxZSwgMHg5MiwgMHgwMCwgMHg0NywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweGMwLCAweDkyLCAweDAwLCAweDQ4LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhlNiwgMHg5MSwgMHgwMCwgMHg0MywKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4ZTYsIDB4OTEsIDB4MDAsIDB4NDUsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZTYsIDB4OTEsIDB4MDAsIDB4NDYsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgyNSwgMHg5MSwgMHgwMCwgMHg0NywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDI1LCAweDkxLCAweDAwLCAweDQ4LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZTYsIDB4OTEsIDB4MDAsIDB4NGEsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhlNiwgMHg5MSwgMHgwMCwgMHg0YywKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgzZCwgMHg5MiwgMHgwMCwgMHg0NywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDMxLCAweDkyLCAweDAwLCAweDQ4LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDI1LCAweDkyLCAweDAwLCAweDQ3LAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MjUsIDB4OTIsIDB4MDAsIDB4NDcsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgzZCwgMHg5MiwgMHgwMCwgMHg0NywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhiYSwgMHg4ZCwgMHgwMCwgMHg0NywKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweGJhLCAweDhkLCAweDAwLCAweDQ4LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MzEsIDB4OTIsIDB4MDAsIDB4NDgsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgyNSwgMHg5MiwgMHgwMCwgMHg0NywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDI1LCAweDkyLCAweDAwLCAweDQ3LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDMxLCAweDkyLCAweDAwLCAweDQ4LAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhkNSwgMHg5MiwgMHgwMCwgMHg0MiwKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4ZDUsIDB4OTIsIDB4MDAsIDB4NDQsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhkNSwgMHg5MiwgMHgwMCwgMHg0YiwKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweGQ1LCAweDkyLCAweDAwLCAweDQzLAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHhkNSwgMHg5MiwgMHgwMCwgMHg0NSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhkNSwgMHg5MiwgMHgwMCwgMHg0NiwKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweGQ1LCAweDkyLCAweDAwLCAweDQ3LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4ZDUsIDB4OTIsIDB4MDAsIDB4NDgsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhkNSwgMHg5MiwgMHgwMCwgMHg0YSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweGQ1LCAweDkyLCAweDAwLCAweDRjLAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZDUsIDB4OTIsIDB4MDAsIDB4NGMsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4ZWYsIDB4OTIsIDB4MDAsIDB4NDYsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MTUsIDB4OTIsIDB4MDAsIDB4NDcsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhlZiwgMHg5MiwgMHgwMCwgMHg0NiwKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZjYsIDB4OTMsIDB4MDAsIDB4NDYsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MTUsIDB4OTIsIDB4MDAsIDB4NDcsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweGY2LCAweDkzLCAweDAwLCAweDQ2LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHhmNiwgMHg5MywgMHgwMCwgMHg0NiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgxOSwgMHg5NCwgMHgwMCwgMHg0MiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MTgsIDB4OTQsIDB4MDAsIDB4NGEsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDE5LCAweDk0LCAweDAwLCAweDQ2LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MjUsIDB4OTEsIDB4MDAsIDB4NDcsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgyNSwgMHg5MSwgMHgwMCwgMHg0OCwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgxOCwgMHg5NCwgMHgwMCwgMHg0YSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweGUwLCAweDkyLCAweDAwLCAweDQxLCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHhlYywgMHg5MiwgMHgwMCwgMHg0MiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweGVjLCAweDkyLCAweDAwLCAweDQ0LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHhlYywgMHg5MiwgMHgwMCwgMHg0YiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweGVjLCAweDkyLCAweDAwLCAweDQzLCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZWMsIDB4OTIsIDB4MDAsIDB4NDUsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHhlYywgMHg5MiwgMHgwMCwgMHg0NiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhlYywgMHg5MiwgMHgwMCwgMHg0NywKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweGVjLCAweDkyLCAweDAwLCAweDQ4LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweGVjLCAweDkyLCAweDAwLCAweDRjLCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweGZlLCAweDkxLCAweDAwLCAweDRjLCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDE1LCAweDkyLCAweDAwLCAweDQ3LAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHhmMiwgMHg5MSwgMHgwMCwgMHg0YywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4YjgsIDB4OTQsIDB4MDAsIDB4NDYsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDVmLCAweDk0LCAweDAwLCAweDQyLCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NWYsIDB4OTQsIDB4MDAsIDB4NDQsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDVmLCAweDk0LCAweDAwLCAweDRiLCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg1ZiwgMHg5NCwgMHgwMCwgMHg0NSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDVmLCAweDk0LCAweDAwLCAweDQ2LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDI1LCAweDkxLCAweDAwLCAweDQ3LAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MjUsIDB4OTEsIDB4MDAsIDB4NDgsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4NWYsIDB4OTQsIDB4MDAsIDB4NGMsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweGYyLCAweDkxLCAweDAwLCAweDQyLAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4NmEsIDB4OTQsIDB4MDAsIDB4NDYsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweGYyLCAweDkxLCAweDAwLCAweDQ2LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MTUsIDB4OTIsIDB4MDAsIDB4NDcsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDZhLCAweDk0LCAweDAwLCAweDQ2LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHg2YSwgMHg5NCwgMHgwMCwgMHg0NiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NmUsIDB4OTQsIDB4MDAsIDB4NDMsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgxNSwgMHg5MiwgMHgwMCwgMHg0NywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweGIwLCAweDk0LCAweDAwLCAweDRhLCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg2ZSwgMHg5NCwgMHgwMCwgMHg0ZCwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg3ZiwgMHg5NCwgMHgwMCwgMHg0MywKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NWQsIDB4OTQsIDB4MDAsIDB4NGEsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDdmLCAweDk0LCAweDAwLCAweDQzLAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgyNSwgMHg5MSwgMHgwMCwgMHg0NywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgyNSwgMHg5MSwgMHgwMCwgMHg0OCwKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg1ZCwgMHg5NCwgMHgwMCwgMHg0YSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg5MCwgMHg5NCwgMHgwMCwgMHg0MywKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDE1LCAweDkyLCAweDAwLCAweDQ3LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4OTAsIDB4OTQsIDB4MDAsIDB4NDMsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDkwLCAweDk0LCAweDAwLCAweDRkLCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwYiwgMHg5MSwgMHgwMCwgMHg0MiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDJjLCAweDkxLCAweDAwLCAweDQyLAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhhZSwgMHg5NCwgMHgwMCwgMHg0MiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MmMsIDB4OTEsIDB4MDAsIDB4NDYsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwYiwgMHg5MSwgMHgwMCwgMHg0NiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDI1LCAweDkxLCAweDAwLCAweDQ3LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDI1LCAweDkxLCAweDAwLCAweDQ4LAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweGFlLCAweDk0LCAweDAwLCAweDQ2LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweGIwLCAweDk0LCAweDAwLCAweDRhLAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MTUsIDB4OTIsIDB4MDAsIDB4NDcsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhiMCwgMHg5NCwgMHgwMCwgMHg0YSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NmIsIDB4OTQsIDB4MDAsIDB4NDYsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4NmIsIDB4OTQsIDB4MDAsIDB4NDYsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MTUsIDB4OTIsIDB4MDAsIDB4NDcsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg2YiwgMHg5NCwgMHgwMCwgMHg0NiwKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NmIsIDB4OTQsIDB4MDAsIDB4NDYsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHhiNiwgMHg5NCwgMHgwMCwgMHg0MiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDVkLCAweDk0LCAweDAwLCAweDRhLAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweGI2LCAweDk0LCAweDAwLCAweDQ2LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MjUsIDB4OTEsIDB4MDAsIDB4NDcsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgyNSwgMHg5MSwgMHgwMCwgMHg0OCwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NWQsIDB4OTQsIDB4MDAsIDB4NGEsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MmYsIDB4OTEsIDB4MDAsIDB4NGQsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MmYsIDB4OTEsIDB4MDAsIDB4NGQsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgyNSwgMHg5MSwgMHgwMCwgMHg0NywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgyNSwgMHg5MSwgMHgwMCwgMHg0OCwKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA3LCAweDAwLCAweDJlLCAweDRiLAorCTB4MTksIDB4OTAsIDB4MDEsIDB4MDAsIDB4MGEsIDB4OGEsIDB4MDAsIDB4MDQsIDB4ZTYsIDB4YjEsIDB4MDAsIDB4MDAsCisJMHhiYSwgMHg4ZCwgMHgyMiwgMHg0MiwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHhhZiwgMHg5NywgMHgwMCwgMHgzYSwKKwkweDgxLCAweDMwLCAweDAxLCAweDAwLCAweGJhLCAweDhkLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4YmEsIDB4OGQsIDB4MjIsIDB4NDIsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4MWYsIDB4MDAsIDB4MGYsCisJMHgxZSwgMHg4YywgMHgwMSwgMHgwMCwgMHgyMSwgMHg5NywgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweGNhLCAweDhkLCAweDljLCAweDBmLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVjLAorCTB4MWYsIDB4ODAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MTAsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsCisJMHhjYSwgMHg4ZCwgMHgyMiwgMHg0MCwgMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwKKwkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLAorCTB4YzcsIDB4OGQsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MWIsIDB4ODQsIDB4MDAsIDB4ODgsCisJMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgxMywgMHg4NiwgMHgyMiwgMHgwMiwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweGNiLCAweDhkLCAweDQyLCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LAorCTB4OTMsIDB4OTMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWEsIDB4MDIsIDB4NjgsIDB4OTcsIDB4MDEsIDB4MDAsCisJMHgxMywgMHg4NiwgMHgwMCwgMHg0MCwgMHgwNSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHgwMCwgMHgyZSwgMHg0YiwKKwkweDE5LCAweDkwLCAweDAxLCAweDAwLCAweDBhLCAweDhhLCAweDAwLCAweDA0LCAweGU2LCAweGIxLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODcsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4ZCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMywgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDQwLCAweDAwLCAweDAwLCAweGExLCAweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLAorCTB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4M2QsIDB4OTksIDB4MDAsIDB4MDYsIDB4MDcsIDB4NDAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwNiwgMHgwNywgMHhkMCwgMHgwMSwgMHgwMCwgMHhkNCwgMHgwMCwgMHgyZSwgMHg1YywKKwkweDFmLCAweDkwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA3LCAweGYwLCAweGIxLCAweDAxLCAweDAwLAorCTB4MGMsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsCisJMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGZlLCAweDk2LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZlLAorCTB4OTYsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmZSwKKwkweDk2LCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZlLCAweDk2LCAweGMwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmYSwgMHg5NiwgMHhjMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGZlLCAweDk2LCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDMwLCAweDAwLCAweDRiLAorCTB4OTQsIDB4ODgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsIDB4OTUsIDB4ZjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0YSwgMHg5NiwgMHhjMCwgMHgwMSwgMHgwMCwgMHg1ZSwgMHgwMSwgMHgyZSwgMHgzNCwKKwkweDk3LCAweDg0LCAweDAxLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDRiLCAweGU0LCAweGU1LCAweDAxLCAweDAwLAorCTB4NjQsIDB4MDEsIDB4MjAsIDB4NDAsIDB4ZTEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDksIDB4MDAsIDB4MDAsIDB4MDcsCisJMHg4NiwgMHhlNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZSwgMHhhNywgMHg4NywgMHhjMCwgMHgwMSwgMHgwMCwKKwkweDEwLCAweDAwLCAweDAwLCAweDEwLCAweDQ4LCAweGM5LCAweDAxLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDQwLAorCTB4ZjEsIDB4OTksIDB4MDEsIDB4MDAsIDB4NTgsIDB4MDEsIDB4MDAsIDB4NDMsIDB4ZjAsIDB4YzksIDB4MDEsIDB4MDAsCisJMHg1OCwgMHgwMSwgMHgwMCwgMHgwNSwgMHhlMCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwKKwkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweGEwLCAweDAwLCAweDAwLCAweGE0LCAweDYyLCAweGRkLCAweDAxLCAweDAwLAorCTB4ZjQsIDB4OGQsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsCisJMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgxYSwgMHgwMCwgMHgwMCwgMHg0MCwgMHg5NywgMHg5OCwgMHgwMSwgMHgwMCwKKwkweDA4LCAweDAwLCAweDJlLCAweDQwLCAweDk1LCAweGIwLCAweDAxLCAweDAwLCAweGZjLCAweDhkLCAweDIwLCAweDRiLAorCTB4OTQsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHhmOSwgMHg4ZCwgMHgwMCwgMHg0MSwgMHg5NSwgMHhjMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg4MCwgMHgwMCwgMHgxMCwKKwkweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDAzLCAweDhlLCAweDIyLCAweDQwLCAweGUzLCAweDZkLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsCisJMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHhmZiwgMHg4ZCwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDFiLCAweDg0LCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LAorCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YWYsIDB4OTcsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHhjZiwgMHg4ZCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwYywgMHg4MCwgMHgwMCwgMHgwMywKKwkweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDg2LCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4ODgsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDgsIDB4OGUsIDB4NDIsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwYiwgMHg4ZSwgMHhhMiwgMHg0YywgMHhmZCwgMHg3ZiwgMHgwMCwgMHgwMCwKKwkweDBjLCAweDhlLCAweDAwLCAweDRjLCAweGZkLCAweDkzLCAweDAwLCAweDAwLCAweDBkLCAweDhlLCAweDIwLCAweGYwLAorCTB4NTYsIDB4NmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4NTYsIDB4YjMsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgxYSwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgxMCwKKwkweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDY0LCAweDAwLCAweDAwLCAweDQwLCAweGYxLCAweDk5LCAweDAxLCAweDAwLAorCTB4NzAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4ZjAsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsCisJMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDIwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDEzLCAweDhlLCAweGE4LCAweDQ0LAorCTB4ZTAsIDB4MzEsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4OGMsIDB4YzgsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHg0NiwgMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweGYxLCAweDk5LCAweDAxLCAweDAwLCAweDY4LCAweDAxLCAweDAwLCAweDA1LCAweGYwLCAweGM5LCAweDAxLCAweDAwLAorCTB4NjQsIDB4MDAsIDB4MDAsIDB4NDMsIDB4ZjAsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsCisJMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NiwgMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDFiLCAweDhlLCAweGE4LCAweDQ0LCAweGUwLCAweDMxLCAweDAwLCAweDAwLCAweDFiLCAweDg0LCAweDAwLCAweDg4LAorCTB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDksIDB4MDAsIDB4MDAsIDB4MDcsIDB4ODYsIDB4ZTQsIDB4MDEsIDB4MDAsCisJMHgzOCwgMHgwMCwgMHgyZSwgMHhhNywgMHg4NywgMHhjMCwgMHgwMSwgMHgwMCwgMHg4YiwgMHgwMCwgMHgyZCwgMHgwNSwKKwkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDIzLCAweDhlLCAweDIyLCAweDQzLCAweGU3LCAweDdkLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4NDUsIDB4YzEsIDB4MDEsIDB4MDAsIDB4MjYsIDB4OGUsIDB4MjIsIDB4NDQsCisJMHhlNywgMHg3ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YywgMHg0NSwgMHhjMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDRhLCAweDE5LCAweDkwLCAweDAxLCAweDAwLCAweDY4LCAweDAxLCAweDIwLCAweGEyLAorCTB4ZTQsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ODgsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgyYSwgMHg4ZSwgMHgyMywgMHgwYiwgMHhlNSwgMHg2ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKKwkweDE5LCAweDkwLCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDEwLCAweDQ0LCAweGM5LCAweDAxLCAweDAwLAorCTB4NTAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjEsIDB4OTksIDB4MDEsIDB4MDAsIDB4NTgsIDB4MDEsIDB4MDAsIDB4NDMsCisJMHhmMCwgMHhjOSwgMHgwMSwgMHgwMCwgMHg1OCwgMHgwMSwgMHgwMCwgMHgwNSwgMHhlMCwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLAorCTB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MmYsIDB4OGUsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgxYiwgMHg4NCwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHg1YywgMHgwMCwgMHgyZSwgMHgwNSwKKwkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDAzLCAweDQyLCAweGM5LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4NjAsIDB4ZjAsIDB4OTYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YWYsIDB4OTcsIDB4MDAsIDB4NDEsCisJMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwgMHhjZiwgMHg4ZCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDNhLCAweDhlLCAweGEyLCAweDQ5LCAweDE5LCAweDdjLCAweDAwLCAweDAwLCAweDg2LCAweDAwLCAweDAwLCAweDQwLAorCTB4NDcsIDB4OTksIDB4MDEsIDB4MDAsIDB4M2UsIDB4OGUsIDB4MDAsIDB4NDAsIDB4ZTUsIDB4YjEsIDB4MDAsIDB4MDAsCisJMHg4NiwgMHgwMCwgMHgyZiwgMHg0OSwgMHgxOSwgMHg4MCwgMHgwMSwgMHgwMCwgMHgzZSwgMHg4ZSwgMHhhMiwgMHhmMiwKKwkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDhiLCAweDAwLCAweDAwLCAweDQwLCAweDQ3LCAweDk5LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4ZTcsIDB4OTEsIDB4MDEsIDB4MDAsIDB4NDEsIDB4OGUsIDB4YTIsIDB4NDYsCisJMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHhhMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDQ1LCAweDhlLCAweDAwLCAweDQwLCAweGU1LCAweGIxLCAweDAwLCAweDAwLCAweGEwLCAweDAwLCAweDJmLCAweDQ2LAorCTB4MTksIDB4ODAsIDB4MDEsIDB4MDAsIDB4NDUsIDB4OGUsIDB4YTIsIDB4ZjIsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHg4YiwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKKwkweGU3LCAweDkxLCAweDAxLCAweDAwLCAweGE4LCAweDAwLCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLAorCTB4MzQsIDB4MDAsIDB4MmQsIDB4ZjAsIDB4MjQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmIsCisJMHgwYywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmYiwgMHgxMCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGZiLCAweDEyLCAweGIwLCAweDAxLCAweDAwLCAweDBmLCAweDAwLCAweDAwLCAweGYzLAorCTB4MTYsIDB4ODgsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ZjMsIDB4MTQsIDB4ZjQsIDB4MDEsIDB4MDAsCisJMHg3MCwgMHg4ZSwgMHgyNiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHg1OCwgMHg4ZSwgMHgyMiwgMHgwYSwKKwkweDE2LCAweDZjLCAweDAwLCAweDAwLCAweDU4LCAweDAwLCAweDNkLCAweDQzLCAweDEzLCAweGUwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjIsIDB4ZjAsCisJMHg4NCwgMHgzMCwgMHgwMCwgMHgwMCwgMHhlNywgMHg5OCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDFiLCAweDg0LCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LAorCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MTMsIDB4YzAsIDB4MDEsIDB4MDAsCisJMHg1NywgMHg4ZSwgMHhhMCwgMHg0MywgMHgxMywgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDEzLCAweGIwLCAweDAxLCAweDAwLCAweDRkLCAweDhlLCAweDAwLCAweDQxLCAweDE1LCAweGQwLCAweDAwLCAweDAwLAorCTB4NzAsIDB4OGUsIDB4MjIsIDB4MGEsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4NTgsIDB4MDAsIDB4M2QsIDB4NDMsCisJMHgxMywgMHhlMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDA0LCAweDAwLCAweDIyLCAweGYwLCAweDg0LCAweDMwLCAweDAwLCAweDAwLCAweGU3LCAweDk4LCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MjAsIDB4NDAsIDB4ZTEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgxYiwgMHg4NCwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwKKwkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDcwLCAweDhlLCAweDIyLCAweDQxLCAweDE1LCAweDUwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MTEsIDB4YzAsIDB4MDEsIDB4MDAsIDB4NjQsIDB4OGUsIDB4YTAsIDB4NDMsCisJMHgxMSwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgxMSwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDU4LCAweDAwLCAweDNkLCAweDQzLCAweDExLCAweGUwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LAorCTB4MzYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjIsIDB4ZjAsIDB4MDAsIDB4MzAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHg4MywgMHhiMCwgMHgwMSwgMHgwMCwgMHhlZSwgMHg5NywgMHgwMCwgMHg0NywKKwkweDYxLCAweDMxLCAweDAxLCAweDAwLCAweDFiLCAweDg0LCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAorCTB4NWYsIDB4OTUsIDB4MDAsIDB4MDUsIDB4NDgsIDB4MzEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsCisJMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKKwkweDZjLCAweDhlLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDFiLCAweDg0LCAweDAwLCAweDg4LAorCTB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NjAsIDB4OGUsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDAsIDB4MDAsCisJMHgzNywgMHgwMCwgMHgyMCwgMHg0MCwgMHhlNywgMHhiMSwgMHgwMSwgMHgwMCwgMHgyMCwgMHg5OCwgMHgwMCwgMHg1MSwKKwkweDgxLCAweDMwLCAweDAxLCAweDAwLCAweGNmLCAweDhkLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MzQsIDB4MDAsIDB4MmUsIDB4NDEsIDB4ZjUsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MTEsIDB4MDAsIDB4NDAsCisJMHhlNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHg3OCwgMHg4ZSwgMHgwMCwgMHg0OCwgMHgxOSwgMHg5MCwgMHgwMCwgMHgwMCwKKwkweDM0LCAweDAwLCAweDJlLCAweDQxLCAweGY1LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDExLCAweDAwLCAweDQwLAorCTB4ZTUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg5NCwgMHhiMCwgMHgwMSwgMHgwMCwgMHg3ZCwgMHg4ZSwgMHgyMiwgMHg0NSwKKwkweDIzLCAweDdjLCAweDAwLCAweDAwLCAweGIwLCAweDAwLCAweDJmLCAweGYwLCAweDhjLCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4NjAsIDB4ZjAsIDB4OGMsIDB4YzAsIDB4MDEsIDB4MDAsIDB4OTAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHgzNSwgMHgwMCwgMHgyZCwgMHhmMCwgMHg4YywgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDU4LCAweDAwLCAweDNlLCAweDQzLCAweGU3LCAweGUxLCAweDAxLCAweDAwLCAweDgyLCAweDhlLCAweDIyLCAweDQ4LAorCTB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4OGQsIDB4YzAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg2OCwgMHgwYSwgMHg4YywgMHhjMCwgMHgwMSwgMHgwMCwgMHgzOCwgMHgwMCwgMHgyYSwgMHg0YSwKKwkweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDI4LCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweGM5LCAweDAxLCAweDAwLAorCTB4M2MsIDB4MDAsIDB4MjAsIDB4MWIsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MTAsIDB4ODAsIDB4MDAsIDB4MDMsCisJMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgzOCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDI2LCAweGIwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweGY4LAorCTB4MDIsIDB4MzAsIDB4MDAsIDB4MDAsIDB4OTAsIDB4OGUsIDB4MjMsIDB4MDEsIDB4MTQsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg4MCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwKKwkweDgyLCAweGIwLCAweDAxLCAweDAwLCAweDRjLCAweDAwLCAweDIwLCAweGYwLCAweGU0LCAweGIxLCAweDAxLCAweDAwLAorCTB4NDQsIDB4MDAsIDB4MjAsIDB4NDAsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDgsIDB4MDAsIDB4MjAsIDB4NDEsCisJMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhhOCwgMHgwMCwgMHgyZCwgMHgxMCwgMHgzMiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDIxLCAweDk5LCAweDAwLCAweGYwLCAweDI0LCAweDMwLCAweDAxLCAweDAwLCAweDk5LCAweDhlLCAweGEyLCAweDQ0LAorCTB4ODEsIDB4NmMsIDB4MDAsIDB4MDAsIDB4OTcsIDB4OGUsIDB4MjIsIDB4NDEsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsCisJMHg4YSwgMHg5NiwgMHgwMCwgMHg0MCwgMHgzYiwgMHgzMCwgMHgwMSwgMHgwMCwgMHhiZCwgMHg4ZSwgMHhhMiwgMHgwOCwKKwkweDNjLCAweDMwLCAweDAwLCAweDAwLCAweDk5LCAweDhlLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4YzcsIDB4OTUsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4YmQsIDB4OGUsIDB4YTIsIDB4MDgsCisJMHgzYywgMHgzMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHgwMCwgMHgyMCwgMHgxYywgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDU0LCAweDAwLCAweDIwLCAweDEzLCAweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDRlLCAweDAwLCAweDIwLCAweDAxLAorCTB4ZTQsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MjAsIDB4MGEsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgyMCwgMHg5OCwgMHgwMCwgMHg1ZiwgMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwgMHhjZiwgMHg4ZCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDM3LCAweDAwLCAweDAwLCAweDQwLCAweDQ3LCAweDk5LCAweDAxLCAweDAwLAorCTB4NjksIDB4OTYsIDB4MDAsIDB4ZjMsIDB4OTQsIDB4MzAsIDB4MDEsIDB4MDAsIDB4NzgsIDB4OGUsIDB4MjIsIDB4NGEsCisJMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHhhNSwgMHg4ZSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDM3LCAweDAwLCAweDAwLCAweDQwLCAweDQ3LCAweDk5LCAweDAxLCAweDAwLCAweDY5LCAweDk2LCAweDAwLCAweGYzLAorCTB4OTQsIDB4MzAsIDB4MDEsIDB4MDAsIDB4NTgsIDB4MDAsIDB4M2UsIDB4NDMsIDB4OTcsIDB4ZTAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgxYiwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgxZiwgMHgwMCwgMHg2MCwgMHgwMCwKKwkweDAwLCAweDhjLCAweDAxLCAweDAwLCAweGNmLCAweDhkLCAweDg1LCAweDExLCAweDgwLCAweDMyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4YjAsIDB4MDAsIDB4MmYsIDB4ZjAsCisJMHg4YywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2MCwgMHhmMCwgMHg4YywgMHhjMCwgMHgwMSwgMHgwMCwKKwkweDIwLCAweDk4LCAweDAwLCAweDVmLCAweDgxLCAweDMwLCAweDAxLCAweDAwLCAweGNmLCAweDhkLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4YWYsIDB4OGUsIDB4MDAsIDB4NDksIDB4MTksIDB4ODAsIDB4MDAsIDB4MDAsCisJMHhiNCwgMHg4ZSwgMHgyMiwgMHg0MSwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHg4YSwgMHg5NiwgMHgwMCwgMHg0MCwKKwkweDNiLCAweDMwLCAweDAxLCAweDAwLCAweGI4LCAweDhlLCAweGEyLCAweDA4LCAweDNjLCAweDMwLCAweDAwLCAweDAwLAorCTB4MjAsIDB4OTgsIDB4MDAsIDB4NWYsIDB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4Y2YsIDB4OGQsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhjNywgMHg5NSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweGI4LCAweDhlLCAweGEyLCAweDA4LCAweDNjLCAweDMwLCAweDAwLCAweDAwLCAweDIwLCAweDk4LCAweDAwLCAweDVmLAorCTB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4Y2YsIDB4OGQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHg1MCwgMHgwMCwgMHgyZCwgMHgxMCwgMHgzMiwgMHhiMCwgMHgwMSwgMHgwMCwgMHg1NCwgMHgwMCwgMHgyZCwgMHhmMCwKKwkweDM4LCAweGIwLCAweDAxLCAweDAwLCAweDRlLCAweDAwLCAweDJkLCAweGYwLCAweDI2LCAweGIwLCAweDAxLCAweDAwLAorCTB4NDAsIDB4MDAsIDB4MmQsIDB4ZjIsIDB4MDIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsCisJMHgxNCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg4YywgMHhjOCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDgwLCAweDAwLCAweDQ2LCAweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDY4LCAweDAxLCAweDJkLCAweDQ0LAorCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDAsIDB4NjgsIDB4ZjIsIDB4ODAsIDB4YzgsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg1OCwgMHgwMSwgMHgwMCwgMHgwNSwKKwkweGUwLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBiLCAweDM3LCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MzYsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4NWMsIDB4MDEsIDB4MmUsIDB4NDAsCisJMHgxMCwgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNiwgMHg4MCwgMHhjMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDUyLCAweDgxLCAweGQwLCAweDAxLCAweDAwLCAweGNiLCAweDhlLCAweDIwLCAweDk0LAorCTB4ODEsIDB4NmMsIDB4MDAsIDB4MDAsIDB4YjUsIDB4OTcsIDB4MDAsIDB4OTQsIDB4ZTUsIDB4MzEsIDB4MDEsIDB4MDAsCisJMHhjYywgMHg4ZSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhiNSwgMHg5NywgMHgwMCwgMHg0MCwKKwkweGU0LCAweDMxLCAweDAxLCAweDAwLCAweDIwLCAweDAwLCAweDAwLCAweDQ2LCAweDYyLCAweGRkLCAweDAxLCAweDAwLAorCTB4Y2MsIDB4OGUsIDB4YTgsIDB4NDAsIDB4MjMsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MGUsIDB4MDAsIDB4MDAsIDB4MGYsCisJMHgxZSwgMHg4YywgMHgwMSwgMHgwMCwgMHhkYywgMHg4ZSwgMHg4MiwgMHg0MSwgMHgyMywgMHg0MCwgMHgwMCwgMHgwMCwKKwkweDIwLCAweDgwLCAweDAwLCAweDEwLCAweDQyLCAweGM5LCAweDAxLCAweDAwLCAweGQ2LCAweDhlLCAweDIyLCAweDQwLAorCTB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHhkMywgMHg4ZSwgMHhhOCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDFiLCAweDg0LCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZmIsIDB4OTUsIDB4MDAsIDB4NDMsCisJMHgyMywgMHgzMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDMyLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAorCTB4MjMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MGUsIDB4MDAsIDB4MDAsIDB4MGYsIDB4MWUsIDB4OGMsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHgxOSwgMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHhlNCwgMHg4ZSwgMHgyMiwgMHg0MSwKKwkweDE5LCAweDdjLCAweDAwLCAweDAwLCAweGUwLCAweDhlLCAweGEzLCAweDAxLCAweDBjLCAweDZjLCAweDAwLCAweDAwLAorCTB4ZTEsIDB4OGUsIDB4MDAsIDB4MDYsIDB4MDQsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsCisJMHgwNCwgMHhiMCwgMHgwMSwgMHgwMCwgMHhlMywgMHg4ZSwgMHgyMCwgMHgwMiwgMHgzNiwgMHg2YywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDFiLCAweDA0LCAweGIwLCAweDAxLCAweDAwLCAweGU3LCAweDhlLCAweDAwLCAweDAyLAorCTB4ZjAsIDB4YjEsIDB4MDAsIDB4MDAsIDB4ZTYsIDB4OGUsIDB4YTMsIDB4MDEsIDB4MGMsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHhlNywgMHg4ZSwgMHg2OCwgMHgwNiwgMHgwNCwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2OCwgMHgwMSwKKwkweDA0LCAweGIwLCAweDAxLCAweDAwLCAweGU5LCAweDhlLCAweDgwLCAweDA4LCAweGYwLCAweDMxLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MTEsIDB4MWUsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWMsCisJMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NiwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAxLCAweDFmLCAweDAwLCAweDE5LCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweGViLCAweDhlLCAweGE4LCAweDEzLAorCTB4ZTAsIDB4MzEsIDB4MDAsIDB4MDAsIDB4MjIsIDB4OGYsIDB4MjIsIDB4MDIsIDB4MTQsIDB4NTAsIDB4MDAsIDB4MDAsCisJMHg0NCwgMHgwMCwgMHgyZCwgMHgwMiwgMHgwYywgMHhkMCwgMHgwMSwgMHgwMCwgMHgxMiwgMHg4ZiwgMHhhMiwgMHgwMiwKKwkweDAyLCAweDUwLCAweDAwLCAweDAwLCAweGY5LCAweDhlLCAweDIyLCAweDVjLCAweDFmLCAweDdjLCAweDAwLCAweDAwLAorCTB4MjAsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4ZjgsIDB4OGUsIDB4MjIsIDB4NDAsCisJMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweGY0LCAweDhlLCAweGE4LCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MWIsIDB4ODQsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0NCwgMHgwMCwgMHgyZCwgMHg1YywKKwkweDFmLCAweDgwLCAweDAxLCAweDAwLCAweDQ4LCAweDAwLCAweDJkLCAweGYwLCAweDM4LCAweGIwLCAweDAxLCAweDAwLAorCTB4NGMsIDB4MDAsIDB4MmQsIDB4ZjAsIDB4MjYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MzgsIDB4MDAsIDB4MmYsIDB4ZjIsCisJMHgwMiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgxMywgMHg4ZiwgMHgyMiwgMHgwMSwgMHgxNCwgMHg2YywgMHgwMCwgMHgwMCwKKwkweDA2LCAweDhmLCAweDIyLCAweDQ2LCAweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ2LAorCTB4MWYsIDB4ODAsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MmQsIDB4MDMsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwNSwgMHg4ZiwgMHgyMiwgMHg0MCwgMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwKKwkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLAorCTB4MDIsIDB4OGYsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MWIsIDB4ODQsIDB4MDAsIDB4ODgsCisJMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgzOCwgMHgwMCwgMHgyZiwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDk0LCAweGIwLCAweDAxLCAweDAwLCAweDM4LCAweDAwLCAweDJkLCAweGYwLAorCTB4OTYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGMsIDB4ZTEsIDB4YzEsIDB4MDEsIDB4MDAsCisJMHgyMCwgMHgwMCwgMHgwMCwgMHgwMywgMHg0OCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyMiwgMHg0YSwKKwkweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDQ0LCAweDAwLCAweDAwLCAweDA1LCAweGYwLCAweGM5LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGEsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGIsCisJMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweGEwLCAweDAwLCAweDAwLCAweGE0LCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDBmLCAweDhmLCAweGE4LCAweDVjLAorCTB4MWYsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MTMsIDB4OGYsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHgzOCwgMHhjMCwgMHgwMSwgMHgwMCwgMHgxZCwgMHg4ZiwgMHgyMiwgMHgwNiwKKwkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLCAweDMzLCAweGMwLCAweDAxLCAweDAwLAorCTB4MWIsIDB4OGYsIDB4YTIsIDB4MDIsIDB4MzYsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4OGYsIDB4MGQsCisJMHg0MiwgMHgzMSwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgxMCwgMHhjOCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDVjLCAweDExLCAweDgwLCAweDAxLCAweDAwLCAweGYwLCAweDA3LCAweDAwLCAweDQwLAorCTB4MzcsIDB4OTgsIDB4MDEsIDB4MDAsIDB4Y2YsIDB4OGUsIDB4MDAsIDB4YTEsIDB4MWEsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHgxMCwgMHhjMCwgMHgwMSwgMHgwMCwgMHhjZiwgMHg4ZSwgMHgwMCwgMHgwMiwKKwkweDM2LCAweGQwLCAweDAwLCAweDAwLCAweDUwLCAweDAwLCAweDIwLCAweDFjLCAweGUwLCAweGIxLCAweDAxLCAweDAwLAorCTB4NTQsIDB4MDAsIDB4MjAsIDB4MTMsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NGUsIDB4MDAsIDB4MjAsIDB4MDEsCisJMHhlNCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgyMCwgMHgwYSwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDI3LCAweDhmLCAweDAwLCAweDVmLCAweDAxLCAweGIwLCAweDAwLCAweDAwLCAweDM3LCAweDAwLCAweDJkLCAweDQ2LAorCTB4MDEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ZjMsIDB4ODAsIDB4ZjQsIDB4MDEsIDB4MDAsCisJMHgyNiwgMHg4ZiwgMHhhMCwgMHg0MywgMHg4MSwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1NSwKKwkweDAxLCAweGIwLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDIwLCAweDQwLCAweGUxLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4MTksIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4MmQsIDB4OGYsIDB4MjIsIDB4NDAsCisJMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NiwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDQwLCAweDAwLCAweDAwLCAweDE5LCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDJhLCAweDhmLCAweGE4LCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MWIsIDB4ODQsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHhmYiwgMHg5NSwgMHgwMCwgMHgxMCwgMHg0OCwgMHgzMSwgMHgwMSwgMHgwMCwgMHgzMCwgMHg4MCwgMHgwMCwgMHgxMCwKKwkweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDM0LCAweDhmLCAweDIyLCAweDQwLCAweGUzLCAweDZkLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsCisJMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHgzMSwgMHg4ZiwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDFiLCAweDg0LCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDYwLCAweDAxLCAweDJmLCAweDA1LAorCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGIsIDB4ZTQsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHgxNywgMHhmMCwgMHgwMSwgMHgwMCwgMHgzOSwgMHg4ZiwgMHg5MCwgMHhmMiwKKwkweDE2LCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDE3LCAweGMwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4NjYsIDB4MjAsIDB4MTcsIDB4YTQsIDB4MDEsIDB4MDAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4YTYsCisJMHgyYSwgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMiwgMHgyYSwgMHg5NCwgMHgwMSwgMHgwMCwKKwkweDQyLCAweDhmLCAweDIyLCAweDQ5LCAweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ5LAorCTB4MWYsIDB4ODAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDUsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHhmMCwgMHgwMCwgMHgwYywgMHgxOCwgMHg4YywgMHgwMSwgMHgwMCwgMHhmNSwgMHg5NywgMHgwMCwgMHg0YywKKwkweDk1LCAweDMwLCAweDAxLCAweDAwLCAweDUyLCAweDhmLCAweDAwLCAweDAwLCAweDkyLCAweGIwLCAweDAwLCAweDAwLAorCTB4NDksIDB4OGYsIDB4MjIsIDB4NDAsIDB4YWYsIDB4NmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YzAsIDB4MDAsIDB4MWUsCisJMHg5NCwgMHhkYywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwgMHg5NiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDcyLCAweDk4LCAweDAwLCAweDQwLCAweDA1LCAweDMwLCAweDAxLCAweDAwLCAweDQ4LCAweDhmLCAweGEyLCAweDQwLAorCTB4OTcsIDB4NmMsIDB4MDAsIDB4MDAsIDB4NWIsIDB4OGYsIDB4MDAsIDB4NDcsIDB4MTksIDB4ODAsIDB4MDAsIDB4MDAsCisJMHg1MiwgMHg4ZiwgMHgwMCwgMHgwMCwgMHg5MiwgMHhiMCwgMHgwMCwgMHgwMCwgMHg0OSwgMHg4ZiwgMHg0MywgMHg0OCwKKwkweDYxLCAweDMxLCAweDAwLCAweDAwLCAweDAwLCAweGQwLCAweDAwLCAweDFlLCAweDYyLCAweGRkLCAweDAxLCAweDAwLAorCTB4NGUsIDB4OGYsIDB4MjgsIDB4NDAsIDB4MDUsIDB4MzAsIDB4MDAsIDB4MDAsIDB4NGEsIDB4OGYsIDB4MjIsIDB4NDgsCisJMHg3NywgMHg3ZCwgMHgwMCwgMHgwMCwgMHg1MSwgMHg4ZiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDE1LCAweDYyLCAweGIxLCAweDAxLCAweDAwLCAweDVhLCAweDhmLCAweDI4LCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4NGUsIDB4OGYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgxYiwgMHgwMCwgMHg5MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHg1NywgMHg4ZiwgMHgyMiwgMHg0MSwKKwkweDE5LCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDAzLCAweDQyLCAweGM5LCAweDAxLCAweDAwLAorCTB4Y2MsIDB4OTUsIDB4MDAsIDB4ZjgsIDB4MDAsIDB4MzAsIDB4MDEsIDB4MDAsIDB4NTQsIDB4OGYsIDB4YTIsIDB4NDEsCisJMHgzYiwgMHg1MCwgMHgwMCwgMHgwMCwgMHg1YiwgMHg4ZiwgMHgwMCwgMHg0OSwgMHgwMCwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweGZmLCAweDA3LCAweDAwLCAweDFlLCAweDAwLCAweDhjLCAweDAxLCAweDAwLCAweGNjLCAweDk1LCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4NWIsIDB4OGYsIDB4MDAsIDB4NDksIDB4MDAsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgxYiwgMHg0NywgMHgxOSwgMHg4MCwgMHgwMSwgMHgwMCwgMHg1ZSwgMHg4ZiwgMHgyMiwgMHg1ZiwKKwkweDAxLCAweDZjLCAweDAwLCAweDAwLCAweDRiLCAweDk5LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4YWEsIDB4OGEsIDB4MDAsIDB4MDAsIDB4ODAsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NjUsIDB4OGYsIDB4MjIsIDB4NWMsCisJMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgyMCwgMHg4MCwgMHgwMCwgMHgwMywgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDY1LCAweDhmLCAweDIyLCAweDQwLCAweGUzLCAweDZkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ3LAorCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCisJMHg2MiwgMHg4ZiwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgxYiwgMHg4NCwgMHgwMCwgMHg4OCwKKwkweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDY1LCAweDhmLCAweDQwLCAweDA1LCAweDQ4LCAweDMxLCAweDAwLCAweDAwLAorCTB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDcsIDB4OTQsIDB4ODksIDB4MDEsIDB4MDAsIDB4NmIsIDB4OGYsIDB4ODUsIDB4Y2EsCisJMHg5NCwgMHgzMCwgMHgwMCwgMHgwMCwgMHg0YiwgMHg5OSwgMHgxOCwgMHg1YywgMHgxZiwgMHgwMCwgMHgwMSwgMHgwMCwKKwkweDBlLCAweDAwLCAweDAwLCAweDBmLCAweDFlLCAweDhjLCAweDAxLCAweDAwLCAweDcyLCAweDg5LCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OTgsIDB4MTgsIDB4MDAsIDB4ODAsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHhjZiwgMHg4ZCwgMHgwMCwgMHg0NywgMHgxOSwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDE5LCAweDgwLCAweDAxLCAweDAwLCAweGNmLCAweDhkLCAweDIyLCAweDQ3LCAweDE5LCAweDdjLCAweDAwLCAweDAwLAorCTB4YzcsIDB4OTUsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4NzIsIDB4OGYsIDB4YTIsIDB4MDgsCisJMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHhjZiwgMHg4ZCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweGI1LCAweDk3LCAweDAwLCAweDQwLCAweDBkLCAweDMwLCAweDAxLCAweDAwLCAweDljLCAweDAxLCAweDAwLCAweDQwLAorCTB4NDUsIDB4OTksIDB4MDEsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MGIsIDB4OTgsIDB4ODgsIDB4MDEsIDB4MDAsCisJMHg4YiwgMHgwMCwgMHgyZCwgMHg1MCwgMHgxNywgMHhmMCwgMHgwMSwgMHgwMCwgMHg3OCwgMHg4ZiwgMHg5MCwgMHg0YywKKwkweDE2LCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDE3LCAweGMwLCAweDAxLCAweDAwLAorCTB4N2EsIDB4OGYsIDB4MjIsIDB4NDMsIDB4ZTcsIDB4N2QsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsCisJMHg0NSwgMHhjMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2NiwgMHgyMCwgMHgxNywgMHhhNCwgMHgwMSwgMHgwMCwKKwkweDY4LCAweDAxLCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDVjLCAweDAxLCAweDJlLCAweGYyLAorCTB4ODAsIDB4YjAsIDB4MDEsIDB4MDAsIDB4M2UsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODAsIDB4Y2UsIDB4MDEsIDB4MDAsCisJMHg4MSwgMHg4ZiwgMHgyNCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NiwKKwkweDgxLCAweGMwLCAweDAxLCAweDAwLCAweDgyLCAweDhmLCAweDAwLCAweDk0LCAweGU1LCAweGIxLCAweDAwLCAweDAwLAorCTB4MDIsIDB4MDAsIDB4NjIsIDB4NDAsIDB4N2UsIDB4Y2QsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTcsCisJMHg4MSwgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZSwgMHgxMCwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAzLCAweDAwLCAweDAwLCAweDQwLCAweGYwLCAweDhkLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LAorCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NTgsIDB4MDEsIDB4MDAsIDB4MDUsIDB4ZTAsIDB4YzksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwKKwkweDYyLCAweGIxLCAweDAxLCAweDAwLCAweDg4LCAweDhmLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4MWIsIDB4ODQsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsCisJMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg5NCwgMHg4ZiwgMHgyMiwgMHg0MCwgMHhhZiwgMHg2ZiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDQwLCAweDAwLCAweDA4LCAweDk0LCAweGRjLCAweDAxLCAweDAwLCAweDcyLCAweDk4LCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4OTIsIDB4OGYsIDB4MjIsIDB4NDAsIDB4OTcsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHhjYywgMHg5NSwgMHgwMCwgMHgwOCwgMHgwMCwgMHgzMCwgMHgwMSwgMHgwMCwgMHhjZiwgMHg4ZCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDA1LCAweGIwLCAweDAxLCAweDAwLAorCTB4Y2YsIDB4OGQsIDB4MDAsIDB4NDcsIDB4MTksIDB4ODAsIDB4MDAsIDB4MDAsIDB4OTQsIDB4OGYsIDB4NDMsIDB4NDgsCisJMHg2MSwgMHgzMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHgwMCwgMHgwOCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKKwkweDlhLCAweDhmLCAweDI4LCAweDQwLCAweDA1LCAweDMwLCAweDAwLCAweDAwLCAweDk1LCAweDhmLCAweDIyLCAweDQ4LAorCTB4NzcsIDB4N2QsIDB4MDAsIDB4MDAsIDB4Y2MsIDB4OTUsIDB4MWIsIDB4MDgsIDB4MDAsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHhjZiwgMHg4ZCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhjZiwgMHg4ZCwgMHgxYiwgMHg0NywKKwkweDE5LCAweDgwLCAweDAwLCAweDAwLCAweDM1LCAweDAwLCAweDAwLCAweDQwLCAweDQ3LCAweDk5LCAweDAxLCAweDAwLAorCTB4MDEsIDB4MDAsIDB4NjMsIDB4ZjMsIDB4ODQsIDB4YzgsIDB4MDEsIDB4MDAsIDB4OWYsIDB4OGYsIDB4YTAsIDB4NDMsCisJMHg4NSwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2MywgMHg0MCwgMHg4NSwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweGE4LCAweDAwLCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDM3LCAweDAwLCAweDJmLCAweGYwLAorCTB4MjQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDEsIDB4MDAsIDB4NjMsIDB4ZjMsIDB4ODIsIDB4Y2MsIDB4MDEsIDB4MDAsCisJMHhhYSwgMHg4ZiwgMHhhMiwgMHg0MSwgMHg5ZSwgMHgwNiwgMHgwMCwgMHgwMCwgMHhjZiwgMHg4ZCwgMHgyMiwgMHg0NCwKKwkweDgzLCAweDcwLCAweDAwLCAweDAwLCAweDM2LCAweDAwLCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLAorCTB4NTgsIDB4MDAsIDB4M2QsIDB4NDMsIDB4ZTcsIDB4ZTEsIDB4MDEsIDB4MDAsIDB4Y2YsIDB4OGQsIDB4MWYsIDB4ZjAsCisJMHgyNCwgMHg2YywgMHgwMCwgMHgwMCwgMHg0YiwgMHg5OSwgMHgwMCwgMHg0OCwgMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwKKwkweGFhLCAweDhhLCAweDIzLCAweDQxLCAweDgzLCAweDZjLCAweDAwLCAweDAwLCAweGFhLCAweDhhLCAweDAwLCAweDQ3LAorCTB4ODEsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NTgsIDB4MDAsIDB4M2QsIDB4NDMsIDB4ODUsIDB4ZTAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgzNiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwKKwkweDAwLCAweGIwLCAweDAxLCAweDAwLCAweDI4LCAweDAwLCAweDAwLCAweDQwLCAweDgzLCAweDk4LCAweDAxLCAweDAwLAorCTB4ZWUsIDB4OTcsIDB4MDAsIDB4NDcsIDB4NjEsIDB4MzEsIDB4MDEsIDB4MDAsIDB4MWIsIDB4ODQsIDB4MDAsIDB4ODgsCisJMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZCwgMHgwMywgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDA4LCAweDAwLCAweDJkLCAweGYwLCAweDk0LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LAorCTB4OGUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4OTAsIDB4MDAsIDB4MmQsIDB4ZjAsIDB4MTQsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg3ZSwgMHg4ZSwgMHhhMiwgMHg0MCwKKwkweDhmLCAweDdjLCAweDAwLCAweDAwLCAweGI4LCAweDhmLCAweDIyLCAweDQ3LCAweDhmLCAweDdjLCAweDAwLCAweDAwLAorCTB4N2UsIDB4OGUsIDB4MDAsIDB4NDgsIDB4MTksIDB4OTAsIDB4MDAsIDB4MDAsIDB4MjcsIDB4OTAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgzNiwgMHgwMCwgMHgyZCwgMHg1ZCwgMHgwNSwgMHhiNCwgMHgwMSwgMHgwMCwKKwkweDM3LCAweDAwLCAweDJkLCAweGYzLCAweDgwLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYzLAorCTB4OGUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NWMsIDB4MDAsIDB4M2QsIDB4NDMsIDB4ODEsIDB4ZTAsIDB4MDEsIDB4MDAsCisJMHhhOCwgMHgwMCwgMHgyZCwgMHhmMCwgMHg5NCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwKKwkweDI0LCAweGIwLCAweDAxLCAweDAwLCAweDIwLCAweDAwLCAweDAwLCAweDEwLCAweDg2LCAweGRjLCAweDAxLCAweDAwLAorCTB4NDAsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4Y2UsIDB4OTQsIDB4MDAsIDB4NGEsCisJMHhmMCwgMHgzMSwgMHgwMSwgMHgwMCwgMHgzNiwgMHgwMCwgMHgyZiwgMHg1YywgMHgxZiwgMHg5MCwgMHgwMSwgMHgwMCwKKwkweGM2LCAweDhmLCAweGEyLCAweDUwLCAweDhmLCAweDUwLCAweDAwLCAweDAwLCAweDM0LCAweDAwLCAweDIwLCAweDQwLAorCTB4ZTEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4Y2YsIDB4OGQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg2MywgMHg0MSwgMHg4MSwgMHhjMCwgMHgwMSwgMHgwMCwgMHhjOSwgMHg4ZiwgMHhhMCwgMHg0MywKKwkweDgxLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDYzLCAweDQwLCAweDgxLCAweGIwLCAweDAxLCAweDAwLAorCTB4MzcsIDB4MDAsIDB4MjAsIDB4NDcsIDB4ZTYsIDB4YjEsIDB4MDEsIDB4MDAsIDB4Y2YsIDB4OGQsIDB4MjIsIDB4NDcsCisJMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0NywgMHgwYywgMHhmNCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDRmLCAweDhmLCAweDg0LCAweDAxLCAweDAwLCAweGRlLCAweDhmLCAweDIyLCAweDQ3LAorCTB4MGMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4NTgsIDB4MDAsIDB4M2QsIDB4NDMsIDB4ODEsIDB4ZTAsIDB4MDEsIDB4MDAsCisJMHhkZSwgMHg4ZiwgMHgxZiwgMHhmMCwgMHgyNCwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1YywKKwkweDFmLCAweDgwLCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDEwLCAweDQyLCAweGM5LCAweDAxLCAweDAwLAorCTB4ZDcsIDB4OGYsIDB4MjIsIDB4NDAsIDB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsCisJMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKKwkweGQ0LCAweDhmLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDFiLCAweDg0LCAweDAwLCAweDg4LAorCTB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZDcsIDB4OGYsIDB4NDIsIDB4NDAsIDB4MDUsIDB4MzAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg5MywgMHg5MywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYSwgMHg1ZCwKKwkweDY5LCAweDkzLCAweDAxLCAweDAwLCAweGRjLCAweDhmLCAweDIzLCAweDQxLCAweDBkLCAweDZjLCAweDAwLCAweDAwLAorCTB4YjksIDB4OGYsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDAsIDB4MDAsIDB4NGIsIDB4OTksIDB4MDAsIDB4MDUsCisJMHg0OCwgMHgzMSwgMHgwMSwgMHgwMCwgMHhhYSwgMHg4YSwgMHgwMCwgMHg0OCwgMHg4MSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweGNmLCAweDhkLCAweDIyLCAweDQwLCAweDhmLCAweDZjLCAweDAwLCAweDAwLCAweDIwLCAweDk4LCAweDAwLCAweDVmLAorCTB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4Y2YsIDB4OGQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHhhMiwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMywKKwkweDg0LCAweGIwLCAweDAxLCAweDAwLCAweGE2LCAweDAwLCAweDJkLCAweDQ5LCAweDE5LCAweDkwLCAweDAxLCAweDAwLAorCTB4MDIsIDB4MDAsIDB4MDAsIDB4ZjIsIDB4ODAsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4YjgsIDB4MDAsIDB4MmQsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMiwgMHg4MCwgMHhjMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDgyLCAweGY4LCAweDAxLCAweDAwLCAweDE5LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4OTgsIDB4MDEsIDB4MDAsIDB4ZWQsIDB4OGYsIDB4YTAsIDB4NDAsIDB4ODIsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgyYywgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MSwgMHg5OCwgMHgwMSwgMHgwMCwgMHhlZCwgMHg4ZiwgMHhhMywgMHg0MCwKKwkweDgyLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDgwLCAweGIwLCAweDAxLCAweDAwLAorCTB4ZWYsIDB4OGYsIDB4MjAsIDB4NGMsIDB4ODUsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCisJMHg4NSwgMHhjMCwgMHgwMSwgMHgwMCwgMHg4NiwgMHgwMCwgMHgyMCwgMHg0MCwgMHhlNCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweGEyLCAweDAwLCAweDIwLCAweDQyLCAweGU2LCAweGIxLCAweDAxLCAweDAwLCAweGNmLCAweDhkLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4YWYsIDB4OTcsIDB4MDAsIDB4NTAsIDB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHhjZiwgMHg4ZCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHg4MCwgMHgwMCwgMHgwMywKKwkweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweGYwLCAweDgwLCAweDMwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4OGQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4M2QsIDB4OTksIDB4MDAsIDB4NDAsCisJMHg4NywgMHgzMCwgMHgwMSwgMHgwMCwgMHhiMCwgMHgwMCwgMHgyZiwgMHg1YywgMHgxZiwgMHg5MCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDYwLCAweGYwLCAweDgwLCAweGMwLCAweDAxLCAweDAwLCAweDIwLCAweDk4LCAweDAwLCAweDVmLAorCTB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4Y2YsIDB4OGQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhjZiwgMHg4ZCwgMHgyMiwgMHg0NiwKKwkweDE5LCAweDdjLCAweDAwLCAweDAwLCAweGEwLCAweDAwLCAweDAwLCAweDQwLCAweDQ3LCAweDk5LCAweDAxLCAweDAwLAorCTB4MDEsIDB4MDAsIDB4NjIsIDB4ZjIsIDB4OTYsIDB4Y2MsIDB4MDEsIDB4MDAsIDB4Y2YsIDB4OGQsIDB4YTYsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgyMCwgMHg5OCwgMHgwMCwgMHg0YSwgMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwKKwkweGY1LCAweDk3LCAweDAwLCAweDQ2LCAweDk1LCAweDMwLCAweDAxLCAweDAwLCAweGNmLCAweDhkLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4Y2YsIDB4OGQsIDB4MjIsIDB4NDksIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsCisJMHg4NiwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMSwgMHgwMCwgMHg2MiwgMHhmMiwKKwkweDgwLCAweGNjLCAweDAxLCAweDAwLCAweGNmLCAweDhkLCAweGE2LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4MjAsIDB4OTgsIDB4MDAsIDB4NGEsIDB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4ZjUsIDB4OTcsIDB4MDAsIDB4NDcsCisJMHg5NSwgMHgzMCwgMHgwMSwgMHgwMCwgMHhjZiwgMHg4ZCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDVmLCAweDk1LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGNmLCAweDhkLCAweDAwLCAweDVjLAorCTB4MWYsIDB4OTAsIDB4MDAsIDB4MDAsIDB4Y2YsIDB4OGQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHhjZiwgMHg4ZCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhiYSwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDQ3LCAweDk5LCAweDAxLCAweDAwLCAweDAxLCAweDAwLCAweDYyLCAweGYyLCAweDgwLCAweGM4LCAweDAxLCAweDAwLAorCTB4MTMsIDB4OTAsIDB4OTAsIDB4NDAsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4NjIsIDB4NDAsCisJMHg4MSwgMHg5OCwgMHgwMSwgMHgwMCwgMHhhNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwKKwkweGNmLCAweDhkLCAweDIyLCAweDQwLCAweGU1LCAweDZkLCAweDAwLCAweDAwLCAweGNmLCAweDhkLCAweDAwLCAweDQxLAorCTB4ZTUsIDB4YzEsIDB4MDAsIDB4MDAsIDB4YWYsIDB4OTcsIDB4MDAsIDB4NGQsIDB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHhjZiwgMHg4ZCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg1YywgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDQ3LCAweDk5LCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweGYwLCAweDk2LCAweDMwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZTEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDMsCisJMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YiwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDhkLCAweGIwLCAweDAxLCAweDAwLCAweDNkLCAweDk5LCAweDAwLCAweDQwLAorCTB4ODcsIDB4MzAsIDB4MDEsIDB4MDAsIDB4OGIsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDcsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgyMywgMHg5MCwgMHg4MCwgMHhmMywgMHg5NiwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweGU3LCAweDgxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ3LCAweDE5LCAweDkwLCAweDAxLCAweDAwLAorCTB4Y2YsIDB4OGQsIDB4MDAsIDB4NWMsIDB4MWYsIDB4OTAsIDB4MDAsIDB4MDAsIDB4MzQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg0NSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmNSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDExLCAweDAwLCAweDQwLCAweGU1LCAweDk5LCAweDAxLCAweDAwLCAweGM3LCAweDk1LCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MzgsIDB4OTAsIDB4YTIsIDB4MDgsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgzNywgMHgwMCwgMHgwMCwgMHg0MCwgMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMywKKwkweDgyLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDYzLCAweDUxLCAweDgzLCAweGQwLCAweDAxLCAweDAwLAorCTB4MzQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDcsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDEsIDB4MDAsIDB4NjMsIDB4ZjMsCisJMHg4NCwgMHhjYywgMHgwMSwgMHgwMCwgMHgzMCwgMHg5MCwgMHg5ZiwgMHg0MiwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDYzLCAweDQyLCAweDg1LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ1LAorCTB4MDMsIDB4ZjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4YzAsIDB4MDEsIDB4MDAsCisJMHgzMiwgMHg5MCwgMHgzNywgMHg1YywgMHg2MSwgMHgzMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYiwKKwkweDYyLCAweGIxLCAweDAxLCAweDAwLCAweDMzLCAweDkwLCAweGE4LCAweDRiLCAweDE5LCAweDEwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MzUsIDB4OTAsIDB4YTgsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhmZiwgMHg4OSwgMHgxNywgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDgwLCAweDAwLCAweDAzLCAweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDkwLCAweDAwLCAweDJkLCAweGYwLAorCTB4OTQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YWMsIDB4MDAsIDB4MmQsIDB4ZjAsIDB4MzAsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgzNSwgMHgwMCwgMHgyZCwgMHhmMCwgMHgyOCwgMHhiMCwgMHgwMSwgMHgwMCwgMHg1OCwgMHgwMCwgMHgzZSwgMHg0MywKKwkweGU3LCAweGUxLCAweDAxLCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweDE4LCAweGYwLCAweGM5LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGEsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MzgsIDB4MDAsIDB4MjAsIDB4MDAsCisJMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgzYywgMHgwMCwgMHgyMCwgMHgxYiwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDQwLCAweDAwLCAweDIwLCAweDQwLCAweGUxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4MmIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4OTgsIDB4MDAsIDB4NDAsIDB4MGQsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgxNiwgMHhjMCwgMHgwMSwgMHgwMCwgMHg0NywgMHg5MCwgMHhhMCwgMHgxNCwKKwkweDE2LCAweDQ0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDE3LCAweGMwLCAweDAxLCAweDAwLAorCTB4MGUsIDB4MDAsIDB4MDAsIDB4YTIsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsCisJMHhmOCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhiMCwgMHgwMCwgMHgyZCwgMHgxNCwgMHhmOCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDEwLCAweDUwLCAweDAwLCAweDQwLCAweDg3LCAweDk4LCAweDAxLCAweDAwLCAweDUwLCAweDkwLCAweDIyLCAweDRhLAorCTB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzAsIDB4MDAsIDB4NDMsIDB4ODYsIDB4YzgsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgzMCwgMHgwMCwgMHgwYiwgMHgxNiwgMHhjOCwgMHgwMSwgMHgwMCwgMHg1MCwgMHg5MCwgMHhhNCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDE3LCAweGMwLCAweDAxLCAweDAwLAorCTB4MDEsIDB4MDAsIDB4NmUsIDB4NDMsIDB4ODYsIDB4OTgsIDB4MDEsIDB4MDAsIDB4M2IsIDB4OTgsIDB4MDAsIDB4MzAsCisJMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwgMHg1NCwgMHg5MCwgMHhhMCwgMHg0MSwgMHgxNywgMHg0MCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDE3LCAweGMwLCAweDAxLCAweDAwLCAweDViLCAweDkwLCAweDIyLCAweDRhLAorCTB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4YTIsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsCisJMHhjYywgMHgwMCwgMHgyZCwgMHhhYiwgMHhmOSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhYiwKKwkweDE3LCAweGMwLCAweDAxLCAweDAwLCAweDVhLCAweDkwLCAweGEwLCAweGYwLCAweDE2LCAweDQ0LCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MTcsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjQsIDB4ZjAsCisJMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHg5MCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0NSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDYwLCAweDQxLCAweDMxLCAweGMwLCAweDAxLCAweDAwLCAweGJjLCAweDAwLCAweDAwLCAweDQwLAorCTB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4NjEsIDB4OTAsIDB4MDYsIDB4MGMsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHhhMCwgMHgwMCwgMHgyMCwgMHhmMiwgMHhlNCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwOSwgMHg0NiwKKwkweDE5LCAweDEwLCAweDAwLCAweDAwLCAweDljLCAweDAxLCAweDAwLCAweDQwLCAweDQ1LCAweDk5LCAweDAxLCAweDAwLAorCTB4ZmYsIDB4ZmYsIDB4MDAsIDB4MGIsIDB4OTgsIDB4ODgsIDB4MDEsIDB4MDAsIDB4OGIsIDB4MDAsIDB4MmQsIDB4NTAsCisJMHgxNywgMHhmMCwgMHgwMSwgMHgwMCwgMHg2NiwgMHg5MCwgMHg5MCwgMHg0YywgMHgxNiwgMHg0MCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDE3LCAweGMwLCAweDAxLCAweDAwLCAweDY4LCAweDkwLCAweDIyLCAweDQzLAorCTB4ZTcsIDB4N2QsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4NDUsIDB4YzEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg2NiwgMHgyMCwgMHgxNywgMHhhNCwgMHgwMSwgMHgwMCwgMHg2OCwgMHgwMSwgMHgwMCwgMHg0MCwKKwkweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDVjLCAweDAxLCAweDJlLCAweGYyLCAweDgwLCAweGIwLCAweDAxLCAweDAwLAorCTB4M2UsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODAsIDB4Y2UsIDB4MDEsIDB4MDAsIDB4NmYsIDB4OTAsIDB4MjQsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NiwgMHg4MSwgMHhjMCwgMHgwMSwgMHgwMCwKKwkweDcwLCAweDkwLCAweDAwLCAweDk0LCAweGU1LCAweGIxLCAweDAwLCAweDAwLCAweDAyLCAweDAwLCAweDYyLCAweDQwLAorCTB4N2UsIDB4Y2QsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTcsIDB4ODEsIDB4YzAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgyZSwgMHgxMCwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMywgMHgwMCwgMHgwMCwgMHg0MCwKKwkweGYwLCAweDhkLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweGYwLCAweGIxLCAweDAxLCAweDAwLAorCTB4NTgsIDB4MDEsIDB4MDAsIDB4MDUsIDB4ZTAsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsCisJMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDc2LCAweDkwLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDFiLCAweDg0LCAweDAwLCAweDg4LAorCTB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg4MCwgMHg5MCwgMHgyMiwgMHg0MCwgMHhhZiwgMHg2ZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwOCwKKwkweDk0LCAweGRjLCAweDAxLCAweDAwLCAweDcyLCAweDk4LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4N2IsIDB4OTAsIDB4YTIsIDB4NDAsIDB4OTcsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MzUsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwgMHg4NCwgMHg5MCwgMHgwMCwgMHg0MCwgMHgwNSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDgwLCAweDkwLCAweDQzLCAweDQ4LCAweDYxLCAweDMxLCAweDAwLCAweDAwLCAweDAwLCAweDUwLCAweDAwLCAweDA4LAorCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4ODEsIDB4OTAsIDB4YTgsIDB4NDAsIDB4MDUsIDB4MzAsIDB4MDAsIDB4MDAsCisJMHgzNSwgMHgwMCwgMHgxYiwgMHg0MCwgMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMSwgMHgwMCwgMHg2MywgMHhmMywKKwkweDg0LCAweGM4LCAweDAxLCAweDAwLCAweDg3LCAweDkwLCAweGEwLCAweDQzLCAweDg1LCAweDZjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4NjMsIDB4NDAsIDB4ODUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MzcsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMSwgMHgwMCwgMHg2MywgMHhmMywgMHg4MiwgMHhjYywgMHgwMSwgMHgwMCwKKwkweDhiLCAweDAwLCAweDAwLCAweDQwLCAweDQ3LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ1LAorCTB4ZTcsIDB4OTEsIDB4MDEsIDB4MDAsIDB4MjAsIDB4OTgsIDB4MDAsIDB4NWYsIDB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHhjZiwgMHg4ZCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgzNywgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDQ3LCAweDk5LCAweDAxLCAweDAwLCAweDY5LCAweDk2LCAweDAwLCAweGYzLCAweDk0LCAweDMwLCAweDAxLCAweDAwLAorCTB4MjcsIDB4OTAsIDB4MjIsIDB4NGEsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4YTUsIDB4OGUsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgzNywgMHgwMCwgMHgwMCwgMHg0MCwgMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDY5LCAweDk2LCAweDAwLCAweGYzLCAweDk0LCAweDMwLCAweDAxLCAweDAwLCAweDc1LCAweDhlLCAweDIyLCAweDRhLAorCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4YTUsIDB4OGUsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgzNiwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmYiwKKwkweDEyLCAweGIwLCAweDAxLCAweDAwLCAweDBmLCAweDAwLCAweDAwLCAweGYzLCAweDkwLCAweDg4LCAweDAxLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4ZjMsIDB4MGMsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4OWYsIDB4OGUsIDB4MjIsIDB4MDYsCisJMHg5MCwgMHg2YywgMHgwMCwgMHgwMCwgMHg1YywgMHgwMCwgMHgzZCwgMHg0MywgMHgxMywgMHhlMCwgMHgwMSwgMHgwMCwKKwkweGE4LCAweDAwLCAweDJkLCAweGYwLCAweDk0LCAweGIwLCAweDAxLCAweDAwLCAweDM3LCAweDAwLCAweDJmLCAweGYwLAorCTB4MjQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MzYsIDB4MDAsIDB4MmEsIDB4NTAsIDB4ZTcsIDB4ZDEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg2MywgMHg0MSwgMHgxMywgMHhjMCwgMHgwMSwgMHgwMCwgMHhhMSwgMHg5MCwgMHhhMCwgMHg0MywKKwkweDEzLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGU3LCAweGIxLCAweDAxLCAweDAwLAorCTB4Y2MsIDB4OTQsIDB4MDAsIDB4MTAsIDB4ODYsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MWIsIDB4ODQsIDB4MDAsIDB4ODgsCisJMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHhhMywgMHg5MCwgMHg0MiwgMHgwNSwgMHg0OCwgMHgzMSwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDkzLCAweDkzLCAweDAxLCAweDAwLCAweDlmLCAweDhlLCAweDFhLCAweDVkLAorCTB4NjksIDB4OTMsIDB4MDAsIDB4MDAsIDB4MzYsIDB4MDAsIDB4MmQsIDB4MTAsIDB4ODYsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHg1YywgMHgwMCwgMHgzZCwgMHg0MywgMHhlNywgMHhlMSwgMHgwMSwgMHgwMCwgMHhhOCwgMHgwMCwgMHgyZCwgMHhmMCwKKwkweDk0LCAweGIwLCAweDAxLCAweDAwLCAweDM1LCAweDAwLCAweDJmLCAweGYwLCAweDI0LCAweGIwLCAweDAxLCAweDAwLAorCTB4MDEsIDB4MDAsIDB4NmIsIDB4ZmIsIDB4ODQsIDB4YzgsIDB4MDEsIDB4MDAsIDB4YWUsIDB4OTAsIDB4YTAsIDB4NDMsCisJMHg4NSwgMHg2YywgMHgwMCwgMHgwMCwgMHgzNSwgMHgwMCwgMHgyMCwgMHg0MCwgMHhlNywgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAxLCAweDAwLCAweDYzLCAweGYzLAorCTB4MTIsIDB4YzgsIDB4MDEsIDB4MDAsIDB4YjEsIDB4OTAsIDB4YTAsIDB4NDMsIDB4MTMsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhlNywgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MCwgMHgwMCwgMHgwMywKKwkweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweGNlLCAweDk0LCAweDAwLCAweDRhLCAweGYwLCAweDMxLCAweDAxLCAweDAwLAorCTB4MWIsIDB4ODQsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4YjQsIDB4OTAsIDB4NDIsIDB4MDUsCisJMHg0OCwgMHgzMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg5MywgMHg5MywgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDFhLCAweDVkLCAweDY5LCAweDkzLCAweDAxLCAweDAwLCAweDM3LCAweDAwLCAweDAwLCAweDQwLAorCTB4NDcsIDB4OTksIDB4MDEsIDB4MDAsIDB4MTEsIDB4MDAsIDB4NjMsIDB4ZjMsIDB4ODIsIDB4Y2MsIDB4MDEsIDB4MDAsCisJMHhhMywgMHg4ZiwgMHgyMiwgMHg0MSwgMHg5ZSwgMHgwNiwgMHgwMCwgMHgwMCwgMHgzNSwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDU4LCAweDAwLCAweDNkLCAweDQzLCAweGU3LCAweGUxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MzYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YWQsIDB4OGYsIDB4MDAsIDB4ZjAsCisJMHgwMCwgMHhiMCwgMHgwMCwgMHgwMCwgMHg1ZSwgMHgwMSwgMHgyZCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweGJmLCAweDkwLCAweDQ3LCAweGYyLCAweDEyLCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDk5LCAweDNmLCAweDQyLAorCTB4MTMsIDB4ZjAsIDB4MDEsIDB4MDAsIDB4YzQsIDB4OTAsIDB4MjIsIDB4NDcsIDB4ZTcsIDB4N2QsIDB4MDAsIDB4MDAsCisJMHg2YiwgMHg4NCwgMHgxZiwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHhiZSwgMHg5MCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ3LCAweGU3LCAweDkxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MWYsIDB4NDIsIDB4MTksIDB4OTAsIDB4MDEsIDB4MDAsIDB4NzUsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwgMHhjNiwgMHg5MCwgMHhhOCwgMHhiMSwgMHgwYywgMHgzMCwgMHgwMCwgMHgwMCwKKwkweDQ2LCAweDk3LCAweDAwLCAweDEwLCAweDk0LCAweDMwLCAweDAxLCAweDAwLCAweDFiLCAweDg0LCAweDAwLCAweDg4LAorCTB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NWUsIDB4MDEsIDB4MmUsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHhjMCwgMHhhOCwgMHgzZCwgMHg0NiwgMHgwZCwgMHhlMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDk3LCAweGIwLCAweDAxLCAweDAwLCAweGQwLCAweDkwLCAweDIyLCAweDQwLCAweGUxLCAweDZkLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDIsIDB4NDEsIDB4OTcsIDB4NDAsIDB4MDAsIDB4MDAsIDB4Y2QsIDB4OTAsIDB4MDAsIDB4NTAsCisJMHg0MywgMHhjMSwgMHgwMCwgMHgwMCwgMHhkYywgMHg5MCwgMHgyMiwgMHg0YiwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDYyLCAweDRiLCAweDEyLCAweDk0LCAweDAxLCAweDAwLCAweDA5LCAweDAwLCAweDAwLCAweDA3LAorCTB4OTYsIDB4ZTQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTcsIDB4OTcsIDB4YzAsIDB4MDEsIDB4MDAsCisJMHgzMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg5NCwgMHhjOCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHg0YSwKKwkweDQ0LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLCAweGYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4NWUsIDB4MDEsIDB4MDAsIDB4NGIsIDB4ZjAsIDB4YzksIDB4MDEsIDB4MDAsIDB4NWUsIDB4MDEsIDB4MDAsIDB4MDUsCisJMHhlMCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDIwLCAweDAwLCAweDAwLCAweDRhLCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweGRhLCAweDkwLCAweGE4LCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MTAsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwOSwKKwkweDk2LCAweGU0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDY4LCAweGE4LCAweDk3LCAweGMwLCAweDAxLCAweDAwLAorCTB4ZDQsIDB4MDAsIDB4MDAsIDB4MDUsIDB4ZTAsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsCisJMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweGUyLCAweDkwLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDFiLCAweDg0LCAweDAwLCAweDg4LAorCTB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OTksIDB4M2YsIDB4NDIsIDB4MTMsIDB4ZjAsIDB4MDEsIDB4MDAsCisJMHhlNiwgMHg5MCwgMHg0NywgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgzZiwgMHgwMCwgMHgwMCwgMHhmMywKKwkweDk2LCAweDg4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGU3LCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MWYsIDB4NTUsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDYsCisJMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHhlYSwgMHg5MCwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweGVmLCAweDkwLCAweDIyLCAweDRiLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRiLAorCTB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZWQsIDB4OTAsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg5NywgMHgxMywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5NiwKKwkweDk3LCAweGIwLCAweDAxLCAweDAwLCAweGY1LCAweDkwLCAweDIwLCAweDA5LCAweDk2LCAweDZjLCAweDAwLCAweDAwLAorCTB4ZjUsIDB4OTAsIDB4MWYsIDB4MDksIDB4OTYsIDB4MjQsIDB4MDAsIDB4MDAsIDB4NmIsIDB4ODQsIDB4MDAsIDB4ODgsCisJMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHg5MCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweGFmLCAweDk3LCAweDAwLCAweDU3LCAweDgxLCAweDMwLCAweDAxLCAweDAwLCAweGJhLCAweDhkLCAweDAwLCAweDA1LAorCTB4NDgsIDB4YjEsIDB4MDAsIDB4MDAsIDB4MmUsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsCisJMHhmYiwgMHg5MCwgMHgyMiwgMHhmMywgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHhhZiwgMHg5NywgMHgwMCwgMHg0MiwKKwkweDgxLCAweDMwLCAweDAxLCAweDAwLCAweGZmLCAweDg5LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MjAsIDB4OTgsIDB4MDAsIDB4NTIsIDB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4YmEsIDB4OGQsIDB4MDAsIDB4NDIsCisJMHgxOSwgMHg4MCwgMHgwMCwgMHgwMCwgMHhhZiwgMHg5NywgMHgwMCwgMHgzYSwgMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwKKwkweDIwLCAweDk4LCAweDAwLCAweDUyLCAweDgxLCAweDMwLCAweDAxLCAweDAwLCAweGJhLCAweDhkLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDUsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHhjOSwgMHg5NiwgMHgwMCwgMHg0MCwgMHg5NSwgMHgzMCwgMHgwMSwgMHgwMCwgMHhiYSwgMHg4ZCwgMHgyMiwgMHg0MCwKKwkweDk1LCAweDZjLCAweDAwLCAweDAwLCAweDA2LCAweDkxLCAweGEyLCAweDQwLCAweDFmLCAweDdjLCAweDAwLCAweDAwLAorCTB4Y2MsIDB4OTUsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4ODksIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHg4MCwgMHgwMCwgMHgwMywgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGYyLCAweDAyLCAweGIwLCAweDAxLCAweDAwLCAweDc0LCAweDk2LCAweDAwLCAweDUyLAorCTB4OTUsIDB4MzAsIDB4MDEsIDB4MDAsIDB4N2IsIDB4OTYsIDB4MDAsIDB4NGIsIDB4MDIsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHhmZiwgMHg4OSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhmNCwgMHg5OCwgMHgwMCwgMHg0MCwKKwkweDk1LCAweDMwLCAweDAxLCAweDAwLCAweDExLCAweDkxLCAweGEyLCAweDA4LCAweDgwLCAweDMyLCAweDAwLCAweDAwLAorCTB4ZmYsIDB4ODksIDB4MjIsIDB4NDIsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGIsCisJMHgxOSwgMHg5MCwgMHgwMSwgMHgwMCwgMHhhZiwgMHg5NywgMHgwMCwgMHgzYSwgMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwKKwkweGZmLCAweDg5LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDIzLCAweDAwLCAweGE2LAorCTB4MTYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MTQsIDB4OTEsIDB4ODMsIDB4MWUsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwOCwgMHgwMCwgMHgwYiwgMHgxNiwgMHhkYywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDJhLCAweGMwLCAweDAxLCAweDAwLCAweGY4LCAweDk3LCAweDAwLCAweDA4LCAweDgwLCAweDMwLCAweDAxLCAweDAwLAorCTB4MTgsIDB4OTEsIDB4MDAsIDB4NWUsIDB4MTcsIDB4OTAsIDB4MDAsIDB4MDAsIDB4MTksIDB4OTgsIDB4MDAsIDB4NDMsCisJMHg2MSwgMHgzMSwgMHgwMSwgMHgwMCwgMHhkYSwgMHg5NCwgMHgwMCwgMHg0MCwgMHg4ZCwgMHgzMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDk4LCAweDAwLCAweDA3LCAweDE2LCAweDE0LCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDEwLAorCTB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4MjAsIDB4OTEsIDB4MjIsIDB4NDAsIDB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwKKwkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDFkLCAweDkxLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4MWIsIDB4ODQsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4YTEsIDB4OTcsIDB4MDAsIDB4NWUsCisJMHgwNSwgMHgxMCwgMHgwMSwgMHgwMCwgMHhjYywgMHg5NSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDI0LCAweDkxLCAweDIyLCAweDA5LCAweDgwLCAweDMwLCAweDAwLCAweDAwLCAweDIwLCAweDk4LCAweDAwLCAweDQwLAorCTB4MTMsIDB4MzAsIDB4MDEsIDB4MDAsIDB4YmYsIDB4OGQsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDAsIDB4MDAsCisJMHhmOSwgMHg5NiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhiYSwgMHg4ZCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRhLCAweDFmLCAweDkwLCAweDAxLCAweDAwLAorCTB4MmIsIDB4OTEsIDB4MjIsIDB4NDMsIDB4M2QsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsCisJMHgxOSwgMHg5MCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywgMHgzZCwgMHg4MCwgMHgwMSwgMHgwMCwKKwkweDJjLCAweDkxLCAweDAwLCAweDQyLCAweDE5LCAweDkwLCAweDAwLCAweDAwLCAweDE0LCAweDAwLCAweDJkLCAweDQ1LAorCTB4MWYsIDB4OTAsIDB4MDEsIDB4MDAsIDB4ODcsIDB4OTEsIDB4ODMsIDB4MWUsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHg4NywgMHg5MSwgMHgwMCwgMHg0NCwgMHgxOSwgMHg5MCwgMHgwMCwgMHgwMCwgMHhiZiwgMHg5NSwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDNmLCAweDkxLCAweGEyLCAweDA4LCAweDgwLCAweDMyLCAweDAwLCAweDAwLAorCTB4M2IsIDB4OTEsIDB4YTIsIDB4NDIsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODIsIDB4MDAsIDB4MDIsCisJMHgwNCwgMHhkYywgMHgwMSwgMHgwMCwgMHhhMCwgMHg5OCwgMHgwMCwgMHg0MCwgMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwKKwkweGUzLCAweDg5LCAweDAwLCAweDQxLCAweDg5LCAweDMwLCAweDAxLCAweDAwLCAweDM4LCAweDkxLCAweGEyLCAweDQxLAorCTB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4Y2MsIDB4OTUsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHhmZiwgMHg4OSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg3NCwgMHg5NiwgMHgwMCwgMHgxNSwKKwkweDk0LCAweDMwLCAweDAxLCAweDAwLCAweDdiLCAweDk2LCAweDAwLCAweDRiLCAweDAyLCAweGIwLCAweDAwLCAweDAwLAorCTB4ZmYsIDB4ODksIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4ZjksIDB4OTYsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YiwgMHgxOSwgMHg5MCwgMHgwMSwgMHgwMCwKKwkweGFmLCAweDk3LCAweDAwLCAweDNhLCAweDgxLCAweDMwLCAweDAxLCAweDAwLCAweGZmLCAweDg5LCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4NDIsIDB4OTEsIDB4MjIsIDB4NDIsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsCisJMHhmOSwgMHg5NiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHg0MywgMHg5MSwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGM5LCAweDk2LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4NmYsIDB4OTEsIDB4MjIsIDB4NDEsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4YzAsIDB4MDAsIDB4MDAsIDB4MTUsCisJMHg5OCwgMHhjOCwgMHgwMSwgMHgwMCwgMHg2ZiwgMHg5MSwgMHhhMCwgMHgwYiwgMHg5OSwgMHg2YywgMHgwMCwgMHgwMCwKKwkweDMwLCAweDAwLCAweDAwLCAweDEwLCAweDgwLCAweGM4LCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDQwLAorCTB4NDQsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwKKwkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDYyLCAweGIxLCAweDAxLCAweDAwLAorCTB4NGIsIDB4OTEsIDB4YTgsIDB4MDAsIDB4ZTAsIDB4MzEsIDB4MDAsIDB4MDAsIDB4MWIsIDB4ODQsIDB4MDAsIDB4ODgsCisJMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweGMwLCAweDAwLCAweDAwLCAweDE1LCAweDk4LCAweGM4LCAweDAxLCAweDAwLCAweDMwLCAweDAwLCAweDJlLCAweDBiLAorCTB4OTksIDB4ZDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NmEsIDB4NTAsIDB4OTksIDB4YzAsIDB4MDEsIDB4MDAsCisJMHhjMCwgMHgwMCwgMHg2MiwgMHgwMSwgMHg4MCwgMHhjYywgMHgwMSwgMHgwMCwgMHgwYywgMHg4MCwgMHgwMCwgMHgwMywKKwkweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDJkLCAweDAwLCAweDJkLCAweGYwLCAweDIyLCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGMsIDB4ODAsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWMsCisJMHgyMywgMHg4MCwgMHgwMSwgMHgwMCwgMHhkNCwgMHgwMCwgMHgzZiwgMHg0MSwgMHhlNywgMHhlMSwgMHgwMSwgMHgwMCwKKwkweDBiLCAweDAwLCAweDAwLCAweDExLCAweGU0LCAweGY1LCAweDAxLCAweDAwLCAweDJmLCAweDAwLCAweDIwLCAweDQ3LAorCTB4ZTcsIDB4YjUsIDB4MDEsIDB4MDAsIDB4NWMsIDB4OTEsIDB4MjMsIDB4MGIsIDB4ODEsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZiwgMHhlNSwgMHg5MSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwKKwkweDgwLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBiLCAweDAzLCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MTUsIDB4MDIsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4ZjgsIDB4OTcsIDB4MDAsIDB4MDAsCisJMHgyYSwgMHg0MCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDYxLCAweDkxLCAweGE4LCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MWIsIDB4ODQsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHhjYywgMHg5NSwgMHgwMCwgMHgwNSwgMHg0OCwgMHgzMSwgMHgwMSwgMHgwMCwgMHhjMCwgMHgwMCwgMHgwMCwgMHgwMSwKKwkweDgwLCAweGNlLCAweDAxLCAweDAwLCAweDZkLCAweDkxLCAweDI2LCAweDExLCAweDAwLCAweDMwLCAweDAwLCAweDAwLAorCTB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmEsIDB4YzgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsCisJMHg4MCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHg4MCwgMHhjMCwgMHgwMSwgMHgwMCwKKwkweGMwLCAweDAwLCAweDAwLCAweDQwLCAweDk5LCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLAorCTB4OTgsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4ZjgsIDB4OTcsIDB4MDAsIDB4NGMsIDB4MDIsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHhjMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwMywgMHg5OCwgMHgwMSwgMHgwMCwgMHg3NCwgMHg5MSwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDMwLCAweDAwLCAweDJmLCAweDA4LCAweDgwLCAweGIwLCAweDAxLCAweDAwLAorCTB4YzAsIDB4MDAsIDB4MDAsIDB4MTUsIDB4ZjQsIDB4YzksIDB4MDEsIDB4MDAsIDB4YzAsIDB4MDAsIDB4MDAsIDB4MDEsCisJMHhlNCwgMHhjZCwgMHgwMSwgMHgwMCwgMHhjMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwMywgMHg5OCwgMHgwMSwgMHgwMCwKKwkweGY4LCAweDk3LCAweDAwLCAweDAwLCAweDJhLCAweDQwLCAweDAxLCAweDAwLCAweDc5LCAweDkxLCAweDIyLCAweDQ0LAorCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4YWMsIDB4MDAsIDB4MmYsIDB4NDAsIDB4MTMsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHhlMCwgMHhjMSwgMHgwMSwgMHgwMCwgMHhiMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDQ3LCAweDk5LCAweDAxLCAweDAwLCAweDdhLCAweDkxLCAweDAwLCAweDAxLCAweGUwLCAweGQxLCAweDAwLCAweDAwLAorCTB4ZGEsIDB4OTQsIDB4MDAsIDB4NDAsIDB4OGQsIDB4MzAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4NjMsIDB4MDAsIDB4YTYsCisJMHgxNiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg5OCwgMHgwMCwgMHgwNywgMHgxNiwgMHgxNCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDgwLCAweDAwLCAweDEwLCAweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDgyLCAweDkxLCAweDIyLCAweDQwLAorCTB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHg3ZiwgMHg5MSwgMHhhOCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDFiLCAweDg0LCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAorCTB4YTEsIDB4OTcsIDB4MDAsIDB4NWUsIDB4MDUsIDB4MTAsIDB4MDEsIDB4MDAsIDB4ODUsIDB4OTEsIDB4MjIsIDB4MDksCisJMHg4MCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg5OCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweGJhLCAweDhkLCAweDAwLCAweDA1LCAweDQ4LCAweGIxLCAweDAwLCAweDAwLCAweDg3LCAweDkxLCAweDAwLCAweDRhLAorCTB4MWYsIDB4OTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgyNCwgMHgwMCwgMHgyZCwgMHgxNSwgMHgxMCwgMHhjMCwgMHgwMSwgMHgwMCwgMHgyOCwgMHgwMCwgMHgyZCwgMHhmMCwKKwkweDE2LCAweGIwLCAweDAxLCAweDAwLCAweDIyLCAweDAwLCAweDJkLCAweGYwLCAweDI2LCAweGIwLCAweDAxLCAweDAwLAorCTB4MTQsIDB4MDAsIDB4MmYsIDB4ZjIsIDB4MGMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsCisJMHhlMCwgMHhkMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgzMiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDBiLCAweDFiLCAweGIwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDFmLCAweDE1LAorCTB4MWEsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MjMsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgyYSwgMHhiMCwgMHgwMSwgMHgwMCwgMHg1YiwgMHg5NywgMHgwMCwgMHg0MCwKKwkweDM1LCAweGIwLCAweDAwLCAweDAwLCAweDJmLCAweDAwLCAweDIwLCAweDQwLCAweGU3LCAweGIxLCAweDAxLCAweDAwLAorCTB4Y2IsIDB4OTEsIDB4YTIsIDB4NDUsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MjQsIDB4MDAsIDB4MjAsIDB4MGIsCisJMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyOCwgMHgwMCwgMHgyMCwgMHgxMywgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDIyLCAweDAwLCAweDIwLCAweDA2LCAweGU0LCAweGIxLCAweDAxLCAweDAwLCAweGExLCAweDkxLCAweDIyLCAweDVjLAorCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWMsIDB4MWYsIDB4ODAsIDB4MDEsIDB4MDAsCisJMHgzMCwgMHg4MCwgMHgwMCwgMHgxMCwgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHhhMSwgMHg5MSwgMHgyMiwgMHg0MCwKKwkweGUzLCAweDZkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ3LCAweDYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4OWQsIDB4OTEsIDB4YTgsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgxYiwgMHg4NCwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDE5LAorCTB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4YzQsIDB4OTEsIDB4MjIsIDB4NDAsIDB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsCisJMHhiMiwgMHg5MSwgMHgyMiwgMHg0MiwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHgyMSwgMHg5NywgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDc0LCAweDk1LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4YmYsIDB4OTEsIDB4MjIsIDB4NGIsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsCisJMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKKwkweGE4LCAweDkxLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDFiLCAweDg0LCAweDAwLCAweDg4LAorCTB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4YWUsIDB4OTEsIDB4MjIsIDB4NDEsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsCisJMHhlMiwgMHg5NSwgMHgwMCwgMHg0MCwgMHgxMSwgMHgzMCwgMHgwMSwgMHgwMCwgMHhhZiwgMHg5MSwgMHgwMCwgMHgwNSwKKwkweDQ4LCAweGIxLCAweDAwLCAweDAwLCAweGNjLCAweDk1LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4YjEsIDB4OTEsIDB4MjIsIDB4MDksIDB4ODAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OTgsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHg2ZiwgMHg4NCwgMHgwMCwgMHg0MCwgMHgwNSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDIxLCAweDk3LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDcwLCAweDk1LCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHhiNSwgMHg5MSwgMHhhOCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDFiLCAweDg0LCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAorCTB4YmIsIDB4OTEsIDB4MjIsIDB4NDEsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4ZTIsIDB4OTUsIDB4MDAsIDB4NDAsCisJMHgxMSwgMHgzMCwgMHgwMSwgMHgwMCwgMHhiYywgMHg5MSwgMHgwMCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMCwgMHgwMCwKKwkweGNjLCAweDk1LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGJlLCAweDkxLCAweDIyLCAweDA5LAorCTB4ODAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OTgsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHg2ZiwgMHg4NCwgMHgwMCwgMHg0MCwgMHgwNSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywKKwkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLAorCTB4YzAsIDB4OTEsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MWIsIDB4ODQsIDB4MDAsIDB4ODgsCisJMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweGM3LCAweDkxLCAweDIyLCAweDQxLCAweDE5LCAweDdjLCAweDAwLCAweDAwLCAweGUyLCAweDk1LCAweDAwLCAweDQwLAorCTB4MTEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4YzgsIDB4OTEsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDAsIDB4MDAsCisJMHhjYywgMHg5NSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhjYSwgMHg5MSwgMHgyMiwgMHgwOSwKKwkweDgwLCAweDMwLCAweDAwLCAweDAwLCAweDIwLCAweDk4LCAweDAwLCAweDQwLCAweDEzLCAweDMwLCAweDAxLCAweDAwLAorCTB4YmYsIDB4OGQsIDB4MDAsIDB4NDAsIDB4MDUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MTksCisJMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHhkMiwgMHg5MSwgMHgyMiwgMHg0MCwgMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQzLCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLAorCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4Y2UsIDB4OTEsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgxYiwgMHg4NCwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwKKwkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDA1LCAweGIwLCAweDAxLCAweDAwLAorCTB4ZDYsIDB4OTEsIDB4MjIsIDB4NDEsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4ZTIsIDB4OTUsIDB4MDAsIDB4NDAsCisJMHgxMSwgMHgzMCwgMHgwMSwgMHgwMCwgMHhkNywgMHg5MSwgMHgwMCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMCwgMHgwMCwKKwkweGNjLCAweDk1LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDA4LCAweDAwLCAweDJkLCAweDBhLAorCTB4ODQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgxNCwgMHgwMCwgMHgyMCwgMHg0MCwgMHhlMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhkYywgMHg5MSwgMHgwMywgMHgxZSwKKwkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweGRkLCAweDkxLCAweDAwLCAweDQxLCAweDg3LCAweGIwLCAweDAwLCAweDAwLAorCTB4MjEsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODcsIDB4OTgsIDB4MDEsIDB4MDAsIDB4ZWEsIDB4OTYsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1YywgMHgxZiwgMHg5MCwgMHgwMSwgMHgwMCwKKwkweGUxLCAweDkxLCAweDIyLCAweDA5LCAweDgwLCAweDMwLCAweDAwLCAweDAwLCAweDIwLCAweDk4LCAweDAwLCAweDQwLAorCTB4MTMsIDB4MzAsIDB4MDEsIDB4MDAsIDB4ZTQsIDB4OTEsIDB4MjIsIDB4NDQsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsCisJMHgyMCwgMHg5OCwgMHgwMCwgMHg0ZiwgMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwKKwkweDE5LCAweDgwLCAweDAxLCAweDAwLCAweGJhLCAweDhkLCAweGEyLCAweDRhLCAweDFmLCAweDdjLCAweDAwLCAweDAwLAorCTB4YmYsIDB4OGQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4YmEsIDB4MDAsIDB4MjAsIDB4NDAsCisJMHhlNSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhlYSwgMHg5MSwgMHg5YywgMHgxNywgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweGNjLCAweDAwLCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLCAweGZiLCAweDk4LCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4OGQsIDB4OTgsIDB4MDAsIDB4NDAsIDB4MTMsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHhjMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHhjNCwgMHgwMCwgMHgyZCwgMHhmMCwKKwkweDgyLCAweGIwLCAweDAxLCAweDAwLCAweGQ4LCAweDk4LCAweDAwLCAweGYwLCAweDg0LCAweDMwLCAweDAxLCAweDAwLAorCTB4Y2MsIDB4OTUsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4YmYsIDB4OGQsIDB4MjIsIDB4MDksCisJMHg4MCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg5OCwgMHgwMCwgMHg0MCwgMHgxMywgMHgzMCwgMHgwMSwgMHgwMCwKKwkweGJmLCAweDhkLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDJlLCAweDAwLCAweDAwLCAweDQwLAorCTB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4ZjYsIDB4OTEsIDB4MjIsIDB4NDAsIDB4ZTcsIDB4NmQsIDB4MDAsIDB4MDAsCisJMHgzMiwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHhmZSwgMHg5MSwgMHhhMiwgMHg0MCwKKwkweGU1LCAweDZkLCAweDAwLCAweDAwLCAweGI2LCAweDk2LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4MjQsIDB4MDAsIDB4MjAsIDB4MGIsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MjgsIDB4MDAsIDB4MjAsIDB4MTMsCisJMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyMiwgMHgwMCwgMHgyMCwgMHgwNiwgMHhlNCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDE0LCAweDAwLCAweDIwLCAweDBhLCAweGUwLCAweGIxLCAweDAxLCAweDAwLCAweGJmLCAweDhkLCAweDIyLCAweDA5LAorCTB4ODAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OTgsIDB4MDAsIDB4NDAsIDB4MTMsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHhiZiwgMHg4ZCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhiNiwgMHg5NiwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDZmLCAweDk2LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4MGMsIDB4OTIsIDB4MjIsIDB4NDEsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGIsCisJMHg5OSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgxZiwgMHgxNSwgMHg5OCwgMHg1MCwgMHgwMCwgMHgwMCwKKwkweDBjLCAweDkyLCAweDIwLCAweDAxLCAweDk4LCAweDZjLCAweDAwLCAweDAwLCAweDcwLCAweDAwLCAweDAwLCAweDAzLAorCTB4NDgsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmUsIDB4NDYsIDB4MWYsIDB4OTAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywKKwkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLCAweDYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4YTAsIDB4MDAsIDB4MDAsIDB4YTQsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4MDksIDB4OTIsIDB4YTgsIDB4MDAsCisJMHhlMCwgMHgzMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweGFjLCAweDAwLCAweDJmLCAweDAwLCAweDEwLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLAorCTB4ZTAsIDB4YzEsIDB4MDEsIDB4MDAsIDB4MTQsIDB4MDAsIDB4MmYsIDB4MTUsIDB4MTAsIDB4YzAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwYSwgMHg4MCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2MCwgMHgwMSwKKwkweDgwLCAweGQwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ3LCAweDE5LCAweDkwLCAweDAxLCAweDAwLAorCTB4OGUsIDB4OTEsIDB4MjIsIDB4MDksIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OTgsIDB4MDAsIDB4MDksCisJMHg4MCwgMHgzMCwgMHgwMSwgMHgwMCwgMHg4ZSwgMHg5MSwgMHgwMCwgMHg0MCwgMHgxMywgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDgwLCAweDAwLCAweDAzLCAweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLAorCTB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MTMsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODcsIDB4OTgsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0YywgMHg0MywgMHhjMSwgMHgwMSwgMHgwMCwgMHhlYSwgMHg5NiwgMHgwMCwgMHhmMCwKKwkweDg0LCAweDMwLCAweDAxLCAweDAwLCAweGJhLCAweDhkLCAweDAwLCAweDVjLCAweDFmLCAweDkwLCAweDAwLCAweDAwLAorCTB4MmMsIDB4MDAsIDB4MjAsIDB4NDAsIDB4ZTcsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MmQsIDB4MDAsIDB4MjAsIDB4NDAsCisJMHhlNywgMHhiMSwgMHgwMSwgMHgwMCwgMHhiYSwgMHg4ZCwgMHgwMCwgMHg0MiwgMHgxOSwgMHg4MCwgMHgwMCwgMHgwMCwKKwkweGRjLCAweDk2LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGY1LCAweDk3LCAweDAwLCAweDQ4LAorCTB4OTUsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHgyMSwgMHg5MiwgMHhhOCwgMHg0MCwKKwkweDEzLCAweDMwLCAweDAwLCAweDAwLCAweDFiLCAweDg0LCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAorCTB4MjcsIDB4OTIsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDAsIDB4MDAsIDB4MjYsIDB4OTIsIDB4MDAsIDB4NDAsCisJMHgxMywgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDA4LCAweDAwLCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDE0LCAweDAwLCAweDJkLCAweGYwLAorCTB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjIsIDB4ZjAsIDB4ODQsIDB4MzAsIDB4MDAsIDB4MDAsCisJMHgxMywgMHgwMCwgMHgwMCwgMHg0MCwgMHg4NywgMHg5OCwgMHgwMSwgMHgwMCwgMHhlYSwgMHg5NiwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVjLCAweDFmLCAweDkwLCAweDAxLCAweDAwLAorCTB4M2YsIDB4OTIsIDB4MDAsIDB4MDksIDB4MDAsIDB4YjAsIDB4MDAsIDB4MDAsIDB4YmEsIDB4OGQsIDB4ODcsIDB4NDIsCisJMHgxOSwgMHgxMCwgMHgwMCwgMHgwMCwgMHg4YiwgMHgwMCwgMHgyZiwgMHg0NywgMHgxOSwgMHg4MCwgMHgwMSwgMHgwMCwKKwkweGJhLCAweDhkLCAweDAwLCAweDQwLCAweGU3LCAweDkxLCAweDAwLCAweDAwLCAweDJmLCAweDAwLCAweDAwLCAweDQwLAorCTB4NDcsIDB4OTksIDB4MDEsIDB4MDAsIDB4M2QsIDB4OTIsIDB4MjIsIDB4NDcsIDB4ZTcsIDB4N2QsIDB4MDAsIDB4MDAsCisJMHg1MSwgMHg5NSwgMHgwMCwgMHg0MCwgMHhlNywgMHgzMSwgMHgwMSwgMHgwMCwgMHgzZCwgMHg5MiwgMHgyMiwgMHgwMCwKKwkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDM4LCAweDkyLCAweGEyLCAweDQwLCAweDFmLCAweDdjLCAweDAwLCAweDAwLAorCTB4Y2MsIDB4OTUsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4M2QsIDB4OTIsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDMyLCAweDAwLCAweDJkLCAweGYyLCAweDk0LCAweGIwLCAweDAxLCAweDAwLCAweDc0LCAweDk2LCAweDAwLCAweGYyLAorCTB4MDIsIDB4MzAsIDB4MDEsIDB4MDAsIDB4N2IsIDB4OTYsIDB4MDAsIDB4NGIsIDB4MDIsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgzZSwgMHg5MiwgMHgwMCwgMHg0MCwKKwkweDAxLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDA1LCAweGIwLCAweDAxLCAweDAwLAorCTB4NDQsIDB4OTIsIDB4MjIsIDB4MDAsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4NDMsIDB4OTIsIDB4YTIsIDB4NDIsCisJMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHhjOSwgMHg5NiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDQ0LCAweDkyLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGY5LCAweDk2LCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4Y2UsIDB4OTIsIDB4MjIsIDB4NWMsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1YywgMHgxZiwgMHg4MCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgxMCwKKwkweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDRjLCAweDkyLCAweDIyLCAweDQwLCAweGUzLCAweDZkLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsCisJMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHg0OSwgMHg5MiwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDFiLCAweDg0LCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweGNlLCAweDkyLCAweDAwLCAweDA1LAorCTB4NDgsIDB4YjEsIDB4MDAsIDB4MDAsIDB4YmYsIDB4OTUsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHg1MiwgMHg5MiwgMHhhMiwgMHgwOCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHhhZiwgMHg5NywgMHgwMCwgMHg0ZCwKKwkweDgxLCAweDMwLCAweDAxLCAweDAwLCAweDAwLCAweDgyLCAweDAwLCAweDAyLCAweDA0LCAweGRjLCAweDAxLCAweDAwLAorCTB4ZmYsIDB4ODksIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4NzQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGYwLCAweDg0LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAorCTB4OTYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NjAsIDB4OTIsIDB4MjIsIDB4NDIsIDB4OTYsIDB4MTQsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHgxMCwgMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHg2NCwgMHgwMCwgMHg2OCwgMHg0MCwKKwkweDk3LCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweGYwLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NzAsIDB4MDAsIDB4MDAsIDB4MDUsCisJMHhlMCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDIwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDVkLCAweDkyLCAweGE4LCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWMsIDB4MWYsIDB4OTAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwKKwkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDYxLCAweDkyLCAweGE4LCAweDVjLCAweDFmLCAweDAwLCAweDAwLCAweDAwLAorCTB4MWIsIDB4ODQsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NWUsIDB4MDEsIDB4MmQsIDB4MDUsCisJMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg2NSwgMHg5MiwgMHg0NywgMHhmMiwgMHgxMiwgMHgzMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDk5LCAweDNmLCAweDQyLCAweDEzLCAweGYwLCAweDAxLCAweDAwLCAweDZhLCAweDkyLCAweDIyLCAweDQ3LAorCTB4ZTcsIDB4N2QsIDB4MDAsIDB4MDAsIDB4NmIsIDB4ODQsIDB4MWYsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHg2NCwgMHg5MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywKKwkweGU3LCAweDkxLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDFmLCAweDA5LCAweDk2LCAweGU0LCAweDAxLCAweDAwLAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4MTAsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsCisJMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2OCwgMHhhOCwgMHg5NywgMHhjMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAzLCAweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDAzLAorCTB4NDQsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHg3MiwgMHg5MiwgMHhhOCwgMHg0MCwKKwkweGUxLCAweDMxLCAweDAwLCAweDAwLCAweDFiLCAweDg0LCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4OTksIDB4M2YsIDB4NDIsIDB4MTMsIDB4ZjAsIDB4MDEsIDB4MDAsIDB4NzYsIDB4OTIsIDB4NDcsIDB4MDUsCisJMHg0OCwgMHgzMSwgMHgwMCwgMHgwMCwgMHgzZiwgMHgwMCwgMHgwMCwgMHhmMywgMHg5NiwgMHg4OCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGU3LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDFmLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4N2UsIDB4OTIsIDB4MjIsIDB4NGIsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1NSwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YiwKKwkweDYyLCAweGIxLCAweDAxLCAweDAwLCAweDdjLCAweDkyLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MTYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4NjIsIDB4MDAsIDB4MGIsCisJMHgxNiwgMHhkYywgMHgwMSwgMHgwMCwgMHg1MSwgMHg5NSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDk2LCAweDkyLCAweDIyLCAweDAwLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweGZmLCAweDk2LCAweDAwLCAweDVmLAorCTB4MDEsIDB4MTAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4OTIsIDB4MjIsIDB4NDAsIDB4OTUsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHgxMCwgMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwKKwkweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweGYwLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsCisJMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHg4OCwgMHg5MiwgMHhhOCwgMHgwMCwgMHhlMCwgMHgzMSwgMHgwMCwgMHgwMCwKKwkweDFiLCAweDg0LCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LAorCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDQsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmMiwgMHgwMiwgMHhiMCwgMHgwMSwgMHgwMCwgMHg3NCwgMHg5NiwgMHgwMCwgMHg1MiwKKwkweDk1LCAweDMwLCAweDAxLCAweDAwLCAweGNjLCAweDk1LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4ODAsIDB4OTIsIDB4MjIsIDB4NDEsIDB4OTcsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MGMsIDB4ODAsIDB4MDAsIDB4MDMsCisJMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHgwMCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDVjLCAweDAxLCAweDgwLCAweDAxLCAweDAwLCAweDdiLCAweDk2LCAweDAwLCAweDRiLAorCTB4MDIsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4OTIsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHg5OCwgMHgwMCwgMHg0MCwgMHgwMywgMHgzMCwgMHgwMSwgMHgwMCwgMHgxNywgMHg4MCwgMHgwMCwgMHgwMywKKwkweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweGYwLCAweDAwLCAweDBjLCAweDk2LCAweDg4LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4NjMsIDB4NGMsIDB4OTcsIDB4ZjAsIDB4MDEsIDB4MDAsIDB4MTAsIDB4ODAsIDB4MDAsIDB4MDMsCisJMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhYiwgMHhlMSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweGExLCAweDk3LCAweDAwLCAweDVlLCAweDA1LCAweDEwLCAweDAxLCAweDAwLCAweDAzLCAweDAwLCAweDAwLCAweDA3LAorCTB4MWEsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MTYsIDB4ODgsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHhiNSwgMHgwMCwgMHgwZCwgMHg0NiwgMHhjOSwgMHgwMSwgMHgwMCwgMHhhMCwgMHg5MiwgMHgzMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBiLCAweGU2LCAweDgxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4YjcsIDB4MDAsIDB4MGQsIDB4NDYsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGIsCisJMHhlNiwgMHg4MSwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMCwgMHgxMCwgMHgwZiwgMHg5NCwgMHhmNCwgMHgwMSwgMHgwMCwKKwkweGQxLCAweDk5LCAweDAwLCAweDVmLCAweDk1LCAweDA0LCAweDAxLCAweDAwLCAweDU1LCAweDk2LCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4YWEsIDB4OTIsIDB4MjIsIDB4NTAsIDB4ZmQsIDB4N2YsIDB4MDAsIDB4MDAsCisJMHhhOCwgMHg5MiwgMHg0MywgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYiwgMHg0MSwKKwkweDMxLCAweGQzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJlLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZTEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHgwZiwgMHhiMCwgMHgwMSwgMHgwMCwgMHhiOCwgMHg5NSwgMHgwMCwgMHg0MSwgMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwKKwkweGZmLCAweDg5LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGJmLCAweDk1LCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4YmIsIDB4OTIsIDB4YTIsIDB4MDgsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHg4MiwgMHgwMCwgMHgwMiwgMHgwNCwgMHhkYywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwKKwkweDAzLCAweGYwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweGMwLCAweDAxLCAweDAwLAorCTB4YjQsIDB4OTIsIDB4MzcsIDB4NWMsIDB4NjEsIDB4MzEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWIsCisJMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHhiOCwgMHg5MiwgMHgyOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweGI1LCAweDkyLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YjgsIDB4OTIsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHhmZiwgMHg4OSwgMHgxNywgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg3NCwgMHgwMCwgMHgyMiwgMHg0MCwKKwkweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGUxLCAweGIxLCAweDAxLCAweDAwLAorCTB4ZjUsIDB4OTcsIDB4MDAsIDB4NGEsIDB4OTUsIDB4MzAsIDB4MDEsIDB4MDAsIDB4ZGMsIDB4OTYsIDB4MDAsIDB4NWMsCisJMHgxZiwgMHgxMCwgMHgwMSwgMHgwMCwgMHg1MiwgMHg5MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDJmLCAweDAwLCAweDAwLCAweDQwLCAweDQ3LCAweDk5LCAweDAxLCAweDAwLCAweGNjLCAweDkyLCAweDIyLCAweDQ3LAorCTB4ZTcsIDB4N2QsIDB4MDAsIDB4MDAsIDB4NTEsIDB4OTUsIDB4MDAsIDB4NDAsIDB4ZTcsIDB4MzEsIDB4MDEsIDB4MDAsCisJMHhjYywgMHg5MiwgMHgyMiwgMHgwMCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHhjNywgMHg5MiwgMHhhMiwgMHg0MCwKKwkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweGNjLCAweDk1LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4Y2MsIDB4OTIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHgzMiwgMHgwMCwgMHgyZCwgMHhmMiwgMHg5NCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDc0LCAweDk2LCAweDAwLCAweGYyLCAweDAyLCAweDMwLCAweDAxLCAweDAwLCAweDdiLCAweDk2LCAweDAwLCAweDRiLAorCTB4MDIsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHhmNSwgMHg5NywgMHgwMCwgMHg0OCwgMHg5NSwgMHgzMCwgMHgwMSwgMHgwMCwgMHhkYywgMHg5NiwgMHgwMCwgMHg1YywKKwkweDFmLCAweDEwLCAweDAxLCAweDAwLCAweGQxLCAweDkyLCAweDg3LCAweDQyLCAweDE5LCAweDEwLCAweDAwLCAweDAwLAorCTB4OGIsIDB4MDAsIDB4MmYsIDB4NDcsIDB4MTksIDB4ODAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHhlNywgMHg5MSwgMHgwMSwgMHgwMCwgMHgyMCwgMHg5OCwgMHgwMCwgMHg0MiwgMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwKKwkweGJhLCAweDhkLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGRjLCAweDk2LCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4YmEsIDB4OGQsIDB4MDAsIDB4NWMsIDB4MWYsIDB4OTAsIDB4MDAsIDB4MDAsCisJMHhiYSwgMHgwMCwgMHgyMCwgMHg0MCwgMHhlNSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg4ZCwgMHg5OCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGMwLCAweDAwLCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLAorCTB4YzQsIDB4MDAsIDB4MmQsIDB4ZjAsIDB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ZDgsIDB4OTgsIDB4MDAsIDB4ZjAsCisJMHg4NCwgMHgzMCwgMHgwMSwgMHgwMCwgMHhjYywgMHg5NSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDIwLCAweDk4LCAweDAwLCAweDQ1LCAweDgxLCAweDMwLCAweDAxLCAweDAwLCAweGJhLCAweDhkLCAweDIyLCAweDQyLAorCTB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4YWYsIDB4OTcsIDB4MDAsIDB4M2EsIDB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHhiYSwgMHg4ZCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGJmLCAweDk1LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4ZTUsIDB4OTIsIDB4YTIsIDB4MDgsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4YWYsIDB4OTcsIDB4MDAsIDB4NDcsCisJMHg4MCwgMHgzMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MiwgMHgwMCwgMHgwMiwgMHgwNCwgMHhkYywgMHgwMSwgMHgwMCwKKwkweGZmLCAweDg5LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDEwLCAweDgwLCAweDAwLCAweDAzLAorCTB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4ZTEsIDB4MDAsIDB4YTYsIDB4ODQsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDYwLCAweDA3LCAweDg0LCAweDk0LCAweDAxLCAweDAwLAorCTB4YTEsIDB4OTcsIDB4MDAsIDB4NWUsIDB4MDUsIDB4MTAsIDB4MDEsIDB4MDAsIDB4YmEsIDB4OGQsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg4YSwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwKKwkweGNjLCAweDk1LCAweDAwLCAweDQxLCAweGU3LCAweDQxLCAweDAxLCAweDAwLCAweGJmLCAweDhkLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4YjYsIDB4OTYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHg2ZiwgMHg5NiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwKKwkweDJjLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE1LCAweDEwLCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MWYsIDB4MGEsCisJMHgyYywgMHg1MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgzMiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDA3LCAweDAwLCAweDAwLCAweDBiLCAweDk2LCAweDg4LCAweDAxLCAweDAwLCAweDAxLCAweDkzLCAweDI2LCAweDQ3LAorCTB4OTcsIDB4MjQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4OTcsIDB4YzAsIDB4MDEsIDB4MDAsCisJMHgwMSwgMHg5MywgMHgyMywgMHg0YiwgMHgwYywgMHg2YywgMHgwMCwgMHgwMCwgMHgzMywgMHg5OCwgMHgwMCwgMHg0YiwKKwkweDA0LCAweDMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLCAweDMzLCAweGMwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MTAsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsCisJMHgxNiwgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNiwgMHgwNCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDMzLCAweDk4LCAweDAwLCAweDRiLCAweDA0LCAweDUwLCAweDAxLCAweDAwLCAweDAyLCAweDkzLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MzMsIDB4OTgsIDB4MDAsIDB4MDYsIDB4MDQsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHgwOCwgMHg5MywgMHhhMiwgMHg0OCwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwNiwgMHg5MywgMHg4NCwgMHg0OCwKKwkweDFmLCAweDEwLCAweDAwLCAweDAwLCAweGFjLCAweDAwLCAweDAwLCAweDQwLCAweDQ3LCAweDk5LCAweDAxLCAweDAwLAorCTB4MDgsIDB4OTMsIDB4MDAsIDB4MGEsIDB4ZTAsIDB4YzEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGEsCisJMHgwMiwgMHhiMCwgMHgwMSwgMHgwMCwgMHhkYSwgMHg5NCwgMHgwMCwgMHgwMSwgMHg4YywgMHgzMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQzLCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLAorCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4MDksIDB4OTMsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgxYiwgMHg4NCwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwKKwkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweDEwLCAweGMwLCAweDAxLCAweDAwLAorCTB4MTYsIDB4OTMsIDB4MjIsIDB4MDYsIDB4MTQsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MjQsIDB4OTcsIDB4MDAsIDB4NDUsCisJMHgxZiwgMHgwMCwgMHgwMSwgMHgwMCwgMHhmNSwgMHg5MiwgMHgyMiwgMHg1YywgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ3LCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLAorCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4MTIsIDB4OTMsIDB4YTgsIDB4NWMsIDB4MWYsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgxYiwgMHg4NCwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHhmNSwgMHg5MiwgMHgwMCwgMHgwNSwKKwkweDQ4LCAweGIxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBiLCAweDFiLCAweGIwLCAweDAxLCAweDAwLAorCTB4MDgsIDB4MDAsIDB4MmQsIDB4NDAsIDB4ODUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsCisJMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwNSwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweGVhLCAweDk2LCAweDAwLCAweDQxLCAweDg3LCAweDMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ1LAorCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCisJMHgxYywgMHg5MywgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgxYiwgMHg4NCwgMHgwMCwgMHg4OCwKKwkweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLAorCTB4MjIsIDB4OTMsIDB4MjIsIDB4MDksIDB4ODAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OTgsIDB4MDAsIDB4NDAsCisJMHgxMywgMHgzMCwgMHgwMSwgMHgwMCwgMHgyNiwgMHg5MywgMHgyMiwgMHg0NCwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwKKwkweDIwLCAweDk4LCAweDAwLCAweDRmLCAweDgxLCAweDMwLCAweDAxLCAweDAwLCAweDI2LCAweDkzLCAweGEyLCAweDQ3LAorCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4MTksIDB4ODAsIDB4MDEsIDB4MDAsCisJMHhmZiwgMHgwNywgMHgwMCwgMHgwOCwgMHgwMCwgMHg4YywgMHgwMSwgMHgwMCwgMHgzNCwgMHg5MywgMHgyMiwgMHg0YSwKKwkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDJjLCAweDkzLCAweGEyLCAweDE2LCAweDAyLCAweDMwLCAweDAwLCAweDAwLAorCTB4Y2MsIDB4OTUsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MmYsIDB4MDAsIDB4MjAsIDB4NDAsCisJMHhlNywgMHhiMSwgMHgwMSwgMHgwMCwgMHhiYSwgMHg4ZCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDJkLCAweDAwLCAweDJkLCAweDA4LCAweDJhLCAweGIwLCAweDAxLCAweDAwLCAweDMwLCAweDkzLCAweDIyLCAweDQyLAorCTB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4ZjksIDB4OTYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHgzMSwgMHg5MywgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhjOSwgMHg5NiwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDMwLCAweDAwLCAweDJlLCAweDAwLCAweDJhLCAweGQwLCAweDAxLCAweDAwLAorCTB4MzIsIDB4MDAsIDB4MmEsIDB4MTUsIDB4ZTQsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YmEsIDB4OGQsIDB4MDAsIDB4MTYsCisJMHhlNCwgMHhiMSwgMHgwMCwgMHgwMCwgMHg0NiwgMHg5MywgMHgyMiwgMHgxNiwgMHgwMiwgMHgzMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDJhLCAweGIwLCAweDAxLCAweDAwLCAweGY0LCAweDk4LCAweDAwLCAweDQwLAorCTB4OTUsIDB4MzAsIDB4MDEsIDB4MDAsIDB4NDcsIDB4OTMsIDB4MjIsIDB4NDAsIDB4MTEsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHhhYywgMHgwMCwgMHgwMCwgMHg0MCwgMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwgMHhiMCwgMHgwMCwgMHgyYiwgMHgwMSwKKwkweGUwLCAweGMxLCAweDAxLCAweDAwLCAweDAwLCAweDJiLCAweDAwLCAweGE2LCAweDE2LCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4ZTAsIDB4ZDEsIDB4MDEsIDB4MDAsIDB4ZjgsIDB4OTcsIDB4MDAsIDB4MDgsCisJMHg4MCwgMHgzMCwgMHgwMSwgMHgwMCwgMHgzZiwgMHg5MywgMHgwMCwgMHg1ZSwgMHgxNywgMHg5MCwgMHgwMCwgMHgwMCwKKwkweDE5LCAweDk4LCAweDAwLCAweDQzLCAweDYxLCAweDMxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQzLAorCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCisJMHg0MCwgMHg5MywgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgxYiwgMHg4NCwgMHgwMCwgMHg4OCwKKwkweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4OTgsIDB4MDAsIDB4MDcsIDB4MTYsIDB4MTQsIDB4MDEsIDB4MDAsIDB4YTEsIDB4OTcsIDB4MDAsIDB4NWUsCisJMHgwNSwgMHgxMCwgMHgwMSwgMHgwMCwgMHhjYywgMHg5NSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDJmLCAweDAwLCAweDIwLCAweDQwLCAweGU3LCAweGIxLCAweDAxLCAweDAwLCAweGJmLCAweDhkLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGIsIDB4MWIsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgxZiwgMHgxNSwgMHgxYSwgMHg1MCwgMHgwMCwgMHgwMCwgMHg1NCwgMHg5MywgMHgyMCwgMHgxNiwKKwkweDFhLCAweDZjLCAweDAwLCAweDAwLCAweDcwLCAweDAwLCAweDAwLCAweDAzLCAweDQ4LCAweGM5LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MjIsIDB4NTAsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsCisJMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQyLCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweGEwLCAweDAwLCAweDAwLCAweGE0LAorCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4NTEsIDB4OTMsIDB4YTgsIDB4NDYsIDB4MWYsIDB4MTAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDEwLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE1LCAweDEwLCAweGMwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MGEsIDB4MmEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGEsCisJMHgyYywgMHhkMCwgMHgwMSwgMHgwMCwgMHhhYywgMHgwMCwgMHgyZiwgMHg0MCwgMHgyMywgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDViLCAweDkzLCAweDg0LCAweDQ1LCAweDFmLCAweDEwLCAweDAwLCAweDAwLCAweDVjLCAweDkzLCAweDAwLCAweDBhLAorCTB4ZTAsIDB4YzEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGEsIDB4MDIsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHg1YiwgMHg5NywgMHgwMCwgMHg0MCwgMHgzNSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgxOSwKKwkweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDY0LCAweDkzLCAweDIyLCAweDQwLCAweGUzLCAweDZkLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsCisJMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHg2MCwgMHg5MywgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDFiLCAweDg0LCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LAorCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NzMsIDB4OTMsIDB4YTIsIDB4MDIsIDB4MWEsIDB4NTAsIDB4MDAsIDB4MDAsCisJMHg3NCwgMHg5MywgMHgyMiwgMHg0MCwgMHgyZCwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgxMCwKKwkweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLCAweGYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4MDcsIDB4MDAsIDB4MDgsCisJMHhlMCwgMHg4ZCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGIxLCAweDAxLCAweDAwLCAweDZiLCAweDkzLCAweGE4LCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MWIsIDB4ODQsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwYywgMHg4MCwgMHgwMCwgMHgwMywKKwkweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweGYwLCAweDEwLCAweGM4LCAweDAxLCAweDAwLAorCTB4ZjAsIDB4MDcsIDB4MDAsIDB4NDAsIDB4MWIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4NzQsIDB4OTMsIDB4MDAsIDB4NWMsCisJMHgxMSwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHgxMCwgMHhjMCwgMHgwMSwgMHgwMCwKKwkweGUyLCAweDk1LCAweDAwLCAweDQwLCAweDFmLCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LAorCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NzgsIDB4OTMsIDB4MjMsIDB4MGQsIDB4MmMsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgxZiwgMHg5MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg5MywgMHgyMiwgMHg0NiwKKwkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDcwLCAweDgwLCAweDAwLCAweDAzLCAweDQyLCAweGM5LCAweDAxLCAweDAwLAorCTB4ODAsIDB4OTMsIDB4MjIsIDB4NDAsIDB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsCisJMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKKwkweDdjLCAweDkzLCAweGE4LCAweDQ2LCAweDFmLCAweDAwLCAweDAwLCAweDAwLCAweDFiLCAweDg0LCAweDAwLCAweDg4LAorCTB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwOCwgMHgwMCwgMHgyZCwgMHg0MCwgMHg4NSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwKKwkweDgyLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDA1LCAweGIwLCAweDAxLCAweDAwLAorCTB4ZWEsIDB4OTYsIDB4MDAsIDB4NDEsIDB4ODcsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsCisJMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKKwkweDg1LCAweDkzLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDFiLCAweDg0LCAweDAwLCAweDg4LAorCTB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg4YiwgMHg5MywgMHgyMiwgMHgwOSwgMHg4MCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg5OCwgMHgwMCwgMHg0MCwKKwkweDEzLCAweDMwLCAweDAxLCAweDAwLCAweDhmLCAweDkzLCAweDIyLCAweDQ0LCAweDE5LCAweDdjLCAweDAwLCAweDAwLAorCTB4MjAsIDB4OTgsIDB4MDAsIDB4NGYsIDB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4OGYsIDB4OTMsIDB4YTIsIDB4NDcsCisJMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHgxOSwgMHg4MCwgMHgwMSwgMHgwMCwKKwkweGZmLCAweDA3LCAweDAwLCAweDA4LCAweDAwLCAweDhjLCAweDAxLCAweDAwLCAweGE0LCAweDkzLCAweDIyLCAweDRhLAorCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4OTUsIDB4OTMsIDB4YTIsIDB4MTYsIDB4MDIsIDB4MzAsIDB4MDAsIDB4MDAsCisJMHhjYywgMHg5NSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgyZiwgMHgwMCwgMHgyMCwgMHg0MCwKKwkweGU3LCAweGIxLCAweDAxLCAweDAwLCAweGJhLCAweDhkLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MmQsIDB4MDAsIDB4MmQsIDB4MDgsIDB4MmEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YTAsIDB4OTMsIDB4MjIsIDB4NDIsCisJMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHg5OSwgMHg5MywgMHhhMiwgMHhmMywgMHg4NCwgMHgzMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGE1LCAweDg1LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAorCTB4ODUsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4ZDQsIDB4MDAsIDB4M2UsIDB4NDEsIDB4ODUsIDB4ZTAsIDB4MDEsIDB4MDAsCisJMHg5ZCwgMHg5MywgMHgyMiwgMHg0MCwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1YSwKKwkweDExLCAweDkwLCAweDAxLCAweDAwLCAweDBiLCAweDAwLCAweDAwLCAweDA4LCAweGU0LCAweGY1LCAweDAxLCAweDAwLAorCTB4ZjksIDB4OTYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4YTEsIDB4OTMsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhjOSwgMHg5NiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDMwLCAweDAwLCAweDJlLCAweDAwLCAweDJhLCAweGQwLCAweDAxLCAweDAwLCAweDMyLCAweDAwLCAweDJhLCAweDE1LAorCTB4ZTQsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YmEsIDB4OGQsIDB4MDAsIDB4MTYsIDB4ZTQsIDB4YjEsIDB4MDAsIDB4MDAsCisJMHhhNywgMHg5MywgMHhhMiwgMHgxNiwgMHgwMiwgMHgzMCwgMHgwMCwgMHgwMCwgMHhjYywgMHg5NSwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGY0LCAweDkzLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MmQsIDB4MDAsIDB4MmQsIDB4MDgsIDB4MmEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YjQsIDB4OTMsIDB4MjIsIDB4NDcsCisJMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHhiMSwgMHg5MywgMHgyMiwgMHg0MiwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwKKwkweGFjLCAweDkzLCAweGEyLCAweGYzLCAweDg0LCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE1LAorCTB4ODUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ODUsIDB4ZDAsIDB4MDEsIDB4MDAsCisJMHhkNCwgMHgwMCwgMHgzZSwgMHg0MSwgMHg4NSwgMHhlMCwgMHgwMSwgMHgwMCwgMHhiMCwgMHg5MywgMHgyMiwgMHg0MCwKKwkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVhLCAweDExLCAweDkwLCAweDAxLCAweDAwLAorCTB4MGIsIDB4MDAsIDB4MDAsIDB4MDgsIDB4ZTQsIDB4ZjUsIDB4MDEsIDB4MDAsIDB4NTgsIDB4MDEsIDB4MmQsIDB4MDAsCisJMHgyYSwgMHhkMCwgMHgwMSwgMHgwMCwgMHg2MCwgMHgwMSwgMHgyZCwgMHhmMCwgMHgxMCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDNmLCAweDkxLCAweDAwLCAweGYwLCAweDJjLCAweGIwLCAweDAwLCAweDAwLCAweGY0LCAweDk4LCAweDAwLCAweDQxLAorCTB4OTUsIDB4MzAsIDB4MDEsIDB4MDAsIDB4YmIsIDB4OTMsIDB4YTIsIDB4MDgsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg5NywgMHhiMCwgMHgwMSwgMHgwMCwgMHhiOSwgMHg5MywgMHgyMywgMHgwZCwKKwkweDAyLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDk3LCAweGMwLCAweDAxLCAweDAwLAorCTB4N2IsIDB4OTYsIDB4MDAsIDB4NGIsIDB4MDIsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZjQsIDB4OTMsIDB4MDAsIDB4MDUsCisJMHg0OCwgMHhiMSwgMHgwMCwgMHgwMCwgMHhhYywgMHgwMCwgMHgyZiwgMHgwMSwgMHgxNCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweGIwLCAweDAwLCAweDJiLCAweDAxLCAweGUwLCAweGMxLCAweDAxLCAweDAwLCAweDAwLCAweDJiLCAweDAwLCAweGE2LAorCTB4MTYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4ZTAsIDB4ZDEsIDB4MDEsIDB4MDAsCisJMHhjYiwgMHg5MywgMHgyMywgMHgwZCwgMHgwMiwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgxMCwKKwkweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLCAweGYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsCisJMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweGM0LCAweDkzLCAweGE4LCAweDAwLCAweGUwLCAweDMxLCAweDAwLCAweDAwLCAweDFiLCAweDg0LCAweDAwLCAweDg4LAorCTB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwYywgMHg4MCwgMHgwMCwgMHgwMywgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHhmMCwKKwkweDIyLCAweGM4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVjLCAweDIzLCAweDgwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4ODQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4Y2UsIDB4OTMsIDB4MjMsIDB4MGQsCisJMHgwMiwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwZCwgMHgwMiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDgwLCAweGIwLCAweDAxLCAweDAwLCAweGQzLCAweDkzLCAweDIyLCAweDQwLAorCTB4MWIsIDB4NmMsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4OTcsIDB4MDAsIDB4MDEsIDB4ODQsIDB4NTAsIDB4MDEsIDB4MDAsCisJMHhkYiwgMHg5MywgMHgyMiwgMHg0MCwgMHg4NSwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwKKwkweDgwLCAweGMwLCAweDAxLCAweDAwLCAweDEwLCAweDgwLCAweDAwLCAweDEwLCAweDQ2LCAweGM5LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGYsIDB4NDMsIDB4ODEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsCisJMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmMCwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDE2LCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQzLAorCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YTAsIDB4MDAsIDB4MDAsIDB4YTEsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCisJMHhkOSwgMHg5MywgMHhhOCwgMHgxMSwgMHhlMCwgMHgzMSwgMHgwMCwgMHgwMCwgMHhlYSwgMHg5MywgMHgwMCwgMHg1ZSwKKwkweDE3LCAweDkwLCAweDAwLCAweDAwLCAweGRlLCAweDkzLCAweDIzLCAweDBkLCAweDAyLCAweDZjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MGQsIDB4MDIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsCisJMHg4NCwgMHhkMCwgMHgwMSwgMHgwMCwgMHhlMywgMHg5MywgMHgyMiwgMHg0MCwgMHgxYiwgMHg2YywgMHgwMCwgMHgwMCwKKwkweDE5LCAweDk4LCAweDAwLCAweDQzLCAweDYxLCAweDMxLCAweDAxLCAweDAwLCAweGVhLCAweDkzLCAweDIyLCAweDQwLAorCTB4ODUsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MTIsIDB4YzAsIDB4MDEsIDB4MDAsCisJMHgxMCwgMHg4MCwgMHgwMCwgMHgxMCwgMHg0NiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZiwKKwkweDQzLCAweDgxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLCAweGYwLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDksIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsCisJMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhhMCwgMHgwMCwgMHgwMCwgMHhhMSwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKKwkweGU4LCAweDkzLCAweGE4LCAweDExLCAweGUwLCAweDMxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQzLAorCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCisJMHhlYiwgMHg5MywgMHhhOCwgMHgwYSwgMHgwMiwgMHgzMCwgMHgwMCwgMHgwMCwgMHgxYiwgMHg4NCwgMHgwMCwgMHg4OCwKKwkweDFjLCAweGIwLCAweDAwLCAweDAwLCAweGNjLCAweDk1LCAweDAwLCAweDA1LCAweDQ4LCAweDMxLCAweDAxLCAweDAwLAorCTB4ZjIsIDB4OTMsIDB4MjMsIDB4MGQsIDB4MDIsIDB4NmMsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4MDcsIDB4MDAsIDB4MTEsCisJMHgwMCwgMHg4YywgMHgwMSwgMHgwMCwgMHhjYywgMHg5NSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDk4LCAweDAwLCAweDA3LCAweDE2LCAweDE0LCAweDAxLCAweDAwLCAweGExLCAweDk3LCAweDAwLCAweDVlLAorCTB4MDUsIDB4MTAsIDB4MDEsIDB4MDAsIDB4MmYsIDB4MDAsIDB4MjAsIDB4NDAsIDB4ZTcsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHhiZiwgMHg4ZCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMywKKwkweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDgyLCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4OGMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsCisJMHg4ZSwgMHhiMCwgMHgwMSwgMHgwMCwgMHhiMywgMHg5NiwgMHgwMCwgMHg0MCwgMHgxMywgMHgzMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDg1LCAweGIwLCAweDAxLCAweDAwLCAweGVhLCAweDk2LCAweDAwLCAweDQxLAorCTB4ODcsIDB4MzAsIDB4MDEsIDB4MDAsIDB4NmYsIDB4OTYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHgxMCwgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwNSwgMHg5NCwgMHgyMiwgMHg0MCwKKwkweGUzLCAweDZkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweDYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4MDEsIDB4OTQsIDB4YTgsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgxYiwgMHg4NCwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDA3LCAweDk0LCAweDIyLCAweDA5LAorCTB4ODAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OTgsIDB4MDAsIDB4NDAsIDB4MTMsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwYiwgMHgxYiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwKKwkweDFhLCAweGQwLCAweDAxLCAweDAwLCAweDBkLCAweDk0LCAweGEyLCAweDQxLCAweDE5LCAweDdjLCAweDAwLCAweDAwLAorCTB4ZjQsIDB4OTgsIDB4MDAsIDB4NDAsIDB4OTUsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MTUsIDB4OTQsIDB4MjIsIDB4MDgsCisJMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgzOCwgMHg5MywgMHgwMCwgMHgwMCwgMHgyYSwgMHhjMCwgMHgwMCwgMHgwMCwKKwkweGY0LCAweDk4LCAweDAwLCAweDQxLCAweDk1LCAweDMwLCAweDAxLCAweDAwLCAweDEwLCAweDk0LCAweDIyLCAweDA4LAorCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4YmIsIDB4OTMsIDB4MDAsIDB4MDAsIDB4MmEsIDB4YzAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg5NywgMHhiMCwgMHgwMSwgMHgwMCwgMHgxMywgMHg5NCwgMHgyMywgMHgwZCwKKwkweDAyLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDk3LCAweGMwLCAweDAxLCAweDAwLAorCTB4N2IsIDB4OTYsIDB4MDAsIDB4NGIsIDB4MDIsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsCisJMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhiYSwgMHg4ZCwgMHgyMiwgMHg0MiwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwKKwkweGFmLCAweDk3LCAweDAwLCAweDNhLCAweDgxLCAweDMwLCAweDAxLCAweDAwLCAweGJhLCAweDhkLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MTksIDB4OTQsIDB4MDAsIDB4NGEsIDB4MWYsIDB4OTAsIDB4MDAsIDB4MDAsCisJMHhmNCwgMHg5NSwgMHgwMCwgMHgwMCwgMHgxMCwgMHgzMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwKKwkweDEwLCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDMyLCAweGIwLCAweDAxLCAweDAwLAorCTB4MDcsIDB4MDAsIDB4MDAsIDB4MGIsIDB4OTYsIDB4ODgsIDB4MDEsIDB4MDAsIDB4MjcsIDB4OTQsIDB4MjYsIDB4NDcsCisJMHg5NywgMHgyNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg5NywgMHhjMCwgMHgwMSwgMHgwMCwKKwkweDI3LCAweDk0LCAweDIzLCAweDRiLCAweDBjLCAweDZjLCAweDAwLCAweDAwLCAweDMzLCAweDk4LCAweDAwLCAweDRiLAorCTB4MDQsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4MzMsIDB4YzAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHgxMCwgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwKKwkweDE2LCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA2LCAweDA0LCAweGIwLCAweDAxLCAweDAwLAorCTB4MzMsIDB4OTgsIDB4MDAsIDB4NGIsIDB4MDQsIDB4NTAsIDB4MDEsIDB4MDAsIDB4MjgsIDB4OTQsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgzMywgMHg5OCwgMHgwMCwgMHgwNiwgMHgwNCwgMHgzMCwgMHgwMSwgMHgwMCwKKwkweDJkLCAweDk0LCAweGEyLCAweDQ0LCAweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBiLAorCTB4MWIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGEsIDB4MmMsIDB4ZDAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwYSwgMHgwMiwgMHhiMCwgMHgwMSwgMHgwMCwgMHhkYSwgMHg5NCwgMHgwMCwgMHgwMSwKKwkweDhjLCAweDMwLCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDE5LCAweDQyLCAweGM5LCAweDAxLCAweDAwLAorCTB4MzQsIDB4OTQsIDB4MjIsIDB4NDAsIDB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsCisJMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKKwkweDMwLCAweDk0LCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDFiLCAweDg0LCAweDAwLCAweDg4LAorCTB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHgxMCwgMHhjMCwgMHgwMSwgMHgwMCwgMHgzZCwgMHg5NCwgMHgyMiwgMHgwNiwKKwkweDE0LCAweDUwLCAweDAwLCAweDAwLCAweDI0LCAweDk3LCAweDAwLCAweDQ1LCAweDFmLCAweDAwLCAweDAxLCAweDAwLAorCTB4MWIsIDB4OTQsIDB4MjIsIDB4NWMsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsCisJMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKKwkweDM5LCAweDk0LCAweGE4LCAweDVjLCAweDFmLCAweDAwLCAweDAwLCAweDAwLCAweDFiLCAweDg0LCAweDAwLCAweDg4LAorCTB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MWIsIDB4OTQsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDAsIDB4MDAsCisJMHgwOCwgMHgwMCwgMHgyZCwgMHg0MCwgMHg4NSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwKKwkweDgyLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDA1LCAweGIwLCAweDAxLCAweDAwLAorCTB4ZWEsIDB4OTYsIDB4MDAsIDB4NDEsIDB4ODcsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsCisJMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKKwkweDQyLCAweDk0LCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDFiLCAweDg0LCAweDAwLCAweDg4LAorCTB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg0OCwgMHg5NCwgMHgyMiwgMHgwOSwgMHg4MCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg5OCwgMHgwMCwgMHg0MCwKKwkweDEzLCAweDMwLCAweDAxLCAweDAwLCAweDRiLCAweDk0LCAweDIyLCAweDQ0LCAweDE5LCAweDdjLCAweDAwLCAweDAwLAorCTB4MjAsIDB4OTgsIDB4MDAsIDB4NGYsIDB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsCisJMHgxOSwgMHg4MCwgMHgwMSwgMHgwMCwgMHhmZiwgMHgwNywgMHgwMCwgMHgwOCwgMHgwMCwgMHg4YywgMHgwMSwgMHgwMCwKKwkweDU5LCAweDk0LCAweDIyLCAweDRhLCAweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDUxLCAweDk0LCAweGEyLCAweDE2LAorCTB4MDIsIDB4MzAsIDB4MDAsIDB4MDAsIDB4Y2MsIDB4OTUsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHgyZiwgMHgwMCwgMHgyMCwgMHg0MCwgMHhlNywgMHhiMSwgMHgwMSwgMHgwMCwgMHhiYSwgMHg4ZCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDJkLCAweDAwLCAweDJkLCAweDA4LCAweDJhLCAweGIwLCAweDAxLCAweDAwLAorCTB4NTUsIDB4OTQsIDB4MjIsIDB4NDIsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4ZjksIDB4OTYsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHg1NiwgMHg5NCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweGM5LCAweDk2LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDMwLCAweDAwLCAweDJlLCAweDAwLAorCTB4MmEsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4MzIsIDB4MDAsIDB4MmEsIDB4MTUsIDB4ZTQsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHhiYSwgMHg4ZCwgMHgwMCwgMHgxNiwgMHhlNCwgMHhiMSwgMHgwMCwgMHgwMCwgMHgzNSwgMHg5MywgMHhhMiwgMHgxNiwKKwkweDAyLCAweDMwLCAweDAwLCAweDAwLCAweGNjLCAweDk1LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4MmYsIDB4MDAsIDB4MjAsIDB4NDAsIDB4ZTcsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YmYsIDB4OGQsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhmNCwgMHg5NSwgMHgwMCwgMHg0YSwgMHgxZiwgMHgxMCwgMHgwMSwgMHgwMCwKKwkweDQ5LCAweDkzLCAweDAwLCAweDEwLCAweDMyLCAweGIwLCAweDAwLCAweDAwLCAweDhhLCAweDAwLCAweDIwLCAweDQwLAorCTB4ZTcsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NjMsIDB4OTQsIDB4YTIsIDB4NDEsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsCisJMHhjYywgMHg5NSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHg2NiwgMHg5NCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDc0LCAweDk2LCAweDAwLCAweDE1LCAweDk0LCAweDMwLCAweDAxLCAweDAwLAorCTB4N2IsIDB4OTYsIDB4MDAsIDB4NGIsIDB4MDIsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsCisJMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg2OCwgMHg5NCwgMHgyMiwgMHg0MiwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwKKwkweGFmLCAweDk3LCAweDAwLCAweDNhLCAweDgxLCAweDMwLCAweDAxLCAweDAwLCAweDIwLCAweDk4LCAweDAwLCAweDQ1LAorCTB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4YmEsIDB4OGQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHhmZSwgMHg5MSwgMHgwMCwgMHg0NSwgMHgxZiwgMHg5MCwgMHgwMCwgMHgwMCwgMHhiNiwgMHg5NiwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDZmLCAweDk2LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4NDksIDB4OTMsIDB4MDAsIDB4MDEsIDB4MmMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4YmYsIDB4OTUsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHg3YSwgMHg5NCwgMHhhMiwgMHgwOCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDgyLCAweDAwLCAweDAyLCAweDA0LCAweGRjLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ1LAorCTB4MDMsIDB4ZjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4YzAsIDB4MDEsIDB4MDAsCisJMHg3MywgMHg5NCwgMHgzNywgMHg1YywgMHg2MSwgMHgzMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYiwKKwkweDYyLCAweGIxLCAweDAxLCAweDAwLCAweDc3LCAweDk0LCAweDI4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4NzQsIDB4OTQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHg3NywgMHg5NCwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweGZmLCAweDg5LCAweDE3LCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDU4LCAweDAxLCAweDIwLCAweDA4LAorCTB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NjAsIDB4MDEsIDB4MjAsIDB4MTYsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHhiNiwgMHg5NiwgMHgwMCwgMHg0NywgMHgxZiwgMHgxMCwgMHgwMSwgMHgwMCwgMHg2ZiwgMHg5NiwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDQ5LCAweDkzLCAweDAwLCAweDAxLCAweDJjLCAweGIwLCAweDAwLCAweDAwLAorCTB4YmYsIDB4OTUsIDB4MDAsIDB4NDcsIDB4MWYsIDB4MTAsIDB4MDEsIDB4MDAsIDB4OGMsIDB4OTQsIDB4YTIsIDB4MDgsCisJMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHg4OCwgMHg5NCwgMHhhMiwgMHg0MiwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDgyLCAweDAwLCAweDAyLCAweDA0LCAweGRjLCAweDAxLCAweDAwLCAweGEwLCAweDk4LCAweDAwLCAweDQwLAorCTB4NDcsIDB4OTksIDB4MDEsIDB4MDAsIDB4ZTMsIDB4ODksIDB4MDAsIDB4NDEsIDB4ODksIDB4MzAsIDB4MDEsIDB4MDAsCisJMHg3NCwgMHg5NiwgMHgwMCwgMHgxNSwgMHg5NCwgMHgzMCwgMHgwMSwgMHgwMCwgMHg3YiwgMHg5NiwgMHgwMCwgMHg0YiwKKwkweDAyLCAweGIwLCAweDAwLCAweDAwLCAweGZmLCAweDg5LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4ZjksIDB4OTYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGIsCisJMHgxOSwgMHg5MCwgMHgwMSwgMHgwMCwgMHhhZiwgMHg5NywgMHgwMCwgMHgzYSwgMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwKKwkweGZmLCAweDg5LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDU4LCAweDAxLCAweDIwLCAweDA4LAorCTB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NjAsIDB4MDEsIDB4MjAsIDB4MTYsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHhmNCwgMHg5NSwgMHgwMCwgMHgxMCwgMHgzMiwgMHgzMCwgMHgwMSwgMHgwMCwgMHg0OSwgMHg5MywgMHgwMCwgMHg0MCwKKwkweDEzLCAweGIwLCAweDAwLCAweDAwLCAweGJmLCAweDk1LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4OWMsIDB4OTQsIDB4YTIsIDB4MDgsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODIsIDB4MDAsIDB4MDIsCisJMHgwNCwgMHhkYywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHgwMywgMHhmMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweGMwLCAweDAxLCAweDAwLCAweDk1LCAweDk0LCAweDM3LCAweDVjLAorCTB4NjEsIDB4MzEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWIsIDB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg5OSwgMHg5NCwgMHgyOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHg5NiwgMHg5NCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDYyLCAweGIxLCAweDAxLCAweDAwLAorCTB4OTksIDB4OTQsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4ODksIDB4MTcsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMywgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDgyLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LAorCTB4OGMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4OGUsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHhiMywgMHg5NiwgMHgwMCwgMHg0MCwgMHgxMywgMHgzMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDg1LCAweGIwLCAweDAxLCAweDAwLCAweGVhLCAweDk2LCAweDAwLCAweDQxLCAweDg3LCAweDMwLCAweDAxLCAweDAwLAorCTB4NmYsIDB4OTYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MTAsCisJMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHhhYiwgMHg5NCwgMHgyMiwgMHg0MCwgMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLAorCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4YTcsIDB4OTQsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgxYiwgMHg4NCwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwKKwkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDNmLCAweDkxLCAweDIyLCAweDA5LCAweDgwLCAweDMwLCAweDAwLCAweDAwLAorCTB4MjAsIDB4OTgsIDB4MDAsIDB4NDAsIDB4MTMsIDB4MzAsIDB4MDEsIDB4MDAsIDB4M2YsIDB4OTEsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwMCwgMHgyZCwgMHg0NSwgMHgxZiwgMHg5MCwgMHgwMSwgMHgwMCwKKwkweDg3LCAweDkxLCAweDAwLCAweDQ0LCAweDE5LCAweDkwLCAweDAwLCAweDAwLCAweGIzLCAweDk0LCAweGEyLCAweDQxLAorCTB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGEsIDB4MWYsIDB4OTAsIDB4MDEsIDB4MDAsCisJMHhlZiwgMHg5MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhiNiwgMHg5NiwgMHgwMCwgMHg0YSwKKwkweDFmLCAweDEwLCAweDAxLCAweDAwLCAweDZmLCAweDk2LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4NDksIDB4OTMsIDB4MDAsIDB4MDEsIDB4MmMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZjQsIDB4OTUsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHg0OSwgMHg5MywgMHgwMCwgMHgxMCwgMHgzMiwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweGZlLCAweDkxLCAweDAwLCAweDQ1LCAweDFmLCAweDkwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAorCTB4MzcsIDB4YzMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MzMsIDB4YzMsIDB4MDEsIDB4MDAsCisJMHgzNiwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMiwgMHhjYywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkMiwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGJmLCAweDk0LCAweDg1LCAweDE3LCAweDgwLCAweDMyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4OWYsIDB4NDgsIDB4MDMsIDB4ZDAsIDB4MDAsIDB4MDAsIDB4YzEsIDB4OTQsIDB4OWMsIDB4MTcsCisJMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5ZiwgMHg0YywgMHgwMywgMHhkMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDgwLCAweDAxLCAweDM0LCAweGMzLCAweDAxLCAweDAwLCAweDAyLCAweDAwLCAweDJkLCAweDExLAorCTB4MTAsIDB4YzEsIDB4MDAsIDB4MDAsIDB4YzYsIDB4OTQsIDB4MDAsIDB4NDAsIDB4NDMsIDB4YzEsIDB4MDAsIDB4MDAsCisJMHhjNiwgMHg5NCwgMHgwMCwgMHg1MCwgMHg0MywgMHhjMSwgMHgwMCwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHhhMSwKKwkweDQyLCAweGM5LCAweDAxLCAweDAwLCAweGNhLCAweDk0LCAweDIyLCAweDQwLCAweGU1LCAweDZkLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4YTIsIDB4NDAsIDB4ZTUsIDB4N2QsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHgyMywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0OSwgMHgxZiwgMHg5MCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweGEyLCAweDQxLCAweDIzLCAweGQwLCAweDAwLCAweDAwLCAweGM2LCAweDk0LCAweDAwLCAweDUwLAorCTB4NDMsIDB4ZDEsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0YSwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweGYwLCAweGIxLCAweDAxLCAweDAwLAorCTB4ZDAsIDB4OTUsIDB4MDAsIDB4NDEsIDB4ZTEsIDB4MzEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4NDMsCisJMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmMSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ4LCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ5LAorCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4ZTAsIDB4YzksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywKKwkweDYyLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGE4LCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4ZDcsIDB4OTQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4YmEsIDB4MDAsIDB4MjAsIDB4NDAsCisJMHhlNSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhiMCwgMHgwMCwgMHgyZiwgMHgwMSwgMHg4YywgMHhkMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ2LCAweGUwLCAweGMxLCAweDAxLCAweDAwLCAweGFjLCAweDAwLCAweDJmLCAweDQwLAorCTB4MTMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4Y2MsIDB4MDAsIDB4MmQsIDB4MDEsIDB4ZTAsIDB4YzEsIDB4MDEsIDB4MDAsCisJMHhlMSwgMHg5NCwgMHg5YywgMHgxNywgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHhmYiwgMHg5OCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGUzLCAweDk0LCAweDIyLCAweDQ3LCAweDE5LCAweDdjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NWYsIDB4MTMsIDB4OTAsIDB4MDEsIDB4MDAsIDB4OGQsIDB4OTgsIDB4MDAsIDB4NDcsCisJMHgxOSwgMHgxMCwgMHgwMSwgMHgwMCwgMHhjMCwgMHgwMCwgMHgyZCwgMHg0NCwgMHgxZiwgMHg5MCwgMHgwMSwgMHgwMCwKKwkweGM0LCAweDAwLCAweDJkLCAweGYwLCAweDgyLCAweGIwLCAweDAxLCAweDAwLCAweGQ4LCAweDk4LCAweDAwLCAweGYwLAorCTB4ODQsIDB4YjAsIDB4MDAsIDB4MDAsIDB4OTAsIDB4MDAsIDB4MmQsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHhmOCwgMHg5NCwgMHhhMiwgMHg0YiwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHg0YiwgMHg5NSwgMHhhMiwgMHg0YywKKwkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweGY4LCAweDk0LCAweDFmLCAweDFjLCAweGUwLCAweDZkLCAweDAwLCAweDAwLAorCTB4ZmIsIDB4OTQsIDB4YTIsIDB4MDEsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4YTgsIDB4MDAsIDB4MmQsIDB4NDYsCisJMHg4ZiwgMHhiMCwgMHgwMSwgMHgwMCwgMHhmMSwgMHg5NCwgMHgxZiwgMHgxYywgMHhlMCwgMHg2ZCwgMHgwMCwgMHgwMCwKKwkweGI0LCAweDAwLCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLCAweGYzLCAweDk0LCAweDIyLCAweGYwLAorCTB4M2EsIDB4NmMsIDB4MDAsIDB4MDAsIDB4NDgsIDB4OTUsIDB4MWYsIDB4ZjAsIDB4M2EsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHhhMiwgMHg0MCwgMHg4MCwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0ZiwKKwkweDhmLCAweGIwLCAweDAxLCAweDAwLCAweDhhLCAweDAwLCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLAorCTB4NDksIDB4OTUsIDB4MjAsIDB4NDIsIDB4ZTcsIDB4NmQsIDB4MDAsIDB4MDAsIDB4ZjcsIDB4OTQsIDB4MjIsIDB4NDAsCisJMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg1OSwgMHg4ZiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDgwLCAweDU4LCAweDhmLCAweGIwLCAweDAxLCAweDAwLCAweGZhLCAweDk0LCAweDIyLCAweDQwLAorCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NWMsIDB4OGYsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg4MCwgMHg1YiwgMHg4ZiwgMHhiMCwgMHgwMSwgMHgwMCwgMHhhYywgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDQzLCAweDk5LCAweDAxLCAweDAwLCAweGIwLCAweDAwLCAweDJkLCAweGYwLCAweDg0LCAweGIwLCAweDAxLCAweDAwLAorCTB4ZmYsIDB4OTQsIDB4YTIsIDB4NDIsIDB4MjQsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDgsIDB4OTUsIDB4MjMsIDB4ZjAsCisJMHgwMiwgMHg2YywgMHgwMCwgMHgwMCwgMHgwNSwgMHg5NSwgMHhhMiwgMHhmMCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDRhLCAweDk1LCAweGEyLCAweDQyLCAweDI0LCAweDZjLCAweDAwLCAweDAwLCAweDRhLCAweDk1LCAweGEyLCAweDQxLAorCTB4MDMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDQsIDB4OTUsIDB4YTIsIDB4NDAsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg4MCwgMHg1MSwgMHg4ZiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg1MiwKKwkweDhmLCAweGIwLCAweDAxLCAweDAwLCAweDRhLCAweDk1LCAweDFmLCAweDEyLCAweDg0LCAweDUwLCAweDAwLCAweDAwLAorCTB4NGEsIDB4OTUsIDB4YTAsIDB4MDEsIDB4ODQsIDB4NmMsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4OTQsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg4YiwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDMzLCAweDk1LCAweGEyLCAweDQ2LCAweGU3LCAweDdkLCAweDAwLCAweDAwLCAweDE0LCAweDAwLCAweDAwLCAweDQwLAorCTB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4MjUsIDB4OTUsIDB4MjIsIDB4ZjAsIDB4MTQsIDB4MzAsIDB4MDAsIDB4MDAsCisJMHgxMSwgMHg5NSwgMHgyMCwgMHgwYSwgMHgwMiwgMHg2YywgMHgwMCwgMHgwMCwgMHgyMiwgMHg5NSwgMHgwMywgMHgxZSwKKwkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDEwLCAweDk1LCAweGEyLCAweDQwLCAweDgwLCAweDMyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4ODAsIDB4NDQsIDB4OGYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDksCisJMHg4ZiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgxNiwgMHg5NSwgMHgyMiwgMHgwYSwgMHgwMiwgMHg2YywgMHgwMCwgMHgwMCwKKwkweDE5LCAweDk1LCAweGEyLCAweDQxLCAweDE5LCAweDdjLCAweDAwLCAweDAwLCAweDE1LCAweDk1LCAweGEyLCAweDQwLAorCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NTUsIDB4OGYsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg4MCwgMHg1NiwgMHg4ZiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgxOCwgMHg5NSwgMHhhMiwgMHg0MCwKKwkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQzLCAweDhmLCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4ODAsIDB4NDgsIDB4OGYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsCisJMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYSwgMHg4MiwgMHhkMCwgMHgwMSwgMHgwMCwKKwkweDFmLCAweDk1LCAweDIwLCAweDkxLCAweDgzLCAweDZjLCAweDAwLCAweDAwLCAweDFlLCAweDk1LCAweGEyLCAweDQwLAorCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MjYsIDB4MDAsIDB4ODAsIDB4NDAsIDB4OGYsIDB4OTgsIDB4MDEsIDB4MDAsCisJMHgyNywgMHgwMCwgMHg4MCwgMHg0MCwgMHg4ZiwgMHg5OCwgMHgwMSwgMHgwMCwgMHgyMSwgMHg5NSwgMHhhMiwgMHg0MCwKKwkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDFmLCAweDAwLCAweDgwLCAweDQwLCAweDhmLCAweDk4LCAweDAxLCAweDAwLAorCTB4MjAsIDB4MDAsIDB4ODAsIDB4NDAsIDB4OGYsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MjQsIDB4OTUsIDB4YTIsIDB4NDAsCisJMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgyMiwgMHgwMCwgMHg4MCwgMHg0MCwgMHg4ZiwgMHg5OCwgMHgwMSwgMHgwMCwKKwkweDIzLCAweDAwLCAweDgwLCAweDQwLCAweDhmLCAweDk4LCAweDAxLCAweDAwLCAweDg4LCAweDAwLCAweDJkLCAweDQ0LAorCTB4OGYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MmUsIDB4OTUsIDB4YTIsIDB4NDEsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsCisJMHgyYiwgMHg5NSwgMHhhMiwgMHg0MywgMHgzZCwgMHg3YywgMHgwMCwgMHgwMCwgMHgyYiwgMHg5NSwgMHhhMiwgMHhmMiwKKwkweDAyLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGEyLCAweDQwLCAweDgwLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4ODAsIDB4NDksIDB4OGYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MmQsIDB4OTUsIDB4YTIsIDB4NDAsCisJMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MywgMHg4ZiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDgwLCAweDQ4LCAweDhmLCAweGIwLCAweDAxLCAweDAwLCAweDJiLCAweDk1LCAweGEwLCAweDkxLAorCTB4MDMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MjksIDB4OTUsIDB4MjIsIDB4NDMsIDB4M2QsIDB4N2MsIDB4MDAsIDB4MDAsCisJMHgzMiwgMHg5NSwgMHhhMiwgMHg0MCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgyOCwgMHgwMCwgMHg4MCwgMHg0MCwKKwkweDhmLCAweDk4LCAweDAxLCAweDAwLCAweDI5LCAweDAwLCAweDgwLCAweDQwLCAweDhmLCAweDk4LCAweDAxLCAweDAwLAorCTB4MTQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4M2MsIDB4OTUsIDB4YTIsIDB4ZjAsCisJMHgxNCwgMHgzMCwgMHgwMCwgMHgwMCwgMHg4OCwgMHgwMCwgMHgyZCwgMHg0NCwgMHg4ZiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDM5LCAweDk1LCAweGEyLCAweGYyLCAweDAyLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGEyLCAweDQwLAorCTB4ODAsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDksIDB4OGYsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgyYiwgMHg5NSwgMHgyMiwgMHg0MSwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHgyOSwgMHg5NSwgMHgyMCwgMHg5MSwKKwkweDAzLCAweDZjLCAweDAwLCAweDAwLCAweDJiLCAweDk1LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4NDAsIDB4OTUsIDB4MjAsIDB4MGEsIDB4MDIsIDB4NmMsIDB4MDAsIDB4MDAsIDB4M2YsIDB4OTUsIDB4YTIsIDB4NDAsCisJMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0NCwgMHg4ZiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDgwLCAweDQ5LCAweDhmLCAweGIwLCAweDAxLCAweDAwLCAweDQ1LCAweDk1LCAweDIyLCAweDBhLAorCTB4MDIsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MTksIDB4OTUsIDB4YTIsIDB4NDEsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsCisJMHg0NCwgMHg5NSwgMHhhMiwgMHg0MCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg1NSwKKwkweDhmLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDU2LCAweDhmLCAweGIwLCAweDAxLCAweDAwLAorCTB4NDcsIDB4OTUsIDB4YTIsIDB4NDAsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDMsCisJMHg4ZiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0OCwgMHg4ZiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDRkLCAweDk1LCAweDAwLCAweDQzLCAweDk1LCAweGIwLCAweDAwLCAweDAwLCAweDRkLCAweDk1LCAweDAwLCAweDQxLAorCTB4OTUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NGQsIDB4OTUsIDB4MDAsIDB4NDIsIDB4OTUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHg0ZCwgMHg5NSwgMHgwMCwgMHg0NCwgMHg5NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg0ZCwgMHg5NSwgMHgwMCwgMHg0YywKKwkweDk1LCAweGIwLCAweDAwLCAweDAwLCAweGY1LCAweDk3LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4NTAsIDB4OTUsIDB4YTIsIDB4NDAsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NGIsCisJMHg4ZiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0YywgMHg4ZiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDJkLCAweDAwLCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDJlLCAweDAwLCAweDJmLCAweGYzLAorCTB4ODQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NTUsIDB4OTUsIDB4YTIsIDB4ZjMsIDB4OTYsIDB4MzAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwgMHgwMSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgyZCwgMHgwMCwgMHgyYSwgMHg0MSwKKwkweGU3LCAweGQxLCAweDAxLCAweDAwLCAweGQ0LCAweDAwLCAweDNkLCAweDQxLCAweDg1LCAweGUwLCAweDAxLCAweDAwLAorCTB4MGIsIDB4MDAsIDB4MDAsIDB4ZjIsIDB4MDAsIDB4ZTQsIDB4MDEsIDB4MDAsIDB4NWIsIDB4OTUsIDB4MjIsIDB4NWEsCisJMHgwMSwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgxZiwgMHg5MCwgMHgwMSwgMHgwMCwKKwkweDVjLCAweDk1LCAweDAwLCAweDVhLCAweDAxLCAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4MWYsIDB4ODAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjMsIDB4NDEsIDB4ODUsIDB4YzAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHhhMCwgMHhhNSwgMHg4NSwgMHg2YywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMywgMHg0MCwKKwkweDg1LCAweGIwLCAweDAxLCAweDAwLCAweDBjLCAweDgwLCAweDAwLCAweDAzLCAweDQyLCAweGM5LCAweDAxLCAweDAwLAorCTB4MTIsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODcsIDB4OTgsIDB4MDEsIDB4MDAsIDB4M2QsIDB4OTksIDB4MDAsIDB4ZjAsCisJMHg4YywgMHhiMCwgMHgwMCwgMHgwMCwgMHg2OSwgMHg5NSwgMHgyMiwgMHg0MCwgMHgwZiwgMHg2YywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDJmLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDY2LCAweDk1LCAweGEyLCAweDRiLAorCTB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4NjcsIDB4OTUsIDB4MjIsIDB4ZjAsIDB4MTgsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg2MCwgMHg0YiwgMHgxOSwgMHg5MCwgMHgwMSwgMHgwMCwgMHgzMiwgMHg5NiwgMHgwMCwgMHgwNywKKwkweDEwLCAweDMwLCAweDAxLCAweDAwLCAweDZmLCAweDg0LCAweDAwLCAweDQwLCAweDA1LCAweGIwLCAweDAwLCAweDAwLAorCTB4NmIsIDB4OTUsIDB4MjIsIDB4NWEsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4YjgsIDB4OTUsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwgMHg2ZiwgMHg4NCwgMHgwMCwgMHg0MCwgMHgwNSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDJmLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDYwLCAweDRiLAorCTB4MTksIDB4OTAsIDB4MDEsIDB4MDAsIDB4MzIsIDB4OTYsIDB4MDAsIDB4MDcsIDB4MTAsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHg2ZiwgMHg4NCwgMHgwMCwgMHg0MCwgMHgwNSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZiwgMHgwNSwKKwkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDYwLCAweDRiLCAweDE5LCAweDkwLCAweDAxLCAweDAwLAorCTB4MzIsIDB4OTYsIDB4MDAsIDB4MDcsIDB4MTAsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsCisJMHgwNSwgMHhiMCwgMHgwMSwgMHgwMCwgMHg3NCwgMHg5NSwgMHgzMywgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDc3LCAweDk1LCAweGExLCAweGFkLCAweDk1LCAweDIwLCAweDAwLCAweDAwLCAweDg1LCAweDk1LCAweDEzLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTMsIDB4NGEsIDB4NWEsIDB4ODMsIDB4MDEsIDB4MDAsCisJMHgzMCwgMHgwMCwgMHgzOSwgMHg0NSwgMHg5NSwgMHhlMCwgMHgwMSwgMHgwMCwgMHgxZiwgMHgwMCwgMHgwMCwgMHgwZiwKKwkweDVlLCAweGQ4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVhLCAweDVmLCAweDkwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsCisJMHg0OCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHg0YSwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDBjLCAweDU4LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA3LAorCTB4NGUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MTIsIDB4ODYsIDB4MDAsIDB4NDAsIDB4NWQsIDB4OTgsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1OCwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YSwKKwkweDYyLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGE4LCAweDQxLCAweDk3LCAweGIwLCAweDAwLCAweDAwLAorCTB4ODIsIDB4OTUsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsCisJMHg5NywgMHhiMCwgMHgwMSwgMHgwMCwgMHg4NiwgMHg5NSwgMHg0NCwgMHgwNywgMHg5NiwgMHgzMCwgMHgwMCwgMHgwMCwKKwkweGZmLCAweGZmLCAweDAwLCAweDRiLCAweDg0LCAweDg5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDFjLCAweGMyLAorCTB4MjQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4OTAsIDB4OTUsIDB4YTIsIDB4NDUsIDB4MjUsIDB4N2MsIDB4MDAsIDB4MDAsCisJMHg4YSwgMHg5NSwgMHgzMSwgMHgyMCwgMHg4NSwgMHgzMCwgMHgwMCwgMHgwMCwgMHg5MSwgMHg5NSwgMHgyMiwgMHgxMiwKKwkweDQ4LCAweDdmLCAweDAwLCAweDAwLCAweDUxLCAweDk4LCAweDExLCAweDEyLCAweDQ4LCAweDAzLCAweDAxLCAweDAwLAorCTB4MTAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4OTYsIDB4ZTQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGIsCisJMHgxZSwgMHg5NCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg1YSwgMHgxZiwgMHg5MCwgMHgwMSwgMHgwMCwKKwkweDkwLCAweDk1LCAweDMxLCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGI0LAorCTB4MjQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4OTEsIDB4OTUsIDB4MjIsIDB4MTIsIDB4NDgsIDB4N2YsIDB4MDAsIDB4MDAsCisJMHg1MSwgMHg5OCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZiwgMHgwNSwKKwkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDllLCAweDk1LCAweDBiLCAweGYwLCAweDg0LCAweDMwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MTEsIDB4MTIsIDB4NDgsIDB4ODMsIDB4MDEsIDB4MDAsIDB4OWIsIDB4OTUsIDB4MjIsIDB4NTAsCisJMHg4NSwgMHg3MCwgMHgwMCwgMHgwMCwgMHg1ZSwgMHgwMSwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDUxLCAweDk3LCAweDAwLCAweGYyLCAweDk2LCAweDMwLCAweDAxLCAweDAwLCAweGQxLCAweDk5LCAweDAwLCAweDEyLAorCTB4OTQsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWEsIDB4MWYsIDB4OTAsIDB4MDEsIDB4MDAsCisJMHgxMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHg5NiwgMHhlNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0YiwKKwkweDFlLCAweDk0LCAweDAxLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDQyLCAweDEwLCAweGY0LCAweDAxLCAweDAwLAorCTB4MDAsIDB4YjcsIDB4M2YsIDB4NDMsIDB4MTEsIDB4ZjAsIDB4MDEsIDB4MDAsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDgsCisJMHg4YSwgMHg4OCwgMHgwMSwgMHgwMCwgMHhhMSwgMHg5NSwgMHgzMCwgMHhhMSwgMHgwYywgMHgzMCwgMHgwMCwgMHgwMCwKKwkweGE0LCAweDk1LCAweDIyLCAweDQ1LCAweGU2LCAweDdkLCAweDAwLCAweDAwLCAweDkxLCAweDk1LCAweDEwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmEsIDB4NDUsIDB4ZTYsIDB4OTEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgxMCwgMHgxMiwgMHg0OCwgMHg4MywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMSwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDYwLCAweDRiLCAweDg1LCAweDgwLCAweDAxLCAweDAwLAorCTB4NWUsIDB4MDEsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4NTEsIDB4OTcsIDB4MDAsIDB4ZjIsCisJMHg5NiwgMHgzMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgxMCwgMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweGQ4LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweDk4LCAweDAxLCAweDAwLCAweDJlLCAweDAwLCAweDJkLCAweDA1LAorCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YWYsIDB4OTUsIDB4MjIsIDB4NDAsIDB4ZTcsIDB4NmQsIDB4MDAsIDB4MDAsCisJMHg4MCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MCwgMHhjOCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDA5LCAweDAwLCAweDAwLCAweDA4LCAweDg2LCAweGU0LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4NjgsIDB4YTcsIDB4ODcsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsCisJMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweGIzLCAweDk1LCAweGE4LCAweDA1LCAweGUwLCAweDMxLCAweDAwLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDEyLAorCTB4OTYsIDB4ZTQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDAsIDB4NGIsIDB4OTYsIDB4ZGMsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg4MCwgMHg0YiwgMHgxZSwgMHg5NCwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwZiwKKwkweDg0LCAweGY0LCAweDAxLCAweDAwLCAweDFmLCAweDAwLCAweDAwLCAweDQyLCAweDg0LCAweDg4LCAweDAxLCAweDAwLAorCTB4YmMsIDB4OTUsIDB4MjIsIDB4NDAsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4YmQsIDB4OTUsIDB4MDAsIDB4NDIsCisJMHg2OCwgMHhiMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHg2YSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweGJkLCAweDk1LCAweDMxLCAweDVhLCAweDFmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDkxLCAweDQyLAorCTB4NDgsIDB4OTMsIDB4MDEsIDB4MDAsIDB4YmYsIDB4OTUsIDB4MzUsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHg2ZCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwgMHhjNCwgMHg5NSwgMHgyOCwgMHhiMSwKKwkweDJjLCAweDMwLCAweDAwLCAweDAwLCAweGMwLCAweDk1LCAweDIyLCAweDRkLCAweDc1LCAweDdkLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4OTUsIDB4NDAsIDB4MTEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NmQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwgMHhjNCwgMHg5NSwgMHhhOCwgMHhiMSwgMHgxMCwgMHgzMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDk1LCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDdmLCAweDAwLCAweDAwLCAweDQwLAorCTB4NjEsIDB4OTksIDB4MDEsIDB4MDAsIDB4Y2IsIDB4OTUsIDB4MjgsIDB4YjEsIDB4MTAsIDB4MzAsIDB4MDAsIDB4MDAsCisJMHhjNywgMHg5NSwgMHg5ZiwgMHhiYSwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwKKwkweDExLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDI0LCAweDExLCAweDg0LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NWYsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsCisJMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweGNkLCAweDk1LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGFjLCAweDk0LCAweDAwLCAweDQwLAorCTB4NDcsIDB4OTksIDB4MDEsIDB4MDAsIDB4ZDEsIDB4OTUsIDB4MzIsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHhkNywgMHg5NSwgMHgyMiwgMHhmOCwgMHg5NiwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHhmOCwKKwkweDkwLCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLCAweDkyLCAweGIwLCAweDAxLCAweDAwLAorCTB4MDEsIDB4MDAsIDB4MDAsIDB4NGIsIDB4ZjAsIDB4Y2QsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4OTIsIDB4NDgsCisJMHhlMCwgMHhjOSwgMHgwMSwgMHgwMCwgMHg2YywgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweGRiLCAweDk1LCAweDI4LCAweGIxLCAweDkyLCAweDMwLCAweDAwLCAweDAwLCAweGQ3LCAweDk1LCAweDIyLCAweDRjLAorCTB4NzUsIDB4N2QsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MTIsIDB4NDAsIDB4OTEsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHg2YywgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwgMHhkYiwgMHg5NSwgMHhhOCwgMHhiMSwKKwkweDkwLCAweDMwLCAweDAwLCAweDAwLCAweGZmLCAweDAwLCAweDAwLCAweDQ4LCAweDk2LCAweDg4LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGIsIDB4OTAsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4NGIsCisJMHhmMCwgMHhjZCwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHg0OCwgMHhmMCwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDkyLCAweDQ5LCAweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDBjLCAweDAwLCAweDJkLCAweDEwLAorCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4MDcsIDB4MDAsIDB4MDgsIDB4ODIsIDB4OGMsIDB4MDEsIDB4MDAsCisJMHhmZiwgMHgwNywgMHgwMCwgMHhmMCwgMHgwMCwgMHg4YywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMiwgMHg0MSwKKwkweDAwLCAweGVjLCAweDAwLCAweDAwLCAweGU4LCAweDk1LCAweDIyLCAweDFhLCAweDAwLCAweDZjLCAweDAwLCAweDAwLAorCTB4Y2MsIDB4OTUsIDB4MDAsIDB4MDAsIDB4MzQsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsCisJMHg0OSwgMHhjMSwgMHgwMSwgMHgwMCwgMHhlNCwgMHg5NSwgMHhhMiwgMHg0MSwgMHgyMywgMHg1MCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDgwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDBjLCAweDAwLCAweDJkLCAweDEwLAorCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4MDcsIDB4MDAsIDB4MTUsIDB4ODIsIDB4OGMsIDB4MDEsIDB4MDAsCisJMHhmZiwgMHgwNywgMHgwMCwgMHhmMCwgMHgwMCwgMHg4YywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMiwgMHg0MSwKKwkweDAwLCAweGVjLCAweDAwLCAweDAwLCAweGYxLCAweDk1LCAweDIyLCAweDBkLCAweDAwLCAweDZjLCAweDAwLCAweDAwLAorCTB4Y2MsIDB4OTUsIDB4MDAsIDB4MDAsIDB4MWEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsCisJMHg0OSwgMHhjMSwgMHgwMSwgMHgwMCwgMHhlZCwgMHg5NSwgMHhhMiwgMHg0MSwgMHgyMywgMHg1MCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDgwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweGY2LCAweDk1LCAweDgzLCAweDFlLAorCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4MTksIDB4OTAsIDB4MDEsIDB4MDAsCisJMHgyNCwgMHgwMCwgMHgyZCwgMHgwMSwgMHgyYywgMHhiMCwgMHgwMSwgMHgwMCwgMHgyOCwgMHgwMCwgMHgyZCwgMHhmMCwKKwkweDE2LCAweGIwLCAweDAxLCAweDAwLCAweDIyLCAweDAwLCAweDJkLCAweGYwLCAweDI2LCAweGIwLCAweDAxLCAweDAwLAorCTB4MTQsIDB4MDAsIDB4MmYsIDB4ZjIsIDB4MGMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsCisJMHhlMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMiwgMHgwMCwgMHgyZCwgMHgxMSwgMHgxMCwgMHhjMSwgMHgwMCwgMHgwMCwKKwkweGZmLCAweDk1LCAweDAwLCAweDQwLCAweDQzLCAweGMxLCAweDAwLCAweDAwLCAweGZmLCAweDk1LCAweDAwLCAweDUwLAorCTB4NDMsIDB4YzEsIDB4MDAsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4YTEsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsCisJMHgwNCwgMHg5NiwgMHgyMiwgMHg0MCwgMHhmNSwgMHg2ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwKKwkweDQzLCAweGQxLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDQwLCAweGU1LCAweDdkLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MjMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDksCisJMHgxZiwgMHg5MCwgMHgwMSwgMHgwMCwgMHgwNywgMHg5NiwgMHgyMiwgMHgxMSwgMHgxZSwgMHg3YywgMHgwMCwgMHgwMCwKKwkweDA5LCAweDk2LCAweGEwLCAweGYwLCAweDE2LCAweDQwLCAweDAwLCAweDAwLCAweDA5LCAweDk2LCAweDAwLCAweDQxLAorCTB4MTcsIDB4YzAsIDB4MDAsIDB4MDAsIDB4MDksIDB4OTYsIDB4YTAsIDB4ZjQsIDB4MTYsIDB4NDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgxNywgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMiwgMHg0MSwKKwkweDIzLCAweGQwLCAweDAwLCAweDAwLCAweGZmLCAweDk1LCAweDAwLCAweDUyLCAweDQzLCAweGQxLCAweDAwLCAweDAwLAorCTB4MDAsIDB4YjUsIDB4MDAsIDB4MGQsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4MGMsIDB4OTYsIDB4MzAsIDB4NDcsCisJMHgxNywgMHgwNCwgMHgwMCwgMHgwMCwgMHgwZiwgMHg5NiwgMHhhMiwgMHgwYiwgMHhlNiwgMHg3ZCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDkwLCAweDQyLCAweDgxLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweGI3LCAweDAwLCAweDBkLAorCTB4NDYsIDB4YzksIDB4MDEsIDB4MDAsIDB4MTMsIDB4OTYsIDB4YTIsIDB4MGIsIDB4ZTYsIDB4N2QsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwYiwgMHhlNiwgMHg5MSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5MCwgMHg0MSwKKwkweDgxLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAorCTB4MTQsIDB4OTYsIDB4NDAsIDB4MDcsIDB4OTYsIDB4MzAsIDB4MDAsIDB4MDAsIDB4ZGIsIDB4OTksIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgxZSwgMHg5NiwgMHhhMiwgMHg0NSwgMHg5NSwgMHg3YywgMHgwMCwgMHgwMCwKKwkweDAxLCAweDk3LCAweDNmLCAweDQxLCAweDk1LCAweGUwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYzLAorCTB4OTYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGUsIDB4ZTYsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg0MCwgMHg5NywgMHgzZSwgMHg0MCwgMHg5NywgMHhlMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZSwKKwkweGU2LCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDk3LCAweDNlLCAweDQwLCAweDlkLCAweGUwLCAweDAxLCAweDAwLAorCTB4MzEsIDB4OTYsIDB4MDAsIDB4M2IsIDB4ZTcsIDB4YjEsIDB4MDAsIDB4MDAsIDB4MWUsIDB4OTYsIDB4MzAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgyOCwgMHg5NiwgMHhhMiwgMHgwYiwgMHhlNiwgMHg3ZCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweGI1LCAweDAwLCAweDBkLCAweDQ2LCAweGM5LCAweDAxLCAweDAwLCAweDI0LCAweDk2LCAweGEyLCAweDBiLAorCTB4ZTYsIDB4N2QsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg5OCwgMHg0MiwgMHg4MSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHhiNywgMHgwMCwgMHgwZCwKKwkweDQ2LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBiLCAweGU2LCAweDkxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MTAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OTgsIDB4NDEsCisJMHg4MSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMSwgMHhhMiwgMHg5NSwgMHgyMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDEwLCAweDRhLCAweDQ0LCAweDgzLCAweDAxLCAweDAwLCAweDAwLCAweDk3LCAweDNlLCAweDQxLAorCTB4OTUsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGUsIDB4ZjYsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZSwgMHhlNiwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHg5NywgMHgzZSwgMHg0MCwKKwkweDlkLCAweGUwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDNiLCAweGU3LCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGEsIDB4OTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDcsCisJMHg5MiwgMHg4OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5OCwgMHg0MCwgMHg4MSwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAzLCAweDAwLCAweDAwLCAweDA4LCAweDg2LCAweGY0LCAweDAxLCAweDAwLCAweDAwLCAweGI3LCAweDAwLCAweDQzLAorCTB4NDYsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDgsIDB4ODIsIDB4ODgsIDB4MDEsIDB4MDAsCisJMHgzNSwgMHg5NiwgMHg0MCwgMHgwOCwgMHg5NiwgMHgzMCwgMHgwMCwgMHgwMCwgMHhkYiwgMHg5OSwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDQxLCAweDk2LCAweDIyLCAweDQ1LCAweDk1LCAweDdjLCAweDAwLCAweDAwLAorCTB4M2QsIDB4OTYsIDB4MjIsIDB4NWEsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MGYsCisJMHg5NiwgMHhmNCwgMHgwMSwgMHgwMCwgMHgzYSwgMHg5NiwgMHgzMSwgMHg1ZiwgMHg5NywgMHgwNCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDExLCAweDRiLCAweDQ4LCAweDkzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRiLAorCTB4NmEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4M2QsIDB4OTYsIDB4MzAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHhlNiwgMHg4MSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDk4LCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAorCTB4MDAsIDB4OTcsIDB4M2YsIDB4NDEsIDB4OTUsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjMsCisJMHg5NiwgMHhiMCwgMHgwMSwgMHgwMCwgMHg0MCwgMHg5NywgMHgzZCwgMHg0MCwgMHg5NywgMHhlMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDYzLCAweGYzLCAweDg4LCAweGIwLCAweDAxLCAweDAwLCAweDQ5LCAweDk2LCAweGEyLCAweDNiLAorCTB4ODksIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGEsIDB4OTAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMSwgMHgwMCwgMHgwMCwgMHhhNiwgMHg5MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0YSwgMHg5NiwgMHgxOCwgMHg0YSwKKwkweDQ0LCAweDkzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAorCTB4MzAsIDB4MDAsIDB4MzksIDB4NDUsIDB4OTcsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4NGYsIDB4OTYsIDB4MjIsIDB4NWEsCisJMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgxZiwgMHgwNCwgMHgwMCwgMHgwZiwgMHg5OCwgMHhkOCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDRjLCAweDVlLCAweDk0LCAweDAxLCAweDAwLCAweDUxLCAweDk2LCAweDAwLCAweDA1LAorCTB4NGEsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MWYsIDB4MDQsIDB4MDAsIDB4YTcsIDB4NWUsIDB4ODQsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0YiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1OCwKKwkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRiLCAweDYyLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4YTgsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4NTIsIDB4OTYsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg1NSwgMHg5NiwgMHg0MCwgMHgwNywgMHg5NiwgMHgzMCwgMHgwMCwgMHgwMCwKKwkweGRiLCAweDk5LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDU5LCAweDk2LCAweDIyLCAweDQ1LAorCTB4OTUsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OTgsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCisJMHhkOSwgMHg5OSwgMHgwMCwgMHg0YSwgMHg0NCwgMHgxMywgMHgwMSwgMHgwMCwgMHgwMCwgMHg5NywgMHgzZiwgMHg0MSwKKwkweDk1LCAweGUwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYzLCAweDk2LCAweGIwLCAweDAxLCAweDAwLAorCTB4NDAsIDB4OTcsIDB4M2QsIDB4NDAsIDB4OTcsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjMsIDB4ZjMsCisJMHg4OCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgzMCwgMHgwMCwgMHgzOCwgMHg0NSwgMHg5NywgMHhlMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDVmLCAweDBmLCAweDkwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDU4LAorCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGIsIDB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg2MSwgMHg5NiwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHg1YSwgMHg5NiwgMHhhMiwgMHgzYiwKKwkweDg5LCAweDZjLCAweDAwLCAweDAwLCAweDMwLCAweDAwLCAweDM4LCAweDQ1LCAweDlkLCAweGUwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4OTgsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4ZDEsIDB4OTksIDB4MDAsIDB4MTIsCisJMHg5NCwgMHgzMCwgMHgwMSwgMHgwMCwgMHgzMiwgMHg5NiwgMHgwMCwgMHg1YSwgMHgxZiwgMHgwMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDgwLCAweDVhLCAweDFmLCAweDkwLCAweDAxLCAweDAwLCAweDExLCAweDAwLCAweDAwLCAweDRhLAorCTB4ZTYsIDB4YzksIDB4MDEsIDB4MDAsIDB4MzQsIDB4MDAsIDB4MmYsIDB4NGYsIDB4OTUsIDB4ODQsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmMywgMHg5NiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMSwgMHgwMCwgMHg2MywgMHg0YiwKKwkweDg0LCAweGM4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGEwLCAweDQzLCAweDg1LCAweDZjLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4ZTMsIDB4NDAsIDB4ODUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MzAsIDB4MDAsIDB4MmQsIDB4NDQsCisJMHgxZiwgMHg5MCwgMHgwMSwgMHgwMCwgMHgzMiwgMHgwMCwgMHgyZCwgMHhmMiwgMHgyYSwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDA0LCAweDAwLCAweDIyLCAweGYyLCAweDAyLCAweDMwLCAweDAwLCAweDAwLCAweDUxLCAweDk1LCAweDAwLCAweDEwLAorCTB4MzIsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MzIsIDB4MDAsIDB4YTAsIDB4NDAsIDB4ZTUsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg5NywgMHhiMCwgMHgwMSwgMHgwMCwgMHhmMCwgMHgwNywgMHgwMCwgMHg0MCwKKwkweDk5LCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRhLCAweDAyLCAweGMwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4MDMsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCisJMHg5NywgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMywgMHg0YywgMHgwMiwgMHhkMCwgMHgwMCwgMHgwMCwKKwkweDc4LCAweDk2LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE4LAorCTB4MzYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ODgsIDB4OTYsIDB4MjIsIDB4NDEsIDB4MDMsIDB4NTAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHgxMCwgMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwKKwkweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDcwLCAweDAwLCAweDAwLCAweDAzLCAweGYwLCAweGM5LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsCisJMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHg4MSwgMHg5NiwgMHhhOCwgMHgwMCwgMHhlMCwgMHgzMSwgMHgwMCwgMHgwMCwKKwkweDFiLCAweDg0LCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweGNjLCAweDk1LCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4N2MsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHgwMCwgMHhiMCwgMHgwMSwgMHgwMCwgMHg3YywgMHg5NiwgMHgwMCwgMHg1YywKKwkweDAxLCAweDgwLCAweDAwLCAweDAwLCAweGNjLCAweDk1LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MWIsIDB4MTAsIDB4YjEsIDB4MDAsIDB4MDAsIDB4NjgsIDB4MDEsIDB4MmQsIDB4MDYsCisJMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMiwgMHg4MiwgMHhjMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDgwLCAweDAwLCAweDAzLCAweDQ2LCAweGM5LCAweDAxLCAweDAwLCAweGM3LCAweDk1LCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4YWYsIDB4OTYsIDB4MjIsIDB4NDAsIDB4MTEsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg2OCwgMHgwOCwgMHgzOCwgMHg5NiwgMHgwMSwgMHgwMCwgMHhmMCwgMHgwNywgMHgwMCwgMHg0MSwKKwkweDgyLCAweGNjLCAweDAxLCAweDAwLCAweDhkLCAweDk2LCAweGFhLCAweDQxLCAweDNiLCAweDQwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MTAsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWMsCisJMHgxMSwgMHg4MCwgMHgwMSwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgxZCwgMHgwNCwgMHhjYywgMHgwMSwgMHgwMCwKKwkweGFlLCAweDk2LCAweDI2LCAweDQ2LCAweDIzLCAweDMwLCAweDAwLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDAzLAorCTB4MTIsIDB4YzgsIDB4MDEsIDB4MDAsIDB4NjQsIDB4MDEsIDB4MjAsIDB4ZjAsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHhhZCwgMHg5NiwgMHgyMiwgMHg0MSwgMHgwNSwgMHg1MCwgMHgwMCwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHgwMywKKwkweDQ4LCAweGM5LCAweDAxLCAweDAwLCAweDBjLCAweDAwLCAweDAwLCAweGY4LCAweDg2LCAweGM4LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MjIsIDB4NDQsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsCisJMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOSwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweGEwLCAweDAwLCAweDAwLCAweGE0LAorCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4OWYsIDB4OTYsIDB4YTgsIDB4NDYsIDB4MWYsIDB4MTAsIDB4MDAsIDB4MDAsCisJMHhhYywgMHg5NiwgMHgyMiwgMHg0MSwgMHgwNSwgMHg1MCwgMHgwMCwgMHgwMCwgMHhhYSwgMHg5NiwgMHhhMiwgMHg0MSwKKwkweDIzLCAweDUwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGExLCAweDFhLCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsCisJMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHhhNSwgMHg5NiwgMHhhOCwgMHg0NiwgMHgyMywgMHgzMCwgMHgwMCwgMHgwMCwKKwkweDFiLCAweDg0LCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDAzLAorCTB4NDgsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGQsIDB4NDIsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHgxMywgMHhjMCwgMHgwMSwgMHgwMCwgMHg5YSwgMHg5NiwgMHgwMCwgMHg1MCwKKwkweDQ5LCAweGMxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLAorCTB4MDQsIDB4ODAsIDB4MDAsIDB4MDMsIDB4MWEsIDB4YzgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHhhZSwgMHg5NiwgMHgyMiwgMHg0MCwgMHgzYiwgMHg2YywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDAwLCAweGIwLCAweDAxLCAweDAwLCAweGNjLCAweDk1LCAweDAwLCAweDVjLAorCTB4MDEsIDB4MDAsIDB4MDEsIDB4MDAsIDB4YWYsIDB4OTYsIDB4MDAsIDB4NDEsIDB4M2IsIDB4ZDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg4ZCwgMHg0NywgMHg4MCwgMHgzMiwgMHgwMSwgMHgwMCwgMHhiMCwgMHgwMCwgMHgyZiwgMHg1ZiwKKwkweDEzLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweGYwLCAweDhjLCAweGMwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsCisJMHg5NCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg4YywgMHhiMCwgMHgwMSwgMHgwMCwKKwkweGJiLCAweDk2LCAweDhjLCAweGY4LCAweDhlLCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LAorCTB4MTksIDB4OTAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjIsIDB4ZjgsIDB4MTQsIDB4MzAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgxNiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwKKwkweDI2LCAweGIwLCAweDAxLCAweDAwLCAweDA4LCAweDAwLCAweDJlLCAweGY4LCAweDBjLCAweGIwLCAweDAxLCAweDAwLAorCTB4MGMsIDB4MDAsIDB4MmEsIDB4NGEsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MjgsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHhlMCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMCwgMHgyMCwgMHgxYiwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweGM4LCAweDk2LCAweDIwLCAweDBhLCAweDBjLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LAorCTB4OTQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4OTYsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgyMCwgMHgwMCwgMHgyMCwgMHhmMCwgMHhlNCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgxOCwgMHgwMCwgMHgyMCwgMHg0YSwKKwkweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDFjLCAweDAwLCAweDIwLCAweDRiLCAweGUwLCAweGIxLCAweDAxLCAweDAwLAorCTB4YjMsIDB4OTYsIDB4MDAsIDB4NDAsIDB4MTMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MmMsIDB4MDAsIDB4MmQsIDB4NDIsCisJMHgxOSwgMHg5MCwgMHgwMSwgMHgwMCwgMHgyZSwgMHgwMCwgMHgyZiwgMHhmMywgMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGYzLCAweDk2LCAweGIwLCAweDAxLCAweDAwLCAweGNlLCAweDk2LCAweGEyLCAweGE1LAorCTB4OTcsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDEsIDB4OTUsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHhkMSwgMHg5NiwgMHhhMiwgMHg0MCwgMHg5NywgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgzLCAweGIwLCAweDAxLCAweDAwLCAweDJkLCAweDAwLCAweDIwLCAweDQwLCAweGU3LCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4NjMsIDB4NDEsIDB4OTcsIDB4YzAsIDB4MDEsIDB4MDAsIDB4ZDQsIDB4MDAsIDB4M2UsIDB4NDEsCisJMHg4MywgMHhlMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4MywgMHhjMCwgMHgwMSwgMHgwMCwKKwkweGQ2LCAweDk2LCAweGEwLCAweGE1LCAweDgzLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4ODMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MmMsIDB4MDAsIDB4MjAsIDB4NDEsIDB4ZTYsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHhkYiwgMHg5NiwgMHgyMiwgMHg0MCwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwKKwkweDk4LCAweGRjLCAweDAxLCAweDAwLCAweDBiLCAweDAwLCAweDAwLCAweDRjLCAweGU0LCAweGY1LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsIDB4MWYsIDB4ODAsIDB4MDEsIDB4MDAsIDB4MGIsIDB4MDAsIDB4ODAsIDB4MDAsCisJMHhlNCwgMHhmNSwgMHgwMSwgMHgwMCwgMHhkMCwgMHg5NSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDA0LCAweDgwLCAweDAwLCAweDAzLCAweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg2MCwgMHg0MSwgMHg4NywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgxMCwKKwkweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLCAweGYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDgsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDksCisJMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDIwLCAweDAwLCAweDAwLCAweDEwLAorCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTgsIDB4NWQsIDB4MDUsIDB4OTAsIDB4MDAsIDB4MDAsCisJMHhlNywgMHg5NiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhkMCwgMHg5NSwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDAzLCAweDQ0LCAweGM5LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsCisJMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQzLCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDEwLAorCTB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0OCwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0OSwKKwkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweGUwLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4MTAsCisJMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOCwgMHg1ZCwgMHgwNSwgMHg5MCwgMHgwMCwgMHgwMCwKKwkweGY2LCAweDk2LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDJkLCAweDAwLCAweDAwLCAweDQwLAorCTB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4MmUsIDB4MDAsIDB4MmYsIDB4ZjMsIDB4ODQsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMSwgMHgwMCwgMHg2MywgMHhmMywgMHg5NiwgMHhjOCwgMHgwMSwgMHgwMCwgMHhmZSwgMHg5NiwgMHg5ZiwgMHg0MSwKKwkweDg1LCAweDUwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweGE1LCAweDg1LCAweGNjLCAweDAxLCAweDAwLAorCTB4MmQsIDB4MDAsIDB4YTAsIDB4NDIsIDB4ZTYsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NWUsIDB4MDEsIDB4MmQsIDB4MDAsCisJMHg4MCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMywgMHg5NywgMHg1MiwgMHg0MywgMHg4MSwgMHg2MCwgMHgwMCwgMHgwMCwKKwkweDAyLCAweDAwLCAweDAwLCAweGYyLCAweDgyLCAweGY0LCAweDAxLCAweDAwLCAweDA0LCAweDk3LCAweDAwLCAweDQxLAorCTB4ODAsIDB4OTQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWYsIDB4ODEsIDB4OTAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1ZSwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDYyLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGE4LCAweDQwLCAweDk1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDUsIDB4OTcsIDB4OWUsIDB4YmIsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MGEsIDB4OTcsIDB4YTIsIDB4NDAsCisJMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHhjYywgMHg5NSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDgwLCAweDQxLCAweDk1LCAweGIwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDE1LAorCTB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTQsIDB4MmIsIDB4YzAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmYywgMHgyNCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmYywKKwkweDM4LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZlLCAweDNjLCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZmUsIDB4M2EsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MWYsIDB4OTcsIDB4OWMsIDB4MTcsCisJMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgxNCwgMHg5NywgMHhhMiwgMHg0YSwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDgwLCAweDRjLCAweDFmLCAweDkwLCAweDAxLCAweDAwLCAweDBjLCAweDAwLCAweDAwLCAweDFlLAorCTB4OTgsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4MTMsIDB4OTcsIDB4YTIsIDB4NDgsIDB4OTksIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwgMHg0MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHgxMywgMHg5NywgMHhhMiwgMHg4YSwKKwkweGYxLCAweDZkLCAweDAwLCAweDAwLCAweDBjLCAweDAwLCAweDAwLCAweDAxLCAweDAyLCAweGNjLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZmMsIDB4M2UsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ZjQsCisJMHgyOCwgMHhjYywgMHgwMSwgMHgwMCwgMHhjYywgMHgwMCwgMHgyZCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDFlLCAweDk3LCAweDIwLCAweGYwLCAweDNlLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRiLAorCTB4MWYsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGMsIDB4MmIsIDB4YzAsIDB4MDEsIDB4MDAsCisJMHhiZiwgMHgwMCwgMHgyZCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHhmMywKKwkweDNhLCAweGUwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJlLCAweDRiLCAweDE5LCAweDkwLCAweDAxLCAweDAwLAorCTB4MDcsIDB4MDAsIDB4MmEsIDB4MGMsIDB4ZTQsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDQsCisJMHhlNiwgMHhiMSwgMHgwMSwgMHgwMCwgMHgxOCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDFjLCAweDAwLCAweDJkLCAweGYwLCAweDE2LCAweGIwLCAweDAxLCAweDAwLCAweDIwLCAweDAwLCAweDJkLCAweGYwLAorCTB4MjYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MGMsIDB4MDAsIDB4MmYsIDB4ZjIsIDB4MGMsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHhhMiwgMHgwNiwgMHgxNCwgMHhlYywgMHgwMCwgMHgwMCwgMHgyYiwgMHg5NywgMHgyMiwgMHg0NSwKKwkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGEzLCAweDA2LCAweDJhLCAweGVjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4OTQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsCisJMHg5NiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwYywgMHgwMCwgMHgyZCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDJhLCAweDRjLCAweGUxLCAweGMxLCAweDAxLCAweDAwLCAweDMwLCAweDAwLCAweDAwLCAweDEwLAorCTB4NDgsIDB4YzksIDB4MDEsIDB4MDAsIDB4MGEsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjEsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgxOCwgMHgwMCwgMHgwMCwgMHgwNSwgMHhmMCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YSwKKwkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRiLCAweGUwLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YTAsIDB4MDAsIDB4MDAsIDB4YTQsCisJMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHgzNSwgMHg5NywgMHhhOCwgMHg1YywgMHgxZiwgMHgxMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDgwLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJlLCAweDEwLAorCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjgsIDB4MDEsIDB4OTYsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgzYiwgMHg5NywgMHg0NSwgMHg0MiwKKwkweDYxLCAweDMxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGIxLCAweDAxLCAweDAwLAorCTB4M2MsIDB4OTcsIDB4YTgsIDB4MDAsIDB4ZTAsIDB4MzEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OWQsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZSwgMHgxMCwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDY4LCAweDAxLCAweDk2LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLAorCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDIsIDB4OTcsIDB4NDUsIDB4NDIsIDB4NjEsIDB4MzEsIDB4MDAsIDB4MDAsCisJMHgyMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHg0MywgMHg5NywgMHhhOCwgMHgwMCwKKwkweGUwLCAweDMxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDlkLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAorCTB4MzAsIDB4ODAsIDB4MDAsIDB4NGEsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDYsCisJMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhjMCwgMHhhOCwgMHgzZCwgMHg0NiwgMHgwZCwgMHhlMCwgMHgwMSwgMHgwMCwKKwkweGZmLCAweDdmLCAweDAwLCAweGExLCAweGYwLCAweDg5LCAweDAxLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDA5LAorCTB4OTYsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsIDB4OTcsIDB4ZTAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg2MCwgMHhhOCwgMHg5NywgMHhjMCwgMHgwMSwgMHgwMCwgMHg0ZCwgMHg5NywgMHg0NiwgMHg0MiwKKwkweDYxLCAweDMxLCAweDAwLCAweDAwLCAweDMwLCAweDAwLCAweDAwLCAweDRhLCAweDYyLCAweGM5LCAweDAxLCAweDAwLAorCTB4NGUsIDB4OTcsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OWUsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHg5OSwgMHgzZiwgMHg0MiwgMHg5NywgMHhmMCwgMHgwMSwgMHgwMCwKKwkweDUyLCAweDk3LCAweDQ3LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDVhLCAweDk3LCAweDIyLCAweGYzLAorCTB4NzQsIDB4MDYsIDB4MDAsIDB4MDAsIDB4M2YsIDB4MDAsIDB4MDAsIDB4ZjMsIDB4OTQsIDB4ODgsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwNywgMHhlNywgMHg4NSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxZiwgMHg1NSwKKwkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRhLCAweDYyLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4YTgsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4NTcsIDB4OTcsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5ZiwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGE4LCAweDM2LCAweGIwLCAweDAxLCAweDAwLCAweDZhLCAweDk3LCAweDgyLCAweDQxLAorCTB4MjMsIDB4NDAsIDB4MDAsIDB4MDAsIDB4NWYsIDB4OTcsIDB4YTIsIDB4NDQsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsCisJMHhkYSwgMHg5NCwgMHgwMCwgMHgwMSwgMHg4YywgMHgzMCwgMHgwMSwgMHgwMCwgMHgyMCwgMHg4MCwgMHgwMCwgMHgxMCwKKwkweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDY1LCAweDk3LCAweDIyLCAweDQwLCAweGUzLCAweDZkLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsCisJMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHg2MiwgMHg5NywgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDFiLCAweDg0LCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAorCTB4MjMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MzIsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHg2YSwgMHg5NywgMHgyMiwgMHg0MSwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHhlMiwgMHg5NSwgMHgwMCwgMHg0MywKKwkweDIzLCAweDMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDIzLCAweGIwLCAweDAxLCAweDAwLAorCTB4NmMsIDB4OTcsIDB4YTMsIDB4MTUsIDB4MGMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4NmQsIDB4OTcsIDB4MDAsIDB4MDYsCisJMHgwNCwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwgMHgwNCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDZmLCAweDk3LCAweDIwLCAweDAyLCAweDFhLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBkLAorCTB4MDQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MGIsIDB4OTYsIDB4ODgsIDB4MDEsIDB4MDAsCisJMHg3NCwgMHg5NywgMHgyNiwgMHg0NywgMHg5NywgMHgyNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKKwkweDk3LCAweGMwLCAweDAxLCAweDAwLCAweDc0LCAweDk3LCAweDIzLCAweDRiLCAweDA0LCAweDZjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGIsIDB4MDQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MzMsIDB4OTgsIDB4MDAsIDB4MDUsCisJMHg0OCwgMHgzMSwgMHgwMSwgMHgwMCwgMHg5ZSwgMHg5NywgMHgyMiwgMHgwMiwgMHgxNCwgMHg1MCwgMHgwMCwgMHgwMCwKKwkweDc4LCAweDk3LCAweGEyLCAweDAyLCAweDJhLCAweDUwLCAweDAwLCAweDAwLCAweDllLCAweDk3LCAweGEyLCAweDQ1LAorCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4N2EsIDB4OTcsIDB4MjIsIDB4MDIsIDB4MGMsIDB4NTAsIDB4MDAsIDB4MDAsCisJMHg4MywgMHg5NywgMHgwMCwgMHgwMiwgMHgxNiwgMHhjMCwgMHgwMCwgMHgwMCwgMHg4MiwgMHg5NywgMHgyMiwgMHg1YywKKwkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDMwLCAweDgwLCAweDAwLCAweDEwLCAweDQyLCAweGM5LCAweDAxLCAweDAwLAorCTB4ODIsIDB4OTcsIDB4MjIsIDB4NDAsIDB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsCisJMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKKwkweDdlLCAweDk3LCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDFiLCAweDg0LCAweDAwLCAweDg4LAorCTB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgyNCwgMHg5NywgMHgwMCwgMHg1YywgMHgxZiwgMHgwMCwgMHgwMSwgMHgwMCwgMHg5ZSwgMHg5NywgMHgyMiwgMHgxNSwKKwkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLCAweDMzLCAweGMwLCAweDAxLCAweDAwLAorCTB4OWQsIDB4OTcsIDB4YTIsIDB4MDIsIDB4MWEsIDB4NTAsIDB4MDAsIDB4MDAsIDB4OGYsIDB4OTcsIDB4MjIsIDB4NDYsCisJMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHg3MCwgMHg4MCwgMHgwMCwgMHgwMywgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ2LCAweDFmLCAweDgwLCAweDAxLCAweDAwLCAweDhmLCAweDk3LCAweDIyLCAweDQwLAorCTB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHg4YiwgMHg5NywgMHhhOCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDFiLCAweDg0LCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MGMsIDB4ODAsIDB4MDAsIDB4MDMsCisJMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHgxMCwgMHhjOCwgMHgwMSwgMHgwMCwKKwkweDJmLCAweDAwLCAweDJmLCAweDVjLCAweDExLCAweDgwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ3LAorCTB4ZTcsIDB4OTEsIDB4MDEsIDB4MDAsIDB4ZjAsIDB4MDcsIDB4MDAsIDB4NDAsIDB4MWIsIDB4OTgsIDB4MDEsIDB4MDAsCisJMHg1YywgMHg5NywgMHgyMCwgMHgxNSwgMHgxYSwgMHg2YywgMHgwMCwgMHgwMCwgMHg3MCwgMHgwMCwgMHgwMCwgMHgwMywKKwkweDQ4LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDIyLCAweDUwLCAweGYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4MDcsIDB4MDAsIDB4MDgsCisJMHhlMCwgMHg4ZCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweGEwLCAweDAwLCAweDAwLCAweGE0LCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDlhLCAweDk3LCAweGE4LCAweDQ2LAorCTB4MWYsIDB4MTAsIDB4MDAsIDB4MDAsIDB4NWMsIDB4OTcsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDAsIDB4MDAsCisJMHg1YywgMHg5NywgMHgwMCwgMHgwMiwgMHgxMCwgMHhjMCwgMHgwMCwgMHgwMCwgMHhhMCwgMHg5NywgMHhhMiwgMHg0NCwKKwkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweGRhLCAweDk0LCAweDAwLCAweDAxLCAweDhjLCAweDMwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MWIsIDB4MTAsIDB4YjEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MTAsCisJMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmMSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDEwLCAweDAwLCAweDAwLCAweDA4LCAweGYwLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE2LAorCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4ZTAsIDB4YzksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHgxMCwKKwkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGE4LCAweDVjLCAweDFmLCAweDkwLCAweDAwLCAweDAwLAorCTB4YTcsIDB4OTcsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MTcsIDB4MDAsIDB4MDAsIDB4ZDAsCisJMHhhMiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMiwgMHg0MCwgMHgyNywgMHhlYywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDIwLCAweDAwLCAweGIwLCAweDAxLCAweDAwLCAweGNjLCAweDk1LCAweDAwLCAweDQxLAorCTB4YTMsIDB4NDEsIDB4MDEsIDB4MDAsIDB4YWIsIDB4OTcsIDB4MDAsIDB4NDEsIDB4MjcsIDB4ZDAsIDB4MDAsIDB4MDAsCisJMHgxMCwgMHgwMCwgMHgwMCwgMHgwNywgMHg5NiwgMHhlNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YiwKKwkweDgwLCAweDk0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDU0LCAweDYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4NDAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTgsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhiMiwgMHg5NywgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDk4LCAweDAwLCAweDQwLCAweDJiLCAweDMwLCAweDAxLCAweDAwLCAweGFjLCAweDAwLCAweDJkLCAweDA2LAorCTB4MTYsIDB4YzAsIDB4MDEsIDB4MDAsIDB4OTAsIDB4MDAsIDB4MmQsIDB4ZjAsIDB4MTYsIDB4YzQsIDB4MDEsIDB4MDAsCisJMHhiYSwgMHg5NywgMHhhMCwgMHhmMCwgMHgxNiwgMHg0NCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKKwkweDE3LCAweGMwLCAweDAxLCAweDAwLCAweDBlLCAweDAwLCAweDAwLCAweGEyLCAweDQ0LCAweGM5LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4NmMsIDB4ZjAsIDB4MzAsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YWMsIDB4MDAsIDB4MmQsIDB4NDAsCisJMHg4NywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2YywgMHhmMCwgMHgyOCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweGMzLCAweDk3LCAweDIyLCAweDRhLCAweDE5LCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDMwLCAweDAwLCAweDQzLAorCTB4ODYsIDB4YzgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MzAsIDB4MDAsIDB4MGIsIDB4MTYsIDB4YzgsIDB4MDEsIDB4MDAsCisJMHhjMywgMHg5NywgMHhhNCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKKwkweDE3LCAweGMwLCAweDAxLCAweDAwLCAweGU0LCAweDk3LCAweDIyLCAweDA2LCAweDgwLCAweDMyLCAweDAwLCAweDAwLAorCTB4ZDAsIDB4OTcsIDB4YTIsIDB4MDYsIDB4MTQsIDB4NmMsIDB4MDAsIDB4MDAsIDB4Y2QsIDB4OTcsIDB4MjIsIDB4NDgsCisJMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHhjOCwgMHg5NywgMHhhMCwgMHg0MSwgMHgxNywgMHg0MCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDE3LCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAorCTB4MzEsIDB4YzAsIDB4MDEsIDB4MDAsIDB4OTAsIDB4MDAsIDB4MjAsIDB4MTgsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg4YiwgMHgwMCwgMHgyZCwgMHg0OCwgMHgxOSwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4YiwgMHgwMCwgMHgyMCwgMHg0NSwKKwkweGU3LCAweDkxLCAweDAxLCAweDAwLCAweGQwLCAweDk3LCAweDAwLCAweDQwLCAweDg3LCAweDkwLCAweDAwLCAweDAwLAorCTB4MDgsIDB4MDAsIDB4MDAsIDB4NDMsIDB4ODYsIDB4OTgsIDB4MDEsIDB4MDAsIDB4ZDAsIDB4OTcsIDB4YTAsIDB4NDgsCisJMHgxNywgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgxNywgMHhjMCwgMHgwMSwgMHgwMCwKKwkweGIwLCAweDAwLCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDEwLCAweDUwLCAweDAwLCAweDQzLAorCTB4ZmMsIDB4YzksIDB4MDEsIDB4MDAsIDB4M2IsIDB4OTgsIDB4MDAsIDB4MzAsIDB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhlNSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhkYiwgMHg5NywgMHgyMiwgMHg0YSwKKwkweDE5LCAweDdjLCAweDAwLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweGEyLCAweDQ0LCAweGM5LCAweDAxLCAweDAwLAorCTB4Y2MsIDB4MDAsIDB4MmQsIDB4YWIsIDB4ZjksIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YWIsCisJMHgxNywgMHhjMCwgMHgwMSwgMHgwMCwgMHhkYSwgMHg5NywgMHhhMCwgMHhmMCwgMHgxNiwgMHg0NCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDE3LCAweGMwLCAweDAxLCAweDAwLCAweGRmLCAweDk3LCAweDY0LCAweGYwLAorCTB4ODIsIDB4YjAsIDB4MDAsIDB4MDAsIDB4YTQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDcsIDB4OTksIDB4MDEsIDB4MDAsCisJMHhkZiwgMHg5NywgMHhhMiwgMHhmMiwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKKwkweGU1LCAweGIxLCAweDAxLCAweDAwLCAweDhjLCAweDAwLCAweDIwLCAweDE4LCAweGUwLCAweGIxLCAweDAxLCAweDAwLAorCTB4OTAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjAsIDB4MDYsCisJMHgzMCwgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4NiwgMHgwYywgMHg4MCwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweGJjLCAweDAwLCAweDJkLCAweDQ2LCAweDE5LCAweDkwLCAweDAxLCAweDAwLCAweGEwLCAweDAwLCAweGEwLCAweGYyLAorCTB4ZTQsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgxMCwgMHg1MCwgMHgwMCwgMHg0MywgMHhmYywgMHhjOSwgMHgwMSwgMHgwMCwgMHgzYiwgMHg5OCwgMHgwMCwgMHgzMCwKKwkweDgxLCAweDMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGEyLCAweDRhLCAweDE5LCAweGZjLCAweDAwLCAweDAwLAorCTB4MDgsIDB4MDAsIDB4MDAsIDB4YTIsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4Y2MsIDB4MDAsIDB4MmQsIDB4YWIsCisJMHhmOSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhYiwgMHgxNywgMHhjMCwgMHgwMSwgMHgwMCwKKwkweGVkLCAweDk3LCAweGEwLCAweGYwLCAweDE2LCAweDQ0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAorCTB4MTcsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTQsIDB4ZjAsIDB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHgxMCwgMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKKwkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweGYwLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsCisJMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOCwgMHgxYiwgMHhlMCwgMHhiMSwgMHgwMCwgMHgwMCwKKwkweGYyLCAweDk3LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweGYwLCAweDAwLCAweDBjLAorCTB4N2UsIDB4ODksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTYsIDB4NGMsIDB4OTUsIDB4NjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg4MCwgMHg0YSwgMHgxOCwgMHg5NCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgxMCwKKwkweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweDAxLCAweGYwLCAweDMxLCAweDAwLCAweDAwLAorCTB4MjAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjAsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTYsCisJMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDIwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGE4LCAweDE1LAorCTB4ZTAsIDB4YjEsIDB4MDAsIDB4MDAsIDB4ZmQsIDB4OTcsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgxMCwgMHg4MCwgMHgwMCwgMHgwMywgMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNiwKKwkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweGYwLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4ZTgsIDB4NWYsIDB4MTcsIDB4OTAsIDB4MDEsIDB4MDAsIDB4NzAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHg3YSwgMHgwMSwgMHgyZSwgMHhmZSwgMHg5MiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDhiLCAweDAwLCAweDJkLCAweGY2LCAweDE2LCAweGIwLCAweDAxLCAweDAwLCAweDBhLCAweDk4LCAweDIyLCAweDQzLAorCTB4ZTcsIDB4N2QsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4NDUsIDB4YzEsIDB4MDEsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHhhNiwgMHgyYSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgyOCwgMHgwMCwgMHg2ZSwgMHgwNiwKKwkweDgyLCAweGM4LCAweDAxLCAweDAwLCAweDBlLCAweDk4LCAweDIyLCAweDRhLCAweDE5LCAweDdjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4NDUsIDB4ZDEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NmUsIDB4NGMsCisJMHg4MywgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg5MiwgMHhjMCwgMHgwMSwgMHgwMCwKKwkweDBmLCAweDk4LCAweDQyLCAweDMwLCAweDNkLCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDY2LCAweDllLAorCTB4ODMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWEsIDB4NDEsIDB4M2QsIDB4YzMsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg5MiwgMHhjMCwgMHgwMSwgMHgwMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHhhMiwKKwkweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDQ5LCAweDk4LCAweGY0LCAweDAxLCAweDAwLAorCTB4MTgsIDB4OTgsIDB4MjYsIDB4MzAsIDB4OTMsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MTgsIDB4OTgsIDB4OTAsIDB4NGMsCisJMHg5MiwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg5MywgMHhjMCwgMHgwMSwgMHgwMCwKKwkweGZmLCAweGZmLCAweDgwLCAweDQ5LCAweGVjLCAweGE5LCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDEwLAorCTB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjIsIDB4MDEsIDB4ZjAsIDB4MzEsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwOSwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwKKwkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDIwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4YTgsIDB4MTUsIDB4ZTAsIDB4YjEsIDB4MDAsIDB4MDAsIDB4MWQsIDB4OTgsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgyYSwgMHg5OCwgMHgyMiwgMHg1ZiwgMHg4MSwgMHg3YywgMHgwMCwgMHgwMCwKKwkweDI5LCAweDk4LCAweGEyLCAweDQwLCAweDE5LCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4MTksIDB4OTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTQsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgxMCwgMHgwMCwgMHgwMCwgMHgwNywgMHg5NiwgMHhlNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZiwKKwkweDk3LCAweDk0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRiLCAweDYyLCAweGIxLCAweDAxLCAweDAwLAorCTB4MjksIDB4OTgsIDB4MjgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MjYsIDB4OTgsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMiwgMHgyMSwgMHg4MSwgMHg4NCwgMHgwMCwgMHgwMCwKKwkweDJkLCAweDk4LCAweGEyLCAweDVmLCAweDgxLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGEyLCAweDQzLAorCTB4MTksIDB4N2MsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4MTksIDB4OTAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1NCwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwNywKKwkweDk2LCAweGU0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDk2LCAweDk0LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGIsIDB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTgsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgzMCwgMHg5OCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDgwLCAweDAwLCAweDE5LCAweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweDAyLAorCTB4ZjAsIDB4MzEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGIsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgxMywgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywKKwkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDIwLCAweDAwLCAweDAwLCAweDE5LCAweDYyLCAweGRkLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4YTgsIDB4MDgsIDB4ZTAsIDB4YjEsIDB4MDAsIDB4MDAsIDB4MzgsIDB4OTgsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg3YywgMHgwMCwgMHgyZCwgMHhmMCwgMHg4NCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAyLCAweDAwLCAweDAwLCAweGYwLCAweDk4LCAweGY0LCAweDAxLCAweDAwLCAweDQxLCAweDk4LCAweDIwLCAweDRjLAorCTB4ODQsIDB4NmMsIDB4MDAsIDB4MDAsIDB4ODgsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsCisJMHg0MSwgMHg5OCwgMHgyMCwgMHhmMiwgMHg4NCwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDg1LCAweGIwLCAweDAxLCAweDAwLCAweDk4LCAweDAwLCAweDJkLCAweDE0LCAweDgyLCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4OTgsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YTMsIDB4MDAsIDB4MmQsIDB4MTQsCisJMHg5OCwgMHhkMCwgMHgwMSwgMHgwMCwgMHg0NiwgMHg5OCwgMHgyMCwgMHg0YywgMHg4NCwgMHg2YywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDRjLCAweDg0LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYzLAorCTB4ODAsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4NDksIDB4OTgsIDB4MjMsIDB4NDAsIDB4ODQsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4NCwgMHhiMCwgMHgwMSwgMHgwMCwgMHhkMCwgMHgwMCwgMHgyMCwgMHgxNCwKKwkweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDk4LCAweDAwLCAweDI1LCAweDQyLCAweDgwLCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4NmUsIDB4ZjMsIDB4ODAsIDB4ZjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTYsIDB4NDIsCisJMHg4MiwgMHhjMCwgMHgwMCwgMHgwMCwgMHg0ZiwgMHg5OCwgMHhhMCwgMHg0MCwgMHgxNiwgMHg0MCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDE3LCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDlmLCAweGYwLAorCTB4ODIsIDB4ZWMsIDB4MDAsIDB4MDAsIDB4OTgsIDB4MDAsIDB4YTAsIDB4NDEsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg1MiwgMHg5OCwgMHgwMCwgMHgxMiwgMHgxMCwgMHhjOSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0OCwgMHg4MCwgMHg0MCwKKwkweDBiLCAweDk4LCAweDAxLCAweDAwLCAweGMwLCAweDQ5LCAweDgwLCAweDQwLCAweDBiLCAweDk4LCAweDAxLCAweDAwLAorCTB4ODAsIDB4NGIsIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4NDAsIDB4NGQsIDB4ODAsIDB4NDAsCisJMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg0ZiwgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwKKwkweGMwLCAweDUwLCAweDgwLCAweDQwLCAweDBiLCAweDk4LCAweDAxLCAweDAwLCAweDgwLCAweDUyLCAweDgwLCAweDQwLAorCTB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4NDAsIDB4NTQsIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHg1NiwgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHhjMCwgMHg1NywgMHg4MCwgMHg0MCwKKwkweDBiLCAweDk4LCAweDAxLCAweDAwLCAweDgwLCAweDU5LCAweDgwLCAweDQwLCAweDBiLCAweDk4LCAweDAxLCAweDAwLAorCTB4NDAsIDB4NWIsIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4NWQsIDB4ODAsIDB4NDAsCisJMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHhjMCwgMHg1ZSwgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwKKwkweDgwLCAweDYwLCAweDgwLCAweDQwLCAweDBiLCAweDk4LCAweDAxLCAweDAwLCAweDQwLCAweDYyLCAweDgwLCAweDQwLAorCTB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4NjQsIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsCisJMHhjMCwgMHg2NSwgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg2NywgMHg4MCwgMHg0MCwKKwkweDBiLCAweDk4LCAweDAxLCAweDAwLCAweDQwLCAweDY5LCAweDgwLCAweDQwLCAweDBiLCAweDk4LCAweDAxLCAweDAwLAorCTB4MDAsIDB4NmIsIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4YzAsIDB4NmMsIDB4ODAsIDB4NDAsCisJMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg2ZSwgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwKKwkweDQwLCAweDcwLCAweDgwLCAweDQwLCAweDBiLCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweDcyLCAweDgwLCAweDQwLAorCTB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4YzAsIDB4NzMsIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsCisJMHg4MCwgMHg3NSwgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHg0MCwgMHg3NywgMHg4MCwgMHg0MCwKKwkweDBiLCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweDc5LCAweDgwLCAweDQwLCAweDBiLCAweDk4LCAweDAxLCAweDAwLAorCTB4YzAsIDB4N2EsIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4ODAsIDB4N2MsIDB4ODAsIDB4NDAsCisJMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHg0MCwgMHg3ZSwgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwKKwkweDcyLCAweDk4LCAweDQzLCAweDU3LCAweDYxLCAweDMxLCAweDAwLCAweDAwLCAweDdlLCAweDk4LCAweGEyLCAweDU3LAorCTB4NzMsIDB4N2QsIDB4MDAsIDB4MDAsIDB4N2UsIDB4OTgsIDB4YTIsIDB4NDAsIDB4ODEsIDB4NmYsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0OCwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHg0YSwKKwkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDc2LCAweDk4LCAweGE4LCAweDRhLCAweDgwLCAweDMzLCAweDAwLCAweDAwLAorCTB4N2IsIDB4OTgsIDB4MjIsIDB4NWYsIDB4OTUsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGIsCisJMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHg3OSwgMHg5OCwgMHhhOCwgMHg0YiwgMHhhYywgMHgzMywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDFiLCAweGE1LCAweDgyLCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGJlLAorCTB4ODMsIDB4YzMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsIDB4OTcsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgxMCwgMHgwMCwgMHg0YSwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHg4MiwgMHg5OCwgMHgyOCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDdlLCAweDk4LCAweDIyLCAweDU3LCAweDc3LCAweDdkLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4OWIsIDB4MjAsIDB4OTcsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGIsCisJMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHg4MiwgMHg5OCwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDliLCAweDQwLCAweDk3LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJlLCAweDEwLAorCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YTgsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ZjEsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwOSwgMHgwMCwgMHgwMCwgMHgwNywKKwkweDk2LCAweGU0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDYwLCAweGE3LCAweDk3LCAweGMwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTgsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg4YSwgMHg5OCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweGE4LCAweDAwLCAweDJkLCAweDFjLCAweDhhLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDlmLCAweGYwLAorCTB4OGEsIDB4ZDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTIsIDB4NDAsIDB4OGIsIDB4ZWMsIDB4MDAsIDB4MDAsCisJMHg4YSwgMHgwMCwgMHgyMCwgMHg0MCwgMHhlNywgMHhiMSwgMHgwMSwgMHgwMCwgMHhiNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDQ3LCAweDk5LCAweDAxLCAweDAwLCAweGE0LCAweDAwLCAweDJkLCAweDQ1LCAweGUwLCAweGQxLCAweDAxLCAweDAwLAorCTB4OTcsIDB4OTgsIDB4OWMsIDB4MTcsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4YmUsIDB4MDAsIDB4MmYsIDB4YWIsCisJMHg4MywgMHhiMCwgMHgwMSwgMHgwMCwgMHhmZiwgMHg5OCwgMHgwMCwgMHgxNCwgMHg4MiwgMHg1MCwgMHgwMSwgMHgwMCwKKwkweDljLCAweDk4LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDljLCAweDk4LCAweDIyLCAweGYyLAorCTB4ODIsIDB4MzAsIDB4MDAsIDB4MDAsIDB4OGMsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsCisJMHg5YywgMHg5OCwgMHg5ZiwgMHgxYywgMHhlMCwgMHg2ZCwgMHgwMCwgMHgwMCwgMHhiZSwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDQ3LCAweDk5LCAweDAxLCAweDAwLCAweGZmLCAweDk4LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4YTgsIDB4MDAsIDB4MjAsIDB4MWMsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4OWMsIDB4MDAsIDB4MmQsIDB4MzAsCisJMHg4MSwgMHhiMCwgMHgwMSwgMHgwMCwgMHg4OCwgMHgwMCwgMHgyZCwgMHhmMCwgMHg4NCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDk0LCAweDAwLCAweDJkLCAweGYyLCAweDg2LCAweGIwLCAweDAxLCAweDAwLCAweGM2LCAweDk4LCAweDIzLCAweGYwLAorCTB4ODQsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MGMsIDB4MDAsIDB4MDAsIDB4NDIsIDB4ODgsIDB4ZjQsIDB4MDEsIDB4MDAsCisJMHhjNiwgMHg5OCwgMHgyMCwgMHg1MCwgMHg4OSwgMHg2YywgMHgwMCwgMHgwMCwgMHhiNSwgMHg5OCwgMHhhMywgMHg5MiwKKwkweDg3LCAweDZjLCAweDAwLCAweDAwLCAweGE1LCAweDk4LCAweDAwLCAweDQ0LCAweDEwLCAweGM5LCAweDAwLCAweDAwLAorCTB4YzYsIDB4OTgsIDB4MDAsIDB4MGEsIDB4ODcsIDB4YjAsIDB4MDAsIDB4MDAsIDB4YzYsIDB4OTgsIDB4MDAsIDB4MDksCisJMHg4NywgMHhiMCwgMHgwMCwgMHgwMCwgMHhjNiwgMHg5OCwgMHgwMCwgMHgwOCwgMHg4NywgMHhiMCwgMHgwMCwgMHgwMCwKKwkweGM2LCAweDk4LCAweDAwLCAweDA3LCAweDg3LCAweGIwLCAweDAwLCAweDAwLCAweGM2LCAweDk4LCAweDAwLCAweDA3LAorCTB4ODcsIDB4YjAsIDB4MDAsIDB4MDAsIDB4YzYsIDB4OTgsIDB4MDAsIDB4MDcsIDB4ODcsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHhjNiwgMHg5OCwgMHgwMCwgMHgwNiwgMHg4NywgMHhiMCwgMHgwMCwgMHgwMCwgMHhjNiwgMHg5OCwgMHgwMCwgMHgwNiwKKwkweDg3LCAweGIwLCAweDAwLCAweDAwLCAweGM2LCAweDk4LCAweDAwLCAweDA2LCAweDg3LCAweGIwLCAweDAwLCAweDAwLAorCTB4YzYsIDB4OTgsIDB4MDAsIDB4MDYsIDB4ODcsIDB4YjAsIDB4MDAsIDB4MDAsIDB4YzYsIDB4OTgsIDB4MDAsIDB4MDYsCisJMHg4NywgMHhiMCwgMHgwMCwgMHgwMCwgMHhjNiwgMHg5OCwgMHgwMCwgMHgwNSwgMHg4NywgMHhiMCwgMHgwMCwgMHgwMCwKKwkweGM2LCAweDk4LCAweDAwLCAweDA1LCAweDg3LCAweGIwLCAweDAwLCAweDAwLCAweGM2LCAweDk4LCAweDAwLCAweDA1LAorCTB4ODcsIDB4YjAsIDB4MDAsIDB4MDAsIDB4YzYsIDB4OTgsIDB4MDAsIDB4MDUsIDB4ODcsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHhjNiwgMHg5OCwgMHgwMCwgMHgwNSwgMHg4NywgMHhiMCwgMHgwMCwgMHgwMCwgMHhiNiwgMHg5OCwgMHgwMCwgMHg0NCwKKwkweDEwLCAweGM5LCAweDAwLCAweDAwLCAweGM2LCAweDk4LCAweDAwLCAweDBmLCAweDg3LCAweGIwLCAweDAwLCAweDAwLAorCTB4YzYsIDB4OTgsIDB4MDAsIDB4MGUsIDB4ODcsIDB4YjAsIDB4MDAsIDB4MDAsIDB4YzYsIDB4OTgsIDB4MDAsIDB4MGQsCisJMHg4NywgMHhiMCwgMHgwMCwgMHgwMCwgMHhjNiwgMHg5OCwgMHgwMCwgMHgwYywgMHg4NywgMHhiMCwgMHgwMCwgMHgwMCwKKwkweGM2LCAweDk4LCAweDAwLCAweDBjLCAweDg3LCAweGIwLCAweDAwLCAweDAwLCAweGM2LCAweDk4LCAweDAwLCAweDBjLAorCTB4ODcsIDB4YjAsIDB4MDAsIDB4MDAsIDB4YzYsIDB4OTgsIDB4MDAsIDB4MGMsIDB4ODcsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHhjNiwgMHg5OCwgMHgwMCwgMHgwYywgMHg4NywgMHhiMCwgMHgwMCwgMHgwMCwgMHhjNiwgMHg5OCwgMHgwMCwgMHgwYywKKwkweDg3LCAweGIwLCAweDAwLCAweDAwLCAweGM2LCAweDk4LCAweDAwLCAweDBiLCAweDg3LCAweGIwLCAweDAwLCAweDAwLAorCTB4YzYsIDB4OTgsIDB4MDAsIDB4MGIsIDB4ODcsIDB4YjAsIDB4MDAsIDB4MDAsIDB4YzYsIDB4OTgsIDB4MDAsIDB4MGIsCisJMHg4NywgMHhiMCwgMHgwMCwgMHgwMCwgMHhjNiwgMHg5OCwgMHgwMCwgMHgwYiwgMHg4NywgMHhiMCwgMHgwMCwgMHgwMCwKKwkweGM2LCAweDk4LCAweDAwLCAweDBiLCAweDg3LCAweGIwLCAweDAwLCAweDAwLCAweGM2LCAweDk4LCAweDAwLCAweDBiLAorCTB4ODcsIDB4YjAsIDB4MDAsIDB4MDAsIDB4YzYsIDB4OTgsIDB4MDAsIDB4MGIsIDB4ODcsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHhiZiwgMHgwMCwgMHgyZCwgMHg0MywgMHg4NCwgMHhjMCwgMHgwMSwgMHgwMCwgMHg5MCwgMHgwMCwgMHgyZCwgMHhmMywKKwkweDgwLCAweGUwLCAweDAxLCAweDAwLCAweGNiLCAweDk4LCAweDIzLCAweDQwLCAweDg0LCAweDZjLCAweDAwLCAweDAwLAorCTB4OTQsIDB4MDAsIDB4MjAsIDB4OWQsIDB4ZTEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4NCwgMHhiMCwgMHgwMSwgMHgwMCwgMHhjZiwgMHg5OCwgMHhhMiwgMHhmMCwgMHgzOCwgMHg2YywgMHgwMCwgMHgwMCwKKwkweDljLCAweDAwLCAweDIwLCAweDQyLCAweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVmLAorCTB4MTMsIDB4OTQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDYsIDB4MTksIDB4ODAsIDB4MDEsIDB4MDAsCisJMHg5YywgMHgwMCwgMHgyMCwgMHg0MiwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgzNywgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweGYzLCAweDgwLCAweGY0LCAweDAxLCAweDAwLAorCTB4MGYsIDB4MDAsIDB4MDAsIDB4ZjMsIDB4ODIsIDB4ODgsIDB4MDEsIDB4MDAsIDB4ZDUsIDB4OTgsIDB4MjMsIDB4NDEsCisJMHg4MCwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1ZiwgMHgxMywgMHg5NCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDg5LCAweDBjLCAweDgwLCAweGIyLCAweDAwLCAweDAwLCAweGJjLCAweDAwLCAweDAwLCAweDQwLAorCTB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4YTAsIDB4MDAsIDB4YTAsIDB4ZjIsIDB4ZTQsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg5ZiwgMHg0MSwgMHgyNCwgMHhlYywgMHgwMCwgMHgwMCwgMHhkZiwgMHg5OCwgMHhhNiwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDlmLCAweDQyLCAweDM4LCAweGVjLCAweDAwLCAweDAwLAorCTB4ZGYsIDB4OTgsIDB4YTYsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4YjQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHhlMSwgMHg5OCwgMHhhMywgMHhmMCwgMHgzYSwgMHg2YywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDgwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweGI0LCAweDAwLCAweDAwLCAweDQwLAorCTB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4ZTUsIDB4OTgsIDB4MjIsIDB4ZjAsIDB4M2EsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHhiNCwgMHgwMCwgMHgyMCwgMHgxZCwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMCwgMHgyZCwgMHg1ZiwKKwkweDEzLCAweDk0LCAweDAxLCAweDAwLCAweGU1LCAweDk4LCAweDIzLCAweGYwLCAweDNhLCAweDZjLCAweDAwLCAweDAwLAorCTB4ODAsIDB4MDAsIDB4MjAsIDB4MWQsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YzAsIDB4MDAsIDB4MjAsIDB4MTIsCisJMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhjNCwgMHgwMCwgMHhhMCwgMHgxYywgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDgwLCAweDAwLCAweDAzLCAweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLAorCTB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODcsIDB4OTgsIDB4MDEsIDB4MDAsCisJMHhlZSwgMHg5OCwgMHg5ZiwgMHg0MSwgMHgyNCwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKKwkweDhjLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDhjLCAweGQwLCAweDAxLCAweDAwLAorCTB4ZWYsIDB4OTgsIDB4MDAsIDB4NDEsIDB4MjQsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4ZCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgzZCwgMHg5OSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLAorCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTgsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHhmMSwgMHg5OCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhiZiwgMHg5NSwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGEyLCAweDA4LCAweDgwLCAweDMyLCAweDAxLCAweDAwLAorCTB4ZjgsIDB4OTgsIDB4YTIsIDB4NDAsIDB4OTUsIDB4NmMsIDB4MDAsIDB4MDAsIDB4Y2MsIDB4OTUsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MiwgMHgwMCwgMHhhNiwgMHgwNCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweGEwLCAweDk4LCAweDJmLCAweDQwLCAweDExLCAweGIwLCAweDAxLCAweDAwLCAweGUzLCAweDg5LCAweDAwLCAweDQxLAorCTB4ODksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OWYsIDB4ZjgsIDB4M2UsIDB4ZWMsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg5ZiwgMHgxMiwgMHhlMCwgMHhlZCwgMHgwMCwgMHgwMCwgMHhjOCwgMHgwMCwgMHgyMCwgMHhhYiwKKwkweGUxLCAweGIxLCAweDAxLCAweDAwLCAweGNjLCAweDAwLCAweGEwLCAweDFmLCAweGUwLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDEsIDB4OTksIDB4YTMsIDB4NWYsIDB4ZTcsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCisJMHhlNywgMHhjMSwgMHgwMSwgMHgwMCwgMHhhNiwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDE1LCAweDk5LCAweDIyLCAweGYyLCAweDg2LCAweDMwLCAweDAwLCAweDAwLCAweDAzLCAweDAwLCAweDAwLCAweDQzLAorCTB4ODQsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ODAsIDB4Y2MsIDB4MDEsIDB4MDAsCisJMHhiOCwgMHgwMCwgMHgyZCwgMHg0MiwgMHg4MCwgMHhkMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2MiwgMHg0MCwKKwkweDg2LCAweGMwLCAweDAxLCAweDAwLCAweDA5LCAweDk5LCAweDFmLCAweDQzLCAweDgwLCAweDMyLCAweDAwLCAweDAwLAorCTB4MGEsIDB4OTksIDB4YTIsIDB4NDAsIDB4ODcsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjIsIDB4NDEsCisJMHg4NywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwZSwgMHg5OSwgMHg5ZiwgMHg0MCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDg1LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4ODQsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4ODAsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmMiwgMHg4OCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg0NCwKKwkweDg0LCAweGY0LCAweDAxLCAweDAwLCAweGI4LCAweDAwLCAweDJlLCAweDQyLCAweDgwLCAweGQwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4NjIsIDB4NDAsIDB4ODgsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MTQsIDB4OTksIDB4MWYsIDB4NDQsCisJMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgxOCwgMHg5OSwgMHhhMiwgMHg0MCwgMHg4OSwgMHg2YywgMHgwMCwgMHgwMCwKKwkweDE4LCAweDk5LCAweDYyLCAweDQxLCAweDg5LCAweGIwLCAweDAwLCAweDAwLCAweDAzLCAweDAwLCAweDYyLCAweDQxLAorCTB4ODYsIDB4ZTQsIDB4MDEsIDB4MDAsIDB4YjgsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDUsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgwMSwgMHgwMCwgMHg2MiwgMHg0MSwgMHg4OCwgMHhlNCwgMHgwMSwgMHgwMCwgMHhhNCwgMHgwMCwgMHgyMCwgMHg0MCwKKwkweGU1LCAweGIxLCAweDAxLCAweDAwLCAweGEyLCAweDAwLCAweDIwLCAweDQwLCAweGU3LCAweGIxLCAweDAxLCAweDAwLAorCTB4YmMsIDB4MDAsIDB4MmUsIDB4NDMsIDB4ODcsIDB4ZjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsCisJMHg4NiwgMHhjMCwgMHgwMSwgMHgwMCwgMHgxZSwgMHg5OSwgMHgyMCwgMHg0MywgMHg4NywgMHg2YywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDgwLCAweDQzLCAweGU1LCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAxLCAweDAwLCAweDQzLAorCTB4ODAsIDB4Y2UsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTQsIDB4NDMsIDB4ZTQsIDB4MzEsIDB4MDEsIDB4MDAsCisJMHg0MCwgMHgwMSwgMHhlMiwgMHg0MCwgMHg4NywgMHg5OCwgMHgwMSwgMHgwMCwgMHg4OCwgMHgwMCwgMHgyZCwgMHg0NCwKKwkweDgxLCAweGIwLCAweDAxLCAweDAwLCAweDkwLCAweDAwLCAweDJkLCAweGYyLCAweDJlLCAweGIwLCAweDAxLCAweDAwLAorCTB4OWMsIDB4MDAsIDB4MmQsIDB4ZjAsIDB4ODYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4OTAsIDB4MDAsIDB4MmQsIDB4ZjAsCisJMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHhiYSwgMHgwMCwgMHgyZCwgMHhmMCwgMHg5OCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDJiLCAweDk5LCAweGEyLCAweDEyLCAweDk4LCAweDZjLCAweDAwLCAweDAwLCAweGJjLCAweDAwLCAweDJkLCAweGYyLAorCTB4OTgsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MmIsIDB4OTksIDB4YTAsIDB4ZjIsIDB4OTgsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgxNywgMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHg5YywgMHgwMCwgMHgyMCwgMHg0MSwKKwkweGUwLCAweGIxLCAweDAxLCAweDAwLCAweGI0LCAweDAwLCAweDJkLCAweDEyLCAweDg2LCAweGQwLCAweDAxLCAweDAwLAorCTB4MmUsIDB4OTksIDB4YTMsIDB4NDEsIDB4ZTAsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MmYsIDB4OTksIDB4MDAsIDB4ZjAsCisJMHg4NCwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4NCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDgwLCAweDAwLCAweDJkLCAweDQzLCAweDg0LCAweGQwLCAweDAxLCAweDAwLCAweDMyLCAweDk5LCAweDlmLCAweDQyLAorCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODUsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgzNCwgMHg5OSwgMHhhMywgMHg0MiwgMHgxNCwgMHg2YywgMHgwMCwgMHgwMCwgMHgzNSwgMHg5OSwgMHgwMCwgMHgwYSwKKwkweDBjLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLCAweDBjLCAweGIwLCAweDAxLCAweDAwLAorCTB4MzcsIDB4OTksIDB4YTAsIDB4MTcsIDB4MGMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MTcsCisJMHgwYywgMHhiMCwgMHgwMSwgMHgwMCwgMHgzYywgMHg5OSwgMHgyMiwgMHg0MCwgMHgwZCwgMHg2YywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweGEwLCAweDBhLCAweDBjLCAweGVjLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweGYwLAorCTB4ODIsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4M2MsIDB4OTksIDB4YTAsIDB4NDEsIDB4MGMsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHhhMiwgMHhmMCwgMHg4MCwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwKKwkweDgxLCAweGIwLCAweDAxLCAweDAwLCAweGQwLCAweDk1LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4MDQsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsCisJMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDYwLCAweDQxLCAweDg3LCAweDk0LCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDEwLAorCTB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0OCwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0OSwKKwkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweGUwLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4MTAsCisJMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOCwgMHg1ZCwgMHgwNSwgMHg5MCwgMHgwMCwgMHgwMCwKKwkweDQ4LCAweDk5LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDJlLCAweDRiLAorCTB4MTksIDB4OTAsIDB4MDEsIDB4MDAsIDB4MDUsIDB4MDAsIDB4MmEsIDB4MGMsIDB4ZTQsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg4MCwgMHgwNCwgMHhlNiwgMHhiMSwgMHgwMSwgMHgwMCwgMHg1MiwgMHg5OSwgMHgyMiwgMHg0OSwKKwkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDQyLCAweDAwLCAweDAwLCAweDQwLCAweDg3LCAweDk4LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDksIDB4MWYsIDB4ODAsIDB4MDEsIDB4MDAsIDB4YWEsIDB4OTcsIDB4MDAsIDB4NDAsCisJMHg4ZCwgMHhiMCwgMHgwMCwgMHgwMCwgMHg1OCwgMHg5OSwgMHgyMiwgMHg0MCwgMHhhZiwgMHg2ZiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDE1LCAweDk2LCAweGIwLCAweDAxLCAweDAwLCAweDcyLCAweDk4LCAweDAwLCAweDA4LAorCTB4OTQsIDB4MzAsIDB4MDEsIDB4MDAsIDB4NTcsIDB4OTksIDB4MjIsIDB4NDAsIDB4OTcsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHhhYSwgMHg5NywgMHgwMCwgMHg0NiwgMHg4NywgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwKKwkweDg3LCAweGIwLCAweDAxLCAweDAwLCAweDU4LCAweDk5LCAweDQzLCAweDQ4LCAweDYxLCAweDMxLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MTAsIDB4MDAsIDB4MDgsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4NWQsIDB4OTksIDB4MjgsIDB4NDAsCisJMHg4NywgMHgzMCwgMHgwMCwgMHgwMCwgMHg1OSwgMHg5OSwgMHgyMiwgMHg0OCwgMHg3NywgMHg3ZCwgMHgwMCwgMHgwMCwKKwkweGFhLCAweDk3LCAweDFiLCAweDQ2LCAweDg3LCAweGIwLCAweDAwLCAweDAwLCAweDYwLCAweDk5LCAweDIyLCAweDVmLAorCTB4MTEsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjIsIDB4MTUsIDB4NjIsIDB4MzEsIDB4MDAsIDB4MDAsCisJMHg1ZSwgMHg5OSwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5YiwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDQ5LCAweGIxLCAweDAxLCAweDAwLAorCTB4MzAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4YTEsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg5MywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgxZiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweGIxLCAweDk5LCAweDAwLCAweDQ5LCAweDk2LCAweDMwLCAweDAxLCAweDAwLCAweDA3LCAweDAwLCAweDAwLCAweDQ5LAorCTB4MDYsIDB4ZTQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MzksIDB4MDAsIDB4MDMsIDB4MDYsIDB4YzgsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwNSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHhkMCwKKwkweGEwLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDkzLCAweGMwLCAweDAxLCAweDAwLAorCTB4NjUsIDB4OTksIDB4YTAsIDB4NTQsIDB4OTMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmUsIDB4MDUsCisJMHg5NywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg0OCwgMHgwMCwgMHg0MCwgMHg0OSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGUxLCAweGIxLCAweDAxLCAweDAwLCAweGMwLCAweDAxLCAweDAwLCAweGEyLAorCTB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4NmUsIDB4OTksIDB4YTIsIDB4NDEsIDB4OTcsIDB4NTAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg0OSwgMHhiMywgMHgwMSwgMHgwMCwgMHhiNiwgMHg5OSwgMHgwMCwgMHg0MCwKKwkweDQ5LCAweDMxLCAweDAxLCAweDAwLCAweDAwLCAweGI1LCAweDJlLCAweDA4LCAweDk3LCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NzQsIDB4OTksIDB4YTIsIDB4NDEsCisJMHg5NywgMHg1MCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg5NywgMHg5OCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDk3LCAweDJlLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NzgsIDB4OTksIDB4YTIsIDB4NDEsIDB4OTcsIDB4NTAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0OSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgxOCwgMHgyZSwgMHgwNSwKKwkweDk3LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4N2MsIDB4OTksIDB4YTIsIDB4NDEsIDB4OTcsIDB4NTAsIDB4MDAsIDB4MDAsIDB4NTcsIDB4OTUsIDB4MjAsIDB4NDAsCisJMHhlNywgMHhiMSwgMHgwMSwgMHgwMCwgMHgzMCwgMHg5NCwgMHgwMCwgMHg0MCwgMHg0NSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDY0LCAweDAwLCAweDAwLCAweDQwLCAweGU1LCAweDk5LCAweDAxLCAweDAwLCAweDU2LCAweDk1LCAweDIwLCAweDQwLAorCTB4ZTcsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YjgsIDB4OTQsIDB4MjAsIDB4NDEsIDB4ZTUsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHhiYSwgMHg5NCwgMHgyMCwgMHg0MSwgMHhlNSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg5OCwgMHg5NCwgMHgwMCwgMHg0MCwKKwkweDQ1LCAweDk5LCAweDAxLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDQwLCAweDk3LCAweDk4LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ODYsIDB4OTksIDB4YTIsIDB4NDEsCisJMHg5NywgMHg1MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg5NywgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDZmLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRiLAorCTB4NjgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4OGEsIDB4OTksIDB4ODUsIDB4NDEsIDB4OTcsIDB4NDAsIDB4MDAsIDB4MDAsCisJMHhjMywgMHg5OSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDM5LCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDM3LCAweGIzLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MzUsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHgzMywgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MSwgMHhiMywgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDNmLCAweGIzLCAweDAxLCAweDAwLCAweDNjLCAweDAwLCAweDAwLCAweDQwLAorCTB4MjksIDB4OWIsIDB4MDEsIDB4MDAsIDB4ZWUsIDB4MDUsIDB4MDAsIDB4NDAsIDB4MjUsIDB4OWIsIDB4MDEsIDB4MDAsCisJMHg0MiwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0YiwgMHg5YiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDJmLCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDJkLCAweGIzLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDcsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg0MywgMHhiMywgMHgwMSwgMHgwMCwgMHg2MCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgyYiwgMHg5YiwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDU0LCAweGVmLCAweDkzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDU1LAorCTB4ZjEsIDB4OTMsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4YTUsIDB4M2MsIDB4OGIsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgyYywgMHg1YiwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyYywKKwkweDQ1LCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDU5LCAweGIzLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NTcsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHgyNywgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg1MywgMHhiMywgMHgwMSwgMHgwMCwKKwkweGE3LCAweDk5LCAweGEyLCAweDUwLCAweGZkLCAweDdmLCAweDAwLCAweDAwLCAweGE3LCAweDk5LCAweGEyLCAweDUxLAorCTB4ZmQsIDB4N2YsIDB4MDAsIDB4MDAsIDB4YTgsIDB4OTksIDB4MDAsIDB4NDAsIDB4MWQsIDB4YjMsIDB4MDAsIDB4MDAsCisJMHg1MCwgMHg0NiwgMHgwMCwgMHg0MCwgMHgxZCwgMHg5YiwgMHgwMSwgMHgwMCwgMHgwMCwgMHhjMCwgMHgwMCwgMHhhNiwKKwkweDg4LCAweGIzLCAweDAxLCAweDAwLCAweGZmLCAweDNmLCAweDAwLCAweGE2LCAweDNhLCAweGIzLCAweDAxLCAweDAwLAorCTB4MDAsIDB4YzAsIDB4MDAsIDB4OWQsIDB4M2IsIDB4OWIsIDB4MDEsIDB4MDAsIDB4YjQsIDB4MDUsIDB4MDAsIDB4NDAsCisJMHgyMywgMHg5YiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0ZCwgMHhiMywgMHgwMSwgMHgwMCwKKwkweDA4LCAweDBhLCAweDAwLCAweGE2LCAweDE0LCAweGIzLCAweDAxLCAweDAwLCAweDAxLCAweDAxLCAweDAwLCAweDhhLAorCTB4MTUsIDB4OWIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4YTYsIDB4NTYsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg4MCwgMHg1ZSwgMHg1NywgMHhiNSwgMHgwMSwgMHgwMCwgMHgxOCwgMHgwMCwgMHgwMCwgMHg0YiwKKwkweDIwLCAweGU0LCAweDAxLCAweDAwLCAweDA2LCAweDAwLCAweDAwLCAweDRiLCAweDk2LCAweGU0LCAweDAxLCAweDAwLAorCTB4MDAsIDB4NDMsIDB4MDAsIDB4NGIsIDB4OTYsIDB4YzgsIDB4MDEsIDB4MDAsIDB4MTgsIDB4MDAsIDB4MDAsIDB4MTAsCisJMHgyMCwgMHhkYywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0YiwgMHgyMCwgMHg5NCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDk5LCAweDJlLCAweDBhLCAweDk3LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YjcsIDB4OTksIDB4YTIsIDB4NDEsIDB4OTcsIDB4NTAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMywgMHgwMCwgMHg0MCwgMHg5NywgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHhhOSwgMHgwMCwgMHg0MCwKKwkweDQ1LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4YmIsIDB4OTksIDB4YTIsIDB4NDEsIDB4OTcsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg5NywgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1NSwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDRiLCAweDYyLCAweGIxLCAweDAxLCAweDAwLCAweGJmLCAweDk5LCAweGE4LCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4YmYsIDB4OTksIDB4YTIsIDB4NDEsIDB4OTcsIDB4NTAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDg3LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDk3LCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGIsIDB4ODAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4YTYsCisJMHg4MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHhjNSwgMHg5OSwgMHg4NSwgMHg0MSwgMHg5NywgMHg0MCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDk3LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4OTcsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGIsIDB4OTAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMSwgMHgwMCwgMHgwMCwgMHhhNiwgMHg5MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHhjYSwgMHg5OSwgMHg4NSwgMHg0MSwKKwkweDk3LCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAorCTB4Y2UsIDB4OTksIDB4NDQsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsCisJMHg4MCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhmZiwgMHhmZiwgMHg5YywgMHg0YiwgMHg4MiwgMHg4OSwgMHgwMSwgMHgwMCwKKwkweGQxLCAweDk5LCAweDQ0LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRhLAorCTB4ODAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDEsIDB4MDAsIDB4OWMsIDB4YTYsIDB4ODIsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHhkNCwgMHg5OSwgMHg0NCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHg0YiwKKwkweDg0LCAweDg5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDljLCAweGMyLCAweDI0LCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGEsIDB4OTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4ODAsIDB4NGIsCisJMHg5MiwgMHg4OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YSwgMHg5MCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAxLCAweDAwLCAweDgwLCAweGE2LCAweDkyLCAweGIxLCAweDAxLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweDRiLAorCTB4OTQsIDB4ODksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4Y2EsIDB4OTQsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIwLCAweDAxLCAweDAwLCAweGRmLCAweDk5LCAweDgwLCAweGE1LCAweDgwLCAweDMyLCAweDAwLCAweDAwLAorCTB4ZTAsIDB4OTksIDB4MDAsIDB4YTUsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCisJMHg4MSwgMHhjMCwgMHgwMSwgMHgwMCwgMHhlMSwgMHg5OSwgMHg4MCwgMHhhNSwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDgwLCAweDAxLCAweDAwLCAweDQwLCAweDgzLCAweDk4LCAweDAxLCAweDAwLCAweGVhLCAweDk5LCAweDIwLCAweDRmLAorCTB4ODEsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ODMsIDB4OTgsIDB4MDEsIDB4MDAsCisJMHhlYSwgMHg5OSwgMHgyMCwgMHg0YiwgMHg4MSwgMHg2YywgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgzLCAweDk4LCAweDAxLCAweDAwLCAweGVhLCAweDk5LCAweDIwLCAweDQ3LCAweDgxLCAweDZjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODMsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCisJMHg4MiwgMHhkYywgMHgwMSwgMHgwMCwgMHgwMywgMHg5MCwgMHgwMCwgMHg0MSwgMHgyMCwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDQ5LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDE0LCAweDJmLCAweDRjLAorCTB4ODMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHhlZSwgMHg5OSwgMHhhMiwgMHg0MSwgMHg4MywgMHg1MCwgMHgwMCwgMHgwMCwgMHg2NCwgMHgwMCwgMHgwMCwgMHhhNSwKKwkweDgwLCAweGM4LCAweDAxLCAweDAwLCAweGYxLCAweDk5LCAweGEyLCAweGE1LCAweDgwLCAweDZjLCAweDAwLCAweDAwLAorCTB4MjAsIDB4MDAsIDB4MDAsIDB4OTAsIDB4MjAsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWYsCisJMHgyMywgMHg5MSwgMHgwMSwgMHgwMCwgMHhmNCwgMHg5OSwgMHgxZiwgMHg5MSwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDMwLCAweDAwLCAweDAwLCAweDkwLCAweDIwLCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVmLAorCTB4MjMsIDB4OTEsIDB4MDEsIDB4MDAsIDB4ZjcsIDB4OTksIDB4MWYsIDB4OTEsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHg3MCwgMHgwMCwgMHgwMCwgMHg5MCwgMHgyMCwgMHhhOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1ZiwKKwkweDIzLCAweDkxLCAweDAxLCAweDAwLCAweGZhLCAweDk5LCAweDFmLCAweDkxLCAweDgwLCAweDMyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NWYsIDB4MjMsIDB4OTEsIDB4MDEsIDB4MDAsIDB4ZmMsIDB4OTksIDB4MWYsIDB4OTEsCisJMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHg0MCwgMHg2OCwgMHgwMCwgMHg5MCwgMHgyMCwgMHhhOSwgMHgwMSwgMHgwMCwKKwkweGUwLCAweDAwLCAweDAwLCAweDQwLCAweDYxLCAweDk5LCAweDAxLCAweDAwLCAweDIxLCAweDAwLCAweDAwLCAweDQwLAorCTB4NjEsIDB4OTksIDB4MDEsIDB4MDAsIDB4MjIsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjEsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgyMywgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgyNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDYxLCAweDk5LCAweDAxLCAweDAwLCAweDI1LCAweDAwLCAweDAwLCAweDQwLCAweDYxLCAweDk5LCAweDAxLCAweDAwLAorCTB4MjYsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjEsIDB4OTksIDB4MDEsIDB4MDAsIDB4MjcsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwgMHhjMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweGQwLCAweDE0LCAweDAwLCAweDQwLCAweDQ1LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZTEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgzMCwgMHgwMywgMHgwMCwgMHg0MCwgMHg4NSwgMHgzMCwgMHgwMSwgMHgwMCwgMHhkMCwgMHgxNCwgMHgwMCwgMHg0MCwKKwkweDQ1LCAweDk5LCAweDAxLCAweDAwLCAweDAyLCAweDAxLCAweDAwLCAweGE2LCAweDgwLCAweGIwLCAweDAxLCAweDAwLAorCTB4MDQsIDB4MDMsIDB4MDAsIDB4NDAsIDB4ODAsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDYsIDB4MDUsIDB4MDAsIDB4YTYsCisJMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwOCwgMHgwNywgMHgwMCwgMHg0MSwgMHg4MiwgMHg5OCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAorCTB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODUsIDB4OTgsIDB4MDEsIDB4MDAsCisJMHgzMCwgMHgwMywgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgzOSwgMHgwMywgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGQ4LCAweDE0LCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLAorCTB4ZmYsIDB4MDIsIDB4YTIsIDB4ZjgsIDB4ODAsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4MjIsIDB4ZjAsCisJMHg4MiwgMHg2YywgMHgwMCwgMHgwMCwgMHhmZiwgMHgwMiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweGQwLCAweDE0LCAweDJlLCAweDQwLCAweDQ5LCAweGIxLCAweDAxLCAweDAwLCAweDA1LCAweDAwLCAweDAwLCAweDQwLAorCTB4YTMsIDB4OWIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4YzEsIDB4YjMsIDB4MDEsIDB4MDAsCisJMHgwOCwgMHgwMCwgMHgwMCwgMHhkZCwgMHg4MSwgMHhmNCwgMHgwMSwgMHgwMCwgMHgxZSwgMHg5YSwgMHgwMCwgMHg0MCwKKwkweDEwLCAweGM5LCAweDAwLCAweDAwLCAweDI0LCAweDlhLCAweDAwLCAweDA1LCAweDgxLCAweGIwLCAweDAwLCAweDAwLAorCTB4NTUsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MmMsIDB4OWEsIDB4MDAsIDB4MDUsCisJMHg4MSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg1NSwgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDMxLCAweDlhLCAweDAwLCAweDQ0LCAweGE1LCAweGIzLCAweDAwLCAweDAwLCAweDMzLCAweDlhLCAweDAwLCAweDQ0LAorCTB4YTUsIDB4YjMsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4NDAsIDB4YTQsIDB4ZTcsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHg4MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHhjMSwKKwkweGYwLCAweDg5LCAweDAxLCAweDAwLCAweDI5LCAweDlhLCAweDIyLCAweDQxLCAweDgxLCAweDUwLCAweDAwLCAweDAwLAorCTB4MjUsIDB4OWEsIDB4MDAsIDB4NDEsIDB4YzEsIDB4YzMsIDB4MDAsIDB4MDAsIDB4YjEsIDB4MDIsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhjNSwgMHgwMiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDVhLCAweDAxLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDQwLAorCTB4YTQsIDB4ZTcsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4OTEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHhmZiwgMHhmZiwgMHgwMCwgMHhjOSwgMHhmMCwgMHg4OSwgMHgwMSwgMHgwMCwgMHgyOSwgMHg5YSwgMHgyMiwgMHg0MSwKKwkweDgxLCAweDUwLCAweDAwLCAweDAwLCAweDJkLCAweDlhLCAweDAwLCAweDQxLCAweGMxLCAweGMzLCAweDAwLCAweDAwLAorCTB4ZmYsIDB4ZmYsIDB4MDAsIDB4ZGUsIDB4ODUsIDB4ODksIDB4MDEsIDB4MDAsIDB4MjksIDB4OWEsIDB4MDAsIDB4YzIsCisJMHhlMCwgMHhiMSwgMHgwMCwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHhkZSwgMHg5NSwgMHg4OSwgMHgwMSwgMHgwMCwKKwkweDI5LCAweDlhLCAweDAwLCAweGNhLCAweGUwLCAweGIxLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweGNiLAorCTB4ODEsIDB4YzgsIDB4MDEsIDB4MDAsIDB4NmEsIDB4ODQsIDB4MDAsIDB4NDAsIDB4ZjIsIDB4OTMsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweGI2LCAweDlmLCAweDAwLCAweDg4LCAweDlhLCAweGIwLCAweDAwLCAweDAwLCAweGI2LCAweDlmLCAweDAwLCAweDg4LAorCTB4OWEsIDB4YjAsIDB4MDAsIDB4MDAsIDB4YjYsIDB4OWYsIDB4MDAsIDB4ODgsIDB4OWEsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHhiNiwgMHg5ZiwgMHgwMCwgMHg4OCwgMHg5YSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhiNiwgMHg5ZiwgMHgwMCwgMHg4OCwKKwkweDlhLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDg4LCAweDlhLCAweGIwLCAweDAxLCAweDAwLAorCTB4YjYsIDB4OWYsIDB4NDEsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4YjksIDB4OWYsIDB4MjIsIDB4NDAsCisJMHg3YiwgMHg2ZiwgMHgwMCwgMHgwMCwgMHhiNiwgMHg5ZiwgMHgxOSwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDE5LCAweDQxLCAweDdiLCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE0LAorCTB4YzQsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTEsIDB4YzYsIDB4YjMsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgyZiwgMHhhMiwgMHhjOCwgMHhiMywgMHgwMSwgMHgwMCwgMHgwOCwgMHgxNCwgMHgwMCwgMHg0MCwKKwkweDQ5LCAweDk5LCAweDAxLCAweDAwLCAweGIwLCAweDlmLCAweDAwLCAweDRkLCAweDlhLCAweGNjLCAweDAxLCAweDAwLAorCTB4YzIsIDB4OWYsIDB4MjYsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGMsCisJMHg0OSwgMHhjMSwgMHgwMSwgMHgwMCwgMHhjMCwgMHg5ZiwgMHhhMiwgMHg0MSwgMHg5YiwgMHg1MCwgMHgwMCwgMHgwMCwKKwkweGM2LCAweDlmLCAweDgwLCAweDgwLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUyLCAweDQ5LAorCTB4ZmQsIDB4OTMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGEsIDB4ZmQsIDB4OTMsIDB4MDEsIDB4MDAsCisJMHhjOSwgMHg5ZiwgMHgwMCwgMHg0MiwgMHhjZCwgMHg5MywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MSwgMHg0YSwKKwkweGZkLCAweDkzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ5LCAweGZkLCAweDkzLCAweDAxLCAweDAwLAorCTB4YzksIDB4OWYsIDB4MDAsIDB4NDMsIDB4Y2IsIDB4OTMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHhkOSwgMHg5ZiwgMHgwMCwgMHg0MCwgMHgxOSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGYwLCAweDlhLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LAorCTB4NDksIDB4ZDEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjAsIDB4ODAsIDB4YjIsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg0MSwgMHg0ZCwgMHg4MCwgMHhiMiwgMHgwMSwgMHgwMCwgMHhkMSwgMHg5ZiwgMHgwMCwgMHg0MCwKKwkweDE5LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDRjLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4NDksIDB4ZDEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsCisJMHg5YSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZCwgMHgxMCwgMHhiMSwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGUyLCAweDQ5LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGUzLAorCTB4NDMsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTQsIDB4NDUsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg3YiwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0OCwgMHg0ZiwKKwkweDQwLCAweGIxLCAweDAxLCAweDAwLCAweGQ5LCAweDlmLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwgMHg4MSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDZhLCAweDg0LCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MTksIDB4OWEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgzNSwgMHg5YSwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTgsCisJMHgxMCwgMHhiMSwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwl9LAorfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9zbGljb3NzL2dicmN2dWNvZGUuaCBiL2RyaXZlcnMvc3RhZ2luZy9zbGljb3NzL2dicmN2dWNvZGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZmE1YTRjCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3NsaWNvc3MvZ2JyY3Z1Y29kZS5oCkBAIC0wLDAgKzEsMjM4IEBACisvKgorICogQ29weXJpZ2h0IChjKSAxOTk3LTIwMDIgQWxhY3JpdGVjaCwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkCisgKiAgICB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBTEFDUklURUNILCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQUxBQ1JJVEVDSCwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCisgKiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqCisgKiBUaGUgdmlld3MgYW5kIGNvbmNsdXNpb25zIGNvbnRhaW5lZCBpbiB0aGUgc29mdHdhcmUgYW5kIGRvY3VtZW50YXRpb24KKyAqIGFyZSB0aG9zZSBvZiB0aGUgYXV0aG9ycyBhbmQgc2hvdWxkIG5vdCBiZSBpbnRlcnByZXRlZCBhcyByZXByZXNlbnRpbmcKKyAqIG9mZmljaWFsIHBvbGljaWVzLCBlaXRoZXIgZXhwcmVzc2VkIG9yIGltcGxpZWQsIG9mIEFsYWNyaXRlY2gsIEluYy4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjZGVmaW5lIEdCX1JDVlVDT0RFX1ZFUlNfU1RSSU5HCSIxLjIiCisjZGVmaW5lIEdCX1JDVlVDT0RFX1ZFUlNfREFURSAgCSIyMDA2LzAzLzI3IDE1OjEyOjE1IgorCitzdGF0aWMgdTMyIEdCUmN2VUNvZGVMZW4gPSA1MTI7CisKK3N0YXRpYyB1OCBHQlJjdlVDb2RlWzI1NjBdID0KK3sKKzB4NDcsIDB4NzUsIDB4MDEsIDB4MDAsIDB4MDQsIDB4YTAsIDB4MTMsIDB4MDEsIDB4MDAsIDB4MWMsIDB4YjcsIDB4NWIsIDB4MDksCisweDMwLCAweDAwLCAweGI2LCAweDVmLCAweDAxLCAweDAwLCAweDFjLCAweDAwLCAweDAwLCAweDAwLCAweDIwLCAweDE4LCAweDNiLAorMHg3OCwgMHgzYSwgMHgwMCwgMHgxYywgMHhhMiwgMHg3NywgMHgwMSwgMHgwMCwgMHgxYywgMHgwNywgMHgxZCwgMHgwMSwgMHg3MCwKKzB4MTgsIDB4YjMsIDB4N2IsIDB4YTksIDB4YWEsIDB4MWUsIDB4YjQsIDB4N2IsIDB4MDEsIDB4MGMsIDB4MWMsIDB4YjUsIDB4N2IsCisweDFkLCAweDA2LCAweDFjLCAweDAwLCAweDAwLCAweDQwLCAweDY0LCAweDA4LCAweDBjLCAweDMxLCAweDU2LCAweDcwLCAweDA0LAorMHgwYywgMHgzMSwgMHg1NiwgMHg4MCwgMHgwNCwgMHgwYywgMHgzMSwgMHg0YSwgMHg5MCwgMHgwNCwgMHgwYywgMHgzMSwgMHg0NiwKKzB4YTAsIDB4MDAsIDB4MDksIDB4MjUsIDB4NTEsIDB4YzAsIDB4MDQsIDB4MGMsIDB4MzEsIDB4NGUsIDB4YjAsIDB4MDAsIDB4ZTksCisweDI0LCAweDUxLCAweGMwLCAweDA0LCAweGNjLCAweGIzLCAweDAwLCAweDFjLCAweDFjLCAweGViLCAweDJkLCAweDAxLCAweDAwLAorMHgxYywgMHgwNiwgMHg1NiwgMHg0MiwgMHhkNCwgMHgwOCwgMHgwNywgMHg5ZCwgMHgwMCwgMHgwMCwgMHgxYywgMHg3YiwgMHhiNywKKzB4MDIsIDB4MDAsIDB4MTAsIDB4YTAsIDB4MGYsIDB4NDEsIDB4NTQsIDB4MDksIDB4MDYsIDB4NTYsIDB4NWEsIDB4YzAsIDB4MDQsCisweGEwLCAweDMwLCAweDZjLCAweDAzLCAweDAwLCAweGFjLCAweDMwLCAweDZkLCAweDAzLCAweDAwLCAweGNkLCAweDAzLCAweDNhLAorMHgwMCwgMHgxYywgMHg3YiwgMHhiNywgMHgwMiwgMHgwMCwgMHgxYywgMHg2MCwgMHg4ZSwgMHg0MSwgMHg1NCwgMHgwOSwgMHgyOSwKKzB4MjUsIDB4NmQsIDB4MDMsIDB4MDAsIDB4ODAsIDB4OGUsIDB4NDEsIDB4NTQsIDB4MDksIDB4OGMsIDB4MzAsIDB4OGQsIDB4MDAsCisweDA0LCAweDQ3LCAweDFjLCAweDAxLCAweDAwLCAweDFjLCAweGEwLCAweDBmLCAweDQxLCAweDU0LCAweDA5LCAweDAwLCAweDAwLAorMHg2MCwgMHgwMCwgMHgwNCwgMHg0NywgMHgxYywgMHg2MSwgMHhjMCwgMHgwNCwgMHg0NywgMHgxYywgMHg2ZCwgMHgwMywgMHgwMCwKKzB4NmMsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MWMsIDB4NGQsIDB4MzQsIDB4MDIsIDB4MDAsIDB4MWMsIDB4N2IsIDB4YjcsIDB4MDIsCisweDAwLCAweDFjLCAweGEwLCAweDBmLCAweDQxLCAweDU0LCAweDA5LCAweGM4LCAweDgzLCAweDM3LCAweDAwLCAweDFjLCAweDgwLAorMHgwMSwgMHgwMCwgMHgwMCwgMHgxYywgMHgwMCwgMHgwMCwgMHg2MCwgMHgwMCwgMHgwNCwgMHhhMCwgMHgwZiwgMHg0MCwgMHg1NCwKKzB4MDksIDB4MDAsIDB4MDAsIDB4NmMsIDB4YzMsIDB4MDQsIDB4N2IsIDB4ZmIsIDB4ZjIsIDB4MDAsIDB4MWMsIDB4Y2MsIDB4MzMsCisweDBkLCAweDAwLCAweDFjLCAweGI0LCAweDdiLCAweGZkLCAweDAzLCAweDFjLCAweDgwLCAweDBlLCAweDQwLCAweDU0LCAweDA5LAorMHhlMCwgMHhmYiwgMHgwNSwgMHgwMCwgMHgxYywgMHgwMCwgMHgwMCwgMHhhMCwgMHgwMywgMHgwMCwgMHhiMywgMHgwZiwgMHg0MSwKKzB4NTQsIDB4MDksIDB4MDAsIDB4MDAsIDB4ZTgsIDB4NzAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ZTgsIDB4ODAsIDB4MDQsIDB4MDAsCisweDAwLCAweGEwLCAweDkzLCAweDAwLCAweDYxLCAweDc2LCAweGExLCAweGMzLCAweDA0LCAweGMwLCAweDhkLCAweDQxLCAweDU0LAorMHgwOSwgMHhlMCwgMHg3YiwgMHgwMCwgMHhjMCwgMHgxZiwgMHhhMCwgMHhmZCwgMHhjMSwgMHgwMSwgMHgwMCwgMHhjYywgMHgzMywKKzB4MDUsIDB4MDAsIDB4MWMsIDB4ZDQsIDB4MDMsIDB4MDAsIDB4M2MsIDB4MWMsIDB4ZDQsIDB4ZDMsIDB4MWIsIDB4MDAsIDB4MWMsCisweGMwLCAweGQzLCAweDUyLCAweDAwLCAweDFjLCAweDAwLCAweDAwLCAweDc0LCAweDEzLCAweDA0LCAweDhlLCAweDhlLCAweDQyLAorMHg1NCwgMHgwOSwgMHg1YiwgMHg4MCwgMHg3NiwgMHgxMywgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYywgMHgwMCwKKzB4MDAsIDB4OTAsIDB4MDEsIDB4MDAsIDB4YTAsIDB4MGYsIDB4NDEsIDB4NTQsIDB4MDksIDB4YTAsIDB4MGYsIDB4NDEsIDB4NTQsCisweDA5LCAweGMwLCAweDAzLCAweGZjLCAweDdmLCAweDFjLCAweGEwLCAweDAxLCAweDljLCAweDAxLCAweDAwLCAweDAwLCAweDAwLAorMHhhMCwgMHgwMSwgMHgwMCwgMHhhMCwgMHgwZiwgMHg0MSwgMHg1NCwgMHgwOSwgMHhjMCwgMHgwMywgMHhmYywgMHgwMywgMHgxYywKKzB4ZjUsIDB4NzcsIDB4MDEsIDB4MDAsIDB4MWMsIDB4MjYsIDB4N2EsIDB4ZjYsIDB4MDUsIDB4MWMsIDB4YTAsIDB4MGYsIDB4NDEsCisweDU0LCAweDA5LCAweGIzLCAweDBmLCAweDQxLCAweDU0LCAweDA5LCAweGI1LCAweDAyLCAweDAyLCAweDAwLCAweDFjLCAweGEwLAorMHgwZiwgMHg0MSwgMHg1NCwgMHgwOSwgMHg3YSwgMHgwNiwgMHgwMiwgMHgwMCwgMHgxYywgMHhiNSwgMHgwMiwgMHgwMiwgMHgwMCwKKzB4MWMsIDB4NTMsIDB4MGYsIDB4NDIsIDB4NTQsIDB4MDksIDB4YWYsIDB4MDMsIDB4MDEsIDB4MDAsIDB4MWMsIDB4N2EsIDB4MGUsCisweDQyLCAweDU0LCAweDA5LCAweGI1LCAweDAyLCAweDAyLCAweDAwLCAweDFjLCAweDAwLCAweDAwLCAweDAyLCAweDAwLCAweDFjLAorMHhhMCwgMHgzZCwgMHhhNiwgMHgxMSwgMHgwNCwgMHgwMCwgMHgwMCwgMHhhOCwgMHgxMSwgMHgwNCwgMHhkNCwgMHhkMywgMHg1MiwKKzB4MDAsIDB4MWMsIDB4YjUsIDB4M2UsIDB4YWUsIDB4MDEsIDB4MDAsIDB4MjAsIDB4ZmIsIDB4ZmQsIDB4ZmYsIDB4MWYsIDB4ODAsCisweDJjLCAweDg0LCAweDAzLCAweDAwLCAweGI5LCAweDNhLCAweDlhLCAweDAxLCAweDAwLCAweDc1LCAweDNiLCAweDAyLCAweDAwLAorMHgxYywgMHhhNywgMHgxYywgMHgwMSwgMHgwMCwgMHgxMCwgMHhkYiwgMHg4MywgMHgxNiwgMHgwMCwgMHgxYywgMHhjNywgMHgxZCwKKzB4MWQsIDB4YzEsIDB4MDQsIDB4YjksIDB4M2IsIDB4ODksIDB4YzEsIDB4MDQsIDB4OGIsIDB4MmMsIDB4MDEsIDB4MDAsIDB4MWMsCisweDZiLCAweDJjLCAweDMxLCAweGMxLCAweDA0LCAweDAwLCAweDAwLCAweDc0LCAweDExLCAweDAwLCAweGNiLCAweDJjLCAweDc1LAorMHhjMSwgMHgwNCwgMHhhMCwgMHgwZiwgMHg0MSwgMHg1NCwgMHgwOSwgMHhhMCwgMHgwZiwgMHg0MSwgMHg1NCwgMHgwOSwgMHg1NCwKKzB4ZDAsIDB4MDIsIDB4MDAsIDB4MWMsIDB4NDksIDB4MjUsIDB4YWQsIDB4MDEsIDB4MDAsIDB4YWIsIDB4MmMsIDB4N2QsIDB4YzEsCisweDA0LCAweGE3LCAweDFkLCAweDZkLCAweDAzLCAweDAwLCAweGNjLCAweDMzLCAweDA5LCAweDAwLCAweDFjLCAweGViLCAweDJkLAorMHgwMSwgMHgwMCwgMHgxYywgMHhlYSwgMHgyOSwgMHgwMSwgMHgwMCwgMHgxYywgMHhhMCwgMHgwZiwgMHg0MSwgMHg1NCwgMHgwOSwKKzB4YWUsIDB4MGYsIDB4NDEsIDB4NTQsIDB4MDksIDB4YTAsIDB4MGYsIDB4NDEsIDB4NTQsIDB4MDksIDB4ZDQsIDB4MDcsIDB4ZmMsCisweDAzLCAweDFjLCAweDk5LCAweDNhLCAweDAyLCAweDAwLCAweDFjLCAweGJiLCAweDM4LCAweDAyLCAweDAwLCAweDFjLCAweDAwLAorMHgzOCwgMHgwMCwgMHgwMCwgMHgxYywgMHgwMCwgMHgwMCwgMHhmOCwgMHgwMSwgMHgwNCwgMHhkYiwgMHgzYiwgMHg3ZSwgMHgwMCwKKzB4MWMsIDB4YzcsIDB4MWQsIDB4MDEsIDB4MDAsIDB4MWMsIDB4MjYsIDB4N2EsIDB4MGEsIDB4MDYsIDB4MWMsIDB4MjcsIDB4MWQsCisweDAxLCAweDAwLCAweDFjLCAweGIzLCAweDBmLCAweDQxLCAweDU0LCAweDA5LCAweDdhLCAweDBlLCAweDQyLCAweDU0LCAweDA5LAorMHg1MywgMHgwZiwgMHg0MiwgMHg1NCwgMHgwOSwgMHg3YSwgMHgwZSwgMHg0MiwgMHg1NCwgMHgwOSwgMHg1MywgMHgwZiwgMHg0MiwKKzB4NTQsIDB4MDksIDB4N2EsIDB4MGUsIDB4NDIsIDB4NTQsIDB4MDksIDB4NTMsIDB4MGYsIDB4NDIsIDB4NTQsIDB4MDksIDB4YTAsCisweDBmLCAweDQxLCAweDU0LCAweDA5LCAweDdhLCAweDA2LCAweDAyLCAweDAwLCAweDFjLCAweDUzLCAweDBmLCAweDQyLCAweDU0LAorMHgwOSwgMHhhZiwgMHgwMywgMHgwMSwgMHgwMCwgMHgxYywgMHg3YSwgMHgwZSwgMHg0MiwgMHg1NCwgMHgwOSwgMHg1MywgMHgwZiwKKzB4NDIsIDB4NTQsIDB4MDksIDB4N2EsIDB4MGUsIDB4NDIsIDB4NTQsIDB4MDksIDB4NTMsIDB4MGYsIDB4NDIsIDB4NTQsIDB4MDksCisweDdhLCAweDBlLCAweDQyLCAweDU0LCAweDA5LCAweDUzLCAweDBmLCAweDQyLCAweDU0LCAweDA5LCAweDdhLCAweDBlLCAweDQyLAorMHg1NCwgMHgwOSwgMHgwMCwgMHgzZCwgMHgwMiwgMHgwMCwgMHgxYywgMHgwMCwgMHgwMCwgMHg1NCwgMHgxMiwgMHgwMCwgMHhjYiwKKzB4MmMsIDB4MDEsIDB4MDAsIDB4MWMsIDB4NzUsIDB4M2IsIDB4MDIsIDB4MDAsIDB4MWMsIDB4YTcsIDB4MWMsIDB4MDEsIDB4MDAsCisweDEwLCAweGE2LCAweDdiLCAweGYxLCAweDA1LCAweDFjLCAweDAwLCAweDAwLCAweDg4LCAweGMyLCAweDA0LCAweGE2LCAweDdiLAorMHhmMSwgMHgwNSwgMHgxYywgMHgwMCwgMHgwMCwgMHhhMCwgMHhjMiwgMHgwNCwgMHhjYiwgMHgyZiwgMHgwNSwgMHgwMCwgMHgxYywKKzB4NjAsIDB4MmMsIDB4MDAsIDB4MDAsIDB4MWMsIDB4YzcsIDB4MWMsIDB4ZTEsIDB4MDIsIDB4MDAsIDB4NTMsIDB4MGYsIDB4NDIsCisweDU0LCAweDA5LCAweGMwLCAweDgzLCAweGYxLCAweDMyLCAweDFjLCAweDAwLCAweDAwLCAweDVjLCAweDAyLCAweDA0LCAweDQ2LAorMHg3YSwgMHhkYSwgMHgwNSwgMHgxYywgMHg3YSwgMHgwZSwgMHg0MiwgMHg1NCwgMHgwOSwgMHhjMCwgMHg4MywgMHhmMSwgMHgzMiwKKzB4MWMsIDB4MDAsIDB4MDAsIDB4NjQsIDB4MDIsIDB4MDQsIDB4NDAsIDB4ZmEsIDB4MTUsIDB4MDAsIDB4MWMsIDB4MDAsIDB4MDAsCisweGEwLCAweDAyLCAweDA0LCAweDQ2LCAweDdhLCAweGRhLCAweDA1LCAweDFjLCAweGEwLCAweDBmLCAweDQxLCAweDU0LCAweDA5LAorMHhhMCwgMHgwZiwgMHg0MSwgMHg1NCwgMHgwOSwgMHhhMCwgMHgwZiwgMHg0MSwgMHg1NCwgMHgwOSwgMHhhMCwgMHgwZiwgMHg0MSwKKzB4NTQsIDB4MDksIDB4YjMsIDB4N2IsIDB4MDEsIDB4YzAsIDB4MWYsIDB4NzQsIDB4MGUsIDB4NDAsIDB4NTQsIDB4MDksIDB4YzAsCisweDAzLCAweDljLCAweDAwLCAweDFjLCAweDgwLCAweDAwLCAweGYwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweGYwLCAweDAyLAorMHgwNCwgMHgwMCwgMHgwMCwgMHhjNCwgMHgxMiwgMHgwNSwgMHgwNywgMHgxZCwgMHgwMSwgMHgwMCwgMHgxYywgMHhkNCwgMHhkMywKKzB4MmIsIDB4MDAsIDB4MWMsIDB4ZDQsIDB4ZDMsIDB4NTIsIDB4MDAsIDB4MWMsIDB4ODAsIDB4NzYsIDB4OTUsIDB4MTMsIDB4MDQsCisweDAwLCAweDAwLCAweGY4LCAweDAyLCAweDAwLCAweGE2LCAweDdiLCAweGE5LCAweDAzLCAweDEwLCAweGM3LCAweDljLCAweDAwLAorMHgwMCwgMHgxYywgMHg4MCwgMHgyYywgMHgwMCwgMHgwMCwgMHgxYywgMHgwMCwgMHgwMCwgMHg3OCwgMHgwMiwgMHgwNCwgMHgwMCwKKzB4MDAsIDB4NmMsIDB4YzMsIDB4MDQsIDB4YWIsIDB4MmQsIDB4ZjEsIDB4MTIsIDB4MDUsIDB4MDcsIDB4MWQsIDB4Y2QsIDB4YzIsCisweDA0LCAweDhiLCAweDJkLCAweDAxLCAweDAwLCAweDFjLCAweDY5LCAweDI1LCAweDAxLCAweDAwLCAweDFjLCAweGE2LCAweDdiLAorMHhhOSwgMHgwMywgMHgxMCwgMHhjYiwgMHgyZiwgMHgwOSwgMHgwMCwgMHgxYywgMHg2MCwgMHgyYywgMHgwMCwgMHgwMCwgMHgxYywKKzB4MDAsIDB4MDAsIDB4NjAsIDB4MDMsIDB4MDAsIDB4NTMsIDB4MGYsIDB4NDIsIDB4NTQsIDB4MDksIDB4NDYsIDB4N2EsIDB4ZGEsCisweDA1LCAweDFjLCAweDdhLCAweDBlLCAweDQyLCAweDU0LCAweDA5LCAweDQwLCAweGZhLCAweDE1LCAweDAwLCAweDFjLCAweDAwLAorMHgwMCwgMHgyOCwgMHgwMywgMHgwNCwgMHg0NiwgMHg3YSwgMHhkYSwgMHgwNSwgMHgxYywgMHhiNSwgMHgwZiwgMHg0MSwgMHg1NCwKKzB4MDksIDB4YTAsIDB4MGYsIDB4NDEsIDB4NTQsIDB4MDksIDB4NzMsIDB4ZWMsIDB4NDIsIDB4MDMsIDB4MDQsIDB4NjAsIDB4MmMsCisweDAwLCAweDAwLCAweDFjLCAweDAwLCAweDAwLCAweDQwLCAweDAzLCAweDAwLCAweGM3LCAweDFjLCAweDAxLCAweDAwLCAweDFjLAorMHgwMCwgMHgwMCwgMHg0MCwgMHgxMywgMHgwNSwgMHgwNywgMHgxZCwgMHgwMSwgMHgwMCwgMHgxYywgMHhjMCwgMHhkNywgMHgyMiwKKzB4MDAsIDB4MWMsIDB4NzUsIDB4NTYsIDB4OTYsIDB4MTMsIDB4MDQsIDB4NjAsIDB4MmMsIDB4MDAsIDB4MDAsIDB4MWMsIDB4ZTcsCisweDFjLCAweDVkLCAweDAzLCAweDA0LCAweGU3LCAweDljLCAweDAwLCAweDAwLCAweDFjLCAweGE2LCAweDdiLCAweGE5LCAweDAzLAorMHgxMCwgMHg4MCwgMHgyYywgMHgwMCwgMHgwMCwgMHgxYywgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMywgMHgwNCwgMHgwMCwgMHgwMCwKKzB4NmMsIDB4YzMsIDB4MDQsIDB4YjksIDB4N2IsIDB4MDEsIDB4MDAsIDB4MWMsIDB4MDAsIDB4MDAsIDB4YTAsIDB4YzMsIDB4MDQsCisweGNiLCAweGFmLCAweGZjLCAweDA3LCAweDFjLCAweGNiLCAweDJmLCAweDAxLCAweDA0LCAweDFjLCAweGM3LCAweDlmLCAweDgwLAorMHgwMywgMHgxYywgMHgwMCwgMHgwMCwgMHhhMCwgMHhjMywgMHgwNCwgMHhjYiwgMHhhZiwgMHhmYywgMHgwNywgMHgxYywgMHhjYiwKKzB4MmYsIDB4MGQsIDB4MDQsIDB4MWMsIDB4YzcsIDB4OWYsIDB4ODAsIDB4MDMsIDB4MWMsIDB4MDAsIDB4MDAsIDB4YTAsIDB4YzMsCisweDA0LCAweGNiLCAweGFmLCAweDAwLCAweGY4LCAweDFkLCAweGNiLCAweDJmLCAweDAxLCAweDAwLCAweDFkLCAweDAwLCAweDAwLAorMHhhMCwgMHhjMywgMHgwNCwgMHgwMCwgMHgwMCwgMHhhMCwgMHgxMywgMHgwNSwgMHgwNywgMHgxZCwgMHgwMSwgMHgwMCwgMHgxYywKKzB4YzAsIDB4MWQsIDB4ZjAsIDB4ZDMsIDB4MDgsIDB4MjcsIDB4OWQsIDB4ZjgsIDB4MDMsIDB4MDAsIDB4YTAsIDB4ZWUsIDB4NTYsCisweGQ0LCAweDAwLCAweGZiLCAweDc1LCAweDE5LCAweDE0LCAweDA0LCAweDIwLCAweDdiLCAweDA2LCAweDAwLCAweDFjLCAweGMwLAorMHgxYywgMHgyYywgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjNCwgMHhkMywgMHgwOCwgMHgwMCwgMHgwMCwgMHgxMCwgMHhmNCwKKzB4MDAsIDB4YzAsIDB4ZWYsIDB4ZjIsIDB4MDAsIDB4MWMsIDB4MjAsIDB4MjUsIDB4NmMsIDB4MTQsIDB4MDQsIDB4NjAsIDB4YjcsCisweGU2LCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDFjLCAweDE1LCAweDAwLCAweGNjLCAweGIzLCAweGZjLCAweDAzLCAweDFjLAorMHhjYywgMHgzMywgMHgwNSwgMHgwMiwgMHgxYywgMHgwMCwgMHgwMCwgMHgxYywgMHhjNSwgMHgwNCwgMHg2MCwgMHhiNywgMHgxZSwKKzB4MDUsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MWMsIDB4MTUsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NmMsIDB4YzQsIDB4MDQsIDB4YzAsCisweDFkLCAweGFjLCAweGYzLCAweDA0LCAweDAwLCAweDAwLCAweDc4LCAweGM0LCAweDA0LCAweDA3LCAweDlkLCAweDAwLCAweDAwLAorMHgxYywgMHgxYiwgMHg3NCwgMHgwZCwgMHhmNCwgMHgwNCwgMHhhMCwgMHgwZiwgMHg0MSwgMHg1NCwgMHgwOSwgMHhlMCwgMHg3YiwKKzB4MDAsIDB4ZmMsIDB4MWYsIDB4MzksIDB4N2YsIDB4MDIsIDB4MDAsIDB4MWMsIDB4MDcsIDB4MWQsIDB4YjEsIDB4YzMsIDB4MDQsCisweGE2LCAweDdiLCAweGMxLCAweDAzLCAweDFjLCAweDAwLCAweDAwLCAweDc4LCAweGM0LCAweDA0LCAweGUwLCAweDFjLCAweDAwLAorMHgwMCwgMHgxYywgMHgwMCwgMHgwMCwgMHhiOCwgMHgwMywgMHgwNCwgMHhjYiwgMHhhZiwgMHgwMCwgMHhmOCwgMHgxZCwgMHhjYiwKKzB4MmYsIDB4MDEsIDB4MTAsIDB4MWQsIDB4MDAsIDB4MDAsIDB4YzAsIDB4YzMsIDB4MDQsIDB4MDAsIDB4MDAsIDB4YzAsIDB4MDMsCisweDA0LCAweGNiLCAweGFmLCAweDAwLCAweGY4LCAweDFkLCAweGNiLCAweDJmLCAweDAxLCAweDE4LCAweDFkLCAweGM3LCAweDlmLAorMHgwMCwgMHgwYiwgMHgxYywgMHgwMCwgMHgwMCwgMHhjMCwgMHhjMywgMHgwNCwgMHhmYiwgMHg3NSwgMHgwMSwgMHgwMCwgMHgxYywKKzB4MDcsIDB4MWQsIDB4MDEsIDB4MDAsIDB4MWMsIDB4Y2MsIDB4YjMsIDB4ZmMsIDB4MDMsIDB4MWMsIDB4Y2MsIDB4MzMsIDB4MDEsCisweDAyLCAweDFjLCAweDAwLCAweDAwLCAweGMwLCAweGMzLCAweDA0LCAweGEwLCAweDFjLCAweDAwLCAweDAwLCAweDFjLCAweGEwLAorMHhlZSwgMHhiNiwgMHgwMywgMHgwNCwgMHhjYiwgMHhhZiwgMHhmYywgMHgwNywgMHgxYywgMHhjYiwgMHgyZiwgMHgwOSwgMHgwNCwKKzB4MWMsIDB4ZmIsIDB4NzUsIDB4MDEsIDB4MDAsIDB4MWMsIDB4MDAsIDB4MDAsIDB4YzAsIDB4YzMsIDB4MDQsIDB4Y2MsIDB4YjMsCisweGZjLCAweDAzLCAweDFjLCAweGNjLCAweDMzLCAweDAxLCAweDAyLCAweDFjLCAweDAwLCAweDAwLCAweDFjLCAweGM1LCAweDA0LAorMHgwMCwgMHgwMCwgMHg4OCwgMHgzNCwgMHgwNSwgMHhjYywgMHhiMywgMHhmYywgMHgwMywgMHgxYywgMHhjYywgMHgzMywgMHgxNSwKKzB4MDIsIDB4MWMsIDB4NDcsIDB4OWQsIDB4NjQsIDB4YzQsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODgsIDB4NDQsIDB4MDAsIDB4ODAsCisweDFkLCAweDhjLCAweDU0LCAweDA0LCAweDg3LCAweDFkLCAweDlkLCAweDA0LCAweDAwLCAweGNlLCAweDc2LCAweDAxLCAweDAwLAorMHgxYywgMHhlZiwgMHg3NiwgMHhhZCwgMHhjNCwgMHgwNCwgMHhhNCwgMHg3NywgMHg5ZCwgMHgyNCwgMHgwOSwgMHhlNCwgMHg3NiwKKzB4MDEsIDB4MDAsIDB4MWMsIDB4YzQsIDB4NzYsIDB4MDEsIDB4MDAsIDB4MWMsIDB4MDAsIDB4MDAsIDB4YTgsIDB4NTQsIDB4MDQsCisweGQ3LCAweDc2LCAweDAxLCAweDUwLCAweDE4LCAweGY2LCAweDc2LCAweDAxLCAweDAwLCAweDFjLCAweDAwLCAweDAwLCAweDAwLAorMHgzMCwgMHgxOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHhjYywgMHgzMCwgMHg1MSwgMHhjNSwgMHgwNCwgMHhlYiwKKzB4MmQsIDB4MDEsIDB4MDAsIDB4MWMsIDB4ZWEsIDB4MjksIDB4MDEsIDB4MDAsIDB4MWMsIDB4YzAsIDB4NTksIDB4MDEsIDB4MDAsCisweDFjLCAweGY1LCAweDc3LCAweDM5LCAweGM1LCAweDA0LCAweGUwLCAweDMwLCAweGVjLCAweDA0LCAweDAwLCAweDAwLCAweDRjLAorMHhjMCwgMHgwNCwgMHgwMCwgMHgyMCwgMHg0YywgMHgwNCwgMHgwNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgwNCwgMHgwMCwKKzB4Y2MsIDB4YjMsIDB4ZmMsIDB4MDMsIDB4MWMsIDB4Y2MsIDB4MzMsIDB4MDksIDB4MDIsIDB4MWMsIDB4ZWIsIDB4MmQsIDB4YzUsCisweGM0LCAweDA0LCAweGNjLCAweGIzLCAweGZjLCAweDAzLCAweDFjLCAweGNjLCAweDMzLCAweDE5LCAweDAyLCAweDFjLCAweGViLAorMHgyZCwgMHhjNSwgMHhjNCwgMHgwNCwgMHhjYywgMHhiMywgMHhmYywgMHgwMywgMHgxYywgMHhjYywgMHgzMywgMHgwZCwgMHgwMiwKKzB4MWMsIDB4ZWIsIDB4MmQsIDB4YzUsIDB4YzQsIDB4MDQsIDB4Y2MsIDB4YjMsIDB4ZmMsIDB4MDMsIDB4MWMsIDB4Y2MsIDB4MzMsCisweDExLCAweDAyLCAweDFjLCAweGViLCAweDJkLCAweGM1LCAweGM0LCAweDA0LCAweDAwLCAweDdiLCAweDAwLCAweDgwLCAweDFjLAorMHhhZSwgMHg3NywgMHg1MSwgMHgwNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHhjMCwgMHgwNCwgMHhkMywgMHg4YiwgMHgwMCwKKzB4ZmMsIDB4MWYsIDB4NjAsIDB4N2EsIDB4M2MsIDB4MDAsIDB4MWMsIDB4NjAsIDB4NGMsIDB4ZDAsIDB4MDQsIDB4MDAsIDB4YzAsCisweDJmLCAweDIwLCAweDA1LCAweDFmLCAweGUwLCAweDMwLCAweGMwLCAweDA0LCAweDAwLCAweDgwLCAweDI1LCAweGMwLCAweDA0LAorMHgwMCwgMHhiNSwgMHg1YiwgMHhjMSwgMHgwNCwgMHgwNCwgMHg2OSwgMHgyNiwgMHgwMSwgMHgwMCwgMHgxYywgMHg2YSwgMHgyYiwKKzB4MDEsIDB4MDAsIDB4MWMsIDB4ODAsIDB4MWQsIDB4MDAsIDB4MDAsIDB4MWMsIDB4YTksIDB4MjUsIDB4NTEsIDB4MDUsIDB4MDAsCisweGVlLCAweDMwLCAweDAwLCAweDAwLCAweDFjLCAweGFmLCAweDc3LCAweDExLCAweDA1LCAweDAwLCAweGI0LCAweDVmLCAweDAxLAorMHg0MCwgMHgxOCwgMHgwNywgMHg5ZCwgMHg1NCwgMHg1NSwgMHgwNCwgMHhiNywgMHg3NiwgMHgwMSwgMHgwMCwgMHgxYywgMHg5NiwKKzB4NzYsIDB4MDEsIDB4MDAsIDB4MWMsIDB4NDcsIDB4MWQsIDB4MDEsIDB4MDAsIDB4MWMsIDB4YTQsIDB4MzMsIDB4MDEsIDB4NjAsCisweDE4LCAweGE0LCAweDJmLCAweDAxLCAweDYwLCAweDE4LCAweDY0LCAweDc3LCAweDAxLCAweDYwLCAweDE4LCAweDI0LCAweDc3LAorMHgwMSwgMHg2MCwgMHgxOCwgMHg0NCwgMHg3NywgMHgwMSwgMHgwMCwgMHgxYywgMHg2NCwgMHg4OCwgMHgwMywgMHgwMCwgMHgxYywKKzB4YTQsIDB4M2YsIDB4MDEsIDB4MDAsIDB4MWMsIDB4YTQsIDB4M2IsIDB4MDEsIDB4MDAsIDB4MWMsIDB4NTMsIDB4NzcsIDB4MDEsCisweDAwLCAweDFjLCAweGQzLCAweGNmLCAweDNiLCAweDAwLCAweDFjLCAweDUzLCAweDRmLCAweDAyLCAweDAwLCAweDFjLCAweGQzLAorMHhjZiwgMHgwMCwgMHgwMCwgMHgxZiwgMHhkYSwgMHhjZiwgMHgwYiwgMHgwMCwgMHgxYywgMHhkNSwgMHg1NywgMHgwZiwgMHgwMCwKKzB4MWMsIDB4ZDMsIDB4ZDMsIDB4MzcsIDB4MDAsIDB4MWMsIDB4ZDQsIDB4NTMsIDB4MGYsIDB4MDAsIDB4MWMsIDB4ZTAsIDB4MjksCisweDAwLCAweDAwLCAweDFjLCAweGY1LCAweGQ1LCAweGMwLCAweDA1LCAweDAwLCAweDAwLCAweDAwLCAweGFjLCAweDU1LCAweDA0LAorMHg3NywgMHg1NiwgMHgwMSwgMHgwMCwgMHgxYywgMHg1NiwgMHg1MywgMHgwMSwgMHgwMCwgMHgxYywgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MTAsIDB4MTgsIDB4MDAsIDB4MDAsIDB4MDQsIDB4YzAsIDB4MDQsIDB4ZjUsIDB4NTUsIDB4MDEsIDB4MDAsIDB4MWMsIDB4MDAsCisweDAwLCAweGM0LCAweDU1LCAweDA0LCAweDc3LCAweDU2LCAweDAxLCAweDAwLCAweDFjLCAweDU2LCAweDUzLCAweDAxLCAweDAwLAorMHgxYywgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgxOCwgMHgwMCwgMHgwMCwgMHgwNCwgMHhjMCwgMHgwNCwgMHhjYiwgMHgyZiwKKzB4MDEsIDB4MTgsIDB4MTAsIDB4Y2IsIDB4MmYsIDB4MDEsIDB4MTAsIDB4MTAsIDB4Y2IsIDB4MmYsIDB4MDEsIDB4MDgsIDB4MTAsCisweGNiLCAweDJmLCAweDAxLCAweDA4LCAweDEwLCAweGNiLCAweDJmLCAweDAxLCAweDIwLCAweDEwLCAweGNiLCAweDJmLCAweDAxLAorMHgwMCwgMHgxMCwgMHhjYiwgMHgyZiwgMHgwMSwgMHgyOCwgMHgxMCwgMHg4OSwgMHgyNSwgMHg2ZCwgMHhjMiwgMHgwNCwgMHgwMCwKKzB4MDAsIDB4MDQsIDB4YzMsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NmMsIDB4YzMsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NmMsIDB4YzMsCisweDA0LCAweDAwLCAweDAwLCAweDZjLCAweGMzLCAweDA0LCAweDAwLCAweDAwLCAweDZjLCAweGMyLCAweDA0LCAweDAwLCAweDAwLAorMHgwNCwgMHhjMywgMHgwNCwgMHgwMCwgMHgwMCwgMHg2YywgMHhjMywgMHgwNCwgMHgwMCwgMHgwMCwgMHg2YywgMHhjMywgMHgwNCwKKzB4MDAsIDB4MDAsIDB4NmMsIDB4YzMsIDB4MDQsIDB4NDAsIDB4MWMsIDB4NjgsIDB4YzAsIDB4MDQsIDB4NDAsIDB4MWMsIDB4OTgsCisweGMwLCAweDA0LCAweGE3LCAweDc3LCAweDZkLCAweGMzLCAweDA0LCAweDAwLCAweDAwLCAweGMwLCAweGMwLCAweDA0LCAweDI3LAorMHgxZCwgMHhlZCwgMHhjMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg2YywgMHhjMywgMHgwNCwgMHgwMCwgMHgwMCwgMHg2YywgMHhjMywKKzB4MDQsIDB4MDAsIDB4MDAsIDB4NmMsIDB4YzMsIDB4MDQsIDB4MDAsIDB4MDAsIDB4M2MsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsCisweDNjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDNjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDNjLCAweGM2LCAweDA0LAorMHgwMCwgMHgwMCwgMHgzYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgzYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgzYywKKzB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4M2MsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4M2MsIDB4YzYsIDB4MDQsIDB4MDAsCisweDAwLCAweDNjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDNjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDNjLCAweGM2LAorMHgwNCwgMHgwMCwgMHgwMCwgMHgzYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgzYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwKKzB4M2MsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4M2MsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4M2MsIDB4YzYsIDB4MDQsCisweDAwLCAweDAwLCAweDNjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDNjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDNjLAorMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgzYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgzYywgMHhjNiwgMHgwNCwgMHgwMCwKKzB4MDAsIDB4M2MsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4M2MsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4M2MsIDB4YzYsCisweDA0LCAweDAwLCAweDAwLCAweDNjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDNjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLAorMHgzYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgzYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgzYywgMHhjNiwgMHgwNCwKKzB4MDAsIDB4MDAsIDB4M2MsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4M2MsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4M2MsCisweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDNjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDNjLCAweGM2LCAweDA0LCAweDAwLAorMHgwMCwgMHgzYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgzYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgzYywgMHhjNiwKKzB4MDQsIDB4MDAsIDB4MDAsIDB4M2MsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4M2MsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsCisweDNjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDNjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDNjLCAweGM2LCAweDA0LAorMHgwMCwgMHgwMCwgMHgzYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgzYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgzYywKKzB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4M2MsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4M2MsIDB4YzYsIDB4MDQsIDB4MDAsCisweDAwLCAweDNjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDNjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDNjLCAweGM2LAorMHgwNCwgMHgwMCwgMHgwMCwgMHgzYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgzYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwKKzB4M2MsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4M2MsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4M2MsIDB4YzYsIDB4MDQsCisweDAwLCAweDAwLCAweDNjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDNjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDNjLAorMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgzYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgzYywgMHhjNiwgMHgwNCwgMHgwMCwKKzB4MDAsIDB4M2MsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4M2MsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4M2MsIDB4YzYsCisweDA0LCAweDAwLCAweDAwLCAweDNjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDNjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLAorMHgzYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgzYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgzYywgMHhjNiwgMHgwNCwKKzB4MDAsIDB4MDAsIDB4M2MsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4M2MsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4M2MsCisweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDNjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDNjLCAweGM2LCAweDA0LCAweDAwLAorMHgwMCwgMHgzYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgzYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgzYywgMHhjNiwKKzB4MDQsIDB4MDAsIDB4MDAsIDB4M2MsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4M2MsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsCisweDNjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDNjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDNjLCAweGM2LCAweDA0LAorMHgwMCwgMHgwMCwgMHgzYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgzYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgzYywKKzB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4M2MsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4M2MsIDB4YzYsIDB4MDQsIDB4MDAsCisweDAwLCAweDNjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDNjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDNjLCAweGM2LAorMHgwNCwgMHgwMCwgMHgwMCwgMHgzYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgzYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwKKzB4M2MsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4M2MsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4M2MsIDB4YzYsIDB4MDQsCisweDAwLCAweDAwLCAweDNjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDNjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDNjLAorMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgzYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgzYywgMHhjNiwgMHgwNCwgMHgwMCwKKzB4MDAsIDB4M2MsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4M2MsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4M2MsIDB4YzYsCisweDA0LCAweDAwLCAweDAwLCAweDNjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDNjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLAorMHgzYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgzYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgzYywgMHhjNiwgMHgwNCwKKzB4MDAsIDB4MDAsIDB4M2MsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4M2MsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4M2MsCisweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDNjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDNjLCAweGM2LCAweDA0LAorfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9zbGljb3NzL29hc2lzZGJnZG93bmxvYWQuaCBiL2RyaXZlcnMvc3RhZ2luZy9zbGljb3NzL29hc2lzZGJnZG93bmxvYWQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MTllMDA3Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3NsaWNvc3Mvb2FzaXNkYmdkb3dubG9hZC5oCkBAIC0wLDAgKzEsNjg1MCBAQAorI2RlZmluZSBPQVNJU19VQ09ERV9WRVJTX1NUUklORwkiMS4yIgorI2RlZmluZSBPQVNJU19VQ09ERV9WRVJTX0RBVEUgIAkiMjAwNi8wMy8yNyAxNToxMToyMiIKKyNkZWZpbmUgT0FTSVNfVUNPREVfSE9TVElGX0lEICAJMworCitzdGF0aWMgczMyIE9OdW1TZWN0aW9ucyA9IDB4MjsKK3N0YXRpYyB1MzIgT1NlY3Rpb25TaXplW10gPQoreworCTB4MDAwMDQwMDAsIDB4MDAwMTAwMDAsCit9OworCitzdGF0aWMgdTMyIE9TZWN0aW9uU3RhcnRbXSA9Cit7CisJMHgwMDAwMDAwMCwgMHgwMDAwODAwMCwKK307CisKK3N0YXRpYyB1OCBPYXNpc1VDb2RlWzJdWzY1NTM2XSA9Cit7CisJeworCTB4MTUsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MWIsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgyMSwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDAzLCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE4LAorCTB4OTgsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4ODAsIDB4YTIsIDB4NDAsIDB4ZmQsIDB4N2YsIDB4MDAsIDB4MDAsCisJMHgwOSwgMHgwMCwgMHhhMiwgMHg0OSwgMHhkZCwgMHg3ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YywKKwkweDgwLCAweGIyLCAweDAxLCAweDAwLCAweDA3LCAweDAwLCAweDAwLCAweDQwLCAweGQxLCAweGIxLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGMsIDB4ODAsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDksIDB4MDAsIDB4YTIsIDB4NDAsCisJMHg3NSwgMHg3ZCwgMHgwMCwgMHgwMCwgMHg2MCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDBiLCAweDAwLCAweGE4LCAweGIxLCAweDdlLCAweDMxLCAweDAwLCAweDAwLCAweDA5LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4OGYsIDB4OTgsIDB4MTgsIDB4MzEsIDB4MDAsIDB4MDAsCisJMHgxMCwgMHgwMCwgMHgwMCwgMHg5OCwgMHg4MCwgMHhlNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg5OCwKKwkweDgwLCAweDk0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAorCTB4MTAsIDB4MDAsIDB4MDAsIDB4OTgsIDB4ODAsIDB4ZTQsIDB4MDEsIDB4MDAsIDB4MGUsIDB4MDAsIDB4NDAsIDB4OTgsCisJMHg4MCwgMHg5NCwgMHgwMCwgMHgwMCwgMHgxMSwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGE1LCAweDk5LCAweDAxLCAweDAwLCAweDE5LCAweDAwLCAweDI5LCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MTksIDB4MDAsIDB4MTQsIDB4YmMsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwZSwgMHgwMCwgMHg5MywgMHhiYywgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MTAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4YTUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MWYsIDB4MDAsIDB4MjksIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgxZiwgMHgwMCwgMHgxNCwgMHhiYywgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDEyLCAweDAwLCAweDkzLCAweGJjLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDEsIDB4ODAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgyMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhhNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgyNSwgMHgwMCwgMHgyOSwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDI1LCAweDAwLCAweDE0LCAweGJjLCAweDgwLCAweDMyLCAweDAwLCAweDAwLAorCTB4MTQsIDB4MDAsIDB4OTMsIDB4YmMsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDksCisJMHhkZCwgMHg4MSwgMHgwMSwgMHgwMCwgMHgxMiwgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDMzLCAweDAxLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDJhLCAweDAwLCAweDE0LCAweGJjLAorCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ZmUsIDB4MDAsIDB4MTMsIDB4YmMsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHg1NCwgMHg5NSwgMHgwMCwgMHg0MCwgMHg0NSwgMHg5OSwgMHgwMSwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHg0MCwKKwkweGU1LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJmLCAweDQwLCAweDQ5LCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZTEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHhmZCwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmZiwgMHhiMywgMHgwMSwgMHgwMCwKKwkweDMzLCAweDAwLCAweDE4LCAweGVlLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLAorCTB4ODksIDB4YjAsIDB4MDEsIDB4MDAsIDB4MzIsIDB4MDAsIDB4YTIsIDB4NDEsIDB4ODksIDB4NTAsIDB4MDAsIDB4MDAsCisJMHg5OSwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgzMCwgMHg5NCwgMHgwMCwgMHg0MCwKKwkweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDIwLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZmEsIDB4ZTAsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MzksIDB4MDAsIDB4OTgsIDB4ZWUsCisJMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmYiwgMHg4MCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDNiLCAweDAwLCAweDgwLCAweGYzLCAweGRlLCAweDMzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ3LAorCTB4ZmQsIDB4OTMsIDB4MDEsIDB4MDAsIDB4M2UsIDB4MDAsIDB4ODMsIDB4ZjMsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHhmMCwgMHgwMCwgMHgwMCwgMHhmMywgMHg4MCwgMHg4OCwgMHgwMSwgMHgwMCwgMHgwMSwgMHg4MCwgMHgwMCwgMHg0MCwKKwkweDJlLCAweGRkLCAweDAxLCAweDAwLCAweDAwLCAweDk0LCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsIDB4NDMsIDB4YzEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmEsCisJMHgyNCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg3YywgMHgwMCwgMHgxOCwgMHhlZSwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDQ1LCAweDAwLCAweDk1LCAweGU4LCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweGU4LAorCTB4ODAsIDB4ODgsIDB4MDEsIDB4MDAsIDB4N2MsIDB4MDAsIDB4MjYsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhkNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMiwKKwkweGVjLCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweGQ2LCAweGIxLCAweDAxLCAweDAwLAorCTB4MDgsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZDUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsCisJMHhkNiwgMHhiMSwgMHgwMSwgMHgwMCwgMHhmZiwgMHgwMCwgMHgwMCwgMHhmOCwgMHhlZSwgMHg4YiwgMHgwMSwgMHgwMCwKKwkweDA4LCAweDAxLCAweDAwLCAweDQwLCAweGQ1LCAweDk5LCAweDAxLCAweDAwLCAweGZmLCAweDAwLCAweDAwLCAweGYwLAorCTB4ODAsIDB4OGMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjcsIDB4ODEsIDB4OTQsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhkNiwgMHhiMSwgMHgwMSwgMHgwMCwgMHhmZiwgMHgwMCwgMHgwMCwgMHhmOCwKKwkweDgwLCAweDg4LCAweDAxLCAweDAwLCAweDNjLCAweDAwLCAweDAwLCAweDQwLCAweGQ1LCAweDk5LCAweDAxLCAweDAwLAorCTB4ZmYsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4ZDYsIDB4OGQsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4ZjAsCisJMHhmMCwgMHhkYiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0OCwgMHg4MSwgMHhlMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDgxLCAweDk0LCAweDAxLCAweDAwLCAweDNjLCAweDAxLCAweDAwLCAweDQwLAorCTB4ZDUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZDYsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHhmZiwgMHgwMCwgMHgwMCwgMHhmOCwgMHg4MCwgMHg4OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0OCwKKwkweDgxLCAweGUwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDgxLCAweDk0LCAweDAxLCAweDAwLAorCTB4M2MsIDB4MDIsIDB4MDAsIDB4NDAsIDB4ZDUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHhkNiwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyYywgMHgwMCwgMHgwMCwgMHg0MCwgMHhkNSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGY4LCAweGQ2LCAweGIxLCAweDAxLCAweDAwLCAweDFlLCAweDAwLCAweDAwLCAweGYwLAorCTB4ODIsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4M2YsIDB4MDAsIDB4ZjgsIDB4ODAsIDB4ZDgsIDB4MDEsIDB4MDAsCisJMHg2NCwgMHgwMCwgMHgyNiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKKwkweDgxLCAweGQwLCAweDAxLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweDQwLCAweDgwLCAweGQ4LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ODAsIDB4OTQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHhkOCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg2OCwgMHgwMCwgMHgyMiwgMHhmYSwgMHg4MCwgMHgzMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDRjLCAweDgxLCAweGUwLCAweDAxLCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweDQwLAorCTB4ODAsIDB4Y2MsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZGUsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMSwgMHgwMCwgMHg0MCwgMHhkNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHhmYSwKKwkweDgwLCAweGU0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY2LCAweDgxLCAweDk0LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZDYsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDAsIDB4NDAsCisJMHhkNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHhmYSwgMHg4MCwgMHhlNCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGY2LCAweDgxLCAweDk0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4ZDYsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZDUsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgxMCwgMHgwMCwgMHgwMCwgMHhmYiwgMHhkNiwgMHhlNSwgMHgwMSwgMHgwMCwgMHgwNywgMHgwMCwgMHgwMCwgMHg0MCwKKwkweGQ1LCAweDk5LCAweDAxLCAweDAwLCAweDE4LCAweDAwLCAweDAwLCAweGZiLCAweGQ2LCAweGU1LCAweDAxLCAweDAwLAorCTB4NDgsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZDUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4ZmEsCisJMHhkNiwgMHhlNSwgMHgwMSwgMHgwMCwgMHg1MCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhkNSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDEwLCAweDAwLCAweDAwLCAweGZiLCAweGQ2LCAweGU1LCAweDAxLCAweDAwLCAweDAzLCAweDAwLCAweDAwLCAweGZiLAorCTB4N2EsIDB4ODksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4ZGMsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg3YywgMHgwMCwgMHgwMCwgMHg0YywgMHhkZCwgMHg5MSwgMHgwMCwgMHgwMCwgMHg3YywgMHgwMCwgMHg5NSwgMHhlOCwKKwkweDg0LCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDJmLCAweGU5LCAweGZhLCAweGIzLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZDEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4NDIsCisJMHg4MCwgMHg4OCwgMHgwMSwgMHgwMCwgMHgzNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MCwgMHhjZSwgMHgwMSwgMHgwMCwKKwkweDdjLCAweDAwLCAweGE2LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDg1LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDIsIDB4ODAsIDB4MjIsIDB4NDAsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHg3YywgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZiwKKwkweDgxLCAweGIwLCAweDAxLCAweDAwLCAweDhlLCAweDAwLCAweDA5LCAweGY5LCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4OGMsIDB4MDAsIDB4MDgsIDB4ZjksIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4OTgsIDB4MDAsIDB4MWYsIDB4ZmQsCisJMHhmOSwgMHgzMywgMHgwMCwgMHgwMCwgMHg4YiwgMHgwMCwgMHg5ZSwgMHhmZCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDRhLCAweGYzLCAweDkzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQ4LAorCTB4ZjMsIDB4OTMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmQsIDB4ZjcsIDB4YjMsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg4MCwgMHg0OSwgMHhmMywgMHg5MywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmYywKKwkweDE5LCAweGIxLCAweDAxLCAweDAwLCAweDkzLCAweDAwLCAweDBhLCAweGY5LCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4NDAsIDB4ZmIsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ZmQsCisJMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwNywgMHg4MCwgMHhmOSwgMHhmMywgMHg4ZiwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDA3LCAweDQyLCAweGY5LCAweGYzLCAweDhmLCAweDAxLCAweDAwLCAweDk3LCAweDAwLCAweGEyLCAweGZmLAorCTB4ZjcsIDB4NmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHhhMiwgMHhmZiwgMHhmYiwgMHhlZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHhmYywKKwkweGUxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQwLCAweDgxLCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4OTQsIDB4MDAsIDB4NDAsIDB4NDcsIDB4OTksIDB4MDEsIDB4MDAsIDB4YmIsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMiwgMHg0NiwgMHhmZCwgMHg3ZiwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDk0LCAweDAwLCAweDQwLCAweDQ3LCAweDk5LCAweDAxLCAweDAwLCAweGNlLCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTIsIDB4NDQsIDB4ZmQsIDB4N2YsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHg5NCwgMHgwMCwgMHg0MCwgMHg0NSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweGYxLCAweGIxLCAweDAxLCAweDAwLCAweGZmLCAweDdmLCAweDAwLCAweDQwLCAweGY1LCAweDk5LCAweDAxLCAweDAwLAorCTB4ZmYsIDB4N2YsIDB4MDAsIDB4NDAsIDB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsIDB4OWEsIDB4MTMsIDB4MDAsIDB4NDAsCisJMHhmNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwNywgMHgwMCwgMHgwMCwgMHg0MCwgMHhmNSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDAxLCAweDAwLCAweDAwLCAweDQwLCAweGY1LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAyLCAweDAwLCAweDQwLAorCTB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMiwgMHgwMCwgMHg0MCwgMHhmNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMywgMHgwMSwgMHgwMCwgMHg0MCwKKwkweGY1LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGY1LCAweDk5LCAweDAxLCAweDAwLAorCTB4OWEsIDB4MTMsIDB4MDAsIDB4NDAsIDB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MGIsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHhmNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmNSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGY1LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDcsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgwOCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHhiMCwgMHgwMiwgMHgwMCwgMHg0MCwKKwkweGY1LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGY1LCAweDk5LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDIsIDB4MjksIDB4MDAsIDB4NDAsCisJMHhmNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmNSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDY3LCAweDAwLCAweDQwLCAweGY1LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwgMHhmNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwKKwkweGZkLCAweDgzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ2LCAweGZkLCAweDgzLCAweDAxLCAweDAwLAorCTB4ZmYsIDB4N2YsIDB4MDAsIDB4NDAsIDB4MjUsIDB4OTksIDB4MDEsIDB4MDAsIDB4YzQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMiwgMHg0NCwgMHg4MCwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweGZkLCAweDkzLCAweDAxLCAweDAwLCAweGUyLCAweDAwLCAweDAwLCAweDQwLAorCTB4ODMsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTIsIDB4NDUsIDB4ODAsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg4MCwgMHg0NiwgMHhmZCwgMHg5MywgMHgwMSwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHg0MCwKKwkweDgzLCAweDk4LCAweDAxLCAweDAwLCAweGRkLCAweDAwLCAweDAwLCAweDQwLCAweDJiLCAweDMxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4YTIsIDB4NDYsIDB4ODgsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCisJMHg4OSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5NCwgMHg4YywgMHhiMCwgMHgwMSwgMHgwMCwKKwkweGZmLCAweGZmLCAweDAwLCAweDQ2LCAweDgwLCAweDg4LCAweDAxLCAweDAwLCAweGE1LCAweGE1LCAweGEyLCAweDQwLAorCTB4ODAsIDB4Y2UsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDgsIDB4OGQsIDB4ZjAsIDB4MDEsIDB4MDAsCisJMHhjOSwgMHgwMCwgMHg4MiwgMHg0MSwgMHg4OSwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwKKwkweDg5LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweGZkLCAweDgzLCAweDAxLCAweDAwLAorCTB4ZDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTIsIDB4NDQsCisJMHg4MCwgMHhiMiwgMHgwMCwgMHgwMCwgMHhlMiwgMHgwMCwgMHgwMCwgMHgwOCwgMHg4MywgMHgzMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweGEyLCAweDQ1LCAweDgwLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQ0LAorCTB4ZmQsIDB4OTMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MzAsIDB4MDAsIDB4MDgsIDB4ODMsIDB4OTgsIDB4MDEsIDB4MDAsCisJMHg4MCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgyYiwgMHg5OSwgMHgwMSwgMHgwMCwgMHhkYiwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDg5LCAweDMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGEyLCAweDQ2LCAweDgwLCAweGIyLCAweDAwLCAweDAwLAorCTB4ZmYsIDB4ZmYsIDB4MDAsIDB4OTQsIDB4ODAsIDB4ODgsIDB4MDEsIDB4MDAsIDB4YTUsIDB4YTUsIDB4YTIsIDB4NDAsCisJMHg4MCwgMHg0ZSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MywgMHg4OSwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAzLCAweDg0LCAweDAwLCAweDQxLCAweDJjLCAweDk5LCAweDAxLCAweDAwLCAweGRlLCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDMsIDB4ODgsIDB4MDAsIDB4NDEsIDB4MmMsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5ZiwgMHg5NiwKKwkweDgwLCAweGIyLCAweDAwLCAweDAwLCAweGRmLCAweDAwLCAweGEyLCAweDQxLCAweDhkLCAweDUwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4N2YsIDB4MDAsIDB4NDAsCisJMHgyNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YywgMHg4OSwgMHhlMCwgMHgwMSwgMHgwMCwKKwkweGRkLCAweDAwLCAweDAwLCAweDQ0LCAweDgyLCAweDE0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDkwLCAweDk0LAorCTB4OGEsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgxMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHg4OCwgMHhmNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwKKwkweDg5LCAweGQwLCAweDAxLCAweDAwLCAweGRkLCAweDAwLCAweDAwLCAweDQ0LCAweDJiLCAweDQxLCAweDAxLCAweDAwLAorCTB4ZWMsIDB4MDAsIDB4MDgsIDB4NDEsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ZWQsIDB4MDAsIDB4MDAsIDB4OTQsCisJMHgyNCwgMHhiMSwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHg5NCwgMHgyNCwgMHhmNSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDk0LCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweGYyLCAweDAwLCAweGEwLCAweDQ0LAorCTB4ODksIDB4NTAsIDB4MDAsIDB4MDAsIDB4ZGQsIDB4MDAsIDB4MDAsIDB4NDQsIDB4MmIsIDB4NDEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg5NCwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhlZiwgMHgwMCwgMHgyMCwgMHg0NCwKKwkweDg5LCAweDUwLCAweDAwLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDQ1LCAweDg4LCAweGY0LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZmEsIDB4OGEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTMsIDB4NDIsCisJMHg4OSwgMHhkMCwgMHgwMCwgMHgwMCwgMHhmNywgMHgwMCwgMHhhMCwgMHhmYSwgMHg4YSwgMHg0MCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDhiLCAweGMwLCAweDAxLCAweDAwLCAweGY1LCAweDAwLCAweGEzLCAweDQyLAorCTB4ODksIDB4NTAsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4NDUsIDB4ODgsIDB4ODgsIDB4MDEsIDB4MDAsCisJMHgxMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHg4YSwgMHhmNCwgMHgwMSwgMHgwMCwgMHhmYywgMHgwMCwgMHg5MCwgMHg0NCwKKwkweDhhLCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDhiLCAweGMwLCAweDAxLCAweDAwLAorCTB4ZmYsIDB4ZmYsIDB4MDAsIDB4NDUsIDB4OGEsIDB4YTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NTAsCisJMHg4YiwgMHhlMCwgMHgwMSwgMHgwMCwgMHhmZiwgMHg3ZiwgMHgwMCwgMHg0MCwgMHgyNSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDdjLCAweDAwLCAweDAwLCAweDQwLCAweDJiLCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDMwLCAweDAwLCAweDQwLAorCTB4ODMsIDB4OTgsIDB4MDEsIDB4MDAsIDB4ZGQsIDB4MDAsIDB4MDAsIDB4MDgsIDB4ODMsIDB4MTQsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg5NCwgMHgyYSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHg0MCwKKwkweGY5LCAweDliLCAweDAxLCAweDAwLCAweGRkLCAweDAwLCAweDAwLCAweGZjLCAweDE5LCAweDMxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4NDAsIDB4OTQsIDB4ODAsIDB4YjIsIDB4MDEsIDB4MDAsIDB4ZGQsIDB4MDAsIDB4MDAsIDB4NDQsCisJMHgyYiwgMHg0MSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg5NCwgMHg4MCwgMHhiMiwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweGY5LCAweGMzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LAorCTB4MmIsIDB4YzEsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDEsIDB4OWYsIDB4OTQsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwMiwgMHg4MCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMSwgMHgwMCwgMHg1MSwKKwkweDkzLCAweGIwLCAweDAwLCAweDAwLCAweDEwLCAweDAxLCAweDAwLCAweDRkLCAweDkzLCAweGIwLCAweDAwLCAweDAwLAorCTB4MTAsIDB4MDEsIDB4MDAsIDB4NDksIDB4OTMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsCisJMHg5MywgMHhiMCwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMSwgMHhhMiwgMHg0MSwgMHg5MywgMHg1MCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDgwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTEsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgxMiwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMywgMHg0MCwKKwkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MTUsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTYsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNywgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDE4LCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDE5LCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWEsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgxYiwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYywgMHg0MCwKKwkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDFkLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MWUsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWYsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3MCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDcxLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDcyLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzMsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg3NCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3NSwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDc2LCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4NzcsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzgsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3OSwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDdhLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDdiLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4N2MsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg3ZCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3ZSwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDdmLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4NDAsCisJMHhhMSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHhhMSwgMHhkMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDFiLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4MTksIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MTcsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgxNSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDEzLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDExLCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MGYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHgwZCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwYiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDA5LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4MDcsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDUsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwMywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDAxLCAweGIwLCAweDAxLCAweDAwLCAweDNiLCAweDAxLCAweDIwLCAweDQ4LCAweGExLCAweDUxLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4NDcsIDB4MDEsIDB4MjIsIDB4NGIsCisJMHg3NCwgMHg3ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKKwkweDYwLCAweDAwLCAweDAwLCAweDRiLCAweDYwLCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGIxLAorCTB4N2UsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDgsIDB4MDEsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHg0NSwgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNSwgMHgwMCwgMHg4MCwgMHg0MCwKKwkweDk3LCAweDk4LCAweDAxLCAweDAwLCAweDE4LCAweDAwLCAweDAwLCAweGFhLCAweDk2LCAweDg4LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4ODAsIDB4NDMsIDB4OTcsIDB4ZjAsIDB4MDEsIDB4MDAsIDB4MDcsIDB4MDAsIDB4MDAsIDB4YWEsCisJMHg5NiwgMHg4OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDU4LCAweDA3LCAweDkwLCAweDAxLCAweDAwLCAweGQ4LCAweDlmLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4YTUsIDB4YjMsIDB4MDEsIDB4MDAsCisJMHhkOCwgMHgwMiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhmOCwgMHgwMiwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVjLCAweDA3LCAweDkwLCAweDAxLCAweDAwLAorCTB4ZDgsIDB4OWYsIDB4MDAsIDB4NDAsIDB4YmYsIDB4YjMsIDB4MDAsIDB4MDAsIDB4NWEsIDB4MDEsIDB4MjIsIDB4Y2MsCisJMHg4NSwgMHg3ZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MSwgMHgwNywgMHg5MCwgMHgwMSwgMHgwMCwKKwkweGQ4LCAweDlmLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4NDksIDB4YjEsIDB4MDEsIDB4MDAsIDB4YWUsIDB4MDMsIDB4MDAsIDB4Y2IsIDB4YTMsIDB4YzksIDB4MDEsIDB4MDAsCisJMHhkMCwgMHgxNCwgMHgwMCwgMHg0MCwgMHhhMSwgMHg5YiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDQ2LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ4LCAweGYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZDAsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4Y2EsCisJMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkNSwgMHhlMSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDA3LCAweDAwLCAweDAwLCAweDQwLCAweDYxLCAweDk5LCAweDAxLCAweDAwLCAweDIwLCAweDAwLCAweDAwLCAweDIwLAorCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4NjMsIDB4MDEsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhjYywgMHg4NSwgMHg5MywgMHgwMSwgMHgwMCwgMHhmOCwgMHgwMiwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGQwLCAweDE0LCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZmEsIDB4YmEsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmEsCisJMHhhNCwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHhiYywgMHhiMywgMHgwMSwgMHgwMCwKKwkweDAwLCAweDE0LCAweDJmLCAweDQwLCAweDgxLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGU3LAorCTB4YTcsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4YTksIDB4YjMsIDB4MDEsIDB4MDAsCisJMHhmZiwgMHgwMCwgMHgwMCwgMHhkZCwgMHg4MSwgMHg4OCwgMHgwMSwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgwLCAweGY0LCAweDAxLCAweDAwLCAweDczLCAweDAxLCAweDAwLCAweDQwLCAweDgwLCAweGM4LCAweDAxLCAweDAwLAorCTB4ODYsIDB4MDEsIDB4MDAsIDB4ZGQsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHgxMCwgMHhiMSwgMHgwMCwgMHgwMCwgMHg4NywgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDg4LCAweDAxLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDg5LCAweDAxLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4OGEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHg4YiwgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg4ZCwgMHgwMSwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDhmLCAweDAxLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4NTAsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4YjYsIDB4MDEsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg1MCwgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweGM0LCAweDAxLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGM1LCAweDAxLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4ODIsIDB4MDIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHg4MywgMHgwMiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgyOCwgMHgwMCwgMHhiOCwgMHgwMiwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDI4LCAweDAwLCAweGQ0LCAweDlmLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDI4LCAweDAwLAorCTB4ZDUsIDB4OWYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MjgsIDB4MDAsIDB4ZDYsIDB4OWYsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgyOCwgMHgwMCwgMHhkNywgMHg5ZiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgyOCwgMHgwMCwKKwkweDcyLCAweDAxLCAweDAwLCAweDQxLCAweDgxLCAweGMwLCAweDI4LCAweDAwLCAweDU1LCAweDAxLCAweDUxLCAweDQ5LAorCTB4ZmQsIDB4OTMsIDB4MjgsIDB4MDAsIDB4NTUsIDB4MDEsIDB4NTIsIDB4NGEsIDB4ZmQsIDB4OTMsIDB4MmEsIDB4MDAsCisJMHg1NSwgMHgwMSwgMHg1NSwgMHg0OSwgMHhmZCwgMHg4MywgMHgyYSwgMHgwMCwgMHg1NSwgMHgwMSwgMHg1NiwgMHg0YSwKKwkweGZkLCAweDgzLCAweDJhLCAweDAwLCAweDUwLCAweDAxLCAweDkxLCAweDgxLCAweDgwLCAweDMwLCAweDJhLCAweDAwLAorCTB4NTUsIDB4MDEsIDB4NDUsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MmEsIDB4MDAsIDB4NTAsIDB4MDEsIDB4OTEsIDB4ODIsCisJMHg4MCwgMHgzMCwgMHgyYSwgMHgwMCwgMHg1NSwgMHgwMSwgMHg0NiwgMHg0MCwgMHg4MSwgMHhiMiwgMHgyYSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDg5LCAweGIwLCAweDJiLCAweDAwLCAweDAwLCAweDAwLCAweDJmLCAweDQwLAorCTB4ODEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDAsIDB4NDAsIDB4NDksIDB4OTksIDB4MDEsIDB4MDAsCisJMHhiMywgMHgwMSwgMHgyMiwgMHhkZSwgMHhlMSwgMHg2ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YywKKwkweDQ5LCAweGMxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDgxLCAweGMwLCAweDAxLCAweDAwLAorCTB4OTIsIDB4MDEsIDB4YTIsIDB4NDQsIDB4ODEsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGMsCisJMHg0OSwgMHhkMSwgMHgwMSwgMHgwMCwgMHg5YSwgMHgwMSwgMHgyMiwgMHg0MCwgMHhlMSwgMHg2ZCwgMHgwMCwgMHgwMCwKKwkweDk2LCAweDAxLCAweGEyLCAweDQxLCAweDgxLCAweDUwLCAweDAwLCAweDAwLCAweDUwLCAweDAxLCAweDAwLCAweDQxLAorCTB4YmYsIDB4YjMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4YmYsIDB4YjMsIDB4MDEsIDB4MDAsCisJMHg1MCwgMHgwMSwgMHhhMCwgMHgwZiwgMHhiZCwgMHg2ZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkZSwKKwkweGUxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDQ5LCAweGMxLCAweDAxLCAweDAwLAorCTB4YjUsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MTksIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywgMHhmZiwgMHg4NSwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGRlLCAweDE5LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDQyLCAweGZmLAorCTB4ODcsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4ZmYsIDB4ZTEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg0OSwgMHhjMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZiwgMHhmZiwKKwkweGUxLCAweGIxLCAweDAxLCAweDAwLCAweDA4LCAweDE0LCAweDAwLCAweGE0LCAweDgwLCAweGNjLCAweDAxLCAweDAwLAorCTB4YWEsIDB4MDEsIDB4MjYsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCisJMHg4NSwgMHhjMCwgMHgwMSwgMHgwMCwgMHhhOCwgMHgwMSwgMHhhMiwgMHg0YywgMHg4MSwgMHg1MCwgMHgwMCwgMHgwMCwKKwkweGI0LCAweDAxLCAweDIyLCAweGQyLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweGFmLCAweDAxLCAweDIyLCAweDQxLAorCTB4YTUsIDB4NmYsIDB4MDAsIDB4MDAsIDB4NTAsIDB4MDEsIDB4YTIsIDB4ZTAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhkMiwgMHhjMSwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1YywKKwkweDg5LCAweDkwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDQyLCAweDgwLCAweGIyLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4NDEsIDB4NDMsIDB4ODAsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsCisJMHg4OCwgMHg5NCwgMHgwMSwgMHgwMCwgMHg1NSwgMHgwMSwgMHgwMCwgMHg0NCwgMHhlMCwgMHhiMSwgMHgwMCwgMHgwMCwKKwkweGIxLCAweDAxLCAweDAwLCAweDQ4LCAweDQ5LCAweGMxLCAweDAwLCAweDAwLCAweGFmLCAweDAxLCAweDAwLCAweDViLAorCTB4ODksIDB4OTAsIDB4MDAsIDB4MDAsIDB4YTgsIDB4OWYsIDB4MDAsIDB4YTAsIDB4OWUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwMCwgMHg0MCwKKwkweDQ5LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDIzLCAweDQwLCAweDgxLCAweGIwLCAweDAxLCAweDAwLAorCTB4YmUsIDB4MDEsIDB4MjIsIDB4ZGUsIDB4ZTEsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGMsCisJMHg0OSwgMHhjMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4MSwgMHhjMCwgMHgwMSwgMHgwMCwKKwkweGI5LCAweDAxLCAweGEyLCAweDQ0LCAweDgxLCAweDZjLCAweDAwLCAweDAwLCAweDUwLCAweDAxLCAweDAwLCAweDQzLAorCTB4YmYsIDB4YjMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MTgsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg0MCwgMHhmOCwgMHg4MCwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHhmMCwKKwkweDgwLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NTUsIDB4MDEsIDB4MDAsIDB4NDAsCisJMHhlMSwgMHhiMSwgMHgwMCwgMHgwMCwgMHhjNiwgMHgwMSwgMHgwMCwgMHg0MCwgMHg5MSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDkxLCAweGIwLCAweDAxLCAweDAwLCAweGQwLCAweDE0LCAweDJlLCAweDQwLAorCTB4NDksIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDUsIDB4MDAsIDB4MDAsIDB4NDAsIDB4YTMsIDB4OWIsIDB4MDEsIDB4MDAsCisJMHgwOCwgMHgwMCwgMHgwMCwgMHhkZCwgMHg4MSwgMHhmNCwgMHgwMSwgMHgwMCwgMHhjYiwgMHgwMSwgMHgwMCwgMHg0MCwKKwkweDgwLCAweGM4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDEwLCAweGIxLCAweDAwLCAweDAwLAorCTB4ZDEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NTMsIDB4MDEsIDB4MDAsIDB4ZGUsCisJMHhhMSwgMHhiMywgMHgwMCwgMHgwMCwgMHhlMywgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweGU1LCAweDAxLCAweDAwLCAweDQwLCAweDgxLCAweGIwLCAweDAwLCAweDAwLCAweGViLCAweDAxLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4NTIsIDB4MDEsIDB4MDAsIDB4ZGYsIDB4ZTEsIDB4YjEsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhkMCwgMHhiYSwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkZSwKKwkweGExLCAweGIxLCAweDAxLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweGQyLCAweGE1LCAweGU3LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZDIsIDB4YzEsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhkYiwgMHgwMSwgMHgyMiwgMHg0NCwgMHhjMSwgMHg1MywgMHgwMCwgMHgwMCwKKwkweGRhLCAweDAxLCAweDg0LCAweDQxLCAweDgxLCAweDQwLCAweDAwLCAweDAwLCAweGRlLCAweDAxLCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDAsIDB4NDUsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHhkNSwgMHgwMSwgMHgwMCwgMHg0MSwgMHhhMSwgMHhjMSwgMHgwMCwgMHgwMCwgMHhkYSwgMHgwMiwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGY4LCAweDAyLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4NTUsIDB4MDEsIDB4MDAsIDB4ZGQsIDB4YTEsIDB4YjEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMCwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhhNSwgMHg5YiwgMHgwMSwgMHgwMCwKKwkweGRhLCAweDAyLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweGQzLAorCTB4YTcsIDB4Y2IsIDB4MDEsIDB4MDAsIDB4ZjgsIDB4MDIsIDB4MDAsIDB4ZTAsIDB4YTUsIDB4YjMsIDB4MDAsIDB4MDAsCisJMHgwMywgMHgwMCwgMHgwMCwgMHg0MCwgMHhhMywgMHg5YiwgMHgwMSwgMHgwMCwgMHg1MywgMHgwMSwgMHgwMCwgMHhkZSwKKwkweGExLCAweGIzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweGJmLCAweGIzLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZGUsIDB4ODEsIDB4OTAsIDB4MDEsIDB4MDAsIDB4NTAsIDB4MDEsIDB4YTIsIDB4YmEsCisJMHg4MCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg2MCwgMHgwMCwgMHgwMCwgMHhkZSwgMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweGU4LCAweDAxLCAweGE4LCAweGIxLCAweDgwLCAweDMwLCAweDAwLCAweDAwLCAweDUyLCAweDAxLCAweDAwLCAweDQwLAorCTB4ZTAsIDB4YjEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDAsIDB4YmEsIDB4YjMsIDB4MDEsIDB4MDAsCisJMHg2YiwgMHgwMiwgMHgwMCwgMHg0MCwgMHg4MSwgMHg5OCwgMHgwMSwgMHgwMCwgMHg2MCwgMHgwMiwgMHgwMCwgMHg0ZCwKKwkweDgzLCAweDMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweGUxLCAweGIzLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4ZTMsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsCisJMHhlNSwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHhlOSwgMHhiMywgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweGViLCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LAorCTB4ZjUsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4ZjcsIDB4YjMsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHhmOSwgMHhiMywgMHgwMSwgMHgwMCwgMHhmOSwgMHgwMSwgMHgyMiwgMHg0MCwKKwkweDhmLCAweDZmLCAweDAwLCAweDAwLCAweDc4LCAweDAyLCAweDAwLCAweDQwLCAweDgxLCAweDk4LCAweDAxLCAweDAwLAorCTB4NjAsIDB4MDIsIDB4MDAsIDB4YzcsIDB4ODMsIDB4MzAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHg5OCwgMHgwMSwgMHgwMCwgMHg2MCwgMHgwMiwgMHgwMCwgMHg0MiwgMHg4MywgMHgzMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGU4LCAweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGU5LAorCTB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZWEsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhlYiwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4NSwKKwkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGVjLCAweGYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZWQsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjIsCisJMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOSwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGFjLCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGFiLAorCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjgsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhiOSwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiYSwKKwkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGJiLCAweGYwLCAweGIxLCAweDAxLCAweDAwLAorCTB4MGMsIDB4MDIsIDB4YjgsIDB4NDAsIDB4ODEsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHg5MCwgMHgwMSwgMHgwMCwgMHgwZSwgMHgwMiwgMHhiOSwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDgxLCAweDkwLCAweDAxLCAweDAwLCAweDEwLCAweDAyLCAweGJhLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4ODEsIDB4OTAsIDB4MDEsIDB4MDAsCisJMHgxMiwgMHgwMiwgMHhiYiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywKKwkweDgxLCAweDkwLCAweDAxLCAweDAwLCAweDE0LCAweDAyLCAweGJjLCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4ODEsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MTYsIDB4MDIsIDB4YmQsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHg4MSwgMHg5MCwgMHgwMSwgMHgwMCwKKwkweDE4LCAweDAyLCAweGJlLCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ2LAorCTB4ODEsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MWEsIDB4MDIsIDB4YmYsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywgMHg4MSwgMHg5MCwgMHgwMSwgMHgwMCwgMHgxYywgMHgwMiwgMHhjOCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ4LCAweDgxLCAweDkwLCAweDAxLCAweDAwLAorCTB4MWUsIDB4MDIsIDB4YzksIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDksCisJMHg4MSwgMHg5MCwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMiwgMHhjYSwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDRhLCAweDgxLCAweDkwLCAweDAxLCAweDAwLCAweDIyLCAweDAyLCAweGNiLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGIsIDB4ODEsIDB4OTAsIDB4MDEsIDB4MDAsCisJMHgyNCwgMHgwMiwgMHhjYywgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YywKKwkweDgxLCAweDkwLCAweDAxLCAweDAwLCAweDI2LCAweDAyLCAweGNkLCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGQsIDB4ODEsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MjgsIDB4MDIsIDB4Y2UsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZSwgMHg4MSwgMHg5MCwgMHgwMSwgMHgwMCwKKwkweDJhLCAweDAyLCAweGNmLCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRmLAorCTB4ODEsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MmMsIDB4MDIsIDB4ZjAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHg4MSwgMHg5MCwgMHgwMSwgMHgwMCwgMHgyZSwgMHgwMiwgMHhmMSwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUxLCAweDgxLCAweDkwLCAweDAxLCAweDAwLAorCTB4MzAsIDB4MDIsIDB4ZjIsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTIsCisJMHg4MSwgMHg5MCwgMHgwMSwgMHgwMCwgMHgzMiwgMHgwMiwgMHhmMywgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDUzLCAweDgxLCAweDkwLCAweDAxLCAweDAwLCAweDM0LCAweDAyLCAweGY0LCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTQsIDB4ODEsIDB4OTAsIDB4MDEsIDB4MDAsCisJMHgzNiwgMHgwMiwgMHhmNSwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1NSwKKwkweDgxLCAweDkwLCAweDAxLCAweDAwLCAweDM4LCAweDAyLCAweGY2LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTYsIDB4ODEsIDB4OTAsIDB4MDEsIDB4MDAsIDB4M2EsIDB4MDIsIDB4ZjcsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1NywgMHg4MSwgMHg5MCwgMHgwMSwgMHgwMCwKKwkweDNjLCAweDAyLCAweGY4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDU4LAorCTB4ODEsIDB4OTAsIDB4MDEsIDB4MDAsIDB4M2UsIDB4MDIsIDB4ZjksIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1OSwgMHg4MSwgMHg5MCwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMiwgMHhmYSwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVhLCAweDgxLCAweDkwLCAweDAxLCAweDAwLAorCTB4NDIsIDB4MDIsIDB4ZmIsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWIsCisJMHg4MSwgMHg5MCwgMHgwMSwgMHgwMCwgMHg0NCwgMHgwMiwgMHhmYywgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDVjLCAweDgxLCAweDkwLCAweDAxLCAweDAwLCAweDQ2LCAweDAyLCAweGZkLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWQsIDB4ODEsIDB4OTAsIDB4MDEsIDB4MDAsCisJMHg0OCwgMHgwMiwgMHhmZSwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1ZSwKKwkweDgxLCAweDkwLCAweDAxLCAweDAwLCAweDRhLCAweDAyLCAweGZmLCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NWYsIDB4ODEsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhhNSwgMHg5YiwgMHgwMSwgMHgwMCwKKwkweGQ4LCAweDAyLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGY4LCAweDAyLCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4ZDAsIDB4MTQsIDB4MmUsIDB4MDYsIDB4YTUsIDB4YjMsIDB4MDEsIDB4MDAsCisJMHg0MCwgMHgwMCwgMHgwMCwgMHhkMywgMHhhNywgMHhjYiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwKKwkweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYxLCAweGYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjIsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjQsCisJMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmNSwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGZhLCAweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZiLAorCTB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmMsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhlYiwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlZSwKKwkweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGVmLCAweGYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjMsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjYsCisJMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmZCwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweGRiLCAweDAxLCAweDAwLCAweGM3LCAweGUxLCAweGIxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4NjYsIDB4MDIsIDB4MDAsIDB4NDgsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg1MSwgMHg0MCwgMHgxYSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAorCTB4NjMsIDB4MDIsIDB4YTIsIDB4NDEsIDB4ODMsIDB4NTAsIDB4MDAsIDB4MDAsIDB4NWYsIDB4MDIsIDB4NDksIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MiwgMHg0MCwgMHgxYywgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDRlLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDQ2LCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4NjgsIDB4MDIsIDB4YTIsIDB4NDEsIDB4ODMsIDB4NTAsIDB4MDAsIDB4MDAsCisJMHg1ZiwgMHgwMiwgMHg0YSwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMCwKKwkweDllLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweGQ4LCAweGIzLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4YTEsIDB4ZDAsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTIsCisJMHhkMiwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhNCwgMHhkNCwgMHhiMywgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGQwLCAweGQ2LCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQxLAorCTB4ZGMsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDIsIDB4ZGUsIDB4YjMsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg4OCwgMHhkYSwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkNCwKKwkweDhlLCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQzLCAweGU2LCAweGIzLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4YWMsIDB4ZWMsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OTksCisJMHhmYSwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkNSwgMHhlMCwgMHhiMywgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGQ1LCAweGUyLCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ1LAorCTB4ZTQsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDUsIDB4ZTgsIDB4YjMsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhkNSwgMHhlYSwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkNSwKKwkweGY0LCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ1LCAweGY2LCAweGIzLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZDUsIDB4ZjgsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YzcsCisJMHhhOSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZiwgMHg0MCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDg0LCAweDAyLCAweDAwLCAweDQwLCAweDkxLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAorCTB4OTEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDcsIDB4MDAsIDB4MDAsIDB4NDAsIDB4YTMsIDB4OWIsIDB4MDEsIDB4MDAsCisJMHgwOCwgMHgwMCwgMHgwMCwgMHhkZCwgMHg4MSwgMHhmNCwgMHgwMSwgMHgwMCwgMHg4OCwgMHgwMiwgMHgwMCwgMHg0MCwKKwkweDgwLCAweGM4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDEwLCAweGIxLCAweDAwLCAweDAwLAorCTB4OGQsIDB4MDIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4OTgsIDB4MDIsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg5OCwgMHgwMiwgMHgwMCwgMHg0NiwgMHhhMywgMHhiMywgMHgwMCwgMHgwMCwKKwkweDliLCAweDAyLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGExLCAweDAyLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4OGYsIDB4MDIsIDB4MjMsIDB4NTAsIDB4YTUsIDB4NmYsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHhhNSwgMHhiMywgMHgwMSwgMHgwMCwgMHhlOCwgMHgwMiwgMHgwMCwgMHg0MiwKKwkweGE1LCAweDYzLCAweDAxLCAweDAwLCAweGY4LCAweDAyLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4ZDAsIDB4MTQsIDB4MmQsIDB4NDAsIDB4NDksIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDAsCisJMHhiYSwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkZSwgMHhhMSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDAwLCAweGIwLCAweDAxLCAweDAwLCAweDk3LCAweDAyLCAweDIyLCAweDQ0LAorCTB4YTUsIDB4NTMsIDB4MDAsIDB4MDAsIDB4OTQsIDB4MDIsIDB4MDAsIDB4NDEsIDB4YTEsIDB4YzEsIDB4MDAsIDB4MDAsCisJMHg1NSwgMHgwMSwgMHgwMCwgMHhkZCwgMHhhMSwgMHhiMSwgMHgwMCwgMHgwMCwgMHhlOCwgMHgwMiwgMHgwMCwgMHhkZSwKKwkweGExLCAweDMzLCAweDAxLCAweDAwLCAweGY4LCAweDAyLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4NTUsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsCisJMHhiZiwgMHhiMywgMHgwMSwgMHgwMCwgMHg1MCwgMHgwMSwgMHhhMiwgMHhkMiwgMHg3NywgMHg3ZCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGQyLCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGRlLAorCTB4NjMsIDB4YjEsIDB4MDEsIDB4MDAsIDB4OWUsIDB4MDIsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHg1NSwgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhlOCwgMHgwMiwgMHgwMCwgMHg1NCwKKwkweGE1LCAweDMzLCAweDAxLCAweDAwLCAweGY4LCAweDAyLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4ZDAsIDB4MTQsIDB4MmQsIDB4NDAsIDB4NDksIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsCisJMHhkMCwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHhkMiwgMHhiMywgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGY4LCAweGQ0LCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LAorCTB4ZDYsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MDgsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHhhYywgMHgwMiwgMHgwMCwgMHg0MCwgMHg4MSwgMHg5OCwgMHgwMSwgMHgwMCwgMHg2MCwgMHgwMiwgMHgwMCwgMHg0NiwKKwkweDgzLCAweDMwLCAweDAxLCAweDAwLCAweDU1LCAweDAxLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4YTAsIDB4OWUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTgsCisJMHg0MywgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlOSwgMHg0NSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGVhLCAweDQ5LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGViLAorCTB4YTEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGYsIDB4NDAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweGQwLCAweDE0LCAweDJlLCAweDQwLCAweDQ5LCAweGIxLCAweDAxLCAweDAwLCAweDA1LCAweDAwLCAweDAwLCAweDQwLAorCTB4YTMsIDB4OWIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4YzEsIDB4YjMsIDB4MDEsIDB4MDAsCisJMHgwOCwgMHgwMCwgMHgwMCwgMHhkZCwgMHg4MSwgMHhmNCwgMHgwMSwgMHgwMCwgMHhiZCwgMHgwMiwgMHgwMCwgMHg0MCwKKwkweDEwLCAweGM5LCAweDAwLCAweDAwLCAweGMzLCAweDAyLCAweDAwLCAweDA1LCAweDgxLCAweGIwLCAweDAwLCAweDAwLAorCTB4NTAsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4Y2IsIDB4MDIsIDB4MDAsIDB4MDUsCisJMHg4MSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweGQwLCAweDAyLCAweDAwLCAweDQ0LCAweGE1LCAweGIzLCAweDAwLCAweDAwLCAweGQyLCAweDAyLCAweDAwLCAweDQ0LAorCTB4YTUsIDB4YjMsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4NDAsIDB4YTQsIDB4ZTcsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHg4MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHhjMSwKKwkweGYwLCAweDg5LCAweDAxLCAweDAwLCAweGM4LCAweDAyLCAweDIyLCAweDQxLCAweDgxLCAweDUwLCAweDAwLCAweDAwLAorCTB4YzQsIDB4MDIsIDB4MDAsIDB4NDEsIDB4YzEsIDB4YzMsIDB4MDAsIDB4MDAsIDB4ZGEsIDB4MDIsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhmOCwgMHgwMiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDU1LCAweDAxLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDQwLAorCTB4YTQsIDB4ZTcsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4OTEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHhmZiwgMHhmZiwgMHgwMCwgMHhjOSwgMHhmMCwgMHg4OSwgMHgwMSwgMHgwMCwgMHhjOCwgMHgwMiwgMHgyMiwgMHg0MSwKKwkweDgxLCAweDUwLCAweDAwLCAweDAwLCAweGNjLCAweDAyLCAweDAwLCAweDQxLCAweGMxLCAweGMzLCAweDAwLCAweDAwLAorCTB4ZmYsIDB4ZmYsIDB4MDAsIDB4ZGUsIDB4ODUsIDB4ODksIDB4MDEsIDB4MDAsIDB4YzgsIDB4MDIsIDB4MDAsIDB4YzIsCisJMHhlMCwgMHhiMSwgMHgwMCwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHhkZSwgMHg5NSwgMHg4OSwgMHgwMSwgMHgwMCwKKwkweGM4LCAweDAyLCAweDAwLCAweGNhLCAweGUwLCAweGIxLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGU3LCAweGE3LCAweGIzLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4YTksIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg0OSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhhZSwgMHgwMywgMHgwMCwgMHhjYiwgMHhhMywgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDIwLCAweDQ2LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQyLAorCTB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDMsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhkNCwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkMCwKKwkweGUxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQxLCAweDYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4MjAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4ZTIsIDB4MDIsIDB4YTgsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHhjYywgMHg4NSwgMHg5MywgMHgwMSwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhlNywgMHhhNywgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkOCwKKwkweGE5LCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDQ5LCAweGIxLCAweDAxLCAweDAwLAorCTB4YWUsIDB4MDMsIDB4MDAsIDB4Y2IsIDB4YTMsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg0NiwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkMiwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGQwLCAweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQzLAorCTB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZTEsIDB4MDIsIDB4MDAsIDB4ZDQsIDB4ZTEsIDB4YjEsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGEyLCAweGNjLAorCTB4ODUsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4ODEsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHhmYSwgMHgwMiwgMHhhMiwgMHg0MSwgMHg4MSwgMHg1MCwgMHgwMCwgMHgwMCwgMHhmOSwgMHgwMiwgMHhhMiwgMHhmMiwKKwkweDgwLCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweGNjLCAweDg1LCAweDgzLCAweDAxLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweGI1LCAweDAzLCAweDAwLCAweDQwLCAweGExLCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJmLCAweDQxLAorCTB4OTksIDB4YjMsIDB4MDEsIDB4MDAsIDB4MGEsIDB4MDMsIDB4MjIsIDB4NDQsIDB4ODEsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgxMiwgMHgwMywgMHgyMiwgMHg0OCwgMHg4MSwgMHg2YywgMHgwMCwgMHgwMCwgMHgwYywgMHgwMywgMHgyMiwgMHg0YywKKwkweDgxLCAweDZjLCAweDAwLCAweDAwLCAweDE2LCAweDAzLCAweDIyLCAweDUwLCAweDgxLCAweDZjLCAweDAwLCAweDAwLAorCTB4MTcsIDB4MDMsIDB4MjIsIDB4NTQsIDB4ODEsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MTksIDB4MDMsIDB4MjIsIDB4NTgsCisJMHg4MSwgMHg2YywgMHgwMCwgMHgwMCwgMHgxZSwgMHgwMywgMHgyMiwgMHg1YywgMHg4MSwgMHg2YywgMHgwMCwgMHgwMCwKKwkweDUwLCAweDAxLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGJjLAorCTB4MDksIDB4YjAsIDB4MDEsIDB4MDAsIDB4ZGQsIDB4OWYsIDB4MDAsIDB4Y2EsIDB4MDEsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwMywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKKwkweGYzLCAweDgzLCAweDAxLCAweDAwLCAweDEwLCAweDAzLCAweGEyLCAweDQyLCAweDA1LCAweDZjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MDUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ZGQsIDB4OWYsIDB4MjIsIDB4Y2EsCisJMHgwNywgMHgxNCwgMHgwMCwgMHgwMCwgMHhkZCwgMHg5ZiwgMHgwMCwgMHg0NSwgMHhmMywgMHg5MywgMHgwMCwgMHgwMCwKKwkweGRkLCAweDlmLCAweDIwLCAweDQzLCAweDk1LCAweDZmLCAweDAwLCAweDAwLCAweGRkLCAweDlmLCAweDgwLCAweGNhLAorCTB4MDUsIDB4MzAsIDB4MDAsIDB4MDAsIDB4ZGQsIDB4OWYsIDB4MjIsIDB4MDEsIDB4ODAsIDB4MzAsIDB4MDAsIDB4MDAsCisJMHhkZCwgMHg5ZiwgMHgwMCwgMHhjYiwgMHhkYiwgMHg5MSwgMHgwMCwgMHgwMCwgMHg1NywgMHgwMSwgMHgwMCwgMHhiYywKKwkweGFiLCAweGIzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGJjLCAweGIxLCAweGIzLCAweDAxLCAweDAwLAorCTB4ZGQsIDB4OWYsIDB4MDAsIDB4Y2EsIDB4Y2YsIDB4YjMsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4Y2EsCisJMHg4MSwgMHg4OCwgMHgwMSwgMHgwMCwgMHhkZCwgMHg5ZiwgMHhhMiwgMHg0MCwgMHg3NCwgMHg3ZCwgMHgwMCwgMHgwMCwKKwkweDYwLCAweDAwLCAweDIwLCAweDQwLCAweDYwLCAweDk5LCAweDAxLCAweDAwLCAweDFiLCAweDAzLCAweGE4LCAweGIxLAorCTB4ODIsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MWEsIDB4MDMsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHhkZCwgMHg5ZiwgMHgwMCwgMHhjYSwgMHg3OSwgMHhiMywgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRlLCAweDgxLCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4Y2IsIDB4ODMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgyMiwgMHgwMywgMHhhMiwgMHg0MSwgMHg4MSwgMHg1MCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDQ1LCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MmQsIDB4MDMsIDB4OTEsIDB4ODIsIDB4ODIsIDB4MzAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg4YSwgMHg4MCwgMHhiMCwgMHgwMSwgMHgwMCwgMHhhZSwgMHg5ZiwgMHgwMCwgMHg0MCwKKwkweDgwLCAweGNlLCAweDAxLCAweDAwLCAweDJiLCAweDAzLCAweGE2LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4MmQsIDB4MDMsIDB4NTYsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4YjUsIDB4MDMsIDB4MDAsIDB4NDAsCisJMHhhMSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MywgMHgwNywgMHg5MCwgMHgwMSwgMHgwMCwKKwkweGI1LCAweDAzLCAweDAwLCAweDQwLCAweGExLCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUyLAorCTB4MDcsIDB4OTAsIDB4MDEsIDB4MDAsIDB4ZDgsIDB4OWYsIDB4MDAsIDB4NDEsIDB4OGIsIDB4YjMsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZSwgMHg4MSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwKKwkweGNkLCAweDgzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDQ2LCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAorCTB4MzIsIDB4MDMsIDB4YTIsIDB4NDEsIDB4ODEsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NiwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKKwkweDNkLCAweDAzLCAweDkxLCAweDgxLCAweDgyLCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDg5LAorCTB4ODAsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YWUsIDB4OWYsIDB4MDAsIDB4NDAsIDB4ODAsIDB4Y2UsIDB4MDEsIDB4MDAsCisJMHgzYiwgMHgwMywgMHhhNiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgzZCwgMHgwMywgMHg1NSwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGI1LCAweDAzLCAweDAwLCAweDQwLCAweGExLCAweDk5LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTIsIDB4MDcsIDB4OTAsIDB4MDEsIDB4MDAsIDB4YjUsIDB4MDMsIDB4MDAsIDB4NDAsCisJMHhhMSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MywgMHgwNywgMHg5MCwgMHgwMSwgMHgwMCwKKwkweGQ4LCAweDlmLCAweDAwLCAweDQxLCAweDhiLCAweGIzLCAweDAwLCAweDAwLCAweGIwLCAweDAzLCAweDAwLCAweDQwLAorCTB4YTEsIDB4OTksIDB4MDEsIDB4MDAsIDB4YzQsIDB4MTQsIDB4MmYsIDB4NDAsIDB4OTksIDB4YjMsIDB4MDEsIDB4MDAsCisJMHg1NywgMHgwMSwgMHgwMCwgMHg0MCwgMHg0OSwgMHhiMSwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDMwLCAweDk0LCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDkwLCAweDAwLCAweGY4LAorCTB4ODAsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4ZjIsIDB4ODgsIDB4ZTQsIDB4MDEsIDB4MDAsCisJMHgyMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgyMCwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1ZiwKKwkweDIzLCAweDkxLCAweDAxLCAweDAwLCAweDRkLCAweDAzLCAweDFmLCAweDkxLCAweDgwLCAweDMyLCAweDAwLCAweDAwLAorCTB4MzAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MjAsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWYsCisJMHgyMywgMHg5MSwgMHgwMSwgMHgwMCwgMHg1MCwgMHgwMywgMHgxZiwgMHg5MSwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDQwLCAweDAwLCAweDAwLCAweDQwLCAweDIwLCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVmLAorCTB4MjMsIDB4OTEsIDB4MDEsIDB4MDAsIDB4NTMsIDB4MDMsIDB4MWYsIDB4OTEsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1ZiwgMHgyMywgMHg5MSwgMHgwMSwgMHgwMCwgMHg1NSwgMHgwMywgMHgxZiwgMHg5MSwKKwkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDgwLCAweDQwLCAweDIwLCAweDk5LCAweDAxLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsCisJMHg4NCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMiwgMHg0OCwgMHg4NCwgMHg4NCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDVmLCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVjLAorCTB4OGYsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsIDB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg1YSwgMHgwMywgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwMCwgMHg0NywKKwkweDhlLCAweGM4LCAweDAxLCAweDAwLCAweDU4LCAweDAzLCAweDAwLCAweDVjLCAweDhmLCAweDgwLCAweDAwLCAweDAwLAorCTB4ZTAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjEsIDB4OTksIDB4MDEsIDB4MDAsIDB4NTgsIDB4MTUsIDB4MmQsIDB4NDAsCisJMHg4ZCwgMHhiMCwgMHgwMSwgMHgwMCwgMHhkMCwgMHgxNCwgMHgyZCwgMHhmMCwgMHg4OCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGZhLCAweDhhLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ1LAorCTB4ODEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDcsIDB4MDAsIDB4MDAsIDB4NDUsIDB4ODIsIDB4ODgsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywgMHg4YiwgMHhmMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0OCwKKwkweDgzLCAweGUwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ2LCAweDgyLCAweDk0LCAweDAxLCAweDAwLAorCTB4MjAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4NjAsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCisJMHg4ZCwgMHhjMCwgMHgwMSwgMHgwMCwgMHg3NCwgMHgwMywgMHgyMiwgMHg1ZiwgMHg4ZCwgMHg2YywgMHgwMCwgMHgwMCwKKwkweDY1LCAweDAzLCAweGEyLCAweDQxLCAweDgxLCAweDUwLCAweDAwLCAweDAwLCAweDYzLCAweDAzLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODUsIDB4OTgsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKKwkweDg2LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDFjLCAweDAwLCAweDQzLCAweDg2LCAweGQ4LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4YTYsIDB4NDEsIDB4ODUsIDB4NTAsIDB4MDEsIDB4MDAsIDB4NzAsIDB4MDMsIDB4MDAsIDB4NDEsCisJMHg4MywgMHhlMCwgMHgwMCwgMHgwMCwgMHg2ZSwgMHgwMywgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ4LCAweDg1LCAweGUwLCAweDAxLCAweDAwLCAweGQwLCAweDE0LCAweDJmLCAweDQ2LAorCTB4ODQsIDB4OTQsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4NjAsIDB4OTksIDB4MDEsIDB4MDAsCisJMHhjMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDAsIDB4MDAsIDB4NDUsIDB4ODAsIDB4ODgsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywgMHg4YiwgMHhmMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHg0MCwKKwkweDgzLCAweDk4LCAweDAxLCAweDAwLCAweDg1LCAweDAzLCAweGEwLCAweDQxLCAweDgxLCAweDUwLCAweDAwLCAweDAwLAorCTB4ODMsIDB4MDMsIDB4MDAsIDB4NDEsIDB4ODIsIDB4ZTgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDEsCisJMHg4ZSwgMHhjMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4NDksIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDAsIDB4NDAsIDB4ODMsIDB4OTgsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgzOSwgMHgwMCwgMHg0MCwgMHg0NSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDhiLCAweDAzLCAweGEyLCAweDQxLCAweDgzLCAweDUwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MGIsIDB4MDAsIDB4MDAsIDB4NDQsCisJMHg4MiwgMHhmNCwgMHgwMSwgMHgwMCwgMHgxYSwgMHgxNSwgMHgwMCwgMHhhNiwgMHg4NiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDcwLCAweDE1LCAweDAwLCAweDQwLCAweDQ1LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDA4LCAweDAwLCAweDQwLAorCTB4ZjEsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgzOSwgMHgwMCwgMHg0MCwgMHhlMSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDYxLCAweDk5LCAweDAxLCAweDAwLCAweDcwLCAweDE1LCAweDAwLCAweDQzLCAweDYyLCAweDk5LCAweDAxLCAweDAwLAorCTB4OTUsIDB4MDMsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4OTcsIDB4MDMsIDB4MjIsIDB4NWEsCisJMHg3MywgMHg3ZCwgMHgwMCwgMHgwMCwgMHg3YSwgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDk4LCAweDAzLCAweGE4LCAweGIxLCAweDdlLCAweDMxLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDAwLCAweDQyLAorCTB4ODQsIDB4YzgsIDB4MDEsIDB4MDAsIDB4OTAsIDB4MDMsIDB4YTIsIDB4NDEsIDB4ODMsIDB4NTAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4NTgsIDB4MTUsIDB4MmQsIDB4NDAsCisJMHg4ZCwgMHhiMCwgMHgwMSwgMHgwMCwgMHhkMCwgMHgxNCwgMHgyZCwgMHhmMCwgMHg4OCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDhmLCAweGIwLCAweDAxLCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweGE2LAorCTB4OTAsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MDAsIDB4NDgsIDB4OTAsIDB4OTgsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHg5MywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmYSwKKwkweDhhLCAweGIwLCAweDAxLCAweDAwLCAweDgwLCAweDAzLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4MDIsIDB4MDAsIDB4MDAsIDB4YTYsIDB4ODAsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YWMsIDB4MDMsIDB4MjIsIDB4NDAsCisJMHg4MiwgMHg2YywgMHgwMCwgMHgwMCwgMHhiMCwgMHgwMywgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDU4LCAweDAzLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAorCTB4OGQsIDB4YzAsIDB4MDEsIDB4MDAsIDB4YjUsIDB4MDMsIDB4MjIsIDB4NWYsIDB4OGQsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHhhNywgMHgwMywgMHhhMiwgMHg0MSwgMHg5MywgMHg1MCwgMHgwMCwgMHgwMCwgMHhhNSwgMHgwMywgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGZmLCAweDA3LCAweDAwLCAweDQ3LCAweDg0LCAweDg4LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4YTYsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4ZWQsIDB4OWYsIDB4MDAsIDB4NDcsCisJMHg4MCwgMHgzMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMiwgMHgwMCwgMHg0NywgMHg4ZSwgMHhjOCwgMHgwMSwgMHgwMCwKKwkweGIwLCAweDAzLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LAorCTB4NTAsIDB4YjMsIDB4MDEsIDB4MDAsIDB4YmIsIDB4MDMsIDB4MjAsIDB4MTgsIDB4ODksIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHhhNiwgMHg4NCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHhhNiwKKwkweDg2LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDEwLCAweDAwLCAweDQwLCAweDU1LCAweDliLCAweDAxLCAweDAwLAorCTB4YmUsIDB4MDMsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4YTYsCisJMHg4NCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHhhNiwgMHg4NiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDEwLCAweDAwLCAweDQwLCAweDU1LCAweDliLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLAorCTB4NTAsIDB4ZDMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTgsIDB4NGYsIDB4YjMsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywgMHg0ZSwgMHhkMywgMHgwMSwgMHgwMCwgMHg2ZSwgMHgwMywgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDgyLCAweDAzLCAweDAwLCAweDQyLCAweDgwLCAweDMwLCAweDAxLCAweDAwLAorCTB4YjAsIDB4MDMsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4YzcsIDB4MDMsIDB4MjIsIDB4YTcsCisJMHg4ZiwgMHg2YywgMHgwMCwgMHgwMCwgMHg1YSwgMHgwMywgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweGM0LCAweDAzLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4YzgsIDB4MTQsIDB4MmUsIDB4YmIsIDB4ODUsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhlZSwgMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKKwkweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGEyLCAweGEwLCAweGIzLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4YTUsIDB4YjMsIDB4MDEsIDB4MDAsIDB4ZTEsIDB4OWYsIDB4MDAsIDB4Y2EsCisJMHhhNywgMHgzMywgMHgwMSwgMHgwMCwgMHhlMCwgMHg5ZiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGQ2LCAweDAzLCAweDIyLCAweDQyLAorCTB4NzUsIDB4NmYsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MDMsIDB4MjIsIDB4NDEsIDB4NzUsIDB4NmYsIDB4MDAsIDB4MDAsCisJMHhkYSwgMHgwMywgMHgxZSwgMHhjYSwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhkYywgMHgwMywgMHgxZiwgMHhjYSwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGNhLCAweGM5LCAweGIxLCAweDAxLCAweDAwLAorCTB4ZGQsIDB4OWYsIDB4MDAsIDB4NDIsIDB4NzUsIDB4YjMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4Y2EsCisJMHhjZCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhkZCwgMHg5ZiwgMHgwMCwgMHg0MSwgMHg3NSwgMHhiMywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGNhLCAweGNmLCAweGIxLCAweDAxLCAweDAwLCAweGRkLCAweDlmLCAweDAwLCAweDQwLAorCTB4NzUsIDB4YjMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODEsIDB4MDAsIDB4YTYsIDB4YzYsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHhkZCwgMHg5ZiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHhhNiwKKwkweGM2LCAweGIxLCAweDAxLCAweDAwLCAweGRkLCAweDlmLCAweDAwLCAweDQwLCAweDc1LCAweGIzLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg0NSwgMHgwMSwgMHgwMCwgMHg0ZCwgMHg5MywgMHgzMCwgMHgwMSwgMHgwMCwKKwkweDQ1LCAweDAxLCAweDAwLCAweDRlLCAweDkzLCAweDMwLCAweDAxLCAweDAwLCAweDQ1LCAweDAxLCAweDAwLCAweDRjLAorCTB4OTMsIDB4MzAsIDB4MDEsIDB4MDAsIDB4ZWMsIDB4OWYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHhkZCwgMHg5ZiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4NTQsIDB4OTUsIDB4MDAsIDB4NDAsCisJMHg0NSwgMHg5OSwgMHgwMSwgMHgwMCwgMHhkZCwgMHg5ZiwgMHgwMCwgMHhjYSwgMHhlNSwgMHhiMSwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4Y2MsIDB4MTQsIDB4MmUsIDB4NDAsIDB4ODcsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTIsCisJMHhhMCwgMHhiMywgMHgwMSwgMHgwMCwgMHgxNSwgMHgwNCwgMHgwMCwgMHg0MywgMHhiMiwgMHgzMywgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDY4LCAweGRhLCAweDg5LCAweGIwLCAweDAxLCAweDAwLCAweDdjLCAweDAwLCAweDAwLCAweDQwLAorCTB4OGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4ODksIDB4ZjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4OSwgMHhkMCwgMHgwMSwgMHgwMCwgMHgwMywgMHgwMCwgMHgwMCwgMHg0NCwKKwkweDg4LCAweDhjLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDg3LCAweGMwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4YTUsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MTUsIDB4MDQsIDB4MDAsIDB4NDMsCisJMHhiMiwgMHgzMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkYSwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDg3LCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAorCTB4YTUsIDB4YzMsIDB4MDEsIDB4MDAsIDB4MGIsIDB4MDQsIDB4MjIsIDB4NDQsIDB4ODksIDB4NTAsIDB4MDAsIDB4MDAsCisJMHgwYiwgMHgwNCwgMHgyMiwgMHg0NCwgMHg4YiwgMHg1MCwgMHgwMCwgMHgwMCwgMHhmYSwgMHgwMywgMHhhMiwgMHg1MCwKKwkweGE1LCAweDZmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLCAweGE1LCAweGUzLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4Y2EsIDB4YTcsIDB4YjMsIDB4MDEsIDB4MDAsIDB4ZTEsIDB4OWYsIDB4MDAsIDB4YmIsCisJMHg4NSwgMHgzMCwgMHgwMSwgMHgwMCwgMHhjYywgMHgxNCwgMHgyZSwgMHhkMiwgMHg5NSwgMHhjMywgMHgwMSwgMHgwMCwKKwkweGFlLCAweDAzLCAweDAwLCAweGNiLCAweGEzLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDIwLAorCTB4NDIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4ODEsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwOCwgMHgwNCwgMHhhMiwgMHg0MSwgMHg4MSwgMHg1MCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwNCwgMHhhMiwgMHhmMiwKKwkweDgwLCAweDMwLCAweDAwLCAweDAwLCAweGZhLCAweDAzLCAweDAwLCAweDQwLCAweGE1LCAweGIzLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4YTUsIDB4ZTMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4Y2EsCisJMHhhNywgMHhiMywgMHgwMSwgMHgwMCwgMHhlMSwgMHg5ZiwgMHgwMCwgMHhiYiwgMHg4NSwgMHgzMCwgMHgwMSwgMHgwMCwKKwkweGUwLCAweDlmLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDksIDB4MmIsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgxMCwgMHgwMCwgMHg0MCwgMHg4MywgMHg5OCwgMHgwMSwgMHgwMCwgMHhkYiwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweDk0LCAweGI0LCAweDhiLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDksCisJMHgyYiwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHg0MCwgMHg4MywgMHg5OCwgMHgwMSwgMHgwMCwKKwkweGRkLCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDk0LAorCTB4YjQsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGQ5LCAweDJiLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGRhLAorCTB4MjcsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDYsIDB4YzAsIDB4MDAsIDB4NDAsIDB4MmQsIDB4OTksIDB4MDEsIDB4MDAsCisJMHhkZSwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHg0MCwKKwkweDgzLCAweDk4LCAweDAxLCAweDAwLCAweDAyLCAweGM0LCAweDAwLCAweDQxLCAweDJjLCAweDk5LCAweDAxLCAweDAwLAorCTB4ZGUsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDAsIDB4NDAsCisJMHg4MywgMHg5OCwgMHgwMSwgMHgwMCwgMHgwNSwgMHg4MiwgMHgwMCwgMHg0MSwgMHgyYywgMHg5OSwgMHgwMSwgMHgwMCwKKwkweGRlLCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDJkLCAweDA0LCAweDgwLCAweDk0LAorCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MGMsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHgyOCwgMHgwNCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHg4MCwgMHgwMCwgMHg0MCwKKwkweDJkLCAweDk5LCAweDAxLCAweDAwLCAweGRlLCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MzEsIDB4MDQsIDB4MDAsIDB4MTIsCisJMHgxMCwgMHhjOSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0OCwgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwKKwkweGMwLCAweDQ5LCAweDgwLCAweDQwLCAweDBiLCAweDk4LCAweDAxLCAweDAwLCAweDgwLCAweDRiLCAweDgwLCAweDQwLAorCTB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4NDAsIDB4NGQsIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHg0ZiwgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHhjMCwgMHg1MCwgMHg4MCwgMHg0MCwKKwkweDBiLCAweDk4LCAweDAxLCAweDAwLCAweDgwLCAweDUyLCAweDgwLCAweDQwLCAweDBiLCAweDk4LCAweDAxLCAweDAwLAorCTB4NDAsIDB4NTQsIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4NTYsIDB4ODAsIDB4NDAsCisJMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHhjMCwgMHg1NywgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwKKwkweDgwLCAweDU5LCAweDgwLCAweDQwLCAweDBiLCAweDk4LCAweDAxLCAweDAwLCAweDQwLCAweDViLCAweDgwLCAweDQwLAorCTB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4NWQsIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsCisJMHhjMCwgMHg1ZSwgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg2MCwgMHg4MCwgMHg0MCwKKwkweDBiLCAweDk4LCAweDAxLCAweDAwLCAweDQwLCAweDYyLCAweDgwLCAweDQwLCAweDBiLCAweDk4LCAweDAxLCAweDAwLAorCTB4MDAsIDB4NjQsIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4YzAsIDB4NjUsIDB4ODAsIDB4NDAsCisJMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg2NywgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwKKwkweDQwLCAweDY5LCAweDgwLCAweDQwLCAweDBiLCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweDZiLCAweDgwLCAweDQwLAorCTB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4YzAsIDB4NmMsIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsCisJMHg4MCwgMHg2ZSwgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHg0MCwgMHg3MCwgMHg4MCwgMHg0MCwKKwkweDBiLCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweDcyLCAweDgwLCAweDQwLCAweDBiLCAweDk4LCAweDAxLCAweDAwLAorCTB4YzAsIDB4NzMsIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4ODAsIDB4NzUsIDB4ODAsIDB4NDAsCisJMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHg0MCwgMHg3NywgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDc5LCAweDgwLCAweDQwLCAweDBiLCAweDk4LCAweDAxLCAweDAwLCAweGMwLCAweDdhLCAweDgwLCAweDQwLAorCTB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4ODAsIDB4N2MsIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsCisJMHg0MCwgMHg3ZSwgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4NTksIDB4MDQsIDB4MDAsIDB4MTIsIDB4MTAsIDB4YzksIDB4MDAsIDB4MDAsCisJMHgwMCwgMHg4MCwgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MiwgMHg4MCwgMHg0MCwKKwkweDBiLCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweDg0LCAweDgwLCAweDQwLCAweDBiLCAweDk4LCAweDAxLCAweDAwLAorCTB4MDAsIDB4ODYsIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ODgsIDB4ODAsIDB4NDAsCisJMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4YSwgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDhjLCAweDgwLCAweDQwLCAweDBiLCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweDhlLCAweDgwLCAweDQwLAorCTB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4OTAsIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHg5MiwgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg5NCwgMHg4MCwgMHg0MCwKKwkweDBiLCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweDk2LCAweDgwLCAweDQwLCAweDBiLCAweDk4LCAweDAxLCAweDAwLAorCTB4MDAsIDB4OTgsIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4OWEsIDB4ODAsIDB4NDAsCisJMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg5YywgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDllLCAweDgwLCAweDQwLCAweDBiLCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweGEwLCAweDgwLCAweDQwLAorCTB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4YTIsIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHhhNCwgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHhhNiwgMHg4MCwgMHg0MCwKKwkweDBiLCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweGE4LCAweDgwLCAweDQwLCAweDBiLCAweDk4LCAweDAxLCAweDAwLAorCTB4MDAsIDB4YWEsIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4YWMsIDB4ODAsIDB4NDAsCisJMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHhhZSwgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweGIwLCAweDgwLCAweDQwLCAweDBiLCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweGIyLCAweDgwLCAweDQwLAorCTB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4YjQsIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHhiNiwgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHhiOCwgMHg4MCwgMHg0MCwKKwkweDBiLCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweGJhLCAweDgwLCAweDQwLCAweDBiLCAweDk4LCAweDAxLCAweDAwLAorCTB4MDAsIDB4YmMsIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4YmUsIDB4ODAsIDB4NDAsCisJMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODcsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg5NywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YiwgMHg4MCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAxLCAweDAwLCAweDAwLCAweGE2LCAweDgyLCAweGIxLCAweDAxLCAweDAwLCAweDgyLCAweDA0LCAweDg1LCAweDQxLAorCTB4OTcsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4OTcsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg5NywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YiwKKwkweDkwLCAweGIxLCAweDAxLCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweGE2LCAweDkyLCAweGIxLCAweDAxLCAweDAwLAorCTB4ODcsIDB4MDQsIDB4ODUsIDB4NDEsIDB4OTcsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg5MCwgMHgwNCwgMHg2MCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDgwLCAweGIxLCAweDAxLCAweDAwLAorCTB4ZmYsIDB4ZmYsIDB4ZjAsIDB4NGIsIDB4ODIsIDB4ODksIDB4MDEsIDB4MDAsIDB4OTMsIDB4MDQsIDB4NjAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YSwgMHg4MCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAxLCAweDAwLCAweGYwLCAweGE2LCAweDgyLCAweGIxLCAweDAxLCAweDAwLCAweDk2LCAweDA0LCAweDYwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4NGIsIDB4ODQsIDB4ODksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHhmMCwgMHhjMiwgMHgyNCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YSwKKwkweDkwLCAweGIxLCAweDAxLCAweDAwLCAweGZmLCAweGZmLCAweDgwLCAweDRiLCAweDkyLCAweDg5LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGEsIDB4OTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4YTYsCisJMHg5MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHg0YiwgMHg5NCwgMHg4OSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDgwLCAweGNhLCAweDk0LCAweGIwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4NGUsIDB4OTgsIDB4ZTQsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwNywgMHg5OCwgMHg5NCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywKKwkweDk5LCAweGUwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDk4LCAweDk0LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDksIDB4OTksIDB4ZTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGMsCisJMHg4OCwgMHg5NCwgMHgwMSwgMHgwMCwgMHhhNiwgMHgwNCwgMHg0NywgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweGFkLCAweDA0LCAweDIyLCAweDIwLCAweDg3LCAweDZmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFmLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweGE2LCAweDA0LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MWYsIDB4ODAsIDB4ODYsIDB4YjMsIDB4MDEsIDB4MDAsIDB4YjAsIDB4MDQsIDB4MjIsIDB4NGYsCisJMHg3NywgMHg3ZCwgMHgwMCwgMHgwMCwgMHhjMCwgMHgwNCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDRmLCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LAorCTB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YjEsIDB4MDQsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHhiOCwgMHgwNCwgMHgyMiwgMHg0YiwgMHg4OSwgMHg3YywgMHgwMCwgMHgwMCwgMHhiNiwgMHgwNCwgMHgyMiwgMHg0ZiwKKwkweDc3LCAweDdkLCAweDAwLCAweDAwLCAweGMwLCAweDA0LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YjYsIDB4MDQsIDB4YTgsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgyMCwgMHg4NywgMHhiMywgMHgwMSwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsCisJMHg5OSwgMHhiMCwgMHgwMSwgMHgwMCwgMHg2ZiwgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweGMxLCAweDA0LCAweGE4LCAweGIxLCAweDUyLCAweDMzLCAweDAwLCAweDAwLCAweGM2LCAweDA0LCAweDIyLCAweDRiLAorCTB4NTMsIDB4N2YsIDB4MDAsIDB4MDAsIDB4NmYsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjEsIDB4OTksIDB4MDEsIDB4MDAsCisJMHhjNCwgMHgwNCwgMHhhOCwgMHhiMSwgMHg3ZSwgMHgzMSwgMHgwMCwgMHgwMCwgMHhjMSwgMHgwNCwgMHhhMiwgMHg0MSwKKwkweDk5LCAweDUwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGEyLCAweDRmLCAweDc3LCAweGZkLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDRlLCAweDk4LCAweGU0LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4OTgsIDB4OTQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsCisJMHg5OSwgMHhlMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg5OCwgMHg5NCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ4LCAweDk5LCAweGUwLCAweDAxLCAweDAwLCAweGQ2LCAweDA0LCAweDAwLCAweDRjLAorCTB4ODgsIDB4OTQsIDB4MDAsIDB4MDAsIDB4ZDYsIDB4MDQsIDB4NDcsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHhkZCwgMHgwNCwgMHgyMiwgMHgyMCwgMHg4NywgMHg2ZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxZiwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHhkNiwgMHgwNCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDFmLCAweDgwLCAweDg2LCAweGIzLCAweDAxLCAweDAwLCAweGUwLCAweDA0LCAweDIyLCAweDRmLAorCTB4NzcsIDB4N2QsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4MDQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZiwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwKKwkweDYyLCAweGIxLCAweDAxLCAweDAwLCAweGUxLCAweDA0LCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4ZTgsIDB4MDQsIDB4MjIsIDB4NGEsIDB4ODksIDB4N2MsIDB4MDAsIDB4MDAsIDB4ZTYsIDB4MDQsIDB4MjIsIDB4NGYsCisJMHg3NywgMHg3ZCwgMHgwMCwgMHgwMCwgMHhmMCwgMHgwNCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweDYyLCAweGIxLCAweDAxLCAweDAwLCAweGU2LCAweDA0LCAweGE4LCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MjAsIDB4ODcsIDB4YjMsIDB4MDEsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLAorCTB4OTksIDB4YjAsIDB4MDEsIDB4MDAsIDB4NmYsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjEsIDB4OTksIDB4MDEsIDB4MDAsCisJMHhmMSwgMHgwNCwgMHhhOCwgMHhiMSwgMHg1MiwgMHgzMywgMHgwMCwgMHgwMCwgMHhmNiwgMHgwNCwgMHgyMiwgMHg0YSwKKwkweDUzLCAweDdmLCAweDAwLCAweDAwLCAweDZmLCAweDAwLCAweDAwLCAweDQwLCAweDYxLCAweDk5LCAweDAxLCAweDAwLAorCTB4ZjQsIDB4MDQsIDB4YTgsIDB4YjEsIDB4N2UsIDB4MzEsIDB4MDAsIDB4MDAsIDB4ZjEsIDB4MDQsIDB4YTIsIDB4NDEsCisJMHg5OSwgMHg1MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMiwgMHg0ZiwgMHg3NywgMHhmZCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg3YiwgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDA1LCAweGE4LCAweGIxLCAweDgwLCAweDMwLCAweDAwLCAweDAwLCAweDEyLCAweDA1LCAweDFkLCAweDQwLAorCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MTgsIDB4MDAsIDB4NDAsIDB4NDksIDB4OTksIDB4MDEsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHhhNiwgMHg4NiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwNSwgMHhhMiwgMHg0MCwKKwkweDg2LCAweDA0LCAweDAwLCAweDAwLCAweGRlLCAweDlmLCAweDljLCAweDQwLCAweDgwLCAweDMyLCAweDAwLCAweDAwLAorCTB4ZmYsIDB4ZmYsIDB4MDAsIDB4NDAsIDB4ODgsIDB4ODgsIDB4MDEsIDB4MDAsIDB4MzAsIDB4MDUsIDB4MDAsIDB4NTAsCisJMHg0NywgMHgzMSwgMHgwMSwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHg0NCwgMHg4OCwgMHhjYywgMHgwMSwgMHgwMCwKKwkweDBjLCAweDA1LCAweDUyLCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDMwLCAweDA1LCAweDAwLCAweDQwLAorCTB4NDcsIDB4MzEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ODksIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgzMCwgMHgwNSwgMHgwMCwgMHg0OCwgMHg0NywgMHgzMSwgMHgwMSwgMHgwMCwgMHgzMCwgMHgwNSwgMHgwMCwgMHgwNSwKKwkweDQ3LCAweDMxLCAweDAxLCAweDAwLCAweGRlLCAweDlmLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MjgsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDcsIDB4OTksIDB4MWIsIDB4MDAsIDB4ZGUsIDB4OWYsIDB4MDAsIDB4NDEsCisJMHhlMSwgMHhjMSwgMHgxYSwgMHgwMCwgMHg3OCwgMHgxOCwgMHgwMCwgMHg0MCwgMHg0OSwgMHg5OSwgMHgxYiwgMHgwMCwKKwkweDE5LCAweDA1LCAweDIyLCAweDU0LCAweDgxLCAweDdjLCAweDFhLCAweDAwLCAweDE0LCAweDA1LCAweDQyLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MWEsIDB4MDAsIDB4MDAsIDB4ODIsIDB4MDAsIDB4YjMsIDB4NjcsIDB4ZGYsIDB4MWIsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgxYSwgMHg0NCwgMHg5MywgMHg5MywgMHgxYiwgMHgwMCwgMHgyOCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDQ3LCAweDk5LCAweDFiLCAweDAwLCAweDMwLCAweDA1LCAweDAwLCAweDQxLCAweDg5LCAweDMwLCAweDAxLCAweDAwLAorCTB4MjcsIDB4MDUsIDB4MGYsIDB4NDAsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4N2YsIDB4MDAsIDB4NDAsCisJMHg4OCwgMHg4OCwgMHgwMSwgMHgwMCwgMHgzMCwgMHgwNSwgMHgwMCwgMHg1MCwgMHg0NywgMHgzMSwgMHgwMSwgMHgwMCwKKwkweDM2LCAweDAwLCAweDAwLCAweDQ0LCAweDg4LCAweGNjLCAweDAxLCAweDAwLCAweDFmLCAweDA1LCAweDk5LCAweDQwLAorCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDgsIDB4ODksIDB4ZDAsIDB4MDEsIDB4MDAsCisJMHgyMSwgMHgwNSwgMHg5YiwgMHg0MCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YywKKwkweDg5LCAweGQwLCAweDAxLCAweDAwLCAweDIzLCAweDA1LCAweDFmLCAweDQ0LCAweDgwLCAweDMyLCAweDAwLCAweDAwLAorCTB4MzAsIDB4MDUsIDB4MDAsIDB4NDAsIDB4NDcsIDB4MzEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCisJMHg4OSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgzMCwgMHgwNSwgMHgwMCwgMHg0OCwgMHg0NywgMHgzMSwgMHgwMSwgMHgwMCwKKwkweDMwLCAweDA1LCAweDAwLCAweDU4LCAweDQ3LCAweDMxLCAweDAxLCAweDAwLCAweGRlLCAweDlmLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODYsIDB4ZjQsIDB4MDEsIDB4MDAsCisJMHg2ZiwgMHgwMCwgMHgwMCwgMHg0MywgMHg4NiwgMHg4OCwgMHgwMSwgMHgwMCwgMHhkZSwgMHg5ZiwgMHgyNiwgMHgwNSwKKwkweDQ3LCAweDMxLCAweDAwLCAweDAwLCAweDMwLCAweDA1LCAweDAwLCAweDQxLCAweDg5LCAweDMwLCAweDAxLCAweDAwLAorCTB4ZGUsIDB4OWYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTAsIDB4NDQsIDB4ZjAsIDB4NDEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MSwKKwkweGUxLCAweGMxLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDRjLCAweDAxLCAweDAwLCAweDA3LAorCTB4OTEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTIsIDB4NDAsIDB4OTcsIDB4ZWMsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg4MCwgMHgwNSwgMHg5MSwgMHhjMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDRjLCAweDAxLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDQ0LCAweDA1LCAweGEyLCAweDQwLAorCTB4OTcsIDB4NmMsIDB4MDAsIDB4MDAsIDB4M2EsIDB4MDAsIDB4MDAsIDB4NDAsIDB4YjMsIDB4OWIsIDB4MDEsIDB4MDAsCisJMHg0NSwgMHgwNSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweGIzLCAweDliLCAweDAxLCAweDAwLCAweDEwLCAweDA0LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZGEsIDB4ZjUsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDQsIDB4MDAsIDB4NDIsCisJMHhiMywgMHg0MywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkYSwgMHhmNSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDEwLCAweDA0LCAweDAwLCAweDQyLCAweGIzLCAweDQzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGRhLAorCTB4ZjUsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NGUsIDB4MDAsIDB4MDAsIDB4NDAsIDB4YjMsIDB4OWIsIDB4MDEsIDB4MDAsCisJMHgxMCwgMHgwNCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHhkYSwKKwkweGY3LCAweGY1LCAweDAxLCAweDAwLCAweDUwLCAweDAwLCAweDAwLCAweDQwLCAweDkxLCAweDk4LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsIDB4OGYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDQsIDB4MDAsIDB4NDgsCisJMHhiMiwgMHgzMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkYSwgMHhmNywgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDA4LCAweDAwLCAweDAwLCAweGRhLCAweGY3LCAweGY1LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLAorCTB4OTEsIDB4YzAsIDB4MDEsIDB4MDAsIDB4NTAsIDB4MDUsIDB4YTIsIDB4NDEsIDB4OGYsIDB4NTAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg0NSwgMHhkMSwgMHgwMSwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweGIzLCAweDliLCAweDAxLCAweDAwLCAweDEwLCAweDA0LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZGEsIDB4ZmQsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MGEsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHhiMywgMHg5YiwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwNCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGRhLCAweGZkLCAweGIxLCAweDAxLCAweDAwLCAweDFhLCAweDAwLCAweDAwLCAweDQwLAorCTB4YjMsIDB4OWIsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhkYSwgMHhmZCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgxOCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweGIzLCAweDliLCAweDAxLCAweDAwLCAweDEwLCAweDA0LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZGEsIDB4ZmQsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MzgsIDB4MDUsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgxZSwgMHgwMCwgMHgwMCwgMHg0OCwgMHhiMiwgMHhjYiwgMHgwMSwgMHgwMCwKKwkweDEwLCAweDA0LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGRhLAorCTB4OTEsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDgsIDB4YjIsIDB4Y2IsIDB4MDEsIDB4MDAsCisJMHgxMCwgMHgwNCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2ZSwgMHhkYSwKKwkweDhmLCAweGIwLCAweDAxLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDQ4LCAweGIyLCAweGNiLCAweDAxLCAweDAwLAorCTB4MTAsIDB4MDQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZGEsCisJMHhmZCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0OCwgMHhiMiwgMHhjYiwgMHgwMSwgMHgwMCwKKwkweDEwLCAweDA0LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweGRhLAorCTB4ZmQsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHg3YSwgMHgwNSwgMHgyMiwgMHg0NSwgMHhmZCwgMHg3ZiwgMHgwMCwgMHgwMCwgMHg0MCwgMHgxNiwgMHgwMCwgMHg0MCwKKwkweDQ1LCAweDk5LCAweDAxLCAweDAwLCAweGRiLCAweDlmLCAweDAwLCAweDQwLCAweDQ5LCAweDMxLCAweDAxLCAweDAwLAorCTB4MDgsIDB4MDAsIDB4MDAsIDB4NDgsIDB4YjIsIDB4Y2IsIDB4MDEsIDB4MDAsIDB4MTUsIDB4MDQsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHg3OCwgMHgwNSwgMHhhMiwgMHg0MCwgMHg4ZiwgMHg2YywgMHgwMCwgMHgwMCwKKwkweDdkLCAweDA1LCAweDIyLCAweDIwLCAweGI1LCAweDZmLCAweDAwLCAweDAwLCAweDdhLCAweDA1LCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4ZGEsIDB4OWYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MWYsIDB4MDAsCisJMHg3ZCwgMHgwNSwgMHgyMiwgMHg0MCwgMHg5NywgMHg2YywgMHgxZSwgMHgwMCwgMHg3YSwgMHgwNSwgMHg0MiwgMHg0MCwKKwkweDgxLCAweDMyLCAweDFlLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRmLCAweDY3LCAweDkzLCAweDFmLCAweDAwLAorCTB4ZGYsIDB4OWYsIDB4MDAsIDB4NTgsIDB4NjcsIDB4OTMsIDB4MWUsIDB4MDAsIDB4NTQsIDB4MTYsIDB4MDAsIDB4NDAsCisJMHg0NywgMHg5OSwgMHgxZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmZSwgMHhmNCwgMHhiMSwgMHgxZiwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDFmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZlLAorCTB4ZjQsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmZSwgMHhmNCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZlLCAweGY0LCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmUsCisJMHhmNCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGZlLCAweGY0LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmUsIDB4ZjQsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg0NiwgMHgwMCwgMHgwMCwgMHg0MCwgMHhiMywgMHg5YiwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwNCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweGRhLCAweGY3LCAweGY1LCAweDAxLCAweDAwLAorCTB4NDgsIDB4MDAsIDB4MDAsIDB4NDAsIDB4OTUsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsCisJMHg5NywgMHhiMCwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwNCwgMHgwMCwgMHg0YSwgMHhiMiwgMHgzMywgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGRhLCAweGY3LCAweGIxLCAweDAxLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweGRhLAorCTB4ZjcsIDB4ZjUsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4OTUsIDB4YzAsIDB4MDEsIDB4MDAsCisJMHg5MCwgMHgwNSwgMHhhMiwgMHg0MSwgMHg5NywgMHg1MCwgMHgwMCwgMHgwMCwgMHgyYSwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweGE1LCAweDliLCAweDAxLCAweDAwLCAweDQwLCAweDE2LCAweDAwLCAweDQwLCAweGExLCAweDliLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4Y2EsIDB4YTcsIDB4YjMsIDB4MDEsIDB4MDAsIDB4ZTEsIDB4OWYsIDB4MDAsIDB4YmIsCisJMHg4NSwgMHgzMCwgMHgwMSwgMHgwMCwgMHhlMCwgMHg5ZiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4YjgsIDB4MDUsIDB4MjIsIDB4NDUsIDB4ZmQsIDB4N2YsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MTUsIDB4MDAsIDB4NDAsCisJMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwgMHgxYSwgMHgwMCwgMHgwMCwgMHhhMiwgMHg4MCwgMHhkYywgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDUwLCAweGYxLCAweGIxLCAweDAxLCAweDAwLCAweGYwLCAweDE1LCAweDAwLCAweDQwLAorCTB4ZjEsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4Y2EsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwNywgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweGE3LCAweDA1LCAweGE4LCAweGJiLCAweGUxLCAweDMxLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4ODMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YWEsIDB4MDUsIDB4YTIsIDB4NDEsCisJMHg4MywgMHg1MCwgMHgwMCwgMHgwMCwgMHhhOSwgMHgwNSwgMHhhMiwgMHhmMiwgMHg4MiwgMHgzMCwgMHgwMCwgMHgwMCwKKwkweDRjLCAweDAxLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGIwLCAweDA1LCAweGEyLCAweDQwLAorCTB4OTcsIDB4NmMsIDB4MDAsIDB4MDAsIDB4M2EsIDB4MDAsIDB4MDAsIDB4NDAsIDB4YjMsIDB4OWIsIDB4MDEsIDB4MDAsCisJMHhiMSwgMHgwNSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweGIzLCAweDliLCAweDAxLCAweDAwLCAweGYwLCAweDE1LCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLAorCTB4MTAsIDB4MDQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4YjgsIDB4MDUsIDB4YTIsIDB4ZmEsCisJMHhiNCwgMHg2ZiwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwNCwgMHgwMCwgMHg0MiwgMHhiMywgMHg0MywgMHgwMSwgMHgwMCwKKwkweGI4LCAweDA1LCAweGEyLCAweGZhLCAweGI0LCAweDZmLCAweDAwLCAweDAwLCAweDEwLCAweDA0LCAweDAwLCAweDQyLAorCTB4YjMsIDB4NDMsIDB4MDEsIDB4MDAsIDB4YmIsIDB4MDUsIDB4MjIsIDB4ZmEsIDB4YjQsIDB4NmYsIDB4MDAsIDB4MDAsCisJMHhiOCwgMHgwNSwgMHg0MiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgyMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZSwKKwkweDY3LCAweDkzLCAweDIxLCAweDAwLCAweGRmLCAweDlmLCAweDAwLCAweDU4LCAweDY3LCAweDkzLCAweDIwLCAweDAwLAorCTB4NDAsIDB4MTYsIDB4MDAsIDB4NDAsIDB4NDUsIDB4OTksIDB4MjEsIDB4MDAsIDB4ZGIsIDB4OWYsIDB4MDAsIDB4NDAsCisJMHg0OSwgMHgzMSwgMHgyMSwgMHgwMCwgMHhmNiwgMHgxNSwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgyMSwgMHgwMCwKKwkweDVjLCAweDE2LCAweDAwLCAweDQwLCAweDQ1LCAweDk5LCAweDIxLCAweDAwLCAweDAwLCAweDAwLCAweDZlLCAweGZhLAorCTB4OGUsIDB4YjAsIDB4MjEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmZSwgMHhmNCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZlLCAweGY0LCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsCisJMHhiNCwgMHhiMywgMHgwMSwgMHgwMCwgMHhjOSwgMHgwNSwgMHhhMiwgMHg0MCwgMHg4ZiwgMHg2YywgMHgwMCwgMHgwMCwKKwkweGZjLCAweDE1LCAweDIwLCAweDIwLCAweGUxLCAweGIxLCAweDAxLCAweDAwLCAweGNlLCAweDA1LCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MjQsIDB4MDAsIDB4ZGEsIDB4OWYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MjUsIDB4MDAsCisJMHhjZSwgMHgwNSwgMHgyMiwgMHg0MCwgMHg5NywgMHg2YywgMHgyNCwgMHgwMCwgMHhjYiwgMHgwNSwgMHg0MiwgMHg0MCwKKwkweDgxLCAweDMyLCAweDI0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRmLCAweDY3LCAweDkzLCAweDI1LCAweDAwLAorCTB4ZGYsIDB4OWYsIDB4MDAsIDB4NTgsIDB4NjcsIDB4OTMsIDB4MjQsIDB4MDAsIDB4MzgsIDB4MDUsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgyNSwgMHgwMCwgMHgxZSwgMHgwMCwgMHgwMCwgMHg0OCwgMHhiMiwgMHhjYiwgMHgyNSwgMHgwMCwKKwkweDEwLCAweDA0LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGQzLCAweDA1LCAweDIyLCAweDUwLAorCTB4YjUsIDB4NmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4OTEsIDB4YzAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0OCwgMHhiMiwgMHhjYiwgMHgwMSwgMHgwMCwgMHhmNiwgMHgxNSwgMHgwMCwgMHg0MCwKKwkweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDIwLCAweDA0LCAweDAwLCAweGYyLCAweGI0LCAweDMzLCAweDAxLCAweDAwLAorCTB4MDIsIDB4MDAsIDB4MDAsIDB4NDgsIDB4YjIsIDB4Y2IsIDB4MDEsIDB4MDAsIDB4ZjgsIDB4MTUsIDB4MDAsIDB4NDAsCisJMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwNCwgMHgwMCwgMHhmMiwgMHhiNCwgMHgzMywgMHgwMSwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQ4LCAweGIyLCAweGNiLCAweDAxLCAweDAwLCAweGZhLCAweDE1LCAweDAwLCAweDQwLAorCTB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDQsIDB4MDAsIDB4ZjIsIDB4YjQsIDB4MzMsIDB4MDEsIDB4MDAsCisJMHgwOCwgMHgwMCwgMHgwMCwgMHg0OCwgMHhiMiwgMHhjYiwgMHgwMSwgMHgwMCwgMHhmYywgMHgxNSwgMHgwMCwgMHg0MCwKKwkweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLCAweDk0LCAweGIwLCAweDAxLCAweDAwLAorCTB4ZmYsIDB4ZmYsIDB4MDAsIDB4NGEsIDB4YjQsIDB4OGIsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDQsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwYSwgMHgwMCwgMHgwMCwgMHg0OCwgMHhiMiwgMHhjYiwgMHgwMSwgMHgwMCwKKwkweDEwLCAweDAwLCAweDAwLCAweDRhLCAweGI0LCAweGY3LCAweDAxLCAweDAwLCAweDIwLCAweDA0LCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MzgsIDB4MDUsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHgxZSwgMHgwMCwgMHgwMCwgMHg0OCwgMHhiMiwgMHhjYiwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwNCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGU5LCAweDA1LCAweDIyLCAweDUwLCAweGI1LCAweDZmLCAweDAwLCAweDAwLAorCTB4ZWEsIDB4MDUsIDB4MDAsIDB4NTAsIDB4YjUsIDB4YjMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHhiNSwgMHhiMywgMHgwMSwgMHgwMCwgMHgyMCwgMHgwNCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweGUwLCAweDlmLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDE2LCAweDAwLCAweDQwLCAweDQ3LCAweDk5LCAweDAxLCAweDAwLAorCTB4MzAsIDB4MzEsIDB4MDAsIDB4NDAsIDB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MzIsIDB4MzMsIDB4MDAsIDB4NDAsCisJMHhmNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgzNCwgMHgzNSwgMHgwMCwgMHg0MCwgMHhmNSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDM2LCAweDM3LCAweDAwLCAweDQwLCAweGY1LCAweDk5LCAweDAxLCAweDAwLCAweDM4LCAweDM5LCAweDAwLCAweDQwLAorCTB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsIDB4NDEsIDB4NDIsIDB4MDAsIDB4NDAsIDB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsCisJMHg0MywgMHg0NCwgMHgwMCwgMHg0MCwgMHhmNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHg0NSwgMHg0NiwgMHgwMCwgMHg0MCwKKwkweGY1LCAweDk5LCAweDAxLCAweDAwLCAweDQ3LCAweDQ4LCAweDAwLCAweDQwLCAweGY1LCAweDk5LCAweDAxLCAweDAwLAorCTB4NDksIDB4NGEsIDB4MDAsIDB4NDAsIDB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MmMsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MywgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmNywgMHhiMSwgMHgwMSwgMHgwMCwKKwkweGZjLCAweDA1LCAweGEyLCAweDQxLCAweDgzLCAweDUwLCAweDAwLCAweDAwLCAweDgwLCAweDE2LCAweDJlLCAweDA2LAorCTB4ODMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MzYsIDB4MDAsIDB4MDAsIDB4ZmIsIDB4ZjYsIDB4YTksIDB4MDEsIDB4MDAsCisJMHhmZiwgMHgwNSwgMHhhMiwgMHg0MSwgMHg4MywgMHg1MCwgMHgwMCwgMHgwMCwgMHgyMiwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgzLCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZiLCAweGY2LCAweGIxLCAweDAxLCAweDAwLAorCTB4MDIsIDB4MDYsIDB4YTIsIDB4NDEsIDB4ODMsIDB4NTAsIDB4MDAsIDB4MDAsIDB4NjIsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg5NSwgMHg5OCwgMHgwMSwgMHgwMCwgMHhkYywgMHg5ZiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDE2LCAweDJkLCAweDA2LCAweDgzLCAweGIwLCAweDAxLCAweDAwLCAweDgwLCAweDE2LCAweDAwLCAweDQwLAorCTB4NDUsIDB4OTksIDB4MDEsIDB4MDAsIDB4NWMsIDB4MDAsIDB4MDAsIDB4ZmIsIDB4ZjYsIDB4YTksIDB4MDEsIDB4MDAsCisJMHgwOCwgMHgwNiwgMHhhMiwgMHg0MSwgMHg4MywgMHg1MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3MCwKKwkweGY5LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDcxLCAweGY5LCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NzIsIDB4ZjksIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzMsCisJMHhmOSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3NCwgMHhmOSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDU0LCAweDAwLCAweDAwLCAweDQwLCAweDk1LCAweDk4LCAweDAxLCAweDAwLCAweGRjLCAweDlmLCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzAsIDB4OTUsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgxNCwgMHgwNiwgMHgyMiwgMHg3MCwgMHhiNSwgMHg2ZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MSwKKwkweDk3LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQwLCAweDk3LCAweGIwLCAweDAxLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDQ1LCAweDY3LCAweDAwLCAweGE2LCAweGUwLCAweGIyLCAweDAxLCAweDAwLCAweDAxLCAweDIzLCAweDAwLCAweDcwLAorCTB4ZTEsIDB4OWEsIDB4MDEsIDB4MDAsIDB4Y2QsIDB4ZWYsIDB4MDAsIDB4YTYsIDB4ZTIsIDB4YjIsIDB4MDEsIDB4MDAsCisJMHg4OSwgMHhhYiwgMHgwMCwgMHg3MSwgMHhlMywgMHg5YSwgMHgwMSwgMHgwMCwgMHhiYSwgMHg5OCwgMHgwMCwgMHhhNiwKKwkweGU0LCAweGIyLCAweDAxLCAweDAwLCAweGZlLCAweGRjLCAweDAwLCAweDcyLCAweGU1LCAweDlhLCAweDAxLCAweDAwLAorCTB4MzIsIDB4MTAsIDB4MDAsIDB4YTYsIDB4ZTYsIDB4YjIsIDB4MDEsIDB4MDAsIDB4NzYsIDB4NTQsIDB4MDAsIDB4NzMsCisJMHhlNywgMHg5YSwgMHgwMSwgMHgwMCwgMHhkMiwgMHhjMywgMHgwMCwgMHhhNiwgMHhlOCwgMHhiMiwgMHgwMSwgMHgwMCwKKwkweGYwLCAweGUxLCAweDAwLCAweDc0LCAweGU5LCAweDlhLCAweDAxLCAweDAwLCAweDgwLCAweDE2LCAweDAwLCAweDRhLAorCTB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4ODEsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0YSwgMHg4MCwgMHhkMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweGY3LCAweGIxLCAweDAxLCAweDAwLCAweDI1LCAweDA2LCAweGEyLCAweDQxLCAweDgxLCAweDUwLCAweDAwLCAweDAwLAorCTB4ODAsIDB4MTYsIDB4MDAsIDB4NGEsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4ZmMsIDB4MTYsIDB4MmEsIDB4NDcsCisJMHhlNywgMHhiNSwgMHgwMSwgMHgwMCwgMHgwMywgMHgwMCwgMHgwMCwgMHg0YSwgMHhlOCwgMHhlNSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDhkLCAweGIwLCAweDAxLCAweDAwLCAweDUwLCAweDAzLCAweDAwLCAweDQwLAorCTB4YTMsIDB4OTksIDB4MDEsIDB4MDAsIDB4ODAsIDB4MTYsIDB4M2QsIDB4NDYsIDB4OGQsIDB4ZTAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHg4OSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmYywKKwkweDQwLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweGEzLCAweGMxLCAweDAxLCAweDAwLAorCTB4MmUsIDB4MDYsIDB4YTIsIDB4NDEsIDB4ODksIDB4NTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzAsCisJMHhlYiwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3MSwgMHhlZCwgMHhiMiwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDcyLCAweGVmLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDczLAorCTB4ZjEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzQsIDB4ZjMsIDB4YjIsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwZiwgMHgwMCwgMHgwMCwgMHg0MSwKKwkweDgwLCAweDg4LCAweDAxLCAweDAwLCAweDUwLCAweDAzLCAweDAwLCAweDQwLCAweGEyLCAweGM5LCAweDAxLCAweDAwLAorCTB4NGIsIDB4MDYsIDB4YTAsIDB4NTAsIDB4ODMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MGQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg5OCwgMHhjOCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZiwgMHg5OSwgMHg4NCwgMHgwMSwgMHgwMCwKKwkweDUwLCAweDAzLCAweDAwLCAweDRjLCAweGEyLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDIwLAorCTB4ODYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4NDAsIDB4OTgsIDB4YzgsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZiwgMHg5OSwgMHg4NCwgMHgwMSwgMHgwMCwgMHg1MCwgMHgwMywgMHgwMCwgMHg0YywKKwkweGEyLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDIwLCAweDg2LCAweGE0LCAweDAxLCAweDAwLAorCTB4MDIsIDB4MDAsIDB4MDAsIDB4NDAsIDB4OTgsIDB4YzgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGYsCisJMHg5OSwgMHg4NCwgMHgwMSwgMHgwMCwgMHg1MCwgMHgwMywgMHgwMCwgMHg0YywgMHhhMiwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDIwLCAweDg2LCAweGE0LCAweDAxLCAweDAwLCAweDUwLCAweDAzLCAweDAwLCAweDQwLAorCTB4YTIsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4NDAsIDB4YTQsIDB4MDEsIDB4MDAsCisJMHgwMSwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4OCwgMHhlNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1ZiwKKwkweDQxLCAweGYwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDQwLCAweDk0LCAweDAxLCAweDAwLAorCTB4MDUsIDB4MDAsIDB4MDAsIDB4NzUsIDB4ODksIDB4ZTQsIDB4MDEsIDB4MDAsIDB4MWIsIDB4MDAsIDB4MDAsIDB4NzUsCisJMHg4NSwgMHhmNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg4NCwgMHg5NCwgMHgwMSwgMHgwMCwKKwkweDU1LCAweDA2LCAweGEzLCAweDUzLCAweDgzLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc2LAorCTB4ODksIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzcsIDB4ODksIDB4ODQsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg3NiwgMHg4YiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDhiLCAweGE0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweDhiLCAweDg0LCAweDAxLCAweDAwLAorCTB4NjQsIDB4MDYsIDB4MDAsIDB4NDUsIDB4ODgsIDB4OTQsIDB4MDAsIDB4MDAsIDB4MjcsIDB4MDAsIDB4MDAsIDB4NDEsCisJMHg4MCwgMHhjZSwgMHgwMSwgMHgwMCwgMHg1YSwgMHgwNiwgMHhhYSwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDc2LCAweDg5LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc3LAorCTB4ODksIDB4YTQsIDB4MDEsIDB4MDAsIDB4NjQsIDB4MDYsIDB4MDAsIDB4NzgsIDB4ODksIDB4YTQsIDB4MDAsIDB4MDAsCisJMHgzYiwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4MCwgMHhjZSwgMHgwMSwgMHgwMCwgMHg1NywgMHgwNiwgMHhhYSwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc2LCAweDg5LCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NzcsIDB4ODksIDB4ODQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzYsCisJMHg4YiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3OCwgMHg4YiwgMHg4NCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweDg4LCAweDk0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc3LAorCTB4OGIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzgsIDB4OGIsIDB4ODQsIDB4MDEsIDB4MDAsCisJMHg2NCwgMHgwNiwgMHgwMCwgMHg0NSwgMHg4OCwgMHg5NCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwKKwkweDg0LCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc5LCAweDg1LCAweGMwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODQsIDB4YzAsIDB4MDEsIDB4MDAsIDB4NmIsIDB4MDYsIDB4YTMsIDB4NTMsCisJMHg4MywgMHg2YywgMHgwMCwgMHgwMCwgMHg4MiwgMHg1YSwgMHgwMCwgMHhhNiwgMHg4NCwgMHhjMCwgMHgwMSwgMHgwMCwKKwkweDk5LCAweDc5LCAweDAwLCAweDQyLCAweDg0LCAweGM4LCAweDAxLCAweDAwLCAweDc4LCAweDA2LCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MjcsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ODAsIDB4Y2UsIDB4MDEsIDB4MDAsCisJMHg3MCwgMHgwNiwgMHhhYSwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhkOSwgMHg2ZSwgMHgwMCwgMHhhNiwKKwkweDg0LCAweGMwLCAweDAxLCAweDAwLCAweGExLCAweGViLCAweDAwLCAweDQyLCAweDg0LCAweGM4LCAweDAxLCAweDAwLAorCTB4NzgsIDB4MDYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4M2IsIDB4MDAsIDB4MDAsIDB4NDEsCisJMHg4MCwgMHhjZSwgMHgwMSwgMHgwMCwgMHg3NSwgMHgwNiwgMHhhYSwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDFiLCAweDhmLCAweDAwLCAweGE2LCAweDg0LCAweGMwLCAweDAxLCAweDAwLCAweGRjLCAweGJjLCAweDAwLCAweDQyLAorCTB4ODQsIDB4YzgsIDB4MDEsIDB4MDAsIDB4NzgsIDB4MDYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHg2MiwgMHhjYSwgMHgwMCwgMHhhNiwgMHg4NCwgMHhjMCwgMHgwMSwgMHgwMCwgMHhkNiwgMHhjMSwgMHgwMCwgMHg0MiwKKwkweDg0LCAweGM4LCAweDAxLCAweDAwLCAweDc4LCAweDA2LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NzgsIDB4ZjMsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzcsCisJMHhmMSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgxZSwgMHgwMCwgMHgwMCwgMHg3NiwgMHg4OSwgMHhlNCwgMHgwMSwgMHgwMCwKKwkweDAyLCAweDAwLCAweDAwLCAweDc2LCAweGVmLCAweGY2LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LAorCTB4ZWUsIDB4OTYsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzUsIDB4ZWQsIDB4YjIsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHhlYSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKKwkweDgzLCAweGMwLCAweDAxLCAweDAwLCAweDRmLCAweDAwLCAweDAwLCAweDQxLCAweDgwLCAweGNlLCAweDAxLCAweDAwLAorCTB4MzcsIDB4MDYsIDB4MmEsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzUsCisJMHhlMSwgMHhjMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3NiwgMHhlMywgMHhjMiwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDc3LCAweGU1LCAweGMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LAorCTB4ZTcsIDB4YzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzksIDB4ZTksIDB4YzIsIDB4MDEsIDB4MDAsCisJMHgyYiwgMHgwNiwgMHg4MSwgMHg0MSwgMHg4ZCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHhmZCwgMHg5MywgMHgwMSwgMHgwMCwgMHg0MCwgMHgxNiwgMHgwMCwgMHg0MCwKKwkweDQ1LCAweDk5LCAweDAxLCAweDAwLCAweGRiLCAweDlmLCAweDAwLCAweDQwLCAweDQ5LCAweDMxLCAweDAxLCAweDAwLAorCTB4MDgsIDB4MDAsIDB4MDAsIDB4NDgsIDB4YjIsIDB4Y2IsIDB4MDEsIDB4MDAsIDB4MTUsIDB4MDQsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhiOSwgMHgwNiwgMHgyMiwgMHg0MCwgMHg4ZiwgMHg2YywgMHgwMCwgMHgwMCwKKwkweGRhLCAweDlmLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGI5LCAweDA2LCAweGEyLCAweDQwLAorCTB4OTcsIDB4NmMsIDB4MDAsIDB4MDAsIDB4NWUsIDB4MTYsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsCisJMHg3YywgMHgxNiwgMHgyMCwgMHhmNiwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDMxLCAweGIzLCAweDAxLCAweDAwLCAweDlkLCAweDA2LCAweDIyLCAweDRmLCAweDhmLCAweDdjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTEsIDB4ZmQsIDB4OTMsIDB4MDEsIDB4MDAsIDB4OWYsIDB4MDYsIDB4MjIsIDB4NDAsCisJMHg4ZiwgMHg3YywgMHgwMCwgMHgwMCwgMHhhMywgMHgwNiwgMHgwMCwgMHg1NCwgMHhmZCwgMHg5MywgMHgwMCwgMHgwMCwKKwkweGExLCAweDA2LCAweDIyLCAweDQyLCAweDhmLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUyLAorCTB4ZmQsIDB4OTMsIDB4MDEsIDB4MDAsIDB4YTMsIDB4MDYsIDB4MjIsIDB4NDEsIDB4OGYsIDB4N2MsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1MywgMHhmZCwgMHg5MywgMHgwMSwgMHgwMCwgMHhiNywgMHgwNiwgMHgyMiwgMHg1MSwKKwkweGZkLCAweDdmLCAweDAwLCAweDAwLCAweDM4LCAweDA1LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4MGMsIDB4MDAsIDB4MDAsIDB4NDgsIDB4YjIsIDB4Y2IsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDQsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhiMiwgMHgwNiwgMHhhMiwgMHg0MCwgMHhiNSwgMHg2ZiwgMHgwMCwgMHgwMCwKKwkweDFlLCAweDAwLCAweDAwLCAweDQ4LCAweGIyLCAweGNiLCAweDAxLCAweDAwLCAweDEwLCAweDA0LCAweDAwLCAweDQ4LAorCTB4OTYsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZGEsIDB4OTcsIDB4YzAsIDB4MDEsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0YiwgMHhiMiwgMHhjYiwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwNCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDBlLCAweDAwLCAweDAwLCAweDQ4LCAweGIyLCAweGNiLCAweDAxLCAweDAwLAorCTB4MjAsIDB4MDQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MGMsIDB4MDAsIDB4MDAsIDB4NDgsCisJMHhiMiwgMHhjYiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzMCwgMHhiNSwgMHhiMywgMHgwMSwgMHgwMCwKKwkweDIwLCAweDA0LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDBlLCAweDAwLCAweDAwLCAweDQ4LAorCTB4YjIsIDB4Y2IsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHhiNiwgMHgwNiwgMHgyMiwgMHg0MCwgMHhiNSwgMHg2ZiwgMHgwMCwgMHgwMCwgMHhiYSwgMHgwNiwgMHgwMCwgMHg1NCwKKwkweGZkLCAweDkzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUxLCAweGZkLCAweDgzLCAweDAxLCAweDAwLAorCTB4MWMsIDB4MDAsIDB4MDAsIDB4ZmUsIDB4N2YsIDB4ZDksIDB4MDEsIDB4MDAsIDB4YmEsIDB4MDYsIDB4YTYsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1NSwgMHhmZCwgMHg5MywgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDgwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4ZTcsIDB4OWYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4YzQsIDB4MDYsIDB4MjIsIDB4NWMsCisJMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHhlMywgMHg5ZiwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKKwkweGU5LCAweDlmLCAweDAwLCAweDVjLCAweDFmLCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJlLCAweDA1LAorCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZTEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgyZCwgMHgwMywgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwKKwkweDNjLCAweGIwLCAweDAxLCAweDAwLCAweDI4LCAweDAwLCAweDAwLCAweDE0LCAweDAyLCAweGM4LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MzQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmQsIDB4MDUsCisJMHgzMiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgyMiwgMHgwMCwgMHgwMCwgMHgwNSwgMHgwYSwgMHhjOCwgMHgwMSwgMHgwMCwKKwkweDEwLCAweDAwLCAweDAwLCAweDAzLCAweDQ4LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LAorCTB4MTgsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MDQsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgwZSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwYywgMHgwMCwgMHgwMCwgMHhhNCwKKwkweDBjLCAweGM4LCAweDAxLCAweDAwLCAweGVhLCAweDlmLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MjMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MGEsIDB4MDcsIDB4MjIsIDB4MDEsCisJMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzYywgMHg0NCwgMHgyMywgMHhlMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDJlLCAweGE0LCAweDgwLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLAorCTB4NDgsIDB4YzEsIDB4MDEsIDB4MDAsIDB4ZDksIDB4MDYsIDB4YTMsIDB4MDcsIDB4MDIsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHhkYSwgMHgwNiwgMHg2OCwgMHgwMSwgMHgxYSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2OCwgMHgwNywKKwkweDFhLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBkLCAweDAyLCAweGQwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGMsCisJMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDBkLCAweDBhLCAweGMwLCAweDAxLCAweDAwLCAweGVjLCAweDA2LCAweDIyLCAweDQwLAorCTB4MDMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4ZTYsIDB4MDYsIDB4MjIsIDB4NDIsIDB4MjMsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgyMywgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywKKwkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDIwLCAweDAwLCAweDAwLCAweGE0LCAweDYyLCAweGRkLCAweDAxLCAweDAwLAorCTB4MjMsIDB4MDcsIDB4MjgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ZTMsIDB4MDYsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg4MCwgMHhjMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ3LCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZTgsIDB4MDYsIDB4YTgsIDB4NDAsIDB4MjMsIDB4MzAsIDB4MDAsIDB4MDAsCisJMHhlMywgMHg5ZiwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgyMywgMHgwNywgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDgwLCAweGMwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHhlZSwgMHgwNiwgMHhhOCwgMHg0MCwgMHgyMywgMHgzMCwgMHgwMCwgMHgwMCwKKwkweGUzLCAweDlmLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDIyLCAweDAwLCAweDAwLCAweDE5LAorCTB4NDgsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmQsIDB4MTQsIDB4NDgsIDB4YzEsIDB4MDEsIDB4MDAsCisJMHgwZiwgMHgwMCwgMHgwMCwgMHhmMiwgMHgzYSwgMHg4OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwKKwkweDNiLCAweGUwLCAweDAxLCAweDAwLCAweDBlLCAweDAwLCAweDAwLCAweDE0LCAweDAyLCAweGM4LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MWQsIDB4MDIsIDB4YzAsIDB4MDEsIDB4MDAsIDB4ZmEsIDB4MDYsIDB4MjMsIDB4MWEsCisJMHgwMiwgMHg1MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NiwgMHgwMywgMHhjMCwgMHgwMSwgMHgwMCwKKwkweDIzLCAweDA3LCAweDAwLCAweDAxLCAweDM0LCAweGMwLCAweDAwLCAweDAwLCAweDBjLCAweDAwLCAweDJkLCAweDFkLAorCTB4NDgsIDB4YzEsIDB4MDEsIDB4MDAsIDB4ZjAsIDB4MDAsIDB4MDAsIDB4ZjIsIDB4MzAsIDB4ODgsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHgzMSwgMHhmMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwKKwkweDAyLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFkLCAweDAyLCAweGMwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDIsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDIsIDB4MDcsIDB4MjIsIDB4MWEsCisJMHgwMiwgMHg1MCwgMHgwMCwgMHgwMCwgMHgyMywgMHgwNywgMHgwMCwgMHgwMSwgMHgzNCwgMHhjMCwgMHgwMCwgMHgwMCwKKwkweDIyLCAweDAwLCAweDAwLCAweDE5LCAweDQ4LCAweGM5LCAweDAxLCAweDAwLCAweDAyLCAweDAwLCAweDJkLCAweDE0LAorCTB4NDgsIDB4YzEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjYsIDB4MTQsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgxZCwgMHgxNCwgMHhkMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwKKwkweDE0LCAweGQwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFlLCAweDI0LCAweGIwLCAweDAxLCAweDAwLAorCTB4MTIsIDB4MDAsIDB4MDAsIDB4MTcsIDB4MTAsIDB4YzgsIDB4MDEsIDB4MDAsIDB4MjMsIDB4MDcsIDB4MDAsIDB4MWEsCisJMHgxMCwgMHhjMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzYywgMHg0NCwgMHgyMywgMHhlMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGE0LCAweDg2LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJlLCAweDEwLAorCTB4NDgsIDB4YzEsIDB4MDEsIDB4MDAsIDB4MGYsIDB4MDcsIDB4YTMsIDB4MTIsIDB4MGUsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgxMCwgMHgwNywgMHg2MCwgMHgwNywgMHgxYSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2MCwgMHgxMiwKKwkweDFhLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDY4LCAweDBkLCAweDE2LCAweDk0LCAweDAxLCAweDAwLAorCTB4ZmYsIDB4ZmYsIDB4MDAsIDB4MGIsIDB4MTYsIDB4ZDgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsCisJMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYywgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAyLCAweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLAorCTB4ODYsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgyMCwgMHgwMCwgMHgwMCwgMHg0MywgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHgxNywgMHgwNywgMHhhOCwgMHg1YywKKwkweDFmLCAweDEwLCAweDAwLCAweDAwLCAweDQwLCAweDA3LCAweDIyLCAweDBkLCAweDE0LCAweDUwLCAweDAwLCAweDAwLAorCTB4NDAsIDB4MDcsIDB4MjIsIDB4MGQsIDB4MjQsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGQsCisJMHgxMCwgMHhjMCwgMHgwMSwgMHgwMCwgMHgxZSwgMHgwNywgMHgyMiwgMHg0MiwgMHgyMywgMHg2YywgMHgwMCwgMHgwMCwKKwkweDIzLCAweDA3LCAweDAwLCAweDQxLCAweDIzLCAweGMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ2LAorCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCisJMHgxZiwgMHgwNywgMHhhOCwgMHg1YywgMHgxZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMywgMHg5ZiwgMHgwMCwgMHg4OCwKKwkweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDIzLCAweGIwLCAweDAxLCAweDAwLAorCTB4M2YsIDB4MDcsIDB4YTIsIDB4MGQsIDB4MGUsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MmUsIDB4MDcsIDB4MjIsIDB4NDYsCisJMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NiwgMHgxZiwgMHg4MCwgMHgwMSwgMHgwMCwKKwkweDMwLCAweDgwLCAweDAwLCAweDEwLCAweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDJjLCAweDA3LCAweDIyLCAweGYyLAorCTB4NjQsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHgyOSwgMHgwNywgMHhhOCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweGUzLCAweDlmLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAorCTB4MjAsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDYsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWYsCisJMHhlMSwgMHg5MSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZCwgMHgwNiwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDE4LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LAorCTB4MDQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MzMsIDB4MDcsIDB4MWYsIDB4ZjAsIDB4MGUsIDB4MzAsIDB4MDAsIDB4MDAsCisJMHhkMywgMHgwNiwgMHgwMCwgMHg0YywgMHgwZCwgMHhjMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZSwgMHg1ZiwKKwkweDBmLCAweDgwLCAweDAxLCAweDAwLCAweGQzLCAweDA2LCAweDIzLCAweDA3LCAweDE0LCAweDZjLCAweDAwLCAweDAwLAorCTB4MzAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NDgsIDB4YzksIDB4MDEsIDB4MDAsIDB4MjQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHhmMSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE2LAorCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MjQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YzgsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHhhNCwKKwkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDNjLCAweDA3LCAweGE4LCAweDQ2LCAweDFmLCAweDEwLCAweDAwLCAweDAwLAorCTB4ZDMsIDB4MDYsIDB4MDAsIDB4MDMsIDB4MGMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZDMsIDB4MDYsIDB4MDAsIDB4MGQsCisJMHgxOCwgMHhjMCwgMHgwMCwgMHgwMCwgMHg1ZiwgMHgwNywgMHhhMiwgMHg0NCwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDE5LCAweDBhLCAweGIwLCAweDAxLCAweDAwLCAweDIyLCAweDAwLCAweDAwLCAweDA1LAorCTB4NDgsIDB4YzksIDB4MDEsIDB4MDAsIDB4MGEsIDB4MDAsIDB4MmQsIDB4MTQsIDB4NDgsIDB4YzEsIDB4MDEsIDB4MDAsCisJMHgwMiwgMHgwMCwgMHgyMCwgMHg0MCwgMHhlNSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMCwgMHg0MCwKKwkweGU1LCAweGIxLCAweDAxLCAweDAwLCAweDBkLCAweDAwLCAweDJkLCAweDFkLCAweDQ4LCAweGMxLCAweDAxLCAweDAwLAorCTB4MDksIDB4MDAsIDB4MDAsIDB4ZjMsIDB4MzgsIDB4ODgsIDB4MDEsIDB4MDAsIDB4MGQsIDB4MDAsIDB4MjAsIDB4NTAsCisJMHhlNywgMHhiMSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyZCwgMHg0MCwgMHgzZiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGY0LCAweDMyLCAweGIwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDIwLCAweDQwLAorCTB4ZTEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MjIsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YzksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgyZCwgMHgxNCwgMHg0OCwgMHhjMSwgMHgwMSwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgxZCwKKwkweDk0LCAweGY0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDkxLCAweGIwLCAweDAxLCAweDAwLAorCTB4NTIsIDB4MDcsIDB4YTAsIDB4ZmMsIDB4OTAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCisJMHg5MSwgMHhjMCwgMHgwMSwgMHgwMCwgMHg1MCwgMHgwNywgMHhhMiwgMHg0MSwgMHg5NSwgMHg1MCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGE0LCAweDk2LCAweGIwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDJlLCAweDA1LAorCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDgsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0YiwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwKKwkweDQ4LCAweGMxLCAweDAxLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDE4LCAweDk0LCAweGY0LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MmQsIDB4MTgsIDB4OTAsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NWMsIDB4MDcsIDB4YTAsIDB4ZmMsCisJMHg5MCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg5MSwgMHhjMCwgMHgwMSwgMHgwMCwKKwkweDVhLCAweDA3LCAweGEyLCAweDQxLCAweDk1LCAweDUwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ4LAorCTB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MjAsIDB4NDAsIDB4ZTUsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgyZCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwKKwkweDgwLCAweGIwLCAweDJkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLCAweDE2LCAweGIwLCAweDJkLCAweDAwLAorCTB4MjIsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YzksIDB4MmQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsCisJMHg0OCwgMHhjMSwgMHgyZCwgMHgwMCwgMHg2NCwgMHgwNywgMHg0MywgMHgzMCwgMHgzZCwgMHgwNywgMHgyYywgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDllLCAweDg1LCAweGIwLCAweDJkLCAweDAwLCAweDAwLCAweDAwLCAweDFiLCAweDQxLAorCTB4M2QsIDB4YzMsIDB4MmQsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjAsIDB4NDIsIDB4ZWMsIDB4YjEsIDB4MmQsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgxZSwgMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMiwgMHgwMCwgMHgyZSwgMHgxZCwKKwkweDgyLCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDY2LCAweDE4LCAweDgyLCAweGMwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4ODAsIDB4YzAsIDB4MDEsIDB4MDAsIDB4NmUsIDB4MDcsIDB4YTAsIDB4NDEsCisJMHg4MCwgMHg0NCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4MSwgMHhjMCwgMHgwMSwgMHgwMCwKKwkweDEwLCAweDAwLCAweDAwLCAweDQwLCAweDkyLCAweGY0LCAweDAxLCAweDAwLCAweDBhLCAweDAwLCAweDJlLCAweDMwLAorCTB4ODEsIDB4ODQsIDB4MDEsIDB4MDAsIDB4NzIsIDB4MDcsIDB4OTAsIDB4NDAsIDB4OTIsIDB4NDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg5MywgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2NiwgMHgyMCwKKwkweDkzLCAweGE0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFkLCAweDQ4LCAweGMxLCAweDAxLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MjAsIDB4MTksIDB4ZTgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWUsCisJMHgxNiwgMHhjMCwgMHgwMSwgMHgwMCwgMHg3OCwgMHgwNywgMHhhMCwgMHgxOSwgMHgxNiwgMHg0NCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDE3LCAweGMwLCAweDAxLCAweDAwLCAweDBkLCAweDAwLCAweDJmLCAweDFlLAorCTB4MzIsIDB4YzAsIDB4MDEsIDB4MDAsIDB4N2QsIDB4MDcsIDB4YTIsIDB4NDAsIDB4MTUsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHg3YywgMHgwNywgMHhhMCwgMHgxYywgMHgxNiwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKKwkweDE3LCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDYzLCAweGYzLCAweDM4LCAweDk0LCAweDAxLCAweDAwLAorCTB4MTAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MmUsIDB4MWUsCisJMHg5OCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2MCwgMHgxYSwgMHg5OCwgMHhjMCwgMHgwMSwgMHgwMCwKKwkweDBjLCAweDAwLCAweDIwLCAweDQwLCAweGUxLCAweGIxLCAweDAxLCAweDAwLCAweDhiLCAweDA3LCAweDIyLCAweDQ2LAorCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsIDB4MWYsIDB4ODAsIDB4MDEsIDB4MDAsCisJMHgzMCwgMHg4MCwgMHgwMCwgMHgxMCwgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHg4OSwgMHgwNywgMHgyMiwgMHhmMiwKKwkweDY0LCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ3LCAweDYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4ODYsIDB4MDcsIDB4YTgsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhlMywgMHg5ZiwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDIwLCAweDgwLCAweDAwLCAweDAzLCAweDQ2LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVmLAorCTB4ZTEsIDB4OTEsIDB4MDEsIDB4MDAsIDB4MzAsIDB4ODAsIDB4MDAsIDB4MTAsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsCisJMHgxMiwgMHgwMCwgMHgwMCwgMHgxYSwgMHhmMCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNywKKwkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDA1LCAweGUwLCAweGM5LCAweDAxLCAweDAwLAorCTB4MzAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4ODAsIDB4YzgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsCisJMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKKwkweDkxLCAweDA3LCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDliLCAweDA3LCAweDIyLCAweDVjLAorCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4M2MsIDB4NDQsIDB4MjMsIDB4ZTAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgyZCwgMHgxMCwgMHg0OCwgMHhjMSwgMHgwMSwgMHgwMCwgMHg5YiwgMHgwNywgMHgyMiwgMHhmMiwKKwkweDY0LCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ2LCAweDYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4OTgsIDB4MDcsIDB4YTgsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhlMywgMHg5ZiwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKKwkweGViLCAweDlmLCAweDAwLCAweDVjLCAweDFmLCAweDAwLCAweDAxLCAweDAwLCAweDIwLCAweDAwLCAweDJmLCAweDA1LAorCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGIsIDB4ZTQsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHgxNywgMHhmMCwgMHgwMSwgMHgwMCwgMHhhMSwgMHgwNywgMHg5MCwgMHhmMiwKKwkweDE2LCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDE3LCAweGMwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4NjYsIDB4MjAsIDB4MTcsIDB4YTQsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MTQsCisJMHgyYSwgMHhjOCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxZCwgMHgyYSwgMHhjMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDUwLCAweDJiLCAweGUwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYyLAorCTB4MmEsIDB4OTQsIDB4MDEsIDB4MDAsIDB4MzAsIDB4ODAsIDB4MDAsIDB4MTAsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsCisJMHhhYywgMHgwNywgMHgyMiwgMHhmMiwgMHg2NCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwKKwkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLAorCTB4YTksIDB4MDcsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ZTMsIDB4OWYsIDB4MDAsIDB4ODgsCisJMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgxNywgMHgxMCwgMHhkYywgMHgwMSwgMHgwMCwKKwkweGM5LCAweDA3LCAweDIyLCAweDQwLCAweDE1LCAweDZjLCAweDAwLCAweDAwLCAweGI0LCAweDA3LCAweGEyLCAweDQ0LAorCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4MWYsIDB4OTAsIDB4MDEsIDB4MDAsCisJMHhiMywgMHgwNywgMHgyMiwgMHg5ZiwgMHgxMywgMHg2YywgMHgwMCwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg4OCwKKwkweDFjLCAweGNjLCAweDAxLCAweDAwLCAweGU0LCAweDlmLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4M2YsIDB4YzMsIDB4MDEsIDB4MDAsIDB4ZTYsIDB4OWYsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhiNywgMHgwNywgMHhhMiwgMHg0MSwgMHg4NywgMHg3YywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDFlLCAweDNlLCAweGMwLCAweDAxLCAweDAwLCAweGM5LCAweDA3LCAweDIyLCAweDQwLAorCTB4MTUsIDB4NmMsIDB4MDAsIDB4MDAsIDB4YmEsIDB4MDcsIDB4MjAsIDB4MWUsIDB4MTQsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwYSwgMHgzYywgMHhiMCwgMHgwMSwgMHgwMCwgMHhlNSwgMHg5ZiwgMHgwMCwgMHgxZSwKKwkweDI0LCAweDMwLCAweDAxLCAweDAwLCAweGJmLCAweDA3LCAweDIyLCAweDA4LCAweDJlLCAweDMwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTIsIDB4MTEsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWEsCisJMHgxMCwgMHhjMCwgMHgwMSwgMHgwMCwgMHgyMywgMHgwNywgMHgwMCwgMHg0MCwgMHgxNywgMHhiMCwgMHgwMCwgMHgwMCwKKwkweGU0LCAweDlmLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweGU1LCAweDlmLCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4YmMsIDB4MDcsIDB4YTIsIDB4MDgsIDB4MmUsIDB4MzAsIDB4MDAsIDB4MDAsCisJMHg4MCwgMHg4MCwgMHgwMCwgMHhhNiwgMHgwNCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDg3LCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDAzLCAweDQ0LCAweDk5LCAweDAxLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MjIsIDB4MDQsIDB4ZTAsIDB4MzEsIDB4MDAsIDB4MDAsIDB4ZTgsIDB4OWYsIDB4MDAsIDB4MWYsCisJMHg4YywgMHgzMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwZiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweGUyLCAweDlmLCAweDAwLCAweDVjLCAweDFmLCAweDkwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDAzLAorCTB4NDQsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjIsIDB4MDQsIDB4ZTAsIDB4MzEsIDB4MDAsIDB4MDAsCisJMHhlNiwgMHg5ZiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhjZSwgMHgwNywgMHhhMiwgMHg0MSwKKwkweDg3LCAweDdjLCAweDAwLCAweDAwLCAweGNmLCAweDA3LCAweDAwLCAweDFlLCAweDNlLCAweGMwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MWYsIDB4OGMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHgwNSwgMHhiMCwgMHgwMSwgMHgwMCwgMHhlOCwgMHg5ZiwgMHgwMCwgMHg0MCwgMHgwZiwgMHgzMCwgMHgwMSwgMHgwMCwKKwkweGUyLCAweDlmLCAweDAwLCAweDVjLCAweDFmLCAweDkwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4ZjcsIDB4MDcsIDB4MDAsIDB4YmMsIDB4ODAsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwMywgMHg4MCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMywgMHg4MCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAzLCAweDgwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDMsIDB4ODAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDMsIDB4ODAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMywgMHg4MCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDAzLCAweDgwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAzLCAweDgwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJfSwKKwl7CisJMHgzMSwgMHg4MCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgzNCwgMHg4MCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDM1LCAweDgwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MWIsIDB4ODAsIDB4ODEsIDB4ODAsCisJMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHhlNCwgMHg4NywgMHhhMiwgMHg0MCwgMHg5MSwgMHg2ZiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDRjLCAweDkwLCAweGIzLCAweDAxLCAweDAwLCAweDVjLCAweDk1LCAweDJlLCAweGEyLAorCTB4ODAsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4ODAsIDB4ZjQsIDB4ODksIDB4MDEsIDB4MDAsCisJMHg5MCwgMHg5NSwgMHgyYSwgMHhjOCwgMHhlNSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMSwKKwkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGYwLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4YTQsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDAsCisJMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkMSwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGQyLCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRjLAorCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDQsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhkMywgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlZSwKKwkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRlLCAweGYwLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDQsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MTgsIDB4ODAsIDB4MTEsIDB4ODEsCisJMHg5OCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MSwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKKwkweDFhLCAweDgwLCAweDExLCAweDgyLCAweDk4LCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUyLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4ZTQsIDB4ODcsIDB4MDAsIDB4NDgsIDB4ZmQsIDB4OTMsIDB4MDAsIDB4MDAsCisJMHhiNiwgMHgwMywgMHgwMCwgMHg0MCwgMHhhMSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgyMywgMHg4MCwgMHhhMiwgMHg0MiwKKwkweGZkLCAweDdmLCAweDAwLCAweDAwLCAweDIwLCAweDgwLCAweDAwLCAweDgwLCAweDgwLCAweDMyLCAweDAwLCAweDAwLAorCTB4MjIsIDB4ODAsIDB4MTEsIDB4ODEsIDB4ODIsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MjIsIDB4ODAsIDB4NTEsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgyMiwgMHg4MCwgMHgxMSwgMHg4MiwgMHg4MiwgMHgzMCwgMHgwMCwgMHgwMCwKKwkweDIyLCAweDgwLCAweDUyLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDJjLCAweDgwLCAweDAwLCAweDQ4LAorCTB4ZmQsIDB4OTMsIDB4MDAsIDB4MDAsIDB4MjcsIDB4ODAsIDB4MDAsIDB4ODAsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgyNiwgMHg4MCwgMHhhMiwgMHg1MywgMHgwNywgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MSwgMHg1MywKKwkweDA3LCAweDkwLCAweDAxLCAweDAwLCAweDJhLCAweDgwLCAweDAwLCAweDUyLCAweDA3LCAweDkwLCAweDAwLCAweDAwLAorCTB4MjksIDB4ODAsIDB4YTIsIDB4NTIsIDB4MDcsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTIsIDB4NTIsCisJMHgwNywgMHg5MCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MywgMHgwNywgMHg5MCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ4LCAweGZkLCAweDkzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ2LAorCTB4ZjMsIDB4OTMsIDB4MDEsIDB4MDAsIDB4NWMsIDB4OTUsIDB4MmUsIDB4YTIsIDB4NTIsIDB4YjMsIDB4MDEsIDB4MDAsCisJMHhmZiwgMHgwMCwgMHgwMCwgMHg4MCwgMHhmNCwgMHg4OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YywKKwkweGU0LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE5LCAweDQ1LCAweGIxLCAweDAxLCAweDAwLAorCTB4MzAsIDB4ODAsIDB4MDAsIDB4NGMsIDB4ODAsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1NSwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKKwkweGM2LCAweDgyLCAweDA1LCAweDQwLCAweDQ5LCAweGIxLCAweDAwLCAweDAwLCAweGM2LCAweDgyLCAweDA1LCAweDQwLAorCTB4NDksIDB4YjEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NDAsIDB4NDksIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg0YywgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YiwKKwkweGRlLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGZkLCAweDkzLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDgsIDB4ZmQsIDB4ODMsIDB4MDEsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg5YiwgMHg5YiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhNSwgMHg5YywgMHhiMywgMHgwMSwgMHgwMCwKKwkweDQ4LCAweDAzLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDU4LCAweDk1LCAweDIwLCAweDQ0LAorCTB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDQsIDB4OTQsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmMiwgMHgyNCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwYywgMHgwMCwgMHhlZSwKKwkweDk2LCAweDg4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRhLCAweDk3LCAweGYwLCAweDAxLCAweDAwLAorCTB4NDQsIDB4ODAsIDB4YTIsIDB4NDMsIDB4OTcsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsCisJMHhmZCwgMHg5MywgMHgwMSwgMHgwMCwgMHgwMCwgMHhjMCwgMHgwMCwgMHhhNiwgMHgzNiwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweGQwLCAweDE0LCAweDAwLCAweDQwLCAweDQ3LCAweDk5LCAweDAxLCAweDAwLCAweDA1LCAweDAwLCAweDAwLCAweDQwLAorCTB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MzgsIDB4MDAsIDB4NDAsIDB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwNiwgMHgwMCwgMHg0MCwgMHhmNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMywgMHgwMCwgMHgwMCwgMHg0MCwKKwkweGY1LCAweDk5LCAweDAxLCAweDAwLCAweDA1LCAweDEwLCAweDAwLCAweDQwLCAweGY1LCAweDk5LCAweDAxLCAweDAwLAorCTB4MDIsIDB4MDksIDB4MDAsIDB4NDAsIDB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHhmNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHg2MCwgMHgwMywgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDg4LCAweDAzLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGEwLCAweDAzLCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4YjksIDB4ODIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHhiMSwgMHg4MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHg2MCwgMHg5NSwgMHgyMCwgMHg0MCwKKwkweGUxLCAweGIxLCAweDAxLCAweDAwLCAweDcwLCAweDk1LCAweDIwLCAweDQwLCAweGUxLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDksIDB4ZGQsIDB4OTEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg5MSwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg3YiwgMHhiMywgMHgwMSwgMHgwMCwKKwkweDk5LCAweDk4LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4ODUsIDB4YjMsIDB4MDEsIDB4MDAsIDB4NWMsIDB4OTUsIDB4MjAsIDB4NDAsIDB4ZTEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgzYywgMHg4MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHg5MCwgMHgwNiwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVmLCAweDJmLCAweDgxLCAweDAxLCAweDAwLAorCTB4YTIsIDB4ODEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4OWUsIDB4OTgsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDU1LCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAxLCAweDgzLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgyOCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwKKwkweGM2LCAweDgyLCAweDAwLCAweDQxLCAweGUxLCAweGMxLCAweDAwLCAweDAwLCAweDc4LCAweDE4LCAweDAwLCAweDQwLAorCTB4NDksIDB4OTksIDB4MDEsIDB4MDAsIDB4MTksIDB4MDUsIDB4MjIsIDB4NTQsIDB4ODEsIDB4N2MsIDB4MDAsIDB4MDAsCisJMHg2YywgMHg4MCwgMHg0MiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MiwgMHgwMCwgMHhiNCwKKwkweDY5LCAweGRmLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDFhLCAweDQ0LCAweDkzLCAweDkzLCAweDAxLCAweDAwLAorCTB4MjgsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDcsIDB4OTksIDB4MDEsIDB4MDAsIDB4MTgsIDB4MDUsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4NTUsIDB4ODIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4N2QsIDB4ODAsIDB4MjIsIDB4NDAsCisJMHg5NywgMHg2YywgMHgwMCwgMHgwMCwgMHg3YSwgMHg4MCwgMHg0MiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDRmLCAweDY5LCAweDkzLCAweDAxLCAweDAwLCAweDQzLCAweDgxLCAweDAwLCAweDU4LAorCTB4NjksIDB4OTMsIDB4MDAsIDB4MDAsIDB4NTQsIDB4MTYsIDB4MDAsIDB4NDAsIDB4NDcsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmZSwgMHhmNCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwNSwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDgwLCAweDgwLCAweDQyLCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGUsIDB4NjksIDB4OTMsIDB4MDEsIDB4MDAsIDB4NDMsIDB4ODEsIDB4MDAsIDB4NTgsCisJMHg2OSwgMHg5MywgMHgwMCwgMHgwMCwgMHg0MCwgMHgxNiwgMHgwMCwgMHg0MCwgMHg0NSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDQwLCAweDA1LCAweDAwLCAweDQwLCAweDQ5LCAweDMxLCAweDAxLCAweDAwLCAweGY2LCAweDE1LCAweDAwLCAweDQwLAorCTB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4NWMsIDB4MTYsIDB4MDAsIDB4NDAsIDB4NDUsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg2ZSwgMHhmYSwgMHg4ZSwgMHhiMCwgMHgwMSwgMHgwMCwgMHhjMSwgMHgwNSwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHg5NiwgMHg4MCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg1NSwgMHg4MiwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDk2LCAweDgwLCAweDIyLCAweDQwLCAweDk3LCAweDZjLCAweDAwLCAweDAwLAorCTB4OTMsIDB4ODAsIDB4NDIsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGYsCisJMHg2OSwgMHg5MywgMHgwMSwgMHgwMCwgMHg0MywgMHg4MSwgMHgwMCwgMHg1OCwgMHg2OSwgMHg5MywgMHgwMCwgMHgwMCwKKwkweDM4LCAweDA1LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDFlLCAweDAwLCAweDAwLCAweDQ4LAorCTB4YjIsIDB4Y2IsIDB4MDEsIDB4MDAsIDB4ZDAsIDB4MDUsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDgzLCAweDAyLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4YjgsIDB4MDIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHhkNCwgMHg5ZiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhkNSwgMHg5ZiwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGQ2LCAweDlmLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4ZDcsIDB4OWYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4NzIsIDB4MDEsIDB4MDAsIDB4NDEsCisJMHg4MSwgMHhjMCwgMHgwMCwgMHgwMCwgMHg1NSwgMHgwMSwgMHg1MSwgMHg0OSwgMHhmZCwgMHg5MywgMHgwMCwgMHgwMCwKKwkweDU1LCAweDAxLCAweDUyLCAweDRhLCAweGZkLCAweDkzLCAweDAwLCAweDAwLCAweDU1LCAweDAxLCAweDU1LCAweDQ5LAorCTB4ZmQsIDB4ODMsIDB4MDAsIDB4MDAsIDB4NTUsIDB4MDEsIDB4NTYsIDB4NGEsIDB4ZmQsIDB4ODMsIDB4MDAsIDB4MDAsCisJMHg1MCwgMHgwMSwgMHg5MSwgMHg4MSwgMHg4MCwgMHgzMCwgMHgwMCwgMHgwMCwgMHg1NSwgMHgwMSwgMHg0NSwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDUwLCAweDAxLCAweDkxLCAweDgyLCAweDgwLCAweDMwLCAweDAwLCAweDAwLAorCTB4NTUsIDB4MDEsIDB4NDYsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4OSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg4MCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGYwLCAweDE2LCAweGIwLCAweDAxLCAweDAwLCAweDIyLCAweDAwLCAweDAwLCAweDA1LAorCTB4NDgsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4NDgsIDB4YzEsIDB4MDEsIDB4MDAsCisJMHhiNCwgMHg4MCwgMHg0MywgMHgzMCwgMHgzZCwgMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5ZSwKKwkweDg1LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDFiLCAweDQxLCAweDNkLCAweGMzLCAweDAxLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MjAsIDB4NDIsIDB4ZWMsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTIsIDB4NDAsCisJMHg5MSwgMHg2ZiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0OSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweGFlLCAweDAzLCAweDAwLCAweGNiLCAweGEzLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDIwLAorCTB4NDYsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YzQsIDB4ODAsIDB4YTIsIDB4NDAsIDB4ZTEsIDB4NmQsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhkMiwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkMywKKwkweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLCAweGYwLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOCwgMHhkMCwgMHhlMSwgMHhiMSwgMHgwMCwgMHgwMCwKKwkweGMxLCAweDgwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE4LAorCTB4OTgsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4ODAsIDB4MDAsIDB4NDAsIDB4OGIsIDB4YjMsIDB4MDAsIDB4MDAsCisJMHhiMSwgMHgwMywgMHgwMCwgMHg0MCwgMHhhMSwgMHg5OSwgMHgwMSwgMHgwMCwgMHhjOSwgMHg4MCwgMHhhMiwgMHg0MiwKKwkweDk3LCAweDZmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweGExLCAweGMxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTIsIDB4MDQsCisJMHg4MCwgMHg5NCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgxNSwgMHgzZiwgMHg0MiwgMHg5NywgMHhlMywgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDQ5LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDYwLCAweDAzLAorCTB4MDIsIDB4OTQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDcsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHhjYiwgMHg5OSwgMHhjYiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjYywKKwkweGYzLCAweDgzLCAweDAxLCAweDAwLCAweGQzLCAweDgwLCAweGEyLCAweDQyLCAweDk3LCAweDZmLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4Y2IsIDB4ZjMsIDB4OTMsIDB4MDEsIDB4MDAsIDB4YWUsIDB4MDMsIDB4MDAsIDB4Y2IsCisJMHhhMywgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg0NCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhhMSwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwNSwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDYxLCAweDk5LCAweDAxLCAweDAwLCAweDIwLCAweDAwLCAweDAwLCAweDIwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLAorCTB4ZGEsIDB4ODAsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ZjksIDB4MDIsIDB4MDAsIDB4MjAsCisJMHg0MiwgMHgzMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMiwgMHg0MSwgMHgwNSwgMHg2YywgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDgwLCAweGNiLCAweGRiLCAweDkxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDE5LCAweDQxLAorCTB4OGIsIDB4YjMsIDB4MDEsIDB4MDAsIDB4NjAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjEsIDB4OTksIDB4MDEsIDB4MDAsCisJMHhlMCwgMHg4MCwgMHhhOCwgMHhiMSwgMHg4YywgMHgzMywgMHgwMCwgMHgwMCwgMHg2MCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDYxLCAweDk5LCAweDAxLCAweDAwLCAweGUyLCAweDgwLCAweGE4LCAweGIxLCAweDk0LCAweDMzLCAweDAwLCAweDAwLAorCTB4ZTgsIDB4ODAsIDB4MTQsIDB4YzYsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDAsIDB4MDAsIDB4YzYsCisJMHg4MywgMHhmNCwgMHgwMSwgMHgwMCwgMHgyMiwgMHg4MywgMHgyMiwgMHg0ZiwgMHg4MywgMHgwNCwgMHgwMCwgMHgwMCwKKwkweGM0LCAweDgwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGZmLCAweDAxLCAweDAwLCAweGM2LAorCTB4ODEsIDB4ODgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YzYsIDB4OTcsIDB4YTMsIDB4MDEsIDB4MDAsCisJMHhjNCwgMHg4MCwgMHgxZiwgMHg1YywgMHg5NywgMHg1MywgMHgwMCwgMHgwMCwgMHg2ZCwgMHg4MiwgMHgxZSwgMHhjNiwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweGYyLCAweDgwLCAweDIyLCAweDQ4LCAweGZkLCAweDdmLCAweDAwLCAweDAwLAorCTB4ZjIsIDB4ODAsIDB4MjIsIDB4NTgsIDB4ODEsIDB4NmMsIDB4MDAsIDB4MDAsIDB4ZjIsIDB4ODAsIDB4MjIsIDB4NDgsCisJMHg4MSwgMHg2YywgMHgwMCwgMHgwMCwgMHhjMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4NCwgMHhjYywgMHgwMSwgMHgwMCwKKwkweGYyLCAweDgwLCAweDlmLCAweDQyLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDIyLCAweDgzLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4YzQsIDB4ODAsIDB4YTIsIDB4YzYsIDB4OGYsIDB4MDYsIDB4MDAsIDB4MDAsCisJMHhjNCwgMHg4MCwgMHgxZSwgMHhjNiwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZiwgMHg0MywKKwkweDgxLCAweGYwLCAweDAxLCAweDAwLCAweGY2LCAweDgwLCAweDAwLCAweDQwLCAweDEwLCAweGM5LCAweDAwLCAweDAwLAorCTB4NDQsIDB4ODEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4N2UsIDB4ODEsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgzOSwgMHg4MiwgMHgwMCwgMHhjYSwgMHg2MywgMHhiMywgMHgwMCwgMHgwMCwKKwkweDc1LCAweDgxLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDU1LCAweDgxLCAweDAwLCAweDRkLAorCTB4ODMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NjAsIDB4ODEsIDB4MDAsIDB4NGUsIDB4NjEsIDB4YjEsIDB4MDAsIDB4MDAsCisJMHg0YywgMHg4MSwgMHgwMCwgMHg0MCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg1NSwgMHg4MSwgMHgwMCwgMHg0YywKKwkweDgzLCAweGIwLCAweDAwLCAweDAwLCAweDJlLCAweDgxLCAweDAwLCAweDQwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4ZjgsIDB4ODEsIDB4MDAsIDB4NDAsIDB4NDksIDB4YjEsIDB4MDAsIDB4MDAsIDB4ODYsIDB4ODEsIDB4MDAsIDB4NDAsCisJMHhjMSwgMHhiMSwgMHgwMCwgMHgwMCwgMHhmNCwgMHg4MSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDRjLCAweDgxLCAweDAwLCAweDQwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweGYwLCAweDAzLCAweDAwLCAweDQwLAorCTB4NDksIDB4YjEsIDB4MDAsIDB4MDAsIDB4MjIsIDB4ODMsIDB4MDAsIDB4Y2EsIDB4OWIsIDB4YjMsIDB4MDAsIDB4MDAsCisJMHg5MCwgMHg4MSwgMHgwMCwgMHg0MCwgMHhjMSwgMHhiMSwgMHgwMCwgMHgwMCwgMHg5NCwgMHg4MSwgMHgwMCwgMHg0MCwKKwkweGMxLCAweGIxLCAweDAwLCAweDAwLCAweDliLCAweDgxLCAweDAwLCAweDQwLCAweGMxLCAweGIxLCAweDAwLCAweDAwLAorCTB4OWMsIDB4ODEsIDB4MDAsIDB4NDAsIDB4YzEsIDB4YjEsIDB4MDAsIDB4MDAsIDB4OWQsIDB4ODEsIDB4MDAsIDB4NDAsCisJMHhjMSwgMHhiMSwgMHgwMCwgMHgwMCwgMHg5ZSwgMHg4MSwgMHgwMCwgMHg0MCwgMHhjMSwgMHhiMSwgMHgwMCwgMHgwMCwKKwkweDlmLCAweDgxLCAweDAwLCAweDQwLCAweDgxLCAweGIwLCAweDAwLCAweDAwLCAweDlmLCAweDgxLCAweDAwLCAweDQxLAorCTB4ODEsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MmQsIDB4ODIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHhhZSwgMHg4MiwgMHgwMCwgMHhiYiwgMHhhYiwgMHhiMywgMHgwMCwgMHgwMCwgMHgzYSwgMHg4MiwgMHgwMCwgMHhjYSwKKwkweGNmLCAweGIzLCAweDAwLCAweDAwLCAweGM4LCAweDAzLCAweDAwLCAweDQwLCAweDQ5LCAweGIxLCAweDAwLCAweDAwLAorCTB4ZTgsIDB4MDMsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4YzQsIDB4ODAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgyMiwgMHg4MywgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweGUwLCAweDAzLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDIyLCAweDgzLCAweDAwLCAweGNhLAorCTB4NzcsIDB4YjMsIDB4MDAsIDB4MDAsIDB4NTYsIDB4ODEsIDB4MDAsIDB4NGQsIDB4ODMsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHg1ZSwgMHg4MSwgMHgwMCwgMHg0ZSwgMHg2MSwgMHhiMSwgMHgwMCwgMHgwMCwgMHg0YywgMHg4MSwgMHgwMCwgMHhiYiwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDU2LCAweDgxLCAweDAwLCAweDRjLCAweDgzLCAweGIwLCAweDAwLCAweDAwLAorCTB4NGMsIDB4ODEsIDB4MDAsIDB4YmIsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MmUsIDB4ODEsIDB4MDAsIDB4YmIsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4MSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDIyLCAweDgzLCAweDAwLCAweGNhLCAweDRkLCAweGIzLCAweDAwLCAweDAwLCAweDcwLCAweDA1LCAweDAwLCAweDQwLAorCTB4NDksIDB4YjEsIDB4MDAsIDB4MDAsIDB4YTAsIDB4MDUsIDB4MDAsIDB4NDAsIDB4NDksIDB4YjEsIDB4MDAsIDB4MDAsCisJMHgyNiwgMHg4MSwgMHgyMiwgMHg0MiwgMHg4ZiwgMHg2ZiwgMHgwMCwgMHgwMCwgMHgyOCwgMHg4MSwgMHgyMiwgMHg0MSwKKwkweDhmLCAweDZmLCAweDAwLCAweDAwLCAweDJhLCAweDgxLCAweDFlLCAweGNhLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4MmMsIDB4ODEsIDB4MWYsIDB4Y2EsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4Y2EsCisJMHhjOSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyMiwgMHg4MywgMHgwMCwgMHg0MiwgMHg4ZiwgMHhiMywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGNhLCAweGNkLCAweGIxLCAweDAxLCAweDAwLCAweDIyLCAweDgzLCAweDAwLCAweDQxLAorCTB4OGYsIDB4YjMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4Y2EsIDB4Y2YsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgyMiwgMHg4MywgMHgwMCwgMHg0MCwgMHg4ZiwgMHhiMywgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MSwgMHgwMCwgMHhhNiwKKwkweGM2LCAweGIxLCAweDAxLCAweDAwLCAweDIyLCAweDgzLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4YTYsIDB4YzYsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MjIsIDB4ODMsIDB4MDAsIDB4NDAsCisJMHg4ZiwgMHhiMywgMHgwMCwgMHgwMCwgMHg3OCwgMHgxOCwgMHgwMCwgMHg0MCwgMHg0OSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDEwLCAweDAwLCAweDJmLCAweDljLCAweDg5LCAweGIwLCAweDAxLCAweDAwLCAweDQ2LCAweDgxLCAweDAwLCAweDQwLAorCTB4MzksIDB4MzMsIDB4MDEsIDB4MDAsIDB4MTgsIDB4MDAsIDB4MmYsIDB4OWIsIDB4ODksIDB4YjAsIDB4MDEsIDB4MDAsCisJMHg0NiwgMHg4MSwgMHgwMCwgMHg0MCwgMHgzNywgMHgzMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZiwgMHg5YSwKKwkweDg5LCAweGIwLCAweDAxLCAweDAwLCAweDQ2LCAweDgxLCAweDAwLCAweDQwLCAweDM1LCAweDMzLCAweDAxLCAweDAwLAorCTB4MDgsIDB4MDAsIDB4MmYsIDB4OTksIDB4ODksIDB4YjAsIDB4MDEsIDB4MDAsIDB4NDYsIDB4ODEsIDB4MDAsIDB4NDAsCisJMHgzMywgMHgzMywgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHhhZSwgMHg0NywgMHhjOSwgMHgwMSwgMHgwMCwKKwkweGM0LCAweDgwLCAweGEyLCAweDQwLCAweGUxLCAweDZkLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDAwLCAweDQwLAorCTB4ZjEsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4Y2EsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgxOCwgMHgwMCwgMHg0MCwKKwkweGUxLCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweDYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4MjAsIDB4MDAsIDB4MDAsIDB4YWUsIDB4NjMsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4NDEsIDB4ODEsIDB4MjgsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgzZSwgMHg4MSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDQxLCAweDgxLCAweDQyLCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVjLAorCTB4NjksIDB4OTMsIDB4MDEsIDB4MDAsIDB4MjIsIDB4ODMsIDB4MWEsIDB4NDQsIDB4OTMsIDB4OTMsIDB4MDAsIDB4MDAsCisJMHg0NCwgMHg4MSwgMHg0MiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHg0MywgMHg4MSwgMHgwMCwgMHg1OCwKKwkweDY5LCAweDkzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweGYwLCAweGQxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4YTQsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4NGIsIDB4ODEsIDB4YTIsIDB4NDAsCisJMHhlMSwgMHg2ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg0NSwgMHhkMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDgwLCAweDQwLCAweGUxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQxLAorCTB4ZTEsIDB4ZDEsIDB4MDEsIDB4MDAsIDB4NGMsIDB4ODEsIDB4MzcsIDB4NWMsIDB4NjEsIDB4MzEsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHg1MiwgMHg4MSwgMHgyOCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDRkLCAweDgxLCAweDIyLCAweDVjLCAweDc3LCAweDdkLCAweDAwLCAweDAwLAorCTB4YzQsIDB4ODAsIDB4MTcsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4NGQsIDB4ODEsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjYSwgMHg2MywgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDUyLCAweDgxLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDIyLCAweDgzLCAweDE3LCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4NTcsIDB4ODEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHg1NywgMHg4MSwgMHgwMCwgMHhiYiwgMHg4MSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKKwkweDYwLCAweGIxLCAweDAxLCAweDAwLCAweGM0LCAweDgwLCAweGEyLCAweDQxLCAweDc2LCAweDdkLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NTksIDB4ODEsIDB4YTgsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjYSwgMHg2MywgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDIyLCAweDgzLCAweDI4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDViLCAweDgxLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4NTAsIDB4OTUsIDB4MDAsIDB4NDAsIDB4NDcsIDB4OTksIDB4MDEsIDB4MDAsCisJMHg2MSwgMHg4MSwgMHgwMCwgMHhiYiwgMHg4NywgMHhiMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHg5NSwgMHgyZiwgMHg0MCwKKwkweDg3LCAweGIwLCAweDAxLCAweDAwLCAweDY1LCAweDgxLCAweDIyLCAweDQwLCAweDk1LCAweDdmLCAweDAwLCAweDAwLAorCTB4YzQsIDB4ODAsIDB4YTIsIDB4NDAsIDB4ZTEsIDB4NmQsIDB4MDAsIDB4MDAsIDB4YzQsIDB4ODAsIDB4MjIsIDB4NDAsCisJMHg5NSwgMHg2ZiwgMHgwMCwgMHgwMCwgMHgyMiwgMHg4MywgMHg2MCwgMHg0MCwgMHg5NSwgMHg4MywgMHgwMCwgMHgwMCwKKwkweDAyLCAweDAwLCAweDJkLCAweGYwLCAweDg0LCAweGIwLCAweDAxLCAweDAwLCAweGM0LCAweDgwLCAweDIyLCAweDQwLAorCTB4ODUsIDB4NmMsIDB4MDAsIDB4MDAsIDB4YzQsIDB4ODAsIDB4YTIsIDB4NDAsIDB4ODUsIDB4N2MsIDB4MDAsIDB4MDAsCisJMHhjNCwgMHg4MCwgMHhhMiwgMHg0ZSwgMHg3NywgMHg3ZCwgMHgwMCwgMHgwMCwgMHg2OSwgMHg4MSwgMHgzNiwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLCAweDYyLCAweGIxLCAweDAxLCAweDAwLAorCTB4NmEsIDB4ODEsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsCisJMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHg2YywgMHg4MSwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGNhLCAweDYzLCAweGIxLCAweDAxLCAweDAwLCAweDZlLCAweDgxLCAweGE4LCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTYsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCisJMHg3NCwgMHg4MSwgMHgyMiwgMHg0MSwgMHg0MywgMHg1MSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwMCwgMHhjYSwKKwkweDk1LCAweGNiLCAweDAxLCAweDAwLCAweDY4LCAweDgxLCAweDAwLCAweDQxLCAweDg1LCAweGMwLCAweDAwLCAweDAwLAorCTB4MjIsIDB4ODMsIDB4MDAsIDB4NDAsIDB4ZTEsIDB4YjEsIDB4MDAsIDB4MDAsIDB4NzcsIDB4ODEsIDB4YTIsIDB4NDIsCisJMHg2NywgMHg2ZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg2NywgMHhiMywgMHgwMSwgMHgwMCwKKwkweDc3LCAweDgxLCAweDQyLCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4NjUsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4OTMsIDB4ODMsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgxYSwgMHhjYSwgMHg2OSwgMHg5NywgMHgwMSwgMHgwMCwgMHgyMiwgMHg4MywgMHgyNiwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDdjLCAweDgxLCAweDQyLCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4MjIsIDB4ODMsIDB4MWEsIDB4NDQsIDB4OTMsIDB4OTMsIDB4MDAsIDB4MDAsIDB4YzQsIDB4ODAsIDB4MjAsIDB4NDMsCisJMHg5NSwgMHg2ZiwgMHgwMCwgMHgwMCwgMHgyMiwgMHg4MywgMHg4MCwgMHhjYSwgMHg2NywgMHgzMywgMHgwMCwgMHgwMCwKKwkweDIyLCAweDgzLCAweDIyLCAweDQwLCAweDY1LCAweDZmLCAweDAwLCAweDAwLCAweGM0LCAweDgwLCAweGEyLCAweDQ4LAorCTB4ZGIsIDB4N2QsIDB4MDAsIDB4MDAsIDB4MjIsIDB4ODMsIDB4MDAsIDB4NmYsIDB4ZGIsIDB4OTEsIDB4MDAsIDB4MDAsCisJMHg4NSwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgzNSwgMHg4MCwgMHgyMiwgMHg0MCwKKwkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDIyLCAweDgzLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTgsIDB4OTUsIDB4OTMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWYsCisJMHg5NSwgMHg5MywgMHgwMSwgMHgwMCwgMHg4YywgMHg4MSwgMHhhMiwgMHg0NCwgMHgyMSwgMHg2ZiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDVmLCAweDk1LCAweDgzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVlLAorCTB4OTUsIDB4OTMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTcsIDB4OTUsIDB4OTMsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhjYSwgMHhjMywgMHhiMSwgMHgwMSwgMHgwMCwgMHg4ZiwgMHg4MSwgMHgyMiwgMHg1YiwKKwkweDk1LCAweDdmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRiLCAweGZkLCAweDkzLCAweDAxLCAweDAwLAorCTB4MjIsIDB4ODMsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MWIsIDB4ZmQsIDB4MDAsIDB4Y2EsCisJMHg5NSwgMHg5YiwgMHgwMSwgMHgwMCwgMHgwZCwgMHgwMSwgMHgwMCwgMHhjYSwgMHhjNSwgMHgzMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDVmLCAweDk1LCAweDgzLCAweDAxLCAweDAwLCAweDIyLCAweDgzLCAweDAwLCAweGNhLAorCTB4YzUsIDB4YjEsIDB4MDAsIDB4MDAsIDB4ZGYsIDB4NmYsIDB4MDAsIDB4Y2EsIDB4OTUsIDB4OWIsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1NSwgMHg5NSwgMHg5MywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjYSwKKwkweGM3LCAweGIxLCAweDAxLCAweDAwLCAweDIyLCAweDgzLCAweDIyLCAweDVmLCAweDk1LCAweDdmLCAweDAwLCAweDAwLAorCTB4MGQsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWYsCisJMHg5NSwgMHg4MywgMHgwMSwgMHgwMCwgMHgyMiwgMHg4MywgMHgwMCwgMHhjYSwgMHhjNywgMHhiMSwgMHgwMCwgMHgwMCwKKwkweDIyLCAweDgzLCAweDAwLCAweGNhLCAweGM5LCAweGIxLCAweDAwLCAweDAwLCAweDIyLCAweDgzLCAweDAwLCAweGNhLAorCTB4Y2IsIDB4YjEsIDB4MDAsIDB4MDAsIDB4MjIsIDB4ODMsIDB4MDAsIDB4Y2EsIDB4Y2QsIDB4YjEsIDB4MDAsIDB4MDAsCisJMHgyMiwgMHg4MywgMHgwMCwgMHhjYSwgMHhjZiwgMHhiMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZSwgMHg0MiwKKwkweDgxLCAweGUwLCAweDAxLCAweDAwLCAweDk4LCAweDE0LCAweDAwLCAweDQwLCAweDQ4LCAweGM5LCAweDAxLCAweDAwLAorCTB4MjIsIDB4ODMsIDB4MDAsIDB4Y2EsIDB4ZTEsIDB4YjEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHgwOSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHhhNiwgMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweGE0LCAweDgxLCAweGEyLCAweDVlLCAweDBiLCAweDdkLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDQxLAorCTB4MDgsIDB4OTksIDB4MDEsIDB4MDAsIDB4YTYsIDB4ODEsIDB4YTIsIDB4NWUsIDB4MGIsIDB4N2QsIDB4MDAsIDB4MDAsCisJMHgyMCwgMHg4MCwgMHgwMCwgMHhhNiwgMHgwOCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhhOCwgMHg4MSwgMHg5ZiwgMHg4NSwKKwkweDgyLCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDMwLCAweDgzLCAweDg0LCAweDAxLCAweDAwLAorCTB4ZGQsIDB4ODEsIDB4MjIsIDB4MzAsIDB4ODMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4YTcsIDB4ODEsIDB4YTIsIDB4NGYsCisJMHgwYiwgMHg3ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgyMSwgMHhiMywgMHgwMSwgMHgwMCwKKwkweDAyLCAweDgwLCAweDAwLCAweGE2LCAweDgyLCAweGIwLCAweDAxLCAweDAwLCAweDI4LCAweDgyLCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ODQsIDB4ZTQsIDB4MDEsIDB4MDAsCisJMHgwMywgMHg4MCwgMHgwMCwgMHhhNiwgMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgyOCwgMHg4MiwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGYwLCAweGZmLCAweDAwLCAweDQxLCAweDg2LCAweDg4LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4ODQsIDB4OTQsIDB4MDEsIDB4MDAsIDB4MGYsIDB4MDAsIDB4MDAsIDB4YTYsCisJMHg4NiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgxMCwgMHhjNCwgMHgwMCwgMHg0MywgMHg4NiwgMHg5OCwgMHgwMSwgMHgwMCwKKwkweGJkLCAweDgxLCAweGEyLCAweDQzLCAweDg0LCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQzLAorCTB4MjEsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4YTYsIDB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgxYywgMHgwMCwgMHgwMCwgMHg0MSwgMHg4MiwgMHhkYywgMHgwMSwgMHgwMCwgMHhiYSwgMHg4MSwgMHhhMiwgMHg1ZSwKKwkweDBiLCAweDdkLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQxLCAweDA4LCAweDk5LCAweDAxLCAweDAwLAorCTB4Y2YsIDB4ODEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MDEsIDB4MDAsIDB4YTYsCisJMHg4NiwgMHhiMCwgMHgwMSwgMHgwMCwgMHg1MCwgMHgwYywgMHgwMCwgMHg0MywgMHg4NiwgMHg5OCwgMHgwMSwgMHgwMCwKKwkweGMyLCAweDgxLCAweGEyLCAweDQzLCAweDg0LCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAorCTB4MjEsIDB4YjMsIDB4MDEsIDB4MDAsIDB4Y2YsIDB4ODEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHg0MSwgMHgwMSwgMHgwMCwgMHhhNiwgMHg4NiwgMHhiMCwgMHgwMSwgMHgwMCwgMHg2MCwgMHgwYywgMHgwMCwgMHg0MywKKwkweDg2LCAweDk4LCAweDAxLCAweDAwLCAweGNmLCAweDgxLCAweGEyLCAweDQzLCAweDg0LCAweDZjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4MjEsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MTgsIDB4ODAsIDB4MDAsIDB4YTYsCisJMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgyOCwgMHg4MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweGZmLCAweGZmLCAweDAwLCAweDQxLCAweDgyLCAweDg4LCAweDAxLCAweDAwLCAweDAwLCAweDc3LCAweDAwLCAweDQxLAorCTB4ODIsIDB4OGMsIDB4MDEsIDB4MDAsIDB4MDEsIDB4MDIsIDB4MDAsIDB4NDEsIDB4ODIsIDB4OTgsIDB4MDEsIDB4MDAsCisJMHgyMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4MiwgMHhkYywgMHgwMSwgMHgwMCwgMHgxOCwgMHgwMCwgMHgwMCwgMHg0MSwKKwkweDgyLCAweGRjLCAweDAxLCAweDAwLCAweGNkLCAweDgxLCAweGEyLCAweDVlLCAweDBiLCAweDdkLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4YTYsCisJMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHhkMCwgMHg4MSwgMHhhMiwgMHg1ZSwgMHgwYiwgMHg3ZCwgMHgwMCwgMHgwMCwKKwkweDQwLCAweDEzLCAweDAwLCAweDQxLCAweDA4LCAweDk5LCAweDAxLCAweDAwLCAweGQ4LCAweDgxLCAweDIyLCAweDQzLAorCTB4MjEsIDB4NmYsIDB4MDAsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4YTYsIDB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgxMiwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4MiwgMHhkYywgMHgwMSwgMHgwMCwgMHhkNSwgMHg4MSwgMHhhMiwgMHg1ZSwKKwkweDBiLCAweDdkLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDQxLCAweDA4LCAweDk5LCAweDAxLCAweDAwLAorCTB4ZjMsIDB4ODEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4YTYsCisJMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgxOSwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4MiwgMHhkYywgMHgwMSwgMHgwMCwKKwkweGRhLCAweDgxLCAweGEyLCAweDVlLCAweDBiLCAweDdkLCAweDAwLCAweDAwLCAweDAwLCAweGEwLCAweDAwLCAweDQxLAorCTB4MDgsIDB4OTksIDB4MDEsIDB4MDAsIDB4ZjMsIDB4ODEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHgyMSwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgzLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVmLCAweDgzLCAweDkwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NWUsIDB4ODMsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTcsCisJMHg4MywgMHg5MCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHhjMiwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDBjLCAweDAxLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVmLAorCTB4ODMsIDB4ODAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4YzIsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwYywgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHhhNiwKKwkweDgyLCAweGIwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQxLCAweDgyLCAweGRjLCAweDAxLCAweDAwLAorCTB4MjAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MDgsIDB4OTksIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4YTYsCisJMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgxMSwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4MiwgMHhkYywgMHgwMSwgMHgwMCwKKwkweGVjLCAweDgxLCAweGEyLCAweDVlLCAweDBiLCAweDdkLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweDQxLAorCTB4MDgsIDB4OTksIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4YTYsIDB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHhlZiwgMHg4MSwgMHhhMiwgMHg1ZSwgMHgwYiwgMHg3ZCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgxMywgMHgwMCwgMHg0MSwKKwkweDA4LCAweDk5LCAweDAxLCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweGE2LCAweDgyLCAweGIwLCAweDAxLCAweDAwLAorCTB4NDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MmUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHhhNiwgMHg4MCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGNhLCAweDgxLCAweDk0LCAweDAxLCAweDAwLCAweGY2LCAweDgxLCAweGEyLCAweDVlLAorCTB4MGIsIDB4N2QsIDB4MDAsIDB4MDAsIDB4MjIsIDB4ODMsIDB4MDAsIDB4NDAsIDB4MDgsIDB4YjEsIDB4MDAsIDB4MDAsCisJMHhjOCwgMHgxNCwgMHgyZSwgMHhiYiwgMHg4NSwgMHhiMCwgMHgwMSwgMHgwMCwgMHhmOSwgMHg4MSwgMHhhMiwgMHg1ZSwKKwkweDBiLCAweDdkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDg3LCAweGIwLCAweDAxLCAweDAwLAorCTB4MDgsIDB4ODIsIDB4MjIsIDB4NDMsIDB4MjEsIDB4NmYsIDB4MDAsIDB4MDAsIDB4MTcsIDB4ODIsIDB4MjIsIDB4NDQsCisJMHgyMSwgMHg2ZiwgMHgwMCwgMHgwMCwgMHgxMSwgMHg4MCwgMHgwMCwgMHhhNiwgMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDI4LCAweDgyLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDFmLCAweDgyLCAweDIyLCAweDRhLAorCTB4ODMsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODcsIDB4OTAsIDB4MDEsIDB4MDAsCisJMHgwMywgMHg4MiwgMHgyMiwgMHg0ZCwgMHg4MywgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKKwkweDg3LCAweDkwLCAweDAxLCAweDAwLCAweDA1LCAweDgyLCAweDIyLCAweDRmLCAweDgzLCAweDdjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4ODcsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MDcsIDB4ODIsIDB4MjIsIDB4NGUsCisJMHg4MywgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHg4NywgMHg5MCwgMHgwMSwgMHgwMCwKKwkweDFmLCAweDgyLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAxLCAweDgwLCAweDAwLCAweGE2LAorCTB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MjgsIDB4ODIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHgwMSwgMHg4MCwgMHgwMCwgMHhhNiwgMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgyOCwgMHg4MiwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDFmLCAweDgyLCAweDIyLCAweDQyLCAweDgzLCAweDdjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODcsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MWMsIDB4ODAsIDB4MDAsIDB4YTYsCisJMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgyOCwgMHg4MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDEyLCAweDgyLCAweDIyLCAweDQ1LCAweDgzLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAorCTB4ODcsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MTQsIDB4ODIsIDB4MjIsIDB4NDQsIDB4ODMsIDB4N2MsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywgMHg4NywgMHg5MCwgMHgwMSwgMHgwMCwgMHgxNiwgMHg4MiwgMHgyMiwgMHg0MywKKwkweDgzLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLCAweDg3LCAweDkwLCAweDAxLCAweDAwLAorCTB4MWYsIDB4ODIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDEsIDB4ODAsIDB4MDAsIDB4YTYsCisJMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgyOCwgMHg4MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDAxLCAweDgwLCAweDAwLCAweGE2LCAweDgyLCAweGIwLCAweDAxLCAweDAwLCAweDI4LCAweDgyLCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MWYsIDB4ODIsIDB4MjIsIDB4NDIsIDB4ODMsIDB4N2MsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4NywgMHg5MCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywKKwkweDg3LCAweDkwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDg3LCAweDkwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4YTYsIDB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MjgsIDB4ODIsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgyMywgMHg4MiwgMHgyMiwgMHg0YiwgMHg4MywgMHg3YywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDg3LCAweDgwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQzLAorCTB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4N2YsIDB4MDAsIDB4YTIsIDB4YTAsIDB4OGIsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHhhNSwgMHhiMywgMHgwMSwgMHgwMCwgMHhiOCwgMHg4MCwgMHgwMCwgMHhjYSwKKwkweGE3LCAweDMzLCAweDAxLCAweDAwLCAweDQxLCAweDgxLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MjAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ODIsIDB4ZGMsIDB4MDEsIDB4MDAsIDB4MjksIDB4ODIsIDB4YTIsIDB4NWUsCisJMHgwYiwgMHg3ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgwOCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDJiLCAweDgyLCAweDlmLCAweDg1LCAweDgyLCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MzAsIDB4ODIsIDB4MTQsIDB4ZjcsIDB4ODEsIDB4MzAsIDB4MDAsIDB4MDAsCisJMHgzMCwgMHg4MiwgMHhhMiwgMHg0OSwgMHhmZCwgMHg3ZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0OCwKKwkweGZkLCAweDkzLCAweDAxLCAweDAwLCAweDMzLCAweDgyLCAweDE1LCAweGY4LCAweDgxLCAweDE0LCAweDAwLCAweDAwLAorCTB4MzMsIDB4ODIsIDB4YTIsIDB4NGEsIDB4ZmQsIDB4N2YsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDgsCisJMHhmZCwgMHg5MywgMHgwMSwgMHgwMCwgMHgzNSwgMHg4MiwgMHhhMiwgMHhjOCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDQwLCAweDAwLCAweDAwLCAweDQwLCAweDgwLCAweGRjLCAweDAxLCAweDAwLCAweDAwLCAweDEwLCAweDAwLCAweDQwLAorCTB4ODAsIDB4ZGMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZWYsIDB4YjMsIDB4MDEsIDB4MDAsCisJMHgzNywgMHg4MiwgMHg0MiwgMHg0MCwgMHhmMSwgMHgzMywgMHgwMCwgMHgwMCwgMHg0MywgMHg4MSwgMHgwMCwgMHg0MCwKKwkweDY4LCAweDk3LCAweDAwLCAweDAwLCAweDIyLCAweDgzLCAweDAwLCAweGJiLCAweDZiLCAweGIzLCAweDAwLCAweDAwLAorCTB4MjIsIDB4ODMsIDB4MDAsIDB4YmIsIDB4YjEsIDB4YjMsIDB4MDAsIDB4MDAsIDB4MjIsIDB4ODMsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHgwMCwgMHg0MCwgMHg4MSwgMHg5OCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDE4LCAweGIxLCAweDAxLCAweDAwLCAweDgwLCAweDAwLCAweDAwLCAweDQwLAorCTB4ODMsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MTksIDB4MDAsIDB4NDAsIDB4NDUsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg0MiwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywgMHhmZiwKKwkweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZmLCAweGYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ODEsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHgxOCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MiwgMHhhMiwgMHg0MSwgMHg4MywgMHg1MCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDE2LCAweDAwLCAweDQwLCAweDQ1LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDE5LCAweDAwLCAweDQwLAorCTB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsIDB4NDMsIDB4YzEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMywKKwkweDgwLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDViLCAweDgxLCAweGQwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ODAsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHhmNiwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1YiwgMHg0MywgMHhjMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDgzLCAweGMwLCAweDAxLCAweDAwLCAweDRhLCAweDgyLCAweGEyLCAweDU0LAorCTB4ODMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjcsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4MywgMHhjMCwgMHgwMSwgMHgwMCwgMHg1MSwgMHg4MiwgMHhhMiwgMHgwNiwKKwkweDgzLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MTYsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4ODAsIDB4MTYsIDB4MmUsIDB4MDYsCisJMHg4MywgMHhiMCwgMHgwMSwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHhmYiwgMHhmNiwgMHhhOSwgMHgwMSwgMHgwMCwKKwkweDU3LCAweDgyLCAweGEyLCAweDQxLCAweDgzLCAweDUwLCAweDAwLCAweDAwLCAweDIyLCAweDAwLCAweDAwLCAweDQwLAorCTB4ODMsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmIsIDB4ZjYsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg1YSwgMHg4MiwgMHhhMiwgMHg0MSwgMHg4MywgMHg1MCwgMHgwMCwgMHgwMCwgMHg2MiwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDk1LCAweDk4LCAweDAxLCAweDAwLCAweGRjLCAweDlmLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MTYsIDB4MmQsIDB4MDYsIDB4ODMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MTYsIDB4MDAsIDB4NDAsCisJMHg0NSwgMHg5OSwgMHgwMSwgMHgwMCwgMHg1YywgMHgwMCwgMHgwMCwgMHhmYiwgMHhmNiwgMHhhOSwgMHgwMSwgMHgwMCwKKwkweDYwLCAweDgyLCAweGEyLCAweDQxLCAweDgzLCAweDUwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDcwLAorCTB4ZjksIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzEsIDB4ZjksIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg3MiwgMHhmOSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3MywKKwkweGY5LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc0LCAweGY5LCAweGIxLCAweDAxLCAweDAwLAorCTB4NTQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4OTUsIDB4OTgsIDB4MDEsIDB4MDAsIDB4ZGMsIDB4OWYsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3MCwgMHg5NSwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDZjLCAweDgyLCAweDIyLCAweDcwLCAweGI1LCAweDZmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQxLAorCTB4OTcsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsIDB4OTcsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHhjNCwgMHg4MCwgMHhhMiwgMHg0MiwgMHg5NywgMHg2ZiwgMHgwMCwgMHgwMCwgMHhiNiwgMHgwMywgMHgwMCwgMHg0MCwKKwkweGExLCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJmLCAweDQyLCAweDk5LCAweGIzLCAweDAxLCAweDAwLAorCTB4NzgsIDB4ODIsIDB4MjIsIDB4NDQsIDB4ODEsIDB4NmMsIDB4MDAsIDB4MDAsIDB4ODAsIDB4ODIsIDB4MjIsIDB4NDgsCisJMHg4MSwgMHg2YywgMHgwMCwgMHgwMCwgMHg3YSwgMHg4MiwgMHgyMiwgMHg0YywgMHg4MSwgMHg2YywgMHgwMCwgMHgwMCwKKwkweDg1LCAweDgyLCAweDIyLCAweDUwLCAweDgxLCAweDZjLCAweDAwLCAweDAwLCAweDg2LCAweDgyLCAweDIyLCAweDU0LAorCTB4ODEsIDB4NmMsIDB4MDAsIDB4MDAsIDB4ODgsIDB4ODIsIDB4MjIsIDB4NTgsIDB4ODEsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHg4ZCwgMHg4MiwgMHgyMiwgMHg1YywgMHg4MSwgMHg2YywgMHgwMCwgMHgwMCwgMHg1MCwgMHgwMSwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGJjLCAweDA5LCAweGIwLCAweDAxLCAweDAwLAorCTB4MjIsIDB4ODMsIDB4MDAsIDB4Y2EsIDB4MDEsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHgwMywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHhmMywgMHg4MywgMHgwMSwgMHgwMCwKKwkweDdlLCAweDgyLCAweGEyLCAweDQyLCAweDA1LCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAorCTB4MDUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MjIsIDB4ODMsIDB4MjIsIDB4Y2EsIDB4MDcsIDB4MTQsIDB4MDAsIDB4MDAsCisJMHgyMiwgMHg4MywgMHgwMCwgMHg0NiwgMHhmMywgMHg5MywgMHgwMCwgMHgwMCwgMHgyMiwgMHg4MywgMHgyMCwgMHg0MywKKwkweDk1LCAweDZmLCAweDAwLCAweDAwLCAweDIyLCAweDgzLCAweDgwLCAweGNhLCAweDA1LCAweDMwLCAweDAwLCAweDAwLAorCTB4MjIsIDB4ODMsIDB4MjIsIDB4MDEsIDB4ODAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4YzQsIDB4ODAsIDB4YTIsIDB4NDgsCisJMHhkYiwgMHg3ZCwgMHgwMCwgMHgwMCwgMHgyMiwgMHg4MywgMHgwMCwgMHhjYiwgMHhkYiwgMHg5MSwgMHgwMCwgMHgwMCwKKwkweDU3LCAweDAxLCAweDAwLCAweGJjLCAweGFiLCAweGIzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGJjLAorCTB4YjEsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MjIsIDB4ODMsIDB4MDAsIDB4Y2EsIDB4Y2YsIDB4YjMsIDB4MDAsIDB4MDAsCisJMHhmZiwgMHgwMCwgMHgwMCwgMHhjYSwgMHg4MSwgMHg4OCwgMHgwMSwgMHgwMCwgMHgyMiwgMHg4MywgMHhhMiwgMHg0MCwKKwkweDc0LCAweDdkLCAweDAwLCAweDAwLCAweDYwLCAweDAwLCAweDIwLCAweDQwLCAweDYwLCAweDk5LCAweDAxLCAweDAwLAorCTB4OGEsIDB4ODIsIDB4YTgsIDB4YjEsIDB4ODIsIDB4MzAsIDB4MDAsIDB4MDAsIDB4ODksIDB4ODIsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgyMiwgMHg4MywgMHgwMCwgMHhjYSwgMHg3OSwgMHhiMywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDRlLCAweDgxLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQzLAorCTB4Y2IsIDB4ODMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCisJMHg5MCwgMHg4MiwgMHhhMiwgMHg0MSwgMHg4MSwgMHg1MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAorCTB4OWIsIDB4ODIsIDB4OTEsIDB4ODIsIDB4ODIsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OGEsCisJMHg4MCwgMHhiMCwgMHgwMSwgMHgwMCwgMHhhZSwgMHg5ZiwgMHgwMCwgMHg0MCwgMHg4MCwgMHhjZSwgMHgwMSwgMHgwMCwKKwkweDk5LCAweDgyLCAweGE2LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDliLCAweDgyLCAweDU2LCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4YjYsIDB4MDMsIDB4MDAsIDB4NDAsIDB4YTEsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1MywgMHgwNywgMHg5MCwgMHgwMSwgMHgwMCwgMHhiNiwgMHgwMywgMHgwMCwgMHg0MCwKKwkweGExLCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUyLCAweDA3LCAweDkwLCAweDAxLCAweDAwLAorCTB4ZDgsIDB4OWYsIDB4MDAsIDB4NDEsIDB4OGIsIDB4YjMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGUsCisJMHg4MSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHhjZCwgMHg4MywgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDQ2LCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweGEwLCAweDgyLCAweGEyLCAweDQxLAorCTB4ODEsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg0NiwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHhhYiwgMHg4MiwgMHg5MSwgMHg4MSwKKwkweDgyLCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDg5LCAweDgwLCAweGIwLCAweDAxLCAweDAwLAorCTB4YWUsIDB4OWYsIDB4MDAsIDB4NDAsIDB4ODAsIDB4Y2UsIDB4MDEsIDB4MDAsIDB4YTksIDB4ODIsIDB4YTYsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhhYiwgMHg4MiwgMHg1NSwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweGI2LCAweDAzLCAweDAwLCAweDQwLCAweGExLCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUyLAorCTB4MDcsIDB4OTAsIDB4MDEsIDB4MDAsIDB4YjYsIDB4MDMsIDB4MDAsIDB4NDAsIDB4YTEsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1MywgMHgwNywgMHg5MCwgMHgwMSwgMHgwMCwgMHhkOCwgMHg5ZiwgMHgwMCwgMHg0MSwKKwkweDhiLCAweGIzLCAweDAwLCAweDAwLCAweGIxLCAweDAzLCAweDAwLCAweDQwLCAweGExLCAweDk5LCAweDAxLCAweDAwLAorCTB4YzQsIDB4MTQsIDB4MmYsIDB4NDAsIDB4OTksIDB4YjMsIDB4MDEsIDB4MDAsIDB4NTcsIDB4MDEsIDB4MDAsIDB4NDAsCisJMHg0OSwgMHhiMSwgMHgwMCwgMHgwMCwgMHhhMCwgMHg5NCwgMHgyZSwgMHg0MywgMHg5NywgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGYxLCAweGIxLCAweDAxLCAweDAwLCAweGIyLCAweDgyLCAweGEyLCAweDQxLAorCTB4OTcsIDB4NTAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4OTUsIDB4MjAsIDB4NDAsIDB4ZTEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHhhYywgMHg5NCwgMHgyZSwgMHg0MywgMHg5NywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweGYxLCAweGIxLCAweDAxLCAweDAwLCAweGI2LCAweDgyLCAweGEyLCAweDQxLCAweDk3LCAweDUwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4YWUsIDB4MDMsIDB4MDAsIDB4NDAsCisJMHhhMywgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDYwLCAweDE1LCAweDAwLCAweDQwLCAweDg1LCAweDk4LCAweDAxLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDQwLAorCTB4NDAsIDB4ZTQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTksIDB4NDEsIDB4OTQsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHg0MSwgMHhlMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwKKwkweDQwLCAweDk0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDU3LCAweDQxLCAweDkwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ODEsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTMsIDB4NDIsCisJMHg4MSwgMHg2YywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHhhMywgMHhjMSwgMHgwMSwgMHgwMCwKKwkweGJjLCAweDgyLCAweGEwLCAweDQyLCAweDgxLCAweDZjLCAweDAwLCAweDAwLCAweGJjLCAweDgyLCAweDAwLCAweDUwLAorCTB4ODUsIDB4YzAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4ODMsIDB4YTIsIDB4NDEsIDB4MDEsIDB4N2QsIDB4MDAsIDB4MDAsCisJMHhjZiwgMHg4MiwgMHgyMiwgMHg1OCwgMHg3MywgMHg3ZCwgMHgwMCwgMHgwMCwgMHg3OCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDYxLCAweDk5LCAweDAxLCAweDAwLCAweGM3LCAweDgyLCAweGE4LCAweGIxLCAweDljLCAweDMwLCAweDAwLCAweDAwLAorCTB4MzAsIDB4MDAsIDB4MzgsIDB4NDUsIDB4OWQsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4NWYsCisJMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHg1ZSwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwKKwkweDAwLCAweGMwLCAweDAwLCAweGE2LCAweDFlLCAweGE0LCAweDAxLCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweDBlLAorCTB4MTAsIDB4YzksIDB4MDAsIDB4MDAsIDB4Y2YsIDB4ODIsIDB4MzMsIDB4YzQsIDB4ODEsIDB4MzAsIDB4MDAsIDB4MDAsCisJMHhkMiwgMHg4MiwgMHhhMSwgMHhhZCwgMHg5ZCwgMHgyMCwgMHgwMCwgMHgwMCwgMHhjNiwgMHg4MiwgMHgxMywgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEzLCAweDRlLCAweDVhLCAweDgzLCAweDAxLCAweDAwLAorCTB4MzAsIDB4MDAsIDB4MzgsIDB4NDUsIDB4OWQsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4NWYsCisJMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHg1ZSwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweGEyLCAweDQwLCAweDA1LCAweDZjLCAweDAwLCAweDAwLCAweGRkLCAweDgyLCAweDIyLCAweGFiLAorCTB4ODAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ZGIsIDB4ODIsIDB4YTIsIDB4NDAsIDB4MDEsIDB4N2QsIDB4MDAsIDB4MDAsCisJMHhkZCwgMHg4MiwgMHgyMiwgMHg1ZiwgMHg1NywgMHg3ZCwgMHgwMCwgMHgwMCwgMHgwZiwgMHg4OCwgMHgwMCwgMHg1ZiwKKwkweDFmLCAweGI0LCAweDAwLCAweDAwLCAweGRkLCAweDgyLCAweDIyLCAweDVlLCAweDU3LCAweDdkLCAweDAwLCAweDAwLAorCTB4N2QsIDB4ODgsIDB4MDAsIDB4NWYsIDB4MWYsIDB4YjQsIDB4MDAsIDB4MDAsIDB4ZTMsIDB4ODIsIDB4MjIsIDB4NTQsCisJMHg3MywgMHg3ZCwgMHgwMCwgMHgwMCwgMHg3NCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweGRkLCAweDgyLCAweGE4LCAweGIxLCAweDAwLCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVmLAorCTB4MWYsIDB4YjQsIDB4MDEsIDB4MDAsIDB4ZjQsIDB4ODQsIDB4YTIsIDB4NWYsIDB4MDEsIDB4N2MsIDB4MDAsIDB4MDAsCisJMHg5MiwgMHg4NywgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhlNSwgMHg4MiwgMHhhMiwgMHg1ZiwKKwkweDU5LCAweDI3LCAweDAwLCAweDAwLCAweGU3LCAweDgyLCAweGEyLCAweDVjLCAweDczLCAweDdkLCAweDAwLCAweDAwLAorCTB4ZWUsIDB4ODIsIDB4YTIsIDB4NWUsIDB4NzMsIDB4N2QsIDB4MDAsIDB4MDAsIDB4ZmEsIDB4ODIsIDB4MjIsIDB4NWMsCisJMHg3MywgMHg3ZCwgMHgwMCwgMHgwMCwgMHhmYiwgMHg4MiwgMHgzNywgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDdjLCAweDAwLCAweDAwLCAweDQwLCAweDYxLCAweDk5LCAweDAxLCAweDAwLCAweGU4LCAweDgyLCAweGE4LCAweGIxLAorCTB4MzYsIDB4MzAsIDB4MDAsIDB4MDAsIDB4N2MsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjEsIDB4OTksIDB4MDEsIDB4MDAsCisJMHhlYSwgMHg4MiwgMHhhOCwgMHhiMSwgMHgwMCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgxZiwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAyLCAweDg4LCAweDAxLCAweDAwLCAweDM0LCAweDg1LCAweDE3LCAweDVmLCAweDFmLCAweGI0LCAweDAwLCAweDAwLAorCTB4ZmIsIDB4ODIsIDB4MzQsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4N2UsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwgMHhlZiwgMHg4MiwgMHhhOCwgMHhiMSwgMHgxMiwgMHgzMCwgMHgwMCwgMHgwMCwKKwkweGY3LCAweDgyLCAweDUyLCAweDIxLCAweDEzLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDQxLAorCTB4MmYsIDB4YzMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWYsIDB4MWYsIDB4YjQsIDB4MDEsIDB4MDAsCisJMHhmZiwgMHgzZiwgMHgwMCwgMHgwOSwgMHgwMCwgMHg4YywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywKKwkweDAxLCAweGYwLCAweDAxLCAweDAwLCAweDRmLCAweDgzLCAweDAwLCAweDM0LCAweDEzLCAweDg0LCAweDAwLCAweDAwLAorCTB4ZmYsIDB4M2YsIDB4MTQsIDB4MDksIDB4MDAsIDB4OGMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWYsCisJMHgxZiwgMHhiNCwgMHgwMSwgMHgwMCwgMHhjMiwgMHg4MywgMHgwMCwgMHg0MywgMHgwMSwgMHhmMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweGZiLCAweDgyLCAweDMzLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4NGUsIDB4NWEsIDB4N2YsIDB4MDAsIDB4MDAsCisJMHgwNywgMHgwMCwgMHgwMCwgMHg0ZSwgMHg4MCwgMHhlNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgzOSwgMHgwMCwgMHg0MCwKKwkweDgwLCAweGM4LCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDQwLCAweDA2LCAweDZjLCAweDAwLCAweDAwLAorCTB4YzYsIDB4ODIsIDB4MTMsIDB4NGUsIDB4NWEsIDB4OTMsIDB4MDAsIDB4MDAsIDB4ZTQsIDB4ODcsIDB4YTIsIDB4NDgsCisJMHhmZCwgMHg3ZiwgMHgwMCwgMHgwMCwgMHgwNSwgMHg4MywgMHgwMiwgMHhlNiwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDA2LCAweDgzLCAweDgzLCAweGU1LCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDhlLCAweDgyLCAweDAwLCAweDQyLAorCTB4OTcsIDB4YjMsIDB4MDAsIDB4MDAsIDB4OWUsIDB4ODIsIDB4MDAsIDB4NDIsIDB4OTcsIDB4YjMsIDB4MDAsIDB4MDAsCisJMHgwOSwgMHg4MywgMHgyMiwgMHg0NiwgMHhmMywgMHg3ZiwgMHgwMCwgMHgwMCwgMHgwYywgMHg4MywgMHhhMiwgMHg0MSwKKwkweGYzLCAweDdmLCAweDAwLCAweDAwLCAweGM2LCAweDgwLCAweDAwLCAweDQyLCAweDk3LCAweDMzLCAweDAxLCAweDAwLAorCTB4MGMsIDB4ODMsIDB4MjIsIDB4NDQsIDB4ZjMsIDB4N2YsIDB4MDAsIDB4MDAsIDB4MGMsIDB4ODMsIDB4YTIsIDB4NDEsCisJMHhmMywgMHg3ZiwgMHgwMCwgMHgwMCwgMHhjNiwgMHg4MCwgMHgwMCwgMHg2ZiwgMHg5NywgMHgzMywgMHgwMSwgMHgwMCwKKwkweDA0LCAweDAwLCAweGEyLCAweGFjLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDExLCAweDgzLCAweDIyLCAweDVhLAorCTB4NzMsIDB4N2QsIDB4MDAsIDB4MDAsIDB4N2EsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjEsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgwZSwgMHg4MywgMHhhOCwgMHhiMSwgMHg3ZSwgMHgzMSwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHhjZiwKKwkweDExLCAweGM5LCAweDAwLCAweDAwLCAweDE3LCAweDgzLCAweGEyLCAweDQwLCAweDkzLCAweDdmLCAweDAwLCAweDAwLAorCTB4MTcsIDB4ODMsIDB4MjIsIDB4NDQsIDB4OTMsIDB4N2YsIDB4MDAsIDB4MDAsIDB4MTMsIDB4ODMsIDB4NDIsIDB4YTUsCisJMHg4MCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgxNiwgMHg4MywgMHhhMiwgMHg0MCwgMHg5MywgMHg3ZiwgMHgwMCwgMHgwMCwKKwkweDM4LCAweDgzLCAweDFhLCAweDQwLCAweDkzLCAweDkzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFhLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4ZGYsIDB4ODAsIDB4YTIsIDB4NDAsIDB4NzMsIDB4N2QsIDB4MDAsIDB4MDAsCisJMHhkZiwgMHg4NywgMHgyMiwgMHg0NCwgMHgyMSwgMHg2ZiwgMHgwMCwgMHgwMCwgMHhkNiwgMHg4NywgMHgyMiwgMHg0MCwKKwkweDY1LCAweDdkLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweGEyLCAweDViLCAweDczLCAweDdkLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4YTIsIDB4NDksIDB4MzMsIDB4N2QsIDB4MDAsIDB4MDAsIDB4MjEsIDB4ODMsIDB4MjIsIDB4NDgsCisJMHgzMywgMHg3ZCwgMHgwMCwgMHgwMCwgMHhmZiwgMHgwMSwgMHgwMCwgMHg5OSwgMHg4MCwgMHhkOCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDUwLCAweDgxLCAweGUwLCAweDAxLCAweDAwLCAweGE4LCAweDk4LCAweDJmLCAweDQwLAorCTB4MzMsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZTAsIDB4YzEsIDB4MDEsIDB4MDAsCisJMHgwMSwgMHg4MywgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhjNiwgMHg4MiwgMHgwMCwgMHg0MCwKKwkweDhiLCAweGIzLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDVlLCAweDFmLCAweDdjLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MjIsIDB4NWYsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWUsCisJMHgxZiwgMHg5MCwgMHgwMSwgMHgwMCwgMHhjNiwgMHg4MiwgMHgwMCwgMHg1ZiwgMHgxZiwgMHg4MCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweGEyLCAweDVlLCAweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweDVmLAorCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWUsIDB4MWYsIDB4OTAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1ZiwgMHgxZiwgMHg4MCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1OCwKKwkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRlLCAweDYyLCAweGIxLCAweDAxLCAweDAwLAorCTB4YzYsIDB4ODIsIDB4MjgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MmMsIDB4ODMsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwZiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDA0LCAweDAwLCAweGEyLCAweDVlLCAweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweDVmLAorCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MzIsIDB4ODMsIDB4MzMsIDB4NDAsIDB4MWYsIDB4MzAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHhhMiwgMHg0ZSwgMHg1YSwgMHg3ZiwgMHgwMCwgMHgwMCwgMHgwNywgMHgwMCwgMHgwMCwgMHg0ZSwKKwkweDgwLCAweGU0LCAweDAxLCAweDAwLCAweDAwLCAweDM5LCAweDAwLCAweDQwLCAweDgwLCAweGM4LCAweDAxLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4YTIsIDB4NDAsIDB4MDYsIDB4NmMsIDB4MDAsIDB4MDAsIDB4YzYsIDB4ODIsIDB4MTMsIDB4NGUsCisJMHg1YSwgMHg5MywgMHgwMCwgMHgwMCwgMHgzYSwgMHg4MywgMHhhMCwgMHhjZSwgMHg4MSwgMHg1MCwgMHgwMCwgMHgwMCwKKwkweDRkLCAweDgzLCAweGEwLCAweGNkLCAweDgxLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE1LAorCTB4OWMsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjEsIDB4ODEsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHg0ZCwgMHg4MywgMHgyMiwgMHhiNSwgMHg4MSwgMHgxNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgxNSwgMHgyZiwgMHg0MCwKKwkweDQ5LCAweGIxLCAweDAxLCAweDAwLCAweDNlLCAweDgzLCAweDQyLCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4NjAsIDB4YjQsIDB4NjUsIDB4OTcsIDB4MDEsIDB4MDAsIDB4ZDAsIDB4MTUsIDB4MmUsIDB4NDAsCisJMHg2OSwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYSwgMHg0NCwgMHg5MywgMHg4MywgMHgwMSwgMHgwMCwKKwkweDA0LCAweDAwLCAweDIyLCAweDQwLCAweGUxLCAweDZkLCAweDAwLCAweDAwLCAweDFhLCAweDAwLCAweDAwLCAweGEyLAorCTB4ODAsIDB4ZGMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhiMSwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiNSwKKwkweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDA1LCAweDAwLCAweDAwLCAweDQwLCAweDYxLCAweDk5LCAweDAxLCAweDAwLAorCTB4ODAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4NDgsIDB4ODMsIDB4YTgsIDB4YTEsCisJMHhlMCwgMHgzMSwgMHgwMCwgMHgwMCwgMHgxNywgMHg4MywgMHgwMCwgMHg4OCwgMHg5ZSwgMHhiMywgMHgwMCwgMHgwMCwKKwkweDE3LCAweDgzLCAweGEyLCAweDQxLCAweDY3LCAweDZmLCAweDAwLCAweDAwLCAweDE3LCAweDgzLCAweDAwLCAweDZmLAorCTB4ZGIsIDB4OTEsIDB4MDAsIDB4MDAsIDB4NGQsIDB4ODMsIDB4NDIsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgxNywgMHg4MywgMHgxYSwgMHg0MCwgMHg5MywgMHg4MywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHg0MCwKKwkweDg5LCAweDk4LCAweDAxLCAweDAwLCAweDAyLCAweDk5LCAweDAwLCAweDAwLCAweDhhLCAweDMwLCAweDAxLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4YTIsIDB4NWEsIDB4MDEsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjIsIDB4NDAsCisJMHgwMSwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHg5OSwgMHgwMCwgMHgwOSwgMHg0NiwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDNmLCAweDAwLCAweDAwLCAweGYzLCAweDBjLCAweDg4LCAweDAxLCAweDAwLCAweDVjLCAweDgzLCAweGE2LCAweDQyLAorCTB4MTMsIDB4NjAsIDB4MDAsIDB4MDAsIDB4OTUsIDB4OTYsIDB4MDAsIDB4OTUsIDB4MDMsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHg1NywgMHg4MywgMHg2MSwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHg3NSwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDYxLCAweDk5LCAweDAxLCAweDAwLCAweDU4LCAweDgzLCAweGE4LCAweGIxLCAweDBjLCAweDMwLCAweDAwLCAweDAwLAorCTB4YTMsIDB4OTYsIDB4NzEsIDB4MTAsIDB4OTQsIDB4MzAsIDB4MDEsIDB4MDAsIDB4NWQsIDB4ODMsIDB4MDAsIDB4NTgsCisJMHgxZiwgMHg5MCwgMHgwMCwgMHgwMCwgMHg4NywgMHg5NiwgMHgwMCwgMHg5NSwgMHgwMywgMHgzMCwgMHgwMSwgMHgwMCwKKwkweDIzLCAweDgzLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDJkLCAweDAzLAorCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MmQsIDB4ZjAsIDB4MmUsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHg4MCwgMHgwNCwgMHgwMCwgMHgxNywgMHg5NiwgMHg4OCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhNiwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDRhLCAweGMxLCAweDAwLCAweDE3LCAweDk2LCAweGQ4LCAweDAxLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4YTYsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ZWUsIDB4MDcsIDB4MDAsIDB4NDAsCisJMHg5NywgMHg5OCwgMHgwMSwgMHgwMCwgMHg2OCwgMHg4MywgMHgyMywgMHg0YiwgMHhlNCwgMHg2ZCwgMHgwMCwgMHgwMCwKKwkweDY4LCAweDgzLCAweDIyLCAweDRiLCAweGZkLCAweDdmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4MWYsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MjIsIDB4MDAsIDB4MmYsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCisJMHg2YiwgMHg4MywgMHg4MywgMHgxNywgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgyNiwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDQ3LCAweDk5LCAweDAxLCAweDAwLCAweDZkLCAweDgzLCAweDg1LCAweDE3LCAweDgwLCAweDMyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDgsIDB4NDcsIDB4YzEsIDB4MDEsIDB4MDAsIDB4NzIsIDB4ODMsIDB4MjIsIDB4NTUsCisJMHgyZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHg0MywgMHhkMSwgMHgwMSwgMHgwMCwKKwkweDBmLCAweDAwLCAweDAwLCAweGZhLCAweDk2LCAweDg4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLAorCTB4OTcsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4NzMsIDB4ODMsIDB4MDAsIDB4NGIsIDB4NDQsIDB4YzEsIDB4MDAsIDB4MDAsCisJMHgxMiwgMHgwMCwgMHgwMCwgMHhhMiwgMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgyOCwgMHgwMCwgMHgwMCwgMHhmNiwKKwkweDAyLCAweGNjLCAweDAxLCAweDAwLCAweDBhLCAweDAwLCAweDAwLCAweGExLCAweDQyLCAweGM5LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MTYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjgsIDB4ZjAsCisJMHgxMCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHgxYSwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGEyLCAweDJhLCAweGIwLCAweDAxLCAweDAwLCAweGMwLCAweDI4LCAweDNjLCAweDQ2LAorCTB4MGQsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmQsIDB4NDQsIDB4OTUsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHg3ZiwgMHg4MywgMHhhMiwgMHhmOCwgMHgwZSwgMHgzMCwgMHgwMCwgMHgwMCwgMHg4ZiwgMHg4MywgMHgyMiwgMHg0MSwKKwkweDk1LCAweDUwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDJkLCAweDUwLCAweDQ5LCAweGMxLCAweDAxLCAweDAwLAorCTB4N2IsIDB4ODMsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4N2MsIDB4ODMsIDB4YTIsIDB4ZjgsCisJMHgxNiwgMHg2YywgMHgwMCwgMHgwMCwgMHg3YywgMHg4MywgMHhhMiwgMHhmOCwgMHgxMCwgMHg2YywgMHgwMCwgMHgwMCwKKwkweDdjLCAweDgzLCAweGEyLCAweGYwLCAweDFhLCAweDZjLCAweDAwLCAweDAwLCAweDhkLCAweDgzLCAweDIyLCAweDU4LAorCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OTksIDB4M2YsIDB4NDIsIDB4MTMsIDB4ZjAsIDB4MDEsIDB4MDAsCisJMHg4NCwgMHg4MywgMHg2NSwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHg4OCwgMHg4MywgMHhhMiwgMHhmMywKKwkweDc0LCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA2LCAweGU2LCAweDk1LCAweDAxLCAweDAwLAorCTB4OGQsIDB4ODMsIDB4NzUsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDYsCisJMHg5NiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgzZiwgMHgwMCwgMHg3NSwgMHhmMywgMHgwYywgMHg4OCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDU1LCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRiLAorCTB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4OGIsIDB4ODMsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHg4ZCwgMHg4MywgMHg2NywgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHg5NSwgMHg4MywgMHg3NywgMHg0MSwKKwkweDJkLCAweGMzLCAweDAwLCAweDAwLCAweDkzLCAweDgzLCAweDIyLCAweDU4LCAweDFmLCAweDdjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTUsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDYsCisJMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHg5MSwgMHg4MywgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDkzLCAweDgzLCAweDY3LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweGQzLCAweDgzLCAweDc3LCAweDQxLAorCTB4MmQsIDB4YzMsIDB4MDAsIDB4MDAsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MWEsIDB4ZjQsIDB4MDEsIDB4MDAsCisJMHgxMiwgMHg5NSwgMHgwMCwgMHgwNywgMHgxNiwgMHgzMCwgMHgwMSwgMHgwMCwgMHhhNiwgMHg4MywgMHgyMiwgMHg0MSwKKwkweDgxLCAweDZjLCAweDAwLCAweDAwLCAweDliLCAweDgzLCAweDIyLCAweDQyLCAweDgxLCAweDZjLCAweDAwLCAweDAwLAorCTB4MjMsIDB4ODMsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4YTUsIDB4ODMsIDB4MjIsIDB4NWYsCisJMHgwZiwgMHg3YywgMHgwMCwgMHgwMCwgMHg0OCwgMHg5NiwgMHgwMCwgMHg1ZiwgMHgwMSwgMHgxMCwgMHgwMSwgMHgwMCwKKwkweGExLCAweDgzLCAweDIyLCAweDQwLCAweDk1LCAweDZjLCAweDAwLCAweDAwLCAweDA0LCAweDgwLCAweDAwLCAweDAzLAorCTB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjIsIDB4MDIsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHg5ZiwgMHg5NSwgMHgwMCwgMHg1MiwgMHg5NSwgMHgzMCwgMHgwMSwgMHgwMCwgMHhhNiwgMHg5NSwgMHgwMCwgMHg0YiwKKwkweDAyLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVmLCAweDBmLCAweDgwLCAweDAxLCAweDAwLAorCTB4MDEsIDB4MDQsIDB4MDAsIDB4NDAsIDB4ODksIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDIsIDB4OTksIDB4MDAsIDB4MDAsCisJMHg4YSwgMHgzMCwgMHgwMSwgMHgwMCwgMHhlZCwgMHg4NywgMHgwMCwgMHg0MCwgMHgwZiwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweGI1LCAweDgzLCAweGEyLCAweDVhLCAweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDVhLAorCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjUsIDB4MDAsIDB4MGQsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgyMiwgMHgwYiwgMHhlNiwgMHg3ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiNywgMHgwMCwgMHgwZCwKKwkweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweDBiLCAweGU2LCAweDdkLCAweDAwLCAweDAwLAorCTB4NmEsIDB4OTQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4YjUsIDB4ODMsIDB4MjIsIDB4MjAsCisJMHg4NSwgMHg2YywgMHgwMCwgMHgwMCwgMHhiMCwgMHg4MywgMHg5YywgMHgwZiwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDIzLCAweDgzLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDg3LCAweDk1LCAweDAwLCAweDVjLAorCTB4MWYsIDB4MDAsIDB4MDEsIDB4MDAsIDB4YzIsIDB4OTcsIDB4MDAsIDB4NDIsIDB4NjEsIDB4MzEsIDB4MDEsIDB4MDAsCisJMHgyMywgMHg4MywgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHg5MCwgMHgwNCwgMHgwMCwgMHgwNywKKwkweDk2LCAweDMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJkLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4YTIsIDB4NGIsIDB4ZTEsIDB4N2QsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4NWMsCisJMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweGI5LCAweDgzLCAweDgyLCAweGYwLCAweDE4LCAweDMwLCAweDAwLCAweDAwLCAweDY5LCAweDg5LCAweDAwLCAweDQ1LAorCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MjgsIDB4MjAsIDB4MDAsIDB4YTYsIDB4OTYsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHhiZiwgMHg4MywgMHgyMiwgMHgxNywgMHg5NiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgzNCwgMHgwNCwgMHgwMCwgMHg0MCwKKwkweDg5LCAweDk4LCAweDAxLCAweDAwLCAweDAyLCAweDk5LCAweDAwLCAweDAwLCAweDhhLCAweDMwLCAweDAxLCAweDAwLAorCTB4NTUsIDB4OTcsIDB4MDAsIDB4NGIsIDB4OTUsIDB4MzAsIDB4MDEsIDB4MDAsIDB4NjksIDB4ODksIDB4MDAsIDB4NGIsCisJMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHg1NywgMHg5NiwgMHgwMCwgMHgwMywgMHg0OCwgMHgzMSwgMHgwMSwgMHgwMCwKKwkweGE5LCAweDkzLCAweDAwLCAweDQwLCAweDgxLCAweDMwLCAweDAxLCAweDAwLCAweDY5LCAweDg5LCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MGYsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwNCwgMHgwMCwgMHg0MCwgMHg4OSwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMiwgMHg5OSwgMHgwMCwgMHgwMCwKKwkweDhhLCAweDMwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweDQwLCAweDAxLCAweDZjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MmUsIDB4MTAsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjgsIDB4NTAsCisJMHgwMywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDQwLCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJlLCAweDUwLAorCTB4NDksIDB4YzEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwKKwkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDIwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLAorCTB4Y2UsIDB4ODMsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MTAsCisJMHg2MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHhkMCwgMHg4MywgMHhhOCwgMHgwMCwgMHhlMCwgMHgzMSwgMHgwMCwgMHgwMCwKKwkweDIzLCAweDgzLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDJkLCAweDAzLAorCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MGYsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgyZSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMiwKKwkweDAyLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDE3LCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4NDEsIDB4MDAsIDB4YTYsIDB4OTYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ZWUsIDB4MDcsIDB4MmUsIDB4NDcsCisJMHg5NywgMHg5MCwgMHgwMSwgMHgwMCwgMHhlNiwgMHg4MywgMHgyMiwgMHgxNywgMHg5NiwgMHgwNCwgMHgwMCwgMHgwMCwKKwkweGU0LCAweDgzLCAweDIyLCAweDRiLCAweGZkLCAweDdmLCAweDAwLCAweDAwLCAweGU0LCAweDgzLCAweDIzLCAweGEyLAorCTB4MDIsIDB4NmMsIDB4MDAsIDB4MDAsIDB4OWYsIDB4OTUsIDB4MDAsIDB4NTIsIDB4OTUsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgyMiwgMHg0MSwgMHg5NywgMHg1MCwgMHgwMCwgMHgwMCwgMHgwYywgMHgwMCwgMHgyZCwgMHgwMCwKKwkweDEyLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLCAweDAwLCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NWMsIDB4MDEsIDB4ODAsIDB4MDEsIDB4MDAsIDB4YTYsIDB4OTUsIDB4MDAsIDB4NGIsCisJMHgwMiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOSwgMHgwMCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDUwLCAweDAzLCAweGIwLCAweDAxLCAweDAwLCAweDAzLCAweDg0LCAweDAwLCAweDVjLAorCTB4MTcsIDB4OTAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4ODMsIDB4MjIsIDB4NDMsIDB4MmYsIDB4N2MsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHgxZiwgMHg5MCwgMHgwMSwgMHgwMCwgMHhmMSwgMHg4MywgMHgyMiwgMHg1ZiwKKwkweDJmLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDJlLCAweDEwLCAweDQ4LCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTgsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDMsCisJMHhmMCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweGVkLCAweDgzLCAweDYyLCAweDQyLCAweDYxLCAweDMxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLAorCTB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZWUsIDB4ODMsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgyMywgMHg4MywgMHg3MiwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHgwMCwgMHgyZCwgMHgwMywKKwkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweGZmLCAweDBmLCAweDAwLCAweGY2LCAweDgwLCAweDg4LCAweDAxLCAweDAwLAorCTB4ZjUsIDB4ODMsIDB4YTIsIDB4YTYsIDB4ODEsIDB4NmMsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4ODMsIDB4MDAsIDB4ZjIsCisJMHgzYSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhmMSwgMHg4NCwgMHhhMiwgMHg0YiwgMHhmZCwgMHg3ZiwgMHgwMCwgMHgwMCwKKwkweGMzLCAweDk0LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAzLCAweDg4LCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDMsIDB4ODQsIDB4MjIsIDB4NGEsIDB4MmYsIDB4N2MsIDB4MDAsIDB4MDAsCisJMHgwMywgMHg4NCwgMHgyMiwgMHg0OCwgMHgyZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwYSwgMHgwMCwgMHgyZCwgMHgwMywKKwkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDNmLCAweDAwLCAweDAwLCAweGYyLCAweDg2LCAweDg4LCAweDAxLCAweDAwLAorCTB4MWYsIDB4MDAsIDB4MDAsIDB4NDMsIDB4ODQsIDB4ODgsIDB4MDEsIDB4MDAsIDB4MDUsIDB4MDAsIDB4MDAsIDB4NDMsCisJMHg4MCwgMHhmNCwgMHgwMSwgMHgwMCwgMHg5OCwgMHg5NCwgMHgzZCwgMHg0MiwgMHg4MSwgMHhlMCwgMHgwMSwgMHgwMCwKKwkweDAzLCAweDg0LCAweGEyLCAweDQyLCAweGUwLCAweDdkLCAweDAwLCAweDAwLCAweGYxLCAweDg0LCAweGEyLCAweDRiLAorCTB4ZmQsIDB4N2YsIDB4MDAsIDB4MDAsIDB4YzMsIDB4OTQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHgwMywgMHg4OCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMiwgMHgwNCwgMHgwMCwgMHg0MCwKKwkweDg5LCAweDk4LCAweDAxLCAweDAwLCAweDAyLCAweDk5LCAweDAwLCAweDAwLCAweDhhLCAweDMwLCAweDAxLCAweDAwLAorCTB4MDUsIDB4ODQsIDB4NjksIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTMsCisJMHgwOSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3OSwgMHg0MSwgMHg0NywgMHhjMywgMHgwMSwgMHgwMCwKKwkweDA0LCAweDAwLCAweGEwLCAweGExLCAweDA5LCAweDZjLCAweDAwLCAweDAwLCAweDBjLCAweDg0LCAweDIyLCAweGExLAorCTB4MDksIDB4NmMsIDB4MDAsIDB4MDAsIDB4MjcsIDB4ODMsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwOCwgMHg4NCwgMHgwMCwgMHgwMywgMHg0OCwgMHhiMSwgMHgwMCwgMHgwMCwgMHg0NiwgMHg4NCwgMHhhMywgMHg5MiwKKwkweDAzLCAweDZjLCAweDAwLCAweDAwLCAweDI1LCAweDk4LCAweDAwLCAweDQwLCAweDk1LCAweDMwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4NDMsIDB4YzMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTYsCisJMHg4MCwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMywgMHg4OCwgMHgyNywgMHgwOCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDEzLCAweDg0LCAweDIyLCAweDVjLCAweDE3LCAweDdjLCAweDAwLCAweDAwLCAweDE0LCAweDg0LCAweDAwLCAweDAwLAorCTB4MmEsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmEsIDB4YzgsIDB4MDEsIDB4MDAsCisJMHgwMiwgMHgwMCwgMHgwMCwgMHgwOCwgMHg4MCwgMHhjOCwgMHgwMSwgMHgwMCwgMHgxOCwgMHg4NCwgMHhhMiwgMHg0MywKKwkweDJmLCAweDdjLCAweDAwLCAweDAwLCAweDU4LCAweDk3LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4MzQsIDB4ODQsIDB4MDAsIDB4NWUsIDB4MTcsIDB4OTAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDEsCisJMHg4YywgMHhjYywgMHgwMSwgMHgwMCwgMHg1OCwgMHg5NywgMHgwMCwgMHg0YywgMHgwMywgMHgzMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDJlLCAweDQ2LCAweDAyLCAweGIwLCAweDAxLCAweDAwLCAweDEwLCAweDgwLCAweDAwLCAweDEwLAorCTB4NDgsIDB4YzksIDB4MDEsIDB4MDAsIDB4MGMsIDB4MDAsIDB4MDAsIDB4MDEsIDB4ZjAsIDB4Y2QsIDB4MDEsIDB4MDAsCisJMHgyYywgMHgwMCwgMHgwMCwgMHg0MCwgMHhmMCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNiwKKwkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDE1LCAweGUwLCAweGM5LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YTAsIDB4MDAsIDB4MDAsIDB4YTQsCisJMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHgyMSwgMHg4NCwgMHhhOCwgMHg1NCwgMHgxNywgMHgxMCwgMHgwMCwgMHgwMCwKKwkweDM0LCAweDg0LCAweDAwLCAweDVlLCAweDE3LCAweDkwLCAweDAwLCAweDAwLCAweDEyLCAweDAwLCAweDAwLCAweDAwLAorCTB4MmEsIDB4YzgsIDB4MDEsIDB4MDAsIDB4MzMsIDB4ODQsIDB4MjIsIDB4NDMsIDB4MmYsIDB4N2MsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgwMSwgMHg4YywgMHhjYywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YywKKwkweDAzLCAweGIwLCAweDAxLCAweDAwLCAweDc5LCAweDk3LCAweDAwLCAweDQzLCAweDYxLCAweDMxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MmUsIDB4NDYsIDB4MDIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MTAsIDB4ODAsIDB4MDAsIDB4MTAsCisJMHg0OCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwYywgMHgwMCwgMHgwMCwgMHgwMSwgMHhmMCwgMHhjZCwgMHgwMSwgMHgwMCwKKwkweDBjLCAweDAwLCAweDAwLCAweDA5LCAweGYwLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LAorCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MTUsIDB4ZTAsIDB4YzksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhhMCwgMHgwMCwgMHgwMCwgMHhhNCwKKwkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDM0LCAweDg0LCAweDI4LCAweDU0LCAweDE3LCAweDEwLCAweDAwLCAweDAwLAorCTB4MzAsIDB4ODQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4NzksIDB4OTcsIDB4MDAsIDB4NDMsCisJMHg2MSwgMHgzMSwgMHgwMSwgMHgwMCwgMHgzNiwgMHg4NCwgMHgyMiwgMHg1MCwgMHgyZiwgMHg3YywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDU2LCAweDE3LCAweDkwLCAweDAxLCAweDAwLCAweDA3LCAweDAwLCAweDAwLCAweDE3LAorCTB4OTgsIDB4ODgsIDB4MDEsIDB4MDAsIDB4MzksIDB4ODQsIDB4YTIsIDB4NDEsIDB4OTksIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1NSwgMHgxNywgMHg5MCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywKKwkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLAorCTB4M2EsIDB4ODQsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MjMsIDB4ODMsIDB4MDAsIDB4ODgsCisJMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHg2MCwgMHg5NywgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDQxLCAweDg0LCAweDIyLCAweDQzLCAweDJmLCAweDdjLCAweDAwLCAweDAwLCAweDE2LCAweDgwLCAweDAwLCAweDAzLAorCTB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWQsIDB4ZTQsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHhmYSwgMHg5NiwgMHgwMCwgMHg1ZSwgMHgwNSwgMHgxMCwgMHgwMSwgMHgwMCwgMHg0NCwgMHg4NCwgMHhhMiwgMHg1ZiwKKwkweDJmLCAweDdjLCAweDAwLCAweDAwLCAweDgwLCAweDkzLCAweDAwLCAweDAxLCAweDM4LCAweDQzLCAweDAxLCAweDAwLAorCTB4YzMsIDB4OTQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDMsIDB4ODgsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg0OCwgMHg4NCwgMHhhMiwgMHg0YiwgMHhmZCwgMHg3ZiwgMHgwMCwgMHgwMCwKKwkweGVlLCAweDg0LCAweDAwLCAweDQxLCAweDQzLCAweGMzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4MjcsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MmQsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgxMSwgMHhiMCwgMHgwMSwgMHgwMCwgMHg0YiwgMHg4NCwgMHgzNSwgMHgwMSwKKwkweDg2LCAweDMwLCAweDAwLCAweDAwLCAweDZkLCAweDAwLCAweDAwLCAweDQwLCAweDYxLCAweDk5LCAweDAxLCAweDAwLAorCTB4NTQsIDB4ODQsIDB4MjgsIDB4YjEsIDB4MzAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4NGMsIDB4ODQsIDB4MjIsIDB4NGQsCisJMHg3NSwgMHg3ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNiwgMHg4MCwgMHhiMiwgMHgwMSwgMHgwMCwKKwkweGRiLCAweDg0LCAweGE3LCAweDQwLCAweDExLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAorCTB4NDMsIDB4YzMsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4NDAsIDB4MjcsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHhlZCwgMHg4NCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg2ZCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDYxLCAweDk5LCAweDAxLCAweDAwLCAweDU0LCAweDg0LCAweGE4LCAweGIxLCAweDEyLCAweDMwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MTYsIDB4ODAsIDB4YjIsIDB4MDEsIDB4MDAsIDB4NWUsIDB4ODQsIDB4YTcsIDB4NDAsCisJMHgxMSwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg0MywgMHhjMywgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDA5LCAweDEwLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LAorCTB4MmMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ZGUsIDB4MDcsIDB4MDAsIDB4NDMsIDB4ODAsIDB4Y2UsIDB4MDEsIDB4MDAsCisJMHg0YywgMHg4NCwgMHhhYSwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHg2MywgMHg4NCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDQwLCAweDAwLCAweDNlLCAweDQzLCAweDI3LCAweGUwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDksIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsCisJMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgyNywgMHhjMCwgMHgwMSwgMHgwMCwKKwkweDRjLCAweDg0LCAweGEzLCAweDBiLCAweDg3LCAweDUwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE1LCAweDQwLAorCTB4MWIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MjMsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHhhMiwgMHgwMywgMHg0OCwgMHg2ZCwgMHgwMCwgMHgwMCwgMHgxMiwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDJhLCAweGM4LCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDJkLCAweDQwLCAweDM5LCAweGIwLCAweDAxLCAweDAwLAorCTB4NmQsIDB4ODQsIDB4YTIsIDB4NDAsIDB4MjcsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MjIsIDB4MDAsIDB4MDAsIDB4MDgsCisJMHgxMiwgMHhjOCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHgxNiwgMHgzMCwgMHg2YywgMHgwMCwgMHgwMCwKKwkweGRlLCAweDA3LCAweDAwLCAweDQwLCAweDI1LCAweDk4LCAweDAxLCAweDAwLCAweDcwLCAweDg0LCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MTIsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHgzMCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYiwKKwkweDI1LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDMyLCAweGIwLCAweDAxLCAweDAwLAorCTB4MTQsIDB4MDAsIDB4MjAsIDB4MDEsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZWUsIDB4MDcsIDB4MDAsIDB4NDAsCisJMHgzNywgMHg5OCwgMHgwMSwgMHgwMCwgMHg3NSwgMHg4NCwgMHgyMywgMHgwMSwgMHgzNiwgMHg2YywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDM2LCAweGIwLCAweDAxLCAweDAwLCAweDgwLCAweDg0LCAweDgyLCAweDQxLAorCTB4MjMsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODAsIDB4MDAsIDB4MTAsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsCisJMHg3YywgMHg4NCwgMHgyMiwgMHg0MCwgMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywKKwkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLAorCTB4NzksIDB4ODQsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MjMsIDB4ODMsIDB4MDAsIDB4ODgsCisJMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHhlZCwgMHg5NCwgMHgwMCwgMHg0MywgMHgyMywgMHgzMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDMyLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAorCTB4MjMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHgxOSwgMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHg5MSwgMHg4NCwgMHgyMiwgMHg0NSwKKwkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDQxLCAweDIzLCAweDZjLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4YTIsIDB4MGIsIDB4MjUsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGMsCisJMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOSwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDE4LCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQzLAorCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4MTksIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCisJMHg4OCwgMHg4NCwgMHhhOCwgMHgxNSwgMHhlMCwgMHgzMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwKKwkweDAzLCAweGQwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLCAweDMzLCAweGMwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGMsIDB4MjUsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4MGMsIDB4MDAsIDB4MmQsIDB4NGMsCisJMHgxMywgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHgzNywgMHhkMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDUwLCAweDJiLCAweGMwLCAweDAxLCAweDAwLCAweDc1LCAweDg0LCAweDAwLCAweDQ1LAorCTB4MWYsIDB4ODAsIDB4MDAsIDB4MDAsIDB4OTMsIDB4ODQsIDB4YTMsIDB4MTIsIDB4MzYsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHg5NCwgMHg4NCwgMHg2OCwgMHgxYiwgMHgyOCwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2OCwgMHgxMiwKKwkweDI4LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA5LCAweGYwLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsCisJMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHgxOSwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKKwkweDk3LCAweDg0LCAweGE4LCAweDE1LCAweGUwLCAweDMxLCAweDAwLCAweDAwLCAweGJmLCAweDg0LCAweDIyLCAweDE0LAorCTB4MDIsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4MzMsIDB4YzAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgyNCwgMHhkMCwgMHgwMSwgMHgwMCwgMHgwYywgMHgwMCwgMHgyZCwgMHgxNCwKKwkweDEyLCAweGMwLCAweDAxLCAweDAwLCAweGI3LCAweDg0LCAweGEyLCAweDE0LCAweDM2LCAweDUwLCAweDAwLCAweDAwLAorCTB4YTcsIDB4ODQsIDB4MjIsIDB4NWMsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MzAsIDB4ODAsIDB4MDAsIDB4MTAsCisJMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHhhNSwgMHg4NCwgMHgyMiwgMHg0MCwgMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQyLCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLAorCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4YTIsIDB4ODQsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgyMywgMHg4MywgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywKKwkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDBjLCAweDAwLCAweDJkLCAweDVjLCAweDFmLCAweDgwLCAweDAxLCAweDAwLAorCTB4MTAsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4MmEsIDB4YzgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWMsCisJMHgyYiwgMHg4MCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHg1MCwgMHgyYiwgMHg2YywgMHgwMCwgMHgwMCwKKwkweGYwLCAweDA3LCAweDAwLCAweDQwLCAweDM3LCAweDk4LCAweDAxLCAweDAwLCAweGFkLCAweDg0LCAweDIzLCAweDAxLAorCTB4MzYsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MzYsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHhiOCwgMHg4NCwgMHgyMiwgMHgxYiwgMHgwMiwgMHg2YywgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgxMCwKKwkweDQ4LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJlLCAweDVjLCAweDFmLCAweDkwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsCisJMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhmZiwgMHgwNywgMHgwMCwgMHgxNSwgMHhlMCwgMHg4ZCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQyLCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweGEwLCAweDAwLCAweDAwLCAweGE0LAorCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4YjQsIDB4ODQsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHhiOCwgMHg4NCwgMHgwMCwgMHgwMywgMHg0OCwgMHhiMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwKKwkweDJhLCAweGMwLCAweDAxLCAweDAwLCAweDc1LCAweDg0LCAweGEyLCAweDQwLCAweDI1LCAweDZjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MzksIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjAsIDB4MTMsCisJMHgzOCwgMHg2YywgMHgwMCwgMHgwMCwgMHg0MCwgMHgwMCwgMHgzZCwgMHg0MywgMHgzOSwgMHhlMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDBiLCAweDI1LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LAorCTB4MTIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NzUsIDB4ODQsIDB4MDAsIDB4ZjAsIDB4MzAsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHhhMiwgMHg1YywgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgxOSwKKwkweDQyLCAweGM5LCAweDAxLCAweDAwLCAweGM2LCAweDg0LCAweDIyLCAweDQwLCAweGUzLCAweDZkLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTksCisJMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHhjMywgMHg4NCwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDIzLCAweDgzLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweGVkLCAweDk0LCAweDAwLCAweDQwLAorCTB4MmIsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MTgsIDB4MDAsIDB4MmUsIDB4MDMsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHhjYSwgMHg4NCwgMHgyMiwgMHg1MCwgMHgyZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1NiwKKwkweDE3LCAweDkwLCAweDAxLCAweDAwLCAweDA3LCAweDAwLCAweDAwLCAweDE3LCAweDk4LCAweDg4LCAweDAxLCAweDAwLAorCTB4Y2QsIDB4ODQsIDB4YTIsIDB4NDEsIDB4OTksIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTUsCisJMHgxNywgMHg5MCwgMHgwMSwgMHgwMCwgMHhkMCwgMHg4NCwgMHgyMiwgMHg0MywgMHgyZiwgMHg3YywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDU0LCAweDE3LCAweDkwLCAweDAxLCAweDAwLCAweDE2LCAweDAwLCAweDIwLCAweDFkLAorCTB4ZTQsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZDIsIDB4ODQsIDB4YTMsIDB4NDAsIDB4MjcsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHhkNCwgMHg4NCwgMHg2MCwgMHg1ZiwgMHgxNywgMHg5MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4NCwgMHgwMCwgMHgwYiwKKwkweDE2LCAweGRjLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDYwLCAweDEzLCAweDE2LCAweDk0LCAweDAxLCAweDAwLAorCTB4ZmEsIDB4OTYsIDB4MDAsIDB4NWUsIDB4MDUsIDB4MTAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4NDAsCisJMHgwZiwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMywgMHg4OCwgMHhhMiwgMHg1ZiwgMHgyZiwgMHg3YywgMHgwMCwgMHgwMCwKKwkweDE0LCAweDgwLCAweDAwLCAweDAzLCAweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYyLAorCTB4MDIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4OTMsIDB4MDAsIDB4MDEsIDB4MzgsIDB4NDMsIDB4MDEsIDB4MDAsCisJMHgwMywgMHg4OCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHgwMywKKwkweDQ4LCAweDZkLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweDRkLCAweDc1LCAweDdkLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGQsCisJMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHg0MCwgMHgxMSwgMHg2YywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDE2LCAweDYyLCAweGIxLCAweDAxLCAweDAwLCAweGUwLCAweDg0LCAweGE4LCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHhlMiwgMHg4NCwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhlZCwgMHg4NCwgMHgyMiwgMHgxMywKKwkweDgyLCAweDZjLCAweDAwLCAweDAwLCAweDQwLCAweDAwLCAweDNkLCAweDQzLCAweDgzLCAweGUwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MTAsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsCisJMHgyYywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNiwgMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweGU4LCAweDg0LCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LAorCTB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZWEsIDB4ODQsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHhlNCwgMHg4NCwgMHgwMCwgMHg0MSwgMHg4MywgMHhjMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDgyLCAweDAwLCAweGE2LCAweDA0LCAweGIwLCAweDAxLCAweDAwLAorCTB4YTAsIDB4OTgsIDB4MDAsIDB4NDAsIDB4NDcsIDB4OTksIDB4MDEsIDB4MDAsIDB4MzAsIDB4MDUsIDB4MDAsIDB4NDEsCisJMHg4OSwgMHgzMCwgMHgwMSwgMHgwMCwgMHg5ZiwgMHg5NSwgMHgwMCwgMHg1MiwgMHg5NSwgMHgzMCwgMHgwMSwgMHgwMCwKKwkweGE2LCAweDk1LCAweDAwLCAweDRiLCAweDAyLCAweGIwLCAweDAwLCAweDAwLCAweDAzLCAweDg4LCAweDAwLCAweDQwLAorCTB4MGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWYsIDB4MDEsIDB4ODAsIDB4MDEsIDB4MDAsCisJMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwZSwgMHhmNCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyNiwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDNmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDg4LCAweDAxLCAweDAwLAorCTB4MDUsIDB4MDQsIDB4MDAsIDB4NDAsIDB4ODksIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDIsIDB4OTksIDB4MDAsIDB4MDAsCisJMHg4YSwgMHgzMCwgMHgwMSwgMHgwMCwgMHgwMywgMHgwMCwgMHgwMCwgMHgwNywgMHgxYSwgMHhmNCwgMHgwMSwgMHgwMCwKKwkweDEyLCAweDk1LCAweDAwLCAweDA3LCAweDE2LCAweDMwLCAweDAxLCAweDAwLCAweDA1LCAweDg1LCAweDIyLCAweDQxLAorCTB4ODEsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODUsIDB4MjIsIDB4NDIsIDB4ODEsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgyMywgMHg4MywgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHg4NSwgMHgyMiwgMHg1ZiwKKwkweDBmLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVmLCAweDBmLCAweDgwLCAweDAxLCAweDAwLAorCTB4MDYsIDB4MDQsIDB4MDAsIDB4NDAsIDB4ODksIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDIsIDB4OTksIDB4MDAsIDB4MDAsCisJMHg4YSwgMHgzMCwgMHgwMSwgMHgwMCwgMHhlZCwgMHg4NywgMHgwMCwgMHg0MCwgMHgwZiwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDE0LCAweDg1LCAweGEyLCAweDVhLCAweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDVhLAorCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjUsIDB4MDAsIDB4MGQsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgyMiwgMHgwYiwgMHhlNiwgMHg3ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiNywgMHgwMCwgMHgwZCwKKwkweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweDBiLCAweGU2LCAweDdkLCAweDAwLCAweDAwLAorCTB4NmEsIDB4OTQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MTQsIDB4ODUsIDB4MjIsIDB4MjAsCisJMHg4NSwgMHg2YywgMHgwMCwgMHgwMCwgMHgwZiwgMHg4NSwgMHg5YywgMHgwZiwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDIzLCAweDgzLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDg3LCAweDk1LCAweDAwLCAweDVjLAorCTB4MWYsIDB4MDAsIDB4MDEsIDB4MDAsIDB4YzIsIDB4OTcsIDB4MDAsIDB4NDIsIDB4NjEsIDB4MzEsIDB4MDEsIDB4MDAsCisJMHgyMywgMHg4MywgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHg5MCwgMHgwNCwgMHgwMCwgMHgwNywKKwkweDk2LCAweDMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJkLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4YTIsIDB4NGIsIDB4ZTEsIDB4N2QsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmQsIDB4MDUsCisJMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHgxOCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDE5LCAweDg1LCAweDIyLCAweDNhLCAweDAxLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4OGUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NjksIDB4ODksIDB4MDAsIDB4NDAsIDB4MDEsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgyZSwgMHgwMCwgMHgyZCwgMHgwNSwKKwkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDFlLCAweDg1LCAweGEyLCAweDQwLCAweGU3LCAweDZkLCAweDAwLCAweDAwLAorCTB4MGEsIDB4MDAsIDB4MDAsIDB4NDAsIDB4OGYsIDB4OTgsIDB4MDEsIDB4MDAsIDB4NjksIDB4ODksIDB4MDAsIDB4NDAsCisJMHgwMSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgxNywgMHg5NCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDA0LCAweDAwLCAweDIyLCAweDAwLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDM1LCAweDA0LCAweDAwLCAweDQwLAorCTB4ODksIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDIsIDB4OTksIDB4MDAsIDB4MDAsIDB4OGEsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHg4NywgMHg5NiwgMHgwMCwgMHg5NSwgMHgwMywgMHgzMCwgMHgwMSwgMHgwMCwgMHgyMywgMHg4MywgMHgwMCwgMHg4OCwKKwkweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDJkLCAweDAzLCAweDQ4LCAweGIxLCAweDAxLCAweDAwLAorCTB4MjIsIDB4MDAsIDB4MmQsIDB4ZjAsIDB4MmUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MWYsIDB4MTcsCisJMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgyOCwgMHgyMCwgMHgwMCwgMHhhNiwgMHg5NiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDJiLCAweDg1LCAweDIyLCAweDE3LCAweDk2LCAweDA0LCAweDAwLCAweDAwLCAweDU1LCAweDk3LCAweDAwLCAweDRiLAorCTB4OTUsIDB4MzAsIDB4MDEsIDB4MDAsIDB4NjksIDB4ODksIDB4MDAsIDB4NGMsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgyZCwgMHg4NSwgMHg4MywgMHgxNywgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwKKwkweDQzLCAweGMxLCAweDAxLCAweDAwLCAweDJmLCAweDg1LCAweDg1LCAweDE3LCAweDgwLCAweDMyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDgsIDB4NDMsIDB4YzEsIDB4MDEsIDB4MDAsIDB4MjgsIDB4MDAsIDB4MDAsIDB4ZjYsCisJMHgwMiwgMHhjYywgMHgwMSwgMHgwMCwgMHgxMiwgMHgwMCwgMHgwMCwgMHhhMSwgMHgyYSwgMHhjOCwgMHgwMSwgMHgwMCwKKwkweDU3LCAweDk2LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGE5LCAweDkzLCAweDAwLCAweDQxLAorCTB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4NjksIDB4ODksIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHhkMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZSwgMHgxMCwKKwkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDI4LCAweDAwLCAweDAwLCAweDQwLCAweGYxLCAweDk5LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgzOSwgMHg4NSwgMHg2NCwgMHg0NywgMHg2MSwgMHgzMSwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGIxLCAweDAxLCAweDAwLCAweDNhLCAweDg1LCAweGE4LCAweDFiLAorCTB4ZTAsIDB4MzEsIDB4MDAsIDB4MDAsIDB4MjMsIDB4ODMsIDB4NzQsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHgwMywgMHhlMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMCwgMHgwNSwKKwkweDAzLCAweDZjLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweGEzLCAweDA5LCAweDAzLCAweDZjLCAweDAwLCAweDAwLAorCTB4MDgsIDB4MDAsIDB4MmQsIDB4MDMsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NmIsIDB4ODUsIDB4MDEsIDB4ZmIsCisJMHgwOCwgMHgzMCwgMHgwMCwgMHgwMCwgMHhkNSwgMHg4NSwgMHg4NywgMHhmYiwgMHgyMiwgMHgzMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGZhLCAweDBlLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LAorCTB4MTQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MWEsIDB4ZjQsIDB4MDEsIDB4MDAsCisJMHgxMiwgMHg5NSwgMHgwMCwgMHgwNywgMHgxNiwgMHgzMCwgMHgwMSwgMHgwMCwgMHg1YywgMHg4NSwgMHgyMiwgMHg0MSwKKwkweDgxLCAweDZjLCAweDAwLCAweDAwLCAweDRiLCAweDg1LCAweDIyLCAweDQyLCAweDgxLCAweDZjLCAweDAwLCAweDAwLAorCTB4MjMsIDB4ODMsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NWIsIDB4ODUsIDB4MjIsIDB4NWYsCisJMHgwZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgzOCwgMHgwMCwgMHgwMCwgMHgwNCwgMHg3ZSwgMHg4OSwgMHgwMSwgMHgwMCwKKwkweDUxLCAweDg1LCAweGE2LCAweDVmLCAweDBmLCAweDAwLCAweDAwLCAweDAwLCAweDJiLCAweDk0LCAweDAwLCAweDQwLAorCTB4MDUsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MGEsIDB4MDQsIDB4MDAsIDB4NDAsIDB4ODksIDB4OTgsIDB4MDEsIDB4MDAsCisJMHgwMiwgMHg5OSwgMHgwMCwgMHgwMCwgMHg4YSwgMHgzMCwgMHgwMSwgMHgwMCwgMHg1OCwgMHg4NSwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDEzLCAweDAwLCAweDAwLCAweDQwLCAweDg3LCAweDk4LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MmQsIDB4MDMsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MGMsIDB4MDAsIDB4MmQsIDB4ZjAsCisJMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHg4NCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDI2LCAweDk2LCAweDAwLCAweDQwLCAweDA1LCAweDMwLCAweDAxLCAweDAwLCAweDA4LCAweDA0LCAweDAwLCAweDQwLAorCTB4ODksIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDIsIDB4OTksIDB4MDAsIDB4MDAsIDB4OGEsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHhhMiwgMHg1YywgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1YywKKwkweDFmLCAweDkwLCAweDAxLCAweDAwLCAweGVkLCAweDg3LCAweDAwLCAweDQwLCAweDBmLCAweGIwLCAweDAwLCAweDAwLAorCTB4NjksIDB4ODUsIDB4YTIsIDB4NWEsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4NWEsCisJMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHhiNSwgMHgwMCwgMHgwZCwgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDA0LCAweDAwLCAweDIyLCAweDBiLCAweGU2LCAweDdkLCAweDAwLCAweDAwLCAweDAwLCAweGI3LCAweDAwLCAweDBkLAorCTB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjIsIDB4MGIsIDB4ZTYsIDB4N2QsIDB4MDAsIDB4MDAsCisJMHg2YSwgMHg5NCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHg2OSwgMHg4NSwgMHgyMiwgMHgyMCwKKwkweDg1LCAweDZjLCAweDAwLCAweDAwLCAweDY2LCAweDg1LCAweDljLCAweDBmLCAweDgwLCAweDMyLCAweDAwLCAweDAwLAorCTB4MjMsIDB4ODMsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ODcsIDB4OTUsIDB4MDAsIDB4NWMsCisJMHgxZiwgMHgwMCwgMHgwMSwgMHgwMCwgMHhjMiwgMHg5NywgMHgwMCwgMHg0MiwgMHg2MSwgMHgzMSwgMHgwMSwgMHgwMCwKKwkweDIzLCAweDgzLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDkwLCAweDA0LCAweDAwLCAweDA3LAorCTB4OTYsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmQsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHgxOCwgMHhiMCwgMHgwMSwgMHgwMCwgMHg2ZCwgMHg4NSwgMHgyMSwgMHgwNCwKKwkweDgwLCAweDIwLCAweDAwLCAweDAwLCAweDZlLCAweDg1LCAweDAwLCAweDQwLCAweDEwLCAweGM5LCAweDAwLCAweDAwLAorCTB4YTEsIDB4ODgsIDB4MDAsIDB4NGIsIDB4ODEsIDB4YjAsIDB4MDAsIDB4MDAsIDB4OWMsIDB4ODUsIDB4MDAsIDB4NDMsCisJMHg4MSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhhMCwgMHg4NSwgMHgwMCwgMHhmYiwgMHgyMiwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweGExLCAweDg4LCAweDAwLCAweDQxLCAweDgxLCAweGIwLCAweDAwLCAweDAwLCAweDY5LCAweDg5LCAweDAwLCAweDRlLAorCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4OTEsIDB4ODUsIDB4MDAsIDB4NWEsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHg3NiwgMHg4NSwgMHgwMCwgMHg0NywgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHhhMSwgMHg4OCwgMHgwMCwgMHg1MywKKwkweDgxLCAweGIwLCAweDAwLCAweDAwLCAweGExLCAweDg4LCAweDAwLCAweDU2LCAweDgxLCAweGIwLCAweDAwLCAweDAwLAorCTB4MzIsIDB4MDAsIDB4MmQsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDcsIDB4MDQsIDB4MDAsIDB4NDAsCisJMHg4OSwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMiwgMHg5OSwgMHgwMCwgMHgwMCwgMHg4YSwgMHgzMCwgMHgwMSwgMHgwMCwKKwkweDNjLCAweDA0LCAweDAwLCAweDQwLCAweDg5LCAweDk4LCAweDAxLCAweDAwLCAweDAyLCAweDk5LCAweDAwLCAweDBhLAorCTB4OGEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4M2QsIDB4MDQsIDB4MDAsIDB4NDAsIDB4ODksIDB4OTgsIDB4MDEsIDB4MDAsCisJMHgxOCwgMHgwMCwgMHgwMCwgMHgxMSwgMHg4YSwgMHhlNCwgMHgwMSwgMHgwMCwgMHgwMiwgMHg5OSwgMHgwMCwgMHhmMiwKKwkweDhhLCAweDE0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAorCTB4NjksIDB4ODksIDB4YTAsIDB4MGEsIDB4ZTQsIDB4NmQsIDB4MDAsIDB4MDAsIDB4ODQsIDB4ODUsIDB4YTIsIDB4NDEsCisJMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHg4MywgMHg4NSwgMHgyMiwgMHgwYSwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDY5LCAweDg5LCAweDAwLCAweDUzLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDY5LCAweDg5LCAweDAwLCAweDU0LAorCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4OGQsIDB4ODUsIDB4MjIsIDB4MGEsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHg4NywgMHg4NSwgMHhhMiwgMHgwYSwgMHhlNCwgMHg2ZCwgMHgwMCwgMHgwMCwgMHg2OSwgMHg4OSwgMHgwMCwgMHg1ZCwKKwkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYyLCAweDgwLCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MGEsIDB4ODAsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4OGIsIDB4ODUsIDB4YTAsIDB4OTEsCisJMHg4MSwgMHg2YywgMHgwMCwgMHgwMCwgMHg2OSwgMHg4OSwgMHgwMCwgMHg1ZSwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDI1LCAweDAwLCAweDAwLCAweDQwLCAweDhmLCAweDk4LCAweDAxLCAweDAwLCAweDY5LCAweDg5LCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4OGYsIDB4ODUsIDB4MjAsIDB4OTEsIDB4ZTUsIDB4NmQsIDB4MDAsIDB4MDAsCisJMHg2OSwgMHg4OSwgMHgwMCwgMHg1NCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgyMSwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDhmLCAweDk4LCAweDAxLCAweDAwLCAweDY5LCAweDg5LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MzIsIDB4MDAsIDB4MmQsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDcsIDB4MDQsIDB4MDAsIDB4NDAsCisJMHg4OSwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMiwgMHg5OSwgMHgwMCwgMHgwMCwgMHg4YSwgMHgzMCwgMHgwMSwgMHgwMCwKKwkweDNjLCAweDA0LCAweDAwLCAweDQwLCAweDg5LCAweDk4LCAweDAxLCAweDAwLCAweDAyLCAweDk5LCAweDAwLCAweDBhLAorCTB4OGEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4M2QsIDB4MDQsIDB4MDAsIDB4NDAsIDB4ODksIDB4OTgsIDB4MDEsIDB4MDAsCisJMHgwMiwgMHg5OSwgMHgwMCwgMHhmMiwgMHg4YSwgMHgzMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDY5LCAweDg5LCAweGEwLCAweDBhLCAweGU0LCAweDZkLCAweDAwLCAweDAwLAorCTB4MjQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4OGYsIDB4OTgsIDB4MDEsIDB4MDAsIDB4NjksIDB4ODksIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgzNywgMHgwMCwgMHgyZCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweGYzLCAweDgyLCAweGY0LCAweDAxLCAweDAwLCAweGExLCAweDg4LCAweGEwLCAweDQyLAorCTB4ODMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4YTEsIDB4ODgsIDB4MDAsIDB4NTQsIDB4ODEsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmMiwgMHgwZSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMywgMHg0MCwKKwkweDBmLCAweDZjLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDIwLCAweGFhLCAweDBmLCAweDZjLCAweDAwLCAweDAwLAorCTB4MDksIDB4MDQsIDB4MDAsIDB4NDAsIDB4ODksIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDIsIDB4OTksIDB4MDAsIDB4MDAsCisJMHg4YSwgMHgzMCwgMHgwMSwgMHgwMCwgMHgwMywgMHgwMCwgMHgwMCwgMHgwNywgMHgxYSwgMHhmNCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweGI1LCAweDAwLCAweDBkLCAweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDA3LCAweDAwLCAweDAwLCAweDA3LAorCTB4MTYsIDB4ODgsIDB4MDEsIDB4MDAsIDB4YWUsIDB4ODUsIDB4MjIsIDB4MGIsIDB4ZTYsIDB4N2QsIDB4MDAsIDB4MDAsCisJMHgwYSwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4NywgMHg5OCwgMHgwMSwgMHgwMCwgMHg3OCwgMHg5OCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDFjLCAweDBmLCAweDgwLCAweDMyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MGYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ZWQsIDB4ODcsIDB4MDAsIDB4NWMsCisJMHgxZiwgMHg5MCwgMHgwMCwgMHgwMCwgMHhjMCwgMHg4NSwgMHgyMiwgMHg1MCwgMHhmZCwgMHg3ZiwgMHgwMCwgMHgwMCwKKwkweGJiLCAweDg1LCAweGEyLCAweDU0LCAweGZkLCAweDdmLCAweDAwLCAweDAwLCAweGIzLCAweDg1LCAweDIyLCAweDU1LAorCTB4ZmQsIDB4N2YsIDB4MDAsIDB4MDAsIDB4ODIsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODcsIDB4OTgsIDB4MDEsIDB4MDAsCisJMHhhYSwgMHg4NSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHg1MywKKwkweGZkLCAweDdmLCAweDAwLCAweDAwLCAweDE0LCAweDgwLCAweDAwLCAweDAzLCAweDQyLCAweGM5LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4OTYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4NGIsCisJMHg4MCwgMHhmNCwgMHgwMSwgMHgwMCwgMHgwYywgMHhiYywgMHgwMCwgMHg0MCwgMHg4NywgMHg5OCwgMHgwMSwgMHgwMCwKKwkweGJiLCAweDg1LCAweDIyLCAweDQzLCAweDgwLCAweDZjLCAweDAwLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweDRiLAorCTB4ODAsIDB4ODgsIDB4MDEsIDB4MDAsIDB4YWEsIDB4ODUsIDB4YTIsIDB4NDMsIDB4ODAsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHg3YywgMHg5NiwgMHgwMCwgMHg0MCwgMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwgMHhiYywgMHg4NSwgMHg0NiwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweGJmLCAweDg1LCAweGEwLCAweGYwLCAweDMwLCAweDZmLCAweDAwLCAweDAwLAorCTB4YjEsIDB4ODUsIDB4MWUsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWUsIDB4NDEsCisJMHgzMSwgMHhjMywgMHgwMSwgMHgwMCwgMHg3OSwgMHg5NCwgMHgwMCwgMHg0MCwgMHgyNSwgMHgzMCwgMHgwMSwgMHgwMCwKKwkweGM0LCAweDg1LCAweDljLCAweDBmLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDIzLCAweDgzLCAweDAwLCAweDg4LAorCTB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ODcsIDB4OTUsIDB4MDAsIDB4NWMsIDB4MWYsIDB4MDAsIDB4MDEsIDB4MDAsCisJMHgxNCwgMHg4MCwgMHgwMCwgMHgwMywgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHg1YSwKKwkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLCAweDk2LCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MmYsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDcsCisJMHgxOCwgMHhlNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwYywgMHhlMCwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDkwLCAweDA0LCAweDAwLCAweDA3LCAweDk2LCAweDMwLCAweDAxLCAweDAwLCAweDAwLCAweGI1LCAweDAwLCAweDBkLAorCTB4NDYsIDB4YzksIDB4MDEsIDB4MDAsIDB4Y2MsIDB4ODUsIDB4MzAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHhhMiwgMHgwYiwgMHhlNiwgMHg3ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYiwKKwkweGU2LCAweDkxLCAweDAxLCAweDAwLCAweDAwLCAweDAyLCAweDAwLCAweGExLCAweDQ2LCAweGM5LCAweDAxLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4YTIsIDB4MGIsIDB4ZTYsIDB4N2QsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGIsCisJMHhlNiwgMHg5MSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyZSwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDEwLCAweDQwLCAweGUxLCAweGIxLCAweDAxLCAweDAwLCAweGExLCAweDg4LCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmIsIDB4MjgsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmYiwgMHg4NiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwKKwkweDE0LCAweGIwLCAweDAxLCAweDAwLCAweGUwLCAweDg1LCAweDIyLCAweDQ2LCAweDIzLCAweDdjLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MjIsIDB4NDAsIDB4ODcsIDB4NmMsIDB4MDAsIDB4MDAsIDB4ZGMsIDB4ODUsIDB4MjIsIDB4NDAsCisJMHg4NywgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0OCwgMHgxZiwgMHg5MCwgMHgwMSwgMHgwMCwKKwkweGRlLCAweDg1LCAweDIyLCAweDQxLCAweDg3LCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ3LAorCTB4MWYsIDB4OTAsIDB4MDEsIDB4MDAsIDB4ZTAsIDB4ODUsIDB4MjIsIDB4NDIsIDB4ODcsIDB4N2MsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHgxZiwgMHg5MCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHg0MCwKKwkweDA5LCAweDdjLCAweDAwLCAweDAwLCAweGUxLCAweDg1LCAweDY2LCAweDFiLCAweDJjLCAweDMwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4YTAsIDB4MTMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzYsIDB4NDEsCisJMHg0MSwgMHhjMywgMHgwMSwgMHgwMCwgMHgxMywgMHg4NiwgMHgyMywgMHg5MiwgMHgxNSwgMHg2YywgMHgwMCwgMHgwMCwKKwkweDEzLCAweDg2LCAweGEyLCAweDQ1LCAweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDE5LCAweDg2LCAweDIyLCAweDRiLAorCTB4ZmQsIDB4N2YsIDB4MDAsIDB4MDAsIDB4MTcsIDB4MDAsIDB4MDAsIDB4ZDAsIDB4YTIsIDB4YzksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgyNywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwYSwKKwkweDI0LCAweGM4LCAweDAxLCAweDAwLCAweGI5LCAweDk0LCAweDAwLCAweDQwLCAweDBmLCAweDMwLCAweDAxLCAweDAwLAorCTB4MTEsIDB4ODYsIDB4MjIsIDB4MDgsIDB4NDAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCisJMHhhMywgMHhjMSwgMHgwMSwgMHgwMCwgMHhmMCwgMHgwNywgMHgwMCwgMHgxMiwgMHgyNCwgMHhjYywgMHgwMSwgMHgwMCwKKwkweGVhLCAweDg1LCAweGFhLCAweDQxLCAweDI3LCAweDQwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweGEzLCAweDQ5LAorCTB4MjcsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MTMsIDB4ODAsIDB4Y2MsIDB4MDEsIDB4MDAsCisJMHgwYiwgMHg4NiwgMHgyNiwgMHg0MCwgMHgyMywgMHgzMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgzLCAweGIwLCAweDAxLCAweDAwLCAweDYwLCAweDAwLCAweDAwLCAweDAzLCAweDg0LCAweGM4LCAweDAxLCAweDAwLAorCTB4MTAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NDgsIDB4Y2QsIDB4MDEsIDB4MDAsIDB4MTcsIDB4MDAsIDB4MDAsIDB4ZDAsCisJMHhhMiwgMHhjOSwgMHgwMSwgMHgwMCwgMHhmOCwgMHg4NSwgMHhhMiwgMHg0MCwgMHg4MywgMHg2YywgMHgwMCwgMHgwMCwKKwkweDA0LCAweDg2LCAweDAwLCAweDQxLCAweDgzLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDQyLAorCTB4NDQsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjgsIDB4MjEsIDB4MzgsIDB4OTYsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgyZSwgMHg1MCwgMHg0OSwgMHhjMSwgMHgwMSwgMHgwMCwgMHhmZCwgMHg4NSwgMHhhMiwgMHg0NCwKKwkweDIzLCAweDZjLCAweDAwLCAweDAwLCAweDMwLCAweDAwLCAweDAwLCAweDAzLCAweDQ4LCAweGM5LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MGMsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHhmMCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweGEwLCAweDAwLCAweDAwLCAweGE0LCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDAwLCAweDg2LCAweGE4LCAweDQyLAorCTB4ZTAsIDB4MzEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4ODUsIDB4YzAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgyMywgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKKwkweGEzLCAweGMxLCAweDAxLCAweDAwLCAweGY2LCAweDg1LCAweGEyLCAweDQxLCAweDgxLCAweDUwLCAweDAwLCAweDAwLAorCTB4MGIsIDB4ODYsIDB4MjIsIDB4NDAsIDB4MjMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsCisJMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKKwkweDA4LCAweDg2LCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDIzLCAweDgzLCAweDAwLCAweDg4LAorCTB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MGIsIDB4MDQsIDB4MDAsIDB4NDAsIDB4ODksIDB4OTgsIDB4MDEsIDB4MDAsCisJMHgwMiwgMHg5OSwgMHgwMCwgMHgwMCwgMHg4YSwgMHgzMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywKKwkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweGVlLCAweDA3LCAweDAwLCAweDQwLCAweDI1LCAweDk4LCAweDAxLCAweDAwLAorCTB4MTcsIDB4MDAsIDB4MDAsIDB4ZDAsIDB4MmEsIDB4YzgsIDB4MDEsIDB4MDAsIDB4MjQsIDB4ODYsIDB4MDAsIDB4MTcsCisJMHgxMCwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHg5NywgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDE5LCAweDg2LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGI5LCAweDk0LCAweDAwLCAweDkyLAorCTB4MjUsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MzEsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwYiwgMHgwNCwgMHgwMCwgMHg0MCwgMHg4OSwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMiwgMHg5OSwgMHgwMCwgMHgwMCwKKwkweDhhLCAweDMwLCAweDAxLCAweDAwLCAweDE5LCAweDg2LCAweDIyLCAweDA4LCAweDJlLCAweDMwLCAweDAwLCAweDAwLAorCTB4MjQsIDB4ODYsIDB4MDAsIDB4NDEsIDB4MjcsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4ODAsIDB4MDAsIDB4YTYsCisJMHgwNCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4NywgMHg5OCwgMHgwMSwgMHgwMCwKKwkweDc4LCAweDk4LCAweDAwLCAweDBhLCAweDhjLCAweDMwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDFjLCAweDBmLAorCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MGYsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1YywgMHgxZiwgMHg5MCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMCwgMHg5ZiwKKwkweDEzLCAweDZjLCAweDAwLCAweDAwLCAweDIzLCAweDg2LCAweDIyLCAweDlmLCAweDEzLCAweDZjLCAweDAwLCAweDAwLAorCTB4MDIsIDB4MDAsIDB4MDAsIDB4ODgsIDB4MWMsIDB4Y2MsIDB4MDEsIDB4MDAsIDB4MjcsIDB4ODMsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhlZCwgMHg4NywgMHgwMCwgMHg0MSwgMHgzZiwgMHhjMywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDBmLCAweGIwLCAweDAxLCAweDAwLCAweDI4LCAweDAwLCAweDAwLCAweDAxLAorCTB4ODAsIDB4Y2UsIDB4MDEsIDB4MDAsIDB4MzgsIDB4ODYsIDB4MmEsIDB4NDAsIDB4ODEsIDB4MzAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHgxMCwgMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDk4LCAweDAxLCAweDAwLCAweDJkLCAweDg2LCAweGEyLCAweDQ4LCAweDFmLCAweDdjLCAweDAwLCAweDAwLAorCTB4MmQsIDB4ODYsIDB4YTIsIDB4NDcsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MmQsIDB4ODYsIDB4YTMsIDB4MDcsCisJMHgwMywgMHg2YywgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHg5OCwgMHgwMSwgMHgwMCwKKwkweDMwLCAweDg2LCAweGEzLCAweDQwLCAweDAyLCAweDZjLCAweDAwLCAweDAwLCAweDI4LCAweDAwLCAweDAwLCAweDAxLAorCTB4ZjAsIDB4Y2QsIDB4MDEsIDB4MDAsIDB4MzIsIDB4ODYsIDB4MDAsIDB4NDAsIDB4MGYsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgyOCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmMCwgMHhjZCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDBlLCAweGNjLCAweDAxLCAweDAwLCAweDI4LCAweDAwLCAweDAwLCAweDAzLCAweGYwLCAweGM5LCAweDAxLCAweDAwLAorCTB4MjgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTYsCisJMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDIwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDM2LCAweDg2LCAweGE4LCAweDVjLAorCTB4MWYsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjIsIDB4MGEsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHhhMiwgMHgwMywgMHg0OCwgMHg2ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLCAweDA4LCAweGIwLCAweDAxLCAweDAwLAorCTB4YTAsIDB4MDEsIDB4MmQsIDB4NDAsIDB4MDAsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MTksIDB4ODcsIDB4MjIsIDB4MGYsCisJMHg0MiwgMHgwNSwgMHgwMCwgMHgwMCwgMHg0YiwgMHg4NiwgMHg5YywgMHgwZiwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDVjLCAweDFmLCAweDgwLCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDEwLAorCTB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4NDYsIDB4ODYsIDB4MjIsIDB4NDAsIDB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwKKwkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDQzLCAweDg2LCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4MjMsIDB4ODMsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NGIsIDB4ODYsIDB4MjIsIDB4MDcsCisJMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHg0MiwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDA3LCAweDQyLCAweGMxLCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweGExLAorCTB4NDYsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWYsIDB4ZTEsIDB4OTEsIDB4MDEsIDB4MDAsCisJMHhjMCwgMHgwNiwgMHhhMiwgMHg0NSwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMywKKwkweDQ4LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJkLCAweDU0LCAweDI5LCAweGMwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MTgsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsCisJMHgwNCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgwZSwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDA0LCAweDAwLCAweDI2LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDVmLAorCTB4MGYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4M2UsIDB4MDAsIDB4MDAsIDB4MTQsIDB4ODAsIDB4Y2UsIDB4MDEsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHhhYSwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHg0MiwgMHgwMCwgMHgwMCwgMHgwMywKKwkweDBhLCAweGM4LCAweDAxLCAweDAwLCAweDBjLCAweDAwLCAweDAwLCAweGE0LCAweDBjLCAweGM4LCAweDAxLCAweDAwLAorCTB4MTAsIDB4OTUsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsCisJMHgwMiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgyNCwgMHhkMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDEwLCAweGMwLCAweDAxLCAweDAwLCAweDEyLCAweDAwLCAweDAwLCAweDA4LAorCTB4MTAsIDB4YzgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MjMsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHhmZSwgMHg3ZiwgMHgwMCwgMHgwNSwgMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHhhMiwKKwkweDg2LCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBhLCAweGU0LCAweGIxLCAweDAxLCAweDAwLAorCTB4NzksIDB4ODYsIDB4MjIsIDB4MDEsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4M2MsIDB4NDQsCisJMHgyMywgMHhlMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZSwgMHhhNCwgMHg4MCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDQ4LCAweGMxLCAweDAxLCAweDAwLCAweDY2LCAweDg2LCAweGEzLCAweDA3LAorCTB4MDIsIDB4NmMsIDB4MDAsIDB4MDAsIDB4NjcsIDB4ODYsIDB4NjgsIDB4MDEsIDB4MWEsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg2OCwgMHgwNywgMHgxYSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwZCwKKwkweDAyLCAweGQwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweGYwLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MGMsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsCisJMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwZCwgMHgwYSwgMHhjMCwgMHgwMSwgMHgwMCwKKwkweDczLCAweDg2LCAweDIyLCAweDQwLCAweDAzLCAweDZjLCAweDAwLCAweDAwLCAweDczLCAweDg2LCAweDIyLCAweDQyLAorCTB4MjMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MjMsIDB4YzAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhhMCwgMHgwMCwgMHgwMCwgMHhhNCwKKwkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDk5LCAweDg2LCAweDI4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4NzAsIDB4ODYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsCisJMHg4MCwgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDYyLCAweGIxLCAweDAxLCAweDAwLCAweDc1LCAweDg2LCAweGE4LCAweDQwLAorCTB4MjMsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MjMsIDB4ODMsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHg5OSwgMHg4NiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzYywgMHg0NCwKKwkweDIzLCAweGUwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE0LCAweDg2LCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MmUsIDB4MTAsIDB4NDgsIDB4YzEsIDB4MDEsIDB4MDAsIDB4N2UsIDB4ODYsIDB4YTMsIDB4MTIsCisJMHgwZSwgMHg2YywgMHgwMCwgMHgwMCwgMHg3ZiwgMHg4NiwgMHg2MCwgMHgwNywgMHgxYSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDYwLCAweDEyLCAweDFhLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDY4LCAweDBkLAorCTB4MTYsIDB4OTQsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MGIsIDB4MTYsIDB4ZDgsIDB4MDEsIDB4MDAsCisJMHgxNCwgMHg5OSwgMHgwMCwgMHgwOCwgMHg5OCwgMHgzMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2OCwgMHgwOCwKKwkweDNlLCAweDk2LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBjLCAweGYwLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsCisJMHg4NiwgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NiwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDIwLCAweDAwLCAweDAwLCAweDQzLCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDg3LCAweDg2LCAweGE4LCAweDVjLAorCTB4MWYsIDB4MTAsIDB4MDAsIDB4MDAsIDB4YjksIDB4ODYsIDB4MjIsIDB4MGQsIDB4MTQsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHg4ZCwgMHg4NiwgMHgyMiwgMHgwZCwgMHgyNCwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwZCwKKwkweDEwLCAweGMwLCAweDAxLCAweDAwLCAweDkyLCAweDg2LCAweDAwLCAweDBkLCAweDI0LCAweGQwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MjIsIDB4NGIsIDB4ZmQsIDB4N2YsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCisJMHgyYiwgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwgMHhhMiwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDEwLCAweDAwLCAweDAwLCAweDIwLCAweDEwLCAweGM4LCAweDAxLCAweDAwLCAweGYwLCAweDA3LCAweDAwLCAweDQwLAorCTB4MjUsIDB4OTgsIDB4MDEsIDB4MDAsIDB4OTQsIDB4ODYsIDB4MjIsIDB4NDIsIDB4MjMsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHg5OSwgMHg4NiwgMHgwMCwgMHg0MSwgMHgyMywgMHhjMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NiwKKwkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLAorCTB4OTUsIDB4ODYsIDB4YTgsIDB4NWMsIDB4MWYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjMsIDB4ODMsIDB4MDAsIDB4ODgsCisJMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgyMywgMHhiMCwgMHgwMSwgMHgwMCwKKwkweGI5LCAweDg2LCAweDIyLCAweDBkLCAweDE0LCAweDUwLCAweDAwLCAweDAwLCAweGI4LCAweDg2LCAweGEyLCAweDBkLAorCTB4MGUsIDB4NTAsIDB4MDAsIDB4MDAsIDB4YTUsIDB4ODYsIDB4MjIsIDB4NDYsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NiwgMHgxZiwgMHg4MCwgMHgwMSwgMHgwMCwgMHgzMCwgMHg4MCwgMHgwMCwgMHgxMCwKKwkweDQyLCAweGM5LCAweDAxLCAweDAwLCAweGEzLCAweDg2LCAweDIyLCAweDQwLCAweGUzLCAweDZkLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsCisJMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHhhMCwgMHg4NiwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDIzLCAweDgzLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDIwLCAweDgwLCAweDAwLCAweDAzLAorCTB4NDYsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWYsIDB4ZTEsIDB4OTEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgyZCwgMHgwNiwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwKKwkweDE4LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDA0LCAweGIwLCAweDAxLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MjIsIDB4ZjAsIDB4MGUsIDB4MzAsIDB4MDAsIDB4MDAsIDB4YWIsIDB4ODYsIDB4YTIsIDB4NWYsCisJMHgwZiwgMHg3YywgMHgwMCwgMHgwMCwgMHg2MCwgMHg4NiwgMHgwMCwgMHg0YywgMHgwZCwgMHhjMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDJlLCAweDVmLCAweDBmLCAweDgwLCAweDAxLCAweDAwLCAweDYwLCAweDg2LCAweDIzLCAweDA3LAorCTB4MTQsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4NDYsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsCisJMHgzMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg0OCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgyNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweGYxLCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweGYwLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTYsCisJMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjOCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ3LCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweGEwLCAweDAwLCAweDAwLCAweGE0LAorCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4YjUsIDB4ODYsIDB4YTgsIDB4NDYsIDB4MWYsIDB4MTAsIDB4MDAsIDB4MDAsCisJMHg2MCwgMHg4NiwgMHgwMCwgMHgwMywgMHgwYywgMHhiMCwgMHgwMCwgMHgwMCwgMHg2MCwgMHg4NiwgMHgwMCwgMHgwZCwKKwkweDE4LCAweGMwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDJlLCAweDE0LCAweDBhLCAweGQwLCAweDAxLCAweDAwLAorCTB4MTIsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NDgsIDB4Y2QsIDB4MDEsIDB4MDAsIDB4ZmUsIDB4N2YsIDB4MDAsIDB4MDUsCisJMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHhhNCwgMHg4NiwgMHgwNiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweGEyLCAweGExLCAweDg2LCAweDA2LCAweDAwLCAweDAwLCAweDBjLCAweDAwLCAweDJhLCAweGYyLAorCTB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YzEsIDB4ODYsIDB4MjIsIDB4NDAsIDB4MzEsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg2MCwgMHgxOCwgMHgzOCwgMHg5NiwgMHgwMSwgMHgwMCwgMHgxZSwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDgxLCAweDAwLCAweGY2LCAweDgwLCAweGNlLCAweDAxLCAweDAwLAorCTB4YzUsIDB4ODYsIDB4YTYsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsCisJMHg0MywgMHhjMSwgMHgwMSwgMHgwMCwgMHhjNywgMHg4NiwgMHgyMiwgMHgwYiwgMHhlZCwgMHg2ZCwgMHgwMCwgMHgwMCwKKwkweDA4LCAweDAwLCAweDAwLCAweGExLCAweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweGExLAorCTB4NDYsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4YTEsIDB4ODYsIDB4MDYsIDB4MDAsIDB4MDAsCisJMHgwZiwgMHgwMCwgMHgwMCwgMHhmYSwgMHg5NCwgMHg4OCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHg0NSwKKwkweDk1LCAweDZjLCAweDAwLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDRhLCAweDg2LCAweGU0LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjYsIDB4MGUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ZDEsIDB4ODYsIDB4MjIsIDB4NDcsCisJMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgxZiwgMHg0MywgMHgwZSwgMHg1MCwgMHgwMCwgMHgwMCwKKwkweGQxLCAweDg2LCAweGEwLCAweDQ2LCAweDBmLCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAorCTB4MGYsIDB4YzAsIDB4MDEsIDB4MDAsIDB4ZDUsIDB4ODYsIDB4MjIsIDB4NDgsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg5MSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwZiwgMHhhMiwKKwkweDQyLCAweDMxLCAweDAwLCAweDAwLCAweGQ4LCAweDg2LCAweDAwLCAweDQwLCAweDg5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MGMsIDB4MDAsIDB4MDAsIDB4YTIsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsCisJMHg4OSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywgMHg5NSwgMHhkMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGZjLCAweDgyLCAweGIwLCAweDAxLCAweDAwLCAweGRiLCAweDg2LCAweGEwLCAweDQxLAorCTB4OTAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4OTEsIDB4YzAsIDB4MDEsIDB4MDAsCisJMHhlMCwgMHg4NiwgMHgyMiwgMHg0NywgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHhlMCwgMHg4NiwgMHhhMCwgMHg0MywKKwkweDg5LCAweDZjLCAweDAwLCAweDAwLCAweGUwLCAweDg2LCAweDIwLCAweDQ1LCAweDg5LCAweDZjLCAweDAwLCAweDAwLAorCTB4ZTAsIDB4ODYsIDB4YTAsIDB4NDEsIDB4MGUsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCisJMHgwZiwgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4OSwgMHhjMCwgMHgwMSwgMHgwMCwKKwkweGQ4LCAweDg2LCAweGEyLCAweDQxLCAweDk1LCAweDUwLCAweDAwLCAweDAwLCAweGVkLCAweDg2LCAweDIyLCAweDQ4LAorCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4NDgsIDB4OTIsIDB4ZjQsIDB4MDEsIDB4MDAsCisJMHhmZiwgMHhmZiwgMHgwMCwgMHg0OCwgMHg5MCwgMHg4OCwgMHgwMSwgMHgwMCwgMHhlNywgMHg4NiwgMHg5MCwgMHg0OCwKKwkweDkyLCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDkzLCAweGMwLCAweDAxLCAweDAwLAorCTB4MGEsIDB4MDAsIDB4MDAsIDB4YTIsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjYsIDB4MjAsCisJMHg5MywgMHhhNCwgMHgwMSwgMHgwMCwgMHgwYSwgMHgwMCwgMHgwMCwgMHg0MywgMHg4MCwgMHhjYywgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGEyLCAweDgwLCAweGMwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDQwLAorCTB4NDIsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4YTEsIDB4ODYsIDB4MDYsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHhhMiwgMHg0NiwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgxNCwgMHg5OSwgMHgwMCwgMHgxNywKKwkweDk4LCAweDMwLCAweDAxLCAweDAwLCAweGZmLCAweDA3LCAweDAwLCAweDE3LCAweDdlLCAweDg5LCAweDAxLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4YTYsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MzAsIDB4ODAsIDB4MDAsIDB4MTAsCisJMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgxMiwgMHgwMCwgMHgwMCwgMHgxNCwgMHhmMCwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDE3LCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDEyLCAweDAwLCAweDAwLCAweDA1LAorCTB4ZTAsIDB4Y2QsIDB4MDEsIDB4MDAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4ODAsIDB4YzgsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweGY3LCAweDg2LCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4MDIsIDB4ODcsIDB4MjIsIDB4NWMsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4M2MsIDB4NDQsCisJMHgyMywgMHhlMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZCwgMHgxMCwgMHg0OCwgMHhjMSwgMHgwMSwgMHgwMCwKKwkweDAxLCAweDg3LCAweDIyLCAweDQwLCAweGUzLCAweDZkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ2LAorCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCisJMHhmZSwgMHg4NiwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgyMywgMHg4MywgMHgwMCwgMHg4OCwKKwkweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVjLCAweDFmLCAweDgwLCAweDAxLCAweDAwLAorCTB4MDUsIDB4ODcsIDB4YTIsIDB4NDcsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDYsIDB4OTUsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHg4NSwgMHg4NywgMHgwMCwgMHgxNywgMHgxMCwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDBkLCAweDk1LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJmLCAweDAzLAorCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDksIDB4ODcsIDB4YTAsIDB4MDcsIDB4MTYsIDB4NDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgxNywgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYiwKKwkweGU0LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLCAweDE3LCAweGYwLCAweDAxLCAweDAwLAorCTB4MGQsIDB4ODcsIDB4OTAsIDB4ZjIsIDB4MTYsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCisJMHgxNywgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2NiwgMHgyMCwgMHgxNywgMHhhNCwgMHgwMSwgMHgwMCwKKwkweDEwLCAweDAwLCAweDAwLCAweDE0LCAweDJhLCAweGM4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLAorCTB4MmIsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjIsIDB4MmEsIDB4OTQsIDB4MDEsIDB4MDAsCisJMHgzMCwgMHg4MCwgMHgwMCwgMHgxMCwgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgxNywgMHg4NywgMHgyMiwgMHg0MCwKKwkweGUzLCAweDZkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4MTQsIDB4ODcsIDB4YTgsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgyMywgMHg4MywgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDgwLCAweDAwLCAweDE3LCAweDEwLCAweGRjLCAweDAxLCAweDAwLCAweDg1LCAweDg3LCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MjEsIDB4ODcsIDB4OWMsIDB4MGYsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1YywgMHgxZiwgMHg4MCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgxMCwKKwkweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDIxLCAweDg3LCAweDIyLCAweDQwLCAweGUzLCAweDZkLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsCisJMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHgxZSwgMHg4NywgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDIzLCAweDgzLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDI2LCAweDg3LCAweDIyLCAweDA3LAorCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4NDIsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwNywgMHg0MiwgMHhjMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHhhMSwKKwkweDQ2LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVmLCAweGUxLCAweDkxLCAweDAxLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MmUsIDB4MDMsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGEsCisJMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyYiwgMHg4NywgMHgyMiwgMHg0MCwgMHgzMSwgMHg2YywgMHgwMCwgMHgwMCwKKwkweDBjLCAweDAwLCAweDAwLCAweDQwLCAweDQ1LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDYwLCAweDE4LAorCTB4MzgsIDB4OTYsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmUsIDB4MTAsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwKKwkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweGUwLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsCisJMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHgzMCwgMHg4NywgMHhhOCwgMHg0MCwgMHgyMywgMHgzMCwgMHgwMCwgMHgwMCwKKwkweDIzLCAweDgzLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDJkLCAweDUyLAorCTB4MTEsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4NDgsIDB4YzksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgxOCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwKKwkweDA0LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDBlLCAweGIwLCAweDAxLCAweDAwLAorCTB4MGMsIDB4MDAsIDB4MDAsIDB4YTQsIDB4MGMsIDB4YzgsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjIsIDB4NDAsCisJMHgxNSwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzYywgMHg0NCwgMHgyMywgMHhlMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGE0LCAweDg2LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJlLCAweDEwLAorCTB4NDgsIDB4YzEsIDB4MDEsIDB4MDAsIDB4M2YsIDB4ODcsIDB4YTMsIDB4MTIsIDB4MGUsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHg0MCwgMHg4NywgMHg2OCwgMHgwNywgMHgxYSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2OCwgMHgxMiwKKwkweDFhLCAweGIwLCAweDAxLCAweDAwLCAweDE0LCAweDk5LCAweDAwLCAweDA4LCAweDk4LCAweDMwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsCisJMHg4NiwgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2OCwgMHgwOCwgMHgzZSwgMHg5NiwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDBjLCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLAorCTB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgyMCwgMHgwMCwgMHgwMCwgMHg0MywgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHg0NywgMHg4NywgMHhhOCwgMHg1YywKKwkweDFmLCAweDEwLCAweDAwLCAweDAwLCAweDc5LCAweDg3LCAweDIyLCAweDBkLCAweDE0LCAweDZjLCAweDAwLCAweDAwLAorCTB4NGQsIDB4ODcsIDB4MjIsIDB4MGQsIDB4MjQsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGQsCisJMHgxMCwgMHhjMCwgMHgwMSwgMHgwMCwgMHg1MiwgMHg4NywgMHgwMCwgMHgwZCwgMHgyNCwgMHhkMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDIyLCAweDRiLCAweGZkLCAweDdmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAorCTB4MmIsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTUsIDB4YTIsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgxMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHgxMCwgMHhjOCwgMHgwMSwgMHgwMCwgMHhmMCwgMHgwNywgMHgwMCwgMHg0MCwKKwkweDI1LCAweDk4LCAweDAxLCAweDAwLCAweDU0LCAweDg3LCAweDIyLCAweDQyLCAweDIzLCAweDZjLCAweDAwLCAweDAwLAorCTB4NTksIDB4ODcsIDB4MDAsIDB4NDEsIDB4MjMsIDB4YzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsCisJMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKKwkweDU1LCAweDg3LCAweGE4LCAweDVjLCAweDFmLCAweDAwLCAweDAwLCAweDAwLCAweDIzLCAweDgzLCAweDAwLCAweDg4LAorCTB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MjMsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgyMiwgMHgwZCwgMHgxNCwgMHg1MCwgMHgwMCwgMHgwMCwgMHg3OCwgMHg4NywgMHhhMiwgMHgwZCwKKwkweDBlLCAweDUwLCAweDAwLCAweDAwLCAweDY1LCAweDg3LCAweDIyLCAweDQ2LCAweDFmLCAweDdjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsIDB4MWYsIDB4ODAsIDB4MDEsIDB4MDAsIDB4MzAsIDB4ODAsIDB4MDAsIDB4MTAsCisJMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHg2MywgMHg4NywgMHgyMiwgMHg0MCwgMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ3LCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLAorCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4NjAsIDB4ODcsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgyMywgMHg4MywgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4MCwgMHgwMCwgMHgwMywKKwkweDQ2LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVmLCAweGUxLCAweDkxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MmQsIDB4MDYsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsCisJMHgxOCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgwNCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDA0LCAweDAwLCAweDIyLCAweGYwLCAweDBlLCAweDMwLCAweDAwLCAweDAwLCAweDZiLCAweDg3LCAweGEyLCAweDVmLAorCTB4MGYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MzksIDB4ODcsIDB4MDAsIDB4NGMsIDB4MGQsIDB4YzAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgyZSwgMHg1ZiwgMHgwZiwgMHg4MCwgMHgwMSwgMHgwMCwgMHgzOSwgMHg4NywgMHgyMywgMHgwNywKKwkweDE0LCAweDZjLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDQ2LCAweDFmLCAweDdjLCAweDAwLCAweDAwLAorCTB4MzAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NDgsIDB4YzksIDB4MDEsIDB4MDAsIDB4MjQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHhmMSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE2LAorCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MjQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YzgsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhhMCwgMHgwMCwgMHgwMCwgMHhhNCwKKwkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDc1LCAweDg3LCAweGE4LCAweDQ2LCAweDFmLCAweDEwLCAweDAwLCAweDAwLAorCTB4MzksIDB4ODcsIDB4MDAsIDB4MDMsIDB4MGMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MzksIDB4ODcsIDB4MDAsIDB4MGQsCisJMHgxOCwgMHhjMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHg0NiwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwKKwkweDgzLCAweDg3LCAweDIyLCAweDVjLCAweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVjLAorCTB4MWYsIDB4ODAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4M2MsIDB4NDQsIDB4MjMsIDB4ZTAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgyZCwgMHgxMCwgMHg0OCwgMHhjMSwgMHgwMSwgMHgwMCwgMHg4MywgMHg4NywgMHgyMiwgMHg0MCwKKwkweGUzLCAweDZkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ2LCAweDYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ODcsIDB4YTgsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgyMywgMHg4MywgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDE3LCAweDEwLCAweGIwLCAweDAxLCAweDAwLCAweDg1LCAweDg3LCAweDAwLCAweDQwLAorCTB4MmIsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDQsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyNiwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweGEwLCAweDlmLCAweDEzLCAweDZjLCAweDAwLCAweDAwLAorCTB4OGMsIDB4ODcsIDB4MjIsIDB4OWYsIDB4MTMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4ODgsCisJMHgxYywgMHhjYywgMHgwMSwgMHgwMCwgMHgyNywgMHg4MywgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDhkLCAweDk4LCAweDAwLCAweDQxLCAweDNmLCAweDQzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4OGQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDUsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHg3OCwgMHg5OCwgMHgwMCwgMHg0MCwgMHgwZiwgMHgzMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHg1YywKKwkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDAzLCAweDg4LCAweDAwLCAweDVjLCAweDFmLCAweDkwLCAweDAwLCAweDAwLAorCTB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGUsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjYsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzYSwgMHgwMSwgMHg4NCwgMHgwMSwgMHgwMCwKKwkweDk4LCAweDg3LCAweDIyLCAweDUwLCAweDAxLCAweDZjLCAweDAwLCAweDAwLCAweDBkLCAweDA0LCAweDAwLCAweDQwLAorCTB4ODksIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDIsIDB4OTksIDB4MDAsIDB4MDAsIDB4OGEsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHgwMywgMHgwMCwgMHgwMCwgMHgwNywgMHgxYSwgMHhmNCwgMHgwMSwgMHgwMCwgMHgxMiwgMHg5NSwgMHgwMCwgMHgwNywKKwkweDE2LCAweDMwLCAweDAxLCAweDAwLCAweGEzLCAweDg3LCAweDIyLCAweDQxLCAweDgxLCAweDZjLCAweDAwLCAweDAwLAorCTB4OWUsIDB4ODcsIDB4MjIsIDB4NDIsIDB4ODEsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MjMsIDB4ODMsIDB4MDAsIDB4ODgsCisJMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHhhMiwgMHg4NywgMHgyMiwgMHg1ZiwgMHgwZiwgMHg3YywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDVmLCAweDBmLCAweDgwLCAweDAxLCAweDAwLCAweDBlLCAweDA0LCAweDAwLCAweDQwLAorCTB4ODksIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDIsIDB4OTksIDB4MDAsIDB4MDAsIDB4OGEsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHhlZCwgMHg4NywgMHgwMCwgMHg0MCwgMHgwZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHhiMCwgMHg4NywgMHhhMiwgMHg1YSwKKwkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDVhLCAweDFmLCAweDdjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4YjUsIDB4MDAsIDB4MGQsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjIsIDB4MGIsCisJMHhlNiwgMHg3ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiNywgMHgwMCwgMHgwZCwgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDA0LCAweDAwLCAweDIyLCAweDBiLCAweGU2LCAweDdkLCAweDAwLCAweDAwLCAweDZhLCAweDk0LCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4YjAsIDB4ODcsIDB4MjIsIDB4MjAsIDB4ODUsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHhhZCwgMHg4NywgMHg5YywgMHgwZiwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgyMywgMHg4MywgMHgwMCwgMHg4OCwKKwkweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDg3LCAweDk1LCAweDAwLCAweDVjLCAweDFmLCAweDAwLCAweDAxLCAweDAwLAorCTB4YzIsIDB4OTcsIDB4MDAsIDB4NDIsIDB4NjEsIDB4MzEsIDB4MDEsIDB4MDAsIDB4MjMsIDB4ODMsIDB4MDAsIDB4ODgsCisJMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHg5MCwgMHgwNCwgMHgwMCwgMHgwNywgMHg5NiwgMHgzMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDJkLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLAorCTB4MTgsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHhhMSwgMHg4OCwgMHhhMiwgMHg1ZiwgMHg4MSwgMHg2YywgMHgwMCwgMHgwMCwgMHhhOCwgMHgwMCwgMHgyZCwgMHg0MywKKwkweDE5LCAweDgwLCAweDAxLCAweDAwLCAweDM3LCAweDAwLCAweDJkLCAweGYwLCAweDI0LCAweGIwLCAweDAxLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4ZjMsIDB4OGUsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4MGYsIDB4MDAsIDB4MDAsIDB4ZjMsCisJMHg5MCwgMHg4OCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMywgMHg0MywgMHg4ZiwgMHg2YywgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweGEzLCAweDQzLCAweDkxLCAweDZjLCAweDAwLCAweDAwLCAweGMxLCAweDg3LCAweDIyLCAweDQ4LAorCTB4OGUsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MzYsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsCisJMHg1OCwgMHgwMCwgMHgzZCwgMHg0MywgMHhlNywgMHhlMSwgMHgwMSwgMHgwMCwgMHhjMSwgMHg4NywgMHgxZiwgMHhmMCwKKwkweDI0LCAweDZjLCAweDAwLCAweDAwLCAweGMwLCAweDg3LCAweDIzLCAweDQxLCAweDhmLCAweDZjLCAweDAwLCAweDAwLAorCTB4YTEsIDB4ODgsIDB4MDAsIDB4NDcsIDB4ODEsIDB4YjAsIDB4MDAsIDB4MDAsIDB4YTEsIDB4ODgsIDB4MDAsIDB4NDgsCisJMHg4MSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwKKwkweGIwLCAweDAwLCAweDJkLCAweGYwLCAweDE0LCAweGIwLCAweDAxLCAweDAwLCAweGM2LCAweDg3LCAweDIyLCAweDBhLAorCTB4OTAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4NTgsIDB4OTgsIDB4MDAsIDB4NDAsIDB4OTEsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHhhMSwgMHg4OCwgMHhhMiwgMHg0MCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHhiMCwgMHgwMCwgMHgyZCwgMHg0NSwKKwkweDgxLCAweGIwLCAweDAxLCAweDAwLCAweGQyLCAweDg3LCAweDIyLCAweGYwLCAweDJjLCAweDMwLCAweDAwLCAweDAwLAorCTB4YTMsIDB4MDAsIDB4MmQsIDB4MzAsIDB4ODMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YWMsIDB4MDAsIDB4MmQsIDB4ZjMsCisJMHg4MiwgMHhlMCwgMHgwMSwgMHgwMCwgMHhjYywgMHg4NywgMHhhMywgMHg0MSwgMHgyYywgMHg2YywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDE2LCAweDgyLCAweGIwLCAweDAxLCAweDAwLCAweDk4LCAweDAwLCAweDJkLCAweGYwLAorCTB4ODIsIDB4YzAsIDB4MDEsIDB4MDAsIDB4ODgsIDB4MDAsIDB4MmQsIDB4ZjAsIDB4ODIsIDB4ZDAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmMiwgMHg5OCwgMHhlOCwgMHgwMSwgMHgwMCwgMHhhMSwgMHg4OCwgMHgyMCwgMHg0YywKKwkweDgyLCAweDZjLCAweDAwLCAweDAwLCAweDdjLCAweDAwLCAweDJkLCAweDQxLCAweDk4LCAweGU4LCAweDAxLCAweDAwLAorCTB4YTEsIDB4ODgsIDB4MjAsIDB4ZjAsIDB4OTgsIDB4NmMsIDB4MDAsIDB4MDAsIDB4ZWQsIDB4ODcsIDB4MjIsIDB4MGEsCisJMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwMiwgMHgwMCwgMHgwYywgMHg3ZSwgMHg4OSwgMHgwMSwgMHgwMCwKKwkweGVkLCAweDg3LCAweGE2LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweGExLCAweDg4LCAweDAwLCAweDQ5LAorCTB4ODEsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4YTYsIDB4ODAsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHhkYSwgMHg4NywgMHgyMiwgMHg0MywgMHgyMSwgMHg2ZiwgMHgwMCwgMHgwMCwgMHgxMywgMHg4MCwgMHgwMCwgMHg0MCwKKwkweDgwLCAweGRjLCAweDAxLCAweDAwLCAweGRiLCAweDg3LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MWEsIDB4ODAsIDB4MDAsIDB4NDAsIDB4ODAsIDB4ZGMsIDB4MDEsIDB4MDAsIDB4ZGIsIDB4ODcsIDB4YTIsIDB4NWUsCisJMHgwYiwgMHg3ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwOCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweGRkLCAweDg3LCAweDlmLCAweDg1LCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweGUxLCAweDg3LCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MWEsIDB4ODMsIDB4MjIsIDB4NDAsIDB4NTcsIDB4N2QsIDB4MDAsIDB4MDAsCisJMHgwMSwgMHgwMCwgMHgwMCwgMHg0MCwgMHg1NywgMHg5OSwgMHgwMSwgMHgwMCwgMHhlMSwgMHg4NywgMHg0MiwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDkzLCAweDkzLCAweDAxLCAweDAwLAorCTB4MDEsIDB4ODMsIDB4MWEsIDB4NWIsIDB4NjksIDB4OTMsIDB4MDAsIDB4MDAsIDB4ZTcsIDB4ODcsIDB4MjIsIDB4NDYsCisJMHhmMywgMHg3ZiwgMHgwMCwgMHgwMCwgMHhlNywgMHg4NywgMHhhMiwgMHg0MSwgMHhmMywgMHg3ZiwgMHgwMCwgMHgwMCwKKwkweGM2LCAweDgwLCAweDAwLCAweDQyLCAweDk3LCAweDMzLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweGNiLAorCTB4ODEsIDB4YzgsIDB4MDEsIDB4MDAsIDB4ZWEsIDB4ODcsIDB4MjIsIDB4NDAsIDB4ZjIsIDB4N2YsIDB4MDAsIDB4MDAsCisJMHhjNiwgMHg4MCwgMHgwMCwgMHg2ZiwgMHg5NywgMHgzMywgMHgwMSwgMHgwMCwgMHhlYywgMHg4NywgMHgyMiwgMHg0MCwKKwkweDczLCAweDdkLCAweDAwLCAweDAwLCAweGUwLCAweDgwLCAweDAwLCAweDQxLCAweDhiLCAweGIzLCAweDAwLCAweDAwLAorCTB4ZTQsIDB4ODcsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4ZjQsIDB4ODcsIDB4OWMsIDB4MGYsCisJMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgxMCwgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweGY0LCAweDg3LCAweDIyLCAweDQwLCAweGUzLCAweDZkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ1LAorCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCisJMHhmMSwgMHg4NywgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgyMywgMHg4MywgMHgwMCwgMHg4OCwKKwkweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDJlLCAweDk0LCAweDIyLCAweDAyLCAweDgwLCAweDMyLCAweDAwLCAweDAwLAorCTB4ZjUsIDB4ODcsIDB4NDIsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsCisJMHg5MywgMHg5MywgMHgwMSwgMHgwMCwgMHgyZSwgMHg5NCwgMHgxYSwgMHgwMiwgMHg2OCwgMHg5NywgMHgwMCwgMHgwMCwKKwkweGZmLCAweDg3LCAweDljLCAweDBmLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDEwLAorCTB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4ZmYsIDB4ODcsIDB4MjIsIDB4NDAsIDB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwKKwkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweGZjLCAweDg3LCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4MjMsIDB4ODMsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4M2UsIDB4OTQsIDB4MjIsIDB4MDIsCisJMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4OCwgMHg0MiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDkzLCAweDkzLCAweDAxLCAweDAwLCAweDNlLCAweDk0LCAweDFhLCAweDAyLAorCTB4NjgsIDB4OTcsIDB4MDAsIDB4MDAsIDB4MGEsIDB4ODgsIDB4OWMsIDB4MGYsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHgxMCwgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwYSwgMHg4OCwgMHgyMiwgMHg0MCwKKwkweGUzLCAweDZkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweDYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4MDcsIDB4ODgsIDB4YTgsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgyMywgMHg4MywgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDJmLCAweDgzLCAweDIyLCAweDAyLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDBiLCAweDg4LCAweDQyLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4OTMsIDB4OTMsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgxYSwgMHgwMiwgMHg2OCwgMHg5NywgMHgwMSwgMHgwMCwgMHgyZiwgMHg4MywgMHgwMCwgMHg0MCwKKwkweDA1LCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweGE2LCAweDU2LCAweGIxLCAweDAxLCAweDAwLAorCTB4NTYsIDB4OTUsIDB4MmYsIDB4NDAsIDB4MDUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4NDAsCisJMHhlNywgMHg2ZCwgMHgwMCwgMHgwMCwgMHhiOCwgMHg5NCwgMHgyOSwgMHg0MSwgMHhlNywgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDU0LCAweGVmLCAweDkzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYyLAorCTB4MGUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTMsIDB4MGMsIDB4NTUsIDB4NmYsIDB4MDAsIDB4MDAsCisJMHgyOSwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwZCwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwOSwgMHgwMCwgMHgwMCwgMHgwNywKKwkweDEyLCAweGU0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE3LCAweDEzLCAweGMwLCAweDAxLCAweDAwLAorCTB4MDMsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MWEsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDcsCisJMHgxNiwgMHg4OCwgMHgwMSwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHgxMCwgMHgzNCwgMHhkOCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAzLCAweDM0LCAweDk0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4MjMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MTgsIDB4MDAsIDB4NDAsIDB4MTEsIDB4OTgsIDB4MDEsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgyMCwgMHhhYSwgMHgwZiwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHhiNSwgMHgwMCwgMHgwZCwKKwkweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDQzLCAweDg4LCAweDIyLCAweDBiLCAweGU2LCAweDdkLCAweDAwLCAweDAwLAorCTB4MjIsIDB4ODgsIDB4NjAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDcsCisJMHg4NCwgMHg4OSwgMHgwMSwgMHgwMCwgMHgyYiwgMHg4OCwgMHgwNSwgMHhjMiwgMHgyNCwgMHgzMCwgMHgwMCwgMHgwMCwKKwkweDU4LCAweDA0LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJkLCAweDA1LAorCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NjAsIDB4ODgsIDB4NzAsIDB4ZjAsIDB4MTgsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHgxMCwgMHgwMCwgMHgwMCwgMHgwYywgMHg4MiwgMHhmNCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHg0MSwKKwkweDBlLCAweDZjLCAweDAwLCAweDAwLCAweDQzLCAweDg4LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4NzAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4M2EsIDB4ODgsIDB4YTAsIDB4NDgsCisJMHgyMywgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHgzNSwgMHhkMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDgwLCAweDAwLCAweDFhLCAweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDM0LCAweDg4LCAweDIyLCAweDQwLAorCTB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg0MCwgMHgwMCwgMHgwMCwgMHgxYSwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHgzMSwgMHg4OCwgMHhhOCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDIzLCAweDgzLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAorCTB4MjAsIDB4OTgsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4NjAsIDB4ODgsIDB4MDAsIDB4ZjgsCisJMHgxOCwgMHgzMCwgMHgwMSwgMHgwMCwgMHgzNSwgMHg4OCwgMHhhMiwgMHg0MSwgMHgyMywgMHg1MCwgMHgwMCwgMHgwMCwKKwkweGZmLCAweGZmLCAweDAwLCAweDEwLCAweDM0LCAweGQ4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLAorCTB4MzQsIDB4OTQsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MTgsIDB4MDAsIDB4NDAsIDB4MTEsIDB4OTgsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgyZSwgMHgxYSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwKKwkweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweGYwLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4MWEsCisJMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHgzZSwgMHg4OCwgMHhhOCwgMHgwOSwgMHhlMCwgMHgzMSwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDIzLCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLAorCTB4MzUsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4MTEsIDB4YzAsIDB4MDEsIDB4MDAsCisJMHg0ZiwgMHg4OCwgMHgyMiwgMHg0MSwgMHgwZCwgMHg1MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKKwkweDBmLCAweGMwLCAweDAxLCAweDAwLCAweDRiLCAweDg4LCAweGEwLCAweGFhLCAweDBmLCAweDZjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MGYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDksIDB4MDAsIDB4MDAsIDB4MDcsCisJMHgxMiwgMHhlNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhNywgMHgxMywgMHhjMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDFiLCAweGIwLCAweDAxLCAweDAwLCAweDFmLCAweDg4LCAweDAwLCAweDQxLAorCTB4MTcsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDksIDB4MTIsIDB4YzgsIDB4MDEsIDB4MDAsCisJMHgxZiwgMHg4OCwgMHg4MywgMHg0MSwgMHgxNywgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDE3LCAweGIwLCAweDAxLCAweDAwLCAweDFmLCAweDg4LCAweDAwLCAweDQxLCAweDFiLCAweGMwLCAweDAwLCAweDAwLAorCTB4NWEsIDB4ODgsIDB4MjMsIDB4NDAsIDB4MjMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsCisJMHgzNSwgMHhkMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgxYSwgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDU3LCAweDg4LCAweDIyLCAweDQwLCAweGUzLCAweDZkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLAorCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MWEsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCisJMHg1NCwgMHg4OCwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgyMywgMHg4MywgMHgwMCwgMHg4OCwKKwkweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDIwLCAweDk4LCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLAorCTB4NjAsIDB4ODgsIDB4MDAsIDB4ZjgsIDB4MTgsIDB4MzAsIDB4MDEsIDB4MDAsIDB4NTgsIDB4ODgsIDB4YTIsIDB4NDEsCisJMHgyMywgMHg1MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgwZiwgMHhjMCwgMHgwMSwgMHgwMCwKKwkweDVkLCAweDg4LCAweGEwLCAweGFhLCAweDBmLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAorCTB4MGYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YjgsIDB4OTQsIDB4MjAsIDB4MDcsIDB4ZTQsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg1NiwgMHg5NSwgMHgyMCwgMHg0MCwgMHhlNywgMHhiMSwgMHgwMSwgMHgwMCwgMHhlZCwgMHg4NywgMHgwMCwgMHg0MCwKKwkweDBmLCAweGIwLCAweDAwLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweDBjLCAweDgwLCAweGQ4LCAweDAxLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MjYsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4YzAsIDB4MDIsIDB4MDAsIDB4MGMsCisJMHg3ZSwgMHg4OSwgMHgwMSwgMHgwMCwgMHg3OSwgMHg4OCwgMHgyNiwgMHg1NCwgMHg2MSwgMHgzMSwgMHgwMCwgMHgwMCwKKwkweDZjLCAweDg4LCAweDg3LCAweDBjLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDFmLCAweDA0LCAweDAwLCAweDQwLAorCTB4ODksIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDIsIDB4OTksIDB4MDAsIDB4MGMsIDB4OGEsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1NCwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwZiwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDYyLCAweDk5LCAweDAxLCAweDAwLCAweDZjLCAweDg4LCAweDI4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4YTIsIDB4NTQsIDB4NzcsIDB4N2QsIDB4MDAsIDB4MDAsIDB4NjgsIDB4ODgsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg3NCwgMHg4OCwgMHgyMiwgMHg0NiwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwKKwkweDJhLCAweDA0LCAweDAwLCAweDQwLCAweDg5LCAweDk4LCAweDAxLCAweDAwLCAweDAyLCAweDk5LCAweDAwLCAweDBjLAorCTB4OGEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTQsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwZCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MiwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDU0LCAweDc3LCAweDdkLCAweDAwLCAweDAwLAorCTB4NmQsIDB4ODgsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4NzksIDB4ODgsIDB4MjIsIDB4NDksCisJMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHgwZSwgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MiwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweGE4LCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDU0LAorCTB4NzcsIDB4N2QsIDB4MDAsIDB4MDAsIDB4NzQsIDB4ODgsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgxMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MiwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDU0LCAweDc3LCAweDdkLCAweDAwLCAweDAwLAorCTB4NzksIDB4ODgsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MzAsIDB4OTQsIDB4MmYsIDB4NTUsCisJMHhmMSwgMHg5MywgMHgwMSwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwMCwgMHhhNiwgMHg1NiwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDJmLCAweDgzLCAweGEyLCAweDQxLCAweGU1LCAweDUxLCAweDAwLCAweDAwLCAweDY0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ZTUsIDB4OTksIDB4MDEsIDB4MDAsIDB4ODEsIDB4ODgsIDB4NDQsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHg4NCwgMHg4OCwgMHhhMiwgMHg5MywgMHg1NywgMHg2ZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKKwkweDU3LCAweGMzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDFjLCAweGFiLCAweDI3LCAweGIzLCAweDAxLCAweDAwLAorCTB4MmYsIDB4ODMsIDB4MjIsIDB4NTAsIDB4ZmQsIDB4N2YsIDB4MDAsIDB4MDAsIDB4MmYsIDB4ODMsIDB4MjIsIDB4NTEsCisJMHhmZCwgMHg3ZiwgMHgwMCwgMHgwMCwgMHgyZiwgMHg4MywgMHhhMiwgMHg0MSwgMHgxZCwgMHg1MywgMHgwMCwgMHgwMCwKKwkweDUwLCAweDQ2LCAweDAwLCAweDQwLCAweDFkLCAweDliLCAweDAxLCAweDAwLCAweDM4LCAweDA1LCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MGUsIDB4MDAsIDB4MDAsIDB4NDgsIDB4YjIsIDB4Y2IsIDB4MDEsIDB4MDAsCisJMHgxMCwgMHgwNCwgMHgwMCwgMHg0MCwgMHg0OSwgMHgzMSwgMHgwMSwgMHgwMCwgMHg5MCwgMHg4OCwgMHgyMiwgMHg0MCwKKwkweGI1LCAweDZmLCAweDAwLCAweDAwLCAweDBlLCAweDAwLCAweDAwLCAweDQ4LCAweGIyLCAweGNiLCAweDAxLCAweDAwLAorCTB4MjAsIDB4MDQsIDB4MDAsIDB4NDEsIDB4YjUsIDB4NTMsIDB4MDEsIDB4MDAsIDB4MmYsIDB4ODMsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MSwgMHhmZCwgMHg4MywgMHgwMSwgMHgwMCwKKwkweDQwLCAweDE2LCAweDAwLCAweDQwLCAweDQ1LCAweDk5LCAweDAxLCAweDAwLCAweDQwLCAweDA1LCAweDAwLCAweDQwLAorCTB4NDksIDB4MzEsIDB4MDEsIDB4MDAsIDB4MWUsIDB4MDAsIDB4MDAsIDB4NDgsIDB4YjIsIDB4Y2IsIDB4MDEsIDB4MDAsCisJMHgxMCwgMHgwNCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkYSwKKwkweDkxLCAweGMwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQ4LCAweGIyLCAweGNiLCAweDAxLCAweDAwLAorCTB4MjAsIDB4MDQsIDB4MDAsIDB4NDAsIDB4YjUsIDB4MzMsIDB4MDEsIDB4MDAsIDB4NjAsIDB4MTYsIDB4MjAsIDB4NDAsCisJMHhlNSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg1NSwgMHg4MiwgMHgwMCwgMHg0MCwgMHhiNSwgMHgzMywgMHgwMSwgMHgwMCwKKwkweDA4LCAweDAwLCAweDAwLCAweDQ4LCAweGIyLCAweGNiLCAweDAxLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweDRhLAorCTB4YjQsIDB4OGIsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHgwYSwgMHgwMCwgMHgwMCwgMHg0OCwgMHhiMiwgMHhjYiwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHg0YSwKKwkweGI0LCAweGY3LCAweDAxLCAweDAwLCAweDIwLCAweDA0LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4MmYsIDB4ODMsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4MDUsCisJMHg0OCwgMHg2ZCwgMHgwMCwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDA0LCAweDAwLCAweGEyLCAweGYyLCAweDBlLCAweDZjLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDAyLAorCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDUsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmMywgMHgwOCwgMHhiMCwgMHgwMSwgMHgwMCwgMHhhYiwgMHg4OCwgMHgyMiwgMHg1MCwKKwkweDgxLCAweDZjLCAweDAwLCAweDAwLCAweDBmLCAweDA0LCAweDAwLCAweDQwLCAweDg5LCAweDk4LCAweDAxLCAweDAwLAorCTB4MTAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4OGEsIDB4ZTQsIDB4MDEsIDB4MDAsIDB4MDIsIDB4OTksIDB4MDAsIDB4MDQsCisJMHg4YSwgMHgxNCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMCwgMHg0OCwgMHgwOSwgMHg2YywgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDIwLCAweDU3LCAweDgxLCAweDZjLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDIwLCAweDQwLAorCTB4ZTYsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDMsIDB4MDAsIDB4MDAsIDB4NDAsIDB4OTYsIDB4ZTQsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHg5NiwgMHhjMCwgMHgwMSwgMHgwMCwgMHhiMSwgMHg4OCwgMHgwMCwgMHg0YiwKKwkweDEwLCAweGM5LCAweDAwLCAweDAwLCAweGUxLCAweDhiLCAweDAwLCAweDQxLCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDE2LCAweDhjLCAweDAwLCAweDQxLCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDUyLCAweDhjLCAweDAwLCAweDQ1LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4NTIsIDB4OGMsIDB4MDAsIDB4NDUsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4NTIsIDB4OGMsIDB4MDAsIDB4NDUsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg1MiwgMHg4YywgMHgwMCwgMHg0NSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHg5OSwgMHg4YywgMHgwMCwgMHg0MywKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweGM4LCAweDhjLCAweDAwLCAweDQzLCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4Y2MsIDB4OGMsIDB4MDAsIDB4NDQsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4M2IsIDB4OGUsIDB4MDAsIDB4NDUsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHhkYywgMHg4YywgMHgwMCwgMHg0MywKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweGRhLCAweDhjLCAweDAwLCAweDQzLCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4ZGQsIDB4OGIsIDB4MDAsIDB4NDUsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4OTUsIDB4OGQsIDB4MDAsIDB4NDIsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHg5NSwgMHg4ZCwgMHgwMCwgMHg0MywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg5NSwgMHg4ZCwgMHgwMCwgMHg0NCwKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweGRkLCAweDhiLCAweDAwLCAweDQ1LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4YjUsIDB4OGQsIDB4MDAsIDB4NDMsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHhkZCwgMHg4YiwgMHgwMCwgMHg0NSwKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweGRkLCAweDhkLCAweDAwLCAweDQzLAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZGQsIDB4OGQsIDB4MDAsIDB4NDQsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHhkZCwgMHg4YiwgMHgwMCwgMHg0NSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweGRkLCAweDhkLCAweDAwLCAweDQyLCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZGQsIDB4OGIsIDB4MDAsIDB4NDUsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwYywgMHg4ZSwgMHgwMCwgMHg0NCwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweGRkLCAweDhiLCAweDAwLCAweDQ1LAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAorCTB4ZGQsIDB4OGIsIDB4MDAsIDB4NDIsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MWYsIDB4OGUsIDB4MDAsIDB4NDUsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgxZiwgMHg4ZSwgMHgwMCwgMHg0NSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweGRkLCAweDhiLCAweDAwLCAweDQ1LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDIxLCAweDhlLCAweDAwLCAweDQyLCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MjEsIDB4OGUsIDB4MDAsIDB4NDMsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MjEsIDB4OGUsIDB4MDAsIDB4NDQsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgyMSwgMHg4ZSwgMHgwMCwgMHg0NSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAorCTB4MmMsIDB4OGUsIDB4MDAsIDB4NDQsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZGQsIDB4OGIsIDB4MDAsIDB4NDUsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgzZSwgMHg4ZSwgMHgwMCwgMHg0MiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgyZCwgMHg4ZSwgMHgwMCwgMHg0MywKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDNlLCAweDhlLCAweDAwLCAweDQ0LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4ZGQsIDB4OGIsIDB4MDAsIDB4NDUsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHg0MCwgMHg4ZSwgMHgwMCwgMHg0MywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgzNCwgMHg4ZSwgMHgwMCwgMHg0NCwKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweGRkLCAweDhiLCAweDAwLCAweDQ1LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweGRkLCAweDhiLCAweDAwLCAweDQxLCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDkzLCAweDhkLCAweDAwLCAweDQyLAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4OTMsIDB4OGQsIDB4MDAsIDB4NDMsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHg5MywgMHg4ZCwgMHgwMCwgMHg0NCwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhkZCwgMHg4YiwgMHgwMCwgMHg0NSwKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHhkZCwgMHg4YiwgMHgwMCwgMHg0MSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDQyLCAweDhlLCAweDAwLCAweDQyLCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDQyLCAweDhlLCAweDAwLCAweDQzLAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4OGUsIDB4MDAsIDB4NDQsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHhkZCwgMHg4YiwgMHgwMCwgMHg0NSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NDksIDB4OGUsIDB4MDAsIDB4NDUsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAorCTB4NGIsIDB4OGUsIDB4MDAsIDB4NDIsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAorCTB4NTgsIDB4OGUsIDB4MDAsIDB4NDMsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4YmUsIDB4OGUsIDB4MDAsIDB4NDMsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhjYywgMHg4YywgMHgwMCwgMHg0NCwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDNiLCAweDhlLCAweDAwLCAweDQ1LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAorCTB4YzYsIDB4OGUsIDB4MDAsIDB4NDMsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4Y2MsIDB4OGMsIDB4MDAsIDB4NDQsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgzYiwgMHg4ZSwgMHgwMCwgMHg0NSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweGRhLCAweDhlLCAweDAwLCAweDQzLCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZGQsIDB4OGIsIDB4MDAsIDB4NDUsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHg5MywgMHg4YywgMHgwMCwgMHg0MywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhjMiwgMHg4ZSwgMHgwMCwgMHg0MywKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweGNjLCAweDhjLCAweDAwLCAweDQ0LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4M2IsIDB4OGUsIDB4MDAsIDB4NDUsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDAyLCAweDAwLCAweDJkLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweGYyLAorCTB4MGUsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4MDIsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwNywgMHgwMCwgMHgyZCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMywKKwkweDA4LCAweGIwLCAweDAxLCAweDAwLCAweDEwLCAweDA0LCAweDAwLCAweDQwLCAweDg5LCAweDk4LCAweDAxLCAweDAwLAorCTB4MTAsIDB4MDAsIDB4MDAsIDB4NDcsIDB4OGEsIDB4ZTQsIDB4MDEsIDB4MDAsIDB4MDIsIDB4OTksIDB4MDAsIDB4MDQsCisJMHg4YSwgMHgxNCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMCwgMHg0ZSwgMHgwOSwgMHg2YywgMHgwMCwgMHgwMCwKKwkweDJhLCAweDAwLCAweDAwLCAweDQ3LCAweDgwLCAweGNlLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDI0LCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDYsIDB4MDAsIDB4MjAsIDB4NDcsIDB4ZTYsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0NywgMHg5NiwgMHhlNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywKKwkweDk2LCAweGQwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ3LCAweDk2LCAweGQwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4OTYsIDB4YzAsIDB4MDEsIDB4MDAsIDB4N2EsIDB4ODksIDB4MDAsIDB4NGIsCisJMHgxMCwgMHhjOSwgMHgwMCwgMHgwMCwgMHhmNiwgMHg4ZSwgMHgwMCwgMHg0OSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDJmLCAweDhmLCAweDAwLCAweDQyLCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDM2LCAweDhmLCAweDAwLCAweDQ2LAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NDcsIDB4OGYsIDB4MDAsIDB4NDIsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDZhLCAweDhmLCAweDAwLCAweDQyLCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NjQsIDB4OGYsIDB4MDAsIDB4NGEsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHg3MSwgMHg4ZiwgMHgwMCwgMHg0MywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweGRjLCAweDhmLCAweDAwLCAweDQ0LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHhkYSwgMHg4ZiwgMHgwMCwgMHg0YiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4M2EsIDB4OGYsIDB4MDAsIDB4NDEsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDNhLCAweDhmLCAweDAwLCAweDQzLCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDNhLCAweDhmLCAweDAwLCAweDQ0LAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4M2EsIDB4OGYsIDB4MDAsIDB4NDUsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgzYSwgMHg4ZiwgMHgwMCwgMHg0NiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgzYSwgMHg4ZiwgMHgwMCwgMHg0NywKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDNhLCAweDhmLCAweDAwLCAweDQ4LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4M2EsIDB4OGYsIDB4MDAsIDB4NDksIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4M2EsIDB4OGYsIDB4MDAsIDB4NGEsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgzYSwgMHg4ZiwgMHgwMCwgMHg0YiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDNhLCAweDhmLCAweDAwLCAweDRjLCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDNhLCAweDhmLCAweDAwLCAweDRkLAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHg5MCwgMHgwMCwgMHg0MiwKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4NDUsIDB4OTAsIDB4MDAsIDB4NDQsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHg5MCwgMHgwMCwgMHg0YiwKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDYyLCAweDkwLCAweDAwLCAweDQ1LAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4N2EsIDB4OTAsIDB4MDAsIDB4NDcsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg1MywgMHg5MCwgMHgwMCwgMHg0NSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MGYsIDB4OTMsIDB4MDAsIDB4NDYsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg2YSwgMHg4ZiwgMHgwMCwgMHg0NiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDQ3LCAweDhmLCAweDAwLCAweDQ2LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDYyLCAweDhmLCAweDAwLCAweDQ3LAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4NjIsIDB4OGYsIDB4MDAsIDB4NDgsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4NjQsIDB4OGYsIDB4MDAsIDB4NGEsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhkYywgMHg4ZiwgMHgwMCwgMHg0NSwKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDcxLCAweDhmLCAweDAwLCAweDQzLCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4NjIsIDB4OGYsIDB4MDAsIDB4NDcsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4NjIsIDB4OGYsIDB4MDAsIDB4NDgsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZGEsIDB4OGYsIDB4MDAsIDB4NGMsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDgxLCAweDkwLCAweDAwLCAweDQ0LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDgxLCAweDkwLCAweDAwLCAweDQyLAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4YzYsIDB4OGIsIDB4MDAsIDB4NDcsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHhjNiwgMHg4YiwgMHgwMCwgMHg0OCwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ODEsIDB4OTAsIDB4MDAsIDB4NGIsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDNhLCAweDhmLCAweDAwLCAweDQxLAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4YWMsIDB4OTAsIDB4MDAsIDB4NDcsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg4ZiwgMHg5MCwgMHgwMCwgMHg0NywKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4OGYsIDB4OTAsIDB4MDAsIDB4NDcsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDhmLCAweDkwLCAweDAwLCAweDQ3LAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4YWMsIDB4OTAsIDB4MDAsIDB4NDcsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHg2MiwgMHg4ZiwgMHgwMCwgMHg0NywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg2MiwgMHg4ZiwgMHgwMCwgMHg0OCwKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg4ZiwgMHg5MCwgMHgwMCwgMHg0NywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhiYiwgMHg5MCwgMHgwMCwgMHg0NywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweGJiLCAweDkwLCAweDAwLCAweDQ4LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MmMsIDB4OTEsIDB4MDAsIDB4NDAsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg0ZSwgMHg5MSwgMHgwMCwgMHg0NywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDQwLCAweDkxLCAweDAwLCAweDQ4LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDg3LCAweDkwLCAweDAwLCAweDQ3LAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4ODcsIDB4OTAsIDB4MDAsIDB4NDcsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHg0ZSwgMHg5MSwgMHgwMCwgMHg0NywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg1NywgMHg5MSwgMHgwMCwgMHg0NywKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDU3LCAweDkxLCAweDAwLCAweDQ4LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4OTEsIDB4MDAsIDB4NDgsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg4NywgMHg5MCwgMHgwMCwgMHg0NywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDg3LCAweDkwLCAweDAwLCAweDQ3LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDQwLCAweDkxLCAweDAwLCAweDQ4LAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDQ1LCAweDkwLCAweDAwLCAweDQzLCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4OTAsIDB4MDAsIDB4NDUsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHg5MCwgMHgwMCwgMHg0NiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDYyLCAweDhmLCAweDAwLCAweDQ3LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDYyLCAweDhmLCAweDAwLCAweDQ4LAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHg0NSwgMHg5MCwgMHgwMCwgMHg0YSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDQ1LCAweDkwLCAweDAwLCAweDRjLCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweGFiLCAweDkwLCAweDAwLCAweDQ3LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDlkLCAweDkwLCAweDAwLCAweDQ4LAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4OGUsIDB4OTAsIDB4MDAsIDB4NDcsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHg4ZSwgMHg5MCwgMHgwMCwgMHg0NywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhhYiwgMHg5MCwgMHgwMCwgMHg0NywKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweGM2LCAweDhiLCAweDAwLCAweDQ3LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4YzYsIDB4OGIsIDB4MDAsIDB4NDgsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg5ZCwgMHg5MCwgMHgwMCwgMHg0OCwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDhlLCAweDkwLCAweDAwLCAweDQ3LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDhlLCAweDkwLCAweDAwLCAweDQ3LAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4OWQsIDB4OTAsIDB4MDAsIDB4NDgsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDVhLCAweDkxLCAweDAwLCAweDQyLCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NWEsIDB4OTEsIDB4MDAsIDB4NDQsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDVhLCAweDkxLCAweDAwLCAweDRiLCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NWEsIDB4OTEsIDB4MDAsIDB4NDMsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg1YSwgMHg5MSwgMHgwMCwgMHg0NSwKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDVhLCAweDkxLCAweDAwLCAweDQ2LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4NWEsIDB4OTEsIDB4MDAsIDB4NDcsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4NWEsIDB4OTEsIDB4MDAsIDB4NDgsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDVhLCAweDkxLCAweDAwLCAweDRhLCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NWEsIDB4OTEsIDB4MDAsIDB4NGMsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHg1YSwgMHg5MSwgMHgwMCwgMHg0YywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NzcsIDB4OTEsIDB4MDAsIDB4NDYsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHg3YSwgMHg5MCwgMHgwMCwgMHg0NywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDc3LCAweDkxLCAweDAwLCAweDQ2LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHg5NiwgMHg5MiwgMHgwMCwgMHg0NiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg3YSwgMHg5MCwgMHgwMCwgMHg0NywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDk2LCAweDkyLCAweDAwLCAweDQ2LAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg5NiwgMHg5MiwgMHgwMCwgMHg0NiwKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweGJmLCAweDkyLCAweDAwLCAweDQyLCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4YmQsIDB4OTIsIDB4MDAsIDB4NGEsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4YmYsIDB4OTIsIDB4MDAsIDB4NDYsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg2MiwgMHg4ZiwgMHgwMCwgMHg0NywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDYyLCAweDhmLCAweDAwLCAweDQ4LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhiZCwgMHg5MiwgMHgwMCwgMHg0YSwKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4NjcsIDB4OTEsIDB4MDAsIDB4NDEsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg3NCwgMHg5MSwgMHgwMCwgMHg0MiwKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4NzQsIDB4OTEsIDB4MDAsIDB4NDQsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg3NCwgMHg5MSwgMHgwMCwgMHg0YiwKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDc0LCAweDkxLCAweDAwLCAweDQzLAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHg3NCwgMHg5MSwgMHgwMCwgMHg0NSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg3NCwgMHg5MSwgMHgwMCwgMHg0NiwKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDc0LCAweDkxLCAweDAwLCAweDQ3LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4NzQsIDB4OTEsIDB4MDAsIDB4NDgsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDc0LCAweDkxLCAweDAwLCAweDRjLAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4NjIsIDB4OTAsIDB4MDAsIDB4NGMsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4N2EsIDB4OTAsIDB4MDAsIDB4NDcsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg1MywgMHg5MCwgMHgwMCwgMHg0YywKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4N2QsIDB4OTMsIDB4MDAsIDB4NDYsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDkzLCAweDAwLCAweDQyLAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHg5MywgMHgwMCwgMHg0NCwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDkzLCAweDAwLCAweDRiLAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDkzLCAweDAwLCAweDQ1LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDkzLCAweDAwLCAweDQ2LAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4NjIsIDB4OGYsIDB4MDAsIDB4NDcsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHg2MiwgMHg4ZiwgMHgwMCwgMHg0OCwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4OTMsIDB4MDAsIDB4NGMsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NTMsIDB4OTAsIDB4MDAsIDB4NDIsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwZiwgMHg5MywgMHgwMCwgMHg0NiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4NTMsIDB4OTAsIDB4MDAsIDB4NDYsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg3YSwgMHg5MCwgMHgwMCwgMHg0NywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDBmLCAweDkzLCAweDAwLCAweDQ2LAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwZiwgMHg5MywgMHgwMCwgMHg0NiwKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgxNiwgMHg5MywgMHgwMCwgMHg0MywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg3YSwgMHg5MCwgMHgwMCwgMHg0NywKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4NmUsIDB4OTMsIDB4MDAsIDB4NGEsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDE2LCAweDkzLCAweDAwLCAweDRkLCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDJjLCAweDkzLCAweDAwLCAweDQzLCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHhmZCwgMHg5MiwgMHgwMCwgMHg0YSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MmMsIDB4OTMsIDB4MDAsIDB4NDMsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg2MiwgMHg4ZiwgMHgwMCwgMHg0NywKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDYyLCAweDhmLCAweDAwLCAweDQ4LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweGZkLCAweDkyLCAweDAwLCAweDRhLCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDQ0LCAweDkzLCAweDAwLCAweDQzLCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDdhLCAweDkwLCAweDAwLCAweDQ3LAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHg0NCwgMHg5MywgMHgwMCwgMHg0MywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4NDQsIDB4OTMsIDB4MDAsIDB4NGQsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDQ3LCAweDhmLCAweDAwLCAweDQyLCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NmEsIDB4OGYsIDB4MDAsIDB4NDIsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDY3LCAweDkzLCAweDAwLCAweDQyLCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg2YSwgMHg4ZiwgMHgwMCwgMHg0NiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDQ3LCAweDhmLCAweDAwLCAweDQ2LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDYyLCAweDhmLCAweDAwLCAweDQ3LAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4NjIsIDB4OGYsIDB4MDAsIDB4NDgsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4NjcsIDB4OTMsIDB4MDAsIDB4NDYsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NmUsIDB4OTMsIDB4MDAsIDB4NGEsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4N2EsIDB4OTAsIDB4MDAsIDB4NDcsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDZlLCAweDkzLCAweDAwLCAweDRhLCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgxMCwgMHg5MywgMHgwMCwgMHg0NiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4OTMsIDB4MDAsIDB4NDYsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHg3YSwgMHg5MCwgMHgwMCwgMHg0NywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDEwLCAweDkzLCAweDAwLCAweDQ2LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg5MywgMHgwMCwgMHg0NiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg3NywgMHg5MywgMHgwMCwgMHg0MiwKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZmQsIDB4OTIsIDB4MDAsIDB4NGEsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDc3LCAweDkzLCAweDAwLCAweDQ2LAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHg2MiwgMHg4ZiwgMHgwMCwgMHg0NywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg2MiwgMHg4ZiwgMHgwMCwgMHg0OCwKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhmZCwgMHg5MiwgMHgwMCwgMHg0YSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHg3MSwgMHg4ZiwgMHgwMCwgMHg0ZCwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHg3MSwgMHg4ZiwgMHgwMCwgMHg0ZCwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg2MiwgMHg4ZiwgMHgwMCwgMHg0NywKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDYyLCAweDhmLCAweDAwLCAweDQ4LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4MDUsIDB4NDgsIDB4NmQsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgyMiwgMHgwNywgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwNywgMHgwMCwgMHgyZSwgMHg0YiwKKwkweDE5LCAweDkwLCAweDAxLCAweDAwLCAweGY4LCAweDg3LCAweDAwLCAweDA0LCAweGU2LCAweGIxLCAweDAwLCAweDAwLAorCTB4YzYsIDB4OGIsIDB4MjIsIDB4NDIsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDksIDB4OTcsIDB4MDAsIDB4M2EsCisJMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwgMHhjNiwgMHg4YiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweGM2LCAweDhiLCAweDIyLCAweDQyLCAweDE5LCAweDdjLCAweDAwLCAweDAwLCAweGZmLCAweDFmLCAweDAwLCAweDBmLAorCTB4MWUsIDB4OGMsIDB4MDEsIDB4MDAsIDB4NmQsIDB4OTYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHhkOCwgMHg4YiwgMHg5YywgMHgwZiwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1YywKKwkweDFmLCAweDgwLCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDEwLCAweDQyLCAweGM5LCAweDAxLCAweDAwLAorCTB4ZDgsIDB4OGIsIDB4MjIsIDB4NDAsIDB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsCisJMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKKwkweGQ1LCAweDhiLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDIzLCAweDgzLCAweDAwLCAweDg4LAorCTB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MWEsIDB4ODUsIDB4MjIsIDB4MDIsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHhkOSwgMHg4YiwgMHg0MiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwKKwkweDkzLCAweDkzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDFhLCAweDAyLCAweDY4LCAweDk3LCAweDAxLCAweDAwLAorCTB4MWEsIDB4ODUsIDB4MDAsIDB4NDAsIDB4MDUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4MDUsCisJMHg0OCwgMHg2ZCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHgwNywgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDA1LCAweDAwLCAweDJlLCAweDRiLCAweDE5LCAweDkwLCAweDAxLCAweDAwLCAweGY4LCAweDg3LCAweDAwLCAweDA0LAorCTB4ZTYsIDB4YjEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODcsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4ZCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMywKKwkweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweGExLCAweDQ0LCAweGM5LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NzgsIDB4OTgsIDB4MDAsIDB4MDYsCisJMHgwNywgMHg0MCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHg1YywgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDA2LCAweDA3LCAweGQwLCAweDAxLCAweDAwLCAweGQ0LCAweDAwLCAweDJlLCAweDVjLAorCTB4MWYsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwYywgMHg4MCwgMHgwMCwgMHgwMywgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwKKwkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZmUsIDB4OTYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmUsCisJMHg5NiwgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZlLAorCTB4OTYsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmUsIDB4OTYsIDB4YzAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZhLCAweDk2LCAweGMwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZmUsIDB4OTYsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MzAsIDB4MDAsIDB4NGIsCisJMHg5NCwgMHg4OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NiwgMHg5NSwgMHhmMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDRhLCAweDk2LCAweGMwLCAweDAxLCAweDAwLCAweDVlLCAweDAxLCAweDJlLCAweDM0LAorCTB4OTcsIDB4ODQsIDB4MDEsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4NGIsIDB4ZTQsIDB4ZTUsIDB4MDEsIDB4MDAsCisJMHg2NCwgMHgwMSwgMHgyMCwgMHg0MCwgMHhlMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwOSwgMHgwMCwgMHgwMCwgMHgwNywKKwkweDg2LCAweGU0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJlLCAweGE3LCAweDg3LCAweGMwLCAweDAxLCAweDAwLAorCTB4MTAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NDgsIDB4YzksIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHhmMSwgMHg5OSwgMHgwMSwgMHgwMCwgMHg1OCwgMHgwMSwgMHgwMCwgMHg0MywgMHhmMCwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDU4LCAweDAxLCAweDAwLCAweDA1LCAweGUwLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LAorCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YTAsIDB4MDAsIDB4MDAsIDB4YTQsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCisJMHgwNSwgMHg4YywgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwKKwkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDFhLCAweDAwLCAweDAwLCAweDQwLCAweDk3LCAweDk4LCAweDAxLCAweDAwLAorCTB4MDgsIDB4MDAsIDB4MmUsIDB4NDAsIDB4OTUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MGQsIDB4OGMsIDB4MjAsIDB4NGIsCisJMHg5NCwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDBhLCAweDhjLCAweDAwLCAweDQxLCAweDk1LCAweGMwLCAweDAwLCAweDAwLCAweDEwLCAweDgwLCAweDAwLCAweDEwLAorCTB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4MTQsIDB4OGMsIDB4MjIsIDB4NDAsIDB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwKKwkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDEwLCAweDhjLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4MjMsIDB4ODMsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsCisJMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwOSwgMHg5NywgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwKKwkweGRkLCAweDhiLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDBjLCAweDgwLCAweDAwLCAweDAzLAorCTB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4ODYsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg4OCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgxNCwgMHg4MCwgMHgwMCwgMHgwMywKKwkweDk4LCAweGM4LCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweGExLCAweDk4LCAweDZjLCAweDAwLCAweDAwLAorCTB4MWIsIDB4OGMsIDB4NDQsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MWUsIDB4OGMsIDB4YTIsIDB4NGMsCisJMHhmZCwgMHg3ZiwgMHgwMCwgMHgwMCwgMHgxZiwgMHg4YywgMHgwMCwgMHg0YywgMHhmZCwgMHg5MywgMHgwMCwgMHgwMCwKKwkweDIwLCAweDhjLCAweDIwLCAweGYwLCAweDU2LCAweDZmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLAorCTB4NTYsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWMsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCisJMHg2NCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHg5OCwgMHgwMSwgMHgwMCwgMHg2NCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgwLCAweGNjLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweGE2LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4ZDgsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4NDMsCisJMHg4MSwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgxMCwgMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDY0LCAweDAwLCAweDAwLCAweDQwLCAweGYxLCAweDk5LCAweDAxLCAweDAwLCAweDcwLCAweDAwLCAweDAwLCAweDA1LAorCTB4ZjAsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHgxMCwKKwkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDJiLCAweDhjLCAweGE4LCAweDQ0LCAweGUwLCAweDMxLCAweDAwLCAweDAwLAorCTB4MTAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4OGMsIDB4YzgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4NDYsCisJMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmMSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDY4LCAweDAxLCAweDAwLCAweDA1LCAweGYwLCAweGM5LCAweDAxLCAweDAwLCAweDY0LCAweDAwLCAweDAwLCAweDQzLAorCTB4ZjAsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjQsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NiwKKwkweDYyLCAweGIxLCAweDAxLCAweDAwLCAweDM0LCAweDhjLCAweGE4LCAweDQ0LCAweGUwLCAweDMxLCAweDAwLCAweDAwLAorCTB4MjMsIDB4ODMsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDksIDB4MDAsIDB4MDAsIDB4MDcsCisJMHg4NiwgMHhlNCwgMHgwMSwgMHgwMCwgMHgzOCwgMHgwMCwgMHgyZSwgMHhhNywgMHg4NywgMHhjMCwgMHgwMSwgMHgwMCwKKwkweDhiLCAweDAwLCAweDJkLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDNjLCAweDhjLCAweDIyLCAweDQzLAorCTB4ZTcsIDB4N2QsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4NDUsIDB4YzEsIDB4MDEsIDB4MDAsCisJMHgzZiwgMHg4YywgMHgyMiwgMHg0NCwgMHhlNywgMHg3ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YywKKwkweDQ1LCAweGMxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRhLCAweDE5LCAweDkwLCAweDAxLCAweDAwLAorCTB4NjgsIDB4MDEsIDB4MjAsIDB4YTIsIDB4ZTQsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ODgsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHg0MywgMHg4YywgMHgyMywgMHgwYiwgMHhlNSwgMHg2ZCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDE5LCAweDkwLCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDEwLAorCTB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4NTAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjEsIDB4OTksIDB4MDEsIDB4MDAsCisJMHg1OCwgMHgwMSwgMHgwMCwgMHg0MywgMHhmMCwgMHhjOSwgMHgwMSwgMHgwMCwgMHg1OCwgMHgwMSwgMHgwMCwgMHgwNSwKKwkweGUwLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDgsIDB4OGMsIDB4YTgsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgyMywgMHg4MywgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDVjLCAweDAwLCAweDJlLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDAzLAorCTB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjAsIDB4ZjAsIDB4OTYsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHhhMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHhmMiwKKwkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDA5LCAweDk3LCAweDAwLCAweDQxLCAweDgxLCAweDMwLCAweDAxLCAweDAwLAorCTB4ZGQsIDB4OGIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4NTUsIDB4OGMsIDB4YTIsIDB4NDksCisJMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHg4NiwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDU5LCAweDhjLCAweDAwLCAweDQwLCAweGU1LCAweGIxLCAweDAwLCAweDAwLCAweDg2LCAweDAwLCAweDJmLCAweDQ5LAorCTB4MTksIDB4ODAsIDB4MDEsIDB4MDAsIDB4NTksIDB4OGMsIDB4YTIsIDB4ZjIsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHg4YiwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwKKwkweGU3LCAweDkxLCAweDAxLCAweDAwLCAweDVjLCAweDhjLCAweGEyLCAweDQ2LCAweDE5LCAweDdjLCAweDAwLCAweDAwLAorCTB4YTAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDcsIDB4OTksIDB4MDEsIDB4MDAsIDB4NjAsIDB4OGMsIDB4MDAsIDB4NDAsCisJMHhlNSwgMHhiMSwgMHgwMCwgMHgwMCwgMHhhMCwgMHgwMCwgMHgyZiwgMHg0NiwgMHgxOSwgMHg4MCwgMHgwMSwgMHgwMCwKKwkweDYwLCAweDhjLCAweGEyLCAweGYyLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDhiLCAweDAwLCAweDAwLCAweDQwLAorCTB4NDcsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ZTcsIDB4OTEsIDB4MDEsIDB4MDAsCisJMHgwNywgMHgwMCwgMHgwMCwgMHg0ZSwgMHg4MCwgMHhlNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgzOSwgMHgwMCwgMHg0MCwKKwkweDgwLCAweGM4LCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDQwLCAweDA2LCAweDZjLCAweDAwLCAweDAwLAorCTB4YTgsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4MzQsIDB4MDAsIDB4MmQsIDB4ZjAsCisJMHgyNCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmYiwgMHgwYywgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGZiLCAweDEwLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZiLAorCTB4MTIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MGYsIDB4MDAsIDB4MDAsIDB4ZjMsIDB4MTYsIDB4ODgsIDB4MDEsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHhmMywgMHgxNCwgMHhmNCwgMHgwMSwgMHgwMCwgMHg5MCwgMHg4YywgMHgyNiwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDc2LCAweDhjLCAweDIyLCAweDBhLCAweDE2LCAweDZjLCAweDAwLCAweDAwLAorCTB4NTgsIDB4MDAsIDB4M2QsIDB4NDMsIDB4MTMsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsCisJMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHhmMCwgMHg4NCwgMHgzMCwgMHgwMCwgMHgwMCwKKwkweDE1LCAweDk4LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDIzLCAweDgzLCAweDAwLCAweDg4LAorCTB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgxMywgMHhjMCwgMHgwMSwgMHgwMCwgMHg3NSwgMHg4YywgMHhhMCwgMHg0MywKKwkweDEzLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDEzLCAweGIwLCAweDAxLCAweDAwLAorCTB4NmIsIDB4OGMsIDB4MDAsIDB4NDEsIDB4MTUsIDB4ZDAsIDB4MDAsIDB4MDAsIDB4OTAsIDB4OGMsIDB4MjIsIDB4MGEsCisJMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHgwOCwgMHgxMiwgMHg2YywgMHgwMCwgMHgwMCwKKwkweDU4LCAweDAwLCAweDNkLCAweDQzLCAweDEzLCAweGUwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LAorCTB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjIsIDB4ZjAsIDB4ODQsIDB4MzAsIDB4MDAsIDB4MDAsCisJMHgxNSwgMHg5OCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgyMCwgMHg0MCwKKwkweGUxLCAweGIxLCAweDAxLCAweDAwLCAweDIzLCAweDgzLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4OTAsIDB4OGMsIDB4MjIsIDB4NDEsCisJMHgxNSwgMHg1MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgxMSwgMHhjMCwgMHgwMSwgMHgwMCwKKwkweDgzLCAweDhjLCAweGEwLCAweDQzLCAweDExLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4MTEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjIsIDB4MDYsIDB4MTAsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHg1OCwgMHgwMCwgMHgzZCwgMHg0MywgMHgxMSwgMHhlMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwKKwkweDM2LCAweGIwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweGYwLCAweDAwLCAweDMwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4ODMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NGUsIDB4OTcsIDB4MDAsIDB4NDcsCisJMHg2MSwgMHgzMSwgMHgwMSwgMHgwMCwgMHgyMywgMHg4MywgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDJiLCAweDk0LCAweDAwLCAweDA1LCAweDQ4LCAweDMxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ1LAorCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCisJMHg4YywgMHg4YywgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgyMywgMHg4MywgMHgwMCwgMHg4OCwKKwkweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDdmLCAweDhjLCAweDAwLCAweDA1LCAweDQ4LCAweGIxLCAweDAwLCAweDAwLAorCTB4MzcsIDB4MDAsIDB4MjAsIDB4NDAsIDB4ZTcsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ODAsIDB4OTcsIDB4MDAsIDB4NTEsCisJMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwgMHhkZCwgMHg4YiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDM3LCAweDAwLCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweGYzLAorCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MzQsIDB4MDAsIDB4MmUsIDB4NDEsIDB4ZjUsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgxMSwgMHgwMCwgMHg0MCwgMHhlNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHg0OCwKKwkweDE5LCAweDdjLCAweDAwLCAweDAwLCAweDlkLCAweDhjLCAweDAwLCAweDQ4LCAweDE5LCAweDkwLCAweDAwLCAweDAwLAorCTB4MzcsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4ZjMsCisJMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgzNCwgMHgwMCwgMHgyZSwgMHg0MSwgMHhmNSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDExLCAweDAwLCAweDQwLCAweGU1LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDAzLAorCTB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4OTQsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHhhNCwgMHg4YywgMHgyMiwgMHg0NSwgMHgyMywgMHg3YywgMHgwMCwgMHgwMCwgMHhiMCwgMHgwMCwgMHgyZiwgMHhmMCwKKwkweDhjLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDYwLCAweGYwLCAweDhjLCAweGMwLCAweDAxLCAweDAwLAorCTB4N2MsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTMsIDB4ZjAsCisJMHg4YywgMHg2YywgMHgwMCwgMHgwMCwgMHg5MCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDM1LCAweDAwLCAweDJkLCAweGYwLCAweDhjLCAweGIwLCAweDAxLCAweDAwLCAweDM0LCAweDAwLCAweDJkLCAweGYzLAorCTB4ODQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjIsIDB4ZjMsIDB4ODQsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHg1OCwgMHgwMCwgMHgzZSwgMHg0MywgMHg4NSwgMHhlMCwgMHgwMSwgMHgwMCwgMHhhYiwgMHg4YywgMHgyMiwgMHg0OCwKKwkweDE5LCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDhkLCAweGMwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4NjgsIDB4MGEsIDB4OGMsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MzgsIDB4MDAsIDB4MmEsIDB4NGEsCisJMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDNjLCAweDAwLCAweDIwLCAweDFiLCAweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDEwLCAweDgwLCAweDAwLCAweDAzLAorCTB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MzgsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgyNiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHhmOCwKKwkweDAyLCAweDMwLCAweDAwLCAweDAwLCAweGI5LCAweDhjLCAweDIzLCAweDAxLCAweDE0LCAweDZjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4ODAsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsCisJMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHg0YywgMHgwMCwgMHgyMCwgMHhmMCwgMHhlNCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDQ0LCAweDAwLCAweDIwLCAweDQwLCAweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDQ4LCAweDAwLCAweDIwLCAweDQxLAorCTB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YTgsIDB4MDAsIDB4MmQsIDB4MTAsIDB4MzIsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHg1OCwgMHg5OCwgMHgwMCwgMHhmMCwgMHgyNCwgMHgzMCwgMHgwMSwgMHgwMCwgMHhjMiwgMHg4YywgMHhhMiwgMHg0NCwKKwkweDgxLCAweDZjLCAweDAwLCAweDAwLCAweGMwLCAweDhjLCAweDIyLCAweDQxLCAweDE5LCAweDdjLCAweDAwLCAweDAwLAorCTB4YjYsIDB4OTUsIDB4MDAsIDB4NDAsIDB4M2IsIDB4MzAsIDB4MDEsIDB4MDAsIDB4ZWEsIDB4OGMsIDB4YTIsIDB4MDgsCisJMHgzYywgMHgzMCwgMHgwMCwgMHgwMCwgMHhjMiwgMHg4YywgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweGI5LCAweDk0LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGVhLCAweDhjLCAweGEyLCAweDA4LAorCTB4M2MsIDB4MzAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4MDAsIDB4MjAsIDB4MWMsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg1NCwgMHgwMCwgMHgyMCwgMHgxMywgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0ZSwgMHgwMCwgMHgyMCwgMHgwMSwKKwkweGU0LCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDIwLCAweDBhLCAweGUwLCAweGIxLCAweDAxLCAweDAwLAorCTB4ODAsIDB4OTcsIDB4MDAsIDB4NWYsIDB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4ZGQsIDB4OGIsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgzNywgMHgwMCwgMHgwMCwgMHg0MCwgMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDhmLCAweDk1LCAweDAwLCAweGYzLCAweDk0LCAweDMwLCAweDAxLCAweDAwLCAweDlkLCAweDhjLCAweDIyLCAweDRhLAorCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4Y2UsIDB4OGMsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgzNywgMHgwMCwgMHgwMCwgMHg0MCwgMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwgMHg4ZiwgMHg5NSwgMHgwMCwgMHhmMywKKwkweDk0LCAweDMwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDIwLCAweDQzLCAweDk3LCAweDZjLCAweDAwLCAweDAwLAorCTB4NTgsIDB4MDAsIDB4M2UsIDB4NDMsIDB4OTcsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWIsCisJMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgxZiwgMHgwMCwgMHg2MCwgMHgwMCwgMHgwMCwgMHg4YywgMHgwMSwgMHgwMCwKKwkweGRkLCAweDhiLCAweDg1LCAweDExLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDA0LCAweDgwLCAweDAwLCAweDAzLAorCTB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4YjAsIDB4MDAsIDB4MmYsIDB4ZjAsIDB4OGMsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg2MCwgMHhmMCwgMHg4YywgMHhjMCwgMHgwMSwgMHgwMCwgMHg3YywgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweGEzLCAweGYwLCAweDhjLCAweDZjLCAweDAwLCAweDAwLAorCTB4ODAsIDB4OTcsIDB4MDAsIDB4NWYsIDB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4ZGQsIDB4OGIsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHg0OSwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwKKwkweGRjLCAweDhjLCAweDAwLCAweDQ5LCAweDE5LCAweDgwLCAweDAwLCAweDAwLCAweGUxLCAweDhjLCAweDIyLCAweDQxLAorCTB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4YjYsIDB4OTUsIDB4MDAsIDB4NDAsIDB4M2IsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHhlNSwgMHg4YywgMHhhMiwgMHgwOCwgMHgzYywgMHgzMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg5NywgMHgwMCwgMHg1ZiwKKwkweDgxLCAweDMwLCAweDAxLCAweDAwLCAweGRkLCAweDhiLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4YjksIDB4OTQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4ZTUsIDB4OGMsIDB4YTIsIDB4MDgsCisJMHgzYywgMHgzMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg5NywgMHgwMCwgMHg1ZiwgMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwKKwkweGRkLCAweDhiLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDUwLCAweDAwLCAweDJkLCAweDEwLAorCTB4MzIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NTQsIDB4MDAsIDB4MmQsIDB4ZjAsIDB4MzgsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHg0ZSwgMHgwMCwgMHgyZCwgMHhmMCwgMHgyNiwgMHhiMCwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgyZCwgMHhmMiwKKwkweDAyLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLCAweDE0LCAweGIwLCAweDAxLCAweDAwLAorCTB4MzAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4OGMsIDB4YzgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4NDYsCisJMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHg2OCwgMHgwMSwgMHgyZCwgMHg0NCwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDEwLCAweDAwLCAweDY4LCAweGYyLCAweDgwLCAweGM4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LAorCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NTgsIDB4MDEsIDB4MDAsIDB4MDUsIDB4ZTAsIDB4YzksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwYiwgMHgzNywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDM2LCAweGQwLCAweDAxLCAweDAwLCAweDVjLCAweDAxLCAweDJlLCAweDQwLCAweDEwLCAweGMwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDYsIDB4ODAsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTIsCisJMHg4MSwgMHhkMCwgMHgwMSwgMHgwMCwgMHgxMiwgMHg5NywgMHgwMCwgMHg0MCwgMHhlNCwgMHgzMSwgMHgwMSwgMHgwMCwKKwkweDIwLCAweDAwLCAweDAwLCAweDQ2LCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweGY2LCAweDhjLCAweGE4LCAweDQwLAorCTB4MjMsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4OTUsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHgxMCwgMHg5NSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwNCwgMHg4ZCwgMHg4MiwgMHg0MSwKKwkweDIzLCAweDQwLCAweDAwLCAweDAwLCAweDIwLCAweDgwLCAweDAwLCAweDEwLCAweDQyLCAweGM5LCAweDAxLCAweDAwLAorCTB4MDEsIDB4OGQsIDB4MjIsIDB4NDAsIDB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsCisJMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKKwkweGZlLCAweDhjLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDIzLCAweDgzLCAweDAwLCAweDg4LAorCTB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgzMiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKKwkweDIzLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDE5LCAweDQ0LCAweGM5LCAweDAxLCAweDAwLAorCTB4MGMsIDB4OGQsIDB4MjIsIDB4NDEsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDgsIDB4OGQsIDB4YTMsIDB4MDEsCisJMHgwYywgMHg2YywgMHgwMCwgMHgwMCwgMHgwOSwgMHg4ZCwgMHgwMCwgMHgwNiwgMHgwNCwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDA0LCAweGIwLCAweDAxLCAweDAwLCAweDBiLCAweDhkLCAweDIwLCAweDAyLAorCTB4MzYsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWIsIDB4MDQsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwZiwgMHg4ZCwgMHgwMCwgMHgwMiwgMHhlMCwgMHhiMSwgMHgwMCwgMHgwMCwgMHgwZSwgMHg4ZCwgMHhhMywgMHgwMSwKKwkweDBjLCAweDZjLCAweDAwLCAweDAwLCAweDBmLCAweDhkLCAweDAwLCAweDA2LCAweDA0LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjgsIDB4MDIsCisJMHgxNiwgMHg5NCwgMHgwMSwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHgwYiwgMHgxNiwgMHhkOCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDY4LCAweDA4LCAweDNlLCAweDk2LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFjLAorCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgyMCwgMHgwMCwgMHgwMCwgMHgxOSwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHgxNCwgMHg4ZCwgMHhhOCwgMHgxMywKKwkweGUwLCAweDMxLCAweDAwLCAweDAwLCAweDUxLCAweDhkLCAweDIyLCAweDAyLCAweDE0LCAweDUwLCAweDAwLCAweDAwLAorCTB4NDQsIDB4MDAsIDB4MmQsIDB4MDIsIDB4MGMsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4M2MsIDB4OGQsIDB4YTIsIDB4MDIsCisJMHgwMiwgMHg1MCwgMHgwMCwgMHgwMCwgMHgyMiwgMHg4ZCwgMHgyMiwgMHg1YywgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwKKwkweDIwLCAweDgwLCAweDAwLCAweDAzLCAweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDIxLCAweDhkLCAweDIyLCAweDQwLAorCTB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHgxZCwgMHg4ZCwgMHhhOCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDIzLCAweDgzLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDQsIDB4MDAsIDB4MmQsIDB4NWMsCisJMHgxZiwgMHg4MCwgMHgwMSwgMHgwMCwgMHg0OCwgMHgwMCwgMHgyZCwgMHhmMCwgMHgzOCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDRjLCAweDAwLCAweDJkLCAweGYwLCAweDI2LCAweGIwLCAweDAxLCAweDAwLCAweDM4LCAweDAwLCAweDJmLCAweGYyLAorCTB4MDIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4M2UsIDB4OGQsIDB4MjIsIDB4MDEsIDB4MTQsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHhhNCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgzMCwgMHg4ZCwgMHgyMiwgMHg0NiwKKwkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ2LCAweDFmLCAweDgwLCAweDAxLCAweDAwLAorCTB4MjAsIDB4MDAsIDB4MmQsIDB4MDMsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MmYsIDB4OGQsIDB4MjIsIDB4NDAsCisJMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDJjLCAweDhkLCAweGE4LCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MjMsIDB4ODMsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgzOCwgMHgwMCwgMHgyZiwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwKKwkweDk0LCAweGIwLCAweDAxLCAweDAwLCAweDM4LCAweDAwLCAweDJkLCAweGYwLCAweDk2LCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGMsIDB4ZTEsIDB4YzEsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4MDMsCisJMHg0OCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyMiwgMHg0YSwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDQ0LCAweDAwLCAweDAwLCAweDA1LCAweGYwLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRhLAorCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGIsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhhMCwgMHgwMCwgMHgwMCwgMHhhNCwKKwkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDM5LCAweDhkLCAweGE4LCAweDVjLCAweDFmLCAweDEwLCAweDAwLCAweDAwLAorCTB4M2UsIDB4OGQsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsCisJMHgzOCwgMHhjMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyNCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDRjLCAweDhkLCAweDIyLCAweDA2LCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLAorCTB4MzMsIDB4YzAsIDB4MDEsIDB4MDAsIDB4NGEsIDB4OGQsIDB4YTIsIDB4MDIsIDB4MzYsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgyMiwgMHg0MSwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHg4ZiwgMHgwZCwKKwkweDQyLCAweDMxLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweGYwLCAweDgwLCAweDMyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MjIsIDB4NWMsIDB4ZTEsIDB4N2QsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4ZjAsCisJMHg2YSwgMHgwNiwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgxMCwgMHhjOCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDVjLCAweDExLCAweDgwLCAweDAxLCAweDAwLCAweGYwLCAweDA3LCAweDAwLCAweDQwLAorCTB4MzcsIDB4OTgsIDB4MDEsIDB4MDAsIDB4ZmEsIDB4OGMsIDB4MDAsIDB4YTEsIDB4MWEsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHgxMCwgMHhjMCwgMHgwMSwgMHgwMCwgMHhmYSwgMHg4YywgMHgwMCwgMHgwMiwKKwkweDM2LCAweGQwLCAweDAwLCAweDAwLCAweDUwLCAweDAwLCAweDIwLCAweDFjLCAweGUwLCAweGIxLCAweDAxLCAweDAwLAorCTB4NTQsIDB4MDAsIDB4MjAsIDB4MTMsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NGUsIDB4MDAsIDB4MjAsIDB4MDEsCisJMHhlNCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgyMCwgMHgwYSwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDU4LCAweDhkLCAweDAwLCAweDVmLCAweDAxLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDAyLAorCTB4MDIsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4MDIsIDB4MGMsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgzNywgMHgwMCwgMHgyZCwgMHg0NiwgMHgwMSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHhmMywKKwkweDgwLCAweGY0LCAweDAxLCAweDAwLCAweDU3LCAweDhkLCAweGEwLCAweDQzLCAweDgxLCAweDZjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTUsIDB4MDEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MjAsIDB4NDAsCisJMHhlMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgxOSwgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDVlLCAweDhkLCAweDIyLCAweDQwLCAweGUzLCAweDZkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ2LAorCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTksIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCisJMHg1YiwgMHg4ZCwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgyMywgMHg4MywgMHgwMCwgMHg4OCwKKwkweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDBkLCAweDk1LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4MzAsIDB4ODAsIDB4MDAsIDB4MTAsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4NjUsIDB4OGQsIDB4MjIsIDB4NDAsCisJMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDYyLCAweDhkLCAweGE4LCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MjMsIDB4ODMsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHg2MCwgMHgwMSwgMHgyZiwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYiwKKwkweGU0LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLCAweDE3LCAweGYwLCAweDAxLCAweDAwLAorCTB4NmEsIDB4OGQsIDB4OTAsIDB4ZjIsIDB4MTYsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCisJMHgxNywgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2NiwgMHgyMCwgMHgxNywgMHhhNCwgMHgwMSwgMHgwMCwKKwkweDMyLCAweDAwLCAweDAwLCAweGE2LCAweDJhLCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYyLAorCTB4MmEsIDB4OTQsIDB4MDEsIDB4MDAsIDB4NmQsIDB4OGQsIDB4NDUsIDB4NDgsIDB4NjEsIDB4MzEsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHhkMCwgMHgwMCwgMHgxZSwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHg3MiwgMHg4ZCwgMHgyOCwgMHg0MCwKKwkweDA1LCAweDMwLCAweDAwLCAweDAwLCAweDZlLCAweDhkLCAweDIyLCAweDQ4LCAweDc3LCAweDdkLCAweDAwLCAweDAwLAorCTB4NzUsIDB4OGQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTUsCisJMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHg4MCwgMHg4ZCwgMHgyOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDcyLCAweDhkLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFkLCAweDAwLAorCTB4OTIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4N2QsIDB4OGQsIDB4MjIsIDB4NDEsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgyMiwgMHg0MCwgMHgzYiwgMHg2YywgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMywgMHg0OCwKKwkweDNiLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDAzLCAweDQyLCAweGM5LCAweDAxLCAweDAwLAorCTB4YzMsIDB4OTQsIDB4MDAsIDB4ZjgsIDB4MDAsIDB4MzAsIDB4MDEsIDB4MDAsIDB4N2EsIDB4OGQsIDB4YTIsIDB4NDEsCisJMHgzYiwgMHg1MCwgMHgwMCwgMHgwMCwgMHg4MSwgMHg4ZCwgMHgwMCwgMHg0OSwgMHgwMCwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweGZmLCAweDA3LCAweDAwLCAweDFlLCAweDAwLCAweDhjLCAweDAxLCAweDAwLCAweGMzLCAweDk0LCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4ODEsIDB4OGQsIDB4MDAsIDB4NDksIDB4MDAsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgxZCwgMHg0NywgMHgxOSwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4NCwgMHg4ZCwgMHgyMiwgMHg1ZiwKKwkweDAxLCAweDZjLCAweDAwLCAweDAwLCAweDg3LCAweDk4LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4YTcsIDB4ODgsIDB4MDAsIDB4MDAsIDB4ODAsIDB4YjAsIDB4MDAsIDB4MDAsIDB4OGIsIDB4OGQsIDB4MjIsIDB4NWMsCisJMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgyMCwgMHg4MCwgMHgwMCwgMHgwMywgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDhiLCAweDhkLCAweDIyLCAweDQwLCAweGUzLCAweDZkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ3LAorCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCisJMHg4OCwgMHg4ZCwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgyMywgMHg4MywgMHgwMCwgMHg4OCwKKwkweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDhiLCAweDhkLCAweDQwLCAweDA1LCAweDQ4LCAweDMxLCAweDAwLCAweDAwLAorCTB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDcsIDB4OTQsIDB4ODksIDB4MDEsIDB4MDAsIDB4OTEsIDB4OGQsIDB4ODUsIDB4Y2EsCisJMHg5NCwgMHgzMCwgMHgwMCwgMHgwMCwgMHg4NywgMHg5OCwgMHgxOCwgMHg1YywgMHgxZiwgMHgwMCwgMHgwMSwgMHgwMCwKKwkweDBlLCAweDAwLCAweDAwLCAweDBmLCAweDFlLCAweDhjLCAweDAxLCAweDAwLCAweGI0LCAweDg3LCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4ODAsIDB4OTcsIDB4MTgsIDB4MDAsIDB4ODAsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHhkZCwgMHg4YiwgMHgwMCwgMHg0NywgMHgxOSwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDE5LCAweDgwLCAweDAxLCAweDAwLCAweGRkLCAweDhiLCAweDIyLCAweDQ3LCAweDE5LCAweDdjLCAweDAwLCAweDAwLAorCTB4YjksIDB4OTQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4OTgsIDB4OGQsIDB4YTIsIDB4MDgsCisJMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHhkZCwgMHg4YiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDEyLCAweDk3LCAweDAwLCAweDQwLCAweDBkLCAweDMwLCAweDAxLCAweDAwLCAweDljLCAweDAxLCAweDAwLCAweDQwLAorCTB4NDUsIDB4OTksIDB4MDEsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MGIsIDB4OTgsIDB4ODgsIDB4MDEsIDB4MDAsCisJMHg4YiwgMHgwMCwgMHgyZCwgMHg1MCwgMHgxNywgMHhmMCwgMHgwMSwgMHgwMCwgMHg5ZSwgMHg4ZCwgMHg5MCwgMHg0YywKKwkweDE2LCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDE3LCAweGMwLCAweDAxLCAweDAwLAorCTB4YTAsIDB4OGQsIDB4MjIsIDB4NDMsIDB4ZTcsIDB4N2QsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsCisJMHg0NSwgMHhjMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2NiwgMHgyMCwgMHgxNywgMHhhNCwgMHgwMSwgMHgwMCwKKwkweDY4LCAweDAxLCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDVjLCAweDAxLCAweDJlLCAweGYyLAorCTB4ODAsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDIsIDB4MDAsIDB4NjIsIDB4NDAsIDB4N2UsIDB4Y2QsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1NywgMHg4MSwgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZSwgMHgxMCwKKwkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDAzLCAweDAwLCAweDAwLCAweDQwLCAweGYwLCAweDhkLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NTgsIDB4MDEsIDB4MDAsIDB4MDUsCisJMHhlMCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGIxLCAweDAxLCAweDAwLCAweGFhLCAweDhkLCAweGE4LCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MjMsIDB4ODMsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhhZSwgMHg4ZCwgMHg0NSwgMHg0OCwKKwkweDYxLCAweDMxLCAweDAwLCAweDAwLCAweDAwLCAweDUwLCAweDAwLCAweDA4LCAweDYyLCAweGRkLCAweDAxLCAweDAwLAorCTB4YjQsIDB4OGQsIDB4MjgsIDB4NDAsIDB4MDUsIDB4MzAsIDB4MDAsIDB4MDAsIDB4YWYsIDB4OGQsIDB4MjIsIDB4NDgsCisJMHg3NywgMHg3ZCwgMHgwMCwgMHgwMCwgMHhjMywgMHg5NCwgMHgxZCwgMHgwOCwgMHgwMCwgMHgzMCwgMHgwMSwgMHgwMCwKKwkweGRkLCAweDhiLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGRkLCAweDhiLCAweDFkLCAweDQ3LAorCTB4MTksIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4MDUsIDB4NDgsIDB4NmQsIDB4MDAsIDB4MDAsCisJMHgzNSwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMSwgMHgwMCwgMHg2MywgMHhmMywKKwkweDg0LCAweGM4LCAweDAxLCAweDAwLCAweGJhLCAweDhkLCAweGEwLCAweDQzLCAweDg1LCAweDZjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4NjMsIDB4NDAsIDB4ODUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YTgsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHgzNywgMHgwMCwgMHgyZiwgMHhmMCwgMHgyNCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDA0LCAweDAwLCAweDIyLCAweGYzLCAweDllLCAweDA2LCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDYzLCAweGYzLAorCTB4ODIsIDB4Y2MsIDB4MDEsIDB4MDAsIDB4YzgsIDB4OGQsIDB4YTIsIDB4NDEsIDB4OWUsIDB4MDYsIDB4MDAsIDB4MDAsCisJMHhkZCwgMHg4YiwgMHgyMiwgMHg0NCwgMHg4MywgMHg3MCwgMHgwMCwgMHgwMCwgMHhhOCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweGYwLCAweDI0LCAweDZjLCAweDAwLCAweDAwLAorCTB4MzYsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4NTgsIDB4MDAsIDB4M2QsIDB4NDMsCisJMHhlNywgMHhlMSwgMHgwMSwgMHgwMCwgMHhkZCwgMHg4YiwgMHgxZiwgMHhmMCwgMHgyNCwgMHg2YywgMHgwMCwgMHgwMCwKKwkweDg3LCAweDk4LCAweDAwLCAweDQ4LCAweDgxLCAweDMwLCAweDAxLCAweDAwLCAweGE3LCAweDg4LCAweDIzLCAweDQxLAorCTB4ODMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4YTcsIDB4ODgsIDB4MDAsIDB4NDcsIDB4ODEsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgzNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHg0MiwKKwkweGU2LCAweDZkLCAweDAwLCAweDAwLCAweDU4LCAweDAwLCAweDNkLCAweDQzLCAweDg1LCAweGUwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MzYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsCisJMHgwMCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHgwMCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweGEyLCAweDAwLCAweGJlLCAweDA2LCAweDAwLCAweDAwLCAweDI4LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODMsIDB4OTgsIDB4MDEsIDB4MDAsIDB4NGUsIDB4OTcsIDB4MDAsIDB4NDcsIDB4NjEsIDB4MzEsIDB4MDEsIDB4MDAsCisJMHgyMywgMHg4MywgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZCwgMHgwMywKKwkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDA4LCAweDAwLCAweDJkLCAweGYwLCAweDk0LCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4OGUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4OTAsIDB4MDAsIDB4MmQsIDB4ZjAsCisJMHgxNCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweGE1LCAweDhjLCAweGEyLCAweDQwLCAweDhmLCAweDdjLCAweDAwLCAweDAwLCAweGRiLCAweDhkLCAweDIyLCAweDQ3LAorCTB4OGYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4NDgsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsCisJMHhhNSwgMHg4YywgMHgwMCwgMHg0OCwgMHgxOSwgMHg5MCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHg0NiwKKwkweDhmLCAweDdjLCAweDAwLCAweDAwLCAweDVkLCAweDhlLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4YTIsIDB4MDUsIDB4NDgsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MzYsIDB4MDAsIDB4MmQsIDB4NWQsCisJMHgwNSwgMHhiNCwgMHgwMSwgMHgwMCwgMHgzNywgMHgwMCwgMHgyZCwgMHhmMywgMHg4MCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGYzLCAweDhlLCAweGIwLCAweDAxLCAweDAwLCAweGYwLCAweDAwLCAweDAwLCAweDQ3LAorCTB4N2UsIDB4ODksIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjYsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHg1YywgMHgwMCwgMHgzZCwgMHg0MywgMHg4MSwgMHhlMCwgMHgwMSwgMHgwMCwgMHhhOCwgMHgwMCwgMHgyZCwgMHhmMCwKKwkweDk0LCAweGIwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweDRhLCAweDgwLCAweDMyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4MjQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4MTAsCisJMHg4NiwgMHhkYywgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MCwgMHgwMCwgMHgwMywgMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDhjLCAweDkzLCAweDAwLCAweDRhLCAweGYwLCAweDMxLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDVjLAorCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MzYsIDB4MDAsIDB4MmYsIDB4NWMsIDB4MWYsIDB4OTAsIDB4MDEsIDB4MDAsCisJMHhlZiwgMHg4ZCwgMHhhMiwgMHg1MCwgMHg4ZiwgMHg1MCwgMHgwMCwgMHgwMCwgMHgzNCwgMHgwMCwgMHgyMCwgMHg0MCwKKwkweGUxLCAweGIxLCAweDAxLCAweDAwLCAweGRkLCAweDhiLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4ZjAsIDB4MDAsIDB4MDAsIDB4NDcsIDB4N2UsIDB4ODksIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjYsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2MywgMHg0MSwgMHg4MSwgMHhjMCwgMHgwMSwgMHgwMCwKKwkweGY0LCAweDhkLCAweGEwLCAweDQzLCAweDgxLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDYzLCAweDQwLAorCTB4ODEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MzcsIDB4MDAsIDB4MjAsIDB4NDcsIDB4ZTYsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHhkZCwgMHg4YiwgMHgyMiwgMHg0NywgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0NywKKwkweDBjLCAweGY0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRmLCAweDhmLCAweDg0LCAweDAxLCAweDAwLAorCTB4MDksIDB4OGUsIDB4MjIsIDB4NDcsIDB4MGMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4NTgsIDB4MDAsIDB4M2QsIDB4NDMsCisJMHg4MSwgMHhlMCwgMHgwMSwgMHgwMCwgMHgwOSwgMHg4ZSwgMHgxZiwgMHhmMCwgMHgyNCwgMHg2YywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDVjLCAweDFmLCAweDgwLCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDEwLAorCTB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDIsIDB4OGUsIDB4MjIsIDB4NDAsIDB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwKKwkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweGZmLCAweDhkLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4MjMsIDB4ODMsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4OGUsIDB4NDIsIDB4NDAsCisJMHgwNSwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg5MywgMHg5MywgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDFhLCAweDVkLCAweDY5LCAweDkzLCAweDAxLCAweDAwLCAweDA3LCAweDhlLCAweDIzLCAweDQxLAorCTB4MGQsIDB4NmMsIDB4MDAsIDB4MDAsIDB4ZGQsIDB4OGQsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDAsIDB4MDAsCisJMHg4NywgMHg5OCwgMHgwMCwgMHgwNSwgMHg0OCwgMHgzMSwgMHgwMSwgMHgwMCwgMHhhNywgMHg4OCwgMHgwMCwgMHg0OCwKKwkweDgxLCAweGIwLCAweDAwLCAweDAwLCAweGRkLCAweDhiLCAweDIyLCAweDQwLCAweDhmLCAweDZjLCAweDAwLCAweDAwLAorCTB4ODAsIDB4OTcsIDB4MDAsIDB4NWYsIDB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4ZGQsIDB4OGIsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwMiwgMHgwMCwgMHgwYywgMHg3ZSwgMHg4OSwgMHgwMSwgMHgwMCwKKwkweDA0LCAweDAwLCAweGE2LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweGEyLCAweDAwLCAweDAwLCAweDQwLAorCTB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjMsIDB4ODQsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHhhNiwgMHgwMCwgMHgyZCwgMHg0OSwgMHgxOSwgMHg5MCwgMHgwMSwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhmMiwKKwkweDgwLCAweGY0LCAweDAxLCAweDAwLCAweGI4LCAweDAwLCAweDJkLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjIsIDB4ODAsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MiwgMHhmOCwgMHgwMSwgMHgwMCwgMHgxOSwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHg5OCwgMHgwMSwgMHgwMCwKKwkweDFhLCAweDhlLCAweGEwLCAweDQwLCAweDgyLCAweDZjLCAweDAwLCAweDAwLCAweDJjLCAweDAxLCAweDAwLCAweDQwLAorCTB4ODEsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MWEsIDB4OGUsIDB4YTMsIDB4NDAsIDB4ODIsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4MCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgxYywgMHg4ZSwgMHgyMCwgMHg0YywKKwkweDg1LCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDg1LCAweGMwLCAweDAxLCAweDAwLAorCTB4ODYsIDB4MDAsIDB4MjAsIDB4NDAsIDB4ZTQsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YTIsIDB4MDAsIDB4MjAsIDB4NDIsCisJMHhlNiwgMHhiMSwgMHgwMSwgMHgwMCwgMHhkZCwgMHg4YiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA5LCAweDk3LCAweDAwLCAweDUwLCAweDgxLCAweDMwLCAweDAxLCAweDAwLCAweGRkLCAweDhiLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgyMiwgMHhmMCwgMHg4MCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDhkLCAweGIwLCAweDAxLCAweDAwLCAweDc4LCAweDk4LCAweDAwLCAweDQwLCAweDg3LCAweDMwLCAweDAxLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4YTIsIDB4NWMsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4YjAsIDB4MDAsIDB4MmYsIDB4NWMsCisJMHgxZiwgMHg5MCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2MCwgMHhmMCwgMHg4MCwgMHhjMCwgMHgwMSwgMHgwMCwKKwkweDdjLCAweDAwLCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweGEzLCAweGYwLAorCTB4ODAsIDB4NmMsIDB4MDAsIDB4MDAsIDB4ODAsIDB4OTcsIDB4MDAsIDB4NWYsIDB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHhkZCwgMHg4YiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGRkLCAweDhiLCAweDIyLCAweDQ2LCAweDE5LCAweDdjLCAweDAwLCAweDAwLAorCTB4YTAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDcsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDEsIDB4MDAsIDB4NjIsIDB4ZjIsCisJMHg5NiwgMHhjYywgMHgwMSwgMHgwMCwgMHhkZCwgMHg4YiwgMHhhNiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDgwLCAweDk3LCAweDAwLCAweDRhLCAweDgxLCAweDMwLCAweDAxLCAweDAwLCAweDU1LCAweDk3LCAweDAwLCAweDQ2LAorCTB4OTUsIDB4MzAsIDB4MDEsIDB4MDAsIDB4ZGQsIDB4OGIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHhkZCwgMHg4YiwgMHgyMiwgMHg0OSwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHg4NiwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDQ3LCAweDk5LCAweDAxLCAweDAwLCAweDAxLCAweDAwLCAweDYyLCAweGYyLCAweDgwLCAweGNjLCAweDAxLCAweDAwLAorCTB4ZGQsIDB4OGIsIDB4YTYsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ODAsIDB4OTcsIDB4MDAsIDB4NGEsCisJMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwgMHg1NSwgMHg5NywgMHgwMCwgMHg0NywgMHg5NSwgMHgzMCwgMHgwMSwgMHgwMCwKKwkweGRkLCAweDhiLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDJiLCAweDk0LCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4NWMsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsCisJMHhkZCwgMHg4YiwgMHgwMCwgMHg1YywgMHgxZiwgMHg5MCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHg0NiwKKwkweDE5LCAweDdjLCAweDAwLCAweDAwLCAweGRkLCAweDhiLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4YTIsIDB4NDksIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4ZGQsIDB4OGIsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhiYSwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDAxLCAweDAwLCAweDYyLCAweGYyLCAweDgwLCAweGM4LCAweDAxLCAweDAwLCAweDQ2LCAweDhlLCAweDkwLCAweDQwLAorCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4NjIsIDB4NDAsIDB4ODEsIDB4OTgsIDB4MDEsIDB4MDAsCisJMHhhNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwgMHhkZCwgMHg4YiwgMHgyMiwgMHg0MCwKKwkweGU1LCAweDZkLCAweDAwLCAweDAwLCAweGRkLCAweDhiLCAweDAwLCAweDQxLCAweGU1LCAweGMxLCAweDAwLCAweDAwLAorCTB4MDksIDB4OTcsIDB4MDAsIDB4NGQsIDB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4ZGQsIDB4OGIsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg1YywgMHgwMCwgMHgwMCwgMHg0MCwgMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDA0LCAweDAwLCAweDIyLCAweGYwLCAweDk2LCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4ZTEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0YiwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDhkLCAweGIwLCAweDAxLCAweDAwLCAweDc4LCAweDk4LCAweDAwLCAweDQwLCAweDg3LCAweDMwLCAweDAxLCAweDAwLAorCTB4OGIsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDcsIDB4OTksIDB4MDEsIDB4MDAsIDB4NTYsIDB4OGUsIDB4ODAsIDB4ZjMsCisJMHg5NiwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhlNywgMHg4MSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ3LCAweDE5LCAweDkwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDVjLAorCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4ZGQsIDB4OGIsIDB4MDAsIDB4NWMsIDB4MWYsIDB4OTAsIDB4MDAsIDB4MDAsCisJMHgzNywgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHhmMywKKwkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDM0LCAweDAwLCAweDAwLCAweDQwLCAweDQ1LCAweDk5LCAweDAxLCAweDAwLAorCTB4MDEsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MTEsIDB4MDAsIDB4NDAsCisJMHhlNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHhiOSwgMHg5NCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDZlLCAweDhlLCAweGEyLCAweDA4LCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDM3LCAweDAwLCAweDAwLCAweDQwLAorCTB4NDcsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjMsIDB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg2MywgMHg1MSwgMHg4MywgMHhkMCwgMHgwMSwgMHgwMCwgMHgzNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDQ3LCAweDk5LCAweDAxLCAweDAwLCAweDAxLCAweDAwLCAweDYzLCAweGYzLCAweDg0LCAweGNjLCAweDAxLCAweDAwLAorCTB4NjYsIDB4OGUsIDB4OWYsIDB4NDIsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjMsIDB4NDIsCisJMHg4NSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHgwMywgMHhmMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweGMwLCAweDAxLCAweDAwLCAweDY4LCAweDhlLCAweDM3LCAweDVjLAorCTB4NjEsIDB4MzEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWIsIDB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg2OSwgMHg4ZSwgMHhhOCwgMHg0YiwgMHgxOSwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDYyLCAweGIxLCAweDAxLCAweDAwLCAweDZiLCAweDhlLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4ZWQsIDB4ODcsIDB4MTcsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDMsCisJMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHg5MCwgMHgwMCwgMHgyZCwgMHhmMCwgMHg5NCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweGFjLCAweDAwLCAweDJkLCAweGYwLCAweDMwLCAweGIwLCAweDAxLCAweDAwLCAweDM1LCAweDAwLCAweDJkLCAweGYwLAorCTB4MjgsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MzQsIDB4MDAsIDB4MmQsIDB4ZjMsIDB4ODQsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgyMiwgMHhmMywgMHg4NCwgMHg2YywgMHgwMCwgMHgwMCwgMHg1OCwgMHgwMCwgMHgzZSwgMHg0MywKKwkweDg1LCAweGUwLCAweDAxLCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweDE4LCAweGYwLCAweGM5LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGEsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MzgsIDB4MDAsIDB4MjAsIDB4MDAsCisJMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgzYywgMHgwMCwgMHgyMCwgMHgxYiwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDQwLCAweDAwLCAweDIwLCAweDQwLCAweGUxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4MmIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NjQsIDB4OTcsIDB4MDAsIDB4NDAsIDB4MGQsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgxNiwgMHhjMCwgMHgwMSwgMHgwMCwgMHg3ZiwgMHg4ZSwgMHhhMCwgMHgxNCwKKwkweDE2LCAweDQ0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDE3LCAweGMwLCAweDAxLCAweDAwLAorCTB4MGUsIDB4MDAsIDB4MDAsIDB4YTIsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsCisJMHhmOCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhiMCwgMHgwMCwgMHgyZCwgMHgxNCwgMHhmOCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDEwLCAweDUwLCAweDAwLCAweDQwLCAweDg3LCAweDk4LCAweDAxLCAweDAwLCAweDg4LCAweDhlLCAweDIyLCAweDRhLAorCTB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzAsIDB4MDAsIDB4NDMsIDB4ODYsIDB4YzgsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgzMCwgMHgwMCwgMHgwYiwgMHgxNiwgMHhjOCwgMHgwMSwgMHgwMCwgMHg4OCwgMHg4ZSwgMHhhNCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDE3LCAweGMwLCAweDAxLCAweDAwLAorCTB4MDEsIDB4MDAsIDB4NmUsIDB4NDMsIDB4ODYsIDB4OTgsIDB4MDEsIDB4MDAsIDB4YTgsIDB4OTcsIDB4MDAsIDB4MzAsCisJMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwgMHg4YywgMHg4ZSwgMHhhMCwgMHg0MSwgMHgxNywgMHg0MCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDE3LCAweGMwLCAweDAxLCAweDAwLCAweDkzLCAweDhlLCAweDIyLCAweDRhLAorCTB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4YTIsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsCisJMHhjYywgMHgwMCwgMHgyZCwgMHhhYiwgMHhmOSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhYiwKKwkweDE3LCAweGMwLCAweDAxLCAweDAwLCAweDkyLCAweDhlLCAweGEwLCAweGYwLCAweDE2LCAweDQ0LCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MTcsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjQsIDB4ZjAsCisJMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHg5MCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0NSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDYwLCAweDQxLCAweDMxLCAweGMwLCAweDAxLCAweDAwLCAweGJjLCAweDAwLCAweDAwLCAweDQwLAorCTB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4OTksIDB4OGUsIDB4MDYsIDB4MGMsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHhhMCwgMHgwMCwgMHgyMCwgMHhmMiwgMHhlNCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwOSwgMHg0NiwKKwkweDE5LCAweDEwLCAweDAwLCAweDAwLCAweDljLCAweDAxLCAweDAwLCAweDQwLCAweDQ1LCAweDk5LCAweDAxLCAweDAwLAorCTB4ZmYsIDB4ZmYsIDB4MDAsIDB4MGIsIDB4OTgsIDB4ODgsIDB4MDEsIDB4MDAsIDB4OGIsIDB4MDAsIDB4MmQsIDB4NTAsCisJMHgxNywgMHhmMCwgMHgwMSwgMHgwMCwgMHg5ZSwgMHg4ZSwgMHg5MCwgMHg0YywgMHgxNiwgMHg0MCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDE3LCAweGMwLCAweDAxLCAweDAwLCAweGEwLCAweDhlLCAweDIyLCAweDQzLAorCTB4ZTcsIDB4N2QsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4NDUsIDB4YzEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg2NiwgMHgyMCwgMHgxNywgMHhhNCwgMHgwMSwgMHgwMCwgMHg2OCwgMHgwMSwgMHgwMCwgMHg0MCwKKwkweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDVjLCAweDAxLCAweDJlLCAweGYyLCAweDgwLCAweGIwLCAweDAxLCAweDAwLAorCTB4MDIsIDB4MDAsIDB4NjIsIDB4NDAsIDB4N2UsIDB4Y2QsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTcsCisJMHg4MSwgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZSwgMHgxMCwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAzLCAweDAwLCAweDAwLCAweDQwLCAweGYwLCAweDhkLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LAorCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NTgsIDB4MDEsIDB4MDAsIDB4MDUsIDB4ZTAsIDB4YzksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwKKwkweDYyLCAweGIxLCAweDAxLCAweDAwLCAweGFhLCAweDhlLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4MjMsIDB4ODMsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsCisJMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhhZSwgMHg4ZSwgMHg0NSwgMHg0OCwgMHg2MSwgMHgzMSwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDUwLCAweDAwLCAweDA4LCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweGFmLCAweDhlLCAweGE4LCAweDQwLAorCTB4MDUsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MzUsIDB4MDAsIDB4MWQsIDB4NDAsIDB4NDcsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgwMSwgMHgwMCwgMHg2MywgMHhmMywgMHg4NCwgMHhjOCwgMHgwMSwgMHgwMCwgMHhiNSwgMHg4ZSwgMHhhMCwgMHg0MywKKwkweDg1LCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDYzLCAweDQwLCAweDg1LCAweGIwLCAweDAxLCAweDAwLAorCTB4MzcsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDcsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjIsIDB4ZjMsCisJMHg5ZSwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHg2MywgMHhmMywgMHg4MiwgMHhjYywgMHgwMSwgMHgwMCwKKwkweDA0LCAweDAwLCAweGEyLCAweDQxLCAweDllLCAweDA2LCAweDAwLCAweDAwLCAweDhiLCAweDAwLCAweDAwLCAweDQwLAorCTB4NDcsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4NDUsIDB4ZTcsIDB4N2QsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHhlNywgMHg5MSwgMHgwMSwgMHgwMCwgMHg4MCwgMHg5NywgMHgwMCwgMHg1ZiwKKwkweDgxLCAweDMwLCAweDAxLCAweDAwLCAweGRkLCAweDhiLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MzcsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDcsIDB4OTksIDB4MDEsIDB4MDAsIDB4OGYsIDB4OTUsIDB4MDAsIDB4ZjMsCisJMHg5NCwgMHgzMCwgMHgwMSwgMHgwMCwgMHg1ZCwgMHg4ZSwgMHgyMiwgMHg0YSwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweGNlLCAweDhjLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDM3LCAweDAwLCAweDAwLCAweDQwLAorCTB4NDcsIDB4OTksIDB4MDEsIDB4MDAsIDB4OGYsIDB4OTUsIDB4MDAsIDB4ZjMsIDB4OTQsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHg5NywgMHg4YywgMHgyMiwgMHg0YSwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHhjZSwgMHg4YywgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDM2LCAweDAwLCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZmIsIDB4MTIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MGYsIDB4MDAsIDB4MDAsIDB4ZjMsCisJMHg5MCwgMHg4OCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHhmMywgMHgwYywgMHhmNCwgMHgwMSwgMHgwMCwKKwkweDA0LCAweDAwLCAweDI2LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweGM4LCAweDhjLCAweDIyLCAweDA2LAorCTB4OTAsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YWEsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHg1YywgMHgwMCwgMHgzZCwgMHg0MywgMHgxMywgMHhlMCwgMHgwMSwgMHgwMCwgMHhhOCwgMHgwMCwgMHgyZCwgMHhmMCwKKwkweDk0LCAweGIwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweDQwLCAweDk1LCAweDZjLCAweDAwLCAweDAwLAorCTB4MzcsIDB4MDAsIDB4MmYsIDB4ZjAsIDB4MjQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MzYsIDB4MDAsIDB4MmEsIDB4NTAsCisJMHhlNywgMHhkMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2MywgMHg0MSwgMHgxMywgMHhjMCwgMHgwMSwgMHgwMCwKKwkweGQ1LCAweDhlLCAweGEwLCAweDQzLCAweDEzLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4ZTcsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ODksIDB4OTMsIDB4MDAsIDB4MTAsIDB4ODYsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHgyMywgMHg4MywgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHhkNywgMHg4ZSwgMHg0MiwgMHgwNSwKKwkweDQ4LCAweDMxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDkzLCAweDkzLCAweDAxLCAweDAwLAorCTB4YzgsIDB4OGMsIDB4MWEsIDB4NWQsIDB4NjksIDB4OTMsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4MDUsCisJMHg0OCwgMHg2ZCwgMHgwMCwgMHgwMCwgMHgzNiwgMHgwMCwgMHgyZCwgMHgxMCwgMHg4NiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDVjLCAweDAwLCAweDNkLCAweDQzLCAweGU3LCAweGUxLCAweDAxLCAweDAwLCAweGE4LCAweDAwLCAweDJkLCAweGYwLAorCTB4OTQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjIsIDB4NGEsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgzNSwgMHgwMCwgMHgyZiwgMHhmMCwgMHgyNCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMSwgMHgwMCwgMHg2YiwgMHhmYiwKKwkweDg0LCAweGM4LCAweDAxLCAweDAwLCAweGU0LCAweDhlLCAweGEwLCAweDQzLCAweDg1LCAweDZjLCAweDAwLCAweDAwLAorCTB4MzUsIDB4MDAsIDB4MjAsIDB4NDAsIDB4ZTcsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMSwgMHgwMCwgMHg2MywgMHhmMywgMHgxMiwgMHhjOCwgMHgwMSwgMHgwMCwKKwkweGU3LCAweDhlLCAweGEwLCAweDQzLCAweDEzLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4ZTcsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsCisJMHg4YywgMHg5MywgMHgwMCwgMHg0YSwgMHhmMCwgMHgzMSwgMHgwMSwgMHgwMCwgMHgyMywgMHg4MywgMHgwMCwgMHg4OCwKKwkweDFjLCAweGIwLCAweDAwLCAweDAwLCAweGVhLCAweDhlLCAweDQyLCAweDA1LCAweDQ4LCAweDMxLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4OTMsIDB4OTMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWEsIDB4NWQsCisJMHg2OSwgMHg5MywgMHgwMSwgMHgwMCwgMHgzNywgMHgwMCwgMHgwMCwgMHg0MCwgMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDA0LCAweDAwLCAweDIyLCAweGYzLCAweDllLCAweDA2LCAweDAwLCAweDAwLCAweDExLCAweDAwLCAweDYzLCAweGYzLAorCTB4ODIsIDB4Y2MsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MWYsIDB4NDEsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHhiZiwgMHg4ZCwgMHgyMiwgMHg0MSwgMHg5ZSwgMHgwNiwgMHgwMCwgMHgwMCwgMHgzNSwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDU4LCAweDAwLCAweDNkLCAweDQzLCAweGU3LCAweGUxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MzYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4Y2QsIDB4OGQsIDB4MDAsIDB4ZjAsCisJMHgwMCwgMHhiMCwgMHgwMCwgMHgwMCwgMHg1ZSwgMHgwMSwgMHgyZCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweGY3LCAweDhlLCAweDY1LCAweGYyLCAweDEyLCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDk5LCAweDNmLCAweDQyLAorCTB4MTMsIDB4ZjAsIDB4MDEsIDB4MDAsIDB4ZmMsIDB4OGUsIDB4MjIsIDB4NDcsIDB4ZTcsIDB4N2QsIDB4MDAsIDB4MDAsCisJMHgyNywgMHg4MywgMHg3NSwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHhmNiwgMHg4ZSwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ3LCAweGU3LCAweDkxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4NzUsIDB4NDIsIDB4MTksIDB4OTAsIDB4MDEsIDB4MDAsIDB4NzUsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwgMHhmZSwgMHg4ZSwgMHhhOCwgMHhiMSwgMHgwYywgMHgzMCwgMHgwMCwgMHgwMCwKKwkweGEzLCAweDk2LCAweDAwLCAweDEwLCAweDk0LCAweDMwLCAweDAxLCAweDAwLCAweDIzLCAweDgzLCAweDAwLCAweDg4LAorCTB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NWUsIDB4MDEsIDB4MmUsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHhjMCwgMHhhOCwgMHgzZCwgMHg0NiwgMHgwZCwgMHhlMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDk3LCAweGIwLCAweDAxLCAweDAwLCAweDA4LCAweDhmLCAweDIyLCAweDQwLCAweGUxLCAweDZkLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDIsIDB4NDEsIDB4OTcsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4OGYsIDB4MDAsIDB4NTAsCisJMHg0MywgMHhjMSwgMHgwMCwgMHgwMCwgMHgxNCwgMHg4ZiwgMHgyMiwgMHg0YiwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDYyLCAweDRiLCAweDEyLCAweDk0LCAweDAxLCAweDAwLCAweDA5LCAweDAwLCAweDAwLCAweDA3LAorCTB4OTYsIDB4ZTQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTcsIDB4OTcsIDB4YzAsIDB4MDEsIDB4MDAsCisJMHgzMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg5NCwgMHhjOCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHg0YSwKKwkweDQ0LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLCAweGYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4NWUsIDB4MDEsIDB4MDAsIDB4NGIsIDB4ZjAsIDB4YzksIDB4MDEsIDB4MDAsIDB4NWUsIDB4MDEsIDB4MDAsIDB4MDUsCisJMHhlMCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDIwLCAweDAwLCAweDAwLCAweDRhLCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDEyLCAweDhmLCAweGE4LCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MTAsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwOSwKKwkweDk2LCAweGU0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDY4LCAweGE4LCAweDk3LCAweGMwLCAweDAxLCAweDAwLAorCTB4ZDQsIDB4MDAsIDB4MDAsIDB4MDUsIDB4ZTAsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsCisJMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDFhLCAweDhmLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDIzLCAweDgzLCAweDAwLCAweDg4LAorCTB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OTksIDB4M2YsIDB4NDIsIDB4MTMsIDB4ZjAsIDB4MDEsIDB4MDAsCisJMHgxZSwgMHg4ZiwgMHg2NSwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgzZiwgMHgwMCwgMHgwMCwgMHhmMywKKwkweDk2LCAweDg4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGU3LCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4NzUsIDB4NTUsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDYsCisJMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyMiwgMHg4ZiwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDI3LCAweDhmLCAweDIyLCAweDRiLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRiLAorCTB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MjUsIDB4OGYsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg5NywgMHgxMywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5NiwKKwkweDk3LCAweGIwLCAweDAxLCAweDAwLCAweDJkLCAweDhmLCAweDIwLCAweDA5LCAweDk2LCAweDZjLCAweDAwLCAweDAwLAorCTB4MmQsIDB4OGYsIDB4MWYsIDB4MDksIDB4OTYsIDB4MjQsIDB4MDAsIDB4MDAsIDB4MjcsIDB4ODMsIDB4MDAsIDB4ODgsCisJMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgyOCwgMHg4ZiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA5LCAweDk3LCAweDAwLCAweDU3LCAweDgxLCAweDMwLCAweDAxLCAweDAwLCAweGM2LCAweDhiLCAweDAwLCAweDA1LAorCTB4NDgsIDB4YjEsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjIsIDB4NDIsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsCisJMHgyZSwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHgzNCwgMHg4ZiwgMHgyMiwgMHhmMywKKwkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDA5LCAweDk3LCAweDAwLCAweDQyLCAweDgxLCAweDMwLCAweDAxLCAweDAwLAorCTB4ZWQsIDB4ODcsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4ODAsIDB4OTcsIDB4MDAsIDB4NTIsCisJMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwgMHhjNiwgMHg4YiwgMHgwMCwgMHg0MiwgMHgxOSwgMHg4MCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDIyLCAweDQyLCAweDE5LCAweDdjLCAweDAwLCAweDAwLCAweDA5LCAweDk3LCAweDAwLCAweDNhLAorCTB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4OTcsIDB4MDAsIDB4NTIsIDB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHhjNiwgMHg4YiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDA1LCAweGIwLCAweDAxLCAweDAwLCAweGZmLCAweDk1LCAweDAwLCAweDQwLCAweDk1LCAweDMwLCAweDAxLCAweDAwLAorCTB4YzYsIDB4OGIsIDB4MjIsIDB4NDAsIDB4OTUsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MjQsIDB4MDQsIDB4MDAsIDB4NDAsCisJMHg4OSwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMiwgMHg5OSwgMHgwMCwgMHgwMCwgMHg4YSwgMHgzMCwgMHgwMSwgMHgwMCwKKwkweDQyLCAweDhmLCAweGEyLCAweDQwLCAweDFmLCAweDdjLCAweDAwLCAweDAwLCAweGMzLCAweDk0LCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4ZWQsIDB4ODcsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHg4MCwgMHgwMCwgMHgwMywgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMiwKKwkweDAyLCAweGIwLCAweDAxLCAweDAwLCAweDlmLCAweDk1LCAweDAwLCAweDUyLCAweDk1LCAweDMwLCAweDAxLCAweDAwLAorCTB4YTYsIDB4OTUsIDB4MDAsIDB4NGIsIDB4MDIsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZWQsIDB4ODcsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgyNSwgMHg5OCwgMHgwMCwgMHg0MCwgMHg5NSwgMHgzMCwgMHgwMSwgMHgwMCwKKwkweDRlLCAweDhmLCAweGEyLCAweDA4LCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDRlLCAweDhmLCAweGEyLCAweDE2LAorCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ZWQsIDB4ODcsIDB4MjIsIDB4NDIsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0YiwgMHgxOSwgMHg5MCwgMHgwMSwgMHgwMCwgMHgwOSwgMHg5NywgMHgwMCwgMHgzYSwKKwkweDgxLCAweDMwLCAweDAxLCAweDAwLCAweGVkLCAweDg3LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MjMsIDB4MDAsIDB4YTYsIDB4MTYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NTEsIDB4OGYsIDB4ODMsIDB4MWUsCisJMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwYiwgMHgxNiwgMHhkYywgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDJhLCAweGMwLCAweDAxLCAweDAwLCAweDU4LCAweDk3LCAweDAwLCAweDA4LAorCTB4ODAsIDB4MzAsIDB4MDEsIDB4MDAsIDB4NTUsIDB4OGYsIDB4MDAsIDB4NWUsIDB4MTcsIDB4OTAsIDB4MDAsIDB4MDAsCisJMHg3OSwgMHg5NywgMHgwMCwgMHg0MywgMHg2MSwgMHgzMSwgMHgwMSwgMHgwMCwgMHg5OCwgMHg5MywgMHgwMCwgMHg0MCwKKwkweDhkLCAweDMwLCAweDAxLCAweDAwLCAweDYwLCAweDk3LCAweDAwLCAweDA3LCAweDE2LCAweDE0LCAweDAxLCAweDAwLAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4MTAsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4NWQsIDB4OGYsIDB4MjIsIDB4NDAsCisJMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDVhLCAweDhmLCAweGE4LCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MjMsIDB4ODMsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHhmYSwgMHg5NiwgMHgwMCwgMHg1ZSwgMHgwNSwgMHgxMCwgMHgwMSwgMHgwMCwgMHhjMywgMHg5NCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDYxLCAweDhmLCAweDIyLCAweDA5LCAweDgwLCAweDMwLCAweDAwLCAweDAwLAorCTB4ODAsIDB4OTcsIDB4MDAsIDB4NDAsIDB4MTMsIDB4MzAsIDB4MDEsIDB4MDAsIDB4Y2QsIDB4OGIsIDB4MDAsIDB4MDUsCisJMHg0OCwgMHhiMSwgMHgwMCwgMHgwMCwgMHgzNiwgMHg5NiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweGM2LCAweDhiLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDRhLAorCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGEsIDB4MWYsIDB4OTAsIDB4MDEsIDB4MDAsCisJMHg2OSwgMHg4ZiwgMHgyMiwgMHg0MywgMHgzZCwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwKKwkweDE5LCAweDkwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQzLCAweDNkLCAweDgwLCAweDAxLCAweDAwLAorCTB4NmEsIDB4OGYsIDB4MDAsIDB4NDIsIDB4MTksIDB4OTAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4NGYsCisJMHgyYiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHg0NSwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwKKwkweDE0LCAweDAwLCAweDJkLCAweDQ1LCAweDFmLCAweDkwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweGYwLAorCTB4MTQsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTAsIDB4MDEsIDB4MTQsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHhkYywgMHg4ZiwgMHg4MywgMHgxZSwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHhkYywgMHg4ZiwgMHgwMCwgMHg0NCwKKwkweDE5LCAweDkwLCAweDAwLCAweDAwLCAweDJmLCAweDAwLCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4YTIsIDB4NDcsIDB4ZTcsIDB4N2QsIDB4MDAsIDB4MDAsIDB4YWUsIDB4OTQsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHg4NCwgMHg4ZiwgMHhhMiwgMHgwOCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDg0LCAweDhmLCAweGEyLCAweDE2LCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDgwLCAweDhmLCAweGEyLCAweDQyLAorCTB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODIsIDB4MDAsIDB4MDIsIDB4MDQsIDB4ZGMsIDB4MDEsIDB4MDAsCisJMHhhMCwgMHg5OCwgMHgwMCwgMHg0MCwgMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwgMHgzMCwgMHgwNSwgMHgwMCwgMHg0MSwKKwkweDg5LCAweDMwLCAweDAxLCAweDAwLCAweDdkLCAweDhmLCAweGEyLCAweDQxLCAweDE5LCAweDdjLCAweDAwLCAweDAwLAorCTB4YzMsIDB4OTQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4ZWQsIDB4ODcsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg5ZiwgMHg5NSwgMHgwMCwgMHgxNSwgMHg5NCwgMHgzMCwgMHgwMSwgMHgwMCwKKwkweGE2LCAweDk1LCAweDAwLCAweDRiLCAweDAyLCAweGIwLCAweDAwLCAweDAwLCAweGVkLCAweDg3LCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MzYsIDB4OTYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0YiwgMHgxOSwgMHg5MCwgMHgwMSwgMHgwMCwgMHgwOSwgMHg5NywgMHgwMCwgMHgzYSwKKwkweDgxLCAweDMwLCAweDAxLCAweDAwLCAweGVkLCAweDg3LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4ODcsIDB4OGYsIDB4MjIsIDB4NDIsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4MzYsIDB4OTYsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHg4OCwgMHg4ZiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweGZmLCAweDk1LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGMwLCAweDhmLCAweDIyLCAweDQxLAorCTB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4YzAsIDB4MDAsIDB4MDAsIDB4MTUsIDB4OTgsIDB4YzgsIDB4MDEsIDB4MDAsCisJMHhjMCwgMHg4ZiwgMHhhMCwgMHgwYiwgMHg5OSwgMHg2YywgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHg0NCwKKwkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweGZmLCAweDA3LCAweDAwLCAweDAwLCAweDdlLCAweDg5LCAweDAxLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4YTYsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MTAsCisJMHg4MCwgMHhjOCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHg0MCwgMHg0NCwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDUwLCAweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLAorCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHg5MywgMHg4ZiwgMHhhOCwgMHgwMCwKKwkweGUwLCAweDMxLCAweDAwLCAweDAwLCAweDIzLCAweDgzLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YzAsIDB4MDAsIDB4MDAsIDB4MTUsCisJMHg5OCwgMHhjOCwgMHgwMSwgMHgwMCwgMHgzMCwgMHgwMCwgMHgyZSwgMHgwYiwgMHg5OSwgMHhkMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDZhLCAweDUwLCAweDk5LCAweGMwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDIwLCAweDBiLAorCTB4OTksIDB4NmMsIDB4MDAsIDB4MDAsIDB4YzAsIDB4MDAsIDB4NjIsIDB4MDEsIDB4ODAsIDB4Y2MsIDB4MDEsIDB4MDAsCisJMHgwYywgMHg4MCwgMHgwMCwgMHgwMywgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgyZCwgMHgwMCwgMHgyZCwgMHhmMCwKKwkweDIyLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRjLCAweDgwLCAweGMwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NWMsIDB4MjMsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ZDQsIDB4MDAsIDB4M2YsIDB4NDEsCisJMHhlNywgMHhlMSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHg0MiwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwKKwkweDBiLCAweDAwLCAweDAwLCAweGYyLCAweDk4LCAweGU0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVhLAorCTB4OTksIDB4ODAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4MDAsIDB4OTgsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgyMCwgMHgwNCwgMHgwMCwgMHg0MCwgMHg4OSwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMiwgMHg5OSwgMHgwMCwgMHgxMSwKKwkweDhhLCAweDMwLCAweDAxLCAweDAwLCAweDBiLCAweDAwLCAweDAwLCAweDExLCAweGU0LCAweGY1LCAweDAxLCAweDAwLAorCTB4MmYsIDB4MDAsIDB4MjAsIDB4NDcsIDB4ZTcsIDB4YjUsIDB4MDEsIDB4MDAsIDB4YWIsIDB4OGYsIDB4MjMsIDB4MGIsCisJMHg4MSwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZiwgMHhlNSwgMHg5MSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDgwLCAweGIwLCAweDAxLCAweDAwLCAweGMxLCAweDAwLCAweDAwLCAweDAxLAorCTB4ODAsIDB4Y2UsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTQsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwYiwgMHgwMywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwKKwkweDAyLCAweGQwLCAweDAxLCAweDAwLCAweDU4LCAweDk3LCAweDAwLCAweDAwLCAweDJhLCAweDQwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsCisJMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHhiMiwgMHg4ZiwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDIzLCAweDgzLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweGMzLCAweDk0LCAweDAwLCAweDA1LAorCTB4NDgsIDB4MzEsIDB4MDEsIDB4MDAsIDB4YzAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4ODAsIDB4Y2UsIDB4MDEsIDB4MDAsCisJMHhiZSwgMHg4ZiwgMHgyNiwgMHgxMSwgMHgwMCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDJhLCAweGM4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDgwLCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4ODAsIDB4YzAsIDB4MDEsIDB4MDAsIDB4YzAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg5OSwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHg5OCwgMHhkMCwgMHgwMSwgMHgwMCwKKwkweDU4LCAweDk3LCAweDAwLCAweDRjLCAweDAyLCAweDMwLCAweDAxLCAweDAwLCAweGMwLCAweDAwLCAweDAwLCAweDQwLAorCTB4MDMsIDB4OTgsIDB4MDEsIDB4MDAsIDB4YzgsIDB4OGYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgzMCwgMHgwMCwgMHgyZiwgMHgwOCwgMHg4MCwgMHhiMCwgMHgwMSwgMHgwMCwgMHhjMCwgMHgwMCwgMHgwMCwgMHgxNSwKKwkweGY0LCAweGM5LCAweDAxLCAweDAwLCAweGMwLCAweDAwLCAweDAwLCAweDAxLCAweGU0LCAweGNkLCAweDAxLCAweDAwLAorCTB4YzEsIDB4MDAsIDB4MDAsIDB4MDEsIDB4ODAsIDB4Y2UsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTQsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMCwgMHgwYiwgMHhlNSwgMHg2ZCwgMHgwMCwgMHgwMCwKKwkweGMwLCAweDAwLCAweDAwLCAweDQwLCAweDAzLCAweDk4LCAweDAxLCAweDAwLCAweDU4LCAweDk3LCAweDAwLCAweDAwLAorCTB4MmEsIDB4NDAsIDB4MDEsIDB4MDAsIDB4Y2QsIDB4OGYsIDB4MjIsIDB4NDQsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsCisJMHhhYywgMHgwMCwgMHgyZiwgMHg0MCwgMHgxMywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwKKwkweGUwLCAweGMxLCAweDAxLCAweDAwLCAweGIwLCAweDAwLCAweDAwLCAweDQwLCAweDQ3LCAweDk5LCAweDAxLCAweDAwLAorCTB4Y2UsIDB4OGYsIDB4MDAsIDB4MDEsIDB4ZTAsIDB4ZDEsIDB4MDAsIDB4MDAsIDB4OTgsIDB4OTMsIDB4MDAsIDB4NDAsCisJMHg4ZCwgMHgzMCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg2MywgMHgwMCwgMHhhNiwgMHgxNiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDYwLCAweDk3LCAweDAwLCAweDA3LCAweDE2LCAweDE0LCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDEwLAorCTB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4ZDYsIDB4OGYsIDB4MjIsIDB4NDAsIDB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwKKwkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweGQzLCAweDhmLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4MjMsIDB4ODMsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZmEsIDB4OTYsIDB4MDAsIDB4NWUsCisJMHgwNSwgMHgxMCwgMHgwMSwgMHgwMCwgMHhkOSwgMHg4ZiwgMHgyMiwgMHgwOSwgMHg4MCwgMHgzMCwgMHgwMCwgMHgwMCwKKwkweDgwLCAweDk3LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGM2LCAweDhiLCAweDAwLCAweDA1LAorCTB4NDgsIDB4YjEsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4NGEsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsCisJMHhkYywgMHg4ZiwgMHgwMCwgMHg0YSwgMHgxZiwgMHg5MCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHg0ZiwKKwkweDJiLCAweDdjLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDVjLCAweDFmLCAweDdjLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4YTIsIDB4NDQsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgxMCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgyNCwgMHgwMCwgMHgyZCwgMHgxNSwgMHgxMCwgMHhjMCwgMHgwMSwgMHgwMCwKKwkweDI4LCAweDAwLCAweDJkLCAweGYwLCAweDE2LCAweGIwLCAweDAxLCAweDAwLCAweDIyLCAweDAwLCAweDJkLCAweGYwLAorCTB4MjYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MTQsIDB4MDAsIDB4MmYsIDB4ZjIsIDB4MGMsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHhlMCwgMHhkMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwKKwkweDMyLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBiLCAweDFiLCAweGIwLCAweDAxLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MWYsIDB4MTUsIDB4MWEsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHgyMywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgyYSwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweGI4LCAweDk2LCAweDAwLCAweDQwLCAweDM1LCAweGIwLCAweDAwLCAweDAwLCAweDJmLCAweDAwLCAweDIwLCAweDQwLAorCTB4ZTcsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MjYsIDB4OTAsIDB4YTIsIDB4NDUsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHhhMiwgMHgwNSwgMHg0OCwgMHg2ZCwgMHgwMCwgMHgwMCwgMHgyNCwgMHgwMCwgMHgyMCwgMHgwYiwKKwkweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDI4LCAweDAwLCAweDIwLCAweDEzLCAweGUwLCAweGIxLCAweDAxLCAweDAwLAorCTB4MjIsIDB4MDAsIDB4MjAsIDB4MDYsIDB4ZTQsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZmEsIDB4OGYsIDB4MjIsIDB4NWMsCisJMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1YywgMHgxZiwgMHg4MCwgMHgwMSwgMHgwMCwKKwkweDMwLCAweDgwLCAweDAwLCAweDEwLCAweDQyLCAweGM5LCAweDAxLCAweDAwLCAweGZhLCAweDhmLCAweDIyLCAweDQwLAorCTB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHhmNiwgMHg4ZiwgMHhhOCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDIzLCAweDgzLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MTQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHhmMCwgMHgxNCwgMHg2YywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDgwLCAweDAwLCAweDE5LCAweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDFmLCAweDkwLCAweDIyLCAweDQwLAorCTB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MGQsIDB4OTAsIDB4MjIsIDB4NDIsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsCisJMHg2ZCwgMHg5NiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHg1NCwgMHg5NCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDFhLCAweDkwLCAweDIyLCAweDRiLCAweDgwLCAweDMyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsCisJMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHgwMywgMHg5MCwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDIzLCAweDgzLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDA5LCAweDkwLCAweDIyLCAweDQxLAorCTB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4ZTEsIDB4OTQsIDB4MDAsIDB4NDAsIDB4MTEsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHgwYSwgMHg5MCwgMHgwMCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMCwgMHgwMCwgMHhjMywgMHg5NCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDBjLCAweDkwLCAweDIyLCAweDA5LCAweDgwLCAweDMwLCAweDAwLCAweDAwLAorCTB4ODAsIDB4OTcsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MmYsIDB4ODMsIDB4MDAsIDB4NDAsCisJMHgwNSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg2ZCwgMHg5NiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDQ5LCAweDk0LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQzLAorCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCisJMHgxMCwgMHg5MCwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgyMywgMHg4MywgMHgwMCwgMHg4OCwKKwkweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDE2LCAweDkwLCAweDIyLCAweDQxLCAweDE5LCAweDdjLCAweDAwLCAweDAwLAorCTB4ZTEsIDB4OTQsIDB4MDAsIDB4NDAsIDB4MTEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MTcsIDB4OTAsIDB4MDAsIDB4MDUsCisJMHg0OCwgMHhiMSwgMHgwMCwgMHgwMCwgMHhjMywgMHg5NCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDE5LCAweDkwLCAweDIyLCAweDA5LCAweDgwLCAweDMwLCAweDAwLCAweDAwLCAweDgwLCAweDk3LCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MmYsIDB4ODMsIDB4MDAsIDB4NDAsIDB4MDUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwKKwkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDFiLCAweDkwLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4MjMsIDB4ODMsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsCisJMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyMiwgMHg5MCwgMHgyMiwgMHg0MSwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwKKwkweGUxLCAweDk0LCAweDAwLCAweDQwLCAweDExLCAweDMwLCAweDAxLCAweDAwLCAweDIzLCAweDkwLCAweDAwLCAweDA1LAorCTB4NDgsIDB4YjEsIDB4MDAsIDB4MDAsIDB4YzMsIDB4OTQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHgyNSwgMHg5MCwgMHgyMiwgMHgwOSwgMHg4MCwgMHgzMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg5NywgMHgwMCwgMHg0MCwKKwkweDEzLCAweDMwLCAweDAxLCAweDAwLCAweGNkLCAweDhiLCAweDAwLCAweDQwLCAweDA1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MTQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4ZjAsCisJMHgxNCwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgxOSwgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDJmLCAweDkwLCAweDIyLCAweDQwLCAweGUzLCAweDZkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQzLAorCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCisJMHgyYiwgMHg5MCwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgyMywgMHg4MywgMHgwMCwgMHg4OCwKKwkweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MzMsIDB4OTAsIDB4MjIsIDB4NDEsCisJMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHhlMSwgMHg5NCwgMHgwMCwgMHg0MCwgMHgxMSwgMHgzMCwgMHgwMSwgMHgwMCwKKwkweDM0LCAweDkwLCAweDAwLCAweDA1LCAweDQ4LCAweGIxLCAweDAwLCAweDAwLCAweGMzLCAweDk0LCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MmQsIDB4MGEsIDB4ODQsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyNiwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDE0LCAweDAwLCAweDIwLCAweDQwLCAweGUxLCAweGIxLCAweDAxLCAweDAwLAorCTB4M2EsIDB4OTAsIDB4MDMsIDB4MWUsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4M2IsIDB4OTAsIDB4MDAsIDB4NDEsCisJMHg4NywgMHhiMCwgMHgwMCwgMHgwMCwgMHgyMSwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4NywgMHg5OCwgMHgwMSwgMHgwMCwKKwkweDI2LCAweDk2LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDVjLAorCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWMsIDB4MWYsIDB4OTAsIDB4MDEsIDB4MDAsCisJMHg0MCwgMHg5MCwgMHgyMiwgMHgwOSwgMHg4MCwgMHgzMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg5NywgMHgwMCwgMHg0MCwKKwkweDEzLCAweDMwLCAweDAxLCAweDAwLCAweDQzLCAweDkwLCAweDIyLCAweDQ0LCAweDE5LCAweDdjLCAweDAwLCAweDAwLAorCTB4ODAsIDB4OTcsIDB4MDAsIDB4NGYsIDB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsCisJMHgxOSwgMHg4MCwgMHgwMSwgMHgwMCwgMHhjNiwgMHg4YiwgMHhhMiwgMHg0YSwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwKKwkweGNkLCAweDhiLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDA1LAorCTB4NDgsIDB4NmQsIDB4MDAsIDB4MDAsIDB4YmEsIDB4MDAsIDB4MjAsIDB4NDAsIDB4ZTUsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg0YiwgMHg5MCwgMHg5YywgMHgxNywgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHg0YSwKKwkweDE5LCAweDdjLCAweDAwLCAweDAwLCAweGNjLCAweDAwLCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLAorCTB4MmYsIDB4OTgsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4Y2UsIDB4OTcsIDB4MDAsIDB4NDAsCisJMHgxMywgMHgzMCwgMHgwMSwgMHgwMCwgMHhjMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwKKwkweGM0LCAweDAwLCAweDJkLCAweGYwLCAweDgyLCAweGIwLCAweDAxLCAweDAwLCAweDA1LCAweDk4LCAweDAwLCAweGYwLAorCTB4ODQsIDB4MzAsIDB4MDEsIDB4MDAsIDB4YzMsIDB4OTQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHhjZCwgMHg4YiwgMHgyMiwgMHgwOSwgMHg4MCwgMHgzMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg5NywgMHgwMCwgMHg0MCwKKwkweDEzLCAweDMwLCAweDAxLCAweDAwLCAweGNkLCAweDhiLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MmUsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4NTcsIDB4OTAsIDB4MjIsIDB4NDAsCisJMHhlNywgMHg2ZCwgMHgwMCwgMHgwMCwgMHgzMiwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDYyLCAweDkwLCAweGEyLCAweDQwLCAweGU1LCAweDZkLCAweDAwLCAweDAwLCAweGVjLCAweDk1LCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MjQsIDB4MDAsIDB4MjAsIDB4MGIsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgyOCwgMHgwMCwgMHgyMCwgMHgxMywgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyMiwgMHgwMCwgMHgyMCwgMHgwNiwKKwkweGU0LCAweGIxLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweDQyLCAweDE5LCAweDdjLCAweDAwLCAweDAwLAorCTB4MTQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4ZjAsCisJMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwMCwgMHgyMCwgMHgwYSwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweGNkLCAweDhiLCAweDIyLCAweDA5LCAweDgwLCAweDMwLCAweDAwLCAweDAwLCAweDgwLCAweDk3LCAweDAwLCAweDQwLAorCTB4MTMsIDB4MzAsIDB4MDEsIDB4MDAsIDB4Y2QsIDB4OGIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHhlYywgMHg5NSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHg5NywgMHg5NSwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDcwLCAweDkwLCAweDIyLCAweDQxLCAweDE5LCAweDdjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MGIsIDB4OTksIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MWYsIDB4MTUsCisJMHg5OCwgMHg1MCwgMHgwMCwgMHgwMCwgMHg3MCwgMHg5MCwgMHgyMCwgMHgwMSwgMHg5OCwgMHg2YywgMHgwMCwgMHgwMCwKKwkweDcwLCAweDAwLCAweDAwLCAweDAzLCAweDQ4LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJlLCAweDQ2LAorCTB4MWYsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwKKwkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweGEwLCAweDAwLCAweDAwLCAweGE0LCAweDYyLCAweGRkLCAweDAxLCAweDAwLAorCTB4NmQsIDB4OTAsIDB4YTgsIDB4MDAsIDB4ZTAsIDB4MzEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsCisJMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhhYywgMHgwMCwgMHgyZiwgMHgwMCwgMHgxMCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAxLCAweGUwLCAweGMxLCAweDAxLCAweDAwLCAweDE0LCAweDAwLCAweDJmLCAweDE1LAorCTB4MTAsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4ZjAsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwYSwgMHg4MCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2MCwgMHgwMSwKKwkweDgwLCAweGQwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ3LCAweDE5LCAweDkwLCAweDAxLCAweDAwLAorCTB4ZTYsIDB4OGYsIDB4MjIsIDB4MDksIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ODAsIDB4OTcsIDB4MDAsIDB4MDksCisJMHg4MCwgMHgzMCwgMHgwMSwgMHgwMCwgMHhlNiwgMHg4ZiwgMHgwMCwgMHg0MCwgMHgxMywgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDgwLCAweDAwLCAweDAzLCAweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLAorCTB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MTMsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODcsIDB4OTgsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0YywgMHg0MywgMHhjMSwgMHgwMSwgMHgwMCwgMHgyNiwgMHg5NiwgMHgwMCwgMHhmMCwKKwkweDg0LCAweDMwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDVjLCAweDFmLCAweDdjLCAweDAwLCAweDAwLAorCTB4YzYsIDB4OGIsIDB4MDAsIDB4NWMsIDB4MWYsIDB4OTAsIDB4MDAsIDB4MDAsIDB4MmMsIDB4MDAsIDB4MjAsIDB4NDAsCisJMHhlNywgMHhiMSwgMHgwMSwgMHgwMCwgMHgyZCwgMHgwMCwgMHgyMCwgMHg0MCwgMHhlNywgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDJlLCAweDAwLCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweGYzLAorCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjIsIDB4NDIsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsCisJMHhjNiwgMHg4YiwgMHgwMCwgMHg0MiwgMHgxOSwgMHg4MCwgMHgwMCwgMHgwMCwgMHgxNiwgMHg5NiwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDU1LCAweDk3LCAweDAwLCAweDQ4LCAweDk1LCAweDMwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsCisJMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHg4YSwgMHg5MCwgMHhhOCwgMHg0MCwgMHgxMywgMHgzMCwgMHgwMCwgMHgwMCwKKwkweDIzLCAweDgzLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDkwLCAweDkwLCAweDAwLCAweDA1LAorCTB4NDgsIDB4YjEsIDB4MDAsIDB4MDAsIDB4OGYsIDB4OTAsIDB4MDAsIDB4NDAsIDB4MTMsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDE0LCAweDAwLCAweDJkLCAweGYwLCAweDgyLCAweGIwLCAweDAxLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MjYsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjIsIDB4ZjAsCisJMHg4NCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgxMywgMHgwMCwgMHgwMCwgMHg0MCwgMHg4NywgMHg5OCwgMHgwMSwgMHgwMCwKKwkweDI2LCAweDk2LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDVjLAorCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWMsIDB4MWYsIDB4OTAsIDB4MDEsIDB4MDAsCisJMHhhZCwgMHg5MCwgMHgwMCwgMHgwOSwgMHgwMCwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHgwNSwKKwkweDQ4LCAweDZkLCAweDAwLCAweDAwLCAweGM2LCAweDhiLCAweDg3LCAweDQyLCAweDE5LCAweDEwLCAweDAwLCAweDAwLAorCTB4OGIsIDB4MDAsIDB4MmYsIDB4NDcsIDB4MTksIDB4ODAsIDB4MDEsIDB4MDAsIDB4YzYsIDB4OGIsIDB4MDAsIDB4NDAsCisJMHhlNywgMHg5MSwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHg0MCwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwKKwkweDJmLCAweDAwLCAweDAwLCAweDQwLCAweDQ3LCAweDk5LCAweDAxLCAweDAwLCAweGFiLCAweDkwLCAweDIyLCAweDQ3LAorCTB4ZTcsIDB4N2QsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjIsIDB4NDEsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsCisJMHgxNywgMHg5NCwgMHgwMCwgMHg0MCwgMHhlNywgMHgzMSwgMHgwMSwgMHgwMCwgMHhhYiwgMHg5MCwgMHgyMiwgMHgwMCwKKwkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweGE2LCAweDkwLCAweGEyLCAweDQwLCAweDFmLCAweDdjLCAweDAwLCAweDAwLAorCTB4YzMsIDB4OTQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4YWIsIDB4OTAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDMyLCAweDAwLCAweDJkLCAweGYyLCAweDk0LCAweGIwLCAweDAxLCAweDAwLCAweDlmLCAweDk1LCAweDAwLCAweGYyLAorCTB4MDIsIDB4MzAsIDB4MDEsIDB4MDAsIDB4YTYsIDB4OTUsIDB4MDAsIDB4NGIsIDB4MDIsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhhYywgMHg5MCwgMHgwMCwgMHg0MCwKKwkweDAxLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDA1LCAweGIwLCAweDAxLCAweDAwLAorCTB4YjIsIDB4OTAsIDB4MjIsIDB4MDAsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4YjEsIDB4OTAsIDB4YTIsIDB4NDIsCisJMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHhmZiwgMHg5NSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweGIyLCAweDkwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDM2LCAweDk2LCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4NTEsIDB4OTEsIDB4MjIsIDB4NWMsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1YywgMHgxZiwgMHg4MCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgxMCwKKwkweDQyLCAweGM5LCAweDAxLCAweDAwLCAweGJhLCAweDkwLCAweDIyLCAweDQwLCAweGUzLCAweDZkLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsCisJMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHhiNywgMHg5MCwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDIzLCAweDgzLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDUxLCAweDkxLCAweDAwLCAweDA1LAorCTB4NDgsIDB4YjEsIDB4MDAsIDB4MDAsIDB4YWUsIDB4OTQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHhjMSwgMHg5MCwgMHhhMiwgMHgwOCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHhjMSwgMHg5MCwgMHhhMiwgMHgxNiwKKwkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDA5LCAweDk3LCAweDAwLCAweDRkLCAweDgxLCAweDMwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4ODIsIDB4MDAsIDB4MDIsIDB4MDQsIDB4ZGMsIDB4MDEsIDB4MDAsIDB4ZWQsIDB4ODcsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg3NCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDgyLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLAorCTB4ODQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4OTYsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHhkMiwgMHg5MCwgMHgyMiwgMHg0MiwgMHg5NiwgMHgxNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgxMCwKKwkweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDY0LCAweDAwLCAweDY4LCAweDQwLCAweDk3LCAweDk4LCAweDAxLCAweDAwLAorCTB4NjQsIDB4MDAsIDB4MDAsIDB4NGIsIDB4ODAsIDB4Y2UsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTYsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQyLCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDcwLCAweDAwLCAweDAwLCAweDA1LAorCTB4ZTAsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgyMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHhjZSwgMHg5MCwgMHhhOCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDVjLCAweDFmLCAweDdjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NWMsIDB4MWYsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsCisJMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKKwkweGQzLCAweDkwLCAweGE4LCAweDVjLCAweDFmLCAweDAwLCAweDAwLCAweDAwLCAweDIzLCAweDgzLCAweDAwLCAweDg4LAorCTB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NWUsIDB4MDEsIDB4MmQsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHhkNywgMHg5MCwgMHg2NSwgMHhmMiwgMHgxMiwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5OSwgMHgzZiwgMHg0MiwKKwkweDEzLCAweGYwLCAweDAxLCAweDAwLCAweGRjLCAweDkwLCAweDIyLCAweDQ3LCAweGU3LCAweDdkLCAweDAwLCAweDAwLAorCTB4MjcsIDB4ODMsIDB4NzUsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZDYsIDB4OTAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywgMHhlNywgMHg5MSwgMHgwMSwgMHgwMCwKKwkweDA0LCAweDAwLCAweDc1LCAweDA5LCAweDk2LCAweGU0LCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDEwLAorCTB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg2OCwgMHhhOCwgMHg5NywgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywKKwkweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDAzLCAweDQ0LCAweDk5LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsCisJMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHhlNCwgMHg5MCwgMHhhOCwgMHg0MCwgMHhlMSwgMHgzMSwgMHgwMCwgMHgwMCwKKwkweDIzLCAweDgzLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDk5LCAweDNmLCAweDQyLAorCTB4MTMsIDB4ZjAsIDB4MDEsIDB4MDAsIDB4ZTgsIDB4OTAsIDB4NjUsIDB4MDUsIDB4NDgsIDB4MzEsIDB4MDAsIDB4MDAsCisJMHgzZiwgMHgwMCwgMHgwMCwgMHhmMywgMHg5NiwgMHg4OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweGU3LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDc1LCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAorCTB4ZjAsIDB4OTAsIDB4MjIsIDB4NGIsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTUsCisJMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YiwgMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweGVlLCAweDkwLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA3LAorCTB4MTYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4NjIsIDB4MDAsIDB4MGIsIDB4MTYsIDB4ZGMsIDB4MDEsIDB4MDAsCisJMHgyZiwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHg0NywKKwkweGU3LCAweDdkLCAweDAwLCAweDAwLCAweDE3LCAweDk0LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4MGQsIDB4OTEsIDB4MjIsIDB4MDAsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4NDgsIDB4OTYsIDB4MDAsIDB4NWYsCisJMHgwMSwgMHgxMCwgMHgwMSwgMHgwMCwgMHhmNCwgMHg5MCwgMHgyMiwgMHg0MCwgMHg5NSwgMHg2YywgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDIyLCAweDQxLCAweDE5LCAweDdjLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweDQwLAorCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MTAsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywKKwkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLCAweDYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZmUsIDB4OTAsIDB4YTgsIDB4MDAsCisJMHhlMCwgMHgzMSwgMHgwMCwgMHgwMCwgMHgyMywgMHg4MywgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDA0LCAweDgwLCAweDAwLCAweDAzLAorCTB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjIsIDB4MDIsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgyMCwgMHgzMSwgMHgwMywgMHg2YywgMHgwMCwgMHgwMCwgMHg5ZiwgMHg5NSwgMHgwMCwgMHg1MiwKKwkweDk1LCAweDMwLCAweDAxLCAweDAwLCAweGMzLCAweDk0LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4ZjQsIDB4OTAsIDB4MjIsIDB4NDEsIDB4OTcsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MGMsIDB4ODAsIDB4MDAsIDB4MDMsCisJMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHgwMCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDVjLCAweDAxLCAweDgwLCAweDAxLCAweDAwLCAweGE2LCAweDk1LCAweDAwLCAweDRiLAorCTB4MDIsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZjQsIDB4OTAsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDAsIDB4MDAsCisJMHg2MCwgMHg5NywgMHgwMCwgMHg0MCwgMHgwMywgMHgzMCwgMHgwMSwgMHgwMCwgMHgxNywgMHg4MCwgMHgwMCwgMHgwMywKKwkweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweGYwLCAweDAwLCAweDBjLCAweDk2LCAweDg4LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4NjMsIDB4NGMsIDB4OTcsIDB4ZjAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjAsIDB4NGQsCisJMHg5NywgMHg2YywgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHg0MCwgMHg5NywgMHg2YywgMHgwMCwgMHgwMCwKKwkweDEwLCAweDgwLCAweDAwLCAweDAzLCAweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGFiLAorCTB4ZTEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZmEsIDB4OTYsIDB4MDAsIDB4NWUsIDB4MDUsIDB4MTAsIDB4MDEsIDB4MDAsCisJMHgwMywgMHgwMCwgMHgwMCwgMHgwNywgMHgxYSwgMHhmNCwgMHgwMSwgMHgwMCwgMHgwNywgMHgwMCwgMHgwMCwgMHgwNywKKwkweDE2LCAweDg4LCAweDAxLCAweDAwLCAweDAwLCAweGI1LCAweDAwLCAweDBkLCAweDQ2LCAweGM5LCAweDAxLCAweDAwLAorCTB4MTksIDB4OTEsIDB4MzAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjIsIDB4MGIsCisJMHhlNiwgMHg3ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYiwgMHhlNiwgMHg4MSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweGI3LCAweDAwLCAweDBkLCAweDQ2LCAweGM5LCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweDBiLAorCTB4ZTYsIDB4N2QsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGIsIDB4ZTYsIDB4ODEsIDB4MDEsIDB4MDAsCisJMHgxMCwgMHgwMCwgMHgxMCwgMHgwZiwgMHg5NCwgMHhmNCwgMHgwMSwgMHgwMCwgMHg5MywgMHgwNCwgMHgwMCwgMHg1ZiwKKwkweDk1LCAweDA0LCAweDAxLCAweDAwLCAweDcwLCAweDk1LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4MjcsIDB4OTEsIDB4MjIsIDB4NTAsIDB4ZmQsIDB4N2YsIDB4MDAsIDB4MDAsIDB4MjMsIDB4OTEsIDB4NDYsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgyNiwgMHg5MSwgMHhhMiwgMHg0MCwgMHgzMSwgMHg2ZiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDFlLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFlLCAweDQxLAorCTB4MzEsIDB4ZDMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmUsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhlMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDBmLCAweGIwLCAweDAxLCAweDAwLCAweGE1LCAweDk0LCAweDAwLCAweDQxLCAweDgxLCAweDMwLCAweDAxLCAweDAwLAorCTB4ZWQsIDB4ODcsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4YWUsIDB4OTQsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgzYSwgMHg5MSwgMHhhMiwgMHgwOCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDNhLCAweDkxLCAweGEyLCAweDE2LCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDgyLCAweDAwLCAweDAyLAorCTB4MDQsIDB4ZGMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4MDMsIDB4ZjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHhjMCwgMHgwMSwgMHgwMCwgMHgzMiwgMHg5MSwgMHgzNywgMHg1YywKKwkweDYxLCAweDMxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFiLCAweDYyLCAweGIxLCAweDAxLCAweDAwLAorCTB4MzcsIDB4OTEsIDB4MjgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4NWMsCisJMHg3NywgMHg3ZCwgMHgwMCwgMHgwMCwgMHgzMywgMHg5MSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDYyLCAweGIxLCAweDAxLCAweDAwLCAweDM3LCAweDkxLCAweGE4LCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ZWQsIDB4ODcsIDB4MTcsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHg3NCwgMHgwMCwgMHgyMiwgMHg0MCwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweGUxLCAweGIxLCAweDAxLCAweDAwLCAweDU1LCAweDk3LCAweDAwLCAweDRhLCAweDk1LCAweDMwLCAweDAxLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4YTIsIDB4NWMsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MTYsIDB4OTYsIDB4MDAsIDB4NWMsCisJMHgxZiwgMHgxMCwgMHgwMSwgMHgwMCwgMHhjMSwgMHg5MCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweGEyLCAweDQwLCAweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDJmLCAweDAwLCAweDAwLCAweDQwLAorCTB4NDcsIDB4OTksIDB4MDEsIDB4MDAsIDB4NGUsIDB4OTEsIDB4MjIsIDB4NDcsIDB4ZTcsIDB4N2QsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgyMiwgMHg0MSwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHgxNywgMHg5NCwgMHgwMCwgMHg0MCwKKwkweGU3LCAweDMxLCAweDAxLCAweDAwLCAweDRlLCAweDkxLCAweDIyLCAweDAwLCAweDgwLCAweDMyLCAweDAwLCAweDAwLAorCTB4NDksIDB4OTEsIDB4YTIsIDB4NDAsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4YzMsIDB4OTQsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHg0ZSwgMHg5MSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDMwLCAweDAwLCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDMyLCAweDAwLCAweDJkLCAweGYyLAorCTB4OTQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4OWYsIDB4OTUsIDB4MDAsIDB4ZjIsIDB4MDIsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHhhNiwgMHg5NSwgMHgwMCwgMHg0YiwgMHgwMiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwKKwkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDU1LCAweDk3LCAweDAwLCAweDQ4LCAweDk1LCAweDMwLCAweDAxLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4YTIsIDB4NWMsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MTYsIDB4OTYsIDB4MDAsIDB4NWMsCisJMHgxZiwgMHgxMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHgwNSwgMHg0OCwgMHg2ZCwgMHgwMCwgMHgwMCwKKwkweDU1LCAweDkxLCAweDg3LCAweDQyLCAweDE5LCAweDEwLCAweDAwLCAweDAwLCAweDhiLCAweDAwLCAweDJmLCAweDQ3LAorCTB4MTksIDB4ODAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZTcsIDB4OTEsIDB4MDEsIDB4MDAsCisJMHg4MCwgMHg5NywgMHgwMCwgMHg0MiwgMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwgMHhjNiwgMHg4YiwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDE2LCAweDk2LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4YTIsIDB4NWMsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4YzYsIDB4OGIsIDB4MDAsIDB4NWMsCisJMHgxZiwgMHg5MCwgMHgwMCwgMHgwMCwgMHhiMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDA0LCAweDAwLCAweGEyLCAweGYwLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweGJhLCAweDAwLCAweDIwLCAweDQwLAorCTB4ZTUsIDB4YjEsIDB4MDEsIDB4MDAsIDB4Y2UsIDB4OTcsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHhjMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHhjNCwgMHgwMCwgMHgyZCwgMHhmMCwKKwkweDgyLCAweGIwLCAweDAxLCAweDAwLCAweDA1LCAweDk4LCAweDAwLCAweGYwLCAweDg0LCAweDMwLCAweDAxLCAweDAwLAorCTB4YzMsIDB4OTQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4ODAsIDB4OTcsIDB4MDAsIDB4NDUsCisJMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwgMHhjNiwgMHg4YiwgMHgyMiwgMHg0MiwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwKKwkweDA5LCAweDk3LCAweDAwLCAweDNhLCAweDgxLCAweDMwLCAweDAxLCAweDAwLCAweGM2LCAweDhiLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHhhZSwgMHg5NCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHg2ZCwgMHg5MSwgMHhhMiwgMHgwOCwKKwkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDZkLCAweDkxLCAweGEyLCAweDE2LCAweDgwLCAweDMyLCAweDAwLCAweDAwLAorCTB4MDksIDB4OTcsIDB4MDAsIDB4NDcsIDB4ODAsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ODIsIDB4MDAsIDB4MDIsCisJMHgwNCwgMHhkYywgMHgwMSwgMHgwMCwgMHhlZCwgMHg4NywgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDEwLCAweDgwLCAweDAwLCAweDAzLCAweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweGUxLCAweDAwLCAweGE2LAorCTB4ODQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2MCwgMHgwNywKKwkweDg0LCAweDk0LCAweDAxLCAweDAwLCAweGZhLCAweDk2LCAweDAwLCAweDVlLCAweDA1LCAweDEwLCAweDAxLCAweDAwLAorCTB4YzYsIDB4OGIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4OGEsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwgMHhjMywgMHg5NCwgMHgwMCwgMHg0MSwgMHhlNywgMHg0MSwgMHgwMSwgMHgwMCwKKwkweGNkLCAweDhiLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDA1LAorCTB4NDgsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4NDEsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHhhMiwgMHg0OCwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHhlYywgMHg5NSwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweGEzLCAweDBhLCAweDBjLCAweDZjLCAweDAwLCAweDAwLAorCTB4OTcsIDB4OTUsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsCisJMHgyYywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwgMHgxMCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweGMwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDFmLCAweDBhLAorCTB4MmMsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHhhMiwgMHhmMCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHg5YiwgMHg5NywgMHgwMCwgMHgwNiwKKwkweDA0LCAweDMwLCAweDAxLCAweDAwLCAweDhhLCAweDkxLCAweGEyLCAweDQ4LCAweDFmLCAweDdjLCAweDAwLCAweDAwLAorCTB4ODgsIDB4OTEsIDB4ODQsIDB4NDgsIDB4MWYsIDB4MTAsIDB4MDAsIDB4MDAsIDB4YWMsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwgMHg4YSwgMHg5MSwgMHgwMCwgMHgwYSwgMHhlMCwgMHhjMSwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDBhLCAweDAyLCAweGIwLCAweDAxLCAweDAwLCAweDk4LCAweDkzLCAweDAwLCAweDAxLAorCTB4OGMsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHg4YiwgMHg5MSwgMHhhOCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDIzLCAweDgzLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsCisJMHgxMCwgMHhjMCwgMHgwMSwgMHgwMCwgMHg5OCwgMHg5MSwgMHgyMiwgMHgwMiwgMHgxNCwgMHg1MCwgMHgwMCwgMHgwMCwKKwkweDczLCAweDk2LCAweDAwLCAweDQ1LCAweDFmLCAweDAwLCAweDAxLCAweDAwLCAweDgzLCAweDkxLCAweDIyLCAweDVjLAorCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHg5NCwgMHg5MSwgMHhhOCwgMHg1YywKKwkweDFmLCAweDAwLCAweDAwLCAweDAwLCAweDIzLCAweDgzLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAorCTB4ODMsIDB4OTEsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGIsCisJMHgxYiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwOCwgMHgwMCwgMHgyZCwgMHg0MCwgMHg4NSwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGYwLCAweDgyLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4MDUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MjYsIDB4OTYsIDB4MDAsIDB4NDEsIDB4ODcsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwKKwkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDllLCAweDkxLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4MjMsIDB4ODMsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsCisJMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhhNCwgMHg5MSwgMHgyMiwgMHgwOSwgMHg4MCwgMHgzMCwgMHgwMCwgMHgwMCwKKwkweDgwLCAweDk3LCAweDAwLCAweDQwLCAweDEzLCAweDMwLCAweDAxLCAweDAwLCAweGE4LCAweDkxLCAweDIyLCAweDQ0LAorCTB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4ODAsIDB4OTcsIDB4MDAsIDB4NGYsIDB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHhhOCwgMHg5MSwgMHhhMiwgMHg0NywgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwKKwkweDE5LCAweDgwLCAweDAxLCAweDAwLCAweGZmLCAweDA3LCAweDAwLCAweDA4LCAweDAwLCAweDhjLCAweDAxLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MjYsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4YjcsIDB4OTEsIDB4MjIsIDB4NGEsCisJMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHhhZiwgMHg5MSwgMHhhMiwgMHgxNiwgMHgwMiwgMHgzMCwgMHgwMCwgMHgwMCwKKwkweGMzLCAweDk0LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDJmLCAweDAwLCAweDIwLCAweDQwLAorCTB4ZTcsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YzYsIDB4OGIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgyZCwgMHgwMCwgMHgyZCwgMHgwOCwgMHgyYSwgMHhiMCwgMHgwMSwgMHgwMCwgMHhiMywgMHg5MSwgMHgyMiwgMHg0MiwKKwkweDE5LCAweDdjLCAweDAwLCAweDAwLCAweDM2LCAweDk2LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4YjQsIDB4OTEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4OTUsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgzMCwgMHgwMCwgMHgyZSwgMHgwMCwgMHgyYSwgMHhkMCwgMHgwMSwgMHgwMCwKKwkweDMyLCAweDAwLCAweDJhLCAweDE1LCAweGU0LCAweGIxLCAweDAxLCAweDAwLCAweGM2LCAweDhiLCAweDAwLCAweDE2LAorCTB4ZTQsIDB4YjEsIDB4MDAsIDB4MDAsIDB4Y2QsIDB4OTEsIDB4MjIsIDB4MTYsIDB4MDIsIDB4MzAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHhhMiwgMHg0NywgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwKKwkweDJhLCAweGIwLCAweDAxLCAweDAwLCAweDI1LCAweDk4LCAweDAwLCAweDQwLCAweDk1LCAweDMwLCAweDAxLCAweDAwLAorCTB4YmQsIDB4OTEsIDB4YTIsIDB4NDAsIDB4MTEsIDB4NmMsIDB4MDAsIDB4MDAsIDB4Y2UsIDB4OTEsIDB4MjIsIDB4NDAsCisJMHgyZCwgMHg2YywgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHgwNSwgMHg0OCwgMHg2ZCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDIyLCAweDQ0LCAweDFmLCAweDdjLCAweDAwLCAweDAwLCAweGFjLCAweDAwLCAweDAwLCAweDQwLAorCTB4NDcsIDB4OTksIDB4MDEsIDB4MDAsIDB4YjAsIDB4MDAsIDB4MmIsIDB4MDEsIDB4ZTAsIDB4YzEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgyYiwgMHgwMCwgMHhhNiwgMHgxNiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwKKwkweGUwLCAweGQxLCAweDAxLCAweDAwLCAweDU4LCAweDk3LCAweDAwLCAweDA4LCAweDgwLCAweDMwLCAweDAxLCAweDAwLAorCTB4YzYsIDB4OTEsIDB4MDAsIDB4NWUsIDB4MTcsIDB4OTAsIDB4MDAsIDB4MDAsIDB4NzksIDB4OTcsIDB4MDAsIDB4NDMsCisJMHg2MSwgMHgzMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweGM3LCAweDkxLCAweGE4LCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MjMsIDB4ODMsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg2MCwgMHg5NywgMHgwMCwgMHgwNywKKwkweDE2LCAweDE0LCAweDAxLCAweDAwLCAweGZhLCAweDk2LCAweDAwLCAweDVlLCAweDA1LCAweDEwLCAweDAxLCAweDAwLAorCTB4YzMsIDB4OTQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MmYsIDB4MDAsIDB4MjAsIDB4NDAsCisJMHhlNywgMHhiMSwgMHgwMSwgMHgwMCwgMHhjZCwgMHg4YiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDBiLCAweDFiLCAweGIwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDFmLCAweDE1LAorCTB4MWEsIDB4NTAsIDB4MDAsIDB4MDAsIDB4ZGMsIDB4OTEsIDB4MjAsIDB4MTYsIDB4MWEsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgyMiwgMHg0MCwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHg3MCwgMHgwMCwgMHgwMCwgMHgwMywKKwkweDQ4LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDIyLCAweDUwLCAweGYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweGEwLCAweDAwLCAweDAwLCAweGE0LCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweGQ5LCAweDkxLCAweGE4LCAweDQ2LAorCTB4MWYsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwKKwkweDEwLCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBhLCAweDJhLCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MGEsIDB4MmMsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MWYsIDB4MTYsCisJMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDA0LCAweDAwLCAweGEyLCAweGYwLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweGFjLCAweDAwLCAweDJmLCAweDQwLAorCTB4MjMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ZTYsIDB4OTEsIDB4ODQsIDB4NDUsIDB4MWYsIDB4MTAsIDB4MDAsIDB4MDAsCisJMHhlNywgMHg5MSwgMHgwMCwgMHgwYSwgMHhlMCwgMHhjMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYSwKKwkweDAyLCAweGIwLCAweDAxLCAweDAwLCAweGI4LCAweDk2LCAweDAwLCAweDQwLCAweDM1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4YTIsIDB4NWMsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MTksCisJMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHhmMCwgMHg5MSwgMHgyMiwgMHg0MCwgMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQzLCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLAorCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4ZWMsIDB4OTEsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgyMywgMHg4MywgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwKKwkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDkyLCAweGEyLCAweDAyLCAweDFhLCAweDUwLCAweDAwLCAweDAwLAorCTB4MDUsIDB4OTIsIDB4MjIsIDB4NDAsIDB4MmQsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjIsIDB4NDAsCisJMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgxMCwgMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDUwLCAweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLAorCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4MDcsIDB4MDAsIDB4MDgsIDB4ZTAsIDB4OGQsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwKKwkweDYyLCAweGIxLCAweDAxLCAweDAwLCAweGY4LCAweDkxLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4MjMsIDB4ODMsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsCisJMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwYywgMHg4MCwgMHgwMCwgMHgwMywgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDEwLCAweDAwLCAweDAwLCAweGYwLCAweDEwLCAweGM4LCAweDAxLCAweDAwLCAweGYwLCAweDA3LCAweDAwLCAweDQwLAorCTB4MWIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDUsIDB4OTIsIDB4MDAsIDB4NWMsIDB4MTEsIDB4ODAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHhhMiwgMHg1ZiwgMHgxYiwgMHg3YywgMHgwMCwgMHgwMCwgMHhmZiwgMHgwNywgMHgwMCwgMHgwOCwKKwkweDk4LCAweDg4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweDk4LCAweGMwLCAweDAxLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MjAsIDB4MGIsIDB4OTksIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsCisJMHgxMCwgMHhjMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHg0MCwgMHgyMywgMHg2YywgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweGEzLCAweDQzLCAweDIzLCAweDZjLCAweDAwLCAweDAwLCAweGUxLCAweDk0LCAweDAwLCAweDQwLAorCTB4MWYsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwYiwgMHg5MiwgMHgyMywgMHgwZCwgMHgyYywgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDFmLCAweDkwLCAweDAxLCAweDAwLCAweDEzLCAweDkyLCAweDIyLCAweDQ2LCAweDFmLCAweDdjLCAweDAwLCAweDAwLAorCTB4NzAsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4MTMsIDB4OTIsIDB4MjIsIDB4NDAsCisJMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDBmLCAweDkyLCAweGE4LCAweDQ2LAorCTB4MWYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjMsIDB4ODMsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwOCwgMHgwMCwgMHgyZCwgMHg0MCwKKwkweDg1LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLCAweDgyLCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MjYsIDB4OTYsIDB4MDAsIDB4NDEsCisJMHg4NywgMHgzMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDE4LCAweDkyLCAweGE4LCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MjMsIDB4ODMsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgxZSwgMHg5MiwgMHgyMiwgMHgwOSwKKwkweDgwLCAweDMwLCAweDAwLCAweDAwLCAweDgwLCAweDk3LCAweDAwLCAweDQwLCAweDEzLCAweDMwLCAweDAxLCAweDAwLAorCTB4MjIsIDB4OTIsIDB4MjIsIDB4NDQsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4ODAsIDB4OTcsIDB4MDAsIDB4NGYsCisJMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwgMHgyMiwgMHg5MiwgMHhhMiwgMHg0NywgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDE5LCAweDgwLCAweDAxLCAweDAwLCAweGZmLCAweDA3LCAweDAwLCAweDA4LAorCTB4MDAsIDB4OGMsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjYsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgzOCwgMHg5MiwgMHgyMiwgMHg0YSwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgyOSwgMHg5MiwgMHhhMiwgMHgxNiwKKwkweDAyLCAweDMwLCAweDAwLCAweDAwLCAweGMzLCAweDk0LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4MmYsIDB4MDAsIDB4MjAsIDB4NDAsIDB4ZTcsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YzYsIDB4OGIsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgyZCwgMHgwMCwgMHgyZCwgMHgwOCwgMHgyYSwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDM0LCAweDkyLCAweDIyLCAweDQyLCAweDE5LCAweDdjLCAweDAwLCAweDAwLCAweDJkLCAweDkyLCAweGEyLCAweGYzLAorCTB4ODQsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTUsIDB4ODUsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4NSwgMHhkMCwgMHgwMSwgMHgwMCwgMHhkNCwgMHgwMCwgMHgzZSwgMHg0MSwKKwkweDg1LCAweGUwLCAweDAxLCAweDAwLCAweDMxLCAweDkyLCAweDIyLCAweDQwLCAweDFmLCAweDdjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NWEsIDB4MTEsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MGIsIDB4MDAsIDB4MDAsIDB4MDgsCisJMHhlNCwgMHhmNSwgMHgwMSwgMHgwMCwgMHgzNiwgMHg5NiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDM1LCAweDkyLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGZmLCAweDk1LCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MzAsIDB4MDAsIDB4MmUsIDB4MDAsIDB4MmEsIDB4ZDAsIDB4MDEsIDB4MDAsCisJMHgzMiwgMHgwMCwgMHgyYSwgMHgxNSwgMHhlNCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhjNiwgMHg4YiwgMHgwMCwgMHgxNiwKKwkweGU0LCAweGIxLCAweDAwLCAweDAwLCAweDNiLCAweDkyLCAweGEyLCAweDE2LCAweDAyLCAweDMwLCAweDAwLCAweDAwLAorCTB4YzMsIDB4OTQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4OTQsIDB4OTIsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgyZCwgMHgwMCwgMHgyZCwgMHgwOCwgMHgyYSwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDRlLCAweDkyLCAweDIyLCAweDQ3LCAweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweGEwLCAweDkxLAorCTB4MDMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4NDgsIDB4OTIsIDB4MjIsIDB4NDIsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsCisJMHg0MSwgMHg5MiwgMHhhMiwgMHhmMywgMHg4NCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhNSwKKwkweDg1LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDg1LCAweGQwLCAweDAxLCAweDAwLAorCTB4ZDQsIDB4MDAsIDB4M2UsIDB4NDEsIDB4ODUsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4NDUsIDB4OTIsIDB4MjIsIDB4NDAsCisJMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1YSwgMHgxMSwgMHg5MCwgMHgwMSwgMHgwMCwKKwkweDBiLCAweDAwLCAweDAwLCAweDA4LCAweGU0LCAweGY1LCAweDAxLCAweDAwLCAweDIwLCAweDA0LCAweDAwLCAweDQwLAorCTB4ODksIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDIsIDB4OTksIDB4MDAsIDB4MDgsIDB4OGEsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHg1OCwgMHgwMSwgMHgyZCwgMHgwMCwgMHgyYSwgMHhkMCwgMHgwMSwgMHgwMCwgMHg2MCwgMHgwMSwgMHgyZCwgMHhmMCwKKwkweDEwLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLCAweDJjLCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MTYsIDB4ODAsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjcsIDB4NDAsCisJMHgxMSwgMHg2YywgMHgwMCwgMHgwMCwgMHg4NCwgMHg4ZiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweGEzLCAweDkxLCAweDAzLCAweDZjLCAweDAwLCAweDAwLCAweDI1LCAweDk4LCAweDAwLCAweDQxLAorCTB4OTUsIDB4MzAsIDB4MDEsIDB4MDAsIDB4NTcsIDB4OTIsIDB4YTIsIDB4MDgsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHg1NywgMHg5MiwgMHhhMiwgMHgxNiwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKKwkweDk3LCAweGIwLCAweDAxLCAweDAwLCAweDU1LCAweDkyLCAweDIzLCAweDBkLCAweDAyLCAweDZjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4OTcsIDB4YzAsIDB4MDEsIDB4MDAsIDB4YTYsIDB4OTUsIDB4MDAsIDB4NGIsCisJMHgwMiwgMHhiMCwgMHgwMCwgMHgwMCwgMHg5NCwgMHg5MiwgMHgwMCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweGEyLCAweDA1LCAweDQ4LCAweDZkLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweDQ0LAorCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4YWMsIDB4MDAsIDB4MmYsIDB4MDEsIDB4MTQsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHhiMCwgMHgwMCwgMHgyYiwgMHgwMSwgMHhlMCwgMHhjMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgyYiwgMHgwMCwgMHhhNiwKKwkweDE2LCAweGIwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweDQxLCAweDE5LCAweDdjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4ZTAsIDB4ZDEsIDB4MDEsIDB4MDAsIDB4NmEsIDB4OTIsIDB4MjMsIDB4MGQsCisJMHgwMiwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgxMCwgMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDUwLCAweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLAorCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHg2MywgMHg5MiwgMHhhOCwgMHgwMCwKKwkweGUwLCAweDMxLCAweDAwLCAweDAwLCAweDIzLCAweDgzLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MGMsIDB4ODAsIDB4MDAsIDB4MDMsCisJMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHgyMiwgMHhjOCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDVjLCAweDIzLCAweDgwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLAorCTB4ODQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NmQsIDB4OTIsIDB4MjMsIDB4MGQsIDB4MDIsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwZCwgMHgwMiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwKKwkweDgwLCAweGIwLCAweDAxLCAweDAwLCAweDcyLCAweDkyLCAweDIyLCAweDQwLCAweDFiLCAweDZjLCAweDAwLCAweDAwLAorCTB4NTgsIDB4OTcsIDB4MDAsIDB4MDEsIDB4ODQsIDB4NTAsIDB4MDEsIDB4MDAsIDB4N2IsIDB4OTIsIDB4MjIsIDB4NDAsCisJMHg4NSwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHg4MCwgMHhjMCwgMHgwMSwgMHgwMCwKKwkweDEwLCAweDgwLCAweDAwLCAweDEwLCAweDQ2LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRmLAorCTB4NDMsIDB4ODEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgyMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmMCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNiwKKwkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQzLCAweDYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4YTAsIDB4MDAsIDB4MDAsIDB4YTEsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4NzgsIDB4OTIsIDB4YTgsIDB4MTEsCisJMHhlMCwgMHgzMSwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHg0MCwgMHgyMywgMHg2YywgMHgwMCwgMHgwMCwKKwkweDhhLCAweDkyLCAweDAwLCAweDVlLCAweDE3LCAweDkwLCAweDAwLCAweDAwLCAweDdlLCAweDkyLCAweDIzLCAweDBkLAorCTB4MDIsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGQsIDB4MDIsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHg4NCwgMHhkMCwgMHgwMSwgMHgwMCwgMHg4MywgMHg5MiwgMHgyMiwgMHg0MCwKKwkweDFiLCAweDZjLCAweDAwLCAweDAwLCAweDc5LCAweDk3LCAweDAwLCAweDQzLCAweDYxLCAweDMxLCAweDAxLCAweDAwLAorCTB4OGEsIDB4OTIsIDB4MjIsIDB4NDAsIDB4ODUsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsCisJMHgxMiwgMHhjMCwgMHgwMSwgMHgwMCwgMHgxMCwgMHg4MCwgMHgwMCwgMHgxMCwgMHg0NiwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDRmLCAweDQzLCAweDgxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLAorCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDksIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhhMCwgMHgwMCwgMHgwMCwgMHhhMSwKKwkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDg4LCAweDkyLCAweGE4LCAweDExLCAweGUwLCAweDMxLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsCisJMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHg4YiwgMHg5MiwgMHhhOCwgMHgwYSwgMHgwMiwgMHgzMCwgMHgwMCwgMHgwMCwKKwkweDIzLCAweDgzLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweGMzLCAweDk0LCAweDAwLCAweDA1LAorCTB4NDgsIDB4MzEsIDB4MDEsIDB4MDAsIDB4OTIsIDB4OTIsIDB4MjMsIDB4MGQsIDB4MDIsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHhmZiwgMHgwNywgMHgwMCwgMHgxMSwgMHgwMCwgMHg4YywgMHgwMSwgMHgwMCwgMHhjMywgMHg5NCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDYwLCAweDk3LCAweDAwLCAweDA3LCAweDE2LCAweDE0LCAweDAxLCAweDAwLAorCTB4ZmEsIDB4OTYsIDB4MDAsIDB4NWUsIDB4MDUsIDB4MTAsIDB4MDEsIDB4MDAsIDB4MmYsIDB4MDAsIDB4MjAsIDB4NDAsCisJMHhlNywgMHhiMSwgMHgwMSwgMHgwMCwgMHhjZCwgMHg4YiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDgwLCAweDAwLCAweDAzLCAweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LAorCTB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjYsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg4YywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwKKwkweDhlLCAweGIwLCAweDAxLCAweDAwLCAweGU2LCAweDk1LCAweDAwLCAweDQwLCAweDEzLCAweDMwLCAweDAxLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MGMsIDB4NDcsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4NSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgyNiwgMHg5NiwgMHgwMCwgMHg0MSwgMHg4NywgMHgzMCwgMHgwMSwgMHgwMCwKKwkweDk3LCAweDk1LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDIwLCAweDkxLAorCTB4MDMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MTAsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsCisJMHhhOCwgMHg5MiwgMHgyMiwgMHg0MCwgMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwKKwkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLAorCTB4YTQsIDB4OTIsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MjMsIDB4ODMsIDB4MDAsIDB4ODgsCisJMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweGFhLCAweDkyLCAweDIyLCAweDA5LCAweDgwLCAweDMwLCAweDAwLCAweDAwLCAweDgwLCAweDk3LCAweDAwLCAweDQwLAorCTB4MTMsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGIsIDB4MWIsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwgMHgxYSwgMHhkMCwgMHgwMSwgMHgwMCwgMHhiMSwgMHg5MiwgMHhhMiwgMHg0MSwKKwkweDE5LCAweDdjLCAweDAwLCAweDAwLCAweDI1LCAweDk4LCAweDAwLCAweDQwLCAweDk1LCAweDMwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MTYsIDB4ODAsIDB4YjIsIDB4MDEsIDB4MDAsIDB4YmEsIDB4OTIsIDB4MjcsIDB4MDgsCisJMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHhiZCwgMHg5MSwgMHgwMCwgMHgwMCwgMHgyYSwgMHhjMCwgMHgwMCwgMHgwMCwKKwkweDI1LCAweDk4LCAweDAwLCAweDQxLCAweDk1LCAweDMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE2LAorCTB4ODAsIDB4YjIsIDB4MDEsIDB4MDAsIDB4YjUsIDB4OTIsIDB4MjcsIDB4MDgsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHg1NywgMHg5MiwgMHgwMCwgMHgwMCwgMHgyYSwgMHhjMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKKwkweDk3LCAweGIwLCAweDAxLCAweDAwLCAweGI4LCAweDkyLCAweDIzLCAweDBkLCAweDAyLCAweDZjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4OTcsIDB4YzAsIDB4MDEsIDB4MDAsIDB4YTYsIDB4OTUsIDB4MDAsIDB4NGIsCisJMHgwMiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweGM2LCAweDhiLCAweDIyLCAweDQyLCAweDE5LCAweDdjLCAweDAwLCAweDAwLCAweDA5LCAweDk3LCAweDAwLCAweDNhLAorCTB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4YzYsIDB4OGIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHhhMiwgMHg0YSwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHhiZiwgMHg5MiwgMHgwMCwgMHg0YSwKKwkweDFmLCAweDkwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDQxLCAweDE5LCAweDdjLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4YTIsIDB4NGYsIDB4MmIsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4NDQsCisJMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHg0NSwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwKKwkweGY5LCAweDk0LCAweDAwLCAweDAwLCAweDEwLCAweDMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE1LAorCTB4MTAsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MzIsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHg5YiwgMHg5NywgMHgwMCwgMHgwNiwgMHgwNCwgMHgzMCwgMHgwMSwgMHgwMCwgMHhjYywgMHg5MiwgMHhhMiwgMHg0NCwKKwkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBiLCAweDFiLCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MGEsIDB4MmMsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGEsCisJMHgwMiwgMHhiMCwgMHgwMSwgMHgwMCwgMHg5OCwgMHg5MywgMHgwMCwgMHgwMSwgMHg4YywgMHgzMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDgwLCAweDAwLCAweDE5LCAweDQyLCAweGM5LCAweDAxLCAweDAwLCAweGQzLCAweDkyLCAweDIyLCAweDQwLAorCTB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHhjZiwgMHg5MiwgMHhhOCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDIzLCAweDgzLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsCisJMHgxMCwgMHhjMCwgMHgwMSwgMHgwMCwgMHhkYywgMHg5MiwgMHgyMiwgMHgwMiwgMHgxNCwgMHg1MCwgMHgwMCwgMHgwMCwKKwkweDczLCAweDk2LCAweDAwLCAweDQ1LCAweDFmLCAweDAwLCAweDAxLCAweDAwLCAweGM1LCAweDkyLCAweDIyLCAweDVjLAorCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHhkOCwgMHg5MiwgMHhhOCwgMHg1YywKKwkweDFmLCAweDAwLCAweDAwLCAweDAwLCAweDIzLCAweDgzLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAorCTB4YzUsIDB4OTIsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MmQsIDB4NDAsCisJMHg4NSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDA1LCAweGIwLCAweDAxLCAweDAwLCAweDI2LCAweDk2LCAweDAwLCAweDQxLAorCTB4ODcsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHhlMSwgMHg5MiwgMHhhOCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDIzLCAweDgzLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZTcsIDB4OTIsIDB4MjIsIDB4MDksCisJMHg4MCwgMHgzMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg5NywgMHgwMCwgMHg0MCwgMHgxMywgMHgzMCwgMHgwMSwgMHgwMCwKKwkweGVhLCAweDkyLCAweDIyLCAweDQ0LCAweDE5LCAweDdjLCAweDAwLCAweDAwLCAweDgwLCAweDk3LCAweDAwLCAweDRmLAorCTB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4MTksIDB4ODAsIDB4MDEsIDB4MDAsCisJMHhmZiwgMHgwNywgMHgwMCwgMHgwOCwgMHgwMCwgMHg4YywgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyNiwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweGY5LCAweDkyLCAweDIyLCAweDRhLCAweDFmLCAweDdjLCAweDAwLCAweDAwLAorCTB4ZjEsIDB4OTIsIDB4YTIsIDB4MTYsIDB4MDIsIDB4MzAsIDB4MDAsIDB4MDAsIDB4YzMsIDB4OTQsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgyZiwgMHgwMCwgMHgyMCwgMHg0MCwgMHhlNywgMHhiMSwgMHgwMSwgMHgwMCwKKwkweGM2LCAweDhiLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDJkLCAweDAwLCAweDJkLCAweDA4LAorCTB4MmEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ZjUsIDB4OTIsIDB4MjIsIDB4NDIsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsCisJMHgzNiwgMHg5NiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhmNiwgMHg5MiwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGZmLCAweDk1LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4MzAsIDB4MDAsIDB4MmUsIDB4MDAsIDB4MmEsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4MzIsIDB4MDAsIDB4MmEsIDB4MTUsCisJMHhlNCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhjNiwgMHg4YiwgMHgwMCwgMHgxNiwgMHhlNCwgMHhiMSwgMHgwMCwgMHgwMCwKKwkweGI4LCAweDkxLCAweGEyLCAweDE2LCAweDAyLCAweDMwLCAweDAwLCAweDAwLCAweGMzLCAweDk0LCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MmYsIDB4MDAsIDB4MjAsIDB4NDAsIDB4ZTcsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHhjZCwgMHg4YiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHg0MSwKKwkweDE5LCAweDdjLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDRmLCAweDJiLCAweDdjLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4YTIsIDB4NDQsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4NDUsCisJMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHg0YSwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwKKwkweGY5LCAweDk0LCAweDAwLCAweDRhLCAweDFmLCAweDEwLCAweDAxLCAweDAwLCAweGQwLCAweDkxLCAweDAwLCAweDEwLAorCTB4MzIsIDB4YjAsIDB4MDAsIDB4MDAsIDB4OGEsIDB4MDAsIDB4MjAsIDB4NDAsIDB4ZTcsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwOCwgMHg5MywgMHhhMiwgMHg0MSwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHhjMywgMHg5NCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDBiLCAweDkzLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4OWYsIDB4OTUsIDB4MDAsIDB4MTUsIDB4OTQsIDB4MzAsIDB4MDEsIDB4MDAsIDB4YTYsIDB4OTUsIDB4MDAsIDB4NGIsCisJMHgwMiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDBkLCAweDkzLCAweDIyLCAweDQyLCAweDE5LCAweDdjLCAweDAwLCAweDAwLCAweDA5LCAweDk3LCAweDAwLCAweDNhLAorCTB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4OTcsIDB4MDAsIDB4NDUsIDB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHhjNiwgMHg4YiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg2MiwgMHg5MCwgMHgwMCwgMHg0NSwKKwkweDFmLCAweDkwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweDQxLCAweDE5LCAweDdjLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4YTIsIDB4NDcsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4ZWMsIDB4OTUsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMywgMHgwYSwgMHgwYywgMHg2YywgMHgwMCwgMHgwMCwKKwkweDk3LCAweDk1LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGQwLCAweDkxLCAweDAwLCAweDAxLAorCTB4MmMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjIsIDB4NDEsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHhhMiwgMHg0OCwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHhhZSwgMHg5NCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDI2LCAweDkzLCAweGEyLCAweDA4LCAweDgwLCAweDMyLCAweDAwLCAweDAwLAorCTB4MjYsIDB4OTMsIDB4YTIsIDB4MTYsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODIsIDB4MDAsIDB4MDIsCisJMHgwNCwgMHhkYywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHgwMywgMHhmMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweGMwLCAweDAxLCAweDAwLCAweDFlLCAweDkzLCAweDM3LCAweDVjLAorCTB4NjEsIDB4MzEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWIsIDB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgyMywgMHg5MywgMHgyOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHg1YywKKwkweDc3LCAweDdkLCAweDAwLCAweDAwLCAweDFmLCAweDkzLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MjMsIDB4OTMsIDB4YTgsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhlZCwgMHg4NywgMHgxNywgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDU4LCAweDAxLCAweDIwLCAweDA4LCAweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDYwLCAweDAxLCAweDIwLCAweDE2LAorCTB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZWMsIDB4OTUsIDB4MDAsIDB4NDcsIDB4MWYsIDB4MTAsIDB4MDEsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHhhMywgMHgwYSwgMHgwYywgMHg2YywgMHgwMCwgMHgwMCwgMHg5NywgMHg5NSwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGQwLCAweDkxLCAweDAwLCAweDAxLCAweDJjLCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MjIsIDB4NDEsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4NDcsCisJMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHhhZSwgMHg5NCwgMHgwMCwgMHg0NywgMHgxZiwgMHgxMCwgMHgwMSwgMHgwMCwKKwkweDNkLCAweDkzLCAweGEyLCAweDA4LCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDNkLCAweDkzLCAweGEyLCAweDE2LAorCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MzksIDB4OTMsIDB4YTIsIDB4NDIsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHg4MiwgMHgwMCwgMHgwMiwgMHgwNCwgMHhkYywgMHgwMSwgMHgwMCwgMHhhMCwgMHg5OCwgMHgwMCwgMHg0MCwKKwkweDQ3LCAweDk5LCAweDAxLCAweDAwLCAweDMwLCAweDA1LCAweDAwLCAweDQxLCAweDg5LCAweDMwLCAweDAxLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MjIsIDB4NDEsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4OWYsIDB4OTUsIDB4MDAsIDB4MTUsCisJMHg5NCwgMHgzMCwgMHgwMSwgMHgwMCwgMHhhNiwgMHg5NSwgMHgwMCwgMHg0YiwgMHgwMiwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweGVkLCAweDg3LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDM2LCAweDk2LCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGIsIDB4MTksIDB4OTAsIDB4MDEsIDB4MDAsCisJMHgwOSwgMHg5NywgMHgwMCwgMHgzYSwgMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwgMHhlZCwgMHg4NywgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDU4LCAweDAxLCAweDIwLCAweDA4LCAweGUwLCAweGIxLCAweDAxLCAweDAwLAorCTB4NjAsIDB4MDEsIDB4MjAsIDB4MTYsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4NGYsCisJMHgyYiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHg0NCwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweGEyLCAweDQ1LCAweDFmLCAweDdjLCAweDAwLCAweDAwLCAweGY5LCAweDk0LCAweDAwLCAweDEwLAorCTB4MzIsIDB4MzAsIDB4MDEsIDB4MDAsIDB4ZDAsIDB4OTEsIDB4MDAsIDB4NDAsIDB4MTMsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHhhZSwgMHg5NCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHg1MiwgMHg5MywgMHhhMiwgMHgwOCwKKwkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDUyLCAweDkzLCAweGEyLCAweDE2LCAweDgwLCAweDMyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4ODIsIDB4MDAsIDB4MDIsIDB4MDQsIDB4ZGMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsCisJMHgwMywgMHhmMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHhjMCwgMHgwMSwgMHgwMCwKKwkweDRhLCAweDkzLCAweDM3LCAweDVjLCAweDYxLCAweDMxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFiLAorCTB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NGYsIDB4OTMsIDB4MjgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHhhMiwgMHg1YywgMHg3NywgMHg3ZCwgMHgwMCwgMHgwMCwgMHg0YiwgMHg5MywgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDYyLCAweGIxLCAweDAxLCAweDAwLAorCTB4NGYsIDB4OTMsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ZWQsIDB4ODcsIDB4MTcsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMywgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDgyLCAweGIwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDI2LCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4OGMsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHg4ZSwgMHhiMCwgMHgwMSwgMHgwMCwgMHhlNiwgMHg5NSwgMHgwMCwgMHg0MCwKKwkweDEzLCAweDMwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDBjLCAweDQ3LCAweDgwLCAweDMyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MjYsIDB4OTYsIDB4MDAsIDB4NDEsCisJMHg4NywgMHgzMCwgMHgwMSwgMHgwMCwgMHg5NywgMHg5NSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDA0LCAweDAwLCAweGEwLCAweDkxLCAweDAzLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDEwLAorCTB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4NjQsIDB4OTMsIDB4MjIsIDB4NDAsIDB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwKKwkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDYwLCAweDkzLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4MjMsIDB4ODMsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsCisJMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg4NCwgMHg4ZiwgMHgyMiwgMHgwOSwgMHg4MCwgMHgzMCwgMHgwMCwgMHgwMCwKKwkweDgwLCAweDk3LCAweDAwLCAweDQwLCAweDEzLCAweDMwLCAweDAxLCAweDAwLCAweDg0LCAweDhmLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4ODMsIDB4MWUsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHhhMiwgMHg0ZiwgMHgyYiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHg0NSwKKwkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDE0LCAweDAwLCAweDJkLCAweDQ1LCAweDFmLCAweDkwLCAweDAxLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4YTIsIDB4ZjAsIDB4MTQsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTAsIDB4MDEsCisJMHgxNCwgMHg2YywgMHgwMCwgMHgwMCwgMHhkYywgMHg4ZiwgMHgwMCwgMHg0NCwgMHgxOSwgMHg5MCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweGEyLCAweDRhLCAweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDcyLCAweDkzLCAweGEyLCAweDQxLAorCTB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGEsIDB4MWYsIDB4OTAsIDB4MDEsIDB4MDAsCisJMHg3NywgMHg5MSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHg0OCwKKwkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweGVjLCAweDk1LCAweDAwLCAweDRhLCAweDFmLCAweDEwLCAweDAxLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4YTMsIDB4MGEsIDB4MGMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4OTcsIDB4OTUsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhkMCwgMHg5MSwgMHgwMCwgMHgwMSwgMHgyYywgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDIyLCAweDQxLCAweDE5LCAweDdjLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDRmLAorCTB4MmIsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4NDQsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHhhMiwgMHg0NSwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHhmOSwgMHg5NCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGQwLCAweDkxLCAweDAwLCAweDEwLCAweDMyLCAweGIwLCAweDAwLCAweDAwLAorCTB4OGIsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4NDYsCisJMHhlNywgMHg3ZCwgMHgwMCwgMHgwMCwgMHg2MiwgMHg5MCwgMHgwMCwgMHg0NSwgMHgxZiwgMHg5MCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDM3LCAweGMzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAorCTB4MzMsIDB4YzMsIDB4MDEsIDB4MDAsIDB4MzYsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDIsIDB4Y2MsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHhkMiwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg4NiwgMHg5MywgMHg4NSwgMHgxNywKKwkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDlmLCAweDQ4LCAweDAzLCAweGQwLCAweDAwLCAweDAwLAorCTB4ODgsIDB4OTMsIDB4OWMsIDB4MTcsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OWYsIDB4NGMsCisJMHgwMywgMHhkMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMSwgMHgzNCwgMHhjMywgMHgwMSwgMHgwMCwKKwkweDQwLCAweDgwLCAweDAwLCAweDAzLCAweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRhLAorCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjYsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwKKwkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweGNiLCAweDk0LCAweDAwLCAweDQxLCAweGUxLCAweDMxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4NDMsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHhmMSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0OCwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ5LCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDAzLAorCTB4ZTAsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywgMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDk1LCAweDkzLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MmQsIDB4MDQsIDB4MDAsIDB4NDAsIDB4ODksIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDIsIDB4OTksIDB4MDAsIDB4YTUsCisJMHg4YSwgMHgzMCwgMHgwMSwgMHgwMCwgMHhiYSwgMHgwMCwgMHgyMCwgMHg0MCwgMHhlNSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweGIwLCAweDAwLCAweDJmLCAweDAxLCAweDhjLCAweGQwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDFmLCAweGYwLAorCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsIDB4ZTAsIDB4YzEsIDB4MDEsIDB4MDAsCisJMHhhYywgMHgwMCwgMHgyZiwgMHg0MCwgMHgxMywgMHhiMCwgMHgwMSwgMHgwMCwgMHhjYywgMHgwMCwgMHgyZCwgMHgwMSwKKwkweGUwLCAweGMxLCAweDAxLCAweDAwLCAweGEzLCAweDkzLCAweDljLCAweDE3LCAweDgwLCAweDMyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MjIsIDB4NGEsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4MmYsIDB4OTgsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhhNSwgMHg5MywgMHgyMiwgMHg0NywgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDVmLCAweDEzLCAweDkwLCAweDAxLCAweDAwLCAweGNlLCAweDk3LCAweDAwLCAweDQ3LAorCTB4MTksIDB4MTAsIDB4MDEsIDB4MDAsIDB4YzAsIDB4MDAsIDB4MmQsIDB4NDQsIDB4MWYsIDB4OTAsIDB4MDEsIDB4MDAsCisJMHhjNCwgMHgwMCwgMHgyZCwgMHhmMCwgMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwNSwgMHg5OCwgMHgwMCwgMHhmMCwKKwkweDg0LCAweGIwLCAweDAwLCAweDAwLCAweDkwLCAweDAwLCAweDJkLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLAorCTB4YmEsIDB4OTMsIDB4YTIsIDB4NGIsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MGYsIDB4OTQsIDB4YTIsIDB4NGMsCisJMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHhiYSwgMHg5MywgMHgxZiwgMHgxYywgMHhlMCwgMHg2ZCwgMHgwMCwgMHgwMCwKKwkweGJkLCAweDkzLCAweGEyLCAweDAxLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweGE4LCAweDAwLCAweDJkLCAweDQ2LAorCTB4OGYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YjMsIDB4OTMsIDB4MWYsIDB4MWMsIDB4ZTAsIDB4NmQsIDB4MDAsIDB4MDAsCisJMHhiNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHhiNSwgMHg5MywgMHgyMiwgMHhmMCwKKwkweDNhLCAweDZjLCAweDAwLCAweDAwLCAweDBjLCAweDk0LCAweDFmLCAweGYwLCAweDNhLCAweDZjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4YTIsIDB4NDAsIDB4ODAsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NGYsCisJMHg4ZiwgMHhiMCwgMHgwMSwgMHgwMCwgMHg4YSwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDBkLCAweDk0LCAweDIwLCAweDQyLCAweGU3LCAweDZkLCAweDAwLCAweDAwLCAweGI5LCAweDkzLCAweDIyLCAweDQwLAorCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NTksIDB4OGYsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg4MCwgMHg1OCwgMHg4ZiwgMHhiMCwgMHgwMSwgMHgwMCwgMHhiYywgMHg5MywgMHgyMiwgMHg0MCwKKwkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDVjLCAweDhmLCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4ODAsIDB4NWIsIDB4OGYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YWMsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHhiMCwgMHgwMCwgMHgyZCwgMHhmMCwgMHg4NCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweGMxLCAweDkzLCAweGEyLCAweDQyLCAweDI0LCAweDZjLCAweDAwLCAweDAwLCAweGNjLCAweDkzLCAweDIzLCAweGYwLAorCTB4MDIsIDB4NmMsIDB4MDAsIDB4MDAsIDB4YjAsIDB4MDAsIDB4MDAsIDB4YTEsIDB4ODAsIDB4Y2UsIDB4MDEsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHhhNiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhjOSwgMHg5MywgMHhhMiwgMHhmMCwKKwkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDBlLCAweDk0LCAweGEyLCAweDQyLCAweDI0LCAweDZjLCAweDAwLCAweDAwLAorCTB4MGUsIDB4OTQsIDB4YTIsIDB4NDEsIDB4MDMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4YzgsIDB4OTMsIDB4YTIsIDB4NDAsCisJMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg1MSwgMHg4ZiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDgwLCAweDUyLCAweDhmLCAweGIwLCAweDAxLCAweDAwLCAweDBlLCAweDk0LCAweDFmLCAweDEyLAorCTB4ODQsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MGUsIDB4OTQsIDB4YTAsIDB4MDEsIDB4ODQsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHhiYSwgMHg5MywgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg4YiwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDQzLCAweDk5LCAweDAxLCAweDAwLCAweGY3LCAweDkzLCAweGEyLCAweDQ2LCAweGU3LCAweDdkLCAweDAwLCAweDAwLAorCTB4MTQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4ZTksIDB4OTMsIDB4MjIsIDB4ZjAsCisJMHgxNCwgMHgzMCwgMHgwMCwgMHgwMCwgMHhkNSwgMHg5MywgMHgyMCwgMHgwYSwgMHgwMiwgMHg2YywgMHgwMCwgMHgwMCwKKwkweGU2LCAweDkzLCAweDAzLCAweDFlLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweGQ0LCAweDkzLCAweGEyLCAweDQwLAorCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDQsIDB4OGYsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg4MCwgMHg0OSwgMHg4ZiwgMHhiMCwgMHgwMSwgMHgwMCwgMHhkYSwgMHg5MywgMHgyMiwgMHgwYSwKKwkweDAyLCAweDZjLCAweDAwLCAweDAwLCAweGRkLCAweDkzLCAweGEyLCAweDQxLCAweDE5LCAweDdjLCAweDAwLCAweDAwLAorCTB4ZDksIDB4OTMsIDB4YTIsIDB4NDAsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NTUsCisJMHg4ZiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg1NiwgMHg4ZiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweGRjLCAweDkzLCAweGEyLCAweDQwLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQzLAorCTB4OGYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDgsIDB4OGYsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYSwKKwkweDgyLCAweGQwLCAweDAxLCAweDAwLCAweGUzLCAweDkzLCAweDIwLCAweDkxLCAweDgzLCAweDZjLCAweDAwLCAweDAwLAorCTB4ZTIsIDB4OTMsIDB4YTIsIDB4NDAsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MjYsIDB4MDAsIDB4ODAsIDB4NDAsCisJMHg4ZiwgMHg5OCwgMHgwMSwgMHgwMCwgMHgyNywgMHgwMCwgMHg4MCwgMHg0MCwgMHg4ZiwgMHg5OCwgMHgwMSwgMHgwMCwKKwkweGU1LCAweDkzLCAweGEyLCAweDQwLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDFmLCAweDAwLCAweDgwLCAweDQwLAorCTB4OGYsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4ODAsIDB4NDAsIDB4OGYsIDB4OTgsIDB4MDEsIDB4MDAsCisJMHhlOCwgMHg5MywgMHhhMiwgMHg0MCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgyMiwgMHgwMCwgMHg4MCwgMHg0MCwKKwkweDhmLCAweDk4LCAweDAxLCAweDAwLCAweDIzLCAweDAwLCAweDgwLCAweDQwLCAweDhmLCAweDk4LCAweDAxLCAweDAwLAorCTB4ODgsIDB4MDAsIDB4MmQsIDB4NDQsIDB4OGYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ZjIsIDB4OTMsIDB4YTIsIDB4NDEsCisJMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHhlZiwgMHg5MywgMHhhMiwgMHg0MywgMHgzZCwgMHg3YywgMHgwMCwgMHgwMCwKKwkweGVmLCAweDkzLCAweGEyLCAweGYyLCAweDAyLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGEyLCAweDQwLAorCTB4ODAsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDksIDB4OGYsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHhmMSwgMHg5MywgMHhhMiwgMHg0MCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MywKKwkweDhmLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQ4LCAweDhmLCAweGIwLCAweDAxLCAweDAwLAorCTB4ZWYsIDB4OTMsIDB4YTAsIDB4OTEsIDB4MDMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4ZWQsIDB4OTMsIDB4MjIsIDB4NDMsCisJMHgzZCwgMHg3YywgMHgwMCwgMHgwMCwgMHhmNiwgMHg5MywgMHhhMiwgMHg0MCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDI4LCAweDAwLCAweDgwLCAweDQwLCAweDhmLCAweDk4LCAweDAxLCAweDAwLCAweDI5LCAweDAwLCAweDgwLCAweDQwLAorCTB4OGYsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MTQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHg5NCwgMHhhMiwgMHhmMCwgMHgxNCwgMHgzMCwgMHgwMCwgMHgwMCwgMHg4OCwgMHgwMCwgMHgyZCwgMHg0NCwKKwkweDhmLCAweGIwLCAweDAxLCAweDAwLCAweGZkLCAweDkzLCAweGEyLCAweGYyLCAweDAyLCAweDZjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4YTIsIDB4NDAsIDB4ODAsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDksCisJMHg4ZiwgMHhiMCwgMHgwMSwgMHgwMCwgMHhlZiwgMHg5MywgMHgyMiwgMHg0MSwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwKKwkweGVkLCAweDkzLCAweDIwLCAweDkxLCAweDAzLCAweDZjLCAweDAwLCAweDAwLCAweGVmLCAweDkzLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4OTQsIDB4MjAsIDB4MGEsIDB4MDIsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgwMywgMHg5NCwgMHhhMiwgMHg0MCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0NCwKKwkweDhmLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQ5LCAweDhmLCAweGIwLCAweDAxLCAweDAwLAorCTB4MDksIDB4OTQsIDB4MjIsIDB4MGEsIDB4MDIsIDB4NmMsIDB4MDAsIDB4MDAsIDB4ZGQsIDB4OTMsIDB4YTIsIDB4NDEsCisJMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHgwOCwgMHg5NCwgMHhhMiwgMHg0MCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDgwLCAweDU1LCAweDhmLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDU2LAorCTB4OGYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MGIsIDB4OTQsIDB4YTIsIDB4NDAsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg4MCwgMHg0MywgMHg4ZiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0OCwKKwkweDhmLCAweGIwLCAweDAxLCAweDAwLCAweDExLCAweDk0LCAweDAwLCAweDQzLCAweDk1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MTEsIDB4OTQsIDB4MDAsIDB4NDEsIDB4OTUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MTEsIDB4OTQsIDB4MDAsIDB4NDIsCisJMHg5NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgxMSwgMHg5NCwgMHgwMCwgMHg0NCwgMHg5NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDExLCAweDk0LCAweDAwLCAweDRjLCAweDk1LCAweGIwLCAweDAwLCAweDAwLCAweDMwLCAweDA0LCAweDAwLCAweDQwLAorCTB4ODksIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDIsIDB4OTksIDB4MDAsIDB4NGEsIDB4OGEsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHg1NSwgMHg5NywgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgxNiwgMHg5NCwgMHhhMiwgMHg0MCwKKwkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDRiLCAweDhmLCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4ODAsIDB4NGMsIDB4OGYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4MDUsCisJMHg0OCwgMHg2ZCwgMHgwMCwgMHgwMCwgMHgyZCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDJlLCAweDAwLCAweDJmLCAweGYzLCAweDg0LCAweGIwLCAweDAxLCAweDAwLCAweDFjLCAweDk0LCAweGEyLCAweGYzLAorCTB4OTYsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsIDB4MDEsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgyZCwgMHgwMCwgMHgyYSwgMHg0MSwgMHhlNywgMHhkMSwgMHgwMSwgMHgwMCwgMHhkNCwgMHgwMCwgMHgzZCwgMHg0MSwKKwkweDg1LCAweGUwLCAweDAxLCAweDAwLCAweDBiLCAweDAwLCAweDAwLCAweGYyLCAweDAwLCAweGU0LCAweDAxLCAweDAwLAorCTB4MjIsIDB4OTQsIDB4MjIsIDB4NWEsIDB4MDEsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHgxZiwgMHg5MCwgMHgwMSwgMHgwMCwgMHgyMywgMHg5NCwgMHgwMCwgMHg1YSwgMHgwMSwgMHg4MCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDFmLCAweDgwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDYzLCAweDQxLAorCTB4ODUsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MjYsIDB4OTQsIDB4YTAsIDB4YTUsIDB4ODUsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg2MywgMHg0MCwgMHg4NSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgxMiwgMHgwNCwgMHgwMCwgMHg0MCwKKwkweDg5LCAweDk4LCAweDAxLCAweDAwLCAweDAyLCAweDk5LCAweDAwLCAweDAwLCAweDhhLCAweDMwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTAsIDB4YTUsCisJMHg4NSwgMHg2YywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMywgMHg0MCwgMHg4NSwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDBjLCAweDgwLCAweDAwLCAweDAzLCAweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDEyLCAweDAwLCAweDAwLCAweDQwLAorCTB4ODcsIDB4OTgsIDB4MDEsIDB4MDAsIDB4NzgsIDB4OTgsIDB4MDAsIDB4ZjAsIDB4OGMsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgyMiwgMHg1ZiwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgzYiwgMHg5NCwgMHgyMiwgMHg0MCwKKwkweDBmLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDJmLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MjIsIDB4NWEsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4ZjAsCisJMHg5OCwgMHhmNCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHgwNywgMHg5OCwgMHg2YywgMHgwMCwgMHgwMCwKKwkweDEwLCAweDAwLCAweDAwLCAweDBjLCAweDk4LCAweGY0LCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDA3LAorCTB4OTgsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MzgsIDB4OTQsIDB4YTIsIDB4NGIsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsCisJMHgzOSwgMHg5NCwgMHgyMiwgMHhmMCwgMHgxOCwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2MCwgMHg0YiwKKwkweDE5LCAweDkwLCAweDAxLCAweDAwLCAweDNkLCAweDk1LCAweDAwLCAweDA3LCAweDEwLCAweDMwLCAweDAxLCAweDAwLAorCTB4MmYsIDB4ODMsIDB4MDAsIDB4NDAsIDB4MDUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4M2QsIDB4OTQsIDB4MjIsIDB4NWEsCisJMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHhhNSwgMHg5NCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwKKwkweDJmLCAweDgzLCAweDAwLCAweDQwLCAweDA1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweDVmLAorCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmYsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg2MCwgMHg0YiwgMHgxOSwgMHg5MCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHg1YSwKKwkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweDQwLCAweDBmLCAweDZjLCAweDAwLCAweDAwLAorCTB4MTAsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4OTYsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4MDcsCisJMHg5NiwgMHg2YywgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwYywgMHg5NiwgMHhmNCwgMHgwMSwgMHgwMCwKKwkweDA0LCAweDAwLCAweGEyLCAweDA3LCAweDk2LCAweDZjLCAweDAwLCAweDAwLCAweDNkLCAweDk1LCAweDAwLCAweDA3LAorCTB4MTAsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MmYsIDB4ODMsIDB4MDAsIDB4NDAsIDB4MDUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgyMiwgMHg1ZiwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZiwgMHgwNSwKKwkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDYwLCAweDRiLCAweDE5LCAweDkwLCAweDAxLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MjIsIDB4NWEsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjIsIDB4NDAsCisJMHgwZiwgMHg2YywgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHg5NiwgMHhmNCwgMHgwMSwgMHgwMCwKKwkweDA0LCAweDAwLCAweGEyLCAweDA3LCAweDk2LCAweDZjLCAweDAwLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDBjLAorCTB4OTYsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4MDcsIDB4OTYsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgzZCwgMHg5NSwgMHgwMCwgMHgwNywgMHgxMCwgMHgzMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwKKwkweDA1LCAweGIwLCAweDAxLCAweDAwLCAweDU0LCAweDk0LCAweDMzLCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4NTcsIDB4OTQsIDB4YTEsIDB4YWQsIDB4OTUsIDB4MjAsIDB4MDAsIDB4MDAsIDB4NjksIDB4OTQsIDB4MTMsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMywgMHg0YSwgMHg1YSwgMHg4MywgMHgwMSwgMHgwMCwKKwkweDMwLCAweDAwLCAweDM5LCAweDQ1LCAweDk1LCAweGUwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDVmLAorCTB4NWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4NWUsIDB4NWYsIDB4N2MsIDB4MDAsIDB4MDAsCisJMHgxZiwgMHgwMCwgMHgwMCwgMHgwZiwgMHg1ZSwgMHhkOCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1YSwKKwkweDVmLCAweDkwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVlLCAweDVmLCAweDkwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsCisJMHg0OCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHg0YSwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDBjLCAweDU4LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA3LAorCTB4NGUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MTksIDB4ODUsIDB4MDAsIDB4NDAsIDB4NWQsIDB4OTgsIDB4MDEsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHhhMiwgMHg0NCwgMHg1ZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1OCwKKwkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRhLCAweDYyLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4YTgsIDB4NDEsIDB4OTcsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NjYsIDB4OTQsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwgMHg5NywgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDA0LCAweDAwLCAweGEyLCAweDQwLCAweDA1LCAweDZjLCAweDAwLCAweDAwLCAweDE1LCAweDk5LCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4NmMsIDB4OTQsIDB4NjAsIDB4MDcsIDB4OTYsIDB4MzAsIDB4MDAsIDB4MDAsCisJMHhmZiwgMHhmZiwgMHgwMCwgMHg0YiwgMHg4NCwgMHg4OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3MCwgMHhjMiwKKwkweDI0LCAweGIwLCAweDAxLCAweDAwLCAweDc5LCAweDk0LCAweGEyLCAweDQ1LCAweDI1LCAweDdjLCAweDAwLCAweDAwLAorCTB4NzAsIDB4OTQsIDB4MzEsIDB4MjAsIDB4ODUsIDB4MzAsIDB4MDAsIDB4MDAsIDB4N2EsIDB4OTQsIDB4MjIsIDB4MTIsCisJMHg0OCwgMHg3ZiwgMHgwMCwgMHgwMCwgMHg1OCwgMHgwNCwgMHgxMSwgMHgxMiwgMHg0OCwgMHgwMywgMHgwMSwgMHgwMCwKKwkweDEwLCAweDAwLCAweDAwLCAweDEyLCAweDk2LCAweGU0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRiLAorCTB4MWUsIDB4OTQsIDB4MDEsIDB4MDAsIDB4MTcsIDB4MDQsIDB4MDAsIDB4NDAsIDB4ODksIDB4OTgsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHg4YSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMiwgMHg5OSwgMHgwMCwgMHg1ZiwKKwkweDhiLCAweDEwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDVhLCAweDFmLCAweDkwLCAweDAxLCAweDAwLAorCTB4NzksIDB4OTQsIDB4MzEsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjQsCisJMHgyNCwgMHhiMCwgMHgwMSwgMHgwMCwgMHg3YSwgMHg5NCwgMHgyMiwgMHgxMiwgMHg0OCwgMHg3ZiwgMHgwMCwgMHgwMCwKKwkweDU4LCAweDA0LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDE3LCAweDA0LCAweDAwLCAweDQwLAorCTB4ODksIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDIsIDB4OTksIDB4MDAsIDB4MTIsIDB4OGEsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgyZiwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg4OSwgMHg5NCwgMHgwYiwgMHhmMCwKKwkweDg0LCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDExLCAweDEyLCAweDQ4LCAweDgzLCAweDAxLCAweDAwLAorCTB4ODYsIDB4OTQsIDB4MjIsIDB4NTAsIDB4ODUsIDB4NzAsIDB4MDAsIDB4MDAsIDB4NWUsIDB4MDEsIDB4MDAsIDB4NDAsCisJMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHhhZSwgMHg5NiwgMHgwMCwgMHhmMiwgMHg5NiwgMHgzMCwgMHgwMSwgMHgwMCwKKwkweDkzLCAweDA0LCAweDAwLCAweDEyLCAweDk0LCAweDMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVhLAorCTB4MWYsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4OTYsIDB4ZTQsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg4MCwgMHg0YiwgMHgxZSwgMHg5NCwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHg0MiwKKwkweDEwLCAweGY0LCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweDA4LCAweDgwLCAweDMyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4YjcsIDB4M2YsIDB4NDMsIDB4MTEsIDB4ZjAsIDB4MDEsIDB4MDAsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDgsCisJMHg4YSwgMHg4OCwgMHgwMSwgMHgwMCwgMHg4ZCwgMHg5NCwgMHgzMCwgMHhhMSwgMHgwYywgMHgzMCwgMHgwMCwgMHgwMCwKKwkweDkwLCAweDk0LCAweDIyLCAweDQ1LCAweGU2LCAweDdkLCAweDAwLCAweDAwLCAweDdhLCAweDk0LCAweDEwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmEsIDB4NDUsIDB4ZTYsIDB4OTEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgxMCwgMHgxMiwgMHg0OCwgMHg4MywgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHgwNSwKKwkweDQ4LCAweDZkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDExLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4NjAsIDB4NGIsIDB4ODUsIDB4ODAsIDB4MDEsIDB4MDAsIDB4NWUsIDB4MDEsIDB4MDAsIDB4NDAsCisJMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHhhZSwgMHg5NiwgMHgwMCwgMHhmMiwgMHg5NiwgMHgzMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDgwLCAweDAwLCAweDEwLCAweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweGQ4LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MmUsIDB4MDAsIDB4MmQsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg5YywgMHg5NCwgMHgyMiwgMHg0MCwgMHhlNywgMHg2ZCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgwLCAweGM4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGYwLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDksIDB4MDAsIDB4MDAsIDB4MDgsIDB4ODYsIDB4ZTQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjgsIDB4YTcsCisJMHg4NywgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGIxLCAweDAxLCAweDAwLCAweGEwLCAweDk0LCAweGE4LCAweDA1LAorCTB4ZTAsIDB4MzEsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4OTYsIDB4ZTQsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgxNCwgMHgwMCwgMHg0YiwgMHg5NiwgMHhkYywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0YiwKKwkweDFlLCAweDk0LCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweDVhLCAweDFmLCAweDdjLCAweDAwLCAweDAwLAorCTB4MTAsIDB4MDAsIDB4MDAsIDB4MGYsIDB4ODQsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4MWYsIDB4MDAsIDB4MDAsIDB4NDIsCisJMHg4NCwgMHg4OCwgMHgwMSwgMHgwMCwgMHhhYSwgMHg5NCwgMHgyMiwgMHg0MCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweGFiLCAweDk0LCAweDAwLCAweDQyLCAweDY4LCAweGIxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLAorCTB4NmEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YWIsIDB4OTQsIDB4MzEsIDB4NWEsIDB4MWYsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHhhMiwgMHg0MiwgMHg0OCwgMHg3ZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5MSwgMHg0MiwKKwkweDQ4LCAweDkzLCAweDAxLCAweDAwLCAweGFlLCAweDk0LCAweDM1LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4NmQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjEsIDB4OTksIDB4MDEsIDB4MDAsIDB4YjQsIDB4OTQsIDB4MjgsIDB4YjEsCisJMHgyYywgMHgzMCwgMHgwMCwgMHgwMCwgMHhhZiwgMHg5NCwgMHgyMiwgMHg0ZCwgMHg3NSwgMHg3ZCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDJkLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDk1LCAweDQwLAorCTB4MTEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NmQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjEsIDB4OTksIDB4MDEsIDB4MDAsCisJMHhiNCwgMHg5NCwgMHhhOCwgMHhiMSwgMHgxMCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNiwKKwkweDgwLCAweGIyLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDI3LCAweDA4LCAweDgwLCAweDMyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4OTUsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4N2YsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwgMHhiZiwgMHg5NCwgMHgyOCwgMHhiMSwgMHgxMCwgMHgzMCwgMHgwMCwgMHgwMCwKKwkweGI5LCAweDk0LCAweDlmLCAweGJhLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDE1LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODksIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDIsIDB4OTksIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwgMHgxMSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHg1YywKKwkweDExLCAweDdjLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDVhLCAweDExLCAweDdjLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MjIsIDB4MDgsIDB4NDgsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MjQsCisJMHgxMSwgMHg4NCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHg1YywgMHgwMSwgMHg3YywgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweGEyLCAweDVhLCAweDAxLCAweDdjLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweDAwLAorCTB4NDgsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MWYsIDB4YmIsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1ZiwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwKKwkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGE4LCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4YzgsIDB4OTQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4YWMsIDB4OTQsIDB4MDAsIDB4NDAsCisJMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwgMHhjYywgMHg5NCwgMHgzMiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweGQ0LCAweDk0LCAweDIyLCAweGY4LCAweDk2LCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LAorCTB4OTAsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4OTIsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0OCwgMHg4MCwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyNywgMHg0OSwKKwkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweDRiLCAweGYwLCAweGNkLCAweDAxLCAweDAwLAorCTB4MjAsIDB4MDAsIDB4OTIsIDB4NDgsIDB4ZTAsIDB4YzksIDB4MDEsIDB4MDAsIDB4NmMsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwgMHhkOCwgMHg5NCwgMHgyOCwgMHhiMSwgMHg5MiwgMHgzMCwgMHgwMCwgMHgwMCwKKwkweGQ0LCAweDk0LCAweDIyLCAweDRjLCAweDc1LCAweDdkLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDEyLCAweDQwLAorCTB4OTEsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NmMsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjEsIDB4OTksIDB4MDEsIDB4MDAsCisJMHhkOCwgMHg5NCwgMHhhOCwgMHhiMSwgMHg5MCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0OSwKKwkweDgwLCAweGIyLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDI3LCAweDQ4LCAweDgwLCAweDMyLCAweDAwLCAweDAwLAorCTB4ZmYsIDB4MDAsIDB4MDAsIDB4NDgsIDB4OTYsIDB4ODgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGIsCisJMHg5MCwgMHhkMCwgMHgwMSwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg0YiwgMHhmMCwgMHhjZCwgMHgwMSwgMHgwMCwKKwkweDIwLCAweDAwLCAweDAwLCAweDQ4LCAweGYwLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDkyLCAweDQ5LAorCTB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MGMsIDB4MDAsIDB4MmQsIDB4MTAsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHhmZiwgMHgwNywgMHgwMCwgMHgwOCwgMHg4MiwgMHg4YywgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHg1YywKKwkweDgzLCAweDdjLCAweDAwLCAweDAwLCAweGZmLCAweDA3LCAweDAwLCAweGYwLCAweDAwLCAweDhjLCAweDAxLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4YTIsIDB4NWMsIDB4MDEsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjIsIDB4NDAsCisJMHgwMSwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMiwgMHg0MSwgMHgwMCwgMHhlYywgMHgwMCwgMHgwMCwKKwkweGVhLCAweDk0LCAweDIyLCAweDFhLCAweDAwLCAweDZjLCAweDAwLCAweDAwLCAweGMzLCAweDk0LCAweDAwLCAweDAwLAorCTB4MzQsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4NDksIDB4YzEsIDB4MDEsIDB4MDAsCisJMHhlNCwgMHg5NCwgMHhhMiwgMHg0MSwgMHgyMywgMHg1MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDBjLCAweDAwLCAweDJkLCAweDEwLCAweDQ4LCAweGIxLCAweDAxLCAweDAwLAorCTB4ZmYsIDB4MDcsIDB4MDAsIDB4MTUsIDB4ODIsIDB4OGMsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4NWMsCisJMHg4MywgMHg3YywgMHgwMCwgMHgwMCwgMHhmZiwgMHgwNywgMHgwMCwgMHhmMCwgMHgwMCwgMHg4YywgMHgwMSwgMHgwMCwKKwkweDA0LCAweDAwLCAweGEyLCAweDVjLCAweDAxLCAweDdjLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweDQwLAorCTB4MDEsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTIsIDB4NDEsIDB4MDAsIDB4ZWMsIDB4MDAsIDB4MDAsCisJMHhmNiwgMHg5NCwgMHgyMiwgMHgwZCwgMHgwMCwgMHg2YywgMHgwMCwgMHgwMCwgMHhjMywgMHg5NCwgMHgwMCwgMHgwMCwKKwkweDFhLCAweDMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLCAweDQ5LCAweGMxLCAweDAxLCAweDAwLAorCTB4ZjAsIDB4OTQsIDB4YTIsIDB4NDEsIDB4MjMsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHhmYiwgMHg5NCwgMHg4MywgMHgxZSwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDE5LCAweDkwLCAweDAxLCAweDAwLCAweDI0LCAweDAwLCAweDJkLCAweDAxLAorCTB4MmMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MjgsIDB4MDAsIDB4MmQsIDB4ZjAsIDB4MTYsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgyMiwgMHgwMCwgMHgyZCwgMHhmMCwgMHgyNiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgxNCwgMHgwMCwgMHgyZiwgMHhmMiwKKwkweDBjLCAweGIwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweGYwLCAweDE0LCAweDZjLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MjAsIDB4MDEsIDB4MTQsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsCisJMHhlMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgzMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg5NywgMHg5OCwgMHgwMSwgMHgwMCwKKwkweDYwLCAweDk3LCAweDJlLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDQsIDB4OTUsIDB4YTIsIDB4NDEsIDB4OTcsIDB4NTAsIDB4MDAsIDB4MDAsCisJMHg2NCwgMHg5NywgMHgzZSwgMHg0MywgMHg5ZCwgMHhlMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwKKwkweGUxLCAweGIxLCAweDAxLCAweDAwLCAweDY0LCAweDk3LCAweDNlLCAweDQzLCAweDlkLCAweGUwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4ODAsIDB4MGIsIDB4ZTgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NjQsIDB4OTcsIDB4M2YsIDB4NDMsCisJMHg5ZCwgMHhlMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHgxNiwgMHhjMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDgwLCAweDQwLCAweGUxLCAweGIxLCAweDAxLCAweDAwLCAweDY0LCAweDk3LCAweDNmLCAweDQzLAorCTB4OWQsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjQsIDB4MTYsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwgMHhlMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg2MCwgMHgxNywgMHgzZCwgMHg0MywKKwkweDlkLCAweGUwLCAweDAxLCAweDAwLCAweDEwLCAweDAwLCAweDgwLCAweGExLCAweDE2LCAweGU0LCAweDAxLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4YTIsIDB4MDcsIDB4MTYsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MWEsIDB4MDQsIDB4MDAsIDB4NDAsCisJMHg4OSwgMHg5OCwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwYiwgMHg4YSwgMHhlNCwgMHgwMSwgMHgwMCwKKwkweDAyLCAweDk5LCAweDAwLCAweDBkLCAweDhhLCAweDE0LCAweDAxLCAweDAwLCAweDAwLCAweGI1LCAweDAwLCAweDBkLAorCTB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4MTcsIDB4OTUsIDB4MzAsIDB4NDcsIDB4MTcsIDB4MDQsIDB4MDAsIDB4MDAsCisJMHgxYSwgMHg5NSwgMHhhMiwgMHgwYiwgMHhlNiwgMHg3ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5MCwgMHg0MiwKKwkweDgxLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweGI3LCAweDAwLCAweDBkLCAweDQ2LCAweGM5LCAweDAxLCAweDAwLAorCTB4MWUsIDB4OTUsIDB4YTIsIDB4MGIsIDB4ZTYsIDB4N2QsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGIsCisJMHhlNiwgMHg5MSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5MCwgMHg0MSwgMHg4MSwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDEwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDFmLCAweDk1LCAweDQwLCAweDA3LAorCTB4OTYsIDB4MzAsIDB4MDAsIDB4MDAsIDB4OWQsIDB4MDQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHgyOSwgMHg5NSwgMHhhMiwgMHg0NSwgMHg5NSwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMSwgMHg5NywgMHgzZiwgMHg0MSwKKwkweDk1LCAweGUwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYzLCAweDk2LCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGUsIDB4ZTYsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4OTcsIDB4M2UsIDB4NDAsCisJMHg5NywgMHhlMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZSwgMHhlNiwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDQwLCAweDk3LCAweDNlLCAweDQwLCAweDlkLCAweGUwLCAweDAxLCAweDAwLCAweDNjLCAweDk1LCAweDAwLCAweDNiLAorCTB4ZTcsIDB4YjEsIDB4MDAsIDB4MDAsIDB4MjksIDB4OTUsIDB4MzAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgzMywgMHg5NSwgMHhhMiwgMHgwYiwgMHhlNiwgMHg3ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiNSwgMHgwMCwgMHgwZCwKKwkweDQ2LCAweGM5LCAweDAxLCAweDAwLCAweDJmLCAweDk1LCAweGEyLCAweDBiLCAweGU2LCAweDdkLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MTAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OTgsIDB4NDIsCisJMHg4MSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHhiNywgMHgwMCwgMHgwZCwgMHg0NiwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDBiLCAweGU2LCAweDkxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OTgsIDB4NDEsIDB4ODEsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgyMSwgMHhhMiwgMHg5NSwgMHgyMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg0YSwKKwkweDQ0LCAweDgzLCAweDAxLCAweDAwLCAweDAwLCAweDk3LCAweDNlLCAweDQxLCAweDk1LCAweGUwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGUsIDB4ZjYsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGUsCisJMHhlNiwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHg5NywgMHgzZSwgMHg0MCwgMHg5ZCwgMHhlMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDNiLCAweGU3LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRhLAorCTB4OTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDcsIDB4OTIsIDB4ODksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg5OCwgMHg0MCwgMHg4MSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgxMSwgMHgwNCwgMHgwMCwgMHg0MCwKKwkweDg5LCAweDk4LCAweDAxLCAweDAwLCAweDAyLCAweDk5LCAweDAwLCAweDA4LCAweDhhLCAweDMwLCAweDAxLCAweDAwLAorCTB4MDMsIDB4MDAsIDB4MDAsIDB4MDgsIDB4ODYsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4YjcsIDB4MDAsIDB4NDMsCisJMHg0NiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwNywgMHgwMCwgMHgwMCwgMHgwOCwgMHg4MiwgMHg4OCwgMHgwMSwgMHgwMCwKKwkweDA0LCAweDAwLCAweDIyLCAweDA4LCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweDQxLAorCTB4ZTYsIDB4N2QsIDB4MDAsIDB4MDAsIDB4NDQsIDB4OTUsIDB4NDAsIDB4MDgsIDB4OTYsIDB4MzAsIDB4MDAsIDB4MDAsCisJMHg5ZCwgMHgwNCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHg1MiwgMHg5NSwgMHgyMiwgMHg0NSwKKwkweDk1LCAweDdjLCAweDAwLCAweDAwLCAweDRkLCAweDk1LCAweDIyLCAweDVhLCAweDFmLCAweDdjLCAweDAwLCAweDAwLAorCTB4MTAsIDB4MDAsIDB4MDAsIDB4MGYsIDB4OTYsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4NDksIDB4OTUsIDB4MzEsIDB4NWYsCisJMHg5NywgMHgwNCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHg0YiwgMHg0OCwgMHg3ZiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDExLCAweDRiLCAweDQ4LCAweDkzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRiLAorCTB4NmEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NGQsIDB4OTUsIDB4MzAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgyMiwgMHg0MSwgMHhlNiwgMHg3ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKKwkweGU2LCAweDgxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4OTgsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4OTcsIDB4M2YsIDB4NDEsCisJMHg5NSwgMHhlMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMywgMHg5NiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDQwLCAweDk3LCAweDNkLCAweDQwLCAweDk3LCAweGUwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDYzLCAweGYzLAorCTB4ODgsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NWIsIDB4OTUsIDB4YTIsIDB4M2IsIDB4ODksIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0YSwgMHg5MCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHhhNiwKKwkweDkyLCAweGIxLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDRhLCAweDQ0LCAweDdmLCAweDAwLCAweDAwLAorCTB4NWMsIDB4OTUsIDB4MTgsIDB4NGEsIDB4NDQsIDB4OTMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgzZiwgMHgwNCwgMHgwMCwgMHg0MCwgMHg4OSwgMHg5OCwgMHgwMSwgMHgwMCwKKwkweDE2LCAweDAwLCAweDAwLCAweDEyLCAweDhhLCAweGU0LCAweDAxLCAweDAwLCAweDAyLCAweDk5LCAweDAwLCAweDRiLAorCTB4OGEsIDB4MTQsIDB4MDEsIDB4MDAsIDB4MzAsIDB4MDAsIDB4MzksIDB4NDUsIDB4OTcsIDB4ZTAsIDB4MDEsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHhhMiwgMHg1ZiwgMHg1ZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHg1ZSwKKwkweDVmLCAweDdjLCAweDAwLCAweDAwLCAweDFmLCAweDA0LCAweDAwLCAweDJmLCAweDdlLCAweGQ5LCAweDAxLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4YTYsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4NjgsIDB4OTUsIDB4MjIsIDB4NWEsCisJMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgxZiwgMHgwNCwgMHgwMCwgMHgwZiwgMHg5OCwgMHhkOCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDRjLCAweDVlLCAweDk0LCAweDAxLCAweDAwLCAweDZhLCAweDk1LCAweDAwLCAweDA1LAorCTB4NGEsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MWYsIDB4MDQsIDB4MDAsIDB4YTcsIDB4NWUsIDB4ODQsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0YiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1ZSwKKwkweDVmLCAweDkwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDA4LCAweDRlLCAweDZjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTgsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGIsCisJMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDZkLCAweDk1LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDMzLCAweDA0LCAweDAwLCAweDQwLAorCTB4ODksIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDIsIDB4OTksIDB4MDAsIDB4MDcsIDB4OGEsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHg3MiwgMHg5NSwgMHg0MCwgMHgwNywgMHg5NiwgMHgzMCwgMHgwMCwgMHgwMCwgMHg5ZCwgMHgwNCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDc2LCAweDk1LCAweDIyLCAweDQ1LCAweDk1LCAweDdjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4OTgsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4NGEsCisJMHg0NCwgMHg3ZiwgMHgwMCwgMHgwMCwgMHg5YiwgMHgwNCwgMHgwMCwgMHg0YSwgMHg0NCwgMHgxMywgMHgwMSwgMHgwMCwKKwkweDAwLCAweDk3LCAweDNmLCAweDQxLCAweDk1LCAweGUwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYzLAorCTB4OTYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NDAsIDB4OTcsIDB4M2QsIDB4NDAsIDB4OTcsIDB4ZTAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg2MywgMHhmMywgMHg4OCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgzMCwgMHgwMCwgMHgzOCwgMHg0NSwKKwkweDk3LCAweGUwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDVmLCAweDFmLCAweDdjLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MjIsIDB4NWUsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjAsIDB4YWEsCisJMHgwZiwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1ZiwgMHgwZiwgMHg5MCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDU4LCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRiLAorCTB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ODIsIDB4OTUsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHg3OCwgMHg5NSwgMHhhMiwgMHgzYiwgMHg4OSwgMHg2YywgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMCwgMHgzOCwgMHg0NSwKKwkweDlkLCAweGUwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDk4LCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MjIsIDB4MDgsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDgsCisJMHg5NCwgMHhmNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHhiNywgMHgwMCwgMHg0YSwgMHg0NiwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDA3LCAweDAwLCAweDAwLCAweDA4LCAweDk2LCAweDg4LCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweDRiLAorCTB4ZTYsIDB4N2QsIDB4MDAsIDB4MDAsIDB4OTMsIDB4MDQsIDB4MDAsIDB4MTIsIDB4OTQsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHgzZCwgMHg5NSwgMHgwMCwgMHg1YSwgMHgxZiwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg1YSwKKwkweDFmLCAweDkwLCAweDAxLCAweDAwLCAweDExLCAweDAwLCAweDAwLCAweDRhLCAweGU2LCAweGM5LCAweDAxLCAweDAwLAorCTB4MzAsIDB4MDAsIDB4MDAsIDB4NGEsIDB4ODAsIDB4Y2UsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjQsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgzNCwgMHgwMCwgMHgyZiwgMHg0ZiwgMHg5NSwgMHg4NCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGYzLCAweDk2LCAweGIwLCAweDAxLCAweDAwLCAweDAxLCAweDAwLCAweDYzLCAweDRiLAorCTB4ODQsIDB4YzgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTAsIDB4NDMsIDB4ODUsIDB4NmMsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHhlMywgMHg0MCwgMHg4NSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgzMCwgMHgwMCwgMHgyZCwgMHg0NCwKKwkweDFmLCAweDkwLCAweDAxLCAweDAwLCAweDMyLCAweDAwLCAweDJkLCAweGYyLCAweDJhLCAweGIwLCAweDAxLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MjYsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjIsIDB4ZjIsCisJMHgwMiwgMHgzMCwgMHgwMCwgMHgwMCwgMHgxNywgMHg5NCwgMHgwMCwgMHgxMCwgMHgzMiwgMHgzMCwgMHgwMSwgMHgwMCwKKwkweDA0LCAweDAwLCAweDIyLCAweDAwLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweDQyLAorCTB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4MzIsIDB4MDAsIDB4YTAsIDB4NDAsIDB4ZTUsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg5NywgMHhiMCwgMHgwMSwgMHgwMCwgMHhmMCwgMHgwNywgMHgwMCwgMHg0MCwKKwkweDk5LCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRhLCAweDAyLCAweGMwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4MDMsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCisJMHg5NywgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMywgMHg0YywgMHgwMiwgMHhkMCwgMHgwMCwgMHgwMCwKKwkweGEzLCAweDk1LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE4LAorCTB4MzYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YjQsIDB4OTUsIDB4MjIsIDB4NDEsIDB4MDMsIDB4NTAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHgxMCwgMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwKKwkweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDcwLCAweDAwLCAweDAwLCAweDAzLCAweGYwLCAweGM5LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsCisJMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHhhYywgMHg5NSwgMHhhOCwgMHgwMCwgMHhlMCwgMHgzMSwgMHgwMCwgMHgwMCwKKwkweDIzLCAweDgzLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweGMzLCAweDk0LCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4N2MsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgyMiwgMHg0MCwgMHhlMSwgMHg2ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwKKwkweDAwLCAweGIwLCAweDAxLCAweDAwLCAweGE3LCAweDk1LCAweDAwLCAweDVjLCAweDAxLCAweDgwLCAweDAwLCAweDAwLAorCTB4YzMsIDB4OTQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWIsCisJMHgxMCwgMHhiMSwgMHgwMCwgMHgwMCwgMHg2OCwgMHgwMSwgMHgyZCwgMHgwNiwgMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGYyLCAweDgyLCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDAzLAorCTB4NDYsIDB4YzksIDB4MDEsIDB4MDAsIDB4YjksIDB4OTQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHhlMiwgMHg5NSwgMHgyMiwgMHg0MCwgMHgxMSwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2OCwgMHgwOCwKKwkweDM4LCAweDk2LCAweDAxLCAweDAwLCAweDNhLCAweDA0LCAweDAwLCAweDQwLCAweDg5LCAweDk4LCAweDAxLCAweDAwLAorCTB4MDIsIDB4OTksIDB4MDAsIDB4MDgsIDB4OGEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4ZjAsIDB4MDcsIDB4MDAsIDB4NDEsCisJMHg4MiwgMHhjYywgMHgwMSwgMHgwMCwgMHhiOSwgMHg5NSwgMHhhYSwgMHg0MSwgMHgzYiwgMHg0MCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDEwLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVjLAorCTB4MTEsIDB4ODAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTMsIDB4NDgsIDB4M2IsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgwMSwgMHgwMCwgMHgwMCwgMHgxZCwgMHgwNCwgMHhjYywgMHgwMSwgMHgwMCwgMHhlMCwgMHg5NSwgMHgyNiwgMHg0NiwKKwkweDIzLCAweDMwLCAweDAwLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDAzLCAweDEyLCAweGM4LCAweDAxLCAweDAwLAorCTB4MDQsIDB4ODAsIDB4MDAsIDB4MDMsIDB4OTgsIDB4YzgsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4NGMsCisJMHg0MiwgMHg2ZCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHgwNSwgMHg0OCwgMHg2ZCwgMHgwMCwgMHgwMCwKKwkweDY0LCAweDAxLCAweDIwLCAweGYwLCAweGUwLCAweGIxLCAweDAxLCAweDAwLCAweGRmLCAweDk1LCAweDIyLCAweDQxLAorCTB4MDUsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4NDgsIDB4YzksIDB4MDEsIDB4MDAsCisJMHgwYywgMHgwMCwgMHgwMCwgMHhmOCwgMHg4NiwgMHhjOCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyMiwgMHg0NCwKKwkweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQzLCAweGYwLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDksIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsCisJMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhhMCwgMHgwMCwgMHgwMCwgMHhhNCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKKwkweGQxLCAweDk1LCAweGE4LCAweDQ2LCAweDFmLCAweDEwLCAweDAwLCAweDAwLCAweGRlLCAweDk1LCAweDIyLCAweDQxLAorCTB4MDUsIDB4NTAsIDB4MDAsIDB4MDAsIDB4ZGMsIDB4OTUsIDB4YTIsIDB4NDEsIDB4MjMsIDB4NTAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhhMSwgMHgxYSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwKKwkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLAorCTB4ZDcsIDB4OTUsIDB4YTgsIDB4NDYsIDB4MjMsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MjMsIDB4ODMsIDB4MDAsIDB4ODgsCisJMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMywgMHg0OCwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDBkLCAweDQyLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LAorCTB4MTMsIDB4YzAsIDB4MDEsIDB4MDAsIDB4Y2MsIDB4OTUsIDB4MDAsIDB4NTAsIDB4NDksIDB4YzEsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwNCwgMHg4MCwgMHgwMCwgMHgwMywKKwkweDFhLCAweGM4LCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDA1LCAweDQ4LCAweDZkLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4ZTAsIDB4OTUsIDB4MjIsIDB4NDAsCisJMHgzYiwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgwMCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweGMzLCAweDk0LCAweDAwLCAweDVjLCAweDAxLCAweDAwLCAweDAxLCAweDAwLCAweGUyLCAweDk1LCAweDAwLCAweDQxLAorCTB4M2IsIDB4ZDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OGQsIDB4NDcsIDB4ODAsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHhiMCwgMHgwMCwgMHgyZiwgMHg1ZiwgMHgxMywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2MCwgMHhmMCwKKwkweDhjLCAweGMwLCAweDAxLCAweDAwLCAweDdjLCAweDAwLCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4YTMsIDB4ZjAsIDB4OGMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMywgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDk0LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LAorCTB4OGMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ZjEsIDB4OTUsIDB4OGMsIDB4ZjgsIDB4OGUsIDB4MzAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHgxOSwgMHg5MCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHhmOCwKKwkweDE0LCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDE2LCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MjYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MmUsIDB4ZjgsCisJMHgwYywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwYywgMHgwMCwgMHgyYSwgMHg0YSwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDI4LCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweGM5LCAweDAxLCAweDAwLCAweDEwLCAweDAwLCAweDIwLCAweDFiLAorCTB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZmUsIDB4OTUsIDB4MjAsIDB4MGEsIDB4MGMsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg5NCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwKKwkweDk2LCAweGIwLCAweDAxLCAweDAwLCAweDIwLCAweDAwLCAweDIwLCAweGYwLCAweGU0LCAweGIxLCAweDAxLCAweDAwLAorCTB4MTgsIDB4MDAsIDB4MjAsIDB4NGEsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MWMsIDB4MDAsIDB4MjAsIDB4NGIsCisJMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhlNiwgMHg5NSwgMHgwMCwgMHg0MCwgMHgxMywgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweGEyLCAweDA1LCAweDQ4LCAweDZkLCAweDAwLCAweDAwLCAweDJjLCAweDAwLCAweDJkLCAweDQyLAorCTB4MTksIDB4OTAsIDB4MDEsIDB4MDAsIDB4MmUsIDB4MDAsIDB4MmYsIDB4ZjMsIDB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmMywgMHg5NiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwNSwgMHg5NiwgMHhhMiwgMHhhNSwKKwkweDk3LCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQxLCAweDk1LCAweGIwLCAweDAxLCAweDAwLAorCTB4MDgsIDB4OTYsIDB4YTIsIDB4NDAsIDB4OTcsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MywgMHhiMCwgMHgwMSwgMHgwMCwgMHgyZCwgMHgwMCwgMHgyMCwgMHg0MCwgMHhlNywgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDYzLCAweDQxLCAweDk3LCAweGMwLCAweDAxLCAweDAwLCAweGQ0LCAweDAwLCAweDNlLCAweDQxLAorCTB4ODMsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ODMsIDB4YzAsIDB4MDEsIDB4MDAsCisJMHgwZCwgMHg5NiwgMHhhMCwgMHhhNSwgMHg4MywgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgzLCAweGIwLCAweDAxLCAweDAwLCAweDJjLCAweDAwLCAweDIwLCAweDQxLCAweGU2LCAweGIxLCAweDAxLCAweDAwLAorCTB4MTIsIDB4OTYsIDB4MjIsIDB4NDAsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsCisJMHg5OCwgMHhkYywgMHgwMSwgMHgwMCwgMHgwYiwgMHgwMCwgMHgwMCwgMHg0YywgMHhlNCwgMHhmNSwgMHgwMSwgMHgwMCwKKwkweDEzLCAweDk2LCAweDAwLCAweDQwLCAweDFmLCAweDgwLCAweDAwLCAweDAwLCAweDBiLCAweDAwLCAweDAwLCAweDAwLAorCTB4ZTQsIDB4ZjUsIDB4MDEsIDB4MDAsIDB4MWUsIDB4MDQsIDB4MDAsIDB4NDAsIDB4ODksIDB4OTgsIDB4MDEsIDB4MDAsCisJMHgwMiwgMHg5OSwgMHgwMCwgMHgwMCwgMHg4YSwgMHgzMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweGNiLCAweDk0LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjIsIDB4NDAsCisJMHhlMSwgMHg2ZCwgMHgwMCwgMHgwMCwgMHgwNCwgMHg4MCwgMHgwMCwgMHgwMywgMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjAsIDB4NDEsIDB4ODcsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHgxMCwgMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwKKwkweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ4LCAweGYwLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDksIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsCisJMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDIwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGE4LCAweDVkLAorCTB4MDUsIDB4OTAsIDB4MDAsIDB4MDAsIDB4MjMsIDB4OTYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHhjYiwgMHg5NCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMywKKwkweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweGYwLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MjYsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsCisJMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQzLCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDEwLAorCTB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0OCwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0OSwKKwkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweGUwLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4MTAsCisJMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOCwgMHg1ZCwgMHgwNSwgMHg5MCwgMHgwMCwgMHgwMCwKKwkweDMzLCAweDk2LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDA1LAorCTB4NDgsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4ODIsIDB4MGMsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgyZCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHgyZSwgMHgwMCwgMHgyZiwgMHhmMywKKwkweDg0LCAweGIwLCAweDAxLCAweDAwLCAweDAxLCAweDAwLCAweDYzLCAweGYzLCAweDk2LCAweGM4LCAweDAxLCAweDAwLAorCTB4M2QsIDB4OTYsIDB4OWYsIDB4NDEsIDB4ODUsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4YTUsCisJMHg4NSwgMHhjYywgMHgwMSwgMHgwMCwgMHgyZCwgMHgwMCwgMHgyMCwgMHg0MiwgMHhlNiwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDA0LCAweDAwLCAweGEzLCAweGE1LCAweDk3LCAweDZjLCAweDAwLCAweDAwLCAweGQ0LCAweDAwLCAweDNkLCAweDQxLAorCTB4ODUsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4MGIsIDB4MDAsIDB4MDAsIDB4ZjIsIDB4OTgsIDB4ZTQsIDB4MDEsIDB4MDAsCisJMHg0NCwgMHg5NiwgMHgyMiwgMHg0MCwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHg1YSwKKwkweDk5LCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVhLCAweDk5LCAweDgwLCAweDAxLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4YTIsIDB4MDAsIDB4OTgsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MjAsIDB4MDQsIDB4MDAsIDB4NDAsCisJMHg4OSwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMiwgMHg5OSwgMHgwMCwgMHgwMCwgMHg4YSwgMHgzMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDgwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDIxLCAweDA0LCAweDAwLCAweDQwLAorCTB4ODksIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDIsIDB4OTksIDB4MDAsIDB4MDAsIDB4OGEsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHhhMiwgMHgwMCwgMHg2YSwgMHgwNiwgMHgwMCwgMHgwMCwgMHg1ZSwgMHgwMSwgMHgyZCwgMHgwMCwKKwkweDgwLCAweGIwLCAweDAxLCAweDAwLCAweDRmLCAweDk2LCAweDUyLCAweDQzLCAweDgxLCAweDYwLCAweDAwLCAweDAwLAorCTB4MDIsIDB4MDAsIDB4MDAsIDB4ZjIsIDB4ODIsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4NTAsIDB4OTYsIDB4MDAsIDB4NDEsCisJMHg4MCwgMHg5NCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1ZiwgMHg4MSwgMHg5MCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDVlLCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTgsIDB4NDAsIDB4OTUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHg1MSwgMHg5NiwgMHg5ZSwgMHhiYiwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHg1NiwgMHg5NiwgMHhhMiwgMHg0MCwKKwkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweGMzLCAweDk0LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4ODAsIDB4NDEsIDB4OTUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MTUsCisJMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1NCwgMHgyYiwgMHhjMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGZjLCAweDI0LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZjLAorCTB4MzgsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmUsIDB4M2MsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmZSwgMHgzYSwgMHhiMCwgMHgwMSwgMHgwMCwgMHg2YiwgMHg5NiwgMHg5YywgMHgxNywKKwkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDYwLCAweDk2LCAweGEyLCAweDRhLCAweDE5LCAweDdjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4ODAsIDB4NGMsIDB4MWYsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MGMsIDB4MDAsIDB4MDAsIDB4MWUsCisJMHg5OCwgMHhmNCwgMHgwMSwgMHgwMCwgMHg1ZiwgMHg5NiwgMHhhMiwgMHg0OCwgMHg5OSwgMHg2YywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDE1LCAweDQyLCAweGIxLCAweDAxLCAweDAwLCAweDVmLCAweDk2LCAweGEyLCAweDhhLAorCTB4ZjEsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MGMsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDIsIDB4Y2MsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmYywgMHgzZSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHhmNCwKKwkweDI4LCAweGNjLCAweDAxLCAweDAwLCAweGNjLCAweDAwLCAweDJkLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLAorCTB4NmEsIDB4OTYsIDB4MjAsIDB4ZjAsIDB4M2UsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGIsCisJMHgxZiwgMHg5MCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YywgMHgyYiwgMHhjMCwgMHgwMSwgMHgwMCwKKwkweGJmLCAweDAwLCAweDJkLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweGYzLAorCTB4M2EsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4MDUsIDB4NDgsIDB4NmQsIDB4MDAsIDB4MDAsCisJMHgxMCwgMHgwMCwgMHgwMCwgMHgwYywgMHg5NiwgMHhmNCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHgwNywKKwkweDk2LCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDJlLCAweDRiLCAweDE5LCAweDkwLCAweDAxLCAweDAwLAorCTB4MDcsIDB4MDAsIDB4MmEsIDB4MGMsIDB4ZTQsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDQsCisJMHhlNiwgMHhiMSwgMHgwMSwgMHgwMCwgMHgxOCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDFjLCAweDAwLCAweDJkLCAweGYwLCAweDE2LCAweGIwLCAweDAxLCAweDAwLCAweDIwLCAweDAwLCAweDJkLCAweGYwLAorCTB4MjYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MGMsIDB4MDAsIDB4MmYsIDB4ZjIsIDB4MGMsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHhhMiwgMHgwNiwgMHgxNCwgMHhlYywgMHgwMCwgMHgwMCwgMHg3YSwgMHg5NiwgMHgyMiwgMHg0NSwKKwkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGEzLCAweDA2LCAweDJhLCAweGVjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4OTQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsCisJMHg5NiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwYywgMHgwMCwgMHgyZCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDJhLCAweDRjLCAweGUxLCAweGMxLCAweDAxLCAweDAwLCAweDMwLCAweDAwLCAweDAwLCAweDEwLAorCTB4NDgsIDB4YzksIDB4MDEsIDB4MDAsIDB4MGEsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjEsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgxOCwgMHgwMCwgMHgwMCwgMHgwNSwgMHhmMCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YSwKKwkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRiLCAweGUwLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YTAsIDB4MDAsIDB4MDAsIDB4YTQsCisJMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHg4NCwgMHg5NiwgMHhhOCwgMHg1YywgMHgxZiwgMHgxMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDgwLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDk1LAorCTB4MDMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmUsIDB4MTAsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg0MCwgMHgwMCwgMHgwMCwgMHgwMSwgMHhmMCwgMHhjZCwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMywKKwkweGYwLCAweGM5LCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweGM5LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MmUsIDB4NTAsIDB4NDksIDB4YzEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDYsCisJMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDhmLCAweDk2LCAweDYyLCAweDQyLCAweDYxLCAweDMxLCAweDAwLCAweDAwLCAweDIwLCAweDAwLCAweDAwLCAweDEwLAorCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4OTAsIDB4OTYsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgxMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHg5MiwgMHg5NiwgMHhhOCwgMHgwMCwKKwkweGUwLCAweDMxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYyLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4YTIsIDB4OTUsIDB4MDMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmUsIDB4MTAsCisJMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMSwgMHhmMCwgMHhjZCwgMHgwMSwgMHgwMCwKKwkweDQwLCAweDAwLCAweDAwLCAweDAzLCAweGYwLCAweGM5LCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDAwLAorCTB4ZTAsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmUsIDB4NTAsIDB4NDksIDB4YzEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwNiwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywKKwkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDlkLCAweDk2LCAweDYyLCAweDQyLCAweDYxLCAweDMxLCAweDAwLCAweDAwLAorCTB4MjAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4OWUsIDB4OTYsIDB4YTgsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhhMCwgMHgwMCwgMHgwMCwgMHhhNCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKKwkweGEwLCAweDk2LCAweGE4LCAweDAwLCAweGUwLCAweDMxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYyLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MzAsIDB4ODAsIDB4MDAsIDB4NGEsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwNiwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhjMCwgMHhhOCwgMHgzZCwgMHg0NiwKKwkweDBkLCAweGUwLCAweDAxLCAweDAwLCAweGZmLCAweDdmLCAweDAwLCAweGExLCAweGYwLCAweDg5LCAweDAxLCAweDAwLAorCTB4MDIsIDB4MDAsIDB4MDAsIDB4MDksIDB4OTYsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsCisJMHg5NywgMHhlMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2MCwgMHhhOCwgMHg5NywgMHhjMCwgMHgwMSwgMHgwMCwKKwkweGFhLCAweDk2LCAweDYzLCAweDQyLCAweDYxLCAweDMxLCAweDAwLCAweDAwLCAweDMwLCAweDAwLCAweDAwLCAweDRhLAorCTB4NjIsIDB4YzksIDB4MDEsIDB4MDAsIDB4YWIsIDB4OTYsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHhmMywgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHg5OSwgMHgzZiwgMHg0MiwKKwkweDk3LCAweGYwLCAweDAxLCAweDAwLCAweGFmLCAweDk2LCAweDY1LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4YjcsIDB4OTYsIDB4MjIsIDB4ZjMsIDB4NzQsIDB4MDYsIDB4MDAsIDB4MDAsIDB4M2YsIDB4MDAsIDB4MDAsIDB4ZjMsCisJMHg5NCwgMHg4OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNywgMHhlNywgMHg4NSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDc1LCAweDU1LCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRhLAorCTB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTgsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHhiNCwgMHg5NiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmNSwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE4LCAweDM2LCAweGIwLCAweDAxLCAweDAwLAorCTB4YzcsIDB4OTYsIDB4ODIsIDB4NDEsIDB4MjMsIDB4NDAsIDB4MDAsIDB4MDAsIDB4YmMsIDB4OTYsIDB4YTIsIDB4NDQsCisJMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHg5OCwgMHg5MywgMHgwMCwgMHgwMSwgMHg4YywgMHgzMCwgMHgwMSwgMHgwMCwKKwkweDIwLCAweDgwLCAweDAwLCAweDEwLCAweDQyLCAweGM5LCAweDAxLCAweDAwLCAweGMyLCAweDk2LCAweDIyLCAweDQwLAorCTB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHhiZiwgMHg5NiwgMHhhOCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDIzLCAweDgzLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MjMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsCisJMHgzMiwgMHhiMCwgMHgwMSwgMHgwMCwgMHhjNywgMHg5NiwgMHgyMiwgMHg0MSwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwKKwkweGUxLCAweDk0LCAweDAwLCAweDQzLCAweDIzLCAweDMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAorCTB4MjMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YzksIDB4OTYsIDB4YTMsIDB4MTUsIDB4MGMsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHhjYSwgMHg5NiwgMHgwMCwgMHgwNiwgMHgwNCwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwKKwkweDA0LCAweGIwLCAweDAxLCAweDAwLCAweGNjLCAweDk2LCAweDIwLCAweDAyLCAweDFhLCAweDZjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MGQsIDB4MDQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4OWIsIDB4OTcsIDB4MDAsIDB4MDUsCisJMHg0OCwgMHgzMSwgMHgwMSwgMHgwMCwgMHhmNywgMHg5NiwgMHgyMiwgMHgwMiwgMHgxNCwgMHg1MCwgMHgwMCwgMHgwMCwKKwkweGQwLCAweDk2LCAweGEyLCAweDAyLCAweDJhLCAweDUwLCAweDAwLCAweDAwLCAweGY3LCAweDk2LCAweGEyLCAweDQ1LAorCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4ZDIsIDB4OTYsIDB4MjIsIDB4MDIsIDB4MGMsIDB4NTAsIDB4MDAsIDB4MDAsCisJMHhkYiwgMHg5NiwgMHgwMCwgMHgwMiwgMHgxNiwgMHhjMCwgMHgwMCwgMHgwMCwgMHhkYSwgMHg5NiwgMHgyMiwgMHg1YywKKwkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDMwLCAweDgwLCAweDAwLCAweDEwLCAweDQyLCAweGM5LCAweDAxLCAweDAwLAorCTB4ZGEsIDB4OTYsIDB4MjIsIDB4NDAsIDB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsCisJMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKKwkweGQ2LCAweDk2LCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDIzLCAweDgzLCAweDAwLCAweDg4LAorCTB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg3MywgMHg5NiwgMHgwMCwgMHg1YywgMHgxZiwgMHgwMCwgMHgwMSwgMHgwMCwgMHhmNywgMHg5NiwgMHgyMiwgMHgxNSwKKwkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLCAweDMzLCAweGMwLCAweDAxLCAweDAwLAorCTB4ZjYsIDB4OTYsIDB4YTIsIDB4MDIsIDB4MWEsIDB4NTAsIDB4MDAsIDB4MDAsIDB4ZTcsIDB4OTYsIDB4MjIsIDB4NDYsCisJMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHg3MCwgMHg4MCwgMHgwMCwgMHgwMywgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ2LCAweDFmLCAweDgwLCAweDAxLCAweDAwLCAweGU3LCAweDk2LCAweDIyLCAweDQwLAorCTB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHhlMywgMHg5NiwgMHhhOCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDIzLCAweDgzLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MGMsIDB4ODAsIDB4MDAsIDB4MDMsCisJMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHhmMCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDEwLCAweDAwLCAweDAwLCAweGYwLCAweDEwLCAweGM4LCAweDAxLCAweDAwLCAweDJmLCAweDAwLCAweDJmLCAweDVjLAorCTB4MTEsIDB4ODAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsIDB4ZTcsIDB4OTEsIDB4MDEsIDB4MDAsCisJMHhmMCwgMHgwNywgMHgwMCwgMHg0MCwgMHgxYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHhiOSwgMHg5NiwgMHgyMCwgMHgxNSwKKwkweDFhLCAweDZjLCAweDAwLCAweDAwLCAweDcwLCAweDAwLCAweDAwLCAweDAzLCAweDQ4LCAweGM5LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MjIsIDB4NTAsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsCisJMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhmZiwgMHgwNywgMHgwMCwgMHgwOCwgMHhlMCwgMHg4ZCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQyLCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweGEwLCAweDAwLCAweDAwLCAweGE0LAorCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4ZjMsIDB4OTYsIDB4YTgsIDB4NDYsIDB4MWYsIDB4MTAsIDB4MDAsIDB4MDAsCisJMHhiOSwgMHg5NiwgMHgwMCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMCwgMHgwMCwgMHhiOSwgMHg5NiwgMHgwMCwgMHgwMiwKKwkweDEwLCAweGMwLCAweDAwLCAweDAwLCAweGY5LCAweDk2LCAweGEyLCAweDQ0LCAweDFmLCAweDdjLCAweDAwLCAweDAwLAorCTB4OTgsIDB4OTMsIDB4MDAsIDB4MDEsIDB4OGMsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWIsCisJMHgxMCwgMHhiMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgxMCwgMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDEwLCAweDAwLCAweDAwLCAweDQwLCAweGYxLCAweDk5LCAweDAxLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDA4LAorCTB4ZjAsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTYsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgxMCwgMHgwMCwgMHgwMCwgMHgwMywgMHhlMCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHg1YywKKwkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweDYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4MjAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTgsIDB4NWMsCisJMHgxZiwgMHg5MCwgMHgwMCwgMHgwMCwgMHgwMSwgMHg5NywgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDE3LCAweDAwLCAweDAwLCAweGQwLCAweGEyLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGEyLCAweDQwLAorCTB4MjcsIDB4ZWMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4MDAsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHhjMywgMHg5NCwgMHgwMCwgMHg0MSwgMHhhMywgMHg0MSwgMHgwMSwgMHgwMCwgMHgwNSwgMHg5NywgMHgwMCwgMHg0MSwKKwkweDI3LCAweGQwLCAweDAwLCAweDAwLCAweDM2LCAweDA0LCAweDAwLCAweDQwLCAweDg5LCAweDk4LCAweDAxLCAweDAwLAorCTB4MDIsIDB4OTksIDB4MDAsIDB4NDAsIDB4OGEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDcsCisJMHg5NiwgMHhlNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YiwgMHg4MCwgMHg5NCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDU0LCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDQwLAorCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTgsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgxNCwgMHhiYiwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwZSwgMHg5NywgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDA1LCAweDQ4LCAweDZkLCAweDAwLCAweDAwLAorCTB4NjQsIDB4OTcsIDB4MDAsIDB4NDAsIDB4MmIsIDB4MzAsIDB4MDEsIDB4MDAsIDB4YWMsIDB4MDAsIDB4MmQsIDB4MDYsCisJMHgxNiwgMHhjMCwgMHgwMSwgMHgwMCwgMHg5MCwgMHgwMCwgMHgyZCwgMHhmMCwgMHgxNiwgMHhjNCwgMHgwMSwgMHgwMCwKKwkweDE4LCAweDk3LCAweGEwLCAweGYwLCAweDE2LCAweDQ0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAorCTB4MTcsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MGUsIDB4MDAsIDB4MDAsIDB4YTIsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg2YywgMHhmMCwgMHgzMCwgMHhiMCwgMHgwMSwgMHgwMCwgMHhhYywgMHgwMCwgMHgyZCwgMHg0MCwKKwkweDg3LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDZjLCAweGYwLCAweDI4LCAweGIwLCAweDAxLCAweDAwLAorCTB4MjEsIDB4OTcsIDB4MjIsIDB4NGEsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzAsIDB4MDAsIDB4NDMsCisJMHg4NiwgMHhjOCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMCwgMHgwYiwgMHgxNiwgMHhjOCwgMHgwMSwgMHgwMCwKKwkweDIxLCAweDk3LCAweGE0LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAorCTB4MTcsIDB4YzAsIDB4MDEsIDB4MDAsIDB4NDQsIDB4OTcsIDB4MjIsIDB4MDYsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgyZiwgMHg5NywgMHhhMiwgMHgwNiwgMHgxNCwgMHg2YywgMHgwMCwgMHgwMCwgMHgyYywgMHg5NywgMHgyMiwgMHg0OCwKKwkweDE5LCAweDdjLCAweDAwLCAweDAwLCAweDI2LCAweDk3LCAweGEwLCAweDQxLCAweDE3LCAweDQwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MTcsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCisJMHgzMSwgMHhjMCwgMHgwMSwgMHgwMCwgMHg5MCwgMHgwMCwgMHgyMCwgMHgxOCwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDhiLCAweDAwLCAweDJkLCAweDQ4LCAweDE5LCAweDgwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDQ1LAorCTB4ZTcsIDB4N2QsIDB4MDAsIDB4MDAsIDB4OGIsIDB4MDAsIDB4MjAsIDB4NDUsIDB4ZTcsIDB4OTEsIDB4MDEsIDB4MDAsCisJMHgyZiwgMHg5NywgMHgwMCwgMHg0MCwgMHg4NywgMHg5MCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHg0MywKKwkweDg2LCAweDk4LCAweDAxLCAweDAwLCAweDJmLCAweDk3LCAweGEwLCAweDQ4LCAweDE3LCAweDQwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MTcsIDB4YzAsIDB4MDEsIDB4MDAsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHgxMCwgMHg1MCwgMHgwMCwgMHg0MywgMHhmYywgMHhjOSwgMHgwMSwgMHgwMCwKKwkweGE4LCAweDk3LCAweDAwLCAweDMwLCAweDgxLCAweDMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4ZTUsIDB4YjEsIDB4MDEsIDB4MDAsIDB4M2EsIDB4OTcsIDB4MjIsIDB4NGEsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsCisJMHgwOCwgMHgwMCwgMHgwMCwgMHhhMiwgMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHhjYywgMHgwMCwgMHgyZCwgMHhhYiwKKwkweGY5LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGFiLCAweDE3LCAweGMwLCAweDAxLCAweDAwLAorCTB4MzksIDB4OTcsIDB4YTAsIDB4ZjAsIDB4MTYsIDB4NDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCisJMHgxNywgMHhjMCwgMHgwMSwgMHgwMCwgMHgzZSwgMHg5NywgMHg2NCwgMHhmMCwgMHg4MiwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweGE0LCAweDAwLCAweDAwLCAweDQwLCAweDQ3LCAweDk5LCAweDAxLCAweDAwLCAweDNlLCAweDk3LCAweGEyLCAweGYyLAorCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ZTUsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg4YywgMHgwMCwgMHgyMCwgMHgxOCwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg5MCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDQ1LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDYwLCAweDA2LCAweDMwLCAweGMwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4ODYsIDB4MGMsIDB4ODAsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4NDksCisJMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHhiYywgMHgwMCwgMHgyZCwgMHg0NiwgMHgxOSwgMHg5MCwgMHgwMSwgMHgwMCwKKwkweGEwLCAweDAwLCAweGEwLCAweGYyLCAweGU0LCAweGIxLCAweDAxLCAweDAwLCAweGIwLCAweDAwLCAweDAwLCAweDQwLAorCTB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4MTAsIDB4NTAsIDB4MDAsIDB4NDMsIDB4ZmMsIDB4YzksIDB4MDEsIDB4MDAsCisJMHhhOCwgMHg5NywgMHgwMCwgMHgzMCwgMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMiwgMHg0YSwKKwkweDE5LCAweGZjLCAweDAwLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweGEyLCAweDQ0LCAweGM5LCAweDAxLCAweDAwLAorCTB4Y2MsIDB4MDAsIDB4MmQsIDB4YWIsIDB4ZjksIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YWIsCisJMHgxNywgMHhjMCwgMHgwMSwgMHgwMCwgMHg0ZCwgMHg5NywgMHhhMCwgMHhmMCwgMHgxNiwgMHg0NCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDE3LCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGU0LCAweGYwLAorCTB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MTAsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywKKwkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTgsIDB4MWIsCisJMHhlMCwgMHhiMSwgMHgwMCwgMHgwMCwgMHg1MiwgMHg5NywgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweGYwLCAweDAwLCAweDBjLCAweDdlLCAweDg5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGE2LCAweDRjLAorCTB4OTUsIDB4NjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NGEsIDB4MTgsIDB4OTQsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHgxMCwgMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHgwMSwKKwkweGYwLCAweDMxLCAweDAwLCAweDAwLCAweDIwLCAweDAwLCAweDAwLCAweDQwLCAweGYwLCAweGM5LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MTYsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsCisJMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweGE4LCAweDE1LCAweGUwLCAweGIxLCAweDAwLCAweDAwLCAweDVkLCAweDk3LCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MTAsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwNiwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwKKwkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGU4LCAweDVmLCAweDE3LCAweDkwLCAweDAxLCAweDAwLAorCTB4NzAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4N2EsIDB4MDEsIDB4MmUsIDB4ZmUsCisJMHg5MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHg4YiwgMHgwMCwgMHgyZCwgMHhmNiwgMHgxNiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDZhLCAweDk3LCAweDIyLCAweDQzLCAweGU3LCAweDdkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LAorCTB4NDUsIDB4YzEsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4YTYsIDB4MmEsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgyOCwgMHgwMCwgMHg2ZSwgMHgwNiwgMHg4MiwgMHhjOCwgMHgwMSwgMHgwMCwgMHg2ZSwgMHg5NywgMHgyMiwgMHg0YSwKKwkweDE5LCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLCAweDQ1LCAweGQxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4NmUsIDB4NGMsIDB4ODMsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCisJMHg5MiwgMHhjMCwgMHgwMSwgMHgwMCwgMHg2ZiwgMHg5NywgMHg0MywgMHgzMCwgMHgzZCwgMHgwNywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDY2LCAweDllLCAweDgzLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDFiLCAweDQxLAorCTB4M2QsIDB4YzMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4OTIsIDB4YzAsIDB4MDEsIDB4MDAsCisJMHgwNiwgMHgwMCwgMHgwMCwgMHhhMiwgMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHg0OSwKKwkweDk4LCAweGY0LCAweDAxLCAweDAwLCAweDc4LCAweDk3LCAweDI2LCAweDMwLCAweDkzLCAweDA0LCAweDAwLCAweDAwLAorCTB4NzgsIDB4OTcsIDB4OTAsIDB4NGMsIDB4OTIsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCisJMHg5MywgMHhjMCwgMHgwMSwgMHgwMCwgMHhmZiwgMHhmZiwgMHg4MCwgMHg0OSwgMHhlYywgMHhhOSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDgwLCAweDAwLCAweDEwLCAweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweDAxLAorCTB4ZjAsIDB4MzEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDksIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHgxMCwKKwkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGE4LCAweDE1LCAweGUwLCAweGIxLCAweDAwLCAweDAwLAorCTB4N2QsIDB4OTcsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjIsIDB4MjAsCisJMHg4MSwgMHg2YywgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHg0MCwgMHg4MSwgMHg2YywgMHgwMCwgMHgwMCwKKwkweDhmLCAweDk3LCAweDIyLCAweDVmLCAweDgxLCAweDdjLCAweDAwLCAweDAwLCAweDhjLCAweDk3LCAweGEyLCAweDQwLAorCTB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MTksIDB4OTAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1NCwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwNywKKwkweDk2LCAweGU0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRmLCAweDk3LCAweDk0LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGIsIDB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4OGMsIDB4OTcsIDB4MjgsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHg1NCwgMHg3NywgMHg3ZCwgMHgwMCwgMHgwMCwKKwkweDg4LCAweDk3LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDI1LCAweDA0LCAweDAwLCAweDQwLAorCTB4ODksIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDIsIDB4OTksIDB4MDAsIDB4NDAsIDB4OGEsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHhhMiwgMHgyMSwgMHg4MSwgMHg4NCwgMHgwMCwgMHgwMCwgMHg5MiwgMHg5NywgMHhhMiwgMHg1ZiwKKwkweDgxLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGEyLCAweDQzLCAweDE5LCAweDdjLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4MTksIDB4OTAsIDB4MDEsIDB4MDAsIDB4MjUsIDB4MDQsIDB4MDAsIDB4NDAsCisJMHg4OSwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMiwgMHg5OSwgMHgwMCwgMHg0MCwgMHg4YSwgMHgzMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDU0LCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDA3LAorCTB4OTYsIDB4ZTQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4OTYsIDB4OTQsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0YiwgMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDU0LCAweDc3LCAweDdkLCAweDAwLCAweDAwLAorCTB4OTcsIDB4OTcsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjIsIDB4MDgsCisJMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHgwMiwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweGEwLCAweDk3LCAweGEyLCAweDRiLCAweGZkLCAweDdmLCAweDAwLCAweDAwLCAweGI0LCAweDA1LCAweDAwLCAweDAyLAorCTB4ODAsIDB4Y2UsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YWEsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHgxOSwgMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHgwMiwKKwkweGYwLCAweDMxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBiLCAweGYwLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MTMsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsCisJMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHgxOSwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweGE4LCAweDA4LCAweGUwLCAweGIxLCAweDAwLCAweDAwLCAweGE1LCAweDk3LCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4MDUsIDB4NDgsIDB4NmQsIDB4MDAsIDB4MDAsCisJMHhiMCwgMHgwMCwgMHgwMCwgMHhhMSwgMHg4MCwgMHhjZSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhNiwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDdjLCAweDAwLCAweDJkLCAweGYwLCAweDg0LCAweGIwLCAweDAxLCAweDAwLAorCTB4MDIsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4OTgsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4YjEsIDB4OTcsIDB4MjAsIDB4NGMsCisJMHg4NCwgMHg2YywgMHgwMCwgMHgwMCwgMHg4OCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwKKwkweGIxLCAweDk3LCAweDIwLCAweGYyLCAweDg0LCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4ODUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4OTgsIDB4MDAsIDB4MmQsIDB4MTQsIDB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHg5OCwgMHhiMCwgMHgwMSwgMHgwMCwgMHhhMywgMHgwMCwgMHgyZCwgMHgxNCwKKwkweDk4LCAweGQwLCAweDAxLCAweDAwLCAweGI2LCAweDk3LCAweDIwLCAweDRjLCAweDg0LCAweDZjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGMsIDB4ODQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4MzAsCisJMHg4MSwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMywgMHg4MCwgMHhlMCwgMHgwMSwgMHgwMCwKKwkweGJhLCAweDk3LCAweDIzLCAweDQwLCAweDg0LCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4ODQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ZDAsIDB4MDAsIDB4MjAsIDB4MTQsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg5OCwgMHgwMCwgMHgyNSwgMHg0MiwgMHg4MCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2ZSwgMHhmMywKKwkweDgwLCAweGYwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGE2LCAweDQyLCAweDgyLCAweGMwLCAweDAwLCAweDAwLAorCTB4YzAsIDB4OTcsIDB4YTAsIDB4NDAsIDB4MTYsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCisJMHgxNywgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5ZiwgMHhmMCwgMHg4MiwgMHhlYywgMHgwMCwgMHgwMCwKKwkweDk4LCAweDAwLCAweGEwLCAweDQxLCAweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDVjLAorCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MzcsIDB4MDQsIDB4MDAsIDB4NDAsIDB4ODksIDB4OTgsIDB4MDEsIDB4MDAsCisJMHgwMiwgMHg5OSwgMHgwMCwgMHgwNSwgMHg4YSwgMHgzMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwKKwkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJlLCAweDEwLCAweDQ4LCAweGIxLCAweDAxLCAweDAwLAorCTB4YTgsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ZjEsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsCisJMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwOSwgMHgwMCwgMHgwMCwgMHgwNywgMHg5NiwgMHhlNCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDYwLCAweGE3LCAweDk3LCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLAorCTB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTgsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHhjYiwgMHg5NywgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhhOCwgMHgwMCwgMHgyZCwgMHgxYywKKwkweDhhLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDlmLCAweGYwLCAweDhhLCAweGQwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4YTIsIDB4NDAsIDB4OGIsIDB4ZWMsIDB4MDAsIDB4MDAsIDB4OGEsIDB4MDAsIDB4MjAsIDB4NDAsCisJMHhlNywgMHhiMSwgMHgwMSwgMHgwMCwgMHhiNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwKKwkweGE0LCAweDAwLCAweDJkLCAweDQ1LCAweGUwLCAweGQxLCAweDAxLCAweDAwLCAweGQ5LCAweDk3LCAweDljLCAweDE3LAorCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjIsIDB4NGEsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsCisJMHhiZSwgMHgwMCwgMHgyZiwgMHhhYiwgMHg4MywgMHhiMCwgMHgwMSwgMHgwMCwgMHgzNSwgMHg5OCwgMHgwMCwgMHgxNCwKKwkweDgyLCAweDUwLCAweDAxLCAweDAwLCAweGRlLCAweDk3LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4ZGUsIDB4OTcsIDB4MjIsIDB4ZjIsIDB4ODIsIDB4MzAsIDB4MDAsIDB4MDAsIDB4OGMsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHhkZSwgMHg5NywgMHg5ZiwgMHgxYywgMHhlMCwgMHg2ZCwgMHgwMCwgMHgwMCwKKwkweGJlLCAweDAwLCAweDAwLCAweDQwLCAweDQ3LCAweDk5LCAweDAxLCAweDAwLCAweDM1LCAweDk4LCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4YTgsIDB4MDAsIDB4MjAsIDB4MWMsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg5YywgMHgwMCwgMHgyZCwgMHgzMCwgMHg4MSwgMHhiMCwgMHgwMSwgMHgwMCwgMHg4OCwgMHgwMCwgMHgyZCwgMHhmMCwKKwkweDg0LCAweGIwLCAweDAxLCAweDAwLCAweDk0LCAweDAwLCAweDJkLCAweGYyLCAweDg2LCAweGIwLCAweDAxLCAweDAwLAorCTB4ZjIsIDB4OTcsIDB4MjMsIDB4ZjAsIDB4ODQsIDB4NmMsIDB4MDAsIDB4MDAsIDB4ZTYsIDB4OTcsIDB4MjMsIDB4OTIsCisJMHg4NywgMHg2YywgMHgwMCwgMHgwMCwgMHhjOSwgMHgwNCwgMHgwMCwgMHhhNiwgMHg5NCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweGU4LCAweDk3LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDIwLCAweDAwLCAweDAwLCAweGE2LAorCTB4OTQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NjAsIDB4ODksIDB4MDAsIDB4NGEsIDB4OTQsIDB4OTgsIDB4MDEsIDB4MDAsCisJMHhlOCwgMHg5NywgMHg2OCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHg0MCwKKwkweGJkLCAweDdkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRhLCAweGIwLCAweGIxLCAweDAxLCAweDAwLAorCTB4YmYsIDB4MDAsIDB4MmQsIDB4NDIsIDB4YjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4OTAsIDB4MDAsIDB4MmQsIDB4ZjMsCisJMHg4MCwgMHhlMCwgMHgwMSwgMHgwMCwgMHhlZCwgMHg5NywgMHhkNCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDc4LCAweGRhLCAweDg0LCAweGMwLCAweDAxLCAweDAwLCAweGY3LCAweDk3LCAweDIzLCAweDQwLAorCTB4ODQsIDB4NmMsIDB4MDAsIDB4MDAsIDB4OTQsIDB4MDAsIDB4MjAsIDB4OWQsIDB4ZTEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHhmNywgMHg5NywgMHgwMCwgMHg0MCwgMHg4NCwgMHhiMCwgMHgwMCwgMHgwMCwgMHhiZiwgMHgwMCwgMHgyZCwgMHg0MywKKwkweDg0LCAweGMwLCAweDAxLCAweDAwLCAweDkwLCAweDAwLCAweDJkLCAweGYzLCAweDgwLCAweGUwLCAweDAxLCAweDAwLAorCTB4ZjcsIDB4OTcsIDB4MjMsIDB4NDAsIDB4ODQsIDB4NmMsIDB4MDAsIDB4MDAsIDB4OTQsIDB4MDAsIDB4MjAsIDB4OWQsCisJMHhlMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4NCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweGZiLCAweDk3LCAweGEyLCAweGYwLCAweDM4LCAweDZjLCAweDAwLCAweDAwLCAweDljLCAweDAwLCAweDIwLCAweDQyLAorCTB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWYsIDB4MTMsIDB4OTQsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg4MCwgMHg0NiwgMHgxOSwgMHg4MCwgMHgwMSwgMHgwMCwgMHg5YywgMHgwMCwgMHgyMCwgMHg0MiwKKwkweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDM3LCAweDAwLCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4ZjMsIDB4ODAsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4MGYsIDB4MDAsIDB4MDAsIDB4ZjMsCisJMHg4MiwgMHg4OCwgMHgwMSwgMHgwMCwgMHgwMSwgMHg5OCwgMHgyMywgMHg0MSwgMHg4MCwgMHg2YywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDVmLCAweDEzLCAweDk0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDg5LCAweDBjLAorCTB4ODAsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4ODYsIDB4MGMsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHhiYywgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHhhMCwgMHgwMCwgMHhhMCwgMHhmMiwKKwkweGU0LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDlmLCAweDQxLCAweDI0LCAweGVjLCAweDAwLCAweDAwLAorCTB4MGQsIDB4OTgsIDB4YTYsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OWYsIDB4NDIsCisJMHgzOCwgMHhlYywgMHgwMCwgMHgwMCwgMHgwZCwgMHg5OCwgMHhhNiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweGI0LCAweDAwLCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDBmLCAweDk4LCAweGEzLCAweGYwLAorCTB4M2EsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTQsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHhiNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDEzLCAweDk4LCAweDIyLCAweGYwLCAweDNhLCAweDZjLCAweDAwLCAweDAwLAorCTB4YjQsIDB4MDAsIDB4MjAsIDB4MWQsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MmQsIDB4NWYsCisJMHgxMywgMHg5NCwgMHgwMSwgMHgwMCwgMHgxMywgMHg5OCwgMHgyMywgMHhmMCwgMHgzYSwgMHg2YywgMHgwMCwgMHgwMCwKKwkweDgwLCAweDAwLCAweDIwLCAweDFkLCAweGUwLCAweGIxLCAweDAxLCAweDAwLCAweGMwLCAweDAwLCAweDIwLCAweDEyLAorCTB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YzQsIDB4MDAsIDB4YTAsIDB4MWMsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgyNywgMHgwNCwgMHgwMCwgMHg0MCwgMHg4OSwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMiwgMHg5OSwgMHgwMCwgMHg0MiwKKwkweDhhLCAweDMwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDA1LCAweDQ4LCAweDZkLCAweDAwLCAweDAwLAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsCisJMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgxMiwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4NywgMHg5OCwgMHgwMSwgMHgwMCwKKwkweDFmLCAweDk4LCAweDlmLCAweDQxLCAweDI0LCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAorCTB4OGMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4OGMsIDB4ZDAsIDB4MDEsIDB4MDAsCisJMHgyMCwgMHg5OCwgMHgwMCwgMHg0MSwgMHgyNCwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDhkLCAweGIwLCAweDAxLCAweDAwLCAweDc4LCAweDk4LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsCisJMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDIyLCAweDk4LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGFlLCAweDk0LCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTYsIDB4ODAsIDB4YjIsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHhhNywgMHgwOCwgMHg4MCwgMHgzMiwgMHgwMSwgMHgwMCwgMHgzMiwgMHgwNCwgMHgwMCwgMHg0MCwKKwkweDg5LCAweDk4LCAweDAxLCAweDAwLCAweDAyLCAweDk5LCAweDAwLCAweDA4LCAweDhhLCAweDMwLCAweDAxLCAweDAwLAorCTB4MmMsIDB4OTgsIDB4YTIsIDB4NDAsIDB4OTUsIDB4NmMsIDB4MDAsIDB4MDAsIDB4YzMsIDB4OTQsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MiwgMHgwMCwgMHhhNiwgMHgwNCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweGEwLCAweDk4LCAweDJmLCAweDQwLCAweDExLCAweGIwLCAweDAxLCAweDAwLCAweDMwLCAweDA1LCAweDAwLCAweDQxLAorCTB4ODksIDB4YjAsIDB4MDAsIDB4MDAsIDB4Y2MsIDB4MDAsIDB4MDAsIDB4YTEsIDB4ODAsIDB4Y2UsIDB4MDEsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHhhNiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5ZiwgMHhmOCwKKwkweDNlLCAweGVjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDlmLCAweDEyLCAweGUwLCAweGVkLCAweDAwLCAweDAwLAorCTB4YzgsIDB4MDAsIDB4MjAsIDB4YWIsIDB4ZTEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4Y2MsIDB4MDAsIDB4YTAsIDB4MWYsCisJMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHgwNSwgMHg0OCwgMHg2ZCwgMHgwMCwgMHgwMCwKKwkweDM4LCAweDk4LCAweGEzLCAweDVmLCAweGU3LCAweDZkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAorCTB4ZTcsIDB4YzEsIDB4MDEsIDB4MDAsIDB4YTYsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDcsIDB4OTksIDB4MDEsIDB4MDAsCisJMHg0YywgMHg5OCwgMHgyMiwgMHhmMiwgMHg4NiwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwMywgMHgwMCwgMHgwMCwgMHg0MywKKwkweDg0LCAweGY0LCAweDAxLCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweDQxLCAweDgwLCAweGNjLCAweDAxLCAweDAwLAorCTB4YjgsIDB4MDAsIDB4MmQsIDB4NDIsIDB4ODAsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjIsIDB4NDAsCisJMHg4NiwgMHhjMCwgMHgwMSwgMHgwMCwgMHg0MCwgMHg5OCwgMHgxZiwgMHg0MywgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDQxLCAweDk4LCAweGEyLCAweDQwLCAweDg3LCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDYyLCAweDQxLAorCTB4ODcsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NDUsIDB4OTgsIDB4OWYsIDB4NDAsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4NSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDg0LCAweGQwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLCAweDgwLCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjIsIDB4ODgsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4NDQsCisJMHg4NCwgMHhmNCwgMHgwMSwgMHgwMCwgMHhiOCwgMHgwMCwgMHgyZSwgMHg0MiwgMHg4MCwgMHhkMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDYyLCAweDQwLCAweDg4LCAweGMwLCAweDAxLCAweDAwLCAweDRiLCAweDk4LCAweDFmLCAweDQ0LAorCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4NGYsIDB4OTgsIDB4YTIsIDB4NDAsIDB4ODksIDB4NmMsIDB4MDAsIDB4MDAsCisJMHg0ZiwgMHg5OCwgMHg2MiwgMHg0MSwgMHg4OSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMywgMHgwMCwgMHg2MiwgMHg0MSwKKwkweDg2LCAweGU0LCAweDAxLCAweDAwLCAweGI4LCAweDAwLCAweDAwLCAweDQwLCAweDQ1LCAweDk5LCAweDAxLCAweDAwLAorCTB4MDEsIDB4MDAsIDB4NjIsIDB4NDEsIDB4ODgsIDB4ZTQsIDB4MDEsIDB4MDAsIDB4YTQsIDB4MDAsIDB4MjAsIDB4NDAsCisJMHhlNSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhhMiwgMHgwMCwgMHgyMCwgMHg0MCwgMHhlNywgMHhiMSwgMHgwMSwgMHgwMCwKKwkweGJjLCAweDAwLCAweDJlLCAweDQzLCAweDg3LCAweGYwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LAorCTB4ODYsIDB4YzAsIDB4MDEsIDB4MDAsIDB4NTUsIDB4OTgsIDB4MjAsIDB4NDMsIDB4ODcsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg4MCwgMHg0MywgMHhlNSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMSwgMHgwMCwgMHg0MywKKwkweDgwLCAweGNlLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGE0LCAweDQzLCAweGU0LCAweDMxLCAweDAxLCAweDAwLAorCTB4NDAsIDB4MDEsIDB4ZTIsIDB4NDAsIDB4ODcsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4MDUsCisJMHg0OCwgMHg2ZCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHgwYSwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDg4LCAweDAwLCAweDJkLCAweDQ0LCAweDgxLCAweGIwLCAweDAxLCAweDAwLCAweDkwLCAweDAwLCAweDJkLCAweGYyLAorCTB4MmUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4OWMsIDB4MDAsIDB4MmQsIDB4ZjAsIDB4ODYsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHg5MCwgMHgwMCwgMHgyZCwgMHhmMCwgMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHhiYSwgMHgwMCwgMHgyZCwgMHhmMCwKKwkweDk4LCAweGIwLCAweDAxLCAweDAwLCAweDY0LCAweDk4LCAweGEyLCAweDEyLCAweDk4LCAweDZjLCAweDAwLCAweDAwLAorCTB4YmMsIDB4MDAsIDB4MmQsIDB4ZjIsIDB4OTgsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NjQsIDB4OTgsIDB4YTAsIDB4ZjIsCisJMHg5OCwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNywgMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDljLCAweDAwLCAweDIwLCAweDQxLCAweGUwLCAweGIxLCAweDAxLCAweDAwLCAweGI0LCAweDAwLCAweDJkLCAweDEyLAorCTB4ODYsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4NjcsIDB4OTgsIDB4YTMsIDB4NDEsIDB4ZTAsIDB4NmQsIDB4MDAsIDB4MDAsCisJMHg2OCwgMHg5OCwgMHgwMCwgMHhmMCwgMHg4NCwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKKwkweDg0LCAweGIwLCAweDAxLCAweDAwLCAweDgwLCAweDAwLCAweDJkLCAweDQzLCAweDg0LCAweGQwLCAweDAxLCAweDAwLAorCTB4NmIsIDB4OTgsIDB4OWYsIDB4NDIsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4NSwgMHhiMCwgMHgwMSwgMHgwMCwgMHg2ZCwgMHg5OCwgMHhhMywgMHg0MiwgMHgxNCwgMHg2YywgMHgwMCwgMHgwMCwKKwkweDZlLCAweDk4LCAweDAwLCAweDBhLCAweDBjLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLAorCTB4MGMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NzAsIDB4OTgsIDB4YTAsIDB4MTcsIDB4MGMsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg4MCwgMHgxNywgMHgwYywgMHhiMCwgMHgwMSwgMHgwMCwgMHg3NSwgMHg5OCwgMHgyMiwgMHg0MCwKKwkweDBkLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGEwLCAweDBhLCAweDBjLCAweGVjLCAweDAwLCAweDAwLAorCTB4MDEsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4ODIsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4NzUsIDB4OTgsIDB4YTAsIDB4NDEsCisJMHgwYywgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMiwgMHhmMCwgMHg4MCwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDI5LCAweDAwLCAweDAwLCAweDQwLCAweDg5LCAweDk4LCAweDAxLCAweDAwLCAweDAyLCAweDk5LCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsIDB4ODEsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHhjYiwgMHg5NCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHgwMywKKwkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDA0LCAweDgwLCAweDAwLCAweDAzLCAweDQ0LCAweGM5LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2MCwgMHg0MSwgMHg4NywgMHg5NCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDgwLCAweDAwLCAweDEwLCAweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLAorCTB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDgsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0OSwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywKKwkweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweDYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4MjAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTgsIDB4NWQsCisJMHgwNSwgMHg5MCwgMHgwMCwgMHgwMCwgMHg4NCwgMHg5OCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweGEyLCAweDA1LCAweDQ4LCAweDZkLCAweDAwLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDBjLAorCTB4OTYsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4MDcsIDB4OTYsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgyZSwgMHg0YiwgMHgxOSwgMHg5MCwgMHgwMSwgMHgwMCwgMHgwNSwgMHgwMCwgMHgyYSwgMHgwYywKKwkweGU0LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDA0LCAweGU2LCAweGIxLCAweDAxLCAweDAwLAorCTB4M2UsIDB4MDQsIDB4MDAsIDB4NDAsIDB4ODksIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDIsIDB4OTksIDB4MDAsIDB4MDgsCisJMHg4YSwgMHgzMCwgMHgwMSwgMHgwMCwgMHg4ZiwgMHg5OCwgMHg0NSwgMHg0OCwgMHg2MSwgMHgzMSwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDEwLCAweDAwLCAweDA4LCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDk1LCAweDk4LCAweDI4LCAweDQwLAorCTB4ODcsIDB4MzAsIDB4MDAsIDB4MDAsIDB4OTAsIDB4OTgsIDB4MjIsIDB4NDgsIDB4NzcsIDB4N2QsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgyMiwgMHg0MCwgMHgyNywgMHg2YywgMHgwMCwgMHgwMCwgMHgwNCwgMHg5NywgMHgxZCwgMHg0NiwKKwkweDg3LCAweGIwLCAweDAwLCAweDAwLCAweDk4LCAweDk4LCAweDIyLCAweDVmLCAweDExLCAweDdjLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MjIsIDB4MTUsIDB4NjIsIDB4MzEsIDB4MDAsIDB4MDAsIDB4OTYsIDB4OTgsIDB4YTgsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5ZCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDQ5LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDE0LCAweDJmLCAweDRjLAorCTB4ODMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg5YiwgMHg5OCwgMHhhMiwgMHg0MSwgMHg4MywgMHg1MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDQ5LCAweGIxLCAweDAxLCAweDAwLAorCTB4MzAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4YTEsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg5MywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgxZiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweGVmLCAweDk4LCAweDAwLCAweDQ5LCAweDk2LCAweDMwLCAweDAxLCAweDAwLCAweDA3LCAweDAwLCAweDAwLCAweDQ5LAorCTB4MDYsIDB4ZTQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MzksIDB4MDAsIDB4MDMsIDB4MDYsIDB4YzgsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwNSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHhkMCwKKwkweGEwLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDkzLCAweGMwLCAweDAxLCAweDAwLAorCTB4YTIsIDB4OTgsIDB4YTAsIDB4NTQsIDB4OTMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmUsIDB4MDUsCisJMHg5NywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHg0MCwgMHg0OSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGUxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAyLCAweDAwLCAweGEyLAorCTB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4YWIsIDB4OTgsIDB4YTIsIDB4NDEsIDB4OTcsIDB4NTAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg0OSwgMHhiMywgMHgwMSwgMHgwMCwgMHhmNSwgMHg5OCwgMHgwMCwgMHg0MCwKKwkweDQ5LCAweDMxLCAweDAxLCAweDAwLCAweDAyLCAweDk1LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4MDAsIDB4YjUsIDB4MmUsIDB4MDgsIDB4OTcsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhiMiwgMHg5OCwgMHhhMiwgMHg0MSwgMHg5NywgMHg1MCwgMHgwMCwgMHgwMCwKKwkweDE4LCAweDAwLCAweDAwLCAweDQwLCAweDk3LCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweDk3LCAweDJlLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHhiNiwgMHg5OCwgMHhhMiwgMHg0MSwgMHg5NywgMHg1MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDQ5LCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDE4LCAweDJlLCAweDA1LCAweDk3LCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YmEsIDB4OTgsIDB4YTIsIDB4NDEsCisJMHg5NywgMHg1MCwgMHgwMCwgMHgwMCwgMHg1NywgMHg5NSwgMHgyMCwgMHg0MCwgMHhlNywgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDMwLCAweDk0LCAweDAwLCAweDQwLCAweDQ1LCAweDk5LCAweDAxLCAweDAwLCAweDY0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ZTUsIDB4OTksIDB4MDEsIDB4MDAsIDB4NTYsIDB4OTUsIDB4MjAsIDB4NDAsIDB4ZTcsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHhiOCwgMHg5NCwgMHgyMCwgMHg0MSwgMHhlNSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhiYSwgMHg5NCwgMHgyMCwgMHg0MSwKKwkweGU1LCAweGIxLCAweDAxLCAweDAwLCAweDk4LCAweDk0LCAweDAwLCAweDQwLCAweDQ1LCAweDk5LCAweDAxLCAweDAwLAorCTB4MDIsIDB4MDAsIDB4MDAsIDB4NDAsIDB4OTcsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhjNCwgMHg5OCwgMHhhMiwgMHg0MSwgMHg5NywgMHg1MCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDk3LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4NmYsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGIsIDB4NjgsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHhjOCwgMHg5OCwgMHg4NSwgMHg0MSwgMHg5NywgMHg0MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwNCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDM5LCAweGIzLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MzcsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHgzNSwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgzMywgMHhiMywgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDQxLCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4M2YsIDB4YjMsIDB4MDEsIDB4MDAsIDB4ZWUsIDB4MDUsIDB4MDAsIDB4NDAsIDB4MjUsIDB4OWIsIDB4MDEsIDB4MDAsCisJMHg0MiwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0YiwgMHg5YiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDJmLCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDJkLCAweGIzLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDcsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg0MywgMHhiMywgMHgwMSwgMHgwMCwgMHg2MCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgyYiwgMHg5YiwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDU0LCAweGVmLCAweDkzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDU1LAorCTB4ZjEsIDB4OTMsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4YTUsIDB4M2MsIDB4OGIsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgyYywgMHg1YiwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyYywKKwkweDQ1LCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDU5LCAweGIzLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NTcsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHgyNywgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg1MywgMHhiMywgMHgwMSwgMHgwMCwKKwkweGU0LCAweDk4LCAweGEyLCAweDUwLCAweGZkLCAweDdmLCAweDAwLCAweDAwLCAweGU0LCAweDk4LCAweGEyLCAweDUxLAorCTB4ZmQsIDB4N2YsIDB4MDAsIDB4MDAsIDB4ZTUsIDB4OTgsIDB4MDAsIDB4NDAsIDB4MWQsIDB4YjMsIDB4MDAsIDB4MDAsCisJMHg1MCwgMHg0NiwgMHgwMCwgMHg0MCwgMHgxZCwgMHg5YiwgMHgwMSwgMHgwMCwgMHgwMCwgMHhjMCwgMHgwMCwgMHhhNiwKKwkweDg4LCAweGIzLCAweDAxLCAweDAwLCAweGZmLCAweDNmLCAweDAwLCAweGE2LCAweDNhLCAweGIzLCAweDAxLCAweDAwLAorCTB4MDAsIDB4YzAsIDB4MDAsIDB4OWQsIDB4M2IsIDB4OWIsIDB4MDEsIDB4MDAsIDB4YjQsIDB4MDUsIDB4MDAsIDB4NDAsCisJMHgyMywgMHg5YiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0ZCwgMHhiMywgMHgwMSwgMHgwMCwKKwkweDA4LCAweDBhLCAweDAwLCAweGE2LCAweDE0LCAweGIzLCAweDAxLCAweDAwLCAweDAxLCAweDAxLCAweDAwLCAweDhhLAorCTB4MTUsIDB4OWIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODcsIDB4YjMsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHhhNiwgMHg1NiwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg1ZSwKKwkweDU3LCAweGI1LCAweDAxLCAweDAwLCAweDE4LCAweDAwLCAweDAwLCAweDRiLCAweDIwLCAweGU0LCAweDAxLCAweDAwLAorCTB4MDYsIDB4MDAsIDB4MDAsIDB4NGIsIDB4OTYsIDB4ZTQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4NDMsIDB4MDAsIDB4NGIsCisJMHg5NiwgMHhjOCwgMHgwMSwgMHgwMCwgMHgxOCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgyMCwgMHhkYywgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDRiLCAweDIwLCAweDk0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDU3LAorCTB4MjEsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4OTksIDB4MmUsIDB4MGEsIDB4OTcsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhmNiwgMHg5OCwgMHhhMiwgMHg0MSwKKwkweDk3LCAweDUwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweDAwLCAweDQwLCAweDk3LCAweDk4LCAweDAxLCAweDAwLAorCTB4MDAsIDB4YTksIDB4MDAsIDB4NDAsIDB4NDUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhmYSwgMHg5OCwgMHhhMiwgMHg0MSwgMHg5NywgMHg1MCwgMHgwMCwgMHgwMCwKKwkweDMwLCAweDAwLCAweDAwLCAweDQwLCAweDk3LCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDU1LAorCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGIsIDB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHhmZSwgMHg5OCwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhmZSwgMHg5OCwgMHhhMiwgMHg0MSwKKwkweDk3LCAweDUwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAorCTB4MTAsIDB4MDAsIDB4MDAsIDB4NGUsIDB4OTgsIDB4ZTQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDcsCisJMHg5OCwgMHg5NCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywgMHg5OSwgMHhlMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDk4LCAweDk0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ4LAorCTB4OTksIDB4ZTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGMsIDB4ODgsIDB4OTQsIDB4MDEsIDB4MDAsCisJMHgwOCwgMHg5OSwgMHg2YSwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwYiwgMHg5OSwgMHgyMiwgMHg0ZiwKKwkweDc3LCAweDdkLCAweDAwLCAweDAwLCAweGYwLCAweDA0LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGYsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsCisJMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwYywgMHg5OSwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDEzLCAweDk5LCAweDIyLCAweDRhLCAweDg5LCAweDdjLCAweDAwLCAweDAwLCAweDExLCAweDk5LCAweDIyLCAweDRmLAorCTB4NzcsIDB4N2QsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4MDQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHgxMSwgMHg5OSwgMHhhOCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZhLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4NWEsCisJMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwZiwgMHg5OCwgMHhmNCwgMHgwMSwgMHgwMCwKKwkweDA0LCAweDAwLCAweGEyLCAweDVmLCAweDk5LCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4YWUsIDB4OWYsIDB4MDAsIDB4ODgsCisJMHg5YSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhhZSwgMHg5ZiwgMHgwMCwgMHg4OCwgMHg5YSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweGFlLCAweDlmLCAweDAwLCAweDg4LCAweDlhLCAweGIwLCAweDAwLCAweDAwLCAweGFlLCAweDlmLCAweDAwLCAweDg4LAorCTB4OWEsIDB4YjAsIDB4MDAsIDB4MDAsIDB4YWUsIDB4OWYsIDB4MDAsIDB4ODgsIDB4OWEsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg4OCwgMHg5YSwgMHhiMCwgMHgwMSwgMHgwMCwgMHhhZSwgMHg5ZiwgMHg0MSwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweGIyLCAweDlmLCAweDIyLCAweDQwLCAweDdiLCAweDZmLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MTksIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4YWUsIDB4OWYsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOSwgMHg0MSwgMHg3YiwgMHhiMywgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGE0LCAweGM0LCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGExLAorCTB4YzYsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmYsIDB4YTIsIDB4YzgsIDB4YjMsIDB4MDEsIDB4MDAsCisJMHgwOCwgMHgxNCwgMHgwMCwgMHg0MCwgMHg0OSwgMHg5OSwgMHgwMSwgMHgwMCwgMHhhOCwgMHg5ZiwgMHgwMCwgMHg0ZCwKKwkweDlhLCAweGNjLCAweDAxLCAweDAwLCAweGJiLCAweDlmLCAweDI2LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGMsIDB4NDksIDB4YzEsIDB4MDEsIDB4MDAsIDB4YjksIDB4OWYsIDB4YTIsIDB4NDEsCisJMHg5YiwgMHg1MCwgMHgwMCwgMHgwMCwgMHhiZiwgMHg5ZiwgMHg4MCwgMHg4MCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDUyLCAweDQ5LCAweGZkLCAweDkzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRhLAorCTB4ZmQsIDB4OTMsIDB4MDEsIDB4MDAsIDB4YzIsIDB4OWYsIDB4MDAsIDB4NDIsIDB4Y2QsIDB4OTMsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg1MSwgMHg0YSwgMHhmZCwgMHg5MywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0OSwKKwkweGZkLCAweDkzLCAweDAxLCAweDAwLCAweGMyLCAweDlmLCAweDAwLCAweDQzLCAweGNiLCAweDkzLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4NTAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4ZDIsIDB4OWYsIDB4MDAsIDB4NDAsCisJMHgxOSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHg5YSwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDQ5LCAweGQxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGYwLAorCTB4ODAsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4NGQsIDB4ODAsIDB4YjIsIDB4MDEsIDB4MDAsCisJMHhjYSwgMHg5ZiwgMHgwMCwgMHg0MCwgMHgxOSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YywgMHg0MCwKKwkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDQ5LCAweGQxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4OWEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGQsCisJMHgxMCwgMHhiMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMiwgMHg0OSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGUzLCAweDQzLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGU0LAorCTB4NDUsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4N2IsIDB4YjMsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg0OCwgMHg0ZiwgMHg0MCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhkMiwgMHg5ZiwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweGNiLAorCTB4ODEsIDB4YzgsIDB4MDEsIDB4MDAsIDB4MjIsIDB4ODMsIDB4MDAsIDB4NDAsIDB4ZjIsIDB4OTMsIDB4MDAsIDB4MDAsCisJMHg1NSwgMHg4MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwNSwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDE4LCAweDA2LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MjIsIDB4ODMsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4YzYsIDB4ODIsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg0MywgMHg4MSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDQxLCAweDgxLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGI4LCAweDgwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4ZWQsIDB4ODcsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgyMywgMHg4MywgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgyNywgMHg4MywgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGI5LCAweDk0LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4OGQsIDB4OTgsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4NzksIDB4OTQsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg3OCwgMHg5OCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDg3LCAweDk1LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDEwLCAweDk1LCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MGEsIDB4OTUsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHhiMSwgMHg4MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgxOSwgMHg5OSwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLAorCX0sCit9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3NsaWNvc3Mvb2FzaXNkb3dubG9hZC5oIGIvZHJpdmVycy9zdGFnaW5nL3NsaWNvc3Mvb2FzaXNkb3dubG9hZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY0MzhjMjMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvc2xpY29zcy9vYXNpc2Rvd25sb2FkLmgKQEAgLTAsMCArMSw2ODQ4IEBACisjZGVmaW5lIE9BU0lTX1VDT0RFX1ZFUlNfU1RSSU5HCSIxLjIiCisjZGVmaW5lIE9BU0lTX1VDT0RFX1ZFUlNfREFURSAgCSIyMDA2LzAzLzI3IDE1OjEwOjM3IgorI2RlZmluZSBPQVNJU19VQ09ERV9IT1NUSUZfSUQgIAkzCisKK3N0YXRpYyBzMzIgT051bVNlY3Rpb25zID0gMHgyOworc3RhdGljIHUzMiBPU2VjdGlvblNpemVbXSA9IHsKKwkweDAwMDA0MDAwLCAweDAwMDEwMDAwLAorfTsKKworc3RhdGljIHUzMiBPU2VjdGlvblN0YXJ0W10gPSB7CisJMHgwMDAwMDAwMCwgMHgwMDAwODAwMCwKK307CisKK3N0YXRpYyB1OCBPYXNpc1VDb2RlWzJdWzY1NTM2XSA9Cit7CisJeworCTB4MTUsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MWIsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgyMSwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDAzLCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE4LAorCTB4OTgsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4ODAsIDB4YTIsIDB4NDAsIDB4ZmQsIDB4N2YsIDB4MDAsIDB4MDAsCisJMHgwOSwgMHgwMCwgMHhhMiwgMHg0OSwgMHhkZCwgMHg3ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YywKKwkweDgwLCAweGIyLCAweDAxLCAweDAwLCAweDA3LCAweDAwLCAweDAwLCAweDQwLCAweGQxLCAweGIxLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGMsIDB4ODAsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDksIDB4MDAsIDB4YTIsIDB4NDAsCisJMHg3NSwgMHg3ZCwgMHgwMCwgMHgwMCwgMHg2MCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDBiLCAweDAwLCAweGE4LCAweGIxLCAweDdlLCAweDMxLCAweDAwLCAweDAwLCAweDA5LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4OGYsIDB4OTgsIDB4MTgsIDB4MzEsIDB4MDAsIDB4MDAsCisJMHgxMCwgMHgwMCwgMHgwMCwgMHg5OCwgMHg4MCwgMHhlNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg5OCwKKwkweDgwLCAweDk0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAorCTB4MTAsIDB4MDAsIDB4MDAsIDB4OTgsIDB4ODAsIDB4ZTQsIDB4MDEsIDB4MDAsIDB4MGUsIDB4MDAsIDB4NDAsIDB4OTgsCisJMHg4MCwgMHg5NCwgMHgwMCwgMHgwMCwgMHgxMSwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGE1LCAweDk5LCAweDAxLCAweDAwLCAweDE5LCAweDAwLCAweDI5LCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MTksIDB4MDAsIDB4MTQsIDB4YmMsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwZSwgMHgwMCwgMHg5MywgMHhiYywgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MTAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4YTUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MWYsIDB4MDAsIDB4MjksIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgxZiwgMHgwMCwgMHgxNCwgMHhiYywgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDEyLCAweDAwLCAweDkzLCAweGJjLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDEsIDB4ODAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgyMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhhNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgyNSwgMHgwMCwgMHgyOSwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDI1LCAweDAwLCAweDE0LCAweGJjLCAweDgwLCAweDMyLCAweDAwLCAweDAwLAorCTB4MTQsIDB4MDAsIDB4OTMsIDB4YmMsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDksCisJMHhkZCwgMHg4MSwgMHgwMSwgMHgwMCwgMHgxMiwgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDMzLCAweDAxLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDJhLCAweDAwLCAweDE0LCAweGJjLAorCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ZmUsIDB4MDAsIDB4MTMsIDB4YmMsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHg1NCwgMHg5NSwgMHgwMCwgMHg0MCwgMHg0NSwgMHg5OSwgMHgwMSwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHg0MCwKKwkweGU1LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJmLCAweDQwLCAweDQ5LCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZTEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHhmZCwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmZiwgMHhiMywgMHgwMSwgMHgwMCwKKwkweDMzLCAweDAwLCAweDE4LCAweGVlLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLAorCTB4ODksIDB4YjAsIDB4MDEsIDB4MDAsIDB4MzIsIDB4MDAsIDB4YTIsIDB4NDEsIDB4ODksIDB4NTAsIDB4MDAsIDB4MDAsCisJMHg5OSwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgzMCwgMHg5NCwgMHgwMCwgMHg0MCwKKwkweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDIwLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZmEsIDB4ZTAsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MzksIDB4MDAsIDB4OTgsIDB4ZWUsCisJMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmYiwgMHg4MCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDNiLCAweDAwLCAweDgwLCAweGYzLCAweGRlLCAweDMzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ3LAorCTB4ZmQsIDB4OTMsIDB4MDEsIDB4MDAsIDB4M2UsIDB4MDAsIDB4ODMsIDB4ZjMsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHhmMCwgMHgwMCwgMHgwMCwgMHhmMywgMHg4MCwgMHg4OCwgMHgwMSwgMHgwMCwgMHgwMSwgMHg4MCwgMHgwMCwgMHg0MCwKKwkweDJlLCAweGRkLCAweDAxLCAweDAwLCAweDAwLCAweDk0LCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsIDB4NDMsIDB4YzEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmEsCisJMHgyNCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg3YywgMHgwMCwgMHgxOCwgMHhlZSwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDQ1LCAweDAwLCAweDk1LCAweGU4LCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweGU4LAorCTB4ODAsIDB4ODgsIDB4MDEsIDB4MDAsIDB4N2MsIDB4MDAsIDB4MjYsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhkNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMiwKKwkweGVjLCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweGQ2LCAweGIxLCAweDAxLCAweDAwLAorCTB4MDgsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZDUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsCisJMHhkNiwgMHhiMSwgMHgwMSwgMHgwMCwgMHhmZiwgMHgwMCwgMHgwMCwgMHhmOCwgMHhlZSwgMHg4YiwgMHgwMSwgMHgwMCwKKwkweDA4LCAweDAxLCAweDAwLCAweDQwLCAweGQ1LCAweDk5LCAweDAxLCAweDAwLCAweGZmLCAweDAwLCAweDAwLCAweGYwLAorCTB4ODAsIDB4OGMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjcsIDB4ODEsIDB4OTQsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhkNiwgMHhiMSwgMHgwMSwgMHgwMCwgMHhmZiwgMHgwMCwgMHgwMCwgMHhmOCwKKwkweDgwLCAweDg4LCAweDAxLCAweDAwLCAweDNjLCAweDAwLCAweDAwLCAweDQwLCAweGQ1LCAweDk5LCAweDAxLCAweDAwLAorCTB4ZmYsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4ZDYsIDB4OGQsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4ZjAsCisJMHhmMCwgMHhkYiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0OCwgMHg4MSwgMHhlMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDgxLCAweDk0LCAweDAxLCAweDAwLCAweDNjLCAweDAxLCAweDAwLCAweDQwLAorCTB4ZDUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZDYsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHhmZiwgMHgwMCwgMHgwMCwgMHhmOCwgMHg4MCwgMHg4OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0OCwKKwkweDgxLCAweGUwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDgxLCAweDk0LCAweDAxLCAweDAwLAorCTB4M2MsIDB4MDIsIDB4MDAsIDB4NDAsIDB4ZDUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHhkNiwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyYywgMHgwMCwgMHgwMCwgMHg0MCwgMHhkNSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGY4LCAweGQ2LCAweGIxLCAweDAxLCAweDAwLCAweDFlLCAweDAwLCAweDAwLCAweGYwLAorCTB4ODIsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4M2YsIDB4MDAsIDB4ZjgsIDB4ODAsIDB4ZDgsIDB4MDEsIDB4MDAsCisJMHg2NCwgMHgwMCwgMHgyNiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKKwkweDgxLCAweGQwLCAweDAxLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweDQwLCAweDgwLCAweGQ4LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ODAsIDB4OTQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHhkOCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg2OCwgMHgwMCwgMHgyMiwgMHhmYSwgMHg4MCwgMHgzMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDRjLCAweDgxLCAweGUwLCAweDAxLCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweDQwLAorCTB4ODAsIDB4Y2MsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZGUsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMSwgMHgwMCwgMHg0MCwgMHhkNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHhmYSwKKwkweDgwLCAweGU0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY2LCAweDgxLCAweDk0LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZDYsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDAsIDB4NDAsCisJMHhkNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHhmYSwgMHg4MCwgMHhlNCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGY2LCAweDgxLCAweDk0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4ZDYsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZDUsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgxMCwgMHgwMCwgMHgwMCwgMHhmYiwgMHhkNiwgMHhlNSwgMHgwMSwgMHgwMCwgMHgwNywgMHgwMCwgMHgwMCwgMHg0MCwKKwkweGQ1LCAweDk5LCAweDAxLCAweDAwLCAweDE4LCAweDAwLCAweDAwLCAweGZiLCAweGQ2LCAweGU1LCAweDAxLCAweDAwLAorCTB4NDgsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZDUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4ZmEsCisJMHhkNiwgMHhlNSwgMHgwMSwgMHgwMCwgMHg1MCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhkNSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDEwLCAweDAwLCAweDAwLCAweGZiLCAweGQ2LCAweGU1LCAweDAxLCAweDAwLCAweDAzLCAweDAwLCAweDAwLCAweGZiLAorCTB4N2EsIDB4ODksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4ZGMsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg3YywgMHgwMCwgMHgwMCwgMHg0YywgMHhkZCwgMHg5MSwgMHgwMCwgMHgwMCwgMHg3YywgMHgwMCwgMHg5NSwgMHhlOCwKKwkweDg0LCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDJmLCAweGU5LCAweGZhLCAweGIzLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZDEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4NDIsCisJMHg4MCwgMHg4OCwgMHgwMSwgMHgwMCwgMHgzNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MCwgMHhjZSwgMHgwMSwgMHgwMCwKKwkweDdjLCAweDAwLCAweGE2LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDg1LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDIsIDB4ODAsIDB4MjIsIDB4NDAsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHg3YywgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZiwKKwkweDgxLCAweGIwLCAweDAxLCAweDAwLCAweDhlLCAweDAwLCAweDA5LCAweGY5LCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4OGMsIDB4MDAsIDB4MDgsIDB4ZjksIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4OTgsIDB4MDAsIDB4MWYsIDB4ZmQsCisJMHhmOSwgMHgzMywgMHgwMCwgMHgwMCwgMHg4YiwgMHgwMCwgMHg5ZSwgMHhmZCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDRhLCAweGYzLCAweDkzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQ4LAorCTB4ZjMsIDB4OTMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmQsIDB4ZjcsIDB4YjMsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg4MCwgMHg0OSwgMHhmMywgMHg5MywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmYywKKwkweDE5LCAweGIxLCAweDAxLCAweDAwLCAweDkzLCAweDAwLCAweDBhLCAweGY5LCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4NDAsIDB4ZmIsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ZmQsCisJMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwNywgMHg4MCwgMHhmOSwgMHhmMywgMHg4ZiwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDA3LCAweDQyLCAweGY5LCAweGYzLCAweDhmLCAweDAxLCAweDAwLCAweDk3LCAweDAwLCAweGEyLCAweGZmLAorCTB4ZjcsIDB4NmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHhhMiwgMHhmZiwgMHhmYiwgMHhlZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHhmYywKKwkweGUxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQwLCAweDgxLCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4OTQsIDB4MDAsIDB4NDAsIDB4NDcsIDB4OTksIDB4MDEsIDB4MDAsIDB4YmIsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMiwgMHg0NiwgMHhmZCwgMHg3ZiwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDk0LCAweDAwLCAweDQwLCAweDQ3LCAweDk5LCAweDAxLCAweDAwLCAweGNlLCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTIsIDB4NDQsIDB4ZmQsIDB4N2YsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHg5NCwgMHgwMCwgMHg0MCwgMHg0NSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweGYxLCAweGIxLCAweDAxLCAweDAwLCAweGZmLCAweDdmLCAweDAwLCAweDQwLCAweGY1LCAweDk5LCAweDAxLCAweDAwLAorCTB4ZmYsIDB4N2YsIDB4MDAsIDB4NDAsIDB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsIDB4OWEsIDB4MTMsIDB4MDAsIDB4NDAsCisJMHhmNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwNywgMHgwMCwgMHgwMCwgMHg0MCwgMHhmNSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDAxLCAweDAwLCAweDAwLCAweDQwLCAweGY1LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAyLCAweDAwLCAweDQwLAorCTB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMiwgMHgwMCwgMHg0MCwgMHhmNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMywgMHgwMSwgMHgwMCwgMHg0MCwKKwkweGY1LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGY1LCAweDk5LCAweDAxLCAweDAwLAorCTB4OWEsIDB4MTMsIDB4MDAsIDB4NDAsIDB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MGIsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHhmNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmNSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGY1LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDcsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgwOCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHhiMCwgMHgwMiwgMHgwMCwgMHg0MCwKKwkweGY1LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGY1LCAweDk5LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDIsIDB4MjksIDB4MDAsIDB4NDAsCisJMHhmNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmNSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDY3LCAweDAwLCAweDQwLCAweGY1LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwgMHhmNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwKKwkweGZkLCAweDgzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ2LCAweGZkLCAweDgzLCAweDAxLCAweDAwLAorCTB4ZmYsIDB4N2YsIDB4MDAsIDB4NDAsIDB4MjUsIDB4OTksIDB4MDEsIDB4MDAsIDB4YzQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMiwgMHg0NCwgMHg4MCwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweGZkLCAweDkzLCAweDAxLCAweDAwLCAweGUyLCAweDAwLCAweDAwLCAweDQwLAorCTB4ODMsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTIsIDB4NDUsIDB4ODAsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg4MCwgMHg0NiwgMHhmZCwgMHg5MywgMHgwMSwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHg0MCwKKwkweDgzLCAweDk4LCAweDAxLCAweDAwLCAweGRkLCAweDAwLCAweDAwLCAweDQwLCAweDJiLCAweDMxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4YTIsIDB4NDYsIDB4ODgsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCisJMHg4OSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5NCwgMHg4YywgMHhiMCwgMHgwMSwgMHgwMCwKKwkweGZmLCAweGZmLCAweDAwLCAweDQ2LCAweDgwLCAweDg4LCAweDAxLCAweDAwLCAweGE1LCAweGE1LCAweGEyLCAweDQwLAorCTB4ODAsIDB4Y2UsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDgsIDB4OGQsIDB4ZjAsIDB4MDEsIDB4MDAsCisJMHhjOSwgMHgwMCwgMHg4MiwgMHg0MSwgMHg4OSwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwKKwkweDg5LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweGZkLCAweDgzLCAweDAxLCAweDAwLAorCTB4ZDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTIsIDB4NDQsCisJMHg4MCwgMHhiMiwgMHgwMCwgMHgwMCwgMHhlMiwgMHgwMCwgMHgwMCwgMHgwOCwgMHg4MywgMHgzMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweGEyLCAweDQ1LCAweDgwLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQ0LAorCTB4ZmQsIDB4OTMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MzAsIDB4MDAsIDB4MDgsIDB4ODMsIDB4OTgsIDB4MDEsIDB4MDAsCisJMHg4MCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgyYiwgMHg5OSwgMHgwMSwgMHgwMCwgMHhkYiwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDg5LCAweDMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGEyLCAweDQ2LCAweDgwLCAweGIyLCAweDAwLCAweDAwLAorCTB4ZmYsIDB4ZmYsIDB4MDAsIDB4OTQsIDB4ODAsIDB4ODgsIDB4MDEsIDB4MDAsIDB4YTUsIDB4YTUsIDB4YTIsIDB4NDAsCisJMHg4MCwgMHg0ZSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MywgMHg4OSwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAzLCAweDg0LCAweDAwLCAweDQxLCAweDJjLCAweDk5LCAweDAxLCAweDAwLCAweGRlLCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDMsIDB4ODgsIDB4MDAsIDB4NDEsIDB4MmMsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5ZiwgMHg5NiwKKwkweDgwLCAweGIyLCAweDAwLCAweDAwLCAweGRmLCAweDAwLCAweGEyLCAweDQxLCAweDhkLCAweDUwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4N2YsIDB4MDAsIDB4NDAsCisJMHgyNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YywgMHg4OSwgMHhlMCwgMHgwMSwgMHgwMCwKKwkweGRkLCAweDAwLCAweDAwLCAweDQ0LCAweDgyLCAweDE0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDkwLCAweDk0LAorCTB4OGEsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgxMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHg4OCwgMHhmNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwKKwkweDg5LCAweGQwLCAweDAxLCAweDAwLCAweGRkLCAweDAwLCAweDAwLCAweDQ0LCAweDJiLCAweDQxLCAweDAxLCAweDAwLAorCTB4ZWMsIDB4MDAsIDB4MDgsIDB4NDEsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ZWQsIDB4MDAsIDB4MDAsIDB4OTQsCisJMHgyNCwgMHhiMSwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHg5NCwgMHgyNCwgMHhmNSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDk0LCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweGYyLCAweDAwLCAweGEwLCAweDQ0LAorCTB4ODksIDB4NTAsIDB4MDAsIDB4MDAsIDB4ZGQsIDB4MDAsIDB4MDAsIDB4NDQsIDB4MmIsIDB4NDEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg5NCwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhlZiwgMHgwMCwgMHgyMCwgMHg0NCwKKwkweDg5LCAweDUwLCAweDAwLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDQ1LCAweDg4LCAweGY0LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZmEsIDB4OGEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTMsIDB4NDIsCisJMHg4OSwgMHhkMCwgMHgwMCwgMHgwMCwgMHhmNywgMHgwMCwgMHhhMCwgMHhmYSwgMHg4YSwgMHg0MCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDhiLCAweGMwLCAweDAxLCAweDAwLCAweGY1LCAweDAwLCAweGEzLCAweDQyLAorCTB4ODksIDB4NTAsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4NDUsIDB4ODgsIDB4ODgsIDB4MDEsIDB4MDAsCisJMHgxMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHg4YSwgMHhmNCwgMHgwMSwgMHgwMCwgMHhmYywgMHgwMCwgMHg5MCwgMHg0NCwKKwkweDhhLCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDhiLCAweGMwLCAweDAxLCAweDAwLAorCTB4ZmYsIDB4ZmYsIDB4MDAsIDB4NDUsIDB4OGEsIDB4YTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NTAsCisJMHg4YiwgMHhlMCwgMHgwMSwgMHgwMCwgMHhmZiwgMHg3ZiwgMHgwMCwgMHg0MCwgMHgyNSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDdjLCAweDAwLCAweDAwLCAweDQwLCAweDJiLCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDMwLCAweDAwLCAweDQwLAorCTB4ODMsIDB4OTgsIDB4MDEsIDB4MDAsIDB4ZGQsIDB4MDAsIDB4MDAsIDB4MDgsIDB4ODMsIDB4MTQsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg5NCwgMHgyYSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHg0MCwKKwkweGY5LCAweDliLCAweDAxLCAweDAwLCAweGRkLCAweDAwLCAweDAwLCAweGZjLCAweDE5LCAweDMxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4NDAsIDB4OTQsIDB4ODAsIDB4YjIsIDB4MDEsIDB4MDAsIDB4ZGQsIDB4MDAsIDB4MDAsIDB4NDQsCisJMHgyYiwgMHg0MSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg5NCwgMHg4MCwgMHhiMiwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweGY5LCAweGMzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LAorCTB4MmIsIDB4YzEsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDEsIDB4OWYsIDB4OTQsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwMiwgMHg4MCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMSwgMHgwMCwgMHg1MSwKKwkweDkzLCAweGIwLCAweDAwLCAweDAwLCAweDEwLCAweDAxLCAweDAwLCAweDRkLCAweDkzLCAweGIwLCAweDAwLCAweDAwLAorCTB4MTAsIDB4MDEsIDB4MDAsIDB4NDksIDB4OTMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsCisJMHg5MywgMHhiMCwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMSwgMHhhMiwgMHg0MSwgMHg5MywgMHg1MCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDgwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTEsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgxMiwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMywgMHg0MCwKKwkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MTUsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTYsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNywgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDE4LCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDE5LCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWEsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgxYiwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYywgMHg0MCwKKwkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDFkLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MWUsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWYsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3MCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDcxLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDcyLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzMsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg3NCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3NSwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDc2LCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4NzcsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzgsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3OSwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDdhLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDdiLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4N2MsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg3ZCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3ZSwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDdmLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4NDAsCisJMHhhMSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHhhMSwgMHhkMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDFiLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4MTksIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MTcsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgxNSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDEzLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDExLCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MGYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHgwZCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwYiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDA5LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4MDcsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDUsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwMywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDAxLCAweGIwLCAweDAxLCAweDAwLCAweDNiLCAweDAxLCAweDIwLCAweDQ4LCAweGExLCAweDUxLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4NDcsIDB4MDEsIDB4MjIsIDB4NGIsCisJMHg3NCwgMHg3ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKKwkweDYwLCAweDAwLCAweDAwLCAweDRiLCAweDYwLCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGIxLAorCTB4N2UsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDgsIDB4MDEsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHg0NSwgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNSwgMHgwMCwgMHg4MCwgMHg0MCwKKwkweDk3LCAweDk4LCAweDAxLCAweDAwLCAweDE4LCAweDAwLCAweDAwLCAweGFhLCAweDk2LCAweDg4LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4ODAsIDB4NDMsIDB4OTcsIDB4ZjAsIDB4MDEsIDB4MDAsIDB4MDcsIDB4MDAsIDB4MDAsIDB4YWEsCisJMHg5NiwgMHg4OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDU4LCAweDA3LCAweDkwLCAweDAxLCAweDAwLCAweGQ4LCAweDlmLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4YTUsIDB4YjMsIDB4MDEsIDB4MDAsCisJMHhkOCwgMHgwMiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhmOCwgMHgwMiwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVjLCAweDA3LCAweDkwLCAweDAxLCAweDAwLAorCTB4ZDgsIDB4OWYsIDB4MDAsIDB4NDAsIDB4YmYsIDB4YjMsIDB4MDAsIDB4MDAsIDB4NWEsIDB4MDEsIDB4MjIsIDB4Y2MsCisJMHg4NSwgMHg3ZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MSwgMHgwNywgMHg5MCwgMHgwMSwgMHgwMCwKKwkweGQ4LCAweDlmLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4NDksIDB4YjEsIDB4MDEsIDB4MDAsIDB4YWUsIDB4MDMsIDB4MDAsIDB4Y2IsIDB4YTMsIDB4YzksIDB4MDEsIDB4MDAsCisJMHhkMCwgMHgxNCwgMHgwMCwgMHg0MCwgMHhhMSwgMHg5YiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDQ2LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ4LCAweGYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZDAsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4Y2EsCisJMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkNSwgMHhlMSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDA3LCAweDAwLCAweDAwLCAweDQwLCAweDYxLCAweDk5LCAweDAxLCAweDAwLCAweDIwLCAweDAwLCAweDAwLCAweDIwLAorCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4NjMsIDB4MDEsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhjYywgMHg4NSwgMHg5MywgMHgwMSwgMHgwMCwgMHhmOCwgMHgwMiwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGQwLCAweDE0LCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZmEsIDB4YmEsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmEsCisJMHhhNCwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHhiYywgMHhiMywgMHgwMSwgMHgwMCwKKwkweDAwLCAweDE0LCAweDJmLCAweDQwLCAweDgxLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGU3LAorCTB4YTcsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4YTksIDB4YjMsIDB4MDEsIDB4MDAsCisJMHhmZiwgMHgwMCwgMHgwMCwgMHhkZCwgMHg4MSwgMHg4OCwgMHgwMSwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgwLCAweGY0LCAweDAxLCAweDAwLCAweDczLCAweDAxLCAweDAwLCAweDQwLCAweDgwLCAweGM4LCAweDAxLCAweDAwLAorCTB4ODYsIDB4MDEsIDB4MDAsIDB4ZGQsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHgxMCwgMHhiMSwgMHgwMCwgMHgwMCwgMHg4NywgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDg4LCAweDAxLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDg5LCAweDAxLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4OGEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHg4YiwgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg4ZCwgMHgwMSwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDhmLCAweDAxLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4NTAsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4YjYsIDB4MDEsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg1MCwgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweGM0LCAweDAxLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGM1LCAweDAxLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4ODIsIDB4MDIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHg4MywgMHgwMiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgyOCwgMHgwMCwgMHhiOCwgMHgwMiwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDI4LCAweDAwLCAweGQ0LCAweDlmLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDI4LCAweDAwLAorCTB4ZDUsIDB4OWYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MjgsIDB4MDAsIDB4ZDYsIDB4OWYsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgyOCwgMHgwMCwgMHhkNywgMHg5ZiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgyOCwgMHgwMCwKKwkweDcyLCAweDAxLCAweDAwLCAweDQxLCAweDgxLCAweGMwLCAweDI4LCAweDAwLCAweDU1LCAweDAxLCAweDUxLCAweDQ5LAorCTB4ZmQsIDB4OTMsIDB4MjgsIDB4MDAsIDB4NTUsIDB4MDEsIDB4NTIsIDB4NGEsIDB4ZmQsIDB4OTMsIDB4MmEsIDB4MDAsCisJMHg1NSwgMHgwMSwgMHg1NSwgMHg0OSwgMHhmZCwgMHg4MywgMHgyYSwgMHgwMCwgMHg1NSwgMHgwMSwgMHg1NiwgMHg0YSwKKwkweGZkLCAweDgzLCAweDJhLCAweDAwLCAweDUwLCAweDAxLCAweDkxLCAweDgxLCAweDgwLCAweDMwLCAweDJhLCAweDAwLAorCTB4NTUsIDB4MDEsIDB4NDUsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MmEsIDB4MDAsIDB4NTAsIDB4MDEsIDB4OTEsIDB4ODIsCisJMHg4MCwgMHgzMCwgMHgyYSwgMHgwMCwgMHg1NSwgMHgwMSwgMHg0NiwgMHg0MCwgMHg4MSwgMHhiMiwgMHgyYSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDg5LCAweGIwLCAweDJiLCAweDAwLCAweDAwLCAweDAwLCAweDJmLCAweDQwLAorCTB4ODEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDAsIDB4NDAsIDB4NDksIDB4OTksIDB4MDEsIDB4MDAsCisJMHhiMywgMHgwMSwgMHgyMiwgMHhkZSwgMHhlMSwgMHg2ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YywKKwkweDQ5LCAweGMxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDgxLCAweGMwLCAweDAxLCAweDAwLAorCTB4OTIsIDB4MDEsIDB4YTIsIDB4NDQsIDB4ODEsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGMsCisJMHg0OSwgMHhkMSwgMHgwMSwgMHgwMCwgMHg5YSwgMHgwMSwgMHgyMiwgMHg0MCwgMHhlMSwgMHg2ZCwgMHgwMCwgMHgwMCwKKwkweDk2LCAweDAxLCAweGEyLCAweDQxLCAweDgxLCAweDUwLCAweDAwLCAweDAwLCAweDUwLCAweDAxLCAweDAwLCAweDQxLAorCTB4YmYsIDB4YjMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4YmYsIDB4YjMsIDB4MDEsIDB4MDAsCisJMHg1MCwgMHgwMSwgMHhhMCwgMHgwZiwgMHhiZCwgMHg2ZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkZSwKKwkweGUxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDQ5LCAweGMxLCAweDAxLCAweDAwLAorCTB4YjUsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MTksIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywgMHhmZiwgMHg4NSwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGRlLCAweDE5LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDQyLCAweGZmLAorCTB4ODcsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4ZmYsIDB4ZTEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg0OSwgMHhjMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZiwgMHhmZiwKKwkweGUxLCAweGIxLCAweDAxLCAweDAwLCAweDA4LCAweDE0LCAweDAwLCAweGE0LCAweDgwLCAweGNjLCAweDAxLCAweDAwLAorCTB4YWEsIDB4MDEsIDB4MjYsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCisJMHg4NSwgMHhjMCwgMHgwMSwgMHgwMCwgMHhhOCwgMHgwMSwgMHhhMiwgMHg0YywgMHg4MSwgMHg1MCwgMHgwMCwgMHgwMCwKKwkweGI0LCAweDAxLCAweDIyLCAweGQyLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweGFmLCAweDAxLCAweDIyLCAweDQxLAorCTB4YTUsIDB4NmYsIDB4MDAsIDB4MDAsIDB4NTAsIDB4MDEsIDB4YTIsIDB4ZTAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhkMiwgMHhjMSwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1YywKKwkweDg5LCAweDkwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDQyLCAweDgwLCAweGIyLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4NDEsIDB4NDMsIDB4ODAsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsCisJMHg4OCwgMHg5NCwgMHgwMSwgMHgwMCwgMHg1NSwgMHgwMSwgMHgwMCwgMHg0NCwgMHhlMCwgMHhiMSwgMHgwMCwgMHgwMCwKKwkweGIxLCAweDAxLCAweDAwLCAweDQ4LCAweDQ5LCAweGMxLCAweDAwLCAweDAwLCAweGFmLCAweDAxLCAweDAwLCAweDViLAorCTB4ODksIDB4OTAsIDB4MDAsIDB4MDAsIDB4YTgsIDB4OWYsIDB4MDAsIDB4YTAsIDB4OWUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwMCwgMHg0MCwKKwkweDQ5LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDIzLCAweDQwLCAweDgxLCAweGIwLCAweDAxLCAweDAwLAorCTB4YmUsIDB4MDEsIDB4MjIsIDB4ZGUsIDB4ZTEsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGMsCisJMHg0OSwgMHhjMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4MSwgMHhjMCwgMHgwMSwgMHgwMCwKKwkweGI5LCAweDAxLCAweGEyLCAweDQ0LCAweDgxLCAweDZjLCAweDAwLCAweDAwLCAweDUwLCAweDAxLCAweDAwLCAweDQzLAorCTB4YmYsIDB4YjMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MTgsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg0MCwgMHhmOCwgMHg4MCwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHhmMCwKKwkweDgwLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NTUsIDB4MDEsIDB4MDAsIDB4NDAsCisJMHhlMSwgMHhiMSwgMHgwMCwgMHgwMCwgMHhjNiwgMHgwMSwgMHgwMCwgMHg0MCwgMHg5MSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDkxLCAweGIwLCAweDAxLCAweDAwLCAweGQwLCAweDE0LCAweDJlLCAweDQwLAorCTB4NDksIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDUsIDB4MDAsIDB4MDAsIDB4NDAsIDB4YTMsIDB4OWIsIDB4MDEsIDB4MDAsCisJMHgwOCwgMHgwMCwgMHgwMCwgMHhkZCwgMHg4MSwgMHhmNCwgMHgwMSwgMHgwMCwgMHhjYiwgMHgwMSwgMHgwMCwgMHg0MCwKKwkweDgwLCAweGM4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDEwLCAweGIxLCAweDAwLCAweDAwLAorCTB4ZDEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NTMsIDB4MDEsIDB4MDAsIDB4ZGUsCisJMHhhMSwgMHhiMywgMHgwMCwgMHgwMCwgMHhlMywgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweGU1LCAweDAxLCAweDAwLCAweDQwLCAweDgxLCAweGIwLCAweDAwLCAweDAwLCAweGViLCAweDAxLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4NTIsIDB4MDEsIDB4MDAsIDB4ZGYsIDB4ZTEsIDB4YjEsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhkMCwgMHhiYSwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkZSwKKwkweGExLCAweGIxLCAweDAxLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweGQyLCAweGE1LCAweGU3LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZDIsIDB4YzEsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhkYiwgMHgwMSwgMHgyMiwgMHg0NCwgMHhjMSwgMHg1MywgMHgwMCwgMHgwMCwKKwkweGRhLCAweDAxLCAweDg0LCAweDQxLCAweDgxLCAweDQwLCAweDAwLCAweDAwLCAweGRlLCAweDAxLCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDAsIDB4NDUsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHhkNSwgMHgwMSwgMHgwMCwgMHg0MSwgMHhhMSwgMHhjMSwgMHgwMCwgMHgwMCwgMHhkYSwgMHgwMiwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGY4LCAweDAyLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4NTUsIDB4MDEsIDB4MDAsIDB4ZGQsIDB4YTEsIDB4YjEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMCwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhhNSwgMHg5YiwgMHgwMSwgMHgwMCwKKwkweGRhLCAweDAyLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweGQzLAorCTB4YTcsIDB4Y2IsIDB4MDEsIDB4MDAsIDB4ZjgsIDB4MDIsIDB4MDAsIDB4ZTAsIDB4YTUsIDB4YjMsIDB4MDAsIDB4MDAsCisJMHgwMywgMHgwMCwgMHgwMCwgMHg0MCwgMHhhMywgMHg5YiwgMHgwMSwgMHgwMCwgMHg1MywgMHgwMSwgMHgwMCwgMHhkZSwKKwkweGExLCAweGIzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweGJmLCAweGIzLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZGUsIDB4ODEsIDB4OTAsIDB4MDEsIDB4MDAsIDB4NTAsIDB4MDEsIDB4YTIsIDB4YmEsCisJMHg4MCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg2MCwgMHgwMCwgMHgwMCwgMHhkZSwgMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweGU4LCAweDAxLCAweGE4LCAweGIxLCAweDgwLCAweDMwLCAweDAwLCAweDAwLCAweDUyLCAweDAxLCAweDAwLCAweDQwLAorCTB4ZTAsIDB4YjEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDAsIDB4YmEsIDB4YjMsIDB4MDEsIDB4MDAsCisJMHg2YiwgMHgwMiwgMHgwMCwgMHg0MCwgMHg4MSwgMHg5OCwgMHgwMSwgMHgwMCwgMHg2MCwgMHgwMiwgMHgwMCwgMHg0ZCwKKwkweDgzLCAweDMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweGUxLCAweGIzLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4ZTMsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsCisJMHhlNSwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHhlOSwgMHhiMywgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweGViLCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LAorCTB4ZjUsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4ZjcsIDB4YjMsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHhmOSwgMHhiMywgMHgwMSwgMHgwMCwgMHhmOSwgMHgwMSwgMHgyMiwgMHg0MCwKKwkweDhmLCAweDZmLCAweDAwLCAweDAwLCAweDc4LCAweDAyLCAweDAwLCAweDQwLCAweDgxLCAweDk4LCAweDAxLCAweDAwLAorCTB4NjAsIDB4MDIsIDB4MDAsIDB4YzcsIDB4ODMsIDB4MzAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHg5OCwgMHgwMSwgMHgwMCwgMHg2MCwgMHgwMiwgMHgwMCwgMHg0MiwgMHg4MywgMHgzMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGU4LCAweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGU5LAorCTB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZWEsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhlYiwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4NSwKKwkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGVjLCAweGYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZWQsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjIsCisJMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOSwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGFjLCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGFiLAorCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjgsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhiOSwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiYSwKKwkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGJiLCAweGYwLCAweGIxLCAweDAxLCAweDAwLAorCTB4MGMsIDB4MDIsIDB4YjgsIDB4NDAsIDB4ODEsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHg5MCwgMHgwMSwgMHgwMCwgMHgwZSwgMHgwMiwgMHhiOSwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDgxLCAweDkwLCAweDAxLCAweDAwLCAweDEwLCAweDAyLCAweGJhLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4ODEsIDB4OTAsIDB4MDEsIDB4MDAsCisJMHgxMiwgMHgwMiwgMHhiYiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywKKwkweDgxLCAweDkwLCAweDAxLCAweDAwLCAweDE0LCAweDAyLCAweGJjLCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4ODEsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MTYsIDB4MDIsIDB4YmQsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHg4MSwgMHg5MCwgMHgwMSwgMHgwMCwKKwkweDE4LCAweDAyLCAweGJlLCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ2LAorCTB4ODEsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MWEsIDB4MDIsIDB4YmYsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywgMHg4MSwgMHg5MCwgMHgwMSwgMHgwMCwgMHgxYywgMHgwMiwgMHhjOCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ4LCAweDgxLCAweDkwLCAweDAxLCAweDAwLAorCTB4MWUsIDB4MDIsIDB4YzksIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDksCisJMHg4MSwgMHg5MCwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMiwgMHhjYSwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDRhLCAweDgxLCAweDkwLCAweDAxLCAweDAwLCAweDIyLCAweDAyLCAweGNiLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGIsIDB4ODEsIDB4OTAsIDB4MDEsIDB4MDAsCisJMHgyNCwgMHgwMiwgMHhjYywgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YywKKwkweDgxLCAweDkwLCAweDAxLCAweDAwLCAweDI2LCAweDAyLCAweGNkLCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGQsIDB4ODEsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MjgsIDB4MDIsIDB4Y2UsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZSwgMHg4MSwgMHg5MCwgMHgwMSwgMHgwMCwKKwkweDJhLCAweDAyLCAweGNmLCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRmLAorCTB4ODEsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MmMsIDB4MDIsIDB4ZjAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHg4MSwgMHg5MCwgMHgwMSwgMHgwMCwgMHgyZSwgMHgwMiwgMHhmMSwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUxLCAweDgxLCAweDkwLCAweDAxLCAweDAwLAorCTB4MzAsIDB4MDIsIDB4ZjIsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTIsCisJMHg4MSwgMHg5MCwgMHgwMSwgMHgwMCwgMHgzMiwgMHgwMiwgMHhmMywgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDUzLCAweDgxLCAweDkwLCAweDAxLCAweDAwLCAweDM0LCAweDAyLCAweGY0LCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTQsIDB4ODEsIDB4OTAsIDB4MDEsIDB4MDAsCisJMHgzNiwgMHgwMiwgMHhmNSwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1NSwKKwkweDgxLCAweDkwLCAweDAxLCAweDAwLCAweDM4LCAweDAyLCAweGY2LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTYsIDB4ODEsIDB4OTAsIDB4MDEsIDB4MDAsIDB4M2EsIDB4MDIsIDB4ZjcsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1NywgMHg4MSwgMHg5MCwgMHgwMSwgMHgwMCwKKwkweDNjLCAweDAyLCAweGY4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDU4LAorCTB4ODEsIDB4OTAsIDB4MDEsIDB4MDAsIDB4M2UsIDB4MDIsIDB4ZjksIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1OSwgMHg4MSwgMHg5MCwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMiwgMHhmYSwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVhLCAweDgxLCAweDkwLCAweDAxLCAweDAwLAorCTB4NDIsIDB4MDIsIDB4ZmIsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWIsCisJMHg4MSwgMHg5MCwgMHgwMSwgMHgwMCwgMHg0NCwgMHgwMiwgMHhmYywgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDVjLCAweDgxLCAweDkwLCAweDAxLCAweDAwLCAweDQ2LCAweDAyLCAweGZkLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWQsIDB4ODEsIDB4OTAsIDB4MDEsIDB4MDAsCisJMHg0OCwgMHgwMiwgMHhmZSwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1ZSwKKwkweDgxLCAweDkwLCAweDAxLCAweDAwLCAweDRhLCAweDAyLCAweGZmLCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NWYsIDB4ODEsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhhNSwgMHg5YiwgMHgwMSwgMHgwMCwKKwkweGQ4LCAweDAyLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGY4LCAweDAyLCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4ZDAsIDB4MTQsIDB4MmUsIDB4MDYsIDB4YTUsIDB4YjMsIDB4MDEsIDB4MDAsCisJMHg0MCwgMHgwMCwgMHgwMCwgMHhkMywgMHhhNywgMHhjYiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwKKwkweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYxLCAweGYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjIsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjQsCisJMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmNSwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGZhLCAweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZiLAorCTB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmMsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhlYiwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlZSwKKwkweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGVmLCAweGYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjMsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjYsCisJMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmZCwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweGRiLCAweDAxLCAweDAwLCAweGM3LCAweGUxLCAweGIxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4NjYsIDB4MDIsIDB4MDAsIDB4NDgsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg1MSwgMHg0MCwgMHgxYSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAorCTB4NjMsIDB4MDIsIDB4YTIsIDB4NDEsIDB4ODMsIDB4NTAsIDB4MDAsIDB4MDAsIDB4NWYsIDB4MDIsIDB4NDksIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MiwgMHg0MCwgMHgxYywgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDRlLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDQ2LCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4NjgsIDB4MDIsIDB4YTIsIDB4NDEsIDB4ODMsIDB4NTAsIDB4MDAsIDB4MDAsCisJMHg1ZiwgMHgwMiwgMHg0YSwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMCwKKwkweDllLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweGQ4LCAweGIzLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4YTEsIDB4ZDAsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTIsCisJMHhkMiwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhNCwgMHhkNCwgMHhiMywgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGQwLCAweGQ2LCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQxLAorCTB4ZGMsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDIsIDB4ZGUsIDB4YjMsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg4OCwgMHhkYSwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkNCwKKwkweDhlLCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQzLCAweGU2LCAweGIzLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4YWMsIDB4ZWMsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OTksCisJMHhmYSwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkNSwgMHhlMCwgMHhiMywgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGQ1LCAweGUyLCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ1LAorCTB4ZTQsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDUsIDB4ZTgsIDB4YjMsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhkNSwgMHhlYSwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkNSwKKwkweGY0LCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ1LCAweGY2LCAweGIzLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZDUsIDB4ZjgsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YzcsCisJMHhhOSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZiwgMHg0MCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDg0LCAweDAyLCAweDAwLCAweDQwLCAweDkxLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAorCTB4OTEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDcsIDB4MDAsIDB4MDAsIDB4NDAsIDB4YTMsIDB4OWIsIDB4MDEsIDB4MDAsCisJMHgwOCwgMHgwMCwgMHgwMCwgMHhkZCwgMHg4MSwgMHhmNCwgMHgwMSwgMHgwMCwgMHg4OCwgMHgwMiwgMHgwMCwgMHg0MCwKKwkweDgwLCAweGM4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDEwLCAweGIxLCAweDAwLCAweDAwLAorCTB4OGQsIDB4MDIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4OTgsIDB4MDIsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg5OCwgMHgwMiwgMHgwMCwgMHg0NiwgMHhhMywgMHhiMywgMHgwMCwgMHgwMCwKKwkweDliLCAweDAyLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGExLCAweDAyLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4OGYsIDB4MDIsIDB4MjMsIDB4NTAsIDB4YTUsIDB4NmYsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHhhNSwgMHhiMywgMHgwMSwgMHgwMCwgMHhlOCwgMHgwMiwgMHgwMCwgMHg0MiwKKwkweGE1LCAweDYzLCAweDAxLCAweDAwLCAweGY4LCAweDAyLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4ZDAsIDB4MTQsIDB4MmQsIDB4NDAsIDB4NDksIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDAsCisJMHhiYSwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkZSwgMHhhMSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDAwLCAweGIwLCAweDAxLCAweDAwLCAweDk3LCAweDAyLCAweDIyLCAweDQ0LAorCTB4YTUsIDB4NTMsIDB4MDAsIDB4MDAsIDB4OTQsIDB4MDIsIDB4MDAsIDB4NDEsIDB4YTEsIDB4YzEsIDB4MDAsIDB4MDAsCisJMHg1NSwgMHgwMSwgMHgwMCwgMHhkZCwgMHhhMSwgMHhiMSwgMHgwMCwgMHgwMCwgMHhlOCwgMHgwMiwgMHgwMCwgMHhkZSwKKwkweGExLCAweDMzLCAweDAxLCAweDAwLCAweGY4LCAweDAyLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4NTUsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsCisJMHhiZiwgMHhiMywgMHgwMSwgMHgwMCwgMHg1MCwgMHgwMSwgMHhhMiwgMHhkMiwgMHg3NywgMHg3ZCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGQyLCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGRlLAorCTB4NjMsIDB4YjEsIDB4MDEsIDB4MDAsIDB4OWUsIDB4MDIsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHg1NSwgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhlOCwgMHgwMiwgMHgwMCwgMHg1NCwKKwkweGE1LCAweDMzLCAweDAxLCAweDAwLCAweGY4LCAweDAyLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4ZDAsIDB4MTQsIDB4MmQsIDB4NDAsIDB4NDksIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsCisJMHhkMCwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHhkMiwgMHhiMywgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGY4LCAweGQ0LCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LAorCTB4ZDYsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MDgsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHhhYywgMHgwMiwgMHgwMCwgMHg0MCwgMHg4MSwgMHg5OCwgMHgwMSwgMHgwMCwgMHg2MCwgMHgwMiwgMHgwMCwgMHg0NiwKKwkweDgzLCAweDMwLCAweDAxLCAweDAwLCAweDU1LCAweDAxLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4YTAsIDB4OWUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTgsCisJMHg0MywgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlOSwgMHg0NSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGVhLCAweDQ5LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGViLAorCTB4YTEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGYsIDB4NDAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweGQwLCAweDE0LCAweDJlLCAweDQwLCAweDQ5LCAweGIxLCAweDAxLCAweDAwLCAweDA1LCAweDAwLCAweDAwLCAweDQwLAorCTB4YTMsIDB4OWIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4YzEsIDB4YjMsIDB4MDEsIDB4MDAsCisJMHgwOCwgMHgwMCwgMHgwMCwgMHhkZCwgMHg4MSwgMHhmNCwgMHgwMSwgMHgwMCwgMHhiZCwgMHgwMiwgMHgwMCwgMHg0MCwKKwkweDEwLCAweGM5LCAweDAwLCAweDAwLCAweGMzLCAweDAyLCAweDAwLCAweDA1LCAweDgxLCAweGIwLCAweDAwLCAweDAwLAorCTB4NTAsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4Y2IsIDB4MDIsIDB4MDAsIDB4MDUsCisJMHg4MSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweGQwLCAweDAyLCAweDAwLCAweDQ0LCAweGE1LCAweGIzLCAweDAwLCAweDAwLCAweGQyLCAweDAyLCAweDAwLCAweDQ0LAorCTB4YTUsIDB4YjMsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4NDAsIDB4YTQsIDB4ZTcsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHg4MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHhjMSwKKwkweGYwLCAweDg5LCAweDAxLCAweDAwLCAweGM4LCAweDAyLCAweDIyLCAweDQxLCAweDgxLCAweDUwLCAweDAwLCAweDAwLAorCTB4YzQsIDB4MDIsIDB4MDAsIDB4NDEsIDB4YzEsIDB4YzMsIDB4MDAsIDB4MDAsIDB4ZGEsIDB4MDIsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhmOCwgMHgwMiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDU1LCAweDAxLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDQwLAorCTB4YTQsIDB4ZTcsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4OTEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHhmZiwgMHhmZiwgMHgwMCwgMHhjOSwgMHhmMCwgMHg4OSwgMHgwMSwgMHgwMCwgMHhjOCwgMHgwMiwgMHgyMiwgMHg0MSwKKwkweDgxLCAweDUwLCAweDAwLCAweDAwLCAweGNjLCAweDAyLCAweDAwLCAweDQxLCAweGMxLCAweGMzLCAweDAwLCAweDAwLAorCTB4ZmYsIDB4ZmYsIDB4MDAsIDB4ZGUsIDB4ODUsIDB4ODksIDB4MDEsIDB4MDAsIDB4YzgsIDB4MDIsIDB4MDAsIDB4YzIsCisJMHhlMCwgMHhiMSwgMHgwMCwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHhkZSwgMHg5NSwgMHg4OSwgMHgwMSwgMHgwMCwKKwkweGM4LCAweDAyLCAweDAwLCAweGNhLCAweGUwLCAweGIxLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGU3LCAweGE3LCAweGIzLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4YTksIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg0OSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhhZSwgMHgwMywgMHgwMCwgMHhjYiwgMHhhMywgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDIwLCAweDQ2LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQyLAorCTB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDMsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhkNCwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkMCwKKwkweGUxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQxLCAweDYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4MjAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4ZTIsIDB4MDIsIDB4YTgsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHhjYywgMHg4NSwgMHg5MywgMHgwMSwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhlNywgMHhhNywgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkOCwKKwkweGE5LCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDQ5LCAweGIxLCAweDAxLCAweDAwLAorCTB4YWUsIDB4MDMsIDB4MDAsIDB4Y2IsIDB4YTMsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg0NiwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkMiwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGQwLCAweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQzLAorCTB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZTEsIDB4MDIsIDB4MDAsIDB4ZDQsIDB4ZTEsIDB4YjEsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGEyLCAweGNjLAorCTB4ODUsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4ODEsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHhmYSwgMHgwMiwgMHhhMiwgMHg0MSwgMHg4MSwgMHg1MCwgMHgwMCwgMHgwMCwgMHhmOSwgMHgwMiwgMHhhMiwgMHhmMiwKKwkweDgwLCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweGNjLCAweDg1LCAweDgzLCAweDAxLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweGI1LCAweDAzLCAweDAwLCAweDQwLCAweGExLCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJmLCAweDQxLAorCTB4OTksIDB4YjMsIDB4MDEsIDB4MDAsIDB4MGEsIDB4MDMsIDB4MjIsIDB4NDQsIDB4ODEsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgxMiwgMHgwMywgMHgyMiwgMHg0OCwgMHg4MSwgMHg2YywgMHgwMCwgMHgwMCwgMHgwYywgMHgwMywgMHgyMiwgMHg0YywKKwkweDgxLCAweDZjLCAweDAwLCAweDAwLCAweDE2LCAweDAzLCAweDIyLCAweDUwLCAweDgxLCAweDZjLCAweDAwLCAweDAwLAorCTB4MTcsIDB4MDMsIDB4MjIsIDB4NTQsIDB4ODEsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MTksIDB4MDMsIDB4MjIsIDB4NTgsCisJMHg4MSwgMHg2YywgMHgwMCwgMHgwMCwgMHgxZSwgMHgwMywgMHgyMiwgMHg1YywgMHg4MSwgMHg2YywgMHgwMCwgMHgwMCwKKwkweDUwLCAweDAxLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGJjLAorCTB4MDksIDB4YjAsIDB4MDEsIDB4MDAsIDB4ZGQsIDB4OWYsIDB4MDAsIDB4Y2EsIDB4MDEsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwMywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKKwkweGYzLCAweDgzLCAweDAxLCAweDAwLCAweDEwLCAweDAzLCAweGEyLCAweDQyLCAweDA1LCAweDZjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MDUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ZGQsIDB4OWYsIDB4MjIsIDB4Y2EsCisJMHgwNywgMHgxNCwgMHgwMCwgMHgwMCwgMHhkZCwgMHg5ZiwgMHgwMCwgMHg0NSwgMHhmMywgMHg5MywgMHgwMCwgMHgwMCwKKwkweGRkLCAweDlmLCAweDIwLCAweDQzLCAweDk1LCAweDZmLCAweDAwLCAweDAwLCAweGRkLCAweDlmLCAweDgwLCAweGNhLAorCTB4MDUsIDB4MzAsIDB4MDAsIDB4MDAsIDB4ZGQsIDB4OWYsIDB4MjIsIDB4MDEsIDB4ODAsIDB4MzAsIDB4MDAsIDB4MDAsCisJMHhkZCwgMHg5ZiwgMHgwMCwgMHhjYiwgMHhkYiwgMHg5MSwgMHgwMCwgMHgwMCwgMHg1NywgMHgwMSwgMHgwMCwgMHhiYywKKwkweGFiLCAweGIzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGJjLCAweGIxLCAweGIzLCAweDAxLCAweDAwLAorCTB4ZGQsIDB4OWYsIDB4MDAsIDB4Y2EsIDB4Y2YsIDB4YjMsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4Y2EsCisJMHg4MSwgMHg4OCwgMHgwMSwgMHgwMCwgMHhkZCwgMHg5ZiwgMHhhMiwgMHg0MCwgMHg3NCwgMHg3ZCwgMHgwMCwgMHgwMCwKKwkweDYwLCAweDAwLCAweDIwLCAweDQwLCAweDYwLCAweDk5LCAweDAxLCAweDAwLCAweDFiLCAweDAzLCAweGE4LCAweGIxLAorCTB4ODIsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MWEsIDB4MDMsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHhkZCwgMHg5ZiwgMHgwMCwgMHhjYSwgMHg3OSwgMHhiMywgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRlLCAweDgxLCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4Y2IsIDB4ODMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgyMiwgMHgwMywgMHhhMiwgMHg0MSwgMHg4MSwgMHg1MCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDQ1LCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MmQsIDB4MDMsIDB4OTEsIDB4ODIsIDB4ODIsIDB4MzAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg4YSwgMHg4MCwgMHhiMCwgMHgwMSwgMHgwMCwgMHhhZSwgMHg5ZiwgMHgwMCwgMHg0MCwKKwkweDgwLCAweGNlLCAweDAxLCAweDAwLCAweDJiLCAweDAzLCAweGE2LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4MmQsIDB4MDMsIDB4NTYsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4YjUsIDB4MDMsIDB4MDAsIDB4NDAsCisJMHhhMSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MywgMHgwNywgMHg5MCwgMHgwMSwgMHgwMCwKKwkweGI1LCAweDAzLCAweDAwLCAweDQwLCAweGExLCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUyLAorCTB4MDcsIDB4OTAsIDB4MDEsIDB4MDAsIDB4ZDgsIDB4OWYsIDB4MDAsIDB4NDEsIDB4OGIsIDB4YjMsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZSwgMHg4MSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwKKwkweGNkLCAweDgzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDQ2LCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAorCTB4MzIsIDB4MDMsIDB4YTIsIDB4NDEsIDB4ODEsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NiwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKKwkweDNkLCAweDAzLCAweDkxLCAweDgxLCAweDgyLCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDg5LAorCTB4ODAsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YWUsIDB4OWYsIDB4MDAsIDB4NDAsIDB4ODAsIDB4Y2UsIDB4MDEsIDB4MDAsCisJMHgzYiwgMHgwMywgMHhhNiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgzZCwgMHgwMywgMHg1NSwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGI1LCAweDAzLCAweDAwLCAweDQwLCAweGExLCAweDk5LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTIsIDB4MDcsIDB4OTAsIDB4MDEsIDB4MDAsIDB4YjUsIDB4MDMsIDB4MDAsIDB4NDAsCisJMHhhMSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MywgMHgwNywgMHg5MCwgMHgwMSwgMHgwMCwKKwkweGQ4LCAweDlmLCAweDAwLCAweDQxLCAweDhiLCAweGIzLCAweDAwLCAweDAwLCAweGIwLCAweDAzLCAweDAwLCAweDQwLAorCTB4YTEsIDB4OTksIDB4MDEsIDB4MDAsIDB4YzQsIDB4MTQsIDB4MmYsIDB4NDAsIDB4OTksIDB4YjMsIDB4MDEsIDB4MDAsCisJMHg1NywgMHgwMSwgMHgwMCwgMHg0MCwgMHg0OSwgMHhiMSwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDMwLCAweDk0LCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDkwLCAweDAwLCAweGY4LAorCTB4ODAsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4ZjIsIDB4ODgsIDB4ZTQsIDB4MDEsIDB4MDAsCisJMHgyMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgyMCwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1ZiwKKwkweDIzLCAweDkxLCAweDAxLCAweDAwLCAweDRkLCAweDAzLCAweDFmLCAweDkxLCAweDgwLCAweDMyLCAweDAwLCAweDAwLAorCTB4MzAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MjAsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWYsCisJMHgyMywgMHg5MSwgMHgwMSwgMHgwMCwgMHg1MCwgMHgwMywgMHgxZiwgMHg5MSwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDQwLCAweDAwLCAweDAwLCAweDQwLCAweDIwLCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVmLAorCTB4MjMsIDB4OTEsIDB4MDEsIDB4MDAsIDB4NTMsIDB4MDMsIDB4MWYsIDB4OTEsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1ZiwgMHgyMywgMHg5MSwgMHgwMSwgMHgwMCwgMHg1NSwgMHgwMywgMHgxZiwgMHg5MSwKKwkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDgwLCAweDQwLCAweDIwLCAweDk5LCAweDAxLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsCisJMHg4NCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMiwgMHg0OCwgMHg4NCwgMHg4NCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDVmLCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVjLAorCTB4OGYsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsIDB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg1YSwgMHgwMywgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwMCwgMHg0NywKKwkweDhlLCAweGM4LCAweDAxLCAweDAwLCAweDU4LCAweDAzLCAweDAwLCAweDVjLCAweDhmLCAweDgwLCAweDAwLCAweDAwLAorCTB4ZTAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjEsIDB4OTksIDB4MDEsIDB4MDAsIDB4NTgsIDB4MTUsIDB4MmQsIDB4NDAsCisJMHg4ZCwgMHhiMCwgMHgwMSwgMHgwMCwgMHhkMCwgMHgxNCwgMHgyZCwgMHhmMCwgMHg4OCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGZhLCAweDhhLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ1LAorCTB4ODEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDcsIDB4MDAsIDB4MDAsIDB4NDUsIDB4ODIsIDB4ODgsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywgMHg4YiwgMHhmMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0OCwKKwkweDgzLCAweGUwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ2LCAweDgyLCAweDk0LCAweDAxLCAweDAwLAorCTB4MjAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4NjAsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCisJMHg4ZCwgMHhjMCwgMHgwMSwgMHgwMCwgMHg3NCwgMHgwMywgMHgyMiwgMHg1ZiwgMHg4ZCwgMHg2YywgMHgwMCwgMHgwMCwKKwkweDY1LCAweDAzLCAweGEyLCAweDQxLCAweDgxLCAweDUwLCAweDAwLCAweDAwLCAweDYzLCAweDAzLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODUsIDB4OTgsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKKwkweDg2LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDFjLCAweDAwLCAweDQzLCAweDg2LCAweGQ4LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4YTYsIDB4NDEsIDB4ODUsIDB4NTAsIDB4MDEsIDB4MDAsIDB4NzAsIDB4MDMsIDB4MDAsIDB4NDEsCisJMHg4MywgMHhlMCwgMHgwMCwgMHgwMCwgMHg2ZSwgMHgwMywgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ4LCAweDg1LCAweGUwLCAweDAxLCAweDAwLCAweGQwLCAweDE0LCAweDJmLCAweDQ2LAorCTB4ODQsIDB4OTQsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4NjAsIDB4OTksIDB4MDEsIDB4MDAsCisJMHhjMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDAsIDB4MDAsIDB4NDUsIDB4ODAsIDB4ODgsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywgMHg4YiwgMHhmMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHg0MCwKKwkweDgzLCAweDk4LCAweDAxLCAweDAwLCAweDg1LCAweDAzLCAweGEwLCAweDQxLCAweDgxLCAweDUwLCAweDAwLCAweDAwLAorCTB4ODMsIDB4MDMsIDB4MDAsIDB4NDEsIDB4ODIsIDB4ZTgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDEsCisJMHg4ZSwgMHhjMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4NDksIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDAsIDB4NDAsIDB4ODMsIDB4OTgsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgzOSwgMHgwMCwgMHg0MCwgMHg0NSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDhiLCAweDAzLCAweGEyLCAweDQxLCAweDgzLCAweDUwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MGIsIDB4MDAsIDB4MDAsIDB4NDQsCisJMHg4MiwgMHhmNCwgMHgwMSwgMHgwMCwgMHgxYSwgMHgxNSwgMHgwMCwgMHhhNiwgMHg4NiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDcwLCAweDE1LCAweDAwLCAweDQwLCAweDQ1LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDA4LCAweDAwLCAweDQwLAorCTB4ZjEsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgzOSwgMHgwMCwgMHg0MCwgMHhlMSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDYxLCAweDk5LCAweDAxLCAweDAwLCAweDcwLCAweDE1LCAweDAwLCAweDQzLCAweDYyLCAweDk5LCAweDAxLCAweDAwLAorCTB4OTUsIDB4MDMsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4OTcsIDB4MDMsIDB4MjIsIDB4NWEsCisJMHg3MywgMHg3ZCwgMHgwMCwgMHgwMCwgMHg3YSwgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDk4LCAweDAzLCAweGE4LCAweGIxLCAweDdlLCAweDMxLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDAwLCAweDQyLAorCTB4ODQsIDB4YzgsIDB4MDEsIDB4MDAsIDB4OTAsIDB4MDMsIDB4YTIsIDB4NDEsIDB4ODMsIDB4NTAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4NTgsIDB4MTUsIDB4MmQsIDB4NDAsCisJMHg4ZCwgMHhiMCwgMHgwMSwgMHgwMCwgMHhkMCwgMHgxNCwgMHgyZCwgMHhmMCwgMHg4OCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDhmLCAweGIwLCAweDAxLCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweGE2LAorCTB4OTAsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MDAsIDB4NDgsIDB4OTAsIDB4OTgsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHg5MywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmYSwKKwkweDhhLCAweGIwLCAweDAxLCAweDAwLCAweDgwLCAweDAzLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4MDIsIDB4MDAsIDB4MDAsIDB4YTYsIDB4ODAsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YWMsIDB4MDMsIDB4MjIsIDB4NDAsCisJMHg4MiwgMHg2YywgMHgwMCwgMHgwMCwgMHhiMCwgMHgwMywgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDU4LCAweDAzLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAorCTB4OGQsIDB4YzAsIDB4MDEsIDB4MDAsIDB4YjUsIDB4MDMsIDB4MjIsIDB4NWYsIDB4OGQsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHhhNywgMHgwMywgMHhhMiwgMHg0MSwgMHg5MywgMHg1MCwgMHgwMCwgMHgwMCwgMHhhNSwgMHgwMywgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGZmLCAweDA3LCAweDAwLCAweDQ3LCAweDg0LCAweDg4LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4YTYsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4ZWQsIDB4OWYsIDB4MDAsIDB4NDcsCisJMHg4MCwgMHgzMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMiwgMHgwMCwgMHg0NywgMHg4ZSwgMHhjOCwgMHgwMSwgMHgwMCwKKwkweGIwLCAweDAzLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LAorCTB4NTAsIDB4YjMsIDB4MDEsIDB4MDAsIDB4YmIsIDB4MDMsIDB4MjAsIDB4MTgsIDB4ODksIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHhhNiwgMHg4NCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHhhNiwKKwkweDg2LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDEwLCAweDAwLCAweDQwLCAweDU1LCAweDliLCAweDAxLCAweDAwLAorCTB4YmUsIDB4MDMsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4YTYsCisJMHg4NCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHhhNiwgMHg4NiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDEwLCAweDAwLCAweDQwLCAweDU1LCAweDliLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLAorCTB4NTAsIDB4ZDMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTgsIDB4NGYsIDB4YjMsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywgMHg0ZSwgMHhkMywgMHgwMSwgMHgwMCwgMHg2ZSwgMHgwMywgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDgyLCAweDAzLCAweDAwLCAweDQyLCAweDgwLCAweDMwLCAweDAxLCAweDAwLAorCTB4YjAsIDB4MDMsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4YzcsIDB4MDMsIDB4MjIsIDB4YTcsCisJMHg4ZiwgMHg2YywgMHgwMCwgMHgwMCwgMHg1YSwgMHgwMywgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweGM0LCAweDAzLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4YzgsIDB4MTQsIDB4MmUsIDB4YmIsIDB4ODUsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhlZSwgMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKKwkweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGEyLCAweGEwLCAweGIzLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4YTUsIDB4YjMsIDB4MDEsIDB4MDAsIDB4ZTEsIDB4OWYsIDB4MDAsIDB4Y2EsCisJMHhhNywgMHgzMywgMHgwMSwgMHgwMCwgMHhlMCwgMHg5ZiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGQ2LCAweDAzLCAweDIyLCAweDQyLAorCTB4NzUsIDB4NmYsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MDMsIDB4MjIsIDB4NDEsIDB4NzUsIDB4NmYsIDB4MDAsIDB4MDAsCisJMHhkYSwgMHgwMywgMHgxZSwgMHhjYSwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhkYywgMHgwMywgMHgxZiwgMHhjYSwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGNhLCAweGM5LCAweGIxLCAweDAxLCAweDAwLAorCTB4ZGQsIDB4OWYsIDB4MDAsIDB4NDIsIDB4NzUsIDB4YjMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4Y2EsCisJMHhjZCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhkZCwgMHg5ZiwgMHgwMCwgMHg0MSwgMHg3NSwgMHhiMywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGNhLCAweGNmLCAweGIxLCAweDAxLCAweDAwLCAweGRkLCAweDlmLCAweDAwLCAweDQwLAorCTB4NzUsIDB4YjMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODEsIDB4MDAsIDB4YTYsIDB4YzYsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHhkZCwgMHg5ZiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHhhNiwKKwkweGM2LCAweGIxLCAweDAxLCAweDAwLCAweGRkLCAweDlmLCAweDAwLCAweDQwLCAweDc1LCAweGIzLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg0NSwgMHgwMSwgMHgwMCwgMHg0ZCwgMHg5MywgMHgzMCwgMHgwMSwgMHgwMCwKKwkweDQ1LCAweDAxLCAweDAwLCAweDRlLCAweDkzLCAweDMwLCAweDAxLCAweDAwLCAweDQ1LCAweDAxLCAweDAwLCAweDRjLAorCTB4OTMsIDB4MzAsIDB4MDEsIDB4MDAsIDB4ZWMsIDB4OWYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHhkZCwgMHg5ZiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4NTQsIDB4OTUsIDB4MDAsIDB4NDAsCisJMHg0NSwgMHg5OSwgMHgwMSwgMHgwMCwgMHhkZCwgMHg5ZiwgMHgwMCwgMHhjYSwgMHhlNSwgMHhiMSwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4Y2MsIDB4MTQsIDB4MmUsIDB4NDAsIDB4ODcsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTIsCisJMHhhMCwgMHhiMywgMHgwMSwgMHgwMCwgMHgxNSwgMHgwNCwgMHgwMCwgMHg0MywgMHhiMiwgMHgzMywgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDY4LCAweGRhLCAweDg5LCAweGIwLCAweDAxLCAweDAwLCAweDdjLCAweDAwLCAweDAwLCAweDQwLAorCTB4OGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4ODksIDB4ZjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4OSwgMHhkMCwgMHgwMSwgMHgwMCwgMHgwMywgMHgwMCwgMHgwMCwgMHg0NCwKKwkweDg4LCAweDhjLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDg3LCAweGMwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4YTUsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MTUsIDB4MDQsIDB4MDAsIDB4NDMsCisJMHhiMiwgMHgzMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkYSwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDg3LCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAorCTB4YTUsIDB4YzMsIDB4MDEsIDB4MDAsIDB4MGIsIDB4MDQsIDB4MjIsIDB4NDQsIDB4ODksIDB4NTAsIDB4MDAsIDB4MDAsCisJMHgwYiwgMHgwNCwgMHgyMiwgMHg0NCwgMHg4YiwgMHg1MCwgMHgwMCwgMHgwMCwgMHhmYSwgMHgwMywgMHhhMiwgMHg1MCwKKwkweGE1LCAweDZmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLCAweGE1LCAweGUzLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4Y2EsIDB4YTcsIDB4YjMsIDB4MDEsIDB4MDAsIDB4ZTEsIDB4OWYsIDB4MDAsIDB4YmIsCisJMHg4NSwgMHgzMCwgMHgwMSwgMHgwMCwgMHhjYywgMHgxNCwgMHgyZSwgMHhkMiwgMHg5NSwgMHhjMywgMHgwMSwgMHgwMCwKKwkweGFlLCAweDAzLCAweDAwLCAweGNiLCAweGEzLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDIwLAorCTB4NDIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4ODEsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwOCwgMHgwNCwgMHhhMiwgMHg0MSwgMHg4MSwgMHg1MCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwNCwgMHhhMiwgMHhmMiwKKwkweDgwLCAweDMwLCAweDAwLCAweDAwLCAweGZhLCAweDAzLCAweDAwLCAweDQwLCAweGE1LCAweGIzLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4YTUsIDB4ZTMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4Y2EsCisJMHhhNywgMHhiMywgMHgwMSwgMHgwMCwgMHhlMSwgMHg5ZiwgMHgwMCwgMHhiYiwgMHg4NSwgMHgzMCwgMHgwMSwgMHgwMCwKKwkweGUwLCAweDlmLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDksIDB4MmIsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgxMCwgMHgwMCwgMHg0MCwgMHg4MywgMHg5OCwgMHgwMSwgMHgwMCwgMHhkYiwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweDk0LCAweGI0LCAweDhiLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDksCisJMHgyYiwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHg0MCwgMHg4MywgMHg5OCwgMHgwMSwgMHgwMCwKKwkweGRkLCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDk0LAorCTB4YjQsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGQ5LCAweDJiLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGRhLAorCTB4MjcsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDYsIDB4YzAsIDB4MDAsIDB4NDAsIDB4MmQsIDB4OTksIDB4MDEsIDB4MDAsCisJMHhkZSwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHg0MCwKKwkweDgzLCAweDk4LCAweDAxLCAweDAwLCAweDAyLCAweGM0LCAweDAwLCAweDQxLCAweDJjLCAweDk5LCAweDAxLCAweDAwLAorCTB4ZGUsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDAsIDB4NDAsCisJMHg4MywgMHg5OCwgMHgwMSwgMHgwMCwgMHgwNSwgMHg4MiwgMHgwMCwgMHg0MSwgMHgyYywgMHg5OSwgMHgwMSwgMHgwMCwKKwkweGRlLCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDJkLCAweDA0LCAweDgwLCAweDk0LAorCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MGMsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHgyOCwgMHgwNCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHg4MCwgMHgwMCwgMHg0MCwKKwkweDJkLCAweDk5LCAweDAxLCAweDAwLCAweGRlLCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MzEsIDB4MDQsIDB4MDAsIDB4MTIsCisJMHgxMCwgMHhjOSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0OCwgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwKKwkweGMwLCAweDQ5LCAweDgwLCAweDQwLCAweDBiLCAweDk4LCAweDAxLCAweDAwLCAweDgwLCAweDRiLCAweDgwLCAweDQwLAorCTB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4NDAsIDB4NGQsIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHg0ZiwgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHhjMCwgMHg1MCwgMHg4MCwgMHg0MCwKKwkweDBiLCAweDk4LCAweDAxLCAweDAwLCAweDgwLCAweDUyLCAweDgwLCAweDQwLCAweDBiLCAweDk4LCAweDAxLCAweDAwLAorCTB4NDAsIDB4NTQsIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4NTYsIDB4ODAsIDB4NDAsCisJMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHhjMCwgMHg1NywgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwKKwkweDgwLCAweDU5LCAweDgwLCAweDQwLCAweDBiLCAweDk4LCAweDAxLCAweDAwLCAweDQwLCAweDViLCAweDgwLCAweDQwLAorCTB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4NWQsIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsCisJMHhjMCwgMHg1ZSwgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg2MCwgMHg4MCwgMHg0MCwKKwkweDBiLCAweDk4LCAweDAxLCAweDAwLCAweDQwLCAweDYyLCAweDgwLCAweDQwLCAweDBiLCAweDk4LCAweDAxLCAweDAwLAorCTB4MDAsIDB4NjQsIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4YzAsIDB4NjUsIDB4ODAsIDB4NDAsCisJMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg2NywgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwKKwkweDQwLCAweDY5LCAweDgwLCAweDQwLCAweDBiLCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweDZiLCAweDgwLCAweDQwLAorCTB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4YzAsIDB4NmMsIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsCisJMHg4MCwgMHg2ZSwgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHg0MCwgMHg3MCwgMHg4MCwgMHg0MCwKKwkweDBiLCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweDcyLCAweDgwLCAweDQwLCAweDBiLCAweDk4LCAweDAxLCAweDAwLAorCTB4YzAsIDB4NzMsIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4ODAsIDB4NzUsIDB4ODAsIDB4NDAsCisJMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHg0MCwgMHg3NywgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDc5LCAweDgwLCAweDQwLCAweDBiLCAweDk4LCAweDAxLCAweDAwLCAweGMwLCAweDdhLCAweDgwLCAweDQwLAorCTB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4ODAsIDB4N2MsIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsCisJMHg0MCwgMHg3ZSwgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4NTksIDB4MDQsIDB4MDAsIDB4MTIsIDB4MTAsIDB4YzksIDB4MDAsIDB4MDAsCisJMHgwMCwgMHg4MCwgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MiwgMHg4MCwgMHg0MCwKKwkweDBiLCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweDg0LCAweDgwLCAweDQwLCAweDBiLCAweDk4LCAweDAxLCAweDAwLAorCTB4MDAsIDB4ODYsIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ODgsIDB4ODAsIDB4NDAsCisJMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4YSwgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDhjLCAweDgwLCAweDQwLCAweDBiLCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweDhlLCAweDgwLCAweDQwLAorCTB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4OTAsIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHg5MiwgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg5NCwgMHg4MCwgMHg0MCwKKwkweDBiLCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweDk2LCAweDgwLCAweDQwLCAweDBiLCAweDk4LCAweDAxLCAweDAwLAorCTB4MDAsIDB4OTgsIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4OWEsIDB4ODAsIDB4NDAsCisJMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg5YywgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDllLCAweDgwLCAweDQwLCAweDBiLCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweGEwLCAweDgwLCAweDQwLAorCTB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4YTIsIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHhhNCwgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHhhNiwgMHg4MCwgMHg0MCwKKwkweDBiLCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweGE4LCAweDgwLCAweDQwLCAweDBiLCAweDk4LCAweDAxLCAweDAwLAorCTB4MDAsIDB4YWEsIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4YWMsIDB4ODAsIDB4NDAsCisJMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHhhZSwgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweGIwLCAweDgwLCAweDQwLCAweDBiLCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweGIyLCAweDgwLCAweDQwLAorCTB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4YjQsIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHhiNiwgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHhiOCwgMHg4MCwgMHg0MCwKKwkweDBiLCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweGJhLCAweDgwLCAweDQwLCAweDBiLCAweDk4LCAweDAxLCAweDAwLAorCTB4MDAsIDB4YmMsIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4YmUsIDB4ODAsIDB4NDAsCisJMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODcsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg5NywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YiwgMHg4MCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAxLCAweDAwLCAweDAwLCAweGE2LCAweDgyLCAweGIxLCAweDAxLCAweDAwLCAweDgyLCAweDA0LCAweDg1LCAweDQxLAorCTB4OTcsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4OTcsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg5NywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YiwKKwkweDkwLCAweGIxLCAweDAxLCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweGE2LCAweDkyLCAweGIxLCAweDAxLCAweDAwLAorCTB4ODcsIDB4MDQsIDB4ODUsIDB4NDEsIDB4OTcsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg5MCwgMHgwNCwgMHg2MCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDgwLCAweGIxLCAweDAxLCAweDAwLAorCTB4ZmYsIDB4ZmYsIDB4ZjAsIDB4NGIsIDB4ODIsIDB4ODksIDB4MDEsIDB4MDAsIDB4OTMsIDB4MDQsIDB4NjAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YSwgMHg4MCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAxLCAweDAwLCAweGYwLCAweGE2LCAweDgyLCAweGIxLCAweDAxLCAweDAwLCAweDk2LCAweDA0LCAweDYwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4NGIsIDB4ODQsIDB4ODksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHhmMCwgMHhjMiwgMHgyNCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YSwKKwkweDkwLCAweGIxLCAweDAxLCAweDAwLCAweGZmLCAweGZmLCAweDgwLCAweDRiLCAweDkyLCAweDg5LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGEsIDB4OTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4YTYsCisJMHg5MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHg0YiwgMHg5NCwgMHg4OSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDgwLCAweGNhLCAweDk0LCAweGIwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4NGUsIDB4OTgsIDB4ZTQsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwNywgMHg5OCwgMHg5NCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywKKwkweDk5LCAweGUwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDk4LCAweDk0LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDksIDB4OTksIDB4ZTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGMsCisJMHg4OCwgMHg5NCwgMHgwMSwgMHgwMCwgMHhhNiwgMHgwNCwgMHg0NywgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweGFkLCAweDA0LCAweDIyLCAweDIwLCAweDg3LCAweDZmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFmLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweGE2LCAweDA0LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MWYsIDB4ODAsIDB4ODYsIDB4YjMsIDB4MDEsIDB4MDAsIDB4YjAsIDB4MDQsIDB4MjIsIDB4NGYsCisJMHg3NywgMHg3ZCwgMHgwMCwgMHgwMCwgMHhjMCwgMHgwNCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDRmLCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LAorCTB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YjEsIDB4MDQsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHhiOCwgMHgwNCwgMHgyMiwgMHg0YiwgMHg4OSwgMHg3YywgMHgwMCwgMHgwMCwgMHhiNiwgMHgwNCwgMHgyMiwgMHg0ZiwKKwkweDc3LCAweDdkLCAweDAwLCAweDAwLCAweGMwLCAweDA0LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YjYsIDB4MDQsIDB4YTgsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgyMCwgMHg4NywgMHhiMywgMHgwMSwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsCisJMHg5OSwgMHhiMCwgMHgwMSwgMHgwMCwgMHg2ZiwgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweGMxLCAweDA0LCAweGE4LCAweGIxLCAweDUyLCAweDMzLCAweDAwLCAweDAwLCAweGM2LCAweDA0LCAweDIyLCAweDRiLAorCTB4NTMsIDB4N2YsIDB4MDAsIDB4MDAsIDB4NmYsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjEsIDB4OTksIDB4MDEsIDB4MDAsCisJMHhjNCwgMHgwNCwgMHhhOCwgMHhiMSwgMHg3ZSwgMHgzMSwgMHgwMCwgMHgwMCwgMHhjMSwgMHgwNCwgMHhhMiwgMHg0MSwKKwkweDk5LCAweDUwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGEyLCAweDRmLCAweDc3LCAweGZkLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDRlLCAweDk4LCAweGU0LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4OTgsIDB4OTQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsCisJMHg5OSwgMHhlMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg5OCwgMHg5NCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ4LCAweDk5LCAweGUwLCAweDAxLCAweDAwLCAweGQ2LCAweDA0LCAweDAwLCAweDRjLAorCTB4ODgsIDB4OTQsIDB4MDAsIDB4MDAsIDB4ZDYsIDB4MDQsIDB4NDcsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHhkZCwgMHgwNCwgMHgyMiwgMHgyMCwgMHg4NywgMHg2ZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxZiwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHhkNiwgMHgwNCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDFmLCAweDgwLCAweDg2LCAweGIzLCAweDAxLCAweDAwLCAweGUwLCAweDA0LCAweDIyLCAweDRmLAorCTB4NzcsIDB4N2QsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4MDQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZiwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwKKwkweDYyLCAweGIxLCAweDAxLCAweDAwLCAweGUxLCAweDA0LCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4ZTgsIDB4MDQsIDB4MjIsIDB4NGEsIDB4ODksIDB4N2MsIDB4MDAsIDB4MDAsIDB4ZTYsIDB4MDQsIDB4MjIsIDB4NGYsCisJMHg3NywgMHg3ZCwgMHgwMCwgMHgwMCwgMHhmMCwgMHgwNCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweDYyLCAweGIxLCAweDAxLCAweDAwLCAweGU2LCAweDA0LCAweGE4LCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MjAsIDB4ODcsIDB4YjMsIDB4MDEsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLAorCTB4OTksIDB4YjAsIDB4MDEsIDB4MDAsIDB4NmYsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjEsIDB4OTksIDB4MDEsIDB4MDAsCisJMHhmMSwgMHgwNCwgMHhhOCwgMHhiMSwgMHg1MiwgMHgzMywgMHgwMCwgMHgwMCwgMHhmNiwgMHgwNCwgMHgyMiwgMHg0YSwKKwkweDUzLCAweDdmLCAweDAwLCAweDAwLCAweDZmLCAweDAwLCAweDAwLCAweDQwLCAweDYxLCAweDk5LCAweDAxLCAweDAwLAorCTB4ZjQsIDB4MDQsIDB4YTgsIDB4YjEsIDB4N2UsIDB4MzEsIDB4MDAsIDB4MDAsIDB4ZjEsIDB4MDQsIDB4YTIsIDB4NDEsCisJMHg5OSwgMHg1MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMiwgMHg0ZiwgMHg3NywgMHhmZCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg3YiwgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDA1LCAweGE4LCAweGIxLCAweDgwLCAweDMwLCAweDAwLCAweDAwLCAweDEyLCAweDA1LCAweDFkLCAweDQwLAorCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MTgsIDB4MDAsIDB4NDAsIDB4NDksIDB4OTksIDB4MDEsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHhhNiwgMHg4NiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwNSwgMHhhMiwgMHg0MCwKKwkweDg2LCAweDA0LCAweDAwLCAweDAwLCAweGRlLCAweDlmLCAweDljLCAweDQwLCAweDgwLCAweDMyLCAweDAwLCAweDAwLAorCTB4ZmYsIDB4ZmYsIDB4MDAsIDB4NDAsIDB4ODgsIDB4ODgsIDB4MDEsIDB4MDAsIDB4MzAsIDB4MDUsIDB4MDAsIDB4NTAsCisJMHg0NywgMHgzMSwgMHgwMSwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHg0NCwgMHg4OCwgMHhjYywgMHgwMSwgMHgwMCwKKwkweDBjLCAweDA1LCAweDUyLCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDMwLCAweDA1LCAweDAwLCAweDQwLAorCTB4NDcsIDB4MzEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ODksIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgzMCwgMHgwNSwgMHgwMCwgMHg0OCwgMHg0NywgMHgzMSwgMHgwMSwgMHgwMCwgMHgzMCwgMHgwNSwgMHgwMCwgMHgwNSwKKwkweDQ3LCAweDMxLCAweDAxLCAweDAwLCAweGRlLCAweDlmLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MjgsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDcsIDB4OTksIDB4MWIsIDB4MDAsIDB4ZGUsIDB4OWYsIDB4MDAsIDB4NDEsCisJMHhlMSwgMHhjMSwgMHgxYSwgMHgwMCwgMHg3OCwgMHgxOCwgMHgwMCwgMHg0MCwgMHg0OSwgMHg5OSwgMHgxYiwgMHgwMCwKKwkweDE5LCAweDA1LCAweDIyLCAweDU0LCAweDgxLCAweDdjLCAweDFhLCAweDAwLCAweDE0LCAweDA1LCAweDQyLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MWEsIDB4MDAsIDB4MDAsIDB4ODIsIDB4MDAsIDB4YjMsIDB4NjcsIDB4ZGYsIDB4MWIsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgxYSwgMHg0NCwgMHg5MywgMHg5MywgMHgxYiwgMHgwMCwgMHgyOCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDQ3LCAweDk5LCAweDFiLCAweDAwLCAweDMwLCAweDA1LCAweDAwLCAweDQxLCAweDg5LCAweDMwLCAweDAxLCAweDAwLAorCTB4MjcsIDB4MDUsIDB4MGYsIDB4NDAsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4N2YsIDB4MDAsIDB4NDAsCisJMHg4OCwgMHg4OCwgMHgwMSwgMHgwMCwgMHgzMCwgMHgwNSwgMHgwMCwgMHg1MCwgMHg0NywgMHgzMSwgMHgwMSwgMHgwMCwKKwkweDM2LCAweDAwLCAweDAwLCAweDQ0LCAweDg4LCAweGNjLCAweDAxLCAweDAwLCAweDFmLCAweDA1LCAweDk5LCAweDQwLAorCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDgsIDB4ODksIDB4ZDAsIDB4MDEsIDB4MDAsCisJMHgyMSwgMHgwNSwgMHg5YiwgMHg0MCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YywKKwkweDg5LCAweGQwLCAweDAxLCAweDAwLCAweDIzLCAweDA1LCAweDFmLCAweDQ0LCAweDgwLCAweDMyLCAweDAwLCAweDAwLAorCTB4MzAsIDB4MDUsIDB4MDAsIDB4NDAsIDB4NDcsIDB4MzEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCisJMHg4OSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgzMCwgMHgwNSwgMHgwMCwgMHg0OCwgMHg0NywgMHgzMSwgMHgwMSwgMHgwMCwKKwkweDMwLCAweDA1LCAweDAwLCAweDU4LCAweDQ3LCAweDMxLCAweDAxLCAweDAwLCAweGRlLCAweDlmLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODYsIDB4ZjQsIDB4MDEsIDB4MDAsCisJMHg2ZiwgMHgwMCwgMHgwMCwgMHg0MywgMHg4NiwgMHg4OCwgMHgwMSwgMHgwMCwgMHhkZSwgMHg5ZiwgMHgyNiwgMHgwNSwKKwkweDQ3LCAweDMxLCAweDAwLCAweDAwLCAweDMwLCAweDA1LCAweDAwLCAweDQxLCAweDg5LCAweDMwLCAweDAxLCAweDAwLAorCTB4ZGUsIDB4OWYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTAsIDB4NDQsIDB4ZjAsIDB4NDEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MSwKKwkweGUxLCAweGMxLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDRjLCAweDAxLCAweDAwLCAweDA3LAorCTB4OTEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTIsIDB4NDAsIDB4OTcsIDB4ZWMsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg4MCwgMHgwNSwgMHg5MSwgMHhjMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDRjLCAweDAxLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDQ0LCAweDA1LCAweGEyLCAweDQwLAorCTB4OTcsIDB4NmMsIDB4MDAsIDB4MDAsIDB4M2EsIDB4MDAsIDB4MDAsIDB4NDAsIDB4YjMsIDB4OWIsIDB4MDEsIDB4MDAsCisJMHg0NSwgMHgwNSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweGIzLCAweDliLCAweDAxLCAweDAwLCAweDEwLCAweDA0LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZGEsIDB4ZjUsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDQsIDB4MDAsIDB4NDIsCisJMHhiMywgMHg0MywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkYSwgMHhmNSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDEwLCAweDA0LCAweDAwLCAweDQyLCAweGIzLCAweDQzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGRhLAorCTB4ZjUsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NGUsIDB4MDAsIDB4MDAsIDB4NDAsIDB4YjMsIDB4OWIsIDB4MDEsIDB4MDAsCisJMHgxMCwgMHgwNCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHhkYSwKKwkweGY3LCAweGY1LCAweDAxLCAweDAwLCAweDUwLCAweDAwLCAweDAwLCAweDQwLCAweDkxLCAweDk4LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsIDB4OGYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDQsIDB4MDAsIDB4NDgsCisJMHhiMiwgMHgzMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkYSwgMHhmNywgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDA4LCAweDAwLCAweDAwLCAweGRhLCAweGY3LCAweGY1LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLAorCTB4OTEsIDB4YzAsIDB4MDEsIDB4MDAsIDB4NTAsIDB4MDUsIDB4YTIsIDB4NDEsIDB4OGYsIDB4NTAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg0NSwgMHhkMSwgMHgwMSwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweGIzLCAweDliLCAweDAxLCAweDAwLCAweDEwLCAweDA0LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZGEsIDB4ZmQsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MGEsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHhiMywgMHg5YiwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwNCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGRhLCAweGZkLCAweGIxLCAweDAxLCAweDAwLCAweDFhLCAweDAwLCAweDAwLCAweDQwLAorCTB4YjMsIDB4OWIsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhkYSwgMHhmZCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgxOCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweGIzLCAweDliLCAweDAxLCAweDAwLCAweDEwLCAweDA0LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZGEsIDB4ZmQsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MzgsIDB4MDUsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgxZSwgMHgwMCwgMHgwMCwgMHg0OCwgMHhiMiwgMHhjYiwgMHgwMSwgMHgwMCwKKwkweDEwLCAweDA0LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGRhLAorCTB4OTEsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDgsIDB4YjIsIDB4Y2IsIDB4MDEsIDB4MDAsCisJMHgxMCwgMHgwNCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2ZSwgMHhkYSwKKwkweDhmLCAweGIwLCAweDAxLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDQ4LCAweGIyLCAweGNiLCAweDAxLCAweDAwLAorCTB4MTAsIDB4MDQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZGEsCisJMHhmZCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0OCwgMHhiMiwgMHhjYiwgMHgwMSwgMHgwMCwKKwkweDEwLCAweDA0LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweGRhLAorCTB4ZmQsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHg3YSwgMHgwNSwgMHgyMiwgMHg0NSwgMHhmZCwgMHg3ZiwgMHgwMCwgMHgwMCwgMHg0MCwgMHgxNiwgMHgwMCwgMHg0MCwKKwkweDQ1LCAweDk5LCAweDAxLCAweDAwLCAweGRiLCAweDlmLCAweDAwLCAweDQwLCAweDQ5LCAweDMxLCAweDAxLCAweDAwLAorCTB4MDgsIDB4MDAsIDB4MDAsIDB4NDgsIDB4YjIsIDB4Y2IsIDB4MDEsIDB4MDAsIDB4MTUsIDB4MDQsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHg3OCwgMHgwNSwgMHhhMiwgMHg0MCwgMHg4ZiwgMHg2YywgMHgwMCwgMHgwMCwKKwkweDdkLCAweDA1LCAweDIyLCAweDIwLCAweGI1LCAweDZmLCAweDAwLCAweDAwLCAweDdhLCAweDA1LCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4ZGEsIDB4OWYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MWYsIDB4MDAsCisJMHg3ZCwgMHgwNSwgMHgyMiwgMHg0MCwgMHg5NywgMHg2YywgMHgxZSwgMHgwMCwgMHg3YSwgMHgwNSwgMHg0MiwgMHg0MCwKKwkweDgxLCAweDMyLCAweDFlLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRmLCAweDY3LCAweDkzLCAweDFmLCAweDAwLAorCTB4ZGYsIDB4OWYsIDB4MDAsIDB4NTgsIDB4NjcsIDB4OTMsIDB4MWUsIDB4MDAsIDB4NTQsIDB4MTYsIDB4MDAsIDB4NDAsCisJMHg0NywgMHg5OSwgMHgxZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmZSwgMHhmNCwgMHhiMSwgMHgxZiwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDFmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZlLAorCTB4ZjQsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmZSwgMHhmNCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZlLCAweGY0LCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmUsCisJMHhmNCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGZlLCAweGY0LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmUsIDB4ZjQsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg0NiwgMHgwMCwgMHgwMCwgMHg0MCwgMHhiMywgMHg5YiwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwNCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweGRhLCAweGY3LCAweGY1LCAweDAxLCAweDAwLAorCTB4NDgsIDB4MDAsIDB4MDAsIDB4NDAsIDB4OTUsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsCisJMHg5NywgMHhiMCwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwNCwgMHgwMCwgMHg0YSwgMHhiMiwgMHgzMywgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGRhLCAweGY3LCAweGIxLCAweDAxLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweGRhLAorCTB4ZjcsIDB4ZjUsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4OTUsIDB4YzAsIDB4MDEsIDB4MDAsCisJMHg5MCwgMHgwNSwgMHhhMiwgMHg0MSwgMHg5NywgMHg1MCwgMHgwMCwgMHgwMCwgMHgyYSwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweGE1LCAweDliLCAweDAxLCAweDAwLCAweDQwLCAweDE2LCAweDAwLCAweDQwLCAweGExLCAweDliLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4Y2EsIDB4YTcsIDB4YjMsIDB4MDEsIDB4MDAsIDB4ZTEsIDB4OWYsIDB4MDAsIDB4YmIsCisJMHg4NSwgMHgzMCwgMHgwMSwgMHgwMCwgMHhlMCwgMHg5ZiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4YjgsIDB4MDUsIDB4MjIsIDB4NDUsIDB4ZmQsIDB4N2YsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MTUsIDB4MDAsIDB4NDAsCisJMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwgMHgxYSwgMHgwMCwgMHgwMCwgMHhhMiwgMHg4MCwgMHhkYywgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDUwLCAweGYxLCAweGIxLCAweDAxLCAweDAwLCAweGYwLCAweDE1LCAweDAwLCAweDQwLAorCTB4ZjEsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4Y2EsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwNywgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweGE3LCAweDA1LCAweGE4LCAweGJiLCAweGUxLCAweDMxLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4ODMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YWEsIDB4MDUsIDB4YTIsIDB4NDEsCisJMHg4MywgMHg1MCwgMHgwMCwgMHgwMCwgMHhhOSwgMHgwNSwgMHhhMiwgMHhmMiwgMHg4MiwgMHgzMCwgMHgwMCwgMHgwMCwKKwkweDRjLCAweDAxLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGIwLCAweDA1LCAweGEyLCAweDQwLAorCTB4OTcsIDB4NmMsIDB4MDAsIDB4MDAsIDB4M2EsIDB4MDAsIDB4MDAsIDB4NDAsIDB4YjMsIDB4OWIsIDB4MDEsIDB4MDAsCisJMHhiMSwgMHgwNSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweGIzLCAweDliLCAweDAxLCAweDAwLCAweGYwLCAweDE1LCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLAorCTB4MTAsIDB4MDQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4YjgsIDB4MDUsIDB4YTIsIDB4ZmEsCisJMHhiNCwgMHg2ZiwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwNCwgMHgwMCwgMHg0MiwgMHhiMywgMHg0MywgMHgwMSwgMHgwMCwKKwkweGI4LCAweDA1LCAweGEyLCAweGZhLCAweGI0LCAweDZmLCAweDAwLCAweDAwLCAweDEwLCAweDA0LCAweDAwLCAweDQyLAorCTB4YjMsIDB4NDMsIDB4MDEsIDB4MDAsIDB4YmIsIDB4MDUsIDB4MjIsIDB4ZmEsIDB4YjQsIDB4NmYsIDB4MDAsIDB4MDAsCisJMHhiOCwgMHgwNSwgMHg0MiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgyMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZSwKKwkweDY3LCAweDkzLCAweDIxLCAweDAwLCAweGRmLCAweDlmLCAweDAwLCAweDU4LCAweDY3LCAweDkzLCAweDIwLCAweDAwLAorCTB4NDAsIDB4MTYsIDB4MDAsIDB4NDAsIDB4NDUsIDB4OTksIDB4MjEsIDB4MDAsIDB4ZGIsIDB4OWYsIDB4MDAsIDB4NDAsCisJMHg0OSwgMHgzMSwgMHgyMSwgMHgwMCwgMHhmNiwgMHgxNSwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgyMSwgMHgwMCwKKwkweDVjLCAweDE2LCAweDAwLCAweDQwLCAweDQ1LCAweDk5LCAweDIxLCAweDAwLCAweDAwLCAweDAwLCAweDZlLCAweGZhLAorCTB4OGUsIDB4YjAsIDB4MjEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmZSwgMHhmNCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZlLCAweGY0LCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsCisJMHhiNCwgMHhiMywgMHgwMSwgMHgwMCwgMHhjOSwgMHgwNSwgMHhhMiwgMHg0MCwgMHg4ZiwgMHg2YywgMHgwMCwgMHgwMCwKKwkweGZjLCAweDE1LCAweDIwLCAweDIwLCAweGUxLCAweGIxLCAweDAxLCAweDAwLCAweGNlLCAweDA1LCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MjQsIDB4MDAsIDB4ZGEsIDB4OWYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MjUsIDB4MDAsCisJMHhjZSwgMHgwNSwgMHgyMiwgMHg0MCwgMHg5NywgMHg2YywgMHgyNCwgMHgwMCwgMHhjYiwgMHgwNSwgMHg0MiwgMHg0MCwKKwkweDgxLCAweDMyLCAweDI0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRmLCAweDY3LCAweDkzLCAweDI1LCAweDAwLAorCTB4ZGYsIDB4OWYsIDB4MDAsIDB4NTgsIDB4NjcsIDB4OTMsIDB4MjQsIDB4MDAsIDB4MzgsIDB4MDUsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgyNSwgMHgwMCwgMHgxZSwgMHgwMCwgMHgwMCwgMHg0OCwgMHhiMiwgMHhjYiwgMHgyNSwgMHgwMCwKKwkweDEwLCAweDA0LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGQzLCAweDA1LCAweDIyLCAweDUwLAorCTB4YjUsIDB4NmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4OTEsIDB4YzAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0OCwgMHhiMiwgMHhjYiwgMHgwMSwgMHgwMCwgMHhmNiwgMHgxNSwgMHgwMCwgMHg0MCwKKwkweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDIwLCAweDA0LCAweDAwLCAweGYyLCAweGI0LCAweDMzLCAweDAxLCAweDAwLAorCTB4MDIsIDB4MDAsIDB4MDAsIDB4NDgsIDB4YjIsIDB4Y2IsIDB4MDEsIDB4MDAsIDB4ZjgsIDB4MTUsIDB4MDAsIDB4NDAsCisJMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwNCwgMHgwMCwgMHhmMiwgMHhiNCwgMHgzMywgMHgwMSwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQ4LCAweGIyLCAweGNiLCAweDAxLCAweDAwLCAweGZhLCAweDE1LCAweDAwLCAweDQwLAorCTB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDQsIDB4MDAsIDB4ZjIsIDB4YjQsIDB4MzMsIDB4MDEsIDB4MDAsCisJMHgwOCwgMHgwMCwgMHgwMCwgMHg0OCwgMHhiMiwgMHhjYiwgMHgwMSwgMHgwMCwgMHhmYywgMHgxNSwgMHgwMCwgMHg0MCwKKwkweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLCAweDk0LCAweGIwLCAweDAxLCAweDAwLAorCTB4ZmYsIDB4ZmYsIDB4MDAsIDB4NGEsIDB4YjQsIDB4OGIsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDQsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwYSwgMHgwMCwgMHgwMCwgMHg0OCwgMHhiMiwgMHhjYiwgMHgwMSwgMHgwMCwKKwkweDEwLCAweDAwLCAweDAwLCAweDRhLCAweGI0LCAweGY3LCAweDAxLCAweDAwLCAweDIwLCAweDA0LCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MzgsIDB4MDUsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHgxZSwgMHgwMCwgMHgwMCwgMHg0OCwgMHhiMiwgMHhjYiwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwNCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGU5LCAweDA1LCAweDIyLCAweDUwLCAweGI1LCAweDZmLCAweDAwLCAweDAwLAorCTB4ZWEsIDB4MDUsIDB4MDAsIDB4NTAsIDB4YjUsIDB4YjMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHhiNSwgMHhiMywgMHgwMSwgMHgwMCwgMHgyMCwgMHgwNCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweGUwLCAweDlmLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDE2LCAweDAwLCAweDQwLCAweDQ3LCAweDk5LCAweDAxLCAweDAwLAorCTB4MzAsIDB4MzEsIDB4MDAsIDB4NDAsIDB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MzIsIDB4MzMsIDB4MDAsIDB4NDAsCisJMHhmNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgzNCwgMHgzNSwgMHgwMCwgMHg0MCwgMHhmNSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDM2LCAweDM3LCAweDAwLCAweDQwLCAweGY1LCAweDk5LCAweDAxLCAweDAwLCAweDM4LCAweDM5LCAweDAwLCAweDQwLAorCTB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsIDB4NDEsIDB4NDIsIDB4MDAsIDB4NDAsIDB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsCisJMHg0MywgMHg0NCwgMHgwMCwgMHg0MCwgMHhmNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHg0NSwgMHg0NiwgMHgwMCwgMHg0MCwKKwkweGY1LCAweDk5LCAweDAxLCAweDAwLCAweDQ3LCAweDQ4LCAweDAwLCAweDQwLCAweGY1LCAweDk5LCAweDAxLCAweDAwLAorCTB4NDksIDB4NGEsIDB4MDAsIDB4NDAsIDB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MmMsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MywgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmNywgMHhiMSwgMHgwMSwgMHgwMCwKKwkweGZjLCAweDA1LCAweGEyLCAweDQxLCAweDgzLCAweDUwLCAweDAwLCAweDAwLCAweDgwLCAweDE2LCAweDJlLCAweDA2LAorCTB4ODMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MzYsIDB4MDAsIDB4MDAsIDB4ZmIsIDB4ZjYsIDB4YTksIDB4MDEsIDB4MDAsCisJMHhmZiwgMHgwNSwgMHhhMiwgMHg0MSwgMHg4MywgMHg1MCwgMHgwMCwgMHgwMCwgMHgyMiwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgzLCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZiLCAweGY2LCAweGIxLCAweDAxLCAweDAwLAorCTB4MDIsIDB4MDYsIDB4YTIsIDB4NDEsIDB4ODMsIDB4NTAsIDB4MDAsIDB4MDAsIDB4NjIsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg5NSwgMHg5OCwgMHgwMSwgMHgwMCwgMHhkYywgMHg5ZiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDE2LCAweDJkLCAweDA2LCAweDgzLCAweGIwLCAweDAxLCAweDAwLCAweDgwLCAweDE2LCAweDAwLCAweDQwLAorCTB4NDUsIDB4OTksIDB4MDEsIDB4MDAsIDB4NWMsIDB4MDAsIDB4MDAsIDB4ZmIsIDB4ZjYsIDB4YTksIDB4MDEsIDB4MDAsCisJMHgwOCwgMHgwNiwgMHhhMiwgMHg0MSwgMHg4MywgMHg1MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3MCwKKwkweGY5LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDcxLCAweGY5LCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NzIsIDB4ZjksIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzMsCisJMHhmOSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3NCwgMHhmOSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDU0LCAweDAwLCAweDAwLCAweDQwLCAweDk1LCAweDk4LCAweDAxLCAweDAwLCAweGRjLCAweDlmLCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzAsIDB4OTUsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgxNCwgMHgwNiwgMHgyMiwgMHg3MCwgMHhiNSwgMHg2ZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MSwKKwkweDk3LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQwLCAweDk3LCAweGIwLCAweDAxLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDQ1LCAweDY3LCAweDAwLCAweGE2LCAweGUwLCAweGIyLCAweDAxLCAweDAwLCAweDAxLCAweDIzLCAweDAwLCAweDcwLAorCTB4ZTEsIDB4OWEsIDB4MDEsIDB4MDAsIDB4Y2QsIDB4ZWYsIDB4MDAsIDB4YTYsIDB4ZTIsIDB4YjIsIDB4MDEsIDB4MDAsCisJMHg4OSwgMHhhYiwgMHgwMCwgMHg3MSwgMHhlMywgMHg5YSwgMHgwMSwgMHgwMCwgMHhiYSwgMHg5OCwgMHgwMCwgMHhhNiwKKwkweGU0LCAweGIyLCAweDAxLCAweDAwLCAweGZlLCAweGRjLCAweDAwLCAweDcyLCAweGU1LCAweDlhLCAweDAxLCAweDAwLAorCTB4MzIsIDB4MTAsIDB4MDAsIDB4YTYsIDB4ZTYsIDB4YjIsIDB4MDEsIDB4MDAsIDB4NzYsIDB4NTQsIDB4MDAsIDB4NzMsCisJMHhlNywgMHg5YSwgMHgwMSwgMHgwMCwgMHhkMiwgMHhjMywgMHgwMCwgMHhhNiwgMHhlOCwgMHhiMiwgMHgwMSwgMHgwMCwKKwkweGYwLCAweGUxLCAweDAwLCAweDc0LCAweGU5LCAweDlhLCAweDAxLCAweDAwLCAweDgwLCAweDE2LCAweDAwLCAweDRhLAorCTB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4ODEsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0YSwgMHg4MCwgMHhkMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweGY3LCAweGIxLCAweDAxLCAweDAwLCAweDI1LCAweDA2LCAweGEyLCAweDQxLCAweDgxLCAweDUwLCAweDAwLCAweDAwLAorCTB4ODAsIDB4MTYsIDB4MDAsIDB4NGEsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4ZmMsIDB4MTYsIDB4MmEsIDB4NDcsCisJMHhlNywgMHhiNSwgMHgwMSwgMHgwMCwgMHgwMywgMHgwMCwgMHgwMCwgMHg0YSwgMHhlOCwgMHhlNSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDhkLCAweGIwLCAweDAxLCAweDAwLCAweDUwLCAweDAzLCAweDAwLCAweDQwLAorCTB4YTMsIDB4OTksIDB4MDEsIDB4MDAsIDB4ODAsIDB4MTYsIDB4M2QsIDB4NDYsIDB4OGQsIDB4ZTAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHg4OSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmYywKKwkweDQwLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweGEzLCAweGMxLCAweDAxLCAweDAwLAorCTB4MmUsIDB4MDYsIDB4YTIsIDB4NDEsIDB4ODksIDB4NTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzAsCisJMHhlYiwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3MSwgMHhlZCwgMHhiMiwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDcyLCAweGVmLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDczLAorCTB4ZjEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzQsIDB4ZjMsIDB4YjIsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwZiwgMHgwMCwgMHgwMCwgMHg0MSwKKwkweDgwLCAweDg4LCAweDAxLCAweDAwLCAweDUwLCAweDAzLCAweDAwLCAweDQwLCAweGEyLCAweGM5LCAweDAxLCAweDAwLAorCTB4NGIsIDB4MDYsIDB4YTAsIDB4NTAsIDB4ODMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MGQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg5OCwgMHhjOCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZiwgMHg5OSwgMHg4NCwgMHgwMSwgMHgwMCwKKwkweDUwLCAweDAzLCAweDAwLCAweDRjLCAweGEyLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDIwLAorCTB4ODYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4NDAsIDB4OTgsIDB4YzgsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZiwgMHg5OSwgMHg4NCwgMHgwMSwgMHgwMCwgMHg1MCwgMHgwMywgMHgwMCwgMHg0YywKKwkweGEyLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDIwLCAweDg2LCAweGE0LCAweDAxLCAweDAwLAorCTB4MDIsIDB4MDAsIDB4MDAsIDB4NDAsIDB4OTgsIDB4YzgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGYsCisJMHg5OSwgMHg4NCwgMHgwMSwgMHgwMCwgMHg1MCwgMHgwMywgMHgwMCwgMHg0YywgMHhhMiwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDIwLCAweDg2LCAweGE0LCAweDAxLCAweDAwLCAweDUwLCAweDAzLCAweDAwLCAweDQwLAorCTB4YTIsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4NDAsIDB4YTQsIDB4MDEsIDB4MDAsCisJMHgwMSwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4OCwgMHhlNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1ZiwKKwkweDQxLCAweGYwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDQwLCAweDk0LCAweDAxLCAweDAwLAorCTB4MDUsIDB4MDAsIDB4MDAsIDB4NzUsIDB4ODksIDB4ZTQsIDB4MDEsIDB4MDAsIDB4MWIsIDB4MDAsIDB4MDAsIDB4NzUsCisJMHg4NSwgMHhmNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg4NCwgMHg5NCwgMHgwMSwgMHgwMCwKKwkweDU1LCAweDA2LCAweGEzLCAweDUzLCAweDgzLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc2LAorCTB4ODksIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzcsIDB4ODksIDB4ODQsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg3NiwgMHg4YiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDhiLCAweGE0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweDhiLCAweDg0LCAweDAxLCAweDAwLAorCTB4NjQsIDB4MDYsIDB4MDAsIDB4NDUsIDB4ODgsIDB4OTQsIDB4MDAsIDB4MDAsIDB4MjcsIDB4MDAsIDB4MDAsIDB4NDEsCisJMHg4MCwgMHhjZSwgMHgwMSwgMHgwMCwgMHg1YSwgMHgwNiwgMHhhYSwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDc2LCAweDg5LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc3LAorCTB4ODksIDB4YTQsIDB4MDEsIDB4MDAsIDB4NjQsIDB4MDYsIDB4MDAsIDB4NzgsIDB4ODksIDB4YTQsIDB4MDAsIDB4MDAsCisJMHgzYiwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4MCwgMHhjZSwgMHgwMSwgMHgwMCwgMHg1NywgMHgwNiwgMHhhYSwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc2LCAweDg5LCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NzcsIDB4ODksIDB4ODQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzYsCisJMHg4YiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3OCwgMHg4YiwgMHg4NCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweDg4LCAweDk0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc3LAorCTB4OGIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzgsIDB4OGIsIDB4ODQsIDB4MDEsIDB4MDAsCisJMHg2NCwgMHgwNiwgMHgwMCwgMHg0NSwgMHg4OCwgMHg5NCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwKKwkweDg0LCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc5LCAweDg1LCAweGMwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODQsIDB4YzAsIDB4MDEsIDB4MDAsIDB4NmIsIDB4MDYsIDB4YTMsIDB4NTMsCisJMHg4MywgMHg2YywgMHgwMCwgMHgwMCwgMHg4MiwgMHg1YSwgMHgwMCwgMHhhNiwgMHg4NCwgMHhjMCwgMHgwMSwgMHgwMCwKKwkweDk5LCAweDc5LCAweDAwLCAweDQyLCAweDg0LCAweGM4LCAweDAxLCAweDAwLCAweDc4LCAweDA2LCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MjcsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ODAsIDB4Y2UsIDB4MDEsIDB4MDAsCisJMHg3MCwgMHgwNiwgMHhhYSwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhkOSwgMHg2ZSwgMHgwMCwgMHhhNiwKKwkweDg0LCAweGMwLCAweDAxLCAweDAwLCAweGExLCAweGViLCAweDAwLCAweDQyLCAweDg0LCAweGM4LCAweDAxLCAweDAwLAorCTB4NzgsIDB4MDYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4M2IsIDB4MDAsIDB4MDAsIDB4NDEsCisJMHg4MCwgMHhjZSwgMHgwMSwgMHgwMCwgMHg3NSwgMHgwNiwgMHhhYSwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDFiLCAweDhmLCAweDAwLCAweGE2LCAweDg0LCAweGMwLCAweDAxLCAweDAwLCAweGRjLCAweGJjLCAweDAwLCAweDQyLAorCTB4ODQsIDB4YzgsIDB4MDEsIDB4MDAsIDB4NzgsIDB4MDYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHg2MiwgMHhjYSwgMHgwMCwgMHhhNiwgMHg4NCwgMHhjMCwgMHgwMSwgMHgwMCwgMHhkNiwgMHhjMSwgMHgwMCwgMHg0MiwKKwkweDg0LCAweGM4LCAweDAxLCAweDAwLCAweDc4LCAweDA2LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NzgsIDB4ZjMsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzcsCisJMHhmMSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgxZSwgMHgwMCwgMHgwMCwgMHg3NiwgMHg4OSwgMHhlNCwgMHgwMSwgMHgwMCwKKwkweDAyLCAweDAwLCAweDAwLCAweDc2LCAweGVmLCAweGY2LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LAorCTB4ZWUsIDB4OTYsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzUsIDB4ZWQsIDB4YjIsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHhlYSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKKwkweDgzLCAweGMwLCAweDAxLCAweDAwLCAweDRmLCAweDAwLCAweDAwLCAweDQxLCAweDgwLCAweGNlLCAweDAxLCAweDAwLAorCTB4MzcsIDB4MDYsIDB4MmEsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzUsCisJMHhlMSwgMHhjMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3NiwgMHhlMywgMHhjMiwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDc3LCAweGU1LCAweGMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LAorCTB4ZTcsIDB4YzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzksIDB4ZTksIDB4YzIsIDB4MDEsIDB4MDAsCisJMHgyYiwgMHgwNiwgMHg4MSwgMHg0MSwgMHg4ZCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHhmZCwgMHg5MywgMHgwMSwgMHgwMCwgMHg0MCwgMHgxNiwgMHgwMCwgMHg0MCwKKwkweDQ1LCAweDk5LCAweDAxLCAweDAwLCAweGRiLCAweDlmLCAweDAwLCAweDQwLCAweDQ5LCAweDMxLCAweDAxLCAweDAwLAorCTB4MDgsIDB4MDAsIDB4MDAsIDB4NDgsIDB4YjIsIDB4Y2IsIDB4MDEsIDB4MDAsIDB4MTUsIDB4MDQsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhiOSwgMHgwNiwgMHgyMiwgMHg0MCwgMHg4ZiwgMHg2YywgMHgwMCwgMHgwMCwKKwkweGRhLCAweDlmLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGI5LCAweDA2LCAweGEyLCAweDQwLAorCTB4OTcsIDB4NmMsIDB4MDAsIDB4MDAsIDB4NWUsIDB4MTYsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsCisJMHg3YywgMHgxNiwgMHgyMCwgMHhmNiwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDMxLCAweGIzLCAweDAxLCAweDAwLCAweDlkLCAweDA2LCAweDIyLCAweDRmLCAweDhmLCAweDdjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTEsIDB4ZmQsIDB4OTMsIDB4MDEsIDB4MDAsIDB4OWYsIDB4MDYsIDB4MjIsIDB4NDAsCisJMHg4ZiwgMHg3YywgMHgwMCwgMHgwMCwgMHhhMywgMHgwNiwgMHgwMCwgMHg1NCwgMHhmZCwgMHg5MywgMHgwMCwgMHgwMCwKKwkweGExLCAweDA2LCAweDIyLCAweDQyLCAweDhmLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUyLAorCTB4ZmQsIDB4OTMsIDB4MDEsIDB4MDAsIDB4YTMsIDB4MDYsIDB4MjIsIDB4NDEsIDB4OGYsIDB4N2MsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1MywgMHhmZCwgMHg5MywgMHgwMSwgMHgwMCwgMHhiNywgMHgwNiwgMHgyMiwgMHg1MSwKKwkweGZkLCAweDdmLCAweDAwLCAweDAwLCAweDM4LCAweDA1LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4MGMsIDB4MDAsIDB4MDAsIDB4NDgsIDB4YjIsIDB4Y2IsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDQsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhiMiwgMHgwNiwgMHhhMiwgMHg0MCwgMHhiNSwgMHg2ZiwgMHgwMCwgMHgwMCwKKwkweDFlLCAweDAwLCAweDAwLCAweDQ4LCAweGIyLCAweGNiLCAweDAxLCAweDAwLCAweDEwLCAweDA0LCAweDAwLCAweDQ4LAorCTB4OTYsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZGEsIDB4OTcsIDB4YzAsIDB4MDEsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0YiwgMHhiMiwgMHhjYiwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwNCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDBlLCAweDAwLCAweDAwLCAweDQ4LCAweGIyLCAweGNiLCAweDAxLCAweDAwLAorCTB4MjAsIDB4MDQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MGMsIDB4MDAsIDB4MDAsIDB4NDgsCisJMHhiMiwgMHhjYiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzMCwgMHhiNSwgMHhiMywgMHgwMSwgMHgwMCwKKwkweDIwLCAweDA0LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDBlLCAweDAwLCAweDAwLCAweDQ4LAorCTB4YjIsIDB4Y2IsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHhiNiwgMHgwNiwgMHgyMiwgMHg0MCwgMHhiNSwgMHg2ZiwgMHgwMCwgMHgwMCwgMHhiYSwgMHgwNiwgMHgwMCwgMHg1NCwKKwkweGZkLCAweDkzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUxLCAweGZkLCAweDgzLCAweDAxLCAweDAwLAorCTB4MWMsIDB4MDAsIDB4MDAsIDB4ZmUsIDB4N2YsIDB4ZDksIDB4MDEsIDB4MDAsIDB4YmEsIDB4MDYsIDB4YTYsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1NSwgMHhmZCwgMHg5MywgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDgwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4ZTcsIDB4OWYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4YzQsIDB4MDYsIDB4MjIsIDB4NWMsCisJMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHhlMywgMHg5ZiwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKKwkweGU5LCAweDlmLCAweDAwLCAweDVjLCAweDFmLCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJlLCAweDA1LAorCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZTEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgyZCwgMHgwMywgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwKKwkweDNjLCAweGIwLCAweDAxLCAweDAwLCAweDI4LCAweDAwLCAweDAwLCAweDE0LCAweDAyLCAweGM4LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MzQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmQsIDB4MDUsCisJMHgzMiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgyMiwgMHgwMCwgMHgwMCwgMHgwNSwgMHgwYSwgMHhjOCwgMHgwMSwgMHgwMCwKKwkweDEwLCAweDAwLCAweDAwLCAweDAzLCAweDQ4LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LAorCTB4MTgsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MDQsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgwZSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwYywgMHgwMCwgMHgwMCwgMHhhNCwKKwkweDBjLCAweGM4LCAweDAxLCAweDAwLCAweGVhLCAweDlmLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MjMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MGEsIDB4MDcsIDB4MjIsIDB4MDEsCisJMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzYywgMHg0NCwgMHgyMywgMHhlMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDJlLCAweGE0LCAweDgwLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLAorCTB4NDgsIDB4YzEsIDB4MDEsIDB4MDAsIDB4ZDksIDB4MDYsIDB4YTMsIDB4MDcsIDB4MDIsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHhkYSwgMHgwNiwgMHg2OCwgMHgwMSwgMHgxYSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2OCwgMHgwNywKKwkweDFhLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBkLCAweDAyLCAweGQwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGMsCisJMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDBkLCAweDBhLCAweGMwLCAweDAxLCAweDAwLCAweGVjLCAweDA2LCAweDIyLCAweDQwLAorCTB4MDMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4ZTYsIDB4MDYsIDB4MjIsIDB4NDIsIDB4MjMsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgyMywgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywKKwkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDIwLCAweDAwLCAweDAwLCAweGE0LCAweDYyLCAweGRkLCAweDAxLCAweDAwLAorCTB4MjMsIDB4MDcsIDB4MjgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ZTMsIDB4MDYsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg4MCwgMHhjMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ3LCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZTgsIDB4MDYsIDB4YTgsIDB4NDAsIDB4MjMsIDB4MzAsIDB4MDAsIDB4MDAsCisJMHhlMywgMHg5ZiwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgyMywgMHgwNywgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDgwLCAweGMwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHhlZSwgMHgwNiwgMHhhOCwgMHg0MCwgMHgyMywgMHgzMCwgMHgwMCwgMHgwMCwKKwkweGUzLCAweDlmLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDIyLCAweDAwLCAweDAwLCAweDE5LAorCTB4NDgsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmQsIDB4MTQsIDB4NDgsIDB4YzEsIDB4MDEsIDB4MDAsCisJMHgwZiwgMHgwMCwgMHgwMCwgMHhmMiwgMHgzYSwgMHg4OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwKKwkweDNiLCAweGUwLCAweDAxLCAweDAwLCAweDBlLCAweDAwLCAweDAwLCAweDE0LCAweDAyLCAweGM4LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MWQsIDB4MDIsIDB4YzAsIDB4MDEsIDB4MDAsIDB4ZmEsIDB4MDYsIDB4MjMsIDB4MWEsCisJMHgwMiwgMHg1MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NiwgMHgwMywgMHhjMCwgMHgwMSwgMHgwMCwKKwkweDIzLCAweDA3LCAweDAwLCAweDAxLCAweDM0LCAweGMwLCAweDAwLCAweDAwLCAweDBjLCAweDAwLCAweDJkLCAweDFkLAorCTB4NDgsIDB4YzEsIDB4MDEsIDB4MDAsIDB4ZjAsIDB4MDAsIDB4MDAsIDB4ZjIsIDB4MzAsIDB4ODgsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHgzMSwgMHhmMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwKKwkweDAyLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFkLCAweDAyLCAweGMwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDIsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDIsIDB4MDcsIDB4MjIsIDB4MWEsCisJMHgwMiwgMHg1MCwgMHgwMCwgMHgwMCwgMHgyMywgMHgwNywgMHgwMCwgMHgwMSwgMHgzNCwgMHhjMCwgMHgwMCwgMHgwMCwKKwkweDIyLCAweDAwLCAweDAwLCAweDE5LCAweDQ4LCAweGM5LCAweDAxLCAweDAwLCAweDAyLCAweDAwLCAweDJkLCAweDE0LAorCTB4NDgsIDB4YzEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjYsIDB4MTQsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgxZCwgMHgxNCwgMHhkMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwKKwkweDE0LCAweGQwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFlLCAweDI0LCAweGIwLCAweDAxLCAweDAwLAorCTB4MTIsIDB4MDAsIDB4MDAsIDB4MTcsIDB4MTAsIDB4YzgsIDB4MDEsIDB4MDAsIDB4MjMsIDB4MDcsIDB4MDAsIDB4MWEsCisJMHgxMCwgMHhjMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzYywgMHg0NCwgMHgyMywgMHhlMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGE0LCAweDg2LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJlLCAweDEwLAorCTB4NDgsIDB4YzEsIDB4MDEsIDB4MDAsIDB4MGYsIDB4MDcsIDB4YTMsIDB4MTIsIDB4MGUsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgxMCwgMHgwNywgMHg2MCwgMHgwNywgMHgxYSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2MCwgMHgxMiwKKwkweDFhLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDY4LCAweDBkLCAweDE2LCAweDk0LCAweDAxLCAweDAwLAorCTB4ZmYsIDB4ZmYsIDB4MDAsIDB4MGIsIDB4MTYsIDB4ZDgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsCisJMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYywgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAyLCAweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLAorCTB4ODYsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgyMCwgMHgwMCwgMHgwMCwgMHg0MywgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHgxNywgMHgwNywgMHhhOCwgMHg1YywKKwkweDFmLCAweDEwLCAweDAwLCAweDAwLCAweDQwLCAweDA3LCAweDIyLCAweDBkLCAweDE0LCAweDUwLCAweDAwLCAweDAwLAorCTB4NDAsIDB4MDcsIDB4MjIsIDB4MGQsIDB4MjQsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGQsCisJMHgxMCwgMHhjMCwgMHgwMSwgMHgwMCwgMHgxZSwgMHgwNywgMHgyMiwgMHg0MiwgMHgyMywgMHg2YywgMHgwMCwgMHgwMCwKKwkweDIzLCAweDA3LCAweDAwLCAweDQxLCAweDIzLCAweGMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ2LAorCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCisJMHgxZiwgMHgwNywgMHhhOCwgMHg1YywgMHgxZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMywgMHg5ZiwgMHgwMCwgMHg4OCwKKwkweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDIzLCAweGIwLCAweDAxLCAweDAwLAorCTB4M2YsIDB4MDcsIDB4YTIsIDB4MGQsIDB4MGUsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MmUsIDB4MDcsIDB4MjIsIDB4NDYsCisJMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NiwgMHgxZiwgMHg4MCwgMHgwMSwgMHgwMCwKKwkweDMwLCAweDgwLCAweDAwLCAweDEwLCAweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDJjLCAweDA3LCAweDIyLCAweGYyLAorCTB4NjQsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHgyOSwgMHgwNywgMHhhOCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweGUzLCAweDlmLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAorCTB4MjAsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDYsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWYsCisJMHhlMSwgMHg5MSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZCwgMHgwNiwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDE4LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LAorCTB4MDQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MzMsIDB4MDcsIDB4MWYsIDB4ZjAsIDB4MGUsIDB4MzAsIDB4MDAsIDB4MDAsCisJMHhkMywgMHgwNiwgMHgwMCwgMHg0YywgMHgwZCwgMHhjMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZSwgMHg1ZiwKKwkweDBmLCAweDgwLCAweDAxLCAweDAwLCAweGQzLCAweDA2LCAweDIzLCAweDA3LCAweDE0LCAweDZjLCAweDAwLCAweDAwLAorCTB4MzAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NDgsIDB4YzksIDB4MDEsIDB4MDAsIDB4MjQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHhmMSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE2LAorCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MjQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YzgsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHhhNCwKKwkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDNjLCAweDA3LCAweGE4LCAweDQ2LCAweDFmLCAweDEwLCAweDAwLCAweDAwLAorCTB4ZDMsIDB4MDYsIDB4MDAsIDB4MDMsIDB4MGMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZDMsIDB4MDYsIDB4MDAsIDB4MGQsCisJMHgxOCwgMHhjMCwgMHgwMCwgMHgwMCwgMHg1ZiwgMHgwNywgMHhhMiwgMHg0NCwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDE5LCAweDBhLCAweGIwLCAweDAxLCAweDAwLCAweDIyLCAweDAwLCAweDAwLCAweDA1LAorCTB4NDgsIDB4YzksIDB4MDEsIDB4MDAsIDB4MGEsIDB4MDAsIDB4MmQsIDB4MTQsIDB4NDgsIDB4YzEsIDB4MDEsIDB4MDAsCisJMHgwMiwgMHgwMCwgMHgyMCwgMHg0MCwgMHhlNSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMCwgMHg0MCwKKwkweGU1LCAweGIxLCAweDAxLCAweDAwLCAweDBkLCAweDAwLCAweDJkLCAweDFkLCAweDQ4LCAweGMxLCAweDAxLCAweDAwLAorCTB4MDksIDB4MDAsIDB4MDAsIDB4ZjMsIDB4MzgsIDB4ODgsIDB4MDEsIDB4MDAsIDB4MGQsIDB4MDAsIDB4MjAsIDB4NTAsCisJMHhlNywgMHhiMSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyZCwgMHg0MCwgMHgzZiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGY0LCAweDMyLCAweGIwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDIwLCAweDQwLAorCTB4ZTEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MjIsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YzksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgyZCwgMHgxNCwgMHg0OCwgMHhjMSwgMHgwMSwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgxZCwKKwkweDk0LCAweGY0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDkxLCAweGIwLCAweDAxLCAweDAwLAorCTB4NTIsIDB4MDcsIDB4YTAsIDB4ZmMsIDB4OTAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCisJMHg5MSwgMHhjMCwgMHgwMSwgMHgwMCwgMHg1MCwgMHgwNywgMHhhMiwgMHg0MSwgMHg5NSwgMHg1MCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGE0LCAweDk2LCAweGIwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDJlLCAweDA1LAorCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDgsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0YiwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwKKwkweDQ4LCAweGMxLCAweDAxLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDE4LCAweDk0LCAweGY0LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MmQsIDB4MTgsIDB4OTAsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NWMsIDB4MDcsIDB4YTAsIDB4ZmMsCisJMHg5MCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg5MSwgMHhjMCwgMHgwMSwgMHgwMCwKKwkweDVhLCAweDA3LCAweGEyLCAweDQxLCAweDk1LCAweDUwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ4LAorCTB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MjAsIDB4NDAsIDB4ZTUsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgyZCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwKKwkweDgwLCAweGIwLCAweDJkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLCAweDE2LCAweGIwLCAweDJkLCAweDAwLAorCTB4MjIsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YzksIDB4MmQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsCisJMHg0OCwgMHhjMSwgMHgyZCwgMHgwMCwgMHg2NCwgMHgwNywgMHg0MywgMHgzMCwgMHgzZCwgMHgwNywgMHgyYywgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDllLCAweDg1LCAweGIwLCAweDJkLCAweDAwLCAweDAwLCAweDAwLCAweDFiLCAweDQxLAorCTB4M2QsIDB4YzMsIDB4MmQsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjAsIDB4NDIsIDB4ZWMsIDB4YjEsIDB4MmQsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgxZSwgMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMiwgMHgwMCwgMHgyZSwgMHgxZCwKKwkweDgyLCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDY2LCAweDE4LCAweDgyLCAweGMwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4ODAsIDB4YzAsIDB4MDEsIDB4MDAsIDB4NmUsIDB4MDcsIDB4YTAsIDB4NDEsCisJMHg4MCwgMHg0NCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4MSwgMHhjMCwgMHgwMSwgMHgwMCwKKwkweDEwLCAweDAwLCAweDAwLCAweDQwLCAweDkyLCAweGY0LCAweDAxLCAweDAwLCAweDBhLCAweDAwLCAweDJlLCAweDMwLAorCTB4ODEsIDB4ODQsIDB4MDEsIDB4MDAsIDB4NzIsIDB4MDcsIDB4OTAsIDB4NDAsIDB4OTIsIDB4NDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg5MywgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2NiwgMHgyMCwKKwkweDkzLCAweGE0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFkLCAweDQ4LCAweGMxLCAweDAxLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MjAsIDB4MTksIDB4ZTgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWUsCisJMHgxNiwgMHhjMCwgMHgwMSwgMHgwMCwgMHg3OCwgMHgwNywgMHhhMCwgMHgxOSwgMHgxNiwgMHg0NCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDE3LCAweGMwLCAweDAxLCAweDAwLCAweDBkLCAweDAwLCAweDJmLCAweDFlLAorCTB4MzIsIDB4YzAsIDB4MDEsIDB4MDAsIDB4N2QsIDB4MDcsIDB4YTIsIDB4NDAsIDB4MTUsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHg3YywgMHgwNywgMHhhMCwgMHgxYywgMHgxNiwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKKwkweDE3LCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDYzLCAweGYzLCAweDM4LCAweDk0LCAweDAxLCAweDAwLAorCTB4MTAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MmUsIDB4MWUsCisJMHg5OCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2MCwgMHgxYSwgMHg5OCwgMHhjMCwgMHgwMSwgMHgwMCwKKwkweDBjLCAweDAwLCAweDIwLCAweDQwLCAweGUxLCAweGIxLCAweDAxLCAweDAwLCAweDhiLCAweDA3LCAweDIyLCAweDQ2LAorCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsIDB4MWYsIDB4ODAsIDB4MDEsIDB4MDAsCisJMHgzMCwgMHg4MCwgMHgwMCwgMHgxMCwgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHg4OSwgMHgwNywgMHgyMiwgMHhmMiwKKwkweDY0LCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ3LCAweDYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4ODYsIDB4MDcsIDB4YTgsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhlMywgMHg5ZiwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDIwLCAweDgwLCAweDAwLCAweDAzLCAweDQ2LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVmLAorCTB4ZTEsIDB4OTEsIDB4MDEsIDB4MDAsIDB4MzAsIDB4ODAsIDB4MDAsIDB4MTAsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsCisJMHgxMiwgMHgwMCwgMHgwMCwgMHgxYSwgMHhmMCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNywKKwkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDA1LCAweGUwLCAweGM5LCAweDAxLCAweDAwLAorCTB4MzAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4ODAsIDB4YzgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsCisJMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKKwkweDkxLCAweDA3LCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDliLCAweDA3LCAweDIyLCAweDVjLAorCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4M2MsIDB4NDQsIDB4MjMsIDB4ZTAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgyZCwgMHgxMCwgMHg0OCwgMHhjMSwgMHgwMSwgMHgwMCwgMHg5YiwgMHgwNywgMHgyMiwgMHhmMiwKKwkweDY0LCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ2LCAweDYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4OTgsIDB4MDcsIDB4YTgsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhlMywgMHg5ZiwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKKwkweGViLCAweDlmLCAweDAwLCAweDVjLCAweDFmLCAweDAwLCAweDAxLCAweDAwLCAweDIwLCAweDAwLCAweDJmLCAweDA1LAorCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGIsIDB4ZTQsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHgxNywgMHhmMCwgMHgwMSwgMHgwMCwgMHhhMSwgMHgwNywgMHg5MCwgMHhmMiwKKwkweDE2LCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDE3LCAweGMwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4NjYsIDB4MjAsIDB4MTcsIDB4YTQsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MTQsCisJMHgyYSwgMHhjOCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxZCwgMHgyYSwgMHhjMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDUwLCAweDJiLCAweGUwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYyLAorCTB4MmEsIDB4OTQsIDB4MDEsIDB4MDAsIDB4MzAsIDB4ODAsIDB4MDAsIDB4MTAsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsCisJMHhhYywgMHgwNywgMHgyMiwgMHhmMiwgMHg2NCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwKKwkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLAorCTB4YTksIDB4MDcsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ZTMsIDB4OWYsIDB4MDAsIDB4ODgsCisJMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgxNywgMHgxMCwgMHhkYywgMHgwMSwgMHgwMCwKKwkweGM5LCAweDA3LCAweDIyLCAweDQwLCAweDE1LCAweDZjLCAweDAwLCAweDAwLCAweGI0LCAweDA3LCAweGEyLCAweDQ0LAorCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4MWYsIDB4OTAsIDB4MDEsIDB4MDAsCisJMHhiMywgMHgwNywgMHgyMiwgMHg5ZiwgMHgxMywgMHg2YywgMHgwMCwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg4OCwKKwkweDFjLCAweGNjLCAweDAxLCAweDAwLCAweGU0LCAweDlmLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4M2YsIDB4YzMsIDB4MDEsIDB4MDAsIDB4ZTYsIDB4OWYsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhiNywgMHgwNywgMHhhMiwgMHg0MSwgMHg4NywgMHg3YywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDFlLCAweDNlLCAweGMwLCAweDAxLCAweDAwLCAweGM5LCAweDA3LCAweDIyLCAweDQwLAorCTB4MTUsIDB4NmMsIDB4MDAsIDB4MDAsIDB4YmEsIDB4MDcsIDB4MjAsIDB4MWUsIDB4MTQsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwYSwgMHgzYywgMHhiMCwgMHgwMSwgMHgwMCwgMHhlNSwgMHg5ZiwgMHgwMCwgMHgxZSwKKwkweDI0LCAweDMwLCAweDAxLCAweDAwLCAweGJmLCAweDA3LCAweDIyLCAweDA4LCAweDJlLCAweDMwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTIsIDB4MTEsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWEsCisJMHgxMCwgMHhjMCwgMHgwMSwgMHgwMCwgMHgyMywgMHgwNywgMHgwMCwgMHg0MCwgMHgxNywgMHhiMCwgMHgwMCwgMHgwMCwKKwkweGU0LCAweDlmLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweGU1LCAweDlmLCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4YmMsIDB4MDcsIDB4YTIsIDB4MDgsIDB4MmUsIDB4MzAsIDB4MDAsIDB4MDAsCisJMHg4MCwgMHg4MCwgMHgwMCwgMHhhNiwgMHgwNCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDg3LCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDAzLCAweDQ0LCAweDk5LCAweDAxLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MjIsIDB4MDQsIDB4ZTAsIDB4MzEsIDB4MDAsIDB4MDAsIDB4ZTgsIDB4OWYsIDB4MDAsIDB4MWYsCisJMHg4YywgMHgzMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwZiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweGUyLCAweDlmLCAweDAwLCAweDVjLCAweDFmLCAweDkwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDAzLAorCTB4NDQsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjIsIDB4MDQsIDB4ZTAsIDB4MzEsIDB4MDAsIDB4MDAsCisJMHhlNiwgMHg5ZiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhjZSwgMHgwNywgMHhhMiwgMHg0MSwKKwkweDg3LCAweDdjLCAweDAwLCAweDAwLCAweGNmLCAweDA3LCAweDAwLCAweDFlLCAweDNlLCAweGMwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MWYsIDB4OGMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHgwNSwgMHhiMCwgMHgwMSwgMHgwMCwgMHhlOCwgMHg5ZiwgMHgwMCwgMHg0MCwgMHgwZiwgMHgzMCwgMHgwMSwgMHgwMCwKKwkweGUyLCAweDlmLCAweDAwLCAweDVjLCAweDFmLCAweDkwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4ZjcsIDB4MDcsIDB4MDAsIDB4YmMsIDB4ODAsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwMywgMHg4MCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMywgMHg4MCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAzLCAweDgwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDMsIDB4ODAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDMsIDB4ODAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMywgMHg4MCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDAzLCAweDgwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAzLCAweDgwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJfSwKKwl7CisJMHgzMSwgMHg4MCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgzNCwgMHg4MCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDM1LCAweDgwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MWIsIDB4ODAsIDB4ODEsIDB4ODAsCisJMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwZSwgMHg4NywgMHhhMiwgMHg0MCwgMHg5MSwgMHg2ZiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDRjLCAweDkwLCAweGIzLCAweDAxLCAweDAwLCAweDVjLCAweDk1LCAweDJlLCAweGEyLAorCTB4ODAsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4ODAsIDB4ZjQsIDB4ODksIDB4MDEsIDB4MDAsCisJMHg5MCwgMHg5NSwgMHgyYSwgMHhjOCwgMHhlNSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMSwKKwkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGYwLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4YTQsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDAsCisJMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkMSwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGQyLCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRjLAorCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDQsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhkMywgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlZSwKKwkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRlLCAweGYwLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDQsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MTgsIDB4ODAsIDB4MTEsIDB4ODEsCisJMHg5OCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MSwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKKwkweDFhLCAweDgwLCAweDExLCAweDgyLCAweDk4LCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUyLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MGUsIDB4ODcsIDB4MDAsIDB4NDgsIDB4ZmQsIDB4OTMsIDB4MDAsIDB4MDAsCisJMHhiNiwgMHgwMywgMHgwMCwgMHg0MCwgMHhhMSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgyMywgMHg4MCwgMHhhMiwgMHg0MiwKKwkweGZkLCAweDdmLCAweDAwLCAweDAwLCAweDIwLCAweDgwLCAweDAwLCAweDgwLCAweDgwLCAweDMyLCAweDAwLCAweDAwLAorCTB4MjIsIDB4ODAsIDB4MTEsIDB4ODEsIDB4ODIsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MjIsIDB4ODAsIDB4NTEsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgyMiwgMHg4MCwgMHgxMSwgMHg4MiwgMHg4MiwgMHgzMCwgMHgwMCwgMHgwMCwKKwkweDIyLCAweDgwLCAweDUyLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDJjLCAweDgwLCAweDAwLCAweDQ4LAorCTB4ZmQsIDB4OTMsIDB4MDAsIDB4MDAsIDB4MjcsIDB4ODAsIDB4MDAsIDB4ODAsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgyNiwgMHg4MCwgMHhhMiwgMHg1MywgMHgwNywgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MSwgMHg1MywKKwkweDA3LCAweDkwLCAweDAxLCAweDAwLCAweDJhLCAweDgwLCAweDAwLCAweDUyLCAweDA3LCAweDkwLCAweDAwLCAweDAwLAorCTB4MjksIDB4ODAsIDB4YTIsIDB4NTIsIDB4MDcsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTIsIDB4NTIsCisJMHgwNywgMHg5MCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MywgMHgwNywgMHg5MCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ4LCAweGZkLCAweDkzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ2LAorCTB4ZjMsIDB4OTMsIDB4MDEsIDB4MDAsIDB4NWMsIDB4OTUsIDB4MmUsIDB4YTIsIDB4NTIsIDB4YjMsIDB4MDEsIDB4MDAsCisJMHhmZiwgMHgwMCwgMHgwMCwgMHg4MCwgMHhmNCwgMHg4OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YywKKwkweGU0LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE5LCAweDQ1LCAweGIxLCAweDAxLCAweDAwLAorCTB4MzAsIDB4ODAsIDB4MDAsIDB4NGMsIDB4ODAsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1NSwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKKwkweGFmLCAweDgyLCAweDA1LCAweDQwLCAweDQ5LCAweGIxLCAweDAwLCAweDAwLCAweGFmLCAweDgyLCAweDA1LCAweDQwLAorCTB4NDksIDB4YjEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NDAsIDB4NDksIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg0YywgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YiwKKwkweGRlLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGZkLCAweDkzLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDgsIDB4ZmQsIDB4ODMsIDB4MDEsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg5YiwgMHg5YiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhNSwgMHg5YywgMHhiMywgMHgwMSwgMHgwMCwKKwkweDQ4LCAweDAzLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDU4LCAweDk1LCAweDIwLCAweDQ0LAorCTB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDQsIDB4OTQsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmMiwgMHgyNCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwYywgMHgwMCwgMHhlZSwKKwkweDk2LCAweDg4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRhLCAweDk3LCAweGYwLCAweDAxLCAweDAwLAorCTB4NDQsIDB4ODAsIDB4YTIsIDB4NDMsIDB4OTcsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsCisJMHhmZCwgMHg5MywgMHgwMSwgMHgwMCwgMHgwMCwgMHhjMCwgMHgwMCwgMHhhNiwgMHgzNiwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweGQwLCAweDE0LCAweDAwLCAweDQwLCAweDQ3LCAweDk5LCAweDAxLCAweDAwLCAweDA1LCAweDAwLCAweDAwLCAweDQwLAorCTB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MzgsIDB4MDAsIDB4NDAsIDB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwNiwgMHgwMCwgMHg0MCwgMHhmNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweGY1LCAweDk5LCAweDAxLCAweDAwLCAweDA1LCAweDEwLCAweDAwLCAweDQwLCAweGY1LCAweDk5LCAweDAxLCAweDAwLAorCTB4MDIsIDB4MDksIDB4MDAsIDB4NDAsIDB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHhmNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHg2MCwgMHgwMywgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDg4LCAweDAzLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGEwLCAweDAzLCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4YTIsIDB4ODIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHg5YSwgMHg4MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHg2MCwgMHg5NSwgMHgyMCwgMHg0MCwKKwkweGUxLCAweGIxLCAweDAxLCAweDAwLCAweDcwLCAweDk1LCAweDIwLCAweDQwLCAweGUxLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDksIDB4ZGQsIDB4OTEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg5MSwgMHhiMywgMHgwMSwgMHgwMCwgMHhlMCwgMHg5NSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDg1LCAweGIzLCAweDAxLCAweDAwLCAweDVjLCAweDk1LCAweDIwLCAweDQwLAorCTB4ZTEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MjcsIDB4ODIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHg5MCwgMHgwNiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1ZiwKKwkweDJmLCAweDgxLCAweDAxLCAweDAwLCAweDhkLCAweDgxLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4ZTUsIDB4OTUsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1NSwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKKwkweGRkLCAweDgyLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgyOCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwKKwkweGFmLCAweDgyLCAweDAwLCAweDQxLCAweGUxLCAweGMxLCAweDAwLCAweDAwLCAweDc4LCAweDE4LCAweDAwLCAweDQwLAorCTB4NDksIDB4OTksIDB4MDEsIDB4MDAsIDB4MTksIDB4MDUsIDB4MjIsIDB4NTQsIDB4ODEsIDB4N2MsIDB4MDAsIDB4MDAsCisJMHg2YywgMHg4MCwgMHg0MiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MiwgMHgwMCwgMHhiNCwKKwkweDY5LCAweGRmLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDFhLCAweDQ0LCAweDkzLCAweDkzLCAweDAxLCAweDAwLAorCTB4MjgsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDcsIDB4OTksIDB4MDEsIDB4MDAsIDB4MTgsIDB4MDUsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4NDAsIDB4ODIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4N2QsIDB4ODAsIDB4MjIsIDB4NDAsCisJMHg5NywgMHg2YywgMHgwMCwgMHgwMCwgMHg3YSwgMHg4MCwgMHg0MiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDRmLCAweDY5LCAweDkzLCAweDAxLCAweDAwLCAweDM4LCAweDgxLCAweDAwLCAweDU4LAorCTB4NjksIDB4OTMsIDB4MDAsIDB4MDAsIDB4NTQsIDB4MTYsIDB4MDAsIDB4NDAsIDB4NDcsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmZSwgMHhmNCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwNSwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDgwLCAweDgwLCAweDQyLCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGUsIDB4NjksIDB4OTMsIDB4MDEsIDB4MDAsIDB4MzgsIDB4ODEsIDB4MDAsIDB4NTgsCisJMHg2OSwgMHg5MywgMHgwMCwgMHgwMCwgMHg0MCwgMHgxNiwgMHgwMCwgMHg0MCwgMHg0NSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDQwLCAweDA1LCAweDAwLCAweDQwLCAweDQ5LCAweDMxLCAweDAxLCAweDAwLCAweGY2LCAweDE1LCAweDAwLCAweDQwLAorCTB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4NWMsIDB4MTYsIDB4MDAsIDB4NDAsIDB4NDUsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg2ZSwgMHhmYSwgMHg4ZSwgMHhiMCwgMHgwMSwgMHgwMCwgMHhjMSwgMHgwNSwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHg5NiwgMHg4MCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MiwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDk2LCAweDgwLCAweDIyLCAweDQwLCAweDk3LCAweDZjLCAweDAwLCAweDAwLAorCTB4OTMsIDB4ODAsIDB4NDIsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGYsCisJMHg2OSwgMHg5MywgMHgwMSwgMHgwMCwgMHgzOCwgMHg4MSwgMHgwMCwgMHg1OCwgMHg2OSwgMHg5MywgMHgwMCwgMHgwMCwKKwkweDM4LCAweDA1LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDFlLCAweDAwLCAweDAwLCAweDQ4LAorCTB4YjIsIDB4Y2IsIDB4MDEsIDB4MDAsIDB4ZDAsIDB4MDUsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDgzLCAweDAyLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4YjgsIDB4MDIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHhkNCwgMHg5ZiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhkNSwgMHg5ZiwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGQ2LCAweDlmLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4ZDcsIDB4OWYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4NzIsIDB4MDEsIDB4MDAsIDB4NDEsCisJMHg4MSwgMHhjMCwgMHgwMCwgMHgwMCwgMHg1NSwgMHgwMSwgMHg1MSwgMHg0OCwgMHhmZCwgMHg5MywgMHgwMCwgMHgwMCwKKwkweDU1LCAweDAxLCAweDUyLCAweDQ4LCAweGZkLCAweDkzLCAweDAwLCAweDAwLCAweDU1LCAweDAxLCAweDU1LCAweDQ5LAorCTB4ZmQsIDB4ODMsIDB4MDAsIDB4MDAsIDB4NTUsIDB4MDEsIDB4NTYsIDB4NGEsIDB4ZmQsIDB4ODMsIDB4MDAsIDB4MDAsCisJMHg1MCwgMHgwMSwgMHg5MSwgMHg4MSwgMHg4MCwgMHgzMCwgMHgwMCwgMHgwMCwgMHg1NSwgMHgwMSwgMHg0NSwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDUwLCAweDAxLCAweDkxLCAweDgyLCAweDgwLCAweDMwLCAweDAwLCAweDAwLAorCTB4NTUsIDB4MDEsIDB4NDYsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4OSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg4MCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGYwLCAweDE2LCAweGIwLCAweDAxLCAweDAwLCAweDIyLCAweDAwLCAweDAwLCAweDA1LAorCTB4NDgsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4NDgsIDB4YzEsIDB4MDEsIDB4MDAsCisJMHhiNCwgMHg4MCwgMHg0MywgMHgzMCwgMHgzZCwgMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5ZSwKKwkweDg1LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDFiLCAweDQxLCAweDNkLCAweGMzLCAweDAxLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MjAsIDB4NDIsIDB4ZWMsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg0OSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhhZSwgMHgwMywgMHgwMCwgMHhjYiwgMHhhMywgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDIwLCAweDQ2LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQyLAorCTB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDMsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwKKwkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDIwLCAweDAwLCAweDAwLCAweDIwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4YTgsIDB4ZDAsIDB4ZTEsIDB4YjEsIDB4MDAsIDB4MDAsIDB4YmYsIDB4ODAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOCwgMHg5OCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDA0LCAweDgwLCAweDAwLCAweDQwLCAweDhiLCAweGIzLCAweDAwLCAweDAwLCAweGIxLCAweDAzLCAweDAwLCAweDQwLAorCTB4YTEsIDB4OTksIDB4MDEsIDB4MDAsIDB4YzcsIDB4ODAsIDB4YTIsIDB4NDIsIDB4OTcsIDB4NmYsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHhhMSwgMHhjMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDgwLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGEyLCAweDA0LCAweDgwLCAweDk0LCAweDAwLCAweDAwLAorCTB4ODAsIDB4MTUsIDB4M2YsIDB4NDIsIDB4OTcsIDB4ZTMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg0OSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2MCwgMHgwMywgMHgwMiwgMHg5NCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDA3LCAweGIwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweGNiLAorCTB4OTksIDB4Y2IsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4Y2MsIDB4ZjMsIDB4ODMsIDB4MDEsIDB4MDAsCisJMHhkMSwgMHg4MCwgMHhhMiwgMHg0MiwgMHg5NywgMHg2ZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjYiwKKwkweGYzLCAweDkzLCAweDAxLCAweDAwLCAweGFlLCAweDAzLCAweDAwLCAweGNiLCAweGEzLCAweGM5LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4NDQsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsCisJMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDA0LCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGExLAorCTB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDUsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjEsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgyMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHhkOCwgMHg4MCwgMHhhOCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweGY5LCAweDAyLCAweDAwLCAweDIwLCAweDQyLCAweDMxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4YTIsIDB4NDEsIDB4MDUsIDB4NmMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4Y2IsCisJMHhkYiwgMHg5MSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOSwgMHg0MSwgMHg4YiwgMHhiMywgMHgwMSwgMHgwMCwKKwkweDYwLCAweDAwLCAweDAwLCAweDQwLCAweDYxLCAweDk5LCAweDAxLCAweDAwLCAweGRlLCAweDgwLCAweGE4LCAweGIxLAorCTB4OGMsIDB4MzMsIDB4MDAsIDB4MDAsIDB4NjAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjEsIDB4OTksIDB4MDEsIDB4MDAsCisJMHhlMCwgMHg4MCwgMHhhOCwgMHhiMSwgMHg5NCwgMHgzMywgMHgwMCwgMHgwMCwgMHhlNiwgMHg4MCwgMHgxNCwgMHhjNiwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDE4LCAweDAwLCAweDAwLCAweGM2LCAweDgzLCAweGY0LCAweDAxLCAweDAwLAorCTB4ZjQsIDB4ODIsIDB4MjIsIDB4NGYsIDB4ODMsIDB4MDQsIDB4MDAsIDB4MDAsIDB4YzIsIDB4ODAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhmZiwgMHgwMSwgMHgwMCwgMHhjNiwgMHg4MSwgMHg4OCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGM2LCAweDk3LCAweGEzLCAweDAxLCAweDAwLCAweGMyLCAweDgwLCAweDFmLCAweDVjLAorCTB4OTcsIDB4NTMsIDB4MDAsIDB4MDAsIDB4NTgsIDB4ODIsIDB4MWUsIDB4YzYsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgyZiwgMHg0MywgMHg4MSwgMHhmMCwgMHgwMSwgMHgwMCwgMHhlYywgMHg4MCwgMHgwMCwgMHg0MCwKKwkweDEwLCAweGM5LCAweDAwLCAweDAwLCAweDM5LCAweDgxLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4NmEsIDB4ODEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MjQsIDB4ODIsIDB4MDAsIDB4Y2EsCisJMHg2MywgMHhiMywgMHgwMCwgMHgwMCwgMHg2MSwgMHg4MSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDQ4LCAweDgxLCAweDAwLCAweDRkLCAweDgzLCAweGIwLCAweDAwLCAweDAwLCAweDUyLCAweDgxLCAweDAwLCAweDRlLAorCTB4NjEsIDB4YjEsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ODEsIDB4MDAsIDB4NDAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHg0OCwgMHg4MSwgMHgwMCwgMHg0YywgMHg4MywgMHhiMCwgMHgwMCwgMHgwMCwgMHgyNCwgMHg4MSwgMHgwMCwgMHg0MCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweGUzLCAweDgxLCAweDAwLCAweDQwLCAweDQ5LCAweGIxLCAweDAwLCAweDAwLAorCTB4NzEsIDB4ODEsIDB4MDAsIDB4NDAsIDB4YzEsIDB4YjEsIDB4MDAsIDB4MDAsIDB4ZGYsIDB4ODEsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4MSwgMHgwMCwgMHg0MCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweGYwLCAweDAzLCAweDAwLCAweDQwLCAweDQ5LCAweGIxLCAweDAwLCAweDAwLCAweGY0LCAweDgyLCAweDAwLCAweGNhLAorCTB4OWIsIDB4YjMsIDB4MDAsIDB4MDAsIDB4N2IsIDB4ODEsIDB4MDAsIDB4NDAsIDB4YzEsIDB4YjEsIDB4MDAsIDB4MDAsCisJMHg3ZiwgMHg4MSwgMHgwMCwgMHg0MCwgMHhjMSwgMHhiMSwgMHgwMCwgMHgwMCwgMHg4NiwgMHg4MSwgMHgwMCwgMHg0MCwKKwkweGMxLCAweGIxLCAweDAwLCAweDAwLCAweDg3LCAweDgxLCAweDAwLCAweDQwLCAweGMxLCAweGIxLCAweDAwLCAweDAwLAorCTB4ODgsIDB4ODEsIDB4MDAsIDB4NDAsIDB4YzEsIDB4YjEsIDB4MDAsIDB4MDAsIDB4ODksIDB4ODEsIDB4MDAsIDB4NDAsCisJMHhjMSwgMHhiMSwgMHgwMCwgMHgwMCwgMHg4YSwgMHg4MSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDhhLCAweDgxLCAweDAwLCAweDQxLCAweDgxLCAweGIwLCAweDAwLCAweDAwLCAweDE4LCAweDgyLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4OTcsIDB4ODIsIDB4MDAsIDB4YmIsIDB4YWIsIDB4YjMsIDB4MDAsIDB4MDAsCisJMHgyNSwgMHg4MiwgMHgwMCwgMHhjYSwgMHhjZiwgMHhiMywgMHgwMCwgMHgwMCwgMHhjOCwgMHgwMywgMHgwMCwgMHg0MCwKKwkweDQ5LCAweGIxLCAweDAwLCAweDAwLCAweGU4LCAweDAzLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MjYsIDB4ODIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4ZjQsIDB4ODIsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwMywgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweGY0LCAweDgyLCAweDAwLCAweGNhLCAweDc3LCAweGIzLCAweDAwLCAweDAwLCAweDQ5LCAweDgxLCAweDAwLCAweDRkLAorCTB4ODMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4ODEsIDB4MDAsIDB4NGUsIDB4NjEsIDB4YjEsIDB4MDAsIDB4MDAsCisJMHg0MSwgMHg4MSwgMHgwMCwgMHhiYiwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg0OSwgMHg4MSwgMHgwMCwgMHg0YywKKwkweDgzLCAweGIwLCAweDAwLCAweDAwLCAweDQxLCAweDgxLCAweDAwLCAweGJiLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MjQsIDB4ODEsIDB4MDAsIDB4YmIsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MTYsIDB4ODEsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhmNCwgMHg4MiwgMHgwMCwgMHhjYSwgMHg0ZCwgMHhiMywgMHgwMCwgMHgwMCwKKwkweDcwLCAweDA1LCAweDAwLCAweDQwLCAweDQ5LCAweGIxLCAweDAwLCAweDAwLCAweGEwLCAweDA1LCAweDAwLCAweDQwLAorCTB4NDksIDB4YjEsIDB4MDAsIDB4MDAsIDB4MWMsIDB4ODEsIDB4MjIsIDB4NDIsIDB4OGYsIDB4NmYsIDB4MDAsIDB4MDAsCisJMHgxZSwgMHg4MSwgMHgyMiwgMHg0MSwgMHg4ZiwgMHg2ZiwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4MSwgMHgxZSwgMHhjYSwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDIyLCAweDgxLCAweDFmLCAweGNhLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4Y2EsIDB4YzksIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZjQsIDB4ODIsIDB4MDAsIDB4NDIsCisJMHg4ZiwgMHhiMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjYSwgMHhjZCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweGY0LCAweDgyLCAweDAwLCAweDQxLCAweDhmLCAweGIzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGNhLAorCTB4Y2YsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZjQsIDB4ODIsIDB4MDAsIDB4NDAsIDB4OGYsIDB4YjMsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHg4MSwgMHgwMCwgMHhhNiwgMHhjNiwgMHhiMSwgMHgwMSwgMHgwMCwgMHhmNCwgMHg4MiwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweGE2LCAweGM2LCAweGIxLCAweDAxLCAweDAwLAorCTB4ZjQsIDB4ODIsIDB4MDAsIDB4NDAsIDB4OGYsIDB4YjMsIDB4MDAsIDB4MDAsIDB4NzgsIDB4MTgsIDB4MDAsIDB4NDAsCisJMHg0OSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMCwgMHgyZiwgMHg5YywgMHg4OSwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDNiLCAweDgxLCAweDAwLCAweDQwLCAweDM5LCAweDMzLCAweDAxLCAweDAwLCAweDE4LCAweDAwLCAweDJmLCAweDliLAorCTB4ODksIDB4YjAsIDB4MDEsIDB4MDAsIDB4M2IsIDB4ODEsIDB4MDAsIDB4NDAsIDB4MzcsIDB4MzMsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgyZiwgMHg5YSwgMHg4OSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgzYiwgMHg4MSwgMHgwMCwgMHg0MCwKKwkweDM1LCAweDMzLCAweDAxLCAweDAwLCAweDA4LCAweDAwLCAweDJmLCAweDk5LCAweDg5LCAweGIwLCAweDAxLCAweDAwLAorCTB4M2IsIDB4ODEsIDB4MDAsIDB4NDAsIDB4MzMsIDB4MzMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4YWUsCisJMHg0NywgMHhjOSwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmMSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGNhLCAweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLAorCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MTgsIDB4MDAsIDB4NDAsIDB4ZTEsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHhhZSwKKwkweDYzLCAweGRkLCAweDAxLCAweDAwLCAweDM2LCAweDgxLCAweDI4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4MzMsIDB4ODEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MzYsIDB4ODEsIDB4NDIsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1YywgMHg2OSwgMHg5MywgMHgwMSwgMHgwMCwKKwkweGY0LCAweDgyLCAweDFhLCAweDQ0LCAweDkzLCAweDkzLCAweDAwLCAweDAwLCAweDM5LCAweDgxLCAweDQyLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MzgsIDB4ODEsIDB4MDAsIDB4NTgsIDB4NjksIDB4OTMsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHhmMCwgMHhkMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhNCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGEyLCAweDQwLCAweGUxLCAweDZkLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4NDUsIDB4ZDEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsCisJMHhlMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MSwgMHhlMSwgMHhkMSwgMHgwMSwgMHgwMCwKKwkweDQxLCAweDgxLCAweDM3LCAweDVjLCAweDYxLCAweDMxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLAorCTB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDUsIDB4ODEsIDB4MjgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHg0MiwgMHg4MSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjYSwKKwkweDYzLCAweGIxLCAweDAxLCAweDAwLCAweDQ1LCAweDgxLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4ZjQsIDB4ODIsIDB4MTcsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4NGEsIDB4ODEsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg0YSwgMHg4MSwgMHgwMCwgMHhiYiwgMHg4MSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NGIsIDB4ODEsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhjYSwgMHg2MywgMHhiMSwgMHgwMSwgMHgwMCwgMHhmNCwgMHg4MiwgMHgyOCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDRkLCAweDgxLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4NTAsIDB4OTUsIDB4MDAsIDB4NDAsIDB4NDcsIDB4OTksIDB4MDEsIDB4MDAsIDB4NTMsIDB4ODEsIDB4MDAsIDB4YmIsCisJMHg4NywgMHhiMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHg5NSwgMHgyZiwgMHg0MCwgMHg4NywgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDU1LCAweDgxLCAweDIyLCAweDQwLCAweDk1LCAweDdmLCAweDAwLCAweDAwLCAweGY0LCAweDgyLCAweDYwLCAweDQwLAorCTB4OTUsIDB4ODMsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MmQsIDB4ZjAsIDB4ODQsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHg1NiwgMHg4MSwgMHgzNiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwKKwkweDYyLCAweGIxLCAweDAxLCAweDAwLCAweDU3LCAweDgxLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NTksIDB4ODEsIDB4YTgsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjYSwgMHg2MywgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDViLCAweDgxLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE2LCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4ZjQsIDB4ODIsIDB4MjIsIDB4NDEsIDB4NDMsIDB4NTEsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwOCwgMHgwMCwgMHhjYSwgMHg5NSwgMHhjYiwgMHgwMSwgMHgwMCwgMHg1NiwgMHg4MSwgMHgwMCwgMHg0MSwKKwkweDg1LCAweGMwLCAweDAwLCAweDAwLCAweDYzLCAweDgxLCAweGEyLCAweDQyLCAweDY3LCAweDZmLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4NjcsIDB4YjMsIDB4MDEsIDB4MDAsIDB4NjMsIDB4ODEsIDB4NDIsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg2NSwgMHhiMywgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDkzLCAweDgzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDFhLCAweGNhLAorCTB4NjksIDB4OTcsIDB4MDEsIDB4MDAsIDB4ZjQsIDB4ODIsIDB4MjYsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHg2OCwgMHg4MSwgMHg0MiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhmNCwgMHg4MiwgMHgxYSwgMHg0NCwKKwkweDkzLCAweDkzLCAweDAwLCAweDAwLCAweGY0LCAweDgyLCAweDIwLCAweDQzLCAweDk1LCAweDZmLCAweDAwLCAweDAwLAorCTB4ZjQsIDB4ODIsIDB4ODAsIDB4Y2EsIDB4NjcsIDB4MzMsIDB4MDAsIDB4MDAsIDB4ZjQsIDB4ODIsIDB4MjIsIDB4NDAsCisJMHg2NSwgMHg2ZiwgMHgwMCwgMHgwMCwgMHhmNCwgMHg4MiwgMHgwMCwgMHg2ZiwgMHhkYiwgMHg5MSwgMHgwMCwgMHgwMCwKKwkweDg1LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDM1LCAweDgwLCAweDIyLCAweDQwLAorCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ZjQsIDB4ODIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1OCwgMHg5NSwgMHg5MywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1ZiwKKwkweDk1LCAweDkzLCAweDAxLCAweDAwLCAweDc3LCAweDgxLCAweGEyLCAweDQ0LCAweDIxLCAweDZmLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NWYsIDB4OTUsIDB4ODMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWUsCisJMHg5NSwgMHg5MywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1NywgMHg5NSwgMHg5MywgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGNhLCAweGMzLCAweGIxLCAweDAxLCAweDAwLCAweDdhLCAweDgxLCAweDIyLCAweDViLAorCTB4OTUsIDB4N2YsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGIsIDB4ZmQsIDB4OTMsIDB4MDEsIDB4MDAsCisJMHhmNCwgMHg4MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgxYiwgMHhmZCwgMHgwMCwgMHhjYSwKKwkweDk1LCAweDliLCAweDAxLCAweDAwLCAweDBkLCAweDAxLCAweDAwLCAweGNhLCAweGM1LCAweDMxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NWYsIDB4OTUsIDB4ODMsIDB4MDEsIDB4MDAsIDB4ZjQsIDB4ODIsIDB4MDAsIDB4Y2EsCisJMHhjNSwgMHhiMSwgMHgwMCwgMHgwMCwgMHhkZiwgMHg2ZiwgMHgwMCwgMHhjYSwgMHg5NSwgMHg5YiwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDU1LCAweDk1LCAweDkzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGNhLAorCTB4YzcsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZjQsIDB4ODIsIDB4MjIsIDB4NWYsIDB4OTUsIDB4N2YsIDB4MDAsIDB4MDAsCisJMHgwZCwgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1ZiwKKwkweDk1LCAweDgzLCAweDAxLCAweDAwLCAweGY0LCAweDgyLCAweDAwLCAweGNhLCAweGM3LCAweGIxLCAweDAwLCAweDAwLAorCTB4ZjQsIDB4ODIsIDB4MDAsIDB4Y2EsIDB4YzksIDB4YjEsIDB4MDAsIDB4MDAsIDB4ZjQsIDB4ODIsIDB4MDAsIDB4Y2EsCisJMHhjYiwgMHhiMSwgMHgwMCwgMHgwMCwgMHhmNCwgMHg4MiwgMHgwMCwgMHhjYSwgMHhjZCwgMHhiMSwgMHgwMCwgMHgwMCwKKwkweGY0LCAweDgyLCAweDAwLCAweGNhLCAweGNmLCAweGIxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDJlLCAweDQyLAorCTB4ODEsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4OTgsIDB4MTQsIDB4MDAsIDB4NDAsIDB4NDgsIDB4YzksIDB4MDEsIDB4MDAsCisJMHhmNCwgMHg4MiwgMHgwMCwgMHhjYSwgMHhlMSwgMHhiMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDA5LCAweGIxLCAweDAxLCAweDAwLCAweDIwLCAweDAwLCAweDAwLCAweGE2LCAweDgyLCAweGIwLCAweDAxLCAweDAwLAorCTB4OGYsIDB4ODEsIDB4YTIsIDB4NWUsIDB4MGIsIDB4N2QsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4NDEsCisJMHgwOCwgMHg5OSwgMHgwMSwgMHgwMCwgMHg5MSwgMHg4MSwgMHhhMiwgMHg1ZSwgMHgwYiwgMHg3ZCwgMHgwMCwgMHgwMCwKKwkweDIwLCAweDgwLCAweDAwLCAweGE2LCAweDA4LCAweGIxLCAweDAxLCAweDAwLCAweDkzLCAweDgxLCAweDlmLCAweDg1LAorCTB4ODIsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzAsIDB4ODMsIDB4ODQsIDB4MDEsIDB4MDAsCisJMHhjOCwgMHg4MSwgMHgyMiwgMHgzMCwgMHg4MywgMHg2YywgMHgwMCwgMHgwMCwgMHg5MiwgMHg4MSwgMHhhMiwgMHg0ZiwKKwkweDBiLCAweDdkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDIxLCAweGIzLCAweDAxLCAweDAwLAorCTB4MDIsIDB4ODAsIDB4MDAsIDB4YTYsIDB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MTMsIDB4ODIsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4NCwgMHhlNCwgMHgwMSwgMHgwMCwKKwkweDAzLCAweDgwLCAweDAwLCAweGE2LCAweDgyLCAweGIwLCAweDAxLCAweDAwLCAweDEzLCAweDgyLCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4ZjAsIDB4ZmYsIDB4MDAsIDB4NDEsIDB4ODYsIDB4ODgsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywgMHg4NCwgMHg5NCwgMHgwMSwgMHgwMCwgMHgwZiwgMHgwMCwgMHgwMCwgMHhhNiwKKwkweDg2LCAweGIwLCAweDAxLCAweDAwLCAweDEwLCAweGM0LCAweDAwLCAweDQzLCAweDg2LCAweDk4LCAweDAxLCAweDAwLAorCTB4YTgsIDB4ODEsIDB4YTIsIDB4NDMsIDB4ODQsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsCisJMHgyMSwgMHhiMywgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHhhNiwgMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDFjLCAweDAwLCAweDAwLCAweDQxLCAweDgyLCAweGRjLCAweDAxLCAweDAwLCAweGE1LCAweDgxLCAweGEyLCAweDVlLAorCTB4MGIsIDB4N2QsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MDgsIDB4OTksIDB4MDEsIDB4MDAsCisJMHhiYSwgMHg4MSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg0MSwgMHgwMSwgMHgwMCwgMHhhNiwKKwkweDg2LCAweGIwLCAweDAxLCAweDAwLCAweDUwLCAweDBjLCAweDAwLCAweDQzLCAweDg2LCAweDk4LCAweDAxLCAweDAwLAorCTB4YWQsIDB4ODEsIDB4YTIsIDB4NDMsIDB4ODQsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCisJMHgyMSwgMHhiMywgMHgwMSwgMHgwMCwgMHhiYSwgMHg4MSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDQxLCAweDAxLCAweDAwLCAweGE2LCAweDg2LCAweGIwLCAweDAxLCAweDAwLCAweDYwLCAweDBjLCAweDAwLCAweDQzLAorCTB4ODYsIDB4OTgsIDB4MDEsIDB4MDAsIDB4YmEsIDB4ODEsIDB4YTIsIDB4NDMsIDB4ODQsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHgyMSwgMHhiMywgMHgwMSwgMHgwMCwgMHgxOCwgMHg4MCwgMHgwMCwgMHhhNiwKKwkweDgyLCAweGIwLCAweDAxLCAweDAwLCAweDEzLCAweDgyLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4ZmYsIDB4ZmYsIDB4MDAsIDB4NDEsIDB4ODIsIDB4ODgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4NzcsIDB4MDAsIDB4NDEsCisJMHg4MiwgMHg4YywgMHgwMSwgMHgwMCwgMHgwMSwgMHgwMiwgMHgwMCwgMHg0MSwgMHg4MiwgMHg5OCwgMHgwMSwgMHgwMCwKKwkweDIwLCAweDAwLCAweDAwLCAweDQxLCAweDgyLCAweGRjLCAweDAxLCAweDAwLCAweDE4LCAweDAwLCAweDAwLCAweDQxLAorCTB4ODIsIDB4ZGMsIDB4MDEsIDB4MDAsIDB4YjgsIDB4ODEsIDB4YTIsIDB4NWUsIDB4MGIsIDB4N2QsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgwOCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHhhNiwKKwkweDgyLCAweGIwLCAweDAxLCAweDAwLCAweGJiLCAweDgxLCAweGEyLCAweDVlLCAweDBiLCAweDdkLCAweDAwLCAweDAwLAorCTB4NDAsIDB4MTMsIDB4MDAsIDB4NDEsIDB4MDgsIDB4OTksIDB4MDEsIDB4MDAsIDB4YzMsIDB4ODEsIDB4MjIsIDB4NDMsCisJMHgyMSwgMHg2ZiwgMHgwMCwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHhhNiwgMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDEyLCAweDAwLCAweDAwLCAweDQxLCAweDgyLCAweGRjLCAweDAxLCAweDAwLCAweGMwLCAweDgxLCAweGEyLCAweDVlLAorCTB4MGIsIDB4N2QsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4NDEsIDB4MDgsIDB4OTksIDB4MDEsIDB4MDAsCisJMHhkZSwgMHg4MSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHhhNiwKKwkweDgyLCAweGIwLCAweDAxLCAweDAwLCAweDE5LCAweDAwLCAweDAwLCAweDQxLCAweDgyLCAweGRjLCAweDAxLCAweDAwLAorCTB4YzUsIDB4ODEsIDB4YTIsIDB4NWUsIDB4MGIsIDB4N2QsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTAsIDB4MDAsIDB4NDEsCisJMHgwOCwgMHg5OSwgMHgwMSwgMHgwMCwgMHhkZSwgMHg4MSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDIxLCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4ODMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWYsIDB4ODMsIDB4OTAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1ZSwgMHg4MywgMHg5MCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1NywKKwkweDgzLCAweDkwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweGMyLCAweGIxLCAweDAxLCAweDAwLAorCTB4MGMsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWYsCisJMHg4MywgMHg4MCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHhjMiwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDBjLCAweDAxLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDIwLCAweDAwLCAweDAwLCAweGE2LAorCTB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ODIsIDB4ZGMsIDB4MDEsIDB4MDAsCisJMHgyMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgwOCwgMHg5OSwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHhhNiwKKwkweDgyLCAweGIwLCAweDAxLCAweDAwLCAweDExLCAweDAwLCAweDAwLCAweDQxLCAweDgyLCAweGRjLCAweDAxLCAweDAwLAorCTB4ZDcsIDB4ODEsIDB4YTIsIDB4NWUsIDB4MGIsIDB4N2QsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4NDEsCisJMHgwOCwgMHg5OSwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHhhNiwgMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweGRhLCAweDgxLCAweGEyLCAweDVlLCAweDBiLCAweDdkLCAweDAwLCAweDAwLCAweDQwLCAweDEzLCAweDAwLCAweDQxLAorCTB4MDgsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4YTYsIDB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHg0MCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgyZSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDIwLCAweDAwLCAweDAwLCAweGE2LCAweDgwLCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4Y2EsIDB4ODEsIDB4OTQsIDB4MDEsIDB4MDAsIDB4ZTEsIDB4ODEsIDB4YTIsIDB4NWUsCisJMHgwYiwgMHg3ZCwgMHgwMCwgMHgwMCwgMHhmNCwgMHg4MiwgMHgwMCwgMHg0MCwgMHgwOCwgMHhiMSwgMHgwMCwgMHgwMCwKKwkweGM4LCAweDE0LCAweDJlLCAweGJiLCAweDg1LCAweGIwLCAweDAxLCAweDAwLCAweGU0LCAweDgxLCAweGEyLCAweDVlLAorCTB4MGIsIDB4N2QsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODcsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHhmMywgMHg4MSwgMHgyMiwgMHg0MywgMHgyMSwgMHg2ZiwgMHgwMCwgMHgwMCwgMHgwMiwgMHg4MiwgMHgyMiwgMHg0NCwKKwkweDIxLCAweDZmLCAweDAwLCAweDAwLCAweDExLCAweDgwLCAweDAwLCAweGE2LCAweDgyLCAweGIwLCAweDAxLCAweDAwLAorCTB4MTMsIDB4ODIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MGEsIDB4ODIsIDB4MjIsIDB4NGEsCisJMHg4MywgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4NywgMHg5MCwgMHgwMSwgMHgwMCwKKwkweGVlLCAweDgxLCAweDIyLCAweDRkLCAweDgzLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAorCTB4ODcsIDB4OTAsIDB4MDEsIDB4MDAsIDB4ZjAsIDB4ODEsIDB4MjIsIDB4NGYsIDB4ODMsIDB4N2MsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywgMHg4NywgMHg5MCwgMHgwMSwgMHgwMCwgMHhmMiwgMHg4MSwgMHgyMiwgMHg0ZSwKKwkweDgzLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLCAweDg3LCAweDkwLCAweDAxLCAweDAwLAorCTB4MGEsIDB4ODIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDEsIDB4ODAsIDB4MDAsIDB4YTYsCisJMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgxMywgMHg4MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDAxLCAweDgwLCAweDAwLCAweGE2LCAweDgyLCAweGIwLCAweDAxLCAweDAwLCAweDEzLCAweDgyLCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MGEsIDB4ODIsIDB4MjIsIDB4NDIsIDB4ODMsIDB4N2MsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4NywgMHg5MCwgMHgwMSwgMHgwMCwgMHgxYywgMHg4MCwgMHgwMCwgMHhhNiwKKwkweDgyLCAweGIwLCAweDAxLCAweDAwLCAweDEzLCAweDgyLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4ZmQsIDB4ODEsIDB4MjIsIDB4NDUsIDB4ODMsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCisJMHg4NywgMHg5MCwgMHgwMSwgMHgwMCwgMHhmZiwgMHg4MSwgMHgyMiwgMHg0NCwgMHg4MywgMHg3YywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQzLCAweDg3LCAweDkwLCAweDAxLCAweDAwLCAweDAxLCAweDgyLCAweDIyLCAweDQzLAorCTB4ODMsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4ODcsIDB4OTAsIDB4MDEsIDB4MDAsCisJMHgwYSwgMHg4MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMSwgMHg4MCwgMHgwMCwgMHhhNiwKKwkweDgyLCAweGIwLCAweDAxLCAweDAwLCAweDEzLCAweDgyLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4MDEsIDB4ODAsIDB4MDAsIDB4YTYsIDB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MTMsIDB4ODIsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwYSwgMHg4MiwgMHgyMiwgMHg0MiwgMHg4MywgMHg3YywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDg3LCAweDkwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQzLAorCTB4ODcsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ODcsIDB4OTAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHhhNiwgMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgxMywgMHg4MiwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDBlLCAweDgyLCAweDIyLCAweDRiLCAweDgzLCAweDdjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODcsIDB4ODAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsCisJMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhmZiwgMHg3ZiwgMHgwMCwgMHhhMiwgMHhhMCwgMHg4YiwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweGE1LCAweGIzLCAweDAxLCAweDAwLCAweGI4LCAweDgwLCAweDAwLCAweGNhLAorCTB4YTcsIDB4MzMsIDB4MDEsIDB4MDAsIDB4MzYsIDB4ODEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgyMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4MiwgMHhkYywgMHgwMSwgMHgwMCwgMHgxNCwgMHg4MiwgMHhhMiwgMHg1ZSwKKwkweDBiLCAweDdkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDA4LCAweGIxLCAweDAxLCAweDAwLAorCTB4MTYsIDB4ODIsIDB4OWYsIDB4ODUsIDB4ODIsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgxYiwgMHg4MiwgMHgxNCwgMHhmNywgMHg4MSwgMHgzMCwgMHgwMCwgMHgwMCwKKwkweDFiLCAweDgyLCAweGEyLCAweDQ5LCAweGZkLCAweDdmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ4LAorCTB4ZmQsIDB4OTMsIDB4MDEsIDB4MDAsIDB4MWUsIDB4ODIsIDB4MTUsIDB4ZjgsIDB4ODEsIDB4MTQsIDB4MDAsIDB4MDAsCisJMHgxZSwgMHg4MiwgMHhhMiwgMHg0YSwgMHhmZCwgMHg3ZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0OCwKKwkweGZkLCAweDkzLCAweDAxLCAweDAwLCAweDIwLCAweDgyLCAweGEyLCAweGM4LCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4NDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODAsIDB4ZGMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4NDAsCisJMHg4MCwgMHhkYywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhlZiwgMHhiMywgMHgwMSwgMHgwMCwKKwkweDIyLCAweDgyLCAweDQyLCAweDQwLCAweGYxLCAweDMzLCAweDAwLCAweDAwLCAweDM4LCAweDgxLCAweDAwLCAweDQwLAorCTB4NjgsIDB4OTcsIDB4MDAsIDB4MDAsIDB4ZjQsIDB4ODIsIDB4MDAsIDB4YmIsIDB4NmIsIDB4YjMsIDB4MDAsIDB4MDAsCisJMHhmNCwgMHg4MiwgMHgwMCwgMHhiYiwgMHhiMSwgMHhiMywgMHgwMCwgMHgwMCwgMHhmNCwgMHg4MiwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweDAwLCAweDQwLCAweDgxLCAweDk4LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MTgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MywgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgxOSwgMHgwMCwgMHg0MCwgMHg0NSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDQyLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDQzLCAweGZmLAorCTB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4MSwgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDE4LCAweGIxLCAweDAxLCAweDAwLCAweDJiLCAweDgyLCAweGEyLCAweDQxLCAweDgzLCAweDUwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MTYsIDB4MDAsIDB4NDAsIDB4NDUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MTksIDB4MDAsIDB4NDAsCisJMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywgMHg0MywgMHhjMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDgzLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYzLAorCTB4ODAsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWIsIDB4ODEsIDB4ZDAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4MCwgMHhkMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweGY2LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDViLCAweDQzLCAweGMxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ODMsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MzUsIDB4ODIsIDB4YTIsIDB4NTQsCisJMHg4MywgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmNywgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDgzLCAweGMwLCAweDAxLCAweDAwLCAweDNjLCAweDgyLCAweGEyLCAweDA2LAorCTB4ODMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgxNiwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHg4MCwgMHgxNiwgMHgyZSwgMHgwNiwKKwkweDgzLCAweGIwLCAweDAxLCAweDAwLCAweDM2LCAweDAwLCAweDAwLCAweGZiLCAweGY2LCAweGE5LCAweDAxLCAweDAwLAorCTB4NDIsIDB4ODIsIDB4YTIsIDB4NDEsIDB4ODMsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MjIsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MywgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmYiwgMHhmNiwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDQ1LCAweDgyLCAweGEyLCAweDQxLCAweDgzLCAweDUwLCAweDAwLCAweDAwLCAweDYyLCAweDAwLCAweDAwLCAweDQwLAorCTB4OTUsIDB4OTgsIDB4MDEsIDB4MDAsIDB4ZGMsIDB4OWYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgxNiwgMHgyZCwgMHgwNiwgMHg4MywgMHhiMCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgxNiwgMHgwMCwgMHg0MCwKKwkweDQ1LCAweDk5LCAweDAxLCAweDAwLCAweDVjLCAweDAwLCAweDAwLCAweGZiLCAweGY2LCAweGE5LCAweDAxLCAweDAwLAorCTB4NGIsIDB4ODIsIDB4YTIsIDB4NDEsIDB4ODMsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzAsCisJMHhmOSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3MSwgMHhmOSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDcyLCAweGY5LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDczLAorCTB4ZjksIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzQsIDB4ZjksIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg1NCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg5NSwgMHg5OCwgMHgwMSwgMHgwMCwgMHhkYywgMHg5ZiwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDcwLCAweDk1LCAweGIwLCAweDAxLCAweDAwLAorCTB4NTcsIDB4ODIsIDB4MjIsIDB4NzAsIDB4YjUsIDB4NmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDEsCisJMHg5NywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwgMHg5NywgMHhiMCwgMHgwMSwgMHgwMCwKKwkweGI2LCAweDAzLCAweDAwLCAweDQwLCAweGExLCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJmLCAweDQyLAorCTB4OTksIDB4YjMsIDB4MDEsIDB4MDAsIDB4NjIsIDB4ODIsIDB4MjIsIDB4NDQsIDB4ODEsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHg2YSwgMHg4MiwgMHgyMiwgMHg0OCwgMHg4MSwgMHg2YywgMHgwMCwgMHgwMCwgMHg2NCwgMHg4MiwgMHgyMiwgMHg0YywKKwkweDgxLCAweDZjLCAweDAwLCAweDAwLCAweDZlLCAweDgyLCAweDIyLCAweDUwLCAweDgxLCAweDZjLCAweDAwLCAweDAwLAorCTB4NmYsIDB4ODIsIDB4MjIsIDB4NTQsIDB4ODEsIDB4NmMsIDB4MDAsIDB4MDAsIDB4NzEsIDB4ODIsIDB4MjIsIDB4NTgsCisJMHg4MSwgMHg2YywgMHgwMCwgMHgwMCwgMHg3NiwgMHg4MiwgMHgyMiwgMHg1YywgMHg4MSwgMHg2YywgMHgwMCwgMHgwMCwKKwkweDUwLCAweDAxLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGJjLAorCTB4MDksIDB4YjAsIDB4MDEsIDB4MDAsIDB4ZjQsIDB4ODIsIDB4MDAsIDB4Y2EsIDB4MDEsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwMywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKKwkweGYzLCAweDgzLCAweDAxLCAweDAwLCAweDY4LCAweDgyLCAweGEyLCAweDQyLCAweDA1LCAweDZjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MDUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ZjQsIDB4ODIsIDB4MjIsIDB4Y2EsCisJMHgwNywgMHgxNCwgMHgwMCwgMHgwMCwgMHhmNCwgMHg4MiwgMHgwMCwgMHg0NiwgMHhmMywgMHg5MywgMHgwMCwgMHgwMCwKKwkweGY0LCAweDgyLCAweDIwLCAweDQzLCAweDk1LCAweDZmLCAweDAwLCAweDAwLCAweGY0LCAweDgyLCAweDgwLCAweGNhLAorCTB4MDUsIDB4MzAsIDB4MDAsIDB4MDAsIDB4ZjQsIDB4ODIsIDB4MjIsIDB4MDEsIDB4ODAsIDB4MzAsIDB4MDAsIDB4MDAsCisJMHhmNCwgMHg4MiwgMHgwMCwgMHhjYiwgMHhkYiwgMHg5MSwgMHgwMCwgMHgwMCwgMHg1NywgMHgwMSwgMHgwMCwgMHhiYywKKwkweGFiLCAweGIzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGJjLCAweGIxLCAweGIzLCAweDAxLCAweDAwLAorCTB4ZjQsIDB4ODIsIDB4MDAsIDB4Y2EsIDB4Y2YsIDB4YjMsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4Y2EsCisJMHg4MSwgMHg4OCwgMHgwMSwgMHgwMCwgMHhmNCwgMHg4MiwgMHhhMiwgMHg0MCwgMHg3NCwgMHg3ZCwgMHgwMCwgMHgwMCwKKwkweDYwLCAweDAwLCAweDIwLCAweDQwLCAweDYwLCAweDk5LCAweDAxLCAweDAwLCAweDczLCAweDgyLCAweGE4LCAweGIxLAorCTB4ODIsIDB4MzAsIDB4MDAsIDB4MDAsIDB4NzIsIDB4ODIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHhmNCwgMHg4MiwgMHgwMCwgMHhjYSwgMHg3OSwgMHhiMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZSwKKwkweDgxLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQzLCAweGNiLCAweDgzLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4NDUsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4NzksIDB4ODIsIDB4YTIsIDB4NDEsCisJMHg4MSwgMHg1MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDQ1LCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDg0LCAweDgyLCAweDkxLCAweDgyLAorCTB4ODIsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OGEsIDB4ODAsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHhhZSwgMHg5ZiwgMHgwMCwgMHg0MCwgMHg4MCwgMHhjZSwgMHgwMSwgMHgwMCwgMHg4MiwgMHg4MiwgMHhhNiwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDg0LCAweDgyLCAweDU2LCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4YjYsIDB4MDMsIDB4MDAsIDB4NDAsIDB4YTEsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTMsCisJMHgwNywgMHg5MCwgMHgwMSwgMHgwMCwgMHhiNiwgMHgwMywgMHgwMCwgMHg0MCwgMHhhMSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDUyLCAweDA3LCAweDkwLCAweDAxLCAweDAwLCAweGQ4LCAweDlmLCAweDAwLCAweDQxLAorCTB4OGIsIDB4YjMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGUsIDB4ODEsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHhjZCwgMHg4MywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NiwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDg5LCAweDgyLCAweGEyLCAweDQxLCAweDgxLCAweDUwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4NDYsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHg5NCwgMHg4MiwgMHg5MSwgMHg4MSwgMHg4MiwgMHgzMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDg5LCAweDgwLCAweGIwLCAweDAxLCAweDAwLCAweGFlLCAweDlmLCAweDAwLCAweDQwLAorCTB4ODAsIDB4Y2UsIDB4MDEsIDB4MDAsIDB4OTIsIDB4ODIsIDB4YTYsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHg5NCwgMHg4MiwgMHg1NSwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhiNiwgMHgwMywgMHgwMCwgMHg0MCwKKwkweGExLCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUyLCAweDA3LCAweDkwLCAweDAxLCAweDAwLAorCTB4YjYsIDB4MDMsIDB4MDAsIDB4NDAsIDB4YTEsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTMsCisJMHgwNywgMHg5MCwgMHgwMSwgMHgwMCwgMHhkOCwgMHg5ZiwgMHgwMCwgMHg0MSwgMHg4YiwgMHhiMywgMHgwMCwgMHgwMCwKKwkweGIxLCAweDAzLCAweDAwLCAweDQwLCAweGExLCAweDk5LCAweDAxLCAweDAwLCAweGM0LCAweDE0LCAweDJmLCAweDQwLAorCTB4OTksIDB4YjMsIDB4MDEsIDB4MDAsIDB4NTcsIDB4MDEsIDB4MDAsIDB4NDAsIDB4NDksIDB4YjEsIDB4MDAsIDB4MDAsCisJMHhhMCwgMHg5NCwgMHgyZSwgMHg0MywgMHg5NywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDliLCAweDgyLCAweGEyLCAweDQxLCAweDk3LCAweDUwLCAweDAwLCAweDAwLAorCTB4NTAsIDB4OTUsIDB4MjAsIDB4NDAsIDB4ZTEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YWMsIDB4OTQsIDB4MmUsIDB4NDMsCisJMHg5NywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDlmLCAweDgyLCAweGEyLCAweDQxLCAweDk3LCAweDUwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4YWUsIDB4MDMsIDB4MDAsIDB4NDAsIDB4YTMsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMCwgMHgwMSwgMHgwMCwgMHg2MCwgMHgxNSwgMHgwMCwgMHg0MCwKKwkweDg1LCAweDk4LCAweDAxLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDQwLCAweDQwLCAweGU0LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTksIDB4NDEsIDB4OTQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsCisJMHg0MSwgMHhlMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHg0MCwgMHg5NCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDU3LCAweDQxLCAweDkwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAorCTB4ODEsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTMsIDB4NDIsIDB4ODEsIDB4NmMsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHhhMywgMHhjMSwgMHgwMSwgMHgwMCwgMHhhNSwgMHg4MiwgMHhhMCwgMHg0MiwKKwkweDgxLCAweDZjLCAweDAwLCAweDAwLCAweGE1LCAweDgyLCAweDAwLCAweDUwLCAweDg1LCAweGMwLCAweDAwLCAweDAwLAorCTB4ZGQsIDB4ODIsIDB4YTIsIDB4NDEsIDB4MDEsIDB4N2QsIDB4MDAsIDB4MDAsIDB4YjUsIDB4ODIsIDB4MjIsIDB4NTgsCisJMHg3MywgMHg3ZCwgMHgwMCwgMHgwMCwgMHg3OCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweGIwLCAweDgyLCAweGE4LCAweGIxLCAweDljLCAweDMwLCAweDAwLCAweDAwLCAweDMwLCAweDAwLCAweDM4LCAweDQ1LAorCTB4OWQsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MGUsIDB4MTAsIDB4YzksIDB4MDAsIDB4MDAsCisJMHhiNSwgMHg4MiwgMHgzMywgMHhjNCwgMHg4MSwgMHgzMCwgMHgwMCwgMHgwMCwgMHhiOCwgMHg4MiwgMHhhMSwgMHhhZCwKKwkweDlkLCAweDIwLCAweDAwLCAweDAwLCAweGFmLCAweDgyLCAweDEzLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MTMsIDB4NGUsIDB4NWEsIDB4ODMsIDB4MDEsIDB4MDAsIDB4MzAsIDB4MDAsIDB4MzgsIDB4NDUsCisJMHg5ZCwgMHhlMCwgMHgwMSwgMHgwMCwgMHhjMCwgMHg4MiwgMHgyMiwgMHhhYiwgMHg4MCwgMHgwNCwgMHgwMCwgMHgwMCwKKwkweGJlLCAweDgyLCAweGEyLCAweDQwLCAweDAxLCAweDdkLCAweDAwLCAweDAwLCAweGMwLCAweDgyLCAweDIyLCAweDVmLAorCTB4NTcsIDB4N2QsIDB4MDAsIDB4MDAsIDB4MzYsIDB4ODcsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHhjMCwgMHg4MiwgMHgyMiwgMHg1ZSwgMHg1NywgMHg3ZCwgMHgwMCwgMHgwMCwgMHg5OSwgMHg4NywgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGM1LCAweDgyLCAweDIyLCAweDU0LCAweDczLCAweDdkLCAweDAwLCAweDAwLAorCTB4NzQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjEsIDB4OTksIDB4MDEsIDB4MDAsIDB4YzAsIDB4ODIsIDB4YTgsIDB4YjEsCisJMHgwMCwgMHgzMCwgMHgwMCwgMHgwMCwgMHg4YSwgMHg4NCwgMHhhMiwgMHg1ZiwgMHgwMSwgMHg3YywgMHgwMCwgMHgwMCwKKwkweGNhLCAweDg2LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGM3LCAweDgyLCAweGEyLCAweDVmLAorCTB4NTksIDB4MjcsIDB4MDAsIDB4MDAsIDB4YzksIDB4ODIsIDB4YTIsIDB4NWMsIDB4NzMsIDB4N2QsIDB4MDAsIDB4MDAsCisJMHhkMCwgMHg4MiwgMHhhMiwgMHg1ZSwgMHg3MywgMHg3ZCwgMHgwMCwgMHgwMCwgMHhkYSwgMHg4MiwgMHgyMiwgMHg1YywKKwkweDczLCAweDdkLCAweDAwLCAweDAwLCAweGRiLCAweDgyLCAweDM3LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4N2MsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjEsIDB4OTksIDB4MDEsIDB4MDAsIDB4Y2EsIDB4ODIsIDB4YTgsIDB4YjEsCisJMHgzNiwgMHgzMCwgMHgwMCwgMHgwMCwgMHg3YywgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweGNjLCAweDgyLCAweGE4LCAweGIxLCAweDAwLCAweDMwLCAweDAwLCAweDAwLCAweDFmLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDIsIDB4ODgsIDB4MDEsIDB4MDAsIDB4YjksIDB4ODQsIDB4MTcsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHhkYiwgMHg4MiwgMHgzNCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHg3ZSwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDYxLCAweDk5LCAweDAxLCAweDAwLCAweGQxLCAweDgyLCAweGE4LCAweGIxLCAweDEyLCAweDMwLCAweDAwLCAweDAwLAorCTB4ZDgsIDB4ODIsIDB4NTIsIDB4MjEsIDB4MTMsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4NDEsCisJMHgyZiwgMHhjMywgMHgwMSwgMHgwMCwgMHhmZiwgMHgzZiwgMHgwMCwgMHgwOSwgMHgwMCwgMHg4YywgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQzLCAweDAxLCAweGYwLCAweDAxLCAweDAwLCAweDExLCAweDgzLCAweDAwLCAweDM0LAorCTB4MTMsIDB4ODQsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4M2YsIDB4MTQsIDB4MDksIDB4MDAsIDB4OGMsIDB4MDEsIDB4MDAsCisJMHg2ZiwgMHg4MywgMHgwMCwgMHg0MywgMHgwMSwgMHhmMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweGRiLCAweDgyLCAweDMzLCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4YWYsIDB4ODIsIDB4MTMsIDB4NGUsIDB4NWEsIDB4OTMsIDB4MDAsIDB4MDAsIDB4MGUsIDB4ODcsIDB4YTIsIDB4NDgsCisJMHhmZCwgMHg3ZiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHhhYywgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweGUzLCAweDgyLCAweDIyLCAweDVhLCAweDczLCAweDdkLCAweDAwLCAweDAwLCAweDdhLCAweDAwLCAweDAwLCAweDQwLAorCTB4NjEsIDB4OTksIDB4MDEsIDB4MDAsIDB4ZTAsIDB4ODIsIDB4YTgsIDB4YjEsIDB4N2UsIDB4MzEsIDB4MDAsIDB4MDAsCisJMHgwMSwgMHgwMCwgMHgwMCwgMHhjZiwgMHgxMSwgMHhjOSwgMHgwMCwgMHgwMCwgMHhlOSwgMHg4MiwgMHhhMiwgMHg0MCwKKwkweDkzLCAweDdmLCAweDAwLCAweDAwLCAweGU5LCAweDgyLCAweDIyLCAweDQ0LCAweDkzLCAweDdmLCAweDAwLCAweDAwLAorCTB4ZTUsIDB4ODIsIDB4NDIsIDB4YTUsIDB4ODAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4ZTgsIDB4ODIsIDB4YTIsIDB4NDAsCisJMHg5MywgMHg3ZiwgMHgwMCwgMHgwMCwgMHhmYiwgMHg4MiwgMHgxYSwgMHg0MCwgMHg5MywgMHg5MywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDFhLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweGRkLCAweDgwLCAweGEyLCAweDQwLAorCTB4NzMsIDB4N2QsIDB4MDAsIDB4MDAsIDB4MDksIDB4ODcsIDB4MjIsIDB4NDQsIDB4MjEsIDB4NmYsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHg4NywgMHgyMiwgMHg0MCwgMHg2NSwgMHg3ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHhhMiwgMHg1YiwKKwkweDczLCAweDdkLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDQ5LCAweDMzLCAweDdkLCAweDAwLCAweDAwLAorCTB4ZjMsIDB4ODIsIDB4MjIsIDB4NDgsIDB4MzMsIDB4N2QsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4MDEsIDB4MDAsIDB4OTksCisJMHg4MCwgMHhkOCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHg4MSwgMHhlMCwgMHgwMSwgMHgwMCwKKwkweGE4LCAweDk4LCAweDJmLCAweDQwLCAweDMzLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4ZTAsIDB4YzEsIDB4MDEsIDB4MDAsIDB4ZGQsIDB4ODIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHhhZiwgMHg4MiwgMHgwMCwgMHg0MCwgMHg4YiwgMHhiMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1OCwKKwkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRlLCAweDYyLCAweGIxLCAweDAxLCAweDAwLAorCTB4YWYsIDB4ODIsIDB4MjgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ZjYsIDB4ODIsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhmOSwgMHg4MiwgMHgzMywgMHg0MCwgMHgxZiwgMHgzMCwgMHgwMCwgMHgwMCwKKwkweGFmLCAweDgyLCAweDEzLCAweDRlLCAweDVhLCAweDkzLCAweDAwLCAweDAwLCAweGZkLCAweDgyLCAweGEwLCAweGNlLAorCTB4ODEsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MGYsIDB4ODMsIDB4YTAsIDB4Y2QsIDB4ODEsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhhNSwgMHg5YywgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiMSwKKwkweDgxLCAweGIwLCAweDAxLCAweDAwLCAweDBmLCAweDgzLCAweDIyLCAweGI1LCAweDgxLCAweDE0LCAweDAwLCAweDAwLAorCTB4ODAsIDB4MTUsIDB4MmYsIDB4NDAsIDB4NDksIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDEsIDB4ODMsIDB4NDIsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2MCwgMHhiNCwgMHg2NSwgMHg5NywgMHgwMSwgMHgwMCwKKwkweGQwLCAweDE1LCAweDJlLCAweDQwLCAweDY5LCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDFhLCAweDQ0LAorCTB4OTMsIDB4ODMsIDB4MDEsIDB4MDAsIDB4MWEsIDB4MDAsIDB4MDAsIDB4YTIsIDB4ODAsIDB4ZGMsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiMSwKKwkweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGI1LCAweGYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDUsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjEsIDB4OTksIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHgwYSwgMHg4MywgMHhhOCwgMHhhMSwgMHhlMCwgMHgzMSwgMHgwMCwgMHgwMCwKKwkweGU5LCAweDgyLCAweDAwLCAweDg4LCAweDllLCAweGIzLCAweDAwLCAweDAwLCAweGU5LCAweDgyLCAweGEyLCAweDQxLAorCTB4NjcsIDB4NmYsIDB4MDAsIDB4MDAsIDB4ZTksIDB4ODIsIDB4MDAsIDB4NmYsIDB4ZGIsIDB4OTEsIDB4MDAsIDB4MDAsCisJMHgwZiwgMHg4MywgMHg0MiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhlOSwgMHg4MiwgMHgxYSwgMHg0MCwKKwkweDkzLCAweDgzLCAweDAwLCAweDAwLCAweDAwLCAweDk5LCAweDAwLCAweDA5LCAweDQ2LCAweGM5LCAweDAxLCAweDAwLAorCTB4M2YsIDB4MDAsIDB4MDAsIDB4ZjMsIDB4MGMsIDB4ODgsIDB4MDEsIDB4MDAsIDB4MWEsIDB4ODMsIDB4YTYsIDB4NDIsCisJMHgxMywgMHg2MCwgMHgwMCwgMHgwMCwgMHgxMiwgMHg5NCwgMHgwMCwgMHg5NSwgMHgwMywgMHgzMCwgMHgwMSwgMHgwMCwKKwkweDE1LCAweDgzLCAweDYxLCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDc1LCAweDAwLCAweDAwLCAweDQwLAorCTB4NjEsIDB4OTksIDB4MDEsIDB4MDAsIDB4MTYsIDB4ODMsIDB4YTgsIDB4YjEsIDB4MGMsIDB4MzAsIDB4MDAsIDB4MDAsCisJMHgxZiwgMHg5NCwgMHg3MSwgMHgxMCwgMHg5NCwgMHgzMCwgMHgwMSwgMHgwMCwgMHgxYiwgMHg4MywgMHgwMCwgMHg1OCwKKwkweDFmLCAweDkwLCAweDAwLCAweDAwLCAweDA1LCAweDk0LCAweDAwLCAweDk1LCAweDAzLCAweDMwLCAweDAxLCAweDAwLAorCTB4YWYsIDB4ODIsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmQsIDB4MDMsCisJMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyZCwgMHhmMCwgMHgyZSwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweGVlLCAweDA3LCAweDAwLCAweDQwLCAweDk3LCAweDk4LCAweDAxLCAweDAwLCAweDIyLCAweDgzLCAweDIzLCAweDRiLAorCTB4ZTQsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MjIsIDB4ODMsIDB4MjIsIDB4NGIsIDB4ZmQsIDB4N2YsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgxZiwgMHg5MCwgMHgwMSwgMHgwMCwgMHgyMiwgMHgwMCwgMHgyZiwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDI1LCAweDgzLCAweDgzLCAweDE3LCAweDgwLCAweDMyLCAweDAwLCAweDAwLAorCTB4MjYsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDcsIDB4OTksIDB4MDEsIDB4MDAsIDB4MjcsIDB4ODMsIDB4ODUsIDB4MTcsCisJMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0OCwgMHg0NywgMHhjMSwgMHgwMSwgMHgwMCwKKwkweDJjLCAweDgzLCAweDIyLCAweDU1LCAweDJmLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLAorCTB4NDMsIDB4ZDEsIDB4MDEsIDB4MDAsIDB4MGYsIDB4MDAsIDB4MDAsIDB4ZmEsIDB4OTYsIDB4ODgsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHg5NywgMHhlMCwgMHgwMSwgMHgwMCwgMHgyZCwgMHg4MywgMHgwMCwgMHg0YiwKKwkweDQ0LCAweGMxLCAweDAwLCAweDAwLCAweDEyLCAweDAwLCAweDAwLCAweGEyLCAweDQ0LCAweGM5LCAweDAxLCAweDAwLAorCTB4MjgsIDB4MDAsIDB4MDAsIDB4ZjYsIDB4MDIsIDB4Y2MsIDB4MDEsIDB4MDAsIDB4MGEsIDB4MDAsIDB4MDAsIDB4YTEsCisJMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgxNiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDI4LCAweGYwLCAweDEwLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLAorCTB4MWEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTIsIDB4MmEsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHhjMCwgMHgyOCwgMHgzYywgMHg0NiwgMHgwZCwgMHhlMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZCwgMHg0NCwKKwkweDk1LCAweGIwLCAweDAxLCAweDAwLCAweDM5LCAweDgzLCAweGEyLCAweGY4LCAweDBlLCAweDMwLCAweDAwLCAweDAwLAorCTB4NDksIDB4ODMsIDB4MjIsIDB4NDEsIDB4OTUsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmQsIDB4NTAsCisJMHg0OSwgMHhjMSwgMHgwMSwgMHgwMCwgMHgzNSwgMHg4MywgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDM2LCAweDgzLCAweGEyLCAweGY4LCAweDE2LCAweDZjLCAweDAwLCAweDAwLCAweDM2LCAweDgzLCAweGEyLCAweGY4LAorCTB4MTAsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MzYsIDB4ODMsIDB4YTIsIDB4ZjAsIDB4MWEsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHg0NywgMHg4MywgMHgyMiwgMHg1OCwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHg5OSwgMHgzZiwgMHg0MiwKKwkweDEzLCAweGYwLCAweDAxLCAweDAwLCAweDNlLCAweDgzLCAweDY1LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4NDIsIDB4ODMsIDB4YTIsIDB4ZjMsIDB4NzQsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDYsCisJMHhlNiwgMHg5NSwgMHgwMSwgMHgwMCwgMHg0NywgMHg4MywgMHg3NSwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDA2LCAweDk2LCAweGIwLCAweDAxLCAweDAwLCAweDNmLCAweDAwLCAweDc1LCAweGYzLAorCTB4MGMsIDB4ODgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTUsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0YiwgMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0NSwgMHg4MywgMHhhOCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDQ3LCAweDgzLCAweDY3LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4NGYsIDB4ODMsIDB4NzcsIDB4NDEsIDB4MmQsIDB4YzMsIDB4MDAsIDB4MDAsIDB4NGQsIDB4ODMsIDB4MjIsIDB4NTgsCisJMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1NSwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDA2LCAweDYyLCAweGIxLCAweDAxLCAweDAwLCAweDRiLCAweDgzLCAweGE4LCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4NGQsIDB4ODMsIDB4NjcsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHg3YywgMHg4MywgMHg3NywgMHg0MSwgMHgyZCwgMHhjMywgMHgwMCwgMHgwMCwgMHgwMywgMHgwMCwgMHgwMCwgMHgwNywKKwkweDFhLCAweGY0LCAweDAxLCAweDAwLCAweGQ4LCAweDkyLCAweDAwLCAweDA3LCAweDE2LCAweDMwLCAweDAxLCAweDAwLAorCTB4NWQsIDB4ODMsIDB4MjIsIDB4NDEsIDB4ODEsIDB4NmMsIDB4MDAsIDB4MDAsIDB4NTUsIDB4ODMsIDB4MjIsIDB4NDIsCisJMHg4MSwgMHg2YywgMHgwMCwgMHgwMCwgMHhhZiwgMHg4MiwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDVjLCAweDgzLCAweDIyLCAweDVmLCAweDBmLCAweDdjLCAweDAwLCAweDAwLCAweGNjLCAweDkzLCAweDAwLCAweDVmLAorCTB4MDEsIDB4MTAsIDB4MDEsIDB4MDAsIDB4NWIsIDB4ODMsIDB4MjIsIDB4NDAsIDB4OTUsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHg4MCwgMHgwMCwgMHgwMywgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMiwKKwkweDAyLCAweGIwLCAweDAxLCAweDAwLCAweDQxLCAweDkzLCAweDAwLCAweDUyLCAweDk1LCAweDMwLCAweDAxLCAweDAwLAorCTB4NDgsIDB4OTMsIDB4MDAsIDB4NGIsIDB4MDIsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4ODcsIDB4MDAsIDB4NDAsCisJMHgwZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHg2NSwgMHg4MywgMHhhMiwgMHg1YSwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwKKwkweDUzLCAweDkyLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDY1LCAweDgzLCAweDIyLCAweDIwLAorCTB4ODUsIDB4NmMsIDB4MDAsIDB4MDAsIDB4NjIsIDB4ODMsIDB4OWMsIDB4MGYsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHhhZiwgMHg4MiwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgzMywgMHg5MywgMHgwMCwgMHg1YywKKwkweDFmLCAweDAwLCAweDAxLCAweDAwLCAweDI1LCAweDk1LCAweDAwLCAweDQyLCAweDYxLCAweDMxLCAweDAxLCAweDAwLAorCTB4YWYsIDB4ODIsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4OTAsIDB4MDQsIDB4MDAsIDB4MDcsCisJMHg5NiwgMHgzMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDY4LCAweDgzLCAweDgyLCAweGYwLCAweDE4LCAweDMwLCAweDAwLCAweDAwLCAweDdiLCAweDg4LCAweDAwLCAweDQ1LAorCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MjgsIDB4MjAsIDB4MDAsIDB4YTYsIDB4OTYsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHg2YywgMHg4MywgMHgyMiwgMHgxNywgMHg5NiwgMHgwNCwgMHgwMCwgMHgwMCwgMHhjOSwgMHg5NCwgMHgwMCwgMHg0YiwKKwkweDk1LCAweDMwLCAweDAxLCAweDAwLCAweDdiLCAweDg4LCAweDAwLCAweDRiLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAorCTB4ZDgsIDB4OTMsIDB4MDAsIDB4MDMsIDB4NDgsIDB4MzEsIDB4MDEsIDB4MDAsIDB4YjQsIDB4OTEsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwgMHg3YiwgMHg4OCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDJlLCAweDEwLCAweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDY4LCAweDUwLAorCTB4MDMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZSwgMHg1MCwKKwkweDQ5LCAweGMxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLCAweGYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsCisJMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKKwkweDc3LCAweDgzLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDEwLAorCTB4NjIsIDB4YzksIDB4MDEsIDB4MDAsIDB4NzksIDB4ODMsIDB4YTgsIDB4MDAsIDB4ZTAsIDB4MzEsIDB4MDAsIDB4MDAsCisJMHhhZiwgMHg4MiwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZCwgMHgwMywKKwkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDBmLCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MmUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjIsCisJMHgwMiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgxNywgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDQxLCAweDAwLCAweGE2LCAweDk2LCAweGIwLCAweDAxLCAweDAwLCAweGVlLCAweDA3LCAweDJlLCAweDQ3LAorCTB4OTcsIDB4OTAsIDB4MDEsIDB4MDAsIDB4OGYsIDB4ODMsIDB4MjIsIDB4MTcsIDB4OTYsIDB4MDQsIDB4MDAsIDB4MDAsCisJMHg4ZCwgMHg4MywgMHgyMiwgMHg0YiwgMHhmZCwgMHg3ZiwgMHgwMCwgMHgwMCwgMHg4ZCwgMHg4MywgMHgyMywgMHhhMiwKKwkweDAyLCAweDZjLCAweDAwLCAweDAwLCAweDQxLCAweDkzLCAweDAwLCAweDUyLCAweDk1LCAweDMwLCAweDAxLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MjIsIDB4NDEsIDB4OTcsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MGMsIDB4MDAsIDB4MmQsIDB4MDAsCisJMHgxMiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHgwMCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDVjLCAweDAxLCAweDgwLCAweDAxLCAweDAwLCAweDQ4LCAweDkzLCAweDAwLCAweDRiLAorCTB4MDIsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDksIDB4MDAsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHgwMywgMHhiMCwgMHgwMSwgMHgwMCwgMHhhYywgMHg4MywgMHgwMCwgMHg1YywKKwkweDE3LCAweDkwLCAweDAwLCAweDAwLCAweGExLCAweDgzLCAweDIyLCAweDQzLCAweDJmLCAweDdjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4MWYsIDB4OTAsIDB4MDEsIDB4MDAsIDB4OWEsIDB4ODMsIDB4MjIsIDB4NWYsCisJMHgyZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZSwgMHgxMCwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDU4LCAweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDAzLAorCTB4ZjAsIDB4YzksIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4YzksIDB4MDEsIDB4MDAsCisJMHg5NiwgMHg4MywgMHg2MiwgMHg0MiwgMHg2MSwgMHgzMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwKKwkweDYyLCAweGIxLCAweDAxLCAweDAwLCAweDk3LCAweDgzLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4YWYsIDB4ODIsIDB4NzIsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MmQsIDB4MDMsCisJMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhmZiwgMHgwZiwgMHgwMCwgMHhmNiwgMHg4MCwgMHg4OCwgMHgwMSwgMHgwMCwKKwkweDllLCAweDgzLCAweGEyLCAweGE2LCAweDgxLCAweDZjLCAweDAwLCAweDAwLCAweGExLCAweDgzLCAweDAwLCAweGYyLAorCTB4M2EsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ODcsIDB4ODQsIDB4YTIsIDB4NGIsIDB4ZmQsIDB4N2YsIDB4MDAsIDB4MDAsCisJMHg5OSwgMHg5MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgyYSwgMHg4NywgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGFjLCAweDgzLCAweDIyLCAweDRhLCAweDJmLCAweDdjLCAweDAwLCAweDAwLAorCTB4YWMsIDB4ODMsIDB4MjIsIDB4NDgsIDB4MmYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MGEsIDB4MDAsIDB4MmQsIDB4MDMsCisJMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgzZiwgMHgwMCwgMHgwMCwgMHhmMiwgMHg4NiwgMHg4OCwgMHgwMSwgMHgwMCwKKwkweDFmLCAweDAwLCAweDAwLCAweDQzLCAweDg0LCAweDg4LCAweDAxLCAweDAwLCAweDA1LCAweDAwLCAweDAwLCAweDQzLAorCTB4ODAsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4OTgsIDB4OTQsIDB4M2QsIDB4NDIsIDB4ODEsIDB4ZTAsIDB4MDEsIDB4MDAsCisJMHhhYywgMHg4MywgMHhhMiwgMHg0MiwgMHhlMCwgMHg3ZCwgMHgwMCwgMHgwMCwgMHg4NywgMHg4NCwgMHhhMiwgMHg0YiwKKwkweGZkLCAweDdmLCAweDAwLCAweDAwLCAweDk5LCAweDkyLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4MmEsIDB4ODcsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4YWMsIDB4ODMsIDB4NjksIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMywgMHgwOSwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDc5LCAweDQxLCAweDQ3LCAweGMzLCAweDAxLCAweDAwLCAweGIyLCAweDgzLCAweDIyLCAweGExLAorCTB4MDksIDB4NmMsIDB4MDAsIDB4MDAsIDB4ZjUsIDB4ODIsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHhhZiwgMHg4MywgMHgwMCwgMHgwMywgMHg0OCwgMHhiMSwgMHgwMCwgMHgwMCwgMHhlYiwgMHg4MywgMHhhMywgMHg5MiwKKwkweDAzLCAweDZjLCAweDAwLCAweDAwLCAweDdkLCAweDk1LCAweDAwLCAweDQwLCAweDk1LCAweDMwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4NDMsIDB4YzMsIDB4MDEsIDB4MDAsIDB4MmEsIDB4ODcsIDB4MjIsIDB4MDgsCisJMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHhiOCwgMHg4MywgMHgyMiwgMHg1YywgMHgxNywgMHg3YywgMHgwMCwgMHgwMCwKKwkweGI5LCAweDgzLCAweDAwLCAweDAwLCAweDJhLCAweGIwLCAweDAwLCAweDAwLCAweDEyLCAweDAwLCAweDAwLCAweDAwLAorCTB4MmEsIDB4YzgsIDB4MDEsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDgsIDB4ODAsIDB4YzgsIDB4MDEsIDB4MDAsCisJMHhiZCwgMHg4MywgMHhhMiwgMHg0MywgMHgyZiwgMHg3YywgMHgwMCwgMHgwMCwgMHhjYywgMHg5NCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGQ5LCAweDgzLCAweDAwLCAweDVlLCAweDE3LCAweDkwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MDEsIDB4OGMsIDB4Y2MsIDB4MDEsIDB4MDAsIDB4Y2MsIDB4OTQsIDB4MDAsIDB4NGMsCisJMHgwMywgMHgzMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZSwgMHg0NiwgMHgwMiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDEwLCAweDgwLCAweDAwLCAweDEwLCAweDQ4LCAweGM5LCAweDAxLCAweDAwLCAweDBjLCAweDAwLCAweDAwLCAweDAxLAorCTB4ZjAsIDB4Y2QsIDB4MDEsIDB4MDAsIDB4MmMsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjAsIDB4YzksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgxNiwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgxNSwKKwkweGUwLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQzLCAweDYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4YTAsIDB4MDAsIDB4MDAsIDB4YTQsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4YzYsIDB4ODMsIDB4YTgsIDB4NTQsCisJMHgxNywgMHgxMCwgMHgwMCwgMHgwMCwgMHhkOSwgMHg4MywgMHgwMCwgMHg1ZSwgMHgxNywgMHg5MCwgMHgwMCwgMHgwMCwKKwkweDEyLCAweDAwLCAweDAwLCAweDAwLCAweDJhLCAweGM4LCAweDAxLCAweDAwLCAweGQ4LCAweDgzLCAweDIyLCAweDQzLAorCTB4MmYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDEsIDB4OGMsIDB4Y2MsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0YywgMHgwMywgMHhiMCwgMHgwMSwgMHgwMCwgMHhlZCwgMHg5NCwgMHgwMCwgMHg0MywKKwkweDYxLCAweDMxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJlLCAweDQ2LCAweDAyLCAweGIwLCAweDAxLCAweDAwLAorCTB4MTAsIDB4ODAsIDB4MDAsIDB4MTAsIDB4NDgsIDB4YzksIDB4MDEsIDB4MDAsIDB4MGMsIDB4MDAsIDB4MDAsIDB4MDEsCisJMHhmMCwgMHhjZCwgMHgwMSwgMHgwMCwgMHgwYywgMHgwMCwgMHgwMCwgMHgwOSwgMHhmMCwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDE4LCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDE1LAorCTB4ZTAsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHhhMCwgMHgwMCwgMHgwMCwgMHhhNCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHhkOSwgMHg4MywgMHgyOCwgMHg1NCwKKwkweDE3LCAweDEwLCAweDAwLCAweDAwLCAweGQ1LCAweDgzLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4ZWQsIDB4OTQsIDB4MDAsIDB4NDMsIDB4NjEsIDB4MzEsIDB4MDEsIDB4MDAsIDB4ZGIsIDB4ODMsIDB4MjIsIDB4NTAsCisJMHgyZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1NiwgMHgxNywgMHg5MCwgMHgwMSwgMHgwMCwKKwkweDA3LCAweDAwLCAweDAwLCAweDE3LCAweDk4LCAweDg4LCAweDAxLCAweDAwLCAweGRlLCAweDgzLCAweGEyLCAweDQxLAorCTB4OTksIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTUsIDB4MTcsIDB4OTAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwKKwkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweGRmLCAweDgzLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4YWYsIDB4ODIsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZDQsIDB4OTQsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhlNiwgMHg4MywgMHgyMiwgMHg0MywgMHgyZiwgMHg3YywgMHgwMCwgMHgwMCwKKwkweDE2LCAweDgwLCAweDAwLCAweDAzLCAweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFkLAorCTB4ZTQsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NzUsIDB4OTQsIDB4MDAsIDB4NWUsIDB4MDUsIDB4MTAsIDB4MDEsIDB4MDAsCisJMHhlOSwgMHg4MywgMHhhMiwgMHg1ZiwgMHgyZiwgMHg3YywgMHgwMCwgMHgwMCwgMHg5MCwgMHg5MSwgMHgwMCwgMHgwMSwKKwkweDM4LCAweDQzLCAweDAxLCAweDAwLCAweDk5LCAweDkyLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4MmEsIDB4ODcsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4ZWQsIDB4ODMsIDB4YTIsIDB4NGIsCisJMHhmZCwgMHg3ZiwgMHgwMCwgMHgwMCwgMHg4NCwgMHg4NCwgMHgwMCwgMHg0MSwgMHg0MywgMHhjMywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDI3LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4MTEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ZWYsIDB4ODMsIDB4MzUsIDB4MDEsIDB4ODYsIDB4MzAsIDB4MDAsIDB4MDAsCisJMHg2ZCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwgMHhmNiwgMHg4MywgMHgyOCwgMHhiMSwKKwkweDMwLCAweDMwLCAweDAwLCAweDAwLCAweGYwLCAweDgzLCAweDIyLCAweDRkLCAweDc1LCAweDdkLCAweDAwLCAweDAwLAorCTB4NzQsIDB4ODQsIDB4YTIsIDB4NDAsIDB4MTEsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCisJMHg0MywgMHhjMywgMHgwMSwgMHgwMCwgMHg4MywgMHg4NCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDZkLCAweDAwLCAweDAwLCAweDQwLCAweDYxLCAweDk5LCAweDAxLCAweDAwLCAweGY2LCAweDgzLCAweGE4LCAweGIxLAorCTB4MTIsIDB4MzAsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4ODMsIDB4YTIsIDB4NDAsIDB4MTEsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg0MywgMHhjMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOSwKKwkweDEwLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDJjLCAweGIwLCAweDAxLCAweDAwLAorCTB4ZGUsIDB4MDcsIDB4MDAsIDB4NDMsIDB4ODAsIDB4Y2UsIDB4MDEsIDB4MDAsIDB4ZjAsIDB4ODMsIDB4YWEsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHg4NCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDQwLCAweDAwLCAweDNlLCAweDQzLCAweDI3LCAweGUwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA5LAorCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgyNywgMHhjMCwgMHgwMSwgMHgwMCwgMHhmMCwgMHg4MywgMHhhMywgMHgwYiwKKwkweDg3LCAweDUwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE1LCAweDQwLCAweDFiLCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MjMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgyYSwgMHhjOCwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgyZCwgMHg0MCwgMHgzOSwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDBjLCAweDg0LCAweGEyLCAweDQwLCAweDI3LCAweDZjLCAweDAwLCAweDAwLCAweDIyLCAweDAwLCAweDAwLCAweDA4LAorCTB4MTIsIDB4YzgsIDB4MDEsIDB4MDAsIDB4ZGUsIDB4MDcsIDB4MDAsIDB4NDAsIDB4MjUsIDB4OTgsIDB4MDEsIDB4MDAsCisJMHgwZiwgMHg4NCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwKKwkweDEyLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLCAweDMwLCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MGIsIDB4MjUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsCisJMHgzMiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgxNCwgMHgwMCwgMHgyMCwgMHgwMSwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweGVlLCAweDA3LCAweDAwLCAweDQwLCAweDM3LCAweDk4LCAweDAxLCAweDAwLCAweDE0LCAweDg0LCAweDIzLCAweDAxLAorCTB4MzYsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MzYsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgxZiwgMHg4NCwgMHg4MiwgMHg0MSwgMHgyMywgMHg0MCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4MCwgMHgwMCwgMHgxMCwKKwkweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDFiLCAweDg0LCAweDIyLCAweDQwLCAweGUzLCAweDZkLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsCisJMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHgxOCwgMHg4NCwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweGFmLCAweDgyLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweGI4LCAweDkyLCAweDAwLCAweDQzLAorCTB4MjMsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MzIsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgyMywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywKKwkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDE5LCAweDQ0LCAweGM5LCAweDAxLCAweDAwLAorCTB4MmUsIDB4ODQsIDB4MjIsIDB4NDUsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGMsCisJMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOSwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDE4LCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQzLAorCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4MTksIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCisJMHgyNSwgMHg4NCwgMHhhOCwgMHgxNSwgMHhlMCwgMHgzMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwKKwkweDAzLCAweGQwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLCAweDMzLCAweGMwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGMsIDB4MjUsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4MGMsIDB4MDAsIDB4MmQsIDB4NGMsCisJMHgxMywgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHgzNywgMHhkMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDUwLCAweDJiLCAweGMwLCAweDAxLCAweDAwLCAweDE0LCAweDg0LCAweDAwLCAweDQ1LAorCTB4MWYsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MzAsIDB4ODQsIDB4YTMsIDB4MTIsIDB4MzYsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgzMSwgMHg4NCwgMHg2OCwgMHgxYiwgMHgyOCwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2OCwgMHgxMiwKKwkweDI4LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA5LCAweGYwLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsCisJMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHgxOSwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKKwkweDM0LCAweDg0LCAweGE4LCAweDE1LCAweGUwLCAweDMxLCAweDAwLCAweDAwLCAweDVhLCAweDg0LCAweDIyLCAweDE0LAorCTB4MDIsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4MzMsIDB4YzAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgyNCwgMHhkMCwgMHgwMSwgMHgwMCwgMHgwYywgMHgwMCwgMHgyZCwgMHgxNCwKKwkweDEyLCAweGMwLCAweDAxLCAweDAwLCAweDUzLCAweDg0LCAweGEyLCAweDE0LCAweDM2LCAweDUwLCAweDAwLCAweDAwLAorCTB4NDQsIDB4ODQsIDB4MjIsIDB4NWMsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MzAsIDB4ODAsIDB4MDAsIDB4MTAsCisJMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHg0MiwgMHg4NCwgMHgyMiwgMHg0MCwgMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQyLCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLAorCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4M2YsIDB4ODQsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHhhZiwgMHg4MiwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywKKwkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDBjLCAweDAwLCAweDJkLCAweDVjLCAweDFmLCAweDgwLCAweDAxLCAweDAwLAorCTB4MTAsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4MmEsIDB4YzgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWMsCisJMHgyYiwgMHg4MCwgMHgwMSwgMHgwMCwgMHhmMCwgMHgwNywgMHgwMCwgMHg0MCwgMHgzNywgMHg5OCwgMHgwMSwgMHgwMCwKKwkweDQ5LCAweDg0LCAweDIzLCAweDAxLCAweDM2LCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLAorCTB4MzYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NTQsIDB4ODQsIDB4MjIsIDB4MWIsIDB4MDIsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgzMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg0OCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZSwgMHg1YywKKwkweDFmLCAweDkwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLCAweGYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4MDcsIDB4MDAsIDB4MTUsCisJMHhlMCwgMHg4ZCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweGEwLCAweDAwLCAweDAwLCAweGE0LCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDUwLCAweDg0LCAweGE4LCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4NTQsIDB4ODQsIDB4MDAsIDB4MDMsIDB4NDgsIDB4YjEsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgyYSwgMHhjMCwgMHgwMSwgMHgwMCwgMHgxNCwgMHg4NCwgMHhhMiwgMHg0MCwKKwkweDI1LCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDM5LCAweGMwLCAweDAxLCAweDAwLAorCTB4NDAsIDB4MDAsIDB4M2QsIDB4NDMsIDB4MzksIDB4ZTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGIsCisJMHgyNSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgxMiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDE0LCAweDg0LCAweDAwLCAweGYwLCAweDMwLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDE5LAorCTB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4NjAsIDB4ODQsIDB4MjIsIDB4NDAsIDB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxOSwKKwkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDVkLCAweDg0LCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4YWYsIDB4ODIsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4YjgsIDB4OTIsIDB4MDAsIDB4NDAsCisJMHgyYiwgMHgzMCwgMHgwMSwgMHgwMCwgMHgxOCwgMHgwMCwgMHgyZSwgMHgwMywgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDY0LCAweDg0LCAweDIyLCAweDUwLCAweDJmLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDU2LAorCTB4MTcsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MTcsIDB4OTgsIDB4ODgsIDB4MDEsIDB4MDAsCisJMHg2NywgMHg4NCwgMHhhMiwgMHg0MSwgMHg5OSwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1NSwKKwkweDE3LCAweDkwLCAweDAxLCAweDAwLCAweDZhLCAweDg0LCAweDIyLCAweDQzLCAweDJmLCAweDdjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTQsIDB4MTcsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MTYsIDB4MDAsIDB4MjAsIDB4MWQsCisJMHhlNCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg2YywgMHg4NCwgMHhhMywgMHg0MCwgMHgyNywgMHg2YywgMHgwMCwgMHgwMCwKKwkweDZlLCAweDg0LCAweDYwLCAweDVmLCAweDE3LCAweDkwLCAweDAwLCAweDAwLCAweDAwLCAweDg0LCAweDAwLCAweDBiLAorCTB4MTYsIDB4ZGMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjAsIDB4MTMsIDB4MTYsIDB4OTQsIDB4MDEsIDB4MDAsCisJMHg3NSwgMHg5NCwgMHgwMCwgMHg1ZSwgMHgwNSwgMHgxMCwgMHgwMSwgMHgwMCwgMHgyYSwgMHg4NywgMHhhMiwgMHg1ZiwKKwkweDJmLCAweDdjLCAweDAwLCAweDAwLCAweDE0LCAweDgwLCAweDAwLCAweDAzLCAweDQyLCAweGM5LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjIsIDB4MDIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4OTAsIDB4OTEsIDB4MDAsIDB4MDEsCisJMHgzOCwgMHg0MywgMHgwMSwgMHgwMCwgMHgyYSwgMHg4NywgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDgzLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRkLAorCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTYsIDB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg3NiwgMHg4NCwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwKKwkweDYyLCAweGIxLCAweDAxLCAweDAwLCAweDc4LCAweDg0LCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4ODMsIDB4ODQsIDB4MjIsIDB4MTMsIDB4ODIsIDB4NmMsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDAsIDB4M2QsIDB4NDMsCisJMHg4MywgMHhlMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgxMCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGYwLCAweDJjLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE2LAorCTB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4N2UsIDB4ODQsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHg4MCwgMHg4NCwgMHhhOCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDdhLCAweDg0LCAweDAwLCAweDQxLCAweDgzLCAweGMwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MTUsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ODIsIDB4MDAsIDB4YTYsCisJMHgwNCwgMHhiMCwgMHgwMSwgMHgwMCwgMHhhMCwgMHg5OCwgMHgwMCwgMHg0MCwgMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDMwLCAweDA1LCAweDAwLCAweDQxLCAweDg5LCAweDMwLCAweDAxLCAweDAwLCAweDQxLCAweDkzLCAweDAwLCAweDUyLAorCTB4OTUsIDB4MzAsIDB4MDEsIDB4MDAsIDB4NDgsIDB4OTMsIDB4MDAsIDB4NGIsIDB4MDIsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgyYSwgMHg4NywgMHgwMCwgMHg0MCwgMHgwZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1ZiwKKwkweDAxLCAweDgwLCAweDAxLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDBlLCAweGY0LCAweDAxLCAweDAwLAorCTB4M2YsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODgsIDB4MDEsIDB4MDAsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDcsCisJMHgxYSwgMHhmNCwgMHgwMSwgMHgwMCwgMHhkOCwgMHg5MiwgMHgwMCwgMHgwNywgMHgxNiwgMHgzMCwgMHgwMSwgMHgwMCwKKwkweDk1LCAweDg0LCAweDIyLCAweDQxLCAweDgxLCAweDZjLCAweDAwLCAweDAwLCAweDkzLCAweDg0LCAweDIyLCAweDQyLAorCTB4ODEsIDB4NmMsIDB4MDAsIDB4MDAsIDB4YWYsIDB4ODIsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHg5NCwgMHg4NCwgMHgyMiwgMHg1ZiwgMHgwZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgxNCwgMHg4NywgMHgwMCwgMHg0MCwKKwkweDBmLCAweGIwLCAweDAwLCAweDAwLCAweDlkLCAweDg0LCAweGEyLCAweDVhLCAweDFmLCAweDdjLCAweDAwLCAweDAwLAorCTB4NTMsIDB4OTIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4OWQsIDB4ODQsIDB4MjIsIDB4MjAsCisJMHg4NSwgMHg2YywgMHgwMCwgMHgwMCwgMHg5YSwgMHg4NCwgMHg5YywgMHgwZiwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweGFmLCAweDgyLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDMzLCAweDkzLCAweDAwLCAweDVjLAorCTB4MWYsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MjUsIDB4OTUsIDB4MDAsIDB4NDIsIDB4NjEsIDB4MzEsIDB4MDEsIDB4MDAsCisJMHhhZiwgMHg4MiwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHg5MCwgMHgwNCwgMHgwMCwgMHgwNywKKwkweDk2LCAweDMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJkLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4MTgsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YTMsIDB4ODQsIDB4MjIsIDB4M2EsCisJMHgwMSwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4ZSwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDdiLCAweDg4LCAweDAwLCAweDQwLCAweDAxLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MmUsIDB4MDAsIDB4MmQsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHhhNywgMHg4NCwgMHhhMiwgMHg0MCwgMHhlNywgMHg2ZCwgMHgwMCwgMHgwMCwgMHgwYSwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDhmLCAweDk4LCAweDAxLCAweDAwLCAweDdiLCAweDg4LCAweDAwLCAweDQwLCAweDAxLCAweGIwLCAweDAwLCAweDAwLAorCTB4MWUsIDB4OTIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDUsIDB4OTQsIDB4MDAsIDB4OTUsCisJMHgwMywgMHgzMCwgMHgwMSwgMHgwMCwgMHhhZiwgMHg4MiwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDJkLCAweDAzLCAweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDIyLCAweDAwLCAweDJkLCAweGYwLAorCTB4MmUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MjgsIDB4MjAsIDB4MDAsIDB4YTYsIDB4OTYsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHhiMCwgMHg4NCwgMHgyMiwgMHgxNywgMHg5NiwgMHgwNCwgMHgwMCwgMHgwMCwgMHhjOSwgMHg5NCwgMHgwMCwgMHg0YiwKKwkweDk1LCAweDMwLCAweDAxLCAweDAwLCAweDdiLCAweDg4LCAweDAwLCAweDRjLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAorCTB4YjIsIDB4ODQsIDB4ODMsIDB4MTcsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsCisJMHg0MywgMHhjMSwgMHgwMSwgMHgwMCwgMHhiNCwgMHg4NCwgMHg4NSwgMHgxNywgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ4LCAweDQzLCAweGMxLCAweDAxLCAweDAwLCAweDI4LCAweDAwLCAweDAwLCAweGY2LAorCTB4MDIsIDB4Y2MsIDB4MDEsIDB4MDAsIDB4MTIsIDB4MDAsIDB4MDAsIDB4YTEsIDB4MmEsIDB4YzgsIDB4MDEsIDB4MDAsCisJMHhkOCwgMHg5MywgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhiNCwgMHg5MSwgMHgwMCwgMHg0MSwKKwkweDgxLCAweDMwLCAweDAxLCAweDAwLCAweDdiLCAweDg4LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmUsIDB4MTAsCisJMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyOCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmMSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAzLCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YmUsIDB4ODQsIDB4NjQsIDB4NDcsIDB4NjEsIDB4MzEsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHhiZiwgMHg4NCwgMHhhOCwgMHgxYiwKKwkweGUwLCAweDMxLCAweDAwLCAweDAwLCAweGFmLCAweDgyLCAweDc0LCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4MDMsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MmQsIDB4MDMsCisJMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhlNCwgMHg4NCwgMHgwMSwgMHhmYiwgMHgwOCwgMHgzMCwgMHgwMCwgMHgwMCwKKwkweDM3LCAweDg1LCAweDg3LCAweGZiLCAweDIyLCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZhLAorCTB4MGUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MTQsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMywgMHgwMCwgMHgwMCwgMHgwNywgMHgxYSwgMHhmNCwgMHgwMSwgMHgwMCwgMHhkOCwgMHg5MiwgMHgwMCwgMHgwNywKKwkweDE2LCAweDMwLCAweDAxLCAweDAwLCAweGRhLCAweDg0LCAweDIyLCAweDQxLCAweDgxLCAweDZjLCAweDAwLCAweDAwLAorCTB4Y2UsIDB4ODQsIDB4MjIsIDB4NDIsIDB4ODEsIDB4NmMsIDB4MDAsIDB4MDAsIDB4YWYsIDB4ODIsIDB4MDAsIDB4ODgsCisJMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHhkOSwgMHg4NCwgMHgyMiwgMHg1ZiwgMHgwZiwgMHg3YywgMHgwMCwgMHgwMCwKKwkweDM4LCAweDAwLCAweDAwLCAweDA0LCAweDdlLCAweDg5LCAweDAxLCAweDAwLCAweGQyLCAweDg0LCAweGE2LCAweDVmLAorCTB4MGYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmMsIDB4OTIsIDB4MDAsIDB4NDAsIDB4MDUsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHhkNywgMHg4NCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgxMywgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDg3LCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJkLCAweDAzLCAweDQ4LCAweGIxLCAweDAxLCAweDAwLAorCTB4MGMsIDB4MDAsIDB4MmQsIDB4ZjAsIDB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsCisJMHg4NCwgMHhiMCwgMHgwMSwgMHgwMCwgMHhiNywgMHg5MywgMHgwMCwgMHg0MCwgMHgwNSwgMHgzMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDVjLCAweDFmLCAweDkwLCAweDAxLCAweDAwLCAweDE0LCAweDg3LCAweDAwLCAweDQwLAorCTB4MGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZTIsIDB4ODQsIDB4YTIsIDB4NWEsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsCisJMHg1MywgMHg5MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhlMiwgMHg4NCwgMHgyMiwgMHgyMCwKKwkweDg1LCAweDZjLCAweDAwLCAweDAwLCAweGRmLCAweDg0LCAweDljLCAweDBmLCAweDgwLCAweDMyLCAweDAwLCAweDAwLAorCTB4YWYsIDB4ODIsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MzMsIDB4OTMsIDB4MDAsIDB4NWMsCisJMHgxZiwgMHgwMCwgMHgwMSwgMHgwMCwgMHgyNSwgMHg5NSwgMHgwMCwgMHg0MiwgMHg2MSwgMHgzMSwgMHgwMSwgMHgwMCwKKwkweGFmLCAweDgyLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDkwLCAweDA0LCAweDAwLCAweDA3LAorCTB4OTYsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmQsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHgxOCwgMHhiMCwgMHgwMSwgMHgwMCwgMHhlNiwgMHg4NCwgMHgyMSwgMHgwNCwKKwkweDgwLCAweDIwLCAweDAwLCAweDAwLCAweGU3LCAweDg0LCAweDAwLCAweDQwLCAweDEwLCAweGM5LCAweDAwLCAweDAwLAorCTB4YmQsIDB4ODcsIDB4MDAsIDB4NGIsIDB4ODEsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDYsIDB4ODUsIDB4MDAsIDB4NDMsCisJMHg4MSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwYSwgMHg4NSwgMHgwMCwgMHhmYiwgMHgyMiwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweGJkLCAweDg3LCAweDAwLCAweDQxLCAweDgxLCAweGIwLCAweDAwLCAweDAwLCAweDdiLCAweDg4LCAweDAwLCAweDRlLAorCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4ODUsIDB4MDAsIDB4NWEsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHhlZiwgMHg4NCwgMHgwMCwgMHg0NywgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHhiZCwgMHg4NywgMHgwMCwgMHg1MywKKwkweDgxLCAweGIwLCAweDAwLCAweDAwLCAweGJkLCAweDg3LCAweDAwLCAweDU2LCAweDgxLCAweGIwLCAweDAwLCAweDAwLAorCTB4MzIsIDB4MDAsIDB4MmQsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4N2IsIDB4ODgsIDB4YTAsIDB4MGEsCisJMHhlNCwgMHg2ZCwgMHgwMCwgMHgwMCwgMHhmNSwgMHg4NCwgMHhhMiwgMHg0MSwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwKKwkweGY0LCAweDg0LCAweDIyLCAweDBhLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDdiLCAweDg4LCAweDAwLCAweDUzLAorCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4N2IsIDB4ODgsIDB4MDAsIDB4NTQsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHhmZSwgMHg4NCwgMHgyMiwgMHgwYSwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHhmOCwgMHg4NCwgMHhhMiwgMHgwYSwKKwkweGU0LCAweDZkLCAweDAwLCAweDAwLCAweDdiLCAweDg4LCAweDAwLCAweDVkLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjIsIDB4ODAsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGEsCisJMHg4MCwgMHhkMCwgMHgwMSwgMHgwMCwgMHhmYywgMHg4NCwgMHhhMCwgMHg5MSwgMHg4MSwgMHg2YywgMHgwMCwgMHgwMCwKKwkweDdiLCAweDg4LCAweDAwLCAweDVlLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDI1LCAweDAwLCAweDAwLCAweDQwLAorCTB4OGYsIDB4OTgsIDB4MDEsIDB4MDAsIDB4N2IsIDB4ODgsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHg4NSwgMHgyMCwgMHg5MSwgMHhlNSwgMHg2ZCwgMHgwMCwgMHgwMCwgMHg3YiwgMHg4OCwgMHgwMCwgMHg1NCwKKwkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDIxLCAweDAwLCAweDAwLCAweDQwLCAweDhmLCAweDk4LCAweDAxLCAweDAwLAorCTB4N2IsIDB4ODgsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MzIsIDB4MDAsIDB4MmQsIDB4MDUsCisJMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg3YiwgMHg4OCwgMHhhMCwgMHgwYSwgMHhlNCwgMHg2ZCwgMHgwMCwgMHgwMCwKKwkweDI0LCAweDAwLCAweDAwLCAweDQwLCAweDhmLCAweDk4LCAweDAxLCAweDAwLCAweDdiLCAweDg4LCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MzcsIDB4MDAsIDB4MmQsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHhmMywgMHg4MiwgMHhmNCwgMHgwMSwgMHgwMCwgMHhiZCwgMHg4NywgMHhhMCwgMHg0MiwKKwkweDgzLCAweDZjLCAweDAwLCAweDAwLCAweGJkLCAweDg3LCAweDAwLCAweDU0LCAweDgxLCAweGIwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjIsIDB4MGUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDcsCisJMHgxYSwgMHhmNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHhiNSwgMHgwMCwgMHgwZCwgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDA3LCAweDAwLCAweDAwLCAweDA3LCAweDE2LCAweDg4LCAweDAxLCAweDAwLCAweDEzLCAweDg1LCAweDIyLCAweDBiLAorCTB4ZTYsIDB4N2QsIDB4MDAsIDB4MDAsIDB4MGEsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODcsIDB4OTgsIDB4MDEsIDB4MDAsCisJMHhjNiwgMHg5NSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDBmLCAweGIwLCAweDAxLCAweDAwLCAweDE0LCAweDg3LCAweDAwLCAweDVjLCAweDFmLCAweDkwLCAweDAwLCAweDAwLAorCTB4MjUsIDB4ODUsIDB4MjIsIDB4NTAsIDB4ZmQsIDB4N2YsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YTIsIDB4NTQsCisJMHhmZCwgMHg3ZiwgMHgwMCwgMHgwMCwgMHgxOCwgMHg4NSwgMHgyMiwgMHg1NSwgMHhmZCwgMHg3ZiwgMHgwMCwgMHgwMCwKKwkweDgyLCAweDAwLCAweDAwLCAweDQwLCAweDg3LCAweDk4LCAweDAxLCAweDAwLCAweDEwLCAweDg1LCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MTAsIDB4ODUsIDB4MjIsIDB4NTMsIDB4ZmQsIDB4N2YsIDB4MDAsIDB4MDAsCisJMHgxNCwgMHg4MCwgMHgwMCwgMHgwMywgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwKKwkweDk2LCAweGIwLCAweDAxLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDRiLCAweDgwLCAweGY0LCAweDAxLCAweDAwLAorCTB4MGMsIDB4YmMsIDB4MDAsIDB4NDAsIDB4ODcsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MjAsIDB4ODUsIDB4MjIsIDB4NDMsCisJMHg4MCwgMHg2YywgMHgwMCwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHg0YiwgMHg4MCwgMHg4OCwgMHgwMSwgMHgwMCwKKwkweDEwLCAweDg1LCAweGEyLCAweDQzLCAweDgwLCAweDZjLCAweDAwLCAweDAwLCAweDdjLCAweDk2LCAweDAwLCAweDQwLAorCTB4NDcsIDB4OTksIDB4MDEsIDB4MDAsIDB4MjEsIDB4ODUsIDB4NDYsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgyNCwgMHg4NSwgMHhhMCwgMHhmMCwgMHgzMCwgMHg2ZiwgMHgwMCwgMHgwMCwgMHgxNiwgMHg4NSwgMHgxZSwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFlLCAweDQxLCAweDMxLCAweGMzLCAweDAxLCAweDAwLAorCTB4NWQsIDB4OTIsIDB4MDAsIDB4NDAsIDB4MjUsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MjksIDB4ODUsIDB4OWMsIDB4MGYsCisJMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHhhZiwgMHg4MiwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDMzLCAweDkzLCAweDAwLCAweDVjLCAweDFmLCAweDAwLCAweDAxLCAweDAwLCAweDE0LCAweDgwLCAweDAwLCAweDAzLAorCTB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4OTYsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgyZiwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwNywKKwkweDE4LCAweGU0LCAweDAxLCAweDAwLCAweDAwLCAweDA4LCAweDAwLCAweDBjLCAweGUwLCAweDk5LCAweDAxLCAweDAwLAorCTB4OTAsIDB4MDQsIDB4MDAsIDB4MDcsIDB4OTYsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4YjUsIDB4MDAsIDB4MGQsCisJMHg0NiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgzMCwgMHg4NSwgMHgzMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDBiLCAweGU2LCAweDkxLCAweDAxLCAweDAwLCAweDAwLCAweDAyLCAweDAwLCAweGExLAorCTB4NDYsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGIsIDB4ZTYsIDB4OTEsIDB4MDEsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgyZSwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg0MCwKKwkweGUxLCAweGIxLCAweDAxLCAweDAwLCAweGJkLCAweDg3LCAweDAwLCAweDQwLCAweDgxLCAweGIwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZmIsIDB4MjgsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmIsCisJMHg4NiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgxNCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDQxLCAweDg1LCAweDIyLCAweDQ2LCAweDIzLCAweDdjLCAweDAwLCAweDAwLCAweDNkLCAweDg1LCAweDIyLCAweDQwLAorCTB4ODcsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDgsIDB4MWYsIDB4OTAsIDB4MDEsIDB4MDAsCisJMHgzZiwgMHg4NSwgMHgyMiwgMHg0MSwgMHg4NywgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywKKwkweDFmLCAweDkwLCAweDAxLCAweDAwLCAweDQxLCAweDg1LCAweDIyLCAweDQyLCAweDg3LCAweDdjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4MWYsIDB4OTAsIDB4MDEsIDB4MDAsIDB4NDEsIDB4ODUsIDB4NjYsIDB4MWIsCisJMHgyYywgMHgzMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMCwgMHgxMywgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDc2LCAweDQxLCAweDQxLCAweGMzLCAweDAxLCAweDAwLCAweDcwLCAweDg1LCAweDIzLCAweDkyLAorCTB4MTUsIDB4NmMsIDB4MDAsIDB4MDAsIDB4NzAsIDB4ODUsIDB4YTIsIDB4NDUsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsCisJMHg3NCwgMHg4NSwgMHgyMiwgMHg0YiwgMHhmZCwgMHg3ZiwgMHgwMCwgMHgwMCwgMHgxNywgMHgwMCwgMHgwMCwgMHhkMCwKKwkweGEyLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDI3LCAweGIwLCAweDAxLCAweDAwLAorCTB4MDIsIDB4MDAsIDB4MDAsIDB4MGEsIDB4MjQsIDB4YzgsIDB4MDEsIDB4MDAsIDB4OTQsIDB4OTIsIDB4MDAsIDB4NDAsCisJMHgwZiwgMHgzMCwgMHgwMSwgMHgwMCwgMHg2ZSwgMHg4NSwgMHgyMiwgMHgwOCwgMHg0MCwgMHgzMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweGEzLCAweGMxLCAweDAxLCAweDAwLCAweGYwLCAweDA3LCAweDAwLCAweDEyLAorCTB4MjQsIDB4Y2MsIDB4MDEsIDB4MDAsIDB4NGEsIDB4ODUsIDB4YWEsIDB4NDEsIDB4MjcsIDB4NDAsIDB4MDAsIDB4MDAsCisJMHgwMSwgMHgwMCwgMHgwMCwgMHgxMywgMHg4MCwgMHhjYywgMHgwMSwgMHgwMCwgMHg2YSwgMHg4NSwgMHgyNiwgMHg0MCwKKwkweDIzLCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDgzLCAweGIwLCAweDAxLCAweDAwLAorCTB4NjAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4ODQsIDB4YzgsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MTAsCisJMHg0OCwgMHhjZCwgMHgwMSwgMHgwMCwgMHgxNywgMHgwMCwgMHgwMCwgMHhkMCwgMHhhMiwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDU3LCAweDg1LCAweGEyLCAweDQwLCAweDgzLCAweDZjLCAweDAwLCAweDAwLCAweDYzLCAweDg1LCAweDAwLCAweDQxLAorCTB4ODMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4NDIsIDB4NDQsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg2OCwgMHgyMSwgMHgzOCwgMHg5NiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZSwgMHg1MCwKKwkweDQ5LCAweGMxLCAweDAxLCAweDAwLCAweDVjLCAweDg1LCAweGEyLCAweDQ0LCAweDIzLCAweDZjLCAweDAwLCAweDAwLAorCTB4MzAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4NDgsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsCisJMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwYywgMHgwMCwgMHgwMCwgMHgyMCwgMHhmMCwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweGEwLCAweDAwLCAweDAwLCAweGE0LAorCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4NWYsIDB4ODUsIDB4YTgsIDB4NDIsIDB4ZTAsIDB4MzEsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg4NSwgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKKwkweDIzLCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweGEzLCAweGMxLCAweDAxLCAweDAwLAorCTB4NTUsIDB4ODUsIDB4YTIsIDB4NDEsIDB4ODEsIDB4NTAsIDB4MDAsIDB4MDAsIDB4NmEsIDB4ODUsIDB4MjIsIDB4NDAsCisJMHgyMywgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDY3LCAweDg1LCAweGE4LCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4YWYsIDB4ODIsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhlZSwgMHgwNywgMHgwMCwgMHg0MCwKKwkweDI1LCAweDk4LCAweDAxLCAweDAwLCAweDE3LCAweDAwLCAweDAwLCAweGQwLCAweDJhLCAweGM4LCAweDAxLCAweDAwLAorCTB4N2QsIDB4ODUsIDB4MDAsIDB4MTcsIDB4MTAsIDB4YjAsIDB4MDAsIDB4MDAsIDB4N2UsIDB4OTQsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHg3NCwgMHg4NSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDk0LCAweDkyLCAweDAwLCAweDkyLCAweDI1LCAweDMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4MzEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NzQsIDB4ODUsIDB4MjIsIDB4MDgsIDB4MmUsIDB4MzAsIDB4MDAsIDB4MDAsCisJMHg3ZCwgMHg4NSwgMHgwMCwgMHg0MSwgMHgyNywgMHhiMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg4MCwgMHgwMCwgMHhhNiwKKwkweDA0LCAweGIwLCAweDAxLCAweDAwLCAweDA2LCAweDAwLCAweDAwLCAweDQwLCAweDg3LCAweDk4LCAweDAxLCAweDAwLAorCTB4YzYsIDB4OTUsIDB4MDAsIDB4MGEsIDB4OGMsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHgwZiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1YywgMHgxZiwgMHg5MCwgMHgwMSwgMHgwMCwKKwkweDdjLCAweDg1LCAweDIyLCAweDlmLCAweDEzLCAweDZjLCAweDAwLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDg4LAorCTB4MWMsIDB4Y2MsIDB4MDEsIDB4MDAsIDB4ZjUsIDB4ODIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgxNCwgMHg4NywgMHgwMCwgMHg0MSwgMHgzZiwgMHhjMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDBmLCAweGIwLCAweDAxLCAweDAwLCAweDI4LCAweDAwLCAweDAwLCAweDAxLCAweDgwLCAweGNlLCAweDAxLCAweDAwLAorCTB4OTEsIDB4ODUsIDB4MmEsIDB4NDAsIDB4ODEsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MTAsCisJMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHg5OCwgMHgwMSwgMHgwMCwKKwkweDg2LCAweDg1LCAweGEyLCAweDQ4LCAweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDg2LCAweDg1LCAweGEyLCAweDQ3LAorCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4ODYsIDB4ODUsIDB4YTMsIDB4MDcsIDB4MDMsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHg4MCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHg5OCwgMHgwMSwgMHgwMCwgMHg4OSwgMHg4NSwgMHhhMywgMHg0MCwKKwkweDAyLCAweDZjLCAweDAwLCAweDAwLCAweDI4LCAweDAwLCAweDAwLCAweDAxLCAweGYwLCAweGNkLCAweDAxLCAweDAwLAorCTB4OGIsIDB4ODUsIDB4MDAsIDB4NDAsIDB4MGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MjgsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHhmMCwgMHhjZCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwZSwgMHhjYywgMHgwMSwgMHgwMCwKKwkweDI4LCAweDAwLCAweDAwLCAweDAzLCAweGYwLCAweGM5LCAweDAxLCAweDAwLCAweDI4LCAweDAwLCAweDAwLCAweDAwLAorCTB4ZjAsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTYsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHgxMCwKKwkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDhmLCAweDg1LCAweGE4LCAweDVjLCAweDFmLCAweDEwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsCisJMHgwOCwgMHhiMCwgMHgwMSwgMHgwMCwgMHhhMCwgMHgwMSwgMHgyZCwgMHg0MCwgMHgwMCwgMHhjMCwgMHgwMSwgMHgwMCwKKwkweDViLCAweDg2LCAweDIyLCAweDBmLCAweDQyLCAweDA1LCAweDAwLCAweDAwLCAweGEyLCAweDg1LCAweDljLCAweDBmLAorCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWMsIDB4MWYsIDB4ODAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHgxMCwgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHg5ZCwgMHg4NSwgMHgyMiwgMHg0MCwKKwkweGUzLCAweDZkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ3LCAweDYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4OWEsIDB4ODUsIDB4YTgsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhhZiwgMHg4MiwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKKwkweGEyLCAweDg1LCAweDIyLCAweDA3LCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLAorCTB4NDIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4NDIsIDB4YzEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHhhMSwgMHg0NiwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1ZiwKKwkweGUxLCAweDkxLCAweDAxLCAweDAwLCAweGMwLCAweDA2LCAweGEyLCAweDQ1LCAweDFmLCAweDdjLCAweDAwLCAweDAwLAorCTB4MTAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4NDgsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmQsIDB4NTQsCisJMHgyOSwgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgxOCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDA0LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LAorCTB4MGUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NDIsIDB4MDAsIDB4MDAsIDB4MDMsIDB4MGEsIDB4YzgsIDB4MDEsIDB4MDAsCisJMHgwYywgMHgwMCwgMHgwMCwgMHhhNCwgMHgwYywgMHhjOCwgMHgwMSwgMHgwMCwgMHhkNiwgMHg5MiwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDAyLCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MjQsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsCisJMHgxMCwgMHhjMCwgMHgwMSwgMHgwMCwgMHgxMiwgMHgwMCwgMHgwMCwgMHgwOCwgMHgxMCwgMHhjOCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDIzLCAweGIwLCAweDAxLCAweDAwLCAweGZlLCAweDdmLCAweDAwLCAweDA1LAorCTB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGEsIDB4ZTQsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHhjYiwgMHg4NSwgMHgyMiwgMHgwMSwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzYywgMHg0NCwKKwkweDIzLCAweGUwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJlLCAweGE0LCAweDgwLCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NDgsIDB4YzEsIDB4MDEsIDB4MDAsIDB4YjgsIDB4ODUsIDB4YTMsIDB4MDcsCisJMHgwMiwgMHg2YywgMHgwMCwgMHgwMCwgMHhiOSwgMHg4NSwgMHg2OCwgMHgwMSwgMHgxYSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDY4LCAweDA3LCAweDFhLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBkLAorCTB4MDIsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwYywgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwKKwkweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBkLCAweDBhLCAweGMwLCAweDAxLCAweDAwLAorCTB4YzUsIDB4ODUsIDB4MjIsIDB4NDAsIDB4MDMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4YzUsIDB4ODUsIDB4MjIsIDB4NDIsCisJMHgyMywgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgyMywgMHhjMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ3LCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweGEwLCAweDAwLCAweDAwLCAweGE0LAorCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4ZTksIDB4ODUsIDB4MjgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHhjMiwgMHg4NSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwKKwkweDgwLCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ3LCAweDYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YzcsIDB4ODUsIDB4YTgsIDB4NDAsCisJMHgyMywgMHgzMCwgMHgwMCwgMHgwMCwgMHhhZiwgMHg4MiwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKKwkweGU5LCAweDg1LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDNjLCAweDQ0LAorCTB4MjMsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTQsIDB4ODYsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgyZSwgMHgxMCwgMHg0OCwgMHhjMSwgMHgwMSwgMHgwMCwgMHhkMCwgMHg4NSwgMHhhMywgMHgxMiwKKwkweDBlLCAweDZjLCAweDAwLCAweDAwLCAweGQxLCAweDg1LCAweDYwLCAweDA3LCAweDFhLCAweGIwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4NjAsIDB4MTIsIDB4MWEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjgsIDB4MGQsCisJMHgxNiwgMHg5NCwgMHgwMSwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHgwYiwgMHgxNiwgMHhkOCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDY4LCAweDA4LCAweDNlLCAweDk2LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBjLAorCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg4NiwgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NiwKKwkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDIwLCAweDAwLCAweDAwLCAweDQzLCAweDYyLCAweGRkLCAweDAxLCAweDAwLAorCTB4ZDgsIDB4ODUsIDB4YTgsIDB4NWMsIDB4MWYsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4ODYsIDB4MjIsIDB4MGQsCisJMHgxNCwgMHg2YywgMHgwMCwgMHgwMCwgMHhkZSwgMHg4NSwgMHgyMiwgMHgwZCwgMHgyNCwgMHg2YywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDBkLCAweDEwLCAweGMwLCAweDAxLCAweDAwLCAweGUyLCAweDg1LCAweDAwLCAweDBkLAorCTB4MjQsIDB4ZDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MmIsIDB4YzAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwgMHhhMiwgMHhiMSwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDEwLCAweGM4LCAweDAxLCAweDAwLCAweGYwLCAweDA3LCAweDAwLCAweDQwLCAweDI1LCAweDk4LCAweDAxLCAweDAwLAorCTB4ZTQsIDB4ODUsIDB4MjIsIDB4NDIsIDB4MjMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4ZTksIDB4ODUsIDB4MDAsIDB4NDEsCisJMHgyMywgMHhjMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NiwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweGU1LCAweDg1LCAweGE4LCAweDVjLAorCTB4MWYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YWYsIDB4ODIsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgyMywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwNywgMHg4NiwgMHgyMiwgMHgwZCwKKwkweDE0LCAweDUwLCAweDAwLCAweDAwLCAweDA2LCAweDg2LCAweGEyLCAweDBkLCAweDBlLCAweDUwLCAweDAwLCAweDAwLAorCTB4ZjUsIDB4ODUsIDB4MjIsIDB4NDYsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsCisJMHgxZiwgMHg4MCwgMHgwMSwgMHgwMCwgMHgzMCwgMHg4MCwgMHgwMCwgMHgxMCwgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweGYzLCAweDg1LCAweDIyLCAweDQwLCAweGUzLCAweDZkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ3LAorCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCisJMHhmMCwgMHg4NSwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhhZiwgMHg4MiwgMHgwMCwgMHg4OCwKKwkweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDIwLCAweDgwLCAweDAwLCAweDAzLCAweDQ2LCAweDk5LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NWYsIDB4ZTEsIDB4OTEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmQsIDB4MDYsCisJMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgxOCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDA0LCAweGIwLCAweDAxLCAweDAwLCAweGZhLCAweDg1LCAweDFmLCAweGYwLAorCTB4MGUsIDB4MzAsIDB4MDAsIDB4MDAsIDB4YjIsIDB4ODUsIDB4MDAsIDB4NGMsIDB4MGQsIDB4YzAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgyZSwgMHg1ZiwgMHgwZiwgMHg4MCwgMHgwMSwgMHgwMCwgMHhiMiwgMHg4NSwgMHgyMywgMHgwNywKKwkweDE0LCAweDZjLCAweDAwLCAweDAwLCAweDMwLCAweDAwLCAweDAwLCAweDEwLCAweDQ4LCAweGM5LCAweDAxLCAweDAwLAorCTB4MjQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjEsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsCisJMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDE2LCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDI0LCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4YzgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHhhMCwgMHgwMCwgMHgwMCwgMHhhNCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHgwMywgMHg4NiwgMHhhOCwgMHg0NiwKKwkweDFmLCAweDEwLCAweDAwLCAweDAwLCAweGIyLCAweDg1LCAweDAwLCAweDAzLCAweDBjLCAweGIwLCAweDAwLCAweDAwLAorCTB4YjIsIDB4ODUsIDB4MDAsIDB4MGQsIDB4MTgsIDB4YzAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MmUsIDB4MTQsCisJMHgwYSwgMHhkMCwgMHgwMSwgMHgwMCwgMHgxMiwgMHgwMCwgMHgwMCwgMHgwNSwgMHg0OCwgMHhjZCwgMHgwMSwgMHgwMCwKKwkweGZlLCAweDdmLCAweDAwLCAweDA1LCAweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDBjLCAweDAwLCAweDJhLCAweGYyLAorCTB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MGQsIDB4ODYsIDB4MjIsIDB4NDAsIDB4MzEsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg2MCwgMHgxOCwgMHgzOCwgMHg5NiwgMHgwMSwgMHgwMCwgMHgxZSwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDgxLCAweDAwLCAweGY2LCAweDgwLCAweGNlLCAweDAxLCAweDAwLAorCTB4MTEsIDB4ODYsIDB4YTYsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsCisJMHg0MywgMHhjMSwgMHgwMSwgMHgwMCwgMHgxMywgMHg4NiwgMHgyMiwgMHgwYiwgMHhlZCwgMHg2ZCwgMHgwMCwgMHgwMCwKKwkweDA4LCAweDAwLCAweDAwLCAweGExLCAweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweGExLAorCTB4NDYsIDB4YzksIDB4MDEsIDB4MDAsIDB4MGYsIDB4MDAsIDB4MDAsIDB4ZmEsIDB4OTQsIDB4ODgsIDB4MDEsIDB4MDAsCisJMHgwMiwgMHgwMCwgMHgwMCwgMHg0YSwgMHg4NiwgMHhlNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmNiwKKwkweDBlLCAweGIwLCAweDAxLCAweDAwLCAweDFiLCAweDg2LCAweDIyLCAweDQ3LCAweDFmLCAweDdjLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MWYsIDB4NDMsIDB4MGUsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MWIsIDB4ODYsIDB4YTAsIDB4NDYsCisJMHgwZiwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgwZiwgMHhjMCwgMHgwMSwgMHgwMCwKKwkweDFmLCAweDg2LCAweDIyLCAweDQ4LCAweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4OTEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MGYsIDB4YTIsIDB4NDIsIDB4MzEsIDB4MDAsIDB4MDAsCisJMHgyMiwgMHg4NiwgMHgwMCwgMHg0MCwgMHg4OSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwYywgMHgwMCwgMHgwMCwgMHhhMiwKKwkweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQzLCAweDg5LCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4OTUsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmMsCisJMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgyNSwgMHg4NiwgMHhhMCwgMHg0MSwgMHg5MCwgMHg0MCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDkxLCAweGMwLCAweDAxLCAweDAwLCAweDJhLCAweDg2LCAweDIyLCAweDQ3LAorCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MmEsIDB4ODYsIDB4YTAsIDB4NDMsIDB4ODksIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgyYSwgMHg4NiwgMHgyMCwgMHg0NSwgMHg4OSwgMHg2YywgMHgwMCwgMHgwMCwgMHgyYSwgMHg4NiwgMHhhMCwgMHg0MSwKKwkweDBlLCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDBmLCAweGMwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ODksIDB4YzAsIDB4MDEsIDB4MDAsIDB4MjIsIDB4ODYsIDB4YTIsIDB4NDEsCisJMHg5NSwgMHg1MCwgMHgwMCwgMHgwMCwgMHgzMywgMHg4NiwgMHgyMiwgMHg0OCwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwKKwkweDEwLCAweDAwLCAweDAwLCAweDQ4LCAweDkyLCAweGY0LCAweDAxLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweDQ4LAorCTB4OTAsIDB4ODgsIDB4MDEsIDB4MDAsIDB4MzEsIDB4ODYsIDB4OTAsIDB4NDgsIDB4OTIsIDB4NDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg5MywgMHhjMCwgMHgwMSwgMHgwMCwgMHgwYSwgMHgwMCwgMHgwMCwgMHhhMiwKKwkweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDY2LCAweDIwLCAweDkzLCAweGE0LCAweDAxLCAweDAwLAorCTB4MzAsIDB4ODAsIDB4MDAsIDB4MTAsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MTQsCisJMHhmMCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNywgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDEyLCAweDAwLCAweDAwLCAweDA1LCAweGUwLCAweGNkLCAweDAxLCAweDAwLCAweDMwLCAweDAwLCAweDAwLCAweDEwLAorCTB4ODAsIDB4YzgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgyMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHgzOSwgMHg4NiwgMHhhOCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDQ0LCAweDg2LCAweDIyLCAweDVjLCAweDFmLCAweDdjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4M2MsIDB4NDQsIDB4MjMsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmQsIDB4MTAsCisJMHg0OCwgMHhjMSwgMHgwMSwgMHgwMCwgMHg0MywgMHg4NiwgMHgyMiwgMHg0MCwgMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ2LCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLAorCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ODYsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHhhZiwgMHg4MiwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1YywKKwkweDFmLCAweDgwLCAweDAxLCAweDAwLCAweDQ3LCAweDg2LCAweGEyLCAweDQ3LCAweDFmLCAweDdjLCAweDAwLCAweDAwLAorCTB4Y2MsIDB4OTIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4YzAsIDB4ODYsIDB4MDAsIDB4MTcsCisJMHgxMCwgMHhiMCwgMHgwMCwgMHgwMCwgMHhkMywgMHg5MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDJmLCAweDAzLCAweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDRiLCAweDg2LCAweGEwLCAweDA3LAorCTB4MTYsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MTcsIDB4YzAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwYiwgMHhlNCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwKKwkweDE3LCAweGYwLCAweDAxLCAweDAwLCAweDRmLCAweDg2LCAweDkwLCAweGYyLCAweDE2LCAweDQwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MTcsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjYsIDB4MjAsCisJMHgxNywgMHhhNCwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgyYSwgMHhjOCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDUwLCAweDJiLCAweGUwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYyLAorCTB4MmEsIDB4OTQsIDB4MDEsIDB4MDAsIDB4MzAsIDB4ODAsIDB4MDAsIDB4MTAsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsCisJMHg1OSwgMHg4NiwgMHgyMiwgMHg0MCwgMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwKKwkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLAorCTB4NTYsIDB4ODYsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4YWYsIDB4ODIsIDB4MDAsIDB4ODgsCisJMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgxNywgMHgxMCwgMHhkYywgMHgwMSwgMHgwMCwKKwkweGMwLCAweDg2LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDYzLCAweDg2LCAweDljLCAweDBmLAorCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWMsIDB4MWYsIDB4ODAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHgxMCwgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHg2MywgMHg4NiwgMHgyMiwgMHg0MCwKKwkweGUzLCAweDZkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ3LCAweDYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4NjAsIDB4ODYsIDB4YTgsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhhZiwgMHg4MiwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDY4LCAweDg2LCAweDIyLCAweDA3LCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLAorCTB4NDIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4NDIsIDB4YzEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHhhMSwgMHg0NiwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1ZiwKKwkweGUxLCAweDkxLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDJlLCAweDAzLCAweDQ4LCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MGEsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NmQsIDB4ODYsIDB4MjIsIDB4NDAsCisJMHgzMSwgMHg2YywgMHgwMCwgMHgwMCwgMHgwYywgMHgwMCwgMHgwMCwgMHg0MCwgMHg0NSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDYwLCAweDE4LCAweDM4LCAweDk2LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJlLCAweDEwLAorCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywKKwkweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NzIsIDB4ODYsIDB4YTgsIDB4NDAsCisJMHgyMywgMHgzMCwgMHgwMCwgMHgwMCwgMHhhZiwgMHg4MiwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDJkLCAweDUyLCAweDExLCAweGMwLCAweDAxLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDAzLAorCTB4NDgsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MTgsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgwNCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwKKwkweDBlLCAweGIwLCAweDAxLCAweDAwLCAweDBjLCAweDAwLCAweDAwLCAweGE0LCAweDBjLCAweGM4LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4M2MsIDB4NDQsIDB4MjMsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTQsCisJMHg4NiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZSwgMHgxMCwgMHg0OCwgMHhjMSwgMHgwMSwgMHgwMCwKKwkweDgwLCAweDg2LCAweGEzLCAweDEyLCAweDBlLCAweDZjLCAweDAwLCAweDAwLCAweDgxLCAweDg2LCAweDY4LCAweDA3LAorCTB4MWEsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjgsIDB4MTIsIDB4MWEsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg4NiwgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2OCwgMHgwOCwKKwkweDNlLCAweDk2LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBjLCAweGYwLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsCisJMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHg0MywgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKKwkweDg2LCAweDg2LCAweGE4LCAweDVjLCAweDFmLCAweDEwLCAweDAwLCAweDAwLCAweGI1LCAweDg2LCAweDIyLCAweDBkLAorCTB4MTQsIDB4NmMsIDB4MDAsIDB4MDAsIDB4OGMsIDB4ODYsIDB4MjIsIDB4MGQsIDB4MjQsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwZCwgMHgxMCwgMHhjMCwgMHgwMSwgMHgwMCwgMHg5MCwgMHg4NiwgMHgwMCwgMHgwZCwKKwkweDI0LCAweGQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDJiLCAweGMwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MTUsIDB4YTIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHgxMCwgMHhjOCwgMHgwMSwgMHgwMCwgMHhmMCwgMHgwNywgMHgwMCwgMHg0MCwgMHgyNSwgMHg5OCwgMHgwMSwgMHgwMCwKKwkweDkyLCAweDg2LCAweDIyLCAweDQyLCAweDIzLCAweDZjLCAweDAwLCAweDAwLCAweDk3LCAweDg2LCAweDAwLCAweDQxLAorCTB4MjMsIDB4YzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHg5MywgMHg4NiwgMHhhOCwgMHg1YywKKwkweDFmLCAweDAwLCAweDAwLCAweDAwLCAweGFmLCAweDgyLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MjMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjIsIDB4MGQsCisJMHgxNCwgMHg1MCwgMHgwMCwgMHgwMCwgMHhiNCwgMHg4NiwgMHhhMiwgMHgwZCwgMHgwZSwgMHg1MCwgMHgwMCwgMHgwMCwKKwkweGEzLCAweDg2LCAweDIyLCAweDQ2LCAweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ2LAorCTB4MWYsIDB4ODAsIDB4MDEsIDB4MDAsIDB4MzAsIDB4ODAsIDB4MDAsIDB4MTAsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsCisJMHhhMSwgMHg4NiwgMHgyMiwgMHg0MCwgMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywKKwkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLAorCTB4OWUsIDB4ODYsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4YWYsIDB4ODIsIDB4MDAsIDB4ODgsCisJMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4MCwgMHgwMCwgMHgwMywgMHg0NiwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDVmLCAweGUxLCAweDkxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJkLCAweDA2LAorCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MTgsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgwNCwgMHhiMCwgMHgwMSwgMHgwMCwgMHhhOCwgMHg4NiwgMHgxZiwgMHhmMCwKKwkweDBlLCAweDMwLCAweDAwLCAweDAwLCAweDdiLCAweDg2LCAweDAwLCAweDRjLCAweDBkLCAweGMwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MmUsIDB4NWYsIDB4MGYsIDB4ODAsIDB4MDEsIDB4MDAsIDB4N2IsIDB4ODYsIDB4MjMsIDB4MDcsCisJMHgxNCwgMHg2YywgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg0OCwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDI0LCAweDAwLCAweDAwLCAweDQwLCAweGYxLCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLAorCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgxNiwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyNCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweGM4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ3LCAweDYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4YTAsIDB4MDAsIDB4MDAsIDB4YTQsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4YjEsIDB4ODYsIDB4YTgsIDB4NDYsCisJMHgxZiwgMHgxMCwgMHgwMCwgMHgwMCwgMHg3YiwgMHg4NiwgMHgwMCwgMHgwMywgMHgwYywgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDdiLCAweDg2LCAweDAwLCAweDBkLCAweDE4LCAweGMwLCAweDAwLCAweDAwLCAweGJlLCAweDg2LCAweDIyLCAweDVjLAorCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWMsIDB4MWYsIDB4ODAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgzYywgMHg0NCwgMHgyMywgMHhlMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZCwgMHgxMCwKKwkweDQ4LCAweGMxLCAweDAxLCAweDAwLCAweGJlLCAweDg2LCAweDIyLCAweDQwLCAweGUzLCAweDZkLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsCisJMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHhiYiwgMHg4NiwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweGFmLCAweDgyLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE3LAorCTB4MTAsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YzAsIDB4ODYsIDB4MDAsIDB4NDAsIDB4MmIsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHgwMywgMHg0NCwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwKKwkweGUwLCAweGIxLCAweDAxLCAweDAwLCAweGM1LCAweDg2LCAweDIyLCAweDlmLCAweDEzLCAweDZjLCAweDAwLCAweDAwLAorCTB4MDIsIDB4MDAsIDB4MDAsIDB4ODgsIDB4MWMsIDB4Y2MsIDB4MDEsIDB4MDAsIDB4ZjUsIDB4ODIsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhkNywgMHg5NSwgMHgwMCwgMHg0MSwgMHgzZiwgMHg0MywgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDhkLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4MDUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YzYsIDB4OTUsIDB4MDAsIDB4NDAsIDB4MGYsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHgyYSwgMHg4NywgMHgwMCwgMHg1YywgMHgxZiwgMHg5MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDBlLCAweGY0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDNhLCAweDAxLCAweDg0LCAweDAxLCAweDAwLAorCTB4MDMsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MWEsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4ZDgsIDB4OTIsIDB4MDAsIDB4MDcsCisJMHgxNiwgMHgzMCwgMHgwMSwgMHgwMCwgMHhkNCwgMHg4NiwgMHgyMiwgMHg0MSwgMHg4MSwgMHg2YywgMHgwMCwgMHgwMCwKKwkweGQyLCAweDg2LCAweDIyLCAweDQyLCAweDgxLCAweDZjLCAweDAwLCAweDAwLCAweGFmLCAweDgyLCAweDAwLCAweDg4LAorCTB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZDMsIDB4ODYsIDB4MjIsIDB4NWYsIDB4MGYsIDB4N2MsIDB4MDAsIDB4MDAsCisJMHgxNCwgMHg4NywgMHgwMCwgMHg0MCwgMHgwZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHhkYywgMHg4NiwgMHhhMiwgMHg1YSwKKwkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDUzLCAweDkyLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4ZGMsIDB4ODYsIDB4MjIsIDB4MjAsIDB4ODUsIDB4NmMsIDB4MDAsIDB4MDAsIDB4ZDksIDB4ODYsIDB4OWMsIDB4MGYsCisJMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHhhZiwgMHg4MiwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDMzLCAweDkzLCAweDAwLCAweDVjLCAweDFmLCAweDAwLCAweDAxLCAweDAwLCAweDI1LCAweDk1LCAweDAwLCAweDQyLAorCTB4NjEsIDB4MzEsIDB4MDEsIDB4MDAsIDB4YWYsIDB4ODIsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHg5MCwgMHgwNCwgMHgwMCwgMHgwNywgMHg5NiwgMHgzMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZCwgMHgwNSwKKwkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLCAweDE4LCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YmQsIDB4ODcsIDB4YTIsIDB4NWYsCisJMHg4MSwgMHg2YywgMHgwMCwgMHgwMCwgMHhhOCwgMHgwMCwgMHgyZCwgMHg0MywgMHgxOSwgMHg4MCwgMHgwMSwgMHgwMCwKKwkweDM3LCAweDAwLCAweDJkLCAweGYwLCAweDI0LCAweGIwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweGYzLAorCTB4OGUsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4MGYsIDB4MDAsIDB4MDAsIDB4ZjMsIDB4OTAsIDB4ODgsIDB4MDEsIDB4MDAsCisJMHhlYiwgMHg4NiwgMHgyMiwgMHg0OCwgMHg4ZSwgMHg2YywgMHgwMCwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDU4LCAweDAwLCAweDNkLCAweDQzLCAweGU3LCAweGUxLCAweDAxLCAweDAwLAorCTB4ZWIsIDB4ODYsIDB4MWYsIDB4ZjAsIDB4MjQsIDB4NmMsIDB4MDAsIDB4MDAsIDB4ZWEsIDB4ODYsIDB4MjMsIDB4NDEsCisJMHg4ZiwgMHg2YywgMHgwMCwgMHgwMCwgMHhiZCwgMHg4NywgMHgwMCwgMHg0NywgMHg4MSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweGJkLCAweDg3LCAweDAwLCAweDQ4LCAweDgxLCAweGIwLCAweDAwLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDQwLAorCTB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4YjAsIDB4MDAsIDB4MmQsIDB4ZjAsIDB4MTQsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHhmMCwgMHg4NiwgMHgyMiwgMHgwYSwgMHg5MCwgMHg0MCwgMHgwMCwgMHgwMCwgMHhhYSwgMHg5NSwgMHgwMCwgMHg0MCwKKwkweDkxLCAweDMwLCAweDAxLCAweDAwLCAweGJkLCAweDg3LCAweGEyLCAweDQwLCAweDgwLCAweDMyLCAweDAwLCAweDAwLAorCTB4YjAsIDB4MDAsIDB4MmQsIDB4NDUsIDB4ODEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ZmMsIDB4ODYsIDB4MjIsIDB4ZjAsCisJMHgyYywgMHgzMCwgMHgwMCwgMHgwMCwgMHhhMywgMHgwMCwgMHgyZCwgMHgzMCwgMHg4MywgMHhiMCwgMHgwMSwgMHgwMCwKKwkweGFjLCAweDAwLCAweDJkLCAweGYzLCAweDgyLCAweGUwLCAweDAxLCAweDAwLCAweGY2LCAweDg2LCAweGEzLCAweDQxLAorCTB4MmMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTYsIDB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHg5OCwgMHgwMCwgMHgyZCwgMHhmMCwgMHg4MiwgMHhjMCwgMHgwMSwgMHgwMCwgMHg4OCwgMHgwMCwgMHgyZCwgMHhmMCwKKwkweDgyLCAweGQwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYyLCAweDk4LCAweGU4LCAweDAxLCAweDAwLAorCTB4YmQsIDB4ODcsIDB4MjAsIDB4NGMsIDB4ODIsIDB4NmMsIDB4MDAsIDB4MDAsIDB4N2MsIDB4MDAsIDB4MmQsIDB4NDEsCisJMHg5OCwgMHhlOCwgMHgwMSwgMHgwMCwgMHhiZCwgMHg4NywgMHgyMCwgMHhmMCwgMHg5OCwgMHg2YywgMHgwMCwgMHgwMCwKKwkweDE0LCAweDg3LCAweDIyLCAweDBhLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDQwLCAweDAyLCAweDAwLCAweDBjLAorCTB4N2UsIDB4ODksIDB4MDEsIDB4MDAsIDB4MTQsIDB4ODcsIDB4YTYsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHhiZCwgMHg4NywgMHgwMCwgMHg0OSwgMHg4MSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHhhNiwKKwkweDgwLCAweGIwLCAweDAxLCAweDAwLCAweDA0LCAweDg3LCAweDIyLCAweDQzLCAweDIxLCAweDZmLCAweDAwLCAweDAwLAorCTB4MTMsIDB4ODAsIDB4MDAsIDB4NDAsIDB4ODAsIDB4ZGMsIDB4MDEsIDB4MDAsIDB4MDUsIDB4ODcsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgxYSwgMHg4MCwgMHgwMCwgMHg0MCwgMHg4MCwgMHhkYywgMHgwMSwgMHgwMCwKKwkweDA1LCAweDg3LCAweGEyLCAweDVlLCAweDBiLCAweDdkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4MDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDcsIDB4ODcsIDB4OWYsIDB4ODUsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwYiwgMHg4NywgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhlYywgMHg4MiwgMHgyMiwgMHg0MCwKKwkweDU3LCAweDdkLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweDQwLCAweDU3LCAweDk5LCAweDAxLCAweDAwLAorCTB4MGIsIDB4ODcsIDB4NDIsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsCisJMHg5MywgMHg5MywgMHgwMSwgMHgwMCwgMHhkZCwgMHg4MiwgMHgxYSwgMHg1YiwgMHg2OSwgMHg5MywgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweGNiLCAweDgxLCAweGM4LCAweDAxLCAweDAwLCAweDExLCAweDg3LCAweDIyLCAweDQwLAorCTB4ZjIsIDB4N2YsIDB4MDAsIDB4MDAsIDB4YzQsIDB4ODAsIDB4MDAsIDB4NmYsIDB4OTcsIDB4MzMsIDB4MDEsIDB4MDAsCisJMHgxMywgMHg4NywgMHgyMiwgMHg0MCwgMHg3MywgMHg3ZCwgMHgwMCwgMHgwMCwgMHhkZSwgMHg4MCwgMHgwMCwgMHg0MSwKKwkweDhiLCAweGIzLCAweDAwLCAweDAwLCAweDBlLCAweDg3LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MWIsIDB4ODcsIDB4OWMsIDB4MGYsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MTAsCisJMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgxYiwgMHg4NywgMHgyMiwgMHg0MCwgMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLAorCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4MTgsIDB4ODcsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHhhZiwgMHg4MiwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgyZiwgMHg5MiwgMHgyMiwgMHgwMiwKKwkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDFjLCAweDg3LCAweDQyLCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4OTMsIDB4OTMsIDB4MDEsIDB4MDAsIDB4MmYsIDB4OTIsIDB4MWEsIDB4MDIsCisJMHg2OCwgMHg5NywgMHgwMCwgMHgwMCwgMHgyNiwgMHg4NywgMHg5YywgMHgwZiwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDgwLCAweDAwLCAweDEwLCAweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDI2LCAweDg3LCAweDIyLCAweDQwLAorCTB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHgyMywgMHg4NywgMHhhOCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweGFmLCAweDgyLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAorCTB4MzksIDB4OTIsIDB4MjIsIDB4MDIsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MjcsIDB4ODcsIDB4NDIsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg5MywgMHg5MywgMHgwMSwgMHgwMCwKKwkweDM5LCAweDkyLCAweDFhLCAweDAyLCAweDY4LCAweDk3LCAweDAwLCAweDAwLCAweDMxLCAweDg3LCAweDljLCAweDBmLAorCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MTAsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsCisJMHgzMSwgMHg4NywgMHgyMiwgMHg0MCwgMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwKKwkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLAorCTB4MmUsIDB4ODcsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4YWYsIDB4ODIsIDB4MDAsIDB4ODgsCisJMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHhmOSwgMHg4MiwgMHgyMiwgMHgwMiwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDMyLCAweDg3LCAweDQyLCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LAorCTB4OTMsIDB4OTMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWEsIDB4MDIsIDB4NjgsIDB4OTcsIDB4MDEsIDB4MDAsCisJMHhmOSwgMHg4MiwgMHgwMCwgMHg0MCwgMHgwNSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHhhNiwKKwkweDU2LCAweGIxLCAweDAxLCAweDAwLCAweDU2LCAweDk1LCAweDJmLCAweDQwLCAweDA1LCAweGIwLCAweDAxLCAweDAwLAorCTB4ODIsIDB4ODcsIDB4YTIsIDB4NDAsIDB4ZTcsIDB4NmQsIDB4MDAsIDB4MDAsIDB4YjgsIDB4OTQsIDB4MjksIDB4NDEsCisJMHhlNywgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1NCwgMHhlZiwgMHg5MywgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGYyLCAweDBlLCAweGIwLCAweDAxLCAweDAwLCAweDI5LCAweDAwLCAweDAwLCAweDQwLAorCTB4MGQsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDksIDB4MDAsIDB4MDAsIDB4MDcsIDB4MTIsIDB4ZTQsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhhNywgMHgxMywgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMywgMHgwMCwgMHgwMCwgMHgwNywKKwkweDFhLCAweGY0LCAweDAxLCAweDAwLCAweDA3LCAweDAwLCAweDAwLCAweDA3LCAweDE2LCAweDg4LCAweDAxLCAweDAwLAorCTB4ZmYsIDB4ZmYsIDB4MDAsIDB4MTAsIDB4MzQsIDB4ZDgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsCisJMHgzNCwgMHg5NCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgyMywgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDIwLCAweDE4LCAweDAwLCAweDQwLCAweDExLCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweGI1LCAweDAwLCAweDBkLAorCTB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4NjYsIDB4ODcsIDB4MjIsIDB4MGIsIDB4ZTYsIDB4N2QsIDB4MDAsIDB4MDAsCisJMHg0NywgMHg4NywgMHg2MCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHgwNywKKwkweDg0LCAweDg5LCAweDAxLCAweDAwLCAweDRlLCAweDg3LCAweDA1LCAweGMyLCAweDI0LCAweDMwLCAweDAwLCAweDAwLAorCTB4NTgsIDB4MDQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmQsIDB4MDUsCisJMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg4MywgMHg4NywgMHg3MCwgMHhmMCwgMHgxOCwgMHgzMCwgMHgwMSwgMHgwMCwKKwkweDY2LCAweDg3LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDcwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4NWQsIDB4ODcsIDB4YTAsIDB4NDgsIDB4MjMsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHgzNSwgMHhkMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgxYSwKKwkweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDU3LCAweDg3LCAweDIyLCAweDQwLCAweGUzLCAweDZkLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MWEsCisJMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHg1NCwgMHg4NywgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweGFmLCAweDgyLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDIwLCAweDk4LCAweDAwLCAweDQwLAorCTB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4ODMsIDB4ODcsIDB4MDAsIDB4ZjgsIDB4MTgsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHg1OCwgMHg4NywgMHhhMiwgMHg0MSwgMHgyMywgMHg1MCwgMHgwMCwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHgxMCwKKwkweDM0LCAweGQ4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweDM0LCAweDk0LCAweDAxLCAweDAwLAorCTB4MjAsIDB4MTgsIDB4MDAsIDB4NDAsIDB4MTEsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmUsIDB4MWEsCisJMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDA4LCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLAorCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4MWEsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCisJMHg2MSwgMHg4NywgMHhhOCwgMHgwOSwgMHhlMCwgMHgzMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKKwkweDIzLCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLCAweDM1LCAweGMwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4MTEsIDB4YzAsIDB4MDEsIDB4MDAsIDB4NzIsIDB4ODcsIDB4MjIsIDB4NDEsCisJMHgwZCwgMHg1MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgwZiwgMHhjMCwgMHgwMSwgMHgwMCwKKwkweDZlLCAweDg3LCAweGEwLCAweGFhLCAweDBmLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAorCTB4MGYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDksIDB4MDAsIDB4MDAsIDB4MDcsIDB4MTIsIDB4ZTQsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhhNywgMHgxMywgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDFiLCAweGIwLCAweDAxLCAweDAwLCAweDQ1LCAweDg3LCAweDAwLCAweDQxLCAweDE3LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDIsIDB4MDAsIDB4MDksIDB4MTIsIDB4YzgsIDB4MDEsIDB4MDAsIDB4NDUsIDB4ODcsIDB4ODMsIDB4NDEsCisJMHgxNywgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgxNywgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDQ1LCAweDg3LCAweDAwLCAweDQxLCAweDFiLCAweGMwLCAweDAwLCAweDAwLCAweDdkLCAweDg3LCAweDIzLCAweDQwLAorCTB4MjMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4MzUsIDB4ZDAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHgxYSwgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHg3YSwgMHg4NywgMHgyMiwgMHg0MCwKKwkweGUzLCAweDZkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLCAweDYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4NDAsIDB4MDAsIDB4MDAsIDB4MWEsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4NzcsIDB4ODcsIDB4YTgsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhhZiwgMHg4MiwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDIwLCAweDk4LCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDgzLCAweDg3LCAweDAwLCAweGY4LAorCTB4MTgsIDB4MzAsIDB4MDEsIDB4MDAsIDB4N2IsIDB4ODcsIDB4YTIsIDB4NDEsIDB4MjMsIDB4NTAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgwZiwgMHhjMCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg4NywgMHhhMCwgMHhhYSwKKwkweDBmLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDBmLCAweGIwLCAweDAxLCAweDAwLAorCTB4YjgsIDB4OTQsIDB4MjAsIDB4MDcsIDB4ZTQsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NTYsIDB4OTUsIDB4MjAsIDB4NDAsCisJMHhlNywgMHhiMSwgMHgwMSwgMHgwMCwgMHgxNCwgMHg4NywgMHgwMCwgMHg0MCwgMHgwZiwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweGZmLCAweGZmLCAweDAwLCAweDBjLCAweDgwLCAweGQ4LCAweDAxLCAweDAwLCAweGMwLCAweDAyLCAweDAwLCAweDBjLAorCTB4N2UsIDB4ODksIDB4MDEsIDB4MDAsIDB4OTUsIDB4ODcsIDB4MjYsIDB4NTQsIDB4NjEsIDB4MzEsIDB4MDAsIDB4MDAsCisJMHg4YiwgMHg4NywgMHg4NywgMHgwYywgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwZiwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDYyLCAweDk5LCAweDAxLCAweDAwLCAweDhiLCAweDg3LCAweDI4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4OGIsIDB4ODcsIDB4YTIsIDB4NTQsIDB4NzcsIDB4N2QsIDB4MDAsIDB4MDAsIDB4ODcsIDB4ODcsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg5MCwgMHg4NywgMHgyMiwgMHg0NiwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwKKwkweDBkLCAweDAwLCAweDAwLCAweDQwLCAweDYyLCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGE4LCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTIsIDB4NTQsIDB4NzcsIDB4N2QsIDB4MDEsIDB4MDAsCisJMHg4YywgMHg4NywgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg5NSwgMHg4NywgMHgyMiwgMHg0OSwKKwkweDE5LCAweDdjLCAweDAwLCAweDAwLCAweDBlLCAweDAwLCAweDAwLCAweDQwLCAweDYyLCAweDk5LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4YTgsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTIsIDB4NTQsCisJMHg3NywgMHg3ZCwgMHgwMSwgMHgwMCwgMHg5MCwgMHg4NywgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDEwLCAweDAwLCAweDAwLCAweDQwLCAweDYyLCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGE4LCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTIsIDB4NTQsIDB4NzcsIDB4N2QsIDB4MDEsIDB4MDAsCisJMHg5NSwgMHg4NywgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgzMCwgMHg5NCwgMHgyZiwgMHg1NSwKKwkweGYxLCAweDkzLCAweDAxLCAweDAwLCAweDAwLCAweDQwLCAweDAwLCAweGE2LCAweDU2LCAweGIxLCAweDAxLCAweDAwLAorCTB4ZjksIDB4ODIsIDB4YTIsIDB4NDEsIDB4ZTUsIDB4NTEsIDB4MDAsIDB4MDAsIDB4NjQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHhlNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHg5ZCwgMHg4NywgMHg0NCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweGEwLCAweDg3LCAweGEyLCAweDkzLCAweDU3LCAweDZmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAorCTB4NTcsIDB4YzMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWMsIDB4YWIsIDB4MjcsIDB4YjMsIDB4MDEsIDB4MDAsCisJMHhmOSwgMHg4MiwgMHgyMiwgMHg1MCwgMHhmZCwgMHg3ZiwgMHgwMCwgMHgwMCwgMHhmOSwgMHg4MiwgMHgyMiwgMHg1MSwKKwkweGZkLCAweDdmLCAweDAwLCAweDAwLCAweGY5LCAweDgyLCAweGEyLCAweDQxLCAweDFkLCAweDUzLCAweDAwLCAweDAwLAorCTB4NTAsIDB4NDYsIDB4MDAsIDB4NDAsIDB4MWQsIDB4OWIsIDB4MDEsIDB4MDAsIDB4MzgsIDB4MDUsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwZSwgMHgwMCwgMHgwMCwgMHg0OCwgMHhiMiwgMHhjYiwgMHgwMSwgMHgwMCwKKwkweDEwLCAweDA0LCAweDAwLCAweDQwLCAweDQ5LCAweDMxLCAweDAxLCAweDAwLCAweGFjLCAweDg3LCAweDIyLCAweDQwLAorCTB4YjUsIDB4NmYsIDB4MDAsIDB4MDAsIDB4MGUsIDB4MDAsIDB4MDAsIDB4NDgsIDB4YjIsIDB4Y2IsIDB4MDEsIDB4MDAsCisJMHgyMCwgMHgwNCwgMHgwMCwgMHg0MSwgMHhiNSwgMHg1MywgMHgwMSwgMHgwMCwgMHhmOSwgMHg4MiwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUxLCAweGZkLCAweDgzLCAweDAxLCAweDAwLAorCTB4NDAsIDB4MTYsIDB4MDAsIDB4NDAsIDB4NDUsIDB4OTksIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDUsIDB4MDAsIDB4NDAsCisJMHg0OSwgMHgzMSwgMHgwMSwgMHgwMCwgMHgxZSwgMHgwMCwgMHgwMCwgMHg0OCwgMHhiMiwgMHhjYiwgMHgwMSwgMHgwMCwKKwkweDEwLCAweDA0LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGRhLAorCTB4OTEsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDgsIDB4YjIsIDB4Y2IsIDB4MDEsIDB4MDAsCisJMHgyMCwgMHgwNCwgMHgwMCwgMHg0MCwgMHhiNSwgMHgzMywgMHgwMSwgMHgwMCwgMHg2MCwgMHgxNiwgMHgyMCwgMHg0MCwKKwkweGU1LCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDgyLCAweDAwLCAweDQwLCAweGI1LCAweDMzLCAweDAxLCAweDAwLAorCTB4MDgsIDB4MDAsIDB4MDAsIDB4NDgsIDB4YjIsIDB4Y2IsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4NGEsCisJMHhiNCwgMHg4YiwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwNCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDBhLCAweDAwLCAweDAwLCAweDQ4LCAweGIyLCAweGNiLCAweDAxLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDRhLAorCTB4YjQsIDB4ZjcsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHhmOSwgMHg4MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNSwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYzLCAweDA4LCAweGIwLCAweDAxLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MjAsIDB4NDAsIDB4ZTYsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDMsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg5NiwgMHhlNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHg5NiwgMHhjMCwgMHgwMSwgMHgwMCwKKwkweGMzLCAweDg3LCAweDAwLCAweDRiLCAweDEwLCAweGM5LCAweDAwLCAweDAwLCAweGU2LCAweDhhLCAweDAwLCAweDQxLAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDFhLCAweDhiLCAweDAwLCAweDQxLAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDRjLCAweDhiLCAweDAwLCAweDQ1LAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4NGMsIDB4OGIsIDB4MDAsIDB4NDUsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHg0YywgMHg4YiwgMHgwMCwgMHg0NSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg0YywgMHg4YiwgMHgwMCwgMHg0NSwKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDhiLCAweDhiLCAweDAwLCAweDQzLCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweGI0LCAweDhiLCAweDAwLCAweDQzLAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4YjgsIDB4OGIsIDB4MDAsIDB4NDQsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwMywgMHg4ZCwgMHgwMCwgMHg0NSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweGM0LCAweDhiLCAweDAwLCAweDQzLCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweGMzLCAweDhiLCAweDAwLCAweDQzLAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZTQsIDB4OGEsIDB4MDAsIDB4NDUsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NzMsIDB4OGMsIDB4MDAsIDB4NDIsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg3MywgMHg4YywgMHgwMCwgMHg0MywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDczLCAweDhjLCAweDAwLCAweDQ0LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweGU0LCAweDhhLCAweDAwLCAweDQ1LAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4OTMsIDB4OGMsIDB4MDAsIDB4NDMsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweGU0LCAweDhhLCAweDAwLCAweDQ1LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAorCTB4YjEsIDB4OGMsIDB4MDAsIDB4NDMsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4YjEsIDB4OGMsIDB4MDAsIDB4NDQsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhlNCwgMHg4YSwgMHgwMCwgMHg0NSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweGIxLCAweDhjLCAweDAwLCAweDQyLCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZTQsIDB4OGEsIDB4MDAsIDB4NDUsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHhkOSwgMHg4YywgMHgwMCwgMHg0NCwKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAorCTB4ZTQsIDB4OGEsIDB4MDAsIDB4NDUsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZTQsIDB4OGEsIDB4MDAsIDB4NDIsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHhlYSwgMHg4YywgMHgwMCwgMHg0NSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhlYSwgMHg4YywgMHgwMCwgMHg0NSwKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweGU0LCAweDhhLCAweDAwLCAweDQ1LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweGVjLCAweDhjLCAweDAwLCAweDQyLAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZWMsIDB4OGMsIDB4MDAsIDB4NDMsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHhlYywgMHg4YywgMHgwMCwgMHg0NCwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhlYywgMHg4YywgMHgwMCwgMHg0NSwKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZjQsIDB4OGMsIDB4MDAsIDB4NDQsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHhlNCwgMHg4YSwgMHgwMCwgMHg0NSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHg4ZCwgMHgwMCwgMHg0MiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweGY1LCAweDhjLCAweDAwLCAweDQzLCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA1LCAweDhkLCAweDAwLCAweDQ0LAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZTQsIDB4OGEsIDB4MDAsIDB4NDUsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNiwgMHg4ZCwgMHgwMCwgMHg0MywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweGZjLCAweDhjLCAweDAwLCAweDQ0LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweGU0LCAweDhhLCAweDAwLCAweDQ1LAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweGU0LCAweDhhLCAweDAwLCAweDQxLCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4NzEsIDB4OGMsIDB4MDAsIDB4NDIsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4NzEsIDB4OGMsIDB4MDAsIDB4NDMsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg3MSwgMHg4YywgMHgwMCwgMHg0NCwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweGU0LCAweDhhLCAweDAwLCAweDQ1LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHhlNCwgMHg4YSwgMHgwMCwgMHg0MSwKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA3LCAweDhkLCAweDAwLCAweDQyLCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDcsIDB4OGQsIDB4MDAsIDB4NDMsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4OGQsIDB4MDAsIDB4NDQsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhlNCwgMHg4YSwgMHgwMCwgMHg0NSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MGUsIDB4OGQsIDB4MDAsIDB4NDUsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4OGQsIDB4MDAsIDB4NDIsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MWMsIDB4OGQsIDB4MDAsIDB4NDMsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHg3YiwgMHg4ZCwgMHgwMCwgMHg0MywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhiOCwgMHg4YiwgMHgwMCwgMHg0NCwKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDAzLCAweDhkLCAweDAwLCAweDQ1LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ODMsIDB4OGQsIDB4MDAsIDB4NDMsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHhiOCwgMHg4YiwgMHgwMCwgMHg0NCwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMywgMHg4ZCwgMHgwMCwgMHg0NSwKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDk0LCAweDhkLCAweDAwLCAweDQzLAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHhlNCwgMHg4YSwgMHgwMCwgMHg0NSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHg4OCwgMHg4YiwgMHgwMCwgMHg0MywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDdmLCAweDhkLCAweDAwLCAweDQzLCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweGI4LCAweDhiLCAweDAwLCAweDQ0LAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4OGQsIDB4MDAsIDB4NDUsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA3LCAweDAwLCAweDJkLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjMsIDB4MDgsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDYsIDB4MDAsIDB4MjAsIDB4NDcsCisJMHhlNiwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0NywgMHg5NiwgMHhlNCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ3LCAweDk2LCAweGQwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ3LAorCTB4OTYsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4OTYsIDB4YzAsIDB4MDEsIDB4MDAsCisJMHg4MywgMHg4OCwgMHgwMCwgMHg0YiwgMHgxMCwgMHhjOSwgMHgwMCwgMHgwMCwgMHhhYywgMHg4ZCwgMHgwMCwgMHg0OSwKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweGU1LCAweDhkLCAweDAwLCAweDQyLAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4ZWIsIDB4OGQsIDB4MDAsIDB4NDYsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHhmOSwgMHg4ZCwgMHgwMCwgMHg0MiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDFhLCAweDhlLCAweDAwLCAweDQyLCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgxNSwgMHg4ZSwgMHgwMCwgMHg0YSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgxZCwgMHg4ZSwgMHgwMCwgMHg0MywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDc1LCAweDhlLCAweDAwLCAweDQ0LAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg3NCwgMHg4ZSwgMHgwMCwgMHg0YiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHhlZSwgMHg4ZCwgMHgwMCwgMHg0MSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweGVlLCAweDhkLCAweDAwLCAweDQzLCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4ZWUsIDB4OGQsIDB4MDAsIDB4NDQsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZWUsIDB4OGQsIDB4MDAsIDB4NDUsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhlZSwgMHg4ZCwgMHgwMCwgMHg0NiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweGVlLCAweDhkLCAweDAwLCAweDQ3LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweGVlLCAweDhkLCAweDAwLCAweDQ4LAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZWUsIDB4OGQsIDB4MDAsIDB4NDksIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHhlZSwgMHg4ZCwgMHgwMCwgMHg0YSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhlZSwgMHg4ZCwgMHgwMCwgMHg0YiwKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweGVlLCAweDhkLCAweDAwLCAweDRjLCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4ZWUsIDB4OGQsIDB4MDAsIDB4NGQsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweGQ0LCAweDhlLCAweDAwLCAweDQyLCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZDQsIDB4OGUsIDB4MDAsIDB4NDQsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweGQ0LCAweDhlLCAweDAwLCAweDRiLCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4ZWMsIDB4OGUsIDB4MDAsIDB4NDUsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4OGYsIDB4MDAsIDB4NDcsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHg4ZSwgMHgwMCwgMHg0NSwKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4OTEsIDB4MDAsIDB4NDYsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgxYSwgMHg4ZSwgMHgwMCwgMHg0NiwKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweGY5LCAweDhkLCAweDAwLCAweDQ2LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MTMsIDB4OGUsIDB4MDAsIDB4NDcsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MTMsIDB4OGUsIDB4MDAsIDB4NDgsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MTUsIDB4OGUsIDB4MDAsIDB4NGEsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDc1LCAweDhlLCAweDAwLCAweDQ1LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDFkLCAweDhlLCAweDAwLCAweDQzLAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MTMsIDB4OGUsIDB4MDAsIDB4NDcsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgxMywgMHg4ZSwgMHgwMCwgMHg0OCwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NzQsIDB4OGUsIDB4MDAsIDB4NGMsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA5LCAweDhmLCAweDAwLCAweDQ0LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDksIDB4OGYsIDB4MDAsIDB4NDIsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4Y2YsIDB4OGEsIDB4MDAsIDB4NDcsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhjZiwgMHg4YSwgMHgwMCwgMHg0OCwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwOSwgMHg4ZiwgMHgwMCwgMHg0YiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4ZWUsIDB4OGQsIDB4MDAsIDB4NDEsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MmMsIDB4OGYsIDB4MDAsIDB4NDcsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDE0LCAweDhmLCAweDAwLCAweDQ3LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4OGYsIDB4MDAsIDB4NDcsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MTQsIDB4OGYsIDB4MDAsIDB4NDcsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MmMsIDB4OGYsIDB4MDAsIDB4NDcsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgxMywgMHg4ZSwgMHgwMCwgMHg0NywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDEzLCAweDhlLCAweDAwLCAweDQ4LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHg4ZiwgMHgwMCwgMHg0NywKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgzYiwgMHg4ZiwgMHgwMCwgMHg0NywKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDNiLCAweDhmLCAweDAwLCAweDQ4LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHg5ZCwgMHg4ZiwgMHgwMCwgMHg0MCwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhiYSwgMHg4ZiwgMHgwMCwgMHg0NywKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweGFlLCAweDhmLCAweDAwLCAweDQ4LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MGMsIDB4OGYsIDB4MDAsIDB4NDcsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MGMsIDB4OGYsIDB4MDAsIDB4NDcsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhiYSwgMHg4ZiwgMHgwMCwgMHg0NywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweGMxLCAweDhmLCAweDAwLCAweDQ3LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweGMxLCAweDhmLCAweDAwLCAweDQ4LAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHhhZSwgMHg4ZiwgMHgwMCwgMHg0OCwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwYywgMHg4ZiwgMHgwMCwgMHg0NywKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDBjLCAweDhmLCAweDAwLCAweDQ3LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4YWUsIDB4OGYsIDB4MDAsIDB4NDgsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweGQ0LCAweDhlLCAweDAwLCAweDQzLAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHhkNCwgMHg4ZSwgMHgwMCwgMHg0NSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhkNCwgMHg4ZSwgMHgwMCwgMHg0NiwKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDEzLCAweDhlLCAweDAwLCAweDQ3LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MTMsIDB4OGUsIDB4MDAsIDB4NDgsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhkNCwgMHg4ZSwgMHgwMCwgMHg0YSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweGQ0LCAweDhlLCAweDAwLCAweDRjLAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDJiLCAweDhmLCAweDAwLCAweDQ3LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MWYsIDB4OGYsIDB4MDAsIDB4NDgsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MTMsIDB4OGYsIDB4MDAsIDB4NDcsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgxMywgMHg4ZiwgMHgwMCwgMHg0NywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDJiLCAweDhmLCAweDAwLCAweDQ3LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweGNmLCAweDhhLCAweDAwLCAweDQ3LAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4Y2YsIDB4OGEsIDB4MDAsIDB4NDgsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgxZiwgMHg4ZiwgMHgwMCwgMHg0OCwKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDEzLCAweDhmLCAweDAwLCAweDQ3LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MTMsIDB4OGYsIDB4MDAsIDB4NDcsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MWYsIDB4OGYsIDB4MDAsIDB4NDgsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweGMzLCAweDhmLCAweDAwLCAweDQyLAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHhjMywgMHg4ZiwgMHgwMCwgMHg0NCwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweGMzLCAweDhmLCAweDAwLCAweDRiLAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4YzMsIDB4OGYsIDB4MDAsIDB4NDMsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweGMzLCAweDhmLCAweDAwLCAweDQ1LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweGMzLCAweDhmLCAweDAwLCAweDQ2LAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4YzMsIDB4OGYsIDB4MDAsIDB4NDcsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHhjMywgMHg4ZiwgMHgwMCwgMHg0OCwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweGMzLCAweDhmLCAweDAwLCAweDRhLCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4YzMsIDB4OGYsIDB4MDAsIDB4NGMsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhjMywgMHg4ZiwgMHgwMCwgMHg0YywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHhkZCwgMHg4ZiwgMHgwMCwgMHg0NiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMywgMHg4ZiwgMHgwMCwgMHg0NywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweGRkLCAweDhmLCAweDAwLCAweDQ2LAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhkOCwgMHg5MCwgMHgwMCwgMHg0NiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMywgMHg4ZiwgMHgwMCwgMHg0NywKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4ZDgsIDB4OTAsIDB4MDAsIDB4NDYsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweGQ4LCAweDkwLCAweDAwLCAweDQ2LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweGZiLCAweDkwLCAweDAwLCAweDQyLCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHhmYSwgMHg5MCwgMHgwMCwgMHg0YSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZmIsIDB4OTAsIDB4MDAsIDB4NDYsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgxMywgMHg4ZSwgMHgwMCwgMHg0NywKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDEzLCAweDhlLCAweDAwLCAweDQ4LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweGZhLCAweDkwLCAweDAwLCAweDRhLCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4Y2UsIDB4OGYsIDB4MDAsIDB4NDEsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweGRhLCAweDhmLCAweDAwLCAweDQyLCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZGEsIDB4OGYsIDB4MDAsIDB4NDQsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweGRhLCAweDhmLCAweDAwLCAweDRiLCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4ZGEsIDB4OGYsIDB4MDAsIDB4NDMsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhkYSwgMHg4ZiwgMHgwMCwgMHg0NSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweGRhLCAweDhmLCAweDAwLCAweDQ2LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweGRhLCAweDhmLCAweDAwLCAweDQ3LAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZGEsIDB4OGYsIDB4MDAsIDB4NDgsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4ZGEsIDB4OGYsIDB4MDAsIDB4NGMsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZWMsIDB4OGUsIDB4MDAsIDB4NGMsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4OGYsIDB4MDAsIDB4NDcsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweGUwLCAweDhlLCAweDAwLCAweDRjLCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHg4ZiwgMHg5MSwgMHgwMCwgMHg0NiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MzYsIDB4OTEsIDB4MDAsIDB4NDIsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgzNiwgMHg5MSwgMHgwMCwgMHg0NCwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MzYsIDB4OTEsIDB4MDAsIDB4NGIsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDM2LCAweDkxLCAweDAwLCAweDQ1LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MzYsIDB4OTEsIDB4MDAsIDB4NDYsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MTMsIDB4OGUsIDB4MDAsIDB4NDcsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgxMywgMHg4ZSwgMHgwMCwgMHg0OCwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgzNiwgMHg5MSwgMHgwMCwgMHg0YywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4OGUsIDB4MDAsIDB4NDIsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg5MSwgMHgwMCwgMHg0NiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4OGUsIDB4MDAsIDB4NDYsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMywgMHg4ZiwgMHgwMCwgMHg0NywKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4NDEsIDB4OTEsIDB4MDAsIDB4NDYsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDQxLCAweDkxLCAweDAwLCAweDQ2LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHg5MSwgMHgwMCwgMHg0MywKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDAzLCAweDhmLCAweDAwLCAweDQ3LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ODcsIDB4OTEsIDB4MDAsIDB4NGEsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDQ1LCAweDkxLCAweDAwLCAweDRkLCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDU2LCAweDkxLCAweDAwLCAweDQzLAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgzNCwgMHg5MSwgMHgwMCwgMHg0YSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NTYsIDB4OTEsIDB4MDAsIDB4NDMsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDEzLCAweDhlLCAweDAwLCAweDQ3LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDEzLCAweDhlLCAweDAwLCAweDQ4LAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDM0LCAweDkxLCAweDAwLCAweDRhLCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDY3LCAweDkxLCAweDAwLCAweDQzLAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDMsIDB4OGYsIDB4MDAsIDB4NDcsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg2NywgMHg5MSwgMHgwMCwgMHg0MywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NjcsIDB4OTEsIDB4MDAsIDB4NGQsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweGY5LCAweDhkLCAweDAwLCAweDQyLCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MWEsIDB4OGUsIDB4MDAsIDB4NDIsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDg1LCAweDkxLCAweDAwLCAweDQyLCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgxYSwgMHg4ZSwgMHgwMCwgMHg0NiwKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweGY5LCAweDhkLCAweDAwLCAweDQ2LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MTMsIDB4OGUsIDB4MDAsIDB4NDcsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MTMsIDB4OGUsIDB4MDAsIDB4NDgsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ODUsIDB4OTEsIDB4MDAsIDB4NDYsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ODcsIDB4OTEsIDB4MDAsIDB4NGEsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwMywgMHg4ZiwgMHgwMCwgMHg0NywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDg3LCAweDkxLCAweDAwLCAweDRhLCAweDA5LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHg5MSwgMHgwMCwgMHg0NiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHg0MiwgMHg5MSwgMHgwMCwgMHg0NiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMywgMHg4ZiwgMHgwMCwgMHg0NywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDQyLCAweDkxLCAweDAwLCAweDQ2LAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHg5MSwgMHgwMCwgMHg0NiwKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDhkLCAweDkxLCAweDAwLCAweDQyLCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MzQsIDB4OTEsIDB4MDAsIDB4NGEsCisJMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4OGQsIDB4OTEsIDB4MDAsIDB4NDYsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgxMywgMHg4ZSwgMHgwMCwgMHg0NywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDEzLCAweDhlLCAweDAwLCAweDQ4LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgzNCwgMHg5MSwgMHgwMCwgMHg0YSwKKwkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgxZCwgMHg4ZSwgMHgwMCwgMHg0ZCwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAorCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCisJMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgxZCwgMHg4ZSwgMHgwMCwgMHg0ZCwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDEzLCAweDhlLCAweDAwLCAweDQ3LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDEzLCAweDhlLCAweDAwLCAweDQ4LAorCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDAsIDB4MmUsIDB4NGIsCisJMHgxOSwgMHg5MCwgMHgwMSwgMHgwMCwgMHgxZiwgMHg4NywgMHgwMCwgMHgwNCwgMHhlNiwgMHhiMSwgMHgwMCwgMHgwMCwKKwkweGNmLCAweDhhLCAweDIyLCAweDQyLCAweDE5LCAweDdjLCAweDAwLCAweDAwLCAweDgzLCAweDk0LCAweDAwLCAweDNhLAorCTB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4Y2YsIDB4OGEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHhjZiwgMHg4YSwgMHgyMiwgMHg0MiwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHhmZiwgMHgxZiwgMHgwMCwgMHgwZiwKKwkweDFlLCAweDhjLCAweDAxLCAweDAwLCAweGVlLCAweDkzLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4ZGYsIDB4OGEsIDB4OWMsIDB4MGYsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWMsCisJMHgxZiwgMHg4MCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgxMCwgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweGRmLCAweDhhLCAweDIyLCAweDQwLCAweGUzLCAweDZkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ1LAorCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCisJMHhkYywgMHg4YSwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhhZiwgMHg4MiwgMHgwMCwgMHg4OCwKKwkweDFjLCAweGIwLCAweDAwLCAweDAwLCAweGEzLCAweDg0LCAweDIyLCAweDAyLCAweDgwLCAweDMyLCAweDAwLCAweDAwLAorCTB4ZTAsIDB4OGEsIDB4NDIsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsCisJMHg5MywgMHg5MywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYSwgMHgwMiwgMHg2OCwgMHg5NywgMHgwMSwgMHgwMCwKKwkweGEzLCAweDg0LCAweDAwLCAweDQwLCAweDA1LCAweGIwLCAweDAwLCAweDAwLCAweDA1LCAweDAwLCAweDJlLCAweDRiLAorCTB4MTksIDB4OTAsIDB4MDEsIDB4MDAsIDB4MWYsIDB4ODcsIDB4MDAsIDB4MDQsIDB4ZTYsIDB4YjEsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4NywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDhkLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDAzLCAweDQyLCAweGM5LCAweDAxLCAweDAwLAorCTB4NDAsIDB4MDAsIDB4MDAsIDB4YTEsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsCisJMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhjNiwgMHg5NSwgMHgwMCwgMHgwNiwgMHgwNywgMHg0MCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDA2LCAweDA3LCAweGQwLCAweDAxLCAweDAwLCAweGQ0LCAweDAwLCAweDJlLCAweDVjLAorCTB4MWYsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwYywgMHg4MCwgMHgwMCwgMHgwMywgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwKKwkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZmUsIDB4OTYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmUsCisJMHg5NiwgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZlLAorCTB4OTYsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmUsIDB4OTYsIDB4YzAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZhLCAweDk2LCAweGMwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZmUsIDB4OTYsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MzAsIDB4MDAsIDB4NGIsCisJMHg5NCwgMHg4OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NiwgMHg5NSwgMHhmMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDRhLCAweDk2LCAweGMwLCAweDAxLCAweDAwLCAweDVlLCAweDAxLCAweDJlLCAweDM0LAorCTB4OTcsIDB4ODQsIDB4MDEsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4NGIsIDB4ZTQsIDB4ZTUsIDB4MDEsIDB4MDAsCisJMHg2NCwgMHgwMSwgMHgyMCwgMHg0MCwgMHhlMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwOSwgMHgwMCwgMHgwMCwgMHgwNywKKwkweDg2LCAweGU0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJlLCAweGE3LCAweDg3LCAweGMwLCAweDAxLCAweDAwLAorCTB4MTAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NDgsIDB4YzksIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHhmMSwgMHg5OSwgMHgwMSwgMHgwMCwgMHg1OCwgMHgwMSwgMHgwMCwgMHg0MywgMHhmMCwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDU4LCAweDAxLCAweDAwLCAweDA1LCAweGUwLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LAorCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YTAsIDB4MDAsIDB4MDAsIDB4YTQsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCisJMHgwOSwgMHg4YiwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwKKwkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDFhLCAweDAwLCAweDAwLCAweDQwLCAweDk3LCAweDk4LCAweDAxLCAweDAwLAorCTB4MDgsIDB4MDAsIDB4MmUsIDB4NDAsIDB4OTUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MTEsIDB4OGIsIDB4MjAsIDB4NGIsCisJMHg5NCwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDBlLCAweDhiLCAweDAwLCAweDQxLCAweDk1LCAweGMwLCAweDAwLCAweDAwLCAweDEwLCAweDgwLCAweDAwLCAweDEwLAorCTB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4MTgsIDB4OGIsIDB4MjIsIDB4NDAsIDB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwKKwkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDE0LCAweDhiLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4YWYsIDB4ODIsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsCisJMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg4MywgMHg5NCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwKKwkweGU0LCAweDhhLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDBjLCAweDgwLCAweDAwLCAweDAzLAorCTB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4ODYsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg4OCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgxZCwgMHg4YiwgMHg0NCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDIwLCAweDhiLCAweGEyLCAweDRjLCAweGZkLCAweDdmLCAweDAwLCAweDAwLAorCTB4MjEsIDB4OGIsIDB4MDAsIDB4NGMsIDB4ZmQsIDB4OTMsIDB4MDAsIDB4MDAsIDB4MjIsIDB4OGIsIDB4MjAsIDB4ZjAsCisJMHg1NiwgMHg2ZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHg1NiwgMHhiMywgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDFjLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDEwLAorCTB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4NjQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjEsIDB4OTksIDB4MDEsIDB4MDAsCisJMHg3MCwgMHgwMCwgMHgwMCwgMHgwNSwgMHhmMCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywKKwkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ3LCAweDYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4MjAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4MjgsIDB4OGIsIDB4YTgsIDB4NDQsCisJMHhlMCwgMHgzMSwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg4YywgMHhjOCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDgwLCAweDAwLCAweDQ2LCAweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDQwLAorCTB4ZjEsIDB4OTksIDB4MDEsIDB4MDAsIDB4NjgsIDB4MDEsIDB4MDAsIDB4MDUsIDB4ZjAsIDB4YzksIDB4MDEsIDB4MDAsCisJMHg2NCwgMHgwMCwgMHgwMCwgMHg0MywgMHhmMCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywKKwkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ2LCAweDYyLCAweGIxLCAweDAxLCAweDAwLAorCTB4MzAsIDB4OGIsIDB4YTgsIDB4NDQsIDB4ZTAsIDB4MzEsIDB4MDAsIDB4MDAsIDB4YWYsIDB4ODIsIDB4MDAsIDB4ODgsCisJMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgwOSwgMHgwMCwgMHgwMCwgMHgwNywgMHg4NiwgMHhlNCwgMHgwMSwgMHgwMCwKKwkweDM4LCAweDAwLCAweDJlLCAweGE3LCAweDg3LCAweGMwLCAweDAxLCAweDAwLCAweDhiLCAweDAwLCAweDJkLCAweDA1LAorCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MzgsIDB4OGIsIDB4MjIsIDB4NDMsIDB4ZTcsIDB4N2QsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg0NSwgMHhjMSwgMHgwMSwgMHgwMCwgMHgzYiwgMHg4YiwgMHgyMiwgMHg0NCwKKwkweGU3LCAweDdkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRjLCAweDQ1LCAweGMxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGEsIDB4MTksIDB4OTAsIDB4MDEsIDB4MDAsIDB4NjgsIDB4MDEsIDB4MjAsIDB4YTIsCisJMHhlNCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg4OCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDNmLCAweDhiLCAweDIzLCAweDBiLCAweGU1LCAweDZkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAorCTB4MTksIDB4OTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MTAsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsCisJMHg1MCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmMSwgMHg5OSwgMHgwMSwgMHgwMCwgMHg1OCwgMHgwMSwgMHgwMCwgMHg0MywKKwkweGYwLCAweGM5LCAweDAxLCAweDAwLCAweDU4LCAweDAxLCAweDAwLCAweDA1LCAweGUwLCAweGM5LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsCisJMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0NCwgMHg4YiwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweGFmLCAweDgyLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDVjLCAweDAwLCAweDJlLCAweDA1LAorCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg2MCwgMHhmMCwgMHg5NiwgMHhiMCwgMHgwMSwgMHgwMCwgMHg4MywgMHg5NCwgMHgwMCwgMHg0MSwKKwkweDgxLCAweDMwLCAweDAxLCAweDAwLCAweGU0LCAweDhhLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4NGYsIDB4OGIsIDB4YTIsIDB4NDksIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4ODYsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwgMHg1MywgMHg4YiwgMHgwMCwgMHg0MCwgMHhlNSwgMHhiMSwgMHgwMCwgMHgwMCwKKwkweDg2LCAweDAwLCAweDJmLCAweDQ5LCAweDE5LCAweDgwLCAweDAxLCAweDAwLCAweDUzLCAweDhiLCAweGEyLCAweGYyLAorCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4OGIsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDcsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHhlNywgMHg5MSwgMHgwMSwgMHgwMCwgMHg1NiwgMHg4YiwgMHhhMiwgMHg0NiwKKwkweDE5LCAweDdjLCAweDAwLCAweDAwLCAweGEwLCAweDAwLCAweDAwLCAweDQwLCAweDQ3LCAweDk5LCAweDAxLCAweDAwLAorCTB4NWEsIDB4OGIsIDB4MDAsIDB4NDAsIDB4ZTUsIDB4YjEsIDB4MDAsIDB4MDAsIDB4YTAsIDB4MDAsIDB4MmYsIDB4NDYsCisJMHgxOSwgMHg4MCwgMHgwMSwgMHgwMCwgMHg1YSwgMHg4YiwgMHhhMiwgMHhmMiwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDhiLCAweDAwLCAweDAwLCAweDQwLCAweDQ3LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAorCTB4ZTcsIDB4OTEsIDB4MDEsIDB4MDAsIDB4YTgsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgzNCwgMHgwMCwgMHgyZCwgMHhmMCwgMHgyNCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmYiwKKwkweDBjLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZiLCAweDEwLCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZmIsIDB4MTIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MGYsIDB4MDAsIDB4MDAsIDB4ZjMsCisJMHgxNiwgMHg4OCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHhmMywgMHgxNCwgMHhmNCwgMHgwMSwgMHgwMCwKKwkweDg1LCAweDhiLCAweDI2LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDZkLCAweDhiLCAweDIyLCAweDBhLAorCTB4MTYsIDB4NmMsIDB4MDAsIDB4MDAsIDB4NTgsIDB4MDAsIDB4M2QsIDB4NDMsIDB4MTMsIDB4ZTAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHhmMCwKKwkweDg0LCAweDMwLCAweDAwLCAweDAwLCAweDcwLCAweDk1LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4YWYsIDB4ODIsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsCisJMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgxMywgMHhjMCwgMHgwMSwgMHgwMCwKKwkweDZjLCAweDhiLCAweGEwLCAweDQzLCAweDEzLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4MTMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NjIsIDB4OGIsIDB4MDAsIDB4NDEsIDB4MTUsIDB4ZDAsIDB4MDAsIDB4MDAsCisJMHg4NSwgMHg4YiwgMHgyMiwgMHgwYSwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHg1OCwgMHgwMCwgMHgzZCwgMHg0MywKKwkweDEzLCAweGUwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDgyLCAweGIwLCAweDAxLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MjIsIDB4ZjAsIDB4ODQsIDB4MzAsIDB4MDAsIDB4MDAsIDB4NzAsIDB4OTUsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgyMCwgMHg0MCwgMHhlMSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweGFmLCAweDgyLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LAorCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ODUsIDB4OGIsIDB4MjIsIDB4NDEsIDB4MTUsIDB4NTAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgxMSwgMHhjMCwgMHgwMSwgMHgwMCwgMHg3OSwgMHg4YiwgMHhhMCwgMHg0MywKKwkweDExLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDExLCAweGIwLCAweDAxLCAweDAwLAorCTB4NTgsIDB4MDAsIDB4M2QsIDB4NDMsIDB4MTEsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsCisJMHgzNiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHhmMCwgMHgwMCwgMHgzMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDUwLCAweDgzLCAweGIwLCAweDAxLCAweDAwLCAweGMyLCAweDk0LCAweDAwLCAweDQ3LAorCTB4NjEsIDB4MzEsIDB4MDEsIDB4MDAsIDB4YWYsIDB4ODIsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgyYywgMHg5MiwgMHgwMCwgMHgwNSwgMHg0OCwgMHgzMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwKKwkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLAorCTB4ODEsIDB4OGIsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4YWYsIDB4ODIsIDB4MDAsIDB4ODgsCisJMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHg3NSwgMHg4YiwgMHgwMCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMCwgMHgwMCwKKwkweDM3LCAweDAwLCAweDIwLCAweDQwLCAweGU3LCAweGIxLCAweDAxLCAweDAwLCAweGY0LCAweDk0LCAweDAwLCAweDUxLAorCTB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4ZTQsIDB4OGEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgzNCwgMHgwMCwgMHgyZSwgMHg0MSwgMHhmNSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgxMSwgMHgwMCwgMHg0MCwKKwkweGU1LCAweDk5LCAweDAxLCAweDAwLCAweDhkLCAweDhiLCAweDAwLCAweDQ4LCAweDE5LCAweDkwLCAweDAwLCAweDAwLAorCTB4MzQsIDB4MDAsIDB4MmUsIDB4NDEsIDB4ZjUsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MTEsIDB4MDAsIDB4NDAsCisJMHhlNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMywgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDk0LCAweGIwLCAweDAxLCAweDAwLCAweDkyLCAweDhiLCAweDIyLCAweDQ1LAorCTB4MjMsIDB4N2MsIDB4MDAsIDB4MDAsIDB4YjAsIDB4MDAsIDB4MmYsIDB4ZjAsIDB4OGMsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg2MCwgMHhmMCwgMHg4YywgMHhjMCwgMHgwMSwgMHgwMCwgMHg5MCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDM1LCAweDAwLCAweDJkLCAweGYwLCAweDhjLCAweGIwLCAweDAxLCAweDAwLAorCTB4NTgsIDB4MDAsIDB4M2UsIDB4NDMsIDB4ZTcsIDB4ZTEsIDB4MDEsIDB4MDAsIDB4OTcsIDB4OGIsIDB4MjIsIDB4NDgsCisJMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4ZCwgMHhjMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDY4LCAweDBhLCAweDhjLCAweGMwLCAweDAxLCAweDAwLCAweDM4LCAweDAwLCAweDJhLCAweDRhLAorCTB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MjgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4YzksIDB4MDEsIDB4MDAsCisJMHgzYywgMHgwMCwgMHgyMCwgMHgxYiwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgxMCwgMHg4MCwgMHgwMCwgMHgwMywKKwkweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDM4LCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MjYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjIsIDB4ZjgsCisJMHgwMiwgMHgzMCwgMHgwMCwgMHgwMCwgMHhhNSwgMHg4YiwgMHgyMywgMHgwMSwgMHgxNCwgMHg2YywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDgwLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LAorCTB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NGMsIDB4MDAsIDB4MjAsIDB4ZjAsIDB4ZTQsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg0NCwgMHgwMCwgMHgyMCwgMHg0MCwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0OCwgMHgwMCwgMHgyMCwgMHg0MSwKKwkweGUwLCAweGIxLCAweDAxLCAweDAwLCAweGE4LCAweDAwLCAweDJkLCAweDEwLCAweDMyLCAweGIwLCAweDAxLCAweDAwLAorCTB4YWEsIDB4OTUsIDB4MDAsIDB4ZjAsIDB4MjQsIDB4MzAsIDB4MDEsIDB4MDAsIDB4YWUsIDB4OGIsIDB4YTIsIDB4NDQsCisJMHg4MSwgMHg2YywgMHgwMCwgMHgwMCwgMHhhYywgMHg4YiwgMHgyMiwgMHg0MSwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwKKwkweDU3LCAweDkzLCAweDAwLCAweDQwLCAweDNiLCAweDMwLCAweDAxLCAweDAwLCAweGQyLCAweDhiLCAweGEyLCAweDA4LAorCTB4M2MsIDB4MzAsIDB4MDAsIDB4MDAsIDB4YWUsIDB4OGIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHg5NCwgMHg5MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhkMiwgMHg4YiwgMHhhMiwgMHgwOCwKKwkweDNjLCAweDMwLCAweDAwLCAweDAwLCAweDUwLCAweDAwLCAweDIwLCAweDFjLCAweGUwLCAweGIxLCAweDAxLCAweDAwLAorCTB4NTQsIDB4MDAsIDB4MjAsIDB4MTMsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NGUsIDB4MDAsIDB4MjAsIDB4MDEsCisJMHhlNCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgyMCwgMHgwYSwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweGY0LCAweDk0LCAweDAwLCAweDVmLCAweDgxLCAweDMwLCAweDAxLCAweDAwLCAweGU0LCAweDhhLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MzcsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDcsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgzNiwgMHg5MywgMHgwMCwgMHhmMywgMHg5NCwgMHgzMCwgMHgwMSwgMHgwMCwgMHg4ZCwgMHg4YiwgMHgyMiwgMHg0YSwKKwkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweGJhLCAweDhiLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MzcsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDcsIDB4OTksIDB4MDEsIDB4MDAsIDB4MzYsIDB4OTMsIDB4MDAsIDB4ZjMsCisJMHg5NCwgMHgzMCwgMHgwMSwgMHgwMCwgMHg1OCwgMHgwMCwgMHgzZSwgMHg0MywgMHg5NywgMHhlMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDFiLCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDFmLCAweDAwLCAweDYwLCAweDAwLAorCTB4MDAsIDB4OGMsIDB4MDEsIDB4MDAsIDB4ZTQsIDB4OGEsIDB4ODUsIDB4MTEsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHg4MCwgMHgwMCwgMHgwMywgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHhiMCwgMHgwMCwgMHgyZiwgMHhmMCwKKwkweDhjLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDYwLCAweGYwLCAweDhjLCAweGMwLCAweDAxLCAweDAwLAorCTB4ZjQsIDB4OTQsIDB4MDAsIDB4NWYsIDB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4ZTQsIDB4OGEsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhjNCwgMHg4YiwgMHgwMCwgMHg0OSwgMHgxOSwgMHg4MCwgMHgwMCwgMHgwMCwKKwkweGM5LCAweDhiLCAweDIyLCAweDQxLCAweDE5LCAweDdjLCAweDAwLCAweDAwLCAweDU3LCAweDkzLCAweDAwLCAweDQwLAorCTB4M2IsIDB4MzAsIDB4MDEsIDB4MDAsIDB4Y2QsIDB4OGIsIDB4YTIsIDB4MDgsIDB4M2MsIDB4MzAsIDB4MDAsIDB4MDAsCisJMHhmNCwgMHg5NCwgMHgwMCwgMHg1ZiwgMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwgMHhlNCwgMHg4YSwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDk0LCAweDkyLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4Y2QsIDB4OGIsIDB4YTIsIDB4MDgsIDB4M2MsIDB4MzAsIDB4MDAsIDB4MDAsIDB4ZjQsIDB4OTQsIDB4MDAsIDB4NWYsCisJMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwgMHhlNCwgMHg4YSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDUwLCAweDAwLCAweDJkLCAweDEwLCAweDMyLCAweGIwLCAweDAxLCAweDAwLCAweDU0LCAweDAwLCAweDJkLCAweGYwLAorCTB4MzgsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NGUsIDB4MDAsIDB4MmQsIDB4ZjAsIDB4MjYsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHg0MCwgMHgwMCwgMHgyZCwgMHhmMiwgMHgwMiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwKKwkweDE0LCAweGIwLCAweDAxLCAweDAwLCAweDMwLCAweDAwLCAweDAwLCAweDEwLCAweDhjLCAweGM4LCAweDAxLCAweDAwLAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4NDYsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4NjgsIDB4MDEsIDB4MmQsIDB4NDQsCisJMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMCwgMHg2OCwgMHhmMiwgMHg4MCwgMHhjOCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDA4LCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDU4LCAweDAxLCAweDAwLCAweDA1LAorCTB4ZTAsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGIsIDB4MzcsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgzNiwgMHhkMCwgMHgwMSwgMHgwMCwgMHg1YywgMHgwMSwgMHgyZSwgMHg0MCwKKwkweDEwLCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA2LCAweDgwLCAweGMwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTIsIDB4ODEsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4ODksIDB4OTQsIDB4MDAsIDB4NDAsCisJMHhlNCwgMHgzMSwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHg0NiwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKKwkweGRlLCAweDhiLCAweGE4LCAweDQwLCAweDIzLCAweDMwLCAweDAwLCAweDAwLCAweGNlLCAweDkyLCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4ZDYsIDB4OTIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHhlYywgMHg4YiwgMHg4MiwgMHg0MSwgMHgyMywgMHg0MCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4MCwgMHgwMCwgMHgxMCwKKwkweDQyLCAweGM5LCAweDAxLCAweDAwLCAweGU5LCAweDhiLCAweDIyLCAweDQwLCAweGUzLCAweDZkLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsCisJMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHhlNiwgMHg4YiwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweGFmLCAweDgyLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LAorCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MzIsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgyMywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgxOSwKKwkweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweGY0LCAweDhiLCAweDIyLCAweDQxLCAweDE5LCAweDdjLCAweDAwLCAweDAwLAorCTB4ZjAsIDB4OGIsIDB4YTMsIDB4MDEsIDB4MGMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4ZjEsIDB4OGIsIDB4MDAsIDB4MDYsCisJMHgwNCwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwNCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweGYzLCAweDhiLCAweDIwLCAweDAyLCAweDM2LCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFiLAorCTB4MDQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ZjcsIDB4OGIsIDB4MDAsIDB4MDIsIDB4ZTAsIDB4YjEsIDB4MDAsIDB4MDAsCisJMHhmNiwgMHg4YiwgMHhhMywgMHgwMSwgMHgwYywgMHg2YywgMHgwMCwgMHgwMCwgMHhmNywgMHg4YiwgMHgwMCwgMHgwNiwKKwkweDA0LCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDA0LCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4NjgsIDB4MDIsIDB4MTYsIDB4OTQsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MGIsCisJMHgxNiwgMHhkOCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2OCwgMHgwOCwgMHgzZSwgMHg5NiwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDFjLCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ2LAorCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4MTksIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCisJMHhmYywgMHg4YiwgMHhhOCwgMHgxMywgMHhlMCwgMHgzMSwgMHgwMCwgMHgwMCwgMHgzMywgMHg4YywgMHgyMiwgMHgwMiwKKwkweDE0LCAweDUwLCAweDAwLCAweDAwLCAweDQ0LCAweDAwLCAweDJkLCAweDAyLCAweDBjLCAweGQwLCAweDAxLCAweDAwLAorCTB4MjMsIDB4OGMsIDB4YTIsIDB4MDIsIDB4MDIsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MGEsIDB4OGMsIDB4MjIsIDB4NWMsCisJMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgyMCwgMHg4MCwgMHgwMCwgMHgwMywgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDA5LCAweDhjLCAweDIyLCAweDQwLCAweGUzLCAweDZkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ3LAorCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCisJMHgwNSwgMHg4YywgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhhZiwgMHg4MiwgMHgwMCwgMHg4OCwKKwkweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLAorCTB4NDQsIDB4MDAsIDB4MmQsIDB4NWMsIDB4MWYsIDB4ODAsIDB4MDEsIDB4MDAsIDB4NDgsIDB4MDAsIDB4MmQsIDB4ZjAsCisJMHgzOCwgMHhiMCwgMHgwMSwgMHgwMCwgMHg0YywgMHgwMCwgMHgyZCwgMHhmMCwgMHgyNiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDM4LCAweDAwLCAweDJmLCAweGYyLCAweDAyLCAweGIwLCAweDAxLCAweDAwLCAweDI0LCAweDhjLCAweDIyLCAweDAxLAorCTB4MTQsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MTcsIDB4OGMsIDB4MjIsIDB4NDYsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NiwgMHgxZiwgMHg4MCwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgyZCwgMHgwMywKKwkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDE2LCAweDhjLCAweDIyLCAweDQwLCAweGUzLCAweDZkLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsCisJMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHgxMywgMHg4YywgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweGFmLCAweDgyLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDM4LCAweDAwLCAweDJmLCAweDA1LAorCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4OTQsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgzOCwgMHgwMCwgMHgyZCwgMHhmMCwgMHg5NiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YywKKwkweGUxLCAweGMxLCAweDAxLCAweDAwLCAweDIwLCAweDAwLCAweDAwLCAweDAzLCAweDQ4LCAweGM5LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MjIsIDB4NGEsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDQsIDB4MDAsIDB4MDAsIDB4MDUsCisJMHhmMCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YSwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDRiLCAweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ3LAorCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YTAsIDB4MDAsIDB4MDAsIDB4YTQsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCisJMHgyMCwgMHg4YywgMHhhOCwgMHg1YywgMHgxZiwgMHgxMCwgMHgwMCwgMHgwMCwgMHgyNCwgMHg4YywgMHgwMCwgMHgwNSwKKwkweDQ4LCAweGIxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweDM4LCAweGMwLCAweDAxLCAweDAwLAorCTB4MmUsIDB4OGMsIDB4MjIsIDB4MDYsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsCisJMHgzMywgMHhjMCwgMHgwMSwgMHgwMCwgMHgyYywgMHg4YywgMHhhMiwgMHgwMiwgMHgzNiwgMHg2YywgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDhmLCAweDBkLCAweDQyLCAweDMxLCAweDAwLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweGY4LAorCTB4MTAsIDB4YzgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWMsIDB4MTEsIDB4ODAsIDB4MDEsIDB4MDAsCisJMHhmMCwgMHgwNywgMHgwMCwgMHg0MCwgMHgzNywgMHg5OCwgMHgwMSwgMHgwMCwgMHhlMiwgMHg4YiwgMHgwMCwgMHhhMSwKKwkweDFhLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweDEwLCAweGMwLCAweDAxLCAweDAwLAorCTB4ZTIsIDB4OGIsIDB4MDAsIDB4MDIsIDB4MzYsIDB4ZDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4MDAsIDB4MjAsIDB4MWMsCisJMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg1NCwgMHgwMCwgMHgyMCwgMHgxMywgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDRlLCAweDAwLCAweDIwLCAweDAxLCAweGU0LCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDIwLCAweDBhLAorCTB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MzgsIDB4OGMsIDB4MDAsIDB4NWYsIDB4MDEsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgzNywgMHgwMCwgMHgyZCwgMHg0NiwgMHgwMSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHhmMywKKwkweDgwLCAweGY0LCAweDAxLCAweDAwLCAweDM3LCAweDhjLCAweGEwLCAweDQzLCAweDgxLCAweDZjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTUsIDB4MDEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MjAsIDB4NDAsCisJMHhlMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgxOSwgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDNlLCAweDhjLCAweDIyLCAweDQwLCAweGUzLCAweDZkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ2LAorCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTksIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCisJMHgzYiwgMHg4YywgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhhZiwgMHg4MiwgMHgwMCwgMHg4OCwKKwkweDFjLCAweGIwLCAweDAwLCAweDAwLCAweGQzLCAweDkyLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4MzAsIDB4ODAsIDB4MDAsIDB4MTAsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4NDUsIDB4OGMsIDB4MjIsIDB4NDAsCisJMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDQyLCAweDhjLCAweGE4LCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4YWYsIDB4ODIsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHg2MCwgMHgwMSwgMHgyZiwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYiwKKwkweGU0LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLCAweDE3LCAweGYwLCAweDAxLCAweDAwLAorCTB4NGEsIDB4OGMsIDB4OTAsIDB4ZjIsIDB4MTYsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCisJMHgxNywgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2NiwgMHgyMCwgMHgxNywgMHhhNCwgMHgwMSwgMHgwMCwKKwkweDMyLCAweDAwLCAweDAwLCAweGE2LCAweDJhLCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYyLAorCTB4MmEsIDB4OTQsIDB4MDEsIDB4MDAsIDB4NGQsIDB4OGMsIDB4NDUsIDB4NDgsIDB4NjEsIDB4MzEsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHhkMCwgMHgwMCwgMHgxZSwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHg1MiwgMHg4YywgMHgyOCwgMHg0MCwKKwkweDA1LCAweDMwLCAweDAwLCAweDAwLCAweDRlLCAweDhjLCAweDIyLCAweDQ4LCAweDc3LCAweDdkLCAweDAwLCAweDAwLAorCTB4NTUsIDB4OGMsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTUsCisJMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHg1ZSwgMHg4YywgMHgyOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDUyLCAweDhjLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFkLCAweDAwLAorCTB4OTIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NWIsIDB4OGMsIDB4MjIsIDB4NDEsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHgwMywgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHg5OSwgMHg5MiwgMHgwMCwgMHhmOCwKKwkweDAwLCAweDMwLCAweDAxLCAweDAwLCAweDU4LCAweDhjLCAweGEyLCAweDQxLCAweDNiLCAweDUwLCAweDAwLCAweDAwLAorCTB4NWYsIDB4OGMsIDB4MDAsIDB4NDksIDB4MDAsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4MDcsIDB4MDAsIDB4MWUsCisJMHgwMCwgMHg4YywgMHgwMSwgMHgwMCwgMHg5OSwgMHg5MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDVmLCAweDhjLCAweDAwLCAweDQ5LCAweDAwLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFkLCAweDQ3LAorCTB4MTksIDB4ODAsIDB4MDEsIDB4MDAsIDB4NjIsIDB4OGMsIDB4MjIsIDB4NWYsIDB4MDEsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHhkNCwgMHg5NSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhiZiwgMHg4NywgMHgwMCwgMHgwMCwKKwkweDgwLCAweGIwLCAweDAwLCAweDAwLCAweDY5LCAweDhjLCAweDIyLCAweDVjLCAweDFmLCAweDdjLCAweDAwLCAweDAwLAorCTB4MjAsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4NjksIDB4OGMsIDB4MjIsIDB4NDAsCisJMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDY2LCAweDhjLCAweGE4LCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4YWYsIDB4ODIsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHg2OSwgMHg4YywgMHg0MCwgMHgwNSwgMHg0OCwgMHgzMSwgMHgwMCwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHgwNywKKwkweDk0LCAweDg5LCAweDAxLCAweDAwLCAweDZmLCAweDhjLCAweDg1LCAweGNhLCAweDk0LCAweDMwLCAweDAwLCAweDAwLAorCTB4ZDQsIDB4OTUsIDB4MTgsIDB4NWMsIDB4MWYsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MGUsIDB4MDAsIDB4MDAsIDB4MGYsCisJMHgxZSwgMHg4YywgMHgwMSwgMHgwMCwgMHhlMCwgMHg4NiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweGY0LCAweDk0LCAweDE4LCAweDAwLCAweDgwLCAweDMwLCAweDAxLCAweDAwLCAweGU0LCAweDhhLCAweDAwLCAweDQ3LAorCTB4MTksIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MTksIDB4ODAsIDB4MDEsIDB4MDAsCisJMHhlNCwgMHg4YSwgMHgyMiwgMHg0NywgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHg5NCwgMHg5MiwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDc2LCAweDhjLCAweGEyLCAweDA4LCAweDgwLCAweDMyLCAweDAwLCAweDAwLAorCTB4ZTQsIDB4OGEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4ODksIDB4OTQsIDB4MDAsIDB4NDAsCisJMHgwZCwgMHgzMCwgMHgwMSwgMHgwMCwgMHg5YywgMHgwMSwgMHgwMCwgMHg0MCwgMHg0NSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweGZmLCAweGZmLCAweDAwLCAweDBiLCAweDk4LCAweDg4LCAweDAxLCAweDAwLCAweDhiLCAweDAwLCAweDJkLCAweDUwLAorCTB4MTcsIDB4ZjAsIDB4MDEsIDB4MDAsIDB4N2MsIDB4OGMsIDB4OTAsIDB4NGMsIDB4MTYsIDB4NDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgxNywgMHhjMCwgMHgwMSwgMHgwMCwgMHg3ZSwgMHg4YywgMHgyMiwgMHg0MywKKwkweGU3LCAweDdkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDQ1LCAweGMxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4NjYsIDB4MjAsIDB4MTcsIDB4YTQsIDB4MDEsIDB4MDAsIDB4NjgsIDB4MDEsIDB4MDAsIDB4NDAsCisJMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHg1YywgMHgwMSwgMHgyZSwgMHhmMiwgMHg4MCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAyLCAweDAwLCAweDYyLCAweDQwLCAweDdlLCAweGNkLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDU3LAorCTB4ODEsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmUsIDB4MTAsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMywgMHgwMCwgMHgwMCwgMHg0MCwgMHhmMCwgMHg4ZCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwKKwkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDU4LCAweDAxLCAweDAwLCAweDA1LCAweGUwLCAweGM5LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsCisJMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHg4OCwgMHg4YywgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweGFmLCAweDgyLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LAorCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4OGMsIDB4OGMsIDB4NDUsIDB4NDgsIDB4NjEsIDB4MzEsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHg1MCwgMHgwMCwgMHgwOCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHg5MiwgMHg4YywgMHgyOCwgMHg0MCwKKwkweDA1LCAweDMwLCAweDAwLCAweDAwLCAweDhkLCAweDhjLCAweDIyLCAweDQ4LCAweDc3LCAweDdkLCAweDAwLCAweDAwLAorCTB4OTksIDB4OTIsIDB4MWQsIDB4MDgsIDB4MDAsIDB4MzAsIDB4MDEsIDB4MDAsIDB4ZTQsIDB4OGEsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhlNCwgMHg4YSwgMHgxZCwgMHg0NywgMHgxOSwgMHg4MCwgMHgwMCwgMHgwMCwKKwkweDM1LCAweDAwLCAweDAwLCAweDQwLCAweDQ3LCAweDk5LCAweDAxLCAweDAwLCAweDAxLCAweDAwLCAweDYzLCAweGYzLAorCTB4ODQsIDB4YzgsIDB4MDEsIDB4MDAsIDB4OTcsIDB4OGMsIDB4YTAsIDB4NDMsIDB4ODUsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg2MywgMHg0MCwgMHg4NSwgMHhiMCwgMHgwMSwgMHgwMCwgMHhhOCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDM3LCAweDAwLCAweDJmLCAweGYwLCAweDI0LCAweGIwLCAweDAxLCAweDAwLAorCTB4MDEsIDB4MDAsIDB4NjMsIDB4ZjMsIDB4ODIsIDB4Y2MsIDB4MDEsIDB4MDAsIDB4YTIsIDB4OGMsIDB4YTIsIDB4NDEsCisJMHg5ZSwgMHgwNiwgMHgwMCwgMHgwMCwgMHhlNCwgMHg4YSwgMHgyMiwgMHg0NCwgMHg4MywgMHg3MCwgMHgwMCwgMHgwMCwKKwkweDM2LCAweDAwLCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDU4LCAweDAwLCAweDNkLCAweDQzLAorCTB4ZTcsIDB4ZTEsIDB4MDEsIDB4MDAsIDB4ZTQsIDB4OGEsIDB4MWYsIDB4ZjAsIDB4MjQsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHhkNCwgMHg5NSwgMHgwMCwgMHg0OCwgMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwgMHhiZiwgMHg4NywgMHgyMywgMHg0MSwKKwkweDgzLCAweDZjLCAweDAwLCAweDAwLCAweGJmLCAweDg3LCAweDAwLCAweDQ3LCAweDgxLCAweGIwLCAweDAwLCAweDAwLAorCTB4NTgsIDB4MDAsIDB4M2QsIDB4NDMsIDB4ODUsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsCisJMHgzNiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHgwMCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDI4LCAweDAwLCAweDAwLCAweDQwLCAweDgzLCAweDk4LCAweDAxLCAweDAwLCAweGMyLCAweDk0LCAweDAwLCAweDQ3LAorCTB4NjEsIDB4MzEsIDB4MDEsIDB4MDAsIDB4YWYsIDB4ODIsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgyZCwgMHgwMywgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwOCwgMHgwMCwgMHgyZCwgMHhmMCwKKwkweDk0LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDhlLCAweGIwLCAweDAxLCAweDAwLAorCTB4OTAsIDB4MDAsIDB4MmQsIDB4ZjAsIDB4MTQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsCisJMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg5MywgMHg4YiwgMHhhMiwgMHg0MCwgMHg4ZiwgMHg3YywgMHgwMCwgMHgwMCwKKwkweGIwLCAweDhjLCAweDIyLCAweDQ3LCAweDhmLCAweDdjLCAweDAwLCAweDAwLCAweDkzLCAweDhiLCAweDAwLCAweDQ4LAorCTB4MTksIDB4OTAsIDB4MDAsIDB4MDAsIDB4MWYsIDB4OGQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgzNiwgMHgwMCwgMHgyZCwgMHg1ZCwgMHgwNSwgMHhiNCwgMHgwMSwgMHgwMCwgMHgzNywgMHgwMCwgMHgyZCwgMHhmMywKKwkweDgwLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYzLCAweDhlLCAweGIwLCAweDAxLCAweDAwLAorCTB4NWMsIDB4MDAsIDB4M2QsIDB4NDMsIDB4ODEsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4YTgsIDB4MDAsIDB4MmQsIDB4ZjAsCisJMHg5NCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHgyNCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDIwLCAweDAwLCAweDAwLCAweDEwLCAweDg2LCAweGRjLCAweDAxLCAweDAwLCAweDQwLCAweDgwLCAweDAwLCAweDAzLAorCTB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4OWIsIDB4OTEsIDB4MDAsIDB4NGEsIDB4ZjAsIDB4MzEsIDB4MDEsIDB4MDAsCisJMHgzNiwgMHgwMCwgMHgyZiwgMHg1YywgMHgxZiwgMHg5MCwgMHgwMSwgMHgwMCwgMHhiZSwgMHg4YywgMHhhMiwgMHg1MCwKKwkweDhmLCAweDUwLCAweDAwLCAweDAwLCAweDM0LCAweDAwLCAweDIwLCAweDQwLCAweGUxLCAweGIxLCAweDAxLCAweDAwLAorCTB4ZTQsIDB4OGEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjMsIDB4NDEsCisJMHg4MSwgMHhjMCwgMHgwMSwgMHgwMCwgMHhjMSwgMHg4YywgMHhhMCwgMHg0MywgMHg4MSwgMHg2YywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDYzLCAweDQwLCAweDgxLCAweGIwLCAweDAxLCAweDAwLCAweDM3LCAweDAwLCAweDIwLCAweDQ3LAorCTB4ZTYsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZTQsIDB4OGEsIDB4MjIsIDB4NDcsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0NywgMHgwYywgMHhmNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZiwKKwkweDhmLCAweDg0LCAweDAxLCAweDAwLCAweGQ2LCAweDhjLCAweDIyLCAweDQ3LCAweDBjLCAweDZjLCAweDAwLCAweDAwLAorCTB4NTgsIDB4MDAsIDB4M2QsIDB4NDMsIDB4ODEsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4ZDYsIDB4OGMsIDB4MWYsIDB4ZjAsCisJMHgyNCwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1YywgMHgxZiwgMHg4MCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDgwLCAweDAwLCAweDEwLCAweDQyLCAweGM5LCAweDAxLCAweDAwLCAweGNmLCAweDhjLCAweDIyLCAweDQwLAorCTB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHhjYywgMHg4YywgMHhhOCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweGFmLCAweDgyLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAorCTB4Y2YsIDB4OGMsIDB4NDIsIDB4NDAsIDB4MDUsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsCisJMHg5MywgMHg5MywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYSwgMHg1ZCwgMHg2OSwgMHg5MywgMHgwMSwgMHgwMCwKKwkweGQ0LCAweDhjLCAweDIzLCAweDQxLCAweDBkLCAweDZjLCAweDAwLCAweDAwLCAweGIxLCAweDhjLCAweDAwLCAweDA1LAorCTB4NDgsIDB4YjEsIDB4MDAsIDB4MDAsIDB4ZDQsIDB4OTUsIDB4MDAsIDB4MDUsIDB4NDgsIDB4MzEsIDB4MDEsIDB4MDAsCisJMHhiZiwgMHg4NywgMHgwMCwgMHg0OCwgMHg4MSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhlNCwgMHg4YSwgMHgyMiwgMHg0MCwKKwkweDhmLCAweDZjLCAweDAwLCAweDAwLCAweGY0LCAweDk0LCAweDAwLCAweDVmLCAweDgxLCAweDMwLCAweDAxLCAweDAwLAorCTB4ZTQsIDB4OGEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4YTIsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMywgMHg4NCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweGE2LCAweDAwLCAweDJkLCAweDQ5LCAweDE5LCAweDkwLCAweDAxLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweGYyLAorCTB4ODAsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4YjgsIDB4MDAsIDB4MmQsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmMiwgMHg4MCwgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgyLCAweGY4LCAweDAxLCAweDAwLCAweDE5LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweDk4LCAweDAxLCAweDAwLAorCTB4ZTUsIDB4OGMsIDB4YTAsIDB4NDAsIDB4ODIsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MmMsIDB4MDEsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHg5OCwgMHgwMSwgMHgwMCwgMHhlNSwgMHg4YywgMHhhMywgMHg0MCwgMHg4MiwgMHg2YywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDgwLCAweGIwLCAweDAxLCAweDAwLCAweGU3LCAweDhjLCAweDIwLCAweDRjLAorCTB4ODUsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ODUsIDB4YzAsIDB4MDEsIDB4MDAsCisJMHg4NiwgMHgwMCwgMHgyMCwgMHg0MCwgMHhlNCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhhMiwgMHgwMCwgMHgyMCwgMHg0MiwKKwkweGU2LCAweGIxLCAweDAxLCAweDAwLCAweGU0LCAweDhhLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4ODMsIDB4OTQsIDB4MDAsIDB4NTAsIDB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4ZTQsIDB4OGEsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHg4MCwgMHgwMCwgMHgwMywgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDA0LCAweDAwLCAweDIyLCAweGYwLCAweDgwLCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4OGQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YzYsIDB4OTUsIDB4MDAsIDB4NDAsIDB4ODcsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHhiMCwgMHgwMCwgMHgyZiwgMHg1YywgMHgxZiwgMHg5MCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2MCwgMHhmMCwKKwkweDgwLCAweGMwLCAweDAxLCAweDAwLCAweGY0LCAweDk0LCAweDAwLCAweDVmLCAweDgxLCAweDMwLCAweDAxLCAweDAwLAorCTB4ZTQsIDB4OGEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhlNCwgMHg4YSwgMHgyMiwgMHg0NiwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwKKwkweGEwLCAweDAwLCAweDAwLCAweDQwLCAweDQ3LCAweDk5LCAweDAxLCAweDAwLCAweDAxLCAweDAwLCAweDYyLCAweGYyLAorCTB4OTYsIDB4Y2MsIDB4MDEsIDB4MDAsIDB4ZTQsIDB4OGEsIDB4YTYsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHhmNCwgMHg5NCwgMHgwMCwgMHg0YSwgMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwgMHhjOSwgMHg5NCwgMHgwMCwgMHg0NiwKKwkweDk1LCAweDMwLCAweDAxLCAweDAwLCAweGU0LCAweDhhLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4ZTQsIDB4OGEsIDB4MjIsIDB4NDksIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4ODYsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMSwgMHgwMCwgMHg2MiwgMHhmMiwgMHg4MCwgMHhjYywgMHgwMSwgMHgwMCwKKwkweGU0LCAweDhhLCAweGE2LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweGY0LCAweDk0LCAweDAwLCAweDRhLAorCTB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4YzksIDB4OTQsIDB4MDAsIDB4NDcsIDB4OTUsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHhlNCwgMHg4YSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgyYywgMHg5MiwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGU0LCAweDhhLCAweDAwLCAweDVjLCAweDFmLCAweDkwLCAweDAwLCAweDAwLAorCTB4ZTQsIDB4OGEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4ZTQsIDB4OGEsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhiYSwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDAxLCAweDAwLCAweDYyLCAweGYyLCAweDgwLCAweGM4LCAweDAxLCAweDAwLCAweDBiLCAweDhkLCAweDkwLCAweDQwLAorCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4NjIsIDB4NDAsIDB4ODEsIDB4OTgsIDB4MDEsIDB4MDAsCisJMHhhNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwgMHhlNCwgMHg4YSwgMHgyMiwgMHg0MCwKKwkweGU1LCAweDZkLCAweDAwLCAweDAwLCAweGU0LCAweDhhLCAweDAwLCAweDQxLCAweGU1LCAweGMxLCAweDAwLCAweDAwLAorCTB4ODMsIDB4OTQsIDB4MDAsIDB4NGQsIDB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4ZTQsIDB4OGEsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg1YywgMHgwMCwgMHgwMCwgMHg0MCwgMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDA0LCAweDAwLCAweDIyLCAweGYwLCAweDk2LCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4ZTEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0YiwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDhkLCAweGIwLCAweDAxLCAweDAwLCAweGM2LCAweDk1LCAweDAwLCAweDQwLCAweDg3LCAweDMwLCAweDAxLCAweDAwLAorCTB4OGIsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDcsIDB4OTksIDB4MDEsIDB4MDAsIDB4MWIsIDB4OGQsIDB4ODAsIDB4ZjMsCisJMHg5NiwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhlNywgMHg4MSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ3LCAweDE5LCAweDkwLCAweDAxLCAweDAwLCAweGU0LCAweDhhLCAweDAwLCAweDVjLAorCTB4MWYsIDB4OTAsIDB4MDAsIDB4MDAsIDB4MzQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDUsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgwMSwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgxMSwgMHgwMCwgMHg0MCwKKwkweGU1LCAweDk5LCAweDAxLCAweDAwLCAweDk0LCAweDkyLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4MzAsIDB4OGQsIDB4YTIsIDB4MDgsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MzcsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMywgMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDYzLCAweDUxLCAweDgzLCAweGQwLCAweDAxLCAweDAwLCAweDM0LCAweDAwLCAweDAwLCAweDQwLAorCTB4NDcsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDEsIDB4MDAsIDB4NjMsIDB4ZjMsIDB4ODQsIDB4Y2MsIDB4MDEsIDB4MDAsCisJMHgyOCwgMHg4ZCwgMHg5ZiwgMHg0MiwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2MywgMHg0MiwKKwkweDg1LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweDAzLCAweGYwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MmEsIDB4OGQsIDB4MzcsIDB4NWMsCisJMHg2MSwgMHgzMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYiwgMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDJiLCAweDhkLCAweGE4LCAweDRiLCAweDE5LCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MmQsIDB4OGQsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgxNCwgMHg4NywgMHgxNywgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMywKKwkweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDkwLCAweDAwLCAweDJkLCAweGYwLCAweDk0LCAweGIwLCAweDAxLCAweDAwLAorCTB4YWMsIDB4MDAsIDB4MmQsIDB4ZjAsIDB4MzAsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MzUsIDB4MDAsIDB4MmQsIDB4ZjAsCisJMHgyOCwgMHhiMCwgMHgwMSwgMHgwMCwgMHg1OCwgMHgwMCwgMHgzZSwgMHg0MywgMHhlNywgMHhlMSwgMHgwMSwgMHgwMCwKKwkweDAxLCAweDAwLCAweDAwLCAweDE4LCAweGYwLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRhLAorCTB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MzgsIDB4MDAsIDB4MjAsIDB4MDAsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgzYywgMHgwMCwgMHgyMCwgMHgxYiwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgyMCwgMHg0MCwKKwkweGUxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDJiLCAweGIwLCAweDAxLCAweDAwLAorCTB4ZDgsIDB4OTQsIDB4MDAsIDB4NDAsIDB4MGQsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsCisJMHgxNiwgMHhjMCwgMHgwMSwgMHgwMCwgMHgzZiwgMHg4ZCwgMHhhMCwgMHgxNCwgMHgxNiwgMHg0NCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDE3LCAweGMwLCAweDAxLCAweDAwLCAweDBlLCAweDAwLCAweDAwLCAweGEyLAorCTB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4ZjgsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHhiMCwgMHgwMCwgMHgyZCwgMHgxNCwgMHhmOCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgxMCwgMHg1MCwgMHgwMCwgMHg0MCwKKwkweDg3LCAweDk4LCAweDAxLCAweDAwLCAweDQ4LCAweDhkLCAweDIyLCAweDRhLCAweDE5LCAweDdjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MzAsIDB4MDAsIDB4NDMsIDB4ODYsIDB4YzgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MzAsIDB4MDAsIDB4MGIsCisJMHgxNiwgMHhjOCwgMHgwMSwgMHgwMCwgMHg0OCwgMHg4ZCwgMHhhNCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDE3LCAweGMwLCAweDAxLCAweDAwLCAweDAxLCAweDAwLCAweDZlLCAweDQzLAorCTB4ODYsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MGYsIDB4OTUsIDB4MDAsIDB4MzAsIDB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHg0YywgMHg4ZCwgMHhhMCwgMHg0MSwgMHgxNywgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKKwkweDE3LCAweGMwLCAweDAxLCAweDAwLCAweDUzLCAweDhkLCAweDIyLCAweDRhLCAweDE5LCAweDdjLCAweDAwLCAweDAwLAorCTB4MDgsIDB4MDAsIDB4MDAsIDB4YTIsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4Y2MsIDB4MDAsIDB4MmQsIDB4YWIsCisJMHhmOSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhYiwgMHgxNywgMHhjMCwgMHgwMSwgMHgwMCwKKwkweDUyLCAweDhkLCAweGEwLCAweGYwLCAweDE2LCAweDQ0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAorCTB4MTcsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjQsIDB4ZjAsIDB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHg5MCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0NSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2MCwgMHg0MSwKKwkweDMxLCAweGMwLCAweDAxLCAweDAwLCAweGJjLCAweDAwLCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLAorCTB4NTksIDB4OGQsIDB4MDYsIDB4MGMsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4YTAsIDB4MDAsIDB4MjAsIDB4ZjIsCisJMHhlNCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwOSwgMHg0NiwgMHgxOSwgMHgxMCwgMHgwMCwgMHgwMCwKKwkweDljLCAweDAxLCAweDAwLCAweDQwLCAweDQ1LCAweDk5LCAweDAxLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweDBiLAorCTB4OTgsIDB4ODgsIDB4MDEsIDB4MDAsIDB4OGIsIDB4MDAsIDB4MmQsIDB4NTAsIDB4MTcsIDB4ZjAsIDB4MDEsIDB4MDAsCisJMHg1ZSwgMHg4ZCwgMHg5MCwgMHg0YywgMHgxNiwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKKwkweDE3LCAweGMwLCAweDAxLCAweDAwLCAweDYwLCAweDhkLCAweDIyLCAweDQzLCAweGU3LCAweDdkLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4NDUsIDB4YzEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjYsIDB4MjAsCisJMHgxNywgMHhhNCwgMHgwMSwgMHgwMCwgMHg2OCwgMHgwMSwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDVjLCAweDAxLCAweDJlLCAweGYyLCAweDgwLCAweGIwLCAweDAxLCAweDAwLCAweDAyLCAweDAwLCAweDYyLCAweDQwLAorCTB4N2UsIDB4Y2QsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTcsIDB4ODEsIDB4YzAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgyZSwgMHgxMCwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMywgMHgwMCwgMHgwMCwgMHg0MCwKKwkweGYwLCAweDhkLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweGYwLCAweGIxLCAweDAxLCAweDAwLAorCTB4NTgsIDB4MDEsIDB4MDAsIDB4MDUsIDB4ZTAsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsCisJMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDZhLCAweDhkLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweGFmLCAweDgyLCAweDAwLCAweDg4LAorCTB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg2ZSwgMHg4ZCwgMHg0NSwgMHg0OCwgMHg2MSwgMHgzMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHgwMCwgMHgwOCwKKwkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDZmLCAweDhkLCAweGE4LCAweDQwLCAweDA1LCAweDMwLCAweDAwLCAweDAwLAorCTB4MzUsIDB4MDAsIDB4MWQsIDB4NDAsIDB4NDcsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDEsIDB4MDAsIDB4NjMsIDB4ZjMsCisJMHg4NCwgMHhjOCwgMHgwMSwgMHgwMCwgMHg3NSwgMHg4ZCwgMHhhMCwgMHg0MywgMHg4NSwgMHg2YywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDYzLCAweDQwLCAweDg1LCAweGIwLCAweDAxLCAweDAwLCAweDM3LCAweDAwLCAweDAwLCAweDQwLAorCTB4NDcsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDEsIDB4MDAsIDB4NjMsIDB4ZjMsIDB4ODIsIDB4Y2MsIDB4MDEsIDB4MDAsCisJMHg4YiwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwKKwkweGU3LCAweDkxLCAweDAxLCAweDAwLCAweGY0LCAweDk0LCAweDAwLCAweDVmLCAweDgxLCAweDMwLCAweDAxLCAweDAwLAorCTB4ZTQsIDB4OGEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MzcsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwgMHgzNiwgMHg5MywgMHgwMCwgMHhmMywgMHg5NCwgMHgzMCwgMHgwMSwgMHgwMCwKKwkweDFmLCAweDhkLCAweDIyLCAweDRhLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweGJhLCAweDhiLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MzcsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDcsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgzNiwgMHg5MywgMHgwMCwgMHhmMywgMHg5NCwgMHgzMCwgMHgwMSwgMHgwMCwgMHg4YSwgMHg4YiwgMHgyMiwgMHg0YSwKKwkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweGJhLCAweDhiLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MzYsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmIsCisJMHgxMiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwZiwgMHgwMCwgMHgwMCwgMHhmMywgMHg5MCwgMHg4OCwgMHgwMSwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweGYzLCAweDBjLCAweGY0LCAweDAxLCAweDAwLCAweGI0LCAweDhiLCAweDIyLCAweDA2LAorCTB4OTAsIDB4NmMsIDB4MDAsIDB4MDAsIDB4NWMsIDB4MDAsIDB4M2QsIDB4NDMsIDB4MTMsIDB4ZTAsIDB4MDEsIDB4MDAsCisJMHhhOCwgMHgwMCwgMHgyZCwgMHhmMCwgMHg5NCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgzNywgMHgwMCwgMHgyZiwgMHhmMCwKKwkweDI0LCAweGIwLCAweDAxLCAweDAwLCAweDM2LCAweDAwLCAweDJhLCAweDUwLCAweGU3LCAweGQxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4NjMsIDB4NDEsIDB4MTMsIDB4YzAsIDB4MDEsIDB4MDAsIDB4OGYsIDB4OGQsIDB4YTAsIDB4NDMsCisJMHgxMywgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhlNywgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDk5LCAweDkxLCAweDAwLCAweDEwLCAweDg2LCAweDMwLCAweDAxLCAweDAwLCAweGFmLCAweDgyLCAweDAwLCAweDg4LAorCTB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4OTEsIDB4OGQsIDB4NDIsIDB4MDUsIDB4NDgsIDB4MzEsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg5MywgMHg5MywgMHgwMSwgMHgwMCwgMHhiNCwgMHg4YiwgMHgxYSwgMHg1ZCwKKwkweDY5LCAweDkzLCAweDAwLCAweDAwLCAweDM2LCAweDAwLCAweDJkLCAweDEwLCAweDg2LCAweGIwLCAweDAxLCAweDAwLAorCTB4NWMsIDB4MDAsIDB4M2QsIDB4NDMsIDB4ZTcsIDB4ZTEsIDB4MDEsIDB4MDAsIDB4YTgsIDB4MDAsIDB4MmQsIDB4ZjAsCisJMHg5NCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgzNSwgMHgwMCwgMHgyZiwgMHhmMCwgMHgyNCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAxLCAweDAwLCAweDZiLCAweGZiLCAweDg0LCAweGM4LCAweDAxLCAweDAwLCAweDljLCAweDhkLCAweGEwLCAweDQzLAorCTB4ODUsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MzUsIDB4MDAsIDB4MjAsIDB4NDAsIDB4ZTcsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMSwgMHgwMCwgMHg2MywgMHhmMywKKwkweDEyLCAweGM4LCAweDAxLCAweDAwLCAweDlmLCAweDhkLCAweGEwLCAweDQzLCAweDEzLCAweDZjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZTcsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ODAsIDB4MDAsIDB4MDMsCisJMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHg5YiwgMHg5MSwgMHgwMCwgMHg0YSwgMHhmMCwgMHgzMSwgMHgwMSwgMHgwMCwKKwkweGFmLCAweDgyLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweGEyLCAweDhkLCAweDQyLCAweDA1LAorCTB4NDgsIDB4MzEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4OTMsIDB4OTMsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgxYSwgMHg1ZCwgMHg2OSwgMHg5MywgMHgwMSwgMHgwMCwgMHgzNywgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDQ3LCAweDk5LCAweDAxLCAweDAwLCAweDExLCAweDAwLCAweDYzLCAweGYzLCAweDgyLCAweGNjLCAweDAxLCAweDAwLAorCTB4OWIsIDB4OGMsIDB4MjIsIDB4NDEsIDB4OWUsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MzUsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHg1OCwgMHgwMCwgMHgzZCwgMHg0MywgMHhlNywgMHhlMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDM2LCAweGIwLCAweDAxLCAweDAwLCAweGE1LCAweDhjLCAweDAwLCAweGYwLAorCTB4MDAsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NWUsIDB4MDEsIDB4MmQsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHhhZCwgMHg4ZCwgMHg2NSwgMHhmMiwgMHgxMiwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5OSwgMHgzZiwgMHg0MiwKKwkweDEzLCAweGYwLCAweDAxLCAweDAwLCAweGIyLCAweDhkLCAweDIyLCAweDQ3LCAweGU3LCAweDdkLCAweDAwLCAweDAwLAorCTB4ZjUsIDB4ODIsIDB4NzUsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4YWMsIDB4OGQsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywgMHhlNywgMHg5MSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDc1LCAweDQyLCAweDE5LCAweDkwLCAweDAxLCAweDAwLCAweDc1LCAweDAwLCAweDAwLCAweDQwLAorCTB4NjEsIDB4OTksIDB4MDEsIDB4MDAsIDB4YjQsIDB4OGQsIDB4YTgsIDB4YjEsIDB4MGMsIDB4MzAsIDB4MDAsIDB4MDAsCisJMHgxZiwgMHg5NCwgMHgwMCwgMHgxMCwgMHg5NCwgMHgzMCwgMHgwMSwgMHgwMCwgMHhhZiwgMHg4MiwgMHgwMCwgMHg4OCwKKwkweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDVlLCAweDAxLCAweDJlLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLAorCTB4YzAsIDB4YTgsIDB4M2QsIDB4NDYsIDB4MGQsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg5NywgMHhiMCwgMHgwMSwgMHgwMCwgMHhiZSwgMHg4ZCwgMHgyMiwgMHg0MCwgMHhlMSwgMHg2ZCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAyLCAweDQxLCAweDk3LCAweDQwLCAweDAwLCAweDAwLCAweGJiLCAweDhkLCAweDAwLCAweDUwLAorCTB4NDMsIDB4YzEsIDB4MDAsIDB4MDAsIDB4Y2EsIDB4OGQsIDB4MjIsIDB4NGIsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg2MiwgMHg0YiwgMHgxMiwgMHg5NCwgMHgwMSwgMHgwMCwgMHgwOSwgMHgwMCwgMHgwMCwgMHgwNywKKwkweDk2LCAweGU0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE3LCAweDk3LCAweGMwLCAweDAxLCAweDAwLAorCTB4MzAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4OTQsIDB4YzgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4NGEsCisJMHg0NCwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDVlLCAweDAxLCAweDAwLCAweDRiLCAweGYwLCAweGM5LCAweDAxLCAweDAwLCAweDVlLCAweDAxLCAweDAwLCAweDA1LAorCTB4ZTAsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgyMCwgMHgwMCwgMHgwMCwgMHg0YSwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHhjOCwgMHg4ZCwgMHhhOCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDEwLCAweDQ0LCAweGM5LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDksCisJMHg5NiwgMHhlNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2OCwgMHhhOCwgMHg5NywgMHhjMCwgMHgwMSwgMHgwMCwKKwkweGQ0LCAweDAwLCAweDAwLCAweDA1LCAweGUwLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LAorCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHhkMCwgMHg4ZCwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhhZiwgMHg4MiwgMHgwMCwgMHg4OCwKKwkweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDk5LCAweDNmLCAweDQyLCAweDEzLCAweGYwLCAweDAxLCAweDAwLAorCTB4ZDQsIDB4OGQsIDB4NjUsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4M2YsIDB4MDAsIDB4MDAsIDB4ZjMsCisJMHg5NiwgMHg4OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhlNywgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDc1LCAweDU1LCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA2LAorCTB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZDgsIDB4OGQsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHhkZCwgMHg4ZCwgMHgyMiwgMHg0YiwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YiwKKwkweDYyLCAweGIxLCAweDAxLCAweDAwLCAweGRiLCAweDhkLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4OTcsIDB4MTMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OTYsCisJMHg5NywgMHhiMCwgMHgwMSwgMHgwMCwgMHhlMywgMHg4ZCwgMHgyMCwgMHgwOSwgMHg5NiwgMHg2YywgMHgwMCwgMHgwMCwKKwkweGUzLCAweDhkLCAweDFmLCAweDA5LCAweDk2LCAweDI0LCAweDAwLCAweDAwLCAweGY1LCAweDgyLCAweDAwLCAweDg4LAorCTB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZGUsIDB4OGQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHg4MywgMHg5NCwgMHgwMCwgMHg1NywgMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwgMHhjZiwgMHg4YSwgMHgwMCwgMHgwNSwKKwkweDQ4LCAweGIxLCAweDAwLCAweDAwLCAweDJlLCAweDAwLCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLAorCTB4ZTksIDB4OGQsIDB4MjIsIDB4ZjMsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ODMsIDB4OTQsIDB4MDAsIDB4NDIsCisJMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwgMHgxNCwgMHg4NywgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweGY0LCAweDk0LCAweDAwLCAweDUyLCAweDgxLCAweDMwLCAweDAxLCAweDAwLCAweGNmLCAweDhhLCAweDAwLCAweDQyLAorCTB4MTksIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODMsIDB4OTQsIDB4MDAsIDB4M2EsIDB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHhmNCwgMHg5NCwgMHgwMCwgMHg1MiwgMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwgMHhjZiwgMHg4YSwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDA1LCAweGIwLCAweDAxLCAweDAwLAorCTB4OTYsIDB4OTMsIDB4MDAsIDB4NDAsIDB4OTUsIDB4MzAsIDB4MDEsIDB4MDAsIDB4Y2YsIDB4OGEsIDB4MjIsIDB4NDAsCisJMHg5NSwgMHg2YywgMHgwMCwgMHgwMCwgMHhmNCwgMHg4ZCwgMHhhMiwgMHg0MCwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwKKwkweDk5LCAweDkyLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDE0LCAweDg3LCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmMiwgMHgwMiwgMHhiMCwgMHgwMSwgMHgwMCwgMHg0MSwgMHg5MywgMHgwMCwgMHg1MiwKKwkweDk1LCAweDMwLCAweDAxLCAweDAwLCAweDQ4LCAweDkzLCAweDAwLCAweDRiLCAweDAyLCAweGIwLCAweDAwLCAweDAwLAorCTB4MTQsIDB4ODcsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4N2QsIDB4OTUsIDB4MDAsIDB4NDAsCisJMHg5NSwgMHgzMCwgMHgwMSwgMHgwMCwgMHhmZiwgMHg4ZCwgMHhhMiwgMHgwOCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDE0LCAweDg3LCAweDIyLCAweDQyLCAweDE5LCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRiLAorCTB4MTksIDB4OTAsIDB4MDEsIDB4MDAsIDB4ODMsIDB4OTQsIDB4MDAsIDB4M2EsIDB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHgxNCwgMHg4NywgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyMywgMHgwMCwgMHhhNiwKKwkweDE2LCAweGIwLCAweDAxLCAweDAwLCAweDAyLCAweDhlLCAweDgzLCAweDFlLCAweDgwLCAweDMyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDgsIDB4MDAsIDB4MGIsIDB4MTYsIDB4ZGMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgyYSwgMHhjMCwgMHgwMSwgMHgwMCwgMHhjYywgMHg5NCwgMHgwMCwgMHgwOCwgMHg4MCwgMHgzMCwgMHgwMSwgMHgwMCwKKwkweDA2LCAweDhlLCAweDAwLCAweDVlLCAweDE3LCAweDkwLCAweDAwLCAweDAwLCAweGVkLCAweDk0LCAweDAwLCAweDQzLAorCTB4NjEsIDB4MzEsIDB4MDEsIDB4MDAsIDB4YTcsIDB4OTEsIDB4MDAsIDB4NDAsIDB4OGQsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHhkNCwgMHg5NCwgMHgwMCwgMHgwNywgMHgxNiwgMHgxNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgxMCwKKwkweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDBlLCAweDhlLCAweDIyLCAweDQwLCAweGUzLCAweDZkLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsCisJMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHgwYiwgMHg4ZSwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweGFmLCAweDgyLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDc1LCAweDk0LCAweDAwLCAweDVlLAorCTB4MDUsIDB4MTAsIDB4MDEsIDB4MDAsIDB4OTksIDB4OTIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHgxMiwgMHg4ZSwgMHgyMiwgMHgwOSwgMHg4MCwgMHgzMCwgMHgwMCwgMHgwMCwgMHhmNCwgMHg5NCwgMHgwMCwgMHg0MCwKKwkweDEzLCAweDMwLCAweDAxLCAweDAwLCAweGQ0LCAweDhhLCAweDAwLCAweDA1LCAweDQ4LCAweGIxLCAweDAwLCAweDAwLAorCTB4YzYsIDB4OTMsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4Y2YsIDB4OGEsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YSwgMHgxZiwgMHg5MCwgMHgwMSwgMHgwMCwKKwkweDE5LCAweDhlLCAweDIyLCAweDQzLCAweDNkLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LAorCTB4MTksIDB4OTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4M2QsIDB4ODAsIDB4MDEsIDB4MDAsCisJMHgxYSwgMHg4ZSwgMHgwMCwgMHg0MiwgMHgxOSwgMHg5MCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwMCwgMHgyZCwgMHg0NSwKKwkweDFmLCAweDkwLCAweDAxLCAweDAwLCAweDc1LCAweDhlLCAweDgzLCAweDFlLCAweDgwLCAweDMyLCAweDAwLCAweDAwLAorCTB4NzUsIDB4OGUsIDB4MDAsIDB4NDQsIDB4MTksIDB4OTAsIDB4MDAsIDB4MDAsIDB4OGMsIDB4OTIsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgyZCwgMHg4ZSwgMHhhMiwgMHgwOCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDI5LCAweDhlLCAweGEyLCAweDQyLCAweDE5LCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDgyLCAweDAwLCAweDAyLAorCTB4MDQsIDB4ZGMsIDB4MDEsIDB4MDAsIDB4YTAsIDB4OTgsIDB4MDAsIDB4NDAsIDB4NDcsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgzMCwgMHgwNSwgMHgwMCwgMHg0MSwgMHg4OSwgMHgzMCwgMHgwMSwgMHgwMCwgMHgyNiwgMHg4ZSwgMHhhMiwgMHg0MSwKKwkweDE5LCAweDdjLCAweDAwLCAweDAwLCAweDk5LCAweDkyLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4MTQsIDB4ODcsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4NDEsIDB4OTMsIDB4MDAsIDB4MTUsCisJMHg5NCwgMHgzMCwgMHgwMSwgMHgwMCwgMHg0OCwgMHg5MywgMHgwMCwgMHg0YiwgMHgwMiwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDE0LCAweDg3LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGM2LCAweDkzLCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGIsIDB4MTksIDB4OTAsIDB4MDEsIDB4MDAsCisJMHg4MywgMHg5NCwgMHgwMCwgMHgzYSwgMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwgMHgxNCwgMHg4NywgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDMwLCAweDhlLCAweDIyLCAweDQyLCAweDE5LCAweDdjLCAweDAwLCAweDAwLAorCTB4YzYsIDB4OTMsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MzEsIDB4OGUsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg5NiwgMHg5MywgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDVkLCAweDhlLCAweDIyLCAweDQxLCAweDE5LCAweDdjLCAweDAwLCAweDAwLCAweGMwLCAweDAwLCAweDAwLCAweDE1LAorCTB4OTgsIDB4YzgsIDB4MDEsIDB4MDAsIDB4NWQsIDB4OGUsIDB4YTAsIDB4MGIsIDB4OTksIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgzMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg4MCwgMHhjOCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHg0MCwKKwkweDQ0LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLCAweGYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsCisJMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDM5LCAweDhlLCAweGE4LCAweDAwLCAweGUwLCAweDMxLCAweDAwLCAweDAwLCAweGFmLCAweDgyLCAweDAwLCAweDg4LAorCTB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHhjMCwgMHgwMCwgMHgwMCwgMHgxNSwgMHg5OCwgMHhjOCwgMHgwMSwgMHgwMCwgMHgzMCwgMHgwMCwgMHgyZSwgMHgwYiwKKwkweDk5LCAweGQwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDZhLCAweDUwLCAweDk5LCAweGMwLCAweDAxLCAweDAwLAorCTB4YzAsIDB4MDAsIDB4NjIsIDB4MDEsIDB4ODAsIDB4Y2MsIDB4MDEsIDB4MDAsIDB4MGMsIDB4ODAsIDB4MDAsIDB4MDMsCisJMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgyZCwgMHgwMCwgMHgyZCwgMHhmMCwgMHgyMiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDRjLCAweDgwLCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVjLAorCTB4MjMsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ZDQsIDB4MDAsIDB4M2YsIDB4NDEsIDB4ZTcsIDB4ZTEsIDB4MDEsIDB4MDAsCisJMHgwYiwgMHgwMCwgMHgwMCwgMHgxMSwgMHhlNCwgMHhmNSwgMHgwMSwgMHgwMCwgMHgyZiwgMHgwMCwgMHgyMCwgMHg0NywKKwkweGU3LCAweGI1LCAweDAxLCAweDAwLCAweDRhLCAweDhlLCAweDIzLCAweDBiLCAweDgxLCAweDZjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGYsIDB4ZTUsIDB4OTEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsCisJMHg4MCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYiwgMHgwMywgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDE1LCAweDAyLCAweGQwLCAweDAxLCAweDAwLCAweGNjLCAweDk0LCAweDAwLCAweDAwLAorCTB4MmEsIDB4NDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHg0ZiwgMHg4ZSwgMHhhOCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweGFmLCAweDgyLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAorCTB4OTksIDB4OTIsIDB4MDAsIDB4MDUsIDB4NDgsIDB4MzEsIDB4MDEsIDB4MDAsIDB4YzAsIDB4MDAsIDB4MDAsIDB4MDEsCisJMHg4MCwgMHhjZSwgMHgwMSwgMHgwMCwgMHg1YiwgMHg4ZSwgMHgyNiwgMHgxMSwgMHgwMCwgMHgzMCwgMHgwMCwgMHgwMCwKKwkweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDJhLCAweGM4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LAorCTB4ODAsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4ODAsIDB4YzAsIDB4MDEsIDB4MDAsCisJMHhjMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg5OSwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwKKwkweDk4LCAweGQwLCAweDAxLCAweDAwLCAweGNjLCAweDk0LCAweDAwLCAweDRjLCAweDAyLCAweDMwLCAweDAxLCAweDAwLAorCTB4YzAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDMsIDB4OTgsIDB4MDEsIDB4MDAsIDB4NjIsIDB4OGUsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMCwgMHgyZiwgMHgwOCwgMHg4MCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweGMwLCAweDAwLCAweDAwLCAweDE1LCAweGY0LCAweGM5LCAweDAxLCAweDAwLCAweGMwLCAweDAwLCAweDAwLCAweDAxLAorCTB4ZTQsIDB4Y2QsIDB4MDEsIDB4MDAsIDB4YzAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDMsIDB4OTgsIDB4MDEsIDB4MDAsCisJMHhjYywgMHg5NCwgMHgwMCwgMHgwMCwgMHgyYSwgMHg0MCwgMHgwMSwgMHgwMCwgMHg2NywgMHg4ZSwgMHgyMiwgMHg0NCwKKwkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweGFjLCAweDAwLCAweDJmLCAweDQwLCAweDEzLCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4ZTAsIDB4YzEsIDB4MDEsIDB4MDAsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwgMHg2OCwgMHg4ZSwgMHgwMCwgMHgwMSwgMHhlMCwgMHhkMSwgMHgwMCwgMHgwMCwKKwkweGE3LCAweDkxLCAweDAwLCAweDQwLCAweDhkLCAweDMwLCAweDAxLCAweDAwLCAweDgwLCAweDYzLCAweDAwLCAweGE2LAorCTB4MTYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ZDQsIDB4OTQsIDB4MDAsIDB4MDcsIDB4MTYsIDB4MTQsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHgxMCwgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHg3MCwgMHg4ZSwgMHgyMiwgMHg0MCwKKwkweGUzLCAweDZkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQzLCAweDYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4NmQsIDB4OGUsIDB4YTgsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhhZiwgMHg4MiwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDc1LCAweDk0LCAweDAwLCAweDVlLCAweDA1LCAweDEwLCAweDAxLCAweDAwLCAweDczLCAweDhlLCAweDIyLCAweDA5LAorCTB4ODAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4ZjQsIDB4OTQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHhjZiwgMHg4YSwgMHgwMCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMCwgMHgwMCwgMHg3NSwgMHg4ZSwgMHgwMCwgMHg0YSwKKwkweDFmLCAweDkwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweGIwLCAweDAxLCAweDAwLAorCTB4MjQsIDB4MDAsIDB4MmQsIDB4MTUsIDB4MTAsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MjgsIDB4MDAsIDB4MmQsIDB4ZjAsCisJMHgxNiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgyMiwgMHgwMCwgMHgyZCwgMHhmMCwgMHgyNiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDE0LCAweDAwLCAweDJmLCAweGYyLCAweDBjLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLAorCTB4ZTAsIDB4ZDEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MzIsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwYiwgMHgxYiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgxZiwgMHgxNSwKKwkweDFhLCAweDUwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDIzLCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MmEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MzQsIDB4OTQsIDB4MDAsIDB4NDAsCisJMHgzNSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgyZiwgMHgwMCwgMHgyMCwgMHg0MCwgMHhlNywgMHhiMSwgMHgwMSwgMHgwMCwKKwkweGI5LCAweDhlLCAweGEyLCAweDQ1LCAweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDI0LCAweDAwLCAweDIwLCAweDBiLAorCTB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MjgsIDB4MDAsIDB4MjAsIDB4MTMsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgyMiwgMHgwMCwgMHgyMCwgMHgwNiwgMHhlNCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg4ZiwgMHg4ZSwgMHgyMiwgMHg1YywKKwkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVjLCAweDFmLCAweDgwLCAweDAxLCAweDAwLAorCTB4MzAsIDB4ODAsIDB4MDAsIDB4MTAsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4OGYsIDB4OGUsIDB4MjIsIDB4NDAsCisJMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDhiLCAweDhlLCAweGE4LCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4YWYsIDB4ODIsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgxOSwKKwkweDQyLCAweGM5LCAweDAxLCAweDAwLCAweGIyLCAweDhlLCAweDIyLCAweDQwLCAweGUzLCAweDZkLCAweDAwLCAweDAwLAorCTB4YTAsIDB4OGUsIDB4MjIsIDB4NDIsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4ZWUsIDB4OTMsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHg0MSwgMHg5MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweGFkLCAweDhlLCAweDIyLCAweDRiLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQzLAorCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCisJMHg5NiwgMHg4ZSwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhhZiwgMHg4MiwgMHgwMCwgMHg4OCwKKwkweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDljLCAweDhlLCAweDIyLCAweDQxLCAweDE5LCAweDdjLCAweDAwLCAweDAwLAorCTB4YWYsIDB4OTIsIDB4MDAsIDB4NDAsIDB4MTEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4OWQsIDB4OGUsIDB4MDAsIDB4MDUsCisJMHg0OCwgMHhiMSwgMHgwMCwgMHgwMCwgMHg5OSwgMHg5MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDlmLCAweDhlLCAweDIyLCAweDA5LCAweDgwLCAweDMwLCAweDAwLCAweDAwLCAweGY0LCAweDk0LCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4ZjksIDB4ODIsIDB4MDAsIDB4NDAsIDB4MDUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHhlZSwgMHg5MywgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgzZCwgMHg5MiwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQzLCAweDYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4YTMsIDB4OGUsIDB4YTgsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhhZiwgMHg4MiwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKKwkweGE5LCAweDhlLCAweDIyLCAweDQxLCAweDE5LCAweDdjLCAweDAwLCAweDAwLCAweGFmLCAweDkyLCAweDAwLCAweDQwLAorCTB4MTEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4YWEsIDB4OGUsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDAsIDB4MDAsCisJMHg5OSwgMHg5MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhhYywgMHg4ZSwgMHgyMiwgMHgwOSwKKwkweDgwLCAweDMwLCAweDAwLCAweDAwLCAweGY0LCAweDk0LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4ZjksIDB4ODIsIDB4MDAsIDB4NDAsIDB4MDUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsCisJMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKKwkweGFlLCAweDhlLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweGFmLCAweDgyLCAweDAwLCAweDg4LAorCTB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHhiNSwgMHg4ZSwgMHgyMiwgMHg0MSwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHhhZiwgMHg5MiwgMHgwMCwgMHg0MCwKKwkweDExLCAweDMwLCAweDAxLCAweDAwLCAweGI2LCAweDhlLCAweDAwLCAweDA1LCAweDQ4LCAweGIxLCAweDAwLCAweDAwLAorCTB4OTksIDB4OTIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4YjgsIDB4OGUsIDB4MjIsIDB4MDksCisJMHg4MCwgMHgzMCwgMHgwMCwgMHgwMCwgMHhmNCwgMHg5NCwgMHgwMCwgMHg0MCwgMHgxMywgMHgzMCwgMHgwMSwgMHgwMCwKKwkweGQ0LCAweDhhLCAweDAwLCAweDQwLCAweDA1LCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDE5LAorCTB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4YzAsIDB4OGUsIDB4MjIsIDB4NDAsIDB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwKKwkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweGJjLCAweDhlLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4YWYsIDB4ODIsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsCisJMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwNSwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweGM0LCAweDhlLCAweDIyLCAweDQxLCAweDE5LCAweDdjLCAweDAwLCAweDAwLCAweGFmLCAweDkyLCAweDAwLCAweDQwLAorCTB4MTEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4YzUsIDB4OGUsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDAsIDB4MDAsCisJMHg5OSwgMHg5MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwOCwgMHgwMCwgMHgyZCwgMHgwYSwKKwkweDg0LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLCAweDgyLCAweGIwLCAweDAxLCAweDAwLAorCTB4MTQsIDB4MDAsIDB4MjAsIDB4NDAsIDB4ZTEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4Y2EsIDB4OGUsIDB4MDMsIDB4MWUsCisJMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHhjYiwgMHg4ZSwgMHgwMCwgMHg0MSwgMHg4NywgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDIxLCAweDAwLCAweDAwLCAweDQwLCAweDg3LCAweDk4LCAweDAxLCAweDAwLCAweGI3LCAweDkzLCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWMsIDB4MWYsIDB4OTAsIDB4MDEsIDB4MDAsCisJMHhjZiwgMHg4ZSwgMHgyMiwgMHgwOSwgMHg4MCwgMHgzMCwgMHgwMCwgMHgwMCwgMHhmNCwgMHg5NCwgMHgwMCwgMHg0MCwKKwkweDEzLCAweDMwLCAweDAxLCAweDAwLCAweGQyLCAweDhlLCAweDIyLCAweDQ0LCAweDE5LCAweDdjLCAweDAwLCAweDAwLAorCTB4ZjQsIDB4OTQsIDB4MDAsIDB4NGYsIDB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsCisJMHgxOSwgMHg4MCwgMHgwMSwgMHgwMCwgMHhjZiwgMHg4YSwgMHhhMiwgMHg0YSwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwKKwkweGQ0LCAweDhhLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGJhLCAweDAwLCAweDIwLCAweDQwLAorCTB4ZTUsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZDgsIDB4OGUsIDB4OWMsIDB4MTcsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHhjYywgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHg4NCwgMHg5NSwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDJkLCAweDk1LCAweDAwLCAweDQwLCAweDEzLCAweDMwLCAweDAxLCAweDAwLAorCTB4YzAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4YzQsIDB4MDAsIDB4MmQsIDB4ZjAsCisJMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHg2MSwgMHg5NSwgMHgwMCwgMHhmMCwgMHg4NCwgMHgzMCwgMHgwMSwgMHgwMCwKKwkweDk5LCAweDkyLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGQ0LCAweDhhLCAweDIyLCAweDA5LAorCTB4ODAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4ZjQsIDB4OTQsIDB4MDAsIDB4NDAsIDB4MTMsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHhkNCwgMHg4YSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgyZSwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDQzLCAweDk5LCAweDAxLCAweDAwLCAweGU0LCAweDhlLCAweDIyLCAweDQwLCAweGU3LCAweDZkLCAweDAwLCAweDAwLAorCTB4MzIsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4ZWMsIDB4OGUsIDB4YTIsIDB4NDAsCisJMHhlNSwgMHg2ZCwgMHgwMCwgMHgwMCwgMHg4MywgMHg5MywgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDI0LCAweDAwLCAweDIwLCAweDBiLCAweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDI4LCAweDAwLCAweDIwLCAweDEzLAorCTB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MjIsIDB4MDAsIDB4MjAsIDB4MDYsIDB4ZTQsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgxNCwgMHgwMCwgMHgyMCwgMHgwYSwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhkNCwgMHg4YSwgMHgyMiwgMHgwOSwKKwkweDgwLCAweDMwLCAweDAwLCAweDAwLCAweGY0LCAweDk0LCAweDAwLCAweDQwLCAweDEzLCAweDMwLCAweDAxLCAweDAwLAorCTB4ZDQsIDB4OGEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4ODMsIDB4OTMsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgzYywgMHg5MywgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweGZhLCAweDhlLCAweDIyLCAweDQxLCAweDE5LCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBiLAorCTB4OTksIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MWYsIDB4MTUsIDB4OTgsIDB4NTAsIDB4MDAsIDB4MDAsCisJMHhmYSwgMHg4ZSwgMHgyMCwgMHgwMSwgMHg5OCwgMHg2YywgMHgwMCwgMHgwMCwgMHg3MCwgMHgwMCwgMHgwMCwgMHgwMywKKwkweDQ4LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJlLCAweDQ2LCAweDFmLCAweDkwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsCisJMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweGEwLCAweDAwLCAweDAwLCAweGE0LCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweGY3LCAweDhlLCAweGE4LCAweDAwLAorCTB4ZTAsIDB4MzEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHhhYywgMHgwMCwgMHgyZiwgMHgwMCwgMHgxMCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwKKwkweGUwLCAweGMxLCAweDAxLCAweDAwLCAweDE0LCAweDAwLCAweDJmLCAweDE1LCAweDEwLCAweGMwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MGEsIDB4ODAsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjAsIDB4MDEsCisJMHg4MCwgMHhkMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywgMHgxOSwgMHg5MCwgMHgwMSwgMHgwMCwKKwkweDdjLCAweDhlLCAweDIyLCAweDA5LCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweGY0LCAweDk0LCAweDAwLCAweDA5LAorCTB4ODAsIDB4MzAsIDB4MDEsIDB4MDAsIDB4N2MsIDB4OGUsIDB4MDAsIDB4NDAsIDB4MTMsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHgwMywgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwKKwkweDgyLCAweGIwLCAweDAxLCAweDAwLCAweDEzLCAweDAwLCAweDAwLCAweDQwLCAweDg3LCAweDk4LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGMsIDB4NDMsIDB4YzEsIDB4MDEsIDB4MDAsIDB4YjcsIDB4OTMsIDB4MDAsIDB4ZjAsCisJMHg4NCwgMHgzMCwgMHgwMSwgMHgwMCwgMHhjZiwgMHg4YSwgMHgwMCwgMHg1YywgMHgxZiwgMHg5MCwgMHgwMCwgMHgwMCwKKwkweDJjLCAweDAwLCAweDIwLCAweDQwLCAweGU3LCAweGIxLCAweDAxLCAweDAwLCAweDJkLCAweDAwLCAweDIwLCAweDQwLAorCTB4ZTcsIDB4YjEsIDB4MDEsIDB4MDAsIDB4Y2YsIDB4OGEsIDB4MDAsIDB4NDIsIDB4MTksIDB4ODAsIDB4MDAsIDB4MDAsCisJMHhhOSwgMHg5MywgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhjOSwgMHg5NCwgMHgwMCwgMHg0OCwKKwkweDk1LCAweDMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweDYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4MGYsIDB4OGYsIDB4YTgsIDB4NDAsCisJMHgxMywgMHgzMCwgMHgwMCwgMHgwMCwgMHhhZiwgMHg4MiwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDE1LCAweDhmLCAweDAwLCAweDA1LCAweDQ4LCAweGIxLCAweDAwLCAweDAwLCAweDE0LCAweDhmLCAweDAwLCAweDQwLAorCTB4MTMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwOCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHgxNCwgMHgwMCwgMHgyZCwgMHhmMCwKKwkweDgyLCAweGIwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweGYwLCAweDg0LCAweDMwLCAweDAwLCAweDAwLAorCTB4MTMsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODcsIDB4OTgsIDB4MDEsIDB4MDAsIDB4YjcsIDB4OTMsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1YywgMHgxZiwgMHg5MCwgMHgwMSwgMHgwMCwKKwkweDJkLCAweDhmLCAweDAwLCAweDA5LCAweDAwLCAweGIwLCAweDAwLCAweDAwLCAweGNmLCAweDhhLCAweDg3LCAweDQyLAorCTB4MTksIDB4MTAsIDB4MDAsIDB4MDAsIDB4OGIsIDB4MDAsIDB4MmYsIDB4NDcsIDB4MTksIDB4ODAsIDB4MDEsIDB4MDAsCisJMHhjZiwgMHg4YSwgMHgwMCwgMHg0MCwgMHhlNywgMHg5MSwgMHgwMCwgMHgwMCwgMHgyZiwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDQ3LCAweDk5LCAweDAxLCAweDAwLCAweDJiLCAweDhmLCAweDIyLCAweDQ3LCAweGU3LCAweDdkLCAweDAwLCAweDAwLAorCTB4MWUsIDB4OTIsIDB4MDAsIDB4NDAsIDB4ZTcsIDB4MzEsIDB4MDEsIDB4MDAsIDB4MmIsIDB4OGYsIDB4MjIsIDB4MDAsCisJMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgyNiwgMHg4ZiwgMHhhMiwgMHg0MCwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwKKwkweDk5LCAweDkyLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDJiLCAweDhmLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgzMiwgMHgwMCwgMHgyZCwgMHhmMiwgMHg5NCwgMHhiMCwgMHgwMSwgMHgwMCwgMHg0MSwgMHg5MywgMHgwMCwgMHhmMiwKKwkweDAyLCAweDMwLCAweDAxLCAweDAwLCAweDQ4LCAweDkzLCAweDAwLCAweDRiLCAweDAyLCAweGIwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MmMsIDB4OGYsIDB4MDAsIDB4NDAsCisJMHgwMSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwNSwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDMyLCAweDhmLCAweDIyLCAweDAwLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDMxLCAweDhmLCAweGEyLCAweDQyLAorCTB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4OTYsIDB4OTMsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHgzMiwgMHg4ZiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhjNiwgMHg5MywgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGJjLCAweDhmLCAweDIyLCAweDVjLCAweDFmLCAweDdjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NWMsIDB4MWYsIDB4ODAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MTAsCisJMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgzYSwgMHg4ZiwgMHgyMiwgMHg0MCwgMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLAorCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4MzcsIDB4OGYsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHhhZiwgMHg4MiwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHhiYywgMHg4ZiwgMHgwMCwgMHgwNSwKKwkweDQ4LCAweGIxLCAweDAwLCAweDAwLCAweDhjLCAweDkyLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4NDAsIDB4OGYsIDB4YTIsIDB4MDgsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ODMsIDB4OTQsIDB4MDAsIDB4NGQsCisJMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MiwgMHgwMCwgMHgwMiwgMHgwNCwgMHhkYywgMHgwMSwgMHgwMCwKKwkweDE0LCAweDg3LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDc0LCAweDAwLCAweDAwLCAweDQwLAorCTB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHg4NCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKKwkweDk2LCAweGIwLCAweDAxLCAweDAwLCAweDRlLCAweDhmLCAweDIyLCAweDQyLCAweDk2LCAweDE0LCAweDAwLCAweDAwLAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4MTAsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4NjQsIDB4MDAsIDB4NjgsIDB4NDAsCisJMHg5NywgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQyLCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDcwLCAweDAwLCAweDAwLCAweDA1LAorCTB4ZTAsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgyMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHg0YiwgMHg4ZiwgMHhhOCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVjLCAweDFmLCAweDkwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsCisJMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHg0ZiwgMHg4ZiwgMHhhOCwgMHg1YywgMHgxZiwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweGFmLCAweDgyLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDVlLCAweDAxLCAweDJkLCAweDA1LAorCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NTMsIDB4OGYsIDB4NjUsIDB4ZjIsIDB4MTIsIDB4MzAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHg5OSwgMHgzZiwgMHg0MiwgMHgxMywgMHhmMCwgMHgwMSwgMHgwMCwgMHg1OCwgMHg4ZiwgMHgyMiwgMHg0NywKKwkweGU3LCAweDdkLCAweDAwLCAweDAwLCAweGY1LCAweDgyLCAweDc1LCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAorCTB4NTIsIDB4OGYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsCisJMHhlNywgMHg5MSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHg3NSwgMHgwOSwgMHg5NiwgMHhlNCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDgwLCAweDAwLCAweDEwLCAweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LAorCTB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjgsIDB4YTgsIDB4OTcsIDB4YzAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMywKKwkweDQ0LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NjAsIDB4OGYsIDB4YTgsIDB4NDAsCisJMHhlMSwgMHgzMSwgMHgwMCwgMHgwMCwgMHhhZiwgMHg4MiwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDk5LCAweDNmLCAweDQyLCAweDEzLCAweGYwLCAweDAxLCAweDAwLCAweDY0LCAweDhmLCAweDY1LCAweDA1LAorCTB4NDgsIDB4MzEsIDB4MDAsIDB4MDAsIDB4M2YsIDB4MDAsIDB4MDAsIDB4ZjMsIDB4OTYsIDB4ODgsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhlNywgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3NSwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDZjLCAweDhmLCAweDIyLCAweDRiLCAweDgwLCAweDMyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTUsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGIsCisJMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHg2YSwgMHg4ZiwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDA3LCAweDE2LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDYyLCAweDAwLCAweDBiLAorCTB4MTYsIDB4ZGMsIDB4MDEsIDB4MDAsIDB4MWUsIDB4OTIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHg4NCwgMHg4ZiwgMHgyMiwgMHgwMCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHhjYywgMHg5MywgMHgwMCwgMHg1ZiwKKwkweDAxLCAweDEwLCAweDAxLCAweDAwLCAweDZlLCAweDhmLCAweDIyLCAweDQwLCAweDk1LCAweDZjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4MTAsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsCisJMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQyLCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLAorCTB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NzYsIDB4OGYsIDB4YTgsIDB4MDAsIDB4ZTAsIDB4MzEsIDB4MDAsIDB4MDAsCisJMHhhZiwgMHg4MiwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwKKwkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDA0LCAweDgwLCAweDAwLCAweDAzLCAweDQyLCAweGM5LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjIsIDB4MDIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NDEsIDB4OTMsIDB4MDAsIDB4NTIsCisJMHg5NSwgMHgzMCwgMHgwMSwgMHgwMCwgMHg5OSwgMHg5MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDZlLCAweDhmLCAweDIyLCAweDQxLCAweDk3LCAweDUwLCAweDAwLCAweDAwLCAweDBjLCAweDgwLCAweDAwLCAweDAzLAorCTB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4MDAsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1YywgMHgwMSwgMHg4MCwgMHgwMSwgMHgwMCwgMHg0OCwgMHg5MywgMHgwMCwgMHg0YiwKKwkweDAyLCAweGIwLCAweDAwLCAweDAwLCAweDZlLCAweDhmLCAweDAwLCAweDA1LCAweDQ4LCAweGIxLCAweDAwLCAweDAwLAorCTB4ZDQsIDB4OTQsIDB4MDAsIDB4NDAsIDB4MDMsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MTcsIDB4ODAsIDB4MDAsIDB4MDMsCisJMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHhmMCwgMHgwMCwgMHgwYywgMHg5NiwgMHg4OCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDYzLCAweDRjLCAweDk3LCAweGYwLCAweDAxLCAweDAwLCAweDEwLCAweDgwLCAweDAwLCAweDAzLAorCTB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YWIsIDB4ZTEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg3NSwgMHg5NCwgMHgwMCwgMHg1ZSwgMHgwNSwgMHgxMCwgMHgwMSwgMHgwMCwgMHgwMywgMHgwMCwgMHgwMCwgMHgwNywKKwkweDFhLCAweGY0LCAweDAxLCAweDAwLCAweDA3LCAweDAwLCAweDAwLCAweDA3LCAweDE2LCAweDg4LCAweDAxLCAweDAwLAorCTB4MDAsIDB4YjUsIDB4MDAsIDB4MGQsIDB4NDYsIDB4YzksIDB4MDEsIDB4MDAsIDB4OGUsIDB4OGYsIDB4MzAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYiwgMHhlNiwgMHg4MSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweGI3LCAweDAwLCAweDBkLCAweDQ2LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBiLAorCTB4ZTYsIDB4ODEsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MTAsIDB4MGYsIDB4OTQsIDB4ZjQsIDB4MDEsIDB4MDAsCisJMHg5MywgMHgwNCwgMHgwMCwgMHg1ZiwgMHg5NSwgMHgwNCwgMHgwMSwgMHgwMCwgMHgyMiwgMHg5MywgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDk4LCAweDhmLCAweDIyLCAweDUwLCAweGZkLCAweDdmLCAweDAwLCAweDAwLAorCTB4OTYsIDB4OGYsIDB4NDYsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWUsIDB4NDEsCisJMHgzMSwgMHhkMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZSwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGUxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4MGYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ODUsIDB4OTIsIDB4MDAsIDB4NDEsIDB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHgxNCwgMHg4NywgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg4YywgMHg5MiwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGE5LCAweDhmLCAweGEyLCAweDA4LCAweDgwLCAweDMyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4ODIsIDB4MDAsIDB4MDIsIDB4MDQsIDB4ZGMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsCisJMHgwMywgMHhmMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHhjMCwgMHgwMSwgMHgwMCwKKwkweGEyLCAweDhmLCAweDM3LCAweDVjLCAweDYxLCAweDMxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFiLAorCTB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YTYsIDB4OGYsIDB4MjgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHhhMywgMHg4ZiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDYyLCAweGIxLCAweDAxLCAweDAwLCAweGE2LCAweDhmLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4MTQsIDB4ODcsIDB4MTcsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4NzQsIDB4MDAsIDB4MjIsIDB4NDAsCisJMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhlMSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweGM5LCAweDk0LCAweDAwLCAweDRhLCAweDk1LCAweDMwLCAweDAxLCAweDAwLCAweGE5LCAweDkzLCAweDAwLCAweDVjLAorCTB4MWYsIDB4MTAsIDB4MDEsIDB4MDAsIDB4NDAsIDB4OGYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgyZiwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwgMHhiYSwgMHg4ZiwgMHgyMiwgMHg0NywKKwkweGU3LCAweDdkLCAweDAwLCAweDAwLCAweDFlLCAweDkyLCAweDAwLCAweDQwLCAweGU3LCAweDMxLCAweDAxLCAweDAwLAorCTB4YmEsIDB4OGYsIDB4MjIsIDB4MDAsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4YjUsIDB4OGYsIDB4YTIsIDB4NDAsCisJMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHg5OSwgMHg5MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweGJhLCAweDhmLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDMwLCAweDAwLCAweDAwLCAweDQwLAorCTB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4MzIsIDB4MDAsIDB4MmQsIDB4ZjIsIDB4OTQsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHg0MSwgMHg5MywgMHgwMCwgMHhmMiwgMHgwMiwgMHgzMCwgMHgwMSwgMHgwMCwgMHg0OCwgMHg5MywgMHgwMCwgMHg0YiwKKwkweDAyLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLAorCTB4YzksIDB4OTQsIDB4MDAsIDB4NDgsIDB4OTUsIDB4MzAsIDB4MDEsIDB4MDAsIDB4YTksIDB4OTMsIDB4MDAsIDB4NWMsCisJMHgxZiwgMHgxMCwgMHgwMSwgMHgwMCwgMHhiZiwgMHg4ZiwgMHg4NywgMHg0MiwgMHgxOSwgMHgxMCwgMHgwMCwgMHgwMCwKKwkweDhiLCAweDAwLCAweDJmLCAweDQ3LCAweDE5LCAweDgwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4ZTcsIDB4OTEsIDB4MDEsIDB4MDAsIDB4ZjQsIDB4OTQsIDB4MDAsIDB4NDIsIDB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHhjZiwgMHg4YSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhhOSwgMHg5MywgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGNmLCAweDhhLCAweDAwLCAweDVjLCAweDFmLCAweDkwLCAweDAwLCAweDAwLAorCTB4YmEsIDB4MDAsIDB4MjAsIDB4NDAsIDB4ZTUsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MmQsIDB4OTUsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhjMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwKKwkweGM0LCAweDAwLCAweDJkLCAweGYwLCAweDgyLCAweGIwLCAweDAxLCAweDAwLCAweDYxLCAweDk1LCAweDAwLCAweGYwLAorCTB4ODQsIDB4MzAsIDB4MDEsIDB4MDAsIDB4OTksIDB4OTIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHhmNCwgMHg5NCwgMHgwMCwgMHg0NSwgMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwgMHhjZiwgMHg4YSwgMHgyMiwgMHg0MiwKKwkweDE5LCAweDdjLCAweDAwLCAweDAwLCAweDgzLCAweDk0LCAweDAwLCAweDNhLCAweDgxLCAweDMwLCAweDAxLCAweDAwLAorCTB4Y2YsIDB4OGEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg4YywgMHg5MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweGQzLCAweDhmLCAweGEyLCAweDA4LCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDgzLCAweDk0LCAweDAwLCAweDQ3LAorCTB4ODAsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ODIsIDB4MDAsIDB4MDIsIDB4MDQsIDB4ZGMsIDB4MDEsIDB4MDAsCisJMHgxNCwgMHg4NywgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgxMCwgMHg4MCwgMHgwMCwgMHgwMywKKwkweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweGUxLCAweDAwLCAweGE2LCAweDg0LCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2MCwgMHgwNywgMHg4NCwgMHg5NCwgMHgwMSwgMHgwMCwKKwkweDc1LCAweDk0LCAweDAwLCAweDVlLCAweDA1LCAweDEwLCAweDAxLCAweDAwLCAweGNmLCAweDhhLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4OGEsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDcsIDB4OTksIDB4MDEsIDB4MDAsCisJMHg5OSwgMHg5MiwgMHgwMCwgMHg0MSwgMHhlNywgMHg0MSwgMHgwMSwgMHgwMCwgMHhkNCwgMHg4YSwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDgzLCAweDkzLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4M2MsIDB4OTMsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsCisJMHgyYywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwgMHgxMCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweGMwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDFmLCAweDBhLAorCTB4MmMsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4OTUsIDB4MDAsIDB4MDYsIDB4MDQsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHhlYSwgMHg4ZiwgMHhhMiwgMHg0OCwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHhlOCwgMHg4ZiwgMHg4NCwgMHg0OCwKKwkweDFmLCAweDEwLCAweDAwLCAweDAwLCAweGFjLCAweDAwLCAweDAwLCAweDQwLCAweDQ3LCAweDk5LCAweDAxLCAweDAwLAorCTB4ZWEsIDB4OGYsIDB4MDAsIDB4MGEsIDB4ZTAsIDB4YzEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGEsCisJMHgwMiwgMHhiMCwgMHgwMSwgMHgwMCwgMHhhNywgMHg5MSwgMHgwMCwgMHgwMSwgMHg4YywgMHgzMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQzLCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLAorCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4ZWIsIDB4OGYsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHhhZiwgMHg4MiwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwKKwkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweDEwLCAweGMwLCAweDAxLCAweDAwLAorCTB4ZjgsIDB4OGYsIDB4MjIsIDB4MDIsIDB4MTQsIDB4NTAsIDB4MDAsIDB4MDAsIDB4ZjEsIDB4OTMsIDB4MDAsIDB4NDUsCisJMHgxZiwgMHgwMCwgMHgwMSwgMHgwMCwgMHhlMywgMHg4ZiwgMHgyMiwgMHg1YywgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ3LCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLAorCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4ZjQsIDB4OGYsIDB4YTgsIDB4NWMsIDB4MWYsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHhhZiwgMHg4MiwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHhlMywgMHg4ZiwgMHgwMCwgMHgwNSwKKwkweDQ4LCAweGIxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBiLCAweDFiLCAweGIwLCAweDAxLCAweDAwLAorCTB4MDgsIDB4MDAsIDB4MmQsIDB4NDAsIDB4ODUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsCisJMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwNSwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweGI3LCAweDkzLCAweDAwLCAweDQxLCAweDg3LCAweDMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ1LAorCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCisJMHhmZSwgMHg4ZiwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhhZiwgMHg4MiwgMHgwMCwgMHg4OCwKKwkweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLAorCTB4MDQsIDB4OTAsIDB4MjIsIDB4MDksIDB4ODAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4ZjQsIDB4OTQsIDB4MDAsIDB4NDAsCisJMHgxMywgMHgzMCwgMHgwMSwgMHgwMCwgMHgwOCwgMHg5MCwgMHgyMiwgMHg0NCwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwKKwkweGY0LCAweDk0LCAweDAwLCAweDRmLCAweDgxLCAweDMwLCAweDAxLCAweDAwLCAweDA4LCAweDkwLCAweGEyLCAweDQ3LAorCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4MTksIDB4ODAsIDB4MDEsIDB4MDAsCisJMHhmZiwgMHgwNywgMHgwMCwgMHgwOCwgMHgwMCwgMHg4YywgMHgwMSwgMHgwMCwgMHgxNiwgMHg5MCwgMHgyMiwgMHg0YSwKKwkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDBlLCAweDkwLCAweGEyLCAweDE2LCAweDAyLCAweDMwLCAweDAwLCAweDAwLAorCTB4OTksIDB4OTIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MmYsIDB4MDAsIDB4MjAsIDB4NDAsCisJMHhlNywgMHhiMSwgMHgwMSwgMHgwMCwgMHhjZiwgMHg4YSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDJkLCAweDAwLCAweDJkLCAweDA4LCAweDJhLCAweGIwLCAweDAxLCAweDAwLCAweDEyLCAweDkwLCAweDIyLCAweDQyLAorCTB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4YzYsIDB4OTMsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHgxMywgMHg5MCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg5NiwgMHg5MywgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDMwLCAweDAwLCAweDJlLCAweDAwLCAweDJhLCAweGQwLCAweDAxLCAweDAwLAorCTB4MzIsIDB4MDAsIDB4MmEsIDB4MTUsIDB4ZTQsIDB4YjEsIDB4MDEsIDB4MDAsIDB4Y2YsIDB4OGEsIDB4MDAsIDB4MTYsCisJMHhlNCwgMHhiMSwgMHgwMCwgMHgwMCwgMHgyOCwgMHg5MCwgMHgyMiwgMHgxNiwgMHgwMiwgMHgzMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDJhLCAweGIwLCAweDAxLCAweDAwLCAweDdkLCAweDk1LCAweDAwLCAweDQwLAorCTB4OTUsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MjksIDB4OTAsIDB4MjIsIDB4NDAsIDB4MTEsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHhhYywgMHgwMCwgMHgwMCwgMHg0MCwgMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwgMHhiMCwgMHgwMCwgMHgyYiwgMHgwMSwKKwkweGUwLCAweGMxLCAweDAxLCAweDAwLCAweDAwLCAweDJiLCAweDAwLCAweGE2LCAweDE2LCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4ZTAsIDB4ZDEsIDB4MDEsIDB4MDAsIDB4Y2MsIDB4OTQsIDB4MDAsIDB4MDgsCisJMHg4MCwgMHgzMCwgMHgwMSwgMHgwMCwgMHgyMSwgMHg5MCwgMHgwMCwgMHg1ZSwgMHgxNywgMHg5MCwgMHgwMCwgMHgwMCwKKwkweGVkLCAweDk0LCAweDAwLCAweDQzLCAweDYxLCAweDMxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQzLAorCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCisJMHgyMiwgMHg5MCwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhhZiwgMHg4MiwgMHgwMCwgMHg4OCwKKwkweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLAorCTB4ZDQsIDB4OTQsIDB4MDAsIDB4MDcsIDB4MTYsIDB4MTQsIDB4MDEsIDB4MDAsIDB4NzUsIDB4OTQsIDB4MDAsIDB4NWUsCisJMHgwNSwgMHgxMCwgMHgwMSwgMHgwMCwgMHg5OSwgMHg5MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDJmLCAweDAwLCAweDIwLCAweDQwLCAweGU3LCAweGIxLCAweDAxLCAweDAwLCAweGQ0LCAweDhhLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGIsIDB4MWIsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgxZiwgMHgxNSwgMHgxYSwgMHg1MCwgMHgwMCwgMHgwMCwgMHgzNiwgMHg5MCwgMHgyMCwgMHgxNiwKKwkweDFhLCAweDZjLCAweDAwLCAweDAwLCAweDcwLCAweDAwLCAweDAwLCAweDAzLCAweDQ4LCAweGM5LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MjIsIDB4NTAsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsCisJMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQyLCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweGEwLCAweDAwLCAweDAwLCAweGE0LAorCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4MzMsIDB4OTAsIDB4YTgsIDB4NDYsIDB4MWYsIDB4MTAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDEwLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE1LCAweDEwLCAweGMwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MGEsIDB4MmEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGEsCisJMHgyYywgMHhkMCwgMHgwMSwgMHgwMCwgMHhhYywgMHgwMCwgMHgyZiwgMHg0MCwgMHgyMywgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDNkLCAweDkwLCAweDg0LCAweDQ1LCAweDFmLCAweDEwLCAweDAwLCAweDAwLCAweDNlLCAweDkwLCAweDAwLCAweDBhLAorCTB4ZTAsIDB4YzEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGEsIDB4MDIsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgzNCwgMHg5NCwgMHgwMCwgMHg0MCwgMHgzNSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgxOSwKKwkweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDQ2LCAweDkwLCAweDIyLCAweDQwLCAweGUzLCAweDZkLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsCisJMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHg0MiwgMHg5MCwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweGFmLCAweDgyLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LAorCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NTUsIDB4OTAsIDB4YTIsIDB4MDIsIDB4MWEsIDB4NTAsIDB4MDAsIDB4MDAsCisJMHg1NiwgMHg5MCwgMHgyMiwgMHg0MCwgMHgyZCwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgxMCwKKwkweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLCAweGYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4MDcsIDB4MDAsIDB4MDgsCisJMHhlMCwgMHg4ZCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGIxLCAweDAxLCAweDAwLCAweDRkLCAweDkwLCAweGE4LCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4YWYsIDB4ODIsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwYywgMHg4MCwgMHgwMCwgMHgwMywKKwkweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweGYwLCAweDEwLCAweGM4LCAweDAxLCAweDAwLAorCTB4ZjAsIDB4MDcsIDB4MDAsIDB4NDAsIDB4MWIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4NTYsIDB4OTAsIDB4MDAsIDB4NWMsCisJMHgxMSwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHgxMCwgMHhjMCwgMHgwMSwgMHgwMCwKKwkweGFmLCAweDkyLCAweDAwLCAweDQwLCAweDFmLCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LAorCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NWEsIDB4OTAsIDB4MjMsIDB4MGQsIDB4MmMsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgxZiwgMHg5MCwgMHgwMSwgMHgwMCwgMHg2MiwgMHg5MCwgMHgyMiwgMHg0NiwKKwkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDcwLCAweDgwLCAweDAwLCAweDAzLCAweDQyLCAweGM5LCAweDAxLCAweDAwLAorCTB4NjIsIDB4OTAsIDB4MjIsIDB4NDAsIDB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsCisJMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKKwkweDVlLCAweDkwLCAweGE4LCAweDQ2LCAweDFmLCAweDAwLCAweDAwLCAweDAwLCAweGFmLCAweDgyLCAweDAwLCAweDg4LAorCTB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwOCwgMHgwMCwgMHgyZCwgMHg0MCwgMHg4NSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwKKwkweDgyLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDA1LCAweGIwLCAweDAxLCAweDAwLAorCTB4YjcsIDB4OTMsIDB4MDAsIDB4NDEsIDB4ODcsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsCisJMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKKwkweDY3LCAweDkwLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweGFmLCAweDgyLCAweDAwLCAweDg4LAorCTB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg2ZCwgMHg5MCwgMHgyMiwgMHgwOSwgMHg4MCwgMHgzMCwgMHgwMCwgMHgwMCwgMHhmNCwgMHg5NCwgMHgwMCwgMHg0MCwKKwkweDEzLCAweDMwLCAweDAxLCAweDAwLCAweDcxLCAweDkwLCAweDIyLCAweDQ0LCAweDE5LCAweDdjLCAweDAwLCAweDAwLAorCTB4ZjQsIDB4OTQsIDB4MDAsIDB4NGYsIDB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4NzEsIDB4OTAsIDB4YTIsIDB4NDcsCisJMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHgxOSwgMHg4MCwgMHgwMSwgMHgwMCwKKwkweGZmLCAweDA3LCAweDAwLCAweDA4LCAweDAwLCAweDhjLCAweDAxLCAweDAwLCAweDg2LCAweDkwLCAweDIyLCAweDRhLAorCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4NzcsIDB4OTAsIDB4YTIsIDB4MTYsIDB4MDIsIDB4MzAsIDB4MDAsIDB4MDAsCisJMHg5OSwgMHg5MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgyZiwgMHgwMCwgMHgyMCwgMHg0MCwKKwkweGU3LCAweGIxLCAweDAxLCAweDAwLCAweGNmLCAweDhhLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MmQsIDB4MDAsIDB4MmQsIDB4MDgsIDB4MmEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ODIsIDB4OTAsIDB4MjIsIDB4NDIsCisJMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHg3YiwgMHg5MCwgMHhhMiwgMHhmMywgMHg4NCwgMHgzMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGE1LCAweDg1LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAorCTB4ODUsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4ZDQsIDB4MDAsIDB4M2UsIDB4NDEsIDB4ODUsIDB4ZTAsIDB4MDEsIDB4MDAsCisJMHg3ZiwgMHg5MCwgMHgyMiwgMHg0MCwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1YSwKKwkweDExLCAweDkwLCAweDAxLCAweDAwLCAweDBiLCAweDAwLCAweDAwLCAweDA4LCAweGU0LCAweGY1LCAweDAxLCAweDAwLAorCTB4YzYsIDB4OTMsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4ODMsIDB4OTAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg5NiwgMHg5MywgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDMwLCAweDAwLCAweDJlLCAweDAwLCAweDJhLCAweGQwLCAweDAxLCAweDAwLCAweDMyLCAweDAwLCAweDJhLCAweDE1LAorCTB4ZTQsIDB4YjEsIDB4MDEsIDB4MDAsIDB4Y2YsIDB4OGEsIDB4MDAsIDB4MTYsIDB4ZTQsIDB4YjEsIDB4MDAsIDB4MDAsCisJMHg4OSwgMHg5MCwgMHhhMiwgMHgxNiwgMHgwMiwgMHgzMCwgMHgwMCwgMHgwMCwgMHg5OSwgMHg5MiwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGQ2LCAweDkwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MmQsIDB4MDAsIDB4MmQsIDB4MDgsIDB4MmEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4OTYsIDB4OTAsIDB4MjIsIDB4NDcsCisJMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHg5MywgMHg5MCwgMHgyMiwgMHg0MiwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwKKwkweDhlLCAweDkwLCAweGEyLCAweGYzLCAweDg0LCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE1LAorCTB4ODUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ODUsIDB4ZDAsIDB4MDEsIDB4MDAsCisJMHhkNCwgMHgwMCwgMHgzZSwgMHg0MSwgMHg4NSwgMHhlMCwgMHgwMSwgMHgwMCwgMHg5MiwgMHg5MCwgMHgyMiwgMHg0MCwKKwkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVhLCAweDExLCAweDkwLCAweDAxLCAweDAwLAorCTB4MGIsIDB4MDAsIDB4MDAsIDB4MDgsIDB4ZTQsIDB4ZjUsIDB4MDEsIDB4MDAsIDB4NTgsIDB4MDEsIDB4MmQsIDB4MDAsCisJMHgyYSwgMHhkMCwgMHgwMSwgMHgwMCwgMHg2MCwgMHgwMSwgMHgyZCwgMHhmMCwgMHgxMCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDJkLCAweDhlLCAweDAwLCAweGYwLCAweDJjLCAweGIwLCAweDAwLCAweDAwLCAweDdkLCAweDk1LCAweDAwLCAweDQxLAorCTB4OTUsIDB4MzAsIDB4MDEsIDB4MDAsIDB4OWQsIDB4OTAsIDB4YTIsIDB4MDgsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg5NywgMHhiMCwgMHgwMSwgMHgwMCwgMHg5YiwgMHg5MCwgMHgyMywgMHgwZCwKKwkweDAyLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDk3LCAweGMwLCAweDAxLCAweDAwLAorCTB4NDgsIDB4OTMsIDB4MDAsIDB4NGIsIDB4MDIsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZDYsIDB4OTAsIDB4MDAsIDB4MDUsCisJMHg0OCwgMHhiMSwgMHgwMCwgMHgwMCwgMHhhYywgMHgwMCwgMHgyZiwgMHgwMSwgMHgxNCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweGIwLCAweDAwLCAweDJiLCAweDAxLCAweGUwLCAweGMxLCAweDAxLCAweDAwLCAweDAwLCAweDJiLCAweDAwLCAweGE2LAorCTB4MTYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4ZTAsIDB4ZDEsIDB4MDEsIDB4MDAsCisJMHhhZCwgMHg5MCwgMHgyMywgMHgwZCwgMHgwMiwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgxMCwKKwkweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLCAweGYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsCisJMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweGE2LCAweDkwLCAweGE4LCAweDAwLCAweGUwLCAweDMxLCAweDAwLCAweDAwLCAweGFmLCAweDgyLCAweDAwLCAweDg4LAorCTB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwYywgMHg4MCwgMHgwMCwgMHgwMywgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHhmMCwKKwkweDIyLCAweGM4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVjLCAweDIzLCAweDgwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4ODQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YjAsIDB4OTAsIDB4MjMsIDB4MGQsCisJMHgwMiwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwZCwgMHgwMiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDgwLCAweGIwLCAweDAxLCAweDAwLCAweGI1LCAweDkwLCAweDIyLCAweDQwLAorCTB4MWIsIDB4NmMsIDB4MDAsIDB4MDAsIDB4Y2MsIDB4OTQsIDB4MDAsIDB4MDEsIDB4ODQsIDB4NTAsIDB4MDEsIDB4MDAsCisJMHhiZCwgMHg5MCwgMHgyMiwgMHg0MCwgMHg4NSwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwKKwkweDgwLCAweGMwLCAweDAxLCAweDAwLCAweDEwLCAweDgwLCAweDAwLCAweDEwLCAweDQ2LCAweGM5LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGYsIDB4NDMsIDB4ODEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsCisJMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmMCwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDE2LCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQzLAorCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YTAsIDB4MDAsIDB4MDAsIDB4YTEsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCisJMHhiYiwgMHg5MCwgMHhhOCwgMHgxMSwgMHhlMCwgMHgzMSwgMHgwMCwgMHgwMCwgMHhjYywgMHg5MCwgMHgwMCwgMHg1ZSwKKwkweDE3LCAweDkwLCAweDAwLCAweDAwLCAweGMwLCAweDkwLCAweDIzLCAweDBkLCAweDAyLCAweDZjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MGQsIDB4MDIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsCisJMHg4NCwgMHhkMCwgMHgwMSwgMHgwMCwgMHhjNSwgMHg5MCwgMHgyMiwgMHg0MCwgMHgxYiwgMHg2YywgMHgwMCwgMHgwMCwKKwkweGVkLCAweDk0LCAweDAwLCAweDQzLCAweDYxLCAweDMxLCAweDAxLCAweDAwLCAweGNjLCAweDkwLCAweDIyLCAweDQwLAorCTB4ODUsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MTIsIDB4YzAsIDB4MDEsIDB4MDAsCisJMHgxMCwgMHg4MCwgMHgwMCwgMHgxMCwgMHg0NiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZiwKKwkweDQzLCAweDgxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLCAweGYwLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDksIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsCisJMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhhMCwgMHgwMCwgMHgwMCwgMHhhMSwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKKwkweGNhLCAweDkwLCAweGE4LCAweDExLCAweGUwLCAweDMxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQzLAorCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCisJMHhjZCwgMHg5MCwgMHhhOCwgMHgwYSwgMHgwMiwgMHgzMCwgMHgwMCwgMHgwMCwgMHhhZiwgMHg4MiwgMHgwMCwgMHg4OCwKKwkweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDk5LCAweDkyLCAweDAwLCAweDA1LCAweDQ4LCAweDMxLCAweDAxLCAweDAwLAorCTB4ZDQsIDB4OTAsIDB4MjMsIDB4MGQsIDB4MDIsIDB4NmMsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4MDcsIDB4MDAsIDB4MTEsCisJMHgwMCwgMHg4YywgMHgwMSwgMHgwMCwgMHg5OSwgMHg5MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweGQ0LCAweDk0LCAweDAwLCAweDA3LCAweDE2LCAweDE0LCAweDAxLCAweDAwLCAweDc1LCAweDk0LCAweDAwLCAweDVlLAorCTB4MDUsIDB4MTAsIDB4MDEsIDB4MDAsIDB4MmYsIDB4MDAsIDB4MjAsIDB4NDAsIDB4ZTcsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHhkNCwgMHg4YSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMywKKwkweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDgyLCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4OGMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsCisJMHg4ZSwgMHhiMCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg5MywgMHgwMCwgMHg0MCwgMHgxMywgMHgzMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDg1LCAweGIwLCAweDAxLCAweDAwLCAweGI3LCAweDkzLCAweDAwLCAweDQxLAorCTB4ODcsIDB4MzAsIDB4MDEsIDB4MDAsIDB4M2MsIDB4OTMsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHgxMCwgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHhlNywgMHg5MCwgMHgyMiwgMHg0MCwKKwkweGUzLCAweDZkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweDYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4ZTMsIDB4OTAsIDB4YTgsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhhZiwgMHg4MiwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweGU5LCAweDkwLCAweDIyLCAweDA5LAorCTB4ODAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4ZjQsIDB4OTQsIDB4MDAsIDB4NDAsIDB4MTMsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwYiwgMHgxYiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwKKwkweDFhLCAweGQwLCAweDAxLCAweDAwLCAweGVmLCAweDkwLCAweGEyLCAweDQxLCAweDE5LCAweDdjLCAweDAwLCAweDAwLAorCTB4N2QsIDB4OTUsIDB4MDAsIDB4NDAsIDB4OTUsIDB4MzAsIDB4MDEsIDB4MDAsIDB4ZjcsIDB4OTAsIDB4MjIsIDB4MDgsCisJMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgxYSwgMHg5MCwgMHgwMCwgMHgwMCwgMHgyYSwgMHhjMCwgMHgwMCwgMHgwMCwKKwkweDdkLCAweDk1LCAweDAwLCAweDQxLCAweDk1LCAweDMwLCAweDAxLCAweDAwLCAweGYyLCAweDkwLCAweDIyLCAweDA4LAorCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4OWQsIDB4OTAsIDB4MDAsIDB4MDAsIDB4MmEsIDB4YzAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg5NywgMHhiMCwgMHgwMSwgMHgwMCwgMHhmNSwgMHg5MCwgMHgyMywgMHgwZCwKKwkweDAyLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDk3LCAweGMwLCAweDAxLCAweDAwLAorCTB4NDgsIDB4OTMsIDB4MDAsIDB4NGIsIDB4MDIsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsCisJMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhjZiwgMHg4YSwgMHgyMiwgMHg0MiwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwKKwkweDgzLCAweDk0LCAweDAwLCAweDNhLCAweDgxLCAweDMwLCAweDAxLCAweDAwLCAweGNmLCAweDhhLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4ZmIsIDB4OTAsIDB4MDAsIDB4NGEsIDB4MWYsIDB4OTAsIDB4MDAsIDB4MDAsCisJMHhjMSwgMHg5MiwgMHgwMCwgMHgwMCwgMHgxMCwgMHgzMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwKKwkweDEwLCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDMyLCAweGIwLCAweDAxLCAweDAwLAorCTB4MDcsIDB4OTUsIDB4MDAsIDB4MDYsIDB4MDQsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4OTEsIDB4YTIsIDB4NDQsCisJMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYiwgMHgxYiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDBhLCAweDJjLCAweGQwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBhLAorCTB4MDIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YTcsIDB4OTEsIDB4MDAsIDB4MDEsIDB4OGMsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHgxOSwgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwYiwgMHg5MSwgMHgyMiwgMHg0MCwKKwkweGUzLCAweDZkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQzLCAweDYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4MDcsIDB4OTEsIDB4YTgsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhhZiwgMHg4MiwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLAorCTB4MTAsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MTQsIDB4OTEsIDB4MjIsIDB4MDIsIDB4MTQsIDB4NTAsIDB4MDAsIDB4MDAsCisJMHhmMSwgMHg5MywgMHgwMCwgMHg0NSwgMHgxZiwgMHgwMCwgMHgwMSwgMHgwMCwgMHhmZCwgMHg5MCwgMHgyMiwgMHg1YywKKwkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ3LCAweDYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4MTAsIDB4OTEsIDB4YTgsIDB4NWMsCisJMHgxZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhZiwgMHg4MiwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKKwkweGZkLCAweDkwLCAweDAwLCAweDA1LCAweDQ4LCAweGIxLCAweDAwLCAweDAwLCAweDA4LCAweDAwLCAweDJkLCAweDQwLAorCTB4ODUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwNSwgMHhiMCwgMHgwMSwgMHgwMCwgMHhiNywgMHg5MywgMHgwMCwgMHg0MSwKKwkweDg3LCAweDMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweDYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4MTksIDB4OTEsIDB4YTgsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhhZiwgMHg4MiwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDFmLCAweDkxLCAweDIyLCAweDA5LAorCTB4ODAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4ZjQsIDB4OTQsIDB4MDAsIDB4NDAsIDB4MTMsIDB4MzAsIDB4MDEsIDB4MDAsCisJMHgyMiwgMHg5MSwgMHgyMiwgMHg0NCwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHhmNCwgMHg5NCwgMHgwMCwgMHg0ZiwKKwkweDgxLCAweDMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDE5LCAweDgwLCAweDAxLCAweDAwLAorCTB4ZmYsIDB4MDcsIDB4MDAsIDB4MDgsIDB4MDAsIDB4OGMsIDB4MDEsIDB4MDAsIDB4MzAsIDB4OTEsIDB4MjIsIDB4NGEsCisJMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgyOCwgMHg5MSwgMHhhMiwgMHgxNiwgMHgwMiwgMHgzMCwgMHgwMCwgMHgwMCwKKwkweDk5LCAweDkyLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDJmLCAweDAwLCAweDIwLCAweDQwLAorCTB4ZTcsIDB4YjEsIDB4MDEsIDB4MDAsIDB4Y2YsIDB4OGEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgyZCwgMHgwMCwgMHgyZCwgMHgwOCwgMHgyYSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgyYywgMHg5MSwgMHgyMiwgMHg0MiwKKwkweDE5LCAweDdjLCAweDAwLCAweDAwLCAweGM2LCAweDkzLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4MmQsIDB4OTEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4OTYsIDB4OTMsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgzMCwgMHgwMCwgMHgyZSwgMHgwMCwgMHgyYSwgMHhkMCwgMHgwMSwgMHgwMCwKKwkweDMyLCAweDAwLCAweDJhLCAweDE1LCAweGU0LCAweGIxLCAweDAxLCAweDAwLCAweGNmLCAweDhhLCAweDAwLCAweDE2LAorCTB4ZTQsIDB4YjEsIDB4MDAsIDB4MDAsIDB4MTcsIDB4OTAsIDB4YTIsIDB4MTYsIDB4MDIsIDB4MzAsIDB4MDAsIDB4MDAsCisJMHg5OSwgMHg5MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgyZiwgMHgwMCwgMHgyMCwgMHg0MCwKKwkweGU3LCAweGIxLCAweDAxLCAweDAwLCAweGQ0LCAweDhhLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4YzEsIDB4OTIsIDB4MDAsIDB4NGEsIDB4MWYsIDB4MTAsIDB4MDEsIDB4MDAsIDB4MmIsIDB4OTAsIDB4MDAsIDB4MTAsCisJMHgzMiwgMHhiMCwgMHgwMCwgMHgwMCwgMHg4YSwgMHgwMCwgMHgyMCwgMHg0MCwgMHhlNywgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDNhLCAweDkxLCAweGEyLCAweDQxLCAweDE5LCAweDdjLCAweDAwLCAweDAwLCAweDk5LCAweDkyLCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4M2QsIDB4OTEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHg0MSwgMHg5MywgMHgwMCwgMHgxNSwgMHg5NCwgMHgzMCwgMHgwMSwgMHgwMCwgMHg0OCwgMHg5MywgMHgwMCwgMHg0YiwKKwkweDAyLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLAorCTB4M2YsIDB4OTEsIDB4MjIsIDB4NDIsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4ODMsIDB4OTQsIDB4MDAsIDB4M2EsCisJMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwgMHhmNCwgMHg5NCwgMHgwMCwgMHg0NSwgMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwKKwkweGNmLCAweDhhLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGVjLCAweDhlLCAweDAwLCAweDQ1LAorCTB4MWYsIDB4OTAsIDB4MDAsIDB4MDAsIDB4ODMsIDB4OTMsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHgzYywgMHg5MywgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgyYiwgMHg5MCwgMHgwMCwgMHgwMSwKKwkweDJjLCAweGIwLCAweDAwLCAweDAwLCAweDhjLCAweDkyLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4NTEsIDB4OTEsIDB4YTIsIDB4MDgsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODIsIDB4MDAsIDB4MDIsCisJMHgwNCwgMHhkYywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHgwMywgMHhmMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweGMwLCAweDAxLCAweDAwLCAweDRhLCAweDkxLCAweDM3LCAweDVjLAorCTB4NjEsIDB4MzEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWIsIDB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg0ZSwgMHg5MSwgMHgyOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHg0YiwgMHg5MSwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDYyLCAweGIxLCAweDAxLCAweDAwLAorCTB4NGUsIDB4OTEsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MTQsIDB4ODcsIDB4MTcsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg1OCwgMHgwMSwgMHgyMCwgMHgwOCwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDYwLCAweDAxLCAweDIwLCAweDE2LCAweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDgzLCAweDkzLCAweDAwLCAweDQ3LAorCTB4MWYsIDB4MTAsIDB4MDEsIDB4MDAsIDB4M2MsIDB4OTMsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHgyYiwgMHg5MCwgMHgwMCwgMHgwMSwgMHgyYywgMHhiMCwgMHgwMCwgMHgwMCwgMHg4YywgMHg5MiwgMHgwMCwgMHg0NywKKwkweDFmLCAweDEwLCAweDAxLCAweDAwLCAweDYzLCAweDkxLCAweGEyLCAweDA4LCAweDgwLCAweDMyLCAweDAwLCAweDAwLAorCTB4NWYsIDB4OTEsIDB4YTIsIDB4NDIsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODIsIDB4MDAsIDB4MDIsCisJMHgwNCwgMHhkYywgMHgwMSwgMHgwMCwgMHhhMCwgMHg5OCwgMHgwMCwgMHg0MCwgMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDMwLCAweDA1LCAweDAwLCAweDQxLCAweDg5LCAweDMwLCAweDAxLCAweDAwLCAweDQxLCAweDkzLCAweDAwLCAweDE1LAorCTB4OTQsIDB4MzAsIDB4MDEsIDB4MDAsIDB4NDgsIDB4OTMsIDB4MDAsIDB4NGIsIDB4MDIsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgxNCwgMHg4NywgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhjNiwgMHg5MywgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRiLCAweDE5LCAweDkwLCAweDAxLCAweDAwLAorCTB4ODMsIDB4OTQsIDB4MDAsIDB4M2EsIDB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MTQsIDB4ODcsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg1OCwgMHgwMSwgMHgyMCwgMHgwOCwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDYwLCAweDAxLCAweDIwLCAweDE2LCAweGUwLCAweGIxLCAweDAxLCAweDAwLCAweGMxLCAweDkyLCAweDAwLCAweDEwLAorCTB4MzIsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MmIsIDB4OTAsIDB4MDAsIDB4NDAsIDB4MTMsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHg4YywgMHg5MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHg3MywgMHg5MSwgMHhhMiwgMHgwOCwKKwkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDgyLCAweDAwLCAweDAyLCAweDA0LCAweGRjLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4MDMsIDB4ZjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsCisJMHgwMCwgMHhjMCwgMHgwMSwgMHgwMCwgMHg2YywgMHg5MSwgMHgzNywgMHg1YywgMHg2MSwgMHgzMSwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDFiLCAweDYyLCAweGIxLCAweDAxLCAweDAwLCAweDcwLCAweDkxLCAweDI4LCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4NmQsIDB4OTEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHg3MCwgMHg5MSwgMHhhOCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDE0LCAweDg3LCAweDE3LCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsCisJMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg4YywgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGYwLCAweDhlLCAweGIwLCAweDAxLCAweDAwLCAweDgwLCAweDkzLCAweDAwLCAweDQwLAorCTB4MTMsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODUsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHhiNywgMHg5MywgMHgwMCwgMHg0MSwgMHg4NywgMHgzMCwgMHgwMSwgMHgwMCwgMHgzYywgMHg5MywgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDEwLCAweDQyLCAweGM5LCAweDAxLCAweDAwLAorCTB4ODIsIDB4OTEsIDB4MjIsIDB4NDAsIDB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsCisJMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKKwkweDdlLCAweDkxLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweGFmLCAweDgyLCAweDAwLCAweDg4LAorCTB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgyZCwgMHg4ZSwgMHgyMiwgMHgwOSwgMHg4MCwgMHgzMCwgMHgwMCwgMHgwMCwgMHhmNCwgMHg5NCwgMHgwMCwgMHg0MCwKKwkweDEzLCAweDMwLCAweDAxLCAweDAwLCAweDJkLCAweDhlLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MTQsIDB4MDAsIDB4MmQsIDB4NDUsIDB4MWYsIDB4OTAsIDB4MDEsIDB4MDAsIDB4NzUsIDB4OGUsIDB4MDAsIDB4NDQsCisJMHgxOSwgMHg5MCwgMHgwMCwgMHgwMCwgMHg4YSwgMHg5MSwgMHhhMiwgMHg0MSwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDRhLCAweDFmLCAweDkwLCAweDAxLCAweDAwLCAweGRkLCAweDhmLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4ODMsIDB4OTMsIDB4MDAsIDB4NGEsIDB4MWYsIDB4MTAsIDB4MDEsIDB4MDAsCisJMHgzYywgMHg5MywgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgyYiwgMHg5MCwgMHgwMCwgMHgwMSwKKwkweDJjLCAweGIwLCAweDAwLCAweDAwLCAweGMxLCAweDkyLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4MmIsIDB4OTAsIDB4MDAsIDB4MTAsIDB4MzIsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZWMsIDB4OGUsIDB4MDAsIDB4NDUsCisJMHgxZiwgMHg5MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgzNywgMHhjMywgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDMzLCAweGMzLCAweDAxLCAweDAwLCAweDM2LCAweDAwLCAweDAwLCAweDAxLAorCTB4MDIsIDB4Y2MsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDIsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHg5NiwgMHg5MSwgMHg4NSwgMHgxNywgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5ZiwgMHg0OCwKKwkweDAzLCAweGQwLCAweDAwLCAweDAwLCAweDk4LCAweDkxLCAweDljLCAweDE3LCAweDgwLCAweDMyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4OWYsIDB4NGMsIDB4MDMsIDB4ZDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDEsCisJMHgzNCwgMHhjMywgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MCwgMHgwMCwgMHgwMywgMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDRhLCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg5ZCwgMHg5MiwgMHgwMCwgMHg0MSwgMHhlMSwgMHgzMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHg0MywKKwkweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDQwLCAweGYxLCAweDk5LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDgsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDksCisJMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMywgMHhlMCwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQzLAorCTB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTgsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHhhNCwgMHg5MSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhiYSwgMHgwMCwgMHgyMCwgMHg0MCwKKwkweGU1LCAweGIxLCAweDAxLCAweDAwLCAweGIwLCAweDAwLCAweDJmLCAweDAxLCAweDhjLCAweGQwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsIDB4ZTAsIDB4YzEsIDB4MDEsIDB4MDAsIDB4YWMsIDB4MDAsIDB4MmYsIDB4NDAsCisJMHgxMywgMHhiMCwgMHgwMSwgMHgwMCwgMHhjYywgMHgwMCwgMHgyZCwgMHgwMSwgMHhlMCwgMHhjMSwgMHgwMSwgMHgwMCwKKwkweGFlLCAweDkxLCAweDljLCAweDE3LCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDg0LCAweDk1LCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4YjAsIDB4OTEsIDB4MjIsIDB4NDcsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1ZiwgMHgxMywgMHg5MCwgMHgwMSwgMHgwMCwgMHgyZCwgMHg5NSwgMHgwMCwgMHg0NywKKwkweDE5LCAweDEwLCAweDAxLCAweDAwLCAweGMwLCAweDAwLCAweDJkLCAweDQ0LCAweDFmLCAweDkwLCAweDAxLCAweDAwLAorCTB4YzQsIDB4MDAsIDB4MmQsIDB4ZjAsIDB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NjEsIDB4OTUsIDB4MDAsIDB4ZjAsCisJMHg4NCwgMHhiMCwgMHgwMCwgMHgwMCwgMHg5MCwgMHgwMCwgMHgyZCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweGM1LCAweDkxLCAweGEyLCAweDRiLCAweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDE4LCAweDkyLCAweGEyLCAweDRjLAorCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4YzUsIDB4OTEsIDB4MWYsIDB4MWMsIDB4ZTAsIDB4NmQsIDB4MDAsIDB4MDAsCisJMHhjOCwgMHg5MSwgMHhhMiwgMHgwMSwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHhhOCwgMHgwMCwgMHgyZCwgMHg0NiwKKwkweDhmLCAweGIwLCAweDAxLCAweDAwLCAweGJlLCAweDkxLCAweDFmLCAweDFjLCAweGUwLCAweDZkLCAweDAwLCAweDAwLAorCTB4YjQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4YzAsIDB4OTEsIDB4MjIsIDB4ZjAsCisJMHgzYSwgMHg2YywgMHgwMCwgMHgwMCwgMHgxNSwgMHg5MiwgMHgxZiwgMHhmMCwgMHgzYSwgMHg2YywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweGEyLCAweDQwLCAweDgwLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDRmLAorCTB4OGYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4OGEsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgxNiwgMHg5MiwgMHgyMCwgMHg0MiwgMHhlNywgMHg2ZCwgMHgwMCwgMHgwMCwgMHhjNCwgMHg5MSwgMHgyMiwgMHg0MCwKKwkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDU5LCAweDhmLCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4ODAsIDB4NTgsIDB4OGYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YzcsIDB4OTEsIDB4MjIsIDB4NDAsCisJMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg1YywgMHg4ZiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDgwLCAweDViLCAweDhmLCAweGIwLCAweDAxLCAweDAwLCAweGFjLCAweDAwLCAweDAwLCAweDQwLAorCTB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4YjAsIDB4MDAsIDB4MmQsIDB4ZjAsIDB4ODQsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHhjYywgMHg5MSwgMHhhMiwgMHg0MiwgMHgyNCwgMHg2YywgMHgwMCwgMHgwMCwgMHhkNSwgMHg5MSwgMHgyMywgMHhmMCwKKwkweDAyLCAweDZjLCAweDAwLCAweDAwLCAweGQyLCAweDkxLCAweGEyLCAweGYwLCAweDgwLCAweDMyLCAweDAwLCAweDAwLAorCTB4MTcsIDB4OTIsIDB4YTIsIDB4NDIsIDB4MjQsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MTcsIDB4OTIsIDB4YTIsIDB4NDEsCisJMHgwMywgMHg2YywgMHgwMCwgMHgwMCwgMHhkMSwgMHg5MSwgMHhhMiwgMHg0MCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDgwLCAweDUxLCAweDhmLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDUyLAorCTB4OGYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MTcsIDB4OTIsIDB4MWYsIDB4MTIsIDB4ODQsIDB4NTAsIDB4MDAsIDB4MDAsCisJMHgxNywgMHg5MiwgMHhhMCwgMHgwMSwgMHg4NCwgMHg2YywgMHgwMCwgMHgwMCwgMHhjNSwgMHg5MSwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDhiLCAweDAwLCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLAorCTB4MDAsIDB4OTIsIDB4YTIsIDB4NDYsIDB4ZTcsIDB4N2QsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHhmMiwgMHg5MSwgMHgyMiwgMHhmMCwgMHgxNCwgMHgzMCwgMHgwMCwgMHgwMCwKKwkweGRlLCAweDkxLCAweDIwLCAweDBhLCAweDAyLCAweDZjLCAweDAwLCAweDAwLCAweGVmLCAweDkxLCAweDAzLCAweDFlLAorCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ZGQsIDB4OTEsIDB4YTIsIDB4NDAsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg4MCwgMHg0NCwgMHg4ZiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0OSwKKwkweDhmLCAweGIwLCAweDAxLCAweDAwLCAweGUzLCAweDkxLCAweDIyLCAweDBhLCAweDAyLCAweDZjLCAweDAwLCAweDAwLAorCTB4ZTYsIDB4OTEsIDB4YTIsIDB4NDEsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4ZTIsIDB4OTEsIDB4YTIsIDB4NDAsCisJMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg1NSwgMHg4ZiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDgwLCAweDU2LCAweDhmLCAweGIwLCAweDAxLCAweDAwLCAweGU1LCAweDkxLCAweGEyLCAweDQwLAorCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDMsIDB4OGYsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg4MCwgMHg0OCwgMHg4ZiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwKKwkweDgyLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBhLCAweDgyLCAweGQwLCAweDAxLCAweDAwLAorCTB4ZWMsIDB4OTEsIDB4MjAsIDB4OTEsIDB4ODMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4ZWIsIDB4OTEsIDB4YTIsIDB4NDAsCisJMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgyNiwgMHgwMCwgMHg4MCwgMHg0MCwgMHg4ZiwgMHg5OCwgMHgwMSwgMHgwMCwKKwkweDI3LCAweDAwLCAweDgwLCAweDQwLCAweDhmLCAweDk4LCAweDAxLCAweDAwLCAweGVlLCAweDkxLCAweGEyLCAweDQwLAorCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MWYsIDB4MDAsIDB4ODAsIDB4NDAsIDB4OGYsIDB4OTgsIDB4MDEsIDB4MDAsCisJMHgyMCwgMHgwMCwgMHg4MCwgMHg0MCwgMHg4ZiwgMHg5OCwgMHgwMSwgMHgwMCwgMHhmMSwgMHg5MSwgMHhhMiwgMHg0MCwKKwkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDIyLCAweDAwLCAweDgwLCAweDQwLCAweDhmLCAweDk4LCAweDAxLCAweDAwLAorCTB4MjMsIDB4MDAsIDB4ODAsIDB4NDAsIDB4OGYsIDB4OTgsIDB4MDEsIDB4MDAsIDB4ODgsIDB4MDAsIDB4MmQsIDB4NDQsCisJMHg4ZiwgMHhiMCwgMHgwMSwgMHgwMCwgMHhmYiwgMHg5MSwgMHhhMiwgMHg0MSwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwKKwkweGY4LCAweDkxLCAweGEyLCAweDQzLCAweDNkLCAweDdjLCAweDAwLCAweDAwLCAweGY4LCAweDkxLCAweGEyLCAweGYyLAorCTB4MDIsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTIsIDB4NDAsIDB4ODAsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg4MCwgMHg0OSwgMHg4ZiwgMHhiMCwgMHgwMSwgMHgwMCwgMHhmYSwgMHg5MSwgMHhhMiwgMHg0MCwKKwkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQzLCAweDhmLCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4ODAsIDB4NDgsIDB4OGYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ZjgsIDB4OTEsIDB4YTAsIDB4OTEsCisJMHgwMywgMHg2YywgMHgwMCwgMHgwMCwgMHhmNiwgMHg5MSwgMHgyMiwgMHg0MywgMHgzZCwgMHg3YywgMHgwMCwgMHgwMCwKKwkweGZmLCAweDkxLCAweGEyLCAweDQwLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDI4LCAweDAwLCAweDgwLCAweDQwLAorCTB4OGYsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MjksIDB4MDAsIDB4ODAsIDB4NDAsIDB4OGYsIDB4OTgsIDB4MDEsIDB4MDAsCisJMHgxNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHgwOSwgMHg5MiwgMHhhMiwgMHhmMCwKKwkweDE0LCAweDMwLCAweDAwLCAweDAwLCAweDg4LCAweDAwLCAweDJkLCAweDQ0LCAweDhmLCAweGIwLCAweDAxLCAweDAwLAorCTB4MDYsIDB4OTIsIDB4YTIsIDB4ZjIsIDB4MDIsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTIsIDB4NDAsCisJMHg4MCwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0OSwgMHg4ZiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweGY4LCAweDkxLCAweDIyLCAweDQxLCAweDE5LCAweDdjLCAweDAwLCAweDAwLCAweGY2LCAweDkxLCAweDIwLCAweDkxLAorCTB4MDMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4OTEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwZCwgMHg5MiwgMHgyMCwgMHgwYSwgMHgwMiwgMHg2YywgMHgwMCwgMHgwMCwgMHgwYywgMHg5MiwgMHhhMiwgMHg0MCwKKwkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQ0LCAweDhmLCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4ODAsIDB4NDksIDB4OGYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MTIsIDB4OTIsIDB4MjIsIDB4MGEsCisJMHgwMiwgMHg2YywgMHgwMCwgMHgwMCwgMHhlNiwgMHg5MSwgMHhhMiwgMHg0MSwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwKKwkweDExLCAweDkyLCAweGEyLCAweDQwLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDU1LAorCTB4OGYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NTYsIDB4OGYsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgxNCwgMHg5MiwgMHhhMiwgMHg0MCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MywKKwkweDhmLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQ4LCAweDhmLCAweGIwLCAweDAxLCAweDAwLAorCTB4MWEsIDB4OTIsIDB4MDAsIDB4NDMsIDB4OTUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MWEsIDB4OTIsIDB4MDAsIDB4NDEsCisJMHg5NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgxYSwgMHg5MiwgMHgwMCwgMHg0MiwgMHg5NSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDFhLCAweDkyLCAweDAwLCAweDQ0LCAweDk1LCAweGIwLCAweDAwLCAweDAwLCAweDFhLCAweDkyLCAweDAwLCAweDRjLAorCTB4OTUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4YzksIDB4OTQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHgxZCwgMHg5MiwgMHhhMiwgMHg0MCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0YiwKKwkweDhmLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDRjLCAweDhmLCAweGIwLCAweDAxLCAweDAwLAorCTB4MmQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4MmUsIDB4MDAsIDB4MmYsIDB4ZjMsCisJMHg4NCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgyMiwgMHg5MiwgMHhhMiwgMHhmMywgMHg5NiwgMHgzMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDgwLCAweDQwLCAweDAxLCAweGIwLCAweDAxLCAweDAwLCAweDJkLCAweDAwLCAweDJhLCAweDQxLAorCTB4ZTcsIDB4ZDEsIDB4MDEsIDB4MDAsIDB4ZDQsIDB4MDAsIDB4M2QsIDB4NDEsIDB4ODUsIDB4ZTAsIDB4MDEsIDB4MDAsCisJMHgwYiwgMHgwMCwgMHgwMCwgMHhmMiwgMHgwMCwgMHhlNCwgMHgwMSwgMHgwMCwgMHgyOCwgMHg5MiwgMHgyMiwgMHg1YSwKKwkweDAxLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDFmLCAweDkwLCAweDAxLCAweDAwLAorCTB4MjksIDB4OTIsIDB4MDAsIDB4NWEsIDB4MDEsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHgxZiwgMHg4MCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2MywgMHg0MSwgMHg4NSwgMHhjMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweGEwLCAweGE1LCAweDg1LCAweDZjLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGUzLCAweDQwLAorCTB4ODUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MGMsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsCisJMHgxMiwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4NywgMHg5OCwgMHgwMSwgMHgwMCwgMHhjNiwgMHg5NSwgMHgwMCwgMHhmMCwKKwkweDhjLCAweGIwLCAweDAwLCAweDAwLCAweDM2LCAweDkyLCAweDIyLCAweDQwLCAweDBmLCAweDZjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MmYsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MzMsIDB4OTIsIDB4YTIsIDB4NGIsCisJMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHgzNCwgMHg5MiwgMHgyMiwgMHhmMCwgMHgxOCwgMHg2YywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDYwLCAweDRiLCAweDE5LCAweDkwLCAweDAxLCAweDAwLCAweGZmLCAweDkyLCAweDAwLCAweDA3LAorCTB4MTAsIDB4MzAsIDB4MDEsIDB4MDAsIDB4ZjksIDB4ODIsIDB4MDAsIDB4NDAsIDB4MDUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgzOCwgMHg5MiwgMHgyMiwgMHg1YSwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHg4NSwgMHg5MiwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMwLCAweDAxLCAweDAwLCAweGY5LCAweDgyLCAweDAwLCAweDQwLCAweDA1LCAweGIwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MmYsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjAsIDB4NGIsCisJMHgxOSwgMHg5MCwgMHgwMSwgMHgwMCwgMHhmZiwgMHg5MiwgMHgwMCwgMHgwNywgMHgxMCwgMHgzMCwgMHgwMSwgMHgwMCwKKwkweGY5LCAweDgyLCAweDAwLCAweDQwLCAweDA1LCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDJmLCAweDA1LAorCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjAsIDB4NGIsIDB4MTksIDB4OTAsIDB4MDEsIDB4MDAsCisJMHhmZiwgMHg5MiwgMHgwMCwgMHgwNywgMHgxMCwgMHgzMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwKKwkweDA1LCAweGIwLCAweDAxLCAweDAwLCAweDQxLCAweDkyLCAweDMzLCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4NDQsIDB4OTIsIDB4YTEsIDB4YWQsIDB4OTUsIDB4MjAsIDB4MDAsIDB4MDAsIDB4NTIsIDB4OTIsIDB4MTMsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMywgMHg0YSwgMHg1YSwgMHg4MywgMHgwMSwgMHgwMCwKKwkweDMwLCAweDAwLCAweDM5LCAweDQ1LCAweDk1LCAweGUwLCAweDAxLCAweDAwLCAweDFmLCAweDAwLCAweDAwLCAweDBmLAorCTB4NWUsIDB4ZDgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWEsIDB4NWYsIDB4OTAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0NSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwKKwkweDQ4LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDRhLCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MGMsIDB4NTgsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDcsCisJMHg0ZSwgMHhiMCwgMHgwMSwgMHgwMCwgMHhhMiwgMHg4NCwgMHgwMCwgMHg0MCwgMHg1ZCwgMHg5OCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDU4LCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRhLAorCTB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTgsIDB4NDEsIDB4OTcsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHg0ZiwgMHg5MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwKKwkweDk3LCAweGIwLCAweDAxLCAweDAwLCAweDUzLCAweDkyLCAweDYwLCAweDA3LCAweDk2LCAweDMwLCAweDAwLCAweDAwLAorCTB4ZmYsIDB4ZmYsIDB4MDAsIDB4NGIsIDB4ODQsIDB4ODksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzAsIDB4YzIsCisJMHgyNCwgMHhiMCwgMHgwMSwgMHgwMCwgMHg1ZCwgMHg5MiwgMHhhMiwgMHg0NSwgMHgyNSwgMHg3YywgMHgwMCwgMHgwMCwKKwkweDU3LCAweDkyLCAweDMxLCAweDIwLCAweDg1LCAweDMwLCAweDAwLCAweDAwLCAweDVlLCAweDkyLCAweDIyLCAweDEyLAorCTB4NDgsIDB4N2YsIDB4MDAsIDB4MDAsIDB4NTgsIDB4MDQsIDB4MTEsIDB4MTIsIDB4NDgsIDB4MDMsIDB4MDEsIDB4MDAsCisJMHgxMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHg5NiwgMHhlNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YiwKKwkweDFlLCAweDk0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDVhLCAweDFmLCAweDkwLCAweDAxLCAweDAwLAorCTB4NWQsIDB4OTIsIDB4MzEsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjQsCisJMHgyNCwgMHhiMCwgMHgwMSwgMHgwMCwgMHg1ZSwgMHg5MiwgMHgyMiwgMHgxMiwgMHg0OCwgMHg3ZiwgMHgwMCwgMHgwMCwKKwkweDU4LCAweDA0LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJmLCAweDA1LAorCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NmIsIDB4OTIsIDB4MGIsIDB4ZjAsIDB4ODQsIDB4MzAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgxMSwgMHgxMiwgMHg0OCwgMHg4MywgMHgwMSwgMHgwMCwgMHg2OCwgMHg5MiwgMHgyMiwgMHg1MCwKKwkweDg1LCAweDcwLCAweDAwLCAweDAwLCAweDVlLCAweDAxLCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLAorCTB4MmEsIDB4OTQsIDB4MDAsIDB4ZjIsIDB4OTYsIDB4MzAsIDB4MDEsIDB4MDAsIDB4OTMsIDB4MDQsIDB4MDAsIDB4MTIsCisJMHg5NCwgMHgzMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1YSwgMHgxZiwgMHg5MCwgMHgwMSwgMHgwMCwKKwkweDEwLCAweDAwLCAweDAwLCAweDEyLCAweDk2LCAweGU0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDRiLAorCTB4MWUsIDB4OTQsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4MTAsIDB4ZjQsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHhiNywgMHgzZiwgMHg0MywgMHgxMSwgMHhmMCwgMHgwMSwgMHgwMCwgMHgwNywgMHgwMCwgMHgwMCwgMHgwOCwKKwkweDhhLCAweDg4LCAweDAxLCAweDAwLCAweDZlLCAweDkyLCAweDMwLCAweGExLCAweDBjLCAweDMwLCAweDAwLCAweDAwLAorCTB4NzEsIDB4OTIsIDB4MjIsIDB4NDUsIDB4ZTYsIDB4N2QsIDB4MDAsIDB4MDAsIDB4NWUsIDB4OTIsIDB4MTAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyYSwgMHg0NSwgMHhlNiwgMHg5MSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDEwLCAweDEyLCAweDQ4LCAweDgzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDExLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjAsIDB4NGIsIDB4ODUsIDB4ODAsIDB4MDEsIDB4MDAsCisJMHg1ZSwgMHgwMSwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHgyYSwgMHg5NCwgMHgwMCwgMHhmMiwKKwkweDk2LCAweDMwLCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDEwLCAweDQ0LCAweGM5LCAweDAxLCAweDAwLAorCTB4ZDgsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MmUsIDB4MDAsIDB4MmQsIDB4MDUsCisJMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg3YywgMHg5MiwgMHgyMiwgMHg0MCwgMHhlNywgMHg2ZCwgMHgwMCwgMHgwMCwKKwkweDgwLCAweDAwLCAweDAwLCAweDQwLCAweDgwLCAweGM4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDksIDB4MDAsIDB4MDAsIDB4MDgsIDB4ODYsIDB4ZTQsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg2OCwgMHhhNywgMHg4NywgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwKKwkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGIxLCAweDAxLCAweDAwLAorCTB4ODAsIDB4OTIsIDB4YTgsIDB4MDUsIDB4ZTAsIDB4MzEsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MTIsCisJMHg5NiwgMHhlNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwMCwgMHg0YiwgMHg5NiwgMHhkYywgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDgwLCAweDRiLCAweDFlLCAweDk0LCAweDAxLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDBmLAorCTB4ODQsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4MWYsIDB4MDAsIDB4MDAsIDB4NDIsIDB4ODQsIDB4ODgsIDB4MDEsIDB4MDAsCisJMHg4OSwgMHg5MiwgMHgyMiwgMHg0MCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHg4YSwgMHg5MiwgMHgwMCwgMHg0MiwKKwkweDY4LCAweGIxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLCAweDZhLCAweGIxLCAweDAxLCAweDAwLAorCTB4OGEsIDB4OTIsIDB4MzEsIDB4NWEsIDB4MWYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OTEsIDB4NDIsCisJMHg0OCwgMHg5MywgMHgwMSwgMHgwMCwgMHg4YywgMHg5MiwgMHgzNSwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDZkLCAweDAwLCAweDAwLCAweDQwLCAweDYxLCAweDk5LCAweDAxLCAweDAwLCAweDkxLCAweDkyLCAweDI4LCAweGIxLAorCTB4MmMsIDB4MzAsIDB4MDAsIDB4MDAsIDB4OGQsIDB4OTIsIDB4MjIsIDB4NGQsIDB4NzUsIDB4N2QsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg5NSwgMHg0MCwgMHgxMSwgMHhiMCwgMHgwMSwgMHgwMCwgMHg2ZCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDYxLCAweDk5LCAweDAxLCAweDAwLCAweDkxLCAweDkyLCAweGE4LCAweGIxLCAweDEwLCAweDMwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4OTUsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4N2YsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwgMHg5OCwgMHg5MiwgMHgyOCwgMHhiMSwgMHgxMCwgMHgzMCwgMHgwMCwgMHgwMCwKKwkweDk0LCAweDkyLCAweDlmLCAweGJhLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQwLAorCTB4MTEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MjQsIDB4MTEsIDB4ODQsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1ZiwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwKKwkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGE4LCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4OWEsIDB4OTIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4YWMsIDB4OTQsIDB4MDAsIDB4NDAsCisJMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwgMHg5ZSwgMHg5MiwgMHgzMiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweGE0LCAweDkyLCAweDIyLCAweGY4LCAweDk2LCAweDMwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweGY4LAorCTB4OTAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4OTIsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMSwgMHgwMCwgMHgwMCwgMHg0YiwgMHhmMCwgMHhjZCwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHg5MiwgMHg0OCwKKwkweGUwLCAweGM5LCAweDAxLCAweDAwLCAweDZjLCAweDAwLCAweDAwLCAweDQwLCAweDYxLCAweDk5LCAweDAxLCAweDAwLAorCTB4YTgsIDB4OTIsIDB4MjgsIDB4YjEsIDB4OTIsIDB4MzAsIDB4MDAsIDB4MDAsIDB4YTQsIDB4OTIsIDB4MjIsIDB4NGMsCisJMHg3NSwgMHg3ZCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgxMiwgMHg0MCwgMHg5MSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDZjLCAweDAwLCAweDAwLCAweDQwLCAweDYxLCAweDk5LCAweDAxLCAweDAwLCAweGE4LCAweDkyLCAweGE4LCAweGIxLAorCTB4OTAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4NDgsIDB4OTYsIDB4ODgsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0YiwgMHg5MCwgMHhkMCwgMHgwMSwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg0YiwKKwkweGYwLCAweGNkLCAweDAxLCAweDAwLCAweDIwLCAweDAwLCAweDAwLCAweDQ4LCAweGYwLCAweGM5LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4OTIsIDB4NDksIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MGMsIDB4MDAsIDB4MmQsIDB4MTAsCisJMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhmZiwgMHgwNywgMHgwMCwgMHgwOCwgMHg4MiwgMHg4YywgMHgwMSwgMHgwMCwKKwkweGZmLCAweDA3LCAweDAwLCAweGYwLCAweDAwLCAweDhjLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGEyLCAweDQxLAorCTB4MDAsIDB4ZWMsIDB4MDAsIDB4MDAsIDB4YjUsIDB4OTIsIDB4MjIsIDB4MWEsIDB4MDAsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHg5OSwgMHg5MiwgMHgwMCwgMHgwMCwgMHgzNCwgMHgzMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwKKwkweDQ5LCAweGMxLCAweDAxLCAweDAwLCAweGIxLCAweDkyLCAweGEyLCAweDQxLCAweDIzLCAweDUwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MGMsIDB4MDAsIDB4MmQsIDB4MTAsCisJMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhmZiwgMHgwNywgMHgwMCwgMHgxNSwgMHg4MiwgMHg4YywgMHgwMSwgMHgwMCwKKwkweGZmLCAweDA3LCAweDAwLCAweGYwLCAweDAwLCAweDhjLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGEyLCAweDQxLAorCTB4MDAsIDB4ZWMsIDB4MDAsIDB4MDAsIDB4YmUsIDB4OTIsIDB4MjIsIDB4MGQsIDB4MDAsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHg5OSwgMHg5MiwgMHgwMCwgMHgwMCwgMHgxYSwgMHgzMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwKKwkweDQ5LCAweGMxLCAweDAxLCAweDAwLCAweGJhLCAweDkyLCAweGEyLCAweDQxLCAweDIzLCAweDUwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4YzMsIDB4OTIsIDB4ODMsIDB4MWUsCisJMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHgxOSwgMHg5MCwgMHgwMSwgMHgwMCwKKwkweDI0LCAweDAwLCAweDJkLCAweDAxLCAweDJjLCAweGIwLCAweDAxLCAweDAwLCAweDI4LCAweDAwLCAweDJkLCAweGYwLAorCTB4MTYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MjIsIDB4MDAsIDB4MmQsIDB4ZjAsIDB4MjYsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgxNCwgMHgwMCwgMHgyZiwgMHhmMiwgMHgwYywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwKKwkweGUxLCAweGIxLCAweDAxLCAweDAwLCAweDMwLCAweDAwLCAweDAwLCAweDQwLCAweDk3LCAweDk4LCAweDAxLCAweDAwLAorCTB4NjAsIDB4OTcsIDB4MmUsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhjYSwgMHg5MiwgMHhhMiwgMHg0MSwgMHg5NywgMHg1MCwgMHgwMCwgMHgwMCwKKwkweDY0LCAweDk3LCAweDNlLCAweDQzLCAweDlkLCAweGUwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQwLAorCTB4ZTEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NjQsIDB4OTcsIDB4M2UsIDB4NDMsIDB4OWQsIDB4ZTAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg4MCwgMHgwYiwgMHhlOCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg2NCwgMHg5NywgMHgzZiwgMHg0MywKKwkweDlkLCAweGUwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLCAweDE2LCAweGMwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsIDB4ZTEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NjQsIDB4OTcsIDB4M2YsIDB4NDMsCisJMHg5ZCwgMHhlMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmNCwgMHgxNiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDgwLCAweDQwLCAweGUxLCAweGIxLCAweDAxLCAweDAwLCAweDYwLCAweDE3LCAweDNkLCAweDQzLAorCTB4OWQsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDAsIDB4ODAsIDB4YTEsIDB4MTYsIDB4ZTQsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHhiNSwgMHgwMCwgMHgwZCwgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHhkOSwgMHg5MiwgMHgzMCwgMHg0NywKKwkweDE3LCAweDA0LCAweDAwLCAweDAwLCAweGRjLCAweDkyLCAweGEyLCAweDBiLCAweGU2LCAweDdkLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4OTAsIDB4NDIsIDB4ODEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4YjcsIDB4MDAsIDB4MGQsCisJMHg0NiwgMHhjOSwgMHgwMSwgMHgwMCwgMHhlMCwgMHg5MiwgMHhhMiwgMHgwYiwgMHhlNiwgMHg3ZCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDBiLCAweGU2LCAweDkxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDkwLCAweDQxLAorCTB4ODEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCisJMHhlMSwgMHg5MiwgMHg0MCwgMHgwNywgMHg5NiwgMHgzMCwgMHgwMCwgMHgwMCwgMHg5ZCwgMHgwNCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGViLCAweDkyLCAweGEyLCAweDQ1LCAweDk1LCAweDdjLCAweDAwLCAweDAwLAorCTB4MDEsIDB4OTcsIDB4M2YsIDB4NDEsIDB4OTUsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjMsCisJMHg5NiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZSwgMHhlNiwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDQwLCAweDk3LCAweDNlLCAweDQwLCAweDk3LCAweGUwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRlLAorCTB4ZTYsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4OTcsIDB4M2UsIDB4NDAsIDB4OWQsIDB4ZTAsIDB4MDEsIDB4MDAsCisJMHhmZSwgMHg5MiwgMHgwMCwgMHgzYiwgMHhlNywgMHhiMSwgMHgwMCwgMHgwMCwgMHhlYiwgMHg5MiwgMHgzMCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweGY1LCAweDkyLCAweGEyLCAweDBiLCAweGU2LCAweDdkLCAweDAwLCAweDAwLAorCTB4MDAsIDB4YjUsIDB4MDAsIDB4MGQsIDB4NDYsIDB4YzksIDB4MDEsIDB4MDAsIDB4ZjEsIDB4OTIsIDB4YTIsIDB4MGIsCisJMHhlNiwgMHg3ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDk4LCAweDQyLCAweDgxLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweGI3LCAweDAwLCAweDBkLAorCTB4NDYsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGIsIDB4ZTYsIDB4OTEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgxMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5OCwgMHg0MSwKKwkweDgxLCAweGIwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDIxLCAweGEyLCAweDk1LCAweDIwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MTAsIDB4NGEsIDB4NDQsIDB4ODMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4OTcsIDB4M2UsIDB4NDEsCisJMHg5NSwgMHhlMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZSwgMHhmNiwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDRlLCAweGU2LCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDk3LCAweDNlLCAweDQwLAorCTB4OWQsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4M2IsIDB4ZTcsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0YSwgMHg5MCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHgwNywKKwkweDkyLCAweDg5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDk4LCAweDQwLCAweDgxLCAweGIwLCAweDAxLCAweDAwLAorCTB4MDMsIDB4MDAsIDB4MDAsIDB4MDgsIDB4ODYsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4YjcsIDB4MDAsIDB4NDMsCisJMHg0NiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwNywgMHgwMCwgMHgwMCwgMHgwOCwgMHg4MiwgMHg4OCwgMHgwMSwgMHgwMCwKKwkweDAyLCAweDkzLCAweDQwLCAweDA4LCAweDk2LCAweDMwLCAweDAwLCAweDAwLCAweDlkLCAweDA0LCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MGUsIDB4OTMsIDB4MjIsIDB4NDUsIDB4OTUsIDB4N2MsIDB4MDAsIDB4MDAsCisJMHgwYSwgMHg5MywgMHgyMiwgMHg1YSwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwZiwKKwkweDk2LCAweGY0LCAweDAxLCAweDAwLCAweDA3LCAweDkzLCAweDMxLCAweDVmLCAweDk3LCAweDA0LCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MTEsIDB4NGIsIDB4NDgsIDB4OTMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGIsCisJMHg2YSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwYSwgMHg5MywgMHgzMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweGU2LCAweDgxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OTgsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHg5NywgMHgzZiwgMHg0MSwgMHg5NSwgMHhlMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMywKKwkweDk2LCAweGIwLCAweDAxLCAweDAwLCAweDQwLCAweDk3LCAweDNkLCAweDQwLCAweDk3LCAweGUwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4NjMsIDB4ZjMsIDB4ODgsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MTYsIDB4OTMsIDB4YTIsIDB4M2IsCisJMHg4OSwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YSwgMHg5MCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAxLCAweDAwLCAweDAwLCAweGE2LCAweDkyLCAweGIxLCAweDAxLCAweDAwLCAweDE3LCAweDkzLCAweDE4LCAweDRhLAorCTB4NDQsIDB4OTMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCisJMHgzMCwgMHgwMCwgMHgzOSwgMHg0NSwgMHg5NywgMHhlMCwgMHgwMSwgMHgwMCwgMHgxYywgMHg5MywgMHgyMiwgMHg1YSwKKwkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDFmLCAweDA0LCAweDAwLCAweDBmLCAweDk4LCAweGQ4LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGMsIDB4NWUsIDB4OTQsIDB4MDEsIDB4MDAsIDB4MWUsIDB4OTMsIDB4MDAsIDB4MDUsCisJMHg0YSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgxZiwgMHgwNCwgMHgwMCwgMHhhNywgMHg1ZSwgMHg4NCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDRiLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDU4LAorCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGIsIDB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHhhOCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgxZiwgMHg5MywgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDIyLCAweDkzLCAweDQwLCAweDA3LCAweDk2LCAweDMwLCAweDAwLCAweDAwLAorCTB4OWQsIDB4MDQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MjYsIDB4OTMsIDB4MjIsIDB4NDUsCisJMHg5NSwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5OCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKKwkweDliLCAweDA0LCAweDAwLCAweDRhLCAweDQ0LCAweDEzLCAweDAxLCAweDAwLCAweDAwLCAweDk3LCAweDNmLCAweDQxLAorCTB4OTUsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjMsIDB4OTYsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHg0MCwgMHg5NywgMHgzZCwgMHg0MCwgMHg5NywgMHhlMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2MywgMHhmMywKKwkweDg4LCAweGIwLCAweDAxLCAweDAwLCAweDMwLCAweDAwLCAweDM4LCAweDQ1LCAweDk3LCAweGUwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NWYsIDB4MGYsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTgsCisJMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YiwgMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDJlLCAweDkzLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDI3LCAweDkzLCAweGEyLCAweDNiLAorCTB4ODksIDB4NmMsIDB4MDAsIDB4MDAsIDB4MzAsIDB4MDAsIDB4MzgsIDB4NDUsIDB4OWQsIDB4ZTAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg5OCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHg5MywgMHgwNCwgMHgwMCwgMHgxMiwKKwkweDk0LCAweDMwLCAweDAxLCAweDAwLCAweGZmLCAweDkyLCAweDAwLCAweDVhLCAweDFmLCAweDAwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4ODAsIDB4NWEsIDB4MWYsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MTEsIDB4MDAsIDB4MDAsIDB4NGEsCisJMHhlNiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgzNCwgMHgwMCwgMHgyZiwgMHg0ZiwgMHg5NSwgMHg4NCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGYzLCAweDk2LCAweGIwLCAweDAxLCAweDAwLCAweDAxLCAweDAwLCAweDYzLCAweDRiLAorCTB4ODQsIDB4YzgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTAsIDB4NDMsIDB4ODUsIDB4NmMsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHhlMywgMHg0MCwgMHg4NSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgzMCwgMHgwMCwgMHgyZCwgMHg0NCwKKwkweDFmLCAweDkwLCAweDAxLCAweDAwLCAweDMyLCAweDAwLCAweDJkLCAweGYyLCAweDJhLCAweGIwLCAweDAxLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MjIsIDB4ZjIsIDB4MDIsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MWUsIDB4OTIsIDB4MDAsIDB4MTAsCisJMHgzMiwgMHgzMCwgMHgwMSwgMHgwMCwgMHgzMiwgMHgwMCwgMHhhMCwgMHg0MCwgMHhlNSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDk3LCAweGIwLCAweDAxLCAweDAwLCAweGYwLCAweDA3LCAweDAwLCAweDQwLAorCTB4OTksIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGEsIDB4MDIsIDB4YzAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHgwMywgMHhkMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKKwkweDk3LCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGEzLCAweDRjLCAweDAyLCAweGQwLCAweDAwLCAweDAwLAorCTB4NDUsIDB4OTMsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTgsCisJMHgzNiwgMHhiMCwgMHgwMSwgMHgwMCwgMHg1NSwgMHg5MywgMHgyMiwgMHg0MSwgMHgwMywgMHg1MCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDgwLCAweDAwLCAweDEwLCAweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLAorCTB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NzAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4ZjAsIDB4YzksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwKKwkweDYyLCAweGIxLCAweDAxLCAweDAwLCAweDRlLCAweDkzLCAweGE4LCAweDAwLCAweGUwLCAweDMxLCAweDAwLCAweDAwLAorCTB4YWYsIDB4ODIsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4OTksIDB4OTIsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHg3YywgMHg4MCwgMHgwMCwgMHgwMywgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGYwLCAweDAwLCAweGIwLCAweDAxLCAweDAwLCAweDQ5LCAweDkzLCAweDAwLCAweDVjLAorCTB4MDEsIDB4ODAsIDB4MDAsIDB4MDAsIDB4OTksIDB4OTIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgxYiwgMHgxMCwgMHhiMSwgMHgwMCwgMHgwMCwgMHg2OCwgMHgwMSwgMHgyZCwgMHgwNiwKKwkweDgyLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYyLCAweDgyLCAweGMwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDYsIDB4YzksIDB4MDEsIDB4MDAsIDB4OTQsIDB4OTIsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHg3YywgMHg5MywgMHgyMiwgMHg0MCwgMHgxMSwgMHg2YywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDY4LCAweDA4LCAweDM4LCAweDk2LCAweDAxLCAweDAwLCAweGYwLCAweDA3LCAweDAwLCAweDQxLAorCTB4ODIsIDB4Y2MsIDB4MDEsIDB4MDAsIDB4NWEsIDB4OTMsIDB4YWEsIDB4NDEsIDB4M2IsIDB4NDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgxMCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1YywKKwkweDExLCAweDgwLCAweDAxLCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweDFkLCAweDA0LCAweGNjLCAweDAxLCAweDAwLAorCTB4N2IsIDB4OTMsIDB4MjYsIDB4NDYsIDB4MjMsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDMsCisJMHgxMiwgMHhjOCwgMHgwMSwgMHgwMCwgMHg2NCwgMHgwMSwgMHgyMCwgMHhmMCwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDdhLCAweDkzLCAweDIyLCAweDQxLCAweDA1LCAweDUwLCAweDAwLCAweDAwLCAweDIwLCAweDAwLCAweDAwLCAweDAzLAorCTB4NDgsIDB4YzksIDB4MDEsIDB4MDAsIDB4MGMsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4ODYsIDB4YzgsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgyMiwgMHg0NCwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywKKwkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA5LCAweGUwLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YTAsIDB4MDAsIDB4MDAsIDB4YTQsCisJMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHg2YywgMHg5MywgMHhhOCwgMHg0NiwgMHgxZiwgMHgxMCwgMHgwMCwgMHgwMCwKKwkweDc5LCAweDkzLCAweDIyLCAweDQxLCAweDA1LCAweDUwLCAweDAwLCAweDAwLCAweDc3LCAweDkzLCAweGEyLCAweDQxLAorCTB4MjMsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTEsIDB4MWEsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwKKwkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDcyLCAweDkzLCAweGE4LCAweDQ2LCAweDIzLCAweDMwLCAweDAwLCAweDAwLAorCTB4YWYsIDB4ODIsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDMsCisJMHg0OCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwZCwgMHg0MiwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDEzLCAweGMwLCAweDAxLCAweDAwLCAweDY3LCAweDkzLCAweDAwLCAweDUwLAorCTB4NDksIDB4YzEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwNCwgMHg4MCwgMHgwMCwgMHgwMywgMHgxYSwgMHhjOCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDdiLCAweDkzLCAweDIyLCAweDQwLCAweDNiLCAweDZjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MDAsIDB4YjAsIDB4MDEsIDB4MDAsIDB4OTksIDB4OTIsIDB4MDAsIDB4NWMsCisJMHgwMSwgMHgwMCwgMHgwMSwgMHgwMCwgMHg3YywgMHg5MywgMHgwMCwgMHg0MSwgMHgzYiwgMHhkMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDhkLCAweDQ3LCAweDgwLCAweDMyLCAweDAxLCAweDAwLCAweGIwLCAweDAwLCAweDJmLCAweDVmLAorCTB4MTMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4ZjAsIDB4OGMsIDB4YzAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHg4MCwgMHgwMCwgMHgwMywgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwKKwkweDk0LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDhjLCAweGIwLCAweDAxLCAweDAwLAorCTB4ODgsIDB4OTMsIDB4OGMsIDB4ZjgsIDB4OGUsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsCisJMHgxOSwgMHg5MCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHhmOCwgMHgxNCwgMHgzMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDE2LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LAorCTB4MjYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MmUsIDB4ZjgsIDB4MGMsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwYywgMHgwMCwgMHgyYSwgMHg0YSwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyOCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweGUwLCAweGM5LCAweDAxLCAweDAwLCAweDEwLCAweDAwLCAweDIwLCAweDFiLCAweGUwLCAweGIxLCAweDAxLCAweDAwLAorCTB4OTUsIDB4OTMsIDB4MjAsIDB4MGEsIDB4MGMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsCisJMHg5NCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg5NiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDIwLCAweDAwLCAweDIwLCAweGYwLCAweGU0LCAweGIxLCAweDAxLCAweDAwLCAweDE4LCAweDAwLCAweDIwLCAweDRhLAorCTB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MWMsIDB4MDAsIDB4MjAsIDB4NGIsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg4MCwgMHg5MywgMHgwMCwgMHg0MCwgMHgxMywgMHhiMCwgMHgwMCwgMHgwMCwgMHgyYywgMHgwMCwgMHgyZCwgMHg0MiwKKwkweDE5LCAweDkwLCAweDAxLCAweDAwLCAweDJlLCAweDAwLCAweDJmLCAweGYzLCAweDgyLCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjMsIDB4OTYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4OWIsIDB4OTMsIDB4YTIsIDB4YTUsCisJMHg5NywgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MSwgMHg5NSwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDllLCAweDkzLCAweGEyLCAweDQwLCAweDk3LCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4ODMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MmQsIDB4MDAsIDB4MjAsIDB4NDAsIDB4ZTcsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg2MywgMHg0MSwgMHg5NywgMHhjMCwgMHgwMSwgMHgwMCwgMHhkNCwgMHgwMCwgMHgzZSwgMHg0MSwKKwkweDgzLCAweGUwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDgzLCAweGMwLCAweDAxLCAweDAwLAorCTB4YTMsIDB4OTMsIDB4YTAsIDB4YTUsIDB4ODMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MywgMHhiMCwgMHgwMSwgMHgwMCwgMHgyYywgMHgwMCwgMHgyMCwgMHg0MSwgMHhlNiwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweGE4LCAweDkzLCAweDIyLCAweDQwLCAweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLAorCTB4OTgsIDB4ZGMsIDB4MDEsIDB4MDAsIDB4MGIsIDB4MDAsIDB4MDAsIDB4NGMsIDB4ZTQsIDB4ZjUsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwgMHgxZiwgMHg4MCwgMHgwMSwgMHgwMCwgMHgwYiwgMHgwMCwgMHg4MCwgMHgwMCwKKwkweGU0LCAweGY1LCAweDAxLCAweDAwLCAweDlkLCAweDkyLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4MDQsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDYwLCAweDQxLCAweDg3LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDEwLAorCTB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0OCwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0OSwKKwkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweGUwLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4MTAsCisJMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOCwgMHg1ZCwgMHgwNSwgMHg5MCwgMHgwMCwgMHgwMCwKKwkweGI0LCAweDkzLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDlkLCAweDkyLCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwKKwkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MTAsCisJMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ4LCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ5LAorCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHgxMCwKKwkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGE4LCAweDVkLCAweDA1LCAweDkwLCAweDAwLCAweDAwLAorCTB4YzMsIDB4OTMsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MmQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHgyZSwgMHgwMCwgMHgyZiwgMHhmMywgMHg4NCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAxLCAweDAwLCAweDYzLCAweGYzLCAweDk2LCAweGM4LCAweDAxLCAweDAwLCAweGNiLCAweDkzLCAweDlmLCAweDQxLAorCTB4ODUsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4YTUsIDB4ODUsIDB4Y2MsIDB4MDEsIDB4MDAsCisJMHgyZCwgMHgwMCwgMHhhMCwgMHg0MiwgMHhlNiwgMHhiMSwgMHgwMSwgMHgwMCwgMHg1ZSwgMHgwMSwgMHgyZCwgMHgwMCwKKwkweDgwLCAweGIwLCAweDAxLCAweDAwLCAweGQwLCAweDkzLCAweDUyLCAweDQzLCAweDgxLCAweDYwLCAweDAwLCAweDAwLAorCTB4MDIsIDB4MDAsIDB4MDAsIDB4ZjIsIDB4ODIsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4ZDEsIDB4OTMsIDB4MDAsIDB4NDEsCisJMHg4MCwgMHg5NCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1ZiwgMHg4MSwgMHg5MCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDVlLCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTgsIDB4NDAsIDB4OTUsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHhkMiwgMHg5MywgMHg5ZSwgMHhiYiwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHhkNywgMHg5MywgMHhhMiwgMHg0MCwKKwkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDk5LCAweDkyLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4ODAsIDB4NDEsIDB4OTUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MTUsCisJMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1NCwgMHgyYiwgMHhjMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGZjLCAweDI0LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZjLAorCTB4MzgsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmUsIDB4M2MsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmZSwgMHgzYSwgMHhiMCwgMHgwMSwgMHgwMCwgMHhlYywgMHg5MywgMHg5YywgMHgxNywKKwkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweGUxLCAweDkzLCAweGEyLCAweDRhLCAweDE5LCAweDdjLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4ODAsIDB4NGMsIDB4MWYsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MGMsIDB4MDAsIDB4MDAsIDB4MWUsCisJMHg5OCwgMHhmNCwgMHgwMSwgMHgwMCwgMHhlMCwgMHg5MywgMHhhMiwgMHg0OCwgMHg5OSwgMHg2YywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDE1LCAweDQyLCAweGIxLCAweDAxLCAweDAwLCAweGUwLCAweDkzLCAweGEyLCAweDhhLAorCTB4ZjEsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MGMsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDIsIDB4Y2MsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmYywgMHgzZSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHhmNCwKKwkweDI4LCAweGNjLCAweDAxLCAweDAwLCAweGNjLCAweDAwLCAweDJkLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLAorCTB4ZWIsIDB4OTMsIDB4MjAsIDB4ZjAsIDB4M2UsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGIsCisJMHgxZiwgMHg5MCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YywgMHgyYiwgMHhjMCwgMHgwMSwgMHgwMCwKKwkweGJmLCAweDAwLCAweDJkLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweGYzLAorCTB4M2EsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmUsIDB4NGIsIDB4MTksIDB4OTAsIDB4MDEsIDB4MDAsCisJMHgwNywgMHgwMCwgMHgyYSwgMHgwYywgMHhlNCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwNCwKKwkweGU2LCAweGIxLCAweDAxLCAweDAwLCAweDE4LCAweDAwLCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLAorCTB4MWMsIDB4MDAsIDB4MmQsIDB4ZjAsIDB4MTYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MmQsIDB4ZjAsCisJMHgyNiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwYywgMHgwMCwgMHgyZiwgMHhmMiwgMHgwYywgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweGEyLCAweDA2LCAweDE0LCAweGVjLCAweDAwLCAweDAwLCAweGY4LCAweDkzLCAweDIyLCAweDQ1LAorCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTMsIDB4MDYsIDB4MmEsIDB4ZWMsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg5NCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwKKwkweDk2LCAweGIwLCAweDAxLCAweDAwLCAweDBjLCAweDAwLCAweDJkLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MmEsIDB4NGMsIDB4ZTEsIDB4YzEsIDB4MDEsIDB4MDAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MTAsCisJMHg0OCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwYSwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmMSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDE4LCAweDAwLCAweDAwLCAweDA1LCAweGYwLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRhLAorCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGIsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhhMCwgMHgwMCwgMHgwMCwgMHhhNCwKKwkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDAyLCAweDk0LCAweGE4LCAweDVjLCAweDFmLCAweDEwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4ODAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmUsIDB4MTAsCisJMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMSwgMHhmMCwgMHhjZCwgMHgwMSwgMHgwMCwKKwkweDQwLCAweDAwLCAweDAwLCAweDAzLCAweGYwLCAweGM5LCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDAwLAorCTB4ZTAsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmUsIDB4NTAsIDB4NDksIDB4YzEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwNiwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywKKwkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDBjLCAweDk0LCAweDYyLCAweDQyLCAweDYxLCAweDMxLCAweDAwLCAweDAwLAorCTB4MjAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4MGQsIDB4OTQsIDB4YTgsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDBmLCAweDk0LCAweGE4LCAweDAwLCAweGUwLCAweDMxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYyLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmUsIDB4MTAsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg0MCwgMHgwMCwgMHgwMCwgMHgwMSwgMHhmMCwgMHhjZCwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMywKKwkweGYwLCAweGM5LCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweGM5LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MmUsIDB4NTAsIDB4NDksIDB4YzEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDYsCisJMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDE5LCAweDk0LCAweDYyLCAweDQyLCAweDYxLCAweDMxLCAweDAwLCAweDAwLCAweDIwLCAweDAwLCAweDAwLCAweDEwLAorCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4MWEsIDB4OTQsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHhhMCwgMHgwMCwgMHgwMCwgMHhhNCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHgxYywgMHg5NCwgMHhhOCwgMHgwMCwKKwkweGUwLCAweDMxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYyLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAorCTB4MzAsIDB4ODAsIDB4MDAsIDB4NGEsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDYsCisJMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhjMCwgMHhhOCwgMHgzZCwgMHg0NiwgMHgwZCwgMHhlMCwgMHgwMSwgMHgwMCwKKwkweGZmLCAweDdmLCAweDAwLCAweGExLCAweGYwLCAweDg5LCAweDAxLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDA5LAorCTB4OTYsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsIDB4OTcsIDB4ZTAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg2MCwgMHhhOCwgMHg5NywgMHhjMCwgMHgwMSwgMHgwMCwgMHgyNiwgMHg5NCwgMHg2MywgMHg0MiwKKwkweDYxLCAweDMxLCAweDAwLCAweDAwLCAweDMwLCAweDAwLCAweDAwLCAweDRhLCAweDYyLCAweGM5LCAweDAxLCAweDAwLAorCTB4MjcsIDB4OTQsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjMsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHg5OSwgMHgzZiwgMHg0MiwgMHg5NywgMHhmMCwgMHgwMSwgMHgwMCwKKwkweDJiLCAweDk0LCAweDY1LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDMzLCAweDk0LCAweDIyLCAweGYzLAorCTB4NzQsIDB4MDYsIDB4MDAsIDB4MDAsIDB4M2YsIDB4MDAsIDB4MDAsIDB4ZjMsIDB4OTQsIDB4ODgsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwNywgMHhlNywgMHg4NSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3NSwgMHg1NSwKKwkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRhLCAweDYyLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4YTgsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MzAsIDB4OTQsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmNSwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGE4LCAweDM2LCAweGIwLCAweDAxLCAweDAwLCAweDQzLCAweDk0LCAweDgyLCAweDQxLAorCTB4MjMsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MzgsIDB4OTQsIDB4YTIsIDB4NDQsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsCisJMHhhNywgMHg5MSwgMHgwMCwgMHgwMSwgMHg4YywgMHgzMCwgMHgwMSwgMHgwMCwgMHgyMCwgMHg4MCwgMHgwMCwgMHgxMCwKKwkweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDNlLCAweDk0LCAweDIyLCAweDQwLCAweGUzLCAweDZkLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsCisJMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHgzYiwgMHg5NCwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweGFmLCAweDgyLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAorCTB4MjMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MzIsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHg0MywgMHg5NCwgMHgyMiwgMHg0MSwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHhhZiwgMHg5MiwgMHgwMCwgMHg0MywKKwkweDIzLCAweDMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDIzLCAweGIwLCAweDAxLCAweDAwLAorCTB4NDUsIDB4OTQsIDB4YTMsIDB4MTUsIDB4MGMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4NDYsIDB4OTQsIDB4MDAsIDB4MDYsCisJMHgwNCwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwgMHgwNCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDQ4LCAweDk0LCAweDIwLCAweDAyLCAweDFhLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBkLAorCTB4MDQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDcsIDB4OTUsIDB4MDAsIDB4MDUsIDB4NDgsIDB4MzEsIDB4MDEsIDB4MDAsCisJMHg3MiwgMHg5NCwgMHgyMiwgMHgwMiwgMHgxNCwgMHg1MCwgMHgwMCwgMHgwMCwgMHg0YywgMHg5NCwgMHhhMiwgMHgwMiwKKwkweDJhLCAweDUwLCAweDAwLCAweDAwLCAweDcyLCAweDk0LCAweGEyLCAweDQ1LCAweDFmLCAweDdjLCAweDAwLCAweDAwLAorCTB4NGUsIDB4OTQsIDB4MjIsIDB4MDIsIDB4MGMsIDB4NTAsIDB4MDAsIDB4MDAsIDB4NTcsIDB4OTQsIDB4MDAsIDB4MDIsCisJMHgxNiwgMHhjMCwgMHgwMCwgMHgwMCwgMHg1NiwgMHg5NCwgMHgyMiwgMHg1YywgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwKKwkweDMwLCAweDgwLCAweDAwLCAweDEwLCAweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDU2LCAweDk0LCAweDIyLCAweDQwLAorCTB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHg1MiwgMHg5NCwgMHhhOCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweGFmLCAweDgyLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZjEsIDB4OTMsIDB4MDAsIDB4NWMsCisJMHgxZiwgMHgwMCwgMHgwMSwgMHgwMCwgMHg3MiwgMHg5NCwgMHgyMiwgMHgxNSwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDUwLCAweDMzLCAweGMwLCAweDAxLCAweDAwLCAweDcxLCAweDk0LCAweGEyLCAweDAyLAorCTB4MWEsIDB4NTAsIDB4MDAsIDB4MDAsIDB4NjMsIDB4OTQsIDB4MjIsIDB4NDYsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsCisJMHg3MCwgMHg4MCwgMHgwMCwgMHgwMywgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NiwKKwkweDFmLCAweDgwLCAweDAxLCAweDAwLCAweDYzLCAweDk0LCAweDIyLCAweDQwLCAweGUzLCAweDZkLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsCisJMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHg1ZiwgMHg5NCwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweGFmLCAweDgyLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LAorCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MGMsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsCisJMHgxMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHgxMCwgMHhjOCwgMHgwMSwgMHgwMCwgMHgyZiwgMHgwMCwgMHgyZiwgMHg1YywKKwkweDExLCAweDgwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ3LCAweGU3LCAweDkxLCAweDAxLCAweDAwLAorCTB4ZjAsIDB4MDcsIDB4MDAsIDB4NDAsIDB4MWIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MzUsIDB4OTQsIDB4MjAsIDB4MTUsCisJMHgxYSwgMHg2YywgMHgwMCwgMHgwMCwgMHg3MCwgMHgwMCwgMHgwMCwgMHgwMywgMHg0OCwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDIyLCAweDUwLCAweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLAorCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4MDcsIDB4MDAsIDB4MDgsIDB4ZTAsIDB4OGQsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhhMCwgMHgwMCwgMHgwMCwgMHhhNCwKKwkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDZlLCAweDk0LCAweGE4LCAweDQ2LCAweDFmLCAweDEwLCAweDAwLCAweDAwLAorCTB4MzUsIDB4OTQsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDAsIDB4MDAsIDB4MzUsIDB4OTQsIDB4MDAsIDB4MDIsCisJMHgxMCwgMHhjMCwgMHgwMCwgMHgwMCwgMHg3NCwgMHg5NCwgMHhhMiwgMHg0NCwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwKKwkweGE3LCAweDkxLCAweDAwLCAweDAxLCAweDhjLCAweDMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFiLAorCTB4MTAsIDB4YjEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MTAsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsCisJMHgxMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmMSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwOCwKKwkweGYwLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE2LCAweGYwLCAweGIxLCAweDAxLCAweDAwLAorCTB4MTAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4ZTAsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsCisJMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweGE4LCAweDVjLCAweDFmLCAweDkwLCAweDAwLCAweDAwLCAweDdiLCAweDk0LCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MTcsIDB4MDAsIDB4MDAsIDB4ZDAsIDB4YTIsIDB4YzksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHhhMiwgMHg0MCwgMHgyNywgMHhlYywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyMCwKKwkweDAwLCAweGIwLCAweDAxLCAweDAwLCAweDk5LCAweDkyLCAweDAwLCAweDQxLCAweGEzLCAweDQxLCAweDAxLCAweDAwLAorCTB4N2YsIDB4OTQsIDB4MDAsIDB4NDEsIDB4MjcsIDB4ZDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDcsCisJMHg5NiwgMHhlNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YiwgMHg4MCwgMHg5NCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDU0LCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDQwLAorCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTgsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHg4NiwgMHg5NCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhkOCwgMHg5NCwgMHgwMCwgMHg0MCwKKwkweDJiLCAweDMwLCAweDAxLCAweDAwLCAweGFjLCAweDAwLCAweDJkLCAweDA2LCAweDE2LCAweGMwLCAweDAxLCAweDAwLAorCTB4OTAsIDB4MDAsIDB4MmQsIDB4ZjAsIDB4MTYsIDB4YzQsIDB4MDEsIDB4MDAsIDB4OGUsIDB4OTQsIDB4YTAsIDB4ZjAsCisJMHgxNiwgMHg0NCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgxNywgMHhjMCwgMHgwMSwgMHgwMCwKKwkweDBlLCAweDAwLCAweDAwLCAweGEyLCAweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDZjLCAweGYwLAorCTB4MzAsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YWMsIDB4MDAsIDB4MmQsIDB4NDAsIDB4ODcsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg2YywgMHhmMCwgMHgyOCwgMHhiMCwgMHgwMSwgMHgwMCwgMHg5NywgMHg5NCwgMHgyMiwgMHg0YSwKKwkweDE5LCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDMwLCAweDAwLCAweDQzLCAweDg2LCAweGM4LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MzAsIDB4MDAsIDB4MGIsIDB4MTYsIDB4YzgsIDB4MDEsIDB4MDAsIDB4OTcsIDB4OTQsIDB4YTQsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgxNywgMHhjMCwgMHgwMSwgMHgwMCwKKwkweGI4LCAweDk0LCAweDIyLCAweDA2LCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweGE0LCAweDk0LCAweGEyLCAweDA2LAorCTB4MTQsIDB4NmMsIDB4MDAsIDB4MDAsIDB4YTEsIDB4OTQsIDB4MjIsIDB4NDgsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsCisJMHg5YywgMHg5NCwgMHhhMCwgMHg0MSwgMHgxNywgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKKwkweDE3LCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDMxLCAweGMwLCAweDAxLCAweDAwLAorCTB4OTAsIDB4MDAsIDB4MjAsIDB4MTgsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4OGIsIDB4MDAsIDB4MmQsIDB4NDgsCisJMHgxOSwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4YiwgMHgwMCwgMHgyMCwgMHg0NSwgMHhlNywgMHg5MSwgMHgwMSwgMHgwMCwKKwkweGE0LCAweDk0LCAweDAwLCAweDQwLCAweDg3LCAweDkwLCAweDAwLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDQzLAorCTB4ODYsIDB4OTgsIDB4MDEsIDB4MDAsIDB4YTQsIDB4OTQsIDB4YTAsIDB4NDgsIDB4MTcsIDB4NDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgxNywgMHhjMCwgMHgwMSwgMHgwMCwgMHhiMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDEwLCAweDUwLCAweDAwLCAweDQzLCAweGZjLCAweGM5LCAweDAxLCAweDAwLAorCTB4MGYsIDB4OTUsIDB4MDAsIDB4MzAsIDB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHhlNSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhhZiwgMHg5NCwgMHgyMiwgMHg0YSwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwKKwkweDA4LCAweDAwLCAweDAwLCAweGEyLCAweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweGNjLCAweDAwLCAweDJkLCAweGFiLAorCTB4ZjksIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YWIsIDB4MTcsIDB4YzAsIDB4MDEsIDB4MDAsCisJMHhhZSwgMHg5NCwgMHhhMCwgMHhmMCwgMHgxNiwgMHg0NCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKKwkweDE3LCAweGMwLCAweDAxLCAweDAwLCAweGIzLCAweDk0LCAweDY0LCAweGYwLCAweDgyLCAweGIwLCAweDAwLCAweDAwLAorCTB4YTQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDcsIDB4OTksIDB4MDEsIDB4MDAsIDB4YjMsIDB4OTQsIDB4YTIsIDB4ZjIsCisJMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHhlNSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDhjLCAweDAwLCAweDIwLCAweDE4LCAweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDkwLCAweDAwLCAweDAwLCAweDQwLAorCTB4NDUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjAsIDB4MDYsIDB4MzAsIDB4YzAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg4NiwgMHgwYywgMHg4MCwgMHhiMiwgMHgwMCwgMHgwMCwgMHhiYywgMHgwMCwgMHgyZCwgMHg0NiwKKwkweDE5LCAweDkwLCAweDAxLCAweDAwLCAweGEwLCAweDAwLCAweGEwLCAweGYyLCAweGU0LCAweGIxLCAweDAxLCAweDAwLAorCTB4YjAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4MTAsIDB4NTAsIDB4MDAsIDB4NDMsCisJMHhmYywgMHhjOSwgMHgwMSwgMHgwMCwgMHgwZiwgMHg5NSwgMHgwMCwgMHgzMCwgMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweGEyLCAweDRhLCAweDE5LCAweGZjLCAweDAwLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweGEyLAorCTB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4Y2MsIDB4MDAsIDB4MmQsIDB4YWIsIDB4ZjksIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhhYiwgMHgxNywgMHhjMCwgMHgwMSwgMHgwMCwgMHhjMSwgMHg5NCwgMHhhMCwgMHhmMCwKKwkweDE2LCAweDQ0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDE3LCAweGMwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4ZTQsIDB4ZjAsIDB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MTAsCisJMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAzLCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHhhOCwgMHgxYiwgMHhlMCwgMHhiMSwgMHgwMCwgMHgwMCwgMHhjNiwgMHg5NCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweGYwLCAweDAwLCAweDBjLCAweDdlLCAweDg5LCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4YTYsIDB4NGMsIDB4OTUsIDB4NjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NGEsCisJMHgxOCwgMHg5NCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgxMCwgMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDA0LCAweDAwLCAweDIyLCAweDAxLCAweGYwLCAweDMxLCAweDAwLCAweDAwLCAweDIwLCAweDAwLCAweDAwLCAweDQwLAorCTB4ZjAsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTYsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHgxMCwKKwkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGE4LCAweDE1LCAweGUwLCAweGIxLCAweDAwLCAweDAwLAorCTB4ZDEsIDB4OTQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MTAsIDB4ODAsIDB4MDAsIDB4MDMsCisJMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNiwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAxLCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGU4LCAweDVmLAorCTB4MTcsIDB4OTAsIDB4MDEsIDB4MDAsIDB4NzAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsCisJMHg3YSwgMHgwMSwgMHgyZSwgMHhmZSwgMHg5MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHg4YiwgMHgwMCwgMHgyZCwgMHhmNiwKKwkweDE2LCAweGIwLCAweDAxLCAweDAwLCAweGRlLCAweDk0LCAweDIyLCAweDQzLCAweGU3LCAweDdkLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4NDUsIDB4YzEsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4YTYsCisJMHgyYSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgyOCwgMHgwMCwgMHg2ZSwgMHgwNiwgMHg4MiwgMHhjOCwgMHgwMSwgMHgwMCwKKwkweGUyLCAweDk0LCAweDIyLCAweDRhLCAweDE5LCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLAorCTB4NDUsIDB4ZDEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NmUsIDB4NGMsIDB4ODMsIDB4YzAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg5MiwgMHhjMCwgMHgwMSwgMHgwMCwgMHhlMywgMHg5NCwgMHg0MywgMHgzMCwKKwkweDNkLCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDY2LCAweDllLCAweDgzLCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MWIsIDB4NDEsIDB4M2QsIDB4YzMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCisJMHg5MiwgMHhjMCwgMHgwMSwgMHgwMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHhhMiwgMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwKKwkweDEwLCAweDAwLCAweDAwLCAweDQ5LCAweDk4LCAweGY0LCAweDAxLCAweDAwLCAweGVjLCAweDk0LCAweDI2LCAweDMwLAorCTB4OTMsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ZWMsIDB4OTQsIDB4OTAsIDB4NGMsIDB4OTIsIDB4NDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg5MywgMHhjMCwgMHgwMSwgMHgwMCwgMHhmZiwgMHhmZiwgMHg4MCwgMHg0OSwKKwkweGVjLCAweGE5LCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDEwLCAweDQ0LCAweGM5LCAweDAxLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MjIsIDB4MDEsIDB4ZjAsIDB4MzEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDksCisJMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDIwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGE4LCAweDE1LAorCTB4ZTAsIDB4YjEsIDB4MDAsIDB4MDAsIDB4ZjEsIDB4OTQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHhmZSwgMHg5NCwgMHgyMiwgMHg1ZiwgMHg4MSwgMHg3YywgMHgwMCwgMHgwMCwgMHhmZCwgMHg5NCwgMHhhMiwgMHg0MCwKKwkweDE5LCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDE5LCAweDkwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTQsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDcsCisJMHg5NiwgMHhlNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZiwgMHg5NywgMHg5NCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDRiLCAweDYyLCAweGIxLCAweDAxLCAweDAwLCAweGZkLCAweDk0LCAweDI4LCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ZmEsIDB4OTQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHhhMiwgMHgyMSwgMHg4MSwgMHg4NCwgMHgwMCwgMHgwMCwgMHgwMSwgMHg5NSwgMHhhMiwgMHg1ZiwKKwkweDgxLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGEyLCAweDQzLCAweDE5LCAweDdjLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4MTksIDB4OTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTQsCisJMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwNywgMHg5NiwgMHhlNCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDk2LCAweDk0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRiLAorCTB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTgsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHg5NSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgxOSwKKwkweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweDAyLCAweGYwLCAweDMxLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MGIsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTMsCisJMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDIwLCAweDAwLCAweDAwLCAweDE5LCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGE4LCAweDA4LAorCTB4ZTAsIDB4YjEsIDB4MDAsIDB4MDAsIDB4MGMsIDB4OTUsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHg3YywgMHgwMCwgMHgyZCwgMHhmMCwgMHg4NCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhmMCwKKwkweDk4LCAweGY0LCAweDAxLCAweDAwLCAweDE1LCAweDk1LCAweDIwLCAweDRjLCAweDg0LCAweDZjLCAweDAwLCAweDAwLAorCTB4ODgsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4MTUsIDB4OTUsIDB4MjAsIDB4ZjIsCisJMHg4NCwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4NSwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDk4LCAweDAwLCAweDJkLCAweDE0LCAweDgyLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLAorCTB4OTgsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YTMsIDB4MDAsIDB4MmQsIDB4MTQsIDB4OTgsIDB4ZDAsIDB4MDEsIDB4MDAsCisJMHgxYSwgMHg5NSwgMHgyMCwgMHg0YywgMHg4NCwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YywKKwkweDg0LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYzLCAweDgwLCAweGUwLCAweDAxLCAweDAwLAorCTB4MWQsIDB4OTUsIDB4MjMsIDB4NDAsIDB4ODQsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4NCwgMHhiMCwgMHgwMSwgMHgwMCwgMHhkMCwgMHgwMCwgMHgyMCwgMHgxNCwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDk4LCAweDAwLCAweDI1LCAweDQyLCAweDgwLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDZlLCAweGYzLAorCTB4ODAsIDB4ZjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTYsIDB4NDIsIDB4ODIsIDB4YzAsIDB4MDAsIDB4MDAsCisJMHgyMywgMHg5NSwgMHhhMCwgMHg0MCwgMHgxNiwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKKwkweDE3LCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDlmLCAweGYwLCAweDgyLCAweGVjLCAweDAwLCAweDAwLAorCTB4OTgsIDB4MDAsIDB4YTAsIDB4NDEsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmUsIDB4MTAsCisJMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhhOCwgMHgwMSwgMHgwMCwgMHg0MCwgMHhmMSwgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDA1LCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDA5LCAweDAwLCAweDAwLCAweDA3LAorCTB4OTYsIDB4ZTQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjAsIDB4YTcsIDB4OTcsIDB4YzAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDJhLCAweDk1LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4YTgsIDB4MDAsIDB4MmQsIDB4MWMsIDB4OGEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OWYsIDB4ZjAsCisJMHg4YSwgMHhkMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMiwgMHg0MCwgMHg4YiwgMHhlYywgMHgwMCwgMHgwMCwKKwkweDhhLCAweDAwLCAweDIwLCAweDQwLCAweGU3LCAweGIxLCAweDAxLCAweDAwLCAweGI0LCAweDAwLCAweDAwLCAweDQwLAorCTB4NDcsIDB4OTksIDB4MDEsIDB4MDAsIDB4YTQsIDB4MDAsIDB4MmQsIDB4NDUsIDB4ZTAsIDB4ZDEsIDB4MDEsIDB4MDAsCisJMHgzNywgMHg5NSwgMHg5YywgMHgxNywgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHhiZSwgMHgwMCwgMHgyZiwgMHhhYiwKKwkweDgzLCAweGIwLCAweDAxLCAweDAwLCAweDg4LCAweDk1LCAweDAwLCAweDE0LCAweDgyLCAweDUwLCAweDAxLCAweDAwLAorCTB4M2MsIDB4OTUsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4M2MsIDB4OTUsIDB4MjIsIDB4ZjIsCisJMHg4MiwgMHgzMCwgMHgwMCwgMHgwMCwgMHg4YywgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDNjLCAweDk1LCAweDlmLCAweDFjLCAweGUwLCAweDZkLCAweDAwLCAweDAwLCAweGJlLCAweDAwLCAweDAwLCAweDQwLAorCTB4NDcsIDB4OTksIDB4MDEsIDB4MDAsIDB4ODgsIDB4OTUsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCisJMHhhOCwgMHgwMCwgMHgyMCwgMHgxYywgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg5YywgMHgwMCwgMHgyZCwgMHgzMCwKKwkweDgxLCAweGIwLCAweDAxLCAweDAwLCAweDg4LCAweDAwLCAweDJkLCAweGYwLCAweDg0LCAweGIwLCAweDAxLCAweDAwLAorCTB4OTQsIDB4MDAsIDB4MmQsIDB4ZjIsIDB4ODYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NGYsIDB4OTUsIDB4MjMsIDB4ZjAsCisJMHg4NCwgMHg2YywgMHgwMCwgMHgwMCwgMHg0NCwgMHg5NSwgMHgyMywgMHg5MiwgMHg4NywgMHg2YywgMHgwMCwgMHgwMCwKKwkweGM5LCAweDA0LCAweDAwLCAweGE2LCAweDk0LCAweGIwLCAweDAxLCAweDAwLCAweDQ2LCAweDk1LCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4YTYsIDB4OTQsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHg2MCwgMHg4OSwgMHgwMCwgMHg0YSwgMHg5NCwgMHg5OCwgMHgwMSwgMHgwMCwgMHg0NiwgMHg5NSwgMHg2OCwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRhLCAweGIwLCAweGIxLCAweDAxLCAweDAwLAorCTB4YmYsIDB4MDAsIDB4MmQsIDB4NDIsIDB4YjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4OTAsIDB4MDAsIDB4MmQsIDB4ZjMsCisJMHg4MCwgMHhlMCwgMHgwMSwgMHgwMCwgMHg0YSwgMHg5NSwgMHhkNCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDc4LCAweGRhLCAweDg0LCAweGMwLCAweDAxLCAweDAwLCAweDU0LCAweDk1LCAweDIzLCAweDQwLAorCTB4ODQsIDB4NmMsIDB4MDAsIDB4MDAsIDB4OTQsIDB4MDAsIDB4MjAsIDB4OWQsIDB4ZTEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg1NCwgMHg5NSwgMHgwMCwgMHg0MCwgMHg4NCwgMHhiMCwgMHgwMCwgMHgwMCwgMHhiZiwgMHgwMCwgMHgyZCwgMHg0MywKKwkweDg0LCAweGMwLCAweDAxLCAweDAwLCAweDkwLCAweDAwLCAweDJkLCAweGYzLCAweDgwLCAweGUwLCAweDAxLCAweDAwLAorCTB4NTQsIDB4OTUsIDB4MjMsIDB4NDAsIDB4ODQsIDB4NmMsIDB4MDAsIDB4MDAsIDB4OTQsIDB4MDAsIDB4MjAsIDB4OWQsCisJMHhlMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4NCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDU4LCAweDk1LCAweGEyLCAweGYwLCAweDM4LCAweDZjLCAweDAwLCAweDAwLCAweDljLCAweDAwLCAweDIwLCAweDQyLAorCTB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWYsIDB4MTMsIDB4OTQsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg4MCwgMHg0NiwgMHgxOSwgMHg4MCwgMHgwMSwgMHgwMCwgMHg5YywgMHgwMCwgMHgyMCwgMHg0MiwKKwkweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDM3LCAweDAwLCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4ZjMsIDB4ODAsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4MGYsIDB4MDAsIDB4MDAsIDB4ZjMsCisJMHg4MiwgMHg4OCwgMHgwMSwgMHgwMCwgMHg1ZSwgMHg5NSwgMHgyMywgMHg0MSwgMHg4MCwgMHg2YywgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDVmLCAweDEzLCAweDk0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDg5LCAweDBjLAorCTB4ODAsIDB4YjIsIDB4MDAsIDB4MDAsIDB4YmMsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsCisJMHhhMCwgMHgwMCwgMHhhMCwgMHhmMiwgMHhlNCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5ZiwgMHg0MSwKKwkweDI0LCAweGVjLCAweDAwLCAweDAwLCAweDY4LCAweDk1LCAweGE2LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4OWYsIDB4NDIsIDB4MzgsIDB4ZWMsIDB4MDAsIDB4MDAsIDB4NjgsIDB4OTUsIDB4YTYsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhiNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwKKwkweDZhLCAweDk1LCAweGEzLCAweGYwLCAweDNhLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4YjQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsCisJMHg2ZSwgMHg5NSwgMHgyMiwgMHhmMCwgMHgzYSwgMHg2YywgMHgwMCwgMHgwMCwgMHhiNCwgMHgwMCwgMHgyMCwgMHgxZCwKKwkweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDgwLCAweDAwLCAweDJkLCAweDVmLCAweDEzLCAweDk0LCAweDAxLCAweDAwLAorCTB4NmUsIDB4OTUsIDB4MjMsIDB4ZjAsIDB4M2EsIDB4NmMsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MjAsIDB4MWQsCisJMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhjMCwgMHgwMCwgMHgyMCwgMHgxMiwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweGM0LCAweDAwLCAweGEwLCAweDFjLCAweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDAzLAorCTB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgxMiwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4NywgMHg5OCwgMHgwMSwgMHgwMCwgMHg3NywgMHg5NSwgMHg5ZiwgMHg0MSwKKwkweDI0LCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDhjLCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4OGMsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4NzgsIDB4OTUsIDB4MDAsIDB4NDEsCisJMHgyNCwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4ZCwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweGM2LCAweDk1LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ1LAorCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHhhOCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg3YSwgMHg5NSwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDhjLCAweDkyLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4YTIsIDB4MDgsIDB4ODAsIDB4MzIsIDB4MDEsIDB4MDAsIDB4ODEsIDB4OTUsIDB4YTIsIDB4NDAsCisJMHg5NSwgMHg2YywgMHgwMCwgMHgwMCwgMHg5OSwgMHg5MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDgyLCAweDAwLCAweGE2LCAweDA0LCAweGIwLCAweDAxLCAweDAwLCAweGEwLCAweDk4LCAweDJmLCAweDQwLAorCTB4MTEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MzAsIDB4MDUsIDB4MDAsIDB4NDEsIDB4ODksIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg5ZiwgMHhmOCwgMHgzZSwgMHhlYywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5ZiwgMHgxMiwKKwkweGUwLCAweGVkLCAweDAwLCAweDAwLCAweGM4LCAweDAwLCAweDIwLCAweGFiLCAweGUxLCAweGIxLCAweDAxLCAweDAwLAorCTB4Y2MsIDB4MDAsIDB4YTAsIDB4MWYsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4OGEsIDB4OTUsIDB4YTMsIDB4NWYsCisJMHhlNywgMHg2ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHhlNywgMHhjMSwgMHgwMSwgMHgwMCwKKwkweGE2LCAweDAwLCAweDAwLCAweDQwLCAweDQ3LCAweDk5LCAweDAxLCAweDAwLCAweDllLCAweDk1LCAweDIyLCAweGYyLAorCTB4ODYsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4MDAsIDB4MDAsIDB4NDMsIDB4ODQsIDB4ZjQsIDB4MDEsIDB4MDAsCisJMHgwMSwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4MCwgMHhjYywgMHgwMSwgMHgwMCwgMHhiOCwgMHgwMCwgMHgyZCwgMHg0MiwKKwkweDgwLCAweGQwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDYyLCAweDQwLCAweDg2LCAweGMwLCAweDAxLCAweDAwLAorCTB4OTIsIDB4OTUsIDB4MWYsIDB4NDMsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4OTMsIDB4OTUsIDB4YTIsIDB4NDAsCisJMHg4NywgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2MiwgMHg0MSwgMHg4NywgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDk3LCAweDk1LCAweDlmLCAweDQwLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4ODUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODQsIDB4ZDAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHg4MCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMiwKKwkweDg4LCAweGIwLCAweDAxLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDQ0LCAweDg0LCAweGY0LCAweDAxLCAweDAwLAorCTB4YjgsIDB4MDAsIDB4MmUsIDB4NDIsIDB4ODAsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjIsIDB4NDAsCisJMHg4OCwgMHhjMCwgMHgwMSwgMHgwMCwgMHg5ZCwgMHg5NSwgMHgxZiwgMHg0NCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweGExLCAweDk1LCAweGEyLCAweDQwLCAweDg5LCAweDZjLCAweDAwLCAweDAwLCAweGExLCAweDk1LCAweDYyLCAweDQxLAorCTB4ODksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4MDAsIDB4NjIsIDB4NDEsIDB4ODYsIDB4ZTQsIDB4MDEsIDB4MDAsCisJMHhiOCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0NSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMSwgMHgwMCwgMHg2MiwgMHg0MSwKKwkweDg4LCAweGU0LCAweDAxLCAweDAwLCAweGE0LCAweDAwLCAweDIwLCAweDQwLCAweGU1LCAweGIxLCAweDAxLCAweDAwLAorCTB4YTIsIDB4MDAsIDB4MjAsIDB4NDAsIDB4ZTcsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YmMsIDB4MDAsIDB4MmUsIDB4NDMsCisJMHg4NywgMHhmMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg4NiwgMHhjMCwgMHgwMSwgMHgwMCwKKwkweGE3LCAweDk1LCAweDIwLCAweDQzLCAweDg3LCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQzLAorCTB4ZTUsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDEsIDB4MDAsIDB4NDMsIDB4ODAsIDB4Y2UsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHhhNCwgMHg0MywgMHhlNCwgMHgzMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMSwgMHhlMiwgMHg0MCwKKwkweDg3LCAweDk4LCAweDAxLCAweDAwLCAweDg4LCAweDAwLCAweDJkLCAweDQ0LCAweDgxLCAweGIwLCAweDAxLCAweDAwLAorCTB4OTAsIDB4MDAsIDB4MmQsIDB4ZjIsIDB4MmUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4OWMsIDB4MDAsIDB4MmQsIDB4ZjAsCisJMHg4NiwgMHhiMCwgMHgwMSwgMHgwMCwgMHg5MCwgMHgwMCwgMHgyZCwgMHhmMCwgMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweGJhLCAweDAwLCAweDJkLCAweGYwLCAweDk4LCAweGIwLCAweDAxLCAweDAwLCAweGI0LCAweDk1LCAweGEyLCAweDEyLAorCTB4OTgsIDB4NmMsIDB4MDAsIDB4MDAsIDB4YmMsIDB4MDAsIDB4MmQsIDB4ZjIsIDB4OTgsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHhiNCwgMHg5NSwgMHhhMCwgMHhmMiwgMHg5OCwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNywKKwkweDgyLCAweGIwLCAweDAxLCAweDAwLCAweDljLCAweDAwLCAweDIwLCAweDQxLCAweGUwLCAweGIxLCAweDAxLCAweDAwLAorCTB4YjQsIDB4MDAsIDB4MmQsIDB4MTIsIDB4ODYsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4YjcsIDB4OTUsIDB4YTMsIDB4NDEsCisJMHhlMCwgMHg2ZCwgMHgwMCwgMHgwMCwgMHhiOCwgMHg5NSwgMHgwMCwgMHhmMCwgMHg4NCwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDg0LCAweGIwLCAweDAxLCAweDAwLCAweDgwLCAweDAwLCAweDJkLCAweDQzLAorCTB4ODQsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4YmIsIDB4OTUsIDB4OWYsIDB4NDIsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4NSwgMHhiMCwgMHgwMSwgMHgwMCwgMHhiZCwgMHg5NSwgMHhhMywgMHg0MiwKKwkweDE0LCAweDZjLCAweDAwLCAweDAwLCAweGJlLCAweDk1LCAweDAwLCAweDBhLCAweDBjLCAweGIwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4MGMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YzAsIDB4OTUsIDB4YTAsIDB4MTcsCisJMHgwYywgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgxNywgMHgwYywgMHhiMCwgMHgwMSwgMHgwMCwKKwkweGM1LCAweDk1LCAweDIyLCAweDQwLCAweDBkLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGEwLCAweDBhLAorCTB4MGMsIDB4ZWMsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4ODIsIDB4ZjQsIDB4MDEsIDB4MDAsCisJMHhjNSwgMHg5NSwgMHhhMCwgMHg0MSwgMHgwYywgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMiwgMHhmMCwKKwkweDgwLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQwLCAweDgxLCAweGIwLCAweDAxLCAweDAwLAorCTB4OWQsIDB4OTIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDQsIDB4ODAsIDB4MDAsIDB4MDMsCisJMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NiwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDYwLCAweDQxLAorCTB4ODcsIDB4OTQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MTAsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0OCwKKwkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ5LCAweGYwLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsCisJMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweGE4LCAweDVkLCAweDA1LCAweDkwLCAweDAwLCAweDAwLCAweGQxLCAweDk1LCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmUsIDB4NGIsIDB4MTksIDB4OTAsIDB4MDEsIDB4MDAsCisJMHgwNSwgMHgwMCwgMHgyYSwgMHgwYywgMHhlNCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwNCwKKwkweGU2LCAweGIxLCAweDAxLCAweDAwLCAweGQ3LCAweDk1LCAweDQ1LCAweDQ4LCAweDYxLCAweDMxLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MTAsIDB4MDAsIDB4MDgsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4ZGMsIDB4OTUsIDB4MjgsIDB4NDAsCisJMHg4NywgMHgzMCwgMHgwMCwgMHgwMCwgMHhkOCwgMHg5NSwgMHgyMiwgMHg0OCwgMHg3NywgMHg3ZCwgMHgwMCwgMHgwMCwKKwkweDdlLCAweDk0LCAweDFkLCAweDQ2LCAweDg3LCAweGIwLCAweDAwLCAweDAwLCAweGRmLCAweDk1LCAweDIyLCAweDVmLAorCTB4MTEsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjIsIDB4MTUsIDB4NjIsIDB4MzEsIDB4MDAsIDB4MDAsCisJMHhkZCwgMHg5NSwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5ZCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDQ5LCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MTQsIDB4MmYsIDB4NGMsIDB4ODMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhlMiwgMHg5NSwgMHhhMiwgMHg0MSwgMHg4MywgMHg1MCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDgwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4NDksIDB4YjEsIDB4MDEsIDB4MDAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4YTEsIDB4OTksIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg5MywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDFmLCAweGIwLCAweDAxLCAweDAwLCAweDM1LCAweDk2LCAweDAwLCAweDQ5LCAweDk2LCAweDMwLCAweDAxLCAweDAwLAorCTB4MDcsIDB4MDAsIDB4MDAsIDB4NDksIDB4MDYsIDB4ZTQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MzksIDB4MDAsIDB4MDMsCisJMHgwNiwgMHhjOCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwNSwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDIwLCAweDAwLCAweDAwLCAweGQwLCAweGEwLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAorCTB4OTMsIDB4YzAsIDB4MDEsIDB4MDAsIDB4ZTksIDB4OTUsIDB4YTAsIDB4NTQsIDB4OTMsIDB4NmMsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgyZSwgMHgwNSwgMHg5NywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHg0MCwKKwkweDQ5LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGUxLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDIsIDB4MDAsIDB4YTIsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4ZjIsIDB4OTUsIDB4YTIsIDB4NDEsCisJMHg5NywgMHg1MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg0OSwgMHhiMywgMHgwMSwgMHgwMCwKKwkweDNiLCAweDk2LCAweDAwLCAweDQwLCAweDQ5LCAweDMxLCAweDAxLCAweDAwLCAweGM4LCAweDkyLCAweDAwLCAweDQwLAorCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4YjUsIDB4MmUsIDB4MDgsIDB4OTcsIDB4YjAsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhmOSwgMHg5NSwgMHhhMiwgMHg0MSwKKwkweDk3LCAweDUwLCAweDAwLCAweDAwLCAweDE4LCAweDAwLCAweDAwLCAweDQwLCAweDk3LCAweDk4LCAweDAxLCAweDAwLAorCTB4MDAsIDB4OTcsIDB4MmUsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhmZCwgMHg5NSwgMHhhMiwgMHg0MSwgMHg5NywgMHg1MCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDQ5LCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDE4LCAweDJlLCAweDA1LAorCTB4OTcsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHgwMSwgMHg5NiwgMHhhMiwgMHg0MSwgMHg5NywgMHg1MCwgMHgwMCwgMHgwMCwgMHg1NywgMHg5NSwgMHgyMCwgMHg0MCwKKwkweGU3LCAweGIxLCAweDAxLCAweDAwLCAweDMwLCAweDk0LCAweDAwLCAweDQwLCAweDQ1LCAweDk5LCAweDAxLCAweDAwLAorCTB4NjQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZTUsIDB4OTksIDB4MDEsIDB4MDAsIDB4NTYsIDB4OTUsIDB4MjAsIDB4NDAsCisJMHhlNywgMHhiMSwgMHgwMSwgMHgwMCwgMHhiOCwgMHg5NCwgMHgyMCwgMHg0MSwgMHhlNSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweGJhLCAweDk0LCAweDIwLCAweDQxLCAweGU1LCAweGIxLCAweDAxLCAweDAwLCAweDk4LCAweDk0LCAweDAwLCAweDQwLAorCTB4NDUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4NDAsIDB4OTcsIDB4OTgsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwYiwgMHg5NiwgMHhhMiwgMHg0MSwKKwkweDk3LCAweDUwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDk3LCAweGIwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NmYsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGIsCisJMHg2OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwZiwgMHg5NiwgMHg4NSwgMHg0MSwgMHg5NywgMHg0MCwgMHgwMCwgMHgwMCwKKwkweDgwLCAweDA0LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4MzksIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MzcsIDB4YjMsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgzNSwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDMzLCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDQxLCAweGIzLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4M2YsIDB4YjMsIDB4MDEsIDB4MDAsIDB4ZWUsIDB4MDUsIDB4MDAsIDB4NDAsCisJMHgyNSwgMHg5YiwgMHgwMSwgMHgwMCwgMHg0MiwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0YiwgMHg5YiwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDJmLCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4MmQsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDcsIDB4YjMsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHhiMywgMHgwMSwgMHgwMCwgMHg2MCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDJiLCAweDliLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDU0LCAweGVmLCAweDkzLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTUsIDB4ZjEsIDB4OTMsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4YTUsCisJMHgzYywgMHg4YiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyYywgMHg1YiwgMHhiMywgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDJjLCAweDQ1LCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAorCTB4NTksIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NTcsIDB4YjMsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgyNywgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDUzLCAweGIzLCAweDAxLCAweDAwLCAweDJiLCAweDk2LCAweGEyLCAweDUwLCAweGZkLCAweDdmLCAweDAwLCAweDAwLAorCTB4MmIsIDB4OTYsIDB4YTIsIDB4NTEsIDB4ZmQsIDB4N2YsIDB4MDAsIDB4MDAsIDB4MmMsIDB4OTYsIDB4MDAsIDB4NDAsCisJMHgxZCwgMHhiMywgMHgwMCwgMHgwMCwgMHg1MCwgMHg0NiwgMHgwMCwgMHg0MCwgMHgxZCwgMHg5YiwgMHgwMSwgMHgwMCwKKwkweDAwLCAweGMwLCAweDAwLCAweGE2LCAweDg4LCAweGIzLCAweDAxLCAweDAwLCAweGZmLCAweDNmLCAweDAwLCAweGE2LAorCTB4M2EsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4YzAsIDB4MDAsIDB4OWQsIDB4M2IsIDB4OWIsIDB4MDEsIDB4MDAsCisJMHhiNCwgMHgwNSwgMHgwMCwgMHg0MCwgMHgyMywgMHg5YiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDRkLCAweGIzLCAweDAxLCAweDAwLCAweDA4LCAweDBhLCAweDAwLCAweGE2LCAweDE0LCAweGIzLCAweDAxLCAweDAwLAorCTB4MDEsIDB4MDEsIDB4MDAsIDB4OGEsIDB4MTUsIDB4OWIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4YTYsCisJMHg1NiwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg1ZSwgMHg1NywgMHhiNSwgMHgwMSwgMHgwMCwKKwkweDE4LCAweDAwLCAweDAwLCAweDRiLCAweDIwLCAweGU0LCAweDAxLCAweDAwLCAweDA2LCAweDAwLCAweDAwLCAweDRiLAorCTB4OTYsIDB4ZTQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4NDMsIDB4MDAsIDB4NGIsIDB4OTYsIDB4YzgsIDB4MDEsIDB4MDAsCisJMHgxOCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgyMCwgMHhkYywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YiwKKwkweDIwLCAweDk0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDU3LCAweDIxLCAweDkwLCAweDAxLCAweDAwLAorCTB4MDAsIDB4OTksIDB4MmUsIDB4MGEsIDB4OTcsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgzYywgMHg5NiwgMHhhMiwgMHg0MSwgMHg5NywgMHg1MCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAzLCAweDAwLCAweDQwLCAweDk3LCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweGE5LCAweDAwLCAweDQwLAorCTB4NDUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsCisJMHg0MCwgMHg5NiwgMHhhMiwgMHg0MSwgMHg5NywgMHg1MCwgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDk3LCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDU1LCAweDYxLCAweGIxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGIsIDB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDQsIDB4OTYsIDB4YTgsIDB4NDAsCisJMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHg0NCwgMHg5NiwgMHhhMiwgMHg0MSwgMHg5NywgMHg1MCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDgwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4YWUsIDB4OWYsIDB4MDAsIDB4ODgsCisJMHg5YSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhhZSwgMHg5ZiwgMHgwMCwgMHg4OCwgMHg5YSwgMHhiMCwgMHgwMCwgMHgwMCwKKwkweGFlLCAweDlmLCAweDAwLCAweDg4LCAweDlhLCAweGIwLCAweDAwLCAweDAwLCAweGFlLCAweDlmLCAweDAwLCAweDg4LAorCTB4OWEsIDB4YjAsIDB4MDAsIDB4MDAsIDB4YWUsIDB4OWYsIDB4MDAsIDB4ODgsIDB4OWEsIDB4YjAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHg4OCwgMHg5YSwgMHhiMCwgMHgwMSwgMHgwMCwgMHhhZSwgMHg5ZiwgMHg0MSwgMHg0MCwKKwkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweGIyLCAweDlmLCAweDIyLCAweDQwLCAweDdiLCAweDZmLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MTksIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4YWUsIDB4OWYsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOSwgMHg0MSwgMHg3YiwgMHhiMywgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGE0LCAweGM0LCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGExLAorCTB4YzYsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmYsIDB4YTIsIDB4YzgsIDB4YjMsIDB4MDEsIDB4MDAsCisJMHgwOCwgMHgxNCwgMHgwMCwgMHg0MCwgMHg0OSwgMHg5OSwgMHgwMSwgMHgwMCwgMHhhOCwgMHg5ZiwgMHgwMCwgMHg0ZCwKKwkweDlhLCAweGNjLCAweDAxLCAweDAwLCAweGJiLCAweDlmLCAweDI2LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGMsIDB4NDksIDB4YzEsIDB4MDEsIDB4MDAsIDB4YjksIDB4OWYsIDB4YTIsIDB4NDEsCisJMHg5YiwgMHg1MCwgMHgwMCwgMHgwMCwgMHhiZiwgMHg5ZiwgMHg4MCwgMHg4MCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDUyLCAweDQ5LCAweGZkLCAweDkzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRhLAorCTB4ZmQsIDB4OTMsIDB4MDEsIDB4MDAsIDB4YzIsIDB4OWYsIDB4MDAsIDB4NDIsIDB4Y2QsIDB4OTMsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg1MSwgMHg0YSwgMHhmZCwgMHg5MywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0OSwKKwkweGZkLCAweDkzLCAweDAxLCAweDAwLCAweGMyLCAweDlmLCAweDAwLCAweDQzLCAweGNiLCAweDkzLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4NTAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4ZDIsIDB4OWYsIDB4MDAsIDB4NDAsCisJMHgxOSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHg5YSwgMHhiMCwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDQ5LCAweGQxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGYwLAorCTB4ODAsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4NGQsIDB4ODAsIDB4YjIsIDB4MDEsIDB4MDAsCisJMHhjYSwgMHg5ZiwgMHgwMCwgMHg0MCwgMHgxOSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YywgMHg0MCwKKwkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDQ5LCAweGQxLCAweDAxLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4OWEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGQsCisJMHgxMCwgMHhiMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMiwgMHg0OSwgMHhiMSwgMHgwMSwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweGUzLCAweDQzLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGU0LAorCTB4NDUsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4N2IsIDB4YjMsIDB4MDEsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHg0OCwgMHg0ZiwgMHg0MCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhkMiwgMHg5ZiwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweGNiLAorCTB4ODEsIDB4YzgsIDB4MDEsIDB4MDAsIDB4ZjQsIDB4ODIsIDB4MDAsIDB4NDAsIDB4ZjIsIDB4OTMsIDB4MDAsIDB4MDAsCisJMHg0MCwgMHg4MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwNSwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDE4LCAweDA2LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4ZjQsIDB4ODIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4YWYsIDB4ODIsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgzOCwgMHg4MSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDM2LCAweDgxLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGI4LCAweDgwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MTQsIDB4ODcsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHhhZiwgMHg4MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhmNSwgMHg4MiwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDk0LCAweDkyLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4ZDcsIDB4OTUsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4NWQsIDB4OTIsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhjNiwgMHg5NSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDMzLCAweDkzLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGQ2LCAweDkyLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4ZDAsIDB4OTIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHg5YSwgMHg4MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCisJMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAorCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKKwkweDgxLCAweGIyLCAweDAwLCAweDAwLAorCX0sCit9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3NsaWNvc3Mvb2FzaXNyY3Z1Y29kZS5oIGIvZHJpdmVycy9zdGFnaW5nL3NsaWNvc3Mvb2FzaXNyY3Z1Y29kZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjViMzUzMWYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvc2xpY29zcy9vYXNpc3JjdnVjb2RlLmgKQEAgLTAsMCArMSwyMDUgQEAKKyNkZWZpbmUgT0FTSVNfUkNWVUNPREVfVkVSU19TVFJJTkcJIjEuMiIKKyNkZWZpbmUgT0FTSVNfUkNWVUNPREVfVkVSU19EQVRFICAJIjIwMDYvMDMvMjcgMTU6MTA6MjgiCisKK3N0YXRpYyB1MzIgT2FzaXNSY3ZVQ29kZUxlbiA9IDUxMjsKKworc3RhdGljIHU4IE9hc2lzUmN2VUNvZGVbMjU2MF0gPQoreworMHg0NywgMHg3NSwgMHgwMSwgMHgwMCwgMHgwNCwgMHhhMCwgMHgxMywgMHgwMSwgMHgwMCwgMHgxYywgMHhiNywgMHg1YiwgMHgwOSwKKzB4MzAsIDB4MDAsIDB4YjYsIDB4NWYsIDB4MDEsIDB4MDAsIDB4MWMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4MTgsIDB4M2IsCisweDc4LCAweDNhLCAweDAwLCAweDFjLCAweGEyLCAweDc3LCAweDAxLCAweDAwLCAweDFjLCAweDA3LCAweDFkLCAweDAxLCAweDcwLAorMHgxOCwgMHhhZCwgMHg3YiwgMHhmMSwgMHhmZiwgMHgxYywgMHhiMywgMHg3YiwgMHhhOSwgMHhhYSwgMHgxZSwgMHhiNCwgMHg3YiwKKzB4MDEsIDB4MGMsIDB4MWMsIDB4YjUsIDB4N2IsIDB4MGQsIDB4MDYsIDB4MWMsIDB4MDAsIDB4MDAsIDB4MzAsIDB4NjQsIDB4MDgsCisweDBjLCAweDMxLCAweDVhLCAweDcwLCAweDA0LCAweDBjLCAweDMxLCAweDVhLCAweDgwLCAweDA0LCAweDBjLCAweDMxLCAweDRlLAorMHg5MCwgMHgwNCwgMHgwYywgMHgzMSwgMHg0YSwgMHhhMCwgMHgwMCwgMHgwOSwgMHgyNSwgMHg1NSwgMHhjMCwgMHgwNCwgMHgwYywKKzB4MzEsIDB4NTIsIDB4YjAsIDB4MDAsIDB4ZTksIDB4MjQsIDB4NTUsIDB4YzAsIDB4MDQsIDB4Y2MsIDB4YjMsIDB4MDAsIDB4MWMsCisweDFjLCAweGViLCAweDJkLCAweDAxLCAweDAwLCAweDFjLCAweDA2LCAweDU2LCAweDMyLCAweGQ0LCAweDA4LCAweDA3LCAweDlkLAorMHgwMCwgMHgwMCwgMHgxYywgMHg3YiwgMHhiNywgMHgwMiwgMHgwMCwgMHgxMCwgMHhhMCwgMHgwZiwgMHgzMSwgMHg1NCwgMHgwOSwKKzB4MDYsIDB4NTYsIDB4NWUsIDB4YzAsIDB4MDQsIDB4YTAsIDB4MzAsIDB4NTQsIDB4MDMsIDB4MDAsIDB4YWMsIDB4MzAsIDB4NTUsCisweDAzLCAweDAwLCAweGNkLCAweDAzLCAweDNhLCAweDAwLCAweDFjLCAweDdiLCAweGI3LCAweDAyLCAweDAwLCAweDFjLCAweDYwLAorMHg4ZSwgMHgzMSwgMHg1NCwgMHgwOSwgMHgyOSwgMHgyNSwgMHg1NSwgMHgwMywgMHgwMCwgMHg4MCwgMHg4ZSwgMHgzMSwgMHg1NCwKKzB4MDksIDB4OGMsIDB4MzAsIDB4OTEsIDB4MDAsIDB4MDQsIDB4NDcsIDB4MWMsIDB4MDEsIDB4MDAsIDB4MWMsIDB4YTAsIDB4MGYsCisweDMxLCAweDU0LCAweDA5LCAweDAwLCAweDAwLCAweDY0LCAweDAwLCAweDA0LCAweDQ3LCAweDFjLCAweDY1LCAweGMwLCAweDA0LAorMHg0NywgMHgxYywgMHg1NSwgMHgwMywgMHgwMCwgMHg2YywgMHgzMCwgMHgwMSwgMHgwMCwgMHgxYywgMHg0ZCwgMHgzNCwgMHgwMiwKKzB4MDAsIDB4MWMsIDB4N2IsIDB4YjcsIDB4MDIsIDB4MDAsIDB4MWMsIDB4YTAsIDB4MGYsIDB4MzEsIDB4NTQsIDB4MDksIDB4YzgsCisweDgzLCAweDM3LCAweDAwLCAweDFjLCAweDgwLCAweDAxLCAweDAwLCAweDAwLCAweDFjLCAweDAwLCAweDAwLCAweDY0LCAweDAwLAorMHgwNCwgMHhhMCwgMHgwZiwgMHgzMCwgMHg1NCwgMHgwOSwgMHgwMCwgMHgwMCwgMHg1NCwgMHhjMywgMHgwNCwgMHg3YiwgMHhmYiwKKzB4ZjIsIDB4MDAsIDB4MWMsIDB4Y2MsIDB4MzMsIDB4MGQsIDB4MDAsIDB4MWMsIDB4YjQsIDB4N2IsIDB4ZmQsIDB4MDMsIDB4MWMsCisweDgwLCAweDBlLCAweDMwLCAweDU0LCAweDA5LCAweGUwLCAweGZiLCAweDA1LCAweDAwLCAweDFjLCAweDAwLCAweDAwLCAweDhjLAorMHgwMywgMHgwMCwgMHhiMywgMHgwZiwgMHgzMSwgMHg1NCwgMHgwOSwgMHgwMCwgMHgwMCwgMHhlYywgMHg3MCwgMHgwNCwgMHgwMCwKKzB4MDAsIDB4ZWMsIDB4ODAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4OGMsIDB4OTMsIDB4MDAsIDB4NjEsIDB4NzYsIDB4OGQsIDB4YzMsCisweDA0LCAweGMwLCAweDhkLCAweDMxLCAweDU0LCAweDA5LCAweGUwLCAweDdiLCAweDAwLCAweGMwLCAweDFmLCAweGEwLCAweGZkLAorMHhjNSwgMHgwMSwgMHgwMCwgMHhjYywgMHgzMywgMHgwNSwgMHgwMCwgMHgxYywgMHhkNCwgMHgwMywgMHgwMCwgMHgzYywgMHgxYywKKzB4ZDQsIDB4ZDMsIDB4MWIsIDB4MDAsIDB4MWMsIDB4YzAsIDB4ZDMsIDB4NTIsIDB4MDAsIDB4MWMsIDB4MDAsIDB4MDAsIDB4NWMsCisweDEzLCAweDA0LCAweDhlLCAweDhlLCAweDMyLCAweDU0LCAweDA5LCAweDViLCAweDgwLCAweDVlLCAweDEzLCAweDA0LCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgxYywgMHgwMCwgMHgwMCwgMHg5NCwgMHgwMSwgMHgwMCwgMHhhMCwgMHgwZiwgMHgzMSwgMHg1NCwKKzB4MDksIDB4YTAsIDB4MGYsIDB4MzEsIDB4NTQsIDB4MDksIDB4YzAsIDB4MDMsIDB4ZmMsIDB4N2YsIDB4MWMsIDB4YTAsIDB4MDEsCisweGEwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGE0LCAweDAxLCAweDAwLCAweGEwLCAweDBmLCAweDMxLCAweDU0LCAweDA5LAorMHhjMCwgMHgwMywgMHhmYywgMHgwMywgMHgxYywgMHhmNSwgMHg3NywgMHgwMSwgMHgwMCwgMHgxYywgMHgyNiwgMHg3YSwgMHhlNiwKKzB4MDUsIDB4MWMsIDB4YTAsIDB4MGYsIDB4MzEsIDB4NTQsIDB4MDksIDB4YjMsIDB4MGYsIDB4MzEsIDB4NTQsIDB4MDksIDB4YjUsCisweDAyLCAweDAyLCAweDAwLCAweDFjLCAweGEwLCAweDBmLCAweDMxLCAweDU0LCAweDA5LCAweDdhLCAweDdlLCAweDAyLCAweDAwLAorMHgxYywgMHhiNSwgMHgwMiwgMHgwMiwgMHgwMCwgMHgxYywgMHg1MywgMHgwZiwgMHgzMiwgMHg1NCwgMHgwOSwgMHhhZiwgMHgwMywKKzB4MDEsIDB4MDAsIDB4MWMsIDB4N2EsIDB4MGUsIDB4MzIsIDB4NTQsIDB4MDksIDB4YjUsIDB4MDIsIDB4MDIsIDB4MDAsIDB4MWMsCisweDAwLCAweDAwLCAweDAyLCAweDAwLCAweDFjLCAweGEwLCAweDNkLCAweGFhLCAweDExLCAweDA0LCAweDAwLCAweDAwLCAweGFjLAorMHgxMSwgMHgwNCwgMHhkNCwgMHhkMywgMHg1MiwgMHgwMCwgMHgxYywgMHhiNSwgMHgzZSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgyMCwKKzB4ZmIsIDB4ZmQsIDB4ZmYsIDB4MWYsIDB4ODAsIDB4MmMsIDB4NmMsIDB4MDMsIDB4MDAsIDB4YjksIDB4M2EsIDB4OWUsIDB4MDEsCisweDAwLCAweDc1LCAweDNiLCAweDAyLCAweDAwLCAweDFjLCAweGE3LCAweDFjLCAweDAxLCAweDAwLCAweDEwLCAweGRiLCAweDgzLAorMHgxNiwgMHgwMCwgMHgxYywgMHhjNywgMHgxZCwgMHgyMSwgMHhjMSwgMHgwNCwgMHhiOSwgMHgzYiwgMHg4ZCwgMHhjMSwgMHgwNCwKKzB4OGIsIDB4MmMsIDB4MDEsIDB4MDAsIDB4MWMsIDB4NmIsIDB4MmMsIDB4MzUsIDB4YzEsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NzgsCisweDExLCAweDAwLCAweGNiLCAweDJjLCAweDc5LCAweGMxLCAweDA0LCAweGEwLCAweDBmLCAweDMxLCAweDU0LCAweDA5LCAweGEwLAorMHgwZiwgMHgzMSwgMHg1NCwgMHgwOSwgMHg1NCwgMHhkMCwgMHgwMiwgMHgwMCwgMHgxYywgMHg0OSwgMHgyNSwgMHhiMSwgMHgwMSwKKzB4MDAsIDB4YWIsIDB4MmMsIDB4ODEsIDB4YzEsIDB4MDQsIDB4YTcsIDB4MWQsIDB4NTUsIDB4MDMsIDB4MDAsIDB4Y2MsIDB4MzMsCisweDA5LCAweDAwLCAweDFjLCAweGViLCAweDJkLCAweDAxLCAweDAwLCAweDFjLCAweGVhLCAweDI5LCAweDAxLCAweDAwLCAweDFjLAorMHhhMCwgMHgwZiwgMHgzMSwgMHg1NCwgMHgwOSwgMHhhZSwgMHgwZiwgMHgzMSwgMHg1NCwgMHgwOSwgMHhhMCwgMHgwZiwgMHgzMSwKKzB4NTQsIDB4MDksIDB4ZDQsIDB4MDcsIDB4ZmMsIDB4MDMsIDB4MWMsIDB4OTksIDB4M2EsIDB4MDIsIDB4MDAsIDB4MWMsIDB4YmIsCisweDM4LCAweDAyLCAweDAwLCAweDFjLCAweDAwLCAweDM4LCAweDAwLCAweDAwLCAweDFjLCAweDAwLCAweDAwLCAweGZjLCAweDAxLAorMHgwNCwgMHhkYiwgMHgzYiwgMHg3ZSwgMHgwMCwgMHgxYywgMHhjNywgMHgxZCwgMHgwMSwgMHgwMCwgMHgxYywgMHgyNiwgMHg3YSwKKzB4ZmEsIDB4MDUsIDB4MWMsIDB4MjcsIDB4MWQsIDB4MDEsIDB4MDAsIDB4MWMsIDB4YjMsIDB4MGYsIDB4MzEsIDB4NTQsIDB4MDksCisweDdhLCAweDBlLCAweDMyLCAweDU0LCAweDA5LCAweDUzLCAweDBmLCAweDMyLCAweDU0LCAweDA5LCAweDdhLCAweDBlLCAweDMyLAorMHg1NCwgMHgwOSwgMHg1MywgMHgwZiwgMHgzMiwgMHg1NCwgMHgwOSwgMHg3YSwgMHgwZSwgMHgzMiwgMHg1NCwgMHgwOSwgMHg1MywKKzB4MGYsIDB4MzIsIDB4NTQsIDB4MDksIDB4YTAsIDB4MGYsIDB4MzEsIDB4NTQsIDB4MDksIDB4N2EsIDB4MDYsIDB4MDIsIDB4MDAsCisweDFjLCAweDUzLCAweDBmLCAweDMyLCAweDU0LCAweDA5LCAweGFmLCAweDAzLCAweDAxLCAweDAwLCAweDFjLCAweDdhLCAweDBlLAorMHgzMiwgMHg1NCwgMHgwOSwgMHg1MywgMHgwZiwgMHgzMiwgMHg1NCwgMHgwOSwgMHg3YSwgMHgwZSwgMHgzMiwgMHg1NCwgMHgwOSwKKzB4NTMsIDB4MGYsIDB4MzIsIDB4NTQsIDB4MDksIDB4N2EsIDB4MGUsIDB4MzIsIDB4NTQsIDB4MDksIDB4NTMsIDB4MGYsIDB4MzIsCisweDU0LCAweDA5LCAweDdhLCAweDBlLCAweDMyLCAweDU0LCAweDA5LCAweDAwLCAweDNkLCAweDAyLCAweDAwLCAweDFjLCAweDAwLAorMHgwMCwgMHg1OCwgMHgxMiwgMHgwMCwgMHhjYiwgMHgyYywgMHgwMSwgMHgwMCwgMHgxYywgMHg3NSwgMHgzYiwgMHgwMiwgMHgwMCwKKzB4MWMsIDB4YTcsIDB4MWMsIDB4MDEsIDB4MDAsIDB4MTAsIDB4Y2IsIDB4MmYsIDB4MDUsIDB4MDAsIDB4MWMsIDB4NjAsIDB4MmMsCisweDAwLCAweDAwLCAweDFjLCAweGM3LCAweDFjLCAweGM5LCAweDAyLCAweDAwLCAweGEwLCAweDBmLCAweDMxLCAweDU0LCAweDA5LAorMHg1MywgMHgwNywgMHgwMiwgMHgwMCwgMHgxYywgMHg0NiwgMHg3YSwgMHhjYSwgMHgwNSwgMHgxYywgMHg3YSwgMHgwZSwgMHgzMiwKKzB4NTQsIDB4MDksIDB4NDAsIDB4ZmEsIDB4MTksIDB4MDAsIDB4MWMsIDB4MDAsIDB4MDAsIDB4ODgsIDB4MDIsIDB4MDQsIDB4NDYsCisweDdhLCAweGNhLCAweDA1LCAweDFjLCAweGEwLCAweDBmLCAweDMxLCAweDU0LCAweDA5LCAweGEwLCAweDBmLCAweDMxLCAweDU0LAorMHgwOSwgMHhhMCwgMHgwZiwgMHgzMSwgMHg1NCwgMHgwOSwgMHhhMCwgMHgwZiwgMHgzMSwgMHg1NCwgMHgwOSwgMHhiMywgMHg3YiwKKzB4MDEsIDB4YzAsIDB4MWYsIDB4NzQsIDB4MGUsIDB4MzAsIDB4NTQsIDB4MDksIDB4YzAsIDB4MDMsIDB4OWMsIDB4MDAsIDB4MWMsCisweDgwLCAweDAwLCAweGQ4LCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweDAyLCAweDA0LCAweDAwLCAweDAwLCAweGFjLAorMHgxMiwgMHgwNSwgMHgwNywgMHgxZCwgMHgwMSwgMHgwMCwgMHgxYywgMHhkNCwgMHhkMywgMHgyYiwgMHgwMCwgMHgxYywgMHhkNCwKKzB4ZDMsIDB4NTIsIDB4MDAsIDB4MWMsIDB4ODAsIDB4NzYsIDB4N2QsIDB4MTMsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDIsCisweDAwLCAweGE2LCAweDdiLCAweDk1LCAweDAzLCAweDEwLCAweGM3LCAweDljLCAweDAwLCAweDAwLCAweDFjLCAweDgwLCAweDJjLAorMHgwMCwgMHgwMCwgMHgxYywgMHgwMCwgMHgwMCwgMHg2YywgMHgwMiwgMHgwNCwgMHgwMCwgMHgwMCwgMHg1NCwgMHhjMywgMHgwNCwKKzB4YWIsIDB4MmQsIDB4ZDksIDB4MTIsIDB4MDUsIDB4MDcsIDB4MWQsIDB4YjUsIDB4YzIsIDB4MDQsIDB4OGIsIDB4MmQsIDB4MDEsCisweDAwLCAweDFjLCAweDY5LCAweDI1LCAweDAxLCAweDAwLCAweDFjLCAweGE2LCAweDdiLCAweDk1LCAweDAzLCAweDEwLCAweGNiLAorMHgyZiwgMHgwOSwgMHgwMCwgMHgxYywgMHg2MCwgMHgyYywgMHgwMCwgMHgwMCwgMHgxYywgMHgwMCwgMHgwMCwgMHg0OCwgMHgwMywKKzB4MDAsIDB4NTMsIDB4MGYsIDB4MzIsIDB4NTQsIDB4MDksIDB4NDYsIDB4N2EsIDB4Y2EsIDB4MDUsIDB4MWMsIDB4N2EsIDB4MGUsCisweDMyLCAweDU0LCAweDA5LCAweDQwLCAweGZhLCAweDE5LCAweDAwLCAweDFjLCAweDAwLCAweDAwLCAweDEwLCAweDAzLCAweDA0LAorMHg0NiwgMHg3YSwgMHhjYSwgMHgwNSwgMHgxYywgMHhiNSwgMHgwZiwgMHgzMSwgMHg1NCwgMHgwOSwgMHhhMCwgMHgwZiwgMHgzMSwKKzB4NTQsIDB4MDksIDB4NzMsIDB4ZWMsIDB4MmEsIDB4MDMsIDB4MDQsIDB4NjAsIDB4MmMsIDB4MDAsIDB4MDAsIDB4MWMsIDB4MDAsCisweDAwLCAweDI4LCAweDAzLCAweDAwLCAweGM3LCAweDFjLCAweDAxLCAweDAwLCAweDFjLCAweDAwLCAweDAwLCAweDI4LCAweDEzLAorMHgwNSwgMHgwNywgMHgxZCwgMHgwMSwgMHgwMCwgMHgxYywgMHhjMCwgMHhkNywgMHgyMiwgMHgwMCwgMHgxYywgMHg3NSwgMHg1NiwKKzB4N2UsIDB4MTMsIDB4MDQsIDB4NjAsIDB4MmMsIDB4MDAsIDB4MDAsIDB4MWMsIDB4ZTcsIDB4MWMsIDB4NDUsIDB4MDMsIDB4MDQsCisweGU3LCAweDljLCAweDAwLCAweDAwLCAweDFjLCAweGE2LCAweDdiLCAweDk1LCAweDAzLCAweDEwLCAweDgwLCAweDJjLCAweDAwLAorMHgwMCwgMHgxYywgMHgwMCwgMHgwMCwgMHhmOCwgMHgwMiwgMHgwNCwgMHgwMCwgMHgwMCwgMHg1NCwgMHhjMywgMHgwNCwgMHhiOSwKKzB4N2IsIDB4MDEsIDB4MDAsIDB4MWMsIDB4MDAsIDB4MDAsIDB4OGMsIDB4YzMsIDB4MDQsIDB4Y2IsIDB4YWYsIDB4ZmMsIDB4MDcsCisweDFjLCAweGNiLCAweDJmLCAweDAxLCAweDA0LCAweDFjLCAweGM3LCAweDlmLCAweDgwLCAweDAzLCAweDFjLCAweDAwLCAweDAwLAorMHg4YywgMHhjMywgMHgwNCwgMHhjYiwgMHhhZiwgMHhmYywgMHgwNywgMHgxYywgMHhjYiwgMHgyZiwgMHgwZCwgMHgwNCwgMHgxYywKKzB4YzcsIDB4OWYsIDB4ODAsIDB4MDMsIDB4MWMsIDB4MDAsIDB4MDAsIDB4OGMsIDB4YzMsIDB4MDQsIDB4Y2IsIDB4YWYsIDB4MDAsCisweGY4LCAweDFkLCAweGNiLCAweDJmLCAweDAxLCAweDAwLCAweDFkLCAweGE2LCAweDdiLCAweDk1LCAweDAzLCAweDFjLCAweGM3LAorMHg5YywgMHg4YywgMHhjMywgMHgwNCwgMHgwMCwgMHgwMCwgMHg4YywgMHgxMywgMHgwNSwgMHgwNywgMHgxZCwgMHgwMSwgMHgwMCwKKzB4MWMsIDB4YzAsIDB4MWQsIDB4ZGMsIDB4ZDMsIDB4MDgsIDB4MjcsIDB4OWQsIDB4ZTQsIDB4MDMsIDB4MDAsIDB4YTAsIDB4ZWUsCisweDQ2LCAweGQ0LCAweDAwLCAweGZiLCAweDc1LCAweDA5LCAweDE0LCAweDA0LCAweDIwLCAweDdiLCAweDA2LCAweDAwLCAweDFjLAorMHhjMCwgMHgxYywgMHgxYywgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiMCwgMHhkMywgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4ZjQsIDB4MDAsIDB4YzAsIDB4ZWYsIDB4ZjIsIDB4MDAsIDB4MWMsIDB4MjAsIDB4MjUsIDB4NWMsIDB4MTQsIDB4MDQsIDB4NjAsCisweGI3LCAweGQyLCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDBjLCAweDE1LCAweDAwLCAweGNjLCAweGIzLCAweGZjLCAweDAzLAorMHgxYywgMHhjYywgMHgzMywgMHgwNSwgMHgwMiwgMHgxYywgMHgwMCwgMHgwMCwgMHgwYywgMHhjNSwgMHgwNCwgMHg2MCwgMHhiNywKKzB4MGUsIDB4MDUsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MGMsIDB4MTUsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NWMsIDB4YzQsIDB4MDQsCisweGMwLCAweDFkLCAweDk4LCAweGYzLCAweDA0LCAweDAwLCAweDAwLCAweDY4LCAweGM0LCAweDA0LCAweDA3LCAweDlkLCAweDAwLAorMHgwMCwgMHgxYywgMHgxYiwgMHg3NCwgMHhmZCwgMHhmMywgMHgwNCwgMHhhNiwgMHg3YiwgMHhmMSwgMHgwMywgMHgxYywgMHhhMCwKKzB4MGYsIDB4NjksIDB4NTQsIDB4MDksIDB4ZTAsIDB4N2IsIDB4MDAsIDB4ZmMsIDB4MWYsIDB4MzksIDB4N2YsIDB4MDIsIDB4MDAsCisweDFjLCAweDA3LCAweDFkLCAweDlkLCAweGMzLCAweDA0LCAweGE2LCAweDdiLCAweGFkLCAweDAzLCAweDFjLCAweDAwLCAweDAwLAorMHg2OCwgMHhjNCwgMHgwNCwgMHhlMCwgMHgxYywgMHgwMCwgMHgwMCwgMHgxYywgMHgwMCwgMHgwMCwgMHhhNCwgMHgwMywgMHgwNCwKKzB4Y2IsIDB4YWYsIDB4MDAsIDB4ZjgsIDB4MWQsIDB4Y2IsIDB4MmYsIDB4MDEsIDB4MTAsIDB4MWQsIDB4MDAsIDB4MDAsIDB4YWMsCisweGMzLCAweDA0LCAweDAwLCAweDAwLCAweGFjLCAweDAzLCAweDA0LCAweGNiLCAweGFmLCAweDAwLCAweGY4LCAweDFkLCAweGNiLAorMHgyZiwgMHgwMSwgMHgxOCwgMHgxZCwgMHhjNywgMHg5ZiwgMHgwMCwgMHgwYiwgMHgxYywgMHgwMCwgMHgwMCwgMHhhYywgMHhjMywKKzB4MDQsIDB4ZmIsIDB4NzUsIDB4MDEsIDB4MDAsIDB4MWMsIDB4MDcsIDB4MWQsIDB4MDEsIDB4MDAsIDB4MWMsIDB4Y2MsIDB4YjMsCisweGZjLCAweDAzLCAweDFjLCAweGNjLCAweDMzLCAweDAxLCAweDAyLCAweDFjLCAweDAwLCAweDAwLCAweGFjLCAweGMzLCAweDA0LAorMHhhMCwgMHgxYywgMHgwMCwgMHgwMCwgMHgxYywgMHhhMCwgMHhlZSwgMHhhMiwgMHgwMywgMHgwNCwgMHhjYiwgMHhhZiwgMHhmYywKKzB4MDcsIDB4MWMsIDB4Y2IsIDB4MmYsIDB4MDksIDB4MDQsIDB4MWMsIDB4ZmIsIDB4NzUsIDB4MDEsIDB4MDAsIDB4MWMsIDB4MDAsCisweDAwLCAweGFjLCAweGMzLCAweDA0LCAweGNjLCAweGIzLCAweGZjLCAweDAzLCAweDFjLCAweGNjLCAweDMzLCAweDAxLCAweDAyLAorMHgxYywgMHgwMCwgMHgwMCwgMHgwYywgMHhjNSwgMHgwNCwgMHgwMCwgMHgwMCwgMHg3OCwgMHgzNCwgMHgwNSwgMHhjYywgMHhiMywKKzB4ZmMsIDB4MDMsIDB4MWMsIDB4Y2MsIDB4MzMsIDB4MTUsIDB4MDIsIDB4MWMsIDB4NDcsIDB4OWQsIDB4NTQsIDB4YzQsIDB4MDQsCisweDAwLCAweDAwLCAweDc4LCAweDQ0LCAweDAwLCAweDgwLCAweDFkLCAweDdjLCAweDU0LCAweDA0LCAweDg3LCAweDFkLCAweDhkLAorMHgwNCwgMHgwMCwgMHhjZSwgMHg3NiwgMHgwMSwgMHgwMCwgMHgxYywgMHhlZiwgMHg3NiwgMHg5ZCwgMHhjNCwgMHgwNCwgMHhhNCwKKzB4NzcsIDB4OGQsIDB4MjQsIDB4MDksIDB4ZTQsIDB4NzYsIDB4MDEsIDB4MDAsIDB4MWMsIDB4YzQsIDB4NzYsIDB4MDEsIDB4MDAsCisweDFjLCAweDAwLCAweDAwLCAweDk4LCAweDU0LCAweDA0LCAweGQ3LCAweDc2LCAweDAxLCAweDUwLCAweDE4LCAweGY2LCAweDc2LAorMHgwMSwgMHgwMCwgMHgxYywgMHgwMCwgMHgwMCwgMHgwMCwgMHgzMCwgMHgxOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwKKzB4Y2MsIDB4MzAsIDB4NDUsIDB4YzUsIDB4MDQsIDB4ZWIsIDB4MmQsIDB4MDEsIDB4MDAsIDB4MWMsIDB4ZWEsIDB4MjksIDB4MDEsCisweDAwLCAweDFjLCAweGMwLCAweDU5LCAweDAxLCAweDAwLCAweDFjLCAweGY1LCAweDc3LCAweDI5LCAweGM1LCAweDA0LCAweGUwLAorMHgzMCwgMHhkYywgMHgwNCwgMHgwMCwgMHgwMCwgMHg0YywgMHhiMCwgMHgwNCwgMHgwMCwgMHgyMCwgMHg0YywgMHhmNCwgMHgwNCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4ZTgsIDB4MDQsIDB4MDAsIDB4Y2MsIDB4YjMsIDB4ZmMsIDB4MDMsIDB4MWMsIDB4Y2MsIDB4MzMsCisweDA5LCAweDAyLCAweDFjLCAweGViLCAweDJkLCAweGI1LCAweGM0LCAweDA0LCAweGNjLCAweGIzLCAweGZjLCAweDAzLCAweDFjLAorMHhjYywgMHgzMywgMHgxOSwgMHgwMiwgMHgxYywgMHhlYiwgMHgyZCwgMHhiNSwgMHhjNCwgMHgwNCwgMHhjYywgMHhiMywgMHhmYywKKzB4MDMsIDB4MWMsIDB4Y2MsIDB4MzMsIDB4MGQsIDB4MDIsIDB4MWMsIDB4ZWIsIDB4MmQsIDB4YjUsIDB4YzQsIDB4MDQsIDB4Y2MsCisweGIzLCAweGZjLCAweDAzLCAweDFjLCAweGNjLCAweDMzLCAweDExLCAweDAyLCAweDFjLCAweGViLCAweDJkLCAweGI1LCAweGM0LAorMHgwNCwgMHgwMCwgMHg3YiwgMHgwMCwgMHg4MCwgMHgxYywgMHhhZSwgMHg3NywgMHg0NSwgMHgwNSwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDQsIDB4YzAsIDB4MDQsIDB4ZDMsIDB4OGIsIDB4MDAsIDB4ZmMsIDB4MWYsIDB4NjAsIDB4N2EsIDB4M2MsIDB4MDAsIDB4MWMsCisweDYwLCAweDRjLCAweGMwLCAweDA0LCAweDAwLCAweGMwLCAweDJmLCAweDIwLCAweDA1LCAweDFmLCAweGUwLCAweDMwLCAweGIwLAorMHgwNCwgMHgwMCwgMHg4MCwgMHgyNSwgMHhiMCwgMHgwNCwgMHgwMCwgMHhiNSwgMHg1YiwgMHhiMSwgMHgwNCwgMHgwNCwgMHg2OSwKKzB4MjYsIDB4MDEsIDB4MDAsIDB4MWMsIDB4NmEsIDB4MmIsIDB4MDEsIDB4MDAsIDB4MWMsIDB4ODAsIDB4MWQsIDB4MDAsIDB4MDAsCisweDFjLCAweGE5LCAweDI1LCAweDQ1LCAweDA1LCAweDAwLCAweGVlLCAweDMwLCAweDAwLCAweDAwLCAweDFjLCAweGFmLCAweDc3LAorMHgwMSwgMHgwNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhYywgMHgyNCwgMHgwNCwgMHhiNCwgMHg1ZiwgMHgwMSwgMHg0MCwgMHgxOCwKKzB4MDcsIDB4OWQsIDB4NDgsIDB4NTUsIDB4MDQsIDB4YjcsIDB4NzYsIDB4MDEsIDB4MDAsIDB4MWMsIDB4OTYsIDB4NzYsIDB4MDEsCisweDAwLCAweDFjLCAweDQ3LCAweDFkLCAweDAxLCAweDAwLCAweDFjLCAweGE0LCAweDMzLCAweDAxLCAweDYwLCAweDE4LCAweGE0LAorMHgyZiwgMHgwMSwgMHg2MCwgMHgxOCwgMHg2NCwgMHg3NywgMHgwMSwgMHg2MCwgMHgxOCwgMHgyNCwgMHg3NywgMHgwMSwgMHg2MCwKKzB4MTgsIDB4NDQsIDB4NzcsIDB4MDEsIDB4MDAsIDB4MWMsIDB4NjQsIDB4ODgsIDB4MDMsIDB4MDAsIDB4MWMsIDB4YTQsIDB4M2YsCisweDAxLCAweDAwLCAweDFjLCAweGE0LCAweDNiLCAweDAxLCAweDAwLCAweDFjLCAweDUzLCAweDdiLCAweDAwLCAweGMwLCAweDFjLAorMHhkMywgMHhjZiwgMHgxYiwgMHgwMCwgMHgxYywgMHg1MywgMHg0ZiwgMHgwMiwgMHgwMCwgMHgxYywgMHhkYSwgMHhjZiwgMHgwMCwKKzB4YzAsIDB4MWYsIDB4ZDUsIDB4NTcsIDB4MGYsIDB4MDAsIDB4MWMsIDB4ZDMsIDB4ZDMsIDB4MzcsIDB4MDAsIDB4MWMsIDB4ZDQsCisweDUzLCAweDBmLCAweDAwLCAweDFjLCAweGUwLCAweDI5LCAweDAwLCAweDAwLCAweDFjLCAweGY1LCAweGQ1LCAweGIwLCAweDA1LAorMHgwMCwgMHgwMCwgMHgwMCwgMHg5YywgMHg1NSwgMHgwNCwgMHg3NywgMHg1NiwgMHgwMSwgMHgwMCwgMHgxYywgMHg1NiwgMHg1MywKKzB4MDEsIDB4MDAsIDB4MWMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MTgsIDB4MDAsIDB4MDAsIDB4MDQsIDB4YzAsIDB4MDQsCisweGY1LCAweDU1LCAweDAxLCAweDAwLCAweDFjLCAweDAwLCAweDAwLCAweGI0LCAweDU1LCAweDA0LCAweDc3LCAweDU2LCAweDAxLAorMHgwMCwgMHgxYywgMHg1NiwgMHg1MywgMHgwMSwgMHgwMCwgMHgxYywgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgxOCwgMHgwMCwKKzB4MDAsIDB4MDQsIDB4YzAsIDB4MDQsIDB4Y2IsIDB4MmYsIDB4MDEsIDB4MTgsIDB4MTAsIDB4Y2IsIDB4MmYsIDB4MDEsIDB4MTAsCisweDEwLCAweGNiLCAweDJmLCAweDAxLCAweDA4LCAweDEwLCAweGNiLCAweDJmLCAweDAxLCAweDA4LCAweDEwLCAweGNiLCAweDJmLAorMHgwMSwgMHgyMCwgMHgxMCwgMHhjYiwgMHgyZiwgMHgwMSwgMHgyOCwgMHgxMCwgMHhjYiwgMHgyZiwgMHgwMSwgMHgwMCwgMHgxMCwKKzB4ODksIDB4MjUsIDB4NjEsIDB4YzIsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ZWMsIDB4YzIsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NTQsCisweGMzLCAweDA0LCAweDAwLCAweDAwLCAweDU0LCAweGMzLCAweDA0LCAweDAwLCAweDAwLCAweDU0LCAweGMzLCAweDA0LCAweDAwLAorMHgwMCwgMHg2MCwgMHhjMiwgMHgwNCwgMHgwMCwgMHgwMCwgMHhlYywgMHhjMiwgMHgwNCwgMHgwMCwgMHgwMCwgMHg1NCwgMHhjMywKKzB4MDQsIDB4MDAsIDB4MDAsIDB4NTQsIDB4YzMsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NTQsIDB4YzMsIDB4MDQsIDB4NDAsIDB4MWMsCisweDZjLCAweGMwLCAweDA0LCAweDQwLCAweDFjLCAweDljLCAweGMwLCAweDA0LCAweGE3LCAweDc3LCAweDU1LCAweGMzLCAweDA0LAorMHgwMCwgMHgwMCwgMHhjNCwgMHhjMCwgMHgwNCwgMHgyNywgMHgxZCwgMHhmMSwgMHhjMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg1NCwKKzB4YzMsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NTQsIDB4YzMsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NTQsIDB4YzMsIDB4MDQsIDB4MDAsCisweDAwLCAweDJjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDJjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDJjLCAweGM2LAorMHgwNCwgMHgwMCwgMHgwMCwgMHgyYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwKKzB4MmMsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MmMsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MmMsIDB4YzYsIDB4MDQsCisweDAwLCAweDAwLCAweDJjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDJjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDJjLAorMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyYywgMHhjNiwgMHgwNCwgMHgwMCwKKzB4MDAsIDB4MmMsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MmMsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MmMsIDB4YzYsCisweDA0LCAweDAwLCAweDAwLCAweDJjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDJjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLAorMHgyYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyYywgMHhjNiwgMHgwNCwKKzB4MDAsIDB4MDAsIDB4MmMsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MmMsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MmMsCisweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDJjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDJjLCAweGM2LCAweDA0LCAweDAwLAorMHgwMCwgMHgyYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyYywgMHhjNiwKKzB4MDQsIDB4MDAsIDB4MDAsIDB4MmMsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MmMsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsCisweDJjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDJjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDJjLCAweGM2LCAweDA0LAorMHgwMCwgMHgwMCwgMHgyYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyYywKKzB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MmMsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MmMsIDB4YzYsIDB4MDQsIDB4MDAsCisweDAwLCAweDJjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDJjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDJjLCAweGM2LAorMHgwNCwgMHgwMCwgMHgwMCwgMHgyYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwKKzB4MmMsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MmMsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MmMsIDB4YzYsIDB4MDQsCisweDAwLCAweDAwLCAweDJjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDJjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDJjLAorMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyYywgMHhjNiwgMHgwNCwgMHgwMCwKKzB4MDAsIDB4MmMsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MmMsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MmMsIDB4YzYsCisweDA0LCAweDAwLCAweDAwLCAweDJjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDJjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLAorMHgyYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyYywgMHhjNiwgMHgwNCwKKzB4MDAsIDB4MDAsIDB4MmMsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MmMsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MmMsCisweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDJjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDJjLCAweGM2LCAweDA0LCAweDAwLAorMHgwMCwgMHgyYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyYywgMHhjNiwKKzB4MDQsIDB4MDAsIDB4MDAsIDB4MmMsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MmMsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsCisweDJjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDJjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDJjLCAweGM2LCAweDA0LAorMHgwMCwgMHgwMCwgMHgyYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyYywKKzB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MmMsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MmMsIDB4YzYsIDB4MDQsIDB4MDAsCisweDAwLCAweDJjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDJjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDJjLCAweGM2LAorMHgwNCwgMHgwMCwgMHgwMCwgMHgyYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwKKzB4MmMsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MmMsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MmMsIDB4YzYsIDB4MDQsCisweDAwLCAweDAwLCAweDJjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDJjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDJjLAorMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyYywgMHhjNiwgMHgwNCwgMHgwMCwKKzB4MDAsIDB4MmMsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MmMsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MmMsIDB4YzYsCisweDA0LCAweDAwLCAweDAwLCAweDJjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDJjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLAorMHgyYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyYywgMHhjNiwgMHgwNCwKKzB4MDAsIDB4MDAsIDB4MmMsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MmMsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MmMsCisweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDJjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDJjLCAweGM2LCAweDA0LCAweDAwLAorMHgwMCwgMHgyYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyYywgMHhjNiwKKzB4MDQsIDB4MDAsIDB4MDAsIDB4MmMsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MmMsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsCisweDJjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDJjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDJjLCAweGM2LCAweDA0LAorMHgwMCwgMHgwMCwgMHgyYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyYywKKzB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MmMsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MmMsIDB4YzYsIDB4MDQsCit9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3NsaWNvc3Mvc2xpYy5oIGIvZHJpdmVycy9zdGFnaW5nL3NsaWNvc3Mvc2xpYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkNWRjMjQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvc2xpY29zcy9zbGljLmgKQEAgLTAsMCArMSw1OTggQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIENvcHlyaWdodCAoYykgMjAwMC0yMDAyIEFsYWNyaXRlY2gsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkCisgKiAgICB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBTEFDUklURUNILCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQUxBQ1JJVEVDSCwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCisgKiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqCisgKiBUaGUgdmlld3MgYW5kIGNvbmNsdXNpb25zIGNvbnRhaW5lZCBpbiB0aGUgc29mdHdhcmUgYW5kIGRvY3VtZW50YXRpb24KKyAqIGFyZSB0aG9zZSBvZiB0aGUgYXV0aG9ycyBhbmQgc2hvdWxkIG5vdCBiZSBpbnRlcnByZXRlZCBhcyByZXByZXNlbnRpbmcKKyAqIG9mZmljaWFsIHBvbGljaWVzLCBlaXRoZXIgZXhwcmVzc2VkIG9yIGltcGxpZWQsIG9mIEFsYWNyaXRlY2gsIEluYy4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisgKiBGSUxFTkFNRTogc2xpYy5oCisgKgorICogVGhpcyBpcyB0aGUgYmFzZSBzZXQgb2YgaGVhZGVyIGRlZmluaXRpb25zIGZvciB0aGUgU0xJQ09TUyBkcml2ZXIuCisgKi8KKyNpZm5kZWYgX19TTElDX0RSSVZFUl9IX18KKyNkZWZpbmUgX19TTElDX0RSSVZFUl9IX18KKworCitzdHJ1Y3Qgc2xpY19zcGlubG9jayB7CisJc3BpbmxvY2tfdAlsb2NrOworCXVuc2lnbmVkIGxvbmcJZmxhZ3M7Cit9OworCisjZGVmaW5lIFNMSUNfUlNQUV9QQUdFU19HQiAgICAgICAgMTAKKyNkZWZpbmUgU0xJQ19SU1BRX0JVRlNJTlBBR0UgICAgICAoUEFHRV9TSVpFIC8gU0xJQ19SU1BCVUZfU0laRSkKKworc3RydWN0IHNsaWNfcnNwcXVldWUgeworICAgIHUzMiAgICAgICAgICAgICBvZmZzZXQ7CisgICAgdTMyICAgICAgICAgICAgIHBhZ2VpbmRleDsKKyAgICB1MzIgICAgICAgICAgICAgbnVtX3BhZ2VzOworICAgIHN0cnVjdCBzbGljX3JzcGJ1ZiAqcnNwYnVmOworICAgIHUzMiAqdmFkZHJbU0xJQ19SU1BRX1BBR0VTX0dCXTsKKyAgICBkbWFfYWRkcl90ICAgICAgICAgIHBhZGRyW1NMSUNfUlNQUV9QQUdFU19HQl07Cit9OworCisjZGVmaW5lIFNMSUNfUkNWUV9FWFBBTlNJT04gICAgICAgICAxCisjZGVmaW5lIFNMSUNfUkNWUV9FTlRSSUVTICAgICAgICAgICAoMjU2ICogU0xJQ19SQ1ZRX0VYUEFOU0lPTikKKyNkZWZpbmUgU0xJQ19SQ1ZRX01JTkVOVFJJRVMgICAgICAgIChTTElDX1JDVlFfRU5UUklFUyAvIDIpCisjZGVmaW5lIFNMSUNfUkNWUV9NQVhfUFJPQ0VTU19JU1IgICAoKFNMSUNfUkNWUV9FTlRSSUVTICogNCkpCisjZGVmaW5lIFNMSUNfUkNWUV9SQ1ZCVUZTSVpFICAgICAgICAyMDQ4CisjZGVmaW5lIFNMSUNfUkNWUV9GSUxMRU5UUklFUyAgICAgICAoMTYgKiBTTElDX1JDVlFfRVhQQU5TSU9OKQorI2RlZmluZSBTTElDX1JDVlFfRklMTFRIUkVTSCAgICAgICAgKFNMSUNfUkNWUV9FTlRSSUVTIC0gU0xJQ19SQ1ZRX0ZJTExFTlRSSUVTKQorCitzdHJ1Y3Qgc2xpY19yY3ZxdWV1ZSB7CisgICAgc3RydWN0IHNrX2J1ZmYgICAgKmhlYWQ7CisgICAgc3RydWN0IHNrX2J1ZmYgICAgKnRhaWw7CisgICAgdTMyICAgICAgICAgICAgY291bnQ7CisgICAgdTMyICAgICAgICAgICAgc2l6ZTsKKyAgICB1MzIgICAgICAgICAgICBlcnJvcnM7Cit9OworCitzdHJ1Y3Qgc2xpY19yY3ZidWZfaW5mbyB7CisgICAgdTMyICAgICBpZDsKKyAgICB1MzIgICAgIHN0YXJ0dGltZTsKKyAgICB1MzIgICAgIHN0b3B0aW1lOworICAgIHUzMiAgICAgc2xpY3dvcmxkOworICAgIHUzMiAgICAgbGFzdHRpbWU7CisgICAgdTMyICAgICBsYXN0aWQ7Cit9OworLyoKKyBTTElDIEhhbmRsZSBzdHJ1Y3R1cmUuICBVc2VkIHRvIHJlc3RyaWN0IGhhbmRsZSB2YWx1ZXMgdG8KKyAzMiBiaXRzIGJ5IHVzaW5nIGFuIGluZGV4IHJhdGhlciB0aGFuIGFuIGFkZHJlc3MuCisgU2ltcGxpZmllcyB1Y29kZSBpbiA2NC1iaXQgc3lzdGVtcworKi8KK3N0cnVjdCBzbGljX2hhbmRsZV93b3JkIHsKKwl1bmlvbiB7CisJCXN0cnVjdCB7CisJCQl1c2hvcnQgICAgICBpbmRleDsKKwkJCXVzaG9ydCAgICAgIGJvdHRvbWJpdHM7IC8qIHRvIGRlbm90ZSBudW0gYnVmcyB0byBjYXJkICovCisJCX0gIHBhcnRzOworCQl1MzIgICAgICAgICB3aG9sZTsKKwl9ICBoYW5kbGU7Cit9OworCitzdHJ1Y3Qgc2xpY19oYW5kbGUgeworICAgIHN0cnVjdCBzbGljX2hhbmRsZV93b3JkICB0b2tlbjsgIC8qIHRva2VuIHBhc3NlZCBiZXR3ZWVuIGhvc3QgYW5kIGNhcmQqLworICAgIHVzaG9ydCAgICAgICAgICAgICAgICAgICAgICB0eXBlOworICAgIHZvaWQgKmFkZHJlc3M7ICAgIC8qIGFjdHVhbCBhZGRyZXNzIG9mIHRoZSBvYmplY3QqLworICAgIHVzaG9ydCAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQ7CisgICAgc3RydWN0IHNsaWNfaGFuZGxlICAgICAgICpvdGhlcl9oYW5kbGU7CisgICAgc3RydWN0IHNsaWNfaGFuZGxlICAgICAgICpuZXh0OworfTsKKworI2RlZmluZSBTTElDX0hBTkRMRV9GUkVFICAgICAgICAweDAwMDAKKyNkZWZpbmUgU0xJQ19IQU5ETEVfREFUQSAgICAgICAgMHgwMDAxCisjZGVmaW5lIFNMSUNfSEFORExFX0NNRCAgICAgICAgIDB4MDAwMgorI2RlZmluZSBTTElDX0hBTkRMRV9DT05URVhUICAgICAweDAwMDMKKyNkZWZpbmUgU0xJQ19IQU5ETEVfVEVBTSAgICAgICAgMHgwMDA0CisKKyNkZWZpbmUgaGFuZGxlX2luZGV4ICAgICAgICBoYW5kbGUucGFydHMuaW5kZXgKKyNkZWZpbmUgaGFuZGxlX2JvdHRvbSAgICAgICBoYW5kbGUucGFydHMuYm90dG9tYml0cworI2RlZmluZSBoYW5kbGVfdG9rZW4gICAgICAgIGhhbmRsZS53aG9sZQorCisjZGVmaW5lIFNMSUNfSE9TVENNRF9TSVpFICAgIDUxMgorCitzdHJ1Y3Qgc2xpY19ob3N0Y21kIHsKKyAgICBzdHJ1Y3Qgc2xpY19ob3N0NjRfY21kICBjbWQ2NDsKKyAgICB1MzIgICAgICAgICAgICAgICAgICAgIHR5cGU7CisgICAgc3RydWN0IHNrX2J1ZmYgICAgICAgICAgICAqc2tiOworICAgIHUzMiAgICAgICAgICAgICAgICAgICAgcGFkZHJsOworICAgIHUzMiAgICAgICAgICAgICAgICAgICAgcGFkZHJoOworICAgIHUzMiAgICAgICAgICAgICAgICAgICAgYnVzeTsKKyAgICB1MzIgICAgICAgICAgICAgICAgICAgIGNtZHNpemU7CisgICAgdXNob3J0ICAgICAgICAgICAgICAgICAgICAgbnVtYnVmczsKKyAgICBzdHJ1Y3Qgc2xpY19oYW5kbGUgICAgKnBzbGljX2hhbmRsZTsvKiBoYW5kbGUgYXNzb2NpYXRlZCB3aXRoIGNvbW1hbmQgKi8KKyAgICBzdHJ1Y3Qgc2xpY19ob3N0Y21kICAgICpuZXh0OworICAgIHN0cnVjdCBzbGljX2hvc3RjbWQgICAgKm5leHRfYWxsOworfTsKKworI2RlZmluZSBTTElDX0NNRFFfQ01EU0lOUEFHRSAgICAoUEFHRV9TSVpFIC8gU0xJQ19IT1NUQ01EX1NJWkUpCisjZGVmaW5lIFNMSUNfQ01EX0RVTUIgICAgICAgICAgICAzCisjZGVmaW5lIFNMSUNfQ01EUV9JTklUQ01EUyAgICAgICAyNTYKKyNkZWZpbmUgU0xJQ19DTURRX01BWENNRFMgICAgICAgIDI1NgorI2RlZmluZSBTTElDX0NNRFFfTUFYT1VUU1RBTkQgICAgU0xJQ19DTURRX01BWENNRFMKKyNkZWZpbmUgU0xJQ19DTURRX01BWFBBR0VTICAgICAgIChTTElDX0NNRFFfTUFYQ01EUyAvIFNMSUNfQ01EUV9DTURTSU5QQUdFKQorI2RlZmluZSBTTElDX0NNRFFfSU5JVFBBR0VTICAgICAgKFNMSUNfQ01EUV9JTklUQ01EUyAvIFNMSUNfQ01EUV9DTURTSU5QQUdFKQorCitzdHJ1Y3Qgc2xpY19jbWRxbWVtIHsKKwlpbnQgcGFnZWNudDsKKwl1MzIgKnBhZ2VzW1NMSUNfQ01EUV9NQVhQQUdFU107CisJZG1hX2FkZHJfdCBkbWFfcGFnZXNbU0xJQ19DTURRX01BWFBBR0VTXTsKK307CisKK3N0cnVjdCBzbGljX2NtZHF1ZXVlIHsKKwlzdHJ1Y3Qgc2xpY19ob3N0Y21kICpoZWFkOworCXN0cnVjdCBzbGljX2hvc3RjbWQgKnRhaWw7CisJaW50IGNvdW50OworCXN0cnVjdCBzbGljX3NwaW5sb2NrIGxvY2s7Cit9OworCisjaWZkZWYgU1RBVFVTX1NVQ0NFU1MKKyN1bmRlZiBTVEFUVVNfU1VDQ0VTUworI2VuZGlmCisKKyNkZWZpbmUgU1RBVFVTX1NVQ0NFU1MgICAgICAgICAgICAgIDAKKyNkZWZpbmUgU1RBVFVTX1BFTkRJTkcgICAgICAgICAgICAgIDAKKyNkZWZpbmUgU1RBVFVTX0ZBSUxVUkUgICAgICAgICAgICAgLTEKKyNkZWZpbmUgU1RBVFVTX0VSUk9SICAgICAgICAgICAgICAgLTIKKyNkZWZpbmUgU1RBVFVTX05PVF9TVVBQT1JURUQgICAgICAgLTMKKyNkZWZpbmUgU1RBVFVTX0JVRkZFUl9UT09fU0hPUlQgICAgLTQKKworI2RlZmluZSBTTElDX01BWF9DQVJEUyAgICAgICAgICAgICAgMzIKKyNkZWZpbmUgU0xJQ19NQVhfUE9SVFMgICAgICAgICAgICAgIDQgICAgICAgIC8qIE1heCAjIG9mIHBvcnRzIHBlciBjYXJkICAgKi8KKyNpZiBTTElDX0RVTVBfRU5BQkxFRAorLyoKK0R1bXAgYnVmZmVyIHNpemUKKworVGhpcyBjYW5ub3QgYmUgYmlnZ2VyIHRoYW4gdGhlIG1heCBETUEgc2l6ZSB0aGUgY2FyZCBzdXBwb3J0cywKK2dpdmVuIHRoZSBjdXJyZW50IGNvZGUgc3RydWN0dXJlIGluIHRoZSBob3N0IGFuZCB1Y29kZS4KK01vamF2ZSBzdXBwb3J0cyAxNkssIE9hc2lzIHN1cHBvcnRzIDE2Sy0xLCBzbworanVzdCBzZXQgdGhpcyBhdCAxNUssIHNob3VsZG50IG1ha2UgdGhhdCBtdWNoIG9mIGEgZGlmZi4KKyovCisjZGVmaW5lIERVTVBfQlVGX1NJWkUgICAgICAgICAgICAgICAweDNDMDAKKyNlbmRpZgorCisKK3N0cnVjdCBtY2FzdF9hZGRyZXNzIHsKKwl1bnNpZ25lZCBjaGFyIGFkZHJlc3NbNl07CisJc3RydWN0IG1jYXN0X2FkZHJlc3MgKm5leHQ7Cit9OworCisjZGVmaW5lIENBUkRfRE9XTiAgICAgICAgMHgwMDAwMDAwMAorI2RlZmluZSBDQVJEX1VQICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQ0FSRF9GQUlMICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIENBUkRfRElBRyAgICAgICAgMHgwMDAwMDAwMworI2RlZmluZSBDQVJEX1NMRUVQICAgICAgIDB4MDAwMDAwMDQKKworI2RlZmluZSBBREFQVF9ET1dOICAgICAgICAgICAgIDB4MDAKKyNkZWZpbmUgQURBUFRfVVAgICAgICAgICAgICAgICAweDAxCisjZGVmaW5lIEFEQVBUX0ZBSUwgICAgICAgICAgICAgMHgwMgorI2RlZmluZSBBREFQVF9SRVNFVCAgICAgICAgICAgIDB4MDMKKyNkZWZpbmUgQURBUFRfU0xFRVAgICAgICAgICAgICAweDA0CisKKyNkZWZpbmUgQURBUFRfRkxBR1NfQk9PVFRJTUUgICAgICAgICAgICAweDAwMDEKKyNkZWZpbmUgQURBUFRfRkxBR1NfSVM2NEJJVCAgICAgICAgICAgICAweDAwMDIKKyNkZWZpbmUgQURBUFRfRkxBR1NfUEVORElOR0xJTktET1dOICAgICAweDAwMDQKKyNkZWZpbmUgQURBUFRfRkxBR1NfRklCRVJNRURJQSAgICAgICAgICAweDAwMDgKKyNkZWZpbmUgQURBUFRfRkxBR1NfTE9DS1NfQUxMT0NFRCAgICAgICAweDAwMTAKKyNkZWZpbmUgQURBUFRfRkxBR1NfSU5UX1JFR0lTVEVSRUQgICAgICAweDAwMjAKKyNkZWZpbmUgQURBUFRfRkxBR1NfTE9BRF9USU1FUl9TRVQgICAgICAweDAwNDAKKyNkZWZpbmUgQURBUFRfRkxBR1NfU1RBVFNfVElNRVJfU0VUICAgICAweDAwODAKKyNkZWZpbmUgQURBUFRfRkxBR1NfUkVTRVRfVElNRVJfU0VUICAgICAweDAxMDAKKworI2RlZmluZSBMSU5LX0RPV04gICAgICAgICAgICAgIDB4MDAKKyNkZWZpbmUgTElOS19DT05GSUcgICAgICAgICAgICAweDAxCisjZGVmaW5lIExJTktfVVAgICAgICAgICAgICAgICAgMHgwMgorCisjZGVmaW5lIExJTktfMTBNQiAgICAgICAgICAgICAgMHgwMAorI2RlZmluZSBMSU5LXzEwME1CICAgICAgICAgICAgIDB4MDEKKyNkZWZpbmUgTElOS19BVVRPU1BFRUQgICAgICAgICAweDAyCisjZGVmaW5lIExJTktfMTAwME1CICAgICAgICAgICAgMHgwMworI2RlZmluZSBMSU5LXzEwMDAwTUIgICAgICAgICAgIDB4MDQKKworI2RlZmluZSBMSU5LX0hBTEZEICAgICAgICAgICAgIDB4MDAKKyNkZWZpbmUgTElOS19GVUxMRCAgICAgICAgICAgICAweDAxCisjZGVmaW5lIExJTktfQVVUT0QgICAgICAgICAgICAgMHgwMgorCisjZGVmaW5lIE1BQ19ESVJFQ1RFRCAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBNQUNfQkNBU1QgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgTUFDX01DQVNUICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIE1BQ19QUk9NSVNDICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBNQUNfTE9PUEJBQ0sgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgTUFDX0FMTE1DQVNUICAgICAweDAwMDAwMDIwCisKKyNkZWZpbmUgU0xJQ19EVVBMRVgoeCkgICAgKCh4ID09IExJTktfRlVMTEQpID8gIkZEWCIgOiAiSERYIikKKyNkZWZpbmUgU0xJQ19TUEVFRCh4KSAgICAgKCh4ID09IExJTktfMTAwTUIpID8gIjEwME1iIiA6ICgoeCA9PSBMSU5LXzEwMDBNQikgP1wKKwkJCQkiMTAwME1iIiA6ICIgMTBNYiIpKQorI2RlZmluZSBTTElDX0xJTktTVEFURSh4KSAoKHggPT0gTElOS19ET1dOKSA/ICJEb3duIiA6ICJVcCAgIikKKyNkZWZpbmUgU0xJQ19BREFQVEVSX1NUQVRFKHgpICgoeCA9PSBBREFQVF9VUCkgPyAiVVAiIDogIkRvd24iKQorI2RlZmluZSBTTElDX0NBUkRfU1RBVEUoeCkgICAgKCh4ID09IENBUkRfVVApID8gIlVQIiA6ICJEb3duIikKKworc3RydWN0IHNsaWNfaWZhY2Vfc3RhdHMgeworICAgIC8qCisgICAgICogU3RhdHMKKyAgICAgKi8KKyAgICB1NjQgICAgICAgIHhtdF9ieXRlczsKKyAgICB1NjQgICAgICAgIHhtdF91Y2FzdDsKKyAgICB1NjQgICAgICAgIHhtdF9tY2FzdDsKKyAgICB1NjQgICAgICAgIHhtdF9iY2FzdDsKKyAgICB1NjQgICAgICAgIHhtdF9lcnJvcnM7CisgICAgdTY0ICAgICAgICB4bXRfZGlzY2FyZHM7CisgICAgdTY0ICAgICAgICB4bWl0X2NvbGxpc2lvbnM7CisgICAgdTY0ICAgICAgICB4bWl0X2V4Y2Vzc194bWl0X2NvbGxpc2lvbnM7CisgICAgdTY0ICAgICAgICByY3ZfYnl0ZXM7CisgICAgdTY0ICAgICAgICByY3ZfdWNhc3Q7CisgICAgdTY0ICAgICAgICByY3ZfbWNhc3Q7CisgICAgdTY0ICAgICAgICByY3ZfYmNhc3Q7CisgICAgdTY0ICAgICAgICByY3ZfZXJyb3JzOworICAgIHU2NCAgICAgICAgcmN2X2Rpc2NhcmRzOworfTsKKworc3RydWN0IHNsaWNjcF9zdGF0cyB7CisgICAgdTY0ICAgICAgICB4bWl0X3RjcF9zZWdzOworICAgIHU2NCAgICAgICAgeG1pdF90Y3BfYnl0ZXM7CisgICAgdTY0ICAgICAgICByY3ZfdGNwX3NlZ3M7CisgICAgdTY0ICAgICAgICByY3ZfdGNwX2J5dGVzOworfTsKKworc3RydWN0IHNsaWNuZXRfc3RhdHMgeworICAgIHN0cnVjdCBzbGljY3Bfc3RhdHMgICAgICAgIHRjcDsKKyAgICBzdHJ1Y3Qgc2xpY19pZmFjZV9zdGF0cyAgICAgIGlmYWNlOworfTsKKworI2RlZmluZSBTTElDX0xPQURUSU1FUl9QRVJJT0QgICAgIDEKKyNkZWZpbmUgU0xJQ19JTlRBR0dfREVGQVVMVCAgICAgICAyMDAKKyNkZWZpbmUgU0xJQ19MT0FEXzAgICAgICAgICAgICAgICAwCisjZGVmaW5lIFNMSUNfSU5UQUdHXzAgICAgICAgICAgICAgMAorI2RlZmluZSBTTElDX0xPQURfMSAgICAgICAgICAgICAgIDgwMDAKKyNkZWZpbmUgU0xJQ19MT0FEXzIgICAgICAgICAgICAgICAxMDAwMAorI2RlZmluZSBTTElDX0xPQURfMyAgICAgICAgICAgICAgIDEyMDAwCisjZGVmaW5lIFNMSUNfTE9BRF80ICAgICAgICAgICAgICAgMTQwMDAKKyNkZWZpbmUgU0xJQ19MT0FEXzUgICAgICAgICAgICAgICAxNjAwMAorI2RlZmluZSBTTElDX0lOVEFHR18xICAgICAgICAgICAgIDUwCisjZGVmaW5lIFNMSUNfSU5UQUdHXzIgICAgICAgICAgICAgMTAwCisjZGVmaW5lIFNMSUNfSU5UQUdHXzMgICAgICAgICAgICAgMTUwCisjZGVmaW5lIFNMSUNfSU5UQUdHXzQgICAgICAgICAgICAgMjAwCisjZGVmaW5lIFNMSUNfSU5UQUdHXzUgICAgICAgICAgICAgMjUwCisjZGVmaW5lIFNMSUNfTE9BRF8xR0IgICAgICAgICAgICAgMzAwMAorI2RlZmluZSBTTElDX0xPQURfMkdCICAgICAgICAgICAgIDYwMDAKKyNkZWZpbmUgU0xJQ19MT0FEXzNHQiAgICAgICAgICAgICAxMjAwMAorI2RlZmluZSBTTElDX0xPQURfNEdCICAgICAgICAgICAgIDI0MDAwCisjZGVmaW5lIFNMSUNfTE9BRF81R0IgICAgICAgICAgICAgNDgwMDAKKyNkZWZpbmUgU0xJQ19JTlRBR0dfMUdCICAgICAgICAgICA1MAorI2RlZmluZSBTTElDX0lOVEFHR18yR0IgICAgICAgICAgIDc1CisjZGVmaW5lIFNMSUNfSU5UQUdHXzNHQiAgICAgICAgICAgMTAwCisjZGVmaW5lIFNMSUNfSU5UQUdHXzRHQiAgICAgICAgICAgMTAwCisjZGVmaW5lIFNMSUNfSU5UQUdHXzVHQiAgICAgICAgICAgMTAwCisKK3N0cnVjdCBldGhlcl9oZWFkZXIgeworICAgIHVuc2lnbmVkIGNoYXIgICAgZXRoZXJfZGhvc3RbNl07CisgICAgdW5zaWduZWQgY2hhciAgICBldGhlcl9zaG9zdFs2XTsKKyAgICB1c2hvcnQgICBldGhlcl90eXBlOworfTsKKworc3RydWN0IHNsaWNjYXJkIHsKKyAgICB1aW50ICAgICAgICAgICAgICBidXNudW1iZXI7CisgICAgdWludCAgICAgICAgICAgICAgc2xvdG51bWJlcjsKKyAgICB1aW50ICAgICAgICAgICAgICBzdGF0ZTsKKyAgICB1aW50ICAgICAgICAgICAgICBjYXJkbnVtOworICAgIHVpbnQgICAgICAgICAgICAgIGNhcmRfc2l6ZTsKKyAgICB1aW50ICAgICAgICAgICAgICBhZGFwdGVyc19hY3RpdmF0ZWQ7CisgICAgdWludCAgICAgICAgICAgICAgYWRhcHRlcnNfYWxsb2NhdGVkOworICAgIHVpbnQgICAgICAgICAgICAgIGFkYXB0ZXJzX3NsZWVwaW5nOworICAgIHVpbnQgICAgICAgICAgICAgIGdlbm51bWJlcjsKKyAgICB1MzIgICAgICAgICAgIGV2ZW50czsKKyAgICB1MzIgICAgICAgICAgIGxvYWRsZXZlbF9jdXJyZW50OworICAgIHUzMiAgICAgICAgICAgbG9hZDsKKyAgICB1aW50ICAgICAgICAgICAgICByZXNldF9pbl9wcm9ncmVzczsKKyAgICB1MzIgICAgICAgICAgIHBpbmdzdGF0dXM7CisgICAgdTMyICAgICAgICAgICBiYWRfcGluZ3N0YXR1czsKKyAgICBzdHJ1Y3QgdGltZXJfbGlzdCBsb2FkdGltZXI7CisgICAgdTMyICAgICAgICAgICBsb2FkdGltZXJzZXQ7CisgICAgdWludCAgICAgICAgICAgICAgY29uZmlnX3NldDsKKyAgICBzdHJ1Y3Qgc2xpY19jb25maWcgIGNvbmZpZzsKKyAgICBzdHJ1Y3QgZGVudHJ5ICAgICAgKmRlYnVnZnNfZGlyOworICAgIHN0cnVjdCBkZW50cnkgICAgICAqZGVidWdmc19jYXJkaW5mbzsKKyAgICBzdHJ1Y3QgYWRhcHRlciAgKm1hc3RlcjsKKyAgICBzdHJ1Y3QgYWRhcHRlciAgKmFkYXB0ZXJbU0xJQ19NQVhfUE9SVFNdOworICAgIHN0cnVjdCBzbGljY2FyZCAqbmV4dDsKKyAgICB1MzIgICAgICAgICAgICAgZXJyb3JfaW50ZXJydXB0czsKKyAgICB1MzIgICAgICAgICAgICAgZXJyb3Jfcm1pc3NfaW50ZXJydXB0czsKKyAgICB1MzIgICAgICAgICAgICAgcmN2X2ludGVycnVwdHM7CisgICAgdTMyICAgICAgICAgICAgIHhtaXRfaW50ZXJydXB0czsKKyAgICB1MzIgICAgICAgICAgICAgbnVtX2lzcnM7CisgICAgdTMyICAgICAgICAgICAgIGZhbHNlX2ludGVycnVwdHM7CisgICAgdTMyICAgICAgICAgICAgIG1heF9pc3JfcmN2czsKKyAgICB1MzIgICAgICAgICAgICAgbWF4X2lzcl94bWl0czsKKyAgICB1MzIgICAgICAgICAgICAgcmN2X2ludGVycnVwdF95aWVsZHM7CisgICAgdTMyICAgICAgICAgICAgIHR4X3BhY2tldHM7CisjaWYgU0xJQ19EVU1QX0VOQUJMRUQKKyAgICB1MzIgICAgICAgICAgICAgZHVtcHN0YXR1czsgICAgICAgICAgIC8qIFJlc3VsdCBvZiBkdW1wIFVQUiAqLworICAgIHZvaWQgKmNtZGJ1ZmZlcjsKKworICAgIHVsb25nICAgICAgICAgICAgICAgY21kYnVmZmVyX3BoeXM7CisgICAgdTMyICAgICAgICAgICAgIGNtZGJ1ZmZlcl9waHlzbDsKKyAgICB1MzIgICAgICAgICAgICAgY21kYnVmZmVyX3BoeXNoOworCisgICAgdTMyICAgICAgICAgICAgIGR1bXBfY291bnQ7CisgICAgc3RydWN0IHRhc2tfc3RydWN0ICpkdW1wX3Rhc2tfaWQ7CisgICAgdTMyICAgICAgICAgICAgIGR1bXBfd2FpdF9jb3VudDsKKyAgICB1aW50ICAgICAgICAgICAgICAgIGR1bXB0aHJlYWRfcnVubmluZzsgLyogaGFzIGEgZHVtcCB0aHJlYWQgYmVlbiBpbml0J2QgICovCisgICAgdWludCAgICAgICAgICAgICAgICBkdW1wX3JlcXVlc3RlZDsgICAgIC8qIDAgbm8sIDEgPSByZXFzdGQgMj1jdXJyIDM9ZG9uZSAqLworICAgIHUzMiAgICAgICAgICAgICBkdW1wdGltZV9zdGFydDsKKyAgICB1MzIgICAgICAgICAgICAgZHVtcHRpbWVfY29tcGxldGU7CisgICAgdTMyICAgICAgICAgICAgIGR1bXB0aW1lX2RlbHRhOworICAgIHZvaWQgKmR1bXBidWZmZXI7CisgICAgdWxvbmcgICAgICAgICAgICAgICBkdW1wYnVmZmVyX3BoeXM7CisgICAgdTMyICAgICAgICAgICAgIGR1bXBidWZmZXJfcGh5c2w7CisgICAgdTMyICAgICAgICAgICAgIGR1bXBidWZmZXJfcGh5c2g7CisgICAgd2FpdF9xdWV1ZV9oZWFkX3QgICBkdW1wX3dxOworICAgIHN0cnVjdCBmaWxlICAgICAgICAqZHVtcGhhbmRsZTsKKyAgICBtbV9zZWdtZW50X3QgICAgICAgIGR1bXBmaWxlX2ZzOworI2VuZGlmCisgICAgdTMyICAgICAgICAgICAgIGRlYnVnX2l4OworICAgIHVzaG9ydCAgICAgICAgICAgICAgcmVnX3R5cGVbMzJdOworICAgIHVzaG9ydCAgICAgICAgICAgICAgcmVnX29mZnNldFszMl07CisgICAgdTMyICAgICAgICAgICAgIHJlZ192YWx1ZVszMl07CisgICAgdTMyICAgICAgICAgICAgIHJlZ192YWx1ZWhbMzJdOworfTsKKworI2RlZmluZSBOVU1fQ0ZHX1NQQUNFUyAgICAgIDIKKyNkZWZpbmUgTlVNX0NGR19SRUdTICAgICAgICA2NAorI2RlZmluZSBOVU1fQ0ZHX1JFR19VTE9OR1MgIChOVU1fQ0ZHX1JFR1MgLyBzaXplb2YodTMyKSkKKworc3RydWN0IHBoeXNjYXJkIHsKKyAgICBzdHJ1Y3QgYWRhcHRlciAgKmFkYXB0ZXJbU0xJQ19NQVhfUE9SVFNdOworICAgIHN0cnVjdCBwaHlzY2FyZCAqbmV4dDsKKyAgICB1aW50ICAgICAgICAgICAgICAgIGFkYXB0ZXJzX2FsbG9jZDsKKworIC8qICB0aGUgZm9sbG93aW5nIGlzIG5vdCBjdXJyZW50bHkgbmVlZGVkCisgICAgdTMyICAgICAgICAgICAgICAgYnJpZGdlX2J1c251bTsKKyAgICB1MzIgICAgICAgICAgICAgICBicmlkZ2VfY2ZnW05VTV9DRkdfU1BBQ0VTXVtOVU1fQ0ZHX1JFR19VTE9OR1NdOworICovCit9OworCitzdHJ1Y3QgYmFzZV9kcml2ZXIgeworICAgIHN0cnVjdCBzbGljX3NwaW5sb2NrIGRyaXZlcl9sb2NrOworICAgIHUzMiAgICAgICAgICAgICAgbnVtX3NsaWNfY2FyZHM7CisgICAgdTMyICAgICAgICAgICAgICBudW1fc2xpY19wb3J0czsKKyAgICB1MzIgICAgICAgICAgICAgIG51bV9zbGljX3BvcnRzX2FjdGl2ZTsKKyAgICB1MzIgICAgICAgICAgICAgIGR5bmFtaWNfaW50YWdnOworICAgIHN0cnVjdCBzbGljY2FyZCAgKnNsaWNfY2FyZDsKKyAgICBzdHJ1Y3QgcGh5c2NhcmQgICpwaHlzX2NhcmQ7CisgICAgdWludCAgICAgICAgICAgICAgICAgY2FyZG51bWludXNlW1NMSUNfTUFYX0NBUkRTXTsKK307CisKK3N0cnVjdCBzbGljX3NobWVtIHsKKyAgICB2b2xhdGlsZSB1MzIgICAgICAgICAgaXNyOworICAgIHZvbGF0aWxlIHUzMiAgICAgICAgICBsaW5rc3RhdHVzOworICAgIHZvbGF0aWxlIHN0cnVjdCBzbGljX3N0YXRzICAgICBpbmljc3RhdHM7Cit9OworCitzdHJ1Y3Qgc2xpY19yZWdfcGFyYW1zIHsKKyAgICB1MzIgICAgICAgbGlua3NwZWVkOworICAgIHUzMiAgICAgICBsaW5rZHVwbGV4OworICAgIHUzMiAgICAgICBmYWlsX29uX2JhZF9lZXByb207Cit9OworCitzdHJ1Y3Qgc2xpY191cHIgeworICAgIHVpbnQgICAgICAgICAgICAgICBhZGFwdGVyOworICAgIHUzMiAgICAgICAgICAgIHVwcl9yZXF1ZXN0OworICAgIHUzMiAgICAgICAgICAgIHVwcl9kYXRhOworICAgIHUzMiAgICAgICAgICAgIHVwcl9kYXRhX2g7CisgICAgdTMyICAgICAgICAgICAgdXByX2J1ZmZlcjsKKyAgICB1MzIgICAgICAgICAgICB1cHJfYnVmZmVyX2g7CisgICAgc3RydWN0IHNsaWNfdXByICpuZXh0OworfTsKKworc3RydWN0IHNsaWNfaWZldmVudHMgeworICAgIHVpbnQgICAgICAgIG9mbG93ODAyOworICAgIHVpbnQgICAgICAgIHVmbG93ODAyOworICAgIHVpbnQgICAgICAgIFRwcnRvZmxvdzsKKyAgICB1aW50ICAgICAgICByY3ZlYXJseTsKKyAgICB1aW50ICAgICAgICBCdWZvdjsKKyAgICB1aW50ICAgICAgICBDYXJyZTsKKyAgICB1aW50ICAgICAgICBMb25nZTsKKyAgICB1aW50ICAgICAgICBJbnZwOworICAgIHVpbnQgICAgICAgIENyYzsKKyAgICB1aW50ICAgICAgICBEcmJsOworICAgIHVpbnQgICAgICAgIENvZGU7CisgICAgdWludCAgICAgICAgSXBIbGVuOworICAgIHVpbnQgICAgICAgIElwTGVuOworICAgIHVpbnQgICAgICAgIElwQ3N1bTsKKyAgICB1aW50ICAgICAgICBUcENzdW07CisgICAgdWludCAgICAgICAgVHBIbGVuOworfTsKKworc3RydWN0IGFkYXB0ZXIgeworICAgIHZvaWQgKmlmcDsKKyAgICBzdHJ1Y3Qgc2xpY2NhcmQgKmNhcmQ7CisgICAgdWludCAgICAgICAgICAgICAgICBwb3J0OworICAgIHN0cnVjdCBwaHlzY2FyZCAqcGh5c2NhcmQ7CisgICAgdWludCAgICAgICAgICAgICAgICBwaHlzcG9ydDsKKyAgICB1aW50ICAgICAgICAgICAgICAgIGNhcmRpbmRleDsKKyAgICB1aW50ICAgICAgICAgICAgICAgIGNhcmRfc2l6ZTsKKyAgICB1aW50ICAgICAgICAgICAgICAgIGNoaXBpZDsKKyAgICBzdHJ1Y3QgbmV0X2RldmljZSAgKm5ldGRldjsKKyAgICBzdHJ1Y3QgbmV0X2RldmljZSAgKm5leHRfbmV0ZGV2aWNlOworICAgIHN0cnVjdCBzbGljX3NwaW5sb2NrICAgICBhZGFwdGVyX2xvY2s7CisgICAgc3RydWN0IHNsaWNfc3BpbmxvY2sgICAgIHJlc2V0X2xvY2s7CisgICAgc3RydWN0IHBjaV9kZXYgICAgICpwY2lkZXY7CisgICAgdWludCAgICAgICAgICAgICAgICBidXNudW1iZXI7CisgICAgdWludCAgICAgICAgICAgICAgICBzbG90bnVtYmVyOworICAgIHVpbnQgICAgICAgICAgICAgICAgZnVuY3Rpb25udW1iZXI7CisgICAgdXNob3J0ICAgICAgICAgICAgICB2ZW5kaWQ7CisgICAgdXNob3J0ICAgICAgICAgICAgICBkZXZpZDsKKyAgICB1c2hvcnQgICAgICAgICAgICAgIHN1YnN5c2lkOworICAgIHUzMiAgICAgICAgICAgICBpcnE7CisgICAgdm9pZCBfX2lvbWVtICptZW1vcnliYXNlOworICAgIHUzMiAgICAgICAgICAgICBtZW1vcnlsZW5ndGg7CisgICAgdTMyICAgICAgICAgICAgIGRyYW1iYXNlOworICAgIHUzMiAgICAgICAgICAgICBkcmFtbGVuZ3RoOworICAgIHVpbnQgICAgICAgICAgICAgICAgcXVldWVzX2luaXRpYWxpemVkOworICAgIHVpbnQgICAgICAgICAgICAgICAgYWxsb2NhdGVkOworICAgIHVpbnQgICAgICAgICAgICAgICAgYWN0aXZhdGVkOworICAgIHUzMiAgICAgICAgICAgICBpbnRycmVnaXN0ZXJlZDsKKyAgICB1aW50ICAgICAgICAgICAgICAgIGlzcF9pbml0aWFsaXplZDsKKyAgICB1aW50ICAgICAgICAgICAgICAgIGdlbm51bWJlcjsKKyAgICB1MzIgICAgICAgICAgICAgY3VyYWRkcnVwcGVyOworICAgIHN0cnVjdCBzbGljX3NobWVtICAgICAgKnBzaG1lbTsKKyAgICBkbWFfYWRkcl90ICAgICAgICAgIHBoeXNfc2htZW07CisgICAgdTMyICAgICAgICAgICAgIGlzcmNvcHk7CisgICAgX19pb21lbSBzdHJ1Y3Qgc2xpY19yZWdzICAgICAgICpzbGljX3JlZ3M7CisgICAgdW5zaWduZWQgY2hhciAgICAgICAgICAgICAgIHN0YXRlOworICAgIHVuc2lnbmVkIGNoYXIgICAgICAgICAgICAgICBsaW5rc3RhdGU7CisgICAgdW5zaWduZWQgY2hhciAgICAgICAgICAgICAgIGxpbmtzcGVlZDsKKyAgICB1bnNpZ25lZCBjaGFyICAgICAgICAgICAgICAgbGlua2R1cGxleDsKKyAgICB1aW50ICAgICAgICAgICAgICAgIGZsYWdzOworICAgIHVuc2lnbmVkIGNoYXIgICAgICAgICAgICAgICBtYWNhZGRyWzZdOworICAgIHVuc2lnbmVkIGNoYXIgICAgICAgICAgICAgICBjdXJybWFjYWRkcls2XTsKKyAgICB1MzIgICAgICAgICAgICAgbWFjb3B0czsKKyAgICB1c2hvcnQgICAgICAgICAgICAgIGRldmZsYWdzX3ByZXY7CisgICAgdTY0ICAgICAgICAgICAgIG1jYXN0bWFzazsKKyAgICBzdHJ1Y3QgbWNhc3RfYWRkcmVzcyAgICptY2FzdGFkZHJzOworICAgIHN0cnVjdCBzbGljX3VwciAgICp1cHJfbGlzdDsKKyAgICB1aW50ICAgICAgICAgICAgICAgIHVwcl9idXN5OworICAgIHN0cnVjdCB0aW1lcl9saXN0ICAgcGluZ3RpbWVyOworICAgIHUzMiAgICAgICAgICAgICBwaW5ndGltZXJzZXQ7CisgICAgc3RydWN0IHRpbWVyX2xpc3QgICBzdGF0c3RpbWVyOworICAgIHUzMiAgICAgICAgICAgICBzdGF0c3RpbWVyc2V0OworICAgIHN0cnVjdCB0aW1lcl9saXN0ICAgbG9hZHRpbWVyOworICAgIHUzMiAgICAgICAgICAgICBsb2FkdGltZXJzZXQ7CisgICAgc3RydWN0IGRlbnRyeSAgICAgICpkZWJ1Z2ZzX2VudHJ5OworICAgIHN0cnVjdCBzbGljX3NwaW5sb2NrICAgICB1cHJfbG9jazsKKyAgICBzdHJ1Y3Qgc2xpY19zcGlubG9jayAgICAgYml0NjRyZWdsb2NrOworICAgIHN0cnVjdCBzbGljX3JzcHF1ZXVlICAgICByc3BxdWV1ZTsKKyAgICBzdHJ1Y3Qgc2xpY19yY3ZxdWV1ZSAgICAgcmN2cXVldWU7CisgICAgc3RydWN0IHNsaWNfY21kcXVldWUgICAgIGNtZHFfZnJlZTsKKyAgICBzdHJ1Y3Qgc2xpY19jbWRxdWV1ZSAgICAgY21kcV9kb25lOworICAgIHN0cnVjdCBzbGljX2NtZHF1ZXVlICAgICBjbWRxX2FsbDsKKyAgICBzdHJ1Y3Qgc2xpY19jbWRxbWVtICAgICAgY21kcW1lbTsKKyAgICAvKgorICAgICAqICBTTElDIEhhbmRsZXMKKyAgICAqLworICAgIHN0cnVjdCBzbGljX2hhbmRsZSBzbGljX2hhbmRsZXNbU0xJQ19DTURRX01BWENNRFMrMV07IC8qIE9iamVjdCBoYW5kbGVzKi8KKyAgICBzdHJ1Y3Qgc2xpY19oYW5kbGUgKnBmcmVlX3NsaWNfaGFuZGxlczsgICAgICAgICAgLyogRnJlZSBvYmplY3QgaGFuZGxlcyovCisgICAgc3RydWN0IHNsaWNfc3BpbmxvY2sgICAgIGhhbmRsZV9sb2NrOyAgICAgICAgICAgLyogT2JqZWN0IGhhbmRsZSBsaXN0IGxvY2sqLworICAgIHVzaG9ydCAgICAgICAgICAgICAgc2xpY19oYW5kbGVfaXg7CisKKyAgICB1MzIgICAgICAgICAgICAgeG1pdHFfZnVsbDsKKyAgICB1MzIgICAgICAgICAgICAgYWxsX3JlZ193cml0ZXM7CisgICAgdTMyICAgICAgICAgICAgIGljcl9yZWdfd3JpdGVzOworICAgIHUzMiAgICAgICAgICAgICBpc3JfcmVnX3dyaXRlczsKKyAgICB1MzIgICAgICAgICAgICAgZXJyb3JfaW50ZXJydXB0czsKKyAgICB1MzIgICAgICAgICAgICAgZXJyb3Jfcm1pc3NfaW50ZXJydXB0czsKKyAgICB1MzIgICAgICAgICAgICAgcnhfZXJyb3JzOworICAgIHUzMiAgICAgICAgICAgICByY3ZfZHJvcHM7CisgICAgdTMyICAgICAgICAgICAgIHJjdl9pbnRlcnJ1cHRzOworICAgIHUzMiAgICAgICAgICAgICB4bWl0X2ludGVycnVwdHM7CisgICAgdTMyICAgICAgICAgICAgIGxpbmtldmVudF9pbnRlcnJ1cHRzOworICAgIHUzMiAgICAgICAgICAgICB1cHJfaW50ZXJydXB0czsKKyAgICB1MzIgICAgICAgICAgICAgbnVtX2lzcnM7CisgICAgdTMyICAgICAgICAgICAgIGZhbHNlX2ludGVycnVwdHM7CisgICAgdTMyICAgICAgICAgICAgIHR4X3BhY2tldHM7CisgICAgdTMyICAgICAgICAgICAgIHhtaXRfY29tcGxldGVzOworICAgIHUzMiAgICAgICAgICAgICB0eF9kcm9wczsKKyAgICB1MzIgICAgICAgICAgICAgcmN2X2Jyb2FkY2FzdHM7CisgICAgdTMyICAgICAgICAgICAgIHJjdl9tdWx0aWNhc3RzOworICAgIHUzMiAgICAgICAgICAgICByY3ZfdW5pY2FzdHM7CisgICAgdTMyICAgICAgICAgICAgIG1heF9pc3JfcmN2czsKKyAgICB1MzIgICAgICAgICAgICAgbWF4X2lzcl94bWl0czsKKyAgICB1MzIgICAgICAgICAgICAgcmN2X2ludGVycnVwdF95aWVsZHM7CisgICAgdTMyICAgICAgICAgICAgIGludGFnZ19wZXJpb2Q7CisgICAgc3RydWN0IGluaWNwbV9zdGF0ZSAgICAqaW5pY3BtX2luZm87CisgICAgdm9pZCAqcGluaWNwbV9pbmZvOworICAgIHN0cnVjdCBzbGljX3JlZ19wYXJhbXMgICByZWdfcGFyYW1zOworICAgIHN0cnVjdCBzbGljX2lmZXZlbnRzICBpZl9ldmVudHM7CisgICAgc3RydWN0IHNsaWNfc3RhdHMgICAgICAgIGluaWNzdGF0c19wcmV2OworICAgIHN0cnVjdCBzbGljbmV0X3N0YXRzICAgICBzbGljX3N0YXRzOworICAgIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzIHN0YXRzOworfTsKKworI2lmIFNMSUNfRFVNUF9FTkFCTEVECisjZGVmaW5lIFNMSUNfRFVNUF9SRVFVRVNURUQgICAgICAxCisjZGVmaW5lIFNMSUNfRFVNUF9JTl9QUk9HUkVTUyAgICAyCisjZGVmaW5lIFNMSUNfRFVNUF9ET05FICAgICAgICAgICAzCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogTWljcm9jb2RlIGNyYXNoIGluZm9ybWF0aW9uIHN0cnVjdHVyZS4gIFRoaXMKKyAqIHN0cnVjdHVyZSBpcyB3cml0dGVuIG91dCB0byB0aGUgY2FyZCdzIFNSQU0gd2hlbiB0aGUgbWljcm9jb2RlIHBhbmljJ3MuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdHJ1Y3Qgc2xpY19jcmFzaF9pbmZvIHsKKyAgICB1c2hvcnQgIGNwdV9pZDsKKyAgICB1c2hvcnQgIGNyYXNoX3BjOworfTsKKworI2RlZmluZSBDUkFTSF9JTkZPX09GRlNFVCAgIDB4MTU1QworCisjZW5kaWYKKworI2RlZmluZSBVUERBVEVfU1RBVFMobGFyZ2VzdGF0LCBuZXdzdGF0LCBvbGRzdGF0KSAgICAgICAgICAgICAgICAgICAgICAgIFwKK3sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgaWYgKChuZXdzdGF0KSA8IChvbGRzdGF0KSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCShsYXJnZXN0YXQpICs9ICgobmV3c3RhdCkgKyAoMHhGRkZGRkZGRiAtIG9sZHN0YXQgKyAxKSk7ICAgICAgICAgXAorICAgIGVsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkobGFyZ2VzdGF0KSArPSAoKG5ld3N0YXQpIC0gKG9sZHN0YXQpKTsgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK30KKworI2RlZmluZSBVUERBVEVfU1RBVFNfR0IobGFyZ2VzdGF0LCBuZXdzdGF0LCBvbGRzdGF0KSAgICAgICAgICAgICAgICAgICAgIFwKK3sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKGxhcmdlc3RhdCkgKz0gKChuZXdzdGF0KSAtIChvbGRzdGF0KSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorfQorCisjZGVmaW5lIEVUSEVSX0VRX0FERFIoX0FkZHJBLCBfQWRkckIsIF9SZXN1bHQpICAgICAgICAgICAgICAgICAgICAgICAgICAgXAoreyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBfUmVzdWx0ID0gVFJVRTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgaWYgKCoodTMyICopKF9BZGRyQSkgIT0gKih1MzIgKikoX0FkZHJCKSkgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwlfUmVzdWx0ID0gRkFMU0U7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBpZiAoKih1MTYgKikoJigoX0FkZHJBKVs0XSkpICE9ICoodTE2ICopKCYoKF9BZGRyQilbNF0pKSkgICAgICAgIFwKKwlfUmVzdWx0ID0gRkFMU0U7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK30KKworI2lmIGRlZmluZWQoQ09ORklHX1g4Nl82NCkgfHwgZGVmaW5lZChDT05GSUdfSUE2NCkKKyNkZWZpbmUgICBTTElDX0dFVF9BRERSX0xPVyhfYWRkcikgICh1MzIpKCh1NjQpKF9hZGRyKSAmIFwKKwkweDAwMDAwMDAwRkZGRkZGRkYpCisjZGVmaW5lICAgU0xJQ19HRVRfQUREUl9ISUdIKF9hZGRyKSAgKHUzMikoKCh1NjQpKF9hZGRyKSA+PiAzMikgJiBcCisJMHgwMDAwMDAwMEZGRkZGRkZGKQorI2Vsc2UKKyNkZWZpbmUgICBTTElDX0dFVF9BRERSX0xPVyhfYWRkcikgICAodTMyKV9hZGRyCisjZGVmaW5lICAgU0xJQ19HRVRfQUREUl9ISUdIKF9hZGRyKSAgKHUzMikwCisjZW5kaWYKKworI2RlZmluZSBGTFVTSCAgICAgICBUUlVFCisjZGVmaW5lIERPTlRfRkxVU0ggIEZBTFNFCisKKyNkZWZpbmUgU0lPQ1NMSUNEVU1QQ0FSRCAgICAgICAgIChTSU9DREVWUFJJVkFURSs5KQorI2RlZmluZSBTSU9DU0xJQ1NFVElOVEFHRyAgICAgICAgKFNJT0NERVZQUklWQVRFKzEwKQorI2RlZmluZSBTSU9DU0xJQ1RSQUNFRFVNUCAgICAgICAgKFNJT0NERVZQUklWQVRFKzExKQorCisjZW5kaWYgLyogIF9fU0xJQ19EUklWRVJfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvc2xpY29zcy9zbGljX29zLmggYi9kcml2ZXJzL3N0YWdpbmcvc2xpY29zcy9zbGljX29zLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDZjNjc4NAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9zbGljb3NzL3NsaWNfb3MuaApAQCAtMCwwICsxLDg0IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBDb3B5cmlnaHQgKGMpMjAwMC0yMDAyIEFsYWNyaXRlY2gsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkCisgKiAgICB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBTEFDUklURUNILCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQUxBQ1JJVEVDSCwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCisgKiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqCisgKiBUaGUgdmlld3MgYW5kIGNvbmNsdXNpb25zIGNvbnRhaW5lZCBpbiB0aGUgc29mdHdhcmUgYW5kIGRvY3VtZW50YXRpb24KKyAqIGFyZSB0aG9zZSBvZiB0aGUgYXV0aG9ycyBhbmQgc2hvdWxkIG5vdCBiZSBpbnRlcnByZXRlZCBhcyByZXByZXNlbnRpbmcKKyAqIG9mZmljaWFsIHBvbGljaWVzLCBlaXRoZXIgZXhwcmVzc2VkIG9yIGltcGxpZWQsIG9mIEFsYWNyaXRlY2gsIEluYy4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisgKiBGSUxFTkFNRTogc2xpY19vcy5oCisgKgorICogVGhlc2UgYXJlIHRoZSBMaW51eC1zcGVjaWZpYyBkZWZpbml0aW9ucyByZXF1aXJlZCBmb3IgdGhlIFNMSUNPU1MKKyAqIGRyaXZlciwgd2hpY2ggc2hvdWxkIGFsbG93IGZvciBncmVhdGVyIHBvcnRhYmlsaXR5IHRvIG90aGVyIE9TZXMuCisgKi8KKyNpZm5kZWYgX1NMSUNfT1NfU1BFQ0lGSUNfSF8KKyNkZWZpbmUgX1NMSUNfT1NfU1BFQ0lGSUNfSF8KKworI2RlZmluZSBGQUxTRSAgICAgICAgICAgICAgICgwKQorI2RlZmluZSBUUlVFICAgICAgICAgICAgICAgICgxKQorCisjZGVmaW5lIFNMSUNfU0VDU19UT19KSUZGUyh4KSAgKCh4KSAqIEhaKQorI2RlZmluZSBTTElDX01TX1RPX0pJRkZJRVMoeCkgIChTTElDX1NFQ1NfVE9fSklGRlMoKHgpKSAvIDEwMDApCisKKyNpZmRlZiBERUJVR19SRUdJU1RFUl9UUkFDRQorI2RlZmluZSBXUklURV9SRUcocmVnLCB2YWx1ZSwgZmx1c2gpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQlhZGFwdGVyLT5jYXJkLT5yZWdfdHlwZVthZGFwdGVyLT5jYXJkLT5kZWJ1Z19peF0gPSAwOyAgIFwKKwkJYWRhcHRlci0+Y2FyZC0+cmVnX29mZnNldFthZGFwdGVyLT5jYXJkLT5kZWJ1Z19peF0gPSBcCisJCSgodW5zaWduZWQgY2hhciAqKSgmcmVnKSkgLSBcCisJCSgodW5zaWduZWQgY2hhciAqKWFkYXB0ZXItPnNsaWNfcmVncyk7IFwKKwkJYWRhcHRlci0+Y2FyZC0+cmVnX3ZhbHVlW2FkYXB0ZXItPmNhcmQtPmRlYnVnX2l4KytdID0gdmFsdWU7ICBcCisJCWlmIChhZGFwdGVyLT5jYXJkLT5kZWJ1Z19peCA9PSAzMikgXAorCQkJYWRhcHRlci0+Y2FyZC0+ZGVidWdfaXggPSAwOyAgICAgICAgICAgICAgICAgICAgICBcCisJCXNsaWNfcmVnMzJfd3JpdGUoKCZyZWcpLCAodmFsdWUpLCAoZmx1c2gpKTsgICAgICAgICAgICBcCisJfQorI2RlZmluZSBXUklURV9SRUc2NChhLCByZWcsIHZhbHVlLCByZWdoLCB2YWxoLCBmbHVzaCkgICAgICAgICAgICAgICAgICAgICAgICBcCisJeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQlhZGFwdGVyLT5jYXJkLT5yZWdfdHlwZVthZGFwdGVyLT5jYXJkLT5kZWJ1Z19peF0gPSAxOyAgICAgICAgXAorCQlhZGFwdGVyLT5jYXJkLT5yZWdfb2Zmc2V0W2FkYXB0ZXItPmNhcmQtPmRlYnVnX2l4XSA9IFwKKwkJKCh1bnNpZ25lZCBjaGFyICopKCZyZWcpKSAtIFwKKwkJKCh1bnNpZ25lZCBjaGFyICopYWRhcHRlci0+c2xpY19yZWdzKTsgXAorCQlhZGFwdGVyLT5jYXJkLT5yZWdfdmFsdWVbYWRhcHRlci0+Y2FyZC0+ZGVidWdfaXhdID0gdmFsdWU7ICAgXAorCQlhZGFwdGVyLT5jYXJkLT5yZWdfdmFsdWVoW2FkYXB0ZXItPmNhcmQtPmRlYnVnX2l4KytdID0gdmFsaDsgIFwKKwkJaWYgKGFkYXB0ZXItPmNhcmQtPmRlYnVnX2l4ID09IDMyKSBcCisJCQlhZGFwdGVyLT5jYXJkLT5kZWJ1Z19peCA9IDA7ICAgICAgICAgICAgICAgICAgICAgIFwKKwkJc2xpY19yZWc2NF93cml0ZSgoYSksICgmcmVnKSwgKHZhbHVlKSwgKCZyZWdoKSwgKHZhbGgpLCBcCisJCQkJKGZsdXNoKSk7XAorCX0KKyNlbHNlCisjZGVmaW5lIFdSSVRFX1JFRyhyZWcsIHZhbHVlLCBmbHVzaCkgXAorCXNsaWNfcmVnMzJfd3JpdGUoKCZyZWcpLCAodmFsdWUpLCAoZmx1c2gpKQorI2RlZmluZSBXUklURV9SRUc2NChhLCByZWcsIHZhbHVlLCByZWdoLCB2YWxoLCBmbHVzaCkgXAorCXNsaWNfcmVnNjRfd3JpdGUoKGEpLCAoJnJlZyksICh2YWx1ZSksICgmcmVnaCksICh2YWxoKSwgKGZsdXNoKSkKKyNlbmRpZgorCisjZW5kaWYgIC8qIF9TTElDX09TX1NQRUNJRklDX0hfICAqLworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvc2xpY29zcy9zbGljYnVpbGQuaCBiL2RyaXZlcnMvc3RhZ2luZy9zbGljb3NzL3NsaWNidWlsZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFlMDVlMDQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvc2xpY29zcy9zbGljYnVpbGQuaApAQCAtMCwwICsxLDk2IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDAtMjAwMiBBbGFjcml0ZWNoLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZAorICogICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQUxBQ1JJVEVDSCwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFMQUNSSVRFQ0gsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgorICogVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKgorICogVGhlIHZpZXdzIGFuZCBjb25jbHVzaW9ucyBjb250YWluZWQgaW4gdGhlIHNvZnR3YXJlIGFuZCBkb2N1bWVudGF0aW9uCisgKiBhcmUgdGhvc2Ugb2YgdGhlIGF1dGhvcnMgYW5kIHNob3VsZCBub3QgYmUgaW50ZXJwcmV0ZWQgYXMgcmVwcmVzZW50aW5nCisgKiBvZmZpY2lhbCBwb2xpY2llcywgZWl0aGVyIGV4cHJlc3NlZCBvciBpbXBsaWVkLCBvZiBBbGFjcml0ZWNoLCBJbmMuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorICogRklMRU5BTUU6IHNsaWNidWlsZC5oCisgKgorICogVGhlIGZvbGxvd2luZyBjb250YWlucyB0aGUgY29tcGlsZXIgZGlyZWN0aXZlIHN3aXRjaGVzIHVzZWQgZm9yCisgKiBkaWZmZXJlbnQgU0xJQyBidWlsZCBvcHRpb25zLiAgVGhleSBjYW4gYWxsIGJlIHNldCBpbiB0aGUgTWFrZWZpbGUKKyAqIGJ1dCB0aGUgZGVmYXVsdHMgYXJlIGRlZmluZWQgaGVyZS4KKyAqLworI2lmbmRlZiBfU0xJQ19CVUlMRF9IXworI2RlZmluZSBfU0xJQ19CVUlMRF9IXworCisjaWZuZGVmIFNMSUNfUFJPRFVDVElPTl9CVUlMRAorI2RlZmluZSBTTElDX1BST0RVQ1RJT05fQlVJTEQJCQkxCisjZW5kaWYKKyNpZm5kZWYgU0xJQ19GQUlMVVJFX1JFU0VUCisjZGVmaW5lIFNMSUNfRkFJTFVSRV9SRVNFVAkJCTEKKyNlbmRpZgorI2RlZmluZSBEQkcgICAgICAgICAgICAgICAgICAgICAgICAgMQorI2lmbmRlZiBTTElDX0FTU0VSVF9FTkFCTEVECisjZGVmaW5lIFNMSUNfQVNTRVJUX0VOQUJMRUQJCQkxCisjZW5kaWYKKyNpZm5kZWYgU0xJQ19NQ0FTVF9FTkFCTEVECisjZGVmaW5lIFNMSUNfTUNBU1RfRU5BQkxFRAkJCTEKKyNlbmRpZgorI2lmbmRlZiBTTElDX0dFVF9TVEFUU19FTkFCTEVECisjZGVmaW5lIFNMSUNfR0VUX1NUQVRTX0VOQUJMRUQJCQkxCisjZW5kaWYKKyNpZm5kZWYgU0xJQ19HRVRfU1RBVFNfVElNRVJfRU5BQkxFRAorI2RlZmluZSBTTElDX0dFVF9TVEFUU19USU1FUl9FTkFCTEVECQkwCisjZW5kaWYKKyNpZm5kZWYgU0xJQ19QSU5HX1RJTUVSX0VOQUJMRUQKKyNkZWZpbmUgU0xJQ19QSU5HX1RJTUVSX0VOQUJMRUQJCTEKKyNlbmRpZgorI2lmbmRlZiBTTElDX0lPQ1RMX1NVUFBPUlRfRU5BQkxFRAorI2RlZmluZSBTTElDX0lPQ1RMX1NVUFBPUlRfRU5BQkxFRAkJMQorI2VuZGlmCisjaWZuZGVmIEFUS19ERUJVRworI2RlZmluZSBBVEtfREVCVUcJCQkJMQorI2VuZGlmCisjaWZuZGVmIFNMSUNfUE9XRVJfTUFOQUdFTUVOVF9FTkFCTEVECisjZGVmaW5lIFNMSUNfUE9XRVJfTUFOQUdFTUVOVF9FTkFCTEVECQkwCisjZW5kaWYKKyNpZm5kZWYgU0xJQ19JTlRFUlJVUFRfUFJPQ0VTU19MSU1JVAorI2RlZmluZSBTTElDX0lOVEVSUlVQVF9QUk9DRVNTX0xJTUlUCQkxCisjZW5kaWYKKyNpZm5kZWYgTElOVVhfRlJFRVNfQURBUFRFUl9SRVNPVVJDRVMKKyNkZWZpbmUgTElOVVhfRlJFRVNfQURBUFRFUl9SRVNPVVJDRVMJCTEKKyNlbmRpZgorI2lmbmRlZiBTTElDX09GRkxPQURfSVBfQ0hFQ0tTVU0KKyNkZWZpbmUgU0xJQ19PRkZMT0FEX0lQX0NIRUNLU1VNCQkxCisjZW5kaWYKKyNpZm5kZWYgU0xJQ19QT1dFUl9NQU5BR0VNRU5UX0VOQUJMRUQKKyNkZWZpbmUgU0xJQ19QT1dFUl9NQU5BR0VNRU5UX0VOQUJMRUQJCTAKKyNlbmRpZgorI2lmbmRlZiBTVEFUU19USU1FUl9JTlRFUlZBTAorI2RlZmluZSBTVEFUU19USU1FUl9JTlRFUlZBTAkJCTIKKyNlbmRpZgorI2lmbmRlZiBQSU5HX1RJTUVSX0lOVEVSVkFMCisjZGVmaW5lIFBJTkdfVElNRVJfSU5URVJWQUwJCQkxCisjZW5kaWYKKworI2VuZGlmICAgLyogX1NMSUNfQlVJTERfSF8gICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvc2xpY29zcy9zbGljZGJnLmggYi9kcml2ZXJzL3N0YWdpbmcvc2xpY29zcy9zbGljZGJnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzU0ZTQ0ZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9zbGljb3NzL3NsaWNkYmcuaApAQCAtMCwwICsxLDEwMCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogQ29weXJpZ2h0IChjKSAyMDAwLTIwMDIgQWxhY3JpdGVjaCwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQKKyAqICAgIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFMQUNSSVRFQ0gsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBTEFDUklURUNILCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKKyAqIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICoKKyAqIFRoZSB2aWV3cyBhbmQgY29uY2x1c2lvbnMgY29udGFpbmVkIGluIHRoZSBzb2Z0d2FyZSBhbmQgZG9jdW1lbnRhdGlvbgorICogYXJlIHRob3NlIG9mIHRoZSBhdXRob3JzIGFuZCBzaG91bGQgbm90IGJlIGludGVycHJldGVkIGFzIHJlcHJlc2VudGluZworICogb2ZmaWNpYWwgcG9saWNpZXMsIGVpdGhlciBleHByZXNzZWQgb3IgaW1wbGllZCwgb2YgQWxhY3JpdGVjaCwgSW5jLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyAqIEZJTEVOQU1FOiBzbGljZGJnLmgKKyAqCisgKiBBbGwgZGVidWcgYW5kIGFzc2VydGlvbi1iYXNlZCBkZWZpbml0aW9ucyBhbmQgbWFjcm9zIGFyZSBpbmNsdWRlZAorICogaW4gdGhpcyBmaWxlIGZvciB0aGUgU0xJQ09TUyBkcml2ZXIuCisgKi8KKyNpZm5kZWYgX1NMSUNfREVCVUdfSF8KKyNkZWZpbmUgX1NMSUNfREVCVUdfSF8KKworI2lmZGVmIFNMSUNfREVGQVVMVF9MT0dfTEVWRUwKKyNlbHNlCisjZGVmaW5lIFNMSUNMRVZFTCAgIEtFUk5fREVCVUcKKyNlbmRpZgorI2RlZmluZSBTTElDX0RJU1BMQVkgICAgICAgICAgICAgIHByaW50aworI2RlZmluZSBEQkdfRVJST1IobiwgYXJncy4uLikgICBTTElDX0RJU1BMQVkoS0VSTl9FTUVSRyBuLCAjI2FyZ3MpCisKKyNkZWZpbmUgU0xJQ19ERUJVR19NRVNTQUdFIDEKKyNpZiBTTElDX0RFQlVHX01FU1NBR0UKKy8qI2RlZmluZSBEQkdfTVNHKG4sIGFyZ3MuLi4pICAgICAgU0xJQ19ESVNQTEFZKFNMSUNMRVZFTCBuLCAjI2FyZ3MpKi8KKyNkZWZpbmUgREJHX01TRyhuLCBhcmdzLi4uKQorI2Vsc2UKKyNkZWZpbmUgREJHX01TRyhuLCBhcmdzLi4uKQorI2VuZGlmCisKKyNpZmRlZiBBU1NFUlQKKyN1bmRlZiBBU1NFUlQKKyNlbmRpZgorCisjaWYgU0xJQ19BU1NFUlRfRU5BQkxFRAorI2lmZGVmIENPTkZJR19YODZfNjQKKyNkZWZpbmUgVkFMSURfQUREUkVTUyhwKSAgKDEpCisjZWxzZQorI2RlZmluZSBWQUxJRF9BRERSRVNTKHApICAoKCh1MzIpKHApICYgMHg4MDAwMDAwMCkgfHwgKCh1MzIpKHApID09IDApKQorI2VuZGlmCisjaWZuZGVmIEFTU0VSVAorI2RlZmluZSBBU1NFUlQoYSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCWlmICghKGEpKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCURCR19FUlJPUigiQVNTRVJUKCkgRmFpbHVyZTogZmlsZSAlcywgZnVuY3Rpb24gJXMgIGxpbmUgJWRcbiIsXAorCQlfX0ZJTEVfXywgX19mdW5jX18sIF9fTElORV9fKTsgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJc2xpY19hc3NlcnRfZmFpbCgpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwl9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfQorI2VuZGlmCisjaWZuZGVmIEFTU0VSVE1TRworI2RlZmluZSBBU1NFUlRNU0coYSxtc2cpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwlpZiAoIShhKSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCURCR19FUlJPUigiQVNTRVJUKCkgRmFpbHVyZTogZmlsZSAlcywgZnVuY3Rpb24gJXMiXAorCQkJImxpbmUgJWQ6ICVzXG4iLFwKKwkJCV9fRklMRV9fLCBfX2Z1bmNfXywgX19MSU5FX18sIChtc2cpKTsgICAgICAgICAgICBcCisJCXNsaWNfYXNzZXJ0X2ZhaWwoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwl9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9CisjZW5kaWYKKyNlbHNlCisjaWZuZGVmIEFTU0VSVAorI2RlZmluZSBBU1NFUlQoYSkKKyNlbmRpZgorI2lmbmRlZiBBU1NFUlRNU0cKKyNkZWZpbmUgQVNTRVJUTVNHKGEsIG1zZykKKyNlbmRpZgorI2VuZGlmIC8qIFNMSUNfQVNTRVJUX0VOQUJMRUQgICovCisKKyNlbmRpZiAgLyogIF9TTElDX0RFQlVHX0hfICAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3NsaWNvc3Mvc2xpY2R1bXAuaCBiL2RyaXZlcnMvc3RhZ2luZy9zbGljb3NzL3NsaWNkdW1wLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTJhOWI0NAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9zbGljb3NzL3NsaWNkdW1wLmgKQEAgLTAsMCArMSwyNzggQEAKKy8qCisgKgorICogQ29weXJpZ2h0IChjKSAyMDAwLTIwMDIgQWxhY3JpdGVjaCwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZAorICogICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQUxBQ1JJVEVDSCwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFMQUNSSVRFQ0gsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgorICogVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKgorICogTk8gTElDRU5TRSBUTyBBTlkgQUxBQ1JJVEVDSCBQQVRFTlQgQ0xBSU0gSVMgR1JBTlRFRCBCWSBBTlkgQ09QWVJJR0hUCisgKiBMSUNFTlNFIFRPIFRISVMgT1IgT1RIRVIgU09GVFdBUkUuIFRISVMgU09GVFdBUkUgTUFZIEJFIENPVkVSRUQgQlkKKyAqIEFMQUNSSVRFQ0ggUEFURU5UUyBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFUuUy4gUEFURU5UIE5PUy4gNiwyMjYsNjgwLAorICogNiwyNDcsMDYwLCA2LDMzNCwxNTMsIDYsMzg5LDQ3OSwgNiwzOTMsNDg3LCA2LDQyNywxNzEsIDYsNDI3LDE3MworICogYW5kIDYsNDM0LDYyMC4KKyAqIFRISVMgU09GVFdBUkUgSVMgTk9UIFNVQkpFQ1QgVE8gVEhFIEdOVSBHRU5FUkFMIFBVQkxJQyBMSUNFTlNFIChHUEwpLgorICoKKyAqIFRoZSB2aWV3cyBhbmQgY29uY2x1c2lvbnMgY29udGFpbmVkIGluIHRoZSBzb2Z0d2FyZSBhbmQKKyAqIGRvY3VtZW50YXRpb24gYXJlIHRob3NlIG9mIHRoZSBhdXRob3JzIGFuZCBzaG91bGQgbm90IGJlCisgKiBpbnRlcnByZXRlZCBhcyByZXByZXNlbnRpbmcgb2ZmaWNpYWwgcG9saWNpZXMsIGVpdGhlcgorICogZXhwcmVzc2VkIG9yIGltcGxpZWQsIG9mIEFsYWNyaXRlY2gsIEluYy4KKyAqLworI2lmbmRlZiBfU0xJQ19EVU1QX0hfCisjZGVmaW5lIF9TTElDX0RVTVBfSF8KKworI2RlZmluZSBERUJVR19TVUNDRVNTICAgMAorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBVdGlsaXR5IHByb2Nlc3NvciByZWdpc3RlciBsb2NhdGlvbnMKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNkZWZpbmUgVVRJTElUWV9SRVNFVCAgICAgICAweDAKKyNkZWZpbmUgVVRJTElUWV9JU1BfQUREUiAgICAweDQgICAgIC8qIEludGVycnVwdCBzdGF0dXMgUG9pbnRlciAqLworI2RlZmluZSBVVElMSVRZX0lTUl9BRERSICAgIDB4OCAgICAgLyogSW50ZXJydXB0IHN0YXR1cyBSZWdpc3RlciAqLworI2RlZmluZSBVVElMSVRZX0lDUl9BRERSICAgIDB4YyAgICAgLyogSW50ZXJydXB0IENvbnRyb2wgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgVVRJTElUWV9DUFJfQUREUiAgICAweDEwICAgIC8qIENvbW1hbmQgUG9pbnRlciBSZWdpc3RlciAqLworI2RlZmluZSBVVElMSVRZX0RQUl9BRERSICAgIDB4MTQgICAgLyogRGF0YSBQb2ludGVyIFJlZ2lzdGVyICovCisjZGVmaW5lIFVUSUxJVFlfRE1QX1RSUSAgICAgMHgxOCAgICAvKiBEdW1wIHF1ZXVlIG9udG8gQUxVIGZvciBhbmFseXNlciAqLworI2RlZmluZSBVVElMSVRZX1VQUF9BRERSICAgIDB4MWMgICAgLyogQml0cyA2My0zMiBvZiBjbWQvZGF0YSBwb2ludGVyICovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIElOSUMgc3RhdHVzIHJlZ2lzdGVyIGJpdHMKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjZGVmaW5lIFNMSUNfSVNSX0NDICAgICAgICAgMHgxMDAwMDAwMCAgLyogQ29tbWFuZCBjb21wbGV0ZSAtIHN5bmNocm9ub3VzICovCisjZGVmaW5lIFNMSUNfSVNSX0VSUiAgICAgICAgMHgwMTAwMDAwMCAgLyogQ29tbWFuZCBFcnJvciAtIHN5bmNocm9ub3VzICovCisjZGVmaW5lIFNMSUNfSVNSX0NNRF9NQVNLICAgMHgxMTAwMDAwMCAgLyogQ29tbWFuZCBzdGF0dXMgbWFzayAqLworI2RlZmluZSBTTElDX0lTUl9UUEggICAgICAgIDB4MDAwODAwMDAgIC8qIFRyYW5zbWl0IHByb2Nlc3NvciBoYWx0ZWQgLSBhc3luYyAqLworI2RlZmluZSBTTElDX0lTUl9SUEggICAgICAgIDB4MDAwNDAwMDAgIC8qIFJlY2VpdmUgcHJvY2Vzc29yIGhhbHRlZCAtIGFzeW5jICovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIElOSUMgQ29udHJvbCByZWdpc3RlciB2YWx1ZXMKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjZGVmaW5lIFNMSUNfSUNSX09GRiAgICAgICAgMCAgICAgICAgICAgLyogSW50ZXJydXB0cyBkaXNhYmxlZCAqLworI2RlZmluZSBTTElDX0lDUl9PTiAgICAgICAgIDEgICAgICAgICAgIC8qIEludGVycnVwdHMgZW5hYmxlZCAqLworI2RlZmluZSBTTElDX0lDUl9NQVNLICAgICAgIDIgICAgICAgICAgIC8qIEludGVycnVwdHMgbWFza2VkICovCisKKyNkZWZpbmUgV1JJVEVfRFJFRyhyZWcsIHZhbHVlLCBmbHVzaCkgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHdyaXRlbCgodmFsdWUpLCAocmVnKSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBpZiAoKGZsdXNoKSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCW1iKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIENvbW1hbmQgRm9ybWF0CisgKgorICogRWFjaCBjb21tYW5kIGNvbnRhaW5zIGEgY29tbWFuZCBieXRlIHdoaWNoIGlzIGRlZmluZWQgYXMgZm9sbG93czoKKyAqCisgKiAgYml0czogICA3LTMgICAgIDIgICAgICAgMS0wCisgKiAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqICAgICAgY29tbWFuZCAgICAgQWx0LiBQcm9jICAgUHJvY2Vzc29yCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyAqIE1hY3JvIHRvIGNyZWF0ZSB0aGUgY29tbWFuZCBieXRlIGdpdmVuIHRoZSBjb21tYW5kLCBBbHQuIFByb2MsIGFuZAorICogUHJvY2Vzc29yIHZhbHVlcy4gIE5vdGUgdGhhdCB0aGUgbWFjcm8gYXNzdW1lcyB0aGF0IHRoZSB2YWx1ZXMgYXJlCisgKiBwcmVzaGlmdGVkLiAgVGhhdCBpcywgdGhlIHZhbHVlcyBmb3IgYWx0LiBwcm9jIGFyZSAwIGZvciB0cmFuc21pdCBhbmQKKyAqIDQgZm9yIHJlY2VpdmUuCisgKi8KKyNkZWZpbmUgQ09NTUFORF9CWVRFKGNvbW1hbmQsIGFsdF9wcm9jLCBwcm9jKSAoKGNvbW1hbmQpIHwgKGFsdF9wcm9jKSB8IChwcm9jKSkKKworLyoKKyAqIENvbW1hbmQgdmFsdWVzCisgKi8KKyNkZWZpbmUgQ01EX0hBTFQgICAgICAgIDB4MCAgICAgLyogU2VuZCBhIGhhbHQgdG8gdGhlIElOSUMgKi8KKyNkZWZpbmUgQ01EX1JVTiAgICAgICAgIDB4OCAgICAgLyogU3RhcnQgdGhlIGhhbHRlZCBJTklDICovCisjZGVmaW5lIENNRF9TVEVQICAgICAgICAweDEwICAgIC8qIFNpbmdsZSBzdGVwIHRoZSBpbmljICovCisjZGVmaW5lIENNRF9CUkVBSyAgICAgICAweDE4ICAgIC8qIFNldCBhIGJyZWFrcG9pbnQgLSA4IGJ5dGUgY29tbWFuZCAqLworI2RlZmluZSBDTURfUkVTRVRfQlJFQUsgMHgyMCAgICAvKiBSZXNldCBhIGJyZWFrcG9pbnQgLSA4IGJ5dGUgY21kICovCisjZGVmaW5lIENNRF9EVU1QICAgICAgICAweDI4ICAgIC8qIER1bXAgSU5JQyBtZW1vcnkgLSA4IGJ5dGUgY29tbWFuZCAqLworI2RlZmluZSBDTURfTE9BRCAgICAgICAgMHgzMCAgICAvKiBMb2FkIElOSUMgbWVtb3J5IC0gOCBieXRlIGNvbW1hbmQgKi8KKyNkZWZpbmUgQ01EX01BUCAgICAgICAgIDB4MzggICAgLyogTWFwIG91dCBhIFJPTSBpbnN0cnVjdGlvbiAtIDggQkMgKi8KKyNkZWZpbmUgQ01EX0NBTV9PUFMgICAgIDB4MzggICAgLyogcGVyZm9ybSBvcHMgb24gc3BlY2lmaWMgQ0FNICovCisjZGVmaW5lIENNRF9YTVQgICAgICAgICAweDQwICAgIC8qIFRyYW5zbWl0IGZyYW1lICovCisjZGVmaW5lIENNRF9SQ1YgICAgICAgICAweDQ4ICAgIC8qIFJlY2VpdmUgZnJhbWUgKi8KKworLyoKKyAqIEFsdC4gUHJvYyB2YWx1ZXMKKyAqCisgKiBXaGVuIHRoZSBwcm9jIHZhbHVlIGlzIHNldCB0byB0aGUgdXRpbGl0eSBwcm9jZXNzb3IsIHRoZSBBbHQuIFByb2MKKyAqIHNwZWNpZmllcyB3aGljaCBwcm9jZXNzb3IgaGFuZGxlcyB0aGUgZGVidWdnaW5nLgorICovCisjZGVmaW5lIEFMVF9QUk9DX1RSQU5TTUlUICAgMHgwCisjZGVmaW5lIEFMVF9QUk9DX1JFQ0VJVkUgICAgMHg0CisKKy8qCisgKiBQcm9jIHZhbHVlcworICovCisjZGVmaW5lIFBST0NfSU5WQUxJRCAgICAgICAgMHgwCisjZGVmaW5lIFBST0NfTk9ORSAgICAgICAgICAgMHgwICAvKiBHaWdhYml0IHVzZSAqLworI2RlZmluZSBQUk9DX1RSQU5TTUlUICAgICAgIDB4MQorI2RlZmluZSBQUk9DX1JFQ0VJVkUgICAgICAgIDB4MgorI2RlZmluZSBQUk9DX1VUSUxJVFkgICAgICAgIDB4MworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogOCBieXRlIGNvbW1hbmQgc3RydWN0dXJlIGRlZmluaXRpb25zCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyAqIEJyZWFrIGFuZCBSZXNldCBCcmVhayBjb21tYW5kIHN0cnVjdHVyZQorICovCitzdHJ1Y3QgQlJFQUsgeworICAgIHVuc2lnbmVkIGNoYXIgICAgIGNvbW1hbmQ7ICAgIC8qIENvbW1hbmQgd29yZCBkZWZpbmVkIGFib3ZlICovCisgICAgdW5zaWduZWQgY2hhciAgICAgcmVzdmQ7CisgICAgdXNob3J0ICAgIGNvdW50OyAgICAgIC8qIE51bWJlciBvZiBleGVjdXRpb25zIGJlZm9yZSBicmVhayAqLworICAgIHUzMiAgIGFkZHI7ICAgICAgIC8qIEFkZHJlc3Mgb2YgYnJlYWsgcG9pbnQgKi8KK307CisKKy8qCisgKiBEdW1wIGFuZCBMb2FkIGNvbW1hbmQgc3RydWN0dXJlCisgKi8KK3N0cnVjdCBkdW1wX2NtZCB7CisgICAgdW5zaWduZWQgY2hhciAgICAgY21kOyAgICAgICAgLyogQ29tbWFuZCB3b3JkIGRlZmluZWQgYWJvdmUgKi8KKyAgICB1bnNpZ25lZCBjaGFyICAgICBkZXNjOyAgICAgICAvKiBEZXNjcmlwdG9yIHZhbHVlcyAtIGRlZmluZWQgYmVsb3cgKi8KKyAgICB1c2hvcnQgICAgY291bnQ7ICAgICAgLyogbnVtYmVyIG9mIDQgYnl0ZSB3b3JkcyB0byBiZSB0cmFuc2ZlcnJlZCAqLworICAgIHUzMiAgIGFkZHI7ICAgICAgIC8qIHN0YXJ0IGFkZHJlc3Mgb2YgZHVtcCBvciBsb2FkICovCit9OworCisvKgorICogUmVjZWl2ZSBvciBUcmFuc21pdCBhIGZyYW1lLgorICovCitzdHJ1Y3QgUkNWX09SX1hNVF9GUkFNRSB7CisgICAgdW5zaWduZWQgY2hhciAgICAgY29tbWFuZDsgICAgLyogQ29tbWFuZCB3b3JkIGRlZmluZWQgYWJvdmUgKi8KKyAgICB1bnNpZ25lZCBjaGFyICAgICBNYWNJZDsgICAgICAvKiBNYWMgSUQgb2YgaW50ZXJmYWNlIC0gdHJhbnNtaXQgb25seSAqLworICAgIHVzaG9ydCAgICBjb3VudDsgICAgICAvKiBMZW5ndGggb2YgZnJhbWUgaW4gYnl0ZXMgKi8KKyAgICB1MzIgICBwYWQ7ICAgICAgICAvKiBub3QgdXNlZCAqLworfTsKKworLyoKKyAqIFZhbHVlcyBvZiBkZXNjIGZpZWxkIGluIERVTVBfT1JfTE9BRCBzdHJ1Y3R1cmUKKyAqLworI2RlZmluZSBERVNDX1JGSUxFICAgICAgICAgIDB4MCAgICAgLyogUmVnaXN0ZXIgZmlsZSAqLworI2RlZmluZSBERVNDX1NSQU0gICAgICAgICAgIDB4MSAgICAgLyogU1JBTSAqLworI2RlZmluZSBERVNDX0RSQU0gICAgICAgICAgIDB4MiAgICAgLyogRFJBTSAqLworI2RlZmluZSBERVNDX1FVRVVFICAgICAgICAgIDB4MyAgICAgLyogcXVldWVzICovCisjZGVmaW5lIERFU0NfUkVHICAgICAgICAgICAgMHg0ICAgICAvKiBHZW5lcmFsIHJlZ2lzdGVycyAocGMsIHN0YXR1cywgZXRjKSAqLworI2RlZmluZSBERVNDX1NFTlNFICAgICAgICAgIDB4NSAgICAgLyogU2Vuc2UgcmVnaXN0ZXIgKi8KKworLyogRGVzY3JpcHRvciBmaWVsZCBkZWZpbml0aW9ucyBmb3IgQ01EX0RVTVBfQ0FNICovCisjZGVmaW5lIERVTVBfQ0FNX0EgICAgICAgICAgICAgIDAKKyNkZWZpbmUgRFVNUF9DQU1fQiAgICAgICAgICAgICAgMSAgICAgICAgICAgICAgIC8qIHVudXNlZCBhdCBwcmVzZW50ICovCisjZGVmaW5lIERVTVBfQ0FNX0MgICAgICAgICAgICAgIDIKKyNkZWZpbmUgRFVNUF9DQU1fRCAgICAgICAgICAgICAgMworI2RlZmluZSBTRUFSQ0hfQ0FNX0EgICAgICAgICAgICA0CisjZGVmaW5lIFNFQVJDSF9DQU1fQyAgICAgICAgICAgIDUKKworLyoKKyAqIE1hcCBjb21tYW5kIHRvIHJlcGxhY2UgYSBjb21tYW5kIGluIFJPTSB3aXRoIGEgY29tbWFuZCBpbiBXQ1MKKyAqLworc3RydWN0IE1BUCB7CisgICAgdW5zaWduZWQgY2hhciAgIGNvbW1hbmQ7ICAgIC8qIENvbW1hbmQgd29yZCBkZWZpbmVkIGFib3ZlICovCisgICAgdW5zaWduZWQgY2hhciAgIG5vdF91c2VkWzNdOworICAgIHVzaG9ydCAgbWFwX3RvOyAgICAgLyogSW5zdHJ1Y3Rpb24gYWRkcmVzcyBpbiBXQ1MgKi8KKyAgICB1c2hvcnQgIG1hcF9vdXQ7ICAgIC8qIEluc3RydWN0aW9uIGFkZHJlc3MgaW4gUk9NICovCit9OworCisvKgorICogTWlzYyBkZWZpbml0aW9ucworICovCisjZGVmaW5lIFNMSUNfTUFYX1FVRVVFICAgICAgIDMyIC8qIFRvdGFsICMgb2YgcXVldWVzIG9uIHRoZSBJTklDICgwLTMxKSovCisjZGVmaW5lIFNMSUNfNE1BWF9SRUcgICAgICAgNTEyIC8qIFRvdGFsICMgb2YgNC1wb3J0IGZpbGUtcmVnaXN0ZXJzICAgICovCisjZGVmaW5lIFNMSUNfMU1BWF9SRUcgICAgICAgMzg0IC8qIFRvdGFsICMgb2YgZmlsZS1yZWdpc3RlcnMgICAgICAgICAgICovCisjZGVmaW5lIFNMSUNfR0JNQVhfUkVHICAgICAxMDI0IC8qIFRvdGFsICMgb2YgR2JpdCBmaWxlLXJlZ2lzdGVycyAgICAgICovCisjZGVmaW5lIFNMSUNfTlVNX1JFRyAgICAgICAgIDMyIC8qIG5vbi1maWxlLXJlZ2lzdGVycyA9IE5VTV9SRUcgaW4gdG0tc2ltYmEuaCAqLworI2RlZmluZSBTTElDX0dCX0NBTUFfU1pFICAgICAzMgorI2RlZmluZSBTTElDX0dCX0NBTUJfU1pFICAgICAxNgorI2RlZmluZSBTTElDX0dCX0NBTUFCX1NaRSAgICAzMgorI2RlZmluZSBTTElDX0dCX0NBTUNfU1pFICAgICAxNgorI2RlZmluZSBTTElDX0dCX0NBTURfU1pFICAgICAxNgorI2RlZmluZSBTTElDX0dCX0NBTUNEX1NaRSAgICAzMgorCisvKgorICogQ29yZWR1bXAgaGVhZGVyIHN0cnVjdHVyZQorICovCitzdHJ1Y3QgQ09SRV9RIHsKKyAgICB1MzIgICBxdWV1ZU9mZjsgICAgICAgICAgIC8qIE9mZnNldCBvZiBxdWV1ZSAqLworICAgIHUzMiAgIHF1ZXVlc2l6ZTsgICAgICAgICAgLyogc2l6ZSBvZiBxdWV1ZSAqLworfTsKKworI2RlZmluZSBEUklWRVJfTkFNRV9TSVpFICAgIDMyCisKK3N0cnVjdCBzbGljY29yZV9oZHIgeworICAgIHVuc2lnbmVkIGNoYXIgZHJpdmVyX3ZlcnNpb25bRFJJVkVSX05BTUVfU0laRV07IC8qIERyaXZlciB2ZXJzaW9uIHN0cmluZyAqLworICAgIHUzMiAgIFJjdlJlZ09mZjsgICAgICAgICAgLyogT2Zmc2V0IG9mIHJlY2VpdmUgcmVnaXN0ZXJzICovCisgICAgdTMyICAgUmN2UmVnc2l6ZTsgICAgICAgICAvKiBzaXplIG9mIHJlY2VpdmUgcmVnaXN0ZXJzICovCisgICAgdTMyICAgWG10UmVnT2ZmOyAgICAgICAgICAvKiBPZmZzZXQgb2YgdHJhbnNtaXQgcmVnaXN0ZXJzICovCisgICAgdTMyICAgWG10UmVnc2l6ZTsgICAgICAgICAvKiBzaXplIG9mIHRyYW5zbWl0IHJlZ2lzdGVycyAqLworICAgIHUzMiAgIEZpbGVSZWdPZmY7ICAgICAgICAgLyogT2Zmc2V0IG9mIHJlZ2lzdGVyIGZpbGUgKi8KKyAgICB1MzIgICBGaWxlUmVnc2l6ZTsgICAgICAgIC8qIHNpemUgb2YgcmVnaXN0ZXIgZmlsZSAqLworICAgIHUzMiAgIFNyYW1PZmY7ICAgICAgICAgICAgLyogT2Zmc2V0IG9mIFNyYW0gKi8KKyAgICB1MzIgICBTcmFtc2l6ZTsgICAgICAgICAgIC8qIHNpemUgb2YgU3JhbSAqLworICAgIHUzMiAgIERyYW1PZmY7ICAgICAgICAgICAgLyogT2Zmc2V0IG9mIERyYW0gKi8KKyAgICB1MzIgICBEcmFtc2l6ZTsgICAgICAgICAgIC8qIHNpemUgb2YgRHJhbSAqLworICAgIENPUkVfUSAgICBxdWV1ZXNbU0xJQ19NQVhfUVVFVUVdOyAvKiBzaXplIGFuZCBvZmZzZXRzIG9mIHF1ZXVlcyAqLworICAgIHUzMiAgIENhbUFNT2ZmOyAgICAgICAgICAgLyogT2Zmc2V0IG9mIENBTSBBIGNvbnRlbnRzICovCisgICAgdTMyICAgQ2FtQVNpemU7ICAgICAgICAgICAvKiBTaXplIG9mIENhbSBBICovCisgICAgdTMyICAgQ2FtQk1PZmY7ICAgICAgICAgICAvKiBPZmZzZXQgb2YgQ0FNIEIgY29udGVudHMgKi8KKyAgICB1MzIgICBDYW1CU2l6ZTsgICAgICAgICAgIC8qIFNpemUgb2YgQ2FtIEIgKi8KKyAgICB1MzIgICBDYW1DTU9mZjsgICAgICAgICAgIC8qIE9mZnNldCBvZiBDQU0gQyBjb250ZW50cyAqLworICAgIHUzMiAgIENhbUNTaXplOyAgICAgICAgICAgLyogU2l6ZSBvZiBDYW0gQyAqLworICAgIHUzMiAgIENhbURNT2ZmOyAgICAgICAgICAgLyogT2Zmc2V0IG9mIENBTSBEIGNvbnRlbnRzICovCisgICAgdTMyICAgQ2FtRFNpemU7ICAgICAgICAgICAvKiBTaXplIG9mIENhbSBEICovCit9OworCisvKgorICogZGVmaW5pdGlvbnMgbmVlZGVkIGZvciBvdXIga2VybmVsLW1vZGUgZ2RiIHN0dWIuCisgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIERlZmluaXRpb25zICYgVHlwZWRlZnMKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNkZWZpbmUgQlVGTUFYICAgICAgMHgyMDAwMCAvKiAxMjhrIC0gc2l6ZSBvZiBpbnB1dC9vdXRwdXQgYnVmZmVyICovCisjZGVmaW5lIEJVRk1BWFAyICAgIDUgICAgICAgLyogMioqNSAoMzIpIDRLIHBhZ2VzICovCisKKyNkZWZpbmUgSU9DVExfU0lNQkFfQlJFQUsgICAgICAgICAgIF9JT1coJ3MnLCAwLCB1bnNpZ25lZCBsb25nKQorLyogI2RlZmluZSBJT0NUTF9TSU1CQV9JTklUICAgICAgICAgICAgX0lPVygncycsIDEsIHVuc2lnbmVkIGxvbmcpICovCisjZGVmaW5lIElPQ1RMX1NJTUJBX0tJTExfVEdUX1BST0MgICBfSU9XKCdzJywgMiwgdW5zaWduZWQgbG9uZykKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogR2xvYmFsIHZhcmlhYmxlcworICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2RlZmluZSBUSFJFQURSRUNFSVZFICAgMSAgIC8qIGJpdCAwIG9mIFN0b3BwZWRUaHJlYWRzICovCisjZGVmaW5lIFRIUkVBRFRSQU5TTUlUICAyICAgLyogYml0IDEgb2YgU3RvcHBlZFRocmVhZHMgKi8KKyNkZWZpbmUgVEhSRUFEQk9USCAgICAgIDMgICAvKiBiaXQgMCBhbmQgMS4uICovCisKKyNlbmRpZiAgLyogIF9TTElDX0RVTVBfSCAgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9zbGljb3NzL3NsaWNody5oIGIvZHJpdmVycy9zdGFnaW5nL3NsaWNvc3Mvc2xpY2h3LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDAzZTkwYgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9zbGljb3NzL3NsaWNody5oCkBAIC0wLDAgKzEsODQ1IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDAtMjAwMiBBbGFjcml0ZWNoLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZAorICogICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQUxBQ1JJVEVDSCwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFMQUNSSVRFQ0gsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgorICogVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKgorICogVGhlIHZpZXdzIGFuZCBjb25jbHVzaW9ucyBjb250YWluZWQgaW4gdGhlIHNvZnR3YXJlIGFuZCBkb2N1bWVudGF0aW9uCisgKiBhcmUgdGhvc2Ugb2YgdGhlIGF1dGhvcnMgYW5kIHNob3VsZCBub3QgYmUgaW50ZXJwcmV0ZWQgYXMgcmVwcmVzZW50aW5nCisgKiBvZmZpY2lhbCBwb2xpY2llcywgZWl0aGVyIGV4cHJlc3NlZCBvciBpbXBsaWVkLCBvZiBBbGFjcml0ZWNoLCBJbmMuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorICogRklMRU5BTUU6IHNsaWNody5oCisgKgorICogVGhpcyBoZWFkZXIgZmlsZSBjb250YWlucyBkZWZpbml0aW9ucyB0aGF0IGFyZSBjb21tb24gdG8gb3VyIGhhcmR3YXJlLgorICovCisjaWZuZGVmIF9fU0xJQ0hXX0hfXworI2RlZmluZSBfX1NMSUNIV19IX18KKworI2RlZmluZSBQQ0lfVkVORE9SX0lEX0FMQUNSSVRFQ0ggICAgMHgxMzlBCisjZGVmaW5lIFNMSUNfMUdCX0RFVklDRV9JRCAgICAgICAgICAweDAwMDUKKyNkZWZpbmUgU0xJQ18yR0JfREVWSUNFX0lEICAgICAgICAgIDB4MDAwNyAgLypPYXNpcyBEZXZpY2UgSUQgKi8KKworI2RlZmluZSBTTElDXzFHQl9DSUNBREFfU1VCU1lTX0lEICAgMHgwMDA4CisKKyNkZWZpbmUgU0xJQ19OQlJfTUFDUyAgICAgIDQKKworI2RlZmluZSBTTElDX1JDVkJVRl9TSVpFICAgICAgICAyMDQ4CisjZGVmaW5lIFNMSUNfUkNWQlVGX0hFQURTSVpFICAgIDM0CisjZGVmaW5lIFNMSUNfUkNWQlVGX1RBSUxTSVpFICAgIDAKKyNkZWZpbmUgU0xJQ19SQ1ZCVUZfREFUQVNJWkUgICAgKFNMSUNfUkNWQlVGX1NJWkUgLSAoU0xJQ19SQ1ZCVUZfSEVBRFNJWkUgK1wKKwkJCQkJU0xJQ19SQ1ZCVUZfVEFJTFNJWkUpKQorCisjZGVmaW5lIFZHQlNUQVRfWFBFUlIgICAgICAgICAgIDB4NDAwMDAwMDAKKyNkZWZpbmUgVkdCU1RBVF9YRVJSU0hGVCAgICAgICAgMjUKKyNkZWZpbmUgVkdCU1RBVF9YQ1NFUlIgICAgICAgICAgMHgyMworI2RlZmluZSBWR0JTVEFUX1hVRkxPVyAgICAgICAgICAweDIyCisjZGVmaW5lIFZHQlNUQVRfWEhMRU4gICAgICAgICAgIDB4MjAKKyNkZWZpbmUgVkdCU1RBVF9ORVRFUlIgICAgICAgICAgMHgwMTAwMDAwMAorI2RlZmluZSBWR0JTVEFUX05FUlJTSEZUICAgICAgICAxNgorI2RlZmluZSBWR0JTVEFUX05FUlJNU0sgICAgICAgICAweDFmZgorI2RlZmluZSBWR0JTVEFUX05DU0VSUiAgICAgICAgICAweDEwMworI2RlZmluZSBWR0JTVEFUX05VRkxPVyAgICAgICAgICAweDEwMgorI2RlZmluZSBWR0JTVEFUX05ITEVOICAgICAgICAgICAweDEwMAorI2RlZmluZSBWR0JTVEFUX0xOS0VSUiAgICAgICAgICAweDAwMDAwMDgwCisjZGVmaW5lIFZHQlNUQVRfTEVSUk1TSyAgICAgICAgIDB4ZmYKKyNkZWZpbmUgVkdCU1RBVF9MREVBUkxZICAgICAgICAgMHg4NgorI2RlZmluZSBWR0JTVEFUX0xCT0ZMTyAgICAgICAgICAweDg1CisjZGVmaW5lIFZHQlNUQVRfTENPREVSUiAgICAgICAgIDB4ODQKKyNkZWZpbmUgVkdCU1RBVF9MREJMTkJMICAgICAgICAgMHg4MworI2RlZmluZSBWR0JTVEFUX0xDUkNFUlIgICAgICAgICAweDgyCisjZGVmaW5lIFZHQlNUQVRfTE9GTE8gICAgICAgICAgIDB4ODEKKyNkZWZpbmUgVkdCU1RBVF9MVUZMTyAgICAgICAgICAgMHg4MAorI2RlZmluZSBJUkhERFJfRkxFTl9NU0sgICAgICAgICAweDAwMDBmZmZmCisjZGVmaW5lIElSSEREUl9TVkFMSUQgICAgICAgICAgIDB4ODAwMDAwMDAKKyNkZWZpbmUgSVJIRERSX0VSUiAgICAgICAgICAgICAgMHgxMDAwMDAwMAorI2RlZmluZSBWUkhTVEFUXzgwMk9FICAgICAgICAgICAweDgwMDAwMDAwCisjZGVmaW5lIFZSSFNUQVRfVFBPRkxPICAgICAgICAgIDB4MTAwMDAwMDAKKyNkZWZpbmUgVlJIU1RBVEJfODAyVUUgICAgICAgICAgMHg4MDAwMDAwMAorI2RlZmluZSBWUkhTVEFUQl9SQ1ZFICAgICAgICAgICAweDQwMDAwMDAwCisjZGVmaW5lIFZSSFNUQVRCX0JVRkYgICAgICAgICAgIDB4MjAwMDAwMDAKKyNkZWZpbmUgVlJIU1RBVEJfQ0FSUkUgICAgICAgICAgMHgwODAwMDAwMAorI2RlZmluZSBWUkhTVEFUQl9MT05HRSAgICAgICAgICAweDAyMDAwMDAwCisjZGVmaW5lIFZSSFNUQVRCX1BSRUEgICAgICAgICAgIDB4MDEwMDAwMDAKKyNkZWZpbmUgVlJIU1RBVEJfQ1JDICAgICAgICAgICAgMHgwMDgwMDAwMAorI2RlZmluZSBWUkhTVEFUQl9EUkJMICAgICAgICAgICAweDAwNDAwMDAwCisjZGVmaW5lIFZSSFNUQVRCX0NPREUgICAgICAgICAgIDB4MDAyMDAwMDAKKyNkZWZpbmUgVlJIU1RBVEJfVFBDU1VNICAgICAgICAgMHgwMDEwMDAwMAorI2RlZmluZSBWUkhTVEFUQl9UUEhMRU4gICAgICAgICAweDAwMDgwMDAwCisjZGVmaW5lIFZSSFNUQVRCX0lQQ1NVTSAgICAgICAgIDB4MDAwNDAwMDAKKyNkZWZpbmUgVlJIU1RBVEJfSVBMRVJSICAgICAgICAgMHgwMDAyMDAwMAorI2RlZmluZSBWUkhTVEFUQl9JUEhFUlIgICAgICAgICAweDAwMDEwMDAwCisjZGVmaW5lIFNMSUNfTUFYNjRfQkNOVCAgICAgICAgIDIzCisjZGVmaW5lIFNMSUNfTUFYMzJfQkNOVCAgICAgICAgIDI2CisjZGVmaW5lIElIQ01EX1hNVF9SRVEgICAgICAgICAgIDB4MDEKKyNkZWZpbmUgSUhGTEdfSUZTSEZUICAgICAgICAgICAgMgorI2RlZmluZSBTTElDX1JTUEJVRl9TSVpFICAgICAgICAzMgorCisjZGVmaW5lIFNMSUNfUkVTRVRfTUFHSUMgICAgICAgIDB4REVBRAorI2RlZmluZSBJQ1JfSU5UX09GRiAgICAgICAgICAgICAwCisjZGVmaW5lIElDUl9JTlRfT04gICAgICAgICAgICAgIDEKKyNkZWZpbmUgSUNSX0lOVF9NQVNLICAgICAgICAgICAgMgorCisjZGVmaW5lIElTUl9FUlIgICAgICAgICAgICAgICAgIDB4ODAwMDAwMDAKKyNkZWZpbmUgSVNSX1JDViAgICAgICAgICAgICAgICAgMHg0MDAwMDAwMAorI2RlZmluZSBJU1JfQ01EICAgICAgICAgICAgICAgICAweDIwMDAwMDAwCisjZGVmaW5lIElTUl9JTyAgICAgICAgICAgICAgICAgIDB4NjAwMDAwMDAKKyNkZWZpbmUgSVNSX1VQQyAgICAgICAgICAgICAgICAgMHgxMDAwMDAwMAorI2RlZmluZSBJU1JfTEVWRU5UICAgICAgICAgICAgICAweDA4MDAwMDAwCisjZGVmaW5lIElTUl9STUlTUyAgICAgICAgICAgICAgIDB4MDIwMDAwMDAKKyNkZWZpbmUgSVNSX1VQQ0VSUiAgICAgICAgICAgICAgMHgwMTAwMDAwMAorI2RlZmluZSBJU1JfWERST1AgICAgICAgICAgICAgICAweDAwODAwMDAwCisjZGVmaW5lIElTUl9VUENCU1kgICAgICAgICAgICAgIDB4MDAwMjAwMDAKKyNkZWZpbmUgSVNSX0VWTVNLICAgICAgICAgICAgICAgMHhmZmZmMDAwMAorI2RlZmluZSBJU1JfUElOR01BU0sgICAgICAgICAgICAweDAwNzAwMDAwCisjZGVmaW5lIElTUl9QSU5HRFNNQVNLICAgICAgICAgIDB4MDA3MTAwMDAKKyNkZWZpbmUgSVNSX1VQQ01BU0sgICAgICAgICAgICAgMHgxMTAwMDAwMAorI2RlZmluZSBTTElDX1dDU19TVEFSVCAgICAgICAgICAweDgwMDAwMDAwCisjZGVmaW5lIFNMSUNfV0NTX0NPTVBBUkUgICAgICAgIDB4NDAwMDAwMDAKKyNkZWZpbmUgU0xJQ19SQ1ZXQ1NfQkVHSU4gICAgICAgMHg0MDAwMDAwMAorI2RlZmluZSBTTElDX1JDVldDU19GSU5JU0ggICAgICAweDgwMDAwMDAwCisjZGVmaW5lIFNMSUNfUE1fTUFYUEFUVEVSTlMgICAgIDYKKyNkZWZpbmUgU0xJQ19QTV9QQVRURVJOU0laRSAgICAgMTI4CisjZGVmaW5lIFNMSUNfUE1DQVBTX1dBS0VPTkxBTiAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgTUlJQ1JfUkVHX1BDUiAgICAgICAgICAgMHgwMDAwMDAwMAorI2RlZmluZSBNSUlDUl9SRUdfNCAgICAgICAgICAgICAweDAwMDQwMDAwCisjZGVmaW5lIE1JSUNSX1JFR185ICAgICAgICAgICAgIDB4MDAwOTAwMDAKKyNkZWZpbmUgTUlJQ1JfUkVHXzE2ICAgICAgICAgICAgMHgwMDEwMDAwMAorI2RlZmluZSBQQ1JfUkVTRVQgICAgICAgICAgICAgICAweDgwMDAKKyNkZWZpbmUgUENSX1BPV0VSRE9XTiAgICAgICAgICAgMHgwODAwCisjZGVmaW5lIFBDUl9TUEVFRF8xMDAgICAgICAgICAgIDB4MjAwMAorI2RlZmluZSBQQ1JfU1BFRURfMTAwMCAgICAgICAgICAweDAwNDAKKyNkZWZpbmUgUENSX0FVVE9ORUcgICAgICAgICAgICAgMHgxMDAwCisjZGVmaW5lIFBDUl9BVVRPTkVHX1JTVCAgICAgICAgIDB4MDIwMAorI2RlZmluZSBQQ1JfRFVQTEVYX0ZVTEwgICAgICAgICAweDAxMDAKKyNkZWZpbmUgUFNSX0xJTktVUCAgICAgICAgICAgICAgMHgwMDA0CisKKyNkZWZpbmUgUEFSX0FEVjEwMEZEICAgICAgICAgICAgMHgwMTAwCisjZGVmaW5lIFBBUl9BRFYxMDBIRCAgICAgICAgICAgIDB4MDA4MAorI2RlZmluZSBQQVJfQURWMTBGRCAgICAgICAgICAgICAweDAwNDAKKyNkZWZpbmUgUEFSX0FEVjEwSEQgICAgICAgICAgICAgMHgwMDIwCisjZGVmaW5lIFBBUl9BU1lNUEFVU0UgICAgICAgICAgIDB4MEMwMAorI2RlZmluZSBQQVJfODAyXzMgICAgICAgICAgICAgICAweDAwMDEKKworI2RlZmluZSBQQVJfQURWMTAwMFhGRCAgICAgICAgICAweDAwMjAKKyNkZWZpbmUgUEFSX0FEVjEwMDBYSEQgICAgICAgICAgMHgwMDQwCisjZGVmaW5lIFBBUl9BU1lNUEFVU0VfRklCRVIgICAgIDB4MDE4MAorCisjZGVmaW5lIFBHQ19BRFYxMDAwRkQgICAgICAgICAgIDB4MDIwMAorI2RlZmluZSBQR0NfQURWMTAwMEhEICAgICAgICAgICAweDAxMDAKKyNkZWZpbmUgU0VFUV9MSU5LRkFJTCAgICAgICAgICAgMHg0MDAwCisjZGVmaW5lIFNFRVFfU1BFRUQgICAgICAgICAgICAgIDB4MDA4MAorI2RlZmluZSBTRUVRX0RVUExFWCAgICAgICAgICAgICAweDAwNDAKKyNkZWZpbmUgVERLX0RVUExFWCAgICAgICAgICAgICAgMHgwODAwCisjZGVmaW5lIFRES19TUEVFRCAgICAgICAgICAgICAgIDB4MDQwMAorI2RlZmluZSBNUlZfUkVHMTZfWE9WRVJPTiAgICAgICAweDAwNjgKKyNkZWZpbmUgTVJWX1JFRzE2X1hPVkVST0ZGICAgICAgMHgwMDA4CisjZGVmaW5lIE1SVl9TUEVFRF8xMDAwICAgICAgICAgIDB4ODAwMAorI2RlZmluZSBNUlZfU1BFRURfMTAwICAgICAgICAgICAweDQwMDAKKyNkZWZpbmUgTVJWX1NQRUVEXzEwICAgICAgICAgICAgMHgwMDAwCisjZGVmaW5lIE1SVl9GVUxMRFVQTEVYICAgICAgICAgIDB4MjAwMAorI2RlZmluZSBNUlZfTElOS1VQICAgICAgICAgICAgICAweDA0MDAKKworI2RlZmluZSBHSUdfTElOS1VQICAgICAgICAgICAgICAweDAwMDEKKyNkZWZpbmUgR0lHX0ZVTExEVVBMRVggICAgICAgICAgMHgwMDAyCisjZGVmaW5lIEdJR19TUEVFRF9NQVNLICAgICAgICAgIDB4MDAwQworI2RlZmluZSBHSUdfU1BFRURfMTAwMCAgICAgICAgICAweDAwMDgKKyNkZWZpbmUgR0lHX1NQRUVEXzEwMCAgICAgICAgICAgMHgwMDA0CisjZGVmaW5lIEdJR19TUEVFRF8xMCAgICAgICAgICAgIDB4MDAwMAorCisjZGVmaW5lIE1DUl9SRVNFVCAgICAgICAgICAgICAgIDB4ODAwMDAwMDAKKyNkZWZpbmUgTUNSX0NSQ0VOICAgICAgICAgICAgICAgMHg0MDAwMDAwMAorI2RlZmluZSBNQ1JfRlVMTEQgICAgICAgICAgICAgICAweDEwMDAwMDAwCisjZGVmaW5lIE1DUl9QQUQgICAgICAgICAgICAgICAgIDB4MDIwMDAwMDAKKyNkZWZpbmUgTUNSX1JFVFJZTEFURSAgICAgICAgICAgMHgwMTAwMDAwMAorI2RlZmluZSBNQ1JfQk9MX1NISUZUICAgICAgICAgICAyMQorI2RlZmluZSBNQ1JfSVBHMV9TSElGVCAgICAgICAgICAxNAorI2RlZmluZSBNQ1JfSVBHMl9TSElGVCAgICAgICAgICA3CisjZGVmaW5lIE1DUl9JUEczX1NISUZUICAgICAgICAgIDAKKyNkZWZpbmUgR01DUl9SRVNFVCAgICAgICAgICAgICAgMHg4MDAwMDAwMAorI2RlZmluZSBHTUNSX0dCSVQgICAgICAgICAgICAgICAweDIwMDAwMDAwCisjZGVmaW5lIEdNQ1JfRlVMTEQgICAgICAgICAgICAgIDB4MTAwMDAwMDAKKyNkZWZpbmUgR01DUl9HQVBCQl9TSElGVCAgICAgICAgMTQKKyNkZWZpbmUgR01DUl9HQVBSMV9TSElGVCAgICAgICAgNworI2RlZmluZSBHTUNSX0dBUFIyX1NISUZUICAgICAgICAwCisjZGVmaW5lIEdNQ1JfR0FQQkJfMTAwMCAgICAgICAgIDB4NjAKKyNkZWZpbmUgR01DUl9HQVBSMV8xMDAwICAgICAgICAgMHgyQworI2RlZmluZSBHTUNSX0dBUFIyXzEwMDAgICAgICAgICAweDQwCisjZGVmaW5lIEdNQ1JfR0FQQkJfMTAwICAgICAgICAgIDB4NzAKKyNkZWZpbmUgR01DUl9HQVBSMV8xMDAgICAgICAgICAgMHgyQworI2RlZmluZSBHTUNSX0dBUFIyXzEwMCAgICAgICAgICAweDQwCisjZGVmaW5lIFhDUl9SRVNFVCAgICAgICAgICAgICAgIDB4ODAwMDAwMDAKKyNkZWZpbmUgWENSX1hNVEVOICAgICAgICAgICAgICAgMHg0MDAwMDAwMAorI2RlZmluZSBYQ1JfUEFVU0VFTiAgICAgICAgICAgICAweDIwMDAwMDAwCisjZGVmaW5lIFhDUl9MT0FEUk5HICAgICAgICAgICAgIDB4MTAwMDAwMDAKKyNkZWZpbmUgUkNSX1JFU0VUICAgICAgICAgICAgICAgMHg4MDAwMDAwMAorI2RlZmluZSBSQ1JfUkNWRU4gICAgICAgICAgICAgICAweDQwMDAwMDAwCisjZGVmaW5lIFJDUl9SQ1ZBTEwgICAgICAgICAgICAgIDB4MjAwMDAwMDAKKyNkZWZpbmUgUkNSX1JDVkJBRCAgICAgICAgICAgICAgMHgxMDAwMDAwMAorI2RlZmluZSBSQ1JfQ1RMRU4gICAgICAgICAgICAgICAweDA4MDAwMDAwCisjZGVmaW5lIFJDUl9BRERSQUVOICAgICAgICAgICAgIDB4MDIwMDAwMDAKKyNkZWZpbmUgR1hDUl9SRVNFVCAgICAgICAgICAgICAgMHg4MDAwMDAwMAorI2RlZmluZSBHWENSX1hNVEVOICAgICAgICAgICAgICAweDQwMDAwMDAwCisjZGVmaW5lIEdYQ1JfUEFVU0VFTiAgICAgICAgICAgIDB4MjAwMDAwMDAKKyNkZWZpbmUgR1JDUl9SRVNFVCAgICAgICAgICAgICAgMHg4MDAwMDAwMAorI2RlZmluZSBHUkNSX1JDVkVOICAgICAgICAgICAgICAweDQwMDAwMDAwCisjZGVmaW5lIEdSQ1JfUkNWQUxMICAgICAgICAgICAgIDB4MjAwMDAwMDAKKyNkZWZpbmUgR1JDUl9SQ1ZCQUQgICAgICAgICAgICAgMHgxMDAwMDAwMAorI2RlZmluZSBHUkNSX0NUTEVOICAgICAgICAgICAgICAweDA4MDAwMDAwCisjZGVmaW5lIEdSQ1JfQUREUkFFTiAgICAgICAgICAgIDB4MDIwMDAwMDAKKyNkZWZpbmUgR1JDUl9IQVNIU0laRV9TSElGVCAgICAgMTcKKyNkZWZpbmUgR1JDUl9IQVNIU0laRSAgICAgICAgICAgMTQKKworI2RlZmluZSBTTElDX0VFUFJPTV9JRCAgICAgICAgMHhBNUE1CisjZGVmaW5lIFNMSUNfU1JBTV9TSVpFMkdCICAgICAoNjQgKiAxMDI0KQorI2RlZmluZSBTTElDX1NSQU1fU0laRTFHQiAgICAgKDMyICogMTAyNCkKKyNkZWZpbmUgU0xJQ19IT1NUSURfREVGQVVMVCAgIDB4RkZGRiAgICAgIC8qIHVuaW5pdGlhbGl6ZWQgaG9zdGlkICovCisjZGVmaW5lIFNMSUNfTkJSX01BQ1MgICAgICAgICA0CisKKyNpZm5kZWYgRkFMU0UKKyNkZWZpbmUgRkFMU0UgIDAKKyNlbHNlCisjdW5kZWYgIEZBTFNFCisjZGVmaW5lIEZBTFNFICAwCisjZW5kaWYKKworI2lmbmRlZiBUUlVFCisjZGVmaW5lIFRSVUUgICAxCisjZWxzZQorI3VuZGVmICBUUlVFCisjZGVmaW5lIFRSVUUgICAxCisjZW5kaWYKKworc3RydWN0IHNsaWNfcmN2YnVmIHsKKyAgICB1bnNpZ25lZCBjaGFyICAgICBwYWQxWzZdOworICAgIHVzaG9ydCAgICBwYWQyOworICAgIHUzMiAgIHBhZDM7CisgICAgdTMyICAgcGFkNDsKKyAgICB1MzIgICBidWZmZXI7CisgICAgdTMyICAgbGVuZ3RoOworICAgIHUzMiAgIHN0YXR1czsKKyAgICB1MzIgICBwYWQ1OworICAgIHVzaG9ydCAgICBwYWQ2OworICAgIHVuc2lnbmVkIGNoYXIgICAgIGRhdGFbU0xJQ19SQ1ZCVUZfREFUQVNJWkVdOworfTsKKworIHN0cnVjdCBzbGljX2hkZHJfd2RzIHsKKyAgdW5pb24geworICAgIHN0cnVjdCB7CisJdTMyICAgIGZyYW1lX3N0YXR1czsKKwl1MzIgICAgZnJhbWVfc3RhdHVzX2I7CisJdTMyICAgIHRpbWVfc3RhbXA7CisJdTMyICAgIGNoZWNrc3VtOworICAgIH0gaGRyc18xNHBvcnQ7CisgICAgc3RydWN0IHsKKwl1MzIgICAgZnJhbWVfc3RhdHVzOworCXVzaG9ydCAgICAgQnl0ZUNudDsKKwl1c2hvcnQgICAgIFRwQ2hrc3VtOworCXVzaG9ydCAgICAgQ3R4SGFzaDsKKwl1c2hvcnQgICAgIE1hY0hhc2g7CisJdTMyICAgIEJ1ZkxuazsKKyAgICB9IGhkcnNfZ2JpdDsKKyAgfSB1MDsKK307CisKKyNkZWZpbmUgZnJhbWVfc3RhdHVzMTQgICAgICAgIHUwLmhkcnNfMTRwb3J0LmZyYW1lX3N0YXR1cworI2RlZmluZSBmcmFtZV9zdGF0dXNfYjE0ICAgICAgdTAuaGRyc18xNHBvcnQuZnJhbWVfc3RhdHVzX2IKKyNkZWZpbmUgZnJhbWVfc3RhdHVzR0IgICAgICAgIHUwLmhkcnNfZ2JpdC5mcmFtZV9zdGF0dXMKKworc3RydWN0IHNsaWNfaG9zdDY0c2cgeworCXUzMiAgICAgICAgcGFkZHJsOworCXUzMiAgICAgICAgcGFkZHJoOworCXUzMiAgICAgICAgbGVuZ3RoOworfTsKKworc3RydWN0IHNsaWNfaG9zdDY0X2NtZCB7CisgICAgdTMyICAgICAgIGhvc3RoYW5kbGU7CisgICAgdTMyICAgICAgIFJTVkQ7CisgICAgdW5zaWduZWQgY2hhciAgICAgICAgIGNvbW1hbmQ7CisgICAgdW5zaWduZWQgY2hhciAgICAgICAgIGZsYWdzOworICAgIHVuaW9uIHsKKwl1c2hvcnQgICAgICAgICAgcnN2MTsKKwl1c2hvcnQgICAgICAgICAgcnN2MjsKKyAgICB9IHUwOworICAgIHVuaW9uIHsKKwlzdHJ1Y3QgeworCQl1MzIgICAgICAgICAgICB0b3RsZW47CisJCXN0cnVjdCBzbGljX2hvc3Q2NHNnICAgIGJ1ZnNbU0xJQ19NQVg2NF9CQ05UXTsKKwl9IHNsaWNfYnVmZmVyczsKKyAgICB9IHU7Cit9OworCitzdHJ1Y3Qgc2xpY19yc3BidWYgeworICAgIHUzMiAgIGhvc3RoYW5kbGU7CisgICAgdTMyICAgcGFkMDsKKyAgICB1MzIgICBwYWQxOworICAgIHUzMiAgIHN0YXR1czsKKyAgICB1MzIgICBwYWQyWzRdOworCit9OworCitzdHJ1Y3Qgc2xpY19yZWdzIHsKKwl1MzIJc2xpY19yZXNldDsJCS8qIFJlc2V0IFJlZ2lzdGVyICovCisJdTMyCXBhZDA7CisKKwl1MzIJc2xpY19pY3I7CQkvKiBJbnRlcnJ1cHQgQ29udHJvbCBSZWdpc3RlciAqLworCXUzMglwYWQyOworI2RlZmluZSBTTElDX0lDUgkJMHgwMDA4CisKKwl1MzIJc2xpY19pc3A7CQkvKiBJbnRlcnJ1cHQgc3RhdHVzIHBvaW50ZXIgKi8KKwl1MzIJcGFkMTsKKyNkZWZpbmUgU0xJQ19JU1AJCTB4MDAxMAorCisgICAgdTMyCXNsaWNfaXNyOwkJLyogSW50ZXJydXB0IHN0YXR1cyAqLworCXUzMglwYWQzOworI2RlZmluZSBTTElDX0lTUgkJMHgwMDE4CisKKyAgICB1MzIJc2xpY19oYmFyOwkJLyogSGVhZGVyIGJ1ZmZlciBhZGRyZXNzIHJlZyAqLworCXUzMgkJcGFkNDsKKwkvKiAzMS04IC0gcGh5IGFkZHIgb2Ygc2V0IG9mIGNvbnRpZ3VvdXMgaGRyIGJ1ZmZlcnMKKwkgICAgNy0wIC0gbnVtYmVyIG9mIGJ1ZmZlcnMgcGFzc2VkCisJICAgQnVmZmVycyBhcmUgMjU2IGJ5dGVzIGxvbmcgb24gMjU2LWJ5dGUgYm91bmRhcmllcy4gKi8KKyNkZWZpbmUgU0xJQ19IQkFSCQkweDAwMjAKKyNkZWZpbmUgU0xJQ19IQkFSX0NOVF9NU0sJMHgwMDAwMDBGRgorCisgICAgdTMyCXNsaWNfZGJhcjsJLyogRGF0YSBidWZmZXIgaGFuZGxlICYgYWRkcmVzcyByZWcgKi8KKwl1MzIJCXBhZDU7CisKKwkvKiA0IHNldHMgb2YgcmVnaXN0ZXJzOyBCdWZmZXJzIGFyZSAySyBieXRlcyBsb25nIDIgcGVyIDRLIHBhZ2UuICovCisjZGVmaW5lIFNMSUNfREJBUgkJMHgwMDI4CisjZGVmaW5lIFNMSUNfREJBUl9TSVpFCQkyMDQ4CisKKyAgICB1MzIJc2xpY19jYmFyOwkJIAkvKiBYbXQgQ21kIGJ1ZiBhZGRyIHJlZ3MuKi8KKwkvKiAxIHBlciBYTVQgaW50ZXJmYWNlCisJICAgMzEtNSAtIHBoeSBhZGRyIG9mIGhvc3QgY29tbWFuZCBidWZmZXIKKwkgICAgNC0wIC0gbGVuZ3RoIG9mIGNtZCBpbiBtdWx0aXBsZXMgb2YgMzIgYnl0ZXMKKwkgICBCdWZmZXJzIGFyZSAzMiBieXRlcyB1cCB0byA1MTIgYnl0ZXMgbG9uZyAqLworI2RlZmluZSBTTElDX0NCQVIJCTB4MDAzMAorI2RlZmluZSBTTElDX0NCQVJfTEVOX01TSwkweDAwMDAwMDFGCisjZGVmaW5lIFNMSUNfQ0JBUl9BTElHTgkJMHgwMDAwMDAyMAorCisJdTMyCXNsaWNfd2NzOwkJLyogd3JpdGUgY29udHJvbCBzdG9yZSovCisjZGVmaW5lCVNMSUNfV0NTCQkweDAwMzQKKyNkZWZpbmUgU0xJQ19XQ1NfU1RBUlQJCTB4ODAwMDAwMDAJLypTdGFydCB0aGUgU0xJQyAoSnVtcCB0byBXQ1MpKi8KKyNkZWZpbmUgU0xJQ19XQ1NfQ09NUEFSRQkweDQwMDAwMDAwCS8qIENvbXBhcmUgd2l0aCB2YWx1ZSBpbiBXQ1MqLworCisgICAgdTMyCXNsaWNfcmJhcjsJCS8qIFJlc3BvbnNlIGJ1ZmZlciBhZGRyZXNzIHJlZy4qLworCXUzMgkJcGFkNzsKKwkgLyozMS04IC0gcGh5IGFkZHIgb2Ygc2V0IG9mIGNvbnRpZ3VvdXMgcmVzcG9uc2UgYnVmZmVycworCSAgNy0wIC0gbnVtYmVyIG9mIGJ1ZmZlcnMgcGFzc2VkCisJIEJ1ZmZlcnMgYXJlIDMyIGJ5dGVzIGxvbmcgb24gMzItYnl0ZSBib3VuZGFyaWVzLiovCisjZGVmaW5lIFNMSUNfUkJBUgkJMHgwMDM4CisjZGVmaW5lIFNMSUNfUkJBUl9DTlRfTVNLCTB4MDAwMDAwRkYKKyNkZWZpbmUgU0xJQ19SQkFSX1NJWkUJCTMyCisKKwl1MzIJc2xpY19zdGF0czsJCS8qIHJlYWQgc3RhdGlzdGljcyAoVVBSKSAqLworCXUzMgkJcGFkODsKKyNkZWZpbmUJU0xJQ19SU1RBVAkJMHgwMDQwCisKKwl1MzIJc2xpY19ybHNyOwkJCS8qIHJlYWQgbGluayBzdGF0dXMgKi8KKwl1MzIJCXBhZDk7CisjZGVmaW5lIFNMSUNfTFNUQVQJCTB4MDA0OAorCisJdTMyCXNsaWNfd21jZmc7CQkJLyogV3JpdGUgTWFjIENvbmZpZyAqLworCXUzMgkJcGFkMTA7CisjZGVmaW5lCVNMSUNfV01DRkcJCTB4MDA1MAorCisJdTMyCXNsaWNfd3BoeTsJCQkvKiBXcml0ZSBwaHkgcmVnaXN0ZXIgKi8KKwl1MzIJCXBhZDExOworI2RlZmluZSBTTElDX1dQSFkJCTB4MDA1OAorCisJdTMyCXNsaWNfcmNiYXI7CQkJLypSY3YgQ21kIGJ1ZiBhZGRyIHJlZyovCisJdTMyCQlwYWQxMjsKKyNkZWZpbmUJU0xJQ19SQ0JBUgkJMHgwMDYwCisKKwl1MzIJc2xpY19yY29uZmlnOwkJLyogUmVhZCBTTElDIENvbmZpZyovCisJdTMyCQlwYWQxMzsKKyNkZWZpbmUgU0xJQ19SQ09ORklHCTB4MDA2OAorCisJdTMyCXNsaWNfaW50YWdnOwkJLyogSW50ZXJydXB0IGFnZ3JlZ2F0aW9uIHRpbWUqLworCXUzMgkJcGFkMTQ7CisjZGVmaW5lIFNMSUNfSU5UQUdHCQkweDAwNzAKKworCXUzMglzbGljX3d4Y2ZnOwkJLyogV3JpdGUgWE1JVCBjb25maWcgcmVnKi8KKwl1MzIJCXBhZDE2OworI2RlZmluZQlTTElDX1dYQ0ZHCQkweDAwNzgKKworCXUzMglzbGljX3dyY2ZnOwkJLyogV3JpdGUgUkNWIGNvbmZpZyByZWcqLworCXUzMgkJcGFkMTc7CisjZGVmaW5lCVNMSUNfV1JDRkcJCTB4MDA4MAorCisJdTMyCXNsaWNfd3JhZGRyYWw7CQkvKiBXcml0ZSByY3YgYWRkciBhIGxvdyovCisJdTMyCQlwYWQxODsKKyNkZWZpbmUJU0xJQ19XUkFERFJBTAkweDAwODgKKworCXUzMglzbGljX3dyYWRkcmFoOwkJLyogV3JpdGUgcmN2IGFkZHIgYSBoaWdoKi8KKwl1MzIJCXBhZDE5OworI2RlZmluZQlTTElDX1dSQUREUkFICTB4MDA5MAorCisJdTMyCXNsaWNfd3JhZGRyYmw7CQkvKiBXcml0ZSByY3YgYWRkciBiIGxvdyovCisJdTMyCQlwYWQyMDsKKyNkZWZpbmUJU0xJQ19XUkFERFJCTAkweDAwOTgKKworCXUzMglzbGljX3dyYWRkcmJoOwkJLyogV3JpdGUgcmN2IGFkZHIgYiBoaWdoKi8KKwl1MzIJCXBhZDIxOworI2RlZmluZQlTTElDX1dSQUREUkJICTB4MDBhMAorCisJdTMyCXNsaWNfbWNhc3Rsb3c7CQkvKiBMb3cgYml0cyBvZiBtY2FzdCBtYXNrKi8KKwl1MzIJCXBhZDIyOworI2RlZmluZQlTTElDX01DQVNUTE9XCTB4MDBhOAorCisJdTMyCXNsaWNfbWNhc3RoaWdoOwkJLyogSGlnaCBiaXRzIG9mIG1jYXN0IG1hc2sqLworCXUzMgkJcGFkMjM7CisjZGVmaW5lCVNMSUNfTUNBU1RISUdICTB4MDBiMAorCisJdTMyCXNsaWNfcGluZzsJCQkvKiBQaW5nIHRoZSBjYXJkKi8KKwl1MzIJCXBhZDI0OworI2RlZmluZSBTTElDX1BJTkcJCTB4MDBiOAorCisJdTMyCXNsaWNfZHVtcF9jbWQ7CQkvKiBEdW1wIGNvbW1hbmQgKi8KKwl1MzIJCXBhZDI1OworI2RlZmluZSBTTElDX0RVTVBfQ01ECTB4MDBjMAorCisJdTMyCXNsaWNfZHVtcF9kYXRhOwkJLyogRHVtcCBkYXRhIHBvaW50ZXIgKi8KKwl1MzIJCXBhZDI2OworI2RlZmluZSBTTElDX0RVTVBfREFUQQkweDAwYzgKKworCXUzMglzbGljX3BjaXN0YXR1czsJLyogUmVhZCBjYXJkJ3MgcGNpX3N0YXR1cyByZWdpc3RlciAqLworCXUzMgkJcGFkMjc7CisjZGVmaW5lCVNMSUNfUENJU1RBVFVTCTB4MDBkMAorCisJdTMyCXNsaWNfd3Job3N0aWQ7CQkvKiBXcml0ZSBob3N0aWQgZmllbGQgKi8KKwl1MzIJCXBhZDI4OworI2RlZmluZSBTTElDX1dSSE9TVElECQkgMHgwMGQ4CisjZGVmaW5lIFNMSUNfUkRIT1NUSURfMUdCCSAweDE1NTQKKyNkZWZpbmUgU0xJQ19SREhPU1RJRF8yR0IJIDB4MTU1NAorCisJdTMyCXNsaWNfbG93X3Bvd2VyOwkvKiBQdXQgY2FyZCBpbiBhIGxvdyBwb3dlciBzdGF0ZSAqLworCXUzMgkJcGFkMjk7CisjZGVmaW5lIFNMSUNfTE9XX1BPV0VSCTB4MDBlMAorCisJdTMyCXNsaWNfcXVpZXNjZTsJLyogZm9yY2Ugc2xpYyBpbnRvIHF1aWVzY2VudCBzdGF0ZQorCQkJCQkgYmVmb3JlIHNvZnQgcmVzZXQgKi8KKwl1MzIJCXBhZDMwOworI2RlZmluZSBTTElDX1FVSUVTQ0UJMHgwMGU4CisKKwl1MzIJc2xpY19yZXNldF9pZmFjZTsJLyogcmVzZXQgaW50ZXJmYWNlIHF1ZXVlcyAqLworCXUzMgkJcGFkMzE7CisjZGVmaW5lIFNMSUNfUkVTRVRfSUZBQ0UgMHgwMGYwCisKKyAgICB1MzIJc2xpY19hZGRyX3VwcGVyOwkvKiBCaXRzIDYzLTMyIGZvciBob3N0IGkvZiBhZGRycyAqLworCXUzMgkJcGFkMzI7CisjZGVmaW5lIFNMSUNfQUREUl9VUFBFUgkweDAwZjggLypSZWdpc3RlciBpcyBvbmx5IHdyaXR0ZW4gd2hlbiBpdCBoYXMgY2hhbmdlZCovCisKKyAgICB1MzIJc2xpY19oYmFyNjQ7CQkvKiA2NCBiaXQgSGVhZGVyIGJ1ZmZlciBhZGRyZXNzIHJlZyAqLworCXUzMgkJcGFkMzM7CisjZGVmaW5lIFNMSUNfSEJBUjY0CQkweDAxMDAKKworICAgIHUzMglzbGljX2RiYXI2NDsJLyogNjQgYml0IERhdGEgYnVmZmVyIGhhbmRsZSAmIGFkZHJlc3MgcmVnICovCisJdTMyCQlwYWQzNDsKKyNkZWZpbmUgU0xJQ19EQkFSNjQJCTB4MDEwOAorCisgICAgdTMyCXNsaWNfY2JhcjY0OwkgCS8qIDY0IGJpdCBYbXQgQ21kIGJ1ZiBhZGRyIHJlZ3MuICovCisJdTMyCQlwYWQzNTsKKyNkZWZpbmUgU0xJQ19DQkFSNjQJCTB4MDExMAorCisgICAgdTMyCXNsaWNfcmJhcjY0OwkJLyogNjQgYml0IFJlc3BvbnNlIGJ1ZmZlciBhZGRyZXNzIHJlZy4qLworCXUzMgkJcGFkMzY7CisjZGVmaW5lIFNMSUNfUkJBUjY0CQkweDAxMTgKKworCXUzMglzbGljX3JjYmFyNjQ7CQkvKiA2NCBiaXQgUmN2IENtZCBidWYgYWRkciByZWcqLworCXUzMgkJcGFkMzc7CisjZGVmaW5lCVNMSUNfUkNCQVI2NAkweDAxMjAKKworCXUzMglzbGljX3N0YXRzNjQ7CQkvKnJlYWQgc3RhdGlzdGljcyAoNjQgYml0IFVQUikqLworCXUzMgkJcGFkMzg7CisjZGVmaW5lCVNMSUNfUlNUQVQ2NAkweDAxMjgKKworCXUzMglzbGljX3Jjdl93Y3M7CS8qRG93bmxvYWQgR2lnYWJpdCBSQ1Ygc2VxdWVuY2VyIHVjb2RlKi8KKwl1MzIJCXBhZDM5OworI2RlZmluZSBTTElDX1JDVl9XQ1MJMHgwMTMwCisjZGVmaW5lIFNMSUNfUkNWV0NTX0JFR0lOCTB4NDAwMDAwMDAKKyNkZWZpbmUgU0xJQ19SQ1ZXQ1NfRklOSVNICTB4ODAwMDAwMDAKKworCXUzMglzbGljX3dydmxhbmlkOwkJLyogV3JpdGUgVmxhbklkIGZpZWxkICovCisJdTMyCQlwYWQ0MDsKKyNkZWZpbmUgU0xJQ19XUlZMQU5JRAkweDAxMzgKKworCXUzMglzbGljX3JlYWRfeGZfaW5mbzsgIC8qIFJlYWQgVHJhbnNmb3JtZXIgaW5mbyAqLworCXUzMgkJcGFkNDE7CisjZGVmaW5lIFNMSUNfUkVBRF9YRl9JTkZPIAkweDAxNDAKKworCXUzMglzbGljX3dyaXRlX3hmX2luZm87IC8qIFdyaXRlIFRyYW5zZm9ybWVyIGluZm8gKi8KKwl1MzIJCXBhZDQyOworI2RlZmluZSBTTElDX1dSSVRFX1hGX0lORk8gCTB4MDE0OAorCisJdTMyCVJTVkQxOyAgICAgICAgICAgICAgLyogVE9FIE9ubHkgKi8KKwl1MzIJCXBhZDQzOworCisJdTMyCVJTVkQyOyAJICAgICAgICAgICAgLyogVE9FIE9ubHkgKi8KKwl1MzIJCXBhZDQ0OworCisJdTMyCVJTVkQzOyAgICAgICAgICAgICAgLyogVE9FIE9ubHkgKi8KKwl1MzIJCXBhZDQ1OworCisJdTMyCVJTVkQ0OyAgICAgICAgICAgICAgLyogVE9FIE9ubHkgKi8KKwl1MzIJCXBhZDQ2OworCisJdTMyCXNsaWNfdGlja3NfcGVyX3NlYzsgLyogV3JpdGUgY2FyZCB0aWNrcyBwZXIgc2Vjb25kICovCisJdTMyCQlwYWQ0NzsKKyNkZWZpbmUgU0xJQ19USUNLU19QRVJfU0VDCTB4MDE3MAorCit9OworCitlbnVtIFVQUl9SRVFVRVNUIHsKKyAgICBTTElDX1VQUl9TVEFUUywKKyAgICBTTElDX1VQUl9STFNSLAorICAgIFNMSUNfVVBSX1dDRkcsCisgICAgU0xJQ19VUFJfUkNPTkZJRywKKyAgICBTTElDX1VQUl9SUEhZLAorICAgIFNMSUNfVVBSX0VOTEIsCisgICAgU0xJQ19VUFJfRU5DVCwKKyAgICBTTElDX1VQUl9QRFdOLAorICAgIFNMSUNfVVBSX1BJTkcsCisgICAgU0xJQ19VUFJfRFVNUCwKK307CisKK3N0cnVjdCBpbmljcG1fd2FrZXBhdHRlcm4geworICAgIHUzMiAgICBwYXR0ZXJubGVuZ3RoOworICAgIHVuc2lnbmVkIGNoYXIgICAgICBwYXR0ZXJuW1NMSUNfUE1fUEFUVEVSTlNJWkVdOworICAgIHVuc2lnbmVkIGNoYXIgICAgICBtYXNrW1NMSUNfUE1fUEFUVEVSTlNJWkVdOworfTsKKworc3RydWN0IGluaWNwbV9zdGF0ZSB7CisgICAgdTMyICAgICAgICAgICAgICAgICBwb3dlcmNhcHM7CisgICAgdTMyICAgICAgICAgICAgICAgICBwb3dlcnN0YXRlOworICAgIHUzMiAgICAgICAgICAgICAgICAgd2FrZV9saW5rc3RhdHVzOworICAgIHUzMiAgICAgICAgICAgICAgICAgd2FrZV9tYWdpY3BhY2tldDsKKyAgICB1MzIgICAgICAgICAgICAgICAgIHdha2VfZnJhbWVwYXR0ZXJuOworICAgIHN0cnVjdCBpbmljcG1fd2FrZXBhdHRlcm4gICAgd2FrZXBhdHRlcm5bU0xJQ19QTV9NQVhQQVRURVJOU107Cit9OworCitzdHJ1Y3Qgc2xpY3BtX3BhY2tldF9wYXR0ZXJuIHsKKyAgICB1MzIgICAgIHByaW9yaXR5OworICAgIHUzMiAgICAgcmVzZXJ2ZWQ7CisgICAgdTMyICAgICBtYXNrc2l6ZTsKKyAgICB1MzIgICAgIHBhdHRlcm5vZmZzZXQ7CisgICAgdTMyICAgICBwYXR0ZXJuc2l6ZTsKKyAgICB1MzIgICAgIHBhdHRlcm5mbGFnczsKK307CisKK2VudW0gc2xpY3BtX3Bvd2VyX3N0YXRlIHsKKyAgICBzbGljcG1fc3RhdGVfdW5zcGVjaWZpZWQgPSAwLAorICAgIHNsaWNwbV9zdGF0ZV9kMCwKKyAgICBzbGljcG1fc3RhdGVfZDEsCisgICAgc2xpY3BtX3N0YXRlX2QyLAorICAgIHNsaWNwbV9zdGF0ZV9kMywKKyAgICBzbGljcG1fc3RhdGVfbWF4aW11bQorfTsKKworc3RydWN0IHNsaWNwbV93YWtldXBfY2FwYWJpbGl0aWVzIHsKKyAgICBlbnVtIHNsaWNwbV9wb3dlcl9zdGF0ZSAgbWluX21hZ2ljX3BhY2tldF93YWtldXA7CisgICAgZW51bSBzbGljcG1fcG93ZXJfc3RhdGUgIG1pbl9wYXR0ZXJuX3dha2V1cDsKKyAgICBlbnVtIHNsaWNwbV9wb3dlcl9zdGF0ZSAgbWluX2xpbmtfY2hhbmdlX3dha2V1cDsKK307CisKK3N0cnVjdCBzbGljX3BucF9jYXBhYmlsaXRpZXMgeworCXUzMiBmbGFnczsKKwlzdHJ1Y3Qgc2xpY3BtX3dha2V1cF9jYXBhYmlsaXRpZXMgd2FrZXVwX2NhcGFiaWxpdGllczsKK307CisKK3N0cnVjdCB4bXRfc3RhdHMgeworCXUzMiB4bWl0X3RjcF9ieXRlczsKKwl1MzIgeG1pdF90Y3Bfc2VnczsKKwl1MzIgeG1pdF9ieXRlczsKKwl1MzIgeG1pdF9jb2xsaXNpb25zOworCXUzMiB4bWl0X3VuaWNhc3RzOworCXUzMiB4bWl0X290aGVyX2Vycm9yOworCXUzMiB4bWl0X2V4Y2Vzc19jb2xsaXNpb25zOworfTsKKworc3RydWN0IHJjdl9zdGF0cyB7CisJdTMyIHJjdl90Y3BfYnl0ZXM7CisJdTMyIHJjdl90Y3Bfc2VnczsKKwl1MzIgcmN2X2J5dGVzOworCXUzMiByY3ZfdW5pY2FzdHM7CisJdTMyIHJjdl9vdGhlcl9lcnJvcjsKKwl1MzIgcmN2X2Ryb3BzOworfTsKKworc3RydWN0IHhtdF9zdGF0c2diIHsKKwl1NjQgeG1pdF90Y3BfYnl0ZXM7CisJdTY0IHhtaXRfdGNwX3NlZ3M7CisJdTY0IHhtaXRfYnl0ZXM7CisJdTY0IHhtaXRfY29sbGlzaW9uczsKKwl1NjQgeG1pdF91bmljYXN0czsKKwl1NjQgeG1pdF9vdGhlcl9lcnJvcjsKKwl1NjQgeG1pdF9leGNlc3NfY29sbGlzaW9uczsKK307CisKK3N0cnVjdCByY3Zfc3RhdHNnYiB7CisJdTY0IHJjdl90Y3BfYnl0ZXM7CisJdTY0IHJjdl90Y3Bfc2VnczsKKwl1NjQgcmN2X2J5dGVzOworCXU2NCByY3ZfdW5pY2FzdHM7CisJdTY0IHJjdl9vdGhlcl9lcnJvcjsKKwl1NjQgcmN2X2Ryb3BzOworfTsKKworc3RydWN0IHNsaWNfc3RhdHMgeworICAgIHVuaW9uIHsKKwlzdHJ1Y3QgeworCQlzdHJ1Y3QgeG10X3N0YXRzICB4bXQxMDA7CisJCXN0cnVjdCByY3Zfc3RhdHMgIHJjdjEwMDsKKwl9IHN0YXRzXzEwMDsKKwlzdHJ1Y3QgeworCQlzdHJ1Y3QgeG10X3N0YXRzZ2IgICAgIHhtdEdCOworCQlzdHJ1Y3QgcmN2X3N0YXRzZ2IgICAgIHJjdkdCOworCX0gc3RhdHNfR0I7CisgICAgfSB1OworfTsKKworI2RlZmluZSB4bWl0X3RjcF9zZWdzMTAwICAgICAgICAgICB1LnN0YXRzXzEwMC54bXQxMDAueG1pdF90Y3Bfc2VncworI2RlZmluZSB4bWl0X3RjcF9ieXRlczEwMCAgICAgICAgICB1LnN0YXRzXzEwMC54bXQxMDAueG1pdF90Y3BfYnl0ZXMKKyNkZWZpbmUgeG1pdF9ieXRlczEwMCAgICAgICAgICAgICAgdS5zdGF0c18xMDAueG10MTAwLnhtaXRfYnl0ZXMKKyNkZWZpbmUgeG1pdF9jb2xsaXNpb25zMTAwICAgICAgICAgdS5zdGF0c18xMDAueG10MTAwLnhtaXRfY29sbGlzaW9ucworI2RlZmluZSB4bWl0X3VuaWNhc3RzMTAwICAgICAgICAgICB1LnN0YXRzXzEwMC54bXQxMDAueG1pdF91bmljYXN0cworI2RlZmluZSB4bWl0X290aGVyX2Vycm9yMTAwICAgICAgICB1LnN0YXRzXzEwMC54bXQxMDAueG1pdF9vdGhlcl9lcnJvcgorI2RlZmluZSB4bWl0X2V4Y2Vzc19jb2xsaXNpb25zMTAwICB1LnN0YXRzXzEwMC54bXQxMDAueG1pdF9leGNlc3NfY29sbGlzaW9ucworI2RlZmluZSByY3ZfdGNwX3NlZ3MxMDAgICAgICAgICAgICB1LnN0YXRzXzEwMC5yY3YxMDAucmN2X3RjcF9zZWdzCisjZGVmaW5lIHJjdl90Y3BfYnl0ZXMxMDAgICAgICAgICAgIHUuc3RhdHNfMTAwLnJjdjEwMC5yY3ZfdGNwX2J5dGVzCisjZGVmaW5lIHJjdl9ieXRlczEwMCAgICAgICAgICAgICAgIHUuc3RhdHNfMTAwLnJjdjEwMC5yY3ZfYnl0ZXMKKyNkZWZpbmUgcmN2X3VuaWNhc3RzMTAwICAgICAgICAgICAgdS5zdGF0c18xMDAucmN2MTAwLnJjdl91bmljYXN0cworI2RlZmluZSByY3Zfb3RoZXJfZXJyb3IxMDAgICAgICAgICB1LnN0YXRzXzEwMC5yY3YxMDAucmN2X290aGVyX2Vycm9yCisjZGVmaW5lIHJjdl9kcm9wczEwMCAgICAgICAgICAgICAgIHUuc3RhdHNfMTAwLnJjdjEwMC5yY3ZfZHJvcHMKKyNkZWZpbmUgeG1pdF90Y3Bfc2Vnc19nYiAgICAgICAgICAgdS5zdGF0c19HQi54bXRHQi54bWl0X3RjcF9zZWdzCisjZGVmaW5lIHhtaXRfdGNwX2J5dGVzX2diICAgICAgICAgIHUuc3RhdHNfR0IueG10R0IueG1pdF90Y3BfYnl0ZXMKKyNkZWZpbmUgeG1pdF9ieXRlc19nYiAgICAgICAgICAgICAgdS5zdGF0c19HQi54bXRHQi54bWl0X2J5dGVzCisjZGVmaW5lIHhtaXRfY29sbGlzaW9uc19nYiAgICAgICAgIHUuc3RhdHNfR0IueG10R0IueG1pdF9jb2xsaXNpb25zCisjZGVmaW5lIHhtaXRfdW5pY2FzdHNfZ2IgICAgICAgICAgIHUuc3RhdHNfR0IueG10R0IueG1pdF91bmljYXN0cworI2RlZmluZSB4bWl0X290aGVyX2Vycm9yX2diICAgICAgICB1LnN0YXRzX0dCLnhtdEdCLnhtaXRfb3RoZXJfZXJyb3IKKyNkZWZpbmUgeG1pdF9leGNlc3NfY29sbGlzaW9uc19nYiAgdS5zdGF0c19HQi54bXRHQi54bWl0X2V4Y2Vzc19jb2xsaXNpb25zCisKKyNkZWZpbmUgcmN2X3RjcF9zZWdzX2diICAgICAgICAgICAgdS5zdGF0c19HQi5yY3ZHQi5yY3ZfdGNwX3NlZ3MKKyNkZWZpbmUgcmN2X3RjcF9ieXRlc19nYiAgICAgICAgICAgdS5zdGF0c19HQi5yY3ZHQi5yY3ZfdGNwX2J5dGVzCisjZGVmaW5lIHJjdl9ieXRlc19nYiAgICAgICAgICAgICAgIHUuc3RhdHNfR0IucmN2R0IucmN2X2J5dGVzCisjZGVmaW5lIHJjdl91bmljYXN0c19nYiAgICAgICAgICAgIHUuc3RhdHNfR0IucmN2R0IucmN2X3VuaWNhc3RzCisjZGVmaW5lIHJjdl9vdGhlcl9lcnJvcl9nYiAgICAgICAgIHUuc3RhdHNfR0IucmN2R0IucmN2X290aGVyX2Vycm9yCisjZGVmaW5lIHJjdl9kcm9wc19nYiAgICAgICAgICAgICAgIHUuc3RhdHNfR0IucmN2R0IucmN2X2Ryb3BzCisKK3N0cnVjdCBzbGljX2NvbmZpZ19tYWMgeworICAgIHVuc2lnbmVkIGNoYXIgICAgICAgIG1hY2FkZHJBWzZdOworfTsKKworI2RlZmluZSBBVEtfRlJVX0ZPUk1BVCAgICAgICAgMHgwMAorI2RlZmluZSBWRU5ET1IxX0ZSVV9GT1JNQVQgICAgMHgwMQorI2RlZmluZSBWRU5ET1IyX0ZSVV9GT1JNQVQgICAgMHgwMgorI2RlZmluZSBWRU5ET1IzX0ZSVV9GT1JNQVQgICAgMHgwMworI2RlZmluZSBWRU5ET1I0X0ZSVV9GT1JNQVQgICAgMHgwNAorI2RlZmluZSBOT19GUlVfRk9STUFUICAgICAgICAgMHhGRgorCitzdHJ1Y3QgYXRrX2ZydSB7CisgICAgdW5zaWduZWQgY2hhciAgICAgICAgYXNzZW1ibHlbNl07CisgICAgdW5zaWduZWQgY2hhciAgICAgICAgcmV2aXNpb25bMl07CisgICAgdW5zaWduZWQgY2hhciAgICAgICAgc2VyaWFsWzE0XTsKKyAgICB1bnNpZ25lZCBjaGFyICAgICAgICBwYWRbM107Cit9OworCitzdHJ1Y3QgdmVuZG9yMV9mcnUgeworICAgIHVuc2lnbmVkIGNoYXIgICAgICAgIGNvbW1vZGl0eTsKKyAgICB1bnNpZ25lZCBjaGFyICAgICAgICBhc3NlbWJseVs0XTsKKyAgICB1bnNpZ25lZCBjaGFyICAgICAgICByZXZpc2lvblsyXTsKKyAgICB1bnNpZ25lZCBjaGFyICAgICAgICBzdXBwbGllclsyXTsKKyAgICB1bnNpZ25lZCBjaGFyICAgICAgICBkYXRlWzJdOworICAgIHVuc2lnbmVkIGNoYXIgICAgICAgIHNlcXVlbmNlWzNdOworICAgIHVuc2lnbmVkIGNoYXIgICAgICAgIHBhZFsxM107Cit9OworCitzdHJ1Y3QgdmVuZG9yMl9mcnUgeworICAgIHVuc2lnbmVkIGNoYXIgICAgICAgIHBhcnRbOF07CisgICAgdW5zaWduZWQgY2hhciAgICAgICAgc3VwcGxpZXJbNV07CisgICAgdW5zaWduZWQgY2hhciAgICAgICAgZGF0ZVszXTsKKyAgICB1bnNpZ25lZCBjaGFyICAgICAgICBzZXF1ZW5jZVs0XTsKKyAgICB1bnNpZ25lZCBjaGFyICAgICAgICBwYWRbN107Cit9OworCitzdHJ1Y3QgdmVuZG9yM19mcnUgeworICAgIHVuc2lnbmVkIGNoYXIgICAgICAgIGFzc2VtYmx5WzZdOworICAgIHVuc2lnbmVkIGNoYXIgICAgICAgIHJldmlzaW9uWzJdOworICAgIHVuc2lnbmVkIGNoYXIgICAgICAgIHNlcmlhbFsxNF07CisgICAgdW5zaWduZWQgY2hhciAgICAgICAgcGFkWzNdOworfTsKKworc3RydWN0IHZlbmRvcjRfZnJ1IHsKKyAgICB1bnNpZ25lZCBjaGFyICAgICAgICBudW1iZXJbOF07CisgICAgdW5zaWduZWQgY2hhciAgICAgICAgcGFydFs4XTsKKyAgICB1bnNpZ25lZCBjaGFyICAgICAgICB2ZXJzaW9uWzhdOworICAgIHVuc2lnbmVkIGNoYXIgICAgICAgIHBhZFszXTsKK307CisKK3VuaW9uIG9lbWZydSB7CisgICAgc3RydWN0IHZlbmRvcjFfZnJ1ICAgdmVuZG9yMV9mcnU7CisgICAgc3RydWN0IHZlbmRvcjJfZnJ1ICAgdmVuZG9yMl9mcnU7CisgICAgc3RydWN0IHZlbmRvcjNfZnJ1ICAgdmVuZG9yM19mcnU7CisgICAgc3RydWN0IHZlbmRvcjRfZnJ1ICAgdmVuZG9yNF9mcnU7Cit9OworCisvKgorICAgU0xJQyBFRVBST00gc3RydWN0dXJlIGZvciBNb2phdmUKKyovCitzdHJ1Y3Qgc2xpY19lZXByb20geworCXVzaG9ydAkJSWQ7CQkvKiAwMCBFRVBST00vRkxBU0ggTWFnaWMgY29kZSAnQTVBNScqLworCXVzaG9ydAkJRWVjb2RlU2l6ZTsJLyogMDEgU2l6ZSBvZiBFRVBST00gQ29kZXMgKGJ5dGVzICogNCkqLworCXVzaG9ydAkJRmxhc2hTaXplOwkvKiAwMiBGbGFzaCBzaXplICovCisJdXNob3J0CQlFZXByb21TaXplOwkvKiAwMyBFRVBST00gU2l6ZSAqLworCXVzaG9ydAkJVmVuZG9ySWQ7CS8qIDA0IFZlbmRvciBJRCAqLworCXVzaG9ydAkJRGV2aWNlSWQ7CS8qIDA1IERldmljZSBJRCAqLworCXVuc2lnbmVkIGNoYXIJCVJldmlzaW9uSWQ7CS8qIDA2IFJldmlzaW9uIElEICovCisJdW5zaWduZWQgY2hhcgkJQ2xhc3NDb2RlWzNdOwkvKiAwNyBDbGFzcyBDb2RlICovCisJdW5zaWduZWQgY2hhcgkJRGJnSW50UGluOwkvKiAwOCBEZWJ1ZyBJbnRlcnJ1cHQgcGluICovCisJdW5zaWduZWQgY2hhcgkJTmV0SW50UGluMDsJLyogICAgTmV0d29yayBJbnRlcnJ1cHQgUGluICovCisJdW5zaWduZWQgY2hhcgkJTWluR3JhbnQ7CS8qIDA5IE1pbmltdW0gZ3JhbnQgKi8KKwl1bnNpZ25lZCBjaGFyCQlNYXhMYXQ7CQkvKiAgICBNYXhpbXVtIExhdGVuY3kgKi8KKwl1c2hvcnQJCVBjaVN0YXR1czsJLyogMTAgUENJIFN0YXR1cyAqLworCXVzaG9ydAkJU3ViU3lzVklkOwkvKiAxMSBTdWJzeXN0ZW0gVmVuZG9yIElkICovCisJdXNob3J0CQlTdWJTeXNJZDsJLyogMTIgU3Vic3lzdGVtIElEICovCisJdXNob3J0CQlEYmdEZXZJZDsJLyogMTMgRGVidWcgRGV2aWNlIElkICovCisJdXNob3J0CQlEcmFtUm9tRm47CS8qIDE0IERyYW0vUm9tIGZ1bmN0aW9uICovCisJdXNob3J0CQlEU2l6ZTJQY2k7CS8qIDE1IERSQU0gc2l6ZSB0byBQQ0kgKGJ5dGVzICogNjRLKSAqLworCXVzaG9ydAlSU2l6ZTJQY2k7CS8qIDE2IFJPTSBleHRlbnNpb24gc2l6ZSB0byBQQ0kgKGJ5dGVzICogNGspICovCisJdW5zaWduZWQgY2hhciBOZXRJbnRQaW4xOy8qIDE3IE5ldHdvcmsgSW50ZXJmYWNlIFBpbiAxCisJCQkJICAgIChzaW1iYS9sZW9uZSBvbmx5KSAqLworCXVuc2lnbmVkIGNoYXIgTmV0SW50UGluMjsgLypOZXR3b3JrIEludGVyZmFjZSBQaW4gMiAoc2ltYmEvbGVvbmUgb25seSkqLworCXVuaW9uIHsKKwkJdW5zaWduZWQgY2hhciBOZXRJbnRQaW4zOy8qMTggTmV0d29yayBJbnRlcmZhY2UgUGluIDMKKwkJCQkJICAgKHNpbWJhIG9ubHkpKi8KKwkJdW5zaWduZWQgY2hhciBGcmVlVGltZTsvKkZyZWVUaW1lIHNldHRpbmcgKGxlb25lL21vamF2ZSBvbmx5KSAqLworCX0gdTE7CisJdW5zaWduZWQgY2hhcglUQkljdGw7CS8qICAgIDEwLWJpdCBpbnRlcmZhY2UgY29udHJvbCAoTW9qYXZlIG9ubHkpICovCisJdXNob3J0CQlEcmFtU2l6ZTsJLyogMTkgRFJBTSBzaXplIChieXRlcyAqIDY0aykgKi8KKwl1bmlvbiB7CisJCXN0cnVjdCB7CisJCQkvKiBNYWMgSW50ZXJmYWNlIFNwZWNpZmljIHBvcnRpb25zICovCisJCQlzdHJ1Y3Qgc2xpY19jb25maWdfbWFjCU1hY0luZm9bU0xJQ19OQlJfTUFDU107CisJCX0gbWFjOwkJCQkvKiBNQUMgYWNjZXNzIGZvciBhbGwgYm9hcmRzICovCisJCXN0cnVjdCB7CisJCQkvKiB1c2UgYWJvdmUgc3RydWN0IGZvciBNQUMgYWNjZXNzICovCisJCQlzdHJ1Y3Qgc2xpY19jb25maWdfbWFjCXBhZFtTTElDX05CUl9NQUNTIC0gMV07CisJCQl1c2hvcnQJCURldmljZUlkMjsJLyogRGV2aWNlIElEIGZvciAybmQKKwkJCQkJCQkJUENJIGZ1bmN0aW9uICovCisJCQl1bnNpZ25lZCBjaGFyCUludFBpbjI7CS8qIEludGVycnVwdCBwaW4gZm9yCisJCQkJCQkJICAgMm5kIFBDSSBmdW5jdGlvbiAqLworCQkJdW5zaWduZWQgY2hhcglDbGFzc0NvZGUyWzNdOwkvKiBDbGFzcyBDb2RlIGZvciAybmQKKwkJCQkJCQkJUENJIGZ1bmN0aW9uICovCisJCX0gbW9qYXZlOwkvKiAybmQgZnVuY3Rpb24gYWNjZXNzIGZvciBnaWdhYml0IGJvYXJkICovCisJfSB1MjsKKwl1c2hvcnQJCUNmZ0J5dGU2OwkvKiBDb25maWcgQnl0ZSA2ICovCisJdXNob3J0CQlQTUVDYXBhYjsJLyogUG93ZXIgTWdtZW50IGNhcGFiaWxpdGllcyAqLworCXVzaG9ydAkJTndDbGtDdHJsczsJLyogTmV0d29ya0Nsb2NrQ29udHJvbHMgKi8KKwl1bnNpZ25lZCBjaGFyCUZydUZvcm1hdDsJLyogQWxhY3JpdGVjaCBGUlUgZm9ybWF0IHR5cGUgKi8KKwlzdHJ1Y3QgYXRrX2ZydSAgIEF0a0ZydTsJLyogQWxhY3JpdGVjaCBGUlUgaW5mb3JtYXRpb24gKi8KKwl1bnNpZ25lZCBjaGFyCU9lbUZydUZvcm1hdDsJLyogb3B0aW9uYWwgT0VNIEZSVSBmb3JtYXQgdHlwZSAqLworCXVuaW9uIG9lbWZydSAgICBPZW1GcnU7ICAgICAgICAgLyogb3B0aW9uYWwgT0VNIEZSVSBpbmZvcm1hdGlvbiAqLworCXVuc2lnbmVkIGNoYXIJUGFkWzRdOwkvKiBQYWQgdG8gMTI4IGJ5dGVzIC0gaW5jbHVkZXMgMiBja3N1bSBieXRlcworCQkJCSAqKGlmIE9FTSBGUlUgaW5mbyBleGlzdHMpIGFuZCB0d28gdW51c2FibGUKKwkJCQkgKiBieXRlcyBhdCB0aGUgZW5kICovCit9OworCisvKiBTTElDIEVFUFJPTSBzdHJ1Y3R1cmUgZm9yIE9hc2lzICovCitzdHJ1Y3Qgb3NsaWNfZWVwcm9tIHsKKwl1c2hvcnQJCUlkOwkJLyogMDAgRUVQUk9NL0ZMQVNIIE1hZ2ljIGNvZGUgJ0E1QTUnICovCisJdXNob3J0CQlFZWNvZGVTaXplOwkvKiAwMSBTaXplIG9mIEVFUFJPTSBDb2RlcyAoYnl0ZXMgKiA0KSovCisJdXNob3J0CQlGbGFzaENvbmZpZzA7CS8qIDAyIEZsYXNoIENvbmZpZyBmb3IgU1BJIGRldmljZSAwICovCisJdXNob3J0CQlGbGFzaENvbmZpZzE7CS8qIDAzIEZsYXNoIENvbmZpZyBmb3IgU1BJIGRldmljZSAxICovCisJdXNob3J0CQlWZW5kb3JJZDsJLyogMDQgVmVuZG9yIElEICovCisJdXNob3J0CQlEZXZpY2VJZDsJLyogMDUgRGV2aWNlIElEIChmdW5jdGlvbiAwKSAqLworCXVuc2lnbmVkIGNoYXIJUmV2aXNpb25JZDsJLyogMDYgUmV2aXNpb24gSUQgKi8KKwl1bnNpZ25lZCBjaGFyCUNsYXNzQ29kZVszXTsJLyogMDcgQ2xhc3MgQ29kZSBmb3IgUENJIGZ1bmN0aW9uIDAgKi8KKwl1bnNpZ25lZCBjaGFyCUludFBpbjE7CS8qIDA4IEludGVycnVwdCBwaW4gZm9yIFBDSSBmdW5jdGlvbiAxKi8KKwl1bnNpZ25lZCBjaGFyCUNsYXNzQ29kZTJbM107CS8qIDA5IENsYXNzIENvZGUgZm9yIFBDSSBmdW5jdGlvbiAxICovCisJdW5zaWduZWQgY2hhcglJbnRQaW4yOwkvKiAxMCBJbnRlcnJ1cHQgcGluIGZvciBQQ0kgZnVuY3Rpb24gMiovCisJdW5zaWduZWQgY2hhcglJbnRQaW4wOwkvKiAgICBJbnRlcnJ1cHQgcGluIGZvciBQQ0kgZnVuY3Rpb24gMCovCisJdW5zaWduZWQgY2hhcgkJTWluR3JhbnQ7CS8qIDExIE1pbmltdW0gZ3JhbnQgKi8KKwl1bnNpZ25lZCBjaGFyCQlNYXhMYXQ7CQkvKiAgICBNYXhpbXVtIExhdGVuY3kgKi8KKwl1c2hvcnQJCVN1YlN5c1ZJZDsJLyogMTIgU3Vic3lzdGVtIFZlbmRvciBJZCAqLworCXVzaG9ydAkJU3ViU3lzSWQ7CS8qIDEzIFN1YnN5c3RlbSBJRCAqLworCXVzaG9ydAkJRmxhc2hTaXplOwkvKiAxNCBGbGFzaCBzaXplIChieXRlcyAvIDRLKSAqLworCXVzaG9ydAkJRFNpemUyUGNpOwkvKiAxNSBEUkFNIHNpemUgdG8gUENJIChieXRlcyAvIDY0SykgKi8KKwl1c2hvcnQJCVJTaXplMlBjaTsJLyogMTYgRmxhc2ggKFJPTSBleHRlbnNpb24pIHNpemUgdG8KKwkJCQkJCVBDSSAoYnl0ZXMgLyA0SykgKi8KKwl1c2hvcnQJCURldmljZUlkMTsJLyogMTcgRGV2aWNlIElkIChmdW5jdGlvbiAxKSAqLworCXVzaG9ydAkJRGV2aWNlSWQyOwkvKiAxOCBEZXZpY2UgSWQgKGZ1bmN0aW9uIDIpICovCisJdXNob3J0CQlDZmdCeXRlNjsJLyogMTkgRGV2aWNlIFN0YXR1cyBDb25maWcgQnl0ZXMgNi03ICovCisJdXNob3J0CQlQTUVDYXBhYjsJLyogMjAgUG93ZXIgTWdtZW50IGNhcGFiaWxpdGllcyAqLworCXVuc2lnbmVkIGNoYXIJCU1TSUNhcGFiOwkvKiAyMSBNU0kgY2FwYWJpbGl0aWVzICovCisJdW5zaWduZWQgY2hhcgkJQ2xvY2tEaXZpZGVyOwkvKiAgICBDbG9jayBkaXZpZGVyICovCisJdXNob3J0CQlQY2lTdGF0dXNMb3c7CS8qIDIyIFBDSSBTdGF0dXMgYml0cyAxNTowICovCisJdXNob3J0CQlQY2lTdGF0dXNIaWdoOwkvKiAyMyBQQ0kgU3RhdHVzIGJpdHMgMzE6MTYgKi8KKwl1c2hvcnQJCURyYW1Db25maWdMb3c7CS8qIDI0IERSQU0gQ29uZmlndXJhdGlvbiBiaXRzIDE1OjAgKi8KKwl1c2hvcnQJCURyYW1Db25maWdIaWdoOwkvKiAyNSBEUkFNIENvbmZpZ3VyYXRpb24gYml0cyAzMToxNiAqLworCXVzaG9ydAkJRHJhbVNpemU7CS8qIDI2IERSQU0gc2l6ZSAoYnl0ZXMgLyA2NEspICovCisJdXNob3J0CQlHcGlvVGJpQ3RsOy8qIDI3IEdQSU8vVEJJIGNvbnRyb2xzIGZvciBmdW5jdGlvbnMgMS8wICovCisJdXNob3J0CQlFZXByb21TaXplOwkJLyogMjggRUVQUk9NIFNpemUgKi8KKwlzdHJ1Y3Qgc2xpY19jb25maWdfbWFjIE1hY0luZm9bMl07CS8qIDI5IE1BQyBhZGRyZXNzZXMgKDIgcG9ydHMpICovCisJdW5zaWduZWQgY2hhcglGcnVGb3JtYXQ7CS8qIDM1IEFsYWNyaXRlY2ggRlJVIGZvcm1hdCB0eXBlICovCisJc3RydWN0IGF0a19mcnUJQXRrRnJ1OwkvKiBBbGFjcml0ZWNoIEZSVSBpbmZvcm1hdGlvbiAqLworCXVuc2lnbmVkIGNoYXIJT2VtRnJ1Rm9ybWF0OwkvKiBvcHRpb25hbCBPRU0gRlJVIGZvcm1hdCB0eXBlICovCisJdW5pb24gb2VtZnJ1ICAgIE9lbUZydTsgICAgICAgICAvKiBvcHRpb25hbCBPRU0gRlJVIGluZm9ybWF0aW9uICovCisJdW5zaWduZWQgY2hhcglQYWRbNF07CS8qIFBhZCB0byAxMjggYnl0ZXMgLSBpbmNsdWRlcyAyIGNoZWNrc3VtIGJ5dGVzCisJCQkJICogKGlmIE9FTSBGUlUgaW5mbyBleGlzdHMpIGFuZCB0d28gdW51c2FibGUKKwkJCQkgKiBieXRlcyBhdCB0aGUgZW5kCisJCQkJICovCit9OworCisjZGVmaW5lCU1BWF9FRUNPREVfU0laRQlzaXplb2Yoc3RydWN0IHNsaWNfZWVwcm9tKQorI2RlZmluZSBNSU5fRUVDT0RFX1NJWkUJMHg2MgkvKiBjb2RlIHNpemUgd2l0aG91dCBvcHRpb25hbCBPRU0gRlJVIHN0dWZmICovCisKKy8qIFNMSUMgQ09ORklHIHN0cnVjdHVyZQorCisgVGhpcyBzdHJ1Y3R1cmUgbGl2ZXMgaW4gdGhlIENBUkQgc3RydWN0dXJlIGFuZCBpcyB2YWxpZCBmb3IgYWxsCisgYm9hcmQgdHlwZXMuICBJdCBpcyBmaWxsZWQgaW4gZnJvbSB0aGUgYXBwcm9wcmlhdGUgRUVQUk9NIHN0cnVjdHVyZQorIGJ5IFNsaWNHZXRDb25maWdEYXRhKCkuCisqLworc3RydWN0IHNsaWNfY29uZmlnIHsKKwlib29sIEVlcHJvbVZhbGlkOwkvKiBWYWxpZCBFRVBST00gZmxhZyAoY2hlY2tzdW0gZ29vZD8pICovCisJdXNob3J0CQlEcmFtU2l6ZTsJLyogRFJBTSBzaXplIChieXRlcyAvIDY0SykgKi8KKwlzdHJ1Y3Qgc2xpY19jb25maWdfbWFjIE1hY0luZm9bU0xJQ19OQlJfTUFDU107IC8qIE1BQyBhZGRyZXNzZXMgKi8KKwl1bnNpZ25lZCBjaGFyCQlGcnVGb3JtYXQ7CS8qIEFsYWNyaXRlY2ggRlJVIGZvcm1hdCB0eXBlICovCisJc3RydWN0IGF0a19mcnUJQXRrRnJ1OwkvKiBBbGFjcml0ZWNoIEZSVSBpbmZvcm1hdGlvbiAqLworCXVuc2lnbmVkIGNoYXIJT2VtRnJ1Rm9ybWF0OwkvKiBvcHRpb25hbCBPRU0gRlJVIGZvcm1hdCB0eXBlICovCisJdW5pb24geworCQlzdHJ1Y3QgdmVuZG9yMV9mcnUgICB2ZW5kb3IxX2ZydTsKKwkJc3RydWN0IHZlbmRvcjJfZnJ1ICAgdmVuZG9yMl9mcnU7CisJCXN0cnVjdCB2ZW5kb3IzX2ZydSAgIHZlbmRvcjNfZnJ1OworCQlzdHJ1Y3QgdmVuZG9yNF9mcnUgICB2ZW5kb3I0X2ZydTsKKwl9IE9lbUZydTsKK307CisKKyNwcmFnbWEgcGFjaygpCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3NsaWNvc3Mvc2xpY2luYy5oIGIvZHJpdmVycy9zdGFnaW5nL3NsaWNvc3Mvc2xpY2luYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxMjg4YzQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvc2xpY29zcy9zbGljaW5jLmgKQEAgLTAsMCArMSwxODUgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIENvcHlyaWdodCAoYykgMjAwMC0yMDAyIEFsYWNyaXRlY2gsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkCisgKiAgICB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBTEFDUklURUNILCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQUxBQ1JJVEVDSCwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCisgKiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqCisgKiBUaGUgdmlld3MgYW5kIGNvbmNsdXNpb25zIGNvbnRhaW5lZCBpbiB0aGUgc29mdHdhcmUgYW5kIGRvY3VtZW50YXRpb24KKyAqIGFyZSB0aG9zZSBvZiB0aGUgYXV0aG9ycyBhbmQgc2hvdWxkIG5vdCBiZSBpbnRlcnByZXRlZCBhcyByZXByZXNlbnRpbmcKKyAqIG9mZmljaWFsIHBvbGljaWVzLCBlaXRoZXIgZXhwcmVzc2VkIG9yIGltcGxpZWQsIG9mIEFsYWNyaXRlY2gsIEluYy4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisgKiBGSUxFTkFNRTogc2xpY2luYy5oCisgKgorICogVGhpcyBmaWxlIGNvbnRhaW5zIGFsbCBvdGhlciBpbmNsdWRlIGZpbGVzIGFuZCBwcm90b3R5cGUgZGVmaW5pdGlvbnMKKyAqIGZvciB0aGUgU0xJQ09TUyBkcml2ZXIuCisgKi8KKyNpZm5kZWYgX1NMSUNfSU5DTFVERV9IXworI2RlZmluZSBfU0xJQ19JTkNMVURFX0hfCisKKyNpbmNsdWRlICJzbGljX29zLmgiCisjaW5jbHVkZSAic2xpY2RiZy5oIgorI2luY2x1ZGUgInNsaWNody5oIgorI2luY2x1ZGUgInNsaWMuaCIKKworc3RhdGljIGludCBzbGljX2VudHJ5X3Byb2JlKHN0cnVjdCBwY2lfZGV2ICAgICAgICAgICAgICAqcGNpZGV2LAorCQkJY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgICplbnQpOworc3RhdGljIHZvaWQgc2xpY19lbnRyeV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBjaWRldik7CisKK3N0YXRpYyB2b2lkIHNsaWNfaW5pdF9kcml2ZXIodm9pZCk7CitzdGF0aWMgaW50ICBzbGljX2VudHJ5X29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CitzdGF0aWMgaW50ICBzbGljX2VudHJ5X2hhbHQoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CitzdGF0aWMgaW50ICBzbGljX2lvY3RsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpZnJlcSAqcnEsIGludCBjbWQpOworc3RhdGljIGludCAgc2xpY194bWl0X3N0YXJ0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOworc3RhdGljIHZvaWQgc2xpY194bWl0X2ZhaWwoc3RydWN0IGFkYXB0ZXIgICAgKmFkYXB0ZXIsCisJCQlzdHJ1Y3Qgc2tfYnVmZiAgICpza2IsCisJCQl2b2lkICpjbWQsCisJCQl1MzIgICAgICAgICAgIHNrYnR5cGUsCisJCQl1MzIgICAgICAgICAgIHN0YXR1cyk7CitzdGF0aWMgdm9pZCBzbGljX2NvbmZpZ19wY2koc3RydWN0IHBjaV9kZXYgKnBjaWRldik7CitzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnNsaWNfcmN2cXVldWVfZ2V0bmV4dChzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcik7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzbGljX3JlZzMyX3dyaXRlKHZvaWQgX19pb21lbSAqcmVnLCB1MzIgdmFsdWUsIHVpbnQgZmx1c2gpOworc3RhdGljIGlubGluZSB2b2lkIHNsaWNfcmVnNjRfd3JpdGUoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIsIHZvaWQgX19pb21lbSAqcmVnLAorCXUzMiB2YWx1ZSwgdm9pZCBfX2lvbWVtICpyZWdoLCB1MzIgcGFkZHJoLCB1aW50IGZsdXNoKTsKKworI2lmIFNMSUNfR0VUX1NUQVRTX0VOQUJMRUQKK3N0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqc2xpY19nZXRfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CisjZW5kaWYKKworc3RhdGljIGludCBzbGljX21hY19zZXRfYWRkcmVzcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkICpwdHIpOworc3RhdGljIHZvaWQgc2xpY19yY3ZfaGFuZGxlcihzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcik7CitzdGF0aWMgdm9pZCBzbGljX2xpbmtfZXZlbnRfaGFuZGxlcihzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcik7CitzdGF0aWMgdm9pZCBzbGljX3htaXRfY29tcGxldGUoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpOworc3RhdGljIHZvaWQgc2xpY191cHJfcmVxdWVzdF9jb21wbGV0ZShzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciwgdTMyIGlzcik7CitzdGF0aWMgaW50ICAgc2xpY19yc3BxdWV1ZV9pbml0KHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKTsKK3N0YXRpYyBpbnQgICBzbGljX3JzcHF1ZXVlX3Jlc2V0KHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKTsKK3N0YXRpYyB2b2lkICBzbGljX3JzcHF1ZXVlX2ZyZWUoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpOworc3RhdGljIHN0cnVjdCBzbGljX3JzcGJ1ZiAqc2xpY19yc3BxdWV1ZV9nZXRuZXh0KHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKTsKK3N0YXRpYyB2b2lkICBzbGljX2NtZHFtZW1faW5pdChzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcik7CitzdGF0aWMgdm9pZCAgc2xpY19jbWRxbWVtX2ZyZWUoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpOworc3RhdGljIHUzMiAqc2xpY19jbWRxbWVtX2FkZHBhZ2Uoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpOworc3RhdGljIGludCAgIHNsaWNfY21kcV9pbml0KHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKTsKK3N0YXRpYyB2b2lkICBzbGljX2NtZHFfZnJlZShzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcik7CitzdGF0aWMgdm9pZCAgc2xpY19jbWRxX3Jlc2V0KHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKTsKK3N0YXRpYyB2b2lkICBzbGljX2NtZHFfYWRkY21kcGFnZShzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciwgdTMyICpwYWdlKTsKK3N0YXRpYyB2b2lkICBzbGljX2NtZHFfZ2V0ZG9uZShzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcik7CitzdGF0aWMgdm9pZCAgc2xpY19jbWRxX3B1dGRvbmVfaXJxKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyLAorCQkJCQkJc3RydWN0IHNsaWNfaG9zdGNtZCAqY21kKTsKK3N0YXRpYyBzdHJ1Y3Qgc2xpY19ob3N0Y21kICpzbGljX2NtZHFfZ2V0ZnJlZShzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcik7CitzdGF0aWMgaW50ICAgc2xpY19yY3ZxdWV1ZV9pbml0KHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKTsKK3N0YXRpYyBpbnQgICBzbGljX3JjdnF1ZXVlX3Jlc2V0KHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKTsKK3N0YXRpYyBpbnQgICBzbGljX3JjdnF1ZXVlX2ZpbGwoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpOworc3RhdGljIHUzMiBzbGljX3JjdnF1ZXVlX3JlaW5zZXJ0KHN0cnVjdCBhZGFwdGVyICphZGFwdGVyLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKK3N0YXRpYyB2b2lkICBzbGljX3JjdnF1ZXVlX2ZyZWUoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpOworc3RhdGljIHZvaWQgc2xpY19yY3ZfaGFuZGxlX2Vycm9yKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyLAorCQkJCQlzdHJ1Y3Qgc2xpY19yY3ZidWYgKnJjdmJ1Zik7CitzdGF0aWMgdm9pZCBzbGljX2FkYXB0ZXJfc2V0X2h3YWRkcihzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcik7CitzdGF0aWMgaW50IHNsaWNfY2FyZF9pbml0KHN0cnVjdCBzbGljY2FyZCAqY2FyZCwgc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpOworc3RhdGljIHZvaWQgc2xpY19pbnRhZ2dfc2V0KHN0cnVjdCBhZGFwdGVyICphZGFwdGVyLCB1MzIgdmFsdWUpOworc3RhdGljIGludCAgc2xpY19jYXJkX2Rvd25sb2FkKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKTsKK3N0YXRpYyB1MzIgc2xpY19jYXJkX2xvY2F0ZShzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcik7CisKK3N0YXRpYyB2b2lkIHNsaWNfaWZfc3RvcF9xdWV1ZShzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcik7CitzdGF0aWMgdm9pZCBzbGljX2lmX3N0YXJ0X3F1ZXVlKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKTsKK3N0YXRpYyBpbnQgIHNsaWNfaWZfaW5pdChzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcik7CitzdGF0aWMgaW50ICBzbGljX2FkYXB0ZXJfYWxsb2NyZXNvdXJjZXMoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpOworc3RhdGljIHZvaWQgc2xpY19hZGFwdGVyX2ZyZWVyZXNvdXJjZXMoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpOworc3RhdGljIHZvaWQgc2xpY19saW5rX2NvbmZpZyhzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciwgdTMyIGxpbmtzcGVlZCwKKwkJCXUzMiBsaW5rZHVwbGV4KTsKK3N0YXRpYyB2b2lkIHNsaWNfdW5tYXBfbW1pb19zcGFjZShzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcik7CitzdGF0aWMgdm9pZCBzbGljX2NhcmRfY2xlYW51cChzdHJ1Y3Qgc2xpY2NhcmQgKmNhcmQpOworc3RhdGljIHZvaWQgc2xpY19pbml0X2NsZWFudXAoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpOworc3RhdGljIHZvaWQgc2xpY19zb2Z0X3Jlc2V0KHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKTsKK3N0YXRpYyBib29sIHNsaWNfbWFjX2ZpbHRlcihzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciwKKwkJCXN0cnVjdCBldGhlcl9oZWFkZXIgKmV0aGVyX2ZyYW1lKTsKK3N0YXRpYyB2b2lkIHNsaWNfbWFjX2FkZHJlc3NfY29uZmlnKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKTsKK3N0YXRpYyB2b2lkIHNsaWNfbWFjX2NvbmZpZyhzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcik7CitzdGF0aWMgdm9pZCBzbGljX21jYXN0X3NldF9tYXNrKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKTsKK3N0YXRpYyBpbnQgc2xpY19tY2FzdF9hZGRfbGlzdChzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciwgY2hhciAqYWRkcmVzcyk7CitzdGF0aWMgdW5zaWduZWQgY2hhciBzbGljX21jYXN0X2dldF9tYWNfaGFzaChjaGFyICptYWNhZGRyKTsKK3N0YXRpYyB2b2lkICBzbGljX21jYXN0X3NldF9iaXQoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIsIGNoYXIgKmFkZHJlc3MpOworc3RhdGljIHZvaWQgc2xpY19jb25maWdfc2V0KHN0cnVjdCBhZGFwdGVyICphZGFwdGVyLCBib29sIGxpbmtjaGFuZ2UpOworc3RhdGljIHZvaWQgc2xpY19jb25maWdfY2xlYXIoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpOworc3RhdGljIHZvaWQgc2xpY19jb25maWdfZ2V0KHN0cnVjdCBhZGFwdGVyICphZGFwdGVyLCB1MzIgY29uZmlnLAorCQkJdTMyIGNvbmZpZ2gpOworc3RhdGljIHZvaWQgc2xpY190aW1lcl9sb2FkX2NoZWNrKHVsb25nIGNvbnRleHQpOworc3RhdGljIHZvaWQgc2xpY190aW1lcl9waW5nKHVsb25nIGRldik7CitzdGF0aWMgdm9pZCBzbGljX2Fzc2VydF9mYWlsKHZvaWQpOworc3RhdGljIHVzaG9ydCBzbGljX2VlcHJvbV9ja3N1bShjaGFyICptLCBpbnQgbGVuKTsKKy8qIHVwciAqLworc3RhdGljIHZvaWQgc2xpY191cHJfc3RhcnQoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpOworc3RhdGljIHZvaWQgc2xpY19saW5rX3Vwcl9jb21wbGV0ZShzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciwgdTMyIElzcik7CitzdGF0aWMgaW50ICBzbGljX3Vwcl9yZXF1ZXN0KHN0cnVjdCBhZGFwdGVyICAgICphZGFwdGVyLAorCQkJdTMyICAgICAgICAgICAgdXByX3JlcXVlc3QsCisJCQl1MzIgICAgICAgICAgICB1cHJfZGF0YSwKKwkJCXUzMiAgICAgICAgICAgIHVwcl9kYXRhX2gsCisJCQl1MzIgICAgICAgICAgICB1cHJfYnVmZmVyLAorCQkJdTMyICAgICAgICAgICAgdXByX2J1ZmZlcl9oKTsKK3N0YXRpYyBpbnQgIHNsaWNfdXByX3F1ZXVlX3JlcXVlc3Qoc3RydWN0IGFkYXB0ZXIgICAgICAqYWRhcHRlciwKKwkJCQl1MzIgICAgICAgICAgICB1cHJfcmVxdWVzdCwKKwkJCQl1MzIgICAgICAgICAgICB1cHJfZGF0YSwKKwkJCQl1MzIgICAgICAgICAgICB1cHJfZGF0YV9oLAorCQkJCXUzMiAgICAgICAgICAgIHVwcl9idWZmZXIsCisJCQkJdTMyICAgICAgICAgICAgdXByX2J1ZmZlcl9oKTsKK3N0YXRpYyB2b2lkIHNsaWNfbWNhc3Rfc2V0X2xpc3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CitzdGF0aWMgdm9pZCBzbGljX21jYXN0X2luaXRfY3JjMzIodm9pZCk7CisKKyNpZiBTTElDX0RVTVBfRU5BQkxFRAorc3RhdGljIGludCAgIHNsaWNfZHVtcF90aHJlYWQodm9pZCAqY29udGV4dCk7CitzdGF0aWMgdWludCAgc2xpY19pbml0X2R1bXBfdGhyZWFkKHN0cnVjdCBzbGljY2FyZCAqY2FyZCk7CitzdGF0aWMgdW5zaWduZWQgY2hhciBzbGljX2dldF9kdW1wX2luZGV4KGNoYXIgKnBhdGgpOworc3RhdGljIHUzMiBzbGljX2R1bXBfY2FyZChzdHJ1Y3Qgc2xpY2NhcmQgKmNhcmQsIGJvb2wgcmVzdW1lKTsKK3N0YXRpYyB1MzIgc2xpY19kdW1wX2hhbHQoc3RydWN0IHNsaWNjYXJkICpjYXJkLCB1bnNpZ25lZCBjaGFyIHByb2MpOworc3RhdGljIHUzMiBzbGljX2R1bXBfcmVnKHN0cnVjdCBzbGljY2FyZCAqY2FyZCwgdW5zaWduZWQgY2hhciBwcm9jKTsKK3N0YXRpYyB1MzIgc2xpY19kdW1wX2RhdGEoc3RydWN0IHNsaWNjYXJkICpjYXJkLCB1MzIgYWRkciwKKwkJCXVzaG9ydCBjb3VudCwgdW5zaWduZWQgY2hhciBkZXNjKTsKK3N0YXRpYyB1MzIgc2xpY19kdW1wX3F1ZXVlKHN0cnVjdCBzbGljY2FyZCAqY2FyZCwgdTMyIGJ1Zl9waHlzLAorCQkJdTMyIGJ1Zl9waHlzaCwgdTMyIHF1ZXVlKTsKK3N0YXRpYyB1MzIgc2xpY19kdW1wX2xvYWRfcXVldWUoc3RydWN0IHNsaWNjYXJkICpjYXJkLCB1MzIgZGF0YSwKKwkJCQl1MzIgcXVldWUpOworc3RhdGljIHUzMiBzbGljX2R1bXBfY2FtKHN0cnVjdCBzbGljY2FyZCAqY2FyZCwgdTMyIGFkZHIsCisJCQl1MzIgY291bnQsIHVuc2lnbmVkIGNoYXIgZGVzYyk7CisKK3N0YXRpYyB1MzIgc2xpY19kdW1wX3Jlc3VtZShzdHJ1Y3Qgc2xpY2NhcmQgKmNhcmQsIHVuc2lnbmVkIGNoYXIgcHJvYyk7CitzdGF0aWMgdTMyIHNsaWNfZHVtcF9zZW5kX2NtZChzdHJ1Y3Qgc2xpY2NhcmQgKmNhcmQsIHUzMiBjbWRfcGh5cywKKwkJCQl1MzIgY21kX3BoeXNoLCB1MzIgYnVmX3BoeXMsCisJCQkJdTMyIGJ1Zl9waHlzaCk7CisKKyNkZWZpbmUgY3JlYXRlX2ZpbGUoeCkgICAgICAgICBTVEFUVVNfU1VDQ0VTUworI2RlZmluZSB3cml0ZV9maWxlKHcsIHgsIHksIHopIFNUQVRVU19TVUNDRVNTCisjZGVmaW5lIGNsb3NlX2ZpbGUoeCkgICAgICAgICAgU1RBVFVTX1NVQ0NFU1MKKyNkZWZpbmUgcmVhZF9maWxlKHcsIHgsIHksIHopICBTVEFUVVNfU1VDQ0VTUworI2RlZmluZSBvcGVuX2ZpbGUoeCkgICAgICAgICAgIFNUQVRVU19TVUNDRVNTCisKKy8qIFBBR0VfU0laRSAqIDE2ICovCisjZGVmaW5lIERVTVBfUEFHRV9TSVpFICAgICAgICAgMHhGRkZGCisjZGVmaW5lIERVTVBfUEFHRV9TSVpFX0hBTEYgICAgMHg3RkZFCisjZW5kaWYKKworI2VuZGlmIC8qIF9TTElDX0lOQ0xVREVfSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9zbGljb3NzL3NsaWNvc3MuYyBiL2RyaXZlcnMvc3RhZ2luZy9zbGljb3NzL3NsaWNvc3MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNjFhYzRiCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3NsaWNvc3Mvc2xpY29zcy5jCkBAIC0wLDAgKzEsNTkzNiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogQ29weXJpZ2h0ICAyMDAwLTIwMDYgQWxhY3JpdGVjaCwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZAorICogICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIEFsdGVybmF0aXZlbHksIHRoaXMgc29mdHdhcmUgbWF5IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICgiR1BMIikgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorICogU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFMQUNSSVRFQ0gsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBTEFDUklURUNILCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKKyAqIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICoKKyAqIFRoZSB2aWV3cyBhbmQgY29uY2x1c2lvbnMgY29udGFpbmVkIGluIHRoZSBzb2Z0d2FyZSBhbmQgZG9jdW1lbnRhdGlvbgorICogYXJlIHRob3NlIG9mIHRoZSBhdXRob3JzIGFuZCBzaG91bGQgbm90IGJlIGludGVycHJldGVkIGFzIHJlcHJlc2VudGluZworICogb2ZmaWNpYWwgcG9saWNpZXMsIGVpdGhlciBleHByZXNzZWQgb3IgaW1wbGllZCwgb2YgQWxhY3JpdGVjaCwgSW5jLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyAqIEZJTEVOQU1FOiBzbGljb3NzLmMKKyAqCisgKiBUaGUgU0xJQ09TUyBkcml2ZXIgZm9yIEFsYWNyaXRlY2gncyBJUy1OSUMgcHJvZHVjdHMuCisgKgorICogVGhpcyBkcml2ZXIgaXMgc3VwcG9zZWQgdG8gc3VwcG9ydDoKKyAqCisgKiAgICAgIE1vamF2ZSBjYXJkcyAoc2luZ2xlIHBvcnQgUENJIEdpZ2FiaXQpIGJvdGggY29wcGVyIGFuZCBmaWJlcgorICogICAgICBPYXNpcyBjYXJkcyAoc2luZ2xlIGFuZCBkdWFsIHBvcnQgUENJLXggR2lnYWJpdCkgY29wcGVyIGFuZCBmaWJlcgorICogICAgICBLYWxhaGFyaSBjYXJkcyAoZHVhbCBhbmQgcXVhZCBwb3J0IFBDSS1lIEdpZ2FiaXQpIGNvcHBlciBhbmQgZmliZXIKKyAqCisgKiBUaGUgZHJpdmVyIHdhcyBhY3V0YWxseSB0ZXN0ZWQgb24gT2FzaXMgYW5kIEthbGFoYXJpIGNhcmRzLgorICoKKyAqCisgKiBOT1RFOiBUaGlzIGlzIHRoZSBzdGFuZGFyZCwgbm9uLWFjY2VsZXJhdGVkIHZlcnNpb24gb2YgQWxhY3JpdGVjaCdzCisgKiAgICAgICBJUy1OSUMgZHJpdmVyLgorICovCisKKyNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CisKKyNkZWZpbmUgU0xJQ19EVU1QX0VOQUJMRUQgICAgICAgICAgICAgICAwCisjZGVmaW5lIEtMVURHRV9GT1JfNEdCX0JPVU5EQVJZICAgICAgICAgMQorI2RlZmluZSBERUJVR19NSUNST0NPREUgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgU0xJQ19QUk9EVUNUSU9OX0JVSUxECSAgICAgICAgMQorI2RlZmluZSBTTElDX0ZBSUxVUkVfUkVTRVQJICAgICAgICAgICAgMQorI2RlZmluZSBEQkcgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgU0xJQ19BU1NFUlRfRU5BQkxFRAkJICAgICAgICAxCisjZGVmaW5lIFNMSUNfR0VUX1NUQVRTX0VOQUJMRUQJCQkxCisjZGVmaW5lIFNMSUNfR0VUX1NUQVRTX1RJTUVSX0VOQUJMRUQJMAorI2RlZmluZSBTTElDX1BJTkdfVElNRVJfRU5BQkxFRAkJICAgIDEKKyNkZWZpbmUgU0xJQ19QT1dFUl9NQU5BR0VNRU5UX0VOQUJMRUQJMAorI2RlZmluZSBTTElDX0lOVEVSUlVQVF9QUk9DRVNTX0xJTUlUCTEKKyNkZWZpbmUgTElOVVhfRlJFRVNfQURBUFRFUl9SRVNPVVJDRVMJMQorI2RlZmluZSBTTElDX09GRkxPQURfSVBfQ0hFQ0tTVU0JCTEKKyNkZWZpbmUgU1RBVFNfVElNRVJfSU5URVJWQUwJCQkyCisjZGVmaW5lIFBJTkdfVElNRVJfSU5URVJWQUwJCQkgICAgMQorCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWJ1Z2ZzLmg+CisjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KKyNpbmNsdWRlIDxsaW51eC9rdGhyZWFkLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CisjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9taWkuaD4KKyNpbmNsdWRlIDxsaW51eC9pZl92bGFuLmg+CisjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8YXNtL3VuYWxpZ25lZC5oPgorCisjaW5jbHVkZSA8bGludXgvZXRodG9vbC5oPgorI2RlZmluZSBTTElDX0VUSFRPT0xfU1VQUE9SVCAgICAgMQorCisjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgorI2luY2x1ZGUgInNsaWNpbmMuaCIKKyNpbmNsdWRlICJnYmRvd25sb2FkLmgiCisjaW5jbHVkZSAiZ2JyY3Z1Y29kZS5oIgorI2luY2x1ZGUgIm9hc2lzcmN2dWNvZGUuaCIKKworI2lmZGVmIERFQlVHX01JQ1JPQ09ERQorI2luY2x1ZGUgIm9hc2lzZGJnZG93bmxvYWQuaCIKKyNlbHNlCisjaW5jbHVkZSAib2FzaXNkb3dubG9hZC5oIgorI2VuZGlmCisKKyNpZiBTTElDX0RVTVBfRU5BQkxFRAorI2luY2x1ZGUgInNsaWNkdW1wLmgiCisjZW5kaWYKKworI2RlZmluZSBTTElDX1BPV0VSX01BTkFHRU1FTlQgIDAKKworc3RhdGljIHVpbnQgc2xpY19maXJzdF9pbml0ID0gMTsKK3N0YXRpYyBjaGFyICpzbGljX2Jhbm5lciA9ICJBbGFjcml0ZWNoIFNMSUMgVGVjaG5vbG9neSh0bSkgU2VydmVyICJcCisJCSJhbmQgU3RvcmFnZSBBY2NlbGVyYXRvciAoTm9uLUFjY2VsZXJhdGVkKVxuIjsKKworc3RhdGljIGNoYXIgKnNsaWNfcHJvY192ZXJzaW9uID0gIjIuMC4zNTEgIDIwMDYvMDcvMTQgMTI6MjY6MDAiOworc3RhdGljIGNoYXIgKnNsaWNfcHJvZHVjdF9uYW1lID0gIlNMSUMgVGVjaG5vbG9neSh0bSkgU2VydmVyICJcCisJCSJhbmQgU3RvcmFnZSBBY2NlbGVyYXRvciAoTm9uLUFjY2VsZXJhdGVkKSI7CitzdGF0aWMgY2hhciAqc2xpY192ZW5kb3IgPSAiQWxhY3JpdGVjaCwgSW5jLiI7CisKK3N0YXRpYyBpbnQgc2xpY19kZWJ1ZyA9IDE7CitzdGF0aWMgaW50IGRlYnVnID0gLTE7CitzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2UgKmhlYWRfbmV0ZGV2aWNlOworCitzdGF0aWMgc3RydWN0IGJhc2VfZHJpdmVyIHNsaWNfZ2xvYmFsID0geyB7fSwgMCwgMCwgMCwgMSwgTlVMTCwgTlVMTCB9Oworc3RhdGljIGludCBpbnRhZ2dfZGVsYXkgPSAxMDA7CitzdGF0aWMgdTMyIGR5bmFtaWNfaW50YWdnOworc3RhdGljIGludCBlcnJvcm1zZzsKK3N0YXRpYyBpbnQgZ29vZG1zZzsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgcmN2X2NvdW50Oworc3RhdGljIHN0cnVjdCBkZW50cnkgKnNsaWNfZGVidWdmczsKKworI2RlZmluZSBEUlZfTkFNRSAgICAgICAgICAic2xpY29zcyIKKyNkZWZpbmUgRFJWX1ZFUlNJT04gICAgICAgIjIuMC4xIgorI2RlZmluZSBEUlZfQVVUSE9SICAgICAgICAiQWxhY3JpdGVjaCwgSW5jLiBFbmdpbmVlcmluZyIKKyNkZWZpbmUgRFJWX0RFU0NSSVBUSU9OICAgIkFsYWNyaXRlY2ggU0xJQyBUZWNob25vbG9neSh0bSkgIlwKKwkJIk5vbi1BY2NlbGVyYXRlZCBEcml2ZXIiCisjZGVmaW5lIERSVl9DT1BZUklHSFQgICAgICJDb3B5cmlnaHQgIDIwMDAtMjAwNiBBbGFjcml0ZWNoLCBJbmMuICJcCisJCSJBbGwgcmlnaHRzIHJlc2VydmVkLiIKKyNkZWZpbmUgUEZYCQkgICBEUlZfTkFNRSAiICIKKworTU9EVUxFX0FVVEhPUihEUlZfQVVUSE9SKTsKK01PRFVMRV9ERVNDUklQVElPTihEUlZfREVTQ1JJUFRJT04pOworTU9EVUxFX0xJQ0VOU0UoIkR1YWwgQlNEL0dQTCIpOworCittb2R1bGVfcGFyYW0oZHluYW1pY19pbnRhZ2csIGludCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKGR5bmFtaWNfaW50YWdnLCAiRHluYW1pYyBJbnRlcnJ1cHQgQWdncmVnYXRpb24gU2V0dGluZyIpOworbW9kdWxlX3BhcmFtKGludGFnZ19kZWxheSwgaW50LCAwKTsKK01PRFVMRV9QQVJNX0RFU0MoaW50YWdnX2RlbGF5LCAidVNlYyBJbnRlcnJ1cHQgQWdncmVnYXRpb24gRGVsYXkiKTsKKworc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHNsaWNfcGNpX3RibFtdIF9fZGV2aW5pdGRhdGEgPSB7CisJe1BDSV9WRU5ET1JfSURfQUxBQ1JJVEVDSCwKKwkgU0xJQ18xR0JfREVWSUNFX0lELAorCSBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELH0sCisJe1BDSV9WRU5ET1JfSURfQUxBQ1JJVEVDSCwKKwkgU0xJQ18yR0JfREVWSUNFX0lELAorCSBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELH0sCisJezAsfQorfTsKKworTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIHNsaWNfcGNpX3RibCk7CisKKyNkZWZpbmUgU0xJQ19HRVRfU0xJQ19IQU5ETEUoX2FkYXB0ZXIsIF9wc2xpY19oYW5kbGUpICAgICAgICAgICAgICAgICAgIFwKK3sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBzcGluX2xvY2tfaXJxc2F2ZSgmX2FkYXB0ZXItPmhhbmRsZV9sb2NrLmxvY2ssICAgICAgICAgICAgICAgICAgICAgIFwKKwkJCV9hZGFwdGVyLT5oYW5kbGVfbG9jay5mbGFncyk7ICAgICAgICAgICAgICAgICAgIFwKKyAgICBfcHNsaWNfaGFuZGxlICA9ICBfYWRhcHRlci0+cGZyZWVfc2xpY19oYW5kbGVzOyAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBpZiAoX3BzbGljX2hhbmRsZSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwlBU1NFUlQoX3BzbGljX2hhbmRsZS0+dHlwZSA9PSBTTElDX0hBTkRMRV9GUkVFKTsgICAgICAgICAgICAgICAgXAorCV9hZGFwdGVyLT5wZnJlZV9zbGljX2hhbmRsZXMgPSBfcHNsaWNfaGFuZGxlLT5uZXh0OyAgICAgICAgICAgICBcCisgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmX2FkYXB0ZXItPmhhbmRsZV9sb2NrLmxvY2ssICAgICAgICAgICAgICAgICBcCisJCQlfYWRhcHRlci0+aGFuZGxlX2xvY2suZmxhZ3MpOyAgICAgICAgICAgICAgICAgICBcCit9CisKKyNkZWZpbmUgU0xJQ19GUkVFX1NMSUNfSEFORExFKF9hZGFwdGVyLCBfcHNsaWNfaGFuZGxlKSAgICAgICAgICAgICAgICAgIFwKK3sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBfcHNsaWNfaGFuZGxlLT50eXBlID0gU0xJQ19IQU5ETEVfRlJFRTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBzcGluX2xvY2tfaXJxc2F2ZSgmX2FkYXB0ZXItPmhhbmRsZV9sb2NrLmxvY2ssICAgICAgICAgICAgICAgICAgICAgIFwKKwkJCV9hZGFwdGVyLT5oYW5kbGVfbG9jay5mbGFncyk7ICAgICAgICAgICAgICAgICAgIFwKKyAgICBfcHNsaWNfaGFuZGxlLT5uZXh0ID0gX2FkYXB0ZXItPnBmcmVlX3NsaWNfaGFuZGxlczsgICAgICAgICAgICAgICAgIFwKKyAgICBfYWRhcHRlci0+cGZyZWVfc2xpY19oYW5kbGVzID0gX3BzbGljX2hhbmRsZTsgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBzcGluX3VubG9ja19pcnFyZXN0b3JlKCZfYWRhcHRlci0+aGFuZGxlX2xvY2subG9jaywgICAgICAgICAgICAgICAgIFwKKwkJCV9hZGFwdGVyLT5oYW5kbGVfbG9jay5mbGFncyk7ICAgICAgICAgICAgICAgICAgIFwKK30KKworc3RhdGljIHZvaWQgc2xpY19kZWJ1Z19pbml0KHZvaWQpOworc3RhdGljIHZvaWQgc2xpY19kZWJ1Z19jbGVhbnVwKHZvaWQpOworc3RhdGljIHZvaWQgc2xpY19kZWJ1Z19hZGFwdGVyX2NyZWF0ZShzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcik7CitzdGF0aWMgdm9pZCBzbGljX2RlYnVnX2FkYXB0ZXJfZGVzdHJveShzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcik7CitzdGF0aWMgdm9pZCBzbGljX2RlYnVnX2NhcmRfY3JlYXRlKHN0cnVjdCBzbGljY2FyZCAqY2FyZCk7CitzdGF0aWMgdm9pZCBzbGljX2RlYnVnX2NhcmRfZGVzdHJveShzdHJ1Y3Qgc2xpY2NhcmQgKmNhcmQpOworCitzdGF0aWMgaW5saW5lIHZvaWQgc2xpY19yZWczMl93cml0ZSh2b2lkIF9faW9tZW0gKnJlZywgdTMyIHZhbHVlLCB1aW50IGZsdXNoKQoreworCXdyaXRlbCh2YWx1ZSwgcmVnKTsKKwlpZiAoZmx1c2gpCisJCW1iKCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzbGljX3JlZzY0X3dyaXRlKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyLAorCQkJICAgICAgIHZvaWQgX19pb21lbSAqcmVnLAorCQkJICAgICAgIHUzMiB2YWx1ZSwKKwkJCSAgICAgICB2b2lkIF9faW9tZW0gKnJlZ2gsIHUzMiBwYWRkcmgsIHVpbnQgZmx1c2gpCit7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmFkYXB0ZXItPmJpdDY0cmVnbG9jay5sb2NrLAorCQkJCWFkYXB0ZXItPmJpdDY0cmVnbG9jay5mbGFncyk7CisJaWYgKHBhZGRyaCAhPSBhZGFwdGVyLT5jdXJhZGRydXBwZXIpIHsKKwkJYWRhcHRlci0+Y3VyYWRkcnVwcGVyID0gcGFkZHJoOworCQl3cml0ZWwocGFkZHJoLCByZWdoKTsKKwl9CisJd3JpdGVsKHZhbHVlLCByZWcpOworCWlmIChmbHVzaCkKKwkJbWIoKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhZGFwdGVyLT5iaXQ2NHJlZ2xvY2subG9jaywKKwkJCQlhZGFwdGVyLT5iaXQ2NHJlZ2xvY2suZmxhZ3MpOworfQorCitzdGF0aWMgdm9pZCBzbGljX2luaXRfZHJpdmVyKHZvaWQpCit7CisJaWYgKHNsaWNfZmlyc3RfaW5pdCkgeworCQlEQkdfTVNHKCJzbGljb3NzOiAlcyBzbGljX2ZpcnN0X2luaXQgc2V0IGppZmZpZXNbJWx4XVxuIiwKKwkJCV9fZnVuY19fLCBqaWZmaWVzKTsKKwkJc2xpY19maXJzdF9pbml0ID0gMDsKKwkJc3Bpbl9sb2NrX2luaXQoJnNsaWNfZ2xvYmFsLmRyaXZlcl9sb2NrLmxvY2spOworCQlzbGljX2RlYnVnX2luaXQoKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHNsaWNfZGJnX21hY2FkZHJzKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKQoreworCURCR19NU0coIiAgKCVzKSBjdXJyICUyLjJYOiUyLjJYOiUyLjJYOiUyLjJYOiUyLjJYOiUyLjJYXG4iLAorCQlhZGFwdGVyLT5uZXRkZXYtPm5hbWUsIGFkYXB0ZXItPmN1cnJtYWNhZGRyWzBdLAorCQlhZGFwdGVyLT5jdXJybWFjYWRkclsxXSwgYWRhcHRlci0+Y3Vycm1hY2FkZHJbMl0sCisJCWFkYXB0ZXItPmN1cnJtYWNhZGRyWzNdLCBhZGFwdGVyLT5jdXJybWFjYWRkcls0XSwKKwkJYWRhcHRlci0+Y3Vycm1hY2FkZHJbNV0pOworCURCR19NU0coIiAgKCVzKSBtYWMgICUyLjJYOiUyLjJYOiUyLjJYOiUyLjJYOiUyLjJYOiUyLjJYXG4iLAorCQlhZGFwdGVyLT5uZXRkZXYtPm5hbWUsIGFkYXB0ZXItPm1hY2FkZHJbMF0sCisJCWFkYXB0ZXItPm1hY2FkZHJbMV0sIGFkYXB0ZXItPm1hY2FkZHJbMl0sCisJCWFkYXB0ZXItPm1hY2FkZHJbM10sIGFkYXB0ZXItPm1hY2FkZHJbNF0sIGFkYXB0ZXItPm1hY2FkZHJbNV0pOworCXJldHVybjsKK30KKworI2lmZGVmIERFQlVHX1JFR0lTVEVSX1RSQUNFCitzdGF0aWMgdm9pZCBzbGljX2RiZ19yZWdpc3Rlcl90cmFjZShzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciwKKwkJCQkJc3RydWN0IHNsaWNjYXJkICpjYXJkKQoreworCXVpbnQgaTsKKworCURCR19FUlJPUigiRHVtcCBSZWdpc3RlciBXcml0ZSBUcmFjZTogY3Vycl9peCA9PSAlZFxuIiwgY2FyZC0+ZGVidWdfaXgpOworCWZvciAoaSA9IDA7IGkgPCAzMjsgaSsrKSB7CisJCURCR19FUlJPUigiJTJkICVkICU0eCAleCAleFxuIiwKKwkJCSAgaSwgY2FyZC0+cmVnX3R5cGVbaV0sIGNhcmQtPnJlZ19vZmZzZXRbaV0sCisJCQkgIGNhcmQtPnJlZ192YWx1ZVtpXSwgY2FyZC0+cmVnX3ZhbHVlaFtpXSk7CisJfQorfQorfQorI2VuZGlmCisKK3N0YXRpYyB2b2lkIHNsaWNfaW5pdF9hZGFwdGVyKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCisJCQkgICAgICBzdHJ1Y3QgcGNpX2RldiAqcGNpZGV2LAorCQkJICAgICAgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKnBjaV90YmxfZW50cnksCisJCQkgICAgICB2b2lkIF9faW9tZW0gKm1lbWFkZHIsIGludCBjaGlwX2lkeCkKK3sKKwl1c2hvcnQgaW5kZXg7CisJc3RydWN0IHNsaWNfaGFuZGxlICpwc2xpY19oYW5kbGU7CisJc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIgPSAoc3RydWN0IGFkYXB0ZXIgKiluZXRkZXZfcHJpdihuZXRkZXYpOworLyoKKyAgICBEQkdfTVNHKCJzbGljb3NzOiAlcyAoJXMpXG4gICAgbmV0ZGV2IFslcF1cbiAgICBhZGFwdGVyWyVwXVxuICAgICIKKwkgICAgInBjaWRldiBbJXBdXG4iLCBfX2Z1bmNfXywgbmV0ZGV2LT5uYW1lLCBuZXRkZXYsIGFkYXB0ZXIsIHBjaWRldik7Ki8KKy8qCWFkYXB0ZXItPnBjaWRldiA9IHBjaWRldjsqLworCWFkYXB0ZXItPnZlbmRpZCA9IHBjaV90YmxfZW50cnktPnZlbmRvcjsKKwlhZGFwdGVyLT5kZXZpZCA9IHBjaV90YmxfZW50cnktPmRldmljZTsKKwlhZGFwdGVyLT5zdWJzeXNpZCA9IHBjaV90YmxfZW50cnktPnN1YmRldmljZTsKKwlhZGFwdGVyLT5idXNudW1iZXIgPSBwY2lkZXYtPmJ1cy0+bnVtYmVyOworCWFkYXB0ZXItPnNsb3RudW1iZXIgPSAoKHBjaWRldi0+ZGV2Zm4gPj4gMykgJiAweDFGKTsKKwlhZGFwdGVyLT5mdW5jdGlvbm51bWJlciA9IChwY2lkZXYtPmRldmZuICYgMHg3KTsKKwlhZGFwdGVyLT5tZW1vcnlsZW5ndGggPSBwY2lfcmVzb3VyY2VfbGVuKHBjaWRldiwgMCk7CisJYWRhcHRlci0+c2xpY19yZWdzID0gKF9faW9tZW0gc3RydWN0IHNsaWNfcmVncyAqKW1lbWFkZHI7CisJYWRhcHRlci0+aXJxID0gcGNpZGV2LT5pcnE7CisvKglhZGFwdGVyLT5uZXRkZXYgPSBuZXRkZXY7Ki8KKwlhZGFwdGVyLT5uZXh0X25ldGRldmljZSA9IGhlYWRfbmV0ZGV2aWNlOworCWhlYWRfbmV0ZGV2aWNlID0gbmV0ZGV2OworCWFkYXB0ZXItPmNoaXBpZCA9IGNoaXBfaWR4OworCWFkYXB0ZXItPnBvcnQgPSAwOwkvKmFkYXB0ZXItPmZ1bmN0aW9ubnVtYmVyOyovCisJYWRhcHRlci0+Y2FyZGluZGV4ID0gYWRhcHRlci0+cG9ydDsKKwlhZGFwdGVyLT5tZW1vcnliYXNlID0gbWVtYWRkcjsKKwlzcGluX2xvY2tfaW5pdCgmYWRhcHRlci0+dXByX2xvY2subG9jayk7CisJc3Bpbl9sb2NrX2luaXQoJmFkYXB0ZXItPmJpdDY0cmVnbG9jay5sb2NrKTsKKwlzcGluX2xvY2tfaW5pdCgmYWRhcHRlci0+YWRhcHRlcl9sb2NrLmxvY2spOworCXNwaW5fbG9ja19pbml0KCZhZGFwdGVyLT5yZXNldF9sb2NrLmxvY2spOworCXNwaW5fbG9ja19pbml0KCZhZGFwdGVyLT5oYW5kbGVfbG9jay5sb2NrKTsKKworCWFkYXB0ZXItPmNhcmRfc2l6ZSA9IDE7CisJLyoKKwkgIEluaXRpYWxpemUgc2xpY19oYW5kbGUgYXJyYXkKKwkqLworCUFTU0VSVChTTElDX0NNRFFfTUFYQ01EUyA8PSAweEZGRkYpOworCS8qCisJIFN0YXJ0IHdpdGggMS4gIDAgaXMgYW4gaW52YWxpZCBob3N0IGhhbmRsZS4KKwkqLworCWZvciAoaW5kZXggPSAxLCBwc2xpY19oYW5kbGUgPSAmYWRhcHRlci0+c2xpY19oYW5kbGVzWzFdOworCSAgICAgaW5kZXggPCBTTElDX0NNRFFfTUFYQ01EUzsgaW5kZXgrKywgcHNsaWNfaGFuZGxlKyspIHsKKworCQlwc2xpY19oYW5kbGUtPnRva2VuLmhhbmRsZV9pbmRleCA9IGluZGV4OworCQlwc2xpY19oYW5kbGUtPnR5cGUgPSBTTElDX0hBTkRMRV9GUkVFOworCQlwc2xpY19oYW5kbGUtPm5leHQgPSBhZGFwdGVyLT5wZnJlZV9zbGljX2hhbmRsZXM7CisJCWFkYXB0ZXItPnBmcmVlX3NsaWNfaGFuZGxlcyA9IHBzbGljX2hhbmRsZTsKKwl9CisvKgorICAgIERCR19NU0coIi4uLi4uLi4uLlxuaXhbJWRdIHBoYW5kbGVbJXBdIHBmcmVlWyVwXSBuZXh0WyVwXVxuIiwKKwlpbmRleCwgcHNsaWNfaGFuZGxlLCBhZGFwdGVyLT5wZnJlZV9zbGljX2hhbmRsZXMsIHBzbGljX2hhbmRsZS0+bmV4dCk7Ki8KKwlhZGFwdGVyLT5wc2htZW0gPSAoc3RydWN0IHNsaWNfc2htZW0gKikKKwkJCQkJcGNpX2FsbG9jX2NvbnNpc3RlbnQoYWRhcHRlci0+cGNpZGV2LAorCQkJCQlzaXplb2Yoc3RydWN0IHNsaWNfc2htZW0gKiksCisJCQkJCSZhZGFwdGVyLT4KKwkJCQkJcGh5c19zaG1lbSk7CisvKgorICAgICAgREJHX01TRygic2xpY29zczogJXMgKCVzKVxuICAgcHNobWVtICAgIFslcF1cbiAgIHBoeXNfc2htZW1bJXBdXG4iXAorCQkic2xpY19yZWdzIFslcF1cbiIsIF9fZnVuY19fLCBuZXRkZXYtPm5hbWUsIGFkYXB0ZXItPnBzaG1lbSwKKwkJKHZvaWQgKilhZGFwdGVyLT5waHlzX3NobWVtLCBhZGFwdGVyLT5zbGljX3JlZ3MpOworKi8KKwlBU1NFUlQoYWRhcHRlci0+cHNobWVtKTsKKworCW1lbXNldChhZGFwdGVyLT5wc2htZW0sIDAsIHNpemVvZihzdHJ1Y3Qgc2xpY19zaG1lbSkpOworCisJcmV0dXJuOworfQorCitzdGF0aWMgaW50IF9fZGV2aW5pdCBzbGljX2VudHJ5X3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwY2lkZXYsCisJCQkgICAgICAgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKnBjaV90YmxfZW50cnkpCit7CisJc3RhdGljIGludCBjYXJkc19mb3VuZDsKKwlzdGF0aWMgaW50IGRpZF92ZXJzaW9uOworCWludCBlcnI7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldjsKKwlzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcjsKKwl2b2lkIF9faW9tZW0gKm1lbW1hcHBlZF9pb2FkZHIgPSBOVUxMOworCXUzMiBzdGF0dXMgPSAwOworCXVsb25nIG1taW9fc3RhcnQgPSAwOworCXVsb25nIG1taW9fbGVuID0gMDsKKwlzdHJ1Y3Qgc2xpY2NhcmQgKmNhcmQgPSBOVUxMOworCisJREJHX01TRygic2xpY29zczogJXMgMi42IFZFUlNJT04gRU5URVIgamlmZmllc1slbHhdIGNwdSAlZFxuIiwKKwkJX19mdW5jX18sIGppZmZpZXMsIHNtcF9wcm9jZXNzb3JfaWQoKSk7CisKKwlzbGljX2dsb2JhbC5keW5hbWljX2ludGFnZyA9IGR5bmFtaWNfaW50YWdnOworCisJZXJyID0gcGNpX2VuYWJsZV9kZXZpY2UocGNpZGV2KTsKKworCURCR19NU0coIkNhbGwgcGNpX2VuYWJsZV9kZXZpY2UoJXApICBzdGF0dXNbJXhdXG4iLCBwY2lkZXYsIGVycik7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCWlmIChzbGljX2RlYnVnID4gMCAmJiBkaWRfdmVyc2lvbisrID09IDApIHsKKwkJcHJpbnRrKHNsaWNfYmFubmVyKTsKKwkJcHJpbnRrKHNsaWNfcHJvY192ZXJzaW9uKTsKKwl9CisKKwllcnIgPSBwY2lfc2V0X2RtYV9tYXNrKHBjaWRldiwgRE1BXzY0QklUX01BU0spOworCWlmICghZXJyKSB7CisJCURCR19NU0coInBjaV9zZXRfZG1hX21hc2soRE1BXzY0QklUX01BU0spIHN1Y2Nlc3NmdWxcbiIpOworCX0gZWxzZSB7CisJCWVyciA9IHBjaV9zZXRfZG1hX21hc2socGNpZGV2LCBETUFfMzJCSVRfTUFTSyk7CisJCWlmIChlcnIpIHsKKwkJCURCR19NU0cKKwkJCSAgICAoIk5vIHVzYWJsZSBETUEgY29uZmlndXJhdGlvbiwgYWJvcnRpbmcgIGVyclsleF1cbiIsCisJCQkgICAgIGVycik7CisJCQlyZXR1cm4gZXJyOworCQl9CisJCURCR19NU0coInBjaV9zZXRfZG1hX21hc2soRE1BXzMyQklUX01BU0spIHN1Y2Nlc3NmdWxcbiIpOworCX0KKworCURCR19NU0coIkNhbGwgcGNpX3JlcXVlc3RfcmVnaW9uc1xuIik7CisKKwllcnIgPSBwY2lfcmVxdWVzdF9yZWdpb25zKHBjaWRldiwgRFJWX05BTUUpOworCWlmIChlcnIpIHsKKwkJREJHX01TRygicGNpX3JlcXVlc3RfcmVnaW9ucyBGQUlMRUQgZXJyWyV4XVxuIiwgZXJyKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwlEQkdfTVNHKCJjYWxsIHBjaV9zZXRfbWFzdGVyXG4iKTsKKwlwY2lfc2V0X21hc3RlcihwY2lkZXYpOworCisJREJHX01TRygiY2FsbCBhbGxvY19ldGhlcmRldlxuIik7CisJbmV0ZGV2ID0gYWxsb2NfZXRoZXJkZXYoc2l6ZW9mKHN0cnVjdCBhZGFwdGVyKSk7CisJaWYgKCFuZXRkZXYpIHsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBlcnJfb3V0X2V4aXRfc2xpY19wcm9iZTsKKwl9CisJREJHX01TRygiYWxsb2NfZXRoZXJkZXYgZm9yIHNsaWMgbmV0ZGV2WyVwXVxuIiwgbmV0ZGV2KTsKKworCVNFVF9ORVRERVZfREVWKG5ldGRldiwgJnBjaWRldi0+ZGV2KTsKKworCXBjaV9zZXRfZHJ2ZGF0YShwY2lkZXYsIG5ldGRldik7CisJYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CisJYWRhcHRlci0+bmV0ZGV2ID0gbmV0ZGV2OworCWFkYXB0ZXItPnBjaWRldiA9IHBjaWRldjsKKworCW1taW9fc3RhcnQgPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGNpZGV2LCAwKTsKKwltbWlvX2xlbiA9IHBjaV9yZXNvdXJjZV9sZW4ocGNpZGV2LCAwKTsKKworCURCR19NU0coInNsaWNvc3M6IGNhbGwgaW9yZW1hcChtbWlvX3N0YXJ0WyVseF0sIG1taW9fbGVuWyVseF0pXG4iLAorCQltbWlvX3N0YXJ0LCBtbWlvX2xlbik7CisKKy8qICBtZW1tYXBwZWRfaW9hZGRyID0gICh1MzIpaW9yZW1hcF9ub2NhY2hlKG1taW9fc3RhcnQsIG1taW9fbGVuKTsqLworCW1lbW1hcHBlZF9pb2FkZHIgPSBpb3JlbWFwKG1taW9fc3RhcnQsIG1taW9fbGVuKTsKKwlEQkdfTVNHKCJzbGljb3NzOiAlcyBNRU1NQVBQRURfSU9BRERSIFslcF1cbiIsIF9fZnVuY19fLAorCQltZW1tYXBwZWRfaW9hZGRyKTsKKwlpZiAoIW1lbW1hcHBlZF9pb2FkZHIpIHsKKwkJREJHX0VSUk9SKCIlcyBjYW5ub3QgcmVtYXAgTU1JTyByZWdpb24gJWx4IEAgJWx4XG4iLAorCQkJICBfX2Z1bmNfXywgbW1pb19sZW4sIG1taW9fc3RhcnQpOworCQlnb3RvIGVycl9vdXRfZnJlZV9tbWlvX3JlZ2lvbjsKKwl9CisKKwlEQkdfTVNHCisJICAgICgic2xpY29zczogJXMgZm91bmQgQWxhY3JpdGVjaCBTTElDT1NTIFBDSSwgTU1JTyBhdCAlcCwgIlwKKwkgICAgInN0YXJ0WyVseF0gbGVuWyVseF0sIElSUSAlZC5cbiIsCisJICAgICBfX2Z1bmNfXywgbWVtbWFwcGVkX2lvYWRkciwgbW1pb19zdGFydCwgbW1pb19sZW4sIHBjaWRldi0+aXJxKTsKKworCXNsaWNfY29uZmlnX3BjaShwY2lkZXYpOworCisJc2xpY19pbml0X2RyaXZlcigpOworCisJc2xpY19pbml0X2FkYXB0ZXIobmV0ZGV2LAorCQkJICBwY2lkZXYsIHBjaV90YmxfZW50cnksIG1lbW1hcHBlZF9pb2FkZHIsIGNhcmRzX2ZvdW5kKTsKKworCXN0YXR1cyA9IHNsaWNfY2FyZF9sb2NhdGUoYWRhcHRlcik7CisJaWYgKHN0YXR1cykgeworCQlEQkdfRVJST1IoIiVzIGNhbm5vdCBsb2NhdGUgY2FyZFxuIiwgX19mdW5jX18pOworCQlnb3RvIGVycl9vdXRfZnJlZV9tbWlvX3JlZ2lvbjsKKwl9CisKKwljYXJkID0gYWRhcHRlci0+Y2FyZDsKKworCWlmICghYWRhcHRlci0+YWxsb2NhdGVkKSB7CisJCWNhcmQtPmFkYXB0ZXJzX2FsbG9jYXRlZCsrOworCQlhZGFwdGVyLT5hbGxvY2F0ZWQgPSAxOworCX0KKworCURCR19NU0coInNsaWNvc3M6ICVzICAgIGNhcmQ6ICAgICAgICAgICAgICVwXG4iLCBfX2Z1bmNfXywKKwkJYWRhcHRlci0+Y2FyZCk7CisJREJHX01TRygic2xpY29zczogJXMgICAgY2FyZC0+YWRhcHRlclslZF0gPT0gWyVwXVxuIiwgX19mdW5jX18sCisJCSh1aW50KSBhZGFwdGVyLT5wb3J0LCBhZGFwdGVyKTsKKwlEQkdfTVNHKCJzbGljb3NzOiAlcyAgICBjYXJkLT5hZGFwdGVyc19hbGxvY2F0ZWQgWyVkXVxuIiwgX19mdW5jX18sCisJCWNhcmQtPmFkYXB0ZXJzX2FsbG9jYXRlZCk7CisJREJHX01TRygic2xpY29zczogJXMgICAgY2FyZC0+YWRhcHRlcnNfYWN0aXZhdGVkIFslZF1cbiIsIF9fZnVuY19fLAorCQljYXJkLT5hZGFwdGVyc19hY3RpdmF0ZWQpOworCisJc3RhdHVzID0gc2xpY19jYXJkX2luaXQoY2FyZCwgYWRhcHRlcik7CisKKwlpZiAoc3RhdHVzICE9IFNUQVRVU19TVUNDRVNTKSB7CisJCWNhcmQtPnN0YXRlID0gQ0FSRF9GQUlMOworCQlhZGFwdGVyLT5zdGF0ZSA9IEFEQVBUX0ZBSUw7CisJCWFkYXB0ZXItPmxpbmtzdGF0ZSA9IExJTktfRE9XTjsKKwkJREJHX0VSUk9SKCJzbGljX2NhcmRfaW5pdCBGQUlMRUQgc3RhdHVzWyV4XVxuIiwgc3RhdHVzKTsKKwl9IGVsc2UgeworCQlzbGljX2FkYXB0ZXJfc2V0X2h3YWRkcihhZGFwdGVyKTsKKwl9CisKKwluZXRkZXYtPmJhc2VfYWRkciA9ICh1bnNpZ25lZCBsb25nKWFkYXB0ZXItPm1lbW9yeWJhc2U7CisJbmV0ZGV2LT5pcnEgPSBhZGFwdGVyLT5pcnE7CisJbmV0ZGV2LT5vcGVuID0gc2xpY19lbnRyeV9vcGVuOworCW5ldGRldi0+c3RvcCA9IHNsaWNfZW50cnlfaGFsdDsKKwluZXRkZXYtPmhhcmRfc3RhcnRfeG1pdCA9IHNsaWNfeG1pdF9zdGFydDsKKwluZXRkZXYtPmRvX2lvY3RsID0gc2xpY19pb2N0bDsKKwluZXRkZXYtPnNldF9tYWNfYWRkcmVzcyA9IHNsaWNfbWFjX3NldF9hZGRyZXNzOworI2lmIFNMSUNfR0VUX1NUQVRTX0VOQUJMRUQKKwluZXRkZXYtPmdldF9zdGF0cyA9IHNsaWNfZ2V0X3N0YXRzOworI2VuZGlmCisJbmV0ZGV2LT5zZXRfbXVsdGljYXN0X2xpc3QgPSBzbGljX21jYXN0X3NldF9saXN0OworCisJc2xpY19kZWJ1Z19hZGFwdGVyX2NyZWF0ZShhZGFwdGVyKTsKKworCXN0cmNweShuZXRkZXYtPm5hbWUsICJldGglZCIpOworCWVyciA9IHJlZ2lzdGVyX25ldGRldihuZXRkZXYpOworCWlmIChlcnIpIHsKKwkJREJHX0VSUk9SKCJDYW5ub3QgcmVnaXN0ZXIgbmV0IGRldmljZSwgYWJvcnRpbmcuXG4iKTsKKwkJZ290byBlcnJfb3V0X3VubWFwOworCX0KKworCURCR19NU0cKKwkgICAgKCJzbGljb3NzOiBhZGRyIDB4JWx4LCBpcnEgJWQsIE1BQyBhZGRyICJcCisJICAgICAiJTAyWDolMDJYOiUwMlg6JTAyWDolMDJYOiUwMlhcbiIsCisJICAgICBtbWlvX3N0YXJ0LCAvKnBjaV9yZXNvdXJjZV9zdGFydChwY2lkZXYsIDApLCAqLyBwY2lkZXYtPmlycSwKKwkgICAgIG5ldGRldi0+ZGV2X2FkZHJbMF0sIG5ldGRldi0+ZGV2X2FkZHJbMV0sIG5ldGRldi0+ZGV2X2FkZHJbMl0sCisJICAgICBuZXRkZXYtPmRldl9hZGRyWzNdLCBuZXRkZXYtPmRldl9hZGRyWzRdLCBuZXRkZXYtPmRldl9hZGRyWzVdKTsKKworCWNhcmRzX2ZvdW5kKys7CisJREJHX01TRygic2xpY29zczogJXMgRVhJVCBzdGF0dXNbJXhdIGppZmZpZXNbJWx4XSBjcHUgJWRcbiIsCisJCV9fZnVuY19fLCBzdGF0dXMsIGppZmZpZXMsIHNtcF9wcm9jZXNzb3JfaWQoKSk7CisKKwlyZXR1cm4gc3RhdHVzOworCitlcnJfb3V0X3VubWFwOgorCWlvdW5tYXAobWVtbWFwcGVkX2lvYWRkcik7CisKK2Vycl9vdXRfZnJlZV9tbWlvX3JlZ2lvbjoKKwlyZWxlYXNlX21lbV9yZWdpb24obW1pb19zdGFydCwgbW1pb19sZW4pOworCitlcnJfb3V0X2V4aXRfc2xpY19wcm9iZToKKwlwY2lfcmVsZWFzZV9yZWdpb25zKHBjaWRldik7CisJREJHX0VSUk9SKCIlcyBFWElUIGppZmZpZXNbJWx4XSBjcHUgJWRcbiIsIF9fZnVuY19fLCBqaWZmaWVzLAorCQkgIHNtcF9wcm9jZXNzb3JfaWQoKSk7CisKKwlyZXR1cm4gLUVOT0RFVjsKK30KKworc3RhdGljIGludCBzbGljX2VudHJ5X29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciA9IChzdHJ1Y3QgYWRhcHRlciAqKSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBzbGljY2FyZCAqY2FyZCA9IGFkYXB0ZXItPmNhcmQ7CisJdTMyIGxvY2tlZCA9IDA7CisJaW50IHN0YXR1czsKKworCUFTU0VSVChhZGFwdGVyKTsKKwlBU1NFUlQoY2FyZCk7CisJREJHX01TRworCSAgICAoInNsaWNvc3M6ICVzIGFkYXB0ZXItPmFjdGl2YXRlZFslZF0gY2FyZC0+YWRhcHRlcnNbJXhdICJcCisJICAgICAiYWxsb2NkWyV4XVxuIiwgX19mdW5jX18sIGFkYXB0ZXItPmFjdGl2YXRlZCwKKwkgICAgIGNhcmQtPmFkYXB0ZXJzX2FjdGl2YXRlZCwKKwkgICAgIGNhcmQtPmFkYXB0ZXJzX2FsbG9jYXRlZCk7CisJREJHX01TRworCSAgICAoInNsaWNvc3M6ICVzICglcyk6IFtqaWZmaWVzWyVseF0gY3B1ICVkXSBkZXZbJXBdIGFkYXB0WyVwXSAiXAorCSAgICAgInBvcnRbJWRdIGNhcmRbJXBdXG4iLAorCSAgICAgX19mdW5jX18sIGFkYXB0ZXItPm5ldGRldi0+bmFtZSwgamlmZmllcywgc21wX3Byb2Nlc3Nvcl9pZCgpLAorCSAgICAgYWRhcHRlci0+bmV0ZGV2LCBhZGFwdGVyLCBhZGFwdGVyLT5wb3J0LCBjYXJkKTsKKworCW5ldGlmX3N0b3BfcXVldWUoYWRhcHRlci0+bmV0ZGV2KTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZzbGljX2dsb2JhbC5kcml2ZXJfbG9jay5sb2NrLAorCQkJCXNsaWNfZ2xvYmFsLmRyaXZlcl9sb2NrLmZsYWdzKTsKKwlsb2NrZWQgPSAxOworCWlmICghYWRhcHRlci0+YWN0aXZhdGVkKSB7CisJCWNhcmQtPmFkYXB0ZXJzX2FjdGl2YXRlZCsrOworCQlzbGljX2dsb2JhbC5udW1fc2xpY19wb3J0c19hY3RpdmUrKzsKKwkJYWRhcHRlci0+YWN0aXZhdGVkID0gMTsKKwl9CisJc3RhdHVzID0gc2xpY19pZl9pbml0KGFkYXB0ZXIpOworCisJaWYgKHN0YXR1cyAhPSBTVEFUVVNfU1VDQ0VTUykgeworCQlpZiAoYWRhcHRlci0+YWN0aXZhdGVkKSB7CisJCQljYXJkLT5hZGFwdGVyc19hY3RpdmF0ZWQtLTsKKwkJCXNsaWNfZ2xvYmFsLm51bV9zbGljX3BvcnRzX2FjdGl2ZS0tOworCQkJYWRhcHRlci0+YWN0aXZhdGVkID0gMDsKKwkJfQorCQlpZiAobG9ja2VkKSB7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzbGljX2dsb2JhbC5kcml2ZXJfbG9jay5sb2NrLAorCQkJCQkJc2xpY19nbG9iYWwuZHJpdmVyX2xvY2suZmxhZ3MpOworCQkJbG9ja2VkID0gMDsKKwkJfQorCQlyZXR1cm4gc3RhdHVzOworCX0KKwlEQkdfTVNHKCJzbGljb3NzOiAlcyBzZXQgY2FyZC0+bWFzdGVyWyVwXSBhZGFwdGVyWyVwXVxuIiwgX19mdW5jX18sCisJCWNhcmQtPm1hc3RlciwgYWRhcHRlcik7CisJaWYgKCFjYXJkLT5tYXN0ZXIpCisJCWNhcmQtPm1hc3RlciA9IGFkYXB0ZXI7CisjaWYgU0xJQ19EVU1QX0VOQUJMRUQKKwlpZiAoIShjYXJkLT5kdW1wdGhyZWFkX3J1bm5pbmcpKQorCQlpbml0X3dhaXRxdWV1ZV9oZWFkKCZjYXJkLT5kdW1wX3dxKTsKKyNlbmRpZgorCisJaWYgKGxvY2tlZCkgeworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzbGljX2dsb2JhbC5kcml2ZXJfbG9jay5sb2NrLAorCQkJCQlzbGljX2dsb2JhbC5kcml2ZXJfbG9jay5mbGFncyk7CisJCWxvY2tlZCA9IDA7CisJfQorI2lmIFNMSUNfRFVNUF9FTkFCTEVECisJaWYgKCEoY2FyZC0+ZHVtcHRocmVhZF9ydW5uaW5nKSkgeworCQlEQkdfTVNHKCJhdHRlbXB0IHRvIGluaXRpYWxpemUgZHVtcCB0aHJlYWRcbiIpOworCQlzdGF0dXMgPSBzbGljX2luaXRfZHVtcF90aHJlYWQoY2FyZCk7CisJCS8qCisJCUV2ZW4gaWYgdGhlIGR1bXAgdGhyZWFkIGZhaWxzLCB3ZSB3aWxsIGNvbnRpbnVlIGF0IHRoaXMgcG9pbnQKKwkJKi8KKwl9CisjZW5kaWYKKworCXJldHVybiBTVEFUVVNfU1VDQ0VTUzsKK30KKworc3RhdGljIHZvaWQgX19kZXZleGl0IHNsaWNfZW50cnlfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwY2lkZXYpCit7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHBjaV9nZXRfZHJ2ZGF0YShwY2lkZXYpOworCXUzMiBtbWlvX3N0YXJ0ID0gMDsKKwl1aW50IG1taW9fbGVuID0gMDsKKwlzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciA9IChzdHJ1Y3QgYWRhcHRlciAqKSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBzbGljY2FyZCAqY2FyZDsKKworCUFTU0VSVChhZGFwdGVyKTsKKwlEQkdfTVNHKCJzbGljb3NzOiAlcyBFTlRFUiBkZXZbJXBdIGFkYXB0ZXJbJXBdXG4iLCBfX2Z1bmNfXywgZGV2LAorCQlhZGFwdGVyKTsKKwlzbGljX2FkYXB0ZXJfZnJlZXJlc291cmNlcyhhZGFwdGVyKTsKKwlzbGljX3VubWFwX21taW9fc3BhY2UoYWRhcHRlcik7CisJREJHX01TRygic2xpY29zczogJXMgdW5yZWdpc3Rlcl9uZXRkZXZcbiIsIF9fZnVuY19fKTsKKwl1bnJlZ2lzdGVyX25ldGRldihkZXYpOworCisJbW1pb19zdGFydCA9IHBjaV9yZXNvdXJjZV9zdGFydChwY2lkZXYsIDApOworCW1taW9fbGVuID0gcGNpX3Jlc291cmNlX2xlbihwY2lkZXYsIDApOworCisJREJHX01TRygic2xpY29zczogJXMgcmVsX3JlZ2lvbigwKSBzdGFydFsleF0gbGVuWyV4XVxuIiwgX19mdW5jX18sCisJCW1taW9fc3RhcnQsIG1taW9fbGVuKTsKKwlyZWxlYXNlX21lbV9yZWdpb24obW1pb19zdGFydCwgbW1pb19sZW4pOworCisJREJHX01TRygic2xpY29zczogJXMgaW91bm1hcCBkZXYtPmJhc2VfYWRkclsleF1cbiIsIF9fZnVuY19fLAorCQkodWludCkgZGV2LT5iYXNlX2FkZHIpOworCWlvdW5tYXAoKHZvaWQgX19pb21lbSAqKWRldi0+YmFzZV9hZGRyKTsKKwlBU1NFUlQoYWRhcHRlci0+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+ZHVtcHN0YXR1cyAmIElTUl9VUENFUlIpIHsKKwkJCS8qCisJCQkgKiBFcnJvciAob3IgcXVldWUgZW1wdHkpCisJCQkgKi8KKy8qICAgICAgICAgIERCR19FUlJPUigiW3NsaWNtb25dICVzOiBEVU1QX1NUQVRVUyAmIElTUl9VUENFUlIgc3RhdHVzWyV4XVxuIiwKKwkJX19mdW5jX18sIFNUQVRVU19GQUlMVVJFKTsgKi8KKworCQkJcmV0dXJuIFNUQVRVU19GQUlMVVJFOworCQl9IGVsc2UgaWYgKGNhcmQtPmR1bXBzdGF0dXMgJiBJU1JfVVBDQlNZKSB7CisJCQkvKgorCQkJICogUmV0cnkKKwkJCSAqLworCQkJREJHX0VSUk9SKCIlczogSVNSX1VQQ0JVU1kgYXR0ZW1wdFsleF1cbiIsIF9fZnVuY19fLAorCQkJCSAgYXR0ZW1wdHMpOworCisJCQlhdHRlbXB0cy0tOworCQl9IGVsc2UgeworCQkJLyoKKwkJCSAqIHN1Y2Nlc3MKKwkJCSAqLworCQkJcmV0dXJuIFNUQVRVU19TVUNDRVNTOworCQl9CisKKwl9IHdoaWxlIChhdHRlbXB0cyk7CisKKwlEQkdfRVJST1IoIiVzOiBHQVZFIFVQIEFGVEVSIFNFVkVSQUwgQVRURU1QVFMgc3RhdHVzWyV4XVxuIiwKKwkJICBfX2Z1bmNfXywgU1RBVFVTX0ZBSUxVUkUpOworCisJLyoKKwkgKiBHYXZlIHVwIGFmdGVyIHNldmVyYWwgYXR0ZW1wdHMKKwkgKi8KKwlyZXR1cm4gU1RBVFVTX0ZBSUxVUkU7Cit9CisKKyNlbmRpZgorLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICA9PT0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID09PQorICA9PT0gICAgICAqKiogRU5EICoqKiogRU5EICoqKiogRU5EICoqKiogRU5EICoqKiAgICAgICAgICAgICAgICAgICAgICAgICAgID09PQorICA9PT0gICAgICAgU0xJQyAgRFVNUCAgTUFOQUdFTUVOVCAgICAgICAgU0VDVElPTiAgICAgICAgICAgICAgICAgICAgICAgICAgID09PQorICA9PT0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID09PQorICA9PT0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID09PQorICA9PT0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID09PQorICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqICAgTU9EVUxFIElOSVRJQVRJT04gLyBURVJNSU5BVElPTiBGVU5DVElPTlMgICAqKioqKioqKioqKioqKiovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgc2xpY19kcml2ZXIgPSB7CisJLm5hbWUgPSBEUlZfTkFNRSwKKwkuaWRfdGFibGUgPSBzbGljX3BjaV90YmwsCisJLnByb2JlID0gc2xpY19lbnRyeV9wcm9iZSwKKwkucmVtb3ZlID0gc2xpY19lbnRyeV9yZW1vdmUsCisjaWYgU0xJQ19QT1dFUl9NQU5BR0VNRU5UX0VOQUJMRUQKKwkuc3VzcGVuZCA9IHNsaWNwbV9zdXNwZW5kLAorCS5yZXN1bWUgPSBzbGljcG1fcmVzdW1lLAorI2VuZGlmCisvKiAgICAuc2h1dGRvd24gICA9ICAgICBzbGljX3NodXRkb3duLCAgTU9PS19JTlZFU1RJR0FURSAqLworfTsKKworc3RhdGljIGludCBfX2luaXQgc2xpY19tb2R1bGVfaW5pdCh2b2lkKQoreworCXN0cnVjdCBwY2lfZGV2aWNlX2lkICpwY2lkZXY7CisJaW50IHJldDsKKworLyogICAgICBEQkdfTVNHKCJzbGljb3NzOiAlcyBFTlRFUiBjcHUgJWRcbiIsIF9fZnVuY19fLCBzbXBfcHJvY2Vzc29yX2lkKCkpOyAqLworCisJc2xpY19pbml0X2RyaXZlcigpOworCisJaWYgKGRlYnVnID49IDAgJiYgc2xpY19kZWJ1ZyAhPSBkZWJ1ZykKKwkJcHJpbnRrKFNMSUNMRVZFTCAic2xpY29zczogZGVidWcgbGV2ZWwgaXMgJWQuXG4iLCBkZWJ1Zyk7CisJaWYgKGRlYnVnID49IDApCisJCXNsaWNfZGVidWcgPSBkZWJ1ZzsKKworCXBjaWRldiA9IChzdHJ1Y3QgcGNpX2RldmljZV9pZCAqKXNsaWNfZHJpdmVyLmlkX3RhYmxlOworLyogICAgICBEQkdfTVNHKCJzbGljb3NzOiAlcyBjYWxsIHBjaV9tb2R1bGVfaW5pdCBqaWZmaWVzWyVseF0gY3B1ICMlZFxuIiwKKwlfX2Z1bmNfXywgamlmZmllcywgc21wX3Byb2Nlc3Nvcl9pZCgpKTsgKi8KKworCXJldCA9IHBjaV9yZWdpc3Rlcl9kcml2ZXIoJnNsaWNfZHJpdmVyKTsKKworLyogIERCR19NU0coInNsaWNvc3M6ICVzIEVYSVQgYWZ0ZXIgY2FsbCBwY2lfbW9kdWxlX2luaXQgamlmZmllc1slbHhdICIKKwkgICAgImNwdSAjJWQgc3RhdHVzWyV4XVxuIixfX2Z1bmNfXywgamlmZmllcywKKwkgICAgc21wX3Byb2Nlc3Nvcl9pZCgpLCByZXQpOyAqLworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgX19leGl0IHNsaWNfbW9kdWxlX2NsZWFudXAodm9pZCkKK3sKKy8qICAgICAgREJHX01TRygic2xpY29zczogJXMgRU5URVJcbiIsIF9fZnVuY19fKTsgKi8KKwlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJnNsaWNfZHJpdmVyKTsKKwlzbGljX2RlYnVnX2NsZWFudXAoKTsKKy8qICAgICAgREJHX01TRygic2xpY29zczogJXMgRVhJVFxuIiwgX19mdW5jX18pOyAqLworfQorCittb2R1bGVfaW5pdChzbGljX21vZHVsZV9pbml0KTsKK21vZHVsZV9leGl0KHNsaWNfbW9kdWxlX2NsZWFudXApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3N0YWdpbmcuYyBiL2RyaXZlcnMvc3RhZ2luZy9zdGFnaW5nLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjMzZTU4OQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9zdGFnaW5nLmMKQEAgLTAsMCArMSwxOSBAQAorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKworc3RhdGljIGludCBfX2luaXQgc3RhZ2luZ19pbml0KHZvaWQpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBzdGFnaW5nX2V4aXQodm9pZCkKK3sKK30KKworbW9kdWxlX2luaXQoc3RhZ2luZ19pbml0KTsKK21vZHVsZV9leGl0KHN0YWdpbmdfZXhpdCk7CisKK01PRFVMRV9BVVRIT1IoIkdyZWcgS3JvYWgtSGFydG1hbiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJTdGFnaW5nIENvcmUiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9zeGcvS2NvbmZpZyBiL2RyaXZlcnMvc3RhZ2luZy9zeGcvS2NvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZTZjZjBiCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3N4Zy9LY29uZmlnCkBAIC0wLDAgKzEsMTEgQEAKK2NvbmZpZyBTWEcKKwl0cmlzdGF0ZSAiQWxhY3JpdGVjaCBTTElDIFRlY2hub2xvZ3kgTm9uLUFjY2VsZXJhdGVkIDEwR2JlIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBQQ0kgJiYgTkVUREVWXzEwMDAwCisJZGVwZW5kcyBvbiBYODYKKwlkZWZhdWx0IG4KKwloZWxwCisJICBUaGlzIGRyaXZlciBzdXBwb3J0cyB0aGUgQWxhY3JpdGVjaCBTTElDIFRlY2hub2xvZ3kgTm9uLUFjY2VsZXJhdGVkCisJICAxMEdiZSBuZXR3b3JrIGNhcmRzLgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UKKwkgIE0gaGVyZTogdGhlIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBzeGcuCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvc3hnL01ha2VmaWxlIGIvZHJpdmVycy9zdGFnaW5nL3N4Zy9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYzQ4ZmFhCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3N4Zy9NYWtlZmlsZQpAQCAtMCwwICsxIEBACitvYmotJChDT05GSUdfU1hHKQkrPSBzeGcubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3N4Zy9SRUFETUUgYi9kcml2ZXJzL3N0YWdpbmcvc3hnL1JFQURNRQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZDFkZGJlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3N4Zy9SRUFETUUKQEAgLTAsMCArMSwxMyBAQAorVGhpcyBpcyB0aGUgcm91Z2ggY3V0IGF0IGEgZHJpdmVyIGZvciB0aGUgQWxhY3JpdGVjaCBTTElDIFRlY2hub2xvZ3kKK05vbi1BY2NlbGVyYXRlZCAxMEdiZSBuZXR3b3JrIGRyaXZlci4KKworVE9ETzoKKwktIGxpbmRlbnQgdGhlIGNvZGUKKwktIHJlbW92ZSB0eXBlZGVmcworCS0gcmVtb3ZlIHdyYXBwZXJzCisJLSBjaGVja3BhdGNoLnBsIGNsZWFudXBzCisJLSBuZXcgZnVuY3Rpb25hbGl0eSB0aGF0IHRoZSBjYXJkIG5lZWRzCisKK1BsZWFzZSBzZW5kIHBhdGNoZXMgdG86CisgICAgICAgIEdyZWcgS3JvYWgtSGFydG1hbiA8Z3JlZ2toQHN1c2UuZGU+Citmb3IgYW55IGNsZWFudXBzIHRoYXQgeW91IGRvIHRvIHRoaXMgZHJpdmVyLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3N4Zy9zYWhhcmFkYmdkb3dubG9hZC5oIGIvZHJpdmVycy9zdGFnaW5nL3N4Zy9zYWhhcmFkYmdkb3dubG9hZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ4ODY1YmEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvc3hnL3NhaGFyYWRiZ2Rvd25sb2FkLmgKQEAgLTAsMCArMSw0ODU0IEBACisjZGVmaW5lIFNBSEFSQV9VQ09ERV9WRVJTX1NUUklORwkiJFJldmlzaW9uOiAxLjEgJCIKKyNkZWZpbmUgU0FIQVJBX1VDT0RFX1ZFUlNfREFURSAgCSIkRGF0ZTogMjAwOC8wNi8yNyAxMjo1ODoyNyAkIgorI2RlZmluZSBTQUhBUkFfVUNPREVfSE9TVElGX0lEICAJMworCitzdGF0aWMgdTMyIFNOdW1TZWN0aW9ucyA9IDB4MjsKK3N0YXRpYyB1MzIgU1NlY3Rpb25TaXplW10gPQoreworCTB4MDAwMGUyNzQsIDB4MDAwMDAwMGMsCit9OworCitzdGF0aWMgdTMyIFNTZWN0aW9uU3RhcnRbXSA9Cit7CisJMHgwMDAwMDAwMCwgMHgwMDAwMWZmZiwKK307CisKK3N0YXRpYyB1bnNpZ25lZCBjaGFyIFNhaGFyYVVDb2RlWzJdWzU3OTcyXSA9Cit7Cit7CisJMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4OCwgMHg4MiwgMHg0ZCwgMHgyOSwgMHgzYSwKKwkweDAwLCAweDAwLCAweGIyLCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4MDksIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHgwOSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDA5LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4MDksIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHgwOSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDA5LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4MDksIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHhmZSwgMHhmZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhYywgMHgwMiwgMHgwMCwgMHgzNiwgMHgzMiwKKwkweDAwLCAweDAwLCAweDM2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE4LCAweDAyLCAweDAwLCAweDAwLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweDBmLCAweDgwLCAweDI4LCAweDkyLAorCTB4MDAsIDB4MDAsIDB4MjEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MGYsIDB4ODAsIDB4MjgsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHgyMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkOCwgMHgwZiwgMHg4MCwgMHgyOCwgMHg5MiwKKwkweDAwLCAweDAwLCAweDIzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweDBmLCAweDQwLCAweDJiLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4MjQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MGYsIDB4ODAsIDB4MjgsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHgyNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkOCwgMHgwZiwgMHg4MCwgMHgyOCwgMHg5MiwKKwkweDAwLCAweDAwLCAweDI2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweDBmLCAweDgwLCAweDI4LCAweDkyLAorCTB4MDAsIDB4MDAsIDB4MjcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MGYsIDB4ODAsIDB4MjgsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHgyOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkOCwgMHgwZiwgMHg4MCwgMHgyOCwgMHg5MiwKKwkweDAwLCAweDAwLCAweDI5LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweDBmLCAweDgwLCAweDI4LCAweDkyLAorCTB4MDAsIDB4MDAsIDB4MmEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MGYsIDB4ODAsIDB4MjgsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5OCwgMHgxZSwgMHg4MCwgMHhlOSwgMHg5YSwKKwkweDAwLCAweDAwLCAweDJjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweDBmLCAweDgwLCAweDI4LCAweDkyLAorCTB4MDAsIDB4MDAsIDB4MmQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MGYsIDB4ODAsIDB4MjgsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHgyZSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkOCwgMHgwZiwgMHg4MCwgMHgyOCwgMHg5MiwKKwkweDAwLCAweDAwLCAweDJmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweDBmLCAweDgwLCAweDI4LCAweDkyLAorCTB4MDAsIDB4MDAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDQsIDB4MGYsIDB4MDAsIDB4MDAsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkNCwgMHgwZiwgMHg0MCwgMHgwMCwgMHg5MiwKKwkweDAwLCAweDAwLCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ0LCAweDBmLCAweDgwLCAweDAwLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4MzQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDQsIDB4MGYsIDB4YzAsIDB4MDAsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkNCwgMHgwZiwgMHgwMCwgMHgwMSwgMHg5MiwKKwkweDAwLCAweDAwLCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ0LCAweDBmLCAweDQwLCAweDAxLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDQsIDB4MGYsIDB4ODAsIDB4MDEsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkNCwgMHgwZiwgMHhjMCwgMHgwMSwgMHg5MiwKKwkweDAwLCAweDAwLCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ0LCAweDBmLCAweDAwLCAweDAyLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDQsIDB4MGYsIDB4NDAsIDB4MDIsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkNCwgMHgwZiwgMHg4MCwgMHgwMiwgMHg5MiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDQsIDB4MGYsIDB4MDAsIDB4MDMsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkNCwgMHgwZiwgMHg0MCwgMHgwMywgMHg5MiwKKwkweDAwLCAweDAwLCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ0LCAweDBmLCAweDgwLCAweDAzLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDQsIDB4MGYsIDB4YzAsIDB4MDMsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkMCwgMHg1ZiwgMHgzZiwgMHgwMCwgMHgzNCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAwLCAweDAwLCAweDgwLCAweDQyLCAweGZmLCAweGZjLCAweGIwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODgsIDB4MTIsIDB4ODAsIDB4ZmQsIDB4M2EsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDhhLCAweDExLCAweDhhLCAweDExLCAweDAyLCAweDAxLCAweDAwLCAweDgwLCAweDgyLCAweDhkLCAweGZkLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODgsIDB4MTIsIDB4ODAsIDB4ZmQsIDB4M2EsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgwMywgMHhjMCwgMHgwMSwgMHgzMiwKKwkweDM4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDg0LCAweDgyLCAweDRkLCAweDI4LCAweDFhLAorCTB4MDAsIDB4MDAsIDB4MzYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjAsIDB4NWYsIDB4MGEsIDB4ZjYsIDB4OTQsCisJMHgwMCwgMHgwMCwgMHg0YiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MiwKKwkweDAwLCAweDAwLCAweDYyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweDAyLCAweDAwLCAweDAwLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4NDksIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OTAsIDB4MGUsIDB4ODAsIDB4MTgsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHhkMiwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHhjMCwgMHgyMCwgMHg5MiwKKwkweDAwLCAweDAwLCAweDdmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDAwLCAweDIxLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4ZDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4NDAsIDB4MjEsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHg3ZSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHg4NSwgMHgyMSwgMHg5MCwKKwkweDAwLCAweDAwLCAweDRiLCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweGVjLCAweDAyLCAweGMwLCAweDIyLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4NDMsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg1MSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiMCwgMHgwMiwgMHg0MCwgMHgxOCwgMHg5ZCwKKwkweDAwLCAweDAwLCAweDRkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQwLCAweDAyLCAweDAwLCAweDAwLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGIsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDcwLAorCTB4MDAsIDB4MDAsIDB4NDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDksIDB4YzAsIDB4MjEsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHhlOCwgMHgwMiwgMHgwMCwgMHg5MCwgMHg3MiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweGIyLCAweDAwLCAweGU5LCAweGI2LAorCTB4MDAsIDB4MDAsIDB4YjAsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4N2MsIDB4MWUsIDB4YzAsIDB4ZTcsIDB4OWEsCisJMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgxMywgMHg0MCwgMHgwMSwgMHgzOSwKKwkweDAwLCAweDAwLCAweGE0LCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweGI4LCAweDAxLCAweDAwLCAweDk0LAorCTB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4YjMsIDB4NDAsIDB4MDEsIDB4MzksCisJMHgwMCwgMHgwMCwgMHhiMCwgMHgwMywgMHhiMiwgMHgwMCwgMHgwMCwgMHhkOCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDE3LCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGIwLAorCTB4MDAsIDB4MDAsIDB4NjksIDB4MDUsIDB4MDAsIDB4MTAsIDB4MDEsIDB4ZjgsIDB4MDIsIDB4MDAsIDB4NmUsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwYSwgMHgwMCwgMHgwMCwgMHhjYywgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMiwKKwkweDI2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA5LCAweDAwLCAweDM2LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4ZTIsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDksIDB4NDAsIDB4MTgsIDB4ZDIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4NCwgMHgwMSwgMHgwMCwgMHgyYiwgMHgzMiwKKwkweDAwLCAweDAwLCAweDU3LCAweDAwLCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweDEyLCAweDgxLCAweGZjLCAweGI2LAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MmIsIDB4YmMsCisJMHgwMiwgMHgwMCwgMHg1NywgMHgwMCwgMHhiMCwgMHgwMCwgMHgwMCwgMHhhMCwgMHhjMiwgMHgwYSwgMHgwMCwgMHhiOSwKKwkweDAwLCAweDAwLCAweDVhLCAweDAwLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweGMwLCAweGIwLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4NjAsIDB4MDAsIDB4YTAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg1YywgMHgwMCwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHhjMiwgMHg0YSwgMHhkMCwgMHhiNiwKKwkweDAwLCAweDAwLCAweDYwLCAweDAwLCAweGEwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4Y2QsIDB4NGEsIDB4ZDAsIDB4MzQsCisJMHgwMCwgMHgwMCwgMHhmYSwgMHgwZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkOCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhkMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDgwLCAweDkyLCAweGJjLAorCTB4MTgsIDB4MDAsIDB4MzYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NzMsIDB4MGEsIDB4MDMsIDB4ZjksCisJMHgwMCwgMHgwMCwgMHg1NCwgMHgwMCwgMHgwMywgMHgwMSwgMHgwMCwgMHhiMCwgMHgwMiwgMHg0MCwgMHgxOCwgMHhiZCwKKwkweDA4LCAweDAwLCAweGIwLCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweGEzLCAweDQwLCAweDAxLCAweDk5LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDgsIDB4MDAsIDB4MTYsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHg2NywgMHgwMCwgMHgwMywgMHgwMSwgMHgwMCwgMHhkOCwgMHgwMiwgMHg4MCwgMHg4MCwgMHhiZCwKKwkweDAwLCAweDAwLCAweDc2LCAweDAwLCAweDEyLCAweDAxLCAweDAwLCAweGU4LCAweDAyLCAweGMwLCAweDIxLCAweGIyLAorCTB4MTgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NzMsIDB4MGEsIDB4MDMsIDB4MzksCisJMHg3NiwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjMCwgMHgwMiwgMHgwMCwgMHgzNiwgMHg5MiwKKwkweDAwLCAweDAwLCAweDZiLCAweDAwLCAweDEyLCAweDAxLCAweDAwLCAweDVjLCAweDA4LCAweDgwLCAweDIyLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4NjUsIDB4MDAsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ODIsIDB4ODUsIDB4ODAsIDB4YmMsCisJMHgxOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHg4YSwgMHgwMywgMHgzOSwKKwkweDYzLCAweDAwLCAweDM2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGMwLCAweDAyLCAweDAwLCAweDM2LCAweDkyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4NjgsIDB4OGIsIDB4ODAsIDB4MzUsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHhiOCwgMHhmZiwgMHg4NSwgMHgzMCwKKwkweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweDIxLCAweGZmLCAweDM4LAorCTB4MWMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODcsIDB4NGQsIDB4ODAsIDB4M2EsCisJMHgyYywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHg4NywgMHgwZCwgMHg4MCwgMHgzYSwKKwkweDAwLCAweGM0LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDA3LCAweDAwLCAweDM2LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NTQsIDB4ZjIsIDB4YzEsIDB4MzgsIDB4YjQsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjOCwgMHgxMiwgMHg4MCwgMHgyZCwgMHgzNywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDJjLCAweDQ4LCAweDQxLCAweDgwLCAweDNhLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OTgsIDB4ODYsIDB4OTgsIDB4NjcsIDB4YzAsIDB4ODIsIDB4M2EsCisJMHgwMCwgMHgwMCwgMHg2MywgMHgwMCwgMHgxMiwgMHgwMCwgMHgwMCwgMHhlOCwgMHgwMiwgMHhjMCwgMHgyMSwgMHhiMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDgwLCAweDAwLCAweDAwLCAweDgwLCAweDYyLCAweDhiLCAweDgwLCAweGI2LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YzgsIDB4MTIsIDB4ODAsIDB4MmQsIDB4MzcsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyYywgMHgwOCwgMHg4MCwgMHg3MCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDdjLCAweDAwLCAweDkwLCAweDk5LCAweDg2LCAweDJjLCAweDI4LCAweGRlLCAweDgyLCAweGJhLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmMsIDB4MTgsIDB4YzAsIDB4ODIsIDB4M2EsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyYywgMHgwOCwgMHhjNSwgMHg4MiwgMHgzMCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweGM1LCAweDgyLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4NjMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4NjgsIDB4OGIsIDB4ODAsIDB4OTQsCisJMHgwOCwgMHgwMCwgMHg4MSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHg0MCwgMHgwMSwgMHg5OSwKKwkweDA4LCAweDAwLCAweDM4LCAweDAzLCAweDBjLCAweDAwLCAweDAwLCAweGY4LCAweDUzLCAweDQwLCAweDAxLCAweGI5LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDUsIDB4ODAsIDB4MzAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiMCwgMHgwMiwgMHgwMCwgMHgwMiwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDgwLCAweDNkLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4N2UsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDksIDB4MDAsIDB4ODAsIDB4ZDIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjYywgMHgwMiwgMHgwMCwgMHgwMCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA5LCAweDAwLCAweDM2LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4ZTIsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4NTksIDB4MDAsIDB4ODAsIDB4ZDcsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg2MiwgMHg4MCwgMHgyZiwgMHhiNiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAyLCAweDAxLCAweDAwLCAweDgwLCAweDgyLCAweDNhLCAweDgwLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDYsIDB4MDEsIDB4MDAsIDB4ODAsIDB4OTIsIDB4M2EsIDB4ODAsIDB4YmMsCisJMHgwMCwgMHg5MCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHhhMiwgMHgwZCwgMHg4MCwgMHhiMCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAxLCAweDAwLCAweDc4LCAweDA5LCAweGMwLCAweDIxLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDQsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MzIsCisJMHgwMiwgMHhhMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOSwgMHgwZCwgMHg4MCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDU0LCAweDAyLCAweGE0LCAweDM4LCAweGIyLAorCTB4MDAsIDB4MDIsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmMsIDB4MDgsIDB4MDAsIDB4MzcsIDB4MzIsCisJMHgxOCwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHgwYSwgMHgwMywgMHhmOSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDAwLCAweDA0LCAweDA4LCAweDgwLCAweDcyLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4OTYsIDB4MDAsIDB4OWYsIDB4MDAsIDB4MDAsIDB4NWMsIDB4MDgsIDB4MDAsIDB4NzIsIDB4YjIsCisJMHg4NywgMHgwMCwgMHg5NSwgMHgwMCwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg4MiwgMHhjZCwgMHg4NSwgMHhiMCwKKwkweDAwLCAweDAwLCAweGE3LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDJjLCAweGQ4LCAweGMxLCAweDgyLCAweDk0LAorCTB4MDAsIDB4MDAsIDB4YTcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmMsIDB4ODgsIDB4YzEsIDB4ODIsIDB4OTQsCisJMHgwMCwgMHgwMCwgMHg5ZSwgMHgwMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHg4MCwgMHg1MiwgMHg3ZCwgMHg4MCwgMHhiYywKKwkweDAwLCAweDAwLCAweDczLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDA5LCAweDA1LCAweDgwLCAweGQwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NjgsIDB4MDIsIDB4MDUsIDB4ODAsIDB4YjAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1YywgMHgxZiwgMHhjMCwgMHhmNSwgMHgzYSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGIwLCAweDAyLCAweDAwLCAweDAyLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4YTQsIDB4MDMsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ZGMsIDB4NDMsIDB4NjAsIDB4M2QsIDB4YjMsCisJMHgxOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHg4YSwgMHgwMywgMHgzOSwKKwkweDlhLCAweDAwLCAweDM2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGMwLCAweDAyLCAweDAwLCAweDM2LCAweDkyLAorCTB4MDAsIDB4MGYsIDB4OTcsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4ODIsIDB4Y2QsIDB4ODUsIDB4YjAsCisJMHgxMCwgMHgwMCwgMHhhNSwgMHgwMCwgMHg4NywgMHgwMCwgMHgwMCwgMHg3OCwgMHg3OSwgMHgyMSwgMHgxNiwgMHhiOCwKKwkweDAxLCAweDAwLCAweGE1LCAweDAwLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDgyLCAweDhkLCAweDk3LCAweGJjLAorCTB4ODcsIDB4MDAsIDB4YWYsIDB4MDAsIDB4ODcsIDB4MDAsIDB4MDAsIDB4NzgsIDB4ODksIDB4Y2QsIDB4ODUsIDB4YjAsCisJMHgwMCwgMHgwMCwgMHhhNCwgMHgwMCwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgxMiwgMHg4MCwgMHg5NywgMHhiYywKKwkweDAwLCAweDAwLCAweGE3LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDJjLCAweGQ4LCAweGMxLCAweDgyLCAweDk0LAorCTB4MDAsIDB4MDAsIDB4YTcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmMsIDB4ODgsIDB4YzEsIDB4ODIsIDB4OTQsCisJMHgwMCwgMHgwMCwgMHhhZiwgMHgwMCwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHhmMiwgMHhjMCwgMHg4NSwgMHhiNiwKKwkweDAwLCAweDAwLCAweGFmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDJjLCAweDk4LCAweGMxLCAweDgyLCAweDk0LAorCTB4MDAsIDB4MDAsIDB4YWQsIDB4MDAsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ZDIsIDB4YzEsIDB4ODIsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHhhZiwgMHgwMCwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg3MiwgMHg4MCwgMHhmYywgMHhiNiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAwLCAweGE4LCAweDQyLCAweDNkLCAweDcyLCAweDMwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTQsIDB4MTgsIDB4OTksIDB4YjEsIDB4ZjIsIDB4YzAsIDB4N2MsIDB4MzAsCisJMHgwMCwgMHgwMCwgMHhkNiwgMHgwMCwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHhmMiwgMHhjMSwgMHg4NSwgMHhiNiwKKwkweDAwLCAweDAwLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ODIsIDB4YzEsIDB4ODIsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHhhOSwgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg4MiwgMHg4MCwgMHhmYywgMHhiNiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDU0LCAweDAwLCAweDAwLCAweGIwLCAweDAyLCAweDAwLCAweDAwLCAweDMyLAorCTB4ODAsIDB4MDAsIDB4ODAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4YzIsIDB4Y2QsIDB4ODUsIDB4MzAsCisJMHgwMCwgMHgwMCwgMHhjNiwgMHgwMCwgMHgwYiwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMCwKKwkweGZmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweDg5LCAweGNkLCAweDg1LCAweDMwLAorCTB4ODAsIDB4MDAsIDB4YzYsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4ODIsIDB4OGQsIDB4OTcsIDB4YmMsCisJMHhhMCwgMHgwMCwgMHhjNiwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg4MiwgMHg4ZCwgMHg5NywgMHhiYywKKwkweDAwLCAweDAwLCAweGJkLCAweDAwLCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweDYyLCAweDgwLCAweGZjLCAweGI2LAorCTB4ODcsIDB4MDAsIDB4YmQsIDB4MDAsIDB4ODcsIDB4MDAsIDB4MDAsIDB4NzgsIDB4ODksIDB4Y2QsIDB4ODUsIDB4YjAsCisJMHgwMCwgMHgwMCwgMHhiOSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgxMiwgMHg4MCwgMHg5NywgMHhiYywKKwkweDAwLCAweDAwLCAweGJkLCAweDAwLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDIyLCAweDgwLCAweDk3LCAweGJjLAorCTB4MDAsIDB4MDAsIDB4YmQsIDB4MDAsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4NzIsIDB4YzEsIDB4ODUsIDB4YjYsCisJMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3OCwgMHg3OSwgMHg2MSwgMHgxNiwgMHgzOCwKKwkweDAwLCAweDAwLCAweGM0LCAweDAwLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDMyLCAweDgwLCAweDk3LCAweGJjLAorCTB4MDAsIDB4MDAsIDB4ZDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmMsIDB4YjgsIDB4YzEsIDB4ODIsIDB4OTQsCisJMHgwMCwgMHgwMCwgMHhjNCwgMHgwMCwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg1MiwgMHg4MCwgMHhmYywgMHhiNiwKKwkweDAwLCAweDAwLCAweGM0LCAweDAwLCAweDgwLCAweDAwLCAweDAwLCAweDgwLCAweDcyLCAweGMxLCAweDg1LCAweGI2LAorCTB4MDAsIDB4MDAsIDB4YzQsIDB4MDAsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4YzEsIDB4ODUsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHhjNCwgMHgwMCwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHhkMiwgMHhjMSwgMHg4NSwgMHhiNiwKKwkweDE4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweDc5LCAweGUxLCAweDE2LCAweDM4LAorCTB4MDAsIDB4MDAsIDB4YzQsIDB4MDAsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MzIsIDB4ODAsIDB4OTcsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHhkNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyYywgMHhjOCwgMHhjMSwgMHg4MiwgMHg5NCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDA4LCAweDAwLCAweDA0LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4ZDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmMsIDB4YTgsIDB4YzEsIDB4ODIsIDB4OTQsCisJMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3OCwgMHg3OSwgMHgyMSwgMHgxNywgMHgzOCwKKwkweDAwLCAweDAwLCAweGQ2LCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDgwLCAweDMyLCAweDgwLCAweDk3LCAweGJjLAorCTB4MDAsIDB4MDAsIDB4ZDYsIDB4MDAsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MjIsIDB4ODAsIDB4OTcsIDB4YmMsCisJMHgxZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYywgMHgwMCwgMHgwOCwgMHg4OSwgMHg4ZCwgMHg3MiwgMHgzMCwKKwkweDA1LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBjLCAweDAwLCAweDAwLCAweGE5LCAweGRjLCAweDE3LCAweDM4LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTgsIDB4MjIsIDB4MDAsIDB4OTAsIDB4MzcsCisJMHgwMCwgMHgwMCwgMHhkNiwgMHgwMCwgMHg4MCwgMHgwMCwgMHg4NiwgMHg4MCwgMHgyMiwgMHgyNCwgMHg3YywgMHhiNiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweDA5LCAweDA1LCAweDgwLCAweDMwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDIsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ODIsIDB4YmEsIDB4OTcsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNiwgMHgwMSwgMHgwMCwgMHg4MCwgMHg5MiwgMHhiYSwgMHg5NywgMHhiYywKKwkweDAwLCAweDAwLCAweDczLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDA5LCAweDA1LCAweDgwLCAweGQwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NjgsIDB4MDIsIDB4MDUsIDB4ODAsIDB4YjAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiMCwgMHgwMiwgMHgwMCwgMHgwMiwgMHgzMiwKKwkweDAwLCAweDAwLCAweGE0LCAweDAzLCAweDA0LCAweDAwLCAweDAwLCAweGRjLCAweDQzLCAweDYwLCAweDNkLCAweGIzLAorCTB4MTgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NzMsIDB4OGEsIDB4MDMsIDB4MzksCisJMHhkMiwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjMCwgMHgwMiwgMHgwMCwgMHgzNiwgMHg5MiwKKwkweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA5LCAweDAwLCAweDM2LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4ZTIsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4NTksIDB4MDAsIDB4ODAsIDB4ZDcsCisJMHgwMCwgMHgwMCwgMHhkZCwgMHgwMCwgMHgxMiwgMHgwMSwgMHgwMCwgMHg2MCwgMHgwOCwgMHg0MCwgMHgyMywgMHhiMiwKKwkweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA5LCAweDAwLCAweDM2LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4ZTIsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDksIDB4MDAsIDB4ODAsIDB4ZDIsCisJMHgwMCwgMHg4MiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwOCwgMHg4MCwgMHgzNiwgMHgzMiwKKwkweDAwLCAweDAwLCAweGNkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVjLCAweDFmLCAweGMwLCAweGY1LCAweDlhLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MjQsIDB4MDgsIDB4MDAsIDB4MjMsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHgyMCwgMHgwOCwgMHhjMCwgMHgyMywgMHhiMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDE4LCAweDA4LCAweDgwLCAweDIzLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjAsIDB4MDIsIDB4MDAsIDB4MDIsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHhlNCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHhkYywgMHg0MywgMHg2MCwgMHgzZCwgMHhiMywKKwkweDE4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDczLCAweDhhLCAweDAzLCAweDM5LAorCTB4ZTAsIDB4MDAsIDB4MzYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YzAsIDB4MDIsIDB4MDAsIDB4MzYsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiMCwgMHgwMiwgMHgwMCwgMHg4NSwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweDAyLCAweDgwLCAweDAxLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MzIsCisJMHgwMCwgMHhjMCwgMHhmNCwgMHgwMCwgMHgxOCwgMHgwMSwgMHgwMCwgMHgwYywgMHhhOCwgMHhjZCwgMHgzZSwgMHhiMiwKKwkweDIwLCAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDA4LCAweDgwLCAweDM2LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWMsIDB4MWYsIDB4YzAsIDB4ZjUsIDB4M2EsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHgzOCwgMHgwMiwgMHg4MCwgMHg4MSwgMHhiMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDNjLCAweDAyLCAweDAwLCAweDgyLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzAsIDB4MDIsIDB4NDAsIDB4ODIsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzNCwgMHgwMiwgMHgwMCwgMHg4NiwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweDA5LCAweDA1LCAweDgwLCAweDMwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDIsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ODIsIDB4YmEsIDB4OTcsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNiwgMHgwMSwgMHgwMCwgMHg4MCwgMHg5MiwgMHhiYSwgMHg5NywgMHhiYywKKwkweDAwLCAweDAwLCAweDczLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDA5LCAweDA1LCAweDgwLCAweGQwLAorCTB4MDAsIDB4MDAsIDB4YTQsIDB4MDMsIDB4MTIsIDB4MDEsIDB4MDAsIDB4NjgsIDB4MDIsIDB4MDUsIDB4ODAsIDB4YjAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAwLCAweDc4LCAweDA5LCAweDAwLCAweDcyLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTYsIDB4MDAsIDB4MDAsIDB4MjksIDB4YzEsIDB4NzIsIDB4M2MsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMCwgMHgwMCwgMHgwNywgMHg4MCwgMHg4MSwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDIwLCAweDAwLCAweDAwLCAweDA3LCAweDAwLCAweDgyLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjgsIDB4MDAsIDB4MDAsIDB4MDcsIDB4ODAsIDB4OTcsIDB4MzIsCisJMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgxNywgMHgyMCwgMHg5MCwgMHgzOSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDM4LCAweDAwLCAweDAwLCAweDA3LCAweGMwLCAweDgyLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNywgMHg0MCwgMHg4MCwgMHgzMiwKKwkweDAwLCAweDAwLCAweGZmLCAweDAwLCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweGEyLCAweGMxLCAweDgyLCAweGI2LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4NTcsIDB4MDAsIDB4ODAsIDB4OTcsCisJMHgwNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwNywgMHhhMCwgMHgwNCwgMHgzOSwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDEwLCAweDAwLCAweDAwLCAweDA3LCAweDQwLCAweDgyLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDAsIDB4ODYsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHg1MCwgMHhmMiwgMHhjMSwgMHgzOCwgMHhiNCwKKwkweDE4LCAweDAwLCAweDM2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDczLCAweDBhLCAweDAzLCAweGY5LAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NjgsIDB4MDIsIDB4MDUsIDB4ODAsIDB4YjAsCisJMHgwMCwgMHgwMCwgMHg3MywgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwOSwgMHgwNSwgMHg4MCwgMHhkMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweDA5LCAweDA1LCAweDgwLCAweDMwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDIsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ODIsIDB4YmEsIDB4OTcsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNiwgMHgwMSwgMHgwMCwgMHg4MCwgMHg5MiwgMHhiYSwgMHg5NywgMHhiYywKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDQ4LCAweDAyLCAweGMwLCAweDgwLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4Y2EsIDB4MDEsIDB4MDAsIDB4MDgsIDB4ZTgsIDB4ODEsIDB4ODAsIDB4MzQsCisJMHgwMCwgMHgwMCwgMHhhNCwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHhiMCwgMHgwMiwgMHgwMCwgMHg4NSwgMHg5MiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDQ1LCAweDkwLCAweDMwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MTIsIDB4MDAsIDB4MjgsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMSwgMHgwMCwgMHg3OCwgMHgwOSwgMHhjMCwgMHgyMSwgMHhiMiwKKwkweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDkzLCAweDQwLCAweDAxLCAweDM5LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTQsIDB4MDAsIDB4MDAsIDB4YjAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgxMSwgMHgwMSwgMHhmMCwgMHgwMSwgMHgwMCwgMHhkOCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDAxLCAweDAwLCAweDU5LCAweGMwLCAweDZlLCAweDM3LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDEsIDB4NzgsIDB4MTksIDB4YzAsIDB4NmUsIDB4M2EsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZSwgMHgwNCwgMHgwMSwgMHhlYywgMHgwNiwgMHhiZCwgMHg5NywgMHgzMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDAwLCAweDAwLCAweGY0LCAweDFlLCAweDQwLCAweGVmLCAweDNhLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4NDAsIDB4MDksIDB4MzIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgzNiwgMHhiYywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDc3LCAweGMwLCAweDI5LCAweDM3LAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MTcsIDB4M2QsIDB4OTAsIDB4YmEsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMCwgMHgwMCwgMHgwNywgMHg4MCwgMHhmNCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDQwLCAweGYyLCAweGMxLCAweDM4LCAweGI0LAorCTB4MGIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDksIDB4MDAsIDB4MzYsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHhlMiwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwOSwgMHg4MCwgMHg4MywgMHhkMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGIwLCAweDcyLCAweDAwLCAweDJiLCAweDMwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4ODAsIDB4M2QsIDB4MzIsCisJMHgxOCwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHgwYSwgMHgwMywgMHhmOSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ0LCAweDAyLCAweDAwLCAweDAwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4ODAsIDB4MmQsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHhhNCwgMHgwMSwgMHg4MCwgMHgzOCwgMHgwMCwgMHg4MCwgMHgyMiwgMHhjMCwgMHg3MiwgMHhiNiwKKwkweDAwLCAweDAwLCAweDI3LCAweDAxLCAweDEyLCAweDAwLCAweDAwLCAweGM4LCAweDAyLCAweDAwLCAweDIwLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4MmMsIDB4MDEsIDB4MTIsIDB4MDEsIDB4MDAsIDB4NWMsIDB4MDgsIDB4ODAsIDB4MjAsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHg1YywgMHgwMiwgMHg4MCwgMHgyYywgMHhiMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDFmLCAweDgwLCAweGZmLCAweDNhLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjAsIDB4NzIsIDB4MDAsIDB4ODUsIDB4MzAsCisJMHgwMCwgMHgwMCwgMHg4OSwgMHgwMSwgMHgwNCwgMHgwMCwgMHgwMCwgMHhkYywgMHg0MywgMHg2MCwgMHgzZCwgMHhiMywKKwkweDE4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDczLCAweDhhLCAweDAzLCAweDM5LAorCTB4MjgsIDB4MDEsIDB4MzYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YzAsIDB4MDIsIDB4MDAsIDB4MzYsIDB4OTIsCisJMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4OCwgMHhjZCwgMHg4NSwgMHgzNywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDIwLCAweDA4LCAweDAwLCAweDcyLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MjQsIDB4MDgsIDB4MDAsIDB4NzIsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgxMCwgMHgwMCwgMHg2YywgMHgwOCwgMHgwMCwgMHg3MiwgMHhiMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAwLCAweDRjLCAweDA4LCAweDAwLCAweDcyLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MjAsIDB4MDAsIDB4MTgsIDB4MDgsIDB4MDAsIDB4NzIsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMCwgMHgyOCwgMHgwOCwgMHgwMCwgMHg3MiwgMHgzMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAyLCAweDAwLCAweDAwLCAweDgwLCAweDUyLCAweGJkLCAweDgyLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjgsIDB4MDAsIDB4MzAsIDB4MDgsIDB4MDAsIDB4NzIsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2MCwgMHgwOCwgMHg4MCwgMHg4MiwgMHgzMiwKKwkweDAwLCAweDAwLCAweDNkLCAweDAxLCAweDA2LCAweDAwLCAweDAwLCAweDgwLCAweDYyLCAweGEwLCAweDgyLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4OWYsIDB4M2MsIDB4MDAsIDB4MTQsIDB4MjgsIDB4ODAsIDB4NzIsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwMCwgMHgwNiwgMHgzMiwKKwkweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDc3LCAweDRhLCAweDA5LCAweDM5LAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDAsIDB4ODIsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjYSwgMHgxOSwgMHgwMCwgMHgwMCwgMHgwNywgMHg0MCwgMHg4MiwgMHgzMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDQwLCAweGYyLCAweGMxLCAweDM4LCAweGI0LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MDIsIDB4NDAsIDB4MDAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHg2NCwgMHgwMSwgMHgwNCwgMHgzOCwgMHgwMCwgMHg3OCwgMHhkOSwgMHhjNSwgMHg3MiwgMHhiMCwKKwkweDAwLCAweDAwLCAweDQxLCAweDAxLCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDgwLCAweDk3LCAweGI2LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4ODIsIDB4ODAsIDB4MmYsIDB4MzQsCisJMHgwMCwgMHgwMCwgMHg0MywgMHgwMSwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgxMiwgMHg4MCwgMHg5NywgMHhiNiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDkyLCAweDgwLCAweDJmLCAweDM0LAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4NDAsIDB4MmQsIDB4YmMsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzOCwgMHgwMCwgMHgzYywgMHhiOCwgMHgxYywgMHgxNywgMHgzOCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDNjLCAweDI4LCAweGMwLCAweDgzLCAweDM3LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4M2EsIDB4MDAsIDB4MmMsIDB4MDgsIDB4YzAsIDB4NzIsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYywgMHhiOCwgMHhlMCwgMHg4MywgMHgzYSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGNiLCAweDI5LCAweDAwLCAweDIwLCAweDA3LCAweDAwLCAweDAwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4NjMsIDB4MDEsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4YzAsIDB4ODEsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzNCwgMHg3OCwgMHhhMCwgMHg4MSwgMHgzZSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFjLCAweGQ4LCAweGUwLCAweDgxLCAweDNjLAorCTB4MDAsIDB4MDAsIDB4NTEsIDB4MDEsIDB4MDYsIDB4M2EsIDB4MDAsIDB4ODAsIDB4YjIsIDB4NWMsIDB4ODMsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzYSwgMHgwMCwgMHgwMCwgMHg4OSwgMHhjMSwgMHg3MiwgMHgzNywKKwkweDA3LCAweDAwLCAweDUwLCAweDAxLCAweDJiLCAweDAxLCAweDAwLCAweDA0LCAweDc5LCAweDBhLCAweDA0LCAweGI5LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4Y2IsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MTksIDB4NDEsIDB4OTAsIDB4MzQsCisJMHgwMCwgMHgwMCwgMHg1NCwgMHgwMSwgMHgwMCwgMHgzYSwgMHgwMCwgMHgyYywgMHgwNywgMHgwMCwgMHgwMCwgMHg5MiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDNhLCAweDAwLCAweDJjLCAweGQ3LCAweGUwLCAweDcyLCAweDNjLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDksIDB4MDAsIDB4MDAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwOSwgMHgwMCwgMHgwMCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA3LCAweDY0LCAweDgzLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDAsIDB4ODAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwNywgMHhjMCwgMHg4NiwgMHhiMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAwLCAweDAwLCAweDA3LCAweGMwLCAweDg0LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4NzMsIDB4MDEsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjgsIDB4ZDgsIDB4YTAsIDB4ODIsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwOSwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweDIwLCAweDgwLCAweDNhLAorCTB4MDAsIDB4MDAsIDB4NWUsIDB4MDEsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NzIsIDB4ODAsIDB4MmQsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHg0NCwgMHgxMiwgMHhlNCwgMHgzOCwgMHhiMiwKKwkweDAwLCAweDAwLCAweDVmLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweDEyLCAweDgwLCAweDJkLCAweDlhLAorCTB4MDAsIDB4MDAsIDB4ZDcsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4ZjksIDB4NDEsIDB4OTAsIDB4ZjQsCisJMHgwMCwgMHgwMCwgMHg2MSwgMHgwMSwgMHgwNCwgMHgwMCwgMHgwMCwgMHgxOCwgMHhkOCwgMHhhMCwgMHg4MSwgMHhiYywKKwkweDAwLCAweDAwLCAweDQ5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDZjLCAweGQ4LCAweGUwLCAweDg2LCAweDlhLAorCTB4MDAsIDB4MDAsIDB4ODQsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4MDgsIDB4ODAsIDB4MmQsIDB4ZjIsCisJMHgwMCwgMHgwMCwgMHg0OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHg5MiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGNiLCAweDE5LCAweDAwLCAweDIwLCAweDA3LCAweDAwLCAweDAwLCAweDMyLAorCTB4MDcsIDB4MDAsIDB4NjYsIDB4MDEsIDB4MmIsIDB4MDEsIDB4MDAsIDB4MDQsIDB4NzksIDB4MGEsIDB4MDIsIDB4YjksCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjYiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgxOSwgMHg0MSwgMHg5MCwgMHgzNCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRkLCAweDAwLCAweDAwLCAweDAwLCAweGE3LCAweGEwLCAweDgxLCAweDNlLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDAsIDB4ODAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwNywgMHhjMCwgMHg4NiwgMHhiMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAwLCAweDAwLCAweDA3LCAweGMwLCAweDg0LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4NzMsIDB4MDEsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjgsIDB4ZDgsIDB4YTAsIDB4ODIsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg2MiwgMHg2MCwgMHg4MywgMHhiYywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweDIwLCAweDgwLCAweDNhLAorCTB4MDAsIDB4MDAsIDB4NzAsIDB4MDEsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NzIsIDB4ODAsIDB4MmQsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHg0NCwgMHgxMiwgMHhlNCwgMHgzOCwgMHhiMiwKKwkweDAwLCAweDAwLCAweDcxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweDEyLCAweDgwLCAweDJkLCAweDlhLAorCTB4MDAsIDB4MDAsIDB4ZDcsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4ZjksIDB4NDEsIDB4OTAsIDB4ZjQsCisJMHgwMCwgMHgwMCwgMHg4NCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHgwOCwgMHg4MCwgMHgyZCwgMHhmMiwKKwkweDAwLCAweDAwLCAweDY0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDMwLCAweDA4LCAweDAwLCAweDAwLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4YTIsIDB4ODAsIDB4MmYsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHhmOSwgMHg0MSwgMHg5MCwgMHgzNCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDQ0LCAweDEyLCAweGU0LCAweDM4LCAweGIyLAorCTB4MTgsIDB4MDAsIDB4MzYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NzMsIDB4MGEsIDB4MDMsIDB4ZjksCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHg4MCwgMHgyZCwgMHhiYywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAwLCAweDA0LCAweDA5LCAweDgwLCAweDczLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjgsIDB4MDAsIDB4MDgsIDB4ODksIDB4ODAsIDB4NzMsIDB4MzcsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwNywgMHgwMCwgMHg4NiwgMHgzMiwKKwkweDQxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA2LCAweDAwLCAweDhjLCAweDA3LCAweDAwLCAweDM2LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4N2YsIDB4MDEsIDB4MjksIDB4MDgsIDB4MDAsIDB4ODAsIDB4MDcsIDB4YzAsIDB4ODUsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHg4MiwgMHgwMSwgMHgyOCwgMHgxMCwgMHgwMCwgMHg4YywgMHgwNywgMHgwMCwgMHgwMCwgMHhiMiwKKwkweDAwLCAweDAwLCAweDgzLCAweDAxLCAweDAwLCAweDEyLCAweDAwLCAweDg0LCAweDA3LCAweDAwLCAweDAwLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4OGMsIDB4ZjcsIDB4ZTAsIDB4ODIsIDB4M2EsCisJMHgwMCwgMHgwMCwgMHg4MiwgMHgwMSwgMHgyOCwgMHgxOCwgMHgwMCwgMHg4MCwgMHgwNywgMHg0MCwgMHg5MCwgMHhiMiwKKwkweDAwLCAweDAwLCAweDgzLCAweDAxLCAweDAwLCAweDEyLCAweDAwLCAweDg0LCAweDA3LCAweDAwLCAweDAwLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4MDAsIDB4ODQsIDB4MjcsIDB4ZTQsIDB4ODIsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiMCwgMHg3MiwgMHgwMCwgMHg4NSwgMHgzMCwKKwkweDAwLCAweDAwLCAweDg3LCAweDAxLCAweDA0LCAweDAwLCAweDAwLCAweGRjLCAweDQzLCAweDYwLCAweDNkLCAweGIzLAorCTB4MTgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NzMsIDB4OGEsIDB4MDMsIDB4MzksCisJMHg4MywgMHgwMSwgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjMCwgMHgwMiwgMHgwMCwgMHgzNiwgMHg5MiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGIwLCAweDAyLCAweDAwLCAweDg1LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NWMsIDB4NTIsIDB4ODEsIDB4MmMsIDB4YjQsCisJMHgwMCwgMHgwMCwgMHg4OSwgMHgwMSwgMHhmMiwgMHgwMSwgMHgwMCwgMHgwOCwgMHhlOCwgMHgwMSwgMHgwMCwgMHhiNCwKKwkweDAwLCAweDAwLCAweDhhLCAweDAxLCAweGYwLCAweDAxLCAweDAwLCAweDA4LCAweDM4LCAweDgxLCAweDgwLCAweGI0LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDAsIDB4MDAsIDB4ZjQsIDB4MWUsIDB4NDAsIDB4ZWYsIDB4M2MsCisJMHgwMCwgMHgwMCwgMHg5MywgMHgwMSwgMHgwYiwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDNiLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4OGUsIDB4MDEsIDB4YjksIDB4MDAsIDB4MDAsIDB4NzgsIDB4YzksIDB4M2IsIDB4M2EsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg5MiwgMHgwMSwgMHgwMiwgMHgwMCwgMHgwMCwgMHg4MCwgMHg4MiwgMHg4MCwgMHg5NywgMHhiYywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE5LCAweDAwLCAweDAwLCAweDA4LCAweDA4LCAweDAwLCAweDAwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4YTQsIDB4MDMsIDB4ZTIsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOSwgMHgwMCwgMHgwMCwgMHhmMCwgMHgwZSwgMHgwMCwgMHgzYSwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGUyLCAweDAwLCAweDAwLCAweGQ4LCAweDAyLCAweDgwLCAweDAxLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzgsIDB4MDksIDB4YmEsIDB4ODMsIDB4M2MsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3OCwgMHgwOSwgMHhiZCwgMHg5NywgMHgzMCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDA5LCAweDAwLCAweGY0LCAweGJkLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4YTQsIDB4OTcsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwZSwgMHg4MCwgMHg4MywgMHgzMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAwLCAweDAwLCAweDgwLCAweDIyLCAweDdhLCAweGU4LCAweGJhLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDAsIDB4ZTgsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3OSwgMHhjMCwgMHgyOSwgMHgzNywKKwkweDYwLCAweDIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDg5LCAweDBkLCAweDkwLCAweDNhLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4Y2EsIDB4MDEsIDB4MDAsIDB4ZDgsIDB4MTIsIDB4ODAsIDB4MmQsIDB4M2EsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwMCwgMHgwMSwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDA3LCAweDAwLCAweDkwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4NDAsIDB4ZTgsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMCwgMHgwMCwgMHgwNywgMHg4MCwgMHhlOCwgMHgzMiwKKwkweDAwLCAweDAwLCAweGE0LCAweDAzLCAweDEyLCAweDAxLCAweDAwLCAweDQ4LCAweGYyLCAweGMxLCAweDM4LCAweGI0LAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHg0MCwgMHgyZCwgMHhiYywKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDgwLCAweDJkLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NzIsIDB4ODAsIDB4MmYsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMCwgMHg3OCwgMHgwOCwgMHg4MCwgMHg3MiwgMHgzMiwKKwkweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDM4LCAweDAwLCAweDU0LCAweGE4LCAweDVjLCAweDE2LCAweDM4LAorCTB4MGIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzgsIDB4MDAsIDB4MmMsIDB4YTgsIDB4ZGMsIDB4MTYsIDB4MzgsCisJMHgxNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYywgMHg4OCwgMHg0ZCwgMHg4NSwgMHgzYSwKKwkweDIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA5LCAweDAwLCAweDM2LCAweDMyLAorCTB4MTAsIDB4MDAsIDB4ZTIsIDB4MTAsIDB4MDAsIDB4MzgsIDB4MDAsIDB4MTQsIDB4YTksIDB4OWMsIDB4ODcsIDB4ZDksCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHgwOCwgMHgwMCwgMHg3MiwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDAwLCAweDI0LCAweDA4LCAweDAwLCAweDcyLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4NmMsIDB4MDgsIDB4MDAsIDB4NzIsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMCwgMHg0YywgMHgwOCwgMHgwMCwgMHg3MiwgMHgzMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDIwLCAweDAwLCAweDE4LCAweDA4LCAweDAwLCAweDcyLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjgsIDB4MDAsIDB4MzAsIDB4MDgsIDB4MDAsIDB4NzIsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg5ZiwgMHgzYywgMHgwMCwgMHgxNCwgMHgxOCwgMHg4MCwgMHg3MiwgMHhiYywKKwkweDAwLCAweDAwLCAweGJiLCAweDAxLCAweDA0LCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDQwLCAweDgxLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MTgsIDB4NDAsIDB4ODEsIDB4M2MsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwMCwgMHgwNiwgMHgzMiwKKwkweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDc3LCAweDRhLCAweDA5LCAweDM5LAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDAsIDB4ODIsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjYSwgMHgxOSwgMHgwMCwgMHgwMCwgMHgwNywgMHg0MCwgMHg4MiwgMHgzMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDQwLCAweGYyLCAweGMxLCAweDM4LCAweGI0LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MDIsIDB4NDAsIDB4MDAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2NCwgMHg3OCwgMHhjMCwgMHgyOSwgMHgzNywKKwkweDAyLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDY0LCAweDg4LCAweDRkLCAweDg2LCAweDNhLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRkLCAweDAwLCAweDAwLCAweDAwLCAweDc3LCAweGEwLCAweDgxLCAweDNlLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDcsIDB4NDAsIDB4ODYsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwNywgMHhjMCwgMHg4NiwgMHhiMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAwLCAweDAwLCAweDA3LCAweGMwLCAweDg0LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4ZDYsIDB4MDEsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MWMsIDB4ZDgsIDB4ZTAsIDB4ODEsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwOSwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDY0LCAweGQ4LCAweDYwLCAweDg2LCAweDNhLAorCTB4MDAsIDB4MDAsIDB4Y2EsIDB4MDEsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NzIsIDB4ODAsIDB4MmQsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwMiwgMHhjMCwgMHgzOCwgMHhiMiwKKwkweDAwLCAweDAwLCAweGQyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweDEyLCAweDgwLCAweDJkLCAweDlhLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjIsIDB4YzEsIDB4MzgsIDB4YjQsCisJMHgxOCwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHgwYSwgMHgwMywgMHhmOSwKKwkweDAwLCAweDAwLCAweGQwLCAweDAxLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDgwLCAweDJkLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4YTIsIDB4ODAsIDB4MmYsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHhjYiwgMHgwMSwgMHg2NywgMHgwMCwgMHgwMCwgMHhmOCwgMHhhMiwgMHg4MCwgMHgyZiwgMHhiNSwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweGU4LCAweDAyLCAweGMwLCAweDIxLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4NzIsIDB4ODAsIDB4MmQsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkOCwgMHgwMiwgMHg0MCwgMHgwMCwgMHgzMiwKKwkweDAwLCAweDAwLCAweGQ0LCAweDAxLCAweDA0LCAweDAwLCAweDAwLCAweDE4LCAweGQ4LCAweGEwLCAweDgxLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NmMsIDB4ZDgsIDB4ZTAsIDB4ODYsIDB4OWEsCisJMHgwMCwgMHgwMCwgMHgzMiwgMHgwZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHgwOCwgMHg4MCwgMHgyZCwgMHhmMiwKKwkweDAwLCAweDAwLCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDMwLCAweDA4LCAweDAwLCAweDAwLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjIsIDB4YzEsIDB4MzgsIDB4YjQsCisJMHgxOCwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHgwYSwgMHgwMywgMHhmOSwKKwkweDAwLCAweDAwLCAweGRjLCAweDAxLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDgwLCAweDJkLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4YTIsIDB4ODAsIDB4MmYsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHhkNywgMHgwMSwgMHg2NywgMHgwMCwgMHgwMCwgMHhmOCwgMHhhMiwgMHg4MCwgMHgyZiwgMHhiNSwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweGU4LCAweDAyLCAweGMwLCAweDIxLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4ZTgsIDB4MDEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4ODQsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkNCwgMHgwMiwgMHg0MCwgMHgwMCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE0LCAweDIyLCAweDQwLCAweDg1LCAweDNhLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDAsIDB4NDAsIDB4ODgsIDB4Y2QsIDB4NzQsIDB4MzYsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgyOCwgMHgwMCwgMHg4NCwgMHgzNywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ0LCAweDAyLCAweDAwLCAweDAwLCAweDMyLAorCTB4MTQsIDB4MDAsIDB4ZTgsIDB4MDEsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MWMsIDB4ODgsIDB4MGQsIDB4ODQsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwOSwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweDA5LCAweDYxLCAweDg1LCAweDNhLAorCTB4ODAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDYsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ODIsIDB4OGQsIDB4OTcsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2NCwgMHhkOCwgMHg2MCwgMHg4NiwgMHgzYSwKKwkweDAwLCAweDAwLCAweGQyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweDAyLCAweDQwLCAweDAwLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4ZWEsIDB4MDEsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MTgsIDB4ZDgsIDB4YTAsIDB4ODEsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHhlYywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2YywgMHhkOCwgMHhlMCwgMHg4NiwgMHg5YSwKKwkweDAwLCAweDAwLCAweDMyLCAweDBmLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDA4LCAweDgwLCAweDJkLCAweGYyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkNCwgMHgwMiwgMHg0MCwgMHgwMCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE0LCAweDIyLCAweGMwLCAweDgyLCAweDNhLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4M2MsIDB4YjgsIDB4NjAsIDB4ODUsIDB4M2MsCisJMHgwNCwgMHgwMCwgMHhmMiwgMHgwMSwgMHg4MSwgMHgwMCwgMHgwMCwgMHg2MCwgMHg4OCwgMHhjZCwgMHg3NCwgMHhiNiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDI4LCAweGY4LCAweGEwLCAweDc1LCAweDNjLAorCTB4MDAsIDB4MDAsIDB4ZjMsIDB4MDEsIDB4MDAsIDB4MDgsIDB4MDAsIDB4NzQsIDB4MDgsIDB4ODAsIDB4NzUsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwMCwgMHgyOCwgMHhmOCwgMHhhMCwgMHg3NSwgMHgzYywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDI4LCAweDA4LCAweGExLCAweDgyLCAweDNjLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTQsIDB4ZjIsIDB4NjAsIDB4MmEsIDB4M2EsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwMCwgMHg0OCwgMHgwOCwgMHgwMCwgMHg3NSwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDIwLCAweDAwLCAweDdjLCAweDA4LCAweDgwLCAweDc1LCAweDMyLAorCTB4MDksIDB4MDAsIDB4ZjksIDB4MDEsIDB4MDQsIDB4MWEsIDB4MDAsIDB4NzAsIDB4ODgsIDB4Y2QsIDB4NzQsIDB4YjAsCisJMHgwOSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYSwgMHgwMCwgMHg0YywgMHg4NywgMHhjZCwgMHg3NCwgMHgzMSwKKwkweDdmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDY0LCAweDg4LCAweDRkLCAweDg2LCAweDMxLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjQsIDB4MjgsIDB4NDAsIDB4ODYsIDB4M2EsCisJMHgyMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOSwgMHgwMCwgMHgzNiwgMHgzMiwKKwkweDAwLCAweDAwLCAweGUyLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDA5LCAweDgwLCAweDgyLCAweGQyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MTIsIDB4MDAsIDB4MDAsIDB4YzgsIDB4MDIsIDB4MDAsIDB4MjAsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHgwMSwgMHgwMiwgMHgxMiwgMHgwMSwgMHgwMCwgMHg1YywgMHgwOCwgMHg4MCwgMHgyMCwgMHhiMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDVjLCAweDAyLCAweDgwLCAweDJjLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4MjcsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDQsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkNCwgMHgwMiwgMHg0MCwgMHgwMCwgMHgzMiwKKwkweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDg4LCAweGNkLCAweDg1LCAweDM3LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWMsIDB4ZTgsIDB4YTEsIDB4ODIsIDB4M2UsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhNCwgMHgyMiwgMHhjMCwgMHg4MiwgMHgzYSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDY4LCAweDA4LCAweGUxLCAweDgxLCAweDNhLAorCTB4MDAsIDB4MDAsIDB4MGIsIDB4MDIsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4NDIsIDB4MDAsIDB4ODYsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwMCwgMHg1OCwgMHgwNywgMHg0MCwgMHg4NywgMHgzMiwKKwkweDAwLCAweDAwLCAweDBhLCAweDAyLCAweDhmLCAweDAxLCAweDAwLCAweDc0LCAweDE4LCAweDQwLCAweDg3LCAweGJhLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzQsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwZCwgMHgwMiwgMHgwMCwgMHgwNCwgMHgwMCwgMHg1OCwgMHhmNywgMHhhMCwgMHg4NiwgMHg5YSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweGY5LCAweGEwLCAweDg2LCAweDNhLAorCTB4MjgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDAsIDB4NTgsIDB4ODcsIDB4OGQsIDB4OTcsIDB4M2MsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhNCwgMHgyMiwgMHg0MCwgMHg4NSwgMHgzYSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDAwLCAweDUwLCAweDA3LCAweDgwLCAweDg0LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MTEsIDB4MDIsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4NzIsIDB4YTAsIDB4ODIsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYSwgMHgwMCwgMHg0YywgMHhjNywgMHhlMSwgMHg3NCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ4LCAweDc4LCAweGEwLCAweDg0LCAweDNhLAorCTB4MDAsIDB4MDAsIDB4MTQsIDB4MDIsIDB4OTAsIDB4MDEsIDB4MDAsIDB4NzgsIDB4ZjksIDB4YTEsIDB4ODYsIDB4YmEsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3OCwgMHgxOSwgMHg4MCwgMHg5NywgMHgzYSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDIwLCAweDAwLCAweDU4LCAweDA3LCAweDgwLCAweDk3LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjgsIDB4NTgsIDB4YTEsIDB4ODYsIDB4M2EsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkOCwgMHgwMiwgMHg0MCwgMHgwMCwgMHgzMiwKKwkweDE4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGI3LCAweDYwLCAweDg1LCAweDM5LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDAsIDB4ODAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwNywgMHg0MCwgMHg4NiwgMHgzMiwKKwkweDAwLCAweDAwLCAweDFhLCAweDAyLCAweDEyLCAweDAwLCAweDAwLCAweDRjLCAweDAyLCAweGMwLCAweDM4LCAweGIyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MDIsIDB4ODAsIDB4MDAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwMCwgMHg4NCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDA4LCAweDAwLCAweDAwLCAweDU3LCAweDIxLCAweDgwLCAweDNhLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4NTcsIDB4NjEsIDB4ODYsIDB4M2EsCisJMHgwMCwgMHgwMCwgMHgxZiwgMHgwMiwgMHgxMiwgMHgwMCwgMHgwMCwgMHg0YywgMHhmMiwgMHhjMSwgMHgzOCwgMHhiNCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDA4LCAweDgwLCAweDAwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MDIsIDB4YzAsIDB4MDAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkNCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGNiLCAweDE5LCAweDAwLCAweDIwLCAweDA3LCAweDAwLCAweDAwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MjEsIDB4ODAsIDB4M2EsCisJMHgwNywgMHgwMCwgMHgyNywgMHgwMiwgMHgyYiwgMHgwMSwgMHgwMCwgMHgwNCwgMHg3OSwgMHgwYSwgMHgwMiwgMHhiOSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGNiLCAweDAwLCAweDAwLCAweDA0LCAweDE5LCAweDQxLCAweDkwLCAweDM0LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzcsIDB4YTAsIDB4ODEsIDB4M2UsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwMCwgMHg4MCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDEwLCAweDAwLCAweDAwLCAweDA3LCAweGMwLCAweDg2LCAweGIyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDAsIDB4MDAsIDB4MDcsIDB4YzAsIDB4ODQsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyOCwgMHhkOCwgMHhhMCwgMHg4MiwgMHgzYywKKwkweDAwLCAweDAwLCAweDQxLCAweDAyLCAweDA0LCAweDAwLCAweDAwLCAweDFjLCAweGQ4LCAweGUwLCAweDgxLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4NjIsIDB4NjAsIDB4ODMsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkOCwgMHgyMCwgMHg4MCwgMHgzYSwKKwkweDAwLCAweDAwLCAweDMyLCAweDAyLCAweDA0LCAweDAwLCAweDAwLCAweDgwLCAweDcyLCAweDgwLCAweDJkLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NDQsIDB4MTIsIDB4ZTQsIDB4MzgsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHgzZiwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkOCwgMHgxMiwgMHg4MCwgMHgyZCwgMHg5YSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweGY5LCAweDQxLCAweDkwLCAweDM0LAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NDQsIDB4MTIsIDB4ZTQsIDB4MzgsIDB4YjIsCisJMHgxOCwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHgwYSwgMHgwMywgMHhmOSwKKwkweDAwLCAweDAwLCAweDNkLCAweDAyLCAweDA2LCAweDAxLCAweDAwLCAweDgwLCAweDIyLCAweDgwLCAweDJkLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4M2EsIDB4MDIsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4ODAsIDB4MmQsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHhhMiwgMHg4MCwgMHgyZiwgMHhiNiwKKwkweDAwLCAweDAwLCAweDM0LCAweDAyLCAweDY3LCAweDAwLCAweDAwLCAweGY4LCAweGEyLCAweDgwLCAweDJmLCAweGI1LAorCTB4MDAsIDB4MDAsIDB4MzUsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTgsIDB4MDIsIDB4YzAsIDB4MjEsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgyMiwgMHg4MCwgMHgyZCwgMHhiYywKKwkweDAwLCAweDAwLCAweDM0LCAweDAyLCAweDY3LCAweDAwLCAweDAwLCAweDgwLCAweDE4LCAweDAwLCAweDg4LCAweGJjLAorCTB4MDAsIDB4MDAsIDB4MzUsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTgsIDB4MDIsIDB4YzAsIDB4MjEsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg3MiwgMHg4MCwgMHgyZCwgMHhiYywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweDAyLCAweGMwLCAweDAwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MzIsIDB4MGYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4MDgsIDB4ODAsIDB4MmQsIDB4ZjIsCisJMHgwMCwgMHgwMCwgMHgyNSwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHg5MiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweGY5LCAweDQxLCAweDkwLCAweDM0LAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NDQsIDB4MTIsIDB4ZTQsIDB4MzgsIDB4YjIsCisJMHgxOCwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHgwYSwgMHgwMywgMHhmOSwKKwkweDAwLCAweDAwLCAweDQ4LCAweDAyLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDgwLCAweDJkLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4YTIsIDB4ODAsIDB4MmYsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHg0MywgMHgwMiwgMHg2NywgMHgwMCwgMHgwMCwgMHhmOCwgMHhhMiwgMHg4MCwgMHgyZiwgMHhiNSwKKwkweDAwLCAweDAwLCAweDQ0LCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweGU4LCAweDAyLCAweGMwLCAweDIxLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4NGIsIDB4MDIsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MTgsIDB4MDAsIDB4ODgsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg0MywgMHgwMiwgMHgxMiwgMHgwMCwgMHgwMCwgMHhlOCwgMHgwMiwgMHhjMCwgMHgyMSwgMHhiMiwKKwkweDAwLCAweDAwLCAweDQ0LCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4NDAsIDB4MmQsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg0ZiwgMHgwMiwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg0MiwgMHgwMCwgMHg4NiwgMHhiYywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweDAyLCAweDQwLCAweDAwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4ODksIDB4ODAsIDB4NzEsIDB4MzcsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkOCwgMHgwMiwgMHg4MCwgMHgwMCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDA5LCAweDgwLCAweDcxLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4NTMsIDB4MDIsIDB4OTAsIDB4MTksIDB4MDAsIDB4MDQsIDB4ZTksIDB4NWMsIDB4OTAsIDB4YmEsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgxOSwgMHg0MCwgMHg5MCwgMHgzYSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDA3LCAweDgwLCAweDg2LCAweDMyLAorCTB4NDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDYsIDB4MDAsIDB4OGMsIDB4MDcsIDB4MDAsIDB4MzYsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwMCwgMHg4MCwgMHgwNywgMHhjMCwgMHg4NSwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDAwLCAweDhjLCAweDA3LCAweDQwLCAweDg1LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDAsIDB4ODAsIDB4MDcsIDB4NDUsIDB4OTAsIDB4MzAsCisJMHgwMCwgMHgwMCwgMHg1YSwgMHgwMiwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg0MiwgMHgwMCwgMHg4NiwgMHhiYywKKwkweDAwLCAweDAwLCAweDViLCAweDAyLCAweDAwLCAweDEyLCAweDAwLCAweDg0LCAweDI3LCAweGU0LCAweDgyLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4MDAsIDB4ODQsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHg1ZiwgMHgwMiwgMHgyNywgMHgwMCwgMHgwMCwgMHhiMCwgMHgwMiwgMHgwMCwgMHg4NSwgMHhiMiwKKwkweDAwLCAweDAwLCAweDVmLCAweDAyLCAweDA0LCAweDAwLCAweDAwLCAweDgwLCAweDQyLCAweDYwLCAweDNkLCAweGIzLAorCTB4MTgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NzMsIDB4OGEsIDB4MDMsIDB4MzksCisJMHg1YiwgMHgwMiwgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjMCwgMHgwMiwgMHgwMCwgMHgzNiwgMHg5MiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDcyLCAweDgwLCAweDJmLCAweDM0LAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NWMsIDB4NTIsIDB4ODEsIDB4MmMsIDB4YjQsCisJMHgwMCwgMHgwMCwgMHg2NCwgMHgwMiwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHg4MCwgMHg4MiwgMHhiYywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGRjLCAweDAzLCAweDAwLCAweDAwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4ODksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDQsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHg2NywgMHgwMiwgMHgwNCwgMHgwMSwgMHgwMCwgMHgxOCwgMHhkOCwgMHhhMCwgMHg4MSwgMHhiYywKKwkweDAwLCAweDAwLCAweDMyLCAweDBmLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDA4LCAweDgwLCAweDJkLCAweGYyLAorCTB4MDAsIDB4MDAsIDB4ZmQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHhmZCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2YywgMHhkOCwgMHhlMCwgMHg4NiwgMHg5YSwKKwkweDA4LCAweDAwLCAweDAwLCAweDAwLCAweGM2LCAweDAxLCAweDAwLCAweGY4LCAweDkzLCAweDQwLCAweDAxLCAweDM5LAorCTB4MTksIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDksIDB4MDAsIDB4MzYsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHhlMiwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwOSwgMHg0MCwgMHg4MSwgMHhkMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDA4LCAweDQ1LCAweDgxLCAweDMwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDEsIDB4MDAsIDB4NzgsIDB4MDksIDB4YzAsIDB4MjEsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHhhMiwgMHg4MCwgMHgyZiwgMHhiNiwKKwkweDAwLCAweDAwLCAweGE0LCAweDAzLCAweDgwLCAweDAxLCAweDgwLCAweDgwLCAweDMyLCAweDBiLCAweDZhLCAweGI2LAorCTB4MDAsIDB4MDAsIDB4ZGMsIDB4MGUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4M2MsIDB4MDMsIDB4MDAsIDB4MzgsIDB4ZjIsCisJMHgwMCwgMHgwMCwgMHg3MiwgMHgwMiwgMHgwNCwgMHgwNiwgMHgwMSwgMHg4MCwgMHgwMiwgMHhjMCwgMHg2ZSwgMHhiYywKKwkweDAwLCAweDAwLCAweGExLCAweDAzLCAweDAwLCAweDA2LCAweDAxLCAweGVjLCAweDU2LCAweGUwLCAweDZlLCAweDlhLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YzQsIDB4MDcsIDB4MDEsIDB4ZWMsIDB4NTYsIDB4ZTAsIDB4NmUsIDB4M2EsCisJMHgwOCwgMHhjMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHg0MCwgMHhhMiwgMHhjZCwgMHgzOSwgMHhiMiwKKwkweDE4LCAweDAwLCAweDM2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDczLCAweDBhLCAweDAzLCAweGY5LAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDMsIDB4YjgsIDB4MDAsIDB4MDAsIDB4MDksIDB4YzAsIDB4NmUsIDB4YmQsCisJMHg3NywgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4OCwgMHg4MiwgMHgwZCwgMHg5MCwgMHgzYSwKKwkweDJlLCAweDAwLCAweDkzLCAweDA1LCAweDAwLCAweDAwLCAweDAwLCAweDFjLCAweDA4LCAweDAwLCAweDM2LCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgyYiwgMHgwMCwgMHg5MywgMHgwNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYywgMHgwOCwgMHgwMCwgMHgzNiwgMHg5MiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDM3LCAweDAwLCAweDkzLCAweDA1LCAweDAwLCAweDAwLCAweDAwLCAweDFjLCAweDA4LCAweDAwLCAweDM2LCAweDkyLAorCTB4MzgsIDB4MDAsIDB4OTMsIDB4MDUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWMsIDB4MDgsIDB4MDAsIDB4MzYsIDB4OTIsCisJMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg5MywgMHg0MCwgMHgwMSwgMHgzOSwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAxLCAweDAwLCAweDc4LCAweDA5LCAweGMwLCAweDIxLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4YTIsIDB4ODAsIDB4MmYsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg4MCwgMHgwMCwgMHg4MCwgMHg4MCwgMHgzMiwgMHgwYiwgMHg2YSwgMHhiNiwKKwkweDAwLCAweDAwLCAweGRjLCAweDBlLCAweDAwLCAweDAwLCAweDAwLCAweDNjLCAweDAzLCAweDAwLCAweDM4LCAweGYyLAorCTB4MDAsIDB4MDAsIDB4ODYsIDB4MDIsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NTIsIDB4NDAsIDB4ODIsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg2MiwgMHg0MCwgMHg4MiwgMHhiYywKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDA1LCAweDAxLCAweDgwLCAweDAyLCAweGMwLCAweDZlLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NDIsIDB4ODAsIDB4MmYsIDB4MzQsCisJMHgwOCwgMHhjMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHg0MCwgMHhhMiwgMHhjZCwgMHgzOSwgMHhiMiwKKwkweDE4LCAweDAwLCAweDM2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDczLCAweDBhLCAweDAzLCAweGY5LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MDIsIDB4ODAsIDB4MDEsIDB4MzIsCisJMHgwOSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOSwgMHgwMCwgMHgzNiwgMHgzMiwKKwkweDAwLCAweDAwLCAweGUyLCAweDEwLCAweDAwLCAweDA0LCAweDAxLCAweDE0LCAweDU5LCAweGMwLCAweDZlLCAweGQ3LAorCTB4MDIsIDB4MDAsIDB4OGYsIDB4MDIsIDB4MDQsIDB4YjgsIDB4MDAsIDB4ODAsIDB4ODIsIDB4Y2QsIDB4NmUsIDB4YmMsCisJMHgwOCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHhiOSwgMHgwMCwgMHg4MCwgMHg4MiwgMHhjZCwgMHg2ZSwgMHhiYywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDAxLCAweDM4LCAweDA4LCAweGMwLCAweDZlLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDYsIDB4MDEsIDB4ZWMsIDB4MDYsIDB4NDAsIDB4MDAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHg5MSwgMHgwMiwgMHhiNSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE1LCAweDAwLCAweDgwLCAweGEwLCAweDM2LCAweDBiLCAweDZhLCAweDM0LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjQsIDB4MDEsIDB4ZTgsIDB4MDYsIDB4YzAsIDB4MmMsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMSwgMHhlMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDgyLCAweDg1LCAweDJmLCAweDMwLAorCTB4MDAsIDB4MDAsIDB4OWQsIDB4MDUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWMsIDB4MDgsIDB4MDAsIDB4MzYsIDB4OTIsCisJMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg5MywgMHg0MCwgMHgwMSwgMHgzOSwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAxLCAweDAwLCAweDc4LCAweDA5LCAweGMwLCAweDIxLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4YTIsIDB4ODAsIDB4MmYsIDB4YjYsCisJMHg2MCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMSwgMHgwMCwgMHhmOCwgMHg4MiwgMHg4ZCwgMHgyZiwgMHhiMCwKKwkweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA5LCAweDAwLCAweDM2LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4ZTIsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDksIDB4NDAsIDB4ODEsIDB4ZDIsCisJMHgwMCwgMHgwMCwgMHhhMSwgMHgwMiwgMHg4MCwgMHgwMCwgMHg4MCwgMHg4MCwgMHgzMiwgMHgwYiwgMHg2YSwgMHhiNiwKKwkweDE3LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA5LCAweDAwLCAweDM2LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4ZTIsIDB4MTAsIDB4MDAsIDB4YjgsIDB4MDAsIDB4MTQsIDB4MDksIDB4YzAsIDB4NmUsIDB4ZDIsCisJMHgwMCwgMHgwMCwgMHhhNCwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweGRjLCAweDBlLCAweDAwLCAweDAwLCAweDAwLCAweDM4LCAweDAzLCAweDAwLCAweDM4LCAweGYyLAorCTB4MDAsIDB4MDAsIDB4YTQsIDB4MDIsIDB4MDQsIDB4MDIsIDB4MDEsIDB4ODAsIDB4MDIsIDB4YzAsIDB4NmUsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHhhMSwgMHgwMywgMHgwMCwgMHgwMiwgMHgwMSwgMHhlYywgMHg1NiwgMHhlMCwgMHg2ZSwgMHg5YSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGMwLCAweDAzLCAweDAxLCAweGVjLCAweDU2LCAweGUwLCAweDZlLCAweDNhLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4ODAsIDB4MmYsIDB4YjYsCisJMHgwMCwgMHhjMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHg0MCwgMHhhMiwgMHg4ZCwgMHgzOSwgMHhiMiwKKwkweDE4LCAweDAwLCAweDM2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDczLCAweDBhLCAweDAzLCAweGY5LAorCTB4MjAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MzksIDB4MDAsIDB4ODAsIDB4ODIsIDB4Y2QsIDB4NmUsIDB4YmMsCisJMHgxMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOSwgMHgwMCwgMHgzNiwgMHgzMiwKKwkweDAwLCAweDAwLCAweGUyLCAweDEwLCAweDAwLCAweDMwLCAweDAwLCAweDE0LCAweDA5LCAweDAwLCAweDZlLCAweGQyLAorCTB4MTUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDksIDB4MDAsIDB4MzYsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHhlMiwgMHgxMCwgMHgwMCwgMHgyMCwgMHgwMSwgMHgxNCwgMHgwOSwgMHgwMCwgMHg2ZSwgMHhkMiwKKwkweDFiLCAweDAwLCAweGFmLCAweDAyLCAweDM4LCAweDAxLCAweDAwLCAweDEwLCAweDA5LCAweDAwLCAweDM2LCAweGIyLAorCTB4MDAsIDB4MDAsIDB4ZTIsIDB4MTAsIDB4MDAsIDB4MzAsIDB4MDEsIDB4MTQsIDB4MDksIDB4MDAsIDB4NmUsIDB4ZDIsCisJMHgxOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOSwgMHgwMCwgMHgzNiwgMHgzMiwKKwkweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDc5LCAweDBiLCAweDE0LCAweDM4LAorCTB4MTAsIDB4MDAsIDB4ZTIsIDB4MTAsIDB4MDAsIDB4NTAsIDB4MDEsIDB4MTQsIDB4YTksIDB4NWIsIDB4OTEsIDB4ZDksCisJMHgwMCwgMHgwMCwgMHhiZSwgMHgwMiwgMHgzOCwgMHgyOCwgMHgwMCwgMHgxOCwgMHgwOSwgMHgwMCwgMHg2ZSwgMHhiMiwKKwkweDAwLCAweDAwLCAweGI2LCAweDAyLCAweDA0LCAweDIxLCAweDAxLCAweDA4LCAweDY5LCAweDI0LCAweDZlLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDksIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4YjAsCisJMHgwMywgMHgwMCwgMHg5ZCwgMHgwNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYywgMHgwOCwgMHgwMCwgMHgzNiwgMHg5MiwKKwkweDAwLCAweDAwLCAweGJhLCAweDAyLCAweDAyLCAweDMwLCAweDAwLCAweDgwLCAweDgyLCAweDliLCAweDkwLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4YjksIDB4MDIsIDB4MDYsIDB4MDMsIDB4MDEsIDB4ODAsIDB4MTIsIDB4YzAsIDB4NmUsIDB4YmMsCisJMHgwNCwgMHgwMCwgMHg5ZCwgMHgwNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYywgMHgwOCwgMHgwMCwgMHgzNiwgMHg5MiwKKwkweDA1LCAweDAwLCAweDlkLCAweDA1LCAweDAwLCAweDAwLCAweDAwLCAweDFjLCAweDA4LCAweDAwLCAweDM2LCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MzAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4NmUsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHhiZCwgMHgwMiwgMHgwNiwgMHgwMywgMHgwMSwgMHg4MCwgMHgxMiwgMHhjMCwgMHg2ZSwgMHhiYywKKwkweDBhLCAweDAwLCAweDlkLCAweDA1LCAweDAwLCAweDAwLCAweDAwLCAweDFjLCAweDA4LCAweDAwLCAweDM2LCAweDkyLAorCTB4MGIsIDB4MDAsIDB4OWQsIDB4MDUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWMsIDB4MDgsIDB4MDAsIDB4MzYsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHhjMSwgMHgwMiwgMHgwNCwgMHgyMSwgMHgwMSwgMHgwOCwgMHg2OSwgMHgyNCwgMHg2ZSwgMHhiYywKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA5LCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGIwLAorCTB4MDMsIDB4MDAsIDB4OWQsIDB4MDUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWMsIDB4MDgsIDB4MDAsIDB4MzYsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHhjMywgMHgwMiwgMHgwMiwgMHgzMCwgMHgwMCwgMHg4MCwgMHg4MiwgMHg5YiwgMHg5MCwgMHhiYywKKwkweDA0LCAweDAwLCAweDlkLCAweDA1LCAweDAwLCAweDAwLCAweDAwLCAweDFjLCAweDA4LCAweDAwLCAweDM2LCAweDkyLAorCTB4MDAsIDB4MDAsIDB4YzUsIDB4MDIsIDB4OWYsIDB4MzEsIDB4MDEsIDB4MGMsIDB4NjksIDB4MjQsIDB4NmUsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYywgMHgwOSwgMHgwMCwgMHgwMCwgMHgzMiwKKwkweDAwLCAweDAwLCAweGM5LCAweDAyLCAweDA0LCAweDMxLCAweDAwLCAweDgwLCAweDgyLCAweDliLCAweDkwLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4YzgsIDB4MDIsIDB4MDYsIDB4MDMsIDB4MDEsIDB4ODAsIDB4MTIsIDB4YzAsIDB4NmUsIDB4YmMsCisJMHgyMCwgMHgwMCwgMHg5ZCwgMHgwNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYywgMHgwOCwgMHgwMCwgMHgzNiwgMHg5MiwKKwkweDIxLCAweDAwLCAweDlkLCAweDA1LCAweDAwLCAweDAwLCAweDAwLCAweDFjLCAweDA4LCAweDAwLCAweDM2LCAweDkyLAorCTB4MDAsIDB4MDAsIDB4Y2QsIDB4MDIsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MzIsIDB4YTQsIDB4OTAsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHhjYywgMHgwMiwgMHgwNiwgMHgwMywgMHgwMSwgMHg4MCwgMHgxMiwgMHhjMCwgMHg2ZSwgMHhiYywKKwkweDIyLCAweDAwLCAweDlkLCAweDA1LCAweDAwLCAweDAwLCAweDAwLCAweDFjLCAweDA4LCAweDAwLCAweDM2LCAweDkyLAorCTB4MjMsIDB4MDAsIDB4OWQsIDB4MDUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWMsIDB4MDgsIDB4MDAsIDB4MzYsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHhjZiwgMHgwMiwgMHgwNiwgMHgwMywgMHgwMSwgMHg4MCwgMHgxMiwgMHhjMCwgMHg2ZSwgMHhiYywKKwkweDIwLCAweDAwLCAweDlkLCAweDA1LCAweDAwLCAweDAwLCAweDAwLCAweDFjLCAweDA4LCAweDAwLCAweDM2LCAweDkyLAorCTB4MjEsIDB4MDAsIDB4OWQsIDB4MDUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWMsIDB4MDgsIDB4MDAsIDB4MzYsIDB4OTIsCisJMHgwOCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwYywgMHgwMCwgMHgwMCwgMHhmOCwgMHg2MywgMHg0MCwgMHgwMSwgMHhiOSwKKwkweDEwLCAweDAwLCAweGQ0LCAweDAyLCAweGM1LCAweDAxLCAweDAwLCAweGNjLCAweDAyLCAweDIwLCAweDE1LCAweDk4LAorCTB4MDgsIDB4MDAsIDB4MzgsIDB4MDMsIDB4MGMsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NDMsIDB4NDAsIDB4MDEsIDB4YjksCisJMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjNSwgMHgwMSwgMHgwMCwgMHhjYywgMHgwMiwgMHgyMCwgMHgxNSwgMHgzOCwKKwkweDAwLCAweDAwLCAweDdlLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDA5LCAweDA1LCAweDgwLCAweGQwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDksIDB4MDAsIDB4MzYsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHhlMiwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHg1OSwgMHgwMCwgMHg4MCwgMHhkNywKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAxLCAweDAwLCAweDc4LCAweDA5LCAweGMwLCAweDIxLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4ZGMsIDB4MGUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4M2MsIDB4MDMsIDB4MDAsIDB4MzgsIDB4ZjIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1YywgMHgwOCwgMHgwNSwgMHg4MCwgMHgzMCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDQwLCAweDJkLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDIsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ODIsIDB4ZmEsIDB4ODUsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNiwgMHgwMSwgMHgwMCwgMHg4MCwgMHg5MiwgMHhmYSwgMHg4NSwgMHhiYywKKwkweDAwLCAweDAwLCAweGRmLCAweDAyLCAweDM2LCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGIwLAorCTB4MGUsIDB4MDAsIDB4OWQsIDB4MDUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWMsIDB4MDgsIDB4MDAsIDB4MzYsIDB4OTIsCisJMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyYywgMHgwMiwgMHgwMCwgMHhhOSwgMHhkYiwgMHg4NSwgMHgzOSwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDU0LCAweDAyLCAweGE0LCAweDM4LCAweGIyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDIsIDB4OGMsIDB4MDgsIDB4YzAsIDB4NmUsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1YywgMHgwMSwgMHg5NCwgMHgwOCwgMHhjMCwgMHg2ZSwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBjLCAweDAyLCAweDk4LCAweDI4LCAweDgwLCAweDZlLCAweDM3LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OWMsIDB4MzgsIDB4MjIsIDB4MTQsIDB4MzcsCisJMHgwMCwgMHgwMCwgMHhlYiwgMHgwMiwgMHgwNCwgMHgzMCwgMHgwMCwgMHgyOCwgMHgwOCwgMHgwMCwgMHg2ZSwgMHhiMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDEwLCAweDAwLCAweDZjLCAweDA4LCAweDAwLCAweDZlLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDAsIDB4NGMsIDB4MDgsIDB4MDAsIDB4NmUsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgyMCwgMHgwMCwgMHgxOCwgMHgwOCwgMHgwMCwgMHg2ZSwgMHhiMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDNjLCAweDAwLCAweDE0LCAweDA4LCAweDgwLCAweDZlLCAweDMyLAorCTB4MDUsIDB4MDAsIDB4ZWUsIDB4MDIsIDB4MDAsIDB4MzAsIDB4MDIsIDB4MDAsIDB4NzgsIDB4ZTEsIDB4NmUsIDB4OTksCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MSwgMHgwMCwgMHgwMCwgMHhkOCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDMwLCAweDAyLCAweDc4LCAweDA5LCAweGMwLCAweDZlLCAweDMyLAorCTB4MDUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjgsIDB4MDgsIDB4MDAsIDB4MDAsIDB4NzcsIDB4YTEsIDB4OTcsIDB4MzksCisJMHgwMCwgMHgwMCwgMHhmMCwgMHgwMiwgMHgxMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwOSwgMHhjMCwgMHgyMSwgMHhiMiwKKwkweDE4LCAweDAwLCAweDM2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDczLCAweDBhLCAweDAzLCAweGY5LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTQsIDB4NTQsIDB4MDEsIDB4YjAsIDB4MDIsIDB4YzAsIDB4NmUsIDB4MzIsCisJMHgxNCwgMHgxMCwgMHhmNCwgMHgwMiwgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHhhMiwgMHgwZCwgMHg3MiwgMHhiMCwKKwkweDAwLCAweDAwLCAweDU4LCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDI4LCAweDA5LCAweGMwLCAweDAyLCAweGYyLAorCTB4MGQsIDB4MDAsIDB4OWQsIDB4MDUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWMsIDB4MDgsIDB4MDAsIDB4MzYsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNiwgMHgwOSwgMHgwMCwgMHg4MCwgMHg1MiwgMHhiZCwgMHg3MiwgMHhiYywKKwkweDAwLCAweDAwLCAweGZiLCAweDAyLCAweDMzLCAweDE1LCAweDAwLCAweGE0LCAweDAyLCAweGMwLCAweDcyLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4MzMsIDB4MDMsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4YjIsIDB4MDEsIDB4NzIsIDB4YjYsCisJMHgwMSwgMHgwMSwgMHgwOCwgMHgwYSwgMHgwMCwgMHgyOCwgMHgwMCwgMHg4MCwgMHhjMiwgMHgwZCwgMHg3NCwgMHgzYywKKwkweDAwLCAweDAwLCAweDMzLCAweDAzLCAweDBiLCAweDMxLCAweDAwLCAweDdjLCAweDA4LCAweDAwLCAweDc1LCAweGIyLAorCTB4MDAsIDB4MDAsIDB4MzMsIDB4MDMsIDB4OWYsIDB4ZjAsIDB4MDEsIDB4ODAsIDB4ODIsIDB4ZGIsIDB4ODcsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHhmYywgMHgwMiwgMHgwMCwgMHgzOCwgMHgwMCwgMHg4OCwgMHgxOCwgMHgwMCwgMHg3NSwgMHg5YywKKwkweDAwLCAweDAwLCAweDMzLCAweDAzLCAweDgwLCAweDAwLCAweDAwLCAweDgwLCAweGIyLCAweDAxLCAweDcyLCAweGI2LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDAsIDB4NDgsIDB4MDgsIDB4MDAsIDB4NzUsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHg3MCwgMHgwOCwgMHgwMCwgMHg3NSwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFjLCAweDAwLCAweDc0LCAweDM4LCAweGEyLCAweDc1LCAweDM3LAorCTB4MDAsIDB4MDAsIDB4MDEsIDB4MDMsIDB4ODMsIDB4MWIsIDB4MDAsIDB4NzgsIDB4MDgsIDB4YzAsIDB4NzQsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHhjMiwgMHg4MCwgMHgyZiwgMHgzNCwKKwkweDAwLCAweDAwLCAweGYyLCAweDAyLCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweDQyLCAweDgwLCAweDg3LCAweGI2LAorCTB4MmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDksIDB4MDAsIDB4MzYsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHhlMiwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwOSwgMHg4MCwgMHg4NCwgMHhkMiwKKwkweDM0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA5LCAweDAwLCAweDM2LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4ZTIsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDksIDB4MDAsIDB4ODcsIDB4ZDIsCisJMHgwMCwgMHgwMCwgMHgxNSwgMHgwMywgMHg5ZiwgMHg3OCwgMHgwMSwgMHg4MCwgMHhjMiwgMHgyMSwgMHg2ZSwgMHhiYywKKwkweDAwLCAweDAwLCAweDBhLCAweDAzLCAweDlmLCAweDk5LCAweDAxLCAweDY0LCAweDg4LCAweDFiLCAweDg3LCAweGJjLAorCTB4MDAsIDB4MDAsIDB4MTYsIDB4MDMsIDB4OWYsIDB4NjgsIDB4MDEsIDB4NjQsIDB4ODgsIDB4NWIsIDB4ODYsIDB4YmEsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2NCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE2LCAweDAwLCAweGE0LCAweDAyLCAweGMwLCAweDcyLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzQsIDB4MDIsIDB4YTQsIDB4YjIsIDB4NWIsIDB4MmEsIDB4M2EsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzMiwgMHgwMiwgMHg3OCwgMHgwOSwgMHhjMCwgMHg2ZSwgMHgzMiwKKwkweDAwLCAweDAwLCAweDE3LCAweDAzLCAweDA4LCAweDAxLCAweDAwLCAweDA0LCAweGU4LCAweGE1LCAweDc1LCAweGJjLAorCTB4MGYsIDB4MDAsIDB4MzMsIDB4MDMsIDB4MGIsIDB4MDEsIDB4MDAsIDB4MWMsIDB4MDgsIDB4MDAsIDB4MzYsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHgxNSwgMHgwMywgMHgwNCwgMHhhMSwgMHgwMSwgMHg4MCwgMHg4MiwgMHg5YiwgMHg4NCwgMHhiYywKKwkweDAwLCAweDAwLCAweDlkLCAweDA1LCAweDlmLCAweDk4LCAweDAxLCAweDgwLCAweGMyLCAweDIxLCAweDZlLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4OWQsIDB4MDUsIDB4MDYsIDB4YjEsIDB4MDEsIDB4ODAsIDB4ODIsIDB4NWIsIDB4ODcsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgzMiwgMHgwMywgMHgwYiwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMCwKKwkweDAwLCAweDAwLCAweDMwLCAweDAzLCAweDAyLCAweGQ0LCAweDAxLCAweDgwLCAweDkyLCAweGZiLCAweDZlLCAweGJjLAorCTB4MTUsIDB4MDAsIDB4OWQsIDB4MDUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWMsIDB4MDgsIDB4MDAsIDB4MzYsIDB4OTIsCisJMHgxNiwgMHgwMCwgMHg5ZCwgMHgwNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYywgMHgwOCwgMHgwMCwgMHgzNiwgMHg5MiwKKwkweDFjLCAweDAwLCAweDlkLCAweDA1LCAweDAwLCAweDAwLCAweDAwLCAweDFjLCAweDA4LCAweDAwLCAweDM2LCAweDkyLAorCTB4MDgsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MjgsIDB4NzIsIDB4NjEsIDB4ODAsIDB4YjksCisJMHgwMCwgMHgwMCwgMHgxYSwgMHgwMywgMHgwNCwgMHhhMSwgMHgwMSwgMHg4MCwgMHg4MiwgMHg5YiwgMHg4NCwgMHhiYywKKwkweDAwLCAweDAwLCAweDIxLCAweDAzLCAweDA2LCAweGE4LCAweDAxLCAweDgwLCAweDgyLCAweDViLCAweDgwLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4MWUsIDB4MDMsIDB4MDQsIDB4YTksIDB4MDEsIDB4ODAsIDB4MDIsIDB4MDAsIDB4NmUsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgzMSwgMHgwMywgMHgwNCwgMHhhOSwgMHgwMSwgMHg4MCwgMHg4MiwgMHg5YiwgMHg4NCwgMHhiYywKKwkweDAwLCAweDAwLCAweDMxLCAweDAzLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDEyLCAweDQwLCAweDgwLCAweGJjLAorCTB4MTMsIDB4MDAsIDB4OWQsIDB4MDUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWMsIDB4MDgsIDB4MDAsIDB4MzYsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHgzMSwgMHgwMywgMHg5ZiwgMHhhMCwgMHgwMSwgMHg3OCwgMHgyOSwgMHgyMSwgMHg2ZSwgMHhiYywKKwkweDAwLCAweDAwLCAweDMxLCAweDAzLCAweDAyLCAweDAxLCAweDAwLCAweDgwLCAweDEyLCAweGEwLCAweDk3LCAweGJjLAorCTB4MDAsIDB4MDAsIDB4MTUsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHgyYywgMHgwMywgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHg4MCwgMHg4MiwgMHhiYywKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAyLCAweDAxLCAweDgwLCAweDAyLCAweGMwLCAweDZlLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4MjcsIDB4MDMsIDB4MDIsIDB4MDAsIDB4MDAsIDB4ODAsIDB4YTIsIDB4NjAsIDB4ODAsIDB4YmMsCisJMHgwNiwgMHgwMCwgMHg5ZCwgMHgwNSwgMHgyYywgMHgwMSwgMHgwMCwgMHgxYywgMHgwOCwgMHgwMCwgMHgzNiwgMHhiMiwKKwkweDAwLCAweGMwLCAweDI5LCAweDAzLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweGEyLCAweDhkLCAweDJmLCAweGIwLAorCTB4MDYsIDB4MDAsIDB4OWQsIDB4MDUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWMsIDB4MDgsIDB4MDAsIDB4MzYsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHgyOSwgMHgwMywgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHhhMiwgMHg2MCwgMHg4MCwgMHhiYywKKwkweDA5LCAweDAwLCAweDlkLCAweDA1LCAweDAwLCAweDAwLCAweDAwLCAweDFjLCAweDA4LCAweDAwLCAweDM2LCAweDkyLAorCTB4MDAsIDB4MDAsIDB4MmIsIDB4MDMsIDB4MDYsIDB4MDMsIDB4MDEsIDB4ODAsIDB4MTIsIDB4YzAsIDB4NmUsIDB4YmMsCisJMHgwNywgMHgwMCwgMHg5ZCwgMHgwNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYywgMHgwOCwgMHgwMCwgMHgzNiwgMHg5MiwKKwkweDA4LCAweDAwLCAweDlkLCAweDA1LCAweDAwLCAweDAwLCAweDAwLCAweDFjLCAweDA4LCAweDAwLCAweDM2LCAweDkyLAorCTB4MDIsIDB4MDAsIDB4OWQsIDB4MDUsIDB4MzgsIDB4MDEsIDB4MDAsIDB4MWMsIDB4MDgsIDB4MDAsIDB4MzYsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHgyZiwgMHgwMywgMHgwMiwgMHgwYywgMHgwMiwgMHg4MCwgMHhhMiwgMHg1YiwgMHg4MCwgMHhiYywKKwkweDFmLCAweDAwLCAweDlkLCAweDA1LCAweDAwLCAweDAwLCAweDAwLCAweDFjLCAweDA4LCAweDAwLCAweDM2LCAweDkyLAorCTB4MWUsIDB4MDAsIDB4OWQsIDB4MDUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWMsIDB4MDgsIDB4MDAsIDB4MzYsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHgzNCwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgyOCwgMHgwOSwgMHg0MCwgMHgwMCwgMHg5MiwKKwkweDAwLCAweDAwLCAweDM0LCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDI4LCAweDA5LCAweDgwLCAweDAwLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4MzQsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjgsIDB4MDksIDB4YzAsIDB4MDAsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHgzNCwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgyOCwgMHgwOSwgMHgwMCwgMHgwMSwgMHg5MiwKKwkweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA5LCAweDAwLCAweDM2LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4ZTIsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDksIDB4ODAsIDB4OTIsIDB4ZDIsCisJMHgwZCwgMHgwMCwgMHg1OCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYywgMHgwOCwgMHgwMCwgMHgzNiwgMHhmMiwKKwkweDAwLCAweDAwLCAweDlkLCAweDA1LCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MTAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MmEsIDB4MDAsIDB4MDAsIDB4Y2MsIDB4MDIsIDB4MjAsIDB4MTUsIDB4YjgsCisJMHgwZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOSwgMHgwMCwgMHgzNiwgMHgzMiwKKwkweDAwLCAweDAwLCAweGUyLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDA5LCAweDAwLCAweDgwLCAweGQyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MzAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgzMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDMwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MzAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgzMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDMwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MzAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgzMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDMwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDEsIDB4MDAsIDB4NzgsIDB4MDksIDB4YzAsIDB4MjEsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHhkYywgMHgwZSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzYywgMHgwMywgMHgwMCwgMHgzOCwgMHhmMiwKKwkweDFkLCAweDAwLCAweDQ5LCAweDAzLCAweDgwLCAweDAxLCAweDAwLCAweDc4LCAweDA5LCAweGUwLCAweDAwLCAweGI4LAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MzIsIDB4ODAsIDB4OTcsIDB4YmMsCisJMHgxZCwgMHgwMCwgMHg5ZCwgMHgwNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYywgMHgwOCwgMHgwMCwgMHgzNiwgMHg5MiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDIyLCAweDgwLCAweDk3LCAweGJjLAorCTB4MTQsIDB4MDAsIDB4OWQsIDB4MDUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWMsIDB4MDgsIDB4MDAsIDB4MzYsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYywgMHhhOCwgMHgwNSwgMHgyOCwgMHgzMCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweGMwLCAweDJjLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDEsIDB4MDAsIDB4NzgsIDB4MDksIDB4YzAsIDB4MjEsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHhhMiwgMHg4MCwgMHgyZiwgMHhiNiwKKwkweDYwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAxLCAweDAwLCAweGY4LCAweDgyLCAweDhkLCAweDJmLCAweGIwLAorCTB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4ODMsIDB4NDAsIDB4MDEsIDB4MzksCisJMHgzNSwgMHgwMCwgMHg1NCwgMHgwMywgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg4MiwgMHhjZCwgMHg4MSwgMHhiYywKKwkweDA1LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA5LCAweDAwLCAweDM2LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4ZTIsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDksIDB4YzAsIDB4ODEsIDB4ZDIsCisJMHgwMCwgMHgwMCwgMHhkYywgMHgwZSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzOCwgMHgwMywgMHgwMCwgMHgzOCwgMHhmMiwKKwkweDJiLCAweDAwLCAweDlkLCAweDA1LCAweDAyLCAweDAxLCAweDAwLCAweDgwLCAweDgyLCAweGNkLCAweDgxLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4OTMsIDB4MDUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMSwgMHgwMCwgMHg3OCwgMHgwOSwgMHhjMCwgMHgyMSwgMHhiMiwKKwkweDAwLCAweDAwLCAweDVhLCAweDAzLCAweDFkLCAweDQxLCAweDAyLCAweDVjLCAweGY4LCAweDAxLCAweDY4LCAweGI0LAorCTB4NDEsIDB4MDAsIDB4YTEsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4YTIsIDB4OGQsIDB4MmYsIDB4OTEsCisJMHgzNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOSwgMHgwMCwgMHgzNiwgMHgzMiwKKwkweDAwLCAweDAwLCAweGUyLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDU5LCAweGMwLCAweDg1LCAweGQ3LAorCTB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDAsIDB4MmMsIDB4MDIsIDB4MDAsIDB4YTksIDB4ZGIsIDB4ODUsIDB4MzksCisJMHgwMCwgMHgwMCwgMHhlMSwgMHgwMiwgMHgxMiwgMHgwMSwgMHgwMCwgMHg1NCwgMHgwMiwgMHhhNCwgMHgzOCwgMHhiMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4NjQsIDB4MDMsIDB4MDQsIDB4YjAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4NmUsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg2MCwgMHgxMSwgMHgwMCwgMHg3OCwgMHgwMSwgMHg2MCwgMHgwOCwgMHgwMCwgMHg2ZSwgMHhmMiwKKwkweDJmLCAweDAwLCAweDkzLCAweDA1LCAweGQ3LCAweDAwLCAweDAwLCAweDFjLCAweDA4LCAweDAwLCAweDM2LCAweDkyLAorCTB4MDAsIDB4MDAsIDB4NjUsIDB4MDMsIDB4MDYsIDB4YTksIDB4MDEsIDB4MDgsIDB4MDksIDB4MDAsIDB4NmUsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHg2ZCwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDcwLCAweDAzLCAweDA0LCAweGE4LCAweDAxLCAweDA4LCAweDA5LCAweDAwLCAweDZlLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4MDIsIDB4MDgsIDB4ODksIDB4OWIsIDB4OTAsIDB4M2UsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMCwgMHgwMSwgMHgwOCwgMHg4OSwgMHg5YiwgMHg5MCwgMHgzYSwKKwkweDAwLCAweDAwLCAweDcwLCAweDAzLCAweDlmLCAweDg4LCAweDAxLCAweDA4LCAweDg5LCAweDliLCAweDkwLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGMsIDB4MDIsIDB4MDQsIDB4ZjksIDB4YmEsIDB4NmUsIDB4MzcsCisJMHgwMCwgMHgwMCwgMHg2YywgMHgwMywgMHgwMiwgMHgwMCwgMHgwMCwgMHg4MCwgMHgxMiwgMHhhNCwgMHg5MCwgMHhiYywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDE5LCAweDgwLCAweDkwLCAweDM3LAorCTB4MDAsIDB4MDAsIDB4NzAsIDB4MDMsIDB4MDIsIDB4MDEsIDB4MDIsIDB4ODAsIDB4ODIsIDB4OWIsIDB4OTAsIDB4YmMsCisJMHgzMCwgMHgwMCwgMHg5MywgMHgwNSwgMHhkNywgMHgwMCwgMHgwMCwgMHgxYywgMHgwOCwgMHgwMCwgMHgzNiwgMHg5MiwKKwkweDAwLCAweDAwLCAweDcwLCAweDAzLCAweDA0LCAweGIwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDZlLCAweGJjLAorCTB4MDAsIDB4MTIsIDB4NzAsIDB4MDMsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4YTIsIDB4OGQsIDB4MmYsIDB4YjAsCisJMHgzMSwgMHgwMCwgMHg5MywgMHgwNSwgMHhkNywgMHgwMCwgMHgwMCwgMHgxYywgMHgwOCwgMHgwMCwgMHgzNiwgMHg5MiwKKwkweDAwLCAweDAwLCAweGExLCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDcyLCAweDgxLCAweDJmLCAweDk1LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NDIsIDB4ODAsIDB4MmYsIDB4MzQsCisJMHgwOCwgMHhjMCwgMHg3NCwgMHgwMiwgMHgxMiwgMHgwMSwgMHgwMCwgMHg0MCwgMHhhMiwgMHhjZCwgMHgzOSwgMHhiMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4OTMsIDB4NDAsIDB4MDEsIDB4MzksCisJMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOSwgMHgwMCwgMHgzNiwgMHgzMiwKKwkweDAwLCAweDAwLCAweGUyLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDA5LCAweGMwLCAweDgxLCAweGQyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4YzAsIDB4MmMsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHhhMiwgMHg4MCwgMHgyZiwgMHhiNiwKKwkweDYwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAxLCAweDAwLCAweGY4LCAweDgyLCAweDhkLCAweDJmLCAweGIwLAorCTB4MDAsIDB4MDAsIDB4YjAsIDB4MDMsIDB4ODAsIDB4MDEsIDB4ODAsIDB4ODAsIDB4MzIsIDB4MGIsIDB4NmEsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwOCwgMHg0MCwgMHg5MCwgMHgzMiwKKwkweDAwLCAweDAwLCAweGRjLCAweDBlLCAweDAwLCAweDAwLCAweDAwLCAweDM4LCAweDAzLCAweDAwLCAweDM4LCAweGYyLAorCTB4MmIsIDB4MDAsIDB4OWQsIDB4MDUsIDB4MDIsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ODIsIDB4Y2QsIDB4ODEsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg5MywgMHgwNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDkzLCAweDQwLCAweDAxLCAweDM5LAorCTB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDksIDB4MDAsIDB4MzYsIDB4MzIsCisJMHgxMCwgMHgwMCwgMHhlMiwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHg4OSwgMHg0ZCwgMHg4MSwgMHhkNywKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweGMwLCAweDJjLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4YTIsIDB4ODAsIDB4MmYsIDB4YjYsCisJMHg2MCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMSwgMHgwMCwgMHhmOCwgMHg4MiwgMHg4ZCwgMHgyZiwgMHhiMCwKKwkweDAwLCAweDAwLCAweGIwLCAweDAzLCAweDgwLCAweDAxLCAweDgwLCAweDgwLCAweDMyLCAweDBiLCAweDZhLCAweGI2LAorCTB4MDAsIDB4MDAsIDB4ZGMsIDB4MGUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzgsIDB4MDMsIDB4MDAsIDB4MzgsIDB4ZjIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgwMywgMHgwNCwgMHgyMCwgMHgwMSwgMHg4MCwgMHg1MiwgMHgyMCwgMHg2ZSwgMHhiYywKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA5LCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGIwLAorCTB4MjUsIDB4MDAsIDB4OWQsIDB4MDUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWMsIDB4MDgsIDB4MDAsIDB4MzYsIDB4OTIsCisJMHgyNCwgMHgwMCwgMHg5ZCwgMHgwNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYywgMHgwOCwgMHgwMCwgMHgzNiwgMHg5MiwKKwkweDAwLCAweDAwLCAweDkzLCAweDAzLCAweDA0LCAweDAxLCAweDAwLCAweGQ4LCAweDFlLCAweDgwLCAweGVkLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4OGMsIDB4MDMsIDB4YjcsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MGUsIDB4YzAsIDB4ZWQsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHg4ZiwgMHgwMywgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg0MiwgMHgzYiwgMHhlZSwgMHhiYywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDFlLCAweDAwLCAweGVlLCAweDNhLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTcsIDB4MDAsIDB4MDAsIDB4ZDAsIDB4MGUsIDB4MDAsIDB4ZWUsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHg5MywgMHgwMywgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg5MiwgMHg4MCwgMHhmYywgMHhiNiwKKwkweDAwLCAweDAwLCAweDkzLCAweDAzLCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweGEyLCAweDgwLCAweGZjLCAweGI2LAorCTB4MDAsIDB4MDAsIDB4OTMsIDB4MDMsIDB4MDQsIDB4MDEsIDB4MDAsIDB4YjAsIDB4MWUsIDB4MDAsIDB4ZWIsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3NCwgMHg4NiwgMHhjYywgMHgwMiwgMHg4MCwgMHg2YywgMHgzMiwKKwkweDI4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA5LCAweDAwLCAweDM2LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4OTcsIDB4MDMsIDB4ODAsIDB4MDEsIDB4ODAsIDB4ODAsIDB4MzIsIDB4MGIsIDB4NmEsIDB4YjYsCisJMHgzNSwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHgyYywgMHg4MiwgMHhjZCwgMHgyZSwgMHhiMiwKKwkweDAwLCAweDAwLCAweDk5LCAweDAzLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDQyLCAweGM1LCAweDJjLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4OWEsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4Y2MsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjYywgMHgxMiwgMHhjMCwgMHgyYywgMHgzYSwKKwkweDAwLCAweDAwLCAweDk1LCAweDAzLCAweDA0LCAweDAxLCAweDAwLCAweDAwLCAweDE5LCAweDAwLCAweDkwLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzQsIDB4ODYsIDB4YzgsIDB4MDYsIDB4YzAsIDB4MmMsIDB4MzIsCisJMHgwOCwgMHgwMCwgMHhiMCwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHhjMywgMHg0MCwgMHgwMSwgMHg5OSwKKwkweDAwLCAweDAwLCAweDlmLCAweDAzLCAweDA0LCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDgwLCAweDgwLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4NTUsIDB4MDEsIDB4ODAsIDB4YjIsIDB4MWIsIDB4MmIsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHhjNiwgMHgwZSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyYywgMHgwOSwgMHgwMCwgMHgwMCwgMHhmMiwKKwkweDAwLCAweDAwLCAweGE0LCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4YTMsIDB4MDMsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4ODAsIDB4ODAsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHg1NSwgMHgwMSwgMHg4MCwgMHhiMiwgMHgxYiwgMHgyYiwgMHhiYywKKwkweDAwLCAweDAwLCAweGM2LCAweDBlLCAweDAwLCAweDAwLCAweDAwLCAweDJjLCAweGY5LCAweDAxLCAweDAwLCAweGY0LAorCTB4MDAsIDB4MDAsIDB4YWQsIDB4MDMsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjgsIDB4MDksIDB4ODAsIDB4ODAsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkOCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgzMiwKKwkweDAwLCAweDAwLCAweGVmLCAweDBmLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDA4LCAweDAwLCAweDAwLCAweGQyLAorCTB4MDAsIDB4MDAsIDB4YWQsIDB4MDMsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4ODAsIDB4OTIsIDB4YmMsCisJMHgxOCwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHgwYSwgMHgwMywgMHhmOSwKKwkweDAwLCAweDAwLCAweGIwLCAweDAzLCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweGEyLCAweDgwLCAweDJmLCAweGI2LAorCTB4MDAsIDB4MDAsIDB4YjAsIDB4MDMsIDB4MTIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDksIDB4YzAsIDB4MjEsIDB4YjIsCisJMHgxOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHgwYSwgMHgwMywgMHgzOSwKKwkweGIwLCAweDAzLCAweDM2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGMwLCAweDAyLCAweDAwLCAweDM2LCAweDkyLAorCTB4MDAsIDB4MDAsIDB4YjAsIDB4MDMsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4YTIsIDB4ODAsIDB4MmYsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHhiMCwgMHgwMywgMHgxMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwOSwgMHhjMCwgMHgyMSwgMHhiMiwKKwkweDE4LCAweDAwLCAweDM2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDczLCAweDBhLCAweDAzLCAweGY5LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MzIsCisJMHgxOCwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHg4YSwgMHgwMiwgMHg5OSwKKwkweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGU0LCAweDAzLCAweDAwLCAweDM2LCAweDMyLAorCTB4MDIsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDMsIDB4MDAsIDB4MzcsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlNCwgMHgwMywgMHgwMCwgMHgzNiwgMHgzMiwKKwkweDA0LCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDAzLCAweDAwLCAweDM3LCAweDMyLAorCTB4YWEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTQsIDB4MDMsIDB4MDAsIDB4MzYsIDB4MzIsCisJMHgwOSwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwMywgMHgwMCwgMHgzNywgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGNjLCAweDBmLCAweDAwLCAweDAwLCAweDMyLAorCTB4MDAsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTQsIDB4MDMsIDB4MDAsIDB4MzYsIDB4MzIsCisJMHgwNiwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwMywgMHgwMCwgMHgzNywgMHgzMiwKKwkweDIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGU0LCAweDAzLCAweDAwLCAweDM2LCAweDMyLAorCTB4MDgsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDMsIDB4MDAsIDB4MzcsIDB4MzIsCisJMHgwMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlNCwgMHgwMywgMHgwMCwgMHgzNiwgMHgzMiwKKwkweDA1LCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDAzLCAweDAwLCAweDM3LCAweDMyLAorCTB4MzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTQsIDB4MDMsIDB4MDAsIDB4MzYsIDB4MzIsCisJMHgwNywgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwMywgMHgwMCwgMHgzNywgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGEwLCAweDAyLCAweDAwLCAweDAwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGIsIDB4MDAsIDB4MDAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHhjMiwgMHgwMywgMHg4YiwgMHgwMSwgMHgwMCwgMHhhMCwgMHgxMiwgMHgwMCwgMHgyYSwgMHhiYSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE4LCAweDAyLCAweDAwLCAweDAwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHhjNSwgMHgwMywgMHgwNiwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHg4MCwgMHgyYSwgMHhiYywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDljLCAweDAyLCAweDAwLCAweDAwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDQsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjYywgMHgwMiwgMHgwMCwgMHgwMCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweDAyLCAweDAwLCAweDAwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkYywgMHgwMiwgMHgwMCwgMHgwMCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDAyLCAweDAwLCAweDAwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YzgsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjNCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgzMiwKKwkweDAwLCAweDAwLCAweGM4LCAweDAzLCAweDg1LCAweDAxLCAweDAwLCAweDljLCAweDEyLCAweGMwLCAweDI5LCAweGJhLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTQsIDB4MDMsIDB4MDAsIDB4MzYsIDB4MzIsCisJMHgwYiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwMywgMHgwMCwgMHgzNywgMHgzMiwKKwkweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGU0LCAweDAzLCAweDAwLCAweDM2LCAweDMyLAorCTB4MTMsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDMsIDB4MDAsIDB4MzcsIDB4MzIsCisJMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlNCwgMHgwMywgMHgwMCwgMHgzNiwgMHgzMiwKKwkweDBjLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDAzLCAweDAwLCAweDM3LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTQsIDB4MDMsIDB4MDAsIDB4MDYsIDB4MzIsCisJMHgwZiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwMywgMHgwMCwgMHgzNywgMHgzMiwKKwkweDAwLCAweGNjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGU0LCAweDAzLCAweDAwLCAweDM2LCAweDMyLAorCTB4MGQsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDMsIDB4MDAsIDB4MzcsIDB4MzIsCisJMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlNCwgMHgwMywgMHgwMCwgMHgzNiwgMHgzMiwKKwkweDE0LCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDAzLCAweDAwLCAweDM3LCAweDMyLAorCTB4YjcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTQsIDB4MDMsIDB4MDAsIDB4MzYsIDB4MzIsCisJMHgxNSwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwMywgMHgwMCwgMHgzNywgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGU0LCAweDAzLCAweDAwLCAweDM2LCAweDMyLAorCTB4MTgsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDMsIDB4MDAsIDB4MzcsIDB4MzIsCisJMHg2MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlNCwgMHgwMywgMHgwMCwgMHgzNiwgMHgzMiwKKwkweDFkLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDAzLCAweDAwLCAweDM3LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTQsIDB4MDMsIDB4MDAsIDB4MDQsIDB4MzIsCisJMHgxZSwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwMywgMHgwMCwgMHgzNywgMHgzMiwKKwkweDcwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGU0LCAweDAzLCAweDAwLCAweDM2LCAweDMyLAorCTB4MWYsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDMsIDB4MDAsIDB4MzcsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlNCwgMHgwMywgMHgwMCwgMHgwMCwgMHgzMiwKKwkweDIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDAzLCAweDAwLCAweDM3LCAweDMyLAorCTB4ZTAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTQsIDB4MDMsIDB4MDAsIDB4MzYsIDB4MzIsCisJMHgxNywgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwMywgMHgwMCwgMHgzNywgMHgzMiwKKwkweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGU0LCAweDAzLCAweDAwLCAweDM2LCAweDMyLAorCTB4MWIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDMsIDB4MDAsIDB4MzcsIDB4MzIsCisJMHg2MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlNCwgMHgwMywgMHgwMCwgMHgzNiwgMHgzMiwKKwkweDFjLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDAzLCAweDAwLCAweDM3LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTQsIDB4MDMsIDB4NDAsIDB4MDAsIDB4MzIsCisJMHgxNiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwMywgMHgwMCwgMHgzNywgMHgzMiwKKwkweDAwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGU0LCAweDAzLCAweDAwLCAweDM2LCAweDMyLAorCTB4MWEsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDMsIDB4MDAsIDB4MzcsIDB4MzIsCisJMHgyMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlNCwgMHgwMywgMHgwMCwgMHgzNiwgMHgzMiwKKwkweDE5LCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDAzLCAweDAwLCAweDM3LCAweDMyLAorCTB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTQsIDB4MDMsIDB4MDAsIDB4MzYsIDB4MzIsCisJMHgwYiwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwMywgMHgwMCwgMHgzNywgMHgzMiwKKwkweDIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGU0LCAweDAzLCAweDAwLCAweDM2LCAweDMyLAorCTB4MGMsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDMsIDB4MDAsIDB4MzcsIDB4MzIsCisJMHhmZSwgMHhmZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhYywgMHgwMiwgMHgwMCwgMHgzNiwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA5LCAweDAwLCAweDAwLCAweDMyLAorCTB4MTgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MDMsIDB4NjQsIDB4MDIsIDB4MzksCisJMHgwMCwgMHgwMCwgMHhmYiwgMHgwMywgMHg4NSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgxOSwgMHgwMCwgMHg5MCwgMHhiYSwKKwkweDI1LCAweDI2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGU0LCAweDAzLCAweDAwLCAweDM2LCAweDMyLAorCTB4MDEsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDMsIDB4MDAsIDB4MzcsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwZiwgMHgwMCwgMHgwMCwgMHgzMiwKKwkweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweGYzLCAweDQwLCAweDAxLCAweDM5LAorCTB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4ZTMsIDB4NDAsIDB4MDEsIDB4MzksCisJMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHhjMywgMHg0MCwgMHgwMSwgMHgzOSwKKwkweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweGIzLCAweDQwLCAweDAxLCAweDM5LAorCTB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4YTMsIDB4NDAsIDB4MDEsIDB4MzksCisJMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg5MywgMHg0MCwgMHgwMSwgMHgzOSwKKwkweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDgzLCAweDQwLCAweDAxLCAweDM5LAorCTB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NzMsIDB4NDAsIDB4MDEsIDB4MzksCisJMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg2MywgMHg0MCwgMHgwMSwgMHgzOSwKKwkweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDUzLCAweDQwLCAweDAxLCAweDM5LAorCTB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NDMsIDB4NDAsIDB4MDEsIDB4MzksCisJMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgzMywgMHg0MCwgMHgwMSwgMHgzOSwKKwkweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDEzLCAweDQwLCAweDAxLCAweDM5LAorCTB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MjMsIDB4NDAsIDB4MDEsIDB4MzksCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgwMywgMHg4MCwgMHgwMCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGM4LCAweDNmLCAweDgwLCAweGZjLCAweDM1LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OWMsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHgwMCwgMHgwMCwgMHgzMiwKKwkweDRjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQwLCAweDAyLCAweDAwLCAweDM2LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjgsIDB4MDMsIDB4NDAsIDB4MzgsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHhkMiwgMHgwMSwgMHgzMCwgMHhiNiwKKwkweDAwLCAweDAwLCAweDEzLCAweDA0LCAweDA0LCAweDAxLCAweDAwLCAweGQwLCAweDEyLCAweDAwLCAweDJkLCAweGJjLAorCTB4NTAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTQsIDB4MDMsIDB4MDAsIDB4MzYsIDB4MzIsCisJMHgwMywgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwMywgMHgwMCwgMHgzNywgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE3LCAweDAwLCAweDAwLCAweGQwLCAweDAyLCAweDAwLCAweDAwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4ZTAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwMSwgMHhlNCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBlLCAweDAxLCAweGVjLCAweDA2LCAweDAwLCAweDAwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDEsIDB4ZTAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkMCwgMHgxMiwgMHgwMCwgMHgyZCwgMHgzYSwKKwkweDRjLCAweDAwLCAweDFhLCAweDA0LCAweDAyLCAweDAxLCAweDAwLCAweDgwLCAweDgyLCAweDBkLCAweDJkLCAweGJjLAorCTB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OWMsIDB4YWUsIDB4MGQsIDB4MDIsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgzMiwKKwkweDIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDg4LCAweDg2LCAweGNjLCAweDA3LCAweDAwLCAweDM2LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OGEsIDB4ODYsIDB4Y2MsIDB4MDcsIDB4ODAsIDB4MDAsIDB4M2EsCisJMHgwMCwgMHgyNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwOSwgMHg4MCwgMHgzNiwgMHgzMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDY0LCAweDAyLCAweDQwLCAweDkwLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MjksIDB4NDAsIDB4OTAsIDB4M2EsCisJMHgwMCwgMHgwMCwgMHgyNiwgMHgwNCwgMHgxMiwgMHgwMCwgMHgwMCwgMHg3OCwgMHgwOSwgMHhjMCwgMHgyMCwgMHhiMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweGYyLCAweDgxLCAweDk3LCAweGI2LAorCTB4MWQsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDEsIDB4MDAsIDB4NzgsIDB4ZTksIDB4ZTUsIDB4MDAsIDB4YjgsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3OCwgMHgwOSwgMHg0NSwgMHg5MCwgMHgzMCwKKwkweDAwLCAweDAwLCAweDI0LCAweDA0LCAweDAyLCAweDAxLCAweDAwLCAweDgwLCAweGMyLCAweDgyLCAweDk3LCAweGJjLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODQsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjYywgMHgwMywgMHgwMCwgMHgwMCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDJjLCAweDA0LCAweDhlLCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDQwLCAweDI4LCAweGIyLAorCTB4MDAsIDB4MDAsIDB4MjYsIDB4MGYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MDIsIDB4MDAsIDB4MDAsIDB4ZDIsCisJMHgwZSwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4YywgMHgwZSwgMHgwMCwgMHgzNiwgMHgzMiwKKwkweDE4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweGI5LCAweDA1LCAweDM2LCAweDMwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTQsIDB4NzMsIDB4ODAsIDB4OTcsIDB4MzQsCisJMHgwOSwgMHgwMCwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwMywgMHgwMCwgMHgzNywgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGU0LCAweDAzLCAweDAwLCAweDAwLCAweDMyLAorCTB4MGEsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDMsIDB4MDAsIDB4MzcsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlNCwgMHg3MywgMHg4MCwgMHg5NywgMHgzNCwKKwkweDA5LCAweDAwLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDAzLCAweDAwLCAweDM3LCAweDMyLAorCTB4ZmUsIDB4Y2EsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTQsIDB4MDMsIDB4MDAsIDB4MzYsIDB4MzIsCisJMHgwYSwgMHgwMCwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwMywgMHgwMCwgMHgzNywgMHgzMiwKKwkweDAwLCAweDAwLCAweDNiLCAweDA0LCAweDEyLCAweDAxLCAweDAwLCAweDAwLCAweDA5LCAweDQwLCAweDIwLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4MzksIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHgzYiwgMHgwNCwgMHgxMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwOSwgMHg0MCwgMHgyMCwgMHhiMiwKKwkweDAwLCAweDAwLCAweDNlLCAweDA0LCAweDlmLCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDkwLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4M2QsIDB4MDQsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDksIDB4NDAsIDB4MjAsIDB4YjIsCisJMHgwMiwgMHgwMCwgMHgzOSwgMHgwNCwgMHgwNCwgMHgwMSwgMHgwMCwgMHg3OCwgMHgwOSwgMHgyNCwgMHgxNywgMHhiOCwKKwkweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweDA5LCAweDY0LCAweDE2LCAweDM4LAorCTB4MDAsIDB4MDAsIDB4MzksIDB4MDQsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4ODEsIDB4OTcsIDB4YmMsCisJMHhmZSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHgwMywgMHgwMCwgMHgzNiwgMHgzMiwKKwkweGZlLCAweDAwLCAweDM2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ4LCAweDAzLCAweDAwLCAweDM2LCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDksIDB4NDAsIDB4MjAsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHg0NCwgMHgwNCwgMHgxMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwOSwgMHg0MCwgMHgyMCwgMHhiMiwKKwkweDAwLCAweDAwLCAweDQ3LCAweDA0LCAweDlmLCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDkwLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4NDYsIDB4MDQsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDksIDB4NDAsIDB4MjAsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiNCwgMHgwMiwgMHgwMCwgMHg5MCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwNiwgMHgwMCwgMHg1OSwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYywgMHgwOSwgMHg2NCwgMHgxNiwgMHg5OCwKKwkweDAwLCAweDAwLCAweDY4LCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDA4LCAweDQwLCAweDkwLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OTcsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDgsIDB4NDAsIDB4OTAsIDB4OTIsCisJMHgzMywgMHgwMCwgMHg3NCwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYywgMHgwOCwgMHgwMCwgMHgzNiwgMHg5MiwKKwkweDExLCAweDAwLCAweDc0LCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDFjLCAweDA4LCAweDAwLCAweDM2LCAweDkyLAorCTB4MzksIDB4MDAsIDB4NzQsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWMsIDB4MDgsIDB4MDAsIDB4MzYsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDdmLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDA4LCAweDQwLCAweDkwLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4N2YsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDgsIDB4NDAsIDB4OTAsIDB4OTIsCisJMHg1YSwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4OCwgMHg4MiwgMHhjZCwgMHg5MCwgMHgzYSwKKwkweDBkLCAweDAwLCAweDdjLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweGIwLCAweDAyLCAweGU0LCAweDE2LCAweDk4LAorCTB4MGQsIDB4MDAsIDB4OGUsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjAsIDB4MDIsIDB4ZTQsIDB4MTYsIDB4OTgsCisJMHgwZCwgMHgwMCwgMHg5NywgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiMCwgMHgwMiwgMHhlNCwgMHgxNiwgMHg5OCwKKwkweDAwLCAweDAwLCAweGEzLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4YWQsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDksIDB4NDAsIDB4OTAsIDB4OWQsCisJMHgwMCwgMHgwMCwgMHhiMywgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweGJkLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4YzcsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHhkMSwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOSwgMHg0MCwgMHg5MCwgMHg5ZCwKKwkweDAwLCAweDAwLCAweGQ4LCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4ZTEsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDksIDB4NDAsIDB4OTAsIDB4OWQsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweGYzLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA5LCAweDAwLCAweDAwLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4ZjMsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDksIDB4NDAsIDB4MDAsIDB4OTIsCisJMHhkOCwgMHgwMCwgMHhmNSwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMCwgMHgwMiwgMHgwMCwgMHgzNiwgMHg5MiwKKwkweDAwLCAweDAwLCAweGZmLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4ZCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkYywgMHgwZiwgMHg0MCwgMHg5MCwgMHg5MiwKKwkweDAwLCAweDAwLCAweGU4LCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHhlZCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3OCwgMHgzOSwgMHg0MCwgMHg5MCwgMHg5NywKKwkweDAwLCAweDAwLCAweDhkLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweGVjLCAweDBlLCAweDQwLCAweDkwLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4ZWYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTgsIDB4MGUsIDB4NDAsIDB4OTAsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHg4ZCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkNCwgMHgwZSwgMHg0MCwgMHg5MCwgMHg5MiwKKwkweDAwLCAweDAwLCAweGYwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4ODUsIDB4MDUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZGMsIDB4MGUsIDB4NDAsIDB4OTAsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHgxMCwgMHgwNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDA4LCAweDAwLCAweDE1LCAweDA1LCAweDAwLCAweDAwLCAweDAwLCAweDUwLCAweDFmLCAweDI0LCAweDE2LCAweDk4LAorCTB4MDAsIDB4MDAsIDB4MjcsIDB4MDUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTIsCisJMHgwZCwgMHgwMCwgMHgzMiwgMHgwNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiMCwgMHgwMiwgMHhlNCwgMHgxNiwgMHg5OCwKKwkweDAwLCAweDAwLCAweDMzLCAweDA1LCAweDAwLCAweDAwLCAweDAwLCAweGQwLCAweDAyLCAweDAwLCAweDAwLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4MGMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHg4OSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4OTMsIDB4NDAsIDB4MDEsIDB4MzksCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3OCwgMHgwOSwgMHg0NSwgMHg5MCwgMHgzMCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA2LCAweDAxLCAweDAwLCAweDgwLCAweDIyLCAweDgwLCAweDk3LCAweGJjLAorCTB4M2YsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ODIsIDB4MGQsIDB4MDAsIDB4YjAsCisJMHgwMiwgMHgwMCwgMHg4MCwgMHgwNCwgMHhiMCwgMHgwMCwgMHgwMCwgMHhhMCwgMHhjMiwgMHgwYSwgMHgwMCwgMHhiOSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGEwLCAweDAwLCAweDAwLCAweDA0LCAweDZiLCAweDQxLCAweDkwLCAweDM0LAorCTB4MDAsIDB4MDAsIDB4YjAsIDB4MDMsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4NDAsIDB4YjAsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHhiMCwgMHgwMywgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHg4MCwgMHhiMCwgMHhiYywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweDAyLCAweDAwLCAweDAwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTgsIDB4MjIsIDB4MDAsIDB4MmIsIDB4MzcsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2NywgMHgwMSwgMHgwMCwgMHgzNCwKKwkweDAwLCAweDQyLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDg3LCAweDhkLCAweDJhLCAweDNhLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDAsIDB4YjAsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwMCwgMHhkMCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDQ4LCAweGYyLCAweGMxLCAweDM4LCAweGI0LAorCTB4MTgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NzMsIDB4MGEsIDB4MDMsIDB4MzksCisJMHhiMCwgMHgwMywgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjMCwgMHgwMiwgMHgwMCwgMHgzNiwgMHg5MiwKKwkweDA4LCAweDAwLCAweGIwLCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDkzLCAweDQwLCAweDAxLCAweDk5LAorCTB4MDAsIDB4MDAsIDB4OTEsIDB4MDQsIDB4OWYsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4OTAsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwOSwgMHg0MCwgMHg5MCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDA5LCAweGMwLCAweGZkLCAweDMyLAorCTB4MDIsIDB4MDAsIDB4OTEsIDB4MDQsIDB4YjAsIDB4MDAsIDB4MDAsIDB4YTAsIDB4YzIsIDB4MGEsIDB4MDAsIDB4YjksCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYiwgMHg4MCwgMHg5MCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBkLCAweDQwLCAweDkwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4M2IsIDB4NDAsIDB4YjAsIDB4MzEsCisJMHgwMCwgMHgwMCwgMHg4ZCwgMHgwNCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgyYiwgMHhiYywKKwkweGYxLCAweDBmLCAweDhkLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDhjLCAweDBlLCAweDAwLCAweDM2LCAweDkyLAorCTB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4OTMsIDB4NDAsIDB4MDEsIDB4MzksCisJMHgwMiwgMHgwMCwgMHg5OCwgMHgwNCwgMHhiMCwgMHgwMCwgMHgwMCwgMHhhMCwgMHhjMiwgMHgwYSwgMHgwMCwgMHhiOSwKKwkweDAwLCAweDAwLCAweDliLCAweDA0LCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweDEyLCAweDQwLCAweGIwLCAweGI2LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4M2IsIDB4NDAsIDB4YjAsIDB4MzMsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHhjZCwgMHg0YSwgMHhkMCwgMHgzNSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDBiLCAweDAwLCAweDAwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTAsIDB4MDAsIDB4MDAsIDB4MGMsIDB4MWIsIDB4ZTQsIDB4YjAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHhiMCwgMHgwMywgMHgwYiwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMCwKKwkweDAwLCAweDAwLCAweGExLCAweDA0LCAweDA0LCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDQwLCAweDkwLCAweGIyLAorCTB4MWYsIDB4MDAsIDB4YjAsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MTEsIDB4NDAsIDB4MDAsIDB4OTksCisJMHgwMCwgMHgwMCwgMHhhMCwgMHgwNCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHhmOCwgMHhiYywKKwkweDAwLCAweDAwLCAweGIwLCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAxLCAweDAwLCAweGY4LCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4ODEsIDB4ZmMsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHhhNywgMHgwNCwgMHg5ZiwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHg5MCwgMHhiMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDA5LCAweDQwLCAweDkwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDksIDB4YzAsIDB4ZmQsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg0MiwgMHg4NSwgMHg5MCwgMHhiMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGU0LCAweDAzLCAweDgwLCAweDkwLCAweDMyLAorCTB4MDksIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDMsIDB4MDAsIDB4MzcsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlNCwgMHgwMywgMHg0MCwgMHg5MCwgMHgzMiwKKwkweDBhLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDAzLCAweDAwLCAweDM3LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4OGQsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YzgsIDB4MGYsIDB4ODEsIDB4ZmMsIDB4OTQsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMiwgMHgwMSwgMHgwMCwgMHg4MCwgMHg3MiwgMHg0MiwgMHg5MCwgMHhiYywKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA2LCAweDAxLCAweDAwLCAweDgwLCAweGUyLCAweDQyLCAweDkwLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4NzgsIDB4MDksIDB4NjQsIDB4OTAsIDB4YjUsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlNCwgMHg3MywgMHgwMCwgMHg5MCwgMHgzYywKKwkweDEwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDAzLCAweDAwLCAweDM3LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4OGQsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHhiNiwgMHgwNCwgMHg5ZiwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHg5MCwgMHhiMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDA5LCAweDQwLCAweDkwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDksIDB4YzAsIDB4ZmQsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg0MiwgMHg4NSwgMHg5MCwgMHhiMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGU0LCAweDAzLCAweDgwLCAweDkwLCAweDMyLAorCTB4MDEsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDMsIDB4MDAsIDB4MzcsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwZiwgMHg4MCwgMHg5MCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGU0LCAweDAzLCAweDQwLCAweDkwLCAweDMyLAorCTB4MDIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDMsIDB4MDAsIDB4MzcsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHg4ZCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlNCwgMHgwZiwgMHg0MCwgMHg5MCwgMHg5MiwKKwkweDAwLCAweDAwLCAweGMwLCAweDA0LCAweDlmLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDkwLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDksIDB4NDAsIDB4OTAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwOSwgMHhjMCwgMHhmZCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDQyLCAweDg1LCAweDkwLCAweGIwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTQsIDB4MDMsIDB4ODAsIDB4OTAsIDB4MzIsCisJMHgwMywgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwMywgMHgwMCwgMHgzNywgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE4LCAweDBlLCAweDgwLCAweDkwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTQsIDB4MDMsIDB4NDAsIDB4OTAsIDB4MzIsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwMywgMHgwMCwgMHgzNywgMHgzMiwKKwkweDAwLCAweDAwLCAweDhkLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweGFjLCAweDBlLCAweDQwLCAweDkwLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4Y2EsIDB4MDQsIDB4OWYsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4OTAsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwOSwgMHg0MCwgMHg5MCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDA5LCAweGMwLCAweGZkLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4NDIsIDB4ODUsIDB4OTAsIDB4YjAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlNCwgMHgwMywgMHg4MCwgMHg5MCwgMHgzMiwKKwkweDA1LCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDAzLCAweDAwLCAweDM3LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTQsIDB4MDMsIDB4NDAsIDB4OTAsIDB4MzIsCisJMHgwNiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwMywgMHgwMCwgMHgzNywgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDBmLCAweDgwLCAweDkwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4OGQsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDgsIDB4MGYsIDB4NDAsIDB4OTAsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNiwgMHgwMSwgMHgwMCwgMHg4MCwgMHg4MiwgMHg0MiwgMHg5MCwgMHhiYywKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAxLCAweDAwLCAweDc4LCAweDA5LCAweDY0LCAweDkwLCAweGI1LAorCTB4MDAsIDB4MDAsIDB4ZDUsIDB4MDQsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ODIsIDB4NDIsIDB4OTAsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOSwgMHgwMCwgMHgwMCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGU0LCAweDAzLCAweDAwLCAweDkwLCAweDMyLAorCTB4MTIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDMsIDB4MDAsIDB4MzcsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHg4ZCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgxZiwgMHg0MCwgMHg5MCwgMHg5YywKKwkweDAwLCAweDAwLCAweGRiLCAweDA0LCAweDlmLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDkwLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDksIDB4NDAsIDB4OTAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwOSwgMHhjMCwgMHhmZCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDQyLCAweDg1LCAweDkwLCAweGIwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTQsIDB4MDMsIDB4ODAsIDB4OTAsIDB4MzIsCisJMHgwNywgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwMywgMHgwMCwgMHgzNywgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGU0LCAweDAzLCAweDQwLCAweDkwLCAweDMyLAorCTB4MDgsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDMsIDB4MDAsIDB4MzcsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHg4ZCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA2LCAweDAxLCAweDAwLCAweDgwLCAweDgyLCAweDQyLCAweDkwLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4NzgsIDB4MDksIDB4NjQsIDB4OTAsIDB4YjUsCisJMHgwMCwgMHgwMCwgMHhlNSwgMHgwNCwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg4MiwgMHg0MiwgMHg5MCwgMHhiYywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA5LCAweDAwLCAweDAwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTQsIDB4MDMsIDB4MDAsIDB4OTAsIDB4MzIsCisJMHgxMSwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwMywgMHgwMCwgMHgzNywgMHgzMiwKKwkweDAwLCAweDAwLCAweDhkLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweGZjLCAweDFmLCAweDQwLCAweDkwLCAweDljLAorCTB4MDAsIDB4MDAsIDB4ZWIsIDB4MDQsIDB4OWYsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4OTAsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwOSwgMHg0MCwgMHg5MCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDA5LCAweGMwLCAweGZkLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODQsIDB4MGUsIDB4ODAsIDB4OTAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHg4ZCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4OCwgMHgwZSwgMHg0MCwgMHg5MCwgMHg5MiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE5LCAweDQwLCAweDkwLCAweDM3LAorCTB4MDAsIDB4MDAsIDB4OGQsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MGYsIDB4YTQsIDB4OTcsIDB4OWEsCisJMHgwMCwgMHgwMCwgMHg4ZCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiYywgMHgwZSwgMHg4MCwgMHhlZSwgMHg5ZCwKKwkweDAwLCAweDAwLCAweGYyLCAweDA0LCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDQwLCAweDkwLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDksIDB4YzAsIDB4MDAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHg4ZCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlNCwgMHgxZSwgMHg0MCwgMHg5MCwgMHg5YywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE4LCAweDIyLCAweDAwLCAweDkwLCAweDM3LAorCTB4MDAsIDB4MDAsIDB4OGQsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODYsIDB4YzAsIDB4MDcsIDB4NDAsIDB4OTAsIDB4OTIsCisJMHgwZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiMCwgMHgwMiwgMHhlNCwgMHgxNiwgMHgzOCwKKwkweGZmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA5LCAweDAwLCAweDM2LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4ZmEsIDB4MDQsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MjQsIDB4ZjYsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjOCwgMHgzZiwgMHg4MCwgMHhmYywgMHgzNCwKKwkweDQwLCAweDgwLCAweGZjLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDI4LCAweDA5LCAweDgwLCAweDM2LCAweDkyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjAsIDB4MGYsIDB4MDAsIDB4MDAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyOCwgMHg3OSwgMHgwMSwgMHgwMCwgMHgzNCwKKwkweDAyLCAweDAwLCAweGZjLCAweDA0LCAweGIwLCAweDAwLCAweDAwLCAweGEwLCAweGMyLCAweDBhLCAweDAwLCAweGI5LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTAsIDB4MDAsIDB4MDAsIDB4MGMsIDB4YWIsIDB4ZTQsIDB4YjAsIDB4MzIsCisJMHgxZiwgMHgwMCwgMHg4ZCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgxMSwgMHg0MCwgMHgwMCwgMHg5OSwKKwkweGVhLCAweDA1LCAweDA1LCAweDA1LCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDgyLCAweDRkLCAweDkwLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZWMsIDB4MGYsIDB4MDAsIDB4MTUsIDB4MzIsCisJMHgwMCwgMHhmZSwgMHgxZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHgwZiwgMHgwMCwgMHgzNywgMHgzMiwKKwkweGYwLCAweGZmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGU4LCAweDBmLCAweDAwLCAweDM2LCAweDMyLAorCTB4OTgsIDB4MDUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjQsIDB4MGYsIDB4MDAsIDB4MzYsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwYiwgMHgwNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjOCwgMHg0ZiwgMHg4MCwgMHhmYywgMHg5NSwKKwkweDM2LCAweDIzLCAweDhhLCAweDExLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDgyLCAweDRkLCAweDkwLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZWMsIDB4MGYsIDB4ODAsIDB4MTQsIDB4MzIsCisJMHgwMCwgMHhmOCwgMHgxZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHgwZiwgMHgwMCwgMHgzNywgMHgzMiwKKwkweGMwLCAweGZmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGU4LCAweDBmLCAweDAwLCAweDM2LCAweDMyLAorCTB4OTgsIDB4MjcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjQsIDB4MGYsIDB4MDAsIDB4MzYsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjOCwgMHg0ZiwgMHg4MCwgMHhmYywgMHgzNCwKKwkweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDU0LCAweDhmLCAweDRkLCAweDkwLCAweDNhLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4NjAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4YjAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg3YSwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMCwKKwkweDAwLCAweDAwLCAweGE5LCAweDBmLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGQwLAorCTB4MDAsIDB4MDAsIDB4OGQsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHgxMiwgMHgwNSwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHg0MCwgMHg5MCwgMHhiNiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGM4LCAweDZmLCAweDgwLCAweGZjLCAweDM0LAorCTB4MDAsIDB4MDAsIDB4MTQsIDB4MDUsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MTIsIDB4NDAsIDB4OTAsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjOCwgMHg1ZiwgMHg4MCwgMHhmYywgMHgzNCwKKwkweDAwLCAweDAwLCAweDhkLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4MTcsIDB4MDUsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MzIsIDB4NDAsIDB4OTAsIDB4YjAsCisJMHg4MCwgMHgwMSwgMHg4ZCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjOCwgMHg4ZiwgMHg4ZCwgMHhmYywgMHg5MSwKKwkweDAwLCAweDAwLCAweDE5LCAweDA1LCAweDgwLCAweDAwLCAweDAwLCAweDgwLCAweDEyLCAweDQwLCAweDkwLCAweGI2LAorCTB4MDAsIDB4MDAsIDB4MWEsIDB4MDUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YzgsIDB4N2YsIDB4ODAsIDB4ZmMsIDB4OTUsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjOCwgMHg3ZiwgMHg4MCwgMHhmYywgMHgzNCwKKwkweDAwLCAweDAwLCAweDFjLCAweDA1LCAweDgwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDQwLCAweDkwLCAweGI2LAorCTB4MDAsIDB4MDAsIDB4MWQsIDB4MDUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YzgsIDB4OGYsIDB4ODAsIDB4ZmMsIDB4OTUsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjOCwgMHg4ZiwgMHg4MCwgMHhmYywgMHgzNCwKKwkweDAwLCAweDAwLCAweDIwLCAweDA1LCAweDgwLCAweDAwLCAweDAwLCAweDgwLCAweDIyLCAweDQwLCAweDkwLCAweGI2LAorCTB4ZjEsIDB4MGYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OGMsIDB4MGUsIDB4MDAsIDB4MzYsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgyMiwgMHgwNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjOCwgMHgxZiwgMHg4MSwgMHhmYywgMHg5NSwKKwkweDBlLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDhjLCAweDBlLCAweDAwLCAweDM2LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YzgsIDB4MWYsIDB4ODEsIDB4ZmMsIDB4MzQsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNiwgMHgwMSwgMHgwMCwgMHg4MCwgMHg4MiwgMHgwMiwgMHhmNSwgMHhiYywKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAzLCAweDAwLCAweDAwLCAweDc4LCAweDA5LCAweDAwLCAweGY1LCAweGJkLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ZTIsIDB4MjUsIDB4ZjUsIDB4YjUsCisJMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YywgMHgxZiwgMHgyNCwgMHgxNiwgMHgzOCwKKwkweDAwLCAweDAwLCAweDhkLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDUwLCAweDFmLCAweDAwLCAweGY1LCAweDljLAorCTB4ODAsIDB4MDEsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4ODIsIDB4OGQsIDB4ZmMsIDB4YjAsCisJMHgwMCwgMHgwMCwgMHgyYiwgMHgwNSwgMHg5ZiwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHg5MCwgMHhiMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDA5LCAweDQwLCAweDkwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDksIDB4YzAsIDB4ZmQsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNywgMHgwMCwgMHhmNSwgMHgzYSwKKwkweDhjLCAweGNjLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDA3LCAweDAwLCAweDM2LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4ODAsIDB4OTAsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMCwgMHgwMCwgMHgwNywgMHg0MCwgMHg5MCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDQwLCAweGYyLCAweGMxLCAweDM4LCAweGI0LAorCTB4MTgsIDB4MDAsIDB4MzYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NzMsIDB4MGEsIDB4MDMsIDB4ZjksCisJMHgwMCwgMHgwMCwgMHg4ZCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhkLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweGVjLCAweDAzLCAweDQwLCAweDkwLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4NDAsIDB4OTAsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgzNCwgMHgwNSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhkOCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweDAxLCAweGVjLCAweDE2LCAweGU0LCAweDZlLCAweDNhLAorCTB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4OTMsIDB4NDAsIDB4MDEsIDB4MzksCisJMHgwMCwgMHgwMCwgMHg2OSwgMHgwNSwgMHgxNywgMHgxMCwgMHgwMSwgMHhmOCwgMHgwMiwgMHgwMCwgMHg2ZSwgMHhiMiwKKwkweDA2LCAweDAwLCAweDNmLCAweDA1LCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDgyLCAweDhkLCAweDJmLCAweGIwLAorCTB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4ODIsIDB4OGQsIDB4MmYsIDB4MzIsCisJMHgwMCwgMHhjMCwgMHhkMywgMHgwZSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyOCwgMHgwOSwgMHg4MCwgMHgzNiwgMHhkMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweDAxLCAweGVjLCAweDE2LCAweGMwLCAweDZlLCAweDNjLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4ODYsIDB4YzgsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MzIsCisJMHgxOCwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHgwYSwgMHgwMywgMHhmOSwKKwkweDAwLCAweDAwLCAweDQwLCAweDA1LCAweDAwLCAweDAwLCAweDAwLCAweGQwLCAweDAyLCAweDAwLCAweDAwLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4NDYsIDB4MDUsIDB4MDQsIDB4MTksIDB4ODYsIDB4ODAsIDB4MDIsIDB4ODAsIDB4NmMsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgxMiwgMHg4MCwgMHgyZiwgMHhiNiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA5LCAweDAwLCAweDZlLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YzEsIDB4MDgsIDB4MDAsIDB4MDQsIDB4MDksIDB4MDAsIDB4NmUsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjMCwgMHgxNSwgMHg4NiwgMHgyYywgMHgwOSwgMHhjMCwgMHg2YywgMHgzMiwKKwkweDAwLCAweDAwLCAweDRjLCAweDA1LCAweDIyLCAweDFkLCAweDg2LCAweGM4LCAweDA2LCAweGMwLCAweDkyLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4NGMsIDB4MDUsIDB4MDAsIDB4MTgsIDB4ODYsIDB4YzgsIDB4MDYsIDB4NDAsIDB4MDAsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgyMiwgMHg4MCwgMHgyZiwgMHhiNiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDA5LCAweDAwLCAweDZlLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YzIsIDB4NDgsIDB4MDAsIDB4MDQsIDB4MDksIDB4MDAsIDB4NmUsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjMCwgMHgxNiwgMHg4NiwgMHgyYywgMHgwOSwgMHhjMCwgMHg2YywgMHgzMiwKKwkweDAwLCAweDAwLCAweDRjLCAweDA1LCAweDIxLCAweDFkLCAweDg2LCAweGM4LCAweDA2LCAweGMwLCAweDkyLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4ODYsIDB4YzgsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MzIsCisJMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyOCwgMHgwOSwgMHg4MCwgMHgzNiwgMHgzMiwKKwkweDAwLCAweDAwLCAweDU0LCAweDA1LCAweDA0LCAweDAyLCAweDAxLCAweDgwLCAweDAyLCAweGMwLCAweDZlLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4ZDMsIDB4MGUsIDB4MDAsIDB4MDIsIDB4MDEsIDB4ZWMsIDB4MTYsIDB4YzAsIDB4NmUsIDB4ZGMsCisJMHgwMCwgMHgwMCwgMHg1MiwgMHgwNSwgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHg4MCwgMHgyZiwgMHhiNiwKKwkweDAwLCAweDAwLCAweDU0LCAweDA1LCAweDgxLCAweDAwLCAweDAwLCAweGY4LCAweDIyLCAweDgwLCAweDJmLCAweGI0LAorCTB4MDAsIDB4MDAsIDB4NTQsIDB4MDUsIDB4MDAsIDB4MTgsIDB4ODYsIDB4YzgsIDB4MDYsIDB4NDAsIDB4MDAsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHg1NCwgMHgwNSwgMHg4MiwgMHgwMCwgMHgwMCwgMHhmOCwgMHgxMiwgMHg4MCwgMHgyZiwgMHhiNCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDg2LCAweGM4LCAweDA2LCAweDAwLCAweDAwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MmQsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHg4MCwgMHgyZCwgMHhiYywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDg2LCAweGM4LCAweDA2LCAweDAwLCAweDAwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4YzAsIDB4MGEsIDB4MzIsCisJMHgwMCwgMHgzOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwMCwgMHgzNiwgMHgzMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDEwLCAweDAwLCAweDAwLCAweDA3LCAweDAwLCAweDkwLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDAsIDB4MDAsIDB4MDcsIDB4NDAsIDB4OTAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmMiwgMHhjMSwgMHgzOCwgMHhiNCwKKwkweDE4LCAweDAwLCAweDM2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDczLCAweDBhLCAweDAzLCAweGY5LAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4ODAsIDB4MmQsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNywgMHgwMSwgMHgwMCwgMHhiMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQwLCAweDAyLCAweDAwLCAweDAwLCAweDMyLAorCTB4MDAsIDB4YzAsIDB4NjksIDB4MDUsIDB4MTgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTksIDB4Y2QsIDB4M2UsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYywgMHg4NiwgMHgwNCwgMHgxOSwgMHg4MCwgMHg2YywgMHgzYSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDI4LCAweDAwLCAweDAwLCAweDA3LCAweDAwLCAweDAwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MzIsCisJMHgwMCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMCwgMHgzOCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwMCwgMHgzNywgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDNjLCAweDAwLCAweDBjLCAweGY3LCAweDdmLCAweDkwLCAweDMwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NDgsIDB4MDIsIDB4MDAsIDB4OTAsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHhlOCwgMHgwMSwgMHgwMCwgMHgzNCwKKwkweDE4LCAweDAwLCAweDM2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDczLCAweDBhLCAweDAzLCAweGY5LAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDIsIDB4MTAsIDB4ODYsIDB4ODAsIDB4NzIsIDB4ODIsIDB4NmMsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg4NiwgMHhhOCwgMHg0MiwgMHg4MCwgMHg2YywgMHgzNywKKwkweDAwLCAweDAwLCAweDc4LCAweDA1LCAweDEyLCAweDAwLCAweDcwLCAweDM4LCAweDAyLCAweDAwLCAweDdjLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MGIsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4YjAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3MCwgMHhlMCwgMHgwNywgMHgwMCwgMHgwMCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDMwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzAsIDB4M2MsIDB4MDIsIDB4MDAsIDB4N2UsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3MCwgMHgzMCwgMHgwMiwgMHgwMCwgMHg3ZSwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDcwLCAweDM0LCAweDAyLCAweDAwLCAweDdlLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4NmIsIDB4MDUsIDB4MDIsIDB4MDEsIDB4MDAsIDB4ODAsIDB4YjIsIDB4ODIsIDB4MmEsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNywgMHgwMCwgMHgwMCwgMHhkMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgzMiwKKwkweDA2LCAweDAwLCAweDNmLCAweDA1LCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDgyLCAweDhkLCAweDJmLCAweGIwLAorCTB4MDAsIDB4MDAsIDB4MzksIDB4MDUsIDB4MDQsIDB4MDMsIDB4MDEsIDB4ODAsIDB4MDIsIDB4YzAsIDB4NmUsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMSwgMHhlMCwgMHgwNiwgMHg4MCwgMHgyZiwgMHgzMiwKKwkweDAwLCAweDAwLCAweGE0LCAweDAzLCAweGEyLCAweDAwLCAweDAwLCAweGIwLCAweDAyLCAweDAwLCAweDAwLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4N2EsIDB4MDUsIDB4MDQsIDB4MDMsIDB4MDEsIDB4ODAsIDB4MDIsIDB4YzAsIDB4NmUsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg4MywgMHgwNSwgMHgwMCwgMHgxMCwgMHg4NiwgMHhjOCwgMHg0NiwgMHg4MCwgMHgyYSwgMHg5NiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDg2LCAweGM4LCAweDQ2LCAweDgwLCAweDJhLCAweDM2LAorCTB4MDAsIDB4MDAsIDB4N2UsIDB4MDUsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MTIsIDB4ODAsIDB4MmYsIDB4YjYsCisJMHgwMywgMHgwMCwgMHg4MCwgMHgwNSwgMHgyMiwgMHgwMCwgMHgwMCwgMHhmOCwgMHg4MiwgMHg4ZCwgMHgyZiwgMHhiMiwKKwkweDAwLCAweDAwLCAweDgwLCAweDA1LCAweDAwLCAweDE4LCAweDg2LCAweGM4LCAweDA2LCAweDAwLCAweDAwLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4ODMsIDB4MDUsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MjIsIDB4ODAsIDB4MmYsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjMiwgMHgwMSwgMHgwMCwgMHhmOCwgMHgwMiwgMHg4MCwgMHgyZiwgMHgzNSwKKwkweDAwLCAweGMwLCAweGQzLCAweDBlLCAweDAwLCAweDAwLCAweDAwLCAweDI4LCAweDA5LCAweDgwLCAweDM2LCAweGQyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDEsIDB4ZWMsIDB4MTYsIDB4YzAsIDB4NmUsIDB4M2MsCisJMHgxOCwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHgwYSwgMHgwMywgMHhmOSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDAxLCAweGUwLCAweDA2LCAweDgwLCAweDJmLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4YTQsIDB4MDMsIDB4YTIsIDB4MDAsIDB4MDAsIDB4YjAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgwNSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHhhMiwgMHhjMCwgMHhlZCwgMHhiYywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGMwLCAweDBlLCAweDgwLCAweDAyLCAweDMyLAorCTB4NDAsIDB4N2UsIDB4MDUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjQsIDB4MGUsIDB4MDAsIDB4MzcsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjNCwgMHgwZSwgMHg4MCwgMHgwNywgMHgzMiwKKwkweDY0LCAweDAwLCAweDhmLCAweDA1LCAweDAwLCAweDAwLCAweDAwLCAweGNjLCAweDBlLCAweDAwLCAweDM2LCAweDkyLAorCTB4NjQsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ODIsIDB4Y2QsIDB4ZWQsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjMCwgMHgwZSwgMHg0MCwgMHgwMCwgMHgzMiwKKwkweGEwLCAweDhjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGI0LCAweDBlLCAweDAwLCAweDM2LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YzQsIDB4MGUsIDB4YzAsIDB4MDAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjYywgMHgwZSwgMHg4MCwgMHgwMiwgMHgzMiwKKwkweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGU0LCAweDMzLCAweDdiLCAweGVjLCAweDM5LAorCTB4MWUsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDMsIDB4MDAsIDB4MzcsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjOCwgMHg2ZSwgMHhjMCwgMHhlYywgMHgzNywKKwkweDAwLCAweDAwLCAweDhkLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweDBlLCAweGMwLCAweGVkLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4NjUsIDB4MDEsIDB4ODAsIDB4YTIsIDB4ZGIsIDB4MmMsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHg4MCwgMHg4MCwgMHhiMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAyLCAweDFjLCAweDAxLCAweDgwLCAweDUyLCAweGMwLCAweDZlLCAweGJjLAorCTB4MmIsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDIsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ODIsIDB4Y2QsIDB4ODEsIDB4YmMsCisJMHgzZCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMiwgMHgwMCwgMHgwMCwgMHg4MCwgMHg4MiwgMHhjZCwgMHg4MSwgMHhiYywKKwkweDM1LCAweDAwLCAweDljLCAweDA1LCAweDA0LCAweDAwLCAweDAwLCAweDgwLCAweDgyLCAweGNkLCAweDgxLCAweGJjLAorCTB4MGYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDksIDB4MDAsIDB4MzYsIDB4MzIsCisJMHgyYiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHg4OSwgMHhjZCwgMHg4MSwgMHgzYywKKwkweDEwLCAweDAwLCAweGUyLCAweDEwLCAweDAwLCAweDFjLCAweDAxLCAweDE0LCAweDU5LCAweGU0LCAweDZlLCAweGQ5LAorCTB4YTQsIDB4MDUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODgsIDB4ODIsIDB4Y2QsIDB4ODEsIDB4M2EsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHg4MCwgMHg4MCwgMHhiMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDY1LCAweDAxLCAweDgwLCAweGEyLCAweGRiLCAweDJjLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDIsIDB4MTgsIDB4MDEsIDB4ODAsIDB4OTIsIDB4YzAsIDB4NmUsIDB4YmMsCisJMHgyYiwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMiwgMHgwMCwgMHgwMCwgMHg4MCwgMHg4MiwgMHhjZCwgMHg4MSwgMHhiYywKKwkweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA5LCAweDAwLCAweDM2LCAweDMyLAorCTB4MTAsIDB4MDAsIDB4ZTIsIDB4MTAsIDB4MDAsIDB4MTgsIDB4MDEsIDB4MTQsIDB4NzksIDB4ZTAsIDB4NmUsIDB4ZDksCisJMHhhNCwgMHgwNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4OCwgMHg4MiwgMHhjZCwgMHg4MSwgMHgzYSwKKwkweGUxLCAweDA1LCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAxLCAweDg4LCAweDgyLCAweGNkLCAweDZlLCAweDNhLAorCTB4ZWEsIDB4MDUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDEsIDB4ODgsIDB4ODIsIDB4Y2QsIDB4NmUsIDB4M2EsCisJMHhmMywgMHgwNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMSwgMHg4OCwgMHg4MiwgMHhjZCwgMHg2ZSwgMHgzYSwKKwkweGZjLCAweDA1LCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAxLCAweDg4LCAweDgyLCAweGNkLCAweDZlLCAweDNhLAorCTB4MDUsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDEsIDB4ODgsIDB4ODIsIDB4Y2QsIDB4NmUsIDB4M2EsCisJMHgwZSwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMSwgMHg4OCwgMHg4MiwgMHhjZCwgMHg2ZSwgMHgzYSwKKwkweDE3LCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAxLCAweDg4LCAweDgyLCAweGNkLCAweDZlLCAweDNhLAorCTB4MjAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDEsIDB4ODgsIDB4ODIsIDB4Y2QsIDB4NmUsIDB4M2EsCisJMHgyOSwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMSwgMHg4OCwgMHg4MiwgMHhjZCwgMHg2ZSwgMHgzYSwKKwkweDMyLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAxLCAweDg4LCAweDgyLCAweGNkLCAweDZlLCAweDNhLAorCTB4M2IsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDEsIDB4ODgsIDB4ODIsIDB4Y2QsIDB4NmUsIDB4M2EsCisJMHg0NCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMSwgMHg4OCwgMHg4MiwgMHhjZCwgMHg2ZSwgMHgzYSwKKwkweDRkLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAxLCAweDg4LCAweDgyLCAweGNkLCAweDZlLCAweDNhLAorCTB4NTYsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDEsIDB4ODgsIDB4ODIsIDB4Y2QsIDB4NmUsIDB4M2EsCisJMHg1ZiwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMSwgMHg4OCwgMHg4MiwgMHhjZCwgMHg2ZSwgMHgzYSwKKwkweDY4LCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAxLCAweDg4LCAweDgyLCAweGNkLCAweDZlLCAweDNhLAorCTB4NzEsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDEsIDB4ODgsIDB4ODIsIDB4Y2QsIDB4NmUsIDB4M2EsCisJMHg3YSwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMSwgMHg4OCwgMHg4MiwgMHhjZCwgMHg2ZSwgMHgzYSwKKwkweDgzLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAxLCAweDg4LCAweDgyLCAweGNkLCAweDZlLCAweDNhLAorCTB4OGMsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDEsIDB4ODgsIDB4ODIsIDB4Y2QsIDB4NmUsIDB4M2EsCisJMHg5NSwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMSwgMHg4OCwgMHg4MiwgMHhjZCwgMHg2ZSwgMHgzYSwKKwkweDllLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAxLCAweDg4LCAweDgyLCAweGNkLCAweDZlLCAweDNhLAorCTB4YTcsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDEsIDB4ODgsIDB4ODIsIDB4Y2QsIDB4NmUsIDB4M2EsCisJMHhiMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMSwgMHg4OCwgMHg4MiwgMHhjZCwgMHg2ZSwgMHgzYSwKKwkweGI5LCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAxLCAweDg4LCAweDgyLCAweGNkLCAweDZlLCAweDNhLAorCTB4YzIsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDEsIDB4ODgsIDB4ODIsIDB4Y2QsIDB4NmUsIDB4M2EsCisJMHhjYiwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMSwgMHg4OCwgMHg4MiwgMHhjZCwgMHg2ZSwgMHgzYSwKKwkweGQ0LCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAxLCAweDg4LCAweDgyLCAweGNkLCAweDZlLCAweDNhLAorCTB4ZGQsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDEsIDB4ODgsIDB4ODIsIDB4Y2QsIDB4NmUsIDB4M2EsCisJMHhlNiwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMSwgMHg4OCwgMHg4MiwgMHhjZCwgMHg2ZSwgMHgzYSwKKwkweGVmLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAxLCAweDg4LCAweDgyLCAweGNkLCAweDZlLCAweDNhLAorCTB4ZjgsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDEsIDB4ODgsIDB4ODIsIDB4Y2QsIDB4NmUsIDB4M2EsCisJMHgwMSwgMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMSwgMHg4OCwgMHg4MiwgMHhjZCwgMHg2ZSwgMHgzYSwKKwkweDBhLCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAxLCAweDg4LCAweDgyLCAweGNkLCAweDZlLCAweDNhLAorCTB4MTMsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDEsIDB4ODgsIDB4ODIsIDB4Y2QsIDB4NmUsIDB4M2EsCisJMHgxYywgMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMSwgMHg4OCwgMHg4MiwgMHhjZCwgMHg2ZSwgMHgzYSwKKwkweDI1LCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAxLCAweDg4LCAweDgyLCAweGNkLCAweDZlLCAweDNhLAorCTB4MmUsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDEsIDB4ODgsIDB4ODIsIDB4Y2QsIDB4NmUsIDB4M2EsCisJMHgzNywgMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMSwgMHg4OCwgMHg4MiwgMHhjZCwgMHg2ZSwgMHgzYSwKKwkweDQwLCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAxLCAweDg4LCAweDgyLCAweGNkLCAweDZlLCAweDNhLAorCTB4NDksIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDEsIDB4ODgsIDB4ODIsIDB4Y2QsIDB4NmUsIDB4M2EsCisJMHgwMCwgMHgwMCwgMHg1NywgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHhkNCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MiwKKwkweDAwLCAweDAwLCAweGE4LCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4NTIsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWMsIDB4MDEsIDB4ODgsIDB4ODIsIDB4Y2QsIDB4NmUsIDB4M2EsCisJMHg1NywgMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYywgMHgwMSwgMHg4OCwgMHg4MiwgMHhjZCwgMHg2ZSwgMHgzYSwKKwkweDVjLCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDFjLCAweDAxLCAweDg4LCAweDgyLCAweGNkLCAweDZlLCAweDNhLAorCTB4NjEsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWMsIDB4MDEsIDB4ODgsIDB4ODIsIDB4Y2QsIDB4NmUsIDB4M2EsCisJMHg2NiwgMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYywgMHgwMSwgMHg4OCwgMHg4MiwgMHhjZCwgMHg2ZSwgMHgzYSwKKwkweDZiLCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDFjLCAweDAxLCAweDg4LCAweDgyLCAweGNkLCAweDZlLCAweDNhLAorCTB4NzAsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWMsIDB4MDEsIDB4ODgsIDB4ODIsIDB4Y2QsIDB4NmUsIDB4M2EsCisJMHg3NSwgMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYywgMHgwMSwgMHg4OCwgMHg4MiwgMHhjZCwgMHg2ZSwgMHgzYSwKKwkweDdhLCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDFjLCAweDAxLCAweDg4LCAweDgyLCAweGNkLCAweDZlLCAweDNhLAorCTB4N2YsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWMsIDB4MDEsIDB4ODgsIDB4ODIsIDB4Y2QsIDB4NmUsIDB4M2EsCisJMHg4NCwgMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYywgMHgwMSwgMHg4OCwgMHg4MiwgMHhjZCwgMHg2ZSwgMHgzYSwKKwkweDg5LCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDFjLCAweDAxLCAweDg4LCAweDgyLCAweGNkLCAweDZlLCAweDNhLAorCTB4OGUsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWMsIDB4MDEsIDB4ODgsIDB4ODIsIDB4Y2QsIDB4NmUsIDB4M2EsCisJMHg5MywgMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYywgMHgwMSwgMHg4OCwgMHg4MiwgMHhjZCwgMHg2ZSwgMHgzYSwKKwkweDk4LCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDFjLCAweDAxLCAweDg4LCAweDgyLCAweGNkLCAweDZlLCAweDNhLAorCTB4OWQsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWMsIDB4MDEsIDB4ODgsIDB4ODIsIDB4Y2QsIDB4NmUsIDB4M2EsCisJMHgwMCwgMHgwMCwgMHg1ZiwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHhkNCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MiwKKwkweDAwLCAweDAwLCAweDcxLCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweGQ0LCAweDAyLCAweDAwLCAweDAwLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4M2IsIDB4MDksIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4ODAsIDB4MDEsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg3OSwgMHgwOSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHg4MCwgMHgwMCwgMHg5MiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDg4LCAweDA5LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDgwLCAweDAwLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweGQ0LCAweDA5LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDQwLCAweDAxLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweGRhLCAweDA5LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweGMwLCAweDAwLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHhkYSwgMHgwOSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHhjMCwgMHgwMCwgMHg5MiwKKwkweDAwLCAweDAwLCAweGEyLCAweDBjLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDQwLCAweDAxLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHhkYSwgMHgwOSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHhjMCwgMHgwMCwgMHg5MiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweGVhLCAweDA5LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweGMwLCAweDAwLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHhlYSwgMHgwOSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHhjMCwgMHgwMCwgMHg5MiwKKwkweDAwLCAweDAwLCAweGEyLCAweDBjLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDQwLCAweDAxLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHhlYSwgMHgwOSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHhjMCwgMHgwMCwgMHg5MiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweGU4LCAweDA5LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweGMwLCAweDAwLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHhlOCwgMHgwOSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHhjMCwgMHgwMCwgMHg5MiwKKwkweDAwLCAweDAwLCAweGEyLCAweDBjLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDQwLCAweDAxLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHhlOCwgMHgwOSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHhjMCwgMHgwMCwgMHg5MiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4ODYsIDB4MGEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4YzAsIDB4MDAsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHhkNywgMHgwOSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHgwMCwgMHgwMSwgMHg5MiwKKwkweDAwLCAweDAwLCAweGQ0LCAweDA5LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDQwLCAweDAxLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4N2QsIDB4MGEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4ODAsIDB4MDAsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHhkNywgMHgwOSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHgwMCwgMHgwMSwgMHg5MiwKKwkweDAwLCAweDAwLCAweGQ0LCAweDA5LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDQwLCAweDAxLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4N2QsIDB4MGEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4MDAsIDB4MDEsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHhkNywgMHgwOSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHgwMCwgMHgwMSwgMHg5MiwKKwkweDAwLCAweDAwLCAweGQ0LCAweDA5LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDQwLCAweDAxLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4MGMsIDB4MGIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4ODAsIDB4MDAsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweGQ0LCAweDA5LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDQwLCAweDAxLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweGU5LCAweDA5LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDgwLCAweDAwLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHhlOSwgMHgwOSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHg4MCwgMHgwMCwgMHg5MiwKKwkweDAwLCAweDAwLCAweGEyLCAweDBjLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDQwLCAweDAxLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweGU5LCAweDA5LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDAwLCAweDAxLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHhlOSwgMHgwOSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHgwMCwgMHgwMSwgMHg5MiwKKwkweDAwLCAweDAwLCAweGEyLCAweDBjLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDQwLCAweDAxLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4YTIsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4MDAsIDB4MDEsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweGEyLCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDQwLCAweDAxLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweGMxLCAweDBjLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDQwLCAweDAxLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4YjgsIDB4MGMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4NDAsIDB4MDEsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHhjMSwgMHgwYywgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHg0MCwgMHgwMSwgMHg5MiwKKwkweDAwLCAweDAwLCAweGQ0LCAweDA5LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDQwLCAweDAxLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHhjMSwgMHgwYywgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHg0MCwgMHgwMSwgMHg5MiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4MSwgMHgwOSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHg0MCwgMHgwMCwgMHg5MiwKKwkweDAwLCAweDAwLCAweDgxLCAweDA5LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDgwLCAweDAwLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4ODEsIDB4MDksIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4YzAsIDB4MDAsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHg4MSwgMHgwOSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHgwMCwgMHgwMSwgMHg5MiwKKwkweDAwLCAweDAwLCAweDg2LCAweDA5LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDQwLCAweDAxLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4ODEsIDB4MDksIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4ODAsIDB4MDEsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHg4MSwgMHgwOSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHhjMCwgMHgwMSwgMHg5MiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDc2LCAweDBiLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDgwLCAweDAwLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4NzYsIDB4MGIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4YzAsIDB4MDAsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHg3NiwgMHgwYiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHgwMCwgMHgwMSwgMHg5MiwKKwkweDAwLCAweDAwLCAweGQ0LCAweDA5LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDQwLCAweDAxLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg3NiwgMHgwYiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHhjMCwgMHgwMSwgMHg5MiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweGM5LCAweDBjLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDQwLCAweDAxLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg0NywgMHgwZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHg0MCwgMHgwMSwgMHg5MiwKKwkweDAwLCAweDAwLCAweDRiLCAweDBkLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDQwLCAweDAxLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4YjAsIDB4MGMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4NDAsIDB4MDEsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHg0YiwgMHgwZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHg0MCwgMHgwMSwgMHg5MiwKKwkweDAwLCAweDAwLCAweGEyLCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDQwLCAweDAxLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg0YiwgMHgwZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHg0MCwgMHgwMSwgMHg5MiwKKwkweDAwLCAweDAwLCAweGEzLCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDAwLCAweDAyLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDRjLCAweDBkLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDQwLCAweDAxLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4YjAsIDB4MGMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4NDAsIDB4MDEsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHg0YywgMHgwZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHg0MCwgMHgwMSwgMHg5MiwKKwkweDAwLCAweDAwLCAweGEyLCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDQwLCAweDAxLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg0YywgMHgwZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHg0MCwgMHgwMSwgMHg5MiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDUxLCAweDBkLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDgwLCAweDAwLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4NTEsIDB4MGQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4YzAsIDB4MDAsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHg1MSwgMHgwZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHgwMCwgMHgwMSwgMHg5MiwKKwkweDAwLCAweDAwLCAweGQ0LCAweDA5LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDQwLCAweDAxLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg1MSwgMHgwZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHhjMCwgMHgwMSwgMHg5MiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4NjgsIDB4MDksIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4NDAsIDB4MDAsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDY0LCAweDBkLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDgwLCAweDAwLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4NjQsIDB4MGQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4YzAsIDB4MDAsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHg2NCwgMHgwZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHgwMCwgMHgwMSwgMHg5MiwKKwkweDAwLCAweDAwLCAweGQ0LCAweDA5LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDQwLCAweDAxLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg2NCwgMHgwZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHhjMCwgMHgwMSwgMHg5MiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDdlLCAweDBkLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDgwLCAweDAwLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4N2UsIDB4MGQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4YzAsIDB4MDAsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHg3ZSwgMHgwZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHgwMCwgMHgwMSwgMHg5MiwKKwkweDAwLCAweDAwLCAweGQ0LCAweDA5LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDQwLCAweDAxLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg3ZSwgMHgwZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHhjMCwgMHgwMSwgMHg5MiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4YTIsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweGEyLCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDgwLCAweDAwLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGYsIDB4MGQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4YzAsIDB4MDAsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHhhMiwgMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHgwMCwgMHgwMSwgMHg5MiwKKwkweDAwLCAweDAwLCAweGEyLCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDQwLCAweDAxLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweGEyLCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDgwLCAweDAwLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4YTAsIDB4MGQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4ODAsIDB4MDAsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHhhMiwgMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHgwMCwgMHgwMSwgMHg5MiwKKwkweDAwLCAweDAwLCAweGEyLCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDQwLCAweDAxLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweGEyLCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDgwLCAweDAwLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4YTAsIDB4MGQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4MDAsIDB4MDEsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHhhMiwgMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHgwMCwgMHgwMSwgMHg5MiwKKwkweDAwLCAweDAwLCAweGEyLCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDQwLCAweDAxLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4YTIsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4ODAsIDB4MDAsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweGEyLCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDQwLCAweDAxLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweGI1LCAweDBkLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDgwLCAweDAwLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4YjUsIDB4MGQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4ODAsIDB4MDAsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHhiNSwgMHgwZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHgwMCwgMHgwMSwgMHg5MiwKKwkweDAwLCAweDAwLCAweGEyLCAweDBjLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDQwLCAweDAxLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDc1LCAweDBkLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDgwLCAweDAwLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4NzUsIDB4MGQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4YzAsIDB4MDAsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHg3NSwgMHgwZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHgwMCwgMHgwMSwgMHg5MiwKKwkweDAwLCAweDAwLCAweGQ0LCAweDA5LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDQwLCAweDAxLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg3NSwgMHgwZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHhjMCwgMHgwMSwgMHg5MiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweGNjLCAweDBkLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDAwLCAweDAyLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDg4LCAweDA5LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweGMwLCAweDAxLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweGQ0LCAweDA5LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDQwLCAweDAxLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHhjNCwgMHgwOSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHhjMCwgMHgwMSwgMHg5MiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDg4LCAweDA5LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDgwLCAweDAwLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweGQ0LCAweDA5LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDQwLCAweDAxLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHhjNCwgMHgwOSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHhjMCwgMHgwMSwgMHg5MiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweGE4LCAweDBiLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDgwLCAweDAwLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHhhOCwgMHgwYiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHg4MCwgMHgwMCwgMHg5MiwKKwkweDAwLCAweDAwLCAweGEyLCAweDBjLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDQwLCAweDAxLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHhhOCwgMHgwYiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHg4MCwgMHgwMCwgMHg5MiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweGE4LCAweDBiLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDAwLCAweDAxLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHhhOCwgMHgwYiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHgwMCwgMHgwMSwgMHg5MiwKKwkweDAwLCAweDAwLCAweGEyLCAweDBjLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDQwLCAweDAxLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHhhOCwgMHgwYiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHgwMCwgMHgwMSwgMHg5MiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHhhOCwgMHgwYiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHhjMCwgMHgwMSwgMHg5MiwKKwkweDAwLCAweDAwLCAweGEyLCAweDBjLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDQwLCAweDAxLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHhhOCwgMHgwYiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHhjMCwgMHgwMSwgMHg5MiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHhhOCwgMHgwYiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHgwMCwgMHgwMSwgMHg5MiwKKwkweDAwLCAweDAwLCAweGEyLCAweDBjLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDQwLCAweDAxLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHhhOCwgMHgwYiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHgwMCwgMHgwMSwgMHg5MiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweGEyLCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDQwLCAweDAxLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHgyYSwgMHgwYywgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHg4MCwgMHgwMCwgMHg5MiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweGEyLCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDQwLCAweDAxLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHgyYSwgMHgwYywgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHhjMCwgMHgwMSwgMHg5MiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweGEyLCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDgwLCAweDAwLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweGEyLCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDQwLCAweDAxLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHgzNCwgMHgwYywgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHhjMCwgMHgwMSwgMHg5MiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweGEyLCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDgwLCAweDAwLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweGEyLCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDQwLCAweDAxLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHgzNCwgMHgwYywgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHg4MCwgMHgwMCwgMHg5MiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDMxLCAweDBkLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDQwLCAweDAxLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4YWIsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4NDAsIDB4MDAsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4ZjMsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4ODAsIDB4MDAsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4YjYsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4MDAsIDB4MDEsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHhiNiwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHgwMCwgMHgwMSwgMHg5MiwKKwkweDAwLCAweDAwLCAweGI2LCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDAwLCAweDAxLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDBhLCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDgwLCAweDAwLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHhhYSwgMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHgwMCwgMHgwMSwgMHg5MiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHgxYSwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHg4MCwgMHgwMCwgMHg5MiwKKwkweDAwLCAweDAwLCAweGI0LCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDgwLCAweDAwLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4YWEsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4MDAsIDB4MDEsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4YzMsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4ODAsIDB4MDAsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHhjMywgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHhjMCwgMHgwMCwgMHg5MiwKKwkweDAwLCAweDAwLCAweGFhLCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDAwLCAweDAxLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweGU1LCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweGMwLCAweDAwLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHhhYSwgMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHgwMCwgMHgwMSwgMHg5MiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHhlOCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHgwMCwgMHgwMSwgMHg5MiwKKwkweDAwLCAweDAwLCAweGU4LCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDAwLCAweDAxLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4YWEsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4MDAsIDB4MDEsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4ZWEsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4ODAsIDB4MDAsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHhlYSwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHhjMCwgMHgwMCwgMHg5MiwKKwkweDAwLCAweDAwLCAweGVhLCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDAwLCAweDAxLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHhhYSwgMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHg0MCwgMHgwMCwgMHg5MiwKKwkweDAwLCAweDAwLCAweGMyLCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDgwLCAweDAwLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4YzIsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4YzAsIDB4MDAsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHhhYSwgMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHgwMCwgMHgwMSwgMHg5MiwKKwkweDAwLCAweDAwLCAweGFhLCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDAwLCAweDAwLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4YWEsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4NDAsIDB4MDAsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHhmOCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHg4MCwgMHgwMCwgMHg5MiwKKwkweDAwLCAweDAwLCAweGY4LCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweGMwLCAweDAwLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4YWEsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4MDAsIDB4MDEsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4MmUsIDB4MDksIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4ODAsIDB4MDAsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHhhYSwgMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHhjMCwgMHgwMCwgMHg5MiwKKwkweDAwLCAweDAwLCAweGFhLCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDAwLCAweDAxLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDBmLCAweDA5LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDgwLCAweDAwLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHhhYSwgMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHgwMCwgMHgwMSwgMHg5MiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHgwNywgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHg4MCwgMHgwMCwgMHg5MiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4YWEsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4MDAsIDB4MDEsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4MjIsIDB4MDksIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4ODAsIDB4MDAsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHgyMiwgMHgwOSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHhjMCwgMHgwMCwgMHg5MiwKKwkweDAwLCAweDAwLCAweGFhLCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDAwLCAweDAxLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweGVmLCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDgwLCAweDAwLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4ZWYsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4YzAsIDB4MDAsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHhhYSwgMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHgwMCwgMHgwMSwgMHg5MiwKKwkweDA4LCAweDAwLCAweGExLCAweDAzLCAweDAwLCAweDE4LCAweDAxLCAweGU4LCAweDc2LCAweDIwLCAweDgxLCAweDk5LAorCTB4MDgsIDB4MDAsIDB4OWQsIDB4MDMsIDB4MDAsIDB4MTgsIDB4MDEsIDB4ZTgsIDB4NzYsIDB4MjAsIDB4ODEsIDB4OTksCisJMHgwMCwgMHgwMCwgMHhiMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhmMCwKKwkweDA4LCAweDAwLCAweGE3LCAweDA3LCAweDFkLCAweDE5LCAweDAxLCAweGU4LCAweDc2LCAweDIwLCAweDgxLCAweGI5LAorCTB4MDAsIDB4MDAsIDB4YTEsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NjIsIDB4ODEsIDB4MmYsIDB4OTUsCisJMHgwMCwgMHgwMCwgMHhhMSwgMHgwMywgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHg4MSwgMHgyZiwgMHhiNiwKKwkweDI5LCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDJjLCAweDgyLCAweGNkLCAweDJlLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4YTEsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MDIsIDB4ODEsIDB4MmYsIDB4OTQsCisJMHgwOCwgMHgwMCwgMHhhMSwgMHgwMywgMHgwMCwgMHgxYywgMHgwMSwgMHhlOCwgMHg3NiwgMHgyMCwgMHg4MSwgMHg5OSwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDgwLCAweDBmLCAweDAxLCAweDgwLCAweDAyLCAweGMwLCAweDZlLCAweGI2LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwZSwgMHgwMSwgMHhlYywgMHgwNiwgMHhjMCwgMHg2ZSwgMHgzNSwKKwkweDU0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA3LCAweDAwLCAweDM2LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzgsIDB4YTksIDB4MDAsIDB4MmQsIDB4MzcsCisJMHhiNCwgMHhjYywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHg4NywgMHg4ZCwgMHg5NywgMHgzYSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweDk5LCAweGMwLCAweDJjLCAweDM3LAorCTB4YjQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzgsIDB4ODksIDB4OGQsIDB4OTcsIDB4M2EsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMiwgMHgxMCwgMHgwMCwgMHgwMCwgMHg4NywgMHhiZiwgMHg5NywgMHhiYSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAwLCAweDAwLCAweDA3LCAweDQwLCAweGZlLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjIsIDB4YzEsIDB4MzgsIDB4YjQsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5MCwgMHgwMCwgMHg3OCwgMHgwOSwgMHgwMCwgMHg2ZSwgMHgzMiwKKwkweDAwLCAweDAwLCAweGI3LCAweDA3LCAweGI3LCAweDEwLCAweDAyLCAweGUwLCAweDA2LCAweDgwLCAweDk3LCAweGIyLAorCTB4MDAsIDB4MDAsIDB4YmEsIDB4MDcsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4ZjIsIDB4ODAsIDB4ZmMsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHhiYiwgMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHhjOCwgMHhmZiwgMHg4MCwgMHhmYywgMHg5NCwKKwkweDAwLCAweDAwLCAweGJjLCAweDA3LCAweDlmLCAweDk5LCAweDAwLCAweDgwLCAweDgyLCAweDFiLCAweGVlLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OTgsIDB4MDAsIDB4ZTAsIDB4MGUsIDB4MDAsIDB4NmUsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhNywgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgzMCwKKwkweDE4LCAweDAwLCAweDM2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDczLCAweDBhLCAweDAzLCAweGY5LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDIsIDB4MWMsIDB4MDksIDB4MDAsIDB4NmUsIDB4MzIsCisJMHg0MCwgMHgwMCwgMHhjMSwgMHgwNywgMHgwNiwgMHgwMSwgMHgwMCwgMHg4MCwgMHg4MiwgMHhjZCwgMHg5MSwgMHhiYywKKwkweDAwLCAweDQwLCAweGMyLCAweDA3LCAweDAwLCAweDE4LCAweDAyLCAweGUwLCAweGE2LCAweGNkLCAweDJjLCAweDkyLAorCTB4MDAsIDB4NjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDIsIDB4ZTAsIDB4YTYsIDB4Y2QsIDB4MmMsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHgwOSwgMHg4MCwgMHgwMywgMHgzMiwKKwkweDAwLCAweDAwLCAweGM1LCAweDA3LCAweDgwLCAweGQ3LCAweDAxLCAweDgwLCAweDMyLCAweGMwLCAweDZlLCAweGI2LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4NDksIDB4MDAsIDB4OTIsIDB4M2EsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5OCwgMHgwMSwgMHgxOCwgMHgwOSwgMHgwMCwgMHg2ZSwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBhLCAweDAyLCAweDI0LCAweDA5LCAweGMwLCAweDZlLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YzAsIDB4MDEsIDB4MjgsIDB4MDksIDB4ODAsIDB4NmUsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHhkMywgMHgwNywgMHg4MCwgMHgwZSwgMHgwMSwgMHg4MCwgMHgxMiwgMHhjMCwgMHg2ZSwgMHhiNiwKKwkweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDM0LCAweDAyLCAweGVjLCAweDA2LCAweDAwLCAweDM2LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDksIDB4MDEsIDB4OTIsIDB4M2EsCisJMHgwMCwgMHgwMCwgMHhjZiwgMHgwNywgMHg4MCwgMHhkNiwgMHgwMSwgMHg4MCwgMHg0MiwgMHhjMCwgMHg2ZSwgMHhiNiwKKwkweDAwLCAweDgyLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDAyLCAweGUwLCAweGE2LCAweGNkLCAweDkxLCAweDMyLAorCTB4MDAsIDB4YTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmMsIDB4MDIsIDB4ZTgsIDB4MDYsIDB4MDAsIDB4MzYsIDB4MzIsCisJMHgyOCwgMHgwMCwgMHhkZCwgMHgwNywgMHgwMCwgMHgzMiwgMHgwMiwgMHhlYywgMHgwNiwgMHgwMCwgMHgzNiwgMHg5MiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQzLCAweDAxLCAweDAwLCAweDFjLCAweGQ5LCAweGMxLCAweDkxLCAweDM0LAorCTB4MDAsIDB4ODIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDIsIDB4ZTAsIDB4YTYsIDB4Y2QsIDB4OTEsIDB4MzIsCisJMHgwMCwgMHhhMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyYywgMHgwMiwgMHhlOCwgMHgwNiwgMHgwMCwgMHgzNiwgMHgzMiwKKwkweDM0LCAweDAwLCAweGRkLCAweDA3LCAweDAwLCAweDMyLCAweDAyLCAweGVjLCAweDA2LCAweDAwLCAweDM2LCAweDkyLAorCTB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzQsIDB4MDIsIDB4ZWMsIDB4MDYsIDB4MDAsIDB4MzYsIDB4MzIsCisJMHgyOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4OSwgMHgwZCwgMHg5MiwgMHgzYSwKKwkweDAwLCAweDAwLCAweGQ5LCAweDA3LCAweDgwLCAweGQ2LCAweDAxLCAweDgwLCAweDQyLCAweGMwLCAweDZlLCAweGI2LAorCTB4MDAsIDB4ODYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDIsIDB4ZTAsIDB4YTYsIDB4Y2QsIDB4OTEsIDB4MzIsCisJMHgwNCwgMHhhMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyYywgMHgwMiwgMHhlOCwgMHgwNiwgMHgwMCwgMHgzNiwgMHgzMiwKKwkweDE0LCAweDAwLCAweGRkLCAweDA3LCAweDAwLCAweDMyLCAweDAyLCAweGVjLCAweDA2LCAweDAwLCAweDM2LCAweDkyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDMsIDB4MDEsIDB4MDAsIDB4MWMsIDB4ZDksIDB4YzEsIDB4OTEsIDB4MzQsCisJMHgwMCwgMHg4NiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMiwgMHhlMCwgMHhhNiwgMHhjZCwgMHg5MSwgMHgzMiwKKwkweDA0LCAweGEwLCAweDAwLCAweDAwLCAweDAwLCAweDJjLCAweDAyLCAweGU4LCAweDA2LCAweDAwLCAweDM2LCAweDMyLAorCTB4MjAsIDB4MDAsIDB4ZGQsIDB4MDcsIDB4MDAsIDB4MzIsIDB4MDIsIDB4ZWMsIDB4MDYsIDB4MDAsIDB4MzYsIDB4OTIsCisJMHgxMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMiwgMHhlYywgMHg4NiwgMHhjZCwgMHg5MSwgMHgzYSwKKwkweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDI4LCAweDAyLCAweGU4LCAweDg2LCAweDI0LCAweDkwLCAweDM5LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4MDIsIDB4ZTAsIDB4OTYsIDB4MjQsIDB4MTQsIDB4MzcsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwMSwgMHhlMCwgMHgwNiwgMHg4MCwgMHg5MSwgMHgzMiwKKwkweDAwLCAweDAwLCAweGUzLCAweDA3LCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDgwLCAweDkyLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YzAsIDB4MDEsIDB4ZTAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMCwgMHhlMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGIwLCAweDAwLCAweGUwLCAweDA2LCAweDAwLCAweDAwLCAweDMyLAorCTB4MjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDAsIDB4MzYsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3OCwgMHhhOSwgMHgwMCwgMHgyZCwgMHgzNywKKwkweDAwLCAweGNkLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDg3LCAweDhkLCAweDk3LCAweDNhLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzgsIDB4OTksIDB4YzAsIDB4MmMsIDB4MzcsCisJMHgwMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3OCwgMHg4OSwgMHg4ZCwgMHg5NywgMHgzYSwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAyLCAweDEwLCAweDAwLCAweDAwLCAweDg3LCAweGJmLCAweDk3LCAweGJhLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDAsIDB4MDAsIDB4MDcsIDB4NDAsIDB4ZmUsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHg0OCwgMHhmMiwgMHhjMSwgMHgzOCwgMHhiNCwKKwkweDE4LCAweDAwLCAweDM2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDczLCAweDBhLCAweDAzLCAweGY5LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDEsIDB4MzgsIDB4MDgsIDB4YzAsIDB4NmUsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHhjOSwgMHgwMSwgMHg4MCwgMHgwMiwgMHg4MCwgMHg2ZSwgMHhiYywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDYwLCAweDAxLCAweGVjLCAweDA2LCAweDgwLCAweDgzLCAweDMyLAorCTB4MDEsIDB4MDAsIDB4YWEsIDB4MDcsIDB4MTIsIDB4MDEsIDB4MDAsIDB4MmMsIDB4ODIsIDB4Y2QsIDB4MmUsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDU0LCAweDAxLCAweGIwLCAweDAyLCAweGMwLCAweDZlLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MDIsIDB4ODAsIDB4MDEsIDB4MzIsCisJMHgwMCwgMHhjMCwgMHhmOSwgMHgwNywgMHgxOCwgMHgwMSwgMHgwMCwgMHgwYywgMHhhOCwgMHhjZCwgMHgzZSwgMHhiMiwKKwkweDIwLCAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDA4LCAweDgwLCAweDM2LCAweDMyLAorCTB4MmMsIDB4MDAsIDB4OWQsIDB4MDMsIDB4MTIsIDB4MDEsIDB4MDAsIDB4MmMsIDB4ODIsIDB4Y2QsIDB4MmUsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDYwLCAweDAxLCAweDM4LCAweDA4LCAweGMwLCAweDZlLCAweDMyLAorCTB4MDAsIDB4MDgsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjgsIDB4MDksIDB4MDAsIDB4MzcsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHg1MCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHhlOCwgMHgwMSwgMHgwMCwgMHhmNCwKKwkweDAwLCAweDAwLCAweGZmLCAweDA3LCAweDgwLCAweGQ3LCAweDAxLCAweDJjLCAweDA5LCAweGMwLCAweDZlLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZGEsIDB4ZDcsIDB4MDEsIDB4ZWMsIDB4MDYsIDB4YzAsIDB4NmUsIDB4MzUsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1YSwgMHgwMSwgMHhlYywgMHgwNiwgMHg0MCwgMHhlZCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVjLCAweDAxLCAweGVjLCAweDA2LCAweDgwLCAweGVlLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDIsIDB4MDgsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4NjIsIDB4YzAsIDB4OTIsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg4MiwgMHg4MSwgMHgyZiwgMHgzNCwKKwkweDAwLCAweDAwLCAweGFhLCAweDA3LCAweDA0LCAweDA2LCAweDAxLCAweGVjLCAweDE2LCAweGMwLCAweDZlLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4YWEsIDB4MDcsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NzIsIDB4ODEsIDB4MmYsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MiwgMHg4MSwgMHgyZiwgMHgzNCwKKwkweDNiLCAweDAwLCAweGFhLCAweDA3LCAweDEyLCAweDAxLCAweDAwLCAweDJjLCAweDgyLCAweGNkLCAweDJlLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwNywgMHgwMSwgMHg4MCwgMHgxMiwgMHhjMCwgMHg2ZSwgMHhiYywKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDgwLCAweDAwLCAweDAwLCAweDgwLCAweGIyLCAweDgxLCAweDJmLCAweGI2LAorCTB4MDAsIDB4MDAsIDB4MGEsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4YjIsIDB4ODEsIDB4MmYsIDB4OTQsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHhhMCwgMHgwMCwgMHgxOCwgMHgwOCwgMHgwMCwgMHg2ZSwgMHhiMiwKKwkweDAwLCAweDAwLCAweDAxLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGYwLAorCTB4MDAsIDB4MDAsIDB4NjAsIDB4MTEsIDB4MDAsIDB4NzgsIDB4MDEsIDB4NjAsIDB4MDgsIDB4MDAsIDB4NmUsIDB4ZjIsCisJMHgwMCwgMHgwMCwgMHgwZiwgMHgwOCwgMHgxMiwgMHgwMSwgMHgwMCwgMHhjOCwgMHgwMiwgMHgwMCwgMHgyMCwgMHhiMiwKKwkweDAwLCAweDAwLCAweDEyLCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4MWUsIDB4MDgsIDB4MTIsIDB4MDEsIDB4MDAsIDB4NWMsIDB4MDgsIDB4ODAsIDB4MjAsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHgxMiwgMHgwOCwgMHgxMiwgMHgwMSwgMHgwMCwgMHg2MCwgMHgwMiwgMHg4MCwgMHgyYywgMHhiMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4MTQsIDB4MDgsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4NDAsIDB4ODAsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgxZiwgMHg4MCwgMHhmZiwgMHgzYSwKKwkweDAwLCAweDAwLCAweDE3LCAweDA4LCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweGEyLCAweDgwLCAweDJmLCAweGI2LAorCTB4MTgsIDB4MDAsIDB4MzYsIDB4MDAsIDB4Y2EsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NzMsIDB4MGEsIDB4MDMsIDB4ZjksCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHg4MCwgMHgyZCwgMHhiYywKKwkweDAwLCAweDAwLCAweGFhLCAweDA3LCAweDgwLCAweDAwLCAweDAwLCAweDgwLCAweDcyLCAweDgxLCAweDJmLCAweGI2LAorCTB4M2IsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MmMsIDB4ODIsIDB4Y2QsIDB4MmUsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHhhYSwgMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MiwgMHg4MSwgMHgyZiwgMHg5NCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGJjLCAweDAwLCAweDE0LCAweDA4LCAweDgwLCAweDZlLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MTIsIDB4MDgsIDB4MTIsIDB4MDAsIDB4MDAsIDB4YzgsIDB4MDIsIDB4MDAsIDB4MjAsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHgxMiwgMHgwMCwgMHgwMCwgMHg1YywgMHgwOCwgMHg4MCwgMHgyMCwgMHhiMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweGEwLCAweDAwLCAweDE4LCAweDA4LCAweDAwLCAweDZlLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4NDAsIDB4MmQsIDB4YmMsCisJMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMiwgMHgwMCwgMHg3OCwgMHhlMSwgMHg2ZSwgMHgzOSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAwLCAweDIwLCAweDA3LCAweDAwLCAweDAwLCAweDMyLAorCTB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzgsIDB4NzgsIDB4Y2EsIDB4ZTksIDB4MzksCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzYywgMHgwOCwgMHg0MCwgMHg4MCwgMHgzMiwKKwkweDBjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweDc5LCAweDIxLCAweDJmLCAweDM5LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDIsIDB4NDQsIDB4ZTIsIDB4MjUsIDB4NmUsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHg5MCwgMHgwMCwgMHg2YywgMHgwOCwgMHgwMCwgMHg2ZSwgMHhiMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDk4LCAweDAwLCAweDRjLCAweDA4LCAweDAwLCAweDZlLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2NywgMHhlMCwgMHg4MywgMHgzZSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDA3LCAweDAwLCAweDgwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4YzAsIDB4ODYsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMCwgMHgwMCwgMHgwNywgMHhjMCwgMHg4NCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweGQ4LCAweGEwLCAweDgxLCAweDNjLAorCTB4MDAsIDB4MDAsIDB4ODIsIDB4MDgsIDB4MDQsIDB4YjAsIDB4MDAsIDB4ZTAsIDB4ZDYsIDB4MjAsIDB4NmUsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwOSwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMCwKKwkweDAwLCAweDAwLCAweDUwLCAweDA4LCAweDA0LCAweDAwLCAweDAwLCAweDNjLCAweGQ4LCAweGUwLCAweDgzLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4ODAsIDB4ODEsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgzNCwgMHgwOCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg3MiwgMHg4MCwgMHgyZCwgMHhiYywKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDQ0LCAweGUyLCAweGUwLCAweDM4LCAweGIyLAorCTB4MDAsIDB4MDAsIDB4NDEsIDB4MDgsIDB4NTEsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MTIsIDB4ODAsIDB4MmQsIDB4OWEsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3OCwgMHhmOSwgMHg4MSwgMHg4MywgMHgzNCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDQ0LCAweGUyLCAweGU1LCAweDM4LCAweGIyLAorCTB4MDAsIDB4MDAsIDB4MzksIDB4MDgsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4ODIsIDB4ODAsIDB4MmYsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHg1YywgMHgxMCwgMHgwMCwgMHhhMCwgMHgwMSwgMHg1MCwgMHgwOCwgMHgwMCwgMHg2ZSwgMHhmMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDAxLCAweGUwLCAweDA2LCAweDAwLCAweDg1LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4M2IsIDB4MDgsIDB4MTIsIDB4MDEsIDB4MDAsIDB4ZTgsIDB4MDIsIDB4YzAsIDB4MjEsIDB4YjIsCisJMHgxOCwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHgwYSwgMHgwMywgMHhmOSwKKwkweDAwLCAweDAwLCAweDNmLCAweDA4LCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDgwLCAweDJkLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4YTIsIDB4ODAsIDB4MmYsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHgzYSwgMHgwOCwgMHg2NywgMHgwMCwgMHgwMCwgMHhmOCwgMHhhMiwgMHg4MCwgMHgyZiwgMHhiNSwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweGU4LCAweDAyLCAweGMwLCAweDIxLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4NzIsIDB4ODAsIDB4MmQsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MSwgMHgwMCwgMHgwMCwgMHhkOCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDQ2LCAweDA4LCAweDJhLCAweDAxLCAweDAwLCAweDAwLCAweGQ4LCAweDIwLCAweDgwLCAweGJhLAorCTB4MDAsIDB4MDAsIDB4NDUsIDB4MDgsIDB4MTIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDksIDB4YzAsIDB4MjEsIDB4YjIsCisJMHgxOCwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHgwYSwgMHgwMywgMHhmOSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweDAyLCAweDQwLCAweDg0LCAweDMyLAorCTB4MWQsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4YTQsIDB4MTcsIDB4YjgsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjYSwgMHhlMCwgMHgwMCwgMHg2YywgMHgwOCwgMHgwMCwgMHg2ZSwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGU4LCAweDAwLCAweDRjLCAweDA4LCAweDAwLCAweDZlLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4ZjAsIDB4MDAsIDB4MTgsIDB4MDgsIDB4MDAsIDB4NmUsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzOCwgMHgxOCwgMHg4MSwgMHg4MywgMHgzNSwKKwkweDAwLCAweDAwLCAweDI4LCAweDA4LCAweDA0LCAweGIwLCAweDAwLCAweDgwLCAweDgyLCAweDliLCAweDgxLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MGQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4YjAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg5ZiwgMHgwMCwgMHgwMCwgMHgxNCwgMHgxOCwgMHg0MCwgMHg4MSwgMHhiYywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGNhLCAweDAxLCAweDAwLCAweGY4LCAweDQyLCAweDgwLCAweDJmLCAweDM1LAorCTB4MDgsIDB4YTAsIDB4MjgsIDB4MDgsIDB4MTIsIDB4MDEsIDB4MDAsIDB4NDAsIDB4YTIsIDB4Y2QsIDB4MzksIDB4YjIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweGY5LCAweDgxLCAweDgzLCAweDM0LAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NDQsIDB4ZTIsIDB4ZTUsIDB4MzgsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHg1OCwgMHgwOCwgMHgyOCwgMHgwMCwgMHgwMCwgMHg2YywgMHhkOCwgMHhlMCwgMHg4NiwgMHhiYSwKKwkweDAwLCAweDAwLCAweDViLCAweDEwLCAweDAwLCAweGEwLCAweDAxLCAweDUwLCAweDA4LCAweDAwLCAweDZlLCAweGYyLAorCTB4MDAsIDB4MDAsIDB4NTgsIDB4MDgsIDB4MWQsIDB4ZjgsIDB4MDEsIDB4ZTAsIDB4MDYsIDB4MDAsIDB4ODUsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHg1OCwgMHgwOCwgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHg4MSwgMHgyZiwgMHhiNiwKKwkweDI5LCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDJjLCAweDgyLCAweGNkLCAweDJlLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MDIsIDB4ODEsIDB4MmYsIDB4MzQsCisJMHgwMCwgMHgwMCwgMHg1YywgMHgwOCwgMHgwNCwgMHhhMCwgMHgwMCwgMHhlMCwgMHgwNiwgMHg4MCwgMHg4MSwgMHhiMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGJjLCAweDAwLCAweGU4LCAweDA2LCAweDQwLCAweDgxLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4OTAsIDB4MDAsIDB4ZTAsIDB4MDYsIDB4YzAsIDB4ODYsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHg2ZSwgMHgwOCwgMHgwMCwgMHg5OCwgMHgwMCwgMHhlMCwgMHgwNiwgMHhjMCwgMHg4NCwgMHg5MiwKKwkweDAwLCAweDAwLCAweDYyLCAweDA4LCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweGEyLCAweDgwLCAweDJmLCAweGI2LAorCTB4MDAsIDB4MDAsIDB4NWYsIDB4MDgsIDB4MTIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDksIDB4YzAsIDB4MjEsIDB4YjIsCisJMHgxOCwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHgwYSwgMHgwMywgMHhmOSwKKwkweDFkLCAweDAwLCAweDYyLCAweDA4LCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweGE0LCAweDE3LCAweGI4LAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4ZTIsIDB4ODAsIDB4MmYsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHg1ZSwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHhlMiwgMHg4MCwgMHgyZiwgMHg5NCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweGUwLCAweDAwLCAweDZjLCAweDA4LCAweDAwLCAweDZlLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4Y2EsIDB4ZTgsIDB4MDAsIDB4NGMsIDB4MDgsIDB4MDAsIDB4NmUsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHhmMCwgMHgwMCwgMHgxOCwgMHgwOCwgMHgwMCwgMHg2ZSwgMHhiMiwKKwkweDAwLCAweDAwLCAweDZhLCAweDA4LCAweDA0LCAweGIwLCAweDAwLCAweDgwLCAweDgyLCAweDliLCAweDgxLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MGQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4YjAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg5ZiwgMHgwMCwgMHgwMCwgMHgxNCwgMHgxOCwgMHg0MCwgMHg4MSwgMHhiYywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGNhLCAweDAxLCAweDAwLCAweGY4LCAweDQyLCAweDgwLCAweDJmLCAweDM1LAorCTB4MDgsIDB4YTAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NDAsIDB4YTIsIDB4Y2QsIDB4MzksIDB4YjIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMCwgMHgwMCwgMHhlMCwgMHgwNiwgMHg4MCwgMHg4MSwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDk4LCAweDAwLCAweGUwLCAweDA2LCAweGMwLCAweDg0LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4OTAsIDB4MDAsIDB4ZTAsIDB4MDYsIDB4YzAsIDB4ODYsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiYywgMHgwMCwgMHhlOCwgMHgwNiwgMHg0MCwgMHg4MSwgMHgzMiwKKwkweDAwLCAweDAwLCAweDc0LCAweDA4LCAweDJhLCAweDVkLCAweDAxLCAweGVjLCAweDA2LCAweDgwLCAweGVlLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4NzEsIDB4MDgsIDB4MTIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDksIDB4YzAsIDB4MjEsIDB4YjIsCisJMHgxOCwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHgwYSwgMHgwMywgMHhmOSwKKwkweDFkLCAweDAwLCAweDc0LCAweDA4LCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweGE0LCAweDE3LCAweGI4LAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4ZTIsIDB4ODAsIDB4MmYsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHg3MCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHhlMiwgMHg4MCwgMHgyZiwgMHg5NCwKKwkweDEwLCAweDA0LCAweDc3LCAweDA4LCAweDM3LCAweDAwLCAweDAwLCAweGY4LCAweGEyLCAweDhkLCAweDJmLCAweGIxLAorCTB4M2IsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MmMsIDB4ODIsIDB4Y2QsIDB4MmUsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MiwgMHg4MSwgMHgyZiwgMHgzNCwKKwkweDA4LCAweDAwLCAweDAwLCAweDAwLCAweGNhLCAweDFjLCAweDAxLCAweGU4LCAweDc2LCAweDIwLCAweDgxLCAweDM5LAorCTB4MDAsIDB4MDAsIDB4YzYsIDB4MGUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmMsIDB4ZjksIDB4MDEsIDB4MDAsIDB4ZjQsCisJMHgwMCwgMHgwMCwgMHg3ZCwgMHgwOCwgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHhlMiwgMHg4MCwgMHgyZiwgMHhiNiwKKwkweDAwLCAweDAwLCAweDdjLCAweDA4LCAweDEyLCAweDAxLCAweDAwLCAweDAwLCAweDA5LCAweGMwLCAweDIxLCAweGIyLAorCTB4MTgsIDB4MDAsIDB4MzYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NzMsIDB4MGEsIDB4MDMsIDB4ZjksCisJMHgxZCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHhhNCwgMHgxNywgMHhiOCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweDgyLCAweDgwLCAweDJmLCAweGI2LAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4YzIsIDB4MDAsIDB4MDMsIDB4YmMsCisJMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMCwgMHg4MCwgMHg2NywgMHhhMSwgMHg3MywgMHgzOSwKKwkweDMwLCAweDAwLCAweGE0LCAweDAzLCAweDEyLCAweDAxLCAweDAwLCAweDVjLCAweGEyLCAweDhkLCAweDJjLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHhkMiwgMHhlMCwgMHg4MywgMHhiYywKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDJhLCAweDAwLCAweDAwLCAweDc4LCAweGY5LCAweDgxLCAweDgzLCAweGI0LAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NDQsIDB4ZTIsIDB4ZTUsIDB4MzgsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHhkMSwgMHgwZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMywgMHgwMCwgMHgzOCwgMHhmMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDA4LCAweDFkLCAweDAwLCAweDAwLCAweDM4LCAweDE4LCAweDgxLCAweDgzLCAweGI1LAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MDgsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4ODEsIDB4MmYsIDB4YjYsCisJMHgyOSwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHgyYywgMHg4MiwgMHhjZCwgMHgyZSwgMHhiMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDAyLCAweDgxLCAweDJmLCAweDM0LAorCTB4MDAsIDB4MDAsIDB4OGQsIDB4MDgsIDB4MDQsIDB4MDYsIDB4MDEsIDB4ZWMsIDB4MTYsIDB4YzAsIDB4NmUsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjYSwgMHgwMSwgMHgwMCwgMHhmOCwgMHg0MiwgMHg4MCwgMHgyZiwgMHgzNCwKKwkweDA4LCAweGMwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDQwLCAweGEyLCAweGNkLCAweDM5LCAweGIyLAorCTB4MDAsIDB4MDAsIDB4OTAsIDB4MDgsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4ODIsIDB4ODAsIDB4MmYsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHg1YywgMHgxMCwgMHgwMCwgMHhhMCwgMHgwMSwgMHg1MCwgMHgwOCwgMHgwMCwgMHg2ZSwgMHhmMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDAxLCAweGUwLCAweDA2LCAweDAwLCAweDg1LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4OTIsIDB4MDgsIDB4MTIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDksIDB4YzAsIDB4MjEsIDB4YjIsCisJMHgxOCwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHgwYSwgMHgwMywgMHhmOSwKKwkweDAwLCAweDAwLCAweGFlLCAweDA4LCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweGEyLCAweDgwLCAweDJmLCAweGI2LAorCTB4MDAsIDB4MDAsIDB4OTUsIDB4MDgsIDB4MTIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDksIDB4YzAsIDB4MjEsIDB4YjIsCisJMHgxOCwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHgwYSwgMHgwMywgMHhmOSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweGEyLCAweDgwLCAweDJmLCAweDM1LAorCTB4MDAsIDB4MDAsIDB4YWMsIDB4MDgsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4NjEsIDB4ODAsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHhhNCwgMHgwOCwgMHg4MCwgMHhiOCwgMHgwMCwgMHgwMCwgMHgwOSwgMHhjMCwgMHg2ZSwgMHhiMiwKKwkweDQwLCAweDAwLCAweDljLCAweDA4LCAweDA0LCAweDAwLCAweDAwLCAweDgwLCAweDgyLCAweDBkLCAweDkwLCAweGJjLAorCTB4ODAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ODIsIDB4MGQsIDB4OTAsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg5YywgMHgwOCwgMHgwMiwgMHhiMCwgMHgwMCwgMHg4MCwgMHg4MiwgMHgxYiwgMHg4NCwgMHhiYywKKwkweDAwLCAweDAwLCAweGE0LCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweGIyLCAweDgxLCAweDJmLCAweDk0LAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDcsIDB4MDEsIDB4ODAsIDB4MTIsIDB4YzAsIDB4NmUsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHhiMiwgMHg4MSwgMHgyZiwgMHhiNiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDgwLCAweGQ2LCAweDAxLCAweDgwLCAweDUyLCAweGMwLCAweDZlLCAweGI2LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDYsIDB4MDEsIDB4ZWMsIDB4NTYsIDB4YzAsIDB4NmUsIDB4MzQsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2MCwgMHgxOCwgMHgwMCwgMHg4NiwgMHgzYSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweGI3LCAweDAxLCAweDc4LCAweDM0LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzgsIDB4MDEsIDB4ZTAsIDB4MDYsIDB4MDAsIDB4ODYsIDB4MzIsCisJMHg0MCwgMHgwMCwgMHhhZSwgMHgwOCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg4MiwgMHgwZCwgMHg5MCwgMHhiYywKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweGEwLCAweDAwLCAweDE4LCAweDA4LCAweDAwLCAweDZlLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4MDEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MjAsIDB4ODAsIDB4ZmEsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNiwgMHgwMCwgMHgwMCwgMHgzYywgMHgxOCwgMHgyMCwgMHg4NCwgMHhiYywKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweGIwLCAweDAwLCAweDNjLCAweDg4LCAweGRiLCAweDgzLCAweGJlLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4YzIsIDB4MDEsIDB4NzgsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHhmNywgMHgyMCwgMHg3OCwgMHgzYSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDU4LCAweDc4LCAweDAxLCAweGUwLCAweGY2LCAweDIwLCAweDg2LCAweDNhLAorCTB4MDAsIDB4MDAsIDB4MjUsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4ZjgsIDB4NjAsIDB4ODAsIDB4OWEsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg3MiwgMHg4MSwgMHgyZiwgMHhiNiwKKwkweDJlLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDJjLCAweDgyLCAweGNkLCAweDJlLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ODIsIDB4ODAsIDB4MmYsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHhjMiwgMHgwMCwgMHgwMywgMHhiYywKKwkweDEwLCAweDAwLCAweDAwLCAweDAwLCAweGQ0LCAweDE4LCAweDAwLCAweDgwLCAweDY3LCAweGExLCAweDczLCAweDM5LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZGEsIDB4NWMsIDB4MDEsIDB4ZWMsIDB4MDYsIDB4ODAsIDB4ZWUsIDB4MzIsCisJMHgzMCwgMHgwMCwgMHhhYSwgMHgwNywgMHgxMiwgMHgwMSwgMHgwMCwgMHg1YywgMHhhMiwgMHg4ZCwgMHgyYywgMHhiMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4YzIsIDB4ODEsIDB4MmYsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHgxYSwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHhjMiwgMHg4MSwgMHgyZiwgMHg5NSwKKwkweDAwLCAweDAwLCAweGI4LCAweDA4LCAweDgwLCAweDAwLCAweDAwLCAweDgwLCAweGMyLCAweDgxLCAweDJmLCAweGI2LAorCTB4MDAsIDB4MDAsIDB4YmIsIDB4MDgsIDB4MDAsIDB4ZDAsIDB4MDEsIDB4ZTgsIDB4MDYsIDB4MDAsIDB4MDAsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHhjMiwgMHg4MSwgMHgyZiwgMHgzNSwKKwkweDAwLCAweDAwLCAweGJiLCAweDA4LCAweDA0LCAweGQxLCAweDAxLCAweDgwLCAweDAyLCAweDgwLCAweDZlLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDYsIDB4MDEsIDB4ZWMsIDB4MjYsIDB4YzAsIDB4NmUsIDB4MzQsCisJMHgwMCwgMHgwMCwgMHhiZCwgMHgwOCwgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg5MiwgMHg4MSwgMHgyZiwgMHhiNiwKKwkweDAwLCAweDAwLCAweGMwLCAweDA4LCAweDAwLCAweGM4LCAweDAxLCAweGU4LCAweDA2LCAweDAwLCAweDAwLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4OTIsIDB4ODEsIDB4MmYsIDB4MzUsCisJMHgwMCwgMHgwMCwgMHhjMCwgMHgwOCwgMHgwNCwgMHhjOSwgMHgwMSwgMHg4MCwgMHgwMiwgMHg4MCwgMHg2ZSwgMHhiYywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ2LCAweDAxLCAweGVjLCAweDE2LCAweGMwLCAweDZlLCAweDM0LAorCTB4MTAsIDB4MDAsIDB4YWEsIDB4MDcsIDB4MTIsIDB4MDEsIDB4MDAsIDB4MmMsIDB4ODIsIDB4Y2QsIDB4MmUsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweGFhLCAweDA3LCAweDlhLCAweDAxLCAweDAwLCAweGY4LCAweDQyLCAweDgxLCAweDJmLCAweGI1LAorCTB4MDAsIDB4MDAsIDB4YWEsIDB4MDcsIDB4MTIsIDB4MDAsIDB4MDAsIDB4YzgsIDB4MDIsIDB4MDAsIDB4MjAsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHhjNywgMHgwOCwgMHgxMiwgMHgwMSwgMHgwMCwgMHg1YywgMHgwOCwgMHg4MCwgMHgyMCwgMHhiMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDVjLCAweDAyLCAweDgwLCAweDJjLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4YWEsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MWYsIDB4ODAsIDB4ZmYsIDB4OWEsCisJMHgwYywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3OCwgMHg3OSwgMHgyMSwgMHgyZiwgMHgzOSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweGY5LCAweDgxLCAweDk3LCAweDM0LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDIsIDB4NDQsIDB4ZTIsIDB4MjUsIDB4NmUsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMCwgMHgwMSwgMHg1MCwgMHgwOCwgMHgwMCwgMHg2ZSwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweDAxLCAweDYwLCAweDA4LCAweDAwLCAweDZlLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDIsIDB4MGMsIDB4MDksIDB4MDAsIDB4NmUsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHgwMSwgMHgxYywgMHgwOSwgMHgwMCwgMHg2ZSwgMHgzMiwKKwkweDAwLCAweDAwLCAweDc3LCAweDEwLCAweDAwLCAweGE4LCAweDAxLCAweDA4LCAweDA5LCAweDAwLCAweDZlLCAweGYyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDQsIDB4ZjgsIDB4MDEsIDB4ZTAsIDB4MDYsIDB4MDAsIDB4ODUsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkYSwgMHg1YywgMHgwMSwgMHhlYywgMHgwNiwgMHg4MCwgMHhlZSwgMHgzMiwKKwkweDAwLCAweDAwLCAweGQxLCAweDBmLCAweDAwLCAweDAwLCAweDAwLCAweDMwLCAweDAzLCAweDAwLCAweDM4LCAweGYyLAorCTB4MDAsIDB4MDAsIDB4ZDQsIDB4MDgsIDB4MjMsIDB4MjksIDB4MDIsIDB4MDQsIDB4MDksIDB4ODAsIDB4NmUsIDB4YjIsCisJMHgzYywgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHgyYywgMHg4MiwgMHhjZCwgMHgyZSwgMHhiMiwKKwkweDA4LCAweDAwLCAweGQ4LCAweDA4LCAweDFkLCAweDFjLCAweDAxLCAweGU4LCAweDc2LCAweDIwLCAweDgxLCAweGI5LAorCTB4MDAsIDB4MDAsIDB4ZDgsIDB4MDgsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4ODEsIDB4MmYsIDB4YjYsCisJMHgyOSwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHgyYywgMHg4MiwgMHhjZCwgMHgyZSwgMHhiMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDAyLCAweDgxLCAweDJmLCAweDM0LAorCTB4MDAsIDB4MDAsIDB4YzYsIDB4MGUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmMsIDB4ZjksIDB4MDEsIDB4MDAsIDB4ZjQsCisJMHgwMCwgMHgwMCwgMHhkYywgMHgwOCwgMHg5ZCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwNywgMHhjMCwgMHg5MCwgMHhiMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDMwLCAweDAwLCAweDgwLCAweDA3LCAweGMwLCAweDkxLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzgsIDB4MDAsIDB4ODAsIDB4MDcsIDB4MDAsIDB4ZWUsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwMCwgMHg4MCwgMHgwNywgMHhjMCwgMHg4NSwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDAwLCAweDgwLCAweDA3LCAweDQwLCAweDkwLCAweDMyLAorCTB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDAsIDB4ODAsIDB4ODcsIDB4OGQsIDB4ODUsIDB4MzcsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHgwMCwgMHg4MCwgMHgwNywgMHgwMCwgMHg4NiwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDI4LCAweDAwLCAweDgwLCAweDA3LCAweDAwLCAweDg1LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4ZTMsIDB4MDgsIDB4MTIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDksIDB4YzAsIDB4MjEsIDB4YjIsCisJMHgxOCwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHgwYSwgMHgwMywgMHhmOSwKKwkweDMwLCAweDAwLCAweGE0LCAweDAzLCAweDEyLCAweDAxLCAweDAwLCAweDVjLCAweGEyLCAweDhkLCAweDJjLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgxMiwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHhhMiwgMHg4ZCwgMHgyZiwgMHhiMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGNjLCAweDAxLCAweDc4LCAweDA5LCAweDgwLCAweDZlLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4YWEsIDB4MDcsIDB4ZGMsIDB4ZDEsIDB4MDEsIDB4ZTgsIDB4MDYsIDB4ODAsIDB4OTcsIDB4OTIsCisJMHgxMiwgMHgwMCwgMHhhYSwgMHgwNywgMHgxMiwgMHgwMSwgMHgwMCwgMHgyYywgMHg4MiwgMHhjZCwgMHgyZSwgMHhiMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4NGYsIDB4MGUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDksIDB4NDAsIDB4ODEsIDB4ZjIsCisJMHgwMCwgMHgwMCwgMHgyZiwgMHgwZSwgMHgwMCwgMHhhOCwgMHgwMSwgMHgyMCwgMHgwOSwgMHgwMCwgMHg2ZSwgMHhmMiwKKwkweDAwLCAweDAwLCAweGFhLCAweDA3LCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweGYyLCAweDgwLCAweDJmLCAweGI2LAorCTB4MzAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MmMsIDB4ODIsIDB4Y2QsIDB4MmUsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHhhYSwgMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg0MiwgMHg4MSwgMHgyZiwgMHg5NCwKKwkweDAwLCAweDAwLCAweGFhLCAweDA3LCAweDM1LCAweDAxLCAweDAwLCAweGY4LCAweDEyLCAweDgxLCAweDJmLCAweGI1LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MDIsIDB4ODAsIDB4MDEsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1NCwgMHgwMSwgMHhiMCwgMHgwMiwgMHhjMCwgMHg2ZSwgMHgzMiwKKwkweDAwLCAweGMwLCAweGY2LCAweDA4LCAweDE4LCAweDAxLCAweDAwLCAweDBjLCAweGE4LCAweGNkLCAweDNlLCAweGIyLAorCTB4MjAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDgsIDB4ODAsIDB4MzYsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHg5ZCwgMHgwMywgMHgxMiwgMHgwMSwgMHgwMCwgMHgyYywgMHg3MiwgMHhlMCwgMHgyZSwgMHhiMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4NDcsIDB4MTAsIDB4MDAsIDB4OTgsIDB4MDEsIDB4MjgsIDB4MDksIDB4MDAsIDB4NmUsIDB4ZjIsCisJMHgwMCwgMHgwMCwgMHhhYSwgMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweGZmLCAweDA4LCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweGEyLCAweDgxLCAweDJmLCAweGI2LAorCTB4MDAsIDB4MDAsIDB4ZmYsIDB4MDgsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDIsIDB4ODEsIDB4MmYsIDB4YjYsCisJMHgxZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOSwgMHgwMCwgMHgzNiwgMHgzMiwKKwkweDAwLCAweDAwLCAweGUyLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDA5LCAweDgwLCAweDJmLCAweGQyLAorCTB4MDAsIDB4MDAsIDB4ZmYsIDB4MDgsIDB4MDgsIDB4NWIsIDB4MDEsIDB4ZWMsIDB4MDYsIDB4ZmIsIDB4NmUsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1YSwgMHgwMSwgMHhlYywgMHgwNiwgMHgwMCwgMHgwMCwgMHgzMiwKKwkweDM0LCAweDAwLCAweDAwLCAweDAwLCAweGQ0LCAweDAxLCAweDAwLCAweDJjLCAweDgyLCAweGNkLCAweDJlLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDYsIDB4MDksIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4OTIsIDB4ODEsIDB4MmYsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHhjMiwgMHg4MSwgMHgyZiwgMHhiNiwKKwkweDAwLCAweDAwLCAweDBkLCAweDA5LCAweDA4LCAweGM5LCAweDAxLCAweGU4LCAweDA2LCAweGJiLCAweDZlLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YzgsIDB4MDEsIDB4ZTgsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MzIsCisJMHgzMiwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHgyYywgMHg4MiwgMHhjZCwgMHgyZSwgMHhiMiwKKwkweDAwLCAweDAwLCAweDU4LCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDI4LCAweDA5LCAweDgwLCAweDAxLCAweGYyLAorCTB4MDAsIDB4MDAsIDB4YWEsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHgwZCwgMHgwOSwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHhjMiwgMHg4MSwgMHgyZiwgMHhiNiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDgwLCAweDAwLCAweDAwLCAweDgwLCAweDkyLCAweDgxLCAweDJmLCAweGI2LAorCTB4MDAsIDB4MDAsIDB4MGQsIDB4MDksIDB4MDgsIDB4ZDEsIDB4MDEsIDB4ZTgsIDB4MDYsIDB4YmIsIDB4NmUsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkMCwgMHgwMSwgMHhlOCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgzMiwKKwkweDMyLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDJjLCAweDgyLCAweGNkLCAweDJlLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4NTgsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjgsIDB4MDksIDB4YzAsIDB4MDEsIDB4ZjIsCisJMHgwMCwgMHgwMCwgMHhhYSwgMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweGFhLCAweDA3LCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweGYyLCAweDgxLCAweDJmLCAweGI2LAorCTB4MTcsIDB4MDAsIDB4YWEsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmMsIDB4ODIsIDB4Y2QsIDB4MmUsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwNywgMHgwMSwgMHg4MCwgMHgxMiwgMHhjMCwgMHg2ZSwgMHhiYywKKwkweDAwLCAweDAwLCAweDEzLCAweDA5LCAweDEyLCAweDAwLCAweDAwLCAweGM4LCAweDAyLCAweDAwLCAweDIwLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4MTYsIDB4MDksIDB4MTIsIDB4MDEsIDB4MDAsIDB4NWMsIDB4MDgsIDB4ODAsIDB4MjAsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHg1YywgMHgwMiwgMHg4MCwgMHgyYywgMHhiMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDFmLCAweDgwLCAweGZmLCAweDNhLAorCTB4MDAsIDB4MDAsIDB4OWQsIDB4MDMsIDB4MTIsIDB4MDEsIDB4MDAsIDB4MmMsIDB4NzIsIDB4ZTAsIDB4MmUsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDBjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweDc5LCAweDIxLCAweDJmLCAweDM5LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzgsIDB4ZjksIDB4ODEsIDB4OTcsIDB4MzQsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMiwgMHg0NCwgMHhlMiwgMHgyNSwgMHg2ZSwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ0LCAweGEwLCAweDAxLCAweDUwLCAweDA4LCAweDAwLCAweDZlLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZGIsIDB4NzksIDB4MDEsIDB4NjAsIDB4MDgsIDB4MDAsIDB4NmUsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHg1YywgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwOCwgMHgwMCwgMHgwMCwgMHhmMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDAxLCAweGUwLCAweDA2LCAweDAwLCAweDg1LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MWYsIDB4MDksIDB4MTIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDksIDB4YzAsIDB4MjEsIDB4YjIsCisJMHgxOCwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHgwYSwgMHgwMywgMHhmOSwKKwkweDMwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDVjLCAweGEyLCAweDhkLCAweDJjLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDcsIDB4MDEsIDB4ZWMsIDB4MTYsIDB4YzAsIDB4NmUsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHhhYSwgMHgwNywgMHhkYSwgMHg1YywgMHgwMSwgMHhlYywgMHgwNiwgMHg4MCwgMHhlZSwgMHg5MiwKKwkweDAwLCAweDAwLCAweGFhLCAweDA3LCAweDlmLCAweDQxLCAweDAxLCAweDgwLCAweDUyLCAweDIwLCAweDZlLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4MmQsIDB4MDksIDB4OWYsIDB4OTgsIDB4MDEsIDB4ODAsIDB4NTIsIDB4MjAsIDB4NmUsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkOCwgMHgwMiwgMHg4MCwgMHgwMSwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDU0LCAweDAxLCAweGIwLCAweDAyLCAweGMwLCAweDZlLCAweDMyLAorCTB4MDAsIDB4YzAsIDB4MmIsIDB4MDksIDB4MTgsIDB4MDEsIDB4MDAsIDB4MGMsIDB4YTgsIDB4Y2QsIDB4M2UsIDB4YjIsCisJMHgyMCwgMHg4MCwgMHhhYSwgMHgwNywgMHgzMSwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwOCwgMHg4MCwgMHgzNiwgMHhiMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDEyLCAweDgxLCAweDJmLCAweDM0LAorCTB4M2EsIDB4MDAsIDB4YWEsIDB4MDcsIDB4MTIsIDB4MDEsIDB4MDAsIDB4MmMsIDB4ODIsIDB4Y2QsIDB4MmUsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDQ3LCAweDEwLCAweDAwLCAweDk4LCAweDAxLCAweDI4LCAweDA5LCAweDAwLCAweDZlLCAweGYyLAorCTB4MDAsIDB4MDAsIDB4YWEsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHhhYSwgMHgwNywgMHhkNSwgMHg0MSwgMHgwMSwgMHhlMCwgMHgwNiwgMHg0MCwgMHg4MSwgMHg5MiwKKwkweDAwLCAweDAwLCAweGFhLCAweDA3LCAweDA0LCAweGIwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDZlLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MDgsIDB4MDAsIDB4NmUsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHg2MCwgMHgxMSwgMHgwMCwgMHg3OCwgMHgwMSwgMHg2MCwgMHgwOCwgMHgwMCwgMHg2ZSwgMHhmMiwKKwkweDAwLCAweDAwLCAweGFhLCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGMsIDB4MDIsIDB4NzgsIDB4MDksIDB4ODAsIDB4NmUsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgzNSwgMHgwOSwgMHgwNCwgMHhkNCwgMHgwMSwgMHg4MCwgMHgxMiwgMHhjMCwgMHg2ZSwgMHhiYywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweDE5LCAweDgwLCAweDk3LCAweDM3LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OTAsIDB4MDEsIDB4ZTAsIDB4ZTYsIDB4MjUsIDB4NmUsIDB4M2EsCisJMHgwMCwgMHgwMCwgMHg2MCwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhmMCwKKwkweDAwLCAweDAwLCAweDM5LCAweDA5LCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4YWEsIDB4MDcsIDB4MDAsIDB4OTAsIDB4MDEsIDB4ZTAsIDB4MDYsIDB4MDAsIDB4ODAsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5MCwgMHgwMSwgMHhlMCwgMHgwNiwgMHgwMCwgMHg4MCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDFhLCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzgsIDB4MDksIDB4MDAsIDB4NmUsIDB4MzIsCisJMHgwMiwgMHgwMCwgMHgzZiwgMHgwOSwgMHgwNCwgMHhiOSwgMHgwMCwgMHg4MCwgMHg4MiwgMHhjZCwgMHg2ZSwgMHhiYywKKwkweDAwLCAweDAwLCAweDQxLCAweDA5LCAweDgwLCAweDAwLCAweDAwLCAweDgwLCAweDcyLCAweDgwLCAweGZjLCAweGI2LAorCTB4MDAsIDB4MDAsIDB4NDQsIDB4MDksIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHg0MSwgMHgwOSwgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg4MiwgMHg4MCwgMHhmYywgMHhiNiwKKwkweDAwLCAweDAwLCAweDQ0LCAweDA5LCAweDAwLCAweDAwLCAweDAwLCAweGIwLCAweDAyLCAweDAwLCAweDAwLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4ZjUsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOCwgMHg0MiwgMHhiZCwgMHg5NywgMHgzMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDk5LCAweGIxLCAweGYyLCAweGMwLCAweDdjLCAweDMwLAorCTB4MDAsIDB4YzAsIDB4NDgsIDB4MDksIDB4MTgsIDB4MDEsIDB4MDAsIDB4MGMsIDB4YTgsIDB4Y2QsIDB4M2UsIDB4YjIsCisJMHgyMCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwOCwgMHg4MCwgMHgzNiwgMHgzMiwKKwkweDAwLCAweDAwLCAweGExLCAweDAzLCAweDEyLCAweDAxLCAweDAwLCAweDJjLCAweDgyLCAweGNkLCAweDJlLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwOCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyOCwgMHgwOSwgMHgwMCwgMHgzNywgMHgzMiwKKwkweDAwLCAweDAwLCAweDUwLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweGU4LCAweDAxLCAweDAwLCAweGY0LAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDcsIDB4MDEsIDB4ZWMsIDB4MTYsIDB4YzAsIDB4NmUsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOCwgMHhhMiwgMHgwMCwgMHgyZCwgMHgzNywKKwkweDBhLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweDA5LCAweDAwLCAweDM2LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4OTksIDB4ZTEsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHg0ZCwgMHgwOSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg3OCwgMHgxOSwgMHg4MCwgMHg5NywgMHhiYywKKwkweDAyLCAweDAwLCAweDU5LCAweDA5LCAweDA0LCAweGI5LCAweDAwLCAweDgwLCAweDgyLCAweGNkLCAweDZlLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDgsIDB4ZDYsIDB4MDEsIDB4MDAsIDB4NzgsIDB4YzksIDB4Y2QsIDB4MmMsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHg1MSwgMHgwOSwgMHhiNiwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDY0LCAweDAyLCAweDgwLCAweDk3LCAweGIyLAorCTB4MDAsIDB4MDAsIDB4NTMsIDB4MDksIDB4MTIsIDB4MDgsIDB4MDAsIDB4NjQsIDB4MDIsIDB4MDAsIDB4NmUsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHg1NCwgMHgwOSwgMHgxMiwgMHgxOCwgMHgwMCwgMHg2NCwgMHgwMiwgMHgwMCwgMHg2ZSwgMHhiMiwKKwkweDAwLCAweDAwLCAweDU1LCAweDA5LCAweDEyLCAweDEwLCAweDAwLCAweDY0LCAweDAyLCAweDAwLCAweDZlLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTYsIDB4NTQsIDB4MDEsIDB4ZWMsIDB4MDYsIDB4MDAsIDB4MmIsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2NCwgMHgwMSwgMHhlOCwgMHgwNiwgMHhjMCwgMHgyYywgMHgzMiwKKwkweDAwLCAweDAwLCAweGEyLCAweDA3LCAweDAwLCAweDBlLCAweDAxLCAweGVjLCAweDA2LCAweDAwLCAweDAwLCAweDk0LAorCTB4MDAsIDB4MjAsIDB4MDAsIDB4NGMsIDB4ZDYsIDB4MDEsIDB4MDAsIDB4NzgsIDB4YzksIDB4Y2QsIDB4MmMsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHg1YSwgMHgwOSwgMHhiNiwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDY0LCAweDAyLCAweDgwLCAweDk3LCAweGIyLAorCTB4MDAsIDB4MDAsIDB4NWMsIDB4MDksIDB4MTIsIDB4MDgsIDB4MDAsIDB4NjQsIDB4MDIsIDB4MDAsIDB4NmUsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHg1ZCwgMHgwOSwgMHgxMiwgMHgzMCwgMHgwMCwgMHg2NCwgMHgwMiwgMHgwMCwgMHg2ZSwgMHhiMiwKKwkweDAwLCAweDAwLCAweDVlLCAweDA5LCAweDEyLCAweDM4LCAweDAwLCAweDY0LCAweDAyLCAweDAwLCAweDZlLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4NWYsIDB4MDksIDB4MTIsIDB4NDAsIDB4MDAsIDB4NjQsIDB4MDIsIDB4MDAsIDB4NmUsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHg2MCwgMHgwOSwgMHgxMiwgMHg0OCwgMHgwMCwgMHg2NCwgMHgwMiwgMHgwMCwgMHg2ZSwgMHhiMiwKKwkweDAwLCAweDAwLCAweDYxLCAweDA5LCAweDEyLCAweDEwLCAweDAwLCAweDY0LCAweDAyLCAweDAwLCAweDZlLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4NjIsIDB4MDksIDB4MTIsIDB4MTgsIDB4MDAsIDB4NjQsIDB4MDIsIDB4MDAsIDB4NmUsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHg2MywgMHgwOSwgMHgxMiwgMHgyMCwgMHgwMCwgMHg2NCwgMHgwMiwgMHgwMCwgMHg2ZSwgMHhiMiwKKwkweDAwLCAweDAwLCAweDY0LCAweDA5LCAweDEyLCAweDI4LCAweDAwLCAweDY0LCAweDAyLCAweDAwLCAweDZlLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTYsIDB4NTQsIDB4MDEsIDB4ZWMsIDB4MDYsIDB4MDAsIDB4MmIsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2NCwgMHgwMSwgMHhlOCwgMHgwNiwgMHhjMCwgMHgyYywgMHgzMiwKKwkweDAzLCAweDAwLCAweGEyLCAweDA3LCAweDAwLCAweDBlLCAweDAxLCAweGVjLCAweDA2LCAweDAwLCAweDM2LCAweDkyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjAsIDB4MDIsIDB4MDAsIDB4MDIsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHg2YiwgMHgwOSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwOCwgMHg4MCwgMHgzZCwgMHg5MiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGIwLCAweDAyLCAweDAwLCAweDAyLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4NmUsIDB4MDksIDB4MDQsIDB4MDAsIDB4MDAsIDB4ZGMsIDB4NTMsIDB4NjAsIDB4M2QsIDB4YjMsCisJMHgxOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHg4YSwgMHgwMywgMHgzOSwKKwkweDZhLCAweDA5LCAweDM2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGMwLCAweDAyLCAweDAwLCAweDM2LCAweDkyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTQsIDB4MDEsIDB4YjAsIDB4MDIsIDB4YzAsIDB4NmUsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkOCwgMHgwMiwgMHg4MCwgMHgwMSwgMHgzMiwKKwkweDAwLCAweGMwLCAweDc0LCAweDA5LCAweDE4LCAweDAxLCAweDAwLCAweDBjLCAweGE4LCAweGNkLCAweDNlLCAweGIyLAorCTB4MjAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDgsIDB4ODAsIDB4MzYsIDB4MzIsCisJMHgxNCwgMHgwMCwgMHg5ZCwgMHgwMywgMHgxMiwgMHgwMSwgMHgwMCwgMHgyYywgMHg4MiwgMHhjZCwgMHgyZSwgMHhiMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjgsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwNywgMHhjMCwgMHgyYywgMHgzMiwKKwkweDAwLCAweDEwLCAweDAwLCAweDgyLCAweDAwLCAweDM4LCAweDAwLCAweDAwLCAweDA3LCAweDAwLCAweDM3LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NDgsIDB4MDIsIDB4YzAsIDB4ODAsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHhhMiwgMHgwNywgMHhjYSwgMHgwMSwgMHgwMCwgMHgwOCwgMHhlOCwgMHgwMSwgMHgwMCwgMHg5NCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweDYyLCAweDgxLCAweDJmLCAweGI2LAorCTB4MmMsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MmMsIDB4ODIsIDB4Y2QsIDB4MmUsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHg3ZCwgMHgwOSwgMHgxZCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMCwKKwkweDAwLCAweDAwLCAweGEyLCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDYyLCAweDgxLCAweDJmLCAweDk1LAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4ODEsIDB4MmYsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgwMiwgMHg4MSwgMHgyZiwgMHgzNCwKKwkweDI5LCAweDAwLCAweGEyLCAweDA3LCAweDEyLCAweDAxLCAweDAwLCAweDJjLCAweDgyLCAweGNkLCAweDJlLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHgyYywgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyYywgMHgwOSwgMHhjMCwgMHg4NSwgMHhkMiwKKwkweDAwLCAweDAwLCAweGQxLCAweDBmLCAweDAwLCAweDAwLCAweDAwLCAweDMwLCAweDAzLCAweDAwLCAweDM4LCAweGYyLAorCTB4MDAsIDB4MDAsIDB4YTEsIDB4MDMsIDB4MjMsIDB4MDEsIDB4MDAsIDB4ZjgsIDB4MjIsIDB4ODEsIDB4MmYsIDB4YjQsCisJMHgzYywgMHgwMCwgMHhhMSwgMHgwMywgMHgxMiwgMHgwMSwgMHgwMCwgMHgyYywgMHg4MiwgMHhjZCwgMHgyZSwgMHhiMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4MmMsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmMsIDB4MDksIDB4YzAsIDB4ODUsIDB4ZDIsCisJMHgwMCwgMHgwMCwgMHhhMSwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgyMiwgMHg4MSwgMHgyZiwgMHg5NCwKKwkweDAwLCAweDAwLCAweDhjLCAweDA5LCAweDM4LCAweDAxLCAweDAwLCAweGQ4LCAweDAyLCAweDgwLCAweDAxLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4OGMsIDB4MDksIDB4MWUsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4YjAsCisJMHgwMCwgMHgwMCwgMHg5YywgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhmMCwKKwkweDAwLCAweDAwLCAweGExLCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGYsIDB4MDksIDB4MTIsIDB4MDEsIDB4MDAsIDB4NjAsIDB4MDgsIDB4NDAsIDB4MjMsIDB4YjIsCisJMHgwMCwgMHg4MiwgMHg5YywgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwOCwgMHg4MCwgMHgzNiwgMHhmMiwKKwkweDAwLCAweDAwLCAweGExLCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MjQsIDB4MDgsIDB4MDAsIDB4MjMsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHgyMCwgMHgwOCwgMHhjMCwgMHgyMywgMHhiMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDE4LCAweDA4LCAweDgwLCAweDIzLCAweGIyLAorCTB4MDAsIDB4YzAsIDB4OTksIDB4MDksIDB4MTgsIDB4MDEsIDB4MDAsIDB4MGMsIDB4YTgsIDB4Y2QsIDB4M2UsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHgzOCwgMHgwMiwgMHg4MCwgMHg4MSwgMHhiMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDNjLCAweDAyLCAweDAwLCAweDgyLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MzAsIDB4MDIsIDB4NDAsIDB4ODIsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHgzNCwgMHgwMiwgMHgwMCwgMHg4NiwgMHhiMiwKKwkweDIwLCAweDgwLCAweDljLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDA4LCAweDgwLCAweDM2LCAweGYyLAorCTB4MDAsIDB4MDAsIDB4YTEsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHgwMCwgMHgwMCwgMHhkOCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA3LCAweDQwLCAweDgwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4NDAsIDB4ODIsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwMCwgMHg4NiwgMHgzMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDUwLCAweGYyLCAweGMxLCAweDM4LCAweGI0LAorCTB4MDAsIDB4MDAsIDB4MDEsIDB4MGUsIDB4MDAsIDB4MzAsIDB4MDEsIDB4ZTAsIDB4MTYsIDB4MjAsIDB4NmUsIDB4ZmEsCisJMHgwMCwgMHgwMCwgMHhhMiwgMHgwOSwgMHgzOCwgMHgwMSwgMHgwMCwgMHgyYywgMHhmOCwgMHgwMSwgMHgwYiwgMHhiNCwKKwkweDAwLCAweDAwLCAweGEyLCAweDA5LCAweDAyLCAweDBkLCAweDAyLCAweDgwLCAweGEyLCAweDViLCAweDgwLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmMsIDB4YzgsIDB4YzEsIDB4ODIsIDB4MzQsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg5ZiwgMHhhOCwgMHgwMSwgMHhlMCwgMHgxNiwgMHgyMCwgMHg2ZSwgMHhiYywKKwkweDAwLCAweDAwLCAweDNiLCAweDBlLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGYwLAorCTB4MDAsIDB4MDAsIDB4YTcsIDB4MDksIDB4MjcsIDB4MDEsIDB4MDAsIDB4ZDgsIDB4MDIsIDB4ODAsIDB4MDEsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjNywgMHgwMCwgMHgwMCwgMHgyYywgMHhlOCwgMHhjMCwgMHg4MiwgMHgzNCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ1LCAweDQwLCAweDAxLCAweGUwLCAweDA2LCAweDAwLCAweDg3LCAweDMyLAorCTB4MDgsIDB4MDAsIDB4YjAsIDB4MTAsIDB4MDAsIDB4MTgsIDB4MDEsIDB4ZTgsIDB4NzYsIDB4MjAsIDB4ODEsIDB4ZjksCisJMHgwMCwgMHgwMCwgMHhkMSwgMHgwZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMywgMHgwMCwgMHgzOCwgMHhmMiwKKwkweDAwLCAweDAwLCAweGFiLCAweDA5LCAweDIzLCAweDE5LCAweDAwLCAweDAwLCAweDA3LCAweDgwLCAweDgxLCAweGIyLAorCTB4M2MsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MmMsIDB4ODIsIDB4Y2QsIDB4MmUsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHhhZCwgMHgwOSwgMHgxZCwgMHgyMSwgMHgwMCwgMHgwMCwgMHgwNywgMHgwMCwgMHg4MiwgMHhiMiwKKwkweDAwLCAweDAwLCAweGIwLCAweDA5LCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDYyLCAweDgxLCAweDJmLCAweDk1LAorCTB4MDAsIDB4MDAsIDB4YjAsIDB4MDksIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4ODEsIDB4MmYsIDB4YjYsCisJMHgyOSwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHgyYywgMHg4MiwgMHhjZCwgMHgyZSwgMHhiMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDAyLCAweDgxLCAweDJmLCAweDM0LAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4YTIsIDB4ODAsIDB4MmYsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHhjNiwgMHgwZSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyYywgMHhmOSwgMHgwMSwgMHgwMCwgMHhmNCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDYyLCAweDgwLCAweDJkLCAweGJjLAorCTB4MTAsIDB4MDAsIDB4YjYsIDB4MDksIDB4MmMsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MTcsIDB4ZTAsIDB4MmMsIDB4YjksCisJMHgwMCwgMHgwMCwgMHhiOCwgMHgwOSwgMHg4ZSwgMHgzOSwgMHgwMCwgMHgwMCwgMHgwNywgMHhjMCwgMHg4MiwgMHhiMiwKKwkweDAwLCAweDAwLCAweGI4LCAweDA5LCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDA3LCAweDAwLCAweDg3LCAweDkyLAorCTB4MDAsIDB4MDAsIDB4YjgsIDB4MDksIDB4OGUsIDB4MzksIDB4MDAsIDB4MDAsIDB4YjcsIDB4YzEsIDB4ODIsIDB4YjQsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwMCwgMHg4NywgMHgzMiwKKwkweDAwLCAweDAwLCAweGJhLCAweDA5LCAweDEyLCAweDAxLCAweDAwLCAweGU4LCAweDAyLCAweGMwLCAweDIxLCAweGIyLAorCTB4MTgsIDB4MDAsIDB4MzYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NzMsIDB4MGEsIDB4MDMsIDB4ZjksCisJMHgwMCwgMHgwMCwgMHhjMCwgMHgwOSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgxMiwgMHg4MCwgMHgyZCwgMHhiYywKKwkweDAwLCAweDAwLCAweDczLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDA5LCAweGM1LCAweDg1LCAweGQwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NjgsIDB4MDIsIDB4YzUsIDB4ODUsIDB4YjAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3OCwgMHgwOSwgMHhjNSwgMHg4NSwgMHgzMCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAyLCAweDAxLCAweDAwLCAweDgwLCAweDgyLCAweGJhLCAweDk3LCAweGJjLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDYsIDB4MDEsIDB4MDAsIDB4ODAsIDB4OTIsIDB4YmEsIDB4OTcsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHhiOCwgMHgwOSwgMHg5ZiwgMHgwMSwgMHgwMCwgMHgxNCwgMHgxOCwgMHg0MCwgMHg4MSwgMHhiYywKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDQ4LCAweDAyLCAweGMwLCAweDgwLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4Y2EsIDB4MDEsIDB4MDAsIDB4MDgsIDB4ZTgsIDB4MDEsIDB4MDAsIDB4MzQsCisJMHgwMCwgMHgwMCwgMHhhNCwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHhiMCwgMHgwMiwgMHgwMCwgMHg4NSwgMHg5MiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweDgyLCAweDgxLCAweDJmLCAweGI2LAorCTB4MDAsIDB4MDAsIDB4YzgsIDB4MDksIDB4MWUsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4YjAsCisJMHgwMCwgMHgwMCwgMHg5YywgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhmMCwKKwkweDAwLCAweDAwLCAweGExLCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4OWYsIDB4YTgsIDB4MDEsIDB4ZTAsIDB4MTYsIDB4MjAsIDB4NmUsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgwMSwgMHgwZSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwOCwgMHgwMCwgMHgwMCwgMHhmMiwKKwkweDAwLCAweDAwLCAweDNiLCAweDBlLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGYwLAorCTB4MDAsIDB4MDAsIDB4YTQsIDB4MDcsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4NDAsIDB4ODEsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHhjZSwgMHgwOSwgMHgxMiwgMHgwMSwgMHgwMCwgMHhlOCwgMHgwMiwgMHhjMCwgMHgyMSwgMHhiMiwKKwkweDE4LCAweDAwLCAweDM2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDczLCAweDBhLCAweDAzLCAweGY5LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzgsIDB4MDksIDB4YzUsIDB4ODUsIDB4MzAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMiwgMHgwMSwgMHgwMCwgMHg4MCwgMHg4MiwgMHhiYSwgMHg5NywgMHhiYywKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA2LCAweDAxLCAweDAwLCAweDgwLCAweDkyLCAweGJhLCAweDk3LCAweGJjLAorCTB4MDAsIDB4MDAsIDB4NzMsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDksIDB4YzUsIDB4ODUsIDB4ZDAsCisJMHgwMCwgMHgwMCwgMHhhNCwgMHgwNywgMHgxMiwgMHgwMSwgMHgwMCwgMHg2OCwgMHgwMiwgMHhjNSwgMHg4NSwgMHhiMCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4YTIsIDB4MDcsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4ZjIsIDB4YzEsIDB4ODUsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxYywgMHg0MCwgMHgwMiwgMHg4MCwgMHgwNiwgMHhjMCwgMHg4NSwgMHhiMiwKKwkweDAwLCAweDAwLCAweGEyLCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDIyLCAweDgxLCAweDJmLCAweDk0LAorCTB4MDAsIDB4MDAsIDB4YTIsIDB4MDcsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4ZjIsIDB4YzEsIDB4ODUsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHgyYywgMHgxMCwgMHhkNiwgMHgwMSwgMHgwMCwgMHgyYywgMHgwOSwgMHhjMCwgMHg4NSwgMHhkMiwKKwkweDAwLCAweDAwLCAweGExLCAweDAzLCAweGQyLCAweDAxLCAweDAwLCAweDk0LCAweDFlLCAweDQwLCAweGU5LCAweDlhLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MjAsIDB4MDAsIDB4MTgsIDB4MDgsIDB4MDAsIDB4NmUsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHhmMiwgMHg4MSwgMHgyZiwgMHhiNiwKKwkweDAwLCAweDAwLCAweGVlLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGYwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4ODAsIDB4ODAsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHg1MSwgMHgwMSwgMHg4MCwgMHgwMiwgMHg4MCwgMHg2ZSwgMHhiYywKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDIxLCAweDAxLCAweDgwLCAweDAyLCAweDAwLCAweDZlLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4M2MsIDB4MDAsIDB4ZTgsIDB4MDYsIDB4NDAsIDB4ODEsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHhlNCwgMHgwOSwgMHgxZiwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMCwKKwkweDAwLCAweDAwLCAweGUxLCAweDA5LCAweDllLCAweDQwLCAweDAyLCAweDgwLCAweDAyLCAweDQwLCAweDY4LCAweGIyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHhhNCwgMHgwNywgMHgyYSwgMHgzMSwgMHgwMSwgMHhlMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHhiMiwKKwkweDE4LCAweDAwLCAweDAwLCAweDAwLCAweGNhLCAweDAwLCAweDAwLCAweGY4LCAweDczLCAweDBhLCAweDAzLCAweDM5LAorCTB4YTQsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YzAsIDB4MDIsIDB4MDAsIDB4MzYsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDBjLCAweDAwLCAweGViLCAweDA5LCAweDAwLCAweDAwLCAweDAwLCAweDU4LCAweDA4LCAweDAwLCAweDM2LCAweDkyLAorCTB4MDAsIDB4MDAsIDB4ZWIsIDB4MDksIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTgsIDB4MDgsIDB4MDAsIDB4MDAsIDB4OTIsCisJMHgxYSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1OCwgMHgwOCwgMHgwMCwgMHgzNiwgMHgzMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDIwLCAweDAwLCAweDE4LCAweDA4LCAweDAwLCAweDZlLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4ZjIsIDB4ODEsIDB4MmYsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHhlZSwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhmMCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDFmLCAweDMwLCAweDAwLCAweDI4LCAweDA4LCAweDAwLCAweDZlLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTQsIDB4NTQsIDB4MDEsIDB4YjAsIDB4MDIsIDB4YzAsIDB4NmUsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgyNSwgMHgwYSwgMHgzOCwgMHgwMCwgMHgwMCwgMHhhNCwgMHgwOCwgMHg4MCwgMHg4MiwgMHhiMiwKKwkweDAwLCAweDAwLCAweDI1LCAweDBhLCAweDA0LCAweDI4LCAweDAxLCAweDA0LCAweDA4LCAweDAwLCAweDZlLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDgsIDB4NTAsIDB4MDEsIDB4MDQsIDB4YTgsIDB4NWIsIDB4ODAsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwOCwgMHgyMCwgMHgwMSwgMHhlMCwgMHgxNiwgMHgyMCwgMHg2ZSwgMHhiYywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLCAweDAxLCAweGU4LCAweDA2LCAweDAwLCAweDAwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MGEsIDB4MGEsIDB4MDgsIDB4MDEsIDB4MDAsIDB4MjgsIDB4MTgsIDB4YTAsIDB4ODIsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyOCwgMHgwMSwgMHhlMCwgMHhhNiwgMHgyMCwgMHgwMCwgMHgzYywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweDAyLCAweDgwLCAweDAxLCAweDMyLAorCTB4MDAsIDB4YzAsIDB4ZmIsIDB4MDksIDB4MTgsIDB4MDEsIDB4MDAsIDB4MGMsIDB4YTgsIDB4Y2QsIDB4M2UsIDB4YjIsCisJMHgyMCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwOCwgMHg4MCwgMHgzNiwgMHgzMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4YTIsIDB4ODAsIDB4MmYsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHhlOCwgMHgwMSwgMHgwMCwgMHgzNCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDMwLCAweDAwLCAweDc4LCAweDA5LCAweDAwLCAweDZlLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MzgsIDB4MDgsIDB4YzAsIDB4NmUsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwNywgMHg4MCwgMHg5NywgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAwLCAweDAwLCAweDA3LCAweDgwLCAweDk3LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4YzAsIDB4MmMsIDB4MzIsCisJMHgwMCwgMHgyMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgzOCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwMCwgMHgzNywgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGNhLCAweDNkLCAweDAwLCAweDBjLCAweDA3LCAweDgwLCAweDgzLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDgsIDB4NDAsIDB4MDAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwOCwgMHgwYSwgMHgwNCwgMHgwMiwgMHgwMSwgMHhlYywgMHgxNiwgMHhjMCwgMHg2ZSwgMHhiYywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGMwLCAweDAxLCAweDAwLCAweDE0LCAweDE4LCAweDQwLCAweDgxLCAweDNhLAorCTB4MDAsIDB4YzAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NDAsIDB4YTIsIDB4OGQsIDB4MzksIDB4YjIsCisJMHgwMCwgMHgwMCwgMHg2NiwgMHgwYSwgMHgxMiwgMHgwMSwgMHgwMCwgMHg0OCwgMHgwMiwgMHhjMCwgMHg4MCwgMHhiMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4NmMsIDB4MTgsIDB4MjAsIDB4NmUsIDB4M2EsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMCwgMHg0YywgMHgwOCwgMHgwMCwgMHg2ZSwgMHgzMiwKKwkweDAwLCAweDAwLCAweDBmLCAweDBhLCAweDAwLCAweDM4LCAweDAxLCAweGUwLCAweDA2LCAweDQwLCAweDgwLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjAsIDB4MDAsIDB4NmMsIDB4MTgsIDB4MjAsIDB4NmUsIDB4M2EsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2OCwgMHgwMCwgMHg0YywgMHgwOCwgMHgwMCwgMHg2ZSwgMHgzMiwKKwkweDAwLCAweDAwLCAweDExLCAweDBhLCAweDlmLCAweDAxLCAweDAwLCAweDA0LCAweDY4LCAweDYwLCAweDgwLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4MWEsIDB4MGEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MTgsIDB4MjAsIDB4MDAsIDB4OWMsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHhhMiwgMHg4MCwgMHgyZiwgMHhiNiwKKwkweDAwLCAweDAwLCAweDE0LCAweDBhLCAweDEyLCAweDAxLCAweDAwLCAweGU4LCAweDAyLCAweGMwLCAweDIxLCAweGIyLAorCTB4MTgsIDB4MDAsIDB4MzYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NzMsIDB4MGEsIDB4MDMsIDB4ZjksCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjYSwgMHg3MCwgMHgwMCwgMHgxOCwgMHgwOCwgMHgwMCwgMHg2ZSwgMHgzMiwKKwkweDAwLCAweDAwLCAweDBkLCAweDBhLCAweDAyLCAweDAxLCAweDAwLCAweDgwLCAweDYyLCAweDYwLCAweDgwLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4OWYsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MTgsIDB4NDAsIDB4ODEsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjYSwgMHgwMSwgMHgwMCwgMHhmOCwgMHgwMiwgMHg4MCwgMHgyZiwgMHgzNSwKKwkweDAwLCAweGEwLCAweDBkLCAweDBhLCAweDEyLCAweDAxLCAweDAwLCAweDQwLCAweGEyLCAweDhkLCAweDM5LCAweGIyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHgxZiwgMHgwYSwgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHhhMiwgMHg4MCwgMHgyZiwgMHhiNiwKKwkweDAwLCAweDAwLCAweDFmLCAweDBhLCAweDA0LCAweDAwLCAweDAwLCAweDgwLCAweGEyLCAweGEwLCAweDgxLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4OWYsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MTgsIDB4NDAsIDB4ODEsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjYSwgMHgwMSwgMHgwMCwgMHhmOCwgMHgwMiwgMHg4MCwgMHgyZiwgMHgzNSwKKwkweDAwLCAweGEwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDQwLCAweGEyLCAweDhkLCAweDM5LCAweGIyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjgsIDB4MDEsIDB4ZTAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzYywgMHgwMCwgMHhlOCwgMHgwNiwgMHg0MCwgMHg4MSwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDMwLCAweDAwLCAweGUwLCAweDA2LCAweDgwLCAweDgyLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4MDAsIDB4ZTAsIDB4MDYsIDB4ODAsIDB4ODEsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgxMCwgMHgwMCwgMHhlMCwgMHgwNiwgMHhjMCwgMHg4NiwgMHhiMiwKKwkweDAwLCAweDAwLCAweDI3LCAweDBhLCAweDAwLCAweDE4LCAweDAwLCAweGUwLCAweDA2LCAweGMwLCAweDg0LCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MTAsIDB4MDAsIDB4NmMsIDB4MDgsIDB4MDAsIDB4NmUsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMCwgMHg0YywgMHgwOCwgMHgwMCwgMHg2ZSwgMHgzMiwKKwkweDAwLCAweDAwLCAweGEzLCAweDBlLCAweDUxLCAweDAwLCAweDAwLCAweGQ4LCAweDAyLCAweDAwLCAweDAwLCAweGYyLAorCTB4MDAsIDB4MDAsIDB4MmEsIDB4MGEsIDB4MDAsIDB4NTAsIDB4MDEsIDB4M2MsIDB4YTgsIDB4NWIsIDB4ODAsIDB4OWMsCisJMHgwMCwgMHgwMCwgMHhhNCwgMHgwNywgMHgwMCwgMHgzMCwgMHgwMSwgMHhlMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHg5MiwKKwkweDAwLCAweDAwLCAweDJmLCAweDBhLCAweDNlLCAweDUxLCAweDAxLCAweDAwLCAweGE4LCAweDFiLCAweDgwLCAweGJhLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZGUsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4ZjIsIDB4ODEsIDB4MmYsIDB4MzQsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1OCwgMHgwMSwgMHhlYywgMHgwNiwgMHhjMCwgMHhlZSwgMHgzMiwKKwkweDAwLCAweDAwLCAweDJmLCAweDBhLCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweDMyLCAweDgwLCAweDg3LCAweGI2LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4ZTIsIDB4ODAsIDB4MmYsIDB4MzQsCisJMHgwMCwgMHgwMCwgMHg0YywgMHgwZiwgMHg2MCwgMHgzMCwgMHgwMSwgMHhlMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHhmMiwKKwkweDAwLCAweDAwLCAweDdiLCAweDBhLCAweDAwLCAweDAwLCAweDAwLCAweGIwLCAweDAyLCAweDAwLCAweDg1LCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4ODIsIDB4ODEsIDB4MmYsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDNhLCAweDBhLCAweDA0LCAweDAyLCAweDAxLCAweGVjLCAweDE2LCAweGMwLCAweDZlLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YzksIDB4MDEsIDB4MDAsIDB4MTQsIDB4MTgsIDB4NDAsIDB4ODEsIDB4M2EsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjMCwgMHgwMSwgMHgwMSwgMHgzOCwgMHgwOCwgMHhjMCwgMHg2ZSwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGRmLCAweDAwLCAweDAwLCAweGE0LCAweGE4LCAweDYwLCAweDhhLCAweDNjLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MGYsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4YjAsCisJMHgwMCwgMHhjMCwgMHgzZSwgMHgwYSwgMHgxMiwgMHgwMSwgMHgwMCwgMHg0MCwgMHhhMiwgMHg4ZCwgMHgzOSwgMHhiMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzAsIDB4MDAsIDB4ZTAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkZiwgMHgwMCwgMHgwMCwgMHhhNCwgMHhhOCwgMHg2MCwgMHg4YSwgMHgzYywKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDBmLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGIwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MzgsIDB4MDgsIDB4YzAsIDB4NmUsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkZSwgMHhhOCwgMHgwMSwgMHgyMCwgMHg5OSwgMHgyMiwgMHg2ZSwgMHgzYSwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA2LCAweDAxLCAweDAyLCAweDgwLCAweDgyLCAweDFiLCAweDkyLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4NDIsIDB4MGEsIDB4MmYsIDB4MjAsIDB4MDEsIDB4ZTAsIDB4OTYsIDB4MjIsIDB4NmUsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgyZiwgMHgwZSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhmMCwKKwkweDAwLCAweDAwLCAweDRhLCAweDBhLCAweDFmLCAweDUwLCAweDAxLCAweGU4LCAweDA2LCAweDAwLCAweDAwLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4NDUsIDB4MGEsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4YzAsIDB4ODMsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg0YSwgMHgwYSwgMHgwMCwgMHg1MCwgMHgwMSwgMHhlOCwgMHhmNiwgMHg2MCwgMHg4MCwgMHg5YywKKwkweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDAyLCAweDc4LCAweDM5LCAweDlhLCAweGZlLCAweDM4LAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDIsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ODIsIDB4YmEsIDB4OTcsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNiwgMHgwMSwgMHgwMCwgMHg4MCwgMHg5MiwgMHhiYSwgMHg5NywgMHhiYywKKwkweDA4LCAweDAwLCAweDczLCAweDExLCAweDAwLCAweDQwLCAweDAyLCAweDE0LCAweDM5LCAweDlhLCAweGZlLCAweGQ4LAorCTB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDIsIDB4NjgsIDB4MTIsIDB4OWEsIDB4ZmUsIDB4MzgsCisJMHgwMCwgMHgwMCwgMHg0ZiwgMHgwYSwgMHgyYSwgMHhhOSwgMHgwMSwgMHhlMCwgMHgwNiwgMHgwMCwgMHg5MiwgMHhiMiwKKwkweDE4LCAweDAwLCAweDM2LCAweDAwLCAweGNhLCAweDAwLCAweDAwLCAweGY4LCAweDczLCAweDBhLCAweDAzLCAweGY5LAorCTB4MWQsIDB4MDAsIDB4NGYsIDB4MGEsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4YTQsIDB4MTcsIDB4YjgsCisJMHgwMCwgMHgwMCwgMHg0YiwgMHgwYSwgMHgwNCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgxOCwgMHg0MCwgMHg4MSwgMHhiYywKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4ZDEsIDB4MGYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzAsIDB4MDMsIDB4MDAsIDB4MzgsIDB4ZjIsCisJMHgwMCwgMHgwMCwgMHg1MiwgMHgwYSwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgzMiwgMHg4MCwgMHgyZiwgMHhiNiwKKwkweDNjLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDJjLCAweDgyLCAweGNkLCAweDJlLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MDIsIDB4ODAsIDB4MDEsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiMCwgMHgwMiwgMHgwMCwgMHg4NSwgMHgzMiwKKwkweDAwLCAweGMwLCAweDYxLCAweDBhLCAweDE4LCAweDAxLCAweDAwLCAweDBjLCAweGE4LCAweGNkLCAweDNlLCAweGIyLAorCTB4MTgsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ODIsIDB4OGQsIDB4ODIsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHg1OCwgMHgwYSwgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHg0MCwgMHg4MSwgMHhiYywKKwkweDE4LCAweDAwLCAweDM2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDczLCAweDBhLCAweDAzLCAweGY5LAorCTB4MTgsIDB4MDAsIDB4NWEsIDB4MGEsIDB4MmUsIDB4NDksIDB4MDEsIDB4ZTAsIDB4ZTYsIDB4YTAsIDB4ODIsIDB4YjksCisJMHgwMCwgMHgwMCwgMHg1YiwgMHgwYSwgMHgwMCwgMHg1ZSwgMHgwMSwgMHhlYywgMHg3NiwgMHgwMCwgMHgwMCwgMHg5NCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVlLCAweDAxLCAweGVjLCAweDA2LCAweDAwLCAweDAwLCAweDMyLAorCTB4MjAsIDB4ODAsIDB4YjAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDgsIDB4ODAsIDB4MzYsIDB4ZjIsCisJMHgxYiwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHgyYywgMHg4MiwgMHhjZCwgMHgyZSwgMHhiMiwKKwkweDBjLCAweDAwLCAweGExLCAweDAzLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDgyLCAweDhkLCAweDg1LCAweGJjLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MzAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4NmUsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHhjMiwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhmMCwKKwkweDAwLCAweDAwLCAweDllLCAweDA1LCAweDAwLCAweDAwLCAweDAwLCAweDFjLCAweDA4LCAweDgwLCAweDg1LCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NzIsIDB4ODAsIDB4MmYsIDB4YjYsCisJMHgwMCwgMHgyMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyOCwgMHgwOSwgMHgwMCwgMHgzNywgMHgzMiwKKwkweDAwLCAweDAwLCAweGNiLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweGU4LCAweDAxLCAweDAwLCAweGY0LAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NDgsIDB4MDIsIDB4YzAsIDB4ODAsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgxOCwgMHg0MCwgMHg4MSwgMHgzYSwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweGEyLCAweDgwLCAweDJmLCAweGI2LAorCTB4MTgsIDB4MDAsIDB4MzYsIDB4MDAsIDB4Y2EsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NzMsIDB4MGEsIDB4MDMsIDB4ZjksCisJMHgxZCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHhhNCwgMHgxNywgMHhiOCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDlmLCAweDAwLCAweDAwLCAweDE0LCAweDE4LCAweDQwLCAweDgxLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4NjcsIDB4MGEsIDB4MGIsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4YjAsCisJMHgwMCwgMHgwMCwgMHg2ZSwgMHgwYSwgMHgzZCwgMHgwMSwgMHgwMCwgMHhiMCwgMHgwMiwgMHgwMCwgMHg4NSwgMHhiMiwKKwkweDAwLCAweDAwLCAweDZlLCAweDBhLCAweDM0LCAweDAwLCAweDAwLCAweGY4LCAweGQyLCAweDgxLCAweDJmLCAweGI1LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4YjIsIDB4ODAsIDB4MmYsIDB4MzQsCisJMHgwMCwgMHgwMCwgMHhiMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhmMCwKKwkweDAwLCAweDAwLCAweDcyLCAweDBhLCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweDkyLCAweDgwLCAweDJmLCAweGI2LAorCTB4MmEsIDB4MDAsIDB4NzgsIDB4MGEsIDB4MTIsIDB4MDEsIDB4MDAsIDB4MmMsIDB4ODIsIDB4Y2QsIDB4MmUsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDc1LCAweDBhLCAweDFkLCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGIwLAorCTB4MDAsIDB4MDAsIDB4NzgsIDB4MGEsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4NjIsIDB4ODEsIDB4MmYsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDc4LCAweDBhLCAweDgwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDgxLCAweDJmLCAweGI2LAorCTB4MjksIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MmMsIDB4ODIsIDB4Y2QsIDB4MmUsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgwMiwgMHg4MSwgMHgyZiwgMHgzNCwKKwkweDAwLCAweDAwLCAweGEyLCAweDA3LCAweDA0LCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDgwLCAweDg1LCAweGJjLAorCTB4MDAsIDB4MDAsIDB4YzIsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4ZjAsCisJMHgwMCwgMHgwMCwgMHg5ZSwgMHgwNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYywgMHgwOCwgMHg4MCwgMHg4NSwgMHg5MiwKKwkweDAwLCAweDAwLCAweGE0LCAweDA3LCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweGEyLCAweDgwLCAweDJmLCAweGI2LAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHhlMiwgMHg4MCwgMHgyZiwgMHhiNiwKKwkweDAwLCAweDAwLCAweDgwLCAweDBhLCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweDgyLCAweDgxLCAweDJmLCAweGI2LAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MzEsIDB4MDEsIDB4ODAsIDB4MDIsIDB4MDAsIDB4NmUsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgzMSwgMHgwMCwgMHg4MCwgMHg4MiwgMHg5YiwgMHg4MiwgMHhiYywKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAyLCAweDAxLCAweDAwLCAweDgwLCAweDEyLCAweGEwLCAweDgyLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4Y2UsIDB4MDEsIDB4MDAsIDB4ZDgsIDB4MDIsIDB4ODAsIDB4MDEsIDB4MzIsCisJMHgwMCwgMHhjMCwgMHg4NiwgMHgwYSwgMHgxOCwgMHgwMSwgMHgwMCwgMHgwYywgMHhhOCwgMHhjZCwgMHgzZSwgMHhiMiwKKwkweDIwLCAweDgwLCAweDljLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDA4LCAweDgwLCAweDM2LCAweGYyLAorCTB4MDAsIDB4MDAsIDB4YTEsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHhhMiwgMHg4MCwgMHgyZiwgMHhiNiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDgwLCAweDAwLCAweDAwLCAweDgwLCAweDgyLCAweDgwLCAweDJmLCAweGI2LAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4ODAsIDB4ODIsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxZiwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDYwLCAweDAwLCAweDAwLCAweGQ4LCAweDAyLCAweDAwLCAweDAwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4OGYsIDB4MGEsIDB4M2YsIDB4MDAsIDB4MDAsIDB4M2MsIDB4MDgsIDB4NDAsIDB4ODAsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHg4ZiwgMHgwYSwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHhlMiwgMHg4MSwgMHgyZiwgMHhiNiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGRlLCAweDAwLCAweDAwLCAweGY4LCAweGYyLCAweDgxLCAweDJmLCAweDM0LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTgsIDB4MDEsIDB4ZWMsIDB4MDYsIDB4YzAsIDB4ZWUsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2NywgMHhlMCwgMHg4MywgMHgzZSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDA3LCAweDAwLCAweDgwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4YzAsIDB4ODYsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMCwgMHgwMCwgMHgwNywgMHhjMCwgMHg4NCwgMHgzMiwKKwkweDAwLCAweDAwLCAweGRhLCAweDBhLCAweDA0LCAweDAwLCAweDAwLCAweDI4LCAweGQ4LCAweGEwLCAweDgyLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDksIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4YjAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHhkOCwgMHhhMCwgMHg4MSwgMHgzYywKKwkweDAwLCAweDAwLCAweGIwLCAweDBhLCAweDA0LCAweDAwLCAweDAwLCAweDNjLCAweGQ4LCAweGUwLCAweDgzLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4ODAsIDB4ODEsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg5YiwgMHgwYSwgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg3MiwgMHg4MCwgMHgyZCwgMHhiYywKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDUwLCAweDAyLCAweGMwLCAweDM4LCAweGIyLAorCTB4MDAsIDB4MDAsIDB4YWUsIDB4MGEsIDB4NTEsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MTIsIDB4ODAsIDB4MmQsIDB4OWEsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHg1MCwgMHhmMiwgMHhjMSwgMHgzOCwgMHhiNCwKKwkweDAwLCAweDAwLCAweGE3LCAweDBhLCAweDI4LCAweDAwLCAweDAwLCAweGQ4LCAweDAyLCAweDAwLCAweDAwLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4YTUsIDB4MGEsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ZjIsIDB4YzEsIDB4ODUsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHhhMSwgMHgwYSwgMHgxZiwgMHg0MCwgMHgwMiwgMHg4NCwgMHhlNiwgMHgwMSwgMHgwMCwgMHhiNCwKKwkweDAwLCAweDAwLCAweGE1LCAweDBhLCAweDFkLCAweDAxLCAweDAwLCAweGY4LCAweDIyLCAweDgxLCAweDJmLCAweGI0LAorCTB4MDAsIDB4MDAsIDB4YTUsIDB4MGEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NjIsIDB4ODEsIDB4MmYsIDB4OTUsCisJMHgwMCwgMHgwMCwgMHhhMywgMHgwYSwgMHgxZCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDYyLCAweDgxLCAweDJmLCAweDM1LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDIsIDB4ODAsIDB4MDIsIDB4NDAsIDB4NjgsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxZiwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDMwLCAweDAwLCAweGUwLCAweDE2LCAweDIwLCAweDZlLCAweDNjLAorCTB4MDAsIDB4MDAsIDB4M2MsIDB4MGUsIDB4ZGEsIDB4NWIsIDB4MDEsIDB4ZWMsIDB4MDYsIDB4NDAsIDB4ZWQsIDB4ZjIsCisJMHgxOCwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHgwYSwgMHgwMywgMHhmOSwKKwkweDAwLCAweDAwLCAweGFjLCAweDBhLCAweDA0LCAweDAwLCAweDAwLCAweDgwLCAweDcyLCAweDgwLCAweDJkLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4YTIsIDB4ODAsIDB4MmYsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHhhNywgMHgwYSwgMHg2NywgMHgwMCwgMHgwMCwgMHhmOCwgMHhhMiwgMHg4MCwgMHgyZiwgMHhiNSwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweGU4LCAweDAyLCAweGMwLCAweDIxLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4NzIsIDB4ODAsIDB4MmQsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MSwgMHgwMCwgMHgwMCwgMHhkOCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgzMiwKKwkweDAwLCAweDAwLCAweGFmLCAweDBlLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweDIwLCAweDgwLCAweGZhLAorCTB4MDAsIDB4MDAsIDB4OTAsIDB4MGEsIDB4NGQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjcsIDB4ZTAsIDB4ODMsIDB4OWUsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHg1MCwgMHhmMiwgMHhjMSwgMHgzOCwgMHhiNCwKKwkweDAwLCAweDAwLCAweGJjLCAweDBhLCAweDI4LCAweDAwLCAweDAwLCAweDgwLCAweDA4LCAweDQwLCAweDAwLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4YmEsIDB4MGEsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ZjIsIDB4YzEsIDB4ODUsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHhiNiwgMHgwYSwgMHgxZiwgMHg0MCwgMHgwMiwgMHg4NCwgMHhlNiwgMHgwMSwgMHgwMCwgMHhiNCwKKwkweDAwLCAweDAwLCAweGJhLCAweDBhLCAweDFkLCAweDAxLCAweDAwLCAweGY4LCAweDIyLCAweDgxLCAweDJmLCAweGI0LAorCTB4MDAsIDB4MDAsIDB4YmEsIDB4MGEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NjIsIDB4ODEsIDB4MmYsIDB4OTUsCisJMHgwMCwgMHgwMCwgMHhiOCwgMHgwYSwgMHgxZCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDYyLCAweDgxLCAweDJmLCAweDM1LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDIsIDB4ODAsIDB4MDIsIDB4NDAsIDB4NjgsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxZiwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDMwLCAweDAwLCAweGUwLCAweDE2LCAweDIwLCAweDZlLCAweDNjLAorCTB4MDAsIDB4MDAsIDB4M2MsIDB4MGUsIDB4ZGEsIDB4NWIsIDB4MDEsIDB4ZWMsIDB4MDYsIDB4NDAsIDB4ZWQsIDB4ZjIsCisJMHgwMCwgMHgwMCwgMHhlMCwgMHgwYSwgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHhlMiwgMHg4MCwgMHgyZiwgMHhiNiwKKwkweDAwLCAweDAwLCAweGMwLCAweDBhLCAweDA0LCAweDIxLCAweDAwLCAweGUwLCAweDA2LCAweDgwLCAweDgxLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4YWYsIDB4MGUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzQsIDB4MDgsIDB4MDAsIDB4MDAsIDB4ZjIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHgwMCwgMHhlMCwgMHgwNiwgMHg4MCwgMHg4MSwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDNjLCAweDAwLCAweGU4LCAweDA2LCAweDQwLCAweDgxLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4YzYsIDB4MGEsIDB4MmEsIDB4MTEsIDB4MDAsIDB4ZTAsIDB4ZDYsIDB4ZTAsIDB4ODYsIDB4YmEsCisJMHgxOCwgMHgwMCwgMHgzNiwgMHgwMCwgMHhjYSwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHgwYSwgMHgwMywgMHhmOSwKKwkweDFkLCAweDAwLCAweGM2LCAweDBhLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweGE0LCAweDE3LCAweGI4LAorCTB4MDAsIDB4MDAsIDB4YzIsIDB4MGEsIDB4OWYsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MTgsIDB4MDAsIDB4ODgsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweGIwLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGYwLAorCTB4MDAsIDB4MDAsIDB4ZDEsIDB4MGYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzAsIDB4MDMsIDB4MDAsIDB4MzgsIDB4ZjIsCisJMHgwOCwgMHgwMCwgMHhjYSwgMHgwYSwgMHgyMywgMHgxOSwgMHgwMSwgMHhlOCwgMHg3NiwgMHgyMCwgMHg4MSwgMHhiOSwKKwkweDNjLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDJjLCAweDgyLCAweGNkLCAweDJlLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4Y2UsIDB4MGEsIDB4MWQsIDB4MTgsIDB4MDAsIDB4ZTAsIDB4MDYsIDB4YzAsIDB4ODQsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHhjZSwgMHgwYSwgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHg4MSwgMHgyZiwgMHhiNiwKKwkweDI5LCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDJjLCAweDgyLCAweGNkLCAweDJlLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MDIsIDB4ODEsIDB4MmYsIDB4MzQsCisJMHgwMCwgMHgwMCwgMHhjNiwgMHgwZSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyYywgMHhmOSwgMHgwMSwgMHgwMCwgMHhmNCwKKwkweDAwLCAweDAwLCAweGQzLCAweDBhLCAweDA0LCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDg4LCAweGJjLAorCTB4MDAsIDB4MDAsIDB4ZDIsIDB4MGEsIDB4MTIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDksIDB4YzAsIDB4MjEsIDB4YjIsCisJMHgxOCwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHgwYSwgMHgwMywgMHhmOSwKKwkweDFkLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweGE0LCAweDE3LCAweGI4LAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4ODAsIDB4ODAsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3OCwgMHgwOSwgMHhjNSwgMHg4NSwgMHgzMCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAyLCAweDAxLCAweDAwLCAweDgwLCAweDgyLCAweGJhLCAweDk3LCAweGJjLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDYsIDB4MDEsIDB4MDAsIDB4ODAsIDB4OTIsIDB4YmEsIDB4OTcsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg3MywgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwOSwgMHhjNSwgMHg4NSwgMHhkMCwKKwkweDAwLCAweDAwLCAweGE0LCAweDAzLCAweDEyLCAweDAxLCAweDAwLCAweDY4LCAweDAyLCAweGM1LCAweDg1LCAweGIwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMCwgMHg3OCwgMHgxOSwgMHgyMCwgMHg2ZSwgMHgzYywKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweGUyLCAweGE1LCAweDgyLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4YTIsIDB4ODAsIDB4MmYsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHg4OCwgMHhiYywKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDgwLCAweDgwLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NTAsIDB4ZjIsIDB4YzEsIDB4MzgsIDB4YjQsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjMCwgMHgwMSwgMHgwMSwgMHgzOCwgMHgwOCwgMHhjMCwgMHg2ZSwgMHgzMiwKKwkweDAwLCAweDAwLCAweGU0LCAweDBhLCAweDA0LCAweDAyLCAweDAxLCAweGVjLCAweDE2LCAweGMwLCAweDZlLCAweGJjLAorCTB4MDAsIDB4YzAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NDAsIDB4YTIsIDB4OGQsIDB4MzksIDB4YjIsCisJMHgwMCwgMHgwMCwgMHhlNSwgMHgwYSwgMHhjOSwgMHgwMSwgMHgwMCwgMHgxNCwgMHgwOCwgMHgwMCwgMHgwMCwgMHg5MiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweDMwLCAweDAwLCAweGUwLCAweDA2LCAweDAwLCAweDAwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4ZWYsIDB4MGEsIDB4MjgsIDB4MDAsIDB4MDAsIDB4MDgsIDB4ZTgsIDB4MDEsIDB4MDAsIDB4YjQsCisJMHgwMCwgMHgwMCwgMHhlZSwgMHgwYSwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHhmMiwgMHhjMSwgMHg4NSwgMHhiNiwKKwkweDAwLCAweDAwLCAweGVhLCAweDBhLCAweDFmLCAweDQwLCAweDAyLCAweDg0LCAweGU2LCAweDAxLCAweDAwLCAweGI0LAorCTB4MDAsIDB4MDAsIDB4ZWUsIDB4MGEsIDB4MWQsIDB4MDEsIDB4MDAsIDB4ZjgsIDB4MjIsIDB4ODEsIDB4MmYsIDB4YjQsCisJMHgwMCwgMHgwMCwgMHhlZSwgMHgwYSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg2MiwgMHg4MSwgMHgyZiwgMHg5NSwKKwkweDAwLCAweDAwLCAweGVjLCAweDBhLCAweDFkLCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGIwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NjIsIDB4ODEsIDB4MmYsIDB4MzUsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwMiwgMHg4MCwgMHgwMiwgMHg0MCwgMHg2OCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDFmLCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGIwLAorCTB4MDAsIDB4MDAsIDB4M2MsIDB4MGUsIDB4ZGEsIDB4NWIsIDB4MDEsIDB4ZWMsIDB4MDYsIDB4NDAsIDB4ZWQsIDB4ZjIsCisJMHgwMCwgMHgyMCwgMHgwMCwgMHg4MCwgMHhkZiwgMHgwMCwgMHgwMCwgMHgyOCwgMHgwOSwgMHgwMCwgMHgzNywgMHgzMiwKKwkweDAwLCAweDAwLCAweGYzLCAweDBhLCAweDNkLCAweDAxLCAweDAwLCAweGQ4LCAweDAyLCAweDgwLCAweDAxLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4ZjMsIDB4MGEsIDB4MzQsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4ZDIsIDB4ODEsIDB4MmYsIDB4YjUsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHhiMiwgMHg4MCwgMHgyZiwgMHgzNCwKKwkweDAwLCAweDAwLCAweGNiLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweGUyLCAweDgxLCAweDJmLCAweGY1LAorCTB4MDgsIDB4MDAsIDB4YjAsIDB4MTAsIDB4MDAsIDB4MTgsIDB4MDEsIDB4ZTgsIDB4NzYsIDB4MjAsIDB4ODEsIDB4ZjksCisJMHgwMCwgMHgwMCwgMHhkMSwgMHgwZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMywgMHgwMCwgMHgzOCwgMHhmMiwKKwkweDAwLCAweDAwLCAweGY4LCAweDBhLCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweDMyLCAweDgwLCAweDJmLCAweGI2LAorCTB4M2MsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MmMsIDB4ODIsIDB4Y2QsIDB4MmUsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHhmZCwgMHgwYSwgMHgyOSwgMHgwOCwgMHgwMSwgMHhlNCwgMHgwNiwgMHhjMCwgMHgyZCwgMHhiMiwKKwkweDAwLCAweDAwLCAweDAyLCAweDBiLCAweDFkLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGIwLAorCTB4MDAsIDB4MDAsIDB4MDIsIDB4MGIsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4ODEsIDB4MmYsIDB4YjYsCisJMHgyOSwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHgyYywgMHg4MiwgMHhjZCwgMHgyZSwgMHhiMiwKKwkweDAwLCAweDAwLCAweDAyLCAweDBiLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDAyLCAweDgxLCAweDJmLCAweDk0LAorCTB4MDAsIDB4MDAsIDB4ZmYsIDB4MGEsIDB4MTIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDksIDB4YzAsIDB4MjEsIDB4YjIsCisJMHgxOCwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHgwYSwgMHgwMywgMHhmOSwKKwkweDFkLCAweDAwLCAweDAxLCAweDBiLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweGE0LCAweDE3LCAweGI4LAorCTB4MDAsIDB4MDAsIDB4ZmUsIDB4MGEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MTgsIDB4NDAsIDB4ODEsIDB4OWMsCisJMHgyYSwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHgyYywgMHg4MiwgMHhjZCwgMHgyZSwgMHhiMiwKKwkweDAwLCAweDAwLCAweGM3LCAweDBlLCAweDAwLCAweDAwLCAweDAwLCAweDJjLCAweGY5LCAweDAxLCAweDAwLCAweGY0LAorCTB4MDAsIDB4MDAsIDB4MDUsIDB4MGIsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4NDAsIDB4ODEsIDB4YmMsCisJMHgxOCwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHgwYSwgMHgwMywgMHhmOSwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDQ4LCAweDAyLCAweGMwLCAweDgwLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzgsIDB4MDksIDB4YzUsIDB4ODUsIDB4MzAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMiwgMHgwMSwgMHgwMCwgMHg4MCwgMHg4MiwgMHhiYSwgMHg5NywgMHhiYywKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA2LCAweDAxLCAweDAwLCAweDgwLCAweDkyLCAweGJhLCAweDk3LCAweGJjLAorCTB4MDAsIDB4MDAsIDB4NzMsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDksIDB4YzUsIDB4ODUsIDB4ZDAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHg2OCwgMHgwMiwgMHhjNSwgMHg4NSwgMHhiMCwKKwkweDAwLCAweDAwLCAweGE0LCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweGIwLCAweDAyLCAweDAwLCAweDg1LCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4ODIsIDB4ODAsIDB4MmYsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgzMSwgMHgwMCwgMHg4MCwgMHg4MiwgMHg5YiwgMHg4MiwgMHhiYywKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAyLCAweDAwLCAweDAwLCAweDgwLCAweDEyLCAweGEwLCAweDgyLCAweGJjLAorCTB4MjUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDksIDB4MDAsIDB4MzYsIDB4MzIsCisJMHgxMCwgMHgwMCwgMHhlMiwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHhhOSwgMHg2MCwgMHg4MCwgMHhkOSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweDAyLCAweDgwLCAweDAxLCAweDMyLAorCTB4MDAsIDB4YzAsIDB4MTUsIDB4MGIsIDB4MTgsIDB4MDEsIDB4MDAsIDB4MGMsIDB4YTgsIDB4Y2QsIDB4M2UsIDB4YjIsCisJMHgyMCwgMHg4MCwgMHg5YywgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwOCwgMHg4MCwgMHgzNiwgMHhmMiwKKwkweDAwLCAweDAwLCAweGExLCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4YzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4YTIsIDB4OGQsIDB4MmYsIDB4MzEsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNywgMHg4MCwgMHg4MSwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDA3LCAweDAwLCAweDgwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4YzAsIDB4ODYsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMCwgMHgwMCwgMHgwNywgMHhjMCwgMHg4NCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDUwLCAweGYyLCAweGMxLCAweDM4LCAweGI0LAorCTB4MDAsIDB4MDAsIDB4MjAsIDB4MGIsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4ODIsIDB4ODAsIDB4MmYsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2OCwgMHhhOCwgMHg2MCwgMHg4MCwgMHgzYywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDNjLCAweDA4LCAweDQwLCAweDgwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4M2IsIDB4MGUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDgsIDB4ODAsIDB4ODIsIDB4ZjIsCisJMHgwMCwgMHgwMCwgMHgyMSwgMHgwYiwgMHgxMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwOSwgMHhjMCwgMHgyMSwgMHhiMiwKKwkweDE4LCAweDAwLCAweDM2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDczLCAweDBhLCAweDAzLCAweGY5LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjgsIDB4MjAsIDB4ODAsIDB4M2EsCisJMHgwMCwgMHgwMCwgMHgyNiwgMHgwYiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyOCwgMHg2OCwgMHhhMCwgMHg4MiwgMHhiYywKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDgwLCAweDAwLCAweDAwLCAweDgwLCAweGUyLCAweDgwLCAweDJmLCAweGI2LAorCTB4MDAsIDB4MDAsIDB4YWYsIDB4MGUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4ZjAsCisJMHgwMCwgMHgwMCwgMHgxNywgMHgwYiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNywgMHg4MCwgMHg4MSwgMHg5MiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDgwLCAweDAwLCAweDAwLCAweDgwLCAweGEyLCAweDgwLCAweDJmLCAweGI2LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MDIsIDB4ODAsIDB4MDEsIDB4MzIsCisJMHgwMCwgMHgyMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyOCwgMHgwOSwgMHgwMCwgMHgzNywgMHgzMiwKKwkweDAwLCAweDAwLCAweGM3LCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweGU4LCAweDAxLCAweDAwLCAweGY0LAorCTB4MTgsIDB4MDAsIDB4MzYsIDB4MDAsIDB4Y2EsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NzMsIDB4MGEsIDB4MDMsIDB4ZjksCisJMHgwMCwgMHgwMCwgMHgyZSwgMHgwYiwgMHgzZCwgMHgwMSwgMHgwMCwgMHhiMCwgMHgwMiwgMHgwMCwgMHg4NSwgMHhiMiwKKwkweDAwLCAweDAwLCAweDJlLCAweDBiLCAweDM0LCAweDAwLCAweDAwLCAweGY4LCAweGQyLCAweDgxLCAweDJmLCAweGI1LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4YjIsIDB4ODAsIDB4MmYsIDB4MzQsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwOCwgMHg4MCwgMHg4NiwgMHhiMiwKKwkweDAwLCAweDAwLCAweDNjLCAweDBiLCAweDA0LCAweDAyLCAweDAxLCAweGVjLCAweDE2LCAweGMwLCAweDZlLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjgsIDB4MDksIDB4ODAsIDB4ODAsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHhlZiwgMHgwZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkOCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhkMiwKKwkweDAwLCAweDAwLCAweDM0LCAweDBiLCAweDA0LCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDgwLCAweDkyLCAweGJjLAorCTB4MTgsIDB4MDAsIDB4MzYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NzMsIDB4MGEsIDB4MDMsIDB4ZjksCisJMHgwMCwgMHgwMCwgMHgzYSwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3OCwgMHgzOCwgMHg4MCwgMHg4NywgMHhmNSwKKwkweDAwLCAweDAwLCAweGIwLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDA4LCAweDAwLCAweDAwLCAweGYyLAorCTB4MDAsIDB4MDAsIDB4YzIsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4ZjAsCisJMHgwMCwgMHgwMCwgMHhkMSwgMHgwZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMywgMHgwMCwgMHgzOCwgMHhmMiwKKwkweDAwLCAweDAwLCAweGE1LCAweDAyLCAweDIzLCAweDAxLCAweDAwLCAweGY4LCAweDAyLCAweDgwLCAweDJmLCAweGI0LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MzIsIDB4ODAsIDB4MmYsIDB4MzUsCisJMHgzYywgMHgwMCwgMHhhNSwgMHgwMiwgMHgxMiwgMHgwMSwgMHgwMCwgMHgyYywgMHg4MiwgMHhjZCwgMHgyZSwgMHhiMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MWYsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4YjAsCisJMHgwMCwgMHgwMCwgMHgzZiwgMHgwYiwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg4MiwgMHg4MSwgMHgyZiwgMHhiNiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDMxLCAweDAxLCAweDgwLCAweDAyLCAweDAwLCAweDZlLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4NDEsIDB4MGIsIDB4MTIsIDB4MDEsIDB4MDAsIDB4NjAsIDB4MDgsIDB4NDAsIDB4MjMsIDB4YjIsCisJMHgwMCwgMHg4MiwgMHg0YiwgMHgwYiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHhhOCwgMHg4ZCwgMHg4MCwgMHg5MiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDI0LCAweDA4LCAweDAwLCAweDIzLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MjAsIDB4MDgsIDB4YzAsIDB4MjMsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwOCwgMHg4MCwgMHgyMywgMHhiMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweDAyLCAweDgwLCAweDAxLCAweDMyLAorCTB4MDAsIDB4YzAsIDB4NWMsIDB4MGIsIDB4MTgsIDB4MDEsIDB4MDAsIDB4MGMsIDB4YTgsIDB4Y2QsIDB4M2UsIDB4YjIsCisJMHgyMCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHhhOCwgMHg4ZCwgMHg4MCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDM4LCAweDAyLCAweDgwLCAweDgxLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4M2MsIDB4MDIsIDB4MDAsIDB4ODIsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMiwgMHg0MCwgMHg4MiwgMHhiMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDM0LCAweDAyLCAweDAwLCAweDg2LCAweGIyLAorCTB4MDAsIDB4MDAsIDB4NTMsIDB4MGIsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ZjIsIDB4YzEsIDB4ODUsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHg0ZiwgMHgwYiwgMHgxZiwgMHg0MCwgMHgwMiwgMHg4NCwgMHhlNiwgMHgwMSwgMHgwMCwgMHhiNCwKKwkweDAwLCAweDAwLCAweDUzLCAweDBiLCAweDFkLCAweDAxLCAweDAwLCAweGY4LCAweDIyLCAweDgxLCAweDJmLCAweGI0LAorCTB4MDAsIDB4MDAsIDB4NTMsIDB4MGIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NjIsIDB4ODEsIDB4MmYsIDB4OTUsCisJMHgwMCwgMHgwMCwgMHg1MSwgMHgwYiwgMHgxZCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDYyLCAweDgxLCAweDJmLCAweDM1LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDIsIDB4ODAsIDB4MDIsIDB4NDAsIDB4NjgsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxZiwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMCwKKwkweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA5LCAweDAwLCAweDM2LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4ZTIsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDksIDB4MDAsIDB4ODAsIDB4ZDIsCisJMHgwMCwgMHgwMCwgMHg3MywgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwOSwgMHhjNSwgMHg4NSwgMHhkMCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDY4LCAweDAyLCAweGM1LCAweDg1LCAweGIwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzgsIDB4MDksIDB4YzUsIDB4ODUsIDB4MzAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMiwgMHgwMSwgMHgwMCwgMHg4MCwgMHg4MiwgMHhiYSwgMHg5NywgMHhiYywKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA2LCAweDAxLCAweDAwLCAweDgwLCAweDkyLCAweGJhLCAweDk3LCAweGJjLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWMsIDB4MWYsIDB4YzAsIDB4ZjUsIDB4M2EsCisJMHgwMCwgMHgwMCwgMHhhNCwgMHgwNywgMHgwMCwgMHgzMCwgMHgwMCwgMHhlMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHg5MiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweDAyLCAweDAwLCAweDAwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4NDAsIDB4ODAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwMCwgMHg4MCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDA3LCAweDQwLCAweDgyLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDAsIDB4ODYsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHg1MCwgMHhmMiwgMHhjMSwgMHgzOCwgMHhiNCwKKwkweDAwLCAweDAwLCAweDM5LCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweDAyLCAweDgwLCAweDAxLCAweGYyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDAsIDB4MDAsIDB4MDcsIDB4ODAsIDB4ODEsIDB4MzIsCisJMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgxNywgMHhlMCwgMHgyYywgMHgzOSwKKwkweDAwLCAweDEwLCAweDAwLCAweDgwLCAweDAwLCAweDM4LCAweDAwLCAweDAwLCAweDA3LCAweDAwLCAweDM3LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4YjAsIDB4MTAsIDB4MDAsIDB4MzAsIDB4MDAsIDB4ZTAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4ZjIsCisJMHgwMCwgMHgwMCwgMHhkMSwgMHgwZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMywgMHgwMCwgMHgzOCwgMHhmMiwKKwkweDAwLCAweDAwLCAweDZhLCAweDBiLCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweDMyLCAweDgwLCAweDJmLCAweGI2LAorCTB4M2MsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MmMsIDB4ODIsIDB4Y2QsIDB4MmUsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHhjMywgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhmMCwKKwkweDAwLCAweDAwLCAweDZlLCAweDBiLCAweDFkLCAweDIxLCAweDAwLCAweDAwLCAweDA3LCAweDAwLCAweDgyLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4NzEsIDB4MGIsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4NjIsIDB4ODEsIDB4MmYsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDcxLCAweDBiLCAweDgwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDgxLCAweDJmLCAweGI2LAorCTB4MjksIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MmMsIDB4ODIsIDB4Y2QsIDB4MmUsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgwMiwgMHg4MSwgMHgyZiwgMHgzNCwKKwkweDAwLCAweDAwLCAweGM2LCAweDBlLCAweDAwLCAweDAwLCAweDAwLCAweDJjLCAweGY5LCAweDAxLCAweDAwLCAweGY0LAorCTB4MDAsIDB4MDAsIDB4NzQsIDB4MGIsIDB4MTIsIDB4MDEsIDB4MDAsIDB4ZTgsIDB4MDIsIDB4YzAsIDB4MjEsIDB4YjIsCisJMHgxOCwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHgwYSwgMHgwMywgMHhmOSwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDQ4LCAweDAyLCAweGMwLCAweDgwLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4YTQsIDB4MDMsIDB4Y2EsIDB4MDEsIDB4MDAsIDB4YjAsIDB4MDIsIDB4MDAsIDB4ODUsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHg3ZSwgMHgwYiwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHhmMiwgMHhjMSwgMHg4NSwgMHhiNiwKKwkweDAwLCAweDAwLCAweDdhLCAweDBiLCAweDFmLCAweDQwLCAweDAyLCAweDg0LCAweGU2LCAweDAxLCAweDAwLCAweGI0LAorCTB4MDAsIDB4MDAsIDB4N2UsIDB4MGIsIDB4MWQsIDB4MDEsIDB4MDAsIDB4ZjgsIDB4MjIsIDB4ODEsIDB4MmYsIDB4YjQsCisJMHgwMCwgMHgwMCwgMHg3ZSwgMHgwYiwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg2MiwgMHg4MSwgMHgyZiwgMHg5NSwKKwkweDAwLCAweDAwLCAweDdjLCAweDBiLCAweDFkLCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGIwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NjIsIDB4ODEsIDB4MmYsIDB4MzUsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwMiwgMHg4MCwgMHgwMiwgMHg0MCwgMHg2OCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDFmLCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGIwLAorCTB4MDAsIDB4MDAsIDB4ODAsIDB4MGIsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4NDAsIDB4ODYsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgwYSwgMHgxMSwgMHgwMCwgMHg5MCwgMHgwMSwgMHgwOCwgMHgwOSwgMHgwMCwgMHg2ZSwgMHhmMiwKKwkweDAwLCAweDAwLCAweDNmLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGYwLAorCTB4MDAsIDB4MDAsIDB4ODcsIDB4MGIsIDB4MzMsIDB4MDEsIDB4MDAsIDB4ZDgsIDB4MDIsIDB4ODAsIDB4MDEsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHg4NywgMHgwYiwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHhiMiwgMHgwMSwgMHg3MiwgMHhiNiwKKwkweDAwLCAweDAwLCAweDg3LCAweDBiLCAweDlmLCAweGYwLCAweDAxLCAweDgwLCAweDgyLCAweGRiLCAweDg3LCAweGJjLAorCTB4MDAsIDB4MDAsIDB4ODcsIDB4MGIsIDB4OWYsIDB4ZjgsIDB4MDEsIDB4ODAsIDB4MjIsIDB4MjEsIDB4NmUsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlOCwgMHgwMSwgMHhlMCwgMHgwNiwgMHgwMCwgMHhlZSwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLCAweDAxLCAweGUwLCAweDA2LCAweGMwLCAweDg3LCAweDMyLAorCTB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDEsIDB4ZTgsIDB4NzYsIDB4MjAsIDB4ODEsIDB4MzksCisJMHgwMCwgMHgwMCwgMHg4ZCwgMHgwYiwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHhkMiwgMHg4MCwgMHgyZiwgMHhiNiwKKwkweDAwLCAweDAwLCAweDhkLCAweDBiLCAweDA0LCAweGIwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDZlLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4Y2QsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NzIsIDB4ODEsIDB4MmYsIDB4MzQsCisJMHgzYiwgMHgwMCwgMHg4ZCwgMHgwYiwgMHgxMiwgMHgwMSwgMHgwMCwgMHgyYywgMHg4MiwgMHhjZCwgMHgyZSwgMHhiMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OWQsIDB4MGIsIDB4MjcsIDB4MDksIDB4MDEsIDB4ZTQsIDB4MDYsIDB4YzAsIDB4MmQsIDB4YjIsCisJMHgwMCwgMHhjMCwgMHg5NSwgMHgwYiwgMHgxOCwgMHgwMSwgMHgwMCwgMHgwYywgMHhhOCwgMHhjZCwgMHgzZSwgMHhiMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweDA5LCAweGM1LCAweDg1LCAweDMwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDIsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ODIsIDB4YmEsIDB4OTcsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNiwgMHgwMSwgMHgwMCwgMHg4MCwgMHg5MiwgMHhiYSwgMHg5NywgMHhiYywKKwkweDAwLCAweDAwLCAweDczLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDA5LCAweGM1LCAweDg1LCAweGQwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NjgsIDB4MDIsIDB4YzUsIDB4ODUsIDB4YjAsCisJMHgyMCwgMHg4MCwgMHhhNCwgMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwOCwgMHg4MCwgMHgzNiwgMHg5MiwKKwkweDJjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA5LCAweDAwLCAweDM2LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4ZTIsIDB4MTAsIDB4MDAsIDB4OTgsIDB4MDEsIDB4MTQsIDB4MDksIDB4MDAsIDB4NmUsIDB4ZDIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwMSwgMHhlMCwgMHgwNiwgMHg0MCwgMHg4OCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ1LCAweDA4LCAweDAwLCAweDAwLCAweDA3LCAweDQwLCAweDg4LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4YzAsIDB4MmMsIDB4MzIsCisJMHgwMCwgMHg0MCwgMHgwMCwgMHg4MCwgMHhjYSwgMHgzOSwgMHgwMCwgMHgwMCwgMHgwNywgMHgwMCwgMHgzNywgMHgzMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDQ4LCAweDAyLCAweGMwLCAweDgwLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4ZTgsIDB4MDEsIDB4MDAsIDB4MzQsCisJMHgwMCwgMHgwMCwgMHhhMSwgMHgwYiwgMHgxZCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMCwKKwkweDAwLCAweDAwLCAweGExLCAweDBiLCAweDgwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDgxLCAweDJmLCAweGI2LAorCTB4MjksIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MmMsIDB4ODIsIDB4Y2QsIDB4MmUsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgwMiwgMHg4MSwgMHgyZiwgMHgzNCwKKwkweDAwLCAweDAwLCAweGM3LCAweDBlLCAweDAwLCAweDAwLCAweDAwLCAweDJjLCAweGY5LCAweDAxLCAweDAwLCAweGY0LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzgsIDB4MDksIDB4YzUsIDB4ODUsIDB4MzAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMiwgMHgwMSwgMHgwMCwgMHg4MCwgMHg4MiwgMHhiYSwgMHg5NywgMHhiYywKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA2LCAweDAxLCAweDAwLCAweDgwLCAweDkyLCAweGJhLCAweDk3LCAweGJjLAorCTB4MDAsIDB4MDAsIDB4NzMsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDksIDB4YzUsIDB4ODUsIDB4ZDAsCisJMHgwMCwgMHgwMCwgMHhhNCwgMHgwMywgMHgxMiwgMHgwMSwgMHgwMCwgMHg2OCwgMHgwMiwgMHhjNSwgMHg4NSwgMHhiMCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTQsIDB4NTQsIDB4MDEsIDB4YjAsIDB4MDIsIDB4YzAsIDB4NmUsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkOCwgMHgwMiwgMHg4MCwgMHgwMSwgMHgzMiwKKwkweDAwLCAweGMwLCAweGFlLCAweDBiLCAweDE4LCAweDAxLCAweDAwLCAweDBjLCAweGE4LCAweGNkLCAweDNlLCAweGIyLAorCTB4MjAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDgsIDB4ODAsIDB4MzYsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHhhMSwgMHgwMywgMHgxMiwgMHgwMSwgMHgwMCwgMHgyYywgMHg3MiwgMHhlMCwgMHgyZSwgMHhiMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ODIsIDB4ODEsIDB4MmYsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHhlZSwgMHgxMCwgMHgwMCwgMHgyMCwgMHgwMCwgMHgxOCwgMHgwOCwgMHgwMCwgMHg2ZSwgMHhmMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDFmLCAweDMwLCAweDAwLCAweDI4LCAweDA4LCAweDAwLCAweDZlLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTQsIDB4MDgsIDB4ODAsIDB4ODIsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgxMCwgMHgwMCwgMHg2YywgMHgwOCwgMHgwMCwgMHg2ZSwgMHhiMiwKKwkweDAwLCAweDAwLCAweGEzLCAweDBlLCAweDAwLCAweDE4LCAweDAwLCAweDRjLCAweDA4LCAweDAwLCAweDZlLCAweGYyLAorCTB4MDAsIDB4MDAsIDB4YjYsIDB4MGIsIDB4MDAsIDB4NTAsIDB4MDEsIDB4M2MsIDB4YTgsIDB4NWIsIDB4ODAsIDB4OWMsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLCAweDAxLCAweDAwLCAweGE4LCAweDFiLCAweDgwLCAweDNhLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MSwgMHgwMCwgMHgwMCwgMHhkOCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRkLCAweDAwLCAweDAwLCAweDAwLCAweDY3LCAweGUwLCAweDgzLCAweDNlLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDAsIDB4ODAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwNywgMHhjMCwgMHg4NiwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAwLCAweDAwLCAweDA3LCAweGMwLCAweDg0LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4ZWUsIDB4MGIsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjgsIDB4ZDgsIDB4YTAsIDB4ODIsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwOSwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweGQ4LCAweGEwLCAweDgxLCAweDNjLAorCTB4MDAsIDB4MDAsIDB4ZDQsIDB4MGIsIDB4MDQsIDB4MDAsIDB4MDAsIDB4M2MsIDB4ZDgsIDB4ZTAsIDB4ODMsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHg4MCwgMHg4MSwgMHhiYywKKwkweDAwLCAweDAwLCAweGM1LCAweDBiLCAweDA0LCAweDAwLCAweDAwLCAweDgwLCAweDcyLCAweDgwLCAweDJkLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NTAsIDB4MDIsIDB4YzAsIDB4MzgsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHhjZCwgMHgwYiwgMHg1MSwgMHgwMCwgMHgwMCwgMHhkOCwgMHgxMiwgMHg4MCwgMHgyZCwgMHg5YSwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDUwLCAweGYyLCAweGMxLCAweDM4LCAweGI0LAorCTB4MTgsIDB4MDAsIDB4MzYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NzMsIDB4MGEsIDB4MDMsIDB4ZjksCisJMHgwMCwgMHgwMCwgMHhjYiwgMHgwYiwgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg3MiwgMHg4MCwgMHgyZCwgMHhiYywKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweGEyLCAweDgwLCAweDJmLCAweGI2LAorCTB4MDAsIDB4MDAsIDB4YzYsIDB4MGIsIDB4NjcsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4YTIsIDB4ODAsIDB4MmYsIDB4YjUsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHhlOCwgMHgwMiwgMHhjMCwgMHgyMSwgMHhiMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDcyLCAweDgwLCAweDJkLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTEsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHhkMiwgMHgwYiwgMHgyYSwgMHgwMSwgMHgwMCwgMHgwMCwgMHhkOCwgMHgyMCwgMHg4MCwgMHhiYSwKKwkweDAwLCAweDAwLCAweGQxLCAweDBiLCAweDEyLCAweDAxLCAweDAwLCAweDAwLCAweDA5LCAweGMwLCAweDIxLCAweGIyLAorCTB4MTgsIDB4MDAsIDB4MzYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NzMsIDB4MGEsIDB4MDMsIDB4ZjksCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkOCwgMHgwMiwgMHg0MCwgMHg4NCwgMHgzMiwKKwkweDFkLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweGE0LCAweDE3LCAweGI4LAorCTB4MDAsIDB4MDAsIDB4YjcsIDB4MGUsIDB4MDAsIDB4NjAsIDB4MDAsIDB4NmMsIDB4MDgsIDB4MDAsIDB4NmUsIDB4ZjIsCisJMHgwMCwgMHgwMCwgMHhiYSwgMHgwYiwgMHg0ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2NywgMHhlMCwgMHg4MywgMHg5ZSwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDUwLCAweGYyLCAweGMxLCAweDM4LCAweGI0LAorCTB4MTgsIDB4MDAsIDB4MzYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NzMsIDB4MGEsIDB4MDMsIDB4ZjksCisJMHgxZCwgMHgwMCwgMHhkYiwgMHgwYiwgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHhhNCwgMHgxNywgMHhiOCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweGEyLCAweDgwLCAweDJmLCAweGI2LAorCTB4MDAsIDB4MDAsIDB4ZDUsIDB4MGIsIDB4NjcsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4YTIsIDB4ODAsIDB4MmYsIDB4YjUsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOSwgMHhjMCwgMHgyMSwgMHhiMiwKKwkweDFkLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweGE0LCAweDE3LCAweGI4LAorCTB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDIsIDB4NzgsIDB4MzksIDB4OWEsIDB4ZmUsIDB4MzgsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMiwgMHgwMSwgMHgwMCwgMHg4MCwgMHg4MiwgMHhiYSwgMHg5NywgMHhiYywKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA2LCAweDAxLCAweDAwLCAweDgwLCAweDkyLCAweGJhLCAweDk3LCAweGJjLAorCTB4MDgsIDB4MDAsIDB4NzMsIDB4MTEsIDB4MDAsIDB4NDAsIDB4MDIsIDB4MTQsIDB4MzksIDB4OWEsIDB4ZmUsIDB4ZDgsCisJMHgwOCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHg0MCwgMHgwMiwgMHg2OCwgMHgxMiwgMHg5YSwgMHhmZSwgMHhiOCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDBiLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGIwLAorCTB4MDAsIDB4MDAsIDB4ZDEsIDB4MGYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzAsIDB4MDMsIDB4MDAsIDB4MzgsIDB4ZjIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxZiwgMHgwMCwgMHgwMCwgMHg2YywgMHhkOCwgMHhlMCwgMHg4NiwgMHhiYSwKKwkweDAwLCAweDAwLCAweGEzLCAweDBlLCAweDUxLCAweDAwLCAweDAwLCAweGQ4LCAweDAyLCAweDAwLCAweDAwLCAweGYyLAorCTB4MDAsIDB4MDAsIDB4ZTYsIDB4MGIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4M2MsIDB4MDgsIDB4NDAsIDB4ODAsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweGI5LCAweDBiLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDgwLCAweDgxLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4ZWMsIDB4MGIsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4YTIsIDB4ODAsIDB4MmYsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHhlYiwgMHgwYiwgMHgxMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwOSwgMHhjMCwgMHgyMSwgMHhiMiwKKwkweDE4LCAweDAwLCAweDM2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDczLCAweDBhLCAweDAzLCAweGY5LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MDIsIDB4NDAsIDB4ODQsIDB4MzIsCisJMHgxZCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHhhNCwgMHgxNywgMHhiOCwKKwkweDAwLCAweDAwLCAweGI3LCAweDBlLCAweDAwLCAweDYwLCAweDAwLCAweDZjLCAweDA4LCAweDAwLCAweDZlLCAweGYyLAorCTB4MDAsIDB4MDAsIDB4YmEsIDB4MGIsIDB4NGQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjcsIDB4ZTAsIDB4ODMsIDB4OWUsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHhhMiwgMHg4MCwgMHgyZiwgMHhiNiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGMwLCAweDAxLCAweDAxLCAweDM4LCAweDA4LCAweGMwLCAweDZlLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4MzAsIDB4MDAsIDB4ZTAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHg1MCwgMHhmMiwgMHhjMSwgMHgzOCwgMHhiNCwKKwkweDAwLCAweDAwLCAweGY2LCAweDBiLCAweDA0LCAweDAyLCAweDAxLCAweGVjLCAweDE2LCAweGMwLCAweDZlLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YzksIDB4MDEsIDB4MDAsIDB4MTQsIDB4MTgsIDB4NDAsIDB4ODEsIDB4M2EsCisJMHgwMCwgMHhjMCwgMHhmNywgMHgwYiwgMHgxMiwgMHgwMSwgMHgwMCwgMHg0MCwgMHhhMiwgMHg4ZCwgMHgzOSwgMHhiMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MzAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOCwgMHgwMSwgMHgyMCwgMHg5OSwgMHgyMiwgMHg2ZSwgMHgzYSwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA2LCAweDAxLCAweDAyLCAweDgwLCAweDgyLCAweDFiLCAweDkyLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4ZmIsIDB4MGIsIDB4MmYsIDB4MjAsIDB4MDEsIDB4ZTAsIDB4OTYsIDB4MjIsIDB4NmUsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgyZiwgMHgwZSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhmMCwKKwkweDAwLCAweDAwLCAweGZmLCAweDBiLCAweDA0LCAweDAwLCAweDAwLCAweDNjLCAweGQ4LCAweGUwLCAweDgzLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4ZmUsIDB4MGIsIDB4OWYsIDB4MzEsIDB4MDEsIDB4ZTAsIDB4OTYsIDB4MjIsIDB4NmUsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMSwgMHhlMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDA3LCAweDBjLCAweDAwLCAweDUwLCAweDAxLCAweGU4LCAweGY2LCAweDYwLCAweDgwLCAweDljLAorCTB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDIsIDB4NzgsIDB4MzksIDB4OWEsIDB4ZmUsIDB4MzgsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMiwgMHgwMSwgMHgwMCwgMHg4MCwgMHg4MiwgMHhiYSwgMHg5NywgMHhiYywKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA2LCAweDAxLCAweDAwLCAweDgwLCAweDkyLCAweGJhLCAweDk3LCAweGJjLAorCTB4MDgsIDB4MDAsIDB4NzMsIDB4MTEsIDB4MDAsIDB4NDAsIDB4MDIsIDB4MTQsIDB4MzksIDB4OWEsIDB4ZmUsIDB4ZDgsCisJMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwMiwgMHg2OCwgMHgxMiwgMHg5YSwgMHhmZSwgMHgzOCwKKwkweDAwLCAweDAwLCAweDA2LCAweDBjLCAweDlmLCAweDMxLCAweDAxLCAweGUwLCAweDk2LCAweDIyLCAweDZlLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzAsIDB4MDEsIDB4ZTAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHgwMSwgMHhlOCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE4LCAweDAxLCAweGUwLCAweDA2LCAweDAwLCAweDkyLCAweDMyLAorCTB4MTgsIDB4MDAsIDB4MzYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NzMsIDB4MGEsIDB4MDMsIDB4ZjksCisJMHgxZCwgMHgwMCwgMHgwYywgMHgwYywgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHhhNCwgMHgxNywgMHhiOCwKKwkweDAwLCAweDAwLCAweDA4LCAweDBjLCAweDA0LCAweDAwLCAweDAwLCAweDE0LCAweDE4LCAweDQwLCAweDgxLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg3MiwgMHg4MCwgMHgyZiwgMHhiNiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweDAyLCAweDgwLCAweDAxLCAweDMyLAorCTB4MDAsIDB4MjAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjgsIDB4MDksIDB4MDAsIDB4MzcsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHhjYiwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHhlOCwgMHgwMSwgMHgwMCwgMHhmNCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDQ4LCAweDAyLCAweGMwLCAweDgwLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4ZDEsIDB4MGYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzAsIDB4MDMsIDB4MDAsIDB4MzgsIDB4ZjIsCisJMHgwMCwgMHgwMCwgMHgxNCwgMHgwYywgMHgyMywgMHgwMSwgMHgwMCwgMHgxNCwgMHgxOCwgMHg0MCwgMHg4MSwgMHhiYSwKKwkweDNjLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDJjLCAweDgyLCAweGNkLCAweDJlLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4YTIsIDB4ODAsIDB4MmYsIDB4YjYsCisJMHgxOCwgMHgwMCwgMHgzNiwgMHgwMCwgMHhjYSwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHgwYSwgMHgwMywgMHhmOSwKKwkweDFkLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweGE0LCAweDE3LCAweGI4LAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4OWYsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MTgsIDB4NDAsIDB4ODEsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgxNSwgMHgwYywgMHgwYiwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMCwKKwkweDAwLCAweDAwLCAweDFjLCAweDBjLCAweDNkLCAweDAxLCAweDAwLCAweGIwLCAweDAyLCAweDAwLCAweDg1LCAweGIyLAorCTB4MDAsIDB4MDAsIDB4MWMsIDB4MGMsIDB4MzQsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4ZDIsIDB4ODEsIDB4MmYsIDB4YjUsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHhiMiwgMHg4MCwgMHgyZiwgMHgzNCwKKwkweDAwLCAweDAwLCAweGIwLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGYwLAorCTB4MDAsIDB4MDAsIDB4MjAsIDB4MGMsIDB4MjksIDB4MzEsIDB4MDEsIDB4MGMsIDB4MDksIDB4MDAsIDB4NmUsIDB4YjIsCisJMHgyYSwgMHgwMCwgMHhhMiwgMHgwNywgMHgxMiwgMHgwMSwgMHgwMCwgMHgyYywgMHg4MiwgMHhjZCwgMHgyZSwgMHhiMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4MjcsIDB4MGUsIDB4MDAsIDB4MGMsIDB4MDIsIDB4MDAsIDB4MDksIDB4ODAsIDB4NmUsIDB4ZjIsCisJMHgwMCwgMHgwMCwgMHgyNCwgMHgwYywgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweGEyLCAweDA3LCAweDEyLCAweDAxLCAweDAwLCAweDJjLCAweDAyLCAweGU0LCAweDJlLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHgyNywgMHgwYywgMHgxZCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMCwKKwkweDAwLCAweDAwLCAweGEyLCAweDA3LCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweDYyLCAweDgxLCAweDJmLCAweGI2LAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHhhMiwgMHgwNywgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHg4MSwgMHgyZiwgMHhiNiwKKwkweDI5LCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDJjLCAweDgyLCAweGNkLCAweDJlLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4YTIsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MDIsIDB4ODEsIDB4MmYsIDB4OTQsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg4MiwgMHg4MSwgMHgyZiwgMHhiNiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAwLCAweDAwLCAweDE4LCAweDA5LCAweDQwLCAweDgxLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4NGYsIDB4MGUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4ZjAsCisJMHgwMCwgMHgwMCwgMHgyZiwgMHgwZSwgMHgwMCwgMHhhOCwgMHgwMSwgMHgyMCwgMHgwOSwgMHgwMCwgMHg2ZSwgMHhmMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDMwLCAweDAxLCAweDBjLCAweDA5LCAweDAwLCAweDZlLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MjcsIDB4MGUsIDB4MDAsIDB4MGMsIDB4MDIsIDB4MDAsIDB4MDksIDB4ODAsIDB4NmUsIDB4ZjIsCisJMHgwMCwgMHgwMCwgMHhhNCwgMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweGIwLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGYwLAorCTB4MDAsIDB4MDAsIDB4YzIsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4ZjAsCisJMHgwMCwgMHgwMCwgMHg5ZCwgMHgwNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYywgMHgwOCwgMHgwMCwgMHg5MCwgMHg5MiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweDgyLCAweDgxLCAweDJmLCAweGI2LAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MWYsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4YjAsCisJMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOCwgMHg3OCwgMHgwYiwgMHgxNiwgMHgzOCwKKwkweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGFjLCAweDc4LCAweDBiLCAweDE2LCAweDM4LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjAsIDB4YTgsIDB4MDAsIDB4MmQsIDB4MzcsCisJMHgwMCwgMHhjYywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiMCwgMHg4OCwgMHgwZCwgMHg4YiwgMHgzYSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLCAweDAxLCAweGI0LCAweDA4LCAweDgwLCAweDZlLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4NDUsIDB4MGMsIDB4MDQsIDB4MzEsIDB4MDEsIDB4OTAsIDB4MDgsIDB4MDAsIDB4NmUsIDB4YjIsCisJMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjOCwgMHg4MiwgMHg4ZCwgMHg4YSwgMHgzNywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGM4LCAweGMyLCAweGEyLCAweDJjLCAweDNhLAorCTB4MTgsIDB4MDAsIDB4NDMsIDB4MGMsIDB4ODYsIDB4NDEsIDB4MDIsIDB4NzgsIDB4ODgsIDB4MGQsIDB4NzgsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHhhMiwgMHhlMiwgMHg4YSwgMHhiYywKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDQxLCAweDAyLCAweDgwLCAweGIyLCAweDNmLCAweDc4LCAweGIwLAorCTB4MDAsIDB4MDAsIDB4M2MsIDB4MGMsIDB4OWYsIDB4MDEsIDB4MDAsIDB4YTgsIDB4MTgsIDB4ODAsIDB4OGEsIDB4YmMsCisJMHhiNywgMHgwMCwgMHgzYywgMHgwYywgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOCwgMHgwOCwgMHgwMCwgMHgzNiwgMHg5MiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDAyLCAweDA0LCAweGI4LCAweDNmLCAweDc4LCAweDMwLAorCTB4MDAsIDB4MDAsIDB4NTgsIDB4MGMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4ZDgsIDB4NjIsIDB4ODAsIDB4OWMsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMiwgMHgwYywgMHgwMiwgMHg4MCwgMHhhMiwgMHgxYiwgMHg4OSwgMHhiYywKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDgwLCAweDAwLCAweDAwLCAweDgwLCAweDgyLCAweDgwLCAweDJmLCAweGI2LAorCTB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YzgsIDB4ODIsIDB4OGQsIDB4OGEsIDB4MzcsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjOCwgMHhjMiwgMHhhMiwgMHgyYywgMHgzYSwKKwkweDE4LCAweDAwLCAweDRlLCAweDBjLCAweDg2LCAweDQxLCAweDAyLCAweDc4LCAweDg4LCAweDBkLCAweDc4LCAweGI2LAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4YTIsIDB4ZTIsIDB4OGEsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHg0MSwgMHgwMiwgMHg4MCwgMHhiMiwgMHgzZiwgMHg3OCwgMHhiMCwKKwkweDAwLCAweDAwLCAweDQ3LCAweDBjLCAweDlmLCAweDAxLCAweDAwLCAweGE4LCAweDE4LCAweDgwLCAweDhhLCAweGJjLAorCTB4YjcsIDB4MDAsIDB4NDcsIDB4MGMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTgsIDB4MDgsIDB4MDAsIDB4MzYsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHg1MSwgMHgwYywgMHgyOCwgMHg0MCwgMHgwMiwgMHgwNCwgMHhiOCwgMHgzZiwgMHg3OCwgMHhiMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGM4LCAweDAxLCAweDAwLCAweDA0LCAweGQ4LCAweDYyLCAweDgwLCAweDNjLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4OWYsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4NDAsIDB4ODAsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHg1NSwgMHgwYywgMHgwMiwgMHgwMSwgMHgwMCwgMHg5MCwgMHgxOCwgMHgyMCwgMHg4OSwgMHhiYywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGI0LCAweDA4LCAweDAwLCAweDAwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4NDcsIDB4MGMsIDB4OWYsIDB4MDEsIDB4MDAsIDB4YTgsIDB4MTgsIDB4ODAsIDB4OGEsIDB4YmMsCisJMHhiNywgMHgwMCwgMHg0NywgMHgwYywgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOCwgMHgwOCwgMHgwMCwgMHgzNiwgMHg5MiwKKwkweDAwLCAweDAwLCAweDU4LCAweDBjLCAweDA0LCAweDAwLCAweDAwLCAweDkwLCAweDE4LCAweDIwLCAweDg5LCAweGJhLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4OWYsIDB4MDAsIDB4MDAsIDB4MDQsIDB4NDgsIDB4NjIsIDB4ODAsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg5MCwgMHgwMCwgMHgwMCwgMHhiNCwgMHg0OCwgMHg2MiwgMHg4YiwgMHhiYSwKKwkweDAzLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDQwLCAweDAyLCAweDAwLCAweDA4LCAweDFlLCAweGZmLCAweGI4LAorCTB4MDAsIDB4MDAsIDB4NjAsIDB4MGMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MjIsIDB4ODAsIDB4OWEsCisJMHgwMCwgMHgwMCwgMHg4OSwgMHgwYywgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHhhMiwgMHhlMiwgMHg4YSwgMHhiYywKKwkweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGM4LCAweDgyLCAweDhkLCAweDhhLCAweDM3LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YzgsIDB4YzIsIDB4YTIsIDB4MmMsIDB4M2EsCisJMHgxOCwgMHgwMCwgMHg4NywgMHgwYywgMHg4NiwgMHg0MCwgMHgwMiwgMHg3OCwgMHg4OCwgMHgwZCwgMHg3OCwgMHhiNiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDQwLCAweDAyLCAweDA0LCAweGI4LCAweDNmLCAweDc4LCAweGIwLAorCTB4MDMsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4NDAsIDB4MDIsIDB4MDAsIDB4MDgsIDB4MWUsIDB4ZmYsIDB4YjgsCisJMHgzOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOSwgMHgwMCwgMHgzNiwgMHgzMiwKKwkweDAwLCAweDAwLCAweGUyLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDA5LCAweDAwLCAweDgwLCAweGQyLAorCTB4MDAsIDB4MDAsIDB4NjcsIDB4MGMsIDB4MTIsIDB4MDEsIDB4MDAsIDB4NjAsIDB4MDgsIDB4NDAsIDB4MjMsIDB4YjIsCisJMHgwMCwgMHg4MiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwOCwgMHg4MCwgMHgzNiwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDU0LCAweDAxLCAweGIwLCAweDAyLCAweGMwLCAweDZlLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4YTEsIDB4MDMsIDB4MTIsIDB4MDEsIDB4MDAsIDB4MmMsIDB4NzIsIDB4ZTAsIDB4MmUsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDI0LCAweDA4LCAweDAwLCAweDIzLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MjAsIDB4MDgsIDB4YzAsIDB4MjMsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwOCwgMHg4MCwgMHgyMywgMHhiMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDU0LCAweDU0LCAweDAxLCAweGIwLCAweDAyLCAweGMwLCAweDZlLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MDIsIDB4ODAsIDB4MDEsIDB4MzIsCisJMHgwMCwgMHhjMCwgMHg3MiwgMHgwYywgMHgxOCwgMHgwMSwgMHgwMCwgMHgwYywgMHhhOCwgMHhjZCwgMHgzZSwgMHhiMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDM4LCAweDAyLCAweDgwLCAweDgxLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4M2MsIDB4MDIsIDB4MDAsIDB4ODIsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMiwgMHg0MCwgMHg4MiwgMHhiMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDM0LCAweDAyLCAweDAwLCAweDg2LCAweGIyLAorCTB4MjAsIDB4ODAsIDB4NjQsIDB4MGMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDgsIDB4ODAsIDB4MzYsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkOCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDMwLCAweDAyLCAweDAwLCAweGI4LCAweDFiLCAweDgwLCAweDNhLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjQsIDB4MzAsIDB4MDEsIDB4ZTAsIDB4MTYsIDB4MjAsIDB4NmUsIDB4M2EsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNywgMHg0MCwgMHg4MCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDA3LCAweDAwLCAweDgwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4NDAsIDB4ODIsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwMCwgMHg4NiwgMHgzMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDUwLCAweGYyLCAweGMxLCAweDM4LCAweGI0LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MDIsIDB4ODAsIDB4MDEsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMCwgMHgwMCwgMHgwNywgMHg4MCwgMHg4MSwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDIwLCAweDAwLCAweDAwLCAweDA3LCAweDAwLCAweDgyLCAweDMyLAorCTB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MTcsIDB4ZTAsIDB4MmMsIDB4MzksCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzOCwgMHgwMCwgMHgwMCwgMHhmNywgMHgwMSwgMHgwYiwgMHgzNCwKKwkweDAwLCAweDAwLCAweDgxLCAweDBjLCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweDMyLCAweDgwLCAweDg3LCAweGI2LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzgsIDB4MDAsIDB4MDAsIDB4YjcsIDB4MDEsIDB4NzAsIDB4MzQsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHhlOCwgMHgwMSwgMHgwMCwgMHgzNCwKKwkweDAwLCAweDAwLCAweDkzLCAweDBjLCAweDAyLCAweDBjLCAweDAyLCAweDgwLCAweGEyLCAweDFiLCAweDg5LCAweGJjLAorCTB4MTgsIDB4MDAsIDB4MzYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NzMsIDB4MGEsIDB4MDMsIDB4ZjksCisJMHgwMCwgMHgwMCwgMHhkMSwgMHgwZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMywgMHgwMCwgMHgzOCwgMHhmMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDQ4LCAweDAyLCAweGMwLCAweDgwLCAweGIyLAorCTB4MTgsIDB4MDAsIDB4MzYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NzMsIDB4MGEsIDB4MDMsIDB4ZjksCisJMHgwMCwgMHgwMCwgMHg1YSwgMHgwYywgMHg5ZiwgMHgwMSwgMHgwMCwgMHhhOCwgMHgxOCwgMHg4MCwgMHg4YSwgMHhiYywKKwkweGI3LCAweDAwLCAweDVhLCAweDBjLCAweDAwLCAweDAwLCAweDAwLCAweGE4LCAweDA4LCAweDAwLCAweDM2LCAweDkyLAorCTB4MjcsIDB4MDAsIDB4OGMsIDB4MGMsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ODIsIDB4Y2QsIDB4ODEsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHgwMSwgMHg3OCwgMHgwOSwgMHgwMCwgMHg2ZSwgMHgzMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDQyLCAweGEyLCAweDk3LCAweGJjLAorCTB4MDAsIDB4MDAsIDB4OGUsIDB4MGMsIDB4MjMsIDB4NTUsIDB4MDEsIDB4YjAsIDB4MDIsIDB4YzAsIDB4NmUsIDB4YjIsCisJMHgzYywgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHgyYywgMHg4MiwgMHhjZCwgMHgyZSwgMHhiMiwKKwkweDAwLCAweDAwLCAweDkwLCAweDBjLCAweDFkLCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGIwLAorCTB4MDAsIDB4MDAsIDB4YTIsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NjIsIDB4ODEsIDB4MmYsIDB4OTUsCisJMHgwMCwgMHgwMCwgMHhhMiwgMHgwNywgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHg4MSwgMHgyZiwgMHhiNiwKKwkweDI5LCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDJjLCAweDgyLCAweGNkLCAweDJlLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4YTIsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MDIsIDB4ODEsIDB4MmYsIDB4OTQsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzOCwgMHgwMCwgMHgwMCwgMHhjNywgMHgwMSwgMHg3MCwgMHgzNCwKKwkweDAwLCAweDAwLCAweGQxLCAweDBmLCAweDAwLCAweDAwLCAweDAwLCAweDMwLCAweDAzLCAweDAwLCAweDM4LCAweGYyLAorCTB4MDgsIDB4MDAsIDB4OTcsIDB4MGMsIDB4MjMsIDB4MTksIDB4MDEsIDB4ZTgsIDB4NzYsIDB4MjAsIDB4ODEsIDB4YjksCisJMHgzYywgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHgyYywgMHg4MiwgMHhjZCwgMHgyZSwgMHhiMiwKKwkweDAwLCAweDAwLCAweDk5LCAweDBjLCAweDFkLCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGIwLAorCTB4MDAsIDB4MDAsIDB4OWMsIDB4MGMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NjIsIDB4ODEsIDB4MmYsIDB4OTUsCisJMHgwMCwgMHgwMCwgMHg5YywgMHgwYywgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHg4MSwgMHgyZiwgMHhiNiwKKwkweDI5LCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDJjLCAweDgyLCAweGNkLCAweDJlLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MDIsIDB4ODEsIDB4MmYsIDB4MzQsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHhhMiwgMHg4MCwgMHgyZiwgMHhiNiwKKwkweDAwLCAweDAwLCAweGM2LCAweDBlLCAweDAwLCAweDAwLCAweDAwLCAweDJjLCAweGY5LCAweDAxLCAweDAwLCAweGY0LAorCTB4MDAsIDB4MDAsIDB4YTAsIDB4MGMsIDB4MTIsIDB4MDEsIDB4MDAsIDB4ZTgsIDB4MDIsIDB4YzAsIDB4MjEsIDB4YjIsCisJMHgxOCwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHgwYSwgMHgwMywgMHhmOSwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDQ4LCAweDAyLCAweGMwLCAweDgwLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4YTQsIDB4MDMsIDB4Y2EsIDB4MDEsIDB4MDAsIDB4YjAsIDB4MDIsIDB4MDAsIDB4ODUsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkOCwgMHgwMiwgMHg4MCwgMHgwMSwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDMwLCAweDAwLCAweDI4LCAweDA4LCAweDAwLCAweDZlLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTQsIDB4NTQsIDB4MDEsIDB4YjAsIDB4MDIsIDB4YzAsIDB4NmUsIDB4MzIsCisJMHgwMCwgMHhjMCwgMHhhZCwgMHgwYywgMHgxOCwgMHgwMSwgMHgwMCwgMHgwYywgMHhhOCwgMHhjZCwgMHgzZSwgMHhiMiwKKwkweDE4LCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDgyLCAweDhkLCAweDgyLCAweGI2LAorCTB4MjAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDgsIDB4ODAsIDB4MzYsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgzOCwgMHgwOCwgMHhjMCwgMHg2ZSwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVlLCAweDAxLCAweGVjLCAweDY2LCAweDAwLCAweDAwLCAweDM0LAorCTB4MTgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDgsIDB4MDEsIDB4ZTAsIDB4ZTYsIDB4YTAsIDB4ODIsIDB4MzksCisJMHgxYiwgMHgwMCwgMHhhMSwgMHgwMywgMHgxMiwgMHgwMSwgMHgwMCwgMHgyYywgMHg4MiwgMHhjZCwgMHgyZSwgMHhiMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MjAsIDB4MDAsIDB4ODQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjgsIDB4MDksIDB4MDAsIDB4MzcsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHhjNywgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHhlOCwgMHgwMSwgMHgwMCwgMHhmNCwKKwkweDAwLCAweDAwLCAweGEyLCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MDIsIDB4ODAsIDB4MDEsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1NCwgMHg1NCwgMHgwMSwgMHhiMCwgMHgwMiwgMHhjMCwgMHg2ZSwgMHgzMiwKKwkweDAwLCAweGMwLCAweGI2LCAweDBjLCAweDE4LCAweDAxLCAweDAwLCAweDBjLCAweGE4LCAweGNkLCAweDNlLCAweGIyLAorCTB4MjAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDgsIDB4ODAsIDB4MzYsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHg5ZCwgMHgwMywgMHgxMiwgMHgwMSwgMHgwMCwgMHgyYywgMHg3MiwgMHhlMCwgMHgyZSwgMHhiMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4NTgsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjgsIDB4MDksIDB4MDAsIDB4MDIsIDB4ZjIsCisJMHgwMCwgMHgwMCwgMHhiZCwgMHgwYywgMHgwMCwgMHgwMCwgMHgwMCwgMHg1YywgMHgwOCwgMHgwMCwgMHgwMCwgMHg5MiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweDAyLCAweDgwLCAweDAxLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTQsIDB4NTQsIDB4MDEsIDB4YjAsIDB4MDIsIDB4YzAsIDB4NmUsIDB4MzIsCisJMHgwMCwgMHhjMCwgMHhiZCwgMHgwYywgMHgxOCwgMHgwMSwgMHgwMCwgMHgwYywgMHhhOCwgMHhjZCwgMHgzZSwgMHhiMiwKKwkweDIwLCAweDgwLCAweDljLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDA4LCAweDgwLCAweDM2LCAweGYyLAorCTB4MDAsIDB4MDAsIDB4YTEsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMCwgMHgyOCwgMHgwOCwgMHgwMCwgMHg2ZSwgMHgzMiwKKwkweDAwLCAweDIwLCAweDAwLCAweDg0LCAweDAwLCAweDAwLCAweDAwLCAweDI4LCAweDA5LCAweDAwLCAweDM3LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4YzcsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4ZTgsIDB4MDEsIDB4MDAsIDB4ZjQsCisJMHgwMCwgMHgwMCwgMHhjMiwgMHgwYywgMHgwMCwgMHgwMCwgMHgwMCwgMHhiMCwgMHgwMiwgMHgwMCwgMHg4NSwgMHg5MiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDA4LCAweDAwLCAweDAwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4YzYsIDB4MGMsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4YzAsIDB4ODUsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHhjNiwgMHgwYywgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHhmMiwgMHhjMSwgMHg4NSwgMHhiNiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQyLCAweDQxLCAweDAyLCAweDgwLCAweDA2LCAweGMwLCAweDg1LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MWMsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4YjAsCisJMHgwMCwgMHgwMCwgMHg0YywgMHgwZCwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHhhMiwgMHg4MCwgMHgyZiwgMHhiNiwKKwkweDE4LCAweDAwLCAweDM2LCAweDAwLCAweGNhLCAweDAwLCAweDAwLCAweGY4LCAweDczLCAweDBhLCAweDAzLCAweGY5LAorCTB4MDAsIDB4MDAsIDB4NGMsIDB4MGQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjAsIDB4MDIsIDB4MDAsIDB4ODUsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHgxYSwgMHgwZCwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg4MiwgMHg4MSwgMHgyZiwgMHhiNiwKKwkweDAwLCAweDAwLCAweDIyLCAweDBkLCAweDFmLCAweDIwLCAweDAxLCAweDA4LCAweDA5LCAweDAwLCAweDZlLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4MWEsIDB4MGQsIDB4MDQsIDB4MzAsIDB4MDEsIDB4MDgsIDB4ODksIDB4OWIsIDB4OTAsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHhkMiwgMHgwYywgMHgwNCwgMHgzMSwgMHgwMSwgMHg4MCwgMHgwMiwgMHgwMCwgMHg2ZSwgMHhiYywKKwkweDAwLCAweDAwLCAweGEzLCAweDBlLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGYwLAorCTB4MDAsIDB4MDAsIDB4ZDAsIDB4MGMsIDB4MDAsIDB4NTAsIDB4MDEsIDB4NDgsIDB4MDgsIDB4ODAsIDB4NmUsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDI4LCAweDYxLCAweDgwLCAweDNjLAorCTB4MDAsIDB4MDAsIDB4ZWIsIDB4MGMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjgsIDB4MjEsIDB4ODAsIDB4OWEsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg5ZiwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHg4MCwgMHg5MCwgMHhiMiwKKwkweDAwLCAweDAwLCAweGEzLCAweDBlLCAweDAwLCAweDMwLCAweDAxLCAweDQ4LCAweDA4LCAweDAwLCAweDZlLCAweGYyLAorCTB4MDAsIDB4MDAsIDB4ZDYsIDB4MGMsIDB4MDAsIDB4NTAsIDB4MDEsIDB4MDQsIDB4YTgsIDB4NWIsIDB4ODAsIDB4OWMsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLCAweDAxLCAweDAwLCAweGE4LCAweDFiLCAweDgwLCAweDNhLAorCTB4MDAsIDB4MDAsIDB4ZTgsIDB4MGMsIDB4MDcsIDB4MDAsIDB4MDAsIDB4NDgsIDB4MTgsIDB4YTAsIDB4ODQsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwMiwgMHg4MCwgMHgwMiwgMHg0MCwgMHg2OCwgMHgzMiwKKwkweDA1LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweDA5LCAweGEwLCAweGZlLCAweDM4LAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDIsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ODIsIDB4YmEsIDB4OTcsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNiwgMHgwMSwgMHgwMCwgMHg4MCwgMHg5MiwgMHhiYSwgMHg5NywgMHhiYywKKwkweDA1LCAweDAwLCAweDczLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDA5LCAweGEwLCAweGZlLCAweGQ4LAorCTB4MDUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjgsIDB4MDIsIDB4YTAsIDB4ZmUsIDB4MzgsCisJMHgwMCwgMHgwMCwgMHhhMywgMHgwZSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhmMCwKKwkweDAwLCAweDAwLCAweGUxLCAweDBjLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHhlOCwgMHgwYywgMHgwNywgMHgwMCwgMHgwMCwgMHg0OCwgMHgxOCwgMHhhMCwgMHg4NCwgMHhiYywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDAyLCAweDgwLCAweDAyLCAweDQwLCAweDY4LCAweDMyLAorCTB4MDUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzgsIDB4MDksIDB4YTAsIDB4ZmUsIDB4MzgsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMiwgMHgwMSwgMHgwMCwgMHg4MCwgMHg4MiwgMHhiYSwgMHg5NywgMHhiYywKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA2LCAweDAxLCAweDAwLCAweDgwLCAweDkyLCAweGJhLCAweDk3LCAweGJjLAorCTB4MDUsIDB4MDAsIDB4NzMsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDksIDB4YTAsIDB4ZmUsIDB4ZDgsCisJMHgwNSwgMHgwMCwgMHhkZSwgMHgwYywgMHgwMCwgMHgwMCwgMHgwMCwgMHg2OCwgMHgwMiwgMHhhMCwgMHhmZSwgMHg5OCwKKwkweDAwLCAweDAwLCAweGViLCAweDBjLCAweDA0LCAweDAwLCAweDAwLCAweDQ4LCAweDE4LCAweGEwLCAweDg0LCAweGJhLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4OWYsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MjgsIDB4NjEsIDB4ODAsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyOCwgMHgyMSwgMHg4MCwgMHgzYSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDU0LCAweDAxLCAweGIwLCAweDAyLCAweGMwLCAweDZlLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4ZjQsIDB4MGMsIDB4MTIsIDB4MDEsIDB4MDAsIDB4NjAsIDB4MDgsIDB4NDAsIDB4MjMsIDB4YjIsCisJMHgwMywgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHg0MCwgMHgwMiwgMHgwMCwgMHgzOCwgMHgxYSwgMHhmZiwgMHhiOCwKKwkweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweDA5LCAweDYwLCAweDgwLCAweDM5LAorCTB4MTgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDIsIDB4NDEsIDB4MDIsIDB4OGMsIDB4ZTYsIDB4YTEsIDB4OTcsIDB4MzksCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHgwMSwgMHhlOCwgMHgwNiwgMHg4MCwgMHg4NCwgMHgzMiwKKwkweDAwLCAweDgyLCAweDAwLCAweDAwLCAweGQ2LCAweDAxLCAweDAwLCAweDA4LCAweDA4LCAweDgwLCAweDM2LCAweDMyLAorCTB4MjgsIDB4MDAsIDB4YTEsIDB4MDMsIDB4MTIsIDB4MDEsIDB4MDAsIDB4MmMsIDB4ODIsIDB4Y2QsIDB4MmUsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDI0LCAweDA4LCAweDAwLCAweDIzLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MjAsIDB4MDgsIDB4YzAsIDB4MjMsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwOCwgMHg4MCwgMHgyMywgMHhiMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweDAyLCAweDgwLCAweDAxLCAweDMyLAorCTB4MDAsIDB4YzAsIDB4ZmUsIDB4MGMsIDB4MTgsIDB4MDEsIDB4MDAsIDB4MGMsIDB4YTgsIDB4Y2QsIDB4M2UsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHgzOCwgMHgwMiwgMHg4MCwgMHg4MSwgMHhiMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDNjLCAweDAyLCAweDAwLCAweDgyLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MzAsIDB4MDIsIDB4NDAsIDB4ODIsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHhlZCwgMHgwYywgMHgxMiwgMHgwMSwgMHgwMCwgMHgzNCwgMHgwMiwgMHgwMCwgMHg4NiwgMHhiMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDIsIDB4ODAsIDB4MDIsIDB4NDAsIDB4NjgsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0OCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweDAyLCAweDAwLCAweDAwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4NDAsIDB4ODAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwMCwgMHg4MCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDA3LCAweDQwLCAweDgyLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDAsIDB4ODYsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHg1MCwgMHhmMiwgMHhjMSwgMHgzOCwgMHhiNCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ2LCAweDAxLCAweDAwLCAweGQ4LCAweDAyLCAweDgwLCAweDAxLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDAsIDB4MDAsIDB4MDcsIDB4ODAsIDB4ODEsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwMCwgMHg4MiwgMHgzMiwKKwkweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDMwLCAweDAwLCAweDAwLCAweDE3LCAweGUwLCAweDJjLCAweDM5LAorCTB4MDAsIDB4MDAsIDB4MGQsIDB4MGQsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MzIsIDB4ODAsIDB4ODcsIDB4YjYsCisJMHgwMCwgMHgxMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgzOCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwMCwgMHgzNywgMHgzMiwKKwkweDAwLCAweDAwLCAweDBlLCAweDBkLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MTAsIDB4MDAsIDB4ODgsIDB4MDAsIDB4MzgsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDAsIDB4MzcsIDB4MzIsCisJMHgxOCwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHgwYSwgMHgwMywgMHhmOSwKKwkweDA1LCAweDAwLCAweDczLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDA5LCAweGEwLCAweGZlLCAweGQ4LAorCTB4MDUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjgsIDB4MDIsIDB4YTAsIDB4ZmUsIDB4MzgsCisJMHgwNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3OCwgMHgwOSwgMHhhMCwgMHhmZSwgMHgzOCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAyLCAweDAxLCAweDAwLCAweDgwLCAweDgyLCAweGJhLCAweDk3LCAweGJjLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDYsIDB4MDEsIDB4MDAsIDB4ODAsIDB4OTIsIDB4YmEsIDB4OTcsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHhlOCwgMHgwMSwgMHgwMCwgMHgzNCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDQ4LCAweDAyLCAweGMwLCAweDgwLCAweGIyLAorCTB4MTgsIDB4MDAsIDB4MzYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NzMsIDB4MGEsIDB4MDMsIDB4ZjksCisJMHgwMCwgMHgwMCwgMHhhMywgMHgwZSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhmMCwKKwkweDAwLCAweDAwLCAweGViLCAweDBjLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4MjIsIDB4MGQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHhhMywgMHgwZSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhmMCwKKwkweDA1LCAweDAwLCAweDFkLCAweDBkLCAweDAwLCAweDAwLCAweDAwLCAweDY4LCAweDAyLCAweGEwLCAweGZlLCAweDk4LAorCTB4MDAsIDB4MDAsIDB4MjIsIDB4MGQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwNSwgMHgwMCwgMHg3MywgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwOSwgMHhhMCwgMHhmZSwgMHhkOCwKKwkweDA1LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweDA5LCAweGEwLCAweGZlLCAweDM4LAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDIsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ODIsIDB4YmEsIDB4OTcsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNiwgMHgwMSwgMHgwMCwgMHg4MCwgMHg5MiwgMHhiYSwgMHg5NywgMHhiYywKKwkweDAwLCAweDAwLCAweDFhLCAweDBkLCAweDAwLCAweDQwLCAweDAyLCAweDgwLCAweDAyLCAweDQwLCAweDY4LCAweDkyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4Y2EsIDB4MDEsIDB4MDAsIDB4ZDgsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MzIsCisJMHg0YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwMCwgMHgzNiwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweGE5LCAweDAwLCAweDJkLCAweDM3LAorCTB4YjQsIDB4Y2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4ODcsIDB4OGQsIDB4OTcsIDB4M2EsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3OCwgMHg5OSwgMHhjMCwgMHgyYywgMHgzNywKKwkweGI0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweDg5LCAweDhkLCAweDk3LCAweDNhLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDIsIDB4MTAsIDB4MDAsIDB4MDAsIDB4ODcsIDB4YmYsIDB4OTcsIDB4YmEsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMCwgMHgwMCwgMHgwNywgMHg0MCwgMHhmZSwgMHgzMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDQ4LCAweGYyLCAweGMxLCAweDM4LCAweGI0LAorCTB4MDAsIDB4MDAsIDB4MmIsIDB4MGQsIDB4YjYsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4YjAsCisJMHgwMCwgMHgyMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHg2NCwgMHhhMiwgMHhjZCwgMHgyYywgMHhiMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE2LCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDMwLAorCTB4MDAsIDB4MDAsIDB4MzAsIDB4MGQsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4YTIsIDB4ODAsIDB4MmYsIDB4YjYsCisJMHgxOCwgMHgwMCwgMHgzNiwgMHgwMCwgMHhjYSwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHgwYSwgMHgwMywgMHhmOSwKKwkweDAwLCAweDAwLCAweGEyLCAweDA3LCAweDAwLCAweDU0LCAweDAxLCAweGIwLCAweDAyLCAweGMwLCAweDZlLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4NjIsIDB4ODEsIDB4MmYsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg4MiwgMHg4MSwgMHgyZiwgMHhiNiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDFmLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGIwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTQsIDB4MDEsIDB4YjAsIDB4MDIsIDB4YzAsIDB4NmUsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgzOSwgMHgwZCwgMHgxMiwgMHgwMSwgMHgwMCwgMHg2MCwgMHgwOCwgMHg0MCwgMHgyMywgMHhiMiwKKwkweDAwLCAweDgyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDA4LCAweDgwLCAweDM2LCAweDMyLAorCTB4MjgsIDB4MDAsIDB4YTEsIDB4MDMsIDB4MTIsIDB4MDEsIDB4MDAsIDB4MmMsIDB4ODIsIDB4Y2QsIDB4MmUsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDI0LCAweDA4LCAweDAwLCAweDIzLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MjAsIDB4MDgsIDB4YzAsIDB4MjMsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwOCwgMHg4MCwgMHgyMywgMHhiMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweDAyLCAweDgwLCAweDAxLCAweDMyLAorCTB4MDAsIDB4YzAsIDB4NDMsIDB4MGQsIDB4MTgsIDB4MDEsIDB4MDAsIDB4MGMsIDB4YTgsIDB4Y2QsIDB4M2UsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHgzOCwgMHgwMiwgMHg4MCwgMHg4MSwgMHhiMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDNjLCAweDAyLCAweDAwLCAweDgyLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MzAsIDB4MDIsIDB4NDAsIDB4ODIsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHhlZCwgMHgwYywgMHgxMiwgMHgwMSwgMHgwMCwgMHgzNCwgMHgwMiwgMHgwMCwgMHg4NiwgMHhiMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4YTMsIDB4MGUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDgsIDB4MDgsIDB4MDAsIDB4MDAsIDB4ZjIsCisJMHgwMCwgMHgwMCwgMHg0NiwgMHgwZCwgMHgwMCwgMHg0MCwgMHgwMiwgMHg4MCwgMHgwMiwgMHg0MCwgMHg2OCwgMHg5MiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MGQsIDB4MDAsIDB4NTAsIDB4MDEsIDB4MDAsIDB4YTgsIDB4MWIsIDB4ODAsIDB4OWEsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxZiwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDU0LCAweDAxLCAweGIwLCAweDAyLCAweGMwLCAweDZlLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4NTgsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjgsIDB4MDksIDB4ODAsIDB4MDIsIDB4ZjIsCisJMHgwMCwgMHgwMCwgMHgyYiwgMHgwZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDU4LCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDI4LCAweDA5LCAweDAwLCAweDAyLCAweGYyLAorCTB4MDAsIDB4MDAsIDB4NGYsIDB4MGQsIDB4OWEsIDB4MDEsIDB4MDAsIDB4ZjgsIDB4NjIsIDB4ODEsIDB4MmYsIDB4YjQsCisJMHgxMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHhhMiwgMHg4ZCwgMHgyZiwgMHgzMSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ2LCAweDAxLCAweGVjLCAweDA2LCAweGMwLCAweDZlLCAweDM0LAorCTB4MmQsIDB4MDAsIDB4YTIsIDB4MDcsIDB4MTIsIDB4MDEsIDB4MDAsIDB4MmMsIDB4ODIsIDB4Y2QsIDB4MmUsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweGE5LCAweDAxLCAweDgwLCAweDAyLCAweDAwLCAweDZlLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4NWEsIDB4MGQsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ZjIsIDB4YzEsIDB4ODUsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHg1NiwgMHgwZCwgMHgxZiwgMHg0MCwgMHgwMiwgMHg4NCwgMHhlNiwgMHgwMSwgMHgwMCwgMHhiNCwKKwkweDAwLCAweDAwLCAweDVhLCAweDBkLCAweDFkLCAweDAxLCAweDAwLCAweGY4LCAweDIyLCAweDgxLCAweDJmLCAweGI0LAorCTB4MDAsIDB4MDAsIDB4NWEsIDB4MGQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NjIsIDB4ODEsIDB4MmYsIDB4OTUsCisJMHgwMCwgMHgwMCwgMHg1OCwgMHgwZCwgMHgxZCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDYyLCAweDgxLCAweDJmLCAweDM1LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDIsIDB4ODAsIDB4MDIsIDB4NDAsIDB4NjgsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxZiwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMCwKKwkweDAwLCAweDAwLCAweDVjLCAweDBkLCAweDA0LCAweDk4LCAweDAxLCAweDY0LCAweDg4LCAweDFiLCAweDg3LCAweGJjLAorCTB4MDAsIDB4MDAsIDB4MGEsIDB4MTEsIDB4MDAsIDB4OTAsIDB4MDEsIDB4MDgsIDB4MDksIDB4ODAsIDB4NmUsIDB4ZjIsCisJMHgwMCwgMHgwMCwgMHgzZiwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhmMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweDA5LCAweGM1LCAweDg1LCAweDMwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDIsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ODIsIDB4YmEsIDB4OTcsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNiwgMHgwMSwgMHgwMCwgMHg4MCwgMHg5MiwgMHhiYSwgMHg5NywgMHhiYywKKwkweDAwLCAweDAwLCAweDczLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDA5LCAweGM1LCAweDg1LCAweGQwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NjgsIDB4MDIsIDB4YzUsIDB4ODUsIDB4YjAsCisJMHgzMCwgMHgwMCwgMHhhNCwgMHgwNywgMHgxMiwgMHgwMSwgMHgwMCwgMHgyYywgMHg4MiwgMHhjZCwgMHgyZSwgMHhiMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4NmMsIDB4MGQsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ZjIsIDB4YzEsIDB4ODUsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHg2OCwgMHgwZCwgMHgxZiwgMHg0MCwgMHgwMiwgMHg4NCwgMHhlNiwgMHgwMSwgMHgwMCwgMHhiNCwKKwkweDAwLCAweDAwLCAweDZjLCAweDBkLCAweDFkLCAweDAxLCAweDAwLCAweGY4LCAweDIyLCAweDgxLCAweDJmLCAweGI0LAorCTB4MDAsIDB4MDAsIDB4NmMsIDB4MGQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NjIsIDB4ODEsIDB4MmYsIDB4OTUsCisJMHgwMCwgMHgwMCwgMHg2YSwgMHgwZCwgMHgxZCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDYyLCAweDgxLCAweDJmLCAweDM1LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDIsIDB4ODAsIDB4MDIsIDB4NDAsIDB4NjgsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxZiwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ0LCAweDAxLCAweGVjLCAweDE2LCAweGMwLCAweDZlLCAweDNhLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzgsIDB4MDksIDB4YzUsIDB4ODUsIDB4MzAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMiwgMHgwMSwgMHgwMCwgMHg4MCwgMHg4MiwgMHhiYSwgMHg5NywgMHhiYywKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA2LCAweDAxLCAweDAwLCAweDgwLCAweDkyLCAweGJhLCAweDk3LCAweGJjLAorCTB4MDAsIDB4MDAsIDB4NzMsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDksIDB4YzUsIDB4ODUsIDB4ZDAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHg2OCwgMHgwMiwgMHhjNSwgMHg4NSwgMHhiMCwKKwkweDAwLCAweDAwLCAweGE0LCAweDA3LCAweDA0LCAweGIwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDZlLCAweGJjLAorCTB4MzYsIDB4MDAsIDB4YTQsIDB4MDcsIDB4MTIsIDB4MDEsIDB4MDAsIDB4MmMsIDB4ODIsIDB4Y2QsIDB4MmUsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDdkLCAweDBkLCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweGYyLCAweGMxLCAweDg1LCAweGI2LAorCTB4MDAsIDB4MDAsIDB4NzksIDB4MGQsIDB4MWYsIDB4NDAsIDB4MDIsIDB4ODQsIDB4ZTYsIDB4MDEsIDB4MDAsIDB4YjQsCisJMHgwMCwgMHgwMCwgMHg3ZCwgMHgwZCwgMHgxZCwgMHgwMSwgMHgwMCwgMHhmOCwgMHgyMiwgMHg4MSwgMHgyZiwgMHhiNCwKKwkweDAwLCAweDAwLCAweDdkLCAweDBkLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDYyLCAweDgxLCAweDJmLCAweDk1LAorCTB4MDAsIDB4MDAsIDB4N2IsIDB4MGQsIDB4MWQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4YjAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg2MiwgMHg4MSwgMHgyZiwgMHgzNSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDAyLCAweDgwLCAweDAyLCAweDQwLCAweDY4LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MWYsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4YjAsCisJMHgwMCwgMHgwMCwgMHg4OCwgMHgwZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDg2LCAweDBkLCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweGYyLCAweGMxLCAweDg1LCAweGI2LAorCTB4MDAsIDB4MDAsIDB4ODIsIDB4MGQsIDB4MWYsIDB4NDAsIDB4MDIsIDB4ODQsIDB4ZTYsIDB4MDEsIDB4MDAsIDB4YjQsCisJMHgwMCwgMHgwMCwgMHg4NiwgMHgwZCwgMHgxZCwgMHgwMSwgMHgwMCwgMHhmOCwgMHgyMiwgMHg4MSwgMHgyZiwgMHhiNCwKKwkweDAwLCAweDAwLCAweDg2LCAweDBkLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDYyLCAweDgxLCAweDJmLCAweDk1LAorCTB4MDAsIDB4MDAsIDB4ODQsIDB4MGQsIDB4MWQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4YjAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg2MiwgMHg4MSwgMHgyZiwgMHgzNSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDAyLCAweDgwLCAweDAyLCAweDQwLCAweDY4LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MWYsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4YjAsCisJMHgzMCwgMHgwMCwgMHg4OCwgMHgwZCwgMHgxMiwgMHgwMSwgMHgwMCwgMHgyYywgMHg4MiwgMHhjZCwgMHgyZSwgMHhiMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDQsIDB4ZDUsIDB4MDEsIDB4ZWMsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3OCwgMHgwOSwgMHhjNSwgMHg4NSwgMHgzMCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAyLCAweDAxLCAweDAwLCAweDgwLCAweDgyLCAweGJhLCAweDk3LCAweGJjLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDYsIDB4MDEsIDB4MDAsIDB4ODAsIDB4OTIsIDB4YmEsIDB4OTcsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg3MywgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwOSwgMHhjNSwgMHg4NSwgMHhkMCwKKwkweDAwLCAweDAwLCAweGE0LCAweDA3LCAweDEyLCAweDAxLCAweDAwLCAweDY4LCAweDAyLCAweGM1LCAweDg1LCAweGIwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHhhMiwgMHgwNywgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHhmMiwgMHg4MSwgMHgyZiwgMHhiNiwKKwkweDAwLCAweDAwLCAweGEyLCAweDA3LCAweDgwLCAweDAwLCAweDAwLCAweDgwLCAweGUyLCAweDgxLCAweDJmLCAweGI2LAorCTB4MDAsIDB4MDAsIDB4OTMsIDB4MGQsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4ODEsIDB4MmYsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxZCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDU4LCAweDAxLCAweDgwLCAweDAyLCAweGMwLCAweDZlLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4YTIsIDB4MDcsIDB4MDgsIDB4NTksIDB4MDEsIDB4ZWMsIDB4MDYsIDB4ZmIsIDB4NmUsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkOCwgMHgwMiwgMHg4MCwgMHgwMSwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDU0LCAweDU0LCAweDAxLCAweGIwLCAweDAyLCAweGMwLCAweDZlLCAweDMyLAorCTB4MDAsIDB4YzAsIDB4OWMsIDB4MGQsIDB4MTgsIDB4MDEsIDB4MDAsIDB4MGMsIDB4YTgsIDB4Y2QsIDB4M2UsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1OCwgMHgwMSwgMHhlYywgMHgwNiwgMHhmYiwgMHg2ZSwgMHgzYSwKKwkweDIwLCAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDA4LCAweDgwLCAweDM2LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4OWQsIDB4MDMsIDB4MTIsIDB4MDEsIDB4MDAsIDB4MmMsIDB4NzIsIDB4ZTAsIDB4MmUsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweGMyLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweGUyLCAweDgxLCAweDJmLCAweGY0LAorCTB4MDAsIDB4MDAsIDB4OWYsIDB4MGQsIDB4MDYsIDB4MDMsIDB4MDEsIDB4ODAsIDB4MTIsIDB4YzAsIDB4NmUsIDB4YmMsCisJMHgxOCwgMHgwMCwgMHg5ZCwgMHgwNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYywgMHgwOCwgMHgwMCwgMHgzNiwgMHg5MiwKKwkweDE5LCAweDAwLCAweDlkLCAweDA1LCAweDAwLCAweDAwLCAweDAwLCAweDFjLCAweDA4LCAweDAwLCAweDM2LCAweDkyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ZjIsIDB4ODEsIDB4MmYsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHhlMiwgMHg4MSwgMHgyZiwgMHhiNiwKKwkweDAwLCAweGMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweGEyLCAweDhkLCAweDJmLCAweDMxLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MDIsIDB4ODAsIDB4MDEsIDB4MzIsCisJMHgwMCwgMHgyMCwgMHgwMCwgMHhjMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyOCwgMHgwOSwgMHgwMCwgMHgzNywgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDMwLCAweDAwLCAweDI4LCAweDA4LCAweDAwLCAweDZlLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4MzAsIDB4MDAsIDB4ZTAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHhjNywgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHhlOCwgMHgwMSwgMHgwMCwgMHhmNCwKKwkweDAwLCAweDAwLCAweGFkLCAweDBkLCAweDA0LCAweDAyLCAweDAxLCAweGVjLCAweDE2LCAweGMwLCAweDZlLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YzksIDB4MDEsIDB4MDAsIDB4MTQsIDB4MTgsIDB4NDAsIDB4ODEsIDB4M2EsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgwMiwgMHg4MCwgMHgyZiwgMHgzNCwKKwkweDAwLCAweGMwLCAweGFkLCAweDBkLCAweDEyLCAweDAxLCAweDAwLCAweDQwLCAweGEyLCAweDhkLCAweDM5LCAweGIyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgxOCwgMHgwMCwgMHgzNiwgMHgwMCwgMHhjYSwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHgwYSwgMHgwMywgMHhmOSwKKwkweDAwLCAweDAwLCAweGFkLCAweDBkLCAweDlmLCAweDAxLCAweDAwLCAweDE0LCAweDE4LCAweDQwLCAweDgxLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4YjIsIDB4MGQsIDB4M2QsIDB4MDEsIDB4MDAsIDB4YjAsIDB4MDIsIDB4MDAsIDB4ODUsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHhiMiwgMHgwZCwgMHgzNCwgMHgwMCwgMHgwMCwgMHhmOCwgMHhkMiwgMHg4MSwgMHgyZiwgMHhiNSwKKwkweDM0LCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDJjLCAweDgyLCAweGNkLCAweDJlLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4YTQsIDB4MDcsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4OTIsIDB4ODAsIDB4MmYsIDB4YjYsCisJMHgyYSwgMHgwMCwgMHhhNCwgMHgwNywgMHgxMiwgMHgwMSwgMHgwMCwgMHgyYywgMHg4MiwgMHhjZCwgMHgyZSwgMHhiMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NzIsIDB4ODAsIDB4MmYsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1NCwgMHg1NCwgMHgwMSwgMHhiMCwgMHgwMiwgMHhjMCwgMHg2ZSwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweDAyLCAweDgwLCAweDAxLCAweDMyLAorCTB4MDAsIDB4YzAsIDB4YmMsIDB4MGQsIDB4MTgsIDB4MDEsIDB4MDAsIDB4MGMsIDB4YTgsIDB4Y2QsIDB4M2UsIDB4YjIsCisJMHgyMCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwOCwgMHg4MCwgMHgzNiwgMHgzMiwKKwkweDAwLCAweDAwLCAweDlkLCAweDAzLCAweDEyLCAweDAxLCAweDAwLCAweDJjLCAweDcyLCAweGUwLCAweDJlLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgyMCwgMHgwMCwgMHg4MCwgMHhkZiwgMHgwMCwgMHgwMCwgMHgyOCwgMHgwOSwgMHgwMCwgMHgzNywgMHgzMiwKKwkweDE4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ4LCAweDAxLCAweDM4LCAweDg4LCAweDFiLCAweDE2LCAweDM4LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZGUsIDB4NDgsIDB4MDEsIDB4MjgsIDB4ODgsIDB4MDQsIDB4NmUsIDB4MzAsCisJMHgwMCwgMHgwMCwgMHhjMSwgMHgwZCwgMHg4MCwgMHg1ZiwgMHgwMSwgMHg4MCwgMHg3MiwgMHhjMCwgMHg2ZSwgMHhiNiwKKwkweDAwLCAweDAwLCAweGMzLCAweDBkLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweGUyLCAweDgwLCAweDJmLCAweDk0LAorCTB4MDAsIDB4MDAsIDB4YzMsIDB4MGQsIDB4ODAsIDB4NWYsIDB4MDEsIDB4ODAsIDB4NjIsIDB4YzAsIDB4NmUsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyOCwgMHhhOSwgMHg4MSwgMHg5MiwgMHgzNCwKKwkweDAwLCAweDAwLCAweGNiLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweGU4LCAweDAxLCAweDAwLCAweGY0LAorCTB4MDAsIDB4MDAsIDB4YzYsIDB4MGQsIDB4MTIsIDB4MDEsIDB4MDAsIDB4NDgsIDB4MDIsIDB4YzAsIDB4ODAsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweGM5LCAweDBkLCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweGQyLCAweDgxLCAweDJmLCAweGI2LAorCTB4MDAsIDB4MDAsIDB4YzksIDB4MGQsIDB4MzQsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4ZDIsIDB4ODEsIDB4MmYsIDB4YjUsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHhiMiwgMHg4MCwgMHgyZiwgMHgzNCwKKwkweDAwLCAweDAwLCAweGE0LCAweDA3LCAweDA0LCAweDMwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDZlLCAweGJjLAorCTB4MmEsIDB4MDAsIDB4YTQsIDB4MDcsIDB4MTIsIDB4MDEsIDB4MDAsIDB4MmMsIDB4ODIsIDB4Y2QsIDB4MmUsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDFmLCAweDAxLCAweDAwLCAweGQ4LCAweDAyLCAweDgwLCAweDAxLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTQsIDB4MDEsIDB4YjAsIDB4MDIsIDB4YzAsIDB4NmUsIDB4MzIsCisJMHgwMCwgMHhjMCwgMHhkMiwgMHgwZCwgMHgxOCwgMHgwMSwgMHgwMCwgMHgwYywgMHhhOCwgMHhjZCwgMHgzZSwgMHhiMiwKKwkweDAwLCAweDgyLCAweDAwLCAweDAwLCAweGQ2LCAweDAxLCAweDAwLCAweDA4LCAweDA4LCAweDgwLCAweDM2LCAweDMyLAorCTB4MWQsIDB4MDAsIDB4YTEsIDB4MDMsIDB4MTIsIDB4MDEsIDB4MDAsIDB4MmMsIDB4ODIsIDB4Y2QsIDB4MmUsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweGMyLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweDAyLCAweDQwLCAweDAwLCAweGYyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MDIsIDB4ODAsIDB4MDEsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1NiwgMHgwMSwgMHg3OCwgMHgwOSwgMHhjMCwgMHg2ZSwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDMwLCAweDAwLCAweDAwLCAweDA3LCAweGMwLCAweDJjLCAweDMyLAorCTB4MDAsIDB4MTAsIDB4MDAsIDB4YTAsIDB4MDAsIDB4MzgsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDAsIDB4MzcsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwMCwgMHhlZSwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDM4LCAweDAwLCAweDBjLCAweDA3LCAweDgwLCAweDk3LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NDgsIDB4MDIsIDB4YzAsIDB4ODAsIDB4YjIsCisJMHgwMCwgMHhmMCwgMHhlMSwgMHgwZCwgMHgxZCwgMHg0MCwgMHgwMiwgMHgwMCwgMHhhOCwgMHgwZCwgMHg2OCwgMHhiMSwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDBiLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGIwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MWUsIDB4NDAsIDB4MDIsIDB4ODQsIDB4MDYsIDB4MDAsIDB4MDAsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHg3MywgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwOSwgMHgwNSwgMHg4MCwgMHhkMCwKKwkweDAwLCAweDAwLCAweGRlLCAweDBkLCAweGI2LCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGIwLAorCTB4MDAsIDB4YzAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NjQsIDB4YTIsIDB4MGQsIDB4ODAsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHhkYSwgMHgwZCwgMHhhNiwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweGUxLCAweDBkLCAweGI1LCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGIwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTUsIDB4MDAsIDB4ODAsIDB4YTAsIDB4MzYsIDB4MGIsIDB4NmEsIDB4MzUsCisJMHgwMCwgMHgwMCwgMHhlNiwgMHgwZCwgMHgxMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwOSwgMHhjMCwgMHgyMSwgMHhiMiwKKwkweDE4LCAweDAwLCAweDM2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDczLCAweDBhLCAweDAzLCAweGY5LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTQsIDB4MDEsIDB4YjAsIDB4MDIsIDB4YzAsIDB4NmUsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHg4MCwgMHg4MCwgMHhiYywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDI4LCAweGU5LCAweDAxLCAweDAwLCAweDM0LAorCTB4MDAsIDB4MDAsIDB4ZWYsIDB4MGYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MDIsIDB4MDAsIDB4MDAsIDB4ZDIsCisJMHgwMCwgMHgwMCwgMHhlYiwgMHgwZCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHg4MCwgMHg5MiwgMHhiYywKKwkweDE4LCAweDAwLCAweDM2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDczLCAweDBhLCAweDAzLCAweGY5LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzgsIDB4MzksIDB4MGIsIDB4MmUsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHhmMywgMHg4MSwgMHg5NywgMHgzNCwKKwkweDAwLCAweDAwLCAweGYxLCAweDBkLCAweDA0LCAweDAwLCAweDAwLCAweDc4LCAweGQ5LCAweDAxLCAweDMwLCAweGI2LAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MzIsIDB4ODAsIDB4OTcsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiOSwgMHgwNSwgMHgzMCwgMHgzMCwKKwkweDE4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDAzLCAweGE0LCAweDAzLCAweDM5LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzQsIDB4MzMsIDB4MGIsIDB4MmYsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHhhNCwgMHgwMywgMHgwNCwgMHgwMCwgMHgwMCwgMHg3OCwgMHhkOSwgMHgwMSwgMHgzMCwgMHhiNiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDMyLCAweDgwLCAweDk3LCAweGJjLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzgsIDB4YjksIDB4MDUsIDB4MzAsIDB4MzAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgzMiwKKwkweDE4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDczLCAweDhhLCAweDAyLCAweDM5LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OWMsIDB4MDIsIDB4ODAsIDB4OTcsIDB4MzIsCisJMHgwYSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOSwgMHgwMCwgMHgzNiwgMHgzMiwKKwkweDAwLCAweDAwLCAweGUyLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDA5LCAweGMwLCAweDI5LCAweGQyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHhmZiwgMHgwZCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHg0MCwgMHgyZiwgMHhiYywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweDA5LCAweDAwLCAweDJjLCAweDMyLAorCTB4ZDksIDB4MDIsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4ODIsIDB4OGQsIDB4OTcsIDB4YmMsCisJMHg0NiwgMHgwMywgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg4MiwgMHg4ZCwgMHg5NywgMHhiYywKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDgwLCAweDAwLCAweDAwLCAweDgwLCAweGEyLCAweDgwLCAweDJmLCAweGI2LAorCTB4MDAsIDB4MDAsIDB4ZjEsIDB4MGQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjQsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHgxOCwgMHgwZSwgMHgwMiwgMHgwMCwgMHgwMCwgMHg4MCwgMHhhMiwgMHg0MiwgMHg4MCwgMHhiYywKKwkweDAwLCAweDAwLCAweDE4LCAweDBlLCAweDgwLCAweDAwLCAweDAwLCAweDgwLCAweGYyLCAweGMxLCAweDg1LCAweGI2LAorCTB4MDAsIDB4MDAsIDB4MTgsIDB4MGUsIDB4MWYsIDB4NDAsIDB4MDIsIDB4MDgsIDB4YjksIDB4YmYsIDB4NjgsIDB4YjAsCisJMHgwMCwgMHgwMCwgMHgwOCwgMHgwZSwgMHg4MCwgMHg0MSwgMHgwMiwgMHg4MCwgMHhlMiwgMHg4MSwgMHg2OCwgMHhiNiwKKwkweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDc5LCAweDYxLCAweDgwLCAweDM5LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDIsIDB4MjEsIDB4MDEsIDB4ZTAsIDB4MTYsIDB4MjAsIDB4NmUsIDB4M2EsCisJMHgxOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgwMiwgMHg4OCwgMHhlNiwgMHgyMSwgMHg5MSwgMHg3OSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBjLCAweDE5LCAweGEwLCAweDkwLCAweDNhLAorCTB4MDAsIDB4MDAsIDB4MTgsIDB4MGUsIDB4MDYsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ZDIsIDB4ZmYsIDB4OTAsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgwYywgMHgwZSwgMHgyYywgMHg0MSwgMHgwMiwgMHg3OCwgMHhmOSwgMHg4MSwgMHg2OCwgMHhiNCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweGI5LCAweDgxLCAweDk3LCAweDM0LAorCTB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDksIDB4MDAsIDB4MzYsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHhlMiwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHg1OSwgMHhjMCwgMHg4NSwgMHhkNywKKwkweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDAyLCAweDAwLCAweDI5LCAweDFhLCAweGZmLCAweDM4LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzAsIDB4MDIsIDB4MDAsIDB4YjksIDB4MWIsIDB4OTAsIDB4M2EsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkMiwgMHg0MSwgMHgwMiwgMHg4OCwgMHgxNiwgMHhhMCwgMHg5NywgMHgzYSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweDAwLCAweDAwLCAweGQ4LCAweDAyLCAweDQwLCAweDAwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4MDEsIDB4ZTAsIDB4MTYsIDB4MjAsIDB4NmUsIDB4M2EsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNywgMHg0MCwgMHg4MCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDI3LCAweDI0LCAweDkwLCAweDNhLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDAsIDB4OGEsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHgwMSwgMHgwMCwgMHg1OCwgMHhmMiwgMHhjMSwgMHgzOCwgMHg3NCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDgsIDB4MDAsIDB4MjMsIDB4MGUsIDB4MWUsIDB4MDEsIDB4MDAsIDB4MzQsIDB4NzksIDB4NjEsIDB4ODAsIDB4YjksCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgzOCwgMHgwMCwgMHgwMCwgMHg1NCwgMHgxZiwgMHg0MCwgMHhmNSwgMHhiYSwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDFmLCAweDQwLCAweDAyLCAweDAwLCAweDA5LCAweDQwLCAweDY4LCAweGIyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4YjksIDB4M2YsIDB4OTAsIDB4MzAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyOCwgMHgwMSwgMHhlMCwgMHgyNiwgMHgyNCwgMHg2ZSwgMHgzYSwKKwkweDA4LCAweDAwLCAweDhhLCAweDExLCAweDFlLCAweDAwLCAweDAwLCAweDAwLCAweDA5LCAweGE0LCAweGZlLCAweGI4LAorCTB4MDAsIDB4MDAsIDB4NzMsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDksIDB4MDUsIDB4OTAsIDB4ZDAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHg2OCwgMHgwMiwgMHgwNSwgMHg5MCwgMHhiMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweDA5LCAweDA1LCAweDkwLCAweDMwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDIsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ODIsIDB4YmEsIDB4OTcsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNiwgMHgwMSwgMHgwMCwgMHg4MCwgMHg5MiwgMHhiYSwgMHg5NywgMHhiYywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQyLCAweDIxLCAweDAxLCAweGUwLCAweDE2LCAweDIwLCAweDZlLCAweDNhLAorCTB4MTgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWUsIDB4NDEsIDB4MDIsIDB4ODQsIDB4ZTYsIDB4NjEsIDB4OTMsIDB4NzksCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MjAsIDB4MDEsIDB4ODAsIDB4ODIsIDB4ZGIsIDB4OTAsIDB4N2MsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgyMCwgMHgwMSwgMHg4MCwgMHgwMiwgMHgwMCwgMHg2ZSwgMHhiYywKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDFmLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGIwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MGMsIDB4MDIsIDB4ODAsIDB4YTIsIDB4ZGIsIDB4OTAsIDB4N2MsCisJMHgwMCwgMHgwMCwgMHgyZCwgMHgwZSwgMHgwNiwgMHgyMSwgMHgwMSwgMHg4MCwgMHg4MiwgMHgxYiwgMHg5MCwgMHhiYywKKwkweDI2LCAweDAwLCAweDJlLCAweDBlLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA5LCAweDAwLCAweDM2LCAweDkyLAorCTB4MjcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDksIDB4MDAsIDB4MzYsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4OCwgMHgxMiwgMHgwMCwgMHgyYywgMHgzYSwKKwkweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA5LCAweDAwLCAweDM2LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4ZTIsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDksIDB4MDAsIDB4OTIsIDB4ZDIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHg5MiwgMHhiYywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDJmLCAweGEwLCAweDAxLCAweDc4LCAweDg5LCAweDFiLCAweDkyLCAweDdhLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODgsIDB4MDEsIDB4NzgsIDB4ODksIDB4OWIsIDB4OTcsIDB4M2MsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYywgMHgwMiwgMHgwMCwgMHhmOSwgMHhiYSwgMHg2ZSwgMHgzNywKKwkweDAwLCAweDAwLCAweDM5LCAweDBlLCAweDAyLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweGE0LCAweDk3LCAweGJjLAorCTB4MDAsIDB4MDAsIDB4MzksIDB4MGUsIDB4MDIsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4YjAsCisJMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3OCwgMHg4OSwgMHg4ZCwgMHg5NywgMHgzNywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweDAxLCAweDAyLCAweDgwLCAweDgyLCAweDliLCAweDk3LCAweDdjLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4ZjgsIDB4ZjIsIDB4ODAsIDB4MmYsIDB4NzQsCisJMHgwMCwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGRhLCAweDViLCAweDAxLCAweGVjLCAweDA2LCAweDQwLCAweGVkLCAweDMyLAorCTB4MmQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDksIDB4MDAsIDB4MzYsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHhlMiwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwOSwgMHg0MCwgMHg4OSwgMHhkMiwKKwkweDAwLCAweDAwLCAweDQyLCAweDBlLCAweDA4LCAweDVkLCAweDAxLCAweGVjLCAweDE2LCAweDQwLCAweDg5LCAweGJjLAorCTB4MDAsIDB4MDAsIDB4NDIsIDB4MGUsIDB4MGIsIDB4NWQsIDB4MDEsIDB4ZWMsIDB4MDYsIDB4MDAsIDB4MDAsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHg0MiwgMHgwZSwgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MiwgMHg4MSwgMHgyZiwgMHhiNiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweGIyLCAweDgwLCAweDJmLCAweDM0LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MzAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5OCwgMHgwMSwgMHg3OCwgMHg4OSwgMHgxYiwgMHg4NywgMHgzYywKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDkyLCAweGExLCAweDk3LCAweGJjLAorCTB4MDAsIDB4MDAsIDB4NDcsIDB4MGUsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4NDAsIDB4ODYsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgwYSwgMHgxMSwgMHgwMCwgMHg5MCwgMHgwMSwgMHgwOCwgMHgwOSwgMHgwMCwgMHg2ZSwgMHhmMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGEwLCAweDAxLCAweGUwLCAweDE2LCAweDIwLCAweDZlLCAweDNhLAorCTB4MDAsIDB4MDAsIDB4M2YsIDB4MTEsIDB4MzMsIDB4MDEsIDB4MDAsIDB4ZjgsIDB4ODIsIDB4ODAsIDB4MmYsIDB4YjQsCisJMHgwMCwgMHgwMCwgMHgzZiwgMHgxMSwgMHg5ZiwgMHhmMCwgMHgwMSwgMHg4MCwgMHg4MiwgMHhkYiwgMHg4NywgMHhiYywKKwkweDAwLCAweDAwLCAweDNmLCAweDExLCAweDlmLCAweGY4LCAweDAxLCAweDgwLCAweDIyLCAweDIxLCAweDZlLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTgsIDB4MDEsIDB4ZTAsIDB4MDYsIDB4MDAsIDB4ZWUsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHgwMSwgMHhlMCwgMHgwNiwgMHhjMCwgMHg4NywgMHgzMiwKKwkweDAwLCAweDAwLCAweDNmLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwOCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHg4MCwgMHg5MSwgMHhiYywKKwkweDExLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA5LCAweDAwLCAweDM2LCAweDMyLAorCTB4MTAsIDB4MDAsIDB4ZTIsIDB4MTAsIDB4MDAsIDB4NTAsIDB4MDEsIDB4MTQsIDB4YTksIDB4OWIsIDB4OTEsIDB4ZDksCisJMHgxNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOSwgMHgwMCwgMHgzNiwgMHgzMiwKKwkweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDIwLCAweDAxLCAweDE0LCAweDg5LCAweDBkLCAweDZlLCAweDM3LAorCTB4MDAsIDB4MDAsIDB4ZTIsIDB4MTAsIDB4MDAsIDB4MzAsIDB4MDEsIDB4MTQsIDB4ODksIDB4NWIsIDB4OTEsIDB4ZDIsCisJMHgxYSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOSwgMHgwMCwgMHgzNiwgMHgzMiwKKwkweDAwLCAweDAwLCAweGUyLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDA5LCAweGMwLCAweDJkLCAweGQyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDYsIDB4MjEsIDB4MDEsIDB4ODAsIDB4ODIsIDB4OWIsIDB4OTEsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOCwgMHgwMSwgMHg3OCwgMHgwOSwgMHgwMCwgMHg2ZSwgMHgzMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA2LCAweDAxLCAweDAyLCAweDgwLCAweDgyLCAweDliLCAweDk3LCAweGJjLAorCTB4MDAsIDB4MDAsIDB4NzEsIDB4MGUsIDB4MDQsIDB4MjEsIDB4MDEsIDB4MzAsIDB4NjksIDB4MjQsIDB4NmUsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHgwMSwgMHgwMCwgMHhhOSwgMHg5YiwgMHg5MSwgMHgzYSwKKwkweDAwLCAweDAwLCAweDY2LCAweDBlLCAweDFmLCAweDQwLCAweDAyLCAweDI0LCAweDA5LCAweDQwLCAweDY4LCAweGIyLAorCTB4MDAsIDB4MDAsIDB4NWMsIDB4MGUsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4ZTIsIDB4NDEsIDB4OTIsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHhiOSwgMHg3ZiwgMHg5MiwgMHgzMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDI5LCAweDI0LCAweDkwLCAweDNjLAorCTB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzgsIDB4OTksIDB4YTQsIDB4ZmUsIDB4MzgsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMiwgMHgwMSwgMHgwMCwgMHg4MCwgMHg4MiwgMHhiYSwgMHg5NywgMHhiYywKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA2LCAweDAxLCAweDAwLCAweDgwLCAweDkyLCAweGJhLCAweDk3LCAweGJjLAorCTB4MDgsIDB4MDAsIDB4NzMsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4OTksIDB4YTQsIDB4ZmUsIDB4ZDgsCisJMHgwOCwgMHgwMCwgMHg1YywgMHgwZSwgMHgxMiwgMHgwMSwgMHgwMCwgMHg2OCwgMHg5MiwgMHhhNCwgMHhmZSwgMHhiOCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4OTAsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg2YiwgMHgwZSwgMHgzOCwgMHg1MCwgMHgwMSwgMHg3OCwgMHgwOSwgMHg4MCwgMHg2ZSwgMHhiMiwKKwkweDAwLCAweDAwLCAweDZiLCAweDBlLCAweDA0LCAweDI4LCAweDAxLCAweDgwLCAweDAyLCAweDAwLCAweDZlLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4OWYsIDB4MjgsIDB4MDEsIDB4NzgsIDB4ZTksIDB4MjUsIDB4NmUsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwOCwgMHgwMSwgMHgwMCwgMHg3OCwgMHg2OSwgMHhhNCwgMHg5NywgMHhiYywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE4LCAweDAxLCAweGUwLCAweDY2LCAweDI0LCAweDZlLCAweDNhLAorCTB4MDAsIDB4MDAsIDB4NmUsIDB4MGUsIDB4MzgsIDB4MjAsIDB4MDEsIDB4ZTAsIDB4MDYsIDB4MDAsIDB4OTMsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHg2ZiwgMHgwZSwgMHgwMCwgMHgyOCwgMHgwMSwgMHhlMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHg5MiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDMwLCAweDAxLCAweGUwLCAweDA2LCAweDAwLCAweDAwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4MDEsIDB4ZTgsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg3MCwKKwkweDAwLCAweDAwLCAweDc3LCAweDBlLCAweDM4LCAweDUxLCAweDAxLCAweDAwLCAweGE5LCAweDliLCAweDkxLCAweGJhLAorCTB4MDAsIDB4MDAsIDB4NzUsIDB4MGUsIDB4MDQsIDB4NDEsIDB4MDIsIDB4MDgsIDB4YjksIDB4ZmYsIDB4NjgsIDB4YjAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg4MCwgMHg0MSwgMHgwMiwgMHg4MCwgMHhlMiwgMHhjMSwgMHg2OCwgMHhiNiwKKwkweDAwLCAweDAwLCAweDcyLCAweDBlLCAweDAwLCAweDQwLCAweDAyLCAweDgwLCAweDAyLCAweDQwLCAweDY4LCAweDkyLAorCTB4MDAsIDB4MDAsIDB4ODQsIDB4MGUsIDB4OWYsIDB4MzEsIDB4MDEsIDB4ZTAsIDB4NjYsIDB4MjQsIDB4NmUsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg4NCwgMHgwZSwgMHgwMCwgMHgzMCwgMHgwMSwgMHhlMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHg5MiwKKwkweDAwLCAweDAwLCAweDgxLCAweDBlLCAweDA0LCAweDI4LCAweDAxLCAweDA0LCAweDA5LCAweDAwLCAweDZlLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDYsIDB4NTAsIDB4MDEsIDB4ODAsIDB4YTIsIDB4NWIsIDB4OTAsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg3ZiwgMHgwZSwgMHg5ZiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgxOSwgMHgyNCwgMHg5MCwgMHhiYywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE4LCAweDAxLCAweGUwLCAweDY2LCAweDI0LCAweDZlLCAweDNhLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjgsIDB4MDEsIDB4ZTAsIDB4MDYsIDB4MjQsIDB4MDAsIDB4M2MsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHgwMSwgMHhlOCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDIwLCAweDAxLCAweGUwLCAweDA2LCAweDAwLCAweDkzLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4NzAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyOCwgMHgwMSwgMHhlMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDhlLCAweDBlLCAweDA0LCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDkwLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4ODQsIDB4MGUsIDB4MDQsIDB4NDEsIDB4MDIsIDB4MDgsIDB4YjksIDB4ZmYsIDB4NjgsIDB4YjAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg4MCwgMHg0MSwgMHgwMiwgMHg4MCwgMHhlMiwgMHhjMSwgMHg2OCwgMHhiNiwKKwkweDAwLCAweDAwLCAweDgxLCAweDBlLCAweDAwLCAweDQwLCAweDAyLCAweDgwLCAweDAyLCAweDQwLCAweDY4LCAweDkyLAorCTB4MDAsIDB4MDAsIDB4ODgsIDB4MGUsIDB4MDIsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MjIsIDB4MjQsIDB4OTAsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg4ZSwgMHgwZSwgMHg4MCwgMHg0MCwgMHgwMiwgMHg4MCwgMHhmMiwgMHhjMSwgMHg2OCwgMHhiNiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDAyLCAweDhjLCAweGI2LCAweGMxLCAweDY4LCAweDM1LAorCTB4MDAsIDB4MDAsIDB4OGUsIDB4MGUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MjIsIDB4ODEsIDB4MmYsIDB4OTQsCisJMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwMiwgMHg3OCwgMHgzOSwgMHg5YSwgMHhmZSwgMHgzOCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAyLCAweDAxLCAweDAwLCAweDgwLCAweDgyLCAweGJhLCAweDk3LCAweGJjLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDYsIDB4MDEsIDB4MDAsIDB4ODAsIDB4OTIsIDB4YmEsIDB4OTcsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg3MywgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwOSwgMHg4MCwgMHg5NywgMHhkMiwKKwkweDA4LCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDQwLCAweDAyLCAweDY4LCAweDEyLCAweDlhLCAweGZlLCAweGI4LAorCTB4MDAsIDB4MDAsIDB4ODEsIDB4MGUsIDB4MDQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MjksIDB4MjQsIDB4OTAsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwOSwgMHgwMCwgMHgwMCwgMHgzMiwKKwkweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDc5LCAweDBiLCAweDE2LCAweDM4LAorCTB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGMsIDB4NzksIDB4MGIsIDB4MTYsIDB4MzgsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MiwgMHhlNCwgMHg5MCwgMHhiYywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweGE5LCAweDAwLCAweDJkLCAweDM3LAorCTB4MDAsIDB4Y2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4ODksIDB4NGQsIDB4OTAsIDB4M2EsCisJMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOCwgMHg4MiwgMHgwZCwgMHg5MSwgMHgzNywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE4LCAweDEyLCAweGE0LCAweDJhLCAweDNhLAorCTB4MDAsIDB4MDAsIDB4OTksIDB4MGUsIDB4ODAsIDB4NDAsIDB4MDIsIDB4ODAsIDB4ZTIsIDB4MDEsIDB4N2MsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHg0MCwgMHgwMiwgMHg3OCwgMHhiOSwgMHgzZiwgMHg3YywgMHhiMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweGU5LCAweGE1LCAweDkwLCAweDNhLAorCTB4MDAsIDB4MDAsIDB4OWIsIDB4MGUsIDB4OWYsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MTksIDB4MDAsIDB4OTEsIDB4YmMsCisJMHhiNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOSwgMHgwMCwgMHgzNiwgMHgzMiwKKwkweDAwLCAweDAwLCAweDk0LCAweDBlLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDQyLCAweGU0LCAweDkwLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzgsIDB4YzksIDB4MjQsIDB4OTAsIDB4M2EsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgyMiwgMHhhNCwgMHg5NywgMHhiYywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE4LCAweDAxLCAweGUwLCAweDY2LCAweDI0LCAweDZlLCAweDNhLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4MDEsIDB4ZTgsIDB4MDYsIDB4MDAsIDB4OTAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHgwMSwgMHhlMCwgMHgwNiwgMHgwMCwgMHg5MywgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDcwLAorCTB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgxOCwgMHgwMCwgMHhhNSwgMHgwZSwgMHgxZiwgMHg0MSwgMHgwMiwgMHg3OCwgMHg4OCwgMHhjZCwgMHg2OCwgMHhiNiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDg4LCAweDEyLCAweDAwLCAweDJjLCAweDNhLAorCTB4MDAsIDB4MDAsIDB4YTgsIDB4MGUsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4NjIsIDB4ODAsIDB4ODcsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHg0MSwgMHgwMiwgMHg4MCwgMHhiMiwgMHhmZiwgMHg2OCwgMHhiMCwKKwkweDAwLCAweDAwLCAweGEzLCAweDBlLCAweDAwLCAweDQwLCAweDAyLCAweDgwLCAweDAyLCAweDQwLCAweDY4LCAweDkyLAorCTB4MDMsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4NDAsIDB4MDIsIDB4MDAsIDB4MzgsIDB4MWEsIDB4ZmYsIDB4YjgsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxZiwgMHg0MCwgMHgwMiwgMHgwNCwgMHhiOCwgMHhmZiwgMHg2OCwgMHhiMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDMwLCAweDAyLCAweDAwLCAweGI4LCAweDFiLCAweDgwLCAweDNhLAorCTB4MmUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDksIDB4MDAsIDB4MzYsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHhlMiwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwOSwgMHgwMCwgMHg4MCwgMHhkMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDcwLAorCTB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHhiNiwgMHgwZSwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHhhMiwgMHg4MCwgMHgyZiwgMHhiNiwKKwkweDAwLCAweDAwLCAweGIzLCAweDBlLCAweDEyLCAweDAxLCAweDAwLCAweDAwLCAweDA5LCAweGMwLCAweDIxLCAweGIyLAorCTB4MTgsIDB4MDAsIDB4MzYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NzMsIDB4MGEsIDB4MDMsIDB4ZjksCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkOCwgMHgwMiwgMHg0MCwgMHg4NCwgMHgzMiwKKwkweDFkLCAweDAwLCAweGI2LCAweDBlLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweGE0LCAweDE3LCAweGI4LAorCTB4MDAsIDB4MDAsIDB4YjAsIDB4MGUsIDB4OWYsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MTgsIDB4MDAsIDB4ODgsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDYwLCAweDAwLCAweDZjLCAweDA4LCAweDAwLCAweDZlLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4Y2EsIDB4NjgsIDB4MDAsIDB4NGMsIDB4MDgsIDB4MDAsIDB4NmUsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHg3MCwgMHgwMCwgMHgxOCwgMHgwOCwgMHgwMCwgMHg2ZSwgMHhiMiwKKwkweDIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA5LCAweDAwLCAweDM2LCAweDMyLAorCTB4MTAsIDB4MDAsIDB4ZTIsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4YTksIDB4NjAsIDB4ODEsIDB4ZDksCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHhhMiwgMHhhMCwgMHg4MSwgMHg3YywKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDBkLCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGIwLAorCTB4MDAsIDB4MDAsIDB4YzEsIDB4MGUsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ZTIsIDB4ODAsIDB4MmYsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg4MiwgMHg4MSwgMHgyZiwgMHhiNiwKKwkweDAwLCAweDAwLCAweGMxLCAweDBlLCAweDFiLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGIwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NjIsIDB4ZTAsIDB4ODMsIDB4N2MsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg5ZiwgMHgwMCwgMHgwMCwgMHgxNCwgMHgxOCwgMHg0MCwgMHg4MSwgMHhiYywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGNhLCAweDAxLCAweDAwLCAweGY4LCAweDAyLCAweDgwLCAweDJmLCAweDM1LAorCTB4MDAsIDB4YTAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4MDEsIDB4MDAsIDB4NDAsIDB4YTIsIDB4OGQsIDB4MzksIDB4NzIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDEsIDB4ZTQsIDB4MDYsIDB4YzAsIDB4MmQsIDB4MzIsCisJMHhlZSwgMHhmZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMSwgMHhlMCwgMHg4NiwgMHg4ZCwgMHgyZiwgMHgzMSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFjLCAweGIzLCAweGU0LCAweDM5LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4Y2QsIDB4MGUsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NzgsIDB4ZDksIDB4MDEsIDB4MzAsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgzMiwgMHg4MCwgMHg5NywgMHhiYywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweGI5LCAweDA1LCAweDMwLCAweDMwLAorCTB4MTgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4ZTMsIDB4YTUsIDB4MDMsIDB4MzksCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzNCwgMHgzMywgMHgwYiwgMHgyZiwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDc4LCAweGQ5LCAweDAxLCAweDMwLCAweDc2LAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MzIsIDB4ODAsIDB4OTcsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3OCwgMHhiOSwgMHgwNSwgMHgzMCwgMHgzMCwKKwkweDE4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweGY4LCAweGUzLCAweGE1LCAweDAzLCAweDc5LAorCTB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgyZCwgMHhiYywKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDgwLCAweDJkLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4Y2MsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHhkOCwgMHgwZSwgMHgyMCwgMHgwMCwgMHgwMSwgMHgyYywgMHgwOSwgMHhjMCwgMHg2ZSwgMHhiMiwKKwkweDAwLCAweDAwLCAweGQ5LCAweDBlLCAweDAwLCAweDE2LCAweDg2LCAweGNjLCAweDA2LCAweGMwLCAweDkyLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4ODYsIDB4Y2MsIDB4MDYsIDB4YzAsIDB4OTIsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHgwMSwgMHgwMCwgMHg0MCwgMHg2MiwgMHg4ZSwgMHg5MiwgMHg1MiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHhkZiwgMHgwZSwgMHgwNCwgMHgwMCwgMHgwMCwgMHg3OCwgMHhkOSwgMHgwMSwgMHgzMCwgMHhiNiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDQyLCAweDgwLCAweDk3LCAweGJjLAorCTB4ZGYsIDB4MGUsIDB4MzYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YzAsIDB4MDIsIDB4MDAsIDB4MzYsIDB4OTIsCisJMHg2MCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg4MiwgMHg4ZCwgMHgyZiwgMHhiMSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDAzLCAweDAwLCAweDM4LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDIsIDB4MDAsIDB4MzAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgyMiwgMHgwZiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyNCwgMHhkOCwgMHgwMSwgMHgzMCwgMHhiNiwKKwkweGU0LCAweDBlLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDg4LCAweDgyLCAweDRkLCAweDgyLCAweDNhLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHhkZiwgMHgwZSwgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjMCwgMHgwMiwgMHgwMCwgMHgzNiwgMHg5MiwKKwkweDAwLCAweDAwLCAweDBmLCAweDBmLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4ZWMsIDB4MGUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4NDgsIDB4MDUsIDB4MzAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweGY3LCAweDBlLCAweDMyLCAweDBmLCAweDAxLCAweGJjLCAweDA4LCAweGMwLCAweDZlLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDEsIDB4ZGMsIDB4MDIsIDB4NDAsIDB4NmUsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHhmMCwgMHgwZSwgMHgxZiwgMHgwMSwgMHgwMCwgMHhkOCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMiwKKwkweDAwLCAweDAwLCAweGY2LCAweDBlLCAweDFkLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGIwLAorCTB4ZTAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDAsIDB4MzYsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3OCwgMHhhOSwgMHgwMCwgMHgyZCwgMHgzNywKKwkweDIwLCAweGNkLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDg3LCAweDhkLCAweDk3LCAweDNhLAorCTB4MGEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4ODcsIDB4YTAsIDB4ZWEsIDB4MzksCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMCwgMHgwMCwgMHgwNywgMHhjMCwgMHhlYSwgMHgzMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDQ4LCAweDAyLCAweGMwLCAweDM4LCAweGIyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDEsIDB4ZTAsIDB4MjYsIDB4MDEsIDB4NmUsIDB4MzUsCisJMHgwMCwgMHgwMCwgMHhmYiwgMHgwZSwgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHhjMCwgMHg4YiwgMHhiNiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE5LCAweDBlLCAweDgyLCAweDMyLAorCTB4MDAsIDB4ZTAsIDB4MDMsIDB4MGYsIDB4MTIsIDB4MDEsIDB4MDAsIDB4NDgsIDB4YTIsIDB4MGQsIDB4OTAsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweDAyLCAweDQwLCAweDAwLCAweDMyLAorCTB4YjQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDAsIDB4MzYsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3OCwgMHhhOSwgMHgwMCwgMHgyZCwgMHgzNywKKwkweDAwLCAweGNjLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDg3LCAweDhkLCAweDk3LCAweDNhLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzgsIDB4OTksIDB4MDAsIDB4ODIsIDB4MzcsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMiwgMHgxMCwgMHgwMCwgMHgwMCwgMHg4NywgMHhiZiwgMHg5NywgMHhiYSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAwLCAweDAwLCAweDA3LCAweDQwLCAweGZlLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NDgsIDB4ZjIsIDB4YzEsIDB4MzgsIDB4YjQsCisJMHgxOCwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHgwYSwgMHgwMywgMHhmOSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDg5LCAweDYwLCAweDM4LCAweDMyLAorCTB4MWQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzgsIDB4MDksIDB4YTQsIDB4MTcsIDB4MzgsCisJMHgwMCwgMHgwMCwgMHgwOSwgMHgwZiwgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHhjMCwgMHg4YiwgMHhiNiwKKwkweDAwLCAweDAwLCAweDBhLCAweDBmLCAweDA0LCAweDAwLCAweDAwLCAweDgwLCAweDMyLCAweDgwLCAweDk3LCAweGJjLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHg4MCwgMHg5NywgMHhiYywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweGYzLCAweDQxLCAweDkwLCAweDM0LAorCTB4MDAsIDB4MDAsIDB4MGYsIDB4MGYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NzgsIDB4ZDksIDB4MDEsIDB4MzAsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgzMiwgMHg4MCwgMHg5NywgMHhiYywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGI5LCAweDA1LCAweDMwLCAweDMwLAorCTB4MTgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MDMsIDB4YTQsIDB4MDMsIDB4MzksCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOSwgMHhjZSwgMHgyYywgMHgzMiwKKwkweDAwLCAweGUwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDQwLCAweGEyLCAweDBkLCAweDkwLCAweGIyLAorCTB4MTgsIDB4MDAsIDB4MzYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NzMsIDB4MGEsIDB4MDMsIDB4ZjksCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwMSwgMHhkYywgMHgwMiwgMHg0MCwgMHg2ZSwgMHgzMiwKKwkweDFkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweDA5LCAweGE0LCAweDE3LCAweDM4LAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MzIsIDB4ODAsIDB4OTcsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg4MCwgMHgxMCwgMHgwMSwgMHg4MCwgMHgyMiwgMHgwMSwgMHg2ZSwgMHhiNiwKKwkweDAwLCAweDAwLCAweDE4LCAweDBmLCAweDFmLCAweDAxLCAweDAwLCAweGQ4LCAweDAyLCAweDAwLCAweDAwLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4MjAsIDB4MGYsIDB4MWQsIDB4MTAsIDB4MDEsIDB4ZjgsIDB4MDIsIDB4MDAsIDB4NmUsIDB4YjIsCisJMHhlMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwMCwgMHgzNiwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweGE5LCAweDAwLCAweDJkLCAweDM3LAorCTB4MjAsIDB4Y2QsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4ODcsIDB4OGQsIDB4OTcsIDB4M2EsCisJMHgwYSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgzNywgMHg4YiwgMHhlYSwgMHgzOSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAwLCAweDAwLCAweDA3LCAweGMwLCAweGVhLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjIsIDB4YzEsIDB4MzgsIDB4YjQsCisJMHgxOCwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHgwYSwgMHgwMywgMHhmOSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDAxLCAweGY4LCAweDAyLCAweDAwLCAweDZlLCAweDMyLAorCTB4ZWUsIDB4ZmYsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ODIsIDB4OGQsIDB4MmYsIDB4YjAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg3MCwKKwkweGVlLCAweGZmLCAweDhhLCAweDExLCAweDA0LCAweDExLCAweDAxLCAweDgwLCAweDgyLCAweDBkLCAweDZlLCAweGIwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDEsIDB4ZjgsIDB4MDIsIDB4MDAsIDB4NmUsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOSwgMHgwMSwgMHhkYywgMHgwMiwgMHg0MCwgMHg2ZSwgMHg3MiwKKwkweDAwLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDksIDB4MDAsIDB4MDAsIDB4MzIsCisJMHgwZSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHg4OSwgMHg0ZCwgMHgwZCwgMHgzNiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA3LCAweDgwLCAweDBiLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDAsIDB4OTAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwMCwgMHgzNiwgMHgzMiwKKwkweDAwLCAweDAwLCAweDJiLCAweDBmLCAweDEyLCAweDAwLCAweDAwLCAweDRjLCAweGYyLCAweGMxLCAweDM4LCAweGI0LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MzAsCisJMHgwMCwgMHgwMCwgMHgyYywgMHgwZiwgMHgxMiwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHhjMCwgMHgyMSwgMHhiMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGU5LCAweDAyLCAweDkwLCAweDNhLAorCTB4MDAsIDB4MDAsIDB4MjgsIDB4MGYsIDB4MDQsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MTksIDB4NDAsIDB4OTAsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg1MCwKKwkweDAwLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4M2IsIDB4MGYsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4YTIsIDB4ODAsIDB4MmYsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHgzNSwgMHgwZiwgMHgxMiwgMHgwMSwgMHgwMCwgMHhlOCwgMHgwMiwgMHhjMCwgMHgyMSwgMHhiMiwKKwkweDE4LCAweDAwLCAweDM2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDczLCAweDBhLCAweDAzLCAweGY5LAorCTB4MDAsIDB4MDAsIDB4M2EsIDB4MGYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4ODAsIDB4MmQsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgyMiwgMHg4MCwgMHgyZCwgMHhiYywKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDlmLCAweDAwLCAweDAwLCAweDgwLCAweDE4LCAweDAwLCAweDg4LCAweGJjLAorCTB4MDAsIDB4MDAsIDB4MzUsIDB4MGYsIDB4MTIsIDB4MDEsIDB4MDAsIDB4ZTgsIDB4MDIsIDB4YzAsIDB4MjEsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHgzNCwgMHgwZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGNhLCAweDAwLCAweDAwLCAweGQ4LCAweDAyLCAweDQwLCAweDg0LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4NDAsIDB4MmQsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHg4MCwgMHgyZCwgMHhiYywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDAwLCAweDZjLCAweDg4LCAweDFjLCAweDgzLCAweDNhLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDgsIDB4MDAsIDB4NGMsIDB4MDgsIDB4MDAsIDB4NzIsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwOCwgMHg1MCwgMHgwMCwgMHgxOCwgMHhjOCwgMHgyMCwgMHg3MiwgMHhiYywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDQwLCAweDgxLCAweDdjLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MTgsIDB4NDAsIDB4ODEsIDB4M2MsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMiwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4OCwgMHgwMSwgMHg4MiwgMHhiYSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweDAyLCAweDAwLCAweDAwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDAsIDB4MDYsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgzNiwgMHhiYywKKwkweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDc3LCAweDRhLCAweDA5LCAweDM5LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDAsIDB4ODIsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjYSwgMHgxOSwgMHgwMCwgMHgwMCwgMHgwNywgMHg0MCwgMHg4MiwgMHgzMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDQwLCAweGYyLCAweGMxLCAweDM4LCAweGI0LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4ZDgsIDB4MDIsIDB4NDAsIDB4ODQsIDB4NzIsCisJMHgwMCwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRkLCAweDAwLCAweDAwLCAweDAwLCAweDY3LCAweGUwLCAweDgzLCAweDNlLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDAsIDB4ODAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwNywgMHhjMCwgMHg4NiwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAwLCAweDAwLCAweDA3LCAweGMwLCAweDg0LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4YTMsIDB4MGYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjgsIDB4ZDgsIDB4YTAsIDB4ODIsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwOSwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweGQ4LCAweGEwLCAweDgxLCAweDNjLAorCTB4MDAsIDB4MDAsIDB4NjcsIDB4MGYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4M2MsIDB4ZDgsIDB4ZTAsIDB4ODMsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHg4MCwgMHg4MSwgMHhiYywKKwkweDAwLCAweDAwLCAweDU4LCAweDBmLCAweDA0LCAweDAwLCAweDAwLCAweDgwLCAweDcyLCAweDgwLCAweDJkLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NTAsIDB4MDIsIDB4YzAsIDB4MzgsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHg2MCwgMHgwZiwgMHg1MSwgMHgwMCwgMHgwMCwgMHhkOCwgMHgxMiwgMHg4MCwgMHgyZCwgMHg5YSwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDUwLCAweGYyLCAweGMxLCAweDM4LCAweGI0LAorCTB4MTgsIDB4MDAsIDB4MzYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NzMsIDB4MGEsIDB4MDMsIDB4ZjksCisJMHgwMCwgMHgwMCwgMHg1ZSwgMHgwZiwgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg3MiwgMHg4MCwgMHgyZCwgMHhiYywKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweGEyLCAweDgwLCAweDJmLCAweGI2LAorCTB4MDAsIDB4MDAsIDB4NTksIDB4MGYsIDB4NjcsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4YTIsIDB4ODAsIDB4MmYsIDB4YjUsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHhlOCwgMHgwMiwgMHhjMCwgMHgyMSwgMHhiMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDcyLCAweDgwLCAweDJkLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTEsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHg2NSwgMHgwZiwgMHgyYSwgMHgwMSwgMHgwMCwgMHgwMCwgMHhkOCwgMHgyMCwgMHg4MCwgMHhiYSwKKwkweDAwLCAweDAwLCAweDY0LCAweDBmLCAweDEyLCAweDAxLCAweDAwLCAweDAwLCAweDA5LCAweGMwLCAweDIxLCAweGIyLAorCTB4MTgsIDB4MDAsIDB4MzYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NzMsIDB4MGEsIDB4MDMsIDB4ZjksCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkOCwgMHgwMiwgMHg0MCwgMHg4NCwgMHgzMiwKKwkweDFkLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweGE0LCAweDE3LCAweGI4LAorCTB4MDAsIDB4MDAsIDB4YjcsIDB4MGUsIDB4MDAsIDB4NjAsIDB4MDAsIDB4NmMsIDB4MDgsIDB4MDAsIDB4NmUsIDB4ZjIsCisJMHgwMCwgMHgwMCwgMHg0ZCwgMHgwZiwgMHg0ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2NywgMHhlMCwgMHg4MywgMHg5ZSwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDUwLCAweGYyLCAweGMxLCAweDM4LCAweGI0LAorCTB4MTgsIDB4MDAsIDB4MzYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NzMsIDB4MGEsIDB4MDMsIDB4ZjksCisJMHgxZCwgMHgwMCwgMHg2ZSwgMHgwZiwgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHhhNCwgMHgxNywgMHhiOCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweGEyLCAweDgwLCAweDJmLCAweGI2LAorCTB4MDAsIDB4MDAsIDB4NjgsIDB4MGYsIDB4NjcsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4YTIsIDB4ODAsIDB4MmYsIDB4YjUsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOSwgMHhjMCwgMHgyMSwgMHhiMiwKKwkweDFkLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweGE0LCAweDE3LCAweGI4LAorCTB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDIsIDB4NzgsIDB4MzksIDB4OWEsIDB4ZmUsIDB4MzgsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMiwgMHgwMSwgMHgwMCwgMHg4MCwgMHg4MiwgMHhiYSwgMHg5NywgMHhiYywKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA2LCAweDAxLCAweDAwLCAweDgwLCAweDkyLCAweGJhLCAweDk3LCAweGJjLAorCTB4MDAsIDB4MDAsIDB4NzMsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDksIDB4ODAsIDB4OTcsIDB4ZDIsCisJMHgwOCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHg0MCwgMHgwMiwgMHg2OCwgMHgxMiwgMHg5YSwgMHhmZSwgMHhiOCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDBiLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGIwLAorCTB4MDAsIDB4MDAsIDB4ZDEsIDB4MGYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzAsIDB4MDMsIDB4MDAsIDB4MzgsIDB4ZjIsCisJMHgwMCwgMHgwMCwgMHg4NiwgMHgwZiwgMHgxZiwgMHgwMCwgMHgwMCwgMHg2YywgMHhkOCwgMHhlMCwgMHg4NiwgMHhiYSwKKwkweDAwLCAweDAwLCAweGEzLCAweDBlLCAweDUxLCAweDAwLCAweDAwLCAweGQ4LCAweDAyLCAweDAwLCAweDAwLCAweGYyLAorCTB4MDAsIDB4MDAsIDB4NzksIDB4MGYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4M2MsIDB4MDgsIDB4NDAsIDB4ODAsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHg4NiwgMHgwZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDdlLCAweDBmLCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweGYyLCAweDgxLCAweDJmLCAweGI2LAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4ODIsIDB4ODEsIDB4MmYsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHg3ZSwgMHgwZiwgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHhlMiwgMHg4MCwgMHgyZiwgMHhiNiwKKwkweDAwLCAweDAwLCAweDdlLCAweDBmLCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweDMyLCAweDgwLCAweDg3LCAweGI2LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4ZTIsIDB4ODAsIDB4MmYsIDB4MzQsCisJMHgwMCwgMHgwMCwgMHg0YywgMHgwZiwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHg4MCwgMHg4MSwgMHhiYywKKwkweDAwLCAweDAwLCAweDg0LCAweDBmLCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweGEyLCAweDgwLCAweDJmLCAweGI2LAorCTB4MDAsIDB4MDAsIDB4ODMsIDB4MGYsIDB4MTIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDksIDB4YzAsIDB4MjEsIDB4YjIsCisJMHgxOCwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHgwYSwgMHgwMywgMHhmOSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweDAyLCAweDQwLCAweDg0LCAweDMyLAorCTB4MWQsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4YTQsIDB4MTcsIDB4YjgsCisJMHgwMCwgMHgwMCwgMHhiNywgMHgwZSwgMHgwMCwgMHg2MCwgMHgwMCwgMHg2YywgMHgwOCwgMHgwMCwgMHg2ZSwgMHhmMiwKKwkweDAwLCAweDAwLCAweDRkLCAweDBmLCAweDRkLCAweDAwLCAweDAwLCAweDAwLCAweDY3LCAweGUwLCAweDgzLCAweDllLAorCTB4MDAsIDB4MDAsIDB4ODksIDB4MGYsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ZTIsIDB4ODAsIDB4MmYsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHhhNywgMHgwZiwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHhhMiwgMHg4MCwgMHgyZiwgMHhiNiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTQsIDB4YTgsIDB4NjAsIDB4OGEsIDB4M2MsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgyMSwgMHgwMSwgMHg4MCwgMHg4MiwgMHg1YiwgMHg4YSwgMHhiYywKKwkweDAwLCAweDAwLCAweDhkLCAweDBmLCAweDJmLCAweGE4LCAweDAxLCAweDIwLCAweDk5LCAweDIyLCAweDZlLCAweGJhLAorCTB4MDAsIDB4MDAsIDB4MmYsIDB4MGUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4ZjAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNiwgMHgwMSwgMHgwMiwgMHg4MCwgMHg4MiwgMHgxYiwgMHg5MiwgMHhiYywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE4LCAweDAxLCAweGUwLCAweDA2LCAweDAwLCAweDkyLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4MDEsIDB4ZTgsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHg5MiwgMHgwZiwgMHgyMywgMHgyMSwgMHgwMSwgMHhlMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHhiMiwKKwkweDNjLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDJjLCAweDgyLCAweGNkLCAweDJlLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MzAsIDB4MDAsIDB4ZTAsIDB4MDYsIDB4ODAsIDB4ODIsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHg5YywgMHgwZiwgMHgwNCwgMHgyMSwgMHgwMCwgMHhlMCwgMHgwNiwgMHg4MCwgMHg4MSwgMHhiMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDgwLCAweDAwLCAweDAwLCAweDgwLCAweGUyLCAweDgwLCAweDJmLCAweGI2LAorCTB4MDAsIDB4MDAsIDB4OWEsIDB4MGYsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4YTIsIDB4ODAsIDB4MmYsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHg5OSwgMHgwZiwgMHgxMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwOSwgMHhjMCwgMHgyMSwgMHhiMiwKKwkweDE4LCAweDAwLCAweDM2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDczLCAweDBhLCAweDAzLCAweGY5LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MDIsIDB4NDAsIDB4ODQsIDB4MzIsCisJMHgxZCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHhhNCwgMHgxNywgMHhiOCwKKwkweDAwLCAweDAwLCAweGI3LCAweDBlLCAweDAwLCAweDYwLCAweDAwLCAweDZjLCAweDA4LCAweDAwLCAweDZlLCAweGYyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4MDAsIDB4ZTAsIDB4MDYsIDB4ODAsIDB4ODEsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzYywgMHgwMCwgMHhlOCwgMHgwNiwgMHg0MCwgMHg4MSwgMHgzMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDEwLCAweDAwLCAweGUwLCAweDA2LCAweGMwLCAweDg2LCAweGIyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmEsIDB4MTksIDB4MDAsIDB4ZTAsIDB4MDYsIDB4YzAsIDB4ODQsIDB4NzIsCisJMHgwMCwgMHgwMCwgMHhhMSwgMHgwZiwgMHgxMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwOSwgMHhjMCwgMHgyMSwgMHhiMiwKKwkweDE4LCAweDAwLCAweDM2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDczLCAweDBhLCAweDAzLCAweGY5LAorCTB4MWQsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4YTQsIDB4MTcsIDB4YjgsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHhmOCwgMHhhMiwgMHg4MCwgMHgyZiwgMHg3NSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDNjLCAweGQ4LCAweGUwLCAweDgzLCAweDNjLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NTAsIDB4ZjIsIDB4YzEsIDB4MzgsIDB4YjQsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHhhMiwgMHg4MCwgMHgyZiwgMHhiNiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweGEyLCAweDgwLCAweDJmLCAweDM0LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODgsIDB4MTIsIDB4MDAsIDB4MmMsIDB4M2EsCisJMHgwMCwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA5LCAweDAwLCAweDAwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzgsIDB4MDksIDB4MDAsIDB4MDAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgzMiwKKwkweGVlLCAweDA1LCAweGFmLCAweDBmLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDgyLCAweDRkLCAweGY1LCAweGJjLAorCTB4MDAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDksIDB4MDAsIDB4MzYsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHhiMSwgMHgwZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwOSwgMHhjMCwgMHgwOSwgMHg5MiwKKwkweDAwLCAweDI4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDA5LCAweDAwLCAweDM2LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDksIDB4ODAsIDB4MDksIDB4MzIsCisJMHgxZSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2MCwgMHhjMCwgMHg4NywgMHhjZCwgMHgwMCwgMHgzNywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDYwLCAweGMwLCAweDA3LCAweDgwLCAweDk3LCAweDMyLAorCTB4MDAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzgsIDB4ODksIDB4OGQsIDB4MmEsIDB4M2EsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHg1YywgMHg1MiwgMHg4MSwgMHg5NywgMHhiNCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDI5LCAweDI0LCAweDkwLCAweDNhLAorCTB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzgsIDB4ODksIDB4MGQsIDB4OTAsIDB4MzYsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgxOSwgMHg0MCwgMHg5MCwgMHgzYywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE4LCAweDUyLCAweDgyLCAweDJhLCAweDNhLAorCTB4MDAsIDB4MDgsIDB4YjEsIDB4MGYsIDB4MDIsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ODIsIDB4OGQsIDB4MmEsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHhjMiwgMHgwZiwgMHgwNiwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHg0MCwgMHg5MCwgMHhiYywKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweGE4LCAweDAyLCAweDAwLCAweDIwLCAweGIyLAorCTB4MWUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YzAsIDB4ODcsIDB4Y2QsIDB4MDAsIDB4MzcsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwMCwgMHhjMCwgMHgwNywgMHg4MCwgMHg5NywgMHgzMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDVjLCAweDUyLCAweDgxLCAweDJhLCAweGI0LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjksIDB4MjQsIDB4OTAsIDB4M2EsCisJMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3OCwgMHg4OSwgMHgwZCwgMHg5MCwgMHgzNiwKKwkweDAwLCAweDAwLCAweGJiLCAweDBmLCAweDA0LCAweDAxLCAweDAwLCAweDA0LCAweDE5LCAweDQwLCAweDkwLCAweGJjLAorCTB4MDUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzgsIDB4ODksIDB4MGQsIDB4OTAsIDB4MzYsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMCwgMHgwZSwgMHg4MCwgMHg5NywgMHgzMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDY4LCAweDAyLCAweDgwLCAweDk3LCAweGIyLAorCTB4MGEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjQsIDB4ODksIDB4MGQsIDB4OTAsIDB4MzYsCisJMHhjMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyNCwgMHg4OSwgMHg0ZCwgMHg5MiwgMHgzYywKKwkweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGM4LCAweDgyLCAweDRkLCAweDkyLCAweDM2LAorCTB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmMsIDB4ODksIDB4NGQsIDB4OTIsIDB4MzAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg4MCwgMHgxOCwgMHg5YiwgMHg4MSwgMHhiMiwgMHhlNCwgMHg3OCwgMHhiNiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDliLCAweDhkLCAweGI3LCAweGU0LCAweDc4LCAweDM0LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTQsIDB4MGUsIDB4ODAsIDB4OTcsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyOSwgMHgyNCwgMHg5MCwgMHgzYSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweDU5LCAweDAwLCAweDkwLCAweDM2LAorCTB4MDAsIDB4MDAsIDB4YzQsIDB4MGYsIDB4OTUsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MjIsIDB4MjQsIDB4OTAsIDB4YmEsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg1MCwKKwkweDAwLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4ZWMsIDB4MGYsIDB4MDQsIDB4MDEsIDB4MDAsIDB4NzgsIDB4ZDksIDB4MDEsIDB4MzAsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyOCwgMHgwOSwgMHhjMCwgMHgyOSwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDljLCAweGIyLCAweDQ1LCAweDI4LCAweDMwLAorCTB4MDAsIDB4MDAsIDB4ZGQsIDB4MGYsIDB4ODYsIDB4MDEsIDB4MDAsIDB4MDgsIDB4MDksIDB4ODAsIDB4MmYsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyYywgMHgwOSwgMHg0MCwgMHg4MSwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDAyLCAweDAwLCAweDAwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjQsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MzIsCisJMHgxOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHg4YSwgMHgwMiwgMHgzOSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDljLCAweDAyLCAweDgwLCAweDkyLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4ZGMsIDB4MGYsIDB4MDQsIDB4MDcsIDB4MDEsIDB4ODAsIDB4MDIsIDB4YzAsIDB4NmUsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHhlNywgMHgwZiwgMHhjMywgMHgwNywgMHgwMSwgMHhlYywgMHhiNiwgMHhlNCwgMHg2ZSwgMHg5YSwKKwkweDAwLCAweDAwLCAweGU3LCAweDBmLCAweDAwLCAweDA2LCAweDAxLCAweGVjLCAweGI2LCAweGU0LCAweDZlLCAweDlhLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4NTIsIDB4ODAsIDB4OTAsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyYywgMHgwOSwgMHgwNSwgMHg4MCwgMHgzMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDAyLCAweDAwLCAweDAwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjQsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MzIsCisJMHgxOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHg4YSwgMHgwMiwgMHgzOSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDljLCAweDAyLCAweDgwLCAweDkyLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4ZjIsIDB4YzEsIDB4OTIsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMiwgMHgwMSwgMHgwMCwgMHg4MCwgMHg4MiwgMHhmYSwgMHg5MiwgMHhiYywKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA2LCAweDAxLCAweDAwLCAweDgwLCAweDkyLCAweGZhLCAweDkyLCAweGJjLAorCTB4NDQsIDB4MDAsIDB4MmMsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4YTIsIDB4OGQsIDB4MmYsIDB4ZDIsCisJMHgyMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOSwgMHgwMCwgMHgzNiwgMHgzMiwKKwkweDAwLCAweDAwLCAweGUyLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDA5LCAweGMwLCAweDkyLCAweGQyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzAsIDB4MDMsIDB4MDAsIDB4MzgsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHhlYywgMHgwZiwgMHgwNCwgMHgwMSwgMHgwMCwgMHg3OCwgMHhkOSwgMHgwMSwgMHgzMCwgMHhiNiwKKwkweDAwLCAweDAwLCAweGQ0LCAweDBmLCAweDAwLCAweDAwLCAweDAwLCAweDljLCAweGIyLCAweDQ1LCAweDI4LCAweDkwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MjIsIDB4ODAsIDB4OTcsIDB4N2MsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4YzAsIDB4ZTgsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4OCwgMHgwMiwgMHhjMCwgMHhlOCwgMHgzMiwKKwkweDAyLCAweDAwLCAweGYxLCAweDBmLCAweGIwLCAweDAwLCAweDAwLCAweGEwLCAweGMyLCAweDBhLCAweDAwLCAweGI5LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGMsIDB4YWIsIDB4ZTQsIDB4YjAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHhmNiwgMHgwZiwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHhjMiwgMHg0YSwgMHhkMCwgMHhiNiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGEwLCAweDAwLCAweDAwLCAweDI4LCAweDA5LCAweDAwLCAweDAwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4NTAsCisJMHgwMCwgMHgwMCwgMHhmOSwgMHgwZiwgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHhmOCwgMHhiYywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGEwLCAweDAwLCAweDAwLCAweDgwLCAweDAxLCAweDAwLCAweGY4LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MjgsIDB4MDksIDB4MDAsIDB4MDAsIDB4NTIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHhjZCwgMHg0YSwgMHhkMCwgMHgzNCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweGMyLCAweDRhLCAweGQwLCAweGI2LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDQsIDB4MDEsIDB4MDAsIDB4MjgsIDB4MDksIDB4MzQsIDB4YjAsIDB4YmEsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHhjMiwgMHg0YSwgMHhkMCwgMHhiNiwKKwkweDAwLCAweDAwLCAweGZkLCAweDBmLCAweGIwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGIwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4Y2QsIDB4NGEsIDB4ZDAsIDB4MzUsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgyOCwgMHgwOSwgMHgwMCwgMHgwMCwgMHg1MiwKKwkweDAwLCAweDAwLCAweDAwLCAweDEwLCAweGIwLCAweDAwLCAweDAwLCAweGE4LCAweDIyLCAweDAwLCAweDJiLCAweGI3LAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDAsIDB4ODQsIDB4YzAsIDB4MzcsIDB4YWMsIDB4YjAsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMCwgMHgwMCwgMHgwMCwgMHgwYywgMHgwYiwgMHgwMCwgMHgwMCwgMHgzMiwKKwkweGZmLCAweGZmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweGE5LCAweDRkLCAweGIwLCAweDMwLAorCTB4MDAsIDB4MDAsIDB4MDgsIDB4MTAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4NDAsIDB4YjAsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgxMiwgMHg0MCwgMHhiMCwgMHhiNiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweDY5LCAweDgxLCAweDk3LCAweDM1LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODQsIDB4MDgsIDB4MGIsIDB4MDAsIDB4N2MsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlNywgMHgyNSwgMHgwMSwgMHgzMiwKKwkweDAwLCAweDQyLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDg3LCAweDhkLCAweDJhLCAweDNhLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDAsIDB4YjAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwMCwgMHhkMCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDAxLCAweDAwLCAweDQ4LCAweGYyLCAweGMxLCAweDM4LCAweDU0LAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHgwZSwgMHgxMCwgMHhiMCwgMHgwMCwgMHgwMCwgMHhhMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBjLCAweGFiLCAweGU0LCAweGIwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MTMsIDB4MTAsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4NDAsIDB4ZDAsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMCwgMHgwMCwgMHgwMCwgMHgyOCwgMHgwOSwgMHgwMCwgMHgwMCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDUwLAorCTB4MDAsIDB4MDAsIDB4MTYsIDB4MTAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4ZjgsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMSwgMHgwMCwgMHhmOCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDI4LCAweDA5LCAweDAwLCAweDAwLCAweDUyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MGQsIDB4NDAsIDB4ZDAsIDB4MzQsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHg0MCwgMHhkMCwgMHhiNiwKKwkweDAwLCAweDAwLCAweDFkLCAweDEwLCAweDA0LCAweDAxLCAweDAwLCAweDI4LCAweDA5LCAweDM0LCAweGIwLCAweGJhLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4NDAsIDB4ZDAsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHgxYSwgMHgxMCwgMHhiMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGEwLCAweDAwLCAweDAwLCAweDA0LCAweDBkLCAweDQwLCAweGQwLCAweDM1LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MjgsIDB4MDksIDB4MDAsIDB4MDAsIDB4NTIsCisJMHgwMCwgMHgwMCwgMHgxZCwgMHgxMCwgMHhiMCwgMHgwMCwgMHgwMCwgMHhhOCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAwLCAweDg0LCAweGMwLCAweDM3LCAweGFjLCAweGIwLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTAsIDB4MDAsIDB4MDAsIDB4MGMsIDB4MGIsIDB4MDAsIDB4MDAsIDB4MzIsCisJMHhmZiwgMHhmZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3OCwgMHhhOSwgMHg0ZCwgMHhiMCwgMHgzMCwKKwkweDAwLCAweDAwLCAweDI1LCAweDEwLCAweDgwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDQwLCAweGIwLCAweGI2LAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MTIsIDB4NDAsIDB4YjAsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3OCwgMHg2OSwgMHg4MSwgMHg5NywgMHgzNSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDg0LCAweDA4LCAweDBiLCAweDAwLCAweDdjLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTcsIDB4MjUsIDB4MDEsIDB4MzIsCisJMHgwMCwgMHg0MiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHg4NywgMHg4ZCwgMHgyYSwgMHgzYSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDA3LCAweDAwLCAweGIwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDAsIDB4ZDAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHgwMSwgMHgwMCwgMHg0OCwgMHhmMiwgMHhjMSwgMHgzOCwgMHg1NCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYywgMHg0MSwgMHgwMiwgMHg4MCwgMHgwNiwgMHhjMCwgMHg5MiwgMHg1MiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweDA5LCAweGM1LCAweDkyLCAweDMwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDIsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ODIsIDB4YmEsIDB4OTcsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNiwgMHgwMSwgMHgwMCwgMHg4MCwgMHg5MiwgMHhiYSwgMHg5NywgMHhiYywKKwkweDAwLCAweDAwLCAweDczLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDA5LCAweDgwLCAweDk3LCAweGQyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NjgsIDB4MDIsIDB4YzUsIDB4OTIsIDB4YjAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwYiwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVjLCAweDFmLCAweGMwLCAweGY1LCAweDNhLAorCTB4MjQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDksIDB4MDAsIDB4MzYsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHhlMiwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwOSwgMHhjMCwgMHg5MiwgMHhkMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDU0LCAweDAxLCAweGIwLCAweDAyLCAweGMwLCAweDZlLCAweDMyLAorCTB4MDAsIDB4ODIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDgsIDB4MDgsIDB4ODAsIDB4MzYsIDB4NTIsCisJMHgwMCwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweDM4LCAweDgwLCAweDg3LCAweDM1LAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NzIsIDB4ODAsIDB4ODcsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMCwgMHgwMSwgMHhlMCwgMHgxNiwgMHgyMCwgMHg2ZSwgMHgzYSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweDA5LCAweGM1LCAweDg1LCAweDMwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTgsIDB4MDEsIDB4ZTAsIDB4MTYsIDB4MjAsIDB4NmUsIDB4M2MsCisJMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkMiwgMHgwMSwgMHgwMCwgMHg3OCwgMHhlOSwgMHhlNSwgMHg4MywgMHgzOSwKKwkweDE4LCAweDAwLCAweDhhLCAweDExLCAweDFmLCAweDQxLCAweDAyLCAweDg0LCAweGU2LCAweGExLCAweDk3LCAweGI5LAorCTB4MDAsIDB4MDAsIDB4NDMsIDB4MTAsIDB4MzYsIDB4NTEsIDB4MDEsIDB4ZTgsIDB4MTYsIDB4ZTAsIDB4ODMsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg0MywgMHgxMCwgMHgxZCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDYyLCAweDgxLCAweDJmLCAweDM1LAorCTB4MDAsIDB4MDAsIDB4NDUsIDB4MTAsIDB4MzgsIDB4MjEsIDB4MDEsIDB4ZTAsIDB4MDYsIDB4NDAsIDB4ODAsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMSwgMHhlMCwgMHgwNiwgMHg0MCwgMHg4MCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDMxLCAweDAwLCAweGUwLCAweDA2LCAweDAwLCAweDAwLCAweDcyLAorCTB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgyYywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOSwgMHgwMCwgMHgzNiwgMHgzMiwKKwkweDAwLCAweDAwLCAweGUyLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDA5LCAweDgwLCAweDkyLCAweGQyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDUsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDcsIDB4ODAsIDB4OTIsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwNywgMHhjMCwgMHgyYywgMHgzMiwKKwkweDAwLCAweDQwLCAweDAwLCAweDgwLCAweDAwLCAweDM4LCAweDAwLCAweDAwLCAweDA3LCAweDAwLCAweDM3LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4Y2EsIDB4NDEsIDB4MDEsIDB4ZTAsIDB4MDYsIDB4ODAsIDB4OTIsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHg0OCwgMHgwMiwgMHhjMCwgMHg4MCwgMHhiMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDA4LCAweGU4LCAweDAxLCAweDAwLCAweDc0LAorCTB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHhhMiwgMHg4MCwgMHgyZiwgMHhiNiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDYyLCAweDgwLCAweDJkLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzgsIDB4MDAsIDB4MDAsIDB4MDcsIDB4ODAsIDB4OTIsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwNywgMHhjMCwgMHgyYywgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGNhLCAweDNkLCAweDAwLCAweDBjLCAweDA3LCAweDgwLCAweDgzLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4MDEsIDB4MDAsIDB4NDgsIDB4MDIsIDB4YzAsIDB4ODAsIDB4NzIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4NTcsIDB4MDEsIDB4ODAsIDB4MDIsIDB4YzAsIDB4NmUsIDB4N2MsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1NywgMHgwMSwgMHhlYywgMHgwNiwgMHg4MCwgMHg5MiwgMHg3MiwKKwkweDAwLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4ZDEsIDB4MGYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzAsIDB4MDMsIDB4MDAsIDB4MzgsIDB4ZjIsCisJMHgzMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOSwgMHgwMCwgMHgzNiwgMHgzMiwKKwkweDEwLCAweDAwLCAweGUyLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDE5LCAweGEwLCAweDJjLCAweGQ5LAorCTB4MDAsIDB4MDAsIDB4NjAsIDB4MTAsIDB4OWQsIDB4MTEsIDB4MDIsIDB4MGMsIDB4MDksIDB4MDAsIDB4NmUsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHg2MSwgMHgxMCwgMHgwMCwgMHhmMCwgMHgwMSwgMHgxYywgMHgwOSwgMHgwMCwgMHg2ZSwgMHg5MiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGI4LCAweDAxLCAweDFjLCAweDA5LCAweDAwLCAweDZlLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4NjMsIDB4MTAsIDB4MmMsIDB4Y2QsIDB4MDEsIDB4MTgsIDB4MDksIDB4ODAsIDB4NmUsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYywgMHhjOSwgMHhjMSwgMHg5MCwgMHgzNCwKKwkweDAwLCAweDAwLCAweDY3LCAweDEwLCAweDNiLCAweDI5LCAweDAyLCAweDA0LCAweDA5LCAweDgwLCAweDZlLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4ZDYsIDB4MDEsIDB4ODAsIDB4NTIsIDB4YzAsIDB4NmUsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkNiwgMHgwMSwgMHhlYywgMHg1NiwgMHhjMCwgMHg2ZSwgMHgzNCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBjLCAweGI5LCAweGMxLCAweDkwLCAweDM0LAorCTB4MDAsIDB4MDAsIDB4NzcsIDB4MTAsIDB4MDAsIDB4YTgsIDB4MDEsIDB4MDgsIDB4MDksIDB4MDAsIDB4NmUsIDB4ZjIsCisJMHgwMCwgMHgwMCwgMHg2YiwgMHgxMCwgMHg5ZCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgxNywgMHhlMCwgMHg5MCwgMHhiYSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDMwLCAweDAwLCAweDgwLCAweDA3LCAweGMwLCAweDkxLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4NmUsIDB4MTAsIDB4MDAsIDB4MzgsIDB4MDAsIDB4ODAsIDB4MDcsIDB4MDAsIDB4ZWUsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHg2ZSwgMHgxMCwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHhjMCwgMHg5MSwgMHhiYywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGI4LCAweDAxLCAweGUwLCAweDA2LCAweDAwLCAweGVlLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzAsIDB4MDEsIDB4ZTAsIDB4MDYsIDB4MDAsIDB4ODYsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHg3MSwgMHgxMCwgMHgzOSwgMHgwOCwgMHgwMCwgMHg4MCwgMHgwNywgMHhjMCwgMHg4NSwgMHhiMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDgwLCAweDAwLCAweDAwLCAweDgwLCAweGMyLCAweDgxLCAweDJmLCAweGI2LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDksIDB4YzksIDB4MDEsIDB4ZTgsIDB4MDYsIDB4ODAsIDB4OTEsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjOCwgMHgxMSwgMHgwMCwgMHg4MCwgMHgwNywgMHg0MCwgMHg5MCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDc0LCAweDEwLCAweDNiLCAweDIxLCAweDAwLCAweDgwLCAweDA3LCAweDAwLCAweDg2LCAweGIyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZGIsIDB4MDAsIDB4MDAsIDB4NjAsIDB4MTgsIDB4MDAsIDB4ODYsIDB4M2EsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1OCwgMHg3OCwgMHgwMSwgMHhlMCwgMHgxNiwgMHgyMCwgMHg4NiwgMHgzYSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDI5LCAweDAwLCAweDgwLCAweDA3LCAweDAwLCAweDg1LCAweDcyLAorCTB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg3YiwgMHgxMCwgMHgwMiwgMHgwYywgMHgwMiwgMHg4MCwgMHhhMiwgMHg5YiwgMHg5MCwgMHhiYywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweDc4LCAweDI5LCAweDAwLCAweDZlLCAweDM2LAorCTB4MDAsIDB4MDAsIDB4N2IsIDB4MTAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4ODAsIDB4ZTIsIDB4YTUsIDB4OTAsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwOSwgMHgwMCwgMHgwMCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDg4LCAweDAxLCAweDc4LCAweDQ5LCAweDIxLCAweDZlLCAweDNjLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4ZTksIDB4YTUsIDB4OTAsIDB4M2YsCisJMHgwMCwgMHgwMCwgMHg4MiwgMHgxMCwgMHgwNCwgMHgyMCwgMHgwMiwgMHgwOCwgMHg4OSwgMHg5YiwgMHg5MCwgMHhiZSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBhLCAweDAyLCAweDU4LCAweGI4LCAweDliLCAweDkwLCAweDM2LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzgsIDB4NDksIDB4YTEsIDB4OTAsIDB4M2EsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5ZiwgMHg4OCwgMHgwMSwgMHg4MCwgMHg4MiwgMHg5YiwgMHg5NywgMHg3YywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDg5LCAweDAxLCAweGUwLCAweDA2LCAweDgwLCAweDk3LCAweDcyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGIsIDB4MDIsIDB4NTgsIDB4YjgsIDB4OWIsIDB4OTAsIDB4NzYsCisJMHgwMCwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhiLCAweDEwLCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweGEyLCAweDgwLCAweDJmLCAweGI2LAorCTB4MDAsIDB4MDAsIDB4ODksIDB4MTAsIDB4MTIsIDB4MDEsIDB4MDAsIDB4NzgsIDB4MDksIDB4YzAsIDB4MjEsIDB4YjIsCisJMHgxOCwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHgwYSwgMHgwMywgMHhmOSwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDgwLCAweDJkLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4OGIsIDB4MTAsIDB4Y2EsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MDIsIDB4NDAsIDB4ODQsIDB4OTIsCisJMHgxNSwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg3OCwgMHhlOSwgMHg2NSwgMHgxNywgMHhiOCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweGEyLCAweDgwLCAweDJmLCAweDM1LAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4NDAsIDB4MmQsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHg4MCwgMHgyZCwgMHhiYywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDAwLCAweDZjLCAweDg4LCAweDFjLCAweDgzLCAweDNhLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDgsIDB4MDAsIDB4NGMsIDB4MDgsIDB4MDAsIDB4NzIsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwOCwgMHg1MCwgMHgwMCwgMHgxOCwgMHhjOCwgMHgyMCwgMHg3MiwgMHhiYywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA2LCAweDAwLCAweDAwLCAweDgwLCAweDYyLCAweGEwLCAweDgyLCAweDdjLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4OWYsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MTgsIDB4NDAsIDB4ODEsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMiwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4OCwgMHgwMSwgMHg4MiwgMHhiYSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweDAyLCAweDAwLCAweDAwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDAsIDB4MDYsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgzNiwgMHhiYywKKwkweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDc3LCAweDRhLCAweDA5LCAweDM5LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDAsIDB4ODIsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjYSwgMHgxOSwgMHgwMCwgMHgwMCwgMHgwNywgMHg0MCwgMHg4MiwgMHgzMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDQwLCAweGYyLCAweGMxLCAweDM4LCAweGI0LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4ZDgsIDB4MDIsIDB4NDAsIDB4ODQsIDB4NzIsCisJMHgwMCwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDJiLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA5LCAweDAwLCAweDM2LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4ZTIsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDksIDB4YzAsIDB4ODUsIDB4ZDIsCisJMHgwMCwgMHgwMCwgMHhhNiwgMHgxMCwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHhmMiwgMHhjMSwgMHg4NSwgMHhiNiwKKwkweDAwLCAweDAwLCAweGEyLCAweDEwLCAweDFmLCAweDQwLCAweDAyLCAweDg0LCAweGU2LCAweDAxLCAweDAwLCAweGI0LAorCTB4MDAsIDB4MDAsIDB4YTYsIDB4MTAsIDB4MWQsIDB4MDEsIDB4MDAsIDB4ZjgsIDB4MjIsIDB4ODEsIDB4MmYsIDB4YjQsCisJMHgwMCwgMHgwMCwgMHhhNiwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg2MiwgMHg4MSwgMHgyZiwgMHg5NSwKKwkweDAwLCAweDAwLCAweGE0LCAweDEwLCAweDFkLCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGIwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NjIsIDB4ODEsIDB4MmYsIDB4MzUsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwMiwgMHg4MCwgMHgwMiwgMHg0MCwgMHg2OCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDFmLCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGIwLAorCTB4MDAsIDB4MDAsIDB4NzMsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDksIDB4YzUsIDB4ODUsIDB4ZDAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHg2OCwgMHgwMiwgMHhjNSwgMHg4NSwgMHhiMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweDA5LCAweGM1LCAweDg1LCAweDMwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDIsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ODIsIDB4YmEsIDB4OTcsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNiwgMHgwMSwgMHgwMCwgMHg4MCwgMHg5MiwgMHhiYSwgMHg5NywgMHhiYywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFkLCAweDAwLCAweDAwLCAweDVjLCAweDFmLCAweGMwLCAweGY1LCAweDdhLAorCTB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4YTIsIDB4OGQsIDB4MmYsIDB4NzAsCisJMHgyOSwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHgyYywgMHg4MiwgMHhjZCwgMHgyZSwgMHhiMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweGY4LCAweDAyLCAweDgxLCAweDJmLCAweDc0LAorCTB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHg4MCwgMHhhOCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg4MiwgMHg4ZCwgMHgyZiwgMHg3MCwKKwkweDAwLCAweDAwLCAweGI3LCAweDEwLCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweGQyLCAweDgwLCAweDJmLCAweGI2LAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NzIsIDB4ODEsIDB4MmYsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHhiYSwgMHgxMCwgMHgwNCwgMHhiMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHg2ZSwgMHhiYywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDcyLCAweDgxLCAweDJmLCAweDM0LAorCTB4M2IsIDB4MDAsIDB4YmEsIDB4MTAsIDB4MTIsIDB4MDEsIDB4MDAsIDB4MmMsIDB4ODIsIDB4Y2QsIDB4MmUsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweGJhLCAweDEwLCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweGYyLCAweDgwLCAweDJmLCAweGI2LAorCTB4MzAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MmMsIDB4ODIsIDB4Y2QsIDB4MmUsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHhiZCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg0MiwgMHg4MSwgMHgyZiwgMHg5NCwKKwkweDAwLCAweDAwLCAweGJkLCAweDEwLCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweGIyLCAweDgwLCAweDJmLCAweGI2LAorCTB4MzQsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MmMsIDB4ODIsIDB4Y2QsIDB4MmUsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg0MiwgMHg4MSwgMHgyZiwgMHgzNCwKKwkweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDgwLCAweDgyLCAweDhkLCAweDJmLCAweDcwLAorCTB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4YTIsIDB4OGQsIDB4MmYsIDB4NzAsCisJMHgzYSwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHgyYywgMHg4MiwgMHhjZCwgMHgyZSwgMHhiMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweGY4LCAweDEyLCAweDgxLCAweDJmLCAweDc0LAorCTB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHhhMiwgMHg4MCwgMHgyZiwgMHhiNiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDY1LCAweDAxLCAweDgwLCAweGEyLCAweGRiLCAweDJjLCAweGJjLAorCTB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDEsIDB4ZTgsIDB4NzYsIDB4MjAsIDB4ODEsIDB4MzksCisJMHhlZSwgMHhmZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHhmOCwgMHg4MiwgMHg4ZCwgMHgyZiwgMHg3MSwKKwkweDAwLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4Y2IsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MzgsIDB4MDgsIDB4YzAsIDB4NmUsIDB4ZjIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHgwMSwgMHgwMCwgMHg0OCwgMHgwMiwgMHhjMCwgMHg4MCwgMHg3MiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHhjZCwgMHgxMCwgMHgwNCwgMHgzOCwgMHgwMSwgMHg3OCwgMHgwOSwgMHgwMCwgMHg2ZSwgMHhiMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDM4LCAweDAxLCAweGUwLCAweDA2LCAweDAwLCAweDAwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4YTIsIDB4ODAsIDB4MmYsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjYSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwNywgMHg4MCwgMHg4MiwgMHgzMiwKKwkweDAwLCAweDAwLCAweGQxLCAweDEwLCAweDJlLCAweDE5LCAweDAwLCAweDAwLCAweDA3LCAweDgwLCAweDk3LCAweGIyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjgsIDB4ZTksIDB4ODEsIDB4OTIsIDB4MzQsCisJMHgwMCwgMHgwMCwgMHhkNSwgMHgxMCwgMHgyNywgMHgzMSwgMHgwMCwgMHgwMCwgMHgwNywgMHhjMCwgMHgyYywgMHhiMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ1LCAweDA4LCAweDAwLCAweDAwLCAweDA3LCAweDAwLCAweDg3LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YzcsIDB4MDAsIDB4MDAsIDB4MjgsIDB4ZTksIDB4ODAsIDB4OTIsIDB4MzQsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwMSwgMHhlMCwgMHgwNiwgMHgwMCwgMHg4NywgMHgzMiwKKwkweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDM5LCAweDAwLCAweDAwLCAweGU3LCAweGEwLCAweDkyLCAweDc5LAorCTB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgxNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOSwgMHgwMCwgMHgzNiwgMHgzMiwKKwkweDAwLCAweDAwLCAweGUyLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDA5LCAweDQwLCAweDkwLCAweGQyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NDQsIDB4MTIsIDB4ZTQsIDB4MzgsIDB4YjIsCisJMHgxOCwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHgwYSwgMHgwMywgMHhmOSwKKwkweDAwLCAweDAwLCAweGRmLCAweDEwLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDgwLCAweDJkLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4YTIsIDB4ODAsIDB4MmYsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHhkYSwgMHgxMCwgMHg2NywgMHgwMCwgMHgwMCwgMHhmOCwgMHhhMiwgMHg4MCwgMHgyZiwgMHhiNSwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweGU4LCAweDAyLCAweGMwLCAweDIxLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4NzIsIDB4ODAsIDB4MmQsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHhkOCwgMHgwMiwgMHg0MCwgMHgwMCwgMHg3MiwKKwkweDAwLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MWIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NzksIDB4MGEsIDB4OTEsIDB4MzksCisJMHgwZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgzOSwgMHgwYiwgMHg5MSwgMHgzOSwKKwkweDBjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDU5LCAweDBhLCAweDkxLCAweDM5LAorCTB4MDksIDB4MDAsIDB4ZTUsIDB4MTAsIDB4ZjEsIDB4MDEsIDB4MDAsIDB4MTAsIDB4NjksIDB4MGIsIDB4OTEsIDB4YjksCisJMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyNCwgMHg4NiwgMHhhOCwgMHg4MiwgMHg4ZCwgMHg2YywgMHgzNywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDg4LCAweGUwLCAweDA3LCAweDAwLCAweDkxLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODgsIDB4ZTAsIDB4MDcsIDB4NDAsIDB4OTEsIDB4MzIsCisJMHgwMCwgMHg4MCwgMHhlYiwgMHgxMCwgMHgwMiwgMHgwMSwgMHgwMCwgMHg4MCwgMHg4MiwgMHg4ZCwgMHgyYSwgMHhiYywKKwkweDAwLCAweDAwLCAweGVjLCAweDEwLCAweGUxLCAweDI0LCAweDg2LCAweGM4LCAweDA2LCAweDAwLCAweDAwLCAweDkyLAorCTB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTEsIDB4MjQsIDB4ODYsIDB4YzgsIDB4ODYsIDB4OGQsIDB4MmEsIDB4MzYsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg1MCwKKwkweDAwLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4ZjQsIDB4MTAsIDB4MDQsIDB4MzAsIDB4MDAsIDB4ODAsIDB4ODIsIDB4OWIsIDB4ODEsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwZCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDlmLCAweDNjLCAweDAwLCAweDE0LCAweDI4LCAweDgwLCAweDZlLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4YTIsIDB4ODAsIDB4MmYsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjYSwgMHgwMSwgMHgwMCwgMHhmOCwgMHgwMiwgMHg4MCwgMHgyZiwgMHgzNSwKKwkweDAwLCAweGEwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDQwLCAweGEyLCAweDhkLCAweDM5LCAweGIyLAorCTB4MDAsIDB4MDAsIDB4ZjYsIDB4MTAsIDB4ODAsIDB4MzksIDB4MDAsIDB4ODAsIDB4ZTIsIDB4ODAsIDB4NmUsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg4MCwgMHgzOCwgMHgwMCwgMHg4MCwgMHhmMiwgMHg4MCwgMHg2ZSwgMHhiNiwKKwkweDAwLCAweGUwLCAweDhhLCAweDExLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweGEyLCAweDhkLCAweDJmLCAweGIwLAorCTB4MDAsIDB4ZTAsIDB4ZmQsIDB4MTAsIDB4MDQsIDB4MzgsIDB4MDAsIDB4NzgsIDB4ODksIDB4OGQsIDB4NmUsIDB4YjAsCisJMHgxMCwgMHgwMCwgMHhmZCwgMHgxMCwgMHg5ZiwgMHgwMSwgMHgwMCwgMHhmOCwgMHhlMiwgMHhhNSwgMHgyZiwgMHhiOSwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweGMwLCAweGVlLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4ODIsIDB4ODEsIDB4MmYsIDB4YjYsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1OCwgMHgwMSwgMHhlYywgMHgwNiwgMHhjMCwgMHhlZSwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDMwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MjgsIDB4MDAsIDB4MTgsIDB4MDksIDB4MDAsIDB4NmUsIDB4NzIsCisJMHgwMCwgMHgwMCwgMHg0ZiwgMHgwZSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhmMCwKKwkweDAwLCAweDAwLCAweDJmLCAweDBlLCAweDAwLCAweGE4LCAweDAxLCAweDIwLCAweDA5LCAweDAwLCAweDZlLCAweDkyLAorCTB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHhhOSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHg2ZSwgMHhiYywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweGIwLCAweDAwLCAweDgwLCAweDgyLCAweDliLCAweDgxLCAweDdjLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MGQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4YjAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg5ZiwgMHhiYywgMHgwMCwgMHgxNCwgMHgyOCwgMHg4MCwgMHg2ZSwgMHhiYywKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDgwLCAweDAwLCAweDAwLCAweDgwLCAweGEyLCAweDgwLCAweDJmLCAweGI2LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4Y2EsIDB4MDEsIDB4MDAsIDB4ZjgsIDB4NDIsIDB4ODAsIDB4MmYsIDB4MzUsCisJMHgwOCwgMHhhMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHgwMSwgMHgwMCwgMHg0MCwgMHhhMiwgMHhjZCwgMHgzOSwgMHg3MiwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgyOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOSwgMHgwMCwgMHgzNiwgMHgzMiwKKwkweDAwLCAweDAwLCAweGUyLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDA5LCAweDgwLCAweDkwLCAweGQyLAorCTB4MDAsIDB4MDAsIDB4MGYsIDB4MTEsIDB4MzMsIDB4Y2QsIDB4MDEsIDB4YmMsIDB4MDgsIDB4ODAsIDB4NmUsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHg0ZSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyOCwgMHgyOSwgMHgyMiwgMHhlZSwgMHhkYywKKwkweDAwLCAweDAwLCAweDE0LCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4MTQsIDB4MTEsIDB4MDQsIDB4YjgsIDB4MDEsIDB4MjgsIDB4MDksIDB4MDAsIDB4NmUsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHgxNCwgMHgxMSwgMHg5ZiwgMHg3MSwgMHgwMSwgMHg4MCwgMHhjMiwgMHgyMSwgMHg2ZSwgMHhiYywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDI4LCAweGE5LCAweDI0LCAweGVlLCAweDNjLAorCTB4MDAsIDB4MDAsIDB4NGUsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjgsIDB4MTksIDB4ODAsIDB4OTIsIDB4ZGYsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgzMCwKKwkweDAwLCAweDAwLCAweDI4LCAweDExLCAweDA2LCAweDgwLCAweDAxLCAweDgwLCAweDgyLCAweDliLCAweDkwLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4ODAsIDB4OTAsIDB4YmMsCisJMHhlZSwgMHgwNSwgMHgyMCwgMHgxMSwgMHgwNiwgMHgwYywgMHgwMiwgMHg4MCwgMHg4MiwgMHg4ZCwgMHg2ZSwgMHhiYywKKwkweDAwLCAweDkwLCAweDRjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDg0LCAweDAyLCAweDAwLCAweDM3LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MWEsIDB4MTEsIDB4YjgsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4YjAsCisJMHgwMCwgMHgwMCwgMHgxOCwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGM0LCAweDAzLCAweDgwLCAweDkwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjAsIDB4MDEsIDB4ZTAsIDB4OTYsIDB4MjEsIDB4NmUsIDB4M2MsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2MSwgMHg5OCwgMHgwMSwgMHhlMCwgMHgwNiwgMHgwMCwgMHg4NywgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ0LCAweDAxLCAweGVjLCAweDA2LCAweDAwLCAweDAwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTgsIDB4MDAsIDB4MDAsIDB4NzgsIDB4NDksIDB4NDAsIDB4M2MsIDB4MzcsCisJMHgwMCwgMHgwMCwgMHgyZCwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHhlOSwgMHhhNSwgMHg5MCwgMHg5YSwKKwkweDYwLCAweDg5LCAweDIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDg0LCAweDAyLCAweDAwLCAweDM3LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MjMsIDB4MTEsIDB4YjgsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4YjAsCisJMHgwMCwgMHgwMCwgMHgyMSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGM0LCAweDAzLCAweDgwLCAweDkwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjAsIDB4MDEsIDB4ZTAsIDB4OTYsIDB4MjEsIDB4NmUsIDB4M2MsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2MSwgMHg5OCwgMHgwMSwgMHhlMCwgMHgwNiwgMHgwMCwgMHg4NywgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ0LCAweDAxLCAweGVjLCAweDA2LCAweDAwLCAweDAwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MmQsIDB4MTEsIDB4YTgsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MTksIDB4OGYsIDB4OTAsIDB4OWEsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3OCwgMHg5OSwgMHhhMSwgMHg4OSwgMHgzZSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweGU5LCAweGE1LCAweDkwLCAweDNhLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjAsIDB4MDEsIDB4ZTAsIDB4OTYsIDB4MjEsIDB4NmUsIDB4M2MsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2MSwgMHg5OCwgMHgwMSwgMHhlMCwgMHgwNiwgMHgwMCwgMHg4NywgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ0LCAweDAxLCAweGVjLCAweDA2LCAweDAwLCAweDAwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MzAsIDB4MTEsIDB4MDYsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NzIsIDB4YTIsIDB4OTAsIDB4YmMsCisJMHgwMCwgMHhjMCwgMHhmZiwgMHgzZiwgMHgwMCwgMHg4MCwgMHgwMSwgMHhlMCwgMHgwNiwgMHgwMCwgMHgzNywgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDA5LCAweGMwLCAweDg5LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MzYsIDB4MTEsIDB4MDQsIDB4NzksIDB4MDEsIDB4ODAsIDB4ODIsIDB4MWIsIDB4ODcsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgzNCwgMHgxMSwgMHgwNCwgMHhiMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHg2ZSwgMHhiYywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDkwLCAweDAxLCAweGUwLCAweDA2LCAweDgwLCAweDkwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4ZjgsIDB4OTIsIDB4ODEsIDB4MmYsIDB4NzUsCisJMHgwMCwgMHgwMCwgMHgzYywgMHgxMSwgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg1MiwgMHg4MSwgMHgyZiwgMHhiNiwKKwkweDAwLCAweDAwLCAweDNjLCAweDExLCAweGQ1LCAweDQxLCAweDAxLCAweGUwLCAweDA2LCAweDAwLCAweDg3LCAweDkyLAorCTB4MDAsIDB4MDAsIDB4MzksIDB4MTEsIDB4M2MsIDB4OTAsIDB4MDEsIDB4ZTAsIDB4MDYsIDB4ODAsIDB4OTAsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg5MiwgMHg4MSwgMHgyZiwgMHhiNiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGM4LCAweDAxLCAweGU4LCAweDA2LCAweGMwLCAweDhiLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OTUsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4ODAsIDB4MmYsIDB4NzIsCisJMHgwMCwgMHgwMCwgMHgzZCwgMHgxMSwgMHg5ZiwgMHg0MSwgMHgwMSwgMHg4MCwgMHg4MiwgMHgxYiwgMHg4NywgMHhiYywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDcwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDksIDB4OTAsIDB4MDEsIDB4ZTAsIDB4MDYsIDB4ODAsIDB4OTAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHhmOCwgMHg3MiwgMHg4MCwgMHgyZiwgMHg3NCwKKwkweDAwLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MjcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDksIDB4MDAsIDB4MzYsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHhlMiwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwOSwgMHg0MCwgMHg4NywgMHhkMiwKKwkweDAwLCAweDAwLCAweDQ3LCAweDExLCAweDlmLCAweGQ4LCAweDAxLCAweDgwLCAweDIyLCAweDIxLCAweDZlLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGIsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4NzAsCisJMHgwMCwgMHgwMCwgMHg0NywgMHgxMSwgMHg5ZiwgMHhlMCwgMHgwMSwgMHg4MCwgMHhjMiwgMHgyMSwgMHg2ZSwgMHhiYywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBiLCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDcwLAorCTB4MDAsIDB4MDAsIDB4NDcsIDB4MTEsIDB4OWYsIDB4YjAsIDB4MDEsIDB4ODAsIDB4ZDIsIDB4MjEsIDB4NmUsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg3MCwKKwkweDAwLCAweDAwLCAweDQ5LCAweDExLCAweDA2LCAweDY4LCAweDAxLCAweDgwLCAweDgyLCAweDViLCAweDg3LCAweGJjLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjgsIDB4MDEsIDB4ZTAsIDB4MDYsIDB4NDAsIDB4ODcsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHg0YiwgMHgxMSwgMHgzNywgMHhiMCwgMHgwMSwgMHhlMCwgMHgwNiwgMHg0MCwgMHg4NywgMHhiMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweGQyLCAweDgwLCAweDJmLCAweDM0LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MDEsIDB4ZTAsIDB4MDYsIDB4ODAsIDB4ODQsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMSwgMHgwMSwgMHhlMCwgMHgwNiwgMHgwMCwgMHg4NywgMHg3MiwKKwkweDAwLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDgsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4ODAsIDB4OTIsIDB4YmMsCisJMHgwMCwgMHgwMCwgMHg1YiwgMHgxMSwgMHgwNCwgMHhjMSwgMHgwMSwgMHg4NCwgMHgwMiwgMHgwMCwgMHg2ZSwgMHhiMiwKKwkweDA1LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGMwLCAweDAxLCAweGU4LCAweDg2LCAweDhkLCAweDkyLCAweDM3LAorCTB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YzQsIDB4MDEsIDB4ZTgsIDB4ODYsIDB4OGQsIDB4OTIsIDB4MzcsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgzMCwKKwkweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGMwLCAweDAxLCAweDJjLCAweDg5LCAweDhkLCAweDZlLCAweDM2LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YzQsIDB4MDEsIDB4MmMsIDB4YTksIDB4ZGIsIDB4OTIsIDB4M2EsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyYywgMHgyOSwgMHhjMCwgMHg5MiwgMHgzNiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDJjLCAweDE5LCAweGZiLCAweDkyLCAweDNmLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjgsIDB4MjksIDB4ODAsIDB4OTIsIDB4M2EsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyYywgMHhhOSwgMHhlNCwgMHg5MiwgMHgzZiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDZmLCAweGNjLCAweDAxLCAweGU4LCAweDI2LCAweGZiLCAweDkyLCAweDNlLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjksIDB4MDEsIDB4ZTAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4NTIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5NCwgMHgwMiwgMHg4MCwgMHg5MiwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGMwLCAweDAxLCAweGUwLCAweDA2LCAweDQwLCAweDI4LCAweDMyLAorCTB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NmYsIDB4Y2MsIDB4MDEsIDB4ZTgsIDB4ODYsIDB4Y2QsIDB4MmEsIDB4MzYsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiOSwgMHgwMSwgMHhlMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHg1MiwKKwkweDAwLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4YjAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4NmUsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5MCwgMHgwMSwgMHhiYywgMHgwOCwgMHgwMCwgMHg2ZSwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGIwLCAweDAxLCAweGJjLCAweDg4LCAweGRiLCAweDhiLCAweDNlLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OTgsIDB4MDEsIDB4YmMsIDB4ODgsIDB4ZGIsIDB4OGIsIDB4M2EsCisJMHgwMCwgMHgwMCwgMHg2YSwgMHgxMSwgMHg5ZiwgMHgwMCwgMHgwMCwgMHhiYywgMHg4OCwgMHhlMSwgMHg4YiwgMHhiYywKKwkweDAwLCAweDAwLCAweDZhLCAweDExLCAweDA0LCAweDBjLCAweDAyLCAweDQwLCAweGE4LCAweGRiLCAweDhiLCAweGJlLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjAsIDB4MDAsIDB4MDQsIDB4ODgsIDB4MWIsIDB4ODQsIDB4M2UsCisJMHgwMCwgMHgwMCwgMHg2OSwgMHgxMSwgMHgwNCwgMHhiMSwgMHgwMCwgMHg4MCwgMHg4MiwgMHg1YiwgMHg4MCwgMHhiYywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweGY4LCAweGMyLCAweDgwLCAweDJmLCAweDc0LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MGMsIDB4MDIsIDB4ODAsIDB4YTIsIDB4NWIsIDB4ODAsIDB4N2MsCisJMHgyOSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOSwgMHgwMCwgMHgzNiwgMHgzMiwKKwkweDAwLCAweDAwLCAweGUyLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDA5LCAweGMwLCAweDhiLCAweGQyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODgsIDB4MTIsIDB4MDAsIDB4MmMsIDB4M2EsCisJMHgwMCwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDY1LCAweDAxLCAweDgwLCAweGEyLCAweGRiLCAweDJjLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4YTIsIDB4ODAsIDB4MmYsIDB4YjYsCisJMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYywgMHgwMSwgMHhlOCwgMHg3NiwgMHgyMCwgMHg4MSwgMHgzOSwKKwkweGVlLCAweGZmLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweGY4LCAweDgyLCAweDhkLCAweDJmLCAweDcxLAorCTB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHhkOSwgMHg0YSwgMHg5MSwgMHgzOSwKKwkweDM5LCAweDAwLCAweGUyLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA5LCAweDAwLCAweDM2LCAweGQyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDksIDB4NDUsIDB4OTEsIDB4MzAsCisJMHgwNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzYywgMHg4OSwgMHg0ZCwgMHg5MSwgMHgzNiwKKwkweGMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDNjLCAweDg5LCAweGNkLCAweDkzLCAweDNjLAorCTB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YzgsIDB4ODIsIDB4Y2QsIDB4OTMsIDB4MzYsCisJMHgwNywgMHgwMCwgMHg3OSwgMHgxMSwgMHhmMywgMHgwMSwgMHgwMCwgMHg0MCwgMHg4OSwgMHhjZCwgMHg5MywgMHhiMCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDgwLCAweDE4LCAweDliLCAweDgxLCAweDAyLCAweGU1LCAweDc4LCAweGI2LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTMsIDB4MTgsIDB4OWIsIDB4OGQsIDB4MDcsIDB4ZTUsIDB4NzgsIDB4MzQsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg1MCwKKwkweDAwLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4ZDksIDB4NGEsIDB4OTEsIDB4MzksCisJMHgzYSwgMHgwMCwgMHhlMiwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOSwgMHgwMCwgMHgzNiwgMHhkMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDA5LCAweDQ1LCAweDkxLCAweDMwLAorCTB4MDUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4M2MsIDB4ODksIDB4NGQsIDB4OTEsIDB4MzYsCisJMHhjMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzYywgMHg4OSwgMHhjZCwgMHg5MywgMHgzYywKKwkweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGM4LCAweDgyLCAweGNkLCAweDkzLCAweDM2LAorCTB4MDcsIDB4MDAsIDB4ODQsIDB4MTEsIDB4ZjMsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ODksIDB4Y2QsIDB4OTMsIDB4YjAsCisJMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg4MCwgMHgxOSwgMHg5YiwgMHg4MSwgMHgwMiwgMHhlNSwgMHg3OCwgMHhiNiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGUzLCAweDE4LCAweDliLCAweDhkLCAweDA3LCAweGU1LCAweDc4LCAweDM1LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4NTAsCisJMHgwMCwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweGI0LCAweDBmLCAweDQwLCAweGZiLCAweDk0LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODgsIDB4MGYsIDB4NDAsIDB4MmIsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5MCwgMHgwZiwgMHgwMCwgMHgyOCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDk0LCAweDBmLCAweDAwLCAweDI5LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjgsIDB4MGYsIDB4NDAsIDB4MTgsIDB4MzIsCisJMHhmZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5YywgMHgwZiwgMHgwMCwgMHgzNiwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDljLCAweDVmLCAweGNhLCAweGY5LCAweDM1LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4MDMsIDB4YzAsIDB4ZjksIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlNCwgMHgwMywgMHgwMCwgMHgwMCwgMHgzMiwKKwkweDQxLCAweDAwLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDAzLCAweDAwLCAweDM3LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTQsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MzIsCisJMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwMywgMHgwMCwgMHgzNywgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDk4LCAweDBmLCAweDgwLCAweDJhLCAweDMyLAorCTB4NGMsIDB4NDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTgsIDB4MDIsIDB4MDAsIDB4MzYsIDB4MzIsCisJMHg5OCwgMHgxMSwgMHg5NywgMHgxMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiMCwgMHgwZiwgMHgwMCwgMHgzNiwgMHg5MiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDljLCAweDAyLCAweDAwLCAweDAwLCAweDMyLAorCTB4MDAsIDB4MDEsIDB4ODQsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YWMsIDB4MGYsIDB4MDAsIDB4MzYsIDB4ZDIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhYywgMHgwZiwgMHg4MCwgMHgyYSwgMHgzMiwKKwkweDAwLCAweDIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE4LCAweDAyLCAweDAwLCAweDM2LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OWMsIDB4MGYsIDB4MDAsIDB4N2UsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMCwgMHgwZiwgMHgwMCwgMHg3ZSwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE0LCAweDBmLCAweDAwLCAweDdlLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTgsIDB4MGYsIDB4MDAsIDB4N2UsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOCwgMHgwMiwgMHhjMCwgMHhmYSwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDA3LCAweGMwLCAweGY5LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDcsIDB4MDAsIDB4ZmEsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwNywgMHg0MCwgMHhmYSwgMHgzMiwKKwkweDAwLCAweDAwLCAweGFjLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDA3LCAweDgwLCAweGZhLCAweGQyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDcsIDB4ODAsIDB4ZmIsIDB4MzIsCisJMHgwMSwgMHgwMCwgMHhjZiwgMHgxMSwgMHgwNCwgMHgwMSwgMHgwMCwgMHhiNCwgMHg4ZiwgMHg0ZCwgMHhmYiwgMHhiMCwKKwkweDQwLCAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBjLCAweGFiLCAweGNkLCAweGIwLCAweDMyLAorCTB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGMsIDB4NWIsIDB4Y2EsIDB4YjAsIDB4MzksCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYywgMHgyYiwgMHhmZSwgMHhiMCwgMHgzMiwKKwkweDAwLCAweDAwLCAweGFhLCAweDExLCAweDEyLCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDQwLCAweDIwLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4YmUsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgwMywgMHgwMCwgMHgwMSwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweGUwLCAweDA3LCAweDgwLCAweDNmLCAweDUyLAorCTB4MTgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NzMsIDB4OGEsIDB4MDIsIDB4MzksCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg1MywgMHgwYSwgMHgxNiwgMHgzNSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDljLCAweDBmLCAweDAwLCAweDkwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTAsIDB4MGYsIDB4NDAsIDB4OTAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhNCwgMHgwZiwgMHg4MCwgMHg5MCwgMHgzMiwKKwkweGEyLCAweDYwLCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDU4LCAweDAzLCAweDAwLCAweDM3LCAweDMyLAorCTB4YjksIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWMsIDB4MDMsIDB4MDAsIDB4MzYsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHg4MywgMHgwZCwgMHgwMCwgMHgzNCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ4LCAweDgzLCAweDBkLCAweDAwLCAweDM0LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4NTMsIDB4MGEsIDB4MDAsIDB4MzQsCisJMHgwMCwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA5LCAweGMwLCAweGY5LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDksIDB4MDAsIDB4ZmEsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwOSwgMHg0MCwgMHhmYSwgMHgzMiwKKwkweDAwLCAweDAwLCAweGM5LCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTAsIDB4YzIsIDB4MGEsIDB4MDAsIDB4MzksCisJMHgwMCwgMHgwMCwgMHhjMCwgMHgxMSwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgxMiwgMHg0MCwgMHhiMCwgMHhiNiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDNiLCAweDQwLCAweGIwLCAweDMzLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4Y2QsIDB4NGEsIDB4ZDAsIDB4MzUsCisJMHgwMCwgMHgwMCwgMHhjNCwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYywgMHgwYiwgMHg0MCwgMHg5MCwgMHg5MiwKKwkweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGEwLCAweGMyLCAweDBhLCAweDAwLCAweDM5LAorCTB4MDAsIDB4MDAsIDB4YzQsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4NmIsIDB4NDEsIDB4OTAsIDB4OTQsCisJMHgwMCwgMHgwMCwgMHhjNCwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOSwgMHg0MCwgMHgyMCwgMHhiMiwKKwkweDAwLCAweDAwLCAweGM1LCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDA0LCAweDA5LCAweDQwLCAweDIwLCAweGIyLAorCTB4MGQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjAsIDB4MDIsIDB4ZTQsIDB4MTYsIDB4MzgsCisJMHgwMCwgMHgwMCwgMHhjOSwgMHgxMSwgMHg5ZiwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHg5MCwgMHhiMiwKKwkweDAwLCAweDAwLCAweGM4LCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDA4LCAweDA5LCAweDQwLCAweDIwLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OWMsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkOCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgzMiwKKwkweDAyLCAweDAwLCAweGM0LCAweDExLCAweDA0LCAweDAxLCAweDAwLCAweGJjLCAweDBmLCAweDI0LCAweDE3LCAweGI4LAorCTB4MDYsIDB4MDAsIDB4YzIsIDB4MTEsIDB4MDQsIDB4MDAsIDB4MDAsIDB4YmMsIDB4MGYsIDB4NjQsIDB4MTYsIDB4YjgsCisJMHgwMCwgMHgwMCwgMHhiZCwgMHgxMSwgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgyMiwgMHhjMCwgMHhmYiwgMHhiYywKKwkweDIwLCAweDAwLCAweGM0LCAweDExLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDgyLCAweGNkLCAweGZiLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4ZDcsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4ZDAsCisJMHhkMSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4OCwgMHg4MiwgMHhjZCwgMHhmOSwgMHgzYSwKKwkweDAwLCAweDAwLCAweGI3LCAweDEyLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4ZjcsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHhmOCwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweGZjLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4MDQsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHg1ZCwgMHgxMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA3LCAweDAwLCAweDAzLCAweDMyLAorCTB4NDAsIDB4NDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTgsIDB4MDIsIDB4MDAsIDB4MzYsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwNywgMHg4MCwgMHgyYSwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDA3LCAweDQwLCAweDkwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHhkZSwgMHgxMSwgMHg5ZiwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHg5MCwgMHhiMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAwLCAweDAwLCAweDA3LCAweDgwLCAweDkwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4ZGUsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjIsIDB4MDEsIDB4MDAsIDB4YjQsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHg5MCwgMHgzMiwKKwkweDAwLCAweDAwLCAweGUwLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDljLCAweDBmLCAweGMwLCAweDIxLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OWMsIDB4MGYsIDB4MDAsIDB4N2UsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMCwgMHgwZiwgMHgwMCwgMHg3ZSwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE0LCAweDBmLCAweDAwLCAweDdlLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDAsIDB4ZmEsIDB4NTIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5YywgMHgwMiwgMHgwMCwgMHgwMCwgMHgzMiwKKwkweDRjLCAweDQyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE4LCAweDAyLCAweDAwLCAweDM2LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDcsIDB4ODAsIDB4MmEsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHhhZCwgMHgxMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhkMCwKKwkweDAwLCAweDAwLCAweGIzLCAweDEyLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGQwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGMsIDB4Y2IsIDB4YzEsIDB4YjAsIDB4MzQsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5YywgMHgwMiwgMHgwMCwgMHgwMCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweDAyLCAweDAwLCAweDAwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4ZWYsIDB4MGYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjgsIDB4MDksIDB4YzAsIDB4YjAsIDB4ZDIsCisJMHgwMCwgMHgwMCwgMHhlYiwgMHgxMSwgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHg4MCwgMHg5MiwgMHhiMiwKKwkweDAwLCAweDAwLCAweGVmLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDljLCAweDBmLCAweGMwLCAweDIxLCAweGIyLAorCTB4MDIsIDB4MDAsIDB4ZjIsIDB4MTEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4YjQsIDB4OGYsIDB4NGQsIDB4ZmIsIDB4YjAsCisJMHgwMCwgMHgwMCwgMHhjNCwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDkzLCAweDQwLCAweDAxLCAweDM5LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjQsIDB4MWYsIDB4NDAsIDB4ZmIsIDB4MzUsCisJMHhmZSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0OCwgMHgwMywgMHgwMCwgMHgzNiwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDAzLCAweDAwLCAweDAwLCAweDM0LAorCTB4MDAsIDB4MDAsIDB4ZWIsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGMsIDB4OGIsIDB4YzEsIDB4YjAsIDB4OTQsCisJMHgwMCwgMHgwMCwgMHhiYiwgMHgxMiwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwNywgMHg0MCwgMHhmYSwgMHg5MiwKKwkweDAwLCAweDAwLCAweGFkLCAweDEyLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDA3LCAweDQwLCAweGZhLCAweGQyLAorCTB4MDAsIDB4MDAsIDB4ZjksIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NTAsIDB4ZjIsIDB4MDEsIDB4MDAsIDB4YjQsCisJMHgwMCwgMHgwMCwgMHhiNCwgMHgxMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhkMCwKKwkweDAwLCAweDAwLCAweGJkLCAweDEyLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OWMsIDB4MGYsIDB4MDAsIDB4MzYsIDB4MzIsCisJMHgwMCwgMHhjYywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOCwgMHgwMiwgMHgwMCwgMHgzNiwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGEwLCAweDAyLCAweDAwLCAweDAwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDcsIDB4MDAsIDB4YjAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMCwgMHgxMiwgMHgwMCwgMHgyYSwgMHgzYSwKKwkweDAwLCAweDAwLCAweGZmLCAweDExLCAweDA0LCAweDAxLCAweDAwLCAweDljLCAweDFmLCAweGMwLCAweGY5LCAweGJjLAorCTB4MDAsIDB4Y2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTgsIDB4MDIsIDB4MDAsIDB4MzYsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHhiYSwgMHgxMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDBjLCAweDEyLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDQwLCAweGZhLCAweGIyLAorCTB4MDAsIDB4Y2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTgsIDB4MDIsIDB4MDAsIDB4MzYsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwZSwgMHgxMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhkMCwKKwkweDAwLCAweDAwLCAweDFiLCAweDEyLCAweDAwLCAweDAwLCAweDAwLCAweDg0LCAweDAyLCAweDAwLCAweDAwLCAweGQyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDcsIDB4YzAsIDB4M2MsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwOCwgMHgxMiwgMHg4ZSwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHg0MCwgMHgyOCwgMHhiMiwKKwkweDAwLCAweGNjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE0LCAweDBmLCAweDAwLCAweDM2LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4ZjcsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHhjYywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhNCwgMHg4ZiwgMHg0ZCwgMHhmYSwgMHgzYSwKKwkweDAwLCAweDAwLCAweGY3LCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OWMsIDB4MGYsIDB4MDAsIDB4MDAsIDB4MzIsCisJMHgxMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhYywgMHgwZiwgMHgwMCwgMHgzNywgMHgzMiwKKwkweDAwLCAweDAwLCAweDIwLCAweDEyLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGQwLAorCTB4MDgsIDB4MDAsIDB4MTAsIDB4MTIsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ODIsIDB4Y2QsIDB4ZjksIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5YywgMHgwZiwgMHgwMCwgMHgwMCwgMHgzMiwKKwkweDBlLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGFjLCAweDBmLCAweDAwLCAweDM3LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MjAsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4ZDAsCisJMHgwYiwgMHgwMCwgMHgxNCwgMHgxMiwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg4MiwgMHhjZCwgMHhmOSwgMHhiYywKKwkweDIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDljLCAweDBmLCAweDAwLCAweDM2LCAweDMyLAorCTB4MGYsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YWMsIDB4MGYsIDB4MDAsIDB4MzcsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgyMCwgMHgxMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhkMCwKKwkweDI3LCAweDAwLCAweDE4LCAweDEyLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDgyLCAweGNkLCAweGY5LCAweGJjLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4NTAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5YywgMHgwZiwgMHgwMCwgMHgwMCwgMHgzMiwKKwkweDBmLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGFjLCAweDBmLCAweDAwLCAweDM3LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MjAsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4ZDAsCisJMHgyMCwgMHgwMCwgMHgxZCwgMHgxMiwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg4MiwgMHhjZCwgMHhmOSwgMHhiYywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDUwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTQsIDB4MDMsIDB4YzAsIDB4ZjksIDB4MzIsCisJMHgwZCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwMywgMHgwMCwgMHgzNywgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDAzLCAweGMwLCAweGZhLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDcsIDB4NDAsIDB4M2UsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHg5YywgMHgxZiwgMHhjMCwgMHhmOSwgMHg1YSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDAzLCAweGMwLCAweGY5LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDcsIDB4NDAsIDB4M2UsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5YywgMHgxZiwgMHhjMCwgMHhmOSwgMHgzYSwKKwkweGZmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweGFjLCAweDhmLCAweGNkLCAweGY5LCAweDUwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OWMsIDB4MGYsIDB4MDAsIDB4MmIsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDA3LCAweDgwLCAweDNlLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjAsIDB4MTIsIDB4MDAsIDB4MmIsIDB4M2EsCisJMHgwZiwgMHgwMCwgMHgyYiwgMHgxMiwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg4MiwgMHgwZCwgMHgyYiwgMHhiYywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDA3LCAweDgwLCAweDNlLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4YjAsIDB4MDIsIDB4YzAsIDB4ZjksIDB4NTIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwNywgMHgwMCwgMHgzYSwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDA3LCAweDQwLCAweDNhLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDcsIDB4ODAsIDB4M2EsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwNywgMHhjMCwgMHgzYSwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDljLCAweDBmLCAweDAwLCAweDJiLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwNywgMHgwMCwgMHgzZCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDA3LCAweDQwLCAweDNkLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MzYsIDB4MTIsIDB4ODQsIDB4MDEsIDB4MDAsIDB4YjAsIDB4MTIsIDB4MDAsIDB4MmIsIDB4YmEsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHhiMCwgMHgwMiwgMHhjMCwgMHhmOSwgMHg1MiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDljLCAweDBmLCAweDAwLCAweDAwLCAweDMyLAorCTB4MGMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4NzMsIDB4M2UsIDB4MDAsIDB4MzksCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwNywgMHgwMCwgMHgzMCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDljLCAweDFmLCAweGMwLCAweGY5LCAweDNhLAorCTB4NzAsIDB4MDAsIDB4M2IsIDB4MTIsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ODIsIDB4Y2QsIDB4ZjksIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYywgMHgwMywgMHgwMCwgMHgwMCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDA3LCAweDAwLCAweDMwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwNywgMHgwMCwgMHgzMCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDljLCAweDBmLCAweDAwLCAweDAwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTAsIDB4MGYsIDB4YzAsIDB4MjksIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5YywgMHgwMiwgMHhjMCwgMHhmOSwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE0LCAweDBmLCAweGMwLCAweDJjLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OWMsIDB4MDIsIDB4MDAsIDB4ZmEsIDB4MzIsCisJMHgxOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyYywgMHg3MywgMHg3ZSwgMHhmYSwgMHgzOSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDA3LCAweDAwLCAweDMwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4NDQsIDB4MTIsIDB4ODUsIDB4MDEsIDB4MDAsIDB4OWMsIDB4MWYsIDB4YzAsIDB4ZjksIDB4YmEsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg1MCwKKwkweDAxLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDljLCAweDBmLCAweDAwLCAweDM3LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MjUsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4ZDAsCisJMHgwZSwgMHgwMCwgMHg1MywgMHgxMiwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg4MiwgMHhjZCwgMHhmYSwgMHhiYywKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDA3LCAweDAwLCAweDAwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwNywgMHgwMCwgMHgwMCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDRkLCAweDEyLCAweDAwLCAweDAwLCAweDAwLCAweDljLCAweDNmLCAweGMwLCAweGY5LCAweDlhLAorCTB4MWMsIDB4MDAsIDB4NGQsIDB4MTIsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ODIsIDB4Y2QsIDB4ZmEsIDB4YmMsCisJMHgwMiwgMHgwMCwgMHgyNSwgMHgxMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5YywgMHg4ZiwgMHhjZCwgMHhmOSwgMHhkYSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDUwLAorCTB4MDEsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OWMsIDB4MGYsIDB4MDAsIDB4MzcsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgyNSwgMHgxMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhkMCwKKwkweDBlLCAweDAwLCAweDViLCAweDEyLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDgyLCAweGNkLCAweGZhLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHg1NywgMHgxMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5YywgMHgxZiwgMHhjMCwgMHhmOSwgMHg5YSwKKwkweDI2LCAweDAwLCAweDU3LCAweDEyLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDgyLCAweGNkLCAweGZhLCAweGJjLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4NTAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOCwgMHgwZiwgMHg0MCwgMHgyOSwgMHgzMiwKKwkweDAwLCAweGNjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE4LCAweDAyLCAweDAwLCAweDM2LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4NGMsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4ZDAsCisJMHgwMCwgMHgwMCwgMHg1NiwgMHgxMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhkMCwKKwkweDAwLCAweDAwLCAweDI5LCAweDEyLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGQwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDcsIDB4ODAsIDB4MTgsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMCwgMHgwZiwgMHgwMCwgMHgwMCwgMHgzMiwKKwkweGEyLCAweDYwLCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDU4LCAweDAzLCAweDAwLCAweDM3LCAweDMyLAorCTB4NmIsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWMsIDB4MDMsIDB4MDAsIDB4MzYsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5YywgMHgwZiwgMHg4MCwgMHgyYSwgMHgzMiwKKwkweDAwLCAweDAwLCAweDZiLCAweDEyLCAweDA0LCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDQwLCAweDI5LCAweGIyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4ODMsIDB4M2UsIDB4MDAsIDB4MzQsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0OCwgMHg4MywgMHgzZSwgMHgwMCwgMHgzNCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDUzLCAweDBhLCAweDAwLCAweDM0LAorCTB4MDAsIDB4MDAsIDB4NmMsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODgsIDB4MGYsIDB4NDAsIDB4MmIsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5MCwgMHgwZiwgMHgwMCwgMHgyOCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDk0LCAweDBmLCAweDAwLCAweDI5LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OTgsIDB4MGYsIDB4ODAsIDB4MmEsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOCwgMHgwMiwgMHhjMCwgMHhmOSwgMHgzMiwKKwkweDcxLCAweDEyLCAweDk3LCAweDEyLCAweDAwLCAweDAwLCAweDAwLCAweGIwLCAweDBmLCAweDAwLCAweDM2LCAweDkyLAorCTB4MDcsIDB4MDAsIDB4NzQsIDB4MTIsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4ODIsIDB4NGQsIDB4MjksIDB4YmMsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMCwgMHgxZiwgMHgwMCwgMHhmYSwgMHgzYSwKKwkweDAwLCAweDAwLCAweDY4LCAweDEyLCAweDAwLCAweDAwLCAweDAwLCAweDljLCAweDBmLCAweDgwLCAweDJhLCAweDkyLAorCTB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YWMsIDB4MGYsIDB4MDAsIDB4MzYsIDB4MzIsCisJMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5YywgMHgwMiwgMHgwMCwgMHgzNiwgMHgzMiwKKwkweDAwLCAweDAwLCAweDg0LCAweDEyLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGQwLAorCTB4MWYsIDB4MDAsIDB4N2EsIDB4MTIsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4ODIsIDB4Y2QsIDB4MjksIDB4YmMsCisJMHhjMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhYywgMHg4ZiwgMHhjZCwgMHhmYSwgMHgzYSwKKwkweDAwLCAweDAwLCAweDc2LCAweDEyLCAweDAwLCAweDAwLCAweDAwLCAweDljLCAweDEyLCAweGMwLCAweDI5LCAweDlhLAorCTB4MDAsIDB4MDAsIDB4M2EsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4ZDAsCisJMHgwMCwgMHgwMCwgMHgzMCwgMHgxMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhkMCwKKwkweDAwLCAweDAwLCAweDgyLCAweDEyLCAweDA0LCAweDAwLCAweDAwLCAweDgwLCAweDUyLCAweDhhLCAweGZhLCAweGJjLAorCTB4YTIsIDB4NjAsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTgsIDB4MDMsIDB4MDAsIDB4MzcsIDB4MzIsCisJMHg4MiwgMHgxMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1YywgMHgwMywgMHgwMCwgMHgzNiwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLCAweGEzLCAweDNlLCAweDAwLCAweDM0LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDgsIDB4YTMsIDB4M2UsIDB4MDAsIDB4MzQsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg1MywgMHgwYSwgMHgwMCwgMHgzNCwKKwkweDAwLCAweGNjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE0LCAweDBmLCAweDAwLCAweDM2LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4ZjcsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjNCwgMHgwMiwgMHhjMCwgMHhmYSwgMHgzMiwKKwkweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDljLCAweDBmLCAweDAwLCAweDM2LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YmMsIDB4MGYsIDB4NDAsIDB4MmYsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHg4YiwgMHgxMiwgMHgwNCwgMHgwMCwgMHgwMCwgMHg5YywgMHgxZiwgMHhjMCwgMHhmOSwgMHhiYywKKwkweDAwLCAweDAwLCAweDhhLCAweDEyLCAweDA0LCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDQwLCAweDJmLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4ODcsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDcsIDB4MDAsIDB4MmMsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHg4NywgMHgxMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwNywgMHgwMCwgMHgzNiwgMHg5MiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDA3LCAweDQwLCAweDJjLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDcsIDB4ODAsIDB4MmMsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwNywgMHhjMCwgMHgyYywgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDA3LCAweDAwLCAweDJkLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDcsIDB4NDAsIDB4MmQsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwNywgMHg4MCwgMHgyZCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDA3LCAweGMwLCAweDJkLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDcsIDB4YzAsIDB4ZmIsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwNywgMHg4MCwgMHgyZiwgMHgzMiwKKwkweDE4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDczLCAweDBhLCAweDAyLCAweDM5LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4ZTAsIDB4MDcsIDB4ODAsIDB4M2YsIDB4NTIsCisJMHhmZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHgwMywgMHgwMCwgMHgzNiwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDA3LCAweDAwLCAweGY5LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDcsIDB4NDAsIDB4MjgsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwNywgMHg4MCwgMHhmOCwgMHgzMiwKKwkweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDljLCAweDBmLCAweDAwLCAweDM2LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YmMsIDB4MGYsIDB4YzAsIDB4MmIsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHhhMCwgMHgxMiwgMHgwNCwgMHgwMCwgMHgwMCwgMHg5YywgMHgxZiwgMHhjMCwgMHhmOSwgMHhiYywKKwkweDAwLCAweDAwLCAweDlmLCAweDEyLCAweDA0LCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweGMwLCAweDJiLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4OWMsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDcsIDB4YzAsIDB4MjgsIDB4OTIsCisJMHgwMCwgMHgwMCwgMHg5YywgMHgxMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwNywgMHgwMCwgMHgzNiwgMHg5MiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDA3LCAweDQwLCAweGY5LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDcsIDB4NDAsIDB4MjksIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwNywgMHg4MCwgMHgyOSwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDA3LCAweGMwLCAweDI5LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDcsIDB4MDAsIDB4MmEsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwNywgMHg0MCwgMHgyYSwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDA3LCAweDgwLCAweGY5LCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDcsIDB4YzAsIDB4MmEsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwNywgMHgwMCwgMHgyYiwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDA3LCAweDQwLCAweDJiLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDcsIDB4ODAsIDB4MmIsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwNywgMHhjMCwgMHhmYiwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDg4LCAweDAyLCAweDAwLCAweGZiLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OWMsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkOCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgzMiwKKwkweDAwLCAweDAwLCAweGIxLCAweDEyLCAweDlmLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDkwLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDcsIDB4NDAsIDB4OTAsIDB4NTIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwNywgMHg4MCwgMHg5MCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE5LCAweDAwLCAweDAwLCAweDA3LCAweDQwLCAweDkwLCAweDUyLAorCTB4MDAsIDB4MDAsIDB4YjMsIDB4MTIsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NDgsIDB4ZjIsIDB4MDEsIDB4MDAsIDB4YjQsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHg5MCwgMHgzMiwKKwkweDAwLCAweDAwLCAweGI1LCAweDEyLCAweDEyLCAweDAwLCAweDAwLCAweDljLCAweDBmLCAweGMwLCAweDIxLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4NTAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiNCwgMHgwZiwgMHg0MCwgMHhmYiwgMHgzNSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDljLCAweDAyLCAweDAwLCAweDAwLCAweDMyLAorCTB4NGMsIDB4NDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTgsIDB4MDIsIDB4MDAsIDB4MzYsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwNywgMHg4MCwgMHgyYSwgMHgzMiwKKwkweDAwLCAweDAwLCAweGFkLCAweDEyLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGQwLAorCTB4MDAsIDB4MDAsIDB4YjMsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4ZDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYywgMHhjYiwgMHhjMSwgMHhiMCwgMHgzNCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDljLCAweDAyLCAweDAwLCAweDAwLCAweDMyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHhjNCwgMHgxMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyOCwgMHgwOSwgMHhjMCwgMHhiMCwgMHhkMiwKKwkweDAwLCAweDAwLCAweGJlLCAweDEyLCAweDA0LCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDgwLCAweDkyLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4YzIsIDB4MTIsIDB4MTIsIDB4MDAsIDB4MDAsIDB4OWMsIDB4MGYsIDB4YzAsIDB4MjEsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHhjNCwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGIwLCAweDAyLCAweDAwLCAweDAwLCAweDMyLAorCTB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTAsIDB4YzIsIDB4MGEsIDB4MDAsIDB4MzksCisJMHgwMCwgMHgwMCwgMHhjOCwgMHgxMiwgMHgwNCwgMHgwMSwgMHgwMCwgMHgyOCwgMHgwOSwgMHgzNCwgMHhiMCwgMHhiYSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDI4LCAweDA5LCAweDAwLCAweDAwLCAweDUyLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTgsIDB4MjIsIDB4MDAsIDB4MmIsIDB4MzcsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4NCwgMHhjMCwgMHgzNywgMHhhYywgMHhiMCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBjLCAweDBiLCAweDAwLCAweDAwLCAweDMyLAorCTB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzgsIDB4YTksIDB4NGQsIDB4YjAsIDB4MzAsCisJMHgwMCwgMHgwMCwgMHhkOCwgMHgxMiwgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHg0MCwgMHhiMCwgMHhiNiwKKwkweDAwLCAweDAwLCAweGNkLCAweDEyLCAweDEyLCAweDAwLCAweDAwLCAweDAwLCAweDA5LCAweDQwLCAweDIwLCAweGIyLAorCTB4MDAsIDB4MDAsIDB4Y2UsIDB4MTIsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDksIDB4NDAsIDB4MjAsIDB4YjIsCisJMHgwMCwgMHgwMCwgMHhkMSwgMHgxMiwgMHg5ZiwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHg5MCwgMHhiMiwKKwkweDAwLCAweDAwLCAweGQwLCAweDEyLCAweDEyLCAweDAwLCAweDAwLCAweDA4LCAweDA5LCAweDQwLCAweDIwLCAweGIyLAorCTB4MGQsIDB4MDAsIDB4Y2QsIDB4MTIsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4ZTQsIDB4MTYsIDB4YjgsCisJMHgwMiwgMHgwMCwgMHhjZCwgMHgxMiwgMHgwNCwgMHgwMSwgMHgwMCwgMHhiYywgMHgwZiwgMHgyNCwgMHgxNywgMHhiOCwKKwkweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGJjLCAweDBmLCAweDY0LCAweDE2LCAweDM4LAorCTB4MDAsIDB4MDAsIDB4Y2QsIDB4MTIsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MjIsIDB4YzAsIDB4ZmIsIDB4YmMsCisJMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMCwgMHhjMiwgMHgwYSwgMHgwMCwgMHgzOSwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDNiLCAweDQwLCAweGIwLCAweDMzLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4Y2QsIDB4NGEsIDB4ZDAsIDB4MzUsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlNywgMHgyNSwgMHgwMSwgMHgzMiwKKwkweDAwLCAweDQyLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDg3LCAweDhkLCAweDJhLCAweDNhLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDAsIDB4YjAsIDB4MzIsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwMCwgMHhkMCwgMHgzMiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDAxLCAweDAwLCAweDQ4LCAweGYyLCAweGMxLCAweDM4LCAweDU0LAorCTB4MDAsIDB4MDAsIDB4ZGMsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCisJMHgwMCwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKK30sCit7CisJMHgwMCwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKK30sCit9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3N4Zy9zeGcuYyBiL2RyaXZlcnMvc3RhZ2luZy9zeGcvc3hnLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmNjYmVlOAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9zeGcvc3hnLmMKQEAgLTAsMCArMSwzNjI0IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAtMjAwOCBBbGFjcml0ZWNoLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkCisgKiAgICB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBTEFDUklURUNILCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQUxBQ1JJVEVDSCwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCisgKiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqCisgKiBUaGUgdmlld3MgYW5kIGNvbmNsdXNpb25zIGNvbnRhaW5lZCBpbiB0aGUgc29mdHdhcmUgYW5kIGRvY3VtZW50YXRpb24KKyAqIGFyZSB0aG9zZSBvZiB0aGUgYXV0aG9ycyBhbmQgc2hvdWxkIG5vdCBiZSBpbnRlcnByZXRlZCBhcyByZXByZXNlbnRpbmcKKyAqIG9mZmljaWFsIHBvbGljaWVzLCBlaXRoZXIgZXhwcmVzc2VkIG9yIGltcGxpZWQsIG9mIEFsYWNyaXRlY2gsIEluYy4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisgKiBGSUxFTkFNRTogc3hnLmMKKyAqCisgKiBUaGUgU1hHIGRyaXZlciBmb3IgQWxhY3JpdGVjaCdzIDEwR2JlIHByb2R1Y3RzLgorICoKKyAqIE5PVEU6IFRoaXMgaXMgdGhlIHN0YW5kYXJkLCBub24tYWNjZWxlcmF0ZWQgdmVyc2lvbiBvZiBBbGFjcml0ZWNoJ3MKKyAqICAgICAgIElTLU5JQyBkcml2ZXIuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KKyNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2V0aHRvb2wuaD4KKyNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9taWkuaD4KKworI2RlZmluZSBTTElDX0RVTVBfRU5BQkxFRAkJMAorI2RlZmluZSBTTElDX0dFVF9TVEFUU19FTkFCTEVECQkwCisjZGVmaW5lIExJTlVYX0ZSRUVTX0FEQVBURVJfUkVTT1VSQ0VTCTEKKyNkZWZpbmUgU1hHX09GRkxPQURfSVBfQ0hFQ0tTVU0JCTAKKyNkZWZpbmUgU1hHX1BPV0VSX01BTkFHRU1FTlRfRU5BQkxFRAkwCisjZGVmaW5lIFZQQ0kJCQkJMAorI2RlZmluZSBEQkcJCQkJMQorI2RlZmluZSBBVEtfREVCVUcJCQkxCisKKyNpbmNsdWRlICJzeGdfb3MuaCIKKyNpbmNsdWRlICJzeGdody5oIgorI2luY2x1ZGUgInN4Z2hpZi5oIgorI2luY2x1ZGUgInN4Zy5oIgorI2luY2x1ZGUgInN4Z2RiZy5oIgorCisjaW5jbHVkZSAic3hncGh5Y29kZS5oIgorI2luY2x1ZGUgInNhaGFyYWRiZ2Rvd25sb2FkLmgiCisKK3N0YXRpYyBpbnQgc3hnX2FsbG9jYXRlX2J1ZmZlcl9tZW1vcnkocF9hZGFwdGVyX3QgYWRhcHRlciwgdTMyIFNpemUsCisJCQkJICAgICAgU1hHX0JVRkZFUl9UWVBFIEJ1ZmZlclR5cGUpOworc3RhdGljIHZvaWQgc3hnX2FsbG9jYXRlX3JjdmJsb2NrX2NvbXBsZXRlKHBfYWRhcHRlcl90IGFkYXB0ZXIsIHZvaWQgKlJjdkJsb2NrLAorCQkJCQkgICBkbWFfYWRkcl90IFBoeXNpY2FsQWRkcmVzcywKKwkJCQkJICAgdTMyIExlbmd0aCk7CitzdGF0aWMgdm9pZCBzeGdfYWxsb2NhdGVfc2dsX2J1ZmZlcl9jb21wbGV0ZShwX2FkYXB0ZXJfdCBhZGFwdGVyLAorCQkJCQkgICAgIFBTWEdfU0NBVFRFUl9HQVRIRVIgU3hnU2dsLAorCQkJCQkgICAgIGRtYV9hZGRyX3QgUGh5c2ljYWxBZGRyZXNzLAorCQkJCQkgICAgIHUzMiBMZW5ndGgpOworCitzdGF0aWMgdm9pZCBzeGdfbWNhc3RfaW5pdF9jcmMzMih2b2lkKTsKKworc3RhdGljIGludCBzeGdfZW50cnlfb3BlbihwX25ldF9kZXZpY2UgZGV2KTsKK3N0YXRpYyBpbnQgc3hnX2VudHJ5X2hhbHQocF9uZXRfZGV2aWNlIGRldik7CitzdGF0aWMgaW50IHN4Z19pb2N0bChwX25ldF9kZXZpY2UgZGV2LCBzdHJ1Y3QgaWZyZXEgKnJxLCBpbnQgY21kKTsKK3N0YXRpYyBpbnQgc3hnX3NlbmRfcGFja2V0cyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBwX25ldF9kZXZpY2UgZGV2KTsKK3N0YXRpYyBpbnQgc3hnX3RyYW5zbWl0X3BhY2tldChwX2FkYXB0ZXJfdCBhZGFwdGVyLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKK3N0YXRpYyB2b2lkIHN4Z19kdW1iX3NnbChQU0NBVFRFUl9HQVRIRVJfTElTVCBwU2dsLCBQU1hHX1NDQVRURVJfR0FUSEVSIFN4Z1NnbCk7CisKK3N0YXRpYyB2b2lkIHN4Z19oYW5kbGVfaW50ZXJydXB0KHBfYWRhcHRlcl90IGFkYXB0ZXIpOworc3RhdGljIGludCBzeGdfcHJvY2Vzc19pc3IocF9hZGFwdGVyX3QgYWRhcHRlciwgdTMyIE1lc3NhZ2VJZCk7CitzdGF0aWMgdTMyIHN4Z19wcm9jZXNzX2V2ZW50X3F1ZXVlKHBfYWRhcHRlcl90IGFkYXB0ZXIsIHUzMiBSc3NJZCk7CitzdGF0aWMgdm9pZCBzeGdfY29tcGxldGVfc2xvd19zZW5kKHBfYWRhcHRlcl90IGFkYXB0ZXIpOworc3RhdGljIHN0cnVjdCBza19idWZmICpzeGdfc2xvd19yZWNlaXZlKHBfYWRhcHRlcl90IGFkYXB0ZXIsIFBTWEdfRVZFTlQgRXZlbnQpOworc3RhdGljIHZvaWQgc3hnX3Byb2Nlc3NfcmN2X2Vycm9yKHBfYWRhcHRlcl90IGFkYXB0ZXIsIHUzMiBFcnJvclN0YXR1cyk7CitzdGF0aWMgYm9vbCBzeGdfbWFjX2ZpbHRlcihwX2FkYXB0ZXJfdCBhZGFwdGVyLAorCQkJICAgcF9ldGhlcl9oZWFkZXIgRXRoZXJIZHIsIHVzaG9ydCBsZW5ndGgpOworCisjaWYgU0xJQ19HRVRfU1RBVFNfRU5BQkxFRAorc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpzeGdfZ2V0X3N0YXRzKHBfbmV0X2RldmljZSBkZXYpOworI2VuZGlmCisKK3N0YXRpYyBpbnQgc3hnX21hY19zZXRfYWRkcmVzcyhwX25ldF9kZXZpY2UgZGV2LCB2b2lkICpwdHIpOworCitzdGF0aWMgdm9pZCBzeGdfYWRhcHRlcl9zZXRfaHdhZGRyKHBfYWRhcHRlcl90IGFkYXB0ZXIpOworCitzdGF0aWMgdm9pZCBzeGdfdW5tYXBfbW1pb19zcGFjZShwX2FkYXB0ZXJfdCBhZGFwdGVyKTsKK3N0YXRpYyB2b2lkIHN4Z19tY2FzdF9zZXRfbWFzayhwX2FkYXB0ZXJfdCBhZGFwdGVyKTsKKworc3RhdGljIGludCBzeGdfaW5pdGlhbGl6ZV9hZGFwdGVyKHBfYWRhcHRlcl90IGFkYXB0ZXIpOworc3RhdGljIHZvaWQgc3hnX3N0b2NrX3Jjdl9idWZmZXJzKHBfYWRhcHRlcl90IGFkYXB0ZXIpOworc3RhdGljIHZvaWQgc3hnX2NvbXBsZXRlX2Rlc2NyaXB0b3JfYmxvY2tzKHBfYWRhcHRlcl90IGFkYXB0ZXIsCisJCQkJCSAgIHVuc2lnbmVkIGNoYXIgSW5kZXgpOworc3RhdGljIGludCBzeGdfaW5pdGlhbGl6ZV9saW5rKHBfYWRhcHRlcl90IGFkYXB0ZXIpOworc3RhdGljIGludCBzeGdfcGh5X2luaXQocF9hZGFwdGVyX3QgYWRhcHRlcik7CitzdGF0aWMgdm9pZCBzeGdfbGlua19ldmVudChwX2FkYXB0ZXJfdCBhZGFwdGVyKTsKK3N0YXRpYyBTWEdfTElOS19TVEFURSBzeGdfZ2V0X2xpbmtfc3RhdGUocF9hZGFwdGVyX3QgYWRhcHRlcik7CitzdGF0aWMgdm9pZCBzeGdfbGlua19zdGF0ZShwX2FkYXB0ZXJfdCBhZGFwdGVyLCBTWEdfTElOS19TVEFURSBMaW5rU3RhdGUpOworc3RhdGljIGludCBzeGdfd3JpdGVfbWRpb19yZWcocF9hZGFwdGVyX3QgYWRhcHRlciwKKwkJCSAgICAgIHUzMiBEZXZBZGRyLCB1MzIgUmVnQWRkciwgdTMyIFZhbHVlKTsKK3N0YXRpYyBpbnQgc3hnX3JlYWRfbWRpb19yZWcocF9hZGFwdGVyX3QgYWRhcHRlciwKKwkJCSAgICAgdTMyIERldkFkZHIsIHUzMiBSZWdBZGRyLCB1MzIgKnBWYWx1ZSk7CitzdGF0aWMgdm9pZCBzeGdfbWNhc3Rfc2V0X2xpc3QocF9uZXRfZGV2aWNlIGRldik7CisKKyNkZWZpbmUgWFhYVE9ETyAwCisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgc3hnX2ZpcnN0X2luaXQgPSAxOworc3RhdGljIGNoYXIgKnN4Z19iYW5uZXIgPQorICAgICJBbGFjcml0ZWNoIFNMSUMgVGVjaG5vbG9neSh0bSkgU2VydmVyIGFuZCBTdG9yYWdlIDEwR2JlIEFjY2VsZXJhdG9yIChOb24tQWNjZWxlcmF0ZWQpXG4iOworCitzdGF0aWMgaW50IHN4Z19kZWJ1ZyA9IDE7CitzdGF0aWMgaW50IGRlYnVnID0gLTE7CitzdGF0aWMgcF9uZXRfZGV2aWNlIGhlYWRfbmV0ZGV2aWNlID0gTlVMTDsKKworc3RhdGljIHN4Z2Jhc2VfZHJpdmVyX3Qgc3hnX2dsb2JhbCA9IHsKKwkuZHluYW1pY19pbnRhZ2cgPSAxLAorfTsKK3N0YXRpYyBpbnQgaW50YWdnX2RlbGF5ID0gMTAwOworc3RhdGljIHUzMiBkeW5hbWljX2ludGFnZyA9IDA7CisKKyNkZWZpbmUgRFJWX05BTUUJInN4ZyIKKyNkZWZpbmUgRFJWX1ZFUlNJT04JIjEuMC4xIgorI2RlZmluZSBEUlZfQVVUSE9SCSJBbGFjcml0ZWNoLCBJbmMuIEVuZ2luZWVyaW5nIgorI2RlZmluZSBEUlZfREVTQ1JJUFRJT04JIkFsYWNyaXRlY2ggU0xJQyBUZWNob25vbG9neSh0bSkgTm9uLUFjY2VsZXJhdGVkIDEwR2JlIERyaXZlciIKKyNkZWZpbmUgRFJWX0NPUFlSSUdIVAkiQ29weXJpZ2h0IDIwMDAtMjAwOCBBbGFjcml0ZWNoLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLiIKKworTU9EVUxFX0FVVEhPUihEUlZfQVVUSE9SKTsKK01PRFVMRV9ERVNDUklQVElPTihEUlZfREVTQ1JJUFRJT04pOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCittb2R1bGVfcGFyYW0oZHluYW1pY19pbnRhZ2csIGludCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKGR5bmFtaWNfaW50YWdnLCAiRHluYW1pYyBJbnRlcnJ1cHQgQWdncmVnYXRpb24gU2V0dGluZyIpOworbW9kdWxlX3BhcmFtKGludGFnZ19kZWxheSwgaW50LCAwKTsKK01PRFVMRV9QQVJNX0RFU0MoaW50YWdnX2RlbGF5LCAidVNlYyBJbnRlcnJ1cHQgQWdncmVnYXRpb24gRGVsYXkiKTsKKworc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHN4Z19wY2lfdGJsW10gX19kZXZpbml0ZGF0YSA9IHsKKwl7UENJX0RFVklDRShTWEdfVkVORE9SX0lELCBTWEdfREVWSUNFX0lEKX0sCisJezAsfQorfTsKKworTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIHN4Z19wY2lfdGJsKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzeGdfcmVnMzJfd3JpdGUodm9pZCBfX2lvbWVtICpyZWcsIHUzMiB2YWx1ZSwgYm9vbCBmbHVzaCkKK3sKKwl3cml0ZWwodmFsdWUsIHJlZyk7CisJaWYgKGZsdXNoKQorCQltYigpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc3hnX3JlZzY0X3dyaXRlKHBfYWRhcHRlcl90IGFkYXB0ZXIsIHZvaWQgX19pb21lbSAqcmVnLAorCQkJCSAgIHU2NCB2YWx1ZSwgdTMyIGNwdSkKK3sKKwl1MzIgdmFsdWVfaGlnaCA9ICh1MzIpICh2YWx1ZSA+PiAzMik7CisJdTMyIHZhbHVlX2xvdyA9ICh1MzIpICh2YWx1ZSAmIDB4MDAwMDAwMDBGRkZGRkZGRik7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZhZGFwdGVyLT5CaXQ2NFJlZ0xvY2ssIGZsYWdzKTsKKwl3cml0ZWwodmFsdWVfaGlnaCwgKHZvaWQgX19pb21lbSAqKSgmYWRhcHRlci0+VWNvZGVSZWdzW2NwdV0uVXBwZXIpKTsKKwl3cml0ZWwodmFsdWVfbG93LCByZWcpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFkYXB0ZXItPkJpdDY0UmVnTG9jaywgZmxhZ3MpOworfQorCitzdGF0aWMgdm9pZCBzeGdfaW5pdF9kcml2ZXIodm9pZCkKK3sKKwlpZiAoc3hnX2ZpcnN0X2luaXQpIHsKKwkJREJHX0VSUk9SKCJzeGc6ICVzIHN4Z19maXJzdF9pbml0IHNldCBqaWZmaWVzWyVseF1cbiIsCisJCQkgIF9fRlVOQ1RJT05fXywgamlmZmllcyk7CisJCXN4Z19maXJzdF9pbml0ID0gMDsKKwkJc3Bpbl9sb2NrX2luaXQoJnN4Z19nbG9iYWwuZHJpdmVyX2xvY2spOworCX0KK30KKworc3RhdGljIHZvaWQgc3hnX2RiZ19tYWNhZGRycyhwX2FkYXB0ZXJfdCBhZGFwdGVyKQoreworCURCR19FUlJPUigiICAoJXMpIGN1cnIgJTIuMlg6JTIuMlg6JTIuMlg6JTIuMlg6JTIuMlg6JTIuMlhcbiIsCisJCSAgYWRhcHRlci0+bmV0ZGV2LT5uYW1lLCBhZGFwdGVyLT5jdXJybWFjYWRkclswXSwKKwkJICBhZGFwdGVyLT5jdXJybWFjYWRkclsxXSwgYWRhcHRlci0+Y3Vycm1hY2FkZHJbMl0sCisJCSAgYWRhcHRlci0+Y3Vycm1hY2FkZHJbM10sIGFkYXB0ZXItPmN1cnJtYWNhZGRyWzRdLAorCQkgIGFkYXB0ZXItPmN1cnJtYWNhZGRyWzVdKTsKKwlEQkdfRVJST1IoIiAgKCVzKSBtYWMgICUyLjJYOiUyLjJYOiUyLjJYOiUyLjJYOiUyLjJYOiUyLjJYXG4iLAorCQkgIGFkYXB0ZXItPm5ldGRldi0+bmFtZSwgYWRhcHRlci0+bWFjYWRkclswXSwKKwkJICBhZGFwdGVyLT5tYWNhZGRyWzFdLCBhZGFwdGVyLT5tYWNhZGRyWzJdLAorCQkgIGFkYXB0ZXItPm1hY2FkZHJbM10sIGFkYXB0ZXItPm1hY2FkZHJbNF0sCisJCSAgYWRhcHRlci0+bWFjYWRkcls1XSk7CisJcmV0dXJuOworfQorCisvLyBTWEcgR2xvYmFscworc3RhdGljIFNYR19EUklWRVIgU3hnRHJpdmVyOworCisjaWZkZWYgIEFUS0RCRworc3RhdGljIHN4Z190cmFjZV9idWZmZXJfdCBMU3hnVHJhY2VCdWZmZXI7CisjZW5kaWYgLyogQVRLREJHICovCitzdGF0aWMgc3hnX3RyYWNlX2J1ZmZlcl90ICpTeGdUcmFjZUJ1ZmZlciA9IE5VTEw7CisKKy8qCisgKiBzeGdfZG93bmxvYWRfbWljcm9jb2RlCisgKgorICogRG93bmxvYWQgTWljcm9jb2RlIHRvIFNhaGFyYSBhZGFwdGVyCisgKgorICogQXJndW1lbnRzIC0KKyAqCQlhZGFwdGVyCQktIEEgcG9pbnRlciB0byBvdXIgYWRhcHRlciBzdHJ1Y3R1cmUKKyAqCQlVY29kZVNlbAktIG1pY3JvY29kZSBmaWxlIHNlbGVjdGlvbgorICoKKyAqIFJldHVybgorICoJaW50CisgKi8KK3N0YXRpYyBib29sIHN4Z19kb3dubG9hZF9taWNyb2NvZGUocF9hZGFwdGVyX3QgYWRhcHRlciwgU1hHX1VDT0RFX1NFTCBVY29kZVNlbCkKK3sKKwlQU1hHX0hXX1JFR1MgSHdSZWdzID0gYWRhcHRlci0+SHdSZWdzOworCXUzMiBTZWN0aW9uOworCXUzMiBUaGlzU2VjdGlvblNpemU7CisJdTMyICpJbnN0cnVjdGlvbiA9IE5VTEw7CisJdTMyIEJhc2VBZGRyZXNzLCBBZGRyZXNzT2Zmc2V0LCBBZGRyZXNzOworLy8gICAgICB1MzIgICAgICAgICAgICAgICAgICAgICAgICAgRmFpbHVyZTsKKwl1MzIgVmFsdWVSZWFkOworCXUzMiBpOworCXUzMiBudW1TZWN0aW9ucyA9IDA7CisJdTMyIHNlY3Rpb25TaXplWzE2XTsKKwl1MzIgc2VjdGlvblN0YXJ0WzE2XTsKKworCVNYR19UUkFDRShUUkFDRV9TWEcsIFN4Z1RyYWNlQnVmZmVyLCBUUkFDRV9OT0lTWSwgIkRubGRVY29kIiwKKwkJICBhZGFwdGVyLCAwLCAwLCAwKTsKKwlEQkdfRVJST1IoInN4ZzogJXMgRU5URVJcbiIsIF9fRlVOQ1RJT05fXyk7CisKKwlzd2l0Y2ggKFVjb2RlU2VsKSB7CisJY2FzZSBTWEdfVUNPREVfU0FIQVJBOgkvLyBTYWhhcmEgb3BlcmF0aW9uYWwgdWNvZGUKKwkJbnVtU2VjdGlvbnMgPSBTTnVtU2VjdGlvbnM7CisJCWZvciAoaSA9IDA7IGkgPCBudW1TZWN0aW9uczsgaSsrKSB7CisJCQlzZWN0aW9uU2l6ZVtpXSA9IFNTZWN0aW9uU2l6ZVtpXTsKKwkJCXNlY3Rpb25TdGFydFtpXSA9IFNTZWN0aW9uU3RhcnRbaV07CisJCX0KKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcHJpbnRrKEtFUk5fRVJSIEtCVUlMRF9NT0ROQU1FCisJCSAgICAgICAiOiBXb2FoLCBiaWcgZXJyb3Igd2l0aCB0aGUgbWljcm9jb2RlIVxuIik7CisJCWJyZWFrOworCX0KKworCURCR19FUlJPUigic3hnOiBSRVNFVCBUSEUgQ0FSRFxuIik7CisJLy8gRmlyc3QsIHJlc2V0IHRoZSBjYXJkCisJV1JJVEVfUkVHKEh3UmVncy0+UmVzZXQsIDB4REVBRCwgRkxVU0gpOworCisJLy8gRG93bmxvYWQgZWFjaCBzZWN0aW9uIG9mIHRoZSBtaWNyb2NvZGUgYXMgc3BlY2lmaWVkIGluCisJLy8gaXRzIGRvd25sb2FkIGZpbGUuICBUaGUgKmRvd25sb2FkLmMgZmlsZSBpcyBnZW5lcmF0ZWQgdXNpbmcKKwkvLyB0aGUgc2FoYXJhb2JqdG9jIGZhY2lsaXR5IHdoaWNoIGNvbnZlcnRzIHRoZSBtZXRhc3RlcCAub2JqCisJLy8gZmlsZSB0byBhIC5jIGZpbGUgd2hpY2ggY29udGFpbnMgYSB0d28gZGltZW50aW9uYWwgYXJyYXkuCisJZm9yIChTZWN0aW9uID0gMDsgU2VjdGlvbiA8IG51bVNlY3Rpb25zOyBTZWN0aW9uKyspIHsKKwkJREJHX0VSUk9SKCJzeGc6IFNFQ1RJT04gIyAlZFxuIiwgU2VjdGlvbik7CisJCXN3aXRjaCAoVWNvZGVTZWwpIHsKKwkJY2FzZSBTWEdfVUNPREVfU0FIQVJBOgorCQkJSW5zdHJ1Y3Rpb24gPSAodTMyICopICYgU2FoYXJhVUNvZGVbU2VjdGlvbl1bMF07CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCUFTU0VSVCgwKTsKKwkJCWJyZWFrOworCQl9CisJCUJhc2VBZGRyZXNzID0gc2VjdGlvblN0YXJ0W1NlY3Rpb25dOworCQlUaGlzU2VjdGlvblNpemUgPSBzZWN0aW9uU2l6ZVtTZWN0aW9uXSAvIDEyOwkvLyBTaXplIGluIGluc3RydWN0aW9ucworCQlmb3IgKEFkZHJlc3NPZmZzZXQgPSAwOyBBZGRyZXNzT2Zmc2V0IDwgVGhpc1NlY3Rpb25TaXplOworCQkgICAgIEFkZHJlc3NPZmZzZXQrKykgeworCQkJQWRkcmVzcyA9IEJhc2VBZGRyZXNzICsgQWRkcmVzc09mZnNldDsKKwkJCUFTU0VSVCgoQWRkcmVzcyAmIH5NSUNST0NPREVfQUREUkVTU19NQVNLKSA9PSAwKTsKKwkJCS8vIFdyaXRlIGluc3RydWN0aW9uIGJpdHMgMzEgLSAwCisJCQlXUklURV9SRUcoSHdSZWdzLT5VY29kZURhdGFMb3csICpJbnN0cnVjdGlvbiwgRkxVU0gpOworCQkJLy8gV3JpdGUgaW5zdHJ1Y3Rpb24gYml0cyA2My0zMgorCQkJV1JJVEVfUkVHKEh3UmVncy0+VWNvZGVEYXRhTWlkZGxlLCAqKEluc3RydWN0aW9uICsgMSksCisJCQkJICBGTFVTSCk7CisJCQkvLyBXcml0ZSBpbnN0cnVjdGlvbiBiaXRzIDk1LTY0CisJCQlXUklURV9SRUcoSHdSZWdzLT5VY29kZURhdGFIaWdoLCAqKEluc3RydWN0aW9uICsgMiksCisJCQkJICBGTFVTSCk7CisJCQkvLyBXcml0ZSBpbnN0cnVjdGlvbiBhZGRyZXNzIHdpdGggdGhlIFdSSVRFIGJpdCBzZXQKKwkJCVdSSVRFX1JFRyhId1JlZ3MtPlVjb2RlQWRkciwKKwkJCQkgIChBZGRyZXNzIHwgTUlDUk9DT0RFX0FERFJFU1NfV1JJVEUpLCBGTFVTSCk7CisJCQkvLyBTYWhhcmEgYnVnIGluIHRoZSB1Y29kZSBkb3dubG9hZCBsb2dpYyAtIHRoZSB3cml0ZSB0byBEYXRhTG93CisJCQkvLyBmb3IgdGhlIG5leHQgaW5zdHJ1Y3Rpb24gY291bGQgZ2V0IGNvcnJ1cHRlZC4gIFRvIGF2b2lkIHRoaXMsCisJCQkvLyB3cml0ZSB0byBEYXRhTG93IGFnYWluIGZvciB0aGlzIGluc3RydWN0aW9uICh3aGljaCBtYXkgZ2V0CisJCQkvLyBjb3JydXB0ZWQsIGJ1dCBpdCBkb2Vzbid0IG1hdHRlciksIHRoZW4gaW5jcmVtZW50IHRoZSBhZGRyZXNzCisJCQkvLyBhbmQgd3JpdGUgdGhlIGRhdGEgZm9yIHRoZSBuZXh0IGluc3RydWN0aW9uIHRvIERhdGFMb3cuICBUaGF0CisJCQkvLyB3cml0ZSBzaG91bGQgc3VjY2VlZC4KKwkJCVdSSVRFX1JFRyhId1JlZ3MtPlVjb2RlRGF0YUxvdywgKkluc3RydWN0aW9uLCBUUlVFKTsKKwkJCS8vIEFkdmFuY2UgMyB1MzJTIHRvIHN0YXJ0IG9mIG5leHQgaW5zdHJ1Y3Rpb24KKwkJCUluc3RydWN0aW9uICs9IDM7CisJCX0KKwl9CisJLy8gTm93IHJlcGVhdCB0aGUgZW50aXJlIG9wZXJhdGlvbiByZWFkaW5nIHRoZSBpbnN0cnVjdGlvbiBiYWNrIGFuZAorCS8vIGNoZWNraW5nIGZvciBwYXJpdHkgZXJyb3JzCisJZm9yIChTZWN0aW9uID0gMDsgU2VjdGlvbiA8IG51bVNlY3Rpb25zOyBTZWN0aW9uKyspIHsKKwkJREJHX0VSUk9SKCJzeGc6IGNoZWNrIFNFQ1RJT04gIyAlZFxuIiwgU2VjdGlvbik7CisJCXN3aXRjaCAoVWNvZGVTZWwpIHsKKwkJY2FzZSBTWEdfVUNPREVfU0FIQVJBOgorCQkJSW5zdHJ1Y3Rpb24gPSAodTMyICopICYgU2FoYXJhVUNvZGVbU2VjdGlvbl1bMF07CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCUFTU0VSVCgwKTsKKwkJCWJyZWFrOworCQl9CisJCUJhc2VBZGRyZXNzID0gc2VjdGlvblN0YXJ0W1NlY3Rpb25dOworCQlUaGlzU2VjdGlvblNpemUgPSBzZWN0aW9uU2l6ZVtTZWN0aW9uXSAvIDEyOwkvLyBTaXplIGluIGluc3RydWN0aW9ucworCQlmb3IgKEFkZHJlc3NPZmZzZXQgPSAwOyBBZGRyZXNzT2Zmc2V0IDwgVGhpc1NlY3Rpb25TaXplOworCQkgICAgIEFkZHJlc3NPZmZzZXQrKykgeworCQkJQWRkcmVzcyA9IEJhc2VBZGRyZXNzICsgQWRkcmVzc09mZnNldDsKKwkJCS8vIFdyaXRlIHRoZSBhZGRyZXNzIHdpdGggdGhlIFJFQUQgYml0IHNldAorCQkJV1JJVEVfUkVHKEh3UmVncy0+VWNvZGVBZGRyLAorCQkJCSAgKEFkZHJlc3MgfCBNSUNST0NPREVfQUREUkVTU19SRUFEKSwgRkxVU0gpOworCQkJLy8gUmVhZCBpdCBiYWNrIGFuZCBjaGVjayBwYXJpdHkgYml0LgorCQkJUkVBRF9SRUcoSHdSZWdzLT5VY29kZUFkZHIsIFZhbHVlUmVhZCk7CisJCQlpZiAoVmFsdWVSZWFkICYgTUlDUk9DT0RFX0FERFJFU1NfUEFSSVRZKSB7CisJCQkJREJHX0VSUk9SKCJzeGc6ICVzIFBBUklUWSBFUlJPUlxuIiwKKwkJCQkJICBfX0ZVTkNUSU9OX18pOworCisJCQkJcmV0dXJuIChGQUxTRSk7CS8vIFBhcml0eSBlcnJvcgorCQkJfQorCQkJQVNTRVJUKChWYWx1ZVJlYWQgJiBNSUNST0NPREVfQUREUkVTU19NQVNLKSA9PSBBZGRyZXNzKTsKKwkJCS8vIFJlYWQgdGhlIGluc3RydWN0aW9uIGJhY2sgYW5kIGNvbXBhcmUKKwkJCVJFQURfUkVHKEh3UmVncy0+VWNvZGVEYXRhTG93LCBWYWx1ZVJlYWQpOworCQkJaWYgKFZhbHVlUmVhZCAhPSAqSW5zdHJ1Y3Rpb24pIHsKKwkJCQlEQkdfRVJST1IoInN4ZzogJXMgTUlTQ09NUEFSRSBMT1dcbiIsCisJCQkJCSAgX19GVU5DVElPTl9fKTsKKwkJCQlyZXR1cm4gKEZBTFNFKTsJLy8gTWlzY29tcGFyZQorCQkJfQorCQkJUkVBRF9SRUcoSHdSZWdzLT5VY29kZURhdGFNaWRkbGUsIFZhbHVlUmVhZCk7CisJCQlpZiAoVmFsdWVSZWFkICE9ICooSW5zdHJ1Y3Rpb24gKyAxKSkgeworCQkJCURCR19FUlJPUigic3hnOiAlcyBNSVNDT01QQVJFIE1JRERMRVxuIiwKKwkJCQkJICBfX0ZVTkNUSU9OX18pOworCQkJCXJldHVybiAoRkFMU0UpOwkvLyBNaXNjb21wYXJlCisJCQl9CisJCQlSRUFEX1JFRyhId1JlZ3MtPlVjb2RlRGF0YUhpZ2gsIFZhbHVlUmVhZCk7CisJCQlpZiAoVmFsdWVSZWFkICE9ICooSW5zdHJ1Y3Rpb24gKyAyKSkgeworCQkJCURCR19FUlJPUigic3hnOiAlcyBNSVNDT01QQVJFIEhJR0hcbiIsCisJCQkJCSAgX19GVU5DVElPTl9fKTsKKwkJCQlyZXR1cm4gKEZBTFNFKTsJLy8gTWlzY29tcGFyZQorCQkJfQorCQkJLy8gQWR2YW5jZSAzIHUzMlMgdG8gc3RhcnQgb2YgbmV4dCBpbnN0cnVjdGlvbgorCQkJSW5zdHJ1Y3Rpb24gKz0gMzsKKwkJfQorCX0KKworCS8vIEV2ZXJ5dGhpbmcgT0ssIEdvLgorCVdSSVRFX1JFRyhId1JlZ3MtPlVjb2RlQWRkciwgTUlDUk9DT0RFX0FERFJFU1NfR08sIEZMVVNIKTsKKworCS8vIFBvbGwgdGhlIENhcmRVcCByZWdpc3RlciB0byB3YWl0IGZvciBtaWNyb2NvZGUgdG8gaW5pdGlhbGl6ZQorCS8vIEdpdmUgdXAgYWZ0ZXIgMTAsMDAwIGF0dGVtcHMgKDUwMG1zKS4KKwlmb3IgKGkgPSAwOyBpIDwgMTAwMDA7IGkrKykgeworCQl1ZGVsYXkoNTApOworCQlSRUFEX1JFRyhhZGFwdGVyLT5VY29kZVJlZ3NbMF0uQ2FyZFVwLCBWYWx1ZVJlYWQpOworCQlpZiAoVmFsdWVSZWFkID09IDB4Q0FGRSkgeworCQkJREJHX0VSUk9SKCJzeGc6ICVzIEJPTyBZQSAweENBRkVcbiIsIF9fRlVOQ1RJT05fXyk7CisJCQlicmVhazsKKwkJfQorCX0KKwlpZiAoaSA9PSAxMDAwMCkgeworCQlEQkdfRVJST1IoInN4ZzogJXMgVElNRU9VVFxuIiwgX19GVU5DVElPTl9fKTsKKworCQlyZXR1cm4gKEZBTFNFKTsJLy8gVGltZW91dAorCX0KKwkvLyBOb3cgd3JpdGUgdGhlIExvYWRTeW5jIHJlZ2lzdGVyLiAgVGhpcyBpcyB1c2VkIHRvCisJLy8gc3luY2hyb25pemUgd2l0aCB0aGUgY2FyZCBzbyBpdCBjYW4gc2NyaWJibGUgb24gdGhlIG1lbW9yeQorCS8vIHRoYXQgY29udGFpbmVkIDB4Q0FGRSBmcm9tIHRoZSAiQ2FyZFVwIiBzdGVwIGFib3ZlCisJaWYgKFVjb2RlU2VsID09IFNYR19VQ09ERV9TQUhBUkEpIHsKKwkJV1JJVEVfUkVHKGFkYXB0ZXItPlVjb2RlUmVnc1swXS5Mb2FkU3luYywgMCwgRkxVU0gpOworCX0KKworCVNYR19UUkFDRShUUkFDRV9TWEcsIFN4Z1RyYWNlQnVmZmVyLCBUUkFDRV9OT0lTWSwgIlhEbmxkVWNkIiwKKwkJICBhZGFwdGVyLCAwLCAwLCAwKTsKKwlEQkdfRVJST1IoInN4ZzogJXMgRVhJVFxuIiwgX19GVU5DVElPTl9fKTsKKworCXJldHVybiAoVFJVRSk7Cit9CisKKy8qCisgKiBzeGdfYWxsb2NhdGVfcmVzb3VyY2VzIC0gQWxsb2NhdGUgbWVtb3J5IGFuZCBsb2NrcworICoKKyAqIEFyZ3VtZW50cyAtCisgKglhZGFwdGVyCQktIEEgcG9pbnRlciB0byBvdXIgYWRhcHRlciBzdHJ1Y3R1cmUKKyAqCisgKiBSZXR1cm4KKyAqCWludAorICovCitzdGF0aWMgaW50IHN4Z19hbGxvY2F0ZV9yZXNvdXJjZXMocF9hZGFwdGVyX3QgYWRhcHRlcikKK3sKKwlpbnQgc3RhdHVzOworCXUzMiBpOworCXUzMiBSc3NJZHMsIElzckNvdW50OworLy8gICAgICBQU1hHX1hNVF9SSU5HICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYbXRSaW5nOworLy8gICAgICBQU1hHX1JDVl9SSU5HICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSY3ZSaW5nOworCisJREJHX0VSUk9SKCIlcyBFTlRFUlxuIiwgX19GVU5DVElPTl9fKTsKKworCVNYR19UUkFDRShUUkFDRV9TWEcsIFN4Z1RyYWNlQnVmZmVyLCBUUkFDRV9OT0lTWSwgIkFsbG9jUmVzIiwKKwkJICBhZGFwdGVyLCAwLCAwLCAwKTsKKworCS8vIFdpbmRvd3MgdGVsbHMgdXMgaG93IG1hbnkgQ1BVcyBpdCBwbGFucyB0byB1c2UgZm9yCisJLy8gUlNTCisJUnNzSWRzID0gU1hHX1JTU19DUFVfQ09VTlQoYWRhcHRlcik7CisJSXNyQ291bnQgPSBhZGFwdGVyLT5Nc2lFbmFibGVkID8gUnNzSWRzIDogMTsKKworCURCR19FUlJPUigiJXMgU2V0dXAgdGhlIHNwaW5sb2Nrc1xuIiwgX19GVU5DVElPTl9fKTsKKworCS8vIEFsbG9jYXRlIHNwaW5sb2NrcyBhbmQgaW5pdGlhbGl6ZSBsaXN0aGVhZHMgZmlyc3QuCisJc3Bpbl9sb2NrX2luaXQoJmFkYXB0ZXItPlJjdlFMb2NrKTsKKwlzcGluX2xvY2tfaW5pdCgmYWRhcHRlci0+U2dsUUxvY2spOworCXNwaW5fbG9ja19pbml0KCZhZGFwdGVyLT5YbXRaZXJvTG9jayk7CisJc3Bpbl9sb2NrX2luaXQoJmFkYXB0ZXItPkJpdDY0UmVnTG9jayk7CisJc3Bpbl9sb2NrX2luaXQoJmFkYXB0ZXItPkFkYXB0ZXJMb2NrKTsKKworCURCR19FUlJPUigiJXMgU2V0dXAgdGhlIGxpc3RzXG4iLCBfX0ZVTkNUSU9OX18pOworCisJSW5pdGlhbGl6ZUxpc3RIZWFkKCZhZGFwdGVyLT5GcmVlUmN2QnVmZmVycyk7CisJSW5pdGlhbGl6ZUxpc3RIZWFkKCZhZGFwdGVyLT5GcmVlUmN2QmxvY2tzKTsKKwlJbml0aWFsaXplTGlzdEhlYWQoJmFkYXB0ZXItPkFsbFJjdkJsb2Nrcyk7CisJSW5pdGlhbGl6ZUxpc3RIZWFkKCZhZGFwdGVyLT5GcmVlU2dsQnVmZmVycyk7CisJSW5pdGlhbGl6ZUxpc3RIZWFkKCZhZGFwdGVyLT5BbGxTZ2xCdWZmZXJzKTsKKworCS8vIE1hcmsgdGhlc2UgYmFzaWMgYWxsb2NhdGlvbnMgZG9uZS4gIFRoaXMgZmxhZ3MgZXNzZW50aWFsbHkKKwkvLyB0ZWxscyB0aGUgU3hnRnJlZVJlc291cmNlcyByb3V0aW5lIHRoYXQgaXQgY2FuIGdyYWIgc3BpbmxvY2tzCisJLy8gYW5kIHJlZmVyZW5jZSBsaXN0aGVhZHMuCisJYWRhcHRlci0+QmFzaWNBbGxvY2F0aW9ucyA9IFRSVUU7CisJLy8gTWFpbiBhbGxvY2F0aW9uIGxvb3AuICBTdGFydCB3aXRoIHRoZSBtYXhpbXVtIHN1cHBvcnRlZCBieQorCS8vIHRoZSBtaWNyb2NvZGUgYW5kIGJhY2sgb2ZmIGlmIG1lbW9yeSBhbGxvY2F0aW9uCisJLy8gZmFpbHMuICBJZiB3ZSBoaXQgYSBtaW5pbXVtLCBmYWlsLgorCisJZm9yICg7OykgeworCQlEQkdfRVJST1IoIiVzIEFsbG9jYXRlIFhtdFJpbmdzIHNpemVbJWx4XVxuIiwgX19GVU5DVElPTl9fLAorCQkJICAoc2l6ZW9mKFNYR19YTVRfUklORykgKiAxKSk7CisKKwkJLy8gU3RhcnQgd2l0aCBiaWcgaXRlbXMgZmlyc3QgLSByZWNlaXZlIGFuZCB0cmFuc21pdCByaW5ncy4gIEF0IHRoZSBtb21lbnQKKwkJLy8gSSdtIGdvaW5nIHRvIGtlZXAgdGhlIHJpbmcgc2l6ZSBmaXhlZCBhbmQgYWRqdXN0IHRoZSBudW1iZXIgb2YKKwkJLy8gVENCcyBpZiB3ZSBmYWlsLiAgTGF0ZXIgd2UgbWlnaHQgY29uc2lkZXIgcmVkdWNpbmcgdGhlIHJpbmcgc2l6ZSBhcyB3ZWxsLi4KKwkJYWRhcHRlci0+WG10UmluZ3MgPSBwY2lfYWxsb2NfY29uc2lzdGVudChhZGFwdGVyLT5wY2lkZXYsCisJCQkJCQkJIHNpemVvZihTWEdfWE1UX1JJTkcpICoKKwkJCQkJCQkgMSwKKwkJCQkJCQkgJmFkYXB0ZXItPlBYbXRSaW5ncyk7CisJCURCR19FUlJPUigiJXMgWG10UmluZ3NbJXBdXG4iLCBfX0ZVTkNUSU9OX18sIGFkYXB0ZXItPlhtdFJpbmdzKTsKKworCQlpZiAoIWFkYXB0ZXItPlhtdFJpbmdzKSB7CisJCQlnb3RvIHBlcl90Y2JfYWxsb2NhdGlvbl9mYWlsZWQ7CisJCX0KKwkJbWVtc2V0KGFkYXB0ZXItPlhtdFJpbmdzLCAwLCBzaXplb2YoU1hHX1hNVF9SSU5HKSAqIDEpOworCisJCURCR19FUlJPUigiJXMgQWxsb2NhdGUgUmN2UmluZ3Mgc2l6ZVslbHhdXG4iLCBfX0ZVTkNUSU9OX18sCisJCQkgIChzaXplb2YoU1hHX1JDVl9SSU5HKSAqIDEpKTsKKwkJYWRhcHRlci0+UmN2UmluZ3MgPQorCQkgICAgcGNpX2FsbG9jX2NvbnNpc3RlbnQoYWRhcHRlci0+cGNpZGV2LAorCQkJCQkgc2l6ZW9mKFNYR19SQ1ZfUklORykgKiAxLAorCQkJCQkgJmFkYXB0ZXItPlBSY3ZSaW5ncyk7CisJCURCR19FUlJPUigiJXMgUmN2UmluZ3NbJXBdXG4iLCBfX0ZVTkNUSU9OX18sIGFkYXB0ZXItPlJjdlJpbmdzKTsKKwkJaWYgKCFhZGFwdGVyLT5SY3ZSaW5ncykgeworCQkJZ290byBwZXJfdGNiX2FsbG9jYXRpb25fZmFpbGVkOworCQl9CisJCW1lbXNldChhZGFwdGVyLT5SY3ZSaW5ncywgMCwgc2l6ZW9mKFNYR19SQ1ZfUklORykgKiAxKTsKKwkJYnJlYWs7CisKKwkgICAgICBwZXJfdGNiX2FsbG9jYXRpb25fZmFpbGVkOgorCQkvLyBhbiBhbGxvY2F0aW9uIGZhaWxlZC4gIEZyZWUgYW55IHN1Y2Nlc3NmdWwgYWxsb2NhdGlvbnMuCisJCWlmIChhZGFwdGVyLT5YbXRSaW5ncykgeworCQkJcGNpX2ZyZWVfY29uc2lzdGVudChhZGFwdGVyLT5wY2lkZXYsCisJCQkJCSAgICBzaXplb2YoU1hHX1hNVF9SSU5HKSAqIDQwOTYsCisJCQkJCSAgICBhZGFwdGVyLT5YbXRSaW5ncywKKwkJCQkJICAgIGFkYXB0ZXItPlBYbXRSaW5ncyk7CisJCQlhZGFwdGVyLT5YbXRSaW5ncyA9IE5VTEw7CisJCX0KKwkJaWYgKGFkYXB0ZXItPlJjdlJpbmdzKSB7CisJCQlwY2lfZnJlZV9jb25zaXN0ZW50KGFkYXB0ZXItPnBjaWRldiwKKwkJCQkJICAgIHNpemVvZihTWEdfUkNWX1JJTkcpICogNDA5NiwKKwkJCQkJICAgIGFkYXB0ZXItPlJjdlJpbmdzLAorCQkJCQkgICAgYWRhcHRlci0+UFJjdlJpbmdzKTsKKwkJCWFkYXB0ZXItPlJjdlJpbmdzID0gTlVMTDsKKwkJfQorCQkvLyBMb29wIGFyb3VuZCBhbmQgdHJ5IGFnYWluLi4uLgorCX0KKworCURCR19FUlJPUigiJXMgSW5pdGlhbGl6ZSBSQ1YgWkVSTyBhbmQgWE1UIFpFUk8gcmluZ3NcbiIsIF9fRlVOQ1RJT05fXyk7CisJLy8gSW5pdGlhbGl6ZSByY3YgemVybyBhbmQgeG10IHplcm8gcmluZ3MKKwlTWEdfSU5JVElBTElaRV9SSU5HKGFkYXB0ZXItPlJjdlJpbmdaZXJvSW5mbywgU1hHX1JDVl9SSU5HX1NJWkUpOworCVNYR19JTklUSUFMSVpFX1JJTkcoYWRhcHRlci0+WG10UmluZ1plcm9JbmZvLCBTWEdfWE1UX1JJTkdfU0laRSk7CisKKwkvLyBTYW5pdHkgY2hlY2sgcmVjZWl2ZSBkYXRhIHN0cnVjdHVyZSBmb3JtYXQKKwlBU1NFUlQoKGFkYXB0ZXItPlJlY2VpdmVCdWZmZXJTaXplID09IFNYR19SQ1ZfREFUQV9CVUZGRVJfU0laRSkgfHwKKwkgICAgICAgKGFkYXB0ZXItPlJlY2VpdmVCdWZmZXJTaXplID09IFNYR19SQ1ZfSlVNQk9fQlVGRkVSX1NJWkUpKTsKKwlBU1NFUlQoc2l6ZW9mKFNYR19SQ1ZfREVTQ1JJUFRPUl9CTE9DSykgPT0KKwkgICAgICAgU1hHX1JDVl9ERVNDUklQVE9SX0JMT0NLX1NJWkUpOworCisJLy8gQWxsb2NhdGUgcmVjZWl2ZSBkYXRhIGJ1ZmZlcnMuICBXZSBhbGxvY2F0ZSBhIGJsb2NrIG9mIGJ1ZmZlcnMgYW5kCisJLy8gYSBjb3JyZXNwb25kaW5nIGRlc2NyaXB0b3IgYmxvY2sgYXQgb25jZS4gIFNlZSBzeGdody5oOlNYR19SQ1ZfQkxPQ0sKKwlmb3IgKGkgPSAwOyBpIDwgU1hHX0lOSVRJQUxfUkNWX0RBVEFfQlVGRkVSUzsKKwkgICAgIGkgKz0gU1hHX1JDVl9ERVNDUklQVE9SU19QRVJfQkxPQ0spIHsKKwkJc3hnX2FsbG9jYXRlX2J1ZmZlcl9tZW1vcnkoYWRhcHRlciwKKwkJCQkJICAgU1hHX1JDVl9CTE9DS19TSVpFKGFkYXB0ZXItPgorCQkJCQkJCSAgICAgIFJlY2VpdmVCdWZmZXJTaXplKSwKKwkJCQkJICAgU1hHX0JVRkZFUl9UWVBFX1JDVik7CisJfQorCS8vIE5CTCByZXNvdXJjZSBhbGxvY2F0aW9uIGNhbiBmYWlsIGluIHRoZSAnQWxsb2NhdGVDb21wbGV0ZScgcm91dGluZSwgd2hpY2gKKwkvLyBkb2Vzbid0IHJldHVybiBzdGF0dXMuICBNYWtlIHN1cmUgd2UgZ290IHRoZSBudW1iZXIgb2YgYnVmZmVycyB3ZSByZXF1ZXN0ZWQKKwlpZiAoYWRhcHRlci0+RnJlZVJjdkJ1ZmZlckNvdW50IDwgU1hHX0lOSVRJQUxfUkNWX0RBVEFfQlVGRkVSUykgeworCQlTWEdfVFJBQ0UoVFJBQ0VfU1hHLCBTeGdUcmFjZUJ1ZmZlciwgVFJBQ0VfTk9JU1ksICJYQVJlc0Y2IiwKKwkJCSAgYWRhcHRlciwgYWRhcHRlci0+RnJlZVJjdkJ1ZmZlckNvdW50LCBTWEdfTUFYX0VOVFJJRVMsCisJCQkgIDApOworCQlyZXR1cm4gKFNUQVRVU19SRVNPVVJDRVMpOworCX0KKworCURCR19FUlJPUigiJXMgQWxsb2NhdGUgRXZlbnRSaW5ncyBzaXplWyVseF1cbiIsIF9fRlVOQ1RJT05fXywKKwkJICAoc2l6ZW9mKFNYR19FVkVOVF9SSU5HKSAqIFJzc0lkcykpOworCisJLy8gQWxsb2NhdGUgZXZlbnQgcXVldWVzLgorCWFkYXB0ZXItPkV2ZW50UmluZ3MgPSBwY2lfYWxsb2NfY29uc2lzdGVudChhZGFwdGVyLT5wY2lkZXYsCisJCQkJCQkgICBzaXplb2YoU1hHX0VWRU5UX1JJTkcpICoKKwkJCQkJCSAgIFJzc0lkcywKKwkJCQkJCSAgICZhZGFwdGVyLT5QRXZlbnRSaW5ncyk7CisKKwlpZiAoIWFkYXB0ZXItPkV2ZW50UmluZ3MpIHsKKwkJLy8gQ2FsbGVyIHdpbGwgY2FsbCBTeGdGcmVlQWRhcHRlciB0byBjbGVhbiB1cCBhYm92ZSBhbGxvY2F0aW9ucworCQlTWEdfVFJBQ0UoVFJBQ0VfU1hHLCBTeGdUcmFjZUJ1ZmZlciwgVFJBQ0VfTk9JU1ksICJYQVJlc0Y4IiwKKwkJCSAgYWRhcHRlciwgU1hHX01BWF9FTlRSSUVTLCAwLCAwKTsKKwkJc3RhdHVzID0gU1RBVFVTX1JFU09VUkNFUzsKKwkJZ290byBwZXJfdGNiX2FsbG9jYXRpb25fZmFpbGVkOworCX0KKwltZW1zZXQoYWRhcHRlci0+RXZlbnRSaW5ncywgMCwgc2l6ZW9mKFNYR19FVkVOVF9SSU5HKSAqIFJzc0lkcyk7CisKKwlEQkdfRVJST1IoIiVzIEFsbG9jYXRlIElTUiBzaXplWyV4XVxuIiwgX19GVU5DVElPTl9fLCBJc3JDb3VudCk7CisJLy8gQWxsb2NhdGUgSVNSCisJYWRhcHRlci0+SXNyID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQoYWRhcHRlci0+cGNpZGV2LAorCQkJCQkgICAgSXNyQ291bnQsICZhZGFwdGVyLT5QSXNyKTsKKwlpZiAoIWFkYXB0ZXItPklzcikgeworCQkvLyBDYWxsZXIgd2lsbCBjYWxsIFN4Z0ZyZWVBZGFwdGVyIHRvIGNsZWFuIHVwIGFib3ZlIGFsbG9jYXRpb25zCisJCVNYR19UUkFDRShUUkFDRV9TWEcsIFN4Z1RyYWNlQnVmZmVyLCBUUkFDRV9OT0lTWSwgIlhBUmVzRjkiLAorCQkJICBhZGFwdGVyLCBTWEdfTUFYX0VOVFJJRVMsIDAsIDApOworCQlzdGF0dXMgPSBTVEFUVVNfUkVTT1VSQ0VTOworCQlnb3RvIHBlcl90Y2JfYWxsb2NhdGlvbl9mYWlsZWQ7CisJfQorCW1lbXNldChhZGFwdGVyLT5Jc3IsIDAsIHNpemVvZih1MzIpICogSXNyQ291bnQpOworCisJREJHX0VSUk9SKCIlcyBBbGxvY2F0ZSBzaGFyZWQgWE1UIHJpbmcgemVybyBpbmRleCBsb2NhdGlvbiBzaXplWyVseF1cbiIsCisJCSAgX19GVU5DVElPTl9fLCBzaXplb2YodTMyKSk7CisKKwkvLyBBbGxvY2F0ZSBzaGFyZWQgWE1UIHJpbmcgemVybyBpbmRleCBsb2NhdGlvbgorCWFkYXB0ZXItPlhtdFJpbmdaZXJvSW5kZXggPSBwY2lfYWxsb2NfY29uc2lzdGVudChhZGFwdGVyLT5wY2lkZXYsCisJCQkJCQkJIHNpemVvZih1MzIpLAorCQkJCQkJCSAmYWRhcHRlci0+CisJCQkJCQkJIFBYbXRSaW5nWmVyb0luZGV4KTsKKwlpZiAoIWFkYXB0ZXItPlhtdFJpbmdaZXJvSW5kZXgpIHsKKwkJU1hHX1RSQUNFKFRSQUNFX1NYRywgU3hnVHJhY2VCdWZmZXIsIFRSQUNFX05PSVNZLCAiWEFSZXNGMTAiLAorCQkJICBhZGFwdGVyLCBTWEdfTUFYX0VOVFJJRVMsIDAsIDApOworCQlzdGF0dXMgPSBTVEFUVVNfUkVTT1VSQ0VTOworCQlnb3RvIHBlcl90Y2JfYWxsb2NhdGlvbl9mYWlsZWQ7CisJfQorCW1lbXNldChhZGFwdGVyLT5YbXRSaW5nWmVyb0luZGV4LCAwLCBzaXplb2YodTMyKSk7CisKKwlTWEdfVFJBQ0UoVFJBQ0VfU1hHLCBTeGdUcmFjZUJ1ZmZlciwgVFJBQ0VfTk9JU1ksICJYQWxjUmVzUyIsCisJCSAgYWRhcHRlciwgU1hHX01BWF9FTlRSSUVTLCAwLCAwKTsKKworCURCR19FUlJPUigiJXMgRVhJVFxuIiwgX19GVU5DVElPTl9fKTsKKwlyZXR1cm4gKFNUQVRVU19TVUNDRVNTKTsKK30KKworLyoKKyAqIHN4Z19jb25maWdfcGNpIC0KKyAqCisgKiBTZXQgdXAgUENJIENvbmZpZ3VyYXRpb24gc3BhY2UKKyAqCisgKiBBcmd1bWVudHMgLQorICoJCXBjaWRldgkJCS0gQSBwb2ludGVyIHRvIG91ciBhZGFwdGVyIHN0cnVjdHVyZQorICoKKyAqLworc3RhdGljIHZvaWQgc3hnX2NvbmZpZ19wY2koc3RydWN0IHBjaV9kZXYgKnBjaWRldikKK3sKKwl1MTYgcGNpX2NvbW1hbmQ7CisJdTE2IG5ld19jb21tYW5kOworCisJcGNpX3JlYWRfY29uZmlnX3dvcmQocGNpZGV2LCBQQ0lfQ09NTUFORCwgJnBjaV9jb21tYW5kKTsKKwlEQkdfRVJST1IoInN4ZzogJXMgIFBDSSBjb21tYW5kWyU0LjR4XVxuIiwgX19GVU5DVElPTl9fLCBwY2lfY29tbWFuZCk7CisJLy8gU2V0IHRoZSBjb21tYW5kIHJlZ2lzdGVyCisJbmV3X2NvbW1hbmQgPSBwY2lfY29tbWFuZCB8IChQQ0lfQ09NTUFORF9NRU1PUlkgfAkvLyBNZW1vcnkgU3BhY2UgRW5hYmxlCisJCQkJICAgICBQQ0lfQ09NTUFORF9NQVNURVIgfAkvLyBCdXMgbWFzdGVyIGVuYWJsZQorCQkJCSAgICAgUENJX0NPTU1BTkRfSU5WQUxJREFURSB8CS8vIE1lbW9yeSB3cml0ZSBhbmQgaW52YWxpZGF0ZQorCQkJCSAgICAgUENJX0NPTU1BTkRfUEFSSVRZIHwJLy8gUGFyaXR5IGVycm9yIHJlc3BvbnNlCisJCQkJICAgICBQQ0lfQ09NTUFORF9TRVJSIHwJLy8gU3lzdGVtIEVSUgorCQkJCSAgICAgUENJX0NPTU1BTkRfRkFTVF9CQUNLKTsJLy8gRmFzdCBiYWNrLXRvLWJhY2sKKwlpZiAocGNpX2NvbW1hbmQgIT0gbmV3X2NvbW1hbmQpIHsKKwkJREJHX0VSUk9SKCIlcyAtLSBVcGRhdGluZyBQQ0kgQ09NTUFORCByZWdpc3RlciAlNC40eC0+JTQuNHguXG4iLAorCQkJICBfX0ZVTkNUSU9OX18sIHBjaV9jb21tYW5kLCBuZXdfY29tbWFuZCk7CisJCXBjaV93cml0ZV9jb25maWdfd29yZChwY2lkZXYsIFBDSV9DT01NQU5ELCBuZXdfY29tbWFuZCk7CisJfQorfQorCitzdGF0aWMgaW50IHN4Z19lbnRyeV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGNpZGV2LAorCQkJICAgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKnBjaV90YmxfZW50cnkpCit7CisJc3RhdGljIGludCBkaWRfdmVyc2lvbiA9IDA7CisJaW50IGVycjsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2OworCXBfYWRhcHRlcl90IGFkYXB0ZXI7CisJdm9pZCBfX2lvbWVtICptZW1tYXBwZWRfaW9hZGRyOworCXUzMiBzdGF0dXMgPSAwOworCXVsb25nIG1taW9fc3RhcnQgPSAwOworCXVsb25nIG1taW9fbGVuID0gMDsKKworCURCR19FUlJPUigic3hnOiAlcyAyLjYgVkVSU0lPTiBFTlRFUiBqaWZmaWVzWyVseF0gY3B1ICVkXG4iLAorCQkgIF9fRlVOQ1RJT05fXywgamlmZmllcywgc21wX3Byb2Nlc3Nvcl9pZCgpKTsKKworCS8vIEluaXRpYWxpemUgdHJhY2UgYnVmZmVyCisjaWZkZWYgQVRLREJHCisJU3hnVHJhY2VCdWZmZXIgPSAmTFN4Z1RyYWNlQnVmZmVyOworCVNYR19UUkFDRV9JTklUKFN4Z1RyYWNlQnVmZmVyLCBUUkFDRV9OT0lTWSk7CisjZW5kaWYKKworCXN4Z19nbG9iYWwuZHluYW1pY19pbnRhZ2cgPSBkeW5hbWljX2ludGFnZzsKKworCWVyciA9IHBjaV9lbmFibGVfZGV2aWNlKHBjaWRldik7CisKKwlEQkdfRVJST1IoIkNhbGwgcGNpX2VuYWJsZV9kZXZpY2UoJXApICBzdGF0dXNbJXhdXG4iLCBwY2lkZXYsIGVycik7CisJaWYgKGVycikgeworCQlyZXR1cm4gZXJyOworCX0KKworCWlmIChzeGdfZGVidWcgPiAwICYmIGRpZF92ZXJzaW9uKysgPT0gMCkgeworCQlwcmludGsoS0VSTl9JTkZPICIlc1xuIiwgc3hnX2Jhbm5lcik7CisJCXByaW50ayhLRVJOX0lORk8gIiVzXG4iLCBEUlZfVkVSU0lPTik7CisJfQorCisJaWYgKCEoZXJyID0gcGNpX3NldF9kbWFfbWFzayhwY2lkZXYsIERNQV82NEJJVF9NQVNLKSkpIHsKKwkJREJHX0VSUk9SKCJwY2lfc2V0X2RtYV9tYXNrKERNQV82NEJJVF9NQVNLKSBzdWNjZXNzZnVsXG4iKTsKKwl9IGVsc2UgeworCQlpZiAoKGVyciA9IHBjaV9zZXRfZG1hX21hc2socGNpZGV2LCBETUFfMzJCSVRfTUFTSykpKSB7CisJCQlEQkdfRVJST1IKKwkJCSAgICAoIk5vIHVzYWJsZSBETUEgY29uZmlndXJhdGlvbiwgYWJvcnRpbmcgIGVyclsleF1cbiIsCisJCQkgICAgIGVycik7CisJCQlyZXR1cm4gZXJyOworCQl9CisJCURCR19FUlJPUigicGNpX3NldF9kbWFfbWFzayhETUFfMzJCSVRfTUFTSykgc3VjY2Vzc2Z1bFxuIik7CisJfQorCisJREJHX0VSUk9SKCJDYWxsIHBjaV9yZXF1ZXN0X3JlZ2lvbnNcbiIpOworCisJZXJyID0gcGNpX3JlcXVlc3RfcmVnaW9ucyhwY2lkZXYsIERSVl9OQU1FKTsKKwlpZiAoZXJyKSB7CisJCURCR19FUlJPUigicGNpX3JlcXVlc3RfcmVnaW9ucyBGQUlMRUQgZXJyWyV4XVxuIiwgZXJyKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwlEQkdfRVJST1IoImNhbGwgcGNpX3NldF9tYXN0ZXJcbiIpOworCXBjaV9zZXRfbWFzdGVyKHBjaWRldik7CisKKwlEQkdfRVJST1IoImNhbGwgYWxsb2NfZXRoZXJkZXZcbiIpOworCW5ldGRldiA9IGFsbG9jX2V0aGVyZGV2KHNpemVvZihhZGFwdGVyX3QpKTsKKwlpZiAoIW5ldGRldikgeworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIGVycl9vdXRfZXhpdF9zeGdfcHJvYmU7CisJfQorCURCR19FUlJPUigiYWxsb2NfZXRoZXJkZXYgZm9yIHNsaWMgbmV0ZGV2WyVwXVxuIiwgbmV0ZGV2KTsKKworCVNFVF9ORVRERVZfREVWKG5ldGRldiwgJnBjaWRldi0+ZGV2KTsKKworCXBjaV9zZXRfZHJ2ZGF0YShwY2lkZXYsIG5ldGRldik7CisJYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CisJYWRhcHRlci0+bmV0ZGV2ID0gbmV0ZGV2OworCWFkYXB0ZXItPnBjaWRldiA9IHBjaWRldjsKKworCW1taW9fc3RhcnQgPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGNpZGV2LCAwKTsKKwltbWlvX2xlbiA9IHBjaV9yZXNvdXJjZV9sZW4ocGNpZGV2LCAwKTsKKworCURCR19FUlJPUigic3hnOiBjYWxsIGlvcmVtYXAobW1pb19zdGFydFslbHhdLCBtbWlvX2xlblslbHhdKVxuIiwKKwkJICBtbWlvX3N0YXJ0LCBtbWlvX2xlbik7CisKKwltZW1tYXBwZWRfaW9hZGRyID0gaW9yZW1hcChtbWlvX3N0YXJ0LCBtbWlvX2xlbik7CisJREJHX0VSUk9SKCJzeGc6ICVzIE1FTU1BUFBFRF9JT0FERFIgWyVwXVxuIiwgX19GVU5DVElPTl9fLAorCQkgIG1lbW1hcHBlZF9pb2FkZHIpOworCWlmICghbWVtbWFwcGVkX2lvYWRkcikgeworCQlEQkdfRVJST1IoIiVzIGNhbm5vdCByZW1hcCBNTUlPIHJlZ2lvbiAlbHggQCAlbHhcbiIsCisJCQkgIF9fRlVOQ1RJT05fXywgbW1pb19sZW4sIG1taW9fc3RhcnQpOworCQlnb3RvIGVycl9vdXRfZnJlZV9tbWlvX3JlZ2lvbjsKKwl9CisKKwlEQkdfRVJST1IKKwkgICAgKCJzeGc6ICVzIGZvdW5kIEFsYWNyaXRlY2ggU1hHIFBDSSwgTU1JTyBhdCAlcCwgc3RhcnRbJWx4XSBsZW5bJWx4XSwgSVJRICVkLlxuIiwKKwkgICAgIF9fZnVuY19fLCBtZW1tYXBwZWRfaW9hZGRyLCBtbWlvX3N0YXJ0LCBtbWlvX2xlbiwgcGNpZGV2LT5pcnEpOworCisJYWRhcHRlci0+SHdSZWdzID0gKHZvaWQgKiltZW1tYXBwZWRfaW9hZGRyOworCWFkYXB0ZXItPmJhc2VfYWRkciA9IG1lbW1hcHBlZF9pb2FkZHI7CisKKwltbWlvX3N0YXJ0ID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBjaWRldiwgMik7CisJbW1pb19sZW4gPSBwY2lfcmVzb3VyY2VfbGVuKHBjaWRldiwgMik7CisKKwlEQkdfRVJST1IoInN4ZzogY2FsbCBpb3JlbWFwKG1taW9fc3RhcnRbJWx4XSwgbW1pb19sZW5bJWx4XSlcbiIsCisJCSAgbW1pb19zdGFydCwgbW1pb19sZW4pOworCisJbWVtbWFwcGVkX2lvYWRkciA9IGlvcmVtYXAobW1pb19zdGFydCwgbW1pb19sZW4pOworCURCR19FUlJPUigic3hnOiAlcyBNRU1NQVBQRURfSU9BRERSIFslcF1cbiIsIF9fZnVuY19fLAorCQkgIG1lbW1hcHBlZF9pb2FkZHIpOworCWlmICghbWVtbWFwcGVkX2lvYWRkcikgeworCQlEQkdfRVJST1IoIiVzIGNhbm5vdCByZW1hcCBNTUlPIHJlZ2lvbiAlbHggQCAlbHhcbiIsCisJCQkgIF9fRlVOQ1RJT05fXywgbW1pb19sZW4sIG1taW9fc3RhcnQpOworCQlnb3RvIGVycl9vdXRfZnJlZV9tbWlvX3JlZ2lvbjsKKwl9CisKKwlEQkdfRVJST1IoInN4ZzogJXMgZm91bmQgQWxhY3JpdGVjaCBTWEcgUENJLCBNTUlPIGF0ICVwLCAiCisJCSAgInN0YXJ0WyVseF0gbGVuWyVseF0sIElSUSAlZC5cbiIsIF9fZnVuY19fLAorCQkgIG1lbW1hcHBlZF9pb2FkZHIsIG1taW9fc3RhcnQsIG1taW9fbGVuLCBwY2lkZXYtPmlycSk7CisKKwlhZGFwdGVyLT5VY29kZVJlZ3MgPSAodm9pZCAqKW1lbW1hcHBlZF9pb2FkZHI7CisKKwlhZGFwdGVyLT5TdGF0ZSA9IFNYR19TVEFURV9JTklUSUFMSVpJTkc7CisJLy8gTWFpbnRhaW4gYSBsaXN0IG9mIGFsbCBhZGFwdGVycyBhbmNob3JlZCBieQorCS8vIHRoZSBnbG9iYWwgU3hnRHJpdmVyIHN0cnVjdHVyZS4KKwlhZGFwdGVyLT5OZXh0ID0gU3hnRHJpdmVyLkFkYXB0ZXJzOworCVN4Z0RyaXZlci5BZGFwdGVycyA9IGFkYXB0ZXI7CisJYWRhcHRlci0+QWRhcHRlcklEID0gKytTeGdEcml2ZXIuQWRhcHRlcklEOworCisJLy8gSW5pdGlhbGl6ZSBDUkMgdGFibGUgdXNlZCB0byBkZXRlcm1pbmUgbXVsdGljYXN0IGhhc2gKKwlzeGdfbWNhc3RfaW5pdF9jcmMzMigpOworCisJYWRhcHRlci0+SnVtYm9FbmFibGVkID0gRkFMU0U7CisJYWRhcHRlci0+UnNzRW5hYmxlZCA9IEZBTFNFOworCWlmIChhZGFwdGVyLT5KdW1ib0VuYWJsZWQpIHsKKwkJYWRhcHRlci0+RnJhbWVTaXplID0gSlVNQk9NQVhGUkFNRTsKKwkJYWRhcHRlci0+UmVjZWl2ZUJ1ZmZlclNpemUgPSBTWEdfUkNWX0pVTUJPX0JVRkZFUl9TSVpFOworCX0gZWxzZSB7CisJCWFkYXB0ZXItPkZyYW1lU2l6ZSA9IEVUSEVSTUFYRlJBTUU7CisJCWFkYXB0ZXItPlJlY2VpdmVCdWZmZXJTaXplID0gU1hHX1JDVl9EQVRBX0JVRkZFUl9TSVpFOworCX0KKworLy8gICAgc3RhdHVzID0gU1hHX1JFQURfRUVQUk9NKGFkYXB0ZXIpOworLy8gICAgaWYgKCFzdGF0dXMpIHsKKy8vICAgICAgICBnb3RvIHN4Z19pbml0X2JhZDsKKy8vICAgIH0KKworCURCR19FUlJPUigic3hnOiAlcyBFTlRFUiBzeGdfY29uZmlnX3BjaVxuIiwgX19GVU5DVElPTl9fKTsKKwlzeGdfY29uZmlnX3BjaShwY2lkZXYpOworCURCR19FUlJPUigic3hnOiAlcyBFWElUIHN4Z19jb25maWdfcGNpXG4iLCBfX0ZVTkNUSU9OX18pOworCisJREJHX0VSUk9SKCJzeGc6ICVzIEVOVEVSIHN4Z19pbml0X2RyaXZlclxuIiwgX19GVU5DVElPTl9fKTsKKwlzeGdfaW5pdF9kcml2ZXIoKTsKKwlEQkdfRVJST1IoInN4ZzogJXMgRVhJVCBzeGdfaW5pdF9kcml2ZXJcbiIsIF9fRlVOQ1RJT05fXyk7CisKKwlhZGFwdGVyLT52ZW5kaWQgPSBwY2lfdGJsX2VudHJ5LT52ZW5kb3I7CisJYWRhcHRlci0+ZGV2aWQgPSBwY2lfdGJsX2VudHJ5LT5kZXZpY2U7CisJYWRhcHRlci0+c3Vic3lzaWQgPSBwY2lfdGJsX2VudHJ5LT5zdWJkZXZpY2U7CisJYWRhcHRlci0+YnVzbnVtYmVyID0gcGNpZGV2LT5idXMtPm51bWJlcjsKKwlhZGFwdGVyLT5zbG90bnVtYmVyID0gKChwY2lkZXYtPmRldmZuID4+IDMpICYgMHgxRik7CisJYWRhcHRlci0+ZnVuY3Rpb25udW1iZXIgPSAocGNpZGV2LT5kZXZmbiAmIDB4Nyk7CisJYWRhcHRlci0+bWVtb3J5bGVuZ3RoID0gcGNpX3Jlc291cmNlX2xlbihwY2lkZXYsIDApOworCWFkYXB0ZXItPmlycSA9IHBjaWRldi0+aXJxOworCWFkYXB0ZXItPm5leHRfbmV0ZGV2aWNlID0gaGVhZF9uZXRkZXZpY2U7CisJaGVhZF9uZXRkZXZpY2UgPSBuZXRkZXY7CisvLyAgICAgIGFkYXB0ZXItPmNoaXBpZCA9IGNoaXBfaWR4OworCWFkYXB0ZXItPnBvcnQgPSAwOwkvL2FkYXB0ZXItPmZ1bmN0aW9ubnVtYmVyOworCWFkYXB0ZXItPmNhcmRpbmRleCA9IGFkYXB0ZXItPnBvcnQ7CisKKwkvLyBBbGxvY2F0ZSBtZW1vcnkgYW5kIG90aGVyIHJlc291cmNlcworCURCR19FUlJPUigic3hnOiAlcyBFTlRFUiBzeGdfYWxsb2NhdGVfcmVzb3VyY2VzXG4iLCBfX0ZVTkNUSU9OX18pOworCXN0YXR1cyA9IHN4Z19hbGxvY2F0ZV9yZXNvdXJjZXMoYWRhcHRlcik7CisJREJHX0VSUk9SKCJzeGc6ICVzIEVYSVQgc3hnX2FsbG9jYXRlX3Jlc291cmNlcyBzdGF0dXMgJXhcbiIsCisJCSAgX19GVU5DVElPTl9fLCBzdGF0dXMpOworCWlmIChzdGF0dXMgIT0gU1RBVFVTX1NVQ0NFU1MpIHsKKwkJZ290byBlcnJfb3V0X3VubWFwOworCX0KKworCURCR19FUlJPUigic3hnOiAlcyBFTlRFUiBzeGdfZG93bmxvYWRfbWljcm9jb2RlXG4iLCBfX0ZVTkNUSU9OX18pOworCWlmIChzeGdfZG93bmxvYWRfbWljcm9jb2RlKGFkYXB0ZXIsIFNYR19VQ09ERV9TQUhBUkEpKSB7CisJCURCR19FUlJPUigic3hnOiAlcyBFTlRFUiBzeGdfYWRhcHRlcl9zZXRfaHdhZGRyXG4iLAorCQkJICBfX0ZVTkNUSU9OX18pOworCQlzeGdfYWRhcHRlcl9zZXRfaHdhZGRyKGFkYXB0ZXIpOworCX0gZWxzZSB7CisJCWFkYXB0ZXItPnN0YXRlID0gQURBUFRfRkFJTDsKKwkJYWRhcHRlci0+bGlua3N0YXRlID0gTElOS19ET1dOOworCQlEQkdfRVJST1IoInN4Z19kb3dubG9hZF9taWNyb2NvZGUgRkFJTEVEIHN0YXR1c1sleF1cbiIsIHN0YXR1cyk7CisJfQorCisJbmV0ZGV2LT5iYXNlX2FkZHIgPSAodW5zaWduZWQgbG9uZylhZGFwdGVyLT5iYXNlX2FkZHI7CisJbmV0ZGV2LT5pcnEgPSBhZGFwdGVyLT5pcnE7CisJbmV0ZGV2LT5vcGVuID0gc3hnX2VudHJ5X29wZW47CisJbmV0ZGV2LT5zdG9wID0gc3hnX2VudHJ5X2hhbHQ7CisJbmV0ZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSBzeGdfc2VuZF9wYWNrZXRzOworCW5ldGRldi0+ZG9faW9jdGwgPSBzeGdfaW9jdGw7CisjaWYgWFhYVE9ETworCW5ldGRldi0+c2V0X21hY19hZGRyZXNzID0gc3hnX21hY19zZXRfYWRkcmVzczsKKyNpZiBTTElDX0dFVF9TVEFUU19FTkFCTEVECisJbmV0ZGV2LT5nZXRfc3RhdHMgPSBzeGdfZ2V0X3N0YXRzOworI2VuZGlmCisJbmV0ZGV2LT5zZXRfbXVsdGljYXN0X2xpc3QgPSBzeGdfbWNhc3Rfc2V0X2xpc3Q7CisjZW5kaWYKKworCXN0cmNweShuZXRkZXYtPm5hbWUsICJldGglZCIpOworLy8gIHN0cmNweShuZXRkZXYtPm5hbWUsIHBjaV9uYW1lKHBjaWRldikpOworCWlmICgoZXJyID0gcmVnaXN0ZXJfbmV0ZGV2KG5ldGRldikpKSB7CisJCURCR19FUlJPUigiQ2Fubm90IHJlZ2lzdGVyIG5ldCBkZXZpY2UsIGFib3J0aW5nLiAlc1xuIiwKKwkJCSAgbmV0ZGV2LT5uYW1lKTsKKwkJZ290byBlcnJfb3V0X3VubWFwOworCX0KKworCURCR19FUlJPUgorCSAgICAoInN4ZzogJXMgYWRkciAweCVseCwgaXJxICVkLCBNQUMgYWRkciAlMDJYOiUwMlg6JTAyWDolMDJYOiUwMlg6JTAyWFxuIiwKKwkgICAgIG5ldGRldi0+bmFtZSwgbmV0ZGV2LT5iYXNlX2FkZHIsIHBjaWRldi0+aXJxLCBuZXRkZXYtPmRldl9hZGRyWzBdLAorCSAgICAgbmV0ZGV2LT5kZXZfYWRkclsxXSwgbmV0ZGV2LT5kZXZfYWRkclsyXSwgbmV0ZGV2LT5kZXZfYWRkclszXSwKKwkgICAgIG5ldGRldi0+ZGV2X2FkZHJbNF0sIG5ldGRldi0+ZGV2X2FkZHJbNV0pOworCisvL3N4Z19pbml0X2JhZDoKKwlBU1NFUlQoc3RhdHVzID09IEZBTFNFKTsKKy8vICAgICAgc3hnX2ZyZWVfYWRhcHRlcihhZGFwdGVyKTsKKworCURCR19FUlJPUigic3hnOiAlcyBFWElUIHN0YXR1c1sleF0gamlmZmllc1slbHhdIGNwdSAlZFxuIiwgX19GVU5DVElPTl9fLAorCQkgIHN0YXR1cywgamlmZmllcywgc21wX3Byb2Nlc3Nvcl9pZCgpKTsKKwlyZXR1cm4gc3RhdHVzOworCisgICAgICBlcnJfb3V0X3VubWFwOgorCWlvdW5tYXAoKHZvaWQgKiltZW1tYXBwZWRfaW9hZGRyKTsKKworICAgICAgZXJyX291dF9mcmVlX21taW9fcmVnaW9uOgorCXJlbGVhc2VfbWVtX3JlZ2lvbihtbWlvX3N0YXJ0LCBtbWlvX2xlbik7CisKKyAgICAgIGVycl9vdXRfZXhpdF9zeGdfcHJvYmU6CisKKwlEQkdfRVJST1IoIiVzIEVYSVQgamlmZmllc1slbHhdIGNwdSAlZFxuIiwgX19GVU5DVElPTl9fLCBqaWZmaWVzLAorCQkgIHNtcF9wcm9jZXNzb3JfaWQoKSk7CisKKwlyZXR1cm4gLUVOT0RFVjsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBMSU5FIEJBU0UgSW50ZXJydXB0IHJvdXRpbmVzLi4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qCisgKgorICogc3hnX2Rpc2FibGVfaW50ZXJydXB0CisgKgorICogRGlzYWJsZUludGVycnVwdCBIYW5kbGVyCisgKgorICogQXJndW1lbnRzOgorICoKKyAqICAgYWRhcHRlcjoJT3VyIGFkYXB0ZXIgc3RydWN0dXJlCisgKgorICogUmV0dXJuIFZhbHVlOgorICogCU5vbmUuCisgKi8KK3N0YXRpYyB2b2lkIHN4Z19kaXNhYmxlX2ludGVycnVwdChwX2FkYXB0ZXJfdCBhZGFwdGVyKQoreworCVNYR19UUkFDRShUUkFDRV9TWEcsIFN4Z1RyYWNlQnVmZmVyLCBUUkFDRV9OT0lTWSwgIkRpc0ludHIiLAorCQkgIGFkYXB0ZXIsIGFkYXB0ZXItPkludGVycnVwdHNFbmFibGVkLCAwLCAwKTsKKwkvLyBGb3Igbm93LCBSU1MgaXMgZGlzYWJsZWQgd2l0aCBsaW5lIGJhc2VkIGludGVycnVwdHMKKwlBU1NFUlQoYWRhcHRlci0+UnNzRW5hYmxlZCA9PSBGQUxTRSk7CisJQVNTRVJUKGFkYXB0ZXItPk1zaUVuYWJsZWQgPT0gRkFMU0UpOworCS8vCisJLy8gVHVybiBvZmYgaW50ZXJydXB0cyBieSB3cml0aW5nIHRvIHRoZSBpY3IgcmVnaXN0ZXIuCisJLy8KKwlXUklURV9SRUcoYWRhcHRlci0+VWNvZGVSZWdzWzBdLkljciwgU1hHX0lDUigwLCBTWEdfSUNSX0RJU0FCTEUpLCBUUlVFKTsKKworCWFkYXB0ZXItPkludGVycnVwdHNFbmFibGVkID0gMDsKKworCVNYR19UUkFDRShUUkFDRV9TWEcsIFN4Z1RyYWNlQnVmZmVyLCBUUkFDRV9OT0lTWSwgIlhEaXNJbnRyIiwKKwkJICBhZGFwdGVyLCBhZGFwdGVyLT5JbnRlcnJ1cHRzRW5hYmxlZCwgMCwgMCk7Cit9CisKKy8qCisgKgorICogc3hnX2VuYWJsZV9pbnRlcnJ1cHQKKyAqCisgKiBFbmFibGVJbnRlcnJ1cHQgSGFuZGxlcgorICoKKyAqIEFyZ3VtZW50czoKKyAqCisgKiAgIGFkYXB0ZXI6CU91ciBhZGFwdGVyIHN0cnVjdHVyZQorICoKKyAqIFJldHVybiBWYWx1ZToKKyAqIAlOb25lLgorICovCitzdGF0aWMgdm9pZCBzeGdfZW5hYmxlX2ludGVycnVwdChwX2FkYXB0ZXJfdCBhZGFwdGVyKQoreworCVNYR19UUkFDRShUUkFDRV9TWEcsIFN4Z1RyYWNlQnVmZmVyLCBUUkFDRV9OT0lTWSwgIkVuSW50ciIsCisJCSAgYWRhcHRlciwgYWRhcHRlci0+SW50ZXJydXB0c0VuYWJsZWQsIDAsIDApOworCS8vIEZvciBub3csIFJTUyBpcyBkaXNhYmxlZCB3aXRoIGxpbmUgYmFzZWQgaW50ZXJydXB0cworCUFTU0VSVChhZGFwdGVyLT5Sc3NFbmFibGVkID09IEZBTFNFKTsKKwlBU1NFUlQoYWRhcHRlci0+TXNpRW5hYmxlZCA9PSBGQUxTRSk7CisJLy8KKwkvLyBUdXJuIG9uIGludGVycnVwdHMgYnkgd3JpdGluZyB0byB0aGUgaWNyIHJlZ2lzdGVyLgorCS8vCisJV1JJVEVfUkVHKGFkYXB0ZXItPlVjb2RlUmVnc1swXS5JY3IsIFNYR19JQ1IoMCwgU1hHX0lDUl9FTkFCTEUpLCBUUlVFKTsKKworCWFkYXB0ZXItPkludGVycnVwdHNFbmFibGVkID0gMTsKKworCVNYR19UUkFDRShUUkFDRV9TWEcsIFN4Z1RyYWNlQnVmZmVyLCBUUkFDRV9OT0lTWSwgIlhFbkludHIiLAorCQkgIGFkYXB0ZXIsIDAsIDAsIDApOworfQorCisvKgorICoKKyAqIHN4Z19pc3IgLSBQcm9jZXNzIGFuIGxpbmUtYmFzZWQgaW50ZXJydXB0CisgKgorICogQXJndW1lbnRzOgorICogCQlDb250ZXh0CQkJLSBPdXIgYWRhcHRlciBzdHJ1Y3R1cmUKKyAqCQlRdWV1ZURlZmF1bHQgCS0gT3V0cHV0IHBhcmFtZXRlciB0byBxdWV1ZSB0byBkZWZhdWx0IENQVQorICoJCVRhcmdldENwdXMJCS0gT3V0cHV0IGJpdG1hcCB0byBzY2hlZHVsZSBEUEMncworICoKKyAqIFJldHVybiBWYWx1ZToKKyAqIAlUUlVFIGlmIG91ciBpbnRlcnJ1cHQKKyAqLworc3RhdGljIGlycXJldHVybl90IHN4Z19pc3IoaW50IGlycSwgdm9pZCAqZGV2X2lkKQoreworCXBfbmV0X2RldmljZSBkZXYgPSAocF9uZXRfZGV2aWNlKSBkZXZfaWQ7CisJcF9hZGFwdGVyX3QgYWRhcHRlciA9IChwX2FkYXB0ZXJfdCkgbmV0ZGV2X3ByaXYoZGV2KTsKKy8vICAgICAgdTMyICAgICAgICAgICAgICAgICBDcHVNYXNrID0gMCwgaTsKKworCWFkYXB0ZXItPlN0YXRzLk51bUludHMrKzsKKwlpZiAoYWRhcHRlci0+SXNyWzBdID09IDApIHsKKwkJLy8gVGhlIFNMSUMgZHJpdmVyIHVzZWQgdG8gZXhwZXJpZW5jZSBhIG51bWJlciBvZiBzcHVyaW91cyBpbnRlcnJ1cHRzCisJCS8vIGR1ZSB0byB0aGUgZGVsYXkgYXNzb2NpYXRlZCB3aXRoIHRoZSBtYXNraW5nIG9mIHRoZSBpbnRlcnJ1cHQKKwkJLy8gKHdlJ2QgYm91bmNlIGJhY2sgaW4gaGVyZSkuICBJZiB3ZSBzZWUgdGhhdCBhZ2FpbiB3aXRoIFNhaGFyYSwKKwkJLy8gYWRkIGEgUkVBRF9SRUcgb2YgdGhlIEljciByZWdpc3RlciBhZnRlciB0aGUgV1JJVEVfUkVHIGJlbG93LgorCQlhZGFwdGVyLT5TdGF0cy5GYWxzZUludHMrKzsKKwkJcmV0dXJuIElSUV9OT05FOworCX0KKwkvLworCS8vIE1vdmUgdGhlIElzciBjb250ZW50cyBhbmQgY2xlYXIgdGhlIHZhbHVlIGluCisJLy8gc2hhcmVkIG1lbW9yeSwgYW5kIG1hc2sgaW50ZXJydXB0cworCS8vCisJYWRhcHRlci0+SXNyQ29weVswXSA9IGFkYXB0ZXItPklzclswXTsKKwlhZGFwdGVyLT5Jc3JbMF0gPSAwOworCVdSSVRFX1JFRyhhZGFwdGVyLT5VY29kZVJlZ3NbMF0uSWNyLCBTWEdfSUNSKDAsIFNYR19JQ1JfTUFTSyksIFRSVUUpOworLy8gICAgICBBU1NFUlQoYWRhcHRlci0+SXNyRHBjc1BlbmRpbmcgPT0gMCk7CisjaWYgWFhYVE9ETwkJCS8vIFJTUyBTdHVmZgorCS8vIElmIFJTUyBpcyBlbmFibGVkIGFuZCB0aGUgSVNSIHNwZWNpZmllcworCS8vIFNYR19JU1JfRVZFTlQsIHRoZW4gc2NoZWR1bGUgRFBDJ3MKKwkvLyBiYXNlZCBvbiBldmVudCBxdWV1ZXMuCisJaWYgKGFkYXB0ZXItPlJzc0VuYWJsZWQgJiYgKGFkYXB0ZXItPklzckNvcHlbMF0gJiBTWEdfSVNSX0VWRU5UKSkgeworCQlmb3IgKGkgPSAwOworCQkgICAgIGkgPCBhZGFwdGVyLT5Sc3NTeXN0ZW1JbmZvLT5Qcm9jZXNzb3JJbmZvLlJzc0NwdUNvdW50OworCQkgICAgIGkrKykgeworCQkJUFNYR19FVkVOVF9SSU5HIEV2ZW50UmluZyA9ICZhZGFwdGVyLT5FdmVudFJpbmdzW2ldOworCQkJUFNYR19FVkVOVCBFdmVudCA9CisJCQkgICAgJkV2ZW50UmluZy0+UmluZ1thZGFwdGVyLT5OZXh0RXZlbnRbaV1dOworCQkJdW5zaWduZWQgY2hhciBDcHUgPQorCQkJICAgIGFkYXB0ZXItPlJzc1N5c3RlbUluZm8tPlJzc0lkVG9DcHVbaV07CisJCQlpZiAoRXZlbnQtPlN0YXR1cyAmIEVWRU5UX1NUQVRVU19WQUxJRCkgeworCQkJCWFkYXB0ZXItPklzckRwY3NQZW5kaW5nKys7CisJCQkJQ3B1TWFzayB8PSAoMSA8PCBDcHUpOworCQkJfQorCQl9CisJfQorCS8vIE5vdywgZWl0aGVyIHNjaGVkdWxlIHRoZSBDUFVzIHNwZWNpZmllZCBieSB0aGUgQ3B1TWFzaywKKwkvLyBvciBxdWV1ZSBkZWZhdWx0CisJaWYgKENwdU1hc2spIHsKKwkJKlF1ZXVlRGVmYXVsdCA9IEZBTFNFOworCX0gZWxzZSB7CisJCWFkYXB0ZXItPklzckRwY3NQZW5kaW5nID0gMTsKKwkJKlF1ZXVlRGVmYXVsdCA9IFRSVUU7CisJfQorCSpUYXJnZXRDcHVzID0gQ3B1TWFzazsKKyNlbmRpZgorCS8vCisJLy8gIFRoZXJlIGFyZSBubyBEUENzIGluIExpbnV4LCBzbyBjYWxsIHRoZSBoYW5kbGVyIG5vdworCS8vCisJc3hnX2hhbmRsZV9pbnRlcnJ1cHQoYWRhcHRlcik7CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyB2b2lkIHN4Z19oYW5kbGVfaW50ZXJydXB0KHBfYWRhcHRlcl90IGFkYXB0ZXIpCit7CisvLyAgICB1bnNpZ25lZCBjaGFyICAgICAgICAgICBSc3NJZCAgID0gMDsKKwl1MzIgTmV3SXNyOworCisJaWYgKGFkYXB0ZXItPlN0YXRzLlJjdk5vQnVmZmVyIDwgNSkgeworCQlEQkdfRVJST1IoIkVudGVyIHN4Z19oYW5kbGVfaW50ZXJydXB0IElTUlsleF1cbiIsCisJCQkgIGFkYXB0ZXItPklzckNvcHlbMF0pOworCX0KKwlTWEdfVFJBQ0UoVFJBQ0VfU1hHLCBTeGdUcmFjZUJ1ZmZlciwgVFJBQ0VfTk9JU1ksICJIbmRsSW50ciIsCisJCSAgYWRhcHRlciwgYWRhcHRlci0+SXNyQ29weVswXSwgMCwgMCk7CisJLy8gRm9yIG5vdywgUlNTIGlzIGRpc2FibGVkIHdpdGggbGluZSBiYXNlZCBpbnRlcnJ1cHRzCisJQVNTRVJUKGFkYXB0ZXItPlJzc0VuYWJsZWQgPT0gRkFMU0UpOworCUFTU0VSVChhZGFwdGVyLT5Nc2lFbmFibGVkID09IEZBTFNFKTsKKwlBU1NFUlQoYWRhcHRlci0+SXNyQ29weVswXSk7CisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCisJLy8gQWx3YXlzIHByb2Nlc3MgdGhlIGV2ZW50IHF1ZXVlLgorCXN4Z19wcm9jZXNzX2V2ZW50X3F1ZXVlKGFkYXB0ZXIsCisJCQkJKGFkYXB0ZXItPlJzc0VuYWJsZWQgPyAvKlJzc0lkICovIDAgOiAwKSk7CisKKyNpZiBYWFhUT0RPCQkJLy8gUlNTIHN0dWZmCisJaWYgKC0tYWRhcHRlci0+SXNyRHBjc1BlbmRpbmcpIHsKKwkJLy8gV2UncmUgZG9uZS4KKwkJQVNTRVJUKGFkYXB0ZXItPlJzc0VuYWJsZWQpOworCQlTWEdfVFJBQ0UoVFJBQ0VfU1hHLCBTeGdUcmFjZUJ1ZmZlciwgVFJBQ0VfTk9JU1ksICJEUENzUGVuZCIsCisJCQkgIGFkYXB0ZXIsIDAsIDAsIDApOworCQlyZXR1cm47CisJfQorI2VuZGlmCisJLy8KKwkvLyBMYXN0IChvciBvbmx5KSBEUEMgcHJvY2Vzc2VzIHRoZSBJU1IgYW5kIGNsZWFycyB0aGUgaW50ZXJydXB0LgorCS8vCisJTmV3SXNyID0gc3hnX3Byb2Nlc3NfaXNyKGFkYXB0ZXIsIDApOworCS8vCisJLy8gUmVlbmFibGUgaW50ZXJydXB0cworCS8vCisJYWRhcHRlci0+SXNyQ29weVswXSA9IDA7CisJU1hHX1RSQUNFKFRSQUNFX1NYRywgU3hnVHJhY2VCdWZmZXIsIFRSQUNFX05PSVNZLCAiQ2xlYXJJc3IiLAorCQkgIGFkYXB0ZXIsIE5ld0lzciwgMCwgMCk7CisKKwlpZiAoYWRhcHRlci0+U3RhdHMuUmN2Tm9CdWZmZXIgPCA1KSB7CisJCURCR19FUlJPUgorCQkgICAgKCJFeGl0IHN4Z19oYW5kbGVfaW50ZXJydXB0MiBhZnRlciBlbmFibGluZyBpbnRlcnJ1cHRcbiIpOworCX0KKworCVdSSVRFX1JFRyhhZGFwdGVyLT5VY29kZVJlZ3NbMF0uSXNyLCBOZXdJc3IsIFRSVUUpOworCisJU1hHX1RSQUNFKFRSQUNFX1NYRywgU3hnVHJhY2VCdWZmZXIsIFRSQUNFX05PSVNZLCAiWEhuZGxJbnQiLAorCQkgIGFkYXB0ZXIsIDAsIDAsIDApOworfQorCisvKgorICoKKyAqIHN4Z19wcm9jZXNzX2lzciAtIFByb2Nlc3MgYW4gaW50ZXJydXB0LiAgQ2FsbGVkIGZyb20gdGhlIGxpbmUtYmFzZWQgYW5kCisgKgkJCW1lc3NhZ2UgYmFzZWQgaW50ZXJydXB0IERQQyByb3V0aW5lcworICoKKyAqIEFyZ3VtZW50czoKKyAqIAkJYWRhcHRlcgkJCS0gT3VyIGFkYXB0ZXIgc3RydWN0dXJlCisgKgkJUXVldWUJCQktIFRoZSBJU1IgdGhhdCBuZWVkcyBwcm9jZXNzaW5nCisgKgorICogUmV0dXJuIFZhbHVlOgorICogCU5vbmUKKyAqLworc3RhdGljIGludCBzeGdfcHJvY2Vzc19pc3IocF9hZGFwdGVyX3QgYWRhcHRlciwgdTMyIE1lc3NhZ2VJZCkKK3sKKwl1MzIgSXNyID0gYWRhcHRlci0+SXNyQ29weVtNZXNzYWdlSWRdOworCXUzMiBOZXdJc3IgPSAwOworCisJU1hHX1RSQUNFKFRSQUNFX1NYRywgU3hnVHJhY2VCdWZmZXIsIFRSQUNFX05PSVNZLCAiUHJvY0lzciIsCisJCSAgYWRhcHRlciwgSXNyLCAwLCAwKTsKKworCS8vIEVycm9yCisJaWYgKElzciAmIFNYR19JU1JfRVJSKSB7CisJCWlmIChJc3IgJiBTWEdfSVNSX1BEUUYpIHsKKwkJCWFkYXB0ZXItPlN0YXRzLlBkcUZ1bGwrKzsKKwkJCURCR19FUlJPUigiJXM6IFNYR19JU1JfRVJSICBQRFFGISFcbiIsIF9fRlVOQ1RJT05fXyk7CisJCX0KKwkJLy8gTm8gaG9zdCBidWZmZXIKKwkJaWYgKElzciAmIFNYR19JU1JfUk1JU1MpIHsKKwkJCS8vIFRoZXJlIGlzIGEgYnVuY2ggb2YgY29kZSBpbiB0aGUgU0xJQyBkcml2ZXIgd2hpY2gKKwkJCS8vIGF0dGVtcHRzIHRvIHByb2Nlc3MgbW9yZSByZWNlaXZlIGV2ZW50cyBwZXIgRFBDCisJCQkvLyBpZiB3ZSBzdGFydCB0byBmYWxsIGJlaGluZC4gIFdlJ2xsIHByb2JhYmx5CisJCQkvLyBuZWVkIHRvIGRvIHNvbWV0aGluZyBzaW1pbGFyIGhlcmUsIGJ1dCBob2xkCisJCQkvLyBvZmYgZm9yIG5vdy4gIEkgZG9uJ3Qgd2FudCB0byBtYWtlIHRoZSBjb2RlIG1vcmUKKwkJCS8vIGNvbXBsaWNhdGVkIHRoYW4gc3RyaWN0bHkgbmVlZGVkLgorCQkJYWRhcHRlci0+U3RhdHMuUmN2Tm9CdWZmZXIrKzsKKwkJCWlmIChhZGFwdGVyLT5TdGF0cy5SY3ZOb0J1ZmZlciA8IDUpIHsKKwkJCQlEQkdfRVJST1IoIiVzOiBTWEdfSVNSX0VSUiAgUk1JU1MhIVxuIiwKKwkJCQkJICBfX0ZVTkNUSU9OX18pOworCQkJfQorCQl9CisJCS8vIENhcmQgY3Jhc2gKKwkJaWYgKElzciAmIFNYR19JU1JfREVBRCkgeworCQkJLy8gU2V0IGFzaWRlIHRoZSBjcmFzaCBpbmZvIGFuZCBzZXQgdGhlIGFkYXB0ZXIgc3RhdGUgdG8gUkVTRVQKKwkJCWFkYXB0ZXItPkNyYXNoQ3B1ID0KKwkJCSAgICAodW5zaWduZWQgY2hhcikoKElzciAmIFNYR19JU1JfQ1BVKSA+PgorCQkJCQkgICAgU1hHX0lTUl9DUFVfU0hJRlQpOworCQkJYWRhcHRlci0+Q3Jhc2hMb2NhdGlvbiA9ICh1c2hvcnQpIChJc3IgJiBTWEdfSVNSX0NSQVNIKTsKKwkJCWFkYXB0ZXItPkRlYWQgPSBUUlVFOworCQkJREJHX0VSUk9SKCIlczogSVNSX0RFQUQgJXgsIENQVTogJWRcbiIsIF9fRlVOQ1RJT05fXywKKwkJCQkgIGFkYXB0ZXItPkNyYXNoTG9jYXRpb24sIGFkYXB0ZXItPkNyYXNoQ3B1KTsKKwkJfQorCQkvLyBFdmVudCByaW5nIGZ1bGwKKwkJaWYgKElzciAmIFNYR19JU1JfRVJGVUxMKSB7CisJCQkvLyBTYW1lIGlzc3VlIGFzIFJNSVNTLCByZWFsbHkuICBUaGlzIG1lYW5zIHRoZQorCQkJLy8gaG9zdCBpcyBmYWxsaW5nIGJlaGluZCB0aGUgY2FyZC4gIE5lZWQgdG8gaW5jcmVhc2UKKwkJCS8vIGV2ZW50IHJpbmcgc2l6ZSwgcHJvY2VzcyBtb3JlIGV2ZW50cyBwZXIgaW50ZXJydXB0LAorCQkJLy8gYW5kL29yIHJlZHVjZS9yZW1vdmUgaW50ZXJydXB0IGFnZ3JlZ2F0aW9uLgorCQkJYWRhcHRlci0+U3RhdHMuRXZlbnRSaW5nRnVsbCsrOworCQkJREJHX0VSUk9SKCIlczogU1hHX0lTUl9FUlIgIEVWRU5UIFJJTkcgRlVMTCEhXG4iLAorCQkJCSAgX19GVU5DVElPTl9fKTsKKwkJfQorCQkvLyBUcmFuc21pdCBkcm9wIC0gbm8gRFJBTSBidWZmZXJzIG9yIFhNVCBlcnJvcgorCQlpZiAoSXNyICYgU1hHX0lTUl9YRFJPUCkgeworCQkJYWRhcHRlci0+U3RhdHMuWG10RHJvcHMrKzsKKwkJCWFkYXB0ZXItPlN0YXRzLlhtdEVycm9ycysrOworCQkJREJHX0VSUk9SKCIlczogU1hHX0lTUl9FUlIgIFhEUk9QISFcbiIsIF9fRlVOQ1RJT05fXyk7CisJCX0KKwl9CisJLy8gU2xvd3BhdGggc2VuZCBjb21wbGV0aW9ucworCWlmIChJc3IgJiBTWEdfSVNSX1NQU0VORCkgeworCQlzeGdfY29tcGxldGVfc2xvd19zZW5kKGFkYXB0ZXIpOworCX0KKwkvLyBEdW1wCisJaWYgKElzciAmIFNYR19JU1JfVVBDKSB7CisJCUFTU0VSVChhZGFwdGVyLT5EdW1wQ21kUnVubmluZyk7CS8vIE1heWJlIGNoYW5nZSB3aGVuIGRlYnVnIGlzIGFkZGVkLi4KKwkJYWRhcHRlci0+RHVtcENtZFJ1bm5pbmcgPSBGQUxTRTsKKwl9CisJLy8gTGluayBldmVudAorCWlmIChJc3IgJiBTWEdfSVNSX0xJTkspIHsKKwkJc3hnX2xpbmtfZXZlbnQoYWRhcHRlcik7CisJfQorCS8vIERlYnVnIC0gYnJlYWtwb2ludCBoaXQKKwlpZiAoSXNyICYgU1hHX0lTUl9CUkVBSykgeworCQkvLyBBdCB0aGUgbW9tZW50IEFHREIgaXNuJ3Qgd3JpdHRlbiB0byBzdXBwb3J0IGludGVyYWN0aXZlCisJCS8vIGRlYnVnIHNlc3Npb25zLiAgV2hlbiBpdCBpcywgdGhpcyBpbnRlcnJ1cHQgd2lsbCBiZSB1c2VkCisJCS8vIHRvIHNpZ25hbCBBR0RCIHRoYXQgaXQgaGFzIGhpdCBhIGJyZWFrcG9pbnQuICBGb3Igbm93LCBBU1NFUlQuCisJCUFTU0VSVCgwKTsKKwl9CisJLy8gSGVhcnRiZWF0IHJlc3BvbnNlCisJaWYgKElzciAmIFNYR19JU1JfUElORykgeworCQlhZGFwdGVyLT5QaW5nT3V0c3RhbmRpbmcgPSBGQUxTRTsKKwl9CisJU1hHX1RSQUNFKFRSQUNFX1NYRywgU3hnVHJhY2VCdWZmZXIsIFRSQUNFX05PSVNZLCAiWFByb2NJc3IiLAorCQkgIGFkYXB0ZXIsIElzciwgTmV3SXNyLCAwKTsKKworCXJldHVybiAoTmV3SXNyKTsKK30KKworLyoKKyAqCisgKiBzeGdfcHJvY2Vzc19ldmVudF9xdWV1ZSAtIFByb2Nlc3Mgb3VyIGV2ZW50IHF1ZXVlCisgKgorICogQXJndW1lbnRzOgorICogCQktIGFkYXB0ZXIJLSBBZGFwdGVyIHN0cnVjdHVyZQorICoJCS0gUnNzSWQJCS0gVGhlIGV2ZW50IHF1ZXVlIHJlcXVpcmluZyBwcm9jZXNzaW5nCisgKgorICogUmV0dXJuIFZhbHVlOgorICogCU5vbmUuCisgKi8KK3N0YXRpYyB1MzIgc3hnX3Byb2Nlc3NfZXZlbnRfcXVldWUocF9hZGFwdGVyX3QgYWRhcHRlciwgdTMyIFJzc0lkKQoreworCVBTWEdfRVZFTlRfUklORyBFdmVudFJpbmcgPSAmYWRhcHRlci0+RXZlbnRSaW5nc1tSc3NJZF07CisJUFNYR19FVkVOVCBFdmVudCA9ICZFdmVudFJpbmctPlJpbmdbYWRhcHRlci0+TmV4dEV2ZW50W1Jzc0lkXV07CisJdTMyIEV2ZW50c1Byb2Nlc3NlZCA9IDAsIEJhdGNoZXMgPSAwOworCXUzMiBudW1fc2ticyA9IDA7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKyNpZmRlZiBMSU5VWF9IQU5ETEVTX1JDVl9JTkRJQ0FUSU9OX0xJU1RTCisJc3RydWN0IHNrX2J1ZmYgKnByZXZfc2tiID0gTlVMTDsKKwlzdHJ1Y3Qgc2tfYnVmZiAqSW5kaWNhdGlvbkxpc3RbU1hHX1JDVl9BUlJBWVNJWkVdOworCXUzMiBJbmRleDsKKwlQU1hHX1JDVl9EQVRBX0JVRkZFUl9IRFIgUmN2RGF0YUJ1ZmZlckhkcjsKKyNlbmRpZgorCXUzMiBSZXR1cm5TdGF0dXMgPSAwOworCisJQVNTRVJUKChhZGFwdGVyLT5TdGF0ZSA9PSBTWEdfU1RBVEVfUlVOTklORykgfHwKKwkgICAgICAgKGFkYXB0ZXItPlN0YXRlID09IFNYR19TVEFURV9QQVVTSU5HKSB8fAorCSAgICAgICAoYWRhcHRlci0+U3RhdGUgPT0gU1hHX1NUQVRFX1BBVVNFRCkgfHwKKwkgICAgICAgKGFkYXB0ZXItPlN0YXRlID09IFNYR19TVEFURV9IQUxUSU5HKSk7CisJLy8gV2UgbWF5IHN0aWxsIGhhdmUgdW5wcm9jZXNzZWQgZXZlbnRzIG9uIHRoZSBxdWV1ZSBpZgorCS8vIHRoZSBjYXJkIGNyYXNoZWQuICBEb24ndCBwcm9jZXNzIHRoZW0uCisJaWYgKGFkYXB0ZXItPkRlYWQpIHsKKwkJcmV0dXJuICgwKTsKKwl9CisJLy8gSW4gdGhlb3J5IHRoZXJlIHNob3VsZCBvbmx5IGJlIGEgc2luZ2xlIHByb2Nlc3NvciB0aGF0CisJLy8gYWNjZXNzZXMgdGhpcyBxdWV1ZSwgYW5kIG9ubHkgYXQgaW50ZXJydXB0LURQQyB0aW1lLiAgU28KKwkvLyB3ZSBzaG91bGRuJ3QgbmVlZCBhIGxvY2sgZm9yIGFueSBvZiB0aGlzLgorCXdoaWxlIChFdmVudC0+U3RhdHVzICYgRVZFTlRfU1RBVFVTX1ZBTElEKSB7CisJCVNYR19UUkFDRShUUkFDRV9TWEcsIFN4Z1RyYWNlQnVmZmVyLCBUUkFDRV9OT0lTWSwgIkV2ZW50IiwKKwkJCSAgRXZlbnQsIEV2ZW50LT5Db2RlLCBFdmVudC0+U3RhdHVzLAorCQkJICBhZGFwdGVyLT5OZXh0RXZlbnQpOworCQlzd2l0Y2ggKEV2ZW50LT5Db2RlKSB7CisJCWNhc2UgRVZFTlRfQ09ERV9CVUZGRVJTOgorCQkJQVNTRVJUKCEoRXZlbnQtPkNvbW1hbmRJbmRleCAmIDB4RkYwMCkpOwkvLyBTWEdfUklOR19JTkZPIEhlYWQgJiBUYWlsID09IHVuc2lnbmVkIGNoYXIKKwkJCS8vCisJCQlzeGdfY29tcGxldGVfZGVzY3JpcHRvcl9ibG9ja3MoYWRhcHRlciwKKwkJCQkJCSAgICAgICBFdmVudC0+Q29tbWFuZEluZGV4KTsKKwkJCS8vCisJCQlicmVhazsKKwkJY2FzZSBFVkVOVF9DT0RFX1NMT1dSQ1Y6CisJCQktLWFkYXB0ZXItPlJjdkJ1ZmZlcnNPbkNhcmQ7CisJCQlpZiAoKHNrYiA9IHN4Z19zbG93X3JlY2VpdmUoYWRhcHRlciwgRXZlbnQpKSkgeworCQkJCXUzMiByeF9ieXRlczsKKyNpZmRlZiBMSU5VWF9IQU5ETEVTX1JDVl9JTkRJQ0FUSU9OX0xJU1RTCisJCQkJLy8gQWRkIGl0IHRvIG91ciBpbmRpY2F0aW9uIGxpc3QKKwkJCQlTWEdfQUREX1JDVl9QQUNLRVQoYWRhcHRlciwgc2tiLCBwcmV2X3NrYiwKKwkJCQkJCSAgIEluZGljYXRpb25MaXN0LCBudW1fc2ticyk7CisJCQkJLy8gIEluIExpbnV4LCB3ZSBqdXN0IHBhc3MgdXAgZWFjaCBza2IgdG8gdGhlIHByb3RvY29sIGFib3ZlIGF0IHRoaXMgcG9pbnQsCisJCQkJLy8gIHRoZXJlIGlzIG5vIGNhcGFiaWxpdHkgb2YgYW4gaW5kaWNhdGlvbiBsaXN0LgorI2Vsc2UKKy8vIENIRUNLICAgICAgICAgICAgc2tiX3B1bGwoc2tiLCBJTklDX1JDVkJVRl9IRUFEU0laRSk7CisJCQkJcnhfYnl0ZXMgPSBFdmVudC0+TGVuZ3RoOwkvLyAocmN2YnVmLT5sZW5ndGggJiBJUkhERFJfRkxFTl9NU0spOworCQkJCXNrYl9wdXQoc2tiLCByeF9ieXRlcyk7CisJCQkJYWRhcHRlci0+c3RhdHMucnhfcGFja2V0cysrOworCQkJCWFkYXB0ZXItPnN0YXRzLnJ4X2J5dGVzICs9IHJ4X2J5dGVzOworI2lmIFNYR19PRkZMT0FEX0lQX0NIRUNLU1VNCisJCQkJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9VTk5FQ0VTU0FSWTsKKyNlbmRpZgorCQkJCXNrYi0+ZGV2ID0gYWRhcHRlci0+bmV0ZGV2OworCQkJCXNrYi0+cHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIHNrYi0+ZGV2KTsKKwkJCQluZXRpZl9yeChza2IpOworI2VuZGlmCisJCQl9CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCURCR19FUlJPUigiJXM6IEVSUk9SICBJbnZhbGlkIEV2ZW50Q29kZSAlZFxuIiwKKwkJCQkgIF9fRlVOQ1RJT05fXywgRXZlbnQtPkNvZGUpOworLy8gICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKDApOworCQl9CisJCS8vIFNlZSBpZiB3ZSBuZWVkIHRvIHJlc3RvY2sgY2FyZCByZWNlaXZlIGJ1ZmZlcnMuCisJCS8vIFRoZXJlIGFyZSB0d28gdGhpbmdzIHRvIG5vdGUgaGVyZToKKwkJLy8gICAgICBGaXJzdCAtIFRoaXMgdGVzdCBpcyBub3QgU01QIHNhZmUuICBUaGUKKwkJLy8gICAgICAgICAgICAgIGFkYXB0ZXItPkJ1ZmZlcnNPbkNhcmQgZmllbGQgaXMgcHJvdGVjdGVkIHZpYSBhdG9taWMgaW50ZXJsb2NrZWQgY2FsbHMsIGJ1dAorCQkvLyAgICAgICAgICAgICAgd2UgZG8gbm90IHByb3RlY3QgaXQgd2l0aCByZXNwZWN0IHRvIHRoZXNlIHRlc3RzLiAgVGhlIG9ubHkgd2F5IHRvIGRvIHRoYXQKKwkJLy8gICAgICBpcyB3aXRoIGEgbG9jaywgYW5kIEkgZG9uJ3Qgd2FudCB0byBncmFiIGEgbG9jayBldmVyeSB0aW1lIHdlIGFkanVzdCB0aGUKKwkJLy8gICAgICBCdWZmZXJzT25DYXJkIGNvdW50LiAgSW5zdGVhZCwgd2UgYWxsb3cgdGhlIGJ1ZmZlciByZXBsZW5pc2htZW50IHRvIGJlIG9mZgorCQkvLyAgICAgIG9uY2UgaW4gYSB3aGlsZS4gIFRoZSB3b3JzdCB0aGF0IGNhbiBoYXBwZW4gaXMgdGhlIGNhcmQgaXMgZ2l2ZW4gb25lCisJCS8vICAgICAgbW9yZS1vci1sZXNzIGRlc2NyaXB0b3IgYmxvY2sgdGhhbiB0aGUgYXJiaXRyYXJ5IHZhbHVlIHdlJ3ZlIGNob3Nlbi4KKwkJLy8gICAgICBObyBiaWcgZGVhbAorCQkvLyAgICAgIEluIHNob3J0IERPIE5PVCBBREQgQSBMT0NLIEhFUkUsIE9SIFdIRVJFIFJjdkJ1ZmZlcnNPbkNhcmQgaXMgYWRqdXN0ZWQuCisJCS8vICAgICAgU2Vjb25kIC0gV2UgZXhwZWN0IHRoaXMgdGVzdCB0byByYXJlbHkgZXZhbHVhdGUgdG8gdHJ1ZS4gIFdlIGF0dGVtcHQgdG8KKwkJLy8gICAgICByZWZpbGwgZGVzY3JpcHRvciBibG9ja3MgYXMgdGhleSBhcmUgcmV0dXJuZWQgdG8gdXMKKwkJLy8gICAgICAoc3hnX2NvbXBsZXRlX2Rlc2NyaXB0b3JfYmxvY2tzKSwgc28gVGhlIG9ubHkgdGltZSB0aGlzIHNob3VsZCBldmFsdWF0ZQorCQkvLyAgICAgIHRvIHRydWUgaXMgd2hlbiBzeGdfY29tcGxldGVfZGVzY3JpcHRvcl9ibG9ja3MgZmFpbGVkIHRvIGFsbG9jYXRlCisJCS8vICAgICAgICAgICAgICByZWNlaXZlIGJ1ZmZlcnMuCisJCWlmIChhZGFwdGVyLT5SY3ZCdWZmZXJzT25DYXJkIDwgU1hHX1JDVl9EQVRBX0JVRkZFUlMpIHsKKwkJCXN4Z19zdG9ja19yY3ZfYnVmZmVycyhhZGFwdGVyKTsKKwkJfQorCQkvLyBJdCdzIG1vcmUgZWZmaWNpZW50IHRvIGp1c3Qgc2V0IHRoaXMgdG8gemVyby4KKwkJLy8gQnV0IGNsZWFyaW5nIHRoZSB0b3AgYml0IHNhdmVzIHBvdGVudGlhbCBkZWJ1ZyBpbmZvLi4uCisJCUV2ZW50LT5TdGF0dXMgJj0gfkVWRU5UX1NUQVRVU19WQUxJRDsKKwkJLy8gQWR2YW5jdCB0byB0aGUgbmV4dCBldmVudAorCQlTWEdfQURWQU5DRV9JTkRFWChhZGFwdGVyLT5OZXh0RXZlbnRbUnNzSWRdLCBFVkVOVF9SSU5HX1NJWkUpOworCQlFdmVudCA9ICZFdmVudFJpbmctPlJpbmdbYWRhcHRlci0+TmV4dEV2ZW50W1Jzc0lkXV07CisJCUV2ZW50c1Byb2Nlc3NlZCsrOworCQlpZiAoRXZlbnRzUHJvY2Vzc2VkID09IEVWRU5UX1JJTkdfQkFUQ0gpIHsKKwkJCS8vIFJlbGVhc2UgYSBiYXRjaCBvZiBldmVudHMgYmFjayB0byB0aGUgY2FyZAorCQkJV1JJVEVfUkVHKGFkYXB0ZXItPlVjb2RlUmVnc1tSc3NJZF0uRXZlbnRSZWxlYXNlLAorCQkJCSAgRVZFTlRfUklOR19CQVRDSCwgRkFMU0UpOworCQkJRXZlbnRzUHJvY2Vzc2VkID0gMDsKKwkJCS8vIElmIHdlJ3ZlIHByb2Nlc3NlZCBvdXIgYmF0Y2ggbGltaXQsIGJyZWFrIG91dCBvZiB0aGUKKwkJCS8vIGxvb3AgYW5kIHJldHVybiBTWEdfSVNSX0VWRU5UIHRvIGFycmFuZ2UgZm9yIHVzIHRvCisJCQkvLyBiZSBjYWxsZWQgYWdhaW4KKwkJCWlmIChCYXRjaGVzKysgPT0gRVZFTlRfQkFUQ0hfTElNSVQpIHsKKwkJCQlTWEdfVFJBQ0UoVFJBQ0VfU1hHLCBTeGdUcmFjZUJ1ZmZlciwKKwkJCQkJICBUUkFDRV9OT0lTWSwgIkV2dExpbWl0IiwgQmF0Y2hlcywKKwkJCQkJICBhZGFwdGVyLT5OZXh0RXZlbnQsIDAsIDApOworCQkJCVJldHVyblN0YXR1cyA9IFNYR19JU1JfRVZFTlQ7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwl9CisjaWZkZWYgTElOVVhfSEFORExFU19SQ1ZfSU5ESUNBVElPTl9MSVNUUworCS8vCisJLy8gSW5kaWNhdGUgYW55IHJlY2VpdmVkIGR1bWItbmljIGZyYW1lcworCS8vCisJU1hHX0lORElDQVRFX1BBQ0tFVFMoYWRhcHRlciwgSW5kaWNhdGlvbkxpc3QsIG51bV9za2JzKTsKKyNlbmRpZgorCS8vCisJLy8gUmVsZWFzZSBldmVudHMgYmFjayB0byB0aGUgY2FyZC4KKwkvLworCWlmIChFdmVudHNQcm9jZXNzZWQpIHsKKwkJV1JJVEVfUkVHKGFkYXB0ZXItPlVjb2RlUmVnc1tSc3NJZF0uRXZlbnRSZWxlYXNlLAorCQkJICBFdmVudHNQcm9jZXNzZWQsIEZBTFNFKTsKKwl9CisJU1hHX1RSQUNFKFRSQUNFX1NYRywgU3hnVHJhY2VCdWZmZXIsIFRSQUNFX05PSVNZLCAiWFByY0V2bnQiLAorCQkgIEJhdGNoZXMsIEV2ZW50c1Byb2Nlc3NlZCwgYWRhcHRlci0+TmV4dEV2ZW50LCBudW1fc2ticyk7CisKKwlyZXR1cm4gKFJldHVyblN0YXR1cyk7Cit9CisKKy8qCisgKiBzeGdfY29tcGxldGVfc2xvd19zZW5kIC0gQ29tcGxldGUgc2xvd3BhdGggb3IgZHVtYi1uaWMgc2VuZHMKKyAqCisgKiBBcmd1bWVudHMgLQorICoJYWRhcHRlcgkJLSBBIHBvaW50ZXIgdG8gb3VyIGFkYXB0ZXIgc3RydWN0dXJlCisKKyAqIFJldHVybgorICoJTm9uZQorICovCitzdGF0aWMgdm9pZCBzeGdfY29tcGxldGVfc2xvd19zZW5kKHBfYWRhcHRlcl90IGFkYXB0ZXIpCit7CisJUFNYR19YTVRfUklORyBYbXRSaW5nID0gJmFkYXB0ZXItPlhtdFJpbmdzWzBdOworCVBTWEdfUklOR19JTkZPIFhtdFJpbmdJbmZvID0gJmFkYXB0ZXItPlhtdFJpbmdaZXJvSW5mbzsKKwl1MzIgKkNvbnRleHRUeXBlOworCVBTWEdfQ01EIFhtdENtZDsKKworCS8vIE5PVEUgLSBUaGlzIGxvY2sgaXMgZHJvcHBlZCBhbmQgcmVncmFiYmVkIGluIHRoaXMgbG9vcC4KKwkvLyBUaGlzIG1lYW5zIHR3byBkaWZmZXJlbnQgcHJvY2Vzc29ycyBjYW4gYm90aCBiZSBydW5uaW5nCisJLy8gdGhyb3VnaCB0aGlzIGxvb3AuIEJlICp2ZXJ5KiBjYXJlZnVsLgorCXNwaW5fbG9jaygmYWRhcHRlci0+WG10WmVyb0xvY2spOworCVNYR19UUkFDRShUUkFDRV9TWEcsIFN4Z1RyYWNlQnVmZmVyLCBUUkFDRV9OT0lTWSwgIkNtcFNuZHMiLAorCQkgIGFkYXB0ZXIsIFhtdFJpbmdJbmZvLT5IZWFkLCBYbXRSaW5nSW5mby0+VGFpbCwgMCk7CisKKwl3aGlsZSAoWG10UmluZ0luZm8tPlRhaWwgIT0gKmFkYXB0ZXItPlhtdFJpbmdaZXJvSW5kZXgpIHsKKwkJLy8gTG9jYXRlIHRoZSBjdXJyZW50IENtZCAocmluZyBkZXNjcmlwdG9yIGVudHJ5KSwgYW5kCisJCS8vIGFzc29jaWF0ZWQgU0dMLCBhbmQgYWR2YW5jZSB0aGUgdGFpbAorCQlTWEdfUkVUVVJOX0NNRChYbXRSaW5nLCBYbXRSaW5nSW5mbywgWG10Q21kLCBDb250ZXh0VHlwZSk7CisJCUFTU0VSVChDb250ZXh0VHlwZSk7CisJCVNYR19UUkFDRShUUkFDRV9TWEcsIFN4Z1RyYWNlQnVmZmVyLCBUUkFDRV9OT0lTWSwgIkNtcFNuZCIsCisJCQkgIFhtdFJpbmdJbmZvLT5IZWFkLCBYbXRSaW5nSW5mby0+VGFpbCwgWG10Q21kLCAwKTsKKwkJLy8gQ2xlYXIgdGhlIFNHTCBmaWVsZC4KKwkJWG10Q21kLT5TZ2wgPSAwOworCisJCXN3aXRjaCAoKkNvbnRleHRUeXBlKSB7CisJCWNhc2UgU1hHX1NHTF9EVU1COgorCQkJeworCQkJCXN0cnVjdCBza19idWZmICpza2I7CisJCQkJLy8gRHVtYi1uaWMgc2VuZC4gIENvbW1hbmQgY29udGV4dCBpcyB0aGUgZHVtYi1uaWMgU0dMCisJCQkJc2tiID0gKHN0cnVjdCBza19idWZmICopQ29udGV4dFR5cGU7CisJCQkJLy8gQ29tcGxldGUgdGhlIHNlbmQKKwkJCQlTWEdfVFJBQ0UoVFJBQ0VfU1hHLCBTeGdUcmFjZUJ1ZmZlciwKKwkJCQkJICBUUkFDRV9JTVBPUlRBTlQsICJEbVNuZENtcCIsIHNrYiwgMCwKKwkJCQkJICAwLCAwKTsKKwkJCQlBU1NFUlQoYWRhcHRlci0+U3RhdHMuWG10UUxlbik7CisJCQkJYWRhcHRlci0+U3RhdHMuWG10UUxlbi0tOwkvLyB3aXRoaW4gWG10WmVyb0xvY2sKKwkJCQlhZGFwdGVyLT5TdGF0cy5YbXRPaysrOworCQkJCS8vIE5vdyBkcm9wIHRoZSBsb2NrIGFuZCBjb21wbGV0ZSB0aGUgc2VuZCBiYWNrIHRvCisJCQkJLy8gTWljcm9zb2Z0LiAgV2UgbmVlZCB0byBkcm9wIHRoZSBsb2NrIGJlY2F1c2UKKwkJCQkvLyBNaWNyb3NvZnQgY2FuIGNvbWUgYmFjayB3aXRoIGEgY2hpbW5leSBzZW5kLCB3aGljaAorCQkJCS8vIHJlc3VsdHMgaW4gYSBkb3VibGUgdHJpcCBpbiBTeGdUY3BPdXB1dAorCQkJCXNwaW5fdW5sb2NrKCZhZGFwdGVyLT5YbXRaZXJvTG9jayk7CisJCQkJU1hHX0NPTVBMRVRFX0RVTUJfU0VORChhZGFwdGVyLCBza2IpOworCQkJCS8vIGFuZCByZWFjcXVpcmUuLgorCQkJCXNwaW5fbG9jaygmYWRhcHRlci0+WG10WmVyb0xvY2spOworCQkJfQorCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlBU1NFUlQoMCk7CisJCX0KKwl9CisJc3Bpbl91bmxvY2soJmFkYXB0ZXItPlhtdFplcm9Mb2NrKTsKKwlTWEdfVFJBQ0UoVFJBQ0VfU1hHLCBTeGdUcmFjZUJ1ZmZlciwgVFJBQ0VfTk9JU1ksICJDbXBTbmQiLAorCQkgIGFkYXB0ZXIsIFhtdFJpbmdJbmZvLT5IZWFkLCBYbXRSaW5nSW5mby0+VGFpbCwgMCk7Cit9CisKKy8qCisgKiBzeGdfc2xvd19yZWNlaXZlCisgKgorICogQXJndW1lbnRzIC0KKyAqCWFkYXB0ZXIJCS0gQSBwb2ludGVyIHRvIG91ciBhZGFwdGVyIHN0cnVjdHVyZQorICoJRXZlbnQJCS0gUmVjZWl2ZSBldmVudAorICoKKyAqIFJldHVybgorICoJIHNrYgorICovCitzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnN4Z19zbG93X3JlY2VpdmUocF9hZGFwdGVyX3QgYWRhcHRlciwgUFNYR19FVkVOVCBFdmVudCkKK3sKKwlQU1hHX1JDVl9EQVRBX0JVRkZFUl9IRFIgUmN2RGF0YUJ1ZmZlckhkcjsKKwlzdHJ1Y3Qgc2tfYnVmZiAqUGFja2V0OworCisJUmN2RGF0YUJ1ZmZlckhkciA9IChQU1hHX1JDVl9EQVRBX0JVRkZFUl9IRFIpIEV2ZW50LT5Ib3N0SGFuZGxlOworCUFTU0VSVChSY3ZEYXRhQnVmZmVySGRyKTsKKwlBU1NFUlQoUmN2RGF0YUJ1ZmZlckhkci0+U3RhdGUgPT0gU1hHX0JVRkZFUl9PTkNBUkQpOworCUFTU0VSVChTWEdfUkVDRUlWRV9EQVRBX0xPQ0FUSU9OKFJjdkRhdGFCdWZmZXJIZHIpID09CisJICAgICAgIFJjdkRhdGFCdWZmZXJIZHItPlZpcnR1YWxBZGRyZXNzKTsKKwlTWEdfVFJBQ0UoVFJBQ0VfU1hHLCBTeGdUcmFjZUJ1ZmZlciwgVFJBQ0VfSU1QT1JUQU5ULCAiU2xvd1JjdiIsIEV2ZW50LAorCQkgIFJjdkRhdGFCdWZmZXJIZHIsIFJjdkRhdGFCdWZmZXJIZHItPlN0YXRlLAorCQkgIFJjdkRhdGFCdWZmZXJIZHItPlZpcnR1YWxBZGRyZXNzKTsKKwkvLyBEcm9wIHJjdiBmcmFtZXMgaW4gbm9uLXJ1bm5pbmcgc3RhdGUKKwlzd2l0Y2ggKGFkYXB0ZXItPlN0YXRlKSB7CisJY2FzZSBTWEdfU1RBVEVfUlVOTklORzoKKwkJYnJlYWs7CisJY2FzZSBTWEdfU1RBVEVfUEFVU0lORzoKKwljYXNlIFNYR19TVEFURV9QQVVTRUQ6CisJY2FzZSBTWEdfU1RBVEVfSEFMVElORzoKKwkJZ290byBkcm9wOworCWRlZmF1bHQ6CisJCUFTU0VSVCgwKTsKKwkJZ290byBkcm9wOworCX0KKworCS8vIENoYW5nZSBidWZmZXIgc3RhdGUgdG8gVVBTVFJFQU0KKwlSY3ZEYXRhQnVmZmVySGRyLT5TdGF0ZSA9IFNYR19CVUZGRVJfVVBTVFJFQU07CisJaWYgKEV2ZW50LT5TdGF0dXMgJiBFVkVOVF9TVEFUVVNfUkNWRVJSKSB7CisJCVNYR19UUkFDRShUUkFDRV9TWEcsIFN4Z1RyYWNlQnVmZmVyLCBUUkFDRV9OT0lTWSwgIlJjdkVycm9yIiwKKwkJCSAgRXZlbnQsIEV2ZW50LT5TdGF0dXMsIEV2ZW50LT5Ib3N0SGFuZGxlLCAwKTsKKwkJLy8gWFhYVE9ETyAtIFJlbW92ZSB0aGlzIHByaW50IGxhdGVyCisJCURCR19FUlJPUigiU1hHOiBSZWNlaXZlIGVycm9yICV4XG4iLCAqKHUzMiAqKQorCQkJICBTWEdfUkVDRUlWRV9EQVRBX0xPQ0FUSU9OKFJjdkRhdGFCdWZmZXJIZHIpKTsKKwkJc3hnX3Byb2Nlc3NfcmN2X2Vycm9yKGFkYXB0ZXIsICoodTMyICopCisJCQkJICAgICAgU1hHX1JFQ0VJVkVfREFUQV9MT0NBVElPTgorCQkJCSAgICAgIChSY3ZEYXRhQnVmZmVySGRyKSk7CisJCWdvdG8gZHJvcDsKKwl9CisjaWYgWFhYVE9ETwkJCS8vIFZMQU4gc3R1ZmYKKwkvLyBJZiB0aGVyZSdzIGEgVkxBTiB0YWcsIGV4dHJhY3QgaXQgYW5kIHZhbGlkYXRlIGl0CisJaWYgKCgocF9ldGhlcl9oZWFkZXIpIChTWEdfUkVDRUlWRV9EQVRBX0xPQ0FUSU9OKFJjdkRhdGFCdWZmZXJIZHIpKSktPgorCSAgICBFdGhlclR5cGUgPT0gRVRIRVJUWVBFX1ZMQU4pIHsKKwkJaWYgKFN4Z0V4dHJhY3RWbGFuSGVhZGVyKGFkYXB0ZXIsIFJjdkRhdGFCdWZmZXJIZHIsIEV2ZW50KSAhPQorCQkgICAgU1RBVFVTX1NVQ0NFU1MpIHsKKwkJCVNYR19UUkFDRShUUkFDRV9TWEcsIFN4Z1RyYWNlQnVmZmVyLCBUUkFDRV9OT0lTWSwKKwkJCQkgICJCYWRWbGFuIiwgRXZlbnQsCisJCQkJICBTWEdfUkVDRUlWRV9EQVRBX0xPQ0FUSU9OKFJjdkRhdGFCdWZmZXJIZHIpLAorCQkJCSAgRXZlbnQtPkxlbmd0aCwgMCk7CisJCQlnb3RvIGRyb3A7CisJCX0KKwl9CisjZW5kaWYKKwkvLworCS8vIER1bWItbmljIGZyYW1lLiAgU2VlIGlmIGl0IHBhc3NlcyBvdXIgbWFjIGZpbHRlciBhbmQgdXBkYXRlIHN0YXRzCisJLy8KKwlpZiAoIXN4Z19tYWNfZmlsdGVyKGFkYXB0ZXIsIChwX2V0aGVyX2hlYWRlcikKKwkJCSAgICBTWEdfUkVDRUlWRV9EQVRBX0xPQ0FUSU9OKFJjdkRhdGFCdWZmZXJIZHIpLAorCQkJICAgIEV2ZW50LT5MZW5ndGgpKSB7CisJCVNYR19UUkFDRShUUkFDRV9TWEcsIFN4Z1RyYWNlQnVmZmVyLCBUUkFDRV9OT0lTWSwgIlJjdkZpbHRyIiwKKwkJCSAgRXZlbnQsIFNYR19SRUNFSVZFX0RBVEFfTE9DQVRJT04oUmN2RGF0YUJ1ZmZlckhkciksCisJCQkgIEV2ZW50LT5MZW5ndGgsIDApOworCQlnb3RvIGRyb3A7CisJfQorCisJUGFja2V0ID0gUmN2RGF0YUJ1ZmZlckhkci0+U3hnRHVtYlJjdlBhY2tldDsKKworCVNYR19UUkFDRShUUkFDRV9TWEcsIFN4Z1RyYWNlQnVmZmVyLCBUUkFDRV9JTVBPUlRBTlQsICJEdW1iUmN2IiwKKwkJICBSY3ZEYXRhQnVmZmVySGRyLCBQYWNrZXQsIEV2ZW50LT5MZW5ndGgsIDApOworCS8vCisJLy8gTGFzdGx5IGFkanVzdCB0aGUgcmVjZWl2ZSBwYWNrZXQgbGVuZ3RoLgorCS8vCisJU1hHX0FESlVTVF9SQ1ZfUEFDS0VUKFBhY2tldCwgUmN2RGF0YUJ1ZmZlckhkciwgRXZlbnQpOworCisJcmV0dXJuIChQYWNrZXQpOworCisgICAgICBkcm9wOgorCVNYR19UUkFDRShUUkFDRV9TWEcsIFN4Z1RyYWNlQnVmZmVyLCBUUkFDRV9OT0lTWSwgIkRyb3BSY3YiLAorCQkgIFJjdkRhdGFCdWZmZXJIZHIsIEV2ZW50LT5MZW5ndGgsIDAsIDApOworCWFkYXB0ZXItPlN0YXRzLlJjdkRpc2NhcmRzKys7CisJc3Bpbl9sb2NrKCZhZGFwdGVyLT5SY3ZRTG9jayk7CisJU1hHX0ZSRUVfUkNWX0RBVEFfQlVGRkVSKGFkYXB0ZXIsIFJjdkRhdGFCdWZmZXJIZHIpOworCXNwaW5fdW5sb2NrKCZhZGFwdGVyLT5SY3ZRTG9jayk7CisJcmV0dXJuIChOVUxMKTsKK30KKworLyoKKyAqIHN4Z19wcm9jZXNzX3Jjdl9lcnJvciAtIHByb2Nlc3MgcmVjZWl2ZSBlcnJvciBhbmQgdXBkYXRlCisgKiBzdGF0cworICoKKyAqIEFyZ3VtZW50czoKKyAqCQlhZGFwdGVyCQktIEFkYXB0ZXIgc3RydWN0dXJlCisgKgkJRXJyb3JTdGF0dXMJLSA0LWJ5dGUgcmVjZWl2ZSBlcnJvciBzdGF0dXMKKyAqCisgKiBSZXR1cm4gVmFsdWU6CisgKiAJTm9uZQorICovCitzdGF0aWMgdm9pZCBzeGdfcHJvY2Vzc19yY3ZfZXJyb3IocF9hZGFwdGVyX3QgYWRhcHRlciwgdTMyIEVycm9yU3RhdHVzKQoreworCXUzMiBFcnJvcjsKKworCWFkYXB0ZXItPlN0YXRzLlJjdkVycm9ycysrOworCisJaWYgKEVycm9yU3RhdHVzICYgU1hHX1JDVl9TVEFUVVNfVFJBTlNQT1JUX0VSUk9SKSB7CisJCUVycm9yID0gRXJyb3JTdGF0dXMgJiBTWEdfUkNWX1NUQVRVU19UUkFOU1BPUlRfTUFTSzsKKwkJc3dpdGNoIChFcnJvcikgeworCQljYXNlIFNYR19SQ1ZfU1RBVFVTX1RSQU5TUE9SVF9DU1VNOgorCQkJYWRhcHRlci0+U3RhdHMuVHJhbnNwb3J0Q3N1bSsrOworCQkJYnJlYWs7CisJCWNhc2UgU1hHX1JDVl9TVEFUVVNfVFJBTlNQT1JUX1VGTE9XOgorCQkJYWRhcHRlci0+U3RhdHMuVHJhbnNwb3J0VWZsb3crKzsKKwkJCWJyZWFrOworCQljYXNlIFNYR19SQ1ZfU1RBVFVTX1RSQU5TUE9SVF9IRFJMRU46CisJCQlhZGFwdGVyLT5TdGF0cy5UcmFuc3BvcnRIZHJMZW4rKzsKKwkJCWJyZWFrOworCQl9CisJfQorCWlmIChFcnJvclN0YXR1cyAmIFNYR19SQ1ZfU1RBVFVTX05FVFdPUktfRVJST1IpIHsKKwkJRXJyb3IgPSBFcnJvclN0YXR1cyAmIFNYR19SQ1ZfU1RBVFVTX05FVFdPUktfTUFTSzsKKwkJc3dpdGNoIChFcnJvcikgeworCQljYXNlIFNYR19SQ1ZfU1RBVFVTX05FVFdPUktfQ1NVTToKKwkJCWFkYXB0ZXItPlN0YXRzLk5ldHdvcmtDc3VtKys7CisJCQlicmVhazsKKwkJY2FzZSBTWEdfUkNWX1NUQVRVU19ORVRXT1JLX1VGTE9XOgorCQkJYWRhcHRlci0+U3RhdHMuTmV0d29ya1VmbG93Kys7CisJCQlicmVhazsKKwkJY2FzZSBTWEdfUkNWX1NUQVRVU19ORVRXT1JLX0hEUkxFTjoKKwkJCWFkYXB0ZXItPlN0YXRzLk5ldHdvcmtIZHJMZW4rKzsKKwkJCWJyZWFrOworCQl9CisJfQorCWlmIChFcnJvclN0YXR1cyAmIFNYR19SQ1ZfU1RBVFVTX1BBUklUWSkgeworCQlhZGFwdGVyLT5TdGF0cy5QYXJpdHkrKzsKKwl9CisJaWYgKEVycm9yU3RhdHVzICYgU1hHX1JDVl9TVEFUVVNfTElOS19FUlJPUikgeworCQlFcnJvciA9IEVycm9yU3RhdHVzICYgU1hHX1JDVl9TVEFUVVNfTElOS19NQVNLOworCQlzd2l0Y2ggKEVycm9yKSB7CisJCWNhc2UgU1hHX1JDVl9TVEFUVVNfTElOS19QQVJJVFk6CisJCQlhZGFwdGVyLT5TdGF0cy5MaW5rUGFyaXR5Kys7CisJCQlicmVhazsKKwkJY2FzZSBTWEdfUkNWX1NUQVRVU19MSU5LX0VBUkxZOgorCQkJYWRhcHRlci0+U3RhdHMuTGlua0Vhcmx5Kys7CisJCQlicmVhazsKKwkJY2FzZSBTWEdfUkNWX1NUQVRVU19MSU5LX0JVRk9GTE9XOgorCQkJYWRhcHRlci0+U3RhdHMuTGlua0J1Zk9mbG93Kys7CisJCQlicmVhazsKKwkJY2FzZSBTWEdfUkNWX1NUQVRVU19MSU5LX0NPREU6CisJCQlhZGFwdGVyLT5TdGF0cy5MaW5rQ29kZSsrOworCQkJYnJlYWs7CisJCWNhc2UgU1hHX1JDVl9TVEFUVVNfTElOS19EUklCQkxFOgorCQkJYWRhcHRlci0+U3RhdHMuTGlua0RyaWJibGUrKzsKKwkJCWJyZWFrOworCQljYXNlIFNYR19SQ1ZfU1RBVFVTX0xJTktfQ1JDOgorCQkJYWRhcHRlci0+U3RhdHMuTGlua0NyYysrOworCQkJYnJlYWs7CisJCWNhc2UgU1hHX1JDVl9TVEFUVVNfTElOS19PRkxPVzoKKwkJCWFkYXB0ZXItPlN0YXRzLkxpbmtPZmxvdysrOworCQkJYnJlYWs7CisJCWNhc2UgU1hHX1JDVl9TVEFUVVNfTElOS19VRkxPVzoKKwkJCWFkYXB0ZXItPlN0YXRzLkxpbmtVZmxvdysrOworCQkJYnJlYWs7CisJCX0KKwl9Cit9CisKKy8qCisgKiBzeGdfbWFjX2ZpbHRlcgorICoKKyAqIEFyZ3VtZW50czoKKyAqCQlhZGFwdGVyCQktIEFkYXB0ZXIgc3RydWN0dXJlCisgKgkJcGV0aGVyCQktIEV0aGVybmV0IGhlYWRlcgorICoJCWxlbmd0aAkJLSBGcmFtZSBsZW5ndGgKKyAqCisgKiBSZXR1cm4gVmFsdWU6CisgKiAJVFJVRSBpZiB0aGUgZnJhbWUgaXMgdG8gYmUgYWxsb3dlZAorICovCitzdGF0aWMgYm9vbCBzeGdfbWFjX2ZpbHRlcihwX2FkYXB0ZXJfdCBhZGFwdGVyLCBwX2V0aGVyX2hlYWRlciBFdGhlckhkciwKKwkJCSAgIHVzaG9ydCBsZW5ndGgpCit7CisJYm9vbCBFcXVhbEFkZHI7CisKKwlpZiAoU1hHX01VTFRJQ0FTVF9QQUNLRVQoRXRoZXJIZHIpKSB7CisJCWlmIChTWEdfQlJPQURDQVNUX1BBQ0tFVChFdGhlckhkcikpIHsKKwkJCS8vIGJyb2FkY2FzdAorCQkJaWYgKGFkYXB0ZXItPk1hY0ZpbHRlciAmIE1BQ19CQ0FTVCkgeworCQkJCWFkYXB0ZXItPlN0YXRzLkR1bWJSY3ZCY2FzdFBrdHMrKzsKKwkJCQlhZGFwdGVyLT5TdGF0cy5EdW1iUmN2QmNhc3RCeXRlcyArPSBsZW5ndGg7CisJCQkJYWRhcHRlci0+U3RhdHMuRHVtYlJjdlBrdHMrKzsKKwkJCQlhZGFwdGVyLT5TdGF0cy5EdW1iUmN2Qnl0ZXMgKz0gbGVuZ3RoOworCQkJCXJldHVybiAoVFJVRSk7CisJCQl9CisJCX0gZWxzZSB7CisJCQkvLyBtdWx0aWNhc3QKKwkJCWlmIChhZGFwdGVyLT5NYWNGaWx0ZXIgJiBNQUNfQUxMTUNBU1QpIHsKKwkJCQlhZGFwdGVyLT5TdGF0cy5EdW1iUmN2TWNhc3RQa3RzKys7CisJCQkJYWRhcHRlci0+U3RhdHMuRHVtYlJjdk1jYXN0Qnl0ZXMgKz0gbGVuZ3RoOworCQkJCWFkYXB0ZXItPlN0YXRzLkR1bWJSY3ZQa3RzKys7CisJCQkJYWRhcHRlci0+U3RhdHMuRHVtYlJjdkJ5dGVzICs9IGxlbmd0aDsKKwkJCQlyZXR1cm4gKFRSVUUpOworCQkJfQorCQkJaWYgKGFkYXB0ZXItPk1hY0ZpbHRlciAmIE1BQ19NQ0FTVCkgeworCQkJCVBTWEdfTVVMVElDQVNUX0FERFJFU1MgTXVsdGljYXN0QWRkcnMgPQorCQkJCSAgICBhZGFwdGVyLT5NdWx0aWNhc3RBZGRyczsKKwkJCQl3aGlsZSAoTXVsdGljYXN0QWRkcnMpIHsKKwkJCQkJRVRIRVJfRVFfQUREUihNdWx0aWNhc3RBZGRycy0+QWRkcmVzcywKKwkJCQkJCSAgICAgIEV0aGVySGRyLT5ldGhlcl9kaG9zdCwKKwkJCQkJCSAgICAgIEVxdWFsQWRkcik7CisJCQkJCWlmIChFcXVhbEFkZHIpIHsKKwkJCQkJCWFkYXB0ZXItPlN0YXRzLgorCQkJCQkJICAgIER1bWJSY3ZNY2FzdFBrdHMrKzsKKwkJCQkJCWFkYXB0ZXItPlN0YXRzLgorCQkJCQkJICAgIER1bWJSY3ZNY2FzdEJ5dGVzICs9IGxlbmd0aDsKKwkJCQkJCWFkYXB0ZXItPlN0YXRzLkR1bWJSY3ZQa3RzKys7CisJCQkJCQlhZGFwdGVyLT5TdGF0cy5EdW1iUmN2Qnl0ZXMgKz0KKwkJCQkJCSAgICBsZW5ndGg7CisJCQkJCQlyZXR1cm4gKFRSVUUpOworCQkJCQl9CisJCQkJCU11bHRpY2FzdEFkZHJzID0gTXVsdGljYXN0QWRkcnMtPk5leHQ7CisJCQkJfQorCQkJfQorCQl9CisJfSBlbHNlIGlmIChhZGFwdGVyLT5NYWNGaWx0ZXIgJiBNQUNfRElSRUNURUQpIHsKKwkJLy8gTm90IGJyb2FkY2FzdCBvciBtdWx0aWNhc3QuICBNdXN0IGJlIGRpcmVjdGVkIGF0IHVzIG9yCisJCS8vIHRoZSBjYXJkIGlzIGluIHByb21pc2N1b3VzIG1vZGUuICBFaXRoZXIgd2F5LCBjb25zaWRlciBpdAorCQkvLyBvdXJzIGlmIE1BQ19ESVJFQ1RFRCBpcyBzZXQKKwkJYWRhcHRlci0+U3RhdHMuRHVtYlJjdlVjYXN0UGt0cysrOworCQlhZGFwdGVyLT5TdGF0cy5EdW1iUmN2VWNhc3RCeXRlcyArPSBsZW5ndGg7CisJCWFkYXB0ZXItPlN0YXRzLkR1bWJSY3ZQa3RzKys7CisJCWFkYXB0ZXItPlN0YXRzLkR1bWJSY3ZCeXRlcyArPSBsZW5ndGg7CisJCXJldHVybiAoVFJVRSk7CisJfQorCWlmIChhZGFwdGVyLT5NYWNGaWx0ZXIgJiBNQUNfUFJPTUlTQykgeworCQkvLyBXaGF0ZXZlciBpdCBpcywga2VlcCBpdC4KKwkJYWRhcHRlci0+U3RhdHMuRHVtYlJjdlBrdHMrKzsKKwkJYWRhcHRlci0+U3RhdHMuRHVtYlJjdkJ5dGVzICs9IGxlbmd0aDsKKwkJcmV0dXJuIChUUlVFKTsKKwl9CisJYWRhcHRlci0+U3RhdHMuUmN2RGlzY2FyZHMrKzsKKwlyZXR1cm4gKEZBTFNFKTsKK30KKworc3RhdGljIGludCBzeGdfcmVnaXN0ZXJfaW50ZXJydXB0KHBfYWRhcHRlcl90IGFkYXB0ZXIpCit7CisJaWYgKCFhZGFwdGVyLT5pbnRycmVnaXN0ZXJlZCkgeworCQlpbnQgcmV0dmFsOworCisJCURCR19FUlJPUgorCQkgICAgKCJzeGc6ICVzIEFsbG9jQWRhcHRSc3JjcyBhZGFwdGVyWyVwXSBkZXYtPmlycVsleF0gJXhcbiIsCisJCSAgICAgX19GVU5DVElPTl9fLCBhZGFwdGVyLCBhZGFwdGVyLT5uZXRkZXYtPmlycSwgTlJfSVJRUyk7CisKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc3hnX2dsb2JhbC5kcml2ZXJfbG9jaywKKwkJCQkgICAgICAgc3hnX2dsb2JhbC5mbGFncyk7CisKKwkJcmV0dmFsID0gcmVxdWVzdF9pcnEoYWRhcHRlci0+bmV0ZGV2LT5pcnEsCisJCQkJICAgICAmc3hnX2lzciwKKwkJCQkgICAgIElSUUZfU0hBUkVELAorCQkJCSAgICAgYWRhcHRlci0+bmV0ZGV2LT5uYW1lLCBhZGFwdGVyLT5uZXRkZXYpOworCisJCXNwaW5fbG9ja19pcnFzYXZlKCZzeGdfZ2xvYmFsLmRyaXZlcl9sb2NrLCBzeGdfZ2xvYmFsLmZsYWdzKTsKKworCQlpZiAocmV0dmFsKSB7CisJCQlEQkdfRVJST1IoInN4ZzogcmVxdWVzdF9pcnEgKCVzKSBGQUlMRUQgWyV4XVxuIiwKKwkJCQkgIGFkYXB0ZXItPm5ldGRldi0+bmFtZSwgcmV0dmFsKTsKKwkJCXJldHVybiAocmV0dmFsKTsKKwkJfQorCQlhZGFwdGVyLT5pbnRycmVnaXN0ZXJlZCA9IDE7CisJCWFkYXB0ZXItPkludFJlZ2lzdGVyZWQgPSBUUlVFOworCQkvLyBEaXNhYmxlIFJTUyB3aXRoIGxpbmUtYmFzZWQgaW50ZXJydXB0cworCQlhZGFwdGVyLT5Nc2lFbmFibGVkID0gRkFMU0U7CisJCWFkYXB0ZXItPlJzc0VuYWJsZWQgPSBGQUxTRTsKKwkJREJHX0VSUk9SKCJzeGc6ICVzIEFsbG9jQWRhcHRSc3JjcyBhZGFwdGVyWyVwXSBkZXYtPmlycVsleF1cbiIsCisJCQkgIF9fRlVOQ1RJT05fXywgYWRhcHRlciwgYWRhcHRlci0+bmV0ZGV2LT5pcnEpOworCX0KKwlyZXR1cm4gKFNUQVRVU19TVUNDRVNTKTsKK30KKworc3RhdGljIHZvaWQgc3hnX2RlcmVnaXN0ZXJfaW50ZXJydXB0KHBfYWRhcHRlcl90IGFkYXB0ZXIpCit7CisJREJHX0VSUk9SKCJzeGc6ICVzIEVOVEVSIGFkYXB0ZXJbJXBdXG4iLCBfX0ZVTkNUSU9OX18sIGFkYXB0ZXIpOworI2lmIFhYWFRPRE8KKwlzbGljX2luaXRfY2xlYW51cChhZGFwdGVyKTsKKyNlbmRpZgorCW1lbXNldCgmYWRhcHRlci0+c3RhdHMsIDAsIHNpemVvZihzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cykpOworCWFkYXB0ZXItPmVycm9yX2ludGVycnVwdHMgPSAwOworCWFkYXB0ZXItPnJjdl9pbnRlcnJ1cHRzID0gMDsKKwlhZGFwdGVyLT54bWl0X2ludGVycnVwdHMgPSAwOworCWFkYXB0ZXItPmxpbmtldmVudF9pbnRlcnJ1cHRzID0gMDsKKwlhZGFwdGVyLT51cHJfaW50ZXJydXB0cyA9IDA7CisJYWRhcHRlci0+bnVtX2lzcnMgPSAwOworCWFkYXB0ZXItPnhtaXRfY29tcGxldGVzID0gMDsKKwlhZGFwdGVyLT5yY3ZfYnJvYWRjYXN0cyA9IDA7CisJYWRhcHRlci0+cmN2X211bHRpY2FzdHMgPSAwOworCWFkYXB0ZXItPnJjdl91bmljYXN0cyA9IDA7CisJREJHX0VSUk9SKCJzeGc6ICVzIEVYSVRcbiIsIF9fRlVOQ1RJT05fXyk7Cit9CisKKy8qCisgKiAgc3hnX2lmX2luaXQKKyAqCisgKiAgUGVyZm9ybSBpbml0aWFsaXphdGlvbiBvZiBvdXIgc2xpYyBpbnRlcmZhY2UuCisgKgorICovCitzdGF0aWMgaW50IHN4Z19pZl9pbml0KHBfYWRhcHRlcl90IGFkYXB0ZXIpCit7CisJcF9uZXRfZGV2aWNlIGRldiA9IGFkYXB0ZXItPm5ldGRldjsKKwlpbnQgc3RhdHVzID0gMDsKKworCURCR19FUlJPUigic3hnOiAlcyAoJXMpIEVOVEVSIHN0YXRlc1slZDolZDolZF0gZmxhZ3NbJXhdXG4iLAorCQkgIF9fRlVOQ1RJT05fXywgYWRhcHRlci0+bmV0ZGV2LT5uYW1lLAorCQkgIGFkYXB0ZXItPnF1ZXVlc19pbml0aWFsaXplZCwgYWRhcHRlci0+c3RhdGUsCisJCSAgYWRhcHRlci0+bGlua3N0YXRlLCBkZXYtPmZsYWdzKTsKKworCS8qIGFkYXB0ZXIgc2hvdWxkIGJlIGRvd24gYXQgdGhpcyBwb2ludCAqLworCWlmIChhZGFwdGVyLT5zdGF0ZSAhPSBBREFQVF9ET1dOKSB7CisJCURCR19FUlJPUigic3hnX2lmX2luaXQgYWRhcHRlci0+c3RhdGUgIT0gQURBUFRfRE9XTlxuIik7CisJCXJldHVybiAoLUVJTyk7CisJfQorCUFTU0VSVChhZGFwdGVyLT5saW5rc3RhdGUgPT0gTElOS19ET1dOKTsKKworCWFkYXB0ZXItPmRldmZsYWdzX3ByZXYgPSBkZXYtPmZsYWdzOworCWFkYXB0ZXItPm1hY29wdHMgPSBNQUNfRElSRUNURUQ7CisJaWYgKGRldi0+ZmxhZ3MpIHsKKwkJREJHX0VSUk9SKCJzeGc6ICVzICglcykgU2V0IE1BQyBvcHRpb25zOiAiLCBfX0ZVTkNUSU9OX18sCisJCQkgIGFkYXB0ZXItPm5ldGRldi0+bmFtZSk7CisJCWlmIChkZXYtPmZsYWdzICYgSUZGX0JST0FEQ0FTVCkgeworCQkJYWRhcHRlci0+bWFjb3B0cyB8PSBNQUNfQkNBU1Q7CisJCQlEQkdfRVJST1IoIkJDQVNUICIpOworCQl9CisJCWlmIChkZXYtPmZsYWdzICYgSUZGX1BST01JU0MpIHsKKwkJCWFkYXB0ZXItPm1hY29wdHMgfD0gTUFDX1BST01JU0M7CisJCQlEQkdfRVJST1IoIlBST01JU0MgIik7CisJCX0KKwkJaWYgKGRldi0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkpIHsKKwkJCWFkYXB0ZXItPm1hY29wdHMgfD0gTUFDX0FMTE1DQVNUOworCQkJREJHX0VSUk9SKCJBTExfTUNBU1QgIik7CisJCX0KKwkJaWYgKGRldi0+ZmxhZ3MgJiBJRkZfTVVMVElDQVNUKSB7CisJCQlhZGFwdGVyLT5tYWNvcHRzIHw9IE1BQ19NQ0FTVDsKKwkJCURCR19FUlJPUigiTUNBU1QgIik7CisJCX0KKwkJREJHX0VSUk9SKCJcbiIpOworCX0KKwlzdGF0dXMgPSBzeGdfcmVnaXN0ZXJfaW50ZXJydXB0KGFkYXB0ZXIpOworCWlmIChzdGF0dXMgIT0gU1RBVFVTX1NVQ0NFU1MpIHsKKwkJREJHX0VSUk9SKCJzeGdfaWZfaW5pdDogc3hnX3JlZ2lzdGVyX2ludGVycnVwdCBGQUlMRUQgJXhcbiIsCisJCQkgIHN0YXR1cyk7CisJCXN4Z19kZXJlZ2lzdGVyX2ludGVycnVwdChhZGFwdGVyKTsKKwkJcmV0dXJuIChzdGF0dXMpOworCX0KKworCWFkYXB0ZXItPnN0YXRlID0gQURBUFRfVVA7CisKKwkvKgorCSAqICAgIGNsZWFyIGFueSBwZW5kaW5nIGV2ZW50cywgdGhlbiBlbmFibGUgaW50ZXJydXB0cworCSAqLworCURCR19FUlJPUigic3hnOiAlcyBFTkFCTEUgaW50ZXJydXB0cyhzbGljKVxuIiwgX19GVU5DVElPTl9fKTsKKworCXJldHVybiAoU1RBVFVTX1NVQ0NFU1MpOworfQorCitzdGF0aWMgaW50IHN4Z19lbnRyeV9vcGVuKHBfbmV0X2RldmljZSBkZXYpCit7CisJcF9hZGFwdGVyX3QgYWRhcHRlciA9IChwX2FkYXB0ZXJfdCkgbmV0ZGV2X3ByaXYoZGV2KTsKKwlpbnQgc3RhdHVzOworCisJQVNTRVJUKGFkYXB0ZXIpOworCURCR19FUlJPUigic3hnOiAlcyBhZGFwdGVyLT5hY3RpdmF0ZWRbJWRdXG4iLCBfX0ZVTkNUSU9OX18sCisJCSAgYWRhcHRlci0+YWN0aXZhdGVkKTsKKwlEQkdfRVJST1IKKwkgICAgKCJzeGc6ICVzICglcyk6IFtqaWZmaWVzWyVseF0gY3B1ICVkXSBkZXZbJXBdIGFkYXB0WyVwXSBwb3J0WyVkXVxuIiwKKwkgICAgIF9fRlVOQ1RJT05fXywgYWRhcHRlci0+bmV0ZGV2LT5uYW1lLCBqaWZmaWVzLCBzbXBfcHJvY2Vzc29yX2lkKCksCisJICAgICBhZGFwdGVyLT5uZXRkZXYsIGFkYXB0ZXIsIGFkYXB0ZXItPnBvcnQpOworCisJbmV0aWZfc3RvcF9xdWV1ZShhZGFwdGVyLT5uZXRkZXYpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnN4Z19nbG9iYWwuZHJpdmVyX2xvY2ssIHN4Z19nbG9iYWwuZmxhZ3MpOworCWlmICghYWRhcHRlci0+YWN0aXZhdGVkKSB7CisJCXN4Z19nbG9iYWwubnVtX3N4Z19wb3J0c19hY3RpdmUrKzsKKwkJYWRhcHRlci0+YWN0aXZhdGVkID0gMTsKKwl9CisJLy8gSW5pdGlhbGl6ZSB0aGUgYWRhcHRlcgorCURCR19FUlJPUigic3hnOiAlcyBFTlRFUiBzeGdfaW5pdGlhbGl6ZV9hZGFwdGVyXG4iLCBfX0ZVTkNUSU9OX18pOworCXN0YXR1cyA9IHN4Z19pbml0aWFsaXplX2FkYXB0ZXIoYWRhcHRlcik7CisJREJHX0VSUk9SKCJzeGc6ICVzIEVYSVQgc3hnX2luaXRpYWxpemVfYWRhcHRlciBzdGF0dXNbJXhdXG4iLAorCQkgIF9fRlVOQ1RJT05fXywgc3RhdHVzKTsKKworCWlmIChzdGF0dXMgPT0gU1RBVFVTX1NVQ0NFU1MpIHsKKwkJREJHX0VSUk9SKCJzeGc6ICVzIEVOVEVSIHN4Z19pZl9pbml0XG4iLCBfX0ZVTkNUSU9OX18pOworCQlzdGF0dXMgPSBzeGdfaWZfaW5pdChhZGFwdGVyKTsKKwkJREJHX0VSUk9SKCJzeGc6ICVzIEVYSVQgc3hnX2lmX2luaXQgc3RhdHVzWyV4XVxuIiwgX19GVU5DVElPTl9fLAorCQkJICBzdGF0dXMpOworCX0KKworCWlmIChzdGF0dXMgIT0gU1RBVFVTX1NVQ0NFU1MpIHsKKwkJaWYgKGFkYXB0ZXItPmFjdGl2YXRlZCkgeworCQkJc3hnX2dsb2JhbC5udW1fc3hnX3BvcnRzX2FjdGl2ZS0tOworCQkJYWRhcHRlci0+YWN0aXZhdGVkID0gMDsKKwkJfQorCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzeGdfZ2xvYmFsLmRyaXZlcl9sb2NrLAorCQkJCSAgICAgICBzeGdfZ2xvYmFsLmZsYWdzKTsKKwkJcmV0dXJuIChzdGF0dXMpOworCX0KKwlEQkdfRVJST1IoInN4ZzogJXMgRU5BQkxFIEFMTCBJTlRFUlJVUFRTXG4iLCBfX0ZVTkNUSU9OX18pOworCisJLy8gRW5hYmxlIGludGVycnVwdHMKKwlTWEdfRU5BQkxFX0FMTF9JTlRFUlJVUFRTKGFkYXB0ZXIpOworCisJREJHX0VSUk9SKCJzeGc6ICVzIEVYSVRcbiIsIF9fRlVOQ1RJT05fXyk7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzeGdfZ2xvYmFsLmRyaXZlcl9sb2NrLCBzeGdfZ2xvYmFsLmZsYWdzKTsKKwlyZXR1cm4gU1RBVFVTX1NVQ0NFU1M7Cit9CisKK3N0YXRpYyB2b2lkIF9fZGV2ZXhpdCBzeGdfZW50cnlfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwY2lkZXYpCit7CisJcF9uZXRfZGV2aWNlIGRldiA9IHBjaV9nZXRfZHJ2ZGF0YShwY2lkZXYpOworCXUzMiBtbWlvX3N0YXJ0ID0gMDsKKwl1bnNpZ25lZCBpbnQgbW1pb19sZW4gPSAwOworCXBfYWRhcHRlcl90IGFkYXB0ZXIgPSAocF9hZGFwdGVyX3QpIG5ldGRldl9wcml2KGRldik7CisKKwlBU1NFUlQoYWRhcHRlcik7CisJREJHX0VSUk9SKCJzeGc6ICVzIEVOVEVSIGRldlslcF0gYWRhcHRlclslcF1cbiIsIF9fRlVOQ1RJT05fXywgZGV2LAorCQkgIGFkYXB0ZXIpOworCXN4Z19kZXJlZ2lzdGVyX2ludGVycnVwdChhZGFwdGVyKTsKKwlzeGdfdW5tYXBfbW1pb19zcGFjZShhZGFwdGVyKTsKKwlEQkdfRVJST1IoInN4ZzogJXMgdW5yZWdpc3Rlcl9uZXRkZXZcbiIsIF9fRlVOQ1RJT05fXyk7CisJdW5yZWdpc3Rlcl9uZXRkZXYoZGV2KTsKKworCW1taW9fc3RhcnQgPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGNpZGV2LCAwKTsKKwltbWlvX2xlbiA9IHBjaV9yZXNvdXJjZV9sZW4ocGNpZGV2LCAwKTsKKworCURCR19FUlJPUigic3hnOiAlcyByZWxfcmVnaW9uKDApIHN0YXJ0WyV4XSBsZW5bJXhdXG4iLCBfX0ZVTkNUSU9OX18sCisJCSAgbW1pb19zdGFydCwgbW1pb19sZW4pOworCXJlbGVhc2VfbWVtX3JlZ2lvbihtbWlvX3N0YXJ0LCBtbWlvX2xlbik7CisKKwlEQkdfRVJST1IoInN4ZzogJXMgaW91bm1hcCBkZXYtPmJhc2VfYWRkclsleF1cbiIsIF9fRlVOQ1RJT05fXywKKwkJICAodW5zaWduZWQgaW50KWRldi0+YmFzZV9hZGRyKTsKKwlpb3VubWFwKChjaGFyICopZGV2LT5iYXNlX2FkZHIpOworCisJREJHX0VSUk9SKCJzeGc6ICVzIGRlYWxsb2NhdGUgZGV2aWNlXG4iLCBfX0ZVTkNUSU9OX18pOworCWtmcmVlKGRldik7CisJREJHX0VSUk9SKCJzeGc6ICVzIEVYSVRcbiIsIF9fRlVOQ1RJT05fXyk7Cit9CisKK3N0YXRpYyBpbnQgc3hnX2VudHJ5X2hhbHQocF9uZXRfZGV2aWNlIGRldikKK3sKKwlwX2FkYXB0ZXJfdCBhZGFwdGVyID0gKHBfYWRhcHRlcl90KSBuZXRkZXZfcHJpdihkZXYpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnN4Z19nbG9iYWwuZHJpdmVyX2xvY2ssIHN4Z19nbG9iYWwuZmxhZ3MpOworCURCR19FUlJPUigic3hnOiAlcyAoJXMpIEVOVEVSXG4iLCBfX0ZVTkNUSU9OX18sIGRldi0+bmFtZSk7CisKKwluZXRpZl9zdG9wX3F1ZXVlKGFkYXB0ZXItPm5ldGRldik7CisJYWRhcHRlci0+c3RhdGUgPSBBREFQVF9ET1dOOworCWFkYXB0ZXItPmxpbmtzdGF0ZSA9IExJTktfRE9XTjsKKwlhZGFwdGVyLT5kZXZmbGFnc19wcmV2ID0gMDsKKwlEQkdfRVJST1IoInN4ZzogJXMgKCVzKSBzZXQgYWRhcHRlclslcF0gc3RhdGUgdG8gQURBUFRfRE9XTiglZClcbiIsCisJCSAgX19GVU5DVElPTl9fLCBkZXYtPm5hbWUsIGFkYXB0ZXIsIGFkYXB0ZXItPnN0YXRlKTsKKworCURCR19FUlJPUigic3hnOiAlcyAoJXMpIEVYSVRcbiIsIF9fRlVOQ1RJT05fXywgZGV2LT5uYW1lKTsKKwlEQkdfRVJST1IoInN4ZzogJXMgRVhJVFxuIiwgX19GVU5DVElPTl9fKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzeGdfZ2xvYmFsLmRyaXZlcl9sb2NrLCBzeGdfZ2xvYmFsLmZsYWdzKTsKKwlyZXR1cm4gKFNUQVRVU19TVUNDRVNTKTsKK30KKworc3RhdGljIGludCBzeGdfaW9jdGwocF9uZXRfZGV2aWNlIGRldiwgc3RydWN0IGlmcmVxICpycSwgaW50IGNtZCkKK3sKKwlBU1NFUlQocnEpOworLy8gICAgICBEQkdfRVJST1IoInN4ZzogJXMgY21kWyV4XSBycVslcF0gZGV2WyVwXVxuIiwgX19GVU5DVElPTl9fLCBjbWQsIHJxLCBkZXYpOworCXN3aXRjaCAoY21kKSB7CisJY2FzZSBTSU9DU0xJQ1NFVElOVEFHRzoKKwkJeworLy8gICAgICAgICAgICAgICAgICAgICAgcF9hZGFwdGVyX3QgYWRhcHRlciA9IChwX2FkYXB0ZXJfdCkgbmV0ZGV2X3ByaXYoZGV2KTsKKwkJCXUzMiBkYXRhWzddOworCQkJdTMyIGludGFnZzsKKworCQkJaWYgKGNvcHlfZnJvbV91c2VyKGRhdGEsIHJxLT5pZnJfZGF0YSwgMjgpKSB7CisJCQkJREJHX0VSUk9SCisJCQkJICAgICgiY29weV9mcm9tX3VzZXIgRkFJTEVEICBnZXR0aW5nIGluaXRpYWwgcGFyYW1zXG4iKTsKKwkJCQlyZXR1cm4gLUVGQVVMVDsKKwkJCX0KKwkJCWludGFnZyA9IGRhdGFbMF07CisJCQlwcmludGsoS0VSTl9FTUVSRworCQkJICAgICAgICIlczogc2V0IGludGVycnVwdCBhZ2dyZWdhdGlvbiB0byAlZFxuIiwKKwkJCSAgICAgICBfX0ZVTkNUSU9OX18sIGludGFnZyk7CisJCQlyZXR1cm4gMDsKKwkJfQorCisJZGVmYXVsdDoKKy8vICAgICAgICAgICAgICBEQkdfRVJST1IoInN4ZzogJXMgVU5TVVBQT1JURURbJXhdXG4iLCBfX0ZVTkNUSU9OX18sIGNtZCk7CisJCXJldHVybiAtRU9QTk9UU1VQUDsKKwl9CisJcmV0dXJuIDA7Cit9CisKKyNkZWZpbmUgTk9STUFMX0VUSEZSQU1FICAgICAwCisKKy8qCisgKgorICogc3hnX3NlbmRfcGFja2V0cyAtIFNlbmQgYSBza2IgcGFja2V0CisgKgorICogQXJndW1lbnRzOgorICoJCQlza2IgICAgICAgICAgICAgICAgICAgICAtIFRoZSBwYWNrZXQgdG8gc2VuZAorICoJCQlkZXYgICAgICAgICAgICAgICAgICAgICAtIE91ciBsaW51eCBuZXQgZGV2aWNlIHRoYXQgcmVmcyBvdXIgYWRhcHRlcgorICoKKyAqIFJldHVybjoKKyAqCQkwICAgcmVnYXJkbGVzcyBvZiBvdXRjb21lICAgIFhYWFRPRE8gcmVmZXIgdG8gZTEwMDAgZHJpdmVyCisgKi8KK3N0YXRpYyBpbnQgc3hnX3NlbmRfcGFja2V0cyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBwX25ldF9kZXZpY2UgZGV2KQoreworCXBfYWRhcHRlcl90IGFkYXB0ZXIgPSAocF9hZGFwdGVyX3QpIG5ldGRldl9wcml2KGRldik7CisJdTMyIHN0YXR1cyA9IFNUQVRVU19TVUNDRVNTOworCisJREJHX0VSUk9SKCJzeGc6ICVzIEVOVEVSIHN4Z19zZW5kX3BhY2tldHMgc2tiWyVwXVxuIiwgX19GVU5DVElPTl9fLAorCQkgIHNrYik7CisJLy8gQ2hlY2sgdGhlIGFkYXB0ZXIgc3RhdGUKKwlzd2l0Y2ggKGFkYXB0ZXItPlN0YXRlKSB7CisJY2FzZSBTWEdfU1RBVEVfSU5JVElBTElaSU5HOgorCWNhc2UgU1hHX1NUQVRFX0hBTFRFRDoKKwljYXNlIFNYR19TVEFURV9TSFVURE9XTjoKKwkJQVNTRVJUKDApOwkvLyB1bmV4cGVjdGVkCisJCS8vIGZhbGwgdGhyb3VnaAorCWNhc2UgU1hHX1NUQVRFX1JFU0VUVElORzoKKwljYXNlIFNYR19TVEFURV9TTEVFUDoKKwljYXNlIFNYR19TVEFURV9CT09URElBRzoKKwljYXNlIFNYR19TVEFURV9ESUFHOgorCWNhc2UgU1hHX1NUQVRFX0hBTFRJTkc6CisJCXN0YXR1cyA9IFNUQVRVU19GQUlMVVJFOworCQlicmVhazsKKwljYXNlIFNYR19TVEFURV9SVU5OSU5HOgorCQlpZiAoYWRhcHRlci0+TGlua1N0YXRlICE9IFNYR19MSU5LX1VQKSB7CisJCQlzdGF0dXMgPSBTVEFUVVNfRkFJTFVSRTsKKwkJfQorCQlicmVhazsKKwlkZWZhdWx0OgorCQlBU1NFUlQoMCk7CisJCXN0YXR1cyA9IFNUQVRVU19GQUlMVVJFOworCX0KKwlpZiAoc3RhdHVzICE9IFNUQVRVU19TVUNDRVNTKSB7CisJCWdvdG8geG1pdF9mYWlsOworCX0KKwkvLyBzZW5kIGEgcGFja2V0CisJc3RhdHVzID0gc3hnX3RyYW5zbWl0X3BhY2tldChhZGFwdGVyLCBza2IpOworCWlmIChzdGF0dXMgPT0gU1RBVFVTX1NVQ0NFU1MpIHsKKwkJZ290byB4bWl0X2RvbmU7CisJfQorCisgICAgICB4bWl0X2ZhaWw6CisJLy8gcmVqZWN0ICYgY29tcGxldGUgYWxsIHRoZSBwYWNrZXRzIGlmIHRoZXkgY2FudCBiZSBzZW50CisJaWYgKHN0YXR1cyAhPSBTVEFUVVNfU1VDQ0VTUykgeworI2lmIFhYWFRPRE8KKy8vICAgICAgc3hnX3NlbmRfcGFja2V0c19mYWlsKGFkYXB0ZXIsIHNrYiwgc3RhdHVzKTsKKyNlbHNlCisJCVNYR19EUk9QX0RVTUJfU0VORChhZGFwdGVyLCBza2IpOworCQlhZGFwdGVyLT5zdGF0cy50eF9kcm9wcGVkKys7CisjZW5kaWYKKwl9CisJREJHX0VSUk9SKCJzeGc6ICVzIEVYSVQgc3hnX3NlbmRfcGFja2V0cyBzdGF0dXNbJXhdXG4iLCBfX0ZVTkNUSU9OX18sCisJCSAgc3RhdHVzKTsKKworICAgICAgeG1pdF9kb25lOgorCXJldHVybiAwOworfQorCisvKgorICogc3hnX3RyYW5zbWl0X3BhY2tldAorICoKKyAqIFRoaXMgZnVuY3Rpb24gdHJhbnNtaXRzIGEgc2luZ2xlIHBhY2tldC4KKyAqCisgKiBBcmd1bWVudHMgLQorICoJCWFkYXB0ZXIJCQktIFBvaW50ZXIgdG8gb3VyIGFkYXB0ZXIgc3RydWN0dXJlCisgKiAgICAgIHNrYiAgICAgICAgICAgICAtIFRoZSBwYWNrZXQgdG8gYmUgc2VudAorICoKKyAqIFJldHVybiAtCisgKiAJCVNUQVRVUyBvZiBzZW5kCisgKi8KK3N0YXRpYyBpbnQgc3hnX3RyYW5zbWl0X3BhY2tldChwX2FkYXB0ZXJfdCBhZGFwdGVyLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCVBTQ0FUVEVSX0dBVEhFUl9MSVNUIHBTZ2w7CisJUFNYR19TQ0FUVEVSX0dBVEhFUiBTeGdTZ2w7CisJdm9pZCAqU2dsQnVmZmVyOworCXUzMiBTZ2xCdWZmZXJMZW5ndGg7CisKKwkvLyBUaGUgdmFzdCBtYWpvcml0eSBvZiB3b3JrIGlzIGRvbmUgaW4gdGhlIHNoYXJlZAorCS8vIHN4Z19kdW1iX3NnbCByb3V0aW5lLgorCVNYR19UUkFDRShUUkFDRV9TWEcsIFN4Z1RyYWNlQnVmZmVyLCBUUkFDRV9OT0lTWSwgIkR1bWJTZW5kIiwKKwkJICBhZGFwdGVyLCBza2IsIDAsIDApOworCisJLy8gQWxsb2NhdGUgYSBTR0wgYnVmZmVyCisJU1hHX0dFVF9TR0xfQlVGRkVSKGFkYXB0ZXIsIFN4Z1NnbCk7CisJaWYgKCFTeGdTZ2wpIHsKKwkJYWRhcHRlci0+U3RhdHMuTm9TZ2xCdWYrKzsKKwkJYWRhcHRlci0+U3RhdHMuWG10RXJyb3JzKys7CisJCVNYR19UUkFDRShUUkFDRV9TWEcsIFN4Z1RyYWNlQnVmZmVyLCBUUkFDRV9OT0lTWSwgIlNuZFBrdEYxIiwKKwkJCSAgYWRhcHRlciwgc2tiLCAwLCAwKTsKKwkJcmV0dXJuIChTVEFUVVNfUkVTT1VSQ0VTKTsKKwl9CisJQVNTRVJUKFN4Z1NnbC0+YWRhcHRlciA9PSBhZGFwdGVyKTsKKwlTZ2xCdWZmZXIgPSBTWEdfU0dMX0JVRkZFUihTeGdTZ2wpOworCVNnbEJ1ZmZlckxlbmd0aCA9IFNYR19TR0xfQlVGX1NJWkU7CisJU3hnU2dsLT5WbGFuVGFnLlZsYW5UY2kgPSAwOworCVN4Z1NnbC0+VmxhblRhZy5WbGFuVHBpZCA9IDA7CisJU3hnU2dsLT5UeXBlID0gU1hHX1NHTF9EVU1COworCVN4Z1NnbC0+RHVtYlBhY2tldCA9IHNrYjsKKwlwU2dsID0gTlVMTDsKKworCS8vIENhbGwgdGhlIGNvbW1vbiBzeGdfZHVtYl9zZ2wgcm91dGluZSB0byBjb21wbGV0ZSB0aGUgc2VuZC4KKwlzeGdfZHVtYl9zZ2wocFNnbCwgU3hnU2dsKTsKKwkvLyBSZXR1cm4gc3VjY2VzcyAgIHN4Z19kdW1iX3NnbCAob3Igc29tZXRoaW5nIGxhdGVyKSB3aWxsIGNvbXBsZXRlIGl0LgorCXJldHVybiAoU1RBVFVTX1NVQ0NFU1MpOworfQorCisvKgorICogc3hnX2R1bWJfc2dsCisgKgorICogQXJndW1lbnRzOgorICoJCXBTZ2wgICAgIC0KKyAqCQlTeGdTZ2wgICAtIFNYR19TQ0FUVEVSX0dBVEhFUgorICoKKyAqIFJldHVybiBWYWx1ZToKKyAqIAlOb25lLgorICovCitzdGF0aWMgdm9pZCBzeGdfZHVtYl9zZ2woUFNDQVRURVJfR0FUSEVSX0xJU1QgcFNnbCwgUFNYR19TQ0FUVEVSX0dBVEhFUiBTeGdTZ2wpCit7CisJcF9hZGFwdGVyX3QgYWRhcHRlciA9IFN4Z1NnbC0+YWRhcHRlcjsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gU3hnU2dsLT5EdW1iUGFja2V0OworCS8vIEZvciBub3csIGFsbCBkdW1iLW5pYyBzZW5kcyBnbyBvbiBSU1MgcXVldWUgemVybworCVBTWEdfWE1UX1JJTkcgWG10UmluZyA9ICZhZGFwdGVyLT5YbXRSaW5nc1swXTsKKwlQU1hHX1JJTkdfSU5GTyBYbXRSaW5nSW5mbyA9ICZhZGFwdGVyLT5YbXRSaW5nWmVyb0luZm87CisJUFNYR19DTUQgWG10Q21kID0gTlVMTDsKKy8vICAgICAgdTMyICAgICAgICAgICAgICAgICAgICAgICAgIEluZGV4ID0gMDsKKwl1MzIgRGF0YUxlbmd0aCA9IHNrYi0+bGVuOworLy8gIHVuc2lnbmVkIGludCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQnVmTGVuOworLy8gICAgICB1MzIgICAgICAgICAgICAgICAgICAgICAgICAgU2dsT2Zmc2V0OworCXU2NCBwaHlzX2FkZHI7CisKKwlTWEdfVFJBQ0UoVFJBQ0VfU1hHLCBTeGdUcmFjZUJ1ZmZlciwgVFJBQ0VfTk9JU1ksICJEdW1iU2dsIiwKKwkJICBwU2dsLCBTeGdTZ2wsIDAsIDApOworCisJLy8gU2V0IGFzaWRlIGEgcG9pbnRlciB0byB0aGUgc2dsCisJU3hnU2dsLT5wU2dsID0gcFNnbDsKKworCS8vIFNhbml0eSBjaGVjayB0aGF0IG91ciBTR0wgZm9ybWF0IGlzIGFzIHdlIGV4cGVjdC4KKwlBU1NFUlQoc2l6ZW9mKFNYR19YNjRfU0dFKSA9PSBzaXplb2YoU0NBVFRFUl9HQVRIRVJfRUxFTUVOVCkpOworCS8vIFNob3VsZG4ndCBiZSBhIHZsYW4gdGFnIG9uIHRoaXMgZnJhbWUKKwlBU1NFUlQoU3hnU2dsLT5WbGFuVGFnLlZsYW5UY2kgPT0gMCk7CisJQVNTRVJUKFN4Z1NnbC0+VmxhblRhZy5WbGFuVHBpZCA9PSAwKTsKKworCS8vIEZyb20gaGVyZSBiZWxvdyB3ZSB3b3JrIHdpdGggdGhlIFNHTCBwbGFjZWQgaW4gb3VyCisJLy8gYnVmZmVyLgorCisJU3hnU2dsLT5TZ2wuTnVtYmVyT2ZFbGVtZW50cyA9IDE7CisKKwkvLyBHcmFiIHRoZSBzcGlubG9jayBhbmQgYWNxdWlyZSBhIGNvbW1hbmQKKwlzcGluX2xvY2soJmFkYXB0ZXItPlhtdFplcm9Mb2NrKTsKKwlTWEdfR0VUX0NNRChYbXRSaW5nLCBYbXRSaW5nSW5mbywgWG10Q21kLCBTeGdTZ2wpOworCWlmIChYbXRDbWQgPT0gTlVMTCkgeworCQkvLyBDYWxsIHN4Z19jb21wbGV0ZV9zbG93X3NlbmQgdG8gc2VlIGlmIHdlIGNhbgorCQkvLyBmcmVlIHVwIGFueSBYbXRSaW5nWmVybyBlbnRyaWVzIGFuZCB0aGVuIHRyeSBhZ2FpbgorCQlzcGluX3VubG9jaygmYWRhcHRlci0+WG10WmVyb0xvY2spOworCQlzeGdfY29tcGxldGVfc2xvd19zZW5kKGFkYXB0ZXIpOworCQlzcGluX2xvY2soJmFkYXB0ZXItPlhtdFplcm9Mb2NrKTsKKwkJU1hHX0dFVF9DTUQoWG10UmluZywgWG10UmluZ0luZm8sIFhtdENtZCwgU3hnU2dsKTsKKwkJaWYgKFhtdENtZCA9PSBOVUxMKSB7CisJCQlhZGFwdGVyLT5TdGF0cy5YbXRaZXJvRnVsbCsrOworCQkJZ290byBhYm9ydGNtZDsKKwkJfQorCX0KKwlTWEdfVFJBQ0UoVFJBQ0VfU1hHLCBTeGdUcmFjZUJ1ZmZlciwgVFJBQ0VfTk9JU1ksICJEdW1iQ21kIiwKKwkJICBYbXRDbWQsIFhtdFJpbmdJbmZvLT5IZWFkLCBYbXRSaW5nSW5mby0+VGFpbCwgMCk7CisJLy8gVXBkYXRlIHN0YXRzCisJYWRhcHRlci0+U3RhdHMuRHVtYlhtdFBrdHMrKzsKKwlhZGFwdGVyLT5TdGF0cy5EdW1iWG10Qnl0ZXMgKz0gRGF0YUxlbmd0aDsKKyNpZiBYWFhUT0RPCQkJLy8gU3RhdHMgc3R1ZmYKKwlpZiAoU1hHX01VTFRJQ0FTVF9QQUNLRVQoRXRoZXJIZHIpKSB7CisJCWlmIChTWEdfQlJPQURDQVNUX1BBQ0tFVChFdGhlckhkcikpIHsKKwkJCWFkYXB0ZXItPlN0YXRzLkR1bWJYbXRCY2FzdFBrdHMrKzsKKwkJCWFkYXB0ZXItPlN0YXRzLkR1bWJYbXRCY2FzdEJ5dGVzICs9IERhdGFMZW5ndGg7CisJCX0gZWxzZSB7CisJCQlhZGFwdGVyLT5TdGF0cy5EdW1iWG10TWNhc3RQa3RzKys7CisJCQlhZGFwdGVyLT5TdGF0cy5EdW1iWG10TWNhc3RCeXRlcyArPSBEYXRhTGVuZ3RoOworCQl9CisJfSBlbHNlIHsKKwkJYWRhcHRlci0+U3RhdHMuRHVtYlhtdFVjYXN0UGt0cysrOworCQlhZGFwdGVyLT5TdGF0cy5EdW1iWG10VWNhc3RCeXRlcyArPSBEYXRhTGVuZ3RoOworCX0KKyNlbmRpZgorCS8vIEZpbGwgaW4gdGhlIGNvbW1hbmQKKwkvLyBDb3B5IG91dCB0aGUgZmlyc3QgU0dFIHRvIHRoZSBjb21tYW5kIGFuZCBhZGp1c3QgZm9yIG9mZnNldAorCXBoeXNfYWRkciA9CisJICAgIHBjaV9tYXBfc2luZ2xlKGFkYXB0ZXItPnBjaWRldiwgc2tiLT5kYXRhLCBza2ItPmxlbiwKKwkJCSAgIFBDSV9ETUFfVE9ERVZJQ0UpOworCVhtdENtZC0+QnVmZmVyLkZpcnN0U2dlQWRkcmVzcyA9IFNYR19HRVRfQUREUl9ISUdIKHBoeXNfYWRkcik7CisJWG10Q21kLT5CdWZmZXIuRmlyc3RTZ2VBZGRyZXNzID0gWG10Q21kLT5CdWZmZXIuRmlyc3RTZ2VBZGRyZXNzIDw8IDMyOworCVhtdENtZC0+QnVmZmVyLkZpcnN0U2dlQWRkcmVzcyA9CisJICAgIFhtdENtZC0+QnVmZmVyLkZpcnN0U2dlQWRkcmVzcyB8IFNYR19HRVRfQUREUl9MT1cocGh5c19hZGRyKTsKKy8vICAgICAgWG10Q21kLT5CdWZmZXIuRmlyc3RTZ2VBZGRyZXNzID0gU3hnU2dsLT5TZ2wuRWxlbWVudHNbSW5kZXhdLkFkZHJlc3M7CisvLyAgICAgIFhtdENtZC0+QnVmZmVyLkZpcnN0U2dlQWRkcmVzcy5Mb3dQYXJ0ICs9IE1kbE9mZnNldDsKKwlYbXRDbWQtPkJ1ZmZlci5GaXJzdFNnZUxlbmd0aCA9IERhdGFMZW5ndGg7CisJLy8gU2V0IGEgcG9pbnRlciB0byB0aGUgcmVtYWluaW5nIFNHTCBlbnRyaWVzCisvLyAgICAgIFhtdENtZC0+U2dsID0gU3hnU2dsLT5QaHlzaWNhbEFkZHJlc3M7CisJLy8gQWR2YW5jZSB0aGUgcGh5c2ljYWwgYWRkcmVzcyBvZiB0aGUgU3hnU2dsIHN0cnVjdHVyZSB0bworCS8vIHRoZSBzZWNvbmQgU0dFCisvLyAgICAgIFNnbE9mZnNldCA9ICh1MzIpKCh1MzIgKikoJlN4Z1NnbC0+U2dsLkVsZW1lbnRzW0luZGV4KzFdKSAtCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodTMyICopU3hnU2dsKTsKKy8vICAgICAgWG10Q21kLT5TZ2wuTG93UGFydCArPSBTZ2xPZmZzZXQ7CisJWG10Q21kLT5CdWZmZXIuU2dlT2Zmc2V0ID0gMDsKKwkvLyBOb3RlIC0gVG90YWxMZW5ndGggbWlnaHQgYmUgb3ZlcndyaXR0ZW4gd2l0aCBNU1MgYmVsb3cuLgorCVhtdENtZC0+QnVmZmVyLlRvdGFsTGVuZ3RoID0gRGF0YUxlbmd0aDsKKwlYbXRDbWQtPlNnRW50cmllcyA9IDE7CS8vKHVzaG9ydCkoU3hnU2dsLT5TZ2wuTnVtYmVyT2ZFbGVtZW50cyAtIEluZGV4KTsKKwlYbXRDbWQtPkZsYWdzID0gMDsKKwkvLworCS8vIEFkdmFuY2UgdHJhbnNtaXQgY21kIGRlc2NyaXB0ZXIgYnkgMS4KKwkvLyBOT1RFIC0gU2VlIGNvbW1lbnRzIGluIFN4Z1RjcE91dHB1dCB3aGVyZSB3ZSB3cml0ZQorCS8vIHRvIHRoZSBYbXRDbWQgcmVnaXN0ZXIgcmVnYXJkaW5nIENQVSBJRCB2YWx1ZXMgYW5kL29yCisJLy8gbXVsdGlwbGUgY29tbWFuZHMuCisJLy8KKwkvLworCVdSSVRFX1JFRyhhZGFwdGVyLT5VY29kZVJlZ3NbMF0uWG10Q21kLCAxLCBUUlVFKTsKKwkvLworCS8vCisJYWRhcHRlci0+U3RhdHMuWG10UUxlbisrOwkvLyBTdGF0cyB3aXRoaW4gbG9jaworCXNwaW5fdW5sb2NrKCZhZGFwdGVyLT5YbXRaZXJvTG9jayk7CisJU1hHX1RSQUNFKFRSQUNFX1NYRywgU3hnVHJhY2VCdWZmZXIsIFRSQUNFX05PSVNZLCAiWER1bVNnbDIiLAorCQkgIFhtdENtZCwgcFNnbCwgU3hnU2dsLCAwKTsKKwlyZXR1cm47CisKKyAgICAgIGFib3J0Y21kOgorCS8vIE5PVEUgLSBPbmx5IGp1bXAgdG8gdGhpcyBsYWJlbCBBRlRFUiBncmFiYmluZyB0aGUKKwkvLyBYbXRaZXJvTG9jaywgYW5kIERPIE5PVCBEUk9QIElUIGJldHdlZW4gdGhlCisJLy8gY29tbWFuZCBhbGxvY2F0aW9uIGFuZCB0aGUgZm9sbG93aW5nIGFib3J0LgorCWlmIChYbXRDbWQpIHsKKwkJU1hHX0FCT1JUX0NNRChYbXRSaW5nSW5mbyk7CisJfQorCXNwaW5fdW5sb2NrKCZhZGFwdGVyLT5YbXRaZXJvTG9jayk7CisKKy8vIGZhaWxzZ2w6CisJLy8gSnVtcCB0byB0aGlzIGxhYmVsIGlmIGZhaWx1cmUgb2NjdXJzIGJlZm9yZSB0aGUKKwkvLyBYbXRaZXJvTG9jayBpcyBncmFiYmVkCisJYWRhcHRlci0+U3RhdHMuWG10RXJyb3JzKys7CisJU1hHX1RSQUNFKFRSQUNFX1NYRywgU3hnVHJhY2VCdWZmZXIsIFRSQUNFX0lNUE9SVEFOVCwgIkR1bVNHRmFsIiwKKwkJICBwU2dsLCBTeGdTZ2wsIFhtdFJpbmdJbmZvLT5IZWFkLCBYbXRSaW5nSW5mby0+VGFpbCk7CisKKwlTWEdfQ09NUExFVEVfRFVNQl9TRU5EKGFkYXB0ZXIsIFN4Z1NnbC0+RHVtYlBhY2tldCk7CS8vIFN4Z1NnbC0+RHVtYlBhY2tldCBpcyB0aGUgc2tiCit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIExpbmsgbWFuYWdlbWVudCBmdW5jdGlvbnMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisgKiBzeGdfaW5pdGlhbGl6ZV9saW5rIC0gSW5pdGlhbGl6ZSB0aGUgbGluayBzdHVmZgorICoKKyAqIEFyZ3VtZW50cyAtCisgKglhZGFwdGVyCQktIEEgcG9pbnRlciB0byBvdXIgYWRhcHRlciBzdHJ1Y3R1cmUKKyAqCisgKiBSZXR1cm4KKyAqCXN0YXR1cworICovCitzdGF0aWMgaW50IHN4Z19pbml0aWFsaXplX2xpbmsocF9hZGFwdGVyX3QgYWRhcHRlcikKK3sKKwlQU1hHX0hXX1JFR1MgSHdSZWdzID0gYWRhcHRlci0+SHdSZWdzOworCXUzMiBWYWx1ZTsKKwl1MzIgQ29uZmlnRGF0YTsKKwl1MzIgTWF4RnJhbWU7CisJaW50IHN0YXR1czsKKworCVNYR19UUkFDRShUUkFDRV9TWEcsIFN4Z1RyYWNlQnVmZmVyLCBUUkFDRV9OT0lTWSwgIkluaXRMaW5rIiwKKwkJICBhZGFwdGVyLCAwLCAwLCAwKTsKKworCS8vIFJlc2V0IFBIWSBhbmQgWEdYUyBtb2R1bGUKKwlXUklURV9SRUcoSHdSZWdzLT5MaW5rU3RhdHVzLCBMU19TRVJERVNfUE9XRVJfRE9XTiwgVFJVRSk7CisKKwkvLyBSZXNldCB0cmFuc21pdCBjb25maWd1cmF0aW9uIHJlZ2lzdGVyCisJV1JJVEVfUkVHKEh3UmVncy0+WG10Q29uZmlnLCBYTVRfQ09ORklHX1JFU0VULCBUUlVFKTsKKworCS8vIFJlc2V0IHJlY2VpdmUgY29uZmlndXJhdGlvbiByZWdpc3RlcgorCVdSSVRFX1JFRyhId1JlZ3MtPlJjdkNvbmZpZywgUkNWX0NPTkZJR19SRVNFVCwgVFJVRSk7CisKKwkvLyBSZXNldCBhbGwgTUFDIG1vZHVsZXMKKwlXUklURV9SRUcoSHdSZWdzLT5NYWNDb25maWcwLCBBWEdNQUNfQ0ZHMF9TVUJfUkVTRVQsIFRSVUUpOworCisJLy8gTGluayBhZGRyZXNzIDAKKwkvLyBYWFhUT0RPIC0gVGhpcyBhc3N1bWVzIHRoZSBNQUMgYWRkcmVzcyAoMGE6MGI6MGM6MGQ6MGU6MGYpCisJLy8gaXMgc3RvcmVkIHdpdGggdGhlIGZpcnN0IG5pYmJsZSAoMGEpIGluIHRoZSBieXRlIDAKKwkvLyBvZiB0aGUgTWFjIGFkZHJlc3MuICBQb3NzaWJseSByZXZlcnNlPworCVZhbHVlID0gKih1MzIgKikgYWRhcHRlci0+TWFjQWRkcjsKKwlXUklURV9SRUcoSHdSZWdzLT5MaW5rQWRkcmVzczBMb3csIFZhbHVlLCBUUlVFKTsKKwkvLyBhbHNvIHdyaXRlIHRoZSBNQUMgYWRkcmVzcyB0byB0aGUgTUFDLiAgRW5kaWFuIGlzIHJldmVyc2VkLgorCVdSSVRFX1JFRyhId1JlZ3MtPk1hY0FkZHJlc3NMb3csIG50b2hsKFZhbHVlKSwgVFJVRSk7CisJVmFsdWUgPSAoKih1MTYgKikgJiBhZGFwdGVyLT5NYWNBZGRyWzRdICYgMHgwMDAwRkZGRik7CisJV1JJVEVfUkVHKEh3UmVncy0+TGlua0FkZHJlc3MwSGlnaCwgVmFsdWUgfCBMSU5LX0FERFJFU1NfRU5BQkxFLCBUUlVFKTsKKwkvLyBlbmRpYW4gc3dhcCBmb3IgdGhlIE1BQyAocHV0IGhpZ2ggYnl0ZXMgaW4gYml0cyBbMzE6MTZdLCBzd2FwcGVkKQorCVZhbHVlID0gbnRvaGwoVmFsdWUpOworCVdSSVRFX1JFRyhId1JlZ3MtPk1hY0FkZHJlc3NIaWdoLCBWYWx1ZSwgVFJVRSk7CisJLy8gTGluayBhZGRyZXNzIDEKKwlXUklURV9SRUcoSHdSZWdzLT5MaW5rQWRkcmVzczFMb3csIDAsIFRSVUUpOworCVdSSVRFX1JFRyhId1JlZ3MtPkxpbmtBZGRyZXNzMUhpZ2gsIDAsIFRSVUUpOworCS8vIExpbmsgYWRkcmVzcyAyCisJV1JJVEVfUkVHKEh3UmVncy0+TGlua0FkZHJlc3MyTG93LCAwLCBUUlVFKTsKKwlXUklURV9SRUcoSHdSZWdzLT5MaW5rQWRkcmVzczJIaWdoLCAwLCBUUlVFKTsKKwkvLyBMaW5rIGFkZHJlc3MgMworCVdSSVRFX1JFRyhId1JlZ3MtPkxpbmtBZGRyZXNzM0xvdywgMCwgVFJVRSk7CisJV1JJVEVfUkVHKEh3UmVncy0+TGlua0FkZHJlc3MzSGlnaCwgMCwgVFJVRSk7CisKKwkvLyBFbmFibGUgTUFDIG1vZHVsZXMKKwlXUklURV9SRUcoSHdSZWdzLT5NYWNDb25maWcwLCAwLCBUUlVFKTsKKworCS8vIENvbmZpZ3VyZSBNQUMKKwlXUklURV9SRUcoSHdSZWdzLT5NYWNDb25maWcxLCAoQVhHTUFDX0NGRzFfWE1UX1BBVVNFIHwJLy8gQWxsb3cgc2VuZGluZyBvZiBwYXVzZQorCQkJCSAgICAgICBBWEdNQUNfQ0ZHMV9YTVRfRU4gfAkvLyBFbmFibGUgWE1UCisJCQkJICAgICAgIEFYR01BQ19DRkcxX1JDVl9QQVVTRSB8CS8vIEVuYWJsZSBkZXRlY3Rpb24gb2YgcGF1c2UKKwkJCQkgICAgICAgQVhHTUFDX0NGRzFfUkNWX0VOIHwJLy8gRW5hYmxlIHJlY2VpdmUKKwkJCQkgICAgICAgQVhHTUFDX0NGRzFfU0hPUlRfQVNTRVJUIHwJLy8gc2hvcnQgZnJhbWUgZGV0ZWN0aW9uCisJCQkJICAgICAgIEFYR01BQ19DRkcxX0NIRUNLX0xFTiB8CS8vIFZlcmlmeSBmcmFtZSBsZW5ndGgKKwkJCQkgICAgICAgQVhHTUFDX0NGRzFfR0VOX0ZDUyB8CS8vIEdlbmVyYXRlIEZDUworCQkJCSAgICAgICBBWEdNQUNfQ0ZHMV9QQURfNjQpLAkvLyBQYWQgZnJhbWVzIHRvIDY0IGJ5dGVzCisJCSAgVFJVRSk7CisKKwkvLyBTZXQgQVhHTUFDIG1heCBmcmFtZSBsZW5ndGggaWYganVtYm8uICBOb3QgbmVlZGVkIGZvciBzdGFuZGFyZCBNVFUKKwlpZiAoYWRhcHRlci0+SnVtYm9FbmFibGVkKSB7CisJCVdSSVRFX1JFRyhId1JlZ3MtPk1hY01heEZyYW1lTGVuLCBBWEdNQUNfTUFYRlJBTUVfSlVNQk8sIFRSVUUpOworCX0KKwkvLyBBTUlJTSBDb25maWd1cmF0aW9uIFJlZ2lzdGVyIC0KKwkvLyBUaGUgdmFsdWUgcGxhY2VkIGluIHRoZSBBWEdNQUNfQU1JSU1fQ0ZHX0hBTEZfQ0xPQ0sgcG9ydGlvbgorCS8vIChib3R0b20gYml0cykgb2YgdGhpcyByZWdpc3RlciBpcyB1c2VkIHRvIGRldGVybWluZSB0aGUKKwkvLyBNREMgZnJlcXVlbmN5IGFzIHNwZWNpZmllZCBpbiB0aGUgQS1YR01BQyBEZXNpZ24gRG9jdW1lbnQuCisJLy8gVGhpcyB2YWx1ZSBtdXN0IG5vdCBiZSB6ZXJvLiAgVGhlIGZvbGxvd2luZyB2YWx1ZSAoNjIgb3IgMHgzRSkKKwkvLyBpcyBiYXNlZCBvbiBvdXIgTUFDIHRyYW5zbWl0IGNsb2NrIGZyZXF1ZW5jeSAoTVRDTEspIG9mIDMxMi41IE1Iei4KKwkvLyBHaXZlbiBhIG1heGltdW0gTURJTyBjbG9jayBmcmVxdWVuY3kgb2YgMi41IE1IeiAoc2VlIHRoZSBQSFkgc3BlYyksCisJLy8gd2UgZ2V0OiAgMzEyLjUvKDIqKFgrMSkpIDwgMi41ICA9PT4gWCA9IDYyLgorCS8vIFRoaXMgdmFsdWUgaGFwcGVucyB0byBiZSB0aGUgZGVmYXVsdCB2YWx1ZSBmb3IgdGhpcyByZWdpc3RlciwKKwkvLyBzbyB3ZSByZWFsbHkgZG9uJ3QgaGF2ZSB0byBkbyB0aGlzLgorCVdSSVRFX1JFRyhId1JlZ3MtPk1hY0FtaWltQ29uZmlnLCAweDAwMDAwMDNFLCBUUlVFKTsKKworCS8vIFBvd2VyIHVwIGFuZCBlbmFibGUgUEhZIGFuZCBYQVVJL1hHWFMvU2VyZGVzIGxvZ2ljCisJV1JJVEVfUkVHKEh3UmVncy0+TGlua1N0YXR1cywKKwkJICAoTFNfUEhZX0NMUl9SRVNFVCB8CisJCSAgIExTX1hHWFNfRU5BQkxFIHwKKwkJICAgTFNfWEdYU19DVEwgfCBMU19QSFlfQ0xLX0VOIHwgTFNfQVRUTl9BTEFSTSksIFRSVUUpOworCURCR19FUlJPUigiQWZ0ZXIgUG93ZXIgVXAgYW5kIGVuYWJsZSBQSFkgaW4gc3hnX2luaXRpYWxpemVfbGlua1xuIik7CisKKwkvLyBQZXIgaW5mb3JtYXRpb24gZ2l2ZW4gYnkgQWVsdXJvcywgd2FpdCAxMDAgbXMgYWZ0ZXIgcmVtb3ZpbmcgcmVzZXQuCisJLy8gSXQncyBub3QgZW5vdWdoIHRvIHdhaXQgZm9yIHRoZSBzZWxmLWNsZWFyaW5nIHJlc2V0IGJpdCBpbiByZWcgMCB0byBjbGVhci4KKwltZGVsYXkoMTAwKTsKKworCS8vIFZlcmlmeSB0aGUgUEhZIGhhcyBjb21lIHVwIGJ5IGNoZWNraW5nIHRoYXQgdGhlIFJlc2V0IGJpdCBoYXMgY2xlYXJlZC4KKwlzdGF0dXMgPSBzeGdfcmVhZF9tZGlvX3JlZyhhZGFwdGVyLCBNSUlNX0RFVl9QSFlfUE1BLAkvLyBQSFkgUE1BL1BNRCBtb2R1bGUKKwkJCQkgICBQSFlfUE1BX0NPTlRST0wxLAkvLyBQTUEvUE1EIGNvbnRyb2wgcmVnaXN0ZXIKKwkJCQkgICAmVmFsdWUpOworCWlmIChzdGF0dXMgIT0gU1RBVFVTX1NVQ0NFU1MpCisJCXJldHVybiAoU1RBVFVTX0ZBSUxVUkUpOworCWlmIChWYWx1ZSAmIFBNQV9DT05UUk9MMV9SRVNFVCkJLy8gcmVzZXQgY29tcGxldGUgaWYgYml0IGlzIDAKKwkJcmV0dXJuIChTVEFUVVNfRkFJTFVSRSk7CisKKwkvLyBUaGUgU0VSREVTIHNob3VsZCBiZSBpbml0aWFsaXplZCBieSBub3cgLSBjb25maXJtCisJUkVBRF9SRUcoSHdSZWdzLT5MaW5rU3RhdHVzLCBWYWx1ZSk7CisJaWYgKFZhbHVlICYgTFNfU0VSREVTX0RPV04pCS8vIHZlcmlmeSBTRVJERVMgaXMgaW5pdGlhbGl6ZWQKKwkJcmV0dXJuIChTVEFUVVNfRkFJTFVSRSk7CisKKwkvLyBUaGUgWEFVSSBsaW5rIHNob3VsZCBhbHNvIGJlIHVwIC0gY29uZmlybQorCWlmICghKFZhbHVlICYgTFNfWEFVSV9MSU5LX1VQKSkJLy8gdmVyaWZ5IFhBVUkgbGluayBpcyB1cAorCQlyZXR1cm4gKFNUQVRVU19GQUlMVVJFKTsKKworCS8vIEluaXRpYWxpemUgdGhlIFBIWQorCXN0YXR1cyA9IHN4Z19waHlfaW5pdChhZGFwdGVyKTsKKwlpZiAoc3RhdHVzICE9IFNUQVRVU19TVUNDRVNTKQorCQlyZXR1cm4gKFNUQVRVU19GQUlMVVJFKTsKKworCS8vIEVuYWJsZSB0aGUgTGluayBBbGFybQorCXN0YXR1cyA9IHN4Z193cml0ZV9tZGlvX3JlZyhhZGFwdGVyLCBNSUlNX0RFVl9QSFlfUE1BLAkvLyBQSFkgUE1BL1BNRCBtb2R1bGUKKwkJCQkgICAgTEFTSV9DT05UUk9MLAkvLyBMQVNJIGNvbnRyb2wgcmVnaXN0ZXIKKwkJCQkgICAgTEFTSV9DVExfTFNfQUxBUk1fRU5BQkxFKTsJLy8gZW5hYmxlIGxpbmsgYWxhcm0gYml0CisJaWYgKHN0YXR1cyAhPSBTVEFUVVNfU1VDQ0VTUykKKwkJcmV0dXJuIChTVEFUVVNfRkFJTFVSRSk7CisKKwkvLyBYWFhUT0RPIC0gdGVtcG9yYXJ5IC0gdmVyaWZ5IGJpdCBpcyBzZXQKKwlzdGF0dXMgPSBzeGdfcmVhZF9tZGlvX3JlZyhhZGFwdGVyLCBNSUlNX0RFVl9QSFlfUE1BLAkvLyBQSFkgUE1BL1BNRCBtb2R1bGUKKwkJCQkgICBMQVNJX0NPTlRST0wsCS8vIExBU0kgY29udHJvbCByZWdpc3RlcgorCQkJCSAgICZWYWx1ZSk7CisJaWYgKHN0YXR1cyAhPSBTVEFUVVNfU1VDQ0VTUykKKwkJcmV0dXJuIChTVEFUVVNfRkFJTFVSRSk7CisJaWYgKCEoVmFsdWUgJiBMQVNJX0NUTF9MU19BTEFSTV9FTkFCTEUpKSB7CisJCURCR19FUlJPUigiRXJyb3IhICBMQVNJIENvbnRyb2wgQWxhcm0gRW5hYmxlIGJpdCBub3Qgc2V0IVxuIik7CisJfQorCS8vIEVuYWJsZSByZWNlaXZlCisJTWF4RnJhbWUgPSBhZGFwdGVyLT5KdW1ib0VuYWJsZWQgPyBKVU1CT01BWEZSQU1FIDogRVRIRVJNQVhGUkFNRTsKKwlDb25maWdEYXRhID0gKFJDVl9DT05GSUdfRU5BQkxFIHwKKwkJICAgICAgUkNWX0NPTkZJR19FTlBBUlNFIHwKKwkJICAgICAgUkNWX0NPTkZJR19SQ1ZCQUQgfAorCQkgICAgICBSQ1ZfQ09ORklHX1JDVlBBVVNFIHwKKwkJICAgICAgUkNWX0NPTkZJR19UWklQVjYgfAorCQkgICAgICBSQ1ZfQ09ORklHX1RaSVBWNCB8CisJCSAgICAgIFJDVl9DT05GSUdfSEFTSF8xNiB8CisJCSAgICAgIFJDVl9DT05GSUdfU09DS0VUIHwgUkNWX0NPTkZJR19CVUZTSVpFKE1heEZyYW1lKSk7CisJV1JJVEVfUkVHKEh3UmVncy0+UmN2Q29uZmlnLCBDb25maWdEYXRhLCBUUlVFKTsKKworCVdSSVRFX1JFRyhId1JlZ3MtPlhtdENvbmZpZywgWE1UX0NPTkZJR19FTkFCTEUsIFRSVUUpOworCisJLy8gTWFyayB0aGUgbGluayBhcyBkb3duLiAgV2UnbGwgZ2V0IGEgbGluayBldmVudCB3aGVuIGl0IGNvbWVzIHVwLgorCXN4Z19saW5rX3N0YXRlKGFkYXB0ZXIsIFNYR19MSU5LX0RPV04pOworCisJU1hHX1RSQUNFKFRSQUNFX1NYRywgU3hnVHJhY2VCdWZmZXIsIFRSQUNFX05PSVNZLCAiWEluaXRMbmsiLAorCQkgIGFkYXB0ZXIsIDAsIDAsIDApOworCXJldHVybiAoU1RBVFVTX1NVQ0NFU1MpOworfQorCisvKgorICogc3hnX3BoeV9pbml0IC0gSW5pdGlhbGl6ZSB0aGUgUEhZCisgKgorICogQXJndW1lbnRzIC0KKyAqCWFkYXB0ZXIJCS0gQSBwb2ludGVyIHRvIG91ciBhZGFwdGVyIHN0cnVjdHVyZQorICoKKyAqIFJldHVybgorICoJc3RhdHVzCisgKi8KK3N0YXRpYyBpbnQgc3hnX3BoeV9pbml0KHBfYWRhcHRlcl90IGFkYXB0ZXIpCit7CisJdTMyIFZhbHVlOworCVBQSFlfVUNPREUgcDsKKwlpbnQgc3RhdHVzOworCisJREJHX0VSUk9SKCJFTlRFUiAlc1xuIiwgX19GVU5DVElPTl9fKTsKKworCS8vIFJlYWQgYSByZWdpc3RlciB0byBpZGVudGlmeSB0aGUgUEhZIHR5cGUKKwlzdGF0dXMgPSBzeGdfcmVhZF9tZGlvX3JlZyhhZGFwdGVyLCBNSUlNX0RFVl9QSFlfUE1BLAkvLyBQSFkgUE1BL1BNRCBtb2R1bGUKKwkJCQkgICAweEMyMDUsCS8vIFBIWSBJRCByZWdpc3RlciAoPykKKwkJCQkgICAmVmFsdWUpOwkvLyAgICBYWFhUT0RPIC0gYWRkIGRlZgorCWlmIChzdGF0dXMgIT0gU1RBVFVTX1NVQ0NFU1MpCisJCXJldHVybiAoU1RBVFVTX0ZBSUxVUkUpOworCisJaWYgKFZhbHVlID09IDB4MDAxMikgewkvLyAweDAwMTIgPT0gQUVMMjAwNUMgUEhZKD8pIC0gWFhYVE9ETyAtIGFkZCBkZWYKKwkJREJHX0VSUk9SCisJCSAgICAoIkFFTDIwMDVDIFBIWSBkZXRlY3RlZC4gIERvd25sb2FkaW5nIFBIWSBtaWNyb2NvZGUuXG4iKTsKKworCQkvLyBJbml0aWFsaXplIEFFTDIwMDVDIFBIWSBhbmQgZG93bmxvYWQgUEhZIG1pY3JvY29kZQorCQlmb3IgKHAgPSBQaHlVY29kZTsgcC0+QWRkciAhPSAweEZGRkY7IHArKykgeworCQkJaWYgKHAtPkFkZHIgPT0gMCkgeworCQkJCS8vIGlmIGFkZHJlc3MgPT0gMCwgZGF0YSA9PSBzbGVlcCB0aW1lIGluIG1zCisJCQkJbWRlbGF5KHAtPkRhdGEpOworCQkJfSBlbHNlIHsKKwkJCQkvLyB3cml0ZSB0aGUgZ2l2ZW4gZGF0YSB0byB0aGUgc3BlY2lmaWVkIGFkZHJlc3MKKwkJCQlzdGF0dXMgPSBzeGdfd3JpdGVfbWRpb19yZWcoYWRhcHRlciwgTUlJTV9ERVZfUEhZX1BNQSwJLy8gUEhZIFBNQS9QTUQgbW9kdWxlCisJCQkJCQkJICAgIHAtPkFkZHIsCS8vIFBIWSBhZGRyZXNzCisJCQkJCQkJICAgIHAtPkRhdGEpOwkvLyBQSFkgZGF0YQorCQkJCWlmIChzdGF0dXMgIT0gU1RBVFVTX1NVQ0NFU1MpCisJCQkJCXJldHVybiAoU1RBVFVTX0ZBSUxVUkUpOworCQkJfQorCQl9CisJfQorCURCR19FUlJPUigiRVhJVCAlc1xuIiwgX19GVU5DVElPTl9fKTsKKworCXJldHVybiAoU1RBVFVTX1NVQ0NFU1MpOworfQorCisvKgorICogc3hnX2xpbmtfZXZlbnQgLSBQcm9jZXNzIGEgbGluayBldmVudCBub3RpZmljYXRpb24gZnJvbSB0aGUgY2FyZAorICoKKyAqIEFyZ3VtZW50cyAtCisgKglhZGFwdGVyCQktIEEgcG9pbnRlciB0byBvdXIgYWRhcHRlciBzdHJ1Y3R1cmUKKyAqCisgKiBSZXR1cm4KKyAqCU5vbmUKKyAqLworc3RhdGljIHZvaWQgc3hnX2xpbmtfZXZlbnQocF9hZGFwdGVyX3QgYWRhcHRlcikKK3sKKwlQU1hHX0hXX1JFR1MgSHdSZWdzID0gYWRhcHRlci0+SHdSZWdzOworCVNYR19MSU5LX1NUQVRFIExpbmtTdGF0ZTsKKwlpbnQgc3RhdHVzOworCXUzMiBWYWx1ZTsKKworCVNYR19UUkFDRShUUkFDRV9TWEcsIFN4Z1RyYWNlQnVmZmVyLCBUUkFDRV9OT0lTWSwgIkxpbmtFdm50IiwKKwkJICBhZGFwdGVyLCAwLCAwLCAwKTsKKwlEQkdfRVJST1IoIkVOVEVSICVzXG4iLCBfX0ZVTkNUSU9OX18pOworCisJLy8gQ2hlY2sgdGhlIExpbmsgU3RhdHVzIHJlZ2lzdGVyLiAgV2Ugc2hvdWxkIGhhdmUgYSBMaW5rIEFsYXJtLgorCVJFQURfUkVHKEh3UmVncy0+TGlua1N0YXR1cywgVmFsdWUpOworCWlmIChWYWx1ZSAmIExTX0xJTktfQUxBUk0pIHsKKwkJLy8gV2UgZ290IGEgTGluayBTdGF0dXMgYWxhcm0uICBGaXJzdCwgcGF1c2UgdG8gbGV0IHRoZQorCQkvLyBsaW5rIHN0YXRlIHNldHRsZSAoaXQgY2FuIGJvdW5jZSBhIG51bWJlciBvZiB0aW1lcykKKwkJbWRlbGF5KDEwKTsKKworCQkvLyBOb3cgY2xlYXIgdGhlIGFsYXJtIGJ5IHJlYWRpbmcgdGhlIExBU0kgc3RhdHVzIHJlZ2lzdGVyLgorCQlzdGF0dXMgPSBzeGdfcmVhZF9tZGlvX3JlZyhhZGFwdGVyLCBNSUlNX0RFVl9QSFlfUE1BLAkvLyBQSFkgUE1BL1BNRCBtb2R1bGUKKwkJCQkJICAgTEFTSV9TVEFUVVMsCS8vIExBU0kgc3RhdHVzIHJlZ2lzdGVyCisJCQkJCSAgICZWYWx1ZSk7CisJCWlmIChzdGF0dXMgIT0gU1RBVFVTX1NVQ0NFU1MpIHsKKwkJCURCR19FUlJPUigiRXJyb3IgcmVhZGluZyBMQVNJIFN0YXR1cyBNRElPIHJlZ2lzdGVyIVxuIik7CisJCQlzeGdfbGlua19zdGF0ZShhZGFwdGVyLCBTWEdfTElOS19ET1dOKTsKKy8vICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVCgwKTsKKwkJfQorCQlBU1NFUlQoVmFsdWUgJiBMQVNJX1NUQVRVU19MU19BTEFSTSk7CisKKwkJLy8gTm93IGdldCBhbmQgc2V0IHRoZSBsaW5rIHN0YXRlCisJCUxpbmtTdGF0ZSA9IHN4Z19nZXRfbGlua19zdGF0ZShhZGFwdGVyKTsKKwkJc3hnX2xpbmtfc3RhdGUoYWRhcHRlciwgTGlua1N0YXRlKTsKKwkJREJHX0VSUk9SKCJTWEc6IExpbmsgQWxhcm0gb2NjdXJyZWQuICBMaW5rIGlzICVzXG4iLAorCQkJICAoKExpbmtTdGF0ZSA9PSBTWEdfTElOS19VUCkgPyAiVVAiIDogIkRPV04iKSk7CisJfSBlbHNlIHsKKwkJLy8gWFhYVE9ETyAtIEFzc3VtaW5nIExpbmsgQXR0ZW50aW9uIGlzIG9ubHkgYmVpbmcgZ2VuZXJhdGVkIGZvciB0aGUKKwkJLy8gTGluayBBbGFybSBwaW4gKGFuZCBub3QgZm9yIGEgWEFVSSBMaW5rIFN0YXR1cyBjaGFuZ2UpLCB0aGVuIGl0J3MKKwkJLy8gaW1wb3NzaWJsZSB0byBnZXQgaGVyZS4gIFlldCB3ZSd2ZSBnb3R0ZW4gaGVyZSB0d2ljZSAodW5kZXIgZXh0cmVtZQorCQkvLyBjb25kaXRpb25zIC0gYm91bmNpbmcgdGhlIGxpbmsgdXAgYW5kIGRvd24gbWFueSB0aW1lcyBhIHNlY29uZCkuCisJCS8vIE5lZWRzIGZ1cnRoZXIgaW52ZXN0aWdhdGlvbi4KKwkJREJHX0VSUk9SKCJTWEc6IHN4Z19saW5rX2V2ZW50OiBDYW4ndCBnZXQgaGVyZSFcbiIpOworCQlEQkdfRVJST1IoIlNYRzogTGluayBTdGF0dXMgPT0gMHglMDhYLlxuIiwgVmFsdWUpOworLy8gICAgICAgICAgICAgIEFTU0VSVCgwKTsKKwl9CisJREJHX0VSUk9SKCJFWElUICVzXG4iLCBfX0ZVTkNUSU9OX18pOworCit9CisKKy8qCisgKiBzeGdfZ2V0X2xpbmtfc3RhdGUgLSBEZXRlcm1pbmUgaWYgdGhlIGxpbmsgaXMgdXAgb3IgZG93bgorICoKKyAqIEFyZ3VtZW50cyAtCisgKglhZGFwdGVyCQktIEEgcG9pbnRlciB0byBvdXIgYWRhcHRlciBzdHJ1Y3R1cmUKKyAqCisgKiBSZXR1cm4KKyAqCUxpbmsgU3RhdGUKKyAqLworc3RhdGljIFNYR19MSU5LX1NUQVRFIHN4Z19nZXRfbGlua19zdGF0ZShwX2FkYXB0ZXJfdCBhZGFwdGVyKQoreworCWludCBzdGF0dXM7CisJdTMyIFZhbHVlOworCisJREJHX0VSUk9SKCJFTlRFUiAlc1xuIiwgX19GVU5DVElPTl9fKTsKKworCVNYR19UUkFDRShUUkFDRV9TWEcsIFN4Z1RyYWNlQnVmZmVyLCBUUkFDRV9OT0lTWSwgIkdldExpbmsiLAorCQkgIGFkYXB0ZXIsIDAsIDAsIDApOworCisJLy8gUGVyIHRoZSBYZW5wYWsgc3BlYyAoYW5kIHRoZSBJRUVFIDEwR2Igc3BlYz8pLCB0aGUgbGluayBpcyB1cCBpZgorCS8vIHRoZSBmb2xsb3dpbmcgMyBiaXRzIChmcm9tIDMgZGlmZmVyZW50IE1ESU8gcmVnaXN0ZXJzKSBhcmUgYWxsIHRydWUuCisJc3RhdHVzID0gc3hnX3JlYWRfbWRpb19yZWcoYWRhcHRlciwgTUlJTV9ERVZfUEhZX1BNQSwJLy8gUEhZIFBNQS9QTUQgbW9kdWxlCisJCQkJICAgUEhZX1BNQV9SQ1ZfREVULAkvLyBQTUEvUE1EIFJlY2VpdmUgU2lnbmFsIERldGVjdCByZWdpc3RlcgorCQkJCSAgICZWYWx1ZSk7CisJaWYgKHN0YXR1cyAhPSBTVEFUVVNfU1VDQ0VTUykKKwkJZ290byBiYWQ7CisKKwkvLyBJZiBQTUEvUE1EIHJlY2VpdmUgc2lnbmFsIGRldGVjdCBpcyAwLCB0aGVuIHRoZSBsaW5rIGlzIGRvd24KKwlpZiAoIShWYWx1ZSAmIFBNQV9SQ1ZfREVURUNUKSkKKwkJcmV0dXJuIChTWEdfTElOS19ET1dOKTsKKworCXN0YXR1cyA9IHN4Z19yZWFkX21kaW9fcmVnKGFkYXB0ZXIsIE1JSU1fREVWX1BIWV9QQ1MsCS8vIFBIWSBQQ1MgbW9kdWxlCisJCQkJICAgUEhZX1BDU18xMEdfU1RBVFVTMSwJLy8gUENTIDEwR0JBU0UtUiBTdGF0dXMgMSByZWdpc3RlcgorCQkJCSAgICZWYWx1ZSk7CisJaWYgKHN0YXR1cyAhPSBTVEFUVVNfU1VDQ0VTUykKKwkJZ290byBiYWQ7CisKKwkvLyBJZiBQQ1MgaXMgbm90IGxvY2tlZCB0byByZWNlaXZlIGJsb2NrcywgdGhlbiB0aGUgbGluayBpcyBkb3duCisJaWYgKCEoVmFsdWUgJiBQQ1NfMTBCX0JMT0NLX0xPQ0spKQorCQlyZXR1cm4gKFNYR19MSU5LX0RPV04pOworCisJc3RhdHVzID0gc3hnX3JlYWRfbWRpb19yZWcoYWRhcHRlciwgTUlJTV9ERVZfUEhZX1hTLAkvLyBQSFkgWFMgbW9kdWxlCisJCQkJICAgUEhZX1hTX0xBTkVfU1RBVFVTLAkvLyBYUyBMYW5lIFN0YXR1cyByZWdpc3RlcgorCQkJCSAgICZWYWx1ZSk7CisJaWYgKHN0YXR1cyAhPSBTVEFUVVNfU1VDQ0VTUykKKwkJZ290byBiYWQ7CisKKwkvLyBJZiBYUyB0cmFuc21pdCBsYW5lcyBhcmUgbm90IGFsaWduZWQsIHRoZW4gdGhlIGxpbmsgaXMgZG93bgorCWlmICghKFZhbHVlICYgWFNfTEFORV9BTElHTikpCisJCXJldHVybiAoU1hHX0xJTktfRE9XTik7CisKKwkvLyBBbGwgMyBiaXRzIGFyZSB0cnVlLCBzbyB0aGUgbGluayBpcyB1cAorCURCR19FUlJPUigiRVhJVCAlc1xuIiwgX19GVU5DVElPTl9fKTsKKworCXJldHVybiAoU1hHX0xJTktfVVApOworCisgICAgICBiYWQ6CisJLy8gQW4gZXJyb3Igb2NjdXJyZWQgcmVhZGluZyBhbiBNRElPIHJlZ2lzdGVyLiAgVGhpcyBzaG91bGRuJ3QgaGFwcGVuLgorCURCR19FUlJPUigiRXJyb3IgcmVhZGluZyBhbiBNRElPIHJlZ2lzdGVyIVxuIik7CisJQVNTRVJUKDApOworCXJldHVybiAoU1hHX0xJTktfRE9XTik7Cit9CisKK3N0YXRpYyB2b2lkIHN4Z19pbmRpY2F0ZV9saW5rX3N0YXRlKHBfYWRhcHRlcl90IGFkYXB0ZXIsCisJCQkJICAgIFNYR19MSU5LX1NUQVRFIExpbmtTdGF0ZSkKK3sKKwlpZiAoYWRhcHRlci0+TGlua1N0YXRlID09IFNYR19MSU5LX1VQKSB7CisJCURCR19FUlJPUigiJXM6IExJTksgbm93IFVQLCBjYWxsIG5ldGlmX3N0YXJ0X3F1ZXVlXG4iLAorCQkJICBfX0ZVTkNUSU9OX18pOworCQluZXRpZl9zdGFydF9xdWV1ZShhZGFwdGVyLT5uZXRkZXYpOworCX0gZWxzZSB7CisJCURCR19FUlJPUigiJXM6IExJTksgbm93IERPV04sIGNhbGwgbmV0aWZfc3RvcF9xdWV1ZVxuIiwKKwkJCSAgX19GVU5DVElPTl9fKTsKKwkJbmV0aWZfc3RvcF9xdWV1ZShhZGFwdGVyLT5uZXRkZXYpOworCX0KK30KKworLyoKKyAqIHN4Z19saW5rX3N0YXRlIC0gU2V0IHRoZSBsaW5rIHN0YXRlIGFuZCBpZiBuZWNlc3NhcnksIGluZGljYXRlLgorICoJVGhpcyByb3V0aW5lIHRoZSBjZW50cmFsIHBvaW50IG9mIHByb2Nlc3NpbmcgZm9yIGFsbCBsaW5rIHN0YXRlIGNoYW5nZXMuCisgKglOb3RoaW5nIGVsc2UgaW4gdGhlIGRyaXZlciBzaG91bGQgYWx0ZXIgdGhlIGxpbmsgc3RhdGUgb3IgcGVyZm9ybQorICoJbGluayBzdGF0ZSBpbmRpY2F0aW9ucworICoKKyAqIEFyZ3VtZW50cyAtCisgKglhZGFwdGVyCQktIEEgcG9pbnRlciB0byBvdXIgYWRhcHRlciBzdHJ1Y3R1cmUKKyAqCUxpbmtTdGF0ZSAJLSBUaGUgbGluayBzdGF0ZQorICoKKyAqIFJldHVybgorICoJTm9uZQorICovCitzdGF0aWMgdm9pZCBzeGdfbGlua19zdGF0ZShwX2FkYXB0ZXJfdCBhZGFwdGVyLCBTWEdfTElOS19TVEFURSBMaW5rU3RhdGUpCit7CisJU1hHX1RSQUNFKFRSQUNFX1NYRywgU3hnVHJhY2VCdWZmZXIsIFRSQUNFX0lNUE9SVEFOVCwgIkxua0lORENUIiwKKwkJICBhZGFwdGVyLCBMaW5rU3RhdGUsIGFkYXB0ZXItPkxpbmtTdGF0ZSwgYWRhcHRlci0+U3RhdGUpOworCisJREJHX0VSUk9SKCJFTlRFUiAlc1xuIiwgX19GVU5DVElPTl9fKTsKKworCS8vIEhvbGQgdGhlIGFkYXB0ZXIgbG9jayBkdXJpbmcgdGhpcyByb3V0aW5lLiAgTWF5YmUgbW92ZQorCS8vIHRoZSBsb2NrIHRvIHRoZSBjYWxsZXIuCisJc3Bpbl9sb2NrKCZhZGFwdGVyLT5BZGFwdGVyTG9jayk7CisJaWYgKExpbmtTdGF0ZSA9PSBhZGFwdGVyLT5MaW5rU3RhdGUpIHsKKwkJLy8gTm90aGluZyBjaGFuZ2VkLi4KKwkJc3Bpbl91bmxvY2soJmFkYXB0ZXItPkFkYXB0ZXJMb2NrKTsKKwkJREJHX0VSUk9SKCJFWElUICMwICVzXG4iLCBfX0ZVTkNUSU9OX18pOworCQlyZXR1cm47CisJfQorCS8vIFNhdmUgdGhlIGFkYXB0ZXIgc3RhdGUKKwlhZGFwdGVyLT5MaW5rU3RhdGUgPSBMaW5rU3RhdGU7CisKKwkvLyBEcm9wIHRoZSBsb2NrIGFuZCBpbmRpY2F0ZSBsaW5rIHN0YXRlCisJc3Bpbl91bmxvY2soJmFkYXB0ZXItPkFkYXB0ZXJMb2NrKTsKKwlEQkdfRVJST1IoIkVYSVQgIzEgJXNcbiIsIF9fRlVOQ1RJT05fXyk7CisKKwlzeGdfaW5kaWNhdGVfbGlua19zdGF0ZShhZGFwdGVyLCBMaW5rU3RhdGUpOworfQorCisvKgorICogc3hnX3dyaXRlX21kaW9fcmVnIC0gV3JpdGUgdG8gYSByZWdpc3RlciBvbiB0aGUgTURJTyBidXMKKyAqCisgKiBBcmd1bWVudHMgLQorICoJYWRhcHRlcgkJLSBBIHBvaW50ZXIgdG8gb3VyIGFkYXB0ZXIgc3RydWN0dXJlCisgKiAgRGV2QWRkciAgICAgLSBNRElPIGRldmljZSBudW1iZXIgYmVpbmcgYWRkcmVzc2VkCisgKiAgUmVnQWRkciAgICAgLSByZWdpc3RlciBhZGRyZXNzIGZvciB0aGUgc3BlY2lmaWVkIE1ESU8gZGV2aWNlCisgKiAgVmFsdWUJCS0gdmFsdWUgdG8gd3JpdGUgdG8gdGhlIE1ESU8gcmVnaXN0ZXIKKyAqCisgKiBSZXR1cm4KKyAqCXN0YXR1cworICovCitzdGF0aWMgaW50IHN4Z193cml0ZV9tZGlvX3JlZyhwX2FkYXB0ZXJfdCBhZGFwdGVyLAorCQkJICAgICAgdTMyIERldkFkZHIsIHUzMiBSZWdBZGRyLCB1MzIgVmFsdWUpCit7CisJUFNYR19IV19SRUdTIEh3UmVncyA9IGFkYXB0ZXItPkh3UmVnczsKKwl1MzIgQWRkck9wOwkJLy8gQWRkcmVzcyBvcGVyYXRpb24gKHdyaXR0ZW4gdG8gTUlJTSBmaWVsZCByZWcpCisJdTMyIFdyaXRlT3A7CQkvLyBXcml0ZSBvcGVyYXRpb24gKHdyaXR0ZW4gdG8gTUlJTSBmaWVsZCByZWcpCisJdTMyIENtZDsJCS8vIENvbW1hbmQgKHdyaXR0ZW4gdG8gTUlJTSBjb21tYW5kIHJlZykKKwl1MzIgVmFsdWVSZWFkOworCXUzMiBUaW1lb3V0OworCisvLyAgREJHX0VSUk9SKCJFTlRFUiAlc1xuIiwgX19GVU5DVElPTl9fKTsKKworCVNYR19UUkFDRShUUkFDRV9TWEcsIFN4Z1RyYWNlQnVmZmVyLCBUUkFDRV9OT0lTWSwgIldydE1ESU8iLAorCQkgIGFkYXB0ZXIsIDAsIDAsIDApOworCisJLy8gRW5zdXJlIHZhbHVlcyBkb24ndCBleGNlZWQgZmllbGQgd2lkdGgKKwlEZXZBZGRyICY9IDB4MDAxRjsJLy8gNS1iaXQgZmllbGQKKwlSZWdBZGRyICY9IDB4RkZGRjsJLy8gMTYtYml0IGZpZWxkCisJVmFsdWUgJj0gMHhGRkZGOwkvLyAxNi1iaXQgZmllbGQKKworCS8vIFNldCBNSUlNIGZpZWxkIHJlZ2lzdGVyIGJpdHMgZm9yIGFuIE1JSU0gYWRkcmVzcyBvcGVyYXRpb24KKwlBZGRyT3AgPSAoTUlJTV9QT1JUX05VTSA8PCBBWEdNQUNfQU1JSU1fRklFTERfUE9SVF9TSElGVCkgfAorCSAgICAoRGV2QWRkciA8PCBBWEdNQUNfQU1JSU1fRklFTERfREVWX1NISUZUKSB8CisJICAgIChNSUlNX1RBXzEwR0IgPDwgQVhHTUFDX0FNSUlNX0ZJRUxEX1RBX1NISUZUKSB8CisJICAgIChNSUlNX09QX0FERFIgPDwgQVhHTUFDX0FNSUlNX0ZJRUxEX09QX1NISUZUKSB8IFJlZ0FkZHI7CisKKwkvLyBTZXQgTUlJTSBmaWVsZCByZWdpc3RlciBiaXRzIGZvciBhbiBNSUlNIHdyaXRlIG9wZXJhdGlvbgorCVdyaXRlT3AgPSAoTUlJTV9QT1JUX05VTSA8PCBBWEdNQUNfQU1JSU1fRklFTERfUE9SVF9TSElGVCkgfAorCSAgICAoRGV2QWRkciA8PCBBWEdNQUNfQU1JSU1fRklFTERfREVWX1NISUZUKSB8CisJICAgIChNSUlNX1RBXzEwR0IgPDwgQVhHTUFDX0FNSUlNX0ZJRUxEX1RBX1NISUZUKSB8CisJICAgIChNSUlNX09QX1dSSVRFIDw8IEFYR01BQ19BTUlJTV9GSUVMRF9PUF9TSElGVCkgfCBWYWx1ZTsKKworCS8vIFNldCBNSUlNIGNvbW1hbmQgcmVnaXN0ZXIgYml0cyB0byBleGVjdXRlIGFuIE1JSU0gY29tbWFuZAorCUNtZCA9IEFYR01BQ19BTUlJTV9DTURfU1RBUlQgfCBBWEdNQUNfQU1JSU1fQ01EXzEwR19PUEVSQVRJT047CisKKwkvLyBSZXNldCB0aGUgY29tbWFuZCByZWdpc3RlciBjb21tYW5kIGJpdCAoaW4gY2FzZSBpdCdzIG5vdCAwKQorCVdSSVRFX1JFRyhId1JlZ3MtPk1hY0FtaWltQ21kLCAwLCBUUlVFKTsKKworCS8vIE1JSU0gd3JpdGUgdG8gc2V0IHRoZSBhZGRyZXNzIG9mIHRoZSBzcGVjaWZpZWQgTURJTyByZWdpc3RlcgorCVdSSVRFX1JFRyhId1JlZ3MtPk1hY0FtaWltRmllbGQsIEFkZHJPcCwgVFJVRSk7CisKKwkvLyBXcml0ZSB0byBNSUlNIENvbW1hbmQgUmVnaXN0ZXIgdG8gZXhlY3V0ZSB0byBhZGRyZXNzIG9wZXJhdGlvbgorCVdSSVRFX1JFRyhId1JlZ3MtPk1hY0FtaWltQ21kLCBDbWQsIFRSVUUpOworCisJLy8gUG9sbCBBTUlJTSBJbmRpY2F0b3IgcmVnaXN0ZXIgdG8gd2FpdCBmb3IgY29tcGxldGlvbgorCVRpbWVvdXQgPSBTWEdfTElOS19USU1FT1VUOworCWRvIHsKKwkJdWRlbGF5KDEwMCk7CS8vIFRpbWVvdXQgaW4gMTAwdXMgdW5pdHMKKwkJUkVBRF9SRUcoSHdSZWdzLT5NYWNBbWlpbUluZGljYXRvciwgVmFsdWVSZWFkKTsKKwkJaWYgKC0tVGltZW91dCA9PSAwKSB7CisJCQlyZXR1cm4gKFNUQVRVU19GQUlMVVJFKTsKKwkJfQorCX0gd2hpbGUgKFZhbHVlUmVhZCAmIEFYR01BQ19BTUlJTV9JTkRDX0JVU1kpOworCisJLy8gUmVzZXQgdGhlIGNvbW1hbmQgcmVnaXN0ZXIgY29tbWFuZCBiaXQKKwlXUklURV9SRUcoSHdSZWdzLT5NYWNBbWlpbUNtZCwgMCwgVFJVRSk7CisKKwkvLyBNSUlNIHdyaXRlIHRvIHNldCB1cCBhbiBNRElPIHdyaXRlIG9wZXJhdGlvbgorCVdSSVRFX1JFRyhId1JlZ3MtPk1hY0FtaWltRmllbGQsIFdyaXRlT3AsIFRSVUUpOworCisJLy8gV3JpdGUgdG8gTUlJTSBDb21tYW5kIFJlZ2lzdGVyIHRvIGV4ZWN1dGUgdGhlIHdyaXRlIG9wZXJhdGlvbgorCVdSSVRFX1JFRyhId1JlZ3MtPk1hY0FtaWltQ21kLCBDbWQsIFRSVUUpOworCisJLy8gUG9sbCBBTUlJTSBJbmRpY2F0b3IgcmVnaXN0ZXIgdG8gd2FpdCBmb3IgY29tcGxldGlvbgorCVRpbWVvdXQgPSBTWEdfTElOS19USU1FT1VUOworCWRvIHsKKwkJdWRlbGF5KDEwMCk7CS8vIFRpbWVvdXQgaW4gMTAwdXMgdW5pdHMKKwkJUkVBRF9SRUcoSHdSZWdzLT5NYWNBbWlpbUluZGljYXRvciwgVmFsdWVSZWFkKTsKKwkJaWYgKC0tVGltZW91dCA9PSAwKSB7CisJCQlyZXR1cm4gKFNUQVRVU19GQUlMVVJFKTsKKwkJfQorCX0gd2hpbGUgKFZhbHVlUmVhZCAmIEFYR01BQ19BTUlJTV9JTkRDX0JVU1kpOworCisvLyAgREJHX0VSUk9SKCJFWElUICVzXG4iLCBfX0ZVTkNUSU9OX18pOworCisJcmV0dXJuIChTVEFUVVNfU1VDQ0VTUyk7Cit9CisKKy8qCisgKiBzeGdfcmVhZF9tZGlvX3JlZyAtIFJlYWQgYSByZWdpc3RlciBvbiB0aGUgTURJTyBidXMKKyAqCisgKiBBcmd1bWVudHMgLQorICoJYWRhcHRlcgkJLSBBIHBvaW50ZXIgdG8gb3VyIGFkYXB0ZXIgc3RydWN0dXJlCisgKiAgRGV2QWRkciAgICAgLSBNRElPIGRldmljZSBudW1iZXIgYmVpbmcgYWRkcmVzc2VkCisgKiAgUmVnQWRkciAgICAgLSByZWdpc3RlciBhZGRyZXNzIGZvciB0aGUgc3BlY2lmaWVkIE1ESU8gZGV2aWNlCisgKiAgcFZhbHVlCQktIHBvaW50ZXIgdG8gd2hlcmUgdG8gcHV0IGRhdGEgcmVhZCBmcm9tIHRoZSBNRElPIHJlZ2lzdGVyCisgKgorICogUmV0dXJuCisgKglzdGF0dXMKKyAqLworc3RhdGljIGludCBzeGdfcmVhZF9tZGlvX3JlZyhwX2FkYXB0ZXJfdCBhZGFwdGVyLAorCQkJICAgICB1MzIgRGV2QWRkciwgdTMyIFJlZ0FkZHIsIHUzMiAqcFZhbHVlKQoreworCVBTWEdfSFdfUkVHUyBId1JlZ3MgPSBhZGFwdGVyLT5Id1JlZ3M7CisJdTMyIEFkZHJPcDsJCS8vIEFkZHJlc3Mgb3BlcmF0aW9uICh3cml0dGVuIHRvIE1JSU0gZmllbGQgcmVnKQorCXUzMiBSZWFkT3A7CQkvLyBSZWFkIG9wZXJhdGlvbiAod3JpdHRlbiB0byBNSUlNIGZpZWxkIHJlZykKKwl1MzIgQ21kOwkJLy8gQ29tbWFuZCAod3JpdHRlbiB0byBNSUlNIGNvbW1hbmQgcmVnKQorCXUzMiBWYWx1ZVJlYWQ7CisJdTMyIFRpbWVvdXQ7CisKKwlTWEdfVFJBQ0UoVFJBQ0VfU1hHLCBTeGdUcmFjZUJ1ZmZlciwgVFJBQ0VfTk9JU1ksICJXcnRNRElPIiwKKwkJICBhZGFwdGVyLCAwLCAwLCAwKTsKKy8vICBEQkdfRVJST1IoIkVOVEVSICVzXG4iLCBfX0ZVTkNUSU9OX18pOworCisJLy8gRW5zdXJlIHZhbHVlcyBkb24ndCBleGNlZWQgZmllbGQgd2lkdGgKKwlEZXZBZGRyICY9IDB4MDAxRjsJLy8gNS1iaXQgZmllbGQKKwlSZWdBZGRyICY9IDB4RkZGRjsJLy8gMTYtYml0IGZpZWxkCisKKwkvLyBTZXQgTUlJTSBmaWVsZCByZWdpc3RlciBiaXRzIGZvciBhbiBNSUlNIGFkZHJlc3Mgb3BlcmF0aW9uCisJQWRkck9wID0gKE1JSU1fUE9SVF9OVU0gPDwgQVhHTUFDX0FNSUlNX0ZJRUxEX1BPUlRfU0hJRlQpIHwKKwkgICAgKERldkFkZHIgPDwgQVhHTUFDX0FNSUlNX0ZJRUxEX0RFVl9TSElGVCkgfAorCSAgICAoTUlJTV9UQV8xMEdCIDw8IEFYR01BQ19BTUlJTV9GSUVMRF9UQV9TSElGVCkgfAorCSAgICAoTUlJTV9PUF9BRERSIDw8IEFYR01BQ19BTUlJTV9GSUVMRF9PUF9TSElGVCkgfCBSZWdBZGRyOworCisJLy8gU2V0IE1JSU0gZmllbGQgcmVnaXN0ZXIgYml0cyBmb3IgYW4gTUlJTSByZWFkIG9wZXJhdGlvbgorCVJlYWRPcCA9IChNSUlNX1BPUlRfTlVNIDw8IEFYR01BQ19BTUlJTV9GSUVMRF9QT1JUX1NISUZUKSB8CisJICAgIChEZXZBZGRyIDw8IEFYR01BQ19BTUlJTV9GSUVMRF9ERVZfU0hJRlQpIHwKKwkgICAgKE1JSU1fVEFfMTBHQiA8PCBBWEdNQUNfQU1JSU1fRklFTERfVEFfU0hJRlQpIHwKKwkgICAgKE1JSU1fT1BfUkVBRCA8PCBBWEdNQUNfQU1JSU1fRklFTERfT1BfU0hJRlQpOworCisJLy8gU2V0IE1JSU0gY29tbWFuZCByZWdpc3RlciBiaXRzIHRvIGV4ZWN1dGUgYW4gTUlJTSBjb21tYW5kCisJQ21kID0gQVhHTUFDX0FNSUlNX0NNRF9TVEFSVCB8IEFYR01BQ19BTUlJTV9DTURfMTBHX09QRVJBVElPTjsKKworCS8vIFJlc2V0IHRoZSBjb21tYW5kIHJlZ2lzdGVyIGNvbW1hbmQgYml0IChpbiBjYXNlIGl0J3Mgbm90IDApCisJV1JJVEVfUkVHKEh3UmVncy0+TWFjQW1paW1DbWQsIDAsIFRSVUUpOworCisJLy8gTUlJTSB3cml0ZSB0byBzZXQgdGhlIGFkZHJlc3Mgb2YgdGhlIHNwZWNpZmllZCBNRElPIHJlZ2lzdGVyCisJV1JJVEVfUkVHKEh3UmVncy0+TWFjQW1paW1GaWVsZCwgQWRkck9wLCBUUlVFKTsKKworCS8vIFdyaXRlIHRvIE1JSU0gQ29tbWFuZCBSZWdpc3RlciB0byBleGVjdXRlIHRvIGFkZHJlc3Mgb3BlcmF0aW9uCisJV1JJVEVfUkVHKEh3UmVncy0+TWFjQW1paW1DbWQsIENtZCwgVFJVRSk7CisKKwkvLyBQb2xsIEFNSUlNIEluZGljYXRvciByZWdpc3RlciB0byB3YWl0IGZvciBjb21wbGV0aW9uCisJVGltZW91dCA9IFNYR19MSU5LX1RJTUVPVVQ7CisJZG8geworCQl1ZGVsYXkoMTAwKTsJLy8gVGltZW91dCBpbiAxMDB1cyB1bml0cworCQlSRUFEX1JFRyhId1JlZ3MtPk1hY0FtaWltSW5kaWNhdG9yLCBWYWx1ZVJlYWQpOworCQlpZiAoLS1UaW1lb3V0ID09IDApIHsKKwkJCXJldHVybiAoU1RBVFVTX0ZBSUxVUkUpOworCQl9CisJfSB3aGlsZSAoVmFsdWVSZWFkICYgQVhHTUFDX0FNSUlNX0lORENfQlVTWSk7CisKKwkvLyBSZXNldCB0aGUgY29tbWFuZCByZWdpc3RlciBjb21tYW5kIGJpdAorCVdSSVRFX1JFRyhId1JlZ3MtPk1hY0FtaWltQ21kLCAwLCBUUlVFKTsKKworCS8vIE1JSU0gd3JpdGUgdG8gc2V0IHVwIGFuIE1ESU8gcmVnaXN0ZXIgcmVhZCBvcGVyYXRpb24KKwlXUklURV9SRUcoSHdSZWdzLT5NYWNBbWlpbUZpZWxkLCBSZWFkT3AsIFRSVUUpOworCisJLy8gV3JpdGUgdG8gTUlJTSBDb21tYW5kIFJlZ2lzdGVyIHRvIGV4ZWN1dGUgdGhlIHJlYWQgb3BlcmF0aW9uCisJV1JJVEVfUkVHKEh3UmVncy0+TWFjQW1paW1DbWQsIENtZCwgVFJVRSk7CisKKwkvLyBQb2xsIEFNSUlNIEluZGljYXRvciByZWdpc3RlciB0byB3YWl0IGZvciBjb21wbGV0aW9uCisJVGltZW91dCA9IFNYR19MSU5LX1RJTUVPVVQ7CisJZG8geworCQl1ZGVsYXkoMTAwKTsJLy8gVGltZW91dCBpbiAxMDB1cyB1bml0cworCQlSRUFEX1JFRyhId1JlZ3MtPk1hY0FtaWltSW5kaWNhdG9yLCBWYWx1ZVJlYWQpOworCQlpZiAoLS1UaW1lb3V0ID09IDApIHsKKwkJCXJldHVybiAoU1RBVFVTX0ZBSUxVUkUpOworCQl9CisJfSB3aGlsZSAoVmFsdWVSZWFkICYgQVhHTUFDX0FNSUlNX0lORENfQlVTWSk7CisKKwkvLyBSZWFkIHRoZSBNRElPIHJlZ2lzdGVyIGRhdGEgYmFjayBmcm9tIHRoZSBmaWVsZCByZWdpc3RlcgorCVJFQURfUkVHKEh3UmVncy0+TWFjQW1paW1GaWVsZCwgKnBWYWx1ZSk7CisJKnBWYWx1ZSAmPSAweEZGRkY7CS8vIGRhdGEgaXMgaW4gdGhlIGxvd2VyIDE2IGJpdHMKKworLy8gIERCR19FUlJPUigiRVhJVCAlc1xuIiwgX19GVU5DVElPTl9fKTsKKworCXJldHVybiAoU1RBVFVTX1NVQ0NFU1MpOworfQorCisvKgorICogIEFsbG9jYXRlIGEgbWNhc3RfYWRkcmVzcyBzdHJ1Y3R1cmUgdG8gaG9sZCB0aGUgbXVsdGljYXN0IGFkZHJlc3MuCisgKiAgTGluayBpdCBpbi4KKyAqLworc3RhdGljIGludCBzeGdfbWNhc3RfYWRkX2xpc3QocF9hZGFwdGVyX3QgYWRhcHRlciwgY2hhciAqYWRkcmVzcykKK3sKKwlwX21jYXN0X2FkZHJlc3NfdCBtY2FkZHIsIG1saXN0OworCWJvb2wgZXF1YWxhZGRyOworCisJLyogQ2hlY2sgdG8gc2VlIGlmIGl0IGFscmVhZHkgZXhpc3RzICovCisJbWxpc3QgPSBhZGFwdGVyLT5tY2FzdGFkZHJzOworCXdoaWxlIChtbGlzdCkgeworCQlFVEhFUl9FUV9BRERSKG1saXN0LT5hZGRyZXNzLCBhZGRyZXNzLCBlcXVhbGFkZHIpOworCQlpZiAoZXF1YWxhZGRyKSB7CisJCQlyZXR1cm4gKFNUQVRVU19TVUNDRVNTKTsKKwkJfQorCQltbGlzdCA9IG1saXN0LT5uZXh0OworCX0KKworCS8qIERvZXNuJ3QgYWxyZWFkeSBleGlzdC4gIEFsbG9jYXRlIGEgc3RydWN0dXJlIHRvIGhvbGQgaXQgKi8KKwltY2FkZHIgPSBrbWFsbG9jKHNpemVvZihtY2FzdF9hZGRyZXNzX3QpLCBHRlBfQVRPTUlDKTsKKwlpZiAobWNhZGRyID09IE5VTEwpCisJCXJldHVybiAxOworCisJbWVtY3B5KG1jYWRkci0+YWRkcmVzcywgYWRkcmVzcywgNik7CisKKwltY2FkZHItPm5leHQgPSBhZGFwdGVyLT5tY2FzdGFkZHJzOworCWFkYXB0ZXItPm1jYXN0YWRkcnMgPSBtY2FkZHI7CisKKwlyZXR1cm4gKFNUQVRVU19TVUNDRVNTKTsKK30KKworLyoKKyAqIEZ1bmN0aW9ucyB0byBvYnRhaW4gdGhlIENSQyBjb3JyZXNwb25kaW5nIHRvIHRoZSBkZXN0aW5hdGlvbiBtYWMgYWRkcmVzcy4KKyAqIFRoaXMgaXMgYSBzdGFuZGFyZCBldGhlcm5ldCBDUkMgaW4gdGhhdCBpdCBpcyBhIDMyLWJpdCwgcmVmbGVjdGVkIENSQyB1c2luZworICogdGhlIHBvbHlub21pYWw6CisgKiAgIHheMzIgKyB4XjI2ICsgeF4yMyArIHheMjIgKyB4XjE2ICsgeF4xMiArIHheMTEgKyB4XjEwICsgeF44ICsgeF43ICsgeF41ICsgeF40ICsgeF4yICsgeF4xLgorICoKKyAqIEFmdGVyIHRoZSBDUkMgZm9yIHRoZSA2IGJ5dGVzIGlzIGdlbmVyYXRlZCAoYnV0IGJlZm9yZSB0aGUgdmFsdWUgaXMgY29tcGxlbWVudGVkKSwKKyAqIHdlIG11c3QgdGhlbiB0cmFuc3Bvc2UgdGhlIHZhbHVlIGFuZCByZXR1cm4gYml0cyAzMC0yMy4KKyAqCisgKi8KK3N0YXRpYyB1MzIgc3hnX2NyY190YWJsZVsyNTZdOwkvKiBUYWJsZSBvZiBDUkMncyBmb3IgYWxsIHBvc3NpYmxlIGJ5dGUgdmFsdWVzICovCitzdGF0aWMgdTMyIHN4Z19jcmNfaW5pdDsJLyogSXMgdGFibGUgaW5pdGlhbGl6ZWQgICAgICAgICAgICAgICAgICAgICAgICAqLworCisvKgorICogIENvbnRydWN0IHRoZSBDUkMzMiB0YWJsZQorICovCitzdGF0aWMgdm9pZCBzeGdfbWNhc3RfaW5pdF9jcmMzMih2b2lkKQoreworCXUzMiBjOwkJCS8qICBDUkMgc2hpdCByZWcgICAgICAgICAgICAgICAgICovCisJdTMyIGUgPSAwOwkJLyogIFBvbHkgWC1vciBwYXR0ZXJuICAgICAgICAgICAgKi8KKwlpbnQgaTsJCQkvKiAgY291bnRlciAgICAgICAgICAgICAgICAgICAgICAqLworCWludCBrOwkJCS8qICBieXRlIGJlaW5nIHNoaWZ0ZWQgaW50byBjcmMgICovCisKKwlzdGF0aWMgaW50IHBbXSA9IHsgMCwgMSwgMiwgNCwgNSwgNywgOCwgMTAsIDExLCAxMiwgMTYsIDIyLCAyMywgMjYgfTsKKworCWZvciAoaSA9IDA7IGkgPCBzaXplb2YocCkgLyBzaXplb2YoaW50KTsgaSsrKSB7CisJCWUgfD0gMUwgPDwgKDMxIC0gcFtpXSk7CisJfQorCisJZm9yIChpID0gMTsgaSA8IDI1NjsgaSsrKSB7CisJCWMgPSBpOworCQlmb3IgKGsgPSA4OyBrOyBrLS0pIHsKKwkJCWMgPSBjICYgMSA/IChjID4+IDEpIF4gZSA6IGMgPj4gMTsKKwkJfQorCQlzeGdfY3JjX3RhYmxlW2ldID0gYzsKKwl9Cit9CisKKy8qCisgKiAgUmV0dXJuIHRoZSBNQUMgaGFzdCBhcyBkZXNjcmliZWQgYWJvdmUuCisgKi8KK3N0YXRpYyB1bnNpZ25lZCBjaGFyIHN4Z19tY2FzdF9nZXRfbWFjX2hhc2goY2hhciAqbWFjYWRkcikKK3sKKwl1MzIgY3JjOworCWNoYXIgKnA7CisJaW50IGk7CisJdW5zaWduZWQgY2hhciBtYWNoYXNoID0gMDsKKworCWlmICghc3hnX2NyY19pbml0KSB7CisJCXN4Z19tY2FzdF9pbml0X2NyYzMyKCk7CisJCXN4Z19jcmNfaW5pdCA9IDE7CisJfQorCisJY3JjID0gMHhGRkZGRkZGRjsJLyogUHJlbG9hZCBzaGlmdCByZWdpc3RlciwgcGVyIGNyYy0zMiBzcGVjICovCisJZm9yIChpID0gMCwgcCA9IG1hY2FkZHI7IGkgPCA2OyArK3AsICsraSkgeworCQljcmMgPSAoY3JjID4+IDgpIF4gc3hnX2NyY190YWJsZVsoY3JjIF4gKnApICYgMHhGRl07CisJfQorCisJLyogUmV0dXJuIGJpdHMgMS04LCB0cmFuc3Bvc2VkICovCisJZm9yIChpID0gMTsgaSA8IDk7IGkrKykgeworCQltYWNoYXNoIHw9ICgoKGNyYyA+PiBpKSAmIDEpIDw8ICg4IC0gaSkpOworCX0KKworCXJldHVybiAobWFjaGFzaCk7Cit9CisKK3N0YXRpYyB2b2lkIHN4Z19tY2FzdF9zZXRfYml0KHBfYWRhcHRlcl90IGFkYXB0ZXIsIGNoYXIgKmFkZHJlc3MpCit7CisJdW5zaWduZWQgY2hhciBjcmNwb2x5OworCisJLyogR2V0IHRoZSBDUkMgcG9seW5vbWlhbCBmb3IgdGhlIG1hYyBhZGRyZXNzICovCisJY3JjcG9seSA9IHN4Z19tY2FzdF9nZXRfbWFjX2hhc2goYWRkcmVzcyk7CisKKwkvKiBXZSBvbmx5IGhhdmUgc3BhY2Ugb24gdGhlIFNMSUMgZm9yIDY0IGVudHJpZXMuICBMb3AKKwkgKiBvZmYgdGhlIHRvcCB0d28gYml0cy4gKDJeNiA9IDY0KQorCSAqLworCWNyY3BvbHkgJj0gMHgzRjsKKworCS8qIE9SIGluIHRoZSBuZXcgYml0IGludG8gb3VyIDY0IGJpdCBtYXNrLiAqLworCWFkYXB0ZXItPk11bHRpY2FzdE1hc2sgfD0gKHU2NCkgMSA8PCBjcmNwb2x5OworfQorCitzdGF0aWMgdm9pZCBzeGdfbWNhc3Rfc2V0X2xpc3QocF9uZXRfZGV2aWNlIGRldikKK3sKKyNpZiBYWFhUT0RPCisJcF9hZGFwdGVyX3QgYWRhcHRlciA9IChwX2FkYXB0ZXJfdCkgbmV0ZGV2X3ByaXYoZGV2KTsKKwlpbnQgc3RhdHVzID0gU1RBVFVTX1NVQ0NFU1M7CisJaW50IGk7CisJY2hhciAqYWRkcmVzc2VzOworCXN0cnVjdCBkZXZfbWNfbGlzdCAqbWNfbGlzdCA9IGRldi0+bWNfbGlzdDsKKwlpbnQgbWNfY291bnQgPSBkZXYtPm1jX2NvdW50OworCisJQVNTRVJUKGFkYXB0ZXIpOworCisJZm9yIChpID0gMTsgaSA8PSBtY19jb3VudDsgaSsrKSB7CisJCWFkZHJlc3NlcyA9IChjaGFyICopJm1jX2xpc3QtPmRtaV9hZGRyOworCQlpZiAobWNfbGlzdC0+ZG1pX2FkZHJsZW4gPT0gNikgeworCQkJc3RhdHVzID0gc3hnX21jYXN0X2FkZF9saXN0KGFkYXB0ZXIsIGFkZHJlc3Nlcyk7CisJCQlpZiAoc3RhdHVzICE9IFNUQVRVU19TVUNDRVNTKSB7CisJCQkJYnJlYWs7CisJCQl9CisJCX0gZWxzZSB7CisJCQlzdGF0dXMgPSAtRUlOVkFMOworCQkJYnJlYWs7CisJCX0KKwkJc3hnX21jYXN0X3NldF9iaXQoYWRhcHRlciwgYWRkcmVzc2VzKTsKKwkJbWNfbGlzdCA9IG1jX2xpc3QtPm5leHQ7CisJfQorCisJREJHX0VSUk9SKCIlcyBhLT5kZXZmbGFnc19wcmV2WyV4XSBkZXYtPmZsYWdzWyV4XSBzdGF0dXNbJXhdXG4iLAorCQkgIF9fRlVOQ1RJT05fXywgYWRhcHRlci0+ZGV2ZmxhZ3NfcHJldiwgZGV2LT5mbGFncywgc3RhdHVzKTsKKwlpZiAoYWRhcHRlci0+ZGV2ZmxhZ3NfcHJldiAhPSBkZXYtPmZsYWdzKSB7CisJCWFkYXB0ZXItPm1hY29wdHMgPSBNQUNfRElSRUNURUQ7CisJCWlmIChkZXYtPmZsYWdzKSB7CisJCQlpZiAoZGV2LT5mbGFncyAmIElGRl9CUk9BRENBU1QpIHsKKwkJCQlhZGFwdGVyLT5tYWNvcHRzIHw9IE1BQ19CQ0FTVDsKKwkJCX0KKwkJCWlmIChkZXYtPmZsYWdzICYgSUZGX1BST01JU0MpIHsKKwkJCQlhZGFwdGVyLT5tYWNvcHRzIHw9IE1BQ19QUk9NSVNDOworCQkJfQorCQkJaWYgKGRldi0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkpIHsKKwkJCQlhZGFwdGVyLT5tYWNvcHRzIHw9IE1BQ19BTExNQ0FTVDsKKwkJCX0KKwkJCWlmIChkZXYtPmZsYWdzICYgSUZGX01VTFRJQ0FTVCkgeworCQkJCWFkYXB0ZXItPm1hY29wdHMgfD0gTUFDX01DQVNUOworCQkJfQorCQl9CisJCWFkYXB0ZXItPmRldmZsYWdzX3ByZXYgPSBkZXYtPmZsYWdzOworCQlEQkdfRVJST1IoIiVzIGNhbGwgc3hnX2NvbmZpZ19zZXQgYWRhcHRlci0+bWFjb3B0c1sleF1cbiIsCisJCQkgIF9fRlVOQ1RJT05fXywgYWRhcHRlci0+bWFjb3B0cyk7CisJCXN4Z19jb25maWdfc2V0KGFkYXB0ZXIsIFRSVUUpOworCX0gZWxzZSB7CisJCWlmIChzdGF0dXMgPT0gU1RBVFVTX1NVQ0NFU1MpIHsKKwkJCXN4Z19tY2FzdF9zZXRfbWFzayhhZGFwdGVyKTsKKwkJfQorCX0KKyNlbmRpZgorCXJldHVybjsKK30KKworc3RhdGljIHZvaWQgc3hnX21jYXN0X3NldF9tYXNrKHBfYWRhcHRlcl90IGFkYXB0ZXIpCit7CisJUFNYR19VQ09ERV9SRUdTIHN4Z19yZWdzID0gYWRhcHRlci0+VWNvZGVSZWdzOworCisJREJHX0VSUk9SKCIlcyBFTlRFUiAoJXMpIG1hY29wdHNbJXhdIG1hc2tbJWxseF1cbiIsIF9fRlVOQ1RJT05fXywKKwkJICBhZGFwdGVyLT5uZXRkZXYtPm5hbWUsICh1bnNpZ25lZCBpbnQpYWRhcHRlci0+TWFjRmlsdGVyLAorCQkgIGFkYXB0ZXItPk11bHRpY2FzdE1hc2spOworCisJaWYgKGFkYXB0ZXItPk1hY0ZpbHRlciAmIChNQUNfQUxMTUNBU1QgfCBNQUNfUFJPTUlTQykpIHsKKwkJLyogVHVybiBvbiBhbGwgbXVsdGljYXN0IGFkZHJlc3Nlcy4gV2UgaGF2ZSB0byBkbyB0aGlzIGZvciBwcm9taXNjdW91cworCQkgKiBtb2RlIGFzIHdlbGwgYXMgQUxMTUNBU1QgbW9kZS4gIEl0IHNhdmVzIHRoZSBNaWNyb2NvZGUgZnJvbSBoYXZpbmcKKwkJICogdG8ga2VlcCBzdGF0ZSBhYm91dCB0aGUgTUFDIGNvbmZpZ3VyYXRpb24uCisJCSAqLworLy8gICAgICAgICAgICAgIERCR19FUlJPUigic3hnOiAlcyBtYWNvcHRzID0gTUFDX0FMTE1DQVNUIHwgTUFDX1BST01JU0NcbiAgICAgIFNMVVQgTU9ERSEhIVxuIixfX0ZVTkNUSU9OX18pOworCQlXUklURV9SRUcoc3hnX3JlZ3MtPk1jYXN0TG93LCAweEZGRkZGRkZGLCBGTFVTSCk7CisJCVdSSVRFX1JFRyhzeGdfcmVncy0+TWNhc3RIaWdoLCAweEZGRkZGRkZGLCBGTFVTSCk7CisvLyAgICAgICAgREJHX0VSUk9SKCIlcyAoJXMpIFdSSVRFIHRvIHNsaWNfcmVncyBzbGljX21jYXN0bG93JmhpZ2ggMHhGRkZGRkZGRlxuIixfX0ZVTkNUSU9OX18sIGFkYXB0ZXItPm5ldGRldi0+bmFtZSk7CisKKwl9IGVsc2UgeworCQkvKiBDb21taXQgb3VyIG11bHRpY2FzdCBtYXN0IHRvIHRoZSBTTElDIGJ5IHdyaXRpbmcgdG8gdGhlIG11bHRpY2FzdAorCQkgKiBhZGRyZXNzIG1hc2sgcmVnaXN0ZXJzCisJCSAqLworCQlEQkdfRVJST1IoIiVzICglcykgV1JJVEUgbWNhc3Rsb3dbJWx4XSBtY2FzdGhpZ2hbJWx4XVxuIiwKKwkJCSAgX19GVU5DVElPTl9fLCBhZGFwdGVyLT5uZXRkZXYtPm5hbWUsCisJCQkgICgodWxvbmcpIChhZGFwdGVyLT5NdWx0aWNhc3RNYXNrICYgMHhGRkZGRkZGRikpLAorCQkJICAoKHVsb25nKQorCQkJICAgKChhZGFwdGVyLT5NdWx0aWNhc3RNYXNrID4+IDMyKSAmIDB4RkZGRkZGRkYpKSk7CisKKwkJV1JJVEVfUkVHKHN4Z19yZWdzLT5NY2FzdExvdywKKwkJCSAgKHUzMikgKGFkYXB0ZXItPk11bHRpY2FzdE1hc2sgJiAweEZGRkZGRkZGKSwgRkxVU0gpOworCQlXUklURV9SRUcoc3hnX3JlZ3MtPk1jYXN0SGlnaCwKKwkJCSAgKHUzMikgKChhZGFwdGVyLT4KKwkJCQkgIE11bHRpY2FzdE1hc2sgPj4gMzIpICYgMHhGRkZGRkZGRiksIEZMVVNIKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHN4Z191bm1hcF9tbWlvX3NwYWNlKHBfYWRhcHRlcl90IGFkYXB0ZXIpCit7CisjaWYgTElOVVhfRlJFRVNfQURBUFRFUl9SRVNPVVJDRVMKKy8vICAgICAgaWYgKGFkYXB0ZXItPlJlZ3MpIHsKKy8vICAgICAgICAgICAgICBpb3VubWFwKGFkYXB0ZXItPlJlZ3MpOworLy8gICAgICB9CisvLyAgICAgIGFkYXB0ZXItPnNsaWNfcmVncyA9IE5VTEw7CisjZW5kaWYKK30KKworI2lmIFhYWFRPRE8KKy8qCisgKiBTeGdGcmVlUmVzb3VyY2VzIC0gRnJlZSBldmVyeXRoaW5nIGFsbG9jYXRlZCBpbiBTeGdBbGxvY2F0ZVJlc291cmNlcworICoKKyAqIEFyZ3VtZW50cyAtCisgKglhZGFwdGVyCQktIEEgcG9pbnRlciB0byBvdXIgYWRhcHRlciBzdHJ1Y3R1cmUKKyAqCisgKiBSZXR1cm4KKyAqCW5vbmUKKyAqLwordm9pZCBTeGdGcmVlUmVzb3VyY2VzKHBfYWRhcHRlcl90IGFkYXB0ZXIpCit7CisJdTMyIFJzc0lkcywgSXNyQ291bnQ7CisJUFRDUF9PQkpFQ1QgVGNwT2JqZWN0OworCXUzMiBpOworCUJPT0xFQU4gVGltZXJDYW5jZWxsZWQ7CisKKwlTWEdfVFJBQ0UoVFJBQ0VfU1hHLCBTeGdUcmFjZUJ1ZmZlciwgVFJBQ0VfTk9JU1ksICJGcmVlUmVzIiwKKwkJICBhZGFwdGVyLCBhZGFwdGVyLT5NYXhUY2JzLCAwLCAwKTsKKworCVJzc0lkcyA9IFNYR19SU1NfQ1BVX0NPVU5UKGFkYXB0ZXIpOworCUlzckNvdW50ID0gYWRhcHRlci0+TXNpRW5hYmxlZCA/IFJzc0lkcyA6IDE7CisKKwlpZiAoYWRhcHRlci0+QmFzaWNBbGxvY2F0aW9ucyA9PSBGQUxTRSkgeworCQkvLyBObyBhbGxvY2F0aW9ucyBoYXZlIGJlZW4gbWFkZSwgaW5jbHVkaW5nIHNwaW5sb2NrcywKKwkJLy8gb3IgbGlzdGhlYWQgaW5pdGlhbGl6YXRpb25zLiAgUmV0dXJuLgorCQlyZXR1cm47CisJfQorCisJaWYgKCEoSXNMaXN0RW1wdHkoJmFkYXB0ZXItPkFsbFJjdkJsb2NrcykpKSB7CisJCVN4Z0ZyZWVSY3ZCbG9ja3MoYWRhcHRlcik7CisJfQorCWlmICghKElzTGlzdEVtcHR5KCZhZGFwdGVyLT5BbGxTZ2xCdWZmZXJzKSkpIHsKKwkJU3hnRnJlZVNnbEJ1ZmZlcnMoYWRhcHRlcik7CisJfQorCS8vIEZyZWUgZXZlbnQgcXVldWVzLgorCWlmIChhZGFwdGVyLT5FdmVudFJpbmdzKSB7CisJCXBjaV9mcmVlX2NvbnNpc3RlbnQoYWRhcHRlci0+cGNpZGV2LAorCQkJCSAgICBzaXplb2YoU1hHX0VWRU5UX1JJTkcpICogUnNzSWRzLAorCQkJCSAgICBhZGFwdGVyLT5FdmVudFJpbmdzLCBhZGFwdGVyLT5QRXZlbnRSaW5ncyk7CisJfQorCWlmIChhZGFwdGVyLT5Jc3IpIHsKKwkJcGNpX2ZyZWVfY29uc2lzdGVudChhZGFwdGVyLT5wY2lkZXYsCisJCQkJICAgIHNpemVvZih1MzIpICogSXNyQ291bnQsCisJCQkJICAgIGFkYXB0ZXItPklzciwgYWRhcHRlci0+UElzcik7CisJfQorCWlmIChhZGFwdGVyLT5YbXRSaW5nWmVyb0luZGV4KSB7CisJCXBjaV9mcmVlX2NvbnNpc3RlbnQoYWRhcHRlci0+cGNpZGV2LAorCQkJCSAgICBzaXplb2YodTMyKSwKKwkJCQkgICAgYWRhcHRlci0+WG10UmluZ1plcm9JbmRleCwKKwkJCQkgICAgYWRhcHRlci0+UFhtdFJpbmdaZXJvSW5kZXgpOworCX0KKwlpZiAoYWRhcHRlci0+SW5kaXJlY3Rpb25UYWJsZSkgeworCQlwY2lfZnJlZV9jb25zaXN0ZW50KGFkYXB0ZXItPnBjaWRldiwKKwkJCQkgICAgU1hHX01BWF9SU1NfVEFCTEVfU0laRSwKKwkJCQkgICAgYWRhcHRlci0+SW5kaXJlY3Rpb25UYWJsZSwKKwkJCQkgICAgYWRhcHRlci0+UEluZGlyZWN0aW9uVGFibGUpOworCX0KKworCVNYR19GUkVFX1BBQ0tFVF9QT09MKGFkYXB0ZXItPlBhY2tldFBvb2xIYW5kbGUpOworCVNYR19GUkVFX0JVRkZFUl9QT09MKGFkYXB0ZXItPkJ1ZmZlclBvb2xIYW5kbGUpOworCisJLy8gVW5tYXAgcmVnaXN0ZXIgc3BhY2VzCisJU3hnVW5tYXBSZXNvdXJjZXMoYWRhcHRlcik7CisKKwkvLyBEZXJlZ2lzdGVyIERNQQorCWlmIChhZGFwdGVyLT5EbWFIYW5kbGUpIHsKKwkJU1hHX0RFUkVHSVNURVJfRE1BKGFkYXB0ZXItPkRtYUhhbmRsZSk7CisJfQorCS8vIERlcmVnaXN0ZXIgaW50ZXJydXB0CisJU3hnRGVyZWdpc3RlckludGVycnVwdChhZGFwdGVyKTsKKworCS8vIFBvc3NpYmx5IGZyZWUgc3lzdGVtIGluZm8gKDUuMiBvbmx5KQorCVNYR19SRUxFQVNFX1NZU1RFTV9JTkZPKGFkYXB0ZXIpOworCisJU3hnRGlhZ0ZyZWVSZXNvdXJjZXMoYWRhcHRlcik7CisKKwlTeGdGcmVlTUNhc3RBZGRycyhhZGFwdGVyKTsKKworCWlmIChTWEdfVElNRVJfQUxMT0NBVEVEKGFkYXB0ZXItPlJlc2V0VGltZXIpKSB7CisJCVNYR19DQU5DRUxfVElNRVIoYWRhcHRlci0+UmVzZXRUaW1lciwgVGltZXJDYW5jZWxsZWQpOworCQlTWEdfRlJFRV9USU1FUihhZGFwdGVyLT5SZXNldFRpbWVyKTsKKwl9CisJaWYgKFNYR19USU1FUl9BTExPQ0FURUQoYWRhcHRlci0+UnNzVGltZXIpKSB7CisJCVNYR19DQU5DRUxfVElNRVIoYWRhcHRlci0+UnNzVGltZXIsIFRpbWVyQ2FuY2VsbGVkKTsKKwkJU1hHX0ZSRUVfVElNRVIoYWRhcHRlci0+UnNzVGltZXIpOworCX0KKwlpZiAoU1hHX1RJTUVSX0FMTE9DQVRFRChhZGFwdGVyLT5PZmZsb2FkVGltZXIpKSB7CisJCVNYR19DQU5DRUxfVElNRVIoYWRhcHRlci0+T2ZmbG9hZFRpbWVyLCBUaW1lckNhbmNlbGxlZCk7CisJCVNYR19GUkVFX1RJTUVSKGFkYXB0ZXItPk9mZmxvYWRUaW1lcik7CisJfQorCisJYWRhcHRlci0+QmFzaWNBbGxvY2F0aW9ucyA9IEZBTFNFOworCisJU1hHX1RSQUNFKFRSQUNFX1NYRywgU3hnVHJhY2VCdWZmZXIsIFRSQUNFX05PSVNZLCAiWEZyZWVSZXMiLAorCQkgIGFkYXB0ZXIsIGFkYXB0ZXItPk1heFRjYnMsIDAsIDApOworfQorI2VuZGlmCisKKy8qCisgKiBzeGdfYWxsb2NhdGVfY29tcGxldGUgLQorICoKKyAqIFRoaXMgcm91dGluZSBpcyBjYWxsZWQgd2hlbiBhIG1lbW9yeSBhbGxvY2F0aW9uIGhhcyBjb21wbGV0ZWQuCisgKgorICogQXJndW1lbnRzIC0KKyAqCXBfYWRhcHRlcl90ICAgIAktIE91ciBhZGFwdGVyIHN0cnVjdHVyZQorICoJVmlydHVhbEFkZHJlc3MJLSBNZW1vcnkgdmlydHVhbCBhZGRyZXNzCisgKglQaHlzaWNhbEFkZHJlc3MJLSBNZW1vcnkgcGh5c2ljYWwgYWRkcmVzcworICoJTGVuZ3RoCQktIExlbmd0aCBvZiBtZW1vcnkgYWxsb2NhdGVkIChvciAwKQorICoJQ29udGV4dAkJLSBUaGUgdHlwZSBvZiBidWZmZXIgYWxsb2NhdGVkCisgKgorICogUmV0dXJuCisgKglOb25lLgorICovCitzdGF0aWMgdm9pZCBzeGdfYWxsb2NhdGVfY29tcGxldGUocF9hZGFwdGVyX3QgYWRhcHRlciwKKwkJCQkgIHZvaWQgKlZpcnR1YWxBZGRyZXNzLAorCQkJCSAgZG1hX2FkZHJfdCBQaHlzaWNhbEFkZHJlc3MsCisJCQkJICB1MzIgTGVuZ3RoLCBTWEdfQlVGRkVSX1RZUEUgQ29udGV4dCkKK3sKKwlTWEdfVFJBQ0UoVFJBQ0VfU1hHLCBTeGdUcmFjZUJ1ZmZlciwgVFJBQ0VfTk9JU1ksICJBbGxvY0NtcCIsCisJCSAgYWRhcHRlciwgVmlydHVhbEFkZHJlc3MsIExlbmd0aCwgQ29udGV4dCk7CisJQVNTRVJUKGFkYXB0ZXItPkFsbG9jYXRpb25zUGVuZGluZyk7CisJLS1hZGFwdGVyLT5BbGxvY2F0aW9uc1BlbmRpbmc7CisKKwlzd2l0Y2ggKENvbnRleHQpIHsKKworCWNhc2UgU1hHX0JVRkZFUl9UWVBFX1JDVjoKKwkJc3hnX2FsbG9jYXRlX3JjdmJsb2NrX2NvbXBsZXRlKGFkYXB0ZXIsCisJCQkJCSAgICAgICBWaXJ0dWFsQWRkcmVzcywKKwkJCQkJICAgICAgIFBoeXNpY2FsQWRkcmVzcywgTGVuZ3RoKTsKKwkJYnJlYWs7CisJY2FzZSBTWEdfQlVGRkVSX1RZUEVfU0dMOgorCQlzeGdfYWxsb2NhdGVfc2dsX2J1ZmZlcl9jb21wbGV0ZShhZGFwdGVyLCAoUFNYR19TQ0FUVEVSX0dBVEhFUikKKwkJCQkJCSBWaXJ0dWFsQWRkcmVzcywKKwkJCQkJCSBQaHlzaWNhbEFkZHJlc3MsIExlbmd0aCk7CisJCWJyZWFrOworCX0KKwlTWEdfVFJBQ0UoVFJBQ0VfU1hHLCBTeGdUcmFjZUJ1ZmZlciwgVFJBQ0VfTk9JU1ksICJYQWxvY0NtcCIsCisJCSAgYWRhcHRlciwgVmlydHVhbEFkZHJlc3MsIExlbmd0aCwgQ29udGV4dCk7Cit9CisKKy8qCisgKiBzeGdfYWxsb2NhdGVfYnVmZmVyX21lbW9yeSAtIFNoYXJlZCBtZW1vcnkgYWxsb2NhdGlvbiByb3V0aW5lIHVzZWQgZm9yCisgKgkJc3luY2hyb25vdXMgYW5kIGFzeW5jaHJvbm91cyBidWZmZXIgYWxsb2NhdGlvbnMKKyAqCisgKiBBcmd1bWVudHMgLQorICoJYWRhcHRlcgkJLSBBIHBvaW50ZXIgdG8gb3VyIGFkYXB0ZXIgc3RydWN0dXJlCisgKglTaXplCQktIGJsb2NrIHNpemUgdG8gYWxsb2NhdGUKKyAqCUJ1ZmZlclR5cGUJLSBUeXBlIG9mIGJ1ZmZlciB0byBhbGxvY2F0ZQorICoKKyAqIFJldHVybgorICoJaW50CisgKi8KK3N0YXRpYyBpbnQgc3hnX2FsbG9jYXRlX2J1ZmZlcl9tZW1vcnkocF9hZGFwdGVyX3QgYWRhcHRlciwKKwkJCQkgICAgICB1MzIgU2l6ZSwgU1hHX0JVRkZFUl9UWVBFIEJ1ZmZlclR5cGUpCit7CisJaW50IHN0YXR1czsKKwl2b2lkICpCdWZmZXI7CisJZG1hX2FkZHJfdCBwQnVmZmVyOworCisJU1hHX1RSQUNFKFRSQUNFX1NYRywgU3hnVHJhY2VCdWZmZXIsIFRSQUNFX05PSVNZLCAiQWxsb2NNZW0iLAorCQkgIGFkYXB0ZXIsIFNpemUsIEJ1ZmZlclR5cGUsIDApOworCS8vIEdyYWIgdGhlIGFkYXB0ZXIgbG9jayBhbmQgY2hlY2sgdGhlIHN0YXRlLgorCS8vIElmIHdlJ3JlIGluIGFueXRoaW5nIG90aGVyIHRoYW4gSU5JVElBTElaSU5HIG9yCisJLy8gUlVOTklORyBzdGF0ZSwgZmFpbC4gIFRoaXMgaXMgdG8gcHJldmVudAorCS8vIGFsbG9jYXRpb25zIGluIGFuIGltcHJvcGVyIGRyaXZlciBzdGF0ZQorCXNwaW5fbG9jaygmYWRhcHRlci0+QWRhcHRlckxvY2spOworCisJLy8gSW5jcmVtZW50IHRoZSBBbGxvY2F0aW9uc1BlbmRpbmcgY291bnQgd2hpbGUgaG9sZGluZworCS8vIHRoZSBsb2NrLiAgUGF1c2UgcHJvY2Vzc2luZyByZWxpZXMgb24gdGhpcworCSsrYWRhcHRlci0+QWxsb2NhdGlvbnNQZW5kaW5nOworCXNwaW5fdW5sb2NrKCZhZGFwdGVyLT5BZGFwdGVyTG9jayk7CisKKwkvLyBBdCBpbml0aWFsaXphdGlvbiB0aW1lIGFsbG9jYXRlIHJlc291cmNlcyBzeW5jaHJvbm91c2x5LgorCUJ1ZmZlciA9IHBjaV9hbGxvY19jb25zaXN0ZW50KGFkYXB0ZXItPnBjaWRldiwgU2l6ZSwgJnBCdWZmZXIpOworCWlmIChCdWZmZXIgPT0gTlVMTCkgeworCQlzcGluX2xvY2soJmFkYXB0ZXItPkFkYXB0ZXJMb2NrKTsKKwkJLy8gRGVjcmVtZW50IHRoZSBBbGxvY2F0aW9uc1BlbmRpbmcgY291bnQgd2hpbGUgaG9sZGluZworCQkvLyB0aGUgbG9jay4gIFBhdXNlIHByb2Nlc3NpbmcgcmVsaWVzIG9uIHRoaXMKKwkJLS1hZGFwdGVyLT5BbGxvY2F0aW9uc1BlbmRpbmc7CisJCXNwaW5fdW5sb2NrKCZhZGFwdGVyLT5BZGFwdGVyTG9jayk7CisJCVNYR19UUkFDRShUUkFDRV9TWEcsIFN4Z1RyYWNlQnVmZmVyLCBUUkFDRV9OT0lTWSwgIkFsY01lbUYxIiwKKwkJCSAgYWRhcHRlciwgU2l6ZSwgQnVmZmVyVHlwZSwgMCk7CisJCXJldHVybiAoU1RBVFVTX1JFU09VUkNFUyk7CisJfQorCXN4Z19hbGxvY2F0ZV9jb21wbGV0ZShhZGFwdGVyLCBCdWZmZXIsIHBCdWZmZXIsIFNpemUsIEJ1ZmZlclR5cGUpOworCXN0YXR1cyA9IFNUQVRVU19TVUNDRVNTOworCisJU1hHX1RSQUNFKFRSQUNFX1NYRywgU3hnVHJhY2VCdWZmZXIsIFRSQUNFX05PSVNZLCAiWEFsb2NNZW0iLAorCQkgIGFkYXB0ZXIsIFNpemUsIEJ1ZmZlclR5cGUsIHN0YXR1cyk7CisJcmV0dXJuIChzdGF0dXMpOworfQorCisvKgorICogc3hnX2FsbG9jYXRlX3JjdmJsb2NrX2NvbXBsZXRlIC0gQ29tcGxldGUgYSByZWNlaXZlIGRlc2NyaXB0b3IgYmxvY2sgYWxsb2NhdGlvbgorICoKKyAqIEFyZ3VtZW50cyAtCisgKglhZGFwdGVyCQkJCS0gQSBwb2ludGVyIHRvIG91ciBhZGFwdGVyIHN0cnVjdHVyZQorICoJUmN2QmxvY2sJCQktIHJlY2VpdmUgYmxvY2sgdmlydHVhbCBhZGRyZXNzCisgKglQaHlzaWNhbEFkZHJlc3MJCS0gUGh5c2ljYWwgYWRkcmVzcworICoJTGVuZ3RoCQkJCS0gTWVtb3J5IGxlbmd0aAorICoKKyAqIFJldHVybgorICoKKyAqLworc3RhdGljIHZvaWQgc3hnX2FsbG9jYXRlX3JjdmJsb2NrX2NvbXBsZXRlKHBfYWRhcHRlcl90IGFkYXB0ZXIsCisJCQkJCSAgIHZvaWQgKlJjdkJsb2NrLAorCQkJCQkgICBkbWFfYWRkcl90IFBoeXNpY2FsQWRkcmVzcywKKwkJCQkJICAgdTMyIExlbmd0aCkKK3sKKwl1MzIgaTsKKwl1MzIgQnVmZmVyU2l6ZSA9IGFkYXB0ZXItPlJlY2VpdmVCdWZmZXJTaXplOworCXU2NCBQYWRkcjsKKwlQU1hHX1JDVl9CTE9DS19IRFIgUmN2QmxvY2tIZHI7CisJdW5zaWduZWQgY2hhciAqUmN2RGF0YUJ1ZmZlcjsKKwlQU1hHX1JDVl9EQVRBX0JVRkZFUl9IRFIgUmN2RGF0YUJ1ZmZlckhkcjsKKwlQU1hHX1JDVl9ERVNDUklQVE9SX0JMT0NLIFJjdkRlc2NyaXB0b3JCbG9jazsKKwlQU1hHX1JDVl9ERVNDUklQVE9SX0JMT0NLX0hEUiBSY3ZEZXNjcmlwdG9yQmxvY2tIZHI7CisKKwlTWEdfVFJBQ0UoVFJBQ0VfU1hHLCBTeGdUcmFjZUJ1ZmZlciwgVFJBQ0VfTk9JU1ksICJBbFJjdkJsayIsCisJCSAgYWRhcHRlciwgUmN2QmxvY2ssIExlbmd0aCwgMCk7CisJaWYgKFJjdkJsb2NrID09IE5VTEwpIHsKKwkJZ290byBmYWlsOworCX0KKwltZW1zZXQoUmN2QmxvY2ssIDAsIExlbmd0aCk7CisJQVNTRVJUKChCdWZmZXJTaXplID09IFNYR19SQ1ZfREFUQV9CVUZGRVJfU0laRSkgfHwKKwkgICAgICAgKEJ1ZmZlclNpemUgPT0gU1hHX1JDVl9KVU1CT19CVUZGRVJfU0laRSkpOworCUFTU0VSVChMZW5ndGggPT0gU1hHX1JDVl9CTE9DS19TSVpFKEJ1ZmZlclNpemUpKTsKKwkvLyBGaXJzdCwgaW5pdGlhbGl6ZSB0aGUgY29udGFpbmVkIHBvb2wgb2YgcmVjZWl2ZSBkYXRhCisJLy8gYnVmZmVycy4gIFRoaXMgaW5pdGlhbGl6YXRpb24gcmVxdWlyZXMgTkJML05CL01ETCBhbGxvY2F0aW9ucywKKwkvLyBJZiBhbnkgb2YgdGhlbSBmYWlsLCBmcmVlIHRoZSBibG9jayBhbmQgcmV0dXJuIHdpdGhvdXQKKwkvLyBxdWV1ZWluZyB0aGUgc2hhcmVkIG1lbW9yeQorCVJjdkRhdGFCdWZmZXIgPSBSY3ZCbG9jazsKKyNpZiAwCisJZm9yIChpID0gMCwgUGFkZHIgPSAqUGh5c2ljYWxBZGRyZXNzOworCSAgICAgaSA8IFNYR19SQ1ZfREVTQ1JJUFRPUlNfUEVSX0JMT0NLOworCSAgICAgaSsrLCBQYWRkci5Mb3dQYXJ0ICs9IEJ1ZmZlclNpemUsIFJjdkRhdGFCdWZmZXIgKz0gQnVmZmVyU2l6ZSkKKyNlbmRpZgorCQlmb3IgKGkgPSAwLCBQYWRkciA9IFBoeXNpY2FsQWRkcmVzczsKKwkJICAgICBpIDwgU1hHX1JDVl9ERVNDUklQVE9SU19QRVJfQkxPQ0s7CisJCSAgICAgaSsrLCBQYWRkciArPSBCdWZmZXJTaXplLCBSY3ZEYXRhQnVmZmVyICs9IEJ1ZmZlclNpemUpIHsKKwkJCS8vCisJCQlSY3ZEYXRhQnVmZmVySGRyID0KKwkJCSAgICAoUFNYR19SQ1ZfREFUQV9CVUZGRVJfSERSKSAoUmN2RGF0YUJ1ZmZlciArCisJCQkJCQkJU1hHX1JDVl9EQVRBX0JVRkZFUl9IRFJfT0ZGU0VUCisJCQkJCQkJKEJ1ZmZlclNpemUpKTsKKwkJCVJjdkRhdGFCdWZmZXJIZHItPlZpcnR1YWxBZGRyZXNzID0gUmN2RGF0YUJ1ZmZlcjsKKwkJCVJjdkRhdGFCdWZmZXJIZHItPlBoeXNpY2FsQWRkcmVzcyA9IFBhZGRyOworCQkJUmN2RGF0YUJ1ZmZlckhkci0+U3RhdGUgPSBTWEdfQlVGRkVSX1VQU1RSRUFNOwkvLyBGb3IgRlJFRSBtYWNybyBhc3NlcnRpb24KKwkJCVJjdkRhdGFCdWZmZXJIZHItPlNpemUgPQorCQkJICAgIFNYR19SQ1ZfQlVGRkVSX0RBVEFfU0laRShCdWZmZXJTaXplKTsKKworCQkJU1hHX0FMTE9DQVRFX1JDVl9QQUNLRVQoYWRhcHRlciwgUmN2RGF0YUJ1ZmZlckhkcik7CisJCQlpZiAoUmN2RGF0YUJ1ZmZlckhkci0+U3hnRHVtYlJjdlBhY2tldCA9PSBOVUxMKQorCQkJCWdvdG8gZmFpbDsKKworCQl9CisKKwkvLyBQbGFjZSB0aGlzIGVudGlyZSBibG9jayBvZiBtZW1vcnkgb24gdGhlIEFsbFJjdkJsb2NrcyBxdWV1ZSBzbyBpdCBjYW4gYmUKKwkvLyBmcmVlIGxhdGVyCisJUmN2QmxvY2tIZHIgPQorCSAgICAoUFNYR19SQ1ZfQkxPQ0tfSERSKSAoKHVuc2lnbmVkIGNoYXIgKilSY3ZCbG9jayArCisJCQkJICBTWEdfUkNWX0JMT0NLX0hEUl9PRkZTRVQoQnVmZmVyU2l6ZSkpOworCVJjdkJsb2NrSGRyLT5WaXJ0dWFsQWRkcmVzcyA9IFJjdkJsb2NrOworCVJjdkJsb2NrSGRyLT5QaHlzaWNhbEFkZHJlc3MgPSBQaHlzaWNhbEFkZHJlc3M7CisJc3Bpbl9sb2NrKCZhZGFwdGVyLT5SY3ZRTG9jayk7CisJYWRhcHRlci0+QWxsUmN2QmxvY2tDb3VudCsrOworCUluc2VydFRhaWxMaXN0KCZhZGFwdGVyLT5BbGxSY3ZCbG9ja3MsICZSY3ZCbG9ja0hkci0+QWxsTGlzdCk7CisJc3Bpbl91bmxvY2soJmFkYXB0ZXItPlJjdlFMb2NrKTsKKworCS8vIE5vdyBmcmVlIHRoZSBjb250YWluZWQgcmVjZWl2ZSBkYXRhIGJ1ZmZlcnMgdGhhdCB3ZSBpbml0aWFsaXplZCBhYm92ZQorCVJjdkRhdGFCdWZmZXIgPSBSY3ZCbG9jazsKKwlmb3IgKGkgPSAwLCBQYWRkciA9IFBoeXNpY2FsQWRkcmVzczsKKwkgICAgIGkgPCBTWEdfUkNWX0RFU0NSSVBUT1JTX1BFUl9CTE9DSzsKKwkgICAgIGkrKywgUGFkZHIgKz0gQnVmZmVyU2l6ZSwgUmN2RGF0YUJ1ZmZlciArPSBCdWZmZXJTaXplKSB7CisJCVJjdkRhdGFCdWZmZXJIZHIgPSAoUFNYR19SQ1ZfREFUQV9CVUZGRVJfSERSKSAoUmN2RGF0YUJ1ZmZlciArCisJCQkJCQkJICAgICAgIFNYR19SQ1ZfREFUQV9CVUZGRVJfSERSX09GRlNFVAorCQkJCQkJCSAgICAgICAoQnVmZmVyU2l6ZSkpOworCQlzcGluX2xvY2soJmFkYXB0ZXItPlJjdlFMb2NrKTsKKwkJU1hHX0ZSRUVfUkNWX0RBVEFfQlVGRkVSKGFkYXB0ZXIsIFJjdkRhdGFCdWZmZXJIZHIpOworCQlzcGluX3VubG9jaygmYWRhcHRlci0+UmN2UUxvY2spOworCX0KKworCS8vIExvY2F0ZSB0aGUgZGVzY3JpcHRvciBibG9jayBhbmQgcHV0IGl0IG9uIGEgc2VwYXJhdGUgZnJlZSBxdWV1ZQorCVJjdkRlc2NyaXB0b3JCbG9jayA9CisJICAgIChQU1hHX1JDVl9ERVNDUklQVE9SX0JMT0NLKSAoKHVuc2lnbmVkIGNoYXIgKilSY3ZCbG9jayArCisJCQkJCSBTWEdfUkNWX0RFU0NSSVBUT1JfQkxPQ0tfT0ZGU0VUCisJCQkJCSAoQnVmZmVyU2l6ZSkpOworCVJjdkRlc2NyaXB0b3JCbG9ja0hkciA9CisJICAgIChQU1hHX1JDVl9ERVNDUklQVE9SX0JMT0NLX0hEUikgKCh1bnNpZ25lZCBjaGFyICopUmN2QmxvY2sgKworCQkJCQkgICAgIFNYR19SQ1ZfREVTQ1JJUFRPUl9CTE9DS19IRFJfT0ZGU0VUCisJCQkJCSAgICAgKEJ1ZmZlclNpemUpKTsKKwlSY3ZEZXNjcmlwdG9yQmxvY2tIZHItPlZpcnR1YWxBZGRyZXNzID0gUmN2RGVzY3JpcHRvckJsb2NrOworCVJjdkRlc2NyaXB0b3JCbG9ja0hkci0+UGh5c2ljYWxBZGRyZXNzID0gUGFkZHI7CisJc3Bpbl9sb2NrKCZhZGFwdGVyLT5SY3ZRTG9jayk7CisJU1hHX0ZSRUVfUkNWX0RFU0NSSVBUT1JfQkxPQ0soYWRhcHRlciwgUmN2RGVzY3JpcHRvckJsb2NrSGRyKTsKKwlzcGluX3VubG9jaygmYWRhcHRlci0+UmN2UUxvY2spOworCVNYR19UUkFDRShUUkFDRV9TWEcsIFN4Z1RyYWNlQnVmZmVyLCBUUkFDRV9OT0lTWSwgIlhBbFJCbGsiLAorCQkgIGFkYXB0ZXIsIFJjdkJsb2NrLCBMZW5ndGgsIDApOworCXJldHVybjsKKyAgICAgIGZhaWw6CisJLy8gRnJlZSBhbnkgYWxsb2NhdGVkIHJlc291cmNlcworCWlmIChSY3ZCbG9jaykgeworCQlSY3ZEYXRhQnVmZmVyID0gUmN2QmxvY2s7CisJCWZvciAoaSA9IDA7IGkgPCBTWEdfUkNWX0RFU0NSSVBUT1JTX1BFUl9CTE9DSzsKKwkJICAgICBpKyssIFJjdkRhdGFCdWZmZXIgKz0gQnVmZmVyU2l6ZSkgeworCQkJUmN2RGF0YUJ1ZmZlckhkciA9CisJCQkgICAgKFBTWEdfUkNWX0RBVEFfQlVGRkVSX0hEUikgKFJjdkRhdGFCdWZmZXIgKworCQkJCQkJCVNYR19SQ1ZfREFUQV9CVUZGRVJfSERSX09GRlNFVAorCQkJCQkJCShCdWZmZXJTaXplKSk7CisJCQlTWEdfRlJFRV9SQ1ZfUEFDS0VUKFJjdkRhdGFCdWZmZXJIZHIpOworCQl9CisJCXBjaV9mcmVlX2NvbnNpc3RlbnQoYWRhcHRlci0+cGNpZGV2LAorCQkJCSAgICBMZW5ndGgsIFJjdkJsb2NrLCBQaHlzaWNhbEFkZHJlc3MpOworCX0KKwlEQkdfRVJST1IoIiVzOiBPVVQgT0YgUkVTT1VSQ0VTXG4iLCBfX0ZVTkNUSU9OX18pOworCVNYR19UUkFDRShUUkFDRV9TWEcsIFN4Z1RyYWNlQnVmZmVyLCBUUkFDRV9JTVBPUlRBTlQsICJSY3ZBRmFpbCIsCisJCSAgYWRhcHRlciwgYWRhcHRlci0+RnJlZVJjdkJ1ZmZlckNvdW50LAorCQkgIGFkYXB0ZXItPkZyZWVSY3ZCbG9ja0NvdW50LCBhZGFwdGVyLT5BbGxSY3ZCbG9ja0NvdW50KTsKKwlhZGFwdGVyLT5TdGF0cy5Ob01lbSsrOworfQorCisvKgorICogc3hnX2FsbG9jYXRlX3NnbF9idWZmZXJfY29tcGxldGUgLSBDb21wbGV0ZSBhIFNHTCBidWZmZXIgYWxsb2NhdGlvbgorICoKKyAqIEFyZ3VtZW50cyAtCisgKglhZGFwdGVyCQkJCS0gQSBwb2ludGVyIHRvIG91ciBhZGFwdGVyIHN0cnVjdHVyZQorICoJU3hnU2dsCQkJCS0gU1hHX1NDQVRURVJfR0FUSEVSIGJ1ZmZlcgorICoJUGh5c2ljYWxBZGRyZXNzCQktIFBoeXNpY2FsIGFkZHJlc3MKKyAqCUxlbmd0aAkJCQktIE1lbW9yeSBsZW5ndGgKKyAqCisgKiBSZXR1cm4KKyAqCisgKi8KK3N0YXRpYyB2b2lkIHN4Z19hbGxvY2F0ZV9zZ2xfYnVmZmVyX2NvbXBsZXRlKHBfYWRhcHRlcl90IGFkYXB0ZXIsCisJCQkJCSAgICAgUFNYR19TQ0FUVEVSX0dBVEhFUiBTeGdTZ2wsCisJCQkJCSAgICAgZG1hX2FkZHJfdCBQaHlzaWNhbEFkZHJlc3MsCisJCQkJCSAgICAgdTMyIExlbmd0aCkKK3sKKwlTWEdfVFJBQ0UoVFJBQ0VfU1hHLCBTeGdUcmFjZUJ1ZmZlciwgVFJBQ0VfTk9JU1ksICJBbFNnbENtcCIsCisJCSAgYWRhcHRlciwgU3hnU2dsLCBMZW5ndGgsIDApOworCXNwaW5fbG9jaygmYWRhcHRlci0+U2dsUUxvY2spOworCWFkYXB0ZXItPkFsbFNnbEJ1ZmZlckNvdW50Kys7CisJbWVtc2V0KFN4Z1NnbCwgMCwgc2l6ZW9mKFNYR19TQ0FUVEVSX0dBVEhFUikpOworCVN4Z1NnbC0+UGh5c2ljYWxBZGRyZXNzID0gUGh5c2ljYWxBZGRyZXNzOwkvKiAqUGh5c2ljYWxBZGRyZXNzOyAqLworCVN4Z1NnbC0+YWRhcHRlciA9IGFkYXB0ZXI7CS8vIEluaXRpYWxpemUgYmFja3BvaW50ZXIgb25jZQorCUluc2VydFRhaWxMaXN0KCZhZGFwdGVyLT5BbGxTZ2xCdWZmZXJzLCAmU3hnU2dsLT5BbGxMaXN0KTsKKwlzcGluX3VubG9jaygmYWRhcHRlci0+U2dsUUxvY2spOworCVN4Z1NnbC0+U3RhdGUgPSBTWEdfQlVGRkVSX0JVU1k7CisJU1hHX0ZSRUVfU0dMX0JVRkZFUihhZGFwdGVyLCBTeGdTZ2wsIE5VTEwpOworCVNYR19UUkFDRShUUkFDRV9TWEcsIFN4Z1RyYWNlQnVmZmVyLCBUUkFDRV9OT0lTWSwgIlhBbFNnbCIsCisJCSAgYWRhcHRlciwgU3hnU2dsLCBMZW5ndGgsIDApOworfQorCitzdGF0aWMgdW5zaWduZWQgY2hhciB0ZW1wX21hY19hZGRyZXNzWzZdID0KKyAgICB7IDB4MDAsIDB4YWIsIDB4Y2QsIDB4ZWYsIDB4MTIsIDB4NjkgfTsKKworc3RhdGljIHZvaWQgc3hnX2FkYXB0ZXJfc2V0X2h3YWRkcihwX2FkYXB0ZXJfdCBhZGFwdGVyKQoreworLy8gIERCR19FUlJPUiAoIiVzIEVOVEVSIGNhcmQtPmNvbmZpZ19zZXRbJXhdIHBvcnRbJWRdIHBoeXNwb3J0WyVkXSBmdW5jdCNbJWRdXG4iLCBfX0ZVTkNUSU9OX18sCisvLyAgICAgICAgICAgICBjYXJkLT5jb25maWdfc2V0LCBhZGFwdGVyLT5wb3J0LCBhZGFwdGVyLT5waHlzcG9ydCwgYWRhcHRlci0+ZnVuY3Rpb25udW1iZXIpOworLy8KKy8vICBzeGdfZGJnX21hY2FkZHJzKGFkYXB0ZXIpOworCisJbWVtY3B5KGFkYXB0ZXItPm1hY2FkZHIsIHRlbXBfbWFjX2FkZHJlc3MsIHNpemVvZihTWEdfQ09ORklHX01BQykpOworLy8gICAgICBEQkdfRVJST1IgKCIlcyBBRlRFUiBjb3B5aW5nIGZyb20gY29uZmlnLm1hY2luZm8gaW50byBjdXJybWFjYWRkclxuIiwgX19GVU5DVElPTl9fKTsKKy8vICAgICAgc3hnX2RiZ19tYWNhZGRycyhhZGFwdGVyKTsKKwlpZiAoIShhZGFwdGVyLT5jdXJybWFjYWRkclswXSB8fAorCSAgICAgIGFkYXB0ZXItPmN1cnJtYWNhZGRyWzFdIHx8CisJICAgICAgYWRhcHRlci0+Y3Vycm1hY2FkZHJbMl0gfHwKKwkgICAgICBhZGFwdGVyLT5jdXJybWFjYWRkclszXSB8fAorCSAgICAgIGFkYXB0ZXItPmN1cnJtYWNhZGRyWzRdIHx8IGFkYXB0ZXItPmN1cnJtYWNhZGRyWzVdKSkgeworCQltZW1jcHkoYWRhcHRlci0+Y3Vycm1hY2FkZHIsIGFkYXB0ZXItPm1hY2FkZHIsIDYpOworCX0KKwlpZiAoYWRhcHRlci0+bmV0ZGV2KSB7CisJCW1lbWNweShhZGFwdGVyLT5uZXRkZXYtPmRldl9hZGRyLCBhZGFwdGVyLT5jdXJybWFjYWRkciwgNik7CisJfQorLy8gIERCR19FUlJPUiAoIiVzIEVYSVQgcG9ydCAlZFxuIiwgX19GVU5DVElPTl9fLCBhZGFwdGVyLT5wb3J0KTsKKwlzeGdfZGJnX21hY2FkZHJzKGFkYXB0ZXIpOworCit9CisKK3N0YXRpYyBpbnQgc3hnX21hY19zZXRfYWRkcmVzcyhwX25ldF9kZXZpY2UgZGV2LCB2b2lkICpwdHIpCit7CisjaWYgWFhYVE9ETworCXBfYWRhcHRlcl90IGFkYXB0ZXIgPSAocF9hZGFwdGVyX3QpIG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IHNvY2thZGRyICphZGRyID0gcHRyOworCisJREJHX0VSUk9SKCIlcyBFTlRFUiAoJXMpXG4iLCBfX0ZVTkNUSU9OX18sIGFkYXB0ZXItPm5ldGRldi0+bmFtZSk7CisKKwlpZiAobmV0aWZfcnVubmluZyhkZXYpKSB7CisJCXJldHVybiAtRUJVU1k7CisJfQorCWlmICghYWRhcHRlcikgeworCQlyZXR1cm4gLUVCVVNZOworCX0KKwlEQkdfRVJST1IoInN4ZzogJXMgKCVzKSBjdXJyICUyLjJYOiUyLjJYOiUyLjJYOiUyLjJYOiUyLjJYOiUyLjJYXG4iLAorCQkgIF9fRlVOQ1RJT05fXywgYWRhcHRlci0+bmV0ZGV2LT5uYW1lLCBhZGFwdGVyLT5jdXJybWFjYWRkclswXSwKKwkJICBhZGFwdGVyLT5jdXJybWFjYWRkclsxXSwgYWRhcHRlci0+Y3Vycm1hY2FkZHJbMl0sCisJCSAgYWRhcHRlci0+Y3Vycm1hY2FkZHJbM10sIGFkYXB0ZXItPmN1cnJtYWNhZGRyWzRdLAorCQkgIGFkYXB0ZXItPmN1cnJtYWNhZGRyWzVdKTsKKwltZW1jcHkoZGV2LT5kZXZfYWRkciwgYWRkci0+c2FfZGF0YSwgZGV2LT5hZGRyX2xlbik7CisJbWVtY3B5KGFkYXB0ZXItPmN1cnJtYWNhZGRyLCBhZGRyLT5zYV9kYXRhLCBkZXYtPmFkZHJfbGVuKTsKKwlEQkdfRVJST1IoInN4ZzogJXMgKCVzKSBuZXcgJTIuMlg6JTIuMlg6JTIuMlg6JTIuMlg6JTIuMlg6JTIuMlhcbiIsCisJCSAgX19GVU5DVElPTl9fLCBhZGFwdGVyLT5uZXRkZXYtPm5hbWUsIGFkYXB0ZXItPmN1cnJtYWNhZGRyWzBdLAorCQkgIGFkYXB0ZXItPmN1cnJtYWNhZGRyWzFdLCBhZGFwdGVyLT5jdXJybWFjYWRkclsyXSwKKwkJICBhZGFwdGVyLT5jdXJybWFjYWRkclszXSwgYWRhcHRlci0+Y3Vycm1hY2FkZHJbNF0sCisJCSAgYWRhcHRlci0+Y3Vycm1hY2FkZHJbNV0pOworCisJc3hnX2NvbmZpZ19zZXQoYWRhcHRlciwgVFJVRSk7CisjZW5kaWYKKwlyZXR1cm4gMDsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKiogIFNYRyBEUklWRVIgRlVOQ1RJT05TICAoYmVsb3cpICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorICogc3hnX2luaXRpYWxpemVfYWRhcHRlciAtIEluaXRpYWxpemUgYWRhcHRlcgorICoKKyAqIEFyZ3VtZW50cyAtCisgKglhZGFwdGVyCQktIEEgcG9pbnRlciB0byBvdXIgYWRhcHRlciBzdHJ1Y3R1cmUKKyAqCisgKiBSZXR1cm4KKyAqCWludAorICovCitzdGF0aWMgaW50IHN4Z19pbml0aWFsaXplX2FkYXB0ZXIocF9hZGFwdGVyX3QgYWRhcHRlcikKK3sKKwl1MzIgUnNzSWRzLCBJc3JDb3VudDsKKwl1MzIgaTsKKwlpbnQgc3RhdHVzOworCisJU1hHX1RSQUNFKFRSQUNFX1NYRywgU3hnVHJhY2VCdWZmZXIsIFRSQUNFX05PSVNZLCAiSW5pdEFkcHQiLAorCQkgIGFkYXB0ZXIsIDAsIDAsIDApOworCisJUnNzSWRzID0gMTsJCS8vICBYWFhUT0RPICBTWEdfUlNTX0NQVV9DT1VOVChhZGFwdGVyKTsKKwlJc3JDb3VudCA9IGFkYXB0ZXItPk1zaUVuYWJsZWQgPyBSc3NJZHMgOiAxOworCisJLy8gU2FuaXR5IGNoZWNrIFNYR19VQ09ERV9SRUdTIHN0cnVjdHVyZSBkZWZpbml0aW9uIHRvCisJLy8gbWFrZSBzdXJlIHRoZSBsZW5ndGggaXMgY29ycmVjdAorCUFTU0VSVChzaXplb2YoU1hHX1VDT0RFX1JFR1MpID09IFNYR19SRUdJU1RFUl9TSVpFX1BFUl9DUFUpOworCisJLy8gRGlzYWJsZSBpbnRlcnJ1cHRzCisJU1hHX0RJU0FCTEVfQUxMX0lOVEVSUlVQVFMoYWRhcHRlcik7CisKKwkvLyBTZXQgTVRVCisJQVNTRVJUKChhZGFwdGVyLT5GcmFtZVNpemUgPT0gRVRIRVJNQVhGUkFNRSkgfHwKKwkgICAgICAgKGFkYXB0ZXItPkZyYW1lU2l6ZSA9PSBKVU1CT01BWEZSQU1FKSk7CisJV1JJVEVfUkVHKGFkYXB0ZXItPlVjb2RlUmVnc1swXS5MaW5rTXR1LCBhZGFwdGVyLT5GcmFtZVNpemUsIFRSVUUpOworCisJLy8gU2V0IGV2ZW50IHJpbmcgYmFzZSBhZGRyZXNzIGFuZCBzaXplCisJV1JJVEVfUkVHNjQoYWRhcHRlciwKKwkJICAgIGFkYXB0ZXItPlVjb2RlUmVnc1swXS5FdmVudEJhc2UsIGFkYXB0ZXItPlBFdmVudFJpbmdzLCAwKTsKKwlXUklURV9SRUcoYWRhcHRlci0+VWNvZGVSZWdzWzBdLkV2ZW50U2l6ZSwgRVZFTlRfUklOR19TSVpFLCBUUlVFKTsKKworCS8vIFBlci1JU1IgaW5pdGlhbGl6YXRpb24KKwlmb3IgKGkgPSAwOyBpIDwgSXNyQ291bnQ7IGkrKykgeworCQl1NjQgQWRkcjsKKwkJLy8gU2V0IGludGVycnVwdCBzdGF0dXMgcG9pbnRlcgorCQlBZGRyID0gYWRhcHRlci0+UElzciArIChpICogc2l6ZW9mKHUzMikpOworCQlXUklURV9SRUc2NChhZGFwdGVyLCBhZGFwdGVyLT5VY29kZVJlZ3NbaV0uSXNwLCBBZGRyLCBpKTsKKwl9CisKKwkvLyBYTVQgcmluZyB6ZXJvIGluZGV4CisJV1JJVEVfUkVHNjQoYWRhcHRlciwKKwkJICAgIGFkYXB0ZXItPlVjb2RlUmVnc1swXS5TUFNlbmRJbmRleCwKKwkJICAgIGFkYXB0ZXItPlBYbXRSaW5nWmVyb0luZGV4LCAwKTsKKworCS8vIFBlci1SU1MgaW5pdGlhbGl6YXRpb24KKwlmb3IgKGkgPSAwOyBpIDwgUnNzSWRzOyBpKyspIHsKKwkJLy8gUmVsZWFzZSBhbGwgZXZlbnQgcmluZyBlbnRyaWVzIHRvIHRoZSBNaWNyb2NvZGUKKwkJV1JJVEVfUkVHKGFkYXB0ZXItPlVjb2RlUmVnc1tpXS5FdmVudFJlbGVhc2UsIEVWRU5UX1JJTkdfU0laRSwKKwkJCSAgVFJVRSk7CisJfQorCisJLy8gVHJhbnNtaXQgcmluZyBiYXNlIGFuZCBzaXplCisJV1JJVEVfUkVHNjQoYWRhcHRlciwKKwkJICAgIGFkYXB0ZXItPlVjb2RlUmVnc1swXS5YbXRCYXNlLCBhZGFwdGVyLT5QWG10UmluZ3MsIDApOworCVdSSVRFX1JFRyhhZGFwdGVyLT5VY29kZVJlZ3NbMF0uWG10U2l6ZSwgU1hHX1hNVF9SSU5HX1NJWkUsIFRSVUUpOworCisJLy8gUmVjZWl2ZSByaW5nIGJhc2UgYW5kIHNpemUKKwlXUklURV9SRUc2NChhZGFwdGVyLAorCQkgICAgYWRhcHRlci0+VWNvZGVSZWdzWzBdLlJjdkJhc2UsIGFkYXB0ZXItPlBSY3ZSaW5ncywgMCk7CisJV1JJVEVfUkVHKGFkYXB0ZXItPlVjb2RlUmVnc1swXS5SY3ZTaXplLCBTWEdfUkNWX1JJTkdfU0laRSwgVFJVRSk7CisKKwkvLyBQb3B1bGF0ZSB0aGUgY2FyZCB3aXRoIHJlY2VpdmUgYnVmZmVycworCXN4Z19zdG9ja19yY3ZfYnVmZmVycyhhZGFwdGVyKTsKKworCS8vIEluaXRpYWxpemUgY2hlY2tzdW0gb2ZmbG9hZCBjYXBhYmlsaXRpZXMuICBBdCB0aGUgbW9tZW50CisJLy8gd2UgYWx3YXlzIGVuYWJsZSBJUCBhbmQgVENQIHJlY2VpdmUgY2hlY2tzdW1zIG9uIHRoZSBjYXJkLgorCS8vIERlcGVuZGluZyBvbiB0aGUgY2hlY2tzdW0gY29uZmlndXJhdGlvbiBzcGVjaWZpZWQgYnkgdGhlCisJLy8gdXNlciwgd2UgY2FuIGNob29zZSB0byByZXBvcnQgb3IgaWdub3JlIHRoZSBjaGVja3N1bQorCS8vIGluZm9ybWF0aW9uIHByb3ZpZGVkIGJ5IHRoZSBjYXJkLgorCVdSSVRFX1JFRyhhZGFwdGVyLT5VY29kZVJlZ3NbMF0uUmVjZWl2ZUNoZWNrc3VtLAorCQkgIFNYR19SQ1ZfVENQX0NTVU1fRU5BQkxFRCB8IFNYR19SQ1ZfSVBfQ1NVTV9FTkFCTEVELCBUUlVFKTsKKworCS8vIEluaXRpYWxpemUgdGhlIE1BQywgWEFVSQorCURCR19FUlJPUigic3hnOiAlcyBFTlRFUiBzeGdfaW5pdGlhbGl6ZV9saW5rXG4iLCBfX0ZVTkNUSU9OX18pOworCXN0YXR1cyA9IHN4Z19pbml0aWFsaXplX2xpbmsoYWRhcHRlcik7CisJREJHX0VSUk9SKCJzeGc6ICVzIEVYSVQgc3hnX2luaXRpYWxpemVfbGluayBzdGF0dXNbJXhdXG4iLCBfX0ZVTkNUSU9OX18sCisJCSAgc3RhdHVzKTsKKwlpZiAoc3RhdHVzICE9IFNUQVRVU19TVUNDRVNTKSB7CisJCXJldHVybiAoc3RhdHVzKTsKKwl9CisJLy8gSW5pdGlhbGl6ZSBEZWFkIHRvIEZBTFNFLgorCS8vIFNsaWNDaGVja0Zvckhhbmcgb3IgU2xpY0R1bXBUaHJlYWQgd2lsbCB0YWtlIGl0IGZyb20gaGVyZS4KKwlhZGFwdGVyLT5EZWFkID0gRkFMU0U7CisJYWRhcHRlci0+UGluZ091dHN0YW5kaW5nID0gRkFMU0U7CisKKwlTWEdfVFJBQ0UoVFJBQ0VfU1hHLCBTeGdUcmFjZUJ1ZmZlciwgVFJBQ0VfTk9JU1ksICJYSW5pdCIsCisJCSAgYWRhcHRlciwgMCwgMCwgMCk7CisJcmV0dXJuIChTVEFUVVNfU1VDQ0VTUyk7Cit9CisKKy8qCisgKiBzeGdfZmlsbF9kZXNjcmlwdG9yX2Jsb2NrIC0gUG9wdWxhdGUgYSBkZXNjcmlwdG9yIGJsb2NrIGFuZCBnaXZlIGl0IHRvCisgKiB0aGUgY2FyZC4gIFRoZSBjYWxsZXIgc2hvdWxkIGhvbGQgdGhlIFJjdlFMb2NrCisgKgorICogQXJndW1lbnRzIC0KKyAqCWFkYXB0ZXIJCS0gQSBwb2ludGVyIHRvIG91ciBhZGFwdGVyIHN0cnVjdHVyZQorICogIFJjdkRlc2NyaXB0b3JCbG9ja0hkcgktIERlc2NyaXB0b3IgYmxvY2sgdG8gZmlsbAorICoKKyAqIFJldHVybgorICoJc3RhdHVzCisgKi8KK3N0YXRpYyBpbnQgc3hnX2ZpbGxfZGVzY3JpcHRvcl9ibG9jayhwX2FkYXB0ZXJfdCBhZGFwdGVyLAorCQkJCSAgICAgUFNYR19SQ1ZfREVTQ1JJUFRPUl9CTE9DS19IRFIKKwkJCQkgICAgIFJjdkRlc2NyaXB0b3JCbG9ja0hkcikKK3sKKwl1MzIgaTsKKwlQU1hHX1JJTkdfSU5GTyBSY3ZSaW5nSW5mbyA9ICZhZGFwdGVyLT5SY3ZSaW5nWmVyb0luZm87CisJUFNYR19SQ1ZfREFUQV9CVUZGRVJfSERSIFJjdkRhdGFCdWZmZXJIZHI7CisJUFNYR19SQ1ZfREVTQ1JJUFRPUl9CTE9DSyBSY3ZEZXNjcmlwdG9yQmxvY2s7CisJUFNYR19DTUQgUmluZ0Rlc2NyaXB0b3JDbWQ7CisJUFNYR19SQ1ZfUklORyBSaW5nWmVybyA9ICZhZGFwdGVyLT5SY3ZSaW5nc1swXTsKKworCVNYR19UUkFDRShUUkFDRV9TWEcsIFN4Z1RyYWNlQnVmZmVyLCBUUkFDRV9OT0lTWSwgIkZpbEJsayIsCisJCSAgYWRhcHRlciwgYWRhcHRlci0+UmN2QnVmZmVyc09uQ2FyZCwKKwkJICBhZGFwdGVyLT5GcmVlUmN2QnVmZmVyQ291bnQsIGFkYXB0ZXItPkFsbFJjdkJsb2NrQ291bnQpOworCisJQVNTRVJUKFJjdkRlc2NyaXB0b3JCbG9ja0hkcik7CisKKwkvLyBJZiB3ZSBkb24ndCBoYXZlIHRoZSByZXNvdXJjZXMgdG8gZmlsbCB0aGUgZGVzY3JpcHRvciBibG9jaywKKwkvLyByZXR1cm4gZmFpbHVyZQorCWlmICgoYWRhcHRlci0+RnJlZVJjdkJ1ZmZlckNvdW50IDwgU1hHX1JDVl9ERVNDUklQVE9SU19QRVJfQkxPQ0spIHx8CisJICAgIFNYR19SSU5HX0ZVTEwoUmN2UmluZ0luZm8pKSB7CisJCWFkYXB0ZXItPlN0YXRzLk5vTWVtKys7CisJCXJldHVybiAoU1RBVFVTX0ZBSUxVUkUpOworCX0KKwkvLyBHZXQgYSByaW5nIGRlc2NyaXB0b3IgY29tbWFuZAorCVNYR19HRVRfQ01EKFJpbmdaZXJvLAorCQkgICAgUmN2UmluZ0luZm8sIFJpbmdEZXNjcmlwdG9yQ21kLCBSY3ZEZXNjcmlwdG9yQmxvY2tIZHIpOworCUFTU0VSVChSaW5nRGVzY3JpcHRvckNtZCk7CisJUmN2RGVzY3JpcHRvckJsb2NrSGRyLT5TdGF0ZSA9IFNYR19CVUZGRVJfT05DQVJEOworCVJjdkRlc2NyaXB0b3JCbG9jayA9CisJICAgIChQU1hHX1JDVl9ERVNDUklQVE9SX0JMT0NLKSBSY3ZEZXNjcmlwdG9yQmxvY2tIZHItPlZpcnR1YWxBZGRyZXNzOworCisJLy8gRmlsbCBpbiB0aGUgZGVzY3JpcHRvciBibG9jaworCWZvciAoaSA9IDA7IGkgPCBTWEdfUkNWX0RFU0NSSVBUT1JTX1BFUl9CTE9DSzsgaSsrKSB7CisJCVNYR19HRVRfUkNWX0RBVEFfQlVGRkVSKGFkYXB0ZXIsIFJjdkRhdGFCdWZmZXJIZHIpOworCQlBU1NFUlQoUmN2RGF0YUJ1ZmZlckhkcik7CisJCVNYR19SRUlOSUFUSUFMSVpFX1BBQ0tFVChSY3ZEYXRhQnVmZmVySGRyLT5TeGdEdW1iUmN2UGFja2V0KTsKKwkJUmN2RGF0YUJ1ZmZlckhkci0+U3RhdGUgPSBTWEdfQlVGRkVSX09OQ0FSRDsKKwkJUmN2RGVzY3JpcHRvckJsb2NrLT5EZXNjcmlwdG9yc1tpXS5WaXJ0dWFsQWRkcmVzcyA9CisJCSAgICAodm9pZCAqKVJjdkRhdGFCdWZmZXJIZHI7CisJCVJjdkRlc2NyaXB0b3JCbG9jay0+RGVzY3JpcHRvcnNbaV0uUGh5c2ljYWxBZGRyZXNzID0KKwkJICAgIFJjdkRhdGFCdWZmZXJIZHItPlBoeXNpY2FsQWRkcmVzczsKKwl9CisJLy8gQWRkIHRoZSBkZXNjcmlwdG9yIGJsb2NrIHRvIHJlY2VpdmUgZGVzY3JpcHRvciByaW5nIDAKKwlSaW5nRGVzY3JpcHRvckNtZC0+U2dsID0gUmN2RGVzY3JpcHRvckJsb2NrSGRyLT5QaHlzaWNhbEFkZHJlc3M7CisKKwkvLyBSY3ZCdWZmZXJzT25DYXJkIGlzIG5vdCBwcm90ZWN0ZWQgdmlhIHRoZSByZWNlaXZlIGxvY2sgKHNlZQorCS8vIHN4Z19wcm9jZXNzX2V2ZW50X3F1ZXVlKSBXZSBkb24ndCB3YW50IHRvIGdyYXAgYSBsb2NrIGV2ZXJ5IHRpbWUgYQorCS8vIGJ1ZmZlciBpcyByZXR1cm5lZCB0byB1cywgc28gd2UgdXNlIGF0b21pYyBpbnRlcmxvY2tlZCBmdW5jdGlvbnMKKwkvLyBpbnN0ZWFkLgorCWFkYXB0ZXItPlJjdkJ1ZmZlcnNPbkNhcmQgKz0gU1hHX1JDVl9ERVNDUklQVE9SU19QRVJfQkxPQ0s7CisKKwlTWEdfVFJBQ0UoVFJBQ0VfU1hHLCBTeGdUcmFjZUJ1ZmZlciwgVFJBQ0VfTk9JU1ksICJEc2NCbGsiLAorCQkgIFJjdkRlc2NyaXB0b3JCbG9ja0hkciwKKwkJICBSaW5nRGVzY3JpcHRvckNtZCwgUmN2UmluZ0luZm8tPkhlYWQsIFJjdlJpbmdJbmZvLT5UYWlsKTsKKworCVdSSVRFX1JFRyhhZGFwdGVyLT5VY29kZVJlZ3NbMF0uUmN2Q21kLCAxLCB0cnVlKTsKKwlTWEdfVFJBQ0UoVFJBQ0VfU1hHLCBTeGdUcmFjZUJ1ZmZlciwgVFJBQ0VfTk9JU1ksICJYRmlsQmxrIiwKKwkJICBhZGFwdGVyLCBhZGFwdGVyLT5SY3ZCdWZmZXJzT25DYXJkLAorCQkgIGFkYXB0ZXItPkZyZWVSY3ZCdWZmZXJDb3VudCwgYWRhcHRlci0+QWxsUmN2QmxvY2tDb3VudCk7CisJcmV0dXJuIChTVEFUVVNfU1VDQ0VTUyk7Cit9CisKKy8qCisgKiBzeGdfc3RvY2tfcmN2X2J1ZmZlcnMgLSBTdG9jayB0aGUgY2FyZCB3aXRoIHJlY2VpdmUgYnVmZmVycworICoKKyAqIEFyZ3VtZW50cyAtCisgKglhZGFwdGVyCQktIEEgcG9pbnRlciB0byBvdXIgYWRhcHRlciBzdHJ1Y3R1cmUKKyAqCisgKiBSZXR1cm4KKyAqCU5vbmUKKyAqLworc3RhdGljIHZvaWQgc3hnX3N0b2NrX3Jjdl9idWZmZXJzKHBfYWRhcHRlcl90IGFkYXB0ZXIpCit7CisJUFNYR19SQ1ZfREVTQ1JJUFRPUl9CTE9DS19IRFIgUmN2RGVzY3JpcHRvckJsb2NrSGRyOworCisJU1hHX1RSQUNFKFRSQUNFX1NYRywgU3hnVHJhY2VCdWZmZXIsIFRSQUNFX05PSVNZLCAiU3RvY2tCdWYiLAorCQkgIGFkYXB0ZXIsIGFkYXB0ZXItPlJjdkJ1ZmZlcnNPbkNhcmQsCisJCSAgYWRhcHRlci0+RnJlZVJjdkJ1ZmZlckNvdW50LCBhZGFwdGVyLT5BbGxSY3ZCbG9ja0NvdW50KTsKKwkvLyBGaXJzdCwgc2VlIGlmIHdlJ3ZlIGdvdCBsZXNzIHRoYW4gb3VyIG1pbmltdW0gdGhyZXNob2xkIG9mCisJLy8gcmVjZWl2ZSBidWZmZXJzLCB0aGVyZSBpc24ndCBhbiBhbGxvY2F0aW9uIGluIHByb2dyZXNzLCBhbmQKKwkvLyB3ZSBoYXZlbid0IGV4Y2VlZGVkIG91ciBtYXhpbXVtLi4gZ2V0IGFub3RoZXIgYmxvY2sgb2YgYnVmZmVycworCS8vIE5vbmUgb2YgdGhpcyBuZWVkcyB0byBiZSBTTVAgc2FmZS4gIEl0J3Mgcm91bmQgbnVtYmVycy4KKwlpZiAoKGFkYXB0ZXItPkZyZWVSY3ZCdWZmZXJDb3VudCA8IFNYR19NSU5fUkNWX0RBVEFfQlVGRkVSUykgJiYKKwkgICAgKGFkYXB0ZXItPkFsbFJjdkJsb2NrQ291bnQgPCBTWEdfTUFYX1JDVl9CTE9DS1MpICYmCisJICAgIChhZGFwdGVyLT5BbGxvY2F0aW9uc1BlbmRpbmcgPT0gMCkpIHsKKwkJc3hnX2FsbG9jYXRlX2J1ZmZlcl9tZW1vcnkoYWRhcHRlciwKKwkJCQkJICAgU1hHX1JDVl9CTE9DS19TSVpFKGFkYXB0ZXItPgorCQkJCQkJCSAgICAgIFJlY2VpdmVCdWZmZXJTaXplKSwKKwkJCQkJICAgU1hHX0JVRkZFUl9UWVBFX1JDVik7CisJfQorCS8vIE5vdyBncmFiIHRoZSBSY3ZRTG9jayBsb2NrIGFuZCBwcm9jZWVkCisJc3Bpbl9sb2NrKCZhZGFwdGVyLT5SY3ZRTG9jayk7CisJd2hpbGUgKGFkYXB0ZXItPlJjdkJ1ZmZlcnNPbkNhcmQgPCBTWEdfUkNWX0RBVEFfQlVGRkVSUykgeworCQlQTElTVF9FTlRSWSBfcGxlOworCisJCS8vIEdldCBhIGRlc2NyaXB0b3IgYmxvY2sKKwkJUmN2RGVzY3JpcHRvckJsb2NrSGRyID0gTlVMTDsKKwkJaWYgKGFkYXB0ZXItPkZyZWVSY3ZCbG9ja0NvdW50KSB7CisJCQlfcGxlID0gUmVtb3ZlSGVhZExpc3QoJmFkYXB0ZXItPkZyZWVSY3ZCbG9ja3MpOworCQkJUmN2RGVzY3JpcHRvckJsb2NrSGRyID0KKwkJCSAgICBjb250YWluZXJfb2YoX3BsZSwgU1hHX1JDVl9ERVNDUklQVE9SX0JMT0NLX0hEUiwKKwkJCQkJIEZyZWVMaXN0KTsKKwkJCWFkYXB0ZXItPkZyZWVSY3ZCbG9ja0NvdW50LS07CisJCQlSY3ZEZXNjcmlwdG9yQmxvY2tIZHItPlN0YXRlID0gU1hHX0JVRkZFUl9CVVNZOworCQl9CisKKwkJaWYgKFJjdkRlc2NyaXB0b3JCbG9ja0hkciA9PSBOVUxMKSB7CisJCQkvLyBCYWlsIG91dC4uCisJCQlhZGFwdGVyLT5TdGF0cy5Ob01lbSsrOworCQkJYnJlYWs7CisJCX0KKwkJLy8gRmlsbCBpbiB0aGUgZGVzY3JpcHRvciBibG9jayBhbmQgZ2l2ZSBpdCB0byB0aGUgY2FyZAorCQlpZiAoc3hnX2ZpbGxfZGVzY3JpcHRvcl9ibG9jayhhZGFwdGVyLCBSY3ZEZXNjcmlwdG9yQmxvY2tIZHIpID09CisJCSAgICBTVEFUVVNfRkFJTFVSRSkgeworCQkJLy8gRnJlZSB0aGUgZGVzY3JpcHRvciBibG9jaworCQkJU1hHX0ZSRUVfUkNWX0RFU0NSSVBUT1JfQkxPQ0soYWRhcHRlciwKKwkJCQkJCSAgICAgIFJjdkRlc2NyaXB0b3JCbG9ja0hkcik7CisJCQlicmVhazsKKwkJfQorCX0KKwlzcGluX3VubG9jaygmYWRhcHRlci0+UmN2UUxvY2spOworCVNYR19UUkFDRShUUkFDRV9TWEcsIFN4Z1RyYWNlQnVmZmVyLCBUUkFDRV9OT0lTWSwgIlhGaWxCbGtzIiwKKwkJICBhZGFwdGVyLCBhZGFwdGVyLT5SY3ZCdWZmZXJzT25DYXJkLAorCQkgIGFkYXB0ZXItPkZyZWVSY3ZCdWZmZXJDb3VudCwgYWRhcHRlci0+QWxsUmN2QmxvY2tDb3VudCk7Cit9CisKKy8qCisgKiBzeGdfY29tcGxldGVfZGVzY3JpcHRvcl9ibG9ja3MgLSBSZXR1cm4gZGVzY3JpcHRvciBibG9ja3MgdGhhdCBoYXZlIGJlZW4KKyAqIGNvbXBsZXRlZCBieSB0aGUgbWljcm9jb2RlCisgKgorICogQXJndW1lbnRzIC0KKyAqCWFkYXB0ZXIJCS0gQSBwb2ludGVyIHRvIG91ciBhZGFwdGVyIHN0cnVjdHVyZQorICoJSW5kZXgJCS0gV2hlcmUgdGhlIG1pY3JvY29kZSBpcyB1cCB0bworICoKKyAqIFJldHVybgorICoJTm9uZQorICovCitzdGF0aWMgdm9pZCBzeGdfY29tcGxldGVfZGVzY3JpcHRvcl9ibG9ja3MocF9hZGFwdGVyX3QgYWRhcHRlciwKKwkJCQkJICAgdW5zaWduZWQgY2hhciBJbmRleCkKK3sKKwlQU1hHX1JDVl9SSU5HIFJpbmdaZXJvID0gJmFkYXB0ZXItPlJjdlJpbmdzWzBdOworCVBTWEdfUklOR19JTkZPIFJjdlJpbmdJbmZvID0gJmFkYXB0ZXItPlJjdlJpbmdaZXJvSW5mbzsKKwlQU1hHX1JDVl9ERVNDUklQVE9SX0JMT0NLX0hEUiBSY3ZEZXNjcmlwdG9yQmxvY2tIZHI7CisJUFNYR19DTUQgUmluZ0Rlc2NyaXB0b3JDbWQ7CisKKwlTWEdfVFJBQ0UoVFJBQ0VfU1hHLCBTeGdUcmFjZUJ1ZmZlciwgVFJBQ0VfTk9JU1ksICJDbXBSQmxrcyIsCisJCSAgYWRhcHRlciwgSW5kZXgsIFJjdlJpbmdJbmZvLT5IZWFkLCBSY3ZSaW5nSW5mby0+VGFpbCk7CisKKwkvLyBOb3cgZ3JhYiB0aGUgUmN2UUxvY2sgbG9jayBhbmQgcHJvY2VlZAorCXNwaW5fbG9jaygmYWRhcHRlci0+UmN2UUxvY2spOworCUFTU0VSVChJbmRleCAhPSBSY3ZSaW5nSW5mby0+VGFpbCk7CisJd2hpbGUgKFJjdlJpbmdJbmZvLT5UYWlsICE9IEluZGV4KSB7CisJCS8vCisJCS8vIExvY2F0ZSB0aGUgY3VycmVudCBDbWQgKHJpbmcgZGVzY3JpcHRvciBlbnRyeSksIGFuZAorCQkvLyBhc3NvY2lhdGVkIHJlY2VpdmUgZGVzY3JpcHRvciBibG9jaywgYW5kIGFkdmFuY2UKKwkJLy8gdGhlIHRhaWwKKwkJLy8KKwkJU1hHX1JFVFVSTl9DTUQoUmluZ1plcm8sCisJCQkgICAgICAgUmN2UmluZ0luZm8sCisJCQkgICAgICAgUmluZ0Rlc2NyaXB0b3JDbWQsIFJjdkRlc2NyaXB0b3JCbG9ja0hkcik7CisJCVNYR19UUkFDRShUUkFDRV9TWEcsIFN4Z1RyYWNlQnVmZmVyLCBUUkFDRV9OT0lTWSwgIkNtcFJCbGsiLAorCQkJICBSY3ZSaW5nSW5mby0+SGVhZCwgUmN2UmluZ0luZm8tPlRhaWwsCisJCQkgIFJpbmdEZXNjcmlwdG9yQ21kLCBSY3ZEZXNjcmlwdG9yQmxvY2tIZHIpOworCisJCS8vIENsZWFyIHRoZSBTR0wgZmllbGQKKwkJUmluZ0Rlc2NyaXB0b3JDbWQtPlNnbCA9IDA7CisJCS8vIEF0dGVtcHQgdG8gcmVmaWxsIGl0IGFuZCBoYW5kIGl0IHJpZ2h0IGJhY2sgdG8gdGhlCisJCS8vIGNhcmQuICBJZiB3ZSBmYWlsIHRvIHJlZmlsbCBpdCwgZnJlZSB0aGUgZGVzY3JpcHRvciBibG9jaworCQkvLyBoZWFkZXIuICBUaGUgY2FyZCB3aWxsIGJlIHJlc3RvY2tlZCBsYXRlciB2aWEgdGhlCisJCS8vIFJjdkJ1ZmZlcnNPbkNhcmQgdGVzdAorCQlpZiAoc3hnX2ZpbGxfZGVzY3JpcHRvcl9ibG9jayhhZGFwdGVyLCBSY3ZEZXNjcmlwdG9yQmxvY2tIZHIpID09CisJCSAgICBTVEFUVVNfRkFJTFVSRSkgeworCQkJU1hHX0ZSRUVfUkNWX0RFU0NSSVBUT1JfQkxPQ0soYWRhcHRlciwKKwkJCQkJCSAgICAgIFJjdkRlc2NyaXB0b3JCbG9ja0hkcik7CisJCX0KKwl9CisJc3Bpbl91bmxvY2soJmFkYXB0ZXItPlJjdlFMb2NrKTsKKwlTWEdfVFJBQ0UoVFJBQ0VfU1hHLCBTeGdUcmFjZUJ1ZmZlciwgVFJBQ0VfTk9JU1ksICJYQ1JCbGtzIiwKKwkJICBhZGFwdGVyLCBJbmRleCwgUmN2UmluZ0luZm8tPkhlYWQsIFJjdlJpbmdJbmZvLT5UYWlsKTsKK30KKworc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIHN4Z19kcml2ZXIgPSB7CisJLm5hbWUgPSBEUlZfTkFNRSwKKwkuaWRfdGFibGUgPSBzeGdfcGNpX3RibCwKKwkucHJvYmUgPSBzeGdfZW50cnlfcHJvYmUsCisJLnJlbW92ZSA9IHN4Z19lbnRyeV9yZW1vdmUsCisjaWYgU1hHX1BPV0VSX01BTkFHRU1FTlRfRU5BQkxFRAorCS5zdXNwZW5kID0gc3hncG1fc3VzcGVuZCwKKwkucmVzdW1lID0gc3hncG1fcmVzdW1lLAorI2VuZGlmCisvKiAgICAuc2h1dGRvd24gICA9ICAgICBzbGljX3NodXRkb3duLCAgTU9PS19JTlZFU1RJR0FURSAqLworfTsKKworc3RhdGljIGludCBfX2luaXQgc3hnX21vZHVsZV9pbml0KHZvaWQpCit7CisJc3hnX2luaXRfZHJpdmVyKCk7CisKKwlpZiAoZGVidWcgPj0gMCkKKwkJc3hnX2RlYnVnID0gZGVidWc7CisKKwlyZXR1cm4gcGNpX3JlZ2lzdGVyX2RyaXZlcigmc3hnX2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBzeGdfbW9kdWxlX2NsZWFudXAodm9pZCkKK3sKKwlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJnN4Z19kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChzeGdfbW9kdWxlX2luaXQpOworbW9kdWxlX2V4aXQoc3hnX21vZHVsZV9jbGVhbnVwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9zeGcvc3hnLmggYi9kcml2ZXJzL3N0YWdpbmcvc3hnL3N4Zy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg0NGNhNTYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvc3hnL3N4Zy5oCkBAIC0wLDAgKzEsNzczIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBDb3B5cmlnaHQgqSAyMDAwLTIwMDggQWxhY3JpdGVjaCwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAkSWQ6IHN4Zy5oLHYgMS4zIDIwMDgvMDcvMjQgMTc6MjU6MDggY2hyaXMgRXhwICQKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZAorICogICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQUxBQ1JJVEVDSCwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFMQUNSSVRFQ0gsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgorICogVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKgorICogVGhlIHZpZXdzIGFuZCBjb25jbHVzaW9ucyBjb250YWluZWQgaW4gdGhlIHNvZnR3YXJlIGFuZCBkb2N1bWVudGF0aW9uCisgKiBhcmUgdGhvc2Ugb2YgdGhlIGF1dGhvcnMgYW5kIHNob3VsZCBub3QgYmUgaW50ZXJwcmV0ZWQgYXMgcmVwcmVzZW50aW5nCisgKiBvZmZpY2lhbCBwb2xpY2llcywgZWl0aGVyIGV4cHJlc3NlZCBvciBpbXBsaWVkLCBvZiBBbGFjcml0ZWNoLCBJbmMuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorICogRklMRU5BTUU6IHN4Zy5oCisgKgorICogVGhpcyBpcyB0aGUgYmFzZSBzZXQgb2YgaGVhZGVyIGRlZmluaXRpb25zIGZvciB0aGUgU1hHIGRyaXZlci4KKyAqLworI2lmbmRlZiBfX1NYR19EUklWRVJfSF9fCisjZGVmaW5lIF9fU1hHX0RSSVZFUl9IX18KKworI2RlZmluZSBwX25ldF9kZXZpY2Ugc3RydWN0IG5ldF9kZXZpY2UgKgorLy8gU1hHX1NUQVRTIC0gUHJvYmFibHkgbW92ZSB0aGVzZSB0byBzb21lcGxhY2Ugd2hlcmUKKy8vIHRoZSBzbGljc3RhdCAoc3hnc3RhdD8pIHByb2dyYW0gY2FuIGdldCB0aGVtLgordHlwZWRlZiBzdHJ1Y3QgX1NYR19TVEFUUyB7CisJLy8gWG10CisJdTMyCQkJCVhtdE5CTDsJCQkJLy8gT2ZmbG9hZCBzZW5kIE5CTCBjb3VudAorCXU2NAkJCQlEdW1iWG10Qnl0ZXM7CQkvLyBEdW1ibmljIHNlbmQgYnl0ZXMKKwl1NjQJCQkJU2xvd1htdEJ5dGVzOwkJLy8gU2xvd3BhdGggc2VuZCBieXRlcworCXU2NAkJCQlGYXN0WG10Qnl0ZXM7CQkvLyBGYXN0cGF0aCBzZW5kIGJ5dGVzCisJdTY0CQkJCUR1bWJYbXRQa3RzOwkJLy8gRHVtYm5pYyBzZW5kIHBhY2tldHMKKwl1NjQJCQkJU2xvd1htdFBrdHM7CQkvLyBTbG93cGF0aCBzZW5kIHBhY2tldHMKKwl1NjQJCQkJRmFzdFhtdFBrdHM7CQkvLyBGYXN0cGF0aCBzZW5kIHBhY2tldHMKKyAgICB1NjQJCQkJRHVtYlhtdFVjYXN0UGt0czsJLy8gZGlyZWN0ZWQgcGFja2V0cworICAgIHU2NAkJCQlEdW1iWG10TWNhc3RQa3RzOwkvLyBNdWx0aWNhc3QgcGFja2V0cworICAgIHU2NAkJCQlEdW1iWG10QmNhc3RQa3RzOwkvLyBPSURfR0VOX0JST0FEQ0FTVF9GUkFNRVNfUkNWCisgICAgdTY0CQkJCUR1bWJYbXRVY2FzdEJ5dGVzOwkvLyBPSURfR0VOX0RJUkVDVEVEX0JZVEVTX1hNSVQKKyAgICB1NjQJCQkJRHVtYlhtdE1jYXN0Qnl0ZXM7CS8vIE9JRF9HRU5fTVVMVElDQVNUX0JZVEVTX1hNSVQKKyAgICB1NjQJCQkJRHVtYlhtdEJjYXN0Qnl0ZXM7CS8vIE9JRF9HRU5fQlJPQURDQVNUX0JZVEVTX1hNSVQKKyAgICB1NjQJCQkJWG10RXJyb3JzOwkJCS8vIE9JRF9HRU5fWE1JVF9FUlJPUgorICAgIHU2NAkJCQlYbXREaXNjYXJkczsJCS8vIE9JRF9HRU5fWE1JVF9ESVNDQVJEUworCXU2NAkJCQlYbXRPazsJCQkJLy8gT0lEX0dFTl9YTUlUX09LCisJdTY0CQkJCVhtdFFMZW47CQkJLy8gT0lEX0dFTl9UUkFOU01JVF9RVUVVRV9MRU5HVEgKKwl1NjQJCQkJWG10WmVyb0Z1bGw7CQkvLyBUcmFuc21pdCByaW5nIHplcm8gZnVsbAorCS8vIFJjdgorCXUzMgkJCQlSY3ZOQkw7CQkJCS8vIE9mZmxvYWQgcmVjaWV2ZSBOQkwgY291bnQKKwl1NjQJCQkJRHVtYlJjdkJ5dGVzOwkJLy8gZHVtYm5pYyByZWN2IGJ5dGVzCisgICAgdTY0ICAgICAgICAgICAgIER1bWJSY3ZVY2FzdEJ5dGVzOwkvLyBPSURfR0VOX0RJUkVDVEVEX0JZVEVTX1JDVgorICAgIHU2NCAgICAgICAgICAgICBEdW1iUmN2TWNhc3RCeXRlczsJLy8gT0lEX0dFTl9NVUxUSUNBU1RfQllURVNfUkNWCisgICAgdTY0ICAgICAgICAgICAgIER1bWJSY3ZCY2FzdEJ5dGVzOwkvLyBPSURfR0VOX0JST0FEQ0FTVF9CWVRFU19SQ1YKKwl1NjQJCQkJU2xvd1JjdkJ5dGVzOwkJLy8gU2xvd3BhdGggcmVjdiBieXRlcworCXU2NAkJCQlGYXN0UmN2Qnl0ZXM7CQkvLyBGYXN0cGF0aCByZWN2IGJ5dGVzCisgICAgdTY0CQkJCUR1bWJSY3ZQa3RzOwkJLy8gT0lEX0dFTl9ESVJFQ1RFRF9GUkFNRVNfUkNWCisJdTY0CQkJCUR1bWJSY3ZUY3BQa3RzOwkJLy8gU2VlIFN4Z0NvbGxlY3RTdGF0cworICAgIHU2NAkJCQlEdW1iUmN2VWNhc3RQa3RzOwkvLyBkaXJlY3RlZCBwYWNrZXRzCisgICAgdTY0CQkJCUR1bWJSY3ZNY2FzdFBrdHM7CS8vIE11bHRpY2FzdCBwYWNrZXRzCisgICAgdTY0CQkJCUR1bWJSY3ZCY2FzdFBrdHM7CS8vIE9JRF9HRU5fQlJPQURDQVNUX0ZSQU1FU19SQ1YKKwl1NjQJCQkJU2xvd1JjdlBrdHM7CQkvLyBPSURfR0VOX0RJUkVDVEVEX0ZSQU1FU19SQ1YKKyAgICB1NjQJCQkJUmN2RXJyb3JzOwkJCS8vIE9JRF9HRU5fUkNWX0VSUk9SCisgICAgdTY0CQkJCVJjdkRpc2NhcmRzOwkJLy8gT0lEX0dFTl9SQ1ZfRElTQ0FSRFMKKwl1NjQJCQkJUmN2Tm9CdWZmZXI7CQkvLyBPSURfR0VOX1JDVl9OT19CVUZGRVIKKyAgICB1NjQgCQkJUGRxRnVsbDsJCQkvLyBQcm9jZXNzZWQgRGF0YSBRdWV1ZSBGdWxsCisJdTY0CQkJCUV2ZW50UmluZ0Z1bGw7CQkvLyBFdmVudCByaW5nIGZ1bGwKKwkvLyBWZXJib3NlIHN0YXRzCisJdTY0CQkJCU1heFNlbmRzOwkJCS8vIE1heCBzZW5kcyBvdXRzdGFuZGluZworCXU2NAkJCQlOb1NnbEJ1ZjsJCQkvLyBTR0wgYnVmZmVyIGFsbG9jYXRpb24gZmFpbHVyZQorCXU2NAkJCQlTZ2xGYWlsOwkJCS8vIE5ESVMgU0dMIGZhaWx1cmUKKwl1NjQJCQkJU2dsQXN5bmM7CQkJLy8gTkRJUyBTR0wgZmFpbHVyZQorCXU2NAkJCQlOb01lbTsJCQkJLy8gTWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZQorCXU2NAkJCQlOdW1JbnRzOwkJCS8vIEludGVycnVwdHMKKwl1NjQJCQkJRmFsc2VJbnRzOwkJCS8vIEludGVycnVwdCB3aXRoIElTUiA9PSAwCisJdTY0CQkJCVhtdERyb3BzOwkJCS8vIE5vIHNhaGFyYSBEUkFNIGJ1ZmZlciBmb3IgeG10CisJLy8gU2FoYXJhIHJlY2VpdmUgc3RhdHVzCisJdTY0CQkJCVRyYW5zcG9ydENzdW07CQkvLyBTWEdfUkNWX1NUQVRVU19UUkFOU1BPUlRfQ1NVTQorCXU2NAkJCQlUcmFuc3BvcnRVZmxvdzsJCS8vIFNYR19SQ1ZfU1RBVFVTX1RSQU5TUE9SVF9VRkxPVworCXU2NAkJCQlUcmFuc3BvcnRIZHJMZW47CS8vIFNYR19SQ1ZfU1RBVFVTX1RSQU5TUE9SVF9IRFJMRU4KKwl1NjQJCQkJTmV0d29ya0NzdW07CQkvLyBTWEdfUkNWX1NUQVRVU19ORVRXT1JLX0NTVU06CisJdTY0CQkJCU5ldHdvcmtVZmxvdzsJCS8vIFNYR19SQ1ZfU1RBVFVTX05FVFdPUktfVUZMT1c6CisJdTY0CQkJCU5ldHdvcmtIZHJMZW47CQkvLyBTWEdfUkNWX1NUQVRVU19ORVRXT1JLX0hEUkxFTjoKKwl1NjQJCQkJUGFyaXR5OwkJCQkvLyBTWEdfUkNWX1NUQVRVU19QQVJJVFkKKwl1NjQJCQkJTGlua1Bhcml0eTsJCQkvLyBTWEdfUkNWX1NUQVRVU19MSU5LX1BBUklUWToKKwl1NjQJCQkJTGlua0Vhcmx5OwkJCS8vIFNYR19SQ1ZfU1RBVFVTX0xJTktfRUFSTFk6CisJdTY0CQkJCUxpbmtCdWZPZmxvdzsJCS8vIFNYR19SQ1ZfU1RBVFVTX0xJTktfQlVGT0ZMT1c6CisJdTY0CQkJCUxpbmtDb2RlOwkJCS8vIFNYR19SQ1ZfU1RBVFVTX0xJTktfQ09ERToKKwl1NjQJCQkJTGlua0RyaWJibGU7CQkvLyBTWEdfUkNWX1NUQVRVU19MSU5LX0RSSUJCTEU6CisJdTY0CQkJCUxpbmtDcmM7CQkJLy8gU1hHX1JDVl9TVEFUVVNfTElOS19DUkM6CisJdTY0CQkJCUxpbmtPZmxvdzsJCQkvLyBTWEdfUkNWX1NUQVRVU19MSU5LX09GTE9XOgorCXU2NAkJCQlMaW5rVWZsb3c7CQkJLy8gU1hHX1JDVl9TVEFUVVNfTElOS19VRkxPVzoKK30gU1hHX1NUQVRTLCAqUFNYR19TVEFUUzsKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogRFVNQi1OSUMgU2VuZCBwYXRoIGRlZmluaXRpb25zCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2RlZmluZSBTWEdfQ09NUExFVEVfRFVNQl9TRU5EKF9wQWRhcHQsIF9za2IpIHsgICAgICAgICAgICAgICAgICAgICAJCSAgICAJXAorCUFTU0VSVChfc2tiKTsJCQkJCQkJCQkJCQkJICAgIAkJCVwKKyAgICBkZXZfa2ZyZWVfc2tiX2lycShfc2tiKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK30KKworI2RlZmluZSBTWEdfRFJPUF9EVU1CX1NFTkQoX3BBZGFwdCwgX3NrYikgeyAgICAgICAgICAgICAgICAgICAgICAgICAgIAkJICAgIAlcCisJQVNTRVJUKF9za2IpOwkJCQkJCQkJCQkJCQkgICAgCQkJXAorICAgIGRldl9rZnJlZV9za2IoX3NrYik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorfQorCisvLyBMb2NhdGUgY3VycmVudCByZWNlaXZlIGhlYWRlciBidWZmZXIgbG9jYXRpb24uICBVc2UgdGhpcworLy8gaW5zdGVhZCBvZiBSY3ZEYXRhSGRyLT5WaXJ0dWFsQWRkcmVzcyBzaW5jZSB0aGUgZGF0YQorLy8gbWF5IGhhdmUgYmVlbiBvZmZzZXQgYnkgU1hHX0FEVkFOQ0VfTURMX09GRlNFVAorI2RlZmluZSBTWEdfUkVDRUlWRV9EQVRBX0xPQ0FUSU9OKF9SY3ZEYXRhSGRyKSAgICAgICAgKF9SY3ZEYXRhSGRyKS0+c2tiLT5kYXRhCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIER1bWItTklDIHJlY2VpdmUgcHJvY2Vzc2luZworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8vIERlZmluZSBhbiBTWEdfUEFDS0VUIGFzIGFuIE5ESVNfUEFDS0VUCisjZGVmaW5lIFBTWEdfUEFDS0VUICAgICAgIHN0cnVjdCBza19idWZmICoKKy8vIEluZGljYXRpb25zIGFycmF5IHNpemUKKyNkZWZpbmUgU1hHX1JDVl9BUlJBWVNJWkUJNjQKKworI2RlZmluZSBTWEdfQUxMT0NBVEVfUkNWX1BBQ0tFVChfcEFkYXB0LCBfUmN2RGF0YUJ1ZmZlckhkcikgewkJCQlcCisJc3RydWN0IHNrX2J1ZmYgKiBza2I7CQkJCQkJCQkJCQkJICAgIFwKKyAgICBza2IgPSBhbGxvY19za2IoMjA0OCwgR0ZQX0FUT01JQyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgaWYgKHNrYikgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIAkoX1JjdkRhdGFCdWZmZXJIZHIpLT5za2IgPSBza2I7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgc2tiLT5uZXh0ID0gTlVMTDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSBlbHNlIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIAkoX1JjdkRhdGFCdWZmZXJIZHIpLT5za2IgPSBOVUxMOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit9CisKKyNkZWZpbmUgU1hHX0ZSRUVfUkNWX1BBQ0tFVChfUmN2RGF0YUJ1ZmZlckhkcikgewkJCQkJCQlcCisJaWYoKF9SY3ZEYXRhQnVmZmVySGRyKS0+c2tiKSB7CQkJCQkJCQkJCQlcCisJCWRldl9rZnJlZV9za2IoKF9SY3ZEYXRhQnVmZmVySGRyKS0+c2tiKTsJCQkJCQkgICAgXAorICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK30KKworLy8gTWFjcm8gdG8gYWRkIGEgTkRJU19QQUNLRVQgdG8gYW4gaW5kaWNhdGlvbiBhcnJheQorLy8gSWYgd2UgZmlsbCB1cCBvdXIgYXJyYXkgb2YgcGFja2V0IHBvaW50ZXJzLCB0aGVuIGluZGljYXRlIHRoaXMKKy8vIGJsb2NrIHVwIG5vdyBhbmQgc3RhcnQgb24gYSBuZXcgb25lLgorI2RlZmluZQlTWEdfQUREX1JDVl9QQUNLRVQoX3BBZGFwdCwgX1BhY2tldCwgX1ByZXZQYWNrZXQsIF9JbmRpY2F0aW9uTGlzdCwgX051bVBhY2tldHMpIHsgXAorCShfSW5kaWNhdGlvbkxpc3QpW19OdW1QYWNrZXRzXSA9IChfUGFja2V0KTsJCQkJCQkJCQkJXAorCShfTnVtUGFja2V0cykrKzsJCQkJCQkJCQkJCQkJCQkJXAorCWlmKChfTnVtUGFja2V0cykgPT0gU1hHX1JDVl9BUlJBWVNJWkUpIHsJCQkJCQkJCQkJXAorCQlTWEdfVFJBQ0UoVFJBQ0VfU1hHLCBTeGdUcmFjZUJ1ZmZlciwgVFJBQ0VfTk9JU1ksICJJbmRpY1JjdiIsCQkJCVwKKwkJCQkgICAoX051bVBhY2tldHMpLCAwLCAwLCAwKTsJCQkJCQkJCQkJCVwKKyAgICAgICAgbmV0aWZfcngoKF9JbmRpY2F0aW9uTGlzdCksKF9OdW1QYWNrZXRzKSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJKF9OdW1QYWNrZXRzKSA9IDA7CQkJCQkJCQkJCQkJCQkJXAorCX0JCQkJCQkJCQkJCQkJCQkJCQkJCVwKK30KKworI2RlZmluZSBTWEdfSU5ESUNBVEVfUEFDS0VUUyhfcEFkYXB0LCBfSW5kaWNhdGlvbkxpc3QsIF9OdW1QYWNrZXRzKSB7CQkJXAorCWlmKF9OdW1QYWNrZXRzKSB7CQkJCQkJCQkJCQkJCQkJXAorCQlTWEdfVFJBQ0UoVFJBQ0VfU1hHLCBTeGdUcmFjZUJ1ZmZlciwgVFJBQ0VfTk9JU1ksICJJbmRpY1JjdiIsCQkJXAorCQkJCSAgIChfTnVtUGFja2V0cyksIDAsIDAsIDApOwkJCQkJCQkJCQlcCisgICAgICAgIG5ldGlmX3J4KChfSW5kaWNhdGlvbkxpc3QpLChfTnVtUGFja2V0cykpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJKF9OdW1QYWNrZXRzKSA9IDA7CQkJCQkJCQkJCQkJCQlcCisJfQkJCQkJCQkJCQkJCQkJCQkJCQlcCit9CisKKyNkZWZpbmUgU1hHX1JFSU5JQVRJQUxJWkVfUEFDS0VUKF9QYWNrZXQpCQkJCQkJCQkJCVwKKwl7fSAgLypfTmRpc1JlaW5pdGlhbGl6ZVBhY2tldChfUGFja2V0KSovICAvKiAgdGhpcyBpcyBub3QgbmVjZXNzYXJ5IHdpdGggYW4gc2tiICovCisKKy8vIERlZmluaXRpb25zIHRvIGluaXRpYWxpemUgRHVtYi1uaWMgUmVjZWl2ZSBOQkxzCisjZGVmaW5lIFNYR19SQ1ZfUEFDS0VUX0JVRkZFUl9IRFIoX1BhY2tldCkgKCgoUFNYR19SQ1ZfTkJMX1JFU0VSVkVEKSgoX1BhY2tldCktPk1pbmlwb3J0UmVzZXJ2ZWRFeCkpLT5SY3ZEYXRhQnVmZmVySGRyKQorCisjZGVmaW5lIFNYR19SQ1ZfU0VUX0NIRUNLU1VNX0lORk8oX1BhY2tldCwgX0NwaSkJXAorCU5ESVNfUEVSX1BBQ0tFVF9JTkZPX0ZST01fUEFDS0VUKChfUGFja2V0KSwgVGNwSXBDaGVja3N1bVBhY2tldEluZm8pID0gKFBWT0lEKShfQ3BpKQorCisjZGVmaW5lIFNYR19SQ1ZfU0VUX1RPRVBMSVRaKF9QYWNrZXQsIF9Ub2VwbGl0eiwgX1R5cGUsIF9GdW5jdGlvbikgewkJXAorCU5ESVNfUEFDS0VUX1NFVF9IQVNIX1ZBTFVFKChfUGFja2V0KSwgKF9Ub2VwbGl0eikpOwkJCQkJCVwKKwlORElTX1BBQ0tFVF9TRVRfSEFTSF9UWVBFKChfUGFja2V0KSwgKF9UeXBlKSk7CQkJCQkJCVwKKwlORElTX1BBQ0tFVF9TRVRfSEFTSF9GVU5DVElPTigoX1BhY2tldCksIChfRnVuY3Rpb24pKTsJCQkJCVwKK30KKworI2RlZmluZSBTWEdfUkNWX1NFVF9WTEFOX0lORk8oX1BhY2tldCwgX1ZsYW5JZCwgX1ByaW9yaXR5KSB7CQkJCQlcCisJTkRJU19QQUNLRVRfODAyMVFfSU5GTwlfUGFja2V0ODAyMXFJbmZvOwkJCQkJCQkJCVwKKwlfUGFja2V0ODAyMXFJbmZvLlRhZ0hlYWRlci5WbGFuSWQgPSAoX1ZsYW5JZCk7CQkJCQkJCQlcCisJX1BhY2tldDgwMjFxSW5mby5UYWdIZWFkZXIuVXNlclByaW9yaXR5ID0gKF9Qcmlvcml0eSk7CQkJCQkJXAorCU5ESVNfUEVSX1BBQ0tFVF9JTkZPX0ZST01fUEFDS0VUKChfUGFja2V0KSwgSWVlZTgwMjFRTmV0QnVmZmVyTGlzdEluZm8pID0gCVwKKwkJX1BhY2tldDgwMjFxSW5mby5WYWx1ZTsJCQkJCQkJCQkJCQkJXAorfQorCisjZGVmaW5lIFNYR19BREpVU1RfUkNWX1BBQ0tFVChfUGFja2V0LCBfUmN2RGF0YUJ1ZmZlckhkciwgX0V2ZW50KSB7CQkJXAorCVNYR19UUkFDRShUUkFDRV9TWEcsIFN4Z1RyYWNlQnVmZmVyLCBUUkFDRV9OT0lTWSwgIkR1bWJSY3YiLAkJCVwKKwkJCSAgIChfUmN2RGF0YUJ1ZmZlckhkciksIChfUGFja2V0KSwJCQkJCQkJCVwKKwkJCSAgIChfRXZlbnQpLT5TdGF0dXMsIDApOwkgICAgICAgICAgICAgICAgICAgIAkJCQlcCisJQVNTRVJUKChfRXZlbnQpLT5MZW5ndGggPD0gKF9SY3ZEYXRhQnVmZmVySGRyKS0+U2l6ZSk7CQkJCQlcCisgICAgUGFja2V0LT5sZW4gPSAoX0V2ZW50KS0+TGVuZ3RoOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorfQorCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLyBNYWNyb3MgdG8gZnJlZSBhIHJlY2VpdmUgZGF0YSBidWZmZXIgYW5kIHJlY2VpdmUgZGF0YSBkZXNjcmlwdG9yIGJsb2NrCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLyBOT1RFIC0gTG9jayBtdXN0IGJlIGhlbGQgd2l0aCBSQ1YgbWFjcm9zCisjZGVmaW5lIFNYR19HRVRfUkNWX0RBVEFfQlVGRkVSKF9wQWRhcHQsIF9IZHIpIHsJCQkJCQkJCVwKKwlQTElTVF9FTlRSWSAgICAgCQkJCV9wbGU7CQkJCQkJCQkJCVwKKwlfSGRyID0gTlVMTDsJCQkJCQkJCQkJCQkJCQkJXAorCWlmKChfcEFkYXB0KS0+RnJlZVJjdkJ1ZmZlckNvdW50KSB7CQkJCQkJCQkJCQlcCisJCUFTU0VSVCghKElzTGlzdEVtcHR5KCYoX3BBZGFwdCktPkZyZWVSY3ZCdWZmZXJzKSkpOwkJCQkJCVwKKwkJX3BsZSA9IFJlbW92ZUhlYWRMaXN0KCYoX3BBZGFwdCktPkZyZWVSY3ZCdWZmZXJzKTsJICAgIAkJCQlcCisJCShfSGRyKSA9IGNvbnRhaW5lcl9vZihfcGxlLCBTWEdfUkNWX0RBVEFfQlVGRkVSX0hEUiwgRnJlZUxpc3QpOwkgICAgICAgIFwKKwkJKF9wQWRhcHQpLT5GcmVlUmN2QnVmZmVyQ291bnQtLTsJCQkJCQkJCQkJXAorCQlBU1NFUlQoKF9IZHIpLT5TdGF0ZSA9PSBTWEdfQlVGRkVSX0ZSRUUpOwkJCQkJCQkJXAorCX0JCQkJCQkJCQkJCQkJCQkJCQkJXAorfQorCisjZGVmaW5lIFNYR19GUkVFX1JDVl9EQVRBX0JVRkZFUihfcEFkYXB0LCBfSGRyKSB7CQkJCQkJCVwKKwlTWEdfVFJBQ0UoVFJBQ0VfU1hHLCBTeGdUcmFjZUJ1ZmZlciwgVFJBQ0VfTk9JU1ksICJSdG5ESGRyIiwJCQlcCisJCQkgICAoX0hkciksIChfcEFkYXB0KS0+RnJlZVJjdkJ1ZmZlckNvdW50LAkJCQkJCVwKKwkJCSAgIChfSGRyKS0+U3RhdGUsIChfSGRyKS0+VmlydHVhbEFkZHJlc3MpOwkJCQkJCVwKKy8qCVNYR19SRVNUT1JFX01ETF9PRkZTRVQoX0hkcik7CSovCQkJCQkJCQkJCVwKKwkoX3BBZGFwdCktPkZyZWVSY3ZCdWZmZXJDb3VudCsrOwkJCQkJCQkJCQlcCisJQVNTRVJUKCgoX3BBZGFwdCktPkFsbFJjdkJsb2NrQ291bnQgKiBTWEdfUkNWX0RFU0NSSVBUT1JTX1BFUl9CTE9DSykgPj0gKF9wQWRhcHQpLT5GcmVlUmN2QnVmZmVyQ291bnQpOyBcCisJQVNTRVJUKChfSGRyKS0+U3RhdGUgIT0gU1hHX0JVRkZFUl9GUkVFKTsJCQkJCQkJCVwKKwkoX0hkciktPlN0YXRlID0gU1hHX0JVRkZFUl9GUkVFOwkJCQkJCQkJCQlcCisJSW5zZXJ0VGFpbExpc3QoJihfcEFkYXB0KS0+RnJlZVJjdkJ1ZmZlcnMsICYoKF9IZHIpLT5GcmVlTGlzdCkpOwkJXAorfQorCisjZGVmaW5lIFNYR19GUkVFX1JDVl9ERVNDUklQVE9SX0JMT0NLKF9wQWRhcHQsIF9IZHIpIHsJCQkJCQlcCisJQVNTRVJUKChfSGRyKS0+U3RhdGUgIT0gU1hHX0JVRkZFUl9GUkVFKTsJCQkJCQkJCVwKKwkoX0hkciktPlN0YXRlID0gU1hHX0JVRkZFUl9GUkVFOwkJCQkJCQkJCQlcCisJKF9wQWRhcHQpLT5GcmVlUmN2QmxvY2tDb3VudCsrOwkJCQkJCQkJCQkJXAorCUFTU0VSVCgoX3BBZGFwdCktPkFsbFJjdkJsb2NrQ291bnQgPj0gKF9wQWRhcHQpLT5GcmVlUmN2QmxvY2tDb3VudCk7CVwKKwlJbnNlcnRUYWlsTGlzdCgmKF9wQWRhcHQpLT5GcmVlUmN2QmxvY2tzLCAmKF9IZHIpLT5GcmVlTGlzdCk7CQkJXAorfQorCisvLyBTR0wgbWFjcm9zCisjZGVmaW5lIFNYR19GUkVFX1NHTF9CVUZGRVIoX3BBZGFwdCwgX1NnbCwgX05CKSB7CVwKKwlzcGluX2xvY2soJihfcEFkYXB0KS0+U2dsUUxvY2spOwkJXAorCShfcEFkYXB0KS0+RnJlZVNnbEJ1ZmZlckNvdW50Kys7CQlcCisJQVNTRVJUKChfcEFkYXB0KS0+QWxsU2dsQnVmZmVyQ291bnQgPj0gKF9wQWRhcHQpLT5GcmVlU2dsQnVmZmVyQ291bnQpO1wKKwlBU1NFUlQoISgoX1NnbCktPlN0YXRlICYgU1hHX0JVRkZFUl9GUkVFKSk7CVwKKwkoX1NnbCktPlN0YXRlID0gU1hHX0JVRkZFUl9GUkVFOwkJXAorCUluc2VydFRhaWxMaXN0KCYoX3BBZGFwdCktPkZyZWVTZ2xCdWZmZXJzLCAmKF9TZ2wpLT5GcmVlTGlzdCk7CVwKKwlzcGluX3VubG9jaygmKF9wQWRhcHQpLT5TZ2xRTG9jayk7CQlcCit9CisKKy8vIEdldCBhbiBTR0wgYnVmZmVyIGZyb20gdGhlIGZyZWUgcXVldWUuICBUaGUgZmlyc3QgcGFydCBvZiB0aGlzIG1hY3JvCisvLyBhdHRlbXB0cyB0byBrZWVwIGFoZWFkIG9mIGJ1ZmZlciBkZXBsZXRpb24gYnkgYWxsb2NhdGluZyBtb3JlIHdoZW4KKy8vIHdlIGhpdCBhIG1pbmltdW0gdGhyZXNob2xkLiAgTm90ZSB0aGF0IHdlIGRvbid0IGdyYWIgdGhlIGxvY2sKKy8vIHVudGlsIGFmdGVyIHRoYXQuICBXZSdyZSBkZWFsaW5nIHdpdGggcm91bmQgbnVtYmVycyBoZXJlLCBzbyB3ZSBkb24ndCBuZWVkIHRvLAorLy8gYW5kIG5vdCBncmFiYmluZyBpdCBhdm9pZHMgYSBwb3NzaWJsZSBkb3VibGUtdHJpcC4KKyNkZWZpbmUgU1hHX0dFVF9TR0xfQlVGRkVSKF9wQWRhcHQsIF9TZ2wpIHsJCQkJXAorCVBMSVNUX0VOVFJZIF9wbGU7CQkJCQkJXAorCWlmICgoX3BBZGFwdC0+RnJlZVNnbEJ1ZmZlckNvdW50IDwgU1hHX01JTl9TR0xfQlVGRkVSUykgJiYJXAorCSAgIChfcEFkYXB0LT5BbGxTZ2xCdWZmZXJDb3VudCA8IFNYR19NQVhfU0dMX0JVRkZFUlMpICYmCVwKKwkgICAoX3BBZGFwdC0+QWxsb2NhdGlvbnNQZW5kaW5nID09IDApKSB7CQkJXAorCQlzeGdfYWxsb2NhdGVfYnVmZmVyX21lbW9yeShfcEFkYXB0LAkJCVwKKwkJCShzaXplb2YoU1hHX1NDQVRURVJfR0FUSEVSKSArIFNYR19TR0xfQlVGX1NJWkUpLFwKKwkJCVNYR19CVUZGRVJfVFlQRV9TR0wpOwkJCQlcCisJfQkJCQkJCQkJXAorCV9TZ2wgPSBOVUxMOwkJCQkJCQlcCisJc3Bpbl9sb2NrKCYoX3BBZGFwdCktPlNnbFFMb2NrKTsJCQkJXAorCWlmKChfcEFkYXB0KS0+RnJlZVNnbEJ1ZmZlckNvdW50KSB7CQkJCVwKKwkJQVNTRVJUKCEoSXNMaXN0RW1wdHkoJihfcEFkYXB0KS0+RnJlZVNnbEJ1ZmZlcnMpKSk7CVwKKwkJX3BsZSA9IFJlbW92ZUhlYWRMaXN0KCYoX3BBZGFwdCktPkZyZWVTZ2xCdWZmZXJzKTsJXAorCQkoX1NnbCkgPSBjb250YWluZXJfb2YoX3BsZSwgU1hHX1NDQVRURVJfR0FUSEVSLCBGcmVlTGlzdCk7IFwKKyAgICAgICAgICAgIChfcEFkYXB0KS0+RnJlZVNnbEJ1ZmZlckNvdW50LS07CQkJCVwKKwkJQVNTRVJUKChfU2dsKS0+U3RhdGUgPT0gU1hHX0JVRkZFUl9GUkVFKTsJCVwKKwkJKF9TZ2wpLT5TdGF0ZSA9IFNYR19CVUZGRVJfQlVTWTsJCQlcCisJCShfU2dsKS0+cFNnbCA9IE5VTEw7CQkJCQlcCisJfQkJCQkJCQkJXAorCXNwaW5fdW5sb2NrKCYoX3BBZGFwdCktPlNnbFFMb2NrKTsJCQkJXAorfQorCisvLworLy8gU1hHX01VTFRJQ0FTVF9BRERSRVNTCisvLworLy8gTGlua2VkIGxpc3Qgb2YgbXVsdGljYXN0IGFkZHJlc3Nlcy4KK3R5cGVkZWYgc3RydWN0IF9TWEdfTVVMVElDQVNUX0FERFJFU1MgeworCXVuc2lnbmVkIGNoYXIJCQkJCQkJQWRkcmVzc1s2XTsKKwlzdHJ1Y3QgX1NYR19NVUxUSUNBU1RfQUREUkVTUwkqTmV4dDsKK30gU1hHX01VTFRJQ0FTVF9BRERSRVNTLCAqUFNYR19NVUxUSUNBU1RfQUREUkVTUzsKKworLy8gU3RydWN0dXJlIHRvIG1haW50YWluIGNoaW1uZXkgc2VuZCBhbmQgcmVjZWl2ZSBidWZmZXIgcXVldWVzLgorLy8gVGhpcyBzdHJ1Y3R1cmUgbWFpbnRhaW5zIE5FVF9CVUZGRVJfTElTVCBxdWV1ZXMgdGhhdCBhcmUKKy8vIGdpdmVuIHRvIHVzIHZpYSB0aGUgQ2hpbW5leSBNaW5pcG9ydFRjcE9mZmxvYWRTZW5kIGFuZAorLy8gTWluaXBvcnRUY3BPZmZsb2FkUmVjZWl2ZSByb3V0aW5lcy4gIFRoaXMgc3RydWN0dXJlIERPRVMgTk9UCisvLyBtYW5hZ2Ugb3VyIGRhdGEgYnVmZmVyIHF1ZXVlCit0eXBlZGVmIHN0cnVjdCBfU1hHX0JVRkZFUl9RVUVVRSB7CisJdTMyCQkJCQkJVHlwZTsJCQkvLyBTbG93IG9yIGZhc3QgLSBTZWUgYmVsb3cKKwl1MzIJCQkJCQlEaXJlY3Rpb247CQkvLyBYbXQgb3IgUmN2CisJdTMyCQkJCQkJQnl0ZXM7CQkJLy8gQnl0ZSBjb3VudAorCXUzMiAqICAgICAgICAJCQlIZWFkOwkJCS8vIFNlbmQgcXVldWUgaGVhZAorCXUzMiAqICAgICAgICAJCQlUYWlsOwkJCS8vIFNlbmQgcXVldWUgdGFpbAorLy8JUE5FVF9CVUZGRVJfTElTVAkJCU5leHROQkw7CQkvLyBTaG9ydCBjdXQgLSBuZXh0IE5CTAorLy8JUE5FVF9CVUZGRVIJCQkJCU5leHROQjsJCQkvLyBTaG9ydCBjdXQgLSBuZXh0IE5CCit9IFNYR19CVUZGRVJfUVVFVUUsICpQU1hHX0JVRkZFUl9RVUVVRTsKKworI2RlZmluZQkJU1hHX1NMT1dfU0VORF9CVUZGRVIJMAorI2RlZmluZQkJU1hHX0ZBU1RfU0VORF9CVUZGRVIJMQorI2RlZmluZSAJU1hHX1JFQ0VJVkVfQlVGRkVSCQkyCisKKyNkZWZpbmUgU1hHX0lOSVRfQlVGRkVSKF9CdWZmZXIsIF9UeXBlKSB7IAkJCQkJCVwKKwkoX0J1ZmZlciktPlR5cGUgPSAoX1R5cGUpOwkJCQkJCQkJCVwKKwlpZigoX1R5cGUpID09IFNYR19SRUNFSVZFX0JVRkZFUikgewkJCQkJCQlcCisJCShfQnVmZmVyKS0+RGlyZWN0aW9uID0gMDsJCQkJCQkJCVwKKwl9IGVsc2UgewkJCQkJCQkJCQkJCQlcCisJCShfQnVmZmVyKS0+RGlyZWN0aW9uID0gTkRJU19TR19MSVNUX1dSSVRFX1RPX0RFVklDRTsJXAorCX0JCQkJCQkJCQkJCQkJCQlcCisJKF9CdWZmZXIpLT5CeXRlcyA9IDA7CQkJCQkJCQkJCVwKKwkoX0J1ZmZlciktPkhlYWQgPSBOVUxMOwkJCQkJCQkJCQlcCisJKF9CdWZmZXIpLT5UYWlsID0gTlVMTDsJCQkJCQkJCQkJXAorfQorCisKKyNkZWZpbmUgU1hHX1JTU19DUFVfQ09VTlQoX3BBZGFwdCkgCQkJCQkJCQlcCisJKChfcEFkYXB0KS0+UnNzRW5hYmxlZCAJPyAgTlJfQ1BVUyA6IDEpCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBEUklWRVIgYW5kIEFEQVBURVIgc3RydWN0dXJlcworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8vIEFkYXB0ZXIgc3RhdGVzIC0gVGhlc2Ugc3RhdGVzIGNsb3NlbHkgbWF0Y2ggdGhlIGFkYXB0ZXIgc3RhdGVzCisvLyBkb2N1bWVudGVkIGluIHRoZSBEREsgKHdpdGggYSBmZXcgZXhjZXB0aW9ucykuCit0eXBlZGVmIGVudW0gX1NYR19TVEFURSB7CisJU1hHX1NUQVRFX0lOSVRJQUxJWklORywJCQkvLyBJbml0aWFsaXppbmcKKwlTWEdfU1RBVEVfQk9PVERJQUcsCQkJCS8vIEJvb3QtRGlhZ25vc3RpYyBtb2RlCisJU1hHX1NUQVRFX1BBVVNJTkcsCQkJCS8vIFBhdXNpbmcKKwlTWEdfU1RBVEVfUEFVU0VELAkJCQkvLyBQYXVzZWQKKwlTWEdfU1RBVEVfUlVOTklORywJCQkJLy8gUnVubmluZworCVNYR19TVEFURV9SRVNFVFRJTkcsCQkJLy8gUmVzZXQgaW4gcHJvZ3Jlc3MKKwlTWEdfU1RBVEVfU0xFRVAsCQkJCS8vIFNsZWVwaW5nCisJU1hHX1NUQVRFX0RJQUcsCQkJCQkvLyBEaWFnbm9zdGljIG1vZGUKKwlTWEdfU1RBVEVfSEFMVElORywJCQkJLy8gSGFsdGluZworCVNYR19TVEFURV9IQUxURUQsCQkJCS8vIERvd24gb3Igbm90LWluaXRpYWxpemVkCisJU1hHX1NUQVRFX1NIVVRET1dOCQkJCS8vIHNodXRkb3duCit9IFNYR19TVEFURSwgKlBTWEdfU1RBVEU7CisKKy8vIExpbmsgc3RhdGUKK3R5cGVkZWYgZW51bSBfU1hHX0xJTktfU1RBVEUgeworCVNYR19MSU5LX0RPV04sCisJU1hHX0xJTktfVVAKK30gU1hHX0xJTktfU1RBVEUsICpQU1hHX0xJTktfU1RBVEU7CisKKy8vIExpbmsgaW5pdGlhbGl6YXRpb24gdGltZW91dCBpbiAxMDB1cyB1bml0cworI2RlZmluZSBTWEdfTElOS19USU1FT1VUCTEwMDAwMAkJLy8gMTAgU2Vjb25kcyAtIFJFRFVDRSEKKworCisvLyBNaWNyb2NvZGUgZmlsZSBzZWxlY3Rpb24gY29kZXMKK3R5cGVkZWYgZW51bSBfU1hHX1VDT0RFX1NFTCB7CisJU1hHX1VDT0RFX1NBSEFSQSwJCQkJLy8gU2FoYXJhIHVjb2RlCisJU1hHX1VDT0RFX1NESUFHQ1BVLAkJCQkvLyBTYWhhcmEgQ1BVIGRpYWdub3N0aWMgdWNvZGUKKwlTWEdfVUNPREVfU0RJQUdTWVMJCQkJLy8gU2FoYXJhIHN5c3RlbSBkaWFnbm9zdGljIHVjb2RlCit9IFNYR19VQ09ERV9TRUw7CisKKworI2RlZmluZSBTWEdfRElTQUJMRV9BTExfSU5URVJSVVBUUyhfcGFkYXB0KSBzeGdfZGlzYWJsZV9pbnRlcnJ1cHQoX3BhZGFwdCkKKyNkZWZpbmUgU1hHX0VOQUJMRV9BTExfSU5URVJSVVBUUyhfcGFkYXB0KSBzeGdfZW5hYmxlX2ludGVycnVwdChfcGFkYXB0KQorCisvLyBUaGlzIHByb2JhYmx5IGxpdmVzIGluIGEgcHJvdG8uaCBmaWxlLiAgTW92ZSBsYXRlcgorI2RlZmluZSBTWEdfTVVMVElDQVNUX1BBQ0tFVChfcGV0aGVyKSAoKF9wZXRoZXIpLT5ldGhlcl9kaG9zdFswXSAmIDB4MDEpCisjZGVmaW5lIFNYR19CUk9BRENBU1RfUEFDS0VUKF9wZXRoZXIpICgoKih1MzIgKikoX3BldGhlciktPmV0aGVyX2Rob3N0ID09IDB4RkZGRkZGRkYpICYmIFwKKwkJCQkoKih1MTYgKikmKF9wZXRoZXIpLT5ldGhlcl9kaG9zdFs0XSA9PSAweEZGRkYpKQorCisvLyBGb3IgRGJnUHJpbnRzCisjZGVmaW5lIFNYR19JRCAgICAgIERQRkxUUl9JSFZORVRXT1JLX0lECisjZGVmaW5lIFNYR19FUlJPUiAgIERQRkxUUl9FUlJPUl9MRVZFTAorCisvLworLy8gU1hHX0RSSVZFUiBzdHJ1Y3R1cmUgLQorLy8KKy8vIGNvbnRhaW5zIGluZm9ybWF0aW9uIGFib3V0IHRoZSBzeGcgZHJpdmVyLiAgVGhlcmUgaXMgb25seQorLy8gb25lIG9mIHRoZXNlLCBhbmQgaXQgaXMgZGVmaW5lZCBhcyBhIGdsb2JhbC4KK3R5cGVkZWYgc3RydWN0IF9TWEdfRFJJVkVSIHsKKwlzdHJ1Y3QgX2FkYXB0ZXJfdAkqQWRhcHRlcnM7CQkvLyBMaW5rZWQgbGlzdCBvZiBhZGFwdGVycworCXVzaG9ydAkJCQlBZGFwdGVySUQ7CQkvLyBNYWludGFpbiB1bmlxdWUgYWRhcHRlciBJRAorfSBTWEdfRFJJVkVSLCAqUFNYR19EUklWRVI7CisKKyNpZmRlZiBTVEFUVVNfU1VDQ0VTUworI3VuZGVmIFNUQVRVU19TVUNDRVNTCisjZW5kaWYKKworI2RlZmluZSBTVEFUVVNfU1VDQ0VTUyAgICAgICAgICAgICAgMAorI2RlZmluZSBTVEFUVVNfUEVORElORyAgICAgICAgICAgICAgMAorI2RlZmluZSBTVEFUVVNfRkFJTFVSRSAgICAgICAgICAgICAtMQorI2RlZmluZSBTVEFUVVNfRVJST1IgICAgICAgICAgICAgICAtMgorI2RlZmluZSBTVEFUVVNfTk9UX1NVUFBPUlRFRCAgICAgICAtMworI2RlZmluZSBTVEFUVVNfQlVGRkVSX1RPT19TSE9SVCAgICAtNAorI2RlZmluZSBTVEFUVVNfUkVTT1VSQ0VTICAgICAgICAgICAtNQorCisjZGVmaW5lIFNMSUNfTUFYX0NBUkRTICAgICAgICAgICAgICAzMgorI2RlZmluZSBTTElDX01BWF9QT1JUUyAgICAgICAgICAgICAgNCAgICAgICAgLyogTWF4ICMgb2YgcG9ydHMgcGVyIGNhcmQgICAqLworI2lmIFNMSUNfRFVNUF9FTkFCTEVECisvLyBEdW1wIGJ1ZmZlciBzaXplCisvLworLy8gVGhpcyBjYW5ub3QgYmUgYmlnZ2VyIHRoYW4gdGhlIG1heCBETUEgc2l6ZSB0aGUgY2FyZCBzdXBwb3J0cywKKy8vIGdpdmVuIHRoZSBjdXJyZW50IGNvZGUgc3RydWN0dXJlIGluIHRoZSBob3N0IGFuZCB1Y29kZS4KKy8vIE1vamF2ZSBzdXBwb3J0cyAxNkssIE9hc2lzIHN1cHBvcnRzIDE2Sy0xLCBzbworLy8ganVzdCBzZXQgdGhpcyBhdCAxNUssIHNob3VsZG50IG1ha2UgdGhhdCBtdWNoIG9mIGEgZGlmZi4KKyNkZWZpbmUgRFVNUF9CVUZfU0laRSAgICAgICAgICAgICAgIDB4M0MwMAorI2VuZGlmCisKKyNkZWZpbmUgTUlOKGEsIGIpICgodTMyKShhKSA8ICh1MzIpKGIpID8gKGEpIDogKGIpKQorI2RlZmluZSBNQVgoYSwgYikgKCh1MzIpKGEpID4gKHUzMikoYikgPyAoYSkgOiAoYikpCisKK3R5cGVkZWYgc3RydWN0IF9tY2FzdF9hZGRyZXNzX3QKK3sKKyAgICB1bnNpZ25lZCBjaGFyICAgICAgICAgICAgICAgICAgICAgYWRkcmVzc1s2XTsKKyAgICBzdHJ1Y3QgX21jYXN0X2FkZHJlc3NfdCAgICpuZXh0OworfSAgbWNhc3RfYWRkcmVzc190LCAqcF9tY2FzdF9hZGRyZXNzX3Q7CisKKyNkZWZpbmUgQ0FSRF9ET1dOICAgICAgICAweDAwMDAwMDAwCisjZGVmaW5lIENBUkRfVVAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBDQVJEX0ZBSUwgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgQ0FSRF9ESUFHICAgICAgICAweDAwMDAwMDAzCisjZGVmaW5lIENBUkRfU0xFRVAgICAgICAgMHgwMDAwMDAwNAorCisjZGVmaW5lIEFEQVBUX0RPV04gICAgICAgICAgICAgMHgwMAorI2RlZmluZSBBREFQVF9VUCAgICAgICAgICAgICAgIDB4MDEKKyNkZWZpbmUgQURBUFRfRkFJTCAgICAgICAgICAgICAweDAyCisjZGVmaW5lIEFEQVBUX1JFU0VUICAgICAgICAgICAgMHgwMworI2RlZmluZSBBREFQVF9TTEVFUCAgICAgICAgICAgIDB4MDQKKworI2RlZmluZSBBREFQVF9GTEFHU19CT09UVElNRSAgICAgICAgICAgIDB4MDAwMQorI2RlZmluZSBBREFQVF9GTEFHU19JUzY0QklUICAgICAgICAgICAgIDB4MDAwMgorI2RlZmluZSBBREFQVF9GTEFHU19QRU5ESU5HTElOS0RPV04gICAgIDB4MDAwNAorI2RlZmluZSBBREFQVF9GTEFHU19GSUJFUk1FRElBICAgICAgICAgIDB4MDAwOAorI2RlZmluZSBBREFQVF9GTEFHU19MT0NLU19BTExPQ0VEICAgICAgIDB4MDAxMAorI2RlZmluZSBBREFQVF9GTEFHU19JTlRfUkVHSVNURVJFRCAgICAgIDB4MDAyMAorI2RlZmluZSBBREFQVF9GTEFHU19MT0FEX1RJTUVSX1NFVCAgICAgIDB4MDA0MAorI2RlZmluZSBBREFQVF9GTEFHU19TVEFUU19USU1FUl9TRVQgICAgIDB4MDA4MAorI2RlZmluZSBBREFQVF9GTEFHU19SRVNFVF9USU1FUl9TRVQgICAgIDB4MDEwMAorCisjZGVmaW5lIExJTktfRE9XTiAgICAgICAgICAgICAgMHgwMAorI2RlZmluZSBMSU5LX0NPTkZJRyAgICAgICAgICAgIDB4MDEKKyNkZWZpbmUgTElOS19VUCAgICAgICAgICAgICAgICAweDAyCisKKyNkZWZpbmUgTElOS18xME1CICAgICAgICAgICAgICAweDAwCisjZGVmaW5lIExJTktfMTAwTUIgICAgICAgICAgICAgMHgwMQorI2RlZmluZSBMSU5LX0FVVE9TUEVFRCAgICAgICAgIDB4MDIKKyNkZWZpbmUgTElOS18xMDAwTUIgICAgICAgICAgICAweDAzCisjZGVmaW5lIExJTktfMTAwMDBNQiAgICAgICAgICAgMHgwNAorCisjZGVmaW5lIExJTktfSEFMRkQgICAgICAgICAgICAgMHgwMAorI2RlZmluZSBMSU5LX0ZVTExEICAgICAgICAgICAgIDB4MDEKKyNkZWZpbmUgTElOS19BVVRPRCAgICAgICAgICAgICAweDAyCisKKyNkZWZpbmUgTUFDX0RJUkVDVEVEICAgICAweDAwMDAwMDAxCisjZGVmaW5lIE1BQ19CQ0FTVCAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBNQUNfTUNBU1QgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgTUFDX1BST01JU0MgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIE1BQ19MT09QQkFDSyAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBNQUNfQUxMTUNBU1QgICAgIDB4MDAwMDAwMjAKKworI2RlZmluZSBTTElDX0RVUExFWCh4KSAgICAoKHg9PUxJTktfRlVMTEQpID8gIkZEWCIgOiAiSERYIikKKyNkZWZpbmUgU0xJQ19TUEVFRCh4KSAgICAgKCh4PT1MSU5LXzEwME1CKSA/ICIxMDBNYiIgOiAoKHg9PUxJTktfMTAwME1CKSA/ICIxMDAwTWIiIDogIiAxME1iIikpCisjZGVmaW5lIFNMSUNfTElOS1NUQVRFKHgpICgoeD09TElOS19ET1dOKSA/ICJEb3duIiA6ICJVcCAgIikKKyNkZWZpbmUgU0xJQ19BREFQVEVSX1NUQVRFKHgpICgoeD09QURBUFRfVVApID8gIlVQIiA6ICJEb3duIikKKyNkZWZpbmUgU0xJQ19DQVJEX1NUQVRFKHgpICAgICgoeD09Q0FSRF9VUCkgPyAiVVAiIDogIkRvd24iKQorCisKK3R5cGVkZWYgc3RydWN0IF9ldGhlcl9oZWFkZXIKK3sKKyAgICB1bnNpZ25lZCBjaGFyICAgIGV0aGVyX2Rob3N0WzZdOworICAgIHVuc2lnbmVkIGNoYXIgICAgZXRoZXJfc2hvc3RbNl07CisgICAgdXNob3J0ICAgZXRoZXJfdHlwZTsKK30gZXRoZXJfaGVhZGVyLCAqcF9ldGhlcl9oZWFkZXI7CisKKworI2RlZmluZSBOVU1fQ0ZHX1NQQUNFUyAgICAgIDIKKyNkZWZpbmUgTlVNX0NGR19SRUdTICAgICAgICA2NAorCit0eXBlZGVmIHN0cnVjdCBfcGh5c2NhcmRfdAoreworICAgIHN0cnVjdCBfYWRhcHRlcl90ICAqYWRhcHRlcltTTElDX01BWF9QT1JUU107CisgICAgc3RydWN0IF9waHlzY2FyZF90ICpuZXh0OworICAgIHVuc2lnbmVkIGludCAgICAgICAgICAgICAgICBhZGFwdGVyc19hbGxvY2Q7Cit9IHBoeXNjYXJkX3QsICpwX3BoeXNjYXJkX3Q7CisKK3R5cGVkZWYgc3RydWN0IF9zeGdiYXNlX2RyaXZlcgoreworCXNwaW5sb2NrX3QJZHJpdmVyX2xvY2s7CisJdW5zaWduZWQgbG9uZwlmbGFnczsJLyogaXJxc2F2ZSBmb3Igc3BpbmxvY2sgKi8KKwl1MzIJCW51bV9zeGdfY2FyZHM7CisJdTMyCQludW1fc3hnX3BvcnRzOworCXUzMgkJbnVtX3N4Z19wb3J0c19hY3RpdmU7CisJdTMyCQlkeW5hbWljX2ludGFnZzsKKwlwX3BoeXNjYXJkX3QJcGh5c19jYXJkOworfSBzeGdiYXNlX2RyaXZlcl90OworCisKK3R5cGVkZWYgc3RydWN0IF9hZGFwdGVyX3QKK3sKKwl2b2lkICogICAgICAgICAgICAgICBpZnA7CisJdW5zaWduZWQgaW50ICAgICAgICAgICAgICAgIHBvcnQ7CisJcF9waHlzY2FyZF90ICAgICAgICBwaHlzY2FyZDsKKwl1bnNpZ25lZCBpbnQgICAgICAgICAgICAgICAgcGh5c3BvcnQ7CisJdW5zaWduZWQgaW50ICAgICAgICAgICAgICAgIGNhcmRpbmRleDsKKwl1bnNpZ25lZCBpbnQgICAgICAgICAgICAgICAgY2FyZF9zaXplOworCXVuc2lnbmVkIGludCAgICAgICAgICAgICAgICBjaGlwaWQ7CisJdW5zaWduZWQgaW50ICAgICAgICAgICAgICAgIGJ1c251bWJlcjsKKwl1bnNpZ25lZCBpbnQgICAgICAgICAgICAgICAgc2xvdG51bWJlcjsKKwl1bnNpZ25lZCBpbnQgICAgICAgICAgICAgICAgZnVuY3Rpb25udW1iZXI7CisJdXNob3J0ICAgICAgICAgICAgICB2ZW5kaWQ7CisJdXNob3J0ICAgICAgICAgICAgICBkZXZpZDsKKwl1c2hvcnQgICAgICAgICAgICAgIHN1YnN5c2lkOworCXUzMiAgICAgICAgICAgICBpcnE7CisKKwl2b2lkICogICAgICAgICAgICAgICBzeGdfYWRhcHRlcjsKKwl1MzIgICAgICAgICAgICAgbkJ1c3lTZW5kOworCisJdm9pZCBfX2lvbWVtICoJYmFzZV9hZGRyOworCXUzMiAgICAgICAgICAgICBtZW1vcnlsZW5ndGg7CisJdTMyICAgICAgICAgICAgIGRyYW1iYXNlOworCXUzMiAgICAgICAgICAgICBkcmFtbGVuZ3RoOworCXVuc2lnbmVkIGludCAgICAgICAgICAgICAgICBxdWV1ZXNfaW5pdGlhbGl6ZWQ7CisJdW5zaWduZWQgaW50ICAgICAgICAgICAgICAgIGFsbG9jYXRlZDsKKwl1bnNpZ25lZCBpbnQgICAgICAgICAgICAgICAgYWN0aXZhdGVkOworCXUzMiAgICAgICAgICAgICBpbnRycmVnaXN0ZXJlZDsKKwl1bnNpZ25lZCBpbnQgICAgICAgICAgICAgICAgaXNwX2luaXRpYWxpemVkOworCXVuc2lnbmVkIGludCAgICAgICAgICAgICAgICBnZW5udW1iZXI7CisJdTMyICAgICAgICAgICAgIGN1cmFkZHJ1cHBlcjsKKwl1MzIgICAgICAgICAgICAgaXNyY29weTsKKwl1bnNpZ25lZCBjaGFyICAgICAgICAgICAgICAgc3RhdGU7CisJdW5zaWduZWQgY2hhciAgICAgICAgICAgICAgIGxpbmtzdGF0ZTsKKwl1bnNpZ25lZCBjaGFyICAgICAgICAgICAgICAgbGlua3NwZWVkOworCXVuc2lnbmVkIGNoYXIgICAgICAgICAgICAgICBsaW5rZHVwbGV4OworCXVuc2lnbmVkIGludCAgICAgICAgICAgICAgICBmbGFnczsKKwl1bnNpZ25lZCBjaGFyICAgICAgICAgICAgICAgbWFjYWRkcls2XTsKKwl1bnNpZ25lZCBjaGFyICAgICAgICAgICAgICAgY3Vycm1hY2FkZHJbNl07CisJdTMyICAgICAgICAgICAgIG1hY29wdHM7CisJdXNob3J0ICAgICAgICAgICAgICBkZXZmbGFnc19wcmV2OworCXU2NCAgICAgICAgICAgICBtY2FzdG1hc2s7CisJcF9tY2FzdF9hZGRyZXNzX3QgICBtY2FzdGFkZHJzOworCXN0cnVjdCB0aW1lcl9saXN0ICAgcGluZ3RpbWVyOworCXUzMiAgICAgICAgICAgICBwaW5ndGltZXJzZXQ7CisJc3RydWN0IHRpbWVyX2xpc3QgICBzdGF0c3RpbWVyOworCXUzMiAgICAgICAgICAgICBzdGF0c3RpbWVyc2V0OworCXN0cnVjdCB0aW1lcl9saXN0ICAgdnBjaV90aW1lcjsKKwl1MzIgICAgICAgICAgICAgdnBjaV90aW1lcnNldDsKKwlzdHJ1Y3QgdGltZXJfbGlzdCAgIGxvYWR0aW1lcjsKKwl1MzIgICAgICAgICAgICAgbG9hZHRpbWVyc2V0OworCisJdTMyICAgICAgICAgICAgIHhtaXRxX2Z1bGw7CisJdTMyICAgICAgICAgICAgIGFsbF9yZWdfd3JpdGVzOworCXUzMiAgICAgICAgICAgICBpY3JfcmVnX3dyaXRlczsKKwl1MzIgICAgICAgICAgICAgaXNyX3JlZ193cml0ZXM7CisJdTMyICAgICAgICAgICAgIGVycm9yX2ludGVycnVwdHM7CisJdTMyICAgICAgICAgICAgIGVycm9yX3JtaXNzX2ludGVycnVwdHM7CisJdTMyICAgICAgICAgICAgIHJ4X2Vycm9yczsKKwl1MzIgICAgICAgICAgICAgcmN2X2Ryb3BzOworCXUzMiAgICAgICAgICAgICByY3ZfaW50ZXJydXB0czsKKwl1MzIgICAgICAgICAgICAgeG1pdF9pbnRlcnJ1cHRzOworCXUzMiAgICAgICAgICAgICBsaW5rZXZlbnRfaW50ZXJydXB0czsKKwl1MzIgICAgICAgICAgICAgdXByX2ludGVycnVwdHM7CisJdTMyICAgICAgICAgICAgIG51bV9pc3JzOworCXUzMiAgICAgICAgICAgICBmYWxzZV9pbnRlcnJ1cHRzOworCXUzMiAgICAgICAgICAgICB0eF9wYWNrZXRzOworCXUzMiAgICAgICAgICAgICB4bWl0X2NvbXBsZXRlczsKKwl1MzIgICAgICAgICAgICAgdHhfZHJvcHM7CisJdTMyICAgICAgICAgICAgIHJjdl9icm9hZGNhc3RzOworCXUzMiAgICAgICAgICAgICByY3ZfbXVsdGljYXN0czsKKwl1MzIgICAgICAgICAgICAgcmN2X3VuaWNhc3RzOworCXUzMiAgICAgICAgICAgICBtYXhfaXNyX3JjdnM7CisJdTMyICAgICAgICAgICAgIG1heF9pc3JfeG1pdHM7CisJdTMyICAgICAgICAgICAgIHJjdl9pbnRlcnJ1cHRfeWllbGRzOworCXUzMiAgICAgICAgICAgICBpbnRhZ2dfcGVyaW9kOworCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzIHN0YXRzOworCXUzMiAqCQkJCQlNaW5pcG9ydEhhbmRsZTsJCS8vIE91ciBtaW5pcG9ydCBoYW5kbGUKKwlTWEdfU1RBVEUJCQkJCVN0YXRlOwkJCQkvLyBBZGFwdGVyIHN0YXRlCisJU1hHX0xJTktfU1RBVEUJCQkJTGlua1N0YXRlOwkJCS8vIExpbmsgc3RhdGUKKwl1NjQJCQkJCQlMaW5rU3BlZWQ7CQkJLy8gTGluayBTcGVlZAorCXUzMgkJCQkJCVBvd2VyU3RhdGU7CQkJLy8gTkRJUyBwb3dlciBzdGF0ZQorCXN0cnVjdCBfYWRhcHRlcl90ICAgCQkqTmV4dDsJCQkJLy8gTGlua2VkIGxpc3QKKwl1c2hvcnQJCQkJCQlBZGFwdGVySUQ7CQkJLy8gMS4ubgorCXVuc2lnbmVkIGNoYXIJCQkJCQlNYWNBZGRyWzZdOwkJCS8vIE91ciBwZXJtYW5lbnQgSFcgbWFjIGFkZHJlc3MKKwl1bnNpZ25lZCBjaGFyCQkJCQkJQ3Vyck1hY0FkZHJbNl07CQkvLyBPdXIgQ3VycmVudCBtYWMgYWRkcmVzcworCXBfbmV0X2RldmljZSAgICAgICAgICAgICAgICBuZXRkZXY7CisJcF9uZXRfZGV2aWNlICAgICAgICAgICAgICAgIG5leHRfbmV0ZGV2aWNlOworCXN0cnVjdCBwY2lfZGV2ICAgICAgICAgICAgKiBwY2lkZXY7CisKKwlQU1hHX01VTFRJQ0FTVF9BRERSRVNTCQlNdWx0aWNhc3RBZGRyczsJCS8vIE11bHRpY2FzdCBsaXN0CisJdTY0ICAgICAJCQkJTXVsdGljYXN0TWFzazsJCS8vIE11bHRpY2FzdCBtYXNrCisJdTMyICoJCQkJCUludGVycnVwdEhhbmRsZTsJLy8gUmVnaXN0ZXIgSW50ZXJydXB0IGhhbmRsZQorCXUzMgkJCQkJCUludGVycnVwdExldmVsOwkJLy8gRnJvbSBSZXNvdXJjZSBsaXN0CisJdTMyCQkJCQkJSW50ZXJydXB0VmVjdG9yOwkvLyBGcm9tIFJlc291cmNlIGxpc3QKKwlzcGlubG9ja190CUFkYXB0ZXJMb2NrOwkvKiBTZXJpYWxpemUgYWNjZXNzIGFkYXB0ZXIgcm91dGluZXMgKi8KKwlzcGlubG9ja190CUJpdDY0UmVnTG9jazsJLyogRm9yIHdyaXRpbmcgNjQtYml0IGFkZHJlc3NlcyAqLworCVBTWEdfSFdfUkVHUwkJCQlId1JlZ3M7CQkJCS8vIFNhaGFyYSBIVyBSZWdpc3RlciBNZW1vcnkgKEJBUjAvMSkKKwlQU1hHX1VDT0RFX1JFR1MJCQkJVWNvZGVSZWdzOwkJCS8vIE1pY3JvY29kZSBSZWdpc3RlciBNZW1vcnkgKEJBUjIvMykKKwlQU1hHX1RDQl9SRUdTCQkJCVRjYlJlZ3M7CQkJLy8gU2FtZSBhcyBVY29kZSByZWdzIC0gU2VlIHN4Z2h3LmgKKwl1c2hvcnQJCQkJCQlSZXNldERwY0NvdW50OwkJLy8gRm9yIHRpbWVvdXQKKwl1c2hvcnQJCQkJCQlSc3NEcGNDb3VudDsJCS8vIEZvciB0aW1lb3V0CisJdXNob3J0CQkJCQkJVmVuZG9ySUQ7CQkJLy8gVmVuZG9yIElECisJdXNob3J0CQkJCQkJRGV2aWNlSUQ7CQkJLy8gRGV2aWNlIElECisJdXNob3J0CQkJCQkJU3ViU3lzdGVtSUQ7CQkvLyBTdWItU3lzdGVtIElECisJdXNob3J0CQkJCQkJRnJhbWVTaXplOwkJCS8vIE1heGltdW0gZnJhbWUgc2l6ZQorCXUzMiAqCQkJCQlEbWFIYW5kbGU7CQkJLy8gTkRJUyBETUEgaGFuZGxlCisJdTMyICoJCQkJCVBhY2tldFBvb2xIYW5kbGU7CS8vIFVzZWQgd2l0aCBORElTIDUuMiBvbmx5LiAgRG9uJ3QgaWZkZWYgb3V0CisJdTMyICoJCQkJCUJ1ZmZlclBvb2xIYW5kbGU7CS8vIFVzZWQgd2l0aCBORElTIDUuMiBvbmx5LiAgRG9uJ3QgaWZkZWYgb3V0CisJdTMyCQkJCQkJTWFjRmlsdGVyOwkJCS8vIE5ESVMgTUFDIEZpbHRlcgorCXVzaG9ydAkJCQkJCUlwSWQ7CQkJCS8vIEZvciBzbG93cGF0aAorCVBTWEdfRVZFTlRfUklORwkJCQlFdmVudFJpbmdzOwkJCS8vIEhvc3QgZXZlbnQgcmluZ3MuICAxL0NQVSB0byAxNiBtYXgKKwlkbWFfYWRkcl90ICAgICAgICAgICAgICAJUEV2ZW50UmluZ3M7CQkvLyBQaHlzaWNhbCBhZGRyZXNzCisJdTMyCQkJCQkJTmV4dEV2ZW50W1NYR19NQVhfUlNTXTsJLy8gQ3VycmVudCBsb2NhdGlvbiBpbiByaW5nCisJZG1hX2FkZHJfdCAgICAgICAgICAJCVBUY2JCdWZmZXJzOwkJLy8gVENCIEJ1ZmZlcnMgLSBwaHlzaWNhbCBhZGRyZXNzCisJZG1hX2FkZHJfdAkgICAgICAgICAgICAJUFRjYkNvbXBCdWZmZXJzOwkvLyBUQ0IgQ29tcG9zaXRlIEJ1ZmZlcnMgLSBwaHlzIGFkZHIKKwlQU1hHX1hNVF9SSU5HCQkJCVhtdFJpbmdzOwkJCS8vIFRyYW5zbWl0IHJpbmdzCisJZG1hX2FkZHJfdAkJICAgICAgICAgICAgUFhtdFJpbmdzOwkJCS8vIFRyYW5zbWl0IHJpbmdzIC0gcGh5c2ljYWwgYWRkcmVzcworCVNYR19SSU5HX0lORk8JCQkJWG10UmluZ1plcm9JbmZvOwkvLyBUcmFuc21pdCByaW5nIDAgaW5mbworCXNwaW5sb2NrX3QJWG10WmVyb0xvY2s7CS8qIFRyYW5zbWl0IHJpbmcgMCBsb2NrICovCisJdTMyICoJCQkJCVhtdFJpbmdaZXJvSW5kZXg7CS8vIFNoYXJlZCBYTVQgcmluZyAwIGluZGV4CisJZG1hX2FkZHJfdCAgICAgICAgICAJCVBYbXRSaW5nWmVyb0luZGV4OwkvLyBTaGFyZWQgWE1UIHJpbmcgMCBpbmRleCAtIHBoeXNpY2FsCisJTElTVF9FTlRSWQkJCQkJRnJlZVByb3RvY29sSGVhZGVyczsvLyBGcmVlIHByb3RvY29sIGhlYWRlcnMKKwl1MzIJCQkJCQlGcmVlUHJvdG9IZHJDb3VudDsJLy8gQ291bnQKKwl2b2lkICoJCQkJCQlQcm90b2NvbEhlYWRlcnM7CS8vIEJsb2NrIG9mIHByb3RvY29sIGhlYWRlcgorCWRtYV9hZGRyX3QJICAgICAgICAgICAgCVBQcm90b2NvbEhlYWRlcnM7CS8vIEJsb2NrIG9mIHByb3RvY29sIGhlYWRlcnMgLSBwaHlzCisKKwlQU1hHX1JDVl9SSU5HCQkJCVJjdlJpbmdzOwkJCS8vIFJlY2VpdmUgcmluZ3MKKwlkbWFfYWRkcl90CSAgICAgICAgICAgIAlQUmN2UmluZ3M7CQkJLy8gUmVjZWl2ZSByaW5ncyAtIHBoeXNpY2FsIGFkZHJlc3MKKwlTWEdfUklOR19JTkZPCQkJCVJjdlJpbmdaZXJvSW5mbzsJLy8gUmVjZWl2ZSByaW5nIDAgaW5mbworCisJdTMyICoJCQkJCUlzcjsJCQkJLy8gSW50ZXJydXB0IHN0YXR1cyByZWdpc3RlcgorCWRtYV9hZGRyX3QJICAgICAgICAgICAgCVBJc3I7CQkJCS8vIElTUiAtIHBoeXNpY2FsIGFkZHJlc3MKKwl1MzIJCQkJCQlJc3JDb3B5W1NYR19NQVhfUlNTXTsJLy8gQ29weSBvZiBJU1IKKwl1c2hvcnQJCQkJCQlJbnRlcnJ1cHRzRW5hYmxlZDsJLy8gQml0bWFzayBvZiBlbmFibGVkIHZlY3RvcnMKKwl1bnNpZ25lZCBjaGFyICoJCQkJCQlJbmRpcmVjdGlvblRhYmxlOwkvLyBSU1MgaW5kaXJlY3Rpb24gdGFibGUKKwlkbWFfYWRkcl90CSAgICAgICAgICAgIAlQSW5kaXJlY3Rpb25UYWJsZTsJLy8gUGh5c2ljYWwgYWRkcmVzcworCXVzaG9ydAkJCQkJCVJzc1RhYmxlU2l6ZTsJCS8vIEZyb20gTkRJU19SRUNFSVZFX1NDQUxFX1BBUkFNRVRFUlMKKwl1c2hvcnQJCQkJCQlIYXNoS2V5U2l6ZTsJCS8vIEZyb20gTkRJU19SRUNFSVZFX1NDQUxFX1BBUkFNRVRFUlMKKwl1bnNpZ25lZCBjaGFyCQkJCQkJSGFzaFNlY3JldEtleVs0MF07CS8vIHJzcyBrZXkKKwl1MzIJCQkJCQlIYXNoSW5mb3JtYXRpb247CisJLy8gUmVjZWl2ZSBidWZmZXIgcXVldWVzCisJc3BpbmxvY2tfdAlSY3ZRTG9jazsJLyogUmVjZWl2ZSBRdWV1ZSBMb2NrICovCisJTElTVF9FTlRSWQkJCQkJRnJlZVJjdkJ1ZmZlcnM7CQkvLyBGcmVlIFNYR19EQVRBX0JVRkZFUiBxdWV1ZQorCUxJU1RfRU5UUlkJCQkJCUZyZWVSY3ZCbG9ja3M7CQkvLyBGcmVlIFNYR19SQ1ZfREVTQ1JJUFRPUl9CTE9DSyBRCisJTElTVF9FTlRSWQkJCQkJQWxsUmN2QmxvY2tzOwkJLy8gQWxsIFNYR19SQ1ZfQkxPQ0tzCisJdXNob3J0CQkJCQkJRnJlZVJjdkJ1ZmZlckNvdW50OwkvLyBOdW1iZXIgb2YgZnJlZSByY3YgZGF0YSBidWZmZXJzCisJdXNob3J0CQkJCQkJRnJlZVJjdkJsb2NrQ291bnQ7CS8vICMgb2YgZnJlZSByY3YgZGVzY3JpcHRvciBibG9ja3MKKwl1c2hvcnQJCQkJCQlBbGxSY3ZCbG9ja0NvdW50OwkvLyBOdW1iZXIgb2YgdG90YWwgcmVjZWl2ZSBibG9ja3MKKwl1c2hvcnQJCQkJCQlSZWNlaXZlQnVmZmVyU2l6ZTsJLy8gU1hHX1JDVl9EQVRBL0pVTUJPX0JVRkZFUl9TSVpFIG9ubHkKKwl1MzIJCQkJCQlBbGxvY2F0aW9uc1BlbmRpbmc7CS8vIFJlY2VpdmUgYWxsb2NhdGlvbiBwZW5kaW5nCisJdTMyCQkJCQkJUmN2QnVmZmVyc09uQ2FyZDsJLy8gU1hHX0RBVEFfQlVGRkVSUyBvd25lZCBieSBjYXJkCisJLy8gU0dMIGJ1ZmZlcnMKKwlzcGlubG9ja190CVNnbFFMb2NrOwkvKiBTR0wgUXVldWUgTG9jayAqLworCUxJU1RfRU5UUlkJCQkJCUZyZWVTZ2xCdWZmZXJzOwkJLy8gRnJlZSBTWEdfU0NBVFRFUl9HQVRIRVIKKwlMSVNUX0VOVFJZCQkJCQlBbGxTZ2xCdWZmZXJzOwkJLy8gQWxsIFNYR19TQ0FUVEVSX0dBVEhFUgorCXVzaG9ydAkJCQkJCUZyZWVTZ2xCdWZmZXJDb3VudDsJLy8gTnVtYmVyIG9mIGZyZWUgU0dMIGJ1ZmZlcnMKKwl1c2hvcnQJCQkJCQlBbGxTZ2xCdWZmZXJDb3VudDsJLy8gTnVtYmVyIG9mIHRvdGFsIFNHTCBidWZmZXJzCisJdTMyCQkJCQkJQ3VycmVudFRpbWU7CQkvLyBUaWNrIGNvdW50CisJdTMyCQkJCQkJRmFzdHBhdGhDb25uZWN0aW9uczsvLyAjIG9mIGZhc3RwYXRoIGNvbm5lY3Rpb25zCisJLy8gVmFyaW91cyBzaW5nbGUtYml0IGZsYWdzOgorCXUzMgkJCQkJCUJhc2ljQWxsb2NhdGlvbnM6MTsJLy8gTG9ja3MgYW5kIGxpc3RoZWFkcworCXUzMgkJCQkJCUludFJlZ2lzdGVyZWQ6MTsJLy8gSW50ZXJydXB0IHJlZ2lzdGVyZWQKKwl1MzIJCQkJCQlQaW5nT3V0c3RhbmRpbmc6MTsJLy8gUGluZyBvdXRzdGFuZGluZyB0byBjYXJkCisJdTMyCQkJCQkJRGVhZDoxOwkJCQkvLyBDYXJkIGRlYWQKKwl1MzIJCQkJCQlEdW1wRHJpdmVyOjE7CQkvLyBPSURfU0xJQ19EUklWRVJfRFVNUCByZXF1ZXN0CisJdTMyCQkJCQkJRHVtcENhcmQ6MTsJCQkvLyBPSURfU0xJQ19DQVJEX0RVTVAgcmVxdWVzdAorCXUzMgkJCQkJCUR1bXBDbWRSdW5uaW5nOjE7CS8vIER1bXAgY29tbWFuZCBpbiBwcm9ncmVzcworCXUzMgkJCQkJCURlYnVnUnVubmluZzoxOwkJLy8gQUdEQiBkZWJ1ZyBpbiBwcm9ncmVzcworCXUzMgkJCQkJCUp1bWJvRW5hYmxlZDoxOwkJLy8gSnVtYm8gZnJhbWVzIGVuYWJsZWQKKwl1MzIJCQkJCQlNc2lFbmFibGVkOjE7CQkvLyBNU0kgaW50ZXJydXB0IGVuYWJsZWQKKwl1MzIJCQkJCQlSc3NFbmFibGVkOjE7CQkvLyBSU1MgRW5hYmxlZAorCXUzMgkJCQkJCUZhaWxPbkJhZEVlcHJvbToxOwkvLyBGYWlsIG9uIEJhZCBFZXByb20KKwl1MzIJCQkJCQlEaWFnU3RhcnQ6MTsJCS8vIEluaXQgYWRhcHRlciBmb3IgZGlhZ25vc3RpYyBzdGFydAorCS8vIFN0YXRzCisJdTMyCQkJCQkJUGVuZGluZ1JjdkNvdW50OwkvLyBPdXRzdGFuZGluZyByY3YgaW5kaWNhdGlvbnMKKwl1MzIJCQkJCQlQZW5kaW5nWG10Q291bnQ7CS8vIE91dHN0YW5kaW5nIHNlbmQgcmVxdWVzdHMKKwlTWEdfU1RBVFMJCQkJCVN0YXRzOwkJCQkvLyBTdGF0aXN0aWNzCisJdTMyCQkJCQkJUmVhc3NCdWZzOwkJCS8vIE51bWJlciBvZiByZWFzc2VtYmx5IGJ1ZmZlcnMKKwkvLyBDYXJkIENyYXNoIEluZm8KKwl1c2hvcnQJCQkJCQlDcmFzaExvY2F0aW9uOwkJLy8gTWljcm9jb2RlIGNyYXNoIGxvY2F0aW9uCisJdW5zaWduZWQgY2hhcgkJCQkJCUNyYXNoQ3B1OwkJCS8vIFNhaGFyYSBDUFUgSUQKKwkvLyBEaWFnbm9zdGljcworCS8vCVBESUFHX0NNRAkJCQkJRGlhZ0NtZHM7CQkJLy8gTGlzdCBvZiBmcmVlIGRpYWdub3N0aWMgY29tbWFuZHMKKwkvLwlQRElBR19CVUZGRVIJCQkJRGlhZ0J1ZmZlcnM7CQkvLyBMaXN0IG9mIGZyZWUgZGlhZ25vc3RpYyBidWZmZXJzCisJLy8JUERJQUdfUkVRCQkJCQlEaWFnUmVxUTsJCQkvLyBMaXN0IG9mIG91dHN0YW5kaW5nIChhc3luY2hyb25vdXMpIGRpYWcgcmVxdWVzdHMKKwkvLwl1MzIJCQkJCQlEaWFnQ21kVGltZW91dDsJCS8vIFRpbWUgb3V0IGZvciBkaWFnIGNtZHMgKHNlY29uZHMpIFhYWFRPRE8gLSByZXBsYWNlIHdpdGggU1hHX1BBUkFNIHZhcj8KKwkvLwl1bnNpZ25lZCBjaGFyCQkJCQkJRGlhZ0RtYURlc2NbRE1BX0NQVV9DVFhTXTsJCS8vIEZyZWUgRE1BIGRlc2NyaXB0b3JzIGJpdCBmaWVsZCAoMzIgQ1BVIGN0eCAqIDggRE1BIGN0eCkKKworCS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCS8vIFB1dCBwcmVwcm9jZXNzb3ItY29uZGl0aW9uYWwgZmllbGRzIGF0IHRoZSBlbmQgc28gd2UgZG9uJ3QKKwkvLyBoYXZlIHRvIHJlY29tcGlsZSBzeGdkYmcgZXZlcnl0aW1lIHdlIHJlY29uZmlndXJlIHRoZSBkcml2ZXIKKwkvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKwl2b2lkICoJCQkJCQlQZW5kaW5nU2V0UnNzOwkJLy8gUGVuZGluZyBSU1MgcGFyYW1ldGVyIGNoYW5nZQorCXUzMgkJCQkJCUlQdjRIZHJTaXplOwkJLy8gU2hhcmVkIDUuMi82LjAgZW5jYXAgcGFyYW0KKwl1bnNpZ25lZCBjaGFyICogICAgICAgICAgCQkJSW50ZXJydXB0SW5mbzsJCS8vIEFsbG9jYXRlZCBieSB1cyBkdXJpbmcgQWRkRGV2aWNlCisjaWYgZGVmaW5lZChDT05GSUdfWDg2KQorCXUzMgkJCQkJCUFkZHJVcHBlcjsJCQkvLyBVcHBlciAzMiBiaXRzIG9mIDY0LWJpdCByZWdpc3RlcgorI2VuZGlmCisJLy8jaWYgU1hHX0ZBSUxVUkVfRFVNUAorCS8vCU5ESVNfRVZFTlQJCQkJCUR1bXBUaHJlYWRFdmVudDsJLy8gc3luY3Jvbml6ZSBkdW1wIHRocmVhZAorCS8vCUJPT0xFQU4JCQkJCQlEdW1wVGhyZWFkUnVubmluZzsJLy8gdGVybWluYXRpb24gZmxhZworCS8vCVBTWEdfRFVNUF9DTUQJCQkJRHVtcEJ1ZmZlcjsJCQkvLyA2OGsgLSBDbWQgYW5kIEJ1ZmZlcgorCS8vCWRtYV9hZGRyX3QJCVBEdW1wQnVmZmVyOwkJLy8gUGh5c2ljYWwgYWRkcmVzcworCS8vI2VuZGlmIC8vIFNYR19GQUlMVVJFX0RVTVAKKworfSBhZGFwdGVyX3QsICpwX2FkYXB0ZXJfdDsKKworI2lmIFNMSUNfRFVNUF9FTkFCTEVECisjZGVmaW5lIFNMSUNfRFVNUF9SRVFVRVNURUQgICAgICAxCisjZGVmaW5lIFNMSUNfRFVNUF9JTl9QUk9HUkVTUyAgICAyCisjZGVmaW5lIFNMSUNfRFVNUF9ET05FICAgICAgICAgICAzCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogTWljcm9jb2RlIGNyYXNoIGluZm9ybWF0aW9uIHN0cnVjdHVyZS4gIFRoaXMKKyAqIHN0cnVjdHVyZSBpcyB3cml0dGVuIG91dCB0byB0aGUgY2FyZCdzIFNSQU0gd2hlbiB0aGUgbWljcm9jb2RlIHBhbmljJ3MuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit0eXBlZGVmIHN0cnVjdCBfc2xpY19jcmFzaF9pbmZvIHsKKyAgICB1c2hvcnQgIGNwdV9pZDsKKyAgICB1c2hvcnQgIGNyYXNoX3BjOworfSBzbGljX2NyYXNoX2luZm8sICpwX3NsaWNfY3Jhc2hfaW5mbzsKKworI2RlZmluZSBDUkFTSF9JTkZPX09GRlNFVCAgIDB4MTU1QworCisjZW5kaWYKKworI2RlZmluZSBVUERBVEVfU1RBVFMobGFyZ2VzdGF0LCBuZXdzdGF0LCBvbGRzdGF0KSAgICAgICAgICAgICAgICAgICAgICAgIFwKK3sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgaWYgKChuZXdzdGF0KSA8IChvbGRzdGF0KSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAobGFyZ2VzdGF0KSArPSAoKG5ld3N0YXQpICsgKDB4RkZGRkZGRkYgLSBvbGRzdGF0ICsgMSkpOyAgICAgICAgIFwKKyAgICBlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIChsYXJnZXN0YXQpICs9ICgobmV3c3RhdCkgLSAob2xkc3RhdCkpOyAgICAgICAgICAgICAgICAgICAgICAgICAgXAorfQorCisjZGVmaW5lIFVQREFURV9TVEFUU19HQihsYXJnZXN0YXQsIG5ld3N0YXQsIG9sZHN0YXQpICAgICAgICAgICAgICAgICAgICAgXAoreyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAobGFyZ2VzdGF0KSArPSAoKG5ld3N0YXQpIC0gKG9sZHN0YXQpKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit9CisKKyNkZWZpbmUgRVRIRVJfRVFfQUREUihfQWRkckEsIF9BZGRyQiwgX1Jlc3VsdCkgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIF9SZXN1bHQgPSBUUlVFOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBpZiAoKih1MzIgKikoX0FkZHJBKSAhPSAqKHUzMiAqKShfQWRkckIpKSAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIF9SZXN1bHQgPSBGQUxTRTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGlmICgqKHUxNiAqKSgmKChfQWRkckEpWzRdKSkgIT0gKih1MTYgKikoJigoX0FkZHJCKVs0XSkpKSAgICAgICAgXAorICAgICAgICBfUmVzdWx0ID0gRkFMU0U7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK30KKworI2RlZmluZSBFVEhFUk1BWEZSQU1FICAgMTUxNAorI2RlZmluZSBKVU1CT01BWEZSQU1FICAgOTAxNAorCisjaWYgZGVmaW5lZChDT05GSUdfWDg2XzY0KSB8fCBkZWZpbmVkKENPTkZJR19JQTY0KQorI2RlZmluZSAgIFNYR19HRVRfQUREUl9MT1coX2FkZHIpICAodTMyKSgodTY0KShfYWRkcikgJiAweDAwMDAwMDAwRkZGRkZGRkYpCisjZGVmaW5lICAgU1hHX0dFVF9BRERSX0hJR0goX2FkZHIpICAodTMyKSgoKHU2NCkoX2FkZHIpID4+IDMyKSAmIDB4MDAwMDAwMDBGRkZGRkZGRikKKyNlbHNlCisjZGVmaW5lICAgU1hHX0dFVF9BRERSX0xPVyhfYWRkcikgICAodTMyKV9hZGRyCisjZGVmaW5lICAgU1hHX0dFVF9BRERSX0hJR0goX2FkZHIpICAodTMyKTAKKyNlbmRpZgorCisjZGVmaW5lIEZMVVNIICAgICAgIFRSVUUKKyNkZWZpbmUgRE9OVF9GTFVTSCAgRkFMU0UKKworI2RlZmluZSBTSU9DU0xJQ0RVTVBDQVJEICAgICAgICAgU0lPQ0RFVlBSSVZBVEUrOQorI2RlZmluZSBTSU9DU0xJQ1NFVElOVEFHRyAgICAgICAgU0lPQ0RFVlBSSVZBVEUrMTAKKyNkZWZpbmUgU0lPQ1NMSUNUUkFDRURVTVAgICAgICAgIFNJT0NERVZQUklWQVRFKzExCisKKyNlbmRpZiAvKiAgX19TWEdfRFJJVkVSX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3N4Zy9zeGdfb3MuaCBiL2RyaXZlcnMvc3RhZ2luZy9zeGcvc3hnX29zLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjZmYjBmZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9zeGcvc3hnX29zLmgKQEAgLTAsMCArMSwxNTQgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwMC0yMDA4IEFsYWNyaXRlY2gsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQKKyAqICAgIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFMQUNSSVRFQ0gsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBTEFDUklURUNILCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKKyAqIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICoKKyAqIFRoZSB2aWV3cyBhbmQgY29uY2x1c2lvbnMgY29udGFpbmVkIGluIHRoZSBzb2Z0d2FyZSBhbmQgZG9jdW1lbnRhdGlvbgorICogYXJlIHRob3NlIG9mIHRoZSBhdXRob3JzIGFuZCBzaG91bGQgbm90IGJlIGludGVycHJldGVkIGFzIHJlcHJlc2VudGluZworICogb2ZmaWNpYWwgcG9saWNpZXMsIGVpdGhlciBleHByZXNzZWQgb3IgaW1wbGllZCwgb2YgQWxhY3JpdGVjaCwgSW5jLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyAqIEZJTEVOQU1FOiBzeGdfb3MuaAorICoKKyAqIFRoZXNlIGFyZSB0aGUgTGludXgtc3BlY2lmaWMgZGVmaW5pdGlvbnMgcmVxdWlyZWQgZm9yIHRoZSBTTElDT1NTCisgKiBkcml2ZXIsIHdoaWNoIHNob3VsZCBhbGxvdyBmb3IgZ3JlYXRlciBwb3J0YWJpbGl0eSB0byBvdGhlciBPU2VzLgorICovCisjaWZuZGVmIF9TTElDX09TX1NQRUNJRklDX0hfCisjZGVmaW5lIF9TTElDX09TX1NQRUNJRklDX0hfCisKKyNkZWZpbmUgRkFMU0UJKDApCisjZGVmaW5lIFRSVUUJKDEpCisKKwordHlwZWRlZiBzdHJ1Y3QgX0xJU1RfRU5UUlkgeworCXN0cnVjdCBfTElTVF9FTlRSWSAqbmxlX2ZsaW5rOworCXN0cnVjdCBfTElTVF9FTlRSWSAqbmxlX2JsaW5rOworfSBsaXN0X2VudHJ5LCBMSVNUX0VOVFJZLCAqUExJU1RfRU5UUlk7CisKKyNkZWZpbmUgSW5pdGlhbGl6ZUxpc3RIZWFkKGwpICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgKGwpLT5ubGVfZmxpbmsgPSAobCktPm5sZV9ibGluayA9IChsKQorCisjZGVmaW5lIElzTGlzdEVtcHR5KGgpICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICgoaCktPm5sZV9mbGluayA9PSAoaCkpCisKKyNkZWZpbmUgUmVtb3ZlRW50cnlMaXN0KGUpICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICBsaXN0X2VudHJ5ICAgICAgICAgICAgICAqYjsgICAgIFwKKyAgICAgICAgICAgICAgICBsaXN0X2VudHJ5ICAgICAgICAgICAgICAqZjsgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICBmID0gKGUpLT5ubGVfZmxpbms7ICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICBiID0gKGUpLT5ubGVfYmxpbms7ICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICBiLT5ubGVfZmxpbmsgPSBmOyAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICBmLT5ubGVfYmxpbmsgPSBiOyAgICAgICAgICAgICAgIFwKKyAgICAgICAgfSB3aGlsZSAoMCkKKworLyogVGhlc2UgdHdvIGhhdmUgdG8gYmUgaW5saW5lZCBzaW5jZSB0aGV5IHJldHVybiB0aGluZ3MuICovCisKK3N0YXRpYyBfX2lubGluZSBQTElTVF9FTlRSWQorUmVtb3ZlSGVhZExpc3QobGlzdF9lbnRyeSAqbCkKK3sKKyAgICAgICAgbGlzdF9lbnRyeSAgICAgICAgICAgICAgKmY7CisgICAgICAgIGxpc3RfZW50cnkgICAgICAgICAgICAgICplOworCisgICAgICAgIGUgPSBsLT5ubGVfZmxpbms7CisgICAgICAgIGYgPSBlLT5ubGVfZmxpbms7CisgICAgICAgIGwtPm5sZV9mbGluayA9IGY7CisgICAgICAgIGYtPm5sZV9ibGluayA9IGw7CisKKyAgICAgICAgcmV0dXJuIChlKTsKK30KKworc3RhdGljIF9faW5saW5lIFBMSVNUX0VOVFJZCitSZW1vdmVUYWlsTGlzdChsaXN0X2VudHJ5ICpsKQoreworICAgICAgICBsaXN0X2VudHJ5ICAgICAgICAgICAgICAqYjsKKyAgICAgICAgbGlzdF9lbnRyeSAgICAgICAgICAgICAgKmU7CisKKyAgICAgICAgZSA9IGwtPm5sZV9ibGluazsKKyAgICAgICAgYiA9IGUtPm5sZV9ibGluazsKKyAgICAgICAgbC0+bmxlX2JsaW5rID0gYjsKKyAgICAgICAgYi0+bmxlX2ZsaW5rID0gbDsKKworICAgICAgICByZXR1cm4gKGUpOworfQorCisKKyNkZWZpbmUgSW5zZXJ0VGFpbExpc3QobCwgZSkgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICBsaXN0X2VudHJ5ICAgICAgICAgICAgICAqYjsgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICBiID0gKGwpLT5ubGVfYmxpbms7ICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAoZSktPm5sZV9mbGluayA9IChsKTsgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAoZSktPm5sZV9ibGluayA9IGI7ICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICBiLT5ubGVfZmxpbmsgPSAoZSk7ICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAobCktPm5sZV9ibGluayA9IChlKTsgICAgICAgICAgIFwKKyAgICAgICAgfSB3aGlsZSAoMCkKKworI2RlZmluZSBJbnNlcnRIZWFkTGlzdChsLCBlKSAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIGxpc3RfZW50cnkgICAgICAgICAgICAgICpmOyAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIGYgPSAobCktPm5sZV9mbGluazsgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIChlKS0+bmxlX2ZsaW5rID0gZjsgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIChlKS0+bmxlX2JsaW5rID0gbDsgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIGYtPm5sZV9ibGluayA9IChlKTsgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIChsKS0+bmxlX2ZsaW5rID0gKGUpOyAgICAgICAgICAgXAorICAgICAgICB9IHdoaWxlICgwKQorCisKKyNkZWZpbmUgQVRLX0RFQlVHICAxCisKKyNpZiBBVEtfREVCVUcKKyNkZWZpbmUgU0xJQ19USU1FU1RBTVAodmFsdWUpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHN0cnVjdCB0aW1ldmFsICB0aW1ldjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBkb19nZXR0aW1lb2ZkYXkoJnRpbWV2KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgdmFsdWUgPSB0aW1ldi50dl9zZWMqMTAwMDAwMCArIHRpbWV2LnR2X3VzZWM7ICAgICAgICAgICAgICAgICAgICAgICBcCit9CisjZWxzZQorI2RlZmluZSBTTElDX1RJTUVTVEFNUCh2YWx1ZSkKKyNlbmRpZgorCisKKy8qKioqKioqKioqKioqKioqKiogIFNYRyBERUZJTkVTICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmZGVmICBBVEtEQkcKKyNkZWZpbmUgU1hHX1RJTUVTVEFNUCh2YWx1ZSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgc3RydWN0IHRpbWV2YWwgIHRpbWV2OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGRvX2dldHRpbWVvZmRheSgmdGltZXYpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB2YWx1ZSA9IHRpbWV2LnR2X3NlYyoxMDAwMDAwICsgdGltZXYudHZfdXNlYzsgICAgICAgICAgICAgICAgICAgICAgIFwKK30KKyNlbHNlCisjZGVmaW5lIFNYR19USU1FU1RBTVAodmFsdWUpCisjZW5kaWYKKworI2RlZmluZSBXUklURV9SRUcocmVnLHZhbHVlLGZsdXNoKSAgICAgICAgICAgICAgICAgIHN4Z19yZWczMl93cml0ZSgoJnJlZyksICh2YWx1ZSksIChmbHVzaCkpCisjZGVmaW5lIFdSSVRFX1JFRzY0KGEscmVnLHZhbHVlLGNwdSkgICAgICAgICAgICAgICAgc3hnX3JlZzY0X3dyaXRlKChhKSwoJnJlZyksKHZhbHVlKSwoY3B1KSkKKyNkZWZpbmUgUkVBRF9SRUcocmVnLHZhbHVlKSAgICh2YWx1ZSkgPSByZWFkbCgodm9pZCBfX2lvbWVtICopKCZyZWcpKQorCisjZW5kaWYgIC8qIF9TTElDX09TX1NQRUNJRklDX0hfICAqLworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvc3hnL3N4Z2RiZy5oIGIvZHJpdmVycy9zdGFnaW5nL3N4Zy9zeGdkYmcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZmI2YzdjCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3N4Zy9zeGdkYmcuaApAQCAtMCwwICsxLDE5MCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogQ29weXJpZ2h0IKkgMjAwMC0yMDA4IEFsYWNyaXRlY2gsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogJElkOiBzeGdkYmcuaCx2IDEuMSAyMDA4LzA2LzI3IDEyOjQ5OjI4IG1vb2sgRXhwICQKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZAorICogICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQUxBQ1JJVEVDSCwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFMQUNSSVRFQ0gsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgorICogVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKgorICogVGhlIHZpZXdzIGFuZCBjb25jbHVzaW9ucyBjb250YWluZWQgaW4gdGhlIHNvZnR3YXJlIGFuZCBkb2N1bWVudGF0aW9uCisgKiBhcmUgdGhvc2Ugb2YgdGhlIGF1dGhvcnMgYW5kIHNob3VsZCBub3QgYmUgaW50ZXJwcmV0ZWQgYXMgcmVwcmVzZW50aW5nCisgKiBvZmZpY2lhbCBwb2xpY2llcywgZWl0aGVyIGV4cHJlc3NlZCBvciBpbXBsaWVkLCBvZiBBbGFjcml0ZWNoLCBJbmMuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorICogRklMRU5BTUU6IHN4Z2RiZy5oCisgKgorICogQWxsIGRlYnVnIGFuZCBhc3NlcnRpb24tYmFzZWQgZGVmaW5pdGlvbnMgYW5kIG1hY3JvcyBhcmUgaW5jbHVkZWQKKyAqIGluIHRoaXMgZmlsZSBmb3IgdGhlIFNYR09TUyBkcml2ZXIuCisgKi8KKyNpZm5kZWYgX1NYR19ERUJVR19IXworI2RlZmluZSBfU1hHX0RFQlVHX0hfCisKKyNkZWZpbmUgQVRLREJHICAxCisjZGVmaW5lIEFUS19UUkFDRV9FTkFCTEVEIDEKKworI2RlZmluZSBEQkdfRVJST1IobiwgYXJncy4uLikJcHJpbnRrKEtFUk5fRU1FUkcgbiwgIyNhcmdzKQorCisjaWZkZWYgQVNTRVJUCisjdW5kZWYgQVNTRVJUCisjZW5kaWYKKworI2lmZGVmIFNYR19BU1NFUlRfRU5BQkxFRAorI2lmbmRlZiBBU1NFUlQKKyNkZWZpbmUgQVNTRVJUKGEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBpZiAoIShhKSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIERCR19FUlJPUigiQVNTRVJUKCkgRmFpbHVyZTogZmlsZSAlcywgZnVuY3Rpb24gJXMgIGxpbmUgJWRcbiIsXAorICAgICAgICAgICAgICAgIF9fRklMRV9fLCBfX0ZVTkNUSU9OX18sIF9fTElORV9fKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfQorI2VuZGlmCisjZWxzZQorI2lmbmRlZiBBU1NFUlQKKyNkZWZpbmUgQVNTRVJUKGEpCisjZW5kaWYKKyNlbmRpZiAvKiBTWEdfQVNTRVJUX0VOQUJMRUQgICovCisKKworI2lmZGVmIEFUS0RCRworLyoKKyAqICBHbG9iYWwgZm9yIHRpbWVyIGdyYW51bGFyaXR5OyBldmVyeSBkcml2ZXIgbXVzdCBoYXZlIGFuIGluc3RhbmNlCisgKiAgb2YgdGhpcyBpbml0aWFsaXplZCB0byAwCisgKi8KKworZXh0ZXJuIHVsb25nIEFUS1RpbWVyRGl2OworCisvKgorICogdHJhY2VfZW50cnlfdCAtCisgKgorICogVGhpcyBzdHJ1Y3R1cmUgZGVmaW5lcyBhbiBlbnRyeSBpbiB0aGUgdHJhY2UgYnVmZmVyLiAgVGhlCisgKiBmaXJzdCBmZXcgZmllbGRzIG1lYW4gdGhlIHNhbWUgZnJvbSBlbnRyeSB0byBlbnRyeSwgd2hpbGUKKyAqIHRoZSBtZWFuaW5nIG9mIGxhc3Qgc2V2ZXJhbCBmaWVsZHMgY2hhbmdlIHRvIHN1aXQgdGhlCisgKiBuZWVkcyBvZiB0aGUgdHJhY2UgZW50cnkuICBUeXBpY2FsbHkgdGhleSBhcmUgZnVuY3Rpb24gY2FsbAorICogcGFyYW1ldGVycy4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgX3RyYWNlX2VudHJ5X3MgeworICAgICAgICBjaGFyICAgICAgbmFtZVs4XTsgICAgICAgIC8qIDggY2hhcmFjdGVyIG5hbWUgLSBsaWtlICdzJ2knbSdiJ2EncidjJ3YnICovCisgICAgICAgIHUzMiAgIHRpbWU7ICAgICAgICAgICAvKiBDdXJyZW50IGNsb2NrIHRpYyAqLworICAgICAgICB1bnNpZ25lZCBjaGFyICAgICBjcHU7ICAgICAgICAgICAgLyogQ3VycmVudCBDUFUgKi8KKyAgICAgICAgdW5zaWduZWQgY2hhciAgICAgaXJxbDsgICAgICAgICAgIC8qIEN1cnJlbnQgSVJRTCAqLworICAgICAgICB1bnNpZ25lZCBjaGFyICAgICBkcml2ZXI7ICAgICAgICAgLyogVGhlIGRyaXZlciB3aGljaCBhZGRlZCB0aGUgdHJhY2UgY2FsbCAqLworICAgICAgICB1bnNpZ25lZCBjaGFyICAgICBwYWQyOyAgICAgICAgICAgLyogcGFkIHRvIDQgYnl0ZSBib3VuZGFyeSAtIHdpbGwgcHJvYmFibHkgZ2V0IHVzZWQgKi8KKyAgICAgICAgdTMyICAgYXJnMTsgICAgICAgICAgIC8qIENhbGxlciBhcmcxICovCisgICAgICAgIHUzMiAgIGFyZzI7ICAgICAgICAgICAvKiBDYWxsZXIgYXJnMiAqLworICAgICAgICB1MzIgICBhcmczOyAgICAgICAgICAgLyogQ2FsbGVyIGFyZzMgKi8KKyAgICAgICAgdTMyICAgYXJnNDsgICAgICAgICAgIC8qIENhbGxlciBhcmc0ICovCit9IHRyYWNlX2VudHJ5X3QsICpwdHJhY2VfZW50cnlfdDsKKworLyoKKyAqIERyaXZlciB0eXBlcyBmb3IgZHJpdmVyIGZpZWxkIGluIHRyYWNlX2VudHJ5X3QKKyAqLworI2RlZmluZSBUUkFDRV9TWEcgICAgICAgICAgICAgMQorI2RlZmluZSBUUkFDRV9WUENJICAgICAgICAgICAgMgorI2RlZmluZSBUUkFDRV9TTElDICAgICAgICAgICAgMworCisjZGVmaW5lIFRSQUNFX0VOVFJJRVMgICAxMDI0CisKK3R5cGVkZWYgc3RydWN0IF9zeGdfdHJhY2VfYnVmZmVyX3QKK3sKKyAgICAgICAgdW5zaWduZWQgaW50ICAgICAgICAgICAgICAgICAgICBzaXplOyAgICAgICAgICAgICAgICAgIC8qIGFpZCBmb3Igd2luZGJnIGV4dGVuc2lvbiAqLworICAgICAgICB1bnNpZ25lZCBpbnQgICAgICAgICAgICAgICAgICAgIGluOyAgICAgICAgICAgICAgICAgICAgLyogV2hlcmUgdG8gYWRkICovCisgICAgICAgIHVuc2lnbmVkIGludCAgICAgICAgICAgICAgICAgICAgbGV2ZWw7ICAgICAgICAgICAgICAgICAvKiBDdXJyZW50IFRyYWNlIGxldmVsICovCisJc3BpbmxvY2tfdAlsb2NrOyAgICAgICAgICAgICAgICAgIC8qIEZvciBNUCB0cmFjaW5nICovCisgICAgICAgIHRyYWNlX2VudHJ5X3QgICAgICAgICAgIGVudHJpZXNbVFJBQ0VfRU5UUklFU107LyogVGhlIGNpcmN1bGFyIGJ1ZmZlciAqLworfSBzeGdfdHJhY2VfYnVmZmVyX3Q7CisKKy8qCisgKiBUaGUgdHJhY2UgbGV2ZWxzCisgKgorICogWFhYIEF0IHRoZSBtb21lbnQgSSBhbSBvbmx5IGRlZmluaW5nIGNyaXRpY2FsLCBpbXBvcnRhbnQsIGFuZCBub2lzeS4KKyAqIEkgYW0gbGVhdmluZyByb29tIGZvciBtb3JlIGlmIGFueW9uZSB3YW50cyB0aGVtLgorICovCisjZGVmaW5lIFRSQUNFX05PTkUgICAgICAgICAgICAgIDAgICAvKiBGb3IgdHJhY2UgbGV2ZWwgLSBpZiBubyB0cmFjaW5nIHdhbnRlZCAqLworI2RlZmluZSBUUkFDRV9DUklUSUNBTCAgICAgICAgICAxICAgLyogbWluaW1hbCB0cmFjaW5nIC0gb25seSBjcml0aWNhbCBzdHVmZiAqLworI2RlZmluZSBUUkFDRV9JTVBPUlRBTlQgICAgICAgICA1ICAgLyogbW9yZSB0cmFjaW5nIC0gYW55dGhpbmcgaW1wb3J0YW50ICovCisjZGVmaW5lIFRSQUNFX05PSVNZICAgICAgICAgICAgIDEwICAvKiBFdmVyeXRoaW5nIGluIHRoZSB3b3JsZCAqLworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogVGhlIG1hY3JvcyB0aGVtc2VsdmVzIC0KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmIEFUS19UUkFDRV9FTkFCTEVECisjZGVmaW5lIFNYR19UUkFDRV9JTklUKGJ1ZmZlciwgdGxldmVsKQkJCQlcCit7CQkJCQkJCQlcCisJbWVtc2V0KChidWZmZXIpLCAwLCBzaXplb2Yoc3hnX3RyYWNlX2J1ZmZlcl90KSk7CVwKKwkoYnVmZmVyKS0+bGV2ZWwgPSAodGxldmVsKTsJCQkJXAorCShidWZmZXIpLT5zaXplID0gVFJBQ0VfRU5UUklFUzsJCQkJXAorCXNwaW5fbG9ja19pbml0KCYoYnVmZmVyKS0+bG9jayk7CQkJXAorfQorI2Vsc2UKKyNkZWZpbmUgU1hHX1RSQUNFX0lOSVQoYnVmZmVyLCB0bGV2ZWwpCisjZW5kaWYKKworLyoKKyAqIFRoZSB0cmFjZSBtYWNyby4gIFRoaXMgaXMgYWN0aXZlIG9ubHkgaWYgQVRLX1RSQUNFX0VOQUJMRUQgaXMgc2V0LgorICovCisjaWYgQVRLX1RSQUNFX0VOQUJMRUQKKyNkZWZpbmUgU1hHX1RSQUNFKHRkcml2ZXIsIGJ1ZmZlciwgdGxldmVsLCB0bmFtZSwgYTEsIGEyLCBhMywgYTQpIHsgICAgICAgIFwKKyAgICAgICAgaWYgKChidWZmZXIpICYmICgoYnVmZmVyKS0+bGV2ZWwgPj0gKHRsZXZlbCkpKSB7ICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgICAgICAgICAgICB0cmFjZV9pcnFsID0gMDsgICAgLyogPz8/Pz8/IEZJWCBUSElTICAqLyAgICBcCisgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICAgICAgICAgICAgdHJhY2VfbGVuOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIHB0cmFjZV9lbnRyeV90ICB0cmFjZV9lbnRyeTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgc3RydWN0IHRpbWV2YWwgIHRpbWV2OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIHNwaW5fbG9jaygmKGJ1ZmZlciktPmxvY2spOyAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIHRyYWNlX2VudHJ5ID0gJihidWZmZXIpLT5lbnRyaWVzWyhidWZmZXIpLT5pbl07ICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgZG9fZ2V0dGltZW9mZGF5KCZ0aW1ldik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIG1lbXNldCh0cmFjZV9lbnRyeS0+bmFtZSwgMCwgOCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgdHJhY2VfbGVuID0gc3RybGVuKHRuYW1lKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICB0cmFjZV9sZW4gPSB0cmFjZV9sZW4gPiA4ID8gOCA6IHRyYWNlX2xlbjsgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIG1lbWNweSh0cmFjZV9lbnRyeS0+bmFtZSwgKHRuYW1lKSwgdHJhY2VfbGVuKTsgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgdHJhY2VfZW50cnktPnRpbWUgPSB0aW1ldi50dl91c2VjOyAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICB0cmFjZV9lbnRyeS0+Y3B1ID0gKHVuc2lnbmVkIGNoYXIpKHNtcF9wcm9jZXNzb3JfaWQoKSAmIDB4RkYpOyAgICAgICBcCisgICAgICAgICAgICAgICAgdHJhY2VfZW50cnktPmRyaXZlciA9ICh0ZHJpdmVyKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICB0cmFjZV9lbnRyeS0+aXJxbCA9IHRyYWNlX2lycWw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIHRyYWNlX2VudHJ5LT5hcmcxID0gKHVsb25nKShhMSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgdHJhY2VfZW50cnktPmFyZzIgPSAodWxvbmcpKGEyKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICB0cmFjZV9lbnRyeS0+YXJnMyA9ICh1bG9uZykoYTMpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIHRyYWNlX2VudHJ5LT5hcmc0ID0gKHVsb25nKShhNCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAoYnVmZmVyKS0+aW4rKzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIGlmICgoYnVmZmVyKS0+aW4gPT0gVFJBQ0VfRU5UUklFUykgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAoYnVmZmVyKS0+aW4gPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIHNwaW5fdW5sb2NrKCYoYnVmZmVyKS0+bG9jayk7ICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK30KKyNlbHNlCisjZGVmaW5lIFNYR19UUkFDRSh0ZHJpdmVyLCBidWZmZXIsIHRsZXZlbCwgdG5hbWUsIGExLCBhMiwgYTMsIGE0KQorI2VuZGlmCisKKyNlbmRpZgorCisjZW5kaWYgIC8qICBfU1hHX0RFQlVHX0hfICAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3N4Zy9zeGdoaWYuaCBiL2RyaXZlcnMvc3RhZ2luZy9zeGcvc3hnaGlmLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWQyNmNlYQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9zeGcvc3hnaGlmLmgKQEAgLTAsMCArMSw4NjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgqSAxOTk3LTIwMDcgQWxhY3JpdGVjaCwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKgorICogJElkOiBzeGdoaWYuaCx2IDEuNSAyMDA4LzA3LzI0IDE5OjE4OjIyIGNocmlzIEV4cCAkCisgKgorICogc3hnaGlmLmg6CisgKgorICogVGhpcyBmaWxlIGNvbnRhaW5zIHN0cnVjdHVyZXMgYW5kIGRlZmluaXRpb25zIGZvciB0aGUKKyAqIEFsYWNyaXRlY2ggU2FoYXJhIGhvc3QgaW50ZXJmYWNlCisgKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFVDT0RFIFJlZ2lzdGVycworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit0eXBlZGVmIHN0cnVjdCBfU1hHX1VDT0RFX1JFR1MgeworCS8vIEFkZHJlc3MgMCAtIDB4M0YgPSBDb21tYW5kIGNvZGVzIDAtMTUgZm9yIFRDQiAwLiAgRXhjb2RlIDAKKwl1MzIJCUljcjsJCQkvLyBDb2RlID0gMCAoZXh0ZW5kZWQpLCBFeENvZGUgPSAwIC0gSW50IGNvbnRyb2wKKwl1MzIJCVJzdmRSZWcxOwkJLy8gQ29kZSA9IDEgLSBUT0UgLU5BCisJdTMyCQlSc3ZkUmVnMjsJCS8vIENvZGUgPSAyIC0gVE9FIC1OQQorCXUzMgkJUnN2ZFJlZzM7CQkvLyBDb2RlID0gMyAtIFRPRSAtTkEKKwl1MzIJCVJzdmRSZWc0OwkJLy8gQ29kZSA9IDQgLSBUT0UgLU5BCisJdTMyCQlSc3ZkUmVnNTsJCS8vIENvZGUgPSA1IC0gVE9FIC1OQQorCXUzMgkJQ2FyZFVwOwkJCS8vIENvZGUgPSA2IC0gTWljcm9jb2RlIGluaXRpYWxpemVkIHdoZW4gMQorCXUzMgkJUnN2ZFJlZzc7CQkvLyBDb2RlID0gNyAtIFRPRSAtTkEKKwl1MzIJCUNvZGVOb3RVc2VkWzhdOwkJLy8gQ29kZXMgOC0xNSBub3QgdXNlZC4gIEV4Q29kZSA9IDAKKwkvLyBUaGlzIGJyaW5ncyB1cyB0byBFeENvZGUgMSBhdCBhZGRyZXNzIDB4NDAgPSBJbnRlcnJ1cHQgc3RhdHVzIHBvaW50ZXIKKwl1MzIJCUlzcDsJCQkvLyBDb2RlID0gMCAoZXh0ZW5kZWQpLCBFeENvZGUgPSAxCisJdTMyCQlQYWRFeDFbMTVdOwkJLy8gQ29kZXMgMS0xNSBub3QgdXNlZCB3aXRoIGV4dGVuZGVkIGNvZGVzCisJLy8gRXhDb2RlIDIgPSBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyCisJdTMyCQlJc3I7CQkJLy8gQ29kZSA9IDAgKGV4dGVuZGVkKSwgRXhDb2RlID0gMgorCXUzMgkJUGFkRXgyWzE1XTsKKwkvLyBFeENvZGUgMyA9IEV2ZW50IGJhc2UgcmVnaXN0ZXIuICBMb2NhdGlvbiBvZiBldmVudCByaW5ncworCXUzMgkJRXZlbnRCYXNlOwkJLy8gQ29kZSA9IDAgKGV4dGVuZGVkKSwgRXhDb2RlID0gMworCXUzMgkJUGFkRXgzWzE1XTsKKwkvLyBFeENvZGUgNCA9IEV2ZW50IHJpbmcgc2l6ZQorCXUzMgkJRXZlbnRTaXplOwkJLy8gQ29kZSA9IDAgKGV4dGVuZGVkKSwgRXhDb2RlID0gNAorCXUzMgkJUGFkRXg0WzE1XTsKKwkvLyBFeENvZGUgNSA9IFRDQiBCdWZmZXJzIGJhc2UgYWRkcmVzcworCXUzMgkJVGNiQmFzZTsJCS8vIENvZGUgPSAwIChleHRlbmRlZCksIEV4Q29kZSA9IDUKKwl1MzIJCVBhZEV4NVsxNV07CisJLy8gRXhDb2RlIDYgPSBUQ0IgQ29tcG9zaXRlIEJ1ZmZlcnMgYmFzZSBhZGRyZXNzCisJdTMyCQlUY2JDb21wQmFzZTsJCS8vIENvZGUgPSAwIChleHRlbmRlZCksIEV4Q29kZSA9IDYKKwl1MzIJCVBhZEV4NlsxNV07CisJLy8gRXhDb2RlIDcgPSBUcmFuc21pdCByaW5nIGJhc2UgYWRkcmVzcworCXUzMgkJWG10QmFzZTsJCS8vIENvZGUgPSAwIChleHRlbmRlZCksIEV4Q29kZSA9IDcKKwl1MzIJCVBhZEV4N1sxNV07CisJLy8gRXhDb2RlIDggPSBUcmFuc21pdCByaW5nIHNpemUKKwl1MzIJCVhtdFNpemU7CQkvLyBDb2RlID0gMCAoZXh0ZW5kZWQpLCBFeENvZGUgPSA4CisJdTMyCQlQYWRFeDhbMTVdOworCS8vIEV4Q29kZSA5ID0gUmVjZWl2ZSByaW5nIGJhc2UgYWRkcmVzcworCXUzMgkJUmN2QmFzZTsJCS8vIENvZGUgPSAwIChleHRlbmRlZCksIEV4Q29kZSA9IDkKKwl1MzIJCVBhZEV4OVsxNV07CisJLy8gRXhDb2RlIDEwID0gUmVjZWl2ZSByaW5nIHNpemUKKwl1MzIJCVJjdlNpemU7CQkvLyBDb2RlID0gMCAoZXh0ZW5kZWQpLCBFeENvZGUgPSAxMAorCXUzMgkJUGFkRXgxMFsxNV07CisJLy8gRXhDb2RlIDExID0gUmVhZCBFRVBST00gQ29uZmlnCisJdTMyCQlDb25maWc7CQkJLy8gQ29kZSA9IDAgKGV4dGVuZGVkKSwgRXhDb2RlID0gMTEKKwl1MzIJCVBhZEV4MTFbMTVdOworCS8vIEV4Q29kZSAxMiA9IE11bHRpY2FzdCBiaXRzIDMxOjAKKwl1MzIJCU1jYXN0TG93OwkJLy8gQ29kZSA9IDAgKGV4dGVuZGVkKSwgRXhDb2RlID0gMTIKKwl1MzIJCVBhZEV4MTJbMTVdOworCS8vIEV4Q29kZSAxMyA9IE11bHRpY2FzdCBiaXRzIDYzOjMyCisJdTMyCQlNY2FzdEhpZ2g7CQkvLyBDb2RlID0gMCAoZXh0ZW5kZWQpLCBFeENvZGUgPSAxMworCXUzMgkJUGFkRXgxM1sxNV07CisJLy8gRXhDb2RlIDE0ID0gUGluZworCXUzMgkJUGluZzsJCQkvLyBDb2RlID0gMCAoZXh0ZW5kZWQpLCBFeENvZGUgPSAxNAorCXUzMgkJUGFkRXgxNFsxNV07CisJLy8gRXhDb2RlIDE1ID0gTGluayBNVFUKKwl1MzIJCUxpbmtNdHU7CQkvLyBDb2RlID0gMCAoZXh0ZW5kZWQpLCBFeENvZGUgPSAxNQorCXUzMgkJUGFkRXgxNVsxNV07CisJLy8gRXhDb2RlIDE2ID0gRG93bmxvYWQgc3luY2hyb25pemF0aW9uCisJdTMyCQlMb2FkU3luYzsJCS8vIENvZGUgPSAwIChleHRlbmRlZCksIEV4Q29kZSA9IDE2CisJdTMyCQlQYWRFeDE2WzE1XTsKKwkvLyBFeENvZGUgMTcgPSBVcHBlciBEUkFNIGFkZHJlc3MgYml0cyBvbiAzMi1iaXQgc3lzdGVtcworCXUzMgkJVXBwZXI7CQkJLy8gQ29kZSA9IDAgKGV4dGVuZGVkKSwgRXhDb2RlID0gMTcKKwl1MzIJCVBhZEV4MTdbMTVdOworCS8vIEV4Q29kZSAxOCA9IFNsb3dwYXRoIFNlbmQgSW5kZXggQWRkcmVzcworCXUzMgkJU1BTZW5kSW5kZXg7CQkvLyBDb2RlID0gMCAoZXh0ZW5kZWQpLCBFeENvZGUgPSAxOAorCXUzMgkJUGFkRXgxOFsxNV07CisJdTMyCQlSc3ZkWEY7CQkJLy8gQ29kZSA9IDAgKGV4dGVuZGVkKSwgRXhDb2RlID0gMTkKKwl1MzIJCVBhZEV4MTlbMTVdOworCS8vIEV4Q29kZSAyMCA9IEFnZ3JlZ2F0aW9uCisJdTMyCQlBZ2dyZWdhdGlvbjsJCS8vIENvZGUgPSAwIChleHRlbmRlZCksIEV4Q29kZSA9IDIwCisJdTMyCQlQYWRFeDIwWzE1XTsKKwkvLyBFeENvZGUgMjEgPSBSZWNlaXZlIE1ETCBwdXNoIHRpbWVyCisJdTMyCQlQdXNoVGlja3M7CQkvLyBDb2RlID0gMCAoZXh0ZW5kZWQpLCBFeENvZGUgPSAyMQorCXUzMgkJUGFkRXgyMVsxNV07CisJLy8gRXhDb2RlIDIyID0gVE9FIE5BCisJdTMyCQlBY2tGcmVxdWVuY3k7CQkvLyBDb2RlID0gMCAoZXh0ZW5kZWQpLCBFeENvZGUgPSAyMgorCXUzMgkJUGFkRXgyMlsxNV07CisJLy8gRXhDb2RlIDIzID0gVE9FIE5BCisJdTMyCQlSc3ZkUmVnMjM7CisJdTMyCQlQYWRFeDIzWzE1XTsKKwkvLyBFeENvZGUgMjQgPSBUT0UgTkEKKwl1MzIJCVJzdmRSZWcyNDsKKwl1MzIJCVBhZEV4MjRbMTVdOworCS8vIEV4Q29kZSAyNSA9IFRPRSBOQQorCXUzMgkJUnN2ZFJlZzI1OwkJLy8gQ29kZSA9IDAgKGV4dGVuZGVkKSwgRXhDb2RlID0gMjUKKwl1MzIJCVBhZEV4MjVbMTVdOworCS8vIEV4Q29kZSAyNiA9IFJlY2VpdmUgY2hlY2tzdW0gcmVxdWlyZW1lbnRzCisJdTMyCQlSZWNlaXZlQ2hlY2tzdW07CS8vIENvZGUgPSAwIChleHRlbmRlZCksIEV4Q29kZSA9IDI2CisJdTMyCQlQYWRFeDI2WzE1XTsKKwkvLyBFeENvZGUgMjcgPSBSU1MgUmVxdWlyZW1lbnRzCisJdTMyCQlSc3M7CQkJLy8gQ29kZSA9IDAgKGV4dGVuZGVkKSwgRXhDb2RlID0gMjcKKwl1MzIJCVBhZEV4MjdbMTVdOworCS8vIEV4Q29kZSAyOCA9IFJTUyBUYWJsZQorCXUzMgkJUnNzVGFibGU7CQkvLyBDb2RlID0gMCAoZXh0ZW5kZWQpLCBFeENvZGUgPSAyOAorCXUzMgkJUGFkRXgyOFsxNV07CisJLy8gRXhDb2RlIDI5ID0gRXZlbnQgcmluZyByZWxlYXNlIGVudHJpZXMKKwl1MzIJCUV2ZW50UmVsZWFzZTsJCS8vIENvZGUgPSAwIChleHRlbmRlZCksIEV4Q29kZSA9IDI5CisJdTMyCQlQYWRFeDI5WzE1XTsKKwkvLyBFeENvZGUgMzAgPSBOdW1iZXIgb2YgcmVjZWl2ZSBidWZmZXJsaXN0IGNvbW1hbmRzIG9uIHJpbmcgMAorCXUzMgkJUmN2Q21kOwkJCS8vIENvZGUgPSAwIChleHRlbmRlZCksIEV4Q29kZSA9IDMwCisJdTMyCQlQYWRFeDMwWzE1XTsKKwkvLyBFeENvZGUgMzEgPSBzbG93cGF0aCB0cmFuc21pdCBjb21tYW5kIC0gRGF0YVszMTowXSA9IDEKKwl1MzIJCVhtdENtZDsJCQkvLyBDb2RlID0gMCAoZXh0ZW5kZWQpLCBFeENvZGUgPSAzMQorCXUzMgkJUGFkRXgzMVsxNV07CisJLy8gRXhDb2RlIDMyID0gRHVtcCBjb21tYW5kCisJdTMyCQlEdW1wQ21kOwkJLy8gQ29kZSA9IDAgKGV4dGVuZGVkKSwgRXhDb2RlID0gMzIKKwl1MzIJCVBhZEV4MzJbMTVdOworCS8vIEV4Q29kZSAzMyA9IERlYnVnIGNvbW1hbmQKKwl1MzIJCURlYnVnQ21kOwkJLy8gQ29kZSA9IDAgKGV4dGVuZGVkKSwgRXhDb2RlID0gMzMKKwl1MzIJCVBhZEV4MzNbMTVdOworCS8vIFRoZXJlIGFyZSAxMjggcG9zc2libGUgZXh0ZW5kZWQgY29tbWFuZHMgLSBlYWNoIG9mIGFjY291bnQgZm9yIDE2CisJLy8gd29yZHMgKGluY2x1ZGluZyB0aGUgbm9uLXJlbGV2ZW50IGJhc2UgY29tbWFuZCBjb2RlcyAxLTE1KS4KKwkvLyBQYWQgZm9yIHRoZSByZW1haW5kZXIgb2YgdGhlc2UgaGVyZSB0byBicmluZyB1cyB0byB0aGUgbmV4dCBDUFUKKwkvLyBiYXNlLiAgQXMgZXh0ZW5kZWQgY29kZXMgYXJlIGFkZGVkLCByZWR1Y2UgdGhlIGZpcnN0IGFycmF5IHZhbHVlIGluCisJLy8gdGhlIGZvbGxvd2luZyBmaWVsZAorCXUzMgkJUGFkVG9OZXh0Q3B1Wzk0XVsxNl07CS8vIDk0ID0gMTI4IC0gMzQgKDM0ID0gRXhjb2RlcyAwIC0gMzMpCit9IFNYR19VQ09ERV9SRUdTLCAqUFNYR19VQ09ERV9SRUdTOworCisvLyBJbnRlcnJ1cHQgY29udHJvbCByZWdpc3RlciAoMCkgdmFsdWVzCisjZGVmaW5lIFNYR19JQ1JfRElTQUJMRQkJCQkJMHgwMDAwMDAwMAorI2RlZmluZSBTWEdfSUNSX0VOQUJMRQkJCQkJMHgwMDAwMDAwMQorI2RlZmluZSBTWEdfSUNSX01BU0sJCQkJCTB4MDAwMDAwMDIKKyNkZWZpbmUgU1hHX0lDUl9NU0dJRF9NQVNLCQkJCTB4RkZGRjAwMDAKKyNkZWZpbmUgU1hHX0lDUl9NU0dJRF9TSElGVAkJCTE2CisjZGVmaW5lIFNYR19JQ1IoX01lc3NhZ2VJZCwgX0RhdGEpCVwKKwkoKCgoX01lc3NhZ2VJZCkgPDwgU1hHX0lDUl9NU0dJRF9TSElGVCkgJglcCisJICBTWEdfSUNSX01TR0lEX01BU0spIHwgKF9EYXRhKSkKKworLy8gVGhlIE1pY3JvY29kZSBzdXBwb3J0cyB1cCB0byAxNiBSU1MgcXVldWVzCisjZGVmaW5lIFNYR19NQVhfUlNTCQkJCTE2CisjZGVmaW5lIFNYR19NQVhfUlNTX1RBQkxFX1NJWkUJMjU2CQkvLyAyNTYtYnl0ZSBtYXgKKworI2RlZmluZSBTWEdfUlNTX1RDUDYJCQkJMHgwMDAwMDAwMQkvLyBSU1MgVENQIG92ZXIgSVB2NgorI2RlZmluZSBTWEdfUlNTX1RDUDQJCQkJMHgwMDAwMDAwMgkvLyBSU1MgVENQIG92ZXIgSVB2NAorI2RlZmluZSBTWEdfUlNTX0xFR0FDWQkJCQkweDAwMDAwMDA0CS8vIExpbmUtYmFzZSBpbnRlcnJ1cHRzCisjZGVmaW5lIFNYR19SU1NfVEFCTEVfU0laRQkJCTB4MDAwMEZGMDAJLy8gVGFibGUgc2l6ZSBtYXNrCisjZGVmaW5lIFNYR19SU1NfVEFCTEVfU0hJRlQJCQk4CisjZGVmaW5lCVNYR19SU1NfQkFTRV9DUFUJCQkweDAwRkYwMDAwCS8vIEJhc2UgQ1BVIChub3QgdXNlZCkKKyNkZWZpbmUgU1hHX1JTU19CQVNFX1NISUZUCQkJMTYKKworI2RlZmluZSBTWEdfUkNWX0lQX0NTVU1fRU5BQkxFRAkJMHgwMDAwMDAwMQkvLyBFeENvZGUgMjYgKFJlY2VpdmVDaGVja3N1bSkKKyNkZWZpbmUgU1hHX1JDVl9UQ1BfQ1NVTV9FTkFCTEVECTB4MDAwMDAwMDIJLy8gRXhDb2RlIDI2IChSZWNlaXZlQ2hlY2tzdW0pCisKKyNkZWZpbmUgU1hHX1hNVF9DUFVJRF9TSElGVAkJCTE2CisKKyNpZiBWUENJCisjZGVmaW5lIFNYR19DSEVDS19GT1JfSEFOR19USU1FCQkzMDAwCisjZWxzZQorI2RlZmluZSBTWEdfQ0hFQ0tfRk9SX0hBTkdfVElNRQkJNQorI2VuZGlmCisKKy8qCisgKiBUQ0IgcmVnaXN0ZXJzIC0gVGhpcyBpcyByZWFsbHkgdGhlIHNhbWUgcmVnaXN0ZXIgbWVtb3J5IGFyZWEgYXMgVUNPREVfUkVHUworICogYWJvdmUsIGJ1dCBkZWZpbmVkIGRpZmZlcmVudGx5LiAgQml0cyAxNzowNiBvZiB0aGUgYWRkcmVzcyBkZWZpbmUgdGhlIFRDQiwKKyAqIHdoaWNoIG1lYW5zIGVhY2ggVENCIGFyZWEgb2NjdXBpZXMgMHg0MCAoNjQpIGJ5dGVzLCBvciAxNiB1MzJTLiAgV2hhdCByZWFsbHkKKyAqIGlzIGhhcHBlbmluZyBpcyB0aGF0IHRoZXNlIHJlZ2lzdGVycyBvY2N1cHkgdGhlICJQYWRFeFsxNV0iIGFyZWFzIGluIHRoZQorICogU1hHX1VDT0RFX1JFR1MgZGVmaW5pdGlvbiBhYm92ZQorICovCit0eXBlZGVmIHN0cnVjdCBfU1hHX1RDQl9SRUdTIHsKKwl1MzIJCUV4Q29kZTsJCS8qIEV4dGVuZGVkIGNvZGVzIC0gc2VlIFNYR19VQ09ERV9SRUdTICovCisJdTMyCQlYbXQ7CQkvKiBDb2RlID0gMSAtICMgb2YgWG10IGRlc2NyaXB0b3JzIGFkZGVkIHRvIHJpbmcgKi8KKwl1MzIJCVJjdjsJCS8qIENvZGUgPSAyIC0gIyBvZiBSY3YgZGVzY3JpcHRvcnMgYWRkZWQgdG8gcmluZyAqLworCXUzMgkJUnN2ZDE7CQkvKiBDb2RlID0gMyAtIFRPRSBOQSAqLworCXUzMgkJUnN2ZDI7CQkvKiBDb2RlID0gNCAtIFRPRSBOQSAqLworCXUzMgkJUnN2ZDM7CQkvKiBDb2RlID0gNSAtIFRPRSBOQSAqLworCXUzMgkJSW52YWxpZDsJLyogQ29kZSA9IDYgLSBSZXNlcnZlZCBmb3IgIkNhcmRVcCIgc2VlIGFib3ZlICovCisJdTMyCQlSc3ZkNDsJCS8qIENvZGUgPSA3IC0gVE9FIE5BICovCisJdTMyCQlSc3ZkNTsJCS8qIENvZGUgPSA4IC0gVE9FIE5BICovCisJdTMyCQlQYWRbN107CQkvKiBDb2RlcyA4LTE1IC0gTm90IHVzZWQuICovCit9IFNYR19UQ0JfUkVHUywgKlBTWEdfVENCX1JFR1M7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIElTUiBGb3JtYXQKKyAqICAgICAgICAgICAgICAgIDMxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisgKiAgICAgICAgICAgICAgICAgX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCisgKiAgICAgICAgICAgICAgICB8ICAgIHwgICAgfCAgICB8ICAgIHwgICAgfCAgICB8ICAgIHwgICAgfAorICogICAgICAgICAgICAgICAgfF9fX198X19fX3xfX19ffF9fX198X19fX3xfX19ffF9fX198X19fX3wKKyAqICAgICAgICAgICAgICAgICBeXl5eIF5eXl4gXl5eXiBeXl5eIFwgICAgICAgICAgICAgICAgIC8KKyAqICAgICAgICAgICBFUlIgLS18fHx8IHx8fHwgfHx8fCB8fHx8ICAtLS0tLS0tLS0tLS0tLS0tLQorICogICAgICAgICBFVkVOVCAtLS18fHwgfHx8fCB8fHx8IHx8fHwgICAgICAgICAgfAorICogICAgICAgICAgICAgICAtLS0tfHwgfHx8fCB8fHx8IHx8fHwgICAgICAgICAgfC0tIENyYXNoIEFkZHJlc3MKKyAqICAgICAgICAgICBVUEMgLS0tLS18IHx8fHwgfHx8fCB8fHx8CisgKiAgICAgICAgTEVWRU5UIC0tLS0tLS18fHx8IHx8fHwgfHx8fAorICogICAgICAgICAgUERRRiAtLS0tLS0tLXx8fCB8fHx8IHx8fHwKKyAqICAgICAgICAgUk1JU1MgLS0tLS0tLS0tfHwgfHx8fCB8fHx8CisgKiAgICAgICAgIEJSRUFLIC0tLS0tLS0tLS18IHx8fHwgfHx8fAorICogICAgICAgSEJFQVRPSyAtLS0tLS0tLS0tLS18fHx8IHx8fHwKKyAqICAgICAgIE5PSEJFQVQgLS0tLS0tLS0tLS0tLXx8fCB8fHx8CisgKiAgICAgICAgRVJGVUxMIC0tLS0tLS0tLS0tLS0tfHwgfHx8fAorICogICAgICAgICBYRFJPUCAtLS0tLS0tLS0tLS0tLS18IHx8fHwKKyAqICAgICAgICAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS18fHx8CisgKiAgICAgICAgICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tfHx8fC0tXAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fC0tLXwtQ3B1SWQgb2YgY3Jhc2gKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfC0tLS0vCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2RlZmluZSBTWEdfSVNSX0VSUgkJMHg4MDAwMDAwMAkvLyBFcnJvcgorI2RlZmluZSBTWEdfSVNSX0VWRU5UCQkweDQwMDAwMDAwCS8vIEV2ZW50IHJpbmcgZXZlbnQKKyNkZWZpbmUgU1hHX0lTUl9OT05FMQkJMHgyMDAwMDAwMAkvLyBOb3QgdXNlZAorI2RlZmluZSBTWEdfSVNSX1VQQwkJMHgxMDAwMDAwMAkvLyBEdW1wL2RlYnVnIGNvbW1hbmQgY29tcGxldGUKKyNkZWZpbmUgU1hHX0lTUl9MSU5LCQkweDA4MDAwMDAwCS8vIExpbmsgZXZlbnQKKyNkZWZpbmUgU1hHX0lTUl9QRFFGCQkweDA0MDAwMDAwCS8vIFByb2Nlc3NlZCBkYXRhIHF1ZXVlIGZ1bGwKKyNkZWZpbmUgU1hHX0lTUl9STUlTUwkJMHgwMjAwMDAwMAkvLyBEcm9wIC0gbm8gaG9zdCBidWYKKyNkZWZpbmUgU1hHX0lTUl9CUkVBSwkJMHgwMTAwMDAwMAkvLyBCcmVha3BvaW50IGhpdAorI2RlZmluZSBTWEdfSVNSX1BJTkcJCTB4MDA4MDAwMDAJLy8gSGVhcnRiZWF0IHJlc3BvbnNlCisjZGVmaW5lIFNYR19JU1JfREVBRAkJMHgwMDQwMDAwMAkvLyBDYXJkIGNyYXNoCisjZGVmaW5lIFNYR19JU1JfRVJGVUxMCQkweDAwMjAwMDAwCS8vIEV2ZW50IHJpbmcgZnVsbAorI2RlZmluZSBTWEdfSVNSX1hEUk9QCQkweDAwMTAwMDAwCS8vIFhNVCBEcm9wIC0gbm8gRFJBTSBidWZzIG9yIFhNVCBlcnIKKyNkZWZpbmUgU1hHX0lTUl9TUFNFTkQJCTB4MDAwODAwMDAJLy8gU2xvdyBzZW5kIGNvbXBsZXRlCisjZGVmaW5lIFNYR19JU1JfQ1BVCQkweDAwMDcwMDAwCS8vIERlYWQgQ1BVIG1hc2sKKyNkZWZpbmUgU1hHX0lTUl9DUFVfU0hJRlQJCTE2CS8vIERlYWQgQ1BVIHNoaWZ0CisjZGVmaW5lIFNYR19JU1JfQ1JBU0gJCTB4MDAwMEZGRkYJLy8gQ3Jhc2ggYWRkcmVzcyBtYXNrCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBFdmVudCBSaW5nIGVudHJ5CisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qCisgKiAgMzEgICAgICAgICAgICAgICAgICAxNSAgICAgICAgICAgICAgICAgMAorICogIC5fX19fX19fX19fX19fX19fX19fLl9fX19fX19fX19fX19fX19fX18uCisgKiAgfDwtLS0tLS0tLS0tLS0gICAgUGFkIDAgICAgLS0tLS0tLS0tLS0tPnwKKyAqICB8X19fX19fX19ffF9fX19fX19fX3xfX19fX19fX198X19fX19fX19ffDAJCTB4MDAKKyAqICB8PC0tLS0tLS0tLS0tLSAgICBQYWQgMSAgICAtLS0tLS0tLS0tLS0+fAorICogIHxfX19fX19fX198X19fX19fX19ffF9fX19fX19fX3xfX19fX19fX198NAkJMHgwNAorICogIHw8LS0tLS0tLS0tLS0tICAgIFBhZCAyICAgIC0tLS0tLS0tLS0tLT58CisgKiAgfF9fX19fX19fX3xfX19fX19fX198X19fX19fX19ffF9fX19fX19fX3w4IAkJMHgwOAorICogIHw8LS0tLS0tLS0tLS0gRXZlbnQgV29yZCAwIC0tLS0tLS0tLS0tLT58CisgKiAgfF9fX19fX19fX3xfX19fX19fX198X19fX19fX19ffF9fX19fX19fX3wxMgkJMHgwYworICogIHw8LS0tLS0tLS0tLS0gRXZlbnQgV29yZCAxIC0tLS0tLS0tLS0tLT58CisgKiAgfF9fX19fX19fX3xfX19fX19fX198X19fX19fX19ffF9fX19fX19fX3wxNgkJMHgxMAorICogIHw8LS0tLS0tLS0tLS0tLSBUb2VwbGl0eiAgIC0tLS0tLS0tLS0tLT58CisgKiAgfF9fX19fX19fX3xfX19fX19fX198X19fX19fX19ffF9fX19fX19fX3wyMAkJMHgxNAorICogIHw8LS0tLS0gTGVuZ3RoIC0tLS0+fDwtLS0tLS0gVENCIElkIC0tLT58CisgKiAgfF9fX19fX19fX3xfX19fX19fX198X19fX19fX19ffF9fX19fX19fX3wyNAkJMHgxOAorICogIHw8LS0tLS0gU3RhdHVzIC0tLS0+fEV2bnQgQ29kZXxGbHNoIENvZGV8CisgKiAgfF9fX19fX19fX3xfX19fX19fX198X19fX19fX19ffF9fX19fX19fX3wyOAkJMHgxYworICogICBeICAgICAgICAgICAgICAgICAgIF5eXl4gXl5eXgorICogICB8LSBWQUxJRCAgICAgICAgICAgIHx8fHwgfHx8fC0gUkJVRkMKKyAqICAgICAgICAgICAgICAgICAgICAgICB8fHx8IHx8fC0tIFNMT1dSCisgKiAgICAgICAgICAgICAgICAgICAgICAgfHx8fCB8fC0tLSBVTlVTRUQKKyAqICAgICAgICAgICAgICAgICAgICAgICB8fHx8IHwtLS0tIEZBU1RDCisgKiAgICAgICAgICAgICAgICAgICAgICAgfHx8fC0tLS0tLSBGQVNUUgorICogICAgICAgICAgICAgICAgICAgICAgIHx8fC0tLS0tLS0KKyAqICAgICAgICAgICAgICAgICAgICAgICB8fC0tLS0tLS0tCisgKiAgICAgICAgICAgICAgICAgICAgICAgfC0tLS0tLS0tLQorICoKKyAqIFNsb3dwYXRoIHN0YXR1czoKKyAqICAgX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCisgKiAgfDwtLS0tLSBTdGF0dXMgLS0tLT58RXZudCBDb2RlfEZsc2ggQ29kZXwKKyAqICB8X19fX19fX19ffENtZCBJbmRleHxfX19fX19fX198X19fX19fX19ffDI4CQkweDFjCisgKiAgICBeXl4gXl5eXgorICogICAgfHx8IHx8fHwtIElTVENQSVA2CisgKiAgICB8fHwgfHx8LS0gSVBPTkxZCisgKiAgICB8fHwgfHwtLS0gUkNWRVJSCisgKiAgICB8fHwgfC0tLS0gSVBDQkFECisgKiAgICB8fHwtLS0tLS0gVENQQ0JBRAorICogICAgfHwtLS0tLS0tIElTVENQSVAKKyAqICAgIHwtLS0tLS0tLSBTQ0VSUgorICoKKyAqLworI3ByYWdtYSBwYWNrKHB1c2gsIDEpCit0eXBlZGVmIHN0cnVjdCBfU1hHX0VWRU5UIHsKKwl1MzIJCQlQYWRbMV07CQkvLyBub3QgdXNlZAorCXUzMgkJCVNuZFVuYTsJCS8vIFNuZFVuYSB2YWx1ZQorCXUzMgkJCVJlc2lkOwkJLy8gcmVjZWl2ZSBNREwgcmVzaWQKKwl1bmlvbiB7CisJCXZvaWQgKgkJSG9zdEhhbmRsZTsJLy8gUmVjZWl2ZSBob3N0IGhhbmRsZQorCQl1MzIJCVJzdmQxOwkJLy8gVE9FIE5BCisJCXN0cnVjdCB7CisJCQl1MzIJTm90VXNlZDsKKwkJCXUzMglSc3ZkMjsJCS8vIFRPRSBOQQorCQl9IEZsdXNoOworCX07CisJdTMyCQkJVG9lcGxpdHo7CS8vIFJTUyBUb2VwbGl0eiBoYXNoCisJdW5pb24geworCQl1c2hvcnQJCVJzdmQzOwkJLy8gVE9FIE5BCisJCXVzaG9ydAkJSGRyT2Zmc2V0OwkvLyBTbG93cGF0aAorCX07CisJdXNob3J0CQkJTGVuZ3RoOwkJLy8KKwl1bnNpZ25lZCBjaGFyIAkJUnN2ZDQ7CQkvLyBUT0UgTkEKKwl1bnNpZ25lZCBjaGFyIAkJQ29kZTsJCS8vIEV2ZW50IGNvZGUKKwl1bnNpZ25lZCBjaGFyCQlDb21tYW5kSW5kZXg7CS8vIE5ldyByaW5nIGluZGV4CisJdW5zaWduZWQgY2hhcgkJU3RhdHVzOwkJLy8gRXZlbnQgc3RhdHVzCit9IFNYR19FVkVOVCwgKlBTWEdfRVZFTlQ7CisjcHJhZ21hIHBhY2socG9wKQorCisvLyBFdmVudCBjb2RlIGRlZmluaXRpb25zCisjZGVmaW5lIEVWRU5UX0NPREVfQlVGRkVSUwkweDAxCS8vIFJlY2VpdmUgYnVmZmVyIGxpc3QgY29tbWFuZCAocmluZyAwKQorI2RlZmluZSBFVkVOVF9DT0RFX1NMT1dSQ1YJMHgwMgkvLyBTbG93cGF0aCByZWNlaXZlCisjZGVmaW5lIEVWRU5UX0NPREVfVU5VU0VECTB4MDQJLy8gV2FzIHNsb3dwYXRoIGNvbW1hbmRzIGNvbXBsZXRlCisKKy8vIFN0YXR1cyB2YWx1ZXMKKyNkZWZpbmUgRVZFTlRfU1RBVFVTX1ZBTElECTB4ODAJLy8gRW50cnkgdmFsaWQKKworLy8gU2xvd3BhdGggc3RhdHVzCisjZGVmaW5lIEVWRU5UX1NUQVRVU19FUlJPUgkweDQwCS8vIENvbXBsZXRlZCB3aXRoIGVycm9yLiBJbmRleCBpbiBuZXh0IGJ5dGUKKyNkZWZpbmUgRVZFTlRfU1RBVFVTX1RDUElQNAkweDIwCS8vIFRDUElQdjQgZnJhbWUKKyNkZWZpbmUgRVZFTlRfU1RBVFVTX1RDUEJBRAkweDEwCS8vIEJhZCBUQ1AgY2hlY2tzdW0KKyNkZWZpbmUgRVZFTlRfU1RBVFVTX0lQQkFECTB4MDgJLy8gQmFkIElQIGNoZWNrc3VtCisjZGVmaW5lIEVWRU5UX1NUQVRVU19SQ1ZFUlIJMHgwNAkvLyBTbG93cGF0aCByZWNlaXZlIGVycm9yCisjZGVmaW5lIEVWRU5UX1NUQVRVU19JUE9OTFkJMHgwMgkvLyBJUCBmcmFtZQorI2RlZmluZSBFVkVOVF9TVEFUVVNfVENQSVA2CTB4MDEJLy8gVENQSVB2NiBmcmFtZQorI2RlZmluZSBFVkVOVF9TVEFUVVNfVENQSVAJMHgyMQkvLyBDb21iaW5hdGlvbiBvZiB2NCBhbmQgdjYKKworLy8gRXZlbnQgcmluZworLy8gU2l6ZSBtdXN0IGJlIHBvd2VyIG9mIDIsIGJldHdlZW4gMTI4IGFuZCAxNmsKKyNkZWZpbmUgRVZFTlRfUklOR19TSVpFCQk0MDk2CS8vID8/CisjZGVmaW5lIEVWRU5UX1JJTkdfQkFUQ0gJMTYJCS8vIEhhbmQgZW50cmllcyBiYWNrIDE2IGF0IGEgdGltZS4KKyNkZWZpbmUgRVZFTlRfQkFUQ0hfTElNSVQJMjU2CSAgICAvLyBTdG9wIHByb2Nlc3NpbmcgZXZlbnRzIGFmdGVyIDI1NiAoMTYgKiAxNikKKwordHlwZWRlZiBzdHJ1Y3QgX1NYR19FVkVOVF9SSU5HIHsKKwlTWEdfRVZFTlQJUmluZ1tFVkVOVF9SSU5HX1NJWkVdOworfVNYR19FVkVOVF9SSU5HLCAqUFNYR19FVkVOVF9SSU5HOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogVENCIEJ1ZmZlcnMKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLy8gTWF4aW11bSBudW1iZXIgb2YgVENCUyBzdXBwb3J0ZWQgYnkgaGFyZHdhcmUvbWljcm9jb2RlCisjZGVmaW5lIFNYR19NQVhfVENCCQk0MDk2CisvLyBNaW5pbXVtIFRDQnMgYmVmb3JlIHdlIGZhaWwgaW5pdGlhbGl6YXRpb24KKyNkZWZpbmUgU1hHX01JTl9UQ0IJCTUxMgorLy8gVENCIEhhc2gKKy8vIFRoZSBidWNrZXQgaXMgZGV0ZXJtaW5lZCBieSBiaXRzIDExOjQgb2YgdGhlIHRvZXBsaXR6IGlmIHdlIHN1cHBvcnQgNGsKKy8vIG9mZmxvYWRlZCBjb25uZWN0aW9ucywgMTA6NCBpZiB3ZSBzdXBwb3J0IDJrIGFuZCBzbyBvbi4KKyNkZWZpbmUgU1hHX1RDQl9CVUNLRVRfU0hJRlQJNAorI2RlZmluZSBTWEdfVENCX1BFUl9CVUNLRVQJCTE2CisjZGVmaW5lIFNYR19UQ0JfQlVDS0VUX01BU0sJCTB4RkYwCS8vIEJ1Y2tldCBwb3J0aW9uIG9mIFRDQiBJRAorI2RlZmluZSBTWEdfVENCX0VMRU1FTlRfTUFTSwkweDAwRgkvLyBFbGVtZW50IHdpdGhpbiBidWNrZXQKKyNkZWZpbmUgU1hHX1RDQl9CVUNLRVRTCQkJMjU2CQkvLyAyNTYgKiAxNiA9IDRrCisKKyNkZWZpbmUgU1hHX1RDQl9CVUZGRVJfU0laRQk1MTIJLy8gQVNTRVJUIGZvcm1hdCBpcyBjb3JyZWN0CisKKyNkZWZpbmUgU1hHX1RDQl9SQ1ZRX1NJWkUJCTczNgorCisjZGVmaW5lIFNYR19UQ0JfQ09NUE9TSVRFX0JVRkZFUl9TSVpFCTEwMjQKKworI2RlZmluZSBTWEdfTE9DQVRFX1RDUF9GUkFNRV9IRFIoX1RjcE9iamVjdCwgX0lQdjYpCQkJCQkJCVwKKwkoKChfVGNwT2JqZWN0KS0+VmxhbklkKSA/CQkJCQkJCQkJCQkJXAorCSAoKF9JUHY2KSA/CQkvKiBWbGFuIGZyYW1lIGhlYWRlciA9IHllcyAqLwkJCQkJCQlcCisJICAmKF9UY3BPYmplY3QpLT5Db21wQnVmZmVyLT5GcmFtZS5IYXNWbGFuLlRjcElwNi5TeGdUY3AJCQk6CVwKKwkgICYoX1RjcE9iamVjdCktPkNvbXBCdWZmZXItPkZyYW1lLkhhc1ZsYW4uVGNwSXAuU3hnVGNwKQkJCTogCVwKKwkgKChfSVB2NikgPwkJLyogVmxhbiBmcmFtZSBoZWFkZXIgPSBObyAqLwkJCQkJCQlcCisJICAmKF9UY3BPYmplY3QpLT5Db21wQnVmZmVyLT5GcmFtZS5Ob1ZsYW4uVGNwSXA2LlN4Z1RjcAkJCQk6IAlcCisJICAmKF9UY3BPYmplY3QpLT5Db21wQnVmZmVyLT5GcmFtZS5Ob1ZsYW4uVGNwSXAuU3hnVGNwKSkKKworI2RlZmluZSBTWEdfTE9DQVRFX0lQX0ZSQU1FX0hEUihfVGNwT2JqZWN0KQkJCQkJCQkJCVwKKwkoX1RjcE9iamVjdCktPlZsYW5JZCA/CQkJCQkJCQkJCQkJCVwKKwkmKF9UY3BPYmplY3QpLT5Db21wQnVmZmVyLT5GcmFtZS5IYXNWbGFuLlRjcElwLklwCQkJCTogCQlcCisJJihfVGNwT2JqZWN0KS0+Q29tcEJ1ZmZlci0+RnJhbWUuTm9WbGFuLlRjcElwLklwCisKKyNkZWZpbmUgU1hHX0xPQ0FURV9JUDZfRlJBTUVfSERSKF9UY3BPYmplY3QpCQkJCQkJCQlcCisJKF9UY3BPYmplY3QpLT5WbGFuSWQgPwkJCQkJCQkJCQkJCQlcCisJJihfVGNwT2JqZWN0KS0+Q29tcEJ1ZmZlci0+RnJhbWUuSGFzVmxhbi5UY3BJcDYuSXAJCQkJOgkJXAorCSYoX1RjcE9iamVjdCktPkNvbXBCdWZmZXItPkZyYW1lLk5vVmxhbi5UY3BJcDYuSXAKKworCisjaWYgREJHCisvLyBIb3JyaWJsZSBrbHVkZ2UgdG8gZGlzdGluZ3Vpc2ggZHVtYi1uaWMsIHNsb3dwYXRoLCBhbmQKKy8vIGZhc3RwYXRoIHRyYWZmaWMuICBEZWNyZW1lbnQgdGhlIEhvcExpbWl0IGJ5IG9uZQorLy8gZm9yIHNsb3dwYXRoLCB0d28gZm9yIGZhc3RwYXRoLiAgVGhpcyBhc3N1bWVzIHRoZSBsaW1pdCBpcyBtZWFzdXJhYmx5CisvLyBncmVhdGVyIHRoYW4gdHdvLCB3aGljaCBJIHRoaW5rIGlzIHJlYXNvbmFibGUuCisvLyBPYnZpb3VzbHkgdGhpcyBpcyBEQkcgb25seS4gIE1heWJlIHJlbW92ZSBsYXRlciwgb3IgI2lmIDAgc28gd2UKKy8vIGNhbiBzZXQgaXQgd2hlbiBuZWVkZWQKKyNkZWZpbmUgU1hHX0RCR19IT1BfTElNSVQoX1RjcE9iamVjdCwgX0Zhc3RQYXRoKSB7CQkJCQkJCQlcCisJUElQVjZfSERSCQlfSXA2RnJhbWVIZHI7CQkJCQkJCQkJCQkJXAorCWlmKChfVGNwT2JqZWN0KS0+SVB2NikgewkJCQkJCQkJCQkJCQlcCisJCV9JcDZGcmFtZUhkciA9IFNYR19MT0NBVEVfSVA2X0ZSQU1FX0hEUigoX1RjcE9iamVjdCkpOwkJCQkJXAorCQlpZihfRmFzdFBhdGgpIHsJCQkJCQkJCQkJCQkJCQlcCisJCQlfSXA2RnJhbWVIZHItPkhvcExpbWl0ID0gKF9UY3BPYmplY3QpLT5DYWNoZWQuVHRsT3JIb3BMaW1pdCAtIDI7CVwKKwkJfSBlbHNlIHsJCQkJCQkJCQkJCQkJCQkJXAorCQkJX0lwNkZyYW1lSGRyLT5Ib3BMaW1pdCA9IChfVGNwT2JqZWN0KS0+Q2FjaGVkLlR0bE9ySG9wTGltaXQgLSAxOwlcCisJCX0JCQkJCQkJCQkJCQkJCQkJCQlcCisJfQkJCQkJCQkJCQkJCQkJCQkJCQlcCit9CisjZWxzZQorLy8gRG8gbm90aGluZyB3aXRoIGZyZWUgYnVpbGQKKyNkZWZpbmUgU1hHX0RCR19IT1BfTElNSVQoX1RjcE9iamVjdCwgX0Zhc3RQYXRoKQorI2VuZGlmCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFJlY2VpdmUgYW5kIHRyYW5zbWl0IHJpbmdzCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2RlZmluZSBTWEdfTUFYX1JJTkdfU0laRQkyNTYKKyNkZWZpbmUgU1hHX1hNVF9SSU5HX1NJWkUJMTI4CQkvLyBTdGFydCB3aXRoIDEyOAorI2RlZmluZSBTWEdfUkNWX1JJTkdfU0laRQkxMjgJCS8vIFN0YXJ0IHdpdGggMTI4CisjZGVmaW5lIFNYR19NQVhfRU5UUklFUyAgICAgNDA5NgorCisvLyBTdHJ1Y3R1cmUgYW5kIG1hY3JvcyB0byBtYW5hZ2UgYSByaW5nCit0eXBlZGVmIHN0cnVjdCBfU1hHX1JJTkdfSU5GTyB7CisJdW5zaWduZWQgY2hhcgkJCUhlYWQ7CQkvLyBXaGVyZSB3ZSBhZGQgZW50cmllcyAtIE5vdGUgdW5zaWduZWQgY2hhcjpSSU5HX1NJWkUKKwl1bnNpZ25lZCBjaGFyCQkJVGFpbDsJCS8vIFdoZXJlIHdlIHB1bGwgb2ZmIGNvbXBsZXRlZCBlbnRyaWVzCisJdXNob3J0CQkJU2l6ZTsJCS8vIFJpbmcgc2l6ZSAtIE11c3QgYmUgbXVsdGlwbGUgb2YgMgorCXZvaWQgKgkJCUNvbnRleHRbU1hHX01BWF9SSU5HX1NJWkVdOwkvLyBTaGFkb3cgcmluZworfSBTWEdfUklOR19JTkZPLCAqUFNYR19SSU5HX0lORk87CisKKyNkZWZpbmUgU1hHX0lOSVRJQUxJWkVfUklORyhfcmluZywgX3NpemUpIHsJCQkJCQkJXAorCShfcmluZykuSGVhZCA9IDA7CQkJCQkJCQkJCQkJXAorCShfcmluZykuVGFpbCA9IDA7CQkJCQkJCQkJCQkJXAorCShfcmluZykuU2l6ZSA9IChfc2l6ZSk7CQkJCQkJCQkJCQlcCit9CisjZGVmaW5lIFNYR19BRFZBTkNFX0lOREVYKF9pbmRleCwgX3NpemUpICgoX2luZGV4KSA9ICgoX2luZGV4KSArIDEpICYgKChfc2l6ZSkgLSAxKSkKKyNkZWZpbmUgU1hHX1BSRVZJT1VTX0lOREVYKF9pbmRleCwgX3NpemUpICgoKF9pbmRleCkgLSAxKSAmKChfc2l6ZSkgLSAxKSkKKyNkZWZpbmUgU1hHX1JJTkdfRU1QVFkoX3JpbmcpICgoX3JpbmcpLT5IZWFkID09IChfcmluZyktPlRhaWwpCisjZGVmaW5lIFNYR19SSU5HX0ZVTEwoX3JpbmcpICgoKChfcmluZyktPkhlYWQgKyAxKSAmICgoX3JpbmcpLT5TaXplIC0gMSkpID09IChfcmluZyktPlRhaWwpCisjZGVmaW5lIFNYR19SSU5HX0FEVkFOQ0VfSEVBRChfcmluZykgU1hHX0FEVkFOQ0VfSU5ERVgoKF9yaW5nKS0+SGVhZCwgKChfcmluZyktPlNpemUpKQorI2RlZmluZSBTWEdfUklOR19SRVRSRUFUX0hFQUQoX3JpbmcpICgoX3JpbmcpLT5IZWFkID0JCQkJXAorCQkJCQkJCQkJICBTWEdfUFJFVklPVVNfSU5ERVgoKF9yaW5nKS0+SGVhZCwgKF9yaW5nKS0+U2l6ZSkpCisjZGVmaW5lIFNYR19SSU5HX0FEVkFOQ0VfVEFJTChfcmluZykgewkJCQkJCQkJXAorCUFTU0VSVCgoX3JpbmcpLT5UYWlsICE9IChfcmluZyktPkhlYWQpOwkJCQkJCQlcCisJU1hHX0FEVkFOQ0VfSU5ERVgoKF9yaW5nKS0+VGFpbCwgKChfcmluZyktPlNpemUpKTsJCQkJXAorfQorLy8gU2V0IGNtZCB0byB0aGUgbmV4dCBhdmFpbGFibGUgcmluZyBlbnRyeSwgc2V0IHRoZSBzaGFkb3cgY29udGV4dAorLy8gZW50cnkgYW5kIGFkdmFuY2UgdGhlIHJpbmcuCisvLyBUaGUgYXBwcm9wcmlhdGUgbG9jayBtdXN0IGJlIGhlbGQgd2hlbiBjYWxsaW5nIHRoaXMgbWFjcm8KKyNkZWZpbmUgU1hHX0dFVF9DTUQoX3JpbmcsIF9yaW5naW5mbywgX2NtZCwgX2NvbnRleHQpIHsJCQkJXAorCWlmKFNYR19SSU5HX0ZVTEwoX3JpbmdpbmZvKSkgewkJCQkJCQkJCVwKKwkJKF9jbWQpID0gTlVMTDsJCQkJCQkJCQkJCQlcCisJfSBlbHNlIHsJCQkJCQkJCQkJCQkJCVwKKwkJKF9jbWQpID0gJihfcmluZyktPkRlc2NyaXB0b3JzWyhfcmluZ2luZm8pLT5IZWFkXTsJCQlcCisJCShfcmluZ2luZm8pLT5Db250ZXh0WyhfcmluZ2luZm8pLT5IZWFkXSA9ICh2b2lkICopKF9jb250ZXh0KTtcCisJCVNYR19SSU5HX0FEVkFOQ0VfSEVBRChfcmluZ2luZm8pOwkJCQkJCQlcCisJfQkJCQkJCQkJCQkJCQkJCQlcCit9CisKKy8vIEFib3J0IHRoZSBwcmV2aW91c2x5IGFsbG9jYXRlZCBjb21tYW5kIGJ5IHJldHJlYXRpbmcgdGhlIGhlYWQuCisvLyBOT1RFIC0gVGhlIGFwcG9wcmlhdGUgbG9jayBNVVNUIE5PVCBCRSBEUk9QUEVEIGJldHdlZW4gdGhlIFNYR19HRVRfQ01ECisvLyBhbmQgU1hHX0FCT1JUX0NNRCBjYWxscy4KKyNkZWZpbmUgU1hHX0FCT1JUX0NNRChfcmluZ2luZm8pIHsJCQkJCQkJCQlcCisJQVNTRVJUKCEoU1hHX1JJTkdfRU1QVFkoX3JpbmdpbmZvKSkpOwkJCQkJCQlcCisJU1hHX1JJTkdfUkVUUkVBVF9IRUFEKF9yaW5naW5mbyk7CQkJCQkJCQlcCisJKF9yaW5naW5mbyktPkNvbnRleHRbKF9yaW5naW5mbyktPkhlYWRdID0gTlVMTDsJCQkJCVwKK30KKworLy8gRm9yIHRoZSBnaXZlbiByaW5nLCByZXR1cm4gYSBwb2ludGVyIHRvIHRoZSB0YWlsIGNtZCBhbmQgY29udGV4dCwKKy8vIGNsZWFyIHRoZSBjb250ZXh0IGFuZCBhZHZhbmNlIHRoZSB0YWlsCisjZGVmaW5lIFNYR19SRVRVUk5fQ01EKF9yaW5nLCBfcmluZ2luZm8sIF9jbWQsIF9jb250ZXh0KSB7CQkJXAorCShfY21kKSA9ICYoX3JpbmcpLT5EZXNjcmlwdG9yc1soX3JpbmdpbmZvKS0+VGFpbF07CQkJCVwKKwkoX2NvbnRleHQpID0gKF9yaW5naW5mbyktPkNvbnRleHRbKF9yaW5naW5mbyktPlRhaWxdOyAgICAgICAJXAorCShfcmluZ2luZm8pLT5Db250ZXh0WyhfcmluZ2luZm8pLT5UYWlsXSA9IE5VTEw7CQkJCQlcCisJU1hHX1JJTkdfQURWQU5DRV9UQUlMKF9yaW5naW5mbyk7CQkJCQkJCQlcCit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBIb3N0IENvbW1hbmQgQnVmZmVyIC0gY29tbWFuZHMgdG8gSU5JQyB2aWEgdGhlIENtZCBSaW5ncworICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKgorICogIDMxICAgICAgICAgICAgICAgICAgMTUgICAgICAgICAgICAgICAgIDAKKyAqICAuX19fX19fX19fX19fX19fX19fXy5fX19fX19fX19fX19fX19fX19fLgorICogIHw8LS0tLS0tLS0tLS0tLS0gU2dsIExvdyAtLS0tLS0tLS0tLS0tLT58CisgKiAgfF9fX19fX19fX3xfX19fX19fX198X19fX19fX19ffF9fX19fX19fX3wwCQkweDAwCisgKiAgfDwtLS0tLS0tLS0tLS0tLSBTZ2wgSGlnaCAtLS0tLS0tLS0tLS0tPnwKKyAqICB8X19fX19fX19ffF9fX19fX19fX3xfX19fX19fX198X19fX19fX19ffDQJCTB4MDQKKyAqICB8PC0tLS0tLS0tLS0tLS0gIFNnZSAwIExvdyAgLS0tLS0tLS0tLS0+fAorICogIHxfX19fX19fX198X19fX19fX19ffF9fX19fX19fX3xfX19fX19fX198OCAJCTB4MDgKKyAqICB8PC0tLS0tLS0tLS0tLS0gIFNnZSAwIEhpZ2ggLS0tLS0tLS0tLS0+fAorICogIHxfX19fX19fX198X19fX19fX19ffF9fX19fX19fX3xfX19fX19fX198MTIJCTB4MGMKKyAqICB8PC0tLS0tLS0tLS0tLSAgU2dlIDAgTGVuZ3RoIC0tLS0tLS0tLS0+fAorICogIHxfX19fX19fX198X19fX19fX19ffF9fX19fX19fX3xfX19fX19fX198MTYJCTB4MTAKKyAqICB8PC0tLS0tLS0tLS0tIFdpbmRvdyBVcGRhdGUgLS0tLS0tLS0tLS0+fAorICogIHw8LS0tLS0tLS0gU1AgMXN0IFNHRSBvZmZzZXQgLS0tLS0tLS0tLT58CisgKiAgfF9fX19fX19fX3xfX19fX19fX198X19fX19fX19ffF9fX19fX19fX3wyMAkJMHgxNAorICogIHw8LS0tLS0tLS0tLS0gVG90YWwgTGVuZ3RoIC0tLS0tLS0tLS0tLT58CisgKiAgfF9fX19fX19fX3xfX19fX19fX198X19fX19fX19ffF9fX19fX19fX3wyNAkJMHgxOAorICogIHw8LS0tLS0gTENudCAtLS0tLS0+fDwtLS0tLSBGbGFncyAtLS0tLT58CisgKiAgfF9fX19fX19fX3xfX19fX19fX198X19fX19fX19ffF9fX19fX19fX3wyOAkJMHgxYworICovCisjcHJhZ21hIHBhY2socHVzaCwgMSkKK3R5cGVkZWYgc3RydWN0IF9TWEdfQ01EIHsKKwlkbWFfYWRkcl90ICAgICAgICAgICAgIAkJCVNnbDsJCQkvLyBQaHlzaWNhbCBhZGRyZXNzIG9mIFNHTAorCXVuaW9uIHsKKwkJc3RydWN0IHsKKwkJCWRtYTY0X2FkZHJfdCAgICAgICAgICAJRmlyc3RTZ2VBZGRyZXNzOy8vIEFkZHJlc3Mgb2YgZmlyc3QgU0dFCisJCQl1MzIJCQkJCUZpcnN0U2dlTGVuZ3RoOwkvLyBMZW5ndGggb2YgZmlyc3QgU0dFCisJCQl1bmlvbiB7CisJCQkJdTMyCQkJCVJzdmQxOwkgICAgICAgIC8vIFRPRSBOQQorCQkJCXUzMgkJCQlTZ2VPZmZzZXQ7CQkvLyBTbG93cGF0aCAtIDJuZCBTR0Ugb2Zmc2V0CisJCQkJdTMyCQkJCVJlc2lkOwkJCS8vIE1ETCBjb21wbGV0aW9uIC0gY2xvYmJlcnMgdXBkYXRlCisJCQl9OworCQkJdW5pb24geworCQkJCXUzMgkJCQlUb3RhbExlbmd0aDsJLy8gVG90YWwgdHJhbnNmZXIgbGVuZ3RoCisJCQkJdTMyCQkJCU1zczsJCQkvLyBMU08gTVNTCisJCQl9OworCQl9IEJ1ZmZlcjsKKwl9OworCXVuaW9uIHsKKwkJc3RydWN0IHsKKwkJCXVuc2lnbmVkIGNoYXIJCQkJCUZsYWdzOjQ7CQkvLyBzbG93cGF0aCBmbGFncworCQkJdW5zaWduZWQgY2hhcgkJCQkJSXBIbDo0OwkJCS8vIElwIGhlYWRlciBsZW5ndGggKD4+MikKKwkJCXVuc2lnbmVkIGNoYXIJCQkJCU1hY0xlbjsJCQkvLyBNYWMgaGVhZGVyIGxlbgorCQl9IENzdW1GbGFnczsKKwkJc3RydWN0IHsKKwkJCXVzaG9ydAkJCQkJRmxhZ3M6NDsJCS8vIHNsb3dwYXRoIGZsYWdzCisJCQl1c2hvcnQJCQkJCVRjcEhkck9mZjo3OwkvLyBUQ1AKKwkJCXVzaG9ydAkJCQkJTWFjTGVuOjU7CQkvLyBNYWMgaGVhZGVyIGxlbgorCQl9IExzb0ZsYWdzOworCQl1c2hvcnQJCQkJCQlGbGFnczsJCQkvLyBmbGFncworCX07CisJdW5pb24geworCQl1c2hvcnQJCQkJCQlTZ0VudHJpZXM7CQkvLyBTRyBlbnRyeSBjb3VudCBpbmNsdWRpbmcgZmlyc3Qgc2dlCisJCXN0cnVjdCB7CisJCQl1bnNpZ25lZCBjaGFyCQkJCQlTdGF0dXM7CQkgICAgLy8gQ29waWVkIGZyb20gZXZlbnQgc3RhdHVzCisJCQl1bnNpZ25lZCBjaGFyCQkJCQlOb3RVc2VkOworCQl9IFN0YXR1czsKKwl9OworfSBTWEdfQ01ELCAqUFNYR19DTUQ7CisjcHJhZ21hIHBhY2socG9wKQorCisjcHJhZ21hIHBhY2socHVzaCwgMSkKK3R5cGVkZWYgc3RydWN0IF9WTEFOX0hEUiB7CisJdXNob3J0CVZsYW5UY2k7CisJdXNob3J0CVZsYW5UcGlkOworfSBWTEFOX0hEUiwgKlBWTEFOX0hEUjsKKyNwcmFnbWEgcGFjayhwb3ApCisKKy8qCisgKiBTbG93cGF0aCBGbGFnczoKKyAqCisgKgorICogTFNTIEZsYWdzOgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi0tLQorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLi0tLSBUQ1AgTGFyZ2Ugc2VnbWVudCBzZW5kCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8uLS0tCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8uLS0tCisgKiAgMyAgICAgICAgICAgICAgICAgICAxICAgICAxICAgICAgIC8vLy8KKyAqICAxICAgICAgICAgICAgICAgICAgIDUgICAgIDAgICAgICB8fHx8CisgKiAgLl9fX19fX19fX19fX19fX19fX18uX19fX19fX19fX19fdnZ2di4KKyAqICB8ICAgICAgICAgICAgICAgICAgIHxNQUMgfCAgVENQIHwgICAgfAorICogIHwgICAgICBMQ250ICAgICAgICAgfGhsZW58aGRyb2ZmfEZsZ3N8CisgKiAgfF9fX19fX19fX19fX19fX19fX198fHx8fHx8fHx8fHx8X19fX3wKKyAqCisgKgorICogQ2hlY2tzdW0gRmxhZ3MKKyAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLS0tCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8uLS0tCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8uLS0tIENoZWNrc3VtIFRDUAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLi0tLSBDaGVja3N1bSBJUAorICogIDMgICAgICAgICAgICAgICAgICAgMSAgICAgICAgICAgICAgICAvLy8vIE5vIGJpdHMgLSBub3JtYWwgc2VuZAorICogIDEgICAgICAgICAgICAgICAgICAgNSAgICAgICAgICA3ICAgIHx8fHwKKyAqICAuX19fX19fX19fX19fX19fX19fXy5fX19fX19fX19fX19fX192dnZ2LgorICogIHwgICAgICAgICAgICAgICAgICAgfCBPZmZsb2FkIHwgSVAgfCAgICB8CisgKiAgfCAgICAgIExDbnQgICAgICAgICB8TUFDIGhsZW4gfEhsZW58Rmxnc3wKKyAqICB8X19fX19fX19fX19fX19fX19fX3xfX19ffF9fX198X19fX3xfX19ffAorICoKKyAqLworLy8gU2xvd3BhdGggQ01EIGZsYWdzCisjZGVmaW5lIFNYR19TTE9XQ01EX0NTVU1fSVAJCQkweDAxCQkvLyBDaGVja3N1bSBJUAorI2RlZmluZSBTWEdfU0xPV0NNRF9DU1VNX1RDUAkJMHgwMgkJLy8gQ2hlY2tzdW0gVENQCisjZGVmaW5lIFNYR19TTE9XQ01EX0xTTwkJCQkweDA0CQkvLyBMYXJnZSBzZWdtZW50IHNlbmQKKwordHlwZWRlZiBzdHJ1Y3QgX1NYR19YTVRfUklORyB7CisJU1hHX0NNRAkJRGVzY3JpcHRvcnNbU1hHX1hNVF9SSU5HX1NJWkVdOworfSBTWEdfWE1UX1JJTkcsICpQU1hHX1hNVF9SSU5HOworCit0eXBlZGVmIHN0cnVjdCBfU1hHX1JDVl9SSU5HIHsKKwlTWEdfQ01ECQlEZXNjcmlwdG9yc1tTWEdfUkNWX1JJTkdfU0laRV07Cit9IFNYR19SQ1ZfUklORywgKlBTWEdfUkNWX1JJTkc7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFNoYXJlIG1lbW9yeSBidWZmZXIgdHlwZXMgLSBVc2VkIHRvIGlkZW50aWZ5IGFzeW5jaHJvbm91cworICogc2hhcmVkIG1lbW9yeSBhbGxvY2F0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordHlwZWRlZiBlbnVtIHsKKwlTWEdfQlVGRkVSX1RZUEVfUkNWLAkJLy8gUmVjZWl2ZSBidWZmZXIKKwlTWEdfQlVGRkVSX1RZUEVfU0dMCQkJLy8gU0dMIGJ1ZmZlcgorfSBTWEdfQlVGRkVSX1RZUEU7CisKKy8vIFN0YXRlIGZvciBTWEcgYnVmZmVycworI2RlZmluZSBTWEdfQlVGRkVSX0ZSRUUJCTB4MDEKKyNkZWZpbmUgU1hHX0JVRkZFUl9CVVNZCQkweDAyCisjZGVmaW5lIFNYR19CVUZGRVJfT05DQVJECTB4MDQKKyNkZWZpbmUgU1hHX0JVRkZFUl9VUFNUUkVBTQkweDA4CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFJlY2VpdmUgZGF0YSBidWZmZXJzCisgKgorICogUmVjZWl2ZSBkYXRhIGJ1ZmZlcnMgYXJlIGdpdmVuIHRvIHRoZSBTYWhhcmEgY2FyZCAxMjggYXQgYSB0aW1lLgorICogVGhpcyBpcyBhY2NvbXBsaXNoZWQgYnkgZmlsbGluZyBpbiBhICJyZWNlaXZlIGRlc2NyaXB0b3IgYmxvY2siCisgKiB3aXRoIDEyOCAicmVjZWl2ZSBkZXNjcmlwdG9ycyIuICBFYWNoIGRlc2NyaXB0b3IgY29uc2lzdHMgb2YKKyAqIGEgcGh5c2ljYWwgYWRkcmVzcywgd2hpY2ggdGhlIGNhcmQgdXNlcyBhcyB0aGUgYWRkcmVzcyB0bworICogRE1BIGRhdGEgaW50bywgYW5kIGEgdmlydHVhbCBhZGRyZXNzLCB3aGljaCBpcyBnaXZlbiBiYWNrCisgKiB0byB0aGUgaG9zdCBpbiB0aGUgIkhvc3RIYW5kbGUiIHBvcnRpb24gb2YgYW4gZXZlbnQuCisgKiBUaGUgcmVjZWl2ZSBkZXNjcmlwdG9yIGRhdGEgc3RydWN0dXJlIGlzIGRlZmluZWQgYmVsb3cKKyAqIGFzIFNYR19SQ1ZfREFUQV9ERVNDUklQVE9SLCBhbmQgdGhlIGNvcnJlc3BvbmRpbmcgYmxvY2sKKyAqIGlzIGRlZmluZWQgYXMgU1hHX1JDVl9ERVNDUklQVE9SX0JMT0NLLgorICoKKyAqIFRoaXMgcmVjZWl2ZSBkZXNjcmlwdG9yIGJsb2NrIGlzIGdpdmVuIHRvIHRoZSBjYXJkIGJ5IGZpbGxpbmcKKyAqIGluIHRoZSBTZ2wgZmllbGQgb2YgYSBTWEdfQ01EIGVudHJ5IGZyb20gcEFkYXB0LT5SY3ZSaW5nc1swXQorICogd2l0aCB0aGUgcGh5c2ljYWwgYWRkcmVzcyBvZiB0aGUgcmVjZWl2ZSBkZXNjcmlwdG9yIGJsb2NrLgorICoKKyAqIEJvdGggdGhlIHJlY2VpdmUgYnVmZmVycyBhbmQgdGhlIHJlY2VpdmUgZGVzY3JpcHRvciBibG9ja3MKKyAqIHJlcXVpcmUgYWRkaXRpb25hbCBkYXRhIHN0cnVjdHVyZXMgdG8gbWFpbnRhaW4gdGhlbQorICogb24gYSBmcmVlIHF1ZXVlIGFuZCBjb250YWluIG90aGVyIGluZm9ybWF0aW9uIGFzc29jaWF0ZWQgd2l0aCB0aGVtLgorICogVGhvc2UgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBkZWZpbmVkIGFzIHRoZSBTWEdfUkNWX0RBVEFfQlVGRkVSX0hEUgorICogYW5kIFNYR19SQ1ZfREVTQ1JJUFRPUl9CTE9DS19IRFIgcmVzcGVjdGl2ZWx5LgorICoKKyAqIFNpbmNlIGJvdGggdGhlIHJlY2VpdmUgYnVmZmVycyBhbmQgdGhlIHJlY2VpdmUgZGVzY3JpcHRvciBibG9jaworICogbXVzdCBiZSBhY2Nlc3NpYmxlIGJ5IHRoZSBjYXJkLCBib3RoIG11c3QgYmUgYWxsb2NhdGVkIG91dCBvZgorICogc2hhcmVkIG1lbW9yeS4gIFRvIGVuc3VyZSB0aGF0IHdlIGFsd2F5cyBoYXZlIGEgZGVzY3JpcHRvcgorICogYmxvY2sgYXZhaWxhYmxlIGZvciBldmVyeSAxMjggYnVmZmVycywgd2UgYWxsb2NhdGUgYWxsIG9mCisgKiB0aGVzZSByZXNvdXJjZXMgdG9nZXRoZXIgaW4gYSBzaW5nbGUgYmxvY2suICBUaGlzIGVudGlyZQorICogYmxvY2sgaXMgbWFuYWdlZCBieSBhIFNYR19SQ1ZfQkxPQ0tfSERSLCB3aG8ncyBzb2xlIHB1cnBvc2UKKyAqIGlzIHRvIG1haW50YWluIGFkZHJlc3MgaW5mb3JtYXRpb24gc28gdGhhdCB0aGUgZW50aXJlIGJsb2NrCisgKiBjYW4gYmUgZnJlZSBsYXRlci4KKyAqCisgKiBGdXJ0aGVyIGNvbXBsaWNhdGluZyBtYXR0ZXJzIGlzIHRoZSBmYWN0IHRoYXQgdGhlIHJlY2VpdmUKKyAqIGJ1ZmZlcnMgbXVzdCBiZSB2YXJpYWJsZSBpbiBsZW5ndGggaW4gb3JkZXIgdG8gYWNjb21vZGF0ZQorICoganVtYm8gZnJhbWUgY29uZmlndXJhdGlvbnMuICBXZSBjb25maWd1cmUgdGhlIGJ1ZmZlcgorICogbGVuZ3RoIHNvIHRoYXQgdGhlIGJ1ZmZlciBhbmQgaXQncyBjb3JyZXNwb25kaW5nIFNYR19SQ1ZfREFUQV9CVUZGRVJfSERSCisgKiBzdHJ1Y3R1cmUgYWRkIHVwIHRvIGFuIGV2ZW4gYm91bmRhcnkuICBUaGVuIHdlIHBsYWNlIHRoZQorICogcmVtYWluaW5nIGRhdGEgc3RydWN0dXJlcyBhZnRlciAxMjggb2YgdGhlbSBhcyBzaG93biBpbgorICogdGhlIGZvbGxvd2luZyBkaWFncmFtOgorICoKKyAqICBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXworICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICogfCAgICBWYXJpYWJsZSBsZW5ndGggcmVjZWl2ZSBidWZmZXIgIzEgICAgfAorICogfF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19ffAorICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICogfCAgICAgICBTWEdfUkNWX0RBVEFfQlVGRkVSX0hEUiAjMSAgICAgICAgfAorICogfF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19ffCA8PT0gRXZlbiAyayBvciAxMGsgYm91bmRhcnkKKyAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAqIHwgICAgICAgICAuLi4gcmVwZWF0IDItMTI4IC4uICAgICAgICAgICAgIHwKKyAqIHxfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX3wKKyAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAqIHwgICAgICBTWEdfUkNWX0RFU0NSSVBUT1JfQkxPQ0sgICAgICAgICAgIHwKKyAqIHwgIENvbnRhaW5zIFNYR19SQ1ZfREFUQV9ERVNDUklQVE9SICogMTI4IHwKKyAqIHxfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX3wKKyAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAqIHwgICAgICBTWEdfUkNWX0RFU0NSSVBUT1JfQkxPQ0tfSERSICAgICAgIHwKKyAqIHxfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX3wKKyAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAqIHwgICAgICAgICAgU1hHX1JDVl9CTE9DS19IRFIgICAgICAgICAgICAgIHwKKyAqIHxfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX3wKKyAqCisgKiBNZW1vcnkgY29uc3VtcHRpb246CisgKgkgIE5vbi1qdW1ibzoKKyAqICAgICAgQnVmZmVycyBhbmQgU1hHX1JDVl9EQVRBX0JVRkZFUl9IRFIgPSAyayAqIDEyOCA9IDI1NmsKKyAqICAgICsgU1hHX1JDVl9ERVNDUklQVE9SX0JMT0NLID0gMmsKKyAqICAgICsgU1hHX1JDVl9ERVNDUklQVE9SX0JMT0NLX0hEUiA9IH4zMgorICogICAgKyBTWEdfUkNWX0JMT0NLX0hEUiA9IH4zMgorICogICAgPT4gVG90YWwgPSB+MjU4ay9ibG9jaworICoKKyAqCSAgSnVtYm86CisgKiAgICAgIEJ1ZmZlcnMgYW5kIFNYR19SQ1ZfREFUQV9CVUZGRVJfSERSID0gMTBrICogMTI4ID0gMTI4MGsKKyAqICAgICsgU1hHX1JDVl9ERVNDUklQVE9SX0JMT0NLID0gMmsKKyAqICAgICsgU1hHX1JDVl9ERVNDUklQVE9SX0JMT0NLX0hEUiA9IH4zMgorICogICAgKyBTWEdfUkNWX0JMT0NLX0hEUiA9IH4zMgorICogICAgPT4gVG90YWwgPSB+MTI4MmsvYmxvY2sKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2RlZmluZSBTWEdfUkNWX0RBVEFfQlVGRkVSUwkJCTQwOTYJLy8gQW1vdW50IHRvIGdpdmUgdG8gdGhlIGNhcmQKKyNkZWZpbmUgU1hHX0lOSVRJQUxfUkNWX0RBVEFfQlVGRkVSUwk4MTkyCS8vIEluaXRpYWwgcG9vbCBvZiBidWZmZXJzCisjZGVmaW5lIFNYR19NSU5fUkNWX0RBVEFfQlVGRkVSUwkJMjA0OAkvLyBNaW5pbXVtIGFtb3VudCBhbmQgd2hlbiB0byBnZXQgbW9yZQorI2RlZmluZSBTWEdfTUFYX1JDVl9CTE9DS1MJCQkJMTI4CQkvLyA9IDE2Mzg0IHJlY2VpdmUgYnVmZmVycworCisvLyBSZWNlaXZlIGJ1ZmZlciBoZWFkZXIKK3R5cGVkZWYgc3RydWN0IF9TWEdfUkNWX0RBVEFfQlVGRkVSX0hEUiB7CisJZG1hX2FkZHJfdCAgICAgICAgICAJCQlQaHlzaWNhbEFkZHJlc3M7CS8vIEJ1ZmZlciBwaHlzaWNhbCBhZGRyZXNzCisJLy8gTm90ZSAtIERPIE5PVCBVU0UgdGhlIFZpcnR1YWxBZGRyZXNzIGZpZWxkIHRvIGxvY2F0ZSBkYXRhLgorCS8vIFVzZSB0aGUgc3hnLmg6U1hHX1JFQ0VJVkVfREFUQV9MT0NBVElPTiBtYWNybyBpbnN0ZWFkLgorCXZvaWQgKlZpcnR1YWxBZGRyZXNzOwkJLy8gU3RhcnQgb2YgYnVmZmVyCisJTElTVF9FTlRSWQkJCQkJCUZyZWVMaXN0OwkJCS8vIEZyZWUgcXVldWUgb2YgYnVmZmVycworCXN0cnVjdCBfU1hHX1JDVl9EQVRBX0JVRkZFUl9IRFIJKk5leHQ7CQkJCS8vIEZhc3RwYXRoIGRhdGEgYnVmZmVyIHF1ZXVlCisJdTMyCQkJCQkJCVNpemU7CQkJCS8vIEJ1ZmZlciBzaXplCisJdTMyCQkJCQkJCUJ5dGVPZmZzZXQ7CQkJLy8gU2VlIFNYR19SRVNUT1JFX01ETF9PRkZTRVQKKwl1bnNpZ25lZCBjaGFyCQkJCQkJCVN0YXRlOwkJCQkvLyBTZWUgU1hHX0JVRkZFUiBzdGF0ZSBhYm92ZQorCXVuc2lnbmVkIGNoYXIJCQkJCQkJU3RhdHVzOwkJCQkvLyBFdmVudCBzdGF0dXMgKHRvIGxvZyBQVVNIKQorCXN0cnVjdCBza19idWZmICAgICAgICAgICAgICAgICogc2tiOwkJCQkvLyBEb3VibGUgbWFwcGVkIChuYmwgYW5kIHBrdCkKK30gU1hHX1JDVl9EQVRBX0JVRkZFUl9IRFIsICpQU1hHX1JDVl9EQVRBX0JVRkZFUl9IRFI7CisKKy8vIFN4Z1Nsb3dSZWNlaXZlIHVzZXMgdGhlIFBBQ0tFVCAoc2tiKSBjb250YWluZWQKKy8vIGluIHRoZSBTWEdfUkNWX0RBVEFfQlVGRkVSX0hEUiB3aGVuIGluZGljYXRpbmcgZHVtYi1uaWMgZGF0YQorI2RlZmluZSBTeGdEdW1iUmN2UGFja2V0CSAgICAgICAgc2tiCisKKyNkZWZpbmUgU1hHX1JDVl9EQVRBX0hEUl9TSVpFCQkJMjU2CQkvLyBTcGFjZSBmb3IgU1hHX1JDVl9EQVRBX0JVRkZFUl9IRFIKKyNkZWZpbmUgU1hHX1JDVl9EQVRBX0JVRkZFUl9TSVpFCQkyMDQ4CS8vIE5vbiBqdW1ibyA9IDJrIGluY2x1ZGluZyBIRFIKKyNkZWZpbmUgU1hHX1JDVl9KVU1CT19CVUZGRVJfU0laRQkJMTAyNDAJLy8ganVtYm8gPSAxMGsgaW5jbHVkaW5nIEhEUgorCisvLyBSZWNlaXZlIGRhdGEgZGVzY3JpcHRvcgordHlwZWRlZiBzdHJ1Y3QgX1NYR19SQ1ZfREFUQV9ERVNDUklQVE9SIHsKKwl1bmlvbiB7CisJCXN0cnVjdCBza19idWZmICAgICoJVmlydHVhbEFkZHJlc3M7CQkJLy8gSG9zdCBoYW5kbGUKKwkJdTY0IAkJCUZvcmNlVG84Qnl0ZXM7CQkJLy8gRm9yY2UgeDg2IHRvIDgtYnl0ZSBib3VuZGFyeQorCX07CisJZG1hX2FkZHJfdCAgICAgICAgICAgICAJUGh5c2ljYWxBZGRyZXNzOworfSBTWEdfUkNWX0RBVEFfREVTQ1JJUFRPUiwgKlBTWEdfUkNWX0RBVEFfREVTQ1JJUFRPUjsKKworLy8gUmVjZWl2ZSBkZXNjcmlwdG9yIGJsb2NrCisjZGVmaW5lIFNYR19SQ1ZfREVTQ1JJUFRPUlNfUEVSX0JMT0NLCQkxMjgKKyNkZWZpbmUgU1hHX1JDVl9ERVNDUklQVE9SX0JMT0NLX1NJWkUJCTIwNDgJLy8gRm9yIHNhbml0eSBjaGVjawordHlwZWRlZiBzdHJ1Y3QgX1NYR19SQ1ZfREVTQ1JJUFRPUl9CTE9DSyB7CisJU1hHX1JDVl9EQVRBX0RFU0NSSVBUT1IJCURlc2NyaXB0b3JzW1NYR19SQ1ZfREVTQ1JJUFRPUlNfUEVSX0JMT0NLXTsKK30gU1hHX1JDVl9ERVNDUklQVE9SX0JMT0NLLCAqUFNYR19SQ1ZfREVTQ1JJUFRPUl9CTE9DSzsKKworLy8gUmVjZWl2ZSBkZXNjcmlwdG9yIGJsb2NrIGhlYWRlcgordHlwZWRlZiBzdHJ1Y3QgX1NYR19SQ1ZfREVTQ1JJUFRPUl9CTE9DS19IRFIgeworCXZvaWQgKgkJCQkJVmlydHVhbEFkZHJlc3M7CQkJLy8gU3RhcnQgb2YgMmsgYnVmZmVyCisJZG1hX2FkZHJfdAkgICAgICAgICAgICBQaHlzaWNhbEFkZHJlc3M7CQkvLyAuLmFuZCBpdCdzIHBoeXNpY2FsIGFkZHJlc3MKKwlMSVNUX0VOVFJZCQkJCUZyZWVMaXN0OwkJCQkvLyBGcmVlIHF1ZXVlIG9mIGRlc2NyaXB0b3IgYmxvY2tzCisJdW5zaWduZWQgY2hhcgkJCQkJU3RhdGU7CQkJCQkvLyBTZWUgU1hHX0JVRkZFUiBzdGF0ZSBhYm92ZQorfSBTWEdfUkNWX0RFU0NSSVBUT1JfQkxPQ0tfSERSLCAqUFNYR19SQ1ZfREVTQ1JJUFRPUl9CTE9DS19IRFI7CisKKy8vIFJlY2VpdmUgYmxvY2sgaGVhZGVyCit0eXBlZGVmIHN0cnVjdCBfU1hHX1JDVl9CTE9DS19IRFIgeworCXZvaWQgKgkJCQkJVmlydHVhbEFkZHJlc3M7CQkJLy8gU3RhcnQgb2YgdmlydHVhbCBtZW1vcnkKKwlkbWFfYWRkcl90CSAgICAgICAgICAgIFBoeXNpY2FsQWRkcmVzczsJCS8vIC4uYW5kIGl0J3MgcGh5c2ljYWwgYWRkcmVzcworCUxJU1RfRU5UUlkJCQkJQWxsTGlzdDsJCQkJLy8gUXVldWUgb2YgYWxsIFNYR19SQ1ZfQkxPQ0tTCit9IFNYR19SQ1ZfQkxPQ0tfSERSLCAqUFNYR19SQ1ZfQkxPQ0tfSERSOworCisvLyBNYWNyb3MgdG8gZGV0ZXJtaW5lIGRhdGEgc3RydWN0dXJlIG9mZnNldHMgaW50byByZWNlaXZlIGJsb2NrCisjZGVmaW5lIFNYR19SQ1ZfQkxPQ0tfU0laRShfQnVmZmVyc2l6ZSkgCQkJCQlcCisJKCgoX0J1ZmZlcnNpemUpICogU1hHX1JDVl9ERVNDUklQVE9SU19QRVJfQkxPQ0spICsJCVwKKwkgKHNpemVvZihTWEdfUkNWX0RFU0NSSVBUT1JfQkxPQ0spKSAgICAgICAgICAgICAgKwkJXAorCSAoc2l6ZW9mKFNYR19SQ1ZfREVTQ1JJUFRPUl9CTE9DS19IRFIpKSAgICAgICAgICArCQlcCisJIChzaXplb2YoU1hHX1JDVl9CTE9DS19IRFIpKSkKKyNkZWZpbmUgU1hHX1JDVl9CVUZGRVJfREFUQV9TSVpFKF9CdWZmZXJzaXplKQkJCQlcCisJKChfQnVmZmVyc2l6ZSkgLSBTWEdfUkNWX0RBVEFfSERSX1NJWkUpCisjZGVmaW5lIFNYR19SQ1ZfREFUQV9CVUZGRVJfSERSX09GRlNFVChfQnVmZmVyc2l6ZSkJCQlcCisJKChfQnVmZmVyc2l6ZSkgLSBTWEdfUkNWX0RBVEFfSERSX1NJWkUpCisjZGVmaW5lIFNYR19SQ1ZfREVTQ1JJUFRPUl9CTE9DS19PRkZTRVQoX0J1ZmZlcnNpemUpCQlcCisJKChfQnVmZmVyc2l6ZSkgKiBTWEdfUkNWX0RFU0NSSVBUT1JTX1BFUl9CTE9DSykKKyNkZWZpbmUgU1hHX1JDVl9ERVNDUklQVE9SX0JMT0NLX0hEUl9PRkZTRVQoX0J1ZmZlcnNpemUpCVwKKwkoKChfQnVmZmVyc2l6ZSkgKiBTWEdfUkNWX0RFU0NSSVBUT1JTX1BFUl9CTE9DSykgKwkJXAorCSAoc2l6ZW9mKFNYR19SQ1ZfREVTQ1JJUFRPUl9CTE9DSykpKQorI2RlZmluZSBTWEdfUkNWX0JMT0NLX0hEUl9PRkZTRVQoX0J1ZmZlcnNpemUpCQkJCVwKKwkoKChfQnVmZmVyc2l6ZSkgKiBTWEdfUkNWX0RFU0NSSVBUT1JTX1BFUl9CTE9DSykgKwkJXAorCSAoc2l6ZW9mKFNYR19SQ1ZfREVTQ1JJUFRPUl9CTE9DSykpICAgICAgICAgICAgICArCQlcCisJIChzaXplb2YoU1hHX1JDVl9ERVNDUklQVE9SX0JMT0NLX0hEUikpKQorCisvLyBVc2UgdGhlIG1pbmlwb3J0IHJlc2VydmVkIHBvcnRpb24gb2YgdGhlIE5CTCB0byBsb2NhdGUKKy8vIG91ciBTWEdfUkNWX0RBVEFfQlVGRkVSX0hEUiBzdHJ1Y3R1cmUuCit0eXBlZGVmIHN0cnVjdCBfU1hHX1JDVl9OQkxfUkVTRVJWRUQgeworCVBTWEdfUkNWX0RBVEFfQlVGRkVSX0hEUglSY3ZEYXRhQnVmZmVySGRyOworCXZvaWQgKgkJCQkJCUF2YWlsYWJsZTsKK30gU1hHX1JDVl9OQkxfUkVTRVJWRUQsICpQU1hHX1JDVl9OQkxfUkVTRVJWRUQ7CisKKyNkZWZpbmUgU1hHX1JDVl9OQkxfQlVGRkVSX0hEUihfTkJMKSAoKChQU1hHX1JDVl9OQkxfUkVTRVJWRUQpTkVUX0JVRkZFUl9MSVNUX01JTklQT1JUX1JFU0VSVkVEKF9OQkwpKS0+UmN2RGF0YUJ1ZmZlckhkcikKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogU2NhdHRlciBnYXRoZXIgbGlzdCBidWZmZXIKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjZGVmaW5lIFNYR19JTklUSUFMX1NHTF9CVUZGRVJTCQk4MTkyCS8vIEluaXRpYWwgcG9vbCBvZiBTR0wgYnVmZmVycworI2RlZmluZSBTWEdfTUlOX1NHTF9CVUZGRVJTCQkJMjA0OAkvLyBNaW5pbXVtIGFtb3VudCBhbmQgd2hlbiB0byBnZXQgbW9yZQorI2RlZmluZSBTWEdfTUFYX1NHTF9CVUZGRVJTCQkJMTYzODQJLy8gTWF4aW11bSB0byBhbGxvY2F0ZSAobm90ZSBBREFQVDp1c2hvcnQpCisKKworLy8gU2VsZiBpZGVudGlmeWluZyBzdHJ1Y3R1cmUgdHlwZQordHlwZWRlZiBlbnVtIF9TWEdfU0dMX1RZUEUgeworCVNYR19TR0xfRFVNQiwJCQkJLy8gRHVtYiBOSUMgU0dMCisJU1hHX1NHTF9TTE9XLAkJCQkvLyBTbG93cGF0aCBwcm90b2NvbCBoZWFkZXIgLSBzZWUgYmVsb3cKKwlTWEdfU0dMX0NISU1ORVkJCQkJLy8gQ2hpbW5leSBvZmZsb2FkIFNHTAorfSBTWEdfU0dMX1RZUEUsIFBTWEdfU0dMX1RZUEU7CisKKy8vIE5vdGUgLSB0aGUgZGVzY3JpcHRpb24gYmVsb3cgaXMgTWljcm9zb2Z0IHNwZWNpZmljCisvLworLy8gVGhlIGZvbGxvd2luZyBkZWZpbml0aW9uIHNwZWNpZmllcyB0aGUgYW1vdW50IG9mIHNoYXJlZCBtZW1vcnkgdG8gYWxsb2NhdGUKKy8vIGZvciB0aGUgU0NBVFRFUl9HQVRIRVJfTElTVCBwb3J0aW9uIG9mIHRoZSBTWEdfU0NBVFRFUl9HQVRIRVIgZGF0YSBzdHJ1Y3R1cmUuCisvLyBUaGUgZm9sbG93aW5nIGNvbnNpZGVyYXRpb25zIGFwcGx5IHdoZW4gc2V0dGluZyB0aGlzIHZhbHVlOgorLy8gLSBGaXJzdCwgdGhlIFNhaGFyYSBjYXJkIGlzIGRlc2lnbmVkIHRvIHJlYWQgdGhlIE1pY3Jvc29mdCBTR0wgc3RydWN0dXJlCisvLyAJIHN0cmFpZ2h0IG91dCBvZiBob3N0IG1lbW9yeS4gIFRoaXMgbWVhbnMgdGhhdCB0aGUgU0dMIG11c3QgcmVzaWRlIGluCisvLwkgc2hhcmVkIG1lbW9yeS4gIElmIHRoZSBsZW5ndGggaGVyZSBpcyBzbWFsbGVyIHRoYW4gdGhlIFNHTCBmb3IgdGhlCisvLwkgTkVUX0JVRkZFUiwgdGhlbiBORElTIHdpbGwgYWxsb2NhdGUgaXRzIG93biBidWZmZXIuICBUaGUgYnVmZmVyCisvLwkgdGhhdCBORElTIGFsbG9jYXRlcyBpcyBub3QgaW4gc2hhcmVkIG1lbW9yeSwgc28gd2hlbiB0aGlzIGhhcHBlbnMsCisvLwkgdGhlIFNHTCB3aWxsIG5lZWQgdG8gYmUgY29waWVkIHRvIGEgc2V0IG9mIFNYR19TQ0FUVEVSX0dBVEhFUiBidWZmZXJzLgorLy8JIEluIG90aGVyIHdvcmRzLi4gd2UgZG9uJ3Qgd2FudCB0aGlzIHZhbHVlIHRvIGJlIHRvbyBzbWFsbC4KKy8vIC0gT24gdGhlIG90aGVyIGhhbmQuLiB3ZSdyZSBhbGxvY2F0aW5nIHVwIHRvIDE2ayBvZiB0aGVzZSB0aGluZ3MuICBJZgorLy8JIHdlIG1ha2UgdGhpcyB0b28gYmlnLCB3ZSBzdGFydCB0byBjb25zdW1lIGEgdG9uIG9mIG1lbW9yeS4uCisvLyBBdCB0aGUgbW9tZW50LCBJJ20gZ29pbmcgdG8gbGltaXQgdGhlIG51bWJlciBvZiBTRyBlbnRyaWVzIHRvIDE1MC4KKy8vIElmIGVhY2ggZW50cnkgbWFwcyByb3VnaGx5IDRrLCB0aGVuIHRoaXMgc2hvdWxkIGNvdmVyIHJvdWdobHkgNjAwa0IKKy8vIE5FVF9CVUZGRVJzLiAgRnVydGhlcm1vcmUsIHNpbmNlIGVhY2ggZW50cnkgaXMgMjQgYnl0ZXMsIHRoZSB0b3RhbAorLy8gU0dFIHBvcnRpb24gb2YgdGhlIHN0cnVjdHVyZSBjb25zdW1lcyAzNjAwIGJ5dGVzLCB3aGljaCBzaG91bGQgYWxsb3cKKy8vIHRoZSBlbnRpcmUgU1hHX1NDQVRURVJfR0FUSEVSIHN0cnVjdHVyZSB0byByZXNpZGUgY29tZm9ydGFibHkgd2l0aGluCisvLyBhIDRrIGJsb2NrLCBwcm92aWRpbmcgdGhlIHJlbWFpbmluZyBmaWVsZHMgc3RheSB1bmRlciA1MDAgYnl0ZXMuCisvLworLy8gU28gd2l0aCAxNTAgZW50cmllcywgdGhlIFNYR19TQ0FUVEVSX0dBVEhFUiBzdHJ1Y3R1cmUgYmVjb21lcyByb3VnaGx5CisvLyA0ay4gIEF0IDE2ayBvZiB0aGVtLCB0aGF0IGFtb3VudHMgdG8gNjRNIG9mIHNoYXJlZCBtZW1vcnkuICBBIHRvbiwgYnV0CisvLyBtYW5hZ2VhYmxlLgorI2RlZmluZSBTWEdfU0dMX0VOVFJJRVMJCTE1MAorCisvLyBUaGUgdWNvZGUgZXhwZWN0cyBhbiBORElTIFNHTCBzdHJ1Y3R1cmUgdGhhdAorLy8gaXMgZm9ybWF0dGVkIGZvciBhbiB4NjQgc3lzdGVtLiAgV2hlbiBydW5uaW5nCisvLyBvbiBhbiB4NjQgc3lzdGVtLCB3ZSBjYW4gc2ltcGx5IGhhbmQgdGhlIE5ESVMgU0dMCisvLyB0byB0aGUgY2FyZCBkaXJlY3RseS4gIEZvciB4ODYgc3lzdGVtcyB3ZSBtdXN0IHJlY29uc3RydWN0CisvLyB0aGUgU0dMLiAgVGhlIGZvbGxvd2luZyBzdHJ1Y3R1cmUgZGVmaW5lcyBhbiB4NjQKKy8vIGZvcm1hdHRlZCBTR0wgZW50cnkKK3R5cGVkZWYgc3RydWN0IF9TWEdfWDY0X1NHRSB7CisgICAgZG1hNjRfYWRkcl90ICAgICAgCUFkZHJlc3M7CS8vIHNhbWUgYXMgd2RtLmgKKyAgICB1MzIJCQkJTGVuZ3RoOwkJLy8gc2FtZSBhcyB3ZG0uaAorCXUzMgkJCQlDb21waWxlclBhZDsvLyBUaGUgY29tcGlsZXIgcGFkcyB0byA4LWJ5dGVzCisgICAgdTY0IAkJCVJlc2VydmVkOwkvLyB1MzIgKiBpbiB3ZG0uaC4gIEZvcmNlIHRvIDggYnl0ZXMKK30gU1hHX1g2NF9TR0UsICpQU1hHX1g2NF9TR0U7CisKK3R5cGVkZWYgc3RydWN0IF9TQ0FUVEVSX0dBVEhFUl9FTEVNRU5UIHsKKyAgICBkbWE2NF9hZGRyX3QgICAgICAJQWRkcmVzczsJLy8gc2FtZSBhcyB3ZG0uaAorICAgIHUzMgkJCQlMZW5ndGg7CQkvLyBzYW1lIGFzIHdkbS5oCisJdTMyCQkJCUNvbXBpbGVyUGFkOy8vIFRoZSBjb21waWxlciBwYWRzIHRvIDgtYnl0ZXMKKyAgICB1NjQgCQkJUmVzZXJ2ZWQ7CS8vIHUzMiAqIGluIHdkbS5oLiAgRm9yY2UgdG8gOCBieXRlcworfSBTQ0FUVEVSX0dBVEhFUl9FTEVNRU5ULCAqUFNDQVRURVJfR0FUSEVSX0VMRU1FTlQ7CisKKwordHlwZWRlZiBzdHJ1Y3QgX1NDQVRURVJfR0FUSEVSX0xJU1QgeworICAgIHUzMgkJCQkJTnVtYmVyT2ZFbGVtZW50czsKKyAgICB1MzIgKgkJCQlSZXNlcnZlZDsKKyAgICBTQ0FUVEVSX0dBVEhFUl9FTEVNRU5UCUVsZW1lbnRzW107Cit9IFNDQVRURVJfR0FUSEVSX0xJU1QsICpQU0NBVFRFUl9HQVRIRVJfTElTVDsKKworLy8gVGhlIGNhcmQgZG9lc24ndCBjYXJlIGFib3V0IGFueXRoaW5nIGV4Y2VwdCBlbGVtZW50cywgc28KKy8vIHdlIGNhbiBsZWF2ZSB0aGUgdTMyICogcmVzZXJ2ZWQgZmllbGQgYWxvbmUgaW4gdGhlIGZvbGxvd2luZworLy8gU0dMIHN0cnVjdHVyZS4gIEJ1dCByZWRlZmluZSBmcm9tIHdkbS5oOlNDQVRURVJfR0FUSEVSX0xJU1Qgc28KKy8vIHdlIGNhbiBzcGVjaWZ5IFNYR19YNjRfU0dFIGFuZCBkZWZpbmUgYSBmaXhlZCBudW1iZXIgb2YgZWxlbWVudHMKK3R5cGVkZWYgc3RydWN0IF9TWEdfWDY0X1NHTCB7CisgICAgdTMyCQkJCQlOdW1iZXJPZkVsZW1lbnRzOworICAgIHUzMiAqCQkJCVJlc2VydmVkOworICAgIFNYR19YNjRfU0dFCQkJCUVsZW1lbnRzW1NYR19TR0xfRU5UUklFU107Cit9IFNYR19YNjRfU0dMLCAqUFNYR19YNjRfU0dMOworCit0eXBlZGVmIHN0cnVjdCBfU1hHX1NDQVRURVJfR0FUSEVSIHsKKwlTWEdfU0dMX1RZUEUJCQkJCQlUeXBlOwkJCS8vIEZJUlNUISBEdW1iLW5pYyBvciBvZmZsb2FkCisJdm9pZCAqICAgCQkJCQkJCWFkYXB0ZXI7CQkvLyBCYWNrIHBvaW50ZXIgdG8gYWRhcHRlcgorCUxJU1RfRU5UUlkJCQkJCQkJRnJlZUxpc3Q7CQkvLyBGcmVlIFNYR19TQ0FUVEVSX0dBVEhFUiBibG9ja3MKKwlMSVNUX0VOVFJZCQkJCQkJCUFsbExpc3Q7CQkvLyBBbGwgU1hHX1NDQVRURVJfR0FUSEVSIGJsb2NrcworCWRtYV9hZGRyX3QJCQkJICAgICAgICAgICAgUGh5c2ljYWxBZGRyZXNzOy8vIHBoeXNpY2FsIGFkZHJlc3MKKwl1bnNpZ25lZCBjaGFyCQkJCQkJCQlTdGF0ZTsJCQkvLyBTZWUgU1hHX0JVRkZFUiBzdGF0ZSBhYm92ZQorCXVuc2lnbmVkIGNoYXIJCQkJCQkJCUNtZEluZGV4OwkJLy8gQ29tbWFuZCByaW5nIGluZGV4CisJc3RydWN0IHNrX2J1ZmYgICAgICAgICAgICAgICAgICAgICoJRHVtYlBhY2tldDsJCS8vIEFzc29jaWF0ZWQgUGFja2V0CisJdTMyCQkJCQkJCQlEaXJlY3Rpb247CQkvLyBGb3IgYXN5bmNocm9ub3VzIGNvbXBsZXRpb25zCisJdTMyCQkJCQkJCQlDdXJPZmZzZXQ7CQkvLyBDdXJyZW50IFNHTCBvZmZzZXQKKwl1MzIJCQkJCQkJCVNnbFJlZjsJCQkvLyBTR0wgcmVmZXJlbmNlIGNvdW50CisJVkxBTl9IRFIJCQkJCQkJVmxhblRhZzsJCS8vIFZMQU4gdGFnIHRvIGJlIGluc2VydGVkIGludG8gU0dMCisJUFNDQVRURVJfR0FUSEVSX0xJU1QgICAJCQkJcFNnbDsJCQkvLyBTR0wgQWRkci4gUG9zc2libHkgJlNnbAorCVNYR19YNjRfU0dMCQkJCQkJCVNnbDsJCQkvLyBTR0wgaGFuZGVkIHRvIGNhcmQKK30gU1hHX1NDQVRURVJfR0FUSEVSLCAqUFNYR19TQ0FUVEVSX0dBVEhFUjsKKworI2lmIGRlZmluZWQoQ09ORklHX1g4Nl82NCkKKyNkZWZpbmUgU1hHX1NHTF9CVUZGRVIoX1N4Z1NnbCkJCSgmX1N4Z1NnbC0+U2dsKQorI2RlZmluZSBTWEdfU0dMX0JVRl9TSVpFCQkJc2l6ZW9mKFNYR19YNjRfU0dMKQorI2VsaWYgZGVmaW5lZChDT05GSUdfWDg2KQorLy8gRm9yY2UgTkRJUyB0byBnaXZlIHVzIGl0J3Mgb3duIGJ1ZmZlciBzbyB3ZSBjYW4gcmVmb3JtYXQgdG8gb3VyIG93bgorI2RlZmluZSBTWEdfU0dMX0JVRkZFUihfU3hnU2dsKQkJTlVMTAorI2RlZmluZSBTWEdfU0dMX0JVRl9TSVpFCQkJMAorI2Vsc2UKKyAgICBTdG9wIENvbXBpbGF0aW9uOworI2VuZGlmCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9zeGcvc3hnaHcuaCBiL2RyaXZlcnMvc3RhZ2luZy9zeGcvc3hnaHcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZjRmNmVmCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3N4Zy9zeGdody5oCkBAIC0wLDAgKzEsNzM0IEBACisvKgorICogQ29weXJpZ2h0IKkgMTk5Ny0yMDA3IEFsYWNyaXRlY2gsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZAorICoKKyAqICRJZDogc3hnaHcuaCx2IDEuMiAyMDA4LzA3LzI0IDE3OjI0OjIzIGNocmlzIEV4cCAkCisgKgorICogc3hnaHcuaDoKKyAqCisgKiBUaGlzIGZpbGUgY29udGFpbnMgc3RydWN0dXJlcyBhbmQgZGVmaW5pdGlvbnMgZm9yIHRoZQorICogQWxhY3JpdGVjaCBTYWhhcmEgaGFyZHdhcmUKKyAqLworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb25maWd1cmF0aW9uIHNwYWNlCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8vICBQQ0kgVmVuZG9yIElECisjZGVmaW5lIFNYR19WRU5ET1JfSUQJCQkweDEzOUEJLy8gQWxhY3JpdGVjaCdzIFZlbmRvciBJRAorCisvLyAgUENJIERldmljZSBJRAorI2RlZmluZSBTWEdfREVWSUNFX0lECQkJMHgwMDA5CS8vIFNhaGFyYSBEZXZpY2UgSUQKKworLy8KKy8vIFN1YnN5c3RlbSBJRHMuCisvLworLy8gVGhlIHN1YnN5c3RlbSBJRCB2YWx1ZSBpcyBicm9rZW4gaW50byBiaXQgZmllbGRzIGFzIGZvbGxvd3M6CisvLwkJQml0cyBbMTU6MTJdIC0gRnVuY3Rpb24KKy8vCQlCaXRzIFsxMTo4XSAgLSBPRU0gYW5kL29yIG9wZXJhdGluZyBzeXN0ZW0uCisvLwkJQml0cyBbNzowXSAgIC0gQmFzZSBTSUQuCisvLworLy8gU1NJRCBmaWVsZCAoYml0KSBtYXNrcworI2RlZmluZSBTU0lEX0JBU0VfTUFTSwkJCQkJMHgwMEZGCS8vIEJhc2Ugc3Vic3lzdGVtIElEIG1hc2sKKyNkZWZpbmUgU1NJRF9PRU1fTUFTSwkJCQkJMHgwRjAwCS8vIFN1YnN5c3RlbSBPRU0gbWFzaworI2RlZmluZSBTU0lEX0ZVTkNfTUFTSwkJCQkJMHhGMDAwCS8vIFN1YnN5c3RlbSBmdW5jdGlvbiBtYXNrCisKKy8vIEJhc2UgU1NJRCdzCisjZGVmaW5lIFNTSURfU0FIQVJBX1BST1RPCQkJCTB4MDAxOAkvLyAxMDAwMjIgU2FoYXJhIHByb3RvdHlwZSAoWGVuUGFrKSBib2FyZAorI2RlZmluZSBTU0lEX1NBSEFSQV9GSUJFUgkJCQkweDAwMTkJLy8gMTAwMDIzIFNhaGFyYSAxLXBvcnQgZmliZXIgYm9hcmQKKyNkZWZpbmUgU1NJRF9TQUhBUkFfQ09QUEVSCQkJCTB4MDAxQQkvLyAxMDAwMjQgU2FoYXJhIDEtcG9ydCBjb3BwZXIgYm9hcmQKKworLy8gVXNlZnVsIFNTSUQgbWFjcm9zCisjZGVmaW5lCVNTSURfQkFTRShzc2lkKQkJCSgoc3NpZCkgJiBTU0lEX0JBU0VfTUFTSykJCS8vIGlzb2xhdGUgYmFzZSBTU0lEIGJpdHMKKyNkZWZpbmUJU1NJRF9PRU0oc3NpZCkJCQkoKHNzaWQpICYgU1NJRF9PRU1fTUFTSykJCS8vIGlzb2xhdGUgU1NJRCBPRU0gYml0cworI2RlZmluZQlTU0lEX0ZVTkMoc3NpZCkJCQkoKHNzaWQpICYgU1NJRF9GVU5DX01BU0spCQkvLyBpc29sYXRlIFNTSUQgZnVuY3Rpb24gYml0cworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogSFcgUmVnaXN0ZXIgU3BhY2UKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2RlZmluZSBTWEdfSFdSRUdfTUVNU0laRQkweDQwMDAJCS8vIDE2aworCisjcHJhZ21hIHBhY2socHVzaCwgMSkKK3R5cGVkZWYgc3RydWN0IF9TWEdfSFdfUkVHUyB7CisJdTMyCQlSZXNldDsJCQkJLy8gV3JpdGUgMHhkZWFkIHRvIGludm9rZSBzb2Z0IHJlc2V0CisJdTMyCQlQYWQxOwkJCQkvLyBObyByZWdpc3RlciBkZWZpbmVkIGF0IG9mZnNldCA0CisJdTMyCQlJbnRlcnJ1cHRNYXNrMDsJCS8vIERlYXNzZXJ0IGxlZ2FjeSBpbnRlcnJ1cHQgb24gZnVuY3Rpb24gMAorCXUzMgkJSW50ZXJydXB0TWFzazE7CQkvLyBEZWFzc2VydCBsZWdhY3kgaW50ZXJydXB0IG9uIGZ1bmN0aW9uIDEKKwl1MzIJCVVjb2RlRGF0YUxvdzsJCS8vIFN0b3JlIG1pY3JvY29kZSBpbnN0cnVjdGlvbiBiaXRzIDMxLTAKKwl1MzIJCVVjb2RlRGF0YU1pZGRsZTsJLy8gU3RvcmUgbWljcm9jb2RlIGluc3RydWN0aW9uIGJpdHMgNjMtMzIKKwl1MzIJCVVjb2RlRGF0YUhpZ2g7CQkvLyBTdG9yZSBtaWNyb2NvZGUgaW5zdHJ1Y3Rpb24gYml0cyA5NS02NAorCXUzMgkJVWNvZGVBZGRyOwkJCS8vIFN0b3JlIG1pY3JvY29kZSBhZGRyZXNzIC0gU2VlIGZsYWdzIGJlbG93CisJdTMyCQlQYWRUbzB4ODBbMjRdOwkJLy8gUGFkIHRvIFhjdiBjb25maWd1cmF0aW9uIHJlZ2lzdGVycworCXUzMgkJTWFjQ29uZmlnMDsJCQkvLyAweDgwIC0gQVhHTUFDIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgMAorCXUzMgkJTWFjQ29uZmlnMTsJCQkvLyAweDg0IC0gQVhHTUFDIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgMQorCXUzMgkJTWFjQ29uZmlnMjsJCQkvLyAweDg4IC0gQVhHTUFDIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgMgorCXUzMgkJTWFjQ29uZmlnMzsJCQkvLyAweDhDIC0gQVhHTUFDIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgMworCXUzMgkJTWFjQWRkcmVzc0xvdzsJCS8vIDB4OTAgLSBBWEdNQUMgTUFDIFN0YXRpb24gQWRkcmVzcyAtIG9jdGV0cyAxLTQKKwl1MzIJCU1hY0FkZHJlc3NIaWdoOwkJLy8gMHg5NCAtIEFYR01BQyBNQUMgU3RhdGlvbiBBZGRyZXNzIC0gb2N0ZXRzIDUtNgorCXUzMgkJTWFjUmVzZXJ2ZWQxWzJdOwkvLyAweDk4IC0gQVhHTUFDIFJlc2VydmVkCisJdTMyCQlNYWNNYXhGcmFtZUxlbjsJCS8vIDB4QTAgLSBBWEdNQUMgTWF4aW11bSBGcmFtZSBMZW5ndGgKKwl1MzIJCU1hY1Jlc2VydmVkMlsyXTsJLy8gMHhBNCAtIEFYR01BQyBSZXNlcnZlZAorCXUzMgkJTWFjUmV2aXNpb247CQkvLyAweEFDIC0gQVhHTUFDIFJldmlzaW9uIExldmVsIFJlZ2lzdGVyCisJdTMyCQlNYWNSZXNlcnZlZDNbNF07CS8vIDB4QjAgLSBBWEdNQUMgUmVzZXJ2ZWQKKwl1MzIJCU1hY0FtaWltQ21kOwkJLy8gMHhDMCAtIEFYR01BQyBBTUlJTSBDb21tYW5kIFJlZ2lzdGVyCisJdTMyCQlNYWNBbWlpbUZpZWxkOwkJLy8gMHhDNCAtIEFYR01BQyBBTUlJTSBGaWVsZCBSZWdpc3RlcgorCXUzMgkJTWFjQW1paW1Db25maWc7CQkvLyAweEM4IC0gQVhHTUFDIEFNSUlNIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIKKwl1MzIJCU1hY0FtaWltTGluazsJCS8vIDB4Q0MgLSBBWEdNQUMgQU1JSU0gTGluayBGYWlsIFZlY3RvciBSZWdpc3RlcgorCXUzMgkJTWFjQW1paW1JbmRpY2F0b3I7CS8vIDB4RDAgLSBBWEdNQUMgQU1JSU0gSW5kaWNhdG9yIFJlZ2lzdG9yCisJdTMyCQlQYWRUbzB4MTAwWzExXTsJCS8vIDB4RDQgLSAweDEwMCAtIFBhZAorCXUzMgkJWG10Q29uZmlnOwkJCS8vIDB4MTAwIC0gVHJhbnNtaXQgQ29uZmlndXJhdGlvbiBSZWdpc3RlcgorCXUzMgkJUmN2Q29uZmlnOwkJCS8vIDB4MTA0IC0gUmVjZWl2ZSBDb25maWd1cmF0aW9uIFJlZ2lzdGVyIDEKKwl1MzIJCUxpbmtBZGRyZXNzMExvdzsJLy8gMHgxMDggLSBMaW5rIGFkZHJlc3MgMAorCXUzMgkJTGlua0FkZHJlc3MwSGlnaDsJLy8gMHgxMEMgLSBMaW5rIGFkZHJlc3MgMAorCXUzMgkJTGlua0FkZHJlc3MxTG93OwkvLyAweDExMCAtIExpbmsgYWRkcmVzcyAxCisJdTMyCQlMaW5rQWRkcmVzczFIaWdoOwkvLyAweDExNCAtIExpbmsgYWRkcmVzcyAxCisJdTMyCQlMaW5rQWRkcmVzczJMb3c7CS8vIDB4MTE4IC0gTGluayBhZGRyZXNzIDIKKwl1MzIJCUxpbmtBZGRyZXNzMkhpZ2g7CS8vIDB4MTFDIC0gTGluayBhZGRyZXNzIDIKKwl1MzIJCUxpbmtBZGRyZXNzM0xvdzsJLy8gMHgxMjAgLSBMaW5rIGFkZHJlc3MgMworCXUzMgkJTGlua0FkZHJlc3MzSGlnaDsJLy8gMHgxMjQgLSBMaW5rIGFkZHJlc3MgMworCXUzMgkJVG9lcGxpdHpLZXlbMTBdOwkvLyAweDEyOCAtIDB4MTUwIC0gVG9lcGxpdHoga2V5CisJdTMyCQlTb2NrZXRLZXlbMTBdOwkJLy8gMHgxNTAgLSAweDE3OCAtIFNvY2tldCBLZXkKKwl1MzIJCUxpbmtTdGF0dXM7CQkJLy8gMHgxNzggLSBMaW5rIHN0YXR1cworCXUzMgkJQ2xlYXJTdGF0czsJCQkvLyAweDE3QyAtIENsZWFyIFN0YXRzCisJdTMyCQlYbXRFcnJvcnNMb3c7CQkvLyAweDE4MCAtIFRyYW5zbWl0IHN0YXRzIC0gZXJyb3JzCisJdTMyCQlYbXRFcnJvcnNIaWdoOwkJLy8gMHgxODQgLSBUcmFuc21pdCBzdGF0cyAtIGVycm9ycworCXUzMgkJWG10RnJhbWVzTG93OwkJLy8gMHgxODggLSBUcmFuc21pdCBzdGF0cyAtIGZyYW1lIGNvdW50CisJdTMyCQlYbXRGcmFtZXNIaWdoOwkJLy8gMHgxOEMgLSBUcmFuc21pdCBzdGF0cyAtIGZyYW1lIGNvdW50CisJdTMyCQlYbXRCeXRlc0xvdzsJCS8vIDB4MTkwIC0gVHJhbnNtaXQgc3RhdHMgLSBieXRlIGNvdW50CisJdTMyCQlYbXRCeXRlc0hpZ2g7CQkvLyAweDE5NCAtIFRyYW5zbWl0IHN0YXRzIC0gYnl0ZSBjb3VudAorCXUzMgkJWG10VGNwU2VnbWVudHNMb3c7CS8vIDB4MTk4IC0gVHJhbnNtaXQgc3RhdHMgLSBUQ1Agc2VnbWVudHMKKwl1MzIJCVhtdFRjcFNlZ21lbnRzSGlnaDsJLy8gMHgxOUMgLSBUcmFuc21pdCBzdGF0cyAtIFRDUCBzZWdtZW50cworCXUzMgkJWG10VGNwQnl0ZXNMb3c7CQkvLyAweDFBMCAtIFRyYW5zbWl0IHN0YXRzIC0gVENQIGJ5dGVzCisJdTMyCQlYbXRUY3BCeXRlc0hpZ2g7CS8vIDB4MUE0IC0gVHJhbnNtaXQgc3RhdHMgLSBUQ1AgYnl0ZXMKKwl1MzIJCVJjdkVycm9yc0xvdzsJCS8vIDB4MUE4IC0gUmVjZWl2ZSBzdGF0cyAtIGVycm9ycworCXUzMgkJUmN2RXJyb3JzSGlnaDsJCS8vIDB4MUFDIC0gUmVjZWl2ZSBzdGF0cyAtIGVycm9ycworCXUzMgkJUmN2RnJhbWVzTG93OwkJLy8gMHgxQjAgLSBSZWNlaXZlIHN0YXRzIC0gZnJhbWUgY291bnQKKwl1MzIJCVJjdkZyYW1lc0hpZ2g7CQkvLyAweDFCNCAtIFJlY2VpdmUgc3RhdHMgLSBmcmFtZSBjb3VudAorCXUzMgkJUmN2Qnl0ZXNMb3c7CQkvLyAweDFCOCAtIFJlY2VpdmUgc3RhdHMgLSBieXRlIGNvdW50CisJdTMyCQlSY3ZCeXRlc0hpZ2g7CQkvLyAweDFCQyAtIFJlY2VpdmUgc3RhdHMgLSBieXRlIGNvdW50CisJdTMyCQlSY3ZUY3BTZWdtZW50c0xvdzsJLy8gMHgxQzAgLSBSZWNlaXZlIHN0YXRzIC0gVENQIHNlZ21lbnRzCisJdTMyCQlSY3ZUY3BTZWdtZW50c0hpZ2g7CS8vIDB4MUM0IC0gUmVjZWl2ZSBzdGF0cyAtIFRDUCBzZWdtZW50cworCXUzMgkJUmN2VGNwQnl0ZXNMb3c7CQkvLyAweDFDOCAtIFJlY2VpdmUgc3RhdHMgLSBUQ1AgYnl0ZXMKKwl1MzIJCVJjdlRjcEJ5dGVzSGlnaDsJLy8gMHgxQ0MgLSBSZWNlaXZlIHN0YXRzIC0gVENQIGJ5dGVzCisJdTMyCQlQYWRUbzB4MjAwWzEyXTsJCS8vIDB4MUQwIC0gMHgyMDAgLSBQYWQKKwl1MzIJCVNvZnR3YXJlWzE5MjBdOwkJLy8gMHgyMDAgLSAweDIwMDAgLSBTb2Z0d2FyZSBkZWZpbmVkIChub3QgdXNlZCkKKwl1MzIJCU1zaXhUYWJsZVsxMDI0XTsJLy8gMHgyMDAwIC0gMHgzMDAwIC0gTVNJWCBUYWJsZQorCXUzMgkJTXNpeEJpdEFycmF5WzEwMjRdOwkvLyAweDMwMDAgLSAweDQwMDAgLSBNU0lYIFBlbmRpbmcgQml0IEFycmF5Cit9IFNYR19IV19SRUdTLCAqUFNYR19IV19SRUdTOworI3ByYWdtYSBwYWNrKHBvcCkKKworLy8gTWljcm9jb2RlIEFkZHJlc3MgRmxhZ3MKKyNkZWZpbmUJTUlDUk9DT0RFX0FERFJFU1NfR08JCTB4ODAwMDAwMDAJLy8gU3RhcnQgbWljcm9jb2RlCisjZGVmaW5lCU1JQ1JPQ09ERV9BRERSRVNTX1dSSVRFCQkweDQwMDAwMDAwCS8vIFN0b3JlIG1pY3JvY29kZQorI2RlZmluZQlNSUNST0NPREVfQUREUkVTU19SRUFECQkweDIwMDAwMDAwCS8vIFJlYWQgbWljcm9jb2RlCisjZGVmaW5lCU1JQ1JPQ09ERV9BRERSRVNTX1BBUklUWQkweDEwMDAwMDAwCS8vIFBhcml0eSBlcnJvciBkZXRlY3RlZAorI2RlZmluZQlNSUNST0NPREVfQUREUkVTU19NQVNLCQkweDAwMDAxRkZGCS8vIEFkZHJlc3MgYml0cworCisvLyBMaW5rIEFkZHJlc3MgUmVnaXN0ZXJzCisjZGVmaW5lIExJTktfQUREUkVTU19FTkFCTEUJCQkweDgwMDAwMDAwCS8vIEFwcGxpZWQgdG8gbGluayBhZGRyZXNzIGhpZ2gKKworLy8gTWljcm9zb2Z0IHJlZ2lzdGVyIHNwYWNlIHNpemUKKyNkZWZpbmUgU1hHX1VDT0RFUkVHX01FTVNJWkUJMHg0MDAwMAkJLy8gMjU2aworCisvLyBTYWhhcmEgbWljcm9jb2RlIHJlZ2lzdGVyIGFkZHJlc3MgZm9ybWF0LiAgVGhlIGNvbW1hbmQgY29kZSwKKy8vIGV4dGVuZGVkIGNvbW1hbmQgY29kZSwgYW5kIGFzc29jaWF0ZWQgcHJvY2Vzc29yIGFyZSBlbmNvZGVkIGluCisvLyB0aGUgYWRkcmVzcyBiaXRzIGFzIGZvbGxvd3MKKyNkZWZpbmUgU1hHX0FERFJFU1NfQ09ERV9TSElGVAkJMgkJCS8vIEJhc2UgY29tbWFuZCBjb2RlCisjZGVmaW5lIFNYR19BRERSRVNTX0NPREVfTUFTSwkJMHgwMDAwMDAzQworI2RlZmluZSBTWEdfQUREUkVTU19FWENPREVfU0hJRlQJNgkJCS8vIEV4dGVuZGVkIChvciBzdWIpIGNvbW1hbmQgY29kZQorI2RlZmluZSBTWEdfQUREUkVTU19FWENPREVfTUFTSwkJMHgwMDAwMUZDMAorI2RlZmluZQlTWEdfQUREUkVTU19DUFVJRF9TSElGVAkJMTMJCQkvLyBDUFUKKyNkZWZpbmUgU1hHX0FERFJFU1NfQ1BVSURfTUFTSwkJMHgwMDAzRTAwMAorI2RlZmluZSBTWEdfUkVHSVNURVJfU0laRV9QRVJfQ1BVCTB4MDAwMDIwMDAJLy8gVXNlZCB0byBzYW5pdHkgY2hlY2sgVUNPREVfUkVHUyBzdHJ1Y3R1cmUKKworLy8gU2FoYXJhIHJlY2VpdmUgc2VxdWVuY2VyIHN0YXR1cyB2YWx1ZXMKKyNkZWZpbmUgU1hHX1JDVl9TVEFUVVNfQVRUTgkJCQkJMHg4MDAwMDAwMAkvLyBBdHRlbnRpb24KKyNkZWZpbmUgU1hHX1JDVl9TVEFUVVNfVFJBTlNQT1JUX01BU0sJCTB4M0YwMDAwMDAJLy8gVHJhbnNwb3J0IG1hc2sKKyNkZWZpbmUgU1hHX1JDVl9TVEFUVVNfVFJBTlNQT1JUX0VSUk9SCQkweDIwMDAwMDAwCS8vIFRyYW5zcG9ydCBlcnJvcgorI2RlZmluZSBTWEdfUkNWX1NUQVRVU19UUkFOU1BPUlRfQ1NVTQkJMHgyMzAwMDAwMAkvLyBUcmFuc3BvcnQgY2tzdW0gZXJyb3IKKyNkZWZpbmUgU1hHX1JDVl9TVEFUVVNfVFJBTlNQT1JUX1VGTE9XCQkweDIyMDAwMDAwCS8vIFRyYW5zcG9ydCB1bmRlcmZsb3cKKyNkZWZpbmUgU1hHX1JDVl9TVEFUVVNfVFJBTlNQT1JUX0hEUkxFTgkJMHgyMDAwMDAwMAkvLyBUcmFuc3BvcnQgaGVhZGVyIGxlbmd0aAorI2RlZmluZSBTWEdfUkNWX1NUQVRVU19UUkFOU1BPUlRfRkxBR1MJCTB4MTAwMDAwMDAJLy8gVHJhbnNwb3J0IGZsYWdzIGRldGVjdGVkCisjZGVmaW5lIFNYR19SQ1ZfU1RBVFVTX1RSQU5TUE9SVF9PUFRTCQkweDA4MDAwMDAwCS8vIFRyYW5zcG9ydCBvcHRpb25zIGRldGVjdGVkCisjZGVmaW5lIFNYR19SQ1ZfU1RBVFVTX1RSQU5TUE9SVF9TRVNTX01BU0sJMHgwNzAwMDAwMAkvLyBUcmFuc3BvcnQgRERQCisjZGVmaW5lIFNYR19SQ1ZfU1RBVFVTX1RSQU5TUE9SVF9ERFAJCTB4MDYwMDAwMDAJLy8gVHJhbnNwb3J0IEREUAorI2RlZmluZSBTWEdfUkNWX1NUQVRVU19UUkFOU1BPUlRfaVNDU0kJCTB4MDUwMDAwMDAJLy8gVHJhbnNwb3J0IGlTQ1NJCisjZGVmaW5lIFNYR19SQ1ZfU1RBVFVTX1RSQU5TUE9SVF9ORlMJCTB4MDQwMDAwMDAJLy8gVHJhbnNwb3J0IE5GUworI2RlZmluZSBTWEdfUkNWX1NUQVRVU19UUkFOU1BPUlRfRlRQCQkweDAzMDAwMDAwCS8vIFRyYW5zcG9ydCBGVFAKKyNkZWZpbmUgU1hHX1JDVl9TVEFUVVNfVFJBTlNQT1JUX0hUVFAJCTB4MDIwMDAwMDAJLy8gVHJhbnNwb3J0IEhUVFAKKyNkZWZpbmUgU1hHX1JDVl9TVEFUVVNfVFJBTlNQT1JUX1NNQgkJMHgwMTAwMDAwMAkvLyBUcmFuc3BvcnQgU01CCisjZGVmaW5lIFNYR19SQ1ZfU1RBVFVTX05FVFdPUktfTUFTSwkJCTB4MDBGRjAwMDAJLy8gTmV0d29yayBtYXNrCisjZGVmaW5lIFNYR19SQ1ZfU1RBVFVTX05FVFdPUktfRVJST1IJCTB4MDA4MDAwMDAJLy8gTmV0d29yayBlcnJvcgorI2RlZmluZSBTWEdfUkNWX1NUQVRVU19ORVRXT1JLX0NTVU0JCQkweDAwODMwMDAwCS8vIE5ldHdvcmsgY2tzdW0gZXJyb3IKKyNkZWZpbmUgU1hHX1JDVl9TVEFUVVNfTkVUV09SS19VRkxPVwkJMHgwMDgyMDAwMAkvLyBOZXR3b3JrIHVuZGVyZmxvdyBlcnJvcgorI2RlZmluZSBTWEdfUkNWX1NUQVRVU19ORVRXT1JLX0hEUkxFTgkJMHgwMDgwMDAwMAkvLyBOZXR3b3JrIGhlYWRlciBsZW5ndGgKKyNkZWZpbmUgU1hHX1JDVl9TVEFUVVNfTkVUV09SS19PRkxPVwkJMHgwMDQwMDAwMAkvLyBOZXR3b3JrIG92ZXJmbG93IGRldGVjdGVkCisjZGVmaW5lIFNYR19SQ1ZfU1RBVFVTX05FVFdPUktfTUNBU1QJCTB4MDAyMDAwMDAJLy8gTmV0d29yayBtdWx0aWNhc3QgZGV0ZWN0ZWQKKyNkZWZpbmUgU1hHX1JDVl9TVEFUVVNfTkVUV09SS19PUFRJT05TCQkweDAwMTAwMDAwCS8vIE5ldHdvcmsgb3B0aW9ucyBkZXRlY3RlZAorI2RlZmluZSBTWEdfUkNWX1NUQVRVU19ORVRXT1JLX09GRlNFVAkJMHgwMDA4MDAwMAkvLyBOZXR3b3JrIG9mZnNldCBkZXRlY3RlZAorI2RlZmluZSBTWEdfUkNWX1NUQVRVU19ORVRXT1JLX0ZSQUdNRU5UCQkweDAwMDQwMDAwCS8vIE5ldHdvcmsgZnJhZ21lbnQgZGV0ZWN0ZWQKKyNkZWZpbmUgU1hHX1JDVl9TVEFUVVNfTkVUV09SS19UUkFOU19NQVNLCTB4MDAwMzAwMDAJLy8gTmV0d29yayB0cmFuc3BvcnQgdHlwZSBtYXNrCisjZGVmaW5lIFNYR19SQ1ZfU1RBVFVTX05FVFdPUktfVURQCQkJMHgwMDAyMDAwMAkvLyBVRFAKKyNkZWZpbmUgU1hHX1JDVl9TVEFUVVNfTkVUV09SS19UQ1AJCQkweDAwMDEwMDAwCS8vIFRDUAorI2RlZmluZSBTWEdfUkNWX1NUQVRVU19JUE9OTFkJCQkJMHgwMDAwODAwMAkvLyBJUC1vbmx5IG5vdCBUQ1AKKyNkZWZpbmUgU1hHX1JDVl9TVEFUVVNfUEtUX1BSSQkJCQkweDAwMDA2MDAwCS8vIFJlY2VpdmUgcHJpb3JpdHkKKyNkZWZpbmUgU1hHX1JDVl9TVEFUVVNfUEtUX1BSSV9TSEZUCQkJCQkxMwkvLyBSZWNlaXZlIHByaW9yaXR5IHNoaWZ0CisjZGVmaW5lIFNYR19SQ1ZfU1RBVFVTX1BBUklUWQkJCQkweDAwMDAxMDAwCS8vIE1BQyBSZWNlaXZlIFJBTSBwYXJpdHkgZXJyb3IKKyNkZWZpbmUgU1hHX1JDVl9TVEFUVVNfQUREUkVTU19NQVNLCQkJMHgwMDAwMEYwMAkvLyBMaW5rIGFkZHJlc3MgZGV0ZWN0aW9uIG1hc2sKKyNkZWZpbmUgU1hHX1JDVl9TVEFUVVNfQUREUkVTU19ECQkJMHgwMDAwMEIwMAkvLyBMaW5rIGFkZHJlc3MgRAorI2RlZmluZSBTWEdfUkNWX1NUQVRVU19BRERSRVNTX0MJCQkweDAwMDAwQTAwCS8vIExpbmsgYWRkcmVzcyBDCisjZGVmaW5lIFNYR19SQ1ZfU1RBVFVTX0FERFJFU1NfQgkJCTB4MDAwMDA5MDAJLy8gTGluayBhZGRyZXNzIEIKKyNkZWZpbmUgU1hHX1JDVl9TVEFUVVNfQUREUkVTU19BCQkJMHgwMDAwMDgwMAkvLyBMaW5rIGFkZHJlc3MgQQorI2RlZmluZSBTWEdfUkNWX1NUQVRVU19BRERSRVNTX0JDQVNUCQkweDAwMDAwMzAwCS8vIExpbmsgYWRkcmVzcyBicm9hZGNhc3QKKyNkZWZpbmUgU1hHX1JDVl9TVEFUVVNfQUREUkVTU19NQ0FTVAkJMHgwMDAwMDIwMAkvLyBMaW5rIGFkZHJlc3MgbXVsdGljYXN0CisjZGVmaW5lIFNYR19SQ1ZfU1RBVFVTX0FERFJFU1NfQ01DQVNUCQkweDAwMDAwMTAwCS8vIExpbmsgY29udHJvbCBtdWx0aWNhc3QKKyNkZWZpbmUgU1hHX1JDVl9TVEFUVVNfTElOS19NQVNLCQkJMHgwMDAwMDBGRgkvLyBMaW5rIHN0YXR1cyBtYXNrCisjZGVmaW5lIFNYR19SQ1ZfU1RBVFVTX0xJTktfRVJST1IJCQkweDAwMDAwMDgwCS8vIExpbmsgZXJyb3IKKyNkZWZpbmUgU1hHX1JDVl9TVEFUVVNfTElOS19NQVNLCQkJMHgwMDAwMDBGRgkvLyBMaW5rIHN0YXR1cyBtYXNrCisjZGVmaW5lIFNYR19SQ1ZfU1RBVFVTX0xJTktfUEFSSVRZCQkJMHgwMDAwMDA4NwkvLyBSY3ZNYWNRIHBhcml0eSBlcnJvcgorI2RlZmluZSBTWEdfUkNWX1NUQVRVU19MSU5LX0VBUkxZCQkJMHgwMDAwMDA4NgkvLyBEYXRhIGVhcmx5CisjZGVmaW5lIFNYR19SQ1ZfU1RBVFVTX0xJTktfQlVGT0ZMT1cJCTB4MDAwMDAwODUJLy8gQnVmZmVyIG92ZXJmbG93CisjZGVmaW5lIFNYR19SQ1ZfU1RBVFVTX0xJTktfQ09ERQkJCTB4MDAwMDAwODQJLy8gTGluayBjb2RlIGVycm9yCisjZGVmaW5lIFNYR19SQ1ZfU1RBVFVTX0xJTktfRFJJQkJMRQkJCTB4MDAwMDAwODMJLy8gRHJpYmJsZSBuaWJibGUKKyNkZWZpbmUgU1hHX1JDVl9TVEFUVVNfTElOS19DUkMJCQkJMHgwMDAwMDA4MgkvLyBDUkMgZXJyb3IKKyNkZWZpbmUgU1hHX1JDVl9TVEFUVVNfTElOS19PRkxPVwkJCTB4MDAwMDAwODEJLy8gTGluayBvdmVyZmxvdworI2RlZmluZSBTWEdfUkNWX1NUQVRVU19MSU5LX1VGTE9XCQkJMHgwMDAwMDA4MAkvLyBMaW5rIHVuZGVyZmxvdworI2RlZmluZSBTWEdfUkNWX1NUQVRVU19MSU5LXzgwMjMJCQkweDAwMDAwMDIwCS8vIDgwMi4zCisjZGVmaW5lIFNYR19SQ1ZfU1RBVFVTX0xJTktfU05BUAkJCTB4MDAwMDAwMTAJLy8gU25hcAorI2RlZmluZSBTWEdfUkNWX1NUQVRVU19MSU5LX1ZMQU4JCQkweDAwMDAwMDA4CS8vIFZMQU4KKyNkZWZpbmUgU1hHX1JDVl9TVEFUVVNfTElOS19UWVBFX01BU0sJCTB4MDAwMDAwMDcJLy8gTmV0d29yayB0eXBlIG1hc2sKKyNkZWZpbmUgU1hHX1JDVl9TVEFUVVNfTElOS19DT05UUk9MCQkJMHgwMDAwMDAwMwkvLyBDb250cm9sIHBhY2tldAorI2RlZmluZSBTWEdfUkNWX1NUQVRVU19MSU5LX0lQVjYJCQkweDAwMDAwMDAyCS8vIElQdjYgcGFja2V0CisjZGVmaW5lIFNYR19SQ1ZfU1RBVFVTX0xJTktfSVBWNAkJCTB4MDAwMDAwMDEJLy8gSVB2NCBwYWNrZXQKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogU2FoYXJhIHJlY2VpdmUgYW5kIHRyYW5zbWl0IGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXJzCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2RlZmluZQlSQ1ZfQ09ORklHX1JFU0VUCQkJMHg4MDAwMDAwMAkvLyBSY3ZDb25maWcgcmVnaXN0ZXIgcmVzZXQKKyNkZWZpbmUJUkNWX0NPTkZJR19FTkFCTEUJCQkweDQwMDAwMDAwCS8vIEVuYWJsZSB0aGUgcmVjZWl2ZSBsb2dpYworI2RlZmluZQlSQ1ZfQ09ORklHX0VOUEFSU0UJCQkweDIwMDAwMDAwCS8vIEVuYWJsZSB0aGUgcmVjZWl2ZSBwYXJzZXIKKyNkZWZpbmUJUkNWX0NPTkZJR19TT0NLRVQJCQkweDEwMDAwMDAwCS8vIEVuYWJsZSB0aGUgc29ja2V0IGRldGVjdG9yCisjZGVmaW5lCVJDVl9DT05GSUdfUkNWQkFECQkJMHgwODAwMDAwMAkvLyBSZWNlaXZlIGFsbCBiYWQgZnJhbWVzCisjZGVmaW5lCVJDVl9DT05GSUdfQ09OVFJPTAkJCTB4MDQwMDAwMDAJLy8gUmVjZWl2ZSBhbGwgY29udHJvbCBmcmFtZXMKKyNkZWZpbmUJUkNWX0NPTkZJR19SQ1ZQQVVTRQkJCTB4MDIwMDAwMDAJLy8gRW5hYmxlIHBhdXNlIHRyYW5zbWl0IHdoZW4gYXR0bgorI2RlZmluZQlSQ1ZfQ09ORklHX1RaSVBWNgkJCTB4MDEwMDAwMDAJLy8gSW5jbHVkZSBUQ1AgcG9ydCB3LyBJUHY2IHRvZXBsaXR6CisjZGVmaW5lCVJDVl9DT05GSUdfVFpJUFY0CQkJMHgwMDgwMDAwMAkvLyBJbmNsdWRlIFRDUCBwb3J0IHcvIElQdjQgdG9lcGxpdHoKKyNkZWZpbmUJUkNWX0NPTkZJR19GTFVTSAkJCTB4MDA0MDAwMDAJLy8gRmx1c2ggYnVmZmVycworI2RlZmluZQlSQ1ZfQ09ORklHX1BSSU9SSVRZX01BU0sJMHgwMDMwMDAwMAkvLyBQcmlvcml0eSBsZXZlbAorI2RlZmluZQlSQ1ZfQ09ORklHX0hBU0hfTUFTSwkJMHgwMDAzMDAwMAkvLyBIYXNoIGRlcHRoCisjZGVmaW5lCVJDVl9DT05GSUdfSEFTSF84CQkJMHgwMDAwMDAwMAkvLyBIYXNoIGRlcHRoIDgKKyNkZWZpbmUJUkNWX0NPTkZJR19IQVNIXzE2CQkJMHgwMDAxMDAwMAkvLyBIYXNoIGRlcHRoIDE2CisjZGVmaW5lCVJDVl9DT05GSUdfSEFTSF80CQkJMHgwMDAyMDAwMAkvLyBIYXNoIGRlcHRoIDQKKyNkZWZpbmUJUkNWX0NPTkZJR19IQVNIXzIJCQkweDAwMDMwMDAwCS8vIEhhc2ggZGVwdGggMgorI2RlZmluZQlSQ1ZfQ09ORklHX0JVRkxFTl9NQVNLCQkweDAwMDBGRkYwCS8vIEJ1ZmZlciBsZW5ndGggYml0cyAxNTo0LiBpZSBtdWx0aXBsZSBvZiAxNi4KKyNkZWZpbmUgUkNWX0NPTkZJR19TS1RfRElTCQkJMHgwMDAwMDAwOAkvLyBEaXNhYmxlIHNvY2tldCBkZXRlY3Rpb24gb24gYXR0bgorLy8gTWFjcm8gdG8gZGV0ZXJtaW5lIFJDVl9DT05GSUdfQlVGTEVOIGJhc2VkIG9uIG1heGltdW0gZnJhbWUgc2l6ZS4KKy8vIFdlIGFkZCAxOCBieXRlcyBmb3IgU2FoYXJhIHJlY2VpdmUgc3RhdHVzIGFuZCBwYWRkaW5nLCBwbHVzIDQgYnl0ZXMgZm9yIENSQywKKy8vIGFuZCByb3VuZCB1cCB0byBuZWFyZXN0IDE2IGJ5dGUgYm91bmRhcnkKKyNkZWZpbmUgUkNWX0NPTkZJR19CVUZTSVpFKF9NYXhGcmFtZSkgKCgoKF9NYXhGcmFtZSkgKyAyMikgKyAxNSkgJiBSQ1ZfQ09ORklHX0JVRkxFTl9NQVNLKQorCisjZGVmaW5lCVhNVF9DT05GSUdfUkVTRVQJCQkweDgwMDAwMDAwCS8vIFhtdENvbmZpZyByZWdpc3RlciByZXNldAorI2RlZmluZQlYTVRfQ09ORklHX0VOQUJMRQkJCTB4NDAwMDAwMDAJLy8gRW5hYmxlIHRyYW5zbWl0IGxvZ2ljCisjZGVmaW5lCVhNVF9DT05GSUdfTUFDX1BBUklUWQkJMHgyMDAwMDAwMAkvLyBJbmhpYml0IE1BQyBSQU0gcGFyaXR5IGVycm9yCisjZGVmaW5lCVhNVF9DT05GSUdfQlVGX1BBUklUWQkJMHgxMDAwMDAwMAkvLyBJbmhpYml0IEQyRiBidWZmZXIgcGFyaXR5IGVycm9yCisjZGVmaW5lCVhNVF9DT05GSUdfTUVNX1BBUklUWQkJMHgwODAwMDAwMAkvLyBJbmhpYml0IDFUIFNSQU0gcGFyaXR5IGVycm9yCisjZGVmaW5lCVhNVF9DT05GSUdfSU5WRVJUX1BBUklUWQkweDA0MDAwMDAwCS8vIEludmVydCBNQUMgUkFNIHBhcml0eQorI2RlZmluZQlYTVRfQ09ORklHX0lOSVRJQUxfSVBJRAkJMHgwMDAwRkZGRgkvLyBJbml0aWFsIElQSUQKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQS1YR01BQyBSZWdpc3RlcnMgLSBPY2N1cHkgMHg4MCAtIDB4RDQgb2YgdGhlIFNYR19IV19SRUdTCisgKgorICogRnVsbCByZWdpc3RlciBkZXNjcmlwdGlvbnMgY2FuIGJlIGZvdW5kIGluIGF4Z21hYy5wZGYKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvLyBBLVhHTUFDIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgMAorI2RlZmluZSBBWEdNQUNfQ0ZHMF9TVUJfUkVTRVQJCTB4ODAwMDAwMDAJCS8vIFN1YiBtb2R1bGUgcmVzZXQKKyNkZWZpbmUgQVhHTUFDX0NGRzBfUkNOVFJMX1JFU0VUCTB4MDA0MDAwMDAJCS8vIFJlY2VpdmUgY29udHJvbCByZXNldAorI2RlZmluZSBBWEdNQUNfQ0ZHMF9SRlVOQ19SRVNFVAkJMHgwMDIwMDAwMAkJLy8gUmVjZWl2ZSBmdW5jdGlvbiByZXNldAorI2RlZmluZSBBWEdNQUNfQ0ZHMF9UQ05UUkxfUkVTRVQJMHgwMDA0MDAwMAkJLy8gVHJhbnNtaXQgY29udHJvbCByZXNldAorI2RlZmluZSBBWEdNQUNfQ0ZHMF9URlVOQ19SRVNFVAkJMHgwMDAyMDAwMAkJLy8gVHJhbnNtaXQgZnVuY3Rpb24gcmVzZXQKKyNkZWZpbmUgQVhHTUFDX0NGRzBfTUlJX1JFU0VUCQkweDAwMDEwMDAwCQkvLyBNSUkgTWFuYWdlbWVudCByZXNldAorCisvLyBBLVhHTUFDIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgMQorI2RlZmluZSBBWEdNQUNfQ0ZHMV9YTVRfUEFVU0UJCTB4ODAwMDAwMDAJCS8vIEFsbG93IHRoZSBzZW5kaW5nIG9mIFBhdXNlIGZyYW1lcworI2RlZmluZSBBWEdNQUNfQ0ZHMV9YTVRfRU4JCQkweDQwMDAwMDAwCQkvLyBFbmFibGUgdHJhbnNtaXQKKyNkZWZpbmUgQVhHTUFDX0NGRzFfUkNWX1BBVVNFCQkweDIwMDAwMDAwCQkvLyBBbGxvdyB0aGUgZGV0ZWN0aW9uIG9mIFBhdXNlIGZyYW1lcworI2RlZmluZSBBWEdNQUNfQ0ZHMV9SQ1ZfRU4JCQkweDEwMDAwMDAwCQkvLyBFbmFibGUgcmVjZWl2ZQorI2RlZmluZSBBWEdNQUNfQ0ZHMV9YTVRfU1RBVEUJCTB4MDQwMDAwMDAJCS8vIEN1cnJlbnQgdHJhbnNtaXQgc3RhdGUgLSBSRUFEIE9OTFkKKyNkZWZpbmUgQVhHTUFDX0NGRzFfUkNWX1NUQVRFCQkweDAxMDAwMDAwCQkvLyBDdXJyZW50IHJlY2VpdmUgc3RhdGUgLSBSRUFEIE9OTFkKKyNkZWZpbmUgQVhHTUFDX0NGRzFfWE9GRl9TSE9SVAkJMHgwMDAwMTAwMAkJLy8gT25seSBwYXVzZSBmb3IgNjQgc2xvdCBvbiBYT0ZGCisjZGVmaW5lIEFYR01BQ19DRkcxX1hNR19GQ1MxCQkweDAwMDAwNDAwCQkvLyBEZWxheSB0cmFuc21pdCBGQ1MgMSA0LWJ5dGUgd29yZAorI2RlZmluZSBBWEdNQUNfQ0ZHMV9YTUdfRkNTMgkJMHgwMDAwMDgwMAkJLy8gRGVsYXkgdHJhbnNtaXQgRkNTIDIgNC1ieXRlIHdvcmRzCisjZGVmaW5lIEFYR01BQ19DRkcxX1hNR19GQ1MzCQkweDAwMDAwQzAwCQkvLyBEZWxheSB0cmFuc21pdCBGQ1MgMyA0LWJ5dGUgd29yZHMKKyNkZWZpbmUgQVhHTUFDX0NGRzFfUkNWX0ZDUzEJCTB4MDAwMDAxMDAJCS8vIERlbGF5IHJlY2VpdmUgRkNTIDEgNC1ieXRlIHdvcmQKKyNkZWZpbmUgQVhHTUFDX0NGRzFfUkNWX0ZDUzIJCTB4MDAwMDAyMDAJCS8vIERlbGF5IHJlY2VpdmUgRkNTIDIgNC1ieXRlIHdvcmRzCisjZGVmaW5lIEFYR01BQ19DRkcxX1JDVl9GQ1MzCQkweDAwMDAwMzAwCQkvLyBEZWxheSByZWNlaXZlIEZDUyAzIDQtYnl0ZSB3b3JkcworI2RlZmluZSBBWEdNQUNfQ0ZHMV9QS1RfT1ZFUlJJREUJMHgwMDAwMDA4MAkJLy8gUGVyLXBhY2tldCBvdmVycmlkZSBlbmFibGUKKyNkZWZpbmUgQVhHTUFDX0NGRzFfU1dBUAkJCTB4MDAwMDAwNDAJCS8vIEJ5dGUgc3dhcCBlbmFibGUKKyNkZWZpbmUgQVhHTUFDX0NGRzFfU0hPUlRfQVNTRVJUCTB4MDAwMDAwMjAJCS8vIEFTU0VSVCBzcmRycGZybSBvbiBzaG9ydCBmcmFtZSAoPDY0KQorI2RlZmluZSBBWEdNQUNfQ0ZHMV9SQ1ZfU1RSSUNUCQkweDAwMDAwMDEwCQkvLyBSQ1Ygb25seSA4MDIuM0FFIHdoZW4gQ0xFQVIKKyNkZWZpbmUgQVhHTUFDX0NGRzFfQ0hFQ0tfTEVOCQkweDAwMDAwMDA4CQkvLyBWZXJpZnkgZnJhbWUgbGVuZ3RoCisjZGVmaW5lIEFYR01BQ19DRkcxX0dFTl9GQ1MJCQkweDAwMDAwMDA0CQkvLyBHZW5lcmF0ZSBGQ1MKKyNkZWZpbmUgQVhHTUFDX0NGRzFfUEFEX01BU0sJCTB4MDAwMDAwMDMJCS8vIE1hc2sgZm9yIHBhZCBiaXRzCisjZGVmaW5lIEFYR01BQ19DRkcxX1BBRF82NAkJCTB4MDAwMDAwMDEJCS8vIFBhZCBmcmFtZXMgdG8gNjQgYnl0ZXMKKyNkZWZpbmUgQVhHTUFDX0NGRzFfUEFEX1ZMQU4JCTB4MDAwMDAwMDIJCS8vIERldGVjdCBWTEFOIGFuZCBwYWQgdG8gNjggYnl0ZXMKKyNkZWZpbmUgQVhHTUFDX0NGRzFfUEFEXzY4CQkJMHgwMDAwMDAwMwkJLy8gUGFkIHRvIDY4IGJ5dGVzCisKKy8vIEEtWEdNQUMgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAyCisjZGVmaW5lIEFYR01BQ19DRkcyX0dFTl9QQVVTRQkJMHg4MDAwMDAwMAkJLy8gR2VuZXJhdGUgc2luZ2xlIHBhdXNlIGZyYW1lICh0ZXN0KQorI2RlZmluZSBBWEdNQUNfQ0ZHMl9MRl9NQU5VQUwJCTB4MDgwMDAwMDAJCS8vIE1hbnVhbCBsaW5rIGZhdWx0IHNlcXVlbmNlCisjZGVmaW5lIEFYR01BQ19DRkcyX0xGX0FVVE8JCQkweDA0MDAwMDAwCQkvLyBBdXRvIGxpbmsgZmF1bHQgc2VxdWVuY2UKKyNkZWZpbmUgQVhHTUFDX0NGRzJfTEZfUkVNT1RFCQkweDAyMDAwMDAwCQkvLyBSZW1vdGUgbGluayBmYXVsdCAoUkVBRCBPTkxZKQorI2RlZmluZSBBWEdNQUNfQ0ZHMl9MRl9MT0NBTAkJMHgwMTAwMDAwMAkJLy8gTG9jYWwgbGluayBmYXVsdCAoUkVBRCBPTkxZKQorI2RlZmluZSBBWEdNQUNfQ0ZHMl9JUEdfTUFTSwkJMHgwMDFGMDAwMAkJLy8gSW50ZXIgcGFja2V0IGdhcAorI2RlZmluZSBBWEdNQUNfQ0ZHMl9JUEdfU0hJRlQJCTE2CisjZGVmaW5lIEFYR01BQ19DRkcyX1BBVVNFX1hNVAkJMHgwMDAwODAwMAkJLy8gUGF1c2UgdHJhbnNtaXQgbW9kdWxlCisjZGVmaW5lIEFYR01BQ19DRkcyX0lQR19FWFRFTgkJMHgwMDAwMDAyMAkJLy8gRW5hYmxlIElQRyBleHRlbnNpb24gYWxnb3JpdGhtCisjZGVmaW5lIEFYR01BQ19DRkcyX0lQR0VYX01BU0sJCTB4MDAwMDAwMUYJCS8vIElQRyBleHRlbnNpb24KKworLy8gQS1YR01BQyBDb25maWd1cmF0aW9uIFJlZ2lzdGVyIDMKKyNkZWZpbmUgQVhHTUFDX0NGRzNfUkNWX0RST1AJCTB4RkZGRjAwMDAJCS8vIFJlY2VpdmUgZnJhbWUgZHJvcCBmaWx0ZXIKKyNkZWZpbmUgQVhHTUFDX0NGRzNfUkNWX0RPTlRfQ0FSRQkweDAwMDBGRkZGCQkvLyBSZWNlaXZlIGZyYW1lIGRvbid0IGNhcmUgZmlsdGVyCisKKy8vIEEtWEdNQUMgU3RhdGlvbiBBZGRyZXNzIFJlZ2lzdGVyIC0gT2N0ZXRzIDEtNAorI2RlZmluZSBBWEdNQUNfU0FSTE9XX09DVEVUX09ORQkJMHhGRjAwMDAwMAkJLy8gRmlyc3Qgb2N0ZXQKKyNkZWZpbmUgQVhHTUFDX1NBUkxPV19PQ1RFVF9UV08JCTB4MDBGRjAwMDAJCS8vIFNlY29uZCBvY3RldAorI2RlZmluZSBBWEdNQUNfU0FSTE9XX09DVEVUX1RIUkVFCTB4MDAwMEZGMDAJCS8vIFRoaXJkIG9jdGV0CisjZGVmaW5lIEFYR01BQ19TQVJMT1dfT0NURVRfRk9VUgkweDAwMDAwMEZGCQkvLyBGb3VydGggb2N0ZXQKKworLy8gQS1YR01BQyBTdGF0aW9uIEFkZHJlc3MgUmVnaXN0ZXIgLSBPY3RldHMgNS02CisjZGVmaW5lIEFYR01BQ19TQVJISUdIX09DVEVUX0ZJVkUJMHhGRjAwMDAwMAkJLy8gRmlmdGggb2N0ZXQKKyNkZWZpbmUgQVhHTUFDX1NBUkhJR0hfT0NURVRfU0lYCTB4MDBGRjAwMDAJCS8vIFNpeHRoIG9jdGV0CisKKy8vIEEtWEdNQUMgTWF4aW11bSBmcmFtZSBsZW5ndGggcmVnaXN0ZXIKKyNkZWZpbmUgQVhHTUFDX01BWEZSQU1FX1hNVAkJCTB4M0ZGRjAwMDAJCS8vIE1heGltdW0gdHJhbnNtaXQgZnJhbWUgbGVuZ3RoCisjZGVmaW5lIEFYR01BQ19NQVhGUkFNRV9YTVRfU0hJRlQJMTYKKyNkZWZpbmUgQVhHTUFDX01BWEZSQU1FX1JDVgkJCTB4MDAwMEZGRkYJCS8vIE1heGltdW0gcmVjZWl2ZSBmcmFtZSBsZW5ndGgKKy8vIFRoaXMgcmVnaXN0ZXIgZG9lc24ndCBuZWVkIHRvIGJlIHdyaXR0ZW4gZm9yIHN0YW5kYXJkIE1UVS4KKy8vIEZvciBqdW1ibywgSSdsbCBqdXN0IHN0YXRpY2FsbHkgZGVmaW5lIHRoZSB2YWx1ZSBoZXJlLiAgVGhpcworLy8gdmFsdWUgc2V0cyB0aGUgcmVjZWl2ZSBieXRlIGNvdW50IHRvIDkwMzYgKDB4MjM0QykgYW5kIHRoZQorLy8gdHJhbnNtaXQgV09SRCBjb3VudCB0byAyMjU5ICgweDhEMykuICBUaGVzZSB2YWx1ZXMgaW5jbHVkZSAyMgorLy8gYnl0ZXMgb2YgcGFkZGluZyBiZXlvbmQgdGhlIGp1bWJvIE1UVSBvZiA5MDE0CisjZGVmaW5lIEFYR01BQ19NQVhGUkFNRV9KVU1CTwkJMHgwOEQzMjM0QworCisvLyBBLVhHTUFDIFJldmlzaW9uIGxldmVsCisjZGVmaW5lIEFYR01BQ19SRVZJU0lPTl9NQVNLCQkweDAwMDBGRkZGCQkvLyBSZXZpc2lvbiBsZXZlbAorCisvLyBBLVhHTUFDIEFNSUlNIENvbW1hbmQgUmVnaXN0ZXIKKyNkZWZpbmUgQVhHTUFDX0FNSUlNX0NNRF9TVEFSVAkJMHgwMDAwMDAwOAkJLy8gQ29tbWFuZCBzdGFydAorI2RlZmluZSBBWEdNQUNfQU1JSU1fQ01EX01BU0sJCTB4MDAwMDAwMDcJCS8vIENvbW1hbmQKKyNkZWZpbmUgQVhHTUFDX0FNSUlNX0NNRF9MRUdBQ1lfV1JJVEUJCTEJCS8vIDEwLzEwMC8xMDAwIE1icHMgUGh5IFdyaXRlCisjZGVmaW5lIEFYR01BQ19BTUlJTV9DTURfTEVHQUNZX1JFQUQJCTIJCS8vIDEwLzEwMC8xMDAwIE1icHMgUGh5IFJlYWQKKyNkZWZpbmUgQVhHTUFDX0FNSUlNX0NNRF9NT05JVE9SX1NJTkdMRQkJMwkJLy8gTW9uaXRvciBzaW5nbGUgUEhZCisjZGVmaW5lIEFYR01BQ19BTUlJTV9DTURfTU9OSVRPUl9NVUxUSVBMRQk0CQkvLyBNb25pdG9yIG11bHRpcGxlIGNvbnRpZ3VvdXMgUEhZcworI2RlZmluZSBBWEdNQUNfQU1JSU1fQ01EXzEwR19PUEVSQVRJT04JCTUJCS8vIFByZXNlbnQgQU1JSU0gRmllbGQgUmVnCisjZGVmaW5lIEFYR01BQ19BTUlJTV9DTURfQ0xFQVJfTElOS19GQUlMCTYJCS8vIENsZWFyIExpbmsgRmFpbCBCaXQgaW4gTUlJTQorCisvLyBBLVhHTUFDIEFNSUlNIEZpZWxkIFJlZ2lzdGVyCisjZGVmaW5lIEFYR01BQ19BTUlJTV9GSUVMRF9TVAkJMHhDMDAwMDAwMAkJLy8gMi1iaXQgU1QgZmllbGQKKyNkZWZpbmUgQVhHTUFDX0FNSUlNX0ZJRUxEX1NUX1NISUZUCQkJMzAKKyNkZWZpbmUgQVhHTUFDX0FNSUlNX0ZJRUxEX09QCQkweDMwMDAwMDAwCQkvLyAyLWJpdCBPUCBmaWVsZAorI2RlZmluZSBBWEdNQUNfQU1JSU1fRklFTERfT1BfU0hJRlQJCQkyOAorI2RlZmluZSBBWEdNQUNfQU1JSU1fRklFTERfUE9SVF9BRERSIDB4MEY4MDAwMDAJCS8vIFBvcnQgYWRkcmVzcyBmaWVsZCAoaHN0cGh5YWR4IGluIHNwZWMpCisjZGVmaW5lIEFYR01BQ19BTUlJTV9GSUVMRF9QT1JUX1NISUZUCQkyMworI2RlZmluZSBBWEdNQUNfQU1JSU1fRklFTERfREVWX0FERFIJMHgwMDdDMDAwMAkJLy8gRGV2aWNlIGFkZHJlc3MgZmllbGQgKGhzdHJlZ2FkeCBpbiBzcGVjKQorI2RlZmluZSBBWEdNQUNfQU1JSU1fRklFTERfREVWX1NISUZUCQkxOAorI2RlZmluZSBBWEdNQUNfQU1JSU1fRklFTERfVEEJCTB4MDAwMzAwMDAJCS8vIDItYml0IFRBIGZpZWxkCisjZGVmaW5lIEFYR01BQ19BTUlJTV9GSUVMRF9UQV9TSElGVAkJCTE2CisjZGVmaW5lIEFYR01BQ19BTUlJTV9GSUVMRF9EQVRBCQkweDAwMDBGRkZGCQkvLyBEYXRhIGZpZWxkCisKKy8vIFZhbHVlcyBmb3IgdGhlIEFYR01BQ19BTUlJTV9GSUVMRF9PUCBmaWVsZCBpbiB0aGUgQS1YR01BQyBBTUlJTSBGaWVsZCBSZWdpc3RlcgorI2RlZmluZQlNSUlNX09QX0FERFIJCQkJCQkwCQkvLyBNSUlNIEFkZHJlc3Mgc2V0IG9wZXJhdGlvbgorI2RlZmluZQlNSUlNX09QX1dSSVRFCQkJCQkJMQkJLy8gTUlJTSBXcml0ZSByZWdpc3RlciBvcGVyYXRpb24KKyNkZWZpbmUJTUlJTV9PUF9SRUFECQkJCQkJMgkJLy8gTUlJTSBSZWFkIHJlZ2lzdGVyIG9wZXJhdGlvbgorI2RlZmluZQlNSUlNX09QX0FERFJfU0hJRlQJKE1JSU1fT1BfQUREUiA8PCBBWEdNQUNfQU1JSU1fRklFTERfT1BfU0hJRlQpCisKKy8vIFZhbHVlcyBmb3IgdGhlIEFYR01BQ19BTUlJTV9GSUVMRF9QT1JUX0FERFIgZmllbGQgaW4gdGhlIEEtWEdNQUMgQU1JSU0gRmllbGQgUmVnaXN0ZXIKKyNkZWZpbmUJTUlJTV9QT1JUX05VTQkJCQkJCTEJCS8vIEFsbCBTYWhhcmEgTUlJTSBtb2R1bGVzIHVzZSBwb3J0IDEKKworLy8gVmFsdWVzIGZvciB0aGUgQVhHTUFDX0FNSUlNX0ZJRUxEX0RFVl9BRERSIGZpZWxkIGluIHRoZSBBLVhHTUFDIEFNSUlNIEZpZWxkIFJlZ2lzdGVyCisjZGVmaW5lCU1JSU1fREVWX1BIWV9QTUEJCQkJCTEJCS8vIFBIWSBQTUEvUE1EIG1vZHVsZSBNSUlNIGRldmljZSBudW1iZXIKKyNkZWZpbmUJTUlJTV9ERVZfUEhZX1BDUwkJCQkJMwkJLy8gUEhZIFBDUyBtb2R1bGUgTUlJTSBkZXZpY2UgbnVtYmVyCisjZGVmaW5lCU1JSU1fREVWX1BIWV9YUwkJCQkJCTQJCS8vIFBIWSBYUyBtb2R1bGUgTUlJTSBkZXZpY2UgbnVtYmVyCisjZGVmaW5lCU1JSU1fREVWX1hHWFMJCQkJCQk1CQkvLyBYR1hTIE1JSU0gZGV2aWNlIG51bWJlcgorCisvLyBWYWx1ZXMgZm9yIHRoZSBBWEdNQUNfQU1JSU1fRklFTERfVEEgZmllbGQgaW4gdGhlIEEtWEdNQUMgQU1JSU0gRmllbGQgUmVnaXN0ZXIKKyNkZWZpbmUJTUlJTV9UQV8xMEdCCQkJCQkJMgkJLy8gc2V0IHRvIDIgZm9yIDEwIEdCIG9wZXJhdGlvbgorCisvLyBBLVhHTUFDIEFNSUlNIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIKKyNkZWZpbmUgQVhHTUFDX0FNSUlNX0NGR19OT1BSRUFNCTB4MDAwMDAwODAJCS8vIEJ5cGFzcyBwcmVhbWJsZSBvZiBtbmdtdCBmcmFtZQorI2RlZmluZSBBWEdNQUNfQU1JSU1fQ0ZHX0hBTEZfQ0xPQ0sJMHgwMDAwMDA3RgkJLy8gaGFsZi1jbG9jayBkdXJhdGlvbiBvZiBNREMgb3V0cHV0CisKKy8vIEEtWEdNQUMgQU1JSU0gSW5kaWNhdG9yIFJlZ2lzdGVyCisjZGVmaW5lIEFYR01BQ19BTUlJTV9JTkRDX0xJTksJCTB4MDAwMDAwMTAJCS8vIExpbmsgc3RhdHVzIGZyb20gbGVnYWN5IFBIWSBvciBNTUQKKyNkZWZpbmUgQVhHTUFDX0FNSUlNX0lORENfTVBIWQkJMHgwMDAwMDAwOAkJLy8gTXVsdGlwbGUgcGh5IG9wZXJhdGlvbiBpbiBwcm9ncmVzcworI2RlZmluZSBBWEdNQUNfQU1JSU1fSU5EQ19TUEhZCQkweDAwMDAwMDA0CQkvLyBTaW5nbGUgcGh5IG9wZXJhdGlvbiBpbiBwcm9ncmVzcworI2RlZmluZSBBWEdNQUNfQU1JSU1fSU5EQ19NT04JCTB4MDAwMDAwMDIJCS8vIFNpbmdsZSBvciBtdWx0aXBsZSBtb25pdG9yIGNtZAorI2RlZmluZSBBWEdNQUNfQU1JSU1fSU5EQ19CVVNZCQkweDAwMDAwMDAxCQkvLyBTZXQgdW50aWwgY21kIG9wZXJhdGlvbiBjb21wbGV0ZQorCisvLyBMaW5rIFN0YXR1cyBhbmQgQ29udHJvbCBSZWdpc3RlcgorI2RlZmluZQlMU19QSFlfQ0xSX1JFU0VUCQkJMHg4MDAwMDAwMAkJLy8gQ2xlYXIgcmVzZXQgc2lnbmFsIHRvIFBIWQorI2RlZmluZQlMU19TRVJERVNfUE9XRVJfRE9XTgkJMHg0MDAwMDAwMAkJLy8gUG93ZXIgZG93biB0aGUgU2FoYXJhIFNlcmRlcworI2RlZmluZQlMU19YR1hTX0VOQUJMRQkJCQkweDIwMDAwMDAwCQkvLyBFbmFibGUgdGhlIFhBVUkgWEdYUyBsb2dpYworI2RlZmluZQlMU19YR1hTX0NUTAkJCQkJMHgxMDAwMDAwMAkJLy8gSG9sZCBYQVVJIFhHWFMgbG9naWMgcmVzZXQgdW50aWwgU2VyZGVzIGlzIHVwCisjZGVmaW5lCUxTX1NFUkRFU19ET1dOCQkJCTB4MDgwMDAwMDAJCS8vIFdoZW4gMCwgWEFVSSBTZXJkZXMgaXMgdXAgYW5kIGluaXRpYWxpemF0aW9uIGlzIGNvbXBsZXRlCisjZGVmaW5lCUxTX1RSQUNFX0RPV04JCQkJMHgwNDAwMDAwMAkJLy8gV2hlbiAwLCBUcmFjZSBTZXJkZXMgaXMgdXAgYW5kIGluaXRpYWxpemF0aW9uIGlzIGNvbXBsZXRlCisjZGVmaW5lCUxTX1BIWV9DTEtfMjVNSFoJCQkweDAyMDAwMDAwCQkvLyBTZXQgUEhZIGNsb2NrIHRvIDI1IE1IeiAoZWxzZSAxNTYuMTI1IE1IeikKKyNkZWZpbmUJTFNfUEhZX0NMS19FTgkJCQkweDAxMDAwMDAwCQkvLyBFbmFibGUgY2xvY2sgdG8gUEhZCisjZGVmaW5lCUxTX1hBVUlfTElOS19VUAkJCQkweDAwMDAwMDEwCQkvLyBYQVVJIGxpbmsgaXMgdXAKKyNkZWZpbmUJTFNfWEFVSV9MSU5LX0NITkcJCQkweDAwMDAwMDA4CQkvLyBYQVVJIGxpbmsgc3RhdHVzIGhhcyBjaGFuZ2VkCisjZGVmaW5lCUxTX0xJTktfQUxBUk0JCQkJMHgwMDAwMDAwNAkJLy8gTGluayBhbGFybSBwaW4KKyNkZWZpbmUJTFNfQVRUTl9DVFJMX01BU0sJCQkweDAwMDAwMDAzCQkvLyBNYXNrIGxpbmsgYXR0ZW50aW9uIGNvbnRyb2wgYml0cworI2RlZmluZQlMU19BVFROX0FMQVJNCQkJCTB4MDAwMDAwMDAJCS8vIDAwID0+IEF0dG4gb24gbGluayBhbGFybQorI2RlZmluZQlMU19BVFROX0FMQVJNX09SX1NUQVRfQ0hORwkweDAwMDAwMDAxCQkvLyAwMSA9PiBBdHRuIG9uIGxpbmsgYWxhcm0gb3Igc3RhdHVzIGNoYW5nZQorI2RlZmluZQlMU19BVFROX1NUQVRfQ0hORwkJCTB4MDAwMDAwMDIJCS8vIDEwID0+IEF0dG4gb24gbGluayBzdGF0dXMgY2hhbmdlCisjZGVmaW5lCUxTX0FUVE5fTk9ORQkJCQkweDAwMDAwMDAzCQkvLyAxMSA9PiBubyBBdHRuCisKKy8vIExpbmsgQWRkcmVzcyBIaWdoIFJlZ2lzdGVycworI2RlZmluZQlMSU5LX0FERFJfRU5BQkxFCQkJMHg4MDAwMDAwMAkJLy8gRW5hYmxlIHRoaXMgbGluayBhZGRyZXNzCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogWEdYUyBYQVVJIFhHTUlJIEV4dGVuZGVyIHJlZ2lzdGVycworICoKKyAqIEZ1bGwgcmVnaXN0ZXIgZGVzY3JpcHRpb25zIGNhbiBiZSBmb3VuZCBpbiBteGd4cy5wZGYKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvLyBYR1hTIFJlZ2lzdGVyIE1hcAorI2RlZmluZSBYR1hTX0FERFJFU1NfQ09OVFJPTDEJCTB4MDAwMAkJCS8vIFhTIENvbnRyb2wgMQorI2RlZmluZSBYR1hTX0FERFJFU1NfU1RBVFVTMQkJMHgwMDAxCQkJLy8gWFMgU3RhdHVzIDEKKyNkZWZpbmUgWEdYU19BRERSRVNTX0RFVklEX0xPVwkJMHgwMDAyCQkJLy8gWFMgRGV2aWNlIElEIChsb3cpCisjZGVmaW5lIFhHWFNfQUREUkVTU19ERVZJRF9ISUdICQkweDAwMDMJCQkvLyBYUyBEZXZpY2UgSUQgKGhpZ2gpCisjZGVmaW5lIFhHWFNfQUREUkVTU19TUEVFRAkJCTB4MDAwNAkJCS8vIFhTIFNwZWVkIGFiaWxpdHkKKyNkZWZpbmUgWEdYU19BRERSRVNTX0RFVl9MT1cJCTB4MDAwNQkJCS8vIFhTIERldmljZXMgaW4gcGFja2FnZQorI2RlZmluZSBYR1hTX0FERFJFU1NfREVWX0hJR0gJCTB4MDAwNgkJCS8vIFhTIERldmljZXMgaW4gcGFja2FnZQorI2RlZmluZSBYR1hTX0FERFJFU1NfU1RBVFVTMgkJMHgwMDA4CQkJLy8gWFMgU3RhdHVzIDIKKyNkZWZpbmUgWEdYU19BRERSRVNTX1BLR0lEX2xPVwkJMHgwMDBFCQkJLy8gWFMgUGFja2FnZSBJZGVudGlmaWVyCisjZGVmaW5lIFhHWFNfQUREUkVTU19QS0dJRF9ISUdICQkweDAwMEYJCQkvLyBYUyBQYWNrYWdlIElkZW50aWZpZXIKKyNkZWZpbmUgWEdYU19BRERSRVNTX0xBTkVfU1RBVFVTCTB4MDAxOAkJCS8vIDEwRyBYR1hTIExhbmUgU3RhdHVzCisjZGVmaW5lIFhHWFNfQUREUkVTU19URVNUX0NUUkwJCTB4MDAxOQkJCS8vIDEwRyBYR1hTIFRlc3QgQ29udHJvbAorI2RlZmluZSBYR1hTX0FERFJFU1NfUkVTRVRfTE8xCQkweDgwMDAJCQkvLyBWZW5kb3ItU3BlY2lmaWMgUmVzZXQgTG8gMQorI2RlZmluZSBYR1hTX0FERFJFU1NfUkVTRVRfTE8yCQkweDgwMDEJCQkvLyBWZW5kb3ItU3BlY2lmaWMgUmVzZXQgTG8gMgorI2RlZmluZSBYR1hTX0FERFJFU1NfUkVTRVRfSEkxCQkweDgwMDIJCQkvLyBWZW5kb3ItU3BlY2lmaWMgUmVzZXQgSGkgMQorI2RlZmluZSBYR1hTX0FERFJFU1NfUkVTRVRfSEkyCQkweDgwMDMJCQkvLyBWZW5kb3ItU3BlY2lmaWMgUmVzZXQgSGkgMgorCisvLyBYUyBDb250cm9sIDEgcmVnaXN0ZXIgYml0IGRlZmluaXRpb25zCisjZGVmaW5lIFhHWFNfQ09OVFJPTDFfUkVTRVQJCQkweDgwMDAJCQkvLyBSZXNldCAtIHNlbGYgY2xlYXJpbmcKKyNkZWZpbmUgWEdYU19DT05UUk9MMV9MT09QQkFDSwkJMHg0MDAwCQkJLy8gRW5hYmxlIGxvb3BiYWNrCisjZGVmaW5lIFhHWFNfQ09OVFJPTDFfU1BFRUQxCQkweDIwMDAJCQkvLyAwID0gdW5zcGVjaWZpZWQsIDEgPSAxMEdiKworI2RlZmluZSBYR1hTX0NPTlRST0wxX0xPV1BPV0VSCQkweDA0MDAJCQkvLyAxID0gTG93IHBvd2VyIG1vZGUKKyNkZWZpbmUgWEdYU19DT05UUk9MMV9TUEVFRDIJCTB4MDA0MAkJCS8vIFNhbWUgYXMgU1BFRUQxICg/KQorI2RlZmluZSBYR1hTX0NPTlRST0wxX1NQRUVECQkJMHgwMDNDCQkJLy8gRXZlcnl0aGluZyByZXNlcnZlZCBleGNlcHQgemVybyAoPykKKworLy8gWFMgU3RhdHVzIDEgcmVnaXN0ZXIgYml0IGRlZmluaXRpb25zCisjZGVmaW5lIFhHWFNfU1RBVFVTMV9GQVVMVAkJCTB4MDA4MAkJCS8vIEZhdWx0IGRldGVjdGVkCisjZGVmaW5lIFhHWFNfU1RBVFVTMV9MSU5LCQkJMHgwMDA0CQkJLy8gMSA9IExpbmsgdXAKKyNkZWZpbmUgWEdYU19TVEFUVVMxX0xPV1BPV0VSCQkweDAwMDIJCQkvLyAxID0gTG93IHBvd2VyIHN1cHBvcnRlZAorCisvLyBYUyBTcGVlZCByZWdpc3RlciBiaXQgZGVmaW5pdGlvbnMKKyNkZWZpbmUgWEdYU19TUEVFRF8xMEcJCQkJMHgwMDAxCQkJLy8gMSA9IDEwRyBjYXBhYmxlCisKKy8vIFhTIERldmljZXMgcmVnaXN0ZXIgYml0IGRlZmluaXRpb25zCisjZGVmaW5lIFhHWFNfREVWSUNFU19EVEUJCQkweDAwMjAJCQkvLyBEVEUgWFMgUHJlc2VudAorI2RlZmluZSBYR1hTX0RFVklDRVNfUEhZCQkJMHgwMDEwCQkJLy8gUEhZIFhTIFByZXNlbnQKKyNkZWZpbmUgWEdYU19ERVZJQ0VTX1BDUwkJCTB4MDAwOAkJCS8vIFBDUyBQcmVzZW50CisjZGVmaW5lIFhHWFNfREVWSUNFU19XSVMJCQkweDAwMDQJCQkvLyBXSVMgUHJlc2VudAorI2RlZmluZSBYR1hTX0RFVklDRVNfUE1ECQkJMHgwMDAyCQkJLy8gUE1EL1BNQSBQcmVzZW50CisjZGVmaW5lIFhHWFNfREVWSUNFU19DTEFVU0UyMgkJMHgwMDAxCQkJLy8gQ2xhdXNlIDIyIHJlZ2lzdGVycyBwcmVzZW50CisKKy8vIFhTIERldmljZXMgSGlnaCByZWdpc3RlciBiaXQgZGVmaW5pdGlvbnMKKyNkZWZpbmUgWEdYU19ERVZJQ0VTX1ZFTkRPUjIJCTB4ODAwMAkJCS8vIFZlbmRvciBzcGVjaWZpYyBkZXZpY2UgMgorI2RlZmluZSBYR1hTX0RFVklDRVNfVkVORE9SMQkJMHg0MDAwCQkJLy8gVmVuZG9yIHNwZWNpZmljIGRldmljZSAxCisKKy8vIFhTIFN0YXR1cyAyIHJlZ2lzdGVyIGJpdCBkZWZpbml0aW9ucworI2RlZmluZSBYR1hTX1NUQVRVUzJfREVWX01BU0sJCTB4QzAwMAkJCS8vIERldmljZSBwcmVzZW50IG1hc2sKKyNkZWZpbmUgWEdYU19TVEFUVVMyX0RFVl9SRVNQT05ECTB4ODAwMAkJCS8vIERldmljZSByZXNwb25kaW5nCisjZGVmaW5lIFhHWFNfU1RBVFVTMl9YTVRfRkFVTFQJCTB4MDgwMAkJCS8vIFRyYW5zbWl0IGZhdWx0CisjZGVmaW5lIFhHWFNfU1RBVFVTMl9SQ1ZfRkFVTFQJCTB4MDQwMAkJCS8vIFJlY2VpdmUgZmF1bHQKKworLy8gWFMgUGFja2FnZSBJRCBIaWdoIHJlZ2lzdGVyIGJpdCBkZWZpbml0aW9ucworI2RlZmluZSBYR1hTX1BLR0lEX0hJR0hfT1JHCQkJMHhGQzAwCQkJLy8gT3JnYW5pemF0aW9uYWxseSBVbmlxdWUKKyNkZWZpbmUgWEdYU19QS0dJRF9ISUdIX01GRwkJCTB4MDNGMAkJCS8vIE1hbnVmYWN0dXJlciBNb2RlbAorI2RlZmluZSBYR1hTX1BLR0lEX0hJR0hfUkVWCQkJMHgwMDBGCQkJLy8gUmV2aXNpb24gTnVtYmVyCisKKy8vIFhTIExhbmUgU3RhdHVzIHJlZ2lzdGVyIGJpdCBkZWZpbml0aW9ucworI2RlZmluZSBYR1hTX0xBTkVfUEhZCQkJCTB4MTAwMAkJCS8vIFBIWS9EVEUgbGFuZSBhbGlnbm1lbnQgc3RhdHVzCisjZGVmaW5lIFhHWFNfTEFORV9QQVRURVJOCQkJMHgwODAwCQkJLy8gUGF0dGVybiB0ZXN0aW5nIGFiaWxpdHkKKyNkZWZpbmUgWEdYU19MQU5FX0xPT1BCQUNLCQkJMHgwNDAwCQkJLy8gUEhZIGxvb3BiYWNrIGFiaWxpdHkKKyNkZWZpbmUgWEdYU19MQU5FX1NZTkMzCQkJCTB4MDAwOAkJCS8vIExhbmUgMyBzeW5jCisjZGVmaW5lIFhHWFNfTEFORV9TWU5DMgkJCQkweDAwMDQJCQkvLyBMYW5lIDIgc3luYworI2RlZmluZSBYR1hTX0xBTkVfU1lOQzEJCQkJMHgwMDAyCQkJLy8gTGFuZSAxIHN5bmMKKyNkZWZpbmUgWEdYU19MQU5FX1NZTkMwCQkJCTB4MDAwMQkJCS8vIExhbmUgMCBzeW5jCisKKy8vIFhTIFRlc3QgQ29udHJvbCByZWdpc3RlciBiaXQgZGVmaW5pdGlvbnMKKyNkZWZpbmUgWEdYU19URVNUX1BBVFRFUk5fRU5BQkxFCTB4MDAwNAkJCS8vIFRlc3QgcGF0dGVybiBlbmFibGVkCisjZGVmaW5lIFhHWFNfVEVTVF9QQVRURVJOX01BU0sJCTB4MDAwMwkJCS8vIFRlc3QgcGF0dGVybnMKKyNkZWZpbmUgWEdYU19URVNUX1BBVFRFUk5fUlNWRAkJMHgwMDAzCQkJLy8gVGVzdCBwYXR0ZXJuIC0gcmVzZXJ2ZWQKKyNkZWZpbmUgWEdYU19URVNUX1BBVFRFUk5fTUlYCQkweDAwMDIJCQkvLyBUZXN0IHBhdHRlcm4gLSBtaXhlZAorI2RlZmluZSBYR1hTX1RFU1RfUEFUVEVSTl9MT1cJCTB4MDAwMQkJCS8vIFRlc3QgcGF0dGVybiAtIGxvdworI2RlZmluZSBYR1hTX1RFU1RfUEFUVEVSTl9ISUdICQkweDAwMDEJCQkvLyBUZXN0IHBhdHRlcm4gLSBoaWdoCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEV4dGVybmFsIE1ESU8gQnVzIFJlZ2lzdGVycworICoKKyAqIEZ1bGwgcmVnaXN0ZXIgZGVzY3JpcHRpb25zIGNhbiBiZSBmb3VuZCBpbiBQSFkvWEVOUEFLL0lFRUUgc3BlY3MKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvLyBMQVNJIChMaW5rIEFsYXJtIFN0YXR1cyBJbnRlcnJ1cHQpIFJlZ2lzdGVycyAobG9jYXRlZCBpbiBNSUlNX0RFVl9QSFlfUE1BIGRldmljZSkKKyNkZWZpbmUgTEFTSV9SWF9BTEFSTV9DT05UUk9MCQkweDkwMDAJCQkvLyBMQVNJIFJYX0FMQVJNIENvbnRyb2wKKyNkZWZpbmUgTEFTSV9UWF9BTEFSTV9DT05UUk9MCQkweDkwMDEJCQkvLyBMQVNJIFRYX0FMQVJNIENvbnRyb2wKKyNkZWZpbmUgTEFTSV9DT05UUk9MCQkJCTB4OTAwMgkJCS8vIExBU0kgQ29udHJvbAorI2RlZmluZSBMQVNJX1JYX0FMQVJNX1NUQVRVUwkJMHg5MDAzCQkJLy8gTEFTSSBSWF9BTEFSTSBTdGF0dXMKKyNkZWZpbmUgTEFTSV9UWF9BTEFSTV9TVEFUVVMJCTB4OTAwNAkJCS8vIExBU0kgVFhfQUxBUk0gU3RhdHVzCisjZGVmaW5lIExBU0lfU1RBVFVTCQkJCQkweDkwMDUJCQkvLyBMQVNJIFN0YXR1cworCisvLyBMQVNJX0NPTlRST0wgYml0IGRlZmluaXRpb25zCisjZGVmaW5lCUxBU0lfQ1RMX1JYX0FMQVJNX0VOQUJMRQkweDAwMDQJCQkvLyBFbmFibGUgUlhfQUxBUk0gaW50ZXJydXB0cworI2RlZmluZQlMQVNJX0NUTF9UWF9BTEFSTV9FTkFCTEUJMHgwMDAyCQkJLy8gRW5hYmxlIFRYX0FMQVJNIGludGVycnVwdHMKKyNkZWZpbmUJTEFTSV9DVExfTFNfQUxBUk1fRU5BQkxFCTB4MDAwMQkJCS8vIEVuYWJsZSBMaW5rIFN0YXR1cyBpbnRlcnJ1cHRzCisKKy8vIExBU0lfU1RBVFVTIGJpdCBkZWZpbml0aW9ucworI2RlZmluZQlMQVNJX1NUQVRVU19SWF9BTEFSTQkJMHgwMDA0CQkJLy8gUlhfQUxBUk0gc3RhdHVzCisjZGVmaW5lCUxBU0lfU1RBVFVTX1RYX0FMQVJNCQkweDAwMDIJCQkvLyBUWF9BTEFSTSBzdGF0dXMKKyNkZWZpbmUJTEFTSV9TVEFUVVNfTFNfQUxBUk0JCTB4MDAwMQkJCS8vIExpbmsgU3RhdHVzCisKKy8vIFBIWSByZWdpc3RlcnMgLSBQTUEvUE1EIChkZXZpY2UgMSkKKyNkZWZpbmUJUEhZX1BNQV9DT05UUk9MMQkJCTB4MDAwMAkJCS8vIFBNQS9QTUQgQ29udHJvbCAxCisjZGVmaW5lCVBIWV9QTUFfU1RBVFVTMQkJCQkweDAwMDEJCQkvLyBQTUEvUE1EIFN0YXR1cyAxCisjZGVmaW5lCVBIWV9QTUFfUkNWX0RFVAkJCQkweDAwMEEJCQkvLyBQTUEvUE1EIFJlY2VpdmUgU2lnbmFsIERldGVjdAorCQkvLyBvdGhlciBQTUEvUE1EIHJlZ2lzdGVycyBleGlzdCBhbmQgY2FuIGJlIGRlZmluZWQgYXMgbmVlZGVkCisKKy8vIFBIWSByZWdpc3RlcnMgLSBQQ1MgKGRldmljZSAzKQorI2RlZmluZQlQSFlfUENTX0NPTlRST0wxCQkJMHgwMDAwCQkJLy8gUENTIENvbnRyb2wgMQorI2RlZmluZQlQSFlfUENTX1NUQVRVUzEJCQkJMHgwMDAxCQkJLy8gUENTIFN0YXR1cyAxCisjZGVmaW5lCVBIWV9QQ1NfMTBHX1NUQVRVUzEJCQkweDAwMjAJCQkvLyBQQ1MgMTBHQkFTRS1SIFN0YXR1cyAxCisJCS8vIG90aGVyIFBDUyByZWdpc3RlcnMgZXhpc3QgYW5kIGNhbiBiZSBkZWZpbmVkIGFzIG5lZWRlZAorCisvLyBQSFkgcmVnaXN0ZXJzIC0gWFMgKGRldmljZSA0KQorI2RlZmluZQlQSFlfWFNfQ09OVFJPTDEJCQkJMHgwMDAwCQkJLy8gWFMgQ29udHJvbCAxCisjZGVmaW5lCVBIWV9YU19TVEFUVVMxCQkJCTB4MDAwMQkJCS8vIFhTIFN0YXR1cyAxCisjZGVmaW5lCVBIWV9YU19MQU5FX1NUQVRVUwkJCTB4MDAxOAkJCS8vIFhTIExhbmUgU3RhdHVzCisJCS8vIG90aGVyIFhTIHJlZ2lzdGVycyBleGlzdCBhbmQgY2FuIGJlIGRlZmluZWQgYXMgbmVlZGVkCisKKy8vIFBIWV9QTUFfQ09OVFJPTDEgcmVnaXN0ZXIgYml0IGRlZmluaXRpb25zCisjZGVmaW5lCVBNQV9DT05UUk9MMV9SRVNFVAkJCTB4ODAwMAkJCS8vIFBNQS9QTUQgcmVzZXQKKworLy8gUEhZX1BNQV9SQ1ZfREVUIHJlZ2lzdGVyIGJpdCBkZWZpbml0aW9ucworI2RlZmluZQlQTUFfUkNWX0RFVEVDVAkJCQkweDAwMDEJCQkvLyBQTUEvUE1EIHJlY2VpdmUgc2lnbmFsIGRldGVjdAorCisvLyBQSFlfUENTXzEwR19TVEFUVVMxIHJlZ2lzdGVyIGJpdCBkZWZpbml0aW9ucworI2RlZmluZQlQQ1NfMTBCX0JMT0NLX0xPQ0sJCQkweDAwMDEJCQkvLyBQQ1MgMTBHQkFTRS1SIGxvY2tlZCB0byByZWNlaXZlIGJsb2NrcworCisvLyBQSFlfWFNfTEFORV9TVEFUVVMgcmVnaXN0ZXIgYml0IGRlZmluaXRpb25zCisjZGVmaW5lCVhTX0xBTkVfQUxJR04JCQkJMHgxMDAwCQkJLy8gWFMgdHJhbnNtaXQgbGFuZXMgYWxpZ25lZAorCisvLyBQSFkgTWljcm9jb2RlIGRvd25sb2FkIGRhdGEgc3RydWN0dXJlCit0eXBlZGVmIHN0cnVjdCBfUEhZX1VDT0RFIHsKKwl1c2hvcnQJQWRkcjsKKwl1c2hvcnQJRGF0YTsKK30gUEhZX1VDT0RFLCAqUFBIWV9VQ09ERTsKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFRyYW5zbWl0IFNlcXVlbmNlciBDb21tYW5kIERlc2NyaXB0b3IgZGVmaW5pdGlvbnMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLy8gVGhpcyBkZXNjcmlwdG9yIG11c3QgYmUgcGxhY2VkIGluIEdSQU0uICBUaGUgYWRkcmVzcyBvZiB0aGlzIGRlc2NyaXB0b3IKKy8vIChhbG9uZyB3aXRoIGEgY291cGxlIG9mIGNvbnRyb2wgYml0cykgaXMgcHVzaGVkIG9udG8gdGhlIFB4aENtZFEgb3IgUHhsQ21kUQorLy8gKFByb3h5IGhpZ2ggb3IgbG93IGNvbW1hbmQgcXVldWUpLiAgVGhpcyBkYXRhIGlzIHJlYWQgYnkgdGhlIFByb3h5IFNlcXVlbmNlciwKKy8vIHdoaWNoIHB1c2hlcyBpdCBvbnRvIHRoZSBYbXRDbWRRLCB3aGljaCBpcyAoZXZlbnR1YWxseSkgcmVhZCBieSB0aGUgVHJhbnNtaXQKKy8vIFNlcXVlbmNlciwgY2F1c2luZyBhIHBhY2tldCB0byBiZSB0cmFuc21pdHRlZC4gIE5vdCBhbGwgZmllbGRzIGFyZSB2YWxpZCBmb3IKKy8vIGFsbCBjb21tYW5kcyAtIHNlZSB0aGUgU2FoYXJhIHNwZWMgZm9yIGRldGFpbHMuICBOb3RlIHRoYXQgdGhpcyBzdHJ1Y3R1cmUgaXMKKy8vIG9ubHkgdmFsaWQgd2hlbiBjb21waWxlZCBvbiBhIGxpdHRsZSBlbmRpYW4gbWFjaGluZS4KKyNwcmFnbWEgcGFjayhwdXNoLCAxKQordHlwZWRlZiBzdHJ1Y3QgX1hNVF9ERVNDIHsKKwl1c2hvcnQJWG10TGVuOwkJCS8vIHdvcmQgMCwgYml0cyBbMTU6MF0gLSAgdHJhbnNtaXQgbGVuZ3RoCisJdW5zaWduZWQgY2hhcglYbXRDdGw7CQkJLy8gd29yZCAwLCBiaXRzIFsyMzoxNl0gLSB0cmFuc21pdCBjb250cm9sIGJ5dGUKKwl1bnNpZ25lZCBjaGFyCUNtZDsJCQkvLyB3b3JkIDAsIGJpdHMgWzMxOjI0XSAtIHRyYW5zbWl0IGNvbW1hbmQgcGx1cyBtaXNjLgorCXUzMglYbXRCdWZJZDsJCS8vIHdvcmQgMSwgYml0cyBbMzE6MF0gLSAgdHJhbnNtaXQgYnVmZmVyIElECisJdW5zaWduZWQgY2hhcglUY3BTdHJ0OwkJLy8gd29yZCAyLCBiaXRzIFs3OjBdIC0gICBieXRlIGFkZHJlc3Mgb2YgVENQIGhlYWRlcgorCXVuc2lnbmVkIGNoYXIJSXBTdHJ0OwkJCS8vIHdvcmQgMiwgYml0cyBbMTU6OF0gLSAgYnl0ZSBhZGRyZXNzIG9mIElQIGhlYWRlcgorCXVzaG9ydAlJcENrU3VtOwkJLy8gd29yZCAyLCBiaXRzIFszMToxNl0gLSBwYXJ0aWFsIElQIGNoZWNrc3VtCisJdXNob3J0CVRjcENrU3VtOwkJLy8gd29yZCAzLCBiaXRzIFsxNTowXSAtICBwYXJ0aWFsIFRDUCBjaGVja3N1bQorCXVzaG9ydAlSc3ZkMTsJCQkvLyB3b3JkIDMsIGJpdHMgWzMxOjE2XSAtIFBBRAorCXUzMglSc3ZkMjsJCQkvLyB3b3JkIDQsIGJpdHMgWzMxOjBdIC0gIFBBRAorCXUzMglSc3ZkMzsJCQkvLyB3b3JkIDUsIGJpdHMgWzMxOjBdIC0gIFBBRAorCXUzMglSc3ZkNDsJCSAgICAvLyB3b3JkIDYsIGJpdHMgWzMxOjBdIC0gIFBBRAorCXUzMglSc3ZkNTsJCSAgICAvLyB3b3JkIDcsIGJpdHMgWzMxOjBdIC0gIFBBRAorfSBYTVRfREVTQywgKlBYTVRfREVTQzsKKyNwcmFnbWEgcGFjayhwb3ApCisKKy8vIFhNVF9ERVNDIENtZCBieXRlIGRlZmluaXRpb25zCisJCS8vIGNvbW1hbmQgY29kZXMKKyNkZWZpbmUgWE1UX0RFU0NfQ01EX1JBV19TRU5ECQkwCQkvLyByYXcgc2VuZCBkZXNjcmlwdG9yCisjZGVmaW5lIFhNVF9ERVNDX0NNRF9DU1VNX0lOU0VSVAkxCQkvLyBjaGVja3N1bSBpbnNlcnQgZGVzY3JpcHRvcgorI2RlZmluZSBYTVRfREVTQ19DTURfRk9STUFUCQkJMgkJLy8gZm9ybWF0IGRlc2NyaXB0b3IKKyNkZWZpbmUgWE1UX0RFU0NfQ01EX1BSSU1FCQkJMwkJLy8gcHJpbWUgZGVzY3JpcHRvcgorI2RlZmluZSBYTVRfREVTQ19DTURfQ09ERV9TSEZUCQk2CQkvLyBjb21hbmQgY29kZSBzaGlmdCAoc2hpZnQgdG8gYml0cyBbMzE6MzBdIGluIHdvcmQgMCkKKwkJLy8gc2hpZnRlZCBjb21tYW5kIGNvZGVzCisjZGVmaW5lIFhNVF9SQVdfU0VORAkJKFhNVF9ERVNDX0NNRF9SQVdfU0VORCAgICA8PCBYTVRfREVTQ19DTURfQ09ERV9TSEZUKQorI2RlZmluZSBYTVRfQ1NVTV9JTlNFUlQJCShYTVRfREVTQ19DTURfQ1NVTV9JTlNFUlQgPDwgWE1UX0RFU0NfQ01EX0NPREVfU0hGVCkKKyNkZWZpbmUgWE1UX0ZPUk1BVAkJCShYTVRfREVTQ19DTURfRk9STUFUICAgICAgPDwgWE1UX0RFU0NfQ01EX0NPREVfU0hGVCkKKyNkZWZpbmUgWE1UX1BSSU1FCQkJKFhNVF9ERVNDX0NNRF9QUklNRSAgICAgICA8PCBYTVRfREVTQ19DTURfQ09ERV9TSEZUKQorCisvLyBYTVRfREVTQyBDb250cm9sIEJ5dGUgKFhtdEN0bCkgZGVmaW5pdGlvbnMKKy8vIE5PVEU6ICBUaGVzZSBiaXRzIGRvIG5vdCB3b3JrIG9uIFNhaGFyYSAoUmV2IEEpIQorI2RlZmluZQlYTVRfQ1RMX1BBVVNFX0ZSQU1FCQkJMHg4MAkvLyBjdXJyZW50IGZyYW1lIGlzIGEgcGF1c2UgY29udHJvbCBmcmFtZSAoZm9yIHN0YXRpc3RpY3MpCisjZGVmaW5lCVhNVF9DVExfQ09OVFJPTF9GUkFNRQkJMHg0MAkvLyBjdXJyZW50IGZyYW1lIGlzIGEgY29udHJvbCBmcmFtZSAoZm9yIHN0YXRpc3RpY3MpCisjZGVmaW5lCVhNVF9DVExfUEVSX1BLVF9RVUFMCQkweDIwCS8vIHBlciBwYWNrZXQgcXVhbGlmaWVyCisjZGVmaW5lCVhNVF9DVExfUEFEX01PREVfTk9ORQkJMHgwMAkvLyBkbyBub3QgcGFkIGZyYW1lCisjZGVmaW5lCVhNVF9DVExfUEFEX01PREVfNjQJCQkweDA4CS8vIHBhZCBmcmFtZSB0byA2NCBieXRlcworI2RlZmluZQlYTVRfQ1RMX1BBRF9NT0RFX1ZMQU5fNjgJMHgxMAkvLyBwYWQgZnJhbWUgdG8gNjQgYnl0ZXMsIGFuZCBWTEFOIGZyYW1lcyB0byA2OCBieXRlcworI2RlZmluZQlYTVRfQ1RMX1BBRF9NT0RFXzY4CQkJMHgxOAkvLyBwYWQgZnJhbWUgdG8gNjggYnl0ZXMKKyNkZWZpbmUJWE1UX0NUTF9HRU5fRkNTCQkJCTB4MDQJLy8gZ2VuZXJhdGUgRkNTIChDUkMpIGZvciB0aGlzIGZyYW1lCisjZGVmaW5lCVhNVF9DVExfREVMQVlfRkNTXzAJCQkweDAwCS8vIGRvIG5vdCBkZWxheSBGQ1MgY2FsY3V0aW9uCisjZGVmaW5lCVhNVF9DVExfREVMQVlfRkNTXzEJCQkweDAxCS8vIGRlbGF5IEZDUyBjYWxjdWxhdGlvbiBieSAxICg0LWJ5dGUpIHdvcmQKKyNkZWZpbmUJWE1UX0NUTF9ERUxBWV9GQ1NfMgkJCTB4MDIJLy8gZGVsYXkgRkNTIGNhbGN1bGF0aW9uIGJ5IDIgKDQtYnl0ZSkgd29yZHMKKyNkZWZpbmUJWE1UX0NUTF9ERUxBWV9GQ1NfMwkJCTB4MDMJLy8gZGVsYXkgRkNTIGNhbGN1bGF0aW9uIGJ5IDMgKDQtYnl0ZSkgd29yZHMKKworLy8gWE1UX0RFU0MgWG10QnVmSWQgZGVmaW5pdGlvbgorI2RlZmluZSBYTVRfQlVGX0lEX1NIRlQJCTgJCQkvLyBUaGUgWG10IGJ1ZmZlciBJRCBpcyBmb3JtZWQgYnkgZGl2aWRpbmcKKwkJCQkJCQkJCQkvLyB0aGUgYnVmZmVyIChEUkFNKSBhZGRyZXNzIGJ5IDI1NiAob3IgPDwgOCkKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBSZWNlaXZlciBTZXF1ZW5jZXIgRGVmaW5pdGlvbnMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLy8gUmVjZWl2ZSBFdmVudCBRdWV1ZSAocXVldWVzIDMgLSA2KSBiaXQgZGVmaW5pdGlvbnMKKyNkZWZpbmUJUkNWX0VWVFFfUkJGSURfTUFTSwkJMHgwMDAwRkZGRgkvLyBiaXQgbWFzayBmb3IgdGhlIFJlY2VpdmUgQnVmZmVyIElECisKKy8vIFJlY2VpdmUgQnVmZmVyIElEIGRlZmluaXRpb24KKyNkZWZpbmUgUkNWX0JVRl9JRF9TSEZUCQk1CQkJLy8gVGhlIFJjdiBidWZmZXIgSUQgaXMgZm9ybWVkIGJ5IGRpdmlkaW5nCisJCQkJCQkJCQkJLy8gdGhlIGJ1ZmZlciAoRFJBTSkgYWRkcmVzcyBieSAzMiAob3IgPDwgNSkKKworLy8gRm9ybWF0IG9mIHRoZSAxOCBieXRlIFJlY2VpdmUgQnVmZmVyIHJldHVybmVkIGJ5IHRoZQorLy8gUmVjZWl2ZSBTZXF1ZW5jZXIgZm9yIHJlY2VpdmVkIHBhY2tldHMKKyNwcmFnbWEgcGFjayhwdXNoLCAxKQordHlwZWRlZiBzdHJ1Y3QgX1JDVl9CVUZfSERSIHsKKwl1MzIJU3RhdHVzOwkJCQkvLyBTdGF0dXMgd29yZCBmcm9tIFJjdiBTZXEgUGFyc2VyCisJdXNob3J0CUxlbmd0aDsJCQkJLy8gUmN2IHBhY2tldCBieXRlIGNvdW50CisJdW5pb24geworCQl1c2hvcnQJCVRjcENzdW07CS8vIFRDUCBjaGVja3N1bQorCQlzdHJ1Y3QgeworCQkJdW5zaWduZWQgY2hhcglUY3BDc3VtTDsJLy8gbG93ZXIgOCBiaXRzIG9mIHRoZSBUQ1AgY2hlY2tzdW0KKwkJCXVuc2lnbmVkIGNoYXIJTGlua0hhc2g7CS8vIExpbmsgaGFzaCAobXVsdGljYXN0IGZyYW1lcyBvbmx5KQorCQl9OworCX07CisJdXNob3J0CVNrdEhhc2g7CQkJLy8gU29ja2V0IGhhc2gKKwl1bnNpZ25lZCBjaGFyCVRjcEhkck9mZnNldDsJCS8vIFRDUCBoZWFkZXIgb2Zmc2V0IGludG8gcGFja2V0CisJdW5zaWduZWQgY2hhcglJcEhkck9mZnNldDsJCS8vIElQIGhlYWRlciBvZmZzZXQgaW50byBwYWNrZXQKKwl1MzIJVHB6SGFzaDsJCQkvLyBUb2VwbGl0eiBoYXNoCisJdXNob3J0CVJlc2VydmVkOwkJCS8vIFJlc2VydmVkCit9IFJDVl9CVUZfSERSLCAqUFJDVl9CVUZfSERSOworI3ByYWdtYSBwYWNrKHBvcCkKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFF1ZXVlIGRlZmluaXRpb25zCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8vIEluZ3Jlc3MgKHJlYWQgb25seSkgcXVldWUgbnVtYmVycworI2RlZmluZSBQWFlfQlVGX1EJCTAJCS8vIFByb3h5IEJ1ZmZlciBRdWV1ZQorI2RlZmluZSBIU1RfRVZUX1EJCTEJCS8vIEhvc3QgRXZlbnQgUXVldWUKKyNkZWZpbmUgWE1UX0JVRl9RCQkyCQkvLyBUcmFuc21pdCBCdWZmZXIgUXVldWUKKyNkZWZpbmUgU0tUX0VWTF9RCQkzCQkvLyBSY3ZTcXIgU29ja2V0IEV2ZW50IExvdyBQcmlvcml0eSBRdWV1ZQorI2RlZmluZSBSQ1ZfRVZMX1EJCTQJCS8vIFJjdlNxciBSY3YgRXZlbnQgTG93IFByaW9yaXR5IFF1ZXVlCisjZGVmaW5lIFNLVF9FVkhfUQkJNQkJLy8gUmN2U3FyIFNvY2tldCBFdmVudCBIaWdoIFByaW9yaXR5IFF1ZXVlCisjZGVmaW5lIFJDVl9FVkhfUQkJNgkJLy8gUmN2U3FyIFJjdiBFdmVudCBIaWdoIFByaW9yaXR5IFF1ZXVlCisjZGVmaW5lIERNQV9SU1BfUQkJNwkJLy8gRG1hIFJlc3BvbnNlIFF1ZXVlIC0gb25lIHBlciBDUFUgY29udGV4dAorLy8gTG9jYWwgKHJlYWQvd3JpdGUpIHF1ZXVlIG51bWJlcnMKKyNkZWZpbmUgTE9DQUxfQV9RCQk4CQkvLyBTcGFyZSBsb2NhbCBRdWV1ZQorI2RlZmluZSBMT0NBTF9CX1EJCTkJCS8vIFNwYXJlIGxvY2FsIFF1ZXVlCisjZGVmaW5lIExPQ0FMX0NfUQkJMTAJCS8vIFNwYXJlIGxvY2FsIFF1ZXVlCisjZGVmaW5lIEZTTV9FVlRfUQkJMTEJCS8vIEZpbml0ZS1TdGF0ZS1NYWNoaW5lIEV2ZW50IFF1ZXVlCisjZGVmaW5lIFNCRl9QQUxfUQkJMTIJCS8vIFN5c3RlbSBCdWZmZXIgUGh5c2ljYWwgQWRkcmVzcyAobG93KSBRdWV1ZQorI2RlZmluZSBTQkZfUEFIX1EJCTEzCQkvLyBTeXN0ZW0gQnVmZmVyIFBoeXNpY2FsIEFkZHJlc3MgKGhpZ2gpIFF1ZXVlCisjZGVmaW5lIFNCRl9WQUxfUQkJMTQJCS8vIFN5c3RlbSBCdWZmZXIgVmlydHVhbCBBZGRyZXNzIChsb3cpIFF1ZXVlCisjZGVmaW5lIFNCRl9WQUhfUQkJMTUJCS8vIFN5c3RlbSBCdWZmZXIgVmlydHVhbCBBZGRyZXNzIChoaWdoKSBRdWV1ZQorLy8gRWdyZXNzICh3cml0ZSBvbmx5KSBxdWV1ZSBudW1iZXJzCisjZGVmaW5lIEgyR19DTURfUQkJMTYJCS8vIEhvc3QgdG8gR2xiUmFtIERNQSBDb21tYW5kIFF1ZXVlCisjZGVmaW5lIEgyRF9DTURfUQkJMTcJCS8vIEhvc3QgdG8gRFJBTSBETUEgQ29tbWFuZCBRdWV1ZQorI2RlZmluZSBHMkhfQ01EX1EJCTE4CQkvLyBHbGJSYW0gdG8gSG9zdCBETUEgQ29tbWFuZCBRdWV1ZQorI2RlZmluZSBHMkRfQ01EX1EJCTE5CQkvLyBHbGJSYW0gdG8gRFJBTSBETUEgQ29tbWFuZCBRdWV1ZQorI2RlZmluZSBEMkhfQ01EX1EJCTIwCQkvLyBEUkFNIHRvIEhvc3QgRE1BIENvbW1hbmQgUXVldWUKKyNkZWZpbmUgRDJHX0NNRF9RCQkyMQkJLy8gRFJBTSB0byBHbGJSYW0gRE1BIENvbW1hbmQgUXVldWUKKyNkZWZpbmUgRDJEX0NNRF9RCQkyMgkJLy8gRFJBTSB0byBEUkFNIERNQSBDb21tYW5kIFF1ZXVlCisjZGVmaW5lIFBYTF9DTURfUQkJMjMJCS8vIExvdyBQcmlvcml0eSBQcm94eSBDb21tYW5kIFF1ZXVlCisjZGVmaW5lIFBYSF9DTURfUQkJMjQJCS8vIEhpZ2ggUHJpb3JpdHkgUHJveHkgQ29tbWFuZCBRdWV1ZQorI2RlZmluZSBSU1FfQ01EX1EJCTI1CQkvLyBSZWNlaXZlIFNlcXVlbmNlciBDb21tYW5kIFF1ZXVlCisjZGVmaW5lIFJDVl9CVUZfUQkJMjYJCS8vIFJlY2VpdmUgQnVmZmVyIFF1ZXVlCisKKy8vIEJpdCBkZWZpbml0aW9ucyBmb3IgdGhlIFByb3h5IENvbW1hbmQgcXVldWVzIChQWExfQ01EX1EgYW5kIFBYSF9DTURfUSkKKyNkZWZpbmUgUFhZX0NPUFlfRU4JCTB4MDAyMDAwMDAJCS8vIGVuYWJsZSBjb3B5IG9mIHhtdCBkZXNjcmlwdG9yIHRvIHhtdCBjb21tYW5kIHF1ZXVlCisjZGVmaW5lIFBYWV9TSVpFXzE2CQkweDAwMDAwMDAwCQkvLyBjb3B5IDE2IGJ5dGVzCisjZGVmaW5lIFBYWV9TSVpFXzMyCQkweDAwMTAwMDAwCQkvLyBjb3B5IDMyIGJ5dGVzCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogU1hHIEVFUFJPTS9GbGFzaCBDb25maWd1cmF0aW9uIERlZmluaXRpb25zCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjcHJhZ21hIHBhY2socHVzaCwgMSkKKworLy8KK3R5cGVkZWYgc3RydWN0IF9IV19DRkdfREFUQSB7CisJdXNob3J0CQlBZGRyOworCXVuaW9uIHsKKwkJdXNob3J0CURhdGE7CisJCXVzaG9ydAlDaGVja3N1bTsKKwl9OworfSBIV19DRkdfREFUQSwgKlBIV19DRkdfREFUQTsKKworLy8KKyNkZWZpbmUJTlVNX0hXX0NGR19FTlRSSUVTCSgoMTI4L3NpemVvZihIV19DRkdfREFUQSkpIC0gNCkKKworLy8gTUFDIGFkZHJlc3MKK3R5cGVkZWYgc3RydWN0IF9TWEdfQ09ORklHX01BQyB7CisJdW5zaWduZWQgY2hhcgkJTWFjQWRkcls2XTsJCQkvLyBNQUMgQWRkcmVzcworfSBTWEdfQ09ORklHX01BQywgKlBTWEdfQ09ORklHX01BQzsKKworLy8KK3R5cGVkZWYgc3RydWN0IF9BVEtfRlJVIHsKKwl1bnNpZ25lZCBjaGFyCQlQYXJ0TnVtWzZdOworCXVuc2lnbmVkIGNoYXIJCVJldmlzaW9uWzJdOworCXVuc2lnbmVkIGNoYXIJCVNlcmlhbFsxNF07Cit9IEFUS19GUlUsICpQQVRLX0ZSVTsKKworLy8gT0VNIEZSVSBGb3JtYXQgdHlwZXMKKyNkZWZpbmUJQVRLX0ZSVV9GT1JNQVQJCTB4MDAwMAorI2RlZmluZSBDUFFfRlJVX0ZPUk1BVAkJMHgwMDAxCisjZGVmaW5lIERFTExfRlJVX0ZPUk1BVAkJMHgwMDAyCisjZGVmaW5lIEhQX0ZSVV9GT1JNQVQJCTB4MDAwMworI2RlZmluZSBJQk1fRlJVX0ZPUk1BVAkJMHgwMDA0CisjZGVmaW5lIEVNQ19GUlVfRk9STUFUCQkweDAwMDUKKyNkZWZpbmUgTk9fRlJVX0ZPUk1BVAkJMHhGRkZGCisKKy8vIEVFUFJPTS9GbGFzaCBGb3JtYXQKK3R5cGVkZWYgc3RydWN0IF9TWEdfQ09ORklHIHsKKwkvLworCS8vIFNlY3Rpb24gMSAoMTI4IGJ5dGVzKQorCS8vCisJdXNob3J0CQkJTWFnaWNXb3JkOwkJCS8vIEVFUFJPTS9GTEFTSCBNYWdpYyBjb2RlICdBNUE1JworCXVzaG9ydAkJCVNwaUNsa3M7CQkJLy8gU1BJIGJ1cyBjbG9jayBkaXZpZGVycworCUhXX0NGR19EQVRBCQlId0NmZ1tOVU1fSFdfQ0ZHX0VOVFJJRVNdOworCS8vCisJLy8KKwkvLworCXVzaG9ydAkJCVZlcnNpb247CQkJLy8gRUVQUk9NIGZvcm1hdCB2ZXJzaW9uCisJU1hHX0NPTkZJR19NQUMJTWFjQWRkcls0XTsJCQkvLyBzcGFjZSBmb3IgNCBNQUMgYWRkcmVzc2VzCisJQVRLX0ZSVQkJCUF0a0ZydTsJCQkJLy8gRlJVIGluZm9ybWF0aW9uCisJdXNob3J0CQkJT2VtRnJ1Rm9ybWF0OwkJLy8gT0VNIEZSVSBmb3JtYXQgdHlwZQorCXVuc2lnbmVkIGNoYXIJCQlPZW1GcnVbNzZdOwkJCS8vIE9FTSBGUlUgaW5mb3JtYXRpb24gKG9wdGlvbmFsKQorCXVzaG9ydAkJCUNoZWNrc3VtOwkJCS8vIENoZWNrc3VtIG9mIHNlY3Rpb24gMgorCS8vIENTIGluZm8gWFhYVE9ETworfSBTWEdfQ09ORklHLCAqUFNYR19DT05GSUc7CisjcHJhZ21hIHBhY2socG9wKQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIE1pc2NlbGxhbmVvdXMgSGFyZHdhcmUgZGVmaW5pdGlvbnMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLy8gU2FoYXJhIChBU0lDIGxldmVsKSBkZWZpbmVzCisjZGVmaW5lIFNBSEFSQV9HUkFNX1NJWkUJCQkweDAyMDAwMAkJLy8gR1JBTSBzaXplIC0gMTI4IEtCCisjZGVmaW5lIFNBSEFSQV9EUkFNX1NJWkUJCQkweDIwMDAwMAkJLy8gRFJBTSBzaXplIC0gMiBNQgorI2RlZmluZSBTQUhBUkFfUVJBTV9TSVpFCQkJMHgwMDQwMDAJCS8vIFFSQU0gc2l6ZSAtIDE2SyBlbnRyaWVzICg2NCBLQikKKyNkZWZpbmUgU0FIQVJBX1dDU19TSVpFCQkJCTB4MDAyMDAwCQkvLyBXQ1MgLSA4SyBpbnN0cnVjdGlvbnMgKHggMTA4IGJpdHMpCisKKy8vIEFyYWJpYSAoYm9hcmQgbGV2ZWwpIGRlZmluZXMKKyNkZWZpbmUJRkxBU0hfU0laRQkJCQkweDA4MDAwMAkJLy8gNTEyIEtCICg0IE1iKQorI2RlZmluZQlFRVBST01fU0laRV9YRk1SCQk1MTIJCQkJLy8gdHJ1ZSBFRVBST00gc2l6ZSAoYnl0ZXMpLCBpbmNsdWRpbmcgeGZtciBhcmVhCisjZGVmaW5lCUVFUFJPTV9TSVpFX05PX1hGTVIJCTI1NgkJCQkvLyBFRVBST00gc2l6ZSBleGNsdWRpbmcgeGZtciBhcmVhCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvc3hnL3N4Z3BoeWNvZGUuaCBiL2RyaXZlcnMvc3RhZ2luZy9zeGcvc3hncGh5Y29kZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI2YjM2YzgKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvc3hnL3N4Z3BoeWNvZGUuaApAQCAtMCwwICsxLDM0OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMTk5Ny0yMDA4IEFsYWNyaXRlY2gsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZAorICoKKyAqIHN4Z3BoeWNvZGUuaDoKKyAqCisgKiBUaGlzIGZpbGUgUEhZIG1pY3JvY29kZSBhbmQgcmVnaXN0ZXIgaW5pdGlhbGl6YXRpb24gZGF0YS4KKyAqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogUEhZIE1pY3JvY29kZQorICoKKyAqIFRoZSBmb2xsb3dpbmcgY29udGFpbnMgYm90aCBQSFkgbWljcm9jb2RlIGFuZCBQSFkgcmVnaXN0ZXIKKyAqIGluaXRpYWxpemF0aW9uIGRhdGEuICBJdCBpcyBzcGVjaWZpYyB0byBib3RoIHRoZSBQSFkgYW5kIHRoZQorICogdHlwZSBvZiB0cmFuc2NlaXZlci4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyAqIERvd25sb2FkIGZvciBBRUwyMDA1QyBQSFkgd2l0aCBTUi9MUiB0cmFuc2NlaXZlciAoMTBHQkFTRS1TUiBvciAxMEdCQVNFLUxSKQorICovCitzdGF0aWMgUEhZX1VDT0RFIFBoeVVjb2RlW10gPSB7CisJLyoKKwkgKiBOT1RFOiAgQW4gYWRkcmVzcyBvZiAwIGlzIGEgc3BlY2lhbCBjYXNlLiAgV2hlbiB0aGUgZG93bmxvYWQgcm91dGluZQorCSAqIHNlZXMgYW4gYWRkcmVzcyBvZiAwLCBpdCBkb2VzIG5vdCB3cml0ZSB0byB0aGUgUEhZLiAgSW5zdGVhZCwgaXQKKwkgKiBkZWxheXMgdGhlIGRvd25sb2FkLiAgVGhlIGxlbmd0aCBvZiB0aGUgZGVsYXkgKGluIG1zKSBpcyBnaXZlbiBpbgorCSAqIHRoZSBkYXRhIGZpZWxkLgorCSAqCisJICogRGVsYXlzIGFyZSByZXF1aXJlZCBhdCBjZXJ0YWluIHBvaW50cy4KKwkgKi8KKworCS8qCisJICogUGxhdGZvcm0tc3BlY2lmaWMgTURJTyBQYXRjaGVzOgorCSAqIChpbmNsdWRlIHBhdGNoZXMgZm9yIDEwRyBSWCBwb2xhcml0eSBmbGlwLCA1ME1oeiBTeW50aCwgZXRjKQorCSAqLworCS8qIEFkZHIsIERhdGEgKi8KKwl7MHhjMDE3LCAweGZlYjB9LAkvKiBmbGlwIFJYX0xPUyBwb2xhcml0eSAobWFuZGF0b3J5ICovCisJCQkJLyogIHBhdGNoIGZvciBTRlArIGFwcGxpY2F0aW9ucykgKi8KKwl7MHhDMDAxLCAweDA0Mjh9LAkvKiBmbGlwIFJYIHNlcmlhbCBwb2xhcml0eSAqLworCisJezB4YzAxMywgMHhmMzQxfSwJLyogaW52ZXJ0IGx4bWl0IGNsb2NrIChtYW5kYXRvcnkgcGF0Y2gpICovCisJezB4YzIxMCwgMHg4MDAwfSwJLyogcmVzZXQgZGF0YXBhdGggKG1hbmRhdG9yeSBwYXRjaCkgKi8KKwl7MHhjMjEwLCAweDgxMDB9LAkvKiByZXNldCBkYXRhcGF0aCAobWFuZGF0b3J5IHBhdGNoKSAqLworCXsweGMyMTAsIDB4ODAwMH0sCS8qIHJlc2V0IGRhdGFwYXRoIChtYW5kYXRvcnkgcGF0Y2gpICovCisJezB4YzIxMCwgMHgwMDAwfSwJLyogcmVzZXQgZGF0YXBhdGggKG1hbmRhdG9yeSBwYXRjaCkgKi8KKwl7MHgwMDAwLCAweDAwMzJ9LAkvKiB3YWl0IGZvciA1MG1zIGZvciBkYXRhcGF0aCByZXNldCB0byAqLworCQkJCS8qIGNvbXBsZXRlLiAobWFuZGF0b3J5IHBhdGNoKSAqLworCisJLyogQ29uZmlndXJlIHRoZSBMRUQncyAqLworCXsweGMyMTQsIDB4MDA5OX0sCS8qIGNvbmZpZ3VyZSB0aGUgTEVEIGRyaXZlcnMgKi8KKwl7MHhjMjE2LCAweDVmNWZ9LAkvKiBjb25maWd1cmUgdGhlIEFjdGl2aXR5IExFRCAqLworCXsweGMyMTcsIDB4MzNmZn0sCS8qIGNvbmZpZ3VyZSB0aGUgTGluayBMRUQgKi8KKworCS8qIFRyYW5zY2VpdmVyLXNwZWNpZmljIE1ESU8gUGF0Y2hlczogKi8KKwl7MHhjMDEwLCAweDQ0OGF9LAkvKiAoYml0IDE0KSBtYXNrIG91dCBoaWdoIEJFUiBpbnB1dCBmcm9tIHRoZSAqLworCQkJCS8qIExPUyBzaWduYWwgaW4gMS4wMDBBICovCisJCQkJLyogKG1hbmRhdG9yeSBwYXRjaCBmb3IgU1IgY29kZSkqLworCXsweGMwMDMsIDB4MDE4MX0sCS8qIChiaXQgNykgZW5hYmxlIHRoZSBDRFIgaW5jIHNldHRpbmcgaW4gKi8KKwkJCQkvKiAxLkMwMDUgKG1hbmRhdG9yeSBwYXRjaCBmb3IgU1IgY29kZSkgKi8KKworCS8qIFRyYW5zY2VpdmVyLXNwZWNpZmljIE1pY3JvY29udHJvbGxlciBJbml0aWFsaXphdGlvbjogKi8KKwl7MHhjMDRhLCAweDUyMDB9LAkvKiBhY3RpdmF0ZSBtaWNyb2NvbnRyb2xsZXIgYW5kIHBhdXNlICovCisJezB4MDAwMCwgMHgwMDMyfSwJLyogd2FpdCA1MG1zIGZvciBtaWNyb2NvbnRyb2xsZXIgYmVmb3JlICovCisJCQkJLyogd3JpdGluZyBpbiBjb2RlLiAqLworCisJLyogY29kZSBibG9jayBzdGFydHMgaGVyZTogKi8KKwl7MHhjYzAwLCAweDIwMDl9LAorCXsweGNjMDEsIDB4MzAwOX0sCisJezB4Y2MwMiwgMHgyN2ZmfSwKKwl7MHhjYzAzLCAweDMwMGZ9LAorCXsweGNjMDQsIDB4MjAwY30sCisJezB4Y2MwNSwgMHgzMDBjfSwKKwl7MHhjYzA2LCAweDIwYzR9LAorCXsweGNjMDcsIDB4M2MwNH0sCisJezB4Y2MwOCwgMHg2NDM3fSwKKwl7MHhjYzA5LCAweDIwYzR9LAorCXsweGNjMGEsIDB4M2MwNH0sCisJezB4Y2MwYiwgMHg2NDM3fSwKKwl7MHhjYzBjLCAweDI1YzR9LAorCXsweGNjMGQsIDB4M2M1NH0sCisJezB4Y2MwZSwgMHg2NzI0fSwKKwl7MHhjYzBmLCAweDI1YzR9LAorCXsweGNjMTAsIDB4M2M1NH0sCisJezB4Y2MxMSwgMHg2NzI0fSwKKwl7MHhjYzEyLCAweDIwNDJ9LAorCXsweGNjMTMsIDB4MzAxMn0sCisJezB4Y2MxNCwgMHgxMDAyfSwKKwl7MHhjYzE1LCAweDI0ODJ9LAorCXsweGNjMTYsIDB4MzAxMn0sCisJezB4Y2MxNywgMHgxMDAyfSwKKwl7MHhjYzE4LCAweDJhMzJ9LAorCXsweGNjMTksIDB4MzAwMn0sCisJezB4Y2MxYSwgMHgxMDAyfSwKKwl7MHhjYzFiLCAweDIwMGR9LAorCXsweGNjMWMsIDB4MzA0ZH0sCisJezB4Y2MxZCwgMHgyODYyfSwKKwl7MHhjYzFlLCAweDMwMTJ9LAorCXsweGNjMWYsIDB4MTAwMn0sCisJezB4Y2MyMCwgMHgyOTgyfSwKKwl7MHhjYzIxLCAweDMwMDJ9LAorCXsweGNjMjIsIDB4MTAwMn0sCisJezB4Y2MyMywgMHg2MjhmfSwKKwl7MHhjYzI0LCAweDIwYTR9LAorCXsweGNjMjUsIDB4MzAwNH0sCisJezB4Y2MyNiwgMHg2NDM4fSwKKwl7MHhjYzI3LCAweDIwYTR9LAorCXsweGNjMjgsIDB4MzAwNH0sCisJezB4Y2MyOSwgMHg2NDM4fSwKKwl7MHhjYzJhLCAweDIwMTV9LAorCXsweGNjMmIsIDB4MzAwNX0sCisJezB4Y2MyYywgMHg1ODUzfSwKKwl7MHhjYzJkLCAweDJiZDJ9LAorCXsweGNjMmUsIDB4MzAwMn0sCisJezB4Y2MyZiwgMHgxMzQyfSwKKwl7MHhjYzMwLCAweDIwMGN9LAorCXsweGNjMzEsIDB4MzAwY30sCisJezB4Y2MzMiwgMHgyZmY3fSwKKwl7MHhjYzMzLCAweDMwZjd9LAorCXsweGNjMzQsIDB4MjBjNH0sCisJezB4Y2MzNSwgMHgzYzA0fSwKKwl7MHhjYzM2LCAweDY3MjR9LAorCXsweGNjMzcsIDB4MjBjNH0sCisJezB4Y2MzOCwgMHgzYzA0fSwKKwl7MHhjYzM5LCAweDY3MjR9LAorCXsweGNjM2EsIDB4MmQzMn0sCisJezB4Y2MzYiwgMHgzMDAyfSwKKwl7MHhjYzNjLCAweDEwMDJ9LAorCXsweGNjM2QsIDB4MjAwOH0sCisJezB4Y2MzZSwgMHgzMDA4fSwKKwl7MHhjYzNmLCAweDVjODN9LAorCXsweGNjNDAsIDB4MmQ1Mn0sCisJezB4Y2M0MSwgMHgzMDAyfSwKKwl7MHhjYzQyLCAweDEzNTJ9LAorCXsweGNjNDMsIDB4MjAwOH0sCisJezB4Y2M0NCwgMHgzMDA4fSwKKwl7MHhjYzQ1LCAweDVjODN9LAorCXsweGNjNDYsIDB4MmQzMn0sCisJezB4Y2M0NywgMHgzMDAyfSwKKwl7MHhjYzQ4LCAweDEzNTJ9LAorCXsweGNjNDksIDB4MjAxY30sCisJezB4Y2M0YSwgMHgzMDBjfSwKKwl7MHhjYzRiLCAweDIwMGR9LAorCXsweGNjNGMsIDB4MzEwZH0sCisJezB4Y2M0ZCwgMHgyODYyfSwKKwl7MHhjYzRlLCAweDMwMTJ9LAorCXsweGNjNGYsIDB4MTAwMn0sCisJezB4Y2M1MCwgMHgyZWQyfSwKKwl7MHhjYzUxLCAweDMwMDJ9LAorCXsweGNjNTIsIDB4MTM0Mn0sCisJezB4Y2M1MywgMHg2ZjcyfSwKKwl7MHhjYzU0LCAweDEwMDJ9LAorCXsweGNjNTUsIDB4NjI4Zn0sCisJezB4Y2M1NiwgMHgyNTE0fSwKKwl7MHhjYzU3LCAweDNjNjR9LAorCXsweGNjNTgsIDB4NjQzNn0sCisJezB4Y2M1OSwgMHgyNTE0fSwKKwl7MHhjYzVhLCAweDNjNjR9LAorCXsweGNjNWIsIDB4NjQzNn0sCisJezB4Y2M1YywgMHgyZmE0fSwKKwl7MHhjYzVkLCAweDNjZDR9LAorCXsweGNjNWUsIDB4NjYyNH0sCisJezB4Y2M1ZiwgMHgyZmE0fSwKKwl7MHhjYzYwLCAweDNjZDR9LAorCXsweGNjNjEsIDB4NjYyNH0sCisJezB4Y2M2MiwgMHgyZjQ1fSwKKwl7MHhjYzYzLCAweDMwMTV9LAorCXsweGNjNjQsIDB4NTY1M30sCisJezB4Y2M2NSwgMHgyZWIyfSwKKwl7MHhjYzY2LCAweDMwMDJ9LAorCXsweGNjNjcsIDB4MTNkMn0sCisJezB4Y2M2OCwgMHgyZWQyfSwKKwl7MHhjYzY5LCAweDMwMDJ9LAorCXsweGNjNmEsIDB4MTAwMn0sCisJezB4Y2M2YiwgMHg2ZjcyfSwKKwl7MHhjYzZjLCAweDEwMDJ9LAorCXsweGNjNmQsIDB4NjI4Zn0sCisJezB4Y2M2ZSwgMHgyNjAyfSwKKwl7MHhjYzZmLCAweDMwMTJ9LAorCXsweGNjNzAsIDB4MTAwMn0sCisJezB4Y2M3MSwgMHgyMDBkfSwKKwl7MHhjYzcyLCAweDMyMGR9LAorCXsweGNjNzMsIDB4Mjg2Mn0sCisJezB4Y2M3NCwgMHgzMDEyfSwKKwl7MHhjYzc1LCAweDEwMDJ9LAorCXsweGNjNzYsIDB4MjVjNH0sCisJezB4Y2M3NywgMHgzYzU0fSwKKwl7MHhjYzc4LCAweDY0Mzd9LAorCXsweGNjNzksIDB4MjVjNH0sCisJezB4Y2M3YSwgMHgzYzU0fSwKKwl7MHhjYzdiLCAweDY0Mzd9LAorCXsweGNjN2MsIDB4MjBjNH0sCisJezB4Y2M3ZCwgMHgzYzA0fSwKKwl7MHhjYzdlLCAweDY3MjR9LAorCXsweGNjN2YsIDB4MjBjNH0sCisJezB4Y2M4MCwgMHgzYzA0fSwKKwl7MHhjYzgxLCAweDY3MjR9LAorCXsweGNjODIsIDB4NmY3Mn0sCisJezB4Y2M4MywgMHgxMDAyfSwKKwl7MHhjYzg0LCAweDYyOGZ9LAorCXsweGNjODUsIDB4MjZmMn0sCisJezB4Y2M4NiwgMHgzMDEyfSwKKwl7MHhjYzg3LCAweDEwMDJ9LAorCXsweGNjODgsIDB4YzUwM30sCisJezB4Y2M4OSwgMHhkNWQ1fSwKKwl7MHhjYzhhLCAweGM2MDB9LAorCXsweGNjOGIsIDB4MmE2ZH0sCisJezB4Y2M4YywgMHhjNjAxfSwKKwl7MHhjYzhkLCAweDJhNGN9LAorCXsweGNjOGUsIDB4YzYwMn0sCisJezB4Y2M4ZiwgMHgwMTExfSwKKwl7MHhjYzkwLCAweGM2MGN9LAorCXsweGNjOTEsIDB4NTkwMH0sCisJezB4Y2M5MiwgMHhjNzEwfSwKKwl7MHhjYzkzLCAweDA3MDB9LAorCXsweGNjOTQsIDB4YzcxOH0sCisJezB4Y2M5NSwgMHgwNzAwfSwKKwl7MHhjYzk2LCAweGM3MjB9LAorCXsweGNjOTcsIDB4NDcwMH0sCisJezB4Y2M5OCwgMHhjODAxfSwKKwl7MHhjYzk5LCAweDdmNTB9LAorCXsweGNjOWEsIDB4YzgwMn0sCisJezB4Y2M5YiwgMHg3NzYwfSwKKwl7MHhjYzljLCAweGM4MDN9LAorCXsweGNjOWQsIDB4N2ZjZX0sCisJezB4Y2M5ZSwgMHhjODA0fSwKKwl7MHhjYzlmLCAweDU3MDB9LAorCXsweGNjYTAsIDB4YzgwNX0sCisJezB4Y2NhMSwgMHg1ZjExfSwKKwl7MHhjY2EyLCAweGM4MDZ9LAorCXsweGNjYTMsIDB4NDc1MX0sCisJezB4Y2NhNCwgMHhjODA3fSwKKwl7MHhjY2E1LCAweDU3ZTF9LAorCXsweGNjYTYsIDB4YzgwOH0sCisJezB4Y2NhNywgMHgyNzAwfSwKKwl7MHhjY2E4LCAweGM4MDl9LAorCXsweGNjYTksIDB4MDAwMH0sCisJezB4Y2NhYSwgMHhjODIxfSwKKwl7MHhjY2FiLCAweDAwMDJ9LAorCXsweGNjYWMsIDB4YzgyMn0sCisJezB4Y2NhZCwgMHgwMDE0fSwKKwl7MHhjY2FlLCAweGM4MzJ9LAorCXsweGNjYWYsIDB4MTE4Nn0sCisJezB4Y2NiMCwgMHhjODQ3fSwKKwl7MHhjY2IxLCAweDFlMDJ9LAorCXsweGNjYjIsIDB4YzAxM30sCisJezB4Y2NiMywgMHhmMzQxfSwKKwl7MHhjY2I0LCAweGMwMWF9LAorCXsweGNjYjUsIDB4MDQ0Nn0sCisJezB4Y2NiNiwgMHhjMDI0fSwKKwl7MHhjY2I3LCAweDEwMDB9LAorCXsweGNjYjgsIDB4YzAyNX0sCisJezB4Y2NiOSwgMHgwYTAwfSwKKwl7MHhjY2JhLCAweGMwMjZ9LAorCXsweGNjYmIsIDB4MGMwY30sCisJezB4Y2NiYywgMHhjMDI3fSwKKwl7MHhjY2JkLCAweDBjMGN9LAorCXsweGNjYmUsIDB4YzAyOX0sCisJezB4Y2NiZiwgMHgwMGEwfSwKKwl7MHhjY2MwLCAweGMwMzB9LAorCXsweGNjYzEsIDB4MGEwMH0sCisJezB4Y2NjMiwgMHhjMDNjfSwKKwl7MHhjY2MzLCAweDAwMWN9LAorCXsweGNjYzQsIDB4YzAwNX0sCisJezB4Y2NjNSwgMHg3YTA2fSwKKwl7MHhjY2M2LCAweDAwMDB9LAorCXsweGNjYzcsIDB4MDAwMH0sCisJezB4Y2NjOCwgMHg2MjhmfSwKKwl7MHhjY2M5LCAweDI2ZjJ9LAorCXsweGNjY2EsIDB4MzAxMn0sCisJezB4Y2NjYiwgMHgxMDAyfSwKKwl7MHhjY2NjLCAweGM2MjB9LAorCXsweGNjY2QsIDB4MDAwMH0sCisJezB4Y2NjZSwgMHhjNjIxfSwKKwl7MHhjY2NmLCAweDAwM2Z9LAorCXsweGNjZDAsIDB4YzYyMn0sCisJezB4Y2NkMSwgMHgwMDAwfSwKKwl7MHhjY2QyLCAweGM2MjN9LAorCXsweGNjZDMsIDB4MDAwMH0sCisJezB4Y2NkNCwgMHhjNjI0fSwKKwl7MHhjY2Q1LCAweDAwMDB9LAorCXsweGNjZDYsIDB4YzYyNX0sCisJezB4Y2NkNywgMHgwMDAwfSwKKwl7MHhjY2Q4LCAweGM2Mjd9LAorCXsweGNjZDksIDB4MDAwMH0sCisJezB4Y2NkYSwgMHhjNjI4fSwKKwl7MHhjY2RiLCAweDAwMDB9LAorCXsweGNjZGMsIDB4YzYyY30sCisJezB4Y2NkZCwgMHgwMDAwfSwKKwl7MHhjY2RlLCAweDAwMDB9LAorCXsweGNjZGYsIDB4MDAwMH0sCisJezB4Y2NlMCwgMHg2MjhmfSwKKwl7MHhjY2UxLCAweGQwMTl9LAorCXsweGNjZTIsIDB4MjZmMn0sCisJezB4Y2NlMywgMHgzMDEyfSwKKwl7MHhjY2U0LCAweDEwMDJ9LAorCXsweGNjZTUsIDB4YzIxMH0sCisJezB4Y2NlNiwgMHg4MDAwfSwKKwl7MHhjY2U3LCAweGMyMTB9LAorCXsweGNjZTgsIDB4ODAxMH0sCisJezB4Y2NlOSwgMHhjMjEwfSwKKwl7MHhjY2VhLCAweDgwMDB9LAorCXsweGNjZWIsIDB4YzIxMH0sCisJezB4Y2NlYywgMHgwMDAwfSwKKwl7MHhjY2VkLCAweDAwMDB9LAorCXsweGNjZWUsIDB4MDAwMH0sCisJezB4Y2NlZiwgMHg4MjIxfSwKKwl7MHhjY2YwLCAweDI3NTJ9LAorCXsweGNjZjEsIDB4MzAxMn0sCisJezB4Y2NmMiwgMHgxMDAyfSwKKwl7MHhjY2YzLCAweDZmNzJ9LAorCXsweGNjZjQsIDB4MTAwMn0sCisJezB4Y2NmNSwgMHgyODA2fSwKKwl7MHhjY2Y2LCAweDMwMDZ9LAorCXsweGNjZjcsIDB4MjAwN30sCisJezB4Y2NmOCwgMHgzY2M3fSwKKwl7MHhjY2Y5LCAweGUxNjF9LAorCXsweGNjZmEsIDB4YzE3MX0sCisJezB4Y2NmYiwgMHg2MTM0fSwKKwl7MHhjY2ZjLCAweDYxMzV9LAorCXsweGNjZmQsIDB4NTQ1M30sCisJezB4Y2NmZSwgMHgyODU4fSwKKwl7MHhjY2ZmLCAweDMwMTh9LAorCXsweGNkMDAsIDB4MTM0OH0sCisJezB4Y2QwMSwgMHg2NTI0fSwKKwl7MHhjZDAyLCAweDI3Yjh9LAorCXsweGNkMDMsIDB4MzAxOH0sCisJezB4Y2QwNCwgMHgxMDA4fSwKKwl7MHhjZDA1LCAweDEwMDJ9LAorCXsweGNkMDYsIDB4NjI4Zn0sCisJezB4Y2QwNywgMHg1ZGQzfSwKKwl7MHhjZDA4LCAweDI5MDZ9LAorCXsweGNkMDksIDB4MzAxNn0sCisJezB4Y2QwYSwgMHgxMzA2fSwKKwl7MHhjZDBiLCAweDJmZjd9LAorCXsweGNkMGMsIDB4MzBmN30sCisJezB4Y2QwZCwgMHg2MGI3fSwKKwl7MHhjZDBlLCAweGRmZmR9LAorCXsweGNkMGYsIDB4MDAwOH0sCisJezB4Y2QxMCwgMHg2ZjcyfSwKKwl7MHhjZDExLCAweDEwMDJ9LAorCXsweGNkMTIsIDB4MDAwMH0sCisJezB4Y2RmZiwgMHgwYTAxfSwKKwkvKiBlbmQgb2YgY29kZSBibG9jayAqLworCisJLyogVW5wYXVzZSB0aGUgbWljcm9jb250cm9sbGVyIHRvIHN0YXJ0IHByb2dyYW0gKi8KKwl7MHhjYTAwLCAweDAwODB9LAorCXsweGNhMTIsIDB4MDAwMH0sCisJezB4MDAwMCwgMHgwMDBBfSwJLyogd2FpdCAxMG1zIGp1c3QgdG8gYmUgc2FmZSAqLworCXsweGZmZmYsIDB4ZmZmZn0JLyogdGFibGUgdGVybWluYXRvciAqLworfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy91c2JpcC9LY29uZmlnIGIvZHJpdmVycy9zdGFnaW5nL3VzYmlwL0tjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzQyNjIzNQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy91c2JpcC9LY29uZmlnCkBAIC0wLDAgKzEsMzYgQEAKK2NvbmZpZyBVU0JfSVBfQ09NTU9OCisJdHJpc3RhdGUgIlVTQiBJUCBzdXBwb3J0IChFWFBFUklNRU5UQUwpIgorCWRlcGVuZHMgb24gVVNCICYmIEVYUEVSSU1FTlRBTAorCWRlZmF1bHQgTgorCS0tLWhlbHAtLS0KKwkgIFRoaXMgZW5hYmxlcyBwdXNoaW5nIFVTQiBwYWNrZXRzIG92ZXIgSVAgdG8gYWxsb3cgcmVtb3RlCisJICBtYWNoaW5lcyBhY2Nlc3MgdG8gVVNCIGRldmljZXMgZGlyZWN0bHkuICBGb3IgbW9yZSBkZXRhaWxzLAorCSAgYW5kIGxpbmtzIHRvIHRoZSB1c2Vyc3BhY2UgdXRpbGl0eSBwcm9ncmFtcyB0byBsZXQgdGhpcyB3b3JrCisJICBwcm9wZXJseSwgc2VlIGh0dHA6Ly91c2JpcC5uYWlzdC5qcC8KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCisJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgdXNiaXBfY29tbW9uX21vZC4KKworCSAgSWYgdW5zdXJlLCBzYXkgTi4KKworY29uZmlnIFVTQl9JUF9WSENJX0hDRAorCXRyaXN0YXRlICJVU0IgSVAgY2xpZW50IGRyaXZlciIKKwlkZXBlbmRzIG9uIFVTQl9JUF9DT01NT04KKwlkZWZhdWx0IE4KKwktLS1oZWxwLS0tCisJIFRoaXMgZW5hYmxlcyB0aGUgVVNCIElQIGhvc3QgY29udHJvbGxlciBkcml2ZXIgd2hpY2ggd2lsbAorCSBydW4gb24gdGhlIGNsaWVudCBtYWNoaW5lLgorCisJIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQorCSBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgdmhjaV9oY2QuCisKK2NvbmZpZyBVU0JfSVBfSE9TVAorCXRyaXN0YXRlICJVU0IgSVAgaG9zdCBkcml2ZXIiCisJZGVwZW5kcyBvbiBVU0JfSVBfQ09NTU9OCisJZGVmYXVsdCBOCisJLS0taGVscC0tLQorCSBUaGlzIGVuYWJsZXMgdGhlIFVTQiBJUCBkZXZpY2UgZHJpdmVyIHdoaWNoIHdpbGwgcnVuIG9uIHRoZQorCSBob3N0IG1hY2hpbmUuCisKKwkgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCisJIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCB1c2JpcC4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy91c2JpcC9NYWtlZmlsZSBiL2RyaXZlcnMvc3RhZ2luZy91c2JpcC9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNzlmNDIxCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3VzYmlwL01ha2VmaWxlCkBAIC0wLDAgKzEsMTIgQEAKK29iai0kKENPTkZJR19VU0JfSVBfQ09NTU9OKSArPSB1c2JpcF9jb21tb25fbW9kLm8KK3VzYmlwX2NvbW1vbl9tb2Qtb2JqcyA6PSB1c2JpcF9jb21tb24ubyB1c2JpcF9ldmVudC5vCisKK29iai0kKENPTkZJR19VU0JfSVBfVkhDSV9IQ0QpICs9IHZoY2ktaGNkLm8KK3ZoY2ktaGNkLW9ianMgOj0gdmhjaV9zeXNmcy5vIHZoY2lfdHgubyB2aGNpX3J4Lm8gdmhjaV9oY2QubworCitvYmotJChDT05GSUdfVVNCX0lQX0hPU1QpICs9IHVzYmlwLm8KK3VzYmlwLW9ianMgOj0gc3R1Yl9kZXYubyBzdHViX21haW4ubyBzdHViX3J4Lm8gc3R1Yl90eC5vCisKK2lmZXEgKCQoQ09ORklHX1VTQl9ERUJVRykseSkKKwlFWFRSQV9DRkxBR1MgKz0gLURERUJVRworZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy91c2JpcC9SRUFETUUgYi9kcml2ZXJzL3N0YWdpbmcvdXNiaXAvUkVBRE1FCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMxMWJlNTcKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvdXNiaXAvUkVBRE1FCkBAIC0wLDAgKzEsNiBAQAorVE9ETzoKKwktIG1vcmUgZGlzY3Vzc2lvbiBhYm91dCB0aGUgcHJvdG9jb2wKKwktIHRlc3RpbmcKKwktIHJldmlldyBvZiB0aGUgdXNlcnNwYWNlIGludGVyZmFjZQorCitQbGVhc2Ugc2VuZCBwYXRjaGVzIGZvciB0aGlzIGNvZGUgdG8gR3JlZyBLcm9haC1IYXJ0bWFuIDxncmVnQGtyb2FoLmNvbT4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy91c2JpcC9zdHViLmggYi9kcml2ZXJzL3N0YWdpbmcvdXNiaXAvc3R1Yi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY1NDFhM2EKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvdXNiaXAvc3R1Yi5oCkBAIC0wLDAgKzEsOTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMtMjAwOCBUYWthaGlybyBIaXJvZnVjaGkKKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorICogVVNBLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvbmV0Lmg+CisKK3N0cnVjdCBzdHViX2RldmljZSB7CisJc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZTsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CisKKwlzdHJ1Y3QgdXNiaXBfZGV2aWNlIHVkOworCV9fdTMyIGRldmlkOworCisJLyoKKwkgKiBzdHViX3ByaXYgcHJlc2VydmVzIHByaXZhdGUgZGF0YSBvZiBlYWNoIHVyYi4KKwkgKiBJdCBpcyBhbGxvY2F0ZWQgYXMgc3R1Yl9wcml2X2NhY2hlIGFuZCBhc3NpZ25lZCB0byB1cmItPmNvbnRleHQuCisJICoKKwkgKiBzdHViX3ByaXYgaXMgYWx3YXlzIGxpbmtlZCB0byBhbnkgb25lIG9mIDMgbGlzdHM7CisJICoJcHJpdl9pbml0OiBsaW5rZWQgdG8gdGhpcyB1bnRpbCB0aGUgY29tbGV0aW9uIG9mIGEgdXJiLgorCSAqCXByaXZfdHggIDogbGlua2VkIHRvIHRoaXMgYWZ0ZXIgdGhlIGNvbXBsZXRpb24gb2YgYSB1cmIuCisJICoJcHJpdl9mcmVlOiBsaW5rZWQgdG8gdGhpcyBhZnRlciB0aGUgc2VuZGluZyBvZiB0aGUgcmVzdWx0LgorCSAqCisJICogQW55IG9mIHRoZXNlIGxpc3Qgb3BlcmF0aW9ucyBzaG91bGQgYmUgbG9ja2VkIGJ5IHByaXZfbG9jay4KKwkgKi8KKwlzcGlubG9ja190IHByaXZfbG9jazsKKwlzdHJ1Y3QgbGlzdF9oZWFkIHByaXZfaW5pdDsKKwlzdHJ1Y3QgbGlzdF9oZWFkIHByaXZfdHg7CisJc3RydWN0IGxpc3RfaGVhZCBwcml2X2ZyZWU7CisKKwkvKiBzZWUgY29tbWVudHMgZm9yIHVubGlua2luZyBpbiBzdHViX3J4LmMgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkIHVubGlua190eDsKKwlzdHJ1Y3QgbGlzdF9oZWFkIHVubGlua19mcmVlOworCisKKwl3YWl0X3F1ZXVlX2hlYWRfdCB0eF93YWl0cTsKK307CisKKy8qIHByaXZhdGUgZGF0YSBpbnRvIHVyYi0+cHJpdiAqLworc3RydWN0IHN0dWJfcHJpdiB7CisJdW5zaWduZWQgbG9uZyBzZXFudW07CisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OworCXN0cnVjdCBzdHViX2RldmljZSAqc2RldjsKKwlzdHJ1Y3QgdXJiICp1cmI7CisKKwlpbnQgdW5saW5raW5nOworfTsKKworc3RydWN0IHN0dWJfdW5saW5rIHsKKwl1bnNpZ25lZCBsb25nIHNlcW51bTsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CisJX191MzIgc3RhdHVzOworfTsKKworCitleHRlcm4gc3RydWN0IGttZW1fY2FjaGUgKnN0dWJfcHJpdl9jYWNoZTsKKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogcHJvdG90eXBlIGRlY2xhcmF0aW9ucyAqLworCisvKiBzdHViX3R4LmMgKi8KK3ZvaWQgc3R1Yl9jb21wbGV0ZShzdHJ1Y3QgdXJiICopOwordm9pZCBzdHViX3R4X2xvb3Aoc3RydWN0IHVzYmlwX3Rhc2sgKik7CisKKy8qIHN0dWJfZGV2LmMgKi8KK2V4dGVybiBzdHJ1Y3QgdXNiX2RyaXZlciBzdHViX2RyaXZlcjsKKworLyogc3R1Yl9yeC5jICovCit2b2lkIHN0dWJfcnhfbG9vcChzdHJ1Y3QgdXNiaXBfdGFzayAqKTsKK3ZvaWQgc3R1Yl9lbnF1ZXVlX3JldF91bmxpbmsoc3RydWN0IHN0dWJfZGV2aWNlICosIF9fdTMyLCBfX3UzMik7CisKKy8qIHN0dWJfbWFpbi5jICovCitpbnQgbWF0Y2hfYnVzaWQoY2hhciAqYnVzaWQpOwordm9pZCBzdHViX2RldmljZV9jbGVhbnVwX3VyYnMoc3RydWN0IHN0dWJfZGV2aWNlICpzZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy91c2JpcC9zdHViX2Rldi5jIGIvZHJpdmVycy9zdGFnaW5nL3VzYmlwL3N0dWJfZGV2LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWU0NTVhMAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy91c2JpcC9zdHViX2Rldi5jCkBAIC0wLDAgKzEsNDgzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDAzLTIwMDggVGFrYWhpcm8gSGlyb2Z1Y2hpCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKyAqIFVTQS4KKyAqLworCisjaW5jbHVkZSAidXNiaXBfY29tbW9uLmgiCisjaW5jbHVkZSAic3R1Yi5oIgorCisKKworc3RhdGljIGludCBzdHViX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UsCisJCQkJY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKTsKK3N0YXRpYyB2b2lkIHN0dWJfZGlzY29ubmVjdChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlKTsKKworCisvKgorICogRGVmaW5lIGRldmljZSBJRHMgaGVyZSBpZiB5b3Ugd2FudCB0byBleHBsaWNpdGx5IGxpbWl0IGV4cG9ydGFibGUgZGV2aWNlcy4KKyAqIEluIHRoZSBtb3N0IGNhc2VzLCB3aWxkIGNhcmQgbWF0Y2hpbmcgd2lsbCBiZSBvayBiZWNhdXNlIGRyaXZlciBiaW5kaW5nIGNhbgorICogYmUgY2hhbmdlZCBkeW5hbWljYWxseSBieSBhIHVzZXJsYW5kIHByb2dyYW0uCisgKi8KK3N0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBzdHViX3RhYmxlW10gPSB7CisjaWYgMAorCS8qIGp1c3QgYW4gZXhhbXBsZSAqLworCXsgVVNCX0RFVklDRSgweDA1YWMsIDB4MDMwMSkgfSwgICAvKiBNYWMgMSBidXR0b24gbW91c2UgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNDMwLCAweDAwMDkpIH0sICAgLyogUGxhdCBIb21lIEtleWJvYXJkICovCisJeyBVU0JfREVWSUNFKDB4MDU5YiwgMHgwMDAxKSB9LCAgIC8qIElvbWVnYSBVU0IgWmlwIDEwMCAqLworCXsgVVNCX0RFVklDRSgweDA0YjMsIDB4NDQyNykgfSwgICAvKiBJQk0gVVNCIENELVJPTSAqLworCXsgVVNCX0RFVklDRSgweDA1YTksIDB4YTUxMSkgfSwgICAvKiBMaWZlVmlldyBVU0IgY2FtICovCisJeyBVU0JfREVWSUNFKDB4NTVhYSwgMHgwMjAxKSB9LCAgIC8qIEltYXRpb24gY2FyZCByZWFkZXIgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNDZkLCAweDA4NzApIH0sICAgLyogUWNhbSBFeHByZXNzKFFWLTMwKSAqLworCXsgVVNCX0RFVklDRSgweDA0YmIsIDB4MDEwMSkgfSwgICAvKiBJTy1EQVRBIEhEIDEyMEdCICovCisJeyBVU0JfREVWSUNFKDB4MDRiYiwgMHgwOTA0KSB9LCAgIC8qIElPLURBVEEgVVNCLUVUL1RYICovCisJeyBVU0JfREVWSUNFKDB4MDRiYiwgMHgwMjAxKSB9LCAgIC8qIElPLURBVEEgVVNCLUVUL1RYICovCisJeyBVU0JfREVWSUNFKDB4MDhiYiwgMHgyNzAyKSB9LCAgIC8qIE9OS1lPIFVTQiBTcGVha2VyICovCisJeyBVU0JfREVWSUNFKDB4MDQ2ZCwgMHgwOGIyKSB9LCAgIC8qIExvZ2ljb29sIFFjYW0gNDAwMCBQcm8gKi8KKyNlbmRpZgorCS8qIG1hZ2ljIGZvciB3aWxkIGNhcmQgKi8KKwl7IC5kcml2ZXJfaW5mbyA9IDEgfSwKKwl7IDAsIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogVGVybWluYXRpbmcgZW50cnkgKi8KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKHVzYiwgc3R1Yl90YWJsZSk7CisKK3N0cnVjdCB1c2JfZHJpdmVyIHN0dWJfZHJpdmVyID0geworCS5uYW1lCQk9ICJ1c2JpcCIsCisJLnByb2JlCQk9IHN0dWJfcHJvYmUsCisJLmRpc2Nvbm5lY3QJPSBzdHViX2Rpc2Nvbm5lY3QsCisJLmlkX3RhYmxlCT0gc3R1Yl90YWJsZSwKK307CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyogRGVmaW5lIHN5c2ZzIGVudHJpZXMgZm9yIGEgdXNiaXAtYm91bmQgZGV2aWNlICovCisKKworLyoKKyAqIHVzYmlwX3N0YXR1cyBzaG93cyBzdGF0dXMgb2YgdXNiaXAgYXMgbG9uZyBhcyB0aGlzIGRyaXZlciBpcyBib3VuZCB0byB0aGUKKyAqIHRhcmdldCBkZXZpY2UuCisgKi8KK3N0YXRpYyBzc2l6ZV90IHNob3dfc3RhdHVzKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkgICBjaGFyICpidWYpCit7CisJc3RydWN0IHN0dWJfZGV2aWNlICpzZGV2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJaW50IHN0YXR1czsKKworCWlmICghc2RldikgeworCQlkZXZfZXJyKGRldiwgInNkZXYgaXMgbnVsbFxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCXNwaW5fbG9jaygmc2Rldi0+dWQubG9jayk7CisJc3RhdHVzID0gc2Rldi0+dWQuc3RhdHVzOworCXNwaW5fdW5sb2NrKCZzZGV2LT51ZC5sb2NrKTsKKworCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiVkXG4iLCBzdGF0dXMpOworfQorc3RhdGljIERFVklDRV9BVFRSKHVzYmlwX3N0YXR1cywgU19JUlVHTywgc2hvd19zdGF0dXMsIE5VTEwpOworCisvKgorICogdXNiaXBfc29ja2ZkIGdldHMgYSBzb2NrZXQgZGVzY3JpcHRvciBvZiBhbiBlc3RhYmxpc2hlZCBUQ1AgY29ubmVjdGlvbiB0aGF0CisgKiBpcyB1c2VkIHRvIHRyYW5zZmVyIHVzYmlwIHJlcXVlc3RzIGJ5IGtlcm5lbCB0aHJlYWRzLiAtMSBpcyBhIG1hZ2ljIG51bWJlcgorICogYnkgd2hpY2ggdXNiaXAgY29ubmVjdGlvbiBpcyBmaW5pc2hlZC4KKyAqLworc3RhdGljIHNzaXplX3Qgc3RvcmVfc29ja2ZkKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJc3RydWN0IHN0dWJfZGV2aWNlICpzZGV2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJaW50IHNvY2tmZCA9IDA7CisJc3RydWN0IHNvY2tldCAqc29ja2V0OworCisJaWYgKCFzZGV2KSB7CisJCWRldl9lcnIoZGV2LCAic2RldiBpcyBudWxsXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJc3NjYW5mKGJ1ZiwgIiVkIiwgJnNvY2tmZCk7CisKKwlpZiAoc29ja2ZkICE9IC0xKSB7CisJCWRldl9pbmZvKGRldiwgInN0dWIgdXBcbiIpOworCisJCXNwaW5fbG9jaygmc2Rldi0+dWQubG9jayk7CisKKwkJaWYgKHNkZXYtPnVkLnN0YXR1cyAhPSBTREVWX1NUX0FWQUlMQUJMRSkgeworCQkJZGV2X2VycihkZXYsICJub3QgcmVhZHlcbiIpOworCQkJc3Bpbl91bmxvY2soJnNkZXYtPnVkLmxvY2spOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKworCQlzb2NrZXQgPSBzb2NrZmRfdG9fc29ja2V0KHNvY2tmZCk7CisJCWlmICghc29ja2V0KSB7CisJCQlzcGluX3VubG9jaygmc2Rldi0+dWQubG9jayk7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCisjaWYgMAorCQlzZXRub2RlbGF5KHNvY2tldCk7CisJCXNldGtlZXBhbGl2ZShzb2NrZXQpOworCQlzZXRyZXVzZShzb2NrZXQpOworI2VuZGlmCisKKwkJc2Rldi0+dWQudGNwX3NvY2tldCA9IHNvY2tldDsKKworCQlzcGluX3VubG9jaygmc2Rldi0+dWQubG9jayk7CisKKwkJdXNiaXBfc3RhcnRfdGhyZWFkcygmc2Rldi0+dWQpOworCisJCXNwaW5fbG9jaygmc2Rldi0+dWQubG9jayk7CisJCXNkZXYtPnVkLnN0YXR1cyA9IFNERVZfU1RfVVNFRDsKKwkJc3Bpbl91bmxvY2soJnNkZXYtPnVkLmxvY2spOworCisJfSBlbHNlIHsKKwkJZGV2X2luZm8oZGV2LCAic3R1YiBkb3duXG4iKTsKKworCQlzcGluX2xvY2soJnNkZXYtPnVkLmxvY2spOworCQlpZiAoc2Rldi0+dWQuc3RhdHVzICE9IFNERVZfU1RfVVNFRCkgeworCQkJc3Bpbl91bmxvY2soJnNkZXYtPnVkLmxvY2spOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwkJc3Bpbl91bmxvY2soJnNkZXYtPnVkLmxvY2spOworCisJCXVzYmlwX2V2ZW50X2FkZCgmc2Rldi0+dWQsIFNERVZfRVZFTlRfRE9XTik7CisJfQorCisJcmV0dXJuIGNvdW50OworfQorc3RhdGljIERFVklDRV9BVFRSKHVzYmlwX3NvY2tmZCwgU19JV1VTUiwgTlVMTCwgc3RvcmVfc29ja2ZkKTsKKworc3RhdGljIGludCBzdHViX2FkZF9maWxlcyhzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJaW50IGVyciA9IDA7CisKKwllcnIgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfdXNiaXBfc3RhdHVzKTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycl9zdGF0dXM7CisKKwllcnIgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfdXNiaXBfc29ja2ZkKTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycl9zb2NrZmQ7CisKKwllcnIgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfdXNiaXBfZGVidWcpOworCWlmIChlcnIpCisJCWdvdG8gZXJyX2RlYnVnOworCisJcmV0dXJuIDA7CisKK2Vycl9kZWJ1ZzoKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfdXNiaXBfc29ja2ZkKTsKKworZXJyX3NvY2tmZDoKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfdXNiaXBfc3RhdHVzKTsKKworZXJyX3N0YXR1czoKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgdm9pZCBzdHViX3JlbW92ZV9maWxlcyhzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX3VzYmlwX3N0YXR1cyk7CisJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX3VzYmlwX3NvY2tmZCk7CisJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX3VzYmlwX2RlYnVnKTsKK30KKworCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qIEV2ZW50IGhhbmRsZXIgZnVuY3Rpb25zIGNhbGxlZCBieSBhbiBldmVudCBoYW5kbGVyIHRocmVhZCAqLworCitzdGF0aWMgdm9pZCBzdHViX3NodXRkb3duX2Nvbm5lY3Rpb24oc3RydWN0IHVzYmlwX2RldmljZSAqdWQpCit7CisJc3RydWN0IHN0dWJfZGV2aWNlICpzZGV2ID0gY29udGFpbmVyX29mKHVkLCBzdHJ1Y3Qgc3R1Yl9kZXZpY2UsIHVkKTsKKworCS8qCisJICogV2hlbiByZW1vdmluZyBhbiBleHBvcnRlZCBkZXZpY2UsIGtlcm5lbCBwYW5pYyBzb21ldGltZXMgb2NjdXJyZWQKKwkgKiBhbmQgdGhlbiBFSVAgd2FzIHNrX3dhaXRfZGF0YSBvZiBzdHViX3J4IHRocmVhZC4gSXMgdGhpcyBiZWNhdXNlCisJICogc2tfd2FpdF9kYXRhIHJldHVybmVkIHRob3VnaCBzdHViX3J4IHRocmVhZCB3YXMgYWxyZWFkeSBmaW5pc2hlZCBieQorCSAqIHN0ZXAgMT8KKwkgKi8KKwlpZiAodWQtPnRjcF9zb2NrZXQpIHsKKwkJdWRiZygic2h1dGRvd24gdGNwX3NvY2tldCAlcFxuIiwgdWQtPnRjcF9zb2NrZXQpOworCQlrZXJuZWxfc29ja19zaHV0ZG93bih1ZC0+dGNwX3NvY2tldCwgU0hVVF9SRFdSKTsKKwl9CisKKwkvKiAxLiBzdG9wIHRocmVhZHMgKi8KKwl1c2JpcF9zdG9wX3RocmVhZHModWQpOworCisJLyogMi4gY2xvc2UgdGhlIHNvY2tldCAqLworCS8qCisJICogdGNwX3NvY2tldCBpcyBmcmVlZCBhZnRlciB0aHJlYWRzIGFyZSBraWxsZWQuCisJICogU28gdXNiaXBfeG1pdCBkbyBub3QgdG91Y2ggTlVMTCBzb2NrZXQuCisJICovCisJaWYgKHVkLT50Y3Bfc29ja2V0KSB7CisJCXNvY2tfcmVsZWFzZSh1ZC0+dGNwX3NvY2tldCk7CisJCXVkLT50Y3Bfc29ja2V0ID0gTlVMTDsKKwl9CisKKwkvKiAzLiBmcmVlIHVzZWQgZGF0YSAqLworCXN0dWJfZGV2aWNlX2NsZWFudXBfdXJicyhzZGV2KTsKKworCS8qIDQuIGZyZWUgc3R1Yl91bmxpbmsgKi8KKwl7CisJCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJCXN0cnVjdCBzdHViX3VubGluayAqdW5saW5rLCAqdG1wOworCisJCXNwaW5fbG9ja19pcnFzYXZlKCZzZGV2LT5wcml2X2xvY2ssIGZsYWdzKTsKKworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUodW5saW5rLCB0bXAsICZzZGV2LT51bmxpbmtfdHgsIGxpc3QpIHsKKwkJCWxpc3RfZGVsKCZ1bmxpbmstPmxpc3QpOworCQkJa2ZyZWUodW5saW5rKTsKKwkJfQorCisJCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSh1bmxpbmssIHRtcCwKKwkJCQkJCSAmc2Rldi0+dW5saW5rX2ZyZWUsIGxpc3QpIHsKKwkJCWxpc3RfZGVsKCZ1bmxpbmstPmxpc3QpOworCQkJa2ZyZWUodW5saW5rKTsKKwkJfQorCisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNkZXYtPnByaXZfbG9jaywgZmxhZ3MpOworCX0KK30KKworc3RhdGljIHZvaWQgc3R1Yl9kZXZpY2VfcmVzZXQoc3RydWN0IHVzYmlwX2RldmljZSAqdWQpCit7CisJc3RydWN0IHN0dWJfZGV2aWNlICpzZGV2ID0gY29udGFpbmVyX29mKHVkLCBzdHJ1Y3Qgc3R1Yl9kZXZpY2UsIHVkKTsKKwlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiA9IGludGVyZmFjZV90b191c2JkZXYoc2Rldi0+aW50ZXJmYWNlKTsKKwlpbnQgcmV0OworCisJdWRiZygiZGV2aWNlIHJlc2V0Iik7CisJcmV0ID0gdXNiX2xvY2tfZGV2aWNlX2Zvcl9yZXNldCh1ZGV2LCBzZGV2LT5pbnRlcmZhY2UpOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoJnVkZXYtPmRldiwgImxvY2sgZm9yIHJlc2V0XG4iKTsKKworCQlzcGluX2xvY2soJnVkLT5sb2NrKTsKKwkJdWQtPnN0YXR1cyA9IFNERVZfU1RfRVJST1I7CisJCXNwaW5fdW5sb2NrKCZ1ZC0+bG9jayk7CisKKwkJcmV0dXJuOworCX0KKworCS8qIHRyeSB0byByZXNldCB0aGUgZGV2aWNlICovCisJcmV0ID0gdXNiX3Jlc2V0X2RldmljZSh1ZGV2KTsKKworCXVzYl91bmxvY2tfZGV2aWNlKHVkZXYpOworCisJc3Bpbl9sb2NrKCZ1ZC0+bG9jayk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKCZ1ZGV2LT5kZXYsICJkZXZpY2UgcmVzZXRcbiIpOworCQl1ZC0+c3RhdHVzID0gU0RFVl9TVF9FUlJPUjsKKworCX0gZWxzZSB7CisJCWRldl9pbmZvKCZ1ZGV2LT5kZXYsICJkZXZpY2UgcmVzZXRcbiIpOworCQl1ZC0+c3RhdHVzID0gU0RFVl9TVF9BVkFJTEFCTEU7CisKKwl9CisJc3Bpbl91bmxvY2soJnVkLT5sb2NrKTsKKworCXJldHVybjsKK30KKworc3RhdGljIHZvaWQgc3R1Yl9kZXZpY2VfdW51c2FibGUoc3RydWN0IHVzYmlwX2RldmljZSAqdWQpCit7CisJc3Bpbl9sb2NrKCZ1ZC0+bG9jayk7CisJdWQtPnN0YXR1cyA9IFNERVZfU1RfRVJST1I7CisJc3Bpbl91bmxvY2soJnVkLT5sb2NrKTsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKioKKyAqIHN0dWJfZGV2aWNlX2FsbG9jIC0gYWxsb2NhdGUgYSBuZXcgc3R1Yl9kZXZpY2Ugc3RydWN0CisgKiBAaW50ZXJmYWNlOiB1c2JfaW50ZXJmYWNlIG9mIGEgbmV3IGRldmljZQorICoKKyAqIEFsbG9jYXRlcyBhbmQgaW5pdGlhbGl6ZXMgYSBuZXcgc3R1Yl9kZXZpY2Ugc3RydWN0LgorICovCitzdGF0aWMgc3RydWN0IHN0dWJfZGV2aWNlICpzdHViX2RldmljZV9hbGxvYyhzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlKQoreworCXN0cnVjdCBzdHViX2RldmljZSAqc2RldjsKKwlpbnQgYnVzbnVtID0gaW50ZXJmYWNlX3RvX2J1c251bShpbnRlcmZhY2UpOworCWludCBkZXZudW0gPSBpbnRlcmZhY2VfdG9fZGV2bnVtKGludGVyZmFjZSk7CisKKwlkZXZfZGJnKCZpbnRlcmZhY2UtPmRldiwgImFsbG9jYXRpbmcgc3R1YiBkZXZpY2UiKTsKKworCS8qIHllcywgaXQncyBhIG5ldyBkZXZpY2UgKi8KKwlzZGV2ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHN0dWJfZGV2aWNlKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFzZGV2KSB7CisJCWRldl9lcnIoJmludGVyZmFjZS0+ZGV2LCAibm8gbWVtb3J5IGZvciBzdHViX2RldmljZVxuIik7CisJCXJldHVybiBOVUxMOworCX0KKworCXNkZXYtPmludGVyZmFjZSA9IGludGVyZmFjZTsKKworCS8qCisJICogZGV2aWQgaXMgZGVmaW5lZCB3aXRoIGRldm51bSB3aGVuIHRoaXMgZHJpdmVyIGlzIGZpcnN0IGFsbG9jYXRlZC4KKwkgKiBkZXZudW0gbWF5IGNoYW5nZSBsYXRlciBpZiBhIGRldmljZSBpcyByZXNldC4gSG93ZXZlciwgZGV2aWQgbmV2ZXIKKwkgKiBjaGFuZ2VzIGR1cmluZyBhIHVzYmlwIGNvbm5lY3Rpb24uCisJICovCisJc2Rldi0+ZGV2aWQgICAgID0gKGJ1c251bSA8PCAxNikgfCBkZXZudW07CisKKwl1c2JpcF90YXNrX2luaXQoJnNkZXYtPnVkLnRjcF9yeCwgInN0dWJfcngiLCBzdHViX3J4X2xvb3ApOworCXVzYmlwX3Rhc2tfaW5pdCgmc2Rldi0+dWQudGNwX3R4LCAic3R1Yl90eCIsIHN0dWJfdHhfbG9vcCk7CisKKwlzZGV2LT51ZC5zaWRlID0gVVNCSVBfU1RVQjsKKwlzZGV2LT51ZC5zdGF0dXMgPSBTREVWX1NUX0FWQUlMQUJMRTsKKwkvKiBzZGV2LT51ZC5sb2NrID0gU1BJTl9MT0NLX1VOTE9DS0VEOyAqLworCXNwaW5fbG9ja19pbml0KCZzZGV2LT51ZC5sb2NrKTsKKwlzZGV2LT51ZC50Y3Bfc29ja2V0ID0gTlVMTDsKKworCUlOSVRfTElTVF9IRUFEKCZzZGV2LT5wcml2X2luaXQpOworCUlOSVRfTElTVF9IRUFEKCZzZGV2LT5wcml2X3R4KTsKKwlJTklUX0xJU1RfSEVBRCgmc2Rldi0+cHJpdl9mcmVlKTsKKwlJTklUX0xJU1RfSEVBRCgmc2Rldi0+dW5saW5rX2ZyZWUpOworCUlOSVRfTElTVF9IRUFEKCZzZGV2LT51bmxpbmtfdHgpOworCS8qIHNkZXYtPnByaXZfbG9jayA9IFNQSU5fTE9DS19VTkxPQ0tFRDsgKi8KKwlzcGluX2xvY2tfaW5pdCgmc2Rldi0+cHJpdl9sb2NrKTsKKworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnNkZXYtPnR4X3dhaXRxKTsKKworCXNkZXYtPnVkLmVoX29wcy5zaHV0ZG93biA9IHN0dWJfc2h1dGRvd25fY29ubmVjdGlvbjsKKwlzZGV2LT51ZC5laF9vcHMucmVzZXQgICAgPSBzdHViX2RldmljZV9yZXNldDsKKwlzZGV2LT51ZC5laF9vcHMudW51c2FibGUgPSBzdHViX2RldmljZV91bnVzYWJsZTsKKworCXVzYmlwX3N0YXJ0X2VoKCZzZGV2LT51ZCk7CisKKwl1ZGJnKCJyZWdpc3RlciBuZXcgaW50ZXJmYWNlXG4iKTsKKwlyZXR1cm4gc2RldjsKK30KKworc3RhdGljIGludCBzdHViX2RldmljZV9mcmVlKHN0cnVjdCBzdHViX2RldmljZSAqc2RldikKK3sKKwlpZiAoIXNkZXYpCisJCXJldHVybiAtRUlOVkFMOworCisJa2ZyZWUoc2Rldik7CisJdWRiZygia2ZyZWUgdWRldiBva1xuIik7CisKKwlyZXR1cm4gMDsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKgorICogSWYgYSB1c2IgZGV2aWNlIGhhcyBtdWx0aXBsZSBhY3RpdmUgaW50ZXJmYWNlcywgdGhpcyBkcml2ZXIgaXMgYm91bmQgdG8gYWxsCisgKiB0aGUgYWN0aXZlIGludGVyZmFjZXMuIEhvd2V2ZXIsIHVzYmlwIGV4cG9ydHMgKmEqIHVzYiBkZXZpY2UgKGkuZS4sIG5vdCAqYW4qCisgKiBhY3RpdmUgaW50ZXJmYWNlKS4gQ3VycmVudGx5LCBhIHVzZXJsYW5kIHByb2dyYW0gbXVzdCBlbnN1cmUgdGhhdCBpdAorICogbG9va3MgYXQgdGhlIHVzYmlwJ3Mgc3lzZnMgZW50cmllcyBvZiBvbmx5IHRoZSBmaXJzdCBhY3RpdmUgaW50ZXJmYWNlLgorICoKKyAqIFRPRE86IHVzZSAic3RydWN0IHVzYl9kZXZpY2VfZHJpdmVyIiB0byBiaW5kIGEgdXNiIGRldmljZS4KKyAqIEhvd2V2ZXIsIGl0IHNlZW1zIGl0IGlzIG5vdCBmdWxseSBzdXBwb3J0ZWQgaW4gbWFpbmxpbmUga2VybmVsIHlldAorICogKDIuNi4xOS4yKS4KKyAqLworc3RhdGljIGludCBzdHViX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UsCisJCSAgICAgIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKK3sKKwlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiA9IGludGVyZmFjZV90b191c2JkZXYoaW50ZXJmYWNlKTsKKwlzdHJ1Y3Qgc3R1Yl9kZXZpY2UgKnNkZXYgPSBOVUxMOworCWNoYXIgKnVkZXZfYnVzaWQgPSBpbnRlcmZhY2UtPmRldi5wYXJlbnQtPmJ1c19pZDsKKwlpbnQgZXJyID0gMDsKKworCWRldl9kYmcoJmludGVyZmFjZS0+ZGV2LCAiRW50ZXJcbiIpOworCisJLyogY2hlY2sgd2Ugc2hvdWxkIGNsYWltIG9yIG5vdCBieSBidXNpZF90YWJsZSAqLworCWlmIChtYXRjaF9idXNpZCh1ZGV2X2J1c2lkKSkgeworCQlkZXZfaW5mbygmaW50ZXJmYWNlLT5kZXYsCisJCQkgInRoaXMgZGV2aWNlICVzIGlzIG5vdCBpbiBtYXRjaF9idXNpZCB0YWJsZS4gc2tpcCFcbiIsCisJCQkgdWRldl9idXNpZCk7CisKKwkJLyoKKwkJICogUmV0dXJuIHZhbHVlIHNob3VsZCBiZSBFTk9ERVYgb3IgRU5PWElPIHRvIGNvbnRpbnVlIHRyeWluZworCQkgKiBvdGhlciBtYXRjaGVkIGRyaXZlcnMgYnkgdGhlIGRyaXZlciBjb3JlLgorCQkgKiBTZWUgZHJpdmVyX3Byb2JlX2RldmljZSgpIGluIGRyaXZlci9iYXNlL2RkLmMKKwkJICovCisJCXJldHVybiAtRU5PREVWOworCX0KKworCWlmICh1ZGV2LT5kZXNjcmlwdG9yLmJEZXZpY2VDbGFzcyA9PSAgVVNCX0NMQVNTX0hVQikgeworCQl1ZGJnKCJ0aGlzIGRldmljZSAlcyBpcyBhIHVzYiBodWIgZGV2aWNlLiBza2lwIVxuIiwKKwkJCQkJCQkJdWRldl9idXNpZCk7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCWlmICghc3RyY21wKHVkZXYtPmJ1cy0+YnVzX25hbWUsICJ2aGNpX2hjZCIpKSB7CisJCXVkYmcoInRoaXMgZGV2aWNlICVzIGlzIGF0dGFjaGVkIG9uIHZoY2lfaGNkLiBza2lwIVxuIiwKKwkJCQkJCQkJdWRldl9idXNpZCk7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCS8qIG9rLiB0aGlzIGlzIG15IGRldmljZS4gKi8KKwlzZGV2ID0gc3R1Yl9kZXZpY2VfYWxsb2MoaW50ZXJmYWNlKTsKKwlpZiAoIXNkZXYpCisJCXJldHVybiAtRU5PTUVNOworCisJZGV2X2luZm8oJmludGVyZmFjZS0+ZGV2LCAiVVNCL0lQIFN0dWI6IHJlZ2lzdGVyIGEgbmV3IGludGVyZmFjZSAiCisJCSAiKGJ1cyAldSBkZXYgJXUgaWZuICV1KVxuIiwgdWRldi0+YnVzLT5idXNudW0sIHVkZXYtPmRldm51bSwKKwkJIGludGVyZmFjZS0+Y3VyX2FsdHNldHRpbmctPmRlc2MuYkludGVyZmFjZU51bWJlcik7CisKKwkvKiBzZXQgcHJpdmF0ZSBkYXRhIHRvIHVzYl9pbnRlcmZhY2UgKi8KKwl1c2Jfc2V0X2ludGZkYXRhKGludGVyZmFjZSwgc2Rldik7CisKKwllcnIgPSBzdHViX2FkZF9maWxlcygmaW50ZXJmYWNlLT5kZXYpOworCWlmIChlcnIpIHsKKwkJZGV2X2VycigmaW50ZXJmYWNlLT5kZXYsICJjcmVhdGUgc3lzZnMgZmlsZXMgZm9yICVzXG4iLAorCQkJdWRldl9idXNpZCk7CisJCXJldHVybiBlcnI7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKworLyoKKyAqIGNhbGxlZCBpbiB1c2JfZGlzY29ubmVjdCgpIG9yIHVzYl9kZXJlZ2lzdGVyKCkKKyAqIGJ1dCBvbmx5IGlmIGFjdGNvbmZpZyhhY3RpdmUgY29uZmlndXJhdGlvbikgZXhpc3RzCisgKi8KK3N0YXRpYyB2b2lkIHN0dWJfZGlzY29ubmVjdChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlKQoreworCXN0cnVjdCBzdHViX2RldmljZSAqc2RldiA9IHVzYl9nZXRfaW50ZmRhdGEoaW50ZXJmYWNlKTsKKworCXVkYmcoIkVudGVyXG4iKTsKKworCS8qIGdldCBzdHViX2RldmljZSAqLworCWlmICghc2RldikgeworCQllcnIoIiBjb3VsZCBub3QgZ2V0IGRldmljZSBmcm9tIGludGVmYWNlIGRhdGEiKTsKKwkJLyogQlVHKCk7ICovCisJCXJldHVybjsKKwl9CisKKwl1c2Jfc2V0X2ludGZkYXRhKGludGVyZmFjZSwgTlVMTCk7CisKKworCS8qCisJICogTk9URToKKwkgKiByeC90eCB0aHJlYWRzIGFyZSBpbnZva2VkIGZvciBlYWNoIHVzYl9kZXZpY2UuCisJICovCisJc3R1Yl9yZW1vdmVfZmlsZXMoJmludGVyZmFjZS0+ZGV2KTsKKworCS8qIDEuIHNodXRkb3duIHRoZSBjdXJyZW50IGNvbm5lY3Rpb24gKi8KKwl1c2JpcF9ldmVudF9hZGQoJnNkZXYtPnVkLCBTREVWX0VWRU5UX1JFTU9WRUQpOworCisJLyogMi4gd2FpdCBmb3IgdGhlIHN0b3Agb2YgdGhlIGV2ZW50IGhhbmRsZXIgKi8KKwl1c2JpcF9zdG9wX2VoKCZzZGV2LT51ZCk7CisKKwkvKiAzLiBmcmVlIHNkZXYgKi8KKwlzdHViX2RldmljZV9mcmVlKHNkZXYpOworCisKKwl1ZGJnKCJieWVcbiIpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3VzYmlwL3N0dWJfbWFpbi5jIGIvZHJpdmVycy9zdGFnaW5nL3VzYmlwL3N0dWJfbWFpbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2NjVkN2YKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvdXNiaXAvc3R1Yl9tYWluLmMKQEAgLTAsMCArMSwzMDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMtMjAwOCBUYWthaGlybyBIaXJvZnVjaGkKKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorICogVVNBLgorICovCisKKworI2luY2x1ZGUgInVzYmlwX2NvbW1vbi5oIgorI2luY2x1ZGUgInN0dWIuaCIKKworLyogVmVyc2lvbiBJbmZvcm1hdGlvbiAqLworI2RlZmluZSBEUklWRVJfVkVSU0lPTiAiMS4wIgorI2RlZmluZSBEUklWRVJfQVVUSE9SICJUYWthaGlybyBIaXJvZnVjaGkiCisjZGVmaW5lIERSSVZFUl9ERVNDICJTdHViIERyaXZlciBmb3IgVVNCL0lQIgorCisvKiBzdHViX3ByaXYgaXMgYWxsb2NhdGVkIGZyb20gc3R1Yl9wcml2X2NhY2hlICovCitzdHJ1Y3Qga21lbV9jYWNoZSAqc3R1Yl9wcml2X2NhY2hlOworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiBEZWZpbmUgc3lzZnMgZW50cmllcyBmb3IgdGhlIHVzYmlwIGRyaXZlciAqLworCisKKy8qCisgKiBidXNpZF90YWJsZXMgZGVmaW5lcyBtYXRjaGluZyBidXNpZHMgdGhhdCB1c2JpcCBjYW4gZ3JhYi4gQSB1c2VyIGNhbiBjaGFuZ2UKKyAqIGR5bmFtaWNhbGx5IHdoYXQgZGV2aWNlIGlzIGxvY2FsbHkgdXNlZCBhbmQgd2hhdCBkZXZpY2UgaXMgZXhwb3J0ZWQgdG8gYQorICogcmVtb3RlIGhvc3QuCisgKi8KKyNkZWZpbmUgTUFYX0JVU0lEIDE2CitzdGF0aWMgY2hhciBidXNpZF90YWJsZVtNQVhfQlVTSURdW0JVU19JRF9TSVpFXTsKK3N0YXRpYyBzcGlubG9ja190IGJ1c2lkX3RhYmxlX2xvY2s7CisKKworaW50IG1hdGNoX2J1c2lkKGNoYXIgKmJ1c2lkKQoreworCWludCBpOworCisJc3Bpbl9sb2NrKCZidXNpZF90YWJsZV9sb2NrKTsKKworCWZvciAoaSA9IDA7IGkgPCBNQVhfQlVTSUQ7IGkrKykKKwkJaWYgKGJ1c2lkX3RhYmxlW2ldWzBdKQorCQkJaWYgKCFzdHJuY21wKGJ1c2lkX3RhYmxlW2ldLCBidXNpZCwgQlVTX0lEX1NJWkUpKSB7CisJCQkJLyogYWxyZWFkeSByZWdpc3RlcmQgKi8KKwkJCQlzcGluX3VubG9jaygmYnVzaWRfdGFibGVfbG9jayk7CisJCQkJcmV0dXJuIDA7CisJCQl9CisKKwlzcGluX3VubG9jaygmYnVzaWRfdGFibGVfbG9jayk7CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIHNzaXplX3Qgc2hvd19tYXRjaF9idXNpZChzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqZHJ2LCBjaGFyICpidWYpCit7CisJaW50IGk7CisJY2hhciAqb3V0ID0gYnVmOworCisJc3Bpbl9sb2NrKCZidXNpZF90YWJsZV9sb2NrKTsKKworCWZvciAoaSA9IDA7IGkgPCBNQVhfQlVTSUQ7IGkrKykKKwkJaWYgKGJ1c2lkX3RhYmxlW2ldWzBdKQorCQkJb3V0ICs9IHNwcmludGYob3V0LCAiJXMgIiwgYnVzaWRfdGFibGVbaV0pOworCisJc3Bpbl91bmxvY2soJmJ1c2lkX3RhYmxlX2xvY2spOworCisJb3V0ICs9IHNwcmludGYob3V0LCAiXG4iKTsKKworCXJldHVybiBvdXQgLSBidWY7Cit9CisKK3N0YXRpYyBpbnQgYWRkX21hdGNoX2J1c2lkKGNoYXIgKmJ1c2lkKQoreworCWludCBpOworCisJaWYgKCFtYXRjaF9idXNpZChidXNpZCkpCisJCXJldHVybiAwOworCisJc3Bpbl9sb2NrKCZidXNpZF90YWJsZV9sb2NrKTsKKworCWZvciAoaSA9IDA7IGkgPCBNQVhfQlVTSUQ7IGkrKykKKwkJaWYgKCFidXNpZF90YWJsZVtpXVswXSkgeworCQkJc3RybmNweShidXNpZF90YWJsZVtpXSwgYnVzaWQsIEJVU19JRF9TSVpFKTsKKwkJCXNwaW5fdW5sb2NrKCZidXNpZF90YWJsZV9sb2NrKTsKKwkJCXJldHVybiAwOworCQl9CisKKwlzcGluX3VubG9jaygmYnVzaWRfdGFibGVfbG9jayk7CisKKwlyZXR1cm4gLTE7Cit9CisKK3N0YXRpYyBpbnQgZGVsX21hdGNoX2J1c2lkKGNoYXIgKmJ1c2lkKQoreworCWludCBpOworCisJc3Bpbl9sb2NrKCZidXNpZF90YWJsZV9sb2NrKTsKKworCWZvciAoaSA9IDA7IGkgPCBNQVhfQlVTSUQ7IGkrKykKKwkJaWYgKCFzdHJuY21wKGJ1c2lkX3RhYmxlW2ldLCBidXNpZCwgQlVTX0lEX1NJWkUpKSB7CisJCQkvKiBmb3VuZCAqLworCQkJbWVtc2V0KGJ1c2lkX3RhYmxlW2ldLCAwLCBCVVNfSURfU0laRSk7CisJCQlzcGluX3VubG9jaygmYnVzaWRfdGFibGVfbG9jayk7CisJCQlyZXR1cm4gMDsKKwkJfQorCisJc3Bpbl91bmxvY2soJmJ1c2lkX3RhYmxlX2xvY2spOworCisJcmV0dXJuIC0xOworfQorCitzdGF0aWMgc3NpemVfdCBzdG9yZV9tYXRjaF9idXNpZChzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqZGV2LCBjb25zdCBjaGFyICpidWYsCisJCXNpemVfdCBjb3VudCkKK3sKKwlpbnQgbGVuOworCWNoYXIgYnVzaWRbQlVTX0lEX1NJWkVdOworCisJaWYgKGNvdW50IDwgNSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKiBzdHJubGVuKCkgZG9lcyBub3QgaW5jbHVkZSBcMCAqLworCWxlbiA9IHN0cm5sZW4oYnVmICsgNCwgQlVTX0lEX1NJWkUpOworCisJLyogYnVzaWQgbmVlZHMgdG8gaW5jbHVkZSBcMCB0ZXJtaW5hdGlvbiAqLworCWlmICghKGxlbiA8IEJVU19JRF9TSVpFKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlzdHJuY3B5KGJ1c2lkLCBidWYgKyA0LCBCVVNfSURfU0laRSk7CisKKworCWlmICghc3RybmNtcChidWYsICJhZGQgIiwgNCkpIHsKKwkJaWYgKGFkZF9tYXRjaF9idXNpZChidXNpZCkgPCAwKQorCQkJcmV0dXJuIC1FTk9NRU07CisJCWVsc2UgeworCQkJdWRiZygiYWRkIGJ1c2lkICVzXG4iLCBidXNpZCk7CisJCQlyZXR1cm4gY291bnQ7CisJCX0KKwl9IGVsc2UgaWYgKCFzdHJuY21wKGJ1ZiwgImRlbCAiLCA0KSkgeworCQlpZiAoZGVsX21hdGNoX2J1c2lkKGJ1c2lkKSA8IDApCisJCQlyZXR1cm4gLUVOT0RFVjsKKwkJZWxzZSB7CisJCQl1ZGJnKCJkZWwgYnVzaWQgJXNcbiIsIGJ1c2lkKTsKKwkJCXJldHVybiBjb3VudDsKKwkJfQorCX0gZWxzZQorCQlyZXR1cm4gLUVJTlZBTDsKK30KKworc3RhdGljIERSSVZFUl9BVFRSKG1hdGNoX2J1c2lkLCBTX0lSVVNSfFNfSVdVU1IsIHNob3dfbWF0Y2hfYnVzaWQsCisJCQkJCQkJc3RvcmVfbWF0Y2hfYnVzaWQpOworCisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyogQ2xlYW51cCBmdW5jdGlvbnMgdXNlZCB0byBmcmVlIHByaXZhdGUgZGF0YSAqLworCitzdGF0aWMgc3RydWN0IHN0dWJfcHJpdiAqc3R1Yl9wcml2X3BvcF9mcm9tX2xpc3RoZWFkKHN0cnVjdCBsaXN0X2hlYWQgKmxpc3RoZWFkKQoreworCXN0cnVjdCBzdHViX3ByaXYgKnByaXYsICp0bXA7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocHJpdiwgdG1wLCBsaXN0aGVhZCwgbGlzdCkgeworCQlsaXN0X2RlbCgmcHJpdi0+bGlzdCk7CisJCXJldHVybiBwcml2OworCX0KKworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgc3RydWN0IHN0dWJfcHJpdiAqc3R1Yl9wcml2X3BvcChzdHJ1Y3Qgc3R1Yl9kZXZpY2UgKnNkZXYpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3Qgc3R1Yl9wcml2ICpwcml2OworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnNkZXYtPnByaXZfbG9jaywgZmxhZ3MpOworCisJcHJpdiA9IHN0dWJfcHJpdl9wb3BfZnJvbV9saXN0aGVhZCgmc2Rldi0+cHJpdl9pbml0KTsKKwlpZiAocHJpdikgeworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzZGV2LT5wcml2X2xvY2ssIGZsYWdzKTsKKwkJcmV0dXJuIHByaXY7CisJfQorCisJcHJpdiA9IHN0dWJfcHJpdl9wb3BfZnJvbV9saXN0aGVhZCgmc2Rldi0+cHJpdl90eCk7CisJaWYgKHByaXYpIHsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2Rldi0+cHJpdl9sb2NrLCBmbGFncyk7CisJCXJldHVybiBwcml2OworCX0KKworCXByaXYgPSBzdHViX3ByaXZfcG9wX2Zyb21fbGlzdGhlYWQoJnNkZXYtPnByaXZfZnJlZSk7CisJaWYgKHByaXYpIHsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2Rldi0+cHJpdl9sb2NrLCBmbGFncyk7CisJCXJldHVybiBwcml2OworCX0KKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNkZXYtPnByaXZfbG9jaywgZmxhZ3MpOworCXJldHVybiBOVUxMOworfQorCit2b2lkIHN0dWJfZGV2aWNlX2NsZWFudXBfdXJicyhzdHJ1Y3Qgc3R1Yl9kZXZpY2UgKnNkZXYpCit7CisJc3RydWN0IHN0dWJfcHJpdiAqcHJpdjsKKworCXVkYmcoImZyZWUgc2RldiAlcFxuIiwgc2Rldik7CisKKwl3aGlsZSAoKHByaXYgPSBzdHViX3ByaXZfcG9wKHNkZXYpKSkgeworCQlzdHJ1Y3QgdXJiICp1cmIgPSBwcml2LT51cmI7CisKKwkJdWRiZygiICAgZnJlZSB1cmIgJXBcbiIsIHVyYik7CisJCXVzYl9raWxsX3VyYih1cmIpOworCisJCWttZW1fY2FjaGVfZnJlZShzdHViX3ByaXZfY2FjaGUsIHByaXYpOworCisJCWlmICh1cmItPnRyYW5zZmVyX2J1ZmZlciAhPSBOVUxMKQorCQkJa2ZyZWUodXJiLT50cmFuc2Zlcl9idWZmZXIpOworCisJCWlmICh1cmItPnNldHVwX3BhY2tldCAhPSBOVUxMKQorCQkJa2ZyZWUodXJiLT5zZXR1cF9wYWNrZXQpOworCisJCXVzYl9mcmVlX3VyYih1cmIpOworCX0KK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW50IF9faW5pdCB1c2Jfc3R1Yl9pbml0KHZvaWQpCit7CisJaW50IHJldDsKKworCXN0dWJfcHJpdl9jYWNoZSA9IGttZW1fY2FjaGVfY3JlYXRlKCJzdHViX3ByaXYiLAorCQkJCQkgICAgc2l6ZW9mKHN0cnVjdCBzdHViX3ByaXYpLCAwLAorCQkJCQkgICAgU0xBQl9IV0NBQ0hFX0FMSUdOLCBOVUxMKTsKKworCWlmICghc3R1Yl9wcml2X2NhY2hlKSB7CisJCXByaW50ayhLRVJOX0VSUiBLQlVJTERfTU9ETkFNRQorCQkgICAgICAgIjogY3JlYXRlIHN0dWJfcHJpdl9jYWNoZSBlcnJvclxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCXJldCA9IHVzYl9yZWdpc3Rlcigmc3R1Yl9kcml2ZXIpOworCWlmIChyZXQpIHsKKwkJcHJpbnRrKEtFUk5fRVJSIEtCVUlMRF9NT0ROQU1FICI6IHVzYl9yZWdpc3RlciBmYWlsZWQgJWRcbiIsCisJCSAgICAgICByZXQpOworCQlnb3RvIGVycm9yX3VzYl9yZWdpc3RlcjsKKwl9CisKKwlwcmludGsoS0VSTl9JTkZPIEtCVUlMRF9NT0ROQU1FICI6IgorCSAgICAgICBEUklWRVJfREVTQyAiOiIgRFJJVkVSX1ZFUlNJT04gIlxuIik7CisKKwltZW1zZXQoYnVzaWRfdGFibGUsIDAsIHNpemVvZihidXNpZF90YWJsZSkpOworCXNwaW5fbG9ja19pbml0KCZidXNpZF90YWJsZV9sb2NrKTsKKworCXJldCA9IGRyaXZlcl9jcmVhdGVfZmlsZSgmc3R1Yl9kcml2ZXIuZHJ2d3JhcC5kcml2ZXIsCisJCQkJICZkcml2ZXJfYXR0cl9tYXRjaF9idXNpZCk7CisKKwlpZiAocmV0KSB7CisJCXByaW50ayhLRVJOX0VSUiBLQlVJTERfTU9ETkFNRSAiOiBjcmVhdGUgZHJpdmVyIHN5c2ZzXG4iKTsKKwkJZ290byBlcnJvcl9jcmVhdGVfZmlsZTsKKwl9CisKKwlyZXR1cm4gcmV0OworZXJyb3JfY3JlYXRlX2ZpbGU6CisJdXNiX2RlcmVnaXN0ZXIoJnN0dWJfZHJpdmVyKTsKK2Vycm9yX3VzYl9yZWdpc3RlcjoKKwlrbWVtX2NhY2hlX2Rlc3Ryb3koc3R1Yl9wcml2X2NhY2hlKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgdXNiX3N0dWJfZXhpdCh2b2lkKQoreworCWRyaXZlcl9yZW1vdmVfZmlsZSgmc3R1Yl9kcml2ZXIuZHJ2d3JhcC5kcml2ZXIsCisJCQkgICAmZHJpdmVyX2F0dHJfbWF0Y2hfYnVzaWQpOworCisJLyoKKwkgKiBkZXJlZ2lzdGVyKCkgY2FsbHMgc3R1Yl9kaXNjb25uZWN0KCkgZm9yIGFsbCBkZXZpY2VzLiBEZXZpY2UKKwkgKiBzcGVjaWZpYyBkYXRhIGlzIGNsZWFyZWQgaW4gc3R1Yl9kaXNjb25uZWN0KCkuCisJICovCisJdXNiX2RlcmVnaXN0ZXIoJnN0dWJfZHJpdmVyKTsKKworCWttZW1fY2FjaGVfZGVzdHJveShzdHViX3ByaXZfY2FjaGUpOworfQorCittb2R1bGVfaW5pdCh1c2Jfc3R1Yl9pbml0KTsKK21vZHVsZV9leGl0KHVzYl9zdHViX2V4aXQpOworCitNT0RVTEVfQVVUSE9SKERSSVZFUl9BVVRIT1IpOworTU9EVUxFX0RFU0NSSVBUSU9OKERSSVZFUl9ERVNDKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy91c2JpcC9zdHViX3J4LmMgYi9kcml2ZXJzL3N0YWdpbmcvdXNiaXAvc3R1Yl9yeC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM2Y2U4OTgKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvdXNiaXAvc3R1Yl9yeC5jCkBAIC0wLDAgKzEsNjE1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDAzLTIwMDggVGFrYWhpcm8gSGlyb2Z1Y2hpCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKyAqIFVTQS4KKyAqLworCisjaW5jbHVkZSAidXNiaXBfY29tbW9uLmgiCisjaW5jbHVkZSAic3R1Yi5oIgorI2luY2x1ZGUgIi4uLy4uL3VzYi9jb3JlL2hjZC5oIgorCisKK3N0YXRpYyBpbnQgaXNfY2xlYXJfaGFsdF9jbWQoc3RydWN0IHVyYiAqdXJiKQoreworCXN0cnVjdCB1c2JfY3RybHJlcXVlc3QgKnJlcTsKKworCXJlcSA9IChzdHJ1Y3QgdXNiX2N0cmxyZXF1ZXN0ICopIHVyYi0+c2V0dXBfcGFja2V0OworCisJIHJldHVybiAocmVxLT5iUmVxdWVzdCA9PSBVU0JfUkVRX0NMRUFSX0ZFQVRVUkUpICYmCisJCSAocmVxLT5iUmVxdWVzdFR5cGUgPT0gVVNCX1JFQ0lQX0VORFBPSU5UKSAmJgorCQkgKHJlcS0+d1ZhbHVlID09IFVTQl9FTkRQT0lOVF9IQUxUKTsKK30KKworc3RhdGljIGludCBpc19zZXRfaW50ZXJmYWNlX2NtZChzdHJ1Y3QgdXJiICp1cmIpCit7CisJc3RydWN0IHVzYl9jdHJscmVxdWVzdCAqcmVxOworCisJcmVxID0gKHN0cnVjdCB1c2JfY3RybHJlcXVlc3QgKikgdXJiLT5zZXR1cF9wYWNrZXQ7CisKKwlyZXR1cm4gKHJlcS0+YlJlcXVlc3QgPT0gVVNCX1JFUV9TRVRfSU5URVJGQUNFKSAmJgorCQkgICAocmVxLT5iUmVxdWVzdFR5cGUgPT0gVVNCX1JFQ0lQX0lOVEVSRkFDRSk7Cit9CisKK3N0YXRpYyBpbnQgaXNfc2V0X2NvbmZpZ3VyYXRpb25fY21kKHN0cnVjdCB1cmIgKnVyYikKK3sKKwlzdHJ1Y3QgdXNiX2N0cmxyZXF1ZXN0ICpyZXE7CisKKwlyZXEgPSAoc3RydWN0IHVzYl9jdHJscmVxdWVzdCAqKSB1cmItPnNldHVwX3BhY2tldDsKKworCXJldHVybiAocmVxLT5iUmVxdWVzdCA9PSBVU0JfUkVRX1NFVF9DT05GSUdVUkFUSU9OKSAmJgorCQkgICAocmVxLT5iUmVxdWVzdFR5cGUgPT0gVVNCX1JFQ0lQX0RFVklDRSk7Cit9CisKK3N0YXRpYyBpbnQgaXNfcmVzZXRfZGV2aWNlX2NtZChzdHJ1Y3QgdXJiICp1cmIpCit7CisJc3RydWN0IHVzYl9jdHJscmVxdWVzdCAqcmVxOworCV9fdTE2IHZhbHVlOworCV9fdTE2IGluZGV4OworCisJcmVxID0gKHN0cnVjdCB1c2JfY3RybHJlcXVlc3QgKikgdXJiLT5zZXR1cF9wYWNrZXQ7CisJdmFsdWUgPSBsZTE2X3RvX2NwdShyZXEtPndWYWx1ZSk7CisJaW5kZXggPSBsZTE2X3RvX2NwdShyZXEtPndJbmRleCk7CisKKwlpZiAoKHJlcS0+YlJlcXVlc3QgPT0gVVNCX1JFUV9TRVRfRkVBVFVSRSkgJiYKKwkJCShyZXEtPmJSZXF1ZXN0VHlwZSA9PSBVU0JfUlRfUE9SVCkgJiYKKwkJCSh2YWx1ZSA9IFVTQl9QT1JUX0ZFQVRfUkVTRVQpKSB7CisJCWRiZ19zdHViX3J4KCJyZXNldF9kZXZpY2VfY21kLCBwb3J0ICV1XG4iLCBpbmRleCk7CisJCXJldHVybiAxOworCX0gZWxzZQorCQlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB0d2Vha19jbGVhcl9oYWx0X2NtZChzdHJ1Y3QgdXJiICp1cmIpCit7CisJc3RydWN0IHVzYl9jdHJscmVxdWVzdCAqcmVxOworCWludCB0YXJnZXRfZW5kcDsKKwlpbnQgdGFyZ2V0X2RpcjsKKwlpbnQgdGFyZ2V0X3BpcGU7CisJaW50IHJldDsKKworCXJlcSA9IChzdHJ1Y3QgdXNiX2N0cmxyZXF1ZXN0ICopIHVyYi0+c2V0dXBfcGFja2V0OworCisJLyoKKwkgKiBUaGUgc3RhbGxlZCBlbmRwb2ludCBpcyBzcGVjaWZpZWQgaW4gdGhlIHdJbmRleCB2YWx1ZS4gVGhlIGVuZHBvaW50CisJICogb2YgdGhlIHVyYiBpcyB0aGUgdGFyZ2V0IG9mIHRoaXMgY2xlYXJfaGFsdCByZXF1ZXN0IChpLmUuLCBjb250cm9sCisJICogZW5kcG9pbnQpLgorCSAqLworCXRhcmdldF9lbmRwID0gbGUxNl90b19jcHUocmVxLT53SW5kZXgpICYgMHgwMDBmOworCisJLyogdGhlIHN0YWxsZWQgZW5kcG9pbnQgZGlyZWN0aW9uIGlzIElOIG9yIE9VVD8uIFVTQl9ESVJfSU4gaXMgMHg4MC4gICovCisJdGFyZ2V0X2RpciA9IGxlMTZfdG9fY3B1KHJlcS0+d0luZGV4KSAmIDB4MDA4MDsKKworCWlmICh0YXJnZXRfZGlyKQorCQl0YXJnZXRfcGlwZSA9IHVzYl9yY3ZjdHJscGlwZSh1cmItPmRldiwgdGFyZ2V0X2VuZHApOworCWVsc2UKKwkJdGFyZ2V0X3BpcGUgPSB1c2Jfc25kY3RybHBpcGUodXJiLT5kZXYsIHRhcmdldF9lbmRwKTsKKworCXJldCA9IHVzYl9jbGVhcl9oYWx0KHVyYi0+ZGV2LCB0YXJnZXRfcGlwZSk7CisJaWYgKHJldCA8IDApCisJCXVpbmZvKCJjbGVhcl9oYWx0IGVycm9yOiBkZXZudW0gJWQgZW5kcCAlZCwgJWRcbiIsCisJCQkJdXJiLT5kZXYtPmRldm51bSwgdGFyZ2V0X2VuZHAsIHJldCk7CisJZWxzZQorCQl1aW5mbygiY2xlYXJfaGFsdCBkb25lOiBkZXZudW0gJWQgZW5kcCAlZFxuIiwKKwkJCQl1cmItPmRldi0+ZGV2bnVtLCB0YXJnZXRfZW5kcCk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHR3ZWFrX3NldF9pbnRlcmZhY2VfY21kKHN0cnVjdCB1cmIgKnVyYikKK3sKKwlzdHJ1Y3QgdXNiX2N0cmxyZXF1ZXN0ICpyZXE7CisJX191MTYgYWx0ZXJuYXRlOworCV9fdTE2IGludGVyZmFjZTsKKwlpbnQgcmV0OworCisJcmVxID0gKHN0cnVjdCB1c2JfY3RybHJlcXVlc3QgKikgdXJiLT5zZXR1cF9wYWNrZXQ7CisJYWx0ZXJuYXRlID0gbGUxNl90b19jcHUocmVxLT53VmFsdWUpOworCWludGVyZmFjZSA9IGxlMTZfdG9fY3B1KHJlcS0+d0luZGV4KTsKKworCWRiZ19zdHViX3J4KCJzZXRfaW50ZXJmYWNlOiBpbmYgJXUgYWx0ICV1XG4iLCBpbnRlcmZhY2UsIGFsdGVybmF0ZSk7CisKKwlyZXQgPSB1c2Jfc2V0X2ludGVyZmFjZSh1cmItPmRldiwgaW50ZXJmYWNlLCBhbHRlcm5hdGUpOworCWlmIChyZXQgPCAwKQorCQl1aW5mbygic2V0X2ludGVyZmFjZSBlcnJvcjogaW5mICV1IGFsdCAldSwgJWRcbiIsCisJCQkJaW50ZXJmYWNlLCBhbHRlcm5hdGUsIHJldCk7CisJZWxzZQorCQl1aW5mbygic2V0X2ludGVyZmFjZSBkb25lOiBpbmYgJXUgYWx0ICV1XG4iLAorCQkJCQkJCWludGVyZmFjZSwKKwkJCQkJCQlhbHRlcm5hdGUpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCB0d2Vha19zZXRfY29uZmlndXJhdGlvbl9jbWQoc3RydWN0IHVyYiAqdXJiKQoreworCXN0cnVjdCB1c2JfY3RybHJlcXVlc3QgKnJlcTsKKwlfX3UxNiBjb25maWc7CisKKwlyZXEgPSAoc3RydWN0IHVzYl9jdHJscmVxdWVzdCAqKSB1cmItPnNldHVwX3BhY2tldDsKKwljb25maWcgPSBsZTE2X3RvX2NwdShyZXEtPndWYWx1ZSk7CisKKwkvKgorCSAqIEkgaGF2ZSBuZXZlciBzZWVuIGEgbXVsdGktY29uZmlnIGRldmljZS4gVmVyeSByYXJlLgorCSAqIEZvciBtb3N0IGRldmljZXMsIHRoaXMgd2lsbCBiZSBjYWxsZWQgdG8gY2hvb3NlIGEgZGVmYXVsdAorCSAqIGNvbmZpZ3VyYXRpb24gb25seSBvbmNlIGluIGFuIGluaXRpYWxpemF0aW9uIHBoYXNlLgorCSAqCisJICogc2V0X2NvbmZpZ3VyYXRpb24gbWF5IGNoYW5nZSBhIGRldmljZSBjb25maWd1cmF0aW9uIGFuZCBpdHMgZGV2aWNlCisJICogZHJpdmVycyB3aWxsIGJlIHVuYm91bmQgYW5kIGFzc2lnbmVkIGZvciBhIG5ldyBkZXZpY2UgY29uZmlndXJhdGlvbi4KKwkgKiBUaGlzIG1lYW5zIHRoaXMgdXNiaXAgZHJpdmVyIHdpbGwgYmUgYWxzbyB1bmJvdW5kIHdoZW4gY2FsbGVkLCB0aGVuCisJICogZXZlbnR1YWxseSByZWFzc2lnbmVkIHRvIHRoZSBkZXZpY2UgYXMgZmFyIGFzIGRyaXZlciBtYXRjaGluZworCSAqIGNvbmRpdGlvbiBpcyBrZXB0LgorCSAqCisJICogVW5mb3J0dW5hdGVsbHksIGFuIGV4aXN0aW5nIHVzYmlwIGNvbm5lY3Rpb24gd2lsbCBiZSBkcm9wcGVkCisJICogZHVlIHRvIHRoaXMgZHJpdmVyIHVuYmluZGluZy4gU28sIHNraXAgaGVyZS4KKwkgKiBBIHVzZXIgbWF5IG5lZWQgdG8gc2V0IGEgc3BlY2lhbCBjb25maWd1cmF0aW9uIHZhbHVlIGJlZm9yZQorCSAqIGV4cG9ydGluZyB0aGUgZGV2aWNlLgorCSAqLworCXVpbmZvKCJzZXRfY29uZmlndXJhdGlvbiAoJWQpIHRvICVzXG4iLCBjb25maWcsIHVyYi0+ZGV2LT5kZXYuYnVzX2lkKTsKKwl1aW5mbygiYnV0LCBza2lwIVxuIik7CisKKwlyZXR1cm4gMDsKKwkvKiByZXR1cm4gdXNiX2RyaXZlcl9zZXRfY29uZmlndXJhdGlvbih1cmItPmRldiwgY29uZmlnKTsgKi8KK30KKworc3RhdGljIGludCB0d2Vha19yZXNldF9kZXZpY2VfY21kKHN0cnVjdCB1cmIgKnVyYikKK3sKKwlzdHJ1Y3QgdXNiX2N0cmxyZXF1ZXN0ICpyZXE7CisJX191MTYgdmFsdWU7CisJX191MTYgaW5kZXg7CisJaW50IHJldDsKKworCXJlcSA9IChzdHJ1Y3QgdXNiX2N0cmxyZXF1ZXN0ICopIHVyYi0+c2V0dXBfcGFja2V0OworCXZhbHVlID0gbGUxNl90b19jcHUocmVxLT53VmFsdWUpOworCWluZGV4ID0gbGUxNl90b19jcHUocmVxLT53SW5kZXgpOworCisJdWluZm8oInJlc2V0X2RldmljZSAocG9ydCAlZCkgdG8gJXNcbiIsIGluZGV4LCB1cmItPmRldi0+ZGV2LmJ1c19pZCk7CisKKwkvKiBhbGwgaW50ZXJmYWNlcyBzaG91bGQgYmUgb3duZWQgYnkgdXNiaXAgZHJpdmVyLCBzbyBqdXN0IHJlc2V0IGl0LiAgKi8KKwlyZXQgPSB1c2JfbG9ja19kZXZpY2VfZm9yX3Jlc2V0KHVyYi0+ZGV2LCBOVUxMKTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKCZ1cmItPmRldi0+ZGV2LCAibG9jayBmb3IgcmVzZXRcbiIpOworCQlyZXR1cm4gcmV0OworCX0KKworCS8qIHRyeSB0byByZXNldCB0aGUgZGV2aWNlICovCisJcmV0ID0gdXNiX3Jlc2V0X2RldmljZSh1cmItPmRldik7CisJaWYgKHJldCA8IDApCisJCWRldl9lcnIoJnVyYi0+ZGV2LT5kZXYsICJkZXZpY2UgcmVzZXRcbiIpOworCisJdXNiX3VubG9ja19kZXZpY2UodXJiLT5kZXYpOworCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIGNsZWFyX2hhbHQsIHNldF9pbnRlcmZhY2UsIGFuZCBzZXRfY29uZmlndXJhdGlvbiByZXF1aXJlIHNwZWNpYWwgdHJpY2tzLgorICovCitzdGF0aWMgdm9pZCB0d2Vha19zcGVjaWFsX3JlcXVlc3RzKHN0cnVjdCB1cmIgKnVyYikKK3sKKwlpZiAoIXVyYiB8fCAhdXJiLT5zZXR1cF9wYWNrZXQpCisJCXJldHVybjsKKworCWlmICh1c2JfcGlwZXR5cGUodXJiLT5waXBlKSAhPSBQSVBFX0NPTlRST0wpCisJCXJldHVybjsKKworCWlmIChpc19jbGVhcl9oYWx0X2NtZCh1cmIpKQorCQkvKiB0d2VhayBjbGVhcl9oYWx0ICovCisJCSB0d2Vha19jbGVhcl9oYWx0X2NtZCh1cmIpOworCisJZWxzZSBpZiAoaXNfc2V0X2ludGVyZmFjZV9jbWQodXJiKSkKKwkJLyogdHdlYWsgc2V0X2ludGVyZmFjZSAqLworCQl0d2Vha19zZXRfaW50ZXJmYWNlX2NtZCh1cmIpOworCisJZWxzZSBpZiAoaXNfc2V0X2NvbmZpZ3VyYXRpb25fY21kKHVyYikpCisJCS8qIHR3ZWFrIHNldF9jb25maWd1cmF0aW9uICovCisJCXR3ZWFrX3NldF9jb25maWd1cmF0aW9uX2NtZCh1cmIpOworCisJZWxzZSBpZiAoaXNfcmVzZXRfZGV2aWNlX2NtZCh1cmIpKQorCQl0d2Vha19yZXNldF9kZXZpY2VfY21kKHVyYik7CisJZWxzZQorCQlkYmdfc3R1Yl9yeCgibm8gbmVlZCB0byB0d2Vha1xuIik7Cit9CisKKy8qCisgKiBzdHViX3JlY3ZfdW5saW5rKCkgdW5saW5rcyB0aGUgVVJCIGJ5IGEgY2FsbCB0byB1c2JfdW5saW5rX3VyYigpLgorICogQnkgdW5saW5raW5nIHRoZSB1cmIgYXN5bmNocm9ub3VzbHksIHN0dWJfcnggY2FuIGNvbnRpbnVvdXNseQorICogcHJvY2VzcyBjb21pbmcgdXJicy4gIEV2ZW4gaWYgdGhlIHVyYiBpcyB1bmxpbmtlZCwgaXRzIGNvbXBsZXRpb24KKyAqIGhhbmRsZXIgd2lsbCBiZSBjYWxsZWQgYW5kIHN0dWJfdHggd2lsbCBzZW5kIGEgcmV0dXJuIHBkdS4KKyAqCisgKiBTZWUgYWxzbyBjb21tZW50cyBhYm91dCB1bmxpbmtpbmcgc3RyYXRlZ3kgaW4gdmhjaV9oY2QuYy4KKyAqLworc3RhdGljIGludCBzdHViX3JlY3ZfY21kX3VubGluayhzdHJ1Y3Qgc3R1Yl9kZXZpY2UgKnNkZXYsCisJCQkJCQlzdHJ1Y3QgdXNiaXBfaGVhZGVyICpwZHUpCit7CisJc3RydWN0IGxpc3RfaGVhZCAqbGlzdGhlYWQgPSAmc2Rldi0+cHJpdl9pbml0OworCXN0cnVjdCBsaXN0X2hlYWQgKnB0cjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3RydWN0IHN0dWJfcHJpdiAqcHJpdjsKKworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnNkZXYtPnByaXZfbG9jaywgZmxhZ3MpOworCisJZm9yIChwdHIgPSBsaXN0aGVhZC0+bmV4dDsgcHRyICE9IGxpc3RoZWFkOyBwdHIgPSBwdHItPm5leHQpIHsKKwkJcHJpdiA9IGxpc3RfZW50cnkocHRyLCBzdHJ1Y3Qgc3R1Yl9wcml2LCBsaXN0KTsKKwkJaWYgKHByaXYtPnNlcW51bSA9PSBwZHUtPnUuY21kX3VubGluay5zZXFudW0pIHsKKwkJCWludCByZXQ7CisKKwkJCWRldl9pbmZvKCZwcml2LT51cmItPmRldi0+ZGV2LCAidW5saW5rIHVyYiAlcFxuIiwKKwkJCQkgcHJpdi0+dXJiKTsKKworCQkJLyoKKwkJCSAqIFRoaXMgbWF0Y2hlZCB1cmIgaXMgbm90IGNvbXBsZXRlZCB5ZXQgKGkuZS4sIGJlIGluCisJCQkgKiBmbGlnaHQgaW4gdXNiIGhjZCBoYXJkd2FyZS9kcml2ZXIpLiBOb3cgd2UgYXJlCisJCQkgKiBjYW5jZWxsaW5nIGl0LiBUaGUgdW5saW5raW5nIGZsYWcgbWVhbnMgdGhhdCB3ZSBhcmUKKwkJCSAqIG5vdyBub3QgZ29pbmcgdG8gcmV0dXJuIHRoZSBub3JtYWwgcmVzdWx0IHBkdSBvZiBhCisJCQkgKiBzdWJtaXNzaW9uIHJlcXVlc3QsIGJ1dCBnb2luZyB0byByZXR1cm4gYSByZXN1bHQgcGR1CisJCQkgKiBvZiB0aGUgdW5saW5rIHJlcXVlc3QuCisJCQkgKi8KKwkJCXByaXYtPnVubGlua2luZyA9IDE7CisKKwkJCS8qCisJCQkgKiBJbiB0aGUgY2FzZSB0aGF0IHVubGlua2luZyBmbGFnIGlzIG9uLCBwcmV2LT5zZXFudW0KKwkJCSAqIGlzIGNoYW5nZWQgZnJvbSB0aGUgc2VxbnVtIG9mIHRoZSBjYW5jZWxsaW5nIHVyYiB0bworCQkJICogdGhlIHNlcW51bSBvZiB0aGUgdW5saW5rIHJlcXVlc3QuIFRoaXMgd2lsbCBiZSB1c2VkCisJCQkgKiB0byBtYWtlIHRoZSByZXN1bHQgcGR1IG9mIHRoZSB1bmxpbmsgcmVxdWVzdC4KKwkJCSAqLworCQkJcHJpdi0+c2VxbnVtID0gcGR1LT5iYXNlLnNlcW51bTsKKworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2Rldi0+cHJpdl9sb2NrLCBmbGFncyk7CisKKwkJCS8qCisJCQkgKiB1c2JfdW5saW5rX3VyYigpIGlzIG5vdyBvdXQgb2Ygc3BpbmxvY2tpbmcgdG8gYXZvaWQKKwkJCSAqIHNwaW5sb2NrIHJlY3Vyc2lvbiBzaW5jZSBzdHViX2NvbXBsZXRlKCkgaXMKKwkJCSAqIHNvbWV0aW1lcyBjYWxsZWQgaW4gdGhpcyBjb250ZXh0IGJ1dCBub3QgaW4gdGhlCisJCQkgKiBpbnRlcnJ1cHQgY29udGV4dC4gIElmIHN0dWJfY29tcGxldGUoKSBpcyBleGVjdXRlZAorCQkJICogYmVmb3JlIHdlIGNhbGwgdXNiX3VubGlua191cmIoKSwgdXNiX3VubGlua191cmIoKQorCQkJICogd2lsbCByZXR1cm4gYW4gZXJyb3IgdmFsdWUuIEluIHRoaXMgY2FzZSwgc3R1Yl90eAorCQkJICogd2lsbCByZXR1cm4gdGhlIHJlc3VsdCBwZHUgb2YgdGhpcyB1bmxpbmsgcmVxdWVzdAorCQkJICogdGhvdWdoIHN1Ym1pc3Npb24gaXMgY29tcGxldGVkIGFuZCBhY3R1YWwgdW5saW5raW5nCisJCQkgKiBpcyBub3QgZXhlY3V0ZWQuIE9LPworCQkJICovCisJCQkvKiBJbiB0aGUgYWJvdmUgY2FzZSwgdXJiLT5zdGF0dXMgaXMgbm90IC1FQ09OTlJFU0VULAorCQkJICogc28gYSBkcml2ZXIgaW4gYSBjbGllbnQgaG9zdCB3aWxsIGtub3cgdGhlIGZhaWx1cmUKKwkJCSAqIG9mIHRoZSB1bmxpbmsgcmVxdWVzdCA/CisJCQkgKi8KKwkJCXJldCA9IHVzYl91bmxpbmtfdXJiKHByaXYtPnVyYik7CisJCQlpZiAocmV0ICE9IC1FSU5QUk9HUkVTUykKKwkJCQlkZXZfZXJyKCZwcml2LT51cmItPmRldi0+ZGV2LAorCQkJCQkiZmFpbGVkIHRvIHVubGluayBhIHVyYiAlcCwgcmV0ICVkXG4iLAorCQkJCQlwcml2LT51cmIsIHJldCk7CisJCQlyZXR1cm4gMDsKKwkJfQorCX0KKworCWRiZ19zdHViX3J4KCJzZXFudW0gJWQgaXMgbm90IHBlbmRpbmdcbiIsIHBkdS0+dS5jbWRfdW5saW5rLnNlcW51bSk7CisKKwkvKgorCSAqIFRoZSB1cmIgb2YgdGhlIHVubGluayB0YXJnZXQgaXMgbm90IGZvdW5kIGluIHByaXZfaW5pdCBxdWV1ZS4gSXQgd2FzCisJICogYWxyZWFkeSBjb21wbGV0ZWQgYW5kIGl0cyByZXN1bHRzIGlzL3dhcyBnb2luZyB0byBiZSBzZW50IGJ5IGEKKwkgKiBDTURfUkVUIHBkdS4gSW4gdGhpcyBjYXNlLCB1c2JfdW5saW5rX3VyYigpIGlzIG5vdCBuZWVkZWQuIFdlIG9ubHkKKwkgKiByZXR1cm4gdGhlIGNvbXBsZXRlbmVzcyBvZiB0aGlzIHVubGluayByZXF1ZXN0IHRvIHZoY2lfaGNkLgorCSAqLworCXN0dWJfZW5xdWV1ZV9yZXRfdW5saW5rKHNkZXYsIHBkdS0+YmFzZS5zZXFudW0sIDApOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2Rldi0+cHJpdl9sb2NrLCBmbGFncyk7CisKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZhbGlkX3JlcXVlc3Qoc3RydWN0IHN0dWJfZGV2aWNlICpzZGV2LCBzdHJ1Y3QgdXNiaXBfaGVhZGVyICpwZHUpCit7CisJc3RydWN0IHVzYmlwX2RldmljZSAqdWQgPSAmc2Rldi0+dWQ7CisKKwlpZiAocGR1LT5iYXNlLmRldmlkID09IHNkZXYtPmRldmlkKSB7CisJCXNwaW5fbG9jaygmdWQtPmxvY2spOworCQlpZiAodWQtPnN0YXR1cyA9PSBTREVWX1NUX1VTRUQpIHsKKwkJCS8qIEEgcmVxdWVzdCBpcyB2YWxpZC4gKi8KKwkJCXNwaW5fdW5sb2NrKCZ1ZC0+bG9jayk7CisJCQlyZXR1cm4gMTsKKwkJfQorCQlzcGluX3VubG9jaygmdWQtPmxvY2spOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHN0dWJfcHJpdiAqc3R1Yl9wcml2X2FsbG9jKHN0cnVjdCBzdHViX2RldmljZSAqc2RldiwKKwkJCQkJIHN0cnVjdCB1c2JpcF9oZWFkZXIgKnBkdSkKK3sKKwlzdHJ1Y3Qgc3R1Yl9wcml2ICpwcml2OworCXN0cnVjdCB1c2JpcF9kZXZpY2UgKnVkID0gJnNkZXYtPnVkOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmc2Rldi0+cHJpdl9sb2NrLCBmbGFncyk7CisKKwlwcml2ID0ga21lbV9jYWNoZV9hbGxvYyhzdHViX3ByaXZfY2FjaGUsIEdGUF9BVE9NSUMpOworCWlmICghcHJpdikgeworCQlkZXZfZXJyKCZzZGV2LT5pbnRlcmZhY2UtPmRldiwgImFsbG9jIHN0dWJfcHJpdlxuIik7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNkZXYtPnByaXZfbG9jaywgZmxhZ3MpOworCQl1c2JpcF9ldmVudF9hZGQodWQsIFNERVZfRVZFTlRfRVJST1JfTUFMTE9DKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJbWVtc2V0KHByaXYsIDAsIHNpemVvZihzdHJ1Y3Qgc3R1Yl9wcml2KSk7CisKKwlwcml2LT5zZXFudW0gPSBwZHUtPmJhc2Uuc2VxbnVtOworCXByaXYtPnNkZXYgPSBzZGV2OworCisJLyoKKwkgKiBBZnRlciBhIHN0dWJfcHJpdiBpcyBsaW5rZWQgdG8gYSBsaXN0X2hlYWQsCisJICogb3VyIGVycm9yIGhhbmRsZXIgY2FuIGZyZWUgYWxsb2NhdGVkIGRhdGEuCisJICovCisJbGlzdF9hZGRfdGFpbCgmcHJpdi0+bGlzdCwgJnNkZXYtPnByaXZfaW5pdCk7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzZGV2LT5wcml2X2xvY2ssIGZsYWdzKTsKKworCXJldHVybiBwcml2OworfQorCisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2hvc3RfZW5kcG9pbnQgKmdldF9lcF9mcm9tX2VwbnVtKHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2LAorCQlpbnQgZXBudW0wKQoreworCXN0cnVjdCB1c2JfaG9zdF9jb25maWcgKmNvbmZpZzsKKwlpbnQgaSA9IDAsIGogPSAwOworCXN0cnVjdCB1c2JfaG9zdF9lbmRwb2ludCAqZXAgPSBOVUxMOworCWludCBlcG51bTsKKwlpbnQgZm91bmQgPSAwOworCisJaWYgKGVwbnVtMCA9PSAwKQorCQlyZXR1cm4gJnVkZXYtPmVwMDsKKworCWNvbmZpZyA9IHVkZXYtPmFjdGNvbmZpZzsKKwlpZiAoIWNvbmZpZykKKwkJcmV0dXJuIE5VTEw7CisKKwlmb3IgKGkgPSAwOyBpIDwgY29uZmlnLT5kZXNjLmJOdW1JbnRlcmZhY2VzOyBpKyspIHsKKwkJc3RydWN0IHVzYl9ob3N0X2ludGVyZmFjZSAqc2V0dGluZzsKKworCQlzZXR0aW5nID0gY29uZmlnLT5pbnRlcmZhY2VbaV0tPmN1cl9hbHRzZXR0aW5nOworCisJCWZvciAoaiA9IDA7IGogPCBzZXR0aW5nLT5kZXNjLmJOdW1FbmRwb2ludHM7IGorKykgeworCQkJZXAgPSAmc2V0dGluZy0+ZW5kcG9pbnRbal07CisJCQllcG51bSA9IChlcC0+ZGVzYy5iRW5kcG9pbnRBZGRyZXNzICYgMHg3Zik7CisKKwkJCWlmIChlcG51bSA9PSBlcG51bTApIHsKKwkJCQkvKiB1aW5mbygiZm91bmQgZXBudW0gJWRcbiIsIGVwbnVtMCk7ICovCisJCQkJZm91bmQgPSAxOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJfQorCisJaWYgKGZvdW5kKQorCQlyZXR1cm4gZXA7CisJZWxzZQorCQlyZXR1cm4gTlVMTDsKK30KKworCitzdGF0aWMgaW50IGdldF9waXBlKHN0cnVjdCBzdHViX2RldmljZSAqc2RldiwgaW50IGVwbnVtLCBpbnQgZGlyKQoreworCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldihzZGV2LT5pbnRlcmZhY2UpOworCXN0cnVjdCB1c2JfaG9zdF9lbmRwb2ludCAqZXA7CisJc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICplcGQgPSBOVUxMOworCisJZXAgPSBnZXRfZXBfZnJvbV9lcG51bSh1ZGV2LCBlcG51bSk7CisJaWYgKCFlcCkgeworCQlkZXZfZXJyKCZzZGV2LT5pbnRlcmZhY2UtPmRldiwgIm5vIHN1Y2ggZW5kcG9pbnQ/LCAlZFxuIiwKKwkJCWVwbnVtKTsKKwkJQlVHKCk7CisJfQorCisJZXBkID0gJmVwLT5kZXNjOworCisKKyNpZiAwCisJLyogZXBudW0gMCBpcyBhbHdheXMgY29udHJvbCAqLworCWlmIChlcG51bSA9PSAwKSB7CisJCWlmIChkaXIgPT0gVVNCSVBfRElSX09VVCkKKwkJCXJldHVybiB1c2Jfc25kY3RybHBpcGUodWRldiwgMCk7CisJCWVsc2UKKwkJCXJldHVybiB1c2JfcmN2Y3RybHBpcGUodWRldiwgMCk7CisJfQorI2VuZGlmCisKKwlpZiAodXNiX2VuZHBvaW50X3hmZXJfY29udHJvbChlcGQpKSB7CisJCWlmIChkaXIgPT0gVVNCSVBfRElSX09VVCkKKwkJCXJldHVybiB1c2Jfc25kY3RybHBpcGUodWRldiwgZXBudW0pOworCQllbHNlCisJCQlyZXR1cm4gdXNiX3JjdmN0cmxwaXBlKHVkZXYsIGVwbnVtKTsKKwl9CisKKwlpZiAodXNiX2VuZHBvaW50X3hmZXJfYnVsayhlcGQpKSB7CisJCWlmIChkaXIgPT0gVVNCSVBfRElSX09VVCkKKwkJCXJldHVybiB1c2Jfc25kYnVsa3BpcGUodWRldiwgZXBudW0pOworCQllbHNlCisJCQlyZXR1cm4gdXNiX3JjdmJ1bGtwaXBlKHVkZXYsIGVwbnVtKTsKKwl9CisKKwlpZiAodXNiX2VuZHBvaW50X3hmZXJfaW50KGVwZCkpIHsKKwkJaWYgKGRpciA9PSBVU0JJUF9ESVJfT1VUKQorCQkJcmV0dXJuIHVzYl9zbmRpbnRwaXBlKHVkZXYsIGVwbnVtKTsKKwkJZWxzZQorCQkJcmV0dXJuIHVzYl9yY3ZpbnRwaXBlKHVkZXYsIGVwbnVtKTsKKwl9CisKKwlpZiAodXNiX2VuZHBvaW50X3hmZXJfaXNvYyhlcGQpKSB7CisJCWlmIChkaXIgPT0gVVNCSVBfRElSX09VVCkKKwkJCXJldHVybiB1c2Jfc25kaXNvY3BpcGUodWRldiwgZXBudW0pOworCQllbHNlCisJCQlyZXR1cm4gdXNiX3Jjdmlzb2NwaXBlKHVkZXYsIGVwbnVtKTsKKwl9CisKKwkvKiBOT1QgUkVBQ0hFRCAqLworCWRldl9lcnIoJnNkZXYtPmludGVyZmFjZS0+ZGV2LCAiZ2V0IHBpcGUsIGVwbnVtICVkXG4iLCBlcG51bSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHN0dWJfcmVjdl9jbWRfc3VibWl0KHN0cnVjdCBzdHViX2RldmljZSAqc2RldiwKKwkJCQkgc3RydWN0IHVzYmlwX2hlYWRlciAqcGR1KQoreworCWludCByZXQ7CisJc3RydWN0IHN0dWJfcHJpdiAqcHJpdjsKKwlzdHJ1Y3QgdXNiaXBfZGV2aWNlICp1ZCA9ICZzZGV2LT51ZDsKKwlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiA9IGludGVyZmFjZV90b191c2JkZXYoc2Rldi0+aW50ZXJmYWNlKTsKKwlpbnQgcGlwZSA9IGdldF9waXBlKHNkZXYsIHBkdS0+YmFzZS5lcCwgcGR1LT5iYXNlLmRpcmVjdGlvbik7CisKKworCXByaXYgPSBzdHViX3ByaXZfYWxsb2Moc2RldiwgcGR1KTsKKwlpZiAoIXByaXYpCisJCXJldHVybjsKKworCS8qIHNldHVwIGEgdXJiICovCisJaWYgKHVzYl9waXBlaXNvYyhwaXBlKSkKKwkJcHJpdi0+dXJiID0gdXNiX2FsbG9jX3VyYihwZHUtPnUuY21kX3N1Ym1pdC5udW1iZXJfb2ZfcGFja2V0cywKKwkJCQkJCQkJR0ZQX0tFUk5FTCk7CisJZWxzZQorCQlwcml2LT51cmIgPSB1c2JfYWxsb2NfdXJiKDAsIEdGUF9LRVJORUwpOworCisJaWYgKCFwcml2LT51cmIpIHsKKwkJZGV2X2Vycigmc2Rldi0+aW50ZXJmYWNlLT5kZXYsICJtYWxsb2MgdXJiXG4iKTsKKwkJdXNiaXBfZXZlbnRfYWRkKHVkLCBTREVWX0VWRU5UX0VSUk9SX01BTExPQyk7CisJCXJldHVybjsKKwl9CisKKwkvKiBzZXQgcHJpdi0+dXJiLT50cmFuc2Zlcl9idWZmZXIgKi8KKwlpZiAocGR1LT51LmNtZF9zdWJtaXQudHJhbnNmZXJfYnVmZmVyX2xlbmd0aCA+IDApIHsKKwkJcHJpdi0+dXJiLT50cmFuc2Zlcl9idWZmZXIgPQorCQkJa3phbGxvYyhwZHUtPnUuY21kX3N1Ym1pdC50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoLAorCQkJCQkJCQlHRlBfS0VSTkVMKTsKKwkJaWYgKCFwcml2LT51cmItPnRyYW5zZmVyX2J1ZmZlcikgeworCQkJZGV2X2Vycigmc2Rldi0+aW50ZXJmYWNlLT5kZXYsICJtYWxsb2MgeF9idWZmXG4iKTsKKwkJCXVzYmlwX2V2ZW50X2FkZCh1ZCwgU0RFVl9FVkVOVF9FUlJPUl9NQUxMT0MpOworCQkJcmV0dXJuOworCQl9CisJfQorCisJLyogc2V0IHByaXYtPnVyYi0+c2V0dXBfcGFja2V0ICovCisJcHJpdi0+dXJiLT5zZXR1cF9wYWNrZXQgPSBremFsbG9jKDgsIEdGUF9LRVJORUwpOworCWlmICghcHJpdi0+dXJiLT5zZXR1cF9wYWNrZXQpIHsKKwkJZGV2X2Vycigmc2Rldi0+aW50ZXJmYWNlLT5kZXYsICJhbGxvY2F0ZSBzZXR1cF9wYWNrZXRcbiIpOworCQl1c2JpcF9ldmVudF9hZGQodWQsIFNERVZfRVZFTlRfRVJST1JfTUFMTE9DKTsKKwkJcmV0dXJuOworCX0KKwltZW1jcHkocHJpdi0+dXJiLT5zZXR1cF9wYWNrZXQsICZwZHUtPnUuY21kX3N1Ym1pdC5zZXR1cCwgOCk7CisKKwkvKiBzZXQgb3RoZXIgbWVtYmVycyBmcm9tIHRoZSBiYXNlIGhlYWRlciBvZiBwZHUgKi8KKwlwcml2LT51cmItPmNvbnRleHQgICAgICAgICAgICAgICAgPSAodm9pZCAqKSBwcml2OworCXByaXYtPnVyYi0+ZGV2ICAgICAgICAgICAgICAgICAgICA9IHVkZXY7CisJcHJpdi0+dXJiLT5waXBlICAgICAgICAgICAgICAgICAgID0gcGlwZTsKKwlwcml2LT51cmItPmNvbXBsZXRlICAgICAgICAgICAgICAgPSBzdHViX2NvbXBsZXRlOworCisJdXNiaXBfcGFja19wZHUocGR1LCBwcml2LT51cmIsIFVTQklQX0NNRF9TVUJNSVQsIDApOworCisKKwlpZiAodXNiaXBfcmVjdl94YnVmZih1ZCwgcHJpdi0+dXJiKSA8IDApCisJCXJldHVybjsKKworCWlmICh1c2JpcF9yZWN2X2lzbyh1ZCwgcHJpdi0+dXJiKSA8IDApCisJCXJldHVybjsKKworCS8qIG5vIG5lZWQgdG8gc3VibWl0IGFuIGludGVyY2VwdGVkIHJlcXVlc3QsIGJ1dCBoYXJtbGVzcz8gKi8KKwl0d2Vha19zcGVjaWFsX3JlcXVlc3RzKHByaXYtPnVyYik7CisKKwkvKiB1cmIgaXMgbm93IHJlYWR5IHRvIHN1Ym1pdCAqLworCXJldCA9IHVzYl9zdWJtaXRfdXJiKHByaXYtPnVyYiwgR0ZQX0tFUk5FTCk7CisKKwlpZiAocmV0ID09IDApCisJCWRiZ19zdHViX3J4KCJzdWJtaXQgdXJiIG9rLCBzZXFudW0gJXVcbiIsIHBkdS0+YmFzZS5zZXFudW0pOworCWVsc2UgeworCQlkZXZfZXJyKCZzZGV2LT5pbnRlcmZhY2UtPmRldiwgInN1Ym1pdF91cmIgZXJyb3IsICVkXG4iLCByZXQpOworCQl1c2JpcF9kdW1wX2hlYWRlcihwZHUpOworCQl1c2JpcF9kdW1wX3VyYihwcml2LT51cmIpOworCisJCS8qCisJCSAqIFBlc3NpbWlzdGljLgorCQkgKiBUaGlzIGNvbm5lY3Rpb24gd2lsbCBiZSBkaXNjYXJkZWQuCisJCSAqLworCQl1c2JpcF9ldmVudF9hZGQodWQsIFNERVZfRVZFTlRfRVJST1JfU1VCTUlUKTsKKwl9CisKKwlkYmdfc3R1Yl9yeCgiTGVhdmVcbiIpOworCXJldHVybjsKK30KKworLyogcmVjdiBhIHBkdSAqLworc3RhdGljIHZvaWQgc3R1Yl9yeF9wZHUoc3RydWN0IHVzYmlwX2RldmljZSAqdWQpCit7CisJaW50IHJldDsKKwlzdHJ1Y3QgdXNiaXBfaGVhZGVyIHBkdTsKKwlzdHJ1Y3Qgc3R1Yl9kZXZpY2UgKnNkZXYgPSBjb250YWluZXJfb2YodWQsIHN0cnVjdCBzdHViX2RldmljZSwgdWQpOworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZzZGV2LT5pbnRlcmZhY2UtPmRldjsKKworCWRiZ19zdHViX3J4KCJFbnRlclxuIik7CisKKwltZW1zZXQoJnBkdSwgMCwgc2l6ZW9mKHBkdSkpOworCisJLyogMS4gcmVjZWl2ZSBhIHBkdSBoZWFkZXIgKi8KKwlyZXQgPSB1c2JpcF94bWl0KDAsIHVkLT50Y3Bfc29ja2V0LCAoY2hhciAqKSAmcGR1LCBzaXplb2YocGR1KSwgMCk7CisJaWYgKHJldCAhPSBzaXplb2YocGR1KSkgeworCQlkZXZfZXJyKGRldiwgInJlY3YgYSBoZWFkZXIsICVkXG4iLCByZXQpOworCQl1c2JpcF9ldmVudF9hZGQodWQsIFNERVZfRVZFTlRfRVJST1JfVENQKTsKKwkJcmV0dXJuOworCX0KKworCXVzYmlwX2hlYWRlcl9jb3JyZWN0X2VuZGlhbigmcGR1LCAwKTsKKworCWlmIChkYmdfZmxhZ19zdHViX3J4KQorCQl1c2JpcF9kdW1wX2hlYWRlcigmcGR1KTsKKworCWlmICghdmFsaWRfcmVxdWVzdChzZGV2LCAmcGR1KSkgeworCQlkZXZfZXJyKGRldiwgInJlY3YgaW52YWxpZCByZXF1ZXN0XG4iKTsKKwkJdXNiaXBfZXZlbnRfYWRkKHVkLCBTREVWX0VWRU5UX0VSUk9SX1RDUCk7CisJCXJldHVybjsKKwl9CisKKwlzd2l0Y2ggKHBkdS5iYXNlLmNvbW1hbmQpIHsKKwljYXNlIFVTQklQX0NNRF9VTkxJTks6CisJCXN0dWJfcmVjdl9jbWRfdW5saW5rKHNkZXYsICZwZHUpOworCQlicmVhazsKKworCWNhc2UgVVNCSVBfQ01EX1NVQk1JVDoKKwkJc3R1Yl9yZWN2X2NtZF9zdWJtaXQoc2RldiwgJnBkdSk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJLyogTk9UUkVBQ0hFRCAqLworCQlkZXZfZXJyKGRldiwgInVua25vd24gcGR1XG4iKTsKKwkJdXNiaXBfZXZlbnRfYWRkKHVkLCBTREVWX0VWRU5UX0VSUk9SX1RDUCk7CisJCXJldHVybjsKKwl9CisKK30KKwordm9pZCBzdHViX3J4X2xvb3Aoc3RydWN0IHVzYmlwX3Rhc2sgKnV0KQoreworCXN0cnVjdCB1c2JpcF9kZXZpY2UgKnVkID0gY29udGFpbmVyX29mKHV0LCBzdHJ1Y3QgdXNiaXBfZGV2aWNlLCB0Y3BfcngpOworCisJd2hpbGUgKDEpIHsKKwkJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSB7CisJCQlkYmdfc3R1Yl9yeCgic2lnbmFsIGNhdWdodCFcbiIpOworCQkJYnJlYWs7CisJCX0KKworCQlpZiAodXNiaXBfZXZlbnRfaGFwcGVuZCh1ZCkpCisJCQlicmVhazsKKworCQlzdHViX3J4X3BkdSh1ZCk7CisJfQorfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3VzYmlwL3N0dWJfdHguYyBiL2RyaXZlcnMvc3RhZ2luZy91c2JpcC9zdHViX3R4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDU1NjNjZAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy91c2JpcC9zdHViX3R4LmMKQEAgLTAsMCArMSwzNzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMtMjAwOCBUYWthaGlybyBIaXJvZnVjaGkKKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorICogVVNBLgorICovCisKKyNpbmNsdWRlICJ1c2JpcF9jb21tb24uaCIKKyNpbmNsdWRlICJzdHViLmgiCisKKworc3RhdGljIHZvaWQgc3R1Yl9mcmVlX3ByaXZfYW5kX3VyYihzdHJ1Y3Qgc3R1Yl9wcml2ICpwcml2KQoreworCXN0cnVjdCB1cmIgKnVyYiA9IHByaXYtPnVyYjsKKworCWtmcmVlKHVyYi0+c2V0dXBfcGFja2V0KTsKKwlrZnJlZSh1cmItPnRyYW5zZmVyX2J1ZmZlcik7CisJbGlzdF9kZWwoJnByaXYtPmxpc3QpOworCWttZW1fY2FjaGVfZnJlZShzdHViX3ByaXZfY2FjaGUsIHByaXYpOworCXVzYl9mcmVlX3VyYih1cmIpOworfQorCisvKiBiZSBpbiBzcGluX2xvY2tfaXJxc2F2ZSgmc2Rldi0+cHJpdl9sb2NrLCBmbGFncykgKi8KK3ZvaWQgc3R1Yl9lbnF1ZXVlX3JldF91bmxpbmsoc3RydWN0IHN0dWJfZGV2aWNlICpzZGV2LCBfX3UzMiBzZXFudW0sCisJCQkgICAgIF9fdTMyIHN0YXR1cykKK3sKKwlzdHJ1Y3Qgc3R1Yl91bmxpbmsgKnVubGluazsKKworCXVubGluayA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBzdHViX3VubGluayksIEdGUF9BVE9NSUMpOworCWlmICghdW5saW5rKSB7CisJCWRldl9lcnIoJnNkZXYtPmludGVyZmFjZS0+ZGV2LCAiYWxsb2Mgc3R1Yl91bmxpbmtcbiIpOworCQl1c2JpcF9ldmVudF9hZGQoJnNkZXYtPnVkLCBWREVWX0VWRU5UX0VSUk9SX01BTExPQyk7CisJCXJldHVybjsKKwl9CisKKwl1bmxpbmstPnNlcW51bSA9IHNlcW51bTsKKwl1bmxpbmstPnN0YXR1cyA9IHN0YXR1czsKKworCWxpc3RfYWRkX3RhaWwoJnVubGluay0+bGlzdCwgJnNkZXYtPnVubGlua190eCk7Cit9CisKKy8qKgorICogc3R1Yl9jb21wbGV0ZSAtIGNvbXBsZXRpb24gaGFuZGxlciBvZiBhIHVzYmlwIHVyYgorICogQHVyYjogcG9pbnRlciB0byB0aGUgdXJiIGNvbXBsZXRlZAorICogQHJlZ3M6CisgKgorICogV2hlbiBhIHVyYiBoYXMgY29tcGxldGVkLCB0aGUgVVNCIGNvcmUgZHJpdmVyIGNhbGxzIHRoaXMgZnVuY3Rpb24gbW9zdGx5IGluCisgKiB0aGUgaW50ZXJydXB0IGNvbnRleHQuIFRvIHJldHVybiB0aGUgcmVzdWx0IG9mIGEgdXJiLCB0aGUgY29tcGxldGVkIHVyYiBpcworICogbGlua2VkIHRvIHRoZSBwZW5kaW5nIGxpc3Qgb2YgcmV0dXJuaW5nLgorICoKKyAqLwordm9pZCBzdHViX2NvbXBsZXRlKHN0cnVjdCB1cmIgKnVyYikKK3sKKwlzdHJ1Y3Qgc3R1Yl9wcml2ICpwcml2ID0gKHN0cnVjdCBzdHViX3ByaXYgKikgdXJiLT5jb250ZXh0OworCXN0cnVjdCBzdHViX2RldmljZSAqc2RldiA9IHByaXYtPnNkZXY7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWRiZ19zdHViX3R4KCJjb21wbGV0ZSEgc3RhdHVzICVkXG4iLCB1cmItPnN0YXR1cyk7CisKKworCXN3aXRjaCAodXJiLT5zdGF0dXMpIHsKKwljYXNlIDA6CisJCS8qIE9LICovCisJCWJyZWFrOworCWNhc2UgLUVOT0VOVDoKKwkJdWluZm8oInN0b3BwZWQgYnkgYSBjYWxsIG9mIHVzYl9raWxsX3VyYigpIGJlY2F1c2Ugb2YiCisJCQkJCSJjbGVhbmluZyB1cCBhIHZpcnR1YWwgY29ubmVjdGlvblxuIik7CisJCXJldHVybjsKKwljYXNlIC1FQ09OTlJFU0VUOgorCQl1aW5mbygidW5saW5rZWQgYnkgYSBjYWxsIG9mIHVzYl91bmxpbmtfdXJiKClcbiIpOworCQlicmVhazsKKwljYXNlIC1FUElQRToKKwkJdWluZm8oImVuZHBvaW50ICVkIGlzIHN0YWxsZWRcbiIsIHVzYl9waXBlZW5kcG9pbnQodXJiLT5waXBlKSk7CisJCWJyZWFrOworCWNhc2UgLUVTSFVURE9XTjoKKwkJdWluZm8oImRldmljZSByZW1vdmVkP1xuIik7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXVpbmZvKCJ1cmIgY29tcGxldGlvbiB3aXRoIG5vbi16ZXJvIHN0YXR1cyAlZFxuIiwgdXJiLT5zdGF0dXMpOworCX0KKworCS8qIGxpbmsgYSB1cmIgdG8gdGhlIHF1ZXVlIG9mIHR4LiAqLworCXNwaW5fbG9ja19pcnFzYXZlKCZzZGV2LT5wcml2X2xvY2ssIGZsYWdzKTsKKworCWlmIChwcml2LT51bmxpbmtpbmcpIHsKKwkJc3R1Yl9lbnF1ZXVlX3JldF91bmxpbmsoc2RldiwgcHJpdi0+c2VxbnVtLCB1cmItPnN0YXR1cyk7CisJCXN0dWJfZnJlZV9wcml2X2FuZF91cmIocHJpdik7CisJfSBlbHNlCisJCWxpc3RfbW92ZV90YWlsKCZwcml2LT5saXN0LCAmc2Rldi0+cHJpdl90eCk7CisKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNkZXYtPnByaXZfbG9jaywgZmxhZ3MpOworCisJLyogd2FrZSB1cCB0eF90aHJlYWQgKi8KKwl3YWtlX3VwKCZzZGV2LT50eF93YWl0cSk7Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qIGZpbGwgUERVICovCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZXR1cF9iYXNlX3BkdShzdHJ1Y3QgdXNiaXBfaGVhZGVyX2Jhc2ljICpiYXNlLAorCQlfX3UzMiBjb21tYW5kLCBfX3UzMiBzZXFudW0pCit7CisJYmFzZS0+Y29tbWFuZCA9IGNvbW1hbmQ7CisJYmFzZS0+c2VxbnVtICA9IHNlcW51bTsKKwliYXNlLT5kZXZpZCAgID0gMDsKKwliYXNlLT5lcCAgICAgID0gMDsKKwliYXNlLT5kaXJlY3Rpb24gICA9IDA7Cit9CisKK3N0YXRpYyB2b2lkIHNldHVwX3JldF9zdWJtaXRfcGR1KHN0cnVjdCB1c2JpcF9oZWFkZXIgKnJwZHUsIHN0cnVjdCB1cmIgKnVyYikKK3sKKwlzdHJ1Y3Qgc3R1Yl9wcml2ICpwcml2ID0gKHN0cnVjdCBzdHViX3ByaXYgKikgdXJiLT5jb250ZXh0OworCisJc2V0dXBfYmFzZV9wZHUoJnJwZHUtPmJhc2UsIFVTQklQX1JFVF9TVUJNSVQsIHByaXYtPnNlcW51bSk7CisKKwl1c2JpcF9wYWNrX3BkdShycGR1LCB1cmIsIFVTQklQX1JFVF9TVUJNSVQsIDEpOworfQorCitzdGF0aWMgdm9pZCBzZXR1cF9yZXRfdW5saW5rX3BkdShzdHJ1Y3QgdXNiaXBfaGVhZGVyICpycGR1LAorCQlzdHJ1Y3Qgc3R1Yl91bmxpbmsgKnVubGluaykKK3sKKwlzZXR1cF9iYXNlX3BkdSgmcnBkdS0+YmFzZSwgVVNCSVBfUkVUX1VOTElOSywgdW5saW5rLT5zZXFudW0pOworCisJcnBkdS0+dS5yZXRfdW5saW5rLnN0YXR1cyA9IHVubGluay0+c3RhdHVzOworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiBzZW5kIFJFVF9TVUJNSVQgKi8KKworc3RhdGljIHN0cnVjdCBzdHViX3ByaXYgKmRlcXVldWVfZnJvbV9wcml2X3R4KHN0cnVjdCBzdHViX2RldmljZSAqc2RldikKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCBzdHViX3ByaXYgKnByaXYsICp0bXA7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmc2Rldi0+cHJpdl9sb2NrLCBmbGFncyk7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocHJpdiwgdG1wLCAmc2Rldi0+cHJpdl90eCwgbGlzdCkgeworCQlsaXN0X21vdmVfdGFpbCgmcHJpdi0+bGlzdCwgJnNkZXYtPnByaXZfZnJlZSk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNkZXYtPnByaXZfbG9jaywgZmxhZ3MpOworCQlyZXR1cm4gcHJpdjsKKwl9CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzZGV2LT5wcml2X2xvY2ssIGZsYWdzKTsKKworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgaW50IHN0dWJfc2VuZF9yZXRfc3VibWl0KHN0cnVjdCBzdHViX2RldmljZSAqc2RldikKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCBzdHViX3ByaXYgKnByaXYsICp0bXA7CisKKwlzdHJ1Y3QgbXNnaGRyIG1zZzsKKwlzdHJ1Y3Qga3ZlYyBpb3ZbM107CisJc2l6ZV90IHR4c2l6ZTsKKworCXNpemVfdCB0b3RhbF9zaXplID0gMDsKKworCXdoaWxlICgocHJpdiA9IGRlcXVldWVfZnJvbV9wcml2X3R4KHNkZXYpKSAhPSBOVUxMKSB7CisJCWludCByZXQ7CisJCXN0cnVjdCB1cmIgKnVyYiA9IHByaXYtPnVyYjsKKwkJc3RydWN0IHVzYmlwX2hlYWRlciBwZHVfaGVhZGVyOworCQl2b2lkICppc29fYnVmZmVyID0gTlVMTDsKKworCQl0eHNpemUgPSAwOworCQltZW1zZXQoJnBkdV9oZWFkZXIsIDAsIHNpemVvZihwZHVfaGVhZGVyKSk7CisJCW1lbXNldCgmbXNnLCAwLCBzaXplb2YobXNnKSk7CisJCW1lbXNldCgmaW92LCAwLCBzaXplb2YoaW92KSk7CisKKwkJZGJnX3N0dWJfdHgoInNldHVwIHR4ZGF0YSB1cmIgJXBcbiIsIHVyYik7CisKKworCQkvKiAxLiBzZXR1cCB1c2JpcF9oZWFkZXIgKi8KKwkJc2V0dXBfcmV0X3N1Ym1pdF9wZHUoJnBkdV9oZWFkZXIsIHVyYik7CisJCXVzYmlwX2hlYWRlcl9jb3JyZWN0X2VuZGlhbigmcGR1X2hlYWRlciwgMSk7CisKKwkJaW92WzBdLmlvdl9iYXNlID0gJnBkdV9oZWFkZXI7CisJCWlvdlswXS5pb3ZfbGVuICA9IHNpemVvZihwZHVfaGVhZGVyKTsKKwkJdHhzaXplICs9IHNpemVvZihwZHVfaGVhZGVyKTsKKworCQkvKiAyLiBzZXR1cCB0cmFuc2ZlciBidWZmZXIgKi8KKwkJaWYgKHVzYl9waXBlaW4odXJiLT5waXBlKSAmJiB1cmItPmFjdHVhbF9sZW5ndGggPiAwKSB7CisJCQlpb3ZbMV0uaW92X2Jhc2UgPSB1cmItPnRyYW5zZmVyX2J1ZmZlcjsKKwkJCWlvdlsxXS5pb3ZfbGVuICA9IHVyYi0+YWN0dWFsX2xlbmd0aDsKKwkJCXR4c2l6ZSArPSB1cmItPmFjdHVhbF9sZW5ndGg7CisJCX0KKworCQkvKiAzLiBzZXR1cCBpc29fcGFja2V0X2Rlc2NyaXB0b3IgKi8KKwkJaWYgKHVzYl9waXBldHlwZSh1cmItPnBpcGUpID09IFBJUEVfSVNPQ0hST05PVVMpIHsKKwkJCXNzaXplX3QgbGVuID0gMDsKKworCQkJaXNvX2J1ZmZlciA9IHVzYmlwX2FsbG9jX2lzb19kZXNjX3BkdSh1cmIsICZsZW4pOworCQkJaWYgKCFpc29fYnVmZmVyKSB7CisJCQkJdXNiaXBfZXZlbnRfYWRkKCZzZGV2LT51ZCwKKwkJCQkJCVNERVZfRVZFTlRfRVJST1JfTUFMTE9DKTsKKwkJCQlyZXR1cm4gLTE7CisJCQl9CisKKwkJCWlvdlsyXS5pb3ZfYmFzZSA9IGlzb19idWZmZXI7CisJCQlpb3ZbMl0uaW92X2xlbiAgPSBsZW47CisJCQl0eHNpemUgKz0gbGVuOworCQl9CisKKwkJcmV0ID0ga2VybmVsX3NlbmRtc2coc2Rldi0+dWQudGNwX3NvY2tldCwgJm1zZywgaW92LAorCQkJCSAgICAgMywgdHhzaXplKTsKKwkJaWYgKHJldCAhPSB0eHNpemUpIHsKKwkJCWRldl9lcnIoJnNkZXYtPmludGVyZmFjZS0+ZGV2LAorCQkJCSJzZW5kbXNnIGZhaWxlZCEsIHJldHZhbCAlZCBmb3IgJXpkXG4iLAorCQkJCXJldCwgdHhzaXplKTsKKwkJCWtmcmVlKGlzb19idWZmZXIpOworCQkJdXNiaXBfZXZlbnRfYWRkKCZzZGV2LT51ZCwgU0RFVl9FVkVOVF9FUlJPUl9UQ1ApOworCQkJcmV0dXJuIC0xOworCQl9CisKKwkJa2ZyZWUoaXNvX2J1ZmZlcik7CisJCWRiZ19zdHViX3R4KCJzZW5kIHR4ZGF0YVxuIik7CisKKwkJdG90YWxfc2l6ZSArPSB0eHNpemU7CisJfQorCisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmc2Rldi0+cHJpdl9sb2NrLCBmbGFncyk7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocHJpdiwgdG1wLCAmc2Rldi0+cHJpdl9mcmVlLCBsaXN0KSB7CisJCXN0dWJfZnJlZV9wcml2X2FuZF91cmIocHJpdik7CisJfQorCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2Rldi0+cHJpdl9sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gdG90YWxfc2l6ZTsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogc2VuZCBSRVRfVU5MSU5LICovCisKK3N0YXRpYyBzdHJ1Y3Qgc3R1Yl91bmxpbmsgKmRlcXVldWVfZnJvbV91bmxpbmtfdHgoc3RydWN0IHN0dWJfZGV2aWNlICpzZGV2KQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IHN0dWJfdW5saW5rICp1bmxpbmssICp0bXA7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmc2Rldi0+cHJpdl9sb2NrLCBmbGFncyk7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUodW5saW5rLCB0bXAsICZzZGV2LT51bmxpbmtfdHgsIGxpc3QpIHsKKwkJbGlzdF9tb3ZlX3RhaWwoJnVubGluay0+bGlzdCwgJnNkZXYtPnVubGlua19mcmVlKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2Rldi0+cHJpdl9sb2NrLCBmbGFncyk7CisJCXJldHVybiB1bmxpbms7CisJfQorCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2Rldi0+cHJpdl9sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gTlVMTDsKK30KKworCitzdGF0aWMgaW50IHN0dWJfc2VuZF9yZXRfdW5saW5rKHN0cnVjdCBzdHViX2RldmljZSAqc2RldikKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCBzdHViX3VubGluayAqdW5saW5rLCAqdG1wOworCisJc3RydWN0IG1zZ2hkciBtc2c7CisJc3RydWN0IGt2ZWMgaW92WzFdOworCXNpemVfdCB0eHNpemU7CisKKwlzaXplX3QgdG90YWxfc2l6ZSA9IDA7CisKKwl3aGlsZSAoKHVubGluayA9IGRlcXVldWVfZnJvbV91bmxpbmtfdHgoc2RldikpICE9IE5VTEwpIHsKKwkJaW50IHJldDsKKwkJc3RydWN0IHVzYmlwX2hlYWRlciBwZHVfaGVhZGVyOworCisJCXR4c2l6ZSA9IDA7CisJCW1lbXNldCgmcGR1X2hlYWRlciwgMCwgc2l6ZW9mKHBkdV9oZWFkZXIpKTsKKwkJbWVtc2V0KCZtc2csIDAsIHNpemVvZihtc2cpKTsKKwkJbWVtc2V0KCZpb3YsIDAsIHNpemVvZihpb3YpKTsKKworCQlkYmdfc3R1Yl90eCgic2V0dXAgcmV0IHVubGluayAlbHVcbiIsIHVubGluay0+c2VxbnVtKTsKKworCQkvKiAxLiBzZXR1cCB1c2JpcF9oZWFkZXIgKi8KKwkJc2V0dXBfcmV0X3VubGlua19wZHUoJnBkdV9oZWFkZXIsIHVubGluayk7CisJCXVzYmlwX2hlYWRlcl9jb3JyZWN0X2VuZGlhbigmcGR1X2hlYWRlciwgMSk7CisKKwkJaW92WzBdLmlvdl9iYXNlID0gJnBkdV9oZWFkZXI7CisJCWlvdlswXS5pb3ZfbGVuICA9IHNpemVvZihwZHVfaGVhZGVyKTsKKwkJdHhzaXplICs9IHNpemVvZihwZHVfaGVhZGVyKTsKKworCQlyZXQgPSBrZXJuZWxfc2VuZG1zZyhzZGV2LT51ZC50Y3Bfc29ja2V0LCAmbXNnLCBpb3YsCisJCQkJICAgICAxLCB0eHNpemUpOworCQlpZiAocmV0ICE9IHR4c2l6ZSkgeworCQkJZGV2X2Vycigmc2Rldi0+aW50ZXJmYWNlLT5kZXYsCisJCQkJInNlbmRtc2cgZmFpbGVkISwgcmV0dmFsICVkIGZvciAlemRcbiIsCisJCQkJcmV0LCB0eHNpemUpOworCQkJdXNiaXBfZXZlbnRfYWRkKCZzZGV2LT51ZCwgU0RFVl9FVkVOVF9FUlJPUl9UQ1ApOworCQkJcmV0dXJuIC0xOworCQl9CisKKworCQlkYmdfc3R1Yl90eCgic2VuZCB0eGRhdGFcbiIpOworCisJCXRvdGFsX3NpemUgKz0gdHhzaXplOworCX0KKworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnNkZXYtPnByaXZfbG9jaywgZmxhZ3MpOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHVubGluaywgdG1wLCAmc2Rldi0+dW5saW5rX2ZyZWUsIGxpc3QpIHsKKwkJbGlzdF9kZWwoJnVubGluay0+bGlzdCk7CisJCWtmcmVlKHVubGluayk7CisJfQorCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2Rldi0+cHJpdl9sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gdG90YWxfc2l6ZTsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCit2b2lkIHN0dWJfdHhfbG9vcChzdHJ1Y3QgdXNiaXBfdGFzayAqdXQpCit7CisJc3RydWN0IHVzYmlwX2RldmljZSAqdWQgPSBjb250YWluZXJfb2YodXQsIHN0cnVjdCB1c2JpcF9kZXZpY2UsIHRjcF90eCk7CisJc3RydWN0IHN0dWJfZGV2aWNlICpzZGV2ID0gY29udGFpbmVyX29mKHVkLCBzdHJ1Y3Qgc3R1Yl9kZXZpY2UsIHVkKTsKKworCXdoaWxlICgxKSB7CisJCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkgeworCQkJZGJnX3N0dWJfdHgoInNpZ25hbCBjYXRjaGVkXG4iKTsKKwkJCWJyZWFrOworCQl9CisKKwkJaWYgKHVzYmlwX2V2ZW50X2hhcHBlbmQodWQpKQorCQkJYnJlYWs7CisKKwkJLyoKKwkJICogc2VuZF9yZXRfc3VibWl0IGNvbWVzIGVhcmxpZXIgdGhhbiBzZW5kX3JldF91bmxpbmsuICBzdHViX3J4CisJCSAqIGxvb2tzIGF0IG9ubHkgcHJpdl9pbml0IHF1ZXVlLiBJZiB0aGUgY29tcGxldGlvbiBvZiBhIFVSQiBpcworCQkgKiBlYXJsaWVyIHRoYW4gdGhlIHJlY2VpdmUgb2YgQ01EX1VOTElOSywgcHJpdiBpcyBtb3ZlZCB0bworCQkgKiBwcml2X3R4IHF1ZXVlIGFuZCBzdHViX3J4IGRvZXMgbm90IGZpbmQgdGhlIHRhcmdldCBwcml2LiBJbgorCQkgKiB0aGlzIGNhc2UsIHZoY2lfcnggcmVjZWl2ZXMgdGhlIHJlc3VsdCBvZiB0aGUgc3VibWl0IHJlcXVlc3QKKwkJICogYW5kIHRoZW4gcmVjZWl2ZXMgdGhlIHJlc3VsdCBvZiB0aGUgdW5saW5rIHJlcXVlc3QuIFRoZQorCQkgKiByZXN1bHQgb2YgdGhlIHN1Ym1pdCBpcyBnaXZlbiBiYWNrIHRvIHRoZSB1c2Jjb3JlIGFzIHRoZQorCQkgKiBjb21wbGV0aW9uIG9mIHRoZSB1bmxpbmsgcmVxdWVzdC4gVGhlIHJlcXVlc3Qgb2YgdGhlCisJCSAqIHVubGluayBpcyBpZ25vcmVkLiBUaGlzIGlzIG9rIGJlY2F1c2UgYSBkcml2ZXIgd2hvIGNhbGxzCisJCSAqIHVzYl91bmxpbmtfdXJiKCkgdW5kZXJzdGFuZHMgdGhlIHVubGluayB3YXMgdG9vIGxhdGUgYnkKKwkJICogZ2V0dGluZyB0aGUgc3RhdHVzIG9mIHRoZSBnaXZlbi1iYWNrZWQgVVJCIHdoaWNoIGhhcyB0aGUKKwkJICogc3RhdHVzIG9mIHVzYl9zdWJtaXRfdXJiKCkuCisJCSAqLworCQlpZiAoc3R1Yl9zZW5kX3JldF9zdWJtaXQoc2RldikgPCAwKQorCQkJYnJlYWs7CisKKwkJaWYgKHN0dWJfc2VuZF9yZXRfdW5saW5rKHNkZXYpIDwgMCkKKwkJCWJyZWFrOworCisJCXdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZShzZGV2LT50eF93YWl0cSwKKwkJCQkoIWxpc3RfZW1wdHkoJnNkZXYtPnByaXZfdHgpIHx8CisJCQkJICFsaXN0X2VtcHR5KCZzZGV2LT51bmxpbmtfdHgpKSk7CisJfQorfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3VzYmlwL3VzYmlwX2NvbW1vbi5jIGIvZHJpdmVycy9zdGFnaW5nL3VzYmlwL3VzYmlwX2NvbW1vbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2NDkxOGYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvdXNiaXAvdXNiaXBfY29tbW9uLmMKQEAgLTAsMCArMSw5OTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMtMjAwOCBUYWthaGlybyBIaXJvZnVjaGkKKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorICogVVNBLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9maWxlLmg+CisjaW5jbHVkZSA8bGludXgvdGNwLmg+CisjaW5jbHVkZSA8bGludXgvaW4uaD4KKyNpbmNsdWRlICJ1c2JpcF9jb21tb24uaCIKKworLyogdmVyc2lvbiBpbmZvcm1hdGlvbiAqLworI2RlZmluZSBEUklWRVJfVkVSU0lPTiAiMS4wIgorI2RlZmluZSBEUklWRVJfQVVUSE9SICJUYWthaGlybyBIaXJvZnVjaGkgPGhpcm9mdWNoaSBfYXRfIHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4iCisjZGVmaW5lIERSSVZFUl9ERVNDICJ1c2JpcCBjb21tb24gZHJpdmVyIgorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogZGVidWcgcm91dGluZXMgKi8KKworI2lmZGVmIENPTkZJR19VU0JfREVCVUcKK3Vuc2lnbmVkIGxvbmcgdXNiaXBfZGVidWdfZmxhZyA9IDB4ZmZmZmZmZmY7CisjZWxzZQordW5zaWduZWQgbG9uZyB1c2JpcF9kZWJ1Z19mbGFnOworI2VuZGlmCitFWFBPUlRfU1lNQk9MX0dQTCh1c2JpcF9kZWJ1Z19mbGFnKTsKKworCisvKiBGSVhNRSAqLworc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgZGV2X2F0dHJfdXNiaXBfZGVidWc7CitFWFBPUlRfU1lNQk9MX0dQTChkZXZfYXR0cl91c2JpcF9kZWJ1Zyk7CisKKworc3RhdGljIHNzaXplX3Qgc2hvd19mbGFnKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkJCQkJCWNoYXIgKmJ1ZikKK3sKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlbHhcbiIsIHVzYmlwX2RlYnVnX2ZsYWcpOworfQorCitzdGF0aWMgc3NpemVfdCBzdG9yZV9mbGFnKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCWNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCXVuc2lnbmVkIGxvbmcgZmxhZzsKKworCXNzY2FuZihidWYsICIlbHgiLCAmZmxhZyk7CisJdXNiaXBfZGVidWdfZmxhZyA9IGZsYWc7CisKKwlyZXR1cm4gY291bnQ7Cit9CitERVZJQ0VfQVRUUih1c2JpcF9kZWJ1ZywgKFNfSVJVR08gfCBTX0lXVVNSKSwgc2hvd19mbGFnLCBzdG9yZV9mbGFnKTsKKworc3RhdGljIHZvaWQgdXNiaXBfZHVtcF9idWZmZXIoY2hhciAqYnVmZiwgaW50IGJ1ZmZsZW4pCit7CisJaW50IGk7CisKKwlpZiAoYnVmZmxlbiA+IDEyOCkgeworCQlmb3IgKGkgPSAwOyBpIDwgMTI4OyBpKyspIHsKKwkJCWlmIChpJTI0ID09IDApCisJCQkJcHJpbnRrKCIgICAiKTsKKwkJCXByaW50aygiJTAyeCAiLCAodW5zaWduZWQgY2hhcikgYnVmZltpXSk7CisJCQlpZiAoaSU0ID09IDMpCisJCQkJcHJpbnRrKCJ8ICIpOworCQkJaWYgKGklMjQgPT0gMjMpCisJCQkJcHJpbnRrKCJcbiIpOworCQl9CisJCXByaW50aygiLi4uICglZCBieXRlKVxuIiwgYnVmZmxlbik7CisJCXJldHVybjsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgYnVmZmxlbjsgaSsrKSB7CisJCWlmIChpJTI0ID09IDApCisJCQlwcmludGsoIiAgICIpOworCQlwcmludGsoIiUwMnggIiwgKHVuc2lnbmVkIGNoYXIpIGJ1ZmZbaV0pOworCQlpZiAoaSU0ID09IDMpCisJCQlwcmludGsoInwgIik7CisJCWlmIChpJTI0ID09IDIzKQorCQkJcHJpbnRrKCJcbiIpOworCX0KKwlwcmludGsoIlxuIik7CisKK30KKworc3RhdGljIHZvaWQgdXNiaXBfZHVtcF9waXBlKHVuc2lnbmVkIGludCBwKQoreworCXVuc2lnbmVkIGNoYXIgdHlwZSA9IHVzYl9waXBldHlwZShwKTsKKwl1bnNpZ25lZCBjaGFyIGVwID0gdXNiX3BpcGVlbmRwb2ludChwKTsKKwl1bnNpZ25lZCBjaGFyIGRldiA9IHVzYl9waXBlZGV2aWNlKHApOworCXVuc2lnbmVkIGNoYXIgZGlyID0gdXNiX3BpcGVpbihwKTsKKworCXByaW50aygiZGV2KCVkKSAiLCBkZXYpOworCXByaW50aygiZXAoJWQpICIsICBlcCk7CisJcHJpbnRrKCIlcyAiLCBkaXIgPyAiSU4iIDogIk9VVCIpOworCisJc3dpdGNoICh0eXBlKSB7CisJY2FzZSBQSVBFX0lTT0NIUk9OT1VTOgorCQlwcmludGsoIiVzICIsICJJU08iKTsKKwkJYnJlYWs7CisJY2FzZSBQSVBFX0lOVEVSUlVQVDoKKwkJcHJpbnRrKCIlcyAiLCAiSU5UIik7CisJCWJyZWFrOworCWNhc2UgUElQRV9DT05UUk9MOgorCQlwcmludGsoIiVzICIsICJDVEwiKTsKKwkJYnJlYWs7CisJY2FzZSBQSVBFX0JVTEs6CisJCXByaW50aygiJXMgIiwgIkJMSyIpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlwcmludGsoIkVSUiIpOworCX0KKworCXByaW50aygiXG4iKTsKKworfQorCitzdGF0aWMgdm9pZCB1c2JpcF9kdW1wX3VzYl9kZXZpY2Uoc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJnVkZXYtPmRldjsKKwlpbnQgaTsKKworCWRldl9kYmcoZGV2LCAiICAgICAgIGRldm51bSglZCkgZGV2cGF0aCglcykiLAorCQl1ZGV2LT5kZXZudW0sIHVkZXYtPmRldnBhdGgpOworCisJc3dpdGNoICh1ZGV2LT5zcGVlZCkgeworCWNhc2UgVVNCX1NQRUVEX0hJR0g6CisJCXByaW50aygiIFNQRF9ISUdIIik7CisJCWJyZWFrOworCWNhc2UgVVNCX1NQRUVEX0ZVTEw6CisJCXByaW50aygiIFNQRF9GVUxMIik7CisJCWJyZWFrOworCWNhc2UgVVNCX1NQRUVEX0xPVzoKKwkJcHJpbnRrKCIgU1BEX0xPVyIpOworCQlicmVhazsKKwljYXNlIFVTQl9TUEVFRF9VTktOT1dOOgorCQlwcmludGsoIiBTUERfVU5LTk9XTiIpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlwcmludGsoIiBTUERfRVJST1IiKTsKKwl9CisKKwlwcmludGsoIiB0dCAlcCwgdHRwb3J0ICVkIiwgdWRldi0+dHQsIHVkZXYtPnR0cG9ydCk7CisJcHJpbnRrKCJcbiIpOworCisJZGV2X2RiZyhkZXYsICIgICAgICAgICAgICAgICAgICAgICIpOworCWZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKQorCQlwcmludGsoIiAlMnUiLCBpKTsKKwlwcmludGsoIlxuIik7CisKKwlkZXZfZGJnKGRldiwgIiAgICAgICB0b2dnbGUwKElOKSA6Iik7CisJZm9yIChpID0gMDsgaSA8IDE2OyBpKyspCisJCXByaW50aygiICUydSIsICh1ZGV2LT50b2dnbGVbMF0gJiAoMSA8PCBpKSkgPyAxIDogMCk7CisJcHJpbnRrKCJcbiIpOworCisJZGV2X2RiZyhkZXYsICIgICAgICAgdG9nZ2xlMShPVVQpOiIpOworCWZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKQorCQlwcmludGsoIiAlMnUiLCAodWRldi0+dG9nZ2xlWzFdICYgKDEgPDwgaSkpID8gMSA6IDApOworCXByaW50aygiXG4iKTsKKworCisJZGV2X2RiZyhkZXYsICIgICAgICAgZXBtYXhwX2luICAgOiIpOworCWZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKSB7CisJCWlmICh1ZGV2LT5lcF9pbltpXSkKKwkJCXByaW50aygiICUydSIsCisJCQkgICAgIGxlMTZfdG9fY3B1KHVkZXYtPmVwX2luW2ldLT5kZXNjLndNYXhQYWNrZXRTaXplKSk7CisJfQorCXByaW50aygiXG4iKTsKKworCWRldl9kYmcoZGV2LCAiICAgICAgIGVwbWF4cF9vdXQgIDoiKTsKKwlmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykgeworCQlpZiAodWRldi0+ZXBfb3V0W2ldKQorCQkJcHJpbnRrKCIgJTJ1IiwKKwkJCSAgICAgbGUxNl90b19jcHUodWRldi0+ZXBfb3V0W2ldLT5kZXNjLndNYXhQYWNrZXRTaXplKSk7CisJfQorCXByaW50aygiXG4iKTsKKworCWRldl9kYmcoZGV2LCAicGFyZW50ICVwLCBidXMgJXBcbiIsIHVkZXYtPnBhcmVudCwgdWRldi0+YnVzKTsKKworCWRldl9kYmcoZGV2LCAiZGVzY3JpcHRvciAlcCwgY29uZmlnICVwLCBhY3Rjb25maWcgJXAsICIKKwkJInJhd2Rlc2NyaXB0b3JzICVwXG4iLCAmdWRldi0+ZGVzY3JpcHRvciwgdWRldi0+Y29uZmlnLAorCQl1ZGV2LT5hY3Rjb25maWcsIHVkZXYtPnJhd2Rlc2NyaXB0b3JzKTsKKworCWRldl9kYmcoZGV2LCAiaGF2ZV9sYW5naWQgJWQsIHN0cmluZ19sYW5naWQgJWRcbiIsCisJCXVkZXYtPmhhdmVfbGFuZ2lkLCB1ZGV2LT5zdHJpbmdfbGFuZ2lkKTsKKworCWRldl9kYmcoZGV2LCAibWF4Y2hpbGQgJWQsIGNoaWxkcmVuICVwXG4iLAorCQl1ZGV2LT5tYXhjaGlsZCwgdWRldi0+Y2hpbGRyZW4pOworfQorCitzdGF0aWMgdm9pZCB1c2JpcF9kdW1wX3JlcXVlc3RfdHlwZShfX3U4IHJ0KQoreworCXN3aXRjaCAocnQgJiBVU0JfUkVDSVBfTUFTSykgeworCWNhc2UgVVNCX1JFQ0lQX0RFVklDRToKKwkJcHJpbnRrKCJERVZJQ0UiKTsKKwkJYnJlYWs7CisJY2FzZSBVU0JfUkVDSVBfSU5URVJGQUNFOgorCQlwcmludGsoIklOVEVSRiIpOworCQlicmVhazsKKwljYXNlIFVTQl9SRUNJUF9FTkRQT0lOVDoKKwkJcHJpbnRrKCJFTkRQT0kiKTsKKwkJYnJlYWs7CisJY2FzZSBVU0JfUkVDSVBfT1RIRVI6CisJCXByaW50aygiT1RIRVIgIik7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXByaW50aygiLS0tLS0tIik7CisJfQorfQorCitzdGF0aWMgdm9pZCB1c2JpcF9kdW1wX3VzYl9jdHJscmVxdWVzdChzdHJ1Y3QgdXNiX2N0cmxyZXF1ZXN0ICpjbWQpCit7CisJaWYgKCFjbWQpIHsKKwkJcHJpbnRrKCIgICAgICAlcyA6IG51bGwgcG9pbnRlclxuIiwgX19GVU5DVElPTl9fKTsKKwkJcmV0dXJuOworCX0KKworCXByaW50aygiICAgICAgICIpOworCXByaW50aygiYlJlcXVlc3RUeXBlKCUwMlgpICIsIGNtZC0+YlJlcXVlc3RUeXBlKTsKKwlwcmludGsoImJSZXF1ZXN0KCUwMlgpICIgLCBjbWQtPmJSZXF1ZXN0KTsKKwlwcmludGsoIndWYWx1ZSglMDRYKSAiLCBjbWQtPndWYWx1ZSk7CisJcHJpbnRrKCJ3SW5kZXgoJTA0WCkgIiwgY21kLT53SW5kZXgpOworCXByaW50aygid0xlbmd0aCglMDRYKSAiLCBjbWQtPndMZW5ndGgpOworCisJcHJpbnRrKCJcbiAgICAgICAiKTsKKworCWlmICgoY21kLT5iUmVxdWVzdFR5cGUgJiBVU0JfVFlQRV9NQVNLKSA9PSBVU0JfVFlQRV9TVEFOREFSRCkgeworCQlwcmludGsoIlNUQU5EQVJEICIpOworCQlzd2l0Y2ggKGNtZC0+YlJlcXVlc3QpIHsKKwkJY2FzZSBVU0JfUkVRX0dFVF9TVEFUVVM6CisJCQlwcmludGsoIkdFVF9TVEFUVVMiKTsKKwkJCWJyZWFrOworCQljYXNlIFVTQl9SRVFfQ0xFQVJfRkVBVFVSRToKKwkJCXByaW50aygiQ0xFQVJfRkVBVCIpOworCQkJYnJlYWs7CisJCWNhc2UgVVNCX1JFUV9TRVRfRkVBVFVSRToKKwkJCXByaW50aygiU0VUX0ZFQVQgICIpOworCQkJYnJlYWs7CisJCWNhc2UgVVNCX1JFUV9TRVRfQUREUkVTUzoKKwkJCXByaW50aygiU0VUX0FERFJSUyIpOworCQkJYnJlYWs7CisJCWNhc2UgVVNCX1JFUV9HRVRfREVTQ1JJUFRPUjoKKwkJCXByaW50aygiR0VUX0RFU0NSSSIpOworCQkJYnJlYWs7CisJCWNhc2UgVVNCX1JFUV9TRVRfREVTQ1JJUFRPUjoKKwkJCXByaW50aygiU0VUX0RFU0NSSSIpOworCQkJYnJlYWs7CisJCWNhc2UgVVNCX1JFUV9HRVRfQ09ORklHVVJBVElPTjoKKwkJCXByaW50aygiR0VUX0NPTkZJRyIpOworCQkJYnJlYWs7CisJCWNhc2UgVVNCX1JFUV9TRVRfQ09ORklHVVJBVElPTjoKKwkJCXByaW50aygiU0VUX0NPTkZJRyIpOworCQkJYnJlYWs7CisJCWNhc2UgVVNCX1JFUV9HRVRfSU5URVJGQUNFOgorCQkJcHJpbnRrKCJHRVRfSU5URVJGIik7CisJCQlicmVhazsKKwkJY2FzZSBVU0JfUkVRX1NFVF9JTlRFUkZBQ0U6CisJCQlwcmludGsoIlNFVF9JTlRFUkYiKTsKKwkJCWJyZWFrOworCQljYXNlIFVTQl9SRVFfU1lOQ0hfRlJBTUU6CisJCQlwcmludGsoIlNZTkNfRlJBTUUiKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcHJpbnRrKCJSRVEoJTAyWCkgIiwgY21kLT5iUmVxdWVzdCk7CisJCX0KKworCQlwcmludGsoIiAiKTsKKwkJdXNiaXBfZHVtcF9yZXF1ZXN0X3R5cGUoY21kLT5iUmVxdWVzdFR5cGUpOworCisJfSBlbHNlIGlmICgoY21kLT5iUmVxdWVzdFR5cGUgJiBVU0JfVFlQRV9NQVNLKSA9PSBVU0JfVFlQRV9DTEFTUykKKwkJcHJpbnRrKCJDTEFTUyAgICIpOworCisJZWxzZSBpZiAoKGNtZC0+YlJlcXVlc3RUeXBlICYgVVNCX1RZUEVfTUFTSykgPT0gVVNCX1RZUEVfVkVORE9SKQorCQlwcmludGsoIlZFTkRPUiAgIik7CisKKwllbHNlIGlmICgoY21kLT5iUmVxdWVzdFR5cGUgJiBVU0JfVFlQRV9NQVNLKSA9PSBVU0JfVFlQRV9SRVNFUlZFRCkKKwkJcHJpbnRrKCJSRVNFUlZFRCIpOworCisJcHJpbnRrKCJcbiIpOworfQorCit2b2lkIHVzYmlwX2R1bXBfdXJiKHN0cnVjdCB1cmIgKnVyYikKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXY7CisKKwlpZiAoIXVyYikgeworCQlwcmludGsoS0VSTl9ERUJVRyBLQlVJTERfTU9ETkFNRQorCQkgICAgICAgIjolczogdXJiOiBudWxsIHBvaW50ZXIhIVxuIiwgX19mdW5jX18pOworCQlyZXR1cm47CisJfQorCisJaWYgKCF1cmItPmRldikgeworCQlwcmludGsoS0VSTl9ERUJVRyBLQlVJTERfTU9ETkFNRQorCQkgICAgICAgIjolczogdXJiLT5kZXY6IG51bGwgcG9pbnRlciEhXG4iLCBfX2Z1bmNfXyk7CisJCXJldHVybjsKKwl9CisJZGV2ID0gJnVyYi0+ZGV2LT5kZXY7CisKKwlkZXZfZGJnKGRldiwgIiAgIHVyYiAgICAgICAgICAgICAgICAgICA6JXBcbiIsIHVyYik7CisJZGV2X2RiZyhkZXYsICIgICBkZXYgICAgICAgICAgICAgICAgICAgOiVwXG4iLCB1cmItPmRldik7CisKKwl1c2JpcF9kdW1wX3VzYl9kZXZpY2UodXJiLT5kZXYpOworCisJZGV2X2RiZyhkZXYsICIgICBwaXBlICAgICAgICAgICAgICAgICAgOiUwOHggIiwgdXJiLT5waXBlKTsKKworCXVzYmlwX2R1bXBfcGlwZSh1cmItPnBpcGUpOworCisJZGV2X2RiZyhkZXYsICIgICBzdGF0dXMgICAgICAgICAgICAgICAgOiVkXG4iLCB1cmItPnN0YXR1cyk7CisJZGV2X2RiZyhkZXYsICIgICB0cmFuc2Zlcl9mbGFncyAgICAgICAgOiUwOFhcbiIsIHVyYi0+dHJhbnNmZXJfZmxhZ3MpOworCWRldl9kYmcoZGV2LCAiICAgdHJhbnNmZXJfYnVmZmVyICAgICAgIDolcFxuIiwgdXJiLT50cmFuc2Zlcl9idWZmZXIpOworCWRldl9kYmcoZGV2LCAiICAgdHJhbnNmZXJfYnVmZmVyX2xlbmd0aDolZFxuIiwgdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoKTsKKwlkZXZfZGJnKGRldiwgIiAgIGFjdHVhbF9sZW5ndGggICAgICAgICA6JWRcbiIsIHVyYi0+YWN0dWFsX2xlbmd0aCk7CisJZGV2X2RiZyhkZXYsICIgICBzZXR1cF9wYWNrZXQgICAgICAgICAgOiVwXG4iLCB1cmItPnNldHVwX3BhY2tldCk7CisKKwlpZiAodXJiLT5zZXR1cF9wYWNrZXQgJiYgdXNiX3BpcGV0eXBlKHVyYi0+cGlwZSkgPT0gUElQRV9DT05UUk9MKQorCQkJdXNiaXBfZHVtcF91c2JfY3RybHJlcXVlc3QoCisJCQkoc3RydWN0IHVzYl9jdHJscmVxdWVzdCAqKXVyYi0+c2V0dXBfcGFja2V0KTsKKworCWRldl9kYmcoZGV2LCAiICAgc3RhcnRfZnJhbWUgICAgICAgICAgIDolZFxuIiwgdXJiLT5zdGFydF9mcmFtZSk7CisJZGV2X2RiZyhkZXYsICIgICBudW1iZXJfb2ZfcGFja2V0cyAgICAgOiVkXG4iLCB1cmItPm51bWJlcl9vZl9wYWNrZXRzKTsKKwlkZXZfZGJnKGRldiwgIiAgIGludGVydmFsICAgICAgICAgICAgICA6JWRcbiIsIHVyYi0+aW50ZXJ2YWwpOworCWRldl9kYmcoZGV2LCAiICAgZXJyb3JfY291bnQgICAgICAgICAgIDolZFxuIiwgdXJiLT5lcnJvcl9jb3VudCk7CisJZGV2X2RiZyhkZXYsICIgICBjb250ZXh0ICAgICAgICAgICAgICAgOiVwXG4iLCB1cmItPmNvbnRleHQpOworCWRldl9kYmcoZGV2LCAiICAgY29tcGxldGUgICAgICAgICAgICAgIDolcFxuIiwgdXJiLT5jb21wbGV0ZSk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTCh1c2JpcF9kdW1wX3VyYik7CisKK3ZvaWQgdXNiaXBfZHVtcF9oZWFkZXIoc3RydWN0IHVzYmlwX2hlYWRlciAqcGR1KQoreworCXVkYmcoIkJBU0U6IGNtZCAldSBzZXEgJXUgZGV2aWQgJXUgZGlyICV1IGVwICV1XG4iLAorCQkJcGR1LT5iYXNlLmNvbW1hbmQsCisJCQlwZHUtPmJhc2Uuc2VxbnVtLAorCQkJcGR1LT5iYXNlLmRldmlkLAorCQkJcGR1LT5iYXNlLmRpcmVjdGlvbiwKKwkJCXBkdS0+YmFzZS5lcCk7CisKKwlzd2l0Y2ggKHBkdS0+YmFzZS5jb21tYW5kKSB7CisJY2FzZSBVU0JJUF9DTURfU1VCTUlUOgorCQl1ZGJnKCJDTURfU1VCTUlUOiB4X2ZsYWdzICV1IHhfbGVuICV1IHNmICV1ICNwICV1IGl2ICV1XG4iLAorCQkJCXBkdS0+dS5jbWRfc3VibWl0LnRyYW5zZmVyX2ZsYWdzLAorCQkJCXBkdS0+dS5jbWRfc3VibWl0LnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgsCisJCQkJcGR1LT51LmNtZF9zdWJtaXQuc3RhcnRfZnJhbWUsCisJCQkJcGR1LT51LmNtZF9zdWJtaXQubnVtYmVyX29mX3BhY2tldHMsCisJCQkJcGR1LT51LmNtZF9zdWJtaXQuaW50ZXJ2YWwpOworCQkJCWJyZWFrOworCWNhc2UgVVNCSVBfQ01EX1VOTElOSzoKKwkJdWRiZygiQ01EX1VOTElOSzogc2VxICV1XG4iLCBwZHUtPnUuY21kX3VubGluay5zZXFudW0pOworCQlicmVhazsKKwljYXNlIFVTQklQX1JFVF9TVUJNSVQ6CisJCXVkYmcoIlJFVF9TVUJNSVQ6IHN0ICVkIGFsICV1IHNmICVkIGVjICVkXG4iLAorCQkJCXBkdS0+dS5yZXRfc3VibWl0LnN0YXR1cywKKwkJCQlwZHUtPnUucmV0X3N1Ym1pdC5hY3R1YWxfbGVuZ3RoLAorCQkJCXBkdS0+dS5yZXRfc3VibWl0LnN0YXJ0X2ZyYW1lLAorCQkJCXBkdS0+dS5yZXRfc3VibWl0LmVycm9yX2NvdW50KTsKKwljYXNlIFVTQklQX1JFVF9VTkxJTks6CisJCXVkYmcoIlJFVF9VTkxJTks6IHN0YXR1cyAlZFxuIiwgcGR1LT51LnJldF91bmxpbmsuc3RhdHVzKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJLyogTk9UIFJFQUNIRUQgKi8KKwkJdWRiZygiVU5LTk9XTlxuIik7CisJfQorfQorRVhQT1JUX1NZTUJPTF9HUEwodXNiaXBfZHVtcF9oZWFkZXIpOworCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiB0aHJlYWQgcm91dGluZXMgKi8KKworaW50IHVzYmlwX3RocmVhZCh2b2lkICpwYXJhbSkKK3sKKwlzdHJ1Y3QgdXNiaXBfdGFzayAqdXQgPSBwYXJhbTsKKworCWlmICghdXQpCisJCXJldHVybiAtRUlOVkFMOworCisJbG9ja19rZXJuZWwoKTsKKwlkYWVtb25pemUodXQtPm5hbWUpOworCWFsbG93X3NpZ25hbChTSUdLSUxMKTsKKwl1dC0+dGhyZWFkID0gY3VycmVudDsKKwl1bmxvY2tfa2VybmVsKCk7CisKKwkvKiBzcnYucmIgbXVzdCB3YWl0IGZvciByeF90aHJlYWQgc3RhcnRpbmcgKi8KKwljb21wbGV0ZSgmdXQtPnRocmVhZF9kb25lKTsKKworCS8qIHN0YXJ0IG9mIHdoaWxlIGxvb3AgKi8KKwl1dC0+bG9vcF9vcHModXQpOworCisJLyogZW5kIG9mIGxvb3AgKi8KKwl1dC0+dGhyZWFkID0gTlVMTDsKKworCWNvbXBsZXRlX2FuZF9leGl0KCZ1dC0+dGhyZWFkX2RvbmUsIDApOworfQorCit2b2lkIHVzYmlwX3N0YXJ0X3RocmVhZHMoc3RydWN0IHVzYmlwX2RldmljZSAqdWQpCit7CisJLyoKKwkgKiB0aHJlYWRzIGFyZSBpbnZva2VkIHBlciBvbmUgZGV2aWNlIChwZXIgb25lIGNvbm5lY3Rpb24pLgorCSAqLworCWtlcm5lbF90aHJlYWQodXNiaXBfdGhyZWFkLCAodm9pZCAqKSZ1ZC0+dGNwX3J4LCAwKTsKKwlrZXJuZWxfdGhyZWFkKHVzYmlwX3RocmVhZCwgKHZvaWQgKikmdWQtPnRjcF90eCwgMCk7CisKKwkvKiBjb25maXJtIHRocmVhZHMgYXJlIHN0YXJ0aW5nICovCisJd2FpdF9mb3JfY29tcGxldGlvbigmdWQtPnRjcF9yeC50aHJlYWRfZG9uZSk7CisJd2FpdF9mb3JfY29tcGxldGlvbigmdWQtPnRjcF90eC50aHJlYWRfZG9uZSk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTCh1c2JpcF9zdGFydF90aHJlYWRzKTsKKwordm9pZCB1c2JpcF9zdG9wX3RocmVhZHMoc3RydWN0IHVzYmlwX2RldmljZSAqdWQpCit7CisJLyoga2lsbCB0aHJlYWRzIHJlbGF0ZWQgdG8gdGhpcyBzZGV2LCBpZiB2LmMuIGV4aXN0cyAqLworCWlmICh1ZC0+dGNwX3J4LnRocmVhZCAhPSBOVUxMKSB7CisJCXNlbmRfc2lnKFNJR0tJTEwsIHVkLT50Y3BfcngudGhyZWFkLCAxKTsKKwkJd2FpdF9mb3JfY29tcGxldGlvbigmdWQtPnRjcF9yeC50aHJlYWRfZG9uZSk7CisJCXVkYmcoInJ4X3RocmVhZCBmb3IgdWQgJXAgaGFzIGZpbmlzaGVkXG4iLCB1ZCk7CisJfQorCisJaWYgKHVkLT50Y3BfdHgudGhyZWFkICE9IE5VTEwpIHsKKwkJc2VuZF9zaWcoU0lHS0lMTCwgdWQtPnRjcF90eC50aHJlYWQsIDEpOworCQl3YWl0X2Zvcl9jb21wbGV0aW9uKCZ1ZC0+dGNwX3R4LnRocmVhZF9kb25lKTsKKwkJdWRiZygidHhfdGhyZWFkIGZvciB1ZCAlcCBoYXMgZmluaXNoZWRcbiIsIHVkKTsKKwl9Cit9CitFWFBPUlRfU1lNQk9MX0dQTCh1c2JpcF9zdG9wX3RocmVhZHMpOworCit2b2lkIHVzYmlwX3Rhc2tfaW5pdChzdHJ1Y3QgdXNiaXBfdGFzayAqdXQsIGNoYXIgKm5hbWUsCisJCXZvaWQgKCpsb29wX29wcykoc3RydWN0IHVzYmlwX3Rhc2sgKikpCit7CisJdXQtPnRocmVhZCA9IE5VTEw7CisJaW5pdF9jb21wbGV0aW9uKCZ1dC0+dGhyZWFkX2RvbmUpOworCXV0LT5uYW1lID0gbmFtZTsKKwl1dC0+bG9vcF9vcHMgPSBsb29wX29wczsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHVzYmlwX3Rhc2tfaW5pdCk7CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qIHNvY2tldCByb3V0aW5lcyAqLworCisgLyogIFNlbmQvcmVjZWl2ZSBtZXNzYWdlcyBvdmVyIFRDUC9JUC4gSSByZWZlciBkcml2ZXJzL2Jsb2NrL25iZC5jICovCitpbnQgdXNiaXBfeG1pdChpbnQgc2VuZCwgc3RydWN0IHNvY2tldCAqc29jaywgY2hhciAqYnVmLAorCSAgICAgICBpbnQgc2l6ZSwgaW50IG1zZ19mbGFncykKK3sKKwlpbnQgcmVzdWx0OworCXN0cnVjdCBtc2doZHIgbXNnOworCXN0cnVjdCBrdmVjIGlvdjsKKwlpbnQgdG90YWwgPSAwOworCisJLyogZm9yIGJsb2NrcyBvZiBpZiAoZGJnX2ZsYWdfeG1pdCkgKi8KKwljaGFyICpicCA9IGJ1ZjsKKwlpbnQgb3NpemUgPSBzaXplOworCisJZGJnX3htaXQoImVudGVyXG4iKTsKKworCWlmICghc29jayB8fCAhYnVmIHx8ICFzaXplKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGludmFsaWQgYXJnLCBzb2NrICVwIGJ1ZmYgJXAgc2l6ZSAlZFxuIiwKKwkJICAgICAgIF9fZnVuY19fLCBzb2NrLCBidWYsIHNpemUpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKworCWlmIChkYmdfZmxhZ194bWl0KSB7CisJCWlmIChzZW5kKSB7CisJCQlpZiAoIWluX2ludGVycnVwdCgpKQorCQkJCXByaW50ayhLRVJOX0RFQlVHICIlLTEwczoiLCBjdXJyZW50LT5jb21tKTsKKwkJCWVsc2UKKwkJCQlwcmludGsoS0VSTl9ERUJVRyAiaW50ZXJ1cHQgIDoiKTsKKworCQkJcHJpbnRrKCIlczogc2VuZGluZy4uLiAsIHNvY2sgJXAsIGJ1ZiAlcCwgIgorCQkJICAgICAgICJzaXplICVkLCBtc2dfZmxhZ3MgJWRcbiIsIF9fZnVuY19fLAorCQkJICAgICAgIHNvY2ssIGJ1Ziwgc2l6ZSwgbXNnX2ZsYWdzKTsKKwkJCXVzYmlwX2R1bXBfYnVmZmVyKGJ1Ziwgc2l6ZSk7CisJCX0KKwl9CisKKworCWRvIHsKKwkJc29jay0+c2stPnNrX2FsbG9jYXRpb24gPSBHRlBfTk9JTzsKKwkJaW92Lmlvdl9iYXNlICAgID0gYnVmOworCQlpb3YuaW92X2xlbiAgICAgPSBzaXplOworCQltc2cubXNnX25hbWUgICAgPSBOVUxMOworCQltc2cubXNnX25hbWVsZW4gPSAwOworCQltc2cubXNnX2NvbnRyb2wgPSBOVUxMOworCQltc2cubXNnX2NvbnRyb2xsZW4gPSAwOworCQltc2cubXNnX25hbWVsZW4gICAgPSAwOworCQltc2cubXNnX2ZsYWdzICAgICAgPSBtc2dfZmxhZ3MgfCBNU0dfTk9TSUdOQUw7CisKKwkJaWYgKHNlbmQpCisJCQlyZXN1bHQgPSBrZXJuZWxfc2VuZG1zZyhzb2NrLCAmbXNnLCAmaW92LCAxLCBzaXplKTsKKwkJZWxzZQorCQkJcmVzdWx0ID0ga2VybmVsX3JlY3Ztc2coc29jaywgJm1zZywgJmlvdiwgMSwgc2l6ZSwKKwkJCQkJCQkJTVNHX1dBSVRBTEwpOworCisJCWlmIChyZXN1bHQgPD0gMCkgeworCQkJdWRiZygidXNiaXBfeG1pdDogJXMgc29jayAlcCBidWYgJXAgc2l6ZSAldSByZXQgJWQiCisJCQkJCSIgdG90YWwgJWRcbiIsCisJCQkJCXNlbmQgPyAic2VuZCIgOiAicmVjZWl2ZSIsIHNvY2ssIGJ1ZiwKKwkJCQkJc2l6ZSwgcmVzdWx0LCB0b3RhbCk7CisJCQlnb3RvIGVycjsKKwkJfQorCisJCXNpemUgLT0gcmVzdWx0OworCQlidWYgKz0gcmVzdWx0OworCQl0b3RhbCArPSByZXN1bHQ7CisKKwl9IHdoaWxlIChzaXplID4gMCk7CisKKworCWlmIChkYmdfZmxhZ194bWl0KSB7CisJCWlmICghc2VuZCkgeworCQkJaWYgKCFpbl9pbnRlcnJ1cHQoKSkKKwkJCQlwcmludGsoS0VSTl9ERUJVRyAiJS0xMHM6IiwgY3VycmVudC0+Y29tbSk7CisJCQllbHNlCisJCQkJcHJpbnRrKEtFUk5fREVCVUcgImludGVydXB0ICA6Iik7CisKKwkJCXByaW50aygidXNiaXBfeG1pdDogcmVjZWl2aW5nLi4uLlxuIik7CisJCQl1c2JpcF9kdW1wX2J1ZmZlcihicCwgb3NpemUpOworCQkJcHJpbnRrKCJ1c2JpcF94bWl0OiByZWNlaXZlZCwgb3NpemUgJWQgcmV0ICVkIHNpemUgJWQgIgorCQkJCQkidG90YWwgJWRcbiIsIG9zaXplLCByZXN1bHQsIHNpemUsCisJCQkJCXRvdGFsKTsKKwkJfQorCisJCWlmIChzZW5kKQorCQkJcHJpbnRrKCJ1c2JpcF94bWl0OiBzZW5kLCB0b3RhbCAlZFxuIiwgdG90YWwpOworCX0KKworCXJldHVybiB0b3RhbDsKKworZXJyOgorCXJldHVybiByZXN1bHQ7Cit9CitFWFBPUlRfU1lNQk9MX0dQTCh1c2JpcF94bWl0KTsKKworCisvKiBub3cgYSB1c3JsYW5kIHV0aWxpdHkgc2hvdWxkIHNldCBvcHRpb25zLiAqLworI2lmIDAKK2ludCBzZXRxdWlja2FjayhzdHJ1Y3Qgc29ja2V0ICpzb2NrZXQpCit7CisJbW1fc2VnbWVudF90IG9sZGZzOworCWludCB2YWwgPSAxOworCWludCByZXQ7CisKKwlvbGRmcyA9IGdldF9mcygpOworCXNldF9mcyhnZXRfZHMoKSk7CisJcmV0ID0gc29ja2V0LT5vcHMtPnNldHNvY2tvcHQoc29ja2V0LCBTT0xfVENQLCBUQ1BfUVVJQ0tBQ0ssCisJCQkoY2hhciBfX3VzZXIgKikgJnZhbCwgc2l6ZW9mKHJldCkpOworCXNldF9mcyhvbGRmcyk7CisKKwlyZXR1cm4gcmV0OworfQorCitpbnQgc2V0bm9kZWxheShzdHJ1Y3Qgc29ja2V0ICpzb2NrZXQpCit7CisJbW1fc2VnbWVudF90IG9sZGZzOworCWludCB2YWwgPSAxOworCWludCByZXQ7CisKKwlvbGRmcyA9IGdldF9mcygpOworCXNldF9mcyhnZXRfZHMoKSk7CisJcmV0ID0gc29ja2V0LT5vcHMtPnNldHNvY2tvcHQoc29ja2V0LCBTT0xfVENQLCBUQ1BfTk9ERUxBWSwKKwkJCShjaGFyIF9fdXNlciAqKSAmdmFsLCBzaXplb2YocmV0KSk7CisJc2V0X2ZzKG9sZGZzKTsKKworCXJldHVybiByZXQ7Cit9CisKK2ludCBzZXRrZWVwYWxpdmUoc3RydWN0IHNvY2tldCAqc29ja2V0KQoreworCW1tX3NlZ21lbnRfdCBvbGRmczsKKwlpbnQgdmFsID0gMTsKKwlpbnQgcmV0OworCisJb2xkZnMgPSBnZXRfZnMoKTsKKwlzZXRfZnMoZ2V0X2RzKCkpOworCXJldCA9IHNvY2tldC0+b3BzLT5zZXRzb2Nrb3B0KHNvY2tldCwgU09MX1NPQ0tFVCwgU09fS0VFUEFMSVZFLAorCQkJKGNoYXIgX191c2VyICopICZ2YWwsIHNpemVvZihyZXQpKTsKKwlzZXRfZnMob2xkZnMpOworCisJcmV0dXJuIHJldDsKK30KKwordm9pZCBzZXRyZXVzZShzdHJ1Y3Qgc29ja2V0ICpzb2NrZXQpCit7CisJc29ja2V0LT5zay0+c2tfcmV1c2UgPSAxOworfQorI2VuZGlmCisKK3N0cnVjdCBzb2NrZXQgKnNvY2tmZF90b19zb2NrZXQodW5zaWduZWQgaW50IHNvY2tmZCkKK3sKKwlzdHJ1Y3Qgc29ja2V0ICpzb2NrZXQ7CisJc3RydWN0IGZpbGUgKmZpbGU7CisJc3RydWN0IGlub2RlICppbm9kZTsKKworCWZpbGUgPSBmZ2V0KHNvY2tmZCk7CisJaWYgKCFmaWxlKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGludmFsaWQgc29ja2ZkXG4iLCBfX2Z1bmNfXyk7CisJCXJldHVybiBOVUxMOworCX0KKworCWlub2RlID0gZmlsZS0+Zl9kZW50cnktPmRfaW5vZGU7CisKKwlpZiAoIWlub2RlIHx8ICFTX0lTU09DSyhpbm9kZS0+aV9tb2RlKSkKKwkJcmV0dXJuIE5VTEw7CisKKwlzb2NrZXQgPSBTT0NLRVRfSShpbm9kZSk7CisKKwlyZXR1cm4gc29ja2V0OworfQorRVhQT1JUX1NZTUJPTF9HUEwoc29ja2ZkX3RvX3NvY2tldCk7CisKKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogcGR1IHJvdXRpbmVzICovCisKKy8qIHRoZXJlIG1heSBiZSBtb3JlIGNhc2VzIHRvIHR3ZWFrIHRoZSBmbGFncy4gKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQgdHdlYWtfdHJhbnNmZXJfZmxhZ3ModW5zaWduZWQgaW50IGZsYWdzKQoreworCisJaWYgKGZsYWdzICYgVVJCX05PX1RSQU5TRkVSX0RNQV9NQVApCisJCS8qCisJCSAqIHZoY2lfaGNkIGRvZXMgbm90IHByb3ZpZGUgRE1BLW1hcHBlZCBJL08uIFRoZSB1cHBlcgorCQkgKiBkcml2ZXIgZG9lcyBub3QgbmVlZCB0byBzZXQgdGhpcyBmbGFnLiBUaGUgcmVtb3RlCisJCSAqIHVzYmlwLmtvIGRvZXMgbm90IHN0aWxsIHBlcmZvcm0gRE1BLW1hcHBlZCBJL08gZm9yCisJCSAqIERNQS1jYXBsYWJsZSBob3N0IGNvbnRyb2xsZXJzLiBTbywgY2xlYXIgdGhpcyBmbGFnLgorCQkgKi8KKwkJZmxhZ3MgJj0gflVSQl9OT19UUkFOU0ZFUl9ETUFfTUFQOworCisJaWYgKGZsYWdzICYgVVJCX05PX1NFVFVQX0RNQV9NQVApCisJCWZsYWdzICY9IH5VUkJfTk9fU0VUVVBfRE1BX01BUDsKKworCXJldHVybiBmbGFnczsKK30KKworc3RhdGljIHZvaWQgdXNiaXBfcGFja19jbWRfc3VibWl0KHN0cnVjdCB1c2JpcF9oZWFkZXIgKnBkdSwgc3RydWN0IHVyYiAqdXJiLAorCQkJCQkJCQlpbnQgcGFjaykKK3sKKwlzdHJ1Y3QgdXNiaXBfaGVhZGVyX2NtZF9zdWJtaXQgKnNwZHUgPSAmcGR1LT51LmNtZF9zdWJtaXQ7CisKKwkvKgorCSAqIFNvbWUgbWVtYmVycyBhcmUgbm90IHN0aWxsIGltcGxlbWVudGVkIGluIHVzYmlwLiBJIGhvcGUgdGhpcyBpc3N1ZQorCSAqIHdpbGwgYmUgZGlzY3Vzc2VkIHdoZW4gdXNiaXAgaXMgcG9ydGVkIHRvIG90aGVyIG9wZXJhdGluZyBzeXN0ZW1zLgorCSAqLworCWlmIChwYWNrKSB7CisJCS8qIHZoY2lfdHguYyAqLworCQlzcGR1LT50cmFuc2Zlcl9mbGFncyA9CisJCQkJdHdlYWtfdHJhbnNmZXJfZmxhZ3ModXJiLT50cmFuc2Zlcl9mbGFncyk7CisJCXNwZHUtPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgJPSB1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGg7CisJCXNwZHUtPnN0YXJ0X2ZyYW1lCQk9IHVyYi0+c3RhcnRfZnJhbWU7CisJCXNwZHUtPm51bWJlcl9vZl9wYWNrZXRzCQk9IHVyYi0+bnVtYmVyX29mX3BhY2tldHM7CisJCXNwZHUtPmludGVydmFsCQkJPSB1cmItPmludGVydmFsOworCX0gZWxzZSAgeworCQkvKiBzdHViX3J4LmMgKi8KKwkJdXJiLT50cmFuc2Zlcl9mbGFncyAgICAgICAgID0gc3BkdS0+dHJhbnNmZXJfZmxhZ3M7CisKKwkJdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoID0gc3BkdS0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aDsKKwkJdXJiLT5zdGFydF9mcmFtZSAgICAgICAgICAgID0gc3BkdS0+c3RhcnRfZnJhbWU7CisJCXVyYi0+bnVtYmVyX29mX3BhY2tldHMgICAgICA9IHNwZHUtPm51bWJlcl9vZl9wYWNrZXRzOworCQl1cmItPmludGVydmFsICAgICAgICAgICAgICAgPSBzcGR1LT5pbnRlcnZhbDsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHVzYmlwX3BhY2tfcmV0X3N1Ym1pdChzdHJ1Y3QgdXNiaXBfaGVhZGVyICpwZHUsIHN0cnVjdCB1cmIgKnVyYiwKKwkJCQkJCQkJaW50IHBhY2spCit7CisJc3RydWN0IHVzYmlwX2hlYWRlcl9yZXRfc3VibWl0ICpycGR1ID0gJnBkdS0+dS5yZXRfc3VibWl0OworCisJaWYgKHBhY2spIHsKKwkJLyogc3R1Yl90eC5jICovCisKKwkJcnBkdS0+c3RhdHVzCQk9IHVyYi0+c3RhdHVzOworCQlycGR1LT5hY3R1YWxfbGVuZ3RoCT0gdXJiLT5hY3R1YWxfbGVuZ3RoOworCQlycGR1LT5zdGFydF9mcmFtZQk9IHVyYi0+c3RhcnRfZnJhbWU7CisJCXJwZHUtPmVycm9yX2NvdW50CT0gdXJiLT5lcnJvcl9jb3VudDsKKwl9IGVsc2UgeworCQkvKiB2aGNpX3J4LmMgKi8KKworCQl1cmItPnN0YXR1cwkJPSBycGR1LT5zdGF0dXM7CisJCXVyYi0+YWN0dWFsX2xlbmd0aAk9IHJwZHUtPmFjdHVhbF9sZW5ndGg7CisJCXVyYi0+c3RhcnRfZnJhbWUJPSBycGR1LT5zdGFydF9mcmFtZTsKKwkJdXJiLT5lcnJvcl9jb3VudAk9IHJwZHUtPmVycm9yX2NvdW50OworCX0KK30KKworCit2b2lkIHVzYmlwX3BhY2tfcGR1KHN0cnVjdCB1c2JpcF9oZWFkZXIgKnBkdSwgc3RydWN0IHVyYiAqdXJiLCBpbnQgY21kLAorCQkJCQkJCQlpbnQgcGFjaykKK3sKKwlzd2l0Y2ggKGNtZCkgeworCWNhc2UgVVNCSVBfQ01EX1NVQk1JVDoKKwkJdXNiaXBfcGFja19jbWRfc3VibWl0KHBkdSwgdXJiLCBwYWNrKTsKKwkJYnJlYWs7CisJY2FzZSBVU0JJUF9SRVRfU1VCTUlUOgorCQl1c2JpcF9wYWNrX3JldF9zdWJtaXQocGR1LCB1cmIsIHBhY2spOworCQlicmVhazsKKwlkZWZhdWx0OgorCQllcnIoInVua25vd24gY29tbWFuZCIpOworCQkvKiBOT1RSRUFDSEVEICovCisJCS8qIEJVRygpOyAqLworCX0KK30KK0VYUE9SVF9TWU1CT0xfR1BMKHVzYmlwX3BhY2tfcGR1KTsKKworCitzdGF0aWMgdm9pZCBjb3JyZWN0X2VuZGlhbl9iYXNpYyhzdHJ1Y3QgdXNiaXBfaGVhZGVyX2Jhc2ljICpiYXNlLCBpbnQgc2VuZCkKK3sKKwlpZiAoc2VuZCkgeworCQliYXNlLT5jb21tYW5kCT0gY3B1X3RvX2JlMzIoYmFzZS0+Y29tbWFuZCk7CisJCWJhc2UtPnNlcW51bQk9IGNwdV90b19iZTMyKGJhc2UtPnNlcW51bSk7CisJCWJhc2UtPmRldmlkCT0gY3B1X3RvX2JlMzIoYmFzZS0+ZGV2aWQpOworCQliYXNlLT5kaXJlY3Rpb24JPSBjcHVfdG9fYmUzMihiYXNlLT5kaXJlY3Rpb24pOworCQliYXNlLT5lcAk9IGNwdV90b19iZTMyKGJhc2UtPmVwKTsKKwl9IGVsc2UgeworCQliYXNlLT5jb21tYW5kCT0gYmUzMl90b19jcHUoYmFzZS0+Y29tbWFuZCk7CisJCWJhc2UtPnNlcW51bQk9IGJlMzJfdG9fY3B1KGJhc2UtPnNlcW51bSk7CisJCWJhc2UtPmRldmlkCT0gYmUzMl90b19jcHUoYmFzZS0+ZGV2aWQpOworCQliYXNlLT5kaXJlY3Rpb24JPSBiZTMyX3RvX2NwdShiYXNlLT5kaXJlY3Rpb24pOworCQliYXNlLT5lcAk9IGJlMzJfdG9fY3B1KGJhc2UtPmVwKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGNvcnJlY3RfZW5kaWFuX2NtZF9zdWJtaXQoc3RydWN0IHVzYmlwX2hlYWRlcl9jbWRfc3VibWl0ICpwZHUsCisJCQkJCQkJCWludCBzZW5kKQoreworCWlmIChzZW5kKSB7CisJCXBkdS0+dHJhbnNmZXJfZmxhZ3MgPSBjcHVfdG9fYmUzMihwZHUtPnRyYW5zZmVyX2ZsYWdzKTsKKworCQljcHVfdG9fYmUzMnMoJnBkdS0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCk7CisJCWNwdV90b19iZTMycygmcGR1LT5zdGFydF9mcmFtZSk7CisJCWNwdV90b19iZTMycygmcGR1LT5udW1iZXJfb2ZfcGFja2V0cyk7CisJCWNwdV90b19iZTMycygmcGR1LT5pbnRlcnZhbCk7CisJfSBlbHNlIHsKKwkJcGR1LT50cmFuc2Zlcl9mbGFncyA9IGJlMzJfdG9fY3B1KHBkdS0+dHJhbnNmZXJfZmxhZ3MpOworCisJCWJlMzJfdG9fY3B1cygmcGR1LT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoKTsKKwkJYmUzMl90b19jcHVzKCZwZHUtPnN0YXJ0X2ZyYW1lKTsKKwkJYmUzMl90b19jcHVzKCZwZHUtPm51bWJlcl9vZl9wYWNrZXRzKTsKKwkJYmUzMl90b19jcHVzKCZwZHUtPmludGVydmFsKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGNvcnJlY3RfZW5kaWFuX3JldF9zdWJtaXQoc3RydWN0IHVzYmlwX2hlYWRlcl9yZXRfc3VibWl0ICpwZHUsCisJCQkJCQkJCWludCBzZW5kKQoreworCWlmIChzZW5kKSB7CisJCWNwdV90b19iZTMycygmcGR1LT5zdGF0dXMpOworCQljcHVfdG9fYmUzMnMoJnBkdS0+YWN0dWFsX2xlbmd0aCk7CisJCWNwdV90b19iZTMycygmcGR1LT5zdGFydF9mcmFtZSk7CisJCWNwdV90b19iZTMycygmcGR1LT5lcnJvcl9jb3VudCk7CisJfSBlbHNlIHsKKwkJYmUzMl90b19jcHVzKCZwZHUtPnN0YXR1cyk7CisJCWJlMzJfdG9fY3B1cygmcGR1LT5hY3R1YWxfbGVuZ3RoKTsKKwkJYmUzMl90b19jcHVzKCZwZHUtPnN0YXJ0X2ZyYW1lKTsKKwkJYmUzMl90b19jcHVzKCZwZHUtPmVycm9yX2NvdW50KTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGNvcnJlY3RfZW5kaWFuX2NtZF91bmxpbmsoc3RydWN0IHVzYmlwX2hlYWRlcl9jbWRfdW5saW5rICpwZHUsCisJCQkJCQkJCWludCBzZW5kKQoreworCWlmIChzZW5kKQorCQlwZHUtPnNlcW51bSA9IGNwdV90b19iZTMyKHBkdS0+c2VxbnVtKTsKKwllbHNlCisJCXBkdS0+c2VxbnVtID0gYmUzMl90b19jcHUocGR1LT5zZXFudW0pOworfQorCitzdGF0aWMgdm9pZCBjb3JyZWN0X2VuZGlhbl9yZXRfdW5saW5rKHN0cnVjdCB1c2JpcF9oZWFkZXJfcmV0X3VubGluayAqcGR1LAorCQkJCQkJCQlpbnQgc2VuZCkKK3sKKwlpZiAoc2VuZCkKKwkJY3B1X3RvX2JlMzJzKCZwZHUtPnN0YXR1cyk7CisJZWxzZQorCQliZTMyX3RvX2NwdXMoJnBkdS0+c3RhdHVzKTsKK30KKwordm9pZCB1c2JpcF9oZWFkZXJfY29ycmVjdF9lbmRpYW4oc3RydWN0IHVzYmlwX2hlYWRlciAqcGR1LCBpbnQgc2VuZCkKK3sKKwlfX3UzMiBjbWQgPSAwOworCisJaWYgKHNlbmQpCisJCWNtZCA9IHBkdS0+YmFzZS5jb21tYW5kOworCisJY29ycmVjdF9lbmRpYW5fYmFzaWMoJnBkdS0+YmFzZSwgc2VuZCk7CisKKwlpZiAoIXNlbmQpCisJCWNtZCA9IHBkdS0+YmFzZS5jb21tYW5kOworCisJc3dpdGNoIChjbWQpIHsKKwljYXNlIFVTQklQX0NNRF9TVUJNSVQ6CisJCWNvcnJlY3RfZW5kaWFuX2NtZF9zdWJtaXQoJnBkdS0+dS5jbWRfc3VibWl0LCBzZW5kKTsKKwkJYnJlYWs7CisJY2FzZSBVU0JJUF9SRVRfU1VCTUlUOgorCQljb3JyZWN0X2VuZGlhbl9yZXRfc3VibWl0KCZwZHUtPnUucmV0X3N1Ym1pdCwgc2VuZCk7CisJCWJyZWFrOworCWNhc2UgVVNCSVBfQ01EX1VOTElOSzoKKwkJY29ycmVjdF9lbmRpYW5fY21kX3VubGluaygmcGR1LT51LmNtZF91bmxpbmssIHNlbmQpOworCQlicmVhazsKKwljYXNlIFVTQklQX1JFVF9VTkxJTks6CisJCWNvcnJlY3RfZW5kaWFuX3JldF91bmxpbmsoJnBkdS0+dS5yZXRfdW5saW5rLCBzZW5kKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJLyogTk9UUkVBQ0hFRCAqLworCQllcnIoInVua25vd24gY29tbWFuZCBpbiBwZHUgaGVhZGVyOiAlZCIsIGNtZCk7CisJCS8qIEJVRygpOyAqLworCX0KK30KK0VYUE9SVF9TWU1CT0xfR1BMKHVzYmlwX2hlYWRlcl9jb3JyZWN0X2VuZGlhbik7CisKK3N0YXRpYyB2b2lkIHVzYmlwX2lzb19wYWtjZXRfY29ycmVjdF9lbmRpYW4oCisJCQkJc3RydWN0IHVzYmlwX2lzb19wYWNrZXRfZGVzY3JpcHRvciAqaXNvLAorCQkJCWludCBzZW5kKQoreworCS8qIGRvZXMgbm90IG5lZWQgYWxsIG1lbWJlcnMuIGJ1dCBjb3B5IGFsbCBzaW1wbHkuICovCisJaWYgKHNlbmQpIHsKKwkJaXNvLT5vZmZzZXQJPSBjcHVfdG9fYmUzMihpc28tPm9mZnNldCk7CisJCWlzby0+bGVuZ3RoCT0gY3B1X3RvX2JlMzIoaXNvLT5sZW5ndGgpOworCQlpc28tPnN0YXR1cwk9IGNwdV90b19iZTMyKGlzby0+c3RhdHVzKTsKKwkJaXNvLT5hY3R1YWxfbGVuZ3RoID0gY3B1X3RvX2JlMzIoaXNvLT5hY3R1YWxfbGVuZ3RoKTsKKwl9IGVsc2UgeworCQlpc28tPm9mZnNldAk9IGJlMzJfdG9fY3B1KGlzby0+b2Zmc2V0KTsKKwkJaXNvLT5sZW5ndGgJPSBiZTMyX3RvX2NwdShpc28tPmxlbmd0aCk7CisJCWlzby0+c3RhdHVzCT0gYmUzMl90b19jcHUoaXNvLT5zdGF0dXMpOworCQlpc28tPmFjdHVhbF9sZW5ndGggPSBiZTMyX3RvX2NwdShpc28tPmFjdHVhbF9sZW5ndGgpOworCX0KK30KKworc3RhdGljIHZvaWQgdXNiaXBfcGFja19pc28oc3RydWN0IHVzYmlwX2lzb19wYWNrZXRfZGVzY3JpcHRvciAqaXNvLAorCQlzdHJ1Y3QgdXNiX2lzb19wYWNrZXRfZGVzY3JpcHRvciAqdWlzbywgaW50IHBhY2spCit7CisJaWYgKHBhY2spIHsKKwkJaXNvLT5vZmZzZXQJCT0gdWlzby0+b2Zmc2V0OworCQlpc28tPmxlbmd0aAkJPSB1aXNvLT5sZW5ndGg7CisJCWlzby0+c3RhdHVzCQk9IHVpc28tPnN0YXR1czsKKwkJaXNvLT5hY3R1YWxfbGVuZ3RoCT0gdWlzby0+YWN0dWFsX2xlbmd0aDsKKwl9IGVsc2UgeworCQl1aXNvLT5vZmZzZXQJCT0gaXNvLT5vZmZzZXQ7CisJCXVpc28tPmxlbmd0aAkJPSBpc28tPmxlbmd0aDsKKwkJdWlzby0+c3RhdHVzCQk9IGlzby0+c3RhdHVzOworCQl1aXNvLT5hY3R1YWxfbGVuZ3RoCT0gaXNvLT5hY3R1YWxfbGVuZ3RoOworCX0KK30KKworCisvKiBtdXN0IGZyZWUgYnVmZmVyICovCit2b2lkICp1c2JpcF9hbGxvY19pc29fZGVzY19wZHUoc3RydWN0IHVyYiAqdXJiLCBzc2l6ZV90ICpidWZmbGVuKQoreworCXZvaWQgKmJ1ZmY7CisJc3RydWN0IHVzYmlwX2lzb19wYWNrZXRfZGVzY3JpcHRvciAqaXNvOworCWludCBucCA9IHVyYi0+bnVtYmVyX29mX3BhY2tldHM7CisJc3NpemVfdCBzaXplID0gbnAgKiBzaXplb2YoKmlzbyk7CisJaW50IGk7CisKKwlidWZmID0ga3phbGxvYyhzaXplLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWJ1ZmYpCisJCXJldHVybiBOVUxMOworCisJZm9yIChpID0gMDsgaSA8IG5wOyBpKyspIHsKKwkJaXNvID0gYnVmZiArIChpICogc2l6ZW9mKCppc28pKTsKKworCQl1c2JpcF9wYWNrX2lzbyhpc28sICZ1cmItPmlzb19mcmFtZV9kZXNjW2ldLCAxKTsKKwkJdXNiaXBfaXNvX3Bha2NldF9jb3JyZWN0X2VuZGlhbihpc28sIDEpOworCX0KKworCSpidWZmbGVuID0gc2l6ZTsKKworCXJldHVybiBidWZmOworfQorRVhQT1JUX1NZTUJPTF9HUEwodXNiaXBfYWxsb2NfaXNvX2Rlc2NfcGR1KTsKKworLyogc29tZSBtZW1iZXJzIG9mIHVyYiBtdXN0IGJlIHN1YnN0aXR1dGVkIGJlZm9yZS4gKi8KK2ludCB1c2JpcF9yZWN2X2lzbyhzdHJ1Y3QgdXNiaXBfZGV2aWNlICp1ZCwgc3RydWN0IHVyYiAqdXJiKQoreworCXZvaWQgKmJ1ZmY7CisJc3RydWN0IHVzYmlwX2lzb19wYWNrZXRfZGVzY3JpcHRvciAqaXNvOworCWludCBucCA9IHVyYi0+bnVtYmVyX29mX3BhY2tldHM7CisJaW50IHNpemUgPSBucCAqIHNpemVvZigqaXNvKTsKKwlpbnQgaTsKKwlpbnQgcmV0OworCisJaWYgKCF1c2JfcGlwZWlzb2ModXJiLT5waXBlKSkKKwkJcmV0dXJuIDA7CisKKwkvKiBteSBCbHVldG9vdGggZG9uZ2xlIGdldHMgSVNPIFVSQnMgd2hpY2ggYXJlIG5wID0gMCAqLworCWlmIChucCA9PSAwKSB7CisJCS8qIHVpbmZvKCJpc28gbnAgPT0gMFxuIik7ICovCisJCS8qIHVzYmlwX2R1bXBfdXJiKHVyYik7ICovCisJCXJldHVybiAwOworCX0KKworCWJ1ZmYgPSBremFsbG9jKHNpemUsIEdGUF9LRVJORUwpOworCWlmICghYnVmZikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlyZXQgPSB1c2JpcF94bWl0KDAsIHVkLT50Y3Bfc29ja2V0LCBidWZmLCBzaXplLCAwKTsKKwlpZiAocmV0ICE9IHNpemUpIHsKKwkJZGV2X2VycigmdXJiLT5kZXYtPmRldiwgInJlY3YgaXNvX2ZyYW1lX2Rlc2NyaXB0b3IsICVkXG4iLAorCQkJcmV0KTsKKwkJa2ZyZWUoYnVmZik7CisKKwkJaWYgKHVkLT5zaWRlID09IFVTQklQX1NUVUIpCisJCQl1c2JpcF9ldmVudF9hZGQodWQsIFNERVZfRVZFTlRfRVJST1JfVENQKTsKKwkJZWxzZQorCQkJdXNiaXBfZXZlbnRfYWRkKHVkLCBWREVWX0VWRU5UX0VSUk9SX1RDUCk7CisKKwkJcmV0dXJuIC1FUElQRTsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgbnA7IGkrKykgeworCQlpc28gPSBidWZmICsgKGkgKiBzaXplb2YoKmlzbykpOworCisJCXVzYmlwX2lzb19wYWtjZXRfY29ycmVjdF9lbmRpYW4oaXNvLCAwKTsKKwkJdXNiaXBfcGFja19pc28oaXNvLCAmdXJiLT5pc29fZnJhbWVfZGVzY1tpXSwgMCk7CisJfQorCisKKwlrZnJlZShidWZmKTsKKworCXJldHVybiByZXQ7Cit9CitFWFBPUlRfU1lNQk9MX0dQTCh1c2JpcF9yZWN2X2lzbyk7CisKKworLyogc29tZSBtZW1iZXJzIG9mIHVyYiBtdXN0IGJlIHN1YnN0aXR1dGVkIGJlZm9yZS4gKi8KK2ludCB1c2JpcF9yZWN2X3hidWZmKHN0cnVjdCB1c2JpcF9kZXZpY2UgKnVkLCBzdHJ1Y3QgdXJiICp1cmIpCit7CisJaW50IHJldDsKKwlpbnQgc2l6ZTsKKworCWlmICh1ZC0+c2lkZSA9PSBVU0JJUF9TVFVCKSB7CisJCS8qIHN0dWJfcnguYyAqLworCQkvKiB0aGUgZGlyZWN0aW9uIG9mIHVyYiBtdXN0IGJlIE9VVC4gKi8KKwkJaWYgKHVzYl9waXBlaW4odXJiLT5waXBlKSkKKwkJCXJldHVybiAwOworCisJCXNpemUgPSB1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGg7CisJfSBlbHNlIHsKKwkJLyogdmhjaV9yeC5jICovCisJCS8qIHRoZSBkaXJlY3Rpb24gb2YgdXJiIG11c3QgYmUgSU4uICovCisJCWlmICh1c2JfcGlwZW91dCh1cmItPnBpcGUpKQorCQkJcmV0dXJuIDA7CisKKwkJc2l6ZSA9IHVyYi0+YWN0dWFsX2xlbmd0aDsKKwl9CisKKwkvKiBubyBuZWVkIHRvIHJlY3YgeGJ1ZmYgKi8KKwlpZiAoIShzaXplID4gMCkpCisJCXJldHVybiAwOworCisJcmV0ID0gdXNiaXBfeG1pdCgwLCB1ZC0+dGNwX3NvY2tldCwgKGNoYXIgKil1cmItPnRyYW5zZmVyX2J1ZmZlciwKKwkJCSBzaXplLCAwKTsKKwlpZiAocmV0ICE9IHNpemUpIHsKKwkJZGV2X2VycigmdXJiLT5kZXYtPmRldiwgInJlY3YgeGJ1ZiwgJWRcbiIsIHJldCk7CisJCWlmICh1ZC0+c2lkZSA9PSBVU0JJUF9TVFVCKSB7CisJCQl1c2JpcF9ldmVudF9hZGQodWQsIFNERVZfRVZFTlRfRVJST1JfVENQKTsKKwkJfSBlbHNlIHsKKwkJCXVzYmlwX2V2ZW50X2FkZCh1ZCwgVkRFVl9FVkVOVF9FUlJPUl9UQ1ApOworCQkJcmV0dXJuIC1FUElQRTsKKwkJfQorCX0KKworCXJldHVybiByZXQ7Cit9CitFWFBPUlRfU1lNQk9MX0dQTCh1c2JpcF9yZWN2X3hidWZmKTsKKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW50IF9faW5pdCB1c2JpcF9jb21tb25faW5pdCh2b2lkKQoreworCXByaW50ayhLRVJOX0lORk8gS0JVSUxEX01PRE5BTUUgIjogIiBEUklWRVJfREVTQyAiIiBEUklWRVJfVkVSU0lPTik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgX19leGl0IHVzYmlwX2NvbW1vbl9leGl0KHZvaWQpCit7CisJcmV0dXJuOworfQorCisKKworCittb2R1bGVfaW5pdCh1c2JpcF9jb21tb25faW5pdCk7Cittb2R1bGVfZXhpdCh1c2JpcF9jb21tb25fZXhpdCk7CisKK01PRFVMRV9BVVRIT1IoRFJJVkVSX0FVVEhPUik7CitNT0RVTEVfREVTQ1JJUFRJT04oRFJJVkVSX0RFU0MpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3VzYmlwL3VzYmlwX2NvbW1vbi5oIGIvZHJpdmVycy9zdGFnaW5nL3VzYmlwL3VzYmlwX2NvbW1vbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIwMTg2YjcKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvdXNiaXAvdXNiaXBfY29tbW9uLmgKQEAgLTAsMCArMSw0MDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMtMjAwOCBUYWthaGlybyBIaXJvZnVjaGkKKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorICogVVNBLgorICovCisKKyNpZm5kZWYgX19WSENJX0NPTU1PTl9ICisjZGVmaW5lIF9fVkhDSV9DT01NT05fSAorCisKKyNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CisjaW5jbHVkZSA8bGludXgvdXNiLmg+CisjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgorI2luY2x1ZGUgPG5ldC9zb2NrLmg+CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qCisgKiBkZWZpbmUgbWFjcm9zIHRvIHByaW50IG1lc3NhZ2VzCisgKi8KKworLyoqCisgKiB1ZGJnIC0gcHJpbnQgZGVidWcgbWVzc2FnZXMgaWYgQ09ORklHX1VTQl9ERUJVRyBpcyBkZWZpbmVkCisgKiBAZm10OgorICogQGFyZ3M6CisgKi8KKworI2lmZGVmIENPTkZJR19VU0JfREVCVUcKKworI2RlZmluZSB1ZGJnKGZtdCwgYXJncy4uLikJCQkJCQlcCisJZG8gewkJCQkJCQkJXAorCQlwcmludGsoS0VSTl9ERUJVRyAiJS0xMHM6KCVzLCVkKSAlczogIiBmbXQsCQlcCisJCQkoaW5faW50ZXJydXB0KCkgPyAiaW50ZXJydXB0IiA6IChjdXJyZW50KS0+Y29tbSksXAorCQkJX19GSUxFX18sIF9fTElORV9fLCBfX2Z1bmNfXywgIyNhcmdzKTsJXAorCX0gd2hpbGUgKDApCisKKyNlbHNlICAvKiBDT05GSUdfVVNCX0RFQlVHICovCisKKyNkZWZpbmUgdWRiZyhmbXQsIGFyZ3MuLi4pCQlkbyB7IH0gd2hpbGUgKDApCisKKyNlbmRpZiAvKiBDT05GSUdfVVNCX0RFQlVHICovCisKKworZW51bSB7CisJdXNiaXBfZGVidWdfeG1pdAk9ICgxIDw8IDApLAorCXVzYmlwX2RlYnVnX3N5c2ZzCT0gKDEgPDwgMSksCisJdXNiaXBfZGVidWdfdXJiCQk9ICgxIDw8IDIpLAorCXVzYmlwX2RlYnVnX2VoCQk9ICgxIDw8IDMpLAorCisJdXNiaXBfZGVidWdfc3R1Yl9jbXAJPSAoMSA8PCA4KSwKKwl1c2JpcF9kZWJ1Z19zdHViX2Rldgk9ICgxIDw8IDkpLAorCXVzYmlwX2RlYnVnX3N0dWJfcngJPSAoMSA8PCAxMCksCisJdXNiaXBfZGVidWdfc3R1Yl90eAk9ICgxIDw8IDExKSwKKworCXVzYmlwX2RlYnVnX3ZoY2lfcmgJPSAoMSA8PCA4KSwKKwl1c2JpcF9kZWJ1Z192aGNpX2hjCT0gKDEgPDwgOSksCisJdXNiaXBfZGVidWdfdmhjaV9yeAk9ICgxIDw8IDEwKSwKKwl1c2JpcF9kZWJ1Z192aGNpX3R4CT0gKDEgPDwgMTEpLAorCXVzYmlwX2RlYnVnX3ZoY2lfc3lzZnMgID0gKDEgPDwgMTIpCit9OworCisjZGVmaW5lIGRiZ19mbGFnX3htaXQJCSh1c2JpcF9kZWJ1Z19mbGFnICYgdXNiaXBfZGVidWdfeG1pdCkKKyNkZWZpbmUgZGJnX2ZsYWdfdmhjaV9yaAkodXNiaXBfZGVidWdfZmxhZyAmIHVzYmlwX2RlYnVnX3ZoY2lfcmgpCisjZGVmaW5lIGRiZ19mbGFnX3ZoY2lfaGMJKHVzYmlwX2RlYnVnX2ZsYWcgJiB1c2JpcF9kZWJ1Z192aGNpX2hjKQorI2RlZmluZSBkYmdfZmxhZ192aGNpX3J4CSh1c2JpcF9kZWJ1Z19mbGFnICYgdXNiaXBfZGVidWdfdmhjaV9yeCkKKyNkZWZpbmUgZGJnX2ZsYWdfdmhjaV90eAkodXNiaXBfZGVidWdfZmxhZyAmIHVzYmlwX2RlYnVnX3ZoY2lfdHgpCisjZGVmaW5lIGRiZ19mbGFnX3ZoY2lfc3lzZnMJKHVzYmlwX2RlYnVnX2ZsYWcgJiB1c2JpcF9kZWJ1Z192aGNpX3N5c2ZzKQorI2RlZmluZSBkYmdfZmxhZ19zdHViX3J4CSh1c2JpcF9kZWJ1Z19mbGFnICYgdXNiaXBfZGVidWdfc3R1Yl9yeCkKKyNkZWZpbmUgZGJnX2ZsYWdfc3R1Yl90eAkodXNiaXBfZGVidWdfZmxhZyAmIHVzYmlwX2RlYnVnX3N0dWJfdHgpCisKK2V4dGVybiB1bnNpZ25lZCBsb25nIHVzYmlwX2RlYnVnX2ZsYWc7CitleHRlcm4gc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgZGV2X2F0dHJfdXNiaXBfZGVidWc7CisKKyNkZWZpbmUgZGJnX3dpdGhfZmxhZyhmbGFnLCBmbXQsIGFyZ3MuLi4pCQlcCisJZG8gewkJCQkJCVwKKwkJaWYgKGZsYWcgJiB1c2JpcF9kZWJ1Z19mbGFnKQkJXAorCQkJdWRiZyhmbXQgLCAjI2FyZ3MpOwkJXAorCX0gd2hpbGUgKDApCisKKyNkZWZpbmUgZGJnX3N5c2ZzKGZtdCwgYXJncy4uLikJCVwKKwlkYmdfd2l0aF9mbGFnKHVzYmlwX2RlYnVnX3N5c2ZzLCBmbXQgLCAjI2FyZ3MpCisjZGVmaW5lIGRiZ194bWl0KGZtdCwgYXJncy4uLikJCVwKKwlkYmdfd2l0aF9mbGFnKHVzYmlwX2RlYnVnX3htaXQsIGZtdCAsICMjYXJncykKKyNkZWZpbmUgZGJnX3VyYihmbXQsIGFyZ3MuLi4pCQlcCisJZGJnX3dpdGhfZmxhZyh1c2JpcF9kZWJ1Z191cmIsIGZtdCAsICMjYXJncykKKyNkZWZpbmUgZGJnX2VoKGZtdCwgYXJncy4uLikJCVwKKwlkYmdfd2l0aF9mbGFnKHVzYmlwX2RlYnVnX2VoLCBmbXQgLCAjI2FyZ3MpCisKKyNkZWZpbmUgZGJnX3ZoY2lfcmgoZm10LCBhcmdzLi4uKQlcCisJZGJnX3dpdGhfZmxhZyh1c2JpcF9kZWJ1Z192aGNpX3JoLCBmbXQgLCAjI2FyZ3MpCisjZGVmaW5lIGRiZ192aGNpX2hjKGZtdCwgYXJncy4uLikJXAorCWRiZ193aXRoX2ZsYWcodXNiaXBfZGVidWdfdmhjaV9oYywgZm10ICwgIyNhcmdzKQorI2RlZmluZSBkYmdfdmhjaV9yeChmbXQsIGFyZ3MuLi4pCVwKKwlkYmdfd2l0aF9mbGFnKHVzYmlwX2RlYnVnX3ZoY2lfcngsIGZtdCAsICMjYXJncykKKyNkZWZpbmUgZGJnX3ZoY2lfdHgoZm10LCBhcmdzLi4uKQlcCisJZGJnX3dpdGhfZmxhZyh1c2JpcF9kZWJ1Z192aGNpX3R4LCBmbXQgLCAjI2FyZ3MpCisjZGVmaW5lIGRiZ192aGNpX3N5c2ZzKGZtdCwgYXJncy4uLikJXAorCWRiZ193aXRoX2ZsYWcodXNiaXBfZGVidWdfdmhjaV9zeXNmcywgZm10ICwgIyNhcmdzKQorCisjZGVmaW5lIGRiZ19zdHViX2NtcChmbXQsIGFyZ3MuLi4pCVwKKwlkYmdfd2l0aF9mbGFnKHVzYmlwX2RlYnVnX3N0dWJfY21wLCBmbXQgLCAjI2FyZ3MpCisjZGVmaW5lIGRiZ19zdHViX3J4KGZtdCwgYXJncy4uLikJXAorCWRiZ193aXRoX2ZsYWcodXNiaXBfZGVidWdfc3R1Yl9yeCwgZm10ICwgIyNhcmdzKQorI2RlZmluZSBkYmdfc3R1Yl90eChmbXQsIGFyZ3MuLi4pCVwKKwlkYmdfd2l0aF9mbGFnKHVzYmlwX2RlYnVnX3N0dWJfdHgsIGZtdCAsICMjYXJncykKKworCisvKioKKyAqIHVlcnIgLSBwcmludCBlcnJvciBtZXNzYWdlcworICogQGZtdDoKKyAqIEBhcmdzOgorICovCisjZGVmaW5lIHVlcnIoZm10LCBhcmdzLi4uKQkJCQkJCVwKKwlkbyB7CQkJCQkJCQlcCisJCXByaW50ayhLRVJOX0VSUiAiJS0xMHM6ICoqKkVSUk9SKioqICglcywlZCkgJXM6ICIgZm10LAlcCisJCQkoaW5faW50ZXJydXB0KCkgPyAiaW50ZXJydXB0IiA6IChjdXJyZW50KS0+Y29tbSksXAorCQkJX19GSUxFX18sIF9fTElORV9fLCBfX2Z1bmNfXywgIyNhcmdzKTsJXAorCX0gd2hpbGUgKDApCisKKy8qKgorICogdWluZm8gLSBwcmludCBpbmZvcm1hdGlvbiBtZXNzYWdlcworICogQGZtdDoKKyAqIEBhcmdzOgorICovCisjZGVmaW5lIHVpbmZvKGZtdCwgYXJncy4uLikJCQkJCVwKKwlkbyB7CQkJCQkJCVwKKwkJcHJpbnRrKEtFUk5fSU5GTyAidXNiaXA6ICIgZm10ICwgIyMgYXJncyk7CVwKKwl9IHdoaWxlICgwKQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qCisgKiBVU0IvSVAgcmVxdWVzdCBoZWFkZXJzLgorICogQ3VycmVudGx5LCB3ZSBkZWZpbmUgNCByZXF1ZXN0IHR5cGVzOgorICoKKyAqICAtIENNRF9TVUJNSVQgdHJhbnNmZXJzIGEgVVNCIHJlcXVlc3QsIGNvcnJlc3BvbmRpbmcgdG8gdXNiX3N1Ym1pdF91cmIoKS4KKyAqICAgIChjbGllbnQgdG8gc2VydmVyKQorICogIC0gUkVUX1JFVFVSTiB0cmFuc2ZlcnMgdGhlIHJlc3VsdCBvZiBDTURfU1VCTUlULgorICogICAgKHNlcnZlciB0byBjbGllbnQpCisgKiAgLSBDTURfVU5MSU5LIHRyYW5zZmVycyBhbiB1bmxpbmsgcmVxdWVzdCBvZiBhIHBlbmRpbmcgVVNCIHJlcXVlc3QuCisgKiAgICAoY2xpZW50IHRvIHNlcnZlcikKKyAqICAtIFJFVF9VTkxJTksgdHJhbnNmZXJzIHRoZSByZXN1bHQgb2YgQ01EX1VOTElOSy4KKyAqICAgIChzZXJ2ZXIgdG8gY2xpZW50KQorICoKKyAqIE5vdGU6IFRoZSBiZWxvdyByZXF1ZXN0IGZvcm1hdHMgYXJlIGJhc2VkIG9uIHRoZSBVU0Igc3Vic3lzdGVtIG9mIExpbnV4LiBJdHMKKyAqIGRldGFpbHMgd2lsbCBiZSBkZWZpbmVkIHdoZW4gb3RoZXIgaW1wbGVtZW50YXRpb25zIGNvbWUuCisgKgorICoKKyAqLworCisvKgorICogQSBiYXNpYyBoZWFkZXIgZm9sbG93ZWQgYnkgb3RoZXIgYWRkaXRpb25hbCBoZWFkZXJzLgorICovCitzdHJ1Y3QgdXNiaXBfaGVhZGVyX2Jhc2ljIHsKKyNkZWZpbmUgVVNCSVBfQ01EX1NVQk1JVAkweDAwMDEKKyNkZWZpbmUgVVNCSVBfQ01EX1VOTElOSwkweDAwMDIKKyNkZWZpbmUgVVNCSVBfUkVUX1NVQk1JVAkweDAwMDMKKyNkZWZpbmUgVVNCSVBfUkVUX1VOTElOSwkweDAwMDQKKwlfX3UzMiBjb21tYW5kOworCisJIC8qIHNlcXVlbmNpYWwgbnVtYmVyIHdoaWNoIGlkZW50aWZpZXMgcmVxdWVzdHMuCisJICAqIGluY3JlbWVudGVkIHBlciBjb25uZWN0aW9ucyAqLworCV9fdTMyIHNlcW51bTsKKworCS8qIGRldmlkIGlzIHVzZWQgdG8gc3BlY2lmeSBhIHJlbW90ZSBVU0IgZGV2aWNlIHVuaXF1ZWx5IGluc3RlYWQKKwkgKiBvZiBidXNudW0gYW5kIGRldm51bSBpbiBMaW51eC4gSW4gdGhlIGNhc2Ugb2YgTGludXggc3R1Yl9kcml2ZXIsCisJICogdGhpcyB2YWx1ZSBpcyAoKGJ1c251bSA8PCAxNikgfCBkZXZudW0pICovCisJX191MzIgZGV2aWQ7CisKKyNkZWZpbmUgVVNCSVBfRElSX09VVAkwCisjZGVmaW5lIFVTQklQX0RJUl9JTiAJMQorCV9fdTMyIGRpcmVjdGlvbjsKKwlfX3UzMiBlcDsgICAgIC8qIGVuZHBvaW50IG51bWJlciAqLworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKKy8qCisgKiBBbiBhZGRpdGlvbmFsIGhlYWRlciBmb3IgYSBDTURfU1VCTUlUIHBhY2tldC4KKyAqLworc3RydWN0IHVzYmlwX2hlYWRlcl9jbWRfc3VibWl0IHsKKwkvKiB0aGVzZSB2YWx1ZXMgYXJlIGJhc2ljYWxseSB0aGUgc2FtZSBhcyBpbiBhIFVSQi4gKi8KKworCS8qIHRoZSBzYW1lIGluIGEgVVJCLiAqLworCV9fdTMyIHRyYW5zZmVyX2ZsYWdzOworCisJLyogc2V0IHRoZSBmb2xsb3dpbmcgZGF0YSBzaXplIChvdXQpLAorCSAqIG9yIGV4cGVjdGVkIHJlYWRpbmcgZGF0YSBzaXplIChpbikgKi8KKwlfX3MzMiB0cmFuc2Zlcl9idWZmZXJfbGVuZ3RoOworCisJLyogaXQgaXMgZGlmZmljdWx0IGZvciB1c2JpcCB0byBzeW5jIGZyYW1lcyAocmVzZXJ2ZWQgb25seT8pICovCisJX19zMzIgc3RhcnRfZnJhbWU7CisKKwkvKiB0aGUgbnVtYmVyIG9mIGlzbyBkZXNjcmlwdG9ycyB0aGF0IGZvbGxvd3MgdGhpcyBoZWFkZXIgKi8KKwlfX3MzMiBudW1iZXJfb2ZfcGFja2V0czsKKworCS8qIHRoZSBtYXhpbXVtIHRpbWUgd2l0aGluIHdoaWNoIHRoaXMgcmVxdWVzdCB3b3JrcyBpbiBhIGhvc3QKKwkgKiBjb250cm9sbGVyIG9mIGEgc2VydmVyIHNpZGUgKi8KKwlfX3MzMiBpbnRlcnZhbDsKKworCS8qIHNldCBzZXR1cCBwYWNrZXQgZGF0YSBmb3IgYSBDVFJMIHJlcXVlc3QgKi8KKwl1bnNpZ25lZCBjaGFyIHNldHVwWzhdOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKKy8qCisgKiBBbiBhZGRpdGlvbmFsIGhlYWRlciBmb3IgYSBSRVRfU1VCTUlUIHBhY2tldC4KKyAqLworc3RydWN0IHVzYmlwX2hlYWRlcl9yZXRfc3VibWl0IHsKKwlfX3MzMiBzdGF0dXM7CisJX19zMzIgYWN0dWFsX2xlbmd0aDsgLyogcmV0dXJuZWQgZGF0YSBsZW5ndGggKi8KKwlfX3MzMiBzdGFydF9mcmFtZTsgLyogSVNPIGFuZCBJTlQgKi8KKwlfX3MzMiBudW1iZXJfb2ZfcGFja2V0czsgIC8qIElTTyBvbmx5ICovCisJX19zMzIgZXJyb3JfY291bnQ7IC8qIElTTyBvbmx5ICovCit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworLyoKKyAqIEFuIGFkZGl0aW9uYWwgaGVhZGVyIGZvciBhIENNRF9VTkxJTksgcGFja2V0LgorICovCitzdHJ1Y3QgdXNiaXBfaGVhZGVyX2NtZF91bmxpbmsgeworCV9fdTMyIHNlcW51bTsgLyogVVJCJ3Mgc2VxbnVtIHdoaWNoIHdpbGwgYmUgdW5saW5rZWQgKi8KK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCisKKy8qCisgKiBBbiBhZGRpdGlvbmFsIGhlYWRlciBmb3IgYSBSRVRfVU5MSU5LIHBhY2tldC4KKyAqLworc3RydWN0IHVzYmlwX2hlYWRlcl9yZXRfdW5saW5rIHsKKwlfX3MzMiBzdGF0dXM7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworCisvKiB0aGUgc2FtZSBhcyB1c2JfaXNvX3BhY2tldF9kZXNjcmlwdG9yIGJ1dCBwYWNrZWQgZm9yIHBkdSAqLworc3RydWN0IHVzYmlwX2lzb19wYWNrZXRfZGVzY3JpcHRvciB7CisJX191MzIgb2Zmc2V0OworCV9fdTMyIGxlbmd0aDsgICAgICAgICAgICAvKiBleHBlY3RlZCBsZW5ndGggKi8KKwlfX3UzMiBhY3R1YWxfbGVuZ3RoOworCV9fdTMyIHN0YXR1czsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCisKKy8qCisgKiBBbGwgdXNiaXAgcGFja2V0cyB1c2UgYSBjb21tb24gaGVhZGVyIHRvIGtlZXAgY29kZSBzaW1wbGUuCisgKi8KK3N0cnVjdCB1c2JpcF9oZWFkZXIgeworCXN0cnVjdCB1c2JpcF9oZWFkZXJfYmFzaWMgYmFzZTsKKworCXVuaW9uIHsKKwkJc3RydWN0IHVzYmlwX2hlYWRlcl9jbWRfc3VibWl0CWNtZF9zdWJtaXQ7CisJCXN0cnVjdCB1c2JpcF9oZWFkZXJfcmV0X3N1Ym1pdAlyZXRfc3VibWl0OworCQlzdHJ1Y3QgdXNiaXBfaGVhZGVyX2NtZF91bmxpbmsJY21kX3VubGluazsKKwkJc3RydWN0IHVzYmlwX2hlYWRlcl9yZXRfdW5saW5rCXJldF91bmxpbms7CisJfSB1OworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKKworCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKworaW50IHVzYmlwX3htaXQoaW50LCBzdHJ1Y3Qgc29ja2V0ICosIGNoYXIgKiwgaW50LCBpbnQpOworaW50IHVzYmlwX3NlbmRtc2coc3RydWN0IHNvY2tldCAqLCBzdHJ1Y3QgbXNnaGRyICosIGludCk7CisKKworc3RhdGljIGlubGluZSBpbnQgaW50ZXJmYWNlX3RvX2J1c251bShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlKQoreworCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldihpbnRlcmZhY2UpOworCXJldHVybiB1ZGV2LT5idXMtPmJ1c251bTsKK30KKworc3RhdGljIGlubGluZSBpbnQgaW50ZXJmYWNlX3RvX2Rldm51bShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlKQoreworCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldihpbnRlcmZhY2UpOworCXJldHVybiB1ZGV2LT5kZXZudW07Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGludGVyZmFjZV90b19pbmZudW0oc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSkKK3sKKwlyZXR1cm4gaW50ZXJmYWNlLT5jdXJfYWx0c2V0dGluZy0+ZGVzYy5iSW50ZXJmYWNlTnVtYmVyOworfQorCisjaWYgMAoraW50IHNldG5vZGVsYXkoc3RydWN0IHNvY2tldCAqKTsKK2ludCBzZXRxdWlja2FjayhzdHJ1Y3Qgc29ja2V0ICopOworaW50IHNldGtlZXBhbGl2ZShzdHJ1Y3Qgc29ja2V0ICpzb2NrZXQpOwordm9pZCBzZXRyZXVzZShzdHJ1Y3Qgc29ja2V0ICopOworI2VuZGlmCisKK3N0cnVjdCBzb2NrZXQgKnNvY2tmZF90b19zb2NrZXQodW5zaWduZWQgaW50KTsKK2ludCBzZXRfc29ja2FkZHIoc3RydWN0IHNvY2tldCAqc29ja2V0LCBzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSAqc3MpOworCit2b2lkIHVzYmlwX2R1bXBfdXJiKHN0cnVjdCB1cmIgKnB1cmIpOwordm9pZCB1c2JpcF9kdW1wX2hlYWRlcihzdHJ1Y3QgdXNiaXBfaGVhZGVyICpwZHUpOworCisKK3N0cnVjdCB1c2JpcF9kZXZpY2U7CisKK3N0cnVjdCB1c2JpcF90YXNrIHsKKwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRocmVhZDsKKwlzdHJ1Y3QgY29tcGxldGlvbiB0aHJlYWRfZG9uZTsKKwljaGFyICpuYW1lOworCXZvaWQgKCpsb29wX29wcykoc3RydWN0IHVzYmlwX3Rhc2sgKik7Cit9OworCitlbnVtIHVzYmlwX3NpZGUgeworCVVTQklQX1ZIQ0ksCisJVVNCSVBfU1RVQiwKK307CisKK2VudW0gdXNiaXBfc3RhdHVzIHsKKwkvKiBzZGV2IGlzIGF2YWlsYWJsZS4gKi8KKwlTREVWX1NUX0FWQUlMQUJMRSA9IDB4MDEsCisJLyogc2RldiBpcyBub3cgdXNlZC4gKi8KKwlTREVWX1NUX1VTRUQsCisJLyogc2RldiBpcyB1bnVzYWJsZSBiZWNhdXNlIG9mIGEgZmF0YWwgZXJyb3IuICovCisJU0RFVl9TVF9FUlJPUiwKKworCS8qIHZkZXYgZG9lcyBub3QgY29ubmVjdCBhIHJlbW90ZSBkZXZpY2UuICovCisJVkRFVl9TVF9OVUxMLAorCS8qIHZkZXYgaXMgdXNlZCwgYnV0IHRoZSBVU0IgYWRkcmVzcyBpcyBub3QgYXNzaWduZWQgeWV0ICovCisJVkRFVl9TVF9OT1RBU1NJR05FRCwKKwlWREVWX1NUX1VTRUQsCisJVkRFVl9TVF9FUlJPUgorfTsKKworLyogYSBjb21tb24gc3RydWN0dXJlIGZvciBzdHViX2RldmljZSBhbmQgdmhjaV9kZXZpY2UgKi8KK3N0cnVjdCB1c2JpcF9kZXZpY2UgeworCWVudW0gdXNiaXBfc2lkZSBzaWRlOworCisJZW51bSB1c2JpcF9zdGF0dXMgc3RhdHVzOworCisJLyogbG9jayBmb3Igc3RhdHVzICovCisJc3BpbmxvY2tfdCBsb2NrOworCisJc3RydWN0IHNvY2tldCAqdGNwX3NvY2tldDsKKworCXN0cnVjdCB1c2JpcF90YXNrIHRjcF9yeDsKKwlzdHJ1Y3QgdXNiaXBfdGFzayB0Y3BfdHg7CisKKwkvKiBldmVudCBoYW5kbGVyICovCisjZGVmaW5lIFVTQklQX0VIX1NIVVRET1dOCSgxIDw8IDApCisjZGVmaW5lIFVTQklQX0VIX0JZRQkJKDEgPDwgMSkKKyNkZWZpbmUgVVNCSVBfRUhfUkVTRVQJCSgxIDw8IDIpCisjZGVmaW5lIFVTQklQX0VIX1VOVVNBQkxFCSgxIDw8IDMpCisKKyNkZWZpbmUgU0RFVl9FVkVOVF9SRU1PVkVECShVU0JJUF9FSF9TSFVURE9XTiB8IFVTQklQX0VIX1JFU0VUIHwgVVNCSVBfRUhfQllFKQorI2RlZmluZQlTREVWX0VWRU5UX0RPV04JCShVU0JJUF9FSF9TSFVURE9XTiB8IFVTQklQX0VIX1JFU0VUKQorI2RlZmluZQlTREVWX0VWRU5UX0VSUk9SX1RDUAkoVVNCSVBfRUhfU0hVVERPV04gfCBVU0JJUF9FSF9SRVNFVCkKKyNkZWZpbmUJU0RFVl9FVkVOVF9FUlJPUl9TVUJNSVQJKFVTQklQX0VIX1NIVVRET1dOIHwgVVNCSVBfRUhfUkVTRVQpCisjZGVmaW5lCVNERVZfRVZFTlRfRVJST1JfTUFMTE9DCShVU0JJUF9FSF9TSFVURE9XTiB8IFVTQklQX0VIX1VOVVNBQkxFKQorCisjZGVmaW5lCVZERVZfRVZFTlRfUkVNT1ZFRAkoVVNCSVBfRUhfU0hVVERPV04gfCBVU0JJUF9FSF9CWUUpCisjZGVmaW5lCVZERVZfRVZFTlRfRE9XTgkJKFVTQklQX0VIX1NIVVRET1dOIHwgVVNCSVBfRUhfUkVTRVQpCisjZGVmaW5lCVZERVZfRVZFTlRfRVJST1JfVENQCShVU0JJUF9FSF9TSFVURE9XTiB8IFVTQklQX0VIX1JFU0VUKQorI2RlZmluZQlWREVWX0VWRU5UX0VSUk9SX01BTExPQwkoVVNCSVBfRUhfU0hVVERPV04gfCBVU0JJUF9FSF9VTlVTQUJMRSkKKworCXVuc2lnbmVkIGxvbmcgZXZlbnQ7CisJc3RydWN0IHVzYmlwX3Rhc2sgZWg7CisJd2FpdF9xdWV1ZV9oZWFkX3QgZWhfd2FpdHE7CisKKwlzdHJ1Y3QgZWhfb3BzIHsKKwkJdm9pZCAoKnNodXRkb3duKShzdHJ1Y3QgdXNiaXBfZGV2aWNlICopOworCQl2b2lkICgqcmVzZXQpKHN0cnVjdCB1c2JpcF9kZXZpY2UgKik7CisJCXZvaWQgKCp1bnVzYWJsZSkoc3RydWN0IHVzYmlwX2RldmljZSAqKTsKKwl9IGVoX29wczsKK307CisKKwordm9pZCB1c2JpcF90YXNrX2luaXQoc3RydWN0IHVzYmlwX3Rhc2sgKnV0LCBjaGFyICosCisJCQkJdm9pZCAoKmxvb3Bfb3BzKShzdHJ1Y3QgdXNiaXBfdGFzayAqKSk7CisKK3ZvaWQgdXNiaXBfc3RhcnRfdGhyZWFkcyhzdHJ1Y3QgdXNiaXBfZGV2aWNlICp1ZCk7Cit2b2lkIHVzYmlwX3N0b3BfdGhyZWFkcyhzdHJ1Y3QgdXNiaXBfZGV2aWNlICp1ZCk7CitpbnQgdXNiaXBfdGhyZWFkKHZvaWQgKnBhcmFtKTsKKwordm9pZCB1c2JpcF9wYWNrX3BkdShzdHJ1Y3QgdXNiaXBfaGVhZGVyICpwZHUsIHN0cnVjdCB1cmIgKnVyYiwgaW50IGNtZCwKKwkJCQkJCQkJaW50IHBhY2spOworCit2b2lkIHVzYmlwX2hlYWRlcl9jb3JyZWN0X2VuZGlhbihzdHJ1Y3QgdXNiaXBfaGVhZGVyICpwZHUsIGludCBzZW5kKTsKKy8qIHNvbWUgbWVtYmVycyBvZiB1cmIgbXVzdCBiZSBzdWJzdGl0dXRlZCBiZWZvcmUuICovCitpbnQgdXNiaXBfcmVjdl94YnVmZihzdHJ1Y3QgdXNiaXBfZGV2aWNlICp1ZCwgc3RydWN0IHVyYiAqdXJiKTsKKy8qIHNvbWUgbWVtYmVycyBvZiB1cmIgbXVzdCBiZSBzdWJzdGl0dXRlZCBiZWZvcmUuICovCitpbnQgdXNiaXBfcmVjdl9pc28oc3RydWN0IHVzYmlwX2RldmljZSAqdWQsIHN0cnVjdCB1cmIgKnVyYik7Cit2b2lkICp1c2JpcF9hbGxvY19pc29fZGVzY19wZHUoc3RydWN0IHVyYiAqdXJiLCBzc2l6ZV90ICpidWZmbGVuKTsKKworCisvKiB1c2JpcF9ldmVudC5jICovCit2b2lkIHVzYmlwX3N0YXJ0X2VoKHN0cnVjdCB1c2JpcF9kZXZpY2UgKnVkKTsKK3ZvaWQgdXNiaXBfc3RvcF9laChzdHJ1Y3QgdXNiaXBfZGV2aWNlICp1ZCk7Cit2b2lkIHVzYmlwX2V2ZW50X2FkZChzdHJ1Y3QgdXNiaXBfZGV2aWNlICp1ZCwgdW5zaWduZWQgbG9uZyBldmVudCk7CitpbnQgdXNiaXBfZXZlbnRfaGFwcGVuZChzdHJ1Y3QgdXNiaXBfZGV2aWNlICp1ZCk7CisKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdXNiaXAvdXNiaXBfZXZlbnQuYyBiL2RyaXZlcnMvc3RhZ2luZy91c2JpcC91c2JpcF9ldmVudC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQzMTg1NTMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvdXNiaXAvdXNiaXBfZXZlbnQuYwpAQCAtMCwwICsxLDE0MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwMy0yMDA4IFRha2FoaXJvIEhpcm9mdWNoaQorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisgKiBVU0EuCisgKi8KKworI2luY2x1ZGUgInVzYmlwX2NvbW1vbi5oIgorCitzdGF0aWMgaW50IGV2ZW50X2hhbmRsZXIoc3RydWN0IHVzYmlwX2RldmljZSAqdWQpCit7CisJZGJnX2VoKCJlbnRlclxuIik7CisKKwkvKgorCSAqIEV2ZW50cyBhcmUgaGFuZGxlZCBieSBvbmx5IHRoaXMgdGhyZWFkLgorCSAqLworCXdoaWxlICh1c2JpcF9ldmVudF9oYXBwZW5kKHVkKSkgeworCQlkYmdfZWgoInBlbmRpbmcgZXZlbnQgJWx4XG4iLCB1ZC0+ZXZlbnQpOworCisJCS8qCisJCSAqIE5PVEU6IHNodXRkb3duIG11c3QgY29tZSBmaXJzdC4KKwkJICogU2h1dGRvd24gdGhlIGRldmljZS4KKwkJICovCisJCWlmICh1ZC0+ZXZlbnQgJiBVU0JJUF9FSF9TSFVURE9XTikgeworCQkJdWQtPmVoX29wcy5zaHV0ZG93bih1ZCk7CisKKwkJCXVkLT5ldmVudCAmPSB+VVNCSVBfRUhfU0hVVERPV047CisKKwkJCWJyZWFrOworCQl9CisKKwkJLyogU3RvcCB0aGUgZXJyb3IgaGFuZGxlci4gKi8KKwkJaWYgKHVkLT5ldmVudCAmIFVTQklQX0VIX0JZRSkKKwkJCXJldHVybiAtMTsKKworCQkvKiBSZXNldCB0aGUgZGV2aWNlLiAqLworCQlpZiAodWQtPmV2ZW50ICYgVVNCSVBfRUhfUkVTRVQpIHsKKwkJCXVkLT5laF9vcHMucmVzZXQodWQpOworCisJCQl1ZC0+ZXZlbnQgJj0gflVTQklQX0VIX1JFU0VUOworCisJCQlicmVhazsKKwkJfQorCisJCS8qIE1hcmsgdGhlIGRldmljZSBhcyB1bnVzYWJsZS4gKi8KKwkJaWYgKHVkLT5ldmVudCAmIFVTQklQX0VIX1VOVVNBQkxFKSB7CisJCQl1ZC0+ZWhfb3BzLnVudXNhYmxlKHVkKTsKKworCQkJdWQtPmV2ZW50ICY9IH5VU0JJUF9FSF9VTlVTQUJMRTsKKworCQkJYnJlYWs7CisJCX0KKworCQkvKiBOT1RSRUFDSEVEICovCisJCXByaW50ayhLRVJOX0VSUiAiJXM6IHVua25vd24gZXZlbnRcbiIsIF9fZnVuY19fKTsKKwkJcmV0dXJuIC0xOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBldmVudF9oYW5kbGVyX2xvb3Aoc3RydWN0IHVzYmlwX3Rhc2sgKnV0KQoreworCXN0cnVjdCB1c2JpcF9kZXZpY2UgKnVkID0gY29udGFpbmVyX29mKHV0LCBzdHJ1Y3QgdXNiaXBfZGV2aWNlLCBlaCk7CisKKwl3aGlsZSAoMSkgeworCQlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHsKKwkJCWRiZ19laCgic2lnbmFsIGNhdGNoZWQhXG4iKTsKKwkJCWJyZWFrOworCQl9CisKKwkJaWYgKGV2ZW50X2hhbmRsZXIodWQpIDwgMCkKKwkJCWJyZWFrOworCisJCXdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZSh1ZC0+ZWhfd2FpdHEsIHVzYmlwX2V2ZW50X2hhcHBlbmQodWQpKTsKKwkJZGJnX2VoKCJ3YWtldXBcbiIpOworCX0KK30KKwordm9pZCB1c2JpcF9zdGFydF9laChzdHJ1Y3QgdXNiaXBfZGV2aWNlICp1ZCkKK3sKKwlzdHJ1Y3QgdXNiaXBfdGFzayAqZWggPSAmdWQtPmVoOworCisJaW5pdF93YWl0cXVldWVfaGVhZCgmdWQtPmVoX3dhaXRxKTsKKwl1ZC0+ZXZlbnQgPSAwOworCisJdXNiaXBfdGFza19pbml0KGVoLCAidXNiaXBfZWgiLCBldmVudF9oYW5kbGVyX2xvb3ApOworCisJa2VybmVsX3RocmVhZCh1c2JpcF90aHJlYWQsICh2b2lkICopZWgsIDApOworCisJd2FpdF9mb3JfY29tcGxldGlvbigmZWgtPnRocmVhZF9kb25lKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHVzYmlwX3N0YXJ0X2VoKTsKKwordm9pZCB1c2JpcF9zdG9wX2VoKHN0cnVjdCB1c2JpcF9kZXZpY2UgKnVkKQoreworCXN0cnVjdCB1c2JpcF90YXNrICplaCA9ICZ1ZC0+ZWg7CisKKwl3YWl0X2Zvcl9jb21wbGV0aW9uKCZlaC0+dGhyZWFkX2RvbmUpOworCWRiZ19laCgidXNiaXBfZWggaGFzIGZpbmlzaGVkXG4iKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHVzYmlwX3N0b3BfZWgpOworCit2b2lkIHVzYmlwX2V2ZW50X2FkZChzdHJ1Y3QgdXNiaXBfZGV2aWNlICp1ZCwgdW5zaWduZWQgbG9uZyBldmVudCkKK3sKKwlzcGluX2xvY2soJnVkLT5sb2NrKTsKKworCXVkLT5ldmVudCB8PSBldmVudDsKKworCXdha2VfdXAoJnVkLT5laF93YWl0cSk7CisKKwlzcGluX3VubG9jaygmdWQtPmxvY2spOworfQorRVhQT1JUX1NZTUJPTF9HUEwodXNiaXBfZXZlbnRfYWRkKTsKKworaW50IHVzYmlwX2V2ZW50X2hhcHBlbmQoc3RydWN0IHVzYmlwX2RldmljZSAqdWQpCit7CisJaW50IGhhcHBlbmQgPSAwOworCisJc3Bpbl9sb2NrKCZ1ZC0+bG9jayk7CisKKwlpZiAodWQtPmV2ZW50ICE9IDApCisJCWhhcHBlbmQgPSAxOworCisJc3Bpbl91bmxvY2soJnVkLT5sb2NrKTsKKworCXJldHVybiBoYXBwZW5kOworfQorRVhQT1JUX1NZTUJPTF9HUEwodXNiaXBfZXZlbnRfaGFwcGVuZCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdXNiaXAvdmhjaS5oIGIvZHJpdmVycy9zdGFnaW5nL3VzYmlwL3ZoY2kuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZTM3NTE3Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3VzYmlwL3ZoY2kuaApAQCAtMCwwICsxLDE0MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwMy0yMDA4IFRha2FoaXJvIEhpcm9mdWNoaQorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisgKiBVU0EuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgIi4uLy4uL3VzYi9jb3JlL2hjZC5oIgorCisKK3N0cnVjdCB2aGNpX2RldmljZSB7CisJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXY7CisKKwkvKgorCSAqIGRldmlkIHNwZWNpZmllcyBhIHJlbW90ZSB1c2IgZGV2aWNlIHVuaXF1ZWx5IGluc3RlYWQKKwkgKiBvZiBjb21iaW5hdGlvbiBvZiBidXNudW0gYW5kIGRldm51bS4KKwkgKi8KKwlfX3UzMiBkZXZpZDsKKworCS8qIHNwZWVkIG9mIGEgcmVtb3RlIGRldmljZSAqLworCWVudW0gdXNiX2RldmljZV9zcGVlZCBzcGVlZDsKKworCS8qICB2aGNpIHJvb3QtaHViIHBvcnQgdG8gd2hpY2ggdGhpcyBkZXZpY2UgaXMgYXR0YWNoZWQgICovCisJX191MzIgcmhwb3J0OworCisJc3RydWN0IHVzYmlwX2RldmljZSB1ZDsKKworCisJLyogbG9jayBmb3IgdGhlIGJlbG93IGxpbmsgbGlzdHMgKi8KKwlzcGlubG9ja190IHByaXZfbG9jazsKKworCS8qIHZoY2lfcHJpdiBpcyBsaW5rZWQgdG8gb25lIG9mIHRoZW0uICovCisJc3RydWN0IGxpc3RfaGVhZCBwcml2X3R4OworCXN0cnVjdCBsaXN0X2hlYWQgcHJpdl9yeDsKKworCS8qIHZoY2lfdW5saW5rIGlzIGxpbmtlZCB0byBvbmUgb2YgdGhlbSAqLworCXN0cnVjdCBsaXN0X2hlYWQgdW5saW5rX3R4OworCXN0cnVjdCBsaXN0X2hlYWQgdW5saW5rX3J4OworCisJLyogdmhjaV90eCB0aHJlYWQgc2xlZXBzIGZvciB0aGlzIHF1ZXVlICovCisJd2FpdF9xdWV1ZV9oZWFkX3Qgd2FpdHFfdHg7Cit9OworCisKKy8qIHVyYi0+aGNwcml2LCB1c2UgY29udGFpbmVyX29mKCkgKi8KK3N0cnVjdCB2aGNpX3ByaXYgeworCXVuc2lnbmVkIGxvbmcgc2VxbnVtOworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKKworCXN0cnVjdCB2aGNpX2RldmljZSAqdmRldjsKKwlzdHJ1Y3QgdXJiICp1cmI7Cit9OworCisKK3N0cnVjdCB2aGNpX3VubGluayB7CisJLyogc2VxbnVtIG9mIHRoaXMgcmVxdWVzdCAqLworCXVuc2lnbmVkIGxvbmcgc2VxbnVtOworCisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OworCisJLyogc2VxbnVtIG9mIHRoZSB1bmxpbmsgdGFyZ2V0ICovCisJdW5zaWduZWQgbG9uZyB1bmxpbmtfc2VxbnVtOworfTsKKworLyoKKyAqIFRoZSBudW1iZXIgb2YgcG9ydHMgaXMgbGVzcyB0aGFuIDE2ID8KKyAqIFVTQl9NQVhDSElMRFJFTiBpcyBzdGF0aWNhbGx5IGRlZmluZWQgdG8gMTYgaW4gdXNiLmguICBJdHMgbWF4aW11bSB2YWx1ZQorICogd291bGQgYmUgMzEgYmVjYXVzZSB0aGUgZXZlbnRfYml0c1sxXSBvZiBzdHJ1Y3QgdXNiX2h1YiBpcyBkZWZpbmVkIGFzCisgKiB1bnNpZ25lZCBsb25nIGluIGh1Yi5oCisgKi8KKyNkZWZpbmUgVkhDSV9OUE9SVFMgOAorCisvKiBmb3IgdXNiX2J1cy5oY3ByaXYgKi8KK3N0cnVjdCB2aGNpX2hjZCB7CisJc3BpbmxvY2tfdAlsb2NrOworCisJdTMyCXBvcnRfc3RhdHVzW1ZIQ0lfTlBPUlRTXTsKKworCXVuc2lnbmVkCXJlc3VtaW5nOjE7CisJdW5zaWduZWQgbG9uZwlyZV90aW1lb3V0OworCisJYXRvbWljX3Qgc2VxbnVtOworCisJLyoKKwkgKiBOT1RFOgorCSAqIHdJbmRleCBzaG93cyB0aGUgcG9ydCBudW1iZXIgYW5kIGJlZ2lucyBmcm9tIDEuCisJICogQnV0LCB0aGUgaW5kZXggb2YgdGhpcyBhcnJheSBiZWdpbnMgZnJvbSAwLgorCSAqLworCXN0cnVjdCB2aGNpX2RldmljZSB2ZGV2W1ZIQ0lfTlBPUlRTXTsKKworCS8qIHZoY2lfZGV2aWNlIHdoaWNoIGhhcyBub3QgYmVlbiBhc3NpZ2VkIGl0cyBhZGRyZXNzIHlldCAqLworCWludCBwZW5kaW5nX3BvcnQ7Cit9OworCisKK2V4dGVybiBzdHJ1Y3QgdmhjaV9oY2QgKnRoZV9jb250cm9sbGVyOworZXh0ZXJuIHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgZGV2X2F0dHJfZ3JvdXA7CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qIHByb3RvdHlwZSBkZWNsYXJhdGlvbiAqLworCisvKiB2aGNpX2hjZC5jICovCit2b2lkIHJoX3BvcnRfY29ubmVjdChpbnQgcmhwb3J0LCBlbnVtIHVzYl9kZXZpY2Vfc3BlZWQgc3BlZWQpOwordm9pZCByaF9wb3J0X2Rpc2Nvbm5lY3QoaW50IHJocG9ydCk7Cit2b2lkIHZoY2lfcnhfbG9vcChzdHJ1Y3QgdXNiaXBfdGFzayAqdXQpOwordm9pZCB2aGNpX3R4X2xvb3Aoc3RydWN0IHVzYmlwX3Rhc2sgKnV0KTsKKworI2RlZmluZSBoYXJkd2FyZQkJKCZ0aGVfY29udHJvbGxlci0+cGRldi5kZXYpCisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHZoY2lfZGV2aWNlICpwb3J0X3RvX3ZkZXYoX191MzIgcG9ydCkKK3sKKwlyZXR1cm4gJnRoZV9jb250cm9sbGVyLT52ZGV2W3BvcnRdOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCB2aGNpX2hjZCAqaGNkX3RvX3ZoY2koc3RydWN0IHVzYl9oY2QgKmhjZCkKK3sKKwlyZXR1cm4gKHN0cnVjdCB2aGNpX2hjZCAqKSAoaGNkLT5oY2RfcHJpdik7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHVzYl9oY2QgKnZoY2lfdG9faGNkKHN0cnVjdCB2aGNpX2hjZCAqdmhjaSkKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKCh2b2lkICopIHZoY2ksIHN0cnVjdCB1c2JfaGNkLCBoY2RfcHJpdik7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGRldmljZSAqdmhjaV9kZXYoc3RydWN0IHZoY2lfaGNkICp2aGNpKQoreworCXJldHVybiB2aGNpX3RvX2hjZCh2aGNpKS0+c2VsZi5jb250cm9sbGVyOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3VzYmlwL3ZoY2lfaGNkLmMgYi9kcml2ZXJzL3N0YWdpbmcvdXNiaXAvdmhjaV9oY2QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YjVhMmUzCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3VzYmlwL3ZoY2lfaGNkLmMKQEAgLTAsMCArMSwxMjc1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDAzLTIwMDggVGFrYWhpcm8gSGlyb2Z1Y2hpCisgKgorICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKyAqIFVTQS4KKyAqLworCisKKyNpbmNsdWRlICJ1c2JpcF9jb21tb24uaCIKKyNpbmNsdWRlICJ2aGNpLmgiCisKKyNkZWZpbmUgRFJJVkVSX1ZFUlNJT04gIjEuMCIKKyNkZWZpbmUgRFJJVkVSX0FVVEhPUiAiVGFrYWhpcm8gSGlyb2Z1Y2hpIgorI2RlZmluZSBEUklWRVJfREVTQyAiVmlydHVhbCBIb3N0IENvbnRyb2xsZXIgSW50ZXJmYWNlIERyaXZlciBmb3IgVVNCL0lQIgorI2RlZmluZSBEUklWRVJfTElDRU5DRSAiR1BMIgorTU9EVUxFX0FVVEhPUihEUklWRVJfQVVUSE9SKTsKK01PRFVMRV9ERVNDUklQVElPTihEUklWRVJfREVTQyk7CitNT0RVTEVfTElDRU5TRShEUklWRVJfTElDRU5DRSk7CisKKworCisvKgorICogVE9ETworICoJLSB1cGRhdGUgcm9vdCBodWIgZW11bGF0aW9uCisgKgktIG1vdmUgdGhlIGVtdWxhdGlvbiBjb2RlIHRvIHVzZXJsYW5kID8KKyAqCQlwb3J0aW5nIHRvIG90aGVyIG9wZXJhdGluZyBzeXN0ZW1zCisgKgkJbWluaW1pemUga2VybmVsIGNvZGUKKyAqCS0gYWRkIHN1c3BlbmQvcmVzdW1lIGNvZGUKKyAqCS0gY2xlYW4gdXAgZXZlcnl0aGluZworICovCisKKworLyogU2VlIHVzYiBnYWRnZXQgZHVtbXkgaGNkICovCisKKworc3RhdGljIGludCB2aGNpX2h1Yl9zdGF0dXMoc3RydWN0IHVzYl9oY2QgKmhjZCwgY2hhciAqYnVmZik7CitzdGF0aWMgaW50IHZoY2lfaHViX2NvbnRyb2woc3RydWN0IHVzYl9oY2QgKmhjZCwgdTE2IHR5cGVSZXEsIHUxNiB3VmFsdWUsCisJCXUxNiB3SW5kZXgsIGNoYXIgKmJ1ZmYsIHUxNiB3TGVuZ3RoKTsKK3N0YXRpYyBpbnQgdmhjaV91cmJfZW5xdWV1ZShzdHJ1Y3QgdXNiX2hjZCAqaGNkLCBzdHJ1Y3QgdXJiICp1cmIsCisJCQkJCQkJZ2ZwX3QgbWVtX2ZsYWdzKTsKK3N0YXRpYyBpbnQgdmhjaV91cmJfZGVxdWV1ZShzdHJ1Y3QgdXNiX2hjZCAqaGNkLCBzdHJ1Y3QgdXJiICp1cmIsIGludCBzdGF0dXMpOworc3RhdGljIGludCB2aGNpX3N0YXJ0KHN0cnVjdCB1c2JfaGNkICp2aGNpX2hjZCk7CitzdGF0aWMgdm9pZCB2aGNpX3N0b3Aoc3RydWN0IHVzYl9oY2QgKmhjZCk7CitzdGF0aWMgaW50IHZoY2lfZ2V0X2ZyYW1lX251bWJlcihzdHJ1Y3QgdXNiX2hjZCAqaGNkKTsKKworc3RhdGljIGNvbnN0IGNoYXIgZHJpdmVyX25hbWVbXSA9ICJ2aGNpX2hjZCI7CitzdGF0aWMgY29uc3QgY2hhciBkcml2ZXJfZGVzY1tdID0gIlVTQi9JUCBWaXJ0dWFsIEhvc3QgQ29udG9yb2xsZXIiOworCitzdHJ1Y3QgdmhjaV9oY2QgKnRoZV9jb250cm9sbGVyOworCitzdGF0aWMgY29uc3QgY2hhciAqYml0X2Rlc2NbXSA9IHsKKwkiQ09OTkVDVElPTiIsCQkvKjAqLworCSJFTkFCTEUiLAkJLyoxKi8KKwkiU1VTUEVORCIsCQkvKjIqLworCSJPVkVSX0NVUlJFTlQiLAkJLyozKi8KKwkiUkVTRVQiLAkJLyo0Ki8KKwkiUjUiLAkJLyo1Ki8KKwkiUjYiLAkJLyo2Ki8KKwkiUjciLAkJLyo3Ki8KKwkiUE9XRVIiLAkJLyo4Ki8KKwkiTE9XU1BFRUQiLAkJLyo5Ki8KKwkiSElHSFNQRUVEIiwJCS8qMTAqLworCSJQT1JUX1RFU1QiLAkJLyoxMSovCisJIklORElDQVRPUiIsCQkvKjEyKi8KKwkiUjEzIiwJCS8qMTMqLworCSJSMTQiLAkJLyoxNCovCisJIlIxNSIsCQkvKjE1Ki8KKwkiQ19DT05ORUNUSU9OIiwJCS8qMTYqLworCSJDX0VOQUJMRSIsCQkvKjE3Ki8KKwkiQ19TVVNQRU5EIiwJCS8qMTgqLworCSJDX09WRVJfQ1VSUkVOVCIsCS8qMTkqLworCSJDX1JFU0VUIiwJCS8qMjAqLworCSJSMjEiLAkJLyoyMSovCisJIlIyMiIsCQkvKjIyKi8KKwkiUjIzIiwJCS8qMjMqLworCSJSMjQiLAkJLyoyNCovCisJIlIyNSIsCQkvKjI1Ki8KKwkiUjI2IiwJCS8qMjYqLworCSJSMjciLAkJLyoyNyovCisJIlIyOCIsCQkvKjI4Ki8KKwkiUjI5IiwJCS8qMjkqLworCSJSMzAiLAkJLyozMCovCisJIlIzMSIsCQkvKjMxKi8KK307CisKKworc3RhdGljIHZvaWQgZHVtcF9wb3J0X3N0YXR1cyh1MzIgc3RhdHVzKQoreworCWludCBpID0gMDsKKworCXByaW50ayhLRVJOX0RFQlVHICJzdGF0dXMgJTA4eDoiLCBzdGF0dXMpOworCWZvciAoaSA9IDA7IGkgPCAzMjsgaSsrKSB7CisJCWlmIChzdGF0dXMgJiAoMSA8PCBpKSkKKwkJCXByaW50aygiICVzIiwgYml0X2Rlc2NbaV0pOworCX0KKworCXByaW50aygiXG4iKTsKK30KKworCisKK3ZvaWQgcmhfcG9ydF9jb25uZWN0KGludCByaHBvcnQsIGVudW0gdXNiX2RldmljZV9zcGVlZCBzcGVlZCkKK3sKKwl1bnNpZ25lZCBsb25nCWZsYWdzOworCisJZGJnX3ZoY2lfcmgoInJoX3BvcnRfY29ubmVjdCAlZFxuIiwgcmhwb3J0KTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZ0aGVfY29udHJvbGxlci0+bG9jaywgZmxhZ3MpOworCisJdGhlX2NvbnRyb2xsZXItPnBvcnRfc3RhdHVzW3JocG9ydF0gfD0gVVNCX1BPUlRfU1RBVF9DT05ORUNUSU9OCisJCXwgKDEgPDwgVVNCX1BPUlRfRkVBVF9DX0NPTk5FQ1RJT04pOworCisJc3dpdGNoIChzcGVlZCkgeworCWNhc2UgVVNCX1NQRUVEX0hJR0g6CisJCXRoZV9jb250cm9sbGVyLT5wb3J0X3N0YXR1c1tyaHBvcnRdIHw9IFVTQl9QT1JUX1NUQVRfSElHSF9TUEVFRDsKKwkJYnJlYWs7CisJY2FzZSBVU0JfU1BFRURfTE9XOgorCQl0aGVfY29udHJvbGxlci0+cG9ydF9zdGF0dXNbcmhwb3J0XSB8PSBVU0JfUE9SVF9TVEFUX0xPV19TUEVFRDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCisJLyogc3Bpbl9sb2NrKCZ0aGVfY29udHJvbGxlci0+dmRldltyaHBvcnRdLnVkLmxvY2spOworCSAqIHRoZV9jb250cm9sbGVyLT52ZGV2W3JocG9ydF0udWQuc3RhdHVzID0gVkRFVl9DT05ORUNUOworCSAqIHNwaW5fdW5sb2NrKCZ0aGVfY29udHJvbGxlci0+dmRldltyaHBvcnRdLnVkLmxvY2spOyAqLworCisJdGhlX2NvbnRyb2xsZXItPnBlbmRpbmdfcG9ydCA9IHJocG9ydDsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnRoZV9jb250cm9sbGVyLT5sb2NrLCBmbGFncyk7CisKKwl1c2JfaGNkX3BvbGxfcmhfc3RhdHVzKHZoY2lfdG9faGNkKHRoZV9jb250cm9sbGVyKSk7Cit9CisKK3ZvaWQgcmhfcG9ydF9kaXNjb25uZWN0KGludCByaHBvcnQpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWRiZ192aGNpX3JoKCJyaF9wb3J0X2Rpc2Nvbm5lY3QgJWRcbiIsIHJocG9ydCk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmdGhlX2NvbnRyb2xsZXItPmxvY2ssIGZsYWdzKTsKKwkvKiBzdG9wX2FjdGl2aXR5KGR1bSwgZHJpdmVyKTsgKi8KKwl0aGVfY29udHJvbGxlci0+cG9ydF9zdGF0dXNbcmhwb3J0XSAmPSB+VVNCX1BPUlRfU1RBVF9DT05ORUNUSU9OOworCXRoZV9jb250cm9sbGVyLT5wb3J0X3N0YXR1c1tyaHBvcnRdIHw9CisJCQkJCSgxIDw8IFVTQl9QT1JUX0ZFQVRfQ19DT05ORUNUSU9OKTsKKworCisJLyogbm90IHlldCBjb21wbGV0ZSB0aGUgZGlzY29ubmVjdGlvbgorCSAqIHNwaW5fbG9jaygmdmRldi0+dWQubG9jayk7CisJICogdmRldi0+dWQuc3RhdHVzID0gVkhDX1NUX0RJU0NPTk5FQ1Q7CisJICogc3Bpbl91bmxvY2soJnZkZXYtPnVkLmxvY2spOyAqLworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdGhlX2NvbnRyb2xsZXItPmxvY2ssIGZsYWdzKTsKK30KKworCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKyNkZWZpbmUgUE9SVF9DX01BU0sgXAorCSgoVVNCX1BPUlRfU1RBVF9DX0NPTk5FQ1RJT04gXAorCSAgfCBVU0JfUE9SVF9TVEFUX0NfRU5BQkxFIFwKKwkgIHwgVVNCX1BPUlRfU1RBVF9DX1NVU1BFTkQgXAorCSAgfCBVU0JfUE9SVF9TVEFUX0NfT1ZFUkNVUlJFTlQgXAorCSAgfCBVU0JfUE9SVF9TVEFUX0NfUkVTRVQpIDw8IDE2KQorCisvKgorICogVGhpcyBmdW5jdGlvbiBpcyBhbG1vc3RseSB0aGUgc2FtZSBhcyBkdW1teV9oY2QuYzpkdW1teV9odWJfc3RhdHVzKCkgd2l0aG91dAorICogc3VzcGVuZC9yZXN1bWUgc3VwcG9ydC4gQnV0LCBpdCBpcyBtb2RpZmllZCB0byBwcm92aWRlIG11bHRpcGxlIHBvcnRzLgorICoKKyAqIEBidWY6IGEgYml0bWFwIHRvIHNob3cgd2hpY2ggcG9ydCBzdGF0dXMgaGFzIGJlZW4gY2hhbmdlZC4KKyAqICBiaXQgIDA6IHJlc2VydmVkIG9yIHVzZWQgZm9yIGFub3RoZXIgcHVycG9zZT8KKyAqICBiaXQgIDE6IHRoZSBzdGF0dXMgb2YgcG9ydCAwIGhhcyBiZWVuIGNoYW5nZWQuCisgKiAgYml0ICAyOiB0aGUgc3RhdHVzIG9mIHBvcnQgMSBoYXMgYmVlbiBjaGFuZ2VkLgorICogIC4uLgorICogIGJpdCAgNzogdGhlIHN0YXR1cyBvZiBwb3J0IDYgaGFzIGJlZW4gY2hhbmdlZC4KKyAqICBiaXQgIDg6IHRoZSBzdGF0dXMgb2YgcG9ydCA3IGhhcyBiZWVuIGNoYW5nZWQuCisgKiAgLi4uCisgKiAgYml0IDE1OiB0aGUgc3RhdHVzIG9mIHBvcnQgMTQgaGFzIGJlZW4gY2hhbmdlZC4KKyAqCisgKiBTbywgdGhlIG1heGltdW0gbnVtYmVyIG9mIHBvcnRzIGlzIDMxICggcG9ydCAwIHRvIHBvcnQgMzApID8KKyAqCisgKiBUaGUgcmV0dXJuIHZhbHVlIGlzIHRoZSBhY3R1YWwgdHJhbnNmZXJlZCBsZW5ndGggaW4gYnl0ZS4gSWYgbm90aGluZyBoYXMKKyAqIGJlZW4gY2hhbmdlZCwgcmV0dXJuIDAuIEluIHRoZSBjYXNlIHRoYXQgdGhlIG51bWJlciBvZiBwb3J0cyBpcyBsZXNzIHRoYW4gb3IKKyAqIGVxdWFsIHRvIDYgKFZIQ0lfTlBPUlRTPT03KSwgcmV0dXJuIDEuCisgKgorICovCitzdGF0aWMgaW50IHZoY2lfaHViX3N0YXR1cyhzdHJ1Y3QgdXNiX2hjZCAqaGNkLCBjaGFyICpidWYpCit7CisJc3RydWN0IHZoY2lfaGNkCSp2aGNpOworCXVuc2lnbmVkIGxvbmcJZmxhZ3M7CisJaW50CQlyZXR2YWwgPSAwOworCisJLyogdGhlIGVub3VnaCBidWZmZXIgaXMgYWxsb2NhdGVkIGFjY29yZGluZyB0byBVU0JfTUFYQ0hJTERSRU4gKi8KKwl1bnNpZ25lZCBsb25nCSpldmVudF9iaXRzID0gKHVuc2lnbmVkIGxvbmcgKikgYnVmOworCWludAkJcmhwb3J0OworCWludAkJY2hhbmdlZCA9IDA7CisKKworCSpldmVudF9iaXRzID0gMDsKKworCXZoY2kgPSBoY2RfdG9fdmhjaShoY2QpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnZoY2ktPmxvY2ssIGZsYWdzKTsKKwlpZiAoIXRlc3RfYml0KEhDRF9GTEFHX0hXX0FDQ0VTU0lCTEUsICZoY2QtPmZsYWdzKSkgeworCQlkYmdfdmhjaV9yaCgiaHcgYWNjZXNzaWJsZSBmbGFnIGluIG9uP1xuIik7CisJCWdvdG8gZG9uZTsKKwl9CisKKwkvKiBjaGVjayBwc2V1ZG8gc3RhdHVzIHJlZ2lzdGVyIGZvciBlYWNoIHBvcnQgKi8KKwlmb3IgKHJocG9ydCA9IDA7IHJocG9ydCA8IFZIQ0lfTlBPUlRTOyByaHBvcnQrKykgeworCQlpZiAoKHZoY2ktPnBvcnRfc3RhdHVzW3JocG9ydF0gJiBQT1JUX0NfTUFTSykpIHsKKwkJCS8qIFRoZSBzdGF0dXMgb2YgYSBwb3J0IGhhcyBiZWVuIGNoYW5nZWQsICovCisJCQlkYmdfdmhjaV9yaCgicG9ydCAlZCBpcyBjaGFuZ2VkXG4iLCByaHBvcnQpOworCisJCQkqZXZlbnRfYml0cyB8PSAxIDw8IChyaHBvcnQgKyAxKTsKKwkJCWNoYW5nZWQgPSAxOworCQl9CisJfQorCisJdWluZm8oImNoYW5nZWQgJWRcbiIsIGNoYW5nZWQpOworCisJaWYgKGhjZC0+c3RhdGUgPT0gSENfU1RBVEVfU1VTUEVOREVEKQorCQl1c2JfaGNkX3Jlc3VtZV9yb290X2h1YihoY2QpOworCisJaWYgKGNoYW5nZWQpCisJCXJldHZhbCA9IDEgKyAoVkhDSV9OUE9SVFMgLyA4KTsKKwllbHNlCisJCXJldHZhbCA9IDA7CisKK2RvbmU6CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdmhjaS0+bG9jaywgZmxhZ3MpOworCXJldHVybiByZXR2YWw7Cit9CisKKy8qIFNlZSBodWJfY29uZmlndXJlIGluIGh1Yi5jICovCitzdGF0aWMgaW5saW5lIHZvaWQgaHViX2Rlc2NyaXB0b3Ioc3RydWN0IHVzYl9odWJfZGVzY3JpcHRvciAqZGVzYykKK3sKKwltZW1zZXQoZGVzYywgMCwgc2l6ZW9mKCpkZXNjKSk7CisJZGVzYy0+YkRlc2NyaXB0b3JUeXBlID0gMHgyOTsKKwlkZXNjLT5iRGVzY0xlbmd0aCA9IDk7CisJZGVzYy0+d0h1YkNoYXJhY3RlcmlzdGljcyA9IChfX2ZvcmNlIF9fdTE2KQorCQkoX19jb25zdGFudF9jcHVfdG9fbGUxNigweDAwMDEpKTsKKwlkZXNjLT5iTmJyUG9ydHMgPSBWSENJX05QT1JUUzsKKwlkZXNjLT5iaXRtYXBbMF0gPSAweGZmOworCWRlc2MtPmJpdG1hcFsxXSA9IDB4ZmY7Cit9CisKK3N0YXRpYyBpbnQgdmhjaV9odWJfY29udHJvbChzdHJ1Y3QgdXNiX2hjZCAqaGNkLCB1MTYgdHlwZVJlcSwgdTE2IHdWYWx1ZSwKKwkJCSAgICB1MTYgd0luZGV4LCBjaGFyICpidWYsIHUxNiB3TGVuZ3RoKQoreworCXN0cnVjdCB2aGNpX2hjZAkqZHVtOworCWludCAgICAgICAgICAgICByZXR2YWwgPSAwOworCXVuc2lnbmVkIGxvbmcgICBmbGFnczsKKwlpbnQJCXJocG9ydDsKKworCXUzMiBwcmV2X3BvcnRfc3RhdHVzW1ZIQ0lfTlBPUlRTXTsKKworCWlmICghdGVzdF9iaXQoSENEX0ZMQUdfSFdfQUNDRVNTSUJMRSwgJmhjZC0+ZmxhZ3MpKQorCQlyZXR1cm4gLUVUSU1FRE9VVDsKKworCS8qCisJICogTk9URToKKwkgKiB3SW5kZXggc2hvd3MgdGhlIHBvcnQgbnVtYmVyIGFuZCBiZWdpbnMgZnJvbSAxLgorCSAqLworCWRiZ192aGNpX3JoKCJ0eXBlUmVxICV4IHdWYWx1ZSAleCB3SW5kZXggJXhcbiIsIHR5cGVSZXEsIHdWYWx1ZSwKKwkJCQkJCQkJd0luZGV4KTsKKwlpZiAod0luZGV4ID4gVkhDSV9OUE9SVFMpCisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGludmFsaWQgcG9ydCBudW1iZXIgJWRcbiIsIF9fZnVuY19fLCB3SW5kZXgpOworCXJocG9ydCA9ICgoX191OCkod0luZGV4ICYgMHgwMGZmKSkgLSAxOworCisJZHVtID0gaGNkX3RvX3ZoY2koaGNkKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZkdW0tPmxvY2ssIGZsYWdzKTsKKworCS8qIHN0b3JlIG9sZCBzdGF0dXMgYW5kIGNvbXBhcmUgbm93IGFuZCBvbGQgbGF0ZXIgKi8KKwlpZiAoZGJnX2ZsYWdfdmhjaV9yaCkgeworCQlpbnQgaSA9IDA7CisJCWZvciAoaSA9IDA7IGkgPCBWSENJX05QT1JUUzsgaSsrKQorCQkJcHJldl9wb3J0X3N0YXR1c1tpXSA9IGR1bS0+cG9ydF9zdGF0dXNbaV07CisJfQorCisJc3dpdGNoICh0eXBlUmVxKSB7CisJY2FzZSBDbGVhckh1YkZlYXR1cmU6CisJCWRiZ192aGNpX3JoKCIgQ2xlYXJIdWJGZWF0dXJlXG4iKTsKKwkJYnJlYWs7CisJY2FzZSBDbGVhclBvcnRGZWF0dXJlOgorCQlzd2l0Y2ggKHdWYWx1ZSkgeworCQljYXNlIFVTQl9QT1JUX0ZFQVRfU1VTUEVORDoKKwkJCWlmIChkdW0tPnBvcnRfc3RhdHVzW3JocG9ydF0gJiBVU0JfUE9SVF9TVEFUX1NVU1BFTkQpIHsKKwkJCQkvKiAyMG1zZWMgc2lnbmFsaW5nICovCisJCQkJZHVtLT5yZXN1bWluZyA9IDE7CisJCQkJZHVtLT5yZV90aW1lb3V0ID0KKwkJCQkJamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoMjApOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgVVNCX1BPUlRfRkVBVF9QT1dFUjoKKwkJCWRiZ192aGNpX3JoKCIgQ2xlYXJQb3J0RmVhdHVyZTogVVNCX1BPUlRfRkVBVF9QT1dFUlxuIik7CisJCQlkdW0tPnBvcnRfc3RhdHVzW3JocG9ydF0gPSAwOworCQkJLyogZHVtLT5hZGRyZXNzID0gMDsgKi8KKwkJCS8qIGR1bS0+aGRldiA9IDA7ICovCisJCQlkdW0tPnJlc3VtaW5nID0gMDsKKwkJCWJyZWFrOworCQljYXNlIFVTQl9QT1JUX0ZFQVRfQ19SRVNFVDoKKwkJCWRiZ192aGNpX3JoKCIgQ2xlYXJQb3J0RmVhdHVyZTogIgorCQkJCQkiVVNCX1BPUlRfRkVBVF9DX1JFU0VUXG4iKTsKKwkJCXN3aXRjaCAoZHVtLT52ZGV2W3JocG9ydF0uc3BlZWQpIHsKKwkJCWNhc2UgVVNCX1NQRUVEX0hJR0g6CisJCQkJZHVtLT5wb3J0X3N0YXR1c1tyaHBvcnRdIHw9CisJCQkJCQlVU0JfUE9SVF9TVEFUX0hJR0hfU1BFRUQ7CisJCQkJYnJlYWs7CisJCQljYXNlIFVTQl9TUEVFRF9MT1c6CisJCQkJZHVtLT5wb3J0X3N0YXR1c1tyaHBvcnRdIHw9CisJCQkJCQlVU0JfUE9SVF9TVEFUX0xPV19TUEVFRDsKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJYnJlYWs7CisJCQl9CisJCWRlZmF1bHQ6CisJCQlkYmdfdmhjaV9yaCgiIENsZWFyUG9ydEZlYXR1cmU6IGRlZmF1bHQgJXhcbiIsIHdWYWx1ZSk7CisJCQlkdW0tPnBvcnRfc3RhdHVzW3JocG9ydF0gJj0gfigxIDw8IHdWYWx1ZSk7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBHZXRIdWJEZXNjcmlwdG9yOgorCQlkYmdfdmhjaV9yaCgiIEdldEh1YkRlc2NyaXB0b3JcbiIpOworCQlodWJfZGVzY3JpcHRvcigoc3RydWN0IHVzYl9odWJfZGVzY3JpcHRvciAqKSBidWYpOworCQlicmVhazsKKwljYXNlIEdldEh1YlN0YXR1czoKKwkJZGJnX3ZoY2lfcmgoIiBHZXRIdWJTdGF0dXNcbiIpOworCQkqKF9fbGUzMiAqKSBidWYgPSBfX2NvbnN0YW50X2NwdV90b19sZTMyKDApOworCQlicmVhazsKKwljYXNlIEdldFBvcnRTdGF0dXM6CisJCWRiZ192aGNpX3JoKCIgR2V0UG9ydFN0YXR1cyBwb3J0ICV4XG4iLCB3SW5kZXgpOworCQlpZiAod0luZGV4ID4gVkhDSV9OUE9SVFMgfHwgd0luZGV4IDwgMSkgeworCQkJcHJpbnRrKEtFUk5fRVJSICIlczogaW52YWxpZCBwb3J0IG51bWJlciAlZFxuIiwKKwkJCSAgICAgICBfX2Z1bmNfXywgd0luZGV4KTsKKwkJCXJldHZhbCA9IC1FUElQRTsKKwkJfQorCisJCS8qIHdlIGRvIG5vIGNhcmUgb2YgcmVzdW1lLiAqLworCisJCS8qIHdob2V2ZXIgcmVzZXRzIG9yIHJlc3VtZXMgbXVzdCBHZXRQb3J0U3RhdHVzIHRvCisJCSAqIGNvbXBsZXRlIGl0ISEKKwkJICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisJCWlmIChkdW0tPnJlc3VtaW5nICYmIHRpbWVfYWZ0ZXIoamlmZmllcywgZHVtLT5yZV90aW1lb3V0KSkgeworCQkJcHJpbnRrKEtFUk5fRVJSICIlczogbm90IHlldFxuIiwgX19mdW5jX18pOworCQkJZHVtLT5wb3J0X3N0YXR1c1tyaHBvcnRdIHw9CisJCQkJCSgxIDw8IFVTQl9QT1JUX0ZFQVRfQ19TVVNQRU5EKTsKKwkJCWR1bS0+cG9ydF9zdGF0dXNbcmhwb3J0XSAmPQorCQkJCQl+KDEgPDwgVVNCX1BPUlRfRkVBVF9TVVNQRU5EKTsKKwkJCWR1bS0+cmVzdW1pbmcgPSAwOworCQkJZHVtLT5yZV90aW1lb3V0ID0gMDsKKwkJCS8qIGlmIChkdW0tPmRyaXZlciAmJiBkdW0tPmRyaXZlci0+cmVzdW1lKSB7CisJCQkgKglzcGluX3VubG9jayAoJmR1bS0+bG9jayk7CisJCQkgKglkdW0tPmRyaXZlci0+cmVzdW1lICgmZHVtLT5nYWRnZXQpOworCQkJICoJc3Bpbl9sb2NrICgmZHVtLT5sb2NrKTsKKwkJCSAqIH0gKi8KKwkJfQorCisJCWlmICgoZHVtLT5wb3J0X3N0YXR1c1tyaHBvcnRdICYgKDEgPDwgVVNCX1BPUlRfRkVBVF9SRVNFVCkpICE9CisJCQkJMCAmJiB0aW1lX2FmdGVyKGppZmZpZXMsIGR1bS0+cmVfdGltZW91dCkpIHsKKwkJCWR1bS0+cG9ydF9zdGF0dXNbcmhwb3J0XSB8PQorCQkJCQkJKDEgPDwgVVNCX1BPUlRfRkVBVF9DX1JFU0VUKTsKKwkJCWR1bS0+cG9ydF9zdGF0dXNbcmhwb3J0XSAmPQorCQkJCQkJfigxIDw8IFVTQl9QT1JUX0ZFQVRfUkVTRVQpOworCQkJZHVtLT5yZV90aW1lb3V0ID0gMDsKKworCQkJaWYgKGR1bS0+dmRldltyaHBvcnRdLnVkLnN0YXR1cyA9PQorCQkJCQkJCVZERVZfU1RfTk9UQVNTSUdORUQpIHsKKwkJCQlkYmdfdmhjaV9yaCgiIGVuYWJsZSByaHBvcnQgJWQgKHN0YXR1cyAldSlcbiIsCisJCQkJCQlyaHBvcnQsCisJCQkJCQlkdW0tPnZkZXZbcmhwb3J0XS51ZC5zdGF0dXMpOworCQkJCWR1bS0+cG9ydF9zdGF0dXNbcmhwb3J0XSB8PQorCQkJCQkJCVVTQl9QT1JUX1NUQVRfRU5BQkxFOworCQkJfQorI2lmIDAKKwkJCWlmIChkdW0tPmRyaXZlcikgeworCisJCQkJZHVtLT5wb3J0X3N0YXR1c1tyaHBvcnRdIHw9CisJCQkJCQkJVVNCX1BPUlRfU1RBVF9FTkFCTEU7CisJCQkJLyogZ2l2ZSBpdCB0aGUgYmVzdCBzcGVlZCB3ZSBhZ3JlZSBvbiAqLworCQkJCWR1bS0+Z2FkZ2V0LnNwZWVkID0gZHVtLT5kcml2ZXItPnNwZWVkOworCQkJCWR1bS0+Z2FkZ2V0LmVwMC0+bWF4cGFja2V0ID0gNjQ7CisJCQkJc3dpdGNoIChkdW0tPmdhZGdldC5zcGVlZCkgeworCQkJCWNhc2UgVVNCX1NQRUVEX0hJR0g6CisJCQkJCWR1bS0+cG9ydF9zdGF0dXNbcmhwb3J0XSB8PQorCQkJCQlVU0JfUE9SVF9TVEFUX0hJR0hfU1BFRUQ7CisJCQkJCWJyZWFrOworCQkJCWNhc2UgVVNCX1NQRUVEX0xPVzoKKwkJCQkJZHVtLT5nYWRnZXQuZXAwLT5tYXhwYWNrZXQgPSA4OworCQkJCQlkdW0tPnBvcnRfc3RhdHVzW3JocG9ydF0gfD0KKwkJCQkJVVNCX1BPUlRfU1RBVF9MT1dfU1BFRUQ7CisJCQkJCWJyZWFrOworCQkJCWRlZmF1bHQ6CisJCQkJCWR1bS0+Z2FkZ2V0LnNwZWVkID0gVVNCX1NQRUVEX0ZVTEw7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKyNlbmRpZgorCisJCX0KKwkJKCh1MTYgKikgYnVmKVswXSA9IGNwdV90b19sZTE2KGR1bS0+cG9ydF9zdGF0dXNbcmhwb3J0XSk7CisJCSgodTE2ICopIGJ1ZilbMV0gPQorCQkJCWNwdV90b19sZTE2KGR1bS0+cG9ydF9zdGF0dXNbcmhwb3J0XSA+PiAxNik7CisKKwkJZGJnX3ZoY2lfcmgoIiBHZXRQb3J0U3RhdHVzIGJ5ZSAleCAleFxuIiwgKCh1MTYgKilidWYpWzBdLAorCQkJCQkJCSgodTE2ICopYnVmKVsxXSk7CisJCWJyZWFrOworCWNhc2UgU2V0SHViRmVhdHVyZToKKwkJZGJnX3ZoY2lfcmgoIiBTZXRIdWJGZWF0dXJlXG4iKTsKKwkJcmV0dmFsID0gLUVQSVBFOworCQlicmVhazsKKwljYXNlIFNldFBvcnRGZWF0dXJlOgorCQlzd2l0Y2ggKHdWYWx1ZSkgeworCQljYXNlIFVTQl9QT1JUX0ZFQVRfU1VTUEVORDoKKwkJCWRiZ192aGNpX3JoKCIgU2V0UG9ydEZlYXR1cmU6ICIKKwkJCQkJIlVTQl9QT1JUX0ZFQVRfU1VTUEVORFxuIik7CisJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBub3QgeWV0XG4iLCBfX2Z1bmNfXyk7CisjaWYgMAorCQkJZHVtLT5wb3J0X3N0YXR1c1tyaHBvcnRdIHw9CisJCQkJCQkoMSA8PCBVU0JfUE9SVF9GRUFUX1NVU1BFTkQpOworCQkJaWYgKGR1bS0+ZHJpdmVyLT5zdXNwZW5kKSB7CisJCQkJc3Bpbl91bmxvY2soJmR1bS0+bG9jayk7CisJCQkJZHVtLT5kcml2ZXItPnN1c3BlbmQoJmR1bS0+Z2FkZ2V0KTsKKwkJCQlzcGluX2xvY2soJmR1bS0+bG9jayk7CisJCQl9CisjZW5kaWYKKwkJCWJyZWFrOworCQljYXNlIFVTQl9QT1JUX0ZFQVRfUkVTRVQ6CisJCQlkYmdfdmhjaV9yaCgiIFNldFBvcnRGZWF0dXJlOiBVU0JfUE9SVF9GRUFUX1JFU0VUXG4iKTsKKwkJCS8qIGlmIGl0J3MgYWxyZWFkeSBydW5uaW5nLCBkaXNjb25uZWN0IGZpcnN0ICovCisJCQlpZiAoZHVtLT5wb3J0X3N0YXR1c1tyaHBvcnRdICYgVVNCX1BPUlRfU1RBVF9FTkFCTEUpIHsKKwkJCQlkdW0tPnBvcnRfc3RhdHVzW3JocG9ydF0gJj0KKwkJCQkJCX4oVVNCX1BPUlRfU1RBVF9FTkFCTEUgfAorCQkJCQkJICBVU0JfUE9SVF9TVEFUX0xPV19TUEVFRCB8CisJCQkJCQkgIFVTQl9QT1JUX1NUQVRfSElHSF9TUEVFRCk7CisjaWYgMAorCQkJCWlmIChkdW0tPmRyaXZlcikgeworCQkJCQlkZXZfZGJnKGhhcmR3YXJlLCAiZGlzY29ubmVjdFxuIik7CisJCQkJCXN0b3BfYWN0aXZpdHkoZHVtLCBkdW0tPmRyaXZlcik7CisJCQkJfQorI2VuZGlmCisKKwkJCQkvKiBGSVhNRSB0ZXN0IHRoYXQgY29kZSBwYXRoISAqLworCQkJfQorCQkJLyogNTBtc2VjIHJlc2V0IHNpZ25hbGluZyAqLworCQkJZHVtLT5yZV90aW1lb3V0ID0gamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoNTApOworCisJCQkvKiBGQUxMVEhST1VHSCAqLworCQlkZWZhdWx0OgorCQkJZGJnX3ZoY2lfcmgoIiBTZXRQb3J0RmVhdHVyZTogZGVmYXVsdCAlZFxuIiwgd1ZhbHVlKTsKKwkJCWR1bS0+cG9ydF9zdGF0dXNbcmhwb3J0XSB8PSAoMSA8PCB3VmFsdWUpOworCQl9CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogZGVmYXVsdDogbm8gc3VjaCByZXF1ZXN0XG4iLCBfX2Z1bmNfXyk7CisJCS8qIGRldl9kYmcgKGhhcmR3YXJlLAorCQkgKgkJImh1YiBjb250cm9sIHJlcSUwNHggdiUwNHggaSUwNHggbCVkXG4iLAorCQkgKgkJdHlwZVJlcSwgd1ZhbHVlLCB3SW5kZXgsIHdMZW5ndGgpOyAqLworCisJCS8qICJwcm90b2NvbCBzdGFsbCIgb24gZXJyb3IgKi8KKwkJcmV0dmFsID0gLUVQSVBFOworCX0KKworCWlmIChkYmdfZmxhZ192aGNpX3JoKSB7CisJCXByaW50ayhLRVJOX0RFQlVHICJwb3J0ICVkXG4iLCByaHBvcnQpOworCQlkdW1wX3BvcnRfc3RhdHVzKHByZXZfcG9ydF9zdGF0dXNbcmhwb3J0XSk7CisJCWR1bXBfcG9ydF9zdGF0dXMoZHVtLT5wb3J0X3N0YXR1c1tyaHBvcnRdKTsKKwl9CisJZGJnX3ZoY2lfcmgoIiBieWVcbiIpOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZHVtLT5sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gcmV0dmFsOworfQorCisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIHN0cnVjdCB2aGNpX2RldmljZSAqZ2V0X3ZkZXYoc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYpCit7CisJaW50IGk7CisKKwlpZiAoIXVkZXYpCisJCXJldHVybiBOVUxMOworCisJZm9yIChpID0gMDsgaSA8IFZIQ0lfTlBPUlRTOyBpKyspCisJCWlmICh0aGVfY29udHJvbGxlci0+dmRldltpXS51ZGV2ID09IHVkZXYpCisJCQlyZXR1cm4gcG9ydF90b192ZGV2KGkpOworCisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyB2b2lkIHZoY2lfdHhfdXJiKHN0cnVjdCB1cmIgKnVyYikKK3sKKwlzdHJ1Y3QgdmhjaV9kZXZpY2UgKnZkZXYgPSBnZXRfdmRldih1cmItPmRldik7CisJc3RydWN0IHZoY2lfcHJpdiAqcHJpdjsKKwl1bnNpZ25lZCBsb25nIGZsYWc7CisKKwlpZiAoIXZkZXYpIHsKKwkJZXJyKCJjb3VsZCBub3QgZ2V0IHZpcnR1YWwgZGV2aWNlIik7CisJCS8qIEJVRygpOyAqLworCQlyZXR1cm47CisJfQorCisJc3Bpbl9sb2NrX2lycXNhdmUoJnZkZXYtPnByaXZfbG9jaywgZmxhZyk7CisKKwlwcml2ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHZoY2lfcHJpdiksIEdGUF9BVE9NSUMpOworCWlmICghcHJpdikgeworCQlkZXZfZXJyKCZ1cmItPmRldi0+ZGV2LCAibWFsbG9jIHZoY2lfcHJpdlxuIik7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnZkZXYtPnByaXZfbG9jaywgZmxhZyk7CisJCXVzYmlwX2V2ZW50X2FkZCgmdmRldi0+dWQsIFZERVZfRVZFTlRfRVJST1JfTUFMTE9DKTsKKwkJcmV0dXJuOworCX0KKworCXByaXYtPnNlcW51bSA9IGF0b21pY19pbmNfcmV0dXJuKCZ0aGVfY29udHJvbGxlci0+c2VxbnVtKTsKKwlpZiAocHJpdi0+c2VxbnVtID09IDB4ZmZmZikKKwkJdWluZm8oInNlcW51bSBtYXhcbiIpOworCisJcHJpdi0+dmRldiA9IHZkZXY7CisJcHJpdi0+dXJiID0gdXJiOworCisJdXJiLT5oY3ByaXYgPSAodm9pZCAqKSBwcml2OworCisKKwlsaXN0X2FkZF90YWlsKCZwcml2LT5saXN0LCAmdmRldi0+cHJpdl90eCk7CisKKwl3YWtlX3VwKCZ2ZGV2LT53YWl0cV90eCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdmRldi0+cHJpdl9sb2NrLCBmbGFnKTsKK30KKworc3RhdGljIGludCB2aGNpX3VyYl9lbnF1ZXVlKHN0cnVjdCB1c2JfaGNkICpoY2QsIHN0cnVjdCB1cmIgKnVyYiwKKwkJCSAgICBnZnBfdCBtZW1fZmxhZ3MpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJnVyYi0+ZGV2LT5kZXY7CisJaW50IHJldCA9IDA7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWRiZ192aGNpX2hjKCJlbnRlciwgdXNiX2hjZCAlcCB1cmIgJXAgbWVtX2ZsYWdzICVkXG4iLAorCQkgICAgaGNkLCB1cmIsIG1lbV9mbGFncyk7CisKKwkvKiBwYXRjaCB0byB1c2Jfc2dfaW5pdCgpIGlzIGluIDIuNS42MCAqLworCUJVR19PTighdXJiLT50cmFuc2Zlcl9idWZmZXIgJiYgdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZ0aGVfY29udHJvbGxlci0+bG9jaywgZmxhZ3MpOworCisJLyogY2hlY2sgSEMgaXMgYWN0aXZlIG9yIG5vdCAqLworCWlmICghSENfSVNfUlVOTklORyhoY2QtPnN0YXRlKSkgeworCQlkZXZfZXJyKGRldiwgIkhDIGlzIG5vdCBydW5uaW5nXG4iKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdGhlX2NvbnRyb2xsZXItPmxvY2ssIGZsYWdzKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJaWYgKHVyYi0+c3RhdHVzICE9IC1FSU5QUk9HUkVTUykgeworCQlkZXZfZXJyKGRldiwgIlVSQiBhbHJlYWR5IHVubGlua2VkISwgc3RhdHVzICVkXG4iLCB1cmItPnN0YXR1cyk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnRoZV9jb250cm9sbGVyLT5sb2NrLCBmbGFncyk7CisJCXJldHVybiB1cmItPnN0YXR1czsKKwl9CisKKwlyZXQgPSB1c2JfaGNkX2xpbmtfdXJiX3RvX2VwKGhjZCwgdXJiKTsKKwlpZiAocmV0KQorCQlnb3RvIG5vX25lZWRfdW5saW5rOworCisJLyoKKwkgKiBUaGUgZW51bWVsYXRpb24gcHJvY2VzcyBpcyBhcyBmb2xsb3dzOworCSAqCisJICogIDEuIEdldF9EZXNjcmlwdG9yIHJlcXVlc3QgdG8gRGV2QWRkcnMoMCkgRW5kUG9pbnQoMCkKKwkgKiAgICAgdG8gZ2V0IG1heCBwYWNrZXQgbGVuZ3RoIG9mIGRlZmF1bHQgcGlwZQorCSAqCisJICogIDIuIFNldF9BZGRyZXNzIHJlcXVlc3QgdG8gRGV2QWRkcigwKSBFbmRQb2ludCgwKQorCSAqCisJICovCisKKwlpZiAodXNiX3BpcGVkZXZpY2UodXJiLT5waXBlKSA9PSAwKSB7CisJCV9fdTggdHlwZSA9IHVzYl9waXBldHlwZSh1cmItPnBpcGUpOworCQlzdHJ1Y3QgdXNiX2N0cmxyZXF1ZXN0ICpjdHJscmVxID0KKwkJCQkoc3RydWN0IHVzYl9jdHJscmVxdWVzdCAqKSB1cmItPnNldHVwX3BhY2tldDsKKwkJc3RydWN0IHZoY2lfZGV2aWNlICp2ZGV2ID0KKwkJCQlwb3J0X3RvX3ZkZXYodGhlX2NvbnRyb2xsZXItPnBlbmRpbmdfcG9ydCk7CisKKwkJaWYgKHR5cGUgIT0gUElQRV9DT05UUk9MIHx8ICFjdHJscmVxKSB7CisJCQlkZXZfZXJyKGRldiwgImludmFsaWQgcmVxdWVzdCB0byBkZXZudW0gMFxuIik7CisJCQlyZXQgPSBFSU5WQUw7CisJCQlnb3RvIG5vX25lZWRfeG1pdDsKKwkJfQorCisJCXN3aXRjaCAoY3RybHJlcS0+YlJlcXVlc3QpIHsKKwkJY2FzZSBVU0JfUkVRX1NFVF9BRERSRVNTOgorCQkJLyogc2V0X2FkZHJlc3MgbWF5IGNvbWUgd2hlbiBhIGRldmljZSBpcyByZXNldCAqLworCQkJZGV2X2luZm8oZGV2LCAiU2V0QWRkcmVzcyBSZXF1ZXN0ICglZCkgdG8gcG9ydCAlZFxuIiwKKwkJCQkgY3RybHJlcS0+d1ZhbHVlLCB2ZGV2LT5yaHBvcnQpOworCisJCQl2ZGV2LT51ZGV2ID0gdXJiLT5kZXY7CisKKwkJCXNwaW5fbG9jaygmdmRldi0+dWQubG9jayk7CisJCQl2ZGV2LT51ZC5zdGF0dXMgPSBWREVWX1NUX1VTRUQ7CisJCQlzcGluX3VubG9jaygmdmRldi0+dWQubG9jayk7CisKKwkJCWlmICh1cmItPnN0YXR1cyA9PSAtRUlOUFJPR1JFU1MpIHsKKwkJCQkvKiBUaGlzIHJlcXVlc3QgaXMgc3VjY2Vzc2Z1bGx5IGNvbXBsZXRlZC4gKi8KKwkJCQkvKiBJZiBub3QgLUVJTlBST0dSRVNTLCBwb3NzaWJseSB1bmxpbmtlZC4gKi8KKwkJCQl1cmItPnN0YXR1cyA9IDA7CisJCQl9CisKKwkJCWdvdG8gbm9fbmVlZF94bWl0OworCisJCWNhc2UgVVNCX1JFUV9HRVRfREVTQ1JJUFRPUjoKKwkJCWlmIChjdHJscmVxLT53VmFsdWUgPT0gKFVTQl9EVF9ERVZJQ0UgPDwgOCkpCisJCQkJZGJnX3ZoY2lfaGMoIk5vdCB5ZXQ/OiAiCisJCQkJCQkiR2V0X0Rlc2NyaXB0b3IgdG8gZGV2aWNlIDAgIgorCQkJCQkJIihnZXQgbWF4IHBpcGUgc2l6ZSlcbiIpOworCisJCQkvKiBGSVhNRTogcmVmZXJlbmNlIGNvdW50PyAodXNiX2dldF9kZXYoKSkgKi8KKwkJCXZkZXYtPnVkZXYgPSB1cmItPmRldjsKKwkJCWdvdG8gb3V0OworCisJCWRlZmF1bHQ6CisJCQkvKiBOT1QgUkVBQ0hFRCAqLworCQkJZGV2X2VycihkZXYsICJpbnZhbGlkIHJlcXVlc3QgdG8gZGV2bnVtIDAgYlJlcXVlc3QgJXUsICIKKwkJCQkid1ZhbHVlICV1XG4iLCBjdHJscmVxLT5iUmVxdWVzdCwKKwkJCQljdHJscmVxLT53VmFsdWUpOworCQkJcmV0ID0gIC1FSU5WQUw7CisJCQlnb3RvIG5vX25lZWRfeG1pdDsKKwkJfQorCisJfQorCitvdXQ6CisJdmhjaV90eF91cmIodXJiKTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnRoZV9jb250cm9sbGVyLT5sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gMDsKKworbm9fbmVlZF94bWl0OgorCXVzYl9oY2RfdW5saW5rX3VyYl9mcm9tX2VwKGhjZCwgdXJiKTsKK25vX25lZWRfdW5saW5rOgorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnRoZV9jb250cm9sbGVyLT5sb2NrLCBmbGFncyk7CisKKwl1c2JfaGNkX2dpdmViYWNrX3VyYih2aGNpX3RvX2hjZCh0aGVfY29udHJvbGxlciksIHVyYiwgdXJiLT5zdGF0dXMpOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiB2aGNpX3J4IGdpdmVzIGJhY2sgdGhlIHVyYiBhZnRlciByZWNlaXZpbmcgdGhlIHJlcGx5IG9mIHRoZSB1cmIuICBJZiBhbgorICogdW5saW5rIHBkdSBpcyBzZW50IG9yIG5vdCwgdmhjaV9yeCByZWNlaXZlcyBhIG5vcm1hbCByZXR1cm4gcGR1IGFuZCBnaXZlcworICogYmFjayBpdHMgdXJiLiBGb3IgdGhlIGRyaXZlciB1bmxpbmtpbmcgdGhlIHVyYiwgdGhlIGNvbnRlbnQgb2YgdGhlIHVyYiBpcworICogbm90IGltcG9ydGFudCwgYnV0IHRoZSBjYWxsaW5nIHRvIGl0cyBjb21wbGV0aW9uIGhhbmRsZXIgaXMgaW1wb3J0YW50OyB0aGUKKyAqIGNvbXBsZXRpb24gb2YgdW5saW5raW5nIGlzIG5vdGlmaWVkIGJ5IHRoZSBjb21wbGV0aW9uIGhhbmRsZXIuCisgKgorICoKKyAqIENMSUVOVCBTSURFCisgKgorICogLSBXaGVuIHZoY2lfaGNkIHJlY2VpdmVzIFJFVF9TVUJNSVQsCisgKgorICoJLSBjYXNlIDFhKS4gdGhlIHVyYiBvZiB0aGUgcGR1IGlzIG5vdCB1bmxpbmtpbmcuCisgKgkJLSBub3JtYWwgY2FzZQorICoJCT0+IGp1c3QgZ2l2ZSBiYWNrIHRoZSB1cmIKKyAqCisgKgktIGNhc2UgMWIpLiB0aGUgdXJiIG9mIHRoZSBwZHUgaXMgdW5saW5raW5nLgorICoJCS0gdXNiaXAua28gd2lsbCByZXR1cm4gYSByZXBseSBvZiB0aGUgdW5saW5raW5nIHJlcXVlc3QuCisgKgkJPT4gZ2l2ZSBiYWNrIHRoZSB1cmIgbm93IGFuZCBnbyB0byBjYXNlIDJiKS4KKyAqCisgKiAtIFdoZW4gdmhjaV9oY2QgcmVjZWl2ZXMgUkVUX1VOTElOSywKKyAqCisgKgktIGNhc2UgMmEpLiBhIHN1Ym1pdCByZXF1ZXN0IGlzIHN0aWxsIHBlbmRpbmcgaW4gdmhjaV9oY2QuCisgKgkJLSB1cmIgd2FzIHJlYWxseSBwZW5kaW5nIGluIHVzYmlwLmtvIGFuZCB1cmJfdW5saW5rX3VyYigpIHdhcworICoJCSAgY29tcGxldGVkIHRoZXJlLgorICoJCT0+IGZyZWUgYSBwZW5kaW5nIHN1Ym1pdCByZXF1ZXN0CisgKgkJPT4gbm90aWZ5IHVubGluayBjb21wbGV0ZW5lc3MgYnkgZ2l2aW5nIGJhY2sgdGhlIHVyYgorICoKKyAqCS0gY2FzZSAyYikuIGEgc3VibWl0IHJlcXVlc3QgaXMgKm5vdCogcGVuZGluZyBpbiB2aGNpX2hjZC4KKyAqCQktIHVyYiB3YXMgYWxyZWFkeSBnaXZlbiBiYWNrIHRvIHRoZSBjb3JlIGRyaXZlci4KKyAqCQk9PiBkbyBub3QgZ2l2ZSBiYWNrIHRoZSB1cmIKKyAqCisgKgorICogU0VSVkVSIFNJREUKKyAqCisgKiAtIFdoZW4gdXNiaXAgcmVjZWl2ZXMgQ01EX1VOTElOSywKKyAqCisgKgktIGNhc2UgM2EpLiB0aGUgdXJiIG9mIHRoZSB1bmxpbmsgcmVxdWVzdCBpcyBub3cgaW4gc3VibWlzc2lvbi4KKyAqCQk9PiBkbyB1c2JfdW5saW5rX3VyYigpLgorICoJCT0+IGFmdGVyIHRoZSB1bmxpbmsgaXMgY29tcGxldGVkLCBzZW5kIFJFVF9VTkxJTksuCisgKgorICoJLSBjYXNlIDNiKS4gdGhlIHVyYiBvZiB0aGUgdW5saW5rIHJlcXVlc3QgaXMgbm90IGluIHN1Ym1pc3Npb24uCisgKgkJLSBtYXkgYmUgYWxyZWFkeSBjb21wbGV0ZWQgb3IgbmV2ZXIgYmUgcmVjZWl2ZWQKKyAqCQk9PiBzZW5kIFJFVF9VTkxJTksKKyAqCisgKi8KK3N0YXRpYyBpbnQgdmhjaV91cmJfZGVxdWV1ZShzdHJ1Y3QgdXNiX2hjZCAqaGNkLCBzdHJ1Y3QgdXJiICp1cmIsIGludCBzdGF0dXMpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgdmhjaV9wcml2ICpwcml2OworCXN0cnVjdCB2aGNpX2RldmljZSAqdmRldjsKKworCXVpbmZvKCJ2aGNpX2hjZDogZGVxdWV1ZSBhIHVyYiAlcFxuIiwgdXJiKTsKKworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnRoZV9jb250cm9sbGVyLT5sb2NrLCBmbGFncyk7CisKKwlwcml2ID0gdXJiLT5oY3ByaXY7CisJaWYgKCFwcml2KSB7CisJCS8qIFVSQiB3YXMgbmV2ZXIgbGlua2VkISBvciB3aWxsIGJlIHNvb24gZ2l2ZW4gYmFjayBieQorCQkgKiB2aGNpX3J4LiAqLworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0aGVfY29udHJvbGxlci0+bG9jaywgZmxhZ3MpOworCQlyZXR1cm4gMDsKKwl9CisKKwl7CisJCWludCByZXQgPSAwOworCQlyZXQgPSB1c2JfaGNkX2NoZWNrX3VubGlua191cmIoaGNkLCB1cmIsIHN0YXR1cyk7CisJCWlmIChyZXQpIHsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnRoZV9jb250cm9sbGVyLT5sb2NrLCBmbGFncyk7CisJCQlyZXR1cm4gMDsKKwkJfQorCX0KKworCSAvKiBzZW5kIHVubGluayByZXF1ZXN0IGhlcmU/ICovCisJdmRldiA9IHByaXYtPnZkZXY7CisKKwlpZiAoIXZkZXYtPnVkLnRjcF9zb2NrZXQpIHsKKwkJLyogdGNwIGNvbm5lY3Rpb24gaXMgY2xvc2VkICovCisJCXVuc2lnbmVkIGxvbmcgZmxhZ3MyOworCisJCXNwaW5fbG9ja19pcnFzYXZlKCZ2ZGV2LT5wcml2X2xvY2ssIGZsYWdzMik7CisKKwkJdWluZm8oInZoY2lfaGNkOiBkZXZpY2UgJXAgc2VlbXMgdG8gYmUgZGlzY29ubmVjdGVkXG4iLCB2ZGV2KTsKKwkJbGlzdF9kZWwoJnByaXYtPmxpc3QpOworCQlrZnJlZShwcml2KTsKKwkJdXJiLT5oY3ByaXYgPSBOVUxMOworCisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnZkZXYtPnByaXZfbG9jaywgZmxhZ3MyKTsKKworCX0gZWxzZSB7CisJCS8qIHRjcCBjb25uZWN0aW9uIGlzIGFsaXZlICovCisJCXVuc2lnbmVkIGxvbmcgZmxhZ3MyOworCQlzdHJ1Y3QgdmhjaV91bmxpbmsgKnVubGluazsKKworCQlzcGluX2xvY2tfaXJxc2F2ZSgmdmRldi0+cHJpdl9sb2NrLCBmbGFnczIpOworCisJCS8qIHNldHVwIENNRF9VTkxJTksgcGR1ICovCisJCXVubGluayA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB2aGNpX3VubGluayksIEdGUF9BVE9NSUMpOworCQlpZiAoIXVubGluaykgeworCQkJdWVycigibWFsbG9jIHZoY2lfdW5saW5rXG4iKTsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnZkZXYtPnByaXZfbG9jaywgZmxhZ3MyKTsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnRoZV9jb250cm9sbGVyLT5sb2NrLCBmbGFncyk7CisJCQl1c2JpcF9ldmVudF9hZGQoJnZkZXYtPnVkLCBWREVWX0VWRU5UX0VSUk9SX01BTExPQyk7CisJCQlyZXR1cm4gLUVOT01FTTsKKwkJfQorCisJCXVubGluay0+c2VxbnVtID0gYXRvbWljX2luY19yZXR1cm4oJnRoZV9jb250cm9sbGVyLT5zZXFudW0pOworCQlpZiAodW5saW5rLT5zZXFudW0gPT0gMHhmZmZmKQorCQkJdWluZm8oInNlcW51bSBtYXhcbiIpOworCisJCXVubGluay0+dW5saW5rX3NlcW51bSA9IHByaXYtPnNlcW51bTsKKworCQl1aW5mbygidmhjaV9oY2Q6IGRldmljZSAlcCBzZWVtcyB0byBiZSBzdGlsbCBjb25uZWN0ZWRcbiIsCisJCQkJCQkJCQl2ZGV2KTsKKworCQkvKiBzZW5kIGNtZF91bmxpbmsgYW5kIHRyeSB0byBjYW5jZWwgdGhlIHBlbmRpbmcgVVJCIGluIHRoZQorCQkgKiBwZWVyICovCisJCWxpc3RfYWRkX3RhaWwoJnVubGluay0+bGlzdCwgJnZkZXYtPnVubGlua190eCk7CisJCXdha2VfdXAoJnZkZXYtPndhaXRxX3R4KTsKKworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ2ZGV2LT5wcml2X2xvY2ssIGZsYWdzMik7CisJfQorCisKKwkvKgorCSAqIElmIHRjcCBjb25uZWN0aW9uIGlzIGFsaXZlLCB3ZSBoYXZlIHNlbnQgQ01EX1VOTElOSy4KKwkgKiB2aGNpX3J4IHdpbGwgcmVjZWl2ZSBSRVRfVU5MSU5LIGFuZCBnaXZlIGJhY2sgdGhlIFVSQi4KKwkgKiBPdGhlcndpc2UsIHdlIGdpdmUgYmFjayBpdCBoZXJlLgorCSAqLworCWlmICghdmRldi0+dWQudGNwX3NvY2tldCkgeworCQkvKiB0Y3AgY29ubmVjdGlvbiBpcyBjbG9zZWQgKi8KKwkJdWluZm8oInZoY2lfaGNkOiB2aGNpX3VyYl9kZXF1ZXVlKCkgZ2l2ZXMgYmFjayB1cmIgJXBcbiIsIHVyYik7CisKKwkJdXNiX2hjZF91bmxpbmtfdXJiX2Zyb21fZXAoaGNkLCB1cmIpOworCisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnRoZV9jb250cm9sbGVyLT5sb2NrLCBmbGFncyk7CisJCXVzYl9oY2RfZ2l2ZWJhY2tfdXJiKHZoY2lfdG9faGNkKHRoZV9jb250cm9sbGVyKSwgdXJiLAorCQkJCQkJCQl1cmItPnN0YXR1cyk7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZ0aGVfY29udHJvbGxlci0+bG9jaywgZmxhZ3MpOworCX0KKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnRoZV9jb250cm9sbGVyLT5sb2NrLCBmbGFncyk7CisKKwlkYmdfdmhjaV9oYygibGVhdmVcbiIpOworCXJldHVybiAwOworfQorCisKK3N0YXRpYyB2b2lkIHZoY2lfZGV2aWNlX3VubGlua19jbGVhbnVwKHN0cnVjdCB2aGNpX2RldmljZSAqdmRldikKK3sKKwlzdHJ1Y3QgdmhjaV91bmxpbmsgKnVubGluaywgKnRtcDsKKworCXNwaW5fbG9jaygmdmRldi0+cHJpdl9sb2NrKTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSh1bmxpbmssIHRtcCwgJnZkZXYtPnVubGlua190eCwgbGlzdCkgeworCQlsaXN0X2RlbCgmdW5saW5rLT5saXN0KTsKKwkJa2ZyZWUodW5saW5rKTsKKwl9CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUodW5saW5rLCB0bXAsICZ2ZGV2LT51bmxpbmtfcngsIGxpc3QpIHsKKwkJbGlzdF9kZWwoJnVubGluay0+bGlzdCk7CisJCWtmcmVlKHVubGluayk7CisJfQorCisJc3Bpbl91bmxvY2soJnZkZXYtPnByaXZfbG9jayk7Cit9CisKKy8qCisgKiBUaGUgaW1wb3J0YW50IHRoaW5nIGlzIHRoYXQgb25seSBvbmUgY29udGV4dCBiZWdpbnMgY2xlYW51cC4KKyAqIFRoaXMgaXMgd2h5IGVycm9yIGhhbmRsaW5nIGFuZCBjbGVhbnVwIGJlY29tZSBzaW1wbGUuCisgKiBXZSBkbyBub3Qgd2FudCB0byBjb25zaWRlciByYWNlIGNvbmRpdGlvbiBhcyBwb3NzaWJsZS4KKyAqLworc3RhdGljIHZvaWQgdmhjaV9zaHV0ZG93bl9jb25uZWN0aW9uKHN0cnVjdCB1c2JpcF9kZXZpY2UgKnVkKQoreworCXN0cnVjdCB2aGNpX2RldmljZSAqdmRldiA9IGNvbnRhaW5lcl9vZih1ZCwgc3RydWN0IHZoY2lfZGV2aWNlLCB1ZCk7CisKKwkvKiBuZWVkIHRoaXM/IHNlZSBzdHViX2Rldi5jICovCisJaWYgKHVkLT50Y3Bfc29ja2V0KSB7CisJCXVkYmcoInNodXRkb3duIHRjcF9zb2NrZXQgJXBcbiIsIHVkLT50Y3Bfc29ja2V0KTsKKwkJa2VybmVsX3NvY2tfc2h1dGRvd24odWQtPnRjcF9zb2NrZXQsIFNIVVRfUkRXUik7CisJfQorCisJdXNiaXBfc3RvcF90aHJlYWRzKCZ2ZGV2LT51ZCk7CisJdWluZm8oInN0b3AgdGhyZWFkc1xuIik7CisKKwkvKiBhY3RpdmUgY29ubmVjdGlvbiBpcyBjbG9zZWQgKi8KKwlpZiAodmRldi0+dWQudGNwX3NvY2tldCAhPSBOVUxMKSB7CisJCXNvY2tfcmVsZWFzZSh2ZGV2LT51ZC50Y3Bfc29ja2V0KTsKKwkJdmRldi0+dWQudGNwX3NvY2tldCA9IE5VTEw7CisJfQorCXVpbmZvKCJyZWxlYXNlIHNvY2tldFxuIik7CisKKwl2aGNpX2RldmljZV91bmxpbmtfY2xlYW51cCh2ZGV2KTsKKworCS8qCisJICogcmhfcG9ydF9kaXNjb25uZWN0KCkgaXMgYSB0cmlnZ2VyIG9mIC4uLgorCSAqICAgdXNiX2Rpc2FibGVfZGV2aWNlKCk6CisJICoJZGlzYWJsZSBhbGwgdGhlIGVuZHBvaW50cyBmb3IgYSBVU0IgZGV2aWNlLgorCSAqICAgdXNiX2Rpc2FibGVfZW5kcG9pbnQoKToKKwkgKglkaXNhYmxlIGVuZHBvaW50cy4gcGVuZGluZyB1cmJzIGFyZSB1bmxpbmtlZChkZXF1ZXVlZCkuCisJICoKKwkgKiBOT1RFOiBBZnRlciBjYWxsaW5nIHJoX3BvcnRfZGlzY29ubmVjdCgpLCB0aGUgVVNCIGRldmljZSBkcml2ZXJzIG9mIGEKKwkgKiBkZXRlY2hlZCBkZXZpY2Ugc2hvdWxkIHJlbGVhc2UgdXNlZCB1cmJzIGluIGEgY2xlYW51cCBmdW5jdGlvbihpLmUuCisJICogeHh4X2Rpc2Nvbm5lY3QoKSkuIFRoZXJlZm9yZSwgdmhjaV9oY2QgZG9lcyBub3QgbmVlZCB0byByZWxlYXNlCisJICogcHVzaGVkIHVyYnMgYW5kIHRoZWlyIHByaXZhdGUgZGF0YSBpbiB0aGlzIGZ1bmN0aW9uLgorCSAqCisJICogTk9URTogdmhjaV9kZXF1ZXVlKCkgbXVzdCBiZSBjb25zaWRlcmVkIGNhcmVmdWxseS4gV2hlbiBzaHV0ZG93bmluZworCSAqIGEgY29ubmVjdGlvbiwgdmhjaV9zaHV0ZG93bl9jb25uZWN0aW9uKCkgZXhwZWN0cyB2aGNpX2RlcXVldWUoKQorCSAqIGdpdmVzIGJhY2sgcHVzaGVkIHVyYnMgYW5kIGZyZWVzIHRoZWlyIHByaXZhdGUgZGF0YSBieSByZXF1ZXN0IG9mCisJICogdGhlIGNsZWFudXAgZnVuY3Rpb24gb2YgYSBVU0IgZHJpdmVyLiBXaGVuIHVubGlua2luZyBhIHVyYiB3aXRoIGFuCisJICogYWN0aXZlIGNvbm5lY3Rpb24sIHZoY2lfZGVxdWV1ZSgpIGRvZXMgbm90IGdpdmUgYmFjayB0aGUgdXJiIHdoaWNoCisJICogaXMgYWN0dWFsbHkgZ2l2ZW4gYmFjayBieSB2aGNpX3J4IGFmdGVyIHJlY2VpdmluZyBpdHMgcmV0dXJuIHBkdS4KKwkgKgorCSAqLworCXJoX3BvcnRfZGlzY29ubmVjdCh2ZGV2LT5yaHBvcnQpOworCisJdWluZm8oImRpc2Nvbm5lY3QgZGV2aWNlXG4iKTsKK30KKworCitzdGF0aWMgdm9pZCB2aGNpX2RldmljZV9yZXNldChzdHJ1Y3QgdXNiaXBfZGV2aWNlICp1ZCkKK3sKKwlzdHJ1Y3QgdmhjaV9kZXZpY2UgKnZkZXYgPSBjb250YWluZXJfb2YodWQsIHN0cnVjdCB2aGNpX2RldmljZSwgdWQpOworCisJc3Bpbl9sb2NrKCZ1ZC0+bG9jayk7CisKKwl2ZGV2LT5zcGVlZCAgPSAwOworCXZkZXYtPmRldmlkICA9IDA7CisKKwl1ZC0+dGNwX3NvY2tldCA9IE5VTEw7CisKKwl1ZC0+c3RhdHVzID0gVkRFVl9TVF9OVUxMOworCisJc3Bpbl91bmxvY2soJnVkLT5sb2NrKTsKK30KKworc3RhdGljIHZvaWQgdmhjaV9kZXZpY2VfdW51c2FibGUoc3RydWN0IHVzYmlwX2RldmljZSAqdWQpCit7CisJc3Bpbl9sb2NrKCZ1ZC0+bG9jayk7CisKKwl1ZC0+c3RhdHVzID0gVkRFVl9TVF9FUlJPUjsKKworCXNwaW5fdW5sb2NrKCZ1ZC0+bG9jayk7Cit9CisKK3N0YXRpYyB2b2lkIHZoY2lfZGV2aWNlX2luaXQoc3RydWN0IHZoY2lfZGV2aWNlICp2ZGV2KQoreworCW1lbXNldCh2ZGV2LCAwLCBzaXplb2YoKnZkZXYpKTsKKworCXVzYmlwX3Rhc2tfaW5pdCgmdmRldi0+dWQudGNwX3J4LCAidmhjaV9yeCIsIHZoY2lfcnhfbG9vcCk7CisJdXNiaXBfdGFza19pbml0KCZ2ZGV2LT51ZC50Y3BfdHgsICJ2aGNpX3R4IiwgdmhjaV90eF9sb29wKTsKKworCXZkZXYtPnVkLnNpZGUgICA9IFVTQklQX1ZIQ0k7CisJdmRldi0+dWQuc3RhdHVzID0gVkRFVl9TVF9OVUxMOworCS8qIHZkZXYtPnVkLmxvY2sgICA9IFNQSU5fTE9DS19VTkxPQ0tFRDsgKi8KKwlzcGluX2xvY2tfaW5pdCgmdmRldi0+dWQubG9jayk7CisKKwlJTklUX0xJU1RfSEVBRCgmdmRldi0+cHJpdl9yeCk7CisJSU5JVF9MSVNUX0hFQUQoJnZkZXYtPnByaXZfdHgpOworCUlOSVRfTElTVF9IRUFEKCZ2ZGV2LT51bmxpbmtfdHgpOworCUlOSVRfTElTVF9IRUFEKCZ2ZGV2LT51bmxpbmtfcngpOworCS8qIHZkZXYtPnByaXZfbG9jayA9IFNQSU5fTE9DS19VTkxPQ0tFRDsgKi8KKwlzcGluX2xvY2tfaW5pdCgmdmRldi0+cHJpdl9sb2NrKTsKKworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnZkZXYtPndhaXRxX3R4KTsKKworCXZkZXYtPnVkLmVoX29wcy5zaHV0ZG93biA9IHZoY2lfc2h1dGRvd25fY29ubmVjdGlvbjsKKwl2ZGV2LT51ZC5laF9vcHMucmVzZXQgPSB2aGNpX2RldmljZV9yZXNldDsKKwl2ZGV2LT51ZC5laF9vcHMudW51c2FibGUgPSB2aGNpX2RldmljZV91bnVzYWJsZTsKKworCXVzYmlwX3N0YXJ0X2VoKCZ2ZGV2LT51ZCk7Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGludCB2aGNpX3N0YXJ0KHN0cnVjdCB1c2JfaGNkICpoY2QpCit7CisJc3RydWN0IHZoY2lfaGNkICp2aGNpID0gaGNkX3RvX3ZoY2koaGNkKTsKKwlpbnQgcmhwb3J0OworCWludCBlcnIgPSAwOworCisJZGJnX3ZoY2lfaGMoImVudGVyIHZoY2lfc3RhcnRcbiIpOworCisKKwkvKiBpbml0aWFsaXplIHByaXZhdGUgZGF0YSBvZiB1c2JfaGNkICovCisKKwlmb3IgKHJocG9ydCA9IDA7IHJocG9ydCA8IFZIQ0lfTlBPUlRTOyByaHBvcnQrKykgeworCQlzdHJ1Y3QgdmhjaV9kZXZpY2UgKnZkZXYgPSAmdmhjaS0+dmRldltyaHBvcnRdOworCQl2aGNpX2RldmljZV9pbml0KHZkZXYpOworCQl2ZGV2LT5yaHBvcnQgPSByaHBvcnQ7CisJfQorCisJYXRvbWljX3NldCgmdmhjaS0+c2VxbnVtLCAwKTsKKwlzcGluX2xvY2tfaW5pdCgmdmhjaS0+bG9jayk7CisKKworCisJaGNkLT5wb3dlcl9idWRnZXQgPSAwOyAvKiBubyBsaW1pdCAqLworCWhjZC0+c3RhdGUgID0gSENfU1RBVEVfUlVOTklORzsKKwloY2QtPnVzZXNfbmV3X3BvbGxpbmcgPSAxOworCisKKwkvKiB2aGNpX2hjZCBpcyBub3cgcmVhZHkgdG8gYmUgY29udHJvbGxlZCB0aHJvdWdoIHN5c2ZzICovCisJZXJyID0gc3lzZnNfY3JlYXRlX2dyb3VwKCZ2aGNpX2Rldih2aGNpKS0+a29iaiwgJmRldl9hdHRyX2dyb3VwKTsKKwlpZiAoZXJyKSB7CisJCXVlcnIoImNyZWF0ZSBzeXNmcyBmaWxlc1xuIik7CisJCXJldHVybiBlcnI7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHZoY2lfc3RvcChzdHJ1Y3QgdXNiX2hjZCAqaGNkKQoreworCXN0cnVjdCB2aGNpX2hjZCAqdmhjaSA9IGhjZF90b192aGNpKGhjZCk7CisJaW50IHJocG9ydCA9IDA7CisKKwlkYmdfdmhjaV9oYygic3RvcCBWSENJIGNvbnRyb2xsZXJcbiIpOworCisKKwkvKiAxLiByZW1vdmUgdGhlIHVzZXJsYW5kIGludGVyZmFjZSBvZiB2aGNpX2hjZCAqLworCXN5c2ZzX3JlbW92ZV9ncm91cCgmdmhjaV9kZXYodmhjaSktPmtvYmosICZkZXZfYXR0cl9ncm91cCk7CisKKwkvKiAyLiBzaHV0ZG93biBhbGwgdGhlIHBvcnRzIG9mIHZoY2lfaGNkICovCisJZm9yIChyaHBvcnQgPSAwIDsgcmhwb3J0IDwgVkhDSV9OUE9SVFM7IHJocG9ydCsrKSB7CisJCXN0cnVjdCB2aGNpX2RldmljZSAqdmRldiA9ICZ2aGNpLT52ZGV2W3JocG9ydF07CisKKwkJdXNiaXBfZXZlbnRfYWRkKCZ2ZGV2LT51ZCwgVkRFVl9FVkVOVF9SRU1PVkVEKTsKKwkJdXNiaXBfc3RvcF9laCgmdmRldi0+dWQpOworCX0KKworCisJdWluZm8oInZoY2lfc3RvcCBkb25lXG4iKTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGludCB2aGNpX2dldF9mcmFtZV9udW1iZXIoc3RydWN0IHVzYl9oY2QgKmhjZCkKK3sKKwl1ZXJyKCJOb3QgeWV0IGltcGxlbWVudGVkXG4iKTsKKwlyZXR1cm4gMDsKK30KKworCisjaWZkZWYgQ09ORklHX1BNCisKKy8qIEZJWE1FOiBzdXNwZW5kL3Jlc3VtZSAqLworc3RhdGljIGludCB2aGNpX2J1c19zdXNwZW5kKHN0cnVjdCB1c2JfaGNkICpoY2QpCit7CisJc3RydWN0IHZoY2lfaGNkICp2aGNpID0gaGNkX3RvX3ZoY2koaGNkKTsKKworCWRldl9kYmcoJmhjZC0+c2VsZi5yb290X2h1Yi0+ZGV2LCAiJXNcbiIsIF9fZnVuY19fKTsKKworCXNwaW5fbG9ja19pcnEoJnZoY2ktPmxvY2spOworCS8qIHZoY2ktPnJoX3N0YXRlID0gRFVNTVlfUkhfU1VTUEVOREVEOworCSAqIHNldF9saW5rX3N0YXRlKHZoY2kpOyAqLworCWhjZC0+c3RhdGUgPSBIQ19TVEFURV9TVVNQRU5ERUQ7CisJc3Bpbl91bmxvY2tfaXJxKCZ2aGNpLT5sb2NrKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZoY2lfYnVzX3Jlc3VtZShzdHJ1Y3QgdXNiX2hjZCAqaGNkKQoreworCXN0cnVjdCB2aGNpX2hjZCAqdmhjaSA9IGhjZF90b192aGNpKGhjZCk7CisJaW50IHJjID0gMDsKKworCWRldl9kYmcoJmhjZC0+c2VsZi5yb290X2h1Yi0+ZGV2LCAiJXNcbiIsIF9fZnVuY19fKTsKKworCXNwaW5fbG9ja19pcnEoJnZoY2ktPmxvY2spOworCWlmICghdGVzdF9iaXQoSENEX0ZMQUdfSFdfQUNDRVNTSUJMRSwgJmhjZC0+ZmxhZ3MpKSB7CisJCXJjID0gLUVTSFVURE9XTjsKKwl9IGVsc2UgeworCQkvKiB2aGNpLT5yaF9zdGF0ZSA9IERVTU1ZX1JIX1JVTk5JTkc7CisJCSAqIHNldF9saW5rX3N0YXRlKHZoY2kpOworCQkgKiBpZiAoIWxpc3RfZW1wdHkoJnZoY2ktPnVyYnBfbGlzdCkpCisJCSAqCW1vZF90aW1lcigmdmhjaS0+dGltZXIsIGppZmZpZXMpOyAqLworCQloY2QtPnN0YXRlID0gSENfU1RBVEVfUlVOTklORzsKKwl9CisJc3Bpbl91bmxvY2tfaXJxKCZ2aGNpLT5sb2NrKTsKKwlyZXR1cm4gcmM7CisKKwlyZXR1cm4gMDsKK30KKworI2Vsc2UKKworI2RlZmluZSB2aGNpX2J1c19zdXNwZW5kICAgICAgTlVMTAorI2RlZmluZSB2aGNpX2J1c19yZXN1bWUgICAgICAgTlVMTAorI2VuZGlmCisKKworCitzdGF0aWMgc3RydWN0IGhjX2RyaXZlciB2aGNpX2hjX2RyaXZlciA9IHsKKwkuZGVzY3JpcHRpb24JPSBkcml2ZXJfbmFtZSwKKwkucHJvZHVjdF9kZXNjCT0gZHJpdmVyX2Rlc2MsCisJLmhjZF9wcml2X3NpemUJPSBzaXplb2Yoc3RydWN0IHZoY2lfaGNkKSwKKworCS5mbGFncwkJPSBIQ0RfVVNCMiwKKworCS5zdGFydAkJPSB2aGNpX3N0YXJ0LAorCS5zdG9wIAkJPSB2aGNpX3N0b3AsCisKKwkudXJiX2VucXVldWUJPSB2aGNpX3VyYl9lbnF1ZXVlLAorCS51cmJfZGVxdWV1ZQk9IHZoY2lfdXJiX2RlcXVldWUsCisKKwkuZ2V0X2ZyYW1lX251bWJlciA9IHZoY2lfZ2V0X2ZyYW1lX251bWJlciwKKworCS5odWJfc3RhdHVzX2RhdGEgPSB2aGNpX2h1Yl9zdGF0dXMsCisJLmh1Yl9jb250cm9sICAgID0gdmhjaV9odWJfY29udHJvbCwKKwkuYnVzX3N1c3BlbmQJPSB2aGNpX2J1c19zdXNwZW5kLAorCS5idXNfcmVzdW1lCT0gdmhjaV9idXNfcmVzdW1lLAorfTsKKworc3RhdGljIGludCB2aGNpX2hjZF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCB1c2JfaGNkCQkqaGNkOworCWludAkJCXJldDsKKworCXVpbmZvKCJwcm92aW5nLi4uXG4iKTsKKworCWRiZ192aGNpX2hjKCJuYW1lICVzIGlkICVkXG4iLCBwZGV2LT5uYW1lLCBwZGV2LT5pZCk7CisKKwkvKiB3aWxsIGJlIHJlbW92ZWQgKi8KKwlpZiAocGRldi0+ZGV2LmRtYV9tYXNrKSB7CisJCWRldl9pbmZvKCZwZGV2LT5kZXYsICJ2aGNpX2hjZCBETUEgbm90IHN1cHBvcnRlZFxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qCisJICogQWxsb2NhdGUgYW5kIGluaXRpYWxpemUgaGNkLgorCSAqIE91ciBwcml2YXRlIGRhdGEgaXMgYWxzbyBhbGxvY2F0ZWQgYXV0b21hdGljYWxseS4KKwkgKi8KKwloY2QgPSB1c2JfY3JlYXRlX2hjZCgmdmhjaV9oY19kcml2ZXIsICZwZGV2LT5kZXYsIHBkZXYtPmRldi5idXNfaWQpOworCWlmICghaGNkKSB7CisJCXVlcnIoImNyZWF0ZSBoY2QgZmFpbGVkXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisKKwkvKiB0aGlzIGlzIHByaXZhdGUgZGF0YSBmb3IgdmhjaV9oY2QgKi8KKwl0aGVfY29udHJvbGxlciA9IGhjZF90b192aGNpKGhjZCk7CisKKwkvKgorCSAqIEZpbmlzaCBnZW5lcmljIEhDRCBzdHJ1Y3R1cmUgaW5pdGlhbGl6YXRpb24gYW5kIHJlZ2lzdGVyLgorCSAqIENhbGwgdGhlIGRyaXZlcidzIHJlc2V0KCkgYW5kIHN0YXJ0KCkgcm91dGluZXMuCisJICovCisJcmV0ID0gdXNiX2FkZF9oY2QoaGNkLCAwLCAwKTsKKwlpZiAocmV0ICE9IDApIHsKKwkJdWVycigidXNiX2FkZF9oY2QgZmFpbGVkICVkXG4iLCByZXQpOworCQl1c2JfcHV0X2hjZChoY2QpOworCQl0aGVfY29udHJvbGxlciA9IE5VTEw7CisJCXJldHVybiByZXQ7CisJfQorCisKKwlkYmdfdmhjaV9oYygiYnllXG4iKTsKKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMgaW50IHZoY2lfaGNkX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCB1c2JfaGNkCSpoY2Q7CisKKwloY2QgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlpZiAoIWhjZCkKKwkJcmV0dXJuIDA7CisKKwkvKgorCSAqIERpc2Nvbm5lY3RzIHRoZSByb290IGh1YiwKKwkgKiB0aGVuIHJldmVyc2VzIHRoZSBlZmZlY3RzIG9mIHVzYl9hZGRfaGNkKCksCisJICogaW52b2tpbmcgdGhlIEhDRCdzIHN0b3AoKSBtZXRob2RzLgorCSAqLworCXVzYl9yZW1vdmVfaGNkKGhjZCk7CisJdXNiX3B1dF9oY2QoaGNkKTsKKwl0aGVfY29udHJvbGxlciA9IE5VTEw7CisKKworCXJldHVybiAwOworfQorCisKKworI2lmZGVmIENPTkZJR19QTQorCisvKiB3aGF0IHNob3VsZCBoYXBwZW4gZm9yIFVTQi9JUCB1bmRlciBzdXNwZW5kL3Jlc3VtZT8gKi8KK3N0YXRpYyBpbnQgdmhjaV9oY2Rfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCit7CisJc3RydWN0IHVzYl9oY2QgKmhjZDsKKwlpbnQgcmhwb3J0ID0gMDsKKwlpbnQgY29ubmVjdGVkID0gMDsKKwlpbnQgcmV0ID0gMDsKKworCWRldl9kYmcoJnBkZXYtPmRldiwgIiVzXG4iLCBfX2Z1bmNfXyk7CisKKwloY2QgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKworCXNwaW5fbG9jaygmdGhlX2NvbnRyb2xsZXItPmxvY2spOworCisJZm9yIChyaHBvcnQgPSAwOyByaHBvcnQgPCBWSENJX05QT1JUUzsgcmhwb3J0KyspCisJCWlmICh0aGVfY29udHJvbGxlci0+cG9ydF9zdGF0dXNbcmhwb3J0XSAmCisJCQkJCQlVU0JfUE9SVF9TVEFUX0NPTk5FQ1RJT04pCisJCQljb25uZWN0ZWQgKz0gMTsKKworCXNwaW5fdW5sb2NrKCZ0aGVfY29udHJvbGxlci0+bG9jayk7CisKKwlpZiAoY29ubmVjdGVkID4gMCkgeworCQl1aW5mbygiV2UgaGF2ZSAlZCBhY3RpdmUgY29ubmVjdGlvbiVzLiBEbyBub3Qgc3VzcGVuZC5cbiIsCisJCQkJY29ubmVjdGVkLCAoY29ubmVjdGVkID09IDEgPyAiIiA6ICJzIikpOworCQlyZXQgPSAgLUVCVVNZOworCX0gZWxzZSB7CisJCXVpbmZvKCJzdXNwZW5kIHZoY2lfaGNkIik7CisJCWNsZWFyX2JpdChIQ0RfRkxBR19IV19BQ0NFU1NJQkxFLCAmaGNkLT5mbGFncyk7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCB2aGNpX2hjZF9yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgdXNiX2hjZCAqaGNkOworCisJZGV2X2RiZygmcGRldi0+ZGV2LCAiJXNcbiIsIF9fZnVuY19fKTsKKworCWhjZCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCXNldF9iaXQoSENEX0ZMQUdfSFdfQUNDRVNTSUJMRSwgJmhjZC0+ZmxhZ3MpOworCXVzYl9oY2RfcG9sbF9yaF9zdGF0dXMoaGNkKTsKKworCXJldHVybiAwOworfQorCisjZWxzZQorCisjZGVmaW5lIHZoY2lfaGNkX3N1c3BlbmQJTlVMTAorI2RlZmluZSB2aGNpX2hjZF9yZXN1bWUJCU5VTEwKKworI2VuZGlmCisKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgdmhjaV9kcml2ZXIgPSB7CisJLnByb2JlCT0gdmhjaV9oY2RfcHJvYmUsCisJLnJlbW92ZQk9IF9fZGV2ZXhpdF9wKHZoY2lfaGNkX3JlbW92ZSksCisJLnN1c3BlbmQgPSB2aGNpX2hjZF9zdXNwZW5kLAorCS5yZXN1bWUJPSB2aGNpX2hjZF9yZXN1bWUsCisJLmRyaXZlcgk9IHsKKwkJLm5hbWUgPSAoY2hhciAqKSBkcml2ZXJfbmFtZSwKKwkJLm93bmVyID0gVEhJU19NT0RVTEUsCisJfSwKK307CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qCisgKiBUaGUgVkhDSSAnZGV2aWNlJyBpcyAndmlydHVhbCc7IG5vdCBhIHJlYWwgcGx1ZyZwbGF5IGhhcmR3YXJlLgorICogV2UgbmVlZCB0byBhZGQgdGhpcyB2aXJ0dWFsIGRldmljZSBhcyBhIHBsYXRmb3JtIGRldmljZSBhcmJpdHJhcmlseToKKyAqCTEuIHBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigpCisgKi8KK3N0YXRpYyB2b2lkIHRoZV9wZGV2X3JlbGVhc2Uoc3RydWN0IGRldmljZSAqZGV2KQoreworCXJldHVybjsKK30KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgdGhlX3BkZXYgPSB7CisJLyogc2hvdWxkIGJlIHRoZSBzYW1lIG5hbWUgYXMgZHJpdmVyX25hbWUgKi8KKwkubmFtZSA9IChjaGFyICopIGRyaXZlcl9uYW1lLAorCS5pZCA9IC0xLAorCS5kZXYgPSB7CisJCS8qIC5kcml2ZXIgPSAmdmhjaV9kcml2ZXIsICovCisJCS5yZWxlYXNlID0gdGhlX3BkZXZfcmVsZWFzZSwKKwl9LAorfTsKKworc3RhdGljIGludCBfX2luaXQgdmhjaV9pbml0KHZvaWQpCit7CisJaW50IHJldDsKKworCWRiZ192aGNpX2hjKCJlbnRlclxuIik7CisJaWYgKHVzYl9kaXNhYmxlZCgpKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCXByaW50ayhLRVJOX0lORk8gS0JVSUxEX01PRE5BTUUgIjogJXMsICVzXG4iLCBkcml2ZXJfbmFtZSwKKwkgICAgICAgRFJJVkVSX1ZFUlNJT04pOworCisJcmV0ID0gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZ2aGNpX2RyaXZlcik7CisJaWYgKHJldCA8IDApCisJCWdvdG8gZXJyX2RyaXZlcl9yZWdpc3RlcjsKKworCXJldCA9IHBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmdGhlX3BkZXYpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIGVycl9wbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXI7CisKKwlkYmdfdmhjaV9oYygiYnllXG4iKTsKKwlyZXR1cm4gcmV0OworCisJLyogZXJyb3Igb2NjdXJyZWQgKi8KK2Vycl9wbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXI6CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnZoY2lfZHJpdmVyKTsKKworZXJyX2RyaXZlcl9yZWdpc3RlcjoKKwlkYmdfdmhjaV9oYygiYnllXG4iKTsKKwlyZXR1cm4gcmV0OworfQorbW9kdWxlX2luaXQodmhjaV9pbml0KTsKKworc3RhdGljIHZvaWQgX19leGl0IHZoY2lfY2xlYW51cCh2b2lkKQoreworCWRiZ192aGNpX2hjKCJlbnRlclxuIik7CisKKwlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcigmdGhlX3BkZXYpOworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZ2aGNpX2RyaXZlcik7CisKKwlkYmdfdmhjaV9oYygiYnllXG4iKTsKK30KK21vZHVsZV9leGl0KHZoY2lfY2xlYW51cCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdXNiaXAvdmhjaV9yeC5jIGIvZHJpdmVycy9zdGFnaW5nL3VzYmlwL3ZoY2lfcnguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MzNjY2FmCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3VzYmlwL3ZoY2lfcnguYwpAQCAtMCwwICsxLDI1MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwMy0yMDA4IFRha2FoaXJvIEhpcm9mdWNoaQorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisgKiBVU0EuCisgKi8KKworI2luY2x1ZGUgInVzYmlwX2NvbW1vbi5oIgorI2luY2x1ZGUgInZoY2kuaCIKKworCisvKiBnZXQgVVJCIGZyb20gdHJhbnNtaXR0ZWQgdXJiIHF1ZXVlICovCitzdGF0aWMgc3RydWN0IHVyYiAqcGlja3VwX3VyYl9hbmRfZnJlZV9wcml2KHN0cnVjdCB2aGNpX2RldmljZSAqdmRldiwKKwkJCQkJICAgIF9fdTMyIHNlcW51bSkKK3sKKwlzdHJ1Y3QgdmhjaV9wcml2ICpwcml2LCAqdG1wOworCXN0cnVjdCB1cmIgKnVyYiA9IE5VTEw7CisJaW50IHN0YXR1czsKKworCXNwaW5fbG9jaygmdmRldi0+cHJpdl9sb2NrKTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwcml2LCB0bXAsICZ2ZGV2LT5wcml2X3J4LCBsaXN0KSB7CisJCWlmIChwcml2LT5zZXFudW0gPT0gc2VxbnVtKSB7CisJCQl1cmIgPSBwcml2LT51cmI7CisJCQlzdGF0dXMgPSB1cmItPnN0YXR1czsKKworCQkJZGJnX3ZoY2lfcngoImZpbmQgdXJiICVwIHZ1cmIgJXAgc2VxbnVtICV1XG4iLAorCQkJCSAgICB1cmIsIHByaXYsIHNlcW51bSk7CisKKwkJCS8qIFRPRE86IGZpeCBsb2dpYyBoZXJlIHRvIGltcHJvdmUgaW5kZW50IHNpdHV0YXRpb24gKi8KKwkJCWlmIChzdGF0dXMgIT0gLUVJTlBST0dSRVNTKSB7CisJCQkJaWYgKHN0YXR1cyA9PSAtRU5PRU5UIHx8CisJCQkJICAgICBzdGF0dXMgPT0gLUVDT05OUkVTRVQpCisJCQkJCWRldl9pbmZvKCZ1cmItPmRldi0+ZGV2LAorCQkJCQkJICJ1cmIgJXAgd2FzIHVubGlua2VkICIKKwkJCQkJCSAiJXNzeW5jaHJvbnVvdXNseS5cbiIsIHVyYiwKKwkJCQkJCSBzdGF0dXMgPT0gLUVOT0VOVCA/ICIiIDogImEiKTsKKwkJCQllbHNlCisJCQkJCWRldl9pbmZvKCZ1cmItPmRldi0+ZGV2LAorCQkJCQkJICJ1cmIgJXAgbWF5IGJlIGluIGEgZXJyb3IsICIKKwkJCQkJCSAic3RhdHVzICVkXG4iLCB1cmIsIHN0YXR1cyk7CisJCQl9CisKKwkJCWxpc3RfZGVsKCZwcml2LT5saXN0KTsKKwkJCWtmcmVlKHByaXYpOworCQkJdXJiLT5oY3ByaXYgPSBOVUxMOworCisJCQlicmVhazsKKwkJfQorCX0KKworCXNwaW5fdW5sb2NrKCZ2ZGV2LT5wcml2X2xvY2spOworCisJcmV0dXJuIHVyYjsKK30KKworc3RhdGljIHZvaWQgdmhjaV9yZWN2X3JldF9zdWJtaXQoc3RydWN0IHZoY2lfZGV2aWNlICp2ZGV2LAorCQkJCQkJc3RydWN0IHVzYmlwX2hlYWRlciAqcGR1KQoreworCXN0cnVjdCB1c2JpcF9kZXZpY2UgKnVkID0gJnZkZXYtPnVkOworCXN0cnVjdCB1cmIgKnVyYjsKKworCisJdXJiID0gcGlja3VwX3VyYl9hbmRfZnJlZV9wcml2KHZkZXYsIHBkdS0+YmFzZS5zZXFudW0pOworCisKKwlpZiAoIXVyYikgeworCQl1ZXJyKCJjYW5ub3QgZmluZCBhIHVyYiBvZiBzZXFudW0gJXVcbiIsIHBkdS0+YmFzZS5zZXFudW0pOworCQl1aW5mbygibWF4IHNlcW51bSAlZFxuIiwgYXRvbWljX3JlYWQoJnRoZV9jb250cm9sbGVyLT5zZXFudW0pKTsKKwkJdXNiaXBfZXZlbnRfYWRkKHVkLCBWREVWX0VWRU5UX0VSUk9SX1RDUCk7CisJCXJldHVybjsKKwl9CisKKworCS8qIHVucGFjayB0aGUgcGR1IHRvIGEgdXJiICovCisJdXNiaXBfcGFja19wZHUocGR1LCB1cmIsIFVTQklQX1JFVF9TVUJNSVQsIDApOworCisKKwkvKiByZWN2IHRyYW5zZmVyIGJ1ZmZlciAqLworCWlmICh1c2JpcF9yZWN2X3hidWZmKHVkLCB1cmIpIDwgMCkKKwkJcmV0dXJuOworCisKKwkvKiByZWN2IGlzb19wYWNrZXRfZGVzY3JpcHRvciAqLworCWlmICh1c2JpcF9yZWN2X2lzbyh1ZCwgdXJiKSA8IDApCisJCXJldHVybjsKKworCisJaWYgKGRiZ19mbGFnX3ZoY2lfcngpCisJCXVzYmlwX2R1bXBfdXJiKHVyYik7CisKKworCWRiZ192aGNpX3J4KCJub3cgZ2l2ZWJhY2sgdXJiICVwXG4iLCB1cmIpOworCisJc3Bpbl9sb2NrKCZ0aGVfY29udHJvbGxlci0+bG9jayk7CisJdXNiX2hjZF91bmxpbmtfdXJiX2Zyb21fZXAodmhjaV90b19oY2QodGhlX2NvbnRyb2xsZXIpLCB1cmIpOworCXNwaW5fdW5sb2NrKCZ0aGVfY29udHJvbGxlci0+bG9jayk7CisKKwl1c2JfaGNkX2dpdmViYWNrX3VyYih2aGNpX3RvX2hjZCh0aGVfY29udHJvbGxlciksIHVyYiwgdXJiLT5zdGF0dXMpOworCisKKwlkYmdfdmhjaV9yeCgiTGVhdmVcbiIpOworCisJcmV0dXJuOworfQorCisKK3N0YXRpYyBzdHJ1Y3QgdmhjaV91bmxpbmsgKmRlcXVldWVfcGVuZGluZ191bmxpbmsoc3RydWN0IHZoY2lfZGV2aWNlICp2ZGV2LAorCQlzdHJ1Y3QgdXNiaXBfaGVhZGVyICpwZHUpCit7CisJc3RydWN0IHZoY2lfdW5saW5rICp1bmxpbmssICp0bXA7CisKKwlzcGluX2xvY2soJnZkZXYtPnByaXZfbG9jayk7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUodW5saW5rLCB0bXAsICZ2ZGV2LT51bmxpbmtfcngsIGxpc3QpIHsKKwkJdWluZm8oInVubGluay0+c2VxbnVtICVsdVxuIiwgdW5saW5rLT5zZXFudW0pOworCQlpZiAodW5saW5rLT5zZXFudW0gPT0gcGR1LT5iYXNlLnNlcW51bSkgeworCQkJZGJnX3ZoY2lfcngoImZvdW5kIHBlbmRpbmcgdW5saW5rLCAlbHVcbiIsCisJCQkJCQkJdW5saW5rLT5zZXFudW0pOworCQkJbGlzdF9kZWwoJnVubGluay0+bGlzdCk7CisKKwkJCXNwaW5fdW5sb2NrKCZ2ZGV2LT5wcml2X2xvY2spOworCQkJcmV0dXJuIHVubGluazsKKwkJfQorCX0KKworCXNwaW5fdW5sb2NrKCZ2ZGV2LT5wcml2X2xvY2spOworCisJcmV0dXJuIE5VTEw7Cit9CisKKworc3RhdGljIHZvaWQgdmhjaV9yZWN2X3JldF91bmxpbmsoc3RydWN0IHZoY2lfZGV2aWNlICp2ZGV2LAorCQkJCQkJc3RydWN0IHVzYmlwX2hlYWRlciAqcGR1KQoreworCXN0cnVjdCB2aGNpX3VubGluayAqdW5saW5rOworCXN0cnVjdCB1cmIgKnVyYjsKKworCXVzYmlwX2R1bXBfaGVhZGVyKHBkdSk7CisKKwl1bmxpbmsgPSBkZXF1ZXVlX3BlbmRpbmdfdW5saW5rKHZkZXYsIHBkdSk7CisJaWYgKCF1bmxpbmspIHsKKwkJdWluZm8oImNhbm5vdCBmaW5kIHRoZSBwZW5kaW5nIHVubGluayAldVxuIiwgcGR1LT5iYXNlLnNlcW51bSk7CisJCXJldHVybjsKKwl9CisKKwl1cmIgPSBwaWNrdXBfdXJiX2FuZF9mcmVlX3ByaXYodmRldiwgdW5saW5rLT51bmxpbmtfc2VxbnVtKTsKKwlpZiAoIXVyYikgeworCQkvKgorCQkgKiBJIGdldCB0aGUgcmVzdWx0IG9mIGEgdW5saW5rIHJlcXVlc3QuIEJ1dCwgaXQgc2VlbXMgdGhhdCBJCisJCSAqIGFscmVhZHkgcmVjZWl2ZWQgdGhlIHJlc3VsdCBvZiBpdHMgc3VibWl0IHJlc3VsdCBhbmQgZ2F2ZQorCQkgKiBiYWNrIHRoZSBVUkIuCisJCSAqLworCQl1aW5mbygidGhlIHVyYiAoc2VxbnVtICVkKSB3YXMgYWxyZWFkeSBnaXZlbiBiYWNrZWRcbiIsCisJCQkJCQkJcGR1LT5iYXNlLnNlcW51bSk7CisJfSBlbHNlIHsKKwkJZGJnX3ZoY2lfcngoIm5vdyBnaXZlYmFjayB1cmIgJXBcbiIsIHVyYik7CisKKwkJLyogSWYgdW5saW5rIGlzIHN1Y2NlZWQsIHN0YXR1cyBpcyAtRUNPTk5SRVNFVCAqLworCQl1cmItPnN0YXR1cyA9IHBkdS0+dS5yZXRfdW5saW5rLnN0YXR1czsKKwkJdWluZm8oIiVkXG4iLCB1cmItPnN0YXR1cyk7CisKKwkJc3Bpbl9sb2NrKCZ0aGVfY29udHJvbGxlci0+bG9jayk7CisJCXVzYl9oY2RfdW5saW5rX3VyYl9mcm9tX2VwKHZoY2lfdG9faGNkKHRoZV9jb250cm9sbGVyKSwgdXJiKTsKKwkJc3Bpbl91bmxvY2soJnRoZV9jb250cm9sbGVyLT5sb2NrKTsKKworCQl1c2JfaGNkX2dpdmViYWNrX3VyYih2aGNpX3RvX2hjZCh0aGVfY29udHJvbGxlciksIHVyYiwKKwkJCQkJCQkJdXJiLT5zdGF0dXMpOworCX0KKworCWtmcmVlKHVubGluayk7CisKKwlyZXR1cm47Cit9CisKKy8qIHJlY3YgYSBwZHUgKi8KK3N0YXRpYyB2b2lkIHZoY2lfcnhfcGR1KHN0cnVjdCB1c2JpcF9kZXZpY2UgKnVkKQoreworCWludCByZXQ7CisJc3RydWN0IHVzYmlwX2hlYWRlciBwZHU7CisJc3RydWN0IHZoY2lfZGV2aWNlICp2ZGV2ID0gY29udGFpbmVyX29mKHVkLCBzdHJ1Y3QgdmhjaV9kZXZpY2UsIHVkKTsKKworCisJZGJnX3ZoY2lfcngoIkVudGVyXG4iKTsKKworCW1lbXNldCgmcGR1LCAwLCBzaXplb2YocGR1KSk7CisKKworCS8qIDEuIHJlY2VpdmUgYSBwZHUgaGVhZGVyICovCisJcmV0ID0gdXNiaXBfeG1pdCgwLCB1ZC0+dGNwX3NvY2tldCwgKGNoYXIgKikgJnBkdSwgc2l6ZW9mKHBkdSksIDApOworCWlmIChyZXQgIT0gc2l6ZW9mKHBkdSkpIHsKKwkJdWVycigicmVjZWl2aW5nIHBkdSBmYWlsZWQhIHNpemUgaXMgJWQsIHNob3VsZCBiZSAlZFxuIiwKKwkJCQlyZXQsIHNpemVvZihwZHUpKTsKKwkJdXNiaXBfZXZlbnRfYWRkKHVkLCBWREVWX0VWRU5UX0VSUk9SX1RDUCk7CisJCXJldHVybjsKKwl9CisKKwl1c2JpcF9oZWFkZXJfY29ycmVjdF9lbmRpYW4oJnBkdSwgMCk7CisKKwlpZiAoZGJnX2ZsYWdfdmhjaV9yeCkKKwkJdXNiaXBfZHVtcF9oZWFkZXIoJnBkdSk7CisKKwlzd2l0Y2ggKHBkdS5iYXNlLmNvbW1hbmQpIHsKKwljYXNlIFVTQklQX1JFVF9TVUJNSVQ6CisJCXZoY2lfcmVjdl9yZXRfc3VibWl0KHZkZXYsICZwZHUpOworCQlicmVhazsKKwljYXNlIFVTQklQX1JFVF9VTkxJTks6CisJCXZoY2lfcmVjdl9yZXRfdW5saW5rKHZkZXYsICZwZHUpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQkvKiBOT1RSRUFDSEVEICovCisJCXVlcnIoInVua25vd24gcGR1ICV1XG4iLCBwZHUuYmFzZS5jb21tYW5kKTsKKwkJdXNiaXBfZHVtcF9oZWFkZXIoJnBkdSk7CisJCXVzYmlwX2V2ZW50X2FkZCh1ZCwgVkRFVl9FVkVOVF9FUlJPUl9UQ1ApOworCX0KK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCit2b2lkIHZoY2lfcnhfbG9vcChzdHJ1Y3QgdXNiaXBfdGFzayAqdXQpCit7CisJc3RydWN0IHVzYmlwX2RldmljZSAqdWQgPSBjb250YWluZXJfb2YodXQsIHN0cnVjdCB1c2JpcF9kZXZpY2UsIHRjcF9yeCk7CisKKworCXdoaWxlICgxKSB7CisJCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkgeworCQkJZGJnX3ZoY2lfcngoInNpZ25hbCBjYXRjaGVkIVxuIik7CisJCQlicmVhazsKKwkJfQorCisKKwkJaWYgKHVzYmlwX2V2ZW50X2hhcHBlbmQodWQpKQorCQkJYnJlYWs7CisKKwkJdmhjaV9yeF9wZHUodWQpOworCX0KK30KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3VzYmlwL3ZoY2lfc3lzZnMuYyBiL2RyaXZlcnMvc3RhZ2luZy91c2JpcC92aGNpX3N5c2ZzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjRjMjg1MQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy91c2JpcC92aGNpX3N5c2ZzLmMKQEAgLTAsMCArMSwyNTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMtMjAwOCBUYWthaGlybyBIaXJvZnVjaGkKKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorICogVVNBLgorICovCisKKyNpbmNsdWRlICJ1c2JpcF9jb21tb24uaCIKKyNpbmNsdWRlICJ2aGNpLmgiCisKKyNpbmNsdWRlIDxsaW51eC9pbi5oPgorCisvKiBUT0RPOiByZWZpbmUgbG9ja2luZyA/Ki8KKworLyogU3lzZnMgZW50cnkgdG8gc2hvdyBwb3J0IHN0YXR1cyAqLworc3RhdGljIHNzaXplX3Qgc2hvd19zdGF0dXMoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCSAgIGNoYXIgKm91dCkKK3sKKwljaGFyICpzID0gb3V0OworCWludCBpID0gMDsKKworCWlmICghdGhlX2NvbnRyb2xsZXIgfHwgIW91dCkKKwkJQlVHKCk7CisKKwlzcGluX2xvY2soJnRoZV9jb250cm9sbGVyLT5sb2NrKTsKKworCS8qCisJICogb3V0cHV0IGV4YW1wbGU6CisJICogcHJ0IHN0YSBzcGQgZGV2IHNvY2tldCAgICAgICAgICAgbG9jYWxfYnVzaWQKKwkgKiAwMDAgMDA0IDAwMCAwMDAgICAgICAgICBjNWE3YmI4MCAxLTIuMworCSAqIDAwMSAwMDQgMDAwIDAwMCAgICAgICAgIGQ4Y2VlOTgwIDItMy40CisJICoKKwkgKiBJUCBhZGRyZXNzIGNhbiBiZSByZXRyaWV2ZWQgZnJvbSBhIHNvY2tldCBwb2ludGVyIGFkZHJlc3MgYnkgbG9va2luZworCSAqIHVwIC9wcm9jL25ldC97dGNwLHRjcDZ9LiBBbHNvLCBhIHVzZXJsYW5kIHByb2dyYW0gbWF5IHJlbWVtYmVyIGEKKwkgKiBwb3J0IG51bWJlciBhbmQgaXRzIHBlZXIgSVAgYWRkcmVzcy4KKwkgKi8KKwlvdXQgKz0gc3ByaW50ZihvdXQsICJwcnQgc3RhIHNwZCBidXMgZGV2IHNvY2tldCAgICAgICAgICAgIgorCQkgICAgICAgImxvY2FsX2J1c2lkXG4iKTsKKworCWZvciAoaSA9IDA7IGkgPCBWSENJX05QT1JUUzsgaSsrKSB7CisJCXN0cnVjdCB2aGNpX2RldmljZSAqdmRldiA9IHBvcnRfdG9fdmRldihpKTsKKworCQlzcGluX2xvY2soJnZkZXYtPnVkLmxvY2spOworCisJCW91dCArPSBzcHJpbnRmKG91dCwgIiUwM3UgJTAzdSAiLCBpLCB2ZGV2LT51ZC5zdGF0dXMpOworCisJCWlmICh2ZGV2LT51ZC5zdGF0dXMgPT0gVkRFVl9TVF9VU0VEKSB7CisJCQlvdXQgKz0gc3ByaW50ZihvdXQsICIlMDN1ICUwOHggIiwKKwkJCQkJdmRldi0+c3BlZWQsIHZkZXYtPmRldmlkKTsKKwkJCW91dCArPSBzcHJpbnRmKG91dCwgIiUxNnAgIiwgdmRldi0+dWQudGNwX3NvY2tldCk7CisJCQlvdXQgKz0gc3ByaW50ZihvdXQsICIlcyIsIHZkZXYtPnVkZXYtPmRldi5idXNfaWQpOworCisJCX0gZWxzZQorCQkJb3V0ICs9IHNwcmludGYob3V0LCAiMDAwIDAwMCAwMDAgMDAwMDAwMDAwMDAwMDAwMCAwLTAiKTsKKworCQlvdXQgKz0gc3ByaW50ZihvdXQsICJcbiIpOworCisJCXNwaW5fdW5sb2NrKCZ2ZGV2LT51ZC5sb2NrKTsKKwl9CisKKwlzcGluX3VubG9jaygmdGhlX2NvbnRyb2xsZXItPmxvY2spOworCisJcmV0dXJuIG91dCAtIHM7Cit9CitzdGF0aWMgREVWSUNFX0FUVFIoc3RhdHVzLCBTX0lSVUdPLCBzaG93X3N0YXR1cywgTlVMTCk7CisKKy8qIFN5c2ZzIGVudHJ5IHRvIHNodXRkb3duIGEgdmlydHVhbCBjb25uZWN0aW9uICovCitzdGF0aWMgaW50IHZoY2lfcG9ydF9kaXNjb25uZWN0KF9fdTMyIHJocG9ydCkKK3sKKwlzdHJ1Y3QgdmhjaV9kZXZpY2UgKnZkZXY7CisKKwlkYmdfdmhjaV9zeXNmcygiZW50ZXJcbiIpOworCisJLyogbG9jayAqLworCXNwaW5fbG9jaygmdGhlX2NvbnRyb2xsZXItPmxvY2spOworCisJdmRldiA9IHBvcnRfdG9fdmRldihyaHBvcnQpOworCisJc3Bpbl9sb2NrKCZ2ZGV2LT51ZC5sb2NrKTsKKwlpZiAodmRldi0+dWQuc3RhdHVzID09IFZERVZfU1RfTlVMTCkgeworCQl1ZXJyKCJub3QgY29ubmVjdGVkICVkXG4iLCB2ZGV2LT51ZC5zdGF0dXMpOworCisJCS8qIHVubG9jayAqLworCQlzcGluX3VubG9jaygmdmRldi0+dWQubG9jayk7CisJCXNwaW5fdW5sb2NrKCZ0aGVfY29udHJvbGxlci0+bG9jayk7CisKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogdW5sb2NrICovCisJc3Bpbl91bmxvY2soJnZkZXYtPnVkLmxvY2spOworCXNwaW5fdW5sb2NrKCZ0aGVfY29udHJvbGxlci0+bG9jayk7CisKKwl1c2JpcF9ldmVudF9hZGQoJnZkZXYtPnVkLCBWREVWX0VWRU5UX0RPV04pOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHN0b3JlX2RldGFjaChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCWludCBlcnI7CisJX191MzIgcmhwb3J0ID0gMDsKKworCXNzY2FuZihidWYsICIldSIsICZyaHBvcnQpOworCisJLyogY2hlY2sgcmhwb3J0ICovCisJaWYgKHJocG9ydCA+PSBWSENJX05QT1JUUykgeworCQl1ZXJyKCJpbnZhbGlkIHBvcnQgJXVcbiIsIHJocG9ydCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWVyciA9IHZoY2lfcG9ydF9kaXNjb25uZWN0KHJocG9ydCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiAtRUlOVkFMOworCisJZGJnX3ZoY2lfc3lzZnMoIkxlYXZlXG4iKTsKKwlyZXR1cm4gY291bnQ7Cit9CitzdGF0aWMgREVWSUNFX0FUVFIoZGV0YWNoLCBTX0lXVVNSLCBOVUxMLCBzdG9yZV9kZXRhY2gpOworCisvKiBTeXNmcyBlbnRyeSB0byBlc3RhYmxpc2ggYSB2aXJ0dWFsIGNvbm5lY3Rpb24gKi8KK3N0YXRpYyBpbnQgdmFsaWRfYXJncyhfX3UzMiByaHBvcnQsIGVudW0gdXNiX2RldmljZV9zcGVlZCBzcGVlZCkKK3sKKwkvKiBjaGVjayByaHBvcnQgKi8KKwlpZiAoKHJocG9ydCA8IDApIHx8IChyaHBvcnQgPj0gVkhDSV9OUE9SVFMpKSB7CisJCXVlcnIoInBvcnQgJXVcbiIsIHJocG9ydCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qIGNoZWNrIHNwZWVkICovCisJc3dpdGNoIChzcGVlZCkgeworCWNhc2UgVVNCX1NQRUVEX0xPVzoKKwljYXNlIFVTQl9TUEVFRF9GVUxMOgorCWNhc2UgVVNCX1NQRUVEX0hJR0g6CisJY2FzZSBVU0JfU1BFRURfVkFSSUFCTEU6CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXVlcnIoInNwZWVkICVkXG4iLCBzcGVlZCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldHVybiAwOworfQorCisvKgorICogVG8gc3RhcnQgYSBuZXcgVVNCL0lQIGF0dGFjaG1lbnQsIGEgdXNlcmxhbmQgcHJvZ3JhbSBuZWVkcyB0byBzZXR1cCBhIFRDUAorICogY29ubmVjdGlvbiBhbmQgdGhlbiB3cml0ZSBpdHMgc29ja2V0IGRlc2NyaXB0b3Igd2l0aCByZW1vdGUgZGV2aWNlCisgKiBpbmZvcm1hdGlvbiBpbnRvIHRoaXMgc3lzZnMgZmlsZS4KKyAqCisgKiBBIHJlbW90ZSBkZXZpY2UgaXMgdmlydHVhbGx5IGF0dGFjaGVkIHRvIHRoZSByb290LWh1YiBwb3J0IG9mIEByaHBvcnQgd2l0aAorICogQHNwZWVkLiBAZGV2aWQgaXMgZW1iZWRkZWQgaW50byBhIHJlcXVlc3QgdG8gc3BlY2lmeSB0aGUgcmVtb3RlIGRldmljZSBpbiBhCisgKiBzZXJ2ZXIgaG9zdC4KKyAqCisgKiB3cml0ZSgpIHJldHVybnMgMCBvbiBzdWNjZXNzLCBlbHNlIG5lZ2F0aXZlIGVycm5vLgorICovCitzdGF0aWMgc3NpemVfdCBzdG9yZV9hdHRhY2goc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCSAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlzdHJ1Y3QgdmhjaV9kZXZpY2UgKnZkZXY7CisJc3RydWN0IHNvY2tldCAqc29ja2V0OworCWludCBzb2NrZmQgPSAwOworCV9fdTMyIHJocG9ydCA9IDAsIGRldmlkID0gMCwgc3BlZWQgPSAwOworCisJLyoKKwkgKiBAcmhwb3J0OiBwb3J0IG51bWJlciBvZiB2aGNpX2hjZAorCSAqIEBzb2NrZmQ6IHNvY2tldCBkZXNjcmlwdG9yIG9mIGFuIGVzdGFibGlzaGVkIFRDUCBjb25uZWN0aW9uCisJICogQGRldmlkOiB1bmlxdWUgZGV2aWNlIGlkZW50aWZpZXIgaW4gYSByZW1vdGUgaG9zdAorCSAqIEBzcGVlZDogdXNiIGRldmljZSBzcGVlZCBpbiBhIHJlbW90ZSBob3N0CisJICovCisJc3NjYW5mKGJ1ZiwgIiV1ICV1ICV1ICV1IiwgJnJocG9ydCwgJnNvY2tmZCwgJmRldmlkLCAmc3BlZWQpOworCisJZGJnX3ZoY2lfc3lzZnMoInJocG9ydCgldSkgc29ja2ZkKCV1KSBkZXZpZCgldSkgc3BlZWQoJXUpXG4iLAorCQkJcmhwb3J0LCBzb2NrZmQsIGRldmlkLCBzcGVlZCk7CisKKworCS8qIGNoZWNrIHJlY2VpdmVkIHBhcmFtZXRlcnMgKi8KKwlpZiAodmFsaWRfYXJncyhyaHBvcnQsIHNwZWVkKSA8IDApCisJCXJldHVybiAtRUlOVkFMOworCisJLyogY2hlY2sgc29ja2ZkICovCisJc29ja2V0ID0gc29ja2ZkX3RvX3NvY2tldChzb2NrZmQpOworCWlmICghc29ja2V0KQorCQlyZXR1cm4gIC1FSU5WQUw7CisKKwkvKiBub3cgbmVlZCBsb2NrIHVudGlsIHNldHRpbmcgdmRldiBzdGF0dXMgYXMgdXNlZCAqLworCisJLyogYmVnaW4gYSBsb2NrICovCisJc3Bpbl9sb2NrKCZ0aGVfY29udHJvbGxlci0+bG9jayk7CisKKwl2ZGV2ID0gcG9ydF90b192ZGV2KHJocG9ydCk7CisKKwlzcGluX2xvY2soJnZkZXYtPnVkLmxvY2spOworCisJaWYgKHZkZXYtPnVkLnN0YXR1cyAhPSBWREVWX1NUX05VTEwpIHsKKwkJLyogZW5kIG9mIHRoZSBsb2NrICovCisJCXNwaW5fdW5sb2NrKCZ2ZGV2LT51ZC5sb2NrKTsKKwkJc3Bpbl91bmxvY2soJnRoZV9jb250cm9sbGVyLT5sb2NrKTsKKworCQl1ZXJyKCJwb3J0ICVkIGFscmVhZHkgdXNlZFxuIiwgcmhwb3J0KTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJdWluZm8oInJocG9ydCgldSkgc29ja2ZkKCVkKSBkZXZpZCgldSkgc3BlZWQoJXUpXG4iLAorCQkJcmhwb3J0LCBzb2NrZmQsIGRldmlkLCBzcGVlZCk7CisKKwl2ZGV2LT5kZXZpZCAgICAgICAgID0gZGV2aWQ7CisJdmRldi0+c3BlZWQgICAgICAgICA9IHNwZWVkOworCXZkZXYtPnVkLnRjcF9zb2NrZXQgPSBzb2NrZXQ7CisJdmRldi0+dWQuc3RhdHVzICAgICA9IFZERVZfU1RfTk9UQVNTSUdORUQ7CisKKwlzcGluX3VubG9jaygmdmRldi0+dWQubG9jayk7CisJc3Bpbl91bmxvY2soJnRoZV9jb250cm9sbGVyLT5sb2NrKTsKKwkvKiBlbmQgdGhlIGxvY2sgKi8KKworCS8qCisJICogdGhpcyBmdW5jdGlvbiB3aWxsIHNsZWVwLCBzbyBzaG91bGQgYmUgb3V0IG9mIHRoZSBsb2NrLiBidXQsIGl0J3Mgb2sKKwkgKiBiZWNhdXNlIHdlIGFscmVhZHkgbWFya2VkIHZkZXYgYXMgYmVpbmcgdXNlZC4gcmVhbGx5PworCSAqLworCXVzYmlwX3N0YXJ0X3RocmVhZHMoJnZkZXYtPnVkKTsKKworCXJoX3BvcnRfY29ubmVjdChyaHBvcnQsIHNwZWVkKTsKKworCXJldHVybiBjb3VudDsKK30KK3N0YXRpYyBERVZJQ0VfQVRUUihhdHRhY2gsIFNfSVdVU1IsIE5VTEwsIHN0b3JlX2F0dGFjaCk7CisKK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpkZXZfYXR0cnNbXSA9IHsKKwkmZGV2X2F0dHJfc3RhdHVzLmF0dHIsCisJJmRldl9hdHRyX2RldGFjaC5hdHRyLAorCSZkZXZfYXR0cl9hdHRhY2guYXR0ciwKKwkmZGV2X2F0dHJfdXNiaXBfZGVidWcuYXR0ciwKKwlOVUxMLAorfTsKKworc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBkZXZfYXR0cl9ncm91cCA9IHsKKwkuYXR0cnMgPSBkZXZfYXR0cnMsCit9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3VzYmlwL3ZoY2lfdHguYyBiL2RyaXZlcnMvc3RhZ2luZy91c2JpcC92aGNpX3R4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWY1NTJhOQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy91c2JpcC92aGNpX3R4LmMKQEAgLTAsMCArMSwyMzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMtMjAwOCBUYWthaGlybyBIaXJvZnVjaGkKKyAqCisgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorICogVVNBLgorICovCisKKyNpbmNsdWRlICJ1c2JpcF9jb21tb24uaCIKKyNpbmNsdWRlICJ2aGNpLmgiCisKKworc3RhdGljIHZvaWQgc2V0dXBfY21kX3N1Ym1pdF9wZHUoc3RydWN0IHVzYmlwX2hlYWRlciAqcGR1cCwgIHN0cnVjdCB1cmIgKnVyYikKK3sKKwlzdHJ1Y3QgdmhjaV9wcml2ICpwcml2ID0gKChzdHJ1Y3QgdmhjaV9wcml2ICopdXJiLT5oY3ByaXYpOworCXN0cnVjdCB2aGNpX2RldmljZSAqdmRldiA9IHByaXYtPnZkZXY7CisKKwlkYmdfdmhjaV90eCgiVVJCLCBsb2NhbCBkZXZudW0gJXUsIHJlbW90ZSBkZXZpZCAldVxuIiwKKwkJCQl1c2JfcGlwZWRldmljZSh1cmItPnBpcGUpLCB2ZGV2LT5kZXZpZCk7CisKKwlwZHVwLT5iYXNlLmNvbW1hbmQgPSBVU0JJUF9DTURfU1VCTUlUOworCXBkdXAtPmJhc2Uuc2VxbnVtICA9IHByaXYtPnNlcW51bTsKKwlwZHVwLT5iYXNlLmRldmlkICAgPSB2ZGV2LT5kZXZpZDsKKwlpZiAodXNiX3BpcGVpbih1cmItPnBpcGUpKQorCQlwZHVwLT5iYXNlLmRpcmVjdGlvbiA9IFVTQklQX0RJUl9JTjsKKwllbHNlCisJCXBkdXAtPmJhc2UuZGlyZWN0aW9uID0gVVNCSVBfRElSX09VVDsKKwlwZHVwLT5iYXNlLmVwICAgICAgPSB1c2JfcGlwZWVuZHBvaW50KHVyYi0+cGlwZSk7CisKKwl1c2JpcF9wYWNrX3BkdShwZHVwLCB1cmIsIFVTQklQX0NNRF9TVUJNSVQsIDEpOworCisJaWYgKHVyYi0+c2V0dXBfcGFja2V0KQorCQltZW1jcHkocGR1cC0+dS5jbWRfc3VibWl0LnNldHVwLCB1cmItPnNldHVwX3BhY2tldCwgOCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdmhjaV9wcml2ICpkZXF1ZXVlX2Zyb21fcHJpdl90eChzdHJ1Y3QgdmhjaV9kZXZpY2UgKnZkZXYpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgdmhjaV9wcml2ICpwcml2LCAqdG1wOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnZkZXYtPnByaXZfbG9jaywgZmxhZ3MpOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHByaXYsIHRtcCwgJnZkZXYtPnByaXZfdHgsIGxpc3QpIHsKKwkJbGlzdF9tb3ZlX3RhaWwoJnByaXYtPmxpc3QsICZ2ZGV2LT5wcml2X3J4KTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdmRldi0+cHJpdl9sb2NrLCBmbGFncyk7CisJCXJldHVybiBwcml2OworCX0KKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnZkZXYtPnByaXZfbG9jaywgZmxhZ3MpOworCisJcmV0dXJuIE5VTEw7Cit9CisKKworCitzdGF0aWMgaW50IHZoY2lfc2VuZF9jbWRfc3VibWl0KHN0cnVjdCB2aGNpX2RldmljZSAqdmRldikKK3sKKwlzdHJ1Y3QgdmhjaV9wcml2ICpwcml2ID0gTlVMTDsKKworCXN0cnVjdCBtc2doZHIgbXNnOworCXN0cnVjdCBrdmVjIGlvdlszXTsKKwlzaXplX3QgdHhzaXplOworCisJc2l6ZV90IHRvdGFsX3NpemUgPSAwOworCisJd2hpbGUgKChwcml2ID0gZGVxdWV1ZV9mcm9tX3ByaXZfdHgodmRldikpICE9IE5VTEwpIHsKKwkJaW50IHJldDsKKwkJc3RydWN0IHVyYiAqdXJiID0gcHJpdi0+dXJiOworCQlzdHJ1Y3QgdXNiaXBfaGVhZGVyIHBkdV9oZWFkZXI7CisJCXZvaWQgKmlzb19idWZmZXIgPSBOVUxMOworCisJCXR4c2l6ZSA9IDA7CisJCW1lbXNldCgmcGR1X2hlYWRlciwgMCwgc2l6ZW9mKHBkdV9oZWFkZXIpKTsKKwkJbWVtc2V0KCZtc2csIDAsIHNpemVvZihtc2cpKTsKKwkJbWVtc2V0KCZpb3YsIDAsIHNpemVvZihpb3YpKTsKKworCQlkYmdfdmhjaV90eCgic2V0dXAgdHhkYXRhIHVyYiAlcFxuIiwgdXJiKTsKKworCisJCS8qIDEuIHNldHVwIHVzYmlwX2hlYWRlciAqLworCQlzZXR1cF9jbWRfc3VibWl0X3BkdSgmcGR1X2hlYWRlciwgdXJiKTsKKwkJdXNiaXBfaGVhZGVyX2NvcnJlY3RfZW5kaWFuKCZwZHVfaGVhZGVyLCAxKTsKKworCQlpb3ZbMF0uaW92X2Jhc2UgPSAmcGR1X2hlYWRlcjsKKwkJaW92WzBdLmlvdl9sZW4gID0gc2l6ZW9mKHBkdV9oZWFkZXIpOworCQl0eHNpemUgKz0gc2l6ZW9mKHBkdV9oZWFkZXIpOworCisJCS8qIDIuIHNldHVwIHRyYW5zZmVyIGJ1ZmZlciAqLworCQlpZiAoIXVzYl9waXBlaW4odXJiLT5waXBlKSAmJiB1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggPiAwKSB7CisJCQlpb3ZbMV0uaW92X2Jhc2UgPSB1cmItPnRyYW5zZmVyX2J1ZmZlcjsKKwkJCWlvdlsxXS5pb3ZfbGVuICA9IHVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aDsKKwkJCXR4c2l6ZSArPSB1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGg7CisJCX0KKworCQkvKiAzLiBzZXR1cCBpc29fcGFja2V0X2Rlc2NyaXB0b3IgKi8KKwkJaWYgKHVzYl9waXBldHlwZSh1cmItPnBpcGUpID09IFBJUEVfSVNPQ0hST05PVVMpIHsKKwkJCXNzaXplX3QgbGVuID0gMDsKKworCQkJaXNvX2J1ZmZlciA9IHVzYmlwX2FsbG9jX2lzb19kZXNjX3BkdSh1cmIsICZsZW4pOworCQkJaWYgKCFpc29fYnVmZmVyKSB7CisJCQkJdXNiaXBfZXZlbnRfYWRkKCZ2ZGV2LT51ZCwKKwkJCQkJCVNERVZfRVZFTlRfRVJST1JfTUFMTE9DKTsKKwkJCQlyZXR1cm4gLTE7CisJCQl9CisKKwkJCWlvdlsyXS5pb3ZfYmFzZSA9IGlzb19idWZmZXI7CisJCQlpb3ZbMl0uaW92X2xlbiAgPSBsZW47CisJCQl0eHNpemUgKz0gbGVuOworCQl9CisKKwkJcmV0ID0ga2VybmVsX3NlbmRtc2codmRldi0+dWQudGNwX3NvY2tldCwgJm1zZywgaW92LCAzLCB0eHNpemUpOworCQlpZiAocmV0ICE9IHR4c2l6ZSkgeworCQkJdWVycigic2VuZG1zZyBmYWlsZWQhLCByZXR2YWwgJWQgZm9yICV6ZFxuIiwgcmV0LAorCQkJCQkJCQl0eHNpemUpOworCQkJa2ZyZWUoaXNvX2J1ZmZlcik7CisJCQl1c2JpcF9ldmVudF9hZGQoJnZkZXYtPnVkLCBWREVWX0VWRU5UX0VSUk9SX1RDUCk7CisJCQlyZXR1cm4gLTE7CisJCX0KKworCQlrZnJlZShpc29fYnVmZmVyKTsKKwkJZGJnX3ZoY2lfdHgoInNlbmQgdHhkYXRhXG4iKTsKKworCQl0b3RhbF9zaXplICs9IHR4c2l6ZTsKKwl9CisKKwlyZXR1cm4gdG90YWxfc2l6ZTsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgc3RydWN0IHZoY2lfdW5saW5rICpkZXF1ZXVlX2Zyb21fdW5saW5rX3R4KHN0cnVjdCB2aGNpX2RldmljZSAqdmRldikKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCB2aGNpX3VubGluayAqdW5saW5rLCAqdG1wOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnZkZXYtPnByaXZfbG9jaywgZmxhZ3MpOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHVubGluaywgdG1wLCAmdmRldi0+dW5saW5rX3R4LCBsaXN0KSB7CisJCWxpc3RfbW92ZV90YWlsKCZ1bmxpbmstPmxpc3QsICZ2ZGV2LT51bmxpbmtfcngpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ2ZGV2LT5wcml2X2xvY2ssIGZsYWdzKTsKKwkJcmV0dXJuIHVubGluazsKKwl9CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ2ZGV2LT5wcml2X2xvY2ssIGZsYWdzKTsKKworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgaW50IHZoY2lfc2VuZF9jbWRfdW5saW5rKHN0cnVjdCB2aGNpX2RldmljZSAqdmRldikKK3sKKwlzdHJ1Y3QgdmhjaV91bmxpbmsgKnVubGluayA9IE5VTEw7CisKKwlzdHJ1Y3QgbXNnaGRyIG1zZzsKKwlzdHJ1Y3Qga3ZlYyBpb3ZbM107CisJc2l6ZV90IHR4c2l6ZTsKKworCXNpemVfdCB0b3RhbF9zaXplID0gMDsKKworCXdoaWxlICgodW5saW5rID0gZGVxdWV1ZV9mcm9tX3VubGlua190eCh2ZGV2KSkgIT0gTlVMTCkgeworCQlpbnQgcmV0OworCQlzdHJ1Y3QgdXNiaXBfaGVhZGVyIHBkdV9oZWFkZXI7CisKKwkJdHhzaXplID0gMDsKKwkJbWVtc2V0KCZwZHVfaGVhZGVyLCAwLCBzaXplb2YocGR1X2hlYWRlcikpOworCQltZW1zZXQoJm1zZywgMCwgc2l6ZW9mKG1zZykpOworCQltZW1zZXQoJmlvdiwgMCwgc2l6ZW9mKGlvdikpOworCisJCWRiZ192aGNpX3R4KCJzZXR1cCBjbWQgdW5saW5rLCAlbHUgXG4iLCB1bmxpbmstPnNlcW51bSk7CisKKworCQkvKiAxLiBzZXR1cCB1c2JpcF9oZWFkZXIgKi8KKwkJcGR1X2hlYWRlci5iYXNlLmNvbW1hbmQgPSBVU0JJUF9DTURfVU5MSU5LOworCQlwZHVfaGVhZGVyLmJhc2Uuc2VxbnVtICA9IHVubGluay0+c2VxbnVtOworCQlwZHVfaGVhZGVyLmJhc2UuZGV2aWQJPSB2ZGV2LT5kZXZpZDsKKwkJcGR1X2hlYWRlci5iYXNlLmVwCT0gMDsKKwkJcGR1X2hlYWRlci51LmNtZF91bmxpbmsuc2VxbnVtID0gdW5saW5rLT51bmxpbmtfc2VxbnVtOworCisJCXVzYmlwX2hlYWRlcl9jb3JyZWN0X2VuZGlhbigmcGR1X2hlYWRlciwgMSk7CisKKwkJaW92WzBdLmlvdl9iYXNlID0gJnBkdV9oZWFkZXI7CisJCWlvdlswXS5pb3ZfbGVuICA9IHNpemVvZihwZHVfaGVhZGVyKTsKKwkJdHhzaXplICs9IHNpemVvZihwZHVfaGVhZGVyKTsKKworCQlyZXQgPSBrZXJuZWxfc2VuZG1zZyh2ZGV2LT51ZC50Y3Bfc29ja2V0LCAmbXNnLCBpb3YsIDEsIHR4c2l6ZSk7CisJCWlmIChyZXQgIT0gdHhzaXplKSB7CisJCQl1ZXJyKCJzZW5kbXNnIGZhaWxlZCEsIHJldHZhbCAlZCBmb3IgJXpkXG4iLCByZXQsCisJCQkJCQkJCXR4c2l6ZSk7CisJCQl1c2JpcF9ldmVudF9hZGQoJnZkZXYtPnVkLCBWREVWX0VWRU5UX0VSUk9SX1RDUCk7CisJCQlyZXR1cm4gLTE7CisJCX0KKworCisJCWRiZ192aGNpX3R4KCJzZW5kIHR4ZGF0YVxuIik7CisKKwkJdG90YWxfc2l6ZSArPSB0eHNpemU7CisJfQorCisJcmV0dXJuIHRvdGFsX3NpemU7Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKwordm9pZCB2aGNpX3R4X2xvb3Aoc3RydWN0IHVzYmlwX3Rhc2sgKnV0KQoreworCXN0cnVjdCB1c2JpcF9kZXZpY2UgKnVkID0gY29udGFpbmVyX29mKHV0LCBzdHJ1Y3QgdXNiaXBfZGV2aWNlLCB0Y3BfdHgpOworCXN0cnVjdCB2aGNpX2RldmljZSAqdmRldiA9IGNvbnRhaW5lcl9vZih1ZCwgc3RydWN0IHZoY2lfZGV2aWNlLCB1ZCk7CisKKwl3aGlsZSAoMSkgeworCQlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHsKKwkJCXVpbmZvKCJ2aGNpX3R4IHNpZ25hbCBjYXRjaGVkXG4iKTsKKwkJCWJyZWFrOworCQl9CisKKwkJaWYgKHZoY2lfc2VuZF9jbWRfc3VibWl0KHZkZXYpIDwgMCkKKwkJCWJyZWFrOworCisJCWlmICh2aGNpX3NlbmRfY21kX3VubGluayh2ZGV2KSA8IDApCisJCQlicmVhazsKKworCQl3YWl0X2V2ZW50X2ludGVycnVwdGlibGUodmRldi0+d2FpdHFfdHgsCisJCQkJKCFsaXN0X2VtcHR5KCZ2ZGV2LT5wcml2X3R4KSB8fAorCQkJCSAhbGlzdF9lbXB0eSgmdmRldi0+dW5saW5rX3R4KSkpOworCisJCWRiZ192aGNpX3R4KCJwZW5kaW5nIHVyYnMgPywgbm93IHdha2UgdXBcbiIpOworCX0KK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL0tjb25maWcgYi9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9LY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEwZDcyYmUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9LY29uZmlnCkBAIC0wLDAgKzEsNyBAQAorY29uZmlnIFczNVVORAorCXRyaXN0YXRlICJXaW5ib25kIGRyaXZlciIKKwlkZXBlbmRzIG9uIE1BQzgwMjExICYmIFdMQU5fODAyMTEgJiYgRVhQRVJJTUVOVEFMICYmICE0S1NUQUNLUworCWRlZmF1bHQgbgorCS0tLWhlbHAtLS0KKwkgIFRoaXMgaXMgaGlnaGx5IGV4cGVyaW1lbnRhbCBkcml2ZXIgZm9yIHdpbmJvbmQgd2lmaSBjYXJkIG9uIHNvbWUgS29oamluc2hhIG5vdGVib29rcworCSAgQ2hlY2sgaHR0cDovL2NvZGUuZ29vZ2xlLmNvbS9wL3dpbmJvbmRwb3J0LyBmb3IgbmV3IHZlcnNpb24KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL01ha2VmaWxlIGIvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjljOThiZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL01ha2VmaWxlCkBAIC0wLDAgKzEsMTggQEAKKwlEUklWRVJfRElSPS4vbGludXgKKwordzM1dW5kLW9ianMgOj0gJChEUklWRVJfRElSKS93YnVzYi5vICQoRFJJVkVSX0RJUikvd2IzNXJlZy5vICQoRFJJVkVSX0RJUikvd2IzNXJ4Lm8gJChEUklWRVJfRElSKS93YjM1dHgubyBcCisJbWRzLm8gXAorCW1sbWV0eHJ4Lm8gXAorCW10by5vCVwKKwlwaHlfY2FsaWJyYXRpb24ubwlcCisJcmVnLm8JCQlcCisJcnhpc3IubwkJCVwKKwlzbWVfYXBpLm8JCVwKKwl3YmhhbC5vCQkJXAorCXdibGludXgubwkJXAorCisKK29iai0kKENPTkZJR19XMzVVTkQpICs9IHczNXVuZC5vCisKKworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9SRUFETUUgYi9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9SRUFETUUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzA3YjZiMwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL1JFQURNRQpAQCAtMCwwICsxLDEwIEBACitUT0RPOgorCS0gc3BhcnNlIGNsZWFudXBzCisJLSBjaGVja3BhdGNoIGNsZWFudXBzCisJLSBrZXJuZWxkb2MgY2xlYW51cHMKKwktIHJlbW92ZSB0eXBlZGVmcworCS0gcmVtb3ZlIHVudXNlZCBpb2N0bHMKKwktIHVzZSBjZmc4MDIxMSBmb3IgcmVndWxhdG9yeSBzdHVmZgorCitQbGVhc2Ugc2VuZCBwYXRjaGVzIHRvIEdyZWcgS3JvYWgtSGFydG1hbiA8Z3JlZ0Brcm9haC5jb20+IGFuZAorUGF2ZWwgTWFjaGVrIDxwYXZlbEBzdXNlLmN6PgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvYWRhcHRlci5oIGIvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvYWRhcHRlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYwOTcwMWQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9hZGFwdGVyLmgKQEAgLTAsMCArMSwyMyBAQAorLy8KKy8vIEFEQVBURVIuSCAtCisvLyBXaW5kb3dzIE5ESVMgZ2xvYmFsIHZhcmlhYmxlICdBZGFwdGVyJyB0eXBlZGVmCisvLworI2RlZmluZSBNQVhfQU5TSV9TVFJJTkcJCTQwCit0eXBlZGVmIHN0cnVjdCBXQjMyX0FEQVBURVIKK3sKKwl1MzIgQWRhcHRlckluZGV4OyAvLyAyMDA2MDcwMy40IEFkZCBmb3IgdXNpbmcgcEFkYXB0ZXJDb250ZXh0IGdsb2JhbCBBZGFwdGVyIHBvaW50CisKKwlXQl9MT0NBTERFU0NSSVBUCXNMb2NhbFBhcmE7CQkvLyBNeXNlbGYgY29ubmVjdGVkIHBhcmFtZXRlcnMKKwlQV0JfQlNTREVTQ1JJUFRJT04JYXNCU1NEZXNjcmlwdEVsZW1lbnQ7CisKKwlNTE1FX0ZSQU1FCQlzTWxtZUZyYW1lOwkJLy8gY29ubmVjdCB0byBwZWVyU1RBIHBhcmFtZXRlcnMKKworCU1UT19QQVJBTUVURVJTCQlzTXRvUGFyYTsgLy8gTVRPX3N0cnVjdCAuLi4KKwlod19kYXRhX3QJCQlzSHdEYXRhOyAvL0ZvciBIQUwKKwlNRFMJCQkJCU1kczsKKworCVdCTElOVVgJCVdiTGludXg7CisgICAgICAgIHN0cnVjdCBpd19zdGF0aXN0aWNzIGl3X3N0YXRzOworCisJdTgJTGlua05hbWVbTUFYX0FOU0lfU1RSSU5HXTsKK30gV0IzMl9BREFQVEVSLCBBREFQVEVSLCAqUFdCMzJfQURBUFRFUiwgKlBBREFQVEVSOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvYnNzX2YuaCBiL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL2Jzc19mLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzk1N2JjOQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL2Jzc19mLmgKQEAgLTAsMCArMSw1OSBAQAorLy8KKy8vIEJTUyBkZXNjcmlwdG9yIERhdGFCYXNlIG1hbmFnZW1lbnQgZ2xvYmFsIGZ1bmN0aW9uCisvLworCit2b2lkIHZCU1NkZXNjcmlwdGlvbkluaXQoUFdCMzJfQURBUFRFUiBBZGFwdGVyKTsKK3ZvaWQgdkJTU2ZvdW5kTGlzdChQV0IzMl9BREFQVEVSIEFkYXB0ZXIpOwordTggYm9DaGFuRmlsdGVyKFBXQjMyX0FEQVBURVIgQWRhcHRlciwgdTggQ2hhbk5vKTsKK3UxNiB3QlNTYWxsb2NhdGVFbnRyeShQV0IzMl9BREFQVEVSIEFkYXB0ZXIpOwordTE2IHdCU1NHZXRFbnRyeShQV0IzMl9BREFQVEVSIEFkYXB0ZXIpOwordm9pZCB2U2ltcGxlSG91c2VLZWVwaW5nKFBXQjMyX0FEQVBURVIgQWRhcHRlcik7Cit1MTYgd0JTU2hvdXNlS2VlcGluZyhQV0IzMl9BREFQVEVSIEFkYXB0ZXIpOwordm9pZCBDbGVhckJTU2Rlc2NwdChQV0IzMl9BREFQVEVSIEFkYXB0ZXIsIHUxNiBpKTsKK3UxNiB3QlNTZmluZEJzc0lEKFBXQjMyX0FEQVBURVIgQWRhcHRlciwgdTggKnBiQnNzaWQpOwordTE2IHdCU1NmaW5kRGVkaWNhdGVDYW5kaWRhdGUoUFdCMzJfQURBUFRFUiBBZGFwdGVyLCBzdHJ1Y3QgU1NJRF9FbGVtZW50ICpwc1NzaWQsIHU4ICpwYkJzc2lkKTsKK3UxNiB3QlNTZmluZE1BQ2FkZHIoUFdCMzJfQURBUFRFUiBBZGFwdGVyLCB1OCAqcGJNYWNBZGRyKTsKK3UxNiB3QlNTc2VhcmNoTUFDYWRkcihQV0IzMl9BREFQVEVSIEFkYXB0ZXIsIHU4ICpwYk1hY0FkZHIsIHU4IGJhbmQpOwordTE2IHdCU1NhZGRTY2FuRGF0YShQV0IzMl9BREFQVEVSLCB1MTYsIHBzUlhEQVRBKTsKK3UxNiB3QlNTVXBkYXRlU2NhbkRhdGEoUFdCMzJfQURBUFRFUiBBZGFwdGVyLCB1MTYgd0Jzc0lkeCwgcHNSWERBVEEgcHNSY3ZEYXRhKTsKK3UxNiB3QlNTY3JlYXRlSUJTU2RhdGEoUFdCMzJfQURBUFRFUiBBZGFwdGVyLCBQV0JfQlNTREVTQ1JJUFRJT04gcHNEZXNEYXRhKTsKK3ZvaWQgRGVzaXJlZFJhdGUyQlNTZGVzY3JpcHRvcihQV0IzMl9BREFQVEVSIEFkYXB0ZXIsIFBXQl9CU1NERVNDUklQVElPTiBwc0Rlc0RhdGEsCisJCQkJCQkJIHU4ICpwQmFzaWNSYXRlU2V0LCB1OCBCYXNpY1JhdGVDb3VudCwKKwkJCQkJCQkgdTggKnBPcGVyYXRpb25SYXRlU2V0LCB1OCBPcGVyYXRpb25SYXRlQ291bnQpOwordm9pZCBEZXNpcmVkUmF0ZTJJbmZvRWxlbWVudChQV0IzMl9BREFQVEVSIEFkYXB0ZXIsIHU4CSphZGRyLCB1MTYgKmlGaWxkT2Zmc2V0LAorCQkJCQkJCSB1OCAqcEJhc2ljUmF0ZVNldCwgdTggQmFzaWNSYXRlQ291bnQsCisJCQkJCQkJIHU4ICpwT3BlcmF0aW9uUmF0ZVNldCwgdTggT3BlcmF0aW9uUmF0ZUNvdW50KTsKK3ZvaWQgQlNTQWRkSUJTU2RhdGEoUFdCMzJfQURBUFRFUiBBZGFwdGVyLCBQV0JfQlNTREVTQ1JJUFRJT04gcHNEZXNEYXRhKTsKK3Vuc2lnbmVkIGNoYXIgYm9DbXBNYWNBZGRyKCBQVUNIQVIsIFBVQ0hBUiApOwordW5zaWduZWQgY2hhciBib0NtcFNTSUQoc3RydWN0IFNTSURfRWxlbWVudCAqcHNTU0lEMSwgc3RydWN0IFNTSURfRWxlbWVudCAqcHNTU0lEMik7Cit1MTYgd0JTU2ZpbmRTU0lEKFBXQjMyX0FEQVBURVIgQWRhcHRlciwgc3RydWN0IFNTSURfRWxlbWVudCAqcHNTc2lkKTsKK3UxNiB3Um9hbWluZ1F1ZXJ5KFBXQjMyX0FEQVBURVIgQWRhcHRlcik7Cit2b2lkIHZSYXRlVG9CaXRtYXAoUFdCMzJfQURBUFRFUiBBZGFwdGVyLCB1MTYgaW5kZXgpOwordTggYlJhdGVUb0JpdG1hcEluZGV4KFBXQjMyX0FEQVBURVIgQWRhcHRlciwgdTggYlJhdGUpOwordTggYkJpdG1hcFRvUmF0ZSh1OCBpKTsKK3Vuc2lnbmVkIGNoYXIgYm9Jc0VSUHN0YShQV0IzMl9BREFQVEVSIEFkYXB0ZXIsIHUxNiBpKTsKK3Vuc2lnbmVkIGNoYXIgYm9DaGVja0Nvbm5lY3QoUFdCMzJfQURBUFRFUiBBZGFwdGVyKTsKK3Vuc2lnbmVkIGNoYXIgYm9DaGVja1NpZ25hbChQV0IzMl9BREFQVEVSIEFkYXB0ZXIpOwordm9pZCBBZGRJQlNTSWUoUFdCMzJfQURBUFRFUiBBZGFwdGVyLFBXQl9CU1NERVNDUklQVElPTiBwc0Rlc0RhdGEgKTsvL2FkZGVkIGJ5IHdzIGZvciBXUEFfTm9uZTA2LzAxLzA0Cit2b2lkIEJzc1NjYW5VcFRvRGF0ZShQV0IzMl9BREFQVEVSIEFkYXB0ZXIpOwordm9pZCBCc3NVcFRvRGF0ZShQV0IzMl9BREFQVEVSIEFkYXB0ZXIpOwordm9pZCBSYXRlU29ydCh1OCAqUmF0ZUFycmF5LCB1OCBudW0sIHU4IG1vZGUpOwordm9pZCBSYXRlUmVTb3J0Rm9yU1JhdGUoUFdCMzJfQURBUFRFUiBBZGFwdGVyLCB1OCAqUmF0ZUFycmF5LCB1OCBudW0pOwordm9pZCBBc3NlbWJsZV9JRShQV0IzMl9BREFQVEVSIEFkYXB0ZXIsIHUxNiB3QnNzSWR4KTsKK3ZvaWQgU2V0TWF4VHhSYXRlKFBXQjMyX0FEQVBURVIgQWRhcHRlcik7CisKK3ZvaWQgQ3JlYXRlV3BhSUUoUFdCMzJfQURBUFRFUiBBZGFwdGVyLCB1MTYqIGlGaWxkT2Zmc2V0LCBQVUNIQVIgbXNnLCBzdHJ1Y3QgIE1hbmFnZW1lbnRfRnJhbWUqIG1zZ0hlYWRlciwKKwkJCQkgc3RydWN0IEFzc29jaWF0aW9uX1JlcXVlc3RfRnJhbWVfQm9keSogbXNnQm9keSwgdTE2IGlNU2luZGV4KTsgLy9hZGRlZCBieSBXUyAwNS8xNC8wNQorCisjaWZkZWYgX1dQQTJfCit2b2lkIENyZWF0ZVJzbklFKFBXQjMyX0FEQVBURVIgQWRhcHRlciwgdTE2KiBpRmlsZE9mZnNldCwgUFVDSEFSIG1zZywgc3RydWN0ICBNYW5hZ2VtZW50X0ZyYW1lKiBtc2dIZWFkZXIsCisJCQkJIHN0cnVjdCBBc3NvY2lhdGlvbl9SZXF1ZXN0X0ZyYW1lX0JvZHkqIG1zZ0JvZHksIHUxNiBpTVNpbmRleCk7Ly9hZGRlZCBieSBXUyAwNS8xNC8wNQorCit1MTYgU2VhcmNoUG1raWQoUFdCMzJfQURBUFRFUiBBZGFwdGVyLCBzdHJ1Y3QgIE1hbmFnZW1lbnRfRnJhbWUqIG1zZ0hlYWRlciwKKwkJCQkgICBzdHJ1Y3QgUE1LSURfSW5mb3JtYXRpb25fRWxlbWVudCAqIEFzc29SZXFfUE1LSUQgKTsKKyNlbmRpZgorCisKKworCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL2Jzc2RzY3B0LmggYi9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9ic3Nkc2NwdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk3MTUwYTIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9ic3Nkc2NwdC5oCkBAIC0wLDAgKzEsMTU2IEBACisvLysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCisvLwlic3Nkc2NwdC5jCisvLwkJQlNTIGRlc2NyaXB0b3IgZGF0YSBiYXNlCisvLwloaXN0b3J5IDoKKy8vCisvLwlEZXNjcmlwdGlvbjoKKy8vCQlCU1MgZGVzY3JpcHRvciBkYXRhIGJhc2Ugd2lsbCBzdG9yZSB0aGUgaW5mb3JtYXRpb24gb2YgdGhlIHN0YXRpb25zIGF0IHRoZQorLy8JCXN1cnJvdW5kaW5nIGVudmlyb25tZW50LiBUaGUgZmlyc3QgZW50cnkoIHBzQlNTKDApICkgd2lsbCBub3QgYmUgdXNlZCBhbmQgdGhlCisvLwkJc2Vjb25kIG9uZSggcHNCU1MoMSkgKSB3aWxsIGJlIHVzZWQgZm9yIHRoZSBicm9hZGNhc3QgYWRkcmVzcy4KKy8vKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKKworLy8jZGVmaW5lIE1BWF9BQ0NfUlNTSV9DT1VOVAkJMTAKKyNkZWZpbmUgTUFYX0FDQ19SU1NJX0NPVU5UCQk2CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8KKy8vIEJTUyBEZXNjcmlwdGlvbiBzZXQgRWxlbWVudCAsIHRvIHN0b3JlIHNjYW4gcmVjZWl2ZWQgQmVhY29uIGluZm9ybWF0aW9uCisvLworLy8gT3VyJ3MgZGlmZmVycyBzbGlnaHRseSBmcm9tIHRoZSBzcGVjcy4gVGhlIHNwZWNpZnkgYSBQSFlfUGFyYW1ldGVyX1NldC4KKy8vIFNpbmNlIHdlJ3JlIG9ubHkgZG9pbmcgYSBEUyBkZXNpZ24gcmlnaHQgbm93LCB3ZSBqdXN0IGhhdmUgYSBEUyBzdHJ1Y3R1cmUuCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KK3R5cGVkZWYgc3RydWN0IEJTU0Rlc2NyaXB0aW9uRWxlbWVudAoreworCXUzMgkJU2xvdFZhbGlkOworCXUzMgkJUG93ZXJTYXZlTW9kZTsKKwlSWExBWUVSMQlSeExheWVyMTsKKworICAgIHU4CQlhYlBlZXJBZGRyZXNzWyBNQUNfQUREUl9MRU5HVEggKyAyIF07IC8vIHBlZXIgTUFDIEFkZHJlc3MgYXNzb2NpYXRlZCB3aXRoIHRoaXMgc2Vzc2lvbi4gNi1PQ1RFVCB2YWx1ZQorICAgIHUzMgkJZHdCZ1NjYW5TdGFtcDsJCS8vIEJnU2NhbiBTZXF1ZW5jZSBDb3VudGVyIHN0YW1wLCByZWNvcmQgcHNST0FNLT5kd1NjYW5Db3VudGVyLgorCisJdTE2CQlCZWFjb25fUGVyaW9kOworCXUxNgkJd0FUSU1fV2luZG93OworCisgICAgdTgJCWFiQnNzSURbIE1BQ19BRERSX0xFTkdUSCArIDIgXTsJCQkJLy8gNkIKKworICAgIHU4CQliQnNzVHlwZTsKKyAgICB1OAkJRFRJTV9QZXJpb2Q7ICAgICAgICAvLyAxIG9jdGV0IHVzdWFsbHkgZnJvbSBUSU0gZWxlbWVudCwgaWYgcHJlc2VudAorCXU4CQlib0luVGltZXJIYW5kbGVyOworCXU4CQlib0VSUDsJCQkvLyBhbmFseXNpcyBFUlAgb3IgKGV4dGVuZGVkKSBzdXBwb3J0ZWQgcmF0ZSBlbGVtZW50CisKKwl1OAkJVGltZXN0YW1wWzhdOworCXU4CQlCYXNpY1JhdGVbMzJdOworCXU4CQlPcGVyYXRpb25hbFJhdGVbMzJdOworCXUzMgkJZHdCYXNpY1JhdGVCaXRtYXA7CQkJLy9iaXQgbWFwLCByZXRyaWV2ZSBmcm9tIFN1cHBvcnRlZFJhdGVTZXQKKwl1MzIJCWR3T3BlcmF0aW9uYWxSYXRlQml0bWFwOwkvL2JpdCBtYXAsIHJldHJpZXZlIGZyb20gU3VwcG9ydGVkUmF0ZVNldCBhbmQKKwkJCQkJCQkJCQkvLyBFeHRlbmRlZFN1cHBvcnRlZFJhdGVTZXQKKwkvLyBGb3IgUlNTSSBjYWxjdWxhdGluZworCXUzMgkJSGFsUnNzaVtNQVhfQUNDX1JTU0lfQ09VTlRdOyAvLyBFbmNvZGUuIEl0IG11c3QgdXNlIE1BQ1JPIG9mIEhBTCB0byBnZXQgdGhlIExOQSBhbmQgQUdDIGRhdGEKKwl1MzIJCUhhbFJzc2lJbmRleDsKKworCS8vLy9Gcm9tIGJlYWNvbi9wcm9iZSByZXNwb25zZQorICAgIHN0cnVjdCBTU0lEX0VsZW1lbnQgU1NJRDsJCQkJLy8gMzRCCisJdTgJcmVzZXJ2ZWRfMVsgMiBdOworCisgICAgc3RydWN0IENhcGFiaWxpdHlfSW5mb3JtYXRpb25fRWxlbWVudCAgIENhcGFiaWxpdHlJbmZvcm1hdGlvbjsgIC8vIDJCCisJdTgJcmVzZXJ2ZWRfMlsgMiBdOworCisgICAgc3RydWN0IENGX1BhcmFtZXRlcl9TZXRfRWxlbWVudCAgICBDRl9QYXJhbWV0ZXJfU2V0OwkJLy8gOEIKKyAgICBzdHJ1Y3QgSUJTU19QYXJhbWV0ZXJfU2V0X0VsZW1lbnQgIElCU1NfUGFyYW1ldGVyX1NldDsJCS8vIDRCCisgICAgc3RydWN0IFRJTV9FbGVtZW50ICAgICAgICAgICAgICAgICBUSU1fRWxlbWVudF9TZXQ7IAkJCS8vIDI1NkIKKworICAgIHN0cnVjdCBEU19QYXJhbWV0ZXJfU2V0X0VsZW1lbnQgICAgRFNfUGFyYW1ldGVyX1NldDsJCS8vIDNCCisJdTgJcmVzZXJ2ZWRfMzsKKworCXN0cnVjdCBFUlBfSW5mb3JtYXRpb25fRWxlbWVudAkJRVJQX0luZm9ybWF0aW9uX1NldDsJLy8gM0IKKwl1OAlyZXNlcnZlZF80OworCisgICAgc3RydWN0IFN1cHBvcnRlZF9SYXRlc19FbGVtZW50ICAgICBTdXBwb3J0ZWRSYXRlU2V0OwkJCS8vIDEwQgorCXU4CXJlc2VydmVkXzVbMl07CisKKwlzdHJ1Y3QgRXh0ZW5kZWRfU3VwcG9ydGVkX1JhdGVzX0VsZW1lbnQJRXh0ZW5kZWRTdXBwb3J0ZWRSYXRlU2V0OwkvLyAyNTdCCisJdTgJcmVzZXJ2ZWRfNlszXTsKKworCXU4CWJhbmQ7CisJdTgJcmVzZXJ2ZWRfN1szXTsKKworCS8vIGZvciBNTE1FIG1vZHVsZQorICAgIHUxNgkJd1N0YXRlOwkJCS8vIHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSBzeXN0ZW0KKwl1MTYJCXdJbmRleDsJCQkvLyBUSElTIEJTUyBlbGVtZW50IGVudHJ5IGluZGV4CisKKwl2b2lkKglwc0FkYXB0ZXI7CQkvLyBwb2ludGVyIHRvIFRISVMgQWRhcHRlcgorCU9TX1RJTUVSCW5UaW1lcjsgIC8vIE1MTUUgdGltZXIKKworICAgIC8vIEF1dGhlbnRpY2F0aW9uCisgICAgdTE2CQl3QXV0aEFsZ287ICAgICAgLy8gcGVlciBNQUMgTUxNRSB1c2UgQXV0aCBhbGdvcml0aG0sIGRlZmF1bHQgT1BFTl9BVVRICisgICAgdTE2CQl3QXV0aFNlcU51bTsgICAgLy8gY3VycmVudCBsb2NhbCBNQUMgc2VuZG91dCBBdXRoUmVxIHNlcXVlbmNlIG51bWJlcgorCisJdTgJCWF1dGhfY2hhbGxlbmdlVGV4dFsxMjhdOworCisJLy8vL0ZvciBYUDoKKyAgICB1MzIJCWllc19sZW47CQkvLyBpbmZvcm1hdGlvbiBlbGVtZW50IGxlbmd0aAorICAgIHU4CQlpZXNbMjU2XTsJCS8vIGluZm9ybWF0aW9uIGVsZW1lbnQKKworCS8vLy9Gb3IgV1BBCisJdTgJUnNuSWVfVHlwZVsyXTsJCS8vYWRkZWQgYnkgd3MgZm9yIGRpc3Rpbmd1aXNoIFdQQSBhbmQgV1BBMiAwNS8xNC8wNAorCXU4CVJzbkllX2xlbjsKKyAgICB1OAlSc25fTnVtOworCisgICAgLy8gdG8gcmVjb3JkIHRoZSByc24gY2lwaGVyIHN1aXRlcyxhZGRkZWQgYnkgd3MgMDkvMDUvMDQKKwlTVUlURV9TRUxFQ1RPUgkJCWdyb3VwX2NpcGhlcjsgLy8gNEIKKwlTVUlURV9TRUxFQ1RPUgkJCXBhaXJ3aXNlX2tleV9jaXBoZXJfc3VpdGVzW1dMQU5fTUFYX1BBSVJXSVNFX0NJUEhFUl9TVUlURV9DT1VOVF07CisJU1VJVEVfU0VMRUNUT1IJCQlhdXRoX2tleV9tZ3Rfc3VpdGVzW1dMQU5fTUFYX0FVVEhfS0VZX01HVF9TVUlURV9MSVNUX0NPVU5UXTsKKworCXUxNgkJCQkJcGFpcndpc2Vfa2V5X2NpcGhlcl9zdWl0ZV9jb3VudDsKKwl1MTYJCQkJCWF1dGhfa2V5X21ndF9zdWl0ZV9jb3VudDsKKworCXU4CQkJCQlwYWlyd2lzZV9rZXlfY2lwaGVyX3N1aXRlX3NlbGVjdGVkOworCXU4CQkJCQlhdXRoX2tleV9tZ3Rfc3VpdGVfc2VsZWN0ZWQ7CisJdTgJCQkJCXJlc2VydmVkXzhbMl07CisKKwlzdHJ1Y3QgUlNOX0NhcGFiaWxpdHlfRWxlbWVudCAgcnNuX2NhcGFiaWxpdGllczsgLy8gMkIKKwl1OAkJCQkJcmVzZXJ2ZWRfOVsyXTsKKworICAgIC8vdG8gcmVjb3JkIHRoZSByc24gY2lwaGVyIHN1aXRlcyBmb3IgV1BBMgorICAgICNpZmRlZiBfV1BBMl8KKwl1MzIJCQkJCXByZV9hdXRoOwkJLy9hZGRlZCBieSBXUyBmb3IgZGlzdGluZ3Vpc2ggZm9yIDA1LzA0LzA0CisgICAgU1VJVEVfU0VMRUNUT1IJCQl3cGEyX2dyb3VwX2NpcGhlcjsgLy8gNEIKKwlTVUlURV9TRUxFQ1RPUgkJCXdwYTJfcGFpcndpc2Vfa2V5X2NpcGhlcl9zdWl0ZXNbV0xBTl9NQVhfUEFJUldJU0VfQ0lQSEVSX1NVSVRFX0NPVU5UXTsKKwlTVUlURV9TRUxFQ1RPUgkJCXdwYTJfYXV0aF9rZXlfbWd0X3N1aXRlc1tXTEFOX01BWF9BVVRIX0tFWV9NR1RfU1VJVEVfTElTVF9DT1VOVF07CisKKwl1MTYJCQkJCXdwYTJfcGFpcndpc2Vfa2V5X2NpcGhlcl9zdWl0ZV9jb3VudDsKKwl1MTYJCQkJCXdwYTJfYXV0aF9rZXlfbWd0X3N1aXRlX2NvdW50OworCisJdTgJCQkJCXdwYTJfcGFpcndpc2Vfa2V5X2NpcGhlcl9zdWl0ZV9zZWxlY3RlZDsKKwl1OAkJCQkJd3BhMl9hdXRoX2tleV9tZ3Rfc3VpdGVfc2VsZWN0ZWQ7CisJdTgJCQkJCXJlc2VydmVkXzEwWzJdOworCisJc3RydWN0IFJTTl9DYXBhYmlsaXR5X0VsZW1lbnQgIHdwYTJfcnNuX2NhcGFiaWxpdGllczsgLy8gMkIKKwl1OAkJCQkJcmVzZXJ2ZWRfMTFbMl07CisgICAgI2VuZGlmIC8vZW5kaWYgX1dQQTJfCisKKwkvL0ZvciBSZXBsYXkgcHJvdGVjdGlvbgorLy8JdTgJCVBhaXJ3aXNlVFNDWzZdOworLy8JdTgJCUdyb3VwVFNDWzZdOworCisJLy8vL0ZvciB1cC10by1kYXRlCisJdTMyCQlTY2FuVGltZVN0YW1wOwkvL2ZvciB0aGUgZGVjaXNpb24gd2hldGhlciB0aGUgc3RhdGlvbi9BUChtYXkgZXhpc3QgYXQKKwkJCQkJCQkvL2RpZmZlcmVudCBjaGFubmVscykgaGFzIGxlZnQuIEl0IG11c3QgYmUgZGV0ZWN0ZWQgYnkKKwkJCQkJCQkvL3NjYW5uaW5nLiBMb2NhbCBkZXZpY2UgbWF5IGNvbm5lY3RlZCBvciBkaXNjb25uZWN0ZWQuCisJdTMyCQlCc3NUaW1lU3RhbXA7CS8vT25seSBmb3IgdGhlIGRlY2lzaW9uIHdoZXRoZXIgdGhlIHN0YXRpb24vQVAoZXhpc3QgaW4KKwkJCQkJCQkvL3RoZSBzYW1lIGNoYW5uZWwsIGFuZCBubyBzY2FubmluZykgaWYgbG9jYWwgZGV2aWNlIGhhcworCQkJCQkJCS8vY29ubmVjdGVkIHN1Y2Nlc3NmdWxseS4KKworCS8vIDIwMDYxMTA4IEFkZCBmb3Igc3RvcmluZyBXUFNfSUUuIFtFIGlkXVtMZW5ndGhdW09VSV1bRGF0YV0KKwl1OAkJV1BTX0lFX0RhdGFbTUFYX0lFX0FQUEVORF9TSVpFXTsKKwl1MTYJCVdQU19JRV9sZW5ndGg7CisJdTE2CQlXUFNfSUVfbGVuZ3RoX3RtcDsgLy8gRm9yIHZlcmlmeSB0aGVyZSBpcyBhbiBXUFNfSUUgaW4gQmVhY29uIG9yIHByb2JlIHJlc3BvbnNlCisKK30gV0JfQlNTREVTQ1JJUFRJT04sICpQV0JfQlNTREVTQ1JJUFRJT047CisKKyNkZWZpbmUgd0JTU0Nvbm5lY3RlZFNUQShBZGFwdGVyKSAgICAgICAgICAgICBcCisgICAgKCh1MTYpKEFkYXB0ZXIpLT5zTG9jYWxQYXJhLndDb25uZWN0ZWRTVEFpbmRleCkKKworI2RlZmluZSBwc0JTUyhpKQkJCSgmKEFkYXB0ZXItPmFzQlNTRGVzY3JpcHRFbGVtZW50WyhpKV0pKQorCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL2RzX3RraXAuaCBiL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL2RzX3RraXAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOWU1MDU1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvZHNfdGtpcC5oCkBAIC0wLDAgKzEsMzMgQEAKKy8vIFJvdGF0aW9uIGZ1bmN0aW9ucyBvbiAzMiBiaXQgdmFsdWVzCisjZGVmaW5lIFJPTDMyKCBBLCBuICkgXAorICAgICggKChBKSA8PCAobikpIHwgKCAoKEEpPj4oMzItKG4pKSkgICYgKCAoMVVMIDw8IChuKSkgLSAxICkgKSApCisKKyNkZWZpbmUgUk9SMzIoIEEsIG4gKSAgIFJPTDMyKCAoQSksIDMyLShuKSApCisKKwordHlwZWRlZiBzdHJ1Y3QgdGtpcAoreworICAgIHUzMglLMCwgSzE7CQkvLyBLZXkKKwl1bmlvbgorCXsKKwkJc3RydWN0IC8vIEN1cnJlbnQgc3RhdGUKKwkJeworCQkJdTMyCUw7CisJCQl1MzIJUjsKKwkJfTsKKwkJdTgJTFJbOF07CisJfTsKKwl1bmlvbgorCXsKKwkJdTMyCU07CQkvLyBNZXNzYWdlIGFjY3VtdWxhdG9yIChzaW5nbGUgd29yZCkKKwkJdTgJTWJbNF07CisJfTsKKwlzMzIJCWJ5dGVzX2luX007CS8vICMgYnl0ZXMgaW4gTQorfSB0a2lwX3Q7CisKKy8vdm9pZCBfYXBwZW5kX2RhdGEoIFBVQ0hBUiBwRGF0YSwgdTE2IHNpemUsIHRraXBfdCAqcCApOwordm9pZCBNZHNfTWljR2V0KCAgdm9pZCogQWRhcHRlciwgIHZvaWQqIHBSeExheWVyMSwgIFBVQ0hBUiBwS2V5LCAgUFVDSEFSIHBNaWMgKTsKK3ZvaWQgTWRzX01pY0ZpbGwoICB2b2lkKiBBZGFwdGVyLCAgdm9pZCogcERlcywgIFBVQ0hBUiBYbWl0QnVmQWRkcmVzcyApOworCisKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvZ2xfODAyMTEuaCBiL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL2dsXzgwMjExLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTgwNmQ4MQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL2dsXzgwMjExLmgKQEAgLTAsMCArMSwxMjUgQEAKKworI2lmbmRlZiBfX0dMXzgwMjExX0hfXworI2RlZmluZSBfX0dMXzgwMjExX0hfXworCisvKioqKioqKioqKioqKioqKioqIENPTlNUQU5UIEFORCBNQUNSTyBTRUNUSU9OICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogQlNTIFR5cGUgKi8KK2VudW0geworICAgIFdMQU5fQlNTVFlQRV9JTkZSQVNUUlVDVFVSRSAgICAgICAgID0gMCwKKyAgICBXTEFOX0JTU1RZUEVfSU5ERVBFTkRFTlQsCisgICAgV0xBTl9CU1NUWVBFX0FOWV9CU1MsCit9OworCisKKworLyogUHJlYW1ibGVfVHlwZSwgc2VlIDxTRlMtODAyLjExRy1NSUItMjAzPiAqLwordHlwZWRlZiBlbnVtIHByZWFtYmxlX3R5cGUgeworICAgIFdMQU5fUFJFQU1CTEVfVFlQRV9TSE9SVCwKKyAgICBXTEFOX1BSRUFNQkxFX1RZUEVfTE9ORywKK30gICAgcHJlYW1ibGVfdHlwZV9lOworCisKKy8qIFNsb3RfVGltZV9UeXBlLCBzZWUgPFNGUy04MDIuMTFHLU1JQi0yMDg+ICovCit0eXBlZGVmIGVudW0gc2xvdF90aW1lX3R5cGUgeworICAgIFdMQU5fU0xPVF9USU1FX1RZUEVfTE9ORywKKyAgICBXTEFOX1NMT1RfVElNRV9UWVBFX1NIT1JULAorfSAgICBzbG90X3RpbWVfdHlwZV9lOworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qIEVuY3J5cHRpb24gTW9kZSAqLwordHlwZWRlZiBlbnVtIHsKKyAgICBXRVBfRElTQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAwLAorICAgIFdFUF82NCwKKyAgICBXRVBfMTI4LAorCisgICAgRU5DUllQVF9ESVNBQkxFLAorICAgIEVOQ1JZUFRfV0VQLAorICAgIEVOQ1JZUFRfV0VQX05PS0VZLAorICAgIEVOQ1JZUFRfVEtJUCwKKyAgICBFTkNSWVBUX1RLSVBfTk9LRVksCisgICAgRU5DUllQVF9DQ01QLAorICAgIEVOQ1JZUFRfQ0NNUF9OT0tFWSwKK30gICAgZW5jcnlwdGlvbl9tb2RlX2U7CisKK3R5cGVkZWYgZW51bSBfV0xBTl9SQURJTyB7CisgICAgV0xBTl9SQURJT19PTiwKKyAgICBXTEFOX1JBRElPX09GRiwKKyAgICBXTEFOX1JBRElPX01BWCwgLy8gbm90IGEgcmVhbCB0eXBlLCBkZWZpbmVkIGFzIGFuIHVwcGVyIGJvdW5kCit9IFdMQU5fUkFESU87CisKK3R5cGVkZWYgc3RydWN0IF9XTEFOX1JBRElPX1NUQVRVUyB7CisJV0xBTl9SQURJTyBIV1N0YXR1czsKKwlXTEFOX1JBRElPIFNXU3RhdHVzOworfSBXTEFOX1JBRElPX1NUQVRVUzsKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyAyMDA0MTAyMSAxLjEuODEuMTAwMCB5YmppYW5nCisvLyBhZGQgZm9yIHJhZGlvIG5vdGlmaWNhdGlvbgordHlwZWRlZgordm9pZCAoKlJBRElPX05PVElGSUNBVElPTl9IQU5ETEVSKSgKKwl2b2lkICpEYXRhLAorCXZvaWQgKlJhZGlvU3RhdHVzQnVmZmVyLAorCXUzMiBSYWRpb1N0YXR1c0J1ZmZlckxlbgorCSk7CisKK3R5cGVkZWYgc3RydWN0IF9XTEFOX1JBRElPX05PVElGSUNBVElPTgoreworICAgIFJBRElPX05PVElGSUNBVElPTl9IQU5ETEVSIFJhZGlvQ2hhbmdlSGFuZGxlcjsKKyAgICB2b2lkICpEYXRhOworfSBXTEFOX1JBRElPX05PVElGSUNBVElPTjsKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyAyMDA0MTEwMiAxLjEuOTEuMTAwMCB5YmppYW5nCisvLyBhZGQgZm9yIE9JRF84MDJfMTFfQ1VTVF9SRUdJT05fQ0FQQUJJTElUSUVTIGFuZCBPSURfODAyXzExX09JRF9SRUdJT04KK3R5cGVkZWYgZW51bSBfV0xBTl9SRUdJT05fQ09ERQoreworCVdMQU5fUkVHSU9OX1VOS05PV04sCisJV0xBTl9SRUdJT05fRVVST1BFLAorCVdMQU5fUkVHSU9OX0pBUEFOLAorCVdMQU5fUkVHSU9OX1VTQSwKKwlXTEFOX1JFR0lPTl9GUkFOQ0UsCisJV0xBTl9SRUdJT05fU1BBSU4sCisJV0xBTl9SRUdJT05fSVNSQUVMLAorCVdMQU5fUkVHSU9OX01BWCwgLy8gbm90IGEgcmVhbCB0eXBlLCBkZWZpbmVkIGFzIGFuIHVwcGVyIGJvdW5kCit9IFdMQU5fUkVHSU9OX0NPREU7CisKKyNkZWZpbmUgUkVHSU9OX05BTUVfTUFYX0xFTkdUSCAgIDI1NgorCit0eXBlZGVmIHN0cnVjdCBfV0xBTl9SRUdJT05fQ0hBTk5FTFMKK3sKKwl1MzIgTGVuZ3RoOworCXUzMiBOYW1lTGVuZ3RoOworCXU4IE5hbWVbUkVHSU9OX05BTUVfTUFYX0xFTkdUSF07CisJV0xBTl9SRUdJT05fQ09ERSBDb2RlOworCXUzMiBGcmVxdWVuY3lbMV07Cit9IFdMQU5fUkVHSU9OX0NIQU5ORUxTOworCit0eXBlZGVmIHN0cnVjdCBfV0xBTl9SRUdJT05fQ0FQQUJJTElUSUVTCit7CisJdTMyIE51bWJlck9mSXRlbXM7CisJV0xBTl9SRUdJT05fQ0hBTk5FTFMgUmVnaW9uWzFdOworfSBXTEFOX1JFR0lPTl9DQVBBQklMSVRJRVM7CisKK3R5cGVkZWYgc3RydWN0IF9yZWdpb25fbmFtZV9tYXAgeworCVdMQU5fUkVHSU9OX0NPREUgcmVnaW9uOworCXU4ICpuYW1lOworCXUzMiAqY2hhbm5lbHM7Cit9IHJlZ2lvbl9uYW1lX21hcDsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZGVmaW5lIE1BQzJTVFIoYSkgKGEpWzBdLCAoYSlbMV0sIChhKVsyXSwgKGEpWzNdLCAoYSlbNF0sIChhKVs1XQorI2RlZmluZSBNQUNTVFIgIiUwMlg6JTAyWDolMDJYOiUwMlg6JTAyWDolMDJYIgorCisvLyBUT0RPOiAwNjI3IGtldmluCisjZGVmaW5lIE1JQzJTVFIoYSkgKGEpWzBdLCAoYSlbMV0sIChhKVsyXSwgKGEpWzNdLCAoYSlbNF0sIChhKVs1XSwgKGEpWzZdLCAoYSlbN10KKyNkZWZpbmUgTUlDU1RSICIlMDJYICUwMlggJTAyWCAlMDJYICUwMlggJTAyWCAlMDJYICUwMlgiCisKKyNkZWZpbmUgTUlDS0VZMlNUUihhKSAgIE1JQzJTVFIoYSkKKyNkZWZpbmUgTUlDS0VZU1RSICAgICAgIE1JQ1NUUgorCisKKyNlbmRpZiAvKiBfX0dMXzgwMjExX0hfXyAqLworLyoqKiBlbmQgb2YgZmlsZSAqKiovCisKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvaW9jdGxzLmggYi9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9pb2N0bHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOGIzNWRjCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvaW9jdGxzLmgKQEAgLTAsMCArMSw2NzggQEAKKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8gIElPQ1RMUy5IIC0KKy8vCisvLyAgRGVzY3JpcHRpb246CisvLyAgICBEZWZpbmUgdGhlIElPQ1RMIGNvZGVzLgorLy8KKy8vICBSZXZpc2lvbiBoaXN0b3J5OgorLy8gIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLworLy8gIENvcHlyaWdodCAoYykgMjAwMi0yMDA0IFdpbmJvbmQgRWxlY3Ryb25pY3MgQ29ycC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworI2lmbmRlZiBfSU9DVExTX0gKKyNkZWZpbmUgX0lPQ1RMU19ICisKKy8vIFBENDMgS2VlcCBpdCAtIFVzZWQgd2l0aCB0aGUgV2luMzMgYXBwbGljYXRpb24KKy8vICNpbmNsdWRlIDx3aW5pb2N0bC5oPgorCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLyAyMDA0MDEwOCBBREQgdGhlIGZvbGxvdyBmb3IgdGVzdAorLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorI2RlZmluZSBJTkZPUk1BVElPTl9MRU5HVEggc2l6ZW9mKHVuc2lnbmVkIGludCkKKworI2RlZmluZSBXQjMyX0lPQ1RMX0lOREVYICAweDA5MDAgLy/CrcOXwqfEj8S9SMWkS8W5xbDFvWUvLworCisjZGVmaW5lIFdiMzJfUmVnaXN0ZXJSZWFkCQkJQ1RMX0NPREUoCVwKKwkJCUZJTEVfREVWSUNFX1VOS05PV04sCQkJCVwKKyAgICAgICAgICAgIFdCMzJfSU9DVExfSU5ERVggKyAwLAkJCQlcCisgICAgICAgICAgICBNRVRIT0RfQlVGRkVSRUQsCQkJCQlcCisgICAgICAgICAgICBGSUxFX0FOWV9BQ0NFU1MpCisKKyNkZWZpbmUgV2IzMl9SZWdpc3RlcldyaXRlCQkJQ1RMX0NPREUoCVwKKyAgICAgICAgICAgIEZJTEVfREVWSUNFX1VOS05PV04sCQkJCVwKKyAgICAgICAgICAgIFdCMzJfSU9DVExfSU5ERVggKyAxLAkJCQlcCisgICAgICAgICAgICBNRVRIT0RfQlVGRkVSRUQsCQkJCQlcCisgICAgICAgICAgICBGSUxFX0FOWV9BQ0NFU1MpCisKKyNkZWZpbmUgV2IzMl9TZW5kUGFja2V0CQkJCUNUTF9DT0RFKAlcCisgICAgICAgICAgICBGSUxFX0RFVklDRV9VTktOT1dOLAkJCQlcCisgICAgICAgICAgICBXQjMyX0lPQ1RMX0lOREVYICsgMiwJCQkJXAorICAgICAgICAgICAgTUVUSE9EX0JVRkZFUkVELAkJCQkJXAorICAgICAgICAgICAgRklMRV9BTllfQUNDRVNTKQorCisjZGVmaW5lIFdiMzJfUXVlcnlTZW5kUmVzdWx0CQlDVExfQ09ERSgJXAorICAgICAgICAgICAgRklMRV9ERVZJQ0VfVU5LTk9XTiwJCQkJXAorICAgICAgICAgICAgV0IzMl9JT0NUTF9JTkRFWCArIDMsCQkJCVwKKyAgICAgICAgICAgIE1FVEhPRF9CVUZGRVJFRCwJCQkJCVwKKyAgICAgICAgICAgIEZJTEVfQU5ZX0FDQ0VTUykKKworI2RlZmluZSBXYjMyX1NldEZyYWdtZW50VGhyZXNob2xkCUNUTF9DT0RFKAlcCisgICAgICAgICAgICBGSUxFX0RFVklDRV9VTktOT1dOLAkJCQlcCisgICAgICAgICAgICBXQjMyX0lPQ1RMX0lOREVYICsgNCwJCQkJXAorICAgICAgICAgICAgTUVUSE9EX0JVRkZFUkVELAkJCQkJXAorICAgICAgICAgICAgRklMRV9BTllfQUNDRVNTKQorCisjZGVmaW5lIFdiMzJfU2V0TGlua1N0YXR1cwkJQ1RMX0NPREUoCVwKKyAgICAgICAgICAgIEZJTEVfREVWSUNFX1VOS05PV04sCQkJCVwKKyAgICAgICAgICAgIFdCMzJfSU9DVExfSU5ERVggKyA1LAkJCQlcCisgICAgICAgICAgICBNRVRIT0RfQlVGRkVSRUQsCQkJCQlcCisgICAgICAgICAgICBGSUxFX0FOWV9BQ0NFU1MpCisKKyNkZWZpbmUgV2IzMl9TZXRCdWxrSW4JCQlDVExfQ09ERSgJXAorICAgICAgICAgICAgRklMRV9ERVZJQ0VfVU5LTk9XTiwJCQkJXAorICAgICAgICAgICAgV0IzMl9JT0NUTF9JTkRFWCArIDYsCQkJCVwKKyAgICAgICAgICAgIE1FVEhPRF9CVUZGRVJFRCwJCQkJCVwKKyAgICAgICAgICAgIEZJTEVfQU5ZX0FDQ0VTUykKKworI2RlZmluZSBXYjMyX0xvb3BiYWNrVGVzdAkJCUNUTF9DT0RFKAlcCisgICAgICAgICAgICBGSUxFX0RFVklDRV9VTktOT1dOLAkJCQlcCisgICAgICAgICAgICBXQjMyX0lPQ1RMX0lOREVYICsgNywJCQkJXAorICAgICAgICAgICAgTUVUSE9EX0JVRkZFUkVELAkJCQkJXAorICAgICAgICAgICAgRklMRV9BTllfQUNDRVNTKQorCisjZGVmaW5lIFdiMzVfRUVQcm9tUmVhZAkJCQlDVExfQ09ERSgJXAorICAgICAgICAgICAgRklMRV9ERVZJQ0VfVU5LTk9XTiwJCQkJXAorICAgICAgICAgICAgV0IzMl9JT0NUTF9JTkRFWCArIDgsCQkJCVwKKyAgICAgICAgICAgIE1FVEhPRF9CVUZGRVJFRCwJCQkJCVwKKyAgICAgICAgICAgIEZJTEVfQU5ZX0FDQ0VTUykKKworI2RlZmluZSBXYjM1X0VFUHJvbVdyaXRlCQkJQ1RMX0NPREUoCVwKKyAgICAgICAgICAgIEZJTEVfREVWSUNFX1VOS05PV04sCQkJCVwKKyAgICAgICAgICAgIFdCMzJfSU9DVExfSU5ERVggKyA5LAkJCQlcCisgICAgICAgICAgICBNRVRIT0RfQlVGRkVSRUQsCQkJCQlcCisgICAgICAgICAgICBGSUxFX0FOWV9BQ0NFU1MpCisKKyNkZWZpbmUgV2IzNV9GbGFzaFJlYWREYXRhCQkJQ1RMX0NPREUoCVwKKyAgICAgICAgICAgIEZJTEVfREVWSUNFX1VOS05PV04sCQkJCVwKKyAgICAgICAgICAgIFdCMzJfSU9DVExfSU5ERVggKyAxMCwJCQkJXAorICAgICAgICAgICAgTUVUSE9EX0JVRkZFUkVELAkJCQkJXAorICAgICAgICAgICAgRklMRV9BTllfQUNDRVNTKQorCisjZGVmaW5lIFdiMzVfRmxhc2hXcml0ZQkJCQlDVExfQ09ERSgJXAorICAgICAgICAgICAgRklMRV9ERVZJQ0VfVU5LTk9XTiwJCQkJXAorICAgICAgICAgICAgV0IzMl9JT0NUTF9JTkRFWCArIDExLAkJCQlcCisgICAgICAgICAgICBNRVRIT0RfQlVGRkVSRUQsCQkJCQlcCisgICAgICAgICAgICBGSUxFX0FOWV9BQ0NFU1MpCisKKyNkZWZpbmUgV2IzNV9GbGFzaFdyaXRlQnVyc3QJCUNUTF9DT0RFKAlcCisgICAgICAgICAgICBGSUxFX0RFVklDRV9VTktOT1dOLAkJCQlcCisgICAgICAgICAgICBXQjMyX0lPQ1RMX0lOREVYICsgMTIsCQkJCVwKKyAgICAgICAgICAgIE1FVEhPRF9CVUZGRVJFRCwJCQkJCVwKKyAgICAgICAgICAgIEZJTEVfQU5ZX0FDQ0VTUykKKworI2RlZmluZSBXYjM1X1R4QnVyc3RTdGFydAkJCUNUTF9DT0RFKAlcCisgICAgICAgICAgICBGSUxFX0RFVklDRV9VTktOT1dOLAkJCQlcCisgICAgICAgICAgICBXQjMyX0lPQ1RMX0lOREVYICsgMTMsCQkJCVwKKyAgICAgICAgICAgIE1FVEhPRF9CVUZGRVJFRCwJCQkJCVwKKyAgICAgICAgICAgIEZJTEVfQU5ZX0FDQ0VTUykKKworI2RlZmluZSBXYjM1X1R4QnVyc3RTdG9wCQkJQ1RMX0NPREUoCVwKKyAgICAgICAgICAgIEZJTEVfREVWSUNFX1VOS05PV04sCQkJCVwKKyAgICAgICAgICAgIFdCMzJfSU9DVExfSU5ERVggKyAxNCwJCQkJXAorICAgICAgICAgICAgTUVUSE9EX0JVRkZFUkVELAkJCQkJXAorICAgICAgICAgICAgRklMRV9BTllfQUNDRVNTKQorCisjZGVmaW5lIFdiMzVfVHhCdXJzdFN0YXR1cwkJCUNUTF9DT0RFKAlcCisgICAgICAgICAgICBGSUxFX0RFVklDRV9VTktOT1dOLAkJCQlcCisgICAgICAgICAgICBXQjMyX0lPQ1RMX0lOREVYICsgMTUsCQkJCVwKKyAgICAgICAgICAgIE1FVEhPRF9CVUZGRVJFRCwJCQkJCVwKKyAgICAgICAgICAgIEZJTEVfQU5ZX0FDQ0VTUykKKworLy8gRm9yIElPQ1RMIGludGVyZmFjZQorLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyNkZWZpbmUgTElOS05BTUVfU1RSSU5HICAgICAiXFxEb3NEZXZpY2VzXFxXMzVVTkQiCisjZGVmaW5lIE5UREVWSUNFX1NUUklORyAgICAgIlxcRGV2aWNlXFxXMzVVTkQiCisjZGVmaW5lIEFQUExJQ0FUSU9OX0xJTksJIlxcXFwuXFxXMzVVTkQiCisKKyNkZWZpbmUgV0JfSU9DVExfSU5ERVggICAgICAweDA4MDAKKyNkZWZpbmUgV0JfSU9DVExfVFNfSU5ERVggICBXQl9JT0NUTF9JTkRFWCArIDYwCisjZGVmaW5lIFdCX0lPQ1RMX0RVVF9JTkRFWCAgV0JfSU9DVExfVFNfSU5ERVggKyA0MAorCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLyBJT0NUTFMgZGVmaW5lZCBmb3IgRFVUIChEZXZpY2UgVW5kZXIgVGVzdCkKKworLy8gSU9DVExfV0JfODAyXzExX0RVVF9NQUNfQUREUkVTUworLy8gUXVlcnk6IFJldHVybiB0aGUgZG90MTFTdGF0aW9uSUQKKy8vIFNldCAgOiBTZXQgdGhlIGRvdDExU3RhdGlvbklELiBEZW1vIG9ubHkuCisvLworI2RlZmluZSBJT0NUTF9XQl84MDJfMTFfRFVUX01BQ19BRERSRVNTICAgICBDVExfQ09ERSggIFwKKyAgICAgICAgICAgIEZJTEVfREVWSUNFX1VOS05PV04sICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgV0JfSU9DVExfRFVUX0lOREVYICsgMSwgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBNRVRIT0RfQlVGRkVSRUQsICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIEZJTEVfQU5ZX0FDQ0VTUykKKworLy8gSU9DVExfV0JfODAyXzExX0RVVF9CU1NfREVTQ1JJUFRJT04KKy8vIFF1ZXJ5OiBSZXR1cm4gdGhlIGluZm8uIG9mIHRoZSBjdXJyZW50IGNvbm5lY3RlZCBCU1MuCisvLyBTZXQgIDogTm9uZS4KKy8vCisjZGVmaW5lIElPQ1RMX1dCXzgwMl8xMV9EVVRfQlNTX0RFU0NSSVBUSU9OICAgQ1RMX0NPREUoICBcCisgICAgICAgICAgICBGSUxFX0RFVklDRV9VTktOT1dOLCAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgV0JfSU9DVExfRFVUX0lOREVYICsgMiwgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIE1FVEhPRF9CVUZGRVJFRCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBGSUxFX0FOWV9BQ0NFU1MpCisKKy8vIElPQ1RMX1dCXzgwMl8xMV9EVVRfVFhfUkFURQorLy8gUXVlcnk6IFJldHVybiB0aGUgY3VycmVudCB0cmFuc21pc3Npb24gcmF0ZS4KKy8vIFNldCAgOiBTZXQgdGhlIHRyYW5zbWlzc2lvbiByYXRlIG9mIHRoZSBUeCBwYWNrZXRzLgorLy8KKyNkZWZpbmUgSU9DVExfV0JfODAyXzExX0RVVF9UWF9SQVRFICAgICAgICAgICAgIENUTF9DT0RFKCAgXAorICAgICAgICAgICAgRklMRV9ERVZJQ0VfVU5LTk9XTiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgV0JfSU9DVExfRFVUX0lOREVYICsgMywgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgTUVUSE9EX0JVRkZFUkVELCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgRklMRV9BTllfQUNDRVNTKQorCisvLyBJT0NUTF9XQl84MDJfMTFfRFVUX0NVUlJFTlRfU1RBX1NUQVRFCisvLyBRdWVyeTogUmV0dXJuIHRoZSBjdXJyZW50IFNUQSBzdGF0ZS4gKFdCX1NUQVNUQVRFIHR5cGUpCisvLyBTZXQgIDogTm9uZS4KKy8vCisjZGVmaW5lIElPQ1RMX1dCXzgwMl8xMV9EVVRfQ1VSUkVOVF9TVEFfU1RBVEUgICBDVExfQ09ERSggIFwKKyAgICAgICAgICAgIEZJTEVfREVWSUNFX1VOS05PV04sICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIFdCX0lPQ1RMX0RVVF9JTkRFWCArIDQsICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIE1FVEhPRF9CVUZGRVJFRCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIEZJTEVfQU5ZX0FDQ0VTUykKKworLy8vLy8vLy8vLy8gMTAvMzEvMDInIEFkZGVkIC8vLy8vLy8vLy8vLy8vLy8vLy8vLworCisvLyBJT0NUTF9XQl84MDJfMTFfRFVUX1NUQVJUX0lCU1NfUkVRVUVTVAorLy8gUXVlcnk6IE5vbmUuCisvLyBTZXQgIDogU3RhcnQgYSBuZXcgSUJTUworLy8KKyNkZWZpbmUgSU9DVExfV0JfODAyXzExX0RVVF9TVEFSVF9JQlNTX1JFUVVFU1QgIENUTF9DT0RFKCAgXAorICAgICAgICAgICAgRklMRV9ERVZJQ0VfVU5LTk9XTiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgV0JfSU9DVExfRFVUX0lOREVYICsgNSwgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgTUVUSE9EX0JVRkZFUkVELCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgRklMRV9BTllfQUNDRVNTKQorCisvLyBJT0NUTF9XQl84MDJfMTFfRFVUX0pPSU5fUkVRVUVTVAorLy8gUXVlcnk6IE5vbmUuCisvLyBTZXQgIDogU3luY2hyb25pemUgd2l0aCB0aGUgc2VsZWN0ZWQgQlNTCisvLworI2RlZmluZSBJT0NUTF9XQl84MDJfMTFfRFVUX0pPSU5fUkVRVUVTVCAgICAgICAgQ1RMX0NPREUoICBcCisgICAgICAgICAgICBGSUxFX0RFVklDRV9VTktOT1dOLCAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBXQl9JT0NUTF9EVVRfSU5ERVggKyA2LCAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBNRVRIT0RfQlVGRkVSRUQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBGSUxFX0FOWV9BQ0NFU1MpCisKKy8vIElPQ1RMX1dCXzgwMl8xMV9EVVRfQVVUSEVOX1JFUVVFU1QKKy8vIFF1ZXJ5OiBOb25lLgorLy8gU2V0ICA6IEF1dGhlbnRpY2F0ZSB3aXRoIHRoZSBCU1MKKy8vCisjZGVmaW5lIElPQ1RMX1dCXzgwMl8xMV9EVVRfQVVUSEVOX1JFUVVFU1QgICAgICBDVExfQ09ERSggIFwKKyAgICAgICAgICAgIEZJTEVfREVWSUNFX1VOS05PV04sICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIFdCX0lPQ1RMX0RVVF9JTkRFWCArIDcsICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIE1FVEhPRF9CVUZGRVJFRCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIEZJTEVfQU5ZX0FDQ0VTUykKKworLy8gSU9DVExfV0JfODAyXzExX0RVVF9ERUFVVEhFTl9SRVFVRVNUCisvLyBRdWVyeTogTm9uZS4KKy8vIFNldCAgOiBEZUF1dGhlbnRpY2F0ZSB3aXRoZSB0aGUgQlNTCisvLworI2RlZmluZSBJT0NUTF9XQl84MDJfMTFfRFVUX0RFQVVUSEVOX1JFUVVFU1QgICAgQ1RMX0NPREUoICBcCisgICAgICAgICAgICBGSUxFX0RFVklDRV9VTktOT1dOLCAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBXQl9JT0NUTF9EVVRfSU5ERVggKyA4LCAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBNRVRIT0RfQlVGRkVSRUQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBGSUxFX0FOWV9BQ0NFU1MpCisKKy8vIElPQ1RMX1dCXzgwMl8xMV9EVVRfQVNTT0NfUkVRVUVTVAorLy8gUXVlcnk6IE5vbmUuCisvLyBTZXQgIDogQXNzb2NpYXRlIHdpdGhlIHRoZSBCU1MKKy8vCisjZGVmaW5lIElPQ1RMX1dCXzgwMl8xMV9EVVRfQVNTT0NfUkVRVUVTVCAgICAgICBDVExfQ09ERSggIFwKKyAgICAgICAgICAgIEZJTEVfREVWSUNFX1VOS05PV04sICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIFdCX0lPQ1RMX0RVVF9JTkRFWCArIDksICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIE1FVEhPRF9CVUZGRVJFRCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIEZJTEVfQU5ZX0FDQ0VTUykKKworLy8gSU9DVExfV0JfODAyXzExX0RVVF9SRUFTU09DX1JFUVVFU1QKKy8vIFF1ZXJ5OiBOb25lLgorLy8gU2V0ICA6IFJlQXNzb2NpYXRlIHdpdGhlIHRoZSBCU1MKKy8vCisjZGVmaW5lIElPQ1RMX1dCXzgwMl8xMV9EVVRfUkVBU1NPQ19SRVFVRVNUICAgICBDVExfQ09ERSggIFwKKyAgICAgICAgICAgIEZJTEVfREVWSUNFX1VOS05PV04sICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIFdCX0lPQ1RMX0RVVF9JTkRFWCArIDEwLCAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIE1FVEhPRF9CVUZGRVJFRCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIEZJTEVfQU5ZX0FDQ0VTUykKKworCisvLyBJT0NUTF9XQl84MDJfMTFfRFVUX0RJU0FTU09DX1JFUVVFU1QKKy8vIFF1ZXJ5OiBOb25lLgorLy8gU2V0ICA6IERpc0Fzc29jaWF0ZSB3aXRoZSB0aGUgQlNTCisvLworI2RlZmluZSBJT0NUTF9XQl84MDJfMTFfRFVUX0RJU0FTU09DX1JFUVVFU1QgICAgQ1RMX0NPREUoICBcCisgICAgICAgICAgICBGSUxFX0RFVklDRV9VTktOT1dOLCAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBXQl9JT0NUTF9EVVRfSU5ERVggKyAxMSwgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBNRVRIT0RfQlVGRkVSRUQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBGSUxFX0FOWV9BQ0NFU1MpCisKKy8vIElPQ1RMX1dCXzgwMl8xMV9EVVRfRlJBR19USFJFU0hPTEQKKy8vIFF1ZXJ5OiBSZXR1cm4gdGhlIGRvdDExRnJhZ21lbnRUaHJlc2hvbGQKKy8vIFNldCAgOiBTZXQgdGhlIGRvdDExRnJhZ21lbnRUaHJlc2hvbGQKKy8vCisjZGVmaW5lIElPQ1RMX1dCXzgwMl8xMV9EVVRfRlJBR19USFJFU0hPTEQgICAgICBDVExfQ09ERSggIFwKKyAgICAgICAgICAgIEZJTEVfREVWSUNFX1VOS05PV04sICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIFdCX0lPQ1RMX0RVVF9JTkRFWCArIDEyLCAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIE1FVEhPRF9CVUZGRVJFRCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIEZJTEVfQU5ZX0FDQ0VTUykKKworLy8gSU9DVExfV0JfODAyXzExX0RVVF9SVFNfVEhSRVNIT0xECisvLyBRdWVyeTogUmV0dXJuIHRoZSBkb3QxMVJUU1RocmVzaG9sZAorLy8gU2V0ICA6IFNldCB0aGUgZG90MTFSVFNUaHJlc29sZAorLy8KKyNkZWZpbmUgSU9DVExfV0JfODAyXzExX0RVVF9SVFNfVEhSRVNIT0xEICAgICAgIENUTF9DT0RFKCAgXAorICAgICAgICAgICAgRklMRV9ERVZJQ0VfVU5LTk9XTiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgV0JfSU9DVExfRFVUX0lOREVYICsgMTMsICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgTUVUSE9EX0JVRkZFUkVELCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgRklMRV9BTllfQUNDRVNTKQorCisvLyBJT0NUTF9XQl84MDJfMTFfRFVUX1dFUF9LRVlNT0RFCisvLyBRdWVyeTogR2V0IHRoZSBXRVAga2V5IG1vZGUuCisvLyBTZXQgIDogU2V0IHRoZSBXRVAga2V5IG1vZGU6IGRpc2FibGUvNjQgYml0cy8xMjggYml0cworLy8KKyNkZWZpbmUgSU9DVExfV0JfODAyXzExX0RVVF9XRVBfS0VZTU9ERSAgICAgICAgIENUTF9DT0RFKCAgXAorICAgICAgICAgICAgRklMRV9ERVZJQ0VfVU5LTk9XTiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgV0JfSU9DVExfRFVUX0lOREVYICsgMTQsICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgTUVUSE9EX0JVRkZFUkVELCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgRklMRV9BTllfQUNDRVNTKQorCisvLyBJT0NUTF9XQl84MDJfMTFfRFVUX1dFUF9LRVlWQUxVRQorLy8gUXVlcnk6IE5vbmUuCisvLyBTZXQgIDogZmlsbCBpbiB0aGUgV0VQIGtleSB2YWx1ZQorLy8KKyNkZWZpbmUgSU9DVExfV0JfODAyXzExX0RVVF9XRVBfS0VZVkFMVUUgICAgICAgIENUTF9DT0RFKCAgXAorICAgICAgICAgICAgRklMRV9ERVZJQ0VfVU5LTk9XTiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgV0JfSU9DVExfRFVUX0lOREVYICsgMTUsICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgTUVUSE9EX0JVRkZFUkVELCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgRklMRV9BTllfQUNDRVNTKQorCisvLyBJT0NUTF9XQl84MDJfMTFfRFVUX1JFU0VUCisvLyBRdWVyeTogTm9uZS4KKy8vIFNldCAgOiBSZXNldCBTL1cgYW5kIEgvVworLy8KKyNkZWZpbmUgSU9DVExfV0JfODAyXzExX0RVVF9SRVNFVCAgICAgICAgICBDVExfQ09ERSggICAgICAgXAorICAgICAgICAgICAgRklMRV9ERVZJQ0VfVU5LTk9XTiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgV0JfSU9DVExfRFVUX0lOREVYICsgMTYsICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgTUVUSE9EX0JVRkZFUkVELCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgRklMRV9BTllfQUNDRVNTKQorCisvLyBJT0NUTF9XQl84MDJfMTFfRFVUX1BPV0VSX1NBVkUKKy8vIFF1ZXJ5OiBOb25lLgorLy8gU2V0ICA6IFNldCBQb3dlciBTYXZlIE1vZGUKKy8vCisjZGVmaW5lIElPQ1RMX1dCXzgwMl8xMV9EVVRfUE9XRVJfU0FWRSAgICBDVExfQ09ERSggICAgICAgIFwKKyAgICAgICAgICAgIEZJTEVfREVWSUNFX1VOS05PV04sICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIFdCX0lPQ1RMX0RVVF9JTkRFWCArIDE3LCAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIE1FVEhPRF9CVUZGRVJFRCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIEZJTEVfQU5ZX0FDQ0VTUykKKworLy8gSU9DVExfV0JfODAyXzExX0RVVF9CU1NJRF9MSVNUX1NDQU4KKy8vIFF1ZXJ5OiBOb25lLgorLy8gU2V0ICA6CisvLworI2RlZmluZSBJT0NUTF9XQl84MDJfMTFfRFVUX0JTU0lEX0xJU1RfU0NBTiBDVExfQ09ERSggICAgICBcCisgICAgICAgICAgICBGSUxFX0RFVklDRV9VTktOT1dOLCAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBXQl9JT0NUTF9EVVRfSU5ERVggKyAxOCwgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBNRVRIT0RfQlVGRkVSRUQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBGSUxFX0FOWV9BQ0NFU1MpCisKKy8vIElPQ1RMX1dCXzgwMl8xMV9EVVRfQlNTSURfTElTVAorLy8gUXVlcnk6IFJldHVybiB0aGUgQlNTIGluZm8gb2YgQlNTcyBpbiB0aGUgbGFzdCBzY2FubmluZyBwcm9jZXNzCisvLyBTZXQgIDogTm9uZS4KKy8vCisjZGVmaW5lIElPQ1RMX1dCXzgwMl8xMV9EVVRfQlNTSURfTElTVCAgICBDVExfQ09ERSggICAgICAgIFwKKyAgICAgICAgICAgIEZJTEVfREVWSUNFX1VOS05PV04sICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIFdCX0lPQ1RMX0RVVF9JTkRFWCArIDE5LCAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIE1FVEhPRF9CVUZGRVJFRCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIEZJTEVfQU5ZX0FDQ0VTUykKKworLy8gSU9DVExfV0JfODAyXzExX0RVVF9TVEFUSVNUSUNTCisvLyBRdWVyeTogUmV0dXJuIHRoZSBzdGF0aXN0aWNzIG9mIFR4L1J4LgorLy8gU2V0ICA6IE5vbmUuCisvLworI2RlZmluZSBJT0NUTF9XQl84MDJfMTFfRFVUX1NUQVRJU1RJQ1MgICAgQ1RMX0NPREUoICAgICAgICBcCisgICAgICAgICAgICBGSUxFX0RFVklDRV9VTktOT1dOLCAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBXQl9JT0NUTF9EVVRfSU5ERVggKyAyMCwgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBNRVRIT0RfQlVGRkVSRUQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBGSUxFX0FOWV9BQ0NFU1MpCisKKy8vIElPQ1RMX1dCXzgwMl8xMV9EVVRfQUNDRVBUX0JFQUNPTgorLy8gUXVlcnk6IFJldHVybiB0aGUgY3VycmVudCBtb2RlIHRvIGFjY2VwdCBiZWFjb24gb3Igbm90LgorLy8gU2V0ICA6IEVuYWJsZSBvciBkaXNhYmxlIGFsbG93aW5nIHRoZSBIVy1NQUMgdG8gcGFzcyB0aGUgYmVhY29uIHRvIHRoZSBTVy1NQUMKKy8vIEFyZ3VtZW50czogdW5zaWduZWQgY2hhcgorLy8KKyNkZWZpbmUgSU9DVExfV0JfODAyXzExX0RVVF9BQ0NFUFRfQkVBQ09OICBDVExfQ09ERSggICAgICAgXAorICAgICAgICAgICAgRklMRV9ERVZJQ0VfVU5LTk9XTiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgV0JfSU9DVExfRFVUX0lOREVYICsgMjEsICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgTUVUSE9EX0JVRkZFUkVELCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgRklMRV9BTllfQUNDRVNTKQorCisvLyBJT0NUTF9XQl84MDJfMTFfRFVUX1JPQU1JTkcKKy8vIFF1ZXJ5OiBSZXR1cm4gdGhlIHJvYW1pbmcgZnVuY3Rpb24gc3RhdHVzCisvLyBTZXQgIDogRW5hYmxlL0Rpc2FibGUgdGhlIHJvYW1pbmcgZnVuY3Rpb24uCisjZGVmaW5lIElPQ1RMX1dCXzgwMl8xMV9EVVRfUk9BTUlORyAgICAgICAgQ1RMX0NPREUoICAgICAgIFwKKyAgICAgICAgICAgIEZJTEVfREVWSUNFX1VOS05PV04sICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIFdCX0lPQ1RMX0RVVF9JTkRFWCArIDIyLCAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIE1FVEhPRF9CVUZGRVJFRCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIEZJTEVfQU5ZX0FDQ0VTUykKKworLy8gSU9DVExfV0JfODAyXzExX0RVVF9EVE8KKy8vIFF1ZXJ5OiBSZXR1cm4gdGhlIERUTyhEYXRhIFRocm91Z2hwdXQgT3B0aW1pemF0aW9uKQorLy8gICAgICAgIGZ1bmN0aW9uIHN0YXR1cyAoVFJVRSBvciBGQUxTRSkKKy8vIFNldCAgOiBFbmFibGUvRGlzYWJsZSB0aGUgRFRPIGZ1bmN0aW9uLgorLy8KKyNkZWZpbmUgSU9DVExfV0JfODAyXzExX0RVVF9EVE8gICAgICAgICAgICBDVExfQ09ERSggICAgICAgXAorICAgICAgICAgICAgRklMRV9ERVZJQ0VfVU5LTk9XTiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgV0JfSU9DVExfRFVUX0lOREVYICsgMjMsICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgTUVUSE9EX0JVRkZFUkVELCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgRklMRV9BTllfQUNDRVNTKQorCisvLyBJT0NUTF9XQl84MDJfMTFfRFVUX0FOVEVOTkFfRElWRVJTSVRZCisvLyBRdWVyeTogUmV0dXJuIHRoZSBhbnRlbm5hIGRpdmVyc2l0eSBzdGF0dXMuIChUUlVFL09OIG9yIEZBTFNFL09GRikKKy8vIFNldCAgOiBFbmFibGUvRGlzYWJsZSB0aGUgYW50ZW5uYSBkaXZlcnNpdHkuCisvLworI2RlZmluZSBJT0NUTF9XQl84MDJfMTFfRFVUX0FOVEVOTkFfRElWRVJTSVRZIENUTF9DT0RFKCAgICBcCisgICAgICAgICAgICBGSUxFX0RFVklDRV9VTktOT1dOLCAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBXQl9JT0NUTF9EVVRfSU5ERVggKyAyNCwgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBNRVRIT0RfQlVGRkVSRUQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBGSUxFX0FOWV9BQ0NFU1MpCisKKy8vLS0tLS0tLS0tLS0tLS0gbmV3IGFkZGVkIGZvciBhK2IrZyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIElPQ1RMX1dCXzgwMl8xMV9EVVRfTUFDX09QRVJBVElPTl9NT0RFCisvLyBRdWVyeTogUmV0dXJuIHRoZSBNQUMgb3BlcmF0aW9uIG1vZGUuIChNT0RFXzgwMl8xMV9CRywgTU9ERV84MDJfMTFfQSwKKy8vCQkJIE1PREVfODAyXzExX0FCRywgTU9ERV84MDJfMTFfQkdfSUJTUykKKy8vIFNldCAgOiBTZXQgdGhlIE1BQyBvcGVyYXRpb24gbW9kZS4KKy8vCisjZGVmaW5lIElPQ1RMX1dCXzgwMl8xMV9EVVRfTUFDX09QRVJBVElPTl9NT0RFIENUTF9DT0RFKCAgICBcCisgICAgICAgICAgICBGSUxFX0RFVklDRV9VTktOT1dOLCAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBXQl9JT0NUTF9EVVRfSU5ERVggKyAyNSwgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBNRVRIT0RfQlVGRkVSRUQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBGSUxFX0FOWV9BQ0NFU1MpCisKKy8vIElPQ1RMX1dCXzgwMl8xMV9EVVRfVFhfUkFURV9SRURFRklORUQKKy8vIFF1ZXJ5OiBSZXR1cm4gdGhlIGN1cnJlbnQgdHggcmF0ZSB3aGljaCBmb2xsb3dzIHRoZSBkZWZpbml0aW9uIGluIHNwZWMuIChmb3IKKy8vCQkJZXhhbXBsZSwgNS41TSA9PiAweDBiKQorLy8gU2V0ICA6IE5vbmUKKy8vCisjZGVmaW5lIElPQ1RMX1dCXzgwMl8xMV9EVVRfVFhfUkFURV9SRURFRklORUQgQ1RMX0NPREUoICAgIFwKKyAgICAgICAgICAgIEZJTEVfREVWSUNFX1VOS05PV04sICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIFdCX0lPQ1RMX0RVVF9JTkRFWCArIDI2LCAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIE1FVEhPRF9CVUZGRVJFRCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIEZJTEVfQU5ZX0FDQ0VTUykKKworLy8gSU9DVExfV0JfODAyXzExX0RVVF9QUkVBTUJMRV9NT0RFCisvLyBRdWVyeTogUmV0dXJuIHRoZSBwcmVhbWJsZSBtb2RlLiAoYXV0byBvciBsb25nKQorLy8gU2V0ICA6IFNldCB0aGUgcHJlYW1ibGUgbW9kZS4KKy8vCisjZGVmaW5lIElPQ1RMX1dCXzgwMl8xMV9EVVRfUFJFQU1CTEVfTU9ERSBDVExfQ09ERSggICAgXAorICAgICAgICAgICAgRklMRV9ERVZJQ0VfVU5LTk9XTiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgV0JfSU9DVExfRFVUX0lOREVYICsgMjcsICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgTUVUSE9EX0JVRkZFUkVELCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgRklMRV9BTllfQUNDRVNTKQorCisvLyBJT0NUTF9XQl84MDJfMTFfRFVUX1NMT1RfVElNRV9NT0RFCisvLyBRdWVyeTogUmV0dXJuIHRoZSBzbG90IHRpbWUgbW9kZS4gKGF1dG8gb3IgbG9uZykKKy8vIFNldCAgOiBTZXQgdGhlIHNsb3QgdGltZSBtb2RlLgorLy8KKyNkZWZpbmUgSU9DVExfV0JfODAyXzExX0RVVF9TTE9UX1RJTUVfTU9ERSBDVExfQ09ERSggICAgXAorICAgICAgICAgICAgRklMRV9ERVZJQ0VfVU5LTk9XTiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgV0JfSU9DVExfRFVUX0lOREVYICsgMjgsICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgTUVUSE9EX0JVRkZFUkVELCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgRklMRV9BTllfQUNDRVNTKQorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLy8gSU9DVExfV0JfODAyXzExX0RVVF9BRFZBTkNFX1NUQVRVUworLy8gUXVlcnk6CisvLyBTZXQgIDogTk9ORQorLy8KKyNkZWZpbmUgSU9DVExfV0JfODAyXzExX0RVVF9BRFZBTkNFX1NUQVRVUyBDVExfQ09ERSggICAgXAorICAgICAgICAgICAgRklMRV9ERVZJQ0VfVU5LTk9XTiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgV0JfSU9DVExfRFVUX0lOREVYICsgMjksICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgTUVUSE9EX0JVRkZFUkVELCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgRklMRV9BTllfQUNDRVNTKQorCisvLyBJT0NUTF9XQl84MDJfMTFfRFVUX1RYX1JBVEVfTU9ERQorLy8gUXVlcnk6IFJldHVybiB0aGUgdHggcmF0ZSBtb2RlLiAoUkFURV9BVVRPLCBSQVRFXzFNLCAuLiwgUkFURV81NE0sIFJBVEVfTUFYKQorLy8gU2V0ICA6IFNldCB0aGUgdHggcmF0ZSBtb2RlLiAgKFJBVEVfQVVUTywgUkFURV8xTSwgLi4sIFJBVEVfNTRNLCBSQVRFX01BWCkKKy8vCisjZGVmaW5lIElPQ1RMX1dCXzgwMl8xMV9EVVRfVFhfUkFURV9NT0RFIENUTF9DT0RFKCAgICBcCisgICAgICAgICAgICBGSUxFX0RFVklDRV9VTktOT1dOLCAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBXQl9JT0NUTF9EVVRfSU5ERVggKyAzMCwgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBNRVRIT0RfQlVGRkVSRUQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBGSUxFX0FOWV9BQ0NFU1MpCisKKy8vIElPQ1RMX1dCXzgwMl8xMV9EVVRfRFRPX1BBUkEKKy8vIFF1ZXJ5OiBSZXR1cm4gdGhlIERUTyBwYXJhbWV0ZXJzCisvLyBTZXQgIDogU2V0IHRoZSBEVE8gcGFyYW1ldGVycworLy8KKyNkZWZpbmUgSU9DVExfV0JfODAyXzExX0RVVF9EVE9fUEFSQSBDVExfQ09ERSggICAgXAorICAgICAgICAgICAgRklMRV9ERVZJQ0VfVU5LTk9XTiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgV0JfSU9DVExfRFVUX0lOREVYICsgMzEsICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgTUVUSE9EX0JVRkZFUkVELCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgRklMRV9BTllfQUNDRVNTKQorCisvLyBJT0NUTF9XQl84MDJfMTFfRFVUX0VWRU5UX0xPRworLy8gUXVlcnk6IFJldHVybiBldmVudCBsb2cKKy8vIFNldCAgOiBSZXNldCBldmVudCBsb2cKKy8vCisjZGVmaW5lIElPQ1RMX1dCXzgwMl8xMV9EVVRfRVZFTlRfTE9HIENUTF9DT0RFKCAgICBcCisgICAgICAgICAgICBGSUxFX0RFVklDRV9VTktOT1dOLCAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBXQl9JT0NUTF9EVVRfSU5ERVggKyAzMiwgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBNRVRIT0RfQlVGRkVSRUQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBGSUxFX0FOWV9BQ0NFU1MpCisKKy8vIElPQ1RMX1dCXzgwMl8xMV9EVVRfQ1dNSU4KKy8vIFF1ZXJ5OiBOT05FKEl0IHdpbGwgYmUgb2J0YWluZWQgYnkgSU9DVExfV0JfODAyXzExX0RVVF9BRFZBTkNFX1NUQVRVUykKKy8vIFNldCAgOiBTZXQgQ1dNaW4gdmFsdWUKKy8vCisjZGVmaW5lIElPQ1RMX1dCXzgwMl8xMV9EVVRfQ1dNSU4gQ1RMX0NPREUoICAgIFwKKyAgICAgICAgICAgIEZJTEVfREVWSUNFX1VOS05PV04sICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIFdCX0lPQ1RMX0RVVF9JTkRFWCArIDMzLCAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIE1FVEhPRF9CVUZGRVJFRCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIEZJTEVfQU5ZX0FDQ0VTUykKKworLy8gSU9DVExfV0JfODAyXzExX0RVVF9DV01BWAorLy8gUXVlcnk6IE5PTkUoSXQgd2lsbCBiZSBvYnRhaW5lZCBieSBJT0NUTF9XQl84MDJfMTFfRFVUX0FEVkFOQ0VfU1RBVFVTKQorLy8gU2V0ICA6IFNldCBDV01heCB2YWx1ZQorLy8KKyNkZWZpbmUgSU9DVExfV0JfODAyXzExX0RVVF9DV01BWCBDVExfQ09ERSggICAgXAorICAgICAgICAgICAgRklMRV9ERVZJQ0VfVU5LTk9XTiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgV0JfSU9DVExfRFVUX0lOREVYICsgMzQsICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgTUVUSE9EX0JVRkZFUkVELCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgRklMRV9BTllfQUNDRVNTKQorCisKKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8gSU9DVExzIGZvciBUZXN0aW5nCisKKy8vIElPQ1RMX1dCXzgwMl8xMV9UU19TRVRfQ1hYX1JFRworLy8gUXVlcnk6IE5vbmUKKy8vIFNldCAgOiBXcml0ZSB0aGUgdmFsdWUgdG8gb25lIG9mIEN4eCByZWdpc3Rlci4KKy8vCisjZGVmaW5lIElPQ1RMX1dCXzgwMl8xMV9UU19TRVRfQ1hYX1JFRyAgQ1RMX0NPREUoICAgICAgICAgIFwKKyAgICAgICAgICAgIEZJTEVfREVWSUNFX1VOS05PV04sICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIFdCX0lPQ1RMX1RTX0lOREVYICsgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIE1FVEhPRF9CVUZGRVJFRCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIEZJTEVfQU5ZX0FDQ0VTUykKKworLy8gSU9DVExfV0JfODAyXzExX1RTX0dFVF9DWFhfUkVHCisvLyBRdWVyeTogUmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgQ3h4IHJlZ2lzdGVyLgorLy8gU2V0ICA6IFdyaXRlIHRoZSByZWcgbm8uICgweDAwLCAweDA0LCAweDA4IGV0YykKKy8vCisjZGVmaW5lIElPQ1RMX1dCXzgwMl8xMV9UU19HRVRfQ1hYX1JFRyAgQ1RMX0NPREUoICAgICAgICAgIFwKKyAgICAgICAgICAgIEZJTEVfREVWSUNFX1VOS05PV04sICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIFdCX0lPQ1RMX1RTX0lOREVYICsgMSwgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIE1FVEhPRF9CVUZGRVJFRCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIEZJTEVfQU5ZX0FDQ0VTUykKKworLy8gSU9DVExfV0JfODAyXzExX1RTX1NFVF9EWFhfUkVHCisvLyBRdWVyeTogTm9uZQorLy8gU2V0ICA6IFdyaXRlIHRoZSB2YWx1ZSB0byBvbmUgb2YgRHh4IHJlZ2lzdGVyLgorLy8KKyNkZWZpbmUgSU9DVExfV0JfODAyXzExX1RTX1NFVF9EWFhfUkVHICBDVExfQ09ERSggICAgICAgICAgXAorICAgICAgICAgICAgRklMRV9ERVZJQ0VfVU5LTk9XTiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgV0JfSU9DVExfVFNfSU5ERVggKyAyLCAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgTUVUSE9EX0JVRkZFUkVELCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgRklMRV9BTllfQUNDRVNTKQorCisvLyBJT0NUTF9XQl84MDJfMTFfVFNfR0VUX0RYWF9SRUcKKy8vIFF1ZXJ5OiBSZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSBEeHggcmVnaXN0ZXIuCisvLyBTZXQgIDogV3JpdGUgdGhlIHJlZyBuby4gKDB4MDAsIDB4MDQsIDB4MDggZXRjKQorLy8KKyNkZWZpbmUgSU9DVExfV0JfODAyXzExX1RTX0dFVF9EWFhfUkVHICBDVExfQ09ERSggICAgICAgICAgXAorICAgICAgICAgICAgRklMRV9ERVZJQ0VfVU5LTk9XTiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgV0JfSU9DVExfVFNfSU5ERVggKyAzLCAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgTUVUSE9EX0JVRkZFUkVELCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgRklMRV9BTllfQUNDRVNTKQorCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8gW1RTXQorCisjZGVmaW5lIElPQ1RMX1dCXzgwMl8xMV9UU19UWF9SQVRFICAgICAgICAgICAgICBDVExfQ09ERSggICBcCisgICAgICAgICAgICBGSUxFX0RFVklDRV9VTktOT1dOLCAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBXQl9JT0NUTF9UU19JTkRFWCArIDQsICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBNRVRIT0RfQlVGRkVSRUQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBGSUxFX0FOWV9BQ0NFU1MpCisKKyNkZWZpbmUgSU9DVExfV0JfODAyXzExX1RTX0NVUlJFTlRfQ0hBTk5FTCAgICAgIENUTF9DT0RFKCAgIFwKKyAgICAgICAgICAgIEZJTEVfREVWSUNFX1VOS05PV04sICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIFdCX0lPQ1RMX1RTX0lOREVYICsgNSwgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIE1FVEhPRF9CVUZGRVJFRCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIEZJTEVfQU5ZX0FDQ0VTUykKKworI2RlZmluZSBJT0NUTF9XQl84MDJfMTFfVFNfRU5BQkxFX1NFUU5PICAgICAgICAgQ1RMX0NPREUoICAgXAorICAgICAgICAgICAgRklMRV9ERVZJQ0VfVU5LTk9XTiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgV0JfSU9DVExfVFNfSU5ERVggKyA2LCAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgTUVUSE9EX0JVRkZFUkVELCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgRklMRV9BTllfQUNDRVNTKQorCisjZGVmaW5lIElPQ1RMX1dCXzgwMl8xMV9UU19FTkFMQkVfQUNLRURQQUNLRVQgICBDVExfQ09ERSggICBcCisgICAgICAgICAgICBGSUxFX0RFVklDRV9VTktOT1dOLCAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBXQl9JT0NUTF9UU19JTkRFWCArIDcsICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBNRVRIT0RfQlVGRkVSRUQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBGSUxFX0FOWV9BQ0NFU1MpCisKKyNkZWZpbmUgSU9DVExfV0JfODAyXzExX1RTX0lOSElCSVRfQ1JDICAgICAgICAgIENUTF9DT0RFKCAgIFwKKyAgICAgICAgICAgIEZJTEVfREVWSUNFX1VOS05PV04sICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIFdCX0lPQ1RMX1RTX0lOREVYICsgOCwgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIE1FVEhPRF9CVUZGRVJFRCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIEZJTEVfQU5ZX0FDQ0VTUykKKworI2RlZmluZSBJT0NUTF9XQl84MDJfMTFfVFNfUkVTRVRfUkNWX0NPVU5URVIgICAgQ1RMX0NPREUoICAgXAorICAgICAgICAgICAgRklMRV9ERVZJQ0VfVU5LTk9XTiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgV0JfSU9DVExfVFNfSU5ERVggKyA5LCAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgTUVUSE9EX0JVRkZFUkVELCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgRklMRV9BTllfQUNDRVNTKQorCisjZGVmaW5lIElPQ1RMX1dCXzgwMl8xMV9UU19TRVRfVFhfVFJJR0dFUiAgICAgICBDVExfQ09ERSggICBcCisgICAgICAgICAgICBGSUxFX0RFVklDRV9VTktOT1dOLCAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBXQl9JT0NUTF9UU19JTkRFWCArIDEwLCAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBNRVRIT0RfQlVGRkVSRUQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBGSUxFX0FOWV9BQ0NFU1MpCisKKyNkZWZpbmUgSU9DVExfV0JfODAyXzExX1RTX0ZBSUxFRF9UWF9DT1VOVCAgICAgICBDVExfQ09ERSggIFwKKyAgICAgICAgICAgIEZJTEVfREVWSUNFX1VOS05PV04sICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIFdCX0lPQ1RMX1RTX0lOREVYICsgMTEsICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIE1FVEhPRF9CVUZGRVJFRCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIEZJTEVfQU5ZX0FDQ0VTUykKKworLy8gW1RTMV0KKyNkZWZpbmUgSU9DVExfV0JfODAyXzExX1RTX1RYX1BPV0VSICAgICAgICAgICAgIENUTF9DT0RFKCAgIFwKKyAgICAgICAgICAgIEZJTEVfREVWSUNFX1VOS05PV04sICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIFdCX0lPQ1RMX1RTX0lOREVYICsgMTIsICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIE1FVEhPRF9CVUZGRVJFRCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIEZJTEVfQU5ZX0FDQ0VTUykKKworI2RlZmluZSBJT0NUTF9XQl84MDJfMTFfVFNfTU9ERV9FTkFCTEUJCQkgQ1RMX0NPREUoICBcCisgICAgICAgICAgICBGSUxFX0RFVklDRV9VTktOT1dOLCAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBXQl9JT0NUTF9UU19JTkRFWCArIDEzLCAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBNRVRIT0RfQlVGRkVSRUQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBGSUxFX0FOWV9BQ0NFU1MpCisKKyNkZWZpbmUgSU9DVExfV0JfODAyXzExX1RTX01PREVfRElTQUJMRQkJCSBDVExfQ09ERSggIFwKKyAgICAgICAgICAgIEZJTEVfREVWSUNFX1VOS05PV04sICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIFdCX0lPQ1RMX1RTX0lOREVYICsgMTQsICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIE1FVEhPRF9CVUZGRVJFRCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIEZJTEVfQU5ZX0FDQ0VTUykKKworI2RlZmluZSBJT0NUTF9XQl84MDJfMTFfVFNfQU5URU5OQQkJCQkgQ1RMX0NPREUoICBcCisgICAgICAgICAgICBGSUxFX0RFVklDRV9VTktOT1dOLCAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBXQl9JT0NUTF9UU19JTkRFWCArIDE1LCAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBNRVRIT0RfQlVGRkVSRUQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBGSUxFX0FOWV9BQ0NFU1MpCisKKyNkZWZpbmUgSU9DVExfV0JfODAyXzExX1RTX0FEQVBURVJfSU5GTwkJCSBDVExfQ09ERSggIFwKKyAgICAgICAgICAgIEZJTEVfREVWSUNFX1VOS05PV04sICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIFdCX0lPQ1RMX1RTX0lOREVYICsgMTYsICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIE1FVEhPRF9CVUZGRVJFRCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIEZJTEVfQU5ZX0FDQ0VTUykKKworI2RlZmluZSBJT0NUTF9XQl84MDJfMTFfVFNfTUFDX0FERFJFU1MJCQkgQ1RMX0NPREUoICBcCisgICAgICAgICAgICBGSUxFX0RFVklDRV9VTktOT1dOLCAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBXQl9JT0NUTF9UU19JTkRFWCArIDE3LCAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBNRVRIT0RfQlVGRkVSRUQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBGSUxFX0FOWV9BQ0NFU1MpCisKKyNkZWZpbmUgSU9DVExfV0JfODAyXzExX1RTX0JTU0lECQkJCSBDVExfQ09ERSggIFwKKyAgICAgICAgICAgIEZJTEVfREVWSUNFX1VOS05PV04sICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIFdCX0lPQ1RMX1RTX0lOREVYICsgMTgsICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIE1FVEhPRF9CVUZGRVJFRCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIEZJTEVfQU5ZX0FDQ0VTUykKKworI2RlZmluZSBJT0NUTF9XQl84MDJfMTFfVFNfUkZfUEFSQU1FVEVSCQkJIENUTF9DT0RFKCAgXAorICAgICAgICAgICAgRklMRV9ERVZJQ0VfVU5LTk9XTiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgV0JfSU9DVExfVFNfSU5ERVggKyAxOSwgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgTUVUSE9EX0JVRkZFUkVELCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgRklMRV9BTllfQUNDRVNTKQorCisjZGVmaW5lIElPQ1RMX1dCXzgwMl8xMV9UU19GSUxURVIJCQkJIENUTF9DT0RFKCAgXAorICAgICAgICAgICAgRklMRV9ERVZJQ0VfVU5LTk9XTiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgV0JfSU9DVExfVFNfSU5ERVggKyAyMCwgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgTUVUSE9EX0JVRkZFUkVELCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgRklMRV9BTllfQUNDRVNTKQorCisjZGVmaW5lIElPQ1RMX1dCXzgwMl8xMV9UU19DQUxJQlJBVElPTgkJCSBDVExfQ09ERSggIFwKKyAgICAgICAgICAgIEZJTEVfREVWSUNFX1VOS05PV04sICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIFdCX0lPQ1RMX1RTX0lOREVYICsgMjEsICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIE1FVEhPRF9CVUZGRVJFRCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIEZJTEVfQU5ZX0FDQ0VTUykKKworI2RlZmluZSBJT0NUTF9XQl84MDJfMTFfVFNfQlNTX01PREUJCQkJIENUTF9DT0RFKCAgXAorICAgICAgICAgICAgRklMRV9ERVZJQ0VfVU5LTk9XTiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgV0JfSU9DVExfVFNfSU5ERVggKyAyMiwgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgTUVUSE9EX0JVRkZFUkVELCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgRklMRV9BTllfQUNDRVNTKQorCisjZGVmaW5lIElPQ1RMX1dCXzgwMl8xMV9UU19TRVRfU1NJRAkJCQkgQ1RMX0NPREUoICBcCisgICAgICAgICAgICBGSUxFX0RFVklDRV9VTktOT1dOLCAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBXQl9JT0NUTF9UU19JTkRFWCArIDIzLCAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBNRVRIT0RfQlVGRkVSRUQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBGSUxFX0FOWV9BQ0NFU1MpCisKKyNkZWZpbmUgSU9DVExfV0JfODAyXzExX1RTX0lCU1NfQ0hBTk5FTAkJCSBDVExfQ09ERSggIFwKKyAgICAgICAgICAgIEZJTEVfREVWSUNFX1VOS05PV04sICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIFdCX0lPQ1RMX1RTX0lOREVYICsgMjQsICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIE1FVEhPRF9CVUZGRVJFRCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIEZJTEVfQU5ZX0FDQ0VTUykKKworLy8gc2V0L3F1ZXJ5IHRoZSBzbG90IHRpbWUgdmFsdWUoc2hvcnQgb3IgbG9uZyBzbG90IHRpbWUpCisjZGVmaW5lIElPQ1RMX1dCXzgwMl8xMV9UU19TTE9UX1RJTUUJCQkgQ1RMX0NPREUoICBcCisgICAgICAgICAgICBGSUxFX0RFVklDRV9VTktOT1dOLCAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBXQl9JT0NUTF9UU19JTkRFWCArIDI1LCAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBNRVRIT0RfQlVGRkVSRUQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBGSUxFX0FOWV9BQ0NFU1MpCisKKyNkZWZpbmUgSU9DVExfV0JfODAyXzExX1RTX1NMT1RfVElNRQkJCSBDVExfQ09ERSggIFwKKyAgICAgICAgICAgIEZJTEVfREVWSUNFX1VOS05PV04sICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIFdCX0lPQ1RMX1RTX0lOREVYICsgMjUsICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIE1FVEhPRF9CVUZGRVJFRCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIEZJTEVfQU5ZX0FDQ0VTUykKKworI2RlZmluZSBJT0NUTF9XQl84MDJfMTFfVFNfUlhfU1RBVElTVElDUwkJIENUTF9DT0RFKCAgXAorICAgICAgICAgICAgRklMRV9ERVZJQ0VfVU5LTk9XTiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgV0JfSU9DVExfVFNfSU5ERVggKyAyNiwgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgTUVUSE9EX0JVRkZFUkVELCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgRklMRV9BTllfQUNDRVNTKQorCisjZW5kaWYgIC8vICNpZm5kZWYgX0lPQ1RMU19ICisKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvbGludXgvY29tbW9uLmggYi9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9saW51eC9jb21tb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YjAwYmFkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvbGludXgvY29tbW9uLmgKQEAgLTAsMCArMSwxNDMgQEAKKy8vCisvLyBjb21tb24uaAorLy8KKy8vIFRoaXMgZmlsZSBjb250YWlucyB0aGUgT1MgZGVwZW5kYW50IGRlZmluaXRpb24gYW5kIGZ1bmN0aW9uLgorLy8gRXZlcnkgT1MgaGFzIHRoaXMgZmlsZSBpbmRpdmlkdWFsLgorLy8KKworI2RlZmluZSBEZWJ1Z1VzYmRTdGF0dXNJbmZvcm1hdGlvbiggX0EgKQorCisjaWZuZGVmIENPTU1PTl9ERUYKKyNkZWZpbmUgQ09NTU9OX0RFRgorCisjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPiAvL25lZWQgZm9yIGtlcm5lbCBhbGVydAorI2luY2x1ZGUgPGxpbnV4L2F1dG9jb25mLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9zaWduYWwuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+IC8vbWVtb3J5IGFsbG9jYXRlCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ly9uZWVkIGZvciBpbml0IGFuZCBleGl0IG1vZHVsZXMgbWFyY28KKyNpbmNsdWRlIDxsaW51eC9jdHlwZS5oPgorI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvd2lyZWxlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC9pZl9hcnAuaD4KKyNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgorI2luY2x1ZGUgPG5ldC9pd19oYW5kbGVyLmg+CisjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CisKKworLy8jZGVmaW5lIERFQlVHX0VOQUJMRUQgIDEKKworCisKKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLyBDb21tb24gdHlwZSBkZWZpbml0aW9uCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCit0eXBlZGVmIHU4KiAgICAgICAgICAgIFBVQ0hBUjsKK3R5cGVkZWYgczgqICAgICAgICAgICAgUENIQVI7Cit0eXBlZGVmIHU4KiAgICAgICAgICAgIFBCT09MRUFOOwordHlwZWRlZiB1MTYqICAgICAgICAgICBQVVNIT1JUOwordHlwZWRlZiB1MzIqICAgICAgICAgICBQVUxPTkc7Cit0eXBlZGVmIHMxNiogICBQU0hPUlQ7CisKKworLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjZGVmaW5lIElHTk9SRSAgICAgIDIKKyNkZWZpbmUJU1VDQ0VTUyAgICAgMQorI2RlZmluZQlGQUlMVVJFICAgICAwCisKKworI2lmbmRlZiB0cnVlCisjZGVmaW5lIHRydWUgICAgICAgIDEKKyNlbmRpZgorCisjaWZuZGVmIGZhbHNlCisjZGVmaW5lIGZhbHNlICAgICAgIDAKKyNlbmRpZgorCisvLyBQRDQzIDIwMDIxMTA4CisjaWZuZGVmIFRSVUUKKyNkZWZpbmUgVFJVRSAgICAgICAgMQorI2VuZGlmCisKKyNpZm5kZWYgRkFMU0UKKyNkZWZpbmUgRkFMU0UgICAgICAgMAorI2VuZGlmCisKKyNkZWZpbmUgU1RBVFVTX01FRElBX0NPTk5FQ1QgMQorI2RlZmluZSBTVEFUVVNfTUVESUFfRElTQ09OTkVDVCAwCisKKyNpZm5kZWYgQklUCisjZGVmaW5lIEJJVCh4KSAgICAgICAgICAgICAgICAgICgxIDw8ICh4KSkKKyNlbmRpZgorCit0eXBlZGVmIHN0cnVjdCB1cmIgKiBQVVJCOworCisKKworLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8gQ29tbW9uIGZ1bmN0aW9uIGRlZmluaXRpb24KKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyNpZm5kZWYgYWJzCisjZGVmaW5lIGFicyhfVCkJCQkJCQkJKChfVCkgPCAwID8gLV9UIDogX1QpCisjZW5kaWYKKyNkZWZpbmUgREVCVUdfRU5BQkxFRAorI2RlZmluZSBFVEhfTEVOR1RIX09GX0FERFJFU1MJNgorI2lmZGVmIERFQlVHX0VOQUJMRUQKKyNkZWZpbmUgV0JERUJVRyggX00gKQlwcmludGsgX00KKyNlbHNlCisjZGVmaW5lIFdCREVCVUcoIF9NICkJMAorI2VuZGlmCisKKyNkZWZpbmUgT1NfRElTQ09OTkVDVEVECTAKKyNkZWZpbmUgT1NfQ09OTkVDVEVECTEKKworCisjZGVmaW5lIE9TX0VWRU5UX0lORElDQVRFKCBfQSwgX0IsIF9GICkKKyNkZWZpbmUgT1NfUE1LSURfU1RBVFVTX0VWRU5UKCBfQSApCisKKworLyogVWZmLCBubywgbG9uZ3MgYXJlIG5vdCBhdG9taWMgb24gYWxsIGFyY2hpdGVjdHVyZXMgTGludXgKKyAqIHN1cHBvcnRzLiBUaGlzIHNob3VsZCByZWFsbHkgdXNlIGF0b21pY190ICovCisKKyNkZWZpbmUgT1NfQVRPTUlDCQkJdTMyCisjZGVmaW5lIE9TX0FUT01JQ19SRUFEKCBfQSwgX1YgKQlfVgorI2RlZmluZSBPU19BVE9NSUNfSU5DKCBfQSwgX1YgKQkJRW5jYXBBdG9taWNJbmMoIF9BLCAodm9pZCopX1YgKQorI2RlZmluZSBPU19BVE9NSUNfREVDKCBfQSwgX1YgKQkJRW5jYXBBdG9taWNEZWMoIF9BLCAodm9pZCopX1YgKQorI2RlZmluZSBPU19NRU1PUllfQ0xFQVIoIF9BLCBfUyApCW1lbXNldCggKFBVQ0hBUilfQSwwLF9TKQorI2RlZmluZSBPU19NRU1PUllfQ09NUEFSRSggX0EsIF9CLCBfUyApCShtZW1jbXAoX0EsX0IsX1MpPyAwIDogMSkgLy8gRGVmaW5pdGlvbiBpcyByZXZlcnNlIHdpdGggTmRpcyAxOiB0aGUgc2FtZSAwOiBkaWZmZXJlbnQKKworCisjZGVmaW5lIE9TX1NQSU5fTE9DSwkJCQlzcGlubG9ja190CisjZGVmaW5lIE9TX1NQSU5fTE9DS19BTExPQ0FURSggX1MgKQkJc3Bpbl9sb2NrX2luaXQoIF9TICk7CisjZGVmaW5lIE9TX1NQSU5fTE9DS19GUkVFKCBfUyApCisjZGVmaW5lIE9TX1NQSU5fTE9DS19BQ1FVSVJFRCggX1MgKQkJc3Bpbl9sb2NrX2lycSggX1MgKQorI2RlZmluZSBPU19TUElOX0xPQ0tfUkVMRUFTRUQoIF9TICkJCXNwaW5fdW5sb2NrX2lycSggX1MgKTsKKworI2RlZmluZSBPU19USU1FUglzdHJ1Y3QgdGltZXJfbGlzdAorI2RlZmluZSBPU19USU1FUl9JTklUSUFMKCBfVCwgX0YsIF9QICkJCQlcCit7CQkJCQkJCVwKKwlpbml0X3RpbWVyKCBfVCApOwkJCQlcCisJKF9UKS0+ZnVuY3Rpb24gPSAodm9pZCAqKV9GIyNfMWE7CQlcCisJKF9UKS0+ZGF0YSA9ICh1bnNpZ25lZCBsb25nKV9QOwkJCVwKK30KKworLy8gX1MgOiBNaWxsaXNlY29uZAorLy8gMjAwNjA0MjAgQXQgbGVhc3QgMSBsYXJnZSB0aGFuIGppZmZpZXMKKyNkZWZpbmUgT1NfVElNRVJfU0VUKCBfVCwgX1MgKQkJCQkJXAorewkJCQkJCQkJXAorCShfVCktPmV4cGlyZXMgPSBqaWZmaWVzICsgKChfUypIWis5OTkpLzEwMDApO1wKKwlhZGRfdGltZXIoIF9UICk7CQkJCQlcCit9CisjZGVmaW5lIE9TX1RJTUVSX0NBTkNFTCggX1QsIF9CICkJCWRlbF90aW1lcl9zeW5jKCBfVCApCisjZGVmaW5lIE9TX1RJTUVSX0dFVF9TWVNfVElNRSggX1QgKQkJKCpfVD1qaWZmaWVzKQorCisKKyNlbmRpZiAvLyBDT01NT05fREVGCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL2xpbnV4L3N5c2RlZi5oIGIvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvbGludXgvc3lzZGVmLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDQ2ZDYzZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL2xpbnV4L3N5c2RlZi5oCkBAIC0wLDAgKzEsNzMgQEAKKworCisvLworLy8gV2luYm9uZCBXTEFOIFN5c3RlbSBDb25maWd1cmF0aW9uIGRlZmluZXMKKy8vCisKKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLyBDdXJyZW50IGRpcmVjdG9yeSBpcyBMaW51eAorLy8gVGhlIGRlZmluaXRpb24gV0JfTElOVVggaXMgYSBrZXl3b3JkIGZvciB0aGlzIE9TCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorI2lmbmRlZiBTWVNfREVGX0gKKyNkZWZpbmUgU1lTX0RFRl9ICisjZGVmaW5lIFdCX0xJTlVYCisjZGVmaW5lIFdCX0xJTlVYX1dQQV9QU0sKKworCisvLyNkZWZpbmUgX0lCU1NfQkVBQ09OX1NFUV9TVElDS18KKyNkZWZpbmUgX1VTRV9GQUxMQkFDS19SQVRFXworLy8jZGVmaW5lIEFOVERJVl9ERUZBVUxUX09OCisKKyNkZWZpbmUgX1dQQTJfCS8vIDIwMDYxMTIyIEl0J3MgbmVlZGVkIGZvciBjdXJyZW50IExpbnV4IGRyaXZlcgorCisKKyNpZm5kZWYgX1dQQV9QU0tfREVCVUcKKyN1bmRlZiAgX1dQQV9QU0tfREVCVUcKKyNlbmRpZgorCisvLyBkZWJ1ZyBwcmludCBvcHRpb25zLCBtYXJrIHdoYXQgZGVidWcgeW91IGRvbid0IG5lZWQKKworI2lmZGVmIEZVTExfREVCVUcKKyNkZWZpbmUgX1BFX1NUQVRFX0RVTVBfCisjZGVmaW5lIF9QRV9UWF9EVU1QXworI2RlZmluZSBfUEVfUlhfRFVNUF8KKyNkZWZpbmUgX1BFX09JRF9EVU1QXworI2RlZmluZSBfUEVfRFRPX0RVTVBfCisjZGVmaW5lIF9QRV9SRUdfRFVNUF8KKyNkZWZpbmUgX1BFX1VTQl9JTklfRFVNUF8KKyNlbmRpZgorCisKKworI2luY2x1ZGUgImNvbW1vbi5oIgkvLyBJbmRpdmlkdWFsIGZpbGUgZGVwZW5kcyBvbiBPUworCisjaW5jbHVkZSAiLi4vd2IzNV92ZXIuaCIKKyNpbmNsdWRlICIuLi9tYWNfc3RydWN0dXJlcy5oIgorI2luY2x1ZGUgIi4uL2RzX3RraXAuaCIKKyNpbmNsdWRlICIuLi9sb2NhbHBhcmEuaCIKKyNpbmNsdWRlICIuLi9zbWVfcy5oIgorI2luY2x1ZGUgIi4uL3NjYW5fcy5oIgorI2luY2x1ZGUgIi4uL21kc19zLmgiCisjaW5jbHVkZSAiLi4vbWxtZV9zLmgiCisjaW5jbHVkZSAiLi4vYnNzZHNjcHQuaCIKKyNpbmNsdWRlICIuLi9zbWVfYXBpLmgiCisjaW5jbHVkZSAiLi4vZ2xfODAyMTEuaCIKKyNpbmNsdWRlICIuLi9tdG8uaCIKKyNpbmNsdWRlICIuLi93YmxpbnV4X3MuaCIKKyNpbmNsdWRlICIuLi93YmhhbF9zLmgiCisKKworI2luY2x1ZGUgIi4uL2FkYXB0ZXIuaCIKKworI2luY2x1ZGUgIi4uL21sbWVfbWliLmgiCisjaW5jbHVkZSAiLi4vbWRzX2YuaCIKKyNpbmNsdWRlICIuLi9ic3NfZi5oIgorI2luY2x1ZGUgIi4uL21sbWV0eHJ4X2YuaCIKKyNpbmNsdWRlICIuLi9tdG9fZi5oIgorI2luY2x1ZGUgIi4uL3diaGFsX2YuaCIKKyNpbmNsdWRlICIuLi93YmxpbnV4X2YuaCIKKy8vIEtlcm5lbCBUaW1lciByZXNvbHV0aW9uLCBORElTIGlzIDEwbXMsIDEwMDAwdXMKKyNkZWZpbmUgTUlOX1RJTUVPVVRfVkFMCSgxMCkgLy9tcworCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvbGludXgvd2IzNXJlZy5jIGIvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvbGludXgvd2IzNXJlZy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjMGI0NTQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9saW51eC93YjM1cmVnLmMKQEAgLTAsMCArMSw3NDcgQEAKKyNpbmNsdWRlICJzeXNkZWYuaCIKKworZXh0ZXJuIHZvaWQgcGh5X2NhbGlicmF0aW9uX3dpbmJvbmQoaHdfZGF0YV90ICpwaHdfZGF0YSwgdTMyIGZyZXF1ZW5jeSk7CisKKy8vIFRSVUUgIDogcmVhZCBjb21tYW5kIHByb2Nlc3Mgc3VjY2Vzc2Z1bGx5CisvLyBGQUxTRSA6IHJlZ2lzdGVyIG5vdCBzdXBwb3J0CisvLyBSZWdpc3Rlck5vIDogc3RhcnQgYmFzZQorLy8gcFJlZ2lzdGVyRGF0YSA6IGRhdGEgcG9pbnQKKy8vIE51bWJlck9mRGF0YSA6IG51bWJlciBvZiByZWdpc3RlciBkYXRhCisvLyBGbGFnIDogQVVUT19JTkNSRU1FTlQgLSBSZWdpc3Rlck5vIHdpbGwgYXV0byBpbmNyZW1lbnQgNAorLy8JCSAgTk9fSU5DUkVNRU5UIC0gRnVuY3Rpb24gd2lsbCB3cml0ZSBkYXRhIGludG8gdGhlIHNhbWUgcmVnaXN0ZXIKK3Vuc2lnbmVkIGNoYXIKK1diMzVSZWdfQnVyc3RXcml0ZShwaHdfZGF0YV90IHBId0RhdGEsIHUxNiBSZWdpc3Rlck5vLCBQVUxPTkcgcFJlZ2lzdGVyRGF0YSwgdTggTnVtYmVyT2ZEYXRhLCB1OCBGbGFnKQoreworCVBXQjM1UkVHIHBXYjM1UmVnID0gJnBId0RhdGEtPldiMzVSZWc7CisJUFVSQgkJcFVyYiA9IE5VTEw7CisJUFJFR19RVUVVRQlwUmVnUXVldWUgPSBOVUxMOworCXUxNgkJVXJiU2l6ZTsKKwlzdHJ1Y3QgICAgICB1c2JfY3RybHJlcXVlc3QgKmRyOworCXUxNgkJaSwgRGF0YVNpemUgPSBOdW1iZXJPZkRhdGEqNDsKKworCS8vIE1vZHVsZSBzaHV0ZG93bgorCWlmIChwSHdEYXRhLT5TdXJwcmlzZVJlbW92ZSkKKwkJcmV0dXJuIEZBTFNFOworCisJLy8gVHJ5aW5nIHRvIHVzZSBidXJzdCB3cml0ZSBmdW5jdGlvbiBpZiB1c2UgbmV3IGhhcmR3YXJlCisJVXJiU2l6ZSA9IHNpemVvZihSRUdfUVVFVUUpICsgRGF0YVNpemUgKyBzaXplb2Yoc3RydWN0IHVzYl9jdHJscmVxdWVzdCk7CisJT1NfTUVNT1JZX0FMTE9DKCAodm9pZCogKikmcFJlZ1F1ZXVlLCBVcmJTaXplICk7CisJcFVyYiA9IHdiX3VzYl9hbGxvY191cmIoMCk7CisJaWYoIHBVcmIgJiYgcFJlZ1F1ZXVlICkgeworCQlwUmVnUXVldWUtPkRJUkVDVCA9IDI7Ly8gYnVyc3Qgd3JpdGUgcmVnaXN0ZXIKKwkJcFJlZ1F1ZXVlLT5JTkRFWCA9IFJlZ2lzdGVyTm87CisJCXBSZWdRdWV1ZS0+cEJ1ZmZlciA9IChQVUxPTkcpKChQVUNIQVIpcFJlZ1F1ZXVlICsgc2l6ZW9mKFJFR19RVUVVRSkpOworCQltZW1jcHkoIHBSZWdRdWV1ZS0+cEJ1ZmZlciwgcFJlZ2lzdGVyRGF0YSwgRGF0YVNpemUgKTsKKwkJLy90aGUgZnVuY3Rpb24gZm9yIHJldmVyc2luZyByZWdpc3RlciBkYXRhIGZyb20gbGl0dGxlIGVuZGlhbiB0byBiaWcgZW5kaWFuCisJCWZvciggaT0wOyBpPE51bWJlck9mRGF0YSA7IGkrKyApCisJCQlwUmVnUXVldWUtPnBCdWZmZXJbaV0gPSBjcHVfdG9fbGUzMiggcFJlZ1F1ZXVlLT5wQnVmZmVyW2ldICk7CisKKwkJZHIgPSAoc3RydWN0IHVzYl9jdHJscmVxdWVzdCAqKSgoUFVDSEFSKXBSZWdRdWV1ZSArIHNpemVvZihSRUdfUVVFVUUpICsgRGF0YVNpemUpOworCQlkci0+YlJlcXVlc3RUeXBlID0gVVNCX1RZUEVfVkVORE9SIHwgVVNCX0RJUl9PVVQgfCBVU0JfUkVDSVBfREVWSUNFOworCQlkci0+YlJlcXVlc3QgPSAweDA0OyAvLyBVU0Igb3IgdmVuZG9yLWRlZmluZWQgcmVxdWVzdCBjb2RlLCBidXJzdCBtb2RlCisJCWRyLT53VmFsdWUgPSBjcHVfdG9fbGUxNiggRmxhZyApOyAvLyAwOiBSZWdpc3RlciBudW1iZXIgYXV0by1pbmNyZW1lbnQsIDE6IE5vIGF1dG8gaW5jcmVtZW50CisJCWRyLT53SW5kZXggPSBjcHVfdG9fbGUxNiggUmVnaXN0ZXJObyApOworCQlkci0+d0xlbmd0aCA9IGNwdV90b19sZTE2KCBEYXRhU2l6ZSApOworCQlwUmVnUXVldWUtPk5leHQgPSBOVUxMOworCQlwUmVnUXVldWUtPnBVc2JSZXEgPSBkcjsKKwkJcFJlZ1F1ZXVlLT5wVXJiID0gcFVyYjsKKworCQlPU19TUElOX0xPQ0tfQUNRVUlSRUQoICZwV2IzNVJlZy0+RVAwVk1fc3Bpbl9sb2NrICk7CisJCWlmIChwV2IzNVJlZy0+cFJlZ0ZpcnN0ID09IE5VTEwpCisJCQlwV2IzNVJlZy0+cFJlZ0ZpcnN0ID0gcFJlZ1F1ZXVlOworCQllbHNlCisJCQlwV2IzNVJlZy0+cFJlZ0xhc3QtPk5leHQgPSBwUmVnUXVldWU7CisJCXBXYjM1UmVnLT5wUmVnTGFzdCA9IHBSZWdRdWV1ZTsKKworCQlPU19TUElOX0xPQ0tfUkVMRUFTRUQoICZwV2IzNVJlZy0+RVAwVk1fc3Bpbl9sb2NrICk7CisKKwkJLy8gU3RhcnQgRVAwVk0KKwkJV2IzNVJlZ19FUDBWTV9zdGFydChwSHdEYXRhKTsKKworCQlyZXR1cm4gVFJVRTsKKwl9IGVsc2UgeworCQlpZiAocFVyYikKKwkJCXVzYl9mcmVlX3VyYihwVXJiKTsKKwkJaWYgKHBSZWdRdWV1ZSkKKwkJCWtmcmVlKHBSZWdRdWV1ZSk7CisJCXJldHVybiBGQUxTRTsKKwl9CisgICByZXR1cm4gRkFMU0U7Cit9CisKK3ZvaWQKK1diMzVSZWdfVXBkYXRlKHBod19kYXRhX3QgcEh3RGF0YSwgIHUxNiBSZWdpc3Rlck5vLCAgdTMyIFJlZ2lzdGVyVmFsdWUpCit7CisJUFdCMzVSRUcJcFdiMzVSZWcgPSAmcEh3RGF0YS0+V2IzNVJlZzsKKwlzd2l0Y2ggKFJlZ2lzdGVyTm8pIHsKKwljYXNlIDB4M2IwOiBwV2IzNVJlZy0+VTFCMCA9IFJlZ2lzdGVyVmFsdWU7IGJyZWFrOworCWNhc2UgMHgzYmM6IHBXYjM1UmVnLT5VMUJDX0xFRENvbmZpZ3VyZSA9IFJlZ2lzdGVyVmFsdWU7IGJyZWFrOworCWNhc2UgMHg0MDA6IHBXYjM1UmVnLT5EMDBfRG1hQ29udHJvbCA9IFJlZ2lzdGVyVmFsdWU7IGJyZWFrOworCWNhc2UgMHg4MDA6IHBXYjM1UmVnLT5NMDBfTWFjQ29udHJvbCA9IFJlZ2lzdGVyVmFsdWU7IGJyZWFrOworCWNhc2UgMHg4MDQ6IHBXYjM1UmVnLT5NMDRfTXVsdGljYXN0QWRkcmVzczEgPSBSZWdpc3RlclZhbHVlOyBicmVhazsKKwljYXNlIDB4ODA4OiBwV2IzNVJlZy0+TTA4X011bHRpY2FzdEFkZHJlc3MyID0gUmVnaXN0ZXJWYWx1ZTsgYnJlYWs7CisJY2FzZSAweDgyNDogcFdiMzVSZWctPk0yNF9NYWNDb250cm9sID0gUmVnaXN0ZXJWYWx1ZTsgYnJlYWs7CisJY2FzZSAweDgyODogcFdiMzVSZWctPk0yOF9NYWNDb250cm9sID0gUmVnaXN0ZXJWYWx1ZTsgYnJlYWs7CisJY2FzZSAweDgyYzogcFdiMzVSZWctPk0yQ19NYWNDb250cm9sID0gUmVnaXN0ZXJWYWx1ZTsgYnJlYWs7CisJY2FzZSAweDgzODogcFdiMzVSZWctPk0zOF9NYWNDb250cm9sID0gUmVnaXN0ZXJWYWx1ZTsgYnJlYWs7CisJY2FzZSAweDg0MDogcFdiMzVSZWctPk00MF9NYWNDb250cm9sID0gUmVnaXN0ZXJWYWx1ZTsgYnJlYWs7CisJY2FzZSAweDg0NDogcFdiMzVSZWctPk00NF9NYWNDb250cm9sID0gUmVnaXN0ZXJWYWx1ZTsgYnJlYWs7CisJY2FzZSAweDg0ODogcFdiMzVSZWctPk00OF9NYWNDb250cm9sID0gUmVnaXN0ZXJWYWx1ZTsgYnJlYWs7CisJY2FzZSAweDg0YzogcFdiMzVSZWctPk00Q19NYWNTdGF0dXMgPSBSZWdpc3RlclZhbHVlOyBicmVhazsKKwljYXNlIDB4ODYwOiBwV2IzNVJlZy0+TTYwX01hY0NvbnRyb2wgPSBSZWdpc3RlclZhbHVlOyBicmVhazsKKwljYXNlIDB4ODY4OiBwV2IzNVJlZy0+TTY4X01hY0NvbnRyb2wgPSBSZWdpc3RlclZhbHVlOyBicmVhazsKKwljYXNlIDB4ODcwOiBwV2IzNVJlZy0+TTcwX01hY0NvbnRyb2wgPSBSZWdpc3RlclZhbHVlOyBicmVhazsKKwljYXNlIDB4ODc0OiBwV2IzNVJlZy0+TTc0X01hY0NvbnRyb2wgPSBSZWdpc3RlclZhbHVlOyBicmVhazsKKwljYXNlIDB4ODc4OiBwV2IzNVJlZy0+TTc4X0VSUEluZm9ybWF0aW9uID0gUmVnaXN0ZXJWYWx1ZTsgYnJlYWs7CisJY2FzZSAweDg3QzogcFdiMzVSZWctPk03Q19NYWNDb250cm9sID0gUmVnaXN0ZXJWYWx1ZTsgYnJlYWs7CisJY2FzZSAweDg4MDogcFdiMzVSZWctPk04MF9NYWNDb250cm9sID0gUmVnaXN0ZXJWYWx1ZTsgYnJlYWs7CisJY2FzZSAweDg4NDogcFdiMzVSZWctPk04NF9NYWNDb250cm9sID0gUmVnaXN0ZXJWYWx1ZTsgYnJlYWs7CisJY2FzZSAweDg4ODogcFdiMzVSZWctPk04OF9NYWNDb250cm9sID0gUmVnaXN0ZXJWYWx1ZTsgYnJlYWs7CisJY2FzZSAweDg5ODogcFdiMzVSZWctPk05OF9NYWNDb250cm9sID0gUmVnaXN0ZXJWYWx1ZTsgYnJlYWs7CisJY2FzZSAweDEwMGM6IHBXYjM1UmVnLT5CQjBDID0gUmVnaXN0ZXJWYWx1ZTsgYnJlYWs7CisJY2FzZSAweDEwMmM6IHBXYjM1UmVnLT5CQjJDID0gUmVnaXN0ZXJWYWx1ZTsgYnJlYWs7CisJY2FzZSAweDEwMzA6IHBXYjM1UmVnLT5CQjMwID0gUmVnaXN0ZXJWYWx1ZTsgYnJlYWs7CisJY2FzZSAweDEwM2M6IHBXYjM1UmVnLT5CQjNDID0gUmVnaXN0ZXJWYWx1ZTsgYnJlYWs7CisJY2FzZSAweDEwNDg6IHBXYjM1UmVnLT5CQjQ4ID0gUmVnaXN0ZXJWYWx1ZTsgYnJlYWs7CisJY2FzZSAweDEwNGM6IHBXYjM1UmVnLT5CQjRDID0gUmVnaXN0ZXJWYWx1ZTsgYnJlYWs7CisJY2FzZSAweDEwNTA6IHBXYjM1UmVnLT5CQjUwID0gUmVnaXN0ZXJWYWx1ZTsgYnJlYWs7CisJY2FzZSAweDEwNTQ6IHBXYjM1UmVnLT5CQjU0ID0gUmVnaXN0ZXJWYWx1ZTsgYnJlYWs7CisJY2FzZSAweDEwNTg6IHBXYjM1UmVnLT5CQjU4ID0gUmVnaXN0ZXJWYWx1ZTsgYnJlYWs7CisJY2FzZSAweDEwNWM6IHBXYjM1UmVnLT5CQjVDID0gUmVnaXN0ZXJWYWx1ZTsgYnJlYWs7CisJY2FzZSAweDEwNjA6IHBXYjM1UmVnLT5CQjYwID0gUmVnaXN0ZXJWYWx1ZTsgYnJlYWs7CisJfQorfQorCisvLyBUUlVFICA6IHJlYWQgY29tbWFuZCBwcm9jZXNzIHN1Y2Nlc3NmdWxseQorLy8gRkFMU0UgOiByZWdpc3RlciBub3Qgc3VwcG9ydAordW5zaWduZWQgY2hhcgorV2IzNVJlZ19Xcml0ZVN5bmMoICBwaHdfZGF0YV90IHBId0RhdGEsICB1MTYgUmVnaXN0ZXJObywgIHUzMiBSZWdpc3RlclZhbHVlICkKK3sKKwlQV0IzNVJFRyBwV2IzNVJlZyA9ICZwSHdEYXRhLT5XYjM1UmVnOworCWludCByZXQgPSAtMTsKKworCS8vIE1vZHVsZSBzaHV0ZG93bgorCWlmIChwSHdEYXRhLT5TdXJwcmlzZVJlbW92ZSkKKwkJcmV0dXJuIEZBTFNFOworCisJUmVnaXN0ZXJWYWx1ZSA9IGNwdV90b19sZTMyKFJlZ2lzdGVyVmFsdWUpOworCisJLy8gdXBkYXRlIHRoZSByZWdpc3RlciBieSBzZW5kIHVzYiBtZXNzYWdlLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJcFdiMzVSZWctPlN5bmNJb1BhdXNlID0gMTsKKworCS8vIDIwMDYwNzE3LjUgV2FpdCB1bnRpbCBFUDBWTSBzdG9wCisJd2hpbGUgKHBXYjM1UmVnLT5FUDB2bV9zdGF0ZSAhPSBWTV9TVE9QKQorCQlPU19TTEVFUCgxMDAwMCk7CisKKwkvLyBTeW5jIElvQ2FsbERyaXZlcgorCXBXYjM1UmVnLT5FUDB2bV9zdGF0ZSA9IFZNX1JVTk5JTkc7CisJcmV0ID0gdXNiX2NvbnRyb2xfbXNnKCBwSHdEYXRhLT5XYlVzYi51ZGV2LAorCQkJICAgICAgIHVzYl9zbmRjdHJscGlwZSggcEh3RGF0YS0+V2JVc2IudWRldiwgMCApLAorCQkJICAgICAgIDB4MDMsIFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9ERVZJQ0UgfCBVU0JfRElSX09VVCwKKwkJCSAgICAgICAweDAsUmVnaXN0ZXJObywgJlJlZ2lzdGVyVmFsdWUsIDQsIEhaKjEwMCApOworCXBXYjM1UmVnLT5FUDB2bV9zdGF0ZSA9IFZNX1NUT1A7CisJcFdiMzVSZWctPlN5bmNJb1BhdXNlID0gMDsKKworCVdiMzVSZWdfRVAwVk1fc3RhcnQocEh3RGF0YSk7CisKKwlpZiAocmV0IDwgMCkgeworCQkjaWZkZWYgX1BFX1JFR19EVU1QXworCQlXQkRFQlVHKCgiRVAwIFdyaXRlIHJlZ2lzdGVyIHVzYiBtZXNzYWdlIHNlbmRpbmcgZXJyb3JcbiIpKTsKKwkJI2VuZGlmCisKKwkJcEh3RGF0YS0+U3VycHJpc2VSZW1vdmUgPSAxOyAvLyAyMDA2MDcwNC4yCisJCXJldHVybiBGQUxTRTsKKwl9CisKKwlyZXR1cm4gVFJVRTsKK30KKworLy8gVFJVRSAgOiByZWFkIGNvbW1hbmQgcHJvY2VzcyBzdWNjZXNzZnVsbHkKKy8vIEZBTFNFIDogcmVnaXN0ZXIgbm90IHN1cHBvcnQKK3Vuc2lnbmVkIGNoYXIKK1diMzVSZWdfV3JpdGUoICBwaHdfZGF0YV90IHBId0RhdGEsICB1MTYgUmVnaXN0ZXJObywgIHUzMiBSZWdpc3RlclZhbHVlICkKK3sKKwlQV0IzNVJFRwlwV2IzNVJlZyA9ICZwSHdEYXRhLT5XYjM1UmVnOworCXN0cnVjdCB1c2JfY3RybHJlcXVlc3QgKmRyOworCVBVUkIJCXBVcmIgPSBOVUxMOworCVBSRUdfUVVFVUUJcFJlZ1F1ZXVlID0gTlVMTDsKKwl1MTYJCVVyYlNpemU7CisKKworCS8vIE1vZHVsZSBzaHV0ZG93bgorCWlmIChwSHdEYXRhLT5TdXJwcmlzZVJlbW92ZSkKKwkJcmV0dXJuIEZBTFNFOworCisJLy8gdXBkYXRlIHRoZSByZWdpc3RlciBieSBzZW5kIHVyYiByZXF1ZXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJVXJiU2l6ZSA9IHNpemVvZihSRUdfUVVFVUUpICsgc2l6ZW9mKHN0cnVjdCB1c2JfY3RybHJlcXVlc3QpOworCU9TX01FTU9SWV9BTExPQyggKHZvaWQqICopJnBSZWdRdWV1ZSwgVXJiU2l6ZSApOworCXBVcmIgPSB3Yl91c2JfYWxsb2NfdXJiKDApOworCWlmIChwVXJiICYmIHBSZWdRdWV1ZSkgeworCQlwUmVnUXVldWUtPkRJUkVDVCA9IDE7Ly8gYnVyc3Qgd3JpdGUgcmVnaXN0ZXIKKwkJcFJlZ1F1ZXVlLT5JTkRFWCA9IFJlZ2lzdGVyTm87CisJCXBSZWdRdWV1ZS0+VkFMVUUgPSBjcHVfdG9fbGUzMihSZWdpc3RlclZhbHVlKTsKKwkJcFJlZ1F1ZXVlLT5SRVNFUlZFRF9WQUxJRCA9IEZBTFNFOworCQlkciA9IChzdHJ1Y3QgdXNiX2N0cmxyZXF1ZXN0ICopKChQVUNIQVIpcFJlZ1F1ZXVlICsgc2l6ZW9mKFJFR19RVUVVRSkpOworCQlkci0+YlJlcXVlc3RUeXBlID0gVVNCX1RZUEVfVkVORE9SfFVTQl9ESVJfT1VUIHxVU0JfUkVDSVBfREVWSUNFOworCQlkci0+YlJlcXVlc3QgPSAweDAzOyAvLyBVU0Igb3IgdmVuZG9yLWRlZmluZWQgcmVxdWVzdCBjb2RlLCBidXJzdCBtb2RlCisJCWRyLT53VmFsdWUgPSBjcHVfdG9fbGUxNigweDApOworCQlkci0+d0luZGV4ID0gY3B1X3RvX2xlMTYoUmVnaXN0ZXJObyk7CisJCWRyLT53TGVuZ3RoID0gY3B1X3RvX2xlMTYoNCk7CisKKwkJLy8gRW50ZXIgdGhlIHNlbmRpbmcgcXVldWUKKwkJcFJlZ1F1ZXVlLT5OZXh0ID0gTlVMTDsKKwkJcFJlZ1F1ZXVlLT5wVXNiUmVxID0gZHI7CisJCXBSZWdRdWV1ZS0+cFVyYiA9IHBVcmI7CisKKwkJT1NfU1BJTl9MT0NLX0FDUVVJUkVEKCZwV2IzNVJlZy0+RVAwVk1fc3Bpbl9sb2NrICk7CisJCWlmIChwV2IzNVJlZy0+cFJlZ0ZpcnN0ID09IE5VTEwpCisJCQlwV2IzNVJlZy0+cFJlZ0ZpcnN0ID0gcFJlZ1F1ZXVlOworCQllbHNlCisJCQlwV2IzNVJlZy0+cFJlZ0xhc3QtPk5leHQgPSBwUmVnUXVldWU7CisJCXBXYjM1UmVnLT5wUmVnTGFzdCA9IHBSZWdRdWV1ZTsKKworCQlPU19TUElOX0xPQ0tfUkVMRUFTRUQoICZwV2IzNVJlZy0+RVAwVk1fc3Bpbl9sb2NrICk7CisKKwkJLy8gU3RhcnQgRVAwVk0KKwkJV2IzNVJlZ19FUDBWTV9zdGFydChwSHdEYXRhKTsKKworCQlyZXR1cm4gVFJVRTsKKwl9IGVsc2UgeworCQlpZiAocFVyYikKKwkJCXVzYl9mcmVlX3VyYihwVXJiKTsKKwkJa2ZyZWUocFJlZ1F1ZXVlKTsKKwkJcmV0dXJuIEZBTFNFOworCX0KK30KKworLy9UaGlzIGNvbW1hbmQgd2lsbCBiZSBleGVjdXRlZCB3aXRoIGEgdXNlciBkZWZpbmVkIHZhbHVlLiBXaGVuIGl0IGNvbXBsZXRlcywKKy8vdGhpcyB2YWx1ZSBpcyB1c2VmdWwuIEZvciBleGFtcGxlLCBoYWxfc2V0X2N1cnJlbnRfY2hhbm5lbCB3aWxsIHVzZSBpdC4KKy8vIFRSVUUgIDogcmVhZCBjb21tYW5kIHByb2Nlc3Mgc3VjY2Vzc2Z1bGx5CisvLyBGQUxTRSA6IHJlZ2lzdGVyIG5vdCBzdXBwb3J0Cit1bnNpZ25lZCBjaGFyCitXYjM1UmVnX1dyaXRlV2l0aENhbGxiYWNrVmFsdWUoIHBod19kYXRhX3QgcEh3RGF0YSwgdTE2IFJlZ2lzdGVyTm8sIHUzMiBSZWdpc3RlclZhbHVlLAorCQkJCVBDSEFSIHBWYWx1ZSwgczggTGVuKQoreworCVBXQjM1UkVHCXBXYjM1UmVnID0gJnBId0RhdGEtPldiMzVSZWc7CisJc3RydWN0IHVzYl9jdHJscmVxdWVzdCAqZHI7CisJUFVSQgkJcFVyYiA9IE5VTEw7CisJUFJFR19RVUVVRQlwUmVnUXVldWUgPSBOVUxMOworCXUxNgkJVXJiU2l6ZTsKKworCS8vIE1vZHVsZSBzaHV0ZG93bgorCWlmIChwSHdEYXRhLT5TdXJwcmlzZVJlbW92ZSkKKwkJcmV0dXJuIEZBTFNFOworCisJLy8gdXBkYXRlIHRoZSByZWdpc3RlciBieSBzZW5kIHVyYiByZXF1ZXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJVXJiU2l6ZSA9IHNpemVvZihSRUdfUVVFVUUpICsgc2l6ZW9mKHN0cnVjdCB1c2JfY3RybHJlcXVlc3QpOworCU9TX01FTU9SWV9BTExPQygodm9pZCogKikgJnBSZWdRdWV1ZSwgVXJiU2l6ZSApOworCXBVcmIgPSB3Yl91c2JfYWxsb2NfdXJiKDApOworCWlmIChwVXJiICYmIHBSZWdRdWV1ZSkgeworCQlwUmVnUXVldWUtPkRJUkVDVCA9IDE7Ly8gYnVyc3Qgd3JpdGUgcmVnaXN0ZXIKKwkJcFJlZ1F1ZXVlLT5JTkRFWCA9IFJlZ2lzdGVyTm87CisJCXBSZWdRdWV1ZS0+VkFMVUUgPSBjcHVfdG9fbGUzMihSZWdpc3RlclZhbHVlKTsKKwkJLy9OT1RFIDogVXNlcnMgbXVzdCBndWFyYW50ZWUgdGhlIHNpemUgb2YgdmFsdWUgd2lsbCBub3QgZXhjZWVkIHRoZSBidWZmZXIgc2l6ZS4KKwkJbWVtY3B5KHBSZWdRdWV1ZS0+UkVTRVJWRUQsIHBWYWx1ZSwgTGVuKTsKKwkJcFJlZ1F1ZXVlLT5SRVNFUlZFRF9WQUxJRCA9IFRSVUU7CisJCWRyID0gKHN0cnVjdCB1c2JfY3RybHJlcXVlc3QgKikoKFBVQ0hBUilwUmVnUXVldWUgKyBzaXplb2YoUkVHX1FVRVVFKSk7CisJCWRyLT5iUmVxdWVzdFR5cGUgPSBVU0JfVFlQRV9WRU5ET1J8VVNCX0RJUl9PVVQgfFVTQl9SRUNJUF9ERVZJQ0U7CisJCWRyLT5iUmVxdWVzdCA9IDB4MDM7IC8vIFVTQiBvciB2ZW5kb3ItZGVmaW5lZCByZXF1ZXN0IGNvZGUsIGJ1cnN0IG1vZGUKKwkJZHItPndWYWx1ZSA9IGNwdV90b19sZTE2KDB4MCk7CisJCWRyLT53SW5kZXggPSBjcHVfdG9fbGUxNihSZWdpc3Rlck5vKTsKKwkJZHItPndMZW5ndGggPSBjcHVfdG9fbGUxNig0KTsKKworCQkvLyBFbnRlciB0aGUgc2VuZGluZyBxdWV1ZQorCQlwUmVnUXVldWUtPk5leHQgPSBOVUxMOworCQlwUmVnUXVldWUtPnBVc2JSZXEgPSBkcjsKKwkJcFJlZ1F1ZXVlLT5wVXJiID0gcFVyYjsKKwkJT1NfU1BJTl9MT0NLX0FDUVVJUkVEICgmcFdiMzVSZWctPkVQMFZNX3NwaW5fbG9jayApOworCQlpZiggcFdiMzVSZWctPnBSZWdGaXJzdCA9PSBOVUxMICkKKwkJCXBXYjM1UmVnLT5wUmVnRmlyc3QgPSBwUmVnUXVldWU7CisJCWVsc2UKKwkJCXBXYjM1UmVnLT5wUmVnTGFzdC0+TmV4dCA9IHBSZWdRdWV1ZTsKKwkJcFdiMzVSZWctPnBSZWdMYXN0ID0gcFJlZ1F1ZXVlOworCisJCU9TX1NQSU5fTE9DS19SRUxFQVNFRCAoICZwV2IzNVJlZy0+RVAwVk1fc3Bpbl9sb2NrICk7CisKKwkJLy8gU3RhcnQgRVAwVk0KKwkJV2IzNVJlZ19FUDBWTV9zdGFydChwSHdEYXRhKTsKKwkJcmV0dXJuIFRSVUU7CisJfSBlbHNlIHsKKwkJaWYgKHBVcmIpCisJCQl1c2JfZnJlZV91cmIocFVyYik7CisJCWtmcmVlKHBSZWdRdWV1ZSk7CisJCXJldHVybiBGQUxTRTsKKwl9Cit9CisKKy8vIFRSVUUgIDogcmVhZCBjb21tYW5kIHByb2Nlc3Mgc3VjY2Vzc2Z1bGx5CisvLyBGQUxTRSA6IHJlZ2lzdGVyIG5vdCBzdXBwb3J0CisvLyBwUmVnaXN0ZXJWYWx1ZSA6IEl0IG11c3QgYmUgYSByZXNpZGVudCBidWZmZXIgZHVlIHRvIGFzeW5jaHJvbm91cyByZWFkIHJlZ2lzdGVyLgordW5zaWduZWQgY2hhcgorV2IzNVJlZ19SZWFkU3luYyggIHBod19kYXRhX3QgcEh3RGF0YSwgIHUxNiBSZWdpc3Rlck5vLCAgIFBVTE9ORyBwUmVnaXN0ZXJWYWx1ZSApCit7CisJUFdCMzVSRUcgcFdiMzVSZWcgPSAmcEh3RGF0YS0+V2IzNVJlZzsKKwlQVUxPTkcJcGx0bXAgPSBwUmVnaXN0ZXJWYWx1ZTsKKwlpbnQgcmV0ID0gLTE7CisKKwkvLyBNb2R1bGUgc2h1dGRvd24KKwlpZiAocEh3RGF0YS0+U3VycHJpc2VSZW1vdmUpCisJCXJldHVybiBGQUxTRTsKKworCS8vIFJlYWQgdGhlIHJlZ2lzdGVyIGJ5IHNlbmQgdXNiIG1lc3NhZ2UtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworCXBXYjM1UmVnLT5TeW5jSW9QYXVzZSA9IDE7CisKKwkvLyAyMDA2MDcxNy41IFdhaXQgdW50aWwgRVAwVk0gc3RvcAorCXdoaWxlIChwV2IzNVJlZy0+RVAwdm1fc3RhdGUgIT0gVk1fU1RPUCkKKwkJT1NfU0xFRVAoMTAwMDApOworCisJcFdiMzVSZWctPkVQMHZtX3N0YXRlID0gVk1fUlVOTklORzsKKwlyZXQgPSB1c2JfY29udHJvbF9tc2coIHBId0RhdGEtPldiVXNiLnVkZXYsCisJCQkgICAgICAgdXNiX3JjdmN0cmxwaXBlKHBId0RhdGEtPldiVXNiLnVkZXYsIDApLAorCQkJICAgICAgIDB4MDEsIFVTQl9UWVBFX1ZFTkRPUnxVU0JfUkVDSVBfREVWSUNFfFVTQl9ESVJfSU4sCisJCQkgICAgICAgMHgwLCBSZWdpc3Rlck5vLCBwbHRtcCwgNCwgSFoqMTAwICk7CisKKwkqcFJlZ2lzdGVyVmFsdWUgPSBjcHVfdG9fbGUzMigqcGx0bXApOworCisJcFdiMzVSZWctPkVQMHZtX3N0YXRlID0gVk1fU1RPUDsKKworCVdiMzVSZWdfVXBkYXRlKCBwSHdEYXRhLCBSZWdpc3Rlck5vLCAqcFJlZ2lzdGVyVmFsdWUgKTsKKwlwV2IzNVJlZy0+U3luY0lvUGF1c2UgPSAwOworCisJV2IzNVJlZ19FUDBWTV9zdGFydCggcEh3RGF0YSApOworCisJaWYgKHJldCA8IDApIHsKKwkJI2lmZGVmIF9QRV9SRUdfRFVNUF8KKwkJV0JERUJVRygoIkVQMCBSZWFkIHJlZ2lzdGVyIHVzYiBtZXNzYWdlIHNlbmRpbmcgZXJyb3JcbiIpKTsKKwkJI2VuZGlmCisKKwkJcEh3RGF0YS0+U3VycHJpc2VSZW1vdmUgPSAxOyAvLyAyMDA2MDcwNC4yCisJCXJldHVybiBGQUxTRTsKKwl9CisKKwlyZXR1cm4gVFJVRTsKK30KKworLy8gVFJVRSAgOiByZWFkIGNvbW1hbmQgcHJvY2VzcyBzdWNjZXNzZnVsbHkKKy8vIEZBTFNFIDogcmVnaXN0ZXIgbm90IHN1cHBvcnQKKy8vIHBSZWdpc3RlclZhbHVlIDogSXQgbXVzdCBiZSBhIHJlc2lkZW50IGJ1ZmZlciBkdWUgdG8gYXN5bmNocm9ub3VzIHJlYWQgcmVnaXN0ZXIuCit1bnNpZ25lZCBjaGFyCitXYjM1UmVnX1JlYWQocGh3X2RhdGFfdCBwSHdEYXRhLCB1MTYgUmVnaXN0ZXJObywgIFBVTE9ORyBwUmVnaXN0ZXJWYWx1ZSApCit7CisJUFdCMzVSRUcJcFdiMzVSZWcgPSAmcEh3RGF0YS0+V2IzNVJlZzsKKwlzdHJ1Y3QgdXNiX2N0cmxyZXF1ZXN0ICogZHI7CisJUFVSQgkJcFVyYjsKKwlQUkVHX1FVRVVFCXBSZWdRdWV1ZTsKKwl1MTYJCVVyYlNpemU7CisKKwkvLyBNb2R1bGUgc2h1dGRvd24KKwlpZiAocEh3RGF0YS0+U3VycHJpc2VSZW1vdmUpCisJCXJldHVybiBGQUxTRTsKKworCS8vIHVwZGF0ZSB0aGUgdmFyaWFibGUgYnkgc2VuZCBVcmIgdG8gcmVhZCByZWdpc3RlciAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwlVcmJTaXplID0gc2l6ZW9mKFJFR19RVUVVRSkgKyBzaXplb2Yoc3RydWN0IHVzYl9jdHJscmVxdWVzdCk7CisJT1NfTUVNT1JZX0FMTE9DKCAodm9pZCogKikmcFJlZ1F1ZXVlLCBVcmJTaXplICk7CisJcFVyYiA9IHdiX3VzYl9hbGxvY191cmIoMCk7CisJaWYoIHBVcmIgJiYgcFJlZ1F1ZXVlICkKKwl7CisJCXBSZWdRdWV1ZS0+RElSRUNUID0gMDsvLyByZWFkIHJlZ2lzdGVyCisJCXBSZWdRdWV1ZS0+SU5ERVggPSBSZWdpc3Rlck5vOworCQlwUmVnUXVldWUtPnBCdWZmZXIgPSBwUmVnaXN0ZXJWYWx1ZTsKKwkJZHIgPSAoc3RydWN0IHVzYl9jdHJscmVxdWVzdCAqKSgoUFVDSEFSKXBSZWdRdWV1ZSArIHNpemVvZihSRUdfUVVFVUUpKTsKKwkJZHItPmJSZXF1ZXN0VHlwZSA9IFVTQl9UWVBFX1ZFTkRPUnxVU0JfUkVDSVBfREVWSUNFfFVTQl9ESVJfSU47CisJCWRyLT5iUmVxdWVzdCA9IDB4MDE7IC8vIFVTQiBvciB2ZW5kb3ItZGVmaW5lZCByZXF1ZXN0IGNvZGUsIGJ1cnN0IG1vZGUKKwkJZHItPndWYWx1ZSA9IGNwdV90b19sZTE2KDB4MCk7CisJCWRyLT53SW5kZXggPSBjcHVfdG9fbGUxNiAoUmVnaXN0ZXJObyk7CisJCWRyLT53TGVuZ3RoID0gY3B1X3RvX2xlMTYgKDQpOworCisJCS8vIEVudGVyIHRoZSBzZW5kaW5nIHF1ZXVlCisJCXBSZWdRdWV1ZS0+TmV4dCA9IE5VTEw7CisJCXBSZWdRdWV1ZS0+cFVzYlJlcSA9IGRyOworCQlwUmVnUXVldWUtPnBVcmIgPSBwVXJiOworCQlPU19TUElOX0xPQ0tfQUNRVUlSRUQgKCAmcFdiMzVSZWctPkVQMFZNX3NwaW5fbG9jayApOworCQlpZiggcFdiMzVSZWctPnBSZWdGaXJzdCA9PSBOVUxMICkKKwkJCXBXYjM1UmVnLT5wUmVnRmlyc3QgPSBwUmVnUXVldWU7CisJCWVsc2UKKwkJCXBXYjM1UmVnLT5wUmVnTGFzdC0+TmV4dCA9IHBSZWdRdWV1ZTsKKwkJcFdiMzVSZWctPnBSZWdMYXN0ID0gcFJlZ1F1ZXVlOworCisJCU9TX1NQSU5fTE9DS19SRUxFQVNFRCggJnBXYjM1UmVnLT5FUDBWTV9zcGluX2xvY2sgKTsKKworCQkvLyBTdGFydCBFUDBWTQorCQlXYjM1UmVnX0VQMFZNX3N0YXJ0KCBwSHdEYXRhICk7CisKKwkJcmV0dXJuIFRSVUU7CisJfSBlbHNlIHsKKwkJaWYgKHBVcmIpCisJCQl1c2JfZnJlZV91cmIoIHBVcmIgKTsKKwkJa2ZyZWUocFJlZ1F1ZXVlKTsKKwkJcmV0dXJuIEZBTFNFOworCX0KK30KKworCit2b2lkCitXYjM1UmVnX0VQMFZNX3N0YXJ0KCAgcGh3X2RhdGFfdCBwSHdEYXRhICkKK3sKKwlQV0IzNVJFRyBwV2IzNVJlZyA9ICZwSHdEYXRhLT5XYjM1UmVnOworCisJaWYgKE9TX0FUT01JQ19JTkMoIHBId0RhdGEtPkFkYXB0ZXIsICZwV2IzNVJlZy0+UmVnRmlyZUNvdW50KSA9PSAxKSB7CisJCXBXYjM1UmVnLT5FUDB2bV9zdGF0ZSA9IFZNX1JVTk5JTkc7CisJCVdiMzVSZWdfRVAwVk0ocEh3RGF0YSk7CisJfSBlbHNlCisJCU9TX0FUT01JQ19ERUMoIHBId0RhdGEtPkFkYXB0ZXIsICZwV2IzNVJlZy0+UmVnRmlyZUNvdW50ICk7Cit9CisKK3ZvaWQKK1diMzVSZWdfRVAwVk0ocGh3X2RhdGFfdCBwSHdEYXRhICkKK3sKKwlQV0IzNVJFRwlwV2IzNVJlZyA9ICZwSHdEYXRhLT5XYjM1UmVnOworCVBVUkIJCXBVcmI7CisJc3RydWN0IHVzYl9jdHJscmVxdWVzdCAqZHI7CisJUFVMT05HCQlwQnVmZmVyOworCWludAkJCXJldCA9IC0xOworCVBSRUdfUVVFVUUJcFJlZ1F1ZXVlOworCisKKwlpZiAocFdiMzVSZWctPlN5bmNJb1BhdXNlKQorCQlnb3RvIGNsZWFudXA7CisKKwlpZiAocEh3RGF0YS0+U3VycHJpc2VSZW1vdmUpCisJCWdvdG8gY2xlYW51cDsKKworCS8vIEdldCB0aGUgcmVnaXN0ZXIgZGF0YSBhbmQgc2VuZCB0byBVU0IgdGhyb3VnaCBJcnAKKwlPU19TUElOX0xPQ0tfQUNRVUlSRUQoICZwV2IzNVJlZy0+RVAwVk1fc3Bpbl9sb2NrICk7CisJcFJlZ1F1ZXVlID0gcFdiMzVSZWctPnBSZWdGaXJzdDsKKwlPU19TUElOX0xPQ0tfUkVMRUFTRUQoICZwV2IzNVJlZy0+RVAwVk1fc3Bpbl9sb2NrICk7CisKKwlpZiAoIXBSZWdRdWV1ZSkKKwkJZ290byBjbGVhbnVwOworCisJLy8gR2V0IGFuIFVyYiwgc2VuZCBpdAorCXBVcmIgPSAoUFVSQilwUmVnUXVldWUtPnBVcmI7CisKKwlkciA9IHBSZWdRdWV1ZS0+cFVzYlJlcTsKKwlwVXJiID0gcFJlZ1F1ZXVlLT5wVXJiOworCXBCdWZmZXIgPSBwUmVnUXVldWUtPnBCdWZmZXI7CisJaWYgKHBSZWdRdWV1ZS0+RElSRUNUID09IDEpIC8vIG91dHB1dAorCQlwQnVmZmVyID0gJnBSZWdRdWV1ZS0+VkFMVUU7CisKKwl1c2JfZmlsbF9jb250cm9sX3VyYiggcFVyYiwgcEh3RGF0YS0+V2JVc2IudWRldiwKKwkJCSAgICAgIFJFR19ESVJFQ1RJT04ocEh3RGF0YS0+V2JVc2IudWRldixwUmVnUXVldWUpLAorCQkJICAgICAgKFBVQ0hBUilkcixwQnVmZmVyLGNwdV90b19sZTE2KGRyLT53TGVuZ3RoKSwKKwkJCSAgICAgIFdiMzVSZWdfRVAwVk1fY29tcGxldGUsICh2b2lkKilwSHdEYXRhKTsKKworCXBXYjM1UmVnLT5FUDB2bV9zdGF0ZSA9IFZNX1JVTk5JTkc7CisKKwlyZXQgPSB3Yl91c2Jfc3VibWl0X3VyYiggcFVyYiApOworCisJaWYgKHJldCA8IDApIHsKKyNpZmRlZiBfUEVfUkVHX0RVTVBfCisJCVdCREVCVUcoKCJFUDAgSXJwIHNlbmRpbmcgZXJyb3JcbiIpKTsKKyNlbmRpZgorCQlnb3RvIGNsZWFudXA7CisJfQorCisJcmV0dXJuOworCisgY2xlYW51cDoKKwlwV2IzNVJlZy0+RVAwdm1fc3RhdGUgPSBWTV9TVE9QOworCU9TX0FUT01JQ19ERUMoIHBId0RhdGEtPkFkYXB0ZXIsICZwV2IzNVJlZy0+UmVnRmlyZUNvdW50ICk7Cit9CisKKwordm9pZAorV2IzNVJlZ19FUDBWTV9jb21wbGV0ZShQVVJCIHBVcmIpCit7CisJcGh3X2RhdGFfdCAgcEh3RGF0YSA9IChwaHdfZGF0YV90KXBVcmItPmNvbnRleHQ7CisJUFdCMzVSRUcJcFdiMzVSZWcgPSAmcEh3RGF0YS0+V2IzNVJlZzsKKwlQUkVHX1FVRVVFCXBSZWdRdWV1ZTsKKworCisJLy8gVmFyaWFibGUgc2V0dGluZworCXBXYjM1UmVnLT5FUDB2bV9zdGF0ZSA9IFZNX0NPTVBMRVRFRDsKKwlwV2IzNVJlZy0+RVAwVk1fc3RhdHVzID0gcFVyYi0+c3RhdHVzOworCisJaWYgKHBId0RhdGEtPlN1cnByaXNlUmVtb3ZlKSB7IC8vIExldCBXYldsYW5IYWx0IHRvIGhhbmRsZSBzdXJwcmlzZSByZW1vdmUKKwkJcFdiMzVSZWctPkVQMHZtX3N0YXRlID0gVk1fU1RPUDsKKwkJT1NfQVRPTUlDX0RFQyggcEh3RGF0YS0+QWRhcHRlciwgJnBXYjM1UmVnLT5SZWdGaXJlQ291bnQgKTsKKwl9IGVsc2UgeworCQkvLyBDb21wbGV0ZSB0byBzZW5kLCByZW1vdmUgdGhlIFVSQiBmcm9tIHRoZSBmaXJzdAorCQlPU19TUElOX0xPQ0tfQUNRVUlSRUQoICZwV2IzNVJlZy0+RVAwVk1fc3Bpbl9sb2NrICk7CisJCXBSZWdRdWV1ZSA9IHBXYjM1UmVnLT5wUmVnRmlyc3Q7CisJCWlmIChwUmVnUXVldWUgPT0gcFdiMzVSZWctPnBSZWdMYXN0KQorCQkJcFdiMzVSZWctPnBSZWdMYXN0ID0gTlVMTDsKKwkJcFdiMzVSZWctPnBSZWdGaXJzdCA9IHBXYjM1UmVnLT5wUmVnRmlyc3QtPk5leHQ7CisJCU9TX1NQSU5fTE9DS19SRUxFQVNFRCggJnBXYjM1UmVnLT5FUDBWTV9zcGluX2xvY2sgKTsKKworCQlpZiAocFdiMzVSZWctPkVQMFZNX3N0YXR1cykgeworI2lmZGVmIF9QRV9SRUdfRFVNUF8KKwkJCVdCREVCVUcoKCJFUDAgSW9Db21wbGV0ZVJvdXRpbmUgcmV0dXJuIGVycm9yXG4iKSk7CisJCQlEZWJ1Z1VzYmRTdGF0dXNJbmZvcm1hdGlvbiggcFdiMzVSZWctPkVQMFZNX3N0YXR1cyApOworI2VuZGlmCisJCQlwV2IzNVJlZy0+RVAwdm1fc3RhdGUgPSBWTV9TVE9QOworCQkJcEh3RGF0YS0+U3VycHJpc2VSZW1vdmUgPSAxOworCQl9IGVsc2UgeworCQkJLy8gU3VjY2Vzcy4gVXBkYXRlIHRoZSByZXN1bHQKKworCQkJLy8gU3RhcnQgdGhlIG5leHQgc2VuZAorCQkJV2IzNVJlZ19FUDBWTShwSHdEYXRhKTsKKwkJfQorCisgICAJCWtmcmVlKHBSZWdRdWV1ZSk7CisJfQorCisJdXNiX2ZyZWVfdXJiKHBVcmIpOworfQorCisKK3ZvaWQKK1diMzVSZWdfZGVzdHJveShwaHdfZGF0YV90IHBId0RhdGEpCit7CisJUFdCMzVSRUcJcFdiMzVSZWcgPSAmcEh3RGF0YS0+V2IzNVJlZzsKKwlQVVJCCQlwVXJiOworCVBSRUdfUVVFVUUJcFJlZ1F1ZXVlOworCisKKwlVeHhfcG93ZXJfb2ZmX3Byb2NlZHVyZShwSHdEYXRhKTsKKworCS8vIFdhaXQgZm9yIFJlZyBvcGVyYXRpb24gY29tcGxldGVkCisJZG8geworCQlPU19TTEVFUCgxMDAwMCk7IC8vIERlbGF5IGZvciB3YWl0aW5nIGZ1bmN0aW9uIGVudGVyIDk0MDYyMy4xLmEKKwl9IHdoaWxlIChwV2IzNVJlZy0+RVAwdm1fc3RhdGUgIT0gVk1fU1RPUCk7CisJT1NfU0xFRVAoMTAwMDApOyAgLy8gRGVsYXkgZm9yIHdhaXRpbmcgZnVuY3Rpb24gZW50ZXIgOTQwNjIzLjEuYgorCisJLy8gUmVsZWFzZSBhbGwgdGhlIGRhdGEgaW4gUmVnUXVldWUKKwlPU19TUElOX0xPQ0tfQUNRVUlSRUQoICZwV2IzNVJlZy0+RVAwVk1fc3Bpbl9sb2NrICk7CisJcFJlZ1F1ZXVlID0gcFdiMzVSZWctPnBSZWdGaXJzdDsKKwl3aGlsZSAocFJlZ1F1ZXVlKSB7CisJCWlmIChwUmVnUXVldWUgPT0gcFdiMzVSZWctPnBSZWdMYXN0KQorCQkJcFdiMzVSZWctPnBSZWdMYXN0ID0gTlVMTDsKKwkJcFdiMzVSZWctPnBSZWdGaXJzdCA9IHBXYjM1UmVnLT5wUmVnRmlyc3QtPk5leHQ7CisKKwkJcFVyYiA9IHBSZWdRdWV1ZS0+cFVyYjsKKwkJT1NfU1BJTl9MT0NLX1JFTEVBU0VEKCAmcFdiMzVSZWctPkVQMFZNX3NwaW5fbG9jayApOworCQlpZiAocFVyYikgeworCQkJdXNiX2ZyZWVfdXJiKHBVcmIpOworCQkJa2ZyZWUocFJlZ1F1ZXVlKTsKKwkJfSBlbHNlIHsKKwkJCSNpZmRlZiBfUEVfUkVHX0RVTVBfCisJCQlXQkRFQlVHKCgiRVAwIHF1ZXVlIHJlbGVhc2UgZXJyb3JcbiIpKTsKKwkJCSNlbmRpZgorCQl9CisJCU9TX1NQSU5fTE9DS19BQ1FVSVJFRCggJnBXYjM1UmVnLT5FUDBWTV9zcGluX2xvY2sgKTsKKworCQlwUmVnUXVldWUgPSBwV2IzNVJlZy0+cFJlZ0ZpcnN0OworCX0KKwlPU19TUElOX0xPQ0tfUkVMRUFTRUQoICZwV2IzNVJlZy0+RVAwVk1fc3Bpbl9sb2NrICk7CisKKwkvLyBGcmVlIHJlc291cmNlCisJT1NfU1BJTl9MT0NLX0ZSRUUoICAmcFdiMzVSZWctPkVQMFZNX3NwaW5fbG9jayApOworfQorCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8gVGhlIGZ1bmN0aW9uIGNhbiBiZSBydW4gaW4gcGFzc2l2ZS1sZXZlbCBvbmx5LgorLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK3Vuc2lnbmVkIGNoYXIgV2IzNVJlZ19pbml0aWFsKHBod19kYXRhX3QgcEh3RGF0YSkKK3sKKwlQV0IzNVJFRyBwV2IzNVJlZz0mcEh3RGF0YS0+V2IzNVJlZzsKKwl1MzIgbHRtcDsKKwl1MzIgU29mdHdhcmVTZXQsIFZDT190cmltLCBUeFZnYSwgUmVnaW9uX1NjYW5JbnRlcnZhbDsKKworCS8vIFNwaW4gbG9jayBpcyBhY3F1aXJlZCBmb3IgcmVhZCBhbmQgd3JpdGUgSVJQIGNvbW1hbmQKKwlPU19TUElOX0xPQ0tfQUxMT0NBVEUoICZwV2IzNVJlZy0+RVAwVk1fc3Bpbl9sb2NrICk7CisKKwkvLyBHZXR0aW5nIFJGIG1vZHVsZSB0eXBlIGZyb20gRUVQUk9NIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCVdiMzVSZWdfV3JpdGVTeW5jKCBwSHdEYXRhLCAweDAzYjQsIDB4MDgwZDAwMDAgKTsgLy8gU3RhcnQgRUVQUk9NIGFjY2VzcyArIFJlYWQgKyBhZGRyZXNzKDB4MGQpCisJV2IzNVJlZ19SZWFkU3luYyggcEh3RGF0YSwgMHgwM2I0LCAmbHRtcCApOworCisJLy9VcGRhdGUgUkYgbW9kdWxlIHR5cGUgYW5kIGRldGVybWluZSB0aGUgUEhZIHR5cGUgYnkgaW5mIG9yIEVFUFJPTQorCXBXYjM1UmVnLT5FRVBST01QaHlUeXBlID0gKHU4KSggbHRtcCAmIDB4ZmYgKTsKKwkvLyAwIFYgTUFYMjgyNSwgMSBWIE1BWDI4MjcsIDIgViBNQVgyODI4LCAzIFYgTUFYMjgyOQorCS8vIDE2ViBBTDIyMzAsIDE3IC0gQUw3MjMwLCAxOCAtIEFMMjIzMFMKKwkvLyAzMiBSZXNlcnZlZAorCS8vIDMzIC0gVzg5UkYyNDIoVHhWR0EgMH4xOSksIDM0IC0gVzg5UkYyNDIoVHhWR0EgMH4zNCkKKwlpZiAocFdiMzVSZWctPkVFUFJPTVBoeVR5cGUgIT0gUkZfREVDSURFX0JZX0lORikgeworCQlpZiggKHBXYjM1UmVnLT5FRVBST01QaHlUeXBlID09IFJGX01BWElNXzI4MjUpCXx8CisJCQkocFdiMzVSZWctPkVFUFJPTVBoeVR5cGUgPT0gUkZfTUFYSU1fMjgyNykJfHwKKwkJCShwV2IzNVJlZy0+RUVQUk9NUGh5VHlwZSA9PSBSRl9NQVhJTV8yODI4KQl8fAorCQkJKHBXYjM1UmVnLT5FRVBST01QaHlUeXBlID09IFJGX01BWElNXzI4MjkpCXx8CisJCQkocFdiMzVSZWctPkVFUFJPTVBoeVR5cGUgPT0gUkZfTUFYSU1fVjEpCXx8CisJCQkocFdiMzVSZWctPkVFUFJPTVBoeVR5cGUgPT0gUkZfQUlST0hBXzIyMzApCXx8CisJCQkocFdiMzVSZWctPkVFUFJPTVBoeVR5cGUgPT0gUkZfQUlST0hBXzIyMzBTKSAgICB8fAorCQkJKHBXYjM1UmVnLT5FRVBST01QaHlUeXBlID09IFJGX0FJUk9IQV83MjMwKQl8fAorCQkJKHBXYjM1UmVnLT5FRVBST01QaHlUeXBlID09IFJGX1dCXzI0MikJCXx8CisJCQkocFdiMzVSZWctPkVFUFJPTVBoeVR5cGUgPT0gUkZfV0JfMjQyXzEpKQorCQkJcEh3RGF0YS0+cGh5X3R5cGUgPSBwV2IzNVJlZy0+RUVQUk9NUGh5VHlwZTsKKwl9CisKKwkvLyBQb3dlciBPbiBwcm9jZWR1cmUgcnVubmluZy4gVGhlIHJlbGF0aXZlIHBhcmFtZXRlciB3aWxsIGJlIHNldCBhY2NvcmRpbmcgdG8gcGh5X3R5cGUKKwlVeHhfcG93ZXJfb25fcHJvY2VkdXJlKCBwSHdEYXRhICk7CisKKwkvLyBSZWFkaW5nIE1BQyBhZGRyZXNzCisJVXh4X1JlYWRFdGhlcm5ldEFkZHJlc3MoIHBId0RhdGEgKTsKKworCS8vIFJlYWQgVkNPIHRyaW0gZm9yIFJGIHBhcmFtZXRlcgorCVdiMzVSZWdfV3JpdGVTeW5jKCBwSHdEYXRhLCAweDAzYjQsIDB4MDgyMDAwMDAgKTsKKwlXYjM1UmVnX1JlYWRTeW5jKCBwSHdEYXRhLCAweDAzYjQsICZWQ09fdHJpbSApOworCisJLy8gUmVhZCBBbnRlbm5hIE9uL09mZiBvZiBzb2Z0d2FyZSBmbGFnCisJV2IzNVJlZ19Xcml0ZVN5bmMoIHBId0RhdGEsIDB4MDNiNCwgMHgwODIxMDAwMCApOworCVdiMzVSZWdfUmVhZFN5bmMoIHBId0RhdGEsIDB4MDNiNCwgJlNvZnR3YXJlU2V0ICk7CisKKwkvLyBSZWFkIFRYVkdBCisJV2IzNVJlZ19Xcml0ZVN5bmMoIHBId0RhdGEsIDB4MDNiNCwgMHgwODEwMDAwMCApOworCVdiMzVSZWdfUmVhZFN5bmMoIHBId0RhdGEsIDB4MDNiNCwgJlR4VmdhICk7CisKKwkvLyBHZXQgU2NhbiBpbnRlcnZhbCBzZXR0aW5nIGZyb20gRUVQUk9NIG9mZnNldCAweDFjCisJV2IzNVJlZ19Xcml0ZVN5bmMoIHBId0RhdGEsIDB4MDNiNCwgMHgwODFkMDAwMCApOworCVdiMzVSZWdfUmVhZFN5bmMoIHBId0RhdGEsIDB4MDNiNCwgJlJlZ2lvbl9TY2FuSW50ZXJ2YWwgKTsKKworCS8vIFVwZGF0ZSBFdGhlcm5ldCBhZGRyZXNzCisJbWVtY3B5KCBwSHdEYXRhLT5DdXJyZW50TWFjQWRkcmVzcywgcEh3RGF0YS0+UGVybWFuZW50TWFjQWRkcmVzcywgRVRIX0xFTkdUSF9PRl9BRERSRVNTICk7CisKKwkvLyBVcGRhdGUgc29mdHdhcmUgdmFyaWFibGUKKwlwSHdEYXRhLT5Tb2Z0d2FyZVNldCA9ICh1MTYpKFNvZnR3YXJlU2V0ICYgMHhmZmZmKTsKKwlUeFZnYSAmPSAweDAwMDAwMGZmOworCXBId0RhdGEtPlBvd2VySW5kZXhGcm9tRUVQUk9NID0gKHU4KVR4VmdhOworCXBId0RhdGEtPlZDT190cmltID0gKHU4KVZDT190cmltICYgMHhmZjsKKwlpZiAocEh3RGF0YS0+VkNPX3RyaW0gPT0gMHhmZikKKwkJcEh3RGF0YS0+VkNPX3RyaW0gPSAweDI4OworCisJcFdiMzVSZWctPkVFUFJPTVJlZ2lvbiA9ICh1OCkoUmVnaW9uX1NjYW5JbnRlcnZhbD4+OCk7IC8vIDIwMDYwNzIwCisJaWYoIHBXYjM1UmVnLT5FRVBST01SZWdpb248MSB8fCBwV2IzNVJlZy0+RUVQUk9NUmVnaW9uPjYgKQorCQlwV2IzNVJlZy0+RUVQUk9NUmVnaW9uID0gUkVHSU9OX0FVVE87CisKKwkvL0ZvciBHZXQgVHggVkdBIGZyb20gRUVQUk9NIDIwMDYwMzE1LjUgbW92ZSBoZXJlCisJR2V0VHhWZ2FGcm9tRUVQUk9NKCBwSHdEYXRhICk7CisKKwkvLyBTZXQgU2NhbiBJbnRlcnZhbAorCXBId0RhdGEtPlNjYW5fSW50ZXJ2YWwgPSAodTgpKFJlZ2lvbl9TY2FuSW50ZXJ2YWwgJiAweGZmKSAqIDEwOworCWlmICgocEh3RGF0YS0+U2Nhbl9JbnRlcnZhbCA9PSAyNTUwKSB8fCAocEh3RGF0YS0+U2Nhbl9JbnRlcnZhbCA8IDEwKSkgLy8gSXMgZGVmYXVsdCBzZXR0aW5nIDB4ZmYgKiAxMAorCQlwSHdEYXRhLT5TY2FuX0ludGVydmFsID0gU0NBTl9NQVhfQ0hOTF9USU1FOworCisJLy8gSW5pdGlhbCByZWdpc3RlcgorCVJGU3ludGhlc2l6ZXJfaW5pdGlhbChwSHdEYXRhKTsKKworCUJCUHJvY2Vzc29yX2luaXRpYWwocEh3RGF0YSk7IC8vIEFzeW5jIHdyaXRlLCBtdXN0IHdhaXQgdW50aWwgY29tcGxldGUKKworCVdiMzVSZWdfcGh5X2NhbGlicmF0aW9uKHBId0RhdGEpOworCisJTXh4X2luaXRpYWwocEh3RGF0YSk7CisJRHh4X2luaXRpYWwocEh3RGF0YSk7CisKKwlpZiAocEh3RGF0YS0+U3VycHJpc2VSZW1vdmUpCisJCXJldHVybiBGQUxTRTsKKwllbHNlCisJCXJldHVybiBUUlVFOyAvLyBJbml0aWFsIGZhaWwKK30KKworLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8gIENhcmRDb21wdXRlQ3JjIC0tCisvLworLy8gIERlc2NyaXB0aW9uOgorLy8gICAgUnVucyB0aGUgQVVUT0RJTiBJSSBDUkMgYWxnb3JpdGhtIG9uIGJ1ZmZlciBCdWZmZXIgb2YgbGVuZ3RoLCBMZW5ndGguCisvLworLy8gIEFyZ3VtZW50czoKKy8vICAgIEJ1ZmZlciAtIHRoZSBpbnB1dCBidWZmZXIKKy8vICAgIExlbmd0aCAtIHRoZSBsZW5ndGggb2YgQnVmZmVyCisvLworLy8gIFJldHVybiBWYWx1ZToKKy8vICAgIFRoZSAzMi1iaXQgQ1JDIHZhbHVlLgorLy8KKy8vICBOb3RlOgorLy8gICAgVGhpcyBpcyBhZGFwdGVkIGZyb20gdGhlIGNvbW1lbnRzIGluIHRoZSBhc3NlbWJseSBsYW5ndWFnZQorLy8gICAgdmVyc2lvbiBpbiBfR0VOUkVRLkFTTSBvZiB0aGUgRFdCIE5FMTAwMC8yMDAwIGRyaXZlci4KKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQordTMyCitDYXJkQ29tcHV0ZUNyYyhQVUNIQVIgQnVmZmVyLCB1MzIgTGVuZ3RoKQoreworICAgIHUzMiBDcmMsIENhcnJ5OworICAgIHUzMiAgaSwgajsKKyAgICB1OCBDdXJCeXRlOworCisgICAgQ3JjID0gMHhmZmZmZmZmZjsKKworICAgIGZvciAoaSA9IDA7IGkgPCBMZW5ndGg7IGkrKykgeworCisgICAgICAgIEN1ckJ5dGUgPSBCdWZmZXJbaV07CisKKyAgICAgICAgZm9yIChqID0gMDsgaiA8IDg7IGorKykgeworCisgICAgICAgICAgICBDYXJyeSAgICAgPSAoKENyYyAmIDB4ODAwMDAwMDApID8gMSA6IDApIF4gKEN1ckJ5dGUgJiAweDAxKTsKKyAgICAgICAgICAgIENyYyAgICAgPDw9IDE7CisgICAgICAgICAgICBDdXJCeXRlID4+PSAxOworCisgICAgICAgICAgICBpZiAoQ2FycnkpIHsKKyAgICAgICAgICAgICAgICBDcmMgPShDcmMgXiAweDA0YzExZGI2KSB8IENhcnJ5OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIENyYzsKK30KKworCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8gQml0UmV2ZXJzZSAtLQorLy8gICBSZXZlcnNlIHRoZSBiaXRzIGluIHRoZSBpbnB1dCBhcmd1bWVudCwgZHdEYXRhLCB3aGljaCBpcworLy8gICByZWdhcmRlZCBhcyBhIHN0cmluZyBvZiBiaXRzIHdpdGggdGhlIGxlbmd0aCwgRGF0YUxlbmd0aC4KKy8vCisvLyBBcmd1bWVudHM6CisvLyAgIGR3RGF0YSAgICAgOgorLy8gICBEYXRhTGVuZ3RoIDoKKy8vCisvLyBSZXR1cm46CisvLyAgIFRoZSBjb252ZXJ0ZWQgdmFsdWUuCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQordTMyIEJpdFJldmVyc2UoIHUzMiBkd0RhdGEsIHUzMiBEYXRhTGVuZ3RoKQoreworCXUzMiAgIEhhbGZMZW5ndGgsIGksIGo7CisJdTMyICAgQml0QSwgQml0QjsKKworCWlmICggRGF0YUxlbmd0aCA8PSAwKSAgICAgICByZXR1cm4gMDsgICAvLyBObyBjb252ZXJzaW9uIGlzIGRvbmUuCisJZHdEYXRhID0gZHdEYXRhICYgKDB4ZmZmZmZmZmYgPj4gKDMyIC0gRGF0YUxlbmd0aCkpOworCisJSGFsZkxlbmd0aCA9IERhdGFMZW5ndGggLyAyOworCWZvciAoIGkgPSAwLCBqID0gRGF0YUxlbmd0aC0xIDsgaSA8IEhhbGZMZW5ndGg7IGkrKywgai0tKQorCXsKKwkJQml0QSA9IEdldEJpdCggZHdEYXRhLCBpKTsKKwkJQml0QiA9IEdldEJpdCggZHdEYXRhLCBqKTsKKwkJaWYgKEJpdEEgJiYgIUJpdEIpIHsKKwkJCWR3RGF0YSA9IENsZWFyQml0KCBkd0RhdGEsIGkpOworCQkJZHdEYXRhID0gU2V0Qml0KCBkd0RhdGEsIGopOworCQl9IGVsc2UgaWYgKCFCaXRBICYmIEJpdEIpIHsKKwkJCWR3RGF0YSA9IFNldEJpdCggZHdEYXRhLCBpKTsKKwkJCWR3RGF0YSA9IENsZWFyQml0KCBkd0RhdGEsIGopOworCQl9IGVsc2UKKwkJeworCQkJLy8gRG8gbm90aGluZyBzaW5jZSB0aGVzZSB0d28gYml0cyBhcmUgb2YgdGhlIHNhdmUgdmFsdWVzLgorCQl9CisJfQorCisJcmV0dXJuIGR3RGF0YTsKK30KKwordm9pZCBXYjM1UmVnX3BoeV9jYWxpYnJhdGlvbiggIHBod19kYXRhX3QgcEh3RGF0YSApCit7CisJdTMyIEJCM2MsIEJCNTQ7CisKKwlpZiAoKHBId0RhdGEtPnBoeV90eXBlID09IFJGX1dCXzI0MikgfHwKKwkJKHBId0RhdGEtPnBoeV90eXBlID09IFJGX1dCXzI0Ml8xKSkgeworCQlwaHlfY2FsaWJyYXRpb25fd2luYm9uZCAoIHBId0RhdGEsIDI0MTIgKTsgLy8gU3luYyBvcGVyYXRpb24KKwkJV2IzNVJlZ19SZWFkU3luYyggcEh3RGF0YSwgMHgxMDNjLCAmQkIzYyApOworCQlXYjM1UmVnX1JlYWRTeW5jKCBwSHdEYXRhLCAweDEwNTQsICZCQjU0ICk7CisKKwkJcEh3RGF0YS0+QkIzY19jYWwgPSBCQjNjOworCQlwSHdEYXRhLT5CQjU0X2NhbCA9IEJCNTQ7CisKKwkJUkZTeW50aGVzaXplcl9pbml0aWFsKHBId0RhdGEpOworCQlCQlByb2Nlc3Nvcl9pbml0aWFsKHBId0RhdGEpOyAvLyBBc3luYyBvcGVyYXRpb24KKworCQlXYjM1UmVnX1dyaXRlU3luYyggcEh3RGF0YSwgMHgxMDNjLCBCQjNjICk7CisJCVdiMzVSZWdfV3JpdGVTeW5jKCBwSHdEYXRhLCAweDEwNTQsIEJCNTQgKTsKKwl9Cit9CisKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvbGludXgvd2IzNXJlZ19mLmggYi9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9saW51eC93YjM1cmVnX2YuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOGUyOTA2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvbGludXgvd2IzNXJlZ19mLmgKQEAgLTAsMCArMSw1NiBAQAorLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vIEludGVyZmFjZSBmdW5jdGlvbiBkZWNsYXJlCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQordW5zaWduZWQgY2hhciBXYjM1UmVnX2luaXRpYWwoICBwaHdfZGF0YV90IHBId0RhdGEgKTsKK3ZvaWQgVXh4X3Bvd2VyX29uX3Byb2NlZHVyZSggIHBod19kYXRhX3QgcEh3RGF0YSApOwordm9pZCBVeHhfcG93ZXJfb2ZmX3Byb2NlZHVyZSggIHBod19kYXRhX3QgcEh3RGF0YSApOwordm9pZCBVeHhfUmVhZEV0aGVybmV0QWRkcmVzcyggIHBod19kYXRhX3QgcEh3RGF0YSApOwordm9pZCBEeHhfaW5pdGlhbCggIHBod19kYXRhX3QgcEh3RGF0YSApOwordm9pZCBNeHhfaW5pdGlhbCggIHBod19kYXRhX3QgcEh3RGF0YSApOwordm9pZCBSRlN5bnRoZXNpemVyX2luaXRpYWwoICBwaHdfZGF0YV90IHBId0RhdGEgKTsKKy8vdm9pZCBSRlN5bnRoZXNpemVyX1N3aXRjaGluZ0NoYW5uZWwoICBwaHdfZGF0YV90IHBId0RhdGEsICBzOCBDaGFubmVsICk7Cit2b2lkIFJGU3ludGhlc2l6ZXJfU3dpdGNoaW5nQ2hhbm5lbCggIHBod19kYXRhX3QgcEh3RGF0YSwgIENoYW5JbmZvIENoYW5uZWwgKTsKK3ZvaWQgQkJQcm9jZXNzb3JfaW5pdGlhbCggIHBod19kYXRhX3QgcEh3RGF0YSApOwordm9pZCBCQlByb2Nlc3Nvcl9SYXRlQ2hhbmdpbmcoICBwaHdfZGF0YV90IHBId0RhdGEsICB1OCByYXRlICk7IC8vIDIwMDYwNjEzLjEKKy8vdm9pZCBSRl9SYXRlQ2hhbmdpbmcoICBwaHdfZGF0YV90IHBId0RhdGEsICB1OCByYXRlICk7IC8vIDIwMDYwNjI2LjUuYyBBZGQKK3U4IFJGU3ludGhlc2l6ZXJfU2V0UG93ZXJJbmRleCggIHBod19kYXRhX3QgcEh3RGF0YSwgIHU4IFBvd2VySW5kZXggKTsKK3U4IFJGU3ludGhlc2l6ZXJfU2V0TWF4aW0yODI4XzI0UG93ZXIoICBwaHdfZGF0YV90LCAgdTggaW5kZXggKTsKK3U4IFJGU3ludGhlc2l6ZXJfU2V0TWF4aW0yODI4XzUwUG93ZXIoICBwaHdfZGF0YV90LCAgdTggaW5kZXggKTsKK3U4IFJGU3ludGhlc2l6ZXJfU2V0TWF4aW0yODI3XzI0UG93ZXIoICBwaHdfZGF0YV90LCAgdTggaW5kZXggKTsKK3U4IFJGU3ludGhlc2l6ZXJfU2V0TWF4aW0yODI3XzUwUG93ZXIoICBwaHdfZGF0YV90LCAgdTggaW5kZXggKTsKK3U4IFJGU3ludGhlc2l6ZXJfU2V0TWF4aW0yODI1UG93ZXIoICBwaHdfZGF0YV90LCAgdTggaW5kZXggKTsKK3U4IFJGU3ludGhlc2l6ZXJfU2V0QWlyb2hhMjIzMFBvd2VyKCAgcGh3X2RhdGFfdCwgIHU4IGluZGV4ICk7Cit1OCBSRlN5bnRoZXNpemVyX1NldEFpcm9oYTcyMzBQb3dlciggIHBod19kYXRhX3QsICB1OCBpbmRleCApOwordTggUkZTeW50aGVzaXplcl9TZXRXaW5ib25kMjQyUG93ZXIoICBwaHdfZGF0YV90LCAgdTggaW5kZXggKTsKK3ZvaWQgR2V0VHhWZ2FGcm9tRUVQUk9NKCAgcGh3X2RhdGFfdCBwSHdEYXRhICk7Cit2b2lkIEVFUFJPTVR4VmdhQWRqdXN0KCAgcGh3X2RhdGFfdCBwSHdEYXRhICk7IC8vIDIwMDYwNjE5LjUgQWRkCisKKyNkZWZpbmUgUkZXcml0ZUNvbnRyb2xEYXRhKCBfQSwgX1YgKSBXYjM1UmVnX1dyaXRlKCBfQSwgMHgwODY0LCBfViApCisKK3ZvaWQgV2IzNVJlZ19kZXN0cm95KCAgcGh3X2RhdGFfdCBwSHdEYXRhICk7CisKK3Vuc2lnbmVkIGNoYXIgV2IzNVJlZ19SZWFkKCAgcGh3X2RhdGFfdCBwSHdEYXRhLCAgdTE2IFJlZ2lzdGVyTm8sICAgUFVMT05HIHBSZWdpc3RlclZhbHVlICk7Cit1bnNpZ25lZCBjaGFyIFdiMzVSZWdfUmVhZFN5bmMoICBwaHdfZGF0YV90IHBId0RhdGEsICB1MTYgUmVnaXN0ZXJObywgICBQVUxPTkcgcFJlZ2lzdGVyVmFsdWUgKTsKK3Vuc2lnbmVkIGNoYXIgV2IzNVJlZ19Xcml0ZSggIHBod19kYXRhX3QgcEh3RGF0YSwgIHUxNiBSZWdpc3Rlck5vLCAgdTMyIFJlZ2lzdGVyVmFsdWUgKTsKK3Vuc2lnbmVkIGNoYXIgV2IzNVJlZ19Xcml0ZVN5bmMoICBwaHdfZGF0YV90IHBId0RhdGEsICB1MTYgUmVnaXN0ZXJObywgIHUzMiBSZWdpc3RlclZhbHVlICk7Cit1bnNpZ25lZCBjaGFyIFdiMzVSZWdfV3JpdGVXaXRoQ2FsbGJhY2tWYWx1ZSggIHBod19kYXRhX3QgcEh3RGF0YSwKKwkJCQkJCQkJIHUxNiBSZWdpc3Rlck5vLAorCQkJCQkJCQkgdTMyIFJlZ2lzdGVyVmFsdWUsCisJCQkJCQkJCSBQQ0hBUiBwVmFsdWUsCisJCQkJCQkJCSBzOAlMZW4pOwordW5zaWduZWQgY2hhciBXYjM1UmVnX0J1cnN0V3JpdGUoICBwaHdfZGF0YV90IHBId0RhdGEsICB1MTYgUmVnaXN0ZXJObywgIFBVTE9ORyBwUmVnaXN0ZXJEYXRhLCAgdTggTnVtYmVyT2ZEYXRhLCAgdTggRmxhZyApOworCit2b2lkIFdiMzVSZWdfRVAwVk0oICBwaHdfZGF0YV90IHBId0RhdGEgKTsKK3ZvaWQgV2IzNVJlZ19FUDBWTV9zdGFydCggIHBod19kYXRhX3QgcEh3RGF0YSApOwordm9pZCBXYjM1UmVnX0VQMFZNX2NvbXBsZXRlKCAgUFVSQiBwVXJiICk7CisKK3UzMiBCaXRSZXZlcnNlKCB1MzIgZHdEYXRhLCB1MzIgRGF0YUxlbmd0aCk7CisKK3ZvaWQgQ2FyZEdldE11bHRpY2FzdEJpdCggICB1OCBBZGRyZXNzW01BQ19BRERSX0xFTkdUSF0sICB1OCAqQnl0ZSwgIHU4ICpWYWx1ZSApOwordTMyIENhcmRDb21wdXRlQ3JjKCAgUFVDSEFSIEJ1ZmZlciwgIHUzMiBMZW5ndGggKTsKKwordm9pZCBXYjM1UmVnX3BoeV9jYWxpYnJhdGlvbiggIHBod19kYXRhX3QgcEh3RGF0YSApOwordm9pZCBXYjM1UmVnX1VwZGF0ZSggIHBod19kYXRhX3QgcEh3RGF0YSwgIHUxNiBSZWdpc3Rlck5vLCAgdTMyIFJlZ2lzdGVyVmFsdWUgKTsKK3Vuc2lnbmVkIGNoYXIgYWRqdXN0X1RYVkdBX2Zvcl9pcV9tYWcoICBwaHdfZGF0YV90IHBId0RhdGEgKTsKKworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9saW51eC93YjM1cmVnX3MuaCBiL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL2xpbnV4L3diMzVyZWdfcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3NTk1YjEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9saW51eC93YjM1cmVnX3MuaApAQCAtMCwwICsxLDE3MCBAQAorLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8qCisJCQkJSEFMIHNldHRpbmcgZnVuY3Rpb24KKworCQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJCXxVeHh8IAl8RHh4fAl8TXh4fAl8QkJ8CXxSRnwKKwkJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCQkJfAkJCQkJfAorCQlXYjM1UmVnX1JlYWQJCVdiMzVSZWdfV3JpdGUKKworCQktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJCQkJV2JVc2JfQ2FsbFVTQkRBU3luYwkJCQkJc3VwcGxpZWQgQnkgV2JVc2IgbW9kdWxlCisqLworLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworI2RlZmluZSAgICAgR2V0Qml0KCBkd0RhdGEsIGkpICAgICAgKCBkd0RhdGEgJiAoMHgwMDAwMDAwMSA8PCBpKSkKKyNkZWZpbmUgICAgIFNldEJpdCggZHdEYXRhLCBpKSAgICAgICggZHdEYXRhIHwgKDB4MDAwMDAwMDEgPDwgaSkpCisjZGVmaW5lICAgICBDbGVhckJpdCggZHdEYXRhLCBpKSAgICAoIGR3RGF0YSAmIH4oMHgwMDAwMDAwMSA8PCBpKSkKKworI2RlZmluZQkJSUdOT1JFX0lOQ1JFTUVOVAkwCisjZGVmaW5lCQlBVVRPX0lOQ1JFTUVOVAkJMAorI2RlZmluZQkJTk9fSU5DUkVNRU5UCQkxCisjZGVmaW5lIFJFR19ESVJFQ1RJT04oX3gsX3kpICAgKChfeSktPkRJUkVDVCA9PTAgPyB1c2JfcmN2Y3RybHBpcGUoX3gsMCkgOiB1c2Jfc25kY3RybHBpcGUoX3gsMCkpCisjZGVmaW5lIFJFR19CVUZfU0laRShfeCkgICAgICAgKChfeCktPmJSZXF1ZXN0PT0gMHgwNCA/IGNwdV90b19sZTE2KChfeCktPndMZW5ndGgpIDogNCkKKworLy8gMjAwNjA2MTMuMiBBZGQgdGhlIGZvbGxvdyBkZWZpbml0aW9uCisjZGVmaW5lIEJCNDhfREVGQVVMVF9BTDIyMzBfMTFCCQkweDAwMzM0NDdjCisjZGVmaW5lIEJCNENfREVGQVVMVF9BTDIyMzBfMTFCCQkweDBBMDBGRUZGCisjZGVmaW5lIEJCNDhfREVGQVVMVF9BTDIyMzBfMTFHCQkweDAwMzMyQzFCCisjZGVmaW5lIEJCNENfREVGQVVMVF9BTDIyMzBfMTFHCQkweDBBMDBGRUZGCisKKworI2RlZmluZSBCQjQ4X0RFRkFVTFRfV0IyNDJfMTFCCQkweDAwMjkyMzE1CS8vYmFja29mZiAgMmRCCisjZGVmaW5lIEJCNENfREVGQVVMVF9XQjI0Ml8xMUIJCTB4MDgwMEZFRkYJLy9iYWNrb2ZmICAyZEIKKy8vI2RlZmluZSBCQjQ4X0RFRkFVTFRfV0IyNDJfMTFCCQkweDAwMjAxQjExCS8vYmFja29mZiAgNGRCCisvLyNkZWZpbmUgQkI0Q19ERUZBVUxUX1dCMjQyXzExQgkJMHgwNjAwRkYwMAkvL2JhY2tvZmYgIDRkQgorI2RlZmluZSBCQjQ4X0RFRkFVTFRfV0IyNDJfMTFHCQkweDAwNDUzQjI0CisjZGVmaW5lIEJCNENfREVGQVVMVF9XQjI0Ml8xMUcJCTB4MEUwMEZFRkYKKworLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vIERlZmF1bHQgc2V0dGluZyBmb3IgTXh4CisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorI2RlZmluZSBERUZBVUxUX0NXTUlOCQkJCQkzMQkJLy8oTTJDKSBDV21pbi4gSXRzIHZhbHVlIGlzIGluIHRoZSByYW5nZSAwLTMxLgorI2RlZmluZSBERUZBVUxUX0NXTUFYCQkJCQkxMDIzCS8vKE0yQykgQ1dtYXguIEl0cyB2YWx1ZSBpcyBpbiB0aGUgcmFuZ2UgMC0xMDIzLgorI2RlZmluZSBERUZBVUxUX0FJRAkJCQkJCTEJCS8vKE0zNCkgQUlELiBJdHMgdmFsdWUgaXMgaW4gdGhlIHJhbmdlIDEtMjAwNy4KKworI2lmZGVmIF9VU0VfRkFMTEJBQ0tfUkFURV8KKyNkZWZpbmUgREVGQVVMVF9SQVRFX1JFVFJZX0xJTUlUCQkyCQkvLyhNMzgpIGFzIG5hbWVkCisjZWxzZQorI2RlZmluZSBERUZBVUxUX1JBVEVfUkVUUllfTElNSVQJCTcJCS8vKE0zOCkgYXMgbmFtZWQKKyNlbmRpZgorCisjZGVmaW5lIERFRkFVTFRfTE9OR19SRVRSWV9MSU1JVAkJNwkJLy8oTTM4KSBMb25nUmV0cnlMaW1pdC4gSXRzIHZhbHVlIGlzIGluIHRoZSByYW5nZSAwLTE1LgorI2RlZmluZSBERUZBVUxUX1NIT1JUX1JFVFJZX0xJTUlUCQk3CQkvLyhNMzgpIFNob3J0UmV0cnlMaW1pdC4gSXRzIHZhbHVlIGlzIGluIHRoZSByYW5nZSAwLTE1LgorI2RlZmluZSBERUZBVUxUX1BJRlNUCQkJCQkyNQkJLy8oTTNDKSBQSUZTIFRpbWUuIEl0cyB2YWx1ZSBpcyBpbiB0aGUgcmFuZ2UgMC02NTUzNS4KKyNkZWZpbmUgREVGQVVMVF9FSUZTVAkJCQkJMzU0CQkvLyhNM0MpIEVJRlMgVGltZS4gSXRzIHZhbHVlIGlzIGluIHRoZSByYW5nZSAwLTEwNDg1NzUuCisjZGVmaW5lIERFRkFVTFRfRElGU1QJCQkJCTQ1CQkvLyhNM0MpIERJRlMgVGltZS4gSXRzIHZhbHVlIGlzIGluIHRoZSByYW5nZSAwLTY1NTM1LgorI2RlZmluZSBERUZBVUxUX1NJRlNUCQkJCQk1CQkvLyhNM0MpIFNJRlMgVGltZS4gSXRzIHZhbHVlIGlzIGluIHRoZSByYW5nZSAwLTY1NTM1LgorI2RlZmluZSBERUZBVUxUX09TSUZTVAkJCQkJMTAJCS8vKE0zQykgT3JpZ2luYWwgU0lGUyBUaW1lLiBJdHMgdmFsdWUgaXMgaW4gdGhlIHJhbmdlIDAtMTUuCisjZGVmaW5lIERFRkFVTFRfQVRJTVdECQkJCQkwCQkvLyhNNDApIEFUSU0gV2luZG93LiBJdHMgdmFsdWUgaXMgaW4gdGhlIHJhbmdlIDAtNjU1MzUuCisjZGVmaW5lIERFRkFVTFRfU0xPVF9USU1FCQkJCTIwCQkvLyhNNDApICgkKSBTbG90VGltZS4gSXRzIHZhbHVlIGlzIGluIHRoZSByYW5nZSAwLTI1NS4KKyNkZWZpbmUgREVGQVVMVF9NQVhfVFhfTVNEVV9MSUZFX1RJTUUJNTEyCS8vKE00NCkgTWF4VHhNU0RVTGlmZVRpbWUuIEl0cyB2YWx1ZSBpcyBpbiB0aGUgcmFuZ2UgMC00Mjk0OTY3Mjk1LgorI2RlZmluZSBERUZBVUxUX0JFQUNPTl9JTlRFUlZBTAkJCTUwMAkJLy8oTTQ4KSBCZWFjb24gSW50ZXJ2YWwuIEl0cyB2YWx1ZSBpcyBpbiB0aGUgcmFuZ2UgMC02NTUzNS4KKyNkZWZpbmUgREVGQVVMVF9QUk9CRV9ERUxBWV9USU1FCQkyMDAJCS8vKE00OCkgUHJvYmUgRGVsYXkgVGltZS4gSXRzIHZhbHVlIGlzIGluIHRoZSByYW5nZSAwLTY1NTM1LgorI2RlZmluZSBERUZBVUxUX1BST1RPQ09MX1ZFUlNJT04JCTAJCS8vKE00QykKKyNkZWZpbmUgREVGQVVMVF9NQUNfUE9XRVJfU1RBVEUJCQkyCQkvLyhNNEMpIDI6IE1BQyBhdCBwb3dlciBhY3RpdmUKKyNkZWZpbmUgREVGQVVMVF9EVElNX0FMRVJUX1RJTUUJCQkwCisKKwordHlwZWRlZiBzdHJ1Y3QgX1JFR19RVUVVRQoreworICAgIHN0cnVjdCAgdXJiICpwVXJiOworCXZvaWQqCXBVc2JSZXE7CisJdm9pZCoJTmV4dDsKKwl1bmlvbgorCXsKKwkJdTMyCVZBTFVFOworCQlQVUxPTkcJcEJ1ZmZlcjsKKwl9OworCXU4CVJFU0VSVkVEWzRdOy8vIHNwYWNlIHJlc2VydmVkIGZvciBjb21tdW5pY2F0aW9uCisKKyAgICB1MTYJSU5ERVg7IC8vIEZvciBzdG9yaW5nIHRoZSByZWdpc3RlciBpbmRleAorICAgIHU4CVJFU0VSVkVEX1ZBTElEOwkvL0luZGljYXRlIHdoZXRoZXIgdGhlIFJFU0VSVkVEIHNwYWNlIGlzIHZhbGlkIGF0IHRoaXMgY29tbWFuZC4KKwl1OAlESVJFQ1Q7IC8vIDA6SW4gICAxOk91dAorCit9IFJFR19RVUVVRSwgKlBSRUdfUVVFVUU7CisKKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLyBJbnRlcm5hbCB2YXJpYWJsZSBmb3IgbW9kdWxlCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorI2RlZmluZSBNQVhfU1EzX0ZJTFRFUl9TSVpFCQk1Cit0eXBlZGVmIHN0cnVjdCBfV0IzNVJFRworeworCS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCS8vIFJlZ2lzdGVyIEJhbmsgYmFja3VwCisJLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJdTMyCVUxQjA7CQkJLy9iaXQxNiByZWNvcmQgdGhlIGgvdyByYWRpbyBvbi9vZmYgc3RhdHVzCisJdTMyCVUxQkNfTEVEQ29uZmlndXJlOworCXUzMglEMDBfRG1hQ29udHJvbDsKKwl1MzIJTTAwX01hY0NvbnRyb2w7CisJdW5pb24geworCQlzdHJ1Y3QgeworCQkJdTMyCU0wNF9NdWx0aWNhc3RBZGRyZXNzMTsKKwkJCXUzMglNMDhfTXVsdGljYXN0QWRkcmVzczI7CisJCX07CisJCXU4CQlNdWx0aWNhc3RbOF07CS8vIGNvbnRlbnRzIG9mIGNhcmQgbXVsdGljYXN0IHJlZ2lzdGVycworCX07CisKKwl1MzIJTTI0X01hY0NvbnRyb2w7CisJdTMyCU0yOF9NYWNDb250cm9sOworCXUzMglNMkNfTWFjQ29udHJvbDsKKwl1MzIJTTM4X01hY0NvbnRyb2w7CisJdTMyCU0zQ19NYWNDb250cm9sOyAvLyAyMDA2MDIxNCBiYWNrdXAgb25seQorCXUzMglNNDBfTWFjQ29udHJvbDsKKwl1MzIJTTQ0X01hY0NvbnRyb2w7IC8vIDIwMDYwMjE0IGJhY2t1cCBvbmx5CisJdTMyCU00OF9NYWNDb250cm9sOyAvLyAyMDA2MDIxNCBiYWNrdXAgb25seQorCXUzMglNNENfTWFjU3RhdHVzOworCXUzMglNNjBfTWFjQ29udHJvbDsgLy8gMjAwNjAyMTQgYmFja3VwIG9ubHkKKwl1MzIJTTY4X01hY0NvbnRyb2w7IC8vIDIwMDYwMjE0IGJhY2t1cCBvbmx5CisJdTMyCU03MF9NYWNDb250cm9sOyAvLyAyMDA2MDIxNCBiYWNrdXAgb25seQorCXUzMglNNzRfTWFjQ29udHJvbDsgLy8gMjAwNjAyMTQgYmFja3VwIG9ubHkKKwl1MzIJTTc4X0VSUEluZm9ybWF0aW9uOy8vOTMwMjA2LjIuYgorCXUzMglNN0NfTWFjQ29udHJvbDsgLy8gMjAwNjAyMTQgYmFja3VwIG9ubHkKKwl1MzIJTTgwX01hY0NvbnRyb2w7IC8vIDIwMDYwMjE0IGJhY2t1cCBvbmx5CisJdTMyCU04NF9NYWNDb250cm9sOyAvLyAyMDA2MDIxNCBiYWNrdXAgb25seQorCXUzMglNODhfTWFjQ29udHJvbDsgLy8gMjAwNjAyMTQgYmFja3VwIG9ubHkKKwl1MzIJTTk4X01hY0NvbnRyb2w7IC8vIDIwMDYwMjE0IGJhY2t1cCBvbmx5CisKKwkvL1syMDA0MDcyMiBXS10KKwkvL0Jhc2ViYW5kIHJlZ2lzdGVyCisJdTMyCUJCMEM7CS8vIFVzZWQgZm9yIExOQSBjYWxjdWxhdGlvbgorCXUzMglCQjJDOwkvLworCXUzMglCQjMwOwkvLzExYiBhY3F1aXNpdGlvbiBjb250cm9sIHJlZ2lzdGVyCisJdTMyCUJCM0M7CisJdTMyCUJCNDg7CS8vIDIwMDUxMjIxLjEuYSAyMDA2MDYxMy4xIEZpeCBPQlcgaXNzdWUgb2YgMTFiLzExZyByYXRlCisJdTMyCUJCNEM7CS8vIDIwMDYwNjEzLjEgIEZpeCBPQlcgaXNzdWUgb2YgMTFiLzExZyByYXRlCisJdTMyCUJCNTA7CS8vbW9kZSBjb250cm9sIHJlZ2lzdGVyCisJdTMyCUJCNTQ7CisJdTMyIAlCQjU4OwkvL0lRX0FMUEhBCisJdTMyCUJCNUM7CS8vIEZvciB0ZXN0CisJdTMyCUJCNjA7CS8vIGZvciBXVE8gcmVhZCB2YWx1ZQorCisJLy8tLS0tLS0tLS0tLS0tLS0tLS0tCisJLy8gVk0KKwkvLy0tLS0tLS0tLS0tLS0tLS0tLS0KKwlPU19TUElOX0xPQ0sJRVAwVk1fc3Bpbl9sb2NrOyAvLyA0QgorCXUzMgkgICAgICAgIEVQMFZNX3N0YXR1czsvLyQkCisJUFJFR19RVUVVRQkgICAgcFJlZ0ZpcnN0OworCVBSRUdfUVVFVUUJICAgIHBSZWdMYXN0OworCU9TX0FUT01JQyAgICAgICBSZWdGaXJlQ291bnQ7CisKKwkvLyBIYXJkd2FyZSBzdGF0dXMKKwl1OAlFUDB2bV9zdGF0ZTsKKwl1OAltYWNfcG93ZXJfc2F2ZTsKKwl1OAlFRVBST01QaHlUeXBlOyAvLyAwIH4gMTUgZm9yIE1heGltICgwIMSEViBNQVgyODI1LCAxIMSEViBNQVgyODI3LCAyIMSEViBNQVgyODI4LCAzIMSEViBNQVgyODI5KSwKKwkJCQkJCSAgIC8vIDE2IH4gMzEgZm9yIEFpcm9oYSAoMTYgxIRWIEFMMjIzMCwgMTEgLSBBTDcyMzApCisJCQkJCQkgICAvLyAzMiB+IFJlc2VydmVkCisJCQkJCQkgICAvLyAzMyB+IDQ3IEZvciBXQjI0MiAoIDMzIC0gV0IyNDIsIDM0IC0gV0IyNDIgd2l0aCBuZXcgVHh2Z2EgMC41IGRiIHN0ZXApCisJCQkJCQkgICAvLyA0OCB+IDI1NSBBUkUgUkVTRVJWRUQuCisJdTgJRUVQUk9NUmVnaW9uOwkvL1JlZ2lvbiBzZXR0aW5nIGluIEVFUFJPTQorCisJdTMyCVN5bmNJb1BhdXNlOyAvLyBJZiB1c2VyIHVzZSB0aGUgU3luYyBJbyB0byBhY2Nlc3MgSHcsIHRoZW4gcGF1c2UgdGhlIGFzeW5jIGFjY2VzcworCisJdTgJTE5BVmFsdWVbNF07IC8vVGFibGUgZm9yIHNwZWVkIHVwIHJ1bm5pbmcKKwl1MzIJU1EzX2ZpbHRlcltNQVhfU1EzX0ZJTFRFUl9TSVpFXTsKKwl1MzIJU1EzX2luZGV4OworCit9IFdCMzVSRUcsICpQV0IzNVJFRzsKKworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9saW51eC93YjM1cnguYyBiL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL2xpbnV4L3diMzVyeC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI2MTU3ZWIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9saW51eC93YjM1cnguYwpAQCAtMCwwICsxLDMzNyBAQAorLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLyAgQ29weXJpZ2h0IChjKSAxOTk2LTIwMDIgV2luYm9uZCBFbGVjdHJvbmljIENvcnBvcmF0aW9uCisvLworLy8gIE1vZHVsZSBOYW1lOgorLy8gICAgV2IzNVJ4LmMKKy8vCisvLyAgQWJzdHJhY3Q6CisvLyAgICBQcm9jZXNzaW5nIHRoZSBSeCBtZXNzYWdlIGZyb20gZG93biBsYXllcgorLy8KKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorI2luY2x1ZGUgInN5c2RlZi5oIgorCisKK3ZvaWQgV2IzNVJ4X3N0YXJ0KHBod19kYXRhX3QgcEh3RGF0YSkKK3sKKwlQV0IzNVJYIHBXYjM1UnggPSAmcEh3RGF0YS0+V2IzNVJ4OworCisJLy8gQWxsb3cgb25seSBvbmUgdGhyZWFkIHRvIHJ1biBpbnRvIHRoZSBXYjM1UngoKSBmdW5jdGlvbgorCWlmIChPU19BVE9NSUNfSU5DKHBId0RhdGEtPkFkYXB0ZXIsICZwV2IzNVJ4LT5SeEZpcmVDb3VudGVyKSA9PSAxKSB7CisJCXBXYjM1UngtPkVQM3ZtX3N0YXRlID0gVk1fUlVOTklORzsKKwkJV2IzNVJ4KHBId0RhdGEpOworCX0gZWxzZQorCQlPU19BVE9NSUNfREVDKHBId0RhdGEtPkFkYXB0ZXIsICZwV2IzNVJ4LT5SeEZpcmVDb3VudGVyKTsKK30KKworLy8gVGhpcyBmdW5jdGlvbiBjYW5ub3QgcmVlbnRyYWluCit2b2lkIFdiMzVSeCggIHBod19kYXRhX3QgcEh3RGF0YSApCit7CisJUFdCMzVSWAlwV2IzNVJ4ID0gJnBId0RhdGEtPldiMzVSeDsKKwlQVUNIQVIJcFJ4QnVmZmVyQWRkcmVzczsKKwlQVVJCCXBVcmIgPSAoUFVSQilwV2IzNVJ4LT5SeFVyYjsKKwlpbnQJcmV0djsKKwl1MzIJUnhCdWZmZXJJZDsKKworCS8vCisJLy8gSXNzdWluZyBVUkIKKwkvLworCWRvIHsKKwkJaWYgKHBId0RhdGEtPlN1cnByaXNlUmVtb3ZlIHx8IHBId0RhdGEtPkh3U3RvcCkKKwkJCWJyZWFrOworCisJCWlmIChwV2IzNVJ4LT5yeF9oYWx0KQorCQkJYnJlYWs7CisKKwkJLy8gR2V0IFJ4QnVmZmVyJ3MgSUQKKwkJUnhCdWZmZXJJZCA9IHBXYjM1UngtPlJ4QnVmZmVySWQ7CisJCWlmICghcFdiMzVSeC0+UnhPd25lcltSeEJ1ZmZlcklkXSkgeworCQkJLy8gSXQncyBpbXBvc3NpYmxlIHRvIHJ1biBoZXJlLgorCQkJI2lmZGVmIF9QRV9SWF9EVU1QXworCQkJV0JERUJVRygoIlJ4IGRyaXZlciBmaWZvIHVuYXZhaWxhYmxlXG4iKSk7CisJCQkjZW5kaWYKKwkJCWJyZWFrOworCQl9CisKKwkJLy8gVXBkYXRlIGJ1ZmZlciBwb2ludCwgdGhlbiBzdGFydCB0byBidWxraW4gdGhlIGRhdGEgZnJvbSBVU0IKKwkJcFdiMzVSeC0+UnhCdWZmZXJJZCsrOworCQlwV2IzNVJ4LT5SeEJ1ZmZlcklkICU9IE1BWF9VU0JfUlhfQlVGRkVSX05VTUJFUjsKKworCQlwV2IzNVJ4LT5DdXJyZW50UnhCdWZmZXJJZCA9IFJ4QnVmZmVySWQ7CisKKwkJaWYgKDEgIT0gT1NfTUVNT1JZX0FMTE9DKCh2b2lkKiAqKSZwV2IzNVJ4LT5wRFJ4LCBNQVhfVVNCX1JYX0JVRkZFUikpIHsKKwkJCXByaW50aygidzM1dW5kOiBSeCBtZW1vcnkgYWxsb2MgZmFpbGVkXG4iKTsKKwkJCWJyZWFrOworCQl9CisJCXBSeEJ1ZmZlckFkZHJlc3MgPSBwV2IzNVJ4LT5wRFJ4OworCisJCXVzYl9maWxsX2J1bGtfdXJiKHBVcmIsIHBId0RhdGEtPldiVXNiLnVkZXYsCisJCQkJICB1c2JfcmN2YnVsa3BpcGUocEh3RGF0YS0+V2JVc2IudWRldiwgMyksCisJCQkJICBwUnhCdWZmZXJBZGRyZXNzLCBNQVhfVVNCX1JYX0JVRkZFUiwKKwkJCQkgIFdiMzVSeF9Db21wbGV0ZSwgcEh3RGF0YSk7CisKKwkJcFdiMzVSeC0+RVAzdm1fc3RhdGUgPSBWTV9SVU5OSU5HOworCisJCXJldHYgPSB3Yl91c2Jfc3VibWl0X3VyYihwVXJiKTsKKworCQlpZiAocmV0diAhPSAwKSB7CisJCQlwcmludGsoIlJ4IFVSQiBzZW5kaW5nIGVycm9yXG4iKTsKKwkJCWJyZWFrOworCQl9CisJCXJldHVybjsKKwl9IHdoaWxlKEZBTFNFKTsKKworCS8vIFZNIHN0b3AKKwlwV2IzNVJ4LT5FUDN2bV9zdGF0ZSA9IFZNX1NUT1A7CisJT1NfQVRPTUlDX0RFQyggcEh3RGF0YS0+QWRhcHRlciwgJnBXYjM1UngtPlJ4RmlyZUNvdW50ZXIgKTsKK30KKwordm9pZCBXYjM1UnhfQ29tcGxldGUoUFVSQiBwVXJiKQoreworCXBod19kYXRhX3QJcEh3RGF0YSA9IHBVcmItPmNvbnRleHQ7CisJUFdCMzVSWAkJcFdiMzVSeCA9ICZwSHdEYXRhLT5XYjM1Ung7CisJUFVDSEFSCQlwUnhCdWZmZXJBZGRyZXNzOworCXUzMgkJU2l6ZUNoZWNrOworCXUxNgkJQnVsa0xlbmd0aDsKKwl1MzIJCVJ4QnVmZmVySWQ7CisJUjAwX0RFU0NSSVBUT1IgCVIwMDsKKworCS8vIFZhcmlhYmxlIHNldHRpbmcKKwlwV2IzNVJ4LT5FUDN2bV9zdGF0ZSA9IFZNX0NPTVBMRVRFRDsKKwlwV2IzNVJ4LT5FUDNWTV9zdGF0dXMgPSBwVXJiLT5zdGF0dXM7Ly9TdG9yZSB0aGUgbGFzdCByZXN1bHQgb2YgSXJwCisKKwlkbyB7CisJCVJ4QnVmZmVySWQgPSBwV2IzNVJ4LT5DdXJyZW50UnhCdWZmZXJJZDsKKworCQlwUnhCdWZmZXJBZGRyZXNzID0gcFdiMzVSeC0+cERSeDsKKwkJQnVsa0xlbmd0aCA9ICh1MTYpcFVyYi0+YWN0dWFsX2xlbmd0aDsKKworCQkvLyBUaGUgSVJQIGlzIGNvbXBsZXRlZAorCQlwV2IzNVJ4LT5FUDN2bV9zdGF0ZSA9IFZNX0NPTVBMRVRFRDsKKworCQlpZiAocEh3RGF0YS0+U3VycHJpc2VSZW1vdmUgfHwgcEh3RGF0YS0+SHdTdG9wKSAvLyBNdXN0IGJlIGhlcmUsIG9yIFJ4QnVmZmVySWQgaXMgaW52YWxpZAorCQkJYnJlYWs7CisKKwkJaWYgKHBXYjM1UngtPnJ4X2hhbHQpCisJCQlicmVhazsKKworCQkvLyBTdGFydCB0byBwcm9jZXNzIHRoZSBkYXRhIG9ubHkgaW4gc3VjY2Vzc2Z1bCBjb25kaXRpb24KKwkJcFdiMzVSeC0+UnhPd25lclsgUnhCdWZmZXJJZCBdID0gMDsgLy8gU2V0IHRoZSBvd25lciB0byBkcml2ZXIKKwkJUjAwLnZhbHVlID0gbGUzMl90b19jcHUoKihQVUxPTkcpcFJ4QnVmZmVyQWRkcmVzcyk7CisKKwkJLy8gVGhlIFVSQiBpcyBjb21wbGV0ZWQsIGNoZWNrIHRoZSByZXN1bHQKKwkJaWYgKHBXYjM1UngtPkVQM1ZNX3N0YXR1cyAhPSAwKSB7CisJCQkjaWZkZWYgX1BFX1VTQl9TVEFURV9EVU1QXworCQkJV0JERUJVRygoIkVQMyBJb0NvbXBsZXRlUm91dGluZSByZXR1cm4gZXJyb3JcbiIpKTsKKwkJCURlYnVnVXNiZFN0YXR1c0luZm9ybWF0aW9uKCBwV2IzNVJ4LT5FUDNWTV9zdGF0dXMgKTsKKwkJCSNlbmRpZgorCQkJcFdiMzVSeC0+RVAzdm1fc3RhdGUgPSBWTV9TVE9QOworCQkJYnJlYWs7CisJCX0KKworCQkvLyAyMDA2MDIyMCBGb3IgcmVjb3ZlcmluZy4gY2hlY2sgaWYgb3BlcmF0aW5nIGluIHNpbmdsZSBVU0IgbW9kZQorCQlpZiAoIUhBTF9VU0JfTU9ERV9CVVJTVChwSHdEYXRhKSkgeworCQkJU2l6ZUNoZWNrID0gUjAwLlIwMF9yZWNlaXZlX2J5dGVfY291bnQ7ICAvLzIwMDYwOTI2IGFuc29uJ3MgZW5kaWFuCisJCQlpZiAoKFNpemVDaGVjayAmIDB4MDMpID4gMCkKKwkJCQlTaXplQ2hlY2sgLT0gNDsKKwkJCVNpemVDaGVjayA9IChTaXplQ2hlY2sgKyAzKSAmIH4weDAzOworCQkJU2l6ZUNoZWNrICs9IDEyOyAvLyA4ICsgNCBiYWRiZWVmCisJCQlpZiAoKEJ1bGtMZW5ndGggPiAxNjAwKSB8fAorCQkJCShTaXplQ2hlY2sgPiAxNjAwKSB8fAorCQkJCShCdWxrTGVuZ3RoICE9IFNpemVDaGVjaykgfHwKKwkJCQkoQnVsa0xlbmd0aCA9PSAwKSkgeyAvLyBBZGQgZm9yIGZhaWwgVXJiCisJCQkJcFdiMzVSeC0+RVAzdm1fc3RhdGUgPSBWTV9TVE9QOworCQkJCXBXYjM1UngtPkVwM0Vycm9yQ291bnQyKys7CisJCQl9CisJCX0KKworCQkvLyBJbmRpY2F0aW5nIHRoZSByZWNlaXZpbmcgZGF0YQorCQlwV2IzNVJ4LT5CeXRlUmVjZWl2ZWQgKz0gQnVsa0xlbmd0aDsKKwkJcFdiMzVSeC0+UnhCdWZmZXJTaXplWyBSeEJ1ZmZlcklkIF0gPSBCdWxrTGVuZ3RoOworCisJCWlmICghcFdiMzVSeC0+UnhPd25lclsgUnhCdWZmZXJJZCBdKQorCQkJV2IzNVJ4X2luZGljYXRlKHBId0RhdGEpOworCisJCWtmcmVlKHBXYjM1UngtPnBEUngpOworCQkvLyBEbyB0aGUgbmV4dCByZWNlaXZlCisJCVdiMzVSeChwSHdEYXRhKTsKKwkJcmV0dXJuOworCisJfSB3aGlsZShGQUxTRSk7CisKKwlwV2IzNVJ4LT5SeE93bmVyWyBSeEJ1ZmZlcklkIF0gPSAxOyAvLyBTZXQgdGhlIG93bmVyIHRvIGhhcmR3YXJlCisJT1NfQVRPTUlDX0RFQyggcEh3RGF0YS0+QWRhcHRlciwgJnBXYjM1UngtPlJ4RmlyZUNvdW50ZXIgKTsKKwlwV2IzNVJ4LT5FUDN2bV9zdGF0ZSA9IFZNX1NUT1A7Cit9CisKKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQordW5zaWduZWQgY2hhciBXYjM1UnhfaW5pdGlhbChwaHdfZGF0YV90IHBId0RhdGEpCit7CisJUFdCMzVSWCBwV2IzNVJ4ID0gJnBId0RhdGEtPldiMzVSeDsKKworCS8vIEluaXRpYWwgdGhlIEJ1ZmZlciBRdWV1ZQorCVdiMzVSeF9yZXNldF9kZXNjcmlwdG9yKCBwSHdEYXRhICk7CisKKwlwV2IzNVJ4LT5SeFVyYiA9IHdiX3VzYl9hbGxvY191cmIoMCk7CisJcmV0dXJuICghIXBXYjM1UngtPlJ4VXJiKTsKK30KKwordm9pZCBXYjM1Unhfc3RvcChwaHdfZGF0YV90IHBId0RhdGEpCit7CisJUFdCMzVSWCBwV2IzNVJ4ID0gJnBId0RhdGEtPldiMzVSeDsKKworCS8vIENhbmNlbGluZyB0aGUgSXJwIGlmIGFscmVhZHkgc2VuZHMgaXQgb3V0LgorCWlmIChwV2IzNVJ4LT5FUDN2bV9zdGF0ZSA9PSBWTV9SVU5OSU5HKSB7CisJCXVzYl91bmxpbmtfdXJiKCBwV2IzNVJ4LT5SeFVyYiApOyAvLyBPbmx5IHVzZSB1bmxpbmssIGxldCBXYjM1UnhfZGVzdHJveSB0byBmcmVlIHRoZW0KKwkJI2lmZGVmIF9QRV9SWF9EVU1QXworCQlXQkRFQlVHKCgiRVAzIFJ4IHN0b3BcbiIpKTsKKwkJI2VuZGlmCisJfQorfQorCisvLyBOZWVkcyBwcm9jZXNzIGNvbnRleHQKK3ZvaWQgV2IzNVJ4X2Rlc3Ryb3kocGh3X2RhdGFfdCBwSHdEYXRhKQoreworCVBXQjM1UlggcFdiMzVSeCA9ICZwSHdEYXRhLT5XYjM1Ung7CisKKwlkbyB7CisJCU9TX1NMRUVQKDEwMDAwKTsgLy8gRGVsYXkgZm9yIHdhaXRpbmcgZnVuY3Rpb24gZW50ZXIgOTQwNjIzLjEuYQorCX0gd2hpbGUgKHBXYjM1UngtPkVQM3ZtX3N0YXRlICE9IFZNX1NUT1ApOworCU9TX1NMRUVQKDEwMDAwKTsgLy8gRGVsYXkgZm9yIHdhaXRpbmcgZnVuY3Rpb24gZXhpdCA5NDA2MjMuMS5iCisKKwlpZiAocFdiMzVSeC0+UnhVcmIpCisJCXVzYl9mcmVlX3VyYiggcFdiMzVSeC0+UnhVcmIgKTsKKwkjaWZkZWYgX1BFX1JYX0RVTVBfCisJV0JERUJVRygoIldiMzVSeF9kZXN0cm95IE9LXG4iKSk7CisJI2VuZGlmCit9CisKK3ZvaWQgV2IzNVJ4X3Jlc2V0X2Rlc2NyaXB0b3IoICBwaHdfZGF0YV90IHBId0RhdGEgKQoreworCVBXQjM1UlggcFdiMzVSeCA9ICZwSHdEYXRhLT5XYjM1Ung7CisJdTMyCWk7CisKKwlwV2IzNVJ4LT5CeXRlUmVjZWl2ZWQgPSAwOworCXBXYjM1UngtPlJ4UHJvY2Vzc0luZGV4ID0gMDsKKwlwV2IzNVJ4LT5SeEJ1ZmZlcklkID0gMDsKKwlwV2IzNVJ4LT5FUDN2bV9zdGF0ZSA9IFZNX1NUT1A7CisJcFdiMzVSeC0+cnhfaGFsdCA9IDA7CisKKwkvLyBJbml0aWFsIHRoZSBRdWV1ZS4gVGhlIGxhc3QgYnVmZmVyIGlzIHJlc2VydmVkIGZvciB1c2VkIGlmIHRoZSBSeCByZXNvdXJjZSBpcyB1bmF2YWlsYWJsZS4KKwlmb3IoIGk9MDsgaTxNQVhfVVNCX1JYX0JVRkZFUl9OVU1CRVI7IGkrKyApCisJCXBXYjM1UngtPlJ4T3duZXJbaV0gPSAxOworfQorCit2b2lkIFdiMzVSeF9hZGp1c3QoUERFU0NSSVBUT1IgcFJ4RGVzKQoreworCVBVTE9ORwlwUnhCdWZmZXJBZGRyZXNzOworCXUzMglEZWNyeXB0aW9uTWV0aG9kOworCXUzMglpOworCXUxNglCdWZmZXJTaXplOworCisJRGVjcnlwdGlvbk1ldGhvZCA9IHBSeERlcy0+UjAxLlIwMV9kZWNyeXB0aW9uX21ldGhvZDsKKwlwUnhCdWZmZXJBZGRyZXNzID0gcFJ4RGVzLT5idWZmZXJfYWRkcmVzc1swXTsKKwlCdWZmZXJTaXplID0gcFJ4RGVzLT5idWZmZXJfc2l6ZVswXTsKKworCS8vIEFkanVzdCB0aGUgbGFzdCBwYXJ0IG9mIGRhdGEuIE9ubHkgZGF0YSBsZWZ0CisJQnVmZmVyU2l6ZSAtPSA0OyAvLyBGb3IgQ1JDLTMyCisJaWYgKERlY3J5cHRpb25NZXRob2QpCisJCUJ1ZmZlclNpemUgLT0gNDsKKwlpZiAoRGVjcnlwdGlvbk1ldGhvZCA9PSAzKSAvLyBGb3IgQ0NNUAorCQlCdWZmZXJTaXplIC09IDQ7CisKKwkvLyBBZGp1c3QgdGhlIElWIGZpZWxkIHdoaWNoIGFmdGVyIDgwMi4xMSBoZWFkZXIgYW5kIElDViBmaWVsZC4KKwlpZiAoRGVjcnlwdGlvbk1ldGhvZCA9PSAxKSAvLyBGb3IgV0VQCisJeworCQlmb3IoIGk9NjsgaT4wOyBpLS0gKQorCQkJcFJ4QnVmZmVyQWRkcmVzc1tpXSA9IHBSeEJ1ZmZlckFkZHJlc3NbaS0xXTsKKwkJcFJ4RGVzLT5idWZmZXJfYWRkcmVzc1swXSA9IHBSeEJ1ZmZlckFkZHJlc3MgKyAxOworCQlCdWZmZXJTaXplIC09IDQ7IC8vIDQgYnl0ZSBmb3IgSVYKKwl9CisJZWxzZSBpZiggRGVjcnlwdGlvbk1ldGhvZCApIC8vIEZvciBUS0lQIGFuZCBDQ01QCisJeworCQlmb3IgKGk9NzsgaT4xOyBpLS0pCisJCQlwUnhCdWZmZXJBZGRyZXNzW2ldID0gcFJ4QnVmZmVyQWRkcmVzc1tpLTJdOworCQlwUnhEZXMtPmJ1ZmZlcl9hZGRyZXNzWzBdID0gcFJ4QnVmZmVyQWRkcmVzcyArIDI7Ly9VcGRhdGUgdGhlIGRlc2NyaXB0b3IsIHNoaWZ0IDggYnl0ZQorCQlCdWZmZXJTaXplIC09IDg7IC8vIDggYnl0ZSBmb3IgSVYgKyBJQ1YKKwl9CisJcFJ4RGVzLT5idWZmZXJfc2l6ZVswXSA9IEJ1ZmZlclNpemU7Cit9CisKK2V4dGVybiB2b2lkIHBhY2tldF9jYW1lKGNoYXIgKnBSeEJ1ZmZlckFkZHJlc3MsIGludCBQYWNrZXRTaXplKTsKKworCit1MTYgV2IzNVJ4X2luZGljYXRlKHBod19kYXRhX3QgcEh3RGF0YSkKK3sKKwlERVNDUklQVE9SCVJ4RGVzOworCVBXQjM1UlgJcFdiMzVSeCA9ICZwSHdEYXRhLT5XYjM1Ung7CisJUFVDSEFSCQlwUnhCdWZmZXJBZGRyZXNzOworCXUxNgkJUGFja2V0U2l6ZTsKKwl1MTYJCXN0bXAsIEJ1ZmZlclNpemUsIHN0bXAyID0gMDsKKwl1MzIJCVJ4QnVmZmVySWQ7CisKKwkvLyBPbmx5IG9uZSB0aHJlYWQgYmUgYWxsb3dlZCB0byBydW4gaW50byB0aGUgZm9sbG93aW5nCisJZG8geworCQlSeEJ1ZmZlcklkID0gcFdiMzVSeC0+UnhQcm9jZXNzSW5kZXg7CisJCWlmIChwV2IzNVJ4LT5SeE93bmVyWyBSeEJ1ZmZlcklkIF0pIC8vT3duZXIgYnkgVk0KKwkJCWJyZWFrOworCisJCXBXYjM1UngtPlJ4UHJvY2Vzc0luZGV4Kys7CisJCXBXYjM1UngtPlJ4UHJvY2Vzc0luZGV4ICU9IE1BWF9VU0JfUlhfQlVGRkVSX05VTUJFUjsKKworCQlwUnhCdWZmZXJBZGRyZXNzID0gcFdiMzVSeC0+cERSeDsKKwkJQnVmZmVyU2l6ZSA9IHBXYjM1UngtPlJ4QnVmZmVyU2l6ZVsgUnhCdWZmZXJJZCBdOworCisJCS8vIFBhcnNlIHRoZSBidWxraW4gYnVmZmVyCisJCXdoaWxlIChCdWZmZXJTaXplID49IDQpIHsKKwkJCWlmICgoY3B1X3RvX2xlMzIoKihQVUxPTkcpcFJ4QnVmZmVyQWRkcmVzcykgJiAweDBmZmZmZmZmKSA9PSBSWF9FTkRfVEFHKSAvL0lzIGVuZGluZz8gOTIxMDAyLjkuYQorCQkJCWJyZWFrOworCisJCQkvLyBHZXQgdGhlIFIwMCBSMDEgZmlyc3QKKwkJCVJ4RGVzLlIwMC52YWx1ZSA9IGxlMzJfdG9fY3B1KCooUFVMT05HKXBSeEJ1ZmZlckFkZHJlc3MpOworCQkJUGFja2V0U2l6ZSA9ICh1MTYpUnhEZXMuUjAwLlIwMF9yZWNlaXZlX2J5dGVfY291bnQ7CisJCQlSeERlcy5SMDEudmFsdWUgPSBsZTMyX3RvX2NwdSgqKChQVUxPTkcpKHBSeEJ1ZmZlckFkZHJlc3MrNCkpKTsKKwkJCS8vIEZvciBuZXcgRE1BIDRrCisJCQlpZiAoKFBhY2tldFNpemUgJiAweDAzKSA+IDApCisJCQkJUGFja2V0U2l6ZSAtPSA0OworCisJCQkvLyBCYXNpYyBjaGVjayBmb3IgUnggbGVuZ3RoLiBJcyBsZW5ndGggdmFsaWQ/CisJCQlpZiAoUGFja2V0U2l6ZSA+IE1BWF9QQUNLRVRfU0laRSkgeworCQkJCSNpZmRlZiBfUEVfUlhfRFVNUF8KKwkJCQlXQkRFQlVHKCgiU2VyaW91cyBFUlJPUiA6IFJ4IGRhdGEgc2l6ZSB0b28gbG9uZywgc2l6ZSA9JWRcbiIsIFBhY2tldFNpemUpKTsKKwkJCQkjZW5kaWYKKworCQkJCXBXYjM1UngtPkVQM3ZtX3N0YXRlID0gVk1fU1RPUDsKKwkJCQlwV2IzNVJ4LT5FcDNFcnJvckNvdW50MisrOworCQkJCWJyZWFrOworCQkJfQorCisJCQkvLyBTdGFydCB0byBwcm9jZXNzIFJ4IGJ1ZmZlcgorLy8JCQlSeERlcy5EZXNjcmlwdG9yX0lEID0gUnhCdWZmZXJJZDsgLy8gRHVlIHRvIHN5bmNocm9ub3VzIGluZGljYXRlLCB0aGUgZmllbGQgZG9lc24ndCBuZWNlc3NhcnkgdG8gdXNlLgorCQkJQnVmZmVyU2l6ZSAtPSA4OyAvL3N1YnRyYWN0IDggYnl0ZSBmb3IgMzUncyBVU0IgaGVhZGVyIGxlbmd0aAorCQkJcFJ4QnVmZmVyQWRkcmVzcyArPSA4OworCisJCQlSeERlcy5idWZmZXJfYWRkcmVzc1swXSA9IHBSeEJ1ZmZlckFkZHJlc3M7CisJCQlSeERlcy5idWZmZXJfc2l6ZVswXSA9IFBhY2tldFNpemU7CisJCQlSeERlcy5idWZmZXJfbnVtYmVyID0gMTsKKwkJCVJ4RGVzLmJ1ZmZlcl9zdGFydF9pbmRleCA9IDA7CisJCQlSeERlcy5idWZmZXJfdG90YWxfc2l6ZSA9IFJ4RGVzLmJ1ZmZlcl9zaXplWzBdOworCQkJV2IzNVJ4X2FkanVzdCgmUnhEZXMpOworCisJCQlwYWNrZXRfY2FtZShwUnhCdWZmZXJBZGRyZXNzLCBQYWNrZXRTaXplKTsKKworCQkJLy8gTW92ZSBSeEJ1ZmZlciBwb2ludCB0byB0aGUgbmV4dAorCQkJc3RtcCA9IFBhY2tldFNpemUgKyAzOworCQkJc3RtcCAmPSB+MHgwMzsgLy8gNG4gYWxpZ25tZW50CisJCQlwUnhCdWZmZXJBZGRyZXNzICs9IHN0bXA7CisJCQlCdWZmZXJTaXplIC09IHN0bXA7CisJCQlzdG1wMiArPSBzdG1wOworCQl9CisKKwkJLy8gUmVjbGFpbSByZXNvdXJjZQorCQlwV2IzNVJ4LT5SeE93bmVyWyBSeEJ1ZmZlcklkIF0gPSAxOworCX0gd2hpbGUoVFJVRSk7CisKKwlyZXR1cm4gc3RtcDI7Cit9CisKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvbGludXgvd2IzNXJ4X2YuaCBiL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL2xpbnV4L3diMzVyeF9mLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGFhM2U3MwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL2xpbnV4L3diMzVyeF9mLmgKQEAgLTAsMCArMSwxNyBAQAorLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vIEludGVyZmFjZSBmdW5jdGlvbiBkZWNsYXJlCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQordm9pZAkJV2IzNVJ4X3Jlc2V0X2Rlc2NyaXB0b3IoICBwaHdfZGF0YV90IHBId0RhdGEgKTsKK3Vuc2lnbmVkIGNoYXIJCVdiMzVSeF9pbml0aWFsKCAgcGh3X2RhdGFfdCBwSHdEYXRhICk7Cit2b2lkCQlXYjM1UnhfZGVzdHJveSggIHBod19kYXRhX3QgcEh3RGF0YSApOwordm9pZAkJV2IzNVJ4X3N0b3AoICBwaHdfZGF0YV90IHBId0RhdGEgKTsKK3UxNgkJV2IzNVJ4X2luZGljYXRlKCAgcGh3X2RhdGFfdCBwSHdEYXRhICk7Cit2b2lkCQlXYjM1UnhfYWRqdXN0KCAgUERFU0NSSVBUT1IgcFJ4RGVzICk7Cit2b2lkCQlXYjM1Unhfc3RhcnQoICBwaHdfZGF0YV90IHBId0RhdGEgKTsKKwordm9pZAkJV2IzNVJ4KCAgcGh3X2RhdGFfdCBwSHdEYXRhICk7Cit2b2lkCQlXYjM1UnhfQ29tcGxldGUoICBQVVJCIHBVcmIgKTsKKworCisKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvbGludXgvd2IzNXJ4X3MuaCBiL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL2xpbnV4L3diMzVyeF9zLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTNiODMxZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL2xpbnV4L3diMzVyeF9zLmgKQEAgLTAsMCArMSw0OCBAQAorLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLyB3YjM1cnguaCAtLQorLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKy8vIERlZmluaXRpb24gZm9yIHRoaXMgbW9kdWxlIHVzZWQKKyNkZWZpbmUgTUFYX1VTQl9SWF9CVUZGRVIJNDA5NgkvLyBUaGlzIHBhcmFtZXRlciBtdXN0IGJlIDQwOTYgOTMxMTMwLjQuZgorCisjZGVmaW5lIE1BWF9VU0JfUlhfQlVGRkVSX05VTUJFUglFVEhFUk5FVF9SWF9ERVNDUklQVE9SUwkJLy8gTWF4aW11bSAyNTQsIDI1NSBpcyBSRVNFUlZFRCBJRAorI2RlZmluZSBSWF9JTlRFUkZBQ0UJCQkJMAkvLyBJbnRlcmZhY2UgMQorI2RlZmluZSBSWF9QSVBFCQkJCQkJMgkvLyBQaXBlIDMKKyNkZWZpbmUgTUFYX1BBQ0tFVF9TSVpFCQkJCTE2MDAgLy8xNTY4CS8vIDggKyAxNTMyICsgNCArIDI0KElWIEVJViBNSUMgSUNWIENSQykgZm9yIGNoZWNrIERNQSBkYXRhIDkzMTEzMC40LmcKKyNkZWZpbmUgUlhfRU5EX1RBRwkJCQkJMHgwYmFkYmVlZgorCisKKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLyBJbnRlcm5hbCB2YXJpYWJsZSBmb3IgbW9kdWxlCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQordHlwZWRlZiBzdHJ1Y3QgX1dCMzVSWAoreworCXUzMgkJCUJ5dGVSZWNlaXZlZDsvLyBGb3IgY2FsY3VsYXRpbmcgdGhyb3VnaHB1dCBvZiBCdWxrSW4KKwlPU19BVE9NSUMJCVJ4RmlyZUNvdW50ZXI7Ly8gRG9lcyBXYjM1UnggbW9kdWxlIGZpcmU/CisKKwl1OAlSeEJ1ZmZlclsgTUFYX1VTQl9SWF9CVUZGRVJfTlVNQkVSIF1bICgoTUFYX1VTQl9SWF9CVUZGRVIrMykgJiB+MHgwMyApIF07CisJdTE2CVJ4QnVmZmVyU2l6ZVsgKChNQVhfVVNCX1JYX0JVRkZFUl9OVU1CRVIrMSkgJiB+MHgwMSkgXTsKKwl1OAlSeE93bmVyWyAoKE1BWF9VU0JfUlhfQlVGRkVSX05VTUJFUiszKSAmIH4weDAzICkgXTsvL093bmVyc2hpcCBvZiBidWZmZXIgIDA6IFNXIDE6SFcKKworCXUzMglSeFByb2Nlc3NJbmRleDsvL1RoZSBuZXh0IGluZGV4IHRvIHByb2Nlc3MKKwl1MzIJUnhCdWZmZXJJZDsKKwl1MzIJRVAzdm1fc3RhdGU7CisKKwl1MzIJcnhfaGFsdDsgLy8gRm9yIFZNIHN0b3BwaW5nCisKKwl1MTYJTW9yZURhdGFTaXplOworCXUxNglQYWNrZXRTaXplOworCisJdTMyCUN1cnJlbnRSeEJ1ZmZlcklkOyAvLyBGb3IgY29tcGxldGUgcm91dGluZSB1c2FnZQorCXUzMglSeDNVcmJDYW5jZWw7CisKKwl1MzIJTGFzdFIxOyAvLyBGb3IgUlNTSSByZXBvcnRpbmcKKwlzdHJ1Y3QgdXJiICoJCQkJUnhVcmI7CisJdTMyCQlFcDNFcnJvckNvdW50MjsgLy8gMjAwNjA2MjUuMSBVc2JkIGZvciBSeCBETUEgZXJyb3IgY291bnQKKworCWludAkJRVAzVk1fc3RhdHVzOworCVBVQ0hBUglwRFJ4OworCit9IFdCMzVSWCwgKlBXQjM1Ulg7CisKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvbGludXgvd2IzNXR4LmMgYi9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9saW51eC93YjM1dHguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZjE5YzNiCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvbGludXgvd2IzNXR4LmMKQEAgLTAsMCArMSwzMTMgQEAKKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8gIENvcHlyaWdodCAoYykgMTk5Ni0yMDAyIFdpbmJvbmQgRWxlY3Ryb25pYyBDb3Jwb3JhdGlvbgorLy8KKy8vICBNb2R1bGUgTmFtZToKKy8vICAgIFdiMzVUeC5jCisvLworLy8gIEFic3RyYWN0OgorLy8gICAgUHJvY2Vzc2luZyB0aGUgVHggbWVzc2FnZSBhbmQgcHV0IGludG8gZG93biBsYXllcgorLy8KKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorI2luY2x1ZGUgInN5c2RlZi5oIgorCisKK3Vuc2lnbmVkIGNoYXIKK1diMzVUeF9nZXRfdHhfYnVmZmVyKHBod19kYXRhX3QgcEh3RGF0YSwgUFVDSEFSICpwQnVmZmVyICkKK3sKKwlQV0IzNVRYIHBXYjM1VHggPSAmcEh3RGF0YS0+V2IzNVR4OworCisJKnBCdWZmZXIgPSBwV2IzNVR4LT5UeEJ1ZmZlclswXTsKKwlyZXR1cm4gVFJVRTsKK30KKwordm9pZCBXYjM1VHhfc3RhcnQocGh3X2RhdGFfdCBwSHdEYXRhKQoreworCVBXQjM1VFggcFdiMzVUeCA9ICZwSHdEYXRhLT5XYjM1VHg7CisKKwkvLyBBbGxvdyBvbmx5IG9uZSB0aHJlYWQgdG8gcnVuIGludG8gZnVuY3Rpb24KKwlpZiAoT1NfQVRPTUlDX0lOQyhwSHdEYXRhLT5BZGFwdGVyLCAmcFdiMzVUeC0+VHhGaXJlQ291bnRlcikgPT0gMSkgeworCQlwV2IzNVR4LT5FUDR2bV9zdGF0ZSA9IFZNX1JVTk5JTkc7CisJCVdiMzVUeChwSHdEYXRhKTsKKwl9IGVsc2UKKwkJT1NfQVRPTUlDX0RFQyggcEh3RGF0YS0+QWRhcHRlciwgJnBXYjM1VHgtPlR4RmlyZUNvdW50ZXIgKTsKK30KKworCit2b2lkIFdiMzVUeChwaHdfZGF0YV90IHBId0RhdGEpCit7CisJUFdCMzVUWAkJcFdiMzVUeCA9ICZwSHdEYXRhLT5XYjM1VHg7CisJUEFEQVBURVIJQWRhcHRlciA9IHBId0RhdGEtPkFkYXB0ZXI7CisJUFVDSEFSCQlwVHhCdWZmZXJBZGRyZXNzOworCVBNRFMJCXBNZHMgPSAmQWRhcHRlci0+TWRzOworCXN0cnVjdCB1cmIgKglwVXJiID0gKHN0cnVjdCB1cmIgKilwV2IzNVR4LT5UeDRVcmI7CisJaW50ICAgICAgICAgCXJldHY7CisJdTMyCQlTZW5kSW5kZXg7CisKKworCWlmIChwSHdEYXRhLT5TdXJwcmlzZVJlbW92ZSB8fCBwSHdEYXRhLT5Id1N0b3ApCisJCWdvdG8gY2xlYW51cDsKKworCWlmIChwV2IzNVR4LT50eF9oYWx0KQorCQlnb3RvIGNsZWFudXA7CisKKwkvLyBPd25lcnNoaXAgY2hlY2tpbmcKKwlTZW5kSW5kZXggPSBwV2IzNVR4LT5UeFNlbmRJbmRleDsKKwlpZiAoIXBNZHMtPlR4T3duZXJbU2VuZEluZGV4XSkgLy9ObyBtb3JlIGRhdGEgbmVlZCB0byBiZSBzZW50LCByZXR1cm4gaW1tZWRpYXRlbHkKKwkJZ290byBjbGVhbnVwOworCisJcFR4QnVmZmVyQWRkcmVzcyA9IHBXYjM1VHgtPlR4QnVmZmVyW1NlbmRJbmRleF07CisJLy8KKwkvLyBJc3N1aW5nIFVSQgorCS8vCisJdXNiX2ZpbGxfYnVsa191cmIocFVyYiwgcEh3RGF0YS0+V2JVc2IudWRldiwKKwkJCSAgdXNiX3NuZGJ1bGtwaXBlKHBId0RhdGEtPldiVXNiLnVkZXYsIDQpLAorCQkJICBwVHhCdWZmZXJBZGRyZXNzLCBwTWRzLT5UeEJ1ZmZlclNpemVbIFNlbmRJbmRleCBdLAorCQkJICBXYjM1VHhfY29tcGxldGUsIHBId0RhdGEpOworCisJcFdiMzVUeC0+RVA0dm1fc3RhdGUgPSBWTV9SVU5OSU5HOworCXJldHYgPSB3Yl91c2Jfc3VibWl0X3VyYiggcFVyYiApOworCWlmIChyZXR2PDApIHsKKwkJcHJpbnRrKCJFUDQgVHggSXJwIHNlbmRpbmcgZXJyb3JcbiIpOworCQlnb3RvIGNsZWFudXA7CisJfQorCisJLy8gQ2hlY2sgaWYgZHJpdmVyIG5lZWRzIGlzc3VlIElycCBmb3IgRVAyCisJcFdiMzVUeC0+VHhGaWxsQ291bnQgKz0gcE1kcy0+VHhDb3VudEluQnVmZmVyW1NlbmRJbmRleF07CisJaWYgKHBXYjM1VHgtPlR4RmlsbENvdW50ID4gMTIpCisJCVdiMzVUeF9FUDJWTV9zdGFydCggcEh3RGF0YSApOworCisJcFdiMzVUeC0+Qnl0ZVRyYW5zZmVyICs9IHBNZHMtPlR4QnVmZmVyU2l6ZVtTZW5kSW5kZXhdOworCXJldHVybjsKKworIGNsZWFudXA6CisJcFdiMzVUeC0+RVA0dm1fc3RhdGUgPSBWTV9TVE9QOworCU9TX0FUT01JQ19ERUMoIHBId0RhdGEtPkFkYXB0ZXIsICZwV2IzNVR4LT5UeEZpcmVDb3VudGVyICk7Cit9CisKKwordm9pZCBXYjM1VHhfY29tcGxldGUoc3RydWN0IHVyYiAqIHBVcmIpCit7CisJcGh3X2RhdGFfdAlwSHdEYXRhID0gcFVyYi0+Y29udGV4dDsKKwlQQURBUFRFUglBZGFwdGVyID0gKFBBREFQVEVSKXBId0RhdGEtPkFkYXB0ZXI7CisJUFdCMzVUWAkJcFdiMzVUeCA9ICZwSHdEYXRhLT5XYjM1VHg7CisJUE1EUwkJcE1kcyA9ICZBZGFwdGVyLT5NZHM7CisKKwlwcmludGsoIndiMzU6IHR4IGNvbXBsZXRlXG4iKTsKKwkvLyBWYXJpYWJsZSBzZXR0aW5nCisJcFdiMzVUeC0+RVA0dm1fc3RhdGUgPSBWTV9DT01QTEVURUQ7CisJcFdiMzVUeC0+RVA0Vk1fc3RhdHVzID0gcFVyYi0+c3RhdHVzOyAvL1N0b3JlIHRoZSBsYXN0IHJlc3VsdCBvZiBJcnAKKwlwTWRzLT5UeE93bmVyWyBwV2IzNVR4LT5UeFNlbmRJbmRleCBdID0gMDsvLyBTZXQgdGhlIG93bmVyLiBGcmVlIHRoZSBvd25lciBiaXQgYWx3YXlzLgorCXBXYjM1VHgtPlR4U2VuZEluZGV4Kys7CisJcFdiMzVUeC0+VHhTZW5kSW5kZXggJT0gTUFYX1VTQl9UWF9CVUZGRVJfTlVNQkVSOworCisJZG8geworCQlpZiAocEh3RGF0YS0+U3VycHJpc2VSZW1vdmUgfHwgcEh3RGF0YS0+SHdTdG9wKSAvLyBMZXQgV2JXbGFuSGFsdCB0byBoYW5kbGUgc3VycHJpc2UgcmVtb3ZlCisJCQlicmVhazsKKworCQlpZiAocFdiMzVUeC0+dHhfaGFsdCkKKwkJCWJyZWFrOworCisJCS8vIFRoZSBVUkIgaXMgY29tcGxldGVkLCBjaGVjayB0aGUgcmVzdWx0CisJCWlmIChwV2IzNVR4LT5FUDRWTV9zdGF0dXMgIT0gMCkgeworCQkJcHJpbnRrKCJVUkIgc3VibWlzc2lvbiBmYWlsZWRcbiIpOworCQkJcFdiMzVUeC0+RVA0dm1fc3RhdGUgPSBWTV9TVE9QOworCQkJYnJlYWs7IC8vIEV4aXQgd2hpbGUoRkFMU0UpOworCQl9CisKKwkJTWRzX1R4KEFkYXB0ZXIpOworCQlXYjM1VHgocEh3RGF0YSk7CisJCXJldHVybjsKKwl9IHdoaWxlKEZBTFNFKTsKKworCU9TX0FUT01JQ19ERUMoIHBId0RhdGEtPkFkYXB0ZXIsICZwV2IzNVR4LT5UeEZpcmVDb3VudGVyICk7CisJcFdiMzVUeC0+RVA0dm1fc3RhdGUgPSBWTV9TVE9QOworfQorCit2b2lkIFdiMzVUeF9yZXNldF9kZXNjcmlwdG9yKCAgcGh3X2RhdGFfdCBwSHdEYXRhICkKK3sKKwlQV0IzNVRYIHBXYjM1VHggPSAmcEh3RGF0YS0+V2IzNVR4OworCisJcFdiMzVUeC0+VHhTZW5kSW5kZXggPSAwOworCXBXYjM1VHgtPnR4X2hhbHQgPSAwOworfQorCit1bnNpZ25lZCBjaGFyIFdiMzVUeF9pbml0aWFsKHBod19kYXRhX3QgcEh3RGF0YSkKK3sKKwlQV0IzNVRYIHBXYjM1VHggPSAmcEh3RGF0YS0+V2IzNVR4OworCisJcFdiMzVUeC0+VHg0VXJiID0gd2JfdXNiX2FsbG9jX3VyYigwKTsKKwlpZiAoIXBXYjM1VHgtPlR4NFVyYikKKwkJcmV0dXJuIEZBTFNFOworCisJcFdiMzVUeC0+VHgyVXJiID0gd2JfdXNiX2FsbG9jX3VyYigwKTsKKwlpZiAoIXBXYjM1VHgtPlR4MlVyYikKKwl7CisJCXVzYl9mcmVlX3VyYiggcFdiMzVUeC0+VHg0VXJiICk7CisJCXJldHVybiBGQUxTRTsKKwl9CisKKwlyZXR1cm4gVFJVRTsKK30KKworLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK3ZvaWQgV2IzNVR4X3N0b3AocGh3X2RhdGFfdCBwSHdEYXRhKQoreworCVBXQjM1VFggcFdiMzVUeCA9ICZwSHdEYXRhLT5XYjM1VHg7CisKKwkvLyBUcnlpbmcgdG8gY2FuY2VsaW5nIHRoZSBUcnAgb2YgRVAyCisJaWYgKHBXYjM1VHgtPkVQMnZtX3N0YXRlID09IFZNX1JVTk5JTkcpCisJCXVzYl91bmxpbmtfdXJiKCBwV2IzNVR4LT5UeDJVcmIgKTsgLy8gT25seSB1c2UgdW5saW5rLCBsZXQgV2IzNVR4X2Rlc3Ryb3QgdG8gZnJlZSB0aGVtCisJI2lmZGVmIF9QRV9UWF9EVU1QXworCVdCREVCVUcoKCJFUDIgVHggc3RvcFxuIikpOworCSNlbmRpZgorCisJLy8gVHJ5aW5nIHRvIGNhbmNlbGluZyB0aGUgSXJwIG9mIEVQNAorCWlmIChwV2IzNVR4LT5FUDR2bV9zdGF0ZSA9PSBWTV9SVU5OSU5HKQorCQl1c2JfdW5saW5rX3VyYiggcFdiMzVUeC0+VHg0VXJiICk7IC8vIE9ubHkgdXNlIHVubGluaywgbGV0IFdiMzVUeF9kZXN0cm90IHRvIGZyZWUgdGhlbQorCSNpZmRlZiBfUEVfVFhfRFVNUF8KKwlXQkRFQlVHKCgiRVA0IFR4IHN0b3BcbiIpKTsKKwkjZW5kaWYKK30KKworLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK3ZvaWQgV2IzNVR4X2Rlc3Ryb3kocGh3X2RhdGFfdCBwSHdEYXRhKQoreworCVBXQjM1VFggcFdiMzVUeCA9ICZwSHdEYXRhLT5XYjM1VHg7CisKKwkvLyBXYWl0IGZvciBWTSBzdG9wCisJZG8geworCQlPU19TTEVFUCgxMDAwMCk7ICAvLyBEZWxheSBmb3Igd2FpdGluZyBmdW5jdGlvbiBlbnRlciA5NDA2MjMuMS5hCisJfSB3aGlsZSggKHBXYjM1VHgtPkVQMnZtX3N0YXRlICE9IFZNX1NUT1ApICYmIChwV2IzNVR4LT5FUDR2bV9zdGF0ZSAhPSBWTV9TVE9QKSApOworCU9TX1NMRUVQKDEwMDAwKTsgIC8vIERlbGF5IGZvciB3YWl0aW5nIGZ1bmN0aW9uIGVudGVyIDk0MDYyMy4xLmIKKworCWlmIChwV2IzNVR4LT5UeDRVcmIpCisJCXVzYl9mcmVlX3VyYiggcFdiMzVUeC0+VHg0VXJiICk7CisKKwlpZiAocFdiMzVUeC0+VHgyVXJiKQorCQl1c2JfZnJlZV91cmIoIHBXYjM1VHgtPlR4MlVyYiApOworCisJI2lmZGVmIF9QRV9UWF9EVU1QXworCVdCREVCVUcoKCJXYjM1VHhfZGVzdHJveSBPS1xuIikpOworCSNlbmRpZgorfQorCit2b2lkIFdiMzVUeF9DdXJyZW50VGltZShwaHdfZGF0YV90IHBId0RhdGEsIHUzMiBUaW1lQ291bnQpCit7CisJUFdCMzVUWCBwV2IzNVR4ID0gJnBId0RhdGEtPldiMzVUeDsKKwl1bnNpZ25lZCBjaGFyIFRyaWdnZXIgPSBGQUxTRTsKKworCWlmIChwV2IzNVR4LT5UeFRpbWVyID4gVGltZUNvdW50KQorCQlUcmlnZ2VyID0gVFJVRTsKKwllbHNlIGlmIChUaW1lQ291bnQgPiAocFdiMzVUeC0+VHhUaW1lcis1MDApKQorCQlUcmlnZ2VyID0gVFJVRTsKKworCWlmIChUcmlnZ2VyKSB7CisJCXBXYjM1VHgtPlR4VGltZXIgPSBUaW1lQ291bnQ7CisJCVdiMzVUeF9FUDJWTV9zdGFydCggcEh3RGF0YSApOworCX0KK30KKwordm9pZCBXYjM1VHhfRVAyVk1fc3RhcnQocGh3X2RhdGFfdCBwSHdEYXRhKQoreworCVBXQjM1VFggcFdiMzVUeCA9ICZwSHdEYXRhLT5XYjM1VHg7CisKKwkvLyBBbGxvdyBvbmx5IG9uZSB0aHJlYWQgdG8gcnVuIGludG8gZnVuY3Rpb24KKwlpZiAoT1NfQVRPTUlDX0lOQyggcEh3RGF0YS0+QWRhcHRlciwgJnBXYjM1VHgtPlR4UmVzdWx0Q291bnQgKSA9PSAxKSB7CisJCXBXYjM1VHgtPkVQMnZtX3N0YXRlID0gVk1fUlVOTklORzsKKwkJV2IzNVR4X0VQMlZNKCBwSHdEYXRhICk7CisJfQorCWVsc2UKKwkJT1NfQVRPTUlDX0RFQyggcEh3RGF0YS0+QWRhcHRlciwgJnBXYjM1VHgtPlR4UmVzdWx0Q291bnQgKTsKK30KKworCit2b2lkIFdiMzVUeF9FUDJWTShwaHdfZGF0YV90IHBId0RhdGEpCit7CisJUFdCMzVUWCBwV2IzNVR4ID0gJnBId0RhdGEtPldiMzVUeDsKKwlzdHJ1Y3QgdXJiICoJcFVyYiA9IChzdHJ1Y3QgdXJiICopcFdiMzVUeC0+VHgyVXJiOworCVBVTE9ORwlwbHRtcCA9IChQVUxPTkcpcFdiMzVUeC0+RVAyX2J1ZjsKKwlpbnQJCXJldHY7CisKKwlkbyB7CisJCWlmIChwSHdEYXRhLT5TdXJwcmlzZVJlbW92ZSB8fCBwSHdEYXRhLT5Id1N0b3ApCisJCQlicmVhazsKKworCQlpZiAocFdiMzVUeC0+dHhfaGFsdCkKKwkJCWJyZWFrOworCisJCS8vCisJCS8vIElzc3VpbmcgVVJCCisJCS8vCisJCXVzYl9maWxsX2ludF91cmIoIHBVcmIsIHBId0RhdGEtPldiVXNiLnVkZXYsIHVzYl9yY3ZpbnRwaXBlKHBId0RhdGEtPldiVXNiLnVkZXYsMiksCisJCQkJICBwbHRtcCwgTUFYX0lOVEVSUlVQVF9MRU5HVEgsIFdiMzVUeF9FUDJWTV9jb21wbGV0ZSwgcEh3RGF0YSwgMzIpOworCisJCXBXYjM1VHgtPkVQMnZtX3N0YXRlID0gVk1fUlVOTklORzsKKwkJcmV0diA9IHdiX3VzYl9zdWJtaXRfdXJiKCBwVXJiICk7CisKKwkJaWYocmV0diA8IDApIHsKKwkJCSNpZmRlZiBfUEVfVFhfRFVNUF8KKwkJCVdCREVCVUcoKCJFUDIgVHggSXJwIHNlbmRpbmcgZXJyb3JcbiIpKTsKKwkJCSNlbmRpZgorCQkJYnJlYWs7CisJCX0KKworCQlyZXR1cm47CisKKwl9IHdoaWxlKEZBTFNFKTsKKworCXBXYjM1VHgtPkVQMnZtX3N0YXRlID0gVk1fU1RPUDsKKwlPU19BVE9NSUNfREVDKCBwSHdEYXRhLT5BZGFwdGVyLCAmcFdiMzVUeC0+VHhSZXN1bHRDb3VudCApOworfQorCisKK3ZvaWQgV2IzNVR4X0VQMlZNX2NvbXBsZXRlKHN0cnVjdCB1cmIgKiBwVXJiKQoreworCXBod19kYXRhX3QJcEh3RGF0YSA9IHBVcmItPmNvbnRleHQ7CisJVDAyX0RFU0NSSVBUT1IJVDAyLCBUU1RBVFVTOworCVBBREFQVEVSCUFkYXB0ZXIgPSAoUEFEQVBURVIpcEh3RGF0YS0+QWRhcHRlcjsKKwlQV0IzNVRYCQlwV2IzNVR4ID0gJnBId0RhdGEtPldiMzVUeDsKKwlQVUxPTkcJCXBsdG1wID0gKFBVTE9ORylwV2IzNVR4LT5FUDJfYnVmOworCXUzMgkJaTsKKwl1MTYJCUludGVycnVwdEluTGVuZ3RoOworCisKKwkvLyBWYXJpYWJsZSBzZXR0aW5nCisJcFdiMzVUeC0+RVAydm1fc3RhdGUgPSBWTV9DT01QTEVURUQ7CisJcFdiMzVUeC0+RVAyVk1fc3RhdHVzID0gcFVyYi0+c3RhdHVzOworCisJZG8geworCQkvLyBGb3IgTGludXggMi40LiBJbnRlcnJ1cHQgd2lsbCBhbHdheXMgdHJpZ2dlcgorCQlpZiggcEh3RGF0YS0+U3VycHJpc2VSZW1vdmUgfHwgcEh3RGF0YS0+SHdTdG9wICkgLy8gTGV0IFdiV2xhbkhhbHQgdG8gaGFuZGxlIHN1cnByaXNlIHJlbW92ZQorCQkJYnJlYWs7CisKKwkJaWYoIHBXYjM1VHgtPnR4X2hhbHQgKQorCQkJYnJlYWs7CisKKwkJLy9UaGUgVXJiIGlzIGNvbXBsZXRlZCwgY2hlY2sgdGhlIHJlc3VsdAorCQlpZiAocFdiMzVUeC0+RVAyVk1fc3RhdHVzICE9IDApIHsKKwkJCVdCREVCVUcoKCJFUDIgSW9Db21wbGV0ZVJvdXRpbmUgcmV0dXJuIGVycm9yXG4iKSk7CisJCQlwV2IzNVR4LT5FUDJ2bV9zdGF0ZT0gVk1fU1RPUDsKKwkJCWJyZWFrOyAvLyBFeGl0IHdoaWxlKEZBTFNFKTsKKwkJfQorCisJCS8vIFVwZGF0ZSB0aGUgVHggcmVzdWx0CisJCUludGVycnVwdEluTGVuZ3RoID0gcFVyYi0+YWN0dWFsX2xlbmd0aDsKKwkJLy8gTW9kaWZ5IGZvciBtaW5pbXVtIG1lbW9yeSBhY2Nlc3MgYW5kIERXT1JEIGFsaWdubWVudC4KKwkJVDAyLnZhbHVlID0gY3B1X3RvX2xlMzIocGx0bXBbMF0pID4+IDg7IC8vIFszMTo4XSAtPiBbMjQ6MF0KKwkJSW50ZXJydXB0SW5MZW5ndGggLT0gMTsvLyAyMDA1MTIyMS4xLmMgTW9kaWZ5IHRoZSBmb2xsb3cgZm9yIG1vcmUgc3RhYmxlCisJCUludGVycnVwdEluTGVuZ3RoID4+PSAyOyAvLyBJbnRlcnJ1cHRJbkxlbmd0aC80CisJCWZvciAoaT0xOyBpPD1JbnRlcnJ1cHRJbkxlbmd0aDsgaSsrKSB7CisJCQlUMDIudmFsdWUgfD0gKChjcHVfdG9fbGUzMihwbHRtcFtpXSkgJiAweGZmKSA8PCAyNCk7CisKKwkJCVRTVEFUVVMudmFsdWUgPSBUMDIudmFsdWU7ICAvLzIwMDYxMDA5IGFuc29uJ3MgZW5kaWFuCisJCQlNZHNfU2VuZENvbXBsZXRlKCBBZGFwdGVyLCAmVFNUQVRVUyApOworCQkJVDAyLnZhbHVlID0gY3B1X3RvX2xlMzIocGx0bXBbaV0pID4+IDg7CisJCX0KKworCQlyZXR1cm47CisJfSB3aGlsZShGQUxTRSk7CisKKwlPU19BVE9NSUNfREVDKCBwSHdEYXRhLT5BZGFwdGVyLCAmcFdiMzVUeC0+VHhSZXN1bHRDb3VudCApOworCXBXYjM1VHgtPkVQMnZtX3N0YXRlID0gVk1fU1RPUDsKK30KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvbGludXgvd2IzNXR4X2YuaCBiL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL2xpbnV4L3diMzV0eF9mLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzcwNWE4NAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL2xpbnV4L3diMzV0eF9mLmgKQEAgLTAsMCArMSwyMCBAQAorLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vIEludGVyZmFjZSBmdW5jdGlvbiBkZWNsYXJlCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQordW5zaWduZWQgY2hhciBXYjM1VHhfaW5pdGlhbCgJIHBod19kYXRhX3QgcEh3RGF0YSApOwordm9pZCBXYjM1VHhfZGVzdHJveSggIHBod19kYXRhX3QgcEh3RGF0YSApOwordW5zaWduZWQgY2hhciBXYjM1VHhfZ2V0X3R4X2J1ZmZlciggIHBod19kYXRhX3QgcEh3RGF0YSwgIFBVQ0hBUiAqcEJ1ZmZlciApOworCit2b2lkIFdiMzVUeF9FUDJWTSggIHBod19kYXRhX3QgcEh3RGF0YSApOwordm9pZCBXYjM1VHhfRVAyVk1fc3RhcnQoICBwaHdfZGF0YV90IHBId0RhdGEgKTsKK3ZvaWQgV2IzNVR4X0VQMlZNX2NvbXBsZXRlKCAgUFVSQiBwdXJiICk7CisKK3ZvaWQgV2IzNVR4X3N0YXJ0KCAgcGh3X2RhdGFfdCBwSHdEYXRhICk7Cit2b2lkIFdiMzVUeF9zdG9wKCAgcGh3X2RhdGFfdCBwSHdEYXRhICk7Cit2b2lkIFdiMzVUeCggIHBod19kYXRhX3QgcEh3RGF0YSApOwordm9pZCBXYjM1VHhfY29tcGxldGUoICBQVVJCIHB1cmIgKTsKK3ZvaWQgV2IzNVR4X3Jlc2V0X2Rlc2NyaXB0b3IoICBwaHdfZGF0YV90IHBId0RhdGEgKTsKKwordm9pZCBXYjM1VHhfQ3VycmVudFRpbWUoICBwaHdfZGF0YV90IHBId0RhdGEsICB1MzIgVGltZUNvdW50ICk7CisKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvbGludXgvd2IzNXR4X3MuaCBiL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL2xpbnV4L3diMzV0eF9zLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWM0MzI1NwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL2xpbnV4L3diMzV0eF9zLmgKQEAgLTAsMCArMSw0NyBAQAorLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vIElTODlDMzUgVHggcmVsYXRlZCBkZWZpbml0aW9uCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorI2RlZmluZSBUWF9JTlRFUkZBQ0UJCQkwCS8vIEludGVyZmFjZSAxCisjZGVmaW5lIFRYX1BJUEUJCQkJCTMJLy8gZW5kcG9pbnQgNAorI2RlZmluZSBUWF9JTlRFUlJVUFQJCQkxCS8vIGVuZHBvaW50IDIKKyNkZWZpbmUgTUFYX0lOVEVSUlVQVF9MRU5HVEgJNjQJLy8gSXQgbXVzdCBiZSA2NCBmb3IgRVAyIGhhcmR3YXJlCisKKworCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8gSW50ZXJuYWwgdmFyaWFibGUgZm9yIG1vZHVsZQorLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCit0eXBlZGVmIHN0cnVjdCBfV0IzNVRYCit7CisJLy8gRm9yIFR4IGJ1ZmZlcgorCXU4CVR4QnVmZmVyWyBNQVhfVVNCX1RYX0JVRkZFUl9OVU1CRVIgXVsgTUFYX1VTQl9UWF9CVUZGRVIgXTsKKworCS8vIEZvciBJbnRlcnJ1cHQgcGlwZQorCXU4CUVQMl9idWZbTUFYX0lOVEVSUlVQVF9MRU5HVEhdOworCisJT1NfQVRPTUlDCVR4UmVzdWx0Q291bnQ7Ly8gRm9yIHRocmVhZCBjb250cm9sIG9mIEVQMiA5MzExMzAuNC5tCisJT1NfQVRPTUlDCVR4RmlyZUNvdW50ZXI7Ly8gRm9yIHRocmVhZCBjb250cm9sIG9mIEVQNCA5MzExMzAuNC5uCisJdTMyCQkJQnl0ZVRyYW5zZmVyOworCisJdTMyCSAgICBUeFNlbmRJbmRleDsvLyBUaGUgbmV4dCBpbmRleCBvZiBNZHMgYXJyYXkgdG8gYmUgc2VudAorCXUzMgkgICAgRVAydm1fc3RhdGU7IC8vIGZvciBFUDJ2bSBzdGF0ZQorCXUzMgkgICAgRVA0dm1fc3RhdGU7IC8vIGZvciBFUDR2bSBzdGF0ZQorCXUzMgkgICAgdHhfaGFsdDsgLy8gU3RvcHBpbmcgVk0KKworCXN0cnVjdCB1cmIgKgkJCQlUeDRVcmI7CisJc3RydWN0IHVyYiAqCQkJCVR4MlVyYjsKKworCWludAkJRVAyVk1fc3RhdHVzOworCWludAkJRVA0Vk1fc3RhdHVzOworCisJdTMyCVR4RmlsbENvdW50OyAvLyAyMDA2MDkyOAorCXUzMglUeFRpbWVyOyAvLyAyMDA2MDkyOCBBZGQgaWYgc2VuZGluZyBwYWNrZXQgbm90IGdyZWF0IHRoYW4gMTMKKworfSBXQjM1VFgsICpQV0IzNVRYOworCisKKworCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL2xpbnV4L3didXNiLmMgYi9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9saW51eC93YnVzYi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiYWQ1ZmIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9saW51eC93YnVzYi5jCkBAIC0wLDAgKzEsNDA0IEBACisvKgorICogQ29weXJpZ2h0IDIwMDggUGF2ZWwgTWFjaGVrIDxwYXZlbEBzdXNlLmN6PgorICoKKyAqIERpc3RyaWJ1dGUgdW5kZXIgR1BMdjIuCisgKi8KKyNpbmNsdWRlICJzeXNkZWYuaCIKKyNpbmNsdWRlIDxuZXQvbWFjODAyMTEuaD4KKworCitNT0RVTEVfQVVUSE9SKCBEUklWRVJfQVVUSE9SICk7CitNT0RVTEVfREVTQ1JJUFRJT04oIERSSVZFUl9ERVNDICk7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfVkVSU0lPTigiMC4xIik7CisKKworLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vIHZlbmRvciBJRCBhbmQgcHJvZHVjdCBJRCBjYW4gaW50byBoZXJlIGZvciBvdGhlcnMKKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgSWRfVGFibGVbXSA9Cit7CisgIHtVU0JfREVWSUNFKCAweDA0MTYsIDB4MDAzNSApfSwKKyAge1VTQl9ERVZJQ0UoIDB4MThFOCwgMHg2MjAxICl9LAorICB7VVNCX0RFVklDRSggMHgxOEU4LCAweDYyMDYgKX0sCisgIHtVU0JfREVWSUNFKCAweDE4RTgsIDB4NjIxNyApfSwKKyAge1VTQl9ERVZJQ0UoIDB4MThFOCwgMHg2MjMwICl9LAorICB7VVNCX0RFVklDRSggMHgxOEU4LCAweDYyMzMgKX0sCisgIHtVU0JfREVWSUNFKCAweDExMzEsIDB4MjAzNSApfSwKKyAgeyAgfQorfTsKKworTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIElkX1RhYmxlKTsKKworc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIHdiMzVfZHJpdmVyID0geworCS5uYW1lID0JCSJ3MzV1bmQiLAorCS5wcm9iZSA9CXdiMzVfcHJvYmUsCisJLmRpc2Nvbm5lY3QgPSB3YjM1X2Rpc2Nvbm5lY3QsCisJLmlkX3RhYmxlID0gSWRfVGFibGUsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9yYXRlIHdic29mdF9yYXRlc1tdID0geworCXsgLmJpdHJhdGUgPSAxMCwgLmZsYWdzID0gSUVFRTgwMjExX1JBVEVfU0hPUlRfUFJFQU1CTEUgfSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgd2Jzb2Z0X2NoYW5uZWxzW10gPSB7CisJeyAuY2VudGVyX2ZyZXEgPSAyNDEyfSwKK307CisKK2ludCB3YnNvZnRfZW5hYmxlZDsKK3N0cnVjdCBpZWVlODAyMTFfaHcgKm15X2RldjsKK1BBREFQVEVSIG15X2FkYXB0ZXI7CisKK3N0YXRpYyBpbnQgd2Jzb2Z0X2FkZF9pbnRlcmZhY2Uoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LAorCQkJCSBzdHJ1Y3QgaWVlZTgwMjExX2lmX2luaXRfY29uZiAqY29uZikKK3sKKwlwcmludGsoIndic29mdF9hZGQgaW50ZXJmYWNlIGNhbGxlZFxuIik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHdic29mdF9yZW1vdmVfaW50ZXJmYWNlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwKKwkJCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfaWZfaW5pdF9jb25mICpjb25mKQoreworCXByaW50aygid2Jzb2Z0X3JlbW92ZSBpbnRlcmZhY2UgY2FsbGVkXG4iKTsKK30KKworc3RhdGljIGludCB3YnNvZnRfbm9wKHZvaWQpCit7CisJcHJpbnRrKCJ3YnNvZnRfbm9wIGNhbGxlZFxuIik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHdic29mdF9jb25maWd1cmVfZmlsdGVyKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwKKwkJCQkgICAgIHVuc2lnbmVkIGludCBjaGFuZ2VkX2ZsYWdzLAorCQkJCSAgICAgdW5zaWduZWQgaW50ICp0b3RhbF9mbGFncywKKwkJCQkgICAgIGludCBtY19jb3VudCwgc3RydWN0IGRldl9tY19saXN0ICptY2xpc3QpCit7CisJdW5zaWduZWQgaW50IGJpdF9uciwgbmV3X2ZsYWdzOworCXUzMiBtY19maWx0ZXJbMl07CisJaW50IGk7CisKKwluZXdfZmxhZ3MgPSAwOworCisJaWYgKCp0b3RhbF9mbGFncyAmIEZJRl9QUk9NSVNDX0lOX0JTUykgeworCQluZXdfZmxhZ3MgfD0gRklGX1BST01JU0NfSU5fQlNTOworCQltY19maWx0ZXJbMV0gPSBtY19maWx0ZXJbMF0gPSB+MDsKKwl9IGVsc2UgaWYgKCgqdG90YWxfZmxhZ3MgJiBGSUZfQUxMTVVMVEkpIHx8IChtY19jb3VudCA+IDMyKSkgeworCQluZXdfZmxhZ3MgfD0gRklGX0FMTE1VTFRJOworCQltY19maWx0ZXJbMV0gPSBtY19maWx0ZXJbMF0gPSB+MDsKKwl9IGVsc2UgeworCQltY19maWx0ZXJbMV0gPSBtY19maWx0ZXJbMF0gPSAwOworCQlmb3IgKGkgPSAwOyBpIDwgbWNfY291bnQ7IGkrKykgeworCQkJaWYgKCFtY2xpc3QpCisJCQkJYnJlYWs7CisJCQlwcmludGsoIlNob3VsZCBjYWxsIGV0aGVyX2NyYyBoZXJlXG4iKTsKKwkJCS8vYml0X25yID0gZXRoZXJfY3JjKEVUSF9BTEVOLCBtY2xpc3QtPmRtaV9hZGRyKSA+PiAyNjsKKwkJCWJpdF9uciA9IDA7CisKKwkJCWJpdF9uciAmPSAweDNGOworCQkJbWNfZmlsdGVyW2JpdF9uciA+PiA1XSB8PSAxIDw8IChiaXRfbnIgJiAzMSk7CisJCQltY2xpc3QgPSBtY2xpc3QtPm5leHQ7CisJCX0KKwl9CisKKwlkZXYtPmZsYWdzICY9IH5JRUVFODAyMTFfSFdfUlhfSU5DTFVERVNfRkNTOworCisJKnRvdGFsX2ZsYWdzID0gbmV3X2ZsYWdzOworfQorCitzdGF0aWMgaW50IHdic29mdF90eChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IsCisJCSAgICAgIHN0cnVjdCBpZWVlODAyMTFfdHhfY29udHJvbCAqY29udHJvbCkKK3sKKwljaGFyICpidWZmZXIgPSBrbWFsbG9jKHNrYi0+bGVuLCBHRlBfQVRPTUlDKTsKKwlwcmludGsoIlNlbmRpbmcgZnJhbWUgJWQgYnl0ZXNcbiIsIHNrYi0+bGVuKTsKKwltZW1jcHkoYnVmZmVyLCBza2ItPmRhdGEsIHNrYi0+bGVuKTsKKwlpZiAoMSA9PSBNTE1FU2VuZEZyYW1lKG15X2FkYXB0ZXIsIGJ1ZmZlciwgc2tiLT5sZW4sIEZSQU1FX1RZUEVfODAyXzExX01BTkFHRU1FTlQpKQorCQlwcmludGsoImZyYW1lIHNlbnQgb2sgKCVkIGJ5dGVzKT9cbiIsIHNrYi0+bGVuKTsKKwlyZXR1cm4gTkVUREVWX1RYX09LOworfQorCisKK3N0YXRpYyBpbnQgd2Jzb2Z0X3N0YXJ0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldikKK3sKKwl3YnNvZnRfZW5hYmxlZCA9IDE7CisJcHJpbnRrKCJ3YnNvZnRfc3RhcnQgY2FsbGVkXG4iKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB3YnNvZnRfY29uZmlnKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwgc3RydWN0IGllZWU4MDIxMV9jb25mICpjb25mKQoreworCUNoYW5JbmZvIGNoOworCXByaW50aygid2Jzb2Z0X2NvbmZpZyBjYWxsZWRcbiIpOworCisJY2guYmFuZCA9IDE7CisJY2guQ2hhbk5vID0gMTsJLyogU2hvdWxkIHVzZSBjaGFubmVsX251bSwgb3Igc29tZXRoaW5nLCBhcyB0aGF0IGlzIGFscmVhZHkgcHJlLXRyYW5zbGF0ZWQgKi8KKworCisJaGFsX3NldF9jdXJyZW50X2NoYW5uZWwoJm15X2FkYXB0ZXItPnNId0RhdGEsIGNoKTsKKwloYWxfc2V0X2JlYWNvbl9wZXJpb2QoJm15X2FkYXB0ZXItPnNId0RhdGEsIGNvbmYtPmJlYWNvbl9pbnQpOworLy8JaGFsX3NldF9jYXBfaW5mbygmbXlfYWRhcHRlci0+c0h3RGF0YSwgPz8gKTsKKy8vIGhhbF9zZXRfc3NpZChwaHdfZGF0YV90IHBId0RhdGEsICBQVUNIQVIgcHNzaWQsICB1OCBzc2lkX2xlbik7ID8/CisJaGFsX3NldF9hY2NlcHRfYnJvYWRjYXN0KCZteV9hZGFwdGVyLT5zSHdEYXRhLCAxKTsKKwloYWxfc2V0X2FjY2VwdF9wcm9taXNjdW91cygmbXlfYWRhcHRlci0+c0h3RGF0YSwgIDEpOworCWhhbF9zZXRfYWNjZXB0X211bHRpY2FzdCgmbXlfYWRhcHRlci0+c0h3RGF0YSwgIDEpOworCWhhbF9zZXRfYWNjZXB0X2JlYWNvbigmbXlfYWRhcHRlci0+c0h3RGF0YSwgIDEpOworCWhhbF9zZXRfcmFkaW9fbW9kZSgmbXlfYWRhcHRlci0+c0h3RGF0YSwgIDApOworCS8vaGFsX3NldF9hbnRlbm5hX251bWJlciggIHBod19kYXRhX3QgcEh3RGF0YSwgdTggbnVtYmVyICkKKwkvL2hhbF9zZXRfcmZfcG93ZXIocGh3X2RhdGFfdCBwSHdEYXRhLCB1OCBQb3dlckluZGV4KQorCisKKy8vCWhhbF9zdGFydF9ic3MoJm15X2FkYXB0ZXItPnNId0RhdGEsIFdMQU5fQlNTVFlQRV9JTkZSQVNUUlVDVFVSRSk7CT8/CisKKy8vdm9pZCBoYWxfc2V0X3JhdGVzKHBod19kYXRhX3QgcEh3RGF0YSwgUFVDSEFSIHBic3NfcmF0ZXMsCisvLwkJICAgdTggbGVuZ3RoLCB1bnNpZ25lZCBjaGFyIGJhc2ljX3JhdGVfc2V0KQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgd2Jzb2Z0X2NvbmZpZ19pbnRlcmZhY2Uoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LAorCQkJCSAgICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLAorCQkJCSAgICBzdHJ1Y3QgaWVlZTgwMjExX2lmX2NvbmYgKmNvbmYpCit7CisJcHJpbnRrKCJ3YnNvZnRfY29uZmlnX2ludGVyZmFjZSBjYWxsZWRcbiIpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdTY0IHdic29mdF9nZXRfdHNmKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldikKK3sKKwlwcmludGsoIndic29mdF9nZXRfdHNmIGNhbGxlZFxuIik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX29wcyB3YnNvZnRfb3BzID0geworCS50eAkJCT0gd2Jzb2Z0X3R4LAorCS5zdGFydAkJCT0gd2Jzb2Z0X3N0YXJ0LAkJLyogU3RhcnQgY2FuIGJlIHByZXR0eSBtdWNoIGVtcHR5IGFzIHdlIGRvIFdiV0xhbkluaXRpYWxpemUoKSBkdXJpbmcgcHJvYmU/ICovCisJLnN0b3AJCQk9IHdic29mdF9ub3AsCisJLmFkZF9pbnRlcmZhY2UJCT0gd2Jzb2Z0X2FkZF9pbnRlcmZhY2UsCisJLnJlbW92ZV9pbnRlcmZhY2UJPSB3YnNvZnRfcmVtb3ZlX2ludGVyZmFjZSwKKwkuY29uZmlnCQkJPSB3YnNvZnRfY29uZmlnLAorCS5jb25maWdfaW50ZXJmYWNlCT0gd2Jzb2Z0X2NvbmZpZ19pbnRlcmZhY2UsCisJLmNvbmZpZ3VyZV9maWx0ZXIJPSB3YnNvZnRfY29uZmlndXJlX2ZpbHRlciwKKwkuZ2V0X3N0YXRzCQk9IHdic29mdF9ub3AsCisJLmdldF90eF9zdGF0cwkJPSB3YnNvZnRfbm9wLAorCS5nZXRfdHNmCQk9IHdic29mdF9nZXRfdHNmLAorLy8gY29uZl90eDogaGFsX3NldF9jd21pbigpL2hhbF9zZXRfY3dtYXg7Cit9OworCitzdHJ1Y3Qgd2Jzb2Z0X3ByaXYgeworfTsKKworCitpbnQgX19pbml0IHdiMzVfaW5pdCh2b2lkKQoreworCXByaW50aygiW3czNXVuZF1kcml2ZXIgaW5pdFxuIik7CisJcmV0dXJuIHVzYl9yZWdpc3Rlcigmd2IzNV9kcml2ZXIpOworfQorCit2b2lkIF9fZXhpdCB3YjM1X2V4aXQodm9pZCkKK3sKKwlwcmludGsoIlt3MzV1bmRdZHJpdmVyIGV4aXRcbiIpOworCXVzYl9kZXJlZ2lzdGVyKCAmd2IzNV9kcml2ZXIgKTsKK30KKworbW9kdWxlX2luaXQod2IzNV9pbml0KTsKK21vZHVsZV9leGl0KHdiMzVfZXhpdCk7CisKKy8vIFVzYiBrZXJuZWwgc3Vic3lzdGVtIHdpbGwgY2FsbCB0aGlzIGZ1bmN0aW9uIHdoZW4gYSBuZXcgZGV2aWNlIGlzIHBsdWdnZWQgaW50by4KK2ludCB3YjM1X3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLCBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWRfdGFibGUpCit7CisJUEFEQVBURVIJQWRhcHRlcjsKKwlQV0JMSU5VWAlwV2JMaW51eDsKKwlQV0JVU0IJCXBXYlVzYjsKKyAgICAgICAgc3RydWN0IHVzYl9ob3N0X2ludGVyZmFjZSAqaW50ZXJmYWNlOworCXN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqZW5kcG9pbnQ7CisJaW50CWksIHJldCA9IC0xOworCXUzMglsdG1wOworCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldihpbnRmKTsKKworCXVzYl9nZXRfZGV2KHVkZXYpOworCisJcHJpbnRrKCJbdzM1dW5kXXdiMzVfcHJvYmUgLT5cbiIpOworCisJZG8geworCQlmb3IgKGk9MDsgaTwoc2l6ZW9mKElkX1RhYmxlKS9zaXplb2Yoc3RydWN0IHVzYl9kZXZpY2VfaWQpKTsgaSsrICkgeworCQkJaWYgKCh1ZGV2LT5kZXNjcmlwdG9yLmlkVmVuZG9yID09IElkX1RhYmxlW2ldLmlkVmVuZG9yKSAmJgorCQkJCSh1ZGV2LT5kZXNjcmlwdG9yLmlkUHJvZHVjdCA9PSBJZF9UYWJsZVtpXS5pZFByb2R1Y3QpKSB7CisJCQkJcHJpbnRrKCJbdzM1dW5kXUZvdW5kIHN1cHBvcnRlZCBoYXJkd2FyZVxuIik7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwkJaWYgKChpID09IChzaXplb2YoSWRfVGFibGUpL3NpemVvZihzdHJ1Y3QgdXNiX2RldmljZV9pZCkpKSkgeworCQkJI2lmZGVmIF9QRV9VU0JfSU5JX0RVTVBfCisJCQlXQkRFQlVHKCgiW3czNXVuZF0gVGhpcyBpcyBub3QgdGhlIG9uZSB3ZSBhcmUgaW50ZXJlc3RlZCBhYm91dFxuIikpOworCQkJI2VuZGlmCisJCQlyZXR1cm4gLUVOT0RFVjsKKwkJfQorCisJCS8vIDIwMDYwNjMwLjIgQ2hlY2sgdGhlIGRldmljZSBpZiBpdCBhbHJlYWR5IGJlIG9wZW5lZAorCQlyZXQgPSB1c2JfY29udHJvbF9tc2codWRldiwgdXNiX3JjdmN0cmxwaXBlKCB1ZGV2LCAwICksCisJCQkJICAgICAgMHgwMSwgVVNCX1RZUEVfVkVORE9SfFVTQl9SRUNJUF9ERVZJQ0V8VVNCX0RJUl9JTiwKKwkJCQkgICAgICAweDAsIDB4NDAwLCAmbHRtcCwgNCwgSFoqMTAwICk7CisJCWlmKCByZXQgPCAwICkKKwkJCWJyZWFrOworCisJCWx0bXAgPSBjcHVfdG9fbGUzMihsdG1wKTsKKwkJaWYgKGx0bXApICAvLyBJcyBhbHJlYWR5IGluaXRpYWxpemVkPworCQkJYnJlYWs7CisKKworCQlBZGFwdGVyID0ga3phbGxvYyhzaXplb2YoQURBUFRFUiksIEdGUF9LRVJORUwpOworCisJCW15X2FkYXB0ZXIgPSBBZGFwdGVyOworCQlwV2JMaW51eCA9ICZBZGFwdGVyLT5XYkxpbnV4OworCQlwV2JVc2IgPSAmQWRhcHRlci0+c0h3RGF0YS5XYlVzYjsKKwkJcFdiVXNiLT51ZGV2ID0gdWRldjsKKworCSAgICAgICAgaW50ZXJmYWNlID0gaW50Zi0+Y3VyX2FsdHNldHRpbmc7CisJICAgICAgICBlbmRwb2ludCA9ICZpbnRlcmZhY2UtPmVuZHBvaW50WzBdLmRlc2M7CisKKwkJaWYgKGVuZHBvaW50WzJdLndNYXhQYWNrZXRTaXplID09IDUxMikgeworCQkJcHJpbnRrKCJbdzM1dW5kXSBXb3JraW5nIG9uIFVTQiAyLjBcbiIpOworCQkJcFdiVXNiLT5Jc1VzYjIwID0gMTsKKwkJfQorCisJCWlmICghV2JXTGFuSW5pdGlhbGl6ZShBZGFwdGVyKSkgeworCQkJcHJpbnRrKCJbdzM1dW5kXVdiV0xhbkluaXRpYWxpemUgZmFpbFxuIik7CisJCQlicmVhazsKKwkJfQorCisJCXsKKwkJCXN0cnVjdCB3YnNvZnRfcHJpdiAqcHJpdjsKKwkJCXN0cnVjdCBpZWVlODAyMTFfaHcgKmRldjsKKwkJCWludCByZXM7CisKKwkJCWRldiA9IGllZWU4MDIxMV9hbGxvY19odyhzaXplb2YoKnByaXYpLCAmd2Jzb2Z0X29wcyk7CisKKwkJCWlmICghZGV2KSB7CisJCQkJcHJpbnRrKCJ3MzV1bmQ6IGllZWU4MDIxMSBhbGxvYyBmYWlsZWRcbiIgKTsKKwkJCQlCVUcoKTsKKwkJCX0KKworCQkJbXlfZGV2ID0gZGV2OworCisJCQlTRVRfSUVFRTgwMjExX0RFVihkZXYsICZ1ZGV2LT5kZXYpOworCQkJeworCQkJCXBod19kYXRhX3QgcEh3RGF0YSA9ICZBZGFwdGVyLT5zSHdEYXRhOworCQkJCXVuc2lnbmVkIGNoYXIJCWRldl9hZGRyW01BWF9BRERSX0xFTl07CisJCQkJaGFsX2dldF9wZXJtYW5lbnRfYWRkcmVzcyhwSHdEYXRhLCBkZXZfYWRkcik7CisJCQkJU0VUX0lFRUU4MDIxMV9QRVJNX0FERFIoZGV2LCBkZXZfYWRkcik7CisJCQl9CisKKworCQkJZGV2LT5leHRyYV90eF9oZWFkcm9vbSA9IDEyOwkvKiBGSVhNRSAqLworCQkJZGV2LT5mbGFncyA9IDA7CisKKwkJCWRldi0+Y2hhbm5lbF9jaGFuZ2VfdGltZSA9IDEwMDA7CisvLwkJCWRldi0+bWF4X3Jzc2kgPSAxMDA7CisKKwkJCWRldi0+cXVldWVzID0gMTsKKworCQkJc3RhdGljIHN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgYmFuZDsKKworCQkJYmFuZC5jaGFubmVscyA9IHdic29mdF9jaGFubmVsczsKKwkJCWJhbmQubl9jaGFubmVscyA9IEFSUkFZX1NJWkUod2Jzb2Z0X2NoYW5uZWxzKTsKKwkJCWJhbmQuYml0cmF0ZXMgPSB3YnNvZnRfcmF0ZXM7CisJCQliYW5kLm5fYml0cmF0ZXMgPSBBUlJBWV9TSVpFKHdic29mdF9yYXRlcyk7CisKKwkJCWRldi0+d2lwaHktPmJhbmRzW0lFRUU4MDIxMV9CQU5EXzJHSFpdID0gJmJhbmQ7CisjaWYgMAorCQkJd2Jzb2Z0X21vZGVzWzBdLm51bV9jaGFubmVscyA9IDE7CisJCQl3YnNvZnRfbW9kZXNbMF0uY2hhbm5lbHMgPSB3YnNvZnRfY2hhbm5lbHM7CisJCQl3YnNvZnRfbW9kZXNbMF0ubW9kZSA9IE1PREVfSUVFRTgwMjExQjsKKwkJCXdic29mdF9tb2Rlc1swXS5udW1fcmF0ZXMgPSBBUlJBWV9TSVpFKHdic29mdF9yYXRlcyk7CisJCQl3YnNvZnRfbW9kZXNbMF0ucmF0ZXMgPSB3YnNvZnRfcmF0ZXM7CisKKwkJCXJlcyA9IGllZWU4MDIxMV9yZWdpc3Rlcl9od21vZGUoZGV2LCAmd2Jzb2Z0X21vZGVzWzBdKTsKKwkJCUJVR19PTihyZXMpOworI2VuZGlmCisKKwkJCXJlcyA9IGllZWU4MDIxMV9yZWdpc3Rlcl9odyhkZXYpOworCQkJQlVHX09OKHJlcyk7CisJCX0KKworCQl1c2Jfc2V0X2ludGZkYXRhKCBpbnRmLCBBZGFwdGVyICk7CisKKwkJcHJpbnRrKCJbdzM1dW5kXSBfcHJvYmUgT0tcbiIpOworCQlyZXR1cm4gMDsKKworCX0gd2hpbGUoRkFMU0UpOworCisJcmV0dXJuIC1FTk9NRU07Cit9CisKK3ZvaWQgcGFja2V0X2NhbWUoY2hhciAqcFJ4QnVmZmVyQWRkcmVzcywgaW50IFBhY2tldFNpemUpCit7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwlzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyByeF9zdGF0dXMgPSB7MH07CisKKwlpZiAoIXdic29mdF9lbmFibGVkKQorCQlyZXR1cm47CisKKwlza2IgPSBkZXZfYWxsb2Nfc2tiKFBhY2tldFNpemUpOworCWlmICghc2tiKSB7CisJCXByaW50aygiTm90IGVub3VnaCBtZW1vcnkgZm9yIHBhY2tldCwgRklYTUVcbiIpOworCQlyZXR1cm47CisJfQorCisJbWVtY3B5KHNrYl9wdXQoc2tiLCBQYWNrZXRTaXplKSwKKwkgICAgICAgcFJ4QnVmZmVyQWRkcmVzcywKKwkgICAgICAgUGFja2V0U2l6ZSk7CisKKy8qCisJcnhfc3RhdHVzLnJhdGUgPSAxMDsKKwlyeF9zdGF0dXMuY2hhbm5lbCA9IDE7CisJcnhfc3RhdHVzLmZyZXEgPSAxMjM0NTsKKwlyeF9zdGF0dXMucGh5bW9kZSA9IE1PREVfSUVFRTgwMjExQjsKKyovCisKKwlpZWVlODAyMTFfcnhfaXJxc2FmZShteV9kZXYsIHNrYiwgJnJ4X3N0YXR1cyk7Cit9CisKK3Vuc2lnbmVkIGNoYXIKK1diVXNiX2luaXRpYWwocGh3X2RhdGFfdCBwSHdEYXRhKQoreworCXJldHVybiAxOworfQorCisKK3ZvaWQKK1diVXNiX2Rlc3Ryb3kocGh3X2RhdGFfdCBwSHdEYXRhKQoreworfQorCitpbnQgd2IzNV9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCit7CisJUEFEQVBURVIgQWRhcHRlciA9IChQQURBUFRFUiluZXRkZXYtPnByaXY7CisJcGh3X2RhdGFfdCBwSHdEYXRhID0gJkFkYXB0ZXItPnNId0RhdGE7CisKKyAgICAgICAgbmV0aWZfc3RhcnRfcXVldWUobmV0ZGV2KTsKKworCS8vVE9ETyA6IHB1dCBoZXJlIHRlbXBvcmFyaWx5CisJaGFsX3NldF9hY2NlcHRfYnJvYWRjYXN0KHBId0RhdGEsIDEpOyAvLyBvcGVuIGFjY2VwdCBicm9hZGNhc3QKKworCXJldHVybiAwOworfQorCitpbnQgd2IzNV9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQoreworCW5ldGlmX3N0b3BfcXVldWUobmV0ZGV2KTsKKwlyZXR1cm4gMDsKK30KKwordm9pZCB3YjM1X2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCit7CisJUFdCTElOVVggcFdiTGludXg7CisJUEFEQVBURVIgQWRhcHRlciA9IHVzYl9nZXRfaW50ZmRhdGEoaW50Zik7CisJdXNiX3NldF9pbnRmZGF0YShpbnRmLCBOVUxMKTsKKworICAgICAgICBwV2JMaW51eCA9ICZBZGFwdGVyLT5XYkxpbnV4OworCisJLy8gQ2FyZCByZW1vdmUKKwlXYldsYW5IYWx0KEFkYXB0ZXIpOworCit9CisKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvbGludXgvd2J1c2JfZi5oIGIvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvbGludXgvd2J1c2JfZi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNhZTI5ZTEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9saW51eC93YnVzYl9mLmgKQEAgLTAsMCArMSwzNCBAQAorLy8rKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCisvLyBDb3B5cmlnaHQgKGMpIDE5OTYtMjAwNCBXaW5ib25kIEVsZWN0cm9uaWMgQ29ycG9yYXRpb24KKy8vCisvLyAgTW9kdWxlIE5hbWU6CisvLyAgICB3YnVzYl9mLmgKKy8vCisvLyAgQWJzdHJhY3Q6CisvLyAgICBMaW51eCBkcml2ZXIuCisvLworLy8gIEF1dGhvcjoKKy8vCisvLysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCisKK2ludCB3YjM1X29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldik7CitpbnQgd2IzNV9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KTsKK3Vuc2lnbmVkIGNoYXIgV2JVc2JfaW5pdGlhbChwaHdfZGF0YV90IHBId0RhdGEpOwordm9pZCBXYlVzYl9kZXN0cm95KHBod19kYXRhX3QgcEh3RGF0YSk7Cit1bnNpZ25lZCBjaGFyIFdiV0xhbkluaXRpYWxpemUoUEFEQVBURVIgQWRhcHRlcik7CisjZGVmaW5lCVdiVXNiX1N0b3AoIF9BICkKKworaW50IHdiMzVfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkX3RhYmxlKTsKK3ZvaWQgd2IzNV9kaXNjb25uZWN0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKTsKKworCisjZGVmaW5lIHdiX3VzYl9zdWJtaXRfdXJiKF9BKSB1c2Jfc3VibWl0X3VyYihfQSwgR0ZQX0FUT01JQykKKyNkZWZpbmUgd2JfdXNiX2FsbG9jX3VyYihfQSkgdXNiX2FsbG9jX3VyYihfQSwgR0ZQX0FUT01JQykKKworI2RlZmluZSBXYlVzYl9DaGVja0ZvckhhbmcoIF9QICkKKyNkZWZpbmUgV2JVc2JfRGV0ZWN0U3RhcnQoIF9QLCBfSSApCisKKworCisKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvbGludXgvd2J1c2Jfcy5oIGIvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvbGludXgvd2J1c2Jfcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1YzFkNTMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9saW51eC93YnVzYl9zLmgKQEAgLTAsMCArMSw0MiBAQAorLy8rKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCisvLyBDb3B5cmlnaHQgKGMpIDE5OTYtMjAwNCBXaW5ib25kIEVsZWN0cm9uaWMgQ29ycG9yYXRpb24KKy8vCisvLyAgTW9kdWxlIE5hbWU6CisvLyAgICB3YnVzYl9zLmgKKy8vCisvLyAgQWJzdHJhY3Q6CisvLyAgICBMaW51eCBkcml2ZXIuCisvLworLy8gIEF1dGhvcjoKKy8vCisvLysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCisKKyNkZWZpbmUgT1NfU0xFRVAoIF9NVCApCXsgc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsgXAorCQkJICBzY2hlZHVsZV90aW1lb3V0KCBfTVQqSFovMTAwMDAwMCApOyB9CisKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vICBSV19DT05URVhUIC0tCisvLworLy8gIFVzZWQgdG8gdHJhY2sgZHJpdmVyLWdlbmVyYXRlZCBpbyBpcnBzCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordHlwZWRlZiBzdHJ1Y3QgX1JXX0NPTlRFWFQKK3sKKwl2b2lkKgkJCXBId0RhdGE7CisJUFVSQgkJCXBVcmI7CisJdm9pZCoJCQlwQ2FsbEJhY2tGdW5jdGlvblBhcmFtZXRlcjsKK30gUldfQ09OVEVYVCwgKlBSV19DT05URVhUOworCisKKworCisjZGVmaW5lIERSSVZFUl9BVVRIT1IgIk9yaWdpbmFsIGJ5OiBKZWZmIExlZTxZWV9MZWVAaXNzYy5jb20udHc+IEFkYXB0ZWQgdG8gMi42LnggYnkgQ29zdGFudGlubyBMZWFuZHJvIChSeGFydCBEZXNrdG9wKSA8bGVfY29zdGFudGlub0BwaXhhcnRhcmdlbnRpbmEuY29tLmFyPiIKKyNkZWZpbmUgRFJJVkVSX0RFU0MgICAiSVM4OUMzNSA4MDIuMTFiZyBXTEFOIFVTQiBEcml2ZXIiCisKKworCit0eXBlZGVmIHN0cnVjdCBfV0JVU0IgeworCXUzMglJc1VzYjIwOworCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2OworCXUzMglEZXRlY3RDb3VudDsKK30gV0JVU0IsICpQV0JVU0I7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9sb2NhbHBhcmEuaCBiL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL2xvY2FscGFyYS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI2OGNmOTEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9sb2NhbHBhcmEuaApAQCAtMCwwICsxLDI3NSBAQAorLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLyBMb2NhbFBhcmEuaCAtCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vRGVmaW5lIHRoZSBsb2NhbCBhYmlsaXR5CisKKyNkZWZpbmUgTE9DQUxfREVGQVVMVF9CRUFDT05fUEVSSU9ECQkJMTAwCQkvL21zCisjZGVmaW5lIExPQ0FMX0RFRkFVTFRfQVRJTV9XSU5ET1cJCQkwCisjZGVmaW5lIExPQ0FMX0RFRkFVTFRfRVJQX0NBUEFCSUxJVFkJCTB4MDQzMQkvLzB4MDAwMToJRVNTCisJCQkJCQkJCQkJCQkJLy8weDAwMTA6CVByaXZhY3kKKwkJCQkJCQkJCQkJCQkvLzB4MDAyMDoJc2hvcnQgcHJlYW1ibGUKKwkJCQkJCQkJCQkJCQkvLzB4MDQwMDoJc2hvcnQgc2xvdCB0aW1lCisjZGVmaW5lIExPQ0FMX0RFRkFVTFRfTElTVEVOX0lOVEVSVkFMCQk1CisKKy8vI2RlZmluZSBMT0NBTF9ERUZBVUxUXzI0X0NIQU5ORUxfTlVNCQkxMQkJLy8gY2hhbm5lbCAxLi4xMQorI2RlZmluZSBMT0NBTF9ERUZBVUxUXzI0X0NIQU5ORUxfTlVNCQkxMwkJLy8gY2hhbm5lbCAxLi4xMworI2RlZmluZSBMT0NBTF9ERUZBVUxUXzVfQ0hBTk5FTF9OVU0JCQk4CQkvLyBjaGFubmVsIDM2Li42NAorCisjZGVmaW5lIExPQ0FMX1VTQV8yNF9DSEFOTkVMX05VTQkJCTExCisjZGVmaW5lIExPQ0FMX1VTQV81X0NIQU5ORUxfTlVNCQkJCTEyCisjZGVmaW5lIExPQ0FMX0VVUk9QRV8yNF9DSEFOTkVMX05VTQkJCTEzCisjZGVmaW5lIExPQ0FMX0VVUk9QRV81X0NIQU5ORUxfTlVNCQkJMTkKKyNkZWZpbmUgTE9DQUxfSkFQQU5fMjRfQ0hBTk5FTF9OVU0JCQkxNAorI2RlZmluZSBMT0NBTF9KQVBBTl81X0NIQU5ORUxfTlVNCQkJMTEKKyNkZWZpbmUgTE9DQUxfVU5LTk9XTl8yNF9DSEFOTkVMX05VTQkJMTQKKyNkZWZpbmUgTE9DQUxfVU5LTk9XTl81X0NIQU5ORUxfTlVNCQkJMzQJLy9ub3QgaW5jbHVkZSAxNjUKKworCisjZGVmaW5lIHBzTE9DQUwJCQkoJihBZGFwdGVyLT5zTG9jYWxQYXJhKSkKKworI2RlZmluZSBNT0RFXzgwMl8xMV9CRwkJCTAKKyNkZWZpbmUgTU9ERV84MDJfMTFfQQkJCTEKKyNkZWZpbmUgTU9ERV84MDJfMTFfQUJHCQkJMgorI2RlZmluZSBNT0RFXzgwMl8xMV9CR19JQlNTCQkzCisjZGVmaW5lIE1PREVfODAyXzExX0IJCQk0CisjZGVmaW5lIE1PREVfQVVUTwkJCQkyNTUKKworI2RlZmluZSBCQU5EX1RZUEVfRFNTUwkJCTAKKyNkZWZpbmUgQkFORF9UWVBFX09GRE1fMjQJCTEKKyNkZWZpbmUgQkFORF9UWVBFX09GRE1fNQkJMgorCisvL3JlZmVyIEJpdG1hcDJSYXRlVmFsdWUgdGFibGUKKyNkZWZpbmUgTE9DQUxfQUxMX1NVUFBPUlRFRF9SQVRFU19CSVRNQVAJCTB4MTMwYzFhNjYJLy90aGUgYml0bWFwIHZhbHVlIG9mIGFsbCB0aGUgSC9XIHN1cHBvcnRlZCByYXRlcworCQkJCQkJCQkJCQkJCQkJLy8xLCAyLCA1LjUsIDExLCA2LCA5LCAxMiwgMTgsIDI0LCAzNiwgNDgsIDU0CisjZGVmaW5lIExPQ0FMX09GRE1fU1VQUE9SVEVEX1JBVEVTX0JJVE1BUAkJMHgxMzBjMTI0MAkvL3RoZSBiaXRtYXAgdmFsdWUgb2YgYWxsIHRoZSBIL1cgc3VwcG9ydGVkIHJhdGVzCisJCQkJCQkJCQkJCQkJCQkvL2V4Y2VwdCB0byBub24tT0ZETSByYXRlcworCQkJCQkJCQkJCQkJCQkJLy82LCA5LCAxMiwgMTgsIDI0LCAzNiwgNDgsIDU0CisKKyNkZWZpbmUgTE9DQUxfMTFCX1NVUFBPUlRFRF9SQVRFX0JJVE1BUAkJCTB4ODI2CisjZGVmaW5lIExPQ0FMXzExQl9CQVNJQ19SQVRFX0JJVE1BUAkJCQkweDgyNgorI2RlZmluZSBMT0NBTF8xMUJfT1BFUkFUSU9OX1JBVEVfQklUTUFQCQkJMHg4MjYKKyNkZWZpbmUgTE9DQUxfMTFHX0JBU0lDX1JBVEVfQklUTUFQCQkJCTB4ODI2CQkvLzEsIDIsIDUuNSwgMTEKKyNkZWZpbmUgTE9DQUxfMTFHX09QRVJBVElPTl9SQVRFX0JJVE1BUAkJCTB4MTMwYzEyNDAJLy82LCA5LCAxMiwgMTgsIDI0LCAzNiwgNDgsIDU0CisjZGVmaW5lIExPQ0FMXzExQV9CQVNJQ19SQVRFX0JJVE1BUAkJCQkweDAxMDAxMDQwCS8vNiwgMTIsIDI0CisjZGVmaW5lIExPQ0FMXzExQV9PUEVSQVRJT05fUkFURV9CSVRNQVAJCQkweDEyMGMwMjAwCS8vOSwgMTgsIDM2LCA0OCwgNTQKKworCisKKyNkZWZpbmUgUFdSX0FDVElWRQkJMAorI2RlZmluZSBQV1JfU0FWRQkJMQorI2RlZmluZSBQV1JfVFhfSURMRV9DWUNMRQkJCTYKKworLy9iUHJlYW1ibGVNb2RlIGFuZCBiU2xvdFRpbWVNb2RlCisjZGVmaW5lIEFVVE9fTU9ERQkJCTAKKyNkZWZpbmUgTE9OR19NT0RFCQkJMQorCisvL1JlZ2lvbiBkZWZpbml0aW9uCisjZGVmaW5lIFJFR0lPTl9BVVRPCQkJMHhmZgorI2RlZmluZSBSRUdJT05fVU5LTk9XTgkJMAorI2RlZmluZSBSRUdJT05fRVVST1BFCQkxCS8vRVRTSQorI2RlZmluZSBSRUdJT05fSkFQQU4JCTIJLy9NS0sKKyNkZWZpbmUgUkVHSU9OX1VTQQkJCTMJLy9GQ0MKKyNkZWZpbmUJUkVHSU9OX0ZSQU5DRQkJNAkvL0ZSQU5DRQorI2RlZmluZSBSRUdJT05fU1BBSU4JCTUJLy9TUEFJTgorI2RlZmluZSBSRUdJT05fSVNSQUVMCQk2CS8vSVNSQUVMCisvLyNkZWZpbmUgUkVHSU9OX0NBTkFEQQkJNwkvL0lDCisKKyNkZWZpbmUgTUFYX0JTU19ERVNDUklQVF9FTEVNRU5UCQkzMgorI2RlZmluZSBNQVhfUE1LSURfQ2FuZGlkYXRlTGlzdCAgICAgICAgIDE2CisKKy8vSGlnaCBieXRlIDogRXZlbnQgbnVtYmVyLCAgbG93IGJ5dGUgOiByZWFzb24KKy8vRXZlbnQgZGVmaW5pdGlvbgorLy8tLSBTTUUvTUxNRSBldmVudAorI2RlZmluZSBFVkVOVF9SQ1ZfREVBVVRICQkJCQkweDAxMDAKKyNkZWZpbmUgRVZFTlRfSk9JTl9GQUlMCQkJCQkJMHgwMjAwCisjZGVmaW5lIEVWRU5UX0FVVEhfRkFJTAkJCQkJCTB4MDMwMAorI2RlZmluZSBFVkVOVF9BU1NPQ19GQUlMCQkJCQkweDA0MDAKKyNkZWZpbmUgRVZFTlRfTE9TVF9TSUdOQUwJCQkJCTB4MDUwMAorI2RlZmluZSBFVkVOVF9CU1NfREVTQ1JJUFRfTEFDSwkJCQkweDA2MDAKKyNkZWZpbmUgRVZFTlRfQ09VTlRFUk1FQVNVUkUJCQkJMHgwNzAwCisjZGVmaW5lIEVWRU5UX0pPSU5fRklMVEVSCQkJCQkweDA4MDAKKy8vLS0gVFgvUlggZXZlbnQKKyNkZWZpbmUgRVZFTlRfUlhfQlVGRl9VTkFWQUlMQUJMRQkJCTB4NDEwMAorCisjZGVmaW5lIEVWRU5UX0NPTk5FQ1QJCQkJCQkweDgxMDAKKyNkZWZpbmUgRVZFTlRfRElTQ09OTkVDVAkJCQkJMHg4MjAwCisjZGVmaW5lIEVWRU5UX1NDQU5fUkVRCQkJCQkJMHg4MzAwCisKKy8vUmVhc29uIG9mIEV2ZW50CisjZGVmaW5lIEVWRU5UX1JFQVNPTl9GSUxURVJfQkFTSUNfUkFURQkJMHgwMDAxCisjZGVmaW5lIEVWRU5UX1JFQVNPTl9GSUxURVJfUFJJVkFDWQkJCTB4MDAwMgorI2RlZmluZSBFVkVOVF9SRUFTT05fRklMVEVSX0FVVEhfTU9ERQkJMHgwMDAzCisjZGVmaW5lIEVWRU5UX1JFQVNPTl9USU1FT1VUCQkJCTB4MDBmZgorCisvLyAyMDA2MTEwOCBXUFMgSUUgYnVmZmVyCisjZGVmaW5lIE1BWF9JRV9BUFBFTkRfU0laRQkJCQkJMjU2ICsgNCAvLyBEdWUgdG8gW0UgaWRdW0xlbmd0aF1bT1VJXVtEYXRhXSBtYXkgMjU3IGJ5dGVzCisKK3R5cGVkZWYgc3RydWN0IF9FVkVOVExPRworeworCXUxNgkJQ291bnQ7CQkJLy9Ub3RhbCBjb3VudCBmcm9tIHN0YXJ0CisJdTE2CQlpbmRleDsJCQkvL0J1ZmZlciBpbmRleCwgMCB+IDYzCisJdTMyCQlFdmVudFZhbHVlWzY0XTsJLy9CWVRFIDN+MiA6IGNvdW50LCBCWVRFIDEgOiBFdmVudCwgQllURSAwIDogcmVhc29uCit9IEV2ZW50X0xvZywgKnBFdmVudF9Mb2c7CisKK3R5cGVkZWYgc3RydWN0IF9DaGFuSW5mbworeworCXU4CQliYW5kOworCXU4CQlDaGFuTm87Cit9IENoYW5JbmZvLCAqcENoYW5JbmZvOworCit0eXBlZGVmIHN0cnVjdCBfQ0hBTl9MSVNUCit7CisJdTE2CQkJCUNvdW50OworCUNoYW5JbmZvCQlDaGFubmVsWzUwXTsgLy8gMTAwQgorfSBDSEFOX0xJU1QsICpwc0NIQU5fTElTVDsKKwordHlwZWRlZiBzdHJ1Y3QgX1JhZGlvT2ZmCit7CisJdTgJCQlib0h3UmFkaW9PZmY7CisJdTgJCQlib1N3UmFkaW9PZmY7Cit9IFJhZGlvT2ZmLCAqcHNSYWRpb09mZjsKKworLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK3R5cGVkZWYgc3RydWN0IExPQ0FMX1BBUkEKK3sKKwl1OAkJCVBlcm1hbmVudEFkZHJlc3NbIE1BQ19BRERSX0xFTkdUSCArIDIgXTsgCS8vIHJlYWQgZnJvbSBFUFJPTSwgbWFudWZhY3R1cmUgc2V0IGZvciBlYWNoIE5ldENhcmQKKyAgICB1OCAgICAJCVRoaXNNYWNBZGRyZXNzWyBNQUNfQUREUl9MRU5HVEggKyAyIF07CQkJLy8gdGhlIGRyaXZlciB3aWxsIHVzZSBhY3R1YWxseS4KKworCXUzMgkJCU1UVXNpemU7CQkJCS8vIEluZCB0byBVcGxheWVyLCBNYXggdHJhbnNtaXNzaW9uIHVuaXQgc2l6ZQorCisJdTgJCQlyZWdpb25fSU5GOwkvL3JlZ2lvbiBzZXR0aW5nIGZyb20gSU5GCisJdTgJCQlyZWdpb247CQkvL3JlYWwgcmVnaW9uIHNldHRpbmcgb2YgdGhlIGRldmljZQorCXU4CQkJUmVzZXJ2ZWRfMVsyXTsKKworICAgIC8vLy8gcG93ZXItc2F2ZSB2YXJpYWJsZXMKKyAgICB1OCAgCQkgIAlpUG93ZXJTYXZlTW9kZTsgICAgIC8vIDAgaW5kaWNhdGVzIGl0IGlzIG9uLCAxIGluZGljYXRlcyBpdCBpcyBvZmYKKwl1OAkJCVNodXREb3duZWQ7CisJdTgJCQlBVElNbW9kZTsKKwl1OAkJCUV4Y2x1ZGVVbmVuY3J5cHRlZDsKKworCXUxNgkJCUNoZWNrQ291bnRGb3JQUzsJLy9Vbml0IGltZSBjb3VudCBmb3IgdGhlIGRlY2lzaW9uIHRvIGVudGVyIFBTIG1vZGUKKwl1OAkJCWJvSGFzVHhBY3Rpdml0eTsJLy90eCBhY3Rpdml0eSBoYXMgb2NjdXJyZWQKKwl1OAkJCWJvTWFjUHNWYWxpZDsJCS8vUG93ZXIgc2F2ZSBtb2RlIG9idGFpbmVkIGZyb20gSC9XIGlzIHZhbGlkIG9yIG5vdAorCisJLy8vLyBSYXRlCisJdTgJCQlUeFJhdGVNb2RlOwkJCQkvLyBJbml0aWFsLCBpbnB1dCBmcm9tIFJlZ2lzdHJ5LCBtYXkgYmUgdXBkYXRlZCBieSBHVUkKKwkJCQkJCQkJCQkJLy9UeCBSYXRlIE1vZGU6IGF1dG8oRFRPIG9uKSwgbWF4LCAxTSwgMk0sIC4uCisJdTgJCQlDdXJyZW50VHhSYXRlOwkJCS8vIFRoZSBjdXJyZW50IFR4IHJhdGUKKwl1OAkJCUN1cnJlbnRUeFJhdGVGb3JNbmc7CS8vIFRoZSBjdXJyZW50IFR4IHJhdGUgZm9yIG1hbmFnZW1lbnQgZnJhbWVzCisJCQkJCQkJCQkJLy8gSXQgd2lsbCBiZSBkZWNpZGVkIGJlZm9yZSBjb25uZWN0aW9uIHN1Y2NlZWRzLgorCXU4CQkJQ3VycmVudFR4RmFsbGJhY2tSYXRlOworCisJLy9mb3IgUmF0ZSBoYW5kbGVyCisJdTgJCQlCUmF0ZVNldFszMl07CQkJLy9iYXNpYyByYXRlIHNldAorCXU4CQkJU1JhdGVTZXRbMzJdOwkJCS8vc3VwcG9ydCByYXRlIHNldAorCisJdTgJCQlOdW1PZkJSYXRlOworCXU4CQkJTnVtT2ZTUmF0ZTsKKwl1OAkJCU51bU9mRHNzc1JhdGVJblNSYXRlOwkvL251bWJlciBvZiBEU1NTIHJhdGVzIGluIHN1cHBvcnRlZCByYXRlIHNldAorCXU4CQkJcmVzZXJ2ZWQxOworCisJdTMyCQkJZHdCYXNpY1JhdGVCaXRtYXA7CQkvL2JpdCBtYXAgb2YgYmFzaWMgcmF0ZXMKKwl1MzIJCQlkd1N1cHBvcnRSYXRlQml0bWFwOwkvL2JpdCBtYXAgb2YgYWxsIHN1cHBvcnQgcmF0ZXMgaW5jbHVkaW5nCisJCQkJCQkJCQkJLy9iYXNpYyBhbmQgb3BlcmF0aW9uYWwgcmF0ZXMKKworCS8vLy9Gb3IgU01FL01MTUUgaGFuZGxlcgorCXUxNgkJCXdPbGRTVEFpbmRleDsJCQkvLyB2YWxpZCB3aGVuIGJvSGFuZG92ZXI9VFJVRSwgc3RvcmUgb2xkIGNvbm5lY3RlZCBTVEEgaW5kZXgKKwl1MTYJCQl3Q29ubmVjdGVkU1RBaW5kZXg7CQkvLyBJbmRleCBvZiBwZWVybHkgY29ubmVjdGVkIEFQIG9yIElCU1MgaW4KKwkJCQkJCQkJCQkvLyB0aGUgZGVzY3JpcHRpb25zZXQuCisgICAgdTE2CQkJQXNzb2NpYXRpb25fSUQ7ICAgICAJLy8gVGhlIEFzc29jaWF0aW9uIElEIGluIHRoZSAoUmUpQXNzb2NpYXRpb24KKyAgICAgICAgICAgIAkgICAgICAgICAgICAgICAgICAgIAkvLyBSZXNwb25zZSBmcmFtZS4KKyAgICB1MTYJCQlMaXN0ZW5JbnRlcnZhbDsgICAgIAkvLyBUaGUgbGlzdGVuIGludGVydmFsIHdoZW4gU01FIGludm9raW5nIE1MTUVfCisgICAgICAgICAgICAJICAgICAgICAgICAgICAgICAgICAJLy8gKFJlKUFzc29jaWF0ZV9SZXF1ZXN0KCkuCisKKwlSYWRpb09mZgkJUmFkaW9PZmZTdGF0dXM7CisJdTgJCQlSZXNlcnZlZDBbMl07CisKKwl1OAkJCWJvTXNSYWRpb09mZjsJCQkvLyBOZGlzIGRlbWFuZHMgdG8gYmUgdHJ1ZSB3aGVuIHNldCBEaXNhc3NvYy4gT0lEIGFuZCBiZSBmYWxzZSB3aGVuIHNldCBTU0lEIE9JRC4KKwl1OAkJCWJvQW50ZW5uYURpdmVyc2l0eTsJCS8vVFJVRS9PTiBvciBGQUxTRS9PRkYKKwl1OAkJCWJBbnRlbm5hTm87CQkJCS8vd2hpY2ggYW50ZW5uYQorCXU4CQkJYkNvbm5lY3RGbGFnOwkJCS8vdGhlIGNvbm5lY3Qgc3RhdHVzIGZsYWcgZm9yIHJvYW1pbmcgdGFzaworCisJdTgJCQlSb2FtU3RhdHVzOworCXU4CQkJcmVzZXJ2ZWQ3WzNdOworCisJQ2hhbkluZm8JQ3VycmVudENoYW47CQkJLy9DdXJyZW50IGNoYW5uZWwgbm8uIGFuZCBjaGFubmVsIGJhbmQuIEl0IG1heSBiZSBjaGFuZ2VkIGJ5IHNjYW5uaW5nLgorCXU4CQkJYm9IYW5kb3ZlcjsJCQkJLy8gUm9hbWluZywgSG5hZG92ZXIgdG8gb3RoZXIgQVAuCisJdTgJCQlib0NDQWJ1c3k7CisKKwl1MTYJCQlDV01heDsJCQkJCS8vIEl0IG1heSBub3QgYmUgdGhlIHJlYWwgdmFsdWUgdGhhdCBIL1cgdXNlZAorCXU4CQkJQ1dNaW47CQkJCQkvLyAyNTU6IHNldCBhY2NvcmRpbmcgdG8gODAyLjExIHNwZWMuCisJdTgJCQlyZXNlcnZlZDI7CisKKwkvLzExRzoKKwl1OAkJCWJNYWNPcGVyYXRpb25Nb2RlOwkJLy8gb3BlcmF0aW9uIGluIDgwMi4xMWIgb3IgODAyLjExZworCXU4CQkJYlNsb3RUaW1lTW9kZTsJCQkvL0FVVE8sIHMzMgorCXU4CQkJYlByZWFtYmxlTW9kZTsJCQkvL0FVVE8sIHMzMgorCXU4CQkJYm9Ob25FUlBwcmVzZW50OworCisJdTgJCQlib1Byb3RlY3RNZWNoYW5pc207CS8vIEgvVyB3aWxsIHRha2UgdGhlIG5lY2Vzc2FyeSBhY3Rpb24gYmFzZWQgb24gdGhpcyB2YXJpYWJsZQorCXU4CQkJYm9TaG9ydFByZWFtYmxlOwkvLyBIL1cgd2lsbCB0YWtlIHRoZSBuZWNlc3NhcnkgYWN0aW9uIGJhc2VkIG9uIHRoaXMgdmFyaWFibGUKKwl1OAkJCWJvU2hvcnRTbG90VGltZTsJLy8gSC9XIHdpbGwgdGFrZSB0aGUgbmVjZXNzYXJ5IGFjdGlvbiBiYXNlZCBvbiB0aGlzIHZhcmlhYmxlCisJdTgJCQlyZXNlcnZlZF8zOworCisJdTMyICAgICAgIAlSU05fSUVfQml0bWFwOwkJLy9hZGRlZCBieSBXUworCXUzMiAgICAgIAkJUlNOX09VSV9UeXBlOwkJLy9hZGRlZCBieSBXUworCisJLy9Gb3IgdGhlIEJTU0lECisJdTgJCQlId0Jzc2lkW01BQ19BRERSX0xFTkdUSCArIDJdOworCXUzMgkJCUh3QnNzaWRWYWxpZDsKKworCS8vRm9yIHNjYW4gbGlzdAorCXU4CQkJQnNzTGlzdENvdW50OwkJCQkJCQkvL1RvdGFsIGNvdW50IG9mIHZhbGlkIGRlc2NyaXB0b3IgaW5kZXhlcworCXU4CQkJYm9SZWNlaXZlVW5jb3JyZWN0SW5mbzsJLy9pbXBvcnRhbnQgc2V0dGluZ3MgaW4gYmVhY29uL3Byb2JlIHJlc3AuIGhhdmUgYmVlbiBjaGFuZ2VkCisJdTgJCQlOb09mSm9pbmVySW5JYnNzOworCXU4CQkJcmVzZXJ2ZWRfNDsKKworCXU4CQkJQnNzTGlzdEluZGV4WyAoTUFYX0JTU19ERVNDUklQVF9FTEVNRU5UKzMpICYgfjB4MDMgXTsJLy9TdG9yZSB0aGUgdmFsaWQgZGVzY3JpcHRvciBpbmRleGVzIG9idGFpbmVkIGZyb20gc2Nhbm5pbmdzCisJdTgJCQlKb2luZXJJbklic3NbIChNQVhfQlNTX0RFU0NSSVBUX0VMRU1FTlQrMykgJiB+MHgwMyBdOwkvL3NhdmUgdGhlIEJzc0Rlc2NyaXB0b3IgaW5kZXggaW4gdGhpcworCQkJCQkJCQkJCQkJCQkvL0lCU1MuIFRoZSBpbmRleCAwIGlzIGxvY2FsIGRlc2NyaXB0b3IKKwkJCQkJCQkJCQkJCQkJLy8ocHNMT0NBTC0+d0Nvbm5lY3RlZFNUQWluZGV4KS4KKwkJCQkJCQkJCQkJCQkJLy9JZiBDT05ORUNURUQgOiBOb09mSm9pbmVySW5JYnNzID49MgorCQkJCQkJCQkJCQkJCQkvLwkJZWxzZSAgIDogTm9PZkpvaW5lckluSWJzcyA8PTEKKworCS8vLy8gR2VuZXJhbCBTdGF0aXN0aWNzLCBjb3VudCBhdCBSeF9oYW5kbGVyIG9yIFR4X2NhbGxiYWNrIGludGVycnVwdCBoYW5kbGVyCisgICAgdTY0IAlHU19YTUlUX09LOwkJCQkvLyBHb29kIEZyYW1lcyBUcmFuc21pdHRlZAorICAgIHU2NCAJR1NfUkNWX09LOwkJCQkvLyBHb29kIEZyYW1lcyBSZWNlaXZlZAorCXUzMgkJR1NfUkNWX0VSUk9SOwkJCS8vIEZyYW1lcyByZWNlaXZlZCB3aXRoIGNyYyBlcnJvcgorCXUzMgkJR1NfWE1JVF9FUlJPUjsJCQkvLyBCYWQgRnJhbWVzIFRyYW5zbWl0dGVkCisJdTMyCQlHU19SQ1ZfTk9fQlVGRkVSOwkJLy8gUmVjZWl2ZSBCdWZmZXIgdW5kZXJydW4KKwl1MzIJCUdTX1hNSVRfT05FX0NPTExJU0lPTjsJLy8gb25lIGNvbGxpc2lvbgorCXUzMgkJR1NfWE1JVF9NT1JFX0NPTExJU0lPTlM7Ly8gbW9yZSBjb2xsaXNpb25zCisKKyAgICAvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgICAvLyBTdGF0aXN0aWNzIChubyBtYXR0ZXIgd2hldGhlciBpdCBoYWQgZG9uZSBzdWNjZXNzZnVsbHkpIC13a2NoZW4KKyAgICAvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgICB1MzIJCSAgIAlfTnVtUnhNU0RVOworICAgIHUzMgkgICAJCV9OdW1UeE1TRFU7CisgICAgdTMyCSAgIAkJX2RvdDExV0VQRXhjbHVkZWRDb3VudDsKKyAgICB1MzIJICAgCQlfZG90MTFXRVBVbmRlY3J5cHRhYmxlQ291bnQ7CisgICAgdTMyCSAgIAkJX2RvdDExRnJhbWVEdXBsaWNhdGVDb3VudDsKKworCUNoYW5JbmZvCUlic3NDaGFuU2V0dGluZzsJLy8gMkIuIFN0YXJ0IElCU1MgQ2hhbm5lbCBzZXR0aW5nIGJ5IHJlZ2lzdHJ5IG9yIFdXVS4KKwl1OAkJcmVzZXJ2ZWRfNVsyXTsJCS8vSXQgbWF5IG5vdCBiZSB1c2VkIGFmdGVyIGNvbnNpZGVyaW5nIFJGIHR5cGUsCisJCQkJCQkJCQkvL3JlZ2lvbiBhbmQgbW9kdWxhdGlvbiB0eXBlLgorCisJQ0hBTl9MSVNUCXNTdXBwb3J0Q2hhbkxpc3Q7CS8vIDg2Qi4gSXQgd2lsbCBiZSBvYnRhaW5lZCBhY2NvcmRpbmcgdG8gUkYgdHlwZSBhbmQgcmVnaW9uCisJdTgJCXJlc2VydmVkXzZbMl07CQkvL3R3byB2YXJpYWJsZXMgYXJlIGZvciB3ZXAga2V5IGVycm9yIGRldGVjdGlvbiBhZGRlZCBieSB3cyAwMi8wMi8wNAorCisgICAgdTMyCSAgICAgIGJXZXBLZXlFcnJvcjsKKyAgICB1MzIgICAgICAgICBiVG9TZWxmUGFja2V0UmVjZWl2ZWQ7CisgICAgdTMyICAgICAgICAgV2VwS2V5RGV0ZWN0VGltZXJDb3VudDsKKworCUV2ZW50X0xvZwlFdmVudExvZzsKKworCXUxNgkJU2lnbmFsTG9zdFRoOworCXUxNgkJU2lnbmFsUm9hbVRoOworCisJLy8gMjAwNjExMDggV1BTIElFIEFwcGVuZAorCXU4CQlJRV9BcHBlbmRfZGF0YVtNQVhfSUVfQVBQRU5EX1NJWkVdOworCXUxNgkJSUVfQXBwZW5kX3NpemU7CisJdTE2CQlyZXNlcnZlZF83OworCit9IFdCX0xPQ0FMREVTQ1JJUFQsICpQV0JfTE9DQUxERVNDUklQVDsKKworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9tYWNfc3RydWN0dXJlcy5oIGIvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvbWFjX3N0cnVjdHVyZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMzFkMmNiCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvbWFjX3N0cnVjdHVyZXMuaApAQCAtMCwwICsxLDY3MCBAQAorLy8rKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCisvLyBNQUNfU3RydWN0dXJlcy5oCisvLworLy8gVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBkZWZpbml0aW9ucyBhbmQgZGF0YSBzdHJ1Y3R1cmVzIHVzZWQgYnkgU1ctTUFDLgorLy8KKy8vIFJldmlzaW9uIEhpc3RveQorLy89PT09PT09PT09PT09PT09PQorLy8gMC4xICAgICAgMjAwMiAgICAgICAgVU4wMAorLy8gMC4yICAgICAgMjAwMjEwMDQgICAgUEQ0MyBDQ0xpdTYKKy8vICAgICAgICAgIDIwMDIxMDE4ICAgIFBENDMgQ0NMaXU2CisvLyAgICAgICAgICAgICAgICAgICAgICBBZGQgZW51bV9UeFJhdGUgdHlwZQorLy8gICAgICAgICAgICAgICAgICAgICAgTW9kaWZ5IGVudW1fU1RBU3RhdGUgdHlwZQorLy8gMC4zICAgICAgMjAwMjEwMjMgICAgUEUyMyBDWUxpdSB1cGRhdGUgTUFDIHNlc3Npb24gc3RydWN0CisvLyAgICAgICAgICAyMDAyMTEwOAorLy8gICAgICAgICAgMjAwMjExMjIgICAgUEQ0MyBBdXN0aW4KKy8vICAgICAgICAgICAgICAgICAgICAgIERlbGV0ZWQgc29tZSB1bnVzZWQuCisvLyAgICAgICAgICAyMDAyMTEyOSAgICBQRDQzIEF1c3RpbgorLy8JCQkyMDAzMDYxNwlpbmNyZWFzZSB0aGUgODAyLjExZyBkZWZpbml0aW9uCisvLysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKKworI2lmbmRlZiBfTUFDX1N0cnVjdHVyZXNfSF8KKyNkZWZpbmUgX01BQ19TdHJ1Y3R1cmVzX0hfCisKKworLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vIFNvbWUgbWlzY2VsbGFuZW91cyBkZWZpbml0aW9ucworLy8tLS0tLQorI2RlZmluZSBNQVhfQ0hBTk5FTFMgICAgICAgICAgICAgICAgICAgICAgICAzMAorI2RlZmluZSBNQUNfQUREUl9MRU5HVEggICAgICAgICAgICAgICAgICAgICA2CisjZGVmaW5lIE1BWF9XRVBfS0VZX1NJWkUgICAgICAgICAgICAgICAgICAgIDE2ICAvLyAxMjggYml0cworI2RlZmluZQlNQVhfODAyXzExX0ZSQUdNRU5UX05VTUJFUgkJMTAgLy8gQnkgc3BlYworCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLyA4MDIuMTEgRnJhbWUgZGVmaW5lCisvLy0tLS0tCisjZGVmaW5lIE1BU0tfUFJPVE9DT0xfVkVSU0lPTl9UWVBFCTB4MEYKKyNkZWZpbmUgTUFTS19GUkFHTUVOVF9OVU1CRVIJCTB4MDAwRgorI2RlZmluZSBTRVFVRU5DRV9OVU1CRVJfU0hJRlQJCTQKKyNkZWZpbmUgRElGRkVSXzExX1RPXzMJCQkJMTgKKyNkZWZpbmUgRE9UXzExX01BQ19IRUFERVJfU0laRQkJMjQKKyNkZWZpbmUgRE9UXzExX1NOQVBfU0laRQkJCTYKKyNkZWZpbmUgRE9UXzExX0RVUkFUSU9OX09GRlNFVAkJMgorI2RlZmluZSBET1RfMTFfU0VRVUVOQ0VfT0ZGU0VUCQkyMiAvL1NlcXVlbmNlIGNvbnRyb2wgb2Zmc2V0CisjZGVmaW5lIERPVF8xMV9UWVBFX09GRlNFVAkJCTMwIC8vVGhlIHN0YXJ0IG9mZnNldCBvZiA4MDIuMTEgRnJhbWUvLworI2RlZmluZSBET1RfMTFfREFUQV9PRkZTRVQgICAgICAgICAgMjQKKyNkZWZpbmUgRE9UXzExX0RBX09GRlNFVAkJCTQKKyNkZWZpbmUgRE9UXzNfVFlQRV9BUlAJCQkJMHg4MEYzCisjZGVmaW5lIERPVF8zX1RZUEVfSVBYCQkJCTB4ODEzNworI2RlZmluZSBET1RfM19UWVBFX09GRlNFVAkJCTEyCisKKworI2RlZmluZSBFVEhFUk5FVF9IRUFERVJfU0laRQkJCTE0CisjZGVmaW5lIE1BWF9FVEhFUk5FVF9QQUNLRVRfU0laRQkJMTUxNAorCisKKy8vLS0tLS0gIG1hbmFnZW1lbnQgOiBUeXBlIG9mIEJpdHMgKDIsIDMpIGFuZCBTdWJ0eXBlIG9mIEJpdHMgKDQsIDUsIDYsIDcpCisjZGVmaW5lIE1BQ19TVUJUWVBFX01OR01OVF9BU1NPQ19SRVFVRVNUICAgIDB4MDAKKyNkZWZpbmUgTUFDX1NVQlRZUEVfTU5HTU5UX0FTU09DX1JFU1BPTlNFICAgMHgxMAorI2RlZmluZSBNQUNfU1VCVFlQRV9NTkdNTlRfUkVBU1NPQ19SRVFVRVNUICAweDIwCisjZGVmaW5lIE1BQ19TVUJUWVBFX01OR01OVF9SRUFTU09DX1JFU1BPTlNFIDB4MzAKKyNkZWZpbmUgTUFDX1NVQlRZUEVfTU5HTU5UX1BST0JFX1JFUVVFU1QgICAgMHg0MAorI2RlZmluZSBNQUNfU1VCVFlQRV9NTkdNTlRfUFJPQkVfUkVTUE9OU0UgICAweDUwCisjZGVmaW5lIE1BQ19TVUJUWVBFX01OR01OVF9CRUFDT04gICAgICAgICAgIDB4ODAKKyNkZWZpbmUgTUFDX1NVQlRZUEVfTU5HTU5UX0FUSU0gICAgICAgICAgICAgMHg5MAorI2RlZmluZSBNQUNfU1VCVFlQRV9NTkdNTlRfRElTQVNTT0NJQVRJT04gICAweEEwCisjZGVmaW5lIE1BQ19TVUJUWVBFX01OR01OVF9BVVRIRU5USUNBVElPTiAgIDB4QjAKKyNkZWZpbmUgTUFDX1NVQlRZUEVfTU5HTU5UX0RFQVVUSEVOVElDQVRJT04gMHhDMAorCisvLy0tLS0tICBjb250cm9sIDogVHlwZSBvZiBCaXRzICgyLCAzKSBhbmQgU3VidHlwZSBvZiBCaXRzICg0LCA1LCA2LCA3KQorI2RlZmluZSBNQUNfU1VCVFlQRV9DT05UUk9MX1BTUE9MTCAgICAgICAgICAweEE0CisjZGVmaW5lIE1BQ19TVUJUWVBFX0NPTlRST0xfUlRTICAgICAgICAgICAgIDB4QjQKKyNkZWZpbmUgTUFDX1NVQlRZUEVfQ09OVFJPTF9DVFMgICAgICAgICAgICAgMHhDNAorI2RlZmluZSBNQUNfU1VCVFlQRV9DT05UUk9MX0FDSyAgICAgICAgICAgICAweEQ0CisjZGVmaW5lIE1BQ19TVUJUWVBFX0NPTlRST0xfQ0ZFTkQgICAgICAgICAgIDB4RTQKKyNkZWZpbmUgTUFDX1NVQlRZUEVfQ09OVFJPTF9DRkVORF9DRkFDSyAgICAgMHhGNAorCisvLy0tLS0tICBkYXRhIDogVHlwZSBvZiBCaXRzICgyLCAzKSBhbmQgU3VidHlwZSBvZiBCaXRzICg0LCA1LCA2LCA3KQorI2RlZmluZSBNQUNfU1VCVFlQRV9EQVRBICAgICAgICAgICAgICAgICAgICAweDA4CisjZGVmaW5lIE1BQ19TVUJUWVBFX0RBVEFfQ0ZBQ0sgICAgICAgICAgICAgIDB4MTgKKyNkZWZpbmUgTUFDX1NVQlRZUEVfREFUQV9DRlBPTEwgICAgICAgICAgICAgMHgyOAorI2RlZmluZSBNQUNfU1VCVFlQRV9EQVRBX0NGQUNLX0NGUE9MTCAgICAgICAweDM4CisjZGVmaW5lIE1BQ19TVUJUWVBFX0RBVEFfTlVMTCAgICAgICAgICAgICAgIDB4NDgKKyNkZWZpbmUgTUFDX1NVQlRZUEVfREFUQV9DRkFDS19OVUxMICAgICAgICAgMHg1OAorI2RlZmluZSBNQUNfU1VCVFlQRV9EQVRBX0NGUE9MTF9OVUxMICAgICAgICAweDY4CisjZGVmaW5lIE1BQ19TVUJUWVBFX0RBVEFfQ0ZBQ0tfQ0ZQT0xMX05VTEwgIDB4NzgKKworLy8tLS0tLSAgRnJhbWUgVHlwZSBvZiBCaXRzICgyLCAzKQorI2RlZmluZSBNQUNfVFlQRV9NQU5BR0VNRU5UICAgICAgICAgICAgICAgICAweDAwCisjZGVmaW5lIE1BQ19UWVBFX0NPTlRST0wgICAgICAgICAgICAgICAgICAgIDB4MDQKKyNkZWZpbmUgTUFDX1RZUEVfREFUQSAgICAgICAgICAgICAgICAgICAgICAgMHgwOAorCisvLy0tLS0tIGRlZmluaXRpb25zIGZvciBNYW5hZ2VtZW50IEZyYW1lIEVsZW1lbnQgSUQgKDEgQllURSkKKyNkZWZpbmUgRUxFTUVOVF9JRF9TU0lEICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBFTEVNRU5UX0lEX1NVUFBPUlRFRF9SQVRFUyAgICAgICAgICAxCisjZGVmaW5lIEVMRU1FTlRfSURfRkhfUEFSQU1FVEVSX1NFVCAgICAgICAgIDIKKyNkZWZpbmUgRUxFTUVOVF9JRF9EU19QQVJBTUVURVJfU0VUICAgICAgICAgMworI2RlZmluZSBFTEVNRU5UX0lEX0NGX1BBUkFNRVRFUl9TRVQgICAgICAgICA0CisjZGVmaW5lIEVMRU1FTlRfSURfVElNICAgICAgICAgICAgICAgICAgICAgIDUKKyNkZWZpbmUgRUxFTUVOVF9JRF9JQlNTX1BBUkFNRVRFUl9TRVQgICAgICAgNgorLy8gN34xNSByZXNlcnZlcmQKKyNkZWZpbmUgRUxFTUVOVF9JRF9DSEFMTEVOR0VfVEVYVCAgICAgICAgICAgMTYKKy8vIDE3fjMxIHJlc2VydmVkIGZvciBjaGFsbGVuZ2UgdGV4dCBleHRlbnNpb24KKy8vIDMyfjI1NSByZXNlcnZlZAorLy8tLSAgMTFHICAtLQorI2RlZmluZSBFTEVNRU5UX0lEX0VSUF9JTkZPUk1BVElPTgkJCTQyCisjZGVmaW5lIEVMRU1FTlRfSURfRVhURU5ERURfU1VQUE9SVEVEX1JBVEVTIDUwCisKKy8vLS0gIFdQQSAgLS0KKworI2RlZmluZSBFTEVNRU5UX0lEX1JTTl9XUEEJCQkJCTIyMQorI2lmZGVmIF9XUEEyXworI2RlZmluZSBFTEVNRU5UX0lEX1JTTl9XUEEyCQkJCSAgICA0OAorI2VuZGlmIC8vZW5kaWYgV1BBMgorCisjZGVmaW5lIFdMQU5fTUFYX1BBSVJXSVNFX0NJUEhFUl9TVUlURV9DT1VOVCAgICAoKHUxNikgNikKKyNkZWZpbmUgV0xBTl9NQVhfQVVUSF9LRVlfTUdUX1NVSVRFX0xJU1RfQ09VTlQgICgodTE2KSAyKQorCisjaWZkZWYgV0JfTElOVVgKKyNkZWZpbmUgVU5BTElHTkVECisjZW5kaWYKKworLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQordHlwZWRlZiBlbnVtIGVudW1fUG93ZXJNYW5hZ2VtZW50TW9kZQoreworICAgIEFDVElWRSA9IDAsCisgICAgUE9XRVJfU0FWRQorfSBXQl9QTV9Nb2RlLCAqUFdCX1BNX01PREU7CisKKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8gIFJlYXNvbiBDb2RlIChUYWJsZSAxOCk6IGluZGljYXRlIHRoZSByZWFzb24gb2YgRGlzQXNzb2MsIERlQXV0aGVuCisvLyAgbGVuZ3RoIG9mIFJlYXNvbkNvZGUgaXMgMiBPY3RzLgorLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjZGVmaW5lIFJFQVNPTl9SRUFTRVJFRCAgICAgICAgICAgICAwCisjZGVmaW5lIFJFQVNPTl9VTlNQRUNJRElFRCAgICAgICAgICAxCisjZGVmaW5lIFJFQVNPTl9QUkVBVVRIX0lOVkFMSUQgICAgICAyCisjZGVmaW5lIERFQVVUSF9SRUFTT05fTEVGVF9CU1MgICAgICAzCisjZGVmaW5lIERJU0FTU19SRUFTT05fQVBfSU5BQ1RJVkUgICA0CisjZGVmaW5lIERJU0FTU19SRUFTT05fQVBfQlVTWSAgICAgICA1CisjZGVmaW5lIFJFQVNPTl9DTEFTUzJfRlJBTUVfRlJPTV9OT05BVVRIX1NUQSAgICA2CisjZGVmaW5lIFJFQVNPTl9DTEFTUzNfRlJBTUVfRlJPTV9OT05BU1NPX1NUQSAgICA3CisjZGVmaW5lIERJU0FTU19SRUFTT05fTEVGVF9CU1MgICAgICA4CisjZGVmaW5lIFJFQVNPTl9OT1RfQVVUSF9ZRVQgICAgICAgICA5CisvLzgwMi4xMWkgZGVmaW5lCisjZGVmaW5lIFJFQVNPTl9JTlZBTElEX0lFCQkJCQkJMTMKKyNkZWZpbmUgUkVBU09OX01JQ19FUlJPUgkJCQkJCTE0CisjZGVmaW5lIFJFQVNPTl80V0FZX0hBTkRTSEFLRV9USU1FT1VUCQkJMTUKKyNkZWZpbmUgUkVBU09OX0dST1VQS0VZX1VQREFURV9USU1FT1VUCQkJMTYKKyNkZWZpbmUgUkVBU09OX0lFX0RJRkZfNFdBWV9BU1NPQwkJCQkxNworI2RlZmluZSBSRUFTT05fSU5WQUxJRF9NVUxUSUNBU1RfQ0lQSEVSCQkJMTgKKyNkZWZpbmUgUkVBU09OX0lOVkFMSURfVU5JQ0FTVF9DSVBIRVIJCQkxOQorI2RlZmluZSBSRUFTT05fSU5WQUxJRF9BS01QCQkJCQkJMjAKKyNkZWZpbmUgUkVBU09OX1VOU1VQUE9SVEVEX1JTTklFX1ZFUlNJT04JCTIxCisjZGVmaW5lIFJFQVNPTl9JTlZBTElEX1JTTklFX0NBUEFCSUxJVFkJCQkyMgorI2RlZmluZSBSRUFTT05fODAyXzFYX0FVVEhfRkFJTAkJCQkJMjMKKyNkZWZpbmUJUkVBU09OX0NJUEhFUl9SRUpFQ1RfUEVSX1NFQ19QT0xJQ1kJCTE0CisKKy8qCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLyBlbnVtX01NUERVUmVzdWx0Q29kZSAtLQorLy8gICBTdGF0dXMgY29kZSAoMiBPY3RzKSBpbiB0aGUgTU1QRFUncyBmcmFtZSBib2R5LiBUYWJsZS4xOQorLy8KKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK2VudW0gZW51bV9NTVBEVVJlc3VsdENvZGUKK3sKKy8vICAgIFNVQ0NFU1MgICA9IDAsICAgICAgLy8gUmVkZWZpbmVkCisgICAgVU5TUEVDSUZJRURfRkFJTFVSRSAgICAgICAgICAgICAgICAgICAgICAgICA9IDEsCisKKyAgICAvLyAyIC0gOSBSZXNlcnZlZAorCisgICAgTk9UX1NVUFBST1RfQ0FQQUJJTElUSUVTICAgICAgICAgICAgICAgICAgICA9IDEwLAorCisgICAgLy9SRUFTU09DSUFUSU9OX0RFTklFRAorICAgIC8vCisgICAgUkVBU1NPQ19ERU5JRURfVU5BQkxFX0NGTV9BU1NPQ19FWElTVCAgICAgICA9IDExLAorCisgICAgLy9BU1NPQ0lBVElPTl9ERU5JRURfTk9UX0lOX1NUQU5EQVJECisgICAgLy8KKyAgICBBU1NPQ19ERU5JRURfUkVBU09OX05PVF9JTl9TVEFOREFSRCAgICAgICAgID0gMTIsCisgICAgUEVFUl9OT1RfU1VQUE9SVF9BVVRIX0FMR09SSVRITSAgICAgICAgICAgICA9IDEzLAorICAgIEFVVEhfU0VRTlVNX09VVF9PRl9FWFBFQ1QgICAgICAgICAgICAgICAgICAgPSAxNCwKKyAgICBBVVRIX1JFSkVDVF9SRUFTT05fQ0hBTExFTkdFX0ZBSUwgICAgICAgICAgID0gMTUsCisgICAgQVVUSF9SRUpFQ1RfUkVBU09OX1dBSVRfVElNRU9VVCAgICAgICAgICAgICA9IDE2LAorICAgIEFTU09DX0RFTklFRF9SRUFTT05fQVBfQlVTWSAgICAgICAgICAgICAgICAgPSAxNywKKyAgICBBU1NPQ19ERU5JRURfUkVBU09OX05PVF9TVVBQT1JUX0JBU0lDX1JBVEUgID0gMTgKK30gV0JfTU1QRFVSRVNVTFRDT0RFLCAqUFdCX01NUERVUkVTVUxUQ09ERTsKKyovCisKKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vIGVudW1fVHhSYXRlIC0tCisvLyAgIERlZmluZSB0aGUgdHJhbnNtaXNzaW9uIGNvbnN0YW50cyBiYXNlZCBvbiBXODlDMzIgTUFDCisvLyAgIHRhcmdldCBzcGVjaWZpY2F0aW9uLgorLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQordHlwZWRlZiBlbnVtIGVudW1fVHhSYXRlCit7CisgICAgVFhSQVRFXzFNICAgICAgICAgICAgICAgPSAwLAorICAgIFRYUkFURV8yTUxPTkcgICAgICAgICAgID0gMiwKKyAgICBUWFJBVEVfMk1TSE9SVCAgICAgICAgICA9IDMsCisgICAgVFhSQVRFXzU1TUxPTkcgICAgICAgICAgPSA0LAorICAgIFRYUkFURV81NU1TSE9SVCAgICAgICAgID0gNSwKKyAgICBUWFJBVEVfMTFNTE9ORyAgICAgICAgICA9IDYsCisgICAgVFhSQVRFXzExTVNIT1JUICAgICAgICAgPSA3LAorICAgIFRYUkFURV9BVVRPICAgICAgICAgICAgID0gMjU1ICAgICAgICAgICAvLyBQRDQzIDIwMDIxMTA4Cit9IFdCX1RYUkFURSwgKlBXQl9UWFJBVEU7CisKKworI2RlZmluZQlSQVRFX0JJVE1BUF8xTQkJCQkxCisjZGVmaW5lCVJBVEVfQklUTUFQXzJNCQkJCTIKKyNkZWZpbmUJUkFURV9CSVRNQVBfNWRvdDVNCQkJNQorI2RlZmluZSBSQVRFX0JJVE1BUF82TQkJCQk2CisjZGVmaW5lIFJBVEVfQklUTUFQXzlNCQkJCTkKKyNkZWZpbmUgUkFURV9CSVRNQVBfMTFNCQkJCTExCisjZGVmaW5lIFJBVEVfQklUTUFQXzEyTQkJCQkxMgorI2RlZmluZSBSQVRFX0JJVE1BUF8xOE0JCQkJMTgKKyNkZWZpbmUgUkFURV9CSVRNQVBfMjJNCQkJCTIyCisjZGVmaW5lIFJBVEVfQklUTUFQXzI0TQkJCQkyNAorI2RlZmluZSBSQVRFX0JJVE1BUF8zM00JCQkJMTcKKyNkZWZpbmUgUkFURV9CSVRNQVBfMzZNCQkJCTE5CisjZGVmaW5lIFJBVEVfQklUTUFQXzQ4TQkJCQkyNQorI2RlZmluZSBSQVRFX0JJVE1BUF81NE0JCQkJMjgKKworI2RlZmluZSBSQVRFX0FVVE8JCQkJCTAKKyNkZWZpbmUgUkFURV8xTQkJCQkJCTIKKyNkZWZpbmUgUkFURV8yTQkJCQkJCTQKKyNkZWZpbmUgUkFURV81ZG90NU0JCQkJCTExCisjZGVmaW5lIFJBVEVfNk0JCQkJCQkxMgorI2RlZmluZSBSQVRFXzlNCQkJCQkJMTgKKyNkZWZpbmUgUkFURV8xMU0JCQkJCTIyCisjZGVmaW5lIFJBVEVfMTJNCQkJCQkyNAorI2RlZmluZSBSQVRFXzE4TQkJCQkJMzYKKyNkZWZpbmUgUkFURV8yMk0JCQkJCTQ0CisjZGVmaW5lIFJBVEVfMjRNCQkJCQk0OAorI2RlZmluZSBSQVRFXzMzTQkJCQkJNjYKKyNkZWZpbmUgUkFURV8zNk0JCQkJCTcyCisjZGVmaW5lIFJBVEVfNDhNCQkJCQk5NgorI2RlZmluZSBSQVRFXzU0TQkJCQkJMTA4CisjZGVmaW5lIFJBVEVfTUFYCQkJCQkyNTUKKworLy9DQVBBQklMSVRZCisjZGVmaW5lIENBUEFCSUxJVFlfRVNTX0JJVAkJCQkweDAwMDEKKyNkZWZpbmUgQ0FQQUJJTElUWV9JQlNTX0JJVAkJCQkweDAwMDIKKyNkZWZpbmUgQ0FQQUJJTElUWV9DRl9QT0xMX0JJVAkJCTB4MDAwNAorI2RlZmluZSBDQVBBQklMSVRZX0NGX1BPTExfUkVRX0JJVAkJMHgwMDA4CisjZGVmaW5lIENBUEFCSUxJVFlfUFJJVkFDWV9CSVQJCQkweDAwMTAKKyNkZWZpbmUgQ0FQQUJJTElUWV9TSE9SVF9QUkVBTUJMRV9CSVQJMHgwMDIwCisjZGVmaW5lIENBUEFCSUxJVFlfUEJDQ19CSVQJCQkJMHgwMDQwCisjZGVmaW5lIENBUEFCSUxJVFlfQ0hBTl9BR0lMSVRZX0JJVAkJMHgwMDgwCisjZGVmaW5lIENBUEFCSUxJVFlfU0hPUlRfU0xPVF9USU1FX0JJVAkweDA0MDAKKyNkZWZpbmUgQ0FQQUJJTElUWV9EU1NTX09GRE1fQklUCQkweDIwMDAKKworCitzdHJ1Y3QgQ2FwYWJpbGl0eV9JbmZvcm1hdGlvbl9FbGVtZW50Cit7CisgIHVuaW9uCisgIHsKKyAgCXUxNiBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgd1ZhbHVlOworICAgICNpZmRlZiBfQklHX0VORElBTl8gIC8vMjAwNjA5MjYgYWRkIGJ5IGFuc29uJ3MgZW5kaWFuCisgICAgc3RydWN0IF9DYXBhYmlsaXR5CisgICAgeworICAgICAgICAvLy0tICAxMUcgIC0tCisJdTgJUmVzZXJ2ZWQzIDogMjsKKwl1OAlEU1NTX09GRE0gOiAxOworCXU4CVJlc2VydmVkMiA6IDI7CisJdTgJU2hvcnRfU2xvdF9UaW1lIDogMTsKKwl1OCAgICBSZXNlcnZlZDEgOiAyOworCXU4ICAgIENoYW5uZWxfQWdpbGl0eSA6IDE7CisJdTggICAgUEJDQyA6IDE7CisJdTggICAgU2hvcnRQcmVhbWJsZSA6IDE7CisJdTggICAgQ0ZfUHJpdmFjeSA6IDE7CisJdTggICAgQ0ZfUG9sbF9SZXF1ZXN0IDogMTsKKwl1OCAgICBDRl9Qb2xsYWJsZSA6IDE7CisJdTggICAgSUJTUyA6IDE7CisJdTggICAgRVNTIDogMTsKKyAgICB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBDYXBhYmlsaXR5OworICAgICNlbHNlCisgICAgc3RydWN0IF9DYXBhYmlsaXR5CisgICAgeworICAgICAgICB1OCAgICBFU1MgOiAxOworICAgICAgICB1OCAgICBJQlNTIDogMTsKKyAgICAgICAgdTggICAgQ0ZfUG9sbGFibGUgOiAxOworICAgICAgICB1OCAgICBDRl9Qb2xsX1JlcXVlc3QgOiAxOworICAgICAgICB1OCAgICBDRl9Qcml2YWN5IDogMTsKKyAgICAgICAgdTggICAgU2hvcnRQcmVhbWJsZSA6IDE7CisgICAgICAgIHU4ICAgIFBCQ0MgOiAxOworICAgICAgICB1OCAgICBDaGFubmVsX0FnaWxpdHkgOiAxOworICAgICAgICB1OCAgICBSZXNlcnZlZDEgOiAyOworCQkvLy0tICAxMUcgIC0tCisJCXU4CVNob3J0X1Nsb3RfVGltZSA6IDE7CisJCXU4CVJlc2VydmVkMiA6IDI7CisJCXU4CURTU1NfT0ZETSA6IDE7CisJCXU4CVJlc2VydmVkMyA6IDI7CisgICAgfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgQ2FwYWJpbGl0eTsKKyAgICAjZW5kaWYKKyAgfV9fYXR0cmlidXRlX18gKChwYWNrZWQpKSA7Cit9X19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCitzdHJ1Y3QgRkhfUGFyYW1ldGVyX1NldF9FbGVtZW50Cit7CisgICAgdTggICAgRWxlbWVudF9JRDsKKyAgICB1OCAgICBMZW5ndGg7CisgICAgdTggICAgRHdlbGxfVGltZVsyXTsKKyAgICB1OCAgICBIb3BfU2V0OworICAgIHU4ICAgIEhvcF9QYXR0ZXJuOworICAgIHU4ICAgIEhvcF9JbmRleDsKK307CisKK3N0cnVjdCBEU19QYXJhbWV0ZXJfU2V0X0VsZW1lbnQKK3sKKyAgICB1OCAgICBFbGVtZW50X0lEOworICAgIHU4ICAgIExlbmd0aDsKKyAgICB1OCAgICBDdXJyZW50X0NoYW5uZWw7Cit9OworCitzdHJ1Y3QgU3VwcG9ydGVkX1JhdGVzX0VsZW1lbnQKK3sKKyAgICB1OCAgICBFbGVtZW50X0lEOworICAgIHU4ICAgIExlbmd0aDsKKyAgICB1OCAgICBTdXBwb3J0ZWRSYXRlc1s4XTsKK31fX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKK3N0cnVjdCBTU0lEX0VsZW1lbnQKK3sKKyAgICB1OCAgICBFbGVtZW50X0lEOworICAgIHU4ICAgIExlbmd0aDsKKyAgICB1OCAgICBTU0lEWzMyXTsKK31fX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgOworCitzdHJ1Y3QgQ0ZfUGFyYW1ldGVyX1NldF9FbGVtZW50Cit7CisgICAgdTggICAgRWxlbWVudF9JRDsKKyAgICB1OCAgICBMZW5ndGg7CisgICAgdTggICAgQ0ZQX0NvdW50OworICAgIHU4ICAgIENGUF9QZXJpb2Q7CisgICAgdTggICAgQ0ZQX01heER1cmF0aW9uWzJdOyAgICAgLy8gaW4gVGltZSBVbml0cworICAgIHU4ICAgIENGUF9EdXJSZW1haW5pbmdbMl07ICAgIC8vIGluIHRpbWUgdW5pdHMKK307CisKK3N0cnVjdCBUSU1fRWxlbWVudAoreworICAgIHU4ICAgIEVsZW1lbnRfSUQ7CisgICAgdTggICAgTGVuZ3RoOworICAgIHU4ICAgIERUSU1fQ291bnQ7CisgICAgdTggICAgRFRJTV9QZXJpb2Q7CisgICAgdTggICAgQml0bWFwX0NvbnRyb2w7CisgICAgdTggICAgUGFydGlhbF9WaXJ0dWFsX0JpdG1hcFsyNTFdOworfTsKKworc3RydWN0IElCU1NfUGFyYW1ldGVyX1NldF9FbGVtZW50Cit7CisgICAgdTggICAgRWxlbWVudF9JRDsKKyAgICB1OCAgICBMZW5ndGg7CisgICAgdTggICAgQVRJTV9XaW5kb3dbMl07Cit9OworCitzdHJ1Y3QgQ2hhbGxlbmdlX1RleHRfRWxlbWVudAoreworICAgIHU4ICAgIEVsZW1lbnRfSUQ7CisgICAgdTggICAgTGVuZ3RoOworICAgIHU4ICAgIENoYWxsZW5nZV9UZXh0WzI1M107Cit9OworCitzdHJ1Y3QgUEhZX1BhcmFtZXRlcl9TZXRfRWxlbWVudAoreworLy8gIGludCAgICAgYVNsb3RUaW1lOworLy8gIGludCAgICAgYVNpZnNUaW1lOworICAgIHMzMiAgICAgYUNDQVRpbWU7CisgICAgczMyICAgICBhUnhUeFR1cm5hcm91bmRUaW1lOworICAgIHMzMiAgICAgYVR4UExDUERlbGF5OworICAgIHMzMiAgICAgUnhQTENQRGVsYXk7CisgICAgczMyICAgICBhUnhUeFN3aXRjaFRpbWU7CisgICAgczMyICAgICBhVHhSYW1wT250aW1lOworICAgIHMzMiAgICAgYVR4UmFtcE9mZlRpbWU7CisgICAgczMyICAgICBhVHhSRkRlbGF5OworICAgIHMzMiAgICAgYVJ4UkZEZWxheTsKKyAgICBzMzIgICAgIGFBaXJQcm9wYWdhdGlvblRpbWU7CisgICAgczMyICAgICBhTUFDUHJvY2Vzc2luZ0RlbGF5OworICAgIHMzMiAgICAgYVByZWFtYmxlTGVuZ3RoOworICAgIHMzMiAgICAgYVBMQ1BIZWFkZXJMZW5ndGg7CisgICAgczMyICAgICBhTVBEVUR1cmF0aW9uRmFjdG9yOworICAgIHMzMiAgICAgYU1QRFVNYXhMZW5ndGg7CisvLyAgaW50ICAgICBhQ1dtaW47CisvLyAgaW50ICAgICBhQ1dtYXg7Cit9OworCisvLy0tICAxMUcgIC0tCitzdHJ1Y3QgRVJQX0luZm9ybWF0aW9uX0VsZW1lbnQKK3sKKyAgICB1OAlFbGVtZW50X0lEOworICAgIHU4CUxlbmd0aDsKKyAgICAjaWZkZWYgX0JJR19FTkRJQU5fIC8vMjAwNjA5MjYgYWRkIGJ5IGFuc29uJ3MgZW5kaWFuCisgICAgCXU4CVJlc2VydmVkOjU7ICAgLy8yMDA2MDkyNiBhZGQgYnkgYW5zb24KKyAgICAgICB1OAlCYXJrZXJfUHJlYW1ibGVfTW9kZToxOworCXU4CVVzZV9Qcm90ZWN0aW9uOjE7CisgICAgICAgdTgJTm9uRVJQX1ByZXNlbnQ6MTsKKyAgICAjZWxzZQorCXU4CU5vbkVSUF9QcmVzZW50OjE7CisJdTgJVXNlX1Byb3RlY3Rpb246MTsKKwl1OAlCYXJrZXJfUHJlYW1ibGVfTW9kZToxOworCXU4CVJlc2VydmVkOjU7CisgICAgI2VuZGlmCit9OworCitzdHJ1Y3QgRXh0ZW5kZWRfU3VwcG9ydGVkX1JhdGVzX0VsZW1lbnQKK3sKKyAgICB1OAlFbGVtZW50X0lEOworICAgIHU4CUxlbmd0aDsKKyAgICB1OAlFeHRlbmRlZFN1cHBvcnRlZFJhdGVzWzI1NV07Cit9X19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCisvL1dQQSg4MDIuMTFpIGRyYWZ0IDMuMCkKKyNkZWZpbmUgVkVSU0lPTl9XUEEJCQkJMQorI2lmZGVmIF9XUEEyXworI2RlZmluZSBWRVJTSU9OX1dQQTIgICAgICAgICAgICAxCisjZW5kaWYgLy9lbmQgZGVmICBfV1BBMl8KKyNkZWZpbmUgT1VJX1dQQQkJCQkJMHgwMEYyNTAwMAkvL1dQQTIuMCBPVUk9MDA6NTA6RjIsIHRoZSBNU0IgaXMgcmVzZXJ2ZWQgZm9yIHN1aXRlIHR5cGUKKyNpZmRlZiBfV1BBMl8KKyNkZWZpbmUgT1VJX1dQQTIJCQkJMHgwMEFDMEYwMAkvLyBmb3Igd3BhMiBjaGFuZ2UgdG8gMHgwMEFDT0YwNCBieSBXcyAyNi8wNC8wNAorI2VuZGlmIC8vZW5kIGRlZiBfV1BBMl8KKworI2RlZmluZSBPVUlfV1BBX0FERElUSU9OQUwJCTB4MDEKKyNkZWZpbmUgV0xBTl9NSU5fUlNOX1dQQV9MRU5HVEggICAgICAgICAgICAgICAgIDYgLy9hZGRlZCBieSB3cyAwOS8xMC8wNAorI2lmZGVmIF9XUEEyXworI2RlZmluZSBXTEFOX01JTl9SU05fV1BBMl9MRU5HVEggICAgICAgICAgICAgICAgMiAvLyBGaXggdG8gMiAwOS8xNC8wNQorI2VuZGlmIC8vZW5kIGRlZiBfV1BBMl8KKworI2RlZmluZSBvdWlfd3BhICAgICAgICAgICAgICAgICAgKHUzMikoT1VJX1dQQXxPVUlfV1BBX0FERElUSU9OQUwpCisKKyNkZWZpbmUgV1BBX09VSV9CSUcgICAgKCh1MzIpIDB4MDFGMjUwMDApLy9hZGRlZCBieSB3cyAwOS8yMy8wNAorI2RlZmluZSBXUEFfT1VJX0xJVFRMRSAgKCh1MzIpIDB4MDFGMjUwMDEpLy9hZGRlZCBieSB3cyAwOS8yMy8wNAorCisjZGVmaW5lIFdQQV9XUFNfT1VJCQkJCWNwdV90b19sZTMyKDB4MDRGMjUwMDApIC8vIDIwMDYxMTA4IEZvciBXUFMuIEl0J3MgbGl0dGxlIGVuZGlhbi4gQmlnIGVuZGlhbiBpcyAweDAwNTBGMjA0CisKKy8vLS0tLS1XUEEyLS0tLS0KKyNpZmRlZiBfV1BBMl8KKyNkZWZpbmUgV1BBMl9PVUlfQklHICAgICgodTMyKTB4MDFBQzBGMDApCisjZGVmaW5lIFdQQTJfT1VJX0xJVFRMRSAoKHUzMikweDAxQUMwRjAxKQorI2VuZGlmIC8vZW5kIGRlZiBfV1BBMl8KKworLy9BdXRoZW50aWNhdGlvbiBzdWl0ZQorI2RlZmluZSBPVUlfQVVUSF9XUEFfTk9ORSAgICAgICAgICAgMHgwMCAvL2ZvciBXUEFfTk9ORQorI2RlZmluZSBPVUlfQVVUSF84MDIxWAkJCQkweDAxCisjZGVmaW5lIE9VSV9BVVRIX1BTSwkJCQkweDAyCisvL0NpcGhlciBzdWl0ZQorI2RlZmluZSBPVUlfQ0lQSEVSX0dST1VQX0tFWSAgICAgICAgMHgwMCAgLy9hZGRlZCBieSB3cyAwNS8yMS8wNAorI2RlZmluZSBPVUlfQ0lQSEVSX1dFUF80MAkJCTB4MDEKKyNkZWZpbmUgT1VJX0NJUEhFUl9US0lQCQkJCTB4MDIKKyNkZWZpbmUgT1VJX0NJUEhFUl9DQ01QCQkJCTB4MDQKKyNkZWZpbmUgT1VJX0NJUEhFUl9XRVBfMTA0CQkJMHgwNQorCit0eXBlZGVmIHN0cnVjdCBfU1VJVEVfU0VMRUNUT1JfCit7CisJdW5pb24KKwl7CisJCXU4CVZhbHVlWzRdOworCQlzdHJ1Y3QgX1NVSVRfCisJCXsKKwkJCXU4CU9VSVszXTsKKwkJCXU4CVR5cGU7CisJCX1TdWl0U2VsZWN0b3I7CisJfTsKK31TVUlURV9TRUxFQ1RPUjsKKworLy8tLSAgV1BBICAtLQorc3RydWN0CVJTTl9JbmZvcm1hdGlvbl9FbGVtZW50Cit7CisJdTgJCQkJCUVsZW1lbnRfSUQ7CisJdTgJCQkJCUxlbmd0aDsKKwlVTkFMSUdORUQgU1VJVEVfU0VMRUNUT1IJT3VpV1BBQWRkaXRpb25hbDsvL1dQQSB2ZXJzaW9uIDIuMCBhZGRpdGlvbmFsIGZpZWxkLCBhbmQgc2hvdWxkIGJlIDAwOjUwOkYyOjAxCisJdTE2CQkJCQlWZXJzaW9uOworCVNVSVRFX1NFTEVDVE9SCQlHcm91cEtleVN1aXRlOworCXUxNgkJCQkJUGFpcndpc2VLZXlTdWl0ZUNvdW50OworCVNVSVRFX1NFTEVDVE9SCQlQYWlyd2lzZUtleVN1aXRlWzFdOworfV9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK3N0cnVjdCBSU05fQXV0aF9TdWJfSW5mb3JtYXRpb25fRWxlbWVudAoreworCXUxNgkJCQlBdXRoS2V5TW5ndFN1aXRlQ291bnQ7CisJU1VJVEVfU0VMRUNUT1IJQXV0aEtleU1uZ3RTdWl0ZVsxXTsKK31fX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKKy8vLS0gIFdQQTIgIC0tCitzdHJ1Y3QgUlNOX0NhcGFiaWxpdHlfRWxlbWVudAoreworICB1bmlvbgorICB7CisJdTE2CV9fYXR0cmlidXRlX18gKChwYWNrZWQpKQl3VmFsdWU7CisgICAgI2lmZGVmIF9CSUdfRU5ESUFOXwkgLy8yMDA2MDkyNyBhZGQgYnkgYW5zb24ncyBlbmRpYW4KKyAgICBzdHJ1Y3QgX1JTTl9DYXBhYmlsaXR5CisgICAgeworICAgIAl1MTYgICBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgIFJlc2VydmVkMiA6IDg7IC8vIDIwMDUxMjAxCisJdTE2ICAgX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpICBSZXNlcnZlZDEgOiAyOworCXUxNiAgIF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSAgR1RLX1JlcGxheV9Db3VudGVyIDogMjsKKwl1MTYgICBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgIFBUS19SZXBsYXlfQ291bnRlciA6IDI7CisJdTE2ICAgX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpICBOb19QYWlyd2lzZSA6IDE7CisgICAgICAgIHUxNiAgIF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSAgUHJlX0F1dGggOiAxOworICAgIH1fX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgIFJTTl9DYXBhYmlsaXR5OworICAgICNlbHNlCisgICAgc3RydWN0IF9SU05fQ2FwYWJpbGl0eQorICAgIHsKKyAgICAgICAgdTE2ICAgX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpICBQcmVfQXV0aCA6IDE7CisgICAgICAgIHUxNiAgIF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSAgTm9fUGFpcndpc2UgOiAxOworICAgICAgICB1MTYgICBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgIFBUS19SZXBsYXlfQ291bnRlciA6IDI7CisJICAgIHUxNiAgIF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSAgR1RLX1JlcGxheV9Db3VudGVyIDogMjsKKwkgICAgdTE2ICAgX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpICBSZXNlcnZlZDEgOiAyOworCSAgICB1MTYgICBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgIFJlc2VydmVkMiA6IDg7IC8vIDIwMDUxMjAxCisgICAgfV9fYXR0cmlidXRlX18gKChwYWNrZWQpKSAgUlNOX0NhcGFiaWxpdHk7CisgICAgI2VuZGlmCisKKyAgfV9fYXR0cmlidXRlX18gKChwYWNrZWQpKSA7Cit9X19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIDsKKworI2lmZGVmIF9XUEEyXwordHlwZWRlZiBzdHJ1Y3QgX1BNS0lECit7CisgIHU4IHBWYWx1ZVsxNl07Cit9UE1LSUQ7CisKK3N0cnVjdAlXUEEyX1JTTl9JbmZvcm1hdGlvbl9FbGVtZW50Cit7CisJdTgJCQkJCUVsZW1lbnRfSUQ7CisJdTgJCQkJCUxlbmd0aDsKKwl1MTYJCQkJCVZlcnNpb247CisJU1VJVEVfU0VMRUNUT1IJCUdyb3VwS2V5U3VpdGU7CisJdTE2CQkJCQlQYWlyd2lzZUtleVN1aXRlQ291bnQ7CisJU1VJVEVfU0VMRUNUT1IJCVBhaXJ3aXNlS2V5U3VpdGVbMV07CisKK31fX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKK3N0cnVjdCBXUEEyX1JTTl9BdXRoX1N1Yl9JbmZvcm1hdGlvbl9FbGVtZW50Cit7CisJdTE2CQkJCUF1dGhLZXlNbmd0U3VpdGVDb3VudDsKKwlTVUlURV9TRUxFQ1RPUglBdXRoS2V5TW5ndFN1aXRlWzFdOworfV9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworCitzdHJ1Y3QgUE1LSURfSW5mb3JtYXRpb25fRWxlbWVudAoreworCXUxNgkJCQlQTUtJRF9Db3VudDsKKwlQTUtJRCBwbWtpZCBbMTZdIDsKK31fX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKKyNlbmRpZiAvL2VuZGRlZiBfV1BBMl8KKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLyBNQUMgRnJhbWUgc3RydWN0dXJlIChkaWZmZXJlbnQgdHlwZSkgYW5kIHN1YmZpZWxkIHN0cnVjdHVyZQorLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK3N0cnVjdCBNQUNfZnJhbWVfY29udHJvbAoreworICAgIHU4ICAgIG1hY19mcmFtZV9pbmZvOyAvLyBhIGNvbWJpbmF0aW9uIG9mIHRoZSBbUHJvdG9jb2wgVmVyc2lvbiwgQ29udHJvbCBUeXBlLCBDb250cm9sIFN1YnR5cGVdCisgICAgI2lmZGVmIF9CSUdfRU5ESUFOXyAvLzIwMDYwOTI3IGFkZCBieSBhbnNvbidzIGVuZGlhbgorICAgIHU4ICAgIG9yZGVyOjE7CisgICAgdTggICAgV0VQOjE7CisgICAgdTggICAgbW9yZV9kYXRhOjE7CisgICAgdTggICAgcHdyX21ndDoxOworICAgIHU4ICAgIHJldHJ5OjE7CisgICAgdTggICAgbW9yZV9mcmFnOjE7CisgICAgdTggICAgZnJvbV9kczoxOworICAgIHU4ICAgIHRvX2RzOjE7CisgICAgI2Vsc2UKKyAgICB1OCAgICB0b19kczoxOworICAgIHU4ICAgIGZyb21fZHM6MTsKKyAgICB1OCAgICBtb3JlX2ZyYWc6MTsKKyAgICB1OCAgICByZXRyeToxOworICAgIHU4ICAgIHB3cl9tZ3Q6MTsKKyAgICB1OCAgICBtb3JlX2RhdGE6MTsKKyAgICB1OCAgICBXRVA6MTsKKyAgICB1OCAgICBvcmRlcjoxOworICAgICNlbmRpZgorfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKK3N0cnVjdCBNYW5hZ2VtZW50X0ZyYW1lIHsKKyAgICBzdHJ1Y3QgTUFDX2ZyYW1lX2NvbnRyb2wgZnJhbWVfY29udHJvbDsgLy8gMkIsIFRvRFMsRnJvbURTLE1vcmVGcmFnLE1vcmVEYXRhLE9yZGVyPTAKKyAgICB1MTYJCWR1cmF0aW9uOworICAgIHU4CQlEQVtNQUNfQUREUl9MRU5HVEhdOwkJCS8vIEFkZHIxCisgICAgdTgJCVNBW01BQ19BRERSX0xFTkdUSF07CQkJLy8gQWRkcjIKKyAgICB1OAkJQlNTSURbTUFDX0FERFJfTEVOR1RIXTsJCQkvLyBBZGRyMworICAgIHUxNgkJU2VxdWVuY2VfQ29udHJvbDsKKyAgICAvLyBNYW5hZ2VtZW50IEZyYW1lIEJvZHkgPD0gMzI1IGJ5dGVzCisgICAgLy8gRkNTIDQgYnl0ZXMKK31fX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKKy8vIFNXLU1BQyBkb24ndCBUeC9SeCBDb250cm9sLUZyYW1lLCBIVy1NQUMgZG8gaXQuCitzdHJ1Y3QgQ29udHJvbF9GcmFtZSB7CisgICAgc3RydWN0IE1BQ19mcmFtZV9jb250cm9sIGZyYW1lX2NvbnRyb2w7IC8vIFRvRFMsRnJvbURTLE1vcmVGcmFnLFJldHJ5LE1vcmVEYXRhLFdFUCxPcmRlcj0wCisgICAgdTE2CQlkdXJhdGlvbjsKKyAgICB1OAkJUkFbTUFDX0FERFJfTEVOR1RIXTsKKyAgICB1OAkJVEFbTUFDX0FERFJfTEVOR1RIXTsKKyAgICB1MTYJCUZDUzsKK31fX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKK3N0cnVjdCBEYXRhX0ZyYW1lIHsKKyAgICBzdHJ1Y3QgTUFDX2ZyYW1lX2NvbnRyb2wgZnJhbWVfY29udHJvbDsKKyAgICB1MTYJCWR1cmF0aW9uOworICAgIHU4CQlBZGRyMVtNQUNfQUREUl9MRU5HVEhdOworICAgIHU4CQlBZGRyMltNQUNfQUREUl9MRU5HVEhdOworICAgIHU4CQlBZGRyM1tNQUNfQUREUl9MRU5HVEhdOworICAgIHUxNgkJU2VxdWVuY2VfQ29udHJvbDsKKyAgICB1OAkJQWRkcjRbTUFDX0FERFJfTEVOR1RIXTsgLy8gb25seSBleGlzdCB3aGVuIFRvRFM9RnJvbURTPTEKKyAgICAvLyBEYXRhIEZyYW1lIEJvZHkgPD0gMjMxMgorICAgIC8vIEZDUworfV9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworc3RydWN0IERpc2Fzc29jaWF0aW9uX0ZyYW1lX0JvZHkKK3sKKyAgICB1MTYgICAgcmVhc29uQ29kZTsKK31fX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKK3N0cnVjdCBBc3NvY2lhdGlvbl9SZXF1ZXN0X0ZyYW1lX0JvZHkKK3sKKyAgICB1MTYgICAgY2FwYWJpbGl0eV9pbmZvcm1hdGlvbjsKKyAgICB1MTYgICAgbGlzdGVuSW50ZXJ2YWw7CisgICAgdTggICAgIEN1cnJlbnRfQVBfQWRkcmVzc1tNQUNfQUREUl9MRU5HVEhdOy8vZm9yIHJlYXNzb2NpYXRpb24gb25seQorICAgIC8vIFNTSUQgKDIrMzIgYnl0ZXMpCisgICAgLy8gU3VwcG9ydGVkX1JhdGVzICgyKzggYnl0ZXMpCit9X19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCitzdHJ1Y3QgQXNzb2NpYXRpb25fUmVzcG9uc2VfRnJhbWVfQm9keQoreworICAgIHUxNiAgICBjYXBhYmlsaXR5X2luZm9ybWF0aW9uOworICAgIHUxNiAgICBzdGF0dXNDb2RlOworICAgIHUxNiAgICBBc3NvY2lhdGlvbl9JRDsKKyAgICBzdHJ1Y3QgU3VwcG9ydGVkX1JhdGVzX0VsZW1lbnQgc3VwcG9ydGVkUmF0ZXM7Cit9X19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCisvKnN0cnVjdCBSZWFzc29jaWF0aW9uX1JlcXVlc3RfRnJhbWVfQm9keQoreworICAgIHUxNiAgICBjYXBhYmlsaXR5X2luZm9ybWF0aW9uOworICAgIHUxNiAgICBsaXN0ZW5JbnRlcnZhbDsKKyAgICB1OCAgICAgQ3VycmVudF9BUF9BZGRyZXNzW01BQ19BRERSX0xFTkdUSF07CisgICAgLy8gU1NJRCAoMiszMiBieXRlcykKKyAgICAvLyBTdXBwb3J0ZWRfUmF0ZXMgKDIrOCBieXRlcykKK307Ki8KKy8vIGVsaW1pbmF0ZWQgYnkgV1MgMDcvMjIvMDQgY29tYm9pbmVkIHdpdGggYXNzb2NpYXRlaW9uIHJlcXVlc3QgZnJhbWUuCisKK3N0cnVjdCBSZWFzc29jaWF0aW9uX1Jlc3BvbnNlX0ZyYW1lX0JvZHkKK3sKKyAgICB1MTYgICAgY2FwYWJpbGl0eV9pbmZvcm1hdGlvbjsKKyAgICB1MTYgICAgc3RhdHVzQ29kZTsKKyAgICB1MTYgICAgQXNzb2NpYXRpb25fSUQ7CisgICAgc3RydWN0IFN1cHBvcnRlZF9SYXRlc19FbGVtZW50IHN1cHBvcnRlZFJhdGVzOworfV9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworc3RydWN0IERlYXV0aGVudGljYXRpb25fRnJhbWVfQm9keQoreworICAgIHUxNiAgICByZWFzb25Db2RlOworfV9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworCitzdHJ1Y3QgUHJvYmVfUmVzcG9uc2VfRnJhbWVfQm9keQoreworICAgIHUxNiAgICBUaW1lc3RhbXA7CisgICAgdTE2ICAgIEJlYWNvbl9JbnRlcnZhbDsKKyAgICB1MTYgICAgQ2FwYWJpbGl0eV9JbmZvcm1hdGlvbjsKKyAgICAvLyBTU0lECisgICAgLy8gU3VwcG9ydGVkX1JhdGVzCisgICAgLy8gUEhZIHBhcmFtZXRlciBTZXQgKERTIFBhcmFtZXRlcnMpCisgICAgLy8gQ0YgcGFyYW1ldGVyIFNldAorICAgIC8vIElCU1MgcGFyYW1ldGVyIFNldAorfV9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworc3RydWN0IEF1dGhlbnRpY2F0aW9uX0ZyYW1lX0JvZHkKK3sKKyAgICB1MTYgICAgYWxnb3JpdGhtTnVtYmVyOworICAgIHUxNiAgICBzZXF1ZW5jZU51bWJlcjsKKyAgICB1MTYgICAgc3RhdHVzQ29kZTsKKyAgICAvLyBOQjogZG9uJ3QgaW5jbHVkZSBDaGFsbGVuZ2VUZXh0IGluIHRoaXMgc3RydWN0dXJlCisJLy8gc3RydWN0IENoYWxsZW5nZV9UZXh0X0VsZW1lbnQgc0NoYWxsZW5nZVRleHRFbGVtZW50OyAvLyB3a2NoZW4gYWRkZWQKK31fX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKKworI2VuZGlmIC8vIF9NQUNfU3RydWN0dXJlX0hfCisKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvbWRzLmMgYi9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9tZHMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44Y2U2Mzg5Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvbWRzLmMKQEAgLTAsMCArMSw2MzAgQEAKKyNpbmNsdWRlICJvc19jb21tb24uaCIKKwordm9pZAorTWRzX3Jlc2V0X2Rlc2NyaXB0b3IoUEFEQVBURVIgQWRhcHRlcikKK3sKKwlQTURTIHBNZHMgPSAmQWRhcHRlci0+TWRzOworCisJcE1kcy0+VHhQYXVzZSA9IDA7CisJcE1kcy0+VHhUaHJlYWRDb3VudCA9IDA7CisJcE1kcy0+VHhGaWxsSW5kZXggPSAwOworCXBNZHMtPlR4RGVzSW5kZXggPSAwOworCXBNZHMtPlNjYW5UeFBhdXNlID0gMDsKKwltZW1zZXQocE1kcy0+VHhPd25lciwgMCwgKChNQVhfVVNCX1RYX0JVRkZFUl9OVU1CRVIgKyAzKSAmIH4weDAzKSk7Cit9CisKK3Vuc2lnbmVkIGNoYXIKK01kc19pbml0aWFsKFBBREFQVEVSIEFkYXB0ZXIpCit7CisJUE1EUyBwTWRzID0gJkFkYXB0ZXItPk1kczsKKworCXBNZHMtPlR4UGF1c2UgPSBGQUxTRTsKKwlwTWRzLT5UeFJUU1RocmVzaG9sZCA9IERFRkFVTFRfUlRTVGhyZXNob2xkOworCXBNZHMtPlR4RnJhZ21lbnRUaHJlc2hvbGQgPSBERUZBVUxUX0ZSQUdNRU5UX1RIUkVTSE9MRDsKKworCXZSeFRpbWVySW5pdChBZGFwdGVyKTsvL2ZvciBXUEEgY291bnRlcm1lYXN1cmUKKworCXJldHVybiBoYWxfZ2V0X3R4X2J1ZmZlciggJkFkYXB0ZXItPnNId0RhdGEsICZwTWRzLT5wVHhCdWZmZXIgKTsKK30KKwordm9pZAorTWRzX0Rlc3Ryb3koUEFEQVBURVIgQWRhcHRlcikKK3sKKwl2UnhUaW1lclN0b3AoQWRhcHRlcik7Cit9CisKK3ZvaWQKK01kc19UeChQQURBUFRFUiBBZGFwdGVyKQoreworCXBod19kYXRhX3QJcEh3RGF0YSA9ICZBZGFwdGVyLT5zSHdEYXRhOworCVBNRFMJCXBNZHMgPSAmQWRhcHRlci0+TWRzOworCURFU0NSSVBUT1IJVHhEZXM7CisJUERFU0NSSVBUT1IJcFR4RGVzID0gJlR4RGVzOworCVBVQ0hBUgkJWG1pdEJ1ZkFkZHJlc3M7CisJdTE2CQlYbWl0QnVmU2l6ZSwgUGFja2V0U2l6ZSwgc3RtcCwgQ3VycmVudFNpemUsIEZyYWdtZW50VGhyZXNob2xkOworCXU4CQlGaWxsSW5kZXgsIFR4RGVzSW5kZXgsIEZyYWdtZW50Q291bnQsIEZpbGxDb3VudDsKKwl1bnNpZ25lZCBjaGFyCUJ1ZmZlckZpbGxlZCA9IEZBTFNFLCBNSUNBZGQgPSAwOworCisKKwlpZiAocE1kcy0+VHhQYXVzZSkKKwkJcmV0dXJuOworCWlmICghaGFsX2RyaXZlcl9pbml0X09LKHBId0RhdGEpKQorCQlyZXR1cm47CisKKwkvL09ubHkgb25lIHRocmVhZCBjYW4gYmUgcnVuIGhlcmUKKwlpZiAoIU9TX0FUT01JQ19JTkMoIEFkYXB0ZXIsICZwTWRzLT5UeFRocmVhZENvdW50KSA9PSAxKQorCQlnb3RvIGNsZWFudXA7CisKKwkvLyBTdGFydCB0byBmaWxsIHRoZSBkYXRhCisJZG8geworCQlGaWxsSW5kZXggPSBwTWRzLT5UeEZpbGxJbmRleDsKKwkJaWYgKHBNZHMtPlR4T3duZXJbRmlsbEluZGV4XSkgeyAvLyBJcyBvd25lZCBieSBzb2Z0d2FyZSAwOlllcyAxOk5vCisjaWZkZWYgX1BFX1RYX0RVTVBfCisJCQlXQkRFQlVHKCgiW01kc19UeF0gVHggT3duZXIgaXMgSC9XLlxuIikpOworI2VuZGlmCisJCQlicmVhazsKKwkJfQorCisJCVhtaXRCdWZBZGRyZXNzID0gcE1kcy0+cFR4QnVmZmVyICsgKE1BWF9VU0JfVFhfQlVGRkVSICogRmlsbEluZGV4KTsgLy9HZXQgYnVmZmVyCisJCVhtaXRCdWZTaXplID0gMDsKKwkJRmlsbENvdW50ID0gMDsKKwkJZG8geworCQkJUGFja2V0U2l6ZSA9IEFkYXB0ZXItPnNNbG1lRnJhbWUubGVuOworCQkJaWYgKCFQYWNrZXRTaXplKQorCQkJCWJyZWFrOworCisJCQkvL0ZvciBDaGVjayB0aGUgYnVmZmVyIHJlc291cmNlCisJCQlGcmFnbWVudFRocmVzaG9sZCA9IENVUlJFTlRfRlJBR01FTlRfVEhSRVNIT0xEOworCQkJLy85MzExMzAuNS5iCisJCQlGcmFnbWVudENvdW50ID0gUGFja2V0U2l6ZS9GcmFnbWVudFRocmVzaG9sZCArIDE7CisJCQlzdG1wID0gUGFja2V0U2l6ZSArIEZyYWdtZW50Q291bnQqMzIgKyA4Oy8vOTMxMTMwLjUuYyA4Ok1JQworCQkJaWYgKChYbWl0QnVmU2l6ZSArIHN0bXApID49IE1BWF9VU0JfVFhfQlVGRkVSKSB7CisJCQkJcHJpbnRrKCJbTWRzX1R4XSBFeGNlc3MgbWF4IHR4IGJ1ZmZlci5cbiIpOworCQkJCWJyZWFrOyAvLyBidWZmZXIgaXMgbm90IGVub3VnaAorCQkJfQorCisKKwkJCS8vCisJCQkvLyBTdGFydCB0cmFuc21pdHRpbmcKKwkJCS8vCisJCQlCdWZmZXJGaWxsZWQgPSBUUlVFOworCisJCQkvKiBMZWF2ZXMgZmlyc3QgdTggaW50YWN0ICovCisJCQltZW1zZXQoKFBVQ0hBUilwVHhEZXMgKyAxLCAwLCBzaXplb2YoREVTQ1JJUFRPUikgLSAxKTsKKworCQkJVHhEZXNJbmRleCA9IHBNZHMtPlR4RGVzSW5kZXg7Ly9HZXQgdGhlIGN1cnJlbnQgSUQKKwkJCXBUeERlcy0+RGVzY3JpcHRvcl9JRCA9IFR4RGVzSW5kZXg7CisJCQlwTWRzLT5UeERlc0Zyb21bIFR4RGVzSW5kZXggXSA9IDI7Ly9TdG9yaW5nIHRoZSBpbmZvcm1hdGlvbiBvZiBzb3VyY2UgY29tbWluZyBmcm9tCisJCQlwTWRzLT5UeERlc0luZGV4Kys7CisJCQlwTWRzLT5UeERlc0luZGV4ICU9IE1BWF9VU0JfVFhfREVTQ1JJUFRPUjsKKworCQkJTUxNRV9HZXROZXh0UGFja2V0KCBBZGFwdGVyLCBwVHhEZXMgKTsKKworCQkJLy8gQ29weSBoZWFkZXIuIDhieXRlIFVTQiArIDI0Ynl0ZSA4MDIuMTFIZHIuIFNldCBUeFJhdGUsIFByZWFtYmxlIHR5cGUKKwkJCU1kc19IZWFkZXJDb3B5KCBBZGFwdGVyLCBwVHhEZXMsIFhtaXRCdWZBZGRyZXNzICk7CisKKwkJCS8vIEZvciBzcGVlZCB1cCBLZXkgc2V0dGluZworCQkJaWYgKHBUeERlcy0+RWFwRml4KSB7CisjaWZkZWYgX1BFX1RYX0RVTVBfCisJCQkJV0JERUJVRygoIjM1OiBFUEEgNHRoIGZyYW1lIGRldGVjdGVkLiBTaXplID0gJWRcbiIsIFBhY2tldFNpemUpKTsKKyNlbmRpZgorCQkJCXBId0RhdGEtPklzS2V5UHJlU2V0ID0gMTsKKwkJCX0KKworCQkJLy8gQ29weSAoZnJhZ21lbnQpIGZyYW1lIGJvZHksIGFuZCBzZXQgVVNCLCA4MDIuMTEgaGRyIGZsYWcKKwkJCUN1cnJlbnRTaXplID0gTWRzX0JvZHlDb3B5KEFkYXB0ZXIsIHBUeERlcywgWG1pdEJ1ZkFkZHJlc3MpOworCisJCQkvLyBTZXQgUlRTL0NUUyBhbmQgTm9ybWFsIGR1cmF0aW9uIGZpZWxkIGludG8gYnVmZmVyCisJCQlNZHNfRHVyYXRpb25TZXQoQWRhcHRlciwgcFR4RGVzLCBYbWl0QnVmQWRkcmVzcyk7CisKKwkJCS8vCisJCQkvLyBDYWxjdWxhdGlvbiBNSUMgZnJvbSBidWZmZXIgd2hpY2ggbWF5YmUgZnJhZ21lbnQsIHRoZW4gZmlsbCBpbnRvIHRlbXBvcmFyeSBhZGRyZXNzIDggYnl0ZQorCQkJLy8gOTMxMTMwLjUuZQorCQkJaWYgKE1JQ0FkZCkKKwkJCQlNZHNfTWljRmlsbCggQWRhcHRlciwgcFR4RGVzLCBYbWl0QnVmQWRkcmVzcyApOworCisJCQkvL1NoaWZ0IHRvIHRoZSBuZXh0IGFkZHJlc3MKKwkJCVhtaXRCdWZTaXplICs9IEN1cnJlbnRTaXplOworCQkJWG1pdEJ1ZkFkZHJlc3MgKz0gQ3VycmVudFNpemU7CisKKyNpZmRlZiBfSUJTU19CRUFDT05fU0VRX1NUSUNLXworCQkJaWYgKChYbWl0QnVmQWRkcmVzc1sgRE9UXzExX0RBX09GRlNFVCs4IF0gJiAweGZjKSAhPSBNQUNfU1VCVFlQRV9NTkdNTlRfUFJPQkVfUkVRVUVTVCkgLy8gKzggZm9yIFVTQiBoZHIKKyNlbmRpZgorCQkJCXBNZHMtPlR4VG9nZ2xlID0gVFJVRTsKKworCQkJLy8gR2V0IHBhY2tldCB0byB0cmFuc21pdCBjb21wbGV0ZWQsIDE6VEVTVFNUQSAyOk1MTUUgMzogTmRpcyBkYXRhCisJCQlNTE1FX1NlbmRDb21wbGV0ZShBZGFwdGVyLCAwLCBUUlVFKTsKKworCQkJLy8gU29mdHdhcmUgVFNDIGNvdW50IDIwMDYwMjE0CisJCQlwTWRzLT5UeFRzYysrOworCQkJaWYgKHBNZHMtPlR4VHNjID09IDApCisJCQkJcE1kcy0+VHhUc2NfMisrOworCisJCQlGaWxsQ291bnQrKzsgLy8gMjAwNjA5MjgKKwkJfSB3aGlsZSAoSEFMX1VTQl9NT0RFX0JVUlNUKHBId0RhdGEpKTsgLy8gRW5kIG9mIG11bHRpcGxlIE1TRFUgY29weSBsb29wLiBGQUxTRSA9IHNpbmdsZSBUUlVFID0gbXVsdGlwbGUgc2VuZGluZworCisJCS8vIE1vdmUgdG8gdGhlIG5leHQgb25lLCBpZiBuZWNlc3NhcnkKKwkJaWYgKEJ1ZmZlckZpbGxlZCkgeworCQkJLy8gc2l6ZSBzZXR0aW5nCisJCQlwTWRzLT5UeEJ1ZmZlclNpemVbIEZpbGxJbmRleCBdID0gWG1pdEJ1ZlNpemU7CisKKwkJCS8vIDIwMDYwOTI4IHNldCBUeCBjb3VudAorCQkJcE1kcy0+VHhDb3VudEluQnVmZmVyW0ZpbGxJbmRleF0gPSBGaWxsQ291bnQ7CisKKwkJCS8vIFNldCBvd25lciBmbGFnCisJCQlwTWRzLT5UeE93bmVyW0ZpbGxJbmRleF0gPSAxOworCisJCQlwTWRzLT5UeEZpbGxJbmRleCsrOworCQkJcE1kcy0+VHhGaWxsSW5kZXggJT0gTUFYX1VTQl9UWF9CVUZGRVJfTlVNQkVSOworCQkJQnVmZmVyRmlsbGVkID0gRkFMU0U7CisJCX0gZWxzZQorCQkJYnJlYWs7CisKKwkJaWYgKCFQYWNrZXRTaXplKSAvLyBObyBtb3JlIHBrIGZvciB0cmFuc21pdHRpbmcKKwkJCWJyZWFrOworCisJfSB3aGlsZShUUlVFKTsKKworCS8vCisJLy8gU3RhcnQgdG8gc2VuZCBieSBsb3dlciBtb2R1bGUKKwkvLworCWlmICghcEh3RGF0YS0+SXNLZXlQcmVTZXQpCisJCVdiMzVUeF9zdGFydChwSHdEYXRhKTsKKworIGNsZWFudXA6CisJT1NfQVRPTUlDX0RFQyggQWRhcHRlciwgJnBNZHMtPlR4VGhyZWFkQ291bnQgKTsKK30KKwordm9pZAorTWRzX1NlbmRDb21wbGV0ZShQQURBUFRFUiBBZGFwdGVyLCBQVDAyX0RFU0NSSVBUT1IgcFQwMikKK3sKKwlQTURTCXBNZHMgPSAmQWRhcHRlci0+TWRzOworCXBod19kYXRhX3QJcEh3RGF0YSA9ICZBZGFwdGVyLT5zSHdEYXRhOworCXU4CVBhY2tldElkID0gKHU4KXBUMDItPlQwMl9UeF9Qa3RJRDsKKwl1bnNpZ25lZCBjaGFyCVNlbmRPSyA9IFRSVUU7CisJdTgJUmV0cnlDb3VudCwgVHhSYXRlOworCisJaWYgKHBUMDItPlQwMl9JZ25vcmVSZXN1bHQpIC8vIERvbid0IGNhcmUgdGhlIHJlc3VsdAorCQlyZXR1cm47CisJaWYgKHBUMDItPlQwMl9Jc0xhc3RNcGR1KSB7CisJCS8vVE9ETzogRFRPIC0tIGdldCB0aGUgcmV0cnkgY291bnQgYW5kIGZyYWdtZW50IGNvdW50CisJCS8vIFR4IHJhdGUKKwkJVHhSYXRlID0gcE1kcy0+VHhSYXRlWyBQYWNrZXRJZCBdWyAwIF07CisJCVJldHJ5Q291bnQgPSAodTgpcFQwMi0+VDAyX01QRFVfQ250OworCQlpZiAocFQwMi0+dmFsdWUgJiBGTEFHX0VSUk9SX1RYX01BU0spIHsKKwkJCVNlbmRPSyA9IEZBTFNFOworCisJCQlpZiAocFQwMi0+VDAyX3RyYW5zbWl0X2Fib3J0IHx8IHBUMDItPlQwMl9vdXRfb2ZfTWF4VHhNU0RVTGlmdFRpbWUpIHsKKwkJCQkvL3JldHJ5IGVycm9yCisJCQkJcEh3RGF0YS0+ZHRvX3R4X3JldHJ5X2NvdW50ICs9IChSZXRyeUNvdW50KzEpOworCQkJCS8vW2ZvciB0eCBkZWJ1Z10KKwkJCQlpZiAoUmV0cnlDb3VudDw3KQorCQkJCQlwSHdEYXRhLT50eF9yZXRyeV9jb3VudFtSZXRyeUNvdW50XSArPSBSZXRyeUNvdW50OworCQkJCWVsc2UKKwkJCQkJcEh3RGF0YS0+dHhfcmV0cnlfY291bnRbN10gKz0gUmV0cnlDb3VudDsKKwkJCQkjaWZkZWYgX1BFX1NUQVRFX0RVTVBfCisJCQkJV0JERUJVRygoImR0b190eF9yZXRyeV9jb3VudCA9JWRcbiIsIHBId0RhdGEtPmR0b190eF9yZXRyeV9jb3VudCkpOworCQkJCSNlbmRpZgorCQkJCU1UT19TZXRUeENvdW50KEFkYXB0ZXIsIFR4UmF0ZSwgUmV0cnlDb3VudCk7CisJCQl9CisJCQlwSHdEYXRhLT5kdG9fdHhfZnJhZ19jb3VudCArPSAoUmV0cnlDb3VudCsxKTsKKworCQkJLy9bZm9yIHR4IGRlYnVnXQorCQkJaWYgKHBUMDItPlQwMl90cmFuc21pdF9hYm9ydF9kdWVfdG9fVEJUVCkKKwkJCQlwSHdEYXRhLT50eF9UQlRUX3N0YXJ0X2NvdW50Kys7CisJCQlpZiAocFQwMi0+VDAyX3RyYW5zbWl0X3dpdGhvdXRfZW5jcnlwdGlvbl9kdWVfdG9fd2VwX29uX2ZhbHNlKQorCQkJCXBId0RhdGEtPnR4X1dlcE9uX2ZhbHNlX2NvdW50Kys7CisJCQlpZiAocFQwMi0+VDAyX2Rpc2NhcmRfZHVlX3RvX251bGxfd2VwX2tleSkKKwkJCQlwSHdEYXRhLT50eF9OdWxsX2tleV9jb3VudCsrOworCQl9IGVsc2UgeworCQkJaWYgKHBUMDItPlQwMl9lZmZlY3RpdmVfdHJhbnNtaXNzaW9uX3JhdGUpCisJCQkJcEh3RGF0YS0+dHhfRVRSX2NvdW50Kys7CisJCQlNVE9fU2V0VHhDb3VudChBZGFwdGVyLCBUeFJhdGUsIFJldHJ5Q291bnQpOworCQl9CisKKwkJLy8gQ2xlYXIgc2VuZCByZXN1bHQgYnVmZmVyCisJCXBNZHMtPlR4UmVzdWx0WyBQYWNrZXRJZCBdID0gMDsKKwl9IGVsc2UKKwkJcE1kcy0+VHhSZXN1bHRbIFBhY2tldElkIF0gfD0gKCh1MTYpKHBUMDItPnZhbHVlICYgMHgwZmZmZikpOworfQorCit2b2lkCitNZHNfSGVhZGVyQ29weShQQURBUFRFUiBBZGFwdGVyLCBQREVTQ1JJUFRPUiBwRGVzLCBQVUNIQVIgVGFyZ2V0QnVmZmVyKQoreworCVBNRFMJcE1kcyA9ICZBZGFwdGVyLT5NZHM7CisJUFVDSEFSCXNyY19idWZmZXIgPSBwRGVzLT5idWZmZXJfYWRkcmVzc1swXTsvLzkzMTEzMC41LmcKKwlQVDAwX0RFU0NSSVBUT1IJcFQwMDsKKwlQVDAxX0RFU0NSSVBUT1IJcFQwMTsKKwl1MTYJc3RtcDsKKwl1OAlpLCBjdG1wMSwgY3RtcDIsIGN0bXBmOworCXUxNglGcmFnbWVudFRocmVzaG9sZCA9IENVUlJFTlRfRlJBR01FTlRfVEhSRVNIT0xEOworCisKKwlzdG1wID0gcERlcy0+YnVmZmVyX3RvdGFsX3NpemU7CisJLy8KKwkvLyBTZXQgVVNCIGhlYWRlciA4IGJ5dGUKKwkvLworCXBUMDAgPSAoUFQwMF9ERVNDUklQVE9SKVRhcmdldEJ1ZmZlcjsKKwlUYXJnZXRCdWZmZXIgKz0gNDsKKwlwVDAxID0gKFBUMDFfREVTQ1JJUFRPUilUYXJnZXRCdWZmZXI7CisJVGFyZ2V0QnVmZmVyICs9IDQ7CisKKwlwVDAwLT52YWx1ZSA9IDA7Ly8gQ2xlYXIKKwlwVDAxLT52YWx1ZSA9IDA7Ly8gQ2xlYXIKKworCXBUMDAtPlQwMF90eF9wYWNrZXRfaWQgPSBwRGVzLT5EZXNjcmlwdG9yX0lEOy8vIFNldCBwYWNrZXQgSUQKKwlwVDAwLT5UMDBfaGVhZGVyX2xlbmd0aCA9IDI0Oy8vIFNldCBoZWFkZXIgbGVuZ3RoCisJcFQwMS0+VDAxX3JldHJ5X2Fib3J0X2ViYWJsZSA9IDE7Ly85MjEwMTMgOTMxMTMwLjUuaAorCisJLy8gS2V5IElEIHNldHVwCisJcFQwMS0+VDAxX3dlcF9pZCA9IDA7CisKKwlGcmFnbWVudFRocmVzaG9sZCA9IERFRkFVTFRfRlJBR01FTlRfVEhSRVNIT0xEOwkvL0RvIG5vdCBmcmFnbWVudAorCS8vIENvcHkgZnVsbCBkYXRhLCB0aGUgMSdzdCBidWZmZXIgY29udGFpbiBhbGwgdGhlIGRhdGEgOTMxMTMwLjUuagorCW1lbWNweSggVGFyZ2V0QnVmZmVyLCBzcmNfYnVmZmVyLCBET1RfMTFfTUFDX0hFQURFUl9TSVpFICk7Ly8gQ29weSBoZWFkZXIKKwlwRGVzLT5idWZmZXJfYWRkcmVzc1swXSA9IHNyY19idWZmZXIgKyBET1RfMTFfTUFDX0hFQURFUl9TSVpFOworCXBEZXMtPmJ1ZmZlcl90b3RhbF9zaXplIC09IERPVF8xMV9NQUNfSEVBREVSX1NJWkU7CisJcERlcy0+YnVmZmVyX3NpemVbMF0gPSBwRGVzLT5idWZmZXJfdG90YWxfc2l6ZTsKKworCS8vIFNldCBmcmFnbWVudCB0aHJlc2hvbGQKKwlGcmFnbWVudFRocmVzaG9sZCAtPSAoRE9UXzExX01BQ19IRUFERVJfU0laRSArIDQpOworCXBEZXMtPkZyYWdtZW50VGhyZXNob2xkID0gRnJhZ21lbnRUaHJlc2hvbGQ7CisKKwkvLyBTZXQgbW9yZSBmcmFnIGJpdAorCVRhcmdldEJ1ZmZlclsxXSB8PSAweDA0Oy8vIFNldCBtb3JlIGZyYWcgYml0CisKKwkvLworCS8vIFNldCB0eCByYXRlCisJLy8KKwlzdG1wID0gKihQVVNIT1JUKShUYXJnZXRCdWZmZXIrMzApOyAvLyAybiBhbGlnbm1lbnQgYWRkcmVzcworCisJLy9Vc2UgYmFzaWMgcmF0ZQorCWN0bXAxID0gY3RtcGYgPSBDVVJSRU5UX1RYX1JBVEVfRk9SX01ORzsKKworCXBEZXMtPlR4UmF0ZSA9IGN0bXAxOworCSNpZmRlZiBfUEVfVFhfRFVNUF8KKwlXQkRFQlVHKCgiVHggcmF0ZSA9JXhcbiIsIGN0bXAxKSk7CisJI2VuZGlmCisKKwlwVDAxLT5UMDFfbW9kdWxhdGlvbl90eXBlID0gKGN0bXAxJTMpID8gMCA6IDE7CisKKwlmb3IoIGk9MDsgaTwyOyBpKysgKSB7CisJCWlmKCBpID09IDEgKQorCQkJY3RtcDEgPSBjdG1wZjsKKworCQlwTWRzLT5UeFJhdGVbcERlcy0+RGVzY3JpcHRvcl9JRF1baV0gPSBjdG1wMTsgLy8gYmFja3VwIHRoZSB0YSByYXRlIGFuZCBmYWxsIGJhY2sgcmF0ZQorCisJCWlmKCBjdG1wMSA9PSAxMDgpIGN0bXAyID0gNzsKKwkJZWxzZSBpZiggY3RtcDEgPT0gOTYgKSBjdG1wMiA9IDY7IC8vIFJhdGUgY29udmVydCBmb3IgVVNCCisJCWVsc2UgaWYoIGN0bXAxID09IDcyICkgY3RtcDIgPSA1OworCQllbHNlIGlmKCBjdG1wMSA9PSA0OCApIGN0bXAyID0gNDsKKwkJZWxzZSBpZiggY3RtcDEgPT0gMzYgKSBjdG1wMiA9IDM7CisJCWVsc2UgaWYoIGN0bXAxID09IDI0ICkgY3RtcDIgPSAyOworCQllbHNlIGlmKCBjdG1wMSA9PSAxOCApIGN0bXAyID0gMTsKKwkJZWxzZSBpZiggY3RtcDEgPT0gMTIgKSBjdG1wMiA9IDA7CisJCWVsc2UgaWYoIGN0bXAxID09IDIyICkgY3RtcDIgPSAzOworCQllbHNlIGlmKCBjdG1wMSA9PSAxMSApIGN0bXAyID0gMjsKKwkJZWxzZSBpZiggY3RtcDEgPT0gNCAgKSBjdG1wMiA9IDE7CisJCWVsc2UgY3RtcDIgPSAwOyAvLyBpZiggY3RtcDEgPT0gMiAgKSBvciBkZWZhdWx0CisKKwkJaWYoIGkgPT0gMCApCisJCQlwVDAxLT5UMDFfdHJhbnNtaXRfcmF0ZSA9IGN0bXAyOworCQllbHNlCisJCQlwVDAxLT5UMDFfZmFsbF9iYWNrX3JhdGUgPSBjdG1wMjsKKwl9CisKKwkvLworCS8vIFNldCBwcmVhbWJsZSB0eXBlCisJLy8KKwlpZiAoKHBUMDEtPlQwMV9tb2R1bGF0aW9uX3R5cGUgPT0gMCkgJiYgKHBUMDEtPlQwMV90cmFuc21pdF9yYXRlID09IDApKQkvLyBSQVRFXzFNCisJCXBEZXMtPlByZWFtYmxlTW9kZSA9ICBXTEFOX1BSRUFNQkxFX1RZUEVfTE9ORzsKKwllbHNlCisJCXBEZXMtPlByZWFtYmxlTW9kZSA9ICBDVVJSRU5UX1BSRUFNQkxFX01PREU7CisJcFQwMS0+VDAxX3BsY3BfaGVhZGVyX2xlbmd0aCA9IHBEZXMtPlByZWFtYmxlTW9kZTsJLy8gU2V0IHByZWFtYmxlCisKK30KKworLy8gVGhlIGZ1bmN0aW9uIHJldHVybiB0aGUgNG4gc2l6ZSBvZiB1c2IgcGsKK3UxNgorTWRzX0JvZHlDb3B5KFBBREFQVEVSIEFkYXB0ZXIsIFBERVNDUklQVE9SIHBEZXMsIFBVQ0hBUiBUYXJnZXRCdWZmZXIpCit7CisJUFQwMF9ERVNDUklQVE9SCXBUMDA7CisJUE1EUwlwTWRzID0gJkFkYXB0ZXItPk1kczsKKwlQVUNIQVIJYnVmZmVyLCBzcmNfYnVmZmVyLCBwY3RtcDsKKwl1MTYJU2l6ZSA9IDA7CisJdTE2CVNpemVMZWZ0LCBDb3B5U2l6ZSwgQ29weUxlZnQsIHN0bXA7CisJdTgJYnVmX2luZGV4LCBGcmFnbWVudENvdW50ID0gMDsKKworCisJLy8gQ29weSBmcmFnbWVudCBib2R5CisJYnVmZmVyID0gVGFyZ2V0QnVmZmVyOyAvLyBzaGlmdCA4QiB1c2IgKyAyNEIgODAyLjExCisJU2l6ZUxlZnQgPSBwRGVzLT5idWZmZXJfdG90YWxfc2l6ZTsKKwlidWZfaW5kZXggPSBwRGVzLT5idWZmZXJfc3RhcnRfaW5kZXg7CisKKwlwVDAwID0gKFBUMDBfREVTQ1JJUFRPUilidWZmZXI7CisJd2hpbGUgKFNpemVMZWZ0KSB7CisJCXBUMDAgPSAoUFQwMF9ERVNDUklQVE9SKWJ1ZmZlcjsKKwkJQ29weVNpemUgPSBTaXplTGVmdDsKKwkJaWYgKFNpemVMZWZ0ID4gcERlcy0+RnJhZ21lbnRUaHJlc2hvbGQpIHsKKwkJCUNvcHlTaXplID0gcERlcy0+RnJhZ21lbnRUaHJlc2hvbGQ7CisJCQlwVDAwLT5UMDBfZnJhbWVfbGVuZ3RoID0gMjQgKyBDb3B5U2l6ZTsvL1NldCBVU0IgbGVuZ3RoCisJCX0gZWxzZQorCQkJcFQwMC0+VDAwX2ZyYW1lX2xlbmd0aCA9IDI0ICsgU2l6ZUxlZnQ7Ly9TZXQgVVNCIGxlbmd0aAorCisJCVNpemVMZWZ0IC09IENvcHlTaXplOworCisJCS8vIDEgQnl0ZSBvcGVyYXRpb24KKwkJcGN0bXAgPSAoUFVDSEFSKSggYnVmZmVyICsgOCArIERPVF8xMV9TRVFVRU5DRV9PRkZTRVQgKTsKKwkJKnBjdG1wICY9IDB4ZjA7CisJCSpwY3RtcCB8PSBGcmFnbWVudENvdW50Oy8vOTMxMTMwLjUubQorCQlpZiggIUZyYWdtZW50Q291bnQgKQorCQkJcFQwMC0+VDAwX2ZpcnN0X21wZHUgPSAxOworCisJCWJ1ZmZlciArPSAzMjsgLy8gOEIgdXNiICsgMjRCIDgwMi4xMSBoZWFkZXIKKwkJU2l6ZSArPSAzMjsKKworCQkvLyBDb3B5IGludG8gYnVmZmVyCisJCXN0bXAgPSBDb3B5U2l6ZSArIDM7CisJCXN0bXAgJj0gfjB4MDM7Ly80biBBbGlnbm1lbnQKKwkJU2l6ZSArPSBzdG1wOy8vIEN1cnJlbnQgNG4gb2Zmc2V0IG9mIG1wZHUKKworCQl3aGlsZSAoQ29weVNpemUpIHsKKwkJCS8vIENvcHkgYm9keQorCQkJc3JjX2J1ZmZlciA9IHBEZXMtPmJ1ZmZlcl9hZGRyZXNzW2J1Zl9pbmRleF07CisJCQlDb3B5TGVmdCA9IENvcHlTaXplOworCQkJaWYgKENvcHlTaXplID49IHBEZXMtPmJ1ZmZlcl9zaXplW2J1Zl9pbmRleF0pIHsKKwkJCQlDb3B5TGVmdCA9IHBEZXMtPmJ1ZmZlcl9zaXplW2J1Zl9pbmRleF07CisKKwkJCQkvLyBHZXQgdGhlIG5leHQgYnVmZmVyIG9mIGRlc2NyaXB0b3IKKwkJCQlidWZfaW5kZXgrKzsKKwkJCQlidWZfaW5kZXggJT0gTUFYX0RFU0NSSVBUT1JfQlVGRkVSX0lOREVYOworCQkJfSBlbHNlIHsKKwkJCQlQVUNIQVIJcGN0bXAgPSBwRGVzLT5idWZmZXJfYWRkcmVzc1tidWZfaW5kZXhdOworCQkJCXBjdG1wICs9IENvcHlTaXplOworCQkJCXBEZXMtPmJ1ZmZlcl9hZGRyZXNzW2J1Zl9pbmRleF0gPSBwY3RtcDsKKwkJCQlwRGVzLT5idWZmZXJfc2l6ZVtidWZfaW5kZXhdIC09IENvcHlTaXplOworCQkJfQorCisJCQltZW1jcHkoYnVmZmVyLCBzcmNfYnVmZmVyLCBDb3B5TGVmdCk7CisJCQlidWZmZXIgKz0gQ29weUxlZnQ7CisJCQlDb3B5U2l6ZSAtPSBDb3B5TGVmdDsKKwkJfQorCisJCS8vIDkzMTEzMC41Lm4KKwkJaWYgKHBNZHMtPk1pY0FkZCkgeworCQkJaWYgKCFTaXplTGVmdCkgeworCQkJCXBNZHMtPk1pY1dyaXRlQWRkcmVzc1sgcE1kcy0+TWljV3JpdGVJbmRleCBdID0gYnVmZmVyIC0gcE1kcy0+TWljQWRkOworCQkJCXBNZHMtPk1pY1dyaXRlU2l6ZVsgcE1kcy0+TWljV3JpdGVJbmRleCBdID0gcE1kcy0+TWljQWRkOworCQkJCXBNZHMtPk1pY0FkZCA9IDA7CisJCQl9CisJCQllbHNlIGlmKCBTaXplTGVmdCA8IDggKSAvLzkzMTEzMC41LnAKKwkJCXsKKwkJCQlwTWRzLT5NaWNBZGQgPSBTaXplTGVmdDsKKwkJCQlwTWRzLT5NaWNXcml0ZUFkZHJlc3NbIHBNZHMtPk1pY1dyaXRlSW5kZXggXSA9IGJ1ZmZlciAtICggOCAtIFNpemVMZWZ0ICk7CisJCQkJcE1kcy0+TWljV3JpdGVTaXplWyBwTWRzLT5NaWNXcml0ZUluZGV4IF0gPSA4IC0gU2l6ZUxlZnQ7CisJCQkJcE1kcy0+TWljV3JpdGVJbmRleCsrOworCQkJfQorCQl9CisKKwkJLy8gRG9lcyBpdCBuZWVkIHRvIGdlbmVyYXRlIHRoZSBuZXcgaGVhZGVyIGZvciBuZXh0IG1wZHU/CisJCWlmIChTaXplTGVmdCkgeworCQkJYnVmZmVyID0gVGFyZ2V0QnVmZmVyICsgU2l6ZTsgLy8gR2V0IHRoZSBuZXh0IDRuIHN0YXJ0IGFkZHJlc3MKKwkJCW1lbWNweSggYnVmZmVyLCBUYXJnZXRCdWZmZXIsIDMyICk7Ly9Db3B5IDhCIFVTQiArMjRCIDgwMi4xMQorCQkJcFQwMCA9IChQVDAwX0RFU0NSSVBUT1IpYnVmZmVyOworCQkJcFQwMC0+VDAwX2ZpcnN0X21wZHUgPSAwOworCQl9CisKKwkJRnJhZ21lbnRDb3VudCsrOworCX0KKworCXBUMDAtPlQwMF9sYXN0X21wZHUgPSAxOworCXBUMDAtPlQwMF9Jc0xhc3RNcGR1ID0gMTsKKwlidWZmZXIgPSAoUFVDSEFSKXBUMDAgKyA4OyAvLyArOCBmb3IgVVNCIGhkcgorCWJ1ZmZlclsxXSAmPSB+MHgwNDsgLy8gQ2xlYXIgbW9yZSBmcmFnIGJpdCBvZiA4MDIuMTEgZnJhbWUgY29udHJvbAorCXBEZXMtPkZyYWdtZW50Q291bnQgPSBGcmFnbWVudENvdW50OyAvLyBVcGRhdGUgdGhlIGNvcnJlY3QgZnJhZ21lbnQgbnVtYmVyCisJcmV0dXJuIFNpemU7Cit9CisKKwordm9pZAorTWRzX0R1cmF0aW9uU2V0KCAgUEFEQVBURVIgQWRhcHRlciwgIFBERVNDUklQVE9SIHBEZXMsICBQVUNIQVIgYnVmZmVyICkKK3sKKwlQVDAwX0RFU0NSSVBUT1IJcFQwMDsKKwlQVDAxX0RFU0NSSVBUT1IJcFQwMTsKKwl1MTYJRHVyYXRpb24sIE5leHRCb2R5TGVuLCBPZmZzZXRTaXplOworCXU4CVJhdGUsIGk7CisJdW5zaWduZWQgY2hhcglDVFNfb24gPSBGQUxTRSwgUlRTX29uID0gRkFMU0U7CisJUFQwMF9ERVNDUklQVE9SIHBOZXh0VDAwOworCXUxNiBCb2R5TGVuOworCXVuc2lnbmVkIGNoYXIgYm9Hcm91cEFkZHIgPSBGQUxTRTsKKworCisJT2Zmc2V0U2l6ZSA9IHBEZXMtPkZyYWdtZW50VGhyZXNob2xkICsgMzIgKyAzOworCU9mZnNldFNpemUgJj0gfjB4MDM7CisJUmF0ZSA9IHBEZXMtPlR4UmF0ZSA+PiAxOworCWlmICghUmF0ZSkKKwkJUmF0ZSA9IDE7CisKKwlwVDAwID0gKFBUMDBfREVTQ1JJUFRPUilidWZmZXI7CisJcFQwMSA9IChQVDAxX0RFU0NSSVBUT1IpKGJ1ZmZlcis0KTsKKwlwTmV4dFQwMCA9IChQVDAwX0RFU0NSSVBUT1IpKGJ1ZmZlcitPZmZzZXRTaXplKTsKKworCWlmKCBidWZmZXJbIERPVF8xMV9EQV9PRkZTRVQrOCBdICYgMHgxICkgLy8gKzggZm9yIFVTQiBoZHIKKwkJYm9Hcm91cEFkZHIgPSBUUlVFOworCisJLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJLy8gU2V0IFJUUy9DVFMgbWVjaGFuaXNtCisJLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJaWYgKCFib0dyb3VwQWRkcikKKwl7CisJCS8vTk9URSA6IElmIHRoZSBwcm90ZWN0aW9uIG1vZGUgaXMgZW5hYmxlZCBhbmQgdGhlIE1TRFUgd2lsbCBiZSBmcmFnbWVudGVkLAorCQkvLwkJIHRoZSB0eCByYXRlcyBvZiBNUERVcyB3aWxsIGFsbCBiZSBEU1NTIHJhdGVzLiBTbyBpdCB3aWxsIG5vdCB1c2UKKwkJLy8JCSBDVFMtdG8tc2VsZiBpbiB0aGlzIGNhc2UuIENUUy1Uby1zZWxmIHdpbGwgb25seSBiZSB1c2VkIHdoZW4gd2l0aG91dAorCQkvLwkJIGZyYWdtZW50YXRpb24uIC0tIDIwMDUwMTEyCisJCUJvZHlMZW4gPSAodTE2KXBUMDAtPlQwMF9mcmFtZV9sZW5ndGg7CS8vaW5jbHVkZSA4MDIuMTEgaGVhZGVyCisJCUJvZHlMZW4gKz0gNDsJLy9DUkMKKworCQlpZiggQm9keUxlbiA+PSBDVVJSRU5UX1JUU19USFJFU0hPTEQgKQorCQkJUlRTX29uID0gVFJVRTsgLy8gVXNpbmcgUlRTCisJCWVsc2UKKwkJeworCQkJaWYoIHBUMDEtPlQwMV9tb2R1bGF0aW9uX3R5cGUgKSAvLyBJcyB1c2luZyBPRkRNCisJCQl7CisJCQkJaWYoIENVUlJFTlRfUFJPVEVDVF9NRUNIQU5JU00gKSAvLyBJcyB1c2luZyBwcm90ZWN0CisJCQkJCUNUU19vbiA9IFRSVUU7IC8vIFVzaW5nIENUUworCQkJfQorCQl9CisJfQorCisJaWYoIFJUU19vbiB8fCBDVFNfb24gKQorCXsKKwkJaWYoIHBUMDEtPlQwMV9tb2R1bGF0aW9uX3R5cGUpIC8vIElzIHVzaW5nIE9GRE0KKwkJeworCQkJLy9DVFMgZHVyYXRpb24KKwkJCS8vIDIgU0lGUyArIERBVEEgdHJhbnNtaXQgdGltZSArIDEgQUNLCisJCQkvLyBBQ0sgUmF0ZSA6IDI0IE1lZ2EgYnBzCisJCQkvLyBBQ0sgZnJhbWUgbGVuZ3RoID0gMTQgYnl0ZXMKKwkJCUR1cmF0aW9uID0gMipERUZBVUxUX1NJRlNUSU1FICsKKwkJCQkJICAgMipQUkVBTUJMRV9QTFVTX1NJR05BTF9QTFVTX1NJR05BTEVYVEVOU0lPTiArCisJCQkJCSAgICgoQm9keUxlbio4ICsgMjIgKyBSYXRlKjQgLSAxKS8oUmF0ZSo0KSkqVHN5bSArCisJCQkJCSAgICgoMTEyICsgMjIgKyA5NSkvOTYpKlRzeW07CisJCX0KKwkJZWxzZQkvL0RTU1MKKwkJeworCQkJLy9DVFMgZHVyYXRpb24KKwkJCS8vIDIgU0lGUyArIERBVEEgdHJhbnNtaXQgdGltZSArIDEgQUNLCisJCQkvLyBSYXRlIDogPz8gTWVnYSBicHMKKwkJCS8vIEFDSyBmcmFtZSBsZW5ndGggPSAxNCBieXRlcworCQkJaWYoIHBUMDEtPlQwMV9wbGNwX2hlYWRlcl9sZW5ndGggKSAvL2xvbmcgcHJlYW1ibGUKKwkJCQlEdXJhdGlvbiA9IExPTkdfUFJFQU1CTEVfUExVU19QTENQSEVBREVSX1RJTUUqMjsKKwkJCWVsc2UKKwkJCQlEdXJhdGlvbiA9IFNIT1JUX1BSRUFNQkxFX1BMVVNfUExDUEhFQURFUl9USU1FKjI7CisKKwkJCUR1cmF0aW9uICs9ICggKChCb2R5TGVuICsgMTQpKjggKyBSYXRlLTEpIC8gUmF0ZSArCisJCQkJCQlERUZBVUxUX1NJRlNUSU1FKjIgKTsKKwkJfQorCisJCWlmKCBSVFNfb24gKQorCQl7CisJCQlpZiggcFQwMS0+VDAxX21vZHVsYXRpb25fdHlwZSApIC8vIElzIHVzaW5nIE9GRE0KKwkJCXsKKwkJCQkvL0NUUyArIDEgU0lGUyArIENUUyBkdXJhdGlvbgorCQkJCS8vQ1RTIFJhdGUgOiAyNCBNZWdhIGJwcworCQkJCS8vQ1RTIGZyYW1lIGxlbmd0aCA9IDE0IGJ5dGVzCisJCQkJRHVyYXRpb24gKz0gKERFRkFVTFRfU0lGU1RJTUUgKworCQkJCQkJCQlQUkVBTUJMRV9QTFVTX1NJR05BTF9QTFVTX1NJR05BTEVYVEVOU0lPTiArCisJCQkJCQkJCSgoMTEyICsgMjIgKyA5NSkvOTYpKlRzeW0pOworCQkJfQorCQkJZWxzZQorCQkJeworCQkJCS8vQ1RTICsgMSBTSUZTICsgQ1RTIGR1cmF0aW9uCisJCQkJLy9DVFMgUmF0ZSA6ID8/IE1lZ2EgYnBzCisJCQkJLy9DVFMgZnJhbWUgbGVuZ3RoID0gMTQgYnl0ZXMKKwkJCQlpZiggcFQwMS0+VDAxX3BsY3BfaGVhZGVyX2xlbmd0aCApIC8vbG9uZyBwcmVhbWJsZQorCQkJCQlEdXJhdGlvbiArPSBMT05HX1BSRUFNQkxFX1BMVVNfUExDUEhFQURFUl9USU1FOworCQkJCWVsc2UKKwkJCQkJRHVyYXRpb24gKz0gU0hPUlRfUFJFQU1CTEVfUExVU19QTENQSEVBREVSX1RJTUU7CisKKwkJCQlEdXJhdGlvbiArPSAoICgoMTEyICsgUmF0ZS0xKSAvIFJhdGUpICsgREVGQVVMVF9TSUZTVElNRSApOworCQkJfQorCQl9CisKKwkJLy8gU2V0IHRoZSB2YWx1ZSBpbnRvIFVTQiBkZXNjcmlwdG9yCisJCXBUMDEtPlQwMV9hZGRfcnRzID0gUlRTX29uID8gMSA6IDA7CisJCXBUMDEtPlQwMV9hZGRfY3RzID0gQ1RTX29uID8gMSA6IDA7CisJCXBUMDEtPlQwMV9ydHNfY3RzX2R1cmF0aW9uID0gRHVyYXRpb247CisJfQorCisJLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJLy8gRmlsbCB0aGUgbW9yZSBmcmFnbWVudCBkZXNjcmlwdG9yCisJLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJaWYoIGJvR3JvdXBBZGRyICkKKwkJRHVyYXRpb24gPSAwOworCWVsc2UKKwl7CisJCWZvciggaT1wRGVzLT5GcmFnbWVudENvdW50LTE7IGk+MDsgaS0tICkKKwkJeworCQkJTmV4dEJvZHlMZW4gPSAodTE2KXBOZXh0VDAwLT5UMDBfZnJhbWVfbGVuZ3RoOworCQkJTmV4dEJvZHlMZW4gKz0gNDsJLy9DUkMKKworCQkJaWYoIHBUMDEtPlQwMV9tb2R1bGF0aW9uX3R5cGUgKQorCQkJeworCQkJCS8vT0ZETQorCQkJCS8vIGRhdGEgdHJhbnNtaXQgdGltZSArIDMgU0lGUyArIDIgQUNLCisJCQkJLy8gUmF0ZSA6ID8/TWVnYSBicHMKKwkJCQkvLyBBQ0sgZnJhbWUgbGVuZ3RoID0gMTQgYnl0ZXMsIHR4IHJhdGUgPSAyNE0KKwkJCQlEdXJhdGlvbiA9IFBSRUFNQkxFX1BMVVNfU0lHTkFMX1BMVVNfU0lHTkFMRVhURU5TSU9OICogMzsKKwkJCQlEdXJhdGlvbiArPSAoKChOZXh0Qm9keUxlbio4ICsgMjIgKyBSYXRlKjQgLSAxKS8oUmF0ZSo0KSkgKiBUc3ltICsKKwkJCQkJCQkoKCgyKjE0KSo4ICsgMjIgKyA5NSkvOTYpKlRzeW0gKworCQkJCQkJCURFRkFVTFRfU0lGU1RJTUUqMyk7CisJCQl9CisJCQllbHNlCisJCQl7CisJCQkJLy9EU1NTCisJCQkJLy8gZGF0YSB0cmFuc21pdCB0aW1lICsgMiBBQ0sgKyAzIFNJRlMKKwkJCQkvLyBSYXRlIDogPz9NZWdhIGJwcworCQkJCS8vIEFDSyBmcmFtZSBsZW5ndGggPSAxNCBieXRlcworCQkJCS8vVE9ETyA6CisJCQkJaWYoIHBUMDEtPlQwMV9wbGNwX2hlYWRlcl9sZW5ndGggKSAvL2xvbmcgcHJlYW1ibGUKKwkJCQkJRHVyYXRpb24gPSBMT05HX1BSRUFNQkxFX1BMVVNfUExDUEhFQURFUl9USU1FKjM7CisJCQkJZWxzZQorCQkJCQlEdXJhdGlvbiA9IFNIT1JUX1BSRUFNQkxFX1BMVVNfUExDUEhFQURFUl9USU1FKjM7CisKKwkJCQlEdXJhdGlvbiArPSAoICgoTmV4dEJvZHlMZW4gKyAoMioxNCkpKjggKyBSYXRlLTEpIC8gUmF0ZSArCisJCQkJCQkJREVGQVVMVF9TSUZTVElNRSozICk7CisJCQl9CisKKwkJCSgoUFVTSE9SVClidWZmZXIpWzVdID0gY3B1X3RvX2xlMTYoRHVyYXRpb24pOy8vIDQgVVNIT1IgZm9yIHNraXAgOEIgVVNCLCAyVVNIT1JUPUZDICsgRHVyYXRpb24KKworCQkJLy8tLS0tMjAwNjEwMDkgYWRkIGJ5IGFuc29uJ3MgZW5kaWFuCisJCQlwTmV4dFQwMC0+dmFsdWUgPSBjcHVfdG9fbGUzMihwTmV4dFQwMC0+dmFsdWUpOworCQkJcFQwMS0+dmFsdWUgPSBjcHVfdG9fbGUzMiggcFQwMS0+dmFsdWUgKTsKKwkJCS8vLS0tLWVuZCAyMDA2MTAwOSBhZGQgYnkgYW5zb24ncyBlbmRpYW4KKworCQkJYnVmZmVyICs9IE9mZnNldFNpemU7CisJCQlwVDAxID0gKFBUMDFfREVTQ1JJUFRPUikoYnVmZmVyKzQpOworCQkJaWYgKGkgIT0gMSkJLy9UaGUgbGFzdCBmcmFnbWVudCB3aWxsIG5vdCBoYXZlIHRoZSBuZXh0IGZyYWdtZW50CisJCQkJcE5leHRUMDAgPSAoUFQwMF9ERVNDUklQVE9SKShidWZmZXIrT2Zmc2V0U2l6ZSk7CisJCX0KKworCQkvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwkJLy8gRmlsbCB0aGUgbGFzdCBmcmFnbWVudCBkZXNjcmlwdG9yCisJCS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCQlpZiggcFQwMS0+VDAxX21vZHVsYXRpb25fdHlwZSApCisJCXsKKwkJCS8vT0ZETQorCQkJLy8gMSBTSUZTICsgMSBBQ0sKKwkJCS8vIFJhdGUgOiAyNCBNZWdhIGJwcworCQkJLy8gQUNLIGZyYW1lIGxlbmd0aCA9IDE0IGJ5dGVzCisJCQlEdXJhdGlvbiA9IFBSRUFNQkxFX1BMVVNfU0lHTkFMX1BMVVNfU0lHTkFMRVhURU5TSU9OOworCQkJLy9UaGUgVHggcmF0ZSBvZiBBQ0sgdXNlIDI0TQorCQkJRHVyYXRpb24gKz0gKCgoMTEyICsgMjIgKyA5NSkvOTYpKlRzeW0gKyBERUZBVUxUX1NJRlNUSU1FICk7CisJCX0KKwkJZWxzZQorCQl7CisJCQkvLyBEU1NTCisJCQkvLyAxIEFDSyArIDEgU0lGUworCQkJLy8gUmF0ZSA6ID8/IE1lZ2EgYnBzCisJCQkvLyBBQ0sgZnJhbWUgbGVuZ3RoID0gMTQgYnl0ZXMoMTEyIGJpdHMpCisJCQlpZiggcFQwMS0+VDAxX3BsY3BfaGVhZGVyX2xlbmd0aCApIC8vbG9uZyBwcmVhbWJsZQorCQkJCUR1cmF0aW9uID0gTE9OR19QUkVBTUJMRV9QTFVTX1BMQ1BIRUFERVJfVElNRTsKKwkJCWVsc2UKKwkJCQlEdXJhdGlvbiA9IFNIT1JUX1BSRUFNQkxFX1BMVVNfUExDUEhFQURFUl9USU1FOworCisJCQlEdXJhdGlvbiArPSAoICgxMTIgKyBSYXRlLTEpL1JhdGUgKwlERUZBVUxUX1NJRlNUSU1FICk7CisJCX0KKwl9CisKKwkoKFBVU0hPUlQpYnVmZmVyKVs1XSA9IGNwdV90b19sZTE2KER1cmF0aW9uKTsvLyA0IFVTSE9SIGZvciBza2lwIDhCIFVTQiwgMlVTSE9SVD1GQyArIER1cmF0aW9uCisJcFQwMC0+dmFsdWUgPSBjcHVfdG9fbGUzMihwVDAwLT52YWx1ZSk7CisJcFQwMS0+dmFsdWUgPSBjcHVfdG9fbGUzMihwVDAxLT52YWx1ZSk7CisJLy8tLWVuZCAyMDA2MTAwOSBhZGQKKworfQorCit2b2lkIE1EU19FdGhlcm5ldFBhY2tldFJlY2VpdmUoICBQQURBUFRFUiBBZGFwdGVyLCAgUFJYTEFZRVIxIHBSeExheWVyMSApCit7CisJCU9TX1JFQ0VJVkVfUEFDS0VUX0lORElDQVRFKCBBZGFwdGVyLCBwUnhMYXllcjEgKTsKK30KKworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9tZHNfZi5oIGIvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvbWRzX2YuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NTExODhiCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvbWRzX2YuaApAQCAtMCwwICsxLDMzIEBACit1bnNpZ25lZCBjaGFyIE1kc19pbml0aWFsKCAgUEFEQVBURVIgQWRhcHRlciApOwordm9pZCBNZHNfRGVzdHJveSggIFBBREFQVEVSIEFkYXB0ZXIgKTsKK3ZvaWQgTWRzX1R4KCAgUEFEQVBURVIgQWRhcHRlciApOwordm9pZCBNZHNfSGVhZGVyQ29weSggIFBBREFQVEVSIEFkYXB0ZXIsICBQREVTQ1JJUFRPUiBwRGVzLCAgUFVDSEFSIFRhcmdldEJ1ZmZlciApOwordTE2IE1kc19Cb2R5Q29weSggIFBBREFQVEVSIEFkYXB0ZXIsICBQREVTQ1JJUFRPUiBwRGVzLCAgUFVDSEFSIFRhcmdldEJ1ZmZlciApOwordm9pZCBNZHNfRHVyYXRpb25TZXQoICBQQURBUFRFUiBBZGFwdGVyLCAgUERFU0NSSVBUT1IgcERlcywgIFBVQ0hBUiBUYXJnZXRCdWZmZXIgKTsKK3ZvaWQgTWRzX1NlbmRDb21wbGV0ZSggIFBBREFQVEVSIEFkYXB0ZXIsICBQVDAyX0RFU0NSSVBUT1IgcFQwMiApOwordm9pZCBNZHNfTXBkdVByb2Nlc3MoICBQQURBUFRFUiBBZGFwdGVyLCAgUERFU0NSSVBUT1IgcFJ4RGVzICk7Cit2b2lkIE1kc19yZXNldF9kZXNjcmlwdG9yKCAgUEFEQVBURVIgQWRhcHRlciApOworZXh0ZXJuIHZvaWQgRGF0YURtcCh1OCAqcGRhdGEsIHUzMiBsZW4sIHUzMiBvZmZzZXQpOworCisKK3ZvaWQgdlJ4VGltZXJJbml0KFBXQjMyX0FEQVBURVIgQWRhcHRlcik7Cit2b2lkIHZSeFRpbWVyU3RhcnQoUFdCMzJfQURBUFRFUiBBZGFwdGVyLCBpbnQgdGltZW91dF92YWx1ZSk7Cit2b2lkIFJ4VGltZXJIYW5kbGVyXzFhKCBQQURBUFRFUiBBZGFwdGVyKTsKK3ZvaWQgdlJ4VGltZXJTdG9wKFBXQjMyX0FEQVBURVIgQWRhcHRlcik7Cit2b2lkIFJ4VGltZXJIYW5kbGVyKCB2b2lkKgkJCVN5c3RlbVNwZWNpZmljMSwKKwkJCQkJICAgUFdCMzJfQURBUFRFUiAJQWRhcHRlciwKKwkJCQkJICAgdm9pZCoJCQlTeXN0ZW1TcGVjaWZpYzIsCisJCQkJCSAgIHZvaWQqCQkJU3lzdGVtU3BlY2lmaWMzKTsKKworCisvLyBGb3IgQXN5bmNocm9ub3VzIGluZGljYXRpbmcuIFRoZSByb3V0aW5lIGNvbGxvY2F0ZXMgd2l0aCBVU0IuCit2b2lkIE1kc19Nc2R1UHJvY2VzcyggIFBXQjMyX0FEQVBURVIgQWRhcHRlciwgIFBSWExBWUVSMSBwUnhMYXllcjEsICB1OCBTbG90SW5kZXgpOworCisvLyBGb3IgZGF0YSBmcmFtZSBzZW5kaW5nIDIwMDYwODAyCit1MTYgTURTX0dldFBhY2tldFNpemUoICBQQURBUFRFUiBBZGFwdGVyICk7Cit2b2lkIE1EU19HZXROZXh0UGFja2V0KCAgUEFEQVBURVIgQWRhcHRlciwgIFBERVNDUklQVE9SIHBEZXMgKTsKK3ZvaWQgTURTX0dldE5leHRQYWNrZXRDb21wbGV0ZSggIFBBREFQVEVSIEFkYXB0ZXIsICBQREVTQ1JJUFRPUiBwRGVzICk7Cit2b2lkIE1EU19TZW5kUmVzdWx0KCAgUEFEQVBURVIgQWRhcHRlciwgIHU4IFBhY2tldElkLCAgdW5zaWduZWQgY2hhciBTZW5kT0sgKTsKK3ZvaWQgTURTX0V0aGVybmV0UGFja2V0UmVjZWl2ZSggIFBBREFQVEVSIEFkYXB0ZXIsICBQUlhMQVlFUjEgcFJ4TGF5ZXIxICk7CisKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvbWRzX3MuaCBiL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL21kc19zLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDczODI3OQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL21kc19zLmgKQEAgLTAsMCArMSwxODMgQEAKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisjZGVmaW5lIE1BWF9VU0JfVFhfREVTQ1JJUFRPUgkJMTUJCS8vIElTODlDMzUgYWJpbGl0eQorI2RlZmluZSBNQVhfVVNCX1RYX0JVRkZFUl9OVU1CRVIJNAkJLy8gVmlydHVhbCBwcmUtYnVmZmVyIG51bWJlciBvZiBNQVhfVVNCX1RYX0JVRkZFUgorI2RlZmluZSBNQVhfVVNCX1RYX0JVRkZFUgkJCTQwOTYJLy8gSVM4OUMzNSBhYmlsaXR5IDRuIGFsaWdubWVudCBpcyByZXF1aXJlZCBmb3IgaGFyZHdhcmUKKworI2RlZmluZSBNRFNfRVZFTlRfSU5ESUNBVEUoIF9BLCBfQiwgX0YgKQlPU19FVkVOVF9JTkRJQ0FURSggX0EsIF9CLCBfRiApCisjZGVmaW5lIEFVVEhfUkVRVUVTVF9QQUlSV0lTRV9FUlJPUgkJCTAJCS8vIF9GIGZsYWcgc2V0dGluZworI2RlZmluZSBBVVRIX1JFUVVFU1RfR1JPVVBfRVJST1IJCQkxCQkvLyBfRiBmbGFnIHNldHRpbmcKKworLy8gRm9yIHZhcmlhYmxlIHNldHRpbmcKKyNkZWZpbmUgQ1VSUkVOVF9CU1NfVFlQRQkJCQlwc0JTUyhwc0xPQ0FMLT53Q29ubmVjdGVkU1RBaW5kZXgpLT5iQnNzVHlwZQorI2RlZmluZSBDVVJSRU5UX1dFUF9NT0RFCQkJCXBzU01FLT5fZG90MTFQcml2YWN5SW52b2tlZAorI2RlZmluZSBDVVJSRU5UX0JTU0lECQkJCQlwc0JTUyhwc0xPQ0FMLT53Q29ubmVjdGVkU1RBaW5kZXgpLT5hYkJzc0lECisjZGVmaW5lIENVUlJFTlRfREVTSVJFRF9XUEFfRU5BQkxFCQkoKHBzU01FLT5iRGVzaXJlZEF1dGhNb2RlPT1XUEFfQVVUSCl8fChwc1NNRS0+YkRlc2lyZWRBdXRoTW9kZT09V1BBUFNLX0FVVEgpKQorI2lmZGVmIF9XUEEyXworI2RlZmluZSBDVVJSRU5UX0RFU0lSRURfV1BBMl9FTkFCTEUJCSgocHNTTUUtPmJEZXNpcmVkQXV0aE1vZGU9PVdQQTJfQVVUSCl8fChwc1NNRS0+YkRlc2lyZWRBdXRoTW9kZT09V1BBMlBTS19BVVRIKSkKKyNlbmRpZiAvL2VuZCBkZWYgX1dQQTJfCisjZGVmaW5lIENVUlJFTlRfUEFJUldJU0VfS0VZX09LCQkJcHNTTUUtPnBhaXJ3aXNlX2tleV9vaworLy9bMjAwNDA3MTIgV1NdCisjZGVmaW5lIENVUlJFTlRfR1JPVVBfS0VZX09LCQkJcHNTTUUtPmdyb3VwX2tleV9vaworI2RlZmluZSBDVVJSRU5UX1BBSVJXSVNFX0tFWQkJCXBzU01FLT50eF9taWNfa2V5CisjZGVmaW5lIENVUlJFTlRfR1JPVVBfS0VZCQkJCXBzU01FLT5ncm91cF90eF9taWNfa2V5CisjZGVmaW5lIENVUlJFTlRfRU5DUllQVF9TVEFUVVMJCQlwc1NNRS0+ZW5jcnlwdF9zdGF0dXMKKyNkZWZpbmUgQ1VSUkVOVF9XRVBfSUQJCQkJCUFkYXB0ZXItPnNTbWVQYXJhLl9kb3QxMVdFUERlZmF1bHRLZXlJRAorI2RlZmluZSBDVVJSRU5UX0NPTlRST0xfUE9SVF9CTE9DSwkJKCBwc1NNRS0+d3BhX29rIT0xIHx8IChBZGFwdGVyLT5NZHMuYm9Db3VudGVyTWVhc3VyZUJsb2NrPT0xICYmIChDVVJSRU5UX0VOQ1JZUFRfU1RBVFVTPT1FTkNSWVBUX1RLSVApKSApCisjZGVmaW5lIENVUlJFTlRfRlJBR01FTlRfVEhSRVNIT0xECQkoQWRhcHRlci0+TWRzLlR4RnJhZ21lbnRUaHJlc2hvbGQgJiB+MHgxKQorI2RlZmluZSBDVVJSRU5UX1BSRUFNQkxFX01PREUJCQlwc0xPQ0FMLT5ib1Nob3J0UHJlYW1ibGU/V0xBTl9QUkVBTUJMRV9UWVBFX1NIT1JUOldMQU5fUFJFQU1CTEVfVFlQRV9MT05HCisjZGVmaW5lIENVUlJFTlRfTElOS19PTgkJCQkJT1NfTElOS19TVEFUVVMKKyNkZWZpbmUgQ1VSUkVOVF9UWF9SQVRFCQkJCQlBZGFwdGVyLT5zTG9jYWxQYXJhLkN1cnJlbnRUeFJhdGUKKyNkZWZpbmUgQ1VSUkVOVF9GQUxMX0JBQ0tfVFhfUkFURQkJQWRhcHRlci0+c0xvY2FsUGFyYS5DdXJyZW50VHhGYWxsYmFja1JhdGUKKyNkZWZpbmUgQ1VSUkVOVF9UWF9SQVRFX0ZPUl9NTkcJCQlBZGFwdGVyLT5zTG9jYWxQYXJhLkN1cnJlbnRUeFJhdGVGb3JNbmcKKyNkZWZpbmUgQ1VSUkVOVF9QUk9URUNUX01FQ0hBTklTTQkJcHNMT0NBTC0+Ym9Qcm90ZWN0TWVjaGFuaXNtCisjZGVmaW5lIENVUlJFTlRfUlRTX1RIUkVTSE9MRAkJCUFkYXB0ZXItPk1kcy5UeFJUU1RocmVzaG9sZAorCisjZGVmaW5lIE1JQl9HU19YTUlUX09LX0lOQwkJCQlBZGFwdGVyLT5zTG9jYWxQYXJhLkdTX1hNSVRfT0srKworI2RlZmluZSBNSUJfR1NfUkNWX09LX0lOQwkJCQlBZGFwdGVyLT5zTG9jYWxQYXJhLkdTX1JDVl9PSysrCisjZGVmaW5lIE1JQl9HU19YTUlUX0VSUk9SX0lOQwkJCUFkYXB0ZXItPnNMb2NhbFBhcmEuR1NfWE1JVF9FUlJPUgorCisvLy0tLS0tLS0tLS0gVFggLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyNkZWZpbmUgRVRIRVJORVRfVFhfREVTQ1JJUFRPUlMgICAgICAgICBNQVhfVVNCX1RYX0JVRkZFUl9OVU1CRVIKKworLy8tLS0tLS0tLS0tIFJYIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorI2RlZmluZSBFVEhFUk5FVF9SWF9ERVNDUklQVE9SUwkJCTgJLy9JdCdzIG5vdCBuZWNlc3NhcnkgdG8gYWxsb2NhdGUgbW9yZSB0aGFuIDIgaW4gc3luYyBpbmRpY2F0ZQorCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vIENvbmZpZ3JhdGlvbiBkZWZhdWx0IHZhbHVlCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyNkZWZpbmUgREVGQVVMVF9NVUxUSUNBU1RMSVNUTUFYCQkzMiAJCS8vIHN0YW5kYXJkCisjZGVmaW5lIERFRkFVTFRfVFhfQlVSU1RMRU5HVEgJCQkzIAkJLy8gMzIgTG9uZ3dvcmRzCisjZGVmaW5lIERFRkFVTFRfUlhfQlVSU1RMRU5HVEgJCQkzIAkJLy8gMzIgTG9uZ3dvcmRzCisjZGVmaW5lIERFRkFVTFRfVFhfVEhSRVNIT0xECQkJMCAJCS8vIEZ1bGwgUGFja2V0CisjZGVmaW5lIERFRkFVTFRfUlhfVEhSRVNIT0xECQkJMCAJCS8vIEZ1bGwgUGFja2V0CisjZGVmaW5lIERFRkFVTFRfTUFYVFhSQVRFCQkJCTYgCQkvLyAxMSBNYnBzIChMb25nKQorI2RlZmluZSBERUZBVUxUX0NIQU5ORUwJCQkJCTMgCQkvLyBDaGVubmVsIDMKKyNkZWZpbmUgREVGQVVMVF9SVFNUaHJlc2hvbGQJCQkyMzQ3IAkvLyBEaXNhYmxlIFJUUworLy8jZGVmaW5lIERFRkFVTFRfUE1FCQkJCQkJMSAJCS8vIEVuYWJsZQorI2RlZmluZSBERUZBVUxUX1BNRQkJCQkJCTAgCQkvLyBEaXNhYmxlCisjZGVmaW5lIERFRkFVTFRfU0lGU1RJTUUJCQkJMTAKKyNkZWZpbmUgREVGQVVMVF9BQ0tUSU1FXzFNTCAgICAgICAgICAgICAzMDQgICAgIC8vIDE0OCs0NCsxMTIgOTExMjIwIGJ5IExDQworI2RlZmluZSBERUZBVUxUX0FDS1RJTUVfMk1MICAgICAgICAgICAgIDI0OCAgICAgLy8gMTQ4KzQ0KzU2IDkxMTIyMCBieSBMQ0MKKyNkZWZpbmUgREVGQVVMVF9GUkFHTUVOVF9USFJFU0hPTEQgICAgICAyMzQ2IAkvLyBObyBmcmFnbWVudAorI2RlZmluZSBERUZBVUxUX1BSRUFNQkxFX0xFTkdUSAkJCTcyCisjZGVmaW5lIERFRkFVTFRfUExDUEhFQURFUlRJTUVfTEVOR1RICTI0CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgMC45NiBzZWMgc2luY2UgdGltZSB1bml0IG9mIHRoZSBSMDMgZm9yIHRoZSBjdXJyZW50LCBXODlDMzIgaXMgYWJvdXQgNjBucworIGluc3RlYWQgb2YgOTYwIG5zLiBUaGlzIHNoYWxsIGJlIGZpeGVkIGluIHRoZSBmdXR1cmUgVzg5QzMyCisgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZGVmaW5lIERFRkFVTFRfTUFYX1JFQ0VJVkVfVElNRSAgICAgICAgMTY0NDAwMDAKKworI2RlZmluZSBSWF9CVUZfU0laRQkJCQkJCTIzNTIgICAgICAgIC8vIDYwMCAJLy8gRm9yIDMwMSBtdXN0IGJlIG11bHRpcGxlIG9mIDgKKyNkZWZpbmUgTUFYX1JYX0RFU0NSSVBUT1JTICAgICAgICAgICAgICAxOCAgICAgICAgIC8vIFJ4IExheWVyIDIKKyNkZWZpbmUgTUFYX0JVRkZFUl9RVUVVRQk4IC8vIFRoZSB2YWx1ZSBpcyBhbHdheXMgZXF1YWwgOCBkdWUgdG8gTkRJU19QQUNLRVQncyBNaW5pcG9ydFJlc2VydmVkIGZpZWxkIHNpemUKKworCisvLyBGb3IgYnJhbmQtbmV3IHJ4IHN5c3RlbQorI2RlZmluZSBNRFNfSURfSUdOT1JFCQkJCUVUSEVSTkVUX1JYX0RFU0NSSVBUT1JTCisKKy8vIEZvciBUeCBQYWNrZXQgc3RhdHVzIGNsYXNzaWZ5CisjZGVmaW5lIFBBQ0tFVF9GUkVFX1RPX1VTRQkJCQkJCTAKKyNkZWZpbmUgUEFDS0VUX0NPTUVfRlJPTV9ORElTCQkJCQkweDA4CisjZGVmaW5lIFBBQ0tFVF9DT01FX0ZST01fTUxNRQkJCQkJMHg4MAorI2RlZmluZSBQQUNLRVRfU0VORF9DT01QTEVURQkJCQkJMHhmZgorCit0eXBlZGVmIHN0cnVjdCBfTURTCit7CisJLy8gRm9yIFR4IHVzYWdlCisJdTgJVHhPd25lclsgKChNQVhfVVNCX1RYX0JVRkZFUl9OVU1CRVIgKyAzKSAmIH4weDAzKSBdOworCVBVQ0hBUglwVHhCdWZmZXI7CisJdTE2CVR4QnVmZmVyU2l6ZVsgKChNQVhfVVNCX1RYX0JVRkZFUl9OVU1CRVIgKyAxKSAmIH4weDAxKSBdOworCXU4CVR4RGVzRnJvbVsgKChNQVhfVVNCX1RYX0RFU0NSSVBUT1IgKyAzKSAmIH4weDAzKSBdOy8vOTMxMTMwLjQudSAvLyAxOiBNTE1FIDI6IE5ESVMgY29udHJvbCAzOiBORElTIGRhdGEKKwl1OAlUeENvdW50SW5CdWZmZXJbICgoTUFYX1VTQl9UWF9ERVNDUklQVE9SICsgMykgJiB+MHgwMykgXTsgLy8gMjAwNjA5MjgKKworCXU4CVR4RmlsbEluZGV4Oy8vdGhlIG5leHQgaW5kZXggb2YgVHhCdWZmZXIgY2FuIGJlIHVzZWQKKwl1OAlUeERlc0luZGV4Oy8vVGhlIG5leHQgaW5kZXggb2YgVHhEZXMgY2FuIGJlIHVzZWQKKwl1OAlTY2FuVHhQYXVzZTsJLy9kYXRhIFR4IHBhdXNlIGJlY2F1c2UgdGhlIHNjYW5uaW5nIGlzIHByb2dyZXNzaW5nLCBidXQgcHJvYmUgcmVxdWVzdCBUeCB3b24ndC4KKwl1OAlUeFBhdXNlOy8vRm9yIHBhdXNlIHRoZSBNZHNfVHggbW9kdWx0CisKKwlPU19BVE9NSUMJVHhUaHJlYWRDb3VudDsvL0ZvciB0aHJlYWQgY291bnRpbmcgOTMxMTMwLjQudgorLy85NTAzMDEgZGVsZXRlIGR1ZSB0byBIVworLy8JT1NfQVRPTUlDCVR4Q29uY3VycmVudENvdW50Oy8vOTMxMTMwLjQudworCisJdTE2CVR4UmVzdWx0WyAoKE1BWF9VU0JfVFhfREVTQ1JJUFRPUiArIDEpICYgfjB4MDEpIF07Ly9Db2xsZWN0IHRoZSBzZW5kaW5nIHJlc3VsdCBvZiBNcGR1CisKKwl1OAlNaWNSZWR1bmRhbnRbOF07IC8vIEZvciB0bXAgdXNlCisJUFVDSEFSCU1pY1dyaXRlQWRkcmVzc1syXTsgLy9UaGUgc3RhcnQgYWRkcmVzcyB0byBmaWxsIHRoZSBNaWMsIHVzZSAyIHBvaW50IGR1ZSB0byBNaWMgbWF5YmUgZnJhZ21lbnQKKworCXUxNglNaWNXcml0ZVNpemVbMl07IC8vOTMxMTMwLjQueAorCisJdTE2CU1pY0FkZDsgLy8gSWYgd2FudCB0byBhZGQgdGhlIE1pYywgdGhpcyB2YXJpYWJsZSBlcXVhbCB0byA4CisJdTE2CU1pY1dyaXRlSW5kZXg7Ly9UaGUgbnVtYmVyIG9mIE1pY1dyaXRlQWRkcmVzcyA5MzExMzAuNC55CisKKwl1OAlUeFJhdGVbICgoTUFYX1VTQl9UWF9ERVNDUklQVE9SKzEpJn4weDAxKSBdWzJdOyAvLyBbMF0gY3VycmVudCB0eCByYXRlLCBbMV0gZmFsbCBiYWNrIHJhdGUKKwl1OAlUeEluZm9bICgoTUFYX1VTQl9UWF9ERVNDUklQVE9SKzEpJn4weDAxKSBdOwkvL1N0b3JlIGluZm9ybWF0aW9uIGZvciBjYWxsYmFjayBmdW5jdGlvbgorCisJLy9XS0NIRU4gYWRkZWQgZm9yIHNjYW5uaW5nIG1lY2hhbmlzbQorCXU4CVR4VG9nZ2xlOwkJLy9JdCBpcyBUUlVFIGlmIHRoZXJlIGFyZSB0eCBhY3Rpdml0aWVzIGluIHNvbWUgdGltZSBpbnRlcnZhbAorCXU4CVJlc2VydmVkX1szXTsKKworCS8vLS0tLS0tLS0tLSBmb3IgVHggUGFyYW1ldGVyCisJdTE2CVR4RnJhZ21lbnRUaHJlc2hvbGQ7ICAgIAkvLyBGb3IgZnJhbWUgYm9keSBvbmx5CisJdTE2CVR4UlRTVGhyZXNob2xkOworCisJdTMyCQlNYXhSZWNlaXZlVGltZTsvLzkxMTIyMC4zIEFkZAorCisJLy8gZGVwZW5kIG9uIE9TLAorCXUzMgkJCQkJTXVsdGljYXN0TGlzdE5vOworCXUzMgkJCQkJUGFja2V0RmlsdGVyOyAvLyBTZXR0aW5nIGJ5IE5ESVMsIHRoZSBjdXJyZW50IHBhY2tldCBmaWx0ZXIgaW4gdXNlLgorCXU4CQkJCQlNdWx0aWNhc3RBZGRyZXNzZXNBcnJheVtERUZBVUxUX01VTFRJQ0FTVExJU1RNQVhdW01BQ19BRERSX0xFTkdUSF07CisKKwkvL0NPVU5URVJNRUFTVVJFCisJdTgJCWJNSUNmYWlsQ291bnQ7CisJdTgJCWJvQ291bnRlck1lYXN1cmVCbG9jazsKKwl1OAkJcmVzZXJ2ZWRfNFsyXTsKKworCS8vTkRJU19NSU5JUE9SVF9USU1FUgluVGltZXI7CisJT1NfVElNRVIJblRpbWVyOworCisJdTMyCVR4VHNjOyAvLyAyMDA2MDIxNAorCXUzMglUeFRzY18yOyAvLyAyMDA2MDIxNAorCit9IE1EUywgKlBNRFM7CisKKwordHlwZWRlZiBzdHJ1Y3QgX1J4QnVmZmVyCit7CisgICAgUFVDSEFSICBwQnVmZmVyQWRkcmVzczsgICAgIC8vIFBvaW50ZXIgdGhlIHJlY2VpdmVkIGRhdGEgYnVmZmVyLgorCXUxNglCdWZmZXJTaXplOworCXU4CVJFU0VSVkVEOworCXU4CUJ1ZmZlckluZGV4Oy8vIE9ubHkgMSBieXRlCit9IFJYQlVGRkVSLCAqUFJYQlVGRkVSOworCisvLworLy8gUmV2ZWl2ZSBMYXllciAxIEZvcm1hdC4KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordHlwZWRlZiBzdHJ1Y3QgX1JYTEFZRVIxCit7CisgICAgdTE2ICBTZXF1ZW5jZU51bWJlcjsgICAgIC8vIFRoZSBzZXF1ZW5jZSBudW1iZXIgb2YgdGhlIGxhc3QgcmVjZWl2ZWQgcGFja2V0LgorCXUxNglCdWZmZXJUb3RhbFNpemU7CisKKwl1MzIJSW5Vc2VkOworICAgIHUzMiAgIERlY3J5cHRpb25NZXRob2Q7ICAgLy8gVGhlIGRlc2lyZWQgZGVmcmFnbWVudCBudW1iZXIgb2YgdGhlIG5leHQgaW5jb21pbmcgcGFja2V0LgorCisJdTgJRGVGcmFnbWVudE51bWJlcjsKKwl1OAlGcmFtZVR5cGU7CisgICAgdTgJVHlwZUVuY2Fwc3VsYXRlZDsKKwl1OAlCdWZmZXJOdW1iZXI7CisKKwl1MzIJRmlyc3RGcmFtZUFycml2ZWRUaW1lOworCisJUlhCVUZGRVIJQnVmZmVyUXVldWVbIE1BWF9CVUZGRVJfUVVFVUUgXTsKKworCXU4CQlMYXN0RnJhbWVUeXBlOyAvLyAyMDA2MTAwNCBmb3IgZml4IGludGVsIDM5NDUgJ3MgYnVnCisJdTgJCVJFU0VSVkVEWzNdOyAgLy9AQCBhbnNvbgorCisJLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisJLy8gRm9yIGJyYW5kLW5ldyBSeCBzeXN0ZW0KKwl1OAlSZXNlcnZlZEJ1ZmZlclsgMjQwMCBdOy8vSWYgQnVmZmVyIElEIGlzIHJlc2VydmVkIG9uZSwgaXQgbXVzdCBjb3B5IHRoZSBkYXRhIGludG8gdGhpcyBhcmVhCisJUFVDSEFSCVJlc2VydmVkQnVmZmVyUG9pbnQ7Ly8gUG9pbnQgdG8gdGhlIG5leHQgYXZhaWxhYmUgYWRkcmVzcyBvZiByZXNlcnZlZCBidWZmZXIKKworfVJYTEFZRVIxLCAqIFBSWExBWUVSMTsKKworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9tbG1lX21pYi5oIGIvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvbWxtZV9taWIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OTc1OTczCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvbWxtZV9taWIuaApAQCAtMCwwICsxLDg0IEBACisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vICBNTE1FTUlCLkggLQorLy8KKy8vICBEZXNjcmlwdGlvbjoKKy8vICAgIEdldCBhbmQgU2V0IHNvbWUgb2YgTUxNRSBNSUIgYXR0cmlidXRlcy4KKy8vCisvLyAgUmV2aXNpb24gaGlzdG9yeToKKy8vICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gICAgICAgICAgIDIwMDMwMTE3ICBQRDQzIEF1c3RpbiBMaXUKKy8vICAgICAgICAgICAgICAgICAgICAgSW5pdGlhbCByZWxlYXNlCisvLworLy8gIENvcHlyaWdodCAoYykgMjAwMyBXaW5ib25kIEVsZWN0cm9uaWNzIENvcnAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworI2lmbmRlZiBfTUxNRV9NSUJfSAorI2RlZmluZSBfTUxNRV9NSUJfSAorCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vIE1MTUVTZXRFeGNsdWRlVW5lbmNyeXB0ZWQgLS0KKy8vCisvLyBEZXNjcmlwdGlvbjoKKy8vICAgU2V0IHRoZSBkb3QxMUV4Y2x1ZGVVbmVuY3J5cHRlZCB2YWx1ZS4KKy8vCisvLyBBcmd1bWVudHM6CisvLyAgIEFkYXB0ZXIgICAgICAgIC0gVGhlIHBvaW50ZXIgdG8gdGhlIG1pbmlwb3J0IGFkYXB0ZXIgY29udGV4dC4KKy8vICAgRXhVbmVuY3J5cHRlZCAgLSB1bnNpZ25lZCBjaGFyIHR5cGUuIFRoZSB2YWx1ZSB0byBiZSBzZXQuCisvLworLy8gUmV0dXJuIHZhbHVlczoKKy8vICAgTm9uZS4KKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorI2RlZmluZSBNTE1FU2V0RXhjbHVkZVVuZW5jcnlwdGVkKEFkYXB0ZXIsIEV4VW5lbmNyeXB0ZWQpICAgICBcCit7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKEFkYXB0ZXIpLT5zTG9jYWxQYXJhLkV4Y2x1ZGVVbmVuY3J5cHRlZCA9IEV4VW5lbmNyeXB0ZWQ7ICAgICAgICAgICAgIFwKK30KKworLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLyBNTE1FR2V0RXhjbHVkZVVuZW5jcnlwdGVkIC0tCisvLworLy8gRGVzY3JpcHRpb246CisvLyAgIEdldCB0aGUgZG90MTFFeGNsdWRlVW5lbmNyeXB0ZWQgdmFsdWUuCisvLworLy8gQXJndW1lbnRzOgorLy8gICBBZGFwdGVyICAgICAgICAtIFRoZSBwb2ludGVyIHRvIHRoZSBtaW5pcG9ydCBhZGFwdGVyIGNvbnRleHQuCisvLworLy8gUmV0dXJuIHZhbHVlczoKKy8vICAgdW5zaWduZWQgY2hhciB0eXBlLiBUaGUgY3VycmVudCBkb3QxMUV4Y2x1ZGVVbmVuY3J5cHRlZCB2YWx1ZS4KKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorI2RlZmluZSBNTE1FR2V0RXhjbHVkZVVuZW5jcnlwdGVkKEFkYXB0ZXIpICgodW5zaWduZWQgY2hhcikgKEFkYXB0ZXIpLT5zTG9jYWxQYXJhLkV4Y2x1ZGVVbmVuY3J5cHRlZCkKKworLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLyBNTE1FU2V0TWF4UmVjZWl2ZUxpZmVUaW1lIC0tCisvLworLy8gRGVzY3JpcHRpb246CisvLyAgIFNldCB0aGUgZG90MTFNYXhSZWNlaXZlTGlmZVRpbWUgdmFsdWUuCisvLworLy8gQXJndW1lbnRzOgorLy8gICBBZGFwdGVyICAgICAgICAtIFRoZSBwb2ludGVyIHRvIHRoZSBtaW5pcG9ydCBhZGFwdGVyIGNvbnRleHQuCisvLyAgIFJlY2VpdmVMaWZlVGltZS0gdTMyIHR5cGUuIFRoZSB2YWx1ZSB0byBiZSBzZXQuCisvLworLy8gUmV0dXJuIHZhbHVlczoKKy8vICAgTm9uZS4KKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorI2RlZmluZSBNTE1FU2V0TWF4UmVjZWl2ZUxpZmVUaW1lKEFkYXB0ZXIsIFJlY2VpdmVMaWZlVGltZSkgICAgXAoreyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAoQWRhcHRlciktPk1kcy5NYXhSZWNlaXZlVGltZSA9IFJlY2VpdmVMaWZlVGltZTsgICAgICAgICAgICAgICAgXAorfQorCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vIE1MTUVTZXRNYXhSZWNlaXZlTGlmZVRpbWUgLS0KKy8vCisvLyBEZXNjcmlwdGlvbjoKKy8vICAgR2V0IHRoZSBkb3QxMU1heFJlY2VpdmVMaWZlVGltZSB2YWx1ZS4KKy8vCisvLyBBcmd1bWVudHM6CisvLyAgIEFkYXB0ZXIgICAgICAgIC0gVGhlIHBvaW50ZXIgdG8gdGhlIG1pbmlwb3J0IGFkYXB0ZXIgY29udGV4dC4KKy8vCisvLyBSZXR1cm4gdmFsdWVzOgorLy8gICB1MzIgdHlwZS4gVGhlIGN1cnJlbnQgZG90MTFNYXhSZWNlaXZlTGlmZVRpbWUgdmFsdWUuCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyNkZWZpbmUgTUxNRUdldE1heFJlY2VpdmVMaWZlVGltZShBZGFwdGVyKSAoKHUzMikgKEFkYXB0ZXIpLT5NZHMuTWF4UmVjZWl2ZVRpbWUpCisKKyNlbmRpZgorCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL21sbWVfcy5oIGIvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvbWxtZV9zLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTgwOTRmNgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL21sbWVfcy5oCkBAIC0wLDAgKzEsMTk1IEBACisvLysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCisvLwlNbG1lLmgKKy8vCQlEZWZpbmUgdGhlIHJlbGF0ZWQgZGVmaW5pdGlvbnMgb2YgTUxNRSBtb2R1bGUKKy8vCWhpc3RvcnkgLS0gMDEvMTQvMDMnIGNyZWF0ZWQKKy8vCisvLysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCisKKyNkZWZpbmUgQVVUSF9SRUpFQ1RfUkVBU09OX0NIQUxMRU5HRV9GQUlMCQkxCisKKy8vPT09PT09IHRoZSBzdGF0ZSBvZiBNTE1FIG1vZHVsZQorI2RlZmluZSBJTkFDVElWRQkJCTB4MAorI2RlZmluZSBJRExFX1NDQU4JCQkweDEKKworLy89PT09PT0gdGhlIHN0YXRlIG9mIE1MTUUvRVNTIG1vZHVsZQorI2RlZmluZSBTVEFURV8xCQkJCTB4MgorI2RlZmluZSBBVVRIX1JFUQkJCTB4MworI2RlZmluZSBBVVRIX1dFUAkJCTB4NAorI2RlZmluZSBTVEFURV8yCQkJCTB4NQorI2RlZmluZSBBU1NPQ19SRVEJCQkweDYKKyNkZWZpbmUgU1RBVEVfMwkJCQkweDcKKworLy89PT09PT0gdGhlIHN0YXRlIG9mIE1MTUUvSUJTUyBtb2R1bGUKKyNkZWZpbmUgSUJTU19KT0lOX1NZTkMJCTB4OAorI2RlZmluZSBJQlNTX0FVVEhfUkVRCQkweDkKKyNkZWZpbmUgSUJTU19BVVRIX0NIQU5MR0UJMHhhCisjZGVmaW5lIElCU1NfQVVUSF9XRVAJCTB4YgorI2RlZmluZSBJQlNTX0FVVEhfSU5ECQkweGMKKyNkZWZpbmUgSUJTU19TVEFURV8yCQkweGQKKworCisKKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vZGVwZW5kIG9uIEQ1QyhNQUMgdGltaW5nIGNvbnRyb2wgMDMgcmVnaXN0ZXIpOiBNYXhUeE1TRFVMaWZlVGltZSBkZWZhdWx0IDB4ODAwMDB1cworI2RlZmluZSBBVVRIX0ZBSUxfVElNRU9VVAkJNTUwCisjZGVmaW5lIEFTU09DX0ZBSUxfVElNRU9VVAkJNTUwCisjZGVmaW5lIFJFQVNTT0NfRkFJTF9USU1FT1VUCTU1MAorCisKKworLy8KKy8vIE1MTUUgdGFzayBnbG9iYWwgQ09OU1RBTlRTLCBTVFJVQ1RVUkUsIHZhcmlhYmxlcworLy8KKworCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLyAgZW51bV9SZXN1bHRDb2RlIC0tCisvLyAgUmVzdWx0IGNvZGUgcmV0dXJuZWQgZnJvbSBNTE1FIHRvIFNNRS4KKy8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLyBQRDQzIDIwMDMwODI5IE1vZGlmaWxlZAorLy8jZGVmaW5lCVNVQ0NFU1MJCQkJCQkJCTAKKyNkZWZpbmUgTUxNRV9TVUNDRVNTICAgICAgICAgICAgICAgICAgICAgICAgMCAvL2ZvbGxvdyBzcGVjLgorI2RlZmluZQlJTlZBTElEX1BBUkFNRVRFUlMJCQkJCTEgLy9Ob3QgZm9sbG93aW5nIHNwZWMuCisjZGVmaW5lCU5PVF9TVVBQUE9SVEVECQkJCQkJMgorI2RlZmluZQlUSU1FT1VUCQkJCQkJCQkzCisjZGVmaW5lCVRPT19NQU5ZX1NJTVVMVEFORU9VU19SRVFVRVNUUwkJNAorI2RlZmluZSBSRUZVU0VECQkJCQkJCQk1CisjZGVmaW5lCUJTU19BTFJFQURZX1NUQVJURURfT1JfSk9JTkVECQk2CisjZGVmaW5lCVRSQU5TTUlUX0ZSQU1FX0ZBSUwJCQkJCTcKKyNkZWZpbmUJTk9fQlNTX0ZPVU5ECQkJCQkJOAorI2RlZmluZSBSRVRSWQkJCQkJCQkJOQorI2RlZmluZSBHSVZFX1VQCQkJCQkJCQkxMAorCisKKyNkZWZpbmUgT1BFTl9BVVRICQkJCQkJCTAKKyNkZWZpbmUgU0hBUkVfQVVUSAkJCQkJCQkxCisjZGVmaW5lIEFOWV9BVVRICQkJCQkJCTIKKyNkZWZpbmUgV1BBX0FVVEgJCQkJCQkJMwkvL2ZvciBXUEEKKyNkZWZpbmUgV1BBUFNLX0FVVEgJCQkJCQkJNAorI2RlZmluZSBXUEFOT05FX0FVVEgJCQkJCQk1CisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8gYWRkZWQgYnkgd3MgMDQvMTkvMDQKKyNpZmRlZiBfV1BBMl8KKyNkZWZpbmUgV1BBMl9BVVRIICAgICAgICAgICAgICAgICAgICAgICAgICAgNi8vZm9yIFdQQTIKKyNkZWZpbmUgV1BBMlBTS19BVVRIICAgICAgICAgICAgICAgICAgICAgICAgNworI2VuZGlmIC8vZW5kIGRlZiBfV1BBMl8KKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvL2RlZmluZSB0aGUgbXNnIHR5cGUgb2YgTUxNRSBtb2R1bGUKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy9mcm9tIFNNRQorCisjZGVmaW5lIE1MTUVNU0dfQVVUSF9SRVEJCQkJMHgwYgorI2RlZmluZSBNTE1FTVNHX0RFQVVUSF9SRVEJCQkJMHgwYworI2RlZmluZSBNTE1FTVNHX0FTU09DX1JFUQkJCQkweDBkCisjZGVmaW5lIE1MTUVNU0dfUkVBU1NPQ19SRVEJCQkJMHgwZQorI2RlZmluZSBNTE1FTVNHX0RJU0FTU09DX1JFUQkJCTB4MGYKKyNkZWZpbmUgTUxNRU1TR19TVEFSVF9JQlNTX1JFUQkJCTB4MTAKKyNkZWZpbmUgTUxNRU1TR19JQlNTX05FVF9DRk0JCQkweDExCisKKy8vZnJvbSBSWCA6CisjZGVmaW5lIE1MTUVNU0dfUkNWX01MTUVGUkFNRQkJCTB4MjAKKyNkZWZpbmUgTUxNRU1TR19SQ1ZfQVNTT0NSU1AJCQkweDIyCisjZGVmaW5lIE1MTUVNU0dfUkNWX1JFQVNTT0NSU1AJCQkweDI0CisjZGVmaW5lIE1MTUVNU0dfUkNWX0RJU0FTU09DCQkJMHgyYgorI2RlZmluZSBNTE1FTVNHX1JDVl9BVVRICQkJCTB4MmMKKyNkZWZpbmUgTUxNRU1TR19SQ1ZfREVBVVRICQkJCTB4MmQKKworCisvL2Zyb20gVFggY2FsbGJhY2sKKyNkZWZpbmUgTUxNRU1TR19UWF9DQUxMQkFDSwkJCQkweDQwCisjZGVmaW5lIE1MTUVNU0dfQVNTT0NSRVFfQ0FMTEJBQ0sJCTB4NDEKKyNkZWZpbmUgTUxNRU1TR19SRUFTU09DUkVRX0NBTExCQUNLCQkweDQzCisjZGVmaW5lIE1MTUVNU0dfRElTQVNTT0NfQ0FMTEJBQ0sJCTB4NGEKKyNkZWZpbmUgTUxNRU1TR19BVVRIX0NBTExCQUNLCQkJMHg0YworI2RlZmluZSBNTE1FTVNHX0RFQVVUSF9DQUxMQkFDSwkJCTB4NGQKKworLy8jZGVmaW5lIE1MTUVNU0dfSk9JTl9GQUlMCQkJCTQKKy8vI2RlZmluZSBNTE1FTVNHX0FVVEhFTl9GQUlMCQkJMTgKKyNkZWZpbmUgTUxNRU1TR19USU1FT1VUCQkJCQkweDUwCisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy9HbG9iYWwgZGF0YSBzdHJ1Y3R1cmVzCisjZGVmaW5lIE1BWF9OVU1fVFhfTU1QRFUJMgorI2RlZmluZSBNQVhfTU1QRFVfU0laRQkJMTUxMgorI2RlZmluZSBNQVhfTlVNX1JYX01NUERVCTYKKworCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vTUFDUk8KKyNkZWZpbmUgYm9NTE1FX0luYWN0aXZlU3RhdGUoX0FBXykJKF9BQV8tPndTdGF0ZT09SU5BQ1RJVkUpCisjZGVmaW5lIGJvTUxNRV9JZGxlU2NhblN0YXRlKF9CQl8pCShfQkJfLT53U3RhdGU9PUlETEVfU0NBTikKKyNkZWZpbmUgYm9NTE1FX0ZvdW5kU1RBaW5mbyhfQ0NfKQkoX0NDXy0+d1N0YXRlPj1JRExFX1NDQU4pCisKK3R5cGVkZWYgc3RydWN0IF9NTE1FX0ZSQU1FCit7CisJLy9ORElTX1BBQ0tFVAkJTUxNRV9QYWNrZXQ7CisJUENIQVIJCQlwTU1QRFU7CisJdTE2CQkJbGVuOworCXU4CQkJRGF0YVR5cGU7CisJdTgJCQlJc0luVXNlZDsKKworCU9TX1NQSU5fTE9DSwlNTE1FU3BpbkxvY2s7CisKKyAgICB1OAkJVHhNTVBEVVtNQVhfTlVNX1RYX01NUERVXVtNQVhfTU1QRFVfU0laRV07CisJdTgJCVR4TU1QRFVJblVzZVsgKE1BWF9OVU1fVFhfTU1QRFUrMykgJiB+MHgwMyBdOworCisJdTE2CQl3TnVtVHhNTVBEVTsKKwl1MTYJCXdOdW1UeE1NUERVRGlzY2FyZGVkOworCisgICAgdTgJCVJ4TU1QRFVbTUFYX05VTV9SWF9NTVBEVV1bTUFYX01NUERVX1NJWkVdOworICAgIHU4CSAJU2F2ZVJ4QnVmU2xvdEluVXNlWyAoTUFYX05VTV9SWF9NTVBEVSszKSAmIH4weDAzIF07CisKKwl1MTYJCXdOdW1SeE1NUERVOworCXUxNgkJd051bVJ4TU1QRFVEaXNjYXJkZWQ7CisKKwl1MTYJCXdOdW1SeE1NUERVSW5NTE1FOyAJLy8gTnVtYmVyIG9mIHRoZSBSeCBNTVBEVQorCXUxNgkJcmVzZXJ2ZWRfMTsJCQkvLyAgaW4gTUxNRS4KKyAgICAgICAgICAgICAgICAgICAgCSAgICAgICAgICAgIC8vICBleGNsdWRpbmcgdGhlIGRpc2NhcmRlZAorfSBNTE1FX0ZSQU1FLCAqcHNNTE1FX0ZSQU1FOworCit0eXBlZGVmIHN0cnVjdCBfQVVUSFJFUSB7CisKKwl1OCAJcGVlck1BQ2FkZHJbTUFDX0FERFJfTEVOR1RIXTsKKwl1MTYJd0F1dGhBbGdvcml0aG07CisKK30gTUxNRV9BVVRIUkVRX1BBUkEsICpwc01MTUVfQVVUSFJFUV9QQVJBOworCitzdHJ1Y3QgX1JlYXNvbl9Db2RlIHsKKworCXU4CXBlZXJNQUNhZGRyW01BQ19BRERSX0xFTkdUSF07CisJdTE2CXdSZWFzb25Db2RlOworfTsKK3R5cGVkZWYgc3RydWN0IF9SZWFzb25fQ29kZSBNTE1FX0RFQVVUSFJFUV9QQVJBLCAqcHNNTE1FX0RFQVVUSFJFUV9QQVJBOwordHlwZWRlZiBzdHJ1Y3QgX1JlYXNvbl9Db2RlIE1MTUVfRElTQVNTT0NSRVFfUEFSQSwgKnBzTUxNRV9ESVNBU1NPQ1JFUV9QQVJBOworCit0eXBlZGVmIHN0cnVjdCBfQVNTT0NSRVEgeworICB1OCAgICAgICBQZWVyU1RBQWRkcltNQUNfQUREUl9MRU5HVEhdOworICB1MTYgICAgICAgQ2FwYWJpbGl0eUluZm87CisgIHUxNiAgICAgICBMaXN0ZW5JbnRlcnZhbDsKKworfV9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBNTE1FX0FTU09DUkVRX1BBUkEsICpwc01MTUVfQVNTT0NSRVFfUEFSQTsKKwordHlwZWRlZiBzdHJ1Y3QgX1JFQVNTT0NSRVEgeworICB1OCAgICAgICBOZXdBUEFkZHJbTUFDX0FERFJfTEVOR1RIXTsKKyAgdTE2ICAgICAgIENhcGFiaWxpdHlJbmZvOworICB1MTYgICAgICAgTGlzdGVuSW50ZXJ2YWw7CisKK31fX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgTUxNRV9SRUFTU09DUkVRX1BBUkEsICpwc01MTUVfUkVBU1NPQ1JFUV9QQVJBOworCit0eXBlZGVmIHN0cnVjdCBfTUxNRUNBTExCQUNLIHsKKworICB1OCAJKnBzRnJhbWVQdHI7CisgIHU4CQliUmVzdWx0OworCit9IE1MTUVfVFhDQUxMQkFDSywgKnBzTUxNRV9UWENBTExCQUNLOworCit0eXBlZGVmIHN0cnVjdCBfUlhEQVRBCit7CisJczMyCQlGcmFtZUxlbmd0aDsKKwl1OAlfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgKnBiRnJhbWVQdHI7CisKK31fX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgUlhEQVRBLCAqcHNSWERBVEE7CisKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvbWxtZXR4cnguYyBiL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL21sbWV0eHJ4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDZiMDkxZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL21sbWV0eHJ4LmMKQEAgLTAsMCArMSwxNTAgQEAKKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8gIE1vZHVsZSBOYW1lOgorLy8gICAgTUxNRVR4UnguQworLy8KKy8vICBEZXNjcmlwdGlvbjoKKy8vICAgIFRoZSBpbnRlcmZhY2UgYmV0d2VlbiBNRFMgKE1BQyBEYXRhIFNlcnZpY2UpIGFuZCBNTE1FLgorLy8KKy8vICBSZXZpc2lvbiBIaXN0b3J5OgorLy8gIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyAgICAgICAgICAyMDAyMDkgICAgICBVTjIwIEplbm5pZmVyIFh1CisvLyAgICAgICAgICAgICAgICAgICAgICBJbml0aWFsIFJlbGVhc2UKKy8vICAgICAgICAgIDIwMDIxMTA4ICAgIFBENDMgQXVzdGluIExpdQorLy8gICAgICAgICAgMjAwMzAxMTcgICAgUEQ0MyBBdXN0aW4gTGl1CisvLyAgICAgICAgICAgICAgICAgICAgICBEZWxldGVkIE1MTUVSZXR1cm5QYWNrZXQgYW5kIE1MTUVQcm9jVGhyZWFkKCkKKy8vCisvLyAgQ29weXJpZ2h0IChjKSAxOTk2LTIwMDIgV2luYm9uZCBFbGVjdHJvbmljcyBDb3JwLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjaW5jbHVkZSAib3NfY29tbW9uLmgiCisKK3ZvaWQgTUxNRVJlc2V0VHhSeChQV0IzMl9BREFQVEVSIEFkYXB0ZXIpCit7CisJczMyICAgICBpOworCisJLy8gUmVzZXQgdGhlIGludGVyZmFjZSBiZXR3ZWVuIE1EUyBhbmQgTUxNRQorCWZvciAoaSA9IDA7IGkgPCBNQVhfTlVNX1RYX01NUERVOyBpKyspCisJCUFkYXB0ZXItPnNNbG1lRnJhbWUuVHhNTVBEVUluVXNlW2ldID0gRkFMU0U7CisJZm9yIChpID0gMDsgaSA8IE1BWF9OVU1fUlhfTU1QRFU7IGkrKykKKwkJQWRhcHRlci0+c01sbWVGcmFtZS5TYXZlUnhCdWZTbG90SW5Vc2VbaV0gPSBGQUxTRTsKKworCUFkYXB0ZXItPnNNbG1lRnJhbWUud051bVJ4TU1QRFVJbk1MTUUgICA9IDA7CisJQWRhcHRlci0+c01sbWVGcmFtZS53TnVtUnhNTVBEVURpc2NhcmRlZCA9IDA7CisJQWRhcHRlci0+c01sbWVGcmFtZS53TnVtUnhNTVBEVSAgICAgICAgICA9IDA7CisJQWRhcHRlci0+c01sbWVGcmFtZS53TnVtVHhNTVBEVURpc2NhcmRlZCA9IDA7CisJQWRhcHRlci0+c01sbWVGcmFtZS53TnVtVHhNTVBEVSAgICAgICAgICA9IDA7CisJQWRhcHRlci0+c0xvY2FsUGFyYS5ib0NDQWJ1c3kgICAgPSBGQUxTRTsKKwlBZGFwdGVyLT5zTG9jYWxQYXJhLmlQb3dlclNhdmVNb2RlICAgICA9IFBXUl9BQ1RJVkU7ICAgICAvLyBQb3dlciBhY3RpdmUKK30KKworLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8JRnVuY3Rpb246CisvLyAgICBNTE1FR2V0TU1QRFVCdWZmZXIoKQorLy8KKy8vCURlc2NyaXB0aW9uOgorLy8gICAgUmV0dXJuIHRoZSBwb2ludGVyIHRvIGFuIGF2YWlsYWJsZSBkYXRhIGJ1ZmZlciB3aXRoCisvLyAgICB0aGUgc2l6ZSBNQVhfTU1QRFVfU0laRSBmb3IgYSBNTVBEVS4KKy8vCisvLyAgQXJndW1lbnRzOgorLy8gICAgQWRhcHRlciAgIC0gcG9pbnRlciB0byB0aGUgbWluaXBvcnQgYWRhcHRlciBjb250ZXh0LgorLy8KKy8vCVJldHVybiB2YWx1ZToKKy8vICAgIE5VTEwgICAgIDogTm8gYXZhaWxhYmxlIGRhdGEgYnVmZmVyIGF2YWlsYWJsZQorLy8gICAgT3RoZXJ3aXNlOiBQb2ludGVyIHRvIHRoZSBkYXRhIGJ1ZmZlcgorLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisvKiBGSVhNRTogU2hvdWxkIHRoaXMganVzdCBiZSByZXBsYWNlZCB3aXRoIGttYWxsb2MoKSBhbmQga2ZyZWUoKT8gKi8KK3U4ICpNTE1FR2V0TU1QRFVCdWZmZXIoUFdCMzJfQURBUFRFUiBBZGFwdGVyKQoreworCXMzMiBpOworCXU4ICpyZXR1cm5WYWw7CisKKwlmb3IgKGkgPSAwOyBpPCBNQVhfTlVNX1RYX01NUERVOyBpKyspIHsKKwkJaWYgKEFkYXB0ZXItPnNNbG1lRnJhbWUuVHhNTVBEVUluVXNlW2ldID09IEZBTFNFKQorCQkJYnJlYWs7CisJfQorCWlmIChpID49IE1BWF9OVU1fVFhfTU1QRFUpIHJldHVybiBOVUxMOworCisJcmV0dXJuVmFsID0gKHU4ICopJihBZGFwdGVyLT5zTWxtZUZyYW1lLlR4TU1QRFVbaV0pOworCUFkYXB0ZXItPnNNbG1lRnJhbWUuVHhNTVBEVUluVXNlW2ldID0gVFJVRTsKKworCXJldHVybiByZXR1cm5WYWw7Cit9CisKKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK3U4IE1MTUVTZW5kRnJhbWUoUFdCMzJfQURBUFRFUiBBZGFwdGVyLCB1OCAqcE1NUERVLCB1MTYgbGVuLCB1OCBEYXRhVHlwZSkKKy8qCURhdGFUeXBlIDogRlJBTUVfVFlQRV84MDJfMTFfTUFOQUdFTUVOVCwgRlJBTUVfVFlQRV84MDJfMTFfTUFOQUdFTUVOVF9DSEFMTEVOR0UsCisJCQkJRlJBTUVfVFlQRV84MDJfMTFfREFUQSAqLworeworCWlmIChBZGFwdGVyLT5zTWxtZUZyYW1lLklzSW5Vc2VkICE9IFBBQ0tFVF9GUkVFX1RPX1VTRSkgeworCQlBZGFwdGVyLT5zTWxtZUZyYW1lLndOdW1UeE1NUERVRGlzY2FyZGVkKys7CisJCXJldHVybiBGQUxTRTsKKwl9CisJQWRhcHRlci0+c01sbWVGcmFtZS5Jc0luVXNlZCA9IFBBQ0tFVF9DT01FX0ZST01fTUxNRTsKKworCS8vIEtlZXAgaW5mb3JtYXRpb24gZm9yIHNlbmRpbmcKKwlBZGFwdGVyLT5zTWxtZUZyYW1lLnBNTVBEVSA9IHBNTVBEVTsKKwlBZGFwdGVyLT5zTWxtZUZyYW1lLkRhdGFUeXBlID0gRGF0YVR5cGU7CisJLy8gbGVuIG11c3QgYmUgdGhlIGxhc3Qgc2V0dGluZyBkdWUgdG8gUVVFUllfU0laRV9TRUNPTkQgb2YgTWRzCisJQWRhcHRlci0+c01sbWVGcmFtZS5sZW4gPSBsZW47CisJQWRhcHRlci0+c01sbWVGcmFtZS53TnVtVHhNTVBEVSsrOworCisJLy8gSC9XIHdpbGwgZW50ZXIgcG93ZXIgc2F2ZSBieSBzZXQgdGhlIHJlZ2lzdGVyLiBTL1cgZG9uJ3Qgc2VuZCBudWxsIGZyYW1lCisJLy93aXRoIFBXUk1ndCBiaXQgZW5ibGVkIHRvIGVudGVyIHBvd2VyIHNhdmUgbm93LgorCisJLy8gVHJhbnNtaXQgTkRJUyBwYWNrZXQKKwlNZHNfVHgoQWRhcHRlcik7CisJcmV0dXJuIFRSVUU7Cit9CisKK3ZvaWQKK01MTUVfR2V0TmV4dFBhY2tldChQQURBUFRFUiBBZGFwdGVyLCBQREVTQ1JJUFRPUiBwRGVzKQoreworI2RlZmluZSBERVNDUklQVE9SX0FERF9CVUZGRVIoIF9ELCBfQSwgX1MgKSBcCit7XAorCV9ELT5JbnRlcm5hbFVzZWQgPSBfRC0+YnVmZmVyX3N0YXJ0X2luZGV4ICsgX0QtPmJ1ZmZlcl9udW1iZXI7IFwKKwlfRC0+SW50ZXJuYWxVc2VkICU9IE1BWF9ERVNDUklQVE9SX0JVRkZFUl9JTkRFWDsgXAorCV9ELT5idWZmZXJfYWRkcmVzc1sgX0QtPkludGVybmFsVXNlZCBdID0gX0E7IFwKKwlfRC0+YnVmZmVyX3NpemVbIF9ELT5JbnRlcm5hbFVzZWQgXSA9IF9TOyBcCisJX0QtPmJ1ZmZlcl90b3RhbF9zaXplICs9IF9TOyBcCisJX0QtPmJ1ZmZlcl9udW1iZXIrKztcCit9CisKKwlERVNDUklQVE9SX0FERF9CVUZGRVIoIHBEZXMsIEFkYXB0ZXItPnNNbG1lRnJhbWUucE1NUERVLCBBZGFwdGVyLT5zTWxtZUZyYW1lLmxlbiApOworCXBEZXMtPlR5cGUgPSBBZGFwdGVyLT5zTWxtZUZyYW1lLkRhdGFUeXBlOworfQorCit2b2lkIE1MTUVmcmVlTU1QRFVCdWZmZXIoUFdCMzJfQURBUFRFUiBBZGFwdGVyLCBQQ0hBUiBwRGF0YSkKK3sKKwlpbnQgaTsKKworCS8vIFJlY2xhaW0gdGhlIGRhdGEgYnVmZmVyCisJZm9yIChpID0gMDsgaSA8IE1BWF9OVU1fVFhfTU1QRFU7IGkrKykgeworCQlpZiAocERhdGEgPT0gKFBDSEFSKSYoQWRhcHRlci0+c01sbWVGcmFtZS5UeE1NUERVW2ldKSkKKwkJCWJyZWFrOworCX0KKwlpZiAoQWRhcHRlci0+c01sbWVGcmFtZS5UeE1NUERVSW5Vc2VbaV0pCisJCUFkYXB0ZXItPnNNbG1lRnJhbWUuVHhNTVBEVUluVXNlW2ldID0gRkFMU0U7CisJZWxzZSAgeworCQkvLyBTb21ldGhpbmcgd3JvbmcKKwkJLy8gUEQ0MyBBZGQgZGVidWcgY29kZSBoZXJlPz8/CisJfQorfQorCit2b2lkCitNTE1FX1NlbmRDb21wbGV0ZShQQURBUFRFUiBBZGFwdGVyLCB1OCBQYWNrZXRJRCwgdW5zaWduZWQgY2hhciBTZW5kT0spCit7CisJTUxNRV9UWENBTExCQUNLCVR4Q2FsbGJhY2s7CisKKyAgICAvLyBSZWNsYWltIHRoZSBkYXRhIGJ1ZmZlcgorCUFkYXB0ZXItPnNNbG1lRnJhbWUubGVuID0gMDsKKwlNTE1FZnJlZU1NUERVQnVmZmVyKCBBZGFwdGVyLCBBZGFwdGVyLT5zTWxtZUZyYW1lLnBNTVBEVSApOworCisKKwlUeENhbGxiYWNrLmJSZXN1bHQgPSBNTE1FX1NVQ0NFU1M7CisKKwkvLyBSZXR1cm4gcmVzb3VyY2UKKwlBZGFwdGVyLT5zTWxtZUZyYW1lLklzSW5Vc2VkID0gUEFDS0VUX0ZSRUVfVE9fVVNFOworfQorCisKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvbWxtZXR4cnhfZi5oIGIvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvbWxtZXR4cnhfZi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3NGUyMjUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9tbG1ldHhyeF9mLmgKQEAgLTAsMCArMSw1MiBAQAorLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLyBNTE1FVHhSeC5IIC0tCisvLworLy8gICBGdW5jdGlvbnMgZGVmaW5lZCBpbiBNTE1FVHhSeC5jLgorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMiBXaW5ib25kIEVsZWN0cmljcyBDb3JwLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjaWZuZGVmIF9NTE1FVFhSWF9ICisjZGVmaW5lIF9NTE1FVFhSWF9ICisKK3ZvaWQKK01MTUVQcm9jVGhyZWFkKAorICAgICBQV0IzMl9BREFQVEVSICAgIEFkYXB0ZXIKKwkpOworCit2b2lkIE1MTUVSZXNldFR4UngoIFBXQjMyX0FEQVBURVIgQWRhcHRlcik7CisKK3U4ICoKK01MTUVHZXRNTVBEVUJ1ZmZlcigKKyAgICAgUFdCMzJfQURBUFRFUiAgICBBZGFwdGVyCisgICApOworCit2b2lkIE1MTUVmcmVlTU1QRFVCdWZmZXIoIFBXQjMyX0FEQVBURVIgQWRhcHRlciwgIFBDSEFSIHBEYXRhKTsKKwordm9pZCBNTE1FX0dldE5leHRQYWNrZXQoICBQQURBUFRFUiBBZGFwdGVyLCAgUERFU0NSSVBUT1IgcERlcyApOwordTggTUxNRVNlbmRGcmFtZSggUFdCMzJfQURBUFRFUiBBZGFwdGVyLAorCQkJCQl1OAkqcE1NUERVLAorCQkJCQl1MTYJbGVuLAorCQkJCQkgdTgJRGF0YVR5cGUpOworCit2b2lkCitNTE1FX1NlbmRDb21wbGV0ZSggIFBXQjMyX0FEQVBURVIgQWRhcHRlciwgIHU4IFBhY2tldElELCAgdW5zaWduZWQgY2hhciBTZW5kT0sgKTsKKwordm9pZAorTUxNRVJjdkZyYW1lKAorICAgICBQV0IzMl9BREFQVEVSICAgIEFkYXB0ZXIsCisgICAgIFBSWEJVRkZFUiAgICAgICAgcFJ4QnVmZmVyQXJyYXksCisgICAgIHU4ICAgICAgICAgICAgTnVtT2ZCdWZmZXIsCisgICAgIHU4ICAgICAgICAgICAgUmV0dXJuU2xvdEluZGV4CisJKTsKKwordm9pZAorTUxNRVJldHVyblBhY2tldCgKKyAgICAgUFdCMzJfQURBUFRFUiAgICBBZGFwdGVyLAorICAgICBQVUNIQVIgICAgICAgICAgIHBSeEJ1ZmVyCisgICApOworI2lmZGVmIF9JQlNTX0JFQUNPTl9TRVFfU1RJQ0tfCitzOCBTZW5kQkNOdWxsRGF0YShQV0IzMl9BREFQVEVSIEFkYXB0ZXIsIHUxNiB3SWR4KTsKKyNlbmRpZgorCisjZW5kaWYKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvbXRvLmMgYi9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9tdG8uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZWY2MGU1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvbXRvLmMKQEAgLTAsMCArMSwxMjI5IEBACisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vICBNVE8uQyAtCisvLworLy8gIERlc2NyaXB0aW9uOgorLy8gICAgTUFDIFRocm91Z2hwdXQgT3B0aW1pemF0aW9uIGZvciBXODlDMzMgODAyLjExZyBXTEFOIFNUQS4KKy8vCisvLyAgICBUaGUgZm9sbG93aW5nIE1JQiBhdHRyaWJ1dGVzIG9yIGludGVybmFsIHZhcmlhYmxlcyB3aWxsIGJlIGFmZmVjdGVkCisvLyAgICB3aGlsZSB0aGUgTVRPIGlzIGJlaW5nIGV4ZWN1dGVkOgorLy8gICAgICAgZG90MTFGcmFnbWVudGF0aW9uVGhyZXNob2xkLAorLy8gICAgICAgZG90MTFSVFNUaHJlc2hvbGQsCisvLyAgICAgICB0cmFuc21pc3Npb24gcmF0ZSBhbmQgUExDUCBwcmVhbWJsZSB0eXBlLAorLy8gICAgICAgQ0NBIG1vZGUsCisvLyAgICAgICBhbnRlbm5hIGRpdmVyc2l0eS4KKy8vCisvLyAgUmV2aXNpb24gaGlzdG9yeToKKy8vICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gICAgICAgICAgIDIwMDMxMjI3ICBVTjIwIFBldGUgQ2hhbworLy8gICAgICAgICAgICAgICAgICAgICBGaXJzdCBkcmFmdAorLy8gIDIwMDMxMjI5ICAgICAgICAgICBUdXJibyAgICAgICAgICAgICAgICBjb3B5IGZyb20gUEQ0MworLy8gIDIwMDQwMjEwICAgICAgICAgICBLZXZpbiAgICAgICAgICAgICAgICByZXZpc2VkCisvLyAgQ29weXJpZ2h0IChjKSAyMDAzIFdpbmJvbmQgRWxlY3Ryb25pY3MgQ29ycC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisvLyBMQTIwMDQwMjEwX0RUTyBrZXZpbgorI2luY2x1ZGUgIm9zX2NvbW1vbi5oIgorCisvLyBEZWNsYXJlIFNRMyB0byByYXRlIGFuZCBmcmFnbWVudGF0aW9uIHRocmVzaG9sZCB0YWJsZQorLy8gRGVjbGFyZSBmcmFnbWVudGF0aW9uIHRocmVzaG9sZHMgdGFibGUKKyNkZWZpbmUgTVRPX01BWF9TUTNfTEVWRUxTICAgICAgICAgICAgICAgICAgICAgIDE0CisjZGVmaW5lIE1UT19NQVhfRlJBR19USF9MRVZFTFMgICAgICAgICAgICAgICAgICA1CisjZGVmaW5lIE1UT19NQVhfREFUQV9SQVRFX0xFVkVMUyAgICAgICAgICAgICAgICAxMgorCit1MTYgTVRPX0ZyYWdfVGhfVGJsW01UT19NQVhfRlJBR19USF9MRVZFTFNdID0KK3sKKyAgICAyNTYsIDM4NCwgNTEyLCA3NjgsIDE1MzYKK307CisKK3U4ICBNVE9fU1EzX0xldmVsW01UT19NQVhfU1EzX0xFVkVMU10gPQoreworICAgIDAsIDI2LCAzMCwgMzIsIDM0LCAzNSwgMzcsIDQyLCA0NCwgNDYsIDU0LCA2MiwgNzgsIDgxCit9OwordTggIE1UT19TUTN0b1JhdGVbTVRPX01BWF9TUTNfTEVWRUxTXSA9Cit7CisgICAgMCwgMSwgMSwgMiwgMiwgMywgNCwgNSwgNiwgNywgOCwgOSwgMTAsIDExCit9OwordTggIE1UT19TUTN0b0ZyYWdbTVRPX01BWF9TUTNfTEVWRUxTXSA9Cit7CisgICAgMCwgMiwgMiwgMywgMywgNCwgNCwgNCwgNCwgNCwgNCwgNCwgNCwgNAorfTsKKworLy8gT25lIEV4Y2hhbmdlIFRpbWUgdGFibGUKKy8vCit1MTYgTVRPX09uZV9FeGNoYW5nZV9UaW1lX1RibF9sW01UT19NQVhfRlJBR19USF9MRVZFTFNdW01UT19NQVhfREFUQV9SQVRFX0xFVkVMU10gPQoreworICAgIHsgMjU1NCwgMTQ3NCwgIDgyMiwgICAgMCwgICAgMCwgIDYzNiwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMH0sCisgICAgeyAzNTc4LCAxOTg2LCAxMDA5LCAgICAwLCAgICAwLCAgNzI5LCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwfSwKKyAgICB7IDQ2MDIsIDI0OTgsIDExOTUsICAgIDAsICAgIDAsICA4MjIsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDB9LAorICAgIHsgNjY1MCwgMzUyMiwgMTU2NywgICAgMCwgICAgMCwgMTAwOSwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMH0sCisgICAgezEyNzk0LCA2NTk0LCAyNjg0LCAgICAwLCAgICAwLCAxNTY3LCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwfQorfTsKKwordTE2IE1UT19PbmVfRXhjaGFuZ2VfVGltZV9UYmxfc1tNVE9fTUFYX0ZSQUdfVEhfTEVWRUxTXVtNVE9fTUFYX0RBVEFfUkFURV9MRVZFTFNdID0KK3sKKyAgICB7ICAgIDAsIDEyODIsICA2MzAsICA0MDQsICAyODgsICA0NDQsICAyMzIsICAxNzIsICAxNDQsICAxMTYsICAxMDAsICAgOTZ9LAorICAgIHsgICAgMCwgMTc5NCwgIDgxNywgIDU3MiwgIDQwMCwgIDUzNywgIDMxNiwgIDIyOCwgIDE4OCwgIDE0NCwgIDEyNCwgIDExNn0sCisgICAgeyAgICAwLCAyMzA2LCAxMDAzLCAgNzQ0LCAgNTE2LCAgNjMwLCAgNDAwLCAgMjg4LCAgMjI4LCAgMTcyLCAgMTQ0LCAgMTM2fSwKKyAgICB7ICAgIDAsIDMzMzAsIDEzNzUsIDEwODQsICA3NDQsICA4MTcsICA1NzIsICA0MDAsICAzMTYsICAyMjgsICAxODgsICAxNzJ9LAorICAgIHsgICAgMCwgNjQwMiwgMjQ5MiwgMjEwOCwgMTQyNCwgMTM3NSwgMTA4NCwgIDc0MCwgIDU3MiwgIDQwMCwgIDMxNiwgIDI4NH0KK307CisKKyNkZWZpbmUgTVRPX09ORV9FWENIQU5HRV9USU1FKHByZWFtYmxlX3R5cGUsIGZyYWdfdGhfbHZsLCBkYXRhX3JhdGVfbHZsKSBcCisgICAgICAgICAgICAocHJlYW1ibGVfdHlwZSkgPyAgIE1UT19PbmVfRXhjaGFuZ2VfVGltZV9UYmxfc1tmcmFnX3RoX2x2bF1bZGF0YV9yYXRlX2x2bF0gOiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1UT19PbmVfRXhjaGFuZ2VfVGltZV9UYmxfbFtmcmFnX3RoX2x2bF1bZGF0YV9yYXRlX2x2bF0KKworLy8gRGVjbGFyZSBkYXRhIHJhdGUgdGFibGUKKy8vVGhlIGZvbGxvd2luZyB0YWJsZSB3aWxsIGJlIGNoYW5nZWQgYXQgYW55dGltZSBpZiB0aGUgb3ByYXRpb24gcmF0ZSBzdXBwb3J0ZWQgYnkgQVAgZG9uJ3QKKy8vbWF0Y2ggdGhlIHRhYmxlCit1OCAgTVRPX0RhdGFfUmF0ZV9UYmxbTVRPX01BWF9EQVRBX1JBVEVfTEVWRUxTXSA9Cit7CisgICAgMiwgNCwgMTEsIDIyLCAxMiwgMTgsIDI0LCAzNiwgNDgsIDcyLCA5NiwgMTA4Cit9OworCisvL1RoZSBTdGFyZGFyZF9EYXRhX1JhdGVfVGJsIGFuZCBMZXZlbDJQZXJUYmwgdGFibGUgaXMgdXNlZCB0byBpbmRpcmVjdGx5IHJldHJlaXZlIFBFUgorLy9pbmZvcm1hdGlvbiBmcm9tIFJhdGVfUEVSX1RCTAorLy9UaGUgZGVmYXVsdCBzZXR0aW5ncyBpcyBBUCBjYW4gc3VwcG9ydCBmdWxsIHJhdGUgc2V0Lgorc3RhdGljIHU4ICBTdGFyZGFyZF9EYXRhX1JhdGVfVGJsW01UT19NQVhfREFUQV9SQVRFX0xFVkVMU10gPQoreworCTIsIDQsIDExLCAyMiwgMTIsIDE4LCAyNCwgMzYsIDQ4LCA3MiwgOTYsIDEwOAorfTsKK3N0YXRpYyB1OCAgTGV2ZWwyUGVyVGJsW01UT19NQVhfREFUQV9SQVRFX0xFVkVMU10gPQoreworCTAsIDEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDksIDEwLCAxMQorfTsKKy8vSG93IG1hbnkga2luZCBvZiB0eCByYXRlIGNhbiBiZSBzdXBwb3J0ZWQgYnkgQVAKKy8vRFRPIHdpbGwgY2hhbmdlIFJhdGUgYmV0d2VlbiBNVE9fRGF0YV9SYXRlX1RibFswXSBhbmQgTVRPX0RhdGFfUmF0ZV9UYmxbTVRPX0RhdGFSYXRlQXZhaWxhYmxlTGV2ZWwtMV0KK3N0YXRpYyB1OCAgTVRPX0RhdGFSYXRlQXZhaWxhYmxlTGV2ZWwgPSBNVE9fTUFYX0RBVEFfUkFURV9MRVZFTFM7CisvL1Ntb290aGVkIFBFUiB0YWJsZSBmb3IgZWFjaCBkaWZmZXJlbnQgUkFURSBiYXNlZCBvbiBwYWNrZXQgbGVuZ3RoIG9mIDE1MTQKK3N0YXRpYyBpbnQgUmF0ZV9QRVJfVEJMWzkxXVtNVE9fTUFYX0RBVEFfUkFURV9MRVZFTFNdID0geworLy8gICAgICAgIDFNICAgIDJNICAgIDUuNU0gIDExTSAgIDZNICAgIDlNICAgIDEyTSAgICAgMThNICAgIDI0TSAgICAzNk0gICAgNDhNICAgNTRNCisvKiAwJSAgKi97IDkzLCAgIDE3NywgIDQyMCwgIDUzOCwgIDY5MCwgIDc3NCwgIDEwMDEsICAxNDAxLCAgMTc2OCwgIDIzNTgsICAyODM4LCAgMzAzOX0sCisvKiAxJSAgKi97IDkyLCAgIDE3NiwgIDQxNiwgIDUzMywgIDY4MywgIDc2NywgIDk5MiwgICAxMzg5LCAgMTc1MiwgIDIzMzYsICAyODExLCAgMzAxMH0sCisvKiAyJSAgKi97IDkxLCAgIDE3NCwgIDQxMiwgIDUyOCwgIDY3NSwgIDc2MCwgIDk4MywgICAxMzc2LCAgMTczNSwgIDIzMTMsICAyNzgzLCAgMjk3OX0sCisvKiAzJSAgKi97IDkwLCAgIDE3MiwgIDQwNywgIDUyMywgIDY2NywgIDc1MywgIDk3MywgICAxMzYzLCAgMTcxOSwgIDIyOTAsICAyNzU1LCAgMjk0OH0sCisvKiA0JSAgKi97IDkwLCAgIDE3MCwgIDQwMywgIDUxOCwgIDY1OSwgIDc0NiwgIDk2NCwgICAxMzUwLCAgMTcwMSwgIDIyNjYsICAyNzI2LCAgMjkxNn0sCisvKiA1JSAgKi97IDg5LCAgIDE2OSwgIDM5OCwgIDUxMiwgIDY1MSwgIDczOCwgIDk1NCwgICAxMzM2LCAgMTY4NCwgIDIyNDIsICAyNjk2LCAgMjg4NH0sCisvKiA2JSAgKi97IDg4LCAgIDE2NywgIDM5NCwgIDUwNywgIDY0MywgIDczMSwgIDk0NCwgICAxMzIyLCAgMTY2NiwgIDIyMTcsICAyNjY1LCAgMjg1MX0sCisvKiA3JSAgKi97IDg3LCAgIDE2NSwgIDM4OSwgIDUwMiwgIDYzNSwgIDcyMywgIDkzNSwgICAxMzA4LCAgMTY0OCwgIDIxOTIsICAyNjM0LCAgMjgxN30sCisvKiA4JSAgKi97IDg2LCAgIDE2MywgIDM4NCwgIDQ5NywgIDYyNiwgIDcxNiwgIDkyNCwgICAxMjk0LCAgMTYyOSwgIDIxNjYsICAyNjAyLCAgMjc4Mn0sCisvKiA5JSAgKi97IDg1LCAgIDE2MSwgIDM4MCwgIDQ5MSwgIDYxOCwgIDcwOCwgIDkxNCwgICAxMjc5LCAgMTYxMSwgIDIxNDAsICAyNTcwLCAgMjc0N30sCisvKiAxMCUgKi97IDg0LCAgIDE2MCwgIDM3NSwgIDQ4NiwgIDYwOSwgIDcwMCwgIDkwNCwgICAxMjY1LCAgMTU5MSwgIDIxMTMsICAyNTM3LCAgMjcxMX0sCisvKiAxMSUgKi97IDgzLCAgIDE1OCwgIDM3MCwgIDQ4MCwgIDYwMCwgIDY5MiwgIDg5NCwgICAxMjUwLCAgMTU3MiwgIDIwODYsICAyNTAzLCAgMjY3NX0sCisvKiAxMiUgKi97IDgyLCAgIDE1NiwgIDM2NSwgIDQ3NSwgIDU5MiwgIDY4NCwgIDg4MywgICAxMjM0LCAgMTU1MiwgIDIwNTksICAyNDY5LCAgMjYzOH0sCisvKiAxMyUgKi97IDgxLCAgIDE1NCwgIDM2MCwgIDQ2OSwgIDU4MywgIDY3NiwgIDg3MiwgICAxMjE5LCAgMTUzMiwgIDIwMzEsICAyNDM1LCAgMjYwMH0sCisvKiAxNCUgKi97IDgwLCAgIDE1MiwgIDM1NSwgIDQ2NCwgIDU3NCwgIDY2OCwgIDg2MiwgICAxMjA0LCAgMTUxMiwgIDIwMDMsICAyNDAwLCAgMjU2Mn0sCisvKiAxNSUgKi97IDc5LCAgIDE1MCwgIDM1MCwgIDQ1OCwgIDU2NSwgIDY2MCwgIDg1MSwgICAxMTg4LCAgMTQ5MiwgIDE5NzQsICAyMzY1LCAgMjUyNH0sCisvKiAxNiUgKi97IDc4LCAgIDE0OCwgIDM0NSwgIDQ1MywgIDU1NiwgIDY1MiwgIDg0MCwgICAxMTcyLCAgMTQ3MSwgIDE5NDUsICAyMzI5LCAgMjQ4NX0sCisvKiAxNyUgKi97IDc3LCAgIDE0NiwgIDM0MCwgIDQ0NywgIDU0NywgIDY0MywgIDgyOSwgICAxMTU2LCAgMTQ1MCwgIDE5MTYsICAyMjkzLCAgMjQ0Nn0sCisvKiAxOCUgKi97IDc2LCAgIDE0NCwgIDMzNSwgIDQ0MSwgIDUzOCwgIDYzNSwgIDgxOCwgICAxMTQwLCAgMTQyOSwgIDE4ODcsICAyMjU2LCAgMjQwNn0sCisvKiAxOSUgKi97IDc1LCAgIDE0MywgIDMzMCwgIDQzNiwgIDUyOSwgIDYyNywgIDgwNywgICAxMTI0LCAgMTQwOCwgIDE4NTcsICAyMjE5LCAgMjM2Nn0sCisvKiAyMCUgKi97IDc0LCAgIDE0MSwgIDMyNSwgIDQzMCwgIDUyMCwgIDYxOCwgIDc5NSwgICAxMTA3LCAgMTM4NiwgIDE4MjcsICAyMTgyLCAgMjMyNn0sCisvKiAyMSUgKi97IDczLCAgIDEzOSwgIDMyMCwgIDQyNCwgIDUxMCwgIDYxMCwgIDc4NCwgICAxMDkxLCAgMTM2NSwgIDE3OTcsICAyMTQ1LCAgMjI4NX0sCisvKiAyMiUgKi97IDcyLCAgIDEzNywgIDMxNCwgIDQxOCwgIDUwMSwgIDYwMSwgIDc3MiwgICAxMDc0LCAgMTM0MywgIDE3NjYsICAyMTA3LCAgMjI0NH0sCisvKiAyMyUgKi97IDcxLCAgIDEzNSwgIDMwOSwgIDQxMiwgIDQ5MiwgIDU5MiwgIDc2MSwgICAxMDU3LCAgMTMyMSwgIDE3MzYsICAyMDY5LCAgMjIwM30sCisvKiAyNCUgKi97IDcwLCAgIDEzMywgIDMwNCwgIDQwNywgIDQ4MiwgIDU4NCwgIDc0OSwgICAxMDQwLCAgMTI5OSwgIDE3MDUsICAyMDMxLCAgMjE2MX0sCisvKiAyNSUgKi97IDY5LCAgIDEzMSwgIDI5OSwgIDQwMSwgIDQ3MywgIDU3NSwgIDczOCwgICAxMDIzLCAgMTI3NywgIDE2NzQsICAxOTkyLCAgMjEyMH0sCisvKiAyNiUgKi97IDY4LCAgIDEyOSwgIDI5MywgIDM5NSwgIDQ2NCwgIDU2NiwgIDcyNiwgICAxMDA2LCAgMTI1NCwgIDE2NDIsICAxOTUzLCAgMjA3OH0sCisvKiAyNyUgKi97IDY3LCAgIDEyNywgIDI4OCwgIDM4OSwgIDQ1NCwgIDU1NywgIDcxNCwgICA5ODksICAgMTIzMiwgIDE2MTEsICAxOTE1LCAgMjAzNX0sCisvKiAyOCUgKi97IDY2LCAgIDEyNSwgIDI4MywgIDM4MywgIDQ0NSwgIDU0OSwgIDcwMywgICA5NzIsICAgMTIwOSwgIDE1NzksICAxODc2LCAgMTk5M30sCisvKiAyOSUgKi97IDY1LCAgIDEyMywgIDI3OCwgIDM3NywgIDQzNiwgIDU0MCwgIDY5MSwgICA5NTUsICAgMTE4NywgIDE1NDgsICAxODM2LCAgMTk1MX0sCisvKiAzMCUgKi97IDY0LCAgIDEyMSwgIDI3MiwgIDM3MSwgIDQyNiwgIDUzMSwgIDY3OSwgICA5MzcsICAgMTE2NCwgIDE1MTYsICAxNzk3LCAgMTkwOH0sCisvKiAzMSUgKi97IDYzLCAgIDExOSwgIDI2NywgIDM2NSwgIDQxNywgIDUyMiwgIDY2NywgICA5MjAsICAgMTE0MSwgIDE0ODQsICAxNzU4LCAgMTg2Nn0sCisvKiAzMiUgKi97IDYyLCAgIDExNywgIDI2MiwgIDM1OSwgIDQwNywgIDUxMywgIDY1NSwgICA5MDIsICAgMTExOCwgIDE0NTMsICAxNzE5LCAgMTgyM30sCisvKiAzMyUgKi97IDYxLCAgIDExNSwgIDI1NiwgIDM1MywgIDM5OCwgIDUwNCwgIDY0MywgICA4ODUsICAgMTA5NSwgIDE0MjEsICAxNjc5LCAgMTc4MX0sCisvKiAzNCUgKi97IDYwLCAgIDExMywgIDI1MSwgIDM0NywgIDM4OSwgIDQ5NSwgIDYzMSwgICA4NjcsICAgMTA3MiwgIDEzODksICAxNjQwLCAgMTczOH0sCisvKiAzNSUgKi97IDU5LCAgIDExMSwgIDI0NiwgIDM0MSwgIDM3OSwgIDQ4NiwgIDYxOSwgICA4NTAsICAgMTA0OSwgIDEzNTcsICAxNjAwLCAgMTY5NX0sCisvKiAzNiUgKi97IDU4LCAgIDEwOCwgIDI0MCwgIDMzNSwgIDM3MCwgIDQ3NywgIDYwNywgICA4MzIsICAgMTAyNywgIDEzMjUsICAxNTYxLCAgMTY1M30sCisvKiAzNyUgKi97IDU3LCAgIDEwNiwgIDIzNSwgIDMyOSwgIDM2MSwgIDQ2OCwgIDU5NSwgICA4MTUsICAgMTAwNCwgIDEyOTMsICAxNTIyLCAgMTYxMH0sCisvKiAzOCUgKi97IDU2LCAgIDEwNCwgIDIzMCwgIDMyMywgIDM1MSwgIDQ1OSwgIDU4NCwgICA3OTcsICAgOTgxLCAgIDEyNjEsICAxNDgzLCAgMTU2OH0sCisvKiAzOSUgKi97IDU1LCAgIDEwMiwgIDIyNCwgIDMxNywgIDM0MiwgIDQ1MCwgIDU3MiwgICA3ODAsICAgOTU4LCAgIDEyMzAsICAxNDQzLCAgMTUyNn0sCisvKiA0MCUgKi97IDU0LCAgIDEwMCwgIDIxOSwgIDMxMSwgIDMzMywgIDQ0MSwgIDU2MCwgICA3NjIsICAgOTM1LCAgIDExOTgsICAxNDA0LCAgMTQ4NH0sCisvKiA0MSUgKi97IDUzLCAgIDk4LCAgIDIxNCwgIDMwNSwgIDMyNCwgIDQzMiwgIDU0OCwgICA3NDQsICAgOTEyLCAgIDExNjYsICAxMzY2LCAgMTQ0Mn0sCisvKiA0MiUgKi97IDUyLCAgIDk2LCAgIDIwOSwgIDI5OSwgIDMxNSwgIDQyMywgIDUzNiwgICA3MjcsICAgODg5LCAgIDExMzUsICAxMzI3LCAgMTQwMH0sCisvKiA0MyUgKi97IDUxLCAgIDk0LCAgIDIwMywgIDI5MywgIDMwNiwgIDQxNCwgIDUyNCwgICA3MDksICAgODY2LCAgIDExMDQsICAxMjg5LCAgMTM1OH0sCisvKiA0NCUgKi97IDUwLCAgIDkyLCAgIDE5OCwgIDI4NywgIDI5NywgIDQwNSwgIDUxMiwgICA2OTIsICAgODQ0LCAgIDEwNzIsICAxMjUwLCAgMTMxN30sCisvKiA0NSUgKi97IDQ5LCAgIDkwLCAgIDE5MywgIDI4MSwgIDI4OCwgIDM5NiwgIDUwMCwgICA2NzUsICAgODIxLCAgIDEwNDEsICAxMjEyLCAgMTI3Nn0sCisvKiA0NiUgKi97IDQ4LCAgIDg4LCAgIDE4OCwgIDI3NSwgIDI3OSwgIDM4NywgIDQ4OCwgICA2NTcsICAgNzk5LCAgIDEwMTEsICAxMTc0LCAgMTIzNn0sCisvKiA0NyUgKi97IDQ3LCAgIDg2LCAgIDE4MywgIDI2OSwgIDI3MSwgIDM3OCwgIDQ3NiwgICA2NDAsICAgNzc3LCAgIDk4MCwgICAxMTM3LCAgMTE5NX0sCisvKiA0OCUgKi97IDQ2LCAgIDg0LCAgIDE3OCwgIDI2MiwgIDI2MiwgIDM2OSwgIDQ2NCwgICA2MjMsICAgNzU0LCAgIDk0OSwgICAxMTAwLCAgMTE1NX0sCisvKiA0OSUgKi97IDQ1LCAgIDgyLCAgIDE3MywgIDI1NiwgIDI1NCwgIDM2MCwgIDQ1MiwgICA2MDYsICAgNzMyLCAgIDkxOSwgICAxMDYzLCAgMTExNn0sCisvKiA1MCUgKi97IDQ0LCAgIDgwLCAgIDE2OCwgIDI1MSwgIDI0NSwgIDM1MSwgIDQ0MSwgICA1ODksICAgNzEwLCAgIDg4OSwgICAxMDI2LCAgMTA3Nn0sCisvKiA1MSUgKi97IDQzLCAgIDc4LCAgIDE2MywgIDI0NSwgIDIzNywgIDM0MiwgIDQyOSwgICA1NzIsICAgNjg5LCAgIDg2MCwgICA5OTAsICAgMTAzOH0sCisvKiA1MiUgKi97IDQyLCAgIDc2LCAgIDE1OCwgIDIzOSwgIDIyOCwgIDMzMywgIDQxNywgICA1NTUsICAgNjY3LCAgIDgzMCwgICA5NTUsICAgOTk5fSwKKy8qIDUzJSAqL3sgNDEsICAgNzQsICAgMTUzLCAgMjMzLCAgMjIwLCAgMzI0LCAgNDA2LCAgIDUzOCwgICA2NDUsICAgODAxLCAgIDkxOSwgICA5NjF9LAorLyogNTQlICoveyA0MCwgICA3MiwgICAxNDgsICAyMjcsICAyMTIsICAzMTUsICAzOTQsICAgNTIyLCAgIDYyNCwgICA3NzMsICAgODg0LCAgIDkyNH0sCisvKiA1NSUgKi97IDM5LCAgIDcwLCAgIDE0MywgIDIyMSwgIDIwNCwgIDMwNywgIDM4MywgICA1MDUsICAgNjAzLCAgIDc0NCwgICA4NTAsICAgODg3fSwKKy8qIDU2JSAqL3sgMzgsICAgNjgsICAgMTM4LCAgMjE1LCAgMTk2LCAgMjk4LCAgMzcxLCAgIDQ4OSwgICA1ODIsICAgNzE2LCAgIDgxNiwgICA4NTF9LAorLyogNTclICoveyAzNywgICA2NywgICAxMzQsICAyMDksICAxODksICAyODksICAzNjAsICAgNDczLCAgIDU2MiwgICA2ODgsICAgNzgzLCAgIDgxNX0sCisvKiA1OCUgKi97IDM2LCAgIDY1LCAgIDEyOSwgIDIwMywgIDE4MSwgIDI4MSwgIDM0OSwgICA0NTcsICAgNTQxLCAgIDY2MSwgICA3NTAsICAgNzgwfSwKKy8qIDU5JSAqL3sgMzUsICAgNjMsICAgMTI0LCAgMTk3LCAgMTc0LCAgMjcyLCAgMzM4LCAgIDQ0MSwgICA1MjEsICAgNjM0LCAgIDcxNywgICA3NDV9LAorLyogNjAlICoveyAzNCwgICA2MSwgICAxMjAsICAxOTIsICAxNjYsICAyNjQsICAzMjcsICAgNDI1LCAgIDUwMSwgICA2MDgsICAgNjg2LCAgIDcxMn0sCisvKiA2MSUgKi97IDMzLCAgIDU5LCAgIDExNSwgIDE4NiwgIDE1OSwgIDI1NSwgIDMxNiwgICA0MDksICAgNDgyLCAgIDU4MiwgICA2NTUsICAgNjc4fSwKKy8qIDYyJSAqL3sgMzIsICAgNTcsICAgMTExLCAgMTgwLCAgMTUyLCAgMjQ3LCAgMzA1LCAgIDM5NCwgICA0NjIsICAgNTU2LCAgIDYyNCwgICA2NDZ9LAorLyogNjMlICoveyAzMSwgICA1NSwgICAxMDcsICAxNzQsICAxNDUsICAyMzgsICAyOTQsICAgMzc5LCAgIDQ0MywgICA1MzEsICAgNTk0LCAgIDYxNH0sCisvKiA2NCUgKi97IDMwLCAgIDUzLCAgIDEwMiwgIDE2OSwgIDEzOCwgIDIzMCwgIDI4MywgICAzNjQsICAgNDI1LCAgIDUwNiwgICA1NjUsICAgNTgzfSwKKy8qIDY1JSAqL3sgMjksICAgNTIsICAgOTgsICAgMTYzLCAgMTMyLCAgMjIyLCAgMjczLCAgIDM0OSwgICA0MDYsICAgNDgyLCAgIDUzNiwgICA1NTN9LAorLyogNjYlICoveyAyOCwgICA1MCwgICA5NCwgICAxNTgsICAxMjUsICAyMTQsICAyNjIsICAgMzM0LCAgIDM4OCwgICA0NTksICAgNTA4LCAgIDUyM30sCisvKiA2NyUgKi97IDI3LCAgIDQ4LCAgIDkwLCAgIDE1MiwgIDExOSwgIDIwNiwgIDI1MiwgICAzMjAsICAgMzcwLCAgIDQzNiwgICA0ODEsICAgNDk1fSwKKy8qIDY4JSAqL3sgMjYsICAgNDYsICAgODYsICAgMTQ3LCAgMTEzLCAgMTk4LCAgMjQyLCAgIDMwNiwgICAzNTMsICAgNDEzLCAgIDQ1NSwgICA0Njd9LAorLyogNjklICoveyAyNiwgICA0NCwgICA4MiwgICAxNDEsICAxMDcsICAxOTAsICAyMzEsICAgMjkyLCAgIDMzNiwgICAzOTEsICAgNDI5LCAgIDQ0MH0sCisvKiA3MCUgKi97IDI1LCAgIDQzLCAgIDc4LCAgIDEzNiwgIDEwMSwgIDE4MiwgIDIyMSwgICAyNzgsICAgMzE5LCAgIDM3MCwgICA0MDUsICAgNDE0fSwKKy8qIDcxJSAqL3sgMjQsICAgNDEsICAgNzQsICAgMTMwLCAgOTUsICAgMTc0LCAgMjEyLCAgIDI2NSwgICAzMDMsICAgMzUwLCAgIDM4MSwgICAzODl9LAorLyogNzIlICoveyAyMywgICAzOSwgICA3MSwgICAxMjUsICA5MCwgICAxNjcsICAyMDIsICAgMjUyLCAgIDI4NywgICAzMjksICAgMzU4LCAgIDM2NX0sCisvKiA3MyUgKi97IDIyLCAgIDM3LCAgIDY3LCAgIDExOSwgIDg1LCAgIDE1OSwgIDE5MiwgICAyMzksICAgMjcxLCAgIDMxMCwgICAzMzUsICAgMzQyfSwKKy8qIDc0JSAqL3sgMjEsICAgMzYsICAgNjMsICAgMTE0LCAgODAsICAgMTUxLCAgMTgzLCAgIDIyNiwgICAyNTYsICAgMjkxLCAgIDMxNCwgICAzMjB9LAorLyogNzUlICoveyAyMCwgICAzNCwgICA2MCwgICAxMDksICA3NSwgICAxNDQsICAxNzQsICAgMjE0LCAgIDI0MSwgICAyNzMsICAgMjk0LCAgIDI5OH0sCisvKiA3NiUgKi97IDE5LCAgIDMyLCAgIDU3LCAgIDEwNCwgIDcwLCAgIDEzNywgIDE2NCwgICAyMDIsICAgMjI3LCAgIDI1NiwgICAyNzQsICAgMjc4fSwKKy8qIDc3JSAqL3sgMTgsICAgMzEsICAgNTMsICAgOTksICAgNjYsICAgMTMwLCAgMTU1LCAgIDE5MCwgICAyMTMsICAgMjM5LCAgIDI1NiwgICAyNTl9LAorLyogNzglICoveyAxNywgICAyOSwgICA1MCwgICA5NCwgICA2MiwgICAxMjIsICAxNDYsICAgMTc4LCAgIDIwMCwgICAyMjMsICAgMjM4LCAgIDI0MX0sCisvKiA3OSUgKi97IDE2LCAgIDI4LCAgIDQ3LCAgIDg5LCAgIDU4LCAgIDExNSwgIDEzOCwgICAxNjcsICAgMTg3LCAgIDIwOCwgICAyMjIsICAgMjI1fSwKKy8qIDgwJSAqL3sgMTYsICAgMjYsICAgNDQsICAgODQsICAgNTQsICAgMTA5LCAgMTI5LCAgIDE1NiwgICAxNzUsICAgMTk0LCAgIDIwNiwgICAyMDl9LAorLyogODElICoveyAxNSwgICAyNCwgICA0MSwgICA3OSwgICA1MCwgICAxMDIsICAxMjEsICAgMTQ2LCAgIDE2MywgICAxODAsICAgMTkyLCAgIDE5NH0sCisvKiA4MiUgKi97IDE0LCAgIDIzLCAgIDM5LCAgIDc0LCAgIDQ3LCAgIDk1LCAgIDExMywgICAxMzYsICAgMTUxLCAgIDE2NywgICAxNzgsICAgMTgxfSwKKy8qIDgzJSAqL3sgMTMsICAgMjEsICAgMzYsICAgNjksICAgNDQsICAgODksICAgMTA1LCAgIDEyNiwgICAxNDAsICAgMTU1LCAgIDE2NiwgICAxNjl9LAorLyogODQlICoveyAxMiwgICAyMCwgICAzMywgICA2NCwgICA0MSwgICA4MiwgICA5NywgICAgMTE2LCAgIDEzMCwgICAxNDQsICAgMTU1LCAgIDE1OH0sCisvKiA4NSUgKi97IDExLCAgIDE5LCAgIDMxLCAgIDYwLCAgIDM5LCAgIDc2LCAgIDg5LCAgICAxMDcsICAgMTIwLCAgIDEzNCwgICAxNDUsICAgMTQ5fSwKKy8qIDg2JSAqL3sgMTEsICAgMTcsICAgMjksICAgNTUsICAgMzYsICAgNzAsICAgODIsICAgIDk4LCAgICAxMTAsICAgMTI1LCAgIDEzNiwgICAxNDB9LAorLyogODclICoveyAxMCwgICAxNiwgICAyNiwgICA1MSwgICAzNCwgICA2NCwgICA3NSwgICAgOTAsICAgIDEwMiwgICAxMTYsICAgMTI4LCAgIDEzM30sCisvKiA4OCUgKi97IDksICAgIDE0LCAgIDI0LCAgIDQ2LCAgIDMyLCAgIDU4LCAgIDY4LCAgICA4MSwgICAgOTMsICAgIDEwOCwgICAxMjEsICAgMTI4fSwKKy8qIDg5JSAqL3sgOCwgICAgMTMsICAgMjIsICAgNDIsICAgMzEsICAgNTIsICAgNjEsICAgIDc0LCAgICA4NiwgICAgMTAyLCAgIDExNiwgICAxMjR9LAorLyogOTAlICoveyA3LCAgICAxMiwgICAyMSwgICAzNywgICAyOSwgICA0NiwgICA1NCwgICAgNjYsICAgIDc5LCAgICA5NiwgICAgMTEyLCAgIDEyMX0KK307CisKKyNkZWZpbmUgUlNTSUJVRl9OVU0gMTAKKyNkZWZpbmUgUlNTSTJSQVRFX1NJWkUgOQorCitzdGF0aWMgVFhSRVRSWV9SRUMgVHhSYXRlUmVjPXtNVE9fTUFYX0RBVEFfUkFURV9MRVZFTFMgLSAxLCAwfTsgICAvL25ldyByZWNvcmQ9PlR4UmF0ZVJlYworc3RhdGljIGludCBUeFJldHJ5UmF0ZTsKKy8vc3RhdGljIGludCBTUTMsIEJTU19QS19DTlQsIE5JRExFU0xPVCwgU0xPVF9DTlQsIElOVEVSRl9DTlQsIEdBUF9DTlQsIERTX0VWTTsKK3N0YXRpYyBzMzIgUlNTSUJ1ZltSU1NJQlVGX05VTV09ey03MCwgLTcwLCAtNzAsIC03MCwgLTcwLCAtNzAsIC03MCwgLTcwLCAtNzAsIC03MH07CitzdGF0aWMgczMyIFJTU0lTbW9vdGhlZD0tNzAwOworc3RhdGljIGludCBSU1NJQnVmSW5kZXg9MDsKK3N0YXRpYyB1OCBtYXhfcnNzaV9yYXRlOworc3RhdGljIGludCByYXRlX3RibFsxM10gPSB7MCwxLDIsNSwxMSw2LDksMTIsMTgsMjQsMzYsNDgsNTR9OworLy9bV0tDSEVOXXN0YXRpYyBjb3JlX2RhdGFfdCAqcE1UT2NvcmVfZGF0YT1OVUxMOworCitzdGF0aWMgaW50IFRvdGFsVHhQa3QgPSAwOworc3RhdGljIGludCBUb3RhbFR4UGt0UmV0cnkgPSAwOworc3RhdGljIGludCBUeFBrdFBlckFudFszXSA9IHswLDAsMH07CitzdGF0aWMgaW50IFJYUlNTSUFOVFszXSA9ey03MCwtNzAsLTcwfTsKK3N0YXRpYyBpbnQgVHhQa3RSZXRyeVBlckFudFszXSA9IHswLDAsMH07CisvL3N0YXRpYyBpbnQgVHhEb21pbmF0ZUZsYWc9RkFMU0U7CitzdGF0aWMgdTggb2xkX2FudGVubmFbNF09ezEgLDAgLDEgLDB9Oworc3RhdGljIGludCByZXRyeXJhdGVfcmVjW01UT19NQVhfREFUQV9SQVRFX0xFVkVMU107Ly90aGlzIHJlY29yZCB0aGUgcmV0cnkgcmF0ZSBhdCBkaWZmZXJlbnQgZGF0YSByYXRlCisKK3N0YXRpYyBpbnQgUGVyaW9kVG90YWxUeFBrdCA9IDA7CitzdGF0aWMgaW50IFBlcmlvZFRvdGFsVHhQa3RSZXRyeSA9IDA7CisKK3R5cGVkZWYgc3RydWN0Cit7CisJczMyIFJTU0k7CisJdTggIFR4UmF0ZTsKK31SU1NJMlJBVEU7CisKK3N0YXRpYyBSU1NJMlJBVEUgUlNTSTJSYXRlVGJsW1JTU0kyUkFURV9TSVpFXSA9Cit7CisJey03NDAsIDEwOH0sICAvLyA1NE0KKwl7LTc2MCwgOTZ9LCAgLy8gNDhNCisJey04MjAsIDcyfSwgIC8vIDM2TQorCXstODUwLCA0OH0sICAvLyAyNE0KKwl7LTg3MCwgMzZ9LCAgLy8gMThNCisJey04OTAsIDI0fSwgIC8vIDEyTQorCXstOTAwLCAxMn0sICAvLyA2TQorCXstOTIwLCAxMX0sIC8vIDUuNU0KKwl7LTk1MCwgNH0sIC8vIDJNCit9Oworc3RhdGljIHU4IHVudG9nZ2xlY291bnQ7CitzdGF0aWMgdTggbGFzdF9yYXRlX2FudDsgLy90aGlzIGlzIHVzZWQgZm9yIGFudGVubmEgYmFja29mZi1oaAorCit1OAlib1NwYXJzZVR4VHJhZmZpYyA9IEZBTFNFOworCit2b2lkIE1UT19Jbml0KE1UT19GVU5DX0lOUFVUKTsKK3ZvaWQgQW50ZW5uYVRvZ2dsZUluaXRpYXRvcihNVE9fRlVOQ19JTlBVVCk7Cit2b2lkIEFudGVubmFUb2dnbGVTdGF0ZShNVE9fRlVOQ19JTlBVVCk7Cit2b2lkIFR4UHdyQ29udHJvbChNVE9fRlVOQ19JTlBVVCk7Cit2b2lkIEdldEZyZXNoQW50ZW5uYURhdGEoTVRPX0ZVTkNfSU5QVVQpOwordm9pZCBUeFJhdGVSZWR1Y3Rpb25DdHJsKE1UT19GVU5DX0lOUFVUKTsKKy8qKiAxLjEuMzEuMTAwMCBUdXJibyBtb2RpZnkgKi8KKy8vdm9pZCBNVE9fU2V0RFRPUmF0ZVJhbmdlKGludCB0eXBlKTsKK3ZvaWQgTVRPX1NldERUT1JhdGVSYW5nZShNVE9fRlVOQ19JTlBVVCwgdTggKnBSYXRlQXJyYXksIHU4IEFycmF5U2l6ZSk7Cit2b2lkIE1UT19TZXRUeENvdW50KE1UT19GVU5DX0lOUFVULCB1OCB0MCwgdTggaW5kZXgpOwordm9pZCBNVE9fVHhGYWlsZWQoTVRPX0ZVTkNfSU5QVVQpOwordm9pZCBTbW9vdGhSU1NJKHMzMiBuZXdfcnNzaSk7Cit2b2lkIGhhbF9nZXRfZHRvX3BhcmEoTVRPX0ZVTkNfSU5QVVQsIGNoYXIgKmJ1ZmZlcik7Cit1OCBDYWxjTmV3UmF0ZShNVE9fRlVOQ19JTlBVVCwgdTggb2xkX3JhdGUsIHUzMiByZXRyeV9jbnQsIHUzMiB0eF9mcmFnX2NudCk7Cit1OCBHZXRNYXhSYXRlTGV2ZWxGcm9tUlNTSSh2b2lkKTsKK3U4IE1UT19HZXRUeEZhbGxiYWNrUmF0ZShNVE9fRlVOQ19JTlBVVCk7CitpbnQgRGl2aWRlKGludCBhLCBpbnQgYik7Cit2b2lkIG11bHRpYWdjKE1UT19GVU5DX0lOUFVULCB1OCBoaWdoX2dhaW5fbW9kZSk7CisKKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLyAgTVRPX0luaXQgLS0KKy8vCisvLyAgRGVzY3JpcHRpb246CisvLyAgICBTZXQgRFRPIFR4IFJhdGUgU2NvcGUgYmVjYXVzZSBkaWZmZXJlbnQgQVAgY291bGQgaGF2ZSBkaWZmZXJlbnQgUmF0ZSBzZXQuCisvLyAgICBBZnRlciBvdXIgc3RhaW9uIGpvaW4gd2l0aCBBUCwgTE0gY29yZSB3aWxsIGNhbGwgdGhpcyBmdW5jdGlvbiB0byBpbml0aWFsaXplCisvLyAgICBUeCBSYXRlIHRhYmxlLgorLy8KKy8vICBBcmd1bWVudHM6CisvLyAgICBwUmF0ZUFycmF5ICAgICAgLSBUaGUgcG9pbnRlciB0byB0aGUgVHggUmF0ZSBBcnJheSBieSB0aGUgZm9sbG93aW5nIG9yZGVyCisvLyAgICAgICAgICAgICAgICAgICAgLSAyLCA0LCAxMSwgMjIsIDEyLCAxOCwgMjQsIDM2LCA0OCwgNzIsIDk2LCAxMDgKKy8vICAgICAgICAgICAgICAgICAgICAtIERUTyB3b24ndCBjaGVjayB3aGV0aGVyIHJhdGUgb3JkZXIgaXMgaW52YWxpZCBvciBub3QKKy8vICAgIEFycmF5U2l6ZSAgICAgICAtIFRoZSBhcnJheSBzaXplIHRvIGluZGljYXRlIGhvdyBtYW55IHR4IHJhdGUgd2UgY2FuIGNob29zZQorLy8KKy8vICBzYW1wbGUgY29kZToKKy8vCXsKKy8vCQl1OCBSYXRlQXJyYXlbNF0gPSB7MiwgNCwgMTEsIDIyfTsKKy8vCQlNVE9fU2V0RFRPUmF0ZVJhbmdlKFJhdGVBcnJheSwgNCk7CisvLwl9CisvLworLy8gIFJldHVybiBWYWx1ZToKKy8vICAgIE5vbmUKKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQordm9pZCBNVE9fU2V0RFRPUmF0ZVJhbmdlKE1UT19GVU5DX0lOUFVULHU4ICpwUmF0ZUFycmF5LCB1OCBBcnJheVNpemUpCit7CisJdTgJaSwgaj0wOworCisJZm9yKGk9MDtpPEFycmF5U2l6ZTtpKyspCisJeworCQlpZihwUmF0ZUFycmF5W2ldID09IDIyKQorCQkJYnJlYWs7CisJfQorCWlmKGkgPCBBcnJheVNpemUpIC8vd2UgbmVlZCBhZGp1c3QgdGhlIG9yZGVyIG9mIHJhdGUgbGlzdCBiZWNhdXNlIDExTWJwcyByYXRlIGV4aXN0cworCXsKKwkJZm9yKDtpPjA7aS0tKQorCQl7CisJCQlpZihwUmF0ZUFycmF5W2ktMV0gPD0gMTEpCisJCQkJYnJlYWs7CisJCQlwUmF0ZUFycmF5W2ldID0gcFJhdGVBcnJheVtpLTFdOworCQl9CisJCXBSYXRlQXJyYXlbaV0gPSAyMjsKKwkJTVRPX09GRE1fUkFURV9MRVZFTCgpID0gaTsKKwl9CisJZWxzZQorCXsKKwkJZm9yKGk9MDsgaTxBcnJheVNpemU7IGkrKykKKwkJeworCQkJaWYgKHBSYXRlQXJyYXlbaV0gPj0gMTIpCisJCQkJYnJlYWs7CisJCX0KKwkJTVRPX09GRE1fUkFURV9MRVZFTCgpID0gaTsKKwl9CisKKwlmb3IoaT0wO2k8QXJyYXlTaXplO2krKykKKwl7CisJCU1UT19EYXRhX1JhdGVfVGJsW2ldID0gcFJhdGVBcnJheVtpXTsKKwkJZm9yKDtqPE1UT19NQVhfREFUQV9SQVRFX0xFVkVMUztqKyspCisJCXsKKwkJCWlmKFN0YXJkYXJkX0RhdGFfUmF0ZV9UYmxbal0gPT0gcFJhdGVBcnJheVtpXSkKKwkJCQlicmVhazsKKwkJfQorCQlMZXZlbDJQZXJUYmxbaV0gPSBqOworCQkjaWZkZWYgX1BFX0RUT19EVU1QXworCQlXQkRFQlVHKCgiW01UT106T3AgUmF0ZVslZF06ICVkXG4iLGksIE1UT19EYXRhX1JhdGVfVGJsW2ldKSk7CisJCSNlbmRpZgorCX0KKwlNVE9fRGF0YVJhdGVBdmFpbGFibGVMZXZlbCA9IEFycmF5U2l6ZTsKKwlpZiggTVRPX0RBVEEoKS5SYXRlUG9saWN5ICkgLy8gMCBtZWFucyB0aGF0IG5vIHJlZ2lzdHJ5IHNldHRpbmcKKwl7CisJCWlmKCBNVE9fREFUQSgpLlJhdGVQb2xpY3kgPT0gMSApCisJCQlUeFJhdGVSZWMudHhfcmF0ZSA9IDA7CS8vYXNjZW50CisJCWVsc2UKKwkJCVR4UmF0ZVJlYy50eF9yYXRlID0gTVRPX0RhdGFSYXRlQXZhaWxhYmxlTGV2ZWwgLTEgOwkvL2Rlc2NlbnQKKwl9CisJZWxzZQorCXsKKwkJaWYoIE1UT19JTklUVFhSQVRFX01PREUgKQorCQkJVHhSYXRlUmVjLnR4X3JhdGUgPSAwOwkvL2FzY2VudAorCQllbHNlCisJCQlUeFJhdGVSZWMudHhfcmF0ZSA9IE1UT19EYXRhUmF0ZUF2YWlsYWJsZUxldmVsIC0xIDsJLy9kZXNjZW50CisJfQorCVR4UmF0ZVJlYy50eF9yZXRyeV9yYXRlID0gMDsKKwkvL3NldCBkZWZhdWx0IHJhdGUgZm9yIGluaXRpYWwgdXNlCisJTVRPX1JBVEVfTEVWRUwoKSA9IFR4UmF0ZVJlYy50eF9yYXRlOworCU1UT19GQUxMQkFDS19SQVRFX0xFVkVMKCkgPSBNVE9fUkFURV9MRVZFTCgpOworfQorCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8gIE1UT19Jbml0IC0tCisvLworLy8gIERlc2NyaXB0aW9uOgorLy8gICAgSW5pdGlhbGl6ZSBNVE8gcGFyYW1ldGVycy4KKy8vCisvLyAgICBUaGlzIGZ1bmN0aW9uIHNob3VsZCBiZSBpbnZva2VkIGR1cmluZyBzeXN0ZW0gaW5pdGlhbGl6YXRpb24uCisvLworLy8gIEFyZ3VtZW50czoKKy8vICAgIEFkYXB0ZXIgICAgICAtIFRoZSBwb2ludGVyIHRvIHRoZSBNaW5pcG9ydCBBZGFwdGVyIENvbnRleHQKKy8vCisvLyAgUmV0dXJuIFZhbHVlOgorLy8gICAgTm9uZQorLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cit2b2lkIE1UT19Jbml0KE1UT19GVU5DX0lOUFVUKQoreworICAgIGludCBpOworCS8vV0JERUJVRygoIltNVE9dIC0+IE1UT19Jbml0KClcbiIpKTsKKwkvL1tXS0NIRU5dcE1UT2NvcmVfZGF0YSA9IHBjb3JlX2RhdGE7CisvLyAyMDA0MDUxMCBUdXJibyBhZGQgZm9yIGdsb2JhbCB2YXJpYWJsZQorICAgIE1UT19UTVJfQ05UKCkgICAgICAgPSAwOworICAgIE1UT19UT0dHTEVfU1RBVEUoKSAgPSBUT0dHTEVfU1RBVEVfSURMRTsKKyAgICBNVE9fVFhfUkFURV9SRURVQ1RJT05fU1RBVEUoKSA9IFJBVEVfQ0hHU1RBVEVfSURMRTsKKyAgICBNVE9fQkFDS09GRl9UTVIoKSAgID0gMDsKKyAgICBNVE9fTEFTVF9SQVRFKCkgICAgID0gMTE7CisgICAgTVRPX0NPX0VGRklDRU5UKCkgICA9IDA7CisKKyAgICAvL01UT19USF9GSVhBTlQoKSAgICAgPSBNVE9fREVGQVVMVF9USF9GSVhBTlQ7CisgICAgTVRPX1RIX0NOVCgpICAgICAgICA9IE1UT19ERUZBVUxUX1RIX0NOVDsKKyAgICBNVE9fVEhfU1EzKCkgICAgICAgID0gTVRPX0RFRkFVTFRfVEhfU1EzOworICAgIE1UT19USF9JRExFX1NMT1QoKSAgPSBNVE9fREVGQVVMVF9USF9JRExFX1NMT1Q7CisgICAgTVRPX1RIX1BSX0lOVEVSRigpICA9IE1UT19ERUZBVUxUX1RIX1BSX0lOVEVSRjsKKworICAgIE1UT19UTVJfQUdJTkcoKSAgICAgPSBNVE9fREVGQVVMVF9UTVJfQUdJTkc7CisgICAgTVRPX1RNUl9QRVJJT0RJQygpICA9IE1UT19ERUZBVUxUX1RNUl9QRVJJT0RJQzsKKworICAgIC8vW1dLQ0hFTl1NVE9fQ0NBX01PREVfU0VUVVAoKT0gKHU4KSBoYWxfZ2V0X2NjYV9tb2RlKE1UT19IQUwoKSk7CisgICAgLy9bV0tDSEVOXU1UT19DQ0FfTU9ERSgpICAgICAgPSBNVE9fQ0NBX01PREVfU0VUVVAoKTsKKworICAgIC8vTVRPX1BSRUFNQkxFX1RZUEUoKSA9IE1UT19QUkVBTUJMRV9MT05HOworICAgIE1UT19QUkVBTUJMRV9UWVBFKCkgPSBNVE9fUFJFQU1CTEVfU0hPUlQ7ICAgLy8gZm9yIHRlc3QKKworICAgIE1UT19BTlRfU0VMKCkgICAgICAgPSBoYWxfZ2V0X2FudGVubmFfbnVtYmVyKE1UT19IQUwoKSk7CisgICAgTVRPX0FOVF9NQUMoKSAgICAgICA9IE1UT19BTlRfU0VMKCk7CisgICAgTVRPX0NOVF9BTlQoMCkgICAgICA9IDA7CisgICAgTVRPX0NOVF9BTlQoMSkgICAgICA9IDA7CisgICAgTVRPX1NRX0FOVCgwKSAgICAgICA9IDA7CisgICAgTVRPX1NRX0FOVCgxKSAgICAgICA9IDA7CisgICAgTVRPX0FOVF9ESVZFUlNJVFkoKSA9IE1UT19BTlRFTk5BX0RJVkVSU0lUWV9PTjsKKyAgICAvL0NhcmRTZXRfQW50ZW5uYURpdmVyc2l0eShBZGFwdGVyLCBNVE9fQU5UX0RJVkVSU0lUWSgpKTsKKyAgICAvL1BMTUVTZXRBbnRlbm5hRGl2ZXJzaXR5KCBBZGFwdGVyLCBNVE9fQU5UX0RJVkVSU0lUWSgpKTsKKworICAgIE1UT19BR0lOR19USU1FT1VUKCkgPSAwOy8vTVRPX1RNUl9BR0lORygpIC8gTVRPX1RNUl9QRVJJT0RJQygpOworCisgICAgLy8gVGhlIGZvbGxvd2luZyBwYXJhbWV0ZXJzIHNob3VsZCBiZSBpbml0aWFsaXplZCB0byB0aGUgdmFsdWVzIHNldCBieSB1c2VyCisgICAgLy8KKyAgICAvL01UT19SQVRFX0xFVkVMKCkgICAgICAgICAgICA9IDEwOworICAgIE1UT19SQVRFX0xFVkVMKCkgICAgICAgICAgICA9IDA7CisJTVRPX0ZBTExCQUNLX1JBVEVfTEVWRUwoKQk9IE1UT19SQVRFX0xFVkVMKCk7CisgICAgTVRPX0ZSQUdfVEhfTEVWRUwoKSAgICAgICAgID0gNDsKKyAgICAvKiogMS4xLjIzLjEwMDAgVHVyYm8gbW9kaWZ5IGZyb20gLTEgdG8gKzEKKwlNVE9fUlRTX1RIUkVTSE9MRCgpICAgICAgICAgPSBNVE9fRlJBR19USCgpIC0gMTsKKyAgICBNVE9fUlRTX1RIUkVTSE9MRF9TRVRVUCgpICAgPSBNVE9fRlJBR19USCgpIC0gMTsKKwkqLworCU1UT19SVFNfVEhSRVNIT0xEKCkgICAgICAgICA9IE1UT19GUkFHX1RIKCkgKyAxOworICAgIE1UT19SVFNfVEhSRVNIT0xEX1NFVFVQKCkgICA9IE1UT19GUkFHX1RIKCkgKyAxOworICAgIC8vIDEuMS4yMy4xMDAwIFR1cmJvIGFkZCBmb3IgbXRvIGNoYW5nZSBwcmVhbWJsZSBmcm9tIDAgdG8gMQorCU1UT19SQVRFX0NIQU5HRV9FTkFCTEUoKSAgICA9IDE7CisgICAgTVRPX0ZSQUdfQ0hBTkdFX0VOQUJMRSgpICAgID0gMDsgICAgICAgICAgLy8gMS4xLjI5LjEwMDAgVHVyYm8gYWRkIGRvbid0IHN1cHBvcnQgZnJhZworCS8vVGhlIGRlZmF1bHQgdmFsdWQgb2YgQU5URElWX0RFRkFVTFRfT04gd2lsbCBiZSBkZWNpZGVkIGJ5IEVFUFJPTQorCS8vI2lmZGVmIEFOVERJVl9ERUZBVUxUX09OCisgICAgLy9NVE9fQU5UX0RJVkVSU0lUWV9FTkFCTEUoKSAgPSAxOworCS8vI2Vsc2UKKyAgICAvL01UT19BTlRfRElWRVJTSVRZX0VOQUJMRSgpICA9IDA7CisJLy8jZW5kaWYKKyAgICBNVE9fUE9XRVJfQ0hBTkdFX0VOQUJMRSgpICAgPSAxOworCU1UT19QUkVBTUJMRV9DSEFOR0VfRU5BQkxFKCk9IDE7CisgICAgTVRPX1JUU19DSEFOR0VfRU5BQkxFKCkgICAgID0gMDsgICAgICAgICAgLy8gMS4xLjI5LjEwMDAgVHVyYm8gYWRkIGRvbid0IHN1cHBvcnQgZnJhZworICAgIC8vIDIwMDQwNTEyIFR1cmJvIGFkZAorCS8vb2xkX2FudGVubmFbMF0gPSAxOworCS8vb2xkX2FudGVubmFbMV0gPSAwOworCS8vb2xkX2FudGVubmFbMl0gPSAxOworCS8vb2xkX2FudGVubmFbM10gPSAwOworCWZvciAoaT0wO2k8TVRPX01BWF9EQVRBX1JBVEVfTEVWRUxTO2krKykKKwkJcmV0cnlyYXRlX3JlY1tpXT01OworCisJTVRPX1RYRkxPV0NPVU5UKCkgPSAwOworCS8vLS0tLS0tLS0tIERUTyB0aHJlc2hvbGQgcGFyYW1ldGVycyAtLS0tLS0tLS0tLS0tCisJLy9NVE9QQVJBX1BFUklPRElDX0NIRUNLX0NZQ0xFKCkgPSA1MDsKKwlNVE9QQVJBX1BFUklPRElDX0NIRUNLX0NZQ0xFKCkgPSAxMDsKKwlNVE9QQVJBX1JTU0lfVEhfRk9SX0FOVERJVigpID0gMTA7CisJTVRPUEFSQV9UWENPVU5UX1RIX0ZPUl9DQUxDX1JBVEUoKSA9IDUwOworCU1UT1BBUkFfVFhSQVRFX0lOQ19USCgpCT0gMTA7CisJTVRPUEFSQV9UWFJBVEVfREVDX1RIKCkgPSAzMDsKKwlNVE9QQVJBX1RYUkFURV9FUV9USCgpID0gNDA7CisJTVRPUEFSQV9UWFJBVEVfQkFDS09GRigpID0gMTI7CisJTVRPUEFSQV9UWFJFVFJZUkFURV9SRURVQ0UoKSA9IDY7CisJaWYgKCBNVE9fVFhQT1dFUl9GUk9NX0VFUFJPTSA9PSAweGZmKQorCXsKKwkJc3dpdGNoKCBNVE9fSEFMKCktPnBoeV90eXBlKQorCQl7CisJCQljYXNlIFJGX0FJUk9IQV8yMjMwOgorCQkJY2FzZSBSRl9BSVJPSEFfMjIzMFM6IC8vIDIwMDYwNDIwIEFkZCB0aGlzCisJCQkJTVRPUEFSQV9UWFBPV0VSX0lOREVYKCkgPSA0NjsgLy8gTUFYLTggLy8gQEAgT25seSBmb3IgQUwgMjIzMAorCQkJCWJyZWFrOworCQkJY2FzZSBSRl9BSVJPSEFfNzIzMDoKKwkJCQlNVE9QQVJBX1RYUE9XRVJfSU5ERVgoKSA9IDQ5OworCQkJCWJyZWFrOworCQkJY2FzZSBSRl9XQl8yNDI6CisJCQkJTVRPUEFSQV9UWFBPV0VSX0lOREVYKCkgPSAxMDsKKwkJCQlicmVhazsKKwkJCWNhc2UgUkZfV0JfMjQyXzE6CisJCQkJTVRPUEFSQV9UWFBPV0VSX0lOREVYKCkgPSAyNDsgLy8gLT4xMCAyMDA2MDMxNi4xIG1vZGlmeQorCQkJCWJyZWFrOworCQl9CisJfQorCWVsc2UJLy9mb2xsb3cgdGhlIHNldHRpbmcgZnJvbSBFRVBST00KKwkJTVRPUEFSQV9UWFBPV0VSX0lOREVYKCkgPSBNVE9fVFhQT1dFUl9GUk9NX0VFUFJPTTsKKwloYWxfc2V0X3JmX3Bvd2VyKE1UT19IQUwoKSwgKHU4KU1UT1BBUkFfVFhQT1dFUl9JTkRFWCgpKTsKKwkvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisJLy8gRm9yIFJTU0kgdHVybmluZyAyMDA2MDgwOC40IENhbmNlbCBsb2FkIGZyb20gRUVQUk9NCisJTVRPX0RBVEEoKS5SU1NJX2hpZ2ggPSAtNDE7CisJTVRPX0RBVEEoKS5SU1NJX2xvdyA9IC02MDsKK30KKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0vLworc3RhdGljIHUzMiBEVE9fUnhfSW5mb1sxM11bM107CitzdGF0aWMgdTMyIERUT19SeENSQ0ZhaWxfSW5mb1sxM11bM107CitzdGF0aWMgdTMyIEFudGVubmFUb2dnbGVCa29mZlRpbWVyPTU7Cit0eXBlZGVmIHN0cnVjdHsKKwlpbnQgUnhSYXRlOworCWludCBSeFJhdGVQa3RzOworCWludCBpbmRleDsKK31SWFJBVEVfQU5UOworUlhSQVRFX0FOVCBSeFJhdGVQZWFrQW50WzNdOworCisjZGVmaW5lIEFOVDAgICAgMAorI2RlZmluZSBBTlQxICAgIDEKKyNkZWZpbmUgT0xEX0FOVCAyCisKK3ZvaWQgU2VhcmNoUGVha1J4UmF0ZShpbnQgaW5kZXgpCit7CisJaW50IGk7CisJUnhSYXRlUGVha0FudFtpbmRleF0uUnhSYXRlUGt0cz0wOworCS8vRmluZCBvdXQgdGhlIGJlc3QgcnggcmF0ZSB3aGljaCBpcyB1c2VkIG9uIGRpZmZlcmVudCBhbnRlbm5hCisJZm9yKGk9MTtpPDEzO2krKykKKwl7CisJCWlmKERUT19SeF9JbmZvW2ldW2luZGV4XSA+ICh1MzIpIFJ4UmF0ZVBlYWtBbnRbaW5kZXhdLlJ4UmF0ZVBrdHMpCisJCXsKKwkJCVJ4UmF0ZVBlYWtBbnRbaW5kZXhdLlJ4UmF0ZVBrdHMgPSBEVE9fUnhfSW5mb1tpXVtpbmRleF07CisJCQlSeFJhdGVQZWFrQW50W2luZGV4XS5SeFJhdGUgPSByYXRlX3RibFtpXTsKKwkJCVJ4UmF0ZVBlYWtBbnRbaW5kZXhdLmluZGV4ID0gaTsKKwkJfQorCX0KK30KKwordm9pZCBSZXNldERUT19SeEluZm8oaW50IGluZGV4LCBNVE9fRlVOQ19JTlBVVCkKK3sKKwlpbnQgaTsKKworCSNpZmRlZiBfUEVfRFRPX0RVTVBfCisJV0JERUJVRygoIlJlc2V0RFRPcnhcbiIpKTsKKwkjZW5kaWYKKworCWZvcihpPTA7aTwxMztpKyspCisJCURUT19SeF9JbmZvW2ldW2luZGV4XSA9IE1UT19IQUwoKS0+cnhfb2tfY291bnRbaV07CisKKwlmb3IoaT0wO2k8MTM7aSsrKQorCQlEVE9fUnhDUkNGYWlsX0luZm9baV1baW5kZXhdID0gTVRPX0hBTCgpLT5yeF9lcnJfY291bnRbaV07CisKKwlUb3RhbFR4UGt0ID0gMDsKKwlUb3RhbFR4UGt0UmV0cnkgPSAwOworfQorCit2b2lkIEdldERUT19SeEluZm8oaW50IGluZGV4LCBNVE9fRlVOQ19JTlBVVCkKK3sKKwlpbnQgaTsKKworCSNpZmRlZiBfUEVfRFRPX0RVTVBfCisJV0JERUJVRygoIkdldERUT3J4XG4iKSk7CisJI2VuZGlmCisKKwkvL1BERUJVRygoIltNVE9dOkRUT19SeF9JbmZvWyVkXT0lZCwgcnhfb2tfY291bnQ9JWRcbiIsIGluZGV4LCBEVE9fUnhfSW5mb1swXVtpbmRleF0sIHBod19kYXRhLT5yeF9va19jb3VudFswXSkpOworCWZvcihpPTA7aTwxMztpKyspCisJCURUT19SeF9JbmZvW2ldW2luZGV4XSA9IGFicyhNVE9fSEFMKCktPnJ4X29rX2NvdW50W2ldIC0gRFRPX1J4X0luZm9baV1baW5kZXhdKTsKKwlpZihEVE9fUnhfSW5mb1swXVtpbmRleF09PTApIERUT19SeF9JbmZvWzBdW2luZGV4XSA9IDE7CisKKwlmb3IoaT0wO2k8MTM7aSsrKQorCQlEVE9fUnhDUkNGYWlsX0luZm9baV1baW5kZXhdID0gTVRPX0hBTCgpLT5yeF9lcnJfY291bnRbaV0gLSBEVE9fUnhDUkNGYWlsX0luZm9baV1baW5kZXhdOworCisJVHhQa3RQZXJBbnRbaW5kZXhdID0gVG90YWxUeFBrdDsKKwlUeFBrdFJldHJ5UGVyQW50W2luZGV4XSA9IFRvdGFsVHhQa3RSZXRyeTsKKwlUb3RhbFR4UGt0ID0gMDsKKwlUb3RhbFR4UGt0UmV0cnkgPSAwOworfQorCit2b2lkIE91dHB1dERlYnVnSW5mbyhpbnQgaW5kZXgxLCBpbnQgaW5kZXgyKQoreworCSNpZmRlZiBfUEVfRFRPX0RVTVBfCisJV0JERUJVRygoIltISERUT106VG90YWwgUnggKCVkKVx0XHQoJWQpIFxuICIsIERUT19SeF9JbmZvWzBdW2luZGV4MV0sIERUT19SeF9JbmZvWzBdW2luZGV4Ml0pKTsKKyAgICBXQkRFQlVHKCgiW0hIRFRPXTpSRUNFSVZFIFJTU0k6ICglZClcdFx0KCVkKSBcbiAiLCBSWFJTU0lBTlRbaW5kZXgxXSwgUlhSU1NJQU5UW2luZGV4Ml0pKTsKKwlXQkRFQlVHKCgiW0hIRFRPXTpUWCBwYWNrZXQgY29ycmVjdCByYXRlOiAoJWQpJSVcdFx0KCVkKSUlIFxuICIsRGl2aWRlKFR4UGt0UGVyQW50W2luZGV4MV0qMTAwLFR4UGt0UmV0cnlQZXJBbnRbaW5kZXgxXSksIERpdmlkZShUeFBrdFBlckFudFtpbmRleDJdKjEwMCxUeFBrdFJldHJ5UGVyQW50W2luZGV4Ml0pKSk7CisJI2VuZGlmCisJeworCQlpbnQgdG1wMSwgdG1wMjsKKwkJI2lmZGVmIF9QRV9EVE9fRFVNUF8KKwkJV0JERUJVRygoIltISERUT106VG90YWwgVHggKCVkKVx0XHQoJWQpIFxuICIsIFR4UGt0UGVyQW50W2luZGV4MV0sIFR4UGt0UGVyQW50W2luZGV4Ml0pKTsKKwkJV0JERUJVRygoIltISERUT106VG90YWwgVHggcmV0cnkgKCVkKVx0XHQoJWQpIFxuICIsIFR4UGt0UmV0cnlQZXJBbnRbaW5kZXgxXSwgVHhQa3RSZXRyeVBlckFudFtpbmRleDJdKSk7CisJCSNlbmRpZgorCQl0bXAxID0gVHhQa3RQZXJBbnRbaW5kZXgxXSArIERUT19SeF9JbmZvWzBdW2luZGV4MV07CisJCXRtcDIgPSBUeFBrdFBlckFudFtpbmRleDJdICsgRFRPX1J4X0luZm9bMF1baW5kZXgyXTsKKwkJI2lmZGVmIF9QRV9EVE9fRFVNUF8KKwkJV0JERUJVRygoIltISERUT106VG90YWwgVHgrUlggKCVkKVx0XHQoJWQpIFxuICIsIHRtcDEsIHRtcDIpKTsKKwkJI2VuZGlmCisJfQorfQorCit1bnNpZ25lZCBjaGFyIFR4RG9taW5hdGUoaW50IGluZGV4KQoreworCWludCB0bXA7CisKKwl0bXAgPSBUeFBrdFBlckFudFtpbmRleF0gKyBEVE9fUnhfSW5mb1swXVtpbmRleF07CisKKwlpZihEaXZpZGUoVHhQa3RQZXJBbnRbaW5kZXhdKjEwMCwgdG1wKSA+IDQwKQorCQlyZXR1cm4gVFJVRTsKKwllbHNlCisJCXJldHVybiBGQUxTRTsKK30KKwordW5zaWduZWQgY2hhciBDbXBUeFJldHJ5UmF0ZShpbnQgaW5kZXgxLCBpbnQgaW5kZXgyKQoreworCWludCB0eF9yZXRyeV9yYXRlMSwgdHhfcmV0cnlfcmF0ZTI7CisJdHhfcmV0cnlfcmF0ZTEgPSBEaXZpZGUoKFR4UGt0UmV0cnlQZXJBbnRbaW5kZXgxXSAtIFR4UGt0UGVyQW50W2luZGV4MV0pKjEwMCwgVHhQa3RSZXRyeVBlckFudFtpbmRleDFdKTsKKwl0eF9yZXRyeV9yYXRlMiA9IERpdmlkZSgoVHhQa3RSZXRyeVBlckFudFtpbmRleDJdIC0gVHhQa3RQZXJBbnRbaW5kZXgyXSkqMTAwLCBUeFBrdFJldHJ5UGVyQW50W2luZGV4Ml0pOworCSNpZmRlZiBfUEVfRFRPX0RVTVBfCisJV0JERUJVRygoIltNVE9dOlR4UmV0cnkgQW50MDogKCVkJSUpICBBbnQxOiAoJWQlJSkgXG4gIiwgdHhfcmV0cnlfcmF0ZTEsIHR4X3JldHJ5X3JhdGUyKSk7CisJI2VuZGlmCisKKwlpZih0eF9yZXRyeV9yYXRlMSA+IHR4X3JldHJ5X3JhdGUyKQorCQlyZXR1cm4gVFJVRTsKKwllbHNlCisJCXJldHVybiBGQUxTRTsKK30KKwordm9pZCBHZXRGcmVzaEFudGVubmFEYXRhKE1UT19GVU5DX0lOUFVUKQoreworICAgIHU4ICAgICAgeDsKKworCXggPSBoYWxfZ2V0X2FudGVubmFfbnVtYmVyKE1UT19IQUwoKSk7CisJLy9oYWxfZ2V0X2Jzc19wa19jbnQoTVRPX0hBTCgpKTsKKwkvL2hhbF9nZXRfZXN0X3NxMyhNVE9fSEFMKCksIDEpOworCW9sZF9hbnRlbm5hWzBdID0geDsKKwkvL2lmIHRoaXMgaXMgdGhlIGZ1bmN0aW9uIGZvciB0aW1lcgorCVJlc2V0RFRPX1J4SW5mbyh4LCBNVE9fRlVOQ19JTlBVVF9EQVRBKTsKKwlpZihBbnRlbm5hVG9nZ2xlQmtvZmZUaW1lcikKKwkJCUFudGVubmFUb2dnbGVCa29mZlRpbWVyLS07CisJaWYgKGFicyhsYXN0X3JhdGVfYW50LU1UT19SQVRFX0xFVkVMKCkpPjEpICAvL2JhY2tvZmYgdGltZXIgcmVzZXQKKwkJQW50ZW5uYVRvZ2dsZUJrb2ZmVGltZXI9MDsKKworCWlmIChNVE9fQU5UX0RJVkVSU0lUWSgpICE9IE1UT19BTlRFTk5BX0RJVkVSU0lUWV9PTiB8fAorCQlNVE9fQU5UX0RJVkVSU0lUWV9FTkFCTEUoKSAhPSAxKQorCUFudGVubmFUb2dnbGVCa29mZlRpbWVyPTE7CisJI2lmZGVmIF9QRV9EVE9fRFVNUF8KKwlXQkRFQlVHKCgiW0hIRFRPXToqKmxhc3QgZGF0YSByYXRlPSVkLG5vdyBkYXRhIHJhdGU9JWQqKmFudGVubmEgdG9nZ2xlIHRpbWVyPSVkIixsYXN0X3JhdGVfYW50LE1UT19SQVRFX0xFVkVMKCksQW50ZW5uYVRvZ2dsZUJrb2ZmVGltZXIpKTsKKwkjZW5kaWYKKwlsYXN0X3JhdGVfYW50PU1UT19SQVRFX0xFVkVMKCk7CisJaWYoQW50ZW5uYVRvZ2dsZUJrb2ZmVGltZXI9PTApCisJeworCQlNVE9fVE9HR0xFX1NUQVRFKCkgPSBUT0dHTEVfU1RBVEVfV0FJVDA7CisJCSNpZmRlZiBfUEVfRFRPX0RVTVBfCisJCVdCREVCVUcoKCJbSEhEVE9dOj09PXN0YXRlIGlzIHN0YXJ0aW5nPT1mb3IgYW50ZW5uYSB0b2dnbGU9PT0iKSk7CisJCSNlbmRpZgorCX0KKwllbHNlCisJCU1UT19UT0dHTEVfU1RBVEUoKSA9IFRPR0dMRV9TVEFURV9JRExFOworCisJaWYgKChNVE9fQkFDS09GRl9UTVIoKSE9MCkmJihNVE9fUkFURV9MRVZFTCgpPk1UT19EYXRhUmF0ZUF2YWlsYWJsZUxldmVsIC0gMykpCisJeworCQlNVE9fVE9HR0xFX1NUQVRFKCkgPSBUT0dHTEVfU1RBVEVfSURMRTsKKwkJI2lmZGVmIF9QRV9EVE9fRFVNUF8KKwkJV0JERUJVRygoIltISERUT106PT09dGhlIGRhdGEgcmF0ZSBpcyAlZCAoZ29vZClhbmQgd2lsbCBub3QgdG9vZ2xlICA9PT0iLE1UT19EQVRBX1JBVEUoKT4+MSkpOworCQkjZW5kaWYKKwl9CisKKworfQorCitpbnQgV0JfUENSWzJdOyAvL3BhY2tldCBjb3JyZWN0IHJhdGUKKwordm9pZCBBbnRlbm5hVG9nZ2xlU3RhdGUoTVRPX0ZVTkNfSU5QVVQpCit7CisgICAgaW50IGRlY2lkZWFudGZsYWcgPSAwOworCXU4ICAgICAgeDsKKwlzMzIgICAgIHJzc2k7CisKKwlpZihNVE9fQU5UX0RJVkVSU0lUWV9FTkFCTEUoKSAhPSAxKQorCQlyZXR1cm47CisJeCA9IGhhbF9nZXRfYW50ZW5uYV9udW1iZXIoTVRPX0hBTCgpKTsKKwlzd2l0Y2goTVRPX1RPR0dMRV9TVEFURSgpKQorCXsKKworCSAgIC8vTWlzc2luZy4uLi4uCisJICAgY2FzZSBUT0dHTEVfU1RBVEVfSURMRToKKwkgY2FzZSBUT0dHTEVfU1RBVEVfQktPRkY6CisJICAgICAgICAgICAgIGJyZWFrOzsKKworCQljYXNlIFRPR0dMRV9TVEFURV9XQUlUMDovLz09PT09PT09CisJICAgICAgICAgICAgICAgR2V0RFRPX1J4SW5mbyh4LCBNVE9fRlVOQ19JTlBVVF9EQVRBKTsKKwkJCXNtZV9nZXRfcnNzaShNVE9fRlVOQ19JTlBVVF9EQVRBLCAmcnNzaSk7CisJCQlSWFJTU0lBTlRbeF0gPSByc3NpOworCQkJI2lmZGVmIF9QRV9EVE9fRFVNUF8KKwkJCVdCREVCVUcoKCJbSEhEVE9dICoqd2FpdDA9PT09IENvbGxlY3RpbmcgQW50JWQtLXJzc2k9JWRcbiIsIHgsUlhSU1NJQU5UW3hdKSk7CisJCQkjZW5kaWYKKworCQkJLy9jaGFuZ2UgYW50ZW5uYSBhbmQgcmVzZXQgdGhlIGRhdGEgYXQgY2hhbmdlZCBhbnRlbm5hCisJCQl4ID0gKH54KSAmIDB4MDE7CisJCQlNVE9fQU5UX1NFTCgpID0geDsKKwkJCWhhbF9zZXRfYW50ZW5uYV9udW1iZXIoTVRPX0hBTCgpLCBNVE9fQU5UX1NFTCgpKTsKKwkJCUxPQ0FMX0FOVEVOTkFfTk8oKSA9IHg7CisKKwkJCU1UT19UT0dHTEVfU1RBVEUoKSA9IFRPR0dMRV9TVEFURV9XQUlUMTsvL2dvIHRvIHdhaXQxCisJCQlSZXNldERUT19SeEluZm8oeCwgTVRPX0ZVTkNfSU5QVVRfREFUQSk7CisJCQlicmVhazsKKwkJY2FzZSBUT0dHTEVfU1RBVEVfV0FJVDE6Ly89PT09PXdhaXQxCisJCQkvL01UT19DTlRfQU5UKHgpID0gaGFsX2dldF9ic3NfcGtfY250KE1UT19IQUwoKSk7CisJCQkvL1JYUlNTSUFOVFt4XSA9IGhhbF9nZXRfcnNzaShNVE9fSEFMKCkpOworCQkJc21lX2dldF9yc3NpKE1UT19GVU5DX0lOUFVUX0RBVEEsICZyc3NpKTsKKwkJCVJYUlNTSUFOVFt4XSA9IHJzc2k7CisJCQlHZXREVE9fUnhJbmZvKHgsIE1UT19GVU5DX0lOUFVUX0RBVEEpOworCQkJI2lmZGVmIF9QRV9EVE9fRFVNUF8KKwkJCVdCREVCVUcoKCJbSEhEVE9dICoqd2FpdDE9PT09IENvbGxlY3RpbmcgQW50JWQtLXJzc2k9JWRcbiIsIHgsUlhSU1NJQU5UW3hdKSk7CisJCQkjZW5kaWYKKwkJCU1UT19UT0dHTEVfU1RBVEUoKSA9IFRPR0dMRV9TVEFURV9NQUtFREVTSVNJT047CisJCQlicmVhazsKKwkJY2FzZSBUT0dHTEVfU1RBVEVfTUFLRURFU0lTSU9OOgorCQkJI2lmZGVmIF9QRV9EVE9fRFVNUF8KKwkJCVdCREVCVUcoKCJbSEhEVE9dOkFudC0tMC0tLS0tLS0tLS0tLS0tLS0tMS0tLVxuIikpOworCQkJT3V0cHV0RGVidWdJbmZvKEFOVDAsQU5UMSk7CisJCQkjZW5kaWYKKwkJCS8vUERFQlVHKCgiW0hIRFRPXSAqKmRlY2lzaW9uPT09PVxuICIpKTsKKworCQkJLy89PT09PWZvbGxvd2luZyBpcyB0aGUgZGVjaXNpb24gcHJvZHVyY2UKKwkJCS8vCisJCQkvLyAgICBmaXJzdDogY29tcGFyZSB0aGUgcnNzaSBpZiBkaWZmZXJlbmNlID4xMAorCQkJLy8gICAgICAgICAgIHNlbGVjdCB0aGUgbGFyZ2VyIG9uZQorCQkJLy8gICAgICAgICAgICxvdGhlcnMgZ28gdG8gc2Vjb25kCisJCQkvLyAgICBzZWNvbmQ6IGNvbWFwcmUgdGhlIHR4K3J4IHBhY2tldCBjb3VudCBpZiBkaWZmZXJlbmNlID4xMDAKKwkJCS8vICAgICAgICAgICAgdXNlIGxhcmdlciB0b3RhbCBwYWNrZXRzIGFudGVubmEKKwkJCS8vICAgIHRoaXJkOjpjb21wYXJlIHRoZSB0eCBQRVIgaWYgcGFja2V0cz4yMAorCQkJLy8gICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBkaWZmZXJlbmNlID41JSB1c2luZyB0aGUgYmlnZ2VyIG9uZQorCQkJLy8KKwkJCS8vICAgIGZvdXJ0aDpjb21wYXJlIHRoZSBSWCBQRVIgaWYgcGFja2V0cz4yMAorCQkJLy8gICAgICAgICAgICAgICAgICAgIGlmIFBFUiBkaWZmZXJlbmNlIDw1JQorCQkJLy8gICAgICAgICAgICAgICAgICAgdXNpbmcgb2xkIGFudGVubmEKKwkJCS8vCisJCQkvLworCQkJaWYgKGFicyhSWFJTU0lBTlRbQU5UMF0tUlhSU1NJQU5UW0FOVDFdKSA+IE1UT1BBUkFfUlNTSV9USF9GT1JfQU5URElWKCkpLy89PT09cnNzaV90aAorCQkJeworCQkJCWlmIChSWFJTU0lBTlRbQU5UMF0+UlhSU1NJQU5UW0FOVDFdKQorCQkJCXsKKwkJCQkJZGVjaWRlYW50ZmxhZz0xOworCQkJCQlNVE9fQU5UX01BQygpID0gQU5UMDsKKwkJCQl9CisJCQkJZWxzZQorCQkJCXsKKwkJCQkJZGVjaWRlYW50ZmxhZz0xOworCQkJCQlNVE9fQU5UX01BQygpID0gQU5UMTsKKwkJCQl9CisJCQkJI2lmZGVmIF9QRV9EVE9fRFVNUF8KKwkJCQlXQkRFQlVHKCgiU2VsZWN0IGFudGVubmEgYnkgUlNTSVxuIikpOworCQkJCSNlbmRpZgorCQkJfQorCQkJZWxzZSBpZiAgKGFicyhUeFBrdFBlckFudFtBTlQwXSArIERUT19SeF9JbmZvWzBdW0FOVDBdLVR4UGt0UGVyQW50W0FOVDFdLURUT19SeF9JbmZvWzBdW0FOVDFdKTw1MCkvLz09PT09dG90YWwgcGFja2V0X3RoCisJCQl7CisJCQkJI2lmZGVmIF9QRV9EVE9fRFVNUF8KKwkJCQlXQkRFQlVHKCgiVG90YWwgdHgvcnggaXMgY2xvc2VcbiIpKTsKKwkJCQkjZW5kaWYKKwkJCQlpZiAoVHhEb21pbmF0ZShBTlQwKSAmJiBUeERvbWluYXRlKEFOVDEpKQorCQkJCXsKKwkJCQkJaWYgKChUeFBrdFBlckFudFtBTlQwXT4xMCkgJiYgKFR4UGt0UGVyQW50W0FOVDFdPjEwKSkvLz09PT10eCBwYWNrZXRfdGgKKwkJCQkJeworCQkJCQkJV0JfUENSW0FOVDBdPURpdmlkZShUeFBrdFBlckFudFtBTlQwXSoxMDAsVHhQa3RSZXRyeVBlckFudFtBTlQwXSk7CisJCQkJCQlXQl9QQ1JbQU5UMV09RGl2aWRlKFR4UGt0UGVyQW50W0FOVDFdKjEwMCxUeFBrdFJldHJ5UGVyQW50W0FOVDFdKTsKKwkJCQkJCWlmIChhYnMoV0JfUENSW0FOVDBdLVdCX1BDUltBTlQxXSk+NSkvLyB0eCBQRVJfdGgKKwkJCQkJCXsKKwkJCQkJCQkjaWZkZWYgX1BFX0RUT19EVU1QXworCQkJCQkJCVdCREVCVUcoKCJEZWNpZGUgYnkgVHggY29ycmVjdCByYXRlXG4iKSk7CisJCQkJCQkJI2VuZGlmCisJCQkJCQkJaWYgKFdCX1BDUltBTlQwXT5XQl9QQ1JbQU5UMV0pCisJCQkJCQkJeworCQkJCQkJCQlkZWNpZGVhbnRmbGFnPTE7CisJCQkJCQkJCU1UT19BTlRfTUFDKCkgPSBBTlQwOworCQkJCQkJCX0KKwkJCQkJCQllbHNlCisJCQkJCQkJeworCQkJCQkJCQlkZWNpZGVhbnRmbGFnPTE7CisJCQkJCQkJCU1UT19BTlRfTUFDKCkgPSBBTlQxOworCQkJCQkJCX0KKwkJCQkJCX0KKwkJCQkJCWVsc2UKKwkJCQkJCXsKKwkJCQkJCQlkZWNpZGVhbnRmbGFnPTA7CisJCQkJCQkJdW50b2dnbGVjb3VudCsrOworCQkJCQkJCU1UT19BTlRfTUFDKCkgPSBvbGRfYW50ZW5uYVswXTsKKwkJCQkJCX0KKwkJCQkJfQorCQkJCQllbHNlCisJCQkJCXsKKwkJCQkJCWRlY2lkZWFudGZsYWc9MDsKKwkJCQkJCU1UT19BTlRfTUFDKCkgPSBvbGRfYW50ZW5uYVswXTsKKwkJCQkJfQorCQkJCX0KKwkJCQllbHNlIGlmICgoRFRPX1J4X0luZm9bMF1bQU5UMF0+MTApJiYoRFRPX1J4X0luZm9bMF1bQU5UMV0+MTApKS8vcnggcGFja2V0IHRoCisJCQkJeworCQkJCQkjaWZkZWYgX1BFX0RUT19EVU1QXworCQkJCQlXQkRFQlVHKCgiRGVjaWRlIGJ5IFJ4XG4iKSk7CisJCQkJCSNlbmRpZgorCQkJCQlpZiAoYWJzKERUT19SeF9JbmZvWzBdW0FOVDBdIC0gRFRPX1J4X0luZm9bMF1bQU5UMV0pPjUwKQorCQkJCQl7CisJCQkJCQlpZiAoRFRPX1J4X0luZm9bMF1bQU5UMF0gPiBEVE9fUnhfSW5mb1swXVtBTlQxXSkKKwkJCQkJCXsKKwkJCQkJCQlkZWNpZGVhbnRmbGFnPTE7CisJCQkJCQkJTVRPX0FOVF9NQUMoKSA9IEFOVDA7CisJCQkJCQl9CisJCQkJCQllbHNlCisJCQkJCQl7CisJCQkJCQkJZGVjaWRlYW50ZmxhZz0xOworCQkJCQkJCU1UT19BTlRfTUFDKCkgPSBBTlQxOworCQkJCQkJfQorCQkJCQl9CisJCQkJCWVsc2UKKwkJCQkJeworCQkJCQkJZGVjaWRlYW50ZmxhZz0wOworCQkJCQkJdW50b2dnbGVjb3VudCsrOworCQkJCQkJTVRPX0FOVF9NQUMoKSA9IG9sZF9hbnRlbm5hWzBdOworCQkJCQl9CisJCQkJfQorCQkJCWVsc2UKKwkJCQl7CisJCQkJCWRlY2lkZWFudGZsYWc9MDsKKwkJCQkJTVRPX0FOVF9NQUMoKSA9IG9sZF9hbnRlbm5hWzBdOworCQkJCX0KKwkJCX0KKwkJCWVsc2UgaWYgKChUeFBrdFBlckFudFtBTlQwXStEVE9fUnhfSW5mb1swXVtBTlQwXSk+KFR4UGt0UGVyQW50W0FOVDFdK0RUT19SeF9JbmZvWzBdW0FOVDFdKSkvL3VzZSBtb3JlIHBhY2tla3RzCisJCQl7CisJCQkJI2lmZGVmIF9QRV9EVE9fRFVNUF8KKwkJCQlXQkRFQlVHKCgiZGVjaWRlIGJ5IHRvdGFsIHR4L3J4IDogQU5UIDBcbiIpKTsKKwkJCQkjZW5kaWYKKworCQkJCWRlY2lkZWFudGZsYWc9MTsKKwkJCQlNVE9fQU5UX01BQygpID0gQU5UMDsKKwkJCX0KKwkJCWVsc2UKKwkJCXsKKwkJCQkjaWZkZWYgX1BFX0RUT19EVU1QXworCQkJCVdCREVCVUcoKCJkZWNpZGUgYnkgdG90YWwgdHgvcnggOiBBTlQgMVxuIikpOworCQkJCSNlbmRpZgorCQkJCWRlY2lkZWFudGZsYWc9MTsKKwkJCQlNVE9fQU5UX01BQygpID0gQU5UMTsKKworCQkJfQorCQkJLy90aGlzIGlzIGZvcmNlIGFudCB0b2dnbGUKKwkJCWlmIChkZWNpZGVhbnRmbGFnPT0xKQorCQkJCXVudG9nZ2xlY291bnQ9MDsKKworCQkJdW50b2dnbGVjb3VudD11bnRvZ2dsZWNvdW50JTQ7CisJCQlpZiAodW50b2dnbGVjb3VudD09MykgLy9jaGFuZ2UgYW50ZW5uYQorCQkJCU1UT19BTlRfTUFDKCkgPSAoKH5vbGRfYW50ZW5uYVswXSkgJiAweDEpOworCQkJI2lmZGVmIF9QRV9EVE9fRFVNUF8KKwkJCVdCREVCVUcoKCJbSEhEVE9dOj09PT09PT09PT09PT09PT09PXVudG9nZ2xlLWNvdW50PSVkIix1bnRvZ2dsZWNvdW50KSk7CisJCQkjZW5kaWYKKworCisKKworCQkJLy9QREVCVUcoKCJbSEhEVE9dICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipEVE8gRU5BQkxFPSVkIixNVE9fQU5UX0RJVkVSU0lUWV9FTkFCTEUoKSkpOworCQkJaWYoTVRPX0FOVF9ESVZFUlNJVFlfRU5BQkxFKCkgPT0gMSkKKwkJCXsKKwkJCQkJTVRPX0FOVF9TRUwoKSA9IE1UT19BTlRfTUFDKCk7CisJCQkJCWhhbF9zZXRfYW50ZW5uYV9udW1iZXIoTVRPX0hBTCgpLCBNVE9fQU5UX1NFTCgpKTsKKwkJCQkJTE9DQUxfQU5URU5OQV9OTygpID0gTVRPX0FOVF9TRUwoKTsKKwkJCQkJI2lmZGVmIF9QRV9EVE9fRFVNUF8KKwkJCQkJV0JERUJVRygoIltISERUT10gPT1kZWNpc2lvbj09KioqKioqKmFudGZsYWc9JWQqKioqKioqKioqKioqKioqKipzZWxlY3RlZCBhbnRlbm5hPSVkXG4iLGRlY2lkZWFudGZsYWcsTVRPX0FOVF9TRUwoKSkpOworCQkJCQkjZW5kaWYKKwkJCX0KKwkJCWlmIChkZWNpZGVhbnRmbGFnKQorCQkJeworCQkJCW9sZF9hbnRlbm5hWzNdPW9sZF9hbnRlbm5hWzJdOy8vc3RvcmUgYW50ZW5uYSBpbmZvCisJCQkJb2xkX2FudGVubmFbMl09b2xkX2FudGVubmFbMV07CisJCQkJb2xkX2FudGVubmFbMV09b2xkX2FudGVubmFbMF07CisJCQkJb2xkX2FudGVubmFbMF09IE1UT19BTlRfTUFDKCk7CisJCQl9CisJCQkjaWZkZWYgX1BFX0RUT19EVU1QXworCQkJV0JERUJVRygoIltISERUT106KipvbGQgYW50ZW5uYT1bJWRdWyVkXVslZF1bJWRdXG4iLG9sZF9hbnRlbm5hWzBdLG9sZF9hbnRlbm5hWzFdLG9sZF9hbnRlbm5hWzJdLG9sZF9hbnRlbm5hWzNdKSk7CisJCQkjZW5kaWYKKwkJCWlmIChvbGRfYW50ZW5uYVswXSE9b2xkX2FudGVubmFbMV0pCisJCQkJQW50ZW5uYVRvZ2dsZUJrb2ZmVGltZXI9MDsKKwkJCWVsc2UgaWYgKG9sZF9hbnRlbm5hWzFdIT1vbGRfYW50ZW5uYVsyXSkKKwkJCQlBbnRlbm5hVG9nZ2xlQmtvZmZUaW1lcj0xOworCQkJZWxzZSBpZiAob2xkX2FudGVubmFbMl0hPW9sZF9hbnRlbm5hWzNdKQorCQkJCUFudGVubmFUb2dnbGVCa29mZlRpbWVyPTI7CisJCQllbHNlCisJCQkJQW50ZW5uYVRvZ2dsZUJrb2ZmVGltZXI9NDsKKworCQkJI2lmZGVmIF9QRV9EVE9fRFVNUF8KKwkJCVdCREVCVUcoKCJbSEhEVE9dOioqYmFjayBvZmYgdGltZXI9JWQiLEFudGVubmFUb2dnbGVCa29mZlRpbWVyKSk7CisJCQkjZW5kaWYKKworCQkJUmVzZXREVE9fUnhJbmZvKE1UT19BTlRfTUFDKCksIE1UT19GVU5DX0lOUFVUX0RBVEEpOworCQkJaWYgKEFudGVubmFUb2dnbGVCa29mZlRpbWVyPT0wICYmIGRlY2lkZWFudGZsYWcpCisJCQkJTVRPX1RPR0dMRV9TVEFURSgpID0gVE9HR0xFX1NUQVRFX1dBSVQwOworCQkJZWxzZQorCQkJCU1UT19UT0dHTEVfU1RBVEUoKSA9IFRPR0dMRV9TVEFURV9JRExFOworCQkJYnJlYWs7CisJfQorCit9CisKK3ZvaWQgbXVsdGlhZ2MoTVRPX0ZVTkNfSU5QVVQsIHU4IGhpZ2hfZ2Fpbl9tb2RlICkKK3sKKwlzMzIJCXJzc2k7CisJaHdfZGF0YV90CSpwSHdEYXRhID0gTVRPX0hBTCgpOworCisJc21lX2dldF9yc3NpKE1UT19GVU5DX0lOUFVUX0RBVEEsICZyc3NpKTsKKworCWlmKCAoUkZfV0JfMjQyID09IHBId0RhdGEtPnBoeV90eXBlKSB8fAorCQkoUkZfV0JfMjQyXzEgPT0gcEh3RGF0YS0+cGh5X3R5cGUpICkgLy8gMjAwNjA2MTkuNSBBZGQKKwl7CisJCWlmIChoaWdoX2dhaW5fbW9kZT09MSkKKwkJeworCQkJLy9od19zZXRfZHh4X3JlZyhwaHdfZGF0YSwgMHgwQywgMHhmOGY1MjIzMCk7CisJCQkvL2h3X3NldF9keHhfcmVnKHBod19kYXRhLCAweDIwLCAweDA2QzQzNDQwKTsKKwkJCVdiMzVSZWdfV3JpdGUoIHBId0RhdGEsIDB4MTAwQywgMHhGMkYzMjIzMiApOyAvLyA5NDA5MTYgMHhmOGY1MjIzMCApOworCQkJV2IzNVJlZ19Xcml0ZSggcEh3RGF0YSwgMHgxMDIwLCAweDA0Y2IzNDQwICk7IC8vIDk0MDkxNSAweDA2QzQzNDQwCisJCX0KKwkJZWxzZSBpZiAoaGlnaF9nYWluX21vZGU9PTApCisJCXsKKwkJCS8vaHdfc2V0X2R4eF9yZWcocGh3X2RhdGEsIDB4MEMsIDB4RUVFRTAwMEQpOworCQkJLy9od19zZXRfZHh4X3JlZyhwaHdfZGF0YSwgMHgyMCwgMHgwNmM0MTQ0MCk7CisJCQlXYjM1UmVnX1dyaXRlKCBwSHdEYXRhLCAweDEwMEMsIDB4RUVFRTAwMEQgKTsKKwkJCVdiMzVSZWdfV3JpdGUoIHBId0RhdGEsIDB4MTAyMCwgMHgwNGNiMTQ0MCApOyAvLyA5NDA5MTUgMHgwNmM0MTQ0MAorCQl9CisJCSNpZmRlZiBfUEVfRFRPX0RVTVBfCisJCVdCREVCVUcoKCJbSEhEVE9BR0NdICoqcnNzaT0lZCwgaGlnaCBnYWluIG1vZGU9JWQiLCByc3NpLCBoaWdoX2dhaW5fbW9kZSkpOworCQkjZW5kaWYKKwl9Cit9CisKK3ZvaWQgVHhQd3JDb250cm9sKE1UT19GVU5DX0lOUFVUKQoreworICAgIHMzMiAgICAgcnNzaTsKKwlod19kYXRhX3QJKnBId0RhdGEgPSBNVE9fSEFMKCk7CisKKwlzbWVfZ2V0X3Jzc2koTVRPX0ZVTkNfSU5QVVRfREFUQSwgJnJzc2kpOworCWlmKCAoUkZfV0JfMjQyID09IHBId0RhdGEtPnBoeV90eXBlKSB8fAorCQkoUkZfV0JfMjQyXzEgPT0gcEh3RGF0YS0+cGh5X3R5cGUpICkgLy8gMjAwNjA2MTkuNSBBZGQKKwl7CisJCXN0YXRpYyB1OCBoaWdoX2dhaW5fbW9kZTsgLy90aGlzIGlzIGZvciB3aW5ib25kIFJGIHN3aXRjaCBMTkEKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAvL3VzaW5nIGRpZmZlcmVudCByZWdpc3RlciBzZXR0aW5nCisKKwkJaWYgKGhpZ2hfZ2Fpbl9tb2RlPT0xKQorCQl7CisJCQlpZiggcnNzaSA+IE1UT19EQVRBKCkuUlNTSV9oaWdoICkKKwkJCXsKKwkJCQkvL2h3X3NldF9keHhfcmVnKHBod19kYXRhLCAweDBDLCAweGY4ZjUyMjMwKTsKKwkJCQkvL2h3X3NldF9keHhfcmVnKHBod19kYXRhLCAweDIwLCAweDA1NTQxNjQwKTsKKwkJCQloaWdoX2dhaW5fbW9kZT0wOworCQkJfQorCQkJZWxzZQorCQkJeworCQkJCS8vaHdfc2V0X2R4eF9yZWcocGh3X2RhdGEsIDB4MEMsIDB4ZjhmNTE4MzApOworCQkJCS8vaHdfc2V0X2R4eF9yZWcocGh3X2RhdGEsIDB4MjAsIDB4MDU1NDNFNDApOworCQkJCWhpZ2hfZ2Fpbl9tb2RlPTE7CisJCQl9CisJCX0KKwkJZWxzZSAvL2lmIChoaWdoX2dhaW5fbW9kZT09MCkKKwkJeworCQkJaWYoIHJzc2kgPCBNVE9fREFUQSgpLlJTU0lfbG93ICkKKwkJCXsKKwkJCQkvL2h3X3NldF9keHhfcmVnKHBod19kYXRhLCAweDBDLCAweGY4ZjUxODMwKTsKKwkJCQkvL2h3X3NldF9keHhfcmVnKHBod19kYXRhLCAweDIwLCAweDA1NTQzRTQwKTsKKwkJCQloaWdoX2dhaW5fbW9kZT0xOworCQkJfQorCQkJZWxzZQorCQkJeworCQkJCS8vaHdfc2V0X2R4eF9yZWcocGh3X2RhdGEsIDB4MEMsIDB4ZjhmNTIyMzApOworCQkJCS8vaHdfc2V0X2R4eF9yZWcocGh3X2RhdGEsIDB4MjAsIDB4MDU1NDE2NDApOworCQkJCWhpZ2hfZ2Fpbl9tb2RlPTA7CisJCQl9CisJCX0KKworCQkvLyBBbHdheXMgaGlnaCBnYWluIDIwMDUxMDE0LiBVc2luZyB0aGUgaW5pdGlhbCB2YWx1ZSBvbmx5LgorCQltdWx0aWFnYyhNVE9fRlVOQ19JTlBVVF9EQVRBLCBoaWdoX2dhaW5fbW9kZSk7CisJfQorfQorCisKK3U4IENhbGNOZXdSYXRlKE1UT19GVU5DX0lOUFVULCB1OCBvbGRfcmF0ZSwgdTMyIHJldHJ5X2NudCwgdTMyIHR4X2ZyYWdfY250KQoreworCWludCBpOworCXU4IG5ld19yYXRlOworICAgIHUzMiByZXRyeV9yYXRlOworCWludCBUeFRocm91cHV0MSwgVHhUaHJvdXB1dDIsIFR4VGhyb3VwdXQzLCBCZXN0VGhyb3VwaHQ7CisKKwlpZih0eF9mcmFnX2NudCA8IE1UT1BBUkFfVFhDT1VOVF9USF9GT1JfQ0FMQ19SQVRFKCkpIC8vdG9vIGZldyBwYWNrZXRzIHRyYW5zbWl0CisJeworCQlyZXR1cm4gMHhmZjsKKwl9CisJcmV0cnlfcmF0ZSA9IERpdmlkZShyZXRyeV9jbnQgKiAxMDAsIHR4X2ZyYWdfY250KTsKKworCWlmKHJldHJ5X3JhdGUgPiA5MCkgcmV0cnlfcmF0ZSA9IDkwOyAvL2Fsd2F5cyB0cnVuY2F0ZSB0byA5MCUgZHVlIHRvIGxvb2t1cCB0YWJsZSBzaXplCisJI2lmZGVmIF9QRV9EVE9fRFVNUF8KKwlXQkRFQlVHKCgiIyMjIyMgQ3VycmVudCBsZXZlbCA9JWQsIFJldHJ5IGNvdW50ID0lZCwgRnJhZyBjb3VudCA9JWRcbiIsCisJCQkJCQlvbGRfcmF0ZSwgcmV0cnlfY250LCB0eF9mcmFnX2NudCkpOworCVdCREVCVUcoKCIqIyMqIFJldHJ5IHJhdGUgPSVkLCB0aHJvdWdocHV0ID0lZFxuIiwKKwkJCQkJCXJldHJ5X3JhdGUsIFJhdGVfUEVSX1RCTFtyZXRyeV9yYXRlXVtvbGRfcmF0ZV0pKTsKKwlXQkRFQlVHKCgiVHhSYXRlUmVjLnR4X3JhdGUgPSVkLCBSZXRyeSByYXRlID0gJWQsIHRocm91Z2hwdXQgPSAlZFxuIiwKKwkJCQkJCVR4UmF0ZVJlYy50eF9yYXRlLCBUeFJhdGVSZWMudHhfcmV0cnlfcmF0ZSwKKwkJCQkJCVJhdGVfUEVSX1RCTFtUeFJhdGVSZWMudHhfcmV0cnlfcmF0ZV1bTGV2ZWwyUGVyVGJsW1R4UmF0ZVJlYy50eF9yYXRlXV0pKTsKKwlXQkRFQlVHKCgib2xkX3JhdGUtMSA9JWQsIFJldHJ5IHJhdGUgPSAlZCwgdGhyb3VnaHB1dCA9ICVkXG4iLAorCQkJCQkJb2xkX3JhdGUtMSwgcmV0cnlyYXRlX3JlY1tvbGRfcmF0ZS0xXSwKKwkJCQkJCVJhdGVfUEVSX1RCTFtyZXRyeXJhdGVfcmVjW29sZF9yYXRlLTFdXVtvbGRfcmF0ZS0xXSkpOworCVdCREVCVUcoKCJvbGRfcmF0ZSsxID0lZCwgUmV0cnkgcmF0ZSA9ICVkLCB0aHJvdWdocHV0ID0gJWRcbiIsCisJCQkJCQlvbGRfcmF0ZSsxLCByZXRyeXJhdGVfcmVjW29sZF9yYXRlKzFdLAorCQkJCQkJUmF0ZV9QRVJfVEJMW3JldHJ5cmF0ZV9yZWNbb2xkX3JhdGUrMV1dW29sZF9yYXRlKzFdKSk7CisJI2VuZGlmCisKKwkvL2ZvbGxvd2luZyBpcyBmb3IgcmVjb3JkIHRoZSByZXRyeSByYXRlIGF0IHRoZSBkaWZmZXJlbnQgZGF0YSByYXRlCisJaWYgKGFicyhyZXRyeV9yYXRlLXJldHJ5cmF0ZV9yZWNbb2xkX3JhdGVdKTw1MCkvLy0tLXRoZSBwZXIgVEgKKwkJcmV0cnlyYXRlX3JlY1tvbGRfcmF0ZV0gPSByZXRyeV9yYXRlOyAvL3VwZGF0ZSByZXRyeSByYXRlCisJZWxzZQorCXsKKwkJZm9yIChpPTA7aTxNVE9fRGF0YVJhdGVBdmFpbGFibGVMZXZlbDtpKyspIC8vcmVzZXQgYWxsIHJldHJ5IHJhdGUKKwkJCXJldHJ5cmF0ZV9yZWNbaV09MDsKKwkJcmV0cnlyYXRlX3JlY1tvbGRfcmF0ZV0gPSByZXRyeV9yYXRlOworCQkjaWZkZWYgX1BFX0RUT19EVU1QXworCQlXQkRFQlVHKCgiUmVzZXQgcmV0cnkgcmF0ZSB0YWJsZVxuIikpOworCQkjZW5kaWYKKwl9CisKKwlpZihUeFJhdGVSZWMudHhfcmF0ZSA+IG9sZF9yYXRlKSAgIC8vRGVjcmVhc2UgVHggUmF0ZQorCXsKKwkJVHhUaHJvdXB1dDEgPSBSYXRlX1BFUl9UQkxbVHhSYXRlUmVjLnR4X3JldHJ5X3JhdGVdW0xldmVsMlBlclRibFtUeFJhdGVSZWMudHhfcmF0ZV1dOworCQlUeFRocm91cHV0MiA9IFJhdGVfUEVSX1RCTFtyZXRyeV9yYXRlXVtMZXZlbDJQZXJUYmxbb2xkX3JhdGVdXTsKKwkJaWYoVHhUaHJvdXB1dDEgPiBUeFRocm91cHV0MikKKwkJeworCQkJbmV3X3JhdGUgPSBUeFJhdGVSZWMudHhfcmF0ZTsKKwkJCUJlc3RUaHJvdXBodCA9IFR4VGhyb3VwdXQxOworCQl9CisJCWVsc2UKKwkJeworCQkJbmV3X3JhdGUgPSBvbGRfcmF0ZTsKKwkJCUJlc3RUaHJvdXBodCA9IFR4VGhyb3VwdXQyOworCQl9CisJCWlmKChvbGRfcmF0ZSA+IDApICYmKHJldHJ5X3JhdGU+TVRPUEFSQV9UWFJBVEVfREVDX1RIKCkpKSAgIC8vTWluIFJhdGUKKwkJeworCQkJVHhUaHJvdXB1dDMgPSBSYXRlX1BFUl9UQkxbcmV0cnlyYXRlX3JlY1tvbGRfcmF0ZS0xXV1bTGV2ZWwyUGVyVGJsW29sZF9yYXRlLTFdXTsKKwkJCWlmKEJlc3RUaHJvdXBodCA8IFR4VGhyb3VwdXQzKQorCQkJeworCQkJCW5ld19yYXRlID0gb2xkX3JhdGUgLSAxOworCQkJCSNpZmRlZiBfUEVfRFRPX0RVTVBfCisJCQkJV0JERUJVRygoIi0tLS0tLS0tXG4iKSk7CisJCQkJI2VuZGlmCisJCQkJQmVzdFRocm91cGh0ID0gVHhUaHJvdXB1dDM7CisJCQl9CisJCX0KKwl9CisJZWxzZSBpZihUeFJhdGVSZWMudHhfcmF0ZSA8IG9sZF9yYXRlKSAgLy9JbmNyZWFzZSBUeCBSYXRlCisJeworCQlUeFRocm91cHV0MSA9IFJhdGVfUEVSX1RCTFtUeFJhdGVSZWMudHhfcmV0cnlfcmF0ZV1bTGV2ZWwyUGVyVGJsW1R4UmF0ZVJlYy50eF9yYXRlXV07CisJCVR4VGhyb3VwdXQyID0gUmF0ZV9QRVJfVEJMW3JldHJ5X3JhdGVdW0xldmVsMlBlclRibFtvbGRfcmF0ZV1dOworCQlpZihUeFRocm91cHV0MSA+IFR4VGhyb3VwdXQyKQorCQl7CisJCQluZXdfcmF0ZSA9IFR4UmF0ZVJlYy50eF9yYXRlOworCQkJQmVzdFRocm91cGh0ID0gVHhUaHJvdXB1dDE7CisJCX0KKwkJZWxzZQorCQl7CisJCQluZXdfcmF0ZSA9IG9sZF9yYXRlOworCQkJQmVzdFRocm91cGh0ID0gVHhUaHJvdXB1dDI7CisJCX0KKwkJaWYgKChvbGRfcmF0ZSA8IE1UT19EYXRhUmF0ZUF2YWlsYWJsZUxldmVsIC0gMSkmJihyZXRyeV9yYXRlPE1UT1BBUkFfVFhSQVRFX0lOQ19USCgpKSkKKwkJeworCQkJLy9UeFRocm91cHV0MyA9IFJhdGVfUEVSX1RCTFtyZXRyeXJhdGVfcmVjW29sZF9yYXRlKzFdXVtMZXZlbDJQZXJUYmxbb2xkX3JhdGUrMV1dOworCQkJaWYgKHJldHJ5cmF0ZV9yZWNbb2xkX3JhdGUrMV0gPiBNVE9QQVJBX1RYUkVUUllSQVRFX1JFRFVDRSgpKQorCQkJCVR4VGhyb3VwdXQzID0gUmF0ZV9QRVJfVEJMW3JldHJ5cmF0ZV9yZWNbb2xkX3JhdGUrMV0tTVRPUEFSQV9UWFJFVFJZUkFURV9SRURVQ0UoKV1bTGV2ZWwyUGVyVGJsW29sZF9yYXRlKzFdXTsKKwkJCWVsc2UKKwkJCQlUeFRocm91cHV0MyA9IFJhdGVfUEVSX1RCTFtyZXRyeXJhdGVfcmVjW29sZF9yYXRlKzFdXVtMZXZlbDJQZXJUYmxbb2xkX3JhdGUrMV1dOworCQkJaWYoQmVzdFRocm91cGh0IDwgVHhUaHJvdXB1dDMpCisJCQl7CisJCQkJbmV3X3JhdGUgPSBvbGRfcmF0ZSArIDE7CisJCQkJI2lmZGVmIF9QRV9EVE9fRFVNUF8KKwkJCQlXQkRFQlVHKCgiKysrKysrKysrK1xuIikpOworCQkJCSNlbmRpZgorCQkJCUJlc3RUaHJvdXBodCA9IFR4VGhyb3VwdXQzOworCQkJfQorCQl9CisJfQorCWVsc2UgIC8vVHggUmF0ZSBubyBjaGFuZ2UKKwl7CisJCVR4VGhyb3VwdXQyID0gUmF0ZV9QRVJfVEJMW3JldHJ5X3JhdGVdW0xldmVsMlBlclRibFtvbGRfcmF0ZV1dOworCQluZXdfcmF0ZSA9IG9sZF9yYXRlOworCQlCZXN0VGhyb3VwaHQgPSBUeFRocm91cHV0MjsKKworCQlpZiAocmV0cnlfcmF0ZSA8TVRPUEFSQV9UWFJBVEVfRVFfVEgoKSkgICAgLy90aCBmb3IgY2hhbmdlIGhpZ2hlciByYXRlCisJCXsKKwkJCWlmKG9sZF9yYXRlIDwgTVRPX0RhdGFSYXRlQXZhaWxhYmxlTGV2ZWwgLSAxKQorCQkJeworCQkJCS8vVHhUaHJvdXB1dDMgPSBSYXRlX1BFUl9UQkxbcmV0cnlyYXRlX3JlY1tvbGRfcmF0ZSsxXV1bTGV2ZWwyUGVyVGJsW29sZF9yYXRlKzFdXTsKKwkJCQlpZiAocmV0cnlyYXRlX3JlY1tvbGRfcmF0ZSsxXSA+IE1UT1BBUkFfVFhSRVRSWVJBVEVfUkVEVUNFKCkpCisJCQkJCVR4VGhyb3VwdXQzID0gUmF0ZV9QRVJfVEJMW3JldHJ5cmF0ZV9yZWNbb2xkX3JhdGUrMV0tTVRPUEFSQV9UWFJFVFJZUkFURV9SRURVQ0UoKV1bTGV2ZWwyUGVyVGJsW29sZF9yYXRlKzFdXTsKKwkJCQllbHNlCisJCQkJCVR4VGhyb3VwdXQzID0gUmF0ZV9QRVJfVEJMW3JldHJ5cmF0ZV9yZWNbb2xkX3JhdGUrMV1dW0xldmVsMlBlclRibFtvbGRfcmF0ZSsxXV07CisJCQkJaWYoQmVzdFRocm91cGh0IDwgVHhUaHJvdXB1dDMpCisJCQkJeworCQkJCQluZXdfcmF0ZSA9IG9sZF9yYXRlICsgMTsKKwkJCQkJQmVzdFRocm91cGh0ID0gVHhUaHJvdXB1dDM7CisJCQkJCSNpZmRlZiBfUEVfRFRPX0RVTVBfCisJCQkJCVdCREVCVUcoKCI9KysrKysrKysrK1xuIikpOworCQkJCQkjZW5kaWYKKwkJCQl9CisJCQl9CisJCX0KKwkJZWxzZQorCQlpZihvbGRfcmF0ZSA+IDApICAgLy9NaW4gUmF0ZQorCQl7CisJCQlUeFRocm91cHV0MyA9IFJhdGVfUEVSX1RCTFtyZXRyeXJhdGVfcmVjW29sZF9yYXRlLTFdXVtMZXZlbDJQZXJUYmxbb2xkX3JhdGUtMV1dOworCQkJaWYoQmVzdFRocm91cGh0IDwgVHhUaHJvdXB1dDMpCisJCQl7CisJCQkJbmV3X3JhdGUgPSBvbGRfcmF0ZSAtIDE7CisJCQkJI2lmZGVmIF9QRV9EVE9fRFVNUF8KKwkJCQlXQkRFQlVHKCgiPS0tLS0tLS0tXG4iKSk7CisJCQkJI2VuZGlmCisJCQkJQmVzdFRocm91cGh0ID0gVHhUaHJvdXB1dDM7CisJCQl9CisJCX0KKwl9CisKKwlpZiAoIUxPQ0FMX0lTX0lCU1NfTU9ERSgpKQorCXsKKwltYXhfcnNzaV9yYXRlID0gR2V0TWF4UmF0ZUxldmVsRnJvbVJTU0koKTsKKwkjaWZkZWYgX1BFX0RUT19EVU1QXworCVdCREVCVUcoKCJbTVRPXTpSU1NJMlJhdGU9JWRcbiIsIE1UT19EYXRhX1JhdGVfVGJsW21heF9yc3NpX3JhdGVdKSk7CisJI2VuZGlmCisJaWYobmV3X3JhdGUgPiBtYXhfcnNzaV9yYXRlKQorCQluZXdfcmF0ZSA9IG1heF9yc3NpX3JhdGU7CisJfQorCisJLy9zYXZlIG5ldyByYXRlOworCVR4UmF0ZVJlYy50eF9yYXRlID0gb2xkX3JhdGU7CisJVHhSYXRlUmVjLnR4X3JldHJ5X3JhdGUgPSAodTgpIHJldHJ5X3JhdGU7CisJVHhSZXRyeVJhdGUgPSByZXRyeV9yYXRlOworCXJldHVybiBuZXdfcmF0ZTsKK30KKwordm9pZCBTbW9vdGhSU1NJKHMzMiBuZXdfcnNzaSkKK3sKKwlSU1NJU21vb3RoZWQgPSBSU1NJU21vb3RoZWQgKyBuZXdfcnNzaSAtIFJTU0lCdWZbUlNTSUJ1ZkluZGV4XTsKKwlSU1NJQnVmW1JTU0lCdWZJbmRleF0gPSBuZXdfcnNzaTsKKwlSU1NJQnVmSW5kZXggPSAoUlNTSUJ1ZkluZGV4ICsgMSkgJSAxMDsKK30KKwordTggR2V0TWF4UmF0ZUxldmVsRnJvbVJTU0kodm9pZCkKK3sKKwl1OCBpOworCXU4IFR4UmF0ZTsKKworCWZvcihpPTA7aTxSU1NJMlJBVEVfU0laRTtpKyspCisJeworCQlpZihSU1NJU21vb3RoZWQgPiBSU1NJMlJhdGVUYmxbaV0uUlNTSSkKKwkJCWJyZWFrOworCX0KKwkjaWZkZWYgX1BFX0RUT19EVU1QXworCVdCREVCVUcoKCJbTVRPXTpSU1NJPSVkXG4iLCBEaXZpZGUoUlNTSVNtb290aGVkLCAxMCkpKTsKKwkjZW5kaWYKKwlpZihpIDwgUlNTSTJSQVRFX1NJWkUpCisJCVR4UmF0ZSA9IFJTU0kyUmF0ZVRibFtpXS5UeFJhdGU7CisJZWxzZQorCQlUeFJhdGUgPSAyOyAgLy9kaXZpZGVkIGJ5IDIgPSAxTWJwcworCisJZm9yKGk9TVRPX0RhdGFSYXRlQXZhaWxhYmxlTGV2ZWwtMTtpPjA7aS0tKQorCXsKKwkJaWYoVHhSYXRlID49TVRPX0RhdGFfUmF0ZV9UYmxbaV0pCisJCQlicmVhazsKKwl9CisJcmV0dXJuIGk7Cit9CisKKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLyAgRGVzY3JpcHRpb246CisvLyAgICAgIElmIHdlIGVuYWJsZSBEVE8sIHdlIHdpbGwgaWdub3JlIHRoZSB0eCBjb3VudCB3aXRoIGRpZmZlcmVudCB0eCByYXRlIGZyb20KKy8vICAgICAgRFRPIHJhdGUuIFRoaXMgaXMgYmVjYXVzZSB3aGVuIHdlIGFkanVzdCBEVE8gdHggcmF0ZSwgdGhlcmUgY291bGQgYmUgc29tZQorLy8gICAgICBwYWNrZXRzIGluIHRoZSB0eCBxdWV1ZSB3aXRoIHByZXZpb3VzIHR4IHJhdGUKK3ZvaWQgTVRPX1NldFR4Q291bnQoTVRPX0ZVTkNfSU5QVVQsIHU4IHR4X3JhdGUsIHU4IGluZGV4KQoreworCU1UT19UWEZMT1dDT1VOVCgpKys7CisJaWYgKChNVE9fRU5BQkxFPT0xKSAmJiAoTVRPX1JBVEVfQ0hBTkdFX0VOQUJMRSgpPT0xKSkKKwl7CisJCWlmKHR4X3JhdGUgPT0gTVRPX0RBVEFfUkFURSgpKQorCQl7CisJCQlpZiAoaW5kZXggPT0gMCkKKwkJCXsKKwkJCQlpZiAoYm9TcGFyc2VUeFRyYWZmaWMpCisJCQkJCU1UT19IQUwoKS0+ZHRvX3R4X2ZyYWdfY291bnQgKz0gTVRPUEFSQV9QRVJJT0RJQ19DSEVDS19DWUNMRSgpOworCQkJCWVsc2UKKwkJCQkJTVRPX0hBTCgpLT5kdG9fdHhfZnJhZ19jb3VudCArPSAxOworCQkJfQorCQkJZWxzZQorCQkJeworCQkJCWlmIChpbmRleDw4KQorCQkJCXsKKwkJCQkJTVRPX0hBTCgpLT5kdG9fdHhfcmV0cnlfY291bnQgKz0gaW5kZXg7CisJCQkJCU1UT19IQUwoKS0+ZHRvX3R4X2ZyYWdfY291bnQgKz0gKGluZGV4KzEpOworCQkJCX0KKwkJCQllbHNlCisJCQkJeworCQkJCQlNVE9fSEFMKCktPmR0b190eF9yZXRyeV9jb3VudCArPSA3OworCQkJCQlNVE9fSEFMKCktPmR0b190eF9mcmFnX2NvdW50ICs9IDc7CisJCQkJfQorCQkJfQorCQl9CisJCWVsc2UgaWYoTVRPX0RBVEFfUkFURSgpPjQ4ICYmIHR4X3JhdGUgPT00OCkKKwkJey8vQUxGUkVECisJCQlpZiAoaW5kZXg8MykgLy9mb3IgcmVkdWNpaW5nIGRhdGEgcmF0ZSBzY2hlbWUgLAorCQkJCSAgICAgICAgIC8vZG8gbm90IGNhbGN1IGRpZmZlcmVudCBkYXRhIHJhdGUKKwkJCQkJCSAvLzMgaXMgdGhlIHJlZHVjaW5nIGRhdGEgcmF0ZSBhdCByZXRyeQorCQkJeworCQkJCU1UT19IQUwoKS0+ZHRvX3R4X3JldHJ5X2NvdW50ICs9IGluZGV4OworCQkJCU1UT19IQUwoKS0+ZHRvX3R4X2ZyYWdfY291bnQgKz0gKGluZGV4KzEpOworCQkJfQorCQkJZWxzZQorCQkJeworCQkJCU1UT19IQUwoKS0+ZHRvX3R4X3JldHJ5X2NvdW50ICs9IDM7CisJCQkJTVRPX0hBTCgpLT5kdG9fdHhfZnJhZ19jb3VudCArPSAzOworCQkJfQorCisJCX0KKwl9CisJZWxzZQorCXsKKwkJTVRPX0hBTCgpLT5kdG9fdHhfcmV0cnlfY291bnQgKz0gaW5kZXg7CisJCU1UT19IQUwoKS0+ZHRvX3R4X2ZyYWdfY291bnQgKz0gKGluZGV4KzEpOworCX0KKwlUb3RhbFR4UGt0ICsrOworCVRvdGFsVHhQa3RSZXRyeSArPSAoaW5kZXgrMSk7CisKKwlQZXJpb2RUb3RhbFR4UGt0ICsrOworCVBlcmlvZFRvdGFsVHhQa3RSZXRyeSArPSAoaW5kZXgrMSk7Cit9CisKK3U4IE1UT19HZXRUeEZhbGxiYWNrUmF0ZShNVE9fRlVOQ19JTlBVVCkKK3sKKwlyZXR1cm4gTVRPX0RBVEFfRkFMTEJBQ0tfUkFURSgpOworfQorCisKKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLyAgTVRPX1R4RmFpbGVkIC0tCisvLworLy8gIERlc2NyaXB0aW9uOgorLy8gICAgRmFpbHVyZSBvZiB0cmFuc21pdHRpbmcgYSBwYWNrZXQgaW5kaWNhdGVzIHRoYXQgY2VydGFpbiBNVE8gcGFybWV0ZXJzCisvLyAgICBtYXkgbmVlZCB0byBiZSBhZGp1c3RlZC4gVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbiBOSUMganVzdCBmYWlsZWQKKy8vICAgIHRvIHRyYW5zbWl0IGEgcGFja2V0IG9yIHdoZW4gTVNEVUxpZmVUaW1lIGV4cGlyZWQuCisvLworLy8gIEFyZ3VtZW50czoKKy8vICAgIEFkYXB0ZXIgICAgICAtIFRoZSBwb2ludGVyIHRvIHRoZSBNaW5pcG9ydCBBZGFwdGVyIENvbnRleHQKKy8vCisvLyAgUmV0dXJuIFZhbHVlOgorLy8gICAgTm9uZQorLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cit2b2lkIE1UT19UeEZhaWxlZChNVE9fRlVOQ19JTlBVVCkKK3sKKwlyZXR1cm47Cit9CisKK2ludCBEaXZpZGUoaW50IGEsIGludCBiKQoreworCWlmIChiPT0wKSBiPTE7CisJcmV0dXJuIGEvYjsKK30KKworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9tdG8uaCBiL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL210by5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY0NzkzNmYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9tdG8uaApAQCAtMCwwICsxLDI2NSBAQAorLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vIE1UTy5ICisvLworLy8gUmV2aXNpb24gaGlzdG9yeQorLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vICAgICAgICAgIDIwMDMwMTEwICAgIFVOMjAgUGV0ZSBDaGFvCisvLyAgICAgICAgICAgICAgICAgICAgICBJbml0aWFsIFJlbGVhc2UKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDMgV2luYm9uZCBFbGVjdHJvbmljcyBDb3JwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyNpZm5kZWYgX19NVE9fSF9fCisjZGVmaW5lIF9fTVRPX0hfXworCisjZGVmaW5lIE1UT19ERUZBVUxUX1RIX0NOVCAgICAgICAgICAgICAgNQorI2RlZmluZSBNVE9fREVGQVVMVF9USF9TUTMgICAgICAgICAgICAgIDExMiAgLy9PTEQgSVMgMTMgcmVmZXJlbmNlIEpvaG5YdQorI2RlZmluZSBNVE9fREVGQVVMVF9USF9JRExFX1NMT1QgICAgICAgIDE1CisjZGVmaW5lIE1UT19ERUZBVUxUX1RIX1BSX0lOVEVSRiAgICAgICAgMzAKKyNkZWZpbmUgTVRPX0RFRkFVTFRfVE1SX0FHSU5HICAgICAgICAgICAyNSAgLy8gdW5pdDogc2xvdCB0aW1lICAxMCByZWZlcmVuY2UgSm9oblh1CisjZGVmaW5lIE1UT19ERUZBVUxUX1RNUl9QRVJJT0RJQyAgICAgICAgNSAgIC8vIHVuaXQ6IHNsb3QgdGltZQorCisjZGVmaW5lIE1UT19BTlRFTk5BX0RJVkVSU0lUWV9PRkYgICAgICAgMAorI2RlZmluZSBNVE9fQU5URU5OQV9ESVZFUlNJVFlfT04gICAgICAgIDEKKworLy8gTEEyMDA0MDIxMF9EVE8ga2V2aW4KKy8vI2RlZmluZSBNVE9fUFJFQU1CTEVfTE9ORyAgICAgICAgICAgICAgIDAKKy8vI2RlZmluZSBNVE9fUFJFQU1CTEVfU0hPUlQgICAgICAgICAgICAgIDEKKyNkZWZpbmUgTVRPX1BSRUFNQkxFX0xPTkcgICAgICAgICAgICAgICBXTEFOX1BSRUFNQkxFX1RZUEVfTE9ORworI2RlZmluZSBNVE9fUFJFQU1CTEVfU0hPUlQgICAgICAgICAgICAgIFdMQU5fUFJFQU1CTEVfVFlQRV9TSE9SVAorCit0eXBlZGVmIGVudW0geworICAgIFRPR0dMRV9TVEFURV9JRExFICAgICAgICAgICAgID0gMCwKKyAgICBUT0dHTEVfU1RBVEVfV0FJVDAgICAgICAgICAgICA9IDEsCisgICAgVE9HR0xFX1NUQVRFX1dBSVQxICAgICAgICAgICAgPSAyLAorICAgIFRPR0dMRV9TVEFURV9NQUtFREVTSVNJT04gICAgID0gMywKKwlUT0dHTEVfU1RBVEVfQktPRkYgICAgICAgICAgICA9IDQKK30gVE9HR0xFX1NUQVRFOworCit0eXBlZGVmIGVudW0geworICAgIFJBVEVfQ0hHU1RBVEVfSURMRSAgICAgICAgID0gMCwKKyAgICBSQVRFX0NIR1NUQVRFX0NBTENVTEFURSAgICA9IDEsCisgICAgUkFURV9DSEdTVEFURV9CQUNLT0ZGCSAgID0gMgorfSBUWF9SQVRFX1JFRFVDVElPTl9TVEFURTsKKworLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLyBzdHJ1Y3QgX01UT1BhcmFtZXRlcnMgLS0KKy8vCisvLyAgIERlZmluZXMgdGhlIHBhcmFtZXRlcnMgdXNlZCBpbiB0aGUgTUFDIFRocm91Z2hwdXQgT3B0aW1pemF0aW9uIGFsZ29yaXRobQorLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cit0eXBlZGVmIHN0cnVjdCBfTVRPX1BBUkFNRVRFUlMKK3sKKwl1OCAgICAgIFRoX0ZpeGFudDsKKwl1OCAgICAgIFRoX0NudDsKKwl1OCAgICAgIFRoX1NRMzsKKwl1OCAgICAgIFRoX0lkbGVTbG90OworCisJdTE2ICAgICBUbXJfQWdpbmc7CisJdTggICAgICBUaF9QckludGVyZjsKKwl1OCAgICAgIFRtcl9QZXJpb2RpYzsKKworCS8vLS0tLS0tLS0tICAgICAgICB3a2NoZW4gYWRkZWQgICAgICAtLS0tLS0tLS0tLS0tCisJdTMyCQlUeEZsb3dDb3VudDsJLy90byBqdWRnZSB3aGF0IGtpbmQgdGhlIHR4IGZsb3coc3BhcnNlIG9yIGJ1c3kpIGlzCisJLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworCS8vLS0tLS0tLS0tIERUTyB0aHJlc2hvbGQgcGFyYW1ldGVycyAtLS0tLS0tLS0tLS0tCisJdTE2CQlEVE9fUGVyaW9kaWNDaGVja0N5Y2xlOworCXUxNgkJRFRPX1Jzc2lUaEZvckFudERpdjsKKworCXUxNgkJRFRPX1R4Q291bnRUaEZvckNhbGNOZXdSYXRlOworCXUxNgkJRFRPX1R4UmF0ZUluY1RoOworCisJdTE2CQlEVE9fVHhSYXRlRGVjVGg7CisJdTE2CQlEVE9fVHhSYXRlRXFUaDsKKworCXUxNgkJRFRPX1R4UmF0ZUJhY2tPZmY7CisJdTE2CQlEVE9fVHhSZXRyeVJhdGVSZWR1Y2U7CisKKwl1MTYJCURUT19UeFBvd2VySW5kZXg7CS8vMCB+IDMxCisJdTE2CQlyZXNlcnZlZF8xOworCS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKwl1OCAgICAgIFBvd2VyQ2hhbmdlRW5hYmxlOworCXU4ICAgICAgQW50RGl2ZXJzaXR5RW5hYmxlOworCXU4ICAgICAgQW50X21hYzsKKwl1OCAgICAgIEFudF9kaXY7CisKKwl1OCAgICAgIENDQV9Nb2RlOworCXU4ICAgICAgQ0NBX01vZGVfU2V0dXA7CisJdTggICAgICBQcmVhbWJsZV9UeXBlOworCXU4ICAgICAgUHJlYW1ibGVDaGFuZ2VFbmFibGU7CisKKwl1OCAgICAgIERhdGFSYXRlTGV2ZWw7CisJdTggICAgICBEYXRhUmF0ZUNoYW5nZUVuYWJsZTsKKwl1OCAgICAgIEZyYWdUaHJlc2hvbGRMZXZlbDsKKwl1OCAgICAgIEZyYWdUaHJlc2hvbGRDaGFuZ2VFbmFibGU7CisKKwl1MTYgICAgIFJUU1RocmVzaG9sZDsKKwl1MTYgICAgIFJUU1RocmVzaG9sZF9TZXR1cDsKKworCXUzMiAgICAgQXZnSWRsZVNsb3Q7CisJdTMyICAgICBQcl9JbnRlcmY7CisJdTMyICAgICBBdmdHYXBCdHduSW50ZXJmOworCisJdTgJICAgUlRTQ2hhbmdlRW5hYmxlOworCXU4ICAgICAgQW50X3NlbDsKKwl1OCAgICAgIGFnaW5nX3RpbWVvdXQ7CisJdTgJICAgcmVzZXJ2ZWRfMjsKKworCXUzMiAgICAgQ250X0FudFsyXTsKKwl1MzIgICAgIFNRX0FudFsyXTsKKworLy8gMjAwNDA1MTAgcmVtb3ZlIGZyb20gZ2xvYmUgdmFpcmFibGUKKwl1MzIgICAgICAgICAgICAgICAgICAgICBUbXJDbnQ7CisJdTMyICAgICAgICAgICAgICAgICAgICAgQmFja29mZlRtcjsKKwlUT0dHTEVfU1RBVEUgICAgICAgICAgICBUb2dnbGVTdGF0ZTsKKwlUWF9SQVRFX1JFRFVDVElPTl9TVEFURSBUeFJhdGVSZWR1Y3Rpb25TdGF0ZTsKKworCXU4ICAgICAgICAgICAgICAgICAgICAgIExhc3RfUmF0ZTsKKwl1OCAgICAgICAgICAgICAgICAgICAgICBDb19lZmZpY2VudDsKKwl1OAkJRmFsbGJhY2tSYXRlTGV2ZWw7CisJdTgJCU9mZG1SYXRlTGV2ZWw7CisKKwl1OAkJUmF0ZVBvbGljeTsKKwl1OAkJcmVzZXJ2ZWRfM1szXTsKKworCS8vIEZvciBSU1NJIHR1cm5pbmcKKwlzMzIJCVJTU0lfaGlnaDsKKwlzMzIJCVJTU0lfbG93OworCit9IE1UT19QQVJBTUVURVJTLCAqUE1UT19QQVJBTUVURVJTOworCisKKyNkZWZpbmUgTVRPX0ZVTkNfSU5QVVQgICAgICAgICAgICAgIFBXQjMyX0FEQVBURVIJQWRhcHRlcgorI2RlZmluZSBNVE9fRlVOQ19JTlBVVF9EQVRBICAgICAgICAgQWRhcHRlcgorI2RlZmluZSBNVE9fREFUQSgpICAgICAgICAgICAgICAgICAgKEFkYXB0ZXItPnNNdG9QYXJhKQorI2RlZmluZSBNVE9fSEFMKCkgICAgICAgICAgICAgICAgICAgKCZBZGFwdGVyLT5zSHdEYXRhKQorI2RlZmluZSBNVE9fU0VUX1BSRUFNQkxFX1RZUEUoeCkgICAgLy8gMjAwNDA1MTEgVHVyYm8gbWFyayBMTV9QUkVBTUJMRV9UWVBFKCZwY29yZV9kYXRhLT5sbV9kYXRhKSA9ICh4KQorI2RlZmluZSBNVE9fRU5BQkxFCQkJCQkoQWRhcHRlci0+c0xvY2FsUGFyYS5UeFJhdGVNb2RlID09IFJBVEVfQVVUTykKKyNkZWZpbmUgTVRPX1RYUE9XRVJfRlJPTV9FRVBST00JCShBZGFwdGVyLT5zSHdEYXRhLlBvd2VySW5kZXhGcm9tRUVQUk9NKQorI2RlZmluZSBMT0NBTF9BTlRFTk5BX05PKCkJCQkoQWRhcHRlci0+c0xvY2FsUGFyYS5iQW50ZW5uYU5vKQorI2RlZmluZSBMT0NBTF9JU19DT05ORUNURUQoKQkJKEFkYXB0ZXItPnNMb2NhbFBhcmEud0Nvbm5lY3RlZFNUQWluZGV4ICE9IDApCisjZGVmaW5lIExPQ0FMX0lTX0lCU1NfTU9ERSgpCQkoQWRhcHRlci0+YXNCU1NEZXNjcmlwdEVsZW1lbnRbQWRhcHRlci0+c0xvY2FsUGFyYS53Q29ubmVjdGVkU1RBaW5kZXhdLmJCc3NUeXBlID09IElCU1NfTkVUKQorI2RlZmluZSBNVE9fSU5JVFRYUkFURV9NT0RFCQkJKEFkYXB0ZXItPnNId0RhdGEuU29mdHdhcmVTZXQmMHgyKQkvL2JpdCAxCisvLyAyMDA0MDUxMCBUdXJibyBhZGQKKyNkZWZpbmUgTVRPX1RNUl9DTlQoKSAgICAgICAgICAgICAgIE1UT19EQVRBKCkuVG1yQ250CisjZGVmaW5lIE1UT19UT0dHTEVfU1RBVEUoKSAgICAgICAgICBNVE9fREFUQSgpLlRvZ2dsZVN0YXRlCisjZGVmaW5lIE1UT19UWF9SQVRFX1JFRFVDVElPTl9TVEFURSgpIE1UT19EQVRBKCkuVHhSYXRlUmVkdWN0aW9uU3RhdGUKKyNkZWZpbmUgTVRPX0JBQ0tPRkZfVE1SKCkgICAgICAgICAgIE1UT19EQVRBKCkuQmFja29mZlRtcgorI2RlZmluZSBNVE9fTEFTVF9SQVRFKCkgICAgICAgICAgICAgTVRPX0RBVEEoKS5MYXN0X1JhdGUKKyNkZWZpbmUgTVRPX0NPX0VGRklDRU5UKCkgICAgICAgICAgIE1UT19EQVRBKCkuQ29fZWZmaWNlbnQKKworI2RlZmluZSBNVE9fVEhfQ05UKCkgICAgICAgICAgICAgICAgTVRPX0RBVEEoKS5UaF9DbnQKKyNkZWZpbmUgTVRPX1RIX1NRMygpICAgICAgICAgICAgICAgIE1UT19EQVRBKCkuVGhfU1EzCisjZGVmaW5lIE1UT19USF9JRExFX1NMT1QoKSAgICAgICAgICBNVE9fREFUQSgpLlRoX0lkbGVTbG90CisjZGVmaW5lIE1UT19USF9QUl9JTlRFUkYoKSAgICAgICAgICBNVE9fREFUQSgpLlRoX1BySW50ZXJmCisKKyNkZWZpbmUgTVRPX1RNUl9BR0lORygpICAgICAgICAgICAgIE1UT19EQVRBKCkuVG1yX0FnaW5nCisjZGVmaW5lIE1UT19UTVJfUEVSSU9ESUMoKSAgICAgICAgICBNVE9fREFUQSgpLlRtcl9QZXJpb2RpYworCisjZGVmaW5lIE1UT19QT1dFUl9DSEFOR0VfRU5BQkxFKCkgICBNVE9fREFUQSgpLlBvd2VyQ2hhbmdlRW5hYmxlCisjZGVmaW5lIE1UT19BTlRfRElWRVJTSVRZX0VOQUJMRSgpICBBZGFwdGVyLT5zTG9jYWxQYXJhLmJvQW50ZW5uYURpdmVyc2l0eQorI2RlZmluZSBNVE9fQU5UX01BQygpICAgICAgICAgICAgICAgTVRPX0RBVEEoKS5BbnRfbWFjCisjZGVmaW5lIE1UT19BTlRfRElWRVJTSVRZKCkgICAgICAgICBNVE9fREFUQSgpLkFudF9kaXYKKyNkZWZpbmUgTVRPX0NDQV9NT0RFKCkgICAgICAgICAgICAgIE1UT19EQVRBKCkuQ0NBX01vZGUKKyNkZWZpbmUgTVRPX0NDQV9NT0RFX1NFVFVQKCkgICAgICAgIE1UT19EQVRBKCkuQ0NBX01vZGVfU2V0dXAKKyNkZWZpbmUgTVRPX1BSRUFNQkxFX1RZUEUoKSAgICAgICAgIE1UT19EQVRBKCkuUHJlYW1ibGVfVHlwZQorI2RlZmluZSBNVE9fUFJFQU1CTEVfQ0hBTkdFX0VOQUJMRSgpICAgICAgICAgTVRPX0RBVEEoKS5QcmVhbWJsZUNoYW5nZUVuYWJsZQorCisjZGVmaW5lIE1UT19SQVRFX0xFVkVMKCkgICAgICAgICAgICBNVE9fREFUQSgpLkRhdGFSYXRlTGV2ZWwKKyNkZWZpbmUgTVRPX0ZBTExCQUNLX1JBVEVfTEVWRUwoKQlNVE9fREFUQSgpLkZhbGxiYWNrUmF0ZUxldmVsCisjZGVmaW5lIE1UT19PRkRNX1JBVEVfTEVWRUwoKQkJTVRPX0RBVEEoKS5PZmRtUmF0ZUxldmVsCisjZGVmaW5lIE1UT19SQVRFX0NIQU5HRV9FTkFCTEUoKSAgICBNVE9fREFUQSgpLkRhdGFSYXRlQ2hhbmdlRW5hYmxlCisjZGVmaW5lIE1UT19GUkFHX1RIX0xFVkVMKCkgICAgICAgICBNVE9fREFUQSgpLkZyYWdUaHJlc2hvbGRMZXZlbAorI2RlZmluZSBNVE9fRlJBR19DSEFOR0VfRU5BQkxFKCkgICAgTVRPX0RBVEEoKS5GcmFnVGhyZXNob2xkQ2hhbmdlRW5hYmxlCisjZGVmaW5lIE1UT19SVFNfVEhSRVNIT0xEKCkgICAgICAgICBNVE9fREFUQSgpLlJUU1RocmVzaG9sZAorI2RlZmluZSBNVE9fUlRTX0NIQU5HRV9FTkFCTEUoKSAgICAgTVRPX0RBVEEoKS5SVFNDaGFuZ2VFbmFibGUKKyNkZWZpbmUgTVRPX1JUU19USFJFU0hPTERfU0VUVVAoKSAgIE1UT19EQVRBKCkuUlRTVGhyZXNob2xkX1NldHVwCisKKyNkZWZpbmUgTVRPX0FWR19JRExFX1NMT1QoKSAgICAgICAgIE1UT19EQVRBKCkuQXZnSWRsZVNsb3QKKyNkZWZpbmUgTVRPX1BSX0lOVEVSRigpICAgICAgICAgICAgIE1UT19EQVRBKCkuUHJfSW50ZXJmCisjZGVmaW5lIE1UT19BVkdfR0FQX0JUV05fSU5URVJGKCkgICBNVE9fREFUQSgpLkF2Z0dhcEJ0d25JbnRlcmYKKworI2RlZmluZSBNVE9fQU5UX1NFTCgpICAgICAgICAgICAgICAgTVRPX0RBVEEoKS5BbnRfc2VsCisjZGVmaW5lIE1UT19DTlRfQU5UKHgpICAgICAgICAgICAgICBNVE9fREFUQSgpLkNudF9BbnRbKHgpXQorI2RlZmluZSBNVE9fU1FfQU5UKHgpICAgICAgICAgICAgICAgTVRPX0RBVEEoKS5TUV9BbnRbKHgpXQorI2RlZmluZSBNVE9fQUdJTkdfVElNRU9VVCgpICAgICAgICAgTVRPX0RBVEEoKS5hZ2luZ190aW1lb3V0CisKKworI2RlZmluZSBNVE9fVFhGTE9XQ09VTlQoKQkJCU1UT19EQVRBKCkuVHhGbG93Q291bnQKKy8vLS0tLS0tLS0tIERUTyB0aHJlc2hvbGQgcGFyYW1ldGVycyAtLS0tLS0tLS0tLS0tCisjZGVmaW5lCU1UT1BBUkFfUEVSSU9ESUNfQ0hFQ0tfQ1lDTEUoKQkJTVRPX0RBVEEoKS5EVE9fUGVyaW9kaWNDaGVja0N5Y2xlCisjZGVmaW5lCU1UT1BBUkFfUlNTSV9USF9GT1JfQU5URElWKCkJCU1UT19EQVRBKCkuRFRPX1Jzc2lUaEZvckFudERpdgorI2RlZmluZQlNVE9QQVJBX1RYQ09VTlRfVEhfRk9SX0NBTENfUkFURSgpCU1UT19EQVRBKCkuRFRPX1R4Q291bnRUaEZvckNhbGNOZXdSYXRlCisjZGVmaW5lCU1UT1BBUkFfVFhSQVRFX0lOQ19USCgpCQkJTVRPX0RBVEEoKS5EVE9fVHhSYXRlSW5jVGgKKyNkZWZpbmUJTVRPUEFSQV9UWFJBVEVfREVDX1RIKCkJCQlNVE9fREFUQSgpLkRUT19UeFJhdGVEZWNUaAorI2RlZmluZSBNVE9QQVJBX1RYUkFURV9FUV9USCgpCQkJTVRPX0RBVEEoKS5EVE9fVHhSYXRlRXFUaAorI2RlZmluZQlNVE9QQVJBX1RYUkFURV9CQUNLT0ZGKCkJCU1UT19EQVRBKCkuRFRPX1R4UmF0ZUJhY2tPZmYKKyNkZWZpbmUJTVRPUEFSQV9UWFJFVFJZUkFURV9SRURVQ0UoKQkJTVRPX0RBVEEoKS5EVE9fVHhSZXRyeVJhdGVSZWR1Y2UKKyNkZWZpbmUgTVRPUEFSQV9UWFBPV0VSX0lOREVYKCkJCQlNVE9fREFUQSgpLkRUT19UeFBvd2VySW5kZXgKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKworZXh0ZXJuIHU4ICAgTVRPX0RhdGFfUmF0ZV9UYmxbXTsKK2V4dGVybiB1MTYgIE1UT19GcmFnX1RoX1RibFtdOworCisjZGVmaW5lIE1UT19EQVRBX1JBVEUoKSAgICAgICAgICBNVE9fRGF0YV9SYXRlX1RibFtNVE9fUkFURV9MRVZFTCgpXQorI2RlZmluZSBNVE9fREFUQV9GQUxMQkFDS19SQVRFKCkgTVRPX0RhdGFfUmF0ZV9UYmxbTVRPX0ZBTExCQUNLX1JBVEVfTEVWRUwoKV0JLy9uZXh0IGxldmVsCisjZGVmaW5lIE1UT19GUkFHX1RIKCkgICAgICAgICAgICBNVE9fRnJhZ19UaF9UYmxbTVRPX0ZSQUdfVEhfTEVWRUwoKV0KKwordHlwZWRlZiBzdHJ1Y3QgeworCXU4IHR4X3JhdGU7CisJdTggdHhfcmV0cnlfcmF0ZTsKK30gVFhSRVRSWV9SRUM7CisKK3R5cGVkZWYgc3RydWN0IF9TVEFUSVNUSUNTX0lORk8geworCXUzMiAgIFJhdGU1NE07CisJdTMyICAgUmF0ZTQ4TTsKKwl1MzIgICBSYXRlMzZNOworCXUzMiAgIFJhdGUyNE07CisJdTMyICAgUmF0ZTE4TTsKKwl1MzIgICBSYXRlMTJNOworCXUzMiAgIFJhdGU5TTsKKwl1MzIgICBSYXRlNk07CisJdTMyICAgUmF0ZTExTVM7CisJdTMyICAgUmF0ZTExTUw7CisJdTMyICAgUmF0ZTU1TVM7CisJdTMyICAgUmF0ZTU1TUw7CisJdTMyICAgUmF0ZTJNUzsKKwl1MzIgICBSYXRlMk1MOworCXUzMiAgIFJhdGUxTTsKKwl1MzIgICBSYXRlNTRNT0s7CisJdTMyICAgUmF0ZTQ4TU9LOworCXUzMiAgIFJhdGUzNk1PSzsKKwl1MzIgICBSYXRlMjRNT0s7CisJdTMyICAgUmF0ZTE4TU9LOworCXUzMiAgIFJhdGUxMk1PSzsKKwl1MzIgICBSYXRlOU1PSzsKKwl1MzIgICBSYXRlNk1PSzsKKwl1MzIgICBSYXRlMTFNU09LOworCXUzMiAgIFJhdGUxMU1MT0s7CisJdTMyICAgUmF0ZTU1TVNPSzsKKwl1MzIgICBSYXRlNTVNTE9LOworCXUzMiAgIFJhdGUyTVNPSzsKKwl1MzIgICBSYXRlMk1MT0s7CisJdTMyICAgUmF0ZTFNT0s7CisJdTMyICAgU1EzOworCXMzMiAgIFJTU0lBVkc7CisJczMyICAgUlNTSU1BWDsKKwlzMzIgICBUWFJBVEU7CisJczMyICAgVHhSZXRyeVJhdGU7CisJczMyICAgQlNTX1BLX0NOVDsKKwlzMzIgICBOSURMRVNMT1Q7CisJczMyICAgU0xPVF9DTlQ7CisJczMyICAgSU5URVJGX0NOVDsKKwlzMzIgICBHQVBfQ05UOworCXMzMiAgIERTX0VWTTsKKwlzMzIgICBSY3ZCZWFjb25OdW07CisJczMyICAgUlhSQVRFOworCXMzMiAgIFJ4Qnl0ZXM7CisJczMyICAgVHhCeXRlczsKKwlzMzIgICBBbnRlbm5hOworfSBTVEFUSVNUSUNTX0lORk8sICpQU1RBVElTVElDU19JTkZPOworCisjZW5kaWYgLy9fX01UT19IX18KKworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9tdG9fZi5oIGIvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvbXRvX2YuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMGIzZGYyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvbXRvX2YuaApAQCAtMCwwICsxLDcgQEAKK2V4dGVybiB2b2lkIE1UT19Jbml0KFBXQjMyX0FEQVBURVIpOworZXh0ZXJuIHZvaWQgTVRPX1BlcmlvZGljVGltZXJFeHBpcmVkKFBXQjMyX0FEQVBURVIpOworZXh0ZXJuIHZvaWQgTVRPX1NldERUT1JhdGVSYW5nZShQV0IzMl9BREFQVEVSLCB1OCAqLCB1OCk7CitleHRlcm4gdTggTVRPX0dldFR4UmF0ZShNVE9fRlVOQ19JTlBVVCwgdTMyIGZwZHVfbGVuKTsKK2V4dGVybiB1OCBNVE9fR2V0VHhGYWxsYmFja1JhdGUoTVRPX0ZVTkNfSU5QVVQpOworZXh0ZXJuIHZvaWQgTVRPX1NldFR4Q291bnQoTVRPX0ZVTkNfSU5QVVQsIHU4IHQwLCB1OCBpbmRleCk7CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL29zX2NvbW1vbi5oIGIvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvb3NfY29tbW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTI0ZmY0MQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL29zX2NvbW1vbi5oCkBAIC0wLDAgKzEsMiBAQAorI2luY2x1ZGUgImxpbnV4L3N5c2RlZi5oIgorCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9waHlfY2FsaWJyYXRpb24uYyBiL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL3BoeV9jYWxpYnJhdGlvbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI3MmE2NTAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9waHlfY2FsaWJyYXRpb24uYwpAQCAtMCwwICsxLDE3NTkgQEAKKy8qCisgKiBwaHlfMzAyX2NhbGlicmF0aW9uLmMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDIsIDIwMDUgIFdpbmJvbmQgRWxlY3Ryb25pY3MgQ29ycC4KKyAqCisgKiBtb2RpZmljYXRpb24gaGlzdG9yeQorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiAwLjAxLjAwMSwgMjAwMy0wNC0xNiwgS2V2aW4gICAgICBjcmVhdGVkCisgKgorICovCisKKy8qKioqKioqKioqKioqKioqKiogSU5DTFVERSBGSUxFUyBTRUNUSU9OICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2luY2x1ZGUgIm9zX2NvbW1vbi5oIgorI2luY2x1ZGUgInBoeV9jYWxpYnJhdGlvbi5oIgorCisKKy8qKioqKioqKioqKioqKioqKiogREVCVUcgQ09OU1RBTlQgQU5EIE1BQ1JPIFNFQ1RJT04gKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqIExPQ0FMIENPTlNUQU5UIEFORCBNQUNSTyBTRUNUSU9OICoqKioqKioqKioqKioqKioqKioqKioqKi8KKyNkZWZpbmUgTE9PUF9USU1FUyAgICAgIDIwCisjZGVmaW5lIFVTICAgICAgICAgICAgICAxMDAwLy9NSUNST1NFQ09ORAorCisjZGVmaW5lIEFHX0NPTlNUICAgICAgICAwLjYwNzI1MjkzNTAKKyNkZWZpbmUgRklYRUQoWCkgICAgICAgICgoczMyKSgoWCkgKiAzMjc2OC4wKSkKKyNkZWZpbmUgREVHMlJBRChYKSAgICAgIDAuMDE3NDUzICogKFgpCisKKy8qKioqKioqKioqKioqKioqKiogTE9DQUwgVFlQRSBERUZJTklUSU9OIFNFQ1RJT04gKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordHlwZWRlZiBzMzIgICAgICAgICBmaXhlZDsgLyogMTYuMTYgZml4ZWQtcG9pbnQgKi8KKworc3RhdGljIGNvbnN0IGZpeGVkIEFuZ2xlc1tdPQoreworICAgIEZJWEVEKERFRzJSQUQoNDUuMCkpLCAgICBGSVhFRChERUcyUkFEKDI2LjU2NSkpLCAgRklYRUQoREVHMlJBRCgxNC4wMzYyKSksCisgICAgRklYRUQoREVHMlJBRCg3LjEyNTAyKSksIEZJWEVEKERFRzJSQUQoMy41NzYzMykpLCBGSVhFRChERUcyUkFEKDEuNzg5OTEpKSwKKyAgICBGSVhFRChERUcyUkFEKDAuODk1MTc0KSksRklYRUQoREVHMlJBRCgwLjQ0NzYxNCkpLEZJWEVEKERFRzJSQUQoMC4yMjM4MTEpKSwKKyAgICBGSVhFRChERUcyUkFEKDAuMTExOTA2KSksRklYRUQoREVHMlJBRCgwLjA1NTk1MykpLEZJWEVEKERFRzJSQUQoMC4wMjc5NzcpKQorfTsKKworLyoqKioqKioqKioqKioqKioqKiBMT0NBTCBGVU5DVElPTiBERUNMQVJBVElPTiBTRUNUSU9OICoqKioqKioqKioqKioqKioqKioqKiovCisvL3ZvaWQgICAgX3BoeV9yZl93cml0ZV9kZWxheShod19kYXRhX3QgKnBod19kYXRhKTsKKy8vdm9pZCAgICBwaHlfaW5pdF9yZihod19kYXRhX3QgKnBod19kYXRhKTsKKworLyoqKioqKioqKioqKioqKioqKiBGVU5DVElPTiBERUZJTklUSU9OIFNFQ1RJT04gKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3MzMiBfczEzX3RvX3MzMih1MzIgZGF0YSkKK3sKKyAgICB1MzIgICAgIHZhbDsKKworICAgIHZhbCA9IChkYXRhICYgMHgwRkZGKTsKKworICAgIGlmICgoZGF0YSAmIEJJVCgxMikpICE9IDApCisgICAgeworICAgICAgICB2YWwgfD0gMHhGRkZGRjAwMDsKKyAgICB9CisKKyAgICByZXR1cm4gKChzMzIpIHZhbCk7Cit9CisKK3UzMiBfczMyX3RvX3MxMyhzMzIgZGF0YSkKK3sKKyAgICB1MzIgICAgIHZhbDsKKworICAgIGlmIChkYXRhID4gNDA5NSkKKyAgICB7CisgICAgICAgIGRhdGEgPSA0MDk1OworICAgIH0KKyAgICBlbHNlIGlmIChkYXRhIDwgLTQwOTYpCisgICAgeworICAgICAgICBkYXRhID0gLTQwOTY7CisgICAgfQorCisgICAgdmFsID0gZGF0YSAmIDB4MUZGRjsKKworICAgIHJldHVybiB2YWw7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworczMyIF9zNF90b19zMzIodTMyIGRhdGEpCit7CisgICAgczMyICAgICB2YWw7CisKKyAgICB2YWwgPSAoZGF0YSAmIDB4MDAwNyk7CisKKyAgICBpZiAoKGRhdGEgJiBCSVQoMykpICE9IDApCisgICAgeworICAgICAgICB2YWwgfD0gMHhGRkZGRkZGODsKKyAgICB9CisKKyAgICByZXR1cm4gdmFsOworfQorCit1MzIgX3MzMl90b19zNChzMzIgZGF0YSkKK3sKKyAgICB1MzIgICAgIHZhbDsKKworICAgIGlmIChkYXRhID4gNykKKyAgICB7CisgICAgICAgIGRhdGEgPSA3OworICAgIH0KKyAgICBlbHNlIGlmIChkYXRhIDwgLTgpCisgICAgeworICAgICAgICBkYXRhID0gLTg7CisgICAgfQorCisgICAgdmFsID0gZGF0YSAmIDB4MDAwRjsKKworICAgIHJldHVybiB2YWw7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworczMyIF9zNV90b19zMzIodTMyIGRhdGEpCit7CisgICAgczMyICAgICB2YWw7CisKKyAgICB2YWwgPSAoZGF0YSAmIDB4MDAwRik7CisKKyAgICBpZiAoKGRhdGEgJiBCSVQoNCkpICE9IDApCisgICAgeworICAgICAgICB2YWwgfD0gMHhGRkZGRkZGMDsKKyAgICB9CisKKyAgICByZXR1cm4gdmFsOworfQorCit1MzIgX3MzMl90b19zNShzMzIgZGF0YSkKK3sKKyAgICB1MzIgICAgIHZhbDsKKworICAgIGlmIChkYXRhID4gMTUpCisgICAgeworICAgICAgICBkYXRhID0gMTU7CisgICAgfQorICAgIGVsc2UgaWYgKGRhdGEgPCAtMTYpCisgICAgeworICAgICAgICBkYXRhID0gLTE2OworICAgIH0KKworICAgIHZhbCA9IGRhdGEgJiAweDAwMUY7CisKKyAgICByZXR1cm4gdmFsOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3MzMiBfczZfdG9fczMyKHUzMiBkYXRhKQoreworICAgIHMzMiAgICAgdmFsOworCisgICAgdmFsID0gKGRhdGEgJiAweDAwMUYpOworCisgICAgaWYgKChkYXRhICYgQklUKDUpKSAhPSAwKQorICAgIHsKKyAgICAgICAgdmFsIHw9IDB4RkZGRkZGRTA7CisgICAgfQorCisgICAgcmV0dXJuIHZhbDsKK30KKwordTMyIF9zMzJfdG9fczYoczMyIGRhdGEpCit7CisgICAgdTMyICAgICB2YWw7CisKKyAgICBpZiAoZGF0YSA+IDMxKQorICAgIHsKKyAgICAgICAgZGF0YSA9IDMxOworICAgIH0KKyAgICBlbHNlIGlmIChkYXRhIDwgLTMyKQorICAgIHsKKyAgICAgICAgZGF0YSA9IC0zMjsKKyAgICB9CisKKyAgICB2YWwgPSBkYXRhICYgMHgwMDNGOworCisgICAgcmV0dXJuIHZhbDsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzMzIgX3M5X3RvX3MzMih1MzIgZGF0YSkKK3sKKyAgICBzMzIgICAgIHZhbDsKKworICAgIHZhbCA9IGRhdGEgJiAweDAwRkY7CisKKyAgICBpZiAoKGRhdGEgJiBCSVQoOCkpICE9IDApCisgICAgeworICAgICAgICB2YWwgfD0gMHhGRkZGRkYwMDsKKyAgICB9CisKKyAgICByZXR1cm4gdmFsOworfQorCit1MzIgX3MzMl90b19zOShzMzIgZGF0YSkKK3sKKyAgICB1MzIgICAgIHZhbDsKKworICAgIGlmIChkYXRhID4gMjU1KQorICAgIHsKKyAgICAgICAgZGF0YSA9IDI1NTsKKyAgICB9CisgICAgZWxzZSBpZiAoZGF0YSA8IC0yNTYpCisgICAgeworICAgICAgICBkYXRhID0gLTI1NjsKKyAgICB9CisKKyAgICB2YWwgPSBkYXRhICYgMHgwMUZGOworCisgICAgcmV0dXJuIHZhbDsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzMzIgX2Zsb29yKHMzMiBuKQoreworICAgIGlmIChuID4gMCkKKyAgICB7CisgICAgICAgIG4gKz0gNTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgbiAtPSA1OworICAgIH0KKworICAgIHJldHVybiAobi8xMCk7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLy8gVGhlIGZvbGxvd2luZyBjb2RlIGlzIHNxYXJlLXJvb3QgZnVuY3Rpb24uCisvLyBzcXN1bSBpcyB0aGUgaW5wdXQgYW5kIHRoZSBvdXRwdXQgaXMgc3FfcnQ7CisvLyBUaGUgbWF4aW11bSBvZiBzcXN1bSA9IDJeMjcgLTE7Cit1MzIgX3NxcnQodTMyIHNxc3VtKQoreworICAgIHUzMiAgICAgc3FfcnQ7CisKKyAgICBpbnQgICAgIGcwLCBnMSwgZzIsIGczLCBnNDsKKyAgICBpbnQgICAgIHNlZWQ7CisgICAgaW50ICAgICBuZXh0OworICAgIGludCAgICAgc3RlcDsKKworICAgIGc0ID0gIHNxc3VtIC8gMTAwMDAwMDAwOworICAgIGczID0gKHNxc3VtIC0gZzQqMTAwMDAwMDAwKSAvMTAwMDAwMDsKKyAgICBnMiA9IChzcXN1bSAtIGc0KjEwMDAwMDAwMCAtIGczKjEwMDAwMDApIC8xMDAwMDsKKyAgICBnMSA9IChzcXN1bSAtIGc0KjEwMDAwMDAwMCAtIGczKjEwMDAwMDAgLSBnMioxMDAwMCkgLzEwMDsKKyAgICBnMCA9IChzcXN1bSAtIGc0KjEwMDAwMDAwMCAtIGczKjEwMDAwMDAgLSBnMioxMDAwMCAtIGcxKjEwMCk7CisKKyAgICBuZXh0ID0gZzQ7CisgICAgc3RlcCA9IDA7CisgICAgc2VlZCA9IDA7CisgICAgd2hpbGUgKCgoc2VlZCsxKSooc3RlcCsxKSkgPD0gbmV4dCkKKyAgICB7CisgICAgCXN0ZXArKzsKKyAgICAJc2VlZCsrOworICAgIH0KKworICAgIHNxX3J0ID0gc2VlZCAqIDEwMDAwOworICAgIG5leHQgPSAobmV4dC0oc2VlZCpzdGVwKSkqMTAwICsgZzM7CisKKyAgICBzdGVwID0gMDsKKyAgICBzZWVkID0gMiAqIHNlZWQgKiAxMDsKKyAgICB3aGlsZSAoKChzZWVkKzEpKihzdGVwKzEpKSA8PSBuZXh0KQorICAgIHsKKyAgICAgICAgc3RlcCsrOworICAgIAlzZWVkKys7CisgICAgfQorCisgICAgc3FfcnQgPSBzcV9ydCArIHN0ZXAgKiAxMDAwOworICAgIG5leHQgPSAobmV4dCAtIHNlZWQgKiBzdGVwKSAqIDEwMCArIGcyOworICAgIHNlZWQgPSAoc2VlZCArIHN0ZXApICogMTA7CisgICAgc3RlcCA9IDA7CisgICAgd2hpbGUgKCgoc2VlZCsxKSooc3RlcCsxKSkgPD0gbmV4dCkKKyAgICB7CisgICAgICAgIHN0ZXArKzsKKyAgICAJc2VlZCsrOworICAgIH0KKworICAgIHNxX3J0ID0gc3FfcnQgKyBzdGVwICogMTAwOworICAgIG5leHQgPSAobmV4dCAtIHNlZWQgKiBzdGVwKSAqIDEwMCArIGcxOworICAgIHNlZWQgPSAoc2VlZCArIHN0ZXApICogMTA7CisgICAgc3RlcCA9IDA7CisKKyAgICB3aGlsZSAoKChzZWVkKzEpKihzdGVwKzEpKSA8PSBuZXh0KQorICAgIHsKKyAgICAgICAgc3RlcCsrOworICAgIAlzZWVkKys7CisgICAgfQorCisgICAgc3FfcnQgPSBzcV9ydCArIHN0ZXAgKiAxMDsKKyAgICBuZXh0ID0gKG5leHQgLSBzZWVkKiBzdGVwKSAqIDEwMCArIGcwOworICAgIHNlZWQgPSAoc2VlZCArIHN0ZXApICogMTA7CisgICAgc3RlcCA9IDA7CisKKyAgICB3aGlsZSAoKChzZWVkKzEpKihzdGVwKzEpKSA8PSBuZXh0KQorICAgIHsKKyAgICAgICAgc3RlcCsrOworICAgIAlzZWVkKys7CisgICAgfQorCisgICAgc3FfcnQgPSBzcV9ydCArIHN0ZXA7CisKKyAgICByZXR1cm4gc3FfcnQ7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordm9pZCBfc2luX2NvcyhzMzIgYW5nbGUsIHMzMiAqc2luLCBzMzIgKmNvcykKK3sKKyAgICBmaXhlZCAgICAgICBYLCBZLCBUYXJnZXRBbmdsZSwgQ3VyckFuZ2xlOworICAgIHVuc2lnbmVkICAgIFN0ZXA7CisKKyAgICBYPUZJWEVEKEFHX0NPTlNUKTsgICAgICAvLyBBR19DT05TVCAqIGNvcygwKQorICAgIFk9MDsgICAgICAgICAgICAgICAgICAgIC8vIEFHX0NPTlNUICogc2luKDApCisgICAgVGFyZ2V0QW5nbGU9YWJzKGFuZ2xlKTsKKyAgICBDdXJyQW5nbGU9MDsKKworICAgIGZvciAoU3RlcD0wOyBTdGVwIDwgMTI7IFN0ZXArKykKKyAgICB7CisgICAgICAgIGZpeGVkIE5ld1g7CisKKyAgICAgICAgaWYoVGFyZ2V0QW5nbGUgPiBDdXJyQW5nbGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIE5ld1g9WCAtIChZID4+IFN0ZXApOworICAgICAgICAgICAgWT0oWCA+PiBTdGVwKSArIFk7CisgICAgICAgICAgICBYPU5ld1g7CisgICAgICAgICAgICBDdXJyQW5nbGUgKz0gQW5nbGVzW1N0ZXBdOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgTmV3WD1YICsgKFkgPj4gU3RlcCk7CisgICAgICAgICAgICBZPS0oWCA+PiBTdGVwKSArIFk7CisgICAgICAgICAgICBYPU5ld1g7CisgICAgICAgICAgICBDdXJyQW5nbGUgLT0gQW5nbGVzW1N0ZXBdOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKGFuZ2xlID4gMCkKKyAgICB7CisgICAgICAgICpjb3MgPSBYOworICAgICAgICAqc2luID0gWTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgKmNvcyA9IFg7CisgICAgICAgICpzaW4gPSAtWTsKKyAgICB9Cit9CisKKwordm9pZCBfcmVzZXRfcnhfY2FsKGh3X2RhdGFfdCAqcGh3X2RhdGEpCit7CisJdTMyICAgICB2YWw7CisKKwlod19nZXRfZHh4X3JlZyhwaHdfZGF0YSwgMHg1NCwgJnZhbCk7CisKKwlpZiAocGh3X2RhdGEtPnJldmlzaW9uID09IDB4MjAwMikgLy8gMXN0LWN1dAorCXsKKwkJdmFsICY9IDB4RkZGRjAwMDA7CisJfQorCWVsc2UgLy8gMm5kLWN1dAorCXsKKwkJdmFsICY9IDB4MDAwMDAzRkY7CisJfQorCisJaHdfc2V0X2R4eF9yZWcocGh3X2RhdGEsIDB4NTQsIHZhbCk7Cit9CisKKworLy8gKioqKioqKioqKioqZm9yIHdpbmJvbmQgY2FsaWJyYXRpb24qKioqKioqKioKKy8vCisKKy8vCisvLworLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCit2b2lkIF9yeGFkY19kY19vZmZzZXRfY2FuY2VsbGF0aW9uX3dpbmJvbmQoaHdfZGF0YV90ICpwaHdfZGF0YSwgdTMyIGZyZXF1ZW5jeSkKK3sKKyAgICB1MzIgICAgIHJlZ19hZ2NfY3RybDM7CisgICAgdTMyICAgICByZWdfYV9hY3FfY3RybDsKKyAgICB1MzIgICAgIHJlZ19iX2FjcV9jdHJsOworICAgIHUzMiAgICAgdmFsOworCisgICAgUEhZX0RFQlVHKCgiW0NBTF0gLT4gWzFdX3J4YWRjX2RjX29mZnNldF9jYW5jZWxsYXRpb24oKVxuIikpOworICAgIHBoeV9pbml0X3JmKHBod19kYXRhKTsKKworICAgIC8vIHNldCBjYWxpYnJhdGlvbiBjaGFubmVsCisgICAgaWYoIChSRl9XQl8yNDIgPT0gcGh3X2RhdGEtPnBoeV90eXBlKSB8fAorCQkoUkZfV0JfMjQyXzEgPT0gcGh3X2RhdGEtPnBoeV90eXBlKSApIC8vIDIwMDYwNjE5LjUgQWRkCisgICAgeworICAgICAgICBpZiAoKGZyZXF1ZW5jeSA+PSAyNDEyKSAmJiAoZnJlcXVlbmN5IDw9IDI0ODQpKQorICAgICAgICB7CisgICAgICAgICAgICAvLyB3ODlyZjI0MiBjaGFuZ2UgZnJlcXVlbmN5IHRvIDIzOTBNaHoKKyAgICAgICAgICAgIFBIWV9ERUJVRygoIltDQUxdIFc4OVJGMjQyLzExRy9DaGFubmVsPTIzOTBNaHpcbiIpKTsKKwkJCXBoeV9zZXRfcmZfZGF0YShwaHdfZGF0YSwgMywgKDM8PDI0KXwweDAyNTU4Nik7CisKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlCisJeworCisJfQorCisJLy8gcmVzZXQgY2FuY2VsX2RjX2lbOTo1XSBhbmQgY2FuY2VsX2RjX3FbNDowXSBpbiByZWdpc3RlciBEQ19DYW5jZWwKKwlod19nZXRfZHh4X3JlZyhwaHdfZGF0YSwgMHg1QywgJnZhbCk7CisJdmFsICY9IH4oMHgwM0ZGKTsKKwlod19zZXRfZHh4X3JlZyhwaHdfZGF0YSwgMHg1QywgdmFsKTsKKworCS8vIHJlc2V0IHRoZSBUWCBhbmQgUlggSVEgY2FsaWJyYXRpb24gZGF0YQorCWh3X3NldF9keHhfcmVnKHBod19kYXRhLCAweDNDLCAwKTsKKwlod19zZXRfZHh4X3JlZyhwaHdfZGF0YSwgMHg1NCwgMCk7CisKKwlod19zZXRfZHh4X3JlZyhwaHdfZGF0YSwgMHg1OCwgMHgzMDMwMzAzMCk7IC8vIElRX0FscGhhIENoYW5nZWQKKworCS8vIGEuIERpc2FibGUgQUdDCisJaHdfZ2V0X2R4eF9yZWcocGh3X2RhdGEsIFJFR19BR0NfQ1RSTDMsICZyZWdfYWdjX2N0cmwzKTsKKwlyZWdfYWdjX2N0cmwzICY9IH5CSVQoMik7CisJcmVnX2FnY19jdHJsMyB8PSAoTUFTS19MTkFfRklYX0dBSU58TUFTS19BR0NfRklYKTsKKwlod19zZXRfZHh4X3JlZyhwaHdfZGF0YSwgUkVHX0FHQ19DVFJMMywgcmVnX2FnY19jdHJsMyk7CisKKwlod19nZXRfZHh4X3JlZyhwaHdfZGF0YSwgUkVHX0FHQ19DVFJMNSwgJnZhbCk7CisJdmFsIHw9IE1BU0tfQUdDX0ZJWF9HQUlOOworCWh3X3NldF9keHhfcmVnKHBod19kYXRhLCBSRUdfQUdDX0NUUkw1LCB2YWwpOworCisJLy8gYi4gVHVybiBvZmYgQkIgUlgKKwlod19nZXRfZHh4X3JlZyhwaHdfZGF0YSwgUkVHX0FfQUNRX0NUUkwsICZyZWdfYV9hY3FfY3RybCk7CisJcmVnX2FfYWNxX2N0cmwgfD0gTUFTS19BTUVSX09GRl9SRUc7CisJaHdfc2V0X2R4eF9yZWcocGh3X2RhdGEsIFJFR19BX0FDUV9DVFJMLCByZWdfYV9hY3FfY3RybCk7CisKKwlod19nZXRfZHh4X3JlZyhwaHdfZGF0YSwgUkVHX0JfQUNRX0NUUkwsICZyZWdfYl9hY3FfY3RybCk7CisJcmVnX2JfYWNxX2N0cmwgfD0gTUFTS19CTUVSX09GRl9SRUc7CisJaHdfc2V0X2R4eF9yZWcocGh3X2RhdGEsIFJFR19CX0FDUV9DVFJMLCByZWdfYl9hY3FfY3RybCk7CisKKwkvLyBjLiBNYWtlIHN1cmUgTUFDIGlzIGluIHJlY2VpdmluZyBtb2RlCisJLy8gZC4gVHVybiBPTiBBREMgY2FsaWJyYXRpb24KKwkvLyAgICAtIEFEQyBjYWxpYnJhdG9yIGlzIHRyaWdnZXJlZCBieSB0aGlzIHNpZ25hbCByaXNpbmcgZnJvbSAwIHRvIDEKKwlod19nZXRfZHh4X3JlZyhwaHdfZGF0YSwgUkVHX01PREVfQ1RSTCwgJnZhbCk7CisJdmFsICY9IH5NQVNLX0FEQ19EQ19DQUxfU1RSOworCWh3X3NldF9keHhfcmVnKHBod19kYXRhLCBSRUdfTU9ERV9DVFJMLCB2YWwpOworCisJdmFsIHw9IE1BU0tfQURDX0RDX0NBTF9TVFI7CisJaHdfc2V0X2R4eF9yZWcocGh3X2RhdGEsIFJFR19NT0RFX0NUUkwsIHZhbCk7CisJcGFfc3RhbGxfZXhlY3V0aW9uKFVTKTsgLy8gKk1VU1QqIHdhaXQgZm9yIGEgd2hpbGUKKworCS8vIGUuIFRoZSByZXN1bHQgYXJlIHNob3duIGluICJhZGNfZGNfY2FsX2lbODowXSBhbmQgYWRjX2RjX2NhbF9xWzg6MF0iCisjaWZkZWYgX0RFQlVHCisJaHdfZ2V0X2R4eF9yZWcocGh3X2RhdGEsIFJFR19PRkZTRVRfUkVBRCwgJnZhbCk7CisJUEhZX0RFQlVHKCgiW0NBTF0gICAgUkVHX09GRlNFVF9SRUFEID0gMHglMDhYXG4iLCB2YWwpKTsKKworCVBIWV9ERUJVRygoIltDQUxdICAgICoqIGFkY19kY19jYWxfaSA9ICVkICgweCUwNFgpXG4iLAorCQkJICAgX3M5X3RvX3MzMih2YWwmMHgwMDAwMDFGRiksIHZhbCYweDAwMDAwMUZGKSk7CisJUEhZX0RFQlVHKCgiW0NBTF0gICAgKiogYWRjX2RjX2NhbF9xID0gJWQgKDB4JTA0WClcbiIsCisJCQkgICBfczlfdG9fczMyKCh2YWwmMHgwMDAzRkUwMCk+PjkpLCAodmFsJjB4MDAwM0ZFMDApPj45KSk7CisjZW5kaWYKKworCWh3X2dldF9keHhfcmVnKHBod19kYXRhLCBSRUdfTU9ERV9DVFJMLCAmdmFsKTsKKwl2YWwgJj0gfk1BU0tfQURDX0RDX0NBTF9TVFI7CisJaHdfc2V0X2R4eF9yZWcocGh3X2RhdGEsIFJFR19NT0RFX0NUUkwsIHZhbCk7CisKKwkvLyBmLiBUdXJuIG9uIEJCIFJYCisJLy9od19nZXRfZHh4X3JlZyhwaHdfZGF0YSwgUkVHX0FfQUNRX0NUUkwsICZyZWdfYV9hY3FfY3RybCk7CisJcmVnX2FfYWNxX2N0cmwgJj0gfk1BU0tfQU1FUl9PRkZfUkVHOworCWh3X3NldF9keHhfcmVnKHBod19kYXRhLCBSRUdfQV9BQ1FfQ1RSTCwgcmVnX2FfYWNxX2N0cmwpOworCisJLy9od19nZXRfZHh4X3JlZyhwaHdfZGF0YSwgUkVHX0JfQUNRX0NUUkwsICZyZWdfYl9hY3FfY3RybCk7CisJcmVnX2JfYWNxX2N0cmwgJj0gfk1BU0tfQk1FUl9PRkZfUkVHOworCWh3X3NldF9keHhfcmVnKHBod19kYXRhLCBSRUdfQl9BQ1FfQ1RSTCwgcmVnX2JfYWNxX2N0cmwpOworCisJLy8gZy4gRW5hYmxlIEFHQworCS8vaHdfZ2V0X2R4eF9yZWcocGh3X2RhdGEsIFJFR19BR0NfQ1RSTDMsICZ2YWwpOworCXJlZ19hZ2NfY3RybDMgfD0gQklUKDIpOworCXJlZ19hZ2NfY3RybDMgJj0gfihNQVNLX0xOQV9GSVhfR0FJTnxNQVNLX0FHQ19GSVgpOworCWh3X3NldF9keHhfcmVnKHBod19kYXRhLCBSRUdfQUdDX0NUUkwzLCByZWdfYWdjX2N0cmwzKTsKK30KKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KK3ZvaWQgX3R4aWRhY19kY19vZmZzZXRfY2FuY2VsbGF0aW9uX3dpbmJvbmQoaHdfZGF0YV90ICpwaHdfZGF0YSkKK3sKKwl1MzIgICAgIHJlZ19hZ2NfY3RybDM7CisJdTMyICAgICByZWdfbW9kZV9jdHJsOworCXUzMiAgICAgcmVnX2RjX2NhbmNlbDsKKwlzMzIgICAgIGlxY2FsX2ltYWdlX2k7CisJczMyICAgICBpcWNhbF9pbWFnZV9xOworCXUzMiAgICAgc3FzdW07CisJczMyICAgICBtYWdfMDsKKwlzMzIgICAgIG1hZ18xOworCXMzMiAgICAgZml4X2NhbmNlbF9kY19pID0gMDsKKwl1MzIgICAgIHZhbDsKKwlpbnQgICAgIGxvb3A7CisKKwlQSFlfREVCVUcoKCJbQ0FMXSAtPiBbMl1fdHhpZGFjX2RjX29mZnNldF9jYW5jZWxsYXRpb24oKVxuIikpOworCisJLy8gYS4gU2V0IHRvICJUWCBjYWxpYnJhdGlvbiBtb2RlIgorCisJLy8weDAxIDB4RUUzRkMyICA7IDNCOEZGICA7IENhbGlicmF0aW9uICg2YSkuIGVuYWJsZSBUWCBJUSBjYWxpYnJhdGlvbiBsb29wIGNpcmN1aXRzCisJcGh5X3NldF9yZl9kYXRhKHBod19kYXRhLCAxLCAoMTw8MjQpfDB4RUUzRkMyKTsKKwkvLzB4MEIgMHgxOTA1RDYgIDsgMDY0MTcgIDsgQ2FsaWJyYXRpb24gKDZiKS4gZW5hYmxlIFRYIEkvUSBjYWwgbG9vcCBzcXVhcmluZyBjaXJjdWl0CisJcGh5X3NldF9yZl9kYXRhKHBod19kYXRhLCAxMSwgKDExPDwyNCl8MHgxOTAxRDYpOworCS8vMHgwNSAweDI0QzYwQSAgOyAwOTMxOCAgOyBDYWxpYnJhdGlvbiAoNmMpLiBzZXR0aW5nIFRYLVZHQSBnYWluOiBUWEdDSD0yICYgR1BLPTExMCAtLT4gdG8gYmUgb3B0aW1pemVkCisJcGh5X3NldF9yZl9kYXRhKHBod19kYXRhLCA1LCAoNTw8MjQpfDB4MjRDNDhBKTsKKyAgICAvLzB4MDYgMHgwNjg4MEMgIDsgMDFBMjAgIDsgQ2FsaWJyYXRpb24gKDZkKS4gUlhHQ0g9MDA7IFJYR0NMPTEwMCAwMDAgKFJYVkdBPTMyKSAtLT4gdG8gYmUgb3B0aW1pemVkCisJcGh5X3NldF9yZl9kYXRhKHBod19kYXRhLCA2LCAoNjw8MjQpfDB4MDY4OTBDKTsKKwkvLzB4MDAgMHhGREYxQzAgIDsgM0Y3QzcgIDsgQ2FsaWJyYXRpb24gKDZlKS4gdHVybiBvbiBJUSBpbWJhbGFuY2UvVGVzdCBtb2RlCisJcGh5X3NldF9yZl9kYXRhKHBod19kYXRhLCAwLCAoMDw8MjQpfDB4RkRGMUMwKTsKKworCWh3X3NldF9keHhfcmVnKHBod19kYXRhLCAweDU4LCAweDMwMzAzMDMwKTsgLy8gSVFfQWxwaGEgQ2hhbmdlZAorCisJLy8gYS4gRGlzYWJsZSBBR0MKKwlod19nZXRfZHh4X3JlZyhwaHdfZGF0YSwgUkVHX0FHQ19DVFJMMywgJnJlZ19hZ2NfY3RybDMpOworCXJlZ19hZ2NfY3RybDMgJj0gfkJJVCgyKTsKKwlyZWdfYWdjX2N0cmwzIHw9IChNQVNLX0xOQV9GSVhfR0FJTnxNQVNLX0FHQ19GSVgpOworCWh3X3NldF9keHhfcmVnKHBod19kYXRhLCBSRUdfQUdDX0NUUkwzLCByZWdfYWdjX2N0cmwzKTsKKworCWh3X2dldF9keHhfcmVnKHBod19kYXRhLCBSRUdfQUdDX0NUUkw1LCAmdmFsKTsKKwl2YWwgfD0gTUFTS19BR0NfRklYX0dBSU47CisJaHdfc2V0X2R4eF9yZWcocGh3X2RhdGEsIFJFR19BR0NfQ1RSTDUsIHZhbCk7CisKKwkvLyBiLiBzZXQgaXFjYWxfbW9kZVsxOjBdIHRvIDB4MiBhbmQgc2V0IGlxY2FsX3RvbmVbMzoyXSB0byAwCisJaHdfZ2V0X2R4eF9yZWcocGh3X2RhdGEsIFJFR19NT0RFX0NUUkwsICZyZWdfbW9kZV9jdHJsKTsKKworCVBIWV9ERUJVRygoIltDQUxdICAgIE1PREVfQ1RSTCAocmVhZCkgPSAweCUwOFhcbiIsIHJlZ19tb2RlX2N0cmwpKTsKKwlyZWdfbW9kZV9jdHJsICY9IH4oTUFTS19JUUNBTF9UT05FX1NFTHxNQVNLX0lRQ0FMX01PREUpOworCisJLy8gbW9kZT0yLCB0b25lPTAKKwkvL3JlZ19tb2RlX2N0cmwgfD0gKE1BU0tfQ0FMSUJfU1RBUlR8Mik7CisKKwkvLyBtb2RlPTIsIHRvbmU9MQorCS8vcmVnX21vZGVfY3RybCB8PSAoTUFTS19DQUxJQl9TVEFSVHwyfCgxPDwyKSk7CisKKwkvLyBtb2RlPTIsIHRvbmU9MgorCXJlZ19tb2RlX2N0cmwgfD0gKE1BU0tfQ0FMSUJfU1RBUlR8MnwoMjw8MikpOworCWh3X3NldF9keHhfcmVnKHBod19kYXRhLCBSRUdfTU9ERV9DVFJMLCByZWdfbW9kZV9jdHJsKTsKKwlQSFlfREVCVUcoKCJbQ0FMXSAgICBNT0RFX0NUUkwgKHdyaXRlKSA9IDB4JTA4WFxuIiwgcmVnX21vZGVfY3RybCkpOworCXBhX3N0YWxsX2V4ZWN1dGlvbihVUyk7CisKKwlod19nZXRfZHh4X3JlZyhwaHdfZGF0YSwgMHg1QywgJnJlZ19kY19jYW5jZWwpOworCVBIWV9ERUJVRygoIltDQUxdICAgIERDX0NBTkNFTCAocmVhZCkgPSAweCUwOFhcbiIsIHJlZ19kY19jYW5jZWwpKTsKKworCWZvciAobG9vcCA9IDA7IGxvb3AgPCBMT09QX1RJTUVTOyBsb29wKyspCisJeworCQlQSFlfREVCVUcoKCJbQ0FMXSBbJWQuXSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4iLCBsb29wKSk7CisKKwkJLy8gYy4KKwkJLy8gcmVzZXQgY2FuY2VsX2RjX2lbOTo1XSBhbmQgY2FuY2VsX2RjX3FbNDowXSBpbiByZWdpc3RlciBEQ19DYW5jZWwKKwkJcmVnX2RjX2NhbmNlbCAmPSB+KDB4MDNGRik7CisJCVBIWV9ERUJVRygoIltDQUxdICAgIERDX0NBTkNFTCAod3JpdGUpID0gMHglMDhYXG4iLCByZWdfZGNfY2FuY2VsKSk7CisJCWh3X3NldF9keHhfcmVnKHBod19kYXRhLCAweDVDLCByZWdfZGNfY2FuY2VsKTsKKwkJcGFfc3RhbGxfZXhlY3V0aW9uKFVTKTsKKworCQlod19nZXRfZHh4X3JlZyhwaHdfZGF0YSwgUkVHX0NBTElCX1JFQUQyLCAmdmFsKTsKKwkJUEhZX0RFQlVHKCgiW0NBTF0gICAgQ0FMSUJfUkVBRDIgPSAweCUwOFhcbiIsIHZhbCkpOworCisJCWlxY2FsX2ltYWdlX2kgPSBfczEzX3RvX3MzMih2YWwgJiAweDAwMDAxRkZGKTsKKwkJaXFjYWxfaW1hZ2VfcSA9IF9zMTNfdG9fczMyKCh2YWwgJiAweDAzRkZFMDAwKSA+PiAxMyk7CisJCXNxc3VtID0gaXFjYWxfaW1hZ2VfaSppcWNhbF9pbWFnZV9pICsgaXFjYWxfaW1hZ2VfcSppcWNhbF9pbWFnZV9xOworCQltYWdfMCA9IChzMzIpIF9zcXJ0KHNxc3VtKTsKKwkJUEhZX0RFQlVHKCgiW0NBTF0gICAgbWFnXzA9JWQgKGlxY2FsX2ltYWdlX2k9JWQsIGlxY2FsX2ltYWdlX3E9JWQpXG4iLAorCQkJCSAgIG1hZ18wLCBpcWNhbF9pbWFnZV9pLCBpcWNhbF9pbWFnZV9xKSk7CisKKwkJLy8gZC4KKwkJcmVnX2RjX2NhbmNlbCB8PSAoMSA8PCBDQU5DRUxfRENfSV9TSElGVCk7CisJCVBIWV9ERUJVRygoIltDQUxdICAgIERDX0NBTkNFTCAod3JpdGUpID0gMHglMDhYXG4iLCByZWdfZGNfY2FuY2VsKSk7CisJCWh3X3NldF9keHhfcmVnKHBod19kYXRhLCAweDVDLCByZWdfZGNfY2FuY2VsKTsKKwkJcGFfc3RhbGxfZXhlY3V0aW9uKFVTKTsKKworCQlod19nZXRfZHh4X3JlZyhwaHdfZGF0YSwgUkVHX0NBTElCX1JFQUQyLCAmdmFsKTsKKwkJUEhZX0RFQlVHKCgiW0NBTF0gICAgQ0FMSUJfUkVBRDIgPSAweCUwOFhcbiIsIHZhbCkpOworCisJCWlxY2FsX2ltYWdlX2kgPSBfczEzX3RvX3MzMih2YWwgJiAweDAwMDAxRkZGKTsKKwkJaXFjYWxfaW1hZ2VfcSA9IF9zMTNfdG9fczMyKCh2YWwgJiAweDAzRkZFMDAwKSA+PiAxMyk7CisJCXNxc3VtID0gaXFjYWxfaW1hZ2VfaSppcWNhbF9pbWFnZV9pICsgaXFjYWxfaW1hZ2VfcSppcWNhbF9pbWFnZV9xOworCQltYWdfMSA9IChzMzIpIF9zcXJ0KHNxc3VtKTsKKwkJUEhZX0RFQlVHKCgiW0NBTF0gICAgbWFnXzE9JWQgKGlxY2FsX2ltYWdlX2k9JWQsIGlxY2FsX2ltYWdlX3E9JWQpXG4iLAorCQkJCSAgIG1hZ18xLCBpcWNhbF9pbWFnZV9pLCBpcWNhbF9pbWFnZV9xKSk7CisKKwkJLy8gZS4gQ2FsY3VsYXRlIHRoZSBjb3JyZWN0IERDIG9mZnNldCBjYW5jZWxsYXRpb24gdmFsdWUgZm9yIEkKKwkJaWYgKG1hZ18wICE9IG1hZ18xKQorCQl7CisJCQlmaXhfY2FuY2VsX2RjX2kgPSAobWFnXzAqMTAwMDApIC8gKG1hZ18wKjEwMDAwIC0gbWFnXzEqMTAwMDApOworCQl9CisJCWVsc2UKKwkJeworCQkJaWYgKG1hZ18wID09IG1hZ18xKQorCQkJeworCQkJCVBIWV9ERUJVRygoIltDQUxdICAgKioqKiogbWFnXzAgPSBtYWdfMSAhIVxuIikpOworCQkJfQorCisJCQlmaXhfY2FuY2VsX2RjX2kgPSAwOworCQl9CisKKwkJUEhZX0RFQlVHKCgiW0NBTF0gICAgKiogZml4X2NhbmNlbF9kY19pID0gJWQgKDB4JTA0WClcbiIsCisJCQkJICAgZml4X2NhbmNlbF9kY19pLCBfczMyX3RvX3M1KGZpeF9jYW5jZWxfZGNfaSkpKTsKKworCQlpZiAoKGFicyhtYWdfMS1tYWdfMCkqNikgPiBtYWdfMCkKKwkJeworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlpZiAoIGxvb3AgPj0gMTkgKQorCSAgIGZpeF9jYW5jZWxfZGNfaSA9IDA7CisKKwlyZWdfZGNfY2FuY2VsICY9IH4oMHgwM0ZGKTsKKwlyZWdfZGNfY2FuY2VsIHw9IChfczMyX3RvX3M1KGZpeF9jYW5jZWxfZGNfaSkgPDwgQ0FOQ0VMX0RDX0lfU0hJRlQpOworCWh3X3NldF9keHhfcmVnKHBod19kYXRhLCAweDVDLCByZWdfZGNfY2FuY2VsKTsKKwlQSFlfREVCVUcoKCJbQ0FMXSAgICBEQ19DQU5DRUwgKHdyaXRlKSA9IDB4JTA4WFxuIiwgcmVnX2RjX2NhbmNlbCkpOworCisJLy8gZy4KKwlyZWdfbW9kZV9jdHJsICY9IH5NQVNLX0NBTElCX1NUQVJUOworCWh3X3NldF9keHhfcmVnKHBod19kYXRhLCBSRUdfTU9ERV9DVFJMLCByZWdfbW9kZV9jdHJsKTsKKwlQSFlfREVCVUcoKCJbQ0FMXSAgICBNT0RFX0NUUkwgKHdyaXRlKSA9IDB4JTA4WFxuIiwgcmVnX21vZGVfY3RybCkpOworCXBhX3N0YWxsX2V4ZWN1dGlvbihVUyk7Cit9CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KK3ZvaWQgX3R4cWRhY19kY19vZmZzZXRfY2FjZWxsYXRpb25fd2luYm9uZChod19kYXRhX3QgKnBod19kYXRhKQoreworCXUzMiAgICAgcmVnX2FnY19jdHJsMzsKKwl1MzIgICAgIHJlZ19tb2RlX2N0cmw7CisJdTMyICAgICByZWdfZGNfY2FuY2VsOworCXMzMiAgICAgaXFjYWxfaW1hZ2VfaTsKKwlzMzIgICAgIGlxY2FsX2ltYWdlX3E7CisJdTMyICAgICBzcXN1bTsKKwlzMzIgICAgIG1hZ18wOworCXMzMiAgICAgbWFnXzE7CisJczMyICAgICBmaXhfY2FuY2VsX2RjX3EgPSAwOworCXUzMiAgICAgdmFsOworCWludCAgICAgbG9vcDsKKworCVBIWV9ERUJVRygoIltDQUxdIC0+IFszXV90eHFkYWNfZGNfb2Zmc2V0X2NhY2VsbGF0aW9uKClcbiIpKTsKKwkvLzB4MDEgMHhFRTNGQzIgIDsgM0I4RkYgIDsgQ2FsaWJyYXRpb24gKDZhKS4gZW5hYmxlIFRYIElRIGNhbGlicmF0aW9uIGxvb3AgY2lyY3VpdHMKKwlwaHlfc2V0X3JmX2RhdGEocGh3X2RhdGEsIDEsICgxPDwyNCl8MHhFRTNGQzIpOworCS8vMHgwQiAweDE5MDVENiAgOyAwNjQxNyAgOyBDYWxpYnJhdGlvbiAoNmIpLiBlbmFibGUgVFggSS9RIGNhbCBsb29wIHNxdWFyaW5nIGNpcmN1aXQKKwlwaHlfc2V0X3JmX2RhdGEocGh3X2RhdGEsIDExLCAoMTE8PDI0KXwweDE5MDFENik7CisJLy8weDA1IDB4MjRDNjBBICA7IDA5MzE4ICA7IENhbGlicmF0aW9uICg2YykuIHNldHRpbmcgVFgtVkdBIGdhaW46IFRYR0NIPTIgJiBHUEs9MTEwIC0tPiB0byBiZSBvcHRpbWl6ZWQKKwlwaHlfc2V0X3JmX2RhdGEocGh3X2RhdGEsIDUsICg1PDwyNCl8MHgyNEM0OEEpOworICAgIC8vMHgwNiAweDA2ODgwQyAgOyAwMUEyMCAgOyBDYWxpYnJhdGlvbiAoNmQpLiBSWEdDSD0wMDsgUlhHQ0w9MTAwIDAwMCAoUlhWR0E9MzIpIC0tPiB0byBiZSBvcHRpbWl6ZWQKKwlwaHlfc2V0X3JmX2RhdGEocGh3X2RhdGEsIDYsICg2PDwyNCl8MHgwNjg5MEMpOworCS8vMHgwMCAweEZERjFDMCAgOyAzRjdDNyAgOyBDYWxpYnJhdGlvbiAoNmUpLiB0dXJuIG9uIElRIGltYmFsYW5jZS9UZXN0IG1vZGUKKwlwaHlfc2V0X3JmX2RhdGEocGh3X2RhdGEsIDAsICgwPDwyNCl8MHhGREYxQzApOworCisJaHdfc2V0X2R4eF9yZWcocGh3X2RhdGEsIDB4NTgsIDB4MzAzMDMwMzApOyAvLyBJUV9BbHBoYSBDaGFuZ2VkCisKKwkvLyBhLiBEaXNhYmxlIEFHQworCWh3X2dldF9keHhfcmVnKHBod19kYXRhLCBSRUdfQUdDX0NUUkwzLCAmcmVnX2FnY19jdHJsMyk7CisJcmVnX2FnY19jdHJsMyAmPSB+QklUKDIpOworCXJlZ19hZ2NfY3RybDMgfD0gKE1BU0tfTE5BX0ZJWF9HQUlOfE1BU0tfQUdDX0ZJWCk7CisJaHdfc2V0X2R4eF9yZWcocGh3X2RhdGEsIFJFR19BR0NfQ1RSTDMsIHJlZ19hZ2NfY3RybDMpOworCisJaHdfZ2V0X2R4eF9yZWcocGh3X2RhdGEsIFJFR19BR0NfQ1RSTDUsICZ2YWwpOworCXZhbCB8PSBNQVNLX0FHQ19GSVhfR0FJTjsKKwlod19zZXRfZHh4X3JlZyhwaHdfZGF0YSwgUkVHX0FHQ19DVFJMNSwgdmFsKTsKKworCS8vIGEuIHNldCBpcWNhbF9tb2RlWzE6MF0gdG8gMHgzIGFuZCBzZXQgaXFjYWxfdG9uZVszOjJdIHRvIDAKKwlod19nZXRfZHh4X3JlZyhwaHdfZGF0YSwgUkVHX01PREVfQ1RSTCwgJnJlZ19tb2RlX2N0cmwpOworCVBIWV9ERUJVRygoIltDQUxdICAgIE1PREVfQ1RSTCAocmVhZCkgPSAweCUwOFhcbiIsIHJlZ19tb2RlX2N0cmwpKTsKKworCS8vcmVnX21vZGVfY3RybCAmPSB+KE1BU0tfSVFDQUxfVE9ORV9TRUx8TUFTS19JUUNBTF9NT0RFKTsKKwlyZWdfbW9kZV9jdHJsICY9IH4oTUFTS19JUUNBTF9NT0RFKTsKKwlyZWdfbW9kZV9jdHJsIHw9IChNQVNLX0NBTElCX1NUQVJUfDMpOworCWh3X3NldF9keHhfcmVnKHBod19kYXRhLCBSRUdfTU9ERV9DVFJMLCByZWdfbW9kZV9jdHJsKTsKKwlQSFlfREVCVUcoKCJbQ0FMXSAgICBNT0RFX0NUUkwgKHdyaXRlKSA9IDB4JTA4WFxuIiwgcmVnX21vZGVfY3RybCkpOworCXBhX3N0YWxsX2V4ZWN1dGlvbihVUyk7CisKKwlod19nZXRfZHh4X3JlZyhwaHdfZGF0YSwgMHg1QywgJnJlZ19kY19jYW5jZWwpOworCVBIWV9ERUJVRygoIltDQUxdICAgIERDX0NBTkNFTCAocmVhZCkgPSAweCUwOFhcbiIsIHJlZ19kY19jYW5jZWwpKTsKKworCWZvciAobG9vcCA9IDA7IGxvb3AgPCBMT09QX1RJTUVTOyBsb29wKyspCisJeworCQlQSFlfREVCVUcoKCJbQ0FMXSBbJWQuXSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4iLCBsb29wKSk7CisKKwkJLy8gYi4KKwkJLy8gcmVzZXQgY2FuY2VsX2RjX3FbNDowXSBpbiByZWdpc3RlciBEQ19DYW5jZWwKKwkJcmVnX2RjX2NhbmNlbCAmPSB+KDB4MDAxRik7CisJCVBIWV9ERUJVRygoIltDQUxdICAgIERDX0NBTkNFTCAod3JpdGUpID0gMHglMDhYXG4iLCByZWdfZGNfY2FuY2VsKSk7CisJCWh3X3NldF9keHhfcmVnKHBod19kYXRhLCAweDVDLCByZWdfZGNfY2FuY2VsKTsKKwkJcGFfc3RhbGxfZXhlY3V0aW9uKFVTKTsKKworCQlod19nZXRfZHh4X3JlZyhwaHdfZGF0YSwgUkVHX0NBTElCX1JFQUQyLCAmdmFsKTsKKwkJUEhZX0RFQlVHKCgiW0NBTF0gICAgQ0FMSUJfUkVBRDIgPSAweCUwOFhcbiIsIHZhbCkpOworCQlwYV9zdGFsbF9leGVjdXRpb24oVVMpOworCisJCWlxY2FsX2ltYWdlX2kgPSBfczEzX3RvX3MzMih2YWwgJiAweDAwMDAxRkZGKTsKKwkJaXFjYWxfaW1hZ2VfcSA9IF9zMTNfdG9fczMyKCh2YWwgJiAweDAzRkZFMDAwKSA+PiAxMyk7CisJCXNxc3VtID0gaXFjYWxfaW1hZ2VfaSppcWNhbF9pbWFnZV9pICsgaXFjYWxfaW1hZ2VfcSppcWNhbF9pbWFnZV9xOworCQltYWdfMCA9IF9zcXJ0KHNxc3VtKTsKKwkJUEhZX0RFQlVHKCgiW0NBTF0gICAgbWFnXzA9JWQgKGlxY2FsX2ltYWdlX2k9JWQsIGlxY2FsX2ltYWdlX3E9JWQpXG4iLAorCQkJCSAgIG1hZ18wLCBpcWNhbF9pbWFnZV9pLCBpcWNhbF9pbWFnZV9xKSk7CisKKwkJLy8gYy4KKwkJcmVnX2RjX2NhbmNlbCB8PSAoMSA8PCBDQU5DRUxfRENfUV9TSElGVCk7CisJCVBIWV9ERUJVRygoIltDQUxdICAgIERDX0NBTkNFTCAod3JpdGUpID0gMHglMDhYXG4iLCByZWdfZGNfY2FuY2VsKSk7CisJCWh3X3NldF9keHhfcmVnKHBod19kYXRhLCAweDVDLCByZWdfZGNfY2FuY2VsKTsKKwkJcGFfc3RhbGxfZXhlY3V0aW9uKFVTKTsKKworCQlod19nZXRfZHh4X3JlZyhwaHdfZGF0YSwgUkVHX0NBTElCX1JFQUQyLCAmdmFsKTsKKwkJUEhZX0RFQlVHKCgiW0NBTF0gICAgQ0FMSUJfUkVBRDIgPSAweCUwOFhcbiIsIHZhbCkpOworCQlwYV9zdGFsbF9leGVjdXRpb24oVVMpOworCisJCWlxY2FsX2ltYWdlX2kgPSBfczEzX3RvX3MzMih2YWwgJiAweDAwMDAxRkZGKTsKKwkJaXFjYWxfaW1hZ2VfcSA9IF9zMTNfdG9fczMyKCh2YWwgJiAweDAzRkZFMDAwKSA+PiAxMyk7CisJCXNxc3VtID0gaXFjYWxfaW1hZ2VfaSppcWNhbF9pbWFnZV9pICsgaXFjYWxfaW1hZ2VfcSppcWNhbF9pbWFnZV9xOworCQltYWdfMSA9IF9zcXJ0KHNxc3VtKTsKKwkJUEhZX0RFQlVHKCgiW0NBTF0gICAgbWFnXzE9JWQgKGlxY2FsX2ltYWdlX2k9JWQsIGlxY2FsX2ltYWdlX3E9JWQpXG4iLAorCQkJCSAgIG1hZ18xLCBpcWNhbF9pbWFnZV9pLCBpcWNhbF9pbWFnZV9xKSk7CisKKwkJLy8gZC4gQ2FsY3VsYXRlIHRoZSBjb3JyZWN0IERDIG9mZnNldCBjYW5jZWxsYXRpb24gdmFsdWUgZm9yIEkKKwkJaWYgKG1hZ18wICE9IG1hZ18xKQorCQl7CisJCQlmaXhfY2FuY2VsX2RjX3EgPSAobWFnXzAqMTAwMDApIC8gKG1hZ18wKjEwMDAwIC0gbWFnXzEqMTAwMDApOworCQl9CisJCWVsc2UKKwkJeworCQkJaWYgKG1hZ18wID09IG1hZ18xKQorCQkJeworCQkJCVBIWV9ERUJVRygoIltDQUxdICAgKioqKiogbWFnXzAgPSBtYWdfMSAhIVxuIikpOworCQkJfQorCisJCQlmaXhfY2FuY2VsX2RjX3EgPSAwOworCQl9CisKKwkJUEhZX0RFQlVHKCgiW0NBTF0gICAgKiogZml4X2NhbmNlbF9kY19xID0gJWQgKDB4JTA0WClcbiIsCisJCQkJICAgZml4X2NhbmNlbF9kY19xLCBfczMyX3RvX3M1KGZpeF9jYW5jZWxfZGNfcSkpKTsKKworCQlpZiAoKGFicyhtYWdfMS1tYWdfMCkqNikgPiBtYWdfMCkKKwkJeworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlpZiAoIGxvb3AgPj0gMTkgKQorCSAgIGZpeF9jYW5jZWxfZGNfcSA9IDA7CisKKwlyZWdfZGNfY2FuY2VsICY9IH4oMHgwMDFGKTsKKwlyZWdfZGNfY2FuY2VsIHw9IChfczMyX3RvX3M1KGZpeF9jYW5jZWxfZGNfcSkgPDwgQ0FOQ0VMX0RDX1FfU0hJRlQpOworCWh3X3NldF9keHhfcmVnKHBod19kYXRhLCAweDVDLCByZWdfZGNfY2FuY2VsKTsKKwlQSFlfREVCVUcoKCJbQ0FMXSAgICBEQ19DQU5DRUwgKHdyaXRlKSA9IDB4JTA4WFxuIiwgcmVnX2RjX2NhbmNlbCkpOworCisKKwkvLyBmLgorCXJlZ19tb2RlX2N0cmwgJj0gfk1BU0tfQ0FMSUJfU1RBUlQ7CisJaHdfc2V0X2R4eF9yZWcocGh3X2RhdGEsIFJFR19NT0RFX0NUUkwsIHJlZ19tb2RlX2N0cmwpOworCVBIWV9ERUJVRygoIltDQUxdICAgIE1PREVfQ1RSTCAod3JpdGUpID0gMHglMDhYXG4iLCByZWdfbW9kZV9jdHJsKSk7CisJcGFfc3RhbGxfZXhlY3V0aW9uKFVTKTsKK30KKworLy8yMDA2MDYxMi4xLmEgMjAwNjA3MTguMSBNb2RpZnkKK3U4IF90eF9pcV9jYWxpYnJhdGlvbl9sb29wX3dpbmJvbmQoaHdfZGF0YV90ICpwaHdfZGF0YSwKKwkJCQkJCSAgIHMzMiBhXzJfdGhyZXNob2xkLAorCQkJCQkJICAgczMyIGJfMl90aHJlc2hvbGQpCit7CisJdTMyICAgICByZWdfbW9kZV9jdHJsOworCXMzMiAgICAgaXFfbWFnXzBfdHg7CisJczMyICAgICBpcWNhbF90b25lX2kwOworCXMzMiAgICAgaXFjYWxfdG9uZV9xMDsKKwlzMzIgICAgIGlxY2FsX3RvbmVfaTsKKwlzMzIgICAgIGlxY2FsX3RvbmVfcTsKKwl1MzIgICAgIHNxc3VtOworCXMzMiAgICAgcm90X2lfYjsKKwlzMzIgICAgIHJvdF9xX2I7CisJczMyICAgICB0eF9jYWxfZmx0X2JbNF07CisJczMyICAgICB0eF9jYWxbNF07CisJczMyICAgICB0eF9jYWxfcmVnWzRdOworCXMzMiAgICAgYV8yLCBiXzI7CisJczMyICAgICBzaW5fYiwgc2luXzJiOworCXMzMiAgICAgY29zX2IsIGNvc18yYjsKKwlzMzIgICAgIGRpdmlzb3I7CisJczMyICAgICB0ZW1wMSwgdGVtcDI7CisJdTMyICAgICB2YWw7CisJdTE2ICAgICBsb29wOworCXMzMiAgICAgaXFjYWxfdG9uZV9pX2F2ZyxpcWNhbF90b25lX3FfYXZnOworCXU4ICAgICAgdmVyaWZ5X2NvdW50OworCWludCBjYXB0dXJlX3RpbWU7CisKKwlQSFlfREVCVUcoKCJbQ0FMXSAtPiBfdHhfaXFfY2FsaWJyYXRpb25fbG9vcCgpXG4iKSk7CisJUEhZX0RFQlVHKCgiW0NBTF0gICAgKiogYV8yX3RocmVzaG9sZCA9ICVkXG4iLCBhXzJfdGhyZXNob2xkKSk7CisJUEhZX0RFQlVHKCgiW0NBTF0gICAgKiogYl8yX3RocmVzaG9sZCA9ICVkXG4iLCBiXzJfdGhyZXNob2xkKSk7CisKKwl2ZXJpZnlfY291bnQgPSAwOworCisJaHdfZ2V0X2R4eF9yZWcocGh3X2RhdGEsIFJFR19NT0RFX0NUUkwsICZyZWdfbW9kZV9jdHJsKTsKKwlQSFlfREVCVUcoKCJbQ0FMXSAgICBNT0RFX0NUUkwgKHJlYWQpID0gMHglMDhYXG4iLCByZWdfbW9kZV9jdHJsKSk7CisKKwlsb29wID0gTE9PUF9USU1FUzsKKworCXdoaWxlIChsb29wID4gMCkKKwl7CisJCVBIWV9ERUJVRygoIltDQUxdIFslZC5dIDxfdHhfaXFfY2FsaWJyYXRpb25fbG9vcD5cbiIsIChMT09QX1RJTUVTLWxvb3ArMSkpKTsKKworCQlpcWNhbF90b25lX2lfYXZnPTA7CisJCWlxY2FsX3RvbmVfcV9hdmc9MDsKKwkJaWYoICFod19zZXRfZHh4X3JlZyhwaHdfZGF0YSwgMHgzQywgMHgwMCkgKSAvLyAyMDA2MDcxOC4xIG1vZGlmeQorCQkJcmV0dXJuIDA7CisJCWZvcihjYXB0dXJlX3RpbWU9MDtjYXB0dXJlX3RpbWU8MTA7Y2FwdHVyZV90aW1lKyspCisJCXsKKwkJCS8vIGEuIFNldCBpcWNhbF9tb2RlWzE6MF0gdG8gMHgyIGFuZCBzZXQgImNhbGliX3N0YXJ0IiB0byAweDEgdG8KKwkJCS8vICAgIGVuYWJsZSAiSVEgYWxpYnJhdGlvbiBNb2RlIElJIgorCQkJcmVnX21vZGVfY3RybCAmPSB+KE1BU0tfSVFDQUxfVE9ORV9TRUx8TUFTS19JUUNBTF9NT0RFKTsKKwkJCXJlZ19tb2RlX2N0cmwgJj0gfk1BU0tfSVFDQUxfTU9ERTsKKwkJCXJlZ19tb2RlX2N0cmwgfD0gKE1BU0tfQ0FMSUJfU1RBUlR8MHgwMik7CisJCQlyZWdfbW9kZV9jdHJsIHw9IChNQVNLX0NBTElCX1NUQVJUfDB4MDJ8Mjw8Mik7CisJCQlod19zZXRfZHh4X3JlZyhwaHdfZGF0YSwgUkVHX01PREVfQ1RSTCwgcmVnX21vZGVfY3RybCk7CisJCQlQSFlfREVCVUcoKCJbQ0FMXSAgICBNT0RFX0NUUkwgKHdyaXRlKSA9IDB4JTA4WFxuIiwgcmVnX21vZGVfY3RybCkpOworCQkJcGFfc3RhbGxfZXhlY3V0aW9uKFVTKTsKKworCQkJLy8gYi4KKwkJCWh3X2dldF9keHhfcmVnKHBod19kYXRhLCBSRUdfQ0FMSUJfUkVBRDEsICZ2YWwpOworCQkJUEhZX0RFQlVHKCgiW0NBTF0gICAgQ0FMSUJfUkVBRDEgPSAweCUwOFhcbiIsIHZhbCkpOworCQkJcGFfc3RhbGxfZXhlY3V0aW9uKFVTKTsKKworCQkJaXFjYWxfdG9uZV9pMCA9IF9zMTNfdG9fczMyKHZhbCAmIDB4MDAwMDFGRkYpOworCQkJaXFjYWxfdG9uZV9xMCA9IF9zMTNfdG9fczMyKCh2YWwgJiAweDAzRkZFMDAwKSA+PiAxMyk7CisJCQlQSFlfREVCVUcoKCJbQ0FMXSAgICAqKiBpcWNhbF90b25lX2kwPSVkLCBpcWNhbF90b25lX3EwPSVkXG4iLAorCQkJCSAgIGlxY2FsX3RvbmVfaTAsIGlxY2FsX3RvbmVfcTApKTsKKworCQkJc3FzdW0gPSBpcWNhbF90b25lX2kwKmlxY2FsX3RvbmVfaTAgKworCQkJaXFjYWxfdG9uZV9xMCppcWNhbF90b25lX3EwOworCQkJaXFfbWFnXzBfdHggPSAoczMyKSBfc3FydChzcXN1bSk7CisJCQlQSFlfREVCVUcoKCJbQ0FMXSAgICAqKiBpcV9tYWdfMF90eD0lZFxuIiwgaXFfbWFnXzBfdHgpKTsKKworCQkJLy8gYy4gU2V0ICJjYWxpYl9zdGFydCIgdG8gMHgwCisJCQlyZWdfbW9kZV9jdHJsICY9IH5NQVNLX0NBTElCX1NUQVJUOworCQkJaHdfc2V0X2R4eF9yZWcocGh3X2RhdGEsIFJFR19NT0RFX0NUUkwsIHJlZ19tb2RlX2N0cmwpOworCQkJUEhZX0RFQlVHKCgiW0NBTF0gICAgTU9ERV9DVFJMICh3cml0ZSkgPSAweCUwOFhcbiIsIHJlZ19tb2RlX2N0cmwpKTsKKwkJCXBhX3N0YWxsX2V4ZWN1dGlvbihVUyk7CisKKwkJCS8vIGQuIFNldCBpcWNhbF9tb2RlWzE6MF0gdG8gMHgzIGFuZCBzZXQgImNhbGliX3N0YXJ0IiB0byAweDEgdG8KKwkJCS8vICAgIGVuYWJsZSAiSVEgYWxpYnJhdGlvbiBNb2RlIElJIgorCQkJLy9od19nZXRfZHh4X3JlZyhwaHdfZGF0YSwgUkVHX01PREVfQ1RSTCwgJnZhbCk7CisJCQlod19nZXRfZHh4X3JlZyhwaHdfZGF0YSwgUkVHX01PREVfQ1RSTCwgJnJlZ19tb2RlX2N0cmwpOworCQkJcmVnX21vZGVfY3RybCAmPSB+TUFTS19JUUNBTF9NT0RFOworCQkJcmVnX21vZGVfY3RybCB8PSAoTUFTS19DQUxJQl9TVEFSVHwweDAzKTsKKwkJCWh3X3NldF9keHhfcmVnKHBod19kYXRhLCBSRUdfTU9ERV9DVFJMLCByZWdfbW9kZV9jdHJsKTsKKwkJCVBIWV9ERUJVRygoIltDQUxdICAgIE1PREVfQ1RSTCAod3JpdGUpID0gMHglMDhYXG4iLCByZWdfbW9kZV9jdHJsKSk7CisJCQlwYV9zdGFsbF9leGVjdXRpb24oVVMpOworCisJCQkvLyBlLgorCQkJaHdfZ2V0X2R4eF9yZWcocGh3X2RhdGEsIFJFR19DQUxJQl9SRUFEMSwgJnZhbCk7CisJCQlQSFlfREVCVUcoKCJbQ0FMXSAgICBDQUxJQl9SRUFEMSA9IDB4JTA4WFxuIiwgdmFsKSk7CisJCQlwYV9zdGFsbF9leGVjdXRpb24oVVMpOworCisJCQlpcWNhbF90b25lX2kgPSBfczEzX3RvX3MzMih2YWwgJiAweDAwMDAxRkZGKTsKKwkJCWlxY2FsX3RvbmVfcSA9IF9zMTNfdG9fczMyKCh2YWwgJiAweDAzRkZFMDAwKSA+PiAxMyk7CisJCQlQSFlfREVCVUcoKCJbQ0FMXSAgICAqKiBpcWNhbF90b25lX2kgPSAlZCwgaXFjYWxfdG9uZV9xID0gJWRcbiIsCisJCQlpcWNhbF90b25lX2ksIGlxY2FsX3RvbmVfcSkpOworCQkJaWYoIGNhcHR1cmVfdGltZSA9PSAwKQorCQkJeworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJZWxzZQorCQkJeworCQkJCWlxY2FsX3RvbmVfaV9hdmc9KCBpcWNhbF90b25lX2lfYXZnKihjYXB0dXJlX3RpbWUtMSkgK2lxY2FsX3RvbmVfaSkvY2FwdHVyZV90aW1lOworCQkJCWlxY2FsX3RvbmVfcV9hdmc9KCBpcWNhbF90b25lX3FfYXZnKihjYXB0dXJlX3RpbWUtMSkgK2lxY2FsX3RvbmVfcSkvY2FwdHVyZV90aW1lOworCQkJfQorCQl9CisKKwkJaXFjYWxfdG9uZV9pID0gaXFjYWxfdG9uZV9pX2F2ZzsKKwkJaXFjYWxfdG9uZV9xID0gaXFjYWxfdG9uZV9xX2F2ZzsKKworCisJCXJvdF9pX2IgPSAoaXFjYWxfdG9uZV9pICogaXFjYWxfdG9uZV9pMCArCisJCQkJICAgaXFjYWxfdG9uZV9xICogaXFjYWxfdG9uZV9xMCkgLyAxMDI0OworCQlyb3RfcV9iID0gKGlxY2FsX3RvbmVfaSAqIGlxY2FsX3RvbmVfcTAgKiAoLTEpICsKKwkJCQkgICBpcWNhbF90b25lX3EgKiBpcWNhbF90b25lX2kwKSAvIDEwMjQ7CisJCVBIWV9ERUJVRygoIltDQUxdICAgICoqIHJvdF9pX2IgPSAlZCwgcm90X3FfYiA9ICVkXG4iLAorCQkJCSAgIHJvdF9pX2IsIHJvdF9xX2IpKTsKKworCQkvLyBmLgorCQlkaXZpc29yID0gKChpcV9tYWdfMF90eCAqIGlxX21hZ18wX3R4ICogMikvMTAyNCAtIHJvdF9pX2IpICogMjsKKworCQlpZiAoZGl2aXNvciA9PSAwKQorCQl7CisJCQlQSFlfREVCVUcoKCJbQ0FMXSAqKiA8X3R4X2lxX2NhbGlicmF0aW9uX2xvb3A+IEVSUk9SICoqKioqKipcbiIpKTsKKwkJCVBIWV9ERUJVRygoIltDQUxdICoqIGRpdmlzb3I9MCB0byBjYWxjdWxhdGUgRVBTIGFuZCBUSEVUQSAhIVxuIikpOworCQkJUEhZX0RFQlVHKCgiW0NBTF0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4iKSk7CisJCQlicmVhazsKKwkJfQorCisJCWFfMiA9IChyb3RfaV9iICogMzI3NjgpIC8gZGl2aXNvcjsKKwkJYl8yID0gKHJvdF9xX2IgKiAoLTMyNzY4KSkgLyBkaXZpc29yOworCQlQSFlfREVCVUcoKCJbQ0FMXSAgICAqKioqKiBFUFNJTE9OLzIgPSAlZFxuIiwgYV8yKSk7CisJCVBIWV9ERUJVRygoIltDQUxdICAgICoqKioqIFRIRVRBLzIgICA9ICVkXG4iLCBiXzIpKTsKKworCQlwaHdfZGF0YS0+aXFfcnNkbF9nYWluX3R4X2QyID0gYV8yOworCQlwaHdfZGF0YS0+aXFfcnNkbF9waGFzZV90eF9kMiA9IGJfMjsKKworCQkvL2lmICgoYWJzKGFfMikgPCAxNTApICYmIChhYnMoYl8yKSA8IDEwMCkpCisJCS8vaWYgKChhYnMoYV8yKSA8IDIwMCkgJiYgKGFicyhiXzIpIDwgMjAwKSkKKwkJaWYgKChhYnMoYV8yKSA8IGFfMl90aHJlc2hvbGQpICYmIChhYnMoYl8yKSA8IGJfMl90aHJlc2hvbGQpKQorCQl7CisJCQl2ZXJpZnlfY291bnQrKzsKKworCQkJUEhZX0RFQlVHKCgiW0NBTF0gKiogPF90eF9pcV9jYWxpYnJhdGlvbl9sb29wPiAqKioqKioqKioqKioqXG4iKSk7CisJCQlQSFlfREVCVUcoKCJbQ0FMXSAqKiBWRVJJRlkgT0sgIyAlZCAhIVxuIiwgdmVyaWZ5X2NvdW50KSk7CisJCQlQSFlfREVCVUcoKCJbQ0FMXSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiIpKTsKKworCQkJaWYgKHZlcmlmeV9jb3VudCA+IDIpCisJCQl7CisJCQkJUEhZX0RFQlVHKCgiW0NBTF0gKiogPF90eF9pcV9jYWxpYnJhdGlvbl9sb29wPiAqKioqKioqKipcbiIpKTsKKwkJCQlQSFlfREVCVUcoKCJbQ0FMXSAqKiBUWF9JUV9DQUxJQlJBVElPTiAoRVBTLFRIRVRBKSBPSyAhIVxuIikpOworCQkJCVBIWV9ERUJVRygoIltDQUxdICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4iKSk7CisJCQkJcmV0dXJuIDA7CisJCQl9CisKKwkJCWNvbnRpbnVlOworCQl9CisJCWVsc2UKKwkJeworCQkJdmVyaWZ5X2NvdW50ID0gMDsKKwkJfQorCisJCV9zaW5fY29zKGJfMiwgJnNpbl9iLCAmY29zX2IpOworCQlfc2luX2NvcyhiXzIqMiwgJnNpbl8yYiwgJmNvc18yYik7CisJCVBIWV9ERUJVRygoIltDQUxdICAgICoqIHNpbihiLzIpPSVkLCBjb3MoYi8yKT0lZFxuIiwgc2luX2IsIGNvc19iKSk7CisJCVBIWV9ERUJVRygoIltDQUxdICAgICoqIHNpbihiKT0lZCwgY29zKGIpPSVkXG4iLCBzaW5fMmIsIGNvc18yYikpOworCisJCWlmIChjb3NfMmIgPT0gMCkKKwkJeworCQkJUEhZX0RFQlVHKCgiW0NBTF0gKiogPF90eF9pcV9jYWxpYnJhdGlvbl9sb29wPiBFUlJPUiAqKioqKioqXG4iKSk7CisJCQlQSFlfREVCVUcoKCJbQ0FMXSAqKiBjb3MoYik9MCAhIVxuIikpOworCQkJUEhZX0RFQlVHKCgiW0NBTF0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4iKSk7CisJCQlicmVhazsKKwkJfQorCisJCS8vIDEyODAgKiAzMjc2OCA9IDQxOTQzMDQwCisJCXRlbXAxID0gKDQxOTQzMDQwL2Nvc18yYikqY29zX2I7CisKKwkJLy90ZW1wMiA9ICg0MTk0MzA0MC9jb3NfMmIpKnNpbl9iKigtMSk7CisJCWlmIChwaHdfZGF0YS0+cmV2aXNpb24gPT0gMHgyMDAyKSAvLyAxc3QtY3V0CisJCXsKKwkJCXRlbXAyID0gKDQxOTQzMDQwL2Nvc18yYikqc2luX2IqKC0xKTsKKwkJfQorCQllbHNlIC8vIDJuZC1jdXQKKwkJeworCQkJdGVtcDIgPSAoNDE5NDMwNDAqNC9jb3NfMmIpKnNpbl9iKigtMSk7CisJCX0KKworCQl0eF9jYWxfZmx0X2JbMF0gPSBfZmxvb3IodGVtcDEvKDMyNzY4K2FfMikpOworCQl0eF9jYWxfZmx0X2JbMV0gPSBfZmxvb3IodGVtcDIvKDMyNzY4K2FfMikpOworCQl0eF9jYWxfZmx0X2JbMl0gPSBfZmxvb3IodGVtcDIvKDMyNzY4LWFfMikpOworCQl0eF9jYWxfZmx0X2JbM10gPSBfZmxvb3IodGVtcDEvKDMyNzY4LWFfMikpOworCQlQSFlfREVCVUcoKCJbQ0FMXSAgICAqKiB0eF9jYWxfZmx0X2JbMF0gPSAlZFxuIiwgdHhfY2FsX2ZsdF9iWzBdKSk7CisJCVBIWV9ERUJVRygoIltDQUxdICAgICAgIHR4X2NhbF9mbHRfYlsxXSA9ICVkXG4iLCB0eF9jYWxfZmx0X2JbMV0pKTsKKwkJUEhZX0RFQlVHKCgiW0NBTF0gICAgICAgdHhfY2FsX2ZsdF9iWzJdID0gJWRcbiIsIHR4X2NhbF9mbHRfYlsyXSkpOworCQlQSFlfREVCVUcoKCJbQ0FMXSAgICAgICB0eF9jYWxfZmx0X2JbM10gPSAlZFxuIiwgdHhfY2FsX2ZsdF9iWzNdKSk7CisKKwkJdHhfY2FsWzJdID0gdHhfY2FsX2ZsdF9iWzJdOworCQl0eF9jYWxbMl0gPSB0eF9jYWxbMl0gKzM7CisJCXR4X2NhbFsxXSA9IHR4X2NhbFsyXTsKKwkJdHhfY2FsWzNdID0gdHhfY2FsX2ZsdF9iWzNdIC0gMTI4OworCQl0eF9jYWxbMF0gPSAtdHhfY2FsWzNdKzE7CisKKwkJUEhZX0RFQlVHKCgiW0NBTF0gICAgICAgdHhfY2FsWzBdID0gJWRcbiIsIHR4X2NhbFswXSkpOworCQlQSFlfREVCVUcoKCJbQ0FMXSAgICAgICB0eF9jYWxbMV0gPSAlZFxuIiwgdHhfY2FsWzFdKSk7CisJCVBIWV9ERUJVRygoIltDQUxdICAgICAgIHR4X2NhbFsyXSA9ICVkXG4iLCB0eF9jYWxbMl0pKTsKKwkJUEhZX0RFQlVHKCgiW0NBTF0gICAgICAgdHhfY2FsWzNdID0gJWRcbiIsIHR4X2NhbFszXSkpOworCisJCS8vaWYgKCh0eF9jYWxbMF0gPT0gMCkgJiYgKHR4X2NhbFsxXSA9PSAwKSAmJgorCQkvLyAgICAodHhfY2FsWzJdID09IDApICYmICh0eF9jYWxbM10gPT0gMCkpCisJCS8veworCQkvLyAgICBQSFlfREVCVUcoKCJbQ0FMXSAqKiA8X3R4X2lxX2NhbGlicmF0aW9uX2xvb3A+ICoqKioqKioqKioqKipcbiIpKTsKKwkJLy8gICAgUEhZX0RFQlVHKCgiW0NBTF0gKiogVFhfSVFfQ0FMSUJSQVRJT04gQ09NUExFVEUgISFcbiIpKTsKKwkJLy8gICAgUEhZX0RFQlVHKCgiW0NBTF0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4iKSk7CisJCS8vICAgIHJldHVybiAwOworCQkvL30KKworCQkvLyBnLgorCQlpZiAocGh3X2RhdGEtPnJldmlzaW9uID09IDB4MjAwMikgLy8gMXN0LWN1dAorCQl7CisJCQlod19nZXRfZHh4X3JlZyhwaHdfZGF0YSwgMHg1NCwgJnZhbCk7CisJCQlQSFlfREVCVUcoKCJbQ0FMXSAgICAqKiAweDU0ID0gMHglMDhYXG4iLCB2YWwpKTsKKwkJCXR4X2NhbF9yZWdbMF0gPSBfczRfdG9fczMyKCh2YWwgJiAweEYwMDAwMDAwKSA+PiAyOCk7CisJCQl0eF9jYWxfcmVnWzFdID0gX3M0X3RvX3MzMigodmFsICYgMHgwRjAwMDAwMCkgPj4gMjQpOworCQkJdHhfY2FsX3JlZ1syXSA9IF9zNF90b19zMzIoKHZhbCAmIDB4MDBGMDAwMDApID4+IDIwKTsKKwkJCXR4X2NhbF9yZWdbM10gPSBfczRfdG9fczMyKCh2YWwgJiAweDAwMEYwMDAwKSA+PiAxNik7CisJCX0KKwkJZWxzZSAvLyAybmQtY3V0CisJCXsKKwkJCWh3X2dldF9keHhfcmVnKHBod19kYXRhLCAweDNDLCAmdmFsKTsKKwkJCVBIWV9ERUJVRygoIltDQUxdICAgICoqIDB4M0MgPSAweCUwOFhcbiIsIHZhbCkpOworCQkJdHhfY2FsX3JlZ1swXSA9IF9zNV90b19zMzIoKHZhbCAmIDB4RjgwMDAwMDApID4+IDI3KTsKKwkJCXR4X2NhbF9yZWdbMV0gPSBfczZfdG9fczMyKCh2YWwgJiAweDA3RTAwMDAwKSA+PiAyMSk7CisJCQl0eF9jYWxfcmVnWzJdID0gX3M2X3RvX3MzMigodmFsICYgMHgwMDFGODAwMCkgPj4gMTUpOworCQkJdHhfY2FsX3JlZ1szXSA9IF9zNV90b19zMzIoKHZhbCAmIDB4MDAwMDdDMDApID4+IDEwKTsKKworCQl9CisKKwkJUEhZX0RFQlVHKCgiW0NBTF0gICAgKiogdHhfY2FsX3JlZ1swXSA9ICVkXG4iLCB0eF9jYWxfcmVnWzBdKSk7CisJCVBIWV9ERUJVRygoIltDQUxdICAgICAgIHR4X2NhbF9yZWdbMV0gPSAlZFxuIiwgdHhfY2FsX3JlZ1sxXSkpOworCQlQSFlfREVCVUcoKCJbQ0FMXSAgICAgICB0eF9jYWxfcmVnWzJdID0gJWRcbiIsIHR4X2NhbF9yZWdbMl0pKTsKKwkJUEhZX0RFQlVHKCgiW0NBTF0gICAgICAgdHhfY2FsX3JlZ1szXSA9ICVkXG4iLCB0eF9jYWxfcmVnWzNdKSk7CisKKwkJaWYgKHBod19kYXRhLT5yZXZpc2lvbiA9PSAweDIwMDIpIC8vIDFzdC1jdXQKKwkJeworCQkJaWYgKCgodHhfY2FsX3JlZ1swXT09NykgfHwgKHR4X2NhbF9yZWdbMF09PSgtOCkpKSAmJgorCQkJCSgodHhfY2FsX3JlZ1szXT09NykgfHwgKHR4X2NhbF9yZWdbM109PSgtOCkpKSkKKwkJCXsKKwkJCQlQSFlfREVCVUcoKCJbQ0FMXSAqKiA8X3R4X2lxX2NhbGlicmF0aW9uX2xvb3A+ICoqKioqKioqKlxuIikpOworCQkJCVBIWV9ERUJVRygoIltDQUxdICoqIFRYX0lRX0NBTElCUkFUSU9OIFNBVFVBVElPTiAhIVxuIikpOworCQkJCVBIWV9ERUJVRygoIltDQUxdICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4iKSk7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwkJZWxzZSAvLyAybmQtY3V0CisJCXsKKwkJCWlmICgoKHR4X2NhbF9yZWdbMF09PTMxKSB8fCAodHhfY2FsX3JlZ1swXT09KC0zMikpKSAmJgorCQkJCSgodHhfY2FsX3JlZ1szXT09MzEpIHx8ICh0eF9jYWxfcmVnWzNdPT0oLTMyKSkpKQorCQkJeworCQkJCVBIWV9ERUJVRygoIltDQUxdICoqIDxfdHhfaXFfY2FsaWJyYXRpb25fbG9vcD4gKioqKioqKioqXG4iKSk7CisJCQkJUEhZX0RFQlVHKCgiW0NBTF0gKiogVFhfSVFfQ0FMSUJSQVRJT04gU0FUVUFUSU9OICEhXG4iKSk7CisJCQkJUEhZX0RFQlVHKCgiW0NBTF0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiIpKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCisJCXR4X2NhbFswXSA9IHR4X2NhbFswXSArIHR4X2NhbF9yZWdbMF07CisJCXR4X2NhbFsxXSA9IHR4X2NhbFsxXSArIHR4X2NhbF9yZWdbMV07CisJCXR4X2NhbFsyXSA9IHR4X2NhbFsyXSArIHR4X2NhbF9yZWdbMl07CisJCXR4X2NhbFszXSA9IHR4X2NhbFszXSArIHR4X2NhbF9yZWdbM107CisJCVBIWV9ERUJVRygoIltDQUxdICAgICoqIGFwcGx5IHR4X2NhbFswXSA9ICVkXG4iLCB0eF9jYWxbMF0pKTsKKwkJUEhZX0RFQlVHKCgiW0NBTF0gICAgICAgYXBwbHkgdHhfY2FsWzFdID0gJWRcbiIsIHR4X2NhbFsxXSkpOworCQlQSFlfREVCVUcoKCJbQ0FMXSAgICAgICBhcHBseSB0eF9jYWxbMl0gPSAlZFxuIiwgdHhfY2FsWzJdKSk7CisJCVBIWV9ERUJVRygoIltDQUxdICAgICAgIGFwcGx5IHR4X2NhbFszXSA9ICVkXG4iLCB0eF9jYWxbM10pKTsKKworCQlpZiAocGh3X2RhdGEtPnJldmlzaW9uID09IDB4MjAwMikgLy8gMXN0LWN1dAorCQl7CisJCQl2YWwgJj0gMHgwMDAwRkZGRjsKKwkJCXZhbCB8PSAoKF9zMzJfdG9fczQodHhfY2FsWzBdKSA8PCAyOCl8CisJCQkJCShfczMyX3RvX3M0KHR4X2NhbFsxXSkgPDwgMjQpfAorCQkJCQkoX3MzMl90b19zNCh0eF9jYWxbMl0pIDw8IDIwKXwKKwkJCQkJKF9zMzJfdG9fczQodHhfY2FsWzNdKSA8PCAxNikpOworCQkJaHdfc2V0X2R4eF9yZWcocGh3X2RhdGEsIDB4NTQsIHZhbCk7CisJCQlQSFlfREVCVUcoKCJbQ0FMXSAgICAqKiBDQUxJQl9EQVRBID0gMHglMDhYXG4iLCB2YWwpKTsKKwkJCXJldHVybiAwOworCQl9CisJCWVsc2UgLy8gMm5kLWN1dAorCQl7CisJCQl2YWwgJj0gMHgwMDAwMDNGRjsKKwkJCXZhbCB8PSAoKF9zMzJfdG9fczUodHhfY2FsWzBdKSA8PCAyNyl8CisJCQkJCShfczMyX3RvX3M2KHR4X2NhbFsxXSkgPDwgMjEpfAorCQkJCQkoX3MzMl90b19zNih0eF9jYWxbMl0pIDw8IDE1KXwKKwkJCQkJKF9zMzJfdG9fczUodHhfY2FsWzNdKSA8PCAxMCkpOworCQkJaHdfc2V0X2R4eF9yZWcocGh3X2RhdGEsIDB4M0MsIHZhbCk7CisJCQlQSFlfREVCVUcoKCJbQ0FMXSAgICAqKiBUWF9JUV9DQUxJQlJBVElPTiA9IDB4JTA4WFxuIiwgdmFsKSk7CisJCQlyZXR1cm4gMDsKKwkJfQorCisJCS8vIGkuIFNldCAiY2FsaWJfc3RhcnQiIHRvIDB4MAorCQlyZWdfbW9kZV9jdHJsICY9IH5NQVNLX0NBTElCX1NUQVJUOworCQlod19zZXRfZHh4X3JlZyhwaHdfZGF0YSwgUkVHX01PREVfQ1RSTCwgcmVnX21vZGVfY3RybCk7CisJCVBIWV9ERUJVRygoIltDQUxdICAgIE1PREVfQ1RSTCAod3JpdGUpID0gMHglMDhYXG4iLCByZWdfbW9kZV9jdHJsKSk7CisKKwkJbG9vcC0tOworCX0KKworCXJldHVybiAxOworfQorCit2b2lkIF90eF9pcV9jYWxpYnJhdGlvbl93aW5ib25kKGh3X2RhdGFfdCAqcGh3X2RhdGEpCit7CisJdTMyICAgICByZWdfYWdjX2N0cmwzOworI2lmZGVmIF9ERUJVRworCXMzMiAgICAgdHhfY2FsX3JlZ1s0XTsKKworI2VuZGlmCisJdTMyICAgICByZWdfbW9kZV9jdHJsOworCXUzMiAgICAgdmFsOworCXU4ICAgICAgcmVzdWx0OworCisJUEhZX0RFQlVHKCgiW0NBTF0gLT4gWzRdX3R4X2lxX2NhbGlicmF0aW9uKClcbiIpKTsKKworCS8vMHgwMSAweEVFM0ZDMiAgOyAzQjhGRiAgOyBDYWxpYnJhdGlvbiAoNmEpLiBlbmFibGUgVFggSVEgY2FsaWJyYXRpb24gbG9vcCBjaXJjdWl0cworCXBoeV9zZXRfcmZfZGF0YShwaHdfZGF0YSwgMSwgKDE8PDI0KXwweEVFM0ZDMik7CisJLy8weDBCIDB4MTkwNUQ2ICA7IDA2NDE3ICA7IENhbGlicmF0aW9uICg2YikuIGVuYWJsZSBUWCBJL1EgY2FsIGxvb3Agc3F1YXJpbmcgY2lyY3VpdAorCXBoeV9zZXRfcmZfZGF0YShwaHdfZGF0YSwgMTEsICgxMTw8MjQpfDB4MTlCREQ2KTsgLy8gMjAwNjA2MTIuMS5hIDB4MTkwNUQ2KTsKKwkvLzB4MDUgMHgyNEM2MEEgIDsgMDkzMTggIDsgQ2FsaWJyYXRpb24gKDZjKS4gc2V0dGluZyBUWC1WR0EgZ2FpbjogVFhHQ0g9MiAmIEdQSz0xMTAgLS0+IHRvIGJlIG9wdGltaXplZAorCXBoeV9zZXRfcmZfZGF0YShwaHdfZGF0YSwgNSwgKDU8PDI0KXwweDI0QzYwQSk7IC8vMHgyNEM2MEEgKGhpZ2ggdGVtcGVyYXR1cmUpCisgICAgLy8weDA2IDB4MDY4ODBDICA7IDAxQTIwICA7IENhbGlicmF0aW9uICg2ZCkuIFJYR0NIPTAwOyBSWEdDTD0xMDAgMDAwIChSWFZHQT0zMikgLS0+IHRvIGJlIG9wdGltaXplZAorCXBoeV9zZXRfcmZfZGF0YShwaHdfZGF0YSwgNiwgKDY8PDI0KXwweDM0ODgwQyk7IC8vIDIwMDYwNjEyLjEuYSAweDA2ODkwQyk7CisJLy8weDAwIDB4RkRGMUMwICA7IDNGN0M3ICA7IENhbGlicmF0aW9uICg2ZSkuIHR1cm4gb24gSVEgaW1iYWxhbmNlL1Rlc3QgbW9kZQorCXBoeV9zZXRfcmZfZGF0YShwaHdfZGF0YSwgMCwgKDA8PDI0KXwweEZERjFDMCk7CisJLy87IFtCQi1jaGlwXTogQ2FsaWJyYXRpb24gKDZmKS5TZW5kIHRlc3QgcGF0dGVybgorCS8vOyBbQkItY2hpcF06IENhbGlicmF0aW9uICg2ZykuIFNlYXJjaCBSWEdDTCBvcHRpbWFsIHZhbHVlCisJLy87IFtCQi1jaGlwXTogQ2FsaWJyYXRpb24gKDZoKS4gQ2FjdWxhdGUgVFgtcGF0aCBJUSBpbWJhbGFuY2UgYW5kIHNldHRpbmcgVFggcGF0aCBJUSBjb21wZW5zYXRpb24gdGFibGUKKwkvL3BoeV9zZXRfcmZfZGF0YShwaHdfZGF0YSwgMywgKDM8PDI0KXwweDAyNTU4Nik7CisKKwlPU19TTEVFUCgzMDAwMCk7IC8vIDIwMDYwNjEyLjEuYSAzMG1zIGRlbGF5LiBBZGQgdGhlIGZvbGxvdyAyIGxpbmVzCisJLy9UbyBhZGp1c3QgVFhWR0EgdG8gZml0IGlxX21hZ18wIHJhbmdlIGZyb20gMTI1MCB+IDE3NTAKKwlhZGp1c3RfVFhWR0FfZm9yX2lxX21hZyggcGh3X2RhdGEgKTsKKworCS8vIGEuIERpc2FibGUgQUdDCisJaHdfZ2V0X2R4eF9yZWcocGh3X2RhdGEsIFJFR19BR0NfQ1RSTDMsICZyZWdfYWdjX2N0cmwzKTsKKwlyZWdfYWdjX2N0cmwzICY9IH5CSVQoMik7CisJcmVnX2FnY19jdHJsMyB8PSAoTUFTS19MTkFfRklYX0dBSU58TUFTS19BR0NfRklYKTsKKwlod19zZXRfZHh4X3JlZyhwaHdfZGF0YSwgUkVHX0FHQ19DVFJMMywgcmVnX2FnY19jdHJsMyk7CisKKwlod19nZXRfZHh4X3JlZyhwaHdfZGF0YSwgUkVHX0FHQ19DVFJMNSwgJnZhbCk7CisJdmFsIHw9IE1BU0tfQUdDX0ZJWF9HQUlOOworCWh3X3NldF9keHhfcmVnKHBod19kYXRhLCBSRUdfQUdDX0NUUkw1LCB2YWwpOworCisJcmVzdWx0ID0gX3R4X2lxX2NhbGlicmF0aW9uX2xvb3Bfd2luYm9uZChwaHdfZGF0YSwgMTUwLCAxMDApOworCisJaWYgKHJlc3VsdCA+IDApCisJeworCQlpZiAocGh3X2RhdGEtPnJldmlzaW9uID09IDB4MjAwMikgLy8gMXN0LWN1dAorCQl7CisJCQlod19nZXRfZHh4X3JlZyhwaHdfZGF0YSwgMHg1NCwgJnZhbCk7CisJCQl2YWwgJj0gMHgwMDAwRkZGRjsKKwkJCWh3X3NldF9keHhfcmVnKHBod19kYXRhLCAweDU0LCB2YWwpOworCQl9CisJCWVsc2UgLy8gMm5kLWN1dAorCQl7CisJCQlod19nZXRfZHh4X3JlZyhwaHdfZGF0YSwgMHgzQywgJnZhbCk7CisJCQl2YWwgJj0gMHgwMDAwMDNGRjsKKwkJCWh3X3NldF9keHhfcmVnKHBod19kYXRhLCAweDNDLCB2YWwpOworCQl9CisKKwkJcmVzdWx0ID0gX3R4X2lxX2NhbGlicmF0aW9uX2xvb3Bfd2luYm9uZChwaHdfZGF0YSwgMzAwLCAyMDApOworCisJCWlmIChyZXN1bHQgPiAwKQorCQl7CisJCQlpZiAocGh3X2RhdGEtPnJldmlzaW9uID09IDB4MjAwMikgLy8gMXN0LWN1dAorCQkJeworCQkJCWh3X2dldF9keHhfcmVnKHBod19kYXRhLCAweDU0LCAmdmFsKTsKKwkJCQl2YWwgJj0gMHgwMDAwRkZGRjsKKwkJCQlod19zZXRfZHh4X3JlZyhwaHdfZGF0YSwgMHg1NCwgdmFsKTsKKwkJCX0KKwkJCWVsc2UgLy8gMm5kLWN1dAorCQkJeworCQkJCWh3X2dldF9keHhfcmVnKHBod19kYXRhLCAweDNDLCAmdmFsKTsKKwkJCQl2YWwgJj0gMHgwMDAwMDNGRjsKKwkJCQlod19zZXRfZHh4X3JlZyhwaHdfZGF0YSwgMHgzQywgdmFsKTsKKwkJCX0KKworCQkJcmVzdWx0ID0gX3R4X2lxX2NhbGlicmF0aW9uX2xvb3Bfd2luYm9uZChwaHdfZGF0YSwgNTAwLCA0MDApOworCQkJaWYgKHJlc3VsdCA+IDApCisJCQl7CisJCQkJaWYgKHBod19kYXRhLT5yZXZpc2lvbiA9PSAweDIwMDIpIC8vIDFzdC1jdXQKKwkJCQl7CisJCQkJCWh3X2dldF9keHhfcmVnKHBod19kYXRhLCAweDU0LCAmdmFsKTsKKwkJCQkJdmFsICY9IDB4MDAwMEZGRkY7CisJCQkJCWh3X3NldF9keHhfcmVnKHBod19kYXRhLCAweDU0LCB2YWwpOworCQkJCX0KKwkJCQllbHNlIC8vIDJuZC1jdXQKKwkJCQl7CisJCQkJCWh3X2dldF9keHhfcmVnKHBod19kYXRhLCAweDNDLCAmdmFsKTsKKwkJCQkJdmFsICY9IDB4MDAwMDAzRkY7CisJCQkJCWh3X3NldF9keHhfcmVnKHBod19kYXRhLCAweDNDLCB2YWwpOworCQkJCX0KKworCisJCQkJcmVzdWx0ID0gX3R4X2lxX2NhbGlicmF0aW9uX2xvb3Bfd2luYm9uZChwaHdfZGF0YSwgNzAwLCA1MDApOworCisJCQkJaWYgKHJlc3VsdCA+IDApCisJCQkJeworCQkJCQlQSFlfREVCVUcoKCJbQ0FMXSAqKiA8X3R4X2lxX2NhbGlicmF0aW9uPiAqKioqKioqKioqKioqKlxuIikpOworCQkJCQlQSFlfREVCVUcoKCJbQ0FMXSAqKiBUWF9JUV9DQUxJQlJBVElPTiBGQUlMVVJFICEhXG4iKSk7CisJCQkJCVBIWV9ERUJVRygoIltDQUxdICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4iKSk7CisKKwkJCQkJaWYgKHBod19kYXRhLT5yZXZpc2lvbiA9PSAweDIwMDIpIC8vIDFzdC1jdXQKKwkJCQkJeworCQkJCQkJaHdfZ2V0X2R4eF9yZWcocGh3X2RhdGEsIDB4NTQsICZ2YWwpOworCQkJCQkJdmFsICY9IDB4MDAwMEZGRkY7CisJCQkJCQlod19zZXRfZHh4X3JlZyhwaHdfZGF0YSwgMHg1NCwgdmFsKTsKKwkJCQkJfQorCQkJCQllbHNlIC8vIDJuZC1jdXQKKwkJCQkJeworCQkJCQkJaHdfZ2V0X2R4eF9yZWcocGh3X2RhdGEsIDB4M0MsICZ2YWwpOworCQkJCQkJdmFsICY9IDB4MDAwMDAzRkY7CisJCQkJCQlod19zZXRfZHh4X3JlZyhwaHdfZGF0YSwgMHgzQywgdmFsKTsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJfQorCX0KKworCS8vIGkuIFNldCAiY2FsaWJfc3RhcnQiIHRvIDB4MAorCWh3X2dldF9keHhfcmVnKHBod19kYXRhLCBSRUdfTU9ERV9DVFJMLCAmcmVnX21vZGVfY3RybCk7CisJcmVnX21vZGVfY3RybCAmPSB+TUFTS19DQUxJQl9TVEFSVDsKKwlod19zZXRfZHh4X3JlZyhwaHdfZGF0YSwgUkVHX01PREVfQ1RSTCwgcmVnX21vZGVfY3RybCk7CisJUEhZX0RFQlVHKCgiW0NBTF0gICAgTU9ERV9DVFJMICh3cml0ZSkgPSAweCUwOFhcbiIsIHJlZ19tb2RlX2N0cmwpKTsKKworCS8vIGcuIEVuYWJsZSBBR0MKKwkvL2h3X2dldF9keHhfcmVnKHBod19kYXRhLCBSRUdfQUdDX0NUUkwzLCAmdmFsKTsKKwlyZWdfYWdjX2N0cmwzIHw9IEJJVCgyKTsKKwlyZWdfYWdjX2N0cmwzICY9IH4oTUFTS19MTkFfRklYX0dBSU58TUFTS19BR0NfRklYKTsKKwlod19zZXRfZHh4X3JlZyhwaHdfZGF0YSwgUkVHX0FHQ19DVFJMMywgcmVnX2FnY19jdHJsMyk7CisKKyNpZmRlZiBfREVCVUcKKwlpZiAocGh3X2RhdGEtPnJldmlzaW9uID09IDB4MjAwMikgLy8gMXN0LWN1dAorCXsKKwkJaHdfZ2V0X2R4eF9yZWcocGh3X2RhdGEsIDB4NTQsICZ2YWwpOworCQlQSFlfREVCVUcoKCJbQ0FMXSAgICAqKiAweDU0ID0gMHglMDhYXG4iLCB2YWwpKTsKKwkJdHhfY2FsX3JlZ1swXSA9IF9zNF90b19zMzIoKHZhbCAmIDB4RjAwMDAwMDApID4+IDI4KTsKKwkJdHhfY2FsX3JlZ1sxXSA9IF9zNF90b19zMzIoKHZhbCAmIDB4MEYwMDAwMDApID4+IDI0KTsKKwkJdHhfY2FsX3JlZ1syXSA9IF9zNF90b19zMzIoKHZhbCAmIDB4MDBGMDAwMDApID4+IDIwKTsKKwkJdHhfY2FsX3JlZ1szXSA9IF9zNF90b19zMzIoKHZhbCAmIDB4MDAwRjAwMDApID4+IDE2KTsKKwl9CisJZWxzZSAvLyAybmQtY3V0CisJeworCQlod19nZXRfZHh4X3JlZyhwaHdfZGF0YSwgMHgzQywgJnZhbCk7CisJCVBIWV9ERUJVRygoIltDQUxdICAgICoqIDB4M0MgPSAweCUwOFhcbiIsIHZhbCkpOworCQl0eF9jYWxfcmVnWzBdID0gX3M1X3RvX3MzMigodmFsICYgMHhGODAwMDAwMCkgPj4gMjcpOworCQl0eF9jYWxfcmVnWzFdID0gX3M2X3RvX3MzMigodmFsICYgMHgwN0UwMDAwMCkgPj4gMjEpOworCQl0eF9jYWxfcmVnWzJdID0gX3M2X3RvX3MzMigodmFsICYgMHgwMDFGODAwMCkgPj4gMTUpOworCQl0eF9jYWxfcmVnWzNdID0gX3M1X3RvX3MzMigodmFsICYgMHgwMDAwN0MwMCkgPj4gMTApOworCisJfQorCisJUEhZX0RFQlVHKCgiW0NBTF0gICAgKiogdHhfY2FsX3JlZ1swXSA9ICVkXG4iLCB0eF9jYWxfcmVnWzBdKSk7CisJUEhZX0RFQlVHKCgiW0NBTF0gICAgICAgdHhfY2FsX3JlZ1sxXSA9ICVkXG4iLCB0eF9jYWxfcmVnWzFdKSk7CisJUEhZX0RFQlVHKCgiW0NBTF0gICAgICAgdHhfY2FsX3JlZ1syXSA9ICVkXG4iLCB0eF9jYWxfcmVnWzJdKSk7CisJUEhZX0RFQlVHKCgiW0NBTF0gICAgICAgdHhfY2FsX3JlZ1szXSA9ICVkXG4iLCB0eF9jYWxfcmVnWzNdKSk7CisjZW5kaWYKKworCisJLy8gZm9yIHRlc3QgLSBCRU4KKwkvLyBSRiBDb250cm9sIE92ZXJyaWRlCit9CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCit1OCBfcnhfaXFfY2FsaWJyYXRpb25fbG9vcF93aW5ib25kKGh3X2RhdGFfdCAqcGh3X2RhdGEsIHUxNiBmYWN0b3IsIHUzMiBmcmVxdWVuY3kpCit7CisJdTMyICAgICByZWdfbW9kZV9jdHJsOworCXMzMiAgICAgaXFjYWxfdG9uZV9pOworCXMzMiAgICAgaXFjYWxfdG9uZV9xOworCXMzMiAgICAgaXFjYWxfaW1hZ2VfaTsKKwlzMzIgICAgIGlxY2FsX2ltYWdlX3E7CisJczMyICAgICByb3RfdG9uZV9pX2I7CisJczMyICAgICByb3RfdG9uZV9xX2I7CisJczMyICAgICByb3RfaW1hZ2VfaV9iOworCXMzMiAgICAgcm90X2ltYWdlX3FfYjsKKwlzMzIgICAgIHJ4X2NhbF9mbHRfYls0XTsKKwlzMzIgICAgIHJ4X2NhbFs0XTsKKwlzMzIgICAgIHJ4X2NhbF9yZWdbNF07CisJczMyICAgICBhXzIsIGJfMjsKKwlzMzIgICAgIHNpbl9iLCBzaW5fMmI7CisJczMyICAgICBjb3NfYiwgY29zXzJiOworCXMzMiAgICAgdGVtcDEsIHRlbXAyOworCXUzMiAgICAgdmFsOworCXUxNiAgICAgbG9vcDsKKworCXUzMiAgICAgcHdyX3RvbmU7CisJdTMyICAgICBwd3JfaW1hZ2U7CisJdTggICAgICB2ZXJpZnlfY291bnQ7CisKKwlzMzIgICAgIGlxY2FsX3RvbmVfaV9hdmcsaXFjYWxfdG9uZV9xX2F2ZzsKKwlzMzIgICAgIGlxY2FsX2ltYWdlX2lfYXZnLGlxY2FsX2ltYWdlX3FfYXZnOworCXUxNgkJY2FwdHVyZV90aW1lOworCisJUEhZX0RFQlVHKCgiW0NBTF0gLT4gWzVdX3J4X2lxX2NhbGlicmF0aW9uX2xvb3AoKVxuIikpOworCVBIWV9ERUJVRygoIltDQUxdICoqIGZhY3RvciA9ICVkXG4iLCBmYWN0b3IpKTsKKworCisvLyBSRiBDb250cm9sIE92ZXJyaWRlCisJaHdfZ2V0X2N4eF9yZWcocGh3X2RhdGEsIDB4ODAsICZ2YWwpOworCXZhbCB8PSBCSVQoMTkpOworCWh3X3NldF9jeHhfcmVnKHBod19kYXRhLCAweDgwLCB2YWwpOworCisvLyBSRl9DdHJsCisJaHdfZ2V0X2N4eF9yZWcocGh3X2RhdGEsIDB4RTQsICZ2YWwpOworCXZhbCB8PSBCSVQoMCk7CisJaHdfc2V0X2N4eF9yZWcocGh3X2RhdGEsIDB4RTQsIHZhbCk7CisJUEhZX0RFQlVHKCgiW0NBTF0gKiogUkZfQ1RSTCgweEU0KSA9IDB4JTA4WCIsIHZhbCkpOworCisJaHdfc2V0X2R4eF9yZWcocGh3X2RhdGEsIDB4NTgsIDB4NDQ0NDQ0NDQpOyAvLyBJUV9BbHBoYQorCisJLy8gYi4KKworCWh3X2dldF9keHhfcmVnKHBod19kYXRhLCBSRUdfTU9ERV9DVFJMLCAmcmVnX21vZGVfY3RybCk7CisJUEhZX0RFQlVHKCgiW0NBTF0gICAgTU9ERV9DVFJMIChyZWFkKSA9IDB4JTA4WFxuIiwgcmVnX21vZGVfY3RybCkpOworCisJdmVyaWZ5X2NvdW50ID0gMDsKKworCS8vZm9yIChsb29wID0gMDsgbG9vcCA8IDE7IGxvb3ArKykKKwkvL2ZvciAobG9vcCA9IDA7IGxvb3AgPCBMT09QX1RJTUVTOyBsb29wKyspCisJbG9vcCA9IExPT1BfVElNRVM7CisJd2hpbGUgKGxvb3AgPiAwKQorCXsKKwkJUEhZX0RFQlVHKCgiW0NBTF0gWyVkLl0gPF9yeF9pcV9jYWxpYnJhdGlvbl9sb29wPlxuIiwgKExPT1BfVElNRVMtbG9vcCsxKSkpOworCQlpcWNhbF90b25lX2lfYXZnPTA7CisJCWlxY2FsX3RvbmVfcV9hdmc9MDsKKwkJaXFjYWxfaW1hZ2VfaV9hdmc9MDsKKwkJaXFjYWxfaW1hZ2VfcV9hdmc9MDsKKwkJY2FwdHVyZV90aW1lPTA7CisKKwkJZm9yKGNhcHR1cmVfdGltZT0wOyBjYXB0dXJlX3RpbWU8MTA7IGNhcHR1cmVfdGltZSsrKQorCQl7CisJCS8vIGkuIFNldCAiY2FsaWJfc3RhcnQiIHRvIDB4MAorCQlyZWdfbW9kZV9jdHJsICY9IH5NQVNLX0NBTElCX1NUQVJUOworCQlpZiggIWh3X3NldF9keHhfcmVnKHBod19kYXRhLCBSRUdfTU9ERV9DVFJMLCByZWdfbW9kZV9jdHJsKSApLy8yMDA2MDcxOC4xIG1vZGlmeQorCQkJcmV0dXJuIDA7CisJCVBIWV9ERUJVRygoIltDQUxdICAgIE1PREVfQ1RSTCAod3JpdGUpID0gMHglMDhYXG4iLCByZWdfbW9kZV9jdHJsKSk7CisJCXBhX3N0YWxsX2V4ZWN1dGlvbihVUyk7CisKKwkJcmVnX21vZGVfY3RybCAmPSB+TUFTS19JUUNBTF9NT0RFOworCQlyZWdfbW9kZV9jdHJsIHw9IChNQVNLX0NBTElCX1NUQVJUfDB4MSk7CisJCWh3X3NldF9keHhfcmVnKHBod19kYXRhLCBSRUdfTU9ERV9DVFJMLCByZWdfbW9kZV9jdHJsKTsKKwkJUEhZX0RFQlVHKCgiW0NBTF0gICAgTU9ERV9DVFJMICh3cml0ZSkgPSAweCUwOFhcbiIsIHJlZ19tb2RlX2N0cmwpKTsKKwkJcGFfc3RhbGxfZXhlY3V0aW9uKFVTKTsgIC8vU2hvdWxkIGJlIHJlYWQgb3V0IGFmdGVyIDQ1MHVzCisKKwkJLy8gYy4KKwkJaHdfZ2V0X2R4eF9yZWcocGh3X2RhdGEsIFJFR19DQUxJQl9SRUFEMSwgJnZhbCk7CisJCVBIWV9ERUJVRygoIltDQUxdICAgIENBTElCX1JFQUQxID0gMHglMDhYXG4iLCB2YWwpKTsKKworCQlpcWNhbF90b25lX2kgPSBfczEzX3RvX3MzMih2YWwgJiAweDAwMDAxRkZGKTsKKwkJaXFjYWxfdG9uZV9xID0gX3MxM190b19zMzIoKHZhbCAmIDB4MDNGRkUwMDApID4+IDEzKTsKKwkJUEhZX0RFQlVHKCgiW0NBTF0gICAgKiogaXFjYWxfdG9uZV9pID0gJWQsIGlxY2FsX3RvbmVfcSA9ICVkXG4iLAorCQkJCSAgIGlxY2FsX3RvbmVfaSwgaXFjYWxfdG9uZV9xKSk7CisKKwkJaHdfZ2V0X2R4eF9yZWcocGh3X2RhdGEsIFJFR19DQUxJQl9SRUFEMiwgJnZhbCk7CisJCVBIWV9ERUJVRygoIltDQUxdICAgIENBTElCX1JFQUQyID0gMHglMDhYXG4iLCB2YWwpKTsKKworCQlpcWNhbF9pbWFnZV9pID0gX3MxM190b19zMzIodmFsICYgMHgwMDAwMUZGRik7CisJCWlxY2FsX2ltYWdlX3EgPSBfczEzX3RvX3MzMigodmFsICYgMHgwM0ZGRTAwMCkgPj4gMTMpOworCQlQSFlfREVCVUcoKCJbQ0FMXSAgICAqKiBpcWNhbF9pbWFnZV9pID0gJWQsIGlxY2FsX2ltYWdlX3EgPSAlZFxuIiwKKwkJCQkgICBpcWNhbF9pbWFnZV9pLCBpcWNhbF9pbWFnZV9xKSk7CisJCQlpZiggY2FwdHVyZV90aW1lID09IDApCisJCQl7CisJCQkJY29udGludWU7CisJCQl9CisJCQllbHNlCisJCQl7CisJCQkJaXFjYWxfaW1hZ2VfaV9hdmc9KCBpcWNhbF9pbWFnZV9pX2F2ZyooY2FwdHVyZV90aW1lLTEpICtpcWNhbF9pbWFnZV9pKS9jYXB0dXJlX3RpbWU7CisJCQkJaXFjYWxfaW1hZ2VfcV9hdmc9KCBpcWNhbF9pbWFnZV9xX2F2ZyooY2FwdHVyZV90aW1lLTEpICtpcWNhbF9pbWFnZV9xKS9jYXB0dXJlX3RpbWU7CisJCQkJaXFjYWxfdG9uZV9pX2F2Zz0oIGlxY2FsX3RvbmVfaV9hdmcqKGNhcHR1cmVfdGltZS0xKSAraXFjYWxfdG9uZV9pKS9jYXB0dXJlX3RpbWU7CisJCQkJaXFjYWxfdG9uZV9xX2F2Zz0oIGlxY2FsX3RvbmVfcV9hdmcqKGNhcHR1cmVfdGltZS0xKSAraXFjYWxfdG9uZV9xKS9jYXB0dXJlX3RpbWU7CisJCQl9CisJCX0KKworCisJCWlxY2FsX2ltYWdlX2kgPSBpcWNhbF9pbWFnZV9pX2F2ZzsKKwkJaXFjYWxfaW1hZ2VfcSA9IGlxY2FsX2ltYWdlX3FfYXZnOworCQlpcWNhbF90b25lX2kgPSBpcWNhbF90b25lX2lfYXZnOworCQlpcWNhbF90b25lX3EgPSBpcWNhbF90b25lX3FfYXZnOworCisJCS8vIGQuCisJCXJvdF90b25lX2lfYiA9IChpcWNhbF90b25lX2kgKiBpcWNhbF90b25lX2kgKworCQkJCQkJaXFjYWxfdG9uZV9xICogaXFjYWxfdG9uZV9xKSAvIDEwMjQ7CisJCXJvdF90b25lX3FfYiA9IChpcWNhbF90b25lX2kgKiBpcWNhbF90b25lX3EgKiAoLTEpICsKKwkJCQkJCWlxY2FsX3RvbmVfcSAqIGlxY2FsX3RvbmVfaSkgLyAxMDI0OworCQlyb3RfaW1hZ2VfaV9iID0gKGlxY2FsX2ltYWdlX2kgKiBpcWNhbF90b25lX2kgLQorCQkJCQkJIGlxY2FsX2ltYWdlX3EgKiBpcWNhbF90b25lX3EpIC8gMTAyNDsKKwkJcm90X2ltYWdlX3FfYiA9IChpcWNhbF9pbWFnZV9pICogaXFjYWxfdG9uZV9xICsKKwkJCQkJCSBpcWNhbF9pbWFnZV9xICogaXFjYWxfdG9uZV9pKSAvIDEwMjQ7CisKKwkJUEhZX0RFQlVHKCgiW0NBTF0gICAgKiogcm90X3RvbmVfaV9iICA9ICVkXG4iLCByb3RfdG9uZV9pX2IpKTsKKwkJUEhZX0RFQlVHKCgiW0NBTF0gICAgKiogcm90X3RvbmVfcV9iICA9ICVkXG4iLCByb3RfdG9uZV9xX2IpKTsKKwkJUEhZX0RFQlVHKCgiW0NBTF0gICAgKiogcm90X2ltYWdlX2lfYiA9ICVkXG4iLCByb3RfaW1hZ2VfaV9iKSk7CisJCVBIWV9ERUJVRygoIltDQUxdICAgICoqIHJvdF9pbWFnZV9xX2IgPSAlZFxuIiwgcm90X2ltYWdlX3FfYikpOworCisJCS8vIGYuCisJCWlmIChyb3RfdG9uZV9pX2IgPT0gMCkKKwkJeworCQkJUEhZX0RFQlVHKCgiW0NBTF0gKiogPF9yeF9pcV9jYWxpYnJhdGlvbl9sb29wPiBFUlJPUiAqKioqKioqXG4iKSk7CisJCQlQSFlfREVCVUcoKCJbQ0FMXSAqKiByb3RfdG9uZV9pX2I9MCB0byBjYWxjdWxhdGUgRVBTIGFuZCBUSEVUQSAhIVxuIikpOworCQkJUEhZX0RFQlVHKCgiW0NBTF0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4iKSk7CisJCQlicmVhazsKKwkJfQorCisJCWFfMiA9IChyb3RfaW1hZ2VfaV9iICogMzI3NjgpIC8gcm90X3RvbmVfaV9iIC0KKwkJCXBod19kYXRhLT5pcV9yc2RsX2dhaW5fdHhfZDI7CisJCWJfMiA9IChyb3RfaW1hZ2VfcV9iICogMzI3NjgpIC8gcm90X3RvbmVfaV9iIC0KKwkJCXBod19kYXRhLT5pcV9yc2RsX3BoYXNlX3R4X2QyOworCisJCVBIWV9ERUJVRygoIltDQUxdICAgICoqIGlxX3JzZGxfZ2Fpbl90eF9kMiA9ICVkXG4iLCBwaHdfZGF0YS0+aXFfcnNkbF9nYWluX3R4X2QyKSk7CisJCVBIWV9ERUJVRygoIltDQUxdICAgICoqIGlxX3JzZGxfcGhhc2VfdHhfZDI9ICVkXG4iLCBwaHdfZGF0YS0+aXFfcnNkbF9waGFzZV90eF9kMikpOworCQlQSFlfREVCVUcoKCJbQ0FMXSAgICAqKioqKiBFUFNJTE9OLzIgPSAlZFxuIiwgYV8yKSk7CisJCVBIWV9ERUJVRygoIltDQUxdICAgICoqKioqIFRIRVRBLzIgICA9ICVkXG4iLCBiXzIpKTsKKworCQlfc2luX2NvcyhiXzIsICZzaW5fYiwgJmNvc19iKTsKKwkJX3Npbl9jb3MoYl8yKjIsICZzaW5fMmIsICZjb3NfMmIpOworCQlQSFlfREVCVUcoKCJbQ0FMXSAgICAqKiBzaW4oYi8yKT0lZCwgY29zKGIvMik9JWRcbiIsIHNpbl9iLCBjb3NfYikpOworCQlQSFlfREVCVUcoKCJbQ0FMXSAgICAqKiBzaW4oYik9JWQsIGNvcyhiKT0lZFxuIiwgc2luXzJiLCBjb3NfMmIpKTsKKworCQlpZiAoY29zXzJiID09IDApCisJCXsKKwkJCVBIWV9ERUJVRygoIltDQUxdICoqIDxfcnhfaXFfY2FsaWJyYXRpb25fbG9vcD4gRVJST1IgKioqKioqKlxuIikpOworCQkJUEhZX0RFQlVHKCgiW0NBTF0gKiogY29zKGIpPTAgISFcbiIpKTsKKwkJCVBIWV9ERUJVRygoIltDQUxdICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuIikpOworCQkJYnJlYWs7CisJCX0KKworCQkvLyAxMjgwICogMzI3NjggPSA0MTk0MzA0MAorCQl0ZW1wMSA9ICg0MTk0MzA0MC9jb3NfMmIpKmNvc19iOworCisJCS8vdGVtcDIgPSAoNDE5NDMwNDAvY29zXzJiKSpzaW5fYiooLTEpOworCQlpZiAocGh3X2RhdGEtPnJldmlzaW9uID09IDB4MjAwMikgLy8gMXN0LWN1dAorCQl7CisJCQl0ZW1wMiA9ICg0MTk0MzA0MC9jb3NfMmIpKnNpbl9iKigtMSk7CisJCX0KKwkJZWxzZSAvLyAybmQtY3V0CisJCXsKKwkJCXRlbXAyID0gKDQxOTQzMDQwKjQvY29zXzJiKSpzaW5fYiooLTEpOworCQl9CisKKwkJcnhfY2FsX2ZsdF9iWzBdID0gX2Zsb29yKHRlbXAxLygzMjc2OCthXzIpKTsKKwkJcnhfY2FsX2ZsdF9iWzFdID0gX2Zsb29yKHRlbXAyLygzMjc2OC1hXzIpKTsKKwkJcnhfY2FsX2ZsdF9iWzJdID0gX2Zsb29yKHRlbXAyLygzMjc2OCthXzIpKTsKKwkJcnhfY2FsX2ZsdF9iWzNdID0gX2Zsb29yKHRlbXAxLygzMjc2OC1hXzIpKTsKKworCQlQSFlfREVCVUcoKCJbQ0FMXSAgICAqKiByeF9jYWxfZmx0X2JbMF0gPSAlZFxuIiwgcnhfY2FsX2ZsdF9iWzBdKSk7CisJCVBIWV9ERUJVRygoIltDQUxdICAgICAgIHJ4X2NhbF9mbHRfYlsxXSA9ICVkXG4iLCByeF9jYWxfZmx0X2JbMV0pKTsKKwkJUEhZX0RFQlVHKCgiW0NBTF0gICAgICAgcnhfY2FsX2ZsdF9iWzJdID0gJWRcbiIsIHJ4X2NhbF9mbHRfYlsyXSkpOworCQlQSFlfREVCVUcoKCJbQ0FMXSAgICAgICByeF9jYWxfZmx0X2JbM10gPSAlZFxuIiwgcnhfY2FsX2ZsdF9iWzNdKSk7CisKKwkJcnhfY2FsWzBdID0gcnhfY2FsX2ZsdF9iWzBdIC0gMTI4OworCQlyeF9jYWxbMV0gPSByeF9jYWxfZmx0X2JbMV07CisJCXJ4X2NhbFsyXSA9IHJ4X2NhbF9mbHRfYlsyXTsKKwkJcnhfY2FsWzNdID0gcnhfY2FsX2ZsdF9iWzNdIC0gMTI4OworCQlQSFlfREVCVUcoKCJbQ0FMXSAgICAqKiByeF9jYWxbMF0gPSAlZFxuIiwgcnhfY2FsWzBdKSk7CisJCVBIWV9ERUJVRygoIltDQUxdICAgICAgIHJ4X2NhbFsxXSA9ICVkXG4iLCByeF9jYWxbMV0pKTsKKwkJUEhZX0RFQlVHKCgiW0NBTF0gICAgICAgcnhfY2FsWzJdID0gJWRcbiIsIHJ4X2NhbFsyXSkpOworCQlQSFlfREVCVUcoKCJbQ0FMXSAgICAgICByeF9jYWxbM10gPSAlZFxuIiwgcnhfY2FsWzNdKSk7CisKKwkJLy8gZS4KKwkJcHdyX3RvbmUgPSAoaXFjYWxfdG9uZV9pKmlxY2FsX3RvbmVfaSArIGlxY2FsX3RvbmVfcSppcWNhbF90b25lX3EpOworCQlwd3JfaW1hZ2UgPSAoaXFjYWxfaW1hZ2VfaSppcWNhbF9pbWFnZV9pICsgaXFjYWxfaW1hZ2VfcSppcWNhbF9pbWFnZV9xKSpmYWN0b3I7CisKKwkJUEhZX0RFQlVHKCgiW0NBTF0gICAgKiogcHdyX3RvbmUgID0gJWRcbiIsIHB3cl90b25lKSk7CisJCVBIWV9ERUJVRygoIltDQUxdICAgICoqIHB3cl9pbWFnZSAgPSAlZFxuIiwgcHdyX2ltYWdlKSk7CisKKwkJaWYgKHB3cl90b25lID4gcHdyX2ltYWdlKQorCQl7CisJCQl2ZXJpZnlfY291bnQrKzsKKworCQkJUEhZX0RFQlVHKCgiW0NBTF0gKiogPF9yeF9pcV9jYWxpYnJhdGlvbl9sb29wPiAqKioqKioqKioqKioqXG4iKSk7CisJCQlQSFlfREVCVUcoKCJbQ0FMXSAqKiBWRVJJRlkgT0sgIyAlZCAhIVxuIiwgdmVyaWZ5X2NvdW50KSk7CisJCQlQSFlfREVCVUcoKCJbQ0FMXSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiIpKTsKKworCQkJaWYgKHZlcmlmeV9jb3VudCA+IDIpCisJCQl7CisJCQkJUEhZX0RFQlVHKCgiW0NBTF0gKiogPF9yeF9pcV9jYWxpYnJhdGlvbl9sb29wPiAqKioqKioqKipcbiIpKTsKKwkJCQlQSFlfREVCVUcoKCJbQ0FMXSAqKiBSWF9JUV9DQUxJQlJBVElPTiBPSyAhIVxuIikpOworCQkJCVBIWV9ERUJVRygoIltDQUxdICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4iKSk7CisJCQkJcmV0dXJuIDA7CisJCQl9CisKKwkJCWNvbnRpbnVlOworCQl9CisJCS8vIGcuCisJCWh3X2dldF9keHhfcmVnKHBod19kYXRhLCAweDU0LCAmdmFsKTsKKwkJUEhZX0RFQlVHKCgiW0NBTF0gICAgKiogMHg1NCA9IDB4JTA4WFxuIiwgdmFsKSk7CisKKwkJaWYgKHBod19kYXRhLT5yZXZpc2lvbiA9PSAweDIwMDIpIC8vIDFzdC1jdXQKKwkJeworCQkJcnhfY2FsX3JlZ1swXSA9IF9zNF90b19zMzIoKHZhbCAmIDB4MDAwMEYwMDApID4+IDEyKTsKKwkJCXJ4X2NhbF9yZWdbMV0gPSBfczRfdG9fczMyKCh2YWwgJiAweDAwMDAwRjAwKSA+PiAgOCk7CisJCQlyeF9jYWxfcmVnWzJdID0gX3M0X3RvX3MzMigodmFsICYgMHgwMDAwMDBGMCkgPj4gIDQpOworCQkJcnhfY2FsX3JlZ1szXSA9IF9zNF90b19zMzIoKHZhbCAmIDB4MDAwMDAwMEYpKTsKKwkJfQorCQllbHNlIC8vIDJuZC1jdXQKKwkJeworCQkJcnhfY2FsX3JlZ1swXSA9IF9zNV90b19zMzIoKHZhbCAmIDB4RjgwMDAwMDApID4+IDI3KTsKKwkJCXJ4X2NhbF9yZWdbMV0gPSBfczZfdG9fczMyKCh2YWwgJiAweDA3RTAwMDAwKSA+PiAyMSk7CisJCQlyeF9jYWxfcmVnWzJdID0gX3M2X3RvX3MzMigodmFsICYgMHgwMDFGODAwMCkgPj4gMTUpOworCQkJcnhfY2FsX3JlZ1szXSA9IF9zNV90b19zMzIoKHZhbCAmIDB4MDAwMDdDMDApID4+IDEwKTsKKwkJfQorCisJCVBIWV9ERUJVRygoIltDQUxdICAgICoqIHJ4X2NhbF9yZWdbMF0gPSAlZFxuIiwgcnhfY2FsX3JlZ1swXSkpOworCQlQSFlfREVCVUcoKCJbQ0FMXSAgICAgICByeF9jYWxfcmVnWzFdID0gJWRcbiIsIHJ4X2NhbF9yZWdbMV0pKTsKKwkJUEhZX0RFQlVHKCgiW0NBTF0gICAgICAgcnhfY2FsX3JlZ1syXSA9ICVkXG4iLCByeF9jYWxfcmVnWzJdKSk7CisJCVBIWV9ERUJVRygoIltDQUxdICAgICAgIHJ4X2NhbF9yZWdbM10gPSAlZFxuIiwgcnhfY2FsX3JlZ1szXSkpOworCisJCWlmIChwaHdfZGF0YS0+cmV2aXNpb24gPT0gMHgyMDAyKSAvLyAxc3QtY3V0CisJCXsKKwkJCWlmICgoKHJ4X2NhbF9yZWdbMF09PTcpIHx8IChyeF9jYWxfcmVnWzBdPT0oLTgpKSkgJiYKKwkJCQkoKHJ4X2NhbF9yZWdbM109PTcpIHx8IChyeF9jYWxfcmVnWzNdPT0oLTgpKSkpCisJCQl7CisJCQkJUEhZX0RFQlVHKCgiW0NBTF0gKiogPF9yeF9pcV9jYWxpYnJhdGlvbl9sb29wPiAqKioqKioqKipcbiIpKTsKKwkJCQlQSFlfREVCVUcoKCJbQ0FMXSAqKiBSWF9JUV9DQUxJQlJBVElPTiBTQVRVQVRJT04gISFcbiIpKTsKKwkJCQlQSFlfREVCVUcoKCJbQ0FMXSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuIikpOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJCWVsc2UgLy8gMm5kLWN1dAorCQl7CisJCQlpZiAoKChyeF9jYWxfcmVnWzBdPT0zMSkgfHwgKHJ4X2NhbF9yZWdbMF09PSgtMzIpKSkgJiYKKwkJCQkoKHJ4X2NhbF9yZWdbM109PTMxKSB8fCAocnhfY2FsX3JlZ1szXT09KC0zMikpKSkKKwkJCXsKKwkJCQlQSFlfREVCVUcoKCJbQ0FMXSAqKiA8X3J4X2lxX2NhbGlicmF0aW9uX2xvb3A+ICoqKioqKioqKlxuIikpOworCQkJCVBIWV9ERUJVRygoIltDQUxdICoqIFJYX0lRX0NBTElCUkFUSU9OIFNBVFVBVElPTiAhIVxuIikpOworCQkJCVBIWV9ERUJVRygoIltDQUxdICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4iKSk7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKworCQlyeF9jYWxbMF0gPSByeF9jYWxbMF0gKyByeF9jYWxfcmVnWzBdOworCQlyeF9jYWxbMV0gPSByeF9jYWxbMV0gKyByeF9jYWxfcmVnWzFdOworCQlyeF9jYWxbMl0gPSByeF9jYWxbMl0gKyByeF9jYWxfcmVnWzJdOworCQlyeF9jYWxbM10gPSByeF9jYWxbM10gKyByeF9jYWxfcmVnWzNdOworCQlQSFlfREVCVUcoKCJbQ0FMXSAgICAqKiBhcHBseSByeF9jYWxbMF0gPSAlZFxuIiwgcnhfY2FsWzBdKSk7CisJCVBIWV9ERUJVRygoIltDQUxdICAgICAgIGFwcGx5IHJ4X2NhbFsxXSA9ICVkXG4iLCByeF9jYWxbMV0pKTsKKwkJUEhZX0RFQlVHKCgiW0NBTF0gICAgICAgYXBwbHkgcnhfY2FsWzJdID0gJWRcbiIsIHJ4X2NhbFsyXSkpOworCQlQSFlfREVCVUcoKCJbQ0FMXSAgICAgICBhcHBseSByeF9jYWxbM10gPSAlZFxuIiwgcnhfY2FsWzNdKSk7CisKKwkJaHdfZ2V0X2R4eF9yZWcocGh3X2RhdGEsIDB4NTQsICZ2YWwpOworCQlpZiAocGh3X2RhdGEtPnJldmlzaW9uID09IDB4MjAwMikgLy8gMXN0LWN1dAorCQl7CisJCQl2YWwgJj0gMHgwMDAwRkZGRjsKKwkJCXZhbCB8PSAoKF9zMzJfdG9fczQocnhfY2FsWzBdKSA8PCAxMil8CisJCQkJCShfczMyX3RvX3M0KHJ4X2NhbFsxXSkgPDwgIDgpfAorCQkJCQkoX3MzMl90b19zNChyeF9jYWxbMl0pIDw8ICA0KXwKKwkJCQkJKF9zMzJfdG9fczQocnhfY2FsWzNdKSkpOworCQkJaHdfc2V0X2R4eF9yZWcocGh3X2RhdGEsIDB4NTQsIHZhbCk7CisJCX0KKwkJZWxzZSAvLyAybmQtY3V0CisJCXsKKwkJCXZhbCAmPSAweDAwMDAwM0ZGOworCQkJdmFsIHw9ICgoX3MzMl90b19zNShyeF9jYWxbMF0pIDw8IDI3KXwKKwkJCQkJKF9zMzJfdG9fczYocnhfY2FsWzFdKSA8PCAyMSl8CisJCQkJCShfczMyX3RvX3M2KHJ4X2NhbFsyXSkgPDwgMTUpfAorCQkJCQkoX3MzMl90b19zNShyeF9jYWxbM10pIDw8IDEwKSk7CisJCQlod19zZXRfZHh4X3JlZyhwaHdfZGF0YSwgMHg1NCwgdmFsKTsKKworCQkJaWYoIGxvb3AgPT0gMyApCisJCQlyZXR1cm4gMDsKKwkJfQorCQlQSFlfREVCVUcoKCJbQ0FMXSAgICAqKiBDQUxJQl9EQVRBID0gMHglMDhYXG4iLCB2YWwpKTsKKworCQlsb29wLS07CisJfQorCisJcmV0dXJuIDE7Cit9CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KK3ZvaWQgX3J4X2lxX2NhbGlicmF0aW9uX3dpbmJvbmQoaHdfZGF0YV90ICpwaHdfZGF0YSwgdTMyIGZyZXF1ZW5jeSkKK3sKKy8vIGZpZ28gMjAwNTA1MjMgbWFya2VkIHRoc2kgZmxhZyBmb3IgY2FuJ3QgY29tcGlsZSBmb3IgcmVsZXNhc2UKKyNpZmRlZiBfREVCVUcKKwlzMzIgICAgIHJ4X2NhbF9yZWdbNF07CisJdTMyICAgICB2YWw7CisjZW5kaWYKKworCXU4ICAgICAgcmVzdWx0OworCisJUEhZX0RFQlVHKCgiW0NBTF0gLT4gWzVdX3J4X2lxX2NhbGlicmF0aW9uKClcbiIpKTsKKy8vIGEuIFNldCBSRklDIHRvICJSWCBjYWxpYnJhdGlvbiBtb2RlIgorCS8vOyAtLS0tLSBDYWxpYnJhdGlvbiAoNykuIFJYIHBhdGggSVEgaW1iYWxhbmNlIGNhbGlicmF0aW9uIGxvb3AKKwkvLwkweDAxIDB4RkZCRkMyICA7IDNGRUZGICA7IENhbGlicmF0aW9uICg3YSkuIGVuYWJsZSBSWCBJUSBjYWxpYnJhdGlvbiBsb29wIGNpcmN1aXRzCisJcGh5X3NldF9yZl9kYXRhKHBod19kYXRhLCAxLCAoMTw8MjQpfDB4RUZCRkMyKTsKKwkvLwkweDBCIDB4MUEwMUQ2ICA7IDA2ODE3ICA7IENhbGlicmF0aW9uICg3YikuIGVuYWJsZSBSWCBJL1EgY2FsIGxvb3AgU1cxIGNpcmN1aXQKKwlwaHlfc2V0X3JmX2RhdGEocGh3X2RhdGEsIDExLCAoMTE8PDI0KXwweDFBMDVENik7CisJLy8weDA1IDB4MjQ4NDhBICA7IDA5MjEyICA7IENhbGlicmF0aW9uICg3YykuIHNldHRpbmcgVFgtVkdBIGdhaW4gKFRYR0NIKSB0byAyIC0tPiB0byBiZSBvcHRpbWl6ZWQKKwlwaHlfc2V0X3JmX2RhdGEocGh3X2RhdGEsIDUsICg1PDwyNCl8IHBod19kYXRhLT50eHZnYV9zZXR0aW5nX2Zvcl9jYWwpOworCS8vMHgwNiAweDA2ODQwQyAgOyAwMUExMCAgOyBDYWxpYnJhdGlvbiAoN2QpLiBSWEdDSD0wMDsgUlhHQ0w9MDEwIDAwMCAoUlhWR0EpIC0tPiB0byBiZSBvcHRpbWl6ZWQKKwlwaHlfc2V0X3JmX2RhdGEocGh3X2RhdGEsIDYsICg2PDwyNCl8MHgwNjgzNEMpOworCS8vMHgwMCAweEZGRjFDMCAgOyAzRjdDNyAgOyBDYWxpYnJhdGlvbiAoN2UpLiB0dXJuIG9uIElRIGltYmFsYW5jZS9UZXN0IG1vZGUKKwlwaHlfc2V0X3JmX2RhdGEocGh3X2RhdGEsIDAsICgwPDwyNCl8MHhGRkYxQzApOworCisJLy8gIDsgW0JCLWNoaXBdOiBDYWxpYnJhdGlvbiAoN2YpLiBTZW5kIHRlc3QgcGF0dGVybgorCS8vCTsgW0JCLWNoaXBdOiBDYWxpYnJhdGlvbiAoN2cpLiBTZWFyY2ggUlhHQ0wgb3B0aW1hbCB2YWx1ZQorCS8vCTsgW0JCLWNoaXBdOiBDYWxpYnJhdGlvbiAoN2gpLiBDYWN1bGF0ZSBSWC1wYXRoIElRIGltYmFsYW5jZSBhbmQgc2V0dGluZyBSWCBwYXRoIElRIGNvbXBlbnNhdGlvbiB0YWJsZQorCisJcmVzdWx0ID0gX3J4X2lxX2NhbGlicmF0aW9uX2xvb3Bfd2luYm9uZChwaHdfZGF0YSwgMTI1ODksIGZyZXF1ZW5jeSk7CisKKwlpZiAocmVzdWx0ID4gMCkKKwl7CisJCV9yZXNldF9yeF9jYWwocGh3X2RhdGEpOworCQlyZXN1bHQgPSBfcnhfaXFfY2FsaWJyYXRpb25fbG9vcF93aW5ib25kKHBod19kYXRhLCA3OTQzLCBmcmVxdWVuY3kpOworCisJCWlmIChyZXN1bHQgPiAwKQorCQl7CisJCQlfcmVzZXRfcnhfY2FsKHBod19kYXRhKTsKKwkJCXJlc3VsdCA9IF9yeF9pcV9jYWxpYnJhdGlvbl9sb29wX3dpbmJvbmQocGh3X2RhdGEsIDUwMTEsIGZyZXF1ZW5jeSk7CisKKwkJCWlmIChyZXN1bHQgPiAwKQorCQkJeworCQkJCVBIWV9ERUJVRygoIltDQUxdICoqIDxfcnhfaXFfY2FsaWJyYXRpb24+ICoqKioqKioqKioqKioqXG4iKSk7CisJCQkJUEhZX0RFQlVHKCgiW0NBTF0gKiogUlhfSVFfQ0FMSUJSQVRJT04gRkFJTFVSRSAhIVxuIikpOworCQkJCVBIWV9ERUJVRygoIltDQUxdICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4iKSk7CisJCQkJX3Jlc2V0X3J4X2NhbChwaHdfZGF0YSk7CisJCQl9CisJCX0KKwl9CisKKyNpZmRlZiBfREVCVUcKKwlod19nZXRfZHh4X3JlZyhwaHdfZGF0YSwgMHg1NCwgJnZhbCk7CisJUEhZX0RFQlVHKCgiW0NBTF0gICAgKiogMHg1NCA9IDB4JTA4WFxuIiwgdmFsKSk7CisKKwlpZiAocGh3X2RhdGEtPnJldmlzaW9uID09IDB4MjAwMikgLy8gMXN0LWN1dAorCXsKKwkJcnhfY2FsX3JlZ1swXSA9IF9zNF90b19zMzIoKHZhbCAmIDB4MDAwMEYwMDApID4+IDEyKTsKKwkJcnhfY2FsX3JlZ1sxXSA9IF9zNF90b19zMzIoKHZhbCAmIDB4MDAwMDBGMDApID4+ICA4KTsKKwkJcnhfY2FsX3JlZ1syXSA9IF9zNF90b19zMzIoKHZhbCAmIDB4MDAwMDAwRjApID4+ICA0KTsKKwkJcnhfY2FsX3JlZ1szXSA9IF9zNF90b19zMzIoKHZhbCAmIDB4MDAwMDAwMEYpKTsKKwl9CisJZWxzZSAvLyAybmQtY3V0CisJeworCQlyeF9jYWxfcmVnWzBdID0gX3M1X3RvX3MzMigodmFsICYgMHhGODAwMDAwMCkgPj4gMjcpOworCQlyeF9jYWxfcmVnWzFdID0gX3M2X3RvX3MzMigodmFsICYgMHgwN0UwMDAwMCkgPj4gMjEpOworCQlyeF9jYWxfcmVnWzJdID0gX3M2X3RvX3MzMigodmFsICYgMHgwMDFGODAwMCkgPj4gMTUpOworCQlyeF9jYWxfcmVnWzNdID0gX3M1X3RvX3MzMigodmFsICYgMHgwMDAwN0MwMCkgPj4gMTApOworCX0KKworCVBIWV9ERUJVRygoIltDQUxdICAgICoqIHJ4X2NhbF9yZWdbMF0gPSAlZFxuIiwgcnhfY2FsX3JlZ1swXSkpOworCVBIWV9ERUJVRygoIltDQUxdICAgICAgIHJ4X2NhbF9yZWdbMV0gPSAlZFxuIiwgcnhfY2FsX3JlZ1sxXSkpOworCVBIWV9ERUJVRygoIltDQUxdICAgICAgIHJ4X2NhbF9yZWdbMl0gPSAlZFxuIiwgcnhfY2FsX3JlZ1syXSkpOworCVBIWV9ERUJVRygoIltDQUxdICAgICAgIHJ4X2NhbF9yZWdbM10gPSAlZFxuIiwgcnhfY2FsX3JlZ1szXSkpOworI2VuZGlmCisKK30KKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCit2b2lkIHBoeV9jYWxpYnJhdGlvbl93aW5ib25kKGh3X2RhdGFfdCAqcGh3X2RhdGEsIHUzMiBmcmVxdWVuY3kpCit7CisJdTMyICAgICByZWdfbW9kZV9jdHJsOworCXUzMiAgICAgaXFfYWxwaGE7CisKKwlQSFlfREVCVUcoKCJbQ0FMXSAtPiBwaHlfY2FsaWJyYXRpb25fd2luYm9uZCgpXG4iKSk7CisKKwkvLyAyMDA0MDcwMSAxLjEuMjUuMTAwMCBrZXZpbgorCWh3X2dldF9jeHhfcmVnKHBod19kYXRhLCAweDgwLCAmbWFjX2N0cmwpOworCWh3X2dldF9jeHhfcmVnKHBod19kYXRhLCAweEU0LCAmcmZfY3RybCk7CisJaHdfZ2V0X2R4eF9yZWcocGh3X2RhdGEsIDB4NTgsICZpcV9hbHBoYSk7CisKKworCisJX3J4YWRjX2RjX29mZnNldF9jYW5jZWxsYXRpb25fd2luYm9uZChwaHdfZGF0YSwgZnJlcXVlbmN5KTsKKwkvL190eGlkYWNfZGNfb2Zmc2V0X2NhbmNlbGxhdGlvbl93aW5ib25kKHBod19kYXRhKTsKKwkvL190eHFkYWNfZGNfb2Zmc2V0X2NhY2VsbGF0aW9uX3dpbmJvbmQocGh3X2RhdGEpOworCisJX3R4X2lxX2NhbGlicmF0aW9uX3dpbmJvbmQocGh3X2RhdGEpOworCV9yeF9pcV9jYWxpYnJhdGlvbl93aW5ib25kKHBod19kYXRhLCBmcmVxdWVuY3kpOworCisJLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwlod19nZXRfZHh4X3JlZyhwaHdfZGF0YSwgUkVHX01PREVfQ1RSTCwgJnJlZ19tb2RlX2N0cmwpOworCXJlZ19tb2RlX2N0cmwgJj0gfihNQVNLX0lRQ0FMX1RPTkVfU0VMfE1BU0tfSVFDQUxfTU9ERXxNQVNLX0NBTElCX1NUQVJUKTsgLy8gc2V0IHdoZW4gZmluaXNoCisJaHdfc2V0X2R4eF9yZWcocGh3X2RhdGEsIFJFR19NT0RFX0NUUkwsIHJlZ19tb2RlX2N0cmwpOworCVBIWV9ERUJVRygoIltDQUxdICAgIE1PREVfQ1RSTCAod3JpdGUpID0gMHglMDhYXG4iLCByZWdfbW9kZV9jdHJsKSk7CisKKwkvLyBpLiBTZXQgUkZJQyB0byAiTm9ybWFsIG1vZGUiCisJaHdfc2V0X2N4eF9yZWcocGh3X2RhdGEsIDB4ODAsIG1hY19jdHJsKTsKKwlod19zZXRfY3h4X3JlZyhwaHdfZGF0YSwgMHhFNCwgcmZfY3RybCk7CisJaHdfc2V0X2R4eF9yZWcocGh3X2RhdGEsIDB4NTgsIGlxX2FscGhhKTsKKworCisJLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwlwaHlfaW5pdF9yZihwaHdfZGF0YSk7CisKK30KKworLy89PT09PT09PT09PT09PT09PT09PT09PT09PT0KK3ZvaWQgcGh5X3NldF9yZl9kYXRhKCAgcGh3X2RhdGFfdCBwSHdEYXRhLCAgdTMyIGluZGV4LCAgdTMyIHZhbHVlICkKK3sKKyAgIHUzMiBsdG1wPTA7CisKKyAgICBzd2l0Y2goIHBId0RhdGEtPnBoeV90eXBlICkKKwl7CisJCWNhc2UgUkZfTUFYSU1fMjgyNToKKwkJY2FzZSBSRl9NQVhJTV9WMTogLy8gMTFnIFdpbmJvbmQgMm5kIEJCKHdpdGggUGh5IGJvYXJkICh2MSkgKyBNYXhpbSAzMzEpCisJCQlsdG1wID0gKDEgPDwgMzEpIHwgKDAgPDwgMzApIHwgKDE4IDw8IDI0KSB8IEJpdFJldmVyc2UoIHZhbHVlLCAxOCApOworCQkJYnJlYWs7CisKKwkJY2FzZSBSRl9NQVhJTV8yODI3OgorCQkJbHRtcCA9ICgxIDw8IDMxKSB8ICgwIDw8IDMwKSB8ICgxOCA8PCAyNCkgfCBCaXRSZXZlcnNlKCB2YWx1ZSwgMTggKTsKKwkJCWJyZWFrOworCisJCWNhc2UgUkZfTUFYSU1fMjgyODoKKwkJCWx0bXAgPSAoMSA8PCAzMSkgfCAoMCA8PCAzMCkgfCAoMTggPDwgMjQpIHwgQml0UmV2ZXJzZSggdmFsdWUsIDE4ICk7CisJCQlicmVhazsKKworCQljYXNlIFJGX01BWElNXzI4Mjk6CisJCQlsdG1wID0gKDEgPDwgMzEpIHwgKDAgPDwgMzApIHwgKDE4IDw8IDI0KSB8IEJpdFJldmVyc2UoIHZhbHVlLCAxOCApOworCQkJYnJlYWs7CisKKwkJY2FzZSBSRl9BSVJPSEFfMjIzMDoKKwkJY2FzZSBSRl9BSVJPSEFfMjIzMFM6IC8vIDIwMDYwNDIwIEFkZCB0aGlzCisJCQlsdG1wID0gKDEgPDwgMzEpIHwgKDAgPDwgMzApIHwgKDIwIDw8IDI0KSB8IEJpdFJldmVyc2UoIHZhbHVlLCAyMCApOworCQkJYnJlYWs7CisKKwkJY2FzZSBSRl9BSVJPSEFfNzIzMDoKKwkJCWx0bXAgPSAoMSA8PCAzMSkgfCAoMCA8PCAzMCkgfCAoMjQgPDwgMjQpIHwgKHZhbHVlJjB4ZmZmZmZmKTsKKwkJCWJyZWFrOworCisJCWNhc2UgUkZfV0JfMjQyOgorCQljYXNlIFJGX1dCXzI0Ml8xOiAvLyAyMDA2MDYxOS41IEFkZAorCQkJbHRtcCA9ICgxIDw8IDMxKSB8ICgwIDw8IDMwKSB8ICgyNCA8PCAyNCkgfCBCaXRSZXZlcnNlKCB2YWx1ZSwgMjQgKTsKKwkJCWJyZWFrOworCX0KKworCVdiMzVSZWdfV3JpdGVTeW5jKCBwSHdEYXRhLCAweDA4NjQsIGx0bXAgKTsKK30KKworLy8gMjAwNjA3MTcgbW9kaWZ5IGFzIEJydWNlJ3MgbWFpbAordW5zaWduZWQgY2hhciBhZGp1c3RfVFhWR0FfZm9yX2lxX21hZyhod19kYXRhX3QgKnBod19kYXRhKQoreworCWludCBpbml0X3R4dmdhID0gMDsKKwl1MzIgICAgIHJlZ19tb2RlX2N0cmw7CisJdTMyICAgICB2YWw7CisJczMyICAgICBpcWNhbF90b25lX2kwOworCXMzMiAgICAgaXFjYWxfdG9uZV9xMDsKKwl1MzIgICAgIHNxc3VtOworCXMzMiAgICAgaXFfbWFnXzBfdHg7CisJdTgJCXJlZ19zdGF0ZTsKKwlpbnQJCWN1cnJlbnRfdHh2Z2E7CisKKworCXJlZ19zdGF0ZSA9IDA7CisJZm9yKCBpbml0X3R4dmdhPTA7IGluaXRfdHh2Z2E8MTA7IGluaXRfdHh2Z2ErKykKKwl7CisJCWN1cnJlbnRfdHh2Z2EgPSAoIDB4MjRDNDBBfChpbml0X3R4dmdhPDw2KSApOworCQlwaHlfc2V0X3JmX2RhdGEocGh3X2RhdGEsIDUsICgoNTw8MjQpfGN1cnJlbnRfdHh2Z2EpICk7CisJCXBod19kYXRhLT50eHZnYV9zZXR0aW5nX2Zvcl9jYWwgPSBjdXJyZW50X3R4dmdhOworCisJCS8vcGFfc3RhbGxfZXhlY3V0aW9uKDMwMDAwKTsvL1NsZWVwKDMwKTsKKwkJT1NfU0xFRVAoMzAwMDApOyAvLyAyMDA2MDYxMi4xLmEKKworCQlpZiggIWh3X2dldF9keHhfcmVnKHBod19kYXRhLCBSRUdfTU9ERV9DVFJMLCAmcmVnX21vZGVfY3RybCkgKSAvLyAyMDA2MDcxOC4xIG1vZGlmeQorCQkJcmV0dXJuIEZBTFNFOworCisJCVBIWV9ERUJVRygoIltDQUxdICAgIE1PREVfQ1RSTCAocmVhZCkgPSAweCUwOFhcbiIsIHJlZ19tb2RlX2N0cmwpKTsKKworCQkvLyBhLiBTZXQgaXFjYWxfbW9kZVsxOjBdIHRvIDB4MiBhbmQgc2V0ICJjYWxpYl9zdGFydCIgdG8gMHgxIHRvCisJCS8vICAgIGVuYWJsZSAiSVEgYWxpYnJhdGlvbiBNb2RlIElJIgorCQlyZWdfbW9kZV9jdHJsICY9IH4oTUFTS19JUUNBTF9UT05FX1NFTHxNQVNLX0lRQ0FMX01PREUpOworCQlyZWdfbW9kZV9jdHJsICY9IH5NQVNLX0lRQ0FMX01PREU7CisJCXJlZ19tb2RlX2N0cmwgfD0gKE1BU0tfQ0FMSUJfU1RBUlR8MHgwMik7CisJCXJlZ19tb2RlX2N0cmwgfD0gKE1BU0tfQ0FMSUJfU1RBUlR8MHgwMnwyPDwyKTsKKwkJaHdfc2V0X2R4eF9yZWcocGh3X2RhdGEsIFJFR19NT0RFX0NUUkwsIHJlZ19tb2RlX2N0cmwpOworCQlQSFlfREVCVUcoKCJbQ0FMXSAgICBNT0RFX0NUUkwgKHdyaXRlKSA9IDB4JTA4WFxuIiwgcmVnX21vZGVfY3RybCkpOworCisJCS8vcGFfc3RhbGxfZXhlY3V0aW9uKFVTKTsKKwkJT1NfU0xFRVAoMSk7IC8vIDIwMDYwNjEyLjEuYQorCisJCS8vcGFfc3RhbGxfZXhlY3V0aW9uKDMwMCk7Ly9TbGVlcCgzMCk7CisJCU9TX1NMRUVQKDMwMCk7IC8vIDIwMDYwNjEyLjEuYQorCisJCS8vIGIuCisJCWh3X2dldF9keHhfcmVnKHBod19kYXRhLCBSRUdfQ0FMSUJfUkVBRDEsICZ2YWwpOworCisJCVBIWV9ERUJVRygoIltDQUxdICAgIENBTElCX1JFQUQxID0gMHglMDhYXG4iLCB2YWwpKTsKKwkJLy9wYV9zdGFsbF9leGVjdXRpb24oVVMpOworCQkvL3BhX3N0YWxsX2V4ZWN1dGlvbigzMDApOy8vU2xlZXAoMzApOworCQlPU19TTEVFUCgzMDApOyAvLyAyMDA2MDYxMi4xLmEKKworCQlpcWNhbF90b25lX2kwID0gX3MxM190b19zMzIodmFsICYgMHgwMDAwMUZGRik7CisJCWlxY2FsX3RvbmVfcTAgPSBfczEzX3RvX3MzMigodmFsICYgMHgwM0ZGRTAwMCkgPj4gMTMpOworCQlQSFlfREVCVUcoKCJbQ0FMXSAgICAqKiBpcWNhbF90b25lX2kwPSVkLCBpcWNhbF90b25lX3EwPSVkXG4iLAorCQkJCSAgIGlxY2FsX3RvbmVfaTAsIGlxY2FsX3RvbmVfcTApKTsKKworCQlzcXN1bSA9IGlxY2FsX3RvbmVfaTAqaXFjYWxfdG9uZV9pMCArIGlxY2FsX3RvbmVfcTAqaXFjYWxfdG9uZV9xMDsKKwkJaXFfbWFnXzBfdHggPSAoczMyKSBfc3FydChzcXN1bSk7CisJCVBIWV9ERUJVRygoIltDQUxdICAgICoqIGF1dG9fYWRqdXN0X3R4dmdhX2Zvcl9pcV9tYWdfMF90eD0lZFxuIiwgaXFfbWFnXzBfdHgpKTsKKworCQlpZiggaXFfbWFnXzBfdHg+PTcwMCAmJiBpcV9tYWdfMF90eDw9MTc1MCApCisJCQlicmVhazsKKwkJZWxzZSBpZihpcV9tYWdfMF90eCA+IDE3NTApCisJCXsKKwkJCWluaXRfdHh2Z2E9LTI7CisJCQljb250aW51ZTsKKwkJfQorCQllbHNlCisJCQljb250aW51ZTsKKworCX0KKworCWlmKCBpcV9tYWdfMF90eD49NzAwICYmIGlxX21hZ18wX3R4PD0xNzUwICkKKwkJcmV0dXJuIFRSVUU7CisJZWxzZQorCQlyZXR1cm4gRkFMU0U7Cit9CisKKworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9waHlfY2FsaWJyYXRpb24uaCBiL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL3BoeV9jYWxpYnJhdGlvbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI2YTY1ZDMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9waHlfY2FsaWJyYXRpb24uaApAQCAtMCwwICsxLDEwMSBAQAorLy8gMjAwMzEyMjkgVHVyYm8gYWRkCisjZGVmaW5lIFJFR19BR0NfQ1RSTDEgICAgICAgICAgICAgICAweDEwMDAKKyNkZWZpbmUgUkVHX0FHQ19DVFJMMiAgICAgICAgICAgICAgIDB4MTAwNAorI2RlZmluZSBSRUdfQUdDX0NUUkwzICAgICAgICAgICAgICAgMHgxMDA4CisjZGVmaW5lIFJFR19BR0NfQ1RSTDQgICAgICAgICAgICAgICAweDEwMEMKKyNkZWZpbmUgUkVHX0FHQ19DVFJMNSAgICAgICAgICAgICAgIDB4MTAxMAorI2RlZmluZSBSRUdfQUdDX0NUUkw2ICAgICAgICAgICAgICAgMHgxMDE0CisjZGVmaW5lIFJFR19BR0NfQ1RSTDcgICAgICAgICAgICAgICAweDEwMTgKKyNkZWZpbmUgUkVHX0FHQ19DVFJMOCAgICAgICAgICAgICAgIDB4MTAxQworI2RlZmluZSBSRUdfQUdDX0NUUkw5ICAgICAgICAgICAgICAgMHgxMDIwCisjZGVmaW5lIFJFR19BR0NfQ1RSTDEwICAgICAgICAgICAgICAweDEwMjQKKyNkZWZpbmUgUkVHX0NDQV9DVFJMICAgICAgICAgICAgICAgIDB4MTAyOAorI2RlZmluZSBSRUdfQV9BQ1FfQ1RSTCAgICAgICAgICAgICAgMHgxMDJDCisjZGVmaW5lIFJFR19CX0FDUV9DVFJMICAgICAgICAgICAgICAweDEwMzAKKyNkZWZpbmUgUkVHX0FfVFhSWF9DVFJMICAgICAgICAgICAgIDB4MTAzNAorI2RlZmluZSBSRUdfQl9UWFJYX0NUUkwgICAgICAgICAgICAgMHgxMDM4CisjZGVmaW5lIFJFR19BX1RYX0NPRUYzICAgICAgICAgICAgICAweDEwM0MKKyNkZWZpbmUgUkVHX0FfVFhfQ09FRjIgICAgICAgICAgICAgIDB4MTA0MAorI2RlZmluZSBSRUdfQV9UWF9DT0VGMSAgICAgICAgICAgICAgMHgxMDQ0CisjZGVmaW5lIFJFR19CX1RYX0NPRUYyICAgICAgICAgICAgICAweDEwNDgKKyNkZWZpbmUgUkVHX0JfVFhfQ09FRjEgICAgICAgICAgICAgIDB4MTA0QworI2RlZmluZSBSRUdfTU9ERV9DVFJMICAgICAgICAgICAgICAgMHgxMDUwCisjZGVmaW5lIFJFR19DQUxJQl9EQVRBICAgICAgICAgICAgICAweDEwNTQKKyNkZWZpbmUgUkVHX0lRX0FMUEhBICAgICAgICAgICAgICAgIDB4MTA1OAorI2RlZmluZSBSRUdfRENfQ0FOQ0VMICAgICAgICAgICAgICAgMHgxMDVDCisjZGVmaW5lIFJFR19XVE9fUkVBRCAgICAgICAgICAgICAgICAweDEwNjAKKyNkZWZpbmUgUkVHX09GRlNFVF9SRUFEICAgICAgICAgICAgIDB4MTA2NAorI2RlZmluZSBSRUdfQ0FMSUJfUkVBRDEgICAgICAgICAgICAgMHgxMDY4CisjZGVmaW5lIFJFR19DQUxJQl9SRUFEMiAgICAgICAgICAgICAweDEwNkMKKyNkZWZpbmUgUkVHX0FfRlJFUV9FU1QgICAgICAgICAgICAgIDB4MTA3MAorCisKKworCisvLyAgMjAwMzExMDEgVHVyYm8gYWRkCisjZGVmaW5lIE1BU0tfQU1FUl9PRkZfUkVHICAgICAgICAgIEJJVCgzMSkKKworI2RlZmluZSBNQVNLX0JNRVJfT0ZGX1JFRyAgICAgICAgICBCSVQoMzEpCisKKyNkZWZpbmUgTUFTS19MTkFfRklYX0dBSU4gICAgICAgICAgKEJJVCgzKXxCSVQoNCkpCisjZGVmaW5lIE1BU0tfQUdDX0ZJWCAgICAgICAgICAgICAgIEJJVCgxKQorCisjZGVmaW5lIE1BU0tfQUdDX0ZJWF9HQUlOICAgICAgICAgIDB4RkYwMAorCisjZGVmaW5lIE1BU0tfQURDX0RDX0NBTF9TVFIgICAgICAgIEJJVCgxMCkKKyNkZWZpbmUgTUFTS19DQUxJQl9TVEFSVCAgICAgICAgICAgQklUKDQpCisjZGVmaW5lIE1BU0tfSVFDQUxfVE9ORV9TRUwgICAgICAgIChCSVQoMyl8QklUKDIpKQorI2RlZmluZSBNQVNLX0lRQ0FMX01PREUgICAgICAgICAgICAoQklUKDEpfEJJVCgwKSkKKworI2RlZmluZSBNQVNLX1RYX0NBTF8wICAgICAgICAgICAgICAweEYwMDAwMDAwCisjZGVmaW5lIFRYX0NBTF8wX1NISUZUICAgICAgICAgICAgIDI4CisjZGVmaW5lIE1BU0tfVFhfQ0FMXzEgICAgICAgICAgICAgIDB4MEYwMDAwMDAKKyNkZWZpbmUgVFhfQ0FMXzFfU0hJRlQgICAgICAgICAgICAgMjQKKyNkZWZpbmUgTUFTS19UWF9DQUxfMiAgICAgICAgICAgICAgMHgwMEYwMDAwMAorI2RlZmluZSBUWF9DQUxfMl9TSElGVCAgICAgICAgICAgICAyMAorI2RlZmluZSBNQVNLX1RYX0NBTF8zICAgICAgICAgICAgICAweDAwMEYwMDAwCisjZGVmaW5lIFRYX0NBTF8zX1NISUZUICAgICAgICAgICAgIDE2CisjZGVmaW5lIE1BU0tfUlhfQ0FMXzAgICAgICAgICAgICAgIDB4MDAwMEYwMDAKKyNkZWZpbmUgUlhfQ0FMXzBfU0hJRlQgICAgICAgICAgICAgMTIKKyNkZWZpbmUgTUFTS19SWF9DQUxfMSAgICAgICAgICAgICAgMHgwMDAwMEYwMAorI2RlZmluZSBSWF9DQUxfMV9TSElGVCAgICAgICAgICAgICA4CisjZGVmaW5lIE1BU0tfUlhfQ0FMXzIgICAgICAgICAgICAgIDB4MDAwMDAwRjAKKyNkZWZpbmUgUlhfQ0FMXzJfU0hJRlQgICAgICAgICAgICAgNAorI2RlZmluZSBNQVNLX1JYX0NBTF8zICAgICAgICAgICAgICAweDAwMDAwMDBGCisjZGVmaW5lIFJYX0NBTF8zX1NISUZUICAgICAgICAgICAgIDAKKworI2RlZmluZSBNQVNLX0NBTkNFTF9EQ19JICAgICAgICAgICAweDNFMAorI2RlZmluZSBDQU5DRUxfRENfSV9TSElGVCAgICAgICAgICA1CisjZGVmaW5lIE1BU0tfQ0FOQ0VMX0RDX1EgICAgICAgICAgIDB4MDFGCisjZGVmaW5lIENBTkNFTF9EQ19RX1NISUZUICAgICAgICAgIDAKKworLy8gTEEyMDA0MDIxMCBrZXZpbgorLy8jZGVmaW5lIE1BU0tfQURDX0RDX0NBTF9JKHgpICAgICAgICgoKHgpJjB4MUZFMDApPj45KQorLy8jZGVmaW5lIE1BU0tfQURDX0RDX0NBTF9RKHgpICAgICAgICgoeCkmMHgxRkYpCisjZGVmaW5lIE1BU0tfQURDX0RDX0NBTF9JKHgpICAgICAgICgoKHgpJjB4MDAwM0ZFMDApPj45KQorI2RlZmluZSBNQVNLX0FEQ19EQ19DQUxfUSh4KSAgICAgICAoKHgpJjB4MDAwMDAxRkYpCisKKy8vIExBMjAwNDAyMTAga2V2aW4gKFR1cmJvIGhhcyB3cm9uZyBkZWZpbml0aW9uKQorLy8jZGVmaW5lIE1BU0tfSVFDQUxfVE9ORV9JICAgICAgICAgIDB4N0ZGQzAwMAorLy8jZGVmaW5lIFNISUZUX0lRQ0FMX1RPTkVfSSh4KSAgICAgICgoeCk+PjEzKQorLy8jZGVmaW5lIE1BU0tfSVFDQUxfVE9ORV9RICAgICAgICAgIDB4MUZGRgorLy8jZGVmaW5lIFNISUZUX0lRQ0FMX1RPTkVfUSh4KSAgICAgICgoeCk+PjApCisjZGVmaW5lIE1BU0tfSVFDQUxfVE9ORV9JICAgICAgICAgIDB4MDAwMDFGRkYKKyNkZWZpbmUgU0hJRlRfSVFDQUxfVE9ORV9JKHgpICAgICAgKCh4KT4+MCkKKyNkZWZpbmUgTUFTS19JUUNBTF9UT05FX1EgICAgICAgICAgMHgwM0ZGRTAwMAorI2RlZmluZSBTSElGVF9JUUNBTF9UT05FX1EoeCkgICAgICAoKHgpPj4xMykKKworLy8gTEEyMDA0MDIxMCBrZXZpbiAoVHVyYm8gaGFzIHdyb25nIGRlZmluaXRpb24pCisvLyNkZWZpbmUgTUFTS19JUUNBTF9JTUFHRV9JICAgICAgICAgMHg3RkZDMDAwCisvLyNkZWZpbmUgU0hJRlRfSVFDQUxfSU1BR0VfSSh4KSAgICAgKCh4KT4+MTMpCisvLyNkZWZpbmUgTUFTS19JUUNBTF9JTUFHRV9RICAgICAgICAgMHgxRkZGCisvLyNkZWZpbmUgU0hJRlRfSVFDQUxfSU1BR0VfUSh4KSAgICAgKCh4KT4+MCkKKworLy8jZGVmaW5lIE1BU0tfSVFDQUxfSU1BR0VfSSAgICAgICAgIDB4MDAwMDFGRkYKKy8vI2RlZmluZSBTSElGVF9JUUNBTF9JTUFHRV9JKHgpICAgICAoKHgpPj4wKQorLy8jZGVmaW5lIE1BU0tfSVFDQUxfSU1BR0VfUSAgICAgICAgIDB4MDNGRkUwMDAKKy8vI2RlZmluZSBTSElGVF9JUUNBTF9JTUFHRV9RKHgpICAgICAoKHgpPj4xMykKKwordm9pZCBwaHlfc2V0X3JmX2RhdGEoICBwaHdfZGF0YV90IHBId0RhdGEsICB1MzIgaW5kZXgsICB1MzIgdmFsdWUgKTsKKyNkZWZpbmUgcGh5X2luaXRfcmYoIF9BICkJLy9SRlN5bnRoZXNpemVyX2luaXRpYWwoIF9BICkKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvcmVnLmMgYi9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9yZWcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNDc1YzdhCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvcmVnLmMKQEAgLTAsMCArMSwyNjgzIEBACisjaW5jbHVkZSAib3NfY29tbW9uLmgiCisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8gT3JpZ2luYWwgUGh5LmgKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCis7IEZvciBNQVhJTTI4MjUvNi83IFZlci4gMzMxIG9yIG1vcmUKKzsgRWRpdGVkIGJ5IFRpZ2VyLCBTZXAtMTctMjAwMworOyByZXZpc2VkIGJ5IEJlbiwgU2VwLTE4LTIwMDMKKworMHgwMCAweDAwMGEyCisweDAxIDB4MjFjYzAKKzsweDAyIDB4MTM4MDIKKzB4MDIgMHgxMzgzYQorCis7Y2hhbm5lMSAwMSA7IDB4MDMgMHgzMDE0MiA7IDB4MDQgMHgwYjMzMzsKKztjaGFubmUxIDAyIDsweDAzIDB4MzIxNDEgOzB4MDQgMHgwODQ0NDsKKztjaGFubmUxIDAzIDsweDAzIDB4MzIxNDMgOzB4MDQgMHgwYWVlZTsKKztjaGFubmUxIDA0IDsweDAzIDB4MzIxNDIgOzB4MDQgMHgwYjMzMzsKKztjaGFubmUxIDA1IDsweDAzIDB4MzExNDEgOzB4MDQgMHgwODQ0NDsKKztjaGFubmUxIDA2IDsKKzB4MDMgMHgzMTE0MzsKKzB4MDQgMHgwYWVlZTsKKztjaGFubmUxIDA3IDsweDAzIDB4MzExNDIgOzB4MDQgMHgwYjMzMzsKKztjaGFubmUxIDA4IDsweDAzIDB4MzMxNDEgOzB4MDQgMHgwODQ0NDsKKztjaGFubmUxIDA5IDsweDAzIDB4MzMxNDMgOzB4MDQgMHgwYWVlZTsKKztjaGFubmUxIDEwIDsweDAzIDB4MzMxNDIgOzB4MDQgMHgwYjMzMzsKKztjaGFubmUxIDExIDsweDAzIDB4MzA5NDEgOzB4MDQgMHgwODQ0NDsKKztjaGFubmUxIDEyIDsweDAzIDB4MzA5NDMgOzB4MDQgMHgwYWVlZTsKKztjaGFubmUxIDEzIDsweDAzIDB4MzA5NDIgOzB4MDQgMHgwYjMzMzsKKworMHgwNSAweDI4OTg2CisweDA2IDB4MTgwMDgKKzB4MDcgMHgzODQwMAorMHgwOCAweDA1MTAwOyAxMDAgSHogREMKKzsweDA4IDB4MDU5MDA7IDMwIEtIeiBEQworMHgwOSAweDI0ZjA4CisweDBhIDB4MTdlMDAsIDB4MTdlYTAKKzB4MGIgMHgzN2Q4MAorMHgwYyAweDBjOTAwIC8vIDB4MGNhMDAgKGxhZ2VyIHBvd2VyIDlkYiB0aGFuIDB4MGMwMDApLCAweDBjMDAwCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8vIE1BWDI4MjUgKHB1cmUgYi9nKQordTMyIG1heDI4MjVfcmZfZGF0YVtdID0KK3sKKyAgICAoMHgwMDw8MTgpfDB4MDAwYTIsCisgICAgKDB4MDE8PDE4KXwweDIxY2MwLAorICAgICgweDAyPDwxOCl8MHgxMzgwNiwKKyAgICAoMHgwMzw8MTgpfDB4MzAxNDIsCisgICAgKDB4MDQ8PDE4KXwweDBiMzMzLAorICAgICgweDA1PDwxOCl8MHgyODlBNiwKKyAgICAoMHgwNjw8MTgpfDB4MTgwMDgsCisgICAgKDB4MDc8PDE4KXwweDM4MDAwLAorICAgICgweDA4PDwxOCl8MHgwNTEwMCwKKyAgICAoMHgwOTw8MTgpfDB4MjRmMDgsCisgICAgKDB4MEE8PDE4KXwweDE0MDAwLAorICAgICgweDBCPDwxOCl8MHgzN2Q4MCwKKyAgICAoMHgwQzw8MTgpfDB4MGMxMDAgICAvLyAxMWE6IDB4MGMzMDAsIDExZzogMHgwYzEwMAorfTsKKwordTMyIG1heDI4MjVfY2hhbm5lbF9kYXRhXzI0W11bM10gPQoreworICAgIHsoMHgwMzw8MTgpfDB4MzAxNDIsICgweDA0PDwxOCl8MHgwYjMzMywgKDB4MDU8PDE4KXwweDI4OUE2fSwgLy8gY2hhbm5lMSAwMQorICAgIHsoMHgwMzw8MTgpfDB4MzIxNDEsICgweDA0PDwxOCl8MHgwODQ0NCwgKDB4MDU8PDE4KXwweDI4OUE2fSwgLy8gY2hhbm5lMSAwMgorICAgIHsoMHgwMzw8MTgpfDB4MzIxNDMsICgweDA0PDwxOCl8MHgwYWVlZSwgKDB4MDU8PDE4KXwweDI4OUE2fSwgLy8gY2hhbm5lMSAwMworICAgIHsoMHgwMzw8MTgpfDB4MzIxNDIsICgweDA0PDwxOCl8MHgwYjMzMywgKDB4MDU8PDE4KXwweDI4OUE2fSwgLy8gY2hhbm5lMSAwNAorICAgIHsoMHgwMzw8MTgpfDB4MzExNDEsICgweDA0PDwxOCl8MHgwODQ0NCwgKDB4MDU8PDE4KXwweDI4OUE2fSwgLy8gY2hhbm5lMSAwNQorICAgIHsoMHgwMzw8MTgpfDB4MzExNDMsICgweDA0PDwxOCl8MHgwYWVlZSwgKDB4MDU8PDE4KXwweDI4OUE2fSwgLy8gY2hhbm5lMSAwNgorICAgIHsoMHgwMzw8MTgpfDB4MzExNDIsICgweDA0PDwxOCl8MHgwYjMzMywgKDB4MDU8PDE4KXwweDI4OUE2fSwgLy8gY2hhbm5lMSAwNworICAgIHsoMHgwMzw8MTgpfDB4MzMxNDEsICgweDA0PDwxOCl8MHgwODQ0NCwgKDB4MDU8PDE4KXwweDI4OUE2fSwgLy8gY2hhbm5lMSAwOAorICAgIHsoMHgwMzw8MTgpfDB4MzMxNDMsICgweDA0PDwxOCl8MHgwYWVlZSwgKDB4MDU8PDE4KXwweDI4OUE2fSwgLy8gY2hhbm5lMSAwOQorICAgIHsoMHgwMzw8MTgpfDB4MzMxNDIsICgweDA0PDwxOCl8MHgwYjMzMywgKDB4MDU8PDE4KXwweDI4OUE2fSwgLy8gY2hhbm5lMSAxMAorICAgIHsoMHgwMzw8MTgpfDB4MzA5NDEsICgweDA0PDwxOCl8MHgwODQ0NCwgKDB4MDU8PDE4KXwweDI4OUE2fSwgLy8gY2hhbm5lMSAxMQorICAgIHsoMHgwMzw8MTgpfDB4MzA5NDMsICgweDA0PDwxOCl8MHgwYWVlZSwgKDB4MDU8PDE4KXwweDI4OUE2fSwgLy8gY2hhbm5lMSAxMgorICAgIHsoMHgwMzw8MTgpfDB4MzA5NDIsICgweDA0PDwxOCl8MHgwYjMzMywgKDB4MDU8PDE4KXwweDI4OUE2fSwgLy8gY2hhbm5lMSAxMworICAgIHsoMHgwMzw8MTgpfDB4MzI5NDEsICgweDA0PDwxOCl8MHgwOTk5OSwgKDB4MDU8PDE4KXwweDI4OUE2fSAvLyAxNCAoMjQ4NE1IeikgaGhtb2RpZnkKK307CisKK3UzMiBtYXgyODI1X3Bvd2VyX2RhdGFfMjRbXSA9IHsoMHgwQzw8MTgpfDB4MGMwMDAsICgweDBDPDwxOCl8MHgwYzEwMH07CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLy8gTUFYMjgyNyAoYS9iL2cpCit1MzIgbWF4MjgyN19yZl9kYXRhW10gPQoreworICAgICgweDAwPDwxOCl8MHgwMDBhMiwKKyAgICAoMHgwMTw8MTgpfDB4MjFjYzAsCisgICAgKDB4MDI8PDE4KXwweDEzODA2LAorICAgICgweDAzPDwxOCl8MHgzMDE0MiwKKyAgICAoMHgwNDw8MTgpfDB4MGIzMzMsCisgICAgKDB4MDU8PDE4KXwweDI4OUE2LAorICAgICgweDA2PDwxOCl8MHgxODAwOCwKKyAgICAoMHgwNzw8MTgpfDB4MzgwMDAsCisgICAgKDB4MDg8PDE4KXwweDA1MTAwLAorICAgICgweDA5PDwxOCl8MHgyNGYwOCwKKyAgICAoMHgwQTw8MTgpfDB4MTQwMDAsCisgICAgKDB4MEI8PDE4KXwweDM3ZDgwLAorICAgICgweDBDPDwxOCl8MHgwYzEwMCAgIC8vIDExYTogMHgwYzMwMCwgMTFnOiAweDBjMTAwCit9OworCit1MzIgbWF4MjgyN19jaGFubmVsX2RhdGFfMjRbXVszXSA9Cit7CisgICAgeygweDAzPDwxOCl8MHgzMDE0MiwgKDB4MDQ8PDE4KXwweDBiMzMzLCAoMHgwNTw8MTgpfDB4Mjg5QTZ9LCAvLyBjaGFubmUxIDAxCisgICAgeygweDAzPDwxOCl8MHgzMjE0MSwgKDB4MDQ8PDE4KXwweDA4NDQ0LCAoMHgwNTw8MTgpfDB4Mjg5QTZ9LCAvLyBjaGFubmUxIDAyCisgICAgeygweDAzPDwxOCl8MHgzMjE0MywgKDB4MDQ8PDE4KXwweDBhZWVlLCAoMHgwNTw8MTgpfDB4Mjg5QTZ9LCAvLyBjaGFubmUxIDAzCisgICAgeygweDAzPDwxOCl8MHgzMjE0MiwgKDB4MDQ8PDE4KXwweDBiMzMzLCAoMHgwNTw8MTgpfDB4Mjg5QTZ9LCAvLyBjaGFubmUxIDA0CisgICAgeygweDAzPDwxOCl8MHgzMTE0MSwgKDB4MDQ8PDE4KXwweDA4NDQ0LCAoMHgwNTw8MTgpfDB4Mjg5QTZ9LCAvLyBjaGFubmUxIDA1CisgICAgeygweDAzPDwxOCl8MHgzMTE0MywgKDB4MDQ8PDE4KXwweDBhZWVlLCAoMHgwNTw8MTgpfDB4Mjg5QTZ9LCAvLyBjaGFubmUxIDA2CisgICAgeygweDAzPDwxOCl8MHgzMTE0MiwgKDB4MDQ8PDE4KXwweDBiMzMzLCAoMHgwNTw8MTgpfDB4Mjg5QTZ9LCAvLyBjaGFubmUxIDA3CisgICAgeygweDAzPDwxOCl8MHgzMzE0MSwgKDB4MDQ8PDE4KXwweDA4NDQ0LCAoMHgwNTw8MTgpfDB4Mjg5QTZ9LCAvLyBjaGFubmUxIDA4CisgICAgeygweDAzPDwxOCl8MHgzMzE0MywgKDB4MDQ8PDE4KXwweDBhZWVlLCAoMHgwNTw8MTgpfDB4Mjg5QTZ9LCAvLyBjaGFubmUxIDA5CisgICAgeygweDAzPDwxOCl8MHgzMzE0MiwgKDB4MDQ8PDE4KXwweDBiMzMzLCAoMHgwNTw8MTgpfDB4Mjg5QTZ9LCAvLyBjaGFubmUxIDEwCisgICAgeygweDAzPDwxOCl8MHgzMDk0MSwgKDB4MDQ8PDE4KXwweDA4NDQ0LCAoMHgwNTw8MTgpfDB4Mjg5QTZ9LCAvLyBjaGFubmUxIDExCisgICAgeygweDAzPDwxOCl8MHgzMDk0MywgKDB4MDQ8PDE4KXwweDBhZWVlLCAoMHgwNTw8MTgpfDB4Mjg5QTZ9LCAvLyBjaGFubmUxIDEyCisgICAgeygweDAzPDwxOCl8MHgzMDk0MiwgKDB4MDQ8PDE4KXwweDBiMzMzLCAoMHgwNTw8MTgpfDB4Mjg5QTZ9LCAvLyBjaGFubmUxIDEzCisgICAgeygweDAzPDwxOCl8MHgzMjk0MSwgKDB4MDQ8PDE4KXwweDA5OTk5LCAoMHgwNTw8MTgpfDB4Mjg5QTZ9ICAvLyAxNCAoMjQ4NE1IeikgaGhtb2RpZnkKK307CisKK3UzMiBtYXgyODI3X2NoYW5uZWxfZGF0YV81MFtdWzNdID0KK3sKKyAgICB7KDB4MDM8PDE4KXwweDMzY2MzLCAoMHgwNDw8MTgpfDB4MDhjY2MsICgweDA1PDwxOCl8MHgyQTlBNn0sIC8vIGNoYW5uZWwgMzYKKyAgICB7KDB4MDM8PDE4KXwweDMwMmMwLCAoMHgwNDw8MTgpfDB4MDgwMDAsICgweDA1PDwxOCl8MHgyQTlBNn0sIC8vIGNoYW5uZWwgNDAKKyAgICB7KDB4MDM8PDE4KXwweDMwMmMyLCAoMHgwNDw8MTgpfDB4MGIzMzMsICgweDA1PDwxOCl8MHgyQTlBNn0sIC8vIGNoYW5uZWwgNDQKKyAgICB7KDB4MDM8PDE4KXwweDMyMmMxLCAoMHgwNDw8MTgpfDB4MDk5OTksICgweDA1PDwxOCl8MHgyQTlBNn0sIC8vIGNoYW5uZWwgNDgKKyAgICB7KDB4MDM8PDE4KXwweDMxMmMxLCAoMHgwNDw8MTgpfDB4MGE2NjYsICgweDA1PDwxOCl8MHgyQTlBNn0sIC8vIGNoYW5uZWwgNTIKKyAgICB7KDB4MDM8PDE4KXwweDMzMmMzLCAoMHgwNDw8MTgpfDB4MDhjY2MsICgweDA1PDwxOCl8MHgyQTlBNn0sIC8vIGNoYW5uZWwgNTYKKyAgICB7KDB4MDM8PDE4KXwweDMwYWMwLCAoMHgwNDw8MTgpfDB4MDgwMDAsICgweDA1PDwxOCl8MHgyQTlBNn0sIC8vIGNoYW5uZWwgNjAKKyAgICB7KDB4MDM8PDE4KXwweDMwYWMyLCAoMHgwNDw8MTgpfDB4MGIzMzMsICgweDA1PDwxOCl8MHgyQTlBNn0gLy8gY2hhbm5lbCA2NAorfTsKKwordTMyIG1heDI4MjdfcG93ZXJfZGF0YV8yNFtdID0geygweDBDPDwxOCl8MHgwQzAwMCwgKDB4MEM8PDE4KXwweDBENjAwLCAoMHgwQzw8MTgpfDB4MEMxMDB9OwordTMyIG1heDI4MjdfcG93ZXJfZGF0YV81MFtdID0geygweDBDPDwxOCl8MHgwQzQwMCwgKDB4MEM8PDE4KXwweDBENTAwLCAoMHgwQzw8MTgpfDB4MEMzMDB9OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8vIE1BWDI4MjggKGEvYi9nKQordTMyIG1heDI4MjhfcmZfZGF0YVtdID0KK3sKKyAgICAoMHgwMDw8MTgpfDB4MDAwYTIsCisgICAgKDB4MDE8PDE4KXwweDIxY2MwLAorICAgICgweDAyPDwxOCl8MHgxMzgwNiwKKyAgICAoMHgwMzw8MTgpfDB4MzAxNDIsCisgICAgKDB4MDQ8PDE4KXwweDBiMzMzLAorICAgICgweDA1PDwxOCl8MHgyODlBNiwKKyAgICAoMHgwNjw8MTgpfDB4MTgwMDgsCisgICAgKDB4MDc8PDE4KXwweDM4MDAwLAorICAgICgweDA4PDwxOCl8MHgwNTEwMCwKKyAgICAoMHgwOTw8MTgpfDB4MjRmMDgsCisgICAgKDB4MEE8PDE4KXwweDE0MDAwLAorICAgICgweDBCPDwxOCl8MHgzN2Q4MCwKKyAgICAoMHgwQzw8MTgpfDB4MGMxMDAgICAvLyAxMWE6IDB4MGMzMDAsIDExZzogMHgwYzEwMAorfTsKKwordTMyIG1heDI4MjhfY2hhbm5lbF9kYXRhXzI0W11bM10gPQoreworICAgIHsoMHgwMzw8MTgpfDB4MzAxNDIsICgweDA0PDwxOCl8MHgwYjMzMywgKDB4MDU8PDE4KXwweDI4OUE2fSwgLy8gY2hhbm5lMSAwMQorICAgIHsoMHgwMzw8MTgpfDB4MzIxNDEsICgweDA0PDwxOCl8MHgwODQ0NCwgKDB4MDU8PDE4KXwweDI4OUE2fSwgLy8gY2hhbm5lMSAwMgorICAgIHsoMHgwMzw8MTgpfDB4MzIxNDMsICgweDA0PDwxOCl8MHgwYWVlZSwgKDB4MDU8PDE4KXwweDI4OUE2fSwgLy8gY2hhbm5lMSAwMworICAgIHsoMHgwMzw8MTgpfDB4MzIxNDIsICgweDA0PDwxOCl8MHgwYjMzMywgKDB4MDU8PDE4KXwweDI4OUE2fSwgLy8gY2hhbm5lMSAwNAorICAgIHsoMHgwMzw8MTgpfDB4MzExNDEsICgweDA0PDwxOCl8MHgwODQ0NCwgKDB4MDU8PDE4KXwweDI4OUE2fSwgLy8gY2hhbm5lMSAwNQorICAgIHsoMHgwMzw8MTgpfDB4MzExNDMsICgweDA0PDwxOCl8MHgwYWVlZSwgKDB4MDU8PDE4KXwweDI4OUE2fSwgLy8gY2hhbm5lMSAwNgorICAgIHsoMHgwMzw8MTgpfDB4MzExNDIsICgweDA0PDwxOCl8MHgwYjMzMywgKDB4MDU8PDE4KXwweDI4OUE2fSwgLy8gY2hhbm5lMSAwNworICAgIHsoMHgwMzw8MTgpfDB4MzMxNDEsICgweDA0PDwxOCl8MHgwODQ0NCwgKDB4MDU8PDE4KXwweDI4OUE2fSwgLy8gY2hhbm5lMSAwOAorICAgIHsoMHgwMzw8MTgpfDB4MzMxNDMsICgweDA0PDwxOCl8MHgwYWVlZSwgKDB4MDU8PDE4KXwweDI4OUE2fSwgLy8gY2hhbm5lMSAwOQorICAgIHsoMHgwMzw8MTgpfDB4MzMxNDIsICgweDA0PDwxOCl8MHgwYjMzMywgKDB4MDU8PDE4KXwweDI4OUE2fSwgLy8gY2hhbm5lMSAxMAorICAgIHsoMHgwMzw8MTgpfDB4MzA5NDEsICgweDA0PDwxOCl8MHgwODQ0NCwgKDB4MDU8PDE4KXwweDI4OUE2fSwgLy8gY2hhbm5lMSAxMQorICAgIHsoMHgwMzw8MTgpfDB4MzA5NDMsICgweDA0PDwxOCl8MHgwYWVlZSwgKDB4MDU8PDE4KXwweDI4OUE2fSwgLy8gY2hhbm5lMSAxMgorICAgIHsoMHgwMzw8MTgpfDB4MzA5NDIsICgweDA0PDwxOCl8MHgwYjMzMywgKDB4MDU8PDE4KXwweDI4OUE2fSwgLy8gY2hhbm5lMSAxMworICAgIHsoMHgwMzw8MTgpfDB4MzI5NDEsICgweDA0PDwxOCl8MHgwOTk5OSwgKDB4MDU8PDE4KXwweDI4OUE2fSAgLy8gMTQgKDI0ODRNSHopIGhobW9kaWZ5Cit9OworCit1MzIgbWF4MjgyOF9jaGFubmVsX2RhdGFfNTBbXVszXSA9Cit7CisgICAgeygweDAzPDwxOCl8MHgzM2NjMywgKDB4MDQ8PDE4KXwweDA4Y2NjLCAoMHgwNTw8MTgpfDB4Mjg5QTZ9LCAvLyBjaGFubmVsIDM2CisgICAgeygweDAzPDwxOCl8MHgzMDJjMCwgKDB4MDQ8PDE4KXwweDA4MDAwLCAoMHgwNTw8MTgpfDB4Mjg5QTZ9LCAvLyBjaGFubmVsIDQwCisgICAgeygweDAzPDwxOCl8MHgzMDJjMiwgKDB4MDQ8PDE4KXwweDBiMzMzLCAoMHgwNTw8MTgpfDB4Mjg5QTZ9LCAvLyBjaGFubmVsIDQ0CisgICAgeygweDAzPDwxOCl8MHgzMjJjMSwgKDB4MDQ8PDE4KXwweDA5OTk5LCAoMHgwNTw8MTgpfDB4Mjg5QTZ9LCAvLyBjaGFubmVsIDQ4CisgICAgeygweDAzPDwxOCl8MHgzMTJjMSwgKDB4MDQ8PDE4KXwweDBhNjY2LCAoMHgwNTw8MTgpfDB4Mjg5QTZ9LCAvLyBjaGFubmVsIDUyCisgICAgeygweDAzPDwxOCl8MHgzMzJjMywgKDB4MDQ8PDE4KXwweDA4Y2NjLCAoMHgwNTw8MTgpfDB4Mjg5QTZ9LCAvLyBjaGFubmVsIDU2CisgICAgeygweDAzPDwxOCl8MHgzMGFjMCwgKDB4MDQ8PDE4KXwweDA4MDAwLCAoMHgwNTw8MTgpfDB4Mjg5QTZ9LCAvLyBjaGFubmVsIDYwCisgICAgeygweDAzPDwxOCl8MHgzMGFjMiwgKDB4MDQ8PDE4KXwweDBiMzMzLCAoMHgwNTw8MTgpfDB4Mjg5QTZ9IC8vIGNoYW5uZWwgNjQKK307CisKK3UzMiBtYXgyODI4X3Bvd2VyX2RhdGFfMjRbXSA9IHsoMHgwQzw8MTgpfDB4MGMwMDAsICgweDBDPDwxOCl8MHgwYzEwMH07Cit1MzIgbWF4MjgyOF9wb3dlcl9kYXRhXzUwW10gPSB7KDB4MEM8PDE4KXwweDBjMDAwLCAoMHgwQzw8MTgpfDB4MGMxMDB9OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8vIExBMjAwNDA3Mjgga2V2aW4KKy8vIE1BWDI4MjkgKGEvYi9nKQordTMyIG1heDI4MjlfcmZfZGF0YVtdID0KK3sKKyAgICAoMHgwMDw8MTgpfDB4MDAwYTIsCisgICAgKDB4MDE8PDE4KXwweDIzNTIwLAorICAgICgweDAyPDwxOCl8MHgxMzgwMiwKKyAgICAoMHgwMzw8MTgpfDB4MzAxNDIsCisgICAgKDB4MDQ8PDE4KXwweDBiMzMzLAorICAgICgweDA1PDwxOCl8MHgyODkwNiwKKyAgICAoMHgwNjw8MTgpfDB4MTgwMDgsCisgICAgKDB4MDc8PDE4KXwweDNCNTAwLAorICAgICgweDA4PDwxOCl8MHgwNTEwMCwKKyAgICAoMHgwOTw8MTgpfDB4MjRmMDgsCisgICAgKDB4MEE8PDE4KXwweDE0MDAwLAorICAgICgweDBCPDwxOCl8MHgzN2Q4MCwKKyAgICAoMHgwQzw8MTgpfDB4MEYzMDAgLy9UWFZHQT01MSwgKE1BWC02IGRCKQorfTsKKwordTMyIG1heDI4MjlfY2hhbm5lbF9kYXRhXzI0W11bM10gPQoreworICAgIHsoMzw8MTgpfDB4MzAxNDIsICg0PDwxOCl8MHgwYjMzMywgKDU8PDE4KXwweDI4OUM2fSwgIC8vIDAxICgyNDEyTUh6KQorICAgIHsoMzw8MTgpfDB4MzIxNDEsICg0PDwxOCl8MHgwODQ0NCwgKDU8PDE4KXwweDI4OUM2fSwgIC8vIDAyICgyNDE3TUh6KQorICAgIHsoMzw8MTgpfDB4MzIxNDMsICg0PDwxOCl8MHgwYWVlZSwgKDU8PDE4KXwweDI4OUM2fSwgIC8vIDAzICgyNDIyTUh6KQorICAgIHsoMzw8MTgpfDB4MzIxNDIsICg0PDwxOCl8MHgwYjMzMywgKDU8PDE4KXwweDI4OUM2fSwgIC8vIDA0ICgyNDI3TUh6KQorICAgIHsoMzw8MTgpfDB4MzExNDEsICg0PDwxOCl8MHgwODQ0NCwgKDU8PDE4KXwweDI4OUM2fSwgIC8vIDA1ICgyNDMyTUh6KQorICAgIHsoMzw8MTgpfDB4MzExNDMsICg0PDwxOCl8MHgwYWVlZSwgKDU8PDE4KXwweDI4OUM2fSwgIC8vIDA2ICgyNDM3TUh6KQorICAgIHsoMzw8MTgpfDB4MzExNDIsICg0PDwxOCl8MHgwYjMzMywgKDU8PDE4KXwweDI4OUM2fSwgIC8vIDA3ICgyNDQyTUh6KQorICAgIHsoMzw8MTgpfDB4MzMxNDEsICg0PDwxOCl8MHgwODQ0NCwgKDU8PDE4KXwweDI4OUM2fSwgIC8vIDA4ICgyNDQ3TUh6KQorICAgIHsoMzw8MTgpfDB4MzMxNDMsICg0PDwxOCl8MHgwYWVlZSwgKDU8PDE4KXwweDI4OUM2fSwgIC8vIDA5ICgyNDUyTUh6KQorICAgIHsoMzw8MTgpfDB4MzMxNDIsICg0PDwxOCl8MHgwYjMzMywgKDU8PDE4KXwweDI4OUM2fSwgIC8vIDEwICgyNDU3TUh6KQorICAgIHsoMzw8MTgpfDB4MzA5NDEsICg0PDwxOCl8MHgwODQ0NCwgKDU8PDE4KXwweDI4OUM2fSwgIC8vIDExICgyNDYyTUh6KQorICAgIHsoMzw8MTgpfDB4MzA5NDMsICg0PDwxOCl8MHgwYWVlZSwgKDU8PDE4KXwweDI4OUM2fSwgIC8vIDEyICgyNDY3TUh6KQorICAgIHsoMzw8MTgpfDB4MzA5NDIsICg0PDwxOCl8MHgwYjMzMywgKDU8PDE4KXwweDI4OUM2fSwgIC8vIDEzICgyNDcyTUh6KQorICAgIHsoMzw8MTgpfDB4MzI5NDEsICg0PDwxOCl8MHgwOTk5OSwgKDU8PDE4KXwweDI4OUM2fSwgIC8vIDE0ICgyNDg0TUh6KSBoaC1tb2RpZnkKK307CisKK3UzMiBtYXgyODI5X2NoYW5uZWxfZGF0YV81MFtdWzRdID0KK3sKKyAgICAgezM2LCAoMzw8MTgpfDB4MzNjYzMsICg0PDwxOCl8MHgwOGNjYywgKDU8PDE4KXwweDJBOTQ2fSwgLy8gMzYgKDUuMTgwR0h6KQorICAgICB7NDAsICgzPDwxOCl8MHgzMDJjMCwgKDQ8PDE4KXwweDA4MDAwLCAoNTw8MTgpfDB4MkE5NDZ9LCAvLyA0MCAoNS4yMDBHSHopCisgICAgIHs0NCwgKDM8PDE4KXwweDMwMmMyLCAoNDw8MTgpfDB4MGIzMzMsICg1PDwxOCl8MHgyQTk0Nn0sIC8vIDQ0ICg1LjIyMEdIeikKKyAgICAgezQ4LCAoMzw8MTgpfDB4MzIyYzEsICg0PDwxOCl8MHgwOTk5OSwgKDU8PDE4KXwweDJBOTQ2fSwgLy8gNDggKDUuMjQwR0h6KQorICAgICB7NTIsICgzPDwxOCl8MHgzMTJjMSwgKDQ8PDE4KXwweDBhNjY2LCAoNTw8MTgpfDB4MkE5NDZ9LCAvLyA1MiAoNS4yNjBHSHopCisgICAgIHs1NiwgKDM8PDE4KXwweDMzMmMzLCAoNDw8MTgpfDB4MDhjY2MsICg1PDwxOCl8MHgyQTk0Nn0sIC8vIDU2ICg1LjI4MEdIeikKKyAgICAgezYwLCAoMzw8MTgpfDB4MzBhYzAsICg0PDwxOCl8MHgwODAwMCwgKDU8PDE4KXwweDJBOTQ2fSwgLy8gNjAgKDUuMzAwR0h6KQorICAgICB7NjQsICgzPDwxOCl8MHgzMGFjMiwgKDQ8PDE4KXwweDBiMzMzLCAoNTw8MTgpfDB4MkE5NDZ9LCAvLyA2NCAoNS4zMjBHSHopCisKKyAgICB7MTAwLCAoMzw8MTgpfDB4MzBlYzAsICg0PDwxOCl8MHgwODAwMCwgKDU8PDE4KXwweDJBOUM2fSwgLy8gMTAwICg1LjUwMEdIeikKKyAgICB7MTA0LCAoMzw8MTgpfDB4MzBlYzIsICg0PDwxOCl8MHgwYjMzMywgKDU8PDE4KXwweDJBOUM2fSwgLy8gMTA0ICg1LjUyMEdIeikKKyAgICB7MTA4LCAoMzw8MTgpfDB4MzJlYzEsICg0PDwxOCl8MHgwOTk5OSwgKDU8PDE4KXwweDJBOUM2fSwgLy8gMTA4ICg1LjU0MEdIeikKKyAgICB7MTEyLCAoMzw8MTgpfDB4MzFlYzEsICg0PDwxOCl8MHgwYTY2NiwgKDU8PDE4KXwweDJBOUM2fSwgLy8gMTEyICg1LjU2MEdIeikKKyAgICB7MTE2LCAoMzw8MTgpfDB4MzNlYzMsICg0PDwxOCl8MHgwOGNjYywgKDU8PDE4KXwweDJBOUM2fSwgLy8gMTE2ICg1LjU4MEdIeikKKyAgICB7MTIwLCAoMzw8MTgpfDB4MzAxYzAsICg0PDwxOCl8MHgwODAwMCwgKDU8PDE4KXwweDJBOUM2fSwgLy8gMTIwICg1LjYwMEdIeikKKyAgICB7MTI0LCAoMzw8MTgpfDB4MzAxYzIsICg0PDwxOCl8MHgwYjMzMywgKDU8PDE4KXwweDJBOUM2fSwgLy8gMTI0ICg1LjYyMEdIeikKKyAgICB7MTI4LCAoMzw8MTgpfDB4MzIxYzEsICg0PDwxOCl8MHgwOTk5OSwgKDU8PDE4KXwweDJBOUM2fSwgLy8gMTI4ICg1LjY0MEdIeikKKyAgICB7MTMyLCAoMzw8MTgpfDB4MzExYzEsICg0PDwxOCl8MHgwYTY2NiwgKDU8PDE4KXwweDJBOUM2fSwgLy8gMTMyICg1LjY2MEdIeikKKyAgICB7MTM2LCAoMzw8MTgpfDB4MzMxYzMsICg0PDwxOCl8MHgwOGNjYywgKDU8PDE4KXwweDJBOUM2fSwgLy8gMTM2ICg1LjY4MEdIeikKKyAgICB7MTQwLCAoMzw8MTgpfDB4MzA5YzAsICg0PDwxOCl8MHgwODAwMCwgKDU8PDE4KXwweDJBOUM2fSwgLy8gMTQwICg1LjcwMEdIeikKKworICAgIHsxNDksICgzPDwxOCl8MHgzMjljMiwgKDQ8PDE4KXwweDBiMzMzLCAoNTw8MTgpfDB4MkE5QzZ9LCAvLyAxNDkgKDUuNzQ1R0h6KQorICAgIHsxNTMsICgzPDwxOCl8MHgzMTljMSwgKDQ8PDE4KXwweDA5OTk5LCAoNTw8MTgpfDB4MkE5QzZ9LCAvLyAxNTMgKDUuNzY1R0h6KQorICAgIHsxNTcsICgzPDwxOCl8MHgzMzljMSwgKDQ8PDE4KXwweDBhNjY2LCAoNTw8MTgpfDB4MkE5QzZ9LCAvLyAxNTcgKDUuNzg1R0h6KQorICAgIHsxNjEsICgzPDwxOCl8MHgzMDVjMywgKDQ8PDE4KXwweDA4Y2NjLCAoNTw8MTgpfDB4MkE5QzZ9LCAvLyAxNjEgKDUuODA1R0h6KQorCisgICAgLy8gSmFwYW4KKyAgICB7IDE4NCwgKDM8PDE4KXwweDMwOGMyLCAoNDw8MTgpfDB4MGIzMzMsICg1PDwxOCl8MHgyQTk0Nn0sIC8vIDE4NCAoNC45MjBHSHopCisgICAgeyAxODgsICgzPDwxOCl8MHgzMjhjMSwgKDQ8PDE4KXwweDA5OTk5LCAoNTw8MTgpfDB4MkE5NDZ9LCAvLyAxODggKDQuOTQwR0h6KQorICAgIHsgMTkyLCAoMzw8MTgpfDB4MzE4YzEsICg0PDwxOCl8MHgwYTY2NiwgKDU8PDE4KXwweDJBOTQ2fSwgLy8gMTkyICg0Ljk2MEdIeikKKyAgICB7IDE5NiwgKDM8PDE4KXwweDMzOGMzLCAoNDw8MTgpfDB4MDhjY2MsICg1PDwxOCl8MHgyQTk0Nn0sIC8vIDE5NiAoNC45ODBHSHopCisgICAgeyAgIDgsICgzPDwxOCl8MHgzMjRjMSwgKDQ8PDE4KXwweDA5OTk5LCAoNTw8MTgpfDB4MkE5NDZ9LCAvLyAgIDggKDUuMDQwR0h6KQorICAgIHsgIDEyLCAoMzw8MTgpfDB4MzE0YzEsICg0PDwxOCl8MHgwYTY2NiwgKDU8PDE4KXwweDJBOTQ2fSwgLy8gIDEyICg1LjA2MEdIeikKKyAgICB7ICAxNiwgKDM8PDE4KXwweDMzNGMzLCAoNDw8MTgpfDB4MDhjY2MsICg1PDwxOCl8MHgyQTk0Nn0sIC8vICAxNiAoNS4wODBHSHopCisgICAgeyAgMzQsICgzPDwxOCl8MHgzMWNjMiwgKDQ8PDE4KXwweDBiMzMzLCAoNTw8MTgpfDB4MkE5NDZ9LCAvLyAgMzQgKDUuMTcwR0h6KQorICAgIHsgIDM4LCAoMzw8MTgpfDB4MzNjYzEsICg0PDwxOCl8MHgwOTk5OSwgKDU8PDE4KXwweDJBOTQ2fSwgLy8gIDM4ICg1LjE5MEdIeikKKyAgICB7ICA0MiwgKDM8PDE4KXwweDMwMmMxLCAoNDw8MTgpfDB4MGE2NjYsICg1PDwxOCl8MHgyQTk0Nn0sIC8vICA0MiAoNS4yMTBHSHopCisgICAgeyAgNDYsICgzPDwxOCl8MHgzMjJjMywgKDQ8PDE4KXwweDA4Y2NjLCAoNTw8MTgpfDB4MkE5NDZ9LCAvLyAgNDYgKDUuMjMwR0h6KQorfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCis7IEZvciBNQVhJTTI4MjUvNi83IFZlci4gMzE3IG9yIGxlc3MKKzsgRWRpdGVkIGJ5IFRpZ2VyLCBTZXAtMTctMjAwMyAgZm9yIDIuNEdoeiBjaGFubmVscworOyBVcGRhdGVkIGJ5IFRpZ2VyLCBTZXAtMjItMjAwMyBmb3IgNS4wR2h6IGNoYW5uZWxzCis7IENvcnJlY3RlZCBieSBUaWdlciwgU2VwLTIzLTIwMDMsIGZvciAweDAzIGFuZCAweDA0IG9mIDUuMEdoeiBjaGFubmVscworCisweDAwIDB4MDAwODAKKzB4MDEgMHgyMTRjMAorMHgwMiAweDEzODAyCisKKzsyLjRHSHogQ2hhbm5lbHMKKztjaGFubmUxIDAxICgyLjQxMkdIeik7IDB4MDMgMHgzMDE0MyA7MHgwNCAweDBhY2NjCis7Y2hhbm5lMSAwMiAoMi40MTdHSHopOyAweDAzIDB4MzIxNDAgOzB4MDQgMHgwOTExMQorO2NoYW5uZTEgMDMgKDIuNDIyR0h6KTsgMHgwMyAweDMyMTQyIDsweDA0IDB4MGJiYmIKKztjaGFubmUxIDA0ICgyLjQyN0dIeik7IDB4MDMgMHgzMjE0MyA7MHgwNCAweDBhY2NjCis7Y2hhbm5lMSAwNSAoMi40MzJHSHopOyAweDAzIDB4MzExNDAgOzB4MDQgMHgwOTExMQorO2NoYW5uZTEgMDYgKDIuNDM3R0h6KTsgMHgwMyAweDMxMTQyIDsweDA0IDB4MGJiYmIKKztjaGFubmUxIDA3ICgyLjQ0MkdIeik7IDB4MDMgMHgzMTE0MyA7MHgwNCAweDBhY2NjCis7Y2hhbm5lMSAwOCAoMi40NDdHSHopOyAweDAzIDB4MzMxNDAgOzB4MDQgMHgwOTExMQorO2NoYW5uZTEgMDkgKDIuNDUyR0h6KTsgMHgwMyAweDMzMTQyIDsweDA0IDB4MGJiYmIKKztjaGFubmUxIDEwICgyLjQ1N0dIeik7IDB4MDMgMHgzMzE0MyA7MHgwNCAweDBhY2NjCis7Y2hhbm5lMSAxMSAoMi40NjJHSHopOyAweDAzIDB4MzA5NDAgOzB4MDQgMHgwOTExMQorO2NoYW5uZTEgMTIgKDIuNDY3R0h6KTsgMHgwMyAweDMwOTQyIDsweDA0IDB4MGJiYmIKKztjaGFubmUxIDEzICgyLjQ3MkdIeik7IDB4MDMgMHgzMDk0MyA7MHgwNCAweDBhY2NjCisKKzs1LjBHaHogQ2hhbm5lbHMKKztjaGFubmVsIDM2ICg1LjE4MEdIeik7IDB4MDMgMHgzM2NjMCA7MHgwNCAweDBiMzMzCis7Y2hhbm5lbCA0MCAoNS4yMDBHSHopOyAweDAzIDB4MzAyYzAgOzB4MDQgMHgwODAwMAorO2NoYW5uZWwgNDQgKDUuMjIwR0h6KTsgMHgwMyAweDMwMmMyIDsweDA0IDB4MGIzMzMKKztjaGFubmVsIDQ4ICg1LjI0MEdIeik7IDB4MDMgMHgzMjJjMSA7MHgwNCAweDA5OTk5Cis7Y2hhbm5lbCA1MiAoNS4yNjBHSHopOyAweDAzIDB4MzEyYzEgOzB4MDQgMHgwYTY2NgorO2NoYW5uZWwgNTYgKDUuMjgwR0h6KTsgMHgwMyAweDMzMmMzIDsweDA0IDB4MDhjY2MKKztjaGFubmVsIDYwICg1LjMwMEdIeik7IDB4MDMgMHgzMGFjMCA7MHgwNCAweDA4MDAwCis7Y2hhbm5lbCA2NCAoNS4zMjBHSHopOyAweDAzIDB4MzBhYzIgOzB4MDQgMHgwODMzMworCis7Mi40R0h6IGJhbmQgOzB4MDUgMHgyODk4NjsKKzs1LjBHSHogYmFuZAorMHgwNSAweDJhOTg2CisKKzB4MDYgMHgxODAwOAorMHgwNyAweDM4NDAwCisweDA4IDB4MDUxMDgKKzB4MDkgMHgyN2ZmOAorMHgwYSAweDE0MDAwCisweDBiIDB4MzdmOTkKKzB4MGMgMHgwYzAwMAorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit1MzIgbWF4aW1fMzE3X3JmX2RhdGFbXSAgICAgPQoreworICAgICgweDAwPDwxOCl8MHgwMDBhMiwKKyAgICAoMHgwMTw8MTgpfDB4MjE0YzAsCisgICAgKDB4MDI8PDE4KXwweDEzODAyLAorICAgICgweDAzPDwxOCl8MHgzMDE0MywKKyAgICAoMHgwNDw8MTgpfDB4MGFjY2MsCisgICAgKDB4MDU8PDE4KXwweDI4OTg2LAorICAgICgweDA2PDwxOCl8MHgxODAwOCwKKyAgICAoMHgwNzw8MTgpfDB4Mzg0MDAsCisgICAgKDB4MDg8PDE4KXwweDA1MTA4LAorICAgICgweDA5PDwxOCl8MHgyN2ZmOCwKKyAgICAoMHgwQTw8MTgpfDB4MTQwMDAsCisgICAgKDB4MEI8PDE4KXwweDM3Zjk5LAorICAgICgweDBDPDwxOCl8MHgwYzAwMAorfTsKKwordTMyIG1heGltXzMxN19jaGFubmVsX2RhdGFfMjRbXVszXSAgICA9Cit7CisgICAgeygweDAzPDwxOCl8MHgzMDE0MywgKDB4MDQ8PDE4KXwweDBhY2NjLCAoMHgwNTw8MTgpfDB4Mjg5ODZ9LCAvLyBjaGFubmUxIDAxCisgICAgeygweDAzPDwxOCl8MHgzMjE0MCwgKDB4MDQ8PDE4KXwweDA5MTExLCAoMHgwNTw8MTgpfDB4Mjg5ODZ9LCAvLyBjaGFubmUxIDAyCisgICAgeygweDAzPDwxOCl8MHgzMjE0MiwgKDB4MDQ8PDE4KXwweDBiYmJiLCAoMHgwNTw8MTgpfDB4Mjg5ODZ9LCAvLyBjaGFubmUxIDAzCisgICAgeygweDAzPDwxOCl8MHgzMjE0MywgKDB4MDQ8PDE4KXwweDBhY2NjLCAoMHgwNTw8MTgpfDB4Mjg5ODZ9LCAvLyBjaGFubmUxIDA0CisgICAgeygweDAzPDwxOCl8MHgzMTE0MCwgKDB4MDQ8PDE4KXwweDA5MTExLCAoMHgwNTw8MTgpfDB4Mjg5ODZ9LCAvLyBjaGFubmUxIDA1CisgICAgeygweDAzPDwxOCl8MHgzMTE0MiwgKDB4MDQ8PDE4KXwweDBiYmJiLCAoMHgwNTw8MTgpfDB4Mjg5ODZ9LCAvLyBjaGFubmUxIDA2CisgICAgeygweDAzPDwxOCl8MHgzMTE0MywgKDB4MDQ8PDE4KXwweDBhY2NjLCAoMHgwNTw8MTgpfDB4Mjg5ODZ9LCAvLyBjaGFubmUxIDA3CisgICAgeygweDAzPDwxOCl8MHgzMzE0MCwgKDB4MDQ8PDE4KXwweDA5MTExLCAoMHgwNTw8MTgpfDB4Mjg5ODZ9LCAvLyBjaGFubmUxIDA4CisgICAgeygweDAzPDwxOCl8MHgzMzE0MiwgKDB4MDQ8PDE4KXwweDBiYmJiLCAoMHgwNTw8MTgpfDB4Mjg5ODZ9LCAvLyBjaGFubmUxIDA5CisgICAgeygweDAzPDwxOCl8MHgzMzE0MywgKDB4MDQ8PDE4KXwweDBhY2NjLCAoMHgwNTw8MTgpfDB4Mjg5ODZ9LCAvLyBjaGFubmUxIDEwCisgICAgeygweDAzPDwxOCl8MHgzMDk0MCwgKDB4MDQ8PDE4KXwweDA5MTExLCAoMHgwNTw8MTgpfDB4Mjg5ODZ9LCAvLyBjaGFubmUxIDExCisgICAgeygweDAzPDwxOCl8MHgzMDk0MiwgKDB4MDQ8PDE4KXwweDBiYmJiLCAoMHgwNTw8MTgpfDB4Mjg5ODZ9LCAvLyBjaGFubmUxIDEyCisgICAgeygweDAzPDwxOCl8MHgzMDk0MywgKDB4MDQ8PDE4KXwweDBhY2NjLCAoMHgwNTw8MTgpfDB4Mjg5ODZ9IC8vIGNoYW5uZTEgMTMKK307CisKK3UzMiBtYXhpbV8zMTdfY2hhbm5lbF9kYXRhXzUwW11bM10gICAgPQoreworICAgIHsoMHgwMzw8MTgpfDB4MzNjYzAsICgweDA0PDwxOCl8MHgwYjMzMywgKDB4MDU8PDE4KXwweDJhOTg2fSwgLy8gY2hhbm5lbCAzNgorICAgIHsoMHgwMzw8MTgpfDB4MzAyYzAsICgweDA0PDwxOCl8MHgwODAwMCwgKDB4MDU8PDE4KXwweDJhOTg2fSwgLy8gY2hhbm5lbCA0MAorICAgIHsoMHgwMzw8MTgpfDB4MzAyYzMsICgweDA0PDwxOCl8MHgwYWNjYywgKDB4MDU8PDE4KXwweDJhOTg2fSwgLy8gY2hhbm5lbCA0NAorICAgIHsoMHgwMzw8MTgpfDB4MzIyYzEsICgweDA0PDwxOCl8MHgwOTY2NiwgKDB4MDU8PDE4KXwweDJhOTg2fSwgLy8gY2hhbm5lbCA0OAorICAgIHsoMHgwMzw8MTgpfDB4MzEyYzIsICgweDA0PDwxOCl8MHgwOTk5OSwgKDB4MDU8PDE4KXwweDJhOTg2fSwgLy8gY2hhbm5lbCA1MgorICAgIHsoMHgwMzw8MTgpfDB4MzMyYzAsICgweDA0PDwxOCl8MHgwYjMzMywgKDB4MDU8PDE4KXwweDJhOTllfSwgLy8gY2hhbm5lbCA1NgorICAgIHsoMHgwMzw8MTgpfDB4MzBhYzAsICgweDA0PDwxOCl8MHgwODAwMCwgKDB4MDU8PDE4KXwweDJhOTllfSwgLy8gY2hhbm5lbCA2MAorICAgIHsoMHgwMzw8MTgpfDB4MzBhYzMsICgweDA0PDwxOCl8MHgwYWNjYywgKDB4MDU8PDE4KXwweDJhOTllfSAvLyBjaGFubmVsIDY0Cit9OworCit1MzIgbWF4aW1fMzE3X3Bvd2VyX2RhdGFfMjRbXSA9IHsoMHgwQzw8MTgpfDB4MGMwMDAsICgweDBDPDwxOCl8MHgwYzEwMH07Cit1MzIgbWF4aW1fMzE3X3Bvd2VyX2RhdGFfNTBbXSA9IHsoMHgwQzw8MTgpfDB4MGMwMDAsICgweDBDPDwxOCl8MHgwYzEwMH07CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorOztBTDIyMzAgTVAgKE1hc3MgUHJvZHVjdGlvbiBWZXJzaW9uKQorOztSRiBSZWdpc3RlcnMgU2V0dGluZyBmb3IgQWlyb2hhIEFMMjIzMCBzaWxpY29uIGFmdGVyIEp1bmUgMXN0LCAyMDA0Cis7O1VwZGF0ZWQgYnkgVGlnZXIgSHVhbmcgKEp1bmUgMXN0LCAyMDA0KQorOzsyMC1iaXQgbGVuZ3RoIGFuZCBMU0IgZmlyc3QKKworOztDaDAxICgyNDEyTUh6KSA7MHgwMCAweDA5RUZDIDsweDAxIDB4OENDQ0M7Cis7O0NoMDIgKDI0MTdNSHopIDsweDAwIDB4MDlFRkMgOzB4MDEgMHg4Q0NDRDsKKzs7Q2gwMyAoMjQyMk1IeikgOzB4MDAgMHgwOUU3QyA7MHgwMSAweDhDQ0NDOworOztDaDA0ICgyNDI3TUh6KSA7MHgwMCAweDA5RTdDIDsweDAxIDB4OENDQ0Q7Cis7O0NoMDUgKDI0MzJNSHopIDsweDAwIDB4MDVFRkMgOzB4MDEgMHg4Q0NDQzsKKzs7Q2gwNiAoMjQzN01IeikgOzB4MDAgMHgwNUVGQyA7MHgwMSAweDhDQ0NEOworOztDaDA3ICgyNDQyTUh6KSA7MHgwMCAweDA1RTdDIDsweDAxIDB4OENDQ0M7Cis7O0NoMDggKDI0NDdNSHopIDsweDAwIDB4MDVFN0MgOzB4MDEgMHg4Q0NDRDsKKzs7Q2gwOSAoMjQ1Mk1IeikgOzB4MDAgMHgwREVGQyA7MHgwMSAweDhDQ0NDOworOztDaDEwICgyNDU3TUh6KSA7MHgwMCAweDBERUZDIDsweDAxIDB4OENDQ0Q7Cis7O0NoMTEgKDI0NjJNSHopIDsweDAwIDB4MERFN0MgOzB4MDEgMHg4Q0NDQzsKKzs7Q2gxMiAoMjQ2N01IeikgOzB4MDAgMHgwREU3QyA7MHgwMSAweDhDQ0NEOworOztDaDEzICgyNDcyTUh6KSA7MHgwMCAweDAzRUZDIDsweDAxIDB4OENDQ0M7Cis7O0NoMTQgKDI0ODRNaHopIDsweDAwIDB4MDNFN0MgOzB4MDEgMHg4NjY2NjsKKworMHgwMiAweDQwMUQ4OyBSWERDT0MgQlcgMTAwSHogZm9yIFJYSFAgbG93Cis7OzB4MDIgMHg0ODFEQzsgUlhEQ09DIEJXIDMwS2h6IGZvciBSWEhQIGxvdworCisweDAzIDB4Q0ZGRjAKKzB4MDQgMHgyMzgwMAorMHgwNSAweEEzQjcyCisweDA2IDB4NkRBMDEKKzB4MDcgMHhFMTY4OAorMHgwOCAweDExNjAwCisweDA5IDB4OTlFMDIKKzB4MEEgMHg1RERCMAorMHgwQiAweEQ5OTAwCisweDBDIDB4M0ZGQkQKKzB4MEQgMHhCMDAwMAorMHgwRiAweEYwMEEwCisKKztSRiBDYWxpYnJhdGlvbiBmb3IgQWlyb2hhIEFMMjIzMAorO0VkaXQgYnkgQmVuIENoYW5nICgwMS8zMC8wNCkKKztVcGRhdGVkIGJ5IFRpZ2VyIEh1YW5nICgwMy8wMy8wNCkKKzB4MGYgMHhmMDBhMCA7IEluaXRpYWwgU2V0dGluZworMHgwZiAweGYwMGIwIDsgQWN0aXZhdGUgVFggRENDCisweDBmIDB4ZjAyYTAgOyBBY3RpdmF0ZSBQaGFzZSBDYWxpYnJhdGlvbgorMHgwZiAweGYwMGUwIDsgQWN0aXZhdGUgRmlsdGVyIFJDIENhbGlicmF0aW9uCisweDBmIDB4ZjAwYTAgOyBSZXN0b3JlIEluaXRpYWwgU2V0dGluZworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3UzMiBhbDIyMzBfcmZfZGF0YVtdICAgICA9Cit7CisgICAgKDB4MDA8PDIwKXwweDA5RUZDLAorICAgICgweDAxPDwyMCl8MHg4Q0NDQywKKyAgICAoMHgwMjw8MjApfDB4NDAwNTgsLy8gMjAwNjA2MjcgQW5zb24gMHg0MDFEOCwKKyAgICAoMHgwMzw8MjApfDB4Q0ZGRjAsCisgICAgKDB4MDQ8PDIwKXwweDI0MTAwLC8vIDIwMDYwNjI3IEFuc29uIDB4MjM4MDAsCisgICAgKDB4MDU8PDIwKXwweEEzQjJGLC8vIDIwMDYwNjI3IEFuc29uIDB4QTNCNzIKKyAgICAoMHgwNjw8MjApfDB4NkRBMDEsCisgICAgKDB4MDc8PDIwKXwweEUzNjI4LC8vIDIwMDYwNjI3IEFuc29uIDB4RTE2ODgsCisgICAgKDB4MDg8PDIwKXwweDExNjAwLAorICAgICgweDA5PDwyMCl8MHg5REMwMiwvLyAyMDA2MDYyNyBBbm9zbiAweDk3NjAyLC8vMHg5OUUwMiwgLy8weDlBRTAyCisgICAgKDB4MEE8PDIwKXwweDVkZGIwLCAvLyA5NDEyMDYgRm9yIFFDT00gaW50ZXJmZXJlbmNlIDB4NTg4YjAsLy8weDVEREIwLCA5NDA2MDEgYWRqIDB4NWFhMzAgZm9yIGJsdWV0b290aAorICAgICgweDBCPDwyMCl8MHhEOTkwMCwKKyAgICAoMHgwQzw8MjApfDB4M0ZGQkQsCisgICAgKDB4MEQ8PDIwKXwweEIwMDAwLAorICAgICgweDBGPDwyMCl8MHhGMDFBMCAvLyAyMDA2MDYyNyBBbnNvbiAweEYwMEEwCit9OworCit1MzIgYWwyMjMwc19yZl9kYXRhW10gICAgID0KK3sKKyAgICAoMHgwMDw8MjApfDB4MDlFRkMsCisgICAgKDB4MDE8PDIwKXwweDhDQ0NDLAorICAgICgweDAyPDwyMCl8MHg0MDA1OCwvLyAyMDA2MDQxOSAweDQwMUQ4LAorICAgICgweDAzPDwyMCl8MHhDRkZGMCwKKyAgICAoMHgwNDw8MjApfDB4MjQxMDAsLy8gMjAwNjA0MTkgMHgyMzgwMCwKKyAgICAoMHgwNTw8MjApfDB4QTNCMkYsLy8gMjAwNjA0MTkgMHhBM0I3MiwKKyAgICAoMHgwNjw8MjApfDB4NkRBMDEsCisgICAgKDB4MDc8PDIwKXwweEUzNjI4LC8vIDIwMDYwNDE5IDB4RTE2ODgsCisgICAgKDB4MDg8PDIwKXwweDExNjAwLAorICAgICgweDA5PDwyMCl8MHg5REMwMiwvLyAyMDA2MDQxOSAweDk3NjAyLC8vMHg5OUUwMiwgLy8weDlBRTAyCisgICAgKDB4MEE8PDIwKXwweDVEREIwLC8vIDk0MTIwNiBGb3IgUUNPTSBpbnRlcmZlcmVuY2UgMHg1ODhiMCwvLzB4NUREQjAsIDk0MDYwMSBhZGogMHg1YWEzMCBmb3IgYmx1ZXRvb3RoCisgICAgKDB4MEI8PDIwKXwweEQ5OTAwLAorICAgICgweDBDPDwyMCl8MHgzRkZCRCwKKyAgICAoMHgwRDw8MjApfDB4QjAwMDAsCisgICAgKDB4MEY8PDIwKXwweEYwMUEwIC8vIDIwMDYwNDE5IDB4RjAwQTAKK307CisKK3UzMiBhbDIyMzBfY2hhbm5lbF9kYXRhXzI0W11bMl0gPQoreworICAgIHsoMHgwMDw8MjApfDB4MDlFRkMsICgweDAxPDwyMCl8MHg4Q0NDQ30sIC8vIGNoYW5uZTEgMDEKKyAgICB7KDB4MDA8PDIwKXwweDA5RUZDLCAoMHgwMTw8MjApfDB4OENDQ0R9LCAvLyBjaGFubmUxIDAyCisgICAgeygweDAwPDwyMCl8MHgwOUU3QywgKDB4MDE8PDIwKXwweDhDQ0NDfSwgLy8gY2hhbm5lMSAwMworICAgIHsoMHgwMDw8MjApfDB4MDlFN0MsICgweDAxPDwyMCl8MHg4Q0NDRH0sIC8vIGNoYW5uZTEgMDQKKyAgICB7KDB4MDA8PDIwKXwweDA1RUZDLCAoMHgwMTw8MjApfDB4OENDQ0N9LCAvLyBjaGFubmUxIDA1CisgICAgeygweDAwPDwyMCl8MHgwNUVGQywgKDB4MDE8PDIwKXwweDhDQ0NEfSwgLy8gY2hhbm5lMSAwNgorICAgIHsoMHgwMDw8MjApfDB4MDVFN0MsICgweDAxPDwyMCl8MHg4Q0NDQ30sIC8vIGNoYW5uZTEgMDcKKyAgICB7KDB4MDA8PDIwKXwweDA1RTdDLCAoMHgwMTw8MjApfDB4OENDQ0R9LCAvLyBjaGFubmUxIDA4CisgICAgeygweDAwPDwyMCl8MHgwREVGQywgKDB4MDE8PDIwKXwweDhDQ0NDfSwgLy8gY2hhbm5lMSAwOQorICAgIHsoMHgwMDw8MjApfDB4MERFRkMsICgweDAxPDwyMCl8MHg4Q0NDRH0sIC8vIGNoYW5uZTEgMTAKKyAgICB7KDB4MDA8PDIwKXwweDBERTdDLCAoMHgwMTw8MjApfDB4OENDQ0N9LCAvLyBjaGFubmUxIDExCisgICAgeygweDAwPDwyMCl8MHgwREU3QywgKDB4MDE8PDIwKXwweDhDQ0NEfSwgLy8gY2hhbm5lMSAxMgorICAgIHsoMHgwMDw8MjApfDB4MDNFRkMsICgweDAxPDwyMCl8MHg4Q0NDQ30sIC8vIGNoYW5uZTEgMTMKKyAgICB7KDB4MDA8PDIwKXwweDAzRTdDLCAoMHgwMTw8MjApfDB4ODY2NjZ9IC8vIGNoYW5uZTEgMTQKK307CisKKy8vIEN1cnJlbnQgc2V0dGluZy4gdTMyIGFpcm9oYV9wb3dlcl9kYXRhXzI0W10gPSB7KDB4MDk8PDIwKXwweDkwMjAyLCAoMHgwOTw8MjApfDB4OTY2MDIsICgweDA5PDwyMCl8MHg5NzYwMn07CisjZGVmaW5lIEFJUk9IQV9UWFZHQV9MT1dfSU5ERVgJCTMxCQkvLyBJbmRleCBmb3IgMHg5MDIwMgorI2RlZmluZSBBSVJPSEFfVFhWR0FfTUlERExFX0lOREVYCTEyCQkvLyBJbmRleCBmb3IgMHg5NjYwMgorI2RlZmluZSBBSVJPSEFfVFhWR0FfSElHSF9JTkRFWAkJOAkJLy8gSW5kZXggZm9yIDB4OTc2MDIgMS4wLjI0LjAgMS4wLjI4LjAKKy8qCit1MzIgYWlyb2hhX3Bvd2VyX2RhdGFfMjRbXSA9Cit7CisgICAgMHg5RkUwMiwgICAgICAgICAgLy8gTWF4IC0gMCBkQgorICAgIDB4OUJFMDIsICAgICAgICAgIC8vIE1heCAtIDEgZEIKKyAgICAweDlERTAyLCAgICAgICAgICAvLyBNYXggLSAyIGRCCisgICAgMHg5OUUwMiwgICAgICAgICAgLy8gTWF4IC0gMyBkQgorICAgIDB4OUVFMDIsICAgICAgICAgIC8vIE1heCAtIDQgZEIKKyAgICAweDlBRTAyLCAgICAgICAgICAvLyBNYXggLSA1IGRCCisgICAgMHg5Q0UwMiwgICAgICAgICAgLy8gTWF4IC0gNiBkQgorICAgIDB4OThFMDIsICAgICAgICAgIC8vIE1heCAtIDcgZEIKKyAgICAweDk3NjAyLCAgICAgICAgICAvLyBNYXggLSA4IGRCCisgICAgMHg5MzYwMiwgICAgICAgICAgLy8gTWF4IC0gOSBkQgorICAgIDB4OTU2MDIsICAgICAgICAgIC8vIE1heCAtIDEwIGRCCisgICAgMHg5MTYwMiwgICAgICAgICAgLy8gTWF4IC0gMTEgZEIKKyAgICAweDk2NjAyLCAgICAgICAgICAvLyBNYXggLSAxMiBkQgorICAgIDB4OTI2MDIsICAgICAgICAgIC8vIE1heCAtIDEzIGRCCisgICAgMHg5NDYwMiwgICAgICAgICAgLy8gTWF4IC0gMTQgZEIKKyAgICAweDkwNjAyLCAgICAgICAgICAvLyBNYXggLSAxNSBkQgorICAgIDB4OTdBMDIsICAgICAgICAgIC8vIE1heCAtIDE2IGRCCisgICAgMHg5M0EwMiwgICAgICAgICAgLy8gTWF4IC0gMTcgZEIKKyAgICAweDk1QTAyLCAgICAgICAgICAvLyBNYXggLSAxOCBkQgorICAgIDB4OTFBMDIsICAgICAgICAgIC8vIE1heCAtIDE5IGRCCisgICAgMHg5NkEwMiwgICAgICAgICAgLy8gTWF4IC0gMjAgZEIKKyAgICAweDkyQTAyLCAgICAgICAgICAvLyBNYXggLSAyMSBkQgorICAgIDB4OTRBMDIsICAgICAgICAgIC8vIE1heCAtIDIyIGRCCisgICAgMHg5MEEwMiwgICAgICAgICAgLy8gTWF4IC0gMjMgZEIKKyAgICAweDk3MjAyLCAgICAgICAgICAvLyBNYXggLSAyNCBkQgorICAgIDB4OTMyMDIsICAgICAgICAgIC8vIE1heCAtIDI1IGRCCisgICAgMHg5NTIwMiwgICAgICAgICAgLy8gTWF4IC0gMjYgZEIKKyAgICAweDkxMjAyLCAgICAgICAgICAvLyBNYXggLSAyNyBkQgorICAgIDB4OTYyMDIsICAgICAgICAgIC8vIE1heCAtIDI4IGRCCisgICAgMHg5MjIwMiwgICAgICAgICAgLy8gTWF4IC0gMjkgZEIKKyAgICAweDk0MjAyLCAgICAgICAgICAvLyBNYXggLSAzMCBkQgorICAgIDB4OTAyMDIgICAgICAgICAgIC8vIE1heCAtIDMxIGRCCit9OworKi8KKworLy8gMjAwNDA5MjcgMS4xLjY5LjEwMDAgeWJqaWFuZworLy8gZnJvbSBKb2huCit1MzIgYWwyMjMwX3R4dmdhX2RhdGFbXVsyXSA9Cit7CisJLy92YWx1ZQksIGluZGV4CisJezB4MDkwMjAyLCAwfSwKKwl7MHgwOTQyMDIsIDJ9LAorCXsweDA5MjIwMiwgNH0sCisJezB4MDk2MjAyLCA2fSwKKwl7MHgwOTEyMDIsIDh9LAorCXsweDA5NTIwMiwgMTB9LAorCXsweDA5MzIwMiwgMTJ9LAorCXsweDA5NzIwMiwgMTR9LAorCXsweDA5MEEwMiwgMTZ9LAorCXsweDA5NEEwMiwgMTh9LAorCXsweDA5MkEwMiwgMjB9LAorCXsweDA5NkEwMiwgMjJ9LAorCXsweDA5MUEwMiwgMjR9LAorCXsweDA5NUEwMiwgMjZ9LAorCXsweDA5M0EwMiwgMjh9LAorCXsweDA5N0EwMiwgMzB9LAorCXsweDA5MDYwMiwgMzJ9LAorCXsweDA5NDYwMiwgMzR9LAorCXsweDA5MjYwMiwgMzZ9LAorCXsweDA5NjYwMiwgMzh9LAorCXsweDA5MTYwMiwgNDB9LAorCXsweDA5NTYwMiwgNDJ9LAorCXsweDA5MzYwMiwgNDR9LAorCXsweDA5NzYwMiwgNDZ9LAorCXsweDA5MEUwMiwgNDh9LAorCXsweDA5OEUwMiwgNDl9LAorCXsweDA5NEUwMiwgNTB9LAorCXsweDA5Q0UwMiwgNTF9LAorCXsweDA5MkUwMiwgNTJ9LAorCXsweDA5QUUwMiwgNTN9LAorCXsweDA5NkUwMiwgNTR9LAorCXsweDA5RUUwMiwgNTV9LAorCXsweDA5MUUwMiwgNTZ9LAorCXsweDA5OUUwMiwgNTd9LAorCXsweDA5NUUwMiwgNTh9LAorCXsweDA5REUwMiwgNTl9LAorCXsweDA5M0UwMiwgNjB9LAorCXsweDA5QkUwMiwgNjF9LAorCXsweDA5N0UwMiwgNjJ9LAorCXsweDA5RkUwMiwgNjN9Cit9OworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBGb3IgQWlyb2hhIEFMNzIzMCwgMi40R2h6IGJhbmQKKy8vIEVkaXQgYnkgVGlnZXIsIChNYXJjaCwgOSwgMjAwNSkKKy8vIDI0Yml0LCBNU0IgZmlyc3QKKworLy9jaGFubmVsIGluZGVwZW5kZW50IHJlZ2lzdGVyczoKK3UzMiBhbDcyMzBfcmZfZGF0YV8yNFtdCT0KK3sKKwkoMHgwMDw8MjQpfDB4MDAzNzkwLAorCSgweDAxPDwyNCl8MHgxMzMzMzEsCisJKDB4MDI8PDI0KXwweDg0MUZGMiwKKwkoMHgwMzw8MjQpfDB4M0ZERkEzLAorCSgweDA0PDwyNCl8MHg3RkQ3ODQsCisJKDB4MDU8PDI0KXwweDgwMkI1NSwKKwkoMHgwNjw8MjQpfDB4NTZBRjM2LAorCSgweDA3PDwyNCl8MHhDRTAyMDcsCisJKDB4MDg8PDI0KXwweDZFQkMwOCwKKwkoMHgwOTw8MjQpfDB4MjIxQkI5LAorCSgweDBBPDwyNCl8MHhFMDAwMEEsCisJKDB4MEI8PDI0KXwweDA4MDcxQiwKKwkoMHgwQzw8MjQpfDB4MDAwQTNDLAorCSgweDBEPDwyNCl8MHhGRkZGRkQsCisJKDB4MEU8PDI0KXwweDAwMDAwRSwKKwkoMHgwRjw8MjQpfDB4MUFCQThGCit9OworCit1MzIgYWw3MjMwX2NoYW5uZWxfZGF0YV8yNFtdWzJdID0KK3sKKyAgICB7KDB4MDA8PDI0KXwweDAwMzc5MCwgKDB4MDE8PDI0KXwweDEzMzMzMX0sIC8vIGNoYW5uZTEgMDEKKyAgICB7KDB4MDA8PDI0KXwweDAwMzc5MCwgKDB4MDE8PDI0KXwweDFCMzMzMX0sIC8vIGNoYW5uZTEgMDIKKyAgICB7KDB4MDA8PDI0KXwweDAwMzc5MCwgKDB4MDE8PDI0KXwweDAzMzMzMX0sIC8vIGNoYW5uZTEgMDMKKyAgICB7KDB4MDA8PDI0KXwweDAwMzc5MCwgKDB4MDE8PDI0KXwweDBCMzMzMX0sIC8vIGNoYW5uZTEgMDQKKyAgICB7KDB4MDA8PDI0KXwweDAwMzdBMCwgKDB4MDE8PDI0KXwweDEzMzMzMX0sIC8vIGNoYW5uZTEgMDUKKyAgICB7KDB4MDA8PDI0KXwweDAwMzdBMCwgKDB4MDE8PDI0KXwweDFCMzMzMX0sIC8vIGNoYW5uZTEgMDYKKyAgICB7KDB4MDA8PDI0KXwweDAwMzdBMCwgKDB4MDE8PDI0KXwweDAzMzMzMX0sIC8vIGNoYW5uZTEgMDcKKyAgICB7KDB4MDA8PDI0KXwweDAwMzdBMCwgKDB4MDE8PDI0KXwweDBCMzMzMX0sIC8vIGNoYW5uZTEgMDgKKyAgICB7KDB4MDA8PDI0KXwweDAwMzdCMCwgKDB4MDE8PDI0KXwweDEzMzMzMX0sIC8vIGNoYW5uZTEgMDkKKyAgICB7KDB4MDA8PDI0KXwweDAwMzdCMCwgKDB4MDE8PDI0KXwweDFCMzMzMX0sIC8vIGNoYW5uZTEgMTAKKyAgICB7KDB4MDA8PDI0KXwweDAwMzdCMCwgKDB4MDE8PDI0KXwweDAzMzMzMX0sIC8vIGNoYW5uZTEgMTEKKyAgICB7KDB4MDA8PDI0KXwweDAwMzdCMCwgKDB4MDE8PDI0KXwweDBCMzMzMX0sIC8vIGNoYW5uZTEgMTIKKyAgICB7KDB4MDA8PDI0KXwweDAwMzdDMCwgKDB4MDE8PDI0KXwweDEzMzMzMX0sIC8vIGNoYW5uZTEgMTMKKwl7KDB4MDA8PDI0KXwweDAwMzdDMCwgKDB4MDE8PDI0KXwweDA2NjY2MX0gIC8vIGNoYW5uZWwgMTQKK307CisKKy8vY2hhbm5lbCBpbmRlcGVuZGVudCByZWdpc3RlcnM6Cit1MzIgYWw3MjMwX3JmX2RhdGFfNTBbXQk9Cit7CisJKDB4MDA8PDI0KXwweDBGRjUyMCwKKwkoMHgwMTw8MjQpfDB4MDAwMDAxLAorCSgweDAyPDwyNCl8MHg0NTFGRTIsCisJKDB4MDM8PDI0KXwweDVGREZBMywKKwkoMHgwNDw8MjQpfDB4NkZENzg0LAorCSgweDA1PDwyNCl8MHg4NTNGNTUsCisJKDB4MDY8PDI0KXwweDU2QUYzNiwKKwkoMHgwNzw8MjQpfDB4Q0UwMjA3LAorCSgweDA4PDwyNCl8MHg2RUJDMDgsCisJKDB4MDk8PDI0KXwweDIyMUJCOSwKKwkoMHgwQTw8MjQpfDB4RTA2MDBBLAorCSgweDBCPDwyNCl8MHgwODA0NEIsCisJKDB4MEM8PDI0KXwweDAwMTQzQywKKwkoMHgwRDw8MjQpfDB4RkZGRkZELAorCSgweDBFPDwyNCl8MHgwMDAwMEUsCisJKDB4MEY8PDI0KXwweDEyQkFDRiAvLzVHaHogZGVmYXVsdCBzdGF0ZQorfTsKKwordTMyIGFsNzIzMF9jaGFubmVsX2RhdGFfNVtdWzRdID0KK3sKKwkvL2NoYW5uZWwgZGVwZW5kZW50IHJlZ2lzdGVyczogMHgwMCwgMHgwMSBhbmQgMHgwNAorCS8vMTFKID09PT09PT09PT09CisJezE4NCwgKDB4MDA8PDI0KXwweDBGRjUyMCwgKDB4MDE8PDI0KXwweDAwMDAwMSwgKDB4MDQ8PDI0KXwweDY3Rjc4NH0sIC8vIGNoYW5uZWwgMTg0CisJezE4OCwgKDB4MDA8PDI0KXwweDBGRjUyMCwgKDB4MDE8PDI0KXwweDBBQUFBMSwgKDB4MDQ8PDI0KXwweDc3Rjc4NH0sIC8vIGNoYW5uZWwgMTg4CisJezE5MiwgKDB4MDA8PDI0KXwweDBGRjUzMCwgKDB4MDE8PDI0KXwweDE1NTU1MSwgKDB4MDQ8PDI0KXwweDc3Rjc4NH0sIC8vIGNoYW5uZWwgMTkyCisJezE5NiwgKDB4MDA8PDI0KXwweDBGRjUzMCwgKDB4MDE8PDI0KXwweDAwMDAwMSwgKDB4MDQ8PDI0KXwweDY3Rjc4NH0sIC8vIGNoYW5uZWwgMTk2CisJezgsICAgKDB4MDA8PDI0KXwweDBGRjU0MCwgKDB4MDE8PDI0KXwweDAwMDAwMSwgKDB4MDQ8PDI0KXwweDY3Rjc4NH0sIC8vIGNoYW5uZWwgMDA4CisJezEyLCAgKDB4MDA8PDI0KXwweDBGRjU0MCwgKDB4MDE8PDI0KXwweDBBQUFBMSwgKDB4MDQ8PDI0KXwweDc3Rjc4NH0sIC8vIGNoYW5uZWwgMDEyCisJezE2LCAgKDB4MDA8PDI0KXwweDBGRjU1MCwgKDB4MDE8PDI0KXwweDE1NTU1MSwgKDB4MDQ8PDI0KXwweDc3Rjc4NH0sIC8vIGNoYW5uZWwgMDE2CisJezM0LCAgKDB4MDA8PDI0KXwweDBGRjU2MCwgKDB4MDE8PDI0KXwweDA1NTU1MSwgKDB4MDQ8PDI0KXwweDc3Rjc4NH0sIC8vIGNoYW5uZWwgMDM0CisJezM4LCAgKDB4MDA8PDI0KXwweDBGRjU3MCwgKDB4MDE8PDI0KXwweDEwMDAwMSwgKDB4MDQ8PDI0KXwweDc3Rjc4NH0sIC8vIGNoYW5uZWwgMDM4CisJezQyLCAgKDB4MDA8PDI0KXwweDBGRjU3MCwgKDB4MDE8PDI0KXwweDFBQUFBMSwgKDB4MDQ8PDI0KXwweDc3Rjc4NH0sIC8vIGNoYW5uZWwgMDQyCisJezQ2LCAgKDB4MDA8PDI0KXwweDBGRjU3MCwgKDB4MDE8PDI0KXwweDA1NTU1MSwgKDB4MDQ8PDI0KXwweDc3Rjc4NH0sIC8vIGNoYW5uZWwgMDQ2CisJLy8xMSBBL0ggPT09PT09PT09CisJezM2LCAgKDB4MDA8PDI0KXwweDBGRjU2MCwgKDB4MDE8PDI0KXwweDBBQUFBMSwgKDB4MDQ8PDI0KXwweDc3Rjc4NH0sIC8vIGNoYW5uZWwgMDM2CisJezQwLCAgKDB4MDA8PDI0KXwweDBGRjU3MCwgKDB4MDE8PDI0KXwweDE1NTU1MSwgKDB4MDQ8PDI0KXwweDc3Rjc4NH0sIC8vIGNoYW5uZWwgMDQwCisJezQ0LCAgKDB4MDA8PDI0KXwweDBGRjU3MCwgKDB4MDE8PDI0KXwweDAwMDAwMSwgKDB4MDQ8PDI0KXwweDY3Rjc4NH0sIC8vIGNoYW5uZWwgMDQ0CisJezQ4LCAgKDB4MDA8PDI0KXwweDBGRjU3MCwgKDB4MDE8PDI0KXwweDBBQUFBMSwgKDB4MDQ8PDI0KXwweDc3Rjc4NH0sIC8vIGNoYW5uZWwgMDQ4CisJezUyLCAgKDB4MDA8PDI0KXwweDBGRjU4MCwgKDB4MDE8PDI0KXwweDE1NTU1MSwgKDB4MDQ8PDI0KXwweDc3Rjc4NH0sIC8vIGNoYW5uZWwgMDUyCisJezU2LCAgKDB4MDA8PDI0KXwweDBGRjU4MCwgKDB4MDE8PDI0KXwweDAwMDAwMSwgKDB4MDQ8PDI0KXwweDY3Rjc4NH0sIC8vIGNoYW5uZWwgMDU2CisJezYwLCAgKDB4MDA8PDI0KXwweDBGRjU4MCwgKDB4MDE8PDI0KXwweDBBQUFBMSwgKDB4MDQ8PDI0KXwweDc3Rjc4NH0sIC8vIGNoYW5uZWwgMDYwCisJezY0LCAgKDB4MDA8PDI0KXwweDBGRjU5MCwgKDB4MDE8PDI0KXwweDE1NTU1MSwgKDB4MDQ8PDI0KXwweDc3Rjc4NH0sIC8vIGNoYW5uZWwgMDY0CisJezEwMCwgKDB4MDA8PDI0KXwweDBGRjVDMCwgKDB4MDE8PDI0KXwweDE1NTU1MSwgKDB4MDQ8PDI0KXwweDc3Rjc4NH0sIC8vIGNoYW5uZWwgMTAwCisJezEwNCwgKDB4MDA8PDI0KXwweDBGRjVDMCwgKDB4MDE8PDI0KXwweDAwMDAwMSwgKDB4MDQ8PDI0KXwweDY3Rjc4NH0sIC8vIGNoYW5uZWwgMTA0CisJezEwOCwgKDB4MDA8PDI0KXwweDBGRjVDMCwgKDB4MDE8PDI0KXwweDBBQUFBMSwgKDB4MDQ8PDI0KXwweDc3Rjc4NH0sIC8vIGNoYW5uZWwgMTA4CisJezExMiwgKDB4MDA8PDI0KXwweDBGRjVEMCwgKDB4MDE8PDI0KXwweDE1NTU1MSwgKDB4MDQ8PDI0KXwweDc3Rjc4NH0sIC8vIGNoYW5uZWwgMTEyCisJezExNiwgKDB4MDA8PDI0KXwweDBGRjVEMCwgKDB4MDE8PDI0KXwweDAwMDAwMSwgKDB4MDQ8PDI0KXwweDY3Rjc4NH0sIC8vIGNoYW5uZWwgMTE2CisJezEyMCwgKDB4MDA8PDI0KXwweDBGRjVEMCwgKDB4MDE8PDI0KXwweDBBQUFBMSwgKDB4MDQ8PDI0KXwweDc3Rjc4NH0sIC8vIGNoYW5uZWwgMTIwCisJezEyNCwgKDB4MDA8PDI0KXwweDBGRjVFMCwgKDB4MDE8PDI0KXwweDE1NTU1MSwgKDB4MDQ8PDI0KXwweDc3Rjc4NH0sIC8vIGNoYW5uZWwgMTI0CisJezEyOCwgKDB4MDA8PDI0KXwweDBGRjVFMCwgKDB4MDE8PDI0KXwweDAwMDAwMSwgKDB4MDQ8PDI0KXwweDY3Rjc4NH0sIC8vIGNoYW5uZWwgMTI4CisJezEzMiwgKDB4MDA8PDI0KXwweDBGRjVFMCwgKDB4MDE8PDI0KXwweDBBQUFBMSwgKDB4MDQ8PDI0KXwweDc3Rjc4NH0sIC8vIGNoYW5uZWwgMTMyCisJezEzNiwgKDB4MDA8PDI0KXwweDBGRjVGMCwgKDB4MDE8PDI0KXwweDE1NTU1MSwgKDB4MDQ8PDI0KXwweDc3Rjc4NH0sIC8vIGNoYW5uZWwgMTM2CisJezE0MCwgKDB4MDA8PDI0KXwweDBGRjVGMCwgKDB4MDE8PDI0KXwweDAwMDAwMSwgKDB4MDQ8PDI0KXwweDY3Rjc4NH0sIC8vIGNoYW5uZWwgMTQwCisJezE0OSwgKDB4MDA8PDI0KXwweDBGRjYwMCwgKDB4MDE8PDI0KXwweDE4MDAwMSwgKDB4MDQ8PDI0KXwweDc3Rjc4NH0sIC8vIGNoYW5uZWwgMTQ5CisJezE1MywgKDB4MDA8PDI0KXwweDBGRjYwMCwgKDB4MDE8PDI0KXwweDAyQUFBMSwgKDB4MDQ8PDI0KXwweDc3Rjc4NH0sIC8vIGNoYW5uZWwgMTUzCisJezE1NywgKDB4MDA8PDI0KXwweDBGRjYwMCwgKDB4MDE8PDI0KXwweDBENTU1MSwgKDB4MDQ8PDI0KXwweDc3Rjc4NH0sIC8vIGNoYW5uZWwgMTU3CisJezE2MSwgKDB4MDA8PDI0KXwweDBGRjYxMCwgKDB4MDE8PDI0KXwweDE4MDAwMSwgKDB4MDQ8PDI0KXwweDc3Rjc4NH0sIC8vIGNoYW5uZWwgMTYxCisJezE2NSwgKDB4MDA8PDI0KXwweDBGRjYxMCwgKDB4MDE8PDI0KXwweDAyQUFBMSwgKDB4MDQ8PDI0KXwweDc3Rjc4NH0gIC8vIGNoYW5uZWwgMTY1Cit9OworCisvLzsgUkYgQ2FsaWJyYXRpb24gPD09PSBSZWdpc3RlciAweDBGCisvLzB4MEYgMHgxQUJBOEY7IHN0YXJ0IGZyb20gMi40R2h6IGRlZmF1bHQgc3RhdGUKKy8vMHgwRiAweDlBQkE4RjsgVFhEQyBjb21wZW5zYXRpb24KKy8vMHgwRiAweDNBQkE4RjsgUlhGSUwgYWRqdXN0bWVudAorLy8weDBGIDB4MUFCQThGOyByZXN0b3JlIDIuNEdoeiBkZWZhdWx0IHN0YXRlCisKKy8vO1RYVkdBIE1hcHBpbmcgVGFibGUgPD09PSBSZWdpc3RlciAweDBCCit1MzIgYWw3MjMwX3R4dmdhX2RhdGFbXVsyXSA9Cit7CisJezB4MDgwNDBCLCAwfSwgLy9UWFZHQT0wOworCXsweDA4MDQxQiwgMX0sIC8vVFhWR0E9MTsKKwl7MHgwODA0MkIsIDJ9LCAvL1RYVkdBPTI7CisJezB4MDgwNDNCLCAzfSwgLy9UWFZHQT0zOworCXsweDA4MDQ0QiwgNH0sIC8vVFhWR0E9NDsKKwl7MHgwODA0NUIsIDV9LCAvL1RYVkdBPTU7CisJezB4MDgwNDZCLCA2fSwgLy9UWFZHQT02OworCXsweDA4MDQ3QiwgN30sIC8vVFhWR0E9NzsKKwl7MHgwODA0OEIsIDh9LCAvL1RYVkdBPTg7CisJezB4MDgwNDlCLCA5fSwgLy9UWFZHQT05OworCXsweDA4MDRBQiwgMTB9LCAvL1RYVkdBPTEwOworCXsweDA4MDRCQiwgMTF9LCAvL1RYVkdBPTExOworCXsweDA4MDRDQiwgMTJ9LCAvL1RYVkdBPTEyOworCXsweDA4MDREQiwgMTN9LCAvL1RYVkdBPTEzOworCXsweDA4MDRFQiwgMTR9LCAvL1RYVkdBPTE0OworCXsweDA4MDRGQiwgMTV9LCAvL1RYVkdBPTE1OworCXsweDA4MDUwQiwgMTZ9LCAvL1RYVkdBPTE2OworCXsweDA4MDUxQiwgMTd9LCAvL1RYVkdBPTE3OworCXsweDA4MDUyQiwgMTh9LCAvL1RYVkdBPTE4OworCXsweDA4MDUzQiwgMTl9LCAvL1RYVkdBPTE5OworCXsweDA4MDU0QiwgMjB9LCAvL1RYVkdBPTIwOworCXsweDA4MDU1QiwgMjF9LCAvL1RYVkdBPTIxOworCXsweDA4MDU2QiwgMjJ9LCAvL1RYVkdBPTIyOworCXsweDA4MDU3QiwgMjN9LCAvL1RYVkdBPTIzOworCXsweDA4MDU4QiwgMjR9LCAvL1RYVkdBPTI0OworCXsweDA4MDU5QiwgMjV9LCAvL1RYVkdBPTI1OworCXsweDA4MDVBQiwgMjZ9LCAvL1RYVkdBPTI2OworCXsweDA4MDVCQiwgMjd9LCAvL1RYVkdBPTI3OworCXsweDA4MDVDQiwgMjh9LCAvL1RYVkdBPTI4OworCXsweDA4MDVEQiwgMjl9LCAvL1RYVkdBPTI5OworCXsweDA4MDVFQiwgMzB9LCAvL1RYVkdBPTMwOworCXsweDA4MDVGQiwgMzF9LCAvL1RYVkdBPTMxOworCXsweDA4MDYwQiwgMzJ9LCAvL1RYVkdBPTMyOworCXsweDA4MDYxQiwgMzN9LCAvL1RYVkdBPTMzOworCXsweDA4MDYyQiwgMzR9LCAvL1RYVkdBPTM0OworCXsweDA4MDYzQiwgMzV9LCAvL1RYVkdBPTM1OworCXsweDA4MDY0QiwgMzZ9LCAvL1RYVkdBPTM2OworCXsweDA4MDY1QiwgMzd9LCAvL1RYVkdBPTM3OworCXsweDA4MDY2QiwgMzh9LCAvL1RYVkdBPTM4OworCXsweDA4MDY3QiwgMzl9LCAvL1RYVkdBPTM5OworCXsweDA4MDY4QiwgNDB9LCAvL1RYVkdBPTQwOworCXsweDA4MDY5QiwgNDF9LCAvL1RYVkdBPTQxOworCXsweDA4MDZBQiwgNDJ9LCAvL1RYVkdBPTQyOworCXsweDA4MDZCQiwgNDN9LCAvL1RYVkdBPTQzOworCXsweDA4MDZDQiwgNDR9LCAvL1RYVkdBPTQ0OworCXsweDA4MDZEQiwgNDV9LCAvL1RYVkdBPTQ1OworCXsweDA4MDZFQiwgNDZ9LCAvL1RYVkdBPTQ2OworCXsweDA4MDZGQiwgNDd9LCAvL1RYVkdBPTQ3OworCXsweDA4MDcwQiwgNDh9LCAvL1RYVkdBPTQ4OworCXsweDA4MDcxQiwgNDl9LCAvL1RYVkdBPTQ5OworCXsweDA4MDcyQiwgNTB9LCAvL1RYVkdBPTUwOworCXsweDA4MDczQiwgNTF9LCAvL1RYVkdBPTUxOworCXsweDA4MDc0QiwgNTJ9LCAvL1RYVkdBPTUyOworCXsweDA4MDc1QiwgNTN9LCAvL1RYVkdBPTUzOworCXsweDA4MDc2QiwgNTR9LCAvL1RYVkdBPTU0OworCXsweDA4MDc3QiwgNTV9LCAvL1RYVkdBPTU1OworCXsweDA4MDc4QiwgNTZ9LCAvL1RYVkdBPTU2OworCXsweDA4MDc5QiwgNTd9LCAvL1RYVkdBPTU3OworCXsweDA4MDdBQiwgNTh9LCAvL1RYVkdBPTU4OworCXsweDA4MDdCQiwgNTl9LCAvL1RYVkdBPTU5OworCXsweDA4MDdDQiwgNjB9LCAvL1RYVkdBPTYwOworCXsweDA4MDdEQiwgNjF9LCAvL1RYVkdBPTYxOworCXsweDA4MDdFQiwgNjJ9LCAvL1RYVkdBPTYyOworCXsweDA4MDdGQiwgNjN9LCAvL1RYVkdBPTYzOworfTsKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworCisvLzsgVzg5UkYyNDIgUkZJQyBTUEkgcHJvZ3JhbW1pbmcgaW5pdGlhbCBkYXRhCisvLzsgV2luYm9uZCBXTEFOIDExZyBSRklDIEJCLVNQSSByZWdpc3RlciAtLSB2ZXJzaW9uIEZBNTk3NkEgcmV2IDEuM2IKKy8vOyBVcGRhdGUgRGF0ZTogT2NvdGJlciAzLCAyMDA1IGJ5IFBQMTAgSHNpYW5nLVRlIEhvCisvLzsKKy8vOyBWZXJzaW9uIDEuM2IgcmV2aXNpb24gaXRlbXM6IChPY3QuIDEsIDIwMDUgYnkgSFRIbykgZm9yIEZBNTk3NkEKK3UzMiB3ODlyZjI0Ml9yZl9kYXRhW10gICAgID0KK3sKKyAgICAoMHgwMDw8MjQpfDB4Rjg2MTAwLCAvLyAyMDA2MDcyMSAweEY4NjEwMCwgLy87IDNFMTg0OyBNT0RBICAoMHgwMCkgLS0gTm9ybWFsIG1vZGUgOyBjYWxpYnJhdGlvbiBvZmYKKyAgICAoMHgwMTw8MjQpfDB4RUZGRkMyLCAvLzsgM0JGRkY7IE1PREIgICgweDAxKSAtLSB0dXJuIG9mZiBSU1NJLCBhbmQgb3RoZXIgY2lyY3VpdHMgYXJlIHR1cm5lZCBvbgorICAgICgweDAyPDwyNCl8MHgxMDI1MDQsIC8vOyAwNDA5NDsgRlNFVCAgKDB4MDIpIC0tIGRlZmF1bHQgMjBNSHogY3J5c3RhbCA7IEljbXA9MS41bUEKKyAgICAoMHgwMzw8MjQpfDB4MDI2Mjg2LCAvLzsgMDA5OEE7IEZDSE4gICgweDAzKSAtLSBkZWZhdWx0IENINywgMjQ0Mk1IegorICAgICgweDA0PDwyNCl8MHgwMDAyMDgsIC8vIDIwMDYwNjEyLjEuYSAweDAwMDJDOCwgLy8gMjAwNTA4MTggLy8gMjAwNTA4MTYgMHgwMDAzODgKKwkJCQkJCSAvLzsgMDIwMDg7IEZDQUwgICgweDA0KSAtLSBYVEFMIEZyZXEgVHJpbT0wMDEwMDAgKHNvY2tldCBib2FyZCMxKTsgRkE1OTc2QVlHX3YxLjNDCisgICAgKDB4MDU8PDI0KXwweDI0QzYwQSwgLy8gMjAwNjA2MTIuMS5hIDB4MjRDNThBLCAvLyA5NDEwMDMgMHgyNEM0OEEsIC8vIDIwMDUwODE4LjIgMHgyNDg0OEEsIC8vIDIwMDUwODE4IC8vIDIwMDUwODE2IDB4MjRDNDhBCisJCQkJCQkgLy87IDA5MzE2OyBHQU5BICAoMHgwNSkgLS0gVFggVkdBIGRlZmF1bHQgKFRYVkdBPTB4MTgoMTIpKSAmIFRYR1BLPTExMCA7IEZBNTk3NkFfMS4zRAorICAgICgweDA2PDwyNCl8MHgzNDMyQ0MsIC8vIDk0MTAwMyAweDI2QzM0QywgLy8gMjAwNTA4MTggMHgwNkI0MEMKKwkJCQkJCSAvLzsgMEQwQ0I7IEdBTkIgICgweDA2KSAtLSBSWERDKERDIG9mZnNldCkgb247IExOQT0xMTsgUlhWR0E9MDAxMDExKDExKSA7IFJYRkxTVz0xMSgwMTAwMDEpOyBSWEdQSz0wMDsgUlhHQ0Y9MDA7IC01MGRCbSBpbnB1dAorICAgICgweDA3PDwyNCl8MHgwQzY4Q0UsIC8vIDIwMDUwODE4LjIgMHgwQzY2Q0UsIC8vIDIwMDUwODE4IC8vIDIwMDUwODE2IDB4MEM2OENFCisJCQkJCQkgLy87IDAzMUEzOyBGSUxUICAoMHgwNykgLS0gVFgvUlggZmlsdGVyIHdpdGggYXV0by10dW5pbmc7IFRGTEJXPTAxMTsgUkZMQlc9MTAwCisgICAgKDB4MDg8PDI0KXwweDEwMDAxMCwgLy87IDA0MDAwOyBUQ0FMICAoMHgwOCkgLS0gLy9mb3IgTE8KKyAgICAoMHgwOTw8MjQpfDB4MDA0MDEyLCAvLyAyMDA2MDYxMi4xLmEgMHg2RTQwMTIsIC8vIDB4MDA0MDEyLAorCQkJCQkJIC8vOyAxQjkwMDsgUkNBTEEgKDB4MDkpIC0tIEZBU1RTPTExOyBIUERFPTAxICgxMDBuc2VjKTsgU0VIUD0xIChzZWxlY3QgQjAgcGluPVJYSFApOyBSWEhQPTEgKFR1cm4gb24gUlhIUCBmdW5jdGlvbikoRkE1OTc2QV8xLjNDKQorICAgICgweDBBPDwyNCl8MHg3MDQwMTQsIC8vOyAxQzEwMDsgUkNBTEIgKDB4MEEpCisgICAgKDB4MEI8PDI0KXwweDE4QkRENiwgLy8gOTQxMDAzIDB4MTgwNUQ2LCAvLyAyMDA1MDgxOC4yIDB4MTgwMUQ2LCAvLyAyMDA1MDgxOCAvLyAyMDA1MDgxNiAweDE4MDVENgorCQkJCQkJIC8vOyAwNjJGNzsgSVFDQUwgKDB4MEIpIC0tIFR1cm4gb24gTE8gcGhhc2UgdHVuZXI9MDExMSAmIFJYLUxPIHBoYXNlID0gMDExMTsgRkE1OTc2QV8xLjNCICgyMDA1LzA5LzI5KQorICAgICgweDBDPDwyNCl8MHg1NzU1NTgsIC8vIDIwMDUwODE4LjIgMHg1NTU1NTgsIC8vIDIwMDUwODE4IC8vIDIwMDUwODE2IDB4NTc1NTU4CisJCQkJCQkgLy87IDE1RDU1IDsgSUJTQSAgKDB4MEMpIC0tIElGUHJlID0xMSA7IFRDNTM3NkFfdjEuM0EgZm9yIGNvcm5lcgorICAgICgweDBEPDwyNCl8MHg1NTU0NUEsIC8vIDIwMDYwNjEyLjEuYSAweDU1NTU1QSwKKwkJCQkJCSAvLzsgMTU1NTUgOyBJQlNCICAoMHgwRCkKKyAgICAoMHgwRTw8MjQpfDB4NTU1N0RDLCAvLyAyMDA2MDYxMi4xLmEgMHg1NTU1NUMsIC8vIDk0MTAwMyAweDU1NTdEQywKKwkJCQkJCSAvLzsgMTU1NUYgOyBJQlNDICAoMHgwRSkgLS0gSVJMTkEgJiBJUkxOQiAoUFRBVCAmIENvbnN0IGN1cnJlbnQpPTAxLzAxOyBGQTU5NzZCXzEuM0YgKDIwMDUvMTEvMjUpCisJKDB4MTA8PDI0KXwweDAwMEMyMCwgLy8gOTQxMDAzIDB4MDAwMDIwLCAvLyAyMDA1MDgxOAorCQkJCQkJIC8vOyAwMDAzMCA7IFRNT0RBICgweDEwKSAtLSBMTkFfZ2Fpbl9zdGVwPTAwMTEgOyBMTkE9MTUvMTZkQgorCSgweDExPDwyNCl8MHgwQzAwMjIsIC8vIDk0MTAwMyAweDAzMDAyMiAgLy8gMjAwNTA4MTguMiAweDAzMDAyMiAgLy8gMjAwNTA4MTggLy8gMjAwNTA4MTYgMHgwQzAwMjIKKwkJCQkJCSAvLzsgMDMwMDAgOyBUTU9EQiAoMHgxMSkgLS0gVHVybiBPTiBSWC1RIHBhdGggVGVzdCBTd2l0Y2g7IFRvIGltcHJvdmUgSVEgcGF0aCBncm91cCBkZWxheSAoRkE1OTc2QV8xLjNDKQorCSgweDEyPDwyNCl8MHgwMDAwMjQgIC8vIDIwMDYwNjEyLjEuYSAweDAwMTgyNCAgLy8gOTQxMDAzIGFkZAorCQkJCQkJIC8vOyBUTU9EQyAoMHgxMikgLS0gVHVybiBPRkYgVGVtcGVhcnVyZSBzZW5zb3IKK307CisKK3UzMiB3ODlyZjI0Ml9jaGFubmVsX2RhdGFfMjRbXVsyXSA9Cit7CisgICAgeygweDAzPDwyNCl8MHgwMjVCMDYsICgweDA0PDwyNCl8MHgwODA0MDh9LCAvLyBjaGFubmUxIDAxCisgICAgeygweDAzPDwyNCl8MHgwMjVDNDYsICgweDA0PDwyNCl8MHgwODA0MDh9LCAvLyBjaGFubmUxIDAyCisgICAgeygweDAzPDwyNCl8MHgwMjVEODYsICgweDA0PDwyNCl8MHgwODA0MDh9LCAvLyBjaGFubmUxIDAzCisgICAgeygweDAzPDwyNCl8MHgwMjVFQzYsICgweDA0PDwyNCl8MHgwODA0MDh9LCAvLyBjaGFubmUxIDA0CisgICAgeygweDAzPDwyNCl8MHgwMjYwMDYsICgweDA0PDwyNCl8MHgwODA0MDh9LCAvLyBjaGFubmUxIDA1CisgICAgeygweDAzPDwyNCl8MHgwMjYxNDYsICgweDA0PDwyNCl8MHgwODA0MDh9LCAvLyBjaGFubmUxIDA2CisgICAgeygweDAzPDwyNCl8MHgwMjYyODYsICgweDA0PDwyNCl8MHgwODA0MDh9LCAvLyBjaGFubmUxIDA3CisgICAgeygweDAzPDwyNCl8MHgwMjYzQzYsICgweDA0PDwyNCl8MHgwODA0MDh9LCAvLyBjaGFubmUxIDA4CisgICAgeygweDAzPDwyNCl8MHgwMjY1MDYsICgweDA0PDwyNCl8MHgwODA0MDh9LCAvLyBjaGFubmUxIDA5CisgICAgeygweDAzPDwyNCl8MHgwMjY2NDYsICgweDA0PDwyNCl8MHgwODA0MDh9LCAvLyBjaGFubmUxIDEwCisgICAgeygweDAzPDwyNCl8MHgwMjY3ODYsICgweDA0PDwyNCl8MHgwODA0MDh9LCAvLyBjaGFubmUxIDExCisgICAgeygweDAzPDwyNCl8MHgwMjY4QzYsICgweDA0PDwyNCl8MHgwODA0MDh9LCAvLyBjaGFubmUxIDEyCisgICAgeygweDAzPDwyNCl8MHgwMjZBMDYsICgweDA0PDwyNCl8MHgwODA0MDh9LCAvLyBjaGFubmUxIDEzCisgICAgeygweDAzPDwyNCl8MHgwMjZEMDYsICgweDA0PDwyNCl8MHgwODA0MDh9ICAvLyBjaGFubmUxIDE0Cit9OworCit1MzIgdzg5cmYyNDJfcG93ZXJfZGF0YV8yNFtdID0geygweDA1PDwyNCl8MHgyNEM0OEEsICgweDA1PDwyNCl8MHgyNEM0OEEsICgweDA1PDwyNCl8MHgyNEM0OEF9OworCisvLyAyMDA2MDMxNS42IEVubGFyZ2UgZm9yIG5ldyBzY2FsZQorLy8gMjAwNjAzMTYuNiAyMDA2MDYxOS4yLmEgYWRkIG1hcHBpbmcgYXJyYXkKK3UzMiB3ODlyZjI0Ml90eHZnYV9vbGRfbWFwcGluZ1tdWzJdID0KK3sKKwl7MCwgMH0gLCAvLyBOZXcgPC0+IE9sZAorCXsxLCAxfSAsCisJezIsIDJ9ICwKKwl7MywgM30gLAorCXs0LCA0fSAsCisJezYsIDV9ICwKKwl7OCwgNiB9LAorCXsxMCwgNyB9LAorCXsxMiwgOCB9LAorCXsxNCwgOSB9LAorCXsxNiwgMTB9LAorCXsxOCwgMTF9LAorCXsyMCwgMTJ9LAorCXsyMiwgMTN9LAorCXsyNCwgMTR9LAorCXsyNiwgMTV9LAorCXsyOCwgMTZ9LAorCXszMCwgMTd9LAorCXszMiwgMTh9LAorCXszNCwgMTl9LAorCisKK307CisKKy8vIDIwMDYwNjE5LjMgbW9kaWZ5IGZyb20gQnJ1Y2UncyBtYWlsCit1MzIgdzg5cmYyNDJfdHh2Z2FfZGF0YVtdWzVdID0KK3sKKwkvL2xvdyBnYWluIG1vZGUKKwl7ICgweDA1PDwyNCl8MHgyNEMwMEEsIDAsIDB4MDAyOTIzMTUsIDB4MDgwMEZFRkYsIDB4NTI1MjMxMzEgfSwvLyAgOyBtaW4gZ2FpbgorCXsgKDB4MDU8PDI0KXwweDI0QzgwQSwgMSwgMHgwMDI5MjMxNSwgMHgwODAwRkVGRiwgMHg1MjUyMzEzMSB9LAorCXsgKDB4MDU8PDI0KXwweDI0QzA0QSwgMiwgMHgwMDI5MjMxNSwgMHgwODAwRkVGRiwgMHg1MjUyMzEzMSB9LC8vICAoZGVmYXVsdCkgKzE0ZEJtIChBTlQpCisJeyAoMHgwNTw8MjQpfDB4MjRDODRBLCAzLCAweDAwMjkyMzE1LCAweDA4MDBGRUZGLCAweDUyNTIzMTMxIH0sCisKKwkvL1RYVkdBPTB4MTAKKwl7ICgweDA1PDwyNCl8MHgyNEM0MEEsIDQsIDB4MDAyOTIzMTUsIDB4MDgwMEZFRkYsIDB4NjA2MDM4MzggfSwKKwl7ICgweDA1PDwyNCl8MHgyNEM0MEEsIDUsIDB4MDAyNjIxMTQsIDB4MDcwMEZFRkYsIDB4NjU2NTNCM0IgfSwKKworCS8vVFhWR0E9MHgxMQorCXsgKDB4MDU8PDI0KXwweDI0QzQ0QSwgNiwgMHgwMDI0MUYxMywgMHgwNzAwRkZGRiwgMHg1ODU4MzMzMyB9LAorCXsgKDB4MDU8PDI0KXwweDI0QzQ0QSwgNywgMHgwMDI5MjMxNSwgMHgwODAwRkVGRiwgMHg1RTVFMzczNyB9LAorCisJLy9UWFZHQT0weDEyCisJeyAoMHgwNTw8MjQpfDB4MjRDNDhBLCA4LCAweDAwMjYyMTE0LCAweDA3MDBGRUZGLCAweDUzNTMzMDMwIH0sCisJeyAoMHgwNTw8MjQpfDB4MjRDNDhBLCA5LCAweDAwMjQxRjEzLCAweDA3MDBGRkZGLCAweDU5NTkzNDM0IH0sCisKKwkvL1RYVkdBPTB4MTMKKwl7ICgweDA1PDwyNCl8MHgyNEM0Q0EsIDEwLCAweDAwMjkyMzE1LCAweDA4MDBGRUZGLCAweDUyNTIzMDMwIH0sCisJeyAoMHgwNTw8MjQpfDB4MjRDNENBLCAxMSwgMHgwMDI2MjExNCwgMHgwNzAwRkVGRiwgMHg1NjU2MzIzMiB9LAorCisJLy9UWFZHQT0weDE0CisJeyAoMHgwNTw8MjQpfDB4MjRDNTBBLCAxMiwgMHgwMDI5MjMxNSwgMHgwODAwRkVGRiwgMHg1NDU0MzEzMSB9LAorCXsgKDB4MDU8PDI0KXwweDI0QzUwQSwgMTMsIDB4MDAyNjIxMTQsIDB4MDcwMEZFRkYsIDB4NTg1ODM0MzQgfSwKKworCS8vVFhWR0E9MHgxNQorCXsgKDB4MDU8PDI0KXwweDI0QzU0QSwgMTQsIDB4MDAyOTIzMTUsIDB4MDgwMEZFRkYsIDB4NTQ1NDMxMzEgfSwKKwl7ICgweDA1PDwyNCl8MHgyNEM1NEEsIDE1LCAweDAwMjYyMTE0LCAweDA3MDBGRUZGLCAweDU5NTkzNDM0IH0sCisKKwkvL1RYVkdBPTB4MTYKKwl7ICgweDA1PDwyNCl8MHgyNEM1OEEsIDE2LCAweDAwMjkyMzE1LCAweDA4MDBGRUZGLCAweDU1NTUzMTMxIH0sCisJeyAoMHgwNTw8MjQpfDB4MjRDNThBLCAxNywgMHgwMDI5MjMxNSwgMHgwODAwRkVGRiwgMHg1QjVCMzUzNSB9LAorCisJLy9UWFZHQT0weDE3CisJeyAoMHgwNTw8MjQpfDB4MjRDNUNBLCAxOCwgMHgwMDI2MjExNCwgMHgwNzAwRkVGRiwgMHg1MTUxMkYyRiB9LAorCXsgKDB4MDU8PDI0KXwweDI0QzVDQSwgMTksIDB4MDAyNDFGMTMsIDB4MDcwMEZGRkYsIDB4NTU1NTMxMzEgfSwKKworCS8vVFhWR0E9MHgxOAorCXsgKDB4MDU8PDI0KXwweDI0QzYwQSwgMjAsIDB4MDAyOTIzMTUsIDB4MDgwMEZFRkYsIDB4NEY0RjJFMkUgfSwKKwl7ICgweDA1PDwyNCl8MHgyNEM2MEEsIDIxLCAweDAwMjYyMTE0LCAweDA3MDBGRUZGLCAweDUzNTMzMDMwIH0sCisKKwkvL1RYVkdBPTB4MTkKKwl7ICgweDA1PDwyNCl8MHgyNEM2NEEsIDIyLCAweDAwMjkyMzE1LCAweDA4MDBGRUZGLCAweDRFNEUyRDJEIH0sCisJeyAoMHgwNTw8MjQpfDB4MjRDNjRBLCAyMywgMHgwMDI2MjExNCwgMHgwNzAwRkVGRiwgMHg1MzUzMzAzMCB9LAorCisJLy9UWFZHQT0weDFBCisJeyAoMHgwNTw8MjQpfDB4MjRDNjhBLCAyNCwgMHgwMDI5MjMxNSwgMHgwODAwRkVGRiwgMHg1MDUwMkUyRSB9LAorCXsgKDB4MDU8PDI0KXwweDI0QzY4QSwgMjUsIDB4MDAyNjIxMTQsIDB4MDcwMEZFRkYsIDB4NTU1NTMxMzEgfSwKKworCS8vVFhWR0E9MHgxQgorCXsgKDB4MDU8PDI0KXwweDI0QzZDQSwgMjYsIDB4MDAyNjIxMTQsIDB4MDcwMEZFRkYsIDB4NTM1MzMwMzAgfSwKKwl7ICgweDA1PDwyNCl8MHgyNEM2Q0EsIDI3LCAweDAwMjkyMzE1LCAweDA4MDBGRUZGLCAweDVBNUEzNDM0IH0sCisKKwkvL1RYVkdBPTB4MUMKKwl7ICgweDA1PDwyNCl8MHgyNEM3MEEsIDI4LCAweDAwMjkyMzE1LCAweDA4MDBGRUZGLCAweDU1NTUzMTMxIH0sCisJeyAoMHgwNTw8MjQpfDB4MjRDNzBBLCAyOSwgMHgwMDI5MjMxNSwgMHgwODAwRkVGRiwgMHg1RDVEMzYzNiB9LAorCisJLy9UWFZHQT0weDFECisJeyAoMHgwNTw8MjQpfDB4MjRDNzRBLCAzMCwgMHgwMDI5MjMxNSwgMHgwODAwRkVGRiwgMHg1RjVGMzczNyB9LAorCXsgKDB4MDU8PDI0KXwweDI0Qzc0QSwgMzEsIDB4MDAyNjIxMTQsIDB4MDcwMEZFRkYsIDB4NjU2NTNCM0IgfSwKKworCS8vVFhWR0E9MHgxRQorCXsgKDB4MDU8PDI0KXwweDI0Qzc4QSwgMzIsIDB4MDAyOTIzMTUsIDB4MDgwMEZFRkYsIDB4NjY2NjNCM0IgfSwKKwl7ICgweDA1PDwyNCl8MHgyNEM3OEEsIDMzLCAweDAwMjYyMTE0LCAweDA3MDBGRUZGLCAweDcwNzA0MTQxIH0sCisKKwkvL1RYVkdBPTB4MUYKKwl7ICgweDA1PDwyNCl8MHgyNEM3Q0EsIDM0LCAweDAwMjkyMzE1LCAweDA4MDBGRUZGLCAweDcyNzI0MjQyIH0KK307CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworCisKKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8gIFV4eF9SZWFkRXRoZXJuZXRBZGRyZXNzIC0tCisvLworLy8gIFJvdXRpbmUgRGVzY3JpcHRpb246CisvLyAgICBSZWFkcyBpbiB0aGUgRXRoZXJuZXQgYWRkcmVzcyBmcm9tIHRoZSBJQy4KKy8vCisvLyAgQXJndW1lbnRzOgorLy8gICAgcEh3RGF0YSAgICAgICAgLSBUaGUgcEh3RGF0YSBzdHJ1Y3R1cmUKKy8vCisvLyAgUmV0dXJuIFZhbHVlOgorLy8KKy8vICAgIFRoZSBhZGRyZXNzIGlzIHN0b3JlZCBpbiBFdGhlcm5ldElEQWRkci4KKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQordm9pZAorVXh4X1JlYWRFdGhlcm5ldEFkZHJlc3MoICBwaHdfZGF0YV90IHBId0RhdGEgKQoreworCXUzMglsdG1wOworCisJLy8gUmVhZGluZyBFdGhlcm5ldCBhZGRyZXNzIGZyb20gRUVQUk9NIGFuZCBzZXQgaW50byBoYXJkd2FyZSBkdWUgdG8gTUFDIGFkZHJlc3MgbWF5YmUgY2hhbmdlLgorCS8vIE9ubHkgdW5wbHVnIGFuZCBwbHVnIGFnYWluIGNhbiBtYWtlIGhhcmR3YXJlIHJlYWQgRUVQUk9NIGFnYWluLiAyMDA2MDcyNworCVdiMzVSZWdfV3JpdGVTeW5jKCBwSHdEYXRhLCAweDAzYjQsIDB4MDgwMDAwMDAgKTsgLy8gU3RhcnQgRUVQUk9NIGFjY2VzcyArIFJlYWQgKyBhZGRyZXNzKDB4MGQpCisJV2IzNVJlZ19SZWFkU3luYyggcEh3RGF0YSwgMHgwM2I0LCAmbHRtcCApOworCSooUFVTSE9SVClwSHdEYXRhLT5QZXJtYW5lbnRNYWNBZGRyZXNzID0gY3B1X3RvX2xlMTYoKHUxNilsdG1wKTsgLy8yMDA2MDkyNiBhbnNvbidzIGVuZGlhbgorCVdiMzVSZWdfV3JpdGVTeW5jKCBwSHdEYXRhLCAweDAzYjQsIDB4MDgwMTAwMDAgKTsgLy8gU3RhcnQgRUVQUk9NIGFjY2VzcyArIFJlYWQgKyBhZGRyZXNzKDB4MGQpCisJV2IzNVJlZ19SZWFkU3luYyggcEh3RGF0YSwgMHgwM2I0LCAmbHRtcCApOworCSooUFVTSE9SVCkocEh3RGF0YS0+UGVybWFuZW50TWFjQWRkcmVzcyArIDIpID0gY3B1X3RvX2xlMTYoKHUxNilsdG1wKTsgLy8yMDA2MDkyNiBhbnNvbidzIGVuZGlhbgorCVdiMzVSZWdfV3JpdGVTeW5jKCBwSHdEYXRhLCAweDAzYjQsIDB4MDgwMjAwMDAgKTsgLy8gU3RhcnQgRUVQUk9NIGFjY2VzcyArIFJlYWQgKyBhZGRyZXNzKDB4MGQpCisJV2IzNVJlZ19SZWFkU3luYyggcEh3RGF0YSwgMHgwM2I0LCAmbHRtcCApOworCSooUFVTSE9SVCkocEh3RGF0YS0+UGVybWFuZW50TWFjQWRkcmVzcyArIDQpID0gY3B1X3RvX2xlMTYoKHUxNilsdG1wKTsgLy8yMDA2MDkyNiBhbnNvbidzIGVuZGlhbgorCSooUFVTSE9SVCkocEh3RGF0YS0+UGVybWFuZW50TWFjQWRkcmVzcyArIDYpID0gMDsKKwlXYjM1UmVnX1dyaXRlU3luYyggcEh3RGF0YSwgMHgwM2U4LCBjcHVfdG9fbGUzMigqKFBVTE9ORylwSHdEYXRhLT5QZXJtYW5lbnRNYWNBZGRyZXNzKSApOyAvLzIwMDYwOTI2IGFuc29uJ3MgZW5kaWFuCisJV2IzNVJlZ19Xcml0ZVN5bmMoIHBId0RhdGEsIDB4MDNlYywgY3B1X3RvX2xlMzIoKihQVUxPTkcpKHBId0RhdGEtPlBlcm1hbmVudE1hY0FkZHJlc3MrNCkpICk7IC8vMjAwNjA5MjYgYW5zb24ncyBlbmRpYW4KK30KKworCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8gIENhcmRHZXRNdWx0aWNhc3RCaXQgLS0KKy8vICBEZXNjcmlwdGlvbjoKKy8vICAgIEZvciBhIGdpdmVuIG11bHRpY2FzdCBhZGRyZXNzLCByZXR1cm5zIHRoZSBieXRlIGFuZCBiaXQgaW4gdGhlIGNhcmQgbXVsdGljYXN0IHJlZ2lzdGVycyB0aGF0IGl0IGhhc2hlcyB0by4KKy8vICAgIENhbGxzIENhcmRDb21wdXRlQ3JjKCkgdG8gZGV0ZXJtaW5lIHRoZSBDUkMgdmFsdWUuCisvLyAgQXJndW1lbnRzOgorLy8gICAgQWRkcmVzcyAtIHRoZSBhZGRyZXNzCisvLyAgICBCeXRlIC0gdGhlIGJ5dGUgdGhhdCBpdCBoYXNoZXMgdG8KKy8vICAgIFZhbHVlIC0gd2lsbCBoYXZlIGEgMSBpbiB0aGUgcmVsZXZhbnQgYml0CisvLyAgUmV0dXJuIFZhbHVlOgorLy8gICAgTm9uZS4KKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK3ZvaWQgQ2FyZEdldE11bHRpY2FzdEJpdCggICB1OCBBZGRyZXNzW0VUSF9MRU5HVEhfT0ZfQUREUkVTU10sCisJCQkJCQkgICB1OCAqQnl0ZSwgIHU4ICpWYWx1ZSApCit7CisgICAgdTMyIENyYzsKKyAgICB1MzIgQml0TnVtYmVyOworCisgICAgLy8gRmlyc3QgY29tcHV0ZSB0aGUgQ1JDLgorICAgIENyYyA9IENhcmRDb21wdXRlQ3JjKEFkZHJlc3MsIEVUSF9MRU5HVEhfT0ZfQUREUkVTUyk7CisKKwkvLyBUaGUgY29tcHV0ZWQgQ1JDIGlzIGJpdDB+MzEgZnJvbSBsZWZ0IHRvIHJpZ2h0CisJLy9BdCBmaXJzdCB3ZSBzaG91bGQgZG8gcmlnaHQgc2hpZnQgMjViaXRzLCBhbmQgcmVhZCA3Yml0cyBieSB1c2luZyAnJicsIDJeNz0xMjgKKwlCaXROdW1iZXIgPSAodTMyKSAoKENyYyA+PiAyNikgJiAweDNmKTsKKworCSpCeXRlICA9ICh1OCkgKEJpdE51bWJlciA+PiAzKTsvLyA5MDA1MTQgb3JpZ2luYWwgKEJpdE51bWJlciAvIDgpCisJKlZhbHVlID0gKHU4KSAoKHU4KTEgPDwgKEJpdE51bWJlciAlIDgpKTsKK30KKwordm9pZCBVeHhfcG93ZXJfb25fcHJvY2VkdXJlKCAgcGh3X2RhdGFfdCBwSHdEYXRhICkKK3sKKwl1MzIJbHRtcCwgbG9vcDsKKworCWlmKCBwSHdEYXRhLT5waHlfdHlwZSA8PSBSRl9NQVhJTV9WMSApCisJCVdiMzVSZWdfV3JpdGVTeW5jKCBwSHdEYXRhLCAweDAzZDQsIDB4ZmZmZmZmMzggKTsKKwllbHNlCisJeworCQlXYjM1UmVnX1dyaXRlU3luYyggcEh3RGF0YSwgMHgwM2Y0LCAweEZGNTgwN0ZGICk7Ly8gMjAwNjA3MjEgRm9yIE5FVyBJQyAweEZGNTgwN0ZGCisKKwkJLy8gMjAwNjA1MTEuMSBGaXggdGhlIGZvbGxvd2luZyA0IHN0ZXBzIGZvciBSeCBvZiBSRiAyMjMwIGluaXRpYWwgZmFpbAorCQlXYjM1UmVnX1dyaXRlU3luYyggcEh3RGF0YSwgMHgwM2Q0LCAweDgwICk7Ly8gcmVndWxhdG9yIG9uIG9ubHkKKwkJT1NfU0xFRVAoMTAwMDApOyAvLyBNb2RpZnkgMjAwNTEyMjEuMS5iCisJCVdiMzVSZWdfV3JpdGVTeW5jKCBwSHdEYXRhLCAweDAzZDQsIDB4YjggKTsvLyBSRUdfT04gUkZfUlNUTiBvbiwgYW5kCisJCU9TX1NMRUVQKDEwMDAwKTsgLy8gTW9kaWZ5IDIwMDUxMjIxLjEuYgorCisJCWx0bXAgPSAweDQ5Njg7CisJCWlmKCAocEh3RGF0YS0+cGh5X3R5cGUgPT0gUkZfV0JfMjQyKSB8fAorCQkJKFJGX1dCXzI0Ml8xID09IHBId0RhdGEtPnBoeV90eXBlKSApIC8vIDIwMDYwNjE5LjUgQWRkCisJCQlsdG1wID0gMHg0NDY4OworCQlXYjM1UmVnX1dyaXRlU3luYyggcEh3RGF0YSwgMHgwM2QwLCBsdG1wICk7CisKKwkJV2IzNVJlZ19Xcml0ZVN5bmMoIHBId0RhdGEsIDB4MDNkNCwgMHhhMCApOy8vIFBMTF9QRCBSRUZfUEQgc2V0IHRvIDAKKworCQlPU19TTEVFUCgyMDAwMCk7IC8vIE1vZGlmeSAyMDA1MTIyMS4xLmIKKwkJV2IzNVJlZ19SZWFkU3luYyggcEh3RGF0YSwgMHgwM2QwLCAmbHRtcCApOworCQlsb29wID0gNTAwOyAvLyBXYWl0IGZvciA1IHNlY29uZCAyMDA2MTEwMQorCQl3aGlsZSggIShsdG1wICYgMHgyMCkgJiYgbG9vcC0tICkKKwkJeworCQkJT1NfU0xFRVAoMTAwMDApOyAvLyBNb2RpZnkgMjAwNTEyMjEuMS5iCisJCQlpZiggIVdiMzVSZWdfUmVhZFN5bmMoIHBId0RhdGEsIDB4MDNkMCwgJmx0bXAgKSApCisJCQkJYnJlYWs7CisJCX0KKworCQlXYjM1UmVnX1dyaXRlU3luYyggcEh3RGF0YSwgMHgwM2Q0LCAweGUwICk7Ly8gTUxLX0VOCisJfQorCisJV2IzNVJlZ19Xcml0ZVN5bmMoIHBId0RhdGEsIDB4MDNiMCwgMSApOy8vIFJlc2V0IGhhcmR3YXJlIGZpcnN0CisJT1NfU0xFRVAoMTAwMDApOyAvLyBBZGQgdGhpcyAyMDA1MTIyMS4xLmIKKworCS8vIFNldCBidXJzdCB3cml0ZSBkZWxheQorCVdiMzVSZWdfV3JpdGVTeW5jKCBwSHdEYXRhLCAweDAzZjgsIDB4N2ZmICk7Cit9CisKK3ZvaWQgU2V0X0NoYW5JbmRlcF9SZkRhdGFfYWw3MjMwXzI0KCAgcGh3X2RhdGFfdCBwSHdEYXRhLCB1MzIgKnBsdG1wICxjaGFyIG51bWJlcikKK3sKKwl1OAlpOworCisJZm9yKCBpPTA7IGk8bnVtYmVyOyBpKysgKQorCXsKKwkJcEh3RGF0YS0+cGh5X3BhcmFbaV0gPSBhbDcyMzBfcmZfZGF0YV8yNFtpXTsKKwkJcGx0bXBbaV0gPSAoMSA8PCAzMSkgfCAoMCA8PCAzMCkgfCAoMjQgPDwgMjQpIHwgKGFsNzIzMF9yZl9kYXRhXzI0W2ldJjB4ZmZmZmZmKTsKKwl9Cit9CisKK3ZvaWQgU2V0X0NoYW5JbmRlcF9SZkRhdGFfYWw3MjMwXzUwKCAgcGh3X2RhdGFfdCBwSHdEYXRhLCB1MzIgKnBsdG1wLCBjaGFyIG51bWJlcikKK3sKKwl1OAlpOworCisJZm9yKCBpPTA7IGk8bnVtYmVyOyBpKysgKQorCXsKKwkJcEh3RGF0YS0+cGh5X3BhcmFbaV0gPSBhbDcyMzBfcmZfZGF0YV81MFtpXTsKKwkJcGx0bXBbaV0gPSAoMSA8PCAzMSkgfCAoMCA8PCAzMCkgfCAoMjQgPDwgMjQpIHwgKGFsNzIzMF9yZl9kYXRhXzUwW2ldJjB4ZmZmZmZmKTsKKwl9Cit9CisKKworLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLyBSRlN5bnRoZXNpemVyX2luaXRpYWwgLS0KKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQordm9pZAorUkZTeW50aGVzaXplcl9pbml0aWFsKHBod19kYXRhX3QgcEh3RGF0YSkKK3sKKwl1MzIJYWx0bXBbMzJdOworCVBVTE9ORwlwbHRtcCA9IGFsdG1wOworCXUzMglsdG1wOworCXU4CW51bWJlcj0weDAwOyAvLyBUaGUgbnVtYmVyIG9mIHJlZ2lzdGVyIHZhbGUKKwl1OAlpOworCisJLy8KKwkvLyBiaXRbMzFdICAgICAgU1BJIEVuYWJsZS4KKwkvLyAgICAgICAgICAgICAgMT1wZXJmb3JtIHN5bnRoZXNpemVyIHByb2dyYW0gb3BlcmF0aW9uLiBUaGlzIGJpdCB3aWxsCisJLy8gICAgICAgICAgICAgIGNsZWFyZWQgYXV0b21hdGljYWxseSBhZnRlciB0aGUgb3BlcmF0aW9uIGlzIGNvbXBsZXRlZC4KKwkvLyBiaXRbMzBdICAgICAgU1BJIFIvVyBDb250cm9sCisJLy8gICAgICAgICAgICAgIDA9d3JpdGUsICAgIDE9cmVhZAorCS8vIGJpdFsyOToyNF0gICBTUEkgRGF0YSBGb3JtYXQgTGVuZ3RoCisJLy8gYml0WzE3OjQgXSAgIFJGIERhdGEgYml0cy4KKwkvLyBiaXRbMyA6MCBdICAgUkYgYWRkcmVzcy4KKwlzd2l0Y2goIHBId0RhdGEtPnBoeV90eXBlICkKKwl7CisJY2FzZSBSRl9NQVhJTV8yODI1OgorCWNhc2UgUkZfTUFYSU1fVjE6IC8vIDExZyBXaW5ib25kIDJuZCBCQih3aXRoIFBoeSBib2FyZCAodjEpICsgTWF4aW0gMzMxKQorCQludW1iZXIgPSBzaXplb2YobWF4MjgyNV9yZl9kYXRhKS9zaXplb2YobWF4MjgyNV9yZl9kYXRhWzBdKTsKKwkJZm9yKCBpPTA7IGk8bnVtYmVyOyBpKysgKQorCQl7CisJCQlwSHdEYXRhLT5waHlfcGFyYVtpXSA9IG1heDI4MjVfcmZfZGF0YVtpXTsvLyBCYWNrdXAgUmYgcGFyYW1ldGVyCisJCQlwbHRtcFtpXSA9ICgxIDw8IDMxKSB8ICgwIDw8IDMwKSB8ICgxOCA8PCAyNCkgfCBCaXRSZXZlcnNlKCBtYXgyODI1X3JmX2RhdGFbaV0sIDE4KTsKKwkJfQorCQlicmVhazsKKworCWNhc2UgUkZfTUFYSU1fMjgyNzoKKwkJbnVtYmVyID0gc2l6ZW9mKG1heDI4MjdfcmZfZGF0YSkvc2l6ZW9mKG1heDI4MjdfcmZfZGF0YVswXSk7CisJCWZvciggaT0wOyBpPG51bWJlcjsgaSsrICkKKwkJeworCQkJcEh3RGF0YS0+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+TTJDX01hY0NvbnRyb2wgfD0gREVGQVVMVF9DV01BWDsKKwlwbHRtcFsyXSA9IHBXYjM1UmVnLT5NMkNfTWFjQ29udHJvbDsKKworCS8vIE0zMCBCU1NJRAorCXBsdG1wWzNdID0gKihQVUxPTkcpcEh3RGF0YS0+YnNzaWQ7CisKKwkvLyBNMzQKKwlwSHdEYXRhLT5BSUQgPSBERUZBVUxUX0FJRDsKKwl0bXAgPSAqKFBVU0hPUlQpKHBId0RhdGEtPmJzc2lkKzQpOworCXRtcCB8PSBERUZBVUxUX0FJRCA8PCAxNjsKKwlwbHRtcFs0XSA9IHRtcDsKKworCS8vIE0zOAorCXBXYjM1UmVnLT5NMzhfTWFjQ29udHJvbCA9IChERUZBVUxUX1JBVEVfUkVUUllfTElNSVQ8PDgpIHwgKERFRkFVTFRfTE9OR19SRVRSWV9MSU1JVCA8PCA0KSB8IERFRkFVTFRfU0hPUlRfUkVUUllfTElNSVQ7CisJcGx0bXBbNV0gPSBwV2IzNVJlZy0+TTM4X01hY0NvbnRyb2w7CisKKwkvLyBNM0MKKwl0bXAgPSAoREVGQVVMVF9QSUZTVCA8PCAyNikgfCAoREVGQVVMVF9FSUZTVCA8PCAxNikgfCAoREVGQVVMVF9ESUZTVCA8PCA4KSB8IChERUZBVUxUX1NJRlNUIDw8IDQpIHwgREVGQVVMVF9PU0lGU1QgOworCXBXYjM1UmVnLT5NM0NfTWFjQ29udHJvbCA9IHRtcDsKKwlwbHRtcFs2XSA9IHRtcDsKKworCS8vIE00MAorCXBId0RhdGEtPnNsb3RfdGltZV9zZWxlY3QgPSBERUZBVUxUX1NMT1RfVElNRTsKKwl0bXAgPSAoREVGQVVMVF9BVElNV0QgPDwgMTYpIHwgREVGQVVMVF9TTE9UX1RJTUU7CisJcFdiMzVSZWctPk00MF9NYWNDb250cm9sID0gdG1wOworCXBsdG1wWzddID0gdG1wOworCisJLy8gTTQ0CisJdG1wID0gREVGQVVMVF9NQVhfVFhfTVNEVV9MSUZFX1RJTUUgPDwgMTA7IC8vICoxMDI0CisJcFdiMzVSZWctPk00NF9NYWNDb250cm9sID0gdG1wOworCXBsdG1wWzhdID0gdG1wOworCisJLy8gTTQ4CisJcEh3RGF0YS0+QmVhY29uUGVyaW9kID0gREVGQVVMVF9CRUFDT05fSU5URVJWQUw7CisJcEh3RGF0YS0+UHJvYmVEZWxheSA9IERFRkFVTFRfUFJPQkVfREVMQVlfVElNRTsKKwl0bXAgPSAoREVGQVVMVF9CRUFDT05fSU5URVJWQUwgPDwgMTYpIHwgREVGQVVMVF9QUk9CRV9ERUxBWV9USU1FOworCXBXYjM1UmVnLT5NNDhfTWFjQ29udHJvbCA9IHRtcDsKKwlwbHRtcFs5XSA9IHRtcDsKKworCS8vTTRDCisJcFdiMzVSZWctPk00Q19NYWNTdGF0dXMgPSAoREVGQVVMVF9QUk9UT0NPTF9WRVJTSU9OIDw8IDMwKSB8IChERUZBVUxUX01BQ19QT1dFUl9TVEFURSA8PCAyOCkgfCAoREVGQVVMVF9EVElNX0FMRVJUX1RJTUUgPDwgMjQpOworCXBsdG1wWzEwXSA9IHBXYjM1UmVnLT5NNENfTWFjU3RhdHVzOworCisJLy8gQnVyc3Qgd3JpdGUKKwkvL1diMzVSZWdfQnVyc3RXcml0ZSggcEh3RGF0YSwgMHgwODI0LCBwbHRtcCwgMTEsIEFVVE9fSU5DUkVNRU5UICk7CisJZm9yKCBpPTA7IGk8MTE7IGkrKyApCisJCVdiMzVSZWdfV3JpdGVTeW5jKCBwSHdEYXRhLCAweDA4MjQgKyBpKjQsIHBsdG1wW2ldICk7CisKKwkvLyBNNjAKKwlXYjM1UmVnX1dyaXRlU3luYyggcEh3RGF0YSwgMHgwODYwLCAweDEyNDgxMjQ4ICk7CisJcFdiMzVSZWctPk02MF9NYWNDb250cm9sID0gMHgxMjQ4MTI0ODsKKworCS8vIE02OAorCVdiMzVSZWdfV3JpdGVTeW5jKCBwSHdEYXRhLCAweDA4NjgsIDB4MDAwNTA5MDAgKTsgLy8gMjAwNTEwMTggMHgwMDBGMEYwMCApOyAvLyA5NDA5MzAgMHgwMDEzMTMwMAorCXBXYjM1UmVnLT5NNjhfTWFjQ29udHJvbCA9IDB4MDAwNTA5MDA7CisKKwkvLyBNOTgKKwlXYjM1UmVnX1dyaXRlU3luYyggcEh3RGF0YSwgMHgwODk4LCAweGZmZmY4ODg4ICk7CisJcFdiMzVSZWctPk05OF9NYWNDb250cm9sID0gMHhmZmZmODg4ODsKK30KKworCit2b2lkIFV4eF9wb3dlcl9vZmZfcHJvY2VkdXJlKCAgcGh3X2RhdGFfdCBwSHdEYXRhICkKK3sKKwkvLyBTVywgUE1VIHJlc2V0IGFuZCB0dXJuIG9mZiBjbG9jaworCVdiMzVSZWdfV3JpdGVTeW5jKCBwSHdEYXRhLCAweDAzYjAsIDMgKTsKKwlXYjM1UmVnX1dyaXRlU3luYyggcEh3RGF0YSwgMHgwM2YwLCAweGY5ICk7Cit9CisKKy8vRGVjaWRlIHRoZSBUeFZnYSBvZiBldmVyeSBjaGFubmVsCit2b2lkIEdldFR4VmdhRnJvbUVFUFJPTSggIHBod19kYXRhX3QgcEh3RGF0YSApCit7CisJdTMyCQlpLCBqLCBsdG1wOworCXUxNgkJVmFsdWVbTUFYX1RYVkdBX0VFUFJPTV07CisJUFVDSEFSCQlwY3RtcDsKKwl1OAkJY3RtcD0wOworCisJLy8gR2V0IHRoZSBlbnRpcmUgVHhWZ2Egc2V0dGluZyBpbiBFRVBST00KKwlmb3IoIGk9MDsgaTxNQVhfVFhWR0FfRUVQUk9NOyBpKysgKQorCXsKKwkJV2IzNVJlZ19Xcml0ZVN5bmMoIHBId0RhdGEsIDB4MDNiNCwgMHgwODEwMDAwMCArIDB4MDAwMTAwMDAqaSApOworCQlXYjM1UmVnX1JlYWRTeW5jKCBwSHdEYXRhLCAweDAzYjQsICZsdG1wICk7CisJCVZhbHVlW2ldID0gKHUxNikoIGx0bXAgJiAweGZmZmYgKTsgLy8gR2V0IDE2IGJpdCBhdmFpbGFibGUKKwkJVmFsdWVbaV0gPSBjcHVfdG9fbGUxNiggVmFsdWVbaV0gKTsgLy8gWzc6MF0yNDEyIFs3OjBdMjQxNyAuLi4uCisJfQorCisJLy8gQWRqdXN0IHRoZSBmaWxlZCB3aGljaCBmaWxscyB3aXRoIHJlc2VydmVkIHZhbHVlLgorCXBjdG1wID0gKFBVQ0hBUilWYWx1ZTsKKwlmb3IoIGk9MDsgaTwoTUFYX1RYVkdBX0VFUFJPTSoyKTsgaSsrICkKKwl7CisJCWlmKCBwY3RtcFtpXSAhPSAweGZmICkKKwkJCWN0bXAgPSBwY3RtcFtpXTsKKwkJZWxzZQorCQkJcGN0bXBbaV0gPSBjdG1wOworCX0KKworCS8vIEFkanVzdCBXQl8yNDIgdG8gV0JfMjQyXzEgVHhWZ2Egc2NhbGUKKwlpZiggcEh3RGF0YS0+cGh5X3R5cGUgPT0gUkZfV0JfMjQyICkKKwl7CisJCWZvciggaT0wOyBpPDQ7IGkrKyApIC8vIE9ubHkgMjQxMiAyNDM3IDI0NjIgMjQ4NCBjYXNlIG11c3QgYmUgbW9kaWZpZWQKKwkJeworCQkJZm9yKCBqPTA7IGo8KHNpemVvZih3ODlyZjI0Ml90eHZnYV9vbGRfbWFwcGluZykvc2l6ZW9mKHc4OXJmMjQyX3R4dmdhX29sZF9tYXBwaW5nWzBdKSk7IGorKyApCisJCQl7CisJCQkJaWYoIHBjdG1wW2ldIDwgKHU4KXc4OXJmMjQyX3R4dmdhX29sZF9tYXBwaW5nW2pdWzFdICkKKwkJCQl7CisJCQkJCXBjdG1wW2ldID0gKHU4KXc4OXJmMjQyX3R4dmdhX29sZF9tYXBwaW5nW2pdWzBdOworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisKKwkJCWlmKCBqID09IChzaXplb2Yodzg5cmYyNDJfdHh2Z2Ffb2xkX21hcHBpbmcpL3NpemVvZih3ODlyZjI0Ml90eHZnYV9vbGRfbWFwcGluZ1swXSkpICkKKwkJCQlwY3RtcFtpXSA9ICh1OCl3ODlyZjI0Ml90eHZnYV9vbGRfbWFwcGluZ1tqLTFdWzBdOworCQl9CisJfQorCisJLy8gMjAwNjA2MjEgQWRkCisJbWVtY3B5KCBwSHdEYXRhLT5UeFZnYVNldHRpbmdJbkVFUFJPTSwgcGN0bXAsIE1BWF9UWFZHQV9FRVBST00qMiApOyAvL01BWF9UWFZHQV9FRVBST00gaXMgdTE2IGNvdW50CisJRUVQUk9NVHhWZ2FBZGp1c3QoIHBId0RhdGEgKTsKK30KKworLy8gVGhpcyBmdW5jdGlvbiB3aWxsIGFmZmVjdCB0aGUgVHhWZ2EgcGFyYW1ldGVyIGluIEhBTC4gSWYgaGFsX3NldF9jdXJyZW50X2NoYW5uZWwKKy8vIG9yIFJGU3ludGhlc2l6ZXJfU2V0UG93ZXJJbmRleCBiZSBjYWxsZWQsIG5ldyBUeFZnYSB3aWxsIHRha2UgZWZmZWN0LgorLy8gVHhWZ2FTZXR0aW5nSW5FRVBST00gb2Ygc0h3RGF0YSBpcyBhbiB1OCBhcnJheSBwb2ludCB0byBFRVBST00gY29udGFpbiBmb3IgSVM4OUMzNQorLy8gVGhpcyBmdW5jdGlvbiB3aWxsIHVzZSBkZWZhdWx0IFR4VmdhU2V0dGluZ0luRUVQUk9NIGRhdGEgdG8gY2FsY3VsYXRlIG5ldyBUeFZnYS4KK3ZvaWQgRUVQUk9NVHhWZ2FBZGp1c3QoICBwaHdfZGF0YV90IHBId0RhdGEgKSAvLyAyMDA2MDYxOS41IEFkZAoreworCVBVQ0hBUgkJcFR4VmdhID0gcEh3RGF0YS0+VHhWZ2FTZXR0aW5nSW5FRVBST007CisJczE2CQlpLCBzdG1wOworCisJLy8tLSAyLjRHIC0tIDIwMDYwNzA0LjIgUmVxdWVzdCBmcm9tIFRpZ2VyCisJLy9jaGFubmVsIDEgfiA1CisJc3RtcCA9IHBUeFZnYVsxXSAtIHBUeFZnYVswXTsKKwlmb3IoIGk9MDsgaTw1OyBpKysgKQorCQlwSHdEYXRhLT5UeFZnYUZvcjI0W2ldID0gcFR4VmdhWzBdICsgc3RtcCppLzQ7CisJLy9jaGFubmVsIDYgfiAxMAorCXN0bXAgPSBwVHhWZ2FbMl0gLSBwVHhWZ2FbMV07CisJZm9yKCBpPTU7IGk8MTA7IGkrKyApCisJCXBId0RhdGEtPlR4VmdhRm9yMjRbaV0gPSBwVHhWZ2FbMV0gKyBzdG1wKihpLTUpLzQ7CisJLy9jaGFubmVsIDExIH4gMTMKKwlzdG1wID0gcFR4VmdhWzNdIC0gcFR4VmdhWzJdOworCWZvciggaT0xMDsgaTwxMzsgaSsrICkKKwkJcEh3RGF0YS0+VHhWZ2FGb3IyNFtpXSA9IHBUeFZnYVsyXSArIHN0bXAqKGktMTApLzI7CisJLy9jaGFubmVsIDE0CisJcEh3RGF0YS0+VHhWZ2FGb3IyNFsxM10gPSBwVHhWZ2FbM107CisKKwkvLy0tIDVHIC0tCisJaWYoIHBId0RhdGEtPnBoeV90eXBlID09IFJGX0FJUk9IQV83MjMwICkKKwl7CisJCS8vY2hhbm5lbCAxODQKKwkJcEh3RGF0YS0+VHhWZ2FGb3I1MFswXS5DaGFuTm8gPSAxODQ7CisJCXBId0RhdGEtPlR4VmdhRm9yNTBbMF0uVHhWZ2FWYWx1ZSA9IHBUeFZnYVs0XTsKKwkJLy9jaGFubmVsIDE5NgorCQlwSHdEYXRhLT5UeFZnYUZvcjUwWzNdLkNoYW5ObyA9IDE5NjsKKwkJcEh3RGF0YS0+VHhWZ2FGb3I1MFszXS5UeFZnYVZhbHVlID0gcFR4VmdhWzVdOworCQkvL2ludGVycG9sYXRlCisJCXBId0RhdGEtPlR4VmdhRm9yNTBbMV0uQ2hhbk5vID0gMTg4OworCQlwSHdEYXRhLT5UeFZnYUZvcjUwWzJdLkNoYW5ObyA9IDE5MjsKKwkJc3RtcCA9IHBUeFZnYVs1XSAtIHBUeFZnYVs0XTsKKwkJcEh3RGF0YS0+VHhWZ2FGb3I1MFsyXS5UeFZnYVZhbHVlID0gcFR4VmdhWzVdIC0gc3RtcC8zOworCQlwSHdEYXRhLT5UeFZnYUZvcjUwWzFdLlR4VmdhVmFsdWUgPSBwVHhWZ2FbNV0gLSBzdG1wKjIvMzsKKworCQkvL2NoYW5uZWwgMTYKKwkJcEh3RGF0YS0+VHhWZ2FGb3I1MFs2XS5DaGFuTm8gPSAxNjsKKwkJcEh3RGF0YS0+VHhWZ2FGb3I1MFs2XS5UeFZnYVZhbHVlID0gcFR4VmdhWzZdOworCQlwSHdEYXRhLT5UeFZnYUZvcjUwWzRdLkNoYW5ObyA9IDg7CisJCXBId0RhdGEtPlR4VmdhRm9yNTBbNF0uVHhWZ2FWYWx1ZSA9IHBUeFZnYVs2XTsKKwkJcEh3RGF0YS0+VHhWZ2FGb3I1MFs1XS5DaGFuTm8gPSAxMjsKKwkJcEh3RGF0YS0+VHhWZ2FGb3I1MFs1XS5UeFZnYVZhbHVlID0gcFR4VmdhWzZdOworCisJCS8vY2hhbm5lbCAzNgorCQlwSHdEYXRhLT5UeFZnYUZvcjUwWzhdLkNoYW5ObyA9IDM2OworCQlwSHdEYXRhLT5UeFZnYUZvcjUwWzhdLlR4VmdhVmFsdWUgPSBwVHhWZ2FbN107CisJCXBId0RhdGEtPlR4VmdhRm9yNTBbN10uQ2hhbk5vID0gMzQ7CisJCXBId0RhdGEtPlR4VmdhRm9yNTBbN10uVHhWZ2FWYWx1ZSA9IHBUeFZnYVs3XTsKKwkJcEh3RGF0YS0+VHhWZ2FGb3I1MFs5XS5DaGFuTm8gPSAzODsKKwkJcEh3RGF0YS0+VHhWZ2FGb3I1MFs5XS5UeFZnYVZhbHVlID0gcFR4VmdhWzddOworCisJCS8vY2hhbm5lbCA0MAorCQlwSHdEYXRhLT5UeFZnYUZvcjUwWzEwXS5DaGFuTm8gPSA0MDsKKwkJcEh3RGF0YS0+VHhWZ2FGb3I1MFsxMF0uVHhWZ2FWYWx1ZSA9IHBUeFZnYVs4XTsKKwkJLy9jaGFubmVsIDQ4CisJCXBId0RhdGEtPlR4VmdhRm9yNTBbMTRdLkNoYW5ObyA9IDQ4OworCQlwSHdEYXRhLT5UeFZnYUZvcjUwWzE0XS5UeFZnYVZhbHVlID0gcFR4VmdhWzldOworCQkvL2ludGVycG9sYXRlCisJCXBId0RhdGEtPlR4VmdhRm9yNTBbMTFdLkNoYW5ObyA9IDQyOworCQlwSHdEYXRhLT5UeFZnYUZvcjUwWzEyXS5DaGFuTm8gPSA0NDsKKwkJcEh3RGF0YS0+VHhWZ2FGb3I1MFsxM10uQ2hhbk5vID0gNDY7CisJCXN0bXAgPSBwVHhWZ2FbOV0gLSBwVHhWZ2FbOF07CisJCXBId0RhdGEtPlR4VmdhRm9yNTBbMTNdLlR4VmdhVmFsdWUgPSBwVHhWZ2FbOV0gLSBzdG1wLzQ7CisJCXBId0RhdGEtPlR4VmdhRm9yNTBbMTJdLlR4VmdhVmFsdWUgPSBwVHhWZ2FbOV0gLSBzdG1wKjIvNDsKKwkJcEh3RGF0YS0+VHhWZ2FGb3I1MFsxMV0uVHhWZ2FWYWx1ZSA9IHBUeFZnYVs5XSAtIHN0bXAqMy80OworCisJCS8vY2hhbm5lbCA1MgorCQlwSHdEYXRhLT5UeFZnYUZvcjUwWzE1XS5DaGFuTm8gPSA1MjsKKwkJcEh3RGF0YS0+VHhWZ2FGb3I1MFsxNV0uVHhWZ2FWYWx1ZSA9IHBUeFZnYVsxMF07CisJCS8vY2hhbm5lbCA2NAorCQlwSHdEYXRhLT5UeFZnYUZvcjUwWzE4XS5DaGFuTm8gPSA2NDsKKwkJcEh3RGF0YS0+VHhWZ2FGb3I1MFsxOF0uVHhWZ2FWYWx1ZSA9IHBUeFZnYVsxMV07CisJCS8vaW50ZXJwb2xhdGUKKwkJcEh3RGF0YS0+VHhWZ2FGb3I1MFsxNl0uQ2hhbk5vID0gNTY7CisJCXBId0RhdGEtPlR4VmdhRm9yNTBbMTddLkNoYW5ObyA9IDYwOworCQlzdG1wID0gcFR4VmdhWzExXSAtIHBUeFZnYVsxMF07CisJCXBId0RhdGEtPlR4VmdhRm9yNTBbMTddLlR4VmdhVmFsdWUgPSBwVHhWZ2FbMTFdIC0gc3RtcC8zOworCQlwSHdEYXRhLT5UeFZnYUZvcjUwWzE2XS5UeFZnYVZhbHVlID0gcFR4VmdhWzExXSAtIHN0bXAqMi8zOworCisJCS8vY2hhbm5lbCAxMDAKKwkJcEh3RGF0YS0+VHhWZ2FGb3I1MFsxOV0uQ2hhbk5vID0gMTAwOworCQlwSHdEYXRhLT5UeFZnYUZvcjUwWzE5XS5UeFZnYVZhbHVlID0gcFR4VmdhWzEyXTsKKwkJLy9jaGFubmVsIDExMgorCQlwSHdEYXRhLT5UeFZnYUZvcjUwWzIyXS5DaGFuTm8gPSAxMTI7CisJCXBId0RhdGEtPlR4VmdhRm9yNTBbMjJdLlR4VmdhVmFsdWUgPSBwVHhWZ2FbMTNdOworCQkvL2ludGVycG9sYXRlCisJCXBId0RhdGEtPlR4VmdhRm9yNTBbMjBdLkNoYW5ObyA9IDEwNDsKKwkJcEh3RGF0YS0+VHhWZ2FGb3I1MFsyMV0uQ2hhbk5vID0gMTA4OworCQlzdG1wID0gcFR4VmdhWzEzXSAtIHBUeFZnYVsxMl07CisJCXBId0RhdGEtPlR4VmdhRm9yNTBbMjFdLlR4VmdhVmFsdWUgPSBwVHhWZ2FbMTNdIC0gc3RtcC8zOworCQlwSHdEYXRhLT5UeFZnYUZvcjUwWzIwXS5UeFZnYVZhbHVlID0gcFR4VmdhWzEzXSAtIHN0bXAqMi8zOworCisJCS8vY2hhbm5lbCAxMjgKKwkJcEh3RGF0YS0+VHhWZ2FGb3I1MFsyNl0uQ2hhbk5vID0gMTI4OworCQlwSHdEYXRhLT5UeFZnYUZvcjUwWzI2XS5UeFZnYVZhbHVlID0gcFR4VmdhWzE0XTsKKwkJLy9pbnRlcnBvbGF0ZQorCQlwSHdEYXRhLT5UeFZnYUZvcjUwWzIzXS5DaGFuTm8gPSAxMTY7CisJCXBId0RhdGEtPlR4VmdhRm9yNTBbMjRdLkNoYW5ObyA9IDEyMDsKKwkJcEh3RGF0YS0+VHhWZ2FGb3I1MFsyNV0uQ2hhbk5vID0gMTI0OworCQlzdG1wID0gcFR4VmdhWzE0XSAtIHBUeFZnYVsxM107CisJCXBId0RhdGEtPlR4VmdhRm9yNTBbMjVdLlR4VmdhVmFsdWUgPSBwVHhWZ2FbMTRdIC0gc3RtcC80OworCQlwSHdEYXRhLT5UeFZnYUZvcjUwWzI0XS5UeFZnYVZhbHVlID0gcFR4VmdhWzE0XSAtIHN0bXAqMi80OworCQlwSHdEYXRhLT5UeFZnYUZvcjUwWzIzXS5UeFZnYVZhbHVlID0gcFR4VmdhWzE0XSAtIHN0bXAqMy80OworCisJCS8vY2hhbm5lbCAxNDAKKwkJcEh3RGF0YS0+VHhWZ2FGb3I1MFsyOV0uQ2hhbk5vID0gMTQwOworCQlwSHdEYXRhLT5UeFZnYUZvcjUwWzI5XS5UeFZnYVZhbHVlID0gcFR4VmdhWzE1XTsKKwkJLy9pbnRlcnBvbGF0ZQorCQlwSHdEYXRhLT5UeFZnYUZvcjUwWzI3XS5DaGFuTm8gPSAxMzI7CisJCXBId0RhdGEtPlR4VmdhRm9yNTBbMjhdLkNoYW5ObyA9IDEzNjsKKwkJc3RtcCA9IHBUeFZnYVsxNV0gLSBwVHhWZ2FbMTRdOworCQlwSHdEYXRhLT5UeFZnYUZvcjUwWzI4XS5UeFZnYVZhbHVlID0gcFR4VmdhWzE1XSAtIHN0bXAvMzsKKwkJcEh3RGF0YS0+VHhWZ2FGb3I1MFsyN10uVHhWZ2FWYWx1ZSA9IHBUeFZnYVsxNV0gLSBzdG1wKjIvMzsKKworCQkvL2NoYW5uZWwgMTQ5CisJCXBId0RhdGEtPlR4VmdhRm9yNTBbMzBdLkNoYW5ObyA9IDE0OTsKKwkJcEh3RGF0YS0+VHhWZ2FGb3I1MFszMF0uVHhWZ2FWYWx1ZSA9IHBUeFZnYVsxNl07CisJCS8vY2hhbm5lbCAxNjUKKwkJcEh3RGF0YS0+VHhWZ2FGb3I1MFszNF0uQ2hhbk5vID0gMTY1OworCQlwSHdEYXRhLT5UeFZnYUZvcjUwWzM0XS5UeFZnYVZhbHVlID0gcFR4VmdhWzE3XTsKKwkJLy9pbnRlcnBvbGF0ZQorCQlwSHdEYXRhLT5UeFZnYUZvcjUwWzMxXS5DaGFuTm8gPSAxNTM7CisJCXBId0RhdGEtPlR4VmdhRm9yNTBbMzJdLkNoYW5ObyA9IDE1NzsKKwkJcEh3RGF0YS0+VHhWZ2FGb3I1MFszM10uQ2hhbk5vID0gMTYxOworCQlzdG1wID0gcFR4VmdhWzE3XSAtIHBUeFZnYVsxNl07CisJCXBId0RhdGEtPlR4VmdhRm9yNTBbMzNdLlR4VmdhVmFsdWUgPSBwVHhWZ2FbMTddIC0gc3RtcC80OworCQlwSHdEYXRhLT5UeFZnYUZvcjUwWzMyXS5UeFZnYVZhbHVlID0gcFR4VmdhWzE3XSAtIHN0bXAqMi80OworCQlwSHdEYXRhLT5UeFZnYUZvcjUwWzMxXS5UeFZnYVZhbHVlID0gcFR4VmdhWzE3XSAtIHN0bXAqMy80OworCX0KKworCSNpZmRlZiBfUEVfU1RBVEVfRFVNUF8KKwlXQkRFQlVHKCgiIFR4VmdhRm9yMjQgOiBcbiIpKTsKKwlEYXRhRG1wKCh1OCAqKXBId0RhdGEtPlR4VmdhRm9yMjQsIDE0ICwwKTsKKwlXQkRFQlVHKCgiIFR4VmdhRm9yNTAgOiBcbiIpKTsKKwlEYXRhRG1wKCh1OCAqKXBId0RhdGEtPlR4VmdhRm9yNTAsIDcwICwwKTsKKwkjZW5kaWYKK30KKwordm9pZCBCQlByb2Nlc3Nvcl9SYXRlQ2hhbmdpbmcoICBwaHdfZGF0YV90IHBId0RhdGEsICB1OCByYXRlICkgLy8gMjAwNjA2MTMuMQoreworCVBXQjM1UkVHCXBXYjM1UmVnID0gJnBId0RhdGEtPldiMzVSZWc7CisJdW5zaWduZWQgY2hhcgkJSXMxMWJSYXRlOworCisJSXMxMWJSYXRlID0gKHJhdGUgJSA2KSA/IDEgOiAwOworCXN3aXRjaCggcEh3RGF0YS0+cGh5X3R5cGUgKQorCXsKKwkJY2FzZSBSRl9BSVJPSEFfMjIzMDoKKwkJY2FzZSBSRl9BSVJPSEFfMjIzMFM6IC8vIDIwMDYwNDIwIEFkZCB0aGlzCisJCQlpZiggSXMxMWJSYXRlICkKKwkJCXsKKwkJCQlpZiggKHBXYjM1UmVnLT5CQjQ4ICE9IEJCNDhfREVGQVVMVF9BTDIyMzBfMTFCKSAmJgorCQkJCQkocFdiMzVSZWctPkJCNEMgIT0gQkI0Q19ERUZBVUxUX0FMMjIzMF8xMUIpICkKKwkJCQl7CisJCQkJCVdiMzVSZWdfV3JpdGUoIHBId0RhdGEsIDB4MTA0OCwgQkI0OF9ERUZBVUxUX0FMMjIzMF8xMUIgKTsKKwkJCQkJV2IzNVJlZ19Xcml0ZSggcEh3RGF0YSwgMHgxMDRjLCBCQjRDX0RFRkFVTFRfQUwyMjMwXzExQiApOworCQkJCX0KKwkJCX0KKwkJCWVsc2UKKwkJCXsKKwkJCQlpZiggKHBXYjM1UmVnLT5CQjQ4ICE9IEJCNDhfREVGQVVMVF9BTDIyMzBfMTFHKSAmJgorCQkJCQkocFdiMzVSZWctPkJCNEMgIT0gQkI0Q19ERUZBVUxUX0FMMjIzMF8xMUcpICkKKwkJCQl7CisJCQkJCVdiMzVSZWdfV3JpdGUoIHBId0RhdGEsIDB4MTA0OCwgQkI0OF9ERUZBVUxUX0FMMjIzMF8xMUcgKTsKKwkJCQkJV2IzNVJlZ19Xcml0ZSggcEh3RGF0YSwgMHgxMDRjLCBCQjRDX0RFRkFVTFRfQUwyMjMwXzExRyApOworCQkJCX0KKwkJCX0KKwkJCWJyZWFrOworCisJCWNhc2UgUkZfV0JfMjQyOiAvLyAyMDA2MDYyMyBUaGUgZml4IG9ubHkgZm9yIG9sZCBUeFZHQSBzZXR0aW5nCisJCQlpZiggSXMxMWJSYXRlICkKKwkJCXsKKwkJCQlpZiggKHBXYjM1UmVnLT5CQjQ4ICE9IEJCNDhfREVGQVVMVF9XQjI0Ml8xMUIpICYmCisJCQkJCShwV2IzNVJlZy0+QkI0QyAhPSBCQjRDX0RFRkFVTFRfV0IyNDJfMTFCKSApCisJCQkJeworCQkJCQlwV2IzNVJlZy0+QkI0OCA9IEJCNDhfREVGQVVMVF9XQjI0Ml8xMUI7CisJCQkJCXBXYjM1UmVnLT5CQjRDID0gQkI0Q19ERUZBVUxUX1dCMjQyXzExQjsKKwkJCQkJV2IzNVJlZ19Xcml0ZSggcEh3RGF0YSwgMHgxMDQ4LCBCQjQ4X0RFRkFVTFRfV0IyNDJfMTFCICk7CisJCQkJCVdiMzVSZWdfV3JpdGUoIHBId0RhdGEsIDB4MTA0YywgQkI0Q19ERUZBVUxUX1dCMjQyXzExQiApOworCQkJCX0KKwkJCX0KKwkJCWVsc2UKKwkJCXsKKwkJCQlpZiggKHBXYjM1UmVnLT5CQjQ4ICE9IEJCNDhfREVGQVVMVF9XQjI0Ml8xMUcpICYmCisJCQkJCShwV2IzNVJlZy0+QkI0QyAhPSBCQjRDX0RFRkFVTFRfV0IyNDJfMTFHKSApCisJCQkJeworCQkJCQlwV2IzNVJlZy0+QkI0OCA9IEJCNDhfREVGQVVMVF9XQjI0Ml8xMUc7CisJCQkJCXBXYjM1UmVnLT5CQjRDID0gQkI0Q19ERUZBVUxUX1dCMjQyXzExRzsKKwkJCQkJV2IzNVJlZ19Xcml0ZSggcEh3RGF0YSwgMHgxMDQ4LCBCQjQ4X0RFRkFVTFRfV0IyNDJfMTFHICk7CisJCQkJCVdiMzVSZWdfV3JpdGUoIHBId0RhdGEsIDB4MTA0YywgQkI0Q19ERUZBVUxUX1dCMjQyXzExRyApOworCQkJCX0KKwkJCX0KKwkJCWJyZWFrOworCX0KK30KKworCisKKworCisKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvcnhpc3IuYyBiL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL3J4aXNyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMThlOTQyYwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL3J4aXNyLmMKQEAgLTAsMCArMSwzMCBAQAorI2luY2x1ZGUgIm9zX2NvbW1vbi5oIgorCit2b2lkIHZSeFRpbWVySW5pdChQV0IzMl9BREFQVEVSIEFkYXB0ZXIpCit7CisJT1NfVElNRVJfSU5JVElBTCgmKEFkYXB0ZXItPk1kcy5uVGltZXIpLCAodm9pZCopIFJ4VGltZXJIYW5kbGVyLCAodm9pZCopIEFkYXB0ZXIpOworfQorCit2b2lkIHZSeFRpbWVyU3RhcnQoUFdCMzJfQURBUFRFUiBBZGFwdGVyLCBpbnQgdGltZW91dF92YWx1ZSkKK3sKKwlpZiAodGltZW91dF92YWx1ZTxNSU5fVElNRU9VVF9WQUwpCisJCXRpbWVvdXRfdmFsdWU9TUlOX1RJTUVPVVRfVkFMOworCisJT1NfVElNRVJfU0VUKCAmKEFkYXB0ZXItPk1kcy5uVGltZXIpLCB0aW1lb3V0X3ZhbHVlICk7Cit9CisKK3ZvaWQgdlJ4VGltZXJTdG9wKFBXQjMyX0FEQVBURVIgQWRhcHRlcikKK3sKKwlPU19USU1FUl9DQU5DRUwoICYoQWRhcHRlci0+TWRzLm5UaW1lciksIDAgKTsKK30KKwordm9pZCBSeFRpbWVySGFuZGxlcl8xYSggUEFEQVBURVIgQWRhcHRlcikKK3sKKwlSeFRpbWVySGFuZGxlcihOVUxMLCBBZGFwdGVyLCBOVUxMLCBOVUxMKTsKK30KKwordm9pZCBSeFRpbWVySGFuZGxlcih2b2lkKiBTeXN0ZW1TcGVjaWZpYzEsIFBXQjMyX0FEQVBURVIgQWRhcHRlciwKKwkJICAgIHZvaWQqIFN5c3RlbVNwZWNpZmljMiwgdm9pZCogU3lzdGVtU3BlY2lmaWMzKQoreworCVdBUk5fT04oMSk7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9zY2FuX3MuaCBiL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL3NjYW5fcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFkMWIwYzQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9zY2FuX3MuaApAQCAtMCwwICsxLDExNSBAQAorLy8KKy8vIFNDQU4gdGFzayBnbG9iYWwgQ09OU1RBTlRTLCBTVFJVQ1RVUkVTLCB2YXJpYWJsZXMKKy8vCisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvL2RlZmluZSB0aGUgbXNnIHR5cGUgb2YgU0NBTiBtb2R1bGUKKyNkZWZpbmUgU0NBTk1TR19TQ0FOX1JFUQkJCTB4MDEKKyNkZWZpbmUgU0NBTk1TR19CRUFDT04JCQkJMHgwMgorI2RlZmluZSBTQ0FOTVNHX1BST0JFX1JFU1BPTlNFCQkweDAzCisjZGVmaW5lIFNDQU5NU0dfVElNRU9VVAkJCQkweDA0CisjZGVmaW5lIFNDQU5NU0dfVFhQUk9CRV9GQUlMCQkweDA1CisjZGVmaW5lIFNDQU5NU0dfRU5BQkxFX0JHU0NBTgkJMHgwNgorI2RlZmluZSBTQ0FOTVNHX1NUT1BfU0NBTgkJCTB4MDcKKworLy8gQlNTIFR5cGUgPT5jb25mb3JtIHRvCisvLyBJQlNTICAgICAgICAgICAgIDogVG9EUy9Gcm9tRFMgPSAwMAorLy8gSW5mcmFzdHJ1Y3R1cmUgICA6IFRvRFMvRnJvbURTID0gMDEKKyNkZWZpbmUgSUJTU19ORVQJCQkwCisjZGVmaW5lIEVTU19ORVQJCQkJMQorI2RlZmluZSBBTllCU1NfTkVUCQkJMgorCisvLyBTY2FuIFR5cGUKKyNkZWZpbmUgQUNUSVZFX1NDQU4JCQkwCisjZGVmaW5lIFBBU1NJVkVfU0NBTgkJMQorCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vR2xvYmFsIGRhdGEgc3RydWN0dXJlcywgSW5pdGlhbCBTY2FuICYgQmFja2dyb3VuZCBTY2FuCit0eXBlZGVmIHN0cnVjdCBfU0NBTl9SRVFfUEFSQQkvL21hbmRhdG9yeSBwYXJhbWV0ZXJzIGZvciBTQ0FOIHJlcXVlc3QKK3sKKwl1MzIJCQkJU2NhblR5cGU7CQkJLy9wYXNzaXZlL2FjdGl2ZSBzY2FuCisKKwlDSEFOX0xJU1QJCXNDaGFubmVsTGlzdDsJLy8gODZCCisJdTgJCQlyZXNlcnZlZF8xWzJdOworCisJc3RydWN0IFNTSURfRWxlbWVudAlzU1NJRDsgLy8gMzRCLiBzY2FuIG9ubHkgZm9yIHRoaXMgU1NJRAorCXU4CQkJcmVzZXJ2ZWRfMlsyXTsKKworfSBTQ0FOX1JFUV9QQVJBLCAqcHNTQ0FOX1JFUV9QQVJBOworCit0eXBlZGVmIHN0cnVjdCBfU0NBTl9QQVJBTUVURVJTCit7CisJdTE2CQkJCXdTdGF0ZTsKKwl1MTYJCQkJaUN1cnJlbnRDaGFubmVsSW5kZXg7CisKKwlTQ0FOX1JFUV9QQVJBCXNTY2FuUmVxOworCisJdTgJCQkJQlNTSURbTUFDX0FERFJfTEVOR1RIICsgMl07CQkvL3NjYW4gb25seSBmb3IgdGhpcyBCU1NJRAorCisJdTMyCQkJCUJzc1R5cGU7CQkJCQkJLy9zY2FuIG9ubHkgZm9yIHRoaXMgQlNTIHR5cGUKKworCS8vc3RydWN0IFNTSURfRWxlbWVudAlzU1NJRDsJCQkJCQkvL3NjYW4gb25seSBmb3IgdGhpcyBTU0lECisJdTE2CQkJCVByb2JlRGVsYXk7CisJdTE2CQkJCU1pbkNoYW5uZWxUaW1lOworCisJdTE2CQkJCU1heENoYW5uZWxUaW1lOworCXUxNgkJCQlyZXNlcnZlZF8xOworCisgICAgczMyCQkJCWlCZ1NjYW5QZXJpb2Q7CQkJCS8vIFhQOiA1IHNlYworCisgICAgdTgJCQkJYm9CZ1NjYW47CQkJCQkvLyBXYjogZW5hYmxlIEJHIHNjYW4sIEZvciBYUCwgdGhpcyB2YWx1ZSBtdXN0IGJlIEZBTFNFCisgICAgdTgJCQkJYm9GYXN0U2NhbjsJCQkJCS8vIFdiOiByZXNlcnZlZAorCXU4CQkJCWJvQ0NBYnVzeTsJCQkJCS8vIFdiOiBIV01BQyBDQ0EgYnVzeSBzdGF0dXMKKwl1OAkJCQlyZXNlcnZlZF8yOworCisJLy9ORElTX01JTklQT1JUX1RJTUVSCW5UaW1lcjsKKwlPU19USU1FUgkJCW5UaW1lcjsKKworCXUzMgkJCQlTY2FuVGltZVN0YW1wOwkJCS8vSW5jcmVhc2UgMSBwZXIgYmFja2dyb3VuZCBzY2FuKDEgbWludXRlKQorCXUzMgkJCQlCc3NUaW1lU3RhbXA7CQkJLy9JbmNyZWFzZSAxIHBlciBjb25uZWN0IHN0YXR1cyBjaGVjaworCXUzMgkJCQlSeE51bVBlckFudGVubmFbMl07CQkvLworCisJdTgJCQkJQW50ZW5uYVRvZ2dsZTsJCQkvLworCXU4CQkJCWJvSW5UaW1lckhhbmRsZXI7CisJdTggCQkJCWJvVGltZXJBY3RpdmU7CQkJCS8vIFdiOiByZXNlcnZlZAorCXU4CQkJCWJvU2F2ZTsKKworCXUzMgkJCQlCU2NhbkVuYWJsZTsgLy8gQmFja2dyb3VuZCBzY2FuIGVuYWJsZS4gRGVmYXVsdCBpcyBPbgorCit9IFNDQU5fUEFSQU1FVEVSUywgKnBzU0NBTl9QQVJBTUVURVJTOworCisvLyBFbmNhcHN1bGF0ZSAnQWRhcHRlcicgZGF0YSBzdHJ1Y3R1cmUKKyNkZWZpbmUgcHNTQ0FOCQkJKCYoQWRhcHRlci0+c1NjYW5QYXJhKSkKKyNkZWZpbmUgcHNTQ0FOUkVRCQkJKCYoQWRhcHRlci0+c1NjYW5QYXJhLnNTY2FuUmVxKSkKKworLy8rKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKworLy8Jc2Nhbi5oCisvLwkJRGVmaW5lIHRoZSByZWxhdGVkIGRlZmluaXRpb25zIG9mIHNjYW4gbW9kdWxlCisvLwloaXN0b3J5IC0tIDAxLzE0LzAzJyBjcmVhdGVkCisvLworLy8rKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKworCisvL0RlZmluZSB0aGUgc3RhdGUgb2Ygc2NhbiBtb2R1bGUKKyNkZWZpbmUgU0NBTl9JTkFDVElWRQkJCQkJCTAKKyNkZWZpbmUgV0FJVF9QUk9CRV9ERUxBWQkJCQkJMQorI2RlZmluZSBXQUlUX1JFU1BPTlNFX01JTgkJCQkJMgorI2RlZmluZSBXQUlUX1JFU1BPTlNFX01BWF9BQ1RJVkUJCQkzCisjZGVmaW5lIFdBSVRfQkVBQ09OX01BWF9QQVNTSVZFCQkJCTQKKyNkZWZpbmUgU0NBTl9DT01QTEVURQkJCQkJCTUKKyNkZWZpbmUgQkdfU0NBTgkJCQkJCQkJNgorI2RlZmluZSBCR19TQ0FOTklORwkJCQkJCQk3CisKKworLy8gVGhlIHZhbHVlIHdpbGwgbG9hZCBmcm9tIEVFUFJPTQorLy8gSWYgMHhmZiBpcyBzZXQgaW4gRUVQT00sIHRoZSBkcml2ZXIgd2lsbCB1c2UgU0NBTl9NQVhfQ0hOTF9USU1FIGluc3RlYWQuCisvLyBUaGUgZGVmaW5pdGlvbiBpcyBpbiBXYkhhbC5oCisvLwkjZGVmaW5lIFNDQU5fTUFYX0NITkxfVElNRQkJCQkoNTApCisKKworCisvLyBzdGF0aWMgZnVuY3Rpb25zCisKKy8vc3RhdGljIHZvaWQgU2NhblRpbWVySGFuZGxlcihQV0IzMl9BREFQVEVSIEFkYXB0ZXIpOworLy9zdGF0aWMgdm9pZCB2U2NhblRpbWVyU3RhcnQoUFdCMzJfQURBUFRFUglBZGFwdGVyLCBpbnQgdGltZW91dF92YWx1ZSk7CisvL3N0YXRpYyB2b2lkIHZTY2FuVGltZXJTdG9wKFBXQjMyX0FEQVBURVIgQWRhcHRlcik7CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL3NtZV9hcGkuYyBiL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL3NtZV9hcGkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MGU5M2I3Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvc21lX2FwaS5jCkBAIC0wLDAgKzEsMTMgQEAKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBzbWVfYXBpLmMKKy8vCisvLyBDb3B5cmlnaHQoQykgMjAwMiBXaW5ib25kIEVsZWN0cm9uaWNzIENvcnAuCisvLworLy8KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjaW5jbHVkZSAib3NfY29tbW9uLmgiCisKK3M4IHNtZV9nZXRfcnNzaSh2b2lkICpwY29yZV9kYXRhLCBzMzIgKnByc3NpKQoreworICAgICAgIEJVRygpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvc21lX2FwaS5oIGIvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvc21lX2FwaS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAxNmIyMjUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9zbWVfYXBpLmgKQEAgLTAsMCArMSwyNjUgQEAKKy8qCisgKiBzbWVfYXBpLmgKKyAqCisgKiBDb3B5cmlnaHQoQykgMjAwMiBXaW5ib25kIEVsZWN0cm9uaWNzIENvcnAuCisgKgorICogbW9kaWZpY2F0aW9uIGhpc3RvcnkKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogMS4wMC4wMDEsIDIwMDMtMDQtMjEsIEtldmluICAgICAgIGNyZWF0ZWQKKyAqIDEuMDAuMDAyLCAyMDAzLTA1LTE0LCBQRDQzICYgUEUyMCBtb2RpZmllZAorICoKKyAqLworCisjaWZuZGVmIF9fU01FX0FQSV9IX18KKyNkZWZpbmUgX19TTUVfQVBJX0hfXworCisvKioqKioqKioqKioqKioqKioqIElOQ0xVREUgRklMRVMgU0VDVElPTiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8vI2luY2x1ZGUgIkdMXGdsX2NvcmUuaCIKKworLyoqKioqKioqKioqKioqKioqKiBDT05TVEFOVCBBTkQgTUFDUk8gU0VDVElPTiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjZGVmaW5lIF9JTkxJTkUgICAgICBfX2lubGluZQorCisjZGVmaW5lIE1FRElBX1NUQVRFX0RJU0NPTk5FQ1RFRCAgICAwCisjZGVmaW5lIE1FRElBX1NUQVRFX0NPTk5FQ1RFRCAgICAgICAxCisKKy8vQVJSQVkgQ0hFQ0sKKyNkZWZpbmUgTUFYX1BPV0VSX1RPX0RCIDMyCisKKy8qKioqKioqKioqKioqKioqKiogVFlQRSBERUZJTklUSU9OIFNFQ1RJT04gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqIEVYUE9SVEVEIEZVTkNUSU9OIERFQ0xBUkFUSU9OIFNFQ1RJT04gKioqKioqKioqKioqKioqKioqKi8KKworLy8gT0lEXzgwMl8xMV9CU1NJRAorczggc21lX2dldF9ic3NpZCh2b2lkICpwY29yZV9kYXRhLCB1OCAqcGJzc2lkKTsKK3M4IHNtZV9nZXRfZGVzaXJlZF9ic3NpZCh2b2lkICpwY29yZV9kYXRhLCB1OCAqcGJzc2lkKTsvL05vdCB1c2UKK3M4IHNtZV9zZXRfZGVzaXJlZF9ic3NpZCh2b2lkICpwY29yZV9kYXRhLCB1OCAqcGJzc2lkKTsKKworLy8gT0lEXzgwMl8xMV9TU0lECitzOCBzbWVfZ2V0X3NzaWQodm9pZCAqcGNvcmVfZGF0YSwgdTggKnBzc2lkLCB1OCAqcHNzaWRfbGVuKTsKK3M4IHNtZV9nZXRfZGVzaXJlZF9zc2lkKHZvaWQgKnBjb3JlX2RhdGEsIHU4ICpwc3NpZCwgdTggKnBzc2lkX2xlbik7Ly8gTm90IHVzZQorczggc21lX3NldF9kZXNpcmVkX3NzaWQodm9pZCAqcGNvcmVfZGF0YSwgdTggKnBzc2lkLCB1OCBzc2lkX2xlbik7CisKKy8vIE9JRF84MDJfMTFfSU5GUkFTVFJVQ1RVUkVfTU9ERQorczggc21lX2dldF9ic3NfdHlwZSh2b2lkICpwY29yZV9kYXRhLCB1OCAqcGJzc190eXBlKTsKK3M4IHNtZV9nZXRfZGVzaXJlZF9ic3NfdHlwZSh2b2lkICpwY29yZV9kYXRhLCB1OCAqcGJzc190eXBlKTsvL05vdCB1c2UKK3M4IHNtZV9zZXRfZGVzaXJlZF9ic3NfdHlwZSh2b2lkICpwY29yZV9kYXRhLCB1OCBic3NfdHlwZSk7CisKKy8vIE9JRF84MDJfMTFfRlJBR01FTlRBVElPTl9USFJFU0hPTEQKK3M4IHNtZV9nZXRfZnJhZ21lbnRfdGhyZXNob2xkKHZvaWQgKnBjb3JlX2RhdGEsIHUzMiAqcHRocmVzaG9sZCk7CitzOCBzbWVfc2V0X2ZyYWdtZW50X3RocmVzaG9sZCh2b2lkICpwY29yZV9kYXRhLCB1MzIgdGhyZXNob2xkKTsKKworLy8gT0lEXzgwMl8xMV9SVFNfVEhSRVNIT0xECitzOCBzbWVfZ2V0X3J0c190aHJlc2hvbGQodm9pZCAqcGNvcmVfZGF0YSwgdTMyICpwdGhyZXNob2xkKTsKK3M4IHNtZV9zZXRfcnRzX3RocmVzaG9sZCh2b2lkICpwY29yZV9kYXRhLCB1MzIgdGhyZXNob2xkKTsKKworLy8gT0lEXzgwMl8xMV9SU1NJCitzOCBzbWVfZ2V0X3Jzc2kodm9pZCAqcGNvcmVfZGF0YSwgczMyICpwcnNzaSk7CisKKy8vIE9JRF84MDJfMTFfQ09ORklHVVJBVElPTgorczggc21lX2dldF9iZWFjb25fcGVyaW9kKHZvaWQgKnBjb3JlX2RhdGEsIHUxNiAqcGJlYWNvbl9wZXJpb2QpOworczggc21lX3NldF9iZWFjb25fcGVyaW9kKHZvaWQgKnBjb3JlX2RhdGEsIHUxNiBiZWFjb25fcGVyaW9kKTsKKworczggc21lX2dldF9hdGltX3dpbmRvdyh2b2lkICpwY29yZV9kYXRhLCB1MTYgKnBhdGltX3dpbmRvdyk7CitzOCBzbWVfc2V0X2F0aW1fd2luZG93KHZvaWQgKnBjb3JlX2RhdGEsIHUxNiBhdGltX3dpbmRvdyk7CisKK3M4IHNtZV9nZXRfY3VycmVudF9jaGFubmVsKHZvaWQgKnBjb3JlX2RhdGEsIHU4ICpwY3VycmVudF9jaGFubmVsKTsKK3M4IHNtZV9nZXRfY3VycmVudF9iYW5kKHZvaWQgKnBjb3JlX2RhdGEsIHU4ICpwY3VycmVudF9iYW5kKTsKK3M4IHNtZV9zZXRfY3VycmVudF9jaGFubmVsKHZvaWQgKnBjb3JlX2RhdGEsIHU4IGN1cnJlbnRfY2hhbm5lbCk7CisKKy8vIE9JRF84MDJfMTFfQlNTSURfTElTVAorczggc21lX2dldF9zY2FuX2Jzc19jb3VudCh2b2lkICpwY29yZV9kYXRhLCB1OCAqcGNvdW50KTsKK3M4IHNtZV9nZXRfc2Nhbl9ic3Modm9pZCAqcGNvcmVfZGF0YSwgdTggaW5kZXgsIHZvaWQgKipwcGJzcyk7CisKK3M4IHNtZV9nZXRfY29ubmVjdGVkX2Jzcyh2b2lkICpwY29yZV9kYXRhLCB2b2lkICoqcHBic3Nfbm93KTsKKworLy8gT0lEXzgwMl8xMV9BVVRIRU5USUNBVElPTl9NT0RFCitzOCBzbWVfZ2V0X2F1dGhfbW9kZSh2b2lkICpwY29yZV9kYXRhLCB1OCAqcGF1dGhfbW9kZSk7CitzOCBzbWVfc2V0X2F1dGhfbW9kZSh2b2lkICpwY29yZV9kYXRhLCB1OCBhdXRoX21vZGUpOworCisvLyBPSURfODAyXzExX1dFUF9TVEFUVVMgLyBPSURfODAyXzExX0VOQ1JZUFRJT05fU1RBVFVTCitzOCBzbWVfZ2V0X3dlcF9tb2RlKHZvaWQgKnBjb3JlX2RhdGEsIHU4ICpwd2VwX21vZGUpOworczggc21lX3NldF93ZXBfbW9kZSh2b2lkICpwY29yZV9kYXRhLCB1OCB3ZXBfbW9kZSk7CisvL3M4IHNtZV9nZXRfZW5jcnlwdGlvbl9zdGF0dXModm9pZCAqcGNvcmVfZGF0YSwgdTggKnBzdGF0dXMpOworLy9zOCBzbWVfc2V0X2VuY3J5cHRpb25fc3RhdHVzKHZvaWQgKnBjb3JlX2RhdGEsIHU4IHN0YXR1cyk7CisKKy8vID8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/PworCisvLyBPSURfR0VOX1ZFTkRPUl9JRAorLy8gT0lEXzgwMl8zX1BFUk1BTkVOVF9BRERSRVNTCitzOCBzbWVfZ2V0X3Blcm1hbmVudF9tYWNfYWRkcih2b2lkICpwY29yZV9kYXRhLCB1OCAqcG1hY19hZGRyKTsKKworLy8gT0lEXzgwMl8zX0NVUlJFTlRfQUREUkVTUworczggc21lX2dldF9jdXJyZW50X21hY19hZGRyKHZvaWQgKnBjb3JlX2RhdGEsIHU4ICpwbWFjX2FkZHIpOworCisvLyBPSURfODAyXzExX05FVFdPUktfVFlQRV9JTl9VU0UKK3M4IHNtZV9nZXRfbmV0d29ya190eXBlX2luX3VzZSh2b2lkICpwY29yZV9kYXRhLCB1OCAqcHR5cGUpOworczggc21lX3NldF9uZXR3b3JrX3R5cGVfaW5fdXNlKHZvaWQgKnBjb3JlX2RhdGEsIHU4IHR5cGUpOworCisvLyBPSURfODAyXzExX1NVUFBPUlRFRF9SQVRFUworczggc21lX2dldF9zdXBwb3J0ZWRfcmF0ZSh2b2lkICpwY29yZV9kYXRhLCB1OCAqcHJhdGVzKTsKKworLy8gT0lEXzgwMl8xMV9BRERfV0VQCisvLzEyLzI5LzAzJyB3a2NoZW4KK3M4IHNtZV9zZXRfYWRkX3dlcCh2b2lkICpwY29yZV9kYXRhLCB1MzIga2V5X2luZGV4LCB1MzIga2V5X2xlbiwKKwkJCQkJIHU4ICpBZGRyZXNzLCB1OCAqa2V5KTsKKworLy8gT0lEXzgwMl8xMV9SRU1PVkVfV0VQCitzOCBzbWVfc2V0X3JlbW92ZV93ZXAodm9pZCAqcGNyZV9kYXRhLCB1MzIga2V5X2luZGV4KTsKKworLy8gT0lEXzgwMl8xMV9ESVNBU1NPQ0lBVEUKK3M4IHNtZV9zZXRfZGlzYXNzb2NpYXRlKHZvaWQgKnBjb3JlX2RhdGEpOworCisvLyBPSURfODAyXzExX1BPV0VSX01PREUKK3M4IHNtZV9nZXRfcG93ZXJfbW9kZSh2b2lkICpwY29yZV9kYXRhLCB1OCAqcG1vZGUpOworczggc21lX3NldF9wb3dlcl9tb2RlKHZvaWQgKnBjb3JlX2RhdGEsIHU4IG1vZGUpOworCisvLyBPSURfODAyXzExX0JTU0lEX0xJU1RfU0NBTgorczggc21lX3NldF9ic3NpZF9saXN0X3NjYW4odm9pZCAqcGNvcmVfZGF0YSwgdm9pZCAqcHNjYW5fcGFyYSk7CisKKy8vIE9JRF84MDJfMTFfUkVMT0FEX0RFRkFVTFRTCitzOCBzbWVfc2V0X3JlbG9hZF9kZWZhdWx0cyh2b2lkICpwY29yZV9kYXRhLCB1OCByZWxvYWRfdHlwZSk7CisKKworLy8gVGhlIGZvbGxvd2luZyBTTUUgQVBJIGZ1bmN0aW9ucyBhcmUgdXNlZCBmb3IgV1BBCisvLworLy8gTWFuZGF0b3J5IE9JRHMgZm9yIFdQQQorLy8KKworLy8gT0lEXzgwMl8xMV9BRERfS0VZCisvL3M4IHNtZV9zZXRfYWRkX2tleSh2b2lkICpwY29yZV9kYXRhLCBORElTXzgwMl8xMV9LRVkgKnBrZXkpOworCisvLyBPSURfODAyXzExX1JFTU9WRV9LRVkKKy8vczggc21lX3NldF9yZW1vdmVfa2V5KHZvaWQgKnBjb3JlX2RhdGEsIE5ESVNfODAyXzExX1JFTU9WRV9LRVkgKnBrZXkpOworCisvLyBPSURfODAyXzExX0FTU09DSUFUSU9OX0lORk9STUFUSU9OCisvL3M4IHNtZV9zZXRfYXNzb2NpYXRpb25faW5mb3JtYXRpb24odm9pZCAqcGNvcmVfZGF0YSwKKy8vICAgICAgICAgICAgICAgICAgICBORElTXzgwMl8xMV9BU1NPQ0lBVElPTl9JTkZPUk1BVElPTiAqcGluZm8pOworCisvLyBPSURfODAyXzExX1RFU1QKKy8vczggc21lX3NldF90ZXN0KHZvaWQgKnBjb3JlX2RhdGEsIE5ESVNfODAyXzExX1RFU1QgKnB0ZXN0X2RhdGEpOworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLy8KKy8qCisvLyBUaGUgbGVmdCBPSURzCisKKy8vIE9JRF84MDJfMTFfTkVUV09SS19UWVBFU19TVVBQT1JURUQKKy8vIE9JRF84MDJfMTFfVFhfUE9XRVJfTEVWRUwKKy8vIE9JRF84MDJfMTFfUlNTSV9UUklHR0VSCisvLyBPSURfODAyXzExX05VTUJFUl9PRl9BTlRFTk5BUworLy8gT0lEXzgwMl8xMV9SWF9BTlRFTk5BX1NFTEVDVEVECisvLyBPSURfODAyXzExX1RYX0FOVEVOTkFfU0VMRUNURUQKKy8vIE9JRF84MDJfMTFfU1RBVElTVElDUworLy8gT0lEXzgwMl8xMV9ERVNJUkVEX1JBVEVTCisvLyBPSURfODAyXzExX1BSSVZBQ1lfRklMVEVSCisKKyovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBub25lLXN0YW5kYXJkIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworczggc21lX2dldF9jb25uZWN0X3N0YXR1cyh2b2lkICpwY29yZV9kYXRhLCB1OCAqcHN0YXR1cyk7CisKKy8qKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysqLworLy9zOCBzbWVfZ2V0X3NjYW5fdHlwZSh2b2lkICpwY29yZV9kYXRhLCB1OCAqcHNjYW5fdHlwZSk7CisvL3M4IHNtZV9zZXRfc2Nhbl90eXBlKHZvaWQgKnBjb3JlX2RhdGEsIHU4IHNjYW5fdHlwZSk7CisKKy8vczggc21lX2dldF9zY2FuX2NoYW5uZWxfbGlzdCh2b2lkICpwY29yZV9kYXRhLCB1OCAqcHNjYW5fdHlwZSk7CisvL3M4IHNtZV9zZXRfc2Nhbl9jaGFubmVsX2xpc3Qodm9pZCAqcGNvcmVfZGF0YSwgdTggc2Nhbl90eXBlKTsKKworCit2b2lkIHNtZV9nZXRfZW5jcnlwdGlvbl9zdGF0dXModm9pZCAqcGNvcmVfZGF0YSwgdTggKkVuY3J5cHRTdGF0dXMpOwordm9pZCBzbWVfc2V0X2VuY3J5cHRpb25fc3RhdHVzKHZvaWQgKnBjb3JlX2RhdGEsIHU4IEVuY3J5cHRTdGF0dXMpOworczggc21lX2FkZF9rZXkodm9pZAkJKnBjb3JlX2RhdGEsCisJCQkJCXUzMgkJa2V5X2luZGV4LAorCQkJCQl1OAkJa2V5X2xlbiwKKwkJCQkJdTgJCWtleV90eXBlLAorCQkJCQl1OAkJKmtleV9ic3NpZCwKKwkJCQkJLy91OAkJKmtleV9yc2MsCisJCQkJCXU4CQkqcHR4X3RzYywKKwkJCQkJdTgJCSpwcnhfdHNjLAorCQkJCQl1OAkJKmtleV9tYXRlcmlhbCk7Cit2b2lkIHNtZV9yZW1vdmVfZGVmYXVsdF9rZXkodm9pZCAqcGNvcmVfZGF0YSwgaW50IGluZGV4KTsKK3ZvaWQgc21lX3JlbW92ZV9tYXBwaW5nX2tleSh2b2lkICpwY29yZV9kYXRhLCB1OCAqcG1hY19hZGRyKTsKK3ZvaWQgc21lX2NsZWFyX2FsbF9tYXBwaW5nX2tleSh2b2lkICpwY29yZV9kYXRhKTsKK3ZvaWQgc21lX2NsZWFyX2FsbF9kZWZhdWx0X2tleSh2b2lkICpwY29yZV9kYXRhKTsKKworCisKK3M4IHNtZV9zZXRfcHJlYW1ibGVfbW9kZSh2b2lkICpwY29yZV9kYXRhLCB1OCBtb2RlKTsKK3M4IHNtZV9nZXRfcHJlYW1ibGVfbW9kZSh2b2lkICpwY29yZV9kYXRhLCB1OCAqbW9kZSk7CitzOCBzbWVfZ2V0X3ByZWFtYmxlX3R5cGUodm9pZCAqcGNvcmVfZGF0YSwgdTggKnR5cGUpOworczggc21lX3NldF9zbG90dGltZV9tb2RlKHZvaWQgKnBjb3JlX2RhdGEsIHU4IG1vZGUpOworczggc21lX2dldF9zbG90dGltZV9tb2RlKHZvaWQgKnBjb3JlX2RhdGEsIHU4ICptb2RlKTsKK3M4IHNtZV9nZXRfc2xvdHRpbWVfdHlwZSh2b2lkICpwY29yZV9kYXRhLCB1OCAqdHlwZSk7CitzOCBzbWVfc2V0X3R4cmF0ZV9wb2xpY3kodm9pZCAqcGNvcmVfZGF0YSwgdTggcG9saWN5KTsKK3M4IHNtZV9nZXRfdHhyYXRlX3BvbGljeSh2b2lkICpwY29yZV9kYXRhLCB1OCAqcG9saWN5KTsKK3M4IHNtZV9nZXRfY3dtaW5fdmFsdWUodm9pZCAqcGNvcmVfZGF0YSwgdTggKmN3bWluKTsKK3M4IHNtZV9nZXRfY3dtYXhfdmFsdWUodm9pZCAqcGNvcmVfZGF0YSwgdTE2ICpjd21heCk7CitzOCBzbWVfZ2V0X21zX3JhZGlvX21vZGUodm9pZCAqcGNvcmVfZGF0YSwgdTggKiBwTXNSYWRpb09mZik7CitzOCBzbWVfc2V0X21zX3JhZGlvX21vZGUodm9pZCAqcGNvcmVfZGF0YSwgdTggYm9Nc1JhZGlvT2ZmKTsKK3M4IHNtZV9nZXRfcmFkaW9fbW9kZSh2b2lkICpwY29yZV9kYXRhLCBwc1JhZGlvT2ZmIHBSYWRpb09mZkRhdGEpOworczggc21lX3NldF9yYWRpb19tb2RlKHZvaWQgKnBjb3JlX2RhdGEsIFJhZGlvT2ZmIFJhZGlvT2ZmRGF0YSk7CisKK3ZvaWQgc21lX2dldF90eF9wb3dlcl9sZXZlbCh2b2lkICpwY29yZV9kYXRhLCB1MzIgKlR4UG93ZXIpOwordTggc21lX3NldF90eF9wb3dlcl9sZXZlbCh2b2lkICpwY29yZV9kYXRhLCB1MzIgVHhQb3dlcik7Cit2b2lkIHNtZV9nZXRfYW50ZW5uYV9jb3VudCh2b2lkICpwY29yZV9kYXRhLCB1MzIgKkFudGVubmFDb3VudCk7Cit2b2lkIHNtZV9nZXRfcnhfYW50ZW5uYSh2b2lkICpwY29yZV9kYXRhLCB1MzIgKlJ4QW50ZW5uYSk7Cit1OCBzbWVfc2V0X3J4X2FudGVubmEodm9pZCAqcGNvcmVfZGF0YSwgdTMyIFJ4QW50ZW5uYSk7Cit2b2lkIHNtZV9nZXRfdHhfYW50ZW5uYSh2b2lkICpwY29yZV9kYXRhLCB1MzIgKlR4QW50ZW5uYSk7CitzOCBzbWVfc2V0X3R4X2FudGVubmEodm9pZCAqcGNvcmVfZGF0YSwgdTMyIFR4QW50ZW5uYSk7CitzOCBzbWVfc2V0X0lCU1NfY2hhbih2b2lkICpwY29yZV9kYXRhLCBDaGFuSW5mbyBjaGFuKTsKKworLy8yMDA2MTEwOCBXUFMKK3M4IHNtZV9zZXRfSUVfYXBwZW5kKHZvaWQgKnBjb3JlX2RhdGEsIFBVQ0hBUiBidWZmZXIsIHUxNiBidWZfbGVuKTsKKworCisKKworLy89PT09PT09PT09PT09PT09PT0gTG9jYWwgZnVuY3Rpb25zID09PT09PT09PT09PT09PT09PT09PT0KKy8vI2lmZGVmIF9IU0lOQ0hVCisvL3ZvaWQgZHJ2X3RyYW5zbGF0ZV9yc3NpKCk7ICAgLy8gSFcgUlNTSSBiaXQgLT4gTkRJUyBSU1NJIHJlcHJlc2VudGF0aW9uCisvL3ZvaWQgZHJ2X3RyYW5zbGF0ZV9ic3NfZGVzY3JpcHRpb24oKTsgLy8gTG9jYWwgYnNzIGRlc2MgLT4gTkRJUyBic3MgZGVzYworLy92b2lkIGRydl90cmFuc2xhdGVfY2hhbm5lbCh1OCBOZXR3b3JrVHlwZSwgdTggQ2hhbm5lbE51bWJlciwgdTMyICpmcmVxKTsgLy8gY2hhbm5lbCBudW1iZXIgLT4gY2hhbm5lbCAvZnJlcS4KKy8vI2VuZGlmIF9IU0lOQ0hVCisvLworc3RhdGljIGNvbnN0IHUzMiBQb3dlckRiVG9Nd1tdID0KK3sKKwk1NiwJLy9tVywgTUFYIC0gMCwJMTcuNSBkYm0KKwk0MCwJLy9tVywgTUFYIC0gMSwJMTYuMCBkYm0KKwkzMCwJLy9tVywgTUFYIC0gMiwJMTQuOCBkYm0KKwkyMCwJLy9tVywgTUFYIC0gMywJMTMuMCBkYm0KKwkxNSwJLy9tVywgTUFYIC0gNCwJMTEuOCBkYm0KKwkxMiwJLy9tVywgTUFYIC0gNSwJMTAuNiBkYm0KKwk5LAkvL21XLCBNQVggLSA2LAkgOS40IGRibQorCTcsCS8vbVcsIE1BWCAtIDcsCSA4LjMgZGJtCisJNSwJLy9tVywgTUFYIC0gOCwJIDYuNCBkYm0KKwk0LAkvL21XLCBNQVggLSA5LAkgNS4zIGRibQorCTMsCS8vbVcsIE1BWCAtIDEwLCAgNC4wIGRibQorCTIsCS8vbVcsIE1BWCAtIDExLCAgPyBkYm0KKwkyLAkvL21XLCBNQVggLSAxMiwgID8gZGJtCisJMiwJLy9tVywgTUFYIC0gMTMsICA/IGRibQorCTIsCS8vbVcsIE1BWCAtIDE0LCAgPyBkYm0KKwkyLAkvL21XLCBNQVggLSAxNSwgID8gZGJtCisJMiwJLy9tVywgTUFYIC0gMTYsICA/IGRibQorCTIsCS8vbVcsIE1BWCAtIDE3LCAgPyBkYm0KKwkyLAkvL21XLCBNQVggLSAxOCwgID8gZGJtCisJMSwJLy9tVywgTUFYIC0gMTksICA/IGRibQorCTEsCS8vbVcsIE1BWCAtIDIwLCAgPyBkYm0KKwkxLAkvL21XLCBNQVggLSAyMSwgID8gZGJtCisJMSwJLy9tVywgTUFYIC0gMjIsICA/IGRibQorCTEsCS8vbVcsIE1BWCAtIDIzLCAgPyBkYm0KKwkxLAkvL21XLCBNQVggLSAyNCwgID8gZGJtCisJMSwJLy9tVywgTUFYIC0gMjUsICA/IGRibQorCTEsCS8vbVcsIE1BWCAtIDI2LCAgPyBkYm0KKwkxLAkvL21XLCBNQVggLSAyNywgID8gZGJtCisJMSwJLy9tVywgTUFYIC0gMjgsICA/IGRibQorCTEsCS8vbVcsIE1BWCAtIDI5LCAgPyBkYm0KKwkxLAkvL21XLCBNQVggLSAzMCwgID8gZGJtCisJMQkvL21XLCBNQVggLSAzMSwgID8gZGJtCit9OworCisKKworCisKKyNlbmRpZiAvKiBfX1NNRV9BUElfSF9fICovCisKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvc21lX3MuaCBiL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL3NtZV9zLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGZkMmZiYwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL3NtZV9zLmgKQEAgLTAsMCArMSwyMjggQEAKKy8vCisvLyBTTUVfUy5IIC0KKy8vIFNNRSB0YXNrIGdsb2JhbCBDT05TVEFOVFMsIFNUUlVDVFVSRVMsIHZhcmlhYmxlcworLy8KKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vZGVmaW5lIHRoZSBtc2cgdHlwZSBvZiBTTUUgbW9kdWxlCisvLyAweDAwfjB4MUYgOiBNU0cgZnJvbSBHVUkgZGlzcGF0Y2gKKy8vIDB4MjB+MHgzRiA6IE1TRyBmcm9tIE1MTUUKKy8vIDB4NDB+MHg1RiA6IE1TRyBmcm9tIFNDQU4KKy8vIDB4NjB+MHg2RiA6IE1TRyBmcm9tIFRYL1JYCisvLyAweDcwfjB4N0YgOiBNU0cgZnJvbSBST0FNSU5HCisvLyAweDgwfjB4OEYgOiBNU0cgZnJvbSBJU1IKKy8vIDB4OTAJCSA6IE1TRyBUaW1lT3V0CisKKy8vIGZyb20gR1VJCisjZGVmaW5lIFNNRU1TR19TQ0FOX1JFUQkJCQkJMHgwMQorLy8jZGVmaW5lIFNNRU1TR19QQVNTSVZFX1NDQU5fUkVRCQkJMHgwMgorI2RlZmluZSBTTUVNU0dfSk9JTl9SRVEJCQkJCTB4MDMKKyNkZWZpbmUgU01FTVNHX1NUQVJUX0lCU1MJCQkJMHgwNAorI2RlZmluZSBTTUVNU0dfRElTQ09OTkVDVF9SRVEJCQkweDA1CisjZGVmaW5lIFNNRU1TR19BVVRIRU5fUkVRCQkJCTB4MDYKKyNkZWZpbmUgU01FTVNHX0RFQVVUSEVOX1JFUQkJCQkweDA3CisjZGVmaW5lIFNNRU1TR19BU1NPQ19SRVEJCQkJMHgwOAorI2RlZmluZSBTTUVNU0dfUkVBU1NPQ19SRVEJCQkJMHgwOQorI2RlZmluZSBTTUVNU0dfRElTQVNTT0NfUkVRCQkJCTB4MGEKKyNkZWZpbmUgU01FTVNHX1BPV0VSU0FWRV9SRVEJCQkweDBiCisKKworLy8gZnJvbSBNTE1FCisjZGVmaW5lIFNNRU1TR19BVVRIRU5fQ0ZNCQkJCTB4MjEKKyNkZWZpbmUgU01FTVNHX0FVVEhFTl9JTkQJCQkJMHgyMgorI2RlZmluZSBTTUVNU0dfQVNTT0NfQ0ZNCQkJCTB4MjMKKyNkZWZpbmUgU01FTVNHX0RFQVVUSEVOX0lORAkJCQkweDI0CisjZGVmaW5lIFNNRU1TR19ESVNBU1NPQ19JTkQJCQkJMHgyNQorLy8gZnJvbSBTQ0FOCisjZGVmaW5lIFNNRU1TR19TQ0FOX0NGTQkJCQkJMHg0MQorI2RlZmluZSBTTUVNU0dfU1RBUlRfSUJTU19DRk0JCQkweDQyCisvLyBmcm9tIE1UTywgZnVuY3Rpb24gY2FsbCB0byBzZXQgU01FIHBhcmFtZXRlcnMKKworLy8gMHg2MH4weDZGIDogTVNHIGZyb20gVFgvUlgKKy8vI2RlZmluZSBTTUVNU0dfSUJTU19KT0lOX1VQREFURV9CU1NJRAkweDYxCisjZGVmaW5lIFNNRU1TR19DT1VOVEVSTUVBU1VSRV9NSUNGQUlMX1RJTUVPVVQJCTB4NjIKKyNkZWZpbmUgU01FTVNHX0NPVU5URVJNRUFTVVJFX0JMT0NLX1RJTUVPVVQJMHg2MworLy8gZnJvbSBST0FNSU5HCisjZGVmaW5lIFNNRU1TR19IQU5ET1ZFUl9KT0lOX1JFUQkJMHg3MQorI2RlZmluZSBTTUVNU0dfRU5EX1JPQU1JTkcJCQkJMHg3MgorI2RlZmluZSBTTUVNU0dfU0NBTl9KT0lOX1JFUQkJCTB4NzMKKy8vIGZyb20gSVNSCisjZGVmaW5lIFNNRU1TR19UU0ZfU1lOQ19JTkQJCQkJMHg4MQorLy8gZnJvbSBUaW1lT3V0CisjZGVmaW5lIFNNRU1TR19USU1FT1VUCQkJCQkweDkxCisKKworCisjZGVmaW5lIE1BWF9QTUtJRF9BY2N1bnQgICAgICAgICAgICAgICAgMTYKKy8vQGFkZGVkIGJ5IHdzIDA0LzIyLzA1CisjZGVmaW5lIENpcGhlcl9EaXNhYmxlZCAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBDaXBoZXJfV2VwICAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgQ2lwaGVyX1RraXAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIENpcGhlcl9DY21wICAgICAgICAgICAgICAgICAgICAgNAorCisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy9Db25zdGFudHMKKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvL0dsb2JhbCBkYXRhIHN0cnVjdHVyZXMKKworI2RlZmluZSBOVU1PRldFUEVOVFJJRVMgICAgIDY0CisKK3R5cGVkZWYgZW51bSBfV0VQS2V5TW9kZQoreworICAgIFdFUEtFWV9ESVNBQkxFRCA9IDAsCisgICAgV0VQS0VZXzY0ICAgICAgID0gMSwKKyAgICBXRVBLRVlfMTI4ICAgICAgPSAyCisKK30gV0VQS0VZTU9ERSwgKnBXRVBLRVlNT0RFOworCisjaWZkZWYgX1dQQTJfCisKK3R5cGVkZWYgc3RydWN0IF9CU1NJbmZvCit7CisgIHU4ICAgICAgICBQcmVBdXRoQnNzSURbNl07CisgIFBNS0lEICAgICAgICBwbWtpZF92YWx1ZTsKK31CU1NJRF9JbmZvOworCit0eXBlZGVmIHN0cnVjdCBfUE1LSURfVGFibGUgLy9hZGRlZCBieSB3cyAwNS8wNS8wNAoreworICAgdTMyICBMZW5ndGg7CisgICB1MzIgIEJTU0lESW5mb0NvdW50OworICAgQlNTSURfSW5mbyBCU1NJREluZm9bMTZdOworCit9IFBNS0lEX1RhYmxlOworCisjZW5kaWYgLy9lbmQgZGVmIF9XUEEyXworCisjZGVmaW5lIE1BWF9CQVNJQ19SQVRFX1NFVCAgICAgICAgICAxNQorI2RlZmluZSBNQVhfT1BUX1JBVEVfU0VUICAgICAgICAgICAgTUFYX0JBU0lDX1JBVEVfU0VUCisKKwordHlwZWRlZiBzdHJ1Y3QgX1NNRV9QQVJBTUVURVJTCit7CisgICAgdTE2CQkJCXdTdGF0ZTsKKwl1OAkJCQlib0RVVG1vZGU7CisJdTgJCQkJYkRlc2lyZWRQb3dlclNhdmU7CisKKwkvLyBTTUUgdGltZXIgYW5kIHRpbWVvdXQgdmFsdWUKKwkvL05ESVNfTUlOSVBPUlRfVElNRVIJblRpbWVyOworCU9TX1RJTUVSCQkJblRpbWVyOworCisJdTgJCQkJYm9JblRpbWVySGFuZGxlcjsKKwl1OCAJCQkJYm9BdXRoUmV0cnlBY3RpdmU7CisJdTgJCQkJcmVzZXJ2ZWRfMFsyXTsKKworCXUzMgkJCQlBdXRoZW5SZXRyeVRpbWVyVmFsOwkvLyBOT1RFOiBBc3NvYyBkb24ndCBmYWlsIHRpbWVvdXQKKwl1MzIJCQkJSm9pbkZhaWxUaW1lclZhbDsJCS8vIDEwKkJlYWNvbi1JbnRlcnZhbAorCisJLy9SYXRlcworCXU4CQkJCUJTU0Jhc2ljUmF0ZVNldFsoTUFYX0JBU0lDX1JBVEVfU0VUICsgMykgJiB+MHgwMyBdOyAgICAvLyBCU1MgYmFzaWMgcmF0ZSBzZXQKKwl1OAkJCQlPcGVyYXRpb25hbFJhdGVTZXRbKE1BWF9PUFRfUkFURV9TRVQgKyAzKSAmIH4weDAzIF07IC8vIE9wZXJhdGlvbmFsIHJhdGUgc2V0CisKKwl1OAkJCQlOdW1PZkJTU0Jhc2ljUmF0ZTsKKwl1OAkJCQlOdW1PZk9wZXJhdGlvbmFsUmF0ZTsKKwl1OAkJCQlyZXNlcnZlZF8xWzJdOworCisJdTMyCQkJCUJhc2ljUmF0ZUJpdG1hcDsKKwl1MzIJCQkJT3BSYXRlQml0bWFwOworCisJLy8gU3lzdGVtIHBhcmFtZXRlcnMgU2V0IGJ5IEdVSQorCS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0gc3RhcnQgSUJTUyBwYXJhbWV0ZXIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLy8KKwl1MzIJCQkJYm9TdGFydElCU1M7CQkJLy9TdGFydCBJQlNTIHRvZ2dsZQorCisJdTE2CQkJCXdCZWFjb25QZXJpb2Q7CisJdTE2CQkJCXdBVElNX1dpbmRvdzsKKworCUNoYW5JbmZvCQkJSWJzc0NoYW47IC8vIDJCCS8vY2hhbm5lbCBzZXR0aW5nIHdoZW4gc3RhcnQgSUJTUworCXU4CQkJCXJlc2VydmVkXzJbMl07CisKKyAgICAvLyBKb2luIHJlbGF0ZWQKKwl1MTYJCQkJd0Rlc2lyZWRKb2luQlNTOwkJLy8gQlNTIGluZGV4IHdoaWNoIGRlc2lyZSB0byBqb2luCisJdTgJCQkJYm9Kb2luUmVxOwkJCQkvL0pvaW4gcmVxdWVzdCB0b2dnbGUKKwl1OAkJCQliRGVzaXJlZEJTU1R5cGU7CQkvL2ZvciBKb2luIHJlcXVlc3QKKworICAgIHUxNgkJCQl3Q2FwYWJpbGl0eUluZm87ICAgICAgICAvLyBVc2VkIHdoZW4gaW52b2tpbmcgdGhlIE1MTUVfQXNzb2NpYXRlX3JlcXVlc3QoKS4KKwl1MTYJCQkJd05vbkVSUGNhcGFiaWxpdHlJbmZvOworCisgICAgc3RydWN0IFNTSURfRWxlbWVudCBzRGVzaXJlZFNTSUQ7IC8vIDM0IEIKKwl1OAkJCQlyZXNlcnZlZF8zWzJdOworCisJdTggICAgCQkJYWJEZXNpcmVkQlNTSURbTUFDX0FERFJfTEVOR1RIICsgMl07CisKKwl1OAkJCQliSm9pblNjYW5Db3VudDsJCQkvLyB0aGUgdGltZSBvZiBzY2FuLWpvaW4gYWN0aW9uIG5lZWQgdG8gZG8KKwl1OAkJCQliRGVzaXJlZEF1dGhNb2RlOyAgICAgICAvLyBBVVRIX09QRU5fU1lTVEVNIG9yIEFVVEhfU0hBUkVEX0tFWQorCXU4CQkJCXJlc2VydmVkXzRbMl07CisKKyAgICAvLyBFbmNyeXB0aW9uIHBhcmFtZXRlcnMKKwl1OCAgICAgCQkJX2RvdDExUHJpdmFjeUludm9rZWQ7CisgICAgdTggICAgICAgICAgICAgCV9kb3QxMVByaXZhY3lPcHRpb25JbXBsZW1lbnRlZDsKKwl1OAkJCQlyZXNlcnZlZF81WzJdOworCisgICAgLy9AIHdzIGFkZGVkCisgICAgdTgJCQkJRGVzaXJlZEVuY3J5cHQ7CisJdTgJCQkJZW5jcnlwdF9zdGF0dXM7CS8vRU5DUllQVF9ESVNBQkxFLCBFTkNSWVBUX1dFUCwgRU5DUllQVF9XRVBfTk9LRVksIEVOQ1JZUFRfVEtJUCwgLi4uCisJdTgJCQkJa2V5X2xlbmd0aDsKKwl1OAkJCQlwYWlyd2lzZV9rZXlfb2s7CisKKwl1OAkJCQlncm91cF9rZXlfb2s7CisgICAgdTgJCQkJd3BhX29rOyAgICAgICAgICAgICAvLyBpbmRpY2F0ZSB0aGUgY29udHJvbCBwb3J0IG9mIDgwMi4xeCBpcyBvcGVuIG9yIGNsb3NlCisJdTgJCQkJcGFpcndpc2Vfa2V5X3R5cGU7CisJdTgJCQkJZ3JvdXBfa2V5X3R5cGU7CisKKyAgICB1MzIgICAgICAgICAgICAgICBfZG90MTFXRVBEZWZhdWx0S2V5SUQ7CisKKwl1OCAgICAgICAgICAgICAgCXR4X21pY19rZXlbOF07ICAgICAgLy8gVE9ETzogMDYyNyBrZXZpbi1US0lQCisJdTggICAgICAgICAgICAgIAlyeF9taWNfa2V5WzhdOyAgICAgIC8vIFRPRE86IDA2Mjcga2V2aW4tVEtJUAorCXU4CQkJCWdyb3VwX3R4X21pY19rZXlbOF07CisJdTgJCQkJZ3JvdXBfcnhfbWljX2tleVs4XTsKKworLy8JI2lmZGVmIF9XUEFfCisJdTgJCQkJQXNzb2NSZXFWYXJJRVsyMDBdOworCXU4CQkJCUFzc29jUmVzcFZhcklFWzIwMF07CisKKwl1MTYJCQkJQXNzb2NSZXFWYXJMZW47CisJdTE2CQkJCUFzc29jUmVzcFZhckxlbjsKKwl1OAkJCQlib1JlYXNzb2M7CQkJCS8vdXNlIGFzc29jLiBvciByZWFzc29jLgorCXU4CQkJCXJlc2VydmVkXzZbM107CisJdTE2CQkJCUFzc29jUmVzcENhcGFiaWxpdHk7CisJdTE2CQkJCUFzc29jUmVzcFN0YXR1czsKKy8vCSNlbmRpZgorCisJI2lmZGVmIF9XUEEyXworICAgIHU4ICAgICAgICAgICAgICAgUG1rSWRUYWJsZVsyNTZdOworICAgIHUzMiAgICAgICAgICAgICAgIFBta2lkVGFibGVJbmRleDsKKwkjZW5kaWYgLy9lbmQgZGVmIF9XUEEyXworCit9IFNNRV9QQVJBTUVURVJTLCAqUFNNRV9QQVJBTUVURVJTOworCisjZGVmaW5lIHBzU01FCQkJKCYoQWRhcHRlci0+c1NtZVBhcmEpKQorCisjZGVmaW5lIHdTTUVHZXRDdXJyZW50U1RBU3RhdGUoQWRhcHRlcikJCSgodTE2KShBZGFwdGVyKS0+c1NtZVBhcmEud1N0YXRlKQorCisKKworLy8rKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKworLy8JU21lTW9kdWxlLmgKKy8vCQlEZWZpbmUgdGhlIHJlbGF0ZWQgZGVmaW5pdGlvbnMgb2YgU01FIG1vZHVsZQorLy8JaGlzdG9yeSAtLSAwMS8xNC8wMycgY3JlYXRlZAorLy8KKy8vKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKKworLy9EZWZpbmUgdGhlIHN0YXRlIG9mIFNNRSBtb2R1bGUKKyNkZWZpbmUgRElTQUJMRUQJCQkJCQkwCisjZGVmaW5lIElOSVRfU0NBTgkJCQkJCTEKKyNkZWZpbmUgU0NBTl9SRUFEWQkJCQkJCTIKKyNkZWZpbmUgU1RBUlRfSUJTUwkJCQkJCTMKKyNkZWZpbmUgSk9JTl9QRU5ESU5HCQkJCQk0CisjZGVmaW5lIEpPSU5fQ0ZNCQkJCQkJNQorI2RlZmluZSBBVVRIRU5USUNBVEVfUEVORElORwkJCTYKKyNkZWZpbmUgQVVUSEVOVElDQVRFRAkJCQkJNworI2RlZmluZSBDT05ORUNURUQJCQkJCQk4CisvLyNkZWZpbmUgRUFQX1NUQVJUSU5HCQkJCQk5CisvLyNkZWZpbmUgRUFQT0xfQVVUSEVOX1BFTkRJTkcJCQkxMAorLy8jZGVmaW5lIFNFQ1VSRV9DT05ORUNURUQJCQkJMTEKKworCisvLyBTdGF0aWMgZnVuY3Rpb24KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvd2IzNV92ZXIuaCBiL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL3diMzVfdmVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjQzM2JjMAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL3diMzVfdmVyLmgKQEAgLTAsMCArMSwzMCBAQAorLy8KKy8vIE9ubHkgZGVmaW5lIG9uZSBvZiBmb2xsb3cKKy8vCisKKyNpZmRlZiBXQl9XSU4KKwkjZGVmaW5lIFZFUl9GSUxFVkVSU0lPTiAgICAgICAgICAgICAxLDAwLDQ3LDAwCisJI2RlZmluZSBWRVJfRklMRVZFUlNJT05fU1RSICAgICAgICAgIjEuMDAuNDcuMDAiCisJI2RlZmluZSBXQjMyX0RSSVZFUl9NQUpPUl9WRVJTSU9OICAgMHgwMTAwCisJI2RlZmluZSBXQjMyX0RSSVZFUl9NSU5PUl9WRVJTSU9OICAgMHg0NzAwCisjZW5kaWYKKworI2lmZGVmIFdCX0NFCisJI2RlZmluZSBWRVJfRklMRVZFUlNJT04gICAgICAgICAgICAgMiwwMCw0NywwMAorCSNkZWZpbmUgVkVSX0ZJTEVWRVJTSU9OX1NUUiAgICAgICAgICIyLjAwLjQ3LjAwIgorCSNkZWZpbmUgV0IzMl9EUklWRVJfTUFKT1JfVkVSU0lPTiAgIDB4MDIwMAorCSNkZWZpbmUgV0IzMl9EUklWRVJfTUlOT1JfVkVSU0lPTiAgIDB4NDcwMAorI2VuZGlmCisKKyNpZmRlZiBXQl9MSU5VWAorCSNkZWZpbmUgVkVSX0ZJTEVWRVJTSU9OICAgICAgICAgICAgIDMsMDAsNDcsMDAKKwkjZGVmaW5lIFZFUl9GSUxFVkVSU0lPTl9TVFIgICAgICAgICAiMy4wMC40Ny4wMCIKKwkjZGVmaW5lIFdCMzJfRFJJVkVSX01BSk9SX1ZFUlNJT04gICAweDAzMDAKKwkjZGVmaW5lIFdCMzJfRFJJVkVSX01JTk9SX1ZFUlNJT04gICAweDQ3MDAKKyNlbmRpZgorCisKKworCisKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvd2JoYWwuYyBiL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL3diaGFsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGFmNDQyMgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL3diaGFsLmMKQEAgLTAsMCArMSw4NzggQEAKKyNpbmNsdWRlICJvc19jb21tb24uaCIKKwordm9pZCBoYWxfZ2V0X2V0aGVybmV0X2FkZHJlc3MoIHBod19kYXRhX3QgcEh3RGF0YSwgUFVDSEFSIGN1cnJlbnRfYWRkcmVzcyApCit7CisJaWYoIHBId0RhdGEtPlN1cnByaXNlUmVtb3ZlICkgcmV0dXJuOworCisJbWVtY3B5KCBjdXJyZW50X2FkZHJlc3MsIHBId0RhdGEtPkN1cnJlbnRNYWNBZGRyZXNzLCBFVEhfTEVOR1RIX09GX0FERFJFU1MgKTsKK30KKwordm9pZCBoYWxfc2V0X2V0aGVybmV0X2FkZHJlc3MoIHBod19kYXRhX3QgcEh3RGF0YSwgUFVDSEFSIGN1cnJlbnRfYWRkcmVzcyApCit7CisJdTMyIGx0bXBbMl07CisKKwlpZiggcEh3RGF0YS0+U3VycHJpc2VSZW1vdmUgKSByZXR1cm47CisKKwltZW1jcHkoIHBId0RhdGEtPkN1cnJlbnRNYWNBZGRyZXNzLCBjdXJyZW50X2FkZHJlc3MsIEVUSF9MRU5HVEhfT0ZfQUREUkVTUyApOworCisJbHRtcFswXT0gY3B1X3RvX2xlMzIoICooUFVMT05HKXBId0RhdGEtPkN1cnJlbnRNYWNBZGRyZXNzICk7CisJbHRtcFsxXT0gY3B1X3RvX2xlMzIoICooUFVMT05HKShwSHdEYXRhLT5DdXJyZW50TWFjQWRkcmVzcyArIDQpICkgJiAweGZmZmY7CisKKwlXYjM1UmVnX0J1cnN0V3JpdGUoIHBId0RhdGEsIDB4MDNlOCwgbHRtcCwgMiwgQVVUT19JTkNSRU1FTlQgKTsKK30KKwordm9pZCBoYWxfZ2V0X3Blcm1hbmVudF9hZGRyZXNzKCBwaHdfZGF0YV90IHBId0RhdGEsIFBVQ0hBUiBwZXRoZXJuZXRfYWRkcmVzcyApCit7CisJaWYoIHBId0RhdGEtPlN1cnByaXNlUmVtb3ZlICkgcmV0dXJuOworCisJbWVtY3B5KCBwZXRoZXJuZXRfYWRkcmVzcywgcEh3RGF0YS0+UGVybWFuZW50TWFjQWRkcmVzcywgNiApOworfQorCit1OCBoYWxfaW5pdF9oYXJkd2FyZShwaHdfZGF0YV90IHBId0RhdGEsIFBXQjMyX0FEQVBURVIgQWRhcHRlcikKK3sKKwl1MTYgU29mdHdhcmVTZXQ7CisJcEh3RGF0YS0+QWRhcHRlciA9IEFkYXB0ZXI7CisKKwkvLyBJbml0aWFsIHRoZSB2YXJpYWJsZQorCXBId0RhdGEtPk1heFJlY2VpdmVMaWZlVGltZSA9IERFRkFVTFRfTVNEVV9MSUZFX1RJTUU7IC8vIFNldHRpbmcgUnggbWF4aW11bSBNU0RVIGxpZmUgdGltZQorCXBId0RhdGEtPkZyYWdtZW50VGhyZXNob2xkID0gREVGQVVMVF9GUkFHTUVOVF9USFJFU0hPTEQ7IC8vIFNldHRpbmcgZGVmYXVsdCBmcmFnbWVudCB0aHJlc2hvbGQKKworCWlmIChXYlVzYl9pbml0aWFsKHBId0RhdGEpKSB7CisJCXBId0RhdGEtPkluaXRpYWxSZXNvdXJjZSA9IDE7CisJCWlmKCBXYjM1UmVnX2luaXRpYWwocEh3RGF0YSkpIHsKKwkJCXBId0RhdGEtPkluaXRpYWxSZXNvdXJjZSA9IDI7CisJCQlpZiAoV2IzNVR4X2luaXRpYWwocEh3RGF0YSkpIHsKKwkJCQlwSHdEYXRhLT5Jbml0aWFsUmVzb3VyY2UgPSAzOworCQkJCWlmIChXYjM1UnhfaW5pdGlhbChwSHdEYXRhKSkgeworCQkJCQlwSHdEYXRhLT5Jbml0aWFsUmVzb3VyY2UgPSA0OworCQkJCQlPU19USU1FUl9JTklUSUFMKCAmcEh3RGF0YS0+TEVEVGltZXIsIGhhbF9sZWRfY29udHJvbCwgcEh3RGF0YSApOworCQkJCQlPU19USU1FUl9TRVQoICZwSHdEYXRhLT5MRURUaW1lciwgMTAwMCApOyAvLyAyMDA2MDYyMworCisJCQkJCS8vCisJCQkJCS8vIEZvciByZXN0cmljdCB0byB2ZW5kb3IncyBoYXJkd2FyZQorCQkJCQkvLworCQkJCQlTb2Z0d2FyZVNldCA9IGhhbF9zb2Z0d2FyZV9zZXQoIHBId0RhdGEgKTsKKworCQkJCQkjaWZkZWYgVmVuZG9yMgorCQkJCQkvLyBUcnkgdG8gbWFrZSBzdXJlIHRoZSBFRVBST00gY29udGFpbgorCQkJCQlTb2Z0d2FyZVNldCA+Pj0gODsKKwkJCQkJaWYoIFNvZnR3YXJlU2V0ICE9IDB4ODIgKQorCQkJCQkJcmV0dXJuIEZBTFNFOworCQkJCQkjZW5kaWYKKworCQkJCQlXYjM1Unhfc3RhcnQoIHBId0RhdGEgKTsKKwkJCQkJV2IzNVR4X0VQMlZNX3N0YXJ0KCBwSHdEYXRhICk7CisKKwkJCQkJcmV0dXJuIFRSVUU7CisJCQkJfQorCQkJfQorCQl9CisJfQorCisJcEh3RGF0YS0+U3VycHJpc2VSZW1vdmUgPSAxOworCXJldHVybiBGQUxTRTsKK30KKworCit2b2lkIGhhbF9oYWx0KHBod19kYXRhX3QgcEh3RGF0YSwgdm9pZCAqcHBhX2RhdGEpCit7CisJc3dpdGNoKCBwSHdEYXRhLT5Jbml0aWFsUmVzb3VyY2UgKQorCXsKKwkJY2FzZSA0OgorCQljYXNlIDM6IE9TX1RJTUVSX0NBTkNFTCggJnBId0RhdGEtPkxFRFRpbWVyLCAmY2FuY2VsICk7CisJCQlPU19TTEVFUCgxMDAwMDApOyAvLyBXYWl0IGZvciBUaW1lciBEUEMgZXhpdCA5NDA2MjMuMgorCQkJV2IzNVJ4X2Rlc3Ryb3koIHBId0RhdGEgKTsgLy8gUmVsZWFzZSB0aGUgUngKKwkJY2FzZSAyOiBXYjM1VHhfZGVzdHJveSggcEh3RGF0YSApOyAvLyBSZWxlYXNlIHRoZSBUeAorCQljYXNlIDE6IFdiMzVSZWdfZGVzdHJveSggcEh3RGF0YSApOyAvLyBSZWxlYXNlIHRoZSBXYjM1IFJlZ2lzc3RlciByZXNvdXJjZXMKKwkJCQlXYlVzYl9kZXN0cm95KCBwSHdEYXRhICk7Ly8gUmVsZWFzZSB0aGUgV2JVc2IKKwl9Cit9CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit2b2lkIGhhbF9zZXRfcmF0ZXMocGh3X2RhdGFfdCBwSHdEYXRhLCBQVUNIQVIgcGJzc19yYXRlcywKKwkJICAgdTggbGVuZ3RoLCB1bnNpZ25lZCBjaGFyIGJhc2ljX3JhdGVfc2V0KQoreworCVBXQjM1UkVHCXBXYjM1UmVnID0gJnBId0RhdGEtPldiMzVSZWc7CisJdTMyCQl0bXAsIHRtcDE7CisJdTgJCVJhdGVbMTJdPXsgMiwgNCwgMTEsIDIyLCAxMiwgMTgsIDI0LCAzNiwgNDgsIDcyLCA5NiwgMTA4IH07CisJdTgJCVN1cHBvcnRlZFJhdGVbMTZdOworCXU4CQlpLCBqLCBrLCBDb3VudDEsIENvdW50MiwgQnl0ZTsKKworCWlmKCBwSHdEYXRhLT5TdXJwcmlzZVJlbW92ZSApIHJldHVybjsKKworCWlmIChiYXNpY19yYXRlX3NldCkgeworCQlwV2IzNVJlZy0+TTI4X01hY0NvbnRyb2wgJj0gfjB4MDAwZmZmMDA7CisJCXRtcDEgPSAweDAwMDAwMTAwOworCX0gZWxzZSB7CisJCXBXYjM1UmVnLT5NMjhfTWFjQ29udHJvbCAmPSB+MHhmZmYwMDAwMDsKKwkJdG1wMSA9IDB4MDAxMDAwMDA7CisJfQorCisJdG1wID0gMDsKKwlmb3IgKGk9MDsgaTxsZW5ndGg7IGkrKykgeworCQlCeXRlID0gcGJzc19yYXRlc1tpXSAmIDB4N2Y7CisJCWZvciAoaj0wOyBqPDEyOyBqKyspIHsKKwkJCWlmKCBCeXRlID09IFJhdGVbal0gKQorCQkJCWJyZWFrOworCQl9CisKKwkJaWYgKGogPCAxMikKKwkJCXRtcCB8PSAodG1wMTw8aik7CisJfQorCisJcFdiMzVSZWctPk0yOF9NYWNDb250cm9sIHw9IHRtcDsKKwlXYjM1UmVnX1dyaXRlKCBwSHdEYXRhLCAweDA4MjgsIHBXYjM1UmVnLT5NMjhfTWFjQ29udHJvbCApOworCisJLy8gOTMwMjA2LjIuYyBNNzggc2V0dGluZworCWogPSBrID0gQ291bnQxID0gQ291bnQyID0gMDsKKwltZW1zZXQoIFN1cHBvcnRlZFJhdGUsIDAsIDE2ICk7CisJdG1wID0gMHgwMDEwMDAwMDsKKwl0bXAxID0gMHgwMDAwMDEwMDsKKwlmb3IgKGk9MDsgaTwxMjsgaSsrKSB7IC8vIEdldCB0aGUgc3VwcG9ydGVkIHJhdGUKKwkJaWYgKHRtcCAmIHBXYjM1UmVnLT5NMjhfTWFjQ29udHJvbCkgeworCQkJU3VwcG9ydGVkUmF0ZVtqXSA9IFJhdGVbaV07CisKKwkJCWlmICh0bXAxICYgcFdiMzVSZWctPk0yOF9NYWNDb250cm9sKQorCQkJCVN1cHBvcnRlZFJhdGVbal0gfD0gMHg4MDsKKworCQkJaWYgKGspCisJCQkJQ291bnQyKys7CisJCQllbHNlCisJCQkJQ291bnQxKys7CisKKwkJCWorKzsKKwkJfQorCisJCWlmIChpPT00ICYmIGs9PTApIHsKKwkJCWlmKCAhKHBXYjM1UmVnLT5NMjhfTWFjQ29udHJvbCAmIDB4MDAwZmYwMDApICkgLy8gaWYgYmFzaWMgcmF0ZSBpbiAxMWcgZG9tYWluKQorCQkJeworCQkJCWsgPSAxOworCQkJCWogPSA4OworCQkJfQorCQl9CisKKwkJdG1wIDw8PSAxOworCQl0bXAxIDw8PSAxOworCX0KKworCS8vIEZpbGwgZGF0YSBpbnRvIHN1cHBvcnQgcmF0ZSB1bnRpbCBidWZmZXIgZnVsbAorCS8vLS0tMjAwNjA5MjYgYWRkIGJ5IGFuc29uJ3MgZW5kaWFuCisJZm9yIChpPTA7IGk8NDsgaSsrKQorCQkqKFBVTE9ORykoU3VwcG9ydGVkUmF0ZSsoaTw8MikpID0gY3B1X3RvX2xlMzIoICooUFVMT05HKShTdXBwb3J0ZWRSYXRlKyhpPDwyKSkgKTsKKwkvLy0tLSBlbmQgMjAwNjA5MjYgYWRkIGJ5IGFuc29uJ3MgZW5kaWFuCisJV2IzNVJlZ19CdXJzdFdyaXRlKCBwSHdEYXRhLDB4MDg3YywgKFBVTE9ORylTdXBwb3J0ZWRSYXRlLCA0LCBBVVRPX0lOQ1JFTUVOVCApOworCXBXYjM1UmVnLT5NN0NfTWFjQ29udHJvbCA9ICgoUFVMT05HKVN1cHBvcnRlZFJhdGUpWzBdOworCXBXYjM1UmVnLT5NODBfTWFjQ29udHJvbCA9ICgoUFVMT05HKVN1cHBvcnRlZFJhdGUpWzFdOworCXBXYjM1UmVnLT5NODRfTWFjQ29udHJvbCA9ICgoUFVMT05HKVN1cHBvcnRlZFJhdGUpWzJdOworCXBXYjM1UmVnLT5NODhfTWFjQ29udHJvbCA9ICgoUFVMT05HKVN1cHBvcnRlZFJhdGUpWzNdOworCisJLy8gRmlsbCBsZW5ndGgKKwl0bXAgPSBDb3VudDE8PDI4IHwgQ291bnQyPDwyNDsKKwlwV2IzNVJlZy0+TTc4X0VSUEluZm9ybWF0aW9uICY9IH4weGZmMDAwMDAwOworCXBXYjM1UmVnLT5NNzhfRVJQSW5mb3JtYXRpb24gfD0gdG1wOworCVdiMzVSZWdfV3JpdGUoIHBId0RhdGEsIDB4MDg3OCwgcFdiMzVSZWctPk03OF9FUlBJbmZvcm1hdGlvbiApOworfQorCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit2b2lkIGhhbF9zZXRfYmVhY29uX3BlcmlvZCggIHBod19kYXRhX3QgcEh3RGF0YSwgIHUxNiBiZWFjb25fcGVyaW9kICkKK3sKKwl1MzIJdG1wOworCisJaWYoIHBId0RhdGEtPlN1cnByaXNlUmVtb3ZlICkgcmV0dXJuOworCisJcEh3RGF0YS0+QmVhY29uUGVyaW9kID0gYmVhY29uX3BlcmlvZDsKKwl0bXAgPSBwSHdEYXRhLT5CZWFjb25QZXJpb2QgPDwgMTY7CisJdG1wIHw9IHBId0RhdGEtPlByb2JlRGVsYXk7CisJV2IzNVJlZ19Xcml0ZSggcEh3RGF0YSwgMHgwODQ4LCB0bXAgKTsKK30KKworCit2b2lkIGhhbF9zZXRfY3VycmVudF9jaGFubmVsX2V4KCAgcGh3X2RhdGFfdCBwSHdEYXRhLCAgQ2hhbkluZm8gY2hhbm5lbCApCit7CisJUFdCMzVSRUcgcFdiMzVSZWcgPSAmcEh3RGF0YS0+V2IzNVJlZzsKKworCWlmKCBwSHdEYXRhLT5TdXJwcmlzZVJlbW92ZSApCisJCXJldHVybjsKKworCXByaW50aygiR29pbmcgdG8gY2hhbm5lbDogJWQvJWRcbiIsIGNoYW5uZWwuYmFuZCwgY2hhbm5lbC5DaGFuTm8pOworCisJUkZTeW50aGVzaXplcl9Td2l0Y2hpbmdDaGFubmVsKCBwSHdEYXRhLCBjaGFubmVsICk7Ly8gU3dpdGNoIGNoYW5uZWwKKwlwSHdEYXRhLT5DaGFubmVsID0gY2hhbm5lbC5DaGFuTm87CisJcEh3RGF0YS0+YmFuZCA9IGNoYW5uZWwuYmFuZDsKKwkjaWZkZWYgX1BFX1NUQVRFX0RVTVBfCisJV0JERUJVRygoIlNldCBjaGFubmVsIGlzICVkLCBiYW5kID0lZFxuIiwgcEh3RGF0YS0+Q2hhbm5lbCwgcEh3RGF0YS0+YmFuZCkpOworCSNlbmRpZgorCXBXYjM1UmVnLT5NMjhfTWFjQ29udHJvbCAmPSB+MHhmZjsgLy8gQ2xlYW4gY2hhbm5lbCBpbmZvcm1hdGlvbiBmaWVsZAorCXBXYjM1UmVnLT5NMjhfTWFjQ29udHJvbCB8PSBjaGFubmVsLkNoYW5ObzsKKwlXYjM1UmVnX1dyaXRlV2l0aENhbGxiYWNrVmFsdWUoIHBId0RhdGEsIDB4MDgyOCwgcFdiMzVSZWctPk0yOF9NYWNDb250cm9sLAorCQkJCQkoUENIQVIpJmNoYW5uZWwsIHNpemVvZihDaGFuSW5mbykpOworfQorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3ZvaWQgaGFsX3NldF9jdXJyZW50X2NoYW5uZWwoICBwaHdfZGF0YV90IHBId0RhdGEsICBDaGFuSW5mbyBjaGFubmVsICkKK3sKKwloYWxfc2V0X2N1cnJlbnRfY2hhbm5lbF9leCggcEh3RGF0YSwgY2hhbm5lbCApOworfQorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3ZvaWQgaGFsX2dldF9jdXJyZW50X2NoYW5uZWwoICBwaHdfZGF0YV90IHBId0RhdGEsICBDaGFuSW5mbyAqY2hhbm5lbCApCit7CisJY2hhbm5lbC0+Q2hhbk5vID0gcEh3RGF0YS0+Q2hhbm5lbDsKKwljaGFubmVsLT5iYW5kID0gcEh3RGF0YS0+YmFuZDsKK30KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit2b2lkIGhhbF9zZXRfYWNjZXB0X2Jyb2FkY2FzdCggIHBod19kYXRhX3QgcEh3RGF0YSwgIHU4IGVuYWJsZSApCit7CisJUFdCMzVSRUcJcFdiMzVSZWcgPSAmcEh3RGF0YS0+V2IzNVJlZzsKKworCWlmKCBwSHdEYXRhLT5TdXJwcmlzZVJlbW92ZSApIHJldHVybjsKKworCXBXYjM1UmVnLT5NMDBfTWFjQ29udHJvbCAmPSB+MHgwMjAwMDAwMDsvL1RoZSBIVyB2YWx1ZQorCisJaWYgKGVuYWJsZSkKKwkJcFdiMzVSZWctPk0wMF9NYWNDb250cm9sIHw9IDB4MDIwMDAwMDA7Ly9UaGUgSFcgdmFsdWUKKworCVdiMzVSZWdfV3JpdGUoIHBId0RhdGEsIDB4MDgwMCwgcFdiMzVSZWctPk0wMF9NYWNDb250cm9sICk7Cit9CisKKy8vZm9yIHdlcCBrZXkgZXJyb3IgZGV0ZWN0aW9uLCB3ZSBuZWVkIHRvIGFjY2VwdCBicm9hZGNhc3QgcGFja2V0cyB0byBiZSByZWNlaXZlZCB0ZW1wb3JhcnkuCit2b2lkIGhhbF9zZXRfYWNjZXB0X3Byb21pc2N1b3VzKCBwaHdfZGF0YV90IHBId0RhdGEsICB1OCBlbmFibGUpCit7CisJUFdCMzVSRUcJcFdiMzVSZWcgPSAmcEh3RGF0YS0+V2IzNVJlZzsKKworCWlmIChwSHdEYXRhLT5TdXJwcmlzZVJlbW92ZSkgcmV0dXJuOworCWlmIChlbmFibGUpIHsKKwkJcFdiMzVSZWctPk0wMF9NYWNDb250cm9sIHw9IDB4MDA0MDAwMDA7CisJCVdiMzVSZWdfV3JpdGUoIHBId0RhdGEsIDB4MDgwMCwgcFdiMzVSZWctPk0wMF9NYWNDb250cm9sICk7CisJfSBlbHNlIHsKKwkJcFdiMzVSZWctPk0wMF9NYWNDb250cm9sJj1+MHgwMDQwMDAwMDsKKwkJV2IzNVJlZ19Xcml0ZSggcEh3RGF0YSwgMHgwODAwLCBwV2IzNVJlZy0+TTAwX01hY0NvbnRyb2wgKTsKKwl9Cit9CisKK3ZvaWQgaGFsX3NldF9hY2NlcHRfbXVsdGljYXN0KCAgcGh3X2RhdGFfdCBwSHdEYXRhLCAgdTggZW5hYmxlICkKK3sKKwlQV0IzNVJFRwlwV2IzNVJlZyA9ICZwSHdEYXRhLT5XYjM1UmVnOworCisJaWYoIHBId0RhdGEtPlN1cnByaXNlUmVtb3ZlICkgcmV0dXJuOworCisJcFdiMzVSZWctPk0wMF9NYWNDb250cm9sICY9IH4weDAxMDAwMDAwOy8vVGhlIEhXIHZhbHVlCisJaWYgKGVuYWJsZSkgIHBXYjM1UmVnLT5NMDBfTWFjQ29udHJvbCB8PSAweDAxMDAwMDAwOy8vVGhlIEhXIHZhbHVlCisJV2IzNVJlZ19Xcml0ZSggcEh3RGF0YSwgMHgwODAwLCBwV2IzNVJlZy0+TTAwX01hY0NvbnRyb2wgKTsKK30KKwordm9pZCBoYWxfc2V0X2FjY2VwdF9iZWFjb24oICBwaHdfZGF0YV90IHBId0RhdGEsICB1OCBlbmFibGUgKQoreworCVBXQjM1UkVHCXBXYjM1UmVnID0gJnBId0RhdGEtPldiMzVSZWc7CisKKwlpZiggcEh3RGF0YS0+U3VycHJpc2VSZW1vdmUgKSByZXR1cm47CisKKwkvLyAyMDA0MDEwOCBkZWJ1ZworCWlmKCAhZW5hYmxlICkvL0R1ZSB0byBTTUUgYW5kIE1MTUUgYXJlIG5vdCBzdWl0YWJsZSBmb3IgMzUKKwkJcmV0dXJuOworCisJcFdiMzVSZWctPk0wMF9NYWNDb250cm9sICY9IH4weDA0MDAwMDAwOy8vVGhlIEhXIHZhbHVlCisJaWYoIGVuYWJsZSApCisJCXBXYjM1UmVnLT5NMDBfTWFjQ29udHJvbCB8PSAweDA0MDAwMDAwOy8vVGhlIEhXIHZhbHVlCisKKwlXYjM1UmVnX1dyaXRlKCBwSHdEYXRhLCAweDA4MDAsIHBXYjM1UmVnLT5NMDBfTWFjQ29udHJvbCApOworfQorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3ZvaWQgaGFsX3NldF9tdWx0aWNhc3RfYWRkcmVzcyggcGh3X2RhdGFfdCBwSHdEYXRhLCBQVUNIQVIgYWRkcmVzcywgdTggbnVtYmVyICkKK3sKKwlQV0IzNVJFRwlwV2IzNVJlZyA9ICZwSHdEYXRhLT5XYjM1UmVnOworCXU4CQlCeXRlLCBCaXQ7CisKKwlpZiggcEh3RGF0YS0+U3VycHJpc2VSZW1vdmUgKSByZXR1cm47CisKKwkvL0VyYXNlcyBhbmQgcmVmaWxscyB0aGUgY2FyZCBtdWx0aWNhc3QgcmVnaXN0ZXJzLiBVc2VkIHdoZW4gYW4gYWRkcmVzcworCS8vICAgIGhhcyBiZWVuIGRlbGV0ZWQgYW5kIGFsbCBiaXRzIG11c3QgYmUgcmVjb21wdXRlZC4KKwlwV2IzNVJlZy0+TTA0X011bHRpY2FzdEFkZHJlc3MxID0gMDsKKwlwV2IzNVJlZy0+TTA4X011bHRpY2FzdEFkZHJlc3MyID0gMDsKKworCXdoaWxlKCBudW1iZXIgKQorCXsKKwkJbnVtYmVyLS07CisJCUNhcmRHZXRNdWx0aWNhc3RCaXQoIChhZGRyZXNzKyhudW1iZXIqRVRIX0xFTkdUSF9PRl9BRERSRVNTKSksICZCeXRlLCAmQml0KTsKKwkJcFdiMzVSZWctPk11bHRpY2FzdFtCeXRlXSB8PSBCaXQ7CisJfQorCisJLy8gVXBkYXRpbmcgcmVnaXN0ZXIKKwlXYjM1UmVnX0J1cnN0V3JpdGUoIHBId0RhdGEsIDB4MDgwNCwgKFBVTE9ORylwV2IzNVJlZy0+TXVsdGljYXN0LCAyLCBBVVRPX0lOQ1JFTUVOVCApOworfQorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3U4IGhhbF9nZXRfYWNjZXB0X2JlYWNvbiggIHBod19kYXRhX3QgcEh3RGF0YSApCit7CisJUFdCMzVSRUcgcFdiMzVSZWcgPSAmcEh3RGF0YS0+V2IzNVJlZzsKKworCWlmKCBwSHdEYXRhLT5TdXJwcmlzZVJlbW92ZSApIHJldHVybiAwOworCisJaWYoIHBXYjM1UmVnLT5NMDBfTWFjQ29udHJvbCAmIDB4MDQwMDAwMDAgKQorCQlyZXR1cm4gMTsKKwllbHNlCisJCXJldHVybiAwOworfQorCit1bnNpZ25lZCBjaGFyIGhhbF9yZXNldF9oYXJkd2FyZSggcGh3X2RhdGFfdCBwSHdEYXRhLCB2b2lkKiBwcGEgKQoreworCS8vIE5vdCBpbXBsZW1lbnQgeWV0CisJcmV0dXJuIFRSVUU7Cit9CisKK3ZvaWQgaGFsX3N0b3AoICBwaHdfZGF0YV90IHBId0RhdGEgKQoreworCVBXQjM1UkVHCXBXYjM1UmVnID0gJnBId0RhdGEtPldiMzVSZWc7CisKKwlwSHdEYXRhLT5XYjM1UngucnhfaGFsdCA9IDE7CisJV2IzNVJ4X3N0b3AoIHBId0RhdGEgKTsKKworCXBId0RhdGEtPldiMzVUeC50eF9oYWx0ID0gMTsKKwlXYjM1VHhfc3RvcCggcEh3RGF0YSApOworCisJcFdiMzVSZWctPkQwMF9EbWFDb250cm9sICY9IH4weGMwMDAwMDAwOy8vVHggT2ZmLCBSeCBPZmYKKwlXYjM1UmVnX1dyaXRlKCBwSHdEYXRhLCAweDA0MDAsIHBXYjM1UmVnLT5EMDBfRG1hQ29udHJvbCApOworCisJV2JVc2JfU3RvcCggcEh3RGF0YSApOyAvLyAyMDA1MTIzMCBBZGQuNAorfQorCit1bnNpZ25lZCBjaGFyIGhhbF9pZGxlKHBod19kYXRhX3QgcEh3RGF0YSkKK3sKKwlQV0IzNVJFRwlwV2IzNVJlZyA9ICZwSHdEYXRhLT5XYjM1UmVnOworCVBXQlVTQglwV2JVc2IgPSAmcEh3RGF0YS0+V2JVc2I7CisKKwlpZiggIXBId0RhdGEtPlN1cnByaXNlUmVtb3ZlICYmICggcFdiVXNiLT5EZXRlY3RDb3VudCB8fCBwV2IzNVJlZy0+RVAwdm1fc3RhdGUhPVZNX1NUT1AgKSApCisJCXJldHVybiBGQUxTRTsKKworCXJldHVybiBUUlVFOworfQorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3ZvaWQgaGFsX3NldF9jd21pbiggIHBod19kYXRhX3QgcEh3RGF0YSwgIHU4CWN3aW5fbWluICkKK3sKKwlQV0IzNVJFRwlwV2IzNVJlZyA9ICZwSHdEYXRhLT5XYjM1UmVnOworCisJaWYoIHBId0RhdGEtPlN1cnByaXNlUmVtb3ZlICkgcmV0dXJuOworCisJcEh3RGF0YS0+Y3dtaW4gPSBjd2luX21pbjsKKwlwV2IzNVJlZy0+TTJDX01hY0NvbnRyb2wgJj0gfjB4N2MwMDsJLy9iaXQgMTAgfiAxNAorCXBXYjM1UmVnLT5NMkNfTWFjQ29udHJvbCB8PSAocEh3RGF0YS0+Y3dtaW48PDEwKTsKKwlXYjM1UmVnX1dyaXRlKCBwSHdEYXRhLCAweDA4MmMsIHBXYjM1UmVnLT5NMkNfTWFjQ29udHJvbCApOworfQorCitzMzIgaGFsX2dldF9yc3NpKCAgcGh3X2RhdGFfdCBwSHdEYXRhLCAgdTMyICpIYWxSc3NpQXJyeSwgIHU4IENvdW50ICkKK3sKKwlQV0IzNVJFRyBwV2IzNVJlZyA9ICZwSHdEYXRhLT5XYjM1UmVnOworCVIwMV9ERVNDUklQVE9SCXIwMTsKKwlzMzIgbHRtcCA9IDAsIHRtcDsKKwl1OAlpOworCisJaWYoIHBId0RhdGEtPlN1cnByaXNlUmVtb3ZlICkgcmV0dXJuIC0yMDA7CisJaWYoIENvdW50ID4gTUFYX0FDQ19SU1NJX0NPVU5UICkgLy8gQmVjYXVzZSB0aGUgVFMgbWF5IHVzZSB0aGlzIGZ1bnRpb24KKwkJQ291bnQgPSBNQVhfQUNDX1JTU0lfQ09VTlQ7CisKKwkvLyBSU1NJID0gQzEgKyBDMiAqIChhZ2Nfc3RhdGVbNzowXSArIG9mZnNldF9tYXAobG5hX3N0YXRlWzE6MF0pKQorCS8vIEMxID0gLTE5NSwgQzIgPSAwLjY2ID0gODUvMTI4CisJZm9yIChpPTA7IGk8Q291bnQ7IGkrKykKKwl7CisJCXIwMS52YWx1ZSA9IEhhbFJzc2lBcnJ5W2ldOworCQl0bXAgPSAoKCggcjAxLlIwMV9BR0Nfc3RhdGUgKyBwV2IzNVJlZy0+TE5BVmFsdWVbcjAxLlIwMV9MTkFfc3RhdGVdKSAqIDg1ICkgPj43ICkgLSAxOTU7CisJCWx0bXAgKz0gdG1wOworCX0KKwlsdG1wIC89IENvdW50OworCWlmKCBwSHdEYXRhLT5waHlfdHlwZSA9PSBSRl9BSVJPSEFfMjIzMCApIGx0bXAgLT0gNTsgLy8gMTA7CisJaWYoIHBId0RhdGEtPnBoeV90eXBlID09IFJGX0FJUk9IQV8yMjMwUyApIGx0bXAgLT0gNTsgLy8gMTA7IDIwMDYwNDIwIEFkZCB0aGlzCisKKwkvL2lmKCBsdG1wIDwgLTIwMCApIGx0bXAgPSAtMjAwOworCWlmKCBsdG1wIDwgLTExMCApIGx0bXAgPSAtMTEwOy8vIDEuMC4yNC4wIEZvciBOSlJDCisKKwlyZXR1cm4gbHRtcDsKK30KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorczMyIGhhbF9nZXRfcnNzaV9ic3MoICBwaHdfZGF0YV90IHBId0RhdGEsICB1MTYgaWR4LCAgdTggQ291bnQgKQoreworCVBXQjM1UkVHIHBXYjM1UmVnID0gJnBId0RhdGEtPldiMzVSZWc7CisJUjAxX0RFU0NSSVBUT1IJcjAxOworCXMzMiBsdG1wID0gMCwgdG1wOworCXU4CWksIGo7CisJUEFEQVBURVIJQWRhcHRlciA9IHBId0RhdGEtPkFkYXB0ZXI7CisvLwl1MzIgKkhhbFJzc2lBcnJ5ID0gcHNCU1MoaWR4KS0+SGFsUnNzaTsKKworCWlmKCBwSHdEYXRhLT5TdXJwcmlzZVJlbW92ZSApIHJldHVybiAtMjAwOworCWlmKCBDb3VudCA+IE1BWF9BQ0NfUlNTSV9DT1VOVCApIC8vIEJlY2F1c2UgdGhlIFRTIG1heSB1c2UgdGhpcyBmdW50aW9uCisJCUNvdW50ID0gTUFYX0FDQ19SU1NJX0NPVU5UOworCisJLy8gUlNTSSA9IEMxICsgQzIgKiAoYWdjX3N0YXRlWzc6MF0gKyBvZmZzZXRfbWFwKGxuYV9zdGF0ZVsxOjBdKSkKKwkvLyBDMSA9IC0xOTUsIEMyID0gMC42NiA9IDg1LzEyOAorI2lmIDAKKwlmb3IgKGk9MDsgaTxDb3VudDsgaSsrKQorCXsKKwkJcjAxLnZhbHVlID0gSGFsUnNzaUFycnlbaV07CisJCXRtcCA9ICgoKCByMDEuUjAxX0FHQ19zdGF0ZSArIHBXYjM1UmVnLT5MTkFWYWx1ZVtyMDEuUjAxX0xOQV9zdGF0ZV0pICogODUgKSA+PjcgKSAtIDE5NTsKKwkJbHRtcCArPSB0bXA7CisJfQorI2Vsc2UKKwlpZiAocHNCU1MoaWR4KS0+SGFsUnNzaUluZGV4ID09IDApCisJCXBzQlNTKGlkeCktPkhhbFJzc2lJbmRleCA9IE1BWF9BQ0NfUlNTSV9DT1VOVDsKKwlqID0gKHU4KXBzQlNTKGlkeCktPkhhbFJzc2lJbmRleC0xOworCisJZm9yIChpPTA7IGk8Q291bnQ7IGkrKykKKwl7CisJCXIwMS52YWx1ZSA9IHBzQlNTKGlkeCktPkhhbFJzc2lbal07CisJCXRtcCA9ICgoKCByMDEuUjAxX0FHQ19zdGF0ZSArIHBXYjM1UmVnLT5MTkFWYWx1ZVtyMDEuUjAxX0xOQV9zdGF0ZV0pICogODUgKSA+PjcgKSAtIDE5NTsKKwkJbHRtcCArPSB0bXA7CisJCWlmIChqID09IDApCisJCXsKKwkJCWogPSBNQVhfQUNDX1JTU0lfQ09VTlQ7CisJCX0KKwkJai0tOworCX0KKyNlbmRpZgorCWx0bXAgLz0gQ291bnQ7CisJaWYoIHBId0RhdGEtPnBoeV90eXBlID09IFJGX0FJUk9IQV8yMjMwICkgbHRtcCAtPSA1OyAvLyAxMDsKKwlpZiggcEh3RGF0YS0+cGh5X3R5cGUgPT0gUkZfQUlST0hBXzIyMzBTICkgbHRtcCAtPSA1OyAvLyAxMDsgMjAwNjA0MjAgQWRkIHRoaXMKKworCS8vaWYoIGx0bXAgPCAtMjAwICkgbHRtcCA9IC0yMDA7CisJaWYoIGx0bXAgPCAtMTEwICkgbHRtcCA9IC0xMTA7Ly8gMS4wLjI0LjAgRm9yIE5KUkMKKworCXJldHVybiBsdG1wOworfQorCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordm9pZCBoYWxfbGVkX2NvbnRyb2xfMWEoICBwaHdfZGF0YV90IHBId0RhdGEgKQoreworCWhhbF9sZWRfY29udHJvbCggTlVMTCwgcEh3RGF0YSwgTlVMTCwgTlVMTCApOworfQorCit2b2lkIGhhbF9sZWRfY29udHJvbCggIHZvaWQqIFMxLCAgcGh3X2RhdGFfdCBwSHdEYXRhLCAgdm9pZCogUzMsICB2b2lkKiBTNCApCit7CisJUEFEQVBURVIJQWRhcHRlciA9IHBId0RhdGEtPkFkYXB0ZXI7CisJUFdCMzVSRUcJcFdiMzVSZWcgPSAmcEh3RGF0YS0+V2IzNVJlZzsKKwl1MzIJTEVEU2V0ID0gKHBId0RhdGEtPlNvZnR3YXJlU2V0ICYgSEFMX0xFRF9TRVRfTUFTSykgPj4gSEFMX0xFRF9TRVRfU0hJRlQ7CisJdTgJTEVEZ3JheVsyMF0gPSB7IDAsMyw0LDYsOCwxMCwxMSwxMiwxMywxNCwxNSwxNCwxMywxMiwxMSwxMCw4LDYsNCwyIH07CisJdTgJTEVEZ3JheTJbMzBdID0geyA3LDgsOSwxMCwxMSwxMiwxMywxNCwxNSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDE1LDE0LDEzLDEyLDExLDEwLDksOCB9OworCXUzMglUaW1lSW50ZXJ2YWwgPSA1MDAsIGx0bXAsIGx0bXAyOworICAgICAgICBsdG1wPTA7CisKKwlpZiggcEh3RGF0YS0+U3VycHJpc2VSZW1vdmUgKSByZXR1cm47CisKKwlpZiggcEh3RGF0YS0+TEVEX2NvbnRyb2wgKSB7CisJCWx0bXAyID0gcEh3RGF0YS0+TEVEX2NvbnRyb2wgJiAweGZmOworCQlpZiggbHRtcDIgPT0gNSApIC8vIDUgaXMgV1BTIG1vZGUKKwkJeworCQkJVGltZUludGVydmFsID0gMTAwOworCQkJbHRtcDIgPSAocEh3RGF0YS0+TEVEX2NvbnRyb2w+PjgpICYgMHhmZjsKKwkJCXN3aXRjaCggbHRtcDIgKQorCQkJeworCQkJCWNhc2UgMTogLy8gWzAuMiBPbl1bMC4xIE9mZl0uLi4KKwkJCQkJcEh3RGF0YS0+TEVEX0JsaW5raW5nICU9IDM7CisJCQkJCWx0bXAgPSAweDEwMTA7IC8vIExlZCAxICYgMCBHcmVlbiBhbmQgUmVkCisJCQkJCWlmKCBwSHdEYXRhLT5MRURfQmxpbmtpbmcgPT0gMiApIC8vIFR1cm4gb2ZmCisJCQkJCQlsdG1wID0gMDsKKwkJCQkJYnJlYWs7CisJCQkJY2FzZSAyOiAvLyBbMC4xIE9uXVswLjEgT2ZmXS4uLgorCQkJCQlwSHdEYXRhLT5MRURfQmxpbmtpbmcgJT0gMjsKKwkJCQkJbHRtcCA9IDB4MDAxMDsgLy8gTGVkIDAgcmVkIGNvbG9yCisJCQkJCWlmKCBwSHdEYXRhLT5MRURfQmxpbmtpbmcgKSAvLyBUdXJuIG9mZgorCQkJCQkJbHRtcCA9IDA7CisJCQkJCWJyZWFrOworCQkJCWNhc2UgMzogLy8gWzAuMSBPbl1bMC4xIE9mZl1bMC4xIE9uXVswLjEgT2ZmXVswLjEgT25dWzAuMSBPZmZdWzAuMSBPbl1bMC4xIE9mZl1bMC4xIE9uXVswLjEgT2ZmXVswLjUgT2ZmXS4uLgorCQkJCQlwSHdEYXRhLT5MRURfQmxpbmtpbmcgJT0gMTU7CisJCQkJCWx0bXAgPSAweDAwMTA7IC8vIExlZCAwIHJlZCBjb2xvcgorCQkJCQlpZiggKHBId0RhdGEtPkxFRF9CbGlua2luZyA+PSA5KSB8fCAocEh3RGF0YS0+TEVEX0JsaW5raW5nJTIpICkgLy8gVHVybiBvZmYgMC42IHNlYworCQkJCQkJbHRtcCA9IDA7CisJCQkJCWJyZWFrOworCQkJCWNhc2UgNDogLy8gWzMwMCBPbl1bIG9mZiBdCisJCQkJCWx0bXAgPSAweDEwMDA7IC8vIExlZCAxIEdyZWVuIGNvbG9yCisJCQkJCWlmKCBwSHdEYXRhLT5MRURfQmxpbmtpbmcgPj0gMzAwMCApCisJCQkJCQlsdG1wID0gMDsgLy8gbGVkIG1heWJlIG9uIGFmdGVyIDMwMHNlYyAqIDMyYml0IGNvdW50ZXIgb3ZlcmxhcC4KKwkJCQkJYnJlYWs7CisJCQl9CisJCQlwSHdEYXRhLT5MRURfQmxpbmtpbmcrKzsKKworCQkJcFdiMzVSZWctPlUxQkNfTEVEQ29uZmlndXJlID0gbHRtcDsKKwkJCWlmKCBMRURTZXQgIT0gNyApIC8vIE9ubHkgMTExIG1vZGUgaGFzIDIgTEVEcyBvbiBQQ0IuCisJCQl7CisJCQkJcFdiMzVSZWctPlUxQkNfTEVEQ29uZmlndXJlIHw9IChsdG1wICYweGZmKTw8ODsgLy8gQ29weSBMRUQgcmVzdWx0IHRvIGVhY2ggTEVEIGNvbnRyb2wgcmVnaXN0ZXIKKwkJCQlwV2IzNVJlZy0+VTFCQ19MRURDb25maWd1cmUgfD0gKGx0bXAgJjB4ZmYwMCk+Pjg7CisJCQl9CisJCQlXYjM1UmVnX1dyaXRlKCBwSHdEYXRhLCAweDAzYmMsIHBXYjM1UmVnLT5VMUJDX0xFRENvbmZpZ3VyZSApOworCQl9CisJfQorCWVsc2UgaWYoIHBId0RhdGEtPkN1cnJlbnRSYWRpb1N3IHx8IHBId0RhdGEtPkN1cnJlbnRSYWRpb0h3ICkgLy8gSWYgcmFkaW8gb2ZmCisJeworCQlpZiggcFdiMzVSZWctPlUxQkNfTEVEQ29uZmlndXJlICYgMHgxMDEwICkKKwkJeworCQkJcFdiMzVSZWctPlUxQkNfTEVEQ29uZmlndXJlICY9IH4weDEwMTA7CisJCQlXYjM1UmVnX1dyaXRlKCBwSHdEYXRhLCAweDAzYmMsIHBXYjM1UmVnLT5VMUJDX0xFRENvbmZpZ3VyZSApOworCQl9CisJfQorCWVsc2UKKwl7CisJCXN3aXRjaCggTEVEU2V0ICkKKwkJeworCQkJY2FzZSA0OiAvLyBbMTAwXSBPbmx5IDEgTGVkIGJlIHBsYWNlZCBvbiBQQ0IgYW5kIHVzZSBwaW4gMjEgb2YgSUMuIFVzZSBMRURfMCBmb3Igc2hvd2luZworCQkJCWlmKCAhcEh3RGF0YS0+TEVEX0xpbmtPbiApIC8vIEJsaW5rIG9ubHkgaWYgbm90IExpbmsgT24KKwkJCQl7CisJCQkJCS8vIEJsaW5raW5nIGlmIHNjYW5uaW5nIGlzIG9uIHByb2dyZXNzCisJCQkJCWlmKCBwSHdEYXRhLT5MRURfU2Nhbm5pbmcgKQorCQkJCQl7CisJCQkJCQlpZiggcEh3RGF0YS0+TEVEX0JsaW5raW5nID09IDAgKQorCQkJCQkJeworCQkJCQkJCXBXYjM1UmVnLT5VMUJDX0xFRENvbmZpZ3VyZSB8PSAweDEwOworCQkJCQkJCVdiMzVSZWdfV3JpdGUoIHBId0RhdGEsIDB4MDNiYywgcFdiMzVSZWctPlUxQkNfTEVEQ29uZmlndXJlICk7IC8vIExFRF8wIE9uCisJCQkJCQkJcEh3RGF0YS0+TEVEX0JsaW5raW5nID0gMTsKKwkJCQkJCQlUaW1lSW50ZXJ2YWwgPSAzMDA7CisJCQkJCQl9CisJCQkJCQllbHNlCisJCQkJCQl7CisJCQkJCQkJcFdiMzVSZWctPlUxQkNfTEVEQ29uZmlndXJlICY9IH4weDEwOworCQkJCQkJCVdiMzVSZWdfV3JpdGUoIHBId0RhdGEsIDB4MDNiYywgcFdiMzVSZWctPlUxQkNfTEVEQ29uZmlndXJlICk7IC8vIExFRF8wIE9mZgorCQkJCQkJCXBId0RhdGEtPkxFRF9CbGlua2luZyA9IDA7CisJCQkJCQkJVGltZUludGVydmFsID0gMzAwOworCQkJCQkJfQorCQkJCQl9CisJCQkJCWVsc2UKKwkJCQkJeworCQkJCQkJLy9UdXJuIE9mZiBMRURfMAorCQkJCQkJaWYoIHBXYjM1UmVnLT5VMUJDX0xFRENvbmZpZ3VyZSAmIDB4MTAgKQorCQkJCQkJeworCQkJCQkJCXBXYjM1UmVnLT5VMUJDX0xFRENvbmZpZ3VyZSAmPSB+MHgxMDsKKwkJCQkJCQlXYjM1UmVnX1dyaXRlKCBwSHdEYXRhLCAweDAzYmMsIHBXYjM1UmVnLT5VMUJDX0xFRENvbmZpZ3VyZSApOyAvLyBMRURfMCBPZmYKKwkJCQkJCX0KKwkJCQkJfQorCQkJCX0KKwkJCQllbHNlCisJCQkJeworCQkJCQkvLyBUdXJuIE9uIExFRF8wCisJCQkJCWlmKCAocFdiMzVSZWctPlUxQkNfTEVEQ29uZmlndXJlICYgMHgxMCkgPT0gMCApCisJCQkJCXsKKwkJCQkJCXBXYjM1UmVnLT5VMUJDX0xFRENvbmZpZ3VyZSB8PSAweDEwOworCQkJCQkJV2IzNVJlZ19Xcml0ZSggcEh3RGF0YSwgMHgwM2JjLCBwV2IzNVJlZy0+VTFCQ19MRURDb25maWd1cmUgKTsgLy8gTEVEXzAgT2ZmCisJCQkJCX0KKwkJCQl9CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgNjogLy8gWzExMF0gT25seSAxIExlZCBiZSBwbGFjZWQgb24gUENCIGFuZCB1c2UgcGluIDIxIG9mIElDLiBVc2UgTEVEXzAgZm9yIHNob3dpbmcKKwkJCQlpZiggIXBId0RhdGEtPkxFRF9MaW5rT24gKSAvLyBCbGluayBvbmx5IGlmIG5vdCBMaW5rIE9uCisJCQkJeworCQkJCQkvLyBCbGlua2luZyBpZiBzY2FubmluZyBpcyBvbiBwcm9ncmVzcworCQkJCQlpZiggcEh3RGF0YS0+TEVEX1NjYW5uaW5nICkKKwkJCQkJeworCQkJCQkJaWYoIHBId0RhdGEtPkxFRF9CbGlua2luZyA9PSAwICkKKwkJCQkJCXsKKwkJCQkJCQlwV2IzNVJlZy0+VTFCQ19MRURDb25maWd1cmUgJj0gfjB4ZjsKKwkJCQkJCQlwV2IzNVJlZy0+VTFCQ19MRURDb25maWd1cmUgfD0gMHgxMDsKKwkJCQkJCQlXYjM1UmVnX1dyaXRlKCBwSHdEYXRhLCAweDAzYmMsIHBXYjM1UmVnLT5VMUJDX0xFRENvbmZpZ3VyZSApOyAvLyBMRURfMCBPbgorCQkJCQkJCXBId0RhdGEtPkxFRF9CbGlua2luZyA9IDE7CisJCQkJCQkJVGltZUludGVydmFsID0gMzAwOworCQkJCQkJfQorCQkJCQkJZWxzZQorCQkJCQkJeworCQkJCQkJCXBXYjM1UmVnLT5VMUJDX0xFRENvbmZpZ3VyZSAmPSB+MHgxZjsKKwkJCQkJCQlXYjM1UmVnX1dyaXRlKCBwSHdEYXRhLCAweDAzYmMsIHBXYjM1UmVnLT5VMUJDX0xFRENvbmZpZ3VyZSApOyAvLyBMRURfMCBPZmYKKwkJCQkJCQlwSHdEYXRhLT5MRURfQmxpbmtpbmcgPSAwOworCQkJCQkJCVRpbWVJbnRlcnZhbCA9IDMwMDsKKwkJCQkJCX0KKwkJCQkJfQorCQkJCQllbHNlCisJCQkJCXsKKwkJCQkJCS8vIDIwMDYwOTAxIEdyYXkgYmxpbmtpbmcgaWYgaW4gZGlzY29ubmVjdCBzdGF0ZSBhbmQgbm90IHNjYW5uaW5nCisJCQkJCQlsdG1wID0gcFdiMzVSZWctPlUxQkNfTEVEQ29uZmlndXJlOworCQkJCQkJcFdiMzVSZWctPlUxQkNfTEVEQ29uZmlndXJlICY9IH4weDFmOworCQkJCQkJaWYoIExFRGdyYXkyWyhwSHdEYXRhLT5MRURfQmxpbmtpbmclMzApXSApCisJCQkJCQl7CisJCQkJCQkJcFdiMzVSZWctPlUxQkNfTEVEQ29uZmlndXJlIHw9IDB4MTA7CisJCQkJCQkJcFdiMzVSZWctPlUxQkNfTEVEQ29uZmlndXJlIHw9IExFRGdyYXkyWyAocEh3RGF0YS0+TEVEX0JsaW5raW5nJTMwKSBdOworCQkJCQkJfQorCQkJCQkJcEh3RGF0YS0+TEVEX0JsaW5raW5nKys7CisJCQkJCQlpZiggcFdiMzVSZWctPlUxQkNfTEVEQ29uZmlndXJlICE9IGx0bXAgKQorCQkJCQkJCVdiMzVSZWdfV3JpdGUoIHBId0RhdGEsIDB4MDNiYywgcFdiMzVSZWctPlUxQkNfTEVEQ29uZmlndXJlICk7IC8vIExFRF8wIE9mZgorCQkJCQkJVGltZUludGVydmFsID0gMTAwOworCQkJCQl9CisJCQkJfQorCQkJCWVsc2UKKwkJCQl7CisJCQkJCS8vIFR1cm4gT24gTEVEXzAKKwkJCQkJaWYoIChwV2IzNVJlZy0+VTFCQ19MRURDb25maWd1cmUgJiAweDEwKSA9PSAwICkKKwkJCQkJeworCQkJCQkJcFdiMzVSZWctPlUxQkNfTEVEQ29uZmlndXJlIHw9IDB4MTA7CisJCQkJCQlXYjM1UmVnX1dyaXRlKCBwSHdEYXRhLCAweDAzYmMsIHBXYjM1UmVnLT5VMUJDX0xFRENvbmZpZ3VyZSApOyAvLyBMRURfMCBPZmYKKwkJCQkJfQorCQkJCX0KKwkJCQlicmVhazsKKworCQkJY2FzZSA1OiAvLyBbMTAxXSBPbmx5IDEgTGVkIGJlIHBsYWNlZCBvbiBQQ0IgYW5kIHVzZSBMRURfMSBmb3Igc2hvd2luZworCQkJCWlmKCAhcEh3RGF0YS0+TEVEX0xpbmtPbiApIC8vIEJsaW5rIG9ubHkgaWYgbm90IExpbmsgT24KKwkJCQl7CisJCQkJCS8vIEJsaW5raW5nIGlmIHNjYW5uaW5nIGlzIG9uIHByb2dyZXNzCisJCQkJCWlmKCBwSHdEYXRhLT5MRURfU2Nhbm5pbmcgKQorCQkJCQl7CisJCQkJCQlpZiggcEh3RGF0YS0+TEVEX0JsaW5raW5nID09IDAgKQorCQkJCQkJeworCQkJCQkJCXBXYjM1UmVnLT5VMUJDX0xFRENvbmZpZ3VyZSB8PSAweDEwMDA7CisJCQkJCQkJV2IzNVJlZ19Xcml0ZSggcEh3RGF0YSwgMHgwM2JjLCBwV2IzNVJlZy0+VTFCQ19MRURDb25maWd1cmUgKTsgLy8gTEVEXzEgT24KKwkJCQkJCQlwSHdEYXRhLT5MRURfQmxpbmtpbmcgPSAxOworCQkJCQkJCVRpbWVJbnRlcnZhbCA9IDMwMDsKKwkJCQkJCX0KKwkJCQkJCWVsc2UKKwkJCQkJCXsKKwkJCQkJCQlwV2IzNVJlZy0+VTFCQ19MRURDb25maWd1cmUgJj0gfjB4MTAwMDsKKwkJCQkJCQlXYjM1UmVnX1dyaXRlKCBwSHdEYXRhLCAweDAzYmMsIHBXYjM1UmVnLT5VMUJDX0xFRENvbmZpZ3VyZSApOyAvLyBMRURfMSBPZmYKKwkJCQkJCQlwSHdEYXRhLT5MRURfQmxpbmtpbmcgPSAwOworCQkJCQkJCVRpbWVJbnRlcnZhbCA9IDMwMDsKKwkJCQkJCX0KKwkJCQkJfQorCQkJCQllbHNlCisJCQkJCXsKKwkJCQkJCS8vVHVybiBPZmYgTEVEXzEKKwkJCQkJCWlmKCBwV2IzNVJlZy0+VTFCQ19MRURDb25maWd1cmUgJiAweDEwMDAgKQorCQkJCQkJeworCQkJCQkJCXBXYjM1UmVnLT5VMUJDX0xFRENvbmZpZ3VyZSAmPSB+MHgxMDAwOworCQkJCQkJCVdiMzVSZWdfV3JpdGUoIHBId0RhdGEsIDB4MDNiYywgcFdiMzVSZWctPlUxQkNfTEVEQ29uZmlndXJlICk7IC8vIExFRF8xIE9mZgorCQkJCQkJfQorCQkJCQl9CisJCQkJfQorCQkJCWVsc2UKKwkJCQl7CisJCQkJCS8vIElzIHRyYW5zbWl0dGluZy9yZWNlaXZpbmcgPz8KKwkJCQkJaWYoIChPU19DVVJSRU5UX1JYX0JZVEUoIEFkYXB0ZXIgKSAhPSBwSHdEYXRhLT5SeEJ5dGVDb3VudExhc3QgKSB8fAorCQkJCQkJKE9TX0NVUlJFTlRfVFhfQllURSggQWRhcHRlciApICE9IHBId0RhdGEtPlR4Qnl0ZUNvdW50TGFzdCApICkKKwkJCQkJeworCQkJCQkJaWYoIChwV2IzNVJlZy0+VTFCQ19MRURDb25maWd1cmUgJiAweDMwMDApICE9IDB4MzAwMCApCisJCQkJCQl7CisJCQkJCQkJcFdiMzVSZWctPlUxQkNfTEVEQ29uZmlndXJlIHw9IDB4MzAwMDsKKwkJCQkJCQlXYjM1UmVnX1dyaXRlKCBwSHdEYXRhLCAweDAzYmMsIHBXYjM1UmVnLT5VMUJDX0xFRENvbmZpZ3VyZSApOyAvLyBMRURfMSBPbgorCQkJCQkJfQorCisJCQkJCQkvLyBVcGRhdGUgdmFyaWFibGUKKwkJCQkJCXBId0RhdGEtPlJ4Qnl0ZUNvdW50TGFzdCA9IE9TX0NVUlJFTlRfUlhfQllURSggQWRhcHRlciApOworCQkJCQkJcEh3RGF0YS0+VHhCeXRlQ291bnRMYXN0ID0gT1NfQ1VSUkVOVF9UWF9CWVRFKCBBZGFwdGVyICk7CisJCQkJCQlUaW1lSW50ZXJ2YWwgPSAyMDA7CisJCQkJCX0KKwkJCQkJZWxzZQorCQkJCQl7CisJCQkJCQkvLyBUdXJuIE9uIExFRF8xIGFuZCBibGlua2luZyBpZiB0cmFuc21pdHRpbmcvcmVjZWl2aW5nCisJCQkJCQkgaWYoIChwV2IzNVJlZy0+VTFCQ19MRURDb25maWd1cmUgJiAweDMwMDApICE9IDB4MTAwMCApCisJCQkJCQkgeworCQkJCQkJCSBwV2IzNVJlZy0+VTFCQ19MRURDb25maWd1cmUgJj0gfjB4MzAwMDsKKwkJCQkJCQkgcFdiMzVSZWctPlUxQkNfTEVEQ29uZmlndXJlIHw9IDB4MTAwMDsKKwkJCQkJCQkgV2IzNVJlZ19Xcml0ZSggcEh3RGF0YSwgMHgwM2JjLCBwV2IzNVJlZy0+VTFCQ19MRURDb25maWd1cmUgKTsgLy8gTEVEXzEgT24KKwkJCQkJCSB9CisJCQkJCX0KKwkJCQl9CisJCQkJYnJlYWs7CisKKwkJCWRlZmF1bHQ6IC8vIERlZmF1bHQgc2V0dGluZy4gMiBMRUQgYmUgcGxhY2VkIG9uIFBDQi4gTEVEXzA6IExpbmsgT24gTEVEXzEgQWN0aXZlCisJCQkJaWYoIChwV2IzNVJlZy0+VTFCQ19MRURDb25maWd1cmUgJiAweDMwMDApICE9IDB4MzAwMCApCisJCQkJeworCQkJCQlwV2IzNVJlZy0+VTFCQ19MRURDb25maWd1cmUgfD0gMHgzMDAwOy8vIExFRF8xIGlzIGFsd2F5cyBvbiBhbmQgZXZlbnQgZW5hYmxlCisJCQkJCVdiMzVSZWdfV3JpdGUoIHBId0RhdGEsIDB4MDNiYywgcFdiMzVSZWctPlUxQkNfTEVEQ29uZmlndXJlICk7CisJCQkJfQorCisJCQkJaWYoIHBId0RhdGEtPkxFRF9CbGlua2luZyApCisJCQkJeworCQkJCQkvLyBHcmF5IGJsaW5raW5nCisJCQkJCXBXYjM1UmVnLT5VMUJDX0xFRENvbmZpZ3VyZSAmPSB+MHgwZjsKKwkJCQkJcFdiMzVSZWctPlUxQkNfTEVEQ29uZmlndXJlIHw9IDB4MTA7CisJCQkJCXBXYjM1UmVnLT5VMUJDX0xFRENvbmZpZ3VyZSB8PSBMRURncmF5WyAocEh3RGF0YS0+TEVEX0JsaW5raW5nLTEpJTIwIF07CisJCQkJCVdiMzVSZWdfV3JpdGUoIHBId0RhdGEsIDB4MDNiYywgcFdiMzVSZWctPlUxQkNfTEVEQ29uZmlndXJlICk7CisKKwkJCQkJcEh3RGF0YS0+TEVEX0JsaW5raW5nICs9IDI7CisJCQkJCWlmKCBwSHdEYXRhLT5MRURfQmxpbmtpbmcgPCA0MCApCisJCQkJCQlUaW1lSW50ZXJ2YWwgPSAxMDA7CisJCQkJCWVsc2UKKwkJCQkJeworCQkJCQkJcEh3RGF0YS0+TEVEX0JsaW5raW5nID0gMDsgLy8gU3RvcCBibGlua2luZworCQkJCQkJcFdiMzVSZWctPlUxQkNfTEVEQ29uZmlndXJlICY9IH4weDBmOworCQkJCQkJV2IzNVJlZ19Xcml0ZSggcEh3RGF0YSwgMHgwM2JjLCBwV2IzNVJlZy0+VTFCQ19MRURDb25maWd1cmUgKTsKKwkJCQkJfQorCQkJCQlicmVhazsKKwkJCQl9CisKKwkJCQlpZiggcEh3RGF0YS0+TEVEX0xpbmtPbiApCisJCQkJeworCQkJCQlpZiggIShwV2IzNVJlZy0+VTFCQ19MRURDb25maWd1cmUgJiAweDEwKSApIC8vIENoZWNrIHRoZSBMRURfMAorCQkJCQl7CisJCQkJCQkvL1RyeSB0byB0dXJuIE9OIExFRF8wIGFmdGVyIGdyYXkgYmxpbmtpbmcKKwkJCQkJCXBXYjM1UmVnLT5VMUJDX0xFRENvbmZpZ3VyZSB8PSAweDEwOworCQkJCQkJcEh3RGF0YS0+TEVEX0JsaW5raW5nID0gMTsgLy9TdGFydCBibGlua2luZworCQkJCQkJVGltZUludGVydmFsID0gNTA7CisJCQkJCX0KKwkJCQl9CisJCQkJZWxzZQorCQkJCXsKKwkJCQkJaWYoIHBXYjM1UmVnLT5VMUJDX0xFRENvbmZpZ3VyZSAmIDB4MTAgKSAvLyBDaGVjayB0aGUgTEVEXzAKKwkJCQkJeworCQkJCQkJcFdiMzVSZWctPlUxQkNfTEVEQ29uZmlndXJlICY9IH4weDEwOworCQkJCQkJV2IzNVJlZ19Xcml0ZSggcEh3RGF0YSwgMHgwM2JjLCBwV2IzNVJlZy0+VTFCQ19MRURDb25maWd1cmUgKTsKKwkJCQkJfQorCQkJCX0KKwkJCQlicmVhazsKKwkJfQorCisJCS8vMjAwNjA4MjguMSBBY3RpdmUgc2VuZCBudWxsIHBhY2tldCB0byBhdm9pZCBBUCBkaXNjb25uZWN0CisJCWlmKCBwSHdEYXRhLT5MRURfTGlua09uICkKKwkJeworCQkJcEh3RGF0YS0+TnVsbFBhY2tldENvdW50ICs9IFRpbWVJbnRlcnZhbDsKKwkJCWlmKCBwSHdEYXRhLT5OdWxsUGFja2V0Q291bnQgPj0gREVGQVVMVF9OVUxMX1BBQ0tFVF9DT1VOVCApCisJCQl7CisJCQkJcEh3RGF0YS0+TnVsbFBhY2tldENvdW50ID0gMDsKKwkJCX0KKwkJfQorCX0KKworCXBId0RhdGEtPnRpbWVfY291bnQgKz0gVGltZUludGVydmFsOworCVdiMzVUeF9DdXJyZW50VGltZSggcEh3RGF0YSwgcEh3RGF0YS0+dGltZV9jb3VudCApOyAvLyAyMDA2MDkyOCBhZGQKKwlPU19USU1FUl9TRVQoICZwSHdEYXRhLT5MRURUaW1lciwgVGltZUludGVydmFsICk7IC8vIDIwMDYwNjIzLjEKK30KKworCit2b2lkIGhhbF9zZXRfcGh5X3R5cGUoICBwaHdfZGF0YV90IHBId0RhdGEsICB1OCBQaHlUeXBlICkKK3sKKwlwSHdEYXRhLT5waHlfdHlwZSA9IFBoeVR5cGU7Cit9CisKK3ZvaWQgaGFsX2dldF9waHlfdHlwZSggIHBod19kYXRhX3QgcEh3RGF0YSwgIHU4ICpQaHlUeXBlICkKK3sKKwkqUGh5VHlwZSA9IHBId0RhdGEtPnBoeV90eXBlOworfQorCit2b2lkIGhhbF9yZXNldF9jb3VudGVyKCAgcGh3X2RhdGFfdCBwSHdEYXRhICkKK3sKKwlwSHdEYXRhLT5kdG9fdHhfcmV0cnlfY291bnQgPSAwOworCXBId0RhdGEtPmR0b190eF9mcmFnX2NvdW50ID0gMDsKKwltZW1zZXQoIHBId0RhdGEtPnR4X3JldHJ5X2NvdW50LCAwLCA4KTsKK30KKwordm9pZCBoYWxfc2V0X3JhZGlvX21vZGUoIHBod19kYXRhX3QgcEh3RGF0YSwgIHVuc2lnbmVkIGNoYXIgcmFkaW9fb2ZmKQoreworCVBXQjM1UkVHCXBXYjM1UmVnID0gJnBId0RhdGEtPldiMzVSZWc7CisKKwlpZiggcEh3RGF0YS0+U3VycHJpc2VSZW1vdmUgKSByZXR1cm47CisKKwlpZiAocmFkaW9fb2ZmKQkvL2Rpc2FibGUgQmFzZWJhbmQgcmVjZWl2ZSBvZmYKKwl7CisJCXBId0RhdGEtPkN1cnJlbnRSYWRpb1N3ID0gMTsgLy8gb2ZmCisJCXBXYjM1UmVnLT5NMjRfTWFjQ29udHJvbCAmPSAweGZmZmZmZmJmOworCX0KKwllbHNlCisJeworCQlwSHdEYXRhLT5DdXJyZW50UmFkaW9TdyA9IDA7IC8vIG9uCisJCXBXYjM1UmVnLT5NMjRfTWFjQ29udHJvbCB8PSAweDAwMDAwMDQwOworCX0KKwlXYjM1UmVnX1dyaXRlKCBwSHdEYXRhLCAweDA4MjQsIHBXYjM1UmVnLT5NMjRfTWFjQ29udHJvbCApOworfQorCit1OCBoYWxfZ2V0X2FudGVubmFfbnVtYmVyKCAgcGh3X2RhdGFfdCBwSHdEYXRhICkKK3sKKwlQV0IzNVJFRwlwV2IzNVJlZyA9ICZwSHdEYXRhLT5XYjM1UmVnOworCisJaWYgKChwV2IzNVJlZy0+QkIyQyAmIEJJVCgxMSkpID09IDApCisJCXJldHVybiAwOworCWVsc2UKKwkJcmV0dXJuIDE7Cit9CisKK3ZvaWQgaGFsX3NldF9hbnRlbm5hX251bWJlciggIHBod19kYXRhX3QgcEh3RGF0YSwgdTggbnVtYmVyICkKK3sKKworCVBXQjM1UkVHCXBXYjM1UmVnID0gJnBId0RhdGEtPldiMzVSZWc7CisKKwlpZiAobnVtYmVyID09IDEpIHsKKwkJcFdiMzVSZWctPkJCMkMgfD0gQklUKDExKTsKKwl9IGVsc2UgeworCQlwV2IzNVJlZy0+QkIyQyAmPSB+QklUKDExKTsKKwl9CisJV2IzNVJlZ19Xcml0ZSggcEh3RGF0YSwgMHgxMDJjLCBwV2IzNVJlZy0+QkIyQyApOworI2lmZGVmIF9QRV9TVEFURV9EVU1QXworCVdCREVCVUcoKCJDdXJyZW50IGFudGVubmEgbnVtYmVyIDogJWRcbiIsIG51bWJlcikpOworI2VuZGlmCit9CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8wIDogcmFkaW8gb247IDE6IHJhZGlvIG9mZgordTggaGFsX2dldF9od19yYWRpb19vZmYoICBwaHdfZGF0YV90IHBId0RhdGEgKQoreworCVBXQjM1UkVHCXBXYjM1UmVnID0gJnBId0RhdGEtPldiMzVSZWc7CisKKwlpZiggcEh3RGF0YS0+U3VycHJpc2VSZW1vdmUgKSByZXR1cm4gMTsKKworCS8vcmVhZCB0aGUgYml0MTYgb2YgcmVnaXN0ZXIgVTFCMAorCVdiMzVSZWdfUmVhZCggcEh3RGF0YSwgMHgzYjAsICZwV2IzNVJlZy0+VTFCMCApOworCWlmICgocFdiMzVSZWctPlUxQjAgJiAweDAwMDEwMDAwKSkgeworCQlwSHdEYXRhLT5DdXJyZW50UmFkaW9IdyA9IDE7CisJCXJldHVybiAxOworCX0gZWxzZSB7CisJCXBId0RhdGEtPkN1cnJlbnRSYWRpb0h3ID0gMDsKKwkJcmV0dXJuIDA7CisJfQorfQorCit1bnNpZ25lZCBjaGFyIGhhbF9nZXRfZHh4X3JlZyggIHBod19kYXRhX3QgcEh3RGF0YSwgIHUxNiBudW1iZXIsICBQVUxPTkcgcFZhbHVlICkKK3sKKwlpZiggbnVtYmVyIDwgMHgxMDAwICkKKwkJbnVtYmVyICs9IDB4MTAwMDsKKwlyZXR1cm4gV2IzNVJlZ19SZWFkU3luYyggcEh3RGF0YSwgbnVtYmVyLCBwVmFsdWUgKTsKK30KKwordW5zaWduZWQgY2hhciBoYWxfc2V0X2R4eF9yZWcoICBwaHdfZGF0YV90IHBId0RhdGEsICB1MTYgbnVtYmVyLCAgdTMyIHZhbHVlICkKK3sKKwl1bnNpZ25lZCBjaGFyCXJldDsKKworCWlmKCBudW1iZXIgPCAweDEwMDAgKQorCQludW1iZXIgKz0gMHgxMDAwOworCXJldCA9IFdiMzVSZWdfV3JpdGVTeW5jKCBwSHdEYXRhLCBudW1iZXIsIHZhbHVlICk7CisJcmV0dXJuIHJldDsKK30KKwordm9pZCBoYWxfc2Nhbl9zdGF0dXNfaW5kaWNhdGUocGh3X2RhdGFfdCBwSHdEYXRhLCB1bnNpZ25lZCBjaGFyIElzT25Qcm9ncmVzcykKK3sKKwlpZiggcEh3RGF0YS0+U3VycHJpc2VSZW1vdmUgKSByZXR1cm47CisJcEh3RGF0YS0+TEVEX1NjYW5uaW5nID0gSXNPblByb2dyZXNzID8gMSA6IDA7Cit9CisKK3ZvaWQgaGFsX3N5c3RlbV9wb3dlcl9jaGFuZ2UocGh3X2RhdGFfdCBwSHdEYXRhLCB1MzIgUG93ZXJTdGF0ZSkKK3sKKwlpZiggUG93ZXJTdGF0ZSAhPSAwICkKKwl7CisJCXBId0RhdGEtPlN1cnByaXNlUmVtb3ZlID0gMTsKKwkJaWYoIHBId0RhdGEtPldiVXNiLklzVXNiMjAgKQorCQkJaGFsX3N0b3AoIHBId0RhdGEgKTsKKwl9CisJZWxzZQorCXsKKwkJaWYoICFwSHdEYXRhLT5XYlVzYi5Jc1VzYjIwICkKKwkJCWhhbF9zdG9wKCBwSHdEYXRhICk7CisJfQorfQorCit2b2lkIGhhbF9zdXJwcmlzZV9yZW1vdmUoICBwaHdfZGF0YV90IHBId0RhdGEgKQoreworCVBBREFQVEVSIEFkYXB0ZXIgPSBwSHdEYXRhLT5BZGFwdGVyOworCWlmIChPU19BVE9NSUNfSU5DKCBBZGFwdGVyLCAmcEh3RGF0YS0+U3VycHJpc2VSZW1vdmVDb3VudCApID09IDEpIHsKKwkJI2lmZGVmIF9QRV9TVEFURV9EVU1QXworCQlXQkRFQlVHKCgiQ2FsbGluZyBoYWxfc3VycHJpc2VfcmVtb3ZlXG4iKSk7CisJCSNlbmRpZgorCQlPU19TVE9QKCBBZGFwdGVyICk7CisJfQorfQorCit2b2lkIGhhbF9yYXRlX2NoYW5nZSggIHBod19kYXRhX3QgcEh3RGF0YSApIC8vIE5vdGlmeSB0aGUgSEFMIHJhdGUgaXMgY2hhbmdpbmcgMjAwNjA2MTMuMQoreworCVBBREFQVEVSCUFkYXB0ZXIgPSBwSHdEYXRhLT5BZGFwdGVyOworCXU4CQlyYXRlID0gQ1VSUkVOVF9UWF9SQVRFOworCisJQkJQcm9jZXNzb3JfUmF0ZUNoYW5naW5nKCBwSHdEYXRhLCByYXRlICk7Cit9CisKK3ZvaWQgaGFsX3NldF9yZl9wb3dlcihwaHdfZGF0YV90IHBId0RhdGEsIHU4IFBvd2VySW5kZXgpCit7CisJUkZTeW50aGVzaXplcl9TZXRQb3dlckluZGV4KCBwSHdEYXRhLCBQb3dlckluZGV4ICk7Cit9CisKK3Vuc2lnbmVkIGNoYXIgaGFsX3NldF9MRUQocGh3X2RhdGFfdCBwSHdEYXRhLCB1MzIgTW9kZSkgLy8gMjAwNjExMDggZm9yIFdQUyBsZWQgY29udHJvbAoreworCXBId0RhdGEtPkxFRF9CbGlua2luZyA9IDA7CisJcEh3RGF0YS0+TEVEX2NvbnRyb2wgPSBNb2RlOworCU9TX1RJTUVSX1NFVCggJnBId0RhdGEtPkxFRFRpbWVyLCAxMCApOyAvLyAyMDA2MDYyMworCXJldHVybiBUUlVFOworfQorCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC93YmhhbF9mLmggYi9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC93YmhhbF9mLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmUyNWY5NwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL3diaGFsX2YuaApAQCAtMCwwICsxLDEyMiBAQAorLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vIERldmljZSByZWxhdGVkIGluY2x1ZGUKKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjaWZkZWYgV0JfTElOVVgKKwkjaW5jbHVkZSAibGludXgvd2J1c2JfZi5oIgorCSNpbmNsdWRlICJsaW51eC93YjM1cmVnX2YuaCIKKwkjaW5jbHVkZSAibGludXgvd2IzNXR4X2YuaCIKKwkjaW5jbHVkZSAibGludXgvd2IzNXJ4X2YuaCIKKyNlbHNlCisJI2luY2x1ZGUgIndidXNiX2YuaCIKKwkjaW5jbHVkZSAid2IzNXJlZ19mLmgiCisJI2luY2x1ZGUgIndiMzV0eF9mLmgiCisJI2luY2x1ZGUgIndiMzVyeF9mLmgiCisjZW5kaWYKKworLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vIEZ1bmN0aW9uIGRlY2xhcmF0aW9uCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQordm9pZCBoYWxfcmVtb3ZlX21hcHBpbmdfa2V5KCAgcGh3X2RhdGFfdCBwSHdEYXRhLCAgUFVDSEFSIHBtYWNfYWRkciApOwordm9pZCBoYWxfcmVtb3ZlX2RlZmF1bHRfa2V5KCAgcGh3X2RhdGFfdCBwSHdEYXRhLCAgdTMyIGluZGV4ICk7Cit1bnNpZ25lZCBjaGFyIGhhbF9zZXRfbWFwcGluZ19rZXkoICBwaHdfZGF0YV90IEFkYXB0ZXIsICBQVUNIQVIgcG1hY19hZGRyLCAgdTggbnVsbF9rZXksICB1OCB3ZXBfb24sICBQVUNIQVIgcHR4X3RzYywgIFBVQ0hBUiBwcnhfdHNjLCAgdTgga2V5X3R5cGUsICB1OCBrZXlfbGVuLCAgUFVDSEFSIHBrZXlfZGF0YSApOwordW5zaWduZWQgY2hhciBoYWxfc2V0X2RlZmF1bHRfa2V5KCAgcGh3X2RhdGFfdCBBZGFwdGVyLCAgdTggaW5kZXgsICB1OCBudWxsX2tleSwgIHU4IHdlcF9vbiwgIFBVQ0hBUiBwdHhfdHNjLCAgUFVDSEFSIHByeF90c2MsICB1OCBrZXlfdHlwZSwgIHU4IGtleV9sZW4sICBQVUNIQVIgcGtleV9kYXRhICk7Cit2b2lkIGhhbF9jbGVhcl9hbGxfZGVmYXVsdF9rZXkoICBwaHdfZGF0YV90IHBId0RhdGEgKTsKK3ZvaWQgaGFsX2NsZWFyX2FsbF9ncm91cF9rZXkoICBwaHdfZGF0YV90IHBId0RhdGEgKTsKK3ZvaWQgaGFsX2NsZWFyX2FsbF9tYXBwaW5nX2tleSggIHBod19kYXRhX3QgcEh3RGF0YSApOwordm9pZCBoYWxfY2xlYXJfYWxsX2tleSggIHBod19kYXRhX3QgcEh3RGF0YSApOwordm9pZCBoYWxfZ2V0X2V0aGVybmV0X2FkZHJlc3MoICBwaHdfZGF0YV90IHBId0RhdGEsICBQVUNIQVIgY3VycmVudF9hZGRyZXNzICk7Cit2b2lkIGhhbF9zZXRfZXRoZXJuZXRfYWRkcmVzcyggIHBod19kYXRhX3QgcEh3RGF0YSwgIFBVQ0hBUiBjdXJyZW50X2FkZHJlc3MgKTsKK3ZvaWQgaGFsX2dldF9wZXJtYW5lbnRfYWRkcmVzcyggIHBod19kYXRhX3QgcEh3RGF0YSwgIFBVQ0hBUiBwZXRoZXJuZXRfYWRkcmVzcyApOwordW5zaWduZWQgY2hhciBoYWxfaW5pdF9oYXJkd2FyZSggIHBod19kYXRhX3QgcEh3RGF0YSwgIFBBREFQVEVSIEFkYXB0ZXIgKTsKK3ZvaWQgaGFsX3NldF9wb3dlcl9zYXZlX21vZGUoICBwaHdfZGF0YV90IHBId0RhdGEsICB1bnNpZ25lZCBjaGFyIHBvd2VyX3NhdmUsICB1bnNpZ25lZCBjaGFyIHdha2V1cCwgIHVuc2lnbmVkIGNoYXIgZHRpbSApOwordm9pZCBoYWxfZ2V0X3Bvd2VyX3NhdmVfbW9kZSggIHBod19kYXRhX3QgcEh3RGF0YSwgICBQQk9PTEVBTiBwaW5fcHdyX3NhdmUgKTsKK3ZvaWQgaGFsX3NldF9zbG90X3RpbWUoICBwaHdfZGF0YV90IHBId0RhdGEsICB1OCB0eXBlICk7CisjZGVmaW5lIGhhbF9zZXRfYXRpbV93aW5kb3coIF9BLCBfQVRNICkKK3ZvaWQgaGFsX3NldF9yYXRlcyggIHBod19kYXRhX3QgcEh3RGF0YSwgIFBVQ0hBUiBwYnNzX3JhdGVzLCAgdTggbGVuZ3RoLCAgdW5zaWduZWQgY2hhciBiYXNpY19yYXRlX3NldCApOworI2RlZmluZSBoYWxfc2V0X2Jhc2ljX3JhdGVzKCBfQSwgX1IsIF9MICkgaGFsX3NldF9yYXRlcyggX0EsIF9SLCBfTCwgVFJVRSApCisjZGVmaW5lIGhhbF9zZXRfb3BfcmF0ZXMoIF9BLCBfUiwgX0wgKSBoYWxfc2V0X3JhdGVzKCBfQSwgX1IsIF9MLCBGQUxTRSApCit2b2lkIGhhbF9zdGFydF9ic3MoICBwaHdfZGF0YV90IHBId0RhdGEsICB1OCBtYWNfb3BfbW9kZSApOwordm9pZCBoYWxfam9pbl9yZXF1ZXN0KCAgcGh3X2RhdGFfdCBwSHdEYXRhLCAgdTggYnNzX3R5cGUgKTsgLy8gMDpCU1MgU1RBIDE6SUJTUyBTVEEvLwordm9pZCBoYWxfc3RvcF9zeW5jX2JzcyggIHBod19kYXRhX3QgcEh3RGF0YSApOwordm9pZCBoYWxfcmVzdW1lX3N5bmNfYnNzKCAgcGh3X2RhdGFfdCBwSHdEYXRhKTsKK3ZvaWQgaGFsX3NldF9haWQoICBwaHdfZGF0YV90IHBId0RhdGEsICB1MTYgYWlkICk7Cit2b2lkIGhhbF9zZXRfYnNzaWQoICBwaHdfZGF0YV90IHBId0RhdGEsICBQVUNIQVIgcGJzc2lkICk7Cit2b2lkIGhhbF9nZXRfYnNzaWQoICBwaHdfZGF0YV90IHBId0RhdGEsICBQVUNIQVIgcGJzc2lkICk7Cit2b2lkIGhhbF9zZXRfYmVhY29uX3BlcmlvZCggIHBod19kYXRhX3QgcEh3RGF0YSwgIHUxNiBiZWFjb25fcGVyaW9kICk7Cit2b2lkIGhhbF9zZXRfbGlzdGVuX2ludGVydmFsKCAgcGh3X2RhdGFfdCBwSHdEYXRhLCAgdTE2IGxpc3Rlbl9pbnRlcnZhbCApOwordm9pZCBoYWxfc2V0X2NhcF9pbmZvKCAgcGh3X2RhdGFfdCBwSHdEYXRhLCAgdTE2IGNhcGFiaWxpdHlfaW5mbyApOwordm9pZCBoYWxfc2V0X3NzaWQoICBwaHdfZGF0YV90IHBId0RhdGEsICBQVUNIQVIgcHNzaWQsICB1OCBzc2lkX2xlbiApOwordm9pZCBoYWxfc2V0X2N1cnJlbnRfY2hhbm5lbCggIHBod19kYXRhX3QgcEh3RGF0YSwgIENoYW5JbmZvIGNoYW5uZWwgKTsKK3ZvaWQgaGFsX3NldF9jdXJyZW50X2NoYW5uZWxfZXgoICBwaHdfZGF0YV90IHBId0RhdGEsICBDaGFuSW5mbyBjaGFubmVsICk7Cit2b2lkIGhhbF9nZXRfY3VycmVudF9jaGFubmVsKCAgcGh3X2RhdGFfdCBwSHdEYXRhLCAgQ2hhbkluZm8gKmNoYW5uZWwgKTsKK3ZvaWQgaGFsX3NldF9hY2NlcHRfYnJvYWRjYXN0KCAgcGh3X2RhdGFfdCBwSHdEYXRhLCAgdTggZW5hYmxlICk7Cit2b2lkIGhhbF9zZXRfYWNjZXB0X211bHRpY2FzdCggIHBod19kYXRhX3QgcEh3RGF0YSwgIHU4IGVuYWJsZSApOwordm9pZCBoYWxfc2V0X2FjY2VwdF9iZWFjb24oICBwaHdfZGF0YV90IHBId0RhdGEsICB1OCBlbmFibGUgKTsKK3ZvaWQgaGFsX3NldF9tdWx0aWNhc3RfYWRkcmVzcyggIHBod19kYXRhX3QgcEh3RGF0YSwgIFBVQ0hBUiBhZGRyZXNzLCAgdTggbnVtYmVyICk7Cit1OCBoYWxfZ2V0X2FjY2VwdF9iZWFjb24oICBwaHdfZGF0YV90IHBId0RhdGEgKTsKK3ZvaWQgaGFsX3N0b3AoICBwaHdfZGF0YV90IHBId0RhdGEgKTsKK3ZvaWQgaGFsX2hhbHQoICBwaHdfZGF0YV90IHBId0RhdGEsIHZvaWQgKnBwYV9kYXRhICk7Cit2b2lkIGhhbF9zdGFydF90eDAoICBwaHdfZGF0YV90IHBId0RhdGEgKTsKK3ZvaWQgaGFsX3NldF9waHlfdHlwZSggIHBod19kYXRhX3QgcEh3RGF0YSwgIHU4IFBoeVR5cGUgKTsKK3ZvaWQgaGFsX2dldF9waHlfdHlwZSggIHBod19kYXRhX3QgcEh3RGF0YSwgIHU4ICpQaHlUeXBlICk7Cit1bnNpZ25lZCBjaGFyIGhhbF9yZXNldF9oYXJkd2FyZSggIHBod19kYXRhX3QgcEh3RGF0YSwgIHZvaWQqIHBwYSApOwordm9pZCBoYWxfc2V0X2N3bWluKCAgcGh3X2RhdGFfdCBwSHdEYXRhLCAgdTgJY3dpbl9taW4gKTsKKyNkZWZpbmUgaGFsX2dldF9jd21pbiggX0EgKSAoIChfQSktPmN3bWluICkKK3ZvaWQgaGFsX3NldF9jd21heCggIHBod19kYXRhX3QgcEh3RGF0YSwgIHUxNiBjd2luX21heCApOworI2RlZmluZSBoYWxfZ2V0X2N3bWF4KCBfQSApICggKF9BKS0+Y3dtYXggKQordm9pZCBoYWxfc2V0X3Jzbl93cGEoICBwaHdfZGF0YV90IHBId0RhdGEsICB1MzIgKiBSU05fSUVfQml0bWFwICwgdTMyICogUlNOX09VSV90eXBlICwgdW5zaWduZWQgY2hhciBiRGVzaXJlZEF1dGhNb2RlKTsKKy8vczMyIGhhbF9nZXRfcnNzaSggIHBod19kYXRhX3QgcEh3RGF0YSwgIHUzMiBIYWxSc3NpICk7CitzMzIgaGFsX2dldF9yc3NpKCAgcGh3X2RhdGFfdCBwSHdEYXRhLCAgdTMyICpIYWxSc3NpQXJyeSwgIHU4IENvdW50ICk7CitzMzIgaGFsX2dldF9yc3NpX2JzcyggIHBod19kYXRhX3QgcEh3RGF0YSwgIHUxNiBpZHgsICB1OCBDb3VudCApOwordm9pZCBoYWxfc2V0X2Nvbm5lY3RfaW5mbyggIHBod19kYXRhX3QgcEh3RGF0YSwgIHVuc2lnbmVkIGNoYXIgYm9Db25uZWN0ICk7Cit1OCBoYWxfZ2V0X2VzdF9zcTMoICBwaHdfZGF0YV90IHBId0RhdGEsICB1OCBDb3VudCApOwordm9pZCBoYWxfbGVkX2NvbnRyb2xfMWEoICBwaHdfZGF0YV90IHBId0RhdGEgKTsKK3ZvaWQgaGFsX2xlZF9jb250cm9sKCAgdm9pZCogUzEsICBwaHdfZGF0YV90IHBId0RhdGEsICB2b2lkKiBTMywgIHZvaWQqIFM0ICk7Cit2b2lkIGhhbF9zZXRfcmZfcG93ZXIoICBwaHdfZGF0YV90IHBId0RhdGEsICB1OCBQb3dlckluZGV4ICk7IC8vIDIwMDYwNjIxIE1vZGlmeQordm9pZCBoYWxfcmVzZXRfY291bnRlciggIHBod19kYXRhX3QgcEh3RGF0YSApOwordm9pZCBoYWxfc2V0X3JhZGlvX21vZGUoICBwaHdfZGF0YV90IHBId0RhdGEsICB1bnNpZ25lZCBjaGFyIGJvVmFsdWUpOwordm9pZCBoYWxfZGVzY3JpcHRvcl9pbmRpY2F0ZSggIHBod19kYXRhX3QgcEh3RGF0YSwgIFBERVNDUklQVE9SIHBEZXMgKTsKK3U4IGhhbF9nZXRfYW50ZW5uYV9udW1iZXIoICBwaHdfZGF0YV90IHBId0RhdGEgKTsKK3ZvaWQgaGFsX3NldF9hbnRlbm5hX251bWJlciggIHBod19kYXRhX3QgcEh3RGF0YSwgdTggbnVtYmVyICk7Cit1MzIgaGFsX2dldF9ic3NfcGtfY250KCAgcGh3X2RhdGFfdCBwSHdEYXRhICk7CisjZGVmaW5lIGhhbF9nZXRfcmVnaW9uX2Zyb21fRUVQUk9NKCBfQSApICggKF9BKS0+V2IzNVJlZy5FRVBST01SZWdpb24gKQordm9pZCBoYWxfc2V0X2FjY2VwdF9wcm9taXNjdW91cwkJKCAgcGh3X2RhdGFfdCBwSHdEYXRhLCAgdTggZW5hYmxlKTsKKyNkZWZpbmUgaGFsX2dldF90eF9idWZmZXIoIF9BLCBfQiApIFdiMzVUeF9nZXRfdHhfYnVmZmVyKCBfQSwgX0IgKQordTggaGFsX2dldF9od19yYWRpb19vZmYJCQkoICBwaHdfZGF0YV90IHBId0RhdGEgKTsKKyNkZWZpbmUgaGFsX3NvZnR3YXJlX3NldCggX0EgKQkJKF9BLT5Tb2Z0d2FyZVNldCkKKyNkZWZpbmUgaGFsX2RyaXZlcl9pbml0X09LKCBfQSApCShfQS0+SXNJbml0T0spCisjZGVmaW5lIGhhbF9yc3NpX2JvdW5kYXJ5X2hpZ2goIF9BICkgKF9BLT5SU1NJX2hpZ2gpCisjZGVmaW5lIGhhbF9yc3NpX2JvdW5kYXJ5X2xvdyggX0EgKSAoX0EtPlJTU0lfbG93KQorI2RlZmluZSBoYWxfc2Nhbl9pbnRlcnZhbCggX0EgKQkJKF9BLT5TY2FuX0ludGVydmFsKQordm9pZCBoYWxfc2Nhbl9zdGF0dXNfaW5kaWNhdGUoICBwaHdfZGF0YV90IHBId0RhdGEsIHU4IHN0YXR1cyk7CS8vIDA6IGNvbXBsZXRlLCAxOiBpbiBwcm9ncmVzcwordm9pZCBoYWxfc3lzdGVtX3Bvd2VyX2NoYW5nZSggIHBod19kYXRhX3QgcEh3RGF0YSwgdTMyIFBvd2VyU3RhdGUgKTsgLy8gMjAwNTEyMzAgLT1EMCAxPUQxIC4uCit2b2lkIGhhbF9zdXJwcmlzZV9yZW1vdmUoICBwaHdfZGF0YV90IHBId0RhdGEgKTsKKworI2RlZmluZSBQSFlfREVCVUcoIG1zZywgYXJncy4uLiApCisKKworCit2b2lkIGhhbF9yYXRlX2NoYW5nZSggIHBod19kYXRhX3QgcEh3RGF0YSApOyAvLyBOb3RpZnkgdGhlIEhBTCByYXRlIGlzIGNoYW5naW5nIDIwMDYwNjEzLjEKK3Vuc2lnbmVkIGNoYXIgaGFsX2dldF9keHhfcmVnKCAgcGh3X2RhdGFfdCBwSHdEYXRhLCAgdTE2IG51bWJlciwgIFBVTE9ORyBwVmFsdWUgKTsKK3Vuc2lnbmVkIGNoYXIgaGFsX3NldF9keHhfcmVnKCAgcGh3X2RhdGFfdCBwSHdEYXRhLCAgdTE2IG51bWJlciwgIHUzMiB2YWx1ZSApOworI2RlZmluZSBoYWxfZ2V0X3RpbWVfY291bnQoIF9QICkJKF9QLT50aW1lX2NvdW50LzEwKQkvLyByZXR1cm4gMTAwbXMgY291bnQKKyNkZWZpbmUgaGFsX2RldGVjdF9lcnJvciggX1AgKQkJKF9QLT5XYlVzYi5EZXRlY3RDb3VudCkKK3Vuc2lnbmVkIGNoYXIgaGFsX3NldF9MRUQoICBwaHdfZGF0YV90IHBId0RhdGEsICB1MzIgTW9kZSApOyAvLyAyMDA2MTEwOCBmb3IgV1BTIGxlZCBjb250cm9sCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gVGhlIGZvbGxvdyBmdW5jdGlvbiBpcyB1bnVzZWQgZm9yIElTODlDMzUKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorI2RlZmluZSBoYWxfZGlzYWJsZV9pbnRlcnJ1cHQoX0EpCisjZGVmaW5lIGhhbF9lbmFibGVfaW50ZXJydXB0KF9BKQorI2RlZmluZSBoYWxfZ2V0X2ludGVycnVwdF90eXBlKCBfQSkKKyNkZWZpbmUgaGFsX2dldF9jbGVhcl9pbnRlcnJ1cHQoX0EpCisjZGVmaW5lIGhhbF9pYnNzX2Rpc2Nvbm5lY3QoX0EpIGhhbF9zdG9wX3N5bmNfYnNzKF9BKQorI2RlZmluZSBoYWxfam9pbl9yZXF1ZXN0X3N0b3AoX0EpCit1bnNpZ25lZCBjaGFyCWhhbF9pZGxlKCAgcGh3X2RhdGFfdCBwSHdEYXRhICk7CisjZGVmaW5lIHBhX3N0YWxsX2V4ZWN1dGlvbiggX0EgKQkvL09TX1NMRUVQKCAxICkKKyNkZWZpbmUgaHdfZ2V0X2N4eF9yZWcoIF9BLCBfQiwgX0MgKQorI2RlZmluZSBod19zZXRfY3h4X3JlZyggX0EsIF9CLCBfQyApCisjZGVmaW5lIGh3X2dldF9keHhfcmVnKCBfQSwgX0IsIF9DICkJaGFsX2dldF9keHhfcmVnKCBfQSwgX0IsIChQVUxPTkcpX0MgKQorI2RlZmluZSBod19zZXRfZHh4X3JlZyggX0EsIF9CLCBfQyApCWhhbF9zZXRfZHh4X3JlZyggX0EsIF9CLCAodTMyKV9DICkKKworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC93YmhhbF9zLmggYi9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC93YmhhbF9zLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWI4NjJmZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL3diaGFsX3MuaApAQCAtMCwwICsxLDYxNSBAQAorLy9bMjAwNDA3MjIgV0tdCisjZGVmaW5lIEhBTF9MRURfU0VUX01BU0sJCTB4MDAxYwkvLzIwMDYwOTAxIEV4dGVuZAorI2RlZmluZSBIQUxfTEVEX1NFVF9TSElGVAkJMgorCisvL3N1cHBvcnRlZCBSRiB0eXBlCisjZGVmaW5lIFJGX01BWElNXzI4MjUJCTAKKyNkZWZpbmUgUkZfTUFYSU1fMjgyNwkJMQorI2RlZmluZSBSRl9NQVhJTV8yODI4CQkyCisjZGVmaW5lIFJGX01BWElNXzI4MjkJCTMKKyNkZWZpbmUgUkZfTUFYSU1fVjEJCQkxNQorI2RlZmluZSBSRl9BSVJPSEFfMjIzMAkJMTYKKyNkZWZpbmUgUkZfQUlST0hBXzcyMzAJCTE3CisjZGVmaW5lIFJGX0FJUk9IQV8yMjMwUwkJMTgJLy8gMjAwNjA0MjAgQWRkIHRoaXMKKy8vICNkZWZpbmUgUkZfUkZNRF8yOTU5CQkzMgkvLyAyMDA2MDYyNiBSZW1vdmUgYWxsIGFib3V0IFJGTUQKKyNkZWZpbmUgUkZfV0JfMjQyCQkJMzMKKyNkZWZpbmUgUkZfV0JfMjQyXzEJCQkzNAkvLyAyMDA2MDYxOS41IEFkZAorI2RlZmluZSBSRl9ERUNJREVfQllfSU5GCTI1NQorCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFRoZSBmb2xsb3cgZGVmaW5lIGNvbm5lY3QgdG8gdXBwZXIgbGF5ZXIKKy8vCVVzZXIgbXVzdCBtb2RpZnkgZm9yIGNvbm5lY3Rpb24gYmV0d2VlbiBIQUwgYW5kIHVwcGVyIGxheWVyCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworCisKKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLyBDb21tb24gZGVmaW5lCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorI2RlZmluZSBIQUxfVVNCX01PREVfQlVSU1QoIF9IICkJKF9ILT5Tb2Z0d2FyZVNldCAmIDB4MjAgKSAvLyBCaXQgNSAyMDA2MDkwMSBNb2RpZnkKKworLy8gU2NhbiBpbnRlcnZhbAorI2RlZmluZSBTQ0FOX01BWF9DSE5MX1RJTUUJCQkJKDUwKQorCisvLyBGb3IgVHhMMiBGcmFtZSB0eXByIHJlY29nbmlzZQorI2RlZmluZSBGUkFNRV9UWVBFXzgwMl8zX0RBVEEJCQkwCisjZGVmaW5lIEZSQU1FX1RZUEVfODAyXzExX01BTkFHRU1FTlQJCTEKKyNkZWZpbmUgRlJBTUVfVFlQRV84MDJfMTFfTUFOQUdFTUVOVF9DSEFMTEVOR0UgIDIKKyNkZWZpbmUgRlJBTUVfVFlQRV84MDJfMTFfQ09OVFJPTAkJMworI2RlZmluZSBGUkFNRV9UWVBFXzgwMl8xMV9EQVRBCQkJNAorI2RlZmluZSBGUkFNRV9UWVBFX1BST01JU0NVT1VTCQkJNQorCisvLyBUaGUgZm9sbG93IGRlZmluaXRpb24gaXMgdXNlZCBmb3IgY29udmVydCB0aGUgZnJhbWUtLS0tLS0tLS0tLS0tLS0tLS0tLQorI2RlZmluZSBET1RfMTFfU0VRVUVOQ0VfT0ZGU0VUCQkyMiAvL1NlcXVlbmNlIGNvbnRyb2wgb2Zmc2V0CisjZGVmaW5lIERPVF8zX1RZUEVfT0ZGU0VUCQkJMTIKKyNkZWZpbmUgRE9UXzExX01BQ19IRUFERVJfU0laRQkJMjQKKyNkZWZpbmUgRE9UXzExX1NOQVBfU0laRQkJCTYKKyNkZWZpbmUgRE9UXzExX1RZUEVfT0ZGU0VUCQkJMzAgLy9UaGUgc3RhcnQgb2Zmc2V0IG9mIDgwMi4xMSBGcmFtZS4gVHlwZSBlbmNhcHN1bGF0dWluLgorI2RlZmluZSBERUZBVUxUX1NJRlNUSU1FCQkJMTAKKyNkZWZpbmUgREVGQVVMVF9GUkFHTUVOVF9USFJFU0hPTEQJCTIzNDYgLy8gTm8gZnJhZ21lbnQKKyNkZWZpbmUgREVGQVVMVF9NU0RVX0xJRkVfVElNRQkJCTB4ZmZmZgorCisjZGVmaW5lIExPTkdfUFJFQU1CTEVfUExVU19QTENQSEVBREVSX1RJTUUJCQkJCQkoMTQ0KzQ4KQorI2RlZmluZSBTSE9SVF9QUkVBTUJMRV9QTFVTX1BMQ1BIRUFERVJfVElNRSAJCQkJCSg3MisyNCkKKyNkZWZpbmUgUFJFQU1CTEVfUExVU19TSUdOQUxfUExVU19TSUdOQUxFWFRFTlNJT04JCQkJKDE2KzQrNikKKyNkZWZpbmUgVHN5bSA0CisKKy8vICBGcmFtZSBUeXBlIG9mIEJpdHMgKDIsIDMpLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjZGVmaW5lIE1BQ19UWVBFX01BTkFHRU1FTlQJCQkweDAwCisjZGVmaW5lIE1BQ19UWVBFX0NPTlRST0wJCQkweDA0CisjZGVmaW5lIE1BQ19UWVBFX0RBVEEJCQkJMHgwOAorI2RlZmluZSBNQVNLX0ZSQUdNRU5UX05VTUJFUgkJMHgwMDBGCisjZGVmaW5lIFNFUVVFTkNFX05VTUJFUl9TSElGVAkJNAorCisjZGVmaW5lICBIQUxfV09MX1RZUEVfV0FLRVVQX0ZSQU1FCQkweDAxCisjZGVmaW5lICBIQUxfV09MX1RZUEVfTUFHSUNfUEFDS0VUCQkweDAyCisKKy8vIDIwMDQwMTA2IEFEREVECisjZGVmaW5lIEhBTF9LRVlUWVBFX1dFUDQwICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIEhBTF9LRVlUWVBFX1dFUDEwNCAgICAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIEhBTF9LRVlUWVBFX1RLSVAgICAgICAgICAgICAgICAgICAgICAgICAyIC8vIDEyOCBiaXQga2V5CisjZGVmaW5lIEhBTF9LRVlUWVBFX0FFU19DQ01QICAgICAgICAgICAgICAgICAgICAzIC8vIDEyOCBiaXQga2V5CisKKy8vIEZvciBWTSBzdGF0ZQorZW51bSB7CisJVk1fU1RPUCA9IDAsCisJVk1fUlVOTklORywKKwlWTV9DT01QTEVURUQKK307CisKKy8vIEJlIHVzZWQgZm9yIDgwMi4xMSBtYWMgaGVhZGVyCit0eXBlZGVmIHN0cnVjdCBfTUFDX0ZSQU1FX0NPTlRST0wgeworCXU4CW1hY19mcmFtZV9pbmZvOyAvLyB0aGlzIGlzIGEgY29tYmluYXRpb24gb2YgdGhlIHByb3RvdmwgdmVyc2lvbiwgdHlwZSBhbmQgc3VidHlwZQorCXU4CXRvX2RzOjE7CisJdTgJZnJvbV9kczoxOworCXU4CW1vcmVfZnJhZzoxOworCXU4CXJldHJ5OjE7CisJdTgJcHdyX21ndDoxOworCXU4CW1vcmVfZGF0YToxOworCXU4CVdFUDoxOworCXU4CW9yZGVyOjE7Cit9IE1BQ19GUkFNRV9DT05UUk9MLCAqUE1BQ19GUkFNRV9DT05UUk9MOworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBOb3JtYWwgS2V5IHRhYmxlIGZvcm1hdAorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gVGhlIG9yZGVyIG9mIEtFWSBpbmRleCBpcyBNQVBQSU5HX0tFWV9TVEFSVF9JTkRFWCA+IEdST1VQX0tFWV9TVEFSVF9JTkRFWAorI2RlZmluZSBNQVhfS0VZX1RBQkxFCQkJCTI0CS8vIDI0IGVudHJ5IGZvciBzdG9yaW5nIGtleSBkYXRhCisjZGVmaW5lIEdST1VQX0tFWV9TVEFSVF9JTkRFWAkJNAorI2RlZmluZSBNQVBQSU5HX0tFWV9TVEFSVF9JTkRFWAkJOAordHlwZWRlZiBzdHJ1Y3QgX0tFWV9UQUJMRQoreworCXUzMglEVzBfVmFsaWQ6MTsKKwl1MzIJRFcwX051bGxLZXk6MTsKKwl1MzIJRFcwX1NlY3VyaXR5X01vZGU6MjsvLzA6V0VQIDQwIGJpdCAxOldFUCAxMDQgYml0IDI6VEtJUCAxMjggYml0IDM6Q0NNUCAxMjggYml0CisJdTMyCURXMF9XRVBPTjoxOworCXUzMglEVzBfUkVTRVJWRUQ6MTE7CisJdTMyCURXMF9BZGRyZXNzMToxNjsKKworCXUzMglEVzFfQWRkcmVzczI7CisKKwl1MzIJRFcyX1J4U2VxdWVuY2VDb3VudDE7CisKKwl1MzIJRFczX1J4U2VxdWVuY2VDb3VudDI6MTY7CisJdTMyCURXM19SRVNFUlZFRDoxNjsKKworCXUzMglEVzRfVHhTZXF1ZW5jZUNvdW50MTsKKworCXUzMglEVzVfVHhTZXF1ZW5jZUNvdW50MjoxNjsKKwl1MzIJRFc1X1JFU0VSVkVEOjE2OworCit9IEtFWV9UQUJMRSwgKlBLRVlfVEFCTEU7CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIAkJCSBEZXNjcmlwdG9yCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjZGVmaW5lIE1BWF9ERVNDUklQVE9SX0JVRkZFUl9JTkRFWAk4CS8vIEhhdmUgdG8gbXVsdGlwbGUgb2YgMgorLy8jZGVmaW5lIEZMQUdfRVJST1JfVFhfTUFTSwkJCWNwdV90b19sZTMyKDB4MDAwMDAwYmYpIC8vMjAwNjEwMDkgbWFya2VkIGJ5IGFuc29uJ3MgZW5kaWFuCisjZGVmaW5lIEZMQUdfRVJST1JfVFhfTUFTSwkJCTB4MDAwMDAwYmYgIC8vMjAwNjEwMDkgYW5zb24ncyBlbmRpYW4KKy8vI2RlZmluZSBGTEFHX0VSUk9SX1JYX01BU0sJCQkweDAwMDAwYzNmCisvLyNkZWZpbmUgRkxBR19FUlJPUl9SWF9NQVNLCQkJY3B1X3RvX2xlMzIoMHgwMDAwMDgzZikJLy8yMDA2MTAwOSBtYXJrZWQgYnkgYW5zb24ncyBlbmRpYW4KKwkJCQkJCQkJCS8vRG9uJ3QgY2FyZSByZXBsYXkgZXJyb3IsCisJCQkJCQkJCQkJCQkvL2l0IGlzIGhhbmRsZWQgYnkgUy9XCisjZGVmaW5lIEZMQUdfRVJST1JfUlhfTUFTSwkJCTB4MDAwMDA4M2YJLy8yMDA2MDkyNiBhbnNvbidzIGVuZGlhbgorCisjZGVmaW5lIEZMQUdfQkFORF9SWF9NQVNLCQkJMHgxMDAwMDAwMAkvL0JpdCAyOAorCit0eXBlZGVmIHN0cnVjdCBfUjAwX0RFU0NSSVBUT1IKK3sKKwl1bmlvbgorCXsKKwkJdTMyCXZhbHVlOworCQkjaWZkZWYgX0JJR19FTkRJQU5fICAvLzIwMDYwOTI2IGFuc29uJ3MgZW5kaWFuCisJCXN0cnVjdAorCQl7CisJCQl1MzIJUjAwX3BhY2tldF9vcl9idWZmZXJfc3RhdHVzOjE7CisJCQl1MzIJUjAwX3BhY2tldF9pbl9maWZvOjE7CisJCQl1MzIJUjAwX1JFU0VSVkVEOjI7CisJCQl1MzIJUjAwX3JlY2VpdmVfYnl0ZV9jb3VudDoxMjsKKwkJCXUzMglSMDBfcmVjZWl2ZV90aW1lX2luZGV4OjE2OworCQl9OworCQkjZWxzZQorCQlzdHJ1Y3QKKwkJeworCQkJdTMyCVIwMF9yZWNlaXZlX3RpbWVfaW5kZXg6MTY7CisJCQl1MzIJUjAwX3JlY2VpdmVfYnl0ZV9jb3VudDoxMjsKKwkJCXUzMglSMDBfUkVTRVJWRUQ6MjsKKwkJCXUzMglSMDBfcGFja2V0X2luX2ZpZm86MTsKKwkJCXUzMglSMDBfcGFja2V0X29yX2J1ZmZlcl9zdGF0dXM6MTsKKwkJfTsKKwkJI2VuZGlmCisJfTsKK30gUjAwX0RFU0NSSVBUT1IsICpQUjAwX0RFU0NSSVBUT1I7CisKK3R5cGVkZWYgc3RydWN0IF9UMDBfREVTQ1JJUFRPUgoreworCXVuaW9uCisJeworCQl1MzIJdmFsdWU7CisJCSNpZmRlZiBfQklHX0VORElBTl8gIC8vMjAwNjEwMDkgYW5zb24ncyBlbmRpYW4KKwkJc3RydWN0CisJCXsKKwkJCXUzMglUMDBfZmlyc3RfbXBkdToxOyAvLyBmb3IgaGFyZHdhcmUgdXNlCisJCQl1MzIJVDAwX2xhc3RfbXBkdToxOyAvLyBmb3IgaGFyZHdhcmUgdXNlCisJCQl1MzIJVDAwX0lzTGFzdE1wZHU6MTsvLyAwOiBub3QgICAxOlllcyBmb3Igc29mdHdhcmUgdXNlZAorCQkJdTMyCVQwMF9JZ25vcmVSZXN1bHQ6MTsvLyBUaGUgc2FtZSBtZWNoYW5pc20gd2l0aCBUMDAgc2V0dGluZy4gMDUwMTExIE1vZGlmeSBmb3IgVFMKKwkJCXUzMglUMDBfUkVTRVJWRURfSUQ6MjsvLzMgYml0IElEIHJlc2VydmVkCisJCQl1MzIJVDAwX3R4X3BhY2tldF9pZDo0Oy8vOTMwNTE5LjQuZSA5MzA4MTAuMy5jCisJCQl1MzIJVDAwX1JFU0VSVkVEOjQ7CisJCQl1MzIJVDAwX2hlYWRlcl9sZW5ndGg6NjsKKwkJCXUzMglUMDBfZnJhbWVfbGVuZ3RoOjEyOworCQl9OworCQkjZWxzZQorCQlzdHJ1Y3QKKwkJeworCQkJdTMyCVQwMF9mcmFtZV9sZW5ndGg6MTI7CisJCQl1MzIJVDAwX2hlYWRlcl9sZW5ndGg6NjsKKwkJCXUzMglUMDBfUkVTRVJWRUQ6NDsKKwkJCXUzMglUMDBfdHhfcGFja2V0X2lkOjQ7Ly85MzA1MTkuNC5lIDkzMDgxMC4zLmMKKwkJCXUzMglUMDBfUkVTRVJWRURfSUQ6MjsvLzMgYml0IElEIHJlc2VydmVkCisJCQl1MzIJVDAwX0lnbm9yZVJlc3VsdDoxOy8vIFRoZSBzYW1lIG1lY2hhbmlzbSB3aXRoIFQwMCBzZXR0aW5nLiAwNTAxMTEgTW9kaWZ5IGZvciBUUworCQkJdTMyCVQwMF9Jc0xhc3RNcGR1OjE7Ly8gMDogbm90ICAgMTpZZXMgZm9yIHNvZnR3YXJlIHVzZWQKKwkJCXUzMglUMDBfbGFzdF9tcGR1OjE7IC8vIGZvciBoYXJkd2FyZSB1c2UKKwkJCXUzMglUMDBfZmlyc3RfbXBkdToxOyAvLyBmb3IgaGFyZHdhcmUgdXNlCisJCX07CisJCSNlbmRpZgorCX07Cit9IFQwMF9ERVNDUklQVE9SLCAqUFQwMF9ERVNDUklQVE9SOworCit0eXBlZGVmIHN0cnVjdCBfUjAxX0RFU0NSSVBUT1IKK3sKKwl1bmlvbgorCXsKKwkJdTMyCXZhbHVlOworCQkjaWZkZWYgX0JJR19FTkRJQU5fIC8vMjAwNjA5MjYgYWRkIGJ5IGFuc29uJ3MgZW5kaWFuCisJCXN0cnVjdAorCQl7CisJCQl1MzIJUjAxX1JFU0VSVkVEOjM7CisJCQl1MzIJUjAxX21vZF90eXBlOjE7CisJCQl1MzIJUjAxX3ByZV90eXBlOjE7CisJCQl1MzIJUjAxX2RhdGFfcmF0ZTozOworCQkJdTMyCVIwMV9BR0Nfc3RhdGU6ODsKKwkJCXUzMglSMDFfTE5BX3N0YXRlOjI7CisJCQl1MzIJUjAxX2RlY3J5cHRpb25fbWV0aG9kOjI7CisJCQl1MzIJUjAxX21pY19lcnJvcjoxOworCQkJdTMyCVIwMV9yZXBsYXk6MTsKKwkJCXUzMglSMDFfYnJvYWRjYXN0X2ZyYW1lOjE7CisJCQl1MzIJUjAxX211bHRpY2FzdF9mcmFtZToxOworCQkJdTMyCVIwMV9kaXJlY3RlZF9mcmFtZToxOworCQkJdTMyCVIwMV9yZWNlaXZlX2ZyYW1lX2FudGVubmFfc2VsZWN0aW9uOjE7CisJCQl1MzIJUjAxX2ZyYW1lX3JlY2VpdmVfZHVyaW5nX2F0aW1fd2luZG93OjE7CisJCQl1MzIJUjAxX3Byb3RvY29sX3ZlcnNpb25fZXJyb3I6MTsKKwkJCXUzMglSMDFfYXV0aGVudGljYXRpb25fZnJhbWVfaWN2X2Vycm9yOjE7CisJCQl1MzIJUjAxX251bGxfa2V5X3RvX2F1dGhlbnRpY2F0aW9uX2ZyYW1lOjE7CisJCQl1MzIJUjAxX2ljdl9lcnJvcjoxOworCQkJdTMyCVIwMV9jcmNfZXJyb3I6MTsKKwkJfTsKKwkJI2Vsc2UKKwkJc3RydWN0CisJCXsKKwkJCXUzMglSMDFfY3JjX2Vycm9yOjE7CisJCQl1MzIJUjAxX2ljdl9lcnJvcjoxOworCQkJdTMyCVIwMV9udWxsX2tleV90b19hdXRoZW50aWNhdGlvbl9mcmFtZToxOworCQkJdTMyCVIwMV9hdXRoZW50aWNhdGlvbl9mcmFtZV9pY3ZfZXJyb3I6MTsKKwkJCXUzMglSMDFfcHJvdG9jb2xfdmVyc2lvbl9lcnJvcjoxOworCQkJdTMyCVIwMV9mcmFtZV9yZWNlaXZlX2R1cmluZ19hdGltX3dpbmRvdzoxOworCQkJdTMyCVIwMV9yZWNlaXZlX2ZyYW1lX2FudGVubmFfc2VsZWN0aW9uOjE7CisJCQl1MzIJUjAxX2RpcmVjdGVkX2ZyYW1lOjE7CisJCQl1MzIJUjAxX211bHRpY2FzdF9mcmFtZToxOworCQkJdTMyCVIwMV9icm9hZGNhc3RfZnJhbWU6MTsKKwkJCXUzMglSMDFfcmVwbGF5OjE7CisJCQl1MzIJUjAxX21pY19lcnJvcjoxOworCQkJdTMyCVIwMV9kZWNyeXB0aW9uX21ldGhvZDoyOworCQkJdTMyCVIwMV9MTkFfc3RhdGU6MjsKKwkJCXUzMglSMDFfQUdDX3N0YXRlOjg7CisJCQl1MzIJUjAxX2RhdGFfcmF0ZTozOworCQkJdTMyCVIwMV9wcmVfdHlwZToxOworCQkJdTMyCVIwMV9tb2RfdHlwZToxOworCQkJdTMyCVIwMV9SRVNFUlZFRDozOworCQl9OworCQkjZW5kaWYKKwl9OworfSBSMDFfREVTQ1JJUFRPUiwgKlBSMDFfREVTQ1JJUFRPUjsKKwordHlwZWRlZiBzdHJ1Y3QgX1QwMV9ERVNDUklQVE9SCit7CisJdW5pb24KKwl7CisJCXUzMgl2YWx1ZTsKKwkJI2lmZGVmIF9CSUdfRU5ESUFOXyAvLzIwMDYxMDA5IGFuc29uJ3MgZW5kaWFuCisJCXN0cnVjdAorCQl7CisJCQl1MzIJVDAxX3J0c19jdHNfZHVyYXRpb246MTY7CisJCQl1MzIJVDAxX2ZhbGxfYmFja19yYXRlOjM7CisJCQl1MzIJVDAxX2FkZF9ydHM6MTsKKwkJCXUzMglUMDFfYWRkX2N0czoxOworCQkJdTMyCVQwMV9tb2R1bGF0aW9uX3R5cGU6MTsKKwkJCXUzMglUMDFfcGxjcF9oZWFkZXJfbGVuZ3RoOjE7CisJCQl1MzIJVDAxX3RyYW5zbWl0X3JhdGU6MzsKKwkJCXUzMglUMDFfd2VwX2lkOjI7CisJCQl1MzIJVDAxX2FkZF9jaGFsbGVuZ2VfdGV4dDoxOworCQkJdTMyCVQwMV9pbmhpYml0X2NyYzoxOworCQkJdTMyCVQwMV9sb29wX2JhY2tfd2VwX21vZGU6MTsKKwkJCXUzMglUMDFfcmV0cnlfYWJvcnRfZWJhYmxlOjE7CisJCX07CisJCSNlbHNlCisJCXN0cnVjdAorCQl7CisJCQl1MzIJVDAxX3JldHJ5X2Fib3J0X2ViYWJsZToxOworCQkJdTMyCVQwMV9sb29wX2JhY2tfd2VwX21vZGU6MTsKKwkJCXUzMglUMDFfaW5oaWJpdF9jcmM6MTsKKwkJCXUzMglUMDFfYWRkX2NoYWxsZW5nZV90ZXh0OjE7CisJCQl1MzIJVDAxX3dlcF9pZDoyOworCQkJdTMyCVQwMV90cmFuc21pdF9yYXRlOjM7CisJCQl1MzIJVDAxX3BsY3BfaGVhZGVyX2xlbmd0aDoxOworCQkJdTMyCVQwMV9tb2R1bGF0aW9uX3R5cGU6MTsKKwkJCXUzMglUMDFfYWRkX2N0czoxOworCQkJdTMyCVQwMV9hZGRfcnRzOjE7CisJCQl1MzIJVDAxX2ZhbGxfYmFja19yYXRlOjM7CisJCQl1MzIJVDAxX3J0c19jdHNfZHVyYXRpb246MTY7CisJCX07CisJCSNlbmRpZgorCX07Cit9IFQwMV9ERVNDUklQVE9SLCAqUFQwMV9ERVNDUklQVE9SOworCit0eXBlZGVmIHN0cnVjdCBfVDAyX0RFU0NSSVBUT1IKK3sKKwl1bmlvbgorCXsKKwkJdTMyCXZhbHVlOworCQkjaWZkZWYgX0JJR19FTkRJQU5fICAvLzIwMDYxMDA5IGFkZCBieSBhbnNvbidzIGVuZGlhbgorCQlzdHJ1Y3QKKwkJeworCQkJdTMyCVQwMl9Jc0xhc3RNcGR1OjE7Ly8gVGhlIHNhbWUgbWVjaGFuaXNtIHdpdGggVDAwIHNldHRpbmcKKwkJCXUzMglUMDJfSWdub3JlUmVzdWx0OjE7Ly8gVGhlIHNhbWUgbWVjaGFuaXNtIHdpdGggVDAwIHNldHRpbmcuIDA1MDExMSBNb2RpZnkgZm9yIFRTCisJCQl1MzIJVDAyX1JFU0VSVkVEX0lEOjI7Ly8gVGhlIHNhbWUgbWVjaGFuaXNtIHdpdGggVDAwIHNldHRpbmcKKwkJCXUzMglUMDJfVHhfUGt0SUQ6NDsKKwkJCXUzMglUMDJfTVBEVV9DbnQ6NDsKKwkJCXUzMglUMDJfUlRTX0NudDo0OworCQkJdTMyCVQwMl9SRVNFUlZFRDo3OworCQkJdTMyCVQwMl90cmFuc21pdF9jb21wbGV0ZToxOworCQkJdTMyCVQwMl90cmFuc21pdF9hYm9ydF9kdWVfdG9fVEJUVDoxOworCQkJdTMyCVQwMl9lZmZlY3RpdmVfdHJhbnNtaXNzaW9uX3JhdGU6MTsKKwkJCXUzMglUMDJfdHJhbnNtaXRfd2l0aG91dF9lbmNyeXB0aW9uX2R1ZV90b193ZXBfb25fZmFsc2U6MTsKKwkJCXUzMglUMDJfZGlzY2FyZF9kdWVfdG9fbnVsbF93ZXBfa2V5OjE7CisJCQl1MzIJVDAyX1JFU0VSVkVEXzE6MTsKKwkJCXUzMglUMDJfb3V0X29mX01heFR4TVNEVUxpZnRUaW1lOjE7CisJCQl1MzIJVDAyX3RyYW5zbWl0X2Fib3J0OjE7CisJCQl1MzIJVDAyX3RyYW5zbWl0X2ZhaWw6MTsKKwkJfTsKKwkJI2Vsc2UKKwkJc3RydWN0CisJCXsKKwkJCXUzMglUMDJfdHJhbnNtaXRfZmFpbDoxOworCQkJdTMyCVQwMl90cmFuc21pdF9hYm9ydDoxOworCQkJdTMyCVQwMl9vdXRfb2ZfTWF4VHhNU0RVTGlmdFRpbWU6MTsKKwkJCXUzMglUMDJfUkVTRVJWRURfMToxOworCQkJdTMyCVQwMl9kaXNjYXJkX2R1ZV90b19udWxsX3dlcF9rZXk6MTsKKwkJCXUzMglUMDJfdHJhbnNtaXRfd2l0aG91dF9lbmNyeXB0aW9uX2R1ZV90b193ZXBfb25fZmFsc2U6MTsKKwkJCXUzMglUMDJfZWZmZWN0aXZlX3RyYW5zbWlzc2lvbl9yYXRlOjE7CisJCQl1MzIJVDAyX3RyYW5zbWl0X2Fib3J0X2R1ZV90b19UQlRUOjE7CisJCQl1MzIJVDAyX3RyYW5zbWl0X2NvbXBsZXRlOjE7CisJCQl1MzIJVDAyX1JFU0VSVkVEOjc7CisJCQl1MzIJVDAyX1JUU19DbnQ6NDsKKwkJCXUzMglUMDJfTVBEVV9DbnQ6NDsKKwkJCXUzMglUMDJfVHhfUGt0SUQ6NDsKKwkJCXUzMglUMDJfUkVTRVJWRURfSUQ6MjsvLyBUaGUgc2FtZSBtZWNoYW5pc20gd2l0aCBUMDAgc2V0dGluZworCQkJdTMyCVQwMl9JZ25vcmVSZXN1bHQ6MTsvLyBUaGUgc2FtZSBtZWNoYW5pc20gd2l0aCBUMDAgc2V0dGluZy4gMDUwMTExIE1vZGlmeSBmb3IgVFMKKwkJCXUzMglUMDJfSXNMYXN0TXBkdToxOy8vIFRoZSBzYW1lIG1lY2hhbmlzbSB3aXRoIFQwMCBzZXR0aW5nCisJCX07CisJCSNlbmRpZgorCX07Cit9IFQwMl9ERVNDUklQVE9SLCAqUFQwMl9ERVNDUklQVE9SOworCit0eXBlZGVmIHN0cnVjdCBfREVTQ1JJUFRPUiB7CQkvLyBTa2lwIGxlbmd0aCA9IDggRFdPUkQKKwkvLyBJRCBmb3IgZGVzY3JpcHRvciAtLS0sIFRoZSBmaWVsZCBkb2Vzbid0IGJlIGNsZWFyZCBpbiB0aGUgb3BlcmF0aW9uIG9mIERlc2NyaXB0b3IgZGVmaW5pdGlvbgorCXU4CURlc2NyaXB0b3JfSUQ7CisJLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tVGhlIGFib3ZlIHJlZ2lvbiBkb2Vzbid0IGJlIGNsZWFyZWQgYnkgREVTQ1JJUFRPUl9SRVNFVC0tLS0tLQorCXU4CVJFU0VSVkVEWzNdOworCisJdTE2CUZyYWdtZW50VGhyZXNob2xkOworCXU4CUludGVybmFsVXNlZDsvL09ubHkgY2FuIGJlIHVzZWQgYnkgb3BlcmF0aW9uIG9mIGRlc2NyaXB0b3IgZGVmaW5pdGlvbgorCXU4CVR5cGU7Ly8gMDogODAyLjMJMTo4MDIuMTEgZGF0YSBmcmFtZQkyOjgwMi4xMSBtYW5hZ2VtZW50IGZyYW1lCisKKwl1OAlQcmVhbWJsZU1vZGU7Ly8gMDogc2hvcnQgMTpsb25nCisJdTgJVHhSYXRlOworCXU4CUZyYWdtZW50Q291bnQ7CisJdTgJRWFwRml4OyAvLyBGb3Igc3BlZWQgdXAga2V5IGluc3RhbGwKKworCS8vIEZvciBSMDAgYW5kIFQwMCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJdW5pb24KKwl7CisJCVIwMF9ERVNDUklQVE9SCVIwMDsKKwkJVDAwX0RFU0NSSVBUT1IJVDAwOworCX07CisKKwkvLyBGb3IgUjAxIGFuZCBUMDEgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCXVuaW9uCisJeworCQlSMDFfREVTQ1JJUFRPUglSMDE7CisJCVQwMV9ERVNDUklQVE9SCVQwMTsKKwl9OworCisJLy8gRm9yIFIwMiBhbmQgVDAyIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwl1bmlvbgorCXsKKwkJdTMyCQkJUjAyOworCQlUMDJfREVTQ1JJUFRPUglUMDI7CisJfTsKKworCS8vIEZvciBSMDMgYW5kIFQwMyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJLy8gRm9yIHNvZnR3YXJlIHVzZWQKKwl1bmlvbgorCXsKKwkJdTMyCVIwMzsKKwkJdTMyCVQwMzsKKwkJc3RydWN0CisJCXsKKwkJCXU4CWJ1ZmZlcl9udW1iZXI7CisJCQl1OAlidWZmZXJfc3RhcnRfaW5kZXg7CisJCQl1MTYJYnVmZmVyX3RvdGFsX3NpemU7CisJCX07CisJfTsKKworCS8vIEZvciBzdG9yaW5nIHRoZSBidWZmZXIKKwl1MTYJYnVmZmVyX3NpemVbIE1BWF9ERVNDUklQVE9SX0JVRkZFUl9JTkRFWCBdOworCXZvaWQqCWJ1ZmZlcl9hZGRyZXNzWyBNQVhfREVTQ1JJUFRPUl9CVUZGRVJfSU5ERVggXTsvLzkzMTEzMC40LnEKKworfSBERVNDUklQVE9SLCAqUERFU0NSSVBUT1I7CisKKworI2RlZmluZSBERUZBVUxUX05VTExfUEFDS0VUX0NPVU5UCQkxODAwMDAJLy8yMDA2MDgyOC4xIEFkZC4gMTgwIHNlY29uZHMKKworI2RlZmluZSBNQVhfVFhWR0FfRUVQUk9NCTkJLy9Ib3cgbWFueSB3b3JkKHUxNikgb2YgRUVQUk9NIHdpbGwgYmUgdXNlZCBmb3IgVHhWR0EKKyNkZWZpbmUgTUFYX1JGX1BBUkFNRVRFUgkzMgorCit0eXBlZGVmIHN0cnVjdCBfVFhWR0FfRk9SXzUwIHsKKwl1OAlDaGFuTm87CisJdTgJVHhWZ2FWYWx1ZTsKK30gVFhWR0FfRk9SXzUwOworCisKKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLyBEZXZpY2UgcmVsYXRlZCBpbmNsdWRlCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisjaW5jbHVkZSAibGludXgvd2J1c2Jfcy5oIgorI2luY2x1ZGUgImxpbnV4L3diMzVyZWdfcy5oIgorI2luY2x1ZGUgImxpbnV4L3diMzV0eF9zLmgiCisjaW5jbHVkZSAibGludXgvd2IzNXJ4X3MuaCIKKworCisvLyBGb3IgSGFsIHVzaW5nID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQordHlwZWRlZiBzdHJ1Y3QgX0hXX0RBVEFfVAoreworCS8vIEZvciBjb21wYXRpYmxlIHdpdGggMzMKKwl1MzIJcmV2aXNpb247CisJdTMyCUJCM2NfY2FsOyAvLyBUaGUgdmFsdWUgZm9yIFR4IGNhbGlicmF0aW9uIGNvbWVzIGZyb20gRUVQUk9NCisJdTMyCUJCNTRfY2FsOyAvLyBUaGUgdmFsdWUgZm9yIFJ4IGNhbGlicmF0aW9uIGNvbWVzIGZyb20gRUVQUk9NCisKKworCS8vIEZvciBzdXJwcmlzZSByZW1vdmUKKwl1MzIJU3VycHJpc2VSZW1vdmU7IC8vIDA6IE5vcm1hbCAxOiBTdXJwcmlzZSByZW1vdmUKKwl1OAlJbml0aWFsUmVzb3VyY2U7CisJdTgJSXNLZXlQcmVTZXQ7CisJdTgJQ2FsT25lVGltZTsgLy8gMjAwNjA2MzAuMQorCisJdTgJVkNPX3RyaW07CisKKwkvLyBGb3IgRml4IDEnc3QgRE1BIGJ1ZworCXUzMglGcmFnQ291bnQ7CisJdTMyCURNQUZpeDsgLy9WMV9ETUFfRklYIFRoZSB2YXJpYWJsZSBjYW4gYmUgcmVtb3ZlZCBpZiBkcml2ZXIgd2FudCB0byBzYXZlIG1lbSBzcGFjZSBmb3IgVjIuCisKKwkvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCS8vIEZvciBVU0IgZHJpdmVyLCBoYWwgbmVlZCBtb3JlIHZhcmlhYmxlcy4gRHVlIHRvCisJLy8JMS4gTkRJUy1XRE0gb3BlcmF0aW9uCisJLy8JMi4gVGhlIFNNRSwgTUxNRSBhbmQgT0xEIE1EUyBuZWVkIEFkYXB0ZXIgc3RydWN0dXJlLCBidXQgdGhlIGRyaXZlciB1bmRlciBIQUwgZG9lc24ndAorCS8vCQloYXZlIHRoYXQgcGFyYW1ldGVyIHdoZW4gcmVjZWl2aW5nIGFuZCBpbmRpY2F0aW5nIHBhY2tldC4KKwkvLwkJVGhlIE1EUyBtdXN0IGlucHV0IHRoZSBBZGFwdGVyIHBvaW50ZXIgYXMgdGhlIHNlY29uZCBwYXJhbWV0ZXIgb2YgaGFsX2luaXRfaGFyZHdhcmUuCisJLy8JCVRoZSBmdW5jdGlvbiB1c2FnZSBpcyBkaWZmZXJlbnQgdGhhbiBQQ0kgZHJpdmVyLgorCS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJdm9pZCogQWRhcHRlcjsKKworCS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwkvLyBEZWZpbml0aW9uIGZvciBNQUMgYWRkcmVzcworCS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwl1OAkJUGVybWFuZW50TWFjQWRkcmVzc1tFVEhfTEVOR1RIX09GX0FERFJFU1MgKyAyXTsgLy8gVGhlIEVudGhlcm5ldCBhZGRyIHRoYXQgYXJlIHN0b3JlZCBpbiBFRVBST00uICArIDIgdG8gOC1ieXRlIGFsaWdubWVudAorCXU4CQlDdXJyZW50TWFjQWRkcmVzc1tFVEhfTEVOR1RIX09GX0FERFJFU1MgKyAyXTsgLy8gVGhlIEVudGhlcm5ldCBhZGRyIHRoYXQgYXJlIGluIHVzZWQuICArIDIgdG8gOC1ieXRlIGFsaWdubWVudAorCisJLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwkvLyBEZWZpbml0aW9uIGZvciA4MDIuMTEKKwkvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCVBVQ0hBUglic3NpZF9wb2ludGVyOyAvLyBVc2VkIGJ5IGhhbF9nZXRfYnNzaWQgZm9yIHJldHVybiB2YWx1ZQorCXU4CWJzc2lkWzhdOy8vIE9ubHkgNiBieXRlIHdpbGwgYmUgdXNlZC4gOCBieXRlIGlzIHJlcXVpcmVkIGZvciByZWFkIGJ1ZmZlcgorCXU4CXNzaWRbMzJdOy8vIG1heGltdW0gc3NpZCBsZW5ndGggaXMgMzIgYnl0ZQorCisJdTE2CUFJRDsKKwl1OAlzc2lkX2xlbmd0aDsKKwl1OAlDaGFubmVsOworCisJdTE2CUxpc3RlbkludGVydmFsOworCXUxNglDYXBhYmlsaXR5SW5mb3JtYXRpb247CisKKwl1MTYJQmVhY29uUGVyaW9kOworCXUxNglQcm9iZURlbGF5OworCisJdTgJYnNzX3R5cGU7Ly8gMDogSUJTU19ORVQgb3IgMTpFU1NfTkVUCisJdTgJcHJlYW1ibGU7Ly8gMDogc2hvcnQgcHJlYW1ibGUsIDE6IGxvbmcgcHJlYW1ibGUKKwl1OAlzbG90X3RpbWVfc2VsZWN0Oy8vIDkgb3IgMjAgdmFsdWUKKwl1OAlwaHlfdHlwZTsvLyBQaHkgc2VsZWN0CisKKwl1MzIJcGh5X3BhcmFbTUFYX1JGX1BBUkFNRVRFUl07CisJdTMyCXBoeV9udW1iZXI7CisKKwl1MzIJQ3VycmVudFJhZGlvU3c7IC8vIDIwMDYwMzIwLjIgMDpPbiAxOk9mZgorCXUzMglDdXJyZW50UmFkaW9IdzsgLy8gMjAwNjA4MjUgMDpPbiAxOk9mZgorCisJUFVDSEFSCXBvd2VyX3NhdmVfcG9pbnQ7ICAvLyBVc2VkIGJ5IGhhbF9nZXRfcG93ZXJfc2F2ZV9tb2RlIGZvciByZXR1cm4gdmFsdWUKKwl1OAljd21pbjsKKwl1OAlkZXNpcmVkX3Bvd2VyX3NhdmU7CisJdTgJZHRpbTsvLyBJcyBydW5uaW5nIGR0aW0KKwl1OAltYXBwaW5nX2tleV9yZXBsYWNlX2luZGV4Oy8vSW4gS2V5IHRhYmxlLCB0aGUgbmV4dCBpbmRleCBiZSByZXBsYWNlZCA5MzExMzAuNC5yCisKKwl1MTYJTWF4UmVjZWl2ZUxpZmVUaW1lOworCXUxNglGcmFnbWVudFRocmVzaG9sZDsKKwl1MTYJRnJhZ21lbnRUaHJlc2hvbGRfdG1wOworCXUxNgljd21heDsKKworCXU4CUtleV9zbG90W01BWF9LRVlfVEFCTEVdWzhdOyAvL093bmVyc2hpcCByZWNvcmQgZm9yIGtleSBzbG90LiBGb3IgQWxpZ25tZW50CisJdTMyCUtleV9jb250ZW50W01BWF9LRVlfVEFCTEVdWzEyXTsgLy8gMTBEVyBmb3IgZWFjaCBlbnRyeSArIDIgZm9yIGJ1cnN0IGNvbW1hbmQoIE9mZiBhbmQgT24gdmFsaWQgYml0KQorCXU4CUN1cnJlbnREZWZhdWx0S2V5SW5kZXg7CisJdTMyCUN1cnJlbnREZWZhdWx0S2V5TGVuZ3RoOworCisJLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwkvLyBWYXJpYWJsZSBmb3IgZWFjaCBtb2R1bGUKKwkvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCVdCVVNCCQlXYlVzYjsgLy8gTmVlZCBXYlVzYi5oCisJV0IzNVJFRwkJV2IzNVJlZzsgLy8gTmVlZCBXYjM1UmVnLmgKKwlXQjM1VFgJCVdiMzVUeDsgLy8gTmVlZCBXYjM1VHguaAorCVdCMzVSWAkJV2IzNVJ4OyAvLyBOZWVkIFdiMzVSeC5oCisKKwlPU19USU1FUglMRURUaW1lcjsvLyBGb3IgTEVECisKKwl1MzIJCUxFRHBvaW50Oy8vIEZvciBMRUQKKworICAgIHUzMiAgICAgICAgIGR0b190eF9yZXRyeV9jb3VudDsgICAgICAgICAvLyBMQTIwMDQwMjEwX0RUTyBrZXZpbgorICAgIHUzMiAgICAgICAgIGR0b190eF9mcmFnX2NvdW50OyAgICAgICAgICAvLyBMQTIwMDQwMjEwX0RUTyBrZXZpbgorICAgIHUzMiAgICAgICAgIHJ4X29rX2NvdW50WzEzXTsgICAgLy8gaW5kZXg9MDogdG90YWwgcnggb2sKKyAgICAvL3UzMiAgICAgICAgIHJ4X29rX2J5dGVzWzEzXTsgICAgLy8gaW5kZXg9MCwgdG90YWwgcnggb2sgYnl0ZXMKKyAgICB1MzIgICAgICAgICByeF9lcnJfY291bnRbMTNdOyAgIC8vIGluZGV4PTA6IHRvdGFsIHJ4IGVycgorCisJLy9mb3IgVHggZGVidWcKKwl1MzIJCQl0eF9UQlRUX3N0YXJ0X2NvdW50OworCXUzMgkJCXR4X0VUUl9jb3VudDsKKwl1MzIJCQl0eF9XZXBPbl9mYWxzZV9jb3VudDsKKwl1MzIJCQl0eF9OdWxsX2tleV9jb3VudDsKKwl1MzIJCQl0eF9yZXRyeV9jb3VudFs4XTsKKworCXU4CQlQb3dlckluZGV4RnJvbUVFUFJPTTsgLy8gRm9yIDI0MTJNSHoKKwl1OAkJcG93ZXJfaW5kZXg7CisJdTgJCUlzV2FpdEpvaW5Db21wbGV0ZTsJLy8gVFJVRTogc2V0IGpvaW4gcmVxdWVzdAorCXU4CQliYW5kOworCisJdTE2CQlTb2Z0d2FyZVNldDsKKwl1MTYJCVJlc2VydmVkX3M7CisKKwl1MzIJCUlzSW5pdE9LOyAvLyAwOiBEcml2ZXIgc3RhcnRpbmcgICAxOiBEcml2ZXIgaW5pdCBPSworCisJLy8gRm9yIFBoeSBjYWxpYnJhdGlvbgorICAgIHMzMgkJaXFfcnNkbF9nYWluX3R4X2QyOworICAgIHMzMgkJaXFfcnNkbF9waGFzZV90eF9kMjsKKwl1MzIJCXR4dmdhX3NldHRpbmdfZm9yX2NhbDsgLy8gMjAwNjA3MDMuMSBBZGQKKworCXU4CQlUeFZnYVNldHRpbmdJbkVFUFJPTVsgKCgoTUFYX1RYVkdBX0VFUFJPTSoyKSszKSAmIH4weDAzKSBdOyAvLyAyMDA2MDYyMSBGb3IgYmFja3VwIEVFUFJPTSB2YWx1ZQorCXU4CQlUeFZnYUZvcjI0WzE2XTsgLy8gTWF4IGlzIDE0LCAyIGZvciBhbGlnbm1lbnQKKwlUWFZHQV9GT1JfNTAJVHhWZ2FGb3I1MFszNl07CS8vIDM1IGNoYW5uZWxzIGluIDVHLiAzNXgyID0gNzAgYnl0ZS4gMiBmb3IgYWxpZ25tZW50cworCisJdTE2CQlTY2FuX0ludGVydmFsOworCXUxNgkJUkVTRVJWRUQ2OworCisJLy8gTEVEIGNvbnRyb2wKKwl1MzIJCUxFRF9jb250cm9sOworCQkvLyBMRURfY29udHJvbCA0IGJ5dGU6IEdyYXlfTGVkXzFbM10JCUdyYXlfTGVkXzBbMl0JCUxlZFsxXQkJCUxlZFswXQorCQkvLyBHcmF5X0xlZAorCQkvLwkJRm9yIExlZCBncmF5IHNldHRpbmcKKwkJLy8gTGVkCisJCS8vCQkwOiBub3JtYWwgY29udHJvbCwgTEVEIGJlaGF2aW9yIHdpbGwgZGVjaWRlIGJ5IEVFUFJPTSBzZXR0aW5nCisJCS8vCQkxOiBUdXJuIG9mZiBzcGVjaWZpYyBMRUQKKwkJLy8JCTI6IEFsd2F5cyBvbiBzcGVjaWZpYyBMRUQKKwkJLy8JCTM6IHNsb3cgYmxpbmtpbmcgc3BlY2lmaWMgTEVECisJCS8vCQk0OiBmYXN0IGJsaW5raW5nIHNwZWNpZmljIExFRAorCQkvLwkJNTogV1BTIGxlZCBjb250cm9sIGlzIHNldC4gTGVkMCBpcyBSZWQsIExlZDEgaWQgR3JlZW4KKwkJLy8JCQlMZWRbMV0gaXMgcGFyYW1ldGVyIGZvciBXUFMgTEVEIG1vZGUKKwkJLy8JCQkJIC8vIDE6SW5Qcm9ncmVzcyAgMjogRXJyb3IgMzogU2Vzc2lvbiBvdmVybGFwIDQ6IFN1Y2Nlc3MgMjAwNjExMDggY29udHJvbAorCisJdTMyCQlMRURfTGlua09uOwkJLy9UdXJuIExFRCBvbiBjb250cm9sCisJdTMyCQlMRURfU2Nhbm5pbmc7CS8vIExldCBMRUQgaW4gc2NhbiBwcm9jZXNzIGNvbnRyb2wKKwl1MzIJCUxFRF9CbGlua2luZzsgLy8gVGVtcCB2YXJpYWJsZSBmb3Igc2hpbmluZworCXUzMgkJUnhCeXRlQ291bnRMYXN0OworCXUzMgkJVHhCeXRlQ291bnRMYXN0OworCisJczMyCQlTdXJwcmlzZVJlbW92ZUNvdW50OworCisJLy8gRm9yIGdsb2JhbCB0aW1lcgorCXUzMgkJdGltZV9jb3VudDsvL1RJQ0tfVElNRV8xMDBtcyAxID0gMTAwbXMKKworCS8vIEZvciBlcnJvciByZWNvdmVyCisJdTMyCQlId1N0b3A7CisKKwkvLyAyMDA2MDgyOC4xIGZvciBhdm9pZCBBUCBkaXNjb25uZWN0CisJdTMyCQlOdWxsUGFja2V0Q291bnQ7CisKK30gaHdfZGF0YV90LCAqcGh3X2RhdGFfdDsKKworLy8gVGhlIG1hcHBpbmcgb2YgUnggYW5kIFR4IGRlc2NyaXB0b3IgZmllbGQKK3R5cGVkZWYgc3RydWN0IF9IQUxfUkFURQoreworCS8vIERTU1MKKwl1MzIJUkVTRVJWRURfMDsKKwl1MzIgICBOdW1SYXRlMk1TOworCXUzMiAgIE51bVJhdGU1NU1TOworCXUzMiAgIE51bVJhdGUxMU1TOworCisJdTMyCVJFU0VSVkVEXzFbNF07CisKKwl1MzIgICBOdW1SYXRlMU07CisJdTMyICAgTnVtUmF0ZTJNTDsKKwl1MzIgICBOdW1SYXRlNTVNTDsKKwl1MzIgICBOdW1SYXRlMTFNTDsKKworCXUzMglSRVNFUlZFRF8yWzRdOworCisJLy8gT0ZETQorCXUzMiAgIE51bVJhdGU2TTsKKwl1MzIgICBOdW1SYXRlOU07CisJdTMyICAgTnVtUmF0ZTEyTTsKKwl1MzIgICBOdW1SYXRlMThNOworCXUzMiAgIE51bVJhdGUyNE07CisJdTMyICAgTnVtUmF0ZTM2TTsKKwl1MzIgICBOdW1SYXRlNDhNOworCXUzMiAgIE51bVJhdGU1NE07Cit9IEhBTF9SQVRFLCAqUEhBTF9SQVRFOworCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL3dibGludXguYyBiL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL3dibGludXguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZWFkZTVhCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvd2JsaW51eC5jCkBAIC0wLDAgKzEsMjc3IEBACisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vICBDb3B5cmlnaHQgKGMpIDE5OTYtMjAwNSBXaW5ib25kIEVsZWN0cm9uaWMgQ29ycG9yYXRpb24KKy8vCisvLyAgTW9kdWxlIE5hbWU6CisvLyAgICB3YmxpbnV4LmMKKy8vCisvLyAgQWJzdHJhY3Q6CisvLyAgICBMaW51eCByZWxlYXRlZCByb3V0aW5lcworLy8KKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorI2luY2x1ZGUgIm9zX2NvbW1vbi5oIgorCit1MzIKK1dCTElOVVhfTWVtb3J5QWxsb2Modm9pZCogKlZpcnR1YWxBZGRyZXNzLCB1MzIgTGVuZ3RoKQoreworCSpWaXJ0dWFsQWRkcmVzcyA9IGt6YWxsb2MoIExlbmd0aCwgR0ZQX0FUT01JQyApOyAvL0dGUF9LRVJORUwgaXMgbm90IHN1aXRhYmxlCisKKwlpZiAoKlZpcnR1YWxBZGRyZXNzID09IE5VTEwpCisJCXJldHVybiAwOworCXJldHVybiAxOworfQorCitzMzIKK0VuY2FwQXRvbWljSW5jKFBBREFQVEVSIEFkYXB0ZXIsIHZvaWQqIHBBdG9taWMpCit7CisJUFdCTElOVVggcFdiTGludXggPSAmQWRhcHRlci0+V2JMaW51eDsKKwl1MzIJbHRtcDsKKwlQVUxPTkcJcGx0bXAgPSAoUFVMT05HKXBBdG9taWM7CisJT1NfU1BJTl9MT0NLX0FDUVVJUkVEKCAmcFdiTGludXgtPkF0b21pY1NwaW5Mb2NrICk7CisJKCpwbHRtcCkrKzsKKwlsdG1wID0gKCpwbHRtcCk7CisJT1NfU1BJTl9MT0NLX1JFTEVBU0VEKCAmcFdiTGludXgtPkF0b21pY1NwaW5Mb2NrICk7CisJcmV0dXJuIGx0bXA7Cit9CisKK3MzMgorRW5jYXBBdG9taWNEZWMoUEFEQVBURVIgQWRhcHRlciwgdm9pZCogcEF0b21pYykKK3sKKwlQV0JMSU5VWCBwV2JMaW51eCA9ICZBZGFwdGVyLT5XYkxpbnV4OworCXUzMglsdG1wOworCVBVTE9ORwlwbHRtcCA9IChQVUxPTkcpcEF0b21pYzsKKwlPU19TUElOX0xPQ0tfQUNRVUlSRUQoICZwV2JMaW51eC0+QXRvbWljU3BpbkxvY2sgKTsKKwkoKnBsdG1wKS0tOworCWx0bXAgPSAoKnBsdG1wKTsKKwlPU19TUElOX0xPQ0tfUkVMRUFTRUQoICZwV2JMaW51eC0+QXRvbWljU3BpbkxvY2sgKTsKKwlyZXR1cm4gbHRtcDsKK30KKwordW5zaWduZWQgY2hhcgorV0JMSU5VWF9Jbml0aWFsKFBBREFQVEVSIEFkYXB0ZXIpCit7CisJUFdCTElOVVggcFdiTGludXggPSAmQWRhcHRlci0+V2JMaW51eDsKKworCU9TX1NQSU5fTE9DS19BTExPQ0FURSggJnBXYkxpbnV4LT5TcGluTG9jayApOworCU9TX1NQSU5fTE9DS19BTExPQ0FURSggJnBXYkxpbnV4LT5BdG9taWNTcGluTG9jayApOworCXJldHVybiBUUlVFOworfQorCit2b2lkCitXQkxpbnV4X1JlY2VpdmVQYWNrZXQoUEFEQVBURVIgQWRhcHRlciwgUFJYTEFZRVIxIHBSeExheWVyMSkKK3sKKwlCVUcoKTsKK30KKworCit2b2lkCitXQkxJTlVYX0dldE5leHRQYWNrZXQoUEFEQVBURVIgQWRhcHRlciwgIFBERVNDUklQVE9SIHBEZXMpCit7CisJQlVHKCk7Cit9CisKK3ZvaWQKK1dCTElOVVhfR2V0TmV4dFBhY2tldENvbXBsZXRlZChQQURBUFRFUiBBZGFwdGVyLCBQREVTQ1JJUFRPUiBwRGVzKQoreworCUJVRygpOworfQorCit2b2lkCitXQkxJTlVYX0Rlc3Ryb3koUEFEQVBURVIgQWRhcHRlcikKK3sKKwlXQkxJTlVYX3N0b3AoIEFkYXB0ZXIgKTsKKwlPU19TUElOX0xPQ0tfRlJFRSggJnBXYk5kaXMtPlNwaW5Mb2NrICk7CisjaWZkZWYgX1BFX1VTQl9JTklfRFVNUF8KKwlXQkRFQlVHKCgiW3czNXVuZF0gdW5yZWdpc3Rlcl9uZXRkZXYhXG4iKSk7CisjZW5kaWYKK30KKwordm9pZAorV0JMSU5VWF9zdG9wKCAgUEFEQVBURVIgQWRhcHRlciApCit7CisJUFdCTElOVVgJcFdiTGludXggPSAmQWRhcHRlci0+V2JMaW51eDsKKwlzdHJ1Y3Qgc2tfYnVmZiAqcFNrYjsKKworCWlmIChPU19BVE9NSUNfSU5DKCBBZGFwdGVyLCAmcFdiTGludXgtPlRocmVhZENvdW50ICkgPT0gMSkgeworCQkvLyBTaHV0ZG93biBtb2R1bGUgaW1tZWRpYXRlbHkKKwkJcFdiTGludXgtPnNodXRkb3duID0gMTsKKworCQl3aGlsZSAocFdiTGludXgtPnNrYl9hcnJheVsgcFdiTGludXgtPnNrYl9HZXRJbmRleCBdKSB7CisJCQkvLyBUcnlpbmcgdG8gZnJlZSB0aGUgdW4tc2VuZGluZyBwYWNrZXQKKwkJCXBTa2IgPSBwV2JMaW51eC0+c2tiX2FycmF5WyBwV2JMaW51eC0+c2tiX0dldEluZGV4IF07CisJCQlwV2JMaW51eC0+c2tiX2FycmF5WyBwV2JMaW51eC0+c2tiX0dldEluZGV4IF0gPSBOVUxMOworCQkJaWYoIGluX2lycSgpICkKKwkJCQlkZXZfa2ZyZWVfc2tiX2lycSggcFNrYiApOworCQkJZWxzZQorCQkJCWRldl9rZnJlZV9za2IoIHBTa2IgKTsKKworCQkJcFdiTGludXgtPnNrYl9HZXRJbmRleCsrOworCQkJcFdiTGludXgtPnNrYl9HZXRJbmRleCAlPSBXQkxJTlVYX1BBQ0tFVF9BUlJBWV9TSVpFOworCQl9CisKKyNpZmRlZiBfUEVfU1RBVEVfRFVNUF8KKwkJV0JERUJVRygoICJbdzM1dW5kXSBTS0JfUkVMRUFTRSBPS1xuIiApKTsKKyNlbmRpZgorCX0KKworCU9TX0FUT01JQ19ERUMoIEFkYXB0ZXIsICZwV2JMaW51eC0+VGhyZWFkQ291bnQgKTsKK30KKwordm9pZAorV2JXbGFuSGFsdCggIFBBREFQVEVSIEFkYXB0ZXIgKQoreworCS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJQWRhcHRlci0+c0xvY2FsUGFyYS5TaHV0RG93bmVkID0gVFJVRTsKKworCU1kc19EZXN0cm95KCBBZGFwdGVyICk7CisKKwkvLyBUdXJuIG9mZiBSeCBhbmQgVHggaGFyZHdhcmUgYWJpbGl0eQorCWhhbF9zdG9wKCAmQWRhcHRlci0+c0h3RGF0YSApOworI2lmZGVmIF9QRV9VU0JfSU5JX0RVTVBfCisJV0JERUJVRygoIlt3MzV1bmRdIEhhbF9zdG9wIE8uSy5cbiIpKTsKKyNlbmRpZgorCU9TX1NMRUVQKDEwMDAwMCk7Ly8gV2FpdGluZyBJcnAgY29tcGxldGVkCisKKwkvLyBEZXN0cm95IHRoZSBORElTIG1vZHVsZQorCVdCTElOVVhfRGVzdHJveSggQWRhcHRlciApOworCisJLy8gSGFsdCB0aGUgSEFMCisJaGFsX2hhbHQoJkFkYXB0ZXItPnNId0RhdGEsIE5VTEwpOworfQorCit1bnNpZ25lZCBjaGFyCitXYldMYW5Jbml0aWFsaXplKFBBREFQVEVSIEFkYXB0ZXIpCit7CisJcGh3X2RhdGFfdAlwSHdEYXRhOworCVBVQ0hBUgkJcE1hY0FkZHIsIHBNYWNBZGRyMjsKKwl1MzIJCUluaXRTdGVwID0gMDsKKwl1OAkJRUVQUk9NX3JlZ2lvbjsKKwl1OAkJSHdSYWRpb09mZjsKKworCWRvIHsKKwkJLy8KKwkJLy8gU2V0dGluZyBkZWZhdWx0IHZhbHVlIGZvciBMaW51eAorCQkvLworCQlBZGFwdGVyLT5zTG9jYWxQYXJhLnJlZ2lvbl9JTkYgPSBSRUdJT05fQVVUTzsKKwkJQWRhcHRlci0+c0xvY2FsUGFyYS5UeFJhdGVNb2RlID0gUkFURV9BVVRPOworCQlwc0xPQ0FMLT5iTWFjT3BlcmF0aW9uTW9kZSA9IE1PREVfODAyXzExX0JHOwkvLyBCL0cgbW9kZQorCQlBZGFwdGVyLT5NZHMuVHhSVFNUaHJlc2hvbGQgPSBERUZBVUxUX1JUU1RocmVzaG9sZDsKKwkJQWRhcHRlci0+TWRzLlR4RnJhZ21lbnRUaHJlc2hvbGQgPSBERUZBVUxUX0ZSQUdNRU5UX1RIUkVTSE9MRDsKKwkJaGFsX3NldF9waHlfdHlwZSggJkFkYXB0ZXItPnNId0RhdGEsIFJGX1dCXzI0Ml8xICk7CisJCUFkYXB0ZXItPnNMb2NhbFBhcmEuTVRVc2l6ZSA9IE1BWF9FVEhFUk5FVF9QQUNLRVRfU0laRTsKKwkJcHNMT0NBTC0+YlByZWFtYmxlTW9kZSA9IEFVVE9fTU9ERTsKKwkJQWRhcHRlci0+c0xvY2FsUGFyYS5SYWRpb09mZlN0YXR1cy5ib1N3UmFkaW9PZmYgPSBGQUxTRTsKKwkJcEh3RGF0YSA9ICZBZGFwdGVyLT5zSHdEYXRhOworCQloYWxfc2V0X3BoeV90eXBlKCBwSHdEYXRhLCBSRl9ERUNJREVfQllfSU5GICk7CisKKwkJLy8KKwkJLy8gSW5pdGlhbCBlYWNoIG1vZHVsZSBhbmQgdmFyaWFibGUKKwkJLy8KKwkJaWYgKCFXQkxJTlVYX0luaXRpYWwoQWRhcHRlcikpIHsKKyNpZmRlZiBfUEVfVVNCX0lOSV9EVU1QXworCQkJV0JERUJVRygoIlt3MzV1bmRdV0JORElTIGluaXRpYWxpemF0aW9uIGZhaWxlZFxuIikpOworI2VuZGlmCisJCQlicmVhazsKKwkJfQorCisJCS8vIEluaXRpYWwgU29mdHdhcmUgdmFyaWFibGUKKwkJQWRhcHRlci0+c0xvY2FsUGFyYS5TaHV0RG93bmVkID0gRkFMU0U7CisKKwkJLy9hZGRlZCBieSB3cyBmb3Igd2VwIGtleSBlcnJvciBkZXRlY3Rpb24KKwkJQWRhcHRlci0+c0xvY2FsUGFyYS5iV2VwS2V5RXJyb3I9IEZBTFNFOworCQlBZGFwdGVyLT5zTG9jYWxQYXJhLmJUb1NlbGZQYWNrZXRSZWNlaXZlZCA9IEZBTFNFOworCQlBZGFwdGVyLT5zTG9jYWxQYXJhLldlcEtleURldGVjdFRpbWVyQ291bnQ9IDIgKiAxMDA7IC8vLyAyIHNlY29uZHMKKworCQkvLyBJbml0aWFsIFVTQiBoYWwKKwkJSW5pdFN0ZXAgPSAxOworCQlwSHdEYXRhID0gJkFkYXB0ZXItPnNId0RhdGE7CisJCWlmICghaGFsX2luaXRfaGFyZHdhcmUocEh3RGF0YSwgQWRhcHRlcikpCisJCQlicmVhazsKKworCQlFRVBST01fcmVnaW9uID0gaGFsX2dldF9yZWdpb25fZnJvbV9FRVBST00oIHBId0RhdGEgKTsKKwkJaWYgKEVFUFJPTV9yZWdpb24gIT0gUkVHSU9OX0FVVE8pCisJCQlwc0xPQ0FMLT5yZWdpb24gPSBFRVBST01fcmVnaW9uOworCQllbHNlIHsKKwkJCWlmIChwc0xPQ0FMLT5yZWdpb25fSU5GICE9IFJFR0lPTl9BVVRPKQorCQkJCXBzTE9DQUwtPnJlZ2lvbiA9IHBzTE9DQUwtPnJlZ2lvbl9JTkY7CisJCQllbHNlCisJCQkJcHNMT0NBTC0+cmVnaW9uID0gUkVHSU9OX1VTQTsJLy9kZWZhdWx0IHNldHRpbmcKKwkJfQorCisJCS8vIEdldCBTb2Z0d2FyZSBzZXR0aW5nIGZsYWcgZnJvbSBoYWwKKwkJQWRhcHRlci0+c0xvY2FsUGFyYS5ib0FudGVubmFEaXZlcnNpdHkgPSBGQUxTRTsKKwkJaWYgKGhhbF9zb2Z0d2FyZV9zZXQocEh3RGF0YSkgJiAweDAwMDAwMDAxKQorCQkJQWRhcHRlci0+c0xvY2FsUGFyYS5ib0FudGVubmFEaXZlcnNpdHkgPSBUUlVFOworCisJCS8vCisJCS8vIEZvciBUUyBtb2R1bGUKKwkJLy8KKwkJSW5pdFN0ZXAgPSAyOworCisJCS8vIEZvciBNRFMgbW9kdWxlCisJCUluaXRTdGVwID0gMzsKKwkJTWRzX2luaXRpYWwoQWRhcHRlcik7CisKKwkJLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwkJLy8gSW5pdGlhbGl6ZSB0aGUgU01FLCBTQ0FOLCBNTE1FLCBST0FNCisJCS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJCUluaXRTdGVwID0gNDsKKwkJSW5pdFN0ZXAgPSA1OworCQlJbml0U3RlcCA9IDY7CisKKwkJLy8gSWYgbm8gdXNlci1kZWZpbmVkIGFkZHJlc3MgaW4gdGhlIHJlZ2lzdHJ5LCB1c2UgdGhlIGFkZHJlc3NzICJidXJuZWQiIG9uIHRoZSBOSUMgaW5zdGVhZC4KKwkJcE1hY0FkZHIgPSBBZGFwdGVyLT5zTG9jYWxQYXJhLlRoaXNNYWNBZGRyZXNzOworCQlwTWFjQWRkcjIgPSBBZGFwdGVyLT5zTG9jYWxQYXJhLlBlcm1hbmVudEFkZHJlc3M7CisJCWhhbF9nZXRfcGVybWFuZW50X2FkZHJlc3MoIHBId0RhdGEsIEFkYXB0ZXItPnNMb2NhbFBhcmEuUGVybWFuZW50QWRkcmVzcyApOy8vIFJlYWRpbmcgZXRoZXJuZXQgYWRkcmVzcyBmcm9tIEVFUFJPTQorCQlpZiAoT1NfTUVNT1JZX0NPTVBBUkUocE1hY0FkZHIsICJceDAwXHgwMFx4MDBceDAwXHgwMFx4MDAiLCBNQUNfQUREUl9MRU5HVEggKSkgLy8gSXMgZXF1YWwKKwkJeworCQkJbWVtY3B5KCBwTWFjQWRkciwgcE1hY0FkZHIyLCBNQUNfQUREUl9MRU5HVEggKTsKKwkJfSBlbHNlIHsKKwkJCS8vIFNldCB0aGUgdXNlciBkZWZpbmUgTUFDIGFkZHJlc3MKKwkJCWhhbF9zZXRfZXRoZXJuZXRfYWRkcmVzcyggcEh3RGF0YSwgQWRhcHRlci0+c0xvY2FsUGFyYS5UaGlzTWFjQWRkcmVzcyApOworCQl9CisKKwkJLy9nZXQgY3VycmVudCBhbnRlbm5hCisJCXBzTE9DQUwtPmJBbnRlbm5hTm8gPSBoYWxfZ2V0X2FudGVubmFfbnVtYmVyKHBId0RhdGEpOworI2lmZGVmIF9QRV9TVEFURV9EVU1QXworCQlXQkRFQlVHKCgiRHJpdmVyIGluaXQsIGFudGVubmEgbm8gPSAlZFxuIiwgcHNMT0NBTC0+YkFudGVubmFObykpOworI2VuZGlmCisJCWhhbF9nZXRfaHdfcmFkaW9fb2ZmKCBwSHdEYXRhICk7CisKKwkJLy8gV2FpdGluZyBmb3IgSEFMIHNldHRpbmcgT0sKKwkJd2hpbGUgKCFoYWxfaWRsZShwSHdEYXRhKSkKKwkJCU9TX1NMRUVQKDEwMDAwKTsKKworCQlNVE9fSW5pdChBZGFwdGVyKTsKKworCQlId1JhZGlvT2ZmID0gaGFsX2dldF9od19yYWRpb19vZmYoIHBId0RhdGEgKTsKKwkJcHNMT0NBTC0+UmFkaW9PZmZTdGF0dXMuYm9Id1JhZGlvT2ZmID0gISFId1JhZGlvT2ZmOworCisJCWhhbF9zZXRfcmFkaW9fbW9kZSggcEh3RGF0YSwgKHVuc2lnbmVkIGNoYXIpKHBzTE9DQUwtPlJhZGlvT2ZmU3RhdHVzLmJvU3dSYWRpb09mZiB8fCBwc0xPQ0FMLT5SYWRpb09mZlN0YXR1cy5ib0h3UmFkaW9PZmYpICk7CisKKwkJaGFsX2RyaXZlcl9pbml0X09LKHBId0RhdGEpID0gMTsgLy8gTm90aWZ5IGhhbCB0aGF0IHRoZSBkcml2ZXIgaXMgcmVhZHkgbm93LgorCQkvL3NldCBhIHR4IHBvd2VyIGZvciByZWZlcmVuY2UuLi4uLgorLy8JCXNtZV9zZXRfdHhfcG93ZXJfbGV2ZWwoQWRhcHRlciwgMTIpOwlGSVhNRT8KKwkJcmV0dXJuIFRSVUU7CisJfQorCXdoaWxlKEZBTFNFKTsKKworCXN3aXRjaCAoSW5pdFN0ZXApIHsKKwljYXNlIDU6CisJY2FzZSA0OgorCWNhc2UgMzogTWRzX0Rlc3Ryb3koIEFkYXB0ZXIgKTsKKwljYXNlIDI6CisJY2FzZSAxOiBXQkxJTlVYX0Rlc3Ryb3koIEFkYXB0ZXIgKTsKKwkJaGFsX2hhbHQoIHBId0RhdGEsIE5VTEwgKTsKKwljYXNlIDA6IGJyZWFrOworCX0KKworCXJldHVybiBGQUxTRTsKK30KKwordm9pZCBXQkxJTlVYX0Nvbm5lY3RTdGF0dXMoUEFEQVBURVIgQWRhcHRlciwgdTMyIGZsYWcpCit7CisJUFdCTElOVVgJcFdiTGludXggPSAmQWRhcHRlci0+V2JMaW51eDsKKworCXBXYkxpbnV4LT5MaW5rU3RhdHVzID0gZmxhZzsgLy8gT1NfRElTQ09OTkVDVEVECW9yICBPU19DT05ORUNURUQKK30KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvd2JsaW51eF9mLmggYi9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC93YmxpbnV4X2YuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ODI0MGM1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvd2JsaW51eF9mLmgKQEAgLTAsMCArMSwyMyBAQAorLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLyBDb3B5cmlnaHQgKGMpIDE5OTYtMjAwNCBXaW5ib25kIEVsZWN0cm9uaWMgQ29ycG9yYXRpb24KKy8vCisvLyB3YmxpbnV4X2YuaAorLy8KK3UzMiBXQkxJTlVYX01lbW9yeUFsbG9jKCAgdm9pZCogKlZpcnR1YWxBZGRyZXNzLCAgdTMyIExlbmd0aCApOworczMyIEVuY2FwQXRvbWljSW5jKCAgUEFEQVBURVIgQWRhcHRlciwgIHZvaWQqIHBBdG9taWMgKTsKK3MzMiBFbmNhcEF0b21pY0RlYyggIFBBREFQVEVSIEFkYXB0ZXIsICB2b2lkKiBwQXRvbWljICk7Cit2b2lkIFdCTGludXhfUmVjZWl2ZVBhY2tldCggIFBBREFQVEVSIEFkYXB0ZXIsICBQUlhMQVlFUjEgcFJ4TGF5ZXIxICk7Cit1bnNpZ25lZCBjaGFyIFdCTElOVVhfSW5pdGlhbCggIFBBREFQVEVSIEFkYXB0ZXIgKTsKK2ludCB3YjM1X3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiApOwordm9pZCBXQkxJTlVYX0dldE5leHRQYWNrZXQoICBQQURBUFRFUiBBZGFwdGVyLCAgUERFU0NSSVBUT1IgcERlcyApOwordm9pZCBXQkxJTlVYX0dldE5leHRQYWNrZXRDb21wbGV0ZWQoICBQQURBUFRFUiBBZGFwdGVyLCAgUERFU0NSSVBUT1IgcERlcyApOwordm9pZCBXQkxJTlVYX3N0b3AoICBQQURBUFRFUiBBZGFwdGVyICk7Cit2b2lkIFdCTElOVVhfRGVzdHJveSggIFBBREFQVEVSIEFkYXB0ZXIgKTsKK3ZvaWQgd2IzNV9zZXRfbXVsdGljYXN0KCBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ICk7CitzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqIHdiMzVfbmV0ZGV2X3N0YXRzKCBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ICk7Cit2b2lkIFdCTElOVVhfc3RvcCggIFBBREFQVEVSIEFkYXB0ZXIgKTsKK3ZvaWQgV2JXbGFuSGFsdCggIFBBREFQVEVSIEFkYXB0ZXIgKTsKK3ZvaWQgV0JMSU5VWF9Db25uZWN0U3RhdHVzKCAgUEFEQVBURVIgQWRhcHRlciwgIHUzMiBmbGFnICk7CisKKworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC93YmxpbnV4X3MuaCBiL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL3dibGludXhfcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk3ZTkxNjcKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC93YmxpbnV4X3MuaApAQCAtMCwwICsxLDQ1IEBACisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8gd2JsaW51eF9zLmgKKy8vCisjZGVmaW5lIE9TX01FTU9SWV9BTExPQyggX1YsIF9TICkJV0JMSU5VWF9NZW1vcnlBbGxvYyggX1YsIF9TICkKKyNkZWZpbmUgT1NfTElOS19TVEFUVVMJCQkoQWRhcHRlci0+V2JMaW51eC5MaW5rU3RhdHVzID09IE9TX0NPTk5FQ1RFRCkKKyNkZWZpbmUgT1NfU0VUX1NIVVRET1dOKCBfQSApCQlfQS0+V2JMaW51eC5zaHV0ZG93bj0xCisjZGVmaW5lIE9TX1NFVF9SRVNVTUUoIF9BICkJCV9BLT5XYkxpbnV4LnNodXRkb3duPTAKKyNkZWZpbmUgT1NfQ09OTkVDVF9TVEFUVVNfSU5ESUNBVEUoIF9BLCBfRiApCQlXQkxJTlVYX0Nvbm5lY3RTdGF0dXMoIF9BLCBfRiApCisjZGVmaW5lIE9TX0RJU0NPTk5FQ1RFRAkwCisjZGVmaW5lIE9TX0NPTk5FQ1RFRAkxCisjZGVmaW5lIE9TX1NUT1AoIF9BICkJV0JMSU5VWF9zdG9wKCBfQSApCisKKyNkZWZpbmUgT1NfQ1VSUkVOVF9SWF9CWVRFKCBfQSApCQlfQS0+V2JMaW51eC5SeEJ5dGVDb3VudAorI2RlZmluZSBPU19DVVJSRU5UX1RYX0JZVEUoIF9BICkJCV9BLT5XYkxpbnV4LlR4Qnl0ZUNvdW50CisjZGVmaW5lIE9TX0VWRU5UX0lORElDQVRFKCBfQSwgX0IsIF9GICkKKyNkZWZpbmUgT1NfUE1LSURfU1RBVFVTX0VWRU5UKCBfQSApCisjZGVmaW5lIE9TX1JFQ0VJVkVfUEFDS0VUX0lORElDQVRFKCBfQSwgX0QgKQkJV0JMaW51eF9SZWNlaXZlUGFja2V0KCBfQSwgX0QgKQorI2RlZmluZSBPU19SRUNFSVZFXzgwMl8xWF9QQUNLRVRfSU5ESUNBVEUoIF9BLCBfRCApCUVBUF9SZWNlaXZlUGFja2V0KCBfQSwgX0QgKQorI2RlZmluZSBPU19HRVRfUEFDS0VUKCBfQSwgX0QgKQkJCQlXQkxJTlVYX0dldE5leHRQYWNrZXQoIF9BLCBfRCApCisjZGVmaW5lIE9TX0dFVF9QQUNLRVRfQ09NUExFVEUoIF9BLCBfRCApCVdCTElOVVhfR2V0TmV4dFBhY2tldENvbXBsZXRlZCggX0EsIF9EICkKKyNkZWZpbmUgT1NfU0VORF9SRVNVTFQoIF9BLCBfSUQsIF9SICkKKworI2RlZmluZSBXQkxJTlVYX1BBQ0tFVF9BUlJBWV9TSVpFCShFVEhFUk5FVF9UWF9ERVNDUklQVE9SUyo0KQorCit0eXBlZGVmIHN0cnVjdCBfV0JMSU5VWAoreworCU9TX1NQSU5fTE9DSwlBdG9taWNTcGluTG9jazsKKwlPU19TUElOX0xPQ0sJU3BpbkxvY2s7CisJdTMyCXNodXRkb3duOworCisJT1NfQVRPTUlDCVRocmVhZENvdW50OworCisJdTMyCUxpbmtTdGF0dXM7CQkvLyBPU19ESVNDT05ORUNURUQgb3IgT1NfQ09OTkVDVEVECisKKwl1MzIJUnhCeXRlQ291bnQ7CisJdTMyCVR4Qnl0ZUNvdW50OworCisJc3RydWN0IHNrX2J1ZmYgKnNrYl9hcnJheVsgV0JMSU5VWF9QQUNLRVRfQVJSQVlfU0laRSBdOworCXN0cnVjdCBza19idWZmICpwYWNrZXRfcmV0dXJuOworCXMzMglza2JfU2V0SW5kZXg7CisJczMyCXNrYl9HZXRJbmRleDsKKwlzMzIJbmV0aWZfc3RhdGVfc3RvcDsgLy8gMTogc3RvcCAgMDogbm9ybWFsCit9IFdCTElOVVgsICpQV0JMSU5VWDsKKworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9LY29uZmlnIGIvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvS2NvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMGIxZjBmCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvS2NvbmZpZwpAQCAtMCwwICsxLDEwIEBACitjb25maWcgUFJJU00yX1VTQgorCXRyaXN0YXRlICJQcmlzbTIuNSBVU0IgZHJpdmVyIgorCWRlcGVuZHMgb24gVVNCCisJZGVmYXVsdCBuCisJLS0taGVscC0tLQorCSAgVGhpcyBpcyB0aGUgd2xhbi1uZyBwcmlzbSAyLjUgVVNCIGRyaXZlciBmb3IgYSB3aWRlIHJhbmdlIG9mCisJICBvbGQgVVNCIHdpcmVsZXNzIGRldmljZXMuCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUKKwkgIHdpbGwgYmUgY2FsbGVkIHByaXNtMl91c2IuCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9NYWtlZmlsZSBiL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc3N2I1MTEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9NYWtlZmlsZQpAQCAtMCwwICsxLDkgQEAKK29iai0kKENPTkZJR19QUklTTTJfVVNCKSArPSBwcmlzbTJfdXNiLm8KK29iai0kKENPTkZJR19QUklTTTJfVVNCKSArPSBwODAyMTEubworCitwODAyMTEtb2JqcyA6PSBwODAyMTFtb2QubyBcCisJCXA4MDIxMWNvbnYubyBcCisJCXA4MDIxMXJlcS5vIFwKKwkJcDgwMjExd2VwLm8gXAorCQlwODAyMTF3ZXh0Lm8gXAorCQlwODAyMTFuZXRkZXYubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvUkVBRE1FIGIvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvUkVBRE1FCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY1MGU0ZWIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9SRUFETUUKQEAgLTAsMCArMSw4IEBACitUT0RPOgorCS0gY2hlY2twYXRjaC5wbCBjbGVhbnVwcworCS0gc3BhcnNlIHdhcm5pbmdzCisJLSBMaW5kZW50IGNsZWFudXBzCisJLSBtb3ZlIHRvIHVzZSB0aGUgaW4ta2VybmVsIHdpcmVsZXNzIHN0YWNrCisJLSBwb3NzaWJsZSBlbmFibGUgdGhlIHBjbWNpYSBhbmQgcGNpIHBvcnRpb25zIG9mIHRoZSBkcml2ZXIKKworUGxlYXNlIHNlbmQgYWxsIHBhdGNoZXMgdG8gR3JlZyBLcm9haC1IYXJ0bWFuIDxncmVnQGtyb2FoLmNvbT4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL2hmYTM4NHguYyBiL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL2hmYTM4NHguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNGRmM2ZkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvaGZhMzg0eC5jCkBAIC0wLDAgKzEsNDAxOCBAQAorLyogc3JjL3ByaXNtMi9kcml2ZXIvaGZhMzg0eC5jCisqCisqIEltcGxlbWVudHMgdGhlIGZ1bmN0aW9ucyBvZiB0aGUgSW50ZXJzaWwgaGZhMzg0eCBNQUMKKyoKKyogQ29weXJpZ2h0IChDKSAxOTk5IEFic29sdXRlVmFsdWUgU3lzdGVtcywgSW5jLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyoKKyogbGludXgtd2xhbgorKgorKiAgIFRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgYXJlIHN1YmplY3QgdG8gdGhlIE1vemlsbGEgUHVibGljCisqICAgTGljZW5zZSBWZXJzaW9uIDEuMSAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUKKyogICBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YKKyogICB0aGUgTGljZW5zZSBhdCBodHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC8KKyoKKyogICBTb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMKKyogICBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yCisqICAgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nCisqICAgcmlnaHRzIGFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyoKKyogICBBbHRlcm5hdGl2ZWx5LCB0aGUgY29udGVudHMgb2YgdGhpcyBmaWxlIG1heSBiZSB1c2VkIHVuZGVyIHRoZQorKiAgIHRlcm1zIG9mIHRoZSBHTlUgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyICh0aGUgIkdQTCIpLCBpbiB3aGljaAorKiAgIGNhc2UgdGhlIHByb3Zpc2lvbnMgb2YgdGhlIEdQTCBhcmUgYXBwbGljYWJsZSBpbnN0ZWFkIG9mIHRoZQorKiAgIGFib3ZlLiAgSWYgeW91IHdpc2ggdG8gYWxsb3cgdGhlIHVzZSBvZiB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlCisqICAgb25seSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdQTCBhbmQgbm90IHRvIGFsbG93IG90aGVycyB0byB1c2UKKyogICB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIHVuZGVyIHRoZSBNUEwsIGluZGljYXRlIHlvdXIgZGVjaXNpb24KKyogICBieSBkZWxldGluZyB0aGUgcHJvdmlzaW9ucyBhYm92ZSBhbmQgcmVwbGFjZSB0aGVtIHdpdGggdGhlIG5vdGljZQorKiAgIGFuZCBvdGhlciBwcm92aXNpb25zIHJlcXVpcmVkIGJ5IHRoZSBHUEwuICBJZiB5b3UgZG8gbm90IGRlbGV0ZQorKiAgIHRoZSBwcm92aXNpb25zIGFib3ZlLCBhIHJlY2lwaWVudCBtYXkgdXNlIHlvdXIgdmVyc2lvbiBvZiB0aGlzCisqICAgZmlsZSB1bmRlciBlaXRoZXIgdGhlIE1QTCBvciB0aGUgR1BMLgorKgorKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKgorKiBJbnF1aXJpZXMgcmVnYXJkaW5nIHRoZSBsaW51eC13bGFuIE9wZW4gU291cmNlIHByb2plY3QgY2FuIGJlCisqIG1hZGUgZGlyZWN0bHkgdG86CisqCisqIEFic29sdXRlVmFsdWUgU3lzdGVtcyBJbmMuCisqIGluZm9AbGludXgtd2xhbi5jb20KKyogaHR0cDovL3d3dy5saW51eC13bGFuLmNvbQorKgorKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKgorKiBQb3J0aW9ucyBvZiB0aGUgZGV2ZWxvcG1lbnQgb2YgdGhpcyBzb2Z0d2FyZSB3ZXJlIGZ1bmRlZCBieQorKiBJbnRlcnNpbCBDb3Jwb3JhdGlvbiBhcyBwYXJ0IG9mIFBSSVNNKFIpIGNoaXBzZXQgcHJvZHVjdCBkZXZlbG9wbWVudC4KKyoKKyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyoKKyogVGhpcyBmaWxlIGltcGxlbWVudHMgZnVuY3Rpb25zIHRoYXQgY29ycmVzcG9uZCB0byB0aGUgcHJpc20yL2hmYTM4NHgKKyogODAyLjExIE1BQyBoYXJkd2FyZSBhbmQgZmlybXdhcmUgaG9zdCBpbnRlcmZhY2UuCisqCisqIFRoZSBmdW5jdGlvbnMgY2FuIGJlIGNvbnNpZGVyZWQgdG8gcmVwcmVzZW50IHNldmVyYWwgbGV2ZWxzIG9mCisqIGFic3RyYWN0aW9uLiAgVGhlIGxvd2VzdCBsZXZlbCBmdW5jdGlvbnMgYXJlIHNpbXBseSBDLWNhbGxhYmxlIHdyYXBwZXJzCisqIGFyb3VuZCB0aGUgcmVnaXN0ZXIgYWNjZXNzZXMuICBUaGUgbmV4dCBoaWdoZXIgbGV2ZWwgcmVwcmVzZW50cyBDLWNhbGxhYmxlCisqIHByaXNtMiBBUEkgZnVuY3Rpb25zIHRoYXQgbWF0Y2ggdGhlIEludGVyc2lsIGRvY3VtZW50YXRpb24gYXMgY2xvc2VseQorKiBhcyBpcyByZWFzb25hYmxlLiAgVGhlIG5leHQgaGlnaGVyIGxheWVyIGltcGxlbWVudHMgY29tbW9uIHNlcXVlbmNlcworKiBvZiBpbnZva2F0aW9ucyBvZiB0aGUgQVBJIGxheWVyIChlLmcuIHdyaXRlIHRvIGJhcCwgZm9sbG93ZWQgYnkgY21kKS4KKyoKKyogQ29tbW9uIHNlcXVlbmNlczoKKyogaGZhMzg0eF9kcnZyX3h4eAlIaWdoZXN0IGxldmVsIGFic3RyYWN0aW9ucyBwcm92aWRlZCBieSB0aGUKKyoJCQloZmEzODR4IGNvZGUuICBUaGV5IGFyZSBkcml2ZXIgZGVmaW5lZCB3cmFwcGVycworKgkJCWZvciBjb21tb24gc2VxdWVuY2VzLiAgVGhlc2UgZnVuY3Rpb25zIGdlbmVyYWxseQorKgkJCXVzZSB0aGUgc2VydmljZXMgb2YgdGhlIGxvd2VyIGxldmVscy4KKyoKKyogaGZhMzg0eF9kcnZyX3h4eGNvbmZpZyAgQW4gZXhhbXBsZSBvZiB0aGUgZHJ2ciBsZXZlbCBhYnN0cmFjdGlvbi4gVGhlc2UKKyoJCQlmdW5jdGlvbnMgYXJlIHdyYXBwZXJzIGZvciB0aGUgUklEIGdldC9zZXQKKyoJCQlzZXF1ZW5jZS4gVGhleSAJY2FsbCBjb3B5X1t0b3xmcm9tXV9iYXAoKSBhbmQKKyoJCQljbWRfYWNjZXNzKCkuCVRoZXNlIGZ1bmN0aW9ucyBvcGVyYXRlIG9uIHRoZQorKgkJCVJJRHMgYW5kIGJ1ZmZlcnMgd2l0aG91dCB2YWxpZGF0aW9uLiAgVGhlIGNhbGxlcgorKgkJCWlzIHJlc3BvbnNpYmxlIGZvciB0aGF0LgorKgorKiBBUEkgd3JhcHBlciBmdW5jdGlvbnM6CisqIGhmYTM4NHhfY21kX3h4eAlmdW5jdGlvbnMgdGhhdCBwcm92aWRlIGFjY2VzcyB0byB0aGUgZi93IGNvbW1hbmRzLgorKgkJCVRoZSBmdW5jdGlvbiBhcmd1bWVudHMgY29ycmVzcG9uZCB0byBlYWNoIGNvbW1hbmQKKyoJCQlhcmd1bWVudCwgZXZlbiBjb21tYW5kIGFyZ3VtZW50cyB0aGF0IGdldCBwYWNrZWQKKyoJCQlpbnRvIHNpbmdsZSByZWdpc3RlcnMuICBUaGVzZSBmdW5jdGlvbnMgX2p1c3RfCisqCQkJaXNzdWUgdGhlIGNvbW1hbmQgYnkgc2V0dGluZyB0aGUgY21kL3Bhcm0gcmVncworKgkJCSYgcmVhZGluZyB0aGUgc3RhdHVzL3Jlc3AgcmVncy4gIEFkZGl0aW9uYWwKKyoJCQlhY3Rpdml0aWVzIHJlcXVpcmVkIHRvIGZ1bGx5IHVzZSBhIGNvbW1hbmQKKyoJCQkocmVhZC93cml0ZSBmcm9tL3RvIGJhcCwgZ2V0L3NldCBpbnQgc3RhdHVzIGV0Yy4pCisqCQkJYXJlIGltcGxlbWVudGVkIHNlcGFyYXRlbHkuICBUaGluayBvZiB0aGVzZSBhcworKgkJCUMtY2FsbGFibGUgcHJpc20yIGNvbW1hbmRzLgorKgorKiBMb3dlc3QgTGF5ZXIgRnVuY3Rpb25zOgorKiBoZmEzODR4X2RvY21kX3h4eAlUaGVzZSBmdW5jdGlvbnMgaW1wbGVtZW50IHRoZSBzZXF1ZW5jZSByZXF1aXJlZAorKgkJCXRvIGlzc3VlIGFueSBwcmlzbTIgY29tbWFuZC4gIFByaW1hcmlseSB1c2VkIGJ5IHRoZQorKgkJCWhmYTM4NHhfY21kX3h4eCBmdW5jdGlvbnMuCisqCisqIGhmYTM4NHhfYmFwX3h4eAlCQVAgcmVhZC93cml0ZSBhY2Nlc3MgZnVuY3Rpb25zLgorKgkJCU5vdGU6IHdlIHVzdWFsbHkgdXNlIEJBUDAgZm9yIG5vbi1pbnRlcnJ1cHQgY29udGV4dAorKgkJCSBhbmQgQkFQMSBmb3IgaW50ZXJydXB0IGNvbnRleHQuCisqCisqIGhmYTM4NHhfZGxfeHh4CWRvd25sb2FkIHJlbGF0ZWQgZnVuY3Rpb25zLgorKgorKiBEcml2ZXIgU3RhdGUgSXNzdWVzOgorKiBOb3RlIHRoYXQgdGhlcmUgYXJlIHR3byBwYWlycyBvZiBmdW5jdGlvbnMgdGhhdCBtYW5hZ2UgdGhlCisqICdpbml0aWFsaXplZCcgYW5kICdydW5uaW5nJyBzdGF0ZXMgb2YgdGhlIGh3L01BQyBjb21iby4gIFRoZSBmb3VyCisqIGZ1bmN0aW9ucyBhcmUgY3JlYXRlKCksIGRlc3Ryb3koKSwgc3RhcnQoKSwgYW5kIHN0b3AoKS4gIGNyZWF0ZSgpCisqIHNldHMgdXAgdGhlIGRhdGEgc3RydWN0dXJlcyByZXF1aXJlZCB0byBzdXBwb3J0IHRoZSBoZmEzODR4XyoKKyogZnVuY3Rpb25zIGFuZCBkZXN0cm95KCkgY2xlYW5zIHRoZW0gdXAuICBUaGUgc3RhcnQoKSBmdW5jdGlvbiBnZXRzCisqIHRoZSBhY3R1YWwgaGFyZHdhcmUgcnVubmluZyBhbmQgZW5hYmxlcyB0aGUgaW50ZXJydXB0cy4gIFRoZSBzdG9wKCkKKyogZnVuY3Rpb24gc2h1dHMgdGhlIGhhcmR3YXJlIGRvd24uICBUaGUgc2VxdWVuY2Ugc2hvdWxkIGJlOgorKiBjcmVhdGUoKQorKiAgLgorKiAgLiAgU2VsZiBjb250YWluZWQgdGVzdCByb3V0aW5lcyBjYW4gcnVuIGhlcmUsIHBhcnRpY3VsYXJseQorKiAgLiAgY29yZXJlc2V0KCkgYW5kIHRlc3RfaG9zdGlmKCkuCisqICAuCisqIHN0YXJ0KCkKKyogIC4KKyogIC4gIERvIGludGVyZXN0aW5nIHRoaW5ncyB3LyB0aGUgaGFyZHdhcmUKKyogIC4KKyogc3RvcCgpCisqIGRlc3Ryb3koKQorKgorKiBOb3RlIHRoYXQgZGVzdHJveSgpIGNhbiBiZSBjYWxsZWQgd2l0aG91dCBjYWxsaW5nIHN0b3AoKSBmaXJzdC4KKyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyovCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisKKy8qIFN5c3RlbSBJbmNsdWRlcyAqLworI2RlZmluZSBXTEFOX0RCVkFSCXByaXNtMl9kZWJ1ZworI2luY2x1ZGUgInZlcnNpb24uaCIKKworCisjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgorCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+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+d2xhbmRldjsKKwlpbnQgY291bnRlciA9IHByaXNtMl9pcnFfZXZyZWFkX21heDsKKwlpbnQJCQlyZWc7CisKKwlEQkZFTlRFUjsKKworCXdoaWxlIChjb3VudGVyLS0gPiAwKSB7CisJCS8qIEdldCBpbnRlcnJ1cHQgcmVnaXN0ZXIgKi8KKwkJcmVnID0gaGZhMzg0eF9nZXRyZWcoaHcsIEhGQTM4NHhfRVZTVEFUKTsKKworCQlpZiAoKHJlZyA9PSAweGZmZmYpIHx8CisJCSAgICAhKHJlZyAmIEhGQTM4NHhfSU5UX0JBUF9PUCkpIHsKKwkJCWJyZWFrOworCQl9CisKKwkJaWYgKCBIRkEzODR4X0VWU1RBVF9JU0lORk8ocmVnKSApeworCQkJaGZhMzg0eF9pbnRfaW5mbyh3bGFuZGV2KTsKKwkJCWhmYTM4NHhfc2V0cmVnKGh3LCBIRkEzODR4X0VWQUNLX0lORk9fU0VUKDEpLAorCQkJCUhGQTM4NHhfRVZBQ0spOworCQl9CisJCWlmICggSEZBMzg0eF9FVlNUQVRfSVNUWEVYQyhyZWcpICl7CisJCQloZmEzODR4X2ludF90eGV4Yyh3bGFuZGV2KTsKKwkJCWhmYTM4NHhfc2V0cmVnKGh3LCBIRkEzODR4X0VWQUNLX1RYRVhDX1NFVCgxKSwKKwkJCQlIRkEzODR4X0VWQUNLKTsKKwkJfQorCQlpZiAoIEhGQTM4NHhfRVZTVEFUX0lTVFgocmVnKSApeworCQkJaGZhMzg0eF9pbnRfdHgod2xhbmRldik7CisJCQloZmEzODR4X3NldHJlZyhodywgSEZBMzg0eF9FVkFDS19UWF9TRVQoMSksCisJCQkJSEZBMzg0eF9FVkFDSyk7CisJCX0KKwkJaWYgKCBIRkEzODR4X0VWU1RBVF9JU1JYKHJlZykgKXsKKwkJCWhmYTM4NHhfaW50X3J4KHdsYW5kZXYpOworCQkJaGZhMzg0eF9zZXRyZWcoaHcsIEhGQTM4NHhfRVZBQ0tfUlhfU0VUKDEpLAorCQkJCUhGQTM4NHhfRVZBQ0spOworCQl9CisJfQorCisJLyogcmUtZW5hYmxlIGludGVycnVwdHMgKi8KKwloZmEzODR4X2V2ZW50c19hbGwoaHcpOworCisJREJGRVhJVDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL2hmYTM4NHguaCBiL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL2hmYTM4NHguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMjA1NDYzCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvaGZhMzg0eC5oCkBAIC0wLDAgKzEsMzA2NyBAQAorLyogaGZhMzg0eC5oCisqCisqIERlZmluZXMgdGhlIGNvbnN0YW50cyBhbmQgZGF0YSBzdHJ1Y3R1cmVzIGZvciB0aGUgaGZhMzg0eAorKgorKiBDb3B5cmlnaHQgKEMpIDE5OTkgQWJzb2x1dGVWYWx1ZSBTeXN0ZW1zLCBJbmMuICBBbGwgUmlnaHRzIFJlc2VydmVkLgorKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKgorKiBsaW51eC13bGFuCisqCisqICAgVGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBhcmUgc3ViamVjdCB0byB0aGUgTW96aWxsYSBQdWJsaWMKKyogICBMaWNlbnNlIFZlcnNpb24gMS4xICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZQorKiAgIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZgorKiAgIHRoZSBMaWNlbnNlIGF0IGh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBMLworKgorKiAgIFNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUworKiAgIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IKKyogICBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcKKyogICByaWdodHMgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorKgorKiAgIEFsdGVybmF0aXZlbHksIHRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgbWF5IGJlIHVzZWQgdW5kZXIgdGhlCisqICAgdGVybXMgb2YgdGhlIEdOVSBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgKHRoZSAiR1BMIiksIGluIHdoaWNoCisqICAgY2FzZSB0aGUgcHJvdmlzaW9ucyBvZiB0aGUgR1BMIGFyZSBhcHBsaWNhYmxlIGluc3RlYWQgb2YgdGhlCisqICAgYWJvdmUuICBJZiB5b3Ugd2lzaCB0byBhbGxvdyB0aGUgdXNlIG9mIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUKKyogICBvbmx5IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR1BMIGFuZCBub3QgdG8gYWxsb3cgb3RoZXJzIHRvIHVzZQorKiAgIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgdW5kZXIgdGhlIE1QTCwgaW5kaWNhdGUgeW91ciBkZWNpc2lvbgorKiAgIGJ5IGRlbGV0aW5nIHRoZSBwcm92aXNpb25zIGFib3ZlIGFuZCByZXBsYWNlIHRoZW0gd2l0aCB0aGUgbm90aWNlCisqICAgYW5kIG90aGVyIHByb3Zpc2lvbnMgcmVxdWlyZWQgYnkgdGhlIEdQTC4gIElmIHlvdSBkbyBub3QgZGVsZXRlCisqICAgdGhlIHByb3Zpc2lvbnMgYWJvdmUsIGEgcmVjaXBpZW50IG1heSB1c2UgeW91ciB2ZXJzaW9uIG9mIHRoaXMKKyogICBmaWxlIHVuZGVyIGVpdGhlciB0aGUgTVBMIG9yIHRoZSBHUEwuCisqCisqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqCisqIElucXVpcmllcyByZWdhcmRpbmcgdGhlIGxpbnV4LXdsYW4gT3BlbiBTb3VyY2UgcHJvamVjdCBjYW4gYmUKKyogbWFkZSBkaXJlY3RseSB0bzoKKyoKKyogQWJzb2x1dGVWYWx1ZSBTeXN0ZW1zIEluYy4KKyogaW5mb0BsaW51eC13bGFuLmNvbQorKiBodHRwOi8vd3d3LmxpbnV4LXdsYW4uY29tCisqCisqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqCisqIFBvcnRpb25zIG9mIHRoZSBkZXZlbG9wbWVudCBvZiB0aGlzIHNvZnR3YXJlIHdlcmUgZnVuZGVkIGJ5CisqIEludGVyc2lsIENvcnBvcmF0aW9uIGFzIHBhcnQgb2YgUFJJU00oUikgY2hpcHNldCBwcm9kdWN0IGRldmVsb3BtZW50LgorKgorKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKgorKiAgIFtJbXBsZW1lbnRhdGlvbiBhbmQgdXNhZ2Ugbm90ZXNdCisqCisqICAgW1JlZmVyZW5jZXNdCisqCUNXMTAgUHJvZ3JhbW1lcidzIE1hbnVhbCB2MS41CisqCUlFRUUgODAyLjExIEQxMC4wCisqCisqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqLworCisjaWZuZGVmIF9IRkEzODR4X0gKKyNkZWZpbmUgX0hGQTM4NHhfSAorCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworI2RlZmluZSBIRkEzODR4X0ZJUk1XQVJFX1ZFUlNJT04oYSxiLGMpICgoKGEpIDw8IDE2KSArICgoYikgPDwgOCkgKyAoYykpCisKKyNkZWZpbmUgSEZBMzg0eF9MRVZFTF9UT19kQm0odikgICAoMHgxMDAgKyAodikgKiAxMDAgLyAyNTUgLSAxMDApCisKKy8qLS0tLS0tIENvbnN0YW50cyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKi0tLSBNaW5zICYgTWF4cyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZGVmaW5lCQlIRkEzODR4X0NNRF9BTExPQ19MRU5fTUlOCSgoVUlOVDE2KTQpCisjZGVmaW5lCQlIRkEzODR4X0NNRF9BTExPQ19MRU5fTUFYCSgoVUlOVDE2KTI0MDApCisjZGVmaW5lCQlIRkEzODR4X0JBUF9EQVRBTEVOX01BWAkJKChVSU5UMTYpNDA5NikKKyNkZWZpbmUJCUhGQTM4NHhfQkFQX09GRlNFVF9NQVgJCSgoVUlOVDE2KTQwOTYpCisjZGVmaW5lCQlIRkEzODR4X1BPUlRJRF9NQVgJCSgoVUlOVDE2KTcpCisjZGVmaW5lCQlIRkEzODR4X05VTVBPUlRTX01BWAkJKChVSU5UMTYpKEhGQTM4NHhfUE9SVElEX01BWCsxKSkKKyNkZWZpbmUJCUhGQTM4NHhfUERSX0xFTl9NQVgJCSgoVUlOVDE2KTUxMikJLyogaW4gYnl0ZXMsIGZyb20gRUsgKi8KKyNkZWZpbmUJCUhGQTM4NHhfUERBX1JFQ1NfTUFYCQkoKFVJTlQxNikyMDApCS8qIGEgZ3Vlc3MgKi8KKyNkZWZpbmUJCUhGQTM4NHhfUERBX0xFTl9NQVgJCSgoVUlOVDE2KTEwMjQpCS8qIGluIGJ5dGVzLCBmcm9tIEVLICovCisjZGVmaW5lCQlIRkEzODR4X1NDQU5SRVNVTFRfTUFYCQkoKFVJTlQxNikzMSkKKyNkZWZpbmUJCUhGQTM4NHhfSFNDQU5SRVNVTFRfTUFYCQkoKFVJTlQxNikzMSkKKyNkZWZpbmUJCUhGQTM4NHhfQ0hJTkZPUkVTVUxUX01BWAkoKFVJTlQxNikxNikKKyNkZWZpbmUJCUhGQTM4NHhfRFJWUl9GSURTVEFDS0xFTl9NQVgJKDEwKQorI2RlZmluZQkJSEZBMzg0eF9EUlZSX1RYQlVGX01BWAkJKHNpemVvZihoZmEzODR4X3R4X2ZyYW1lX3QpICsgXAorCQkJCQkJV0xBTl9EQVRBX01BWExFTiAtIFwKKwkJCQkJCVdMQU5fV0VQX0lWX0xFTiAtIFwKKwkJCQkJCVdMQU5fV0VQX0lDVl9MRU4gKyAyKQorI2RlZmluZQkJSEZBMzg0eF9EUlZSX01BR0lDCQkoMHg0YTJkKQorI2RlZmluZQkJSEZBMzg0eF9JTkZPREFUQV9NQVhMRU4JCShzaXplb2YoaGZhMzg0eF9pbmZvZGF0YV90KSkKKyNkZWZpbmUJCUhGQTM4NHhfSU5GT0ZSTV9NQVhMRU4JCShzaXplb2YoaGZhMzg0eF9JbmZGcmFtZV90KSkKKyNkZWZpbmUJCUhGQTM4NHhfUklEX0dVRVNTSU5HX01BWExFTgkyMDQ4ICAvKiBJJ20gbm90IHJlYWxseSBzdXJlICovCisjZGVmaW5lCQlIRkEzODR4X1JJRERBVEFfTUFYTEVOCQlIRkEzODR4X1JJRF9HVUVTU0lOR19NQVhMRU4KKyNkZWZpbmUJCUhGQTM4NHhfVVNCX1JXTUVNX01BWExFTgkyMDQ4CisKKy8qLS0tIFN1cHBvcnQgQ29uc3RhbnRzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNkZWZpbmUJCUhGQTM4NHhfQkFQX1BST0MJCQkoKFVJTlQxNikwKQorI2RlZmluZQkJSEZBMzg0eF9CQVBfSU5UCQkJCSgoVUlOVDE2KTEpCisjZGVmaW5lCQlIRkEzODR4X1BPUlRUWVBFX0lCU1MJCQkoKFVJTlQxNikwKQorI2RlZmluZQkJSEZBMzg0eF9QT1JUVFlQRV9CU1MJCQkoKFVJTlQxNikxKQorI2RlZmluZQkJSEZBMzg0eF9QT1JUVFlQRV9XRFMJCQkoKFVJTlQxNikyKQorI2RlZmluZQkJSEZBMzg0eF9QT1JUVFlQRV9QU1VFRE9JQlNTCQkoKFVJTlQxNikzKQorI2RlZmluZQkJSEZBMzg0eF9QT1JUVFlQRV9IT1NUQVAgICAgCQkoKFVJTlQxNik2KQorI2RlZmluZQkJSEZBMzg0eF9XRVBGTEFHU19QUklWSU5WT0tFRAkJKChVSU5UMTYpQklUMCkKKyNkZWZpbmUJCUhGQTM4NHhfV0VQRkxBR1NfRVhDTFVERQkJKChVSU5UMTYpQklUMSkKKyNkZWZpbmUJCUhGQTM4NHhfV0VQRkxBR1NfRElTQUJMRV9UWENSWVBUCSgoVUlOVDE2KUJJVDQpCisjZGVmaW5lCQlIRkEzODR4X1dFUEZMQUdTX0RJU0FCTEVfUlhDUllQVAkoKFVJTlQxNilCSVQ3KQorI2RlZmluZQkJSEZBMzg0eF9XRVBGTEFHU19ESVNBTExPV19NSVhFRCAJKChVSU5UMTYpQklUMTEpCisjZGVmaW5lCQlIRkEzODR4X1dFUEZMQUdTX0lWX0lOVEVSVkFMMQkJKChVSU5UMTYpMCkKKyNkZWZpbmUJCUhGQTM4NHhfV0VQRkxBR1NfSVZfSU5URVJWQUwxMAkJKChVSU5UMTYpQklUNSkKKyNkZWZpbmUJCUhGQTM4NHhfV0VQRkxBR1NfSVZfSU5URVJWQUw1MAkJKChVSU5UMTYpQklUNikKKyNkZWZpbmUJCUhGQTM4NHhfV0VQRkxBR1NfSVZfSU5URVJWQUwxMDAJCSgoVUlOVDE2KShCSVQ1IHwgQklUNikpCisjZGVmaW5lCQlIRkEzODR4X1dFUEZMQUdTX0ZJUk1XQVJFX1dQQSAgCQkoKFVJTlQxNilCSVQ4KQorI2RlZmluZQkJSEZBMzg0eF9XRVBGTEFHU19IT1NUX01JQyAgICAgIAkJKChVSU5UMTYpQklUOSkKKyNkZWZpbmUgCUhGQTM4NHhfUk9BTU1PREVfRldTQ0FOX0ZXUk9BTQkJKChVSU5UMTYpMSkKKyNkZWZpbmUgCUhGQTM4NHhfUk9BTU1PREVfRldTQ0FOX0hPU1RST0FNCSgoVUlOVDE2KTIpCisjZGVmaW5lIAlIRkEzODR4X1JPQU1NT0RFX0hPU1RTQ0FOX0hPU1RST0FNCSgoVUlOVDE2KTMpCisjZGVmaW5lIAlIRkEzODR4X1BPUlRTVEFUVVNfRElTQUJMRUQJCSgoVUlOVDE2KTEpCisjZGVmaW5lIAlIRkEzODR4X1BPUlRTVEFUVVNfSU5JVFNSQ0gJCSgoVUlOVDE2KTIpCisjZGVmaW5lIAlIRkEzODR4X1BPUlRTVEFUVVNfQ09OTl9JQlNTCQkoKFVJTlQxNikzKQorI2RlZmluZSAJSEZBMzg0eF9QT1JUU1RBVFVTX0NPTk5fRVNTCQkoKFVJTlQxNik0KQorI2RlZmluZSAJSEZBMzg0eF9QT1JUU1RBVFVTX09PUl9FU1MJCSgoVUlOVDE2KTUpCisjZGVmaW5lIAlIRkEzODR4X1BPUlRTVEFUVVNfQ09OTl9XRFMJCSgoVUlOVDE2KTYpCisjZGVmaW5lIAlIRkEzODR4X1BPUlRTVEFUVVNfSE9TVEFQCQkoKFVJTlQxNik4KQorI2RlZmluZQkJSEZBMzg0eF9SQVRFQklUXzEJCQkoKFVJTlQxNikxKQorI2RlZmluZQkJSEZBMzg0eF9SQVRFQklUXzIJCQkoKFVJTlQxNikyKQorI2RlZmluZQkJSEZBMzg0eF9SQVRFQklUXzVkb3Q1CQkJKChVSU5UMTYpNCkKKyNkZWZpbmUJCUhGQTM4NHhfUkFURUJJVF8xMQkJCSgoVUlOVDE2KTgpCisKKy8qLS0tIEp1c3Qgc29tZSBzeW1ib2xpYyBuYW1lcyBmb3IgbGVnaWJpbGl0eSAtLS0tLS0tKi8KKyNkZWZpbmUJCUhGQTM4NHhfVFhDTURfTk9SRUNMCQkoKFVJTlQxNikwKQorI2RlZmluZQkJSEZBMzg0eF9UWENNRF9SRUNMCQkoKFVJTlQxNikxKQorCisvKi0tLSBNQUMgSW50ZXJuYWwgbWVtb3J5IGNvbnN0YW50cyBhbmQgbWFjcm9zIC0tLS0tLSovCisvKiBtYXNrcyBhbmQgbWFjcm9zIHVzZWQgdG8gbWFuaXB1bGF0ZSBNQUMgaW50ZXJuYWwgbWVtb3J5IGFkZHJlc3Nlcy4gKi8KKy8qIE1BQyBpbnRlcm5hbCBtZW1vcnkgYWRkcmVzc2VzIGFyZSAyMyBiaXQgcXVhbnRpdGllcy4gIFRoZSBNQUMgdXNlcworICogYSBwYWdlZCBhZGRyZXNzIHNwYWNlIHdoZXJlIHRoZSB1cHBlciAxNiBiaXRzIGFyZSB0aGUgcGFnZSBudW1iZXIKKyAqIGFuZCB0aGUgbG93ZXIgNyBiaXRzIGFyZSB0aGUgb2Zmc2V0LiAgVGhlcmUgYXJlIHZhcmlvdXMgSG9zdCBBUEkKKyAqIGVsZW1lbnRzIHRoYXQgcmVxdWlyZSB0d28gMTYtYml0IHF1YW50aXRpZXMgdG8gc3BlY2lmeSBhIE1BQworICogaW50ZXJuYWwgbWVtb3J5IGFkZHJlc3MuICBVbmZvcnR1bmF0ZWx5LCBzb21lIG9mIHRoZSBBUEkncyB1c2UgYQorICogcGFnZS9vZmZzZXQgZm9ybWF0IHdoZXJlIHRoZSBvZmZzZXQgdmFsdWUgaXMgSlVTVCB0aGUgbG93ZXIgc2V2ZW4KKyAqIGJpdHMgYW5kIHRoZSBwYWdlIGlzICB0aGUgcmVtYWluaW5nIDE2IGJpdHMuICBTb21lIG9mIHRoZSBBUEkncworICogYXNzdW1lIHRoYXQgdGhlIDIzIGJpdCBhZGRyZXNzIGhhcyBiZWVuIHNwbGl0IGF0IHRoZSAxNnRoIGJpdC4gIFdlCisgKiByZWZlciB0byB0aGVzZSB0d28gZm9ybWF0cyBhcyBBVVggZm9ybWF0IGFuZCBDTUQgZm9ybWF0LiAgVGhlCisgKiBtYWNyb3MgYmVsb3cgaGVscCBoYW5kbGUgc29tZSBvZiB0aGlzLgorICovCisKKy8qIEhhbmR5IGNvbnN0YW50ICovCisjZGVmaW5lCQlIRkEzODR4X0FERFJfQVVYX09GRl9NQVgJKChVSU5UMTYpMHgwMDdmKQorCisvKiBNYXNrIGJpdHMgZm9yIGRpc2NhcmRpbmcgdW53YW50ZWQgcGllY2VzIGluIGEgZmxhdCBhZGRyZXNzICovCisjZGVmaW5lCQlIRkEzODR4X0FERFJfRkxBVF9BVVhfUEFHRV9NQVNLCSgweDAwN2ZmZjgwKQorI2RlZmluZQkJSEZBMzg0eF9BRERSX0ZMQVRfQVVYX09GRl9NQVNLCSgweDAwMDAwMDdmKQorI2RlZmluZQkJSEZBMzg0eF9BRERSX0ZMQVRfQ01EX1BBR0VfTUFTSwkoMHhmZmZmMDAwMCkKKyNkZWZpbmUJCUhGQTM4NHhfQUREUl9GTEFUX0NNRF9PRkZfTUFTSwkoMHgwMDAwZmZmZikKKworLyogTWFzayBiaXRzIGZvciBkaXNjYXJkaW5nIHVud2FudGVkIHBpZWNlcyBpbiBBVVggZm9ybWF0IDE2LWJpdCBhZGRyZXNzIHBhcnRzICovCisjZGVmaW5lCQlIRkEzODR4X0FERFJfQVVYX1BBR0VfTUFTSwkoMHhmZmZmKQorI2RlZmluZQkJSEZBMzg0eF9BRERSX0FVWF9PRkZfTUFTSwkoMHgwMDdmKQorCisvKiBNYXNrIGJpdHMgZm9yIGRpc2NhcmRpbmcgdW53YW50ZWQgcGllY2VzIGluIENNRCBmb3JtYXQgMTYtYml0IGFkZHJlc3MgcGFydHMgKi8KKyNkZWZpbmUJCUhGQTM4NHhfQUREUl9DTURfUEFHRV9NQVNLCSgweDAwN2YpCisjZGVmaW5lCQlIRkEzODR4X0FERFJfQ01EX09GRl9NQVNLCSgweGZmZmYpCisKKy8qIE1ha2UgYSAzMi1iaXQgZmxhdCBhZGRyZXNzIGZyb20gQVVYIGZvcm1hdCAxNi1iaXQgcGFnZSBhbmQgb2Zmc2V0ICovCisjZGVmaW5lCQlIRkEzODR4X0FERFJfQVVYX01LRkxBVChwLG8pCVwKKwkJKCgoVUlOVDMyKSgoKFVJTlQxNikocCkpJkhGQTM4NHhfQUREUl9BVVhfUEFHRV9NQVNLKSkgPDw3KSB8IFwKKwkJKChVSU5UMzIpKCgoVUlOVDE2KShvKSkmSEZBMzg0eF9BRERSX0FVWF9PRkZfTUFTSykpCisKKy8qIE1ha2UgYSAzMi1iaXQgZmxhdCBhZGRyZXNzIGZyb20gQ01EIGZvcm1hdCAxNi1iaXQgcGFnZSBhbmQgb2Zmc2V0ICovCisjZGVmaW5lCQlIRkEzODR4X0FERFJfQ01EX01LRkxBVChwLG8pCVwKKwkJKCgoVUlOVDMyKSgoKFVJTlQxNikocCkpJkhGQTM4NHhfQUREUl9DTURfUEFHRV9NQVNLKSkgPDwxNikgfCBcCisJCSgoVUlOVDMyKSgoKFVJTlQxNikobykpJkhGQTM4NHhfQUREUl9DTURfT0ZGX01BU0spKQorCisvKiBNYWtlIEFVWCBmb3JtYXQgb2Zmc2V0IGFuZCBwYWdlIGZyb20gYSAzMi1iaXQgZmxhdCBhZGRyZXNzICovCisjZGVmaW5lCQlIRkEzODR4X0FERFJfQVVYX01LUEFHRShmKSBcCisJCSgoVUlOVDE2KSgoKChVSU5UMzIpKGYpKSZIRkEzODR4X0FERFJfRkxBVF9BVVhfUEFHRV9NQVNLKT4+NykpCisjZGVmaW5lCQlIRkEzODR4X0FERFJfQVVYX01LT0ZGKGYpIFwKKwkJKChVSU5UMTYpKCgoVUlOVDMyKShmKSkmSEZBMzg0eF9BRERSX0ZMQVRfQVVYX09GRl9NQVNLKSkKKworLyogTWFrZSBDTUQgZm9ybWF0IG9mZnNldCBhbmQgcGFnZSBmcm9tIGEgMzItYml0IGZsYXQgYWRkcmVzcyAqLworI2RlZmluZQkJSEZBMzg0eF9BRERSX0NNRF9NS1BBR0UoZikgXAorCQkoKFVJTlQxNikoKCgoVUlOVDMyKShmKSkmSEZBMzg0eF9BRERSX0ZMQVRfQ01EX1BBR0VfTUFTSyk+PjE2KSkKKyNkZWZpbmUJCUhGQTM4NHhfQUREUl9DTURfTUtPRkYoZikgXAorCQkoKFVJTlQxNikoKChVSU5UMzIpKGYpKSZIRkEzODR4X0FERFJfRkxBVF9DTURfT0ZGX01BU0spKQorCisvKi0tLSBBdXggcmVnaXN0ZXIgbWFza3MvdGVzdHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiBTb21lIG9mIHRoZSB1cHBlciBiaXRzIG9mIHRoZSBBVVggb2Zmc2V0IHJlZ2lzdGVyIGFyZSB1c2VkIHRvICovCisvKiAgc2VsZWN0IGFkZHJlc3Mgc3BhY2UuICovCisjZGVmaW5lCQlIRkEzODR4X0FVWF9DVExfRVhURFMJKDB4MDApCisjZGVmaW5lCQlIRkEzODR4X0FVWF9DVExfTlYJKDB4MDEpCisjZGVmaW5lCQlIRkEzODR4X0FVWF9DVExfUEhZCSgweDAyKQorI2RlZmluZQkJSEZBMzg0eF9BVVhfQ1RMX0lDU1JBTQkoMHgwMykKKworLyogTWFrZSBBVVggcmVnaXN0ZXIgb2Zmc2V0IGFuZCBwYWdlIHZhbHVlcyBmcm9tIGEgZmxhdCBhZGRyZXNzICovCisjZGVmaW5lCQlIRkEzODR4X0FVWF9NS09GRihmLCBjKSBcCisJKEhGQTM4NHhfQUREUl9BVVhfTUtPRkYoZikgfCAoKChVSU5UMTYpKGMpKTw8MTIpKQorI2RlZmluZQkJSEZBMzg0eF9BVVhfTUtQQUdFKGYpCUhGQTM4NHhfQUREUl9BVVhfTUtQQUdFKGYpCisKKworLyotLS0gQ29udHJvbGxlciBNZW1vcnkgYWRkcmVzc2VzIC0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2RlZmluZQkJSEZBMzg0Ml9QREFfQkFTRQkoMHgwMDdmMDAwMFVMKQorI2RlZmluZQkJSEZBMzg0MV9QREFfQkFTRQkoMHgwMDNmMDAwMFVMKQorI2RlZmluZQkJSEZBMzg0MV9QREFfQk9HVVNfQkFTRQkoMHgwMDM5MDAwMFVMKQorCisvKi0tLSBEcml2ZXIgRG93bmxvYWQgc3RhdGVzICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZGVmaW5lCQlIRkEzODR4X0RMU1RBVEVfRElTQUJMRUQJCTAKKyNkZWZpbmUJCUhGQTM4NHhfRExTVEFURV9SQU1FTkFCTEVECQkxCisjZGVmaW5lCQlIRkEzODR4X0RMU1RBVEVfRkxBU0hFTkFCTEVECQkyCisjZGVmaW5lCQlIRkEzODR4X0RMU1RBVEVfRkxBU0hXUklUVEVOCQkzCisjZGVmaW5lCQlIRkEzODR4X0RMU1RBVEVfRkxBU0hXUklURVBFTkRJTkcJNAorI2RlZmluZQkJSEZBMzg0eF9ETFNUQVRFX0dFTkVTSVMgCQk1CisKKy8qLS0tIFJlZ2lzdGVyIEkvTyBvZmZzZXRzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNpZiAoKFdMQU5fSE9TVElGID09IFdMQU5fUENNQ0lBKSB8fCAoV0xBTl9IT1NUSUYgPT0gV0xBTl9QTFgpKQorCisjZGVmaW5lCQlIRkEzODR4X0NNRF9PRkYJCQkoMHgwMCkKKyNkZWZpbmUJCUhGQTM4NHhfUEFSQU0wX09GRgkJKDB4MDIpCisjZGVmaW5lCQlIRkEzODR4X1BBUkFNMV9PRkYJCSgweDA0KQorI2RlZmluZQkJSEZBMzg0eF9QQVJBTTJfT0ZGCQkoMHgwNikKKyNkZWZpbmUJCUhGQTM4NHhfU1RBVFVTX09GRgkJKDB4MDgpCisjZGVmaW5lCQlIRkEzODR4X1JFU1AwX09GRgkJKDB4MEEpCisjZGVmaW5lCQlIRkEzODR4X1JFU1AxX09GRgkJKDB4MEMpCisjZGVmaW5lCQlIRkEzODR4X1JFU1AyX09GRgkJKDB4MEUpCisjZGVmaW5lCQlIRkEzODR4X0lORk9GSURfT0ZGCQkoMHgxMCkKKyNkZWZpbmUJCUhGQTM4NHhfUlhGSURfT0ZGCQkoMHgyMCkKKyNkZWZpbmUJCUhGQTM4NHhfQUxMT0NGSURfT0ZGCQkoMHgyMikKKyNkZWZpbmUJCUhGQTM4NHhfVFhDT01QTEZJRF9PRkYJCSgweDI0KQorI2RlZmluZQkJSEZBMzg0eF9TRUxFQ1QwX09GRgkJKDB4MTgpCisjZGVmaW5lCQlIRkEzODR4X09GRlNFVDBfT0ZGCQkoMHgxQykKKyNkZWZpbmUJCUhGQTM4NHhfREFUQTBfT0ZGCQkoMHgzNikKKyNkZWZpbmUJCUhGQTM4NHhfU0VMRUNUMV9PRkYJCSgweDFBKQorI2RlZmluZQkJSEZBMzg0eF9PRkZTRVQxX09GRgkJKDB4MUUpCisjZGVmaW5lCQlIRkEzODR4X0RBVEExX09GRgkJKDB4MzgpCisjZGVmaW5lCQlIRkEzODR4X0VWU1RBVF9PRkYJCSgweDMwKQorI2RlZmluZQkJSEZBMzg0eF9JTlRFTl9PRkYJCSgweDMyKQorI2RlZmluZQkJSEZBMzg0eF9FVkFDS19PRkYJCSgweDM0KQorI2RlZmluZQkJSEZBMzg0eF9DT05UUk9MX09GRgkJKDB4MTQpCisjZGVmaW5lCQlIRkEzODR4X1NXU1VQUE9SVDBfT0ZGCQkoMHgyOCkKKyNkZWZpbmUJCUhGQTM4NHhfU1dTVVBQT1JUMV9PRkYJCSgweDJBKQorI2RlZmluZQkJSEZBMzg0eF9TV1NVUFBPUlQyX09GRgkJKDB4MkMpCisjZGVmaW5lCQlIRkEzODR4X0FVWFBBR0VfT0ZGCQkoMHgzQSkKKyNkZWZpbmUJCUhGQTM4NHhfQVVYT0ZGU0VUX09GRgkJKDB4M0MpCisjZGVmaW5lCQlIRkEzODR4X0FVWERBVEFfT0ZGCQkoMHgzRSkKKworI2VsaWYgKFdMQU5fSE9TVElGID09IFdMQU5fUENJIHx8IFdMQU5fSE9TVElGID09IFdMQU5fVVNCKQorCisjZGVmaW5lCQlIRkEzODR4X0NNRF9PRkYJCQkoMHgwMCkKKyNkZWZpbmUJCUhGQTM4NHhfUEFSQU0wX09GRgkJKDB4MDQpCisjZGVmaW5lCQlIRkEzODR4X1BBUkFNMV9PRkYJCSgweDA4KQorI2RlZmluZQkJSEZBMzg0eF9QQVJBTTJfT0ZGCQkoMHgwYykKKyNkZWZpbmUJCUhGQTM4NHhfU1RBVFVTX09GRgkJKDB4MTApCisjZGVmaW5lCQlIRkEzODR4X1JFU1AwX09GRgkJKDB4MTQpCisjZGVmaW5lCQlIRkEzODR4X1JFU1AxX09GRgkJKDB4MTgpCisjZGVmaW5lCQlIRkEzODR4X1JFU1AyX09GRgkJKDB4MWMpCisjZGVmaW5lCQlIRkEzODR4X0lORk9GSURfT0ZGCQkoMHgyMCkKKyNkZWZpbmUJCUhGQTM4NHhfUlhGSURfT0ZGCQkoMHg0MCkKKyNkZWZpbmUJCUhGQTM4NHhfQUxMT0NGSURfT0ZGCQkoMHg0NCkKKyNkZWZpbmUJCUhGQTM4NHhfVFhDT01QTEZJRF9PRkYJCSgweDQ4KQorI2RlZmluZQkJSEZBMzg0eF9TRUxFQ1QwX09GRgkJKDB4MzApCisjZGVmaW5lCQlIRkEzODR4X09GRlNFVDBfT0ZGCQkoMHgzOCkKKyNkZWZpbmUJCUhGQTM4NHhfREFUQTBfT0ZGCQkoMHg2YykKKyNkZWZpbmUJCUhGQTM4NHhfU0VMRUNUMV9PRkYJCSgweDM0KQorI2RlZmluZQkJSEZBMzg0eF9PRkZTRVQxX09GRgkJKDB4M2MpCisjZGVmaW5lCQlIRkEzODR4X0RBVEExX09GRgkJKDB4NzApCisjZGVmaW5lCQlIRkEzODR4X0VWU1RBVF9PRkYJCSgweDYwKQorI2RlZmluZQkJSEZBMzg0eF9JTlRFTl9PRkYJCSgweDY0KQorI2RlZmluZQkJSEZBMzg0eF9FVkFDS19PRkYJCSgweDY4KQorI2RlZmluZQkJSEZBMzg0eF9DT05UUk9MX09GRgkJKDB4MjgpCisjZGVmaW5lCQlIRkEzODR4X1NXU1VQUE9SVDBfT0ZGCQkoMHg1MCkKKyNkZWZpbmUJCUhGQTM4NHhfU1dTVVBQT1JUMV9PRkYJCSgweDU0KQorI2RlZmluZQkJSEZBMzg0eF9TV1NVUFBPUlQyX09GRgkJKDB4NTgpCisjZGVmaW5lCQlIRkEzODR4X0FVWFBBR0VfT0ZGCQkoMHg3NCkKKyNkZWZpbmUJCUhGQTM4NHhfQVVYT0ZGU0VUX09GRgkJKDB4NzgpCisjZGVmaW5lCQlIRkEzODR4X0FVWERBVEFfT0ZGCQkoMHg3YykKKyNkZWZpbmUJCUhGQTM4NHhfUENJQ09SX09GRgkJKDB4NGMpCisjZGVmaW5lCQlIRkEzODR4X1BDSUhDUl9PRkYJCSgweDVjKQorI2RlZmluZQkJSEZBMzg0eF9QQ0lfTTBfQUREUkhfT0ZGCSgweDgwKQorI2RlZmluZQkJSEZBMzg0eF9QQ0lfTTBfQUREUkxfT0ZGCSgweDg0KQorI2RlZmluZQkJSEZBMzg0eF9QQ0lfTTBfTEVOX09GRgkJKDB4ODgpCisjZGVmaW5lCQlIRkEzODR4X1BDSV9NMF9DVExfT0ZGCQkoMHg4YykKKyNkZWZpbmUJCUhGQTM4NHhfUENJX1NUQVRVU19PRkYJCSgweDk4KQorI2RlZmluZQkJSEZBMzg0eF9QQ0lfTTFfQUREUkhfT0ZGCSgweGEwKQorI2RlZmluZQkJSEZBMzg0eF9QQ0lfTTFfQUREUkxfT0ZGCSgweGE0KQorI2RlZmluZQkJSEZBMzg0eF9QQ0lfTTFfTEVOX09GRgkJKDB4YTgpCisjZGVmaW5lCQlIRkEzODR4X1BDSV9NMV9DVExfT0ZGCQkoMHhhYykKKworI2VuZGlmCisKKy8qLS0tIFJlZ2lzdGVyIEZpZWxkIE1hc2tzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNkZWZpbmUJCUhGQTM4NHhfQ01EX0JVU1kJCSgoVUlOVDE2KUJJVDE1KQorI2RlZmluZQkJSEZBMzg0eF9DTURfQUlORk8JCSgoVUlOVDE2KShCSVQxNCB8IEJJVDEzIHwgQklUMTIgfCBCSVQxMSB8IEJJVDEwIHwgQklUOSB8IEJJVDgpKQorI2RlZmluZQkJSEZBMzg0eF9DTURfTUFDUE9SVAkJKChVSU5UMTYpKEJJVDEwIHwgQklUOSB8IEJJVDgpKQorI2RlZmluZQkJSEZBMzg0eF9DTURfUkVDTAkJKChVSU5UMTYpQklUOCkKKyNkZWZpbmUJCUhGQTM4NHhfQ01EX1dSSVRFCQkoKFVJTlQxNilCSVQ4KQorI2RlZmluZQkJSEZBMzg0eF9DTURfUFJPR01PREUJCSgoVUlOVDE2KShCSVQ5IHwgQklUOCkpCisjZGVmaW5lCQlIRkEzODR4X0NNRF9DTURDT0RFCQkoKFVJTlQxNikoQklUNSB8IEJJVDQgfCBCSVQzIHwgQklUMiB8IEJJVDEgfCBCSVQwKSkKKworI2RlZmluZQkJSEZBMzg0eF9TVEFUVVNfUkVTVUxUCQkoKFVJTlQxNikoQklUMTQgfCBCSVQxMyB8IEJJVDEyIHwgQklUMTEgfCBCSVQxMCB8IEJJVDkgfCBCSVQ4KSkKKyNkZWZpbmUJCUhGQTM4NHhfU1RBVFVTX0NNRENPREUJCSgoVUlOVDE2KShCSVQ1IHwgQklUNCB8IEJJVDMgfCBCSVQyIHwgQklUMSB8IEJJVDApKQorCisjZGVmaW5lCQlIRkEzODR4X09GRlNFVF9CVVNZCQkoKFVJTlQxNilCSVQxNSkKKyNkZWZpbmUJCUhGQTM4NHhfT0ZGU0VUX0VSUgkJKChVSU5UMTYpQklUMTQpCisjZGVmaW5lCQlIRkEzODR4X09GRlNFVF9EQVRBT0ZGCQkoKFVJTlQxNikoQklUMTEgfCBCSVQxMCB8IEJJVDkgfCBCSVQ4IHwgQklUNyB8IEJJVDYgfCBCSVQ1IHwgQklUNCB8IEJJVDMgfCBCSVQyIHwgQklUMSkpCisKKyNkZWZpbmUJCUhGQTM4NHhfRVZTVEFUX1RJQ0sJCSgoVUlOVDE2KUJJVDE1KQorI2RlZmluZQkJSEZBMzg0eF9FVlNUQVRfV1RFUlIJCSgoVUlOVDE2KUJJVDE0KQorI2RlZmluZQkJSEZBMzg0eF9FVlNUQVRfSU5GRFJPUAkJKChVSU5UMTYpQklUMTMpCisjZGVmaW5lCQlIRkEzODR4X0VWU1RBVF9JTkZPCQkoKFVJTlQxNilCSVQ3KQorI2RlZmluZQkJSEZBMzg0eF9FVlNUQVRfRFRJTQkJKChVSU5UMTYpQklUNSkKKyNkZWZpbmUJCUhGQTM4NHhfRVZTVEFUX0NNRAkJKChVSU5UMTYpQklUNCkKKyNkZWZpbmUJCUhGQTM4NHhfRVZTVEFUX0FMTE9DCQkoKFVJTlQxNilCSVQzKQorI2RlZmluZQkJSEZBMzg0eF9FVlNUQVRfVFhFWEMJCSgoVUlOVDE2KUJJVDIpCisjZGVmaW5lCQlIRkEzODR4X0VWU1RBVF9UWAkJKChVSU5UMTYpQklUMSkKKyNkZWZpbmUJCUhGQTM4NHhfRVZTVEFUX1JYCQkoKFVJTlQxNilCSVQwKQorCisjZGVmaW5lICAgICAgICAgSEZBMzg0eF9JTlRfQkFQX09QICAgICAgICAgICAoSEZBMzg0eF9FVlNUQVRfSU5GT3xIRkEzODR4X0VWU1RBVF9SWHxIRkEzODR4X0VWU1RBVF9UWHxIRkEzODR4X0VWU1RBVF9UWEVYQykKKworI2RlZmluZSAgICAgICAgIEhGQTM4NHhfSU5UX05PUk1BTCAgICAgICAgICAgKEhGQTM4NHhfRVZTVEFUX0lORk98SEZBMzg0eF9FVlNUQVRfUlh8SEZBMzg0eF9FVlNUQVRfVFh8SEZBMzg0eF9FVlNUQVRfVFhFWEN8SEZBMzg0eF9FVlNUQVRfSU5GRFJPUHxIRkEzODR4X0VWU1RBVF9BTExPQ3xIRkEzODR4X0VWU1RBVF9EVElNKQorCisjZGVmaW5lCQlIRkEzODR4X0lOVEVOX1RJQ0sJCSgoVUlOVDE2KUJJVDE1KQorI2RlZmluZQkJSEZBMzg0eF9JTlRFTl9XVEVSUgkJKChVSU5UMTYpQklUMTQpCisjZGVmaW5lCQlIRkEzODR4X0lOVEVOX0lORkRST1AJCSgoVUlOVDE2KUJJVDEzKQorI2RlZmluZQkJSEZBMzg0eF9JTlRFTl9JTkZPCQkoKFVJTlQxNilCSVQ3KQorI2RlZmluZQkJSEZBMzg0eF9JTlRFTl9EVElNCQkoKFVJTlQxNilCSVQ1KQorI2RlZmluZQkJSEZBMzg0eF9JTlRFTl9DTUQJCSgoVUlOVDE2KUJJVDQpCisjZGVmaW5lCQlIRkEzODR4X0lOVEVOX0FMTE9DCQkoKFVJTlQxNilCSVQzKQorI2RlZmluZQkJSEZBMzg0eF9JTlRFTl9UWEVYQwkJKChVSU5UMTYpQklUMikKKyNkZWZpbmUJCUhGQTM4NHhfSU5URU5fVFgJCSgoVUlOVDE2KUJJVDEpCisjZGVmaW5lCQlIRkEzODR4X0lOVEVOX1JYCQkoKFVJTlQxNilCSVQwKQorCisjZGVmaW5lCQlIRkEzODR4X0VWQUNLX1RJQ0sJCSgoVUlOVDE2KUJJVDE1KQorI2RlZmluZQkJSEZBMzg0eF9FVkFDS19XVEVSUgkJKChVSU5UMTYpQklUMTQpCisjZGVmaW5lCQlIRkEzODR4X0VWQUNLX0lORkRST1AJCSgoVUlOVDE2KUJJVDEzKQorI2RlZmluZQkJSEZBMzg0eF9FVkFDS19JTkZPCQkoKFVJTlQxNilCSVQ3KQorI2RlZmluZQkJSEZBMzg0eF9FVkFDS19EVElNCQkoKFVJTlQxNilCSVQ1KQorI2RlZmluZQkJSEZBMzg0eF9FVkFDS19DTUQJCSgoVUlOVDE2KUJJVDQpCisjZGVmaW5lCQlIRkEzODR4X0VWQUNLX0FMTE9DCQkoKFVJTlQxNilCSVQzKQorI2RlZmluZQkJSEZBMzg0eF9FVkFDS19UWEVYQwkJKChVSU5UMTYpQklUMikKKyNkZWZpbmUJCUhGQTM4NHhfRVZBQ0tfVFgJCSgoVUlOVDE2KUJJVDEpCisjZGVmaW5lCQlIRkEzODR4X0VWQUNLX1JYCQkoKFVJTlQxNilCSVQwKQorCisjZGVmaW5lCQlIRkEzODR4X0NPTlRST0xfQVVYRU4JCSgoVUlOVDE2KShCSVQxNSB8IEJJVDE0KSkKKworCisvKi0tLSBDb21tYW5kIENvZGUgQ29uc3RhbnRzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qLS0tIENvbnRyb2xsZXIgQ29tbWFuZHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2RlZmluZQkJSEZBMzg0eF9DTURDT0RFX0lOSVQJCSgoVUlOVDE2KTB4MDApCisjZGVmaW5lCQlIRkEzODR4X0NNRENPREVfRU5BQkxFCQkoKFVJTlQxNikweDAxKQorI2RlZmluZQkJSEZBMzg0eF9DTURDT0RFX0RJU0FCTEUJCSgoVUlOVDE2KTB4MDIpCisjZGVmaW5lCQlIRkEzODR4X0NNRENPREVfRElBRwkJKChVSU5UMTYpMHgwMykKKworLyotLS0gQnVmZmVyIE1nbXQgQ29tbWFuZHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2RlZmluZQkJSEZBMzg0eF9DTURDT0RFX0FMTE9DCQkoKFVJTlQxNikweDBBKQorI2RlZmluZQkJSEZBMzg0eF9DTURDT0RFX1RYCQkoKFVJTlQxNikweDBCKQorI2RlZmluZQkJSEZBMzg0eF9DTURDT0RFX0NMUlBSU1QJCSgoVUlOVDE2KTB4MTIpCisKKy8qLS0tIFJlZ3VsYXRlIENvbW1hbmRzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNkZWZpbmUJCUhGQTM4NHhfQ01EQ09ERV9OT1RJRlkJCSgoVUlOVDE2KTB4MTApCisjZGVmaW5lCQlIRkEzODR4X0NNRENPREVfSU5RCQkoKFVJTlQxNikweDExKQorCisvKi0tLSBDb25maWd1cmUgQ29tbWFuZHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2RlZmluZQkJSEZBMzg0eF9DTURDT0RFX0FDQ0VTUwkJKChVSU5UMTYpMHgyMSkKKyNkZWZpbmUJCUhGQTM4NHhfQ01EQ09ERV9ET1dOTEQJCSgoVUlOVDE2KTB4MjIpCisKKy8qLS0tIERlYnVnZ2luZyBDb21tYW5kcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZGVmaW5lIAlIRkEzODR4X0NNRENPREVfTU9OSVRPUgkJKChVSU5UMTYpKDB4MzgpKQorI2RlZmluZQkJSEZBMzg0eF9NT05JVE9SX0VOQUJMRQkJKChVSU5UMTYpKDB4MGIpKQorI2RlZmluZQkJSEZBMzg0eF9NT05JVE9SX0RJU0FCTEUJCSgoVUlOVDE2KSgweDBmKSkKKworLyotLS0gUmVzdWx0IENvZGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNkZWZpbmUJCUhGQTM4NHhfU1VDQ0VTUwkJCSgoVUlOVDE2KSgweDAwKSkKKyNkZWZpbmUJCUhGQTM4NHhfQ0FSRF9GQUlMCQkoKFVJTlQxNikoMHgwMSkpCisjZGVmaW5lCQlIRkEzODR4X05PX0JVRkYJCQkoKFVJTlQxNikoMHgwNSkpCisjZGVmaW5lCQlIRkEzODR4X0NNRF9FUlIJCQkoKFVJTlQxNikoMHg3RikpCisKKy8qLS0tIFByb2dyYW1taW5nIE1vZGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJTU9ERSAwOiBEaXNhYmxlIHByb2dyYW1taW5nCisJTU9ERSAxOiBFbmFibGUgdm9sYXRpbGUgbWVtb3J5IHByb2dyYW1taW5nCisJTU9ERSAyOiBFbmFibGUgbm9uLXZvbGF0aWxlIG1lbW9yeSBwcm9ncmFtbWluZworCU1PREUgMzogUHJvZ3JhbSBub24tdm9sYXRpbGUgbWVtb3J5IHNlY3Rpb24KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNkZWZpbmUJCUhGQTM4NHhfUFJPR01PREVfRElTQUJMRQkoKFVJTlQxNikweDAwKQorI2RlZmluZQkJSEZBMzg0eF9QUk9HTU9ERV9SQU0JCSgoVUlOVDE2KTB4MDEpCisjZGVmaW5lCQlIRkEzODR4X1BST0dNT0RFX05WCQkoKFVJTlQxNikweDAyKQorI2RlZmluZQkJSEZBMzg0eF9QUk9HTU9ERV9OVldSSVRFCSgoVUlOVDE2KTB4MDMpCisKKy8qLS0tIEFVWCByZWdpc3RlciBlbmFibGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2RlZmluZQkJSEZBMzg0eF9BVVhQVzAJCQkoKFVJTlQxNikweGZlMDEpCisjZGVmaW5lCQlIRkEzODR4X0FVWFBXMQkJCSgoVUlOVDE2KTB4ZGMyMykKKyNkZWZpbmUJCUhGQTM4NHhfQVVYUFcyCQkJKChVSU5UMTYpMHhiYTQ1KQorCisjZGVmaW5lCQlIRkEzODR4X0NPTlRST0xfQVVYX0lTRElTQUJMRUQJKChVSU5UMTYpMHgwMDAwKQorI2RlZmluZQkJSEZBMzg0eF9DT05UUk9MX0FVWF9JU0VOQUJMRUQJKChVSU5UMTYpMHhjMDAwKQorI2RlZmluZQkJSEZBMzg0eF9DT05UUk9MX0FVWF9ET0VOQUJMRQkoKFVJTlQxNikweDgwMDApCisjZGVmaW5lCQlIRkEzODR4X0NPTlRST0xfQVVYX0RPRElTQUJMRQkoKFVJTlQxNikweDQwMDApCisKKy8qLS0tIFJlY29yZCBJRCBDb25zdGFudHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQ29uZmlndXJhdGlvbiBSSURzOiBOZXR3b3JrIFBhcmFtZXRlcnMsIFN0YXRpYyBDb25maWd1cmF0aW9uIEVudGl0aWVzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZGVmaW5lCQlIRkEzODR4X1JJRF9DTkZQT1JUVFlQRQkJKChVSU5UMTYpMHhGQzAwKQorI2RlZmluZQkJSEZBMzg0eF9SSURfQ05GT1dOTUFDQUREUgkoKFVJTlQxNikweEZDMDEpCisjZGVmaW5lCQlIRkEzODR4X1JJRF9DTkZERVNJUkVEU1NJRAkoKFVJTlQxNikweEZDMDIpCisjZGVmaW5lCQlIRkEzODR4X1JJRF9DTkZPV05DSEFOTkVMCSgoVUlOVDE2KTB4RkMwMykKKyNkZWZpbmUJCUhGQTM4NHhfUklEX0NORk9XTlNTSUQJCSgoVUlOVDE2KTB4RkMwNCkKKyNkZWZpbmUJCUhGQTM4NHhfUklEX0NORk9XTkFUSU1XSU4JKChVSU5UMTYpMHhGQzA1KQorI2RlZmluZQkJSEZBMzg0eF9SSURfQ05GU1lTU0NBTEUJCSgoVUlOVDE2KTB4RkMwNikKKyNkZWZpbmUJCUhGQTM4NHhfUklEX0NORk1BWERBVEFMRU4JKChVSU5UMTYpMHhGQzA3KQorI2RlZmluZQkJSEZBMzg0eF9SSURfQ05GV0RTQUREUgkJKChVSU5UMTYpMHhGQzA4KQorI2RlZmluZQkJSEZBMzg0eF9SSURfQ05GUE1FTkFCTEVECSgoVUlOVDE2KTB4RkMwOSkKKyNkZWZpbmUJCUhGQTM4NHhfUklEX0NORlBNRVBTCQkoKFVJTlQxNikweEZDMEEpCisjZGVmaW5lCQlIRkEzODR4X1JJRF9DTkZNVUxUSUNBU1RSWAkoKFVJTlQxNikweEZDMEIpCisjZGVmaW5lCQlIRkEzODR4X1JJRF9DTkZNQVhTTEVFUERVUgkoKFVJTlQxNikweEZDMEMpCisjZGVmaW5lCQlIRkEzODR4X1JJRF9DTkZQTUhPTEREVVIJKChVSU5UMTYpMHhGQzBEKQorI2RlZmluZQkJSEZBMzg0eF9SSURfQ05GT1dOTkFNRQkJKChVSU5UMTYpMHhGQzBFKQorI2RlZmluZQkJSEZBMzg0eF9SSURfQ05GT1dORFRJTVBFUgkoKFVJTlQxNikweEZDMTApCisjZGVmaW5lCQlIRkEzODR4X1JJRF9DTkZXRFNBRERSMQkJKChVSU5UMTYpMHhGQzExKQorI2RlZmluZQkJSEZBMzg0eF9SSURfQ05GV0RTQUREUjIJCSgoVUlOVDE2KTB4RkMxMikKKyNkZWZpbmUJCUhGQTM4NHhfUklEX0NORldEU0FERFIzCQkoKFVJTlQxNikweEZDMTMpCisjZGVmaW5lCQlIRkEzODR4X1JJRF9DTkZXRFNBRERSNAkJKChVSU5UMTYpMHhGQzE0KQorI2RlZmluZQkJSEZBMzg0eF9SSURfQ05GV0RTQUREUjUJCSgoVUlOVDE2KTB4RkMxNSkKKyNkZWZpbmUJCUhGQTM4NHhfUklEX0NORldEU0FERFI2CQkoKFVJTlQxNikweEZDMTYpCisjZGVmaW5lCQlIRkEzODR4X1JJRF9DTkZNQ0FTVFBNQlVGRgkoKFVJTlQxNikweEZDMTcpCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0NvbmZpZ3VyYXRpb24gUklEIGxlbmd0aHM6IE5ldHdvcmsgUGFyYW1zLCBTdGF0aWMgQ29uZmlnIEVudGl0aWVzCisgIFRoaXMgaXMgdGhlIGxlbmd0aCBvZiBKVVNUIHRoZSBEQVRBIHBhcnQgb2YgdGhlIFJJRCAoZG9lcyBub3QKKyAgaW5jbHVkZSB0aGUgbGVuIG9yIGNvZGUgZmllbGRzKQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogVE9ETzogZmlsbCBpbiB0aGUgcmVzdCBvZiB0aGVzZSAqLworI2RlZmluZQkJSEZBMzg0eF9SSURfQ05GUE9SVFRZUEVfTEVOCSgoVUlOVDE2KTIpCisjZGVmaW5lCQlIRkEzODR4X1JJRF9DTkZPV05NQUNBRERSX0xFTgkoKFVJTlQxNik2KQorI2RlZmluZQkJSEZBMzg0eF9SSURfQ05GREVTSVJFRFNTSURfTEVOCSgoVUlOVDE2KTM0KQorI2RlZmluZQkJSEZBMzg0eF9SSURfQ05GT1dOQ0hBTk5FTF9MRU4JKChVSU5UMTYpMikKKyNkZWZpbmUJCUhGQTM4NHhfUklEX0NORk9XTlNTSURfTEVOCSgoVUlOVDE2KTM0KQorI2RlZmluZQkJSEZBMzg0eF9SSURfQ05GT1dOQVRJTVdJTl9MRU4JKChVSU5UMTYpMikKKyNkZWZpbmUJCUhGQTM4NHhfUklEX0NORlNZU1NDQUxFX0xFTgkoKFVJTlQxNikwKQorI2RlZmluZQkJSEZBMzg0eF9SSURfQ05GTUFYREFUQUxFTl9MRU4JKChVSU5UMTYpMCkKKyNkZWZpbmUJCUhGQTM4NHhfUklEX0NORldEU0FERFJfTEVOCSgoVUlOVDE2KTYpCisjZGVmaW5lCQlIRkEzODR4X1JJRF9DTkZQTUVOQUJMRURfTEVOCSgoVUlOVDE2KTApCisjZGVmaW5lCQlIRkEzODR4X1JJRF9DTkZQTUVQU19MRU4JKChVSU5UMTYpMCkKKyNkZWZpbmUJCUhGQTM4NHhfUklEX0NORk1VTFRJQ0FTVFJYX0xFTgkoKFVJTlQxNikwKQorI2RlZmluZQkJSEZBMzg0eF9SSURfQ05GTUFYU0xFRVBEVVJfTEVOCSgoVUlOVDE2KTApCisjZGVmaW5lCQlIRkEzODR4X1JJRF9DTkZQTUhPTEREVVJfTEVOCSgoVUlOVDE2KTApCisjZGVmaW5lCQlIRkEzODR4X1JJRF9DTkZPV05OQU1FX0xFTgkoKFVJTlQxNikzNCkKKyNkZWZpbmUJCUhGQTM4NHhfUklEX0NORk9XTkRUSU1QRVJfTEVOCSgoVUlOVDE2KTApCisjZGVmaW5lCQlIRkEzODR4X1JJRF9DTkZXRFNBRERSMV9MRU4JKChVSU5UMTYpNikKKyNkZWZpbmUJCUhGQTM4NHhfUklEX0NORldEU0FERFIyX0xFTgkoKFVJTlQxNik2KQorI2RlZmluZQkJSEZBMzg0eF9SSURfQ05GV0RTQUREUjNfTEVOCSgoVUlOVDE2KTYpCisjZGVmaW5lCQlIRkEzODR4X1JJRF9DTkZXRFNBRERSNF9MRU4JKChVSU5UMTYpNikKKyNkZWZpbmUJCUhGQTM4NHhfUklEX0NORldEU0FERFI1X0xFTgkoKFVJTlQxNik2KQorI2RlZmluZQkJSEZBMzg0eF9SSURfQ05GV0RTQUREUjZfTEVOCSgoVUlOVDE2KTYpCisjZGVmaW5lCQlIRkEzODR4X1JJRF9DTkZNQ0FTVFBNQlVGRl9MRU4JKChVSU5UMTYpMCkKKyNkZWZpbmUJCUhGQTM4NHhfUklEX0NORkFVVEhFTlRJQ0FUSU9OX0xFTiAoKFVJTlQxNilzaXplb2YoVUlOVDE2KSkKKyNkZWZpbmUJCUhGQTM4NHhfUklEX0NORk1BWFNMRUVQRFVSX0xFTgkoKFVJTlQxNikwKQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitDb25maWd1cmF0aW9uIFJJRHM6IE5ldHdvcmsgUGFyYW1ldGVycywgRHluYW1pYyBDb25maWd1cmF0aW9uIEVudGl0aWVzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZGVmaW5lCQlIRkEzODR4X1JJRF9HUk9VUEFERFIJCSgoVUlOVDE2KTB4RkM4MCkKKyNkZWZpbmUJCUhGQTM4NHhfUklEX0NSRUFURUlCU1MJCSgoVUlOVDE2KTB4RkM4MSkKKyNkZWZpbmUJCUhGQTM4NHhfUklEX0ZSQUdUSFJFU0gJCSgoVUlOVDE2KTB4RkM4MikKKyNkZWZpbmUJCUhGQTM4NHhfUklEX1JUU1RIUkVTSAkJKChVSU5UMTYpMHhGQzgzKQorI2RlZmluZQkJSEZBMzg0eF9SSURfVFhSQVRFQ05UTAkJKChVSU5UMTYpMHhGQzg0KQorI2RlZmluZQkJSEZBMzg0eF9SSURfUFJPTUlTQ01PREUJCSgoVUlOVDE2KTB4RkM4NSkKKyNkZWZpbmUJCUhGQTM4NHhfUklEX0ZSQUdUSFJFU0gwCQkoKFVJTlQxNikweEZDOTApCisjZGVmaW5lCQlIRkEzODR4X1JJRF9GUkFHVEhSRVNIMQkJKChVSU5UMTYpMHhGQzkxKQorI2RlZmluZQkJSEZBMzg0eF9SSURfRlJBR1RIUkVTSDIJCSgoVUlOVDE2KTB4RkM5MikKKyNkZWZpbmUJCUhGQTM4NHhfUklEX0ZSQUdUSFJFU0gzCQkoKFVJTlQxNikweEZDOTMpCisjZGVmaW5lCQlIRkEzODR4X1JJRF9GUkFHVEhSRVNINAkJKChVSU5UMTYpMHhGQzk0KQorI2RlZmluZQkJSEZBMzg0eF9SSURfRlJBR1RIUkVTSDUJCSgoVUlOVDE2KTB4RkM5NSkKKyNkZWZpbmUJCUhGQTM4NHhfUklEX0ZSQUdUSFJFU0g2CQkoKFVJTlQxNikweEZDOTYpCisjZGVmaW5lCQlIRkEzODR4X1JJRF9SVFNUSFJFU0gwCQkoKFVJTlQxNikweEZDOTcpCisjZGVmaW5lCQlIRkEzODR4X1JJRF9SVFNUSFJFU0gxCQkoKFVJTlQxNikweEZDOTgpCisjZGVmaW5lCQlIRkEzODR4X1JJRF9SVFNUSFJFU0gyCQkoKFVJTlQxNikweEZDOTkpCisjZGVmaW5lCQlIRkEzODR4X1JJRF9SVFNUSFJFU0gzCQkoKFVJTlQxNikweEZDOUEpCisjZGVmaW5lCQlIRkEzODR4X1JJRF9SVFNUSFJFU0g0CQkoKFVJTlQxNikweEZDOUIpCisjZGVmaW5lCQlIRkEzODR4X1JJRF9SVFNUSFJFU0g1CQkoKFVJTlQxNikweEZDOUMpCisjZGVmaW5lCQlIRkEzODR4X1JJRF9SVFNUSFJFU0g2CQkoKFVJTlQxNikweEZDOUQpCisjZGVmaW5lCQlIRkEzODR4X1JJRF9UWFJBVEVDTlRMMAkJKChVSU5UMTYpMHhGQzlFKQorI2RlZmluZQkJSEZBMzg0eF9SSURfVFhSQVRFQ05UTDEJCSgoVUlOVDE2KTB4RkM5RikKKyNkZWZpbmUJCUhGQTM4NHhfUklEX1RYUkFURUNOVEwyCQkoKFVJTlQxNikweEZDQTApCisjZGVmaW5lCQlIRkEzODR4X1JJRF9UWFJBVEVDTlRMMwkJKChVSU5UMTYpMHhGQ0ExKQorI2RlZmluZQkJSEZBMzg0eF9SSURfVFhSQVRFQ05UTDQJCSgoVUlOVDE2KTB4RkNBMikKKyNkZWZpbmUJCUhGQTM4NHhfUklEX1RYUkFURUNOVEw1CQkoKFVJTlQxNikweEZDQTMpCisjZGVmaW5lCQlIRkEzODR4X1JJRF9UWFJBVEVDTlRMNgkJKChVSU5UMTYpMHhGQ0E0KQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitDb25maWd1cmF0aW9uIFJJRCBMZW5ndGhzOiBOZXR3b3JrIFBhcmFtLCBEeW5hbWljIENvbmZpZyBFbnRpdGllcworICBUaGlzIGlzIHRoZSBsZW5ndGggb2YgSlVTVCB0aGUgREFUQSBwYXJ0IG9mIHRoZSBSSUQgKGRvZXMgbm90CisgIGluY2x1ZGUgdGhlIGxlbiBvciBjb2RlIGZpZWxkcykKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qIFRPRE86IGZpbGwgaW4gdGhlIHJlc3Qgb2YgdGhlc2UgKi8KKyNkZWZpbmUJCUhGQTM4NHhfUklEX0dST1VQQUREUl9MRU4JKChVSU5UMTYpMTYgKiBXTEFOX0FERFJfTEVOKQorI2RlZmluZQkJSEZBMzg0eF9SSURfQ1JFQVRFSUJTU19MRU4JKChVSU5UMTYpMCkKKyNkZWZpbmUJCUhGQTM4NHhfUklEX0ZSQUdUSFJFU0hfTEVOCSgoVUlOVDE2KTApCisjZGVmaW5lCQlIRkEzODR4X1JJRF9SVFNUSFJFU0hfTEVOCSgoVUlOVDE2KTApCisjZGVmaW5lCQlIRkEzODR4X1JJRF9UWFJBVEVDTlRMX0xFTgkoKFVJTlQxNik0KQorI2RlZmluZQkJSEZBMzg0eF9SSURfUFJPTUlTQ01PREVfTEVOCSgoVUlOVDE2KTIpCisjZGVmaW5lCQlIRkEzODR4X1JJRF9GUkFHVEhSRVNIMF9MRU4JKChVSU5UMTYpMCkKKyNkZWZpbmUJCUhGQTM4NHhfUklEX0ZSQUdUSFJFU0gxX0xFTgkoKFVJTlQxNikwKQorI2RlZmluZQkJSEZBMzg0eF9SSURfRlJBR1RIUkVTSDJfTEVOCSgoVUlOVDE2KTApCisjZGVmaW5lCQlIRkEzODR4X1JJRF9GUkFHVEhSRVNIM19MRU4JKChVSU5UMTYpMCkKKyNkZWZpbmUJCUhGQTM4NHhfUklEX0ZSQUdUSFJFU0g0X0xFTgkoKFVJTlQxNikwKQorI2RlZmluZQkJSEZBMzg0eF9SSURfRlJBR1RIUkVTSDVfTEVOCSgoVUlOVDE2KTApCisjZGVmaW5lCQlIRkEzODR4X1JJRF9GUkFHVEhSRVNINl9MRU4JKChVSU5UMTYpMCkKKyNkZWZpbmUJCUhGQTM4NHhfUklEX1JUU1RIUkVTSDBfTEVOCSgoVUlOVDE2KTApCisjZGVmaW5lCQlIRkEzODR4X1JJRF9SVFNUSFJFU0gxX0xFTgkoKFVJTlQxNikwKQorI2RlZmluZQkJSEZBMzg0eF9SSURfUlRTVEhSRVNIMl9MRU4JKChVSU5UMTYpMCkKKyNkZWZpbmUJCUhGQTM4NHhfUklEX1JUU1RIUkVTSDNfTEVOCSgoVUlOVDE2KTApCisjZGVmaW5lCQlIRkEzODR4X1JJRF9SVFNUSFJFU0g0X0xFTgkoKFVJTlQxNikwKQorI2RlZmluZQkJSEZBMzg0eF9SSURfUlRTVEhSRVNINV9MRU4JKChVSU5UMTYpMCkKKyNkZWZpbmUJCUhGQTM4NHhfUklEX1JUU1RIUkVTSDZfTEVOCSgoVUlOVDE2KTApCisjZGVmaW5lCQlIRkEzODR4X1JJRF9UWFJBVEVDTlRMMF9MRU4JKChVSU5UMTYpMCkKKyNkZWZpbmUJCUhGQTM4NHhfUklEX1RYUkFURUNOVEwxX0xFTgkoKFVJTlQxNikwKQorI2RlZmluZQkJSEZBMzg0eF9SSURfVFhSQVRFQ05UTDJfTEVOCSgoVUlOVDE2KTApCisjZGVmaW5lCQlIRkEzODR4X1JJRF9UWFJBVEVDTlRMM19MRU4JKChVSU5UMTYpMCkKKyNkZWZpbmUJCUhGQTM4NHhfUklEX1RYUkFURUNOVEw0X0xFTgkoKFVJTlQxNikwKQorI2RlZmluZQkJSEZBMzg0eF9SSURfVFhSQVRFQ05UTDVfTEVOCSgoVUlOVDE2KTApCisjZGVmaW5lCQlIRkEzODR4X1JJRF9UWFJBVEVDTlRMNl9MRU4JKChVSU5UMTYpMCkKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQ29uZmlndXJhdGlvbiBSSURzOiBCZWhhdmlvciBQYXJhbWV0ZXJzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZGVmaW5lCQlIRkEzODR4X1JJRF9JVElDS1RJTUUJCSgoVUlOVDE2KTB4RkNFMCkKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQ29uZmlndXJhdGlvbiBSSUQgTGVuZ3RoczogQmVoYXZpb3IgUGFyYW1ldGVycworICBUaGlzIGlzIHRoZSBsZW5ndGggb2YgSlVTVCB0aGUgREFUQSBwYXJ0IG9mIHRoZSBSSUQgKGRvZXMgbm90CisgIGluY2x1ZGUgdGhlIGxlbiBvciBjb2RlIGZpZWxkcykKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNkZWZpbmUJCUhGQTM4NHhfUklEX0lUSUNLVElNRV9MRU4JKChVSU5UMTYpMikKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitJbmZvcm1hdGlvbiBSSURzOiBOSUMgSW5mb3JtYXRpb24KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNkZWZpbmUJCUhGQTM4NHhfUklEX01BWExPQURUSU1FCQkoKFVJTlQxNikweEZEMDApCisjZGVmaW5lCQlIRkEzODR4X1JJRF9ET1dOTE9BREJVRkZFUgkoKFVJTlQxNikweEZEMDEpCisjZGVmaW5lCQlIRkEzODR4X1JJRF9QUklJREVOVElUWQkJKChVSU5UMTYpMHhGRDAyKQorI2RlZmluZQkJSEZBMzg0eF9SSURfUFJJU1VQUkFOR0UJCSgoVUlOVDE2KTB4RkQwMykKKyNkZWZpbmUJCUhGQTM4NHhfUklEX1BSSV9DRklBQ1RSQU5HRVMJKChVSU5UMTYpMHhGRDA0KQorI2RlZmluZQkJSEZBMzg0eF9SSURfTklDU0VSSUFMTlVNQkVSCSgoVUlOVDE2KTB4RkQwQSkKKyNkZWZpbmUJCUhGQTM4NHhfUklEX05JQ0lERU5USVRZCQkoKFVJTlQxNikweEZEMEIpCisjZGVmaW5lCQlIRkEzODR4X1JJRF9NRklTVVBSQU5HRQkJKChVSU5UMTYpMHhGRDBDKQorI2RlZmluZQkJSEZBMzg0eF9SSURfQ0ZJU1VQUkFOR0UJCSgoVUlOVDE2KTB4RkQwRCkKKyNkZWZpbmUJCUhGQTM4NHhfUklEX0NIQU5ORUxMSVNUCQkoKFVJTlQxNikweEZEMTApCisjZGVmaW5lCQlIRkEzODR4X1JJRF9SRUdVTEFUT1JZRE9NQUlOUwkoKFVJTlQxNikweEZEMTEpCisjZGVmaW5lCQlIRkEzODR4X1JJRF9URU1QVFlQRQkJKChVSU5UMTYpMHhGRDEyKQorI2RlZmluZQkJSEZBMzg0eF9SSURfQ0lTCQkJKChVSU5UMTYpMHhGRDEzKQorI2RlZmluZQkJSEZBMzg0eF9SSURfU1RBSURFTlRJVFkJCSgoVUlOVDE2KTB4RkQyMCkKKyNkZWZpbmUJCUhGQTM4NHhfUklEX1NUQVNVUFJBTkdFCQkoKFVJTlQxNikweEZEMjEpCisjZGVmaW5lCQlIRkEzODR4X1JJRF9TVEFfTUZJQUNUUkFOR0VTCSgoVUlOVDE2KTB4RkQyMikKKyNkZWZpbmUJCUhGQTM4NHhfUklEX1NUQV9DRklBQ1RSQU5HRVMJKChVSU5UMTYpMHhGRDIzKQorI2RlZmluZQkJSEZBMzg0eF9SSURfQlVJTERTRVEJCSgoVUlOVDE2KTB4RkZGRSkKKyNkZWZpbmUJCUhGQTM4NHhfUklEX0ZXSUQJCSgoVUlOVDE2KTB4RkZGRikKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitJbmZvcm1hdGlvbiBSSUQgTGVuZ3RoczogTklDIEluZm9ybWF0aW9uCisgIFRoaXMgaXMgdGhlIGxlbmd0aCBvZiBKVVNUIHRoZSBEQVRBIHBhcnQgb2YgdGhlIFJJRCAoZG9lcyBub3QKKyAgaW5jbHVkZSB0aGUgbGVuIG9yIGNvZGUgZmllbGRzKQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2RlZmluZQkJSEZBMzg0eF9SSURfTUFYTE9BRFRJTUVfTEVOCQkoKFVJTlQxNikwKQorI2RlZmluZQkJSEZBMzg0eF9SSURfRE9XTkxPQURCVUZGRVJfTEVOCQkoKFVJTlQxNilzaXplb2YoaGZhMzg0eF9kb3dubG9hZGJ1ZmZlcl90KSkKKyNkZWZpbmUJCUhGQTM4NHhfUklEX1BSSUlERU5USVRZX0xFTgkJKChVSU5UMTYpOCkKKyNkZWZpbmUJCUhGQTM4NHhfUklEX1BSSVNVUFJBTkdFX0xFTgkJKChVSU5UMTYpMTApCisjZGVmaW5lCQlIRkEzODR4X1JJRF9DRklBQ1RSQU5HRVNfTEVOCQkoKFVJTlQxNikxMCkKKyNkZWZpbmUJCUhGQTM4NHhfUklEX05JQ1NFUklBTE5VTUJFUl9MRU4JCSgoVUlOVDE2KTEyKQorI2RlZmluZQkJSEZBMzg0eF9SSURfTklDSURFTlRJVFlfTEVOCQkoKFVJTlQxNik4KQorI2RlZmluZQkJSEZBMzg0eF9SSURfTUZJU1VQUkFOR0VfTEVOCQkoKFVJTlQxNikxMCkKKyNkZWZpbmUJCUhGQTM4NHhfUklEX0NGSVNVUFJBTkdFX0xFTgkJKChVSU5UMTYpMTApCisjZGVmaW5lCQlIRkEzODR4X1JJRF9DSEFOTkVMTElTVF9MRU4JCSgoVUlOVDE2KTApCisjZGVmaW5lCQlIRkEzODR4X1JJRF9SRUdVTEFUT1JZRE9NQUlOU19MRU4JKChVSU5UMTYpMTIpCisjZGVmaW5lCQlIRkEzODR4X1JJRF9URU1QVFlQRV9MRU4JCSgoVUlOVDE2KTApCisjZGVmaW5lCQlIRkEzODR4X1JJRF9DSVNfTEVOCQkJKChVSU5UMTYpNDgwKQorI2RlZmluZQkJSEZBMzg0eF9SSURfU1RBSURFTlRJVFlfTEVOCQkoKFVJTlQxNik4KQorI2RlZmluZQkJSEZBMzg0eF9SSURfU1RBU1VQUkFOR0VfTEVOCQkoKFVJTlQxNikxMCkKKyNkZWZpbmUJCUhGQTM4NHhfUklEX01GSUFDVFJBTkdFU19MRU4JCSgoVUlOVDE2KTEwKQorI2RlZmluZQkJSEZBMzg0eF9SSURfQ0ZJQUNUUkFOR0VTMl9MRU4JCSgoVUlOVDE2KTEwKQorI2RlZmluZQkJSEZBMzg0eF9SSURfQlVJTERTRVFfTEVOCQkoKFVJTlQxNilzaXplb2YoaGZhMzg0eF9CdWlsZFNlcV90KSkKKyNkZWZpbmUJCUhGQTM4NHhfUklEX0ZXSURfTEVOCQkJKChVSU5UMTYpc2l6ZW9mKGhmYTM4NHhfRldJRF90KSkKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorSW5mb3JtYXRpb24gUklEczogIE1BQyBJbmZvcm1hdGlvbgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2RlZmluZQkJSEZBMzg0eF9SSURfUE9SVFNUQVRVUwkJKChVSU5UMTYpMHhGRDQwKQorI2RlZmluZQkJSEZBMzg0eF9SSURfQ1VSUkVOVFNTSUQJCSgoVUlOVDE2KTB4RkQ0MSkKKyNkZWZpbmUJCUhGQTM4NHhfUklEX0NVUlJFTlRCU1NJRAkoKFVJTlQxNikweEZENDIpCisjZGVmaW5lCQlIRkEzODR4X1JJRF9DT01NU1FVQUxJVFkJKChVSU5UMTYpMHhGRDQzKQorI2RlZmluZQkJSEZBMzg0eF9SSURfQ1VSUkVOVFRYUkFURQkoKFVJTlQxNikweEZENDQpCisjZGVmaW5lCQlIRkEzODR4X1JJRF9DVVJSRU5UQkNOSU5UCSgoVUlOVDE2KTB4RkQ0NSkKKyNkZWZpbmUJCUhGQTM4NHhfUklEX0NVUlJFTlRTQ0FMRVRIUkVTSAkoKFVJTlQxNikweEZENDYpCisjZGVmaW5lCQlIRkEzODR4X1JJRF9QUk9UT0NPTFJTUFRJTUUJKChVSU5UMTYpMHhGRDQ3KQorI2RlZmluZQkJSEZBMzg0eF9SSURfU0hPUlRSRVRSWUxJTUlUCSgoVUlOVDE2KTB4RkQ0OCkKKyNkZWZpbmUJCUhGQTM4NHhfUklEX0xPTkdSRVRSWUxJTUlUCSgoVUlOVDE2KTB4RkQ0OSkKKyNkZWZpbmUJCUhGQTM4NHhfUklEX01BWFRYTElGRVRJTUUJKChVSU5UMTYpMHhGRDRBKQorI2RlZmluZQkJSEZBMzg0eF9SSURfTUFYUlhMSUZFVElNRQkoKFVJTlQxNikweEZENEIpCisjZGVmaW5lCQlIRkEzODR4X1JJRF9DRlBPTExBQkxFCQkoKFVJTlQxNikweEZENEMpCisjZGVmaW5lCQlIRkEzODR4X1JJRF9BVVRIQUxHT1JJVEhNUwkoKFVJTlQxNikweEZENEQpCisjZGVmaW5lCQlIRkEzODR4X1JJRF9QUklWQUNZT1BUSU1QCSgoVUlOVDE2KTB4RkQ0RikKKyNkZWZpbmUJCUhGQTM4NHhfUklEX0RCTUNPTU1TUVVBTElUWQkoKFVJTlQxNikweEZENTEpCisjZGVmaW5lCQlIRkEzODR4X1JJRF9DVVJSRU5UVFhSQVRFMQkoKFVJTlQxNikweEZEODApCisjZGVmaW5lCQlIRkEzODR4X1JJRF9DVVJSRU5UVFhSQVRFMgkoKFVJTlQxNikweEZEODEpCisjZGVmaW5lCQlIRkEzODR4X1JJRF9DVVJSRU5UVFhSQVRFMwkoKFVJTlQxNikweEZEODIpCisjZGVmaW5lCQlIRkEzODR4X1JJRF9DVVJSRU5UVFhSQVRFNAkoKFVJTlQxNikweEZEODMpCisjZGVmaW5lCQlIRkEzODR4X1JJRF9DVVJSRU5UVFhSQVRFNQkoKFVJTlQxNikweEZEODQpCisjZGVmaW5lCQlIRkEzODR4X1JJRF9DVVJSRU5UVFhSQVRFNgkoKFVJTlQxNikweEZEODUpCisjZGVmaW5lCQlIRkEzODR4X1JJRF9PV05NQUNBRERSRVNTCSgoVUlOVDE2KTB4RkQ4NikKKy8vICNkZWZpbmUJSEZBMzg0eF9SSURfUENGSU5GTwkJKChVSU5UMTYpMHhGRDg3KQorI2RlZmluZQkJSEZBMzg0eF9SSURfU0NBTlJFU1VMVFMgICAgICAgCSgoVUlOVDE2KTB4RkQ4OCkgLy8gTkVXCisjZGVmaW5lCQlIRkEzODR4X1JJRF9IT1NUU0NBTlJFU1VMVFMgICAJKChVSU5UMTYpMHhGRDg5KSAvLyBORVcKKyNkZWZpbmUJCUhGQTM4NHhfUklEX0FVVEhFTlRJQ0FUSU9OVVNFRAkoKFVJTlQxNikweEZEOEEpIC8vIE5FVworI2RlZmluZQkJSEZBMzg0eF9SSURfQVNTT0NJQVRFRkFJTFVSRSAgCSgoVUlOVDE2KTB4RkQ4RCkgLy8gMS44LjAKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorSW5mb3JtYXRpb24gUklEIExlbmd0aHM6ICBNQUMgSW5mb3JtYXRpb24KKyAgVGhpcyBpcyB0aGUgbGVuZ3RoIG9mIEpVU1QgdGhlIERBVEEgcGFydCBvZiB0aGUgUklEIChkb2VzIG5vdAorICBpbmNsdWRlIHRoZSBsZW4gb3IgY29kZSBmaWVsZHMpCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZGVmaW5lCQlIRkEzODR4X1JJRF9QT1JUU1RBVFVTX0xFTgkJKChVSU5UMTYpMCkKKyNkZWZpbmUJCUhGQTM4NHhfUklEX0NVUlJFTlRTU0lEX0xFTgkJKChVSU5UMTYpMzQpCisjZGVmaW5lCQlIRkEzODR4X1JJRF9DVVJSRU5UQlNTSURfTEVOCQkoKFVJTlQxNilXTEFOX0JTU0lEX0xFTikKKyNkZWZpbmUJCUhGQTM4NHhfUklEX0NPTU1TUVVBTElUWV9MRU4JCSgoVUlOVDE2KXNpemVvZihoZmEzODR4X2NvbW1zcXVhbGl0eV90KSkKKyNkZWZpbmUJCUhGQTM4NHhfUklEX0RCTUNPTU1TUVVBTElUWV9MRU4JCSgoVUlOVDE2KXNpemVvZihoZmEzODR4X2RibWNvbW1zcXVhbGl0eV90KSkKKyNkZWZpbmUJCUhGQTM4NHhfUklEX0NVUlJFTlRUWFJBVEVfTEVOCQkoKFVJTlQxNikwKQorI2RlZmluZQkJSEZBMzg0eF9SSURfQ1VSUkVOVEJDTklOVF9MRU4JCSgoVUlOVDE2KTApCisjZGVmaW5lCQlIRkEzODR4X1JJRF9TVEFDVVJTQ0FMRVRIUkVTSF9MRU4JKChVSU5UMTYpMTIpCisjZGVmaW5lCQlIRkEzODR4X1JJRF9BUENVUlNDQUxFVEhSRVNIX0xFTgkoKFVJTlQxNik2KQorI2RlZmluZQkJSEZBMzg0eF9SSURfUFJPVE9DT0xSU1BUSU1FX0xFTgkJKChVSU5UMTYpMCkKKyNkZWZpbmUJCUhGQTM4NHhfUklEX1NIT1JUUkVUUllMSU1JVF9MRU4JCSgoVUlOVDE2KTApCisjZGVmaW5lCQlIRkEzODR4X1JJRF9MT05HUkVUUllMSU1JVF9MRU4JCSgoVUlOVDE2KTApCisjZGVmaW5lCQlIRkEzODR4X1JJRF9NQVhUWExJRkVUSU1FX0xFTgkJKChVSU5UMTYpMCkKKyNkZWZpbmUJCUhGQTM4NHhfUklEX01BWFJYTElGRVRJTUVfTEVOCQkoKFVJTlQxNikwKQorI2RlZmluZQkJSEZBMzg0eF9SSURfQ0ZQT0xMQUJMRV9MRU4JCSgoVUlOVDE2KTApCisjZGVmaW5lCQlIRkEzODR4X1JJRF9BVVRIQUxHT1JJVEhNU19MRU4JCSgoVUlOVDE2KTQpCisjZGVmaW5lCQlIRkEzODR4X1JJRF9QUklWQUNZT1BUSU1QX0xFTgkJKChVSU5UMTYpMCkKKyNkZWZpbmUJCUhGQTM4NHhfUklEX0NVUlJFTlRUWFJBVEUxX0xFTgkJKChVSU5UMTYpMCkKKyNkZWZpbmUJCUhGQTM4NHhfUklEX0NVUlJFTlRUWFJBVEUyX0xFTgkJKChVSU5UMTYpMCkKKyNkZWZpbmUJCUhGQTM4NHhfUklEX0NVUlJFTlRUWFJBVEUzX0xFTgkJKChVSU5UMTYpMCkKKyNkZWZpbmUJCUhGQTM4NHhfUklEX0NVUlJFTlRUWFJBVEU0X0xFTgkJKChVSU5UMTYpMCkKKyNkZWZpbmUJCUhGQTM4NHhfUklEX0NVUlJFTlRUWFJBVEU1X0xFTgkJKChVSU5UMTYpMCkKKyNkZWZpbmUJCUhGQTM4NHhfUklEX0NVUlJFTlRUWFJBVEU2X0xFTgkJKChVSU5UMTYpMCkKKyNkZWZpbmUJCUhGQTM4NHhfUklEX09XTk1BQ0FERFJFU1NfTEVOCQkoKFVJTlQxNik2KQorI2RlZmluZQkJSEZBMzg0eF9SSURfUENGSU5GT19MRU4JCQkoKFVJTlQxNik2KQorI2RlZmluZQkJSEZBMzg0eF9SSURfQ05GQVBQQ0ZJTkZPX0xFTgkJKChVSU5UMTYpc2l6ZW9mKGhmYTM4NHhfUENGSW5mb19kYXRhX3QpKQorI2RlZmluZQkJSEZBMzg0eF9SSURfU0NBTlJFUVVFU1RfTEVOCQkoKFVJTlQxNilzaXplb2YoaGZhMzg0eF9TY2FuUmVxdWVzdF9kYXRhX3QpKQorI2RlZmluZQkJSEZBMzg0eF9SSURfSk9JTlJFUVVFU1RfTEVOCQkoKFVJTlQxNilzaXplb2YoaGZhMzg0eF9Kb2luUmVxdWVzdF9kYXRhX3QpKQorI2RlZmluZQkJSEZBMzg0eF9SSURfQVVUSEVOVElDQVRFU1RBX0xFTgkJKChVSU5UMTYpc2l6ZW9mKGhmYTM4NHhfYXV0aGVudGljYXRlU3RhdGlvbl9kYXRhX3QpKQorI2RlZmluZQkJSEZBMzg0eF9SSURfQ0hBTk5FTElORk9SRVFVRVNUX0xFTgkoKFVJTlQxNilzaXplb2YoaGZhMzg0eF9DaGFubmVsSW5mb1JlcXVlc3RfZGF0YV90KSkKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0luZm9ybWF0aW9uIFJJRHM6ICBNb2RlbSBJbmZvcm1hdGlvbgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2RlZmluZQkJSEZBMzg0eF9SSURfUEhZVFlQRQkJKChVSU5UMTYpMHhGREMwKQorI2RlZmluZQkJSEZBMzg0eF9SSURfQ1VSUkVOVENIQU5ORUwJKChVSU5UMTYpMHhGREMxKQorI2RlZmluZQkJSEZBMzg0eF9SSURfQ1VSUkVOVFBPV0VSU1RBVEUJKChVSU5UMTYpMHhGREMyKQorI2RlZmluZQkJSEZBMzg0eF9SSURfQ0NBTU9ERQkJKChVSU5UMTYpMHhGREMzKQorI2RlZmluZQkJSEZBMzg0eF9SSURfU1VQUE9SVEVEREFUQVJBVEVTCSgoVUlOVDE2KTB4RkRDNikKKyNkZWZpbmUJCUhGQTM4NHhfUklEX0xGT1NUQVRVUyAgICAgICAgICAgKChVSU5UMTYpMHhGREM3KSAvLyAxLjcuMQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitJbmZvcm1hdGlvbiBSSUQgTGVuZ3RoczogIE1vZGVtIEluZm9ybWF0aW9uCisgIFRoaXMgaXMgdGhlIGxlbmd0aCBvZiBKVVNUIHRoZSBEQVRBIHBhcnQgb2YgdGhlIFJJRCAoZG9lcyBub3QKKyAgaW5jbHVkZSB0aGUgbGVuIG9yIGNvZGUgZmllbGRzKQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2RlZmluZQkJSEZBMzg0eF9SSURfUEhZVFlQRV9MRU4JCQkoKFVJTlQxNikwKQorI2RlZmluZQkJSEZBMzg0eF9SSURfQ1VSUkVOVENIQU5ORUxfTEVOCQkoKFVJTlQxNikwKQorI2RlZmluZQkJSEZBMzg0eF9SSURfQ1VSUkVOVFBPV0VSU1RBVEVfTEVOCSgoVUlOVDE2KTApCisjZGVmaW5lCQlIRkEzODR4X1JJRF9DQ0FNT0RFX0xFTgkJCSgoVUlOVDE2KTApCisjZGVmaW5lCQlIRkEzODR4X1JJRF9TVVBQT1JURUREQVRBUkFURVNfTEVOCSgoVUlOVDE2KTEwKQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitBUEkgRU5IQU5DRU1FTlRTIChOT1QgQUxSRUFEWSBJTVBMRU1FTlRFRCkKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNkZWZpbmUJCUhGQTM4NHhfUklEX0NORldFUERFRkFVTFRLRVlJRAkoKFVJTlQxNikweEZDMjMpCisjZGVmaW5lCQlIRkEzODR4X1JJRF9DTkZXRVBERUZBVUxUS0VZMAkoKFVJTlQxNikweEZDMjQpCisjZGVmaW5lCQlIRkEzODR4X1JJRF9DTkZXRVBERUZBVUxUS0VZMQkoKFVJTlQxNikweEZDMjUpCisjZGVmaW5lCQlIRkEzODR4X1JJRF9DTkZXRVBERUZBVUxUS0VZMgkoKFVJTlQxNikweEZDMjYpCisjZGVmaW5lCQlIRkEzODR4X1JJRF9DTkZXRVBERUZBVUxUS0VZMwkoKFVJTlQxNikweEZDMjcpCisjZGVmaW5lCQlIRkEzODR4X1JJRF9DTkZXRVBGTEFHUwkJKChVSU5UMTYpMHhGQzI4KQorI2RlZmluZQkJSEZBMzg0eF9SSURfQ05GV0VQS0VZTUFQVEFCTEUJKChVSU5UMTYpMHhGQzI5KQorI2RlZmluZQkJSEZBMzg0eF9SSURfQ05GQVVUSEVOVElDQVRJT04JKChVSU5UMTYpMHhGQzJBKQorI2RlZmluZQkJSEZBMzg0eF9SSURfQ05GTUFYQVNTT0NTVEFUSU9OUwkoKFVJTlQxNikweEZDMkIpCisjZGVmaW5lCQlIRkEzODR4X1JJRF9DTkZUWENPTlRST0wJKChVSU5UMTYpMHhGQzJDKQorI2RlZmluZQkJSEZBMzg0eF9SSURfQ05GUk9BTUlOR01PREUJKChVSU5UMTYpMHhGQzJEKQorI2RlZmluZQkJSEZBMzg0eF9SSURfQ05GSE9TVEFVVEhBU1NPQwkoKFVJTlQxNikweEZDMkUpCisjZGVmaW5lCQlIRkEzODR4X1JJRF9DTkZSQ1ZDUkNFUlJPUgkoKFVJTlQxNikweEZDMzApCisvLyAjZGVmaW5lCQlIRkEzODR4X1JJRF9DTkZNTUxJRkUJCSgoVUlOVDE2KTB4RkMzMSkKKyNkZWZpbmUJCUhGQTM4NHhfUklEX0NORkFMVFJFVFJZQ05UCSgoVUlOVDE2KTB4RkMzMikKKyNkZWZpbmUJCUhGQTM4NHhfUklEX0NORkFQQkNOSU5UCQkoKFVJTlQxNikweEZDMzMpCisjZGVmaW5lCQlIRkEzODR4X1JJRF9DTkZBUFBDRklORk8JKChVSU5UMTYpMHhGQzM0KQorI2RlZmluZQkJSEZBMzg0eF9SSURfQ05GU1RBUENGSU5GTwkoKFVJTlQxNikweEZDMzUpCisjZGVmaW5lCQlIRkEzODR4X1JJRF9DTkZQUklPUklUWVFVU0FHRQkoKFVJTlQxNikweEZDMzcpCisjZGVmaW5lCQlIRkEzODR4X1JJRF9DTkZUSU1DVFJMCQkoKFVJTlQxNikweEZDNDApCisjZGVmaW5lCQlIRkEzODR4X1JJRF9DTkZUSElSVFkyVEFMTFkJKChVSU5UMTYpMHhGQzQyKQorI2RlZmluZQkJSEZBMzg0eF9SSURfQ05GRU5IU0VDVVJJVFkJKChVSU5UMTYpMHhGQzQzKQorI2RlZmluZQkJSEZBMzg0eF9SSURfQ05GREJNQURKVVNUICAJKChVSU5UMTYpMHhGQzQ2KSAvLyBORVcKKyNkZWZpbmUJCUhGQTM4NHhfUklEX0NORldQQURBVEEgICAgICAgCSgoVUlOVDE2KTB4RkM0OCkgLy8gMS43LjAKKyNkZWZpbmUJCUhGQTM4NHhfUklEX0NORlBST1BPR0FUSU9OREVMQVkJKChVSU5UMTYpMHhGQzQ5KSAvLyAxLjcuNgorI2RlZmluZQkJSEZBMzg0eF9SSURfQ05GU0hPUlRQUkVBTUJMRQkoKFVJTlQxNikweEZDQjApCisjZGVmaW5lCQlIRkEzODR4X1JJRF9DTkZFWENMT05HUFJFQU1CTEUJKChVSU5UMTYpMHhGQ0IxKQorI2RlZmluZQkJSEZBMzg0eF9SSURfQ05GQVVUSFJTUFRJTUVPVVQJKChVSU5UMTYpMHhGQ0IyKQorI2RlZmluZQkJSEZBMzg0eF9SSURfQ05GQkFTSUNSQVRFUwkoKFVJTlQxNikweEZDQjMpCisjZGVmaW5lCQlIRkEzODR4X1JJRF9DTkZTVVBQUkFURVMJKChVSU5UMTYpMHhGQ0I0KQorI2RlZmluZQkJSEZBMzg0eF9SSURfQ05GRkFMTEJBQ0tDVFJMCSgoVUlOVDE2KTB4RkNCNSkgLy8gTkVXCisjZGVmaW5lCQlIRkEzODR4X1JJRF9XRVBLRVlTVEFUVVMgICAJKChVSU5UMTYpMHhGQ0I2KSAvLyBORVcKKyNkZWZpbmUJCUhGQTM4NHhfUklEX1dFUEtFWU1BUElOREVYIAkoKFVJTlQxNikweEZDQjcpIC8vIE5FVworI2RlZmluZQkJSEZBMzg0eF9SSURfQlJPQURDQVNUS0VZSUQgCSgoVUlOVDE2KTB4RkNCOCkgLy8gTkVXCisjZGVmaW5lCQlIRkEzODR4X1JJRF9FTlRTRUNGTEFHRVlJRCAJKChVSU5UMTYpMHhGQ0I5KSAvLyBORVcKKyNkZWZpbmUJCUhGQTM4NHhfUklEX0NORlBBU1NJVkVTQ0FOQ1RSTAkoKFVJTlQxNikweEZDQkEpIC8vIE5FVyBTVEEKKyNkZWZpbmUJCUhGQTM4NHhfUklEX0NORldQQUhBTkRMSU5HCSgoVUlOVDE2KTB4RkNCQikgLy8gMS43LjAKKyNkZWZpbmUJCUhGQTM4NHhfUklEX01EQ0NPTlRST0wgICAgICAgIAkoKFVJTlQxNikweEZDQkMpIC8vIDEuNy4wLzEuNC4wCisjZGVmaW5lCQlIRkEzODR4X1JJRF9NRENDT1VOVFJZICAgICAgICAJKChVSU5UMTYpMHhGQ0JEKSAvLyAxLjcuMC8xLjQuMAorI2RlZmluZQkJSEZBMzg0eF9SSURfVFhQT1dFUk1BWCAgICAgICAgCSgoVUlOVDE2KTB4RkNCRSkgLy8gMS43LjAvMS40LjAKKyNkZWZpbmUJCUhGQTM4NHhfUklEX0NORkxGT0VOQkxFRCAgICAgIAkoKFVJTlQxNikweEZDQkYpIC8vIDEuNi4zCisjZGVmaW5lICAgICAgICAgSEZBMzg0eF9SSURfQ0FQSU5GTyAgICAgICAgICAgICAoKFVJTlQxNikweEZDQzApIC8vIDEuNy4wLzEuMy43CisjZGVmaW5lICAgICAgICAgSEZBMzg0eF9SSURfTElTVEVOSU5URVJWQUwgICAgICAoKFVJTlQxNikweEZDQzEpIC8vIDEuNy4wLzEuMy43CisjZGVmaW5lICAgICAgICAgSEZBMzg0eF9SSURfRElWRVJTSVRZRU5BQkxFRCAgICAoKFVJTlQxNikweEZDQzIpIC8vIDEuNy4wLzEuMy43CisjZGVmaW5lICAgICAgICAgSEZBMzg0eF9SSURfTEVEX0NPTlRST0wgICAgICAgICAoKFVJTlQxNikweEZDQzQpIC8vIDEuNy42CisjZGVmaW5lICAgICAgICAgSEZBMzg0eF9SSURfSEZPX0RFTEFZICAgICAgICAgICAoKFVJTlQxNikweEZDQzUpIC8vIDEuNy42CisjZGVmaW5lICAgICAgICAgSEZBMzg0eF9SSURfRElTU0FMT1dFREJTU0lEICAgICAoKFVJTlQxNikweEZDQzYpIC8vIDEuOC4wCisjZGVmaW5lCQlIRkEzODR4X1JJRF9TQ0FOUkVRVUVTVAkJKChVSU5UMTYpMHhGQ0UxKQorI2RlZmluZQkJSEZBMzg0eF9SSURfSk9JTlJFUVVFU1QJCSgoVUlOVDE2KTB4RkNFMikKKyNkZWZpbmUJCUhGQTM4NHhfUklEX0FVVEhFTlRJQ0FURVNUQQkoKFVJTlQxNikweEZDRTMpCisjZGVmaW5lCQlIRkEzODR4X1JJRF9DSEFOTkVMSU5GT1JFUVVFU1QJKChVSU5UMTYpMHhGQ0U0KQorI2RlZmluZQkJSEZBMzg0eF9SSURfSE9TVFNDQU4gICAgICAgICAgCSgoVUlOVDE2KTB4RkNFNSkgLy8gTkVXIFNUQQorI2RlZmluZQkJSEZBMzg0eF9SSURfQVNTT0NJQVRFU1RBCSgoVUlOVDE2KTB4RkNFNikKKworI2RlZmluZQkJSEZBMzg0eF9SSURfQ05GV0VQREVGQVVMVEtFWV9MRU4JKChVSU5UMTYpNikKKyNkZWZpbmUJCUhGQTM4NHhfUklEX0NORldFUDEyOERFRkFVTFRLRVlfTEVOCSgoVUlOVDE2KTE0KQorI2RlZmluZQkJSEZBMzg0eF9SSURfQ05GUFJJT1FVU0FHRV9MRU4JCSgoVUlOVDE2KTQpCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitQRCBSZWNvcmQgY29kZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNkZWZpbmUgSEZBMzg0eF9QRFJfUENCX1BBUlROVU0JCSgoVUlOVDE2KTB4MDAwMSkKKyNkZWZpbmUgSEZBMzg0eF9QRFJfUERBVkVSCQkoKFVJTlQxNikweDAwMDIpCisjZGVmaW5lIEhGQTM4NHhfUERSX05JQ19TRVJJQUwJCSgoVUlOVDE2KTB4MDAwMykKKyNkZWZpbmUgSEZBMzg0eF9QRFJfTUtLX01FQVNVUkVNRU5UUwkoKFVJTlQxNikweDAwMDQpCisjZGVmaW5lIEhGQTM4NHhfUERSX05JQ19SQU1TSVpFCQkoKFVJTlQxNikweDAwMDUpCisjZGVmaW5lIEhGQTM4NHhfUERSX01GSVNVUFJBTkdFCQkoKFVJTlQxNikweDAwMDYpCisjZGVmaW5lIEhGQTM4NHhfUERSX0NGSVNVUFJBTkdFCQkoKFVJTlQxNikweDAwMDcpCisjZGVmaW5lIEhGQTM4NHhfUERSX05JQ0lECQkoKFVJTlQxNikweDAwMDgpCisvLyNkZWZpbmUgSEZBMzg0eF9QRFJfUkVGREFDX01FQVNVUkVNRU5UUwkoKFVJTlQxNikweDAwMTApCisvLyNkZWZpbmUgSEZBMzg0eF9QRFJfVkdEQUNfTUVBU1VSRU1FTlRTCSgoVUlOVDE2KTB4MDAyMCkKKy8vI2RlZmluZSBIRkEzODR4X1BEUl9MRVZFTF9DT01QX01FQVNVUkVNRU5UUwkoKFVJTlQxNikweDAwMzApCisvLyNkZWZpbmUgSEZBMzg0eF9QRFJfTU9ERU1fVFJJTURBQ19NRUFTVVJFTUVOVFMJKChVSU5UMTYpMHgwMDQwKQorLy8jZGVmaW5lIEhGQTM4NHhfUERSX0NPUkVHQV9IQUNLCQkoKFVJTlQxNikweDAwZmYpCisjZGVmaW5lIEhGQTM4NHhfUERSX01BQ19BRERSRVNTCQkoKFVJTlQxNikweDAxMDEpCisvLyNkZWZpbmUgSEZBMzg0eF9QRFJfTUtLX0NBTExOQU1FCSgoVUlOVDE2KTB4MDEwMikKKyNkZWZpbmUgSEZBMzg0eF9QRFJfUkVHRE9NQUlOCQkoKFVJTlQxNikweDAxMDMpCisjZGVmaW5lIEhGQTM4NHhfUERSX0FMTE9XRURfQ0hBTk5FTAkoKFVJTlQxNikweDAxMDQpCisjZGVmaW5lIEhGQTM4NHhfUERSX0RFRkFVTFRfQ0hBTk5FTAkoKFVJTlQxNikweDAxMDUpCisvLyNkZWZpbmUgSEZBMzg0eF9QRFJfUFJJVkFDWV9PUFRJT04JKChVSU5UMTYpMHgwMTA2KQorI2RlZmluZSBIRkEzODR4X1BEUl9URU1QVFlQRQkJKChVSU5UMTYpMHgwMTA3KQorLy8jZGVmaW5lIEhGQTM4NHhfUERSX1JFRkRBQ19TRVRVUAkoKFVJTlQxNikweDAxMTApCisvLyNkZWZpbmUgSEZBMzg0eF9QRFJfVkdEQUNfU0VUVVAJCSgoVUlOVDE2KTB4MDEyMCkKKy8vI2RlZmluZSBIRkEzODR4X1BEUl9MRVZFTF9DT01QX1NFVFVQCSgoVUlOVDE2KTB4MDEzMCkKKy8vI2RlZmluZSBIRkEzODR4X1BEUl9UUklNREFDX1NFVFVQCSgoVUlOVDE2KTB4MDE0MCkKKyNkZWZpbmUgSEZBMzg0eF9QRFJfSUZSX1NFVFRJTkcJCSgoVUlOVDE2KTB4MDIwMCkKKyNkZWZpbmUgSEZBMzg0eF9QRFJfUkZSX1NFVFRJTkcJCSgoVUlOVDE2KTB4MDIwMSkKKyNkZWZpbmUgSEZBMzg0eF9QRFJfSEZBMzg2MV9CQVNFTElORQkoKFVJTlQxNikweDAyMDIpCisjZGVmaW5lIEhGQTM4NHhfUERSX0hGQTM4NjFfU0hBRE9XCSgoVUlOVDE2KTB4MDIwMykKKyNkZWZpbmUgSEZBMzg0eF9QRFJfSEZBMzg2MV9JRlJGCSgoVUlOVDE2KTB4MDIwNCkKKyNkZWZpbmUgSEZBMzg0eF9QRFJfSEZBMzg2MV9DSENBTFNQCSgoVUlOVDE2KTB4MDMwMCkKKyNkZWZpbmUgSEZBMzg0eF9QRFJfSEZBMzg2MV9DSENBTEkJKChVSU5UMTYpMHgwMzAxKQorI2RlZmluZSBIRkEzODR4X1BEUl9NQVhfVFhfUE9XRVIgIAkoKFVJTlQxNikweDAzMDIpCisjZGVmaW5lIEhGQTM4NHhfUERSX01BU1RFUl9DSEFOX0xJU1QJKChVSU5UMTYpMHgwMzAzKQorI2RlZmluZSBIRkEzODR4X1BEUl8zODQyX05JQ19DT05GSUcJKChVSU5UMTYpMHgwNDAwKQorI2RlZmluZSBIRkEzODR4X1BEUl9VU0JfSUQJCSgoVUlOVDE2KTB4MDQwMSkKKyNkZWZpbmUgSEZBMzg0eF9QRFJfUENJX0lECQkoKFVJTlQxNikweDA0MDIpCisjZGVmaW5lIEhGQTM4NHhfUERSX1BDSV9JRkNPTkYJCSgoVUlOVDE2KTB4MDQwMykKKyNkZWZpbmUgSEZBMzg0eF9QRFJfUENJX1BNQ09ORgkJKChVSU5UMTYpMHgwNDA0KQorI2RlZmluZSBIRkEzODR4X1BEUl9SRkVOUkdZCQkoKFVJTlQxNikweDA0MDYpCisjZGVmaW5lIEhGQTM4NHhfUERSX1VTQl9QT1dFUl9UWVBFICAgICAgKChVSU5UMTYpMHgwNDA3KQorLy8jZGVmaW5lIEhGQTM4NHhfUERSX1VOS05PV040MDgJCSgoVUlOVDE2KTB4MDQwOCkKKyNkZWZpbmUgSEZBMzg0eF9QRFJfVVNCX01BWF9QT1dFUgkoKFVJTlQxNikweDA0MDkpCisjZGVmaW5lIEhGQTM4NHhfUERSX1VTQl9NQU5VRkFDVFVSRVIJKChVSU5UMTYpMHgwNDEwKQorI2RlZmluZSBIRkEzODR4X1BEUl9VU0JfUFJPRFVDVCAgCSgoVUlOVDE2KTB4MDQxMSkKKyNkZWZpbmUgSEZBMzg0eF9QRFJfQU5UX0RJVkVSU0lUWSAgIAkoKFVJTlQxNikweDA0MTIpCisjZGVmaW5lIEhGQTM4NHhfUERSX0hGT19ERUxBWSAgICAgICAJKChVSU5UMTYpMHgwNDEzKQorI2RlZmluZSBIRkEzODR4X1BEUl9TQ0FMRV9USFJFU0ggCSgoVUlOVDE2KTB4MDQxNCkKKworI2RlZmluZSBIRkEzODR4X1BEUl9IRkEzODYxX01BTkZfVEVTVFNQCSgoVUlOVDE2KTB4MDkwMCkKKyNkZWZpbmUgSEZBMzg0eF9QRFJfSEZBMzg2MV9NQU5GX1RFU1RJCSgoVUlOVDE2KTB4MDkwMSkKKyNkZWZpbmUgSEZBMzg0eF9QRFJfRU5EX09GX1BEQQkJKChVSU5UMTYpMHgwMDAwKQorCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKi0tLS0tLSBNYWNyb3MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKi0tLSBSZWdpc3RlciBJRCBtYWNyb3MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworI2RlZmluZQkJSEZBMzg0eF9DTUQJCUhGQTM4NHhfQ01EX09GRgorI2RlZmluZQkJSEZBMzg0eF9QQVJBTTAJCUhGQTM4NHhfUEFSQU0wX09GRgorI2RlZmluZQkJSEZBMzg0eF9QQVJBTTEJCUhGQTM4NHhfUEFSQU0xX09GRgorI2RlZmluZQkJSEZBMzg0eF9QQVJBTTIJCUhGQTM4NHhfUEFSQU0yX09GRgorI2RlZmluZQkJSEZBMzg0eF9TVEFUVVMJCUhGQTM4NHhfU1RBVFVTX09GRgorI2RlZmluZQkJSEZBMzg0eF9SRVNQMAkJSEZBMzg0eF9SRVNQMF9PRkYKKyNkZWZpbmUJCUhGQTM4NHhfUkVTUDEJCUhGQTM4NHhfUkVTUDFfT0ZGCisjZGVmaW5lCQlIRkEzODR4X1JFU1AyCQlIRkEzODR4X1JFU1AyX09GRgorI2RlZmluZQkJSEZBMzg0eF9JTkZPRklECQlIRkEzODR4X0lORk9GSURfT0ZGCisjZGVmaW5lCQlIRkEzODR4X1JYRklECQlIRkEzODR4X1JYRklEX09GRgorI2RlZmluZQkJSEZBMzg0eF9BTExPQ0ZJRAlIRkEzODR4X0FMTE9DRklEX09GRgorI2RlZmluZQkJSEZBMzg0eF9UWENPTVBMRklECUhGQTM4NHhfVFhDT01QTEZJRF9PRkYKKyNkZWZpbmUJCUhGQTM4NHhfU0VMRUNUMAkJSEZBMzg0eF9TRUxFQ1QwX09GRgorI2RlZmluZQkJSEZBMzg0eF9PRkZTRVQwCQlIRkEzODR4X09GRlNFVDBfT0ZGCisjZGVmaW5lCQlIRkEzODR4X0RBVEEwCQlIRkEzODR4X0RBVEEwX09GRgorI2RlZmluZQkJSEZBMzg0eF9TRUxFQ1QxCQlIRkEzODR4X1NFTEVDVDFfT0ZGCisjZGVmaW5lCQlIRkEzODR4X09GRlNFVDEJCUhGQTM4NHhfT0ZGU0VUMV9PRkYKKyNkZWZpbmUJCUhGQTM4NHhfREFUQTEJCUhGQTM4NHhfREFUQTFfT0ZGCisjZGVmaW5lCQlIRkEzODR4X0VWU1RBVAkJSEZBMzg0eF9FVlNUQVRfT0ZGCisjZGVmaW5lCQlIRkEzODR4X0lOVEVOCQlIRkEzODR4X0lOVEVOX09GRgorI2RlZmluZQkJSEZBMzg0eF9FVkFDSwkJSEZBMzg0eF9FVkFDS19PRkYKKyNkZWZpbmUJCUhGQTM4NHhfQ09OVFJPTAkJSEZBMzg0eF9DT05UUk9MX09GRgorI2RlZmluZQkJSEZBMzg0eF9TV1NVUFBPUlQwCUhGQTM4NHhfU1dTVVBQT1JUMF9PRkYKKyNkZWZpbmUJCUhGQTM4NHhfU1dTVVBQT1JUMQlIRkEzODR4X1NXU1VQUE9SVDFfT0ZGCisjZGVmaW5lCQlIRkEzODR4X1NXU1VQUE9SVDIJSEZBMzg0eF9TV1NVUFBPUlQyX09GRgorI2RlZmluZQkJSEZBMzg0eF9BVVhQQUdFCQlIRkEzODR4X0FVWFBBR0VfT0ZGCisjZGVmaW5lCQlIRkEzODR4X0FVWE9GRlNFVAlIRkEzODR4X0FVWE9GRlNFVF9PRkYKKyNkZWZpbmUJCUhGQTM4NHhfQVVYREFUQQkJSEZBMzg0eF9BVVhEQVRBX09GRgorI2RlZmluZQkJSEZBMzg0eF9QQ0lDT1IJCUhGQTM4NHhfUENJQ09SX09GRgorI2RlZmluZQkJSEZBMzg0eF9QQ0lIQ1IJCUhGQTM4NHhfUENJSENSX09GRgorCisKKy8qLS0tIFJlZ2lzdGVyIFRlc3QvR2V0L1NldCBGaWVsZCBtYWNyb3MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworI2RlZmluZQkJSEZBMzg0eF9DTURfSVNCVVNZKHZhbHVlKQkJKChVSU5UMTYpKCgoVUlOVDE2KXZhbHVlKSAmIEhGQTM4NHhfQ01EX0JVU1kpKQorI2RlZmluZQkJSEZBMzg0eF9DTURfQUlORk9fR0VUKHZhbHVlKQkJKChVSU5UMTYpKCgoVUlOVDE2KSh2YWx1ZSkgJiBIRkEzODR4X0NNRF9BSU5GTykgPj4gOCkpCisjZGVmaW5lCQlIRkEzODR4X0NNRF9BSU5GT19TRVQodmFsdWUpCQkoKFVJTlQxNikoKFVJTlQxNikodmFsdWUpIDw8IDgpKQorI2RlZmluZQkJSEZBMzg0eF9DTURfTUFDUE9SVF9HRVQodmFsdWUpCQkoKFVJTlQxNikoSEZBMzg0eF9DTURfQUlORk9fR0VUKChVSU5UMTYpKHZhbHVlKSAmIEhGQTM4NHhfQ01EX01BQ1BPUlQpKSkKKyNkZWZpbmUJCUhGQTM4NHhfQ01EX01BQ1BPUlRfU0VUKHZhbHVlKQkJKChVSU5UMTYpSEZBMzg0eF9DTURfQUlORk9fU0VUKHZhbHVlKSkKKyNkZWZpbmUJCUhGQTM4NHhfQ01EX0lTUkVDTCh2YWx1ZSkJCSgoVUlOVDE2KShIRkEzODR4X0NNRF9BSU5GT19HRVQoKFVJTlQxNikodmFsdWUpICYgSEZBMzg0eF9DTURfUkVDTCkpKQorI2RlZmluZQkJSEZBMzg0eF9DTURfUkVDTF9TRVQodmFsdWUpCQkoKFVJTlQxNilIRkEzODR4X0NNRF9BSU5GT19TRVQodmFsdWUpKQorI2RlZmluZQkJSEZBMzg0eF9DTURfUU9TX0dFVCh2YWx1ZSkJCSgoVUlOVDE2KCgoKFVJTlQxNikodmFsdWUpKSYoKFVJTlQxNikweDMwMDApKSA+PiAxMikpCisjZGVmaW5lCQlIRkEzODR4X0NNRF9RT1NfU0VUKHZhbHVlKQkJKChVSU5UMTYpKCgoKFVJTlQxNikodmFsdWUpKSA8PCAxMikgJiAweDMwMDApKQorI2RlZmluZQkJSEZBMzg0eF9DTURfSVNXUklURSh2YWx1ZSkJCSgoVUlOVDE2KShIRkEzODR4X0NNRF9BSU5GT19HRVQoKFVJTlQxNikodmFsdWUpICYgSEZBMzg0eF9DTURfV1JJVEUpKSkKKyNkZWZpbmUJCUhGQTM4NHhfQ01EX1dSSVRFX1NFVCh2YWx1ZSkJCSgoVUlOVDE2KUhGQTM4NHhfQ01EX0FJTkZPX1NFVCgoVUlOVDE2KXZhbHVlKSkKKyNkZWZpbmUJCUhGQTM4NHhfQ01EX1BST0dNT0RFX0dFVCh2YWx1ZSkJCSgoVUlOVDE2KShIRkEzODR4X0NNRF9BSU5GT19HRVQoKFVJTlQxNikodmFsdWUpICYgSEZBMzg0eF9DTURfUFJPR01PREUpKSkKKyNkZWZpbmUJCUhGQTM4NHhfQ01EX1BST0dNT0RFX1NFVCh2YWx1ZSkJCSgoVUlOVDE2KUhGQTM4NHhfQ01EX0FJTkZPX1NFVCgoVUlOVDE2KXZhbHVlKSkKKyNkZWZpbmUJCUhGQTM4NHhfQ01EX0NNRENPREVfR0VUKHZhbHVlKQkJKChVSU5UMTYpKCgoVUlOVDE2KSh2YWx1ZSkpICYgSEZBMzg0eF9DTURfQ01EQ09ERSkpCisjZGVmaW5lCQlIRkEzODR4X0NNRF9DTURDT0RFX1NFVCh2YWx1ZSkJCSgoVUlOVDE2KSh2YWx1ZSkpCisKKyNkZWZpbmUJCUhGQTM4NHhfU1RBVFVTX1JFU1VMVF9HRVQodmFsdWUpCSgoVUlOVDE2KSgoKChVSU5UMTYpKHZhbHVlKSkgJiBIRkEzODR4X1NUQVRVU19SRVNVTFQpID4+IDgpKQorI2RlZmluZQkJSEZBMzg0eF9TVEFUVVNfUkVTVUxUX1NFVCh2YWx1ZSkJKCgoVUlOVDE2KSh2YWx1ZSkpIDw8IDgpCisjZGVmaW5lCQlIRkEzODR4X1NUQVRVU19DTURDT0RFX0dFVCh2YWx1ZSkJKCgoVUlOVDE2KSh2YWx1ZSkpICYgSEZBMzg0eF9TVEFUVVNfQ01EQ09ERSkKKyNkZWZpbmUJCUhGQTM4NHhfU1RBVFVTX0NNRENPREVfU0VUKHZhbHVlKQkoKFVJTlQxNikodmFsdWUpKQorCisjZGVmaW5lCQlIRkEzODR4X09GRlNFVF9JU0JVU1kodmFsdWUpCQkoKFVJTlQxNikoKChVSU5UMTYpKHZhbHVlKSkgJiBIRkEzODR4X09GRlNFVF9CVVNZKSkKKyNkZWZpbmUJCUhGQTM4NHhfT0ZGU0VUX0lTRVJSKHZhbHVlKQkJKChVSU5UMTYpKCgoVUlOVDE2KSh2YWx1ZSkpICYgSEZBMzg0eF9PRkZTRVRfRVJSKSkKKyNkZWZpbmUJCUhGQTM4NHhfT0ZGU0VUX0RBVEFPRkZfR0VUKHZhbHVlKQkoKFVJTlQxNikoKChVSU5UMTYpKHZhbHVlKSkgJiBIRkEzODR4X09GRlNFVF9EQVRBT0ZGKSkKKyNkZWZpbmUJCUhGQTM4NHhfT0ZGU0VUX0RBVEFPRkZfU0VUKHZhbHVlKQkoKFVJTlQxNikodmFsdWUpKQorCisjZGVmaW5lCQlIRkEzODR4X0VWU1RBVF9JU1RJQ0sodmFsdWUpCQkoKFVJTlQxNikoKChVSU5UMTYpKHZhbHVlKSkgJiBIRkEzODR4X0VWU1RBVF9USUNLKSkKKyNkZWZpbmUJCUhGQTM4NHhfRVZTVEFUX0lTV1RFUlIodmFsdWUpCQkoKFVJTlQxNikoKChVSU5UMTYpKHZhbHVlKSkgJiBIRkEzODR4X0VWU1RBVF9XVEVSUikpCisjZGVmaW5lCQlIRkEzODR4X0VWU1RBVF9JU0lORkRST1AodmFsdWUpCQkoKFVJTlQxNikoKChVSU5UMTYpKHZhbHVlKSkgJiBIRkEzODR4X0VWU1RBVF9JTkZEUk9QKSkKKyNkZWZpbmUJCUhGQTM4NHhfRVZTVEFUX0lTSU5GTyh2YWx1ZSkJCSgoVUlOVDE2KSgoKFVJTlQxNikodmFsdWUpKSAmIEhGQTM4NHhfRVZTVEFUX0lORk8pKQorI2RlZmluZQkJSEZBMzg0eF9FVlNUQVRfSVNEVElNKHZhbHVlKQkJKChVSU5UMTYpKCgoVUlOVDE2KSh2YWx1ZSkpICYgSEZBMzg0eF9FVlNUQVRfRFRJTSkpCisjZGVmaW5lCQlIRkEzODR4X0VWU1RBVF9JU0NNRCh2YWx1ZSkJCSgoVUlOVDE2KSgoKFVJTlQxNikodmFsdWUpKSAmIEhGQTM4NHhfRVZTVEFUX0NNRCkpCisjZGVmaW5lCQlIRkEzODR4X0VWU1RBVF9JU0FMTE9DKHZhbHVlKQkJKChVSU5UMTYpKCgoVUlOVDE2KSh2YWx1ZSkpICYgSEZBMzg0eF9FVlNUQVRfQUxMT0MpKQorI2RlZmluZQkJSEZBMzg0eF9FVlNUQVRfSVNUWEVYQyh2YWx1ZSkJCSgoVUlOVDE2KSgoKFVJTlQxNikodmFsdWUpKSAmIEhGQTM4NHhfRVZTVEFUX1RYRVhDKSkKKyNkZWZpbmUJCUhGQTM4NHhfRVZTVEFUX0lTVFgodmFsdWUpCQkoKFVJTlQxNikoKChVSU5UMTYpKHZhbHVlKSkgJiBIRkEzODR4X0VWU1RBVF9UWCkpCisjZGVmaW5lCQlIRkEzODR4X0VWU1RBVF9JU1JYKHZhbHVlKQkJKChVSU5UMTYpKCgoVUlOVDE2KSh2YWx1ZSkpICYgSEZBMzg0eF9FVlNUQVRfUlgpKQorCisjZGVmaW5lCQlIRkEzODR4X0VWU1RBVF9JU0JBUF9PUCh2YWx1ZSkJCSgoVUlOVDE2KSgoKFVJTlQxNikodmFsdWUpKSAmIEhGQTM4NHhfSU5UX0JBUF9PUCkpCisKKyNkZWZpbmUJCUhGQTM4NHhfSU5URU5fSVNUSUNLKHZhbHVlKQkJKChVSU5UMTYpKCgoVUlOVDE2KSh2YWx1ZSkpICYgSEZBMzg0eF9JTlRFTl9USUNLKSkKKyNkZWZpbmUJCUhGQTM4NHhfSU5URU5fVElDS19TRVQodmFsdWUpCQkoKFVJTlQxNikoKChVSU5UMTYpKHZhbHVlKSkgPDwgMTUpKQorI2RlZmluZQkJSEZBMzg0eF9JTlRFTl9JU1dURVJSKHZhbHVlKQkJKChVSU5UMTYpKCgoVUlOVDE2KSh2YWx1ZSkpICYgSEZBMzg0eF9JTlRFTl9XVEVSUikpCisjZGVmaW5lCQlIRkEzODR4X0lOVEVOX1dURVJSX1NFVCh2YWx1ZSkJCSgoVUlOVDE2KSgoKFVJTlQxNikodmFsdWUpKSA8PCAxNCkpCisjZGVmaW5lCQlIRkEzODR4X0lOVEVOX0lTSU5GRFJPUCh2YWx1ZSkJCSgoVUlOVDE2KSgoKFVJTlQxNikodmFsdWUpKSAmIEhGQTM4NHhfSU5URU5fSU5GRFJPUCkpCisjZGVmaW5lCQlIRkEzODR4X0lOVEVOX0lORkRST1BfU0VUKHZhbHVlKQkoKFVJTlQxNikoKChVSU5UMTYpKHZhbHVlKSkgPDwgMTMpKQorI2RlZmluZQkJSEZBMzg0eF9JTlRFTl9JU0lORk8odmFsdWUpCQkoKFVJTlQxNikoKChVSU5UMTYpKHZhbHVlKSkgJiBIRkEzODR4X0lOVEVOX0lORk8pKQorI2RlZmluZQkJSEZBMzg0eF9JTlRFTl9JTkZPX1NFVCh2YWx1ZSkJCSgoVUlOVDE2KSgoKFVJTlQxNikodmFsdWUpKSA8PCA3KSkKKyNkZWZpbmUJCUhGQTM4NHhfSU5URU5fSVNEVElNKHZhbHVlKQkJKChVSU5UMTYpKCgoVUlOVDE2KSh2YWx1ZSkpICYgSEZBMzg0eF9JTlRFTl9EVElNKSkKKyNkZWZpbmUJCUhGQTM4NHhfSU5URU5fRFRJTV9TRVQodmFsdWUpCQkoKFVJTlQxNikoKChVSU5UMTYpKHZhbHVlKSkgPDwgNSkpCisjZGVmaW5lCQlIRkEzODR4X0lOVEVOX0lTQ01EKHZhbHVlKQkJKChVSU5UMTYpKCgoVUlOVDE2KSh2YWx1ZSkpICYgSEZBMzg0eF9JTlRFTl9DTUQpKQorI2RlZmluZQkJSEZBMzg0eF9JTlRFTl9DTURfU0VUKHZhbHVlKQkJKChVSU5UMTYpKCgoVUlOVDE2KSh2YWx1ZSkpIDw8IDQpKQorI2RlZmluZQkJSEZBMzg0eF9JTlRFTl9JU0FMTE9DKHZhbHVlKQkJKChVSU5UMTYpKCgoVUlOVDE2KSh2YWx1ZSkpICYgSEZBMzg0eF9JTlRFTl9BTExPQykpCisjZGVmaW5lCQlIRkEzODR4X0lOVEVOX0FMTE9DX1NFVCh2YWx1ZSkJCSgoVUlOVDE2KSgoKFVJTlQxNikodmFsdWUpKSA8PCAzKSkKKyNkZWZpbmUJCUhGQTM4NHhfSU5URU5fSVNUWEVYQyh2YWx1ZSkJCSgoVUlOVDE2KSgoKFVJTlQxNikodmFsdWUpKSAmIEhGQTM4NHhfSU5URU5fVFhFWEMpKQorI2RlZmluZQkJSEZBMzg0eF9JTlRFTl9UWEVYQ19TRVQodmFsdWUpCQkoKFVJTlQxNikoKChVSU5UMTYpKHZhbHVlKSkgPDwgMikpCisjZGVmaW5lCQlIRkEzODR4X0lOVEVOX0lTVFgodmFsdWUpCQkoKFVJTlQxNikoKChVSU5UMTYpKHZhbHVlKSkgJiBIRkEzODR4X0lOVEVOX1RYKSkKKyNkZWZpbmUJCUhGQTM4NHhfSU5URU5fVFhfU0VUKHZhbHVlKQkJKChVSU5UMTYpKCgoVUlOVDE2KSh2YWx1ZSkpIDw8IDEpKQorI2RlZmluZQkJSEZBMzg0eF9JTlRFTl9JU1JYKHZhbHVlKQkJKChVSU5UMTYpKCgoVUlOVDE2KSh2YWx1ZSkpICYgSEZBMzg0eF9JTlRFTl9SWCkpCisjZGVmaW5lCQlIRkEzODR4X0lOVEVOX1JYX1NFVCh2YWx1ZSkJCSgoVUlOVDE2KSgoKFVJTlQxNikodmFsdWUpKSA8PCAwKSkKKworI2RlZmluZQkJSEZBMzg0eF9FVkFDS19JU1RJQ0sodmFsdWUpCQkoKFVJTlQxNikoKChVSU5UMTYpKHZhbHVlKSkgJiBIRkEzODR4X0VWQUNLX1RJQ0spKQorI2RlZmluZQkJSEZBMzg0eF9FVkFDS19USUNLX1NFVCh2YWx1ZSkJCSgoVUlOVDE2KSgoKFVJTlQxNikodmFsdWUpKSA8PCAxNSkpCisjZGVmaW5lCQlIRkEzODR4X0VWQUNLX0lTV1RFUlIodmFsdWUpCQkoKFVJTlQxNikoKChVSU5UMTYpKHZhbHVlKSkgJiBIRkEzODR4X0VWQUNLX1dURVJSKSkKKyNkZWZpbmUJCUhGQTM4NHhfRVZBQ0tfV1RFUlJfU0VUKHZhbHVlKQkJKChVSU5UMTYpKCgoVUlOVDE2KSh2YWx1ZSkpIDw8IDE0KSkKKyNkZWZpbmUJCUhGQTM4NHhfRVZBQ0tfSVNJTkZEUk9QKHZhbHVlKQkJKChVSU5UMTYpKCgoVUlOVDE2KSh2YWx1ZSkpICYgSEZBMzg0eF9FVkFDS19JTkZEUk9QKSkKKyNkZWZpbmUJCUhGQTM4NHhfRVZBQ0tfSU5GRFJPUF9TRVQodmFsdWUpCSgoVUlOVDE2KSgoKFVJTlQxNikodmFsdWUpKSA8PCAxMykpCisjZGVmaW5lCQlIRkEzODR4X0VWQUNLX0lTSU5GTyh2YWx1ZSkJCSgoVUlOVDE2KSgoKFVJTlQxNikodmFsdWUpKSAmIEhGQTM4NHhfRVZBQ0tfSU5GTykpCisjZGVmaW5lCQlIRkEzODR4X0VWQUNLX0lORk9fU0VUKHZhbHVlKQkJKChVSU5UMTYpKCgoVUlOVDE2KSh2YWx1ZSkpIDw8IDcpKQorI2RlZmluZQkJSEZBMzg0eF9FVkFDS19JU0RUSU0odmFsdWUpCQkoKFVJTlQxNikoKChVSU5UMTYpKHZhbHVlKSkgJiBIRkEzODR4X0VWQUNLX0RUSU0pKQorI2RlZmluZQkJSEZBMzg0eF9FVkFDS19EVElNX1NFVCh2YWx1ZSkJCSgoVUlOVDE2KSgoKFVJTlQxNikodmFsdWUpKSA8PCA1KSkKKyNkZWZpbmUJCUhGQTM4NHhfRVZBQ0tfSVNDTUQodmFsdWUpCQkoKFVJTlQxNikoKChVSU5UMTYpKHZhbHVlKSkgJiBIRkEzODR4X0VWQUNLX0NNRCkpCisjZGVmaW5lCQlIRkEzODR4X0VWQUNLX0NNRF9TRVQodmFsdWUpCQkoKFVJTlQxNikoKChVSU5UMTYpKHZhbHVlKSkgPDwgNCkpCisjZGVmaW5lCQlIRkEzODR4X0VWQUNLX0lTQUxMT0ModmFsdWUpCQkoKFVJTlQxNikoKChVSU5UMTYpKHZhbHVlKSkgJiBIRkEzODR4X0VWQUNLX0FMTE9DKSkKKyNkZWZpbmUJCUhGQTM4NHhfRVZBQ0tfQUxMT0NfU0VUKHZhbHVlKQkJKChVSU5UMTYpKCgoVUlOVDE2KSh2YWx1ZSkpIDw8IDMpKQorI2RlZmluZQkJSEZBMzg0eF9FVkFDS19JU1RYRVhDKHZhbHVlKQkJKChVSU5UMTYpKCgoVUlOVDE2KSh2YWx1ZSkpICYgSEZBMzg0eF9FVkFDS19UWEVYQykpCisjZGVmaW5lCQlIRkEzODR4X0VWQUNLX1RYRVhDX1NFVCh2YWx1ZSkJCSgoVUlOVDE2KSgoKFVJTlQxNikodmFsdWUpKSA8PCAyKSkKKyNkZWZpbmUJCUhGQTM4NHhfRVZBQ0tfSVNUWCh2YWx1ZSkJCSgoVUlOVDE2KSgoKFVJTlQxNikodmFsdWUpKSAmIEhGQTM4NHhfRVZBQ0tfVFgpKQorI2RlZmluZQkJSEZBMzg0eF9FVkFDS19UWF9TRVQodmFsdWUpCQkoKFVJTlQxNikoKChVSU5UMTYpKHZhbHVlKSkgPDwgMSkpCisjZGVmaW5lCQlIRkEzODR4X0VWQUNLX0lTUlgodmFsdWUpCQkoKFVJTlQxNikoKChVSU5UMTYpKHZhbHVlKSkgJiBIRkEzODR4X0VWQUNLX1JYKSkKKyNkZWZpbmUJCUhGQTM4NHhfRVZBQ0tfUlhfU0VUKHZhbHVlKQkJKChVSU5UMTYpKCgoVUlOVDE2KSh2YWx1ZSkpIDw8IDApKQorCisjZGVmaW5lCQlIRkEzODR4X0NPTlRST0xfQVVYRU5fU0VUKHZhbHVlKQkoKFVJTlQxNikoKChVSU5UMTYpKHZhbHVlKSkgPDwgMTQpKQorI2RlZmluZQkJSEZBMzg0eF9DT05UUk9MX0FVWEVOX0dFVCh2YWx1ZSkJKChVSU5UMTYpKCgoVUlOVDE2KSh2YWx1ZSkpID4+IDE0KSkKKworLyogQnl0ZSBPcmRlciAqLworI2lmZGVmIF9fS0VSTkVMX18KKyNkZWZpbmUgaGZhMzg0eDJob3N0XzE2KG4pCShfX2xlMTZfdG9fY3B1KChVSU5UMTYpKG4pKSkKKyNkZWZpbmUgaGZhMzg0eDJob3N0XzMyKG4pCShfX2xlMzJfdG9fY3B1KChVSU5UMzIpKG4pKSkKKyNkZWZpbmUgaG9zdDJoZmEzODR4XzE2KG4pCShfX2NwdV90b19sZTE2KChVSU5UMTYpKG4pKSkKKyNkZWZpbmUgaG9zdDJoZmEzODR4XzMyKG4pCShfX2NwdV90b19sZTMyKChVSU5UMzIpKG4pKSkKKyNlbmRpZgorCisvKiBIb3N0IE1haW50YWluZWQgU3RhdGUgSW5mbyAqLworI2RlZmluZSBIRkEzODR4X1NUQVRFX1BSRUlOSVQJMAorI2RlZmluZSBIRkEzODR4X1NUQVRFX0lOSVQJMQorI2RlZmluZSBIRkEzODR4X1NUQVRFX1JVTk5JTkcJMgorCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworLyotLS0tLS0gVHlwZXMgYW5kIHRoZWlyIHJlbGF0ZWQgY29uc3RhbnRzIC0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworI2RlZmluZSBIRkEzODR4X0hPU1RBVVRIQVNTT0NfSE9TVEFVVEggICBCSVQwCisjZGVmaW5lIEhGQTM4NHhfSE9TVEFVVEhBU1NPQ19IT1NUQVNTT0MgIEJJVDEKKworI2RlZmluZSBIRkEzODR4X1dIQUhBTkRMSU5HX0RJU0FCTEVEICAgICAwCisjZGVmaW5lIEhGQTM4NHhfV0hBSEFORExJTkdfUEFTU1RIUk9VR0ggIEJJVDEKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qIENvbW1vbmx5IHVzZWQgYmFzaWMgdHlwZXMgKi8KK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfYnl0ZXN0cgoreworCVVJTlQxNglsZW47CisJVUlOVDgJZGF0YVswXTsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9ieXRlc3RyX3Q7CisKK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfYnl0ZXN0cjMyCit7CisJVUlOVDE2CWxlbjsKKwlVSU5UOAlkYXRhWzMyXTsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9ieXRlc3RyMzJfdDsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQ29uZmlndXJhdGlvbiBSZWNvcmQgU3RydWN0dXJlczoKKwlOZXR3b3JrIFBhcmFtZXRlcnMsIFN0YXRpYyBDb25maWd1cmF0aW9uIEVudGl0aWVzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiBQcm90b3R5cGUgc3RydWN0dXJlOiBhbGwgY29uZmlndXJhdGlvbiByZWNvcmQgc3RydWN0dXJlcyBzdGFydCB3aXRoCit0aGVzZSBtZW1iZXJzICovCisKK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfcmVjb3JkCit7CisJVUlOVDE2CXJlY2xlbjsKKwlVSU5UMTYJcmlkOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X3JlY190OworCit0eXBlZGVmIHN0cnVjdCBoZmEzODR4X3JlY29yZDE2Cit7CisJVUlOVDE2CXJlY2xlbjsKKwlVSU5UMTYJcmlkOworCVVJTlQxNgl2YWw7Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfcmVjMTZfdDsKKwordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9yZWNvcmQzMgoreworCVVJTlQxNglyZWNsZW47CisJVUlOVDE2CXJpZDsKKwlVSU5UMzIJdmFsOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X3JlYzMyOworCisvKi0tIEhhcmR3YXJlL0Zpcm13YXJlIENvbXBvbmVudCBJbmZvcm1hdGlvbiAtLS0tLS0tLS0tKi8KK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfY29tcGlkZW50Cit7CisJVUlOVDE2CWlkOworCVVJTlQxNgl2YXJpYW50OworCVVJTlQxNgltYWpvcjsKKwlVSU5UMTYJbWlub3I7Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfY29tcGlkZW50X3Q7CisKK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfY2FwbGV2ZWwKK3sKKwlVSU5UMTYJcm9sZTsKKwlVSU5UMTYJaWQ7CisJVUlOVDE2CXZhcmlhbnQ7CisJVUlOVDE2CWJvdHRvbTsKKwlVSU5UMTYJdG9wOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X2NhcGxldmVsX3Q7CisKKy8qLS0gQ29uZmlndXJhdGlvbiBSZWNvcmQ6IGNuZlBvcnRUeXBlIC0tKi8KK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfY25mUG9ydFR5cGUKK3sKKwlVSU5UMTYJY25mUG9ydFR5cGU7Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfY25mUG9ydFR5cGVfdDsKKworLyotLSBDb25maWd1cmF0aW9uIFJlY29yZDogY25mT3duTUFDQWRkcmVzcyAtLSovCit0eXBlZGVmIHN0cnVjdCBoZmEzODR4X2NuZk93bk1BQ0FkZHJlc3MKK3sKKwlVSU5UOAljbmZPd25NQUNBZGRyZXNzWzZdOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X2NuZk93bk1BQ0FkZHJlc3NfdDsKKworLyotLSBDb25maWd1cmF0aW9uIFJlY29yZDogY25mRGVzaXJlZFNTSUQgLS0qLwordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9jbmZEZXNpcmVkU1NJRAoreworCVVJTlQ4CWNuZkRlc2lyZWRTU0lEWzM0XTsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9jbmZEZXNpcmVkU1NJRF90OworCisvKi0tIENvbmZpZ3VyYXRpb24gUmVjb3JkOiBjbmZPd25DaGFubmVsIC0tKi8KK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfY25mT3duQ2hhbm5lbAoreworCVVJTlQxNgljbmZPd25DaGFubmVsOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X2NuZk93bkNoYW5uZWxfdDsKKworLyotLSBDb25maWd1cmF0aW9uIFJlY29yZDogY25mT3duU1NJRCAtLSovCit0eXBlZGVmIHN0cnVjdCBoZmEzODR4X2NuZk93blNTSUQKK3sKKwlVSU5UOAljbmZPd25TU0lEWzM0XTsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9jbmZPd25TU0lEX3Q7CisKKy8qLS0gQ29uZmlndXJhdGlvbiBSZWNvcmQ6IGNuZk93bkFUSU1XaW5kb3cgLS0qLwordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9jbmZPd25BVElNV2luZG93Cit7CisJVUlOVDE2CWNuZk93bkFUSU1XaW5kb3c7Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfY25mT3duQVRJTVdpbmRvd190OworCisvKi0tIENvbmZpZ3VyYXRpb24gUmVjb3JkOiBjbmZTeXN0ZW1TY2FsZSAtLSovCit0eXBlZGVmIHN0cnVjdCBoZmEzODR4X2NuZlN5c3RlbVNjYWxlCit7CisJVUlOVDE2CWNuZlN5c3RlbVNjYWxlOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X2NuZlN5c3RlbVNjYWxlX3Q7CisKKy8qLS0gQ29uZmlndXJhdGlvbiBSZWNvcmQ6IGNuZk1heERhdGFMZW5ndGggLS0qLwordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9jbmZNYXhEYXRhTGVuZ3RoCit7CisJVUlOVDE2CWNuZk1heERhdGFMZW5ndGg7Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfY25mTWF4RGF0YUxlbmd0aF90OworCisvKi0tIENvbmZpZ3VyYXRpb24gUmVjb3JkOiBjbmZXRFNBZGRyZXNzIC0tKi8KK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfY25mV0RTQWRkcmVzcworeworCVVJTlQ4CWNuZldEU0FkZHJlc3NbNl07Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfY25mV0RTQWRkcmVzc190OworCisvKi0tIENvbmZpZ3VyYXRpb24gUmVjb3JkOiBjbmZQTUVuYWJsZWQgLS0qLwordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9jbmZQTUVuYWJsZWQKK3sKKwlVSU5UMTYJY25mUE1FbmFibGVkOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X2NuZlBNRW5hYmxlZF90OworCisvKi0tIENvbmZpZ3VyYXRpb24gUmVjb3JkOiBjbmZQTUVQUyAtLSovCit0eXBlZGVmIHN0cnVjdCBoZmEzODR4X2NuZlBNRVBTCit7CisJVUlOVDE2CWNuZlBNRVBTOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X2NuZlBNRVBTX3Q7CisKKy8qLS0gQ29uZmlndXJhdGlvbiBSZWNvcmQ6IGNuZk11bHRpY2FzdFJlY2VpdmUgLS0qLwordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9jbmZNdWx0aWNhc3RSZWNlaXZlCit7CisJVUlOVDE2CWNuZk11bHRpY2FzdFJlY2VpdmU7Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfY25mTXVsdGljYXN0UmVjZWl2ZV90OworCisvKi0tIENvbmZpZ3VyYXRpb24gUmVjb3JkOiBjbmZBdXRoZW50aWNhdGlvbiAtLSovCisjZGVmaW5lIEhGQTM4NHhfQ05GQVVUSEVOVElDQVRJT05fT1BFTlNZU1RFTQkweDAwMDEKKyNkZWZpbmUgSEZBMzg0eF9DTkZBVVRIRU5USUNBVElPTl9TSEFSRURLRVkJMHgwMDAyCisjZGVmaW5lIEhGQTM4NHhfQ05GQVVUSEVOVElDQVRJT05fTEVBUCAgICAgCTB4MDAwNAorCisvKi0tIENvbmZpZ3VyYXRpb24gUmVjb3JkOiBjbmZNYXhTbGVlcER1cmF0aW9uIC0tKi8KK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfY25mTWF4U2xlZXBEdXJhdGlvbgoreworCVVJTlQxNgljbmZNYXhTbGVlcER1cmF0aW9uOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X2NuZk1heFNsZWVwRHVyYXRpb25fdDsKKworLyotLSBDb25maWd1cmF0aW9uIFJlY29yZDogY25mUE1Ib2xkb3ZlckR1cmF0aW9uIC0tKi8KK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfY25mUE1Ib2xkb3ZlckR1cmF0aW9uCit7CisJVUlOVDE2CWNuZlBNSG9sZG92ZXJEdXJhdGlvbjsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9jbmZQTUhvbGRvdmVyRHVyYXRpb25fdDsKKworLyotLSBDb25maWd1cmF0aW9uIFJlY29yZDogY25mT3duTmFtZSAtLSovCit0eXBlZGVmIHN0cnVjdCBoZmEzODR4X2NuZk93bk5hbWUKK3sKKwlVSU5UOAljbmZPd25OYW1lWzM0XTsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9jbmZPd25OYW1lX3Q7CisKKy8qLS0gQ29uZmlndXJhdGlvbiBSZWNvcmQ6IGNuZk93bkRUSU1QZXJpb2QgLS0qLwordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9jbmZPd25EVElNUGVyaW9kCit7CisJVUlOVDE2CWNuZk93bkRUSU1QZXJpb2Q7Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfY25mT3duRFRJTVBlcmlvZF90OworCisvKi0tIENvbmZpZ3VyYXRpb24gUmVjb3JkOiBjbmZXRFNBZGRyZXNzIC0tKi8KK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfY25mV0RTQWRkcmVzc04KK3sKKwlVSU5UOAljbmZXRFNBZGRyZXNzWzZdOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X2NuZldEU0FkZHJlc3NOX3Q7CisKKy8qLS0gQ29uZmlndXJhdGlvbiBSZWNvcmQ6IGNuZk11bHRpY2FzdFBNQnVmZmVyaW5nIC0tKi8KK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfY25mTXVsdGljYXN0UE1CdWZmZXJpbmcKK3sKKwlVSU5UMTYJY25mTXVsdGljYXN0UE1CdWZmZXJpbmc7Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfY25mTXVsdGljYXN0UE1CdWZmZXJpbmdfdDsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQ29uZmlndXJhdGlvbiBSZWNvcmQgU3RydWN0dXJlczoKKwlOZXR3b3JrIFBhcmFtZXRlcnMsIER5bmFtaWMgQ29uZmlndXJhdGlvbiBFbnRpdGllcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKi0tIENvbmZpZ3VyYXRpb24gUmVjb3JkOiBHcm91cEFkZHJlc3NlcyAtLSovCit0eXBlZGVmIHN0cnVjdCBoZmEzODR4X0dyb3VwQWRkcmVzc2VzCit7CisJVUlOVDgJTUFDQWRkcmVzc1sxNl1bNl07Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfR3JvdXBBZGRyZXNzZXNfdDsKKworLyotLSBDb25maWd1cmF0aW9uIFJlY29yZDogQ3JlYXRlSUJTUyAtLSovCit0eXBlZGVmIHN0cnVjdCBoZmEzODR4X0NyZWF0ZUlCU1MKK3sKKwlVSU5UMTYJQ3JlYXRlSUJTUzsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9DcmVhdGVJQlNTX3Q7CisKKyNkZWZpbmUgSEZBMzg0eF9DUkVBVEVJQlNTX0pPSU5DUkVBVEVJQlNTICAgICAgICAgIDAKKyNkZWZpbmUgSEZBMzg0eF9DUkVBVEVJQlNTX0pPSU5FU1NfSk9JTkNSRUFURUlCU1MgIDEKKyNkZWZpbmUgSEZBMzg0eF9DUkVBVEVJQlNTX0pPSU5JQlNTICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgSEZBMzg0eF9DUkVBVEVJQlNTX0pPSU5FU1NfSk9JTklCU1MgICAgICAgIDMKKworLyotLSBDb25maWd1cmF0aW9uIFJlY29yZDogRnJhZ21lbnRhdGlvblRocmVzaG9sZCAtLSovCit0eXBlZGVmIHN0cnVjdCBoZmEzODR4X0ZyYWdtZW50YXRpb25UaHJlc2hvbGQKK3sKKwlVSU5UMTYJRnJhZ21lbnRhdGlvblRocmVzaG9sZDsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9GcmFnbWVudGF0aW9uVGhyZXNob2xkX3Q7CisKKy8qLS0gQ29uZmlndXJhdGlvbiBSZWNvcmQ6IFJUU1RocmVzaG9sZCAtLSovCit0eXBlZGVmIHN0cnVjdCBoZmEzODR4X1JUU1RocmVzaG9sZAoreworCVVJTlQxNglSVFNUaHJlc2hvbGQ7Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfUlRTVGhyZXNob2xkX3Q7CisKKy8qLS0gQ29uZmlndXJhdGlvbiBSZWNvcmQ6IFR4UmF0ZUNvbnRyb2wgLS0qLwordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9UeFJhdGVDb250cm9sCit7CisJVUlOVDE2CVR4UmF0ZUNvbnRyb2w7Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfVHhSYXRlQ29udHJvbF90OworCisvKi0tIENvbmZpZ3VyYXRpb24gUmVjb3JkOiBQcm9taXNjdW91c01vZGUgLS0qLwordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9Qcm9taXNjdW91c01vZGUKK3sKKwlVSU5UMTYJUHJvbWlzY3VvdXNNb2RlOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X1Byb21pc2N1b3VzTW9kZV90OworCisvKi0tIENvbmZpZ3VyYXRpb24gUmVjb3JkOiBTY2FuUmVxdWVzdCAoZGF0YSBwb3J0aW9uIG9ubHkpIC0tKi8KK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfU2NhblJlcXVlc3RfZGF0YQoreworCVVJTlQxNgljaGFubmVsTGlzdDsKKwlVSU5UMTYJdHhSYXRlOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X1NjYW5SZXF1ZXN0X2RhdGFfdDsKKworLyotLSBDb25maWd1cmF0aW9uIFJlY29yZDogSG9zdFNjYW5SZXF1ZXN0IChkYXRhIHBvcnRpb24gb25seSkgLS0qLwordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9Ib3N0U2NhblJlcXVlc3RfZGF0YQoreworCVVJTlQxNgljaGFubmVsTGlzdDsKKwlVSU5UMTYJdHhSYXRlOworCWhmYTM4NHhfYnl0ZXN0cjMyX3Qgc3NpZDsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9Ib3N0U2NhblJlcXVlc3RfZGF0YV90OworCisvKi0tIENvbmZpZ3VyYXRpb24gUmVjb3JkOiBKb2luUmVxdWVzdCAoZGF0YSBwb3J0aW9uIG9ubHkpIC0tKi8KK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfSm9pblJlcXVlc3RfZGF0YQoreworCVVJTlQ4CWJzc2lkW1dMQU5fQlNTSURfTEVOXTsKKwlVSU5UMTYJY2hhbm5lbDsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9Kb2luUmVxdWVzdF9kYXRhX3Q7CisKKy8qLS0gQ29uZmlndXJhdGlvbiBSZWNvcmQ6IGF1dGhlbnRpY2F0ZVN0YXRpb24gKGRhdGEgcG9ydGlvbiBvbmx5KSAtLSovCit0eXBlZGVmIHN0cnVjdCBoZmEzODR4X2F1dGhlbnRpY2F0ZVN0YXRpb25fZGF0YQoreworCVVJTlQ4CWFkZHJlc3NbV0xBTl9BRERSX0xFTl07CisJVUlOVDE2CXN0YXR1czsKKwlVSU5UMTYJYWxnb3JpdGhtOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X2F1dGhlbnRpY2F0ZVN0YXRpb25fZGF0YV90OworCisvKi0tIENvbmZpZ3VyYXRpb24gUmVjb3JkOiBhc3NvY2lhdGVTdGF0aW9uIChkYXRhIHBvcnRpb24gb25seSkgLS0qLwordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9hc3NvY2lhdGVTdGF0aW9uX2RhdGEKK3sKKwlVSU5UOAlhZGRyZXNzW1dMQU5fQUREUl9MRU5dOworCVVJTlQxNglzdGF0dXM7CisJVUlOVDE2CXR5cGU7Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfYXNzb2NpYXRlU3RhdGlvbl9kYXRhX3Q7CisKKy8qLS0gQ29uZmlndXJhdGlvbiBSZWNvcmQ6IENoYW5uZWxJbmZvUmVxdWVzdCAoZGF0YSBwb3J0aW9uIG9ubHkpIC0tKi8KK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfQ2hhbm5lbEluZm9SZXF1ZXN0X2RhdGEKK3sKKwlVSU5UMTYJY2hhbm5lbExpc3Q7CisJVUlOVDE2CWNoYW5uZWxEd2VsbFRpbWU7Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfQ2hhbm5lbEluZm9SZXF1ZXN0X2RhdGFfdDsKKworLyotLSBDb25maWd1cmF0aW9uIFJlY29yZDogV0VQS2V5TWFwcGluZyAoZGF0YSBwb3J0aW9uIG9ubHkpIC0tKi8KK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfV0VQS2V5TWFwcGluZworeworCVVJTlQ4CWFkZHJlc3NbV0xBTl9BRERSX0xFTl07CisJVUlOVDE2CWtleV9pbmRleDsKKwlVSU5UOCAJa2V5WzE2XTsKKwlVSU5UOCAJbWljX3RyYW5zbWl0X2tleVs0XTsKKwlVSU5UOCAJbWljX3JlY2VpdmVfa2V5WzRdOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X1dFUEtleU1hcHBpbmdfdDsKKworLyotLSBDb25maWd1cmF0aW9uIFJlY29yZDogV1BBRGF0YSAgICAgICAoZGF0YSBwb3J0aW9uIG9ubHkpIC0tKi8KK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfV1BBRGF0YQoreworCVVJTlQxNglkYXRhbGVuOworICAgICAgICBVSU5UOCAJZGF0YVswXTsgLy8gbWF4IDgwCit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfV1BBRGF0YV90OworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitDb25maWd1cmF0aW9uIFJlY29yZCBTdHJ1Y3R1cmVzOiBCZWhhdmlvciBQYXJhbWV0ZXJzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qLS0gQ29uZmlndXJhdGlvbiBSZWNvcmQ6IFRpY2tUaW1lIC0tKi8KK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfVGlja1RpbWUKK3sKKwlVSU5UMTYJVGlja1RpbWU7Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfVGlja1RpbWVfdDsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorSW5mb3JtYXRpb24gUmVjb3JkIFN0cnVjdHVyZXM6IE5JQyBJbmZvcm1hdGlvbgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKi0tIEluZm9ybWF0aW9uIFJlY29yZDogTWF4TG9hZFRpbWUgLS0qLwordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9NYXhMb2FkVGltZQoreworCVVJTlQxNglNYXhMb2FkVGltZTsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9NYXhMb2FkVGltZV90OworCisvKi0tIEluZm9ybWF0aW9uIFJlY29yZDogRG93bkxvYWRCdWZmZXIgLS0qLworLyogTk9URTogVGhlIHBhZ2UgYW5kIG9mZnNldCBhcmUgaW4gQVVYIGZvcm1hdCAqLwordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9kb3dubG9hZGJ1ZmZlcgoreworCVVJTlQxNglwYWdlOworCVVJTlQxNglvZmZzZXQ7CisJVUlOVDE2CWxlbjsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9kb3dubG9hZGJ1ZmZlcl90OworCisvKi0tIEluZm9ybWF0aW9uIFJlY29yZDogUFJJSWRlbnRpdHkgLS0qLwordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9QUklJZGVudGl0eQoreworCVVJTlQxNglQUklDb21wSUQ7CisJVUlOVDE2CVBSSVZhcmlhbnQ7CisJVUlOVDE2CVBSSU1ham9yVmVyc2lvbjsKKwlVSU5UMTYJUFJJTWlub3JWZXJzaW9uOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X1BSSUlkZW50aXR5X3Q7CisKKy8qLS0gSW5mb3JtYXRpb24gUmVjb3JkOiBQUklTdXBSYW5nZSAtLSovCit0eXBlZGVmIHN0cnVjdCBoZmEzODR4X1BSSVN1cFJhbmdlCit7CisJVUlOVDE2CVBSSVJvbGU7CisJVUlOVDE2CVBSSUlEOworCVVJTlQxNglQUklWYXJpYW50OworCVVJTlQxNglQUklCb3R0b207CisJVUlOVDE2CVBSSVRvcDsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9QUklTdXBSYW5nZV90OworCisvKi0tIEluZm9ybWF0aW9uIFJlY29yZDogQ0ZJQWN0UmFuZ2VzIC0tKi8KK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfQ0ZJQWN0UmFuZ2VzCit7CisJVUlOVDE2CUNGSVJvbGU7CisJVUlOVDE2CUNGSUlEOworCVVJTlQxNglDRklWYXJpYW50OworCVVJTlQxNglDRklCb3R0b207CisJVUlOVDE2CUNGSVRvcDsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9DRklBY3RSYW5nZXNfdDsKKworLyotLSBJbmZvcm1hdGlvbiBSZWNvcmQ6IE5JQ1NlcmlhbE51bWJlciAtLSovCit0eXBlZGVmIHN0cnVjdCBoZmEzODR4X05JQ1NlcmlhbE51bWJlcgoreworCVVJTlQ4CU5JQ1NlcmlhbE51bWJlclsxMl07Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfTklDU2VyaWFsTnVtYmVyX3Q7CisKKy8qLS0gSW5mb3JtYXRpb24gUmVjb3JkOiBOSUNJZGVudGl0eSAtLSovCit0eXBlZGVmIHN0cnVjdCBoZmEzODR4X05JQ0lkZW50aXR5Cit7CisJVUlOVDE2CU5JQ0NvbXBJRDsKKwlVSU5UMTYJTklDVmFyaWFudDsKKwlVSU5UMTYJTklDTWFqb3JWZXJzaW9uOworCVVJTlQxNglOSUNNaW5vclZlcnNpb247Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfTklDSWRlbnRpdHlfdDsKKworLyotLSBJbmZvcm1hdGlvbiBSZWNvcmQ6IE1GSVN1cFJhbmdlIC0tKi8KK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfTUZJU3VwUmFuZ2UKK3sKKwlVSU5UMTYJTUZJUm9sZTsKKwlVSU5UMTYJTUZJSUQ7CisJVUlOVDE2CU1GSVZhcmlhbnQ7CisJVUlOVDE2CU1GSUJvdHRvbTsKKwlVSU5UMTYJTUZJVG9wOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X01GSVN1cFJhbmdlX3Q7CisKKy8qLS0gSW5mb3JtYXRpb24gUmVjb3JkOiBDRklTdXBSYW5nZSAtLSovCit0eXBlZGVmIHN0cnVjdCBoZmEzODR4X0NGSVN1cFJhbmdlCit7CisJVUlOVDE2CUNGSVJvbGU7CisJVUlOVDE2CUNGSUlEOworCVVJTlQxNglDRklWYXJpYW50OworCVVJTlQxNglDRklCb3R0b207CisJVUlOVDE2CUNGSVRvcDsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9DRklTdXBSYW5nZV90OworCisvKi0tIEluZm9ybWF0aW9uIFJlY29yZDogQlVJTERTRVE6QnVpbGRTZXEgLS0qLwordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9CdWlsZFNlcSB7CisJVUlOVDE2CXByaW1hcnk7CisJVUlOVDE2CXNlY29uZGFyeTsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9CdWlsZFNlcV90OworCisvKi0tIEluZm9ybWF0aW9uIFJlY29yZDogRldJRCAtLSovCisjZGVmaW5lIEhGQTM4NHhfRldJRF9MRU4JMTQKK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfRldJRCB7CisJVUlOVDgJcHJpbWFyeVtIRkEzODR4X0ZXSURfTEVOXTsKKwlVSU5UOAlzZWNvbmRhcnlbSEZBMzg0eF9GV0lEX0xFTl07Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfRldJRF90OworCisvKi0tIEluZm9ybWF0aW9uIFJlY29yZDogQ2hhbm5lbExpc3QgLS0qLwordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9DaGFubmVsTGlzdAoreworCVVJTlQxNglDaGFubmVsTGlzdDsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9DaGFubmVsTGlzdF90OworCisvKi0tIEluZm9ybWF0aW9uIFJlY29yZDogUmVndWxhdG9yeURvbWFpbnMgLS0qLwordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9SZWd1bGF0b3J5RG9tYWlucworeworCVVJTlQ4CVJlZ3VsYXRvcnlEb21haW5zWzEyXTsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9SZWd1bGF0b3J5RG9tYWluc190OworCisvKi0tIEluZm9ybWF0aW9uIFJlY29yZDogVGVtcFR5cGUgLS0qLwordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9UZW1wVHlwZQoreworCVVJTlQxNglUZW1wVHlwZTsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9UZW1wVHlwZV90OworCisvKi0tIEluZm9ybWF0aW9uIFJlY29yZDogQ0lTIC0tKi8KK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfQ0lTCit7CisJVUlOVDgJQ0lTWzQ4MF07Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfQ0lTX3Q7CisKKy8qLS0gSW5mb3JtYXRpb24gUmVjb3JkOiBTVEFJZGVudGl0eSAtLSovCit0eXBlZGVmIHN0cnVjdCBoZmEzODR4X1NUQUlkZW50aXR5Cit7CisJVUlOVDE2CVNUQUNvbXBJRDsKKwlVSU5UMTYJU1RBVmFyaWFudDsKKwlVSU5UMTYJU1RBTWFqb3JWZXJzaW9uOworCVVJTlQxNglTVEFNaW5vclZlcnNpb247Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfU1RBSWRlbnRpdHlfdDsKKworLyotLSBJbmZvcm1hdGlvbiBSZWNvcmQ6IFNUQVN1cFJhbmdlIC0tKi8KK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfU1RBU3VwUmFuZ2UKK3sKKwlVSU5UMTYJU1RBUm9sZTsKKwlVSU5UMTYJU1RBSUQ7CisJVUlOVDE2CVNUQVZhcmlhbnQ7CisJVUlOVDE2CVNUQUJvdHRvbTsKKwlVSU5UMTYJU1RBVG9wOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X1NUQVN1cFJhbmdlX3Q7CisKKy8qLS0gSW5mb3JtYXRpb24gUmVjb3JkOiBNRklBY3RSYW5nZXMgLS0qLwordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9NRklBY3RSYW5nZXMKK3sKKwlVSU5UMTYJTUZJUm9sZTsKKwlVSU5UMTYJTUZJSUQ7CisJVUlOVDE2CU1GSVZhcmlhbnQ7CisJVUlOVDE2CU1GSUJvdHRvbTsKKwlVSU5UMTYJTUZJVG9wOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X01GSUFjdFJhbmdlc190OworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitJbmZvcm1hdGlvbiBSZWNvcmQgU3RydWN0dXJlczogTklDIEluZm9ybWF0aW9uCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qLS0gSW5mb3JtYXRpb24gUmVjb3JkOiBQb3J0U3RhdHVzIC0tKi8KK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfUG9ydFN0YXR1cworeworCVVJTlQxNglQb3J0U3RhdHVzOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X1BvcnRTdGF0dXNfdDsKKworI2RlZmluZSBIRkEzODR4X1BTVEFUVVNfRElTQUJMRUQJKChVSU5UMTYpMSkKKyNkZWZpbmUgSEZBMzg0eF9QU1RBVFVTX1NFQVJDSElORwkoKFVJTlQxNikyKQorI2RlZmluZSBIRkEzODR4X1BTVEFUVVNfQ09OTl9JQlNTCSgoVUlOVDE2KTMpCisjZGVmaW5lIEhGQTM4NHhfUFNUQVRVU19DT05OX0VTUwkoKFVJTlQxNik0KQorI2RlZmluZSBIRkEzODR4X1BTVEFUVVNfT1VUT0ZSQU5HRQkoKFVJTlQxNik1KQorI2RlZmluZSBIRkEzODR4X1BTVEFUVVNfQ09OTl9XRFMJKChVSU5UMTYpNikKKworLyotLSBJbmZvcm1hdGlvbiBSZWNvcmQ6IEN1cnJlbnRTU0lEIC0tKi8KK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfQ3VycmVudFNTSUQKK3sKKwlVSU5UOAlDdXJyZW50U1NJRFszNF07Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfQ3VycmVudFNTSURfdDsKKworLyotLSBJbmZvcm1hdGlvbiBSZWNvcmQ6IEN1cnJlbnRCU1NJRCAtLSovCit0eXBlZGVmIHN0cnVjdCBoZmEzODR4X0N1cnJlbnRCU1NJRAoreworCVVJTlQ4CUN1cnJlbnRCU1NJRFs2XTsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9DdXJyZW50QlNTSURfdDsKKworLyotLSBJbmZvcm1hdGlvbiBSZWNvcmQ6IGNvbW1zcXVhbGl0eSAtLSovCit0eXBlZGVmIHN0cnVjdCBoZmEzODR4X2NvbW1zcXVhbGl0eQoreworCVVJTlQxNglDUV9jdXJyQlNTOworCVVJTlQxNglBU0xfY3VyckJTUzsKKwlVSU5UMTYJQU5MX2N1cnJGQzsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9jb21tc3F1YWxpdHlfdDsKKworLyotLSBJbmZvcm1hdGlvbiBSZWNvcmQ6IGRtYmNvbW1zcXVhbGl0eSAtLSovCit0eXBlZGVmIHN0cnVjdCBoZmEzODR4X2RibWNvbW1zcXVhbGl0eQoreworCVVJTlQxNglDUWRibV9jdXJyQlNTOworCVVJTlQxNglBU0xkYm1fY3VyckJTUzsKKwlVSU5UMTYJQU5MZGJtX2N1cnJGQzsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9kYm1jb21tc3F1YWxpdHlfdDsKKworLyotLSBJbmZvcm1hdGlvbiBSZWNvcmQ6IEN1cnJlbnRUeFJhdGUgLS0qLwordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9DdXJyZW50VHhSYXRlCit7CisJVUlOVDE2CUN1cnJlbnRUeFJhdGU7Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfQ3VycmVudFR4UmF0ZV90OworCisvKi0tIEluZm9ybWF0aW9uIFJlY29yZDogQ3VycmVudEJlYWNvbkludGVydmFsIC0tKi8KK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfQ3VycmVudEJlYWNvbkludGVydmFsCit7CisJVUlOVDE2CUN1cnJlbnRCZWFjb25JbnRlcnZhbDsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9DdXJyZW50QmVhY29uSW50ZXJ2YWxfdDsKKworLyotLSBJbmZvcm1hdGlvbiBSZWNvcmQ6IEN1cnJlbnRTY2FsZVRocmVzaG9sZHMgLS0qLwordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9DdXJyZW50U2NhbGVUaHJlc2hvbGRzCit7CisJVUlOVDE2CUVuZXJneURldGVjdFRocmVzaG9sZDsKKwlVSU5UMTYJQ2FycmllckRldGVjdFRocmVzaG9sZDsKKwlVSU5UMTYJRGVmZXJEZXRlY3RUaHJlc2hvbGQ7CisJVUlOVDE2CUNlbGxTZWFyY2hUaHJlc2hvbGQ7IC8qIFN0YXRpb25zIG9ubHkgKi8KKwlVSU5UMTYJRGVhZFNwb3RUaHJlc2hvbGQ7IC8qIFN0YXRpb25zIG9ubHkgKi8KK30gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9DdXJyZW50U2NhbGVUaHJlc2hvbGRzX3Q7CisKKy8qLS0gSW5mb3JtYXRpb24gUmVjb3JkOiBQcm90b2NvbFJzcFRpbWUgLS0qLwordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9Qcm90b2NvbFJzcFRpbWUKK3sKKwlVSU5UMTYJUHJvdG9jb2xSc3BUaW1lOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X1Byb3RvY29sUnNwVGltZV90OworCisvKi0tIEluZm9ybWF0aW9uIFJlY29yZDogU2hvcnRSZXRyeUxpbWl0IC0tKi8KK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfU2hvcnRSZXRyeUxpbWl0Cit7CisJVUlOVDE2CVNob3J0UmV0cnlMaW1pdDsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9TaG9ydFJldHJ5TGltaXRfdDsKKworLyotLSBJbmZvcm1hdGlvbiBSZWNvcmQ6IExvbmdSZXRyeUxpbWl0IC0tKi8KK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfTG9uZ1JldHJ5TGltaXQKK3sKKwlVSU5UMTYJTG9uZ1JldHJ5TGltaXQ7Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfTG9uZ1JldHJ5TGltaXRfdDsKKworLyotLSBJbmZvcm1hdGlvbiBSZWNvcmQ6IE1heFRyYW5zbWl0TGlmZXRpbWUgLS0qLwordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9NYXhUcmFuc21pdExpZmV0aW1lCit7CisJVUlOVDE2CU1heFRyYW5zbWl0TGlmZXRpbWU7Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfTWF4VHJhbnNtaXRMaWZldGltZV90OworCisvKi0tIEluZm9ybWF0aW9uIFJlY29yZDogTWF4UmVjZWl2ZUxpZmV0aW1lIC0tKi8KK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfTWF4UmVjZWl2ZUxpZmV0aW1lCit7CisJVUlOVDE2CU1heFJlY2VpdmVMaWZldGltZTsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9NYXhSZWNlaXZlTGlmZXRpbWVfdDsKKworLyotLSBJbmZvcm1hdGlvbiBSZWNvcmQ6IENGUG9sbGFibGUgLS0qLwordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9DRlBvbGxhYmxlCit7CisJVUlOVDE2CUNGUG9sbGFibGU7Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfQ0ZQb2xsYWJsZV90OworCisvKi0tIEluZm9ybWF0aW9uIFJlY29yZDogQXV0aGVudGljYXRpb25BbGdvcml0aG1zIC0tKi8KK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfQXV0aGVudGljYXRpb25BbGdvcml0aG1zCit7CisJVUlOVDE2CUF1dGhlbnRpY2F0aW9uVHlwZTsKKwlVSU5UMTYJVHlwZUVuYWJsZWQ7Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfQXV0aGVudGljYXRpb25BbGdvcml0aG1zX3Q7CisKKy8qLS0gSW5mb3JtYXRpb24gUmVjb3JkOiBBdXRoZW50aWNhdGlvbkFsZ29yaXRobXMKKyhkYXRhIG9ubHkgLS0qLwordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9BdXRoZW50aWNhdGlvbkFsZ29yaXRobXNfZGF0YQoreworCVVJTlQxNglBdXRoZW50aWNhdGlvblR5cGU7CisJVUlOVDE2CVR5cGVFbmFibGVkOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X0F1dGhlbnRpY2F0aW9uQWxnb3JpdGhtc19kYXRhX3Q7CisKKy8qLS0gSW5mb3JtYXRpb24gUmVjb3JkOiBQcml2YWN5T3B0aW9uSW1wbGVtZW50ZWQgLS0qLwordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9Qcml2YWN5T3B0aW9uSW1wbGVtZW50ZWQKK3sKKwlVSU5UMTYJUHJpdmFjeU9wdGlvbkltcGxlbWVudGVkOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X1ByaXZhY3lPcHRpb25JbXBsZW1lbnRlZF90OworCisvKi0tIEluZm9ybWF0aW9uIFJlY29yZDogT3duTUFDQWRkcmVzcyAtLSovCit0eXBlZGVmIHN0cnVjdCBoZmEzODR4X093bk1BQ0FkZHJlc3MKK3sKKwlVSU5UOAlPd25NQUNBZGRyZXNzWzZdOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X093bk1BQ0FkZHJlc3NfdDsKKworLyotLSBJbmZvcm1hdGlvbiBSZWNvcmQ6IFBDRkluZm8gLS0qLwordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9QQ0ZJbmZvCit7CisJVUlOVDE2CU1lZGl1bU9jY3VwYW5jeUxpbWl0OworCVVJTlQxNglDRlBQZXJpb2Q7CisJVUlOVDE2CUNGUE1heER1cmF0aW9uOworCVVJTlQxNglDRlBGbGFnczsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9QQ0ZJbmZvX3Q7CisKKy8qLS0gSW5mb3JtYXRpb24gUmVjb3JkOiBQQ0ZJbmZvIChkYXRhIHBvcnRpb24gb25seSkgLS0qLwordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9QQ0ZJbmZvX2RhdGEKK3sKKwlVSU5UMTYJTWVkaXVtT2NjdXBhbmN5TGltaXQ7CisJVUlOVDE2CUNGUFBlcmlvZDsKKwlVSU5UMTYJQ0ZQTWF4RHVyYXRpb247CisJVUlOVDE2CUNGUEZsYWdzOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X1BDRkluZm9fZGF0YV90OworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitJbmZvcm1hdGlvbiBSZWNvcmQgU3RydWN0dXJlczogTW9kZW0gSW5mb3JtYXRpb24gUmVjb3JkcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKi0tIEluZm9ybWF0aW9uIFJlY29yZDogUEhZVHlwZSAtLSovCit0eXBlZGVmIHN0cnVjdCBoZmEzODR4X1BIWVR5cGUKK3sKKwlVSU5UMTYJUEhZVHlwZTsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9QSFlUeXBlX3Q7CisKKy8qLS0gSW5mb3JtYXRpb24gUmVjb3JkOiBDdXJyZW50Q2hhbm5lbCAtLSovCit0eXBlZGVmIHN0cnVjdCBoZmEzODR4X0N1cnJlbnRDaGFubmVsCit7CisJVUlOVDE2CUN1cnJlbnRDaGFubmVsOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X0N1cnJlbnRDaGFubmVsX3Q7CisKKy8qLS0gSW5mb3JtYXRpb24gUmVjb3JkOiBDdXJyZW50UG93ZXJTdGF0ZSAtLSovCit0eXBlZGVmIHN0cnVjdCBoZmEzODR4X0N1cnJlbnRQb3dlclN0YXRlCit7CisJVUlOVDE2CUN1cnJlbnRQb3dlclN0YXRlOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X0N1cnJlbnRQb3dlclN0YXRlX3Q7CisKKy8qLS0gSW5mb3JtYXRpb24gUmVjb3JkOiBDQ0FNb2RlIC0tKi8KK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfQ0NBTW9kZQoreworCVVJTlQxNglDQ0FNb2RlOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X0NDQU1vZGVfdDsKKworLyotLSBJbmZvcm1hdGlvbiBSZWNvcmQ6IFN1cHBvcnRlZERhdGFSYXRlcyAtLSovCit0eXBlZGVmIHN0cnVjdCBoZmEzODR4X1N1cHBvcnRlZERhdGFSYXRlcworeworCVVJTlQ4CVN1cHBvcnRlZERhdGFSYXRlc1sxMF07Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfU3VwcG9ydGVkRGF0YVJhdGVzX3Q7CisKKy8qLS0gSW5mb3JtYXRpb24gUmVjb3JkOiBMRk9TdGF0dXMgLS0qLwordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9MRk9TdGF0dXMKK3sKKwlVSU5UMTYgIFRlc3RSZXN1bHRzOworCVVJTlQxNiAgTEZPUmVzdWx0OworCVVJTlQxNiAgVlJIRk9SZXN1bHQ7Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfTEZPU3RhdHVzX3Q7CisKKyNkZWZpbmUgSEZBMzg0eF9URVNUUkVTVUxUX0FMTFBBU1NFRCAgICBCSVQwCisjZGVmaW5lIEhGQTM4NHhfVEVTVFJFU1VMVF9MRk9fRkFJTCAgICAgQklUMQorI2RlZmluZSBIRkEzODR4X1RFU1RSRVNVTFRfVlJfSEYwX0ZBSUwgIEJJVDIKKyNkZWZpbmUgSEZBMzg0eF9IT1NUX0ZJUk1fQ09PUkRJTkFURSAgICBCSVQ3CisjZGVmaW5lIEhGQTM4NHhfVEVTVFJFU1VMVF9DT09SRElOQVRFICAgQklUMTUKKworLyotLSBJbmZvcm1hdGlvbiBSZWNvcmQ6IExFRENvbnRyb2wgLS0qLwordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9MRURDb250cm9sCit7CisJVUlOVDE2ICBzZWFyY2hpbmdfb247CisJVUlOVDE2ICBzZWFyY2hpbmdfb2ZmOworCVVJTlQxNiAgYXNzb2Nfb247CisJVUlOVDE2ICBhc3NvY19vZmY7CisJVUlOVDE2ICBhY3Rpdml0eTsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9MRURDb250cm9sX3Q7CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgICAgICAgICAgRlJBTUUgREVTQ1JJUFRPUlMgQU5EIEZSQU1FIFNUUlVDVFVSRVMKKworRlJBTUUgREVTQ1JJUFRPUlM6IE9mZnNldHMKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQ29udHJvbCBJbmZvIChvZmZzZXQgNDQtNTEpCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZGVmaW5lCQlIRkEzODR4X0ZEX1NUQVRVU19PRkYJCQkoKFVJTlQxNikweDQ0KQorI2RlZmluZQkJSEZBMzg0eF9GRF9USU1FX09GRgkJCSgoVUlOVDE2KTB4NDYpCisjZGVmaW5lCQlIRkEzODR4X0ZEX1NXU1VQUE9SVF9PRkYJCSgoVUlOVDE2KTB4NEEpCisjZGVmaW5lCQlIRkEzODR4X0ZEX1NJTEVOQ0VfT0ZGCQkJKChVSU5UMTYpMHg0QSkKKyNkZWZpbmUJCUhGQTM4NHhfRkRfU0lHTkFMX09GRgkJCSgoVUlOVDE2KTB4NEIpCisjZGVmaW5lCQlIRkEzODR4X0ZEX1JBVEVfT0ZGCQkJKChVSU5UMTYpMHg0QykKKyNkZWZpbmUJCUhGQTM4NHhfRkRfUlhGTE9XX09GRgkJCSgoVUlOVDE2KTB4NEQpCisjZGVmaW5lCQlIRkEzODR4X0ZEX1JFU0VSVkVEX09GRgkJCSgoVUlOVDE2KTB4NEUpCisjZGVmaW5lCQlIRkEzODR4X0ZEX1RYQ09OVFJPTF9PRkYJCSgoVUlOVDE2KTB4NTApCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCis4MDIuMTEgSGVhZGVyIChvZmZzZXQgNTItNkIpCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZGVmaW5lCQlIRkEzODR4X0ZEX0ZSQU1FQ09OVFJPTF9PRkYJCSgoVUlOVDE2KTB4NTIpCisjZGVmaW5lCQlIRkEzODR4X0ZEX0RVUkFUSU9OSURfT0ZGCQkoKFVJTlQxNikweDU0KQorI2RlZmluZQkJSEZBMzg0eF9GRF9BRERSRVNTMV9PRkYJCQkoKFVJTlQxNikweDU2KQorI2RlZmluZQkJSEZBMzg0eF9GRF9BRERSRVNTMl9PRkYJCQkoKFVJTlQxNikweDVDKQorI2RlZmluZQkJSEZBMzg0eF9GRF9BRERSRVNTM19PRkYJCQkoKFVJTlQxNikweDYyKQorI2RlZmluZQkJSEZBMzg0eF9GRF9TRVFDT05UUk9MX09GRgkJKChVSU5UMTYpMHg2OCkKKyNkZWZpbmUJCUhGQTM4NHhfRkRfQUREUkVTUzRfT0ZGCQkJKChVSU5UMTYpMHg2QSkKKyNkZWZpbmUJCUhGQTM4NHhfRkRfREFUQUxFTl9PRkYJCQkoKFVJTlQxNikweDcwKQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorODAyLjMgSGVhZGVyIChvZmZzZXQgNzItN0YpCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZGVmaW5lCQlIRkEzODR4X0ZEX0RFU1RBRERSRVNTX09GRgkJKChVSU5UMTYpMHg3MikKKyNkZWZpbmUJCUhGQTM4NHhfRkRfU1JDQUREUkVTU19PRkYJCSgoVUlOVDE2KTB4NzgpCisjZGVmaW5lCQlIRkEzODR4X0ZEX0RBVEFMRU5HVEhfT0ZGCQkoKFVJTlQxNikweDdFKQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitGUkFNRSBTVFJVQ1RVUkVTOiBDb21tdW5pY2F0aW9uIEZyYW1lcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQ29tbXVuaWNhdGlvbiBGcmFtZXM6IFRyYW5zbWl0IEZyYW1lcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyotLSBDb21tdW5pY2F0aW9uIEZyYW1lOiBUcmFuc21pdCBGcmFtZSBTdHJ1Y3R1cmUgLS0qLwordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF90eF9mcmFtZQoreworCVVJTlQxNglzdGF0dXM7CisJVUlOVDE2CXJlc2VydmVkMTsKKwlVSU5UMTYJcmVzZXJ2ZWQyOworCVVJTlQzMglzd19zdXBwb3J0OworCVVJTlQ4CXR4X3JldHJ5Y291bnQ7CisJVUlOVDggICB0eF9yYXRlOworCVVJTlQxNgl0eF9jb250cm9sOworCisJLyotLSA4MDIuMTEgSGVhZGVyIEluZm9ybWF0aW9uIC0tKi8KKworCVVJTlQxNglmcmFtZV9jb250cm9sOworCVVJTlQxNglkdXJhdGlvbl9pZDsKKwlVSU5UOAlhZGRyZXNzMVs2XTsKKwlVSU5UOAlhZGRyZXNzMls2XTsKKwlVSU5UOAlhZGRyZXNzM1s2XTsKKwlVSU5UMTYJc2VxdWVuY2VfY29udHJvbDsKKwlVSU5UOAlhZGRyZXNzNFs2XTsKKwlVSU5UMTYJZGF0YV9sZW47IC8qIGxpdHRsZSBlbmRpYW4gZm9ybWF0ICovCisKKwkvKi0tIDgwMi4zIEhlYWRlciBJbmZvcm1hdGlvbiAtLSovCisKKwlVSU5UOAlkZXN0X2FkZHJbNl07CisJVUlOVDgJc3JjX2FkZHJbNl07CisJVUlOVDE2CWRhdGFfbGVuZ3RoOyAvKiBiaWcgZW5kaWFuIGZvcm1hdCAqLworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X3R4X2ZyYW1lX3Q7CisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitDb21tdW5pY2F0aW9uIEZyYW1lczogRmllbGQgTWFza3MgZm9yIFRyYW5zbWl0IEZyYW1lcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyotLSBTdGF0dXMgRmllbGQgLS0qLworI2RlZmluZQkJSEZBMzg0eF9UWFNUQVRVU19BQ0tFUlIJCQkoKFVJTlQxNilCSVQ1KQorI2RlZmluZQkJSEZBMzg0eF9UWFNUQVRVU19GT1JNRVJSCQkoKFVJTlQxNilCSVQzKQorI2RlZmluZQkJSEZBMzg0eF9UWFNUQVRVU19ESVNDT04JCQkoKFVJTlQxNilCSVQyKQorI2RlZmluZQkJSEZBMzg0eF9UWFNUQVRVU19BR0VERVJSCQkoKFVJTlQxNilCSVQxKQorI2RlZmluZQkJSEZBMzg0eF9UWFNUQVRVU19SRVRSWUVSUgkJKChVSU5UMTYpQklUMCkKKy8qLS0gVHJhbnNtaXQgQ29udHJvbCBGaWVsZCAtLSovCisjZGVmaW5lCQlIRkEzODR4X1RYX0NGUE9MTAkJCSgoVUlOVDE2KUJJVDEyKQorI2RlZmluZQkJSEZBMzg0eF9UWF9QUlNUCQkJCSgoVUlOVDE2KUJJVDExKQorI2RlZmluZQkJSEZBMzg0eF9UWF9NQUNQT1JUCQkJKChVSU5UMTYpKEJJVDEwIHwgQklUOSB8IEJJVDgpKQorI2RlZmluZQkJSEZBMzg0eF9UWF9OT0VOQ1JZUFQJCQkoKFVJTlQxNilCSVQ3KQorI2RlZmluZQkJSEZBMzg0eF9UWF9SRVRSWVNUUkFUCQkJKChVSU5UMTYpKEJJVDYgfCBCSVQ1KSkKKyNkZWZpbmUJCUhGQTM4NHhfVFhfU1RSVUNUWVBFCQkJKChVSU5UMTYpKEJJVDQgfCBCSVQzKSkKKyNkZWZpbmUJCUhGQTM4NHhfVFhfVFhFWAkJCQkoKFVJTlQxNilCSVQyKQorI2RlZmluZQkJSEZBMzg0eF9UWF9UWE9LCQkJCSgoVUlOVDE2KUJJVDEpCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitDb21tdW5pY2F0aW9uIEZyYW1lczogVGVzdC9HZXQvU2V0IEZpZWxkIFZhbHVlcyBmb3IgVHJhbnNtaXQgRnJhbWVzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKi0tIFN0YXR1cyBGaWVsZCAtLSovCisjZGVmaW5lIEhGQTM4NHhfVFhTVEFUVVNfSVNFUlJPUih2KQlcCisJKCgoVUlOVDE2KSh2KSkmXAorCShIRkEzODR4X1RYU1RBVFVTX0FDS0VSUnxIRkEzODR4X1RYU1RBVFVTX0ZPUk1FUlJ8XAorCUhGQTM4NHhfVFhTVEFUVVNfRElTQ09OfEhGQTM4NHhfVFhTVEFUVVNfQUdFREVSUnxcCisJSEZBMzg0eF9UWFNUQVRVU19SRVRSWUVSUikpCisKKyNkZWZpbmUJSEZBMzg0eF9UWFNUQVRVU19JU0FDS0VSUih2KQkoKFVJTlQxNikoKChVSU5UMTYpKHYpKSAmIEhGQTM4NHhfVFhTVEFUVVNfQUNLRVJSKSkKKyNkZWZpbmUJSEZBMzg0eF9UWFNUQVRVU19JU0ZPUk1FUlIodikJKChVSU5UMTYpKCgoVUlOVDE2KSh2KSkgJiBIRkEzODR4X1RYU1RBVFVTX0ZPUk1FUlIpKQorI2RlZmluZQlIRkEzODR4X1RYU1RBVFVTX0lTRElTQ09OKHYpCSgoVUlOVDE2KSgoKFVJTlQxNikodikpICYgSEZBMzg0eF9UWFNUQVRVU19ESVNDT04pKQorI2RlZmluZQlIRkEzODR4X1RYU1RBVFVTX0lTQUdFREVSUih2KQkoKFVJTlQxNikoKChVSU5UMTYpKHYpKSAmIEhGQTM4NHhfVFhTVEFUVVNfQUdFREVSUikpCisjZGVmaW5lCUhGQTM4NHhfVFhTVEFUVVNfSVNSRVRSWUVSUih2KQkoKFVJTlQxNikoKChVSU5UMTYpKHYpKSAmIEhGQTM4NHhfVFhTVEFUVVNfUkVUUllFUlIpKQorCisjZGVmaW5lCUhGQTM4NHhfVFhfR0VUKHYsbSxzKQkJKCgoKFVJTlQxNikodikpJigoVUlOVDE2KShtKSkpPj4oKFVJTlQxNikocykpKQorI2RlZmluZQlIRkEzODR4X1RYX1NFVCh2LG0scykJCSgoKChVSU5UMTYpKHYpKTw8KChVSU5UMTYpKHMpKSkmKChVSU5UMTYpKG0pKSkKKworI2RlZmluZQlIRkEzODR4X1RYX0NGUE9MTF9HRVQodikJSEZBMzg0eF9UWF9HRVQodiwgSEZBMzg0eF9UWF9DRlBPTEwsMTIpCisjZGVmaW5lCUhGQTM4NHhfVFhfQ0ZQT0xMX1NFVCh2KQlIRkEzODR4X1RYX1NFVCh2LCBIRkEzODR4X1RYX0NGUE9MTCwxMikKKyNkZWZpbmUJSEZBMzg0eF9UWF9QUlNUX0dFVCh2KQkJSEZBMzg0eF9UWF9HRVQodiwgSEZBMzg0eF9UWF9QUlNULDExKQorI2RlZmluZQlIRkEzODR4X1RYX1BSU1RfU0VUKHYpCQlIRkEzODR4X1RYX1NFVCh2LCBIRkEzODR4X1RYX1BSU1QsMTEpCisjZGVmaW5lCUhGQTM4NHhfVFhfTUFDUE9SVF9HRVQodikJSEZBMzg0eF9UWF9HRVQodiwgSEZBMzg0eF9UWF9NQUNQT1JULCA4KQorI2RlZmluZQlIRkEzODR4X1RYX01BQ1BPUlRfU0VUKHYpCUhGQTM4NHhfVFhfU0VUKHYsIEhGQTM4NHhfVFhfTUFDUE9SVCwgOCkKKyNkZWZpbmUJSEZBMzg0eF9UWF9OT0VOQ1JZUFRfR0VUKHYpCUhGQTM4NHhfVFhfR0VUKHYsIEhGQTM4NHhfVFhfTk9FTkNSWVBULCA3KQorI2RlZmluZQlIRkEzODR4X1RYX05PRU5DUllQVF9TRVQodikJSEZBMzg0eF9UWF9TRVQodiwgSEZBMzg0eF9UWF9OT0VOQ1JZUFQsIDcpCisjZGVmaW5lCUhGQTM4NHhfVFhfUkVUUllTVFJBVF9HRVQodikJSEZBMzg0eF9UWF9HRVQodiwgSEZBMzg0eF9UWF9SRVRSWVNUUkFULCA1KQorI2RlZmluZQlIRkEzODR4X1RYX1JFVFJZU1RSQVRfU0VUKHYpCUhGQTM4NHhfVFhfU0VUKHYsIEhGQTM4NHhfVFhfUkVUUllTVFJBVCwgNSkKKyNkZWZpbmUJSEZBMzg0eF9UWF9TVFJVQ1RZUEVfR0VUKHYpCUhGQTM4NHhfVFhfR0VUKHYsIEhGQTM4NHhfVFhfU1RSVUNUWVBFLCAzKQorI2RlZmluZQlIRkEzODR4X1RYX1NUUlVDVFlQRV9TRVQodikJSEZBMzg0eF9UWF9TRVQodiwgSEZBMzg0eF9UWF9TVFJVQ1RZUEUsIDMpCisjZGVmaW5lCUhGQTM4NHhfVFhfVFhFWF9HRVQodikJCUhGQTM4NHhfVFhfR0VUKHYsIEhGQTM4NHhfVFhfVFhFWCwgMikKKyNkZWZpbmUJSEZBMzg0eF9UWF9UWEVYX1NFVCh2KQkJSEZBMzg0eF9UWF9TRVQodiwgSEZBMzg0eF9UWF9UWEVYLCAyKQorI2RlZmluZQlIRkEzODR4X1RYX1RYT0tfR0VUKHYpCQlIRkEzODR4X1RYX0dFVCh2LCBIRkEzODR4X1RYX1RYT0ssIDEpCisjZGVmaW5lCUhGQTM4NHhfVFhfVFhPS19TRVQodikJCUhGQTM4NHhfVFhfU0VUKHYsIEhGQTM4NHhfVFhfVFhPSywgMSkKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0NvbW11bmljYXRpb24gRnJhbWVzOiBSZWNlaXZlIEZyYW1lcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyotLSBDb21tdW5pY2F0aW9uIEZyYW1lOiBSZWNlaXZlIEZyYW1lIFN0cnVjdHVyZSAtLSovCit0eXBlZGVmIHN0cnVjdCBoZmEzODR4X3J4X2ZyYW1lCit7CisJLyotLSBNQUMgcnggZGVzY3JpcHRvciAoaGZhMzg0eCBieXRlIG9yZGVyKSAtLSovCisJVUlOVDE2CXN0YXR1czsKKwlVSU5UMzIJdGltZTsKKwlVSU5UOAlzaWxlbmNlOworCVVJTlQ4CXNpZ25hbDsKKwlVSU5UOAlyYXRlOworCVVJTlQ4CXJ4X2Zsb3c7CisJVUlOVDE2CXJlc2VydmVkMTsKKwlVSU5UMTYJcmVzZXJ2ZWQyOworCisJLyotLSA4MDIuMTEgSGVhZGVyIEluZm9ybWF0aW9uICg4MDIuMTEgYnl0ZSBvcmRlcikgLS0qLworCVVJTlQxNglmcmFtZV9jb250cm9sOworCVVJTlQxNglkdXJhdGlvbl9pZDsKKwlVSU5UOAlhZGRyZXNzMVs2XTsKKwlVSU5UOAlhZGRyZXNzMls2XTsKKwlVSU5UOAlhZGRyZXNzM1s2XTsKKwlVSU5UMTYJc2VxdWVuY2VfY29udHJvbDsKKwlVSU5UOAlhZGRyZXNzNFs2XTsKKwlVSU5UMTYJZGF0YV9sZW47IC8qIGhmYTM4NHggKGxpdHRsZSBlbmRpYW4pIGZvcm1hdCAqLworCisJLyotLSA4MDIuMyBIZWFkZXIgSW5mb3JtYXRpb24gLS0qLworCVVJTlQ4CWRlc3RfYWRkcls2XTsKKwlVSU5UOAlzcmNfYWRkcls2XTsKKwlVSU5UMTYJZGF0YV9sZW5ndGg7IC8qIElFRUU/IChiaWcgZW5kaWFuKSBmb3JtYXQgKi8KK30gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9yeF9mcmFtZV90OworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQ29tbXVuaWNhdGlvbiBGcmFtZXM6IEZpZWxkIE1hc2tzIGZvciBSZWNlaXZlIEZyYW1lcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyotLSBPZmZzZXRzIC0tLS0tLS0tKi8KKyNkZWZpbmUJCUhGQTM4NHhfUlhfREFUQV9MRU5fT0ZGCQkJKChVSU5UMTYpNDQpCisjZGVmaW5lCQlIRkEzODR4X1JYXzgwMjExSERSX09GRgkJCSgoVUlOVDE2KTE0KQorI2RlZmluZQkJSEZBMzg0eF9SWF9EQVRBX09GRgkJCSgoVUlOVDE2KTYwKQorCisvKi0tIFN0YXR1cyBGaWVsZHMgLS0qLworI2RlZmluZQkJSEZBMzg0eF9SWFNUQVRVU19NU0dUWVBFCQkoKFVJTlQxNikoQklUMTUgfCBCSVQxNCB8IEJJVDEzKSkKKyNkZWZpbmUJCUhGQTM4NHhfUlhTVEFUVVNfTUFDUE9SVAkJKChVSU5UMTYpKEJJVDEwIHwgQklUOSB8IEJJVDgpKQorI2RlZmluZQkJSEZBMzg0eF9SWFNUQVRVU19VTkRFQ1IJCQkoKFVJTlQxNilCSVQxKQorI2RlZmluZQkJSEZBMzg0eF9SWFNUQVRVU19GQ1NFUlIJCQkoKFVJTlQxNilCSVQwKQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQ29tbXVuaWNhdGlvbiBGcmFtZXM6IFRlc3QvR2V0L1NldCBGaWVsZCBWYWx1ZXMgZm9yIFJlY2VpdmUgRnJhbWVzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZGVmaW5lCQlIRkEzODR4X1JYU1RBVFVTX01TR1RZUEVfR0VUKHZhbHVlKQkoKFVJTlQxNikoKCgoVUlOVDE2KSh2YWx1ZSkpICYgSEZBMzg0eF9SWFNUQVRVU19NU0dUWVBFKSA+PiAxMykpCisjZGVmaW5lCQlIRkEzODR4X1JYU1RBVFVTX01TR1RZUEVfU0VUKHZhbHVlKQkoKFVJTlQxNikoKChVSU5UMTYpKHZhbHVlKSkgPDwgMTMpKQorI2RlZmluZQkJSEZBMzg0eF9SWFNUQVRVU19NQUNQT1JUX0dFVCh2YWx1ZSkJKChVSU5UMTYpKCgoKFVJTlQxNikodmFsdWUpKSAmIEhGQTM4NHhfUlhTVEFUVVNfTUFDUE9SVCkgPj4gOCkpCisjZGVmaW5lCQlIRkEzODR4X1JYU1RBVFVTX01BQ1BPUlRfU0VUKHZhbHVlKQkoKFVJTlQxNikoKChVSU5UMTYpKHZhbHVlKSkgPDwgOCkpCisjZGVmaW5lCQlIRkEzODR4X1JYU1RBVFVTX0lTVU5ERUNSKHZhbHVlKQkoKFVJTlQxNikoKChVSU5UMTYpKHZhbHVlKSkgJiBIRkEzODR4X1JYU1RBVFVTX1VOREVDUikpCisjZGVmaW5lCQlIRkEzODR4X1JYU1RBVFVTX0lTRkNTRVJSKHZhbHVlKQkoKFVJTlQxNikoKChVSU5UMTYpKHZhbHVlKSkgJiBIRkEzODR4X1JYU1RBVFVTX0ZDU0VSUikpCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgRlJBTUUgU1RSVUNUVVJFUzogSW5mb3JtYXRpb24gVHlwZXMgYW5kIEluZm9ybWF0aW9uIEZyYW1lIFN0cnVjdHVyZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0luZm9ybWF0aW9uIFR5cGVzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZGVmaW5lCQlIRkEzODR4X0lUX0hBTkRPVkVSQUREUgkJCSgoVUlOVDE2KTB4RjAwMFVMKQorI2RlZmluZQkJSEZBMzg0eF9JVF9IQU5ET1ZFUkRFQVVUSEFERFJFU1MJKChVSU5UMTYpMHhGMDAxVUwpLy9BUCAxLjMuNworI2RlZmluZQkJSEZBMzg0eF9JVF9DT01NVEFMTElFUwkJCSgoVUlOVDE2KTB4RjEwMFVMKQorI2RlZmluZQkJSEZBMzg0eF9JVF9TQ0FOUkVTVUxUUwkJCSgoVUlOVDE2KTB4RjEwMVVMKQorI2RlZmluZQkJSEZBMzg0eF9JVF9DSElORk9SRVNVTFRTCQkoKFVJTlQxNikweEYxMDJVTCkKKyNkZWZpbmUJCUhGQTM4NHhfSVRfSE9TVFNDQU5SRVNVTFRTCQkoKFVJTlQxNikweEYxMDNVTCkKKyNkZWZpbmUJCUhGQTM4NHhfSVRfTElOS1NUQVRVUwkJCSgoVUlOVDE2KTB4RjIwMFVMKQorI2RlZmluZQkJSEZBMzg0eF9JVF9BU1NPQ1NUQVRVUwkJCSgoVUlOVDE2KTB4RjIwMVVMKQorI2RlZmluZQkJSEZBMzg0eF9JVF9BVVRIUkVRCQkJKChVSU5UMTYpMHhGMjAyVUwpCisjZGVmaW5lCQlIRkEzODR4X0lUX1BTVVNFUkNOVAkJCSgoVUlOVDE2KTB4RjIwM1VMKQorI2RlZmluZQkJSEZBMzg0eF9JVF9LRVlJRENIQU5HRUQJCQkoKFVJTlQxNikweEYyMDRVTCkKKyNkZWZpbmUJCUhGQTM4NHhfSVRfQVNTT0NSRVEgICAgCQkJKChVSU5UMTYpMHhGMjA1VUwpCisjZGVmaW5lCQlIRkEzODR4X0lUX01JQ0ZBSUxVUkUgIAkJCSgoVUlOVDE2KTB4RjIwNlVMKQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitJbmZvcm1hdGlvbiBGcmFtZXMgU3RydWN0dXJlcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorSW5mb3JtYXRpb24gRnJhbWVzOiBOb3RpZmljYXRpb24gRnJhbWUgU3RydWN0dXJlcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyotLSAgTm90aWZpY2F0aW9uIEZyYW1lLE1BQyBNZ210OiBIYW5kb3ZlciBBZGRyZXNzIC0tKi8KK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfSGFuZG92ZXJBZGRyCit7CisJVUlOVDE2CWZyYW1lbGVuOworCVVJTlQxNglpbmZvdHlwZTsKKwlVSU5UOAloYW5kb3Zlcl9hZGRyW1dMQU5fQlNTSURfTEVOXTsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9IYW5kb3ZlckFkZHJfdDsKKworLyotLSAgSW5xdWlyeSBGcmFtZSwgRGlhZ25vc2U6IENvbW11bmljYXRpb24gVGFsbGllcyAtLSovCit0eXBlZGVmIHN0cnVjdCBoZmEzODR4X0NvbW1UYWxsaWVzMTYKK3sKKwlVSU5UMTYJdHh1bmljYXN0ZnJhbWVzOworCVVJTlQxNgl0eG11bHRpY2FzdGZyYW1lczsKKwlVSU5UMTYJdHhmcmFnbWVudHM7CisJVUlOVDE2CXR4dW5pY2FzdG9jdGV0czsKKwlVSU5UMTYJdHhtdWx0aWNhc3RvY3RldHM7CisJVUlOVDE2CXR4ZGVmZXJyZWR0cmFuczsKKwlVSU5UMTYJdHhzaW5nbGVyZXRyeWZyYW1lczsKKwlVSU5UMTYJdHhtdWx0aXBsZXJldHJ5ZnJhbWVzOworCVVJTlQxNgl0eHJldHJ5bGltaXRleGNlZWRlZDsKKwlVSU5UMTYJdHhkaXNjYXJkczsKKwlVSU5UMTYJcnh1bmljYXN0ZnJhbWVzOworCVVJTlQxNglyeG11bHRpY2FzdGZyYW1lczsKKwlVSU5UMTYJcnhmcmFnbWVudHM7CisJVUlOVDE2CXJ4dW5pY2FzdG9jdGV0czsKKwlVSU5UMTYJcnhtdWx0aWNhc3RvY3RldHM7CisJVUlOVDE2CXJ4ZmNzZXJyb3JzOworCVVJTlQxNglyeGRpc2NhcmRzbm9idWZmZXI7CisJVUlOVDE2CXR4ZGlzY2FyZHN3cm9uZ3NhOworCVVJTlQxNglyeGRpc2NhcmRzd2VwdW5kZWNyOworCVVJTlQxNglyeG1zZ2lubXNnZnJhZzsKKwlVSU5UMTYJcnhtc2dpbmJhZG1zZ2ZyYWc7Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfQ29tbVRhbGxpZXMxNl90OworCit0eXBlZGVmIHN0cnVjdCBoZmEzODR4X0NvbW1UYWxsaWVzMzIKK3sKKwlVSU5UMzIJdHh1bmljYXN0ZnJhbWVzOworCVVJTlQzMgl0eG11bHRpY2FzdGZyYW1lczsKKwlVSU5UMzIJdHhmcmFnbWVudHM7CisJVUlOVDMyCXR4dW5pY2FzdG9jdGV0czsKKwlVSU5UMzIJdHhtdWx0aWNhc3RvY3RldHM7CisJVUlOVDMyCXR4ZGVmZXJyZWR0cmFuczsKKwlVSU5UMzIJdHhzaW5nbGVyZXRyeWZyYW1lczsKKwlVSU5UMzIJdHhtdWx0aXBsZXJldHJ5ZnJhbWVzOworCVVJTlQzMgl0eHJldHJ5bGltaXRleGNlZWRlZDsKKwlVSU5UMzIJdHhkaXNjYXJkczsKKwlVSU5UMzIJcnh1bmljYXN0ZnJhbWVzOworCVVJTlQzMglyeG11bHRpY2FzdGZyYW1lczsKKwlVSU5UMzIJcnhmcmFnbWVudHM7CisJVUlOVDMyCXJ4dW5pY2FzdG9jdGV0czsKKwlVSU5UMzIJcnhtdWx0aWNhc3RvY3RldHM7CisJVUlOVDMyCXJ4ZmNzZXJyb3JzOworCVVJTlQzMglyeGRpc2NhcmRzbm9idWZmZXI7CisJVUlOVDMyCXR4ZGlzY2FyZHN3cm9uZ3NhOworCVVJTlQzMglyeGRpc2NhcmRzd2VwdW5kZWNyOworCVVJTlQzMglyeG1zZ2lubXNnZnJhZzsKKwlVSU5UMzIJcnhtc2dpbmJhZG1zZ2ZyYWc7Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfQ29tbVRhbGxpZXMzMl90OworCisvKi0tICBJbnF1aXJ5IEZyYW1lLCBEaWFnbm9zZTogU2NhbiBSZXN1bHRzICYgU3ViZmllbGRzLS0qLwordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9TY2FuUmVzdWx0U3ViCit7CisJVUlOVDE2CWNoaWQ7CisJVUlOVDE2CWFubDsKKwlVSU5UMTYJc2w7CisJVUlOVDgJYnNzaWRbV0xBTl9CU1NJRF9MRU5dOworCVVJTlQxNgliY25pbnQ7CisJVUlOVDE2CWNhcGluZm87CisJaGZhMzg0eF9ieXRlc3RyMzJfdAlzc2lkOworCVVJTlQ4CXN1cHByYXRlc1sxMF07IC8qIDgwMi4xMSBpbmZvIGVsZW1lbnQgKi8KKwlVSU5UMTYJcHJvYmVyZXNwX3JhdGU7Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfU2NhblJlc3VsdFN1Yl90OworCit0eXBlZGVmIHN0cnVjdCBoZmEzODR4X1NjYW5SZXN1bHQKK3sKKwlVSU5UMTYJcnN2ZDsKKwlVSU5UMTYJc2NhbnJlYXNvbjsKKwloZmEzODR4X1NjYW5SZXN1bHRTdWJfdAorCQlyZXN1bHRbSEZBMzg0eF9TQ0FOUkVTVUxUX01BWF07Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfU2NhblJlc3VsdF90OworCisvKi0tICBJbnF1aXJ5IEZyYW1lLCBEaWFnbm9zZTogQ2hJbmZvIFJlc3VsdHMgJiBTdWJmaWVsZHMtLSovCit0eXBlZGVmIHN0cnVjdCBoZmEzODR4X0NoSW5mb1Jlc3VsdFN1YgoreworCVVJTlQxNgljaGlkOworCVVJTlQxNglhbmw7CisJVUlOVDE2CXBubDsKKwlVSU5UMTYJYWN0aXZlOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X0NoSW5mb1Jlc3VsdFN1Yl90OworCisjZGVmaW5lIEhGQTM4NHhfQ0hJTkZPUkVTVUxUX0JTU0FDVElWRQlCSVQwCisjZGVmaW5lIEhGQTM4NHhfQ0hJTkZPUkVTVUxUX1BDRkFDVElWRQlCSVQxCisKK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfQ2hJbmZvUmVzdWx0Cit7CisJVUlOVDE2CXNjYW5jaGFubmVsczsKKwloZmEzODR4X0NoSW5mb1Jlc3VsdFN1Yl90CisJCXJlc3VsdFtIRkEzODR4X0NISU5GT1JFU1VMVF9NQVhdOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X0NoSW5mb1Jlc3VsdF90OworCisvKi0tICBJbnF1aXJ5IEZyYW1lLCBEaWFnbm9zZTogSG9zdCBTY2FuIFJlc3VsdHMgJiBTdWJmaWVsZHMtLSovCit0eXBlZGVmIHN0cnVjdCBoZmEzODR4X0hTY2FuUmVzdWx0U3ViCit7CisJVUlOVDE2CWNoaWQ7CisJVUlOVDE2CWFubDsKKwlVSU5UMTYJc2w7CisJVUlOVDgJYnNzaWRbV0xBTl9CU1NJRF9MRU5dOworCVVJTlQxNgliY25pbnQ7CisJVUlOVDE2CWNhcGluZm87CisJaGZhMzg0eF9ieXRlc3RyMzJfdAlzc2lkOworCVVJTlQ4CXN1cHByYXRlc1sxMF07IC8qIDgwMi4xMSBpbmZvIGVsZW1lbnQgKi8KKwlVSU5UMTYJcHJvYmVyZXNwX3JhdGU7CisJVUlOVDE2CWF0aW07Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfSFNjYW5SZXN1bHRTdWJfdDsKKwordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9IU2NhblJlc3VsdAoreworCVVJTlQxNglucmVzdWx0OworCVVJTlQxNglyc3ZkOworCWhmYTM4NHhfSFNjYW5SZXN1bHRTdWJfdAorCQlyZXN1bHRbSEZBMzg0eF9IU0NBTlJFU1VMVF9NQVhdOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X0hTY2FuUmVzdWx0X3Q7CisKKy8qLS0gIFVuc29saWNpdGVkIEZyYW1lLCBNQUMgTWdtdDogTGlua1N0YXR1cyAtLSovCisKKyNkZWZpbmUgSEZBMzg0eF9MSU5LX05PVENPTk5FQ1RFRAkoKFVJTlQxNikwKQorI2RlZmluZSBIRkEzODR4X0xJTktfQ09OTkVDVEVECQkoKFVJTlQxNikxKQorI2RlZmluZSBIRkEzODR4X0xJTktfRElTQ09OTkVDVEVECSgoVUlOVDE2KTIpCisjZGVmaW5lIEhGQTM4NHhfTElOS19BUF9DSEFOR0UJCSgoVUlOVDE2KTMpCisjZGVmaW5lIEhGQTM4NHhfTElOS19BUF9PVVRPRlJBTkdFCSgoVUlOVDE2KTQpCisjZGVmaW5lIEhGQTM4NHhfTElOS19BUF9JTlJBTkdFCQkoKFVJTlQxNik1KQorI2RlZmluZSBIRkEzODR4X0xJTktfQVNTT0NGQUlMCQkoKFVJTlQxNik2KQorCit0eXBlZGVmIHN0cnVjdCBoZmEzODR4X0xpbmtTdGF0dXMKK3sKKwlVSU5UMTYJbGlua3N0YXR1czsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9MaW5rU3RhdHVzX3Q7CisKKworLyotLSAgVW5zb2xpY2l0ZWQgRnJhbWUsIE1BQyBNZ210OiBBc3NvY2lhdGlvblN0YXR1cyAoLS0qLworCisjZGVmaW5lIEhGQTM4NHhfQVNTT0NTVEFUVVNfU1RBQVNTT0MJKChVSU5UMTYpMSkKKyNkZWZpbmUgSEZBMzg0eF9BU1NPQ1NUQVRVU19SRUFTU09DCSgoVUlOVDE2KTIpCisjZGVmaW5lIEhGQTM4NHhfQVNTT0NTVEFUVVNfRElTQVNTT0MJKChVSU5UMTYpMykKKyNkZWZpbmUgSEZBMzg0eF9BU1NPQ1NUQVRVU19BU1NPQ0ZBSUwJKChVSU5UMTYpNCkKKyNkZWZpbmUgSEZBMzg0eF9BU1NPQ1NUQVRVU19BVVRIRkFJTAkoKFVJTlQxNik1KQorCit0eXBlZGVmIHN0cnVjdCBoZmEzODR4X0Fzc29jU3RhdHVzCit7CisJVUlOVDE2CWFzc29jc3RhdHVzOworCVVJTlQ4CXN0YV9hZGRyW1dMQU5fQUREUl9MRU5dOworCS8qIG9sZF9hcF9hZGRyIGlzIG9ubHkgdmFsaWQgaWYgYXNzb2NzdGF0dXMgPT0gMiAqLworCVVJTlQ4CW9sZF9hcF9hZGRyW1dMQU5fQUREUl9MRU5dOworCVVJTlQxNglyZWFzb247CisJVUlOVDE2CXJlc2VydmVkOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X0Fzc29jU3RhdHVzX3Q7CisKKy8qLS0gIFVuc29saWNpdGVkIEZyYW1lLCBNQUMgTWdtdDogQXV0aFJlcXVlc3QgKEFQIE9ubHkpIC0tKi8KKwordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9BdXRoUmVxdWVzdAoreworCVVJTlQ4CXN0YV9hZGRyW1dMQU5fQUREUl9MRU5dOworCVVJTlQxNglhbGdvcml0aG07Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfQXV0aFJlcV90OworCisvKi0tICBVbnNvbGljaXRlZCBGcmFtZSwgTUFDIE1nbXQ6IEFzc29jUmVxdWVzdCAoQVAgT25seSkgLS0qLworCit0eXBlZGVmIHN0cnVjdCBoZmEzODR4X0Fzc29jUmVxdWVzdAoreworCVVJTlQ4CXN0YV9hZGRyW1dMQU5fQUREUl9MRU5dOworCVVJTlQxNgl0eXBlOworCVVJTlQ4ICAgd3BhX2RhdGFbODBdOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X0Fzc29jUmVxX3Q7CisKKworI2RlZmluZSBIRkEzODR4X0FTU09DUkVRX1RZUEVfQVNTT0MgICAgIDAKKyNkZWZpbmUgSEZBMzg0eF9BU1NPQ1JFUV9UWVBFX1JFQVNTT0MgICAxCisKKy8qLS0gIFVuc29saWNpdGVkIEZyYW1lLCBNQUMgTWdtdDogTUlDIEZhaWx1cmUgIChBUCBPbmx5KSAtLSovCisKK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfTWljRmFpbHVyZQoreworCVVJTlQ4CXNlbmRlcltXTEFOX0FERFJfTEVOXTsKKwlVSU5UOAlkZXN0W1dMQU5fQUREUl9MRU5dOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X01pY0ZhaWx1cmVfdDsKKworLyotLSAgVW5zb2xpY2l0ZWQgRnJhbWUsIE1BQyBNZ210OiBQU1VzZXJDb3VudCAoQVAgT25seSkgLS0qLworCit0eXBlZGVmIHN0cnVjdCBoZmEzODR4X1BTVXNlckNvdW50Cit7CisJVUlOVDE2CXVzZXJjbnQ7Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfUFNVc2VyQ291bnRfdDsKKwordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9LZXlJRENoYW5nZWQKK3sKKwlVSU5UOAlzdGFfYWRkcltXTEFOX0FERFJfTEVOXTsKKwlVSU5UMTYJa2V5aWQ7Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfS2V5SURDaGFuZ2VkX3Q7CisKKy8qLS0gIENvbGxlY3Rpb24gb2YgYWxsIEluZiBmcmFtZXMgLS0tLS0tLS0tLS0tLS0tKi8KK3R5cGVkZWYgdW5pb24gaGZhMzg0eF9pbmZvZGF0YSB7CisJaGZhMzg0eF9Db21tVGFsbGllczE2X3QJY29tbXRhbGxpZXMxNjsKKwloZmEzODR4X0NvbW1UYWxsaWVzMzJfdAljb21tdGFsbGllczMyOworCWhmYTM4NHhfU2NhblJlc3VsdF90CXNjYW5yZXN1bHQ7CisJaGZhMzg0eF9DaEluZm9SZXN1bHRfdAljaGluZm9yZXN1bHQ7CisJaGZhMzg0eF9IU2NhblJlc3VsdF90CWhzY2FucmVzdWx0OworCWhmYTM4NHhfTGlua1N0YXR1c190CWxpbmtzdGF0dXM7CisJaGZhMzg0eF9Bc3NvY1N0YXR1c190CWFzc29jc3RhdHVzOworCWhmYTM4NHhfQXV0aFJlcV90CWF1dGhyZXE7CisJaGZhMzg0eF9QU1VzZXJDb3VudF90CXBzdXNlcmNudDsKKwloZmEzODR4X0tleUlEQ2hhbmdlZF90ICBrZXlpZGNoYW5nZWQ7Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfaW5mb2RhdGFfdDsKKwordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9JbmZGcmFtZQoreworCVVJTlQxNgkJCWZyYW1lbGVuOworCVVJTlQxNgkJCWluZm90eXBlOworCWhmYTM4NHhfaW5mb2RhdGFfdAlpbmZvOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X0luZkZyYW1lX3Q7CisKKyNpZiAoV0xBTl9IT1NUSUYgPT0gV0xBTl9VU0IpCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitVU0IgUGFja2V0IHN0cnVjdHVyZXMgYW5kIGNvbnN0YW50cy4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyogU2hvdWxkIGJlIHNlbnQgdG8gdGhlIGN0cmxvdXQgZW5kcG9pbnQgKi8KKyNkZWZpbmUgSEZBMzg0eF9VU0JfRU5CVUxLSU4JNgorCisvKiBTaG91bGQgYmUgc2VudCB0byB0aGUgYnVsa291dCBlbmRwb2ludCAqLworI2RlZmluZSBIRkEzODR4X1VTQl9UWEZSTQkwCisjZGVmaW5lIEhGQTM4NHhfVVNCX0NNRFJFUQkxCisjZGVmaW5lIEhGQTM4NHhfVVNCX1dSSURSRVEJMgorI2RlZmluZSBIRkEzODR4X1VTQl9SUklEUkVRCTMKKyNkZWZpbmUgSEZBMzg0eF9VU0JfV01FTVJFUQk0CisjZGVmaW5lIEhGQTM4NHhfVVNCX1JNRU1SRVEJNQorCisvKiBSZWNlaXZlZCBmcm9tIHRoZSBidWxraW4gZW5kcG9pbnQgKi8KKyNkZWZpbmUgSEZBMzg0eF9VU0JfSVNGUk0oYSkJKCEoKGEpICYgMHg4MDAwKSkKKyNkZWZpbmUgSEZBMzg0eF9VU0JfSVNUWEZSTShhKQkoKChhKSAmIDB4OTAwMCkgPT0gMHgxMDAwKQorI2RlZmluZSBIRkEzODR4X1VTQl9JU1JYRlJNKGEpCSghKChhKSAmIDB4OTAwMCkpCisjZGVmaW5lIEhGQTM4NHhfVVNCX0lORk9GUk0JMHg4MDAwCisjZGVmaW5lIEhGQTM4NHhfVVNCX0NNRFJFU1AJMHg4MDAxCisjZGVmaW5lIEhGQTM4NHhfVVNCX1dSSURSRVNQCTB4ODAwMgorI2RlZmluZSBIRkEzODR4X1VTQl9SUklEUkVTUAkweDgwMDMKKyNkZWZpbmUgSEZBMzg0eF9VU0JfV01FTVJFU1AJMHg4MDA0CisjZGVmaW5lIEhGQTM4NHhfVVNCX1JNRU1SRVNQCTB4ODAwNQorI2RlZmluZSBIRkEzODR4X1VTQl9CVUZBVkFJTAkweDgwMDYKKyNkZWZpbmUgSEZBMzg0eF9VU0JfRVJST1IJMHg4MDA3CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qIFJlcXVlc3QgKGJ1bGsgT1VUKSBwYWNrZXQgY29udGVudHMgKi8KKwordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF91c2JfdHhmcm0geworCWhmYTM4NHhfdHhfZnJhbWVfdAlkZXNjOworCVVJTlQ4CQkJZGF0YVtXTEFOX0RBVEFfTUFYTEVOXTsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF91c2JfdHhmcm1fdDsKKwordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF91c2JfY21kcmVxIHsKKwlVSU5UMTYJCXR5cGU7CisJVUlOVDE2CQljbWQ7CisJVUlOVDE2CQlwYXJtMDsKKwlVSU5UMTYJCXBhcm0xOworCVVJTlQxNgkJcGFybTI7CisJVUlOVDgJCXBhZFs1NF07Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfdXNiX2NtZHJlcV90OworCit0eXBlZGVmIHN0cnVjdCBoZmEzODR4X3VzYl93cmlkcmVxIHsKKwlVSU5UMTYJCXR5cGU7CisJVUlOVDE2CQlmcm1sZW47CisJVUlOVDE2CQlyaWQ7CisJVUlOVDgJCWRhdGFbSEZBMzg0eF9SSUREQVRBX01BWExFTl07Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfdXNiX3dyaWRyZXFfdDsKKwordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF91c2JfcnJpZHJlcSB7CisJVUlOVDE2CQl0eXBlOworCVVJTlQxNgkJZnJtbGVuOworCVVJTlQxNgkJcmlkOworCVVJTlQ4CQlwYWRbNThdOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X3VzYl9ycmlkcmVxX3Q7CisKK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfdXNiX3dtZW1yZXEgeworCVVJTlQxNgkJdHlwZTsKKwlVSU5UMTYJCWZybWxlbjsKKwlVSU5UMTYJCW9mZnNldDsKKwlVSU5UMTYJCXBhZ2U7CisJVUlOVDgJCWRhdGFbSEZBMzg0eF9VU0JfUldNRU1fTUFYTEVOXTsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF91c2Jfd21lbXJlcV90OworCit0eXBlZGVmIHN0cnVjdCBoZmEzODR4X3VzYl9ybWVtcmVxIHsKKwlVSU5UMTYJCXR5cGU7CisJVUlOVDE2CQlmcm1sZW47CisJVUlOVDE2CQlvZmZzZXQ7CisJVUlOVDE2CQlwYWdlOworCVVJTlQ4CQlwYWRbNTZdOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X3VzYl9ybWVtcmVxX3Q7CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qIFJlc3BvbnNlIChidWxrIElOKSBwYWNrZXQgY29udGVudHMgKi8KKwordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF91c2Jfcnhmcm0geworCWhmYTM4NHhfcnhfZnJhbWVfdAlkZXNjOworCVVJTlQ4CQkJZGF0YVtXTEFOX0RBVEFfTUFYTEVOXTsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF91c2Jfcnhmcm1fdDsKKwordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF91c2JfaW5mb2ZybSB7CisJVUlOVDE2CQkJdHlwZTsKKwloZmEzODR4X0luZkZyYW1lX3QJaW5mbzsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF91c2JfaW5mb2ZybV90OworCit0eXBlZGVmIHN0cnVjdCBoZmEzODR4X3VzYl9zdGF0dXNyZXNwIHsKKwlVSU5UMTYJCXR5cGU7CisJVUlOVDE2CQlzdGF0dXM7CisJVUlOVDE2CQlyZXNwMDsKKwlVSU5UMTYJCXJlc3AxOworCVVJTlQxNgkJcmVzcDI7Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfdXNiX2NtZHJlc3BfdDsKKwordHlwZWRlZiBoZmEzODR4X3VzYl9jbWRyZXNwX3QgaGZhMzg0eF91c2Jfd3JpZHJlc3BfdDsKKwordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF91c2JfcnJpZHJlc3AgeworCVVJTlQxNgkJdHlwZTsKKwlVSU5UMTYJCWZybWxlbjsKKwlVSU5UMTYJCXJpZDsKKwlVSU5UOAkJZGF0YVtIRkEzODR4X1JJRERBVEFfTUFYTEVOXTsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF91c2JfcnJpZHJlc3BfdDsKKwordHlwZWRlZiBoZmEzODR4X3VzYl9jbWRyZXNwX3QgaGZhMzg0eF91c2Jfd21lbXJlc3BfdDsKKwordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF91c2Jfcm1lbXJlc3AgeworCVVJTlQxNgkJdHlwZTsKKwlVSU5UMTYJCWZybWxlbjsKKwlVSU5UOAkJZGF0YVtIRkEzODR4X1VTQl9SV01FTV9NQVhMRU5dOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X3VzYl9ybWVtcmVzcF90OworCit0eXBlZGVmIHN0cnVjdCBoZmEzODR4X3VzYl9idWZhdmFpbCB7CisJVUlOVDE2CQl0eXBlOworCVVJTlQxNgkJZnJtbGVuOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X3VzYl9idWZhdmFpbF90OworCit0eXBlZGVmIHN0cnVjdCBoZmEzODR4X3VzYl9lcnJvciB7CisJVUlOVDE2CQl0eXBlOworCVVJTlQxNgkJZXJyb3J0eXBlOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X3VzYl9lcnJvcl90OworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogVW5pb25zIGZvciBwYWNrYWdpbmcgYWxsIHRoZSBrbm93biBwYWNrZXQgdHlwZXMgdG9nZXRoZXIgKi8KKwordHlwZWRlZiB1bmlvbiBoZmEzODR4X3VzYm91dCB7CisJVUlOVDE2CQkJdHlwZTsKKwloZmEzODR4X3VzYl90eGZybV90CXR4ZnJtOworCWhmYTM4NHhfdXNiX2NtZHJlcV90CWNtZHJlcTsKKwloZmEzODR4X3VzYl93cmlkcmVxX3QJd3JpZHJlcTsKKwloZmEzODR4X3VzYl9ycmlkcmVxX3QJcnJpZHJlcTsKKwloZmEzODR4X3VzYl93bWVtcmVxX3QJd21lbXJlcTsKKwloZmEzODR4X3VzYl9ybWVtcmVxX3QJcm1lbXJlcTsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF91c2JvdXRfdDsKKwordHlwZWRlZiB1bmlvbiBoZmEzODR4X3VzYmluIHsKKwlVSU5UMTYJCQl0eXBlOworCWhmYTM4NHhfdXNiX3J4ZnJtX3QJcnhmcm07CisJaGZhMzg0eF91c2JfdHhmcm1fdAl0eGZybTsKKwloZmEzODR4X3VzYl9pbmZvZnJtX3QJaW5mb2ZybTsKKwloZmEzODR4X3VzYl9jbWRyZXNwX3QJY21kcmVzcDsKKwloZmEzODR4X3VzYl93cmlkcmVzcF90CXdyaWRyZXNwOworCWhmYTM4NHhfdXNiX3JyaWRyZXNwX3QJcnJpZHJlc3A7CisJaGZhMzg0eF91c2Jfd21lbXJlc3BfdAl3bWVtcmVzcDsKKwloZmEzODR4X3VzYl9ybWVtcmVzcF90CXJtZW1yZXNwOworCWhmYTM4NHhfdXNiX2J1ZmF2YWlsX3QJYnVmYXZhaWw7CisJaGZhMzg0eF91c2JfZXJyb3JfdAl1c2JlcnJvcjsKKwlVSU5UOAkJCWJvZ3VzcGFkWzMwMDBdOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X3VzYmluX3Q7CisKKyNlbmRpZiAvKiBXTEFOX1VTQiAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitQRCByZWNvcmQgc3RydWN0dXJlcy4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKwordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9wZHJfcGNiX3BhcnRudW0KK3sKKwlVSU5UOAludW1bOF07Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfcGRyX3BjYl9wYXJ0bnVtX3Q7CisKK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfcGRyX3BjYl90cmFjZW51bQoreworCVVJTlQ4CW51bVs4XTsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9wZHJfcGNiX3RyYWNlbnVtX3Q7CisKK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfcGRyX25pY19zZXJpYWwKK3sKKwlVSU5UOAludW1bMTJdOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X3Bkcl9uaWNfc2VyaWFsX3Q7CisKK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfcGRyX21ra19tZWFzdXJlbWVudHMKK3sKKwlkb3VibGUJY2Fycmllcl9mcmVxOworCWRvdWJsZQlvY2N1cGllZF9iYW5kOworCWRvdWJsZQlwb3dlcl9kZW5zaXR5OworCWRvdWJsZQl0eF9zcHVyX2YxOworCWRvdWJsZQl0eF9zcHVyX2YyOworCWRvdWJsZQl0eF9zcHVyX2YzOworCWRvdWJsZQl0eF9zcHVyX2Y0OworCWRvdWJsZQl0eF9zcHVyX2wxOworCWRvdWJsZQl0eF9zcHVyX2wyOworCWRvdWJsZQl0eF9zcHVyX2wzOworCWRvdWJsZQl0eF9zcHVyX2w0OworCWRvdWJsZQlyeF9zcHVyX2YxOworCWRvdWJsZQlyeF9zcHVyX2YyOworCWRvdWJsZQlyeF9zcHVyX2wxOworCWRvdWJsZQlyeF9zcHVyX2wyOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X3Bkcl9ta2tfbWVhc3VyZW1lbnRzX3Q7CisKK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfcGRyX25pY19yYW1zaXplCit7CisJVUlOVDgJc2l6ZVsxMl07IC8qIHVuaXRzIG9mIEtCICovCit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfcGRyX25pY19yYW1zaXplX3Q7CisKK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfcGRyX21maXN1cHJhbmdlCit7CisJVUlOVDE2CWlkOworCVVJTlQxNgl2YXJpYW50OworCVVJTlQxNglib3R0b207CisJVUlOVDE2CXRvcDsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9wZHJfbWZpc3VwcmFuZ2VfdDsKKwordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9wZHJfY2Zpc3VwcmFuZ2UKK3sKKwlVSU5UMTYJaWQ7CisJVUlOVDE2CXZhcmlhbnQ7CisJVUlOVDE2CWJvdHRvbTsKKwlVSU5UMTYJdG9wOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X3Bkcl9jZmlzdXByYW5nZV90OworCit0eXBlZGVmIHN0cnVjdCBoZmEzODR4X3Bkcl9uaWNpZAoreworCVVJTlQxNglpZDsKKwlVSU5UMTYJdmFyaWFudDsKKwlVSU5UMTYJbWFqb3I7CisJVUlOVDE2CW1pbm9yOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X3Bkcl9uaWNpZF90OworCisKK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfcGRyX3JlZmRhY19tZWFzdXJlbWVudHMKK3sKKwlVSU5UMTYJdmFsdWVbMF07Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfcGRyX3JlZmRhY19tZWFzdXJlbWVudHNfdDsKKwordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9wZHJfdmdkYWNfbWVhc3VyZW1lbnRzCit7CisJVUlOVDE2CXZhbHVlWzBdOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X3Bkcl92Z2RhY19tZWFzdXJlbWVudHNfdDsKKwordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9wZHJfbGV2ZWxfY29tcF9tZWFzdXJlbWVudHMKK3sKKwlVSU5UMTYJdmFsdWVbMF07Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfcGRyX2xldmVsX2NvbXBjX21lYXN1cmVtZW50c190OworCit0eXBlZGVmIHN0cnVjdCBoZmEzODR4X3Bkcl9tYWNfYWRkcmVzcworeworCVVJTlQ4CWFkZHJbNl07Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfcGRyX21hY19hZGRyZXNzX3Q7CisKK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfcGRyX21ra19jYWxsbmFtZQoreworCVVJTlQ4CWNhbGxuYW1lWzhdOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X3Bkcl9ta2tfY2FsbG5hbWVfdDsKKwordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9wZHJfcmVnZG9tYWluCit7CisJVUlOVDE2CW51bWRvbWFpbnM7CisJVUlOVDE2CWRvbWFpbls1XTsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9wZHJfcmVnZG9tYWluX3Q7CisKK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfcGRyX2FsbG93ZWRfY2hhbm5lbAoreworCVVJTlQxNgljaF9iaXRtYXA7Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfcGRyX2FsbG93ZWRfY2hhbm5lbF90OworCit0eXBlZGVmIHN0cnVjdCBoZmEzODR4X3Bkcl9kZWZhdWx0X2NoYW5uZWwKK3sKKwlVSU5UMTYJY2hhbm5lbDsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9wZHJfZGVmYXVsdF9jaGFubmVsX3Q7CisKK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfcGRyX3ByaXZhY3lfb3B0aW9uCit7CisJVUlOVDE2CWF2YWlsYWJsZTsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9wZHJfcHJpdmFjeV9vcHRpb25fdDsKKwordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9wZHJfdGVtcHR5cGUKK3sKKwlVSU5UMTYJdHlwZTsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9wZHJfdGVtcHR5cGVfdDsKKwordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9wZHJfcmVmZGFjX3NldHVwCit7CisJVUlOVDE2CWNoX3ZhbHVlWzE0XTsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9wZHJfcmVmZGFjX3NldHVwX3Q7CisKK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfcGRyX3ZnZGFjX3NldHVwCit7CisJVUlOVDE2CWNoX3ZhbHVlWzE0XTsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9wZHJfdmdkYWNfc2V0dXBfdDsKKwordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9wZHJfbGV2ZWxfY29tcF9zZXR1cAoreworCVVJTlQxNgljaF92YWx1ZVsxNF07Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfcGRyX2xldmVsX2NvbXBfc2V0dXBfdDsKKwordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9wZHJfdHJpbWRhY19zZXR1cAoreworCVVJTlQxNgl0cmltaWRhYzsKKwlVSU5UMTYJdHJpbXFkYWM7Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfcGRyX3RyaW1kYWNfc2V0dXBfdDsKKwordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9wZHJfaWZyX3NldHRpbmcKK3sKKwlVSU5UMTYJdmFsdWVbM107Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfcGRyX2lmcl9zZXR0aW5nX3Q7CisKK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfcGRyX3Jmcl9zZXR0aW5nCit7CisJVUlOVDE2CXZhbHVlWzNdOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X3Bkcl9yZnJfc2V0dGluZ190OworCit0eXBlZGVmIHN0cnVjdCBoZmEzODR4X3Bkcl9oZmEzODYxX2Jhc2VsaW5lCit7CisJVUlOVDE2CXZhbHVlWzUwXTsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9wZHJfaGZhMzg2MV9iYXNlbGluZV90OworCit0eXBlZGVmIHN0cnVjdCBoZmEzODR4X3Bkcl9oZmEzODYxX3NoYWRvdworeworCVVJTlQzMgl2YWx1ZVszMl07Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfcGRyX2hmYTM4NjFfc2hhZG93X3Q7CisKK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfcGRyX2hmYTM4NjFfaWZyZgoreworCVVJTlQzMgl2YWx1ZVsyMF07Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfcGRyX2hmYTM4NjFfaWZyZl90OworCit0eXBlZGVmIHN0cnVjdCBoZmEzODR4X3Bkcl9oZmEzODYxX2NoY2Fsc3AKK3sKKwlVSU5UMTYJdmFsdWVbMTRdOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X3Bkcl9oZmEzODYxX2NoY2Fsc3BfdDsKKwordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9wZHJfaGZhMzg2MV9jaGNhbGkKK3sKKwlVSU5UMTYJdmFsdWVbMTddOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X3Bkcl9oZmEzODYxX2NoY2FsaV90OworCit0eXBlZGVmIHN0cnVjdCBoZmEzODR4X3Bkcl9oZmEzODYxX25pY19jb25maWcKK3sKKwlVSU5UMTYJY29uZmlnX2JpdG1hcDsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9wZHJfbmljX2NvbmZpZ190OworCit0eXBlZGVmIHN0cnVjdCBoZmEzODR4X3Bkcl9oZm9fZGVsYXkKK3sKKwlVSU5UOCAgIGhmb19kZWxheTsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9oZm9fZGVsYXlfdDsKKwordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9wZHJfaGZhMzg2MV9tYW5mX3Rlc3RzcAoreworCVVJTlQxNgl2YWx1ZVszMF07Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfcGRyX2hmYTM4NjFfbWFuZl90ZXN0c3BfdDsKKwordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9wZHJfaGZhMzg2MV9tYW5mX3Rlc3RpCit7CisJVUlOVDE2CXZhbHVlWzMwXTsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9wZHJfaGZhMzg2MV9tYW5mX3Rlc3RpX3Q7CisKK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfZW5kX29mX3BkYQoreworCVVJTlQxNgljcmM7Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfcGRyX2VuZF9vZl9wZGFfdDsKKwordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9wZHJlYworeworCVVJTlQxNglsZW47IC8qIGluIHdvcmRzICovCisJVUlOVDE2CWNvZGU7CisJdW5pb24gcGRyIHsKKwloZmEzODR4X3Bkcl9wY2JfcGFydG51bV90CXBjYl9wYXJ0bnVtOworCWhmYTM4NHhfcGRyX3BjYl90cmFjZW51bV90CXBjYl90cmFjZW51bTsKKwloZmEzODR4X3Bkcl9uaWNfc2VyaWFsX3QJbmljX3NlcmlhbDsKKwloZmEzODR4X3Bkcl9ta2tfbWVhc3VyZW1lbnRzX3QJbWtrX21lYXN1cmVtZW50czsKKwloZmEzODR4X3Bkcl9uaWNfcmFtc2l6ZV90CW5pY19yYW1zaXplOworCWhmYTM4NHhfcGRyX21maXN1cHJhbmdlX3QJbWZpc3VwcmFuZ2U7CisJaGZhMzg0eF9wZHJfY2Zpc3VwcmFuZ2VfdAljZmlzdXByYW5nZTsKKwloZmEzODR4X3Bkcl9uaWNpZF90CQluaWNpZDsKKwloZmEzODR4X3Bkcl9yZWZkYWNfbWVhc3VyZW1lbnRzX3QJcmVmZGFjX21lYXN1cmVtZW50czsKKwloZmEzODR4X3Bkcl92Z2RhY19tZWFzdXJlbWVudHNfdAl2Z2RhY19tZWFzdXJlbWVudHM7CisJaGZhMzg0eF9wZHJfbGV2ZWxfY29tcGNfbWVhc3VyZW1lbnRzX3QJbGV2ZWxfY29tcGNfbWVhc3VyZW1lbnRzOworCWhmYTM4NHhfcGRyX21hY19hZGRyZXNzX3QJbWFjX2FkZHJlc3M7CisJaGZhMzg0eF9wZHJfbWtrX2NhbGxuYW1lX3QJbWtrX2NhbGxuYW1lOworCWhmYTM4NHhfcGRyX3JlZ2RvbWFpbl90CQlyZWdkb21haW47CisJaGZhMzg0eF9wZHJfYWxsb3dlZF9jaGFubmVsX3QJYWxsb3dlZF9jaGFubmVsOworCWhmYTM4NHhfcGRyX2RlZmF1bHRfY2hhbm5lbF90CWRlZmF1bHRfY2hhbm5lbDsKKwloZmEzODR4X3Bkcl9wcml2YWN5X29wdGlvbl90CXByaXZhY3lfb3B0aW9uOworCWhmYTM4NHhfcGRyX3RlbXB0eXBlX3QJCXRlbXB0eXBlOworCWhmYTM4NHhfcGRyX3JlZmRhY19zZXR1cF90CXJlZmRhY19zZXR1cDsKKwloZmEzODR4X3Bkcl92Z2RhY19zZXR1cF90CXZnZGFjX3NldHVwOworCWhmYTM4NHhfcGRyX2xldmVsX2NvbXBfc2V0dXBfdAlsZXZlbF9jb21wX3NldHVwOworCWhmYTM4NHhfcGRyX3RyaW1kYWNfc2V0dXBfdAl0cmltZGFjX3NldHVwOworCWhmYTM4NHhfcGRyX2lmcl9zZXR0aW5nX3QJaWZyX3NldHRpbmc7CisJaGZhMzg0eF9wZHJfcmZyX3NldHRpbmdfdAlyZnJfc2V0dGluZzsKKwloZmEzODR4X3Bkcl9oZmEzODYxX2Jhc2VsaW5lX3QJaGZhMzg2MV9iYXNlbGluZTsKKwloZmEzODR4X3Bkcl9oZmEzODYxX3NoYWRvd190CWhmYTM4NjFfc2hhZG93OworCWhmYTM4NHhfcGRyX2hmYTM4NjFfaWZyZl90CWhmYTM4NjFfaWZyZjsKKwloZmEzODR4X3Bkcl9oZmEzODYxX2NoY2Fsc3BfdAloZmEzODYxX2NoY2Fsc3A7CisJaGZhMzg0eF9wZHJfaGZhMzg2MV9jaGNhbGlfdAloZmEzODYxX2NoY2FsaTsKKwloZmEzODR4X3Bkcl9uaWNfY29uZmlnX3QJbmljX2NvbmZpZzsKKwloZmEzODR4X2hmb19kZWxheV90ICAgICAgICAgICAgIGhmb19kZWxheTsKKwloZmEzODR4X3Bkcl9oZmEzODYxX21hbmZfdGVzdHNwX3QJaGZhMzg2MV9tYW5mX3Rlc3RzcDsKKwloZmEzODR4X3Bkcl9oZmEzODYxX21hbmZfdGVzdGlfdAloZmEzODYxX21hbmZfdGVzdGk7CisJaGZhMzg0eF9wZHJfZW5kX29mX3BkYV90CWVuZF9vZl9wZGE7CisKKwl9IGRhdGE7Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfcGRyZWNfdDsKKworCisjaWZkZWYgX19LRVJORUxfXworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0tICBNQUMgc3RhdGUgc3RydWN0dXJlLCBhcmd1bWVudCB0byBhbGwgZnVuY3Rpb25zIC0tCistLS0gIEFsc28sIGEgY29sbGVjdGlvbiBvZiBzdXBwb3J0IHR5cGVzIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCit0eXBlZGVmIHN0cnVjdCBoZmEzODR4X3N0YXR1c3Jlc3VsdAoreworCVVJTlQxNglzdGF0dXM7CisJVUlOVDE2CXJlc3AwOworCVVJTlQxNglyZXNwMTsKKwlVSU5UMTYJcmVzcDI7Cit9IGhmYTM4NHhfY21kcmVzdWx0X3Q7CisKKyNpZiAoV0xBTl9IT1NUSUYgPT0gV0xBTl9VU0IpCisKKy8qIFVTQiBDb250cm9sIEV4Y2hhbmdlIChDVExYKToKKyAqICBBIHF1ZXVlIG9mIHRoZSBzdHJ1Y3R1cmUgYmVsb3cgaXMgbWFpbnRhaW5lZCBmb3IgYWxsIG9mIHRoZQorICogIFJlcXVlc3QvUmVzcG9uc2UgdHlwZSBVU0IgcGFja2V0cyBzdXBwb3J0ZWQgYnkgUHJpc20yLgorICovCisvKiBUaGUgZm9sbG93aW5nIGhmYTM4NHhfKiBzdHJ1Y3R1cmVzIGFyZSBhcmd1bWVudHMgdG8KKyAqIHRoZSB1c2VyY2IoKSBmb3IgdGhlIGRpZmZlcmVudCBDVExYIHR5cGVzLgorICovCit0eXBlZGVmIGhmYTM4NHhfY21kcmVzdWx0X3QgaGZhMzg0eF93cmlkcmVzdWx0X3Q7Cit0eXBlZGVmIGhmYTM4NHhfY21kcmVzdWx0X3QgaGZhMzg0eF93bWVtcmVzdWx0X3Q7CisKK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfcnJpZHJlc3VsdAoreworCVVJTlQxNgkJcmlkOworCWNvbnN0IHZvaWQJKnJpZGRhdGE7CisJVUlOVAkJcmlkZGF0YV9sZW47Cit9IGhmYTM4NHhfcnJpZHJlc3VsdF90OworCitlbnVtIGN0bHhfc3RhdGUgeworCUNUTFhfU1RBUlQgPSAwLAkvKiBTdGFydCBzdGF0ZSwgbm90IHF1ZXVlZCAqLworCisJQ1RMWF9DT01QTEVURSwJLyogQ1RMWCBzdWNjZXNzZnVsbHkgY29tcGxldGVkICovCisJQ1RMWF9SRVFfRkFJTEVELAkvKiBPVVQgVVJCIGNvbXBsZXRlZCB3LyBlcnJvciAqLworCisJQ1RMWF9QRU5ESU5HLAkJLyogUXVldWVkLCBkYXRhIHZhbGlkICovCisJQ1RMWF9SRVFfU1VCTUlUVEVELAkvKiBPVVQgVVJCIHN1Ym1pdHRlZCAqLworCUNUTFhfUkVRX0NPTVBMRVRFLAkvKiBPVVQgVVJCIGNvbXBsZXRlICovCisJQ1RMWF9SRVNQX0NPTVBMRVRFCS8qIElOIFVSQiByZWNlaXZlZCAqLworfTsKK3R5cGVkZWYgZW51bSBjdGx4X3N0YXRlICBDVExYX1NUQVRFOworCitzdHJ1Y3QgaGZhMzg0eF91c2JjdGx4Oworc3RydWN0IGhmYTM4NHg7CisKK3R5cGVkZWYgdm9pZCAoKmN0bHhfY21kY2JfdCkoIHN0cnVjdCBoZmEzODR4KiwgY29uc3Qgc3RydWN0IGhmYTM4NHhfdXNiY3RseCogKTsKKwordHlwZWRlZiB2b2lkICgqY3RseF91c2VyY2JfdCkoCisJc3RydWN0IGhmYTM4NHgJKmh3LAorCXZvaWQJCSpjdGx4cmVzdWx0LAorCXZvaWQJCSp1c2VyY2JfZGF0YSk7CisKK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfdXNiY3RseAoreworCXN0cnVjdCBsaXN0X2hlYWQJbGlzdDsKKworCXNpemVfdAkJCW91dGJ1ZnNpemU7CisJaGZhMzg0eF91c2JvdXRfdAlvdXRidWY7CQkvKiBwa3QgYnVmIGZvciBPVVQgKi8KKwloZmEzODR4X3VzYmluX3QJCWluYnVmOwkJLyogcGt0IGJ1ZiBmb3IgSU4oYSBjb3B5KSAqLworCisJQ1RMWF9TVEFURQkJc3RhdGU7CQkvKiBUcmFja3MgcnVubmluZyBzdGF0ZSAqLworCisJc3RydWN0IGNvbXBsZXRpb24JZG9uZTsKKwl2b2xhdGlsZSBpbnQJCXJlYXBhYmxlOwkvKiBGb29kIGZvciB0aGUgcmVhcGVyIHRhc2sgKi8KKworCWN0bHhfY21kY2JfdAkJY21kY2I7CQkvKiBBc3luYyBjb21tYW5kIGNhbGxiYWNrICovCisJY3RseF91c2VyY2JfdAkJdXNlcmNiOwkJLyogQXN5bmMgdXNlciBjYWxsYmFjaywgKi8KKwl2b2lkCQkJKnVzZXJjYl9kYXRhOwkvKiAgYXQgQ1RMWCBjb21wbGV0aW9uICAqLworCisJaW50CQkJdmFyaWFudDsJLyogSWRlbnRpZmllcyBjbWQgdmFyaWFudCAqLworfSBoZmEzODR4X3VzYmN0bHhfdDsKKwordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF91c2JjdGx4cQoreworCXNwaW5sb2NrX3QJCWxvY2s7CisJc3RydWN0IGxpc3RfaGVhZAlwZW5kaW5nOworCXN0cnVjdCBsaXN0X2hlYWQJYWN0aXZlOworCXN0cnVjdCBsaXN0X2hlYWQJY29tcGxldGluZzsKKwlzdHJ1Y3QgbGlzdF9oZWFkCXJlYXBhYmxlOworfSBoZmEzODR4X3VzYmN0bHhxX3Q7CisjZW5kaWYKKwordHlwZWRlZiBzdHJ1Y3QgaGZhNDg0eF9tZXRhY21kCit7CisJVUlOVDE2CQljbWQ7CisKKwlVSU5UMTYgICAgICAgICAgcGFybTA7CisJVUlOVDE2ICAgICAgICAgIHBhcm0xOworCVVJTlQxNiAgICAgICAgICBwYXJtMjsKKworI2lmIDAgLy9YWFggY21kIGlycSBzdHVmZgorCVVJTlQxNiAgICAgICAgICBidWxraWQ7ICAgICAgICAgLyogd2hhdCBSSUQvRklEIHRvIGNvcHkgZG93bi4gKi8KKwlpbnQgICAgICAgICAgICAgYnVsa2xlbjsgICAgICAgIC8qIGhvdyBtdWNoIHRvIGNvcHkgZnJvbSBCQVAgKi8KKyAgICAgICAgY2hhciAgICAgICAgICAgICpidWxrZGF0YTsgICAgICAvKiBBbmQgdG8gd2hlcmU/ICovCisjZW5kaWYKKworCWhmYTM4NHhfY21kcmVzdWx0X3QgcmVzdWx0OworfSBoZmEzODR4X21ldGFjbWRfdDsKKworI2RlZmluZQlNQVhfUFJJU00yX0dSUF9BRERSCTE2CisjZGVmaW5lCU1BWF9HUlBfQUREUgkJMzIKKyNkZWZpbmUgV0xBTl9DT01NRU5UX01BWAk4MCAgLyogTWF4LiBsZW5ndGggb2YgdXNlciBjb21tZW50IHN0cmluZy4gKi8KKworI2RlZmluZSBNTV9TQVRfUENGCQkoQklUMTQpCisjZGVmaW5lIE1NX0dDU0RfUENGCQkoQklUMTUpCisjZGVmaW5lIE1NX0dDU0RfUENGX0VCCQkoQklUMTQgfCBCSVQxNSkKKworI2RlZmluZSBXTEFOX1NUQVRFX1NUT1BQRUQJMCAgIC8qIE5ldHdvcmsgaXMgbm90IGFjdGl2ZS4gKi8KKyNkZWZpbmUgV0xBTl9TVEFURV9TVEFSVEVECTEgICAvKiBOZXR3b3JrIGhhcyBiZWVuIHN0YXJ0ZWQuICovCisKKyNkZWZpbmUgV0xBTl9BVVRIX01BWCAgICAgICAgICAgNjAgIC8qIE1heC4gIyBvZiBhdXRoZW50aWNhdGVkIHN0YXRpb25zLiAqLworI2RlZmluZSBXTEFOX0FDQ0VTU19NQVgJCTYwICAvKiBNYXguICMgb2Ygc3RhdGlvbnMgaW4gYW4gYWNjZXNzIGxpc3QuICovCisjZGVmaW5lIFdMQU5fQUNDRVNTX05PTkUJMCAgIC8qIE5vIHN0YXRpb25zIG1heSBiZSBhdXRoZW50aWNhdGVkLiAqLworI2RlZmluZSBXTEFOX0FDQ0VTU19BTEwJCTEgICAvKiBBbGwgc3RhdGlvbnMgbWF5IGJlIGF1dGhlbnRpY2F0ZWQuICovCisjZGVmaW5lIFdMQU5fQUNDRVNTX0FMTE9XCTIgICAvKiBBdXRoZW50aWNhdGUgb25seSAiYWxsb3dlZCIgc3RhdGlvbnMuICovCisjZGVmaW5lIFdMQU5fQUNDRVNTX0RFTlkJMyAgIC8qIERvIG5vdCBhdXRoZW50aWNhdGUgImRlbmllZCIgc3RhdGlvbnMuICovCisKKy8qIFhYWCBUaGVzZSBhcmUgZ29pbmcgYXdheSBBU0FQICovCit0eXBlZGVmIHN0cnVjdCBwcmlzbTJzdGFfYXV0aGxpc3QKK3sKKwlVSU5UCWNudDsKKwlVSU5UOAlhZGRyW1dMQU5fQVVUSF9NQVhdW1dMQU5fQUREUl9MRU5dOworCVVJTlQ4CWFzc29jW1dMQU5fQVVUSF9NQVhdOworfSBwcmlzbTJzdGFfYXV0aGxpc3RfdDsKKwordHlwZWRlZiBzdHJ1Y3QgcHJpc20yc3RhX2FjY2Vzc2xpc3QKK3sKKwlVSU5UCW1vZGlmeTsKKwlVSU5UCWNudDsKKwlVSU5UOAlhZGRyW1dMQU5fQUNDRVNTX01BWF1bV0xBTl9BRERSX0xFTl07CisJVUlOVAljbnQxOworCVVJTlQ4CWFkZHIxW1dMQU5fQUNDRVNTX01BWF1bV0xBTl9BRERSX0xFTl07Cit9IHByaXNtMnN0YV9hY2Nlc3NsaXN0X3Q7CisKK3R5cGVkZWYgc3RydWN0IGhmYTM4NHgKK3sKKyNpZiAoV0xBTl9IT1NUSUYgIT0gV0xBTl9VU0IpCisJLyogUmVzb3VyY2UgY29uZmlnICovCisJVUlOVDMyCQkJaW9iYXNlOworCWNoYXIJCQlfX2lvbWVtICptZW1iYXNlOworCVVJTlQzMgkJCWlycTsKKyNlbHNlCisJLyogVVNCIHN1cHBvcnQgZGF0YSAqLworCXN0cnVjdCB1c2JfZGV2aWNlCSp1c2I7CisJc3RydWN0IHVyYgkJcnhfdXJiOworCXN0cnVjdCBza19idWZmCQkqcnhfdXJiX3NrYjsKKwlzdHJ1Y3QgdXJiCQl0eF91cmI7CisJc3RydWN0IHVyYgkJY3RseF91cmI7CisJaGZhMzg0eF91c2JvdXRfdAl0eGJ1ZmY7CisJaGZhMzg0eF91c2JjdGx4cV90CWN0bHhxOworCXN0cnVjdCB0aW1lcl9saXN0CXJlcXRpbWVyOworCXN0cnVjdCB0aW1lcl9saXN0CXJlc3B0aW1lcjsKKworCXN0cnVjdCB0aW1lcl9saXN0CXRocm90dGxlOworCisJc3RydWN0IHRhc2tsZXRfc3RydWN0CXJlYXBlcl9iaDsKKwlzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QJY29tcGxldGlvbl9iaDsKKworCXN0cnVjdCB3b3JrX3N0cnVjdAl1c2Jfd29yazsKKworCXVuc2lnbmVkIGxvbmcJCXVzYl9mbGFnczsKKyNkZWZpbmUgVEhST1RUTEVfUlgJMAorI2RlZmluZSBUSFJPVFRMRV9UWAkxCisjZGVmaW5lIFdPUktfUlhfSEFMVAkyCisjZGVmaW5lIFdPUktfVFhfSEFMVAkzCisjZGVmaW5lIFdPUktfUlhfUkVTVU1FCTQKKyNkZWZpbmUgV09SS19UWF9SRVNVTUUJNQorCisJdW5zaWduZWQgc2hvcnQJCXJlcV90aW1lcl9kb25lOjE7CisJdW5zaWduZWQgc2hvcnQJCXJlc3BfdGltZXJfZG9uZToxOworCisJaW50ICAgICAgICAgICAgICAgICAgICAgZW5kcF9pbjsKKwlpbnQgICAgICAgICAgICAgICAgICAgICBlbmRwX291dDsKKyNlbmRpZiAvKiAhVVNCICovCisKKyNpZiAoV0xBTl9IT1NUSUYgPT0gV0xBTl9QQ01DSUEpCisjaWYgTElOVVhfVkVSU0lPTl9DT0RFID4gS0VSTkVMX1ZFUlNJT04oMiw2LDE2KQorCXN0cnVjdCBwY21jaWFfZGV2aWNlICpwZGV2OworI2Vsc2UKKwlkZXZfbGlua190CSpsaW5rOworI2VuZGlmCisJZGV2X25vZGVfdAlub2RlOworI2VuZGlmCisKKwlpbnQgICAgICAgICAgICAgICAgICAgICBzbmlmZl9mY3M7CisJaW50ICAgICAgICAgICAgICAgICAgICAgc25pZmZfY2hhbm5lbDsKKwlpbnQgICAgICAgICAgICAgICAgICAgICBzbmlmZl90cnVuY2F0ZTsKKwlpbnQgICAgICAgICAgICAgICAgICAgICBzbmlmZmhkcjsKKworCXdhaXRfcXVldWVfaGVhZF90IGNtZHE7CSAgICAgICAgLyogd2FpdCBxdWV1ZSBpdHNlbGYgKi8KKworCS8qIENvbnRyb2xsZXIgc3RhdGUgKi8KKwlVSU5UMzIJCXN0YXRlOworCVVJTlQzMgkJaXNhcDsKKwlVSU5UOAkJcG9ydF9lbmFibGVkW0hGQTM4NHhfTlVNUE9SVFNfTUFYXTsKKyNpZiAoV0xBTl9IT1NUSUYgIT0gV0xBTl9VU0IpCisJVUlOVAkJYXV4ZW47CisJVUlOVCAgICAgICAgICAgIGlzcmFtMTY7CisjZW5kaWYgLyogIVVTQiAqLworCisJLyogRG93bmxvYWQgc3VwcG9ydCAqLworCVVJTlQJCQkJZGxzdGF0ZTsKKwloZmEzODR4X2Rvd25sb2FkYnVmZmVyX3QJYnVmaW5mbzsKKwlVSU5UMTYJCQkJZGx0aW1lb3V0OworCisjaWYgKFdMQU5fSE9TVElGICE9IFdMQU5fVVNCKQorCXNwaW5sb2NrX3QJY21kbG9jazsKKwl2b2xhdGlsZSBpbnQgICAgY21kZmxhZzsgICAgICAgIC8qIHdhaXQgcXVldWUgZmxhZyAqLworCWhmYTM4NHhfbWV0YWNtZF90ICpjbWRkYXRhOyAgICAgIC8qIGZvciBvdXIgYXN5bmMgY2FsbGJhY2sgKi8KKworCS8qIEJBUCBzdXBwb3J0ICovCisJc3BpbmxvY2tfdAliYXBsb2NrOworCXN0cnVjdCB0YXNrbGV0X3N0cnVjdCAgIGJhcF90YXNrbGV0OworCisJLyogTUFDIGJ1ZmZlciBpZHMgKi8KKyAgICAgICAgVUlOVDE2ICAgICAgICAgIHR4ZmlkX2hlYWQ7CisgICAgICAgIFVJTlQxNiAgICAgICAgICB0eGZpZF90YWlsOworICAgICAgICBVSU5UICAgICAgICAgICAgdHhmaWRfTjsKKyAgICAgICAgVUlOVDE2ICAgICAgICAgIHR4ZmlkX3F1ZXVlW0hGQTM4NHhfRFJWUl9GSURTVEFDS0xFTl9NQVhdOworCVVJTlQxNgkJCWluZm9maWQ7CisJc3RydWN0IHNlbWFwaG9yZQlpbmZvZmlkX3NlbTsKKyNlbmRpZiAvKiAhVVNCICovCisKKwlpbnQgICAgICAgICAgICAgICAgICAgICAgICAgIHNjYW5mbGFnOyAgICAvKiB0byBzaWduYWwgc2NhbiBjb21sZXRlICovCisJaW50ICAgICAgICAgICAgICAgICAgICAgICAgICBqb2luX2FwOyAgICAgICAgLyogYXJlIHdlIGpvaW5lZCB0byBhIHNwZWNpZmljIGFwICovCisJaW50ICAgICAgICAgICAgICAgICAgICAgICAgICBqb2luX3JldHJpZXM7ICAgLyogbnVtYmVyIG9mIGpvaW4gcmV0cmllcyB0aWxsIHdlIGZhaWwgKi8KKwloZmEzODR4X0pvaW5SZXF1ZXN0X2RhdGFfdCAgIGpvaW5yZXE7ICAgICAgICAvKiBqb2luIHJlcXVlc3Qgc2F2ZWQgZGF0YSAqLworCisJd2xhbmRldmljZV90ICAgICAgICAgICAgKndsYW5kZXY7CisJLyogVGltZXIgdG8gYWxsb3cgZm9yIHRoZSBkZWZlcnJlZCBwcm9jZXNzaW5nIG9mIGxpbmtzdGF0dXMgbWVzc2FnZXMgKi8KKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QgCWxpbmtfYmg7CisKKyAgICAgICAgc3RydWN0IHdvcmtfc3RydWN0ICAgICAgY29tbXNxdWFsX2JoOworCWhmYTM4NHhfY29tbXNxdWFsaXR5X3QgIHF1YWw7CisJc3RydWN0IHRpbWVyX2xpc3QJY29tbXNxdWFsX3RpbWVyOworCisJVUlOVDE2IGxpbmtfc3RhdHVzOworCVVJTlQxNiBsaW5rX3N0YXR1c19uZXc7CisJc3RydWN0IHNrX2J1ZmZfaGVhZCAgICAgICAgYXV0aHE7CisKKwkvKiBBbmQgaGVyZSB3ZSBoYXZlIHN0dWZmIHRoYXQgdXNlZCB0byBiZSBpbiBwcml2ICovCisKKwkvKiBTdGF0ZSB2YXJpYWJsZXMgKi8KKwlVSU5UCQlwcmVzbmlmZl9wb3J0X3R5cGU7CisJVUlOVDE2CQlwcmVzbmlmZl93ZXBmbGFnczsKKwlVSU5UMzIJCWRvdDExX2Rlc2lyZWRfYnNzX3R5cGU7CisJaW50CQlhcDsJLyogQVAgZmxhZzogMCAtIFN0YXRpb24sIDEgLSBBY2Nlc3MgUG9pbnQuICovCisKKwlpbnQgICAgICAgICAgICAgZGJtYWRqdXN0OworCisJLyogR3JvdXAgQWRkcmVzc2VzIC0gcmlnaHQgbm93LCB0aGVyZSBhcmUgdXAgdG8gYSB0b3RhbAorCW9mIE1BWF9HUlBfQUREUiBncm91cCBhZGRyZXNzZXMgKi8KKwlVSU5UOAkJZG90MTFfZ3JwX2FkZHJbTUFYX0dSUF9BRERSXVtXTEFOX0FERFJfTEVOXTsKKwlVSU5UCQlkb3QxMV9ncnBjbnQ7CisKKwkvKiBDb21wb25lbnQgSWRlbnRpdGllcyAqLworCWhmYTM4NHhfY29tcGlkZW50X3QJaWRlbnRfbmljOworCWhmYTM4NHhfY29tcGlkZW50X3QJaWRlbnRfcHJpX2Z3OworCWhmYTM4NHhfY29tcGlkZW50X3QJaWRlbnRfc3RhX2Z3OworCWhmYTM4NHhfY29tcGlkZW50X3QJaWRlbnRfYXBfZnc7CisJVUlOVDE2CQkJbW1fbW9kczsKKworCS8qIFN1cHBsaWVyIGNvbXBhdGliaWxpdHkgcmFuZ2VzICovCisJaGZhMzg0eF9jYXBsZXZlbF90CWNhcF9zdXBfbWZpOworCWhmYTM4NHhfY2FwbGV2ZWxfdAljYXBfc3VwX2NmaTsKKwloZmEzODR4X2NhcGxldmVsX3QJY2FwX3N1cF9wcmk7CisJaGZhMzg0eF9jYXBsZXZlbF90CWNhcF9zdXBfc3RhOworCWhmYTM4NHhfY2FwbGV2ZWxfdAljYXBfc3VwX2FwOworCisJLyogQWN0b3IgY29tcGF0aWJpbGl0eSByYW5nZXMgKi8KKwloZmEzODR4X2NhcGxldmVsX3QJY2FwX2FjdF9wcmlfY2ZpOyAvKiBwcmkgZi93IHRvIGNvbnRyb2xsZXIgaW50ZXJmYWNlICovCisJaGZhMzg0eF9jYXBsZXZlbF90CWNhcF9hY3Rfc3RhX2NmaTsgLyogc3RhIGYvdyB0byBjb250cm9sbGVyIGludGVyZmFjZSAqLworCWhmYTM4NHhfY2FwbGV2ZWxfdAljYXBfYWN0X3N0YV9tZmk7IC8qIHN0YSBmL3cgdG8gbW9kZW0gaW50ZXJmYWNlICovCisJaGZhMzg0eF9jYXBsZXZlbF90CWNhcF9hY3RfYXBfY2ZpOyAgLyogYXAgZi93IHRvIGNvbnRyb2xsZXIgaW50ZXJmYWNlICovCisJaGZhMzg0eF9jYXBsZXZlbF90CWNhcF9hY3RfYXBfbWZpOyAgLyogYXAgZi93IHRvIG1vZGVtIGludGVyZmFjZSAqLworCisJVUlOVDMyCQkJcHN1c2VyY291bnQ7ICAvKiBQb3dlciBzYXZlIHVzZXIgY291bnQuICovCisJaGZhMzg0eF9Db21tVGFsbGllczMyX3QJdGFsbGllczsgICAgICAvKiBDb21tdW5pY2F0aW9uIHRhbGxpZXMuICovCisJVUlOVDgJCQljb21tZW50W1dMQU5fQ09NTUVOVF9NQVgrMV07IC8qIFVzZXIgY29tbWVudCAqLworCisJLyogQ2hhbm5lbCBJbmZvIHJlcXVlc3QgcmVzdWx0cyAoQVAgb25seSkgKi8KKwlzdHJ1Y3QgeworCQlhdG9taWNfdAkJZG9uZTsKKwkJVUlOVDgJCQljb3VudDsKKwkJaGZhMzg0eF9DaEluZm9SZXN1bHRfdAlyZXN1bHRzOworCX0gY2hhbm5lbF9pbmZvOworCisJaGZhMzg0eF9JbmZGcmFtZV90ICAgICAgKnNjYW5yZXN1bHRzOworCisKKyAgICAgICAgcHJpc20yc3RhX2F1dGhsaXN0X3QJYXV0aGxpc3Q7ICAgICAvKiBBdXRoZW50aWNhdGVkIHN0YXRpb24gbGlzdC4gKi8KKwlVSU5UCQkJYWNjZXNzbW9kZTsgICAvKiBBY2Nlc3MgbW9kZS4gKi8KKyAgICAgICAgcHJpc20yc3RhX2FjY2Vzc2xpc3RfdAlhbGxvdzsgICAgICAgIC8qIEFsbG93ZWQgc3RhdGlvbiBsaXN0LiAqLworICAgICAgICBwcmlzbTJzdGFfYWNjZXNzbGlzdF90CWRlbnk7ICAgICAgICAgLyogRGVuaWVkIHN0YXRpb24gbGlzdC4gKi8KKworfSBoZmEzODR4X3Q7CisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKi0tLSBGdW5jdGlvbiBEZWNsYXJhdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKyNpZiAoV0xBTl9IT1NUSUYgPT0gV0xBTl9VU0IpCit2b2lkCitoZmEzODR4X2NyZWF0ZSgKKwloZmEzODR4X3QgKmh3LAorCXN0cnVjdCB1c2JfZGV2aWNlICp1c2IpOworI2Vsc2UKK3ZvaWQKK2hmYTM4NHhfY3JlYXRlKAorCWhmYTM4NHhfdCAqaHcsCisJVUlOVCBpcnEsCisJVUlOVDMyIGlvYmFzZSwKKwlVSU5UOCBfX2lvbWVtICptZW1iYXNlKTsKKyNlbmRpZgorCit2b2lkIGhmYTM4NHhfZGVzdHJveShoZmEzODR4X3QgKmh3KTsKKworaXJxcmV0dXJuX3QKK2hmYTM4NHhfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCBQVF9SRUdTKTsKK2ludAoraGZhMzg0eF9jb3JlcmVzZXQoIGhmYTM4NHhfdCAqaHcsIGludCBob2xkdGltZSwgaW50IHNldHRsZXRpbWUsIGludCBnZW5lc2lzKTsKK2ludAoraGZhMzg0eF9kcnZyX2NoaW5mb3Jlc3VsdHMoIGhmYTM4NHhfdCAqaHcpOworaW50CitoZmEzODR4X2RydnJfY29tbXRhbGxpZXMoIGhmYTM4NHhfdCAqaHcpOworaW50CitoZmEzODR4X2RydnJfZGlzYWJsZShoZmEzODR4X3QgKmh3LCBVSU5UMTYgbWFjcG9ydCk7CitpbnQKK2hmYTM4NHhfZHJ2cl9lbmFibGUoaGZhMzg0eF90ICpodywgVUlOVDE2IG1hY3BvcnQpOworaW50CitoZmEzODR4X2RydnJfZmxhc2hkbF9lbmFibGUoaGZhMzg0eF90ICpodyk7CitpbnQKK2hmYTM4NHhfZHJ2cl9mbGFzaGRsX2Rpc2FibGUoaGZhMzg0eF90ICpodyk7CitpbnQKK2hmYTM4NHhfZHJ2cl9mbGFzaGRsX3dyaXRlKGhmYTM4NHhfdCAqaHcsIFVJTlQzMiBkYWRkciwgdm9pZCogYnVmLCBVSU5UMzIgbGVuKTsKK2ludAoraGZhMzg0eF9kcnZyX2dldGNvbmZpZyhoZmEzODR4X3QgKmh3LCBVSU5UMTYgcmlkLCB2b2lkICpidWYsIFVJTlQxNiBsZW4pOworaW50CitoZmEzODR4X2RydnJfaGFuZG92ZXIoIGhmYTM4NHhfdCAqaHcsIFVJTlQ4ICphZGRyKTsKK2ludAoraGZhMzg0eF9kcnZyX2hvc3RzY2FucmVzdWx0cyggaGZhMzg0eF90ICpodyk7CitpbnQKK2hmYTM4NHhfZHJ2cl9sb3dfbGV2ZWwoaGZhMzg0eF90ICpodywgaGZhMzg0eF9tZXRhY21kX3QgKmNtZCk7CitpbnQKK2hmYTM4NHhfZHJ2cl9tbWlfcmVhZChoZmEzODR4X3QgKmh3LCBVSU5UMzIgYWRkcmVzcywgVUlOVDMyICpyZXN1bHQpOworaW50CitoZmEzODR4X2RydnJfbW1pX3dyaXRlKGhmYTM4NHhfdCAqaHcsIFVJTlQzMiBhZGRyZXNzLCBVSU5UMzIgZGF0YSk7CitpbnQKK2hmYTM4NHhfZHJ2cl9yYW1kbF9lbmFibGUoaGZhMzg0eF90ICpodywgVUlOVDMyIGV4ZWFkZHIpOworaW50CitoZmEzODR4X2RydnJfcmFtZGxfZGlzYWJsZShoZmEzODR4X3QgKmh3KTsKK2ludAoraGZhMzg0eF9kcnZyX3JhbWRsX3dyaXRlKGhmYTM4NHhfdCAqaHcsIFVJTlQzMiBkYWRkciwgdm9pZCogYnVmLCBVSU5UMzIgbGVuKTsKK2ludAoraGZhMzg0eF9kcnZyX3JlYWRwZGEoaGZhMzg0eF90ICpodywgdm9pZCAqYnVmLCBVSU5UIGxlbik7CitpbnQKK2hmYTM4NHhfZHJ2cl9zY2FucmVzdWx0cyggaGZhMzg0eF90ICpodyk7CisKK2ludAoraGZhMzg0eF9kcnZyX3NldGNvbmZpZyhoZmEzODR4X3QgKmh3LCBVSU5UMTYgcmlkLCB2b2lkICpidWYsIFVJTlQxNiBsZW4pOworCitzdGF0aWMgaW5saW5lIGludAoraGZhMzg0eF9kcnZyX2dldGNvbmZpZzE2KGhmYTM4NHhfdCAqaHcsIFVJTlQxNiByaWQsIHZvaWQgKnZhbCkKK3sKKwlpbnQJCXJlc3VsdCA9IDA7CisJcmVzdWx0ID0gaGZhMzg0eF9kcnZyX2dldGNvbmZpZyhodywgcmlkLCB2YWwsIHNpemVvZihVSU5UMTYpKTsKKwlpZiAoIHJlc3VsdCA9PSAwICkgeworCQkqKChVSU5UMTYqKXZhbCkgPSBoZmEzODR4Mmhvc3RfMTYoKigoVUlOVDE2Kil2YWwpKTsKKwl9CisJcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIGlubGluZSBpbnQKK2hmYTM4NHhfZHJ2cl9nZXRjb25maWczMihoZmEzODR4X3QgKmh3LCBVSU5UMTYgcmlkLCB2b2lkICp2YWwpCit7CisJaW50CQlyZXN1bHQgPSAwOworCisJcmVzdWx0ID0gaGZhMzg0eF9kcnZyX2dldGNvbmZpZyhodywgcmlkLCB2YWwsIHNpemVvZihVSU5UMzIpKTsKKwlpZiAoIHJlc3VsdCA9PSAwICkgeworCQkqKChVSU5UMzIqKXZhbCkgPSBoZmEzODR4Mmhvc3RfMzIoKigoVUlOVDMyKil2YWwpKTsKKwl9CisKKwlyZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgaW5saW5lIGludAoraGZhMzg0eF9kcnZyX3NldGNvbmZpZzE2KGhmYTM4NHhfdCAqaHcsIFVJTlQxNiByaWQsIFVJTlQxNiB2YWwpCit7CisJVUlOVDE2IHZhbHVlID0gaG9zdDJoZmEzODR4XzE2KHZhbCk7CisJcmV0dXJuIGhmYTM4NHhfZHJ2cl9zZXRjb25maWcoaHcsIHJpZCwgJnZhbHVlLCBzaXplb2YodmFsdWUpKTsKK30KKworc3RhdGljIGlubGluZSBpbnQKK2hmYTM4NHhfZHJ2cl9zZXRjb25maWczMihoZmEzODR4X3QgKmh3LCBVSU5UMTYgcmlkLCBVSU5UMzIgdmFsKQoreworCVVJTlQzMiB2YWx1ZSA9IGhvc3QyaGZhMzg0eF8zMih2YWwpOworCXJldHVybiBoZmEzODR4X2RydnJfc2V0Y29uZmlnKGh3LCByaWQsICZ2YWx1ZSwgc2l6ZW9mKHZhbHVlKSk7Cit9CisKKyNpZiAoV0xBTl9IT1NUSUYgPT0gV0xBTl9VU0IpCitpbnQKK2hmYTM4NHhfZHJ2cl9nZXRjb25maWdfYXN5bmMoaGZhMzg0eF90ICAgICAqaHcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVSU5UMTYgICAgICAgIHJpZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0bHhfdXNlcmNiX3QgdXNlcmNiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAgICAgICAgICAqdXNlcmNiX2RhdGEpOworCitpbnQKK2hmYTM4NHhfZHJ2cl9zZXRjb25maWdfYXN5bmMoaGZhMzg0eF90ICpodywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVJTlQxNiByaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpidWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVSU5UMTYgbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3RseF91c2VyY2JfdCB1c2VyY2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICp1c2VyY2JfZGF0YSk7CisjZWxzZQorc3RhdGljIGlubGluZSBpbnQKK2hmYTM4NHhfZHJ2cl9zZXRjb25maWdfYXN5bmMoaGZhMzg0eF90ICpodywgVUlOVDE2IHJpZCwgdm9pZCAqYnVmLCBVSU5UMTYgbGVuLAorCQkJICAgICB2b2lkICpwdHIxLCB2b2lkICpwdHIyKQoreworICAgICAgICAgKHZvaWQpcHRyMTsKKyAgICAgICAgICh2b2lkKXB0cjI7CisgICAgICAgICByZXR1cm4gaGZhMzg0eF9kcnZyX3NldGNvbmZpZyhodywgcmlkLCBidWYsIGxlbik7Cit9CisjZW5kaWYKKworc3RhdGljIGlubGluZSBpbnQKK2hmYTM4NHhfZHJ2cl9zZXRjb25maWcxNl9hc3luYyhoZmEzODR4X3QgKmh3LCBVSU5UMTYgcmlkLCBVSU5UMTYgdmFsKQoreworCVVJTlQxNiB2YWx1ZSA9IGhvc3QyaGZhMzg0eF8xNih2YWwpOworCXJldHVybiBoZmEzODR4X2RydnJfc2V0Y29uZmlnX2FzeW5jKGh3LCByaWQsICZ2YWx1ZSwgc2l6ZW9mKHZhbHVlKSwKKwkJCQkJICAgIE5VTEwgLCBOVUxMKTsKK30KKworc3RhdGljIGlubGluZSBpbnQKK2hmYTM4NHhfZHJ2cl9zZXRjb25maWczMl9hc3luYyhoZmEzODR4X3QgKmh3LCBVSU5UMTYgcmlkLCBVSU5UMzIgdmFsKQoreworCVVJTlQzMiB2YWx1ZSA9IGhvc3QyaGZhMzg0eF8zMih2YWwpOworCXJldHVybiBoZmEzODR4X2RydnJfc2V0Y29uZmlnX2FzeW5jKGh3LCByaWQsICZ2YWx1ZSwgc2l6ZW9mKHZhbHVlKSwKKwkJCQkJICAgIE5VTEwgLCBOVUxMKTsKK30KKworCitpbnQKK2hmYTM4NHhfZHJ2cl9zdGFydChoZmEzODR4X3QgKmh3KTsKK2ludAoraGZhMzg0eF9kcnZyX3N0b3AoaGZhMzg0eF90ICpodyk7CitpbnQKK2hmYTM4NHhfZHJ2cl90eGZyYW1lKGhmYTM4NHhfdCAqaHcsIHN0cnVjdCBza19idWZmICpza2IsIHA4MDIxMV9oZHJfdCAqcDgwMjExX2hkciwgcDgwMjExX21ldGF3ZXBfdCAqcDgwMjExX3dlcCk7Cit2b2lkCitoZmEzODR4X3R4X3RpbWVvdXQod2xhbmRldmljZV90ICp3bGFuZGV2KTsKKworaW50CitoZmEzODR4X2NtZF9pbml0aWFsaXplKGhmYTM4NHhfdCAqaHcpOworaW50CitoZmEzODR4X2NtZF9lbmFibGUoaGZhMzg0eF90ICpodywgVUlOVDE2IG1hY3BvcnQpOworaW50CitoZmEzODR4X2NtZF9kaXNhYmxlKGhmYTM4NHhfdCAqaHcsIFVJTlQxNiBtYWNwb3J0KTsKK2ludAoraGZhMzg0eF9jbWRfZGlhZ25vc2UoaGZhMzg0eF90ICpodyk7CitpbnQKK2hmYTM4NHhfY21kX2FsbG9jYXRlKGhmYTM4NHhfdCAqaHcsIFVJTlQxNiBsZW4pOworaW50CitoZmEzODR4X2NtZF90cmFuc21pdChoZmEzODR4X3QgKmh3LCBVSU5UMTYgcmVjbGFpbSwgVUlOVDE2IHFvcywgVUlOVDE2IGZpZCk7CitpbnQKK2hmYTM4NHhfY21kX2NsZWFycGVyc2lzdChoZmEzODR4X3QgKmh3LCBVSU5UMTYgZmlkKTsKK2ludAoraGZhMzg0eF9jbWRfbm90aWZ5KGhmYTM4NHhfdCAqaHcsIFVJTlQxNiByZWNsYWltLCBVSU5UMTYgZmlkLCB2b2lkICpidWYsIFVJTlQxNiBsZW4pOworaW50CitoZmEzODR4X2NtZF9pbnF1aXJlKGhmYTM4NHhfdCAqaHcsIFVJTlQxNiBmaWQpOworaW50CitoZmEzODR4X2NtZF9hY2Nlc3MoaGZhMzg0eF90ICpodywgVUlOVDE2IHdyaXRlLCBVSU5UMTYgcmlkLCB2b2lkICpidWYsIFVJTlQxNiBsZW4pOworaW50CitoZmEzODR4X2NtZF9tb25pdG9yKGhmYTM4NHhfdCAqaHcsIFVJTlQxNiBlbmFibGUpOworaW50CitoZmEzODR4X2NtZF9kb3dubG9hZCgKKwloZmEzODR4X3QgKmh3LAorCVVJTlQxNiBtb2RlLAorCVVJTlQxNiBsb3dhZGRyLAorCVVJTlQxNiBoaWdoYWRkciwKKwlVSU5UMTYgY29kZWxlbik7CitpbnQKK2hmYTM4NHhfY21kX2F1eF9lbmFibGUoaGZhMzg0eF90ICpodywgaW50IGZvcmNlKTsKK2ludAoraGZhMzg0eF9jbWRfYXV4X2Rpc2FibGUoaGZhMzg0eF90ICpodyk7CitpbnQKK2hmYTM4NHhfY29weV9mcm9tX2JhcCgKKwloZmEzODR4X3QgKmh3LAorCVVJTlQxNgliYXAsCisJVUlOVDE2CWlkLAorCVVJTlQxNglvZmZzZXQsCisJdm9pZAkqYnVmLAorCVVJTlQJbGVuKTsKK2ludAoraGZhMzg0eF9jb3B5X3RvX2JhcCgKKwloZmEzODR4X3QgKmh3LAorCVVJTlQxNgliYXAsCisJVUlOVDE2CWlkLAorCVVJTlQxNglvZmZzZXQsCisJdm9pZAkqYnVmLAorCVVJTlQJbGVuKTsKK3ZvaWQKK2hmYTM4NHhfY29weV9mcm9tX2F1eCgKKwloZmEzODR4X3QgKmh3LAorCVVJTlQzMgljYXJkYWRkciwKKwlVSU5UMzIJYXV4Y3RsLAorCXZvaWQJKmJ1ZiwKKwlVSU5UCWxlbik7Cit2b2lkCitoZmEzODR4X2NvcHlfdG9fYXV4KAorCWhmYTM4NHhfdCAqaHcsCisJVUlOVDMyCWNhcmRhZGRyLAorCVVJTlQzMglhdXhjdGwsCisJdm9pZAkqYnVmLAorCVVJTlQJbGVuKTsKKworI2lmIChXTEFOX0hPU1RJRiAhPSBXTEFOX1VTQikKKworLyoKKyAgIEhGQTM4NHggaXMgYSBMSVRUTEUgRU5ESUFOIHBhcnQuCisKKyAgIHRoZSBnZXQvc2V0cmVnIGZ1bmN0aW9ucyBpbXBsaWNpdGx5IGJ5dGUtc3dhcCB0aGUgZGF0YSB0byBMRS4KKyAgIHRoZSBfbm9zd2FwIHZhcmlhbnRzIGRvIG5vdCBwZXJmb3JtIGEgYnl0ZS1zd2FwIG9uIHRoZSBkYXRhLgorKi8KKworc3RhdGljIGlubGluZSBVSU5UMTYKK19faGZhMzg0eF9nZXRyZWcoaGZhMzg0eF90ICpodywgVUlOVCByZWcpOworCitzdGF0aWMgaW5saW5lIHZvaWQKK19faGZhMzg0eF9zZXRyZWcoaGZhMzg0eF90ICpodywgVUlOVDE2IHZhbCwgVUlOVCByZWcpOworCitzdGF0aWMgaW5saW5lIFVJTlQxNgorX19oZmEzODR4X2dldHJlZ19ub3N3YXAoaGZhMzg0eF90ICpodywgVUlOVCByZWcpOworCitzdGF0aWMgaW5saW5lIHZvaWQKK19faGZhMzg0eF9zZXRyZWdfbm9zd2FwKGhmYTM4NHhfdCAqaHcsIFVJTlQxNiB2YWwsIFVJTlQgcmVnKTsKKworI2lmZGVmIFJFVkVSU0VfRU5ESUFOCisjZGVmaW5lIGhmYTM4NHhfZ2V0cmVnIF9faGZhMzg0eF9nZXRyZWdfbm9zd2FwCisjZGVmaW5lIGhmYTM4NHhfc2V0cmVnIF9faGZhMzg0eF9zZXRyZWdfbm9zd2FwCisjZGVmaW5lIGhmYTM4NHhfZ2V0cmVnX25vc3dhcCBfX2hmYTM4NHhfZ2V0cmVnCisjZGVmaW5lIGhmYTM4NHhfc2V0cmVnX25vc3dhcCBfX2hmYTM4NHhfc2V0cmVnCisjZWxzZQorI2RlZmluZSBoZmEzODR4X2dldHJlZyBfX2hmYTM4NHhfZ2V0cmVnCisjZGVmaW5lIGhmYTM4NHhfc2V0cmVnIF9faGZhMzg0eF9zZXRyZWcKKyNkZWZpbmUgaGZhMzg0eF9nZXRyZWdfbm9zd2FwIF9faGZhMzg0eF9nZXRyZWdfbm9zd2FwCisjZGVmaW5lIGhmYTM4NHhfc2V0cmVnX25vc3dhcCBfX2hmYTM4NHhfc2V0cmVnX25vc3dhcAorI2VuZGlmCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBoZmEzODR4X2dldHJlZworKgorKiBSZXRyaWV2ZSB0aGUgdmFsdWUgb2Ygb25lIG9mIHRoZSBNQUMgcmVnaXN0ZXJzLiAgRG9uZSBoZXJlCisqIGJlY2F1c2UgZGlmZmVyZW50IFBSSVNNMiBNQUMgcGFydHMgdXNlIGRpZmZlcmVudCBidXNlcyBhbmQgc3VjaC4KKyogTk9URTogVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSB2YWx1ZSBpbiBIT1NUIE9SREVSISEhISEhCisqCisqIEFyZ3VtZW50czoKKyogICAgICAgaHcgICAgICAgICBNQUMgcGFydCBzdHJ1Y3R1cmUKKyogICAgICAgcmVnICAgICAgICBSZWdpc3RlciBpZGVudGlmaWVyIChvZmZzZXQgZm9yIEkvTyBiYXNlZCBpL2YpCisqCisqIFJldHVybnM6CisqICAgICAgIFZhbHVlIGZyb20gdGhlIHJlZ2lzdGVyIGluIEhPU1QgT1JERVIhISEhCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyBpbmxpbmUgVUlOVDE2CitfX2hmYTM4NHhfZ2V0cmVnKGhmYTM4NHhfdCAqaHcsIFVJTlQgcmVnKQoreworLyoJcHJpbnRrKEtFUk5fREVCVUcgIlJlYWRpbmcgZnJvbSAweCUweFxuIiwgaHctPm1lbWJhc2UgKyByZWcpOyAqLworI2lmICgoV0xBTl9IT1NUSUYgPT0gV0xBTl9QQ01DSUEpIHx8IChXTEFOX0hPU1RJRiA9PSBXTEFOX1BMWCkpCisJcmV0dXJuIHdsYW5faW53X2xlMTZfdG9fY3B1KGh3LT5pb2Jhc2UrcmVnKTsKKyNlbGlmIChXTEFOX0hPU1RJRiA9PSBXTEFOX1BDSSkKKwlyZXR1cm4gX19sZTE2X3RvX2NwdShyZWFkdyhody0+bWVtYmFzZSArIHJlZykpOworI2VuZGlmCit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBoZmEzODR4X3NldHJlZworKgorKiBTZXQgdGhlIHZhbHVlIG9mIG9uZSBvZiB0aGUgTUFDIHJlZ2lzdGVycy4gIERvbmUgaGVyZQorKiBiZWNhdXNlIGRpZmZlcmVudCBQUklTTTIgTUFDIHBhcnRzIHVzZSBkaWZmZXJlbnQgYnVzZXMgYW5kIHN1Y2guCisqIE5PVEU6IFRoaXMgZnVuY3Rpb24gYXNzdW1lcyB0aGUgdmFsdWUgaXMgaW4gSE9TVCBPUkRFUiEhISEhIQorKgorKiBBcmd1bWVudHM6CisqICAgICAgIGh3CU1BQyBwYXJ0IHN0cnVjdHVyZQorKgl2YWwJVmFsdWUsIGluIEhPU1QgT1JERVIhISwgdG8gcHV0IGluIHRoZSByZWdpc3RlcgorKiAgICAgICByZWcJUmVnaXN0ZXIgaWRlbnRpZmllciAob2Zmc2V0IGZvciBJL08gYmFzZWQgaS9mKQorKgorKiBSZXR1cm5zOgorKiAgICAgICBOb3RoaW5nCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyBpbmxpbmUgdm9pZAorX19oZmEzODR4X3NldHJlZyhoZmEzODR4X3QgKmh3LCBVSU5UMTYgdmFsLCBVSU5UIHJlZykKK3sKKyNpZiAoKFdMQU5fSE9TVElGID09IFdMQU5fUENNQ0lBKSB8fCAoV0xBTl9IT1NUSUYgPT0gV0xBTl9QTFgpKQorCXdsYW5fb3V0d19jcHVfdG9fbGUxNiggdmFsLCBody0+aW9iYXNlICsgcmVnKTsKKwlyZXR1cm47CisjZWxpZiAoV0xBTl9IT1NUSUYgPT0gV0xBTl9QQ0kpCisJd3JpdGV3KF9fY3B1X3RvX2xlMTYodmFsKSwgaHctPm1lbWJhc2UgKyByZWcpOworCXJldHVybjsKKyNlbmRpZgorfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBoZmEzODR4X2dldHJlZ19ub3N3YXAKKyoKKyogUmV0cmlldmUgdGhlIHZhbHVlIG9mIG9uZSBvZiB0aGUgTUFDIHJlZ2lzdGVycy4gIERvbmUgaGVyZQorKiBiZWNhdXNlIGRpZmZlcmVudCBQUklTTTIgTUFDIHBhcnRzIHVzZSBkaWZmZXJlbnQgYnVzZXMgYW5kIHN1Y2guCisqCisqIEFyZ3VtZW50czoKKyogICAgICAgaHcgICAgICAgICBNQUMgcGFydCBzdHJ1Y3R1cmUKKyogICAgICAgcmVnICAgICAgICBSZWdpc3RlciBpZGVudGlmaWVyIChvZmZzZXQgZm9yIEkvTyBiYXNlZCBpL2YpCisqCisqIFJldHVybnM6CisqICAgICAgIFZhbHVlIGZyb20gdGhlIHJlZ2lzdGVyLgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgaW5saW5lIFVJTlQxNgorX19oZmEzODR4X2dldHJlZ19ub3N3YXAoaGZhMzg0eF90ICpodywgVUlOVCByZWcpCit7CisjaWYgKChXTEFOX0hPU1RJRiA9PSBXTEFOX1BDTUNJQSkgfHwgKFdMQU5fSE9TVElGID09IFdMQU5fUExYKSkKKwlyZXR1cm4gd2xhbl9pbncoaHctPmlvYmFzZStyZWcpOworI2VsaWYgKFdMQU5fSE9TVElGID09IFdMQU5fUENJKQorCXJldHVybiByZWFkdyhody0+bWVtYmFzZSArIHJlZyk7CisjZW5kaWYKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogaGZhMzg0eF9zZXRyZWdfbm9zd2FwCisqCisqIFNldCB0aGUgdmFsdWUgb2Ygb25lIG9mIHRoZSBNQUMgcmVnaXN0ZXJzLiAgRG9uZSBoZXJlCisqIGJlY2F1c2UgZGlmZmVyZW50IFBSSVNNMiBNQUMgcGFydHMgdXNlIGRpZmZlcmVudCBidXNlcyBhbmQgc3VjaC4KKyoKKyogQXJndW1lbnRzOgorKiAgICAgICBodwlNQUMgcGFydCBzdHJ1Y3R1cmUKKyoJdmFsCVZhbHVlIHRvIHB1dCBpbiB0aGUgcmVnaXN0ZXIKKyogICAgICAgcmVnCVJlZ2lzdGVyIGlkZW50aWZpZXIgKG9mZnNldCBmb3IgSS9PIGJhc2VkIGkvZikKKyoKKyogUmV0dXJuczoKKyogICAgICAgTm90aGluZworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgaW5saW5lIHZvaWQKK19faGZhMzg0eF9zZXRyZWdfbm9zd2FwKGhmYTM4NHhfdCAqaHcsIFVJTlQxNiB2YWwsIFVJTlQgcmVnKQoreworI2lmICgoV0xBTl9IT1NUSUYgPT0gV0xBTl9QQ01DSUEpIHx8IChXTEFOX0hPU1RJRiA9PSBXTEFOX1BMWCkpCisJd2xhbl9vdXR3KCB2YWwsIGh3LT5pb2Jhc2UgKyByZWcpOworCXJldHVybjsKKyNlbGlmIChXTEFOX0hPU1RJRiA9PSBXTEFOX1BDSSkKKwl3cml0ZXcodmFsLCBody0+bWVtYmFzZSArIHJlZyk7CisJcmV0dXJuOworI2VuZGlmCit9CisKKworc3RhdGljIGlubGluZSB2b2lkIGhmYTM4NHhfZXZlbnRzX2FsbChoZmEzODR4X3QgKmh3KQoreworCWhmYTM4NHhfc2V0cmVnKGh3LAorCQkgICAgICAgSEZBMzg0eF9JTlRfTk9STUFMCisjaWZkZWYgQ01EX0lSUQorCQkgICAgICAgfCBIRkEzODR4X0lOVEVOX0NNRF9TRVQoMSkKKyNlbmRpZgorCQkgICAgICAgLAorCQkgICAgICAgSEZBMzg0eF9JTlRFTik7CisKK30KKworc3RhdGljIGlubGluZSB2b2lkIGhmYTM4NHhfZXZlbnRzX25vYmFwKGhmYTM4NHhfdCAqaHcpCit7CisJaGZhMzg0eF9zZXRyZWcoaHcsCisJCSAgICAgICAgKEhGQTM4NHhfSU5UX05PUk1BTCAmIH5IRkEzODR4X0lOVF9CQVBfT1ApCisjaWZkZWYgQ01EX0lSUQorCQkgICAgICAgfCBIRkEzODR4X0lOVEVOX0NNRF9TRVQoMSkKKyNlbmRpZgorCQkgICAgICAgLAorCQkgICAgICAgSEZBMzg0eF9JTlRFTik7CisKK30KKworI2VuZGlmIC8qIFdMQU5fSE9TVElGICE9IFdMQU5fVVNCICovCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworCisjZW5kaWYgIC8qIF9IRkEzODR4X0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL2hmYTM4NHhfdXNiLmMgYi9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9oZmEzODR4X3VzYi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRiMGM1MDIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9oZmEzODR4X3VzYi5jCkBAIC0wLDAgKzEsNTAyNyBAQAorLyogc3JjL3ByaXNtMi9kcml2ZXIvaGZhMzg0eF91c2IuYworKgorKiBGdW5jdGlvbnMgdGhhdCB0YWxrIHRvIHRoZSBVU0IgdmFyaWFudG9mIHRoZSBJbnRlcnNpbCBoZmEzODR4IE1BQworKgorKiBDb3B5cmlnaHQgKEMpIDE5OTkgQWJzb2x1dGVWYWx1ZSBTeXN0ZW1zLCBJbmMuICBBbGwgUmlnaHRzIFJlc2VydmVkLgorKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKgorKiBsaW51eC13bGFuCisqCisqICAgVGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBhcmUgc3ViamVjdCB0byB0aGUgTW96aWxsYSBQdWJsaWMKKyogICBMaWNlbnNlIFZlcnNpb24gMS4xICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZQorKiAgIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZgorKiAgIHRoZSBMaWNlbnNlIGF0IGh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBMLworKgorKiAgIFNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUworKiAgIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IKKyogICBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcKKyogICByaWdodHMgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorKgorKiAgIEFsdGVybmF0aXZlbHksIHRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgbWF5IGJlIHVzZWQgdW5kZXIgdGhlCisqICAgdGVybXMgb2YgdGhlIEdOVSBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgKHRoZSAiR1BMIiksIGluIHdoaWNoCisqICAgY2FzZSB0aGUgcHJvdmlzaW9ucyBvZiB0aGUgR1BMIGFyZSBhcHBsaWNhYmxlIGluc3RlYWQgb2YgdGhlCisqICAgYWJvdmUuICBJZiB5b3Ugd2lzaCB0byBhbGxvdyB0aGUgdXNlIG9mIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUKKyogICBvbmx5IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR1BMIGFuZCBub3QgdG8gYWxsb3cgb3RoZXJzIHRvIHVzZQorKiAgIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgdW5kZXIgdGhlIE1QTCwgaW5kaWNhdGUgeW91ciBkZWNpc2lvbgorKiAgIGJ5IGRlbGV0aW5nIHRoZSBwcm92aXNpb25zIGFib3ZlIGFuZCByZXBsYWNlIHRoZW0gd2l0aCB0aGUgbm90aWNlCisqICAgYW5kIG90aGVyIHByb3Zpc2lvbnMgcmVxdWlyZWQgYnkgdGhlIEdQTC4gIElmIHlvdSBkbyBub3QgZGVsZXRlCisqICAgdGhlIHByb3Zpc2lvbnMgYWJvdmUsIGEgcmVjaXBpZW50IG1heSB1c2UgeW91ciB2ZXJzaW9uIG9mIHRoaXMKKyogICBmaWxlIHVuZGVyIGVpdGhlciB0aGUgTVBMIG9yIHRoZSBHUEwuCisqCisqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqCisqIElucXVpcmllcyByZWdhcmRpbmcgdGhlIGxpbnV4LXdsYW4gT3BlbiBTb3VyY2UgcHJvamVjdCBjYW4gYmUKKyogbWFkZSBkaXJlY3RseSB0bzoKKyoKKyogQWJzb2x1dGVWYWx1ZSBTeXN0ZW1zIEluYy4KKyogaW5mb0BsaW51eC13bGFuLmNvbQorKiBodHRwOi8vd3d3LmxpbnV4LXdsYW4uY29tCisqCisqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqCisqIFBvcnRpb25zIG9mIHRoZSBkZXZlbG9wbWVudCBvZiB0aGlzIHNvZnR3YXJlIHdlcmUgZnVuZGVkIGJ5CisqIEludGVyc2lsIENvcnBvcmF0aW9uIGFzIHBhcnQgb2YgUFJJU00oUikgY2hpcHNldCBwcm9kdWN0IGRldmVsb3BtZW50LgorKgorKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKgorKiBUaGlzIGZpbGUgaW1wbGVtZW50cyBmdW5jdGlvbnMgdGhhdCBjb3JyZXNwb25kIHRvIHRoZSBwcmlzbTIvaGZhMzg0eAorKiA4MDIuMTEgTUFDIGhhcmR3YXJlIGFuZCBmaXJtd2FyZSBob3N0IGludGVyZmFjZS4KKyoKKyogVGhlIGZ1bmN0aW9ucyBjYW4gYmUgY29uc2lkZXJlZCB0byByZXByZXNlbnQgc2V2ZXJhbCBsZXZlbHMgb2YKKyogYWJzdHJhY3Rpb24uICBUaGUgbG93ZXN0IGxldmVsIGZ1bmN0aW9ucyBhcmUgc2ltcGx5IEMtY2FsbGFibGUgd3JhcHBlcnMKKyogYXJvdW5kIHRoZSByZWdpc3RlciBhY2Nlc3Nlcy4gIFRoZSBuZXh0IGhpZ2hlciBsZXZlbCByZXByZXNlbnRzIEMtY2FsbGFibGUKKyogcHJpc20yIEFQSSBmdW5jdGlvbnMgdGhhdCBtYXRjaCB0aGUgSW50ZXJzaWwgZG9jdW1lbnRhdGlvbiBhcyBjbG9zZWx5CisqIGFzIGlzIHJlYXNvbmFibGUuICBUaGUgbmV4dCBoaWdoZXIgbGF5ZXIgaW1wbGVtZW50cyBjb21tb24gc2VxdWVuY2VzCisqIG9mIGludm9rYXRpb25zIG9mIHRoZSBBUEkgbGF5ZXIgKGUuZy4gd3JpdGUgdG8gYmFwLCBmb2xsb3dlZCBieSBjbWQpLgorKgorKiBDb21tb24gc2VxdWVuY2VzOgorKiBoZmEzODR4X2RydnJfeHh4CUhpZ2hlc3QgbGV2ZWwgYWJzdHJhY3Rpb25zIHByb3ZpZGVkIGJ5IHRoZQorKgkJCWhmYTM4NHggY29kZS4gIFRoZXkgYXJlIGRyaXZlciBkZWZpbmVkIHdyYXBwZXJzCisqCQkJZm9yIGNvbW1vbiBzZXF1ZW5jZXMuICBUaGVzZSBmdW5jdGlvbnMgZ2VuZXJhbGx5CisqCQkJdXNlIHRoZSBzZXJ2aWNlcyBvZiB0aGUgbG93ZXIgbGV2ZWxzLgorKgorKiBoZmEzODR4X2RydnJfeHh4Y29uZmlnICBBbiBleGFtcGxlIG9mIHRoZSBkcnZyIGxldmVsIGFic3RyYWN0aW9uLiBUaGVzZQorKgkJCWZ1bmN0aW9ucyBhcmUgd3JhcHBlcnMgZm9yIHRoZSBSSUQgZ2V0L3NldAorKgkJCXNlcXVlbmNlLiBUaGV5IAljYWxsIGNvcHlfW3RvfGZyb21dX2JhcCgpIGFuZAorKgkJCWNtZF9hY2Nlc3MoKS4JVGhlc2UgZnVuY3Rpb25zIG9wZXJhdGUgb24gdGhlCisqCQkJUklEcyBhbmQgYnVmZmVycyB3aXRob3V0IHZhbGlkYXRpb24uICBUaGUgY2FsbGVyCisqCQkJaXMgcmVzcG9uc2libGUgZm9yIHRoYXQuCisqCisqIEFQSSB3cmFwcGVyIGZ1bmN0aW9uczoKKyogaGZhMzg0eF9jbWRfeHh4CWZ1bmN0aW9ucyB0aGF0IHByb3ZpZGUgYWNjZXNzIHRvIHRoZSBmL3cgY29tbWFuZHMuCisqCQkJVGhlIGZ1bmN0aW9uIGFyZ3VtZW50cyBjb3JyZXNwb25kIHRvIGVhY2ggY29tbWFuZAorKgkJCWFyZ3VtZW50LCBldmVuIGNvbW1hbmQgYXJndW1lbnRzIHRoYXQgZ2V0IHBhY2tlZAorKgkJCWludG8gc2luZ2xlIHJlZ2lzdGVycy4gIFRoZXNlIGZ1bmN0aW9ucyBfanVzdF8KKyoJCQlpc3N1ZSB0aGUgY29tbWFuZCBieSBzZXR0aW5nIHRoZSBjbWQvcGFybSByZWdzCisqCQkJJiByZWFkaW5nIHRoZSBzdGF0dXMvcmVzcCByZWdzLiAgQWRkaXRpb25hbAorKgkJCWFjdGl2aXRpZXMgcmVxdWlyZWQgdG8gZnVsbHkgdXNlIGEgY29tbWFuZAorKgkJCShyZWFkL3dyaXRlIGZyb20vdG8gYmFwLCBnZXQvc2V0IGludCBzdGF0dXMgZXRjLikKKyoJCQlhcmUgaW1wbGVtZW50ZWQgc2VwYXJhdGVseS4gIFRoaW5rIG9mIHRoZXNlIGFzCisqCQkJQy1jYWxsYWJsZSBwcmlzbTIgY29tbWFuZHMuCisqCisqIExvd2VzdCBMYXllciBGdW5jdGlvbnM6CisqIGhmYTM4NHhfZG9jbWRfeHh4CVRoZXNlIGZ1bmN0aW9ucyBpbXBsZW1lbnQgdGhlIHNlcXVlbmNlIHJlcXVpcmVkCisqCQkJdG8gaXNzdWUgYW55IHByaXNtMiBjb21tYW5kLiAgUHJpbWFyaWx5IHVzZWQgYnkgdGhlCisqCQkJaGZhMzg0eF9jbWRfeHh4IGZ1bmN0aW9ucy4KKyoKKyogaGZhMzg0eF9iYXBfeHh4CUJBUCByZWFkL3dyaXRlIGFjY2VzcyBmdW5jdGlvbnMuCisqCQkJTm90ZTogd2UgdXN1YWxseSB1c2UgQkFQMCBmb3Igbm9uLWludGVycnVwdCBjb250ZXh0CisqCQkJIGFuZCBCQVAxIGZvciBpbnRlcnJ1cHQgY29udGV4dC4KKyoKKyogaGZhMzg0eF9kbF94eHgJZG93bmxvYWQgcmVsYXRlZCBmdW5jdGlvbnMuCisqCisqIERyaXZlciBTdGF0ZSBJc3N1ZXM6CisqIE5vdGUgdGhhdCB0aGVyZSBhcmUgdHdvIHBhaXJzIG9mIGZ1bmN0aW9ucyB0aGF0IG1hbmFnZSB0aGUKKyogJ2luaXRpYWxpemVkJyBhbmQgJ3J1bm5pbmcnIHN0YXRlcyBvZiB0aGUgaHcvTUFDIGNvbWJvLiAgVGhlIGZvdXIKKyogZnVuY3Rpb25zIGFyZSBjcmVhdGUoKSwgZGVzdHJveSgpLCBzdGFydCgpLCBhbmQgc3RvcCgpLiAgY3JlYXRlKCkKKyogc2V0cyB1cCB0aGUgZGF0YSBzdHJ1Y3R1cmVzIHJlcXVpcmVkIHRvIHN1cHBvcnQgdGhlIGhmYTM4NHhfKgorKiBmdW5jdGlvbnMgYW5kIGRlc3Ryb3koKSBjbGVhbnMgdGhlbSB1cC4gIFRoZSBzdGFydCgpIGZ1bmN0aW9uIGdldHMKKyogdGhlIGFjdHVhbCBoYXJkd2FyZSBydW5uaW5nIGFuZCBlbmFibGVzIHRoZSBpbnRlcnJ1cHRzLiAgVGhlIHN0b3AoKQorKiBmdW5jdGlvbiBzaHV0cyB0aGUgaGFyZHdhcmUgZG93bi4gIFRoZSBzZXF1ZW5jZSBzaG91bGQgYmU6CisqIGNyZWF0ZSgpCisqIHN0YXJ0KCkKKyogIC4KKyogIC4gIERvIGludGVyZXN0aW5nIHRoaW5ncyB3LyB0aGUgaGFyZHdhcmUKKyogIC4KKyogc3RvcCgpCisqIGRlc3Ryb3koKQorKgorKiBOb3RlIHRoYXQgZGVzdHJveSgpIGNhbiBiZSBjYWxsZWQgd2l0aG91dCBjYWxsaW5nIHN0b3AoKSBmaXJzdC4KKyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyovCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKiBTeXN0ZW0gSW5jbHVkZXMgKi8KKyNkZWZpbmUgV0xBTl9EQlZBUglwcmlzbTJfZGVidWcKKworI2luY2x1ZGUgInZlcnNpb24uaCIKKworCisjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgorCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC93aXJlbGVzcy5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CisjaW5jbHVkZSA8YXNtL2JpdG9wcy5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC91c2IuaD4KKworI2luY2x1ZGUgIndsYW5fY29tcGF0LmgiCisKKyNpZiAoV0xBTl9IT1NUSUYgIT0gV0xBTl9VU0IpCisjZXJyb3IgIlRoaXMgZmlsZSBpcyBzcGVjaWZpYyB0byBVU0IiCisjZW5kaWYKKworCisjaWYgTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiw2LDEwKQorc3RhdGljIGludAord2FpdF9mb3JfY29tcGxldGlvbl9pbnRlcnJ1cHRpYmxlKHN0cnVjdCBjb21wbGV0aW9uICp4KQoreworICBpbnQgcmV0ID0gMDsKKworICBtaWdodF9zbGVlcCgpOworCisgIHNwaW5fbG9ja19pcnEoJngtPndhaXQubG9jayk7CisgIGlmICgheC0+ZG9uZSkgeworICAgIERFQ0xBUkVfV0FJVFFVRVVFKHdhaXQsIGN1cnJlbnQpOworCisgICAgd2FpdC5mbGFncyB8PSBXUV9GTEFHX0VYQ0xVU0lWRTsKKyAgICBfX2FkZF93YWl0X3F1ZXVlX3RhaWwoJngtPndhaXQsICZ3YWl0KTsKKyAgICBkbyB7CisgICAgICBpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHsKKyAgICAgICAgcmV0ID0gLUVSRVNUQVJUU1lTOworICAgICAgICBfX3JlbW92ZV93YWl0X3F1ZXVlKCZ4LT53YWl0LCAmd2FpdCk7CisgICAgICAgIGdvdG8gb3V0OworICAgICAgfQorICAgICAgX19zZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOworICAgICAgc3Bpbl91bmxvY2tfaXJxKCZ4LT53YWl0LmxvY2spOworICAgICAgc2NoZWR1bGUoKTsKKyAgICAgIHNwaW5fbG9ja19pcnEoJngtPndhaXQubG9jayk7CisgICAgfSB3aGlsZSAoIXgtPmRvbmUpOworICAgIF9fcmVtb3ZlX3dhaXRfcXVldWUoJngtPndhaXQsICZ3YWl0KTsKKyAgfQorICB4LT5kb25lLS07CitvdXQ6CisgIHNwaW5fdW5sb2NrX2lycSgmeC0+d2FpdC5sb2NrKTsKKworICByZXR1cm4gcmV0OworfQorI2VuZGlmCisKKyNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigyLDUsNjkpCitzdGF0aWMgdm9pZAordXNiX2luaXRfdXJiKHN0cnVjdCB1cmIgKnVyYikKK3sKKwltZW1zZXQodXJiLCAwLCBzaXplb2YoKnVyYikpOworI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA+PSBLRVJORUxfVkVSU0lPTigyLDUsMCkgLyogdHVuZSBtZSEgKi8KKwl1cmItPmNvdW50ID0gKGF0b21pY190KUFUT01JQ19JTklUKDEpOworI2VuZGlmCisJc3Bpbl9sb2NrX2luaXQoJnVyYi0+bG9jayk7Cit9CisjZW5kaWYKKworI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA+PSBLRVJORUxfVkVSU0lPTigyLDUsMCkgLyogdHVuZSBtZSEgKi8KKyMgIGRlZmluZSBTVUJNSVRfVVJCKHUsZikgIHVzYl9zdWJtaXRfdXJiKHUsZikKKyNlbHNlCisjICBkZWZpbmUgU1VCTUlUX1VSQih1LGYpICB1c2Jfc3VibWl0X3VyYih1KQorI2VuZGlmCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKiBQcm9qZWN0IEluY2x1ZGVzICovCisKKyNpbmNsdWRlICJwODAyMTF0eXBlcy5oIgorI2luY2x1ZGUgInA4MDIxMWhkci5oIgorI2luY2x1ZGUgInA4MDIxMW1nbXQuaCIKKyNpbmNsdWRlICJwODAyMTFjb252LmgiCisjaW5jbHVkZSAicDgwMjExbXNnLmgiCisjaW5jbHVkZSAicDgwMjExbmV0ZGV2LmgiCisjaW5jbHVkZSAicDgwMjExcmVxLmgiCisjaW5jbHVkZSAicDgwMjExbWV0YWRlZi5oIgorI2luY2x1ZGUgInA4MDIxMW1ldGFzdHJ1Y3QuaCIKKyNpbmNsdWRlICJoZmEzODR4LmgiCisjaW5jbHVkZSAicHJpc20ybWdtdC5oIgorCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworLyogTG9jYWwgQ29uc3RhbnRzICovCisKK2VudW0gY21kX21vZGUKK3sKKyAgRE9XQUlUID0gMCwKKyAgRE9BU1lOQworfTsKK3R5cGVkZWYgZW51bSBjbWRfbW9kZSBDTURfTU9ERTsKKworI2RlZmluZSBUSFJPVFRMRV9KSUZGSUVTCShIWi84KQorCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworLyogTG9jYWwgTWFjcm9zICovCisKKyNkZWZpbmUgUk9VTkRVUDY0KGEpICgoKGEpKzYzKSZ+NjMpCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKiBMb2NhbCBUeXBlcyAqLworCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworLyogTG9jYWwgU3RhdGljIERlZmluaXRpb25zICovCitleHRlcm4gaW50IHByaXNtMl9kZWJ1ZzsKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKy8qIExvY2FsIEZ1bmN0aW9uIERlY2xhcmF0aW9ucyAqLworCisjaWZkZWYgREVCVUdfVVNCCitzdGF0aWMgdm9pZAorZGJwcmludF91cmIoc3RydWN0IHVyYiogdXJiKTsKKyNlbmRpZgorCitzdGF0aWMgdm9pZAoraGZhMzg0eF9pbnRfcnhtb25pdG9yKAorCXdsYW5kZXZpY2VfdCAqd2xhbmRldiwKKwloZmEzODR4X3VzYl9yeGZybV90ICpyeGZybSk7CisKK3N0YXRpYyB2b2lkCitoZmEzODR4X3VzYl9kZWZlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKmRhdGEpOworCitzdGF0aWMgaW50CitzdWJtaXRfcnhfdXJiKGhmYTM4NHhfdCAqaHcsIGdmcF90IGZsYWdzKTsKKworc3RhdGljIGludAorc3VibWl0X3R4X3VyYihoZmEzODR4X3QgKmh3LCBzdHJ1Y3QgdXJiICp0eF91cmIsIGdmcF90IGZsYWdzKTsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogQ2FsbGJhY2tzICovCisjaWZkZWYgVVJCX09OTFlfQ0FMTEJBQ0sKK3N0YXRpYyB2b2lkCitoZmEzODR4X3VzYm91dF9jYWxsYmFjayhzdHJ1Y3QgdXJiICp1cmIpOworc3RhdGljIHZvaWQKK2hmYTM4NHhfY3RseG91dF9jYWxsYmFjayhzdHJ1Y3QgdXJiICp1cmIpOworc3RhdGljIHZvaWQKK2hmYTM4NHhfdXNiaW5fY2FsbGJhY2soc3RydWN0IHVyYiAqdXJiKTsKKyNlbHNlCitzdGF0aWMgdm9pZAoraGZhMzg0eF91c2JvdXRfY2FsbGJhY2soc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CitzdGF0aWMgdm9pZAoraGZhMzg0eF9jdGx4b3V0X2NhbGxiYWNrKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOworc3RhdGljIHZvaWQKK2hmYTM4NHhfdXNiaW5fY2FsbGJhY2soc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CisjZW5kaWYKKworc3RhdGljIHZvaWQKK2hmYTM4NHhfdXNiaW5fdHhjb21wbCh3bGFuZGV2aWNlX3QgKndsYW5kZXYsIGhmYTM4NHhfdXNiaW5fdCAqdXNiaW4pOworCitzdGF0aWMgdm9pZAoraGZhMzg0eF91c2Jpbl9yeCh3bGFuZGV2aWNlX3QgKndsYW5kZXYsIHN0cnVjdCBza19idWZmICpza2IpOworCitzdGF0aWMgdm9pZAoraGZhMzg0eF91c2Jpbl9pbmZvKHdsYW5kZXZpY2VfdCAqd2xhbmRldiwgaGZhMzg0eF91c2Jpbl90ICp1c2Jpbik7CisKK3N0YXRpYyB2b2lkCitoZmEzODR4X3VzYm91dF90eCh3bGFuZGV2aWNlX3QgKndsYW5kZXYsIGhmYTM4NHhfdXNib3V0X3QgKnVzYm91dCk7CisKK3N0YXRpYyB2b2lkIGhmYTM4NHhfdXNiaW5fY3RseChoZmEzODR4X3QgKmh3LCBoZmEzODR4X3VzYmluX3QgKnVzYmluLAorCQkJICAgICAgIGludCB1cmJfc3RhdHVzKTsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogRnVuY3Rpb25zIHRvIHN1cHBvcnQgdGhlIHByaXNtMiB1c2IgY29tbWFuZCBxdWV1ZSAqLworCitzdGF0aWMgdm9pZAoraGZhMzg0eF91c2JjdGx4cV9ydW4oaGZhMzg0eF90ICpodyk7CisKK3N0YXRpYyB2b2lkCitoZmEzODR4X3VzYmN0bHhfcmVxdGltZXJmbih1bnNpZ25lZCBsb25nIGRhdGEpOworCitzdGF0aWMgdm9pZAoraGZhMzg0eF91c2JjdGx4X3Jlc3B0aW1lcmZuKHVuc2lnbmVkIGxvbmcgZGF0YSk7CisKK3N0YXRpYyB2b2lkCitoZmEzODR4X3VzYl90aHJvdHRsZWZuKHVuc2lnbmVkIGxvbmcgZGF0YSk7CisKK3N0YXRpYyB2b2lkCitoZmEzODR4X3VzYmN0bHhfY29tcGxldGlvbl90YXNrKHVuc2lnbmVkIGxvbmcgZGF0YSk7CisKK3N0YXRpYyB2b2lkCitoZmEzODR4X3VzYmN0bHhfcmVhcGVyX3Rhc2sodW5zaWduZWQgbG9uZyBkYXRhKTsKKworc3RhdGljIGludAoraGZhMzg0eF91c2JjdGx4X3N1Ym1pdChoZmEzODR4X3QgKmh3LCBoZmEzODR4X3VzYmN0bHhfdCAqY3RseCk7CisKK3N0YXRpYyB2b2lkCit1bmxvY2tlZF91c2JjdGx4X2NvbXBsZXRlKGhmYTM4NHhfdCAqaHcsIGhmYTM4NHhfdXNiY3RseF90ICpjdGx4KTsKKworc3RydWN0IHVzYmN0bHhfY29tcGxldG9yCit7CisJaW50ICgqY29tcGxldGUpKHN0cnVjdCB1c2JjdGx4X2NvbXBsZXRvciopOworfTsKK3R5cGVkZWYgc3RydWN0IHVzYmN0bHhfY29tcGxldG9yIHVzYmN0bHhfY29tcGxldG9yX3Q7CisKK3N0YXRpYyBpbnQKK2hmYTM4NHhfdXNiY3RseF9jb21wbGV0ZV9zeW5jKGhmYTM4NHhfdCAqaHcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZmEzODR4X3VzYmN0bHhfdCAqY3RseCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzYmN0bHhfY29tcGxldG9yX3QgKmNvbXBsZXRvcik7CisKK3N0YXRpYyBpbnQKK3VubG9ja2VkX3VzYmN0bHhfY2FuY2VsX2FzeW5jKGhmYTM4NHhfdCAqaHcsIGhmYTM4NHhfdXNiY3RseF90ICpjdGx4KTsKKworc3RhdGljIHZvaWQKK2hmYTM4NHhfY2Jfc3RhdHVzKGhmYTM4NHhfdCAqaHcsIGNvbnN0IGhmYTM4NHhfdXNiY3RseF90ICpjdGx4KTsKKworc3RhdGljIHZvaWQKK2hmYTM4NHhfY2JfcnJpZChoZmEzODR4X3QgKmh3LCBjb25zdCBoZmEzODR4X3VzYmN0bHhfdCAqY3RseCk7CisKK3N0YXRpYyBpbnQKK3VzYmN0bHhfZ2V0X3N0YXR1cyhjb25zdCBoZmEzODR4X3VzYl9jbWRyZXNwX3QgKmNtZHJlc3AsCisgICAgICAgICAgICAgICAgICAgaGZhMzg0eF9jbWRyZXN1bHRfdCAqcmVzdWx0KTsKKworc3RhdGljIHZvaWQKK3VzYmN0bHhfZ2V0X3JyaWRyZXN1bHQoY29uc3QgaGZhMzg0eF91c2JfcnJpZHJlc3BfdCAqcnJpZHJlc3AsCisgICAgICAgICAgICAgICAgICAgICAgIGhmYTM4NHhfcnJpZHJlc3VsdF90ICpyZXN1bHQpOworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiBMb3cgbGV2ZWwgcmVxL3Jlc3AgQ1RMWCBmb3JtYXR0ZXJzIGFuZCBzdWJtaXR0ZXJzICovCitzdGF0aWMgaW50CitoZmEzODR4X2RvY21kKAorCWhmYTM4NHhfdCAqaHcsCisJQ01EX01PREUgbW9kZSwKKwloZmEzODR4X21ldGFjbWRfdCAqY21kLAorCWN0bHhfY21kY2JfdCBjbWRjYiwKKwljdGx4X3VzZXJjYl90IHVzZXJjYiwKKwl2b2lkCSp1c2VyY2JfZGF0YSk7CisKK3N0YXRpYyBpbnQKK2hmYTM4NHhfZG9ycmlkKAorCWhmYTM4NHhfdCAqaHcsCisJQ01EX01PREUgbW9kZSwKKwlVSU5UMTYJcmlkLAorCXZvaWQJKnJpZGRhdGEsCisJVUlOVAlyaWRkYXRhbGVuLAorCWN0bHhfY21kY2JfdCBjbWRjYiwKKwljdGx4X3VzZXJjYl90IHVzZXJjYiwKKwl2b2lkCSp1c2VyY2JfZGF0YSk7CisKK3N0YXRpYyBpbnQKK2hmYTM4NHhfZG93cmlkKAorCWhmYTM4NHhfdCAqaHcsCisJQ01EX01PREUgbW9kZSwKKwlVSU5UMTYJcmlkLAorCXZvaWQJKnJpZGRhdGEsCisJVUlOVAlyaWRkYXRhbGVuLAorCWN0bHhfY21kY2JfdCBjbWRjYiwKKwljdGx4X3VzZXJjYl90IHVzZXJjYiwKKwl2b2lkCSp1c2VyY2JfZGF0YSk7CisKK3N0YXRpYyBpbnQKK2hmYTM4NHhfZG9ybWVtKAorCWhmYTM4NHhfdCAqaHcsCisJQ01EX01PREUgbW9kZSwKKwlVSU5UMTYJcGFnZSwKKwlVSU5UMTYJb2Zmc2V0LAorCXZvaWQJKmRhdGEsCisJVUlOVAlsZW4sCisJY3RseF9jbWRjYl90IGNtZGNiLAorCWN0bHhfdXNlcmNiX3QgdXNlcmNiLAorCXZvaWQJKnVzZXJjYl9kYXRhKTsKKworc3RhdGljIGludAoraGZhMzg0eF9kb3dtZW0oCisJaGZhMzg0eF90ICpodywKKwlDTURfTU9ERSBtb2RlLAorCVVJTlQxNglwYWdlLAorCVVJTlQxNglvZmZzZXQsCisJdm9pZAkqZGF0YSwKKwlVSU5UCWxlbiwKKwljdGx4X2NtZGNiX3QgY21kY2IsCisJY3RseF91c2VyY2JfdCB1c2VyY2IsCisJdm9pZAkqdXNlcmNiX2RhdGEpOworCitzdGF0aWMgaW50CitoZmEzODR4X2lzZ29vZF9wZHJjb2RlKFVJTlQxNiBwZHJjb2RlKTsKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKy8qIEZ1bmN0aW9uIERlZmluaXRpb25zICovCitzdGF0aWMgaW5saW5lIGNvbnN0IGNoYXIqIGN0bHhzdHIoQ1RMWF9TVEFURSBzKQoreworCXN0YXRpYyBjb25zdCBjaGFyKiBjdGx4X3N0cltdID0geworCQkiSW5pdGlhbCBzdGF0ZSIsCisJCSJDb21wbGV0ZSIsCisJCSJSZXF1ZXN0IGZhaWxlZCIsCisJCSJSZXF1ZXN0IHBlbmRpbmciLAorCQkiUmVxdWVzdCBwYWNrZXQgc3VibWl0dGVkIiwKKwkJIlJlcXVlc3QgcGFja2V0IGNvbXBsZXRlZCIsCisJCSJSZXNwb25zZSBwYWNrZXQgY29tcGxldGVkIgorCX07CisKKwlyZXR1cm4gY3RseF9zdHJbc107Cit9OworCisKK3N0YXRpYyBpbmxpbmUgaGZhMzg0eF91c2JjdGx4X3QqCitnZXRfYWN0aXZlX2N0bHgoaGZhMzg0eF90ICpodykKK3sKKwlyZXR1cm4gbGlzdF9lbnRyeShody0+Y3RseHEuYWN0aXZlLm5leHQsIGhmYTM4NHhfdXNiY3RseF90LCBsaXN0KTsKK30KKworCisjaWZkZWYgREVCVUdfVVNCCit2b2lkCitkYnByaW50X3VyYihzdHJ1Y3QgdXJiKiB1cmIpCit7CisJV0xBTl9MT0dfREVCVUcoMywidXJiLT5waXBlPTB4JTA4eFxuIiwgdXJiLT5waXBlKTsKKwlXTEFOX0xPR19ERUJVRygzLCJ1cmItPnN0YXR1cz0weCUwOHhcbiIsIHVyYi0+c3RhdHVzKTsKKwlXTEFOX0xPR19ERUJVRygzLCJ1cmItPnRyYW5zZmVyX2ZsYWdzPTB4JTA4eFxuIiwgdXJiLT50cmFuc2Zlcl9mbGFncyk7CisJV0xBTl9MT0dfREVCVUcoMywidXJiLT50cmFuc2Zlcl9idWZmZXI9MHglMDh4XG4iLCAoVUlOVCl1cmItPnRyYW5zZmVyX2J1ZmZlcik7CisJV0xBTl9MT0dfREVCVUcoMywidXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoPTB4JTA4eFxuIiwgdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoKTsKKwlXTEFOX0xPR19ERUJVRygzLCJ1cmItPmFjdHVhbF9sZW5ndGg9MHglMDh4XG4iLCB1cmItPmFjdHVhbF9sZW5ndGgpOworCVdMQU5fTE9HX0RFQlVHKDMsInVyYi0+YmFuZHdpZHRoPTB4JTA4eFxuIiwgdXJiLT5iYW5kd2lkdGgpOworCVdMQU5fTE9HX0RFQlVHKDMsInVyYi0+c2V0dXBfcGFja2V0KGN0bCk9MHglMDh4XG4iLCAoVUlOVCl1cmItPnNldHVwX3BhY2tldCk7CisJV0xBTl9MT0dfREVCVUcoMywidXJiLT5zdGFydF9mcmFtZShpc28vaXJxKT0weCUwOHhcbiIsIHVyYi0+c3RhcnRfZnJhbWUpOworCVdMQU5fTE9HX0RFQlVHKDMsInVyYi0+aW50ZXJ2YWwoaXJxKT0weCUwOHhcbiIsIHVyYi0+aW50ZXJ2YWwpOworCVdMQU5fTE9HX0RFQlVHKDMsInVyYi0+ZXJyb3JfY291bnQoaXNvKT0weCUwOHhcbiIsIHVyYi0+ZXJyb3JfY291bnQpOworCVdMQU5fTE9HX0RFQlVHKDMsInVyYi0+dGltZW91dD0weCUwOHhcbiIsIHVyYi0+dGltZW91dCk7CisJV0xBTl9MT0dfREVCVUcoMywidXJiLT5jb250ZXh0PTB4JTA4eFxuIiwgKFVJTlQpdXJiLT5jb250ZXh0KTsKKwlXTEFOX0xPR19ERUJVRygzLCJ1cmItPmNvbXBsZXRlPTB4JTA4eFxuIiwgKFVJTlQpdXJiLT5jb21wbGV0ZSk7Cit9CisjZW5kaWYKKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogc3VibWl0X3J4X3VyYgorKgorKiBMaXN0ZW4gZm9yIGlucHV0IGRhdGEgb24gdGhlIEJVTEstSU4gcGlwZS4gSWYgdGhlIHBpcGUgaGFzCisqIHN0YWxsZWQgdGhlbiBzY2hlZHVsZSBpdCB0byBiZSByZXNldC4KKyoKKyogQXJndW1lbnRzOgorKglodwkJZGV2aWNlIHN0cnVjdAorKgltZW1mbGFncwltZW1vcnkgYWxsb2NhdGlvbiBmbGFncworKgorKiBSZXR1cm5zOgorKgllcnJvciBjb2RlIGZyb20gc3VibWlzc2lvbgorKgorKiBDYWxsIGNvbnRleHQ6CisqCUFueQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgaW50CitzdWJtaXRfcnhfdXJiKGhmYTM4NHhfdCAqaHcsIGdmcF90IG1lbWZsYWdzKQoreworCXN0cnVjdCBza19idWZmICpza2I7CisJaW50IHJlc3VsdDsKKworCURCRkVOVEVSOworCisJc2tiID0gZGV2X2FsbG9jX3NrYihzaXplb2YoaGZhMzg0eF91c2Jpbl90KSk7CisJaWYgKHNrYiA9PSBOVUxMKSB7CisJCXJlc3VsdCA9IC1FTk9NRU07CisJCWdvdG8gZG9uZTsKKwl9CisKKwkvKiBQb3N0IHRoZSBJTiB1cmIgKi8KKwl1c2JfZmlsbF9idWxrX3VyYigmaHctPnJ4X3VyYiwgaHctPnVzYiwKKwkgICAgICAgICAgICAgIGh3LT5lbmRwX2luLAorCSAgICAgICAgICAgICAgc2tiLT5kYXRhLCBzaXplb2YoaGZhMzg0eF91c2Jpbl90KSwKKwkgICAgICAgICAgICAgIGhmYTM4NHhfdXNiaW5fY2FsbGJhY2ssIGh3LT53bGFuZGV2KTsKKworCWh3LT5yeF91cmJfc2tiID0gc2tiOworCisJcmVzdWx0ID0gLUVOT0xJTks7CisJaWYgKCAhaHctPndsYW5kZXYtPmh3cmVtb3ZlZCAmJiAhdGVzdF9iaXQoV09SS19SWF9IQUxULCAmaHctPnVzYl9mbGFncykpIHsKKwkJcmVzdWx0ID0gU1VCTUlUX1VSQigmaHctPnJ4X3VyYiwgbWVtZmxhZ3MpOworCisJCS8qIENoZWNrIHdoZXRoZXIgd2UgbmVlZCB0byByZXNldCB0aGUgUlggcGlwZSAqLworCQlpZiAocmVzdWx0ID09IC1FUElQRSkgeworCQkJV0xBTl9MT0dfV0FSTklORygiJXMgcnggcGlwZSBzdGFsbGVkOiByZXF1ZXN0aW5nIHJlc2V0XG4iLAorCQkJICAgICAgICAgICAgICAgICBody0+d2xhbmRldi0+bmV0ZGV2LT5uYW1lKTsKKwkJCWlmICggIXRlc3RfYW5kX3NldF9iaXQoV09SS19SWF9IQUxULCAmaHctPnVzYl9mbGFncykgKQorCQkJCXNjaGVkdWxlX3dvcmsoJmh3LT51c2Jfd29yayk7CisJCX0KKwl9CisKKwkvKiBEb24ndCBsZWFrIG1lbW9yeSBpZiBhbnl0aGluZyBzaG91bGQgZ28gd3JvbmcgKi8KKwlpZiAocmVzdWx0ICE9IDApIHsKKwkJZGV2X2tmcmVlX3NrYihza2IpOworCQlody0+cnhfdXJiX3NrYiA9IE5VTEw7CisJfQorCisgZG9uZToKKworCURCRkVYSVQ7CisJcmV0dXJuIHJlc3VsdDsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIHN1Ym1pdF90eF91cmIKKyoKKyogUHJlcGFyZXMgYW5kIHN1Ym1pdHMgdGhlIFVSQiBvZiB0cmFuc21pdHRlZCBkYXRhLiBJZiB0aGUKKyogc3VibWlzc2lvbiBmYWlscyB0aGVuIGl0IHdpbGwgc2NoZWR1bGUgdGhlIG91dHB1dCBwaXBlIHRvCisqIGJlIHJlc2V0LgorKgorKiBBcmd1bWVudHM6CisqCWh3CQlkZXZpY2Ugc3RydWN0CisqCXR4X3VyYgkJVVJCIG9mIGRhdGEgZm9yIHRyYW5taXNzaW9uCisqCW1lbWZsYWdzCW1lbW9yeSBhbGxvY2F0aW9uIGZsYWdzCisqCisqIFJldHVybnM6CisqCWVycm9yIGNvZGUgZnJvbSBzdWJtaXNzaW9uCisqCisqIENhbGwgY29udGV4dDoKKyoJQW55CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyBpbnQKK3N1Ym1pdF90eF91cmIoaGZhMzg0eF90ICpodywgc3RydWN0IHVyYiAqdHhfdXJiLCBnZnBfdCBtZW1mbGFncykKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gaHctPndsYW5kZXYtPm5ldGRldjsKKwlpbnQgcmVzdWx0OworCisJREJGRU5URVI7CisKKwlyZXN1bHQgPSAtRU5PTElOSzsKKwlpZiAoIG5ldGlmX3J1bm5pbmcobmV0ZGV2KSApIHsKKworCQlpZiAoICFody0+d2xhbmRldi0+aHdyZW1vdmVkICYmICF0ZXN0X2JpdChXT1JLX1RYX0hBTFQsICZody0+dXNiX2ZsYWdzKSApIHsKKwkJCXJlc3VsdCA9IFNVQk1JVF9VUkIodHhfdXJiLCBtZW1mbGFncyk7CisKKwkJCS8qIFRlc3Qgd2hldGhlciB3ZSBuZWVkIHRvIHJlc2V0IHRoZSBUWCBwaXBlICovCisJCQlpZiAocmVzdWx0ID09IC1FUElQRSkgeworCQkJCVdMQU5fTE9HX1dBUk5JTkcoIiVzIHR4IHBpcGUgc3RhbGxlZDogcmVxdWVzdGluZyByZXNldFxuIiwKKwkJCQkgICAgICAgICAgICAgICAgIG5ldGRldi0+bmFtZSk7CisJCQkJc2V0X2JpdChXT1JLX1RYX0hBTFQsICZody0+dXNiX2ZsYWdzKTsKKwkJCQlzY2hlZHVsZV93b3JrKCZody0+dXNiX3dvcmspOworCQkJfSBlbHNlIGlmIChyZXN1bHQgPT0gMCkgeworCQkJCW5ldGlmX3N0b3BfcXVldWUobmV0ZGV2KTsKKwkJCX0KKwkJfQorCX0KKworCURCRkVYSVQ7CisKKwlyZXR1cm4gcmVzdWx0OworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogaGZhMzk0eF91c2JfZGVmZXIKKyoKKyogVGhlcmUgYXJlIHNvbWUgdGhpbmdzIHRoYXQgdGhlIFVTQiBzdGFjayBjYW5ub3QgZG8gd2hpbGUKKyogaW4gaW50ZXJydXB0IGNvbnRleHQsIHNvIHdlIGFycmFuZ2UgdGhpcyBmdW5jdGlvbiB0byBydW4KKyogaW4gcHJvY2VzcyBjb250ZXh0LgorKgorKiBBcmd1bWVudHM6CisqCWh3CWRldmljZSBzdHJ1Y3R1cmUKKyoKKyogUmV0dXJuczoKKyoJbm90aGluZworKgorKiBDYWxsIGNvbnRleHQ6CisqCXByb2Nlc3MgKGJ5IGRlc2lnbikKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIHZvaWQKK2hmYTM4NHhfdXNiX2RlZmVyKHN0cnVjdCB3b3JrX3N0cnVjdCAqZGF0YSkKK3sKKwloZmEzODR4X3QgKmh3ID0gY29udGFpbmVyX29mKGRhdGEsIHN0cnVjdCBoZmEzODR4LCB1c2Jfd29yayk7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IGh3LT53bGFuZGV2LT5uZXRkZXY7CisKKwlEQkZFTlRFUjsKKworCS8qIERvbid0IGJvdGhlciB0cnlpbmcgdG8gcmVzZXQgYW55dGhpbmcgaWYgdGhlIHBsdWcKKwkgKiBoYXMgYmVlbiBwdWxsZWQgLi4uCisJICovCisJaWYgKCBody0+d2xhbmRldi0+aHdyZW1vdmVkICkgeworCQlEQkZFWElUOworCQlyZXR1cm47CisJfQorCisJLyogUmVjZXB0aW9uIGhhcyBzdG9wcGVkOiB0cnkgdG8gcmVzZXQgdGhlIGlucHV0IHBpcGUgKi8KKwlpZiAodGVzdF9iaXQoV09SS19SWF9IQUxULCAmaHctPnVzYl9mbGFncykpIHsKKwkJaW50IHJldDsKKworCQl1c2Jfa2lsbF91cmIoJmh3LT5yeF91cmIpOyAgLyogQ2Fubm90IGJlIGhvbGRpbmcgc3BpbmxvY2shICovCisKKwkJcmV0ID0gdXNiX2NsZWFyX2hhbHQoaHctPnVzYiwgaHctPmVuZHBfaW4pOworCQlpZiAocmV0ICE9IDApIHsKKwkJCXByaW50ayhLRVJOX0VSUgorCQkJICAgICAgICJGYWlsZWQgdG8gY2xlYXIgcnggcGlwZSBmb3IgJXM6IGVycj0lZFxuIiwKKwkJCSAgICAgICBuZXRkZXYtPm5hbWUsIHJldCk7CisJCX0gZWxzZSB7CisJCQlwcmludGsoS0VSTl9JTkZPICIlcyByeCBwaXBlIHJlc2V0IGNvbXBsZXRlLlxuIiwKKwkJCSAgICAgICAgICAgICAgICAgbmV0ZGV2LT5uYW1lKTsKKwkJCWNsZWFyX2JpdChXT1JLX1JYX0hBTFQsICZody0+dXNiX2ZsYWdzKTsKKwkJCXNldF9iaXQoV09SS19SWF9SRVNVTUUsICZody0+dXNiX2ZsYWdzKTsKKwkJfQorCX0KKworCS8qIFJlc3VtZSByZWNlaXZpbmcgZGF0YSBiYWNrIGZyb20gdGhlIGRldmljZS4gKi8KKwlpZiAoIHRlc3RfYml0KFdPUktfUlhfUkVTVU1FLCAmaHctPnVzYl9mbGFncykgKSB7CisJCWludCByZXQ7CisKKwkJcmV0ID0gc3VibWl0X3J4X3VyYihodywgR0ZQX0tFUk5FTCk7CisJCWlmIChyZXQgIT0gMCkgeworCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkgICAgICAgIkZhaWxlZCB0byByZXN1bWUgJXMgcnggcGlwZS5cbiIsIG5ldGRldi0+bmFtZSk7CisJCX0gZWxzZSB7CisJCQljbGVhcl9iaXQoV09SS19SWF9SRVNVTUUsICZody0+dXNiX2ZsYWdzKTsKKwkJfQorCX0KKworCS8qIFRyYW5zbWlzc2lvbiBoYXMgc3RvcHBlZDogdHJ5IHRvIHJlc2V0IHRoZSBvdXRwdXQgcGlwZSAqLworCWlmICh0ZXN0X2JpdChXT1JLX1RYX0hBTFQsICZody0+dXNiX2ZsYWdzKSkgeworCQlpbnQgcmV0OworCisJCXVzYl9raWxsX3VyYigmaHctPnR4X3VyYik7CisJCXJldCA9IHVzYl9jbGVhcl9oYWx0KGh3LT51c2IsIGh3LT5lbmRwX291dCk7CisJCWlmIChyZXQgIT0gMCkgeworCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkgICAgICAgIkZhaWxlZCB0byBjbGVhciB0eCBwaXBlIGZvciAlczogZXJyPSVkXG4iLAorCQkJICAgICAgIG5ldGRldi0+bmFtZSwgcmV0KTsKKwkJfSBlbHNlIHsKKwkJCXByaW50ayhLRVJOX0lORk8gIiVzIHR4IHBpcGUgcmVzZXQgY29tcGxldGUuXG4iLAorCQkJICAgICAgICAgICAgICAgICBuZXRkZXYtPm5hbWUpOworCQkJY2xlYXJfYml0KFdPUktfVFhfSEFMVCwgJmh3LT51c2JfZmxhZ3MpOworCQkJc2V0X2JpdChXT1JLX1RYX1JFU1VNRSwgJmh3LT51c2JfZmxhZ3MpOworCisJCQkvKiBTdG9wcGluZyB0aGUgQlVMSy1PVVQgcGlwZSBhbHNvIGJsb2NrZWQKKwkJCSAqIHVzIGZyb20gc2VuZGluZyBhbnkgbW9yZSBDVExYIFVSQnMsIHNvCisJCQkgKiB3ZSBuZWVkIHRvIHJlLXJ1biBvdXIgcXVldWUgLi4uCisJCQkgKi8KKwkJCWhmYTM4NHhfdXNiY3RseHFfcnVuKGh3KTsKKwkJfQorCX0KKworCS8qIFJlc3VtZSB0cmFuc21pdHRpbmcuICovCisJaWYgKCB0ZXN0X2FuZF9jbGVhcl9iaXQoV09SS19UWF9SRVNVTUUsICZody0+dXNiX2ZsYWdzKSApIHsKKwkJcDgwMjExbmV0ZGV2X3dha2VfcXVldWUoaHctPndsYW5kZXYpOworCX0KKworCURCRkVYSVQ7Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIGhmYTM4NHhfY3JlYXRlCisqCisqIFNldHMgdXAgdGhlIGhmYTM4NHhfdCBkYXRhIHN0cnVjdHVyZSBmb3IgdXNlLiAgTm90ZSB0aGlzCisqIGRvZXMgX25vdF8gaW50aWFsaXplIHRoZSBhY3R1YWwgaGFyZHdhcmUsIGp1c3QgdGhlIGRhdGEgc3RydWN0dXJlcworKiB3ZSB1c2UgdG8ga2VlcCB0cmFjayBvZiBpdHMgc3RhdGUuCisqCisqIEFyZ3VtZW50czoKKyoJaHcJCWRldmljZSBzdHJ1Y3R1cmUKKyoJaXJxCQlkZXZpY2UgaXJxIG51bWJlcgorKglpb2Jhc2UJCWkvbyBiYXNlIGFkZHJlc3MgZm9yIHJlZ2lzdGVyIGFjY2VzcworKgltZW1iYXNlCQltZW1vcnkgYmFzZSBhZGRyZXNzIGZvciByZWdpc3RlciBhY2Nlc3MKKyoKKyogUmV0dXJuczoKKyoJbm90aGluZworKgorKiBTaWRlIGVmZmVjdHM6CisqCisqIENhbGwgY29udGV4dDoKKyoJcHJvY2VzcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCit2b2lkCitoZmEzODR4X2NyZWF0ZSggaGZhMzg0eF90ICpodywgc3RydWN0IHVzYl9kZXZpY2UgKnVzYikKK3sKKwlEQkZFTlRFUjsKKworCW1lbXNldChodywgMCwgc2l6ZW9mKGhmYTM4NHhfdCkpOworCWh3LT51c2IgPSB1c2I7CisKKwkvKiBzZXQgdXAgdGhlIGVuZHBvaW50cyAqLworCWh3LT5lbmRwX2luID0gdXNiX3JjdmJ1bGtwaXBlKHVzYiwgMSk7CisJaHctPmVuZHBfb3V0ID0gdXNiX3NuZGJ1bGtwaXBlKHVzYiwgMik7CisKKwkvKiBTZXQgdXAgdGhlIHdhaXRxICovCisJaW5pdF93YWl0cXVldWVfaGVhZCgmaHctPmNtZHEpOworCisJLyogSW5pdGlhbGl6ZSB0aGUgY29tbWFuZCBxdWV1ZSAqLworCXNwaW5fbG9ja19pbml0KCZody0+Y3RseHEubG9jayk7CisJSU5JVF9MSVNUX0hFQUQoJmh3LT5jdGx4cS5wZW5kaW5nKTsKKwlJTklUX0xJU1RfSEVBRCgmaHctPmN0bHhxLmFjdGl2ZSk7CisJSU5JVF9MSVNUX0hFQUQoJmh3LT5jdGx4cS5jb21wbGV0aW5nKTsKKwlJTklUX0xJU1RfSEVBRCgmaHctPmN0bHhxLnJlYXBhYmxlKTsKKworCS8qIEluaXRpYWxpemUgdGhlIGF1dGhlbnRpY2F0aW9uIHF1ZXVlICovCisJc2tiX3F1ZXVlX2hlYWRfaW5pdCgmaHctPmF1dGhxKTsKKworCXRhc2tsZXRfaW5pdCgmaHctPnJlYXBlcl9iaCwKKwkgICAgICAgICAgICAgaGZhMzg0eF91c2JjdGx4X3JlYXBlcl90YXNrLAorCSAgICAgICAgICAgICAodW5zaWduZWQgbG9uZylodyk7CisJdGFza2xldF9pbml0KCZody0+Y29tcGxldGlvbl9iaCwKKwkgICAgICAgICAgICAgaGZhMzg0eF91c2JjdGx4X2NvbXBsZXRpb25fdGFzaywKKwkgICAgICAgICAgICAgKHVuc2lnbmVkIGxvbmcpaHcpOworCUlOSVRfV09SSzIoJmh3LT5saW5rX2JoLCBwcmlzbTJzdGFfcHJvY2Vzc2luZ19kZWZlcik7CisJSU5JVF9XT1JLMigmaHctPnVzYl93b3JrLCBoZmEzODR4X3VzYl9kZWZlcik7CisKKwlpbml0X3RpbWVyKCZody0+dGhyb3R0bGUpOworCWh3LT50aHJvdHRsZS5mdW5jdGlvbiA9IGhmYTM4NHhfdXNiX3Rocm90dGxlZm47CisJaHctPnRocm90dGxlLmRhdGEgPSAodW5zaWduZWQgbG9uZylodzsKKworCWluaXRfdGltZXIoJmh3LT5yZXNwdGltZXIpOworCWh3LT5yZXNwdGltZXIuZnVuY3Rpb24gPSBoZmEzODR4X3VzYmN0bHhfcmVzcHRpbWVyZm47CisJaHctPnJlc3B0aW1lci5kYXRhID0gKHVuc2lnbmVkIGxvbmcpaHc7CisKKwlpbml0X3RpbWVyKCZody0+cmVxdGltZXIpOworCWh3LT5yZXF0aW1lci5mdW5jdGlvbiA9IGhmYTM4NHhfdXNiY3RseF9yZXF0aW1lcmZuOworCWh3LT5yZXF0aW1lci5kYXRhID0gKHVuc2lnbmVkIGxvbmcpaHc7CisKKwl1c2JfaW5pdF91cmIoJmh3LT5yeF91cmIpOworCXVzYl9pbml0X3VyYigmaHctPnR4X3VyYik7CisJdXNiX2luaXRfdXJiKCZody0+Y3RseF91cmIpOworCisJaHctPmxpbmtfc3RhdHVzID0gSEZBMzg0eF9MSU5LX05PVENPTk5FQ1RFRDsKKwlody0+c3RhdGUgPSBIRkEzODR4X1NUQVRFX0lOSVQ7CisKKyAgICAgICAgSU5JVF9XT1JLMigmaHctPmNvbW1zcXVhbF9iaCwgcHJpc20yc3RhX2NvbW1zcXVhbF9kZWZlcik7CisJaW5pdF90aW1lcigmaHctPmNvbW1zcXVhbF90aW1lcik7CisJaHctPmNvbW1zcXVhbF90aW1lci5kYXRhID0gKHVuc2lnbmVkIGxvbmcpIGh3OworCWh3LT5jb21tc3F1YWxfdGltZXIuZnVuY3Rpb24gPSBwcmlzbTJzdGFfY29tbXNxdWFsX3RpbWVyOworCisJREJGRVhJVDsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogaGZhMzg0eF9kZXN0cm95CisqCisqIFBhcnRuZXIgdG8gaGZhMzg0eF9jcmVhdGUoKS4gIFRoaXMgZnVuY3Rpb24gY2xlYW5zIHVwIHRoZSBodworKiBzdHJ1Y3R1cmUgc28gdGhhdCBpdCBjYW4gYmUgZnJlZWQgYnkgdGhlIGNhbGxlciB1c2luZyBhIHNpbXBsZQorKiBrZnJlZS4gIEN1cnJlbnRseSwgdGhpcyBmdW5jdGlvbiBpcyBqdXN0IGEgcGxhY2Vob2xkZXIuICBJZiwgYXQgc29tZQorKiBwb2ludCBpbiB0aGUgZnV0dXJlLCBhbiBodyBpbiB0aGUgJ3NodXRkb3duJyBzdGF0ZSByZXF1aXJlcyBhICdkZWVwJworKiBrZnJlZSwgdGhpcyBpcyB3aGVyZSBpdCBzaG91bGQgYmUgZG9uZS4gIE5vdGUgdGhhdCBpZiB0aGlzIGZ1bmN0aW9uCisqIGlzIGNhbGxlZCBvbiBhIF9ydW5uaW5nXyBodyBzdHJ1Y3R1cmUsIHRoZSBkcnZyX3N0b3AoKSBmdW5jdGlvbiBpcworKiBjYWxsZWQuCisqCisqIEFyZ3VtZW50czoKKyoJaHcJCWRldmljZSBzdHJ1Y3R1cmUKKyoKKyogUmV0dXJuczoKKyoJbm90aGluZywgdGhpcyBmdW5jdGlvbiBpcyBub3QgYWxsb3dlZCB0byBmYWlsLgorKgorKiBTaWRlIGVmZmVjdHM6CisqCisqIENhbGwgY29udGV4dDoKKyoJcHJvY2VzcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCit2b2lkCitoZmEzODR4X2Rlc3Ryb3koIGhmYTM4NHhfdCAqaHcpCit7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKworCURCRkVOVEVSOworCisJaWYgKCBody0+c3RhdGUgPT0gSEZBMzg0eF9TVEFURV9SVU5OSU5HICkgeworCQloZmEzODR4X2RydnJfc3RvcChodyk7CisJfQorCWh3LT5zdGF0ZSA9IEhGQTM4NHhfU1RBVEVfUFJFSU5JVDsKKworCWlmIChody0+c2NhbnJlc3VsdHMpIHsKKwkJa2ZyZWUoaHctPnNjYW5yZXN1bHRzKTsKKwkJaHctPnNjYW5yZXN1bHRzID0gTlVMTDsKKwl9CisKKwkvKiBOb3cgdG8gY2xlYW4gb3V0IHRoZSBhdXRoIHF1ZXVlICovCisgICAgICAgIHdoaWxlICggKHNrYiA9IHNrYl9kZXF1ZXVlKCZody0+YXV0aHEpKSApIHsKKyAgICAgICAgICAgICAgICBkZXZfa2ZyZWVfc2tiKHNrYik7CisgICAgICAgIH0KKworCURCRkVYSVQ7Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KK3N0YXRpYyBoZmEzODR4X3VzYmN0bHhfdCogdXNiY3RseF9hbGxvYyh2b2lkKQoreworCWhmYTM4NHhfdXNiY3RseF90ICpjdGx4OworCisJY3RseCA9IGttYWxsb2Moc2l6ZW9mKCpjdGx4KSwgaW5faW50ZXJydXB0KCkgPyBHRlBfQVRPTUlDIDogR0ZQX0tFUk5FTCk7CisJaWYgKGN0bHggIT0gTlVMTCkKKwl7CisJCW1lbXNldChjdGx4LCAwLCBzaXplb2YoKmN0bHgpKTsKKwkJaW5pdF9jb21wbGV0aW9uKCZjdGx4LT5kb25lKTsKKwl9CisKKwlyZXR1cm4gY3RseDsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyBpbnQKK3VzYmN0bHhfZ2V0X3N0YXR1cyhjb25zdCBoZmEzODR4X3VzYl9jbWRyZXNwX3QgKmNtZHJlc3AsCisgICAgICAgICAgICAgICAgICAgaGZhMzg0eF9jbWRyZXN1bHRfdCAqcmVzdWx0KQoreworCURCRkVOVEVSOworCisJcmVzdWx0LT5zdGF0dXMgPSBoZmEzODR4Mmhvc3RfMTYoY21kcmVzcC0+c3RhdHVzKTsKKwlyZXN1bHQtPnJlc3AwID0gaGZhMzg0eDJob3N0XzE2KGNtZHJlc3AtPnJlc3AwKTsKKwlyZXN1bHQtPnJlc3AxID0gaGZhMzg0eDJob3N0XzE2KGNtZHJlc3AtPnJlc3AxKTsKKwlyZXN1bHQtPnJlc3AyID0gaGZhMzg0eDJob3N0XzE2KGNtZHJlc3AtPnJlc3AyKTsKKworCVdMQU5fTE9HX0RFQlVHKDQsICJjbWRyZXN1bHQ6c3RhdHVzPTB4JTA0eCAiCisJICAgICAgICAgICAgICAgICAgInJlc3AwPTB4JTA0eCByZXNwMT0weCUwNHggcmVzcDI9MHglMDR4XG4iLAorCSAgICAgICAgICAgICAgICByZXN1bHQtPnN0YXR1cywKKwkgICAgICAgICAgICAgICAgcmVzdWx0LT5yZXNwMCwKKwkgICAgICAgICAgICAgICAgcmVzdWx0LT5yZXNwMSwKKwkgICAgICAgICAgICAgICAgcmVzdWx0LT5yZXNwMik7CisKKwlEQkZFWElUOworCXJldHVybiAocmVzdWx0LT5zdGF0dXMgJiBIRkEzODR4X1NUQVRVU19SRVNVTFQpOworfQorCitzdGF0aWMgdm9pZAordXNiY3RseF9nZXRfcnJpZHJlc3VsdChjb25zdCBoZmEzODR4X3VzYl9ycmlkcmVzcF90ICpycmlkcmVzcCwKKyAgICAgICAgICAgICAgICAgICAgICAgaGZhMzg0eF9ycmlkcmVzdWx0X3QgKnJlc3VsdCkKK3sKKwlEQkZFTlRFUjsKKworCXJlc3VsdC0+cmlkID0gaGZhMzg0eDJob3N0XzE2KHJyaWRyZXNwLT5yaWQpOworCXJlc3VsdC0+cmlkZGF0YSA9IHJyaWRyZXNwLT5kYXRhOworCXJlc3VsdC0+cmlkZGF0YV9sZW4gPSAoKGhmYTM4NHgyaG9zdF8xNihycmlkcmVzcC0+ZnJtbGVuKSAtIDEpICogMik7CisKKwlEQkZFWElUOworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBDb21wbGV0b3Igb2JqZWN0OgorKiBUaGlzIGNvbXBsZXRvciBtdXN0IGJlIHBhc3NlZCB0byBoZmEzODR4X3VzYmN0bHhfY29tcGxldGVfc3luYygpCisqIHdoZW4gcHJvY2Vzc2luZyBhIENUTFggdGhhdCByZXR1cm5zIGEgaGZhMzg0eF9jbWRyZXN1bHRfdCBzdHJ1Y3R1cmUuCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0cnVjdCB1c2JjdGx4X2NtZF9jb21wbGV0b3IKK3sKKwl1c2JjdGx4X2NvbXBsZXRvcl90CWhlYWQ7CisKKwljb25zdCBoZmEzODR4X3VzYl9jbWRyZXNwX3QJKmNtZHJlc3A7CisJaGZhMzg0eF9jbWRyZXN1bHRfdAkqcmVzdWx0OworfTsKK3R5cGVkZWYgc3RydWN0IHVzYmN0bHhfY21kX2NvbXBsZXRvciB1c2JjdGx4X2NtZF9jb21wbGV0b3JfdDsKKworc3RhdGljIGludCB1c2JjdGx4X2NtZF9jb21wbGV0b3JfZm4odXNiY3RseF9jb21wbGV0b3JfdCAqaGVhZCkKK3sKKwl1c2JjdGx4X2NtZF9jb21wbGV0b3JfdCAqY29tcGxldGUgPSAodXNiY3RseF9jbWRfY29tcGxldG9yX3QqKWhlYWQ7CisJcmV0dXJuIHVzYmN0bHhfZ2V0X3N0YXR1cyhjb21wbGV0ZS0+Y21kcmVzcCwgY29tcGxldGUtPnJlc3VsdCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdXNiY3RseF9jb21wbGV0b3JfdCoKK2luaXRfY21kX2NvbXBsZXRvcih1c2JjdGx4X2NtZF9jb21wbGV0b3JfdCAqY29tcGxldG9yLAorICAgICAgICAgICAgICAgICAgIGNvbnN0IGhmYTM4NHhfdXNiX2NtZHJlc3BfdCAqY21kcmVzcCwKKyAgICAgICAgICAgICAgICAgICBoZmEzODR4X2NtZHJlc3VsdF90ICpyZXN1bHQpCit7CisJY29tcGxldG9yLT5oZWFkLmNvbXBsZXRlID0gdXNiY3RseF9jbWRfY29tcGxldG9yX2ZuOworCWNvbXBsZXRvci0+Y21kcmVzcCA9IGNtZHJlc3A7CisJY29tcGxldG9yLT5yZXN1bHQgPSByZXN1bHQ7CisJcmV0dXJuICYoY29tcGxldG9yLT5oZWFkKTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIENvbXBsZXRvciBvYmplY3Q6CisqIFRoaXMgY29tcGxldG9yIG11c3QgYmUgcGFzc2VkIHRvIGhmYTM4NHhfdXNiY3RseF9jb21wbGV0ZV9zeW5jKCkKKyogd2hlbiBwcm9jZXNzaW5nIGEgQ1RMWCB0aGF0IHJlYWRzIGEgUklELgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdHJ1Y3QgdXNiY3RseF9ycmlkX2NvbXBsZXRvcgoreworCXVzYmN0bHhfY29tcGxldG9yX3QJaGVhZDsKKworCWNvbnN0IGhmYTM4NHhfdXNiX3JyaWRyZXNwX3QJKnJyaWRyZXNwOworCXZvaWQJCQkqcmlkZGF0YTsKKwlVSU5UCQkJcmlkZGF0YWxlbjsKK307Cit0eXBlZGVmIHN0cnVjdCB1c2JjdGx4X3JyaWRfY29tcGxldG9yIHVzYmN0bHhfcnJpZF9jb21wbGV0b3JfdDsKKworc3RhdGljIGludCB1c2JjdGx4X3JyaWRfY29tcGxldG9yX2ZuKHVzYmN0bHhfY29tcGxldG9yX3QgKmhlYWQpCit7CisJdXNiY3RseF9ycmlkX2NvbXBsZXRvcl90ICpjb21wbGV0ZSA9ICh1c2JjdGx4X3JyaWRfY29tcGxldG9yX3QqKWhlYWQ7CisJaGZhMzg0eF9ycmlkcmVzdWx0X3QgcnJpZHJlc3VsdDsKKworCXVzYmN0bHhfZ2V0X3JyaWRyZXN1bHQoY29tcGxldGUtPnJyaWRyZXNwLCAmcnJpZHJlc3VsdCk7CisKKwkvKiBWYWxpZGF0ZSB0aGUgbGVuZ3RoLCBub3RlIGJvZHkgbGVuIGNhbGN1bGF0aW9uIGluIGJ5dGVzICovCisJaWYgKCBycmlkcmVzdWx0LnJpZGRhdGFfbGVuICE9IGNvbXBsZXRlLT5yaWRkYXRhbGVuICkgeworCQlXTEFOX0xPR19XQVJOSU5HKAorCQkJIlJJRCBsZW4gbWlzbWF0Y2gsIHJpZD0weCUwNHggaGxlbj0lZCBmd2xlbj0lZFxuIiwKKwkJICAgICAgICBycmlkcmVzdWx0LnJpZCwKKwkJICAgICAgICBjb21wbGV0ZS0+cmlkZGF0YWxlbiwKKwkJICAgICAgICBycmlkcmVzdWx0LnJpZGRhdGFfbGVuKTsKKwkJcmV0dXJuIC1FTk9EQVRBOworCX0KKworCW1lbWNweShjb21wbGV0ZS0+cmlkZGF0YSwKKwkgICAgICAgcnJpZHJlc3VsdC5yaWRkYXRhLAorCSAgICAgICBjb21wbGV0ZS0+cmlkZGF0YWxlbik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgdXNiY3RseF9jb21wbGV0b3JfdCoKK2luaXRfcnJpZF9jb21wbGV0b3IodXNiY3RseF9ycmlkX2NvbXBsZXRvcl90ICpjb21wbGV0b3IsCisgICAgICAgICAgICAgICAgICAgIGNvbnN0IGhmYTM4NHhfdXNiX3JyaWRyZXNwX3QgKnJyaWRyZXNwLAorICAgICAgICAgICAgICAgICAgICB2b2lkICpyaWRkYXRhLAorICAgICAgICAgICAgICAgICAgICBVSU5UIHJpZGRhdGFsZW4pCit7CisJY29tcGxldG9yLT5oZWFkLmNvbXBsZXRlID0gdXNiY3RseF9ycmlkX2NvbXBsZXRvcl9mbjsKKwljb21wbGV0b3ItPnJyaWRyZXNwID0gcnJpZHJlc3A7CisJY29tcGxldG9yLT5yaWRkYXRhID0gcmlkZGF0YTsKKwljb21wbGV0b3ItPnJpZGRhdGFsZW4gPSByaWRkYXRhbGVuOworCXJldHVybiAmKGNvbXBsZXRvci0+aGVhZCk7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBDb21wbGV0b3Igb2JqZWN0OgorKiBJbnRlcnByZXRzIHRoZSByZXN1bHRzIG9mIGEgc3luY2hyb25vdXMgUklELXdyaXRlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3R5cGVkZWYgdXNiY3RseF9jbWRfY29tcGxldG9yX3QgdXNiY3RseF93cmlkX2NvbXBsZXRvcl90OworI2RlZmluZSBpbml0X3dyaWRfY29tcGxldG9yICBpbml0X2NtZF9jb21wbGV0b3IKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIENvbXBsZXRvciBvYmplY3Q6CisqIEludGVycHJldHMgdGhlIHJlc3VsdHMgb2YgYSBzeW5jaHJvbm91cyBtZW1vcnktd3JpdGUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwordHlwZWRlZiB1c2JjdGx4X2NtZF9jb21wbGV0b3JfdCB1c2JjdGx4X3dtZW1fY29tcGxldG9yX3Q7CisjZGVmaW5lIGluaXRfd21lbV9jb21wbGV0b3IgIGluaXRfY21kX2NvbXBsZXRvcgorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogQ29tcGxldG9yIG9iamVjdDoKKyogSW50ZXJwcmV0cyB0aGUgcmVzdWx0cyBvZiBhIHN5bmNocm9ub3VzIG1lbW9yeS1yZWFkCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0cnVjdCB1c2JjdGx4X3JtZW1fY29tcGxldG9yCit7CisgICAgICAgIHVzYmN0bHhfY29tcGxldG9yX3QgICAgICAgICAgIGhlYWQ7CisKKyAgICAgICAgY29uc3QgaGZhMzg0eF91c2Jfcm1lbXJlc3BfdCAgKnJtZW1yZXNwOworICAgICAgICB2b2lkICAgICAgICAgICAgICAgICAgICAgICAgICAqZGF0YTsKKyAgICAgICAgVUlOVCAgICAgICAgICAgICAgICAgICAgICAgICAgbGVuOworfTsKK3R5cGVkZWYgc3RydWN0IHVzYmN0bHhfcm1lbV9jb21wbGV0b3IgdXNiY3RseF9ybWVtX2NvbXBsZXRvcl90OworCitzdGF0aWMgaW50IHVzYmN0bHhfcm1lbV9jb21wbGV0b3JfZm4odXNiY3RseF9jb21wbGV0b3JfdCAqaGVhZCkKK3sKKwl1c2JjdGx4X3JtZW1fY29tcGxldG9yX3QgKmNvbXBsZXRlID0gKHVzYmN0bHhfcm1lbV9jb21wbGV0b3JfdCopaGVhZDsKKworCVdMQU5fTE9HX0RFQlVHKDQsInJtZW1yZXNwOmxlbj0lZFxuIiwgY29tcGxldGUtPnJtZW1yZXNwLT5mcm1sZW4pOworCW1lbWNweShjb21wbGV0ZS0+ZGF0YSwgY29tcGxldGUtPnJtZW1yZXNwLT5kYXRhLCBjb21wbGV0ZS0+bGVuKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSB1c2JjdGx4X2NvbXBsZXRvcl90KgoraW5pdF9ybWVtX2NvbXBsZXRvcih1c2JjdGx4X3JtZW1fY29tcGxldG9yX3QgKmNvbXBsZXRvciwKKyAgICAgICAgICAgICAgICAgICAgaGZhMzg0eF91c2Jfcm1lbXJlc3BfdCAqcm1lbXJlc3AsCisgICAgICAgICAgICAgICAgICAgIHZvaWQgKmRhdGEsCisgICAgICAgICAgICAgICAgICAgIFVJTlQgbGVuKQoreworCWNvbXBsZXRvci0+aGVhZC5jb21wbGV0ZSA9IHVzYmN0bHhfcm1lbV9jb21wbGV0b3JfZm47CisJY29tcGxldG9yLT5ybWVtcmVzcCA9IHJtZW1yZXNwOworCWNvbXBsZXRvci0+ZGF0YSA9IGRhdGE7CisJY29tcGxldG9yLT5sZW4gPSBsZW47CisJcmV0dXJuICYoY29tcGxldG9yLT5oZWFkKTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIGhmYTM4NHhfY2Jfc3RhdHVzCisqCisqIEN0bHhfY29tcGxldGUgaGFuZGxlciBmb3IgYXN5bmMgQ01EIHR5cGUgY29udHJvbCBleGNoYW5nZXMuCisqIG1hcmsgdGhlIGh3IHN0cnVjdCBhcyBzdWNoLgorKgorKiBOb3RlOiBJZiB0aGUgaGFuZGxpbmcgaXMgY2hhbmdlZCBoZXJlLCBpdCBzaG91bGQgcHJvYmFibHkgYmUKKyogICAgICAgY2hhbmdlZCBpbiBkb2NtZCBhcyB3ZWxsLgorKgorKiBBcmd1bWVudHM6CisqCWh3CQlodyBzdHJ1Y3QKKyoJY3RseAkJY29tcGxldGVkIENUTFgKKyoKKyogUmV0dXJuczoKKyoJbm90aGluZworKgorKiBTaWRlIGVmZmVjdHM6CisqCisqIENhbGwgY29udGV4dDoKKyoJaW50ZXJydXB0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyB2b2lkCitoZmEzODR4X2NiX3N0YXR1cyhoZmEzODR4X3QgKmh3LCBjb25zdCBoZmEzODR4X3VzYmN0bHhfdCAqY3RseCkKK3sKKwlEQkZFTlRFUjsKKworCWlmICggY3RseC0+dXNlcmNiICE9IE5VTEwgKSB7CisJCWhmYTM4NHhfY21kcmVzdWx0X3QgY21kcmVzdWx0OworCisJCWlmIChjdGx4LT5zdGF0ZSAhPSBDVExYX0NPTVBMRVRFKSB7CisJCQltZW1zZXQoJmNtZHJlc3VsdCwgMCwgc2l6ZW9mKGNtZHJlc3VsdCkpOworCQkJY21kcmVzdWx0LnN0YXR1cyA9IEhGQTM4NHhfU1RBVFVTX1JFU1VMVF9TRVQoSEZBMzg0eF9DTURfRVJSKTsKKwkJfSBlbHNlIHsKKwkJCXVzYmN0bHhfZ2V0X3N0YXR1cygmY3RseC0+aW5idWYuY21kcmVzcCwgJmNtZHJlc3VsdCk7CisJCX0KKworCQljdGx4LT51c2VyY2IoaHcsICZjbWRyZXN1bHQsIGN0bHgtPnVzZXJjYl9kYXRhKTsKKwl9CisKKwlEQkZFWElUOworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBoZmEzODR4X2NiX3JyaWQKKyoKKyogQ1RMWCBjb21wbGV0aW9uIGhhbmRsZXIgZm9yIGFzeW5jIFJSSUQgdHlwZSBjb250cm9sIGV4Y2hhbmdlcy4KKyoKKyogTm90ZTogSWYgdGhlIGhhbmRsaW5nIGlzIGNoYW5nZWQgaGVyZSwgaXQgc2hvdWxkIHByb2JhYmx5IGJlCisqICAgICAgIGNoYW5nZWQgaW4gZG9ycmlkIGFzIHdlbGwuCisqCisqIEFyZ3VtZW50czoKKyoJaHcJCWh3IHN0cnVjdAorKgljdGx4CQljb21wbGV0ZWQgQ1RMWAorKgorKiBSZXR1cm5zOgorKglub3RoaW5nCisqCisqIFNpZGUgZWZmZWN0czoKKyoKKyogQ2FsbCBjb250ZXh0OgorKglpbnRlcnJ1cHQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIHZvaWQKK2hmYTM4NHhfY2JfcnJpZChoZmEzODR4X3QgKmh3LCBjb25zdCBoZmEzODR4X3VzYmN0bHhfdCAqY3RseCkKK3sKKwlEQkZFTlRFUjsKKworCWlmICggY3RseC0+dXNlcmNiICE9IE5VTEwgKSB7CisJCWhmYTM4NHhfcnJpZHJlc3VsdF90IHJyaWRyZXN1bHQ7CisKKwkJaWYgKGN0bHgtPnN0YXRlICE9IENUTFhfQ09NUExFVEUpIHsKKwkJCW1lbXNldCgmcnJpZHJlc3VsdCwgMCwgc2l6ZW9mKHJyaWRyZXN1bHQpKTsKKwkJCXJyaWRyZXN1bHQucmlkID0gaGZhMzg0eDJob3N0XzE2KGN0bHgtPm91dGJ1Zi5ycmlkcmVxLnJpZCk7CisJCX0gZWxzZSB7CisJCQl1c2JjdGx4X2dldF9ycmlkcmVzdWx0KCZjdGx4LT5pbmJ1Zi5ycmlkcmVzcCwgJnJyaWRyZXN1bHQpOworCQl9CisKKwkJY3RseC0+dXNlcmNiKGh3LCAmcnJpZHJlc3VsdCwgY3RseC0+dXNlcmNiX2RhdGEpOworCX0KKworCURCRkVYSVQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50CitoZmEzODR4X2RvY21kX3dhaXQoaGZhMzg0eF90ICpodywgaGZhMzg0eF9tZXRhY21kX3QgKmNtZCkKK3sKKwlyZXR1cm4gaGZhMzg0eF9kb2NtZChodywgRE9XQUlULCBjbWQsIE5VTEwsIE5VTEwsIE5VTEwpOworfQorCitzdGF0aWMgaW5saW5lIGludAoraGZhMzg0eF9kb2NtZF9hc3luYyhoZmEzODR4X3QgKmh3LAorICAgICAgICAgICAgICAgICAgICBoZmEzODR4X21ldGFjbWRfdCAqY21kLAorICAgICAgICAgICAgICAgICAgICBjdGx4X2NtZGNiX3QgY21kY2IsCisgICAgICAgICAgICAgICAgICAgIGN0bHhfdXNlcmNiX3QgdXNlcmNiLAorICAgICAgICAgICAgICAgICAgICB2b2lkICp1c2VyY2JfZGF0YSkKK3sKKwlyZXR1cm4gaGZhMzg0eF9kb2NtZChodywgRE9BU1lOQywgY21kLAorCSAgICAgICAgICAgICAgICAgICAgICAgIGNtZGNiLCB1c2VyY2IsIHVzZXJjYl9kYXRhKTsKK30KKworc3RhdGljIGlubGluZSBpbnQKK2hmYTM4NHhfZG9ycmlkX3dhaXQoaGZhMzg0eF90ICpodywgVUlOVDE2IHJpZCwgdm9pZCAqcmlkZGF0YSwgVUlOVCByaWRkYXRhbGVuKQoreworCXJldHVybiBoZmEzODR4X2RvcnJpZChodywgRE9XQUlULAorCSAgICAgICAgICAgICAgICAgICAgICByaWQsIHJpZGRhdGEsIHJpZGRhdGFsZW4sCisJICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIE5VTEwsIE5VTEwpOworfQorCitzdGF0aWMgaW5saW5lIGludAoraGZhMzg0eF9kb3JyaWRfYXN5bmMoaGZhMzg0eF90ICpodywKKyAgICAgICAgICAgICAgICAgICAgIFVJTlQxNiByaWQsIHZvaWQgKnJpZGRhdGEsIFVJTlQgcmlkZGF0YWxlbiwKKyAgICAgICAgICAgICAgICAgICAgIGN0bHhfY21kY2JfdCBjbWRjYiwKKyAgICAgICAgICAgICAgICAgICAgIGN0bHhfdXNlcmNiX3QgdXNlcmNiLAorICAgICAgICAgICAgICAgICAgICAgdm9pZCAqdXNlcmNiX2RhdGEpCit7CisJcmV0dXJuIGhmYTM4NHhfZG9ycmlkKGh3LCBET0FTWU5DLAorCSAgICAgICAgICAgICAgICAgICAgICByaWQsIHJpZGRhdGEsIHJpZGRhdGFsZW4sCisJICAgICAgICAgICAgICAgICAgICAgIGNtZGNiLCB1c2VyY2IsIHVzZXJjYl9kYXRhKTsKK30KKworc3RhdGljIGlubGluZSBpbnQKK2hmYTM4NHhfZG93cmlkX3dhaXQoaGZhMzg0eF90ICpodywgVUlOVDE2IHJpZCwgdm9pZCAqcmlkZGF0YSwgVUlOVCByaWRkYXRhbGVuKQoreworCXJldHVybiBoZmEzODR4X2Rvd3JpZChodywgRE9XQUlULAorCSAgICAgICAgICAgICAgICAgICAgICByaWQsIHJpZGRhdGEsIHJpZGRhdGFsZW4sCisJICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIE5VTEwsIE5VTEwpOworfQorCitzdGF0aWMgaW5saW5lIGludAoraGZhMzg0eF9kb3dyaWRfYXN5bmMoaGZhMzg0eF90ICpodywKKyAgICAgICAgICAgICAgICAgICAgIFVJTlQxNiByaWQsIHZvaWQgKnJpZGRhdGEsIFVJTlQgcmlkZGF0YWxlbiwKKyAgICAgICAgICAgICAgICAgICAgIGN0bHhfY21kY2JfdCBjbWRjYiwKKyAgICAgICAgICAgICAgICAgICAgIGN0bHhfdXNlcmNiX3QgdXNlcmNiLAorICAgICAgICAgICAgICAgICAgICAgdm9pZCAqdXNlcmNiX2RhdGEpCit7CisJcmV0dXJuIGhmYTM4NHhfZG93cmlkKGh3LCBET0FTWU5DLAorCSAgICAgICAgICAgICAgICAgICAgICByaWQsIHJpZGRhdGEsIHJpZGRhdGFsZW4sCisJICAgICAgICAgICAgICAgICAgICAgIGNtZGNiLCB1c2VyY2IsIHVzZXJjYl9kYXRhKTsKK30KKworc3RhdGljIGlubGluZSBpbnQKK2hmYTM4NHhfZG9ybWVtX3dhaXQoaGZhMzg0eF90ICpodywKKyAgICAgICAgICAgICAgICAgICAgVUlOVDE2IHBhZ2UsIFVJTlQxNiBvZmZzZXQsIHZvaWQgKmRhdGEsIFVJTlQgbGVuKQoreworCXJldHVybiBoZmEzODR4X2Rvcm1lbShodywgRE9XQUlULAorCSAgICAgICAgICAgICAgICAgICAgICBwYWdlLCBvZmZzZXQsIGRhdGEsIGxlbiwKKwkgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgTlVMTCwgTlVMTCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50CitoZmEzODR4X2Rvcm1lbV9hc3luYyhoZmEzODR4X3QgKmh3LAorICAgICAgICAgICAgICAgICAgICAgVUlOVDE2IHBhZ2UsIFVJTlQxNiBvZmZzZXQsIHZvaWQgKmRhdGEsIFVJTlQgbGVuLAorICAgICAgICAgICAgICAgICAgICAgY3RseF9jbWRjYl90IGNtZGNiLAorICAgICAgICAgICAgICAgICAgICAgY3RseF91c2VyY2JfdCB1c2VyY2IsCisgICAgICAgICAgICAgICAgICAgICB2b2lkICp1c2VyY2JfZGF0YSkKK3sKKwlyZXR1cm4gaGZhMzg0eF9kb3JtZW0oaHcsIERPQVNZTkMsCisJICAgICAgICAgICAgICAgICAgICAgIHBhZ2UsIG9mZnNldCwgZGF0YSwgbGVuLAorCSAgICAgICAgICAgICAgICAgICAgICBjbWRjYiwgdXNlcmNiLCB1c2VyY2JfZGF0YSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50CitoZmEzODR4X2Rvd21lbV93YWl0KAorICAgICAgICBoZmEzODR4X3QgKmh3LAorICAgICAgICBVSU5UMTYgIHBhZ2UsCisgICAgICAgIFVJTlQxNiAgb2Zmc2V0LAorICAgICAgICB2b2lkICAgICpkYXRhLAorICAgICAgICBVSU5UICAgIGxlbikKK3sKKwlyZXR1cm4gaGZhMzg0eF9kb3dtZW0oaHcsIERPV0FJVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWdlLCBvZmZzZXQsIGRhdGEsIGxlbiwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIE5VTEwsIE5VTEwpOworfQorCitzdGF0aWMgaW5saW5lIGludAoraGZhMzg0eF9kb3dtZW1fYXN5bmMoCisgICAgICAgIGhmYTM4NHhfdCAqaHcsCisgICAgICAgIFVJTlQxNiAgcGFnZSwKKyAgICAgICAgVUlOVDE2ICBvZmZzZXQsCisgICAgICAgIHZvaWQgICAgKmRhdGEsCisgICAgICAgIFVJTlQgICAgbGVuLAorICAgICAgICBjdGx4X2NtZGNiX3QgY21kY2IsCisgICAgICAgIGN0bHhfdXNlcmNiX3QgdXNlcmNiLAorICAgICAgICB2b2lkICAgICp1c2VyY2JfZGF0YSkKK3sKKwlyZXR1cm4gaGZhMzg0eF9kb3dtZW0oaHcsIERPQVNZTkMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFnZSwgb2Zmc2V0LCBkYXRhLCBsZW4sCisJICAgICAgICAgICAgICAgICAgICAgICAgICBjbWRjYiwgdXNlcmNiLCB1c2VyY2JfZGF0YSk7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBoZmEzODR4X2NtZF9pbml0aWFsaXplCisqCisqIElzc3VlcyB0aGUgaW5pdGlhbGl6ZSBjb21tYW5kIGFuZCBzZXRzIHRoZSBody0+c3RhdGUgYmFzZWQKKyogb24gdGhlIHJlc3VsdC4KKyoKKyogQXJndW1lbnRzOgorKglodwkJZGV2aWNlIHN0cnVjdHVyZQorKgorKiBSZXR1cm5zOgorKgkwCQlzdWNjZXNzCisqCT4wCQlmL3cgcmVwb3J0ZWQgZXJyb3IgLSBmL3cgc3RhdHVzIGNvZGUKKyoJPDAJCWRyaXZlciByZXBvcnRlZCBlcnJvcgorKgorKiBTaWRlIGVmZmVjdHM6CisqCisqIENhbGwgY29udGV4dDoKKyoJcHJvY2VzcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitpbnQKK2hmYTM4NHhfY21kX2luaXRpYWxpemUoaGZhMzg0eF90ICpodykKK3sKKwlpbnQJcmVzdWx0ID0gMDsKKwlpbnQJaTsKKwloZmEzODR4X21ldGFjbWRfdCBjbWQ7CisKKwlEQkZFTlRFUjsKKworCisJY21kLmNtZCA9IEhGQTM4NHhfQ01EQ09ERV9JTklUOworCWNtZC5wYXJtMCA9IDA7CisJY21kLnBhcm0xID0gMDsKKwljbWQucGFybTIgPSAwOworCisJcmVzdWx0ID0gaGZhMzg0eF9kb2NtZF93YWl0KGh3LCAmY21kKTsKKworCisJV0xBTl9MT0dfREVCVUcoMywiY21kcmVzcC5pbml0OiAiCisJCSJzdGF0dXM9MHglMDR4LCByZXNwMD0weCUwNHgsICIKKwkJInJlc3AxPTB4JTA0eCwgcmVzcDI9MHglMDR4XG4iLAorCQljbWQucmVzdWx0LnN0YXR1cywKKwkJY21kLnJlc3VsdC5yZXNwMCwKKwkJY21kLnJlc3VsdC5yZXNwMSwKKwkJY21kLnJlc3VsdC5yZXNwMik7CisJaWYgKCByZXN1bHQgPT0gMCApIHsKKwkJZm9yICggaSA9IDA7IGkgPCBIRkEzODR4X05VTVBPUlRTX01BWDsgaSsrKSB7CisJCQlody0+cG9ydF9lbmFibGVkW2ldID0gMDsKKwkJfQorCX0KKworICAgICAgICBody0+bGlua19zdGF0dXMgPSBIRkEzODR4X0xJTktfTk9UQ09OTkVDVEVEOworCisJREJGRVhJVDsKKwlyZXR1cm4gcmVzdWx0OworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBoZmEzODR4X2NtZF9kaXNhYmxlCisqCisqIElzc3VlcyB0aGUgZGlzYWJsZSBjb21tYW5kIHRvIHN0b3AgY29tbXVuaWNhdGlvbnMgb24gb25lIG9mCisqIHRoZSBNQUNzICdwb3J0cycuCisqCisqIEFyZ3VtZW50czoKKyoJaHcJCWRldmljZSBzdHJ1Y3R1cmUKKyoJbWFjcG9ydAkJTUFDIHBvcnQgbnVtYmVyIChob3N0IG9yZGVyKQorKgorKiBSZXR1cm5zOgorKgkwCQlzdWNjZXNzCisqCT4wCQlmL3cgcmVwb3J0ZWQgZmFpbHVyZSAtIGYvdyBzdGF0dXMgY29kZQorKgk8MAkJZHJpdmVyIHJlcG9ydGVkIGVycm9yICh0aW1lb3V0fGJhZCBhcmcpCisqCisqIFNpZGUgZWZmZWN0czoKKyoKKyogQ2FsbCBjb250ZXh0OgorKglwcm9jZXNzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK2ludCBoZmEzODR4X2NtZF9kaXNhYmxlKGhmYTM4NHhfdCAqaHcsIFVJTlQxNiBtYWNwb3J0KQoreworCWludAlyZXN1bHQgPSAwOworCWhmYTM4NHhfbWV0YWNtZF90IGNtZDsKKworCURCRkVOVEVSOworCisJY21kLmNtZCA9IEhGQTM4NHhfQ01EX0NNRENPREVfU0VUKEhGQTM4NHhfQ01EQ09ERV9ESVNBQkxFKSB8CisJCSAgSEZBMzg0eF9DTURfTUFDUE9SVF9TRVQobWFjcG9ydCk7CisJY21kLnBhcm0wID0gMDsKKwljbWQucGFybTEgPSAwOworCWNtZC5wYXJtMiA9IDA7CisKKwlyZXN1bHQgPSBoZmEzODR4X2RvY21kX3dhaXQoaHcsICZjbWQpOworCisJREJGRVhJVDsKKwlyZXR1cm4gcmVzdWx0OworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBoZmEzODR4X2NtZF9lbmFibGUKKyoKKyogSXNzdWVzIHRoZSBlbmFibGUgY29tbWFuZCB0byBlbmFibGUgY29tbXVuaWNhdGlvbnMgb24gb25lIG9mCisqIHRoZSBNQUNzICdwb3J0cycuCisqCisqIEFyZ3VtZW50czoKKyoJaHcJCWRldmljZSBzdHJ1Y3R1cmUKKyoJbWFjcG9ydAkJTUFDIHBvcnQgbnVtYmVyCisqCisqIFJldHVybnM6CisqCTAJCXN1Y2Nlc3MKKyoJPjAJCWYvdyByZXBvcnRlZCBmYWlsdXJlIC0gZi93IHN0YXR1cyBjb2RlCisqCTwwCQlkcml2ZXIgcmVwb3J0ZWQgZXJyb3IgKHRpbWVvdXR8YmFkIGFyZykKKyoKKyogU2lkZSBlZmZlY3RzOgorKgorKiBDYWxsIGNvbnRleHQ6CisqCXByb2Nlc3MKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworaW50IGhmYTM4NHhfY21kX2VuYWJsZShoZmEzODR4X3QgKmh3LCBVSU5UMTYgbWFjcG9ydCkKK3sKKwlpbnQJcmVzdWx0ID0gMDsKKwloZmEzODR4X21ldGFjbWRfdCBjbWQ7CisKKwlEQkZFTlRFUjsKKworCWNtZC5jbWQgPSBIRkEzODR4X0NNRF9DTURDT0RFX1NFVChIRkEzODR4X0NNRENPREVfRU5BQkxFKSB8CisJCSAgSEZBMzg0eF9DTURfTUFDUE9SVF9TRVQobWFjcG9ydCk7CisJY21kLnBhcm0wID0gMDsKKwljbWQucGFybTEgPSAwOworCWNtZC5wYXJtMiA9IDA7CisKKwlyZXN1bHQgPSBoZmEzODR4X2RvY21kX3dhaXQoaHcsICZjbWQpOworCisJREJGRVhJVDsKKwlyZXR1cm4gcmVzdWx0OworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBoZmEzODR4X2NtZF9ub3RpZnkKKyoKKyogU2VuZHMgYW4gaW5mbyBmcmFtZSB0byB0aGUgZmlybXdhcmUgdG8gYWx0ZXIgdGhlIGJlaGF2aW9yCisqIG9mIHRoZSBmL3cgYXN5bmNoIHByb2Nlc3Nlcy4gIENhbiBvbmx5IGJlIGNhbGxlZCB3aGVuIHRoZSBNQUMKKyogaXMgaW4gdGhlIGVuYWJsZWQgc3RhdGUuCisqCisqIEFyZ3VtZW50czoKKyoJaHcJCWRldmljZSBzdHJ1Y3R1cmUKKyoJcmVjbGFpbQkJWzB8MV0gaW5kaWNhdGVzIHdoZXRoZXIgdGhlIGdpdmVuIEZJRCB3aWxsCisqCQkJYmUgaGFuZGVkIGJhY2sgKHZpYSBBbGxvYyBldmVudCkgZm9yIHJldXNlLgorKgkJCShob3N0IG9yZGVyKQorKglmaWQJCUZJRCBvZiBidWZmZXIgY29udGFpbmluZyB0aGUgZnJhbWUgdGhhdCB3YXMKKyoJCQlwcmV2aW91c2x5IGNvcGllZCB0byBNQUMgbWVtb3J5IHZpYSB0aGUgYmFwLgorKgkJCShob3N0IG9yZGVyKQorKgorKiBSZXR1cm5zOgorKgkwCQlzdWNjZXNzCisqCT4wCQlmL3cgcmVwb3J0ZWQgZmFpbHVyZSAtIGYvdyBzdGF0dXMgY29kZQorKgk8MAkJZHJpdmVyIHJlcG9ydGVkIGVycm9yICh0aW1lb3V0fGJhZCBhcmcpCisqCisqIFNpZGUgZWZmZWN0czoKKyoJaHctPnJlc3AwIHdpbGwgY29udGFpbiB0aGUgRklEIGJlaW5nIHVzZWQgYnkgYXN5bmMgbm90aWZ5CisqCXByb2Nlc3MuICBJZiByZWNsYWltPT0wLCByZXNwMCB3aWxsIGJlIHRoZSBzYW1lIGFzIHRoZSBmaWQKKyoJYXJndW1lbnQuICBJZiByZWNsYWltPT0xLCByZXNwMCB3aWxsIGJlIHRoZSBkaWZmZXJlbnQuCisqCisqIENhbGwgY29udGV4dDoKKyoJcHJvY2VzcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitpbnQgaGZhMzg0eF9jbWRfbm90aWZ5KGhmYTM4NHhfdCAqaHcsIFVJTlQxNiByZWNsYWltLCBVSU5UMTYgZmlkLAorCQkgICAgICAgdm9pZCAqYnVmLCBVSU5UMTYgbGVuKQoreworI2lmIDAKKwlpbnQJcmVzdWx0ID0gMDsKKwlVSU5UMTYJY21kOworCURCRkVOVEVSOworCWNtZCA9CUhGQTM4NHhfQ01EX0NNRENPREVfU0VUKEhGQTM4NHhfQ01EQ09ERV9OT1RJRlkpIHwKKwkJSEZBMzg0eF9DTURfUkVDTF9TRVQocmVjbGFpbSk7CisJcmVzdWx0ID0gaGZhMzg0eF9kb2NtZF93YWl0KGh3LCBjbWQpOworCisJREJGRVhJVDsKKwlyZXR1cm4gcmVzdWx0OworI2VuZGlmCityZXR1cm4gMDsKK30KKworCisjaWYgMAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIGhmYTM4NHhfY21kX2lucXVpcnkKKyoKKyogUmVxdWVzdHMgYW4gaW5mbyBmcmFtZSBmcm9tIHRoZSBmaXJtd2FyZS4gIFRoZSBpbmZvIGZyYW1lIHdpbGwKKyogYmUgZGVsaXZlcmVkIGFzeW5jaHJvbm91c2x5IHZpYSB0aGUgSW5mbyBldmVudC4KKyoKKyogQXJndW1lbnRzOgorKglodwkJZGV2aWNlIHN0cnVjdHVyZQorKglmaWQJCUZJRCBvZiB0aGUgaW5mbyBmcmFtZSByZXF1ZXN0ZWQuIChob3N0IG9yZGVyKQorKgorKiBSZXR1cm5zOgorKgkwCQlzdWNjZXNzCisqCT4wCQlmL3cgcmVwb3J0ZWQgZmFpbHVyZSAtIGYvdyBzdGF0dXMgY29kZQorKgk8MAkJZHJpdmVyIHJlcG9ydGVkIGVycm9yICh0aW1lb3V0fGJhZCBhcmcpCisqCisqIFNpZGUgZWZmZWN0czoKKyoKKyogQ2FsbCBjb250ZXh0OgorKglwcm9jZXNzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK2ludCBoZmEzODR4X2NtZF9pbnF1aXJ5KGhmYTM4NHhfdCAqaHcsIFVJTlQxNiBmaWQpCit7CisJaW50CXJlc3VsdCA9IDA7CisJaGZhMzg0eF9tZXRhY21kX3QgY21kOworCisJREJGRU5URVI7CisKKwljbWQuY21kID0gSEZBMzg0eF9DTURfQ01EQ09ERV9TRVQoSEZBMzg0eF9DTURDT0RFX0lOUSk7CisJY21kLnBhcm0wID0gMDsKKwljbWQucGFybTEgPSAwOworCWNtZC5wYXJtMiA9IDA7CisKKwlyZXN1bHQgPSBoZmEzODR4X2RvY21kX3dhaXQoaHcsICZjbWQpOworCisJREJGRVhJVDsKKwlyZXR1cm4gcmVzdWx0OworfQorI2VuZGlmCisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIGhmYTM4NHhfY21kX21vbml0b3IKKyoKKyogRW5hYmxlcyB0aGUgJ21vbml0b3IgbW9kZScgb2YgdGhlIE1BQy4gIEhlcmUncyB0aGUgZGVzY3JpcHRpb24gb2YKKyogbW9uaXRvciBtb2RlIHRoYXQgSSd2ZSByZWNlaXZlZCB0aHVzIGZhcjoKKyoKKyogICJUaGUgIm1vbml0b3IgbW9kZSIgb2Ygb3BlcmF0aW9uIGlzIHRoYXQgdGhlIE1BQyBwYXNzZXMgYWxsCisqICBmcmFtZXMgZm9yIHdoaWNoIHRoZSBQTENQIGNoZWNrcyBhcmUgY29ycmVjdC4gQWxsIHJlY2VpdmVkCisqICBNUERVcyBhcmUgcGFzc2VkIHRvIHRoZSBob3N0IHdpdGggTUFDIFBvcnQgPSA3LCB3aXRoIGEKKyogIHJlY2VpdmUgc3RhdHVzIG9mIGdvb2QsIEZDUyBlcnJvciwgb3IgdW5kZWNyeXB0YWJsZS4gUGFzc2luZworKiAgY2VydGFpbiBNUERVcyBpcyBhIHZpb2xhdGlvbiBvZiB0aGUgODAyLjExIHN0YW5kYXJkLCBidXQgdXNlZnVsCisqICBmb3IgYSBkZWJ1Z2dpbmcgdG9vbC4iICBOb3JtYWwgY29tbXVuaWNhdGlvbiBpcyBub3QgcG9zc2libGUKKyogIHdoaWxlIG1vbml0b3IgbW9kZSBpcyBlbmFibGVkLgorKgorKiBBcmd1bWVudHM6CisqCWh3CQlkZXZpY2Ugc3RydWN0dXJlCisqCWVuYWJsZQkJYSBjb2RlICgweDBifDB4MGYpIHRoYXQgZW5hYmxlcy9kaXNhYmxlcworKgkJCW1vbml0b3IgbW9kZS4gKGhvc3Qgb3JkZXIpCisqCisqIFJldHVybnM6CisqCTAJCXN1Y2Nlc3MKKyoJPjAJCWYvdyByZXBvcnRlZCBmYWlsdXJlIC0gZi93IHN0YXR1cyBjb2RlCisqCTwwCQlkcml2ZXIgcmVwb3J0ZWQgZXJyb3IgKHRpbWVvdXR8YmFkIGFyZykKKyoKKyogU2lkZSBlZmZlY3RzOgorKgorKiBDYWxsIGNvbnRleHQ6CisqCXByb2Nlc3MKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworaW50IGhmYTM4NHhfY21kX21vbml0b3IoaGZhMzg0eF90ICpodywgVUlOVDE2IGVuYWJsZSkKK3sKKwlpbnQJcmVzdWx0ID0gMDsKKwloZmEzODR4X21ldGFjbWRfdCBjbWQ7CisKKwlEQkZFTlRFUjsKKworCWNtZC5jbWQgPSBIRkEzODR4X0NNRF9DTURDT0RFX1NFVChIRkEzODR4X0NNRENPREVfTU9OSVRPUikgfAorCQlIRkEzODR4X0NNRF9BSU5GT19TRVQoZW5hYmxlKTsKKwljbWQucGFybTAgPSAwOworCWNtZC5wYXJtMSA9IDA7CisJY21kLnBhcm0yID0gMDsKKworCXJlc3VsdCA9IGhmYTM4NHhfZG9jbWRfd2FpdChodywgJmNtZCk7CisKKwlEQkZFWElUOworCXJldHVybiByZXN1bHQ7Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIGhmYTM4NHhfY21kX2Rvd25sb2FkCisqCisqIFNldHMgdGhlIGNvbnRyb2xzIGZvciB0aGUgTUFDIGNvbnRyb2xsZXIgY29kZS9kYXRhIGRvd25sb2FkCisqIHByb2Nlc3MuICBUaGUgYXJndW1lbnRzIHNldCB0aGUgbW9kZSBhbmQgYWRkcmVzcyBhc3NvY2lhdGVkCisqIHdpdGggYSBkb3dubG9hZC4gIE5vdGUgdGhhdCB0aGUgYXV4IHJlZ2lzdGVycyBzaG91bGQgYmUgZW5hYmxlZAorKiBwcmlvciB0byBzZXR0aW5nIG9uZSBvZiB0aGUgZG93bmxvYWQgZW5hYmxlIG1vZGVzLgorKgorKiBBcmd1bWVudHM6CisqCWh3CQlkZXZpY2Ugc3RydWN0dXJlCisqCW1vZGUJCTAgLSBEaXNhYmxlIHByb2dyYW1taW5nIGFuZCBiZWdpbiBjb2RlIGV4ZWMKKyoJCQkxIC0gRW5hYmxlIHZvbGF0aWxlIG1lbSBwcm9ncmFtbWluZworKgkJCTIgLSBFbmFibGUgbm9uLXZvbGF0aWxlIG1lbSBwcm9ncmFtbWluZworKgkJCTMgLSBQcm9ncmFtIG5vbi12b2xhdGlsZSBzZWN0aW9uIGZyb20gTlYgZG93bmxvYWQKKyoJCQkgICAgYnVmZmVyLgorKgkJCShob3N0IG9yZGVyKQorKglsb3dhZGRyCisqCWhpZ2hhZGRyCUZvciBtb2RlIDEsIHNldHMgdGhlIGhpZ2ggJiBsb3cgb3JkZXIgYml0cyBvZgorKgkJCXRoZSAiZGVzdGluYXRpb24gYWRkcmVzcyIuICBUaGlzIGFkZHJlc3Mgd2lsbCBiZQorKgkJCXRoZSBleGVjdXRpb24gc3RhcnQgYWRkcmVzcyB3aGVuIGRvd25sb2FkIGlzCisqCQkJc3Vic2VxdWVudGx5IGRpc2FibGVkLgorKgkJCUZvciBtb2RlIDIsIHNldHMgdGhlIGhpZ2ggJiBsb3cgb3JkZXIgYml0cyBvZgorKgkJCXRoZSBkZXN0aW5hdGlvbiBpbiBOViByYW0uCisqCQkJRm9yIG1vZGVzIDAgJiAzLCBzaG91bGQgYmUgemVyby4gKGhvc3Qgb3JkZXIpCisqCQkJTk9URTogdGhlc2UgYXJlIENNRCBmb3JtYXQuCisqCWNvZGVsZW4JCUxlbmd0aCBvZiB0aGUgZGF0YSB0byB3cml0ZSBpbiBtb2RlIDIsCisqCQkJemVybyBvdGhlcndpc2UuIChob3N0IG9yZGVyKQorKgorKiBSZXR1cm5zOgorKgkwCQlzdWNjZXNzCisqCT4wCQlmL3cgcmVwb3J0ZWQgZmFpbHVyZSAtIGYvdyBzdGF0dXMgY29kZQorKgk8MAkJZHJpdmVyIHJlcG9ydGVkIGVycm9yICh0aW1lb3V0fGJhZCBhcmcpCisqCisqIFNpZGUgZWZmZWN0czoKKyoKKyogQ2FsbCBjb250ZXh0OgorKglwcm9jZXNzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK2ludCBoZmEzODR4X2NtZF9kb3dubG9hZChoZmEzODR4X3QgKmh3LCBVSU5UMTYgbW9kZSwgVUlOVDE2IGxvd2FkZHIsCisJCQkJVUlOVDE2IGhpZ2hhZGRyLCBVSU5UMTYgY29kZWxlbikKK3sKKwlpbnQJcmVzdWx0ID0gMDsKKwloZmEzODR4X21ldGFjbWRfdCBjbWQ7CisKKwlEQkZFTlRFUjsKKwlXTEFOX0xPR19ERUJVRyg1LAorCQkibW9kZT0lZCwgbG93YWRkcj0weCUwNHgsIGhpZ2hhZGRyPTB4JTA0eCwgY29kZWxlbj0lZFxuIiwKKwkJbW9kZSwgbG93YWRkciwgaGlnaGFkZHIsIGNvZGVsZW4pOworCisJY21kLmNtZCA9IChIRkEzODR4X0NNRF9DTURDT0RFX1NFVChIRkEzODR4X0NNRENPREVfRE9XTkxEKSB8CisJCSAgIEhGQTM4NHhfQ01EX1BST0dNT0RFX1NFVChtb2RlKSk7CisKKwljbWQucGFybTAgPSBsb3dhZGRyOworCWNtZC5wYXJtMSA9IGhpZ2hhZGRyOworCWNtZC5wYXJtMiA9IGNvZGVsZW47CisKKwlyZXN1bHQgPSBoZmEzODR4X2RvY21kX3dhaXQoaHcsICZjbWQpOworCisJREJGRVhJVDsKKwlyZXR1cm4gcmVzdWx0OworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBoZmEzODR4X2NvcHlfZnJvbV9hdXgKKyoKKyogQ29waWVzIGEgY29sbGVjdGlvbiBvZiBieXRlcyBmcm9tIHRoZSBjb250cm9sbGVyIG1lbW9yeS4gIFRoZQorKiBBdXhpbGlhcnkgcG9ydCBNVVNUIGJlIGVuYWJsZWQgcHJpb3IgdG8gY2FsbGluZyB0aGlzIGZ1bmN0aW9uLgorKiBXZSBfbWlnaHRfIGJlIGluIGEgZG93bmxvYWQgc3RhdGUuCisqCisqIEFyZ3VtZW50czoKKyoJaHcJCWRldmljZSBzdHJ1Y3R1cmUKKyoJY2FyZGFkZHIJYWRkcmVzcyBpbiBoZmEzODR4IGRhdGEgc3BhY2UgdG8gcmVhZAorKglhdXhjdGwJCWFkZHJlc3Mgc3BhY2Ugc2VsZWN0CisqCWJ1ZgkJcHRyIHRvIGRlc3RpbmF0aW9uIGhvc3QgYnVmZmVyCisqCWxlbgkJbGVuZ3RoIG9mIGRhdGEgdG8gdHJhbnNmZXIgKGluIGJ5dGVzKQorKgorKiBSZXR1cm5zOgorKglub3RoaW5nCisqCisqIFNpZGUgZWZmZWN0czoKKyoJYnVmIGNvbnRhaW5zIHRoZSBkYXRhIGNvcGllZAorKgorKiBDYWxsIGNvbnRleHQ6CisqCXByb2Nlc3MKKyoJaW50ZXJydXB0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3ZvaWQKK2hmYTM4NHhfY29weV9mcm9tX2F1eCgKKwloZmEzODR4X3QgKmh3LCBVSU5UMzIgY2FyZGFkZHIsIFVJTlQzMiBhdXhjdGwsIHZvaWQgKmJ1ZiwgVUlOVCBsZW4pCit7CisJREJGRU5URVI7CisJV0xBTl9MT0dfRVJST1IoIm5vdCB1c2VkIGluIFVTQi5cbiIpOworCURCRkVYSVQ7Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIGhmYTM4NHhfY29weV90b19hdXgKKyoKKyogQ29waWVzIGEgY29sbGVjdGlvbiBvZiBieXRlcyB0byB0aGUgY29udHJvbGxlciBtZW1vcnkuICBUaGUKKyogQXV4aWxpYXJ5IHBvcnQgTVVTVCBiZSBlbmFibGVkIHByaW9yIHRvIGNhbGxpbmcgdGhpcyBmdW5jdGlvbi4KKyogV2UgX21pZ2h0XyBiZSBpbiBhIGRvd25sb2FkIHN0YXRlLgorKgorKiBBcmd1bWVudHM6CisqCWh3CQlkZXZpY2Ugc3RydWN0dXJlCisqCWNhcmRhZGRyCWFkZHJlc3MgaW4gaGZhMzg0eCBkYXRhIHNwYWNlIHRvIHJlYWQKKyoJYXV4Y3RsCQlhZGRyZXNzIHNwYWNlIHNlbGVjdAorKglidWYJCXB0ciB0byBkZXN0aW5hdGlvbiBob3N0IGJ1ZmZlcgorKglsZW4JCWxlbmd0aCBvZiBkYXRhIHRvIHRyYW5zZmVyIChpbiBieXRlcykKKyoKKyogUmV0dXJuczoKKyoJbm90aGluZworKgorKiBTaWRlIGVmZmVjdHM6CisqCUNvbnRyb2xsZXIgbWVtb3J5IG5vdyBjb250YWlucyBhIGNvcHkgb2YgYnVmCisqCisqIENhbGwgY29udGV4dDoKKyoJcHJvY2VzcworKglpbnRlcnJ1cHQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwordm9pZAoraGZhMzg0eF9jb3B5X3RvX2F1eCgKKwloZmEzODR4X3QgKmh3LCBVSU5UMzIgY2FyZGFkZHIsIFVJTlQzMiBhdXhjdGwsIHZvaWQgKmJ1ZiwgVUlOVCBsZW4pCit7CisJREJGRU5URVI7CisJV0xBTl9MT0dfRVJST1IoIm5vdCB1c2VkIGluIFVTQi5cbiIpOworCURCRkVYSVQ7Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIGhmYTM4NHhfY29yZXJlc2V0CisqCisqIFBlcmZvcm0gYSByZXNldCBvZiB0aGUgaGZhMzh4eCBNQUMgY29yZS4gIFdlIGFzc3VtZSB0aGF0IHRoZSBodworKiBzdHJ1Y3R1cmUgaXMgaW4gaXRzICJjcmVhdGVkIiBzdGF0ZS4gIFRoYXQgaXMsIGl0IGlzIGluaXRpYWxpemVkCisqIHdpdGggcHJvcGVyIHZhbHVlcy4gIE5vdGUgdGhhdCBpZiBhIHJlc2V0IGlzIGRvbmUgYWZ0ZXIgdGhlCisqIGRldmljZSBoYXMgYmVlbiBhY3RpdmUgZm9yIGF3aGlsZSwgdGhlIGNhbGxlciBtaWdodCBoYXZlIHRvIGNsZWFuCisqIHVwIHNvbWUgbGVmdG92ZXIgY3J1ZnQgaW4gdGhlIGh3IHN0cnVjdHVyZS4KKyoKKyogQXJndW1lbnRzOgorKglodwkJZGV2aWNlIHN0cnVjdHVyZQorKglob2xkdGltZQlob3cgbG9uZyAoaW4gbXMpIHRvIGhvbGQgdGhlIHJlc2V0CisqCXNldHRsZXRpbWUJaG93IGxvbmcgKGluIG1zKSB0byB3YWl0IGFmdGVyIHJlbGVhc2luZworKgkJCXRoZSByZXNldAorKgorKiBSZXR1cm5zOgorKglub3RoaW5nCisqCisqIFNpZGUgZWZmZWN0czoKKyoKKyogQ2FsbCBjb250ZXh0OgorKglwcm9jZXNzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK2ludCBoZmEzODR4X2NvcmVyZXNldChoZmEzODR4X3QgKmh3LCBpbnQgaG9sZHRpbWUsIGludCBzZXR0bGV0aW1lLCBpbnQgZ2VuZXNpcykKK3sKKyNpZiAwCisjaWYgKExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDIsNSwwKSkKKwlzdHJ1Y3QgdXNiX2RldmljZQkqcGFyZW50ID0gaHctPnVzYi0+cGFyZW50OworCWludAkJCWk7CisJaW50CQkJcG9ydCA9IC0xOworI2VuZGlmCisjZW5kaWYKKwlpbnQgCQkJcmVzdWx0ID0gMDsKKworCisjZGVmaW5lIFAyX1VTQl9SVF9QT1JUCQkoVVNCX1RZUEVfQ0xBU1MgfCBVU0JfUkVDSVBfT1RIRVIpCisjZGVmaW5lIFAyX1VTQl9GRUFUX1JFU0VUCTQKKyNkZWZpbmUgUDJfVVNCX0ZFQVRfQ19SRVNFVAkyMAorCisJREJGRU5URVI7CisKKyNpZiAwCisjaWYgKExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDIsNSwwKSkKKwkvKiBGaW5kIHRoZSBodWIgcG9ydCAqLworCWZvciAoIGkgPSAwOyBpIDwgcGFyZW50LT5tYXhjaGlsZDsgaSsrKSB7CisJCWlmIChwYXJlbnQtPmNoaWxkcmVuW2ldID09IGh3LT51c2IpIHsKKwkJCXBvcnQgPSBpOworCQkJYnJlYWs7CisJCX0KKwl9CisJaWYgKHBvcnQgPCAwKSByZXR1cm4gLUVOT0VOVDsKKworCS8qIFNldCBhbmQgY2xlYXIgdGhlIHJlc2V0ICovCisJdXNiX2NvbnRyb2xfbXNnKHBhcmVudCwgdXNiX3NuZGN0cmxwaXBlKHBhcmVudCwgMCksCisJCVVTQl9SRVFfU0VUX0ZFQVRVUkUsIFAyX1VTQl9SVF9QT1JULCBQMl9VU0JfRkVBVF9SRVNFVCwKKwkJcG9ydCsxLCBOVUxMLCAwLCAxKkhaKTsKKwl3YWl0X21zKGhvbGR0aW1lKTsKKwl1c2JfY29udHJvbF9tc2cocGFyZW50LCB1c2Jfc25kY3RybHBpcGUocGFyZW50LCAwKSwKKwkJVVNCX1JFUV9DTEVBUl9GRUFUVVJFLCBQMl9VU0JfUlRfUE9SVCwgUDJfVVNCX0ZFQVRfQ19SRVNFVCwKKwkJcG9ydCsxLCBOVUxMLCAwLCAxKkhaKTsKKwl3YWl0X21zKHNldHRsZXRpbWUpOworCisJLyogU2V0IHRoZSBkZXZpY2UgYWRkcmVzcyAqLworCXJlc3VsdD11c2Jfc2V0X2FkZHJlc3MoaHctPnVzYik7CisJaWYgKHJlc3VsdCA8IDApIHsKKwkJV0xBTl9MT0dfRVJST1IoInJlc2V0X3VzYmRldjogRGV2IG5vdCBhY2NlcHRpbmcgYWRkcmVzcywgIgorCQkJInJlc3VsdD0lZFxuIiwgcmVzdWx0KTsKKwkJY2xlYXJfYml0KGh3LT51c2ItPmRldm51bSwgJmh3LT51c2ItPmJ1cy0+ZGV2bWFwLmRldmljZW1hcCk7CisJCWh3LT51c2ItPmRldm51bSA9IC0xOworCQlnb3RvIGRvbmU7CisJfQorCS8qIExldCB0aGUgYWRkcmVzcyBzZXR0bGUgKi8KKwl3YWl0X21zKDIwKTsKKworCS8qIEFzc3VtZSB3ZSdyZSByZXVzaW5nIHRoZSBvcmlnaW5hbCBkZXNjcmlwdG9yIGRhdGEgKi8KKworCS8qIFNldCB0aGUgY29uZmlndXJhdGlvbi4gKi8KKwlXTEFOX0xPR19ERUJVRygzLCAiU2V0dGluZyBDb25maWd1cmF0aW9uICVkXG4iLAorCQlody0+dXNiLT5jb25maWdbMF0uYkNvbmZpZ3VyYXRpb25WYWx1ZSk7CisJcmVzdWx0PXVzYl9zZXRfY29uZmlndXJhdGlvbihody0+dXNiLCBody0+dXNiLT5jb25maWdbMF0uYkNvbmZpZ3VyYXRpb25WYWx1ZSk7CisJaWYgKCByZXN1bHQgKSB7CisJCVdMQU5fTE9HX0VSUk9SKCJ1c2Jfc2V0X2NvbmZpZ3VyYXRpb24oKSBmYWlsZWQsIHJlc3VsdD0lZC5cbiIsCisJCQkJcmVzdWx0KTsKKwkJZ290byBkb25lOworCX0KKwkvKiBMZXQgdGhlIGNvbmZpZ3VyYXRpb24gc2V0dGxlICovCisJd2FpdF9tcygyMCk7CisKKyBkb25lOgorI2Vsc2UKKwlyZXN1bHQ9dXNiX3Jlc2V0X2RldmljZShody0+dXNiKTsKKwlpZihyZXN1bHQ8MCkgeworCQlXTEFOX0xPR19FUlJPUigidXNiX3Jlc2V0X2RldmljZSgpIGZhaWxlZCwgcmVzdWx0PSVkLlxuIixyZXN1bHQpOworCX0KKyNlbmRpZgorI2VuZGlmCisKKwlyZXN1bHQ9dXNiX3Jlc2V0X2RldmljZShody0+dXNiKTsKKwlpZihyZXN1bHQ8MCkgeworCQlXTEFOX0xPR19FUlJPUigidXNiX3Jlc2V0X2RldmljZSgpIGZhaWxlZCwgcmVzdWx0PSVkLlxuIixyZXN1bHQpOworCX0KKworCURCRkVYSVQ7CisJcmV0dXJuIHJlc3VsdDsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogaGZhMzg0eF91c2JjdGx4X2NvbXBsZXRlX3N5bmMKKyoKKyogV2FpdHMgZm9yIGEgc3luY2hyb25vdXMgQ1RMWCBvYmplY3QgdG8gY29tcGxldGUsCisqIGFuZCB0aGVuIGhhbmRsZXMgdGhlIHJlc3BvbnNlLgorKgorKiBBcmd1bWVudHM6CisqCWh3CQlkZXZpY2Ugc3RydWN0dXJlCisqCWN0bHgJIAlDVExYIHB0cgorKgljb21wbGV0b3IJZnVuY3RvciBvYmplY3QgdG8gZGVjaWRlIHdoYXQgdG8KKyoJCQlkbyB3aXRoIHRoZSBDVExYJ3MgcmVzdWx0LgorKgorKiBSZXR1cm5zOgorKgkwCQlTdWNjZXNzCisqCS1FUkVTVEFSVFNZUwlJbnRlcnJ1cHRlZCBieSBhIHNpZ25hbAorKgktRUlPCQlDVExYIGZhaWxlZAorKgktRU5PREVWCQlBZGFwdGVyIHdhcyB1bnBsdWdnZWQKKyoJPz8/CQlSZXN1bHQgZnJvbSBjb21wbGV0b3IKKyoKKyogU2lkZSBlZmZlY3RzOgorKgorKiBDYWxsIGNvbnRleHQ6CisqCXByb2Nlc3MKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIGludCBoZmEzODR4X3VzYmN0bHhfY29tcGxldGVfc3luYyhoZmEzODR4X3QgKmh3LAorCQkJCQkgaGZhMzg0eF91c2JjdGx4X3QgKmN0bHgsCisJCQkJCSB1c2JjdGx4X2NvbXBsZXRvcl90ICpjb21wbGV0b3IpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgcmVzdWx0OworCisJREJGRU5URVI7CisKKwlyZXN1bHQgPSB3YWl0X2Zvcl9jb21wbGV0aW9uX2ludGVycnVwdGlibGUoJmN0bHgtPmRvbmUpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmh3LT5jdGx4cS5sb2NrLCBmbGFncyk7CisKKwkvKgorCSAqIFdlIGNhbiBvbmx5IGhhbmRsZSB0aGUgQ1RMWCBpZiB0aGUgVVNCIGRpc2Nvbm5lY3QKKwkgKiBmdW5jdGlvbiBoYXMgbm90IHJ1biB5ZXQgLi4uCisJICovCisJY2xlYW51cDoKKwlpZiAoIGh3LT53bGFuZGV2LT5od3JlbW92ZWQgKQorCXsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaHctPmN0bHhxLmxvY2ssIGZsYWdzKTsKKwkJcmVzdWx0ID0gLUVOT0RFVjsKKwl9CisJZWxzZSBpZiAoIHJlc3VsdCAhPSAwICkKKwl7CisJCWludCBydW5xdWV1ZSA9IDA7CisKKwkJLyoKKwkJICogV2Ugd2VyZSBwcm9iYWJseSBpbnRlcnJ1cHRlZCwgc28gZGVsZXRlCisJCSAqIHRoaXMgQ1RMWCBhc3luY2hyb25vdXNseSwga2lsbCB0aGUgdGltZXJzCisJCSAqIGFuZCB0aGUgVVJCLCBhbmQgdGhlbiBzdGFydCB0aGUgbmV4dAorCQkgKiBwZW5kaW5nIENUTFguCisJCSAqCisJCSAqIE5PVEU6IFdlIGNhbiBvbmx5IGRlbGV0ZSB0aGUgdGltZXJzIGFuZAorCQkgKiAgICAgICB0aGUgVVJCIGlmIHRoaXMgQ1RMWCBpcyBhY3RpdmUuCisJCSAqLworCQlpZiAoY3RseCA9PSBnZXRfYWN0aXZlX2N0bHgoaHcpKQorCQl7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZody0+Y3RseHEubG9jaywgZmxhZ3MpOworCisJCQlkZWxfc2luZ2xlc2hvdF90aW1lcl9zeW5jKCZody0+cmVxdGltZXIpOworCQkJZGVsX3NpbmdsZXNob3RfdGltZXJfc3luYygmaHctPnJlc3B0aW1lcik7CisJCQlody0+cmVxX3RpbWVyX2RvbmUgPSAxOworCQkJaHctPnJlc3BfdGltZXJfZG9uZSA9IDE7CisJCQl1c2Jfa2lsbF91cmIoJmh3LT5jdGx4X3VyYik7CisKKwkJCXNwaW5fbG9ja19pcnFzYXZlKCZody0+Y3RseHEubG9jaywgZmxhZ3MpOworCisJCQlydW5xdWV1ZSA9IDE7CisKKwkJCS8qCisJCQkgKiBUaGlzIHNjZW5hcmlvIGlzIHNvIHVubGlrZWx5IHRoYXQgSSdtCisJCQkgKiBoYXBweSB3aXRoIGEgZ3J1YmJ5ICJnb3RvIiBzb2x1dGlvbiAuLi4KKwkJCSAqLworCQkJaWYgKCBody0+d2xhbmRldi0+aHdyZW1vdmVkICkKKwkJCQlnb3RvIGNsZWFudXA7CisJCX0KKworCQkvKgorCQkgKiBUaGUgY29tcGxldGlvbiB0YXNrIHdpbGwgc2VuZCB0aGlzIENUTFgKKwkJICogdG8gdGhlIHJlYXBlciB0aGUgbmV4dCB0aW1lIGl0IHJ1bnMuIFdlCisJCSAqIGFyZSBubyBsb25nZXIgaW4gYSBodXJyeS4KKwkJICovCisJCWN0bHgtPnJlYXBhYmxlID0gMTsKKwkJY3RseC0+c3RhdGUgPSBDVExYX1JFUV9GQUlMRUQ7CisJCWxpc3RfbW92ZV90YWlsKCZjdGx4LT5saXN0LCAmaHctPmN0bHhxLmNvbXBsZXRpbmcpOworCisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmh3LT5jdGx4cS5sb2NrLCBmbGFncyk7CisKKwkJaWYgKHJ1bnF1ZXVlKQorCQkJaGZhMzg0eF91c2JjdGx4cV9ydW4oaHcpOworCX0gZWxzZSB7CisJCWlmIChjdGx4LT5zdGF0ZSA9PSBDVExYX0NPTVBMRVRFKSB7CisJCQlyZXN1bHQgPSBjb21wbGV0b3ItPmNvbXBsZXRlKGNvbXBsZXRvcik7CisJCX0gZWxzZSB7CisJCQlXTEFOX0xPR19XQVJOSU5HKCJDVExYWyVkXSBlcnJvcjogc3RhdGUoJXMpXG4iLAorCQkJICAgICAgICAgICAgICAgICBoZmEzODR4Mmhvc3RfMTYoY3RseC0+b3V0YnVmLnR5cGUpLAorCQkJICAgICAgICAgICAgICAgICBjdGx4c3RyKGN0bHgtPnN0YXRlKSk7CisJCQlyZXN1bHQgPSAtRUlPOworCQl9CisKKwkJbGlzdF9kZWwoJmN0bHgtPmxpc3QpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZody0+Y3RseHEubG9jaywgZmxhZ3MpOworCQlrZnJlZShjdGx4KTsKKwl9CisKKwlEQkZFWElUOworCXJldHVybiByZXN1bHQ7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBoZmEzODR4X2RvY21kCisqCisqIENvbnN0cnVjdHMgYSBjb21tYW5kIENUTFggYW5kIHN1Ym1pdHMgaXQuCisqCisqIE5PVEU6IEFueSBjaGFuZ2VzIHRvIHRoZSAncG9zdC1zdWJtaXQnIGNvZGUgaW4gdGhpcyBmdW5jdGlvbgorKiAgICAgICBuZWVkIHRvIGJlIGNhcnJpZWQgb3ZlciB0byBoZmEzODR4X2NiY21kKCkgc2luY2UgdGhlIGhhbmRsaW5nCisqICAgICAgIGlzIHZpcnR1YWxseSBpZGVudGljYWwuCisqCisqIEFyZ3VtZW50czoKKyoJaHcJCWRldmljZSBzdHJ1Y3R1cmUKKyoJbW9kZQkJRE9XQUlUIG9yIERPQVNZTkMKKyogICAgICAgY21kICAgICAgICAgICAgIGNtZCBzdHJ1Y3R1cmUuICBJbmNsdWRlcyBhbGwgYXJndW1lbnRzIGFuZCByZXN1bHQKKyogICAgICAgICAgICAgICAgICAgICAgIGRhdGEgcG9pbnRzLiAgQWxsIGluIGhvc3Qgb3JkZXIuIGluIGhvc3Qgb3JkZXIKKyoJY21kY2IJCWNvbW1hbmQtc3BlY2lmaWMgY2FsbGJhY2sKKyoJdXNlcmNiCQl1c2VyIGNhbGxiYWNrIGZvciBhc3luYyBjYWxscywgTlVMTCBmb3IgRE9XQUlUIGNhbGxzCisqCXVzZXJjYl9kYXRhCXVzZXIgc3VwcGxpZWQgZGF0YSBwb2ludGVyIGZvciBhc3luYyBjYWxscywgTlVMTAorKgkJCWZvciBET0FTWU5DIGNhbGxzCisqCisqIFJldHVybnM6CisqCTAJCXN1Y2Nlc3MKKyoJLUVJTwkJQ1RMWCBmYWlsdXJlCisqCS1FUkVTVEFSVFNZUwlBd2FrZW5lZCBvbiBzaWduYWwKKyoJPjAJCWNvbW1hbmQgaW5kaWNhdGVkIGVycm9yLCBTdGF0dXMgYW5kIFJlc3AwLTIgYXJlCisqCQkJaW4gaHcgc3RydWN0dXJlLgorKgorKiBTaWRlIGVmZmVjdHM6CisqCisqCisqIENhbGwgY29udGV4dDoKKyoJcHJvY2VzcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgaW50CitoZmEzODR4X2RvY21kKAorCWhmYTM4NHhfdCAqaHcsCisJQ01EX01PREUgbW9kZSwKKwloZmEzODR4X21ldGFjbWRfdCAqY21kLAorCWN0bHhfY21kY2JfdAljbWRjYiwKKwljdGx4X3VzZXJjYl90CXVzZXJjYiwKKwl2b2lkCSp1c2VyY2JfZGF0YSkKK3sKKwlpbnQJCQlyZXN1bHQ7CisJaGZhMzg0eF91c2JjdGx4X3QJKmN0bHg7CisKKwlEQkZFTlRFUjsKKwljdGx4ID0gdXNiY3RseF9hbGxvYygpOworCWlmICggY3RseCA9PSBOVUxMICkgeworCQlyZXN1bHQgPSAtRU5PTUVNOworCQlnb3RvIGRvbmU7CisJfQorCisJLyogSW5pdGlhbGl6ZSB0aGUgY29tbWFuZCAqLworCWN0bHgtPm91dGJ1Zi5jbWRyZXEudHlwZSA9IAlob3N0MmhmYTM4NHhfMTYoSEZBMzg0eF9VU0JfQ01EUkVRKTsKKwljdGx4LT5vdXRidWYuY21kcmVxLmNtZCA9CWhvc3QyaGZhMzg0eF8xNihjbWQtPmNtZCk7CisJY3RseC0+b3V0YnVmLmNtZHJlcS5wYXJtMCA9CWhvc3QyaGZhMzg0eF8xNihjbWQtPnBhcm0wKTsKKwljdGx4LT5vdXRidWYuY21kcmVxLnBhcm0xID0JaG9zdDJoZmEzODR4XzE2KGNtZC0+cGFybTEpOworCWN0bHgtPm91dGJ1Zi5jbWRyZXEucGFybTIgPQlob3N0MmhmYTM4NHhfMTYoY21kLT5wYXJtMik7CisKKwljdGx4LT5vdXRidWZzaXplID0gc2l6ZW9mKGN0bHgtPm91dGJ1Zi5jbWRyZXEpOworCisJV0xBTl9MT0dfREVCVUcoNCwgImNtZHJlcTogY21kPTB4JTA0eCAiCisJCSJwYXJtMD0weCUwNHggcGFybTE9MHglMDR4IHBhcm0yPTB4JTA0eFxuIiwKKwkJY21kLT5jbWQsCisJCWNtZC0+cGFybTAsCisJCWNtZC0+cGFybTEsCisJCWNtZC0+cGFybTIpOworCisJY3RseC0+cmVhcGFibGUgPSBtb2RlOworCWN0bHgtPmNtZGNiID0gY21kY2I7CisJY3RseC0+dXNlcmNiID0gdXNlcmNiOworCWN0bHgtPnVzZXJjYl9kYXRhID0gdXNlcmNiX2RhdGE7CisKKwlyZXN1bHQgPSBoZmEzODR4X3VzYmN0bHhfc3VibWl0KGh3LCBjdGx4KTsKKwlpZiAocmVzdWx0ICE9IDApIHsKKwkJa2ZyZWUoY3RseCk7CisJfSBlbHNlIGlmIChtb2RlID09IERPV0FJVCkgeworCQl1c2JjdGx4X2NtZF9jb21wbGV0b3JfdCBjb21wbGV0b3I7CisKKwkJcmVzdWx0ID0gaGZhMzg0eF91c2JjdGx4X2NvbXBsZXRlX3N5bmMoCisJCSAgICAgICAgICAgICBodywgY3RseCwgaW5pdF9jbWRfY29tcGxldG9yKCZjb21wbGV0b3IsCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZjdGx4LT5pbmJ1Zi5jbWRyZXNwLAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmY21kLT5yZXN1bHQpICk7CisJfQorCitkb25lOgorCURCRkVYSVQ7CisJcmV0dXJuIHJlc3VsdDsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogaGZhMzg0eF9kb3JyaWQKKyoKKyogQ29uc3RydWN0cyBhIHJlYWQgcmlkIENUTFggYW5kIGlzc3VlcyBpdC4KKyoKKyogTk9URTogQW55IGNoYW5nZXMgdG8gdGhlICdwb3N0LXN1Ym1pdCcgY29kZSBpbiB0aGlzIGZ1bmN0aW9uCisqICAgICAgIG5lZWQgdG8gYmUgY2FycmllZCBvdmVyIHRvIGhmYTM4NHhfY2JycmlkKCkgc2luY2UgdGhlIGhhbmRsaW5nCisqICAgICAgIGlzIHZpcnR1YWxseSBpZGVudGljYWwuCisqCisqIEFyZ3VtZW50czoKKyoJaHcJCWRldmljZSBzdHJ1Y3R1cmUKKyoJbW9kZQkJRE9XQUlUIG9yIERPQVNZTkMKKyoJcmlkCQlSZWFkIFJJRCBudW1iZXIgKGhvc3Qgb3JkZXIpCisqCXJpZGRhdGEJCUNhbGxlciBzdXBwbGllZCBidWZmZXIgdGhhdCBNQUMgZm9ybWF0dGVkIFJJRC5kYXRhCisqCQkJcmVjb3JkIHdpbGwgYmUgd3JpdHRlbiB0byBmb3IgRE9XQUlUIGNhbGxzLiBTaG91bGQKKyoJCQliZSBOVUxMIGZvciBET0FTWU5DIGNhbGxzLgorKglyaWRkYXRhbGVuCUJ1ZmZlciBsZW5ndGggZm9yIERPV0FJVCBjYWxscy4gWmVybyBmb3IgRE9BU1lOQyBjYWxscy4KKyoJY21kY2IJCWNvbW1hbmQgY2FsbGJhY2sgZm9yIGFzeW5jIGNhbGxzLCBOVUxMIGZvciBET1dBSVQgY2FsbHMKKyoJdXNlcmNiCQl1c2VyIGNhbGxiYWNrIGZvciBhc3luYyBjYWxscywgTlVMTCBmb3IgRE9XQUlUIGNhbGxzCisqCXVzZXJjYl9kYXRhCXVzZXIgc3VwcGxpZWQgZGF0YSBwb2ludGVyIGZvciBhc3luYyBjYWxscywgTlVMTAorKgkJCWZvciBET1dBSVQgY2FsbHMKKyoKKyogUmV0dXJuczoKKyoJMAkJc3VjY2VzcworKgktRUlPCQlDVExYIGZhaWx1cmUKKyoJLUVSRVNUQVJUU1lTCUF3YWtlbmVkIG9uIHNpZ25hbAorKgktRU5PREFUQQlyaWRkYXRhbGVuICE9IG1hY2RhdGFsZW4KKyoJPjAJCWNvbW1hbmQgaW5kaWNhdGVkIGVycm9yLCBTdGF0dXMgYW5kIFJlc3AwLTIgYXJlCisqCQkJaW4gaHcgc3RydWN0dXJlLgorKgorKiBTaWRlIGVmZmVjdHM6CisqCisqIENhbGwgY29udGV4dDoKKyoJaW50ZXJydXB0IChET0FTWU5DKQorKglwcm9jZXNzIChET1dBSVQgb3IgRE9BU1lOQykKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIGludAoraGZhMzg0eF9kb3JyaWQoCisJaGZhMzg0eF90ICpodywKKwlDTURfTU9ERSBtb2RlLAorCVVJTlQxNglyaWQsCisJdm9pZAkqcmlkZGF0YSwKKwlVSU5UCXJpZGRhdGFsZW4sCisgICAgICAgIGN0bHhfY21kY2JfdCBjbWRjYiwKKwljdGx4X3VzZXJjYl90IHVzZXJjYiwKKwl2b2lkCSp1c2VyY2JfZGF0YSkKK3sKKwlpbnQJCQlyZXN1bHQ7CisJaGZhMzg0eF91c2JjdGx4X3QJKmN0bHg7CisKKwlEQkZFTlRFUjsKKwljdGx4ID0gdXNiY3RseF9hbGxvYygpOworCWlmICggY3RseCA9PSBOVUxMICkgeworCQlyZXN1bHQgPSAtRU5PTUVNOworCQlnb3RvIGRvbmU7CisJfQorCisJLyogSW5pdGlhbGl6ZSB0aGUgY29tbWFuZCAqLworCWN0bHgtPm91dGJ1Zi5ycmlkcmVxLnR5cGUgPSAgIGhvc3QyaGZhMzg0eF8xNihIRkEzODR4X1VTQl9SUklEUkVRKTsKKwljdGx4LT5vdXRidWYucnJpZHJlcS5mcm1sZW4gPQorCQlob3N0MmhmYTM4NHhfMTYoc2l6ZW9mKGN0bHgtPm91dGJ1Zi5ycmlkcmVxLnJpZCkpOworCWN0bHgtPm91dGJ1Zi5ycmlkcmVxLnJpZCA9ICAgIGhvc3QyaGZhMzg0eF8xNihyaWQpOworCisJY3RseC0+b3V0YnVmc2l6ZSA9IHNpemVvZihjdGx4LT5vdXRidWYucnJpZHJlcSk7CisKKwljdGx4LT5yZWFwYWJsZSA9IG1vZGU7CisJY3RseC0+Y21kY2IgPSBjbWRjYjsKKwljdGx4LT51c2VyY2IgPSB1c2VyY2I7CisJY3RseC0+dXNlcmNiX2RhdGEgPSB1c2VyY2JfZGF0YTsKKworCS8qIFN1Ym1pdCB0aGUgQ1RMWCAqLworCXJlc3VsdCA9IGhmYTM4NHhfdXNiY3RseF9zdWJtaXQoaHcsIGN0bHgpOworCWlmIChyZXN1bHQgIT0gMCkgeworCQlrZnJlZShjdGx4KTsKKwl9IGVsc2UgaWYgKG1vZGUgPT0gRE9XQUlUKSB7CisJCXVzYmN0bHhfcnJpZF9jb21wbGV0b3JfdCBjb21wbGV0b3I7CisKKwkJcmVzdWx0ID0gaGZhMzg0eF91c2JjdGx4X2NvbXBsZXRlX3N5bmMoCisJCSAgICAgICAgICAgaHcsIGN0bHgsIGluaXRfcnJpZF9jb21wbGV0b3IoJmNvbXBsZXRvciwKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmY3RseC0+aW5idWYucnJpZHJlc3AsCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmlkZGF0YSwKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByaWRkYXRhbGVuKSApOworCX0KKworZG9uZToKKwlEQkZFWElUOworCXJldHVybiByZXN1bHQ7Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIGhmYTM4NHhfZG93cmlkCisqCisqIENvbnN0cnVjdHMgYSB3cml0ZSByaWQgQ1RMWCBhbmQgaXNzdWVzIGl0LgorKgorKiBOT1RFOiBBbnkgY2hhbmdlcyB0byB0aGUgJ3Bvc3Qtc3VibWl0JyBjb2RlIGluIHRoaXMgZnVuY3Rpb24KKyogICAgICAgbmVlZCB0byBiZSBjYXJyaWVkIG92ZXIgdG8gaGZhMzg0eF9jYndyaWQoKSBzaW5jZSB0aGUgaGFuZGxpbmcKKyogICAgICAgaXMgdmlydHVhbGx5IGlkZW50aWNhbC4KKyoKKyogQXJndW1lbnRzOgorKglodwkJZGV2aWNlIHN0cnVjdHVyZQorKglDTURfTU9ERQlET1dBSVQgb3IgRE9BU1lOQworKglyaWQJCVJJRCBjb2RlCisqCXJpZGRhdGEJCURhdGEgcG9ydGlvbiBvZiBSSUQgZm9ybWF0dGVkIGZvciBNQUMKKyoJcmlkZGF0YWxlbglMZW5ndGggb2YgdGhlIGRhdGEgcG9ydGlvbiBpbiBieXRlcworKiAgICAgICBjbWRjYiAgICAgICAgICAgY29tbWFuZCBjYWxsYmFjayBmb3IgYXN5bmMgY2FsbHMsIE5VTEwgZm9yIERPV0FJVCBjYWxscworKgl1c2VyY2IJCXVzZXIgY2FsbGJhY2sgZm9yIGFzeW5jIGNhbGxzLCBOVUxMIGZvciBET1dBSVQgY2FsbHMKKyoJdXNlcmNiX2RhdGEJdXNlciBzdXBwbGllZCBkYXRhIHBvaW50ZXIgZm9yIGFzeW5jIGNhbGxzCisqCisqIFJldHVybnM6CisqCTAJCXN1Y2Nlc3MKKyoJLUVUSU1FRE9VVAl0aW1lZCBvdXQgd2FpdGluZyBmb3IgcmVnaXN0ZXIgcmVhZHkgb3IKKyoJCQljb21tYW5kIGNvbXBsZXRpb24KKyoJPjAJCWNvbW1hbmQgaW5kaWNhdGVkIGVycm9yLCBTdGF0dXMgYW5kIFJlc3AwLTIgYXJlCisqCQkJaW4gaHcgc3RydWN0dXJlLgorKgorKiBTaWRlIGVmZmVjdHM6CisqCisqIENhbGwgY29udGV4dDoKKyoJaW50ZXJydXB0IChET0FTWU5DKQorKglwcm9jZXNzIChET1dBSVQgb3IgRE9BU1lOQykKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIGludAoraGZhMzg0eF9kb3dyaWQoCisJaGZhMzg0eF90ICpodywKKwlDTURfTU9ERSBtb2RlLAorCVVJTlQxNglyaWQsCisJdm9pZAkqcmlkZGF0YSwKKwlVSU5UCXJpZGRhdGFsZW4sCisJY3RseF9jbWRjYl90IGNtZGNiLAorCWN0bHhfdXNlcmNiX3QgdXNlcmNiLAorCXZvaWQJKnVzZXJjYl9kYXRhKQoreworCWludAkJCXJlc3VsdDsKKwloZmEzODR4X3VzYmN0bHhfdAkqY3RseDsKKworCURCRkVOVEVSOworCWN0bHggPSB1c2JjdGx4X2FsbG9jKCk7CisJaWYgKCBjdGx4ID09IE5VTEwgKSB7CisJCXJlc3VsdCA9IC1FTk9NRU07CisJCWdvdG8gZG9uZTsKKwl9CisKKwkvKiBJbml0aWFsaXplIHRoZSBjb21tYW5kICovCisJY3RseC0+b3V0YnVmLndyaWRyZXEudHlwZSA9ICAgaG9zdDJoZmEzODR4XzE2KEhGQTM4NHhfVVNCX1dSSURSRVEpOworCWN0bHgtPm91dGJ1Zi53cmlkcmVxLmZybWxlbiA9IGhvc3QyaGZhMzg0eF8xNigKKwkJCQkJKHNpemVvZihjdGx4LT5vdXRidWYud3JpZHJlcS5yaWQpICsKKwkJCQkJcmlkZGF0YWxlbiArIDEpIC8gMik7CisJY3RseC0+b3V0YnVmLndyaWRyZXEucmlkID0gICAgaG9zdDJoZmEzODR4XzE2KHJpZCk7CisJbWVtY3B5KGN0bHgtPm91dGJ1Zi53cmlkcmVxLmRhdGEsIHJpZGRhdGEsIHJpZGRhdGFsZW4pOworCisJY3RseC0+b3V0YnVmc2l6ZSA9IHNpemVvZihjdGx4LT5vdXRidWYud3JpZHJlcS50eXBlKSArCisJICAgICAgICAgICAgICAgICAgIHNpemVvZihjdGx4LT5vdXRidWYud3JpZHJlcS5mcm1sZW4pICsKKwkgICAgICAgICAgICAgICAgICAgc2l6ZW9mKGN0bHgtPm91dGJ1Zi53cmlkcmVxLnJpZCkgKworCSAgICAgICAgICAgICAgICAgICByaWRkYXRhbGVuOworCisJY3RseC0+cmVhcGFibGUgPSBtb2RlOworCWN0bHgtPmNtZGNiID0gY21kY2I7CisJY3RseC0+dXNlcmNiID0gdXNlcmNiOworCWN0bHgtPnVzZXJjYl9kYXRhID0gdXNlcmNiX2RhdGE7CisKKwkvKiBTdWJtaXQgdGhlIENUTFggKi8KKwlyZXN1bHQgPSBoZmEzODR4X3VzYmN0bHhfc3VibWl0KGh3LCBjdGx4KTsKKwlpZiAocmVzdWx0ICE9IDApIHsKKwkJa2ZyZWUoY3RseCk7CisJfSBlbHNlIGlmIChtb2RlID09IERPV0FJVCkgeworCQl1c2JjdGx4X3dyaWRfY29tcGxldG9yX3QgY29tcGxldG9yOworCQloZmEzODR4X2NtZHJlc3VsdF90IHdyaWRyZXN1bHQ7CisKKwkJcmVzdWx0ID0gaGZhMzg0eF91c2JjdGx4X2NvbXBsZXRlX3N5bmMoCisJCSAgICAgICAgICAgICAgIGh3LAorCQkgICAgICAgICAgICAgICBjdGx4LAorCQkgICAgICAgICAgICAgICBpbml0X3dyaWRfY29tcGxldG9yKCZjb21wbGV0b3IsCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmN0bHgtPmluYnVmLndyaWRyZXNwLAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ3cmlkcmVzdWx0KSApOworCX0KKworZG9uZToKKwlEQkZFWElUOworCXJldHVybiByZXN1bHQ7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBoZmEzODR4X2Rvcm1lbQorKgorKiBDb25zdHJ1Y3RzIGEgcmVhZG1lbSBDVExYIGFuZCBpc3N1ZXMgaXQuCisqCisqIE5PVEU6IEFueSBjaGFuZ2VzIHRvIHRoZSAncG9zdC1zdWJtaXQnIGNvZGUgaW4gdGhpcyBmdW5jdGlvbgorKiAgICAgICBuZWVkIHRvIGJlIGNhcnJpZWQgb3ZlciB0byBoZmEzODR4X2Nicm1lbSgpIHNpbmNlIHRoZSBoYW5kbGluZworKiAgICAgICBpcyB2aXJ0dWFsbHkgaWRlbnRpY2FsLgorKgorKiBBcmd1bWVudHM6CisqCWh3CQlkZXZpY2Ugc3RydWN0dXJlCisqCW1vZGUJCURPV0FJVCBvciBET0FTWU5DCisqCXBhZ2UJCU1BQyBhZGRyZXNzIHNwYWNlIHBhZ2UgKENNRCBmb3JtYXQpCisqCW9mZnNldAkJTUFDIGFkZHJlc3Mgc3BhY2Ugb2Zmc2V0CisqCWRhdGEJCVB0ciB0byBkYXRhIGJ1ZmZlciB0byByZWNlaXZlIHJlYWQKKyoJbGVuCQlMZW5ndGggb2YgdGhlIGRhdGEgdG8gcmVhZCAobWF4ID09IDIwNDgpCisqCWNtZGNiCQljb21tYW5kIGNhbGxiYWNrIGZvciBhc3luYyBjYWxscywgTlVMTCBmb3IgRE9XQUlUIGNhbGxzCisqCXVzZXJjYgkJdXNlciBjYWxsYmFjayBmb3IgYXN5bmMgY2FsbHMsIE5VTEwgZm9yIERPV0FJVCBjYWxscworKgl1c2VyY2JfZGF0YQl1c2VyIHN1cHBsaWVkIGRhdGEgcG9pbnRlciBmb3IgYXN5bmMgY2FsbHMKKyoKKyogUmV0dXJuczoKKyoJMAkJc3VjY2VzcworKgktRVRJTUVET1VUCXRpbWVkIG91dCB3YWl0aW5nIGZvciByZWdpc3RlciByZWFkeSBvcgorKgkJCWNvbW1hbmQgY29tcGxldGlvbgorKgk+MAkJY29tbWFuZCBpbmRpY2F0ZWQgZXJyb3IsIFN0YXR1cyBhbmQgUmVzcDAtMiBhcmUKKyoJCQlpbiBodyBzdHJ1Y3R1cmUuCisqCisqIFNpZGUgZWZmZWN0czoKKyoKKyogQ2FsbCBjb250ZXh0OgorKglpbnRlcnJ1cHQgKERPQVNZTkMpCisqCXByb2Nlc3MgKERPV0FJVCBvciBET0FTWU5DKQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgaW50CitoZmEzODR4X2Rvcm1lbSgKKwloZmEzODR4X3QgKmh3LAorCUNNRF9NT0RFIG1vZGUsCisJVUlOVDE2CXBhZ2UsCisJVUlOVDE2CW9mZnNldCwKKwl2b2lkCSpkYXRhLAorCVVJTlQJbGVuLAorCWN0bHhfY21kY2JfdCBjbWRjYiwKKwljdGx4X3VzZXJjYl90IHVzZXJjYiwKKwl2b2lkCSp1c2VyY2JfZGF0YSkKK3sKKwlpbnQJCQlyZXN1bHQ7CisJaGZhMzg0eF91c2JjdGx4X3QJKmN0bHg7CisKKwlEQkZFTlRFUjsKKwljdGx4ID0gdXNiY3RseF9hbGxvYygpOworCWlmICggY3RseCA9PSBOVUxMICkgeworCQlyZXN1bHQgPSAtRU5PTUVNOworCQlnb3RvIGRvbmU7CisJfQorCisJLyogSW5pdGlhbGl6ZSB0aGUgY29tbWFuZCAqLworCWN0bHgtPm91dGJ1Zi5ybWVtcmVxLnR5cGUgPSAgICBob3N0MmhmYTM4NHhfMTYoSEZBMzg0eF9VU0JfUk1FTVJFUSk7CisJY3RseC0+b3V0YnVmLnJtZW1yZXEuZnJtbGVuID0gIGhvc3QyaGZhMzg0eF8xNigKKwkJCQkJc2l6ZW9mKGN0bHgtPm91dGJ1Zi5ybWVtcmVxLm9mZnNldCkgKworCQkJCQlzaXplb2YoY3RseC0+b3V0YnVmLnJtZW1yZXEucGFnZSkgKworCQkJCQlsZW4pOworCWN0bHgtPm91dGJ1Zi5ybWVtcmVxLm9mZnNldCA9CWhvc3QyaGZhMzg0eF8xNihvZmZzZXQpOworCWN0bHgtPm91dGJ1Zi5ybWVtcmVxLnBhZ2UgPQlob3N0MmhmYTM4NHhfMTYocGFnZSk7CisKKwljdGx4LT5vdXRidWZzaXplID0gc2l6ZW9mKGN0bHgtPm91dGJ1Zi5ybWVtcmVxKTsKKworCVdMQU5fTE9HX0RFQlVHKDQsCisJCSJ0eXBlPTB4JTA0eCBmcm1sZW49JWQgb2Zmc2V0PTB4JTA0eCBwYWdlPTB4JTA0eFxuIiwKKwkJY3RseC0+b3V0YnVmLnJtZW1yZXEudHlwZSwKKwkJY3RseC0+b3V0YnVmLnJtZW1yZXEuZnJtbGVuLAorCQljdGx4LT5vdXRidWYucm1lbXJlcS5vZmZzZXQsCisJCWN0bHgtPm91dGJ1Zi5ybWVtcmVxLnBhZ2UpOworCisJV0xBTl9MT0dfREVCVUcoNCwicGt0c2l6ZT0lemRcbiIsCisJCVJPVU5EVVA2NChzaXplb2YoY3RseC0+b3V0YnVmLnJtZW1yZXEpKSk7CisKKwljdGx4LT5yZWFwYWJsZSA9IG1vZGU7CisJY3RseC0+Y21kY2IgPSBjbWRjYjsKKwljdGx4LT51c2VyY2IgPSB1c2VyY2I7CisJY3RseC0+dXNlcmNiX2RhdGEgPSB1c2VyY2JfZGF0YTsKKworCXJlc3VsdCA9IGhmYTM4NHhfdXNiY3RseF9zdWJtaXQoaHcsIGN0bHgpOworCWlmIChyZXN1bHQgIT0gMCkgeworCQlrZnJlZShjdGx4KTsKKwl9IGVsc2UgaWYgKCBtb2RlID09IERPV0FJVCApIHsKKyAgICAgICAgICAgICAgICB1c2JjdGx4X3JtZW1fY29tcGxldG9yX3QgY29tcGxldG9yOworCisgICAgICAgICAgICAgICAgcmVzdWx0ID0gaGZhMzg0eF91c2JjdGx4X2NvbXBsZXRlX3N5bmMoCisgICAgICAgICAgICAgICAgICAgICAgICAgICBodywgY3RseCwgaW5pdF9ybWVtX2NvbXBsZXRvcigmY29tcGxldG9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmN0bHgtPmluYnVmLnJtZW1yZXNwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbikgKTsKKwl9CisKK2RvbmU6CisJREJGRVhJVDsKKwlyZXR1cm4gcmVzdWx0OworfQorCisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIGhmYTM4NHhfZG93bWVtCisqCisqIENvbnN0cnVjdHMgYSB3cml0ZW1lbSBDVExYIGFuZCBpc3N1ZXMgaXQuCisqCisqIE5PVEU6IEFueSBjaGFuZ2VzIHRvIHRoZSAncG9zdC1zdWJtaXQnIGNvZGUgaW4gdGhpcyBmdW5jdGlvbgorKiAgICAgICBuZWVkIHRvIGJlIGNhcnJpZWQgb3ZlciB0byBoZmEzODR4X2Nid21lbSgpIHNpbmNlIHRoZSBoYW5kbGluZworKiAgICAgICBpcyB2aXJ0dWFsbHkgaWRlbnRpY2FsLgorKgorKiBBcmd1bWVudHM6CisqCWh3CQlkZXZpY2Ugc3RydWN0dXJlCisqCW1vZGUJCURPV0FJVCBvciBET0FTWU5DCisqCXBhZ2UJCU1BQyBhZGRyZXNzIHNwYWNlIHBhZ2UgKENNRCBmb3JtYXQpCisqCW9mZnNldAkJTUFDIGFkZHJlc3Mgc3BhY2Ugb2Zmc2V0CisqCWRhdGEJCVB0ciB0byBkYXRhIGJ1ZmZlciBjb250YWluaW5nIHdyaXRlIGRhdGEKKyoJbGVuCQlMZW5ndGggb2YgdGhlIGRhdGEgdG8gcmVhZCAobWF4ID09IDIwNDgpCisqCWNtZGNiCQljb21tYW5kIGNhbGxiYWNrIGZvciBhc3luYyBjYWxscywgTlVMTCBmb3IgRE9XQUlUIGNhbGxzCisqCXVzZXJjYgkJdXNlciBjYWxsYmFjayBmb3IgYXN5bmMgY2FsbHMsIE5VTEwgZm9yIERPV0FJVCBjYWxscworKgl1c2VyY2JfZGF0YQl1c2VyIHN1cHBsaWVkIGRhdGEgcG9pbnRlciBmb3IgYXN5bmMgY2FsbHMuCisqCisqIFJldHVybnM6CisqCTAJCXN1Y2Nlc3MKKyoJLUVUSU1FRE9VVAl0aW1lZCBvdXQgd2FpdGluZyBmb3IgcmVnaXN0ZXIgcmVhZHkgb3IKKyoJCQljb21tYW5kIGNvbXBsZXRpb24KKyoJPjAJCWNvbW1hbmQgaW5kaWNhdGVkIGVycm9yLCBTdGF0dXMgYW5kIFJlc3AwLTIgYXJlCisqCQkJaW4gaHcgc3RydWN0dXJlLgorKgorKiBTaWRlIGVmZmVjdHM6CisqCisqIENhbGwgY29udGV4dDoKKyoJaW50ZXJydXB0IChET1dBSVQpCisqCXByb2Nlc3MgKERPV0FJVCBvciBET0FTWU5DKQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgaW50CitoZmEzODR4X2Rvd21lbSgKKwloZmEzODR4X3QgKmh3LAorCUNNRF9NT0RFIG1vZGUsCisJVUlOVDE2CXBhZ2UsCisJVUlOVDE2CW9mZnNldCwKKwl2b2lkCSpkYXRhLAorCVVJTlQJbGVuLAorCWN0bHhfY21kY2JfdCBjbWRjYiwKKwljdGx4X3VzZXJjYl90IHVzZXJjYiwKKwl2b2lkCSp1c2VyY2JfZGF0YSkKK3sKKwlpbnQJCQlyZXN1bHQ7CisJaGZhMzg0eF91c2JjdGx4X3QJKmN0bHg7CisKKwlEQkZFTlRFUjsKKwlXTEFOX0xPR19ERUJVRyg1LCAicGFnZT0weCUwNHggb2Zmc2V0PTB4JTA0eCBsZW49JWRcbiIsCisJCXBhZ2Usb2Zmc2V0LGxlbik7CisKKwljdGx4ID0gdXNiY3RseF9hbGxvYygpOworCWlmICggY3RseCA9PSBOVUxMICkgeworCQlyZXN1bHQgPSAtRU5PTUVNOworCQlnb3RvIGRvbmU7CisJfQorCisJLyogSW5pdGlhbGl6ZSB0aGUgY29tbWFuZCAqLworCWN0bHgtPm91dGJ1Zi53bWVtcmVxLnR5cGUgPSAgIGhvc3QyaGZhMzg0eF8xNihIRkEzODR4X1VTQl9XTUVNUkVRKTsKKwljdGx4LT5vdXRidWYud21lbXJlcS5mcm1sZW4gPSBob3N0MmhmYTM4NHhfMTYoCisJCQkJCXNpemVvZihjdGx4LT5vdXRidWYud21lbXJlcS5vZmZzZXQpICsKKwkJCQkJc2l6ZW9mKGN0bHgtPm91dGJ1Zi53bWVtcmVxLnBhZ2UpICsKKwkJCQkJbGVuKTsKKwljdGx4LT5vdXRidWYud21lbXJlcS5vZmZzZXQgPSBob3N0MmhmYTM4NHhfMTYob2Zmc2V0KTsKKwljdGx4LT5vdXRidWYud21lbXJlcS5wYWdlID0gICBob3N0MmhmYTM4NHhfMTYocGFnZSk7CisJbWVtY3B5KGN0bHgtPm91dGJ1Zi53bWVtcmVxLmRhdGEsIGRhdGEsIGxlbik7CisKKwljdGx4LT5vdXRidWZzaXplID0gc2l6ZW9mKGN0bHgtPm91dGJ1Zi53bWVtcmVxLnR5cGUpICsKKwkgICAgICAgICAgICAgICAgICAgc2l6ZW9mKGN0bHgtPm91dGJ1Zi53bWVtcmVxLmZybWxlbikgKworCSAgICAgICAgICAgICAgICAgICBzaXplb2YoY3RseC0+b3V0YnVmLndtZW1yZXEub2Zmc2V0KSArCisJICAgICAgICAgICAgICAgICAgIHNpemVvZihjdGx4LT5vdXRidWYud21lbXJlcS5wYWdlKSArCisJICAgICAgICAgICAgICAgICAgIGxlbjsKKworCWN0bHgtPnJlYXBhYmxlID0gbW9kZTsKKwljdGx4LT5jbWRjYiA9IGNtZGNiOworCWN0bHgtPnVzZXJjYiA9IHVzZXJjYjsKKwljdGx4LT51c2VyY2JfZGF0YSA9IHVzZXJjYl9kYXRhOworCisJcmVzdWx0ID0gaGZhMzg0eF91c2JjdGx4X3N1Ym1pdChodywgY3RseCk7CisJaWYgKHJlc3VsdCAhPSAwKSB7CisJCWtmcmVlKGN0bHgpOworCX0gZWxzZSBpZiAoIG1vZGUgPT0gRE9XQUlUICkgeworICAgICAgICAgICAgICAgIHVzYmN0bHhfd21lbV9jb21wbGV0b3JfdCBjb21wbGV0b3I7CisgICAgICAgICAgICAgICAgaGZhMzg0eF9jbWRyZXN1bHRfdCB3bWVtcmVzdWx0OworCisgICAgICAgICAgICAgICAgcmVzdWx0ID0gaGZhMzg0eF91c2JjdGx4X2NvbXBsZXRlX3N5bmMoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3RseCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbml0X3dtZW1fY29tcGxldG9yKCZjb21wbGV0b3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmY3RseC0+aW5idWYud21lbXJlc3AsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmd21lbXJlc3VsdCkgKTsKKwl9CisKK2RvbmU6CisJREJGRVhJVDsKKwlyZXR1cm4gcmVzdWx0OworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBoZmEzODR4X2RydnJfY29tbXRhbGxpZXMKKyoKKyogU2VuZCBhIGNvbW10YWxsaWVzIGlucXVpcnkgdG8gdGhlIE1BQy4gIE5vdGUgdGhhdCB0aGlzIGlzIGFuIGFzeW5jCisqIGNhbGwgdGhhdCB3aWxsIHJlc3VsdCBpbiBhbiBpbmZvIGZyYW1lIGFycml2aW5nIHNvbWV0aW1lIGxhdGVyLgorKgorKiBBcmd1bWVudHM6CisqCWh3CQlkZXZpY2Ugc3RydWN0dXJlCisqCisqIFJldHVybnM6CisqCXplcm8JCXN1Y2Nlc3MuCisqCisqIFNpZGUgZWZmZWN0czoKKyoKKyogQ2FsbCBjb250ZXh0OgorKglwcm9jZXNzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK2ludCBoZmEzODR4X2RydnJfY29tbXRhbGxpZXMoIGhmYTM4NHhfdCAqaHcgKQoreworCWhmYTM4NHhfbWV0YWNtZF90IGNtZDsKKworCURCRkVOVEVSOworCisJY21kLmNtZCA9IEhGQTM4NHhfQ01EQ09ERV9JTlE7CisJY21kLnBhcm0wID0gSEZBMzg0eF9JVF9DT01NVEFMTElFUzsKKwljbWQucGFybTEgPSAwOworCWNtZC5wYXJtMiA9IDA7CisKKwloZmEzODR4X2RvY21kX2FzeW5jKGh3LCAmY21kLCBOVUxMLCBOVUxMLCBOVUxMKTsKKworCURCRkVYSVQ7CisJcmV0dXJuIDA7Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIGhmYTM4NHhfZHJ2cl9kaXNhYmxlCisqCisqIElzc3VlcyB0aGUgZGlzYWJsZSBjb21tYW5kIHRvIHN0b3AgY29tbXVuaWNhdGlvbnMgb24gb25lIG9mCisqIHRoZSBNQUNzICdwb3J0cycuICBPbmx5IG1hY3BvcnQgMCBpcyB2YWxpZCAgZm9yIHN0YXRpb25zLgorKiBBUHMgbWF5IGFsc28gZGlzYWJsZSBtYWNwb3J0cyAxLTYuICBPbmx5IHBvcnRzIHRoYXQgaGF2ZSBiZWVuCisqIHByZXZpb3VzbHkgZW5hYmxlZCBtYXkgYmUgZGlzYWJsZWQuCisqCisqIEFyZ3VtZW50czoKKyoJaHcJCWRldmljZSBzdHJ1Y3R1cmUKKyoJbWFjcG9ydAkJTUFDIHBvcnQgbnVtYmVyIChob3N0IG9yZGVyKQorKgorKiBSZXR1cm5zOgorKgkwCQlzdWNjZXNzCisqCT4wCQlmL3cgcmVwb3J0ZWQgZmFpbHVyZSAtIGYvdyBzdGF0dXMgY29kZQorKgk8MAkJZHJpdmVyIHJlcG9ydGVkIGVycm9yICh0aW1lb3V0fGJhZCBhcmcpCisqCisqIFNpZGUgZWZmZWN0czoKKyoKKyogQ2FsbCBjb250ZXh0OgorKglwcm9jZXNzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK2ludCBoZmEzODR4X2RydnJfZGlzYWJsZShoZmEzODR4X3QgKmh3LCBVSU5UMTYgbWFjcG9ydCkKK3sKKwlpbnQJcmVzdWx0ID0gMDsKKworCURCRkVOVEVSOworCWlmICgoIWh3LT5pc2FwICYmIG1hY3BvcnQgIT0gMCkgfHwKKwkgICAgKGh3LT5pc2FwICYmICEobWFjcG9ydCA8PSBIRkEzODR4X1BPUlRJRF9NQVgpKSB8fAorCSAgICAhKGh3LT5wb3J0X2VuYWJsZWRbbWFjcG9ydF0pICl7CisJCXJlc3VsdCA9IC1FSU5WQUw7CisJfSBlbHNlIHsKKwkJcmVzdWx0ID0gaGZhMzg0eF9jbWRfZGlzYWJsZShodywgbWFjcG9ydCk7CisJCWlmICggcmVzdWx0ID09IDAgKSB7CisJCQlody0+cG9ydF9lbmFibGVkW21hY3BvcnRdID0gMDsKKwkJfQorCX0KKwlEQkZFWElUOworCXJldHVybiByZXN1bHQ7Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIGhmYTM4NHhfZHJ2cl9lbmFibGUKKyoKKyogSXNzdWVzIHRoZSBlbmFibGUgY29tbWFuZCB0byBlbmFibGUgY29tbXVuaWNhdGlvbnMgb24gb25lIG9mCisqIHRoZSBNQUNzICdwb3J0cycuICBPbmx5IG1hY3BvcnQgMCBpcyB2YWxpZCAgZm9yIHN0YXRpb25zLgorKiBBUHMgbWF5IGFsc28gZW5hYmxlIG1hY3BvcnRzIDEtNi4gIE9ubHkgcG9ydHMgdGhhdCBhcmUgY3VycmVudGx5CisqIGRpc2FibGVkIG1heSBiZSBlbmFibGVkLgorKgorKiBBcmd1bWVudHM6CisqCWh3CQlkZXZpY2Ugc3RydWN0dXJlCisqCW1hY3BvcnQJCU1BQyBwb3J0IG51bWJlcgorKgorKiBSZXR1cm5zOgorKgkwCQlzdWNjZXNzCisqCT4wCQlmL3cgcmVwb3J0ZWQgZmFpbHVyZSAtIGYvdyBzdGF0dXMgY29kZQorKgk8MAkJZHJpdmVyIHJlcG9ydGVkIGVycm9yICh0aW1lb3V0fGJhZCBhcmcpCisqCisqIFNpZGUgZWZmZWN0czoKKyoKKyogQ2FsbCBjb250ZXh0OgorKglwcm9jZXNzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK2ludCBoZmEzODR4X2RydnJfZW5hYmxlKGhmYTM4NHhfdCAqaHcsIFVJTlQxNiBtYWNwb3J0KQoreworCWludAlyZXN1bHQgPSAwOworCisJREJGRU5URVI7CisJaWYgKCghaHctPmlzYXAgJiYgbWFjcG9ydCAhPSAwKSB8fAorCSAgICAoaHctPmlzYXAgJiYgIShtYWNwb3J0IDw9IEhGQTM4NHhfUE9SVElEX01BWCkpIHx8CisJICAgIChody0+cG9ydF9lbmFibGVkW21hY3BvcnRdKSApeworCQlyZXN1bHQgPSAtRUlOVkFMOworCX0gZWxzZSB7CisJCXJlc3VsdCA9IGhmYTM4NHhfY21kX2VuYWJsZShodywgbWFjcG9ydCk7CisJCWlmICggcmVzdWx0ID09IDAgKSB7CisJCQlody0+cG9ydF9lbmFibGVkW21hY3BvcnRdID0gMTsKKwkJfQorCX0KKwlEQkZFWElUOworCXJldHVybiByZXN1bHQ7Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIGhmYTM4NHhfZHJ2cl9mbGFzaGRsX2VuYWJsZQorKgorKiBCZWdpbnMgdGhlIGZsYXNoIGRvd25sb2FkIHN0YXRlLiAgQ2hlY2tzIHRvIHNlZSB0aGF0IHdlJ3JlIG5vdAorKiBhbHJlYWR5IGluIGEgZG93bmxvYWQgc3RhdGUgYW5kIHRoYXQgYSBwb3J0IGlzbid0IGVuYWJsZWQuCisqIFNldHMgdGhlIGRvd25sb2FkIHN0YXRlIGFuZCByZXRyaWV2ZXMgdGhlIGZsYXNoIGRvd25sb2FkCisqIGJ1ZmZlciBsb2NhdGlvbiwgYnVmZmVyIHNpemUsIGFuZCB0aW1lb3V0IGxlbmd0aC4KKyoKKyogQXJndW1lbnRzOgorKglodwkJZGV2aWNlIHN0cnVjdHVyZQorKgorKiBSZXR1cm5zOgorKgkwCQlzdWNjZXNzCisqCT4wCQlmL3cgcmVwb3J0ZWQgZXJyb3IgLSBmL3cgc3RhdHVzIGNvZGUKKyoJPDAJCWRyaXZlciByZXBvcnRlZCBlcnJvcgorKgorKiBTaWRlIGVmZmVjdHM6CisqCisqIENhbGwgY29udGV4dDoKKyoJcHJvY2VzcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitpbnQgaGZhMzg0eF9kcnZyX2ZsYXNoZGxfZW5hYmxlKGhmYTM4NHhfdCAqaHcpCit7CisJaW50CQlyZXN1bHQgPSAwOworCWludAkJaTsKKworCURCRkVOVEVSOworCS8qIENoZWNrIHRoYXQgYSBwb3J0IGlzbid0IGFjdGl2ZSAqLworCWZvciAoIGkgPSAwOyBpIDwgSEZBMzg0eF9QT1JUSURfTUFYOyBpKyspIHsKKwkJaWYgKCBody0+cG9ydF9lbmFibGVkW2ldICkgeworCQkJV0xBTl9MT0dfREVCVUcoMSwiY2FsbGVkIHdoZW4gcG9ydCBlbmFibGVkLlxuIik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCX0KKworCS8qIENoZWNrIHRoYXQgd2UncmUgbm90IGFscmVhZHkgaW4gYSBkb3dubG9hZCBzdGF0ZSAqLworCWlmICggaHctPmRsc3RhdGUgIT0gSEZBMzg0eF9ETFNUQVRFX0RJU0FCTEVEICkgeworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKiBSZXRyaWV2ZSB0aGUgYnVmZmVyIGxvYyZzaXplIGFuZCB0aW1lb3V0ICovCisJaWYgKCAocmVzdWx0ID0gaGZhMzg0eF9kcnZyX2dldGNvbmZpZyhodywgSEZBMzg0eF9SSURfRE9XTkxPQURCVUZGRVIsCisJCQkJJihody0+YnVmaW5mbyksIHNpemVvZihody0+YnVmaW5mbykpKSApIHsKKwkJcmV0dXJuIHJlc3VsdDsKKwl9CisJaHctPmJ1ZmluZm8ucGFnZSA9IGhmYTM4NHgyaG9zdF8xNihody0+YnVmaW5mby5wYWdlKTsKKwlody0+YnVmaW5mby5vZmZzZXQgPSBoZmEzODR4Mmhvc3RfMTYoaHctPmJ1ZmluZm8ub2Zmc2V0KTsKKwlody0+YnVmaW5mby5sZW4gPSBoZmEzODR4Mmhvc3RfMTYoaHctPmJ1ZmluZm8ubGVuKTsKKwlpZiAoIChyZXN1bHQgPSBoZmEzODR4X2RydnJfZ2V0Y29uZmlnMTYoaHcsIEhGQTM4NHhfUklEX01BWExPQURUSU1FLAorCQkJCSYoaHctPmRsdGltZW91dCkpKSApIHsKKwkJcmV0dXJuIHJlc3VsdDsKKwl9CisJaHctPmRsdGltZW91dCA9IGhmYTM4NHgyaG9zdF8xNihody0+ZGx0aW1lb3V0KTsKKworCVdMQU5fTE9HX0RFQlVHKDEsImZsYXNoZGxfZW5hYmxlXG4iKTsKKworCWh3LT5kbHN0YXRlID0gSEZBMzg0eF9ETFNUQVRFX0ZMQVNIRU5BQkxFRDsKKwlEQkZFWElUOworCXJldHVybiByZXN1bHQ7Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIGhmYTM4NHhfZHJ2cl9mbGFzaGRsX2Rpc2FibGUKKyoKKyogRW5kcyB0aGUgZmxhc2ggZG93bmxvYWQgc3RhdGUuICBOb3RlIHRoYXQgdGhpcyB3aWxsIGNhdXNlIHRoZSBNQUMKKyogZmlybXdhcmUgdG8gcmVzdGFydC4KKyoKKyogQXJndW1lbnRzOgorKglodwkJZGV2aWNlIHN0cnVjdHVyZQorKgorKiBSZXR1cm5zOgorKgkwCQlzdWNjZXNzCisqCT4wCQlmL3cgcmVwb3J0ZWQgZXJyb3IgLSBmL3cgc3RhdHVzIGNvZGUKKyoJPDAJCWRyaXZlciByZXBvcnRlZCBlcnJvcgorKgorKiBTaWRlIGVmZmVjdHM6CisqCisqIENhbGwgY29udGV4dDoKKyoJcHJvY2VzcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitpbnQgaGZhMzg0eF9kcnZyX2ZsYXNoZGxfZGlzYWJsZShoZmEzODR4X3QgKmh3KQoreworCURCRkVOVEVSOworCS8qIENoZWNrIHRoYXQgd2UncmUgYWxyZWFkeSBpbiB0aGUgZG93bmxvYWQgc3RhdGUgKi8KKwlpZiAoIGh3LT5kbHN0YXRlICE9IEhGQTM4NHhfRExTVEFURV9GTEFTSEVOQUJMRUQgKSB7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCVdMQU5fTE9HX0RFQlVHKDEsImZsYXNoZGxfZW5hYmxlXG4iKTsKKworCS8qIFRoZXJlIGlzbid0IG11Y2ggd2UgY2FuIGRvIGF0IHRoaXMgcG9pbnQsIHNvIEkgZG9uJ3QgKi8KKwkvKiAgYm90aGVyICB3LyB0aGUgcmV0dXJuIHZhbHVlICovCisJaGZhMzg0eF9jbWRfZG93bmxvYWQoaHcsIEhGQTM4NHhfUFJPR01PREVfRElTQUJMRSwgMCwgMCAsIDApOworCWh3LT5kbHN0YXRlID0gSEZBMzg0eF9ETFNUQVRFX0RJU0FCTEVEOworCisJREJGRVhJVDsKKwlyZXR1cm4gMDsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogaGZhMzg0eF9kcnZyX2ZsYXNoZGxfd3JpdGUKKyoKKyogUGVyZm9ybXMgYSBGTEFTSCBkb3dubG9hZCBvZiBhIGNodW5rIG9mIGRhdGEuIEZpcnN0IGNoZWNrcyB0byBzZWUKKyogdGhhdCB3ZSdyZSBpbiB0aGUgRkxBU0ggZG93bmxvYWQgc3RhdGUsIHRoZW4gc2V0cyB0aGUgZG93bmxvYWQKKyogbW9kZSwgdXNlcyB0aGUgYXV4IGZ1bmN0aW9ucyB0byAxKSBjb3B5IHRoZSBkYXRhIHRvIHRoZSBmbGFzaAorKiBidWZmZXIsIDIpIHNldHMgdGhlIGRvd25sb2FkICd3cml0ZSBmbGFzaCcgbW9kZSwgMykgcmVhZGJhY2sgYW5kCisqIGNvbXBhcmUuICBMYXRoZXIgcmluc2UsIHJlcGVhdCBhcyBtYW55IHRpbWVzIGFuIG5lY2Vzc2FyeSB0byBnZXQKKyogYWxsIHRoZSBnaXZlbiBkYXRhIGludG8gZmxhc2guCisqIFdoZW4gYWxsIGRhdGEgaGFzIGJlZW4gd3JpdHRlbiB1c2luZyB0aGlzIGZ1bmN0aW9uIChwb3NzaWJseQorKiByZXBlYXRlZGx5KSwgY2FsbCBkcnZyX2ZsYXNoZGxfZGlzYWJsZSgpIHRvIGVuZCB0aGUgZG93bmxvYWQgc3RhdGUKKyogYW5kIHJlc3RhcnQgdGhlIE1BQy4KKyoKKyogQXJndW1lbnRzOgorKglodwkJZGV2aWNlIHN0cnVjdHVyZQorKglkYWRkcgkJQ2FyZCBhZGRyZXNzIHRvIHdyaXRlIHRvLiAoaG9zdCBvcmRlcikKKyoJYnVmCQlQdHIgdG8gZGF0YSB0byB3cml0ZS4KKyoJbGVuCQlMZW5ndGggb2YgZGF0YSAoaG9zdCBvcmRlcikuCisqCisqIFJldHVybnM6CisqCTAJCXN1Y2Nlc3MKKyoJPjAJCWYvdyByZXBvcnRlZCBlcnJvciAtIGYvdyBzdGF0dXMgY29kZQorKgk8MAkJZHJpdmVyIHJlcG9ydGVkIGVycm9yCisqCisqIFNpZGUgZWZmZWN0czoKKyoKKyogQ2FsbCBjb250ZXh0OgorKglwcm9jZXNzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK2ludAoraGZhMzg0eF9kcnZyX2ZsYXNoZGxfd3JpdGUoCisJaGZhMzg0eF90CSpodywKKwlVSU5UMzIJCWRhZGRyLAorCXZvaWQJCSpidWYsCisJVUlOVDMyCQlsZW4pCit7CisJaW50CQlyZXN1bHQgPSAwOworCVVJTlQzMgkJZGxidWZhZGRyOworCWludAkJbmJ1cm5zOworCVVJTlQzMgkJYnVybmxlbjsKKwlVSU5UMzIJCWJ1cm5kYWRkcjsKKwlVSU5UMTYJCWJ1cm5sbzsKKwlVSU5UMTYJCWJ1cm5oaTsKKwlpbnQJCW53cml0ZXM7CisJVUlOVDgJCSp3cml0ZWJ1ZjsKKwlVSU5UMTYJCXdyaXRlcGFnZTsKKwlVSU5UMTYJCXdyaXRlb2Zmc2V0OworCVVJTlQzMgkJd3JpdGVsZW47CisJaW50CQlpOworCWludAkJajsKKworCURCRkVOVEVSOworCVdMQU5fTE9HX0RFQlVHKDUsImRhZGRyPTB4JTA4eCBsZW49JWRcbiIsIGRhZGRyLCBsZW4pOworCisJLyogQ2hlY2sgdGhhdCB3ZSdyZSBpbiB0aGUgZmxhc2ggZG93bmxvYWQgc3RhdGUgKi8KKwlpZiAoIGh3LT5kbHN0YXRlICE9IEhGQTM4NHhfRExTVEFURV9GTEFTSEVOQUJMRUQgKSB7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCVdMQU5fTE9HX0lORk8oIkRvd25sb2FkICVkIGJ5dGVzIHRvIGZsYXNoIEAweCUwNnhcbiIsIGxlbiwgZGFkZHIpOworCisJLyogQ29udmVydCB0byBmbGF0IGFkZHJlc3MgZm9yIGFyaXRobWV0aWMgKi8KKwkvKiBOT1RFOiBkbGJ1ZmZlciBSSUQgc3RvcmVzIHRoZSBhZGRyZXNzIGluIEFVWCBmb3JtYXQgKi8KKwlkbGJ1ZmFkZHIgPSBIRkEzODR4X0FERFJfQVVYX01LRkxBVCgKKwkJCWh3LT5idWZpbmZvLnBhZ2UsIGh3LT5idWZpbmZvLm9mZnNldCk7CisJV0xBTl9MT0dfREVCVUcoNSwKKwkJImRsYnVmLnBhZ2U9MHglMDR4IGRsYnVmLm9mZnNldD0weCUwNHggZGxidWZhZGRyPTB4JTA4eFxuIiwKKwkJaHctPmJ1ZmluZm8ucGFnZSwgaHctPmJ1ZmluZm8ub2Zmc2V0LCBkbGJ1ZmFkZHIpOworCisjaWYgMAorV0xBTl9MT0dfV0FSTklORygiZGxidWZAMHglMDZseCBsZW49JWQgdG89JWRcbiIsIGRsYnVmYWRkciwgaHctPmJ1ZmluZm8ubGVuLCBody0+ZGx0aW1lb3V0KTsKKyNlbmRpZgorCS8qIENhbGN1bGF0aW9ucyB0byBkZXRlcm1pbmUgaG93IG1hbnkgZmlsbHMgb2YgdGhlIGRsYnVmZmVyIHRvIGRvCisJICogYW5kIGhvdyBtYW55IFVTQiB3bWVtcmVxJ3MgdG8gZG8gZm9yIGVhY2ggZmlsbC4gIEF0IHRoaXMgcG9pbnQKKwkgKiBpbiB0aW1lLCB0aGUgZGxidWZmZXIgc2l6ZSBhbmQgdGhlIHdtZW1yZXEgc2l6ZSBhcmUgdGhlIHNhbWUuCisJICogVGhlcmVmb3JlLCBud3JpdGVzIHNob3VsZCBhbHdheXMgYmUgMS4gIFRoZSBleHRyYSBjb21wbGV4aXR5CisJICogaGVyZSBpcyBhIGhlZGdlIGFnYWluc3QgZnV0dXJlIGNoYW5nZXMuCisJICovCisKKwkvKiBGaWd1cmUgb3V0IGhvdyBtYW55IHRpbWVzIHRvIGRvIHRoZSBmbGFzaCBwcm9ncmFtbWluZyAqLworCW5idXJucyA9IGxlbiAvIGh3LT5idWZpbmZvLmxlbjsKKwluYnVybnMgKz0gKGxlbiAlIGh3LT5idWZpbmZvLmxlbikgPyAxIDogMDsKKworCS8qIEZvciBlYWNoIGZsYXNoIHByb2dyYW0gY3ljbGUsIGhvdyBtYW55IFVTQiB3bWVtcmVxJ3MgYXJlIG5lZWRlZD8gKi8KKwlud3JpdGVzID0gaHctPmJ1ZmluZm8ubGVuIC8gSEZBMzg0eF9VU0JfUldNRU1fTUFYTEVOOworCW53cml0ZXMgKz0gKGh3LT5idWZpbmZvLmxlbiAlIEhGQTM4NHhfVVNCX1JXTUVNX01BWExFTikgPyAxIDogMDsKKworCS8qIEZvciBlYWNoIGJ1cm4gKi8KKwlmb3IgKCBpID0gMDsgaSA8IG5idXJuczsgaSsrKSB7CisJCS8qIEdldCB0aGUgZGVzdCBhZGRyZXNzIGFuZCBsZW4gKi8KKwkJYnVybmxlbiA9IChsZW4gLSAoaHctPmJ1ZmluZm8ubGVuICogaSkpID4gaHctPmJ1ZmluZm8ubGVuID8KKwkJCQlody0+YnVmaW5mby5sZW4gOgorCQkJCShsZW4gLSAoaHctPmJ1ZmluZm8ubGVuICogaSkpOworCQlidXJuZGFkZHIgPSBkYWRkciArIChody0+YnVmaW5mby5sZW4gKiBpKTsKKwkJYnVybmxvID0gSEZBMzg0eF9BRERSX0NNRF9NS09GRihidXJuZGFkZHIpOworCQlidXJuaGkgPSBIRkEzODR4X0FERFJfQ01EX01LUEFHRShidXJuZGFkZHIpOworCisJCVdMQU5fTE9HX0lORk8oIldyaXRpbmcgJWQgYnl0ZXMgdG8gZmxhc2ggQDB4JTA2eFxuIiwKKwkJCWJ1cm5sZW4sIGJ1cm5kYWRkcik7CisKKwkJLyogU2V0IHRoZSBkb3dubG9hZCBtb2RlICovCisJCXJlc3VsdCA9IGhmYTM4NHhfY21kX2Rvd25sb2FkKGh3LCBIRkEzODR4X1BST0dNT0RFX05WLAorCQkJCWJ1cm5sbywgYnVybmhpLCBidXJubGVuKTsKKwkJaWYgKCByZXN1bHQgKSB7CisJCQlXTEFOX0xPR19FUlJPUigiZG93bmxvYWQoTlYsbG89JXgsaGk9JXgsbGVuPSV4KSAiCisJCQkJImNtZCBmYWlsZWQsIHJlc3VsdD0lZC4gQWJvcnRpbmcgZC9sXG4iLAorCQkJCWJ1cm5sbywgYnVybmhpLCBidXJubGVuLCByZXN1bHQpOworCQkJZ290byBleGl0X3Byb2M7CisJCX0KKworCQkvKiBjb3B5IHRoZSBkYXRhIHRvIHRoZSBmbGFzaCBkb3dubG9hZCBidWZmZXIgKi8KKwkJZm9yICggaj0wOyBqIDwgbndyaXRlczsgaisrKSB7CisJCQl3cml0ZWJ1ZiA9IGJ1ZiArCisJCQkJKGkqaHctPmJ1ZmluZm8ubGVuKSArCisJCQkJKGoqSEZBMzg0eF9VU0JfUldNRU1fTUFYTEVOKTsKKworCQkJd3JpdGVwYWdlID0gSEZBMzg0eF9BRERSX0NNRF9NS1BBR0UoCisJCQkJCWRsYnVmYWRkciArCisJCQkJCShqKkhGQTM4NHhfVVNCX1JXTUVNX01BWExFTikpOworCQkJd3JpdGVvZmZzZXQgPSBIRkEzODR4X0FERFJfQ01EX01LT0ZGKAorCQkJCQlkbGJ1ZmFkZHIgKworCQkJCQkoaipIRkEzODR4X1VTQl9SV01FTV9NQVhMRU4pKTsKKworCQkJd3JpdGVsZW4gPSBidXJubGVuLShqKkhGQTM4NHhfVVNCX1JXTUVNX01BWExFTik7CisJCQl3cml0ZWxlbiA9IHdyaXRlbGVuICA+IEhGQTM4NHhfVVNCX1JXTUVNX01BWExFTiA/CisJCQkJCUhGQTM4NHhfVVNCX1JXTUVNX01BWExFTiA6CisJCQkJCXdyaXRlbGVuOworCisJCQlyZXN1bHQgPSBoZmEzODR4X2Rvd21lbV93YWl0KCBodywKKwkJCQkJd3JpdGVwYWdlLAorCQkJCQl3cml0ZW9mZnNldCwKKwkJCQkJd3JpdGVidWYsCisJCQkJCXdyaXRlbGVuICk7CisjaWYgMAorCitDb21tZW50IG91dCBmb3IgZGVidWdnaW5nLCBhc3N1bWUgdGhlIHdyaXRlIHdhcyBzdWNjZXNzZnVsLgorCQkJaWYgKHJlc3VsdCkgeworCQkJCVdMQU5fTE9HX0VSUk9SKAorCQkJCQkiV3JpdGUgdG8gZGwgYnVmZmVyIGZhaWxlZCwgIgorCQkJCQkicmVzdWx0PTB4JTA0eC4gQWJvcnRpbmcuXG4iLAorCQkJCQlyZXN1bHQpOworCQkJCWdvdG8gZXhpdF9wcm9jOworCQkJfQorI2VuZGlmCisKKwkJfQorCisJCS8qIHNldCB0aGUgZG93bmxvYWQgJ3dyaXRlIGZsYXNoJyBtb2RlICovCisJCXJlc3VsdCA9IGhmYTM4NHhfY21kX2Rvd25sb2FkKGh3LAorCQkJCUhGQTM4NHhfUFJPR01PREVfTlZXUklURSwKKwkJCQkwLDAsMCk7CisJCWlmICggcmVzdWx0ICkgeworCQkJV0xBTl9MT0dfRVJST1IoCisJCQkJImRvd25sb2FkKE5WV1JJVEUsbG89JXgsaGk9JXgsbGVuPSV4KSAiCisJCQkJImNtZCBmYWlsZWQsIHJlc3VsdD0lZC4gQWJvcnRpbmcgZC9sXG4iLAorCQkJCWJ1cm5sbywgYnVybmhpLCBidXJubGVuLCByZXN1bHQpOworCQkJZ290byBleGl0X3Byb2M7CisJCX0KKworCQkvKiBUT0RPOiBXZSByZWFsbHkgc2hvdWxkIGRvIGEgcmVhZGJhY2sgYW5kIGNvbXBhcmUuICovCisJfQorCitleGl0X3Byb2M6CisKKwkvKiBMZWF2ZSB0aGUgZmlybXdhcmUgaW4gdGhlICdwb3N0LXByb2cnIG1vZGUuICBmbGFzaGRsX2Rpc2FibGUgd2lsbCAqLworCS8qICBhY3R1YWxseSBkaXNhYmxlIHByb2dyYW1taW5nIG1vZGUuICBSZW1lbWJlciwgdGhhdCB3aWxsIGNhdXNlIHRoZSAqLworCS8qICB0aGUgZmlybXdhcmUgdG8gZWZmZWN0aXZlbHkgcmVzZXQgaXRzZWxmLiAqLworCisJREJGRVhJVDsKKwlyZXR1cm4gcmVzdWx0OworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBoZmEzODR4X2RydnJfZ2V0Y29uZmlnCisqCisqIFBlcmZvcm1zIHRoZSBzZXF1ZW5jZSBuZWNlc3NhcnkgdG8gcmVhZCBhIGNvbmZpZy9pbmZvIGl0ZW0uCisqCisqIEFyZ3VtZW50czoKKyoJaHcJCWRldmljZSBzdHJ1Y3R1cmUKKyoJcmlkCQljb25maWcvaW5mbyByZWNvcmQgaWQgKGhvc3Qgb3JkZXIpCisqCWJ1ZgkJaG9zdCBzaWRlIHJlY29yZCBidWZmZXIuICBVcG9uIHJldHVybiBpdCB3aWxsCisqCQkJY29udGFpbiB0aGUgYm9keSBwb3J0aW9uIG9mIHRoZSByZWNvcmQgKG1pbnVzIHRoZQorKgkJCVJJRCBhbmQgbGVuKS4KKyoJbGVuCQlidWZmZXIgbGVuZ3RoIChpbiBieXRlcywgc2hvdWxkIG1hdGNoIHJlY29yZCBsZW5ndGgpCisqCisqIFJldHVybnM6CisqCTAJCXN1Y2Nlc3MKKyoJPjAJCWYvdyByZXBvcnRlZCBlcnJvciAtIGYvdyBzdGF0dXMgY29kZQorKgk8MAkJZHJpdmVyIHJlcG9ydGVkIGVycm9yCisqCS1FTk9EQVRBIAlsZW5ndGggbWlzbWF0Y2ggYmV0d2VlbiBhcmd1bWVudCBhbmQgcmV0cmlldmVkCisqCQkJcmVjb3JkLgorKgorKiBTaWRlIGVmZmVjdHM6CisqCisqIENhbGwgY29udGV4dDoKKyoJcHJvY2VzcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitpbnQgaGZhMzg0eF9kcnZyX2dldGNvbmZpZyhoZmEzODR4X3QgKmh3LCBVSU5UMTYgcmlkLCB2b2lkICpidWYsIFVJTlQxNiBsZW4pCit7CisJaW50IAkJCXJlc3VsdDsKKwlEQkZFTlRFUjsKKworCXJlc3VsdCA9IGhmYTM4NHhfZG9ycmlkX3dhaXQoaHcsIHJpZCwgYnVmLCBsZW4pOworCisJREJGRVhJVDsKKwlyZXR1cm4gcmVzdWx0OworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIGhmYTM4NHhfZHJ2cl9nZXRjb25maWdfYXN5bmMKKyAqCisgKiBQZXJmb3JtcyB0aGUgc2VxdWVuY2UgbmVjZXNzYXJ5IHRvIHBlcmZvcm0gYW4gYXN5bmMgcmVhZCBvZgorICogb2YgYSBjb25maWcvaW5mbyBpdGVtLgorICoKKyAqIEFyZ3VtZW50czoKKyAqICAgICAgIGh3ICAgICAgICAgICAgICBkZXZpY2Ugc3RydWN0dXJlCisgKiAgICAgICByaWQgICAgICAgICAgICAgY29uZmlnL2luZm8gcmVjb3JkIGlkIChob3N0IG9yZGVyKQorICogICAgICAgYnVmICAgICAgICAgICAgIGhvc3Qgc2lkZSByZWNvcmQgYnVmZmVyLiAgVXBvbiByZXR1cm4gaXQgd2lsbAorICogICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW4gdGhlIGJvZHkgcG9ydGlvbiBvZiB0aGUgcmVjb3JkIChtaW51cyB0aGUKKyAqICAgICAgICAgICAgICAgICAgICAgICBSSUQgYW5kIGxlbikuCisgKiAgICAgICBsZW4gICAgICAgICAgICAgYnVmZmVyIGxlbmd0aCAoaW4gYnl0ZXMsIHNob3VsZCBtYXRjaCByZWNvcmQgbGVuZ3RoKQorICogICAgICAgY2JmbiAgICAgICAgICAgIGNhbGxlciBzdXBwbGllZCBjYWxsYmFjaywgY2FsbGVkIHdoZW4gdGhlIGNvbW1hbmQKKyAqICAgICAgICAgICAgICAgICAgICAgICBpcyBkb25lIChzdWNjZXNzZnVsIG9yIG5vdCkuCisgKiAgICAgICBjYmZuZGF0YSAgICAgICAgcG9pbnRlciB0byBzb21lIGNhbGxlciBzdXBwbGllZCBkYXRhIHRoYXQgd2lsbCBiZQorICogICAgICAgICAgICAgICAgICAgICAgIHBhc3NlZCBpbiBhcyBhbiBhcmd1bWVudCB0byB0aGUgY2Jmbi4KKyAqCisgKiBSZXR1cm5zOgorICogICAgICAgbm90aGluZyAgICAgICAgIHRoZSBjYmZuIGdldHMgYSBzdGF0dXMgYXJndW1lbnQgaWRlbnRpZnlpbmcgaWYKKyAqICAgICAgICAgICAgICAgICAgICAgICBhbnkgZXJyb3JzIG9jY3VyLgorICogU2lkZSBlZmZlY3RzOgorICogICAgICAgUXVldWVzIGFuIGhmYTM4NHhfdXNiY21kX3QgZm9yIHN1YnNlcXVlbnQgZXhlY3V0aW9uLgorICoKKyAqIENhbGwgY29udGV4dDoKKyAqICAgICAgIEFueQorIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworaW50CitoZmEzODR4X2RydnJfZ2V0Y29uZmlnX2FzeW5jKAorICAgICAgICAgaGZhMzg0eF90ICAgICAgICAgICAgICAgKmh3LAorICAgICAgICAgVUlOVDE2ICAgICAgICAgICAgICAgICAgcmlkLAorICAgICAgICAgY3RseF91c2VyY2JfdCAgICAgICAgICAgdXNlcmNiLAorICAgICAgICAgdm9pZCAgICAgICAgICAgICAgICAgICAgKnVzZXJjYl9kYXRhKQoreworICAgICAgICAgcmV0dXJuIGhmYTM4NHhfZG9ycmlkX2FzeW5jKGh3LCByaWQsIE5VTEwsIDAsCisJCQkJICAgICBoZmEzODR4X2NiX3JyaWQsIHVzZXJjYiwgdXNlcmNiX2RhdGEpOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIGhmYTM4NHhfZHJ2cl9zZXRjb25maWdfYXN5bmMKKyAqCisgKiBQZXJmb3JtcyB0aGUgc2VxdWVuY2UgbmVjZXNzYXJ5IHRvIHdyaXRlIGEgY29uZmlnL2luZm8gaXRlbS4KKyAqCisgKiBBcmd1bWVudHM6CisgKiAgICAgICBodyAgICAgICAgICAgICAgZGV2aWNlIHN0cnVjdHVyZQorICogICAgICAgcmlkICAgICAgICAgICAgIGNvbmZpZy9pbmZvIHJlY29yZCBpZCAoaW4gaG9zdCBvcmRlcikKKyAqICAgICAgIGJ1ZiAgICAgICAgICAgICBob3N0IHNpZGUgcmVjb3JkIGJ1ZmZlcgorICogICAgICAgbGVuICAgICAgICAgICAgIGJ1ZmZlciBsZW5ndGggKGluIGJ5dGVzKQorICogICAgICAgdXNlcmNiICAgICAgICAgIGNvbXBsZXRpb24gY2FsbGJhY2sKKyAqICAgICAgIHVzZXJjYl9kYXRhICAgICBjb21wbGV0aW9uIGNhbGxiYWNrIGFyZ3VtZW50CisgKgorICogUmV0dXJuczoKKyAqICAgICAgIDAgICAgICAgICAgICAgICBzdWNjZXNzCisgKiAgICAgICA+MCAgICAgICAgICAgICAgZi93IHJlcG9ydGVkIGVycm9yIC0gZi93IHN0YXR1cyBjb2RlCisgKiAgICAgICA8MCAgICAgICAgICAgICAgZHJpdmVyIHJlcG9ydGVkIGVycm9yCisgKgorICogU2lkZSBlZmZlY3RzOgorICoKKyAqIENhbGwgY29udGV4dDoKKyAqICAgICAgIHByb2Nlc3MKKyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK2ludAoraGZhMzg0eF9kcnZyX3NldGNvbmZpZ19hc3luYygKKyAgICAgICAgIGhmYTM4NHhfdCAgICAgICAqaHcsCisgICAgICAgICBVSU5UMTYgICAgICAgICAgcmlkLAorICAgICAgICAgdm9pZCAgICAgICAgICAgICpidWYsCisgICAgICAgICBVSU5UMTYgICAgICAgICAgbGVuLAorICAgICAgICAgY3RseF91c2VyY2JfdCAgIHVzZXJjYiwKKyAgICAgICAgIHZvaWQgICAgICAgICAgICAqdXNlcmNiX2RhdGEpCit7CisJcmV0dXJuIGhmYTM4NHhfZG93cmlkX2FzeW5jKGh3LCByaWQsIGJ1ZiwgbGVuLAorCQkJCSAgICBoZmEzODR4X2NiX3N0YXR1cywgdXNlcmNiLCB1c2VyY2JfZGF0YSk7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBoZmEzODR4X2RydnJfaGFuZG92ZXIKKyoKKyogU2VuZHMgYSBoYW5kb3ZlciBub3RpZmljYXRpb24gdG8gdGhlIE1BQy4KKyoKKyogQXJndW1lbnRzOgorKglodwkJZGV2aWNlIHN0cnVjdHVyZQorKglhZGRyCQlhZGRyZXNzIG9mIHN0YXRpb24gdGhhdCdzIGxlZnQKKyoKKyogUmV0dXJuczoKKyoJemVybwkJc3VjY2Vzcy4KKyoJLUVSRVNUQVJUU1lTCXJlY2VpdmVkIHNpZ25hbCB3aGlsZSB3YWl0aW5nIGZvciBzZW1hcGhvcmUuCisqCS1FSU8JCWZhaWxlZCB0byB3cml0ZSB0byBiYXAsIG9yIGZhaWxlZCBpbiBjbWQuCisqCisqIFNpZGUgZWZmZWN0czoKKyoKKyogQ2FsbCBjb250ZXh0OgorKglwcm9jZXNzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK2ludCBoZmEzODR4X2RydnJfaGFuZG92ZXIoIGhmYTM4NHhfdCAqaHcsIFVJTlQ4ICphZGRyKQoreworICAgICAgICBEQkZFTlRFUjsKKwlXTEFOX0xPR19FUlJPUigiTm90IGN1cnJlbnRseSBzdXBwb3J0ZWQgaW4gVVNCIVxuIik7CisJREJGRVhJVDsKKwlyZXR1cm4gLUVJTzsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIGhmYTM4NHhfZHJ2cl9sb3dfbGV2ZWwKKyoKKyogV3JpdGUgdGVzdCBjb21tYW5kcyB0byB0aGUgY2FyZC4gIFNvbWUgdGVzdCBjb21tYW5kcyBkb24ndCBtYWtlCisqIHNlbnNlIHdpdGhvdXQgcHJpb3Igc2V0LXVwLiAgRm9yIGV4YW1wbGUsIGNvbnRpbm91cyBUWCBpc24ndCB2ZXJ5CisqIHVzZWZ1bCB1bnRpbCB5b3Ugc2V0IHRoZSBjaGFubmVsLiAgVGhhdCBmdW5jdGlvbmFsaXR5IHNob3VsZCBiZQorKgorKiBTaWRlIGVmZmVjdHM6CisqCisqIENhbGwgY29udGV4dDoKKyogICAgICBwcm9jZXNzIHRocmVhZAorKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitpbnQgaGZhMzg0eF9kcnZyX2xvd19sZXZlbChoZmEzODR4X3QgKmh3LCBoZmEzODR4X21ldGFjbWRfdCAqY21kKQoreworCWludCAgICAgICAgICAgICByZXN1bHQ7CisJREJGRU5URVI7CisKKwkvKiBEbyBpIG5lZWQgYSBob3N0MmhmYS4uLiBjb252ZXJzaW9uID8gKi8KKworCXJlc3VsdCA9IGhmYTM4NHhfZG9jbWRfd2FpdChodywgY21kKTsKKworCURCRkVYSVQ7CisJcmV0dXJuIHJlc3VsdDsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIGhmYTM4NHhfZHJ2cl9tbWlfcmVhZAorKgorKiBSZWFkIG1taSByZWdpc3RlcnMuICBtbWkgaXMgaW50ZXJzaWwtc3BlYWsgZm9yIHRoZSBiYXNlYmFuZAorKiBwcm9jZXNzb3IgcmVnaXN0ZXJzLgorKgorKiBBcmd1bWVudHM6CisqICAgICAgIGh3ICAgICAgICAgICAgICBkZXZpY2Ugc3RydWN0dXJlCisqICAgICAgIHJlZ2lzdGVyICAgICAgICBUaGUgdGVzdCByZWdpc3RlciB0byBiZSBhY2Nlc3NlZCAobXVzdCBiZSBldmVuICMpLgorKgorKiBSZXR1cm5zOgorKiAgICAgICAwICAgICAgICAgICAgICAgc3VjY2VzcworKiAgICAgICA+MCAgICAgICAgICAgICAgZi93IHJlcG9ydGVkIGVycm9yIC0gZi93IHN0YXR1cyBjb2RlCisqICAgICAgIDwwICAgICAgICAgICAgICBkcml2ZXIgcmVwb3J0ZWQgZXJyb3IKKyoKKyogU2lkZSBlZmZlY3RzOgorKgorKiBDYWxsIGNvbnRleHQ6CisqICAgICAgIHByb2Nlc3MKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworaW50IGhmYTM4NHhfZHJ2cl9tbWlfcmVhZChoZmEzODR4X3QgKmh3LCBVSU5UMzIgYWRkciwgVUlOVDMyICpyZXNwKQoreworI2lmIDAKKyAgICAgICAgaW50ICAgICAgICAgICAgIHJlc3VsdCA9IDA7CisgICAgICAgIFVJTlQxNiAgY21kX2NvZGUgPSAoVUlOVDE2KSAweDMwOworICAgICAgICBVSU5UMTYgcGFyYW0gPSAoVUlOVDE2KSBhZGRyOworICAgICAgICBEQkZFTlRFUjsKKworICAgICAgICAvKiBEbyBpIG5lZWQgYSBob3N0MmhmYS4uLiBjb252ZXJzaW9uID8gKi8KKyAgICAgICAgcmVzdWx0ID0gaGZhMzg0eF9kb2NtZF93YWl0KGh3LCBjbWRfY29kZSk7CisKKyAgICAgICAgREJGRVhJVDsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyNlbmRpZgorcmV0dXJuIDA7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBoZmEzODR4X2RydnJfbW1pX3dyaXRlCisqCisqIFJlYWQgbW1pIHJlZ2lzdGVycy4gIG1taSBpcyBpbnRlcnNpbC1zcGVhayBmb3IgdGhlIGJhc2ViYW5kCisqIHByb2Nlc3NvciByZWdpc3RlcnMuCisqCisqIEFyZ3VtZW50czoKKyogICAgICAgaHcgICAgICAgICAgICAgIGRldmljZSBzdHJ1Y3R1cmUKKyogICAgICAgYWRkciAgICAgICAgICAgIFRoZSB0ZXN0IHJlZ2lzdGVyIHRvIGJlIGFjY2Vzc2VkIChtdXN0IGJlIGV2ZW4gIykuCisqICAgICAgIGRhdGEgICAgICAgICAgICBUaGUgZGF0YSB2YWx1ZSB0byB3cml0ZSB0byB0aGUgcmVnaXN0ZXIuCisqCisqIFJldHVybnM6CisqICAgICAgIDAgICAgICAgICAgICAgICBzdWNjZXNzCisqICAgICAgID4wICAgICAgICAgICAgICBmL3cgcmVwb3J0ZWQgZXJyb3IgLSBmL3cgc3RhdHVzIGNvZGUKKyogICAgICAgPDAgICAgICAgICAgICAgIGRyaXZlciByZXBvcnRlZCBlcnJvcgorKgorKiBTaWRlIGVmZmVjdHM6CisqCisqIENhbGwgY29udGV4dDoKKyogICAgICAgcHJvY2VzcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK2ludAoraGZhMzg0eF9kcnZyX21taV93cml0ZShoZmEzODR4X3QgKmh3LCBVSU5UMzIgYWRkciwgVUlOVDMyIGRhdGEpCit7CisjaWYgMAorICAgICAgICBpbnQgICAgICAgICAgICAgcmVzdWx0ID0gMDsKKyAgICAgICAgVUlOVDE2ICBjbWRfY29kZSA9IChVSU5UMTYpIDB4MzE7CisgICAgICAgIFVJTlQxNiBwYXJhbTAgPSAoVUlOVDE2KSBhZGRyOworICAgICAgICBVSU5UMTYgcGFyYW0xID0gKFVJTlQxNikgZGF0YTsKKyAgICAgICAgREJGRU5URVI7CisKKyAgICAgICAgV0xBTl9MT0dfREVCVUcoMSwibW1pIHdyaXRlIDogYWRkciA9IDB4JTA4bHhcbiIsIGFkZHIpOworICAgICAgICBXTEFOX0xPR19ERUJVRygxLCJtbWkgd3JpdGUgOiBkYXRhID0gMHglMDhseFxuIiwgZGF0YSk7CisKKyAgICAgICAgLyogRG8gaSBuZWVkIGEgaG9zdDJoZmEuLi4gY29udmVyc2lvbiA/ICovCisgICAgICAgIHJlc3VsdCA9IGhmYTM4NHhfZG9jbWRfd2FpdChodywgY21kX2NvZGUpOworCisgICAgICAgIERCRkVYSVQ7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisjZW5kaWYKK3JldHVybiAwOworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBoZmEzODR4X2RydnJfcmFtZGxfZGlzYWJsZQorKgorKiBFbmRzIHRoZSByYW0gZG93bmxvYWQgc3RhdGUuCisqCisqIEFyZ3VtZW50czoKKyoJaHcJCWRldmljZSBzdHJ1Y3R1cmUKKyoKKyogUmV0dXJuczoKKyoJMAkJc3VjY2VzcworKgk+MAkJZi93IHJlcG9ydGVkIGVycm9yIC0gZi93IHN0YXR1cyBjb2RlCisqCTwwCQlkcml2ZXIgcmVwb3J0ZWQgZXJyb3IKKyoKKyogU2lkZSBlZmZlY3RzOgorKgorKiBDYWxsIGNvbnRleHQ6CisqCXByb2Nlc3MKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworaW50CitoZmEzODR4X2RydnJfcmFtZGxfZGlzYWJsZShoZmEzODR4X3QgKmh3KQoreworCURCRkVOVEVSOworCS8qIENoZWNrIHRoYXQgd2UncmUgYWxyZWFkeSBpbiB0aGUgZG93bmxvYWQgc3RhdGUgKi8KKwlpZiAoIGh3LT5kbHN0YXRlICE9IEhGQTM4NHhfRExTVEFURV9SQU1FTkFCTEVEICkgeworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlXTEFOX0xPR19ERUJVRygzLCJyYW1kbF9kaXNhYmxlKClcbiIpOworCisJLyogVGhlcmUgaXNuJ3QgbXVjaCB3ZSBjYW4gZG8gYXQgdGhpcyBwb2ludCwgc28gSSBkb24ndCAqLworCS8qICBib3RoZXIgIHcvIHRoZSByZXR1cm4gdmFsdWUgKi8KKwloZmEzODR4X2NtZF9kb3dubG9hZChodywgSEZBMzg0eF9QUk9HTU9ERV9ESVNBQkxFLCAwLCAwICwgMCk7CisJaHctPmRsc3RhdGUgPSBIRkEzODR4X0RMU1RBVEVfRElTQUJMRUQ7CisKKwlEQkZFWElUOworCXJldHVybiAwOworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBoZmEzODR4X2RydnJfcmFtZGxfZW5hYmxlCisqCisqIEJlZ2lucyB0aGUgcmFtIGRvd25sb2FkIHN0YXRlLiAgQ2hlY2tzIHRvIHNlZSB0aGF0IHdlJ3JlIG5vdAorKiBhbHJlYWR5IGluIGEgZG93bmxvYWQgc3RhdGUgYW5kIHRoYXQgYSBwb3J0IGlzbid0IGVuYWJsZWQuCisqIFNldHMgdGhlIGRvd25sb2FkIHN0YXRlIGFuZCBjYWxscyBjbWRfZG93bmxvYWQgd2l0aCB0aGUKKyogRU5BQkxFX1ZPTEFUSUxFIHN1YmNvbW1hbmQgYW5kIHRoZSBleGVhZGRyIGFyZ3VtZW50LgorKgorKiBBcmd1bWVudHM6CisqCWh3CQlkZXZpY2Ugc3RydWN0dXJlCisqCWV4ZWFkZHIJCXRoZSBjYXJkIGV4ZWN1dGlvbiBhZGRyZXNzIHRoYXQgd2lsbCBiZQorKiAgICAgICAgICAgICAgICAgICAgICAganVtcGVkIHRvIHdoZW4gcmFtZGxfZGlzYWJsZSgpIGlzIGNhbGxlZAorKgkJCShob3N0IG9yZGVyKS4KKyoKKyogUmV0dXJuczoKKyoJMAkJc3VjY2VzcworKgk+MAkJZi93IHJlcG9ydGVkIGVycm9yIC0gZi93IHN0YXR1cyBjb2RlCisqCTwwCQlkcml2ZXIgcmVwb3J0ZWQgZXJyb3IKKyoKKyogU2lkZSBlZmZlY3RzOgorKgorKiBDYWxsIGNvbnRleHQ6CisqCXByb2Nlc3MKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworaW50CitoZmEzODR4X2RydnJfcmFtZGxfZW5hYmxlKGhmYTM4NHhfdCAqaHcsIFVJTlQzMiBleGVhZGRyKQoreworCWludAkJcmVzdWx0ID0gMDsKKwlVSU5UMTYJCWxvd2FkZHI7CisJVUlOVDE2CQloaWFkZHI7CisJaW50CQlpOworCURCRkVOVEVSOworCS8qIENoZWNrIHRoYXQgYSBwb3J0IGlzbid0IGFjdGl2ZSAqLworCWZvciAoIGkgPSAwOyBpIDwgSEZBMzg0eF9QT1JUSURfTUFYOyBpKyspIHsKKwkJaWYgKCBody0+cG9ydF9lbmFibGVkW2ldICkgeworCQkJV0xBTl9MT0dfRVJST1IoCisJCQkJIkNhbid0IGRvd25sb2FkIHdpdGggYSBtYWNwb3J0IGVuYWJsZWQuXG4iKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJfQorCisJLyogQ2hlY2sgdGhhdCB3ZSdyZSBub3QgYWxyZWFkeSBpbiBhIGRvd25sb2FkIHN0YXRlICovCisJaWYgKCBody0+ZGxzdGF0ZSAhPSBIRkEzODR4X0RMU1RBVEVfRElTQUJMRUQgKSB7CisJCVdMQU5fTE9HX0VSUk9SKAorCQkJIkRvd25sb2FkIHN0YXRlIG5vdCBkaXNhYmxlZC5cbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlXTEFOX0xPR19ERUJVRygzLCJyYW1kbF9lbmFibGUsIGV4ZWFkZHI9MHglMDh4XG4iLCBleGVhZGRyKTsKKworCS8qIENhbGwgdGhlIGRvd25sb2FkKDEsYWRkcikgZnVuY3Rpb24gKi8KKwlsb3dhZGRyID0gSEZBMzg0eF9BRERSX0NNRF9NS09GRihleGVhZGRyKTsKKwloaWFkZHIgPSAgSEZBMzg0eF9BRERSX0NNRF9NS1BBR0UoZXhlYWRkcik7CisKKwlyZXN1bHQgPSBoZmEzODR4X2NtZF9kb3dubG9hZChodywgSEZBMzg0eF9QUk9HTU9ERV9SQU0sCisJCQlsb3dhZGRyLCBoaWFkZHIsIDApOworCisJaWYgKCByZXN1bHQgPT0gMCkgeworCQkvKiBTZXQgdGhlIGRvd25sb2FkIHN0YXRlICovCisJCWh3LT5kbHN0YXRlID0gSEZBMzg0eF9ETFNUQVRFX1JBTUVOQUJMRUQ7CisJfSBlbHNlIHsKKwkJV0xBTl9MT0dfREVCVUcoMSwKKwkJCSJjbWRfZG93bmxvYWQoMHglMDR4LCAweCUwNHgpIGZhaWxlZCwgcmVzdWx0PSVkLlxuIiwKKwkJCWxvd2FkZHIsCisJCQloaWFkZHIsCisJCQlyZXN1bHQpOworCX0KKworCURCRkVYSVQ7CisJcmV0dXJuIHJlc3VsdDsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogaGZhMzg0eF9kcnZyX3JhbWRsX3dyaXRlCisqCisqIFBlcmZvcm1zIGEgUkFNIGRvd25sb2FkIG9mIGEgY2h1bmsgb2YgZGF0YS4gRmlyc3QgY2hlY2tzIHRvIHNlZQorKiB0aGF0IHdlJ3JlIGluIHRoZSBSQU0gZG93bmxvYWQgc3RhdGUsIHRoZW4gdXNlcyB0aGUgW3JlYWR8d3JpdGVdbWVtIFVTQgorKiBjb21tYW5kcyB0byAxKSBjb3B5IHRoZSBkYXRhLCAyKSByZWFkYmFjayBhbmQgY29tcGFyZS4gIFRoZSBkb3dubG9hZAorKiBzdGF0ZSBpcyB1bmFmZmVjdGVkLiAgV2hlbiBhbGwgZGF0YSBoYXMgYmVlbiB3cml0dGVuIHVzaW5nCisqIHRoaXMgZnVuY3Rpb24sIGNhbGwgZHJ2cl9yYW1kbF9kaXNhYmxlKCkgdG8gZW5kIHRoZSBkb3dubG9hZCBzdGF0ZQorKiBhbmQgcmVzdGFydCB0aGUgTUFDLgorKgorKiBBcmd1bWVudHM6CisqCWh3CQlkZXZpY2Ugc3RydWN0dXJlCisqCWRhZGRyCQlDYXJkIGFkZHJlc3MgdG8gd3JpdGUgdG8uIChob3N0IG9yZGVyKQorKglidWYJCVB0ciB0byBkYXRhIHRvIHdyaXRlLgorKglsZW4JCUxlbmd0aCBvZiBkYXRhIChob3N0IG9yZGVyKS4KKyoKKyogUmV0dXJuczoKKyoJMAkJc3VjY2VzcworKgk+MAkJZi93IHJlcG9ydGVkIGVycm9yIC0gZi93IHN0YXR1cyBjb2RlCisqCTwwCQlkcml2ZXIgcmVwb3J0ZWQgZXJyb3IKKyoKKyogU2lkZSBlZmZlY3RzOgorKgorKiBDYWxsIGNvbnRleHQ6CisqCXByb2Nlc3MKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworaW50CitoZmEzODR4X2RydnJfcmFtZGxfd3JpdGUoaGZhMzg0eF90ICpodywgVUlOVDMyIGRhZGRyLCB2b2lkKiBidWYsIFVJTlQzMiBsZW4pCit7CisJaW50CQlyZXN1bHQgPSAwOworCWludAkJbndyaXRlczsKKwlVSU5UOAkJKmRhdGEgPSBidWY7CisJaW50CQlpOworCVVJTlQzMgkJY3VycmFkZHI7CisJVUlOVDE2CQljdXJycGFnZTsKKwlVSU5UMTYJCWN1cnJvZmZzZXQ7CisJVUlOVDE2CQljdXJybGVuOworCURCRkVOVEVSOworCS8qIENoZWNrIHRoYXQgd2UncmUgaW4gdGhlIHJhbSBkb3dubG9hZCBzdGF0ZSAqLworCWlmICggaHctPmRsc3RhdGUgIT0gSEZBMzg0eF9ETFNUQVRFX1JBTUVOQUJMRUQgKSB7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCVdMQU5fTE9HX0lORk8oIldyaXRpbmcgJWQgYnl0ZXMgdG8gcmFtIEAweCUwNnhcbiIsIGxlbiwgZGFkZHIpOworCisJLyogSG93IG1hbnkgZG93bWVtIGNhbGxzPyAgKi8KKwlud3JpdGVzID0gbGVuIC8gSEZBMzg0eF9VU0JfUldNRU1fTUFYTEVOOworCW53cml0ZXMgKz0gbGVuICUgSEZBMzg0eF9VU0JfUldNRU1fTUFYTEVOID8gMSA6IDA7CisKKwkvKiBEbyBibG9ja2luZyB3bWVtJ3MgKi8KKwlmb3IoaT0wOyBpIDwgbndyaXRlczsgaSsrKSB7CisJCS8qIG1ha2UgYWRkcmVzcyBhcmdzICovCisJCWN1cnJhZGRyID0gZGFkZHIgKyAoaSAqIEhGQTM4NHhfVVNCX1JXTUVNX01BWExFTik7CisJCWN1cnJwYWdlID0gSEZBMzg0eF9BRERSX0NNRF9NS1BBR0UoY3VycmFkZHIpOworCQljdXJyb2Zmc2V0ID0gSEZBMzg0eF9BRERSX0NNRF9NS09GRihjdXJyYWRkcik7CisJCWN1cnJsZW4gPSBsZW4gLSAoaSAqIEhGQTM4NHhfVVNCX1JXTUVNX01BWExFTik7CisJCWlmICggY3VycmxlbiA+IEhGQTM4NHhfVVNCX1JXTUVNX01BWExFTikgeworCQkJY3VycmxlbiA9IEhGQTM4NHhfVVNCX1JXTUVNX01BWExFTjsKKwkJfQorCisJIAkvKiBEbyBibG9ja2luZyBjdGx4ICovCisJCXJlc3VsdCA9IGhmYTM4NHhfZG93bWVtX3dhaXQoIGh3LAorCQkJCWN1cnJwYWdlLAorCQkJCWN1cnJvZmZzZXQsCisJCQkJZGF0YSArIChpKkhGQTM4NHhfVVNCX1JXTUVNX01BWExFTiksCisJCQkJY3VycmxlbiApOworCisJCWlmIChyZXN1bHQpIGJyZWFrOworCisJCS8qIFRPRE86IFdlIHJlYWxseSBzaG91bGQgaGF2ZSBhIHJlYWRiYWNrLiAqLworCX0KKworCURCRkVYSVQ7CisJcmV0dXJuIHJlc3VsdDsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogaGZhMzg0eF9kcnZyX3JlYWRwZGEKKyoKKyogUGVyZm9ybXMgdGhlIHNlcXVlbmNlIHRvIHJlYWQgdGhlIFBEQSBzcGFjZS4gIE5vdGUgdGhlcmUgaXMgbm8KKyogZHJ2cl93cml0ZXBkYSgpIGZ1bmN0aW9uLiAgV3JpdGluZyBhIFBEQSBpcworKiBnZW5lcmFsbHkgaW1wbGVtZW50ZWQgYnkgYSBjYWxsaW5nIGNvbXBvbmVudCB2aWEgY2FsbHMgdG8KKyogY21kX2Rvd25sb2FkIGFuZCB3cml0aW5nIHRvIHRoZSBmbGFzaCBkb3dubG9hZCBidWZmZXIgdmlhIHRoZQorKiBhdXggcmVncy4KKyoKKyogQXJndW1lbnRzOgorKglodwkJZGV2aWNlIHN0cnVjdHVyZQorKglidWYJCWJ1ZmZlciB0byBzdG9yZSBQREEgaW4KKyoJbGVuCQlidWZmZXIgbGVuZ3RoCisqCisqIFJldHVybnM6CisqCTAJCXN1Y2Nlc3MKKyoJPjAJCWYvdyByZXBvcnRlZCBlcnJvciAtIGYvdyBzdGF0dXMgY29kZQorKgk8MAkJZHJpdmVyIHJlcG9ydGVkIGVycm9yCisqCS1FVElNRU9VVAl0aW1vdXQgd2FpdGluZyBmb3IgdGhlIGNtZCByZWdzIHRvIGJlY29tZQorKgkJCWF2YWlsYWJsZSwgb3Igd2FpdGluZyBmb3IgdGhlIGNvbnRyb2wgcmVnCisqCQkJdG8gaW5kaWNhdGUgdGhlIEF1eCBwb3J0IGlzIGVuYWJsZWQuCisqCS1FTk9EQVRBCXRoZSBidWZmZXIgZG9lcyBOT1QgY29udGFpbiBhIHZhbGlkIFBEQS4KKyoJCQlFaXRoZXIgdGhlIGNhcmQgUERBIGlzIGJhZCwgb3IgdGhlIGF1eGRhdGEKKyoJCQlyZWFkcyBhcmUgZ2l2aW5nIHVzIGdhcmJhZ2UuCisKKyoKKyogU2lkZSBlZmZlY3RzOgorKgorKiBDYWxsIGNvbnRleHQ6CisqCXByb2Nlc3Mgb3Igbm9uLWNhcmQgaW50ZXJydXB0LgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitpbnQgaGZhMzg0eF9kcnZyX3JlYWRwZGEoaGZhMzg0eF90ICpodywgdm9pZCAqYnVmLCBVSU5UIGxlbikKK3sKKwlpbnQJCXJlc3VsdCA9IDA7CisJVUlOVDE2CQkqcGRhID0gYnVmOworCWludAkJcGRhb2sgPSAwOworCWludAkJbW9yZXBkcnMgPSAxOworCWludAkJY3VycnBkciA9IDA7CS8qIHdvcmQgb2Zmc2V0IG9mIHRoZSBjdXJyZW50IHBkciAqLworCXNpemVfdAkJaTsKKwlVSU5UMTYJCXBkcmxlbjsJCS8qIHBkciBsZW5ndGggaW4gYnl0ZXMsIGhvc3Qgb3JkZXIgKi8KKwlVSU5UMTYJCXBkcmNvZGU7CS8qIHBkciBjb2RlLCBob3N0IG9yZGVyICovCisJVUlOVDE2CQljdXJycGFnZTsKKwlVSU5UMTYJCWN1cnJvZmZzZXQ7CisJc3RydWN0IHBkYWxvYyB7CisJCVVJTlQzMgljYXJkYWRkcjsKKwkJVUlOVDE2CWF1eGN0bDsKKwl9IHBkYWxvY1tdID0KKwl7CisJCXsgSEZBMzg0Ml9QREFfQkFTRSwJCTB9LAorCQl7IEhGQTM4NDFfUERBX0JBU0UsCQkwfSwKKwkJeyBIRkEzODQxX1BEQV9CT0dVU19CQVNFLAkwfQorCX07CisKKwlEQkZFTlRFUjsKKworCS8qIFJlYWQgdGhlIHBkYSBmcm9tIGVhY2gga25vd24gYWRkcmVzcy4gICovCisJZm9yICggaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHBkYWxvYyk7IGkrKykgeworCQkvKiBNYWtlIGFkZHJlc3MgKi8KKwkJY3VycnBhZ2UgPSBIRkEzODR4X0FERFJfQ01EX01LUEFHRShwZGFsb2NbaV0uY2FyZGFkZHIpOworCQljdXJyb2Zmc2V0ID0gSEZBMzg0eF9BRERSX0NNRF9NS09GRihwZGFsb2NbaV0uY2FyZGFkZHIpOworCisJCXJlc3VsdCA9IGhmYTM4NHhfZG9ybWVtX3dhaXQoaHcsCisJCQljdXJycGFnZSwKKwkJCWN1cnJvZmZzZXQsCisJCQlidWYsCisJCQlsZW4pOwkJLyogdW5pdHMgb2YgYnl0ZXMgKi8KKworCQlpZiAocmVzdWx0KSB7CisJCQlXTEFOX0xPR19XQVJOSU5HKAorCQkJCQkgICJSZWFkIGZyb20gaW5kZXggJXpkIGZhaWxlZCwgY29udGludWluZ1xuIiwKKwkJCQlpICk7CisJCQljb250aW51ZTsKKwkJfQorCisJCS8qIFRlc3QgZm9yIGdhcmJhZ2UgKi8KKwkJcGRhb2sgPSAxOwkvKiBpbml0aWFsbHkgYXNzdW1lIGdvb2QgKi8KKwkJbW9yZXBkcnMgPSAxOworCQl3aGlsZSAoIHBkYW9rICYmIG1vcmVwZHJzICkgeworCQkJcGRybGVuID0gaGZhMzg0eDJob3N0XzE2KHBkYVtjdXJycGRyXSkgKiAyOworCQkJcGRyY29kZSA9IGhmYTM4NHgyaG9zdF8xNihwZGFbY3VycnBkcisxXSk7CisJCQkvKiBUZXN0IHRoZSByZWNvcmQgbGVuZ3RoICovCisJCQlpZiAoIHBkcmxlbiA+IEhGQTM4NHhfUERSX0xFTl9NQVggfHwgcGRybGVuID09IDApIHsKKwkJCQlXTEFOX0xPR19FUlJPUigicGRybGVuIGludmFsaWQ9JWRcbiIsCisJCQkJCXBkcmxlbik7CisJCQkJcGRhb2sgPSAwOworCQkJCWJyZWFrOworCQkJfQorCQkJLyogVGVzdCB0aGUgY29kZSAqLworCQkJaWYgKCAhaGZhMzg0eF9pc2dvb2RfcGRyY29kZShwZHJjb2RlKSApIHsKKwkJCQlXTEFOX0xPR19FUlJPUigicGRyY29kZSBpbnZhbGlkPSVkXG4iLAorCQkJCQlwZHJjb2RlKTsKKwkJCQlwZGFvayA9IDA7CisJCQkJYnJlYWs7CisJCQl9CisJCQkvKiBUZXN0IGZvciBjb21wbGV0aW9uICovCisJCQlpZiAoIHBkcmNvZGUgPT0gSEZBMzg0eF9QRFJfRU5EX09GX1BEQSkgeworCQkJCW1vcmVwZHJzID0gMDsKKwkJCX0KKworCQkJLyogTW92ZSB0byB0aGUgbmV4dCBwZHIgKGlmIG5lY2Vzc2FyeSkgKi8KKwkJCWlmICggbW9yZXBkcnMgKSB7CisJCQkJLyogbm90ZSB0aGUgYWNjZXNzIHRvIHBkYVtdLCBuZWVkIHdvcmRzIGhlcmUgKi8KKwkJCQljdXJycGRyICs9IGhmYTM4NHgyaG9zdF8xNihwZGFbY3VycnBkcl0pICsgMTsKKwkJCX0KKwkJfQorCQlpZiAoIHBkYW9rICkgeworCQkJV0xBTl9MT0dfSU5GTygKKwkJCQkiUERBIFJlYWQgZnJvbSAweCUwOHggaW4gJXMgc3BhY2UuXG4iLAorCQkJCXBkYWxvY1tpXS5jYXJkYWRkciwKKwkJCQlwZGFsb2NbaV0uYXV4Y3RsID09IDAgPyAiRVhURFMiIDoKKwkJCQlwZGFsb2NbaV0uYXV4Y3RsID09IDEgPyAiTlYiIDoKKwkJCQlwZGFsb2NbaV0uYXV4Y3RsID09IDIgPyAiUEhZIiA6CisJCQkJcGRhbG9jW2ldLmF1eGN0bCA9PSAzID8gIklDU1JBTSIgOgorCQkJCSI8Ym9ndXMgYXV4Y3RsPiIpOworCQkJYnJlYWs7CisJCX0KKwl9CisJcmVzdWx0ID0gcGRhb2sgPyAwIDogLUVOT0RBVEE7CisKKwlpZiAoIHJlc3VsdCApIHsKKwkJV0xBTl9MT0dfREVCVUcoMywiRmFpbHVyZTogcGRhIGlzIG5vdCBva2F5XG4iKTsKKwl9CisKKwlEQkZFWElUOworCXJldHVybiByZXN1bHQ7Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIGhmYTM4NHhfZHJ2cl9zZXRjb25maWcKKyoKKyogUGVyZm9ybXMgdGhlIHNlcXVlbmNlIG5lY2Vzc2FyeSB0byB3cml0ZSBhIGNvbmZpZy9pbmZvIGl0ZW0uCisqCisqIEFyZ3VtZW50czoKKyoJaHcJCWRldmljZSBzdHJ1Y3R1cmUKKyoJcmlkCQljb25maWcvaW5mbyByZWNvcmQgaWQgKGluIGhvc3Qgb3JkZXIpCisqCWJ1ZgkJaG9zdCBzaWRlIHJlY29yZCBidWZmZXIKKyoJbGVuCQlidWZmZXIgbGVuZ3RoIChpbiBieXRlcykKKyoKKyogUmV0dXJuczoKKyoJMAkJc3VjY2VzcworKgk+MAkJZi93IHJlcG9ydGVkIGVycm9yIC0gZi93IHN0YXR1cyBjb2RlCisqCTwwCQlkcml2ZXIgcmVwb3J0ZWQgZXJyb3IKKyoKKyogU2lkZSBlZmZlY3RzOgorKgorKiBDYWxsIGNvbnRleHQ6CisqCXByb2Nlc3MKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworaW50IGhmYTM4NHhfZHJ2cl9zZXRjb25maWcoaGZhMzg0eF90ICpodywgVUlOVDE2IHJpZCwgdm9pZCAqYnVmLCBVSU5UMTYgbGVuKQoreworCXJldHVybiBoZmEzODR4X2Rvd3JpZF93YWl0KGh3LCByaWQsIGJ1ZiwgbGVuKTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIGhmYTM4NHhfZHJ2cl9zdGFydAorKgorKiBJc3N1ZXMgdGhlIE1BQyBpbml0aWFsaXplIGNvbW1hbmQsIHNldHMgdXAgc29tZSBkYXRhIHN0cnVjdHVyZXMsCisqIGFuZCBlbmFibGVzIHRoZSBpbnRlcnJ1cHRzLiAgQWZ0ZXIgdGhpcyBmdW5jdGlvbiBjb21wbGV0ZXMsIHRoZQorKiBsb3ctbGV2ZWwgc3R1ZmYgc2hvdWxkIGJlIHJlYWR5IGZvciBhbnkvYWxsIGNvbW1hbmRzLgorKgorKiBBcmd1bWVudHM6CisqCWh3CQlkZXZpY2Ugc3RydWN0dXJlCisqIFJldHVybnM6CisqCTAJCXN1Y2Nlc3MKKyoJPjAJCWYvdyByZXBvcnRlZCBlcnJvciAtIGYvdyBzdGF0dXMgY29kZQorKgk8MAkJZHJpdmVyIHJlcG9ydGVkIGVycm9yCisqCisqIFNpZGUgZWZmZWN0czoKKyoKKyogQ2FsbCBjb250ZXh0OgorKglwcm9jZXNzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK2ludCBoZmEzODR4X2RydnJfc3RhcnQoaGZhMzg0eF90ICpodykKK3sKKwlpbnQJCXJlc3VsdDsKKwlEQkZFTlRFUjsKKworCW1pZ2h0X3NsZWVwKCk7CisKKwlpZiAodXNiX2NsZWFyX2hhbHQoaHctPnVzYiwgaHctPmVuZHBfaW4pKSB7CisJCVdMQU5fTE9HX0VSUk9SKAorCQkJIkZhaWxlZCB0byByZXNldCBidWxrIGluIGVuZHBvaW50LlxuIik7CisJfQorCisJaWYgKHVzYl9jbGVhcl9oYWx0KGh3LT51c2IsIGh3LT5lbmRwX291dCkpIHsKKwkJV0xBTl9MT0dfRVJST1IoCisJCQkiRmFpbGVkIHRvIHJlc2V0IGJ1bGsgb3V0IGVuZHBvaW50LlxuIik7CisJfQorCisJLyogU3luY2hyb25vdXMgdW5saW5rLCBpbiBjYXNlIHdlJ3JlIHRyeWluZyB0byByZXN0YXJ0IHRoZSBkcml2ZXIgKi8KKwl1c2Jfa2lsbF91cmIoJmh3LT5yeF91cmIpOworCisJLyogUG9zdCB0aGUgSU4gdXJiICovCisJcmVzdWx0ID0gc3VibWl0X3J4X3VyYihodywgR0ZQX0tFUk5FTCk7CisJaWYgKHJlc3VsdCAhPSAwKSB7CisJCVdMQU5fTE9HX0VSUk9SKAorCQkJIkZhdGFsLCBmYWlsZWQgdG8gc3VibWl0IFJYIFVSQiwgcmVzdWx0PSVkXG4iLAorCQkJcmVzdWx0KTsKKwkJZ290byBkb25lOworCX0KKworCS8qIGNhbGwgaW5pdGlhbGl6ZSAqLworCXJlc3VsdCA9IGhmYTM4NHhfY21kX2luaXRpYWxpemUoaHcpOworCWlmIChyZXN1bHQgIT0gMCkgeworCQl1c2Jfa2lsbF91cmIoJmh3LT5yeF91cmIpOworCQlXTEFOX0xPR19FUlJPUigKKwkJCSJjbWRfaW5pdGlhbGl6ZSgpIGZhaWxlZCwgcmVzdWx0PSVkXG4iLAorCQkJcmVzdWx0KTsKKwkJZ290byBkb25lOworCX0KKworCWh3LT5zdGF0ZSA9IEhGQTM4NHhfU1RBVEVfUlVOTklORzsKKworZG9uZToKKwlEQkZFWElUOworCXJldHVybiByZXN1bHQ7Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIGhmYTM4NHhfZHJ2cl9zdG9wCisqCisqIFNodXRzIGRvd24gdGhlIE1BQyB0byB0aGUgcG9pbnQgd2hlcmUgaXQgaXMgc2FmZSB0byB1bmxvYWQgdGhlCisqIGRyaXZlci4gIEFueSBzdWJzeXN0ZW0gdGhhdCBtYXkgYmUgaG9sZGluZyBhIGRhdGEgb3IgZnVuY3Rpb24KKyogcHRyIGludG8gdGhlIGRyaXZlciBtdXN0IGJlIGNsZWFyZWQvZGVpbml0aWFsaXplZC4KKyoKKyogQXJndW1lbnRzOgorKglodwkJZGV2aWNlIHN0cnVjdHVyZQorKiBSZXR1cm5zOgorKgkwCQlzdWNjZXNzCisqCT4wCQlmL3cgcmVwb3J0ZWQgZXJyb3IgLSBmL3cgc3RhdHVzIGNvZGUKKyoJPDAJCWRyaXZlciByZXBvcnRlZCBlcnJvcgorKgorKiBTaWRlIGVmZmVjdHM6CisqCisqIENhbGwgY29udGV4dDoKKyoJcHJvY2VzcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitpbnQKK2hmYTM4NHhfZHJ2cl9zdG9wKGhmYTM4NHhfdCAqaHcpCit7CisJaW50CXJlc3VsdCA9IDA7CisJaW50CWk7CisJREJGRU5URVI7CisKKwltaWdodF9zbGVlcCgpOworCisJLyogVGhlcmUncyBubyBuZWVkIGZvciBzcGlubG9ja3MgaGVyZS4gVGhlIFVTQiAiZGlzY29ubmVjdCIKKwkgKiBmdW5jdGlvbiBzZXRzIHRoaXMgInJlbW92ZWQiIGZsYWcgYW5kIHRoZW4gY2FsbHMgdXMuCisJICovCisJaWYgKCAhaHctPndsYW5kZXYtPmh3cmVtb3ZlZCApIHsKKwkJLyogQ2FsbCBpbml0aWFsaXplIHRvIGxlYXZlIHRoZSBNQUMgaW4gaXRzICdyZXNldCcgc3RhdGUgKi8KKwkJaGZhMzg0eF9jbWRfaW5pdGlhbGl6ZShodyk7CisKKwkJLyogQ2FuY2VsIHRoZSByeHVyYiAqLworCQl1c2Jfa2lsbF91cmIoJmh3LT5yeF91cmIpOworCX0KKworCWh3LT5saW5rX3N0YXR1cyA9IEhGQTM4NHhfTElOS19OT1RDT05ORUNURUQ7CisJaHctPnN0YXRlID0gSEZBMzg0eF9TVEFURV9JTklUOworCisJZGVsX3RpbWVyX3N5bmMoJmh3LT5jb21tc3F1YWxfdGltZXIpOworCisJLyogQ2xlYXIgYWxsIHRoZSBwb3J0IHN0YXR1cyAqLworCWZvciAoIGkgPSAwOyBpIDwgSEZBMzg0eF9OVU1QT1JUU19NQVg7IGkrKykgeworCQlody0+cG9ydF9lbmFibGVkW2ldID0gMDsKKwl9CisKKwlEQkZFWElUOworCXJldHVybiByZXN1bHQ7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBoZmEzODR4X2RydnJfdHhmcmFtZQorKgorKiBUYWtlcyBhIGZyYW1lIGZyb20gcHJpc20yc3RhIGFuZCBxdWV1ZXMgaXQgZm9yIHRyYW5zbWlzc2lvbi4KKyoKKyogQXJndW1lbnRzOgorKglodwkJZGV2aWNlIHN0cnVjdHVyZQorKglza2IJCXBhY2tldCBidWZmZXIgc3RydWN0LiAgQ29udGFpbnMgYW4gODAyLjExCisqCQkJZGF0YSBmcmFtZS4KKyogICAgICAgcDgwMjExX2hkciAgICAgIHBvaW50cyB0byB0aGUgODAyLjExIGhlYWRlciBmb3IgdGhlIHBhY2tldC4KKyogUmV0dXJuczoKKyoJMAkJU3VjY2VzcyBhbmQgbW9yZSBidWZmcyBhdmFpbGFibGUKKyoJMQkJU3VjY2VzcyBidXQgbm8gbW9yZSBidWZmcworKgkyCQlBbGxvY2F0aW9uIGZhaWx1cmUKKyoJNAkJQnVmZmVyIGZ1bGwgb3IgcXVldWUgYnVzeQorKgorKiBTaWRlIGVmZmVjdHM6CisqCisqIENhbGwgY29udGV4dDoKKyoJaW50ZXJydXB0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK2ludCBoZmEzODR4X2RydnJfdHhmcmFtZShoZmEzODR4X3QgKmh3LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBwODAyMTFfaGRyX3QgKnA4MDIxMV9oZHIsIHA4MDIxMV9tZXRhd2VwX3QgKnA4MDIxMV93ZXApCisKK3sKKwlpbnQJCXVzYnBrdGxlbiA9IHNpemVvZihoZmEzODR4X3R4X2ZyYW1lX3QpOworCWludAkJcmVzdWx0OworCWludAkJcmV0OworCWNoYXIJCSpwdHI7CisKKwlEQkZFTlRFUjsKKworCWlmIChody0+dHhfdXJiLnN0YXR1cyA9PSAtRUlOUFJPR1JFU1MpIHsKKwkJV0xBTl9MT0dfV0FSTklORygiVFggVVJCIGFscmVhZHkgaW4gdXNlXG4iKTsKKwkJcmVzdWx0ID0gMzsKKwkJZ290byBleGl0OworCX0KKworCS8qIEJ1aWxkIFR4IGZyYW1lIHN0cnVjdHVyZSAqLworCS8qIFNldCB1cCB0aGUgY29udHJvbCBmaWVsZCAqLworCW1lbXNldCgmaHctPnR4YnVmZi50eGZybS5kZXNjLCAwLCBzaXplb2YoaHctPnR4YnVmZi50eGZybS5kZXNjKSk7CisKKwkvKiBTZXR1cCB0aGUgdXNiIHR5cGUgZmllbGQgKi8KKwlody0+dHhidWZmLnR5cGUgPSBob3N0MmhmYTM4NHhfMTYoSEZBMzg0eF9VU0JfVFhGUk0pOworCisJLyogU2V0IHVwIHRoZSBzd19zdXBwb3J0IGZpZWxkIHRvIGlkZW50aWZ5IHRoaXMgZnJhbWUgKi8KKwlody0+dHhidWZmLnR4ZnJtLmRlc2Muc3dfc3VwcG9ydCA9IDB4MDEyMzsKKworLyogVHggY29tcGxldGUgYW5kIFR4IGV4Y2VwdGlvbiBkaXNhYmxlIHBlciBkbGVhY2guICBNaWdodCBiZSBjYXVzaW5nCisgKiBidWYgZGVwbGV0aW9uCisgKi8KKy8vI2RlZmluZSBET0VYQyAgU0xQIC0tIGRvYm90aCBicmVha3MgaG9ycmlibHkgdW5kZXIgbG9hZCwgZG9leGMgbGVzcyBzby4KKyNpZiBkZWZpbmVkKERPQk9USCkKKwlody0+dHhidWZmLnR4ZnJtLmRlc2MudHhfY29udHJvbCA9CisJCUhGQTM4NHhfVFhfTUFDUE9SVF9TRVQoMCkgfCBIRkEzODR4X1RYX1NUUlVDVFlQRV9TRVQoMSkgfAorCQlIRkEzODR4X1RYX1RYRVhfU0VUKDEpIHwgSEZBMzg0eF9UWF9UWE9LX1NFVCgxKTsKKyNlbGlmIGRlZmluZWQoRE9FWEMpCisJaHctPnR4YnVmZi50eGZybS5kZXNjLnR4X2NvbnRyb2wgPQorCQlIRkEzODR4X1RYX01BQ1BPUlRfU0VUKDApIHwgSEZBMzg0eF9UWF9TVFJVQ1RZUEVfU0VUKDEpIHwKKwkJSEZBMzg0eF9UWF9UWEVYX1NFVCgxKSB8IEhGQTM4NHhfVFhfVFhPS19TRVQoMCk7CisjZWxzZQorCWh3LT50eGJ1ZmYudHhmcm0uZGVzYy50eF9jb250cm9sID0KKwkJSEZBMzg0eF9UWF9NQUNQT1JUX1NFVCgwKSB8IEhGQTM4NHhfVFhfU1RSVUNUWVBFX1NFVCgxKSB8CisJCUhGQTM4NHhfVFhfVFhFWF9TRVQoMCkgfCBIRkEzODR4X1RYX1RYT0tfU0VUKDApOworI2VuZGlmCisJaHctPnR4YnVmZi50eGZybS5kZXNjLnR4X2NvbnRyb2wgPQorCQlob3N0MmhmYTM4NHhfMTYoaHctPnR4YnVmZi50eGZybS5kZXNjLnR4X2NvbnRyb2wpOworCisJLyogY29weSB0aGUgaGVhZGVyIG92ZXIgdG8gdGhlIHR4ZGVzYyAqLworCW1lbWNweSgmKGh3LT50eGJ1ZmYudHhmcm0uZGVzYy5mcmFtZV9jb250cm9sKSwgcDgwMjExX2hkciwgc2l6ZW9mKHA4MDIxMV9oZHJfdCkpOworCisJLyogaWYgd2UncmUgdXNpbmcgaG9zdCBXRVAsIGluY3JlYXNlIHNpemUgYnkgSVYrSUNWICovCisJaWYgKHA4MDIxMV93ZXAtPmRhdGEpIHsKKwkJaHctPnR4YnVmZi50eGZybS5kZXNjLmRhdGFfbGVuID0gaG9zdDJoZmEzODR4XzE2KHNrYi0+bGVuKzgpOworCQkvLyBody0+dHhidWZmLnR4ZnJtLmRlc2MudHhfY29udHJvbCB8PSBIRkEzODR4X1RYX05PRU5DUllQVF9TRVQoMSk7CisJCXVzYnBrdGxlbis9ODsKKwl9IGVsc2UgeworCQlody0+dHhidWZmLnR4ZnJtLmRlc2MuZGF0YV9sZW4gPSBob3N0MmhmYTM4NHhfMTYoc2tiLT5sZW4pOworCX0KKworCXVzYnBrdGxlbiArPSBza2ItPmxlbjsKKworCS8qIGNvcHkgb3ZlciB0aGUgV0VQIElWIGlmIHdlIGFyZSB1c2luZyBob3N0IFdFUCAqLworCXB0ciA9IGh3LT50eGJ1ZmYudHhmcm0uZGF0YTsKKwlpZiAocDgwMjExX3dlcC0+ZGF0YSkgeworCQltZW1jcHkocHRyLCBwODAyMTFfd2VwLT5pdiwgc2l6ZW9mKHA4MDIxMV93ZXAtPml2KSk7CisJCXB0cis9IHNpemVvZihwODAyMTFfd2VwLT5pdik7CisJCW1lbWNweShwdHIsIHA4MDIxMV93ZXAtPmRhdGEsIHNrYi0+bGVuKTsKKwl9IGVsc2UgeworCQltZW1jcHkocHRyLCBza2ItPmRhdGEsIHNrYi0+bGVuKTsKKwl9CisJLyogY29weSBvdmVyIHRoZSBwYWNrZXQgZGF0YSAqLworCXB0cis9IHNrYi0+bGVuOworCisJLyogY29weSBvdmVyIHRoZSBXRVAgSUNWIGlmIHdlIGFyZSB1c2luZyBob3N0IFdFUCAqLworCWlmIChwODAyMTFfd2VwLT5kYXRhKSB7CisJCW1lbWNweShwdHIsIHA4MDIxMV93ZXAtPmljdiwgc2l6ZW9mKHA4MDIxMV93ZXAtPmljdikpOworCX0KKworCS8qIFNlbmQgdGhlIFVTQiBwYWNrZXQgKi8KKwl1c2JfZmlsbF9idWxrX3VyYiggJihody0+dHhfdXJiKSwgaHctPnVzYiwKKwkgICAgICAgICAgICAgICBody0+ZW5kcF9vdXQsCisJICAgICAgICAgICAgICAgJihody0+dHhidWZmKSwgUk9VTkRVUDY0KHVzYnBrdGxlbiksCisJICAgICAgICAgICAgICAgaGZhMzg0eF91c2JvdXRfY2FsbGJhY2ssIGh3LT53bGFuZGV2ICk7CisJaHctPnR4X3VyYi50cmFuc2Zlcl9mbGFncyB8PSBVU0JfUVVFVUVfQlVMSzsKKworCXJlc3VsdCA9IDE7CisJcmV0ID0gc3VibWl0X3R4X3VyYihodywgJmh3LT50eF91cmIsIEdGUF9BVE9NSUMpOworCWlmICggcmV0ICE9IDAgKSB7CisJCVdMQU5fTE9HX0VSUk9SKAorCQkJInN1Ym1pdF90eF91cmIoKSBmYWlsZWQsIGVycm9yPSVkXG4iLCByZXQpOworCQlyZXN1bHQgPSAzOworCX0KKworIGV4aXQ6CisJREJGRVhJVDsKKwlyZXR1cm4gcmVzdWx0OworfQorCit2b2lkIGhmYTM4NHhfdHhfdGltZW91dCh3bGFuZGV2aWNlX3QgKndsYW5kZXYpCit7CisJaGZhMzg0eF90CSpodyA9IHdsYW5kZXYtPnByaXY7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCURCRkVOVEVSOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmh3LT5jdGx4cS5sb2NrLCBmbGFncyk7CisKKwlpZiAoICFody0+d2xhbmRldi0+aHdyZW1vdmVkICYmCisJICAgICAvKiBOb3RlIHRoZSBiaXR3aXNlIE9SLCBub3QgdGhlIGxvZ2ljYWwgT1IuICovCisJICAgICAoICF0ZXN0X2FuZF9zZXRfYml0KFdPUktfVFhfSEFMVCwgJmh3LT51c2JfZmxhZ3MpIHwKKwkgICAgICAgIXRlc3RfYW5kX3NldF9iaXQoV09SS19SWF9IQUxULCAmaHctPnVzYl9mbGFncykgKSApCisJeworCQlzY2hlZHVsZV93b3JrKCZody0+dXNiX3dvcmspOworCX0KKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmh3LT5jdGx4cS5sb2NrLCBmbGFncyk7CisKKwlEQkZFWElUOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogaGZhMzg0eF91c2JjdGx4X3JlYXBlcl90YXNrCisqCisqIFRhc2tsZXQgdG8gZGVsZXRlIGRlYWQgQ1RMWCBvYmplY3RzCisqCisqIEFyZ3VtZW50czoKKyoJZGF0YQlwdHIgdG8gYSBoZmEzODR4X3QKKyoKKyogUmV0dXJuczoKKyoKKyogQ2FsbCBjb250ZXh0OgorKglJbnRlcnJ1cHQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIHZvaWQgaGZhMzg0eF91c2JjdGx4X3JlYXBlcl90YXNrKHVuc2lnbmVkIGxvbmcgZGF0YSkKK3sKKwloZmEzODR4X3QJKmh3ID0gKGhmYTM4NHhfdCopZGF0YTsKKwlzdHJ1Y3QgbGlzdF9oZWFkICplbnRyeTsKKwlzdHJ1Y3QgbGlzdF9oZWFkICp0ZW1wOworCXVuc2lnbmVkIGxvbmcJZmxhZ3M7CisKKwlEQkZFTlRFUjsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZody0+Y3RseHEubG9jaywgZmxhZ3MpOworCisJLyogVGhpcyBsaXN0IGlzIGd1YXJhbnRlZWQgdG8gYmUgZW1wdHkgaWYgc29tZW9uZQorCSAqIGhhcyB1bnBsdWdnZWQgdGhlIGFkYXB0ZXIuCisJICovCisJbGlzdF9mb3JfZWFjaF9zYWZlKGVudHJ5LCB0ZW1wLCAmaHctPmN0bHhxLnJlYXBhYmxlKSB7CisJCWhmYTM4NHhfdXNiY3RseF90CSpjdGx4OworCisJCWN0bHggPSBsaXN0X2VudHJ5KGVudHJ5LCBoZmEzODR4X3VzYmN0bHhfdCwgbGlzdCk7CisJCWxpc3RfZGVsKCZjdGx4LT5saXN0KTsKKwkJa2ZyZWUoY3RseCk7CisJfQorCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaHctPmN0bHhxLmxvY2ssIGZsYWdzKTsKKworCURCRkVYSVQ7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBoZmEzODR4X3VzYmN0bHhfY29tcGxldGlvbl90YXNrCisqCisqIFRhc2tsZXQgdG8gY2FsbCBjb21wbGV0aW9uIGhhbmRsZXJzIGZvciByZXR1cm5lZCBDVExYcworKgorKiBBcmd1bWVudHM6CisqCWRhdGEJcHRyIHRvIGhmYTM4NHhfdAorKgorKiBSZXR1cm5zOgorKglOb3RoaW5nCisqCisqIENhbGwgY29udGV4dDoKKyoJSW50ZXJydXB0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyB2b2lkIGhmYTM4NHhfdXNiY3RseF9jb21wbGV0aW9uX3Rhc2sodW5zaWduZWQgbG9uZyBkYXRhKQoreworCWhmYTM4NHhfdCAqaHcgPSAoaGZhMzg0eF90KilkYXRhOworCXN0cnVjdCBsaXN0X2hlYWQgKmVudHJ5OworCXN0cnVjdCBsaXN0X2hlYWQgKnRlbXA7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWludCByZWFwID0gMDsKKworCURCRkVOVEVSOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmh3LT5jdGx4cS5sb2NrLCBmbGFncyk7CisKKwkvKiBUaGlzIGxpc3QgaXMgZ3VhcmFudGVlZCB0byBiZSBlbXB0eSBpZiBzb21lb25lCisJICogaGFzIHVucGx1Z2dlZCB0aGUgYWRhcHRlciAuLi4KKwkgKi8KKwlsaXN0X2Zvcl9lYWNoX3NhZmUoZW50cnksIHRlbXAsICZody0+Y3RseHEuY29tcGxldGluZykgeworCQloZmEzODR4X3VzYmN0bHhfdCAqY3RseDsKKworCQljdGx4ID0gbGlzdF9lbnRyeShlbnRyeSwgaGZhMzg0eF91c2JjdGx4X3QsIGxpc3QpOworCisJCS8qIENhbGwgdGhlIGNvbXBsZXRpb24gZnVuY3Rpb24gdGhhdCB0aGlzCisJCSAqIGNvbW1hbmQgd2FzIGFzc2lnbmVkLCBhc3N1bWluZyBpdCBoYXMgb25lLgorCQkgKi8KKwkJaWYgKCBjdGx4LT5jbWRjYiAhPSBOVUxMICkgeworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaHctPmN0bHhxLmxvY2ssIGZsYWdzKTsKKwkJCWN0bHgtPmNtZGNiKGh3LCBjdGx4KTsKKwkJCXNwaW5fbG9ja19pcnFzYXZlKCZody0+Y3RseHEubG9jaywgZmxhZ3MpOworCisJCQkvKiBNYWtlIHN1cmUgd2UgZG9uJ3QgdHJ5IGFuZCBjb21wbGV0ZQorCQkJICogdGhpcyBDVExYIG1vcmUgdGhhbiBvbmNlIQorCQkJICovCisJCQljdGx4LT5jbWRjYiA9IE5VTEw7CisKKwkJCS8qIERpZCBzb21lb25lIHlhbmsgdGhlIGFkYXB0ZXIgb3V0CisJCQkgKiB3aGlsZSBvdXIgbGlzdCB3YXMgKGJyaWVmbHkpIHVubG9ja2VkPworCQkJICovCisJCQlpZiAoIGh3LT53bGFuZGV2LT5od3JlbW92ZWQgKQorCQkJeworCQkJCXJlYXAgPSAwOworCQkJCWJyZWFrOworCQkJfQorCQl9CisKKwkJLyoKKwkJICogIlJlYXBhYmxlIiBDVExYcyBhcmUgb25lcyB3aGljaCBkb24ndCBoYXZlIGFueQorCQkgKiB0aHJlYWRzIHdhaXRpbmcgZm9yIHRoZW0gdG8gZGllLiBIZW5jZSB0aGV5IG11c3QKKwkJICogYmUgZGVsaXZlcmVkIHRvIFRoZSBSZWFwZXIhCisJCSAqLworCQlpZiAoIGN0bHgtPnJlYXBhYmxlICkgeworCQkJLyogTW92ZSB0aGUgQ1RMWCBvZmYgdGhlICJjb21wbGV0aW5nIiBsaXN0IChob3BlZnVsbHkpCisJCQkgKiBvbiB0byB0aGUgInJlYXBhYmxlIiBsaXN0IHdoZXJlIHRoZSByZWFwZXIgdGFzaworCQkJICogY2FuIGZpbmQgaXQuIEFuZCAicmVhcGFibGUiIG1lYW5zIHRoYXQgdGhpcyBDVExYCisJCQkgKiBpc24ndCBzaXR0aW5nIG9uIGEgd2FpdC1xdWV1ZSBzb21ld2hlcmUuCisJCQkgKi8KKwkJCWxpc3RfbW92ZV90YWlsKCZjdGx4LT5saXN0LCAmaHctPmN0bHhxLnJlYXBhYmxlKTsKKwkJCXJlYXAgPSAxOworCQl9CisKKwkJY29tcGxldGUoJmN0bHgtPmRvbmUpOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZody0+Y3RseHEubG9jaywgZmxhZ3MpOworCisJaWYgKHJlYXApCisJCXRhc2tsZXRfc2NoZWR1bGUoJmh3LT5yZWFwZXJfYmgpOworCisJREJGRVhJVDsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIHVubG9ja2VkX3VzYmN0bHhfY2FuY2VsX2FzeW5jCisqCisqIE1hcmsgdGhlIENUTFggZGVhZCBhc3luY2hyb25vdXNseSwgYW5kIGVuc3VyZSB0aGF0IHRoZQorKiBuZXh0IGNvbW1hbmQgb24gdGhlIHF1ZXVlIGlzIHJ1biBhZnRlcndhcmRzLgorKgorKiBBcmd1bWVudHM6CisqCWh3CXB0ciB0byB0aGUgaGZhMzg0eF90IHN0cnVjdHVyZQorKgljdGx4CXB0ciB0byBhIENUTFggc3RydWN0dXJlCisqCisqIFJldHVybnM6CisqCTAJdGhlIENUTFgncyBVUkIgaXMgaW5hY3RpdmUKKyogLUVJTlBST0dSRVNTCXRoZSBVUkIgaXMgY3VycmVudGx5IGJlaW5nIHVubGlua2VkCisqCisqIENhbGwgY29udGV4dDoKKyoJRWl0aGVyIHByb2Nlc3Mgb3IgaW50ZXJydXB0LCBidXQgcHJlc3VtYWJseSBpbnRlcnJ1cHQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIGludCB1bmxvY2tlZF91c2JjdGx4X2NhbmNlbF9hc3luYyhoZmEzODR4X3QgKmh3LCBoZmEzODR4X3VzYmN0bHhfdCAqY3RseCkKK3sKKwlpbnQgcmV0OworCisJREJGRU5URVI7CisKKwkvKgorCSAqIFRyeSB0byBkZWxldGUgdGhlIFVSQiBjb250YWluaW5nIG91ciByZXF1ZXN0IHBhY2tldC4KKwkgKiBJZiB3ZSBzdWNjZWVkLCB0aGVuIGl0cyBjb21wbGV0aW9uIGhhbmRsZXIgd2lsbCBiZQorCSAqIGNhbGxlZCB3aXRoIGEgc3RhdHVzIG9mIC1FQ09OTlJFU0VULgorCSAqLworCWh3LT5jdGx4X3VyYi50cmFuc2Zlcl9mbGFncyB8PSBVUkJfQVNZTkNfVU5MSU5LOworCXJldCA9IHVzYl91bmxpbmtfdXJiKCZody0+Y3RseF91cmIpOworCisJaWYgKHJldCAhPSAtRUlOUFJPR1JFU1MpIHsKKwkJLyoKKwkJICogVGhlIE9VVCBVUkIgaGFkIGVpdGhlciBhbHJlYWR5IGNvbXBsZXRlZAorCQkgKiBvciB3YXMgc3RpbGwgaW4gdGhlIHBlbmRpbmcgcXVldWUsIHNvIHRoZQorCQkgKiBVUkIncyBjb21wbGV0aW9uIGZ1bmN0aW9uIHdpbGwgbm90IGJlIGNhbGxlZC4KKwkJICogV2Ugd2lsbCBoYXZlIHRvIGNvbXBsZXRlIHRoZSBDVExYIG91cnNlbHZlcy4KKwkJICovCisJCWN0bHgtPnN0YXRlID0gQ1RMWF9SRVFfRkFJTEVEOworCQl1bmxvY2tlZF91c2JjdGx4X2NvbXBsZXRlKGh3LCBjdGx4KTsKKwkJcmV0ID0gMDsKKwl9CisKKwlEQkZFWElUOworCisJcmV0dXJuIHJldDsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIHVubG9ja2VkX3VzYmN0bHhfY29tcGxldGUKKyoKKyogQSBDVExYIGhhcyBjb21wbGV0ZWQuICBJdCBtYXkgaGF2ZSBiZWVuIHN1Y2Nlc3NmdWwsIGl0IG1heSBub3QKKyogaGF2ZSBiZWVuLiBBdCB0aGlzIHBvaW50LCB0aGUgQ1RMWCBzaG91bGQgYmUgcXVpZXNjZW50LiAgVGhlIFVSQnMKKyogYXJlbid0IGFjdGl2ZSBhbmQgdGhlIHRpbWVycyBzaG91bGQgaGF2ZSBiZWVuIHN0b3BwZWQuCisqCisqIFRoZSBDVExYIGlzIG1pZ3JhdGVkIHRvIHRoZSAiY29tcGxldGluZyIgcXVldWUsIGFuZCB0aGUgY29tcGxldGluZworKiB0YXNrbGV0IGlzIHNjaGVkdWxlZC4KKyoKKyogQXJndW1lbnRzOgorKglodwkJcHRyIHRvIGEgaGZhMzg0eF90IHN0cnVjdHVyZQorKgljdGx4CQlwdHIgdG8gYSBjdGx4IHN0cnVjdHVyZQorKgorKiBSZXR1cm5zOgorKglub3RoaW5nCisqCisqIFNpZGUgZWZmZWN0czoKKyoKKyogQ2FsbCBjb250ZXh0OgorKglFaXRoZXIsIGFzc3VtZSBpbnRlcnJ1cHQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIHZvaWQgdW5sb2NrZWRfdXNiY3RseF9jb21wbGV0ZShoZmEzODR4X3QgKmh3LCBoZmEzODR4X3VzYmN0bHhfdCAqY3RseCkKK3sKKwlEQkZFTlRFUjsKKworCS8qIFRpbWVycyBoYXZlIGJlZW4gc3RvcHBlZCwgYW5kIGN0bHggc2hvdWxkIGJlIGluCisJICogYSB0ZXJtaW5hbCBzdGF0ZS4gUmV0aXJlIGl0IGZyb20gdGhlICJhY3RpdmUiCisJICogcXVldWUuCisJICovCisJbGlzdF9tb3ZlX3RhaWwoJmN0bHgtPmxpc3QsICZody0+Y3RseHEuY29tcGxldGluZyk7CisJdGFza2xldF9zY2hlZHVsZSgmaHctPmNvbXBsZXRpb25fYmgpOworCisJc3dpdGNoIChjdGx4LT5zdGF0ZSkgeworCWNhc2UgQ1RMWF9DT01QTEVURToKKwljYXNlIENUTFhfUkVRX0ZBSUxFRDoKKwkJLyogVGhpcyBhcmUgdGhlIGNvcnJlY3QgdGVybWluYXRpbmcgc3RhdGVzLiAqLworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCVdMQU5fTE9HX0VSUk9SKCJDVExYWyVkXSBub3QgaW4gYSB0ZXJtaW5hdGluZyBzdGF0ZSglcylcbiIsCisJCSAgICAgICAgICAgICAgIGhmYTM4NHgyaG9zdF8xNihjdGx4LT5vdXRidWYudHlwZSksCisJCSAgICAgICAgICAgICAgIGN0bHhzdHIoY3RseC0+c3RhdGUpKTsKKwkJYnJlYWs7CisJfSAvKiBzd2l0Y2ggKi8KKworCURCRkVYSVQ7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBoZmEzODR4X3VzYmN0bHhxX3J1bgorKgorKiBDaGVja3MgdG8gc2VlIGlmIHRoZSBoZWFkIGl0ZW0gaXMgcnVubmluZy4gIElmIG5vdCwgc3RhcnRzIGl0LgorKgorKiBBcmd1bWVudHM6CisqCWh3CXB0ciB0byBoZmEzODR4X3QKKyoKKyogUmV0dXJuczoKKyoJbm90aGluZworKgorKiBTaWRlIGVmZmVjdHM6CisqCisqIENhbGwgY29udGV4dDoKKyoJYW55CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyB2b2lkCitoZmEzODR4X3VzYmN0bHhxX3J1bihoZmEzODR4X3QJKmh3KQoreworCXVuc2lnbmVkIGxvbmcJCWZsYWdzOworCURCRkVOVEVSOworCisJLyogYWNxdWlyZSBsb2NrICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJmh3LT5jdGx4cS5sb2NrLCBmbGFncyk7CisKKwkvKiBPbmx5IG9uZSBhY3RpdmUgQ1RMWCBhdCBhbnkgb25lIHRpbWUsIGJlY2F1c2UgdGhlcmUncyBubworCSAqIG90aGVyIChyZWxpYWJsZSkgd2F5IHRvIG1hdGNoIHRoZSByZXNwb25zZSBVUkIgdG8gdGhlCisJICogY29ycmVjdCBDVExYLgorCSAqCisJICogRG9uJ3QgdG91Y2ggYW55IG9mIHRoZXNlIENUTFhzIGlmIHRoZSBoYXJkd2FyZQorCSAqIGhhcyBiZWVuIHJlbW92ZWQgb3IgdGhlIFVTQiBzdWJzeXN0ZW0gaXMgc3RhbGxlZC4KKwkgKi8KKwlpZiAoICFsaXN0X2VtcHR5KCZody0+Y3RseHEuYWN0aXZlKSB8fAorCSAgICAgdGVzdF9iaXQoV09SS19UWF9IQUxULCAmaHctPnVzYl9mbGFncykgfHwKKwkgICAgIGh3LT53bGFuZGV2LT5od3JlbW92ZWQgKQorCQlnb3RvIHVubG9jazsKKworCXdoaWxlICggIWxpc3RfZW1wdHkoJmh3LT5jdGx4cS5wZW5kaW5nKSApIHsKKwkJaGZhMzg0eF91c2JjdGx4X3QJKmhlYWQ7CisJCWludAkJCXJlc3VsdDsKKworCQkvKiBUaGlzIGlzIHRoZSBmaXJzdCBwZW5kaW5nIGNvbW1hbmQgKi8KKwkJaGVhZCA9IGxpc3RfZW50cnkoaHctPmN0bHhxLnBlbmRpbmcubmV4dCwKKwkJICAgICAgICAgICAgICAgICAgaGZhMzg0eF91c2JjdGx4X3QsCisJCSAgICAgICAgICAgICAgICAgIGxpc3QpOworCisJCS8qIFdlIG5lZWQgdG8gc3BsaXQgdGhpcyBvZmYgdG8gYXZvaWQgYSByYWNlIGNvbmRpdGlvbiAqLworCQlsaXN0X21vdmVfdGFpbCgmaGVhZC0+bGlzdCwgJmh3LT5jdGx4cS5hY3RpdmUpOworCisJCS8qIEZpbGwgdGhlIG91dCBwYWNrZXQgKi8KKwkJdXNiX2ZpbGxfYnVsa191cmIoICYoaHctPmN0bHhfdXJiKSwgaHctPnVzYiwKKwkJICAgICAgICAgICAgICAgICAgIGh3LT5lbmRwX291dCwKKwkJICAgICAgICAgICAgICAgICAgICYoaGVhZC0+b3V0YnVmKSwgUk9VTkRVUDY0KGhlYWQtPm91dGJ1ZnNpemUpLAorCQkgICAgICAgICAgICAgICAgICAgaGZhMzg0eF9jdGx4b3V0X2NhbGxiYWNrLCBodyk7CisJCWh3LT5jdGx4X3VyYi50cmFuc2Zlcl9mbGFncyB8PSBVU0JfUVVFVUVfQlVMSzsKKworCQkvKiBOb3cgc3VibWl0IHRoZSBVUkIgYW5kIHVwZGF0ZSB0aGUgQ1RMWCdzIHN0YXRlCisJCSAqLworCQlpZiAoKHJlc3VsdCA9IFNVQk1JVF9VUkIoJmh3LT5jdGx4X3VyYiwgR0ZQX0FUT01JQykpID09IDApIHsKKwkJCS8qIFRoaXMgQ1RMWCBpcyBub3cgcnVubmluZyBvbiB0aGUgYWN0aXZlIHF1ZXVlICovCisJCQloZWFkLT5zdGF0ZSA9IENUTFhfUkVRX1NVQk1JVFRFRDsKKworCQkJLyogU3RhcnQgdGhlIE9VVCB3YWl0IHRpbWVyICovCisJCQlody0+cmVxX3RpbWVyX2RvbmUgPSAwOworCQkJaHctPnJlcXRpbWVyLmV4cGlyZXMgPSBqaWZmaWVzICsgSFo7CisJCQlhZGRfdGltZXIoJmh3LT5yZXF0aW1lcik7CisKKwkJCS8qIFN0YXJ0IHRoZSBJTiB3YWl0IHRpbWVyICovCisJCQlody0+cmVzcF90aW1lcl9kb25lID0gMDsKKwkJCWh3LT5yZXNwdGltZXIuZXhwaXJlcyA9IGppZmZpZXMgKyAyKkhaOworCQkJYWRkX3RpbWVyKCZody0+cmVzcHRpbWVyKTsKKworCQkJYnJlYWs7CisJCX0KKworCQlpZiAocmVzdWx0ID09IC1FUElQRSkgeworCQkJLyogVGhlIE9VVCBwaXBlIG5lZWRzIHJlc2V0dGluZywgc28gcHV0CisJCQkgKiB0aGlzIENUTFggYmFjayBpbiB0aGUgInBlbmRpbmciIHF1ZXVlCisJCQkgKiBhbmQgc2NoZWR1bGUgYSByZXNldCAuLi4KKwkJCSAqLworCQkJV0xBTl9MT0dfV0FSTklORygiJXMgdHggcGlwZSBzdGFsbGVkOiByZXF1ZXN0aW5nIHJlc2V0XG4iLAorCQkJICAgICAgICAgICAgICAgICBody0+d2xhbmRldi0+bmV0ZGV2LT5uYW1lKTsKKwkJCWxpc3RfbW92ZSgmaGVhZC0+bGlzdCwgJmh3LT5jdGx4cS5wZW5kaW5nKTsKKwkJCXNldF9iaXQoV09SS19UWF9IQUxULCAmaHctPnVzYl9mbGFncyk7CisJCQlzY2hlZHVsZV93b3JrKCZody0+dXNiX3dvcmspOworCQkJYnJlYWs7CisJCX0KKworCQlpZiAocmVzdWx0ID09IC1FU0hVVERPV04pIHsKKwkJCVdMQU5fTE9HX1dBUk5JTkcoIiVzIHVyYiBzaHV0ZG93biFcbiIsCisJCQkJCSBody0+d2xhbmRldi0+bmV0ZGV2LT5uYW1lKTsKKwkJCWJyZWFrOworCQl9CisKKwkJV0xBTl9MT0dfRVJST1IoIkZhaWxlZCB0byBzdWJtaXQgQ1RMWFslZF06IGVycm9yPSVkXG4iLAorCQkgICAgICAgICAgICAgICBoZmEzODR4Mmhvc3RfMTYoaGVhZC0+b3V0YnVmLnR5cGUpLCByZXN1bHQpOworCQl1bmxvY2tlZF91c2JjdGx4X2NvbXBsZXRlKGh3LCBoZWFkKTsKKwl9IC8qIHdoaWxlICovCisKKwl1bmxvY2s6CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaHctPmN0bHhxLmxvY2ssIGZsYWdzKTsKKworCURCRkVYSVQ7Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIGhmYTM4NHhfdXNiaW5fY2FsbGJhY2sKKyoKKyogQ2FsbGJhY2sgZm9yIFVSQnMgb24gdGhlIEJVTEtJTiBlbmRwb2ludC4KKyoKKyogQXJndW1lbnRzOgorKgl1cmIJCXB0ciB0byB0aGUgY29tcGxldGVkIHVyYgorKgorKiBSZXR1cm5zOgorKglub3RoaW5nCisqCisqIFNpZGUgZWZmZWN0czoKKyoKKyogQ2FsbCBjb250ZXh0OgorKglpbnRlcnJ1cHQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2lmZGVmIFVSQl9PTkxZX0NBTExCQUNLCitzdGF0aWMgdm9pZCBoZmEzODR4X3VzYmluX2NhbGxiYWNrKHN0cnVjdCB1cmIgKnVyYikKKyNlbHNlCitzdGF0aWMgdm9pZCBoZmEzODR4X3VzYmluX2NhbGxiYWNrKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCisjZW5kaWYKK3sKKwl3bGFuZGV2aWNlX3QJCSp3bGFuZGV2ID0gdXJiLT5jb250ZXh0OworCWhmYTM4NHhfdAkJKmh3OworCWhmYTM4NHhfdXNiaW5fdAkJKnVzYmluID0gKGhmYTM4NHhfdXNiaW5fdCAqKSB1cmItPnRyYW5zZmVyX2J1ZmZlcjsKKwlzdHJ1Y3Qgc2tfYnVmZiAgICAgICAgICAqc2tiID0gTlVMTDsKKwlpbnQJCQlyZXN1bHQ7CisJaW50ICAgICAgICAgICAgICAgICAgICAgdXJiX3N0YXR1czsKKwlVSU5UMTYJCQl0eXBlOworCisJZW51bSBVU0JJTl9BQ1RJT04geworCQlIQU5ETEUsCisJCVJFU1VCTUlULAorCQlBQk9SVAorCX0gYWN0aW9uOworCisJREJGRU5URVI7CisKKwlpZiAoICF3bGFuZGV2IHx8CisJICAgICAhd2xhbmRldi0+bmV0ZGV2IHx8CisJICAgICAhbmV0aWZfZGV2aWNlX3ByZXNlbnQod2xhbmRldi0+bmV0ZGV2KSApCisJCWdvdG8gZXhpdDsKKworCWh3ID0gd2xhbmRldi0+cHJpdjsKKwlpZiAoIWh3KQorCQlnb3RvIGV4aXQ7CisKKwlza2IgPSBody0+cnhfdXJiX3NrYjsKKwlpZiAoIXNrYiB8fCAoc2tiLT5kYXRhICE9IHVyYi0+dHJhbnNmZXJfYnVmZmVyKSkgeworCQlCVUcoKTsKKwl9CisJaHctPnJ4X3VyYl9za2IgPSBOVUxMOworCisJLyogQ2hlY2sgZm9yIGVycm9yIGNvbmRpdGlvbnMgd2l0aGluIHRoZSBVUkIgKi8KKwlzd2l0Y2ggKHVyYi0+c3RhdHVzKSB7CisJY2FzZSAwOgorCQlhY3Rpb24gPSBIQU5ETEU7CisKKwkJLyogQ2hlY2sgZm9yIHNob3J0IHBhY2tldCAqLworCQlpZiAoIHVyYi0+YWN0dWFsX2xlbmd0aCA9PSAwICkgeworCQkJKysod2xhbmRldi0+bGludXhfc3RhdHMucnhfZXJyb3JzKTsKKwkJCSsrKHdsYW5kZXYtPmxpbnV4X3N0YXRzLnJ4X2xlbmd0aF9lcnJvcnMpOworCQkJYWN0aW9uID0gUkVTVUJNSVQ7CisJCX0KKwkJYnJlYWs7CisKKwljYXNlIC1FUElQRToKKwkJV0xBTl9MT0dfV0FSTklORygiJXMgcnggcGlwZSBzdGFsbGVkOiByZXF1ZXN0aW5nIHJlc2V0XG4iLAorCQkgICAgICAgICAgICAgICAgIHdsYW5kZXYtPm5ldGRldi0+bmFtZSk7CisJCWlmICggIXRlc3RfYW5kX3NldF9iaXQoV09SS19SWF9IQUxULCAmaHctPnVzYl9mbGFncykgKQorCQkJc2NoZWR1bGVfd29yaygmaHctPnVzYl93b3JrKTsKKwkJKysod2xhbmRldi0+bGludXhfc3RhdHMucnhfZXJyb3JzKTsKKwkJYWN0aW9uID0gQUJPUlQ7CisJCWJyZWFrOworCisJY2FzZSAtRUlMU0VROgorCWNhc2UgLUVUSU1FRE9VVDoKKwljYXNlIC1FUFJPVE86CisJCWlmICggIXRlc3RfYW5kX3NldF9iaXQoVEhST1RUTEVfUlgsICZody0+dXNiX2ZsYWdzKSAmJgorCQkgICAgICF0aW1lcl9wZW5kaW5nKCZody0+dGhyb3R0bGUpICkgeworCQkJbW9kX3RpbWVyKCZody0+dGhyb3R0bGUsIGppZmZpZXMgKyBUSFJPVFRMRV9KSUZGSUVTKTsKKwkJfQorCQkrKyh3bGFuZGV2LT5saW51eF9zdGF0cy5yeF9lcnJvcnMpOworCQlhY3Rpb24gPSBBQk9SVDsKKwkJYnJlYWs7CisKKwljYXNlIC1FT1ZFUkZMT1c6CisJCSsrKHdsYW5kZXYtPmxpbnV4X3N0YXRzLnJ4X292ZXJfZXJyb3JzKTsKKwkJYWN0aW9uID0gUkVTVUJNSVQ7CisJCWJyZWFrOworCisJY2FzZSAtRU5PREVWOgorCWNhc2UgLUVTSFVURE9XTjoKKwkJV0xBTl9MT0dfREVCVUcoMywic3RhdHVzPSVkLCBkZXZpY2UgcmVtb3ZlZC5cbiIsIHVyYi0+c3RhdHVzKTsKKwkJYWN0aW9uID0gQUJPUlQ7CisJCWJyZWFrOworCisJY2FzZSAtRU5PRU5UOgorCWNhc2UgLUVDT05OUkVTRVQ6CisJCVdMQU5fTE9HX0RFQlVHKDMsInN0YXR1cz0lZCwgdXJiIGV4cGxpY2l0bHkgdW5saW5rZWQuXG4iLCB1cmItPnN0YXR1cyk7CisJCWFjdGlvbiA9IEFCT1JUOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCVdMQU5fTE9HX0RFQlVHKDMsInVyYiBzdGF0dXM9JWQsIHRyYW5zZmVyIGZsYWdzPTB4JXhcbiIsCisJCSAgICAgICAgICAgICAgICAgdXJiLT5zdGF0dXMsIHVyYi0+dHJhbnNmZXJfZmxhZ3MpOworCQkrKyh3bGFuZGV2LT5saW51eF9zdGF0cy5yeF9lcnJvcnMpOworCQlhY3Rpb24gPSBSRVNVQk1JVDsKKwkJYnJlYWs7CisJfQorCisJdXJiX3N0YXR1cyA9IHVyYi0+c3RhdHVzOworCisJaWYgKGFjdGlvbiAhPSBBQk9SVCkgeworCQkvKiBSZXBvc3QgdGhlIFJYIFVSQiAqLworCQlyZXN1bHQgPSBzdWJtaXRfcnhfdXJiKGh3LCBHRlBfQVRPTUlDKTsKKworCQlpZiAocmVzdWx0ICE9IDApIHsKKwkJCVdMQU5fTE9HX0VSUk9SKAorCQkJCSJGYXRhbCwgZmFpbGVkIHRvIHJlc3VibWl0IHJ4X3VyYi4gZXJyb3I9JWRcbiIsCisJCQkJcmVzdWx0KTsKKwkJfQorCX0KKworCS8qIEhhbmRsZSBhbnkgVVNCLUlOIHBhY2tldCAqLworCS8qIE5vdGU6IHRoZSBjaGVjayBvZiB0aGUgc3dfc3VwcG9ydCBmaWVsZCwgdGhlIHR5cGUgZmllbGQgZG9lc24ndAorCSAqICAgICAgIGhhdmUgYml0IDEyIHNldCBsaWtlIHRoZSBkb2NzIHN1Z2dlc3QuCisJICovCisJdHlwZSA9IGhmYTM4NHgyaG9zdF8xNih1c2Jpbi0+dHlwZSk7CisJaWYgKEhGQTM4NHhfVVNCX0lTUlhGUk0odHlwZSkpIHsKKwkJaWYgKGFjdGlvbiA9PSBIQU5ETEUpIHsKKwkJCWlmICh1c2Jpbi0+dHhmcm0uZGVzYy5zd19zdXBwb3J0ID09IDB4MDEyMykgeworCQkJCWhmYTM4NHhfdXNiaW5fdHhjb21wbCh3bGFuZGV2LCB1c2Jpbik7CisJCQl9IGVsc2UgeworCQkJCXNrYl9wdXQoc2tiLCBzaXplb2YoKnVzYmluKSk7CisJCQkJaGZhMzg0eF91c2Jpbl9yeCh3bGFuZGV2LCBza2IpOworCQkJCXNrYiA9IE5VTEw7CisJCQl9CisJCX0KKwkJZ290byBleGl0OworCX0KKwlpZiAoSEZBMzg0eF9VU0JfSVNUWEZSTSh0eXBlKSkgeworCQlpZiAoYWN0aW9uID09IEhBTkRMRSkKKwkJCWhmYTM4NHhfdXNiaW5fdHhjb21wbCh3bGFuZGV2LCB1c2Jpbik7CisJCWdvdG8gZXhpdDsKKwl9CisJc3dpdGNoICh0eXBlKSB7CisJY2FzZSBIRkEzODR4X1VTQl9JTkZPRlJNOgorCQlpZiAoYWN0aW9uID09IEFCT1JUKQorCQkJZ290byBleGl0OworCQlpZiAoYWN0aW9uID09IEhBTkRMRSkKKwkJCWhmYTM4NHhfdXNiaW5faW5mbyh3bGFuZGV2LCB1c2Jpbik7CisJCWJyZWFrOworCisJY2FzZSBIRkEzODR4X1VTQl9DTURSRVNQOgorCWNhc2UgSEZBMzg0eF9VU0JfV1JJRFJFU1A6CisJY2FzZSBIRkEzODR4X1VTQl9SUklEUkVTUDoKKwljYXNlIEhGQTM4NHhfVVNCX1dNRU1SRVNQOgorCWNhc2UgSEZBMzg0eF9VU0JfUk1FTVJFU1A6CisJCS8qIEFMV0FZUywgQUxXQVlTLCBBTFdBWVMgaGFuZGxlIHRoaXMgQ1RMWCEhISEgKi8KKwkJaGZhMzg0eF91c2Jpbl9jdGx4KGh3LCB1c2JpbiwgdXJiX3N0YXR1cyk7CisJCWJyZWFrOworCisJY2FzZSBIRkEzODR4X1VTQl9CVUZBVkFJTDoKKwkJV0xBTl9MT0dfREVCVUcoMywiUmVjZWl2ZWQgQlVGQVZBSUwgcGFja2V0LCBmcm1sZW49JWRcbiIsCisJCQl1c2Jpbi0+YnVmYXZhaWwuZnJtbGVuKTsKKwkJYnJlYWs7CisKKwljYXNlIEhGQTM4NHhfVVNCX0VSUk9SOgorCQlXTEFOX0xPR19ERUJVRygzLCJSZWNlaXZlZCBVU0JfRVJST1IgcGFja2V0LCBlcnJvcnR5cGU9JWRcbiIsCisJCQl1c2Jpbi0+dXNiZXJyb3IuZXJyb3J0eXBlKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlXTEFOX0xPR19ERUJVRygzLCJVbnJlY29nbml6ZWQgVVNCSU4gcGFja2V0LCB0eXBlPSV4LCBzdGF0dXM9JWRcbiIsCisJCQl1c2Jpbi0+dHlwZSwgdXJiX3N0YXR1cyk7CisJCWJyZWFrOworCX0gLyogc3dpdGNoICovCisKK2V4aXQ6CisKKwlpZiAoc2tiKQorCQlkZXZfa2ZyZWVfc2tiKHNrYik7CisKKwlEQkZFWElUOworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBoZmEzODR4X3VzYmluX2N0bHgKKyoKKyogV2UndmUgcmVjZWl2ZWQgYSBVUkIgY29udGFpbmluZyBhIFByaXNtMiAicmVzcG9uc2UiIG1lc3NhZ2UuCisqIFRoaXMgbWVzc2FnZSBuZWVkcyB0byBiZSBtYXRjaGVkIHVwIHdpdGggYSBDVExYIG9uIHRoZSBhY3RpdmUKKyogcXVldWUgYW5kIG91ciBzdGF0ZSB1cGRhdGVkIGFjY29yZGluZ2x5LgorKgorKiBBcmd1bWVudHM6CisqCWh3CQlwdHIgdG8gaGZhMzg0eF90CisqCXVzYmluCQlwdHIgdG8gVVNCIElOIHBhY2tldAorKgl1cmJfc3RhdHVzCXN0YXR1cyBvZiB0aGlzIEJ1bGstSW4gVVJCCisqCisqIFJldHVybnM6CisqCW5vdGhpbmcKKyoKKyogU2lkZSBlZmZlY3RzOgorKgorKiBDYWxsIGNvbnRleHQ6CisqCWludGVycnVwdAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgdm9pZCBoZmEzODR4X3VzYmluX2N0bHgoaGZhMzg0eF90ICpodywgaGZhMzg0eF91c2Jpbl90ICp1c2JpbiwKKwkJCSAgICAgICBpbnQgdXJiX3N0YXR1cykKK3sKKwloZmEzODR4X3VzYmN0bHhfdAkqY3RseDsKKwlpbnQJCQlydW5fcXVldWUgPSAwOworCXVuc2lnbmVkIGxvbmcJCWZsYWdzOworCisJREJGRU5URVI7CisKK3JldHJ5OgorCXNwaW5fbG9ja19pcnFzYXZlKCZody0+Y3RseHEubG9jaywgZmxhZ3MpOworCisJLyogVGhlcmUgY2FuIGJlIG9ubHkgb25lIENUTFggb24gdGhlIGFjdGl2ZSBxdWV1ZQorCSAqIGF0IGFueSBvbmUgdGltZSwgYW5kIHRoaXMgaXMgdGhlIENUTFggdGhhdCB0aGUKKwkgKiB0aW1lcnMgYXJlIHdhaXRpbmcgZm9yLgorCSAqLworCWlmICggbGlzdF9lbXB0eSgmaHctPmN0bHhxLmFjdGl2ZSkgKSB7CisJCWdvdG8gdW5sb2NrOworCX0KKworCS8qIFJlbW92ZSB0aGUgInJlc3BvbnNlIHRpbWVvdXQiLiBJdCdzIHBvc3NpYmxlIHRoYXQKKwkgKiB3ZSBhcmUgYWxyZWFkeSB0b28gbGF0ZSwgYW5kIHRoYXQgdGhlIHRpbWVvdXQgaXMKKwkgKiBhbHJlYWR5IHJ1bm5pbmcuIEFuZCB0aGF0J3MganVzdCB0b28gYmFkIGZvciB1cywKKwkgKiBiZWNhdXNlIHdlIGNvdWxkIGxvc2Ugb3VyIENUTFggZnJvbSB0aGUgYWN0aXZlCisJICogcXVldWUgaGVyZSAuLi4KKwkgKi8KKwlpZiAoZGVsX3RpbWVyKCZody0+cmVzcHRpbWVyKSA9PSAwKSB7CisJCWlmIChody0+cmVzcF90aW1lcl9kb25lID09IDApIHsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmh3LT5jdGx4cS5sb2NrLCBmbGFncyk7CisJCQlnb3RvIHJldHJ5OworCQl9CisJfQorCWVsc2UgeworCQlody0+cmVzcF90aW1lcl9kb25lID0gMTsKKwl9CisKKwljdGx4ID0gZ2V0X2FjdGl2ZV9jdGx4KGh3KTsKKworCWlmICh1cmJfc3RhdHVzICE9IDApIHsKKwkJLyoKKwkJICogQmFkIENUTFgsIHNvIGdldCByaWQgb2YgaXQuIEJ1dCB3ZSBvbmx5CisJCSAqIHJlbW92ZSBpdCBmcm9tIHRoZSBhY3RpdmUgcXVldWUgaWYgd2UncmUgbm8KKwkJICogbG9uZ2VyIGV4cGVjdGluZyB0aGUgT1VUIFVSQiB0byBjb21wbGV0ZS4KKwkJICovCisJCWlmICh1bmxvY2tlZF91c2JjdGx4X2NhbmNlbF9hc3luYyhodywgY3RseCkgPT0gMCkKKwkJCXJ1bl9xdWV1ZSA9IDE7CisJfSBlbHNlIHsKKwkJY29uc3QgVUlOVDE2IGludHlwZSA9ICh1c2Jpbi0+dHlwZSZ+aG9zdDJoZmEzODR4XzE2KDB4ODAwMCkpOworCisJCS8qCisJCSAqIENoZWNrIHRoYXQgb3VyIG1lc3NhZ2UgaXMgd2hhdCB3ZSdyZSBleHBlY3RpbmcgLi4uCisJCSAqLworCQlpZiAoY3RseC0+b3V0YnVmLnR5cGUgIT0gaW50eXBlKSB7CisJCQlXTEFOX0xPR19XQVJOSU5HKCJFeHBlY3RlZCBJTlslZF0sIHJlY2VpdmVkIElOWyVkXSAtIGlnbm9yZWQuXG4iLAorCQkJICAgICAgICAgICAgICAgICBoZmEzODR4Mmhvc3RfMTYoY3RseC0+b3V0YnVmLnR5cGUpLAorCQkJICAgICAgICAgICAgICAgICBoZmEzODR4Mmhvc3RfMTYoaW50eXBlKSk7CisJCQlnb3RvIHVubG9jazsKKwkJfQorCisJCS8qIFRoaXMgVVJCIGhhcyBzdWNjZWVkZWQsIHNvIGdyYWIgdGhlIGRhdGEgLi4uICovCisJCW1lbWNweSgmY3RseC0+aW5idWYsIHVzYmluLCBzaXplb2YoY3RseC0+aW5idWYpKTsKKworCQlzd2l0Y2ggKGN0bHgtPnN0YXRlKSB7CisJCWNhc2UgQ1RMWF9SRVFfU1VCTUlUVEVEOgorCQkJLyoKKwkJCSAqIFdlIGhhdmUgcmVjZWl2ZWQgb3VyIHJlc3BvbnNlIFVSQiBiZWZvcmUKKwkJCSAqIG91ciByZXF1ZXN0IGhhcyBiZWVuIGFja25vd2xlZGdlZC4gT2RkLAorCQkJICogYnV0IG91ciBPVVQgVVJCIGlzIHN0aWxsIGFsaXZlLi4uCisJCQkgKi8KKwkJCVdMQU5fTE9HX0RFQlVHKDAsICJDYXVzYWxpdHkgdmlvbGF0aW9uOiBwbGVhc2UgcmVib290IFVuaXZlcnNlLCBvciBlbWFpbCBsaW51eC13bGFuLWRldmVsQGxpc3RzLmxpbnV4LXdsYW4uY29tXG4iKTsKKwkJCWN0bHgtPnN0YXRlID0gQ1RMWF9SRVNQX0NPTVBMRVRFOworCQkJYnJlYWs7CisKKwkJY2FzZSBDVExYX1JFUV9DT01QTEVURToKKwkJCS8qCisJCQkgKiBUaGlzIGlzIHRoZSB1c3VhbCBwYXRoOiBvdXIgcmVxdWVzdAorCQkJICogaGFzIGFscmVhZHkgYmVlbiBhY2tub3dsZWRnZWQsIGFuZAorCQkJICogbm93IHdlIGhhdmUgcmVjZWl2ZWQgdGhlIHJlcGx5IHRvby4KKwkJCSAqLworCQkJY3RseC0+c3RhdGUgPSBDVExYX0NPTVBMRVRFOworCQkJdW5sb2NrZWRfdXNiY3RseF9jb21wbGV0ZShodywgY3RseCk7CisJCQlydW5fcXVldWUgPSAxOworCQkJYnJlYWs7CisKKwkJZGVmYXVsdDoKKwkJCS8qCisJCQkgKiBUaHJvdyB0aGlzIENUTFggYXdheSAuLi4KKwkJCSAqLworCQkJV0xBTl9MT0dfRVJST1IoIk1hdGNoZWQgSU4gVVJCLCBDVExYWyVkXSBpbiBpbnZhbGlkIHN0YXRlKCVzKS4iCisJCQkgICAgICAgICAgICAgICAiIERpc2NhcmRlZC5cbiIsCisJCQkgICAgICAgICAgICAgICBoZmEzODR4Mmhvc3RfMTYoY3RseC0+b3V0YnVmLnR5cGUpLAorCQkJICAgICAgICAgICAgICAgY3RseHN0cihjdGx4LT5zdGF0ZSkpOworCQkJaWYgKHVubG9ja2VkX3VzYmN0bHhfY2FuY2VsX2FzeW5jKGh3LCBjdGx4KSA9PSAwKQorCQkJCXJ1bl9xdWV1ZSA9IDE7CisJCQlicmVhazsKKwkJfSAvKiBzd2l0Y2ggKi8KKwl9CisKK3VubG9jazoKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZody0+Y3RseHEubG9jaywgZmxhZ3MpOworCisJaWYgKHJ1bl9xdWV1ZSkKKwkJaGZhMzg0eF91c2JjdGx4cV9ydW4oaHcpOworCisJREJGRVhJVDsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogaGZhMzg0eF91c2Jpbl90eGNvbXBsCisqCisqIEF0IHRoaXMgcG9pbnQgd2UgaGF2ZSB0aGUgcmVzdWx0cyBvZiBhIHByZXZpb3VzIHRyYW5zbWl0LgorKgorKiBBcmd1bWVudHM6CisqCXdsYW5kZXYJCXdsYW4gZGV2aWNlCisqCXVzYmluCQlwdHIgdG8gdGhlIHVzYiB0cmFuc2ZlciBidWZmZXIKKyoKKyogUmV0dXJuczoKKyoJbm90aGluZworKgorKiBTaWRlIGVmZmVjdHM6CisqCisqIENhbGwgY29udGV4dDoKKyoJaW50ZXJydXB0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyB2b2lkIGhmYTM4NHhfdXNiaW5fdHhjb21wbCh3bGFuZGV2aWNlX3QgKndsYW5kZXYsIGhmYTM4NHhfdXNiaW5fdCAqdXNiaW4pCit7CisJVUlOVDE2CQkJc3RhdHVzOworCURCRkVOVEVSOworCisJc3RhdHVzID0gaGZhMzg0eDJob3N0XzE2KHVzYmluLT50eXBlKTsgLyogeWVhaCBJIGtub3cgaXQgc2F5cyB0eXBlLi4uKi8KKworCS8qIFdhcyB0aGVyZSBhbiBlcnJvcj8gKi8KKwlpZiAoSEZBMzg0eF9UWFNUQVRVU19JU0VSUk9SKHN0YXR1cykpIHsKKwkJcHJpc20yc3RhX2V2X3R4ZXhjKHdsYW5kZXYsIHN0YXR1cyk7CisJfSBlbHNlIHsKKwkJcHJpc20yc3RhX2V2X3R4KHdsYW5kZXYsIHN0YXR1cyk7CisJfQorCS8vIHByaXNtMnN0YV9ldl9hbGxvYyh3bGFuZGV2KTsKKworCURCRkVYSVQ7Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIGhmYTM4NHhfdXNiaW5fcngKKyoKKyogQXQgdGhpcyBwb2ludCB3ZSBoYXZlIGEgc3VjY2Vzc2Z1bCByZWNlaXZlZCBhIHJ4IGZyYW1lIHBhY2tldC4KKyoKKyogQXJndW1lbnRzOgorKgl3bGFuZGV2CQl3bGFuIGRldmljZQorKgl1c2JpbgkJcHRyIHRvIHRoZSB1c2IgdHJhbnNmZXIgYnVmZmVyCisqCisqIFJldHVybnM6CisqCW5vdGhpbmcKKyoKKyogU2lkZSBlZmZlY3RzOgorKgorKiBDYWxsIGNvbnRleHQ6CisqCWludGVycnVwdAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgdm9pZCBoZmEzODR4X3VzYmluX3J4KHdsYW5kZXZpY2VfdCAqd2xhbmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwloZmEzODR4X3VzYmluX3QgICAgICAgICAqdXNiaW4gPSAoaGZhMzg0eF91c2Jpbl90ICopIHNrYi0+ZGF0YTsKKwloZmEzODR4X3QgICAgICAgICAgICAgICAqaHcgPSB3bGFuZGV2LT5wcml2OworCWludCAgICAgICAgICAgICAgICAgICAgIGhkcmxlbjsKKwlwODAyMTFfcnhtZXRhX3QgICAgICAgICAqcnhtZXRhOworCVVJTlQxNiAgICAgICAgICAgICAgICAgIGRhdGFfbGVuOworCVVJTlQxNiAgICAgICAgICAgICAgICAgIGZjOworCisJREJGRU5URVI7CisKKwkvKiBCeXRlIG9yZGVyIGNvbnZlcnQgb25jZSB1cCBmcm9udC4gKi8KKwl1c2Jpbi0+cnhmcm0uZGVzYy5zdGF0dXMgPQorCQloZmEzODR4Mmhvc3RfMTYodXNiaW4tPnJ4ZnJtLmRlc2Muc3RhdHVzKTsKKwl1c2Jpbi0+cnhmcm0uZGVzYy50aW1lID0KKwkJaGZhMzg0eDJob3N0XzMyKHVzYmluLT5yeGZybS5kZXNjLnRpbWUpOworCisJLyogTm93IGhhbmRsZSBmcmFtZSBiYXNlZCBvbiBwb3J0IyAqLworCXN3aXRjaCggSEZBMzg0eF9SWFNUQVRVU19NQUNQT1JUX0dFVCh1c2Jpbi0+cnhmcm0uZGVzYy5zdGF0dXMpICkKKwl7CisJY2FzZSAwOgorCQlmYyA9IGllZWUyaG9zdDE2KHVzYmluLT5yeGZybS5kZXNjLmZyYW1lX2NvbnRyb2wpOworCisJCS8qIElmIGV4Y2x1ZGUgYW5kIHdlIHJlY2VpdmUgYW4gdW5lbmNyeXB0ZWQsIGRyb3AgaXQgKi8KKwkJaWYgKCAod2xhbmRldi0+aG9zdHdlcCAmIEhPU1RXRVBfRVhDTFVERVVORU5DUllQVEVEKSAmJgorCQkgICAgICFXTEFOX0dFVF9GQ19JU1dFUChmYykpeworCQkJZ290byBkb25lOworCQl9CisKKwkJZGF0YV9sZW4gPSBoZmEzODR4Mmhvc3RfMTYodXNiaW4tPnJ4ZnJtLmRlc2MuZGF0YV9sZW4pOworCisJCS8qIEhvdyBtdWNoIGhlYWRlciBkYXRhIGRvIHdlIGhhdmU/ICovCisJCWhkcmxlbiA9IHA4MDIxMV9oZWFkZXJsZW4oZmMpOworCisJCS8qIFB1bGwgb2ZmIHRoZSBkZXNjcmlwdG9yICovCisJCXNrYl9wdWxsKHNrYiwgc2l6ZW9mKGhmYTM4NHhfcnhfZnJhbWVfdCkpOworCisJCS8qIE5vdyBzaHVudCB0aGUgaGVhZGVyIGJsb2NrIHVwIGFnYWluc3QgdGhlIGRhdGEgYmxvY2sKKwkJICogd2l0aCBhbiAib3ZlcmxhcHBpbmciIGNvcHkKKwkJICovCisJCW1lbW1vdmUoc2tiX3B1c2goc2tiLCBoZHJsZW4pLAorCQkgICAgICAgICZ1c2Jpbi0+cnhmcm0uZGVzYy5mcmFtZV9jb250cm9sLAorCQkgICAgICAgIGhkcmxlbik7CisKKwkJc2tiLT5kZXYgPSB3bGFuZGV2LT5uZXRkZXY7CisJCXNrYi0+ZGV2LT5sYXN0X3J4ID0gamlmZmllczsKKworCQkvKiBBbmQgc2V0IHRoZSBmcmFtZSBsZW5ndGggcHJvcGVybHkgKi8KKwkJc2tiX3RyaW0oc2tiLCBkYXRhX2xlbiArIGhkcmxlbik7CisKKwkJLyogVGhlIHByaXNtMiBzZXJpZXMgZG9lcyBub3QgcmV0dXJuIHRoZSBDUkMgKi8KKwkJbWVtc2V0KHNrYl9wdXQoc2tiLCBXTEFOX0NSQ19MRU4pLCAweGZmLCBXTEFOX0NSQ19MRU4pOworCisJCXNrYl9yZXNldF9tYWNfaGVhZGVyKHNrYik7CisKKwkJLyogQXR0YWNoIHRoZSByeG1ldGEsIHNldCBzb21lIHN0dWZmICovCisJCXA4MDIxMXNrYl9yeG1ldGFfYXR0YWNoKHdsYW5kZXYsIHNrYik7CisJCXJ4bWV0YSA9IFA4MDIxMVNLQl9SWE1FVEEoc2tiKTsKKwkJcnhtZXRhLT5tYWN0aW1lID0gdXNiaW4tPnJ4ZnJtLmRlc2MudGltZTsKKwkJcnhtZXRhLT5yeHJhdGUgPSB1c2Jpbi0+cnhmcm0uZGVzYy5yYXRlOworCQlyeG1ldGEtPnNpZ25hbCA9IHVzYmluLT5yeGZybS5kZXNjLnNpZ25hbCAtIGh3LT5kYm1hZGp1c3Q7CisJCXJ4bWV0YS0+bm9pc2UgPSB1c2Jpbi0+cnhmcm0uZGVzYy5zaWxlbmNlIC0gaHctPmRibWFkanVzdDsKKworCQlwcmlzbTJzdGFfZXZfcngod2xhbmRldiwgc2tiKTsKKworCQlicmVhazsKKworCWNhc2UgNzoKKwkJaWYgKCAhIEhGQTM4NHhfUlhTVEFUVVNfSVNGQ1NFUlIodXNiaW4tPnJ4ZnJtLmRlc2Muc3RhdHVzKSApIHsKKwkJCS8qIENvcHkgdG8gd2xhbnNuaWYgc2tiICovCisJCQloZmEzODR4X2ludF9yeG1vbml0b3IoIHdsYW5kZXYsICZ1c2Jpbi0+cnhmcm0pOworCQkJZGV2X2tmcmVlX3NrYihza2IpOworCQl9IGVsc2UgeworCQkJV0xBTl9MT0dfREVCVUcoMywiUmVjZWl2ZWQgbW9uaXRvciBmcmFtZTogRkNTZXJyIHNldFxuIik7CisJCX0KKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlXTEFOX0xPR19XQVJOSU5HKCJSZWNlaXZlZCBmcmFtZSBvbiB1bnN1cHBvcnRlZCBwb3J0PSVkXG4iLAorCQkJSEZBMzg0eF9SWFNUQVRVU19NQUNQT1JUX0dFVCh1c2Jpbi0+cnhmcm0uZGVzYy5zdGF0dXMpICk7CisJCWdvdG8gZG9uZTsKKwkJYnJlYWs7CisJfQorCitkb25lOgorCURCRkVYSVQ7CisJcmV0dXJuOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogaGZhMzg0eF9pbnRfcnhtb25pdG9yCisqCisqIEhlbHBlciBmdW5jdGlvbiBmb3IgaW50X3J4LiAgSGFuZGxlcyBtb25pdG9yIGZyYW1lcy4KKyogTm90ZSB0aGF0IHRoaXMgZnVuY3Rpb24gYWxsb2NhdGVzIHNwYWNlIGZvciB0aGUgRkNTIGFuZCBzZXRzIGl0CisqIHRvIDB4ZmZmZmZmZmYuICBUaGUgaGZhMzg0eCBkb2Vzbid0IGdpdmUgdXMgdGhlIEZDUyB2YWx1ZSBidXQgdGhlCisqIGhpZ2hlciBsYXllcnMgZXhwZWN0IGl0LiAgMHhmZmZmZmZmZiBpcyB1c2VkIGFzIGEgZmxhZyB0byBpbmRpY2F0ZQorKiB0aGUgRkNTIGlzIGJvZ3VzLgorKgorKiBBcmd1bWVudHM6CisqCXdsYW5kZXYJCXdsYW4gZGV2aWNlIHN0cnVjdHVyZQorKglyeGZybQkJcnggZGVzY3JpcHRvciByZWFkIGZyb20gY2FyZCBpbiBpbnRfcngKKyoKKyogUmV0dXJuczoKKyoJbm90aGluZworKgorKiBTaWRlIGVmZmVjdHM6CisqCUFsbG9jYXRlcyBhbiBza2IgYW5kIHBhc3NlcyBpdCB1cCB2aWEgdGhlIFBGX1BBQ0tFVCBpbnRlcmZhY2UuCisqIENhbGwgY29udGV4dDoKKyoJaW50ZXJydXB0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyB2b2lkIGhmYTM4NHhfaW50X3J4bW9uaXRvciggd2xhbmRldmljZV90ICp3bGFuZGV2LCBoZmEzODR4X3VzYl9yeGZybV90ICpyeGZybSkKK3sKKwloZmEzODR4X3J4X2ZyYW1lX3QgICAgICAgICAgICAgICpyeGRlc2MgPSAmKHJ4ZnJtLT5kZXNjKTsKKwlVSU5UCQkJCWhkcmxlbiA9IDA7CisJVUlOVAkJCQlkYXRhbGVuID0gMDsKKwlVSU5UCQkJCXNrYmxlbiA9IDA7CisJcDgwMjExbXNnX2xueGluZF93bGFuc25pZmZybV90CSptc2c7CisJVUlOVDgJCQkJKmRhdGFwOworCVVJTlQxNgkJCQlmYzsKKwlzdHJ1Y3Qgc2tfYnVmZgkJCSpza2I7CisJaGZhMzg0eF90CQkgICAgICAgICpodyA9IHdsYW5kZXYtPnByaXY7CisKKworCURCRkVOVEVSOworCS8qIERvbid0IGZvcmdldCB0aGUgc3RhdHVzLCB0aW1lLCBhbmQgZGF0YV9sZW4gZmllbGRzIGFyZSBpbiBob3N0IG9yZGVyICovCisJLyogRmlndXJlIG91dCBob3cgYmlnIHRoZSBmcmFtZSBpcyAqLworCWZjID0gaWVlZTJob3N0MTYocnhkZXNjLT5mcmFtZV9jb250cm9sKTsKKwloZHJsZW4gPSBwODAyMTFfaGVhZGVybGVuKGZjKTsKKwlkYXRhbGVuID0gaGZhMzg0eDJob3N0XzE2KHJ4ZGVzYy0+ZGF0YV9sZW4pOworCisJLyogQWxsb2NhdGUgYW4gaW5kIG1lc3NhZ2UrZnJhbWVzaXplIHNrYiAqLworCXNrYmxlbiA9IHNpemVvZihwODAyMTFtc2dfbG54aW5kX3dsYW5zbmlmZnJtX3QpICsKKwkJaGRybGVuICsgZGF0YWxlbiArIFdMQU5fQ1JDX0xFTjsKKworCS8qIHNhbml0eSBjaGVjayB0aGUgbGVuZ3RoICovCisJaWYgKCBza2JsZW4gPgorCQkoc2l6ZW9mKHA4MDIxMW1zZ19sbnhpbmRfd2xhbnNuaWZmcm1fdCkgKworCQlXTEFOX0hEUl9BNF9MRU4gKyBXTEFOX0RBVEFfTUFYTEVOICsgV0xBTl9DUkNfTEVOKSApIHsKKwkJV0xBTl9MT0dfREVCVUcoMSwgIm92ZXJsZW4gZnJtOiBsZW49JXpkXG4iLAorCQkJc2tibGVuIC0gc2l6ZW9mKHA4MDIxMW1zZ19sbnhpbmRfd2xhbnNuaWZmcm1fdCkpOworCX0KKworCWlmICggKHNrYiA9IGRldl9hbGxvY19za2Ioc2tibGVuKSkgPT0gTlVMTCApIHsKKwkJV0xBTl9MT0dfRVJST1IoImFsbG9jX3NrYiBmYWlsZWQgdHJ5aW5nIHRvIGFsbG9jYXRlICVkIGJ5dGVzXG4iLCBza2JsZW4pOworCQlyZXR1cm47CisJfQorCisJLyogb25seSBwcmVwZW5kIHRoZSBwcmlzbSBoZWFkZXIgaWYgaW4gdGhlIHJpZ2h0IG1vZGUgKi8KKwlpZiAoKHdsYW5kZXYtPm5ldGRldi0+dHlwZSA9PSBBUlBIUkRfSUVFRTgwMjExX1BSSVNNKSAmJgorCSAgICAoaHctPnNuaWZmaGRyID09IDApKSB7CisJCWRhdGFwID0gc2tiX3B1dChza2IsIHNpemVvZihwODAyMTFtc2dfbG54aW5kX3dsYW5zbmlmZnJtX3QpKTsKKwkJbXNnID0gKHA4MDIxMW1zZ19sbnhpbmRfd2xhbnNuaWZmcm1fdCopIGRhdGFwOworCisJCS8qIEluaXRpYWxpemUgdGhlIG1lc3NhZ2UgbWVtYmVycyAqLworCQltc2ctPm1zZ2NvZGUgPSBESURtc2dfbG54aW5kX3dsYW5zbmlmZnJtOworCQltc2ctPm1zZ2xlbiA9IHNpemVvZihwODAyMTFtc2dfbG54aW5kX3dsYW5zbmlmZnJtX3QpOworCQlzdHJjcHkobXNnLT5kZXZuYW1lLCB3bGFuZGV2LT5uYW1lKTsKKworCQltc2ctPmhvc3R0aW1lLmRpZCA9IERJRG1zZ19sbnhpbmRfd2xhbnNuaWZmcm1faG9zdHRpbWU7CisJCW1zZy0+aG9zdHRpbWUuc3RhdHVzID0gMDsKKwkJbXNnLT5ob3N0dGltZS5sZW4gPSA0OworCQltc2ctPmhvc3R0aW1lLmRhdGEgPSBqaWZmaWVzOworCisJCW1zZy0+bWFjdGltZS5kaWQgPSBESURtc2dfbG54aW5kX3dsYW5zbmlmZnJtX21hY3RpbWU7CisJCW1zZy0+bWFjdGltZS5zdGF0dXMgPSAwOworCQltc2ctPm1hY3RpbWUubGVuID0gNDsKKwkJbXNnLT5tYWN0aW1lLmRhdGEgPSByeGRlc2MtPnRpbWU7CisKKwkJbXNnLT5jaGFubmVsLmRpZCA9IERJRG1zZ19sbnhpbmRfd2xhbnNuaWZmcm1fY2hhbm5lbDsKKwkJbXNnLT5jaGFubmVsLnN0YXR1cyA9IDA7CisJCW1zZy0+Y2hhbm5lbC5sZW4gPSA0OworCQltc2ctPmNoYW5uZWwuZGF0YSA9IGh3LT5zbmlmZl9jaGFubmVsOworCisJCW1zZy0+cnNzaS5kaWQgPSBESURtc2dfbG54aW5kX3dsYW5zbmlmZnJtX3Jzc2k7CisJCW1zZy0+cnNzaS5zdGF0dXMgPSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX25vX3ZhbHVlOworCQltc2ctPnJzc2kubGVuID0gNDsKKwkJbXNnLT5yc3NpLmRhdGEgPSAwOworCisJCW1zZy0+c3EuZGlkID0gRElEbXNnX2xueGluZF93bGFuc25pZmZybV9zcTsKKwkJbXNnLT5zcS5zdGF0dXMgPSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX25vX3ZhbHVlOworCQltc2ctPnNxLmxlbiA9IDQ7CisJCW1zZy0+c3EuZGF0YSA9IDA7CisKKwkJbXNnLT5zaWduYWwuZGlkID0gRElEbXNnX2xueGluZF93bGFuc25pZmZybV9zaWduYWw7CisJCW1zZy0+c2lnbmFsLnN0YXR1cyA9IDA7CisJCW1zZy0+c2lnbmFsLmxlbiA9IDQ7CisJCW1zZy0+c2lnbmFsLmRhdGEgPSByeGRlc2MtPnNpZ25hbDsKKworCQltc2ctPm5vaXNlLmRpZCA9IERJRG1zZ19sbnhpbmRfd2xhbnNuaWZmcm1fbm9pc2U7CisJCW1zZy0+bm9pc2Uuc3RhdHVzID0gMDsKKwkJbXNnLT5ub2lzZS5sZW4gPSA0OworCQltc2ctPm5vaXNlLmRhdGEgPSByeGRlc2MtPnNpbGVuY2U7CisKKwkJbXNnLT5yYXRlLmRpZCA9IERJRG1zZ19sbnhpbmRfd2xhbnNuaWZmcm1fcmF0ZTsKKwkJbXNnLT5yYXRlLnN0YXR1cyA9IDA7CisJCW1zZy0+cmF0ZS5sZW4gPSA0OworCQltc2ctPnJhdGUuZGF0YSA9IHJ4ZGVzYy0+cmF0ZSAvIDU7IC8qIHNldCB0byA4MDIuMTEgdW5pdHMgKi8KKworCQltc2ctPmlzdHguZGlkID0gRElEbXNnX2xueGluZF93bGFuc25pZmZybV9pc3R4OworCQltc2ctPmlzdHguc3RhdHVzID0gMDsKKwkJbXNnLT5pc3R4LmxlbiA9IDQ7CisJCW1zZy0+aXN0eC5kYXRhID0gUDgwMjExRU5VTV90cnV0aF9mYWxzZTsKKworCQltc2ctPmZybWxlbi5kaWQgPSBESURtc2dfbG54aW5kX3dsYW5zbmlmZnJtX2ZybWxlbjsKKwkJbXNnLT5mcm1sZW4uc3RhdHVzID0gMDsKKwkJbXNnLT5mcm1sZW4ubGVuID0gNDsKKwkJbXNnLT5mcm1sZW4uZGF0YSA9IGhkcmxlbiArIGRhdGFsZW4gKyBXTEFOX0NSQ19MRU47CisJfSBlbHNlIGlmICgod2xhbmRldi0+bmV0ZGV2LT50eXBlID09IEFSUEhSRF9JRUVFODAyMTFfUFJJU00pICYmCisJCSAgIChody0+c25pZmZoZHIgIT0gMCkpIHsKKwkJcDgwMjExX2NhcGhkcl90CQkqY2FwaGRyOworCQkvKiBUaGUgTkVXIGhlYWRlciBmb3JtYXQhICovCisJCWRhdGFwID0gc2tiX3B1dChza2IsIHNpemVvZihwODAyMTFfY2FwaGRyX3QpKTsKKwkJY2FwaGRyID0gKHA4MDIxMV9jYXBoZHJfdCopIGRhdGFwOworCisJCWNhcGhkci0+dmVyc2lvbiA9CWh0b25sKFA4MDIxMUNBUFRVUkVfVkVSU0lPTik7CisJCWNhcGhkci0+bGVuZ3RoID0JaHRvbmwoc2l6ZW9mKHA4MDIxMV9jYXBoZHJfdCkpOworCQljYXBoZHItPm1hY3RpbWUgPQlfX2NwdV90b19iZTY0KHJ4ZGVzYy0+dGltZSkgKiAxMDAwOworCQljYXBoZHItPmhvc3R0aW1lID0JX19jcHVfdG9fYmU2NChqaWZmaWVzKTsKKwkJY2FwaGRyLT5waHl0eXBlID0JaHRvbmwoNCk7IC8qIGRzc19kb3QxMV9iICovCisJCWNhcGhkci0+Y2hhbm5lbCA9CWh0b25sKGh3LT5zbmlmZl9jaGFubmVsKTsKKwkJY2FwaGRyLT5kYXRhcmF0ZSA9CWh0b25sKHJ4ZGVzYy0+cmF0ZSk7CisJCWNhcGhkci0+YW50ZW5uYSA9CWh0b25sKDApOyAvKiB1bmtub3duICovCisJCWNhcGhkci0+cHJpb3JpdHkgPQlodG9ubCgwKTsgLyogdW5rbm93biAqLworCQljYXBoZHItPnNzaV90eXBlID0JaHRvbmwoMyk7IC8qIHJzc2lfcmF3ICovCisJCWNhcGhkci0+c3NpX3NpZ25hbCA9CWh0b25sKHJ4ZGVzYy0+c2lnbmFsKTsKKwkJY2FwaGRyLT5zc2lfbm9pc2UgPQlodG9ubChyeGRlc2MtPnNpbGVuY2UpOworCQljYXBoZHItPnByZWFtYmxlID0JaHRvbmwoMCk7IC8qIHVua25vd24gKi8KKwkJY2FwaGRyLT5lbmNvZGluZyA9CWh0b25sKDEpOyAvKiBjY2sgKi8KKwl9CisKKwkvKiBDb3B5IHRoZSA4MDIuMTEgaGVhZGVyIHRvIHRoZSBza2IgKGN0bCBmcmFtZXMgbWF5IGJlIGxlc3MgdGhhbiBhIGZ1bGwgaGVhZGVyKSAqLworCWRhdGFwID0gc2tiX3B1dChza2IsIGhkcmxlbik7CisJbWVtY3B5KCBkYXRhcCwgJihyeGRlc2MtPmZyYW1lX2NvbnRyb2wpLCBoZHJsZW4pOworCisJLyogSWYgYW55LCBjb3B5IHRoZSBkYXRhIGZyb20gdGhlIGNhcmQgdG8gdGhlIHNrYiAqLworCWlmICggZGF0YWxlbiA+IDAgKQorCXsKKwkJZGF0YXAgPSBza2JfcHV0KHNrYiwgZGF0YWxlbik7CisJCW1lbWNweShkYXRhcCwgcnhmcm0tPmRhdGEsIGRhdGFsZW4pOworCisJCS8qIGNoZWNrIGZvciB1bmVuY3J5cHRlZCBzdHVmZiBpZiBXRVAgYml0IHNldC4gKi8KKwkJaWYgKCooZGF0YXAgLSBoZHJsZW4gKyAxKSAmIDB4NDApIC8vIHdlcCBzZXQKKwkJICBpZiAoKCooZGF0YXApID09IDB4YWEpICYmICgqKGRhdGFwKzEpID09IDB4YWEpKQorCQkgICAgKihkYXRhcCAtIGhkcmxlbiArIDEpICY9IDB4YmY7IC8vIGNsZWFyIHdlcDsgaXQncyB0aGUgODAyLjIgaGVhZGVyIQorCX0KKworCWlmIChody0+c25pZmZfZmNzKSB7CisJCS8qIFNldCB0aGUgRkNTICovCisJCWRhdGFwID0gc2tiX3B1dChza2IsIFdMQU5fQ1JDX0xFTik7CisJCW1lbXNldCggZGF0YXAsIDB4ZmYsIFdMQU5fQ1JDX0xFTik7CisJfQorCisJLyogcGFzcyBpdCBiYWNrIHVwICovCisJcHJpc20yc3RhX2V2X3J4KHdsYW5kZXYsIHNrYik7CisKKwlEQkZFWElUOworCXJldHVybjsKK30KKworCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBoZmEzODR4X3VzYmluX2luZm8KKyoKKyogQXQgdGhpcyBwb2ludCB3ZSBoYXZlIGEgc3VjY2Vzc2Z1bCByZWNlaXZlZCBhIFByaXNtMiBpbmZvIGZyYW1lLgorKgorKiBBcmd1bWVudHM6CisqCXdsYW5kZXYJCXdsYW4gZGV2aWNlCisqCXVzYmluCQlwdHIgdG8gdGhlIHVzYiB0cmFuc2ZlciBidWZmZXIKKyoKKyogUmV0dXJuczoKKyoJbm90aGluZworKgorKiBTaWRlIGVmZmVjdHM6CisqCisqIENhbGwgY29udGV4dDoKKyoJaW50ZXJydXB0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyB2b2lkIGhmYTM4NHhfdXNiaW5faW5mbyh3bGFuZGV2aWNlX3QgKndsYW5kZXYsIGhmYTM4NHhfdXNiaW5fdCAqdXNiaW4pCit7CisJREJGRU5URVI7CisKKwl1c2Jpbi0+aW5mb2ZybS5pbmZvLmZyYW1lbGVuID0gaGZhMzg0eDJob3N0XzE2KHVzYmluLT5pbmZvZnJtLmluZm8uZnJhbWVsZW4pOworCXByaXNtMnN0YV9ldl9pbmZvKHdsYW5kZXYsICZ1c2Jpbi0+aW5mb2ZybS5pbmZvKTsKKworCURCRkVYSVQ7Cit9CisKKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogaGZhMzg0eF91c2JvdXRfY2FsbGJhY2sKKyoKKyogQ2FsbGJhY2sgZm9yIFVSQnMgb24gdGhlIEJVTEtPVVQgZW5kcG9pbnQuCisqCisqIEFyZ3VtZW50czoKKyoJdXJiCQlwdHIgdG8gdGhlIGNvbXBsZXRlZCB1cmIKKyoKKyogUmV0dXJuczoKKyoJbm90aGluZworKgorKiBTaWRlIGVmZmVjdHM6CisqCisqIENhbGwgY29udGV4dDoKKyoJaW50ZXJydXB0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNpZmRlZiBVUkJfT05MWV9DQUxMQkFDSworc3RhdGljIHZvaWQgaGZhMzg0eF91c2JvdXRfY2FsbGJhY2soc3RydWN0IHVyYiAqdXJiKQorI2Vsc2UKK3N0YXRpYyB2b2lkIGhmYTM4NHhfdXNib3V0X2NhbGxiYWNrKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCisjZW5kaWYKK3sKKwl3bGFuZGV2aWNlX3QJCSp3bGFuZGV2ID0gdXJiLT5jb250ZXh0OworCWhmYTM4NHhfdXNib3V0X3QJKnVzYm91dCA9IHVyYi0+dHJhbnNmZXJfYnVmZmVyOworCURCRkVOVEVSOworCisjaWZkZWYgREVCVUdfVVNCCisJZGJwcmludF91cmIodXJiKTsKKyNlbmRpZgorCisJaWYgKCB3bGFuZGV2ICYmCisJICAgICB3bGFuZGV2LT5uZXRkZXYgKSB7CisKKwkJc3dpdGNoKHVyYi0+c3RhdHVzKSB7CisJCWNhc2UgMDoKKwkJCWhmYTM4NHhfdXNib3V0X3R4KHdsYW5kZXYsIHVzYm91dCk7CisJCQlicmVhazsKKworCQljYXNlIC1FUElQRToKKwkJeworCQkJaGZhMzg0eF90ICpodyA9IHdsYW5kZXYtPnByaXY7CisJCQlXTEFOX0xPR19XQVJOSU5HKCIlcyB0eCBwaXBlIHN0YWxsZWQ6IHJlcXVlc3RpbmcgcmVzZXRcbiIsCisJCQkgICAgICAgICAgICAgICAgIHdsYW5kZXYtPm5ldGRldi0+bmFtZSk7CisJCQlpZiAoICF0ZXN0X2FuZF9zZXRfYml0KFdPUktfVFhfSEFMVCwgJmh3LT51c2JfZmxhZ3MpICkKKwkJCQlzY2hlZHVsZV93b3JrKCZody0+dXNiX3dvcmspOworCQkJKysod2xhbmRldi0+bGludXhfc3RhdHMudHhfZXJyb3JzKTsKKwkJCWJyZWFrOworCQl9CisKKwkJY2FzZSAtRVBST1RPOgorCQljYXNlIC1FVElNRURPVVQ6CisJCWNhc2UgLUVJTFNFUToKKwkJeworCQkJaGZhMzg0eF90ICpodyA9IHdsYW5kZXYtPnByaXY7CisKKwkJCWlmICggIXRlc3RfYW5kX3NldF9iaXQoVEhST1RUTEVfVFgsICZody0+dXNiX2ZsYWdzKQorCQkJICAgICAmJiAhdGltZXJfcGVuZGluZygmaHctPnRocm90dGxlKSApIHsKKwkJCQltb2RfdGltZXIoJmh3LT50aHJvdHRsZSwKKwkJCQkgICAgICAgICAgamlmZmllcyArIFRIUk9UVExFX0pJRkZJRVMpOworCQkJfQorCQkJKysod2xhbmRldi0+bGludXhfc3RhdHMudHhfZXJyb3JzKTsKKwkJCW5ldGlmX3N0b3BfcXVldWUod2xhbmRldi0+bmV0ZGV2KTsKKwkJCWJyZWFrOworCQl9CisKKwkJY2FzZSAtRU5PRU5UOgorCQljYXNlIC1FU0hVVERPV046CisJCQkvKiBJZ25vcmFibGUgZXJyb3JzICovCisJCQlicmVhazsKKworCQlkZWZhdWx0OgorCQkJV0xBTl9MT0dfSU5GTygidW5rbm93biB1cmItPnN0YXR1cz0lZFxuIiwgdXJiLT5zdGF0dXMpOworCQkJKysod2xhbmRldi0+bGludXhfc3RhdHMudHhfZXJyb3JzKTsKKwkJCWJyZWFrOworCQl9IC8qIHN3aXRjaCAqLworCX0KKworCURCRkVYSVQ7Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIGhmYTM4NHhfY3RseG91dF9jYWxsYmFjaworKgorKiBDYWxsYmFjayBmb3IgY29udHJvbCBkYXRhIG9uIHRoZSBCVUxLT1VUIGVuZHBvaW50LgorKgorKiBBcmd1bWVudHM6CisqCXVyYgkJcHRyIHRvIHRoZSBjb21wbGV0ZWQgdXJiCisqCisqIFJldHVybnM6CisqIG5vdGhpbmcKKyoKKyogU2lkZSBlZmZlY3RzOgorKgorKiBDYWxsIGNvbnRleHQ6CisqIGludGVycnVwdAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjaWZkZWYgVVJCX09OTFlfQ0FMTEJBQ0sKK3N0YXRpYyB2b2lkIGhmYTM4NHhfY3RseG91dF9jYWxsYmFjayhzdHJ1Y3QgdXJiICp1cmIpCisjZWxzZQorc3RhdGljIHZvaWQgaGZhMzg0eF9jdGx4b3V0X2NhbGxiYWNrKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCisjZW5kaWYKK3sKKwloZmEzODR4X3QJKmh3ID0gdXJiLT5jb250ZXh0OworCWludCAgICAgICAgICAgICBkZWxldGVfcmVzcHRpbWVyID0gMDsKKwlpbnQgICAgICAgICAgICAgdGltZXJfb2sgPSAxOworCWludAkJcnVuX3F1ZXVlID0gMDsKKwloZmEzODR4X3VzYmN0bHhfdAkqY3RseDsKKwl1bnNpZ25lZCBsb25nCWZsYWdzOworCisJREJGRU5URVI7CisKKwlXTEFOX0xPR19ERUJVRygzLCJ1cmItPnN0YXR1cz0lZFxuIiwgdXJiLT5zdGF0dXMpOworI2lmZGVmIERFQlVHX1VTQgorCWRicHJpbnRfdXJiKHVyYik7CisjZW5kaWYKKwlpZiAoICh1cmItPnN0YXR1cyA9PSAtRVNIVVRET1dOKSB8fAorCSAgICAgKHVyYi0+c3RhdHVzID09IC1FTk9ERVYpIHx8CisJICAgICAoaHcgPT0gTlVMTCkgKQorCQlnb3RvIGRvbmU7CisKK3JldHJ5OgorCXNwaW5fbG9ja19pcnFzYXZlKCZody0+Y3RseHEubG9jaywgZmxhZ3MpOworCisJLyoKKwkgKiBPbmx5IG9uZSBDVExYIGF0IGEgdGltZSBvbiB0aGUgImFjdGl2ZSIgbGlzdCwgYW5kCisJICogbm9uZSBhdCBhbGwgaWYgd2UgYXJlIHVucGx1Z2dlZC4gSG93ZXZlciwgd2UgY2FuCisJICogcmVseSBvbiB0aGUgZGlzY29ubmVjdCBmdW5jdGlvbiB0byBjbGVhbiBldmVyeXRoaW5nCisJICogdXAgaWYgc29tZW9uZSB1bnBsdWdnZWQgdGhlIGFkYXB0ZXIuCisJICovCisJaWYgKCBsaXN0X2VtcHR5KCZody0+Y3RseHEuYWN0aXZlKSApIHsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaHctPmN0bHhxLmxvY2ssIGZsYWdzKTsKKwkJZ290byBkb25lOworCX0KKworCS8qCisJICogSGF2aW5nIHNvbWV0aGluZyBvbiB0aGUgImFjdGl2ZSIgcXVldWUgbWVhbnMKKwkgKiB0aGF0IHdlIGhhdmUgdGltZXJzIHRvIHdvcnJ5IGFib3V0IC4uLgorCSAqLworCWlmIChkZWxfdGltZXIoJmh3LT5yZXF0aW1lcikgPT0gMCkgeworCQlpZiAoaHctPnJlcV90aW1lcl9kb25lID09IDApIHsKKwkJCS8qCisJCQkgKiBUaGlzIHRpbWVyIHdhcyBhY3R1YWxseSBydW5uaW5nIHdoaWxlIHdlCisJCQkgKiB3ZXJlIHRyeWluZyB0byBkZWxldGUgaXQuIExldCBpdCB0ZXJtaW5hdGUKKwkJCSAqIGdyYWNlZnVsbHkgaW5zdGVhZC4KKwkJCSAqLworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaHctPmN0bHhxLmxvY2ssIGZsYWdzKTsKKwkJCWdvdG8gcmV0cnk7CisJCX0KKwl9CisJZWxzZSB7CisJCWh3LT5yZXFfdGltZXJfZG9uZSA9IDE7CisJfQorCisJY3RseCA9IGdldF9hY3RpdmVfY3RseChodyk7CisKKwlpZiAoIHVyYi0+c3RhdHVzID09IDAgKSB7CisJCS8qIFJlcXVlc3QgcG9ydGlvbiBvZiBhIENUTFggaXMgc3VjY2Vzc2Z1bCAqLworCQlzd2l0Y2ggKCBjdGx4LT5zdGF0ZSApIHsKKwkJY2FzZSBDVExYX1JFUV9TVUJNSVRURUQ6CisJCQkvKiBUaGlzIE9VVC1BQ0sgcmVjZWl2ZWQgYmVmb3JlIElOICovCisJCQljdGx4LT5zdGF0ZSA9IENUTFhfUkVRX0NPTVBMRVRFOworCQkJYnJlYWs7CisKKwkJY2FzZSBDVExYX1JFU1BfQ09NUExFVEU6CisJCQkvKiBJTiBhbHJlYWR5IHJlY2VpdmVkIGJlZm9yZSB0aGlzIE9VVC1BQ0ssCisJCQkgKiBzbyB0aGlzIGNvbW1hbmQgbXVzdCBub3cgYmUgY29tcGxldGUuCisJCQkgKi8KKwkJCWN0bHgtPnN0YXRlID0gQ1RMWF9DT01QTEVURTsKKwkJCXVubG9ja2VkX3VzYmN0bHhfY29tcGxldGUoaHcsIGN0bHgpOworCQkJcnVuX3F1ZXVlID0gMTsKKwkJCWJyZWFrOworCisJCWRlZmF1bHQ6CisJCQkvKiBUaGlzIGlzIE5PVCBhIHZhbGlkIENUTFggInN1Y2Nlc3MiIHN0YXRlISAqLworCQkJV0xBTl9MT0dfRVJST1IoCisJCQkgICAgIklsbGVnYWwgQ1RMWFslZF0gc3VjY2VzcyBzdGF0ZSglcywgJWQpIGluIE9VVCBVUkJcbiIsCisJCQkgICAgaGZhMzg0eDJob3N0XzE2KGN0bHgtPm91dGJ1Zi50eXBlKSwKKwkJCSAgICBjdGx4c3RyKGN0bHgtPnN0YXRlKSwgdXJiLT5zdGF0dXMpOworCQkJYnJlYWs7CisJCX0gLyogc3dpdGNoICovCisJfSBlbHNlIHsKKwkJLyogSWYgdGhlIHBpcGUgaGFzIHN0YWxsZWQgdGhlbiB3ZSBuZWVkIHRvIHJlc2V0IGl0ICovCisJCWlmICggKHVyYi0+c3RhdHVzID09IC1FUElQRSkgJiYKKwkJICAgICAgIXRlc3RfYW5kX3NldF9iaXQoV09SS19UWF9IQUxULCAmaHctPnVzYl9mbGFncykgKSB7CisJCQlXTEFOX0xPR19XQVJOSU5HKCIlcyB0eCBwaXBlIHN0YWxsZWQ6IHJlcXVlc3RpbmcgcmVzZXRcbiIsCisJCQkgICAgICAgICAgICAgICAgIGh3LT53bGFuZGV2LT5uZXRkZXYtPm5hbWUpOworCQkJc2NoZWR1bGVfd29yaygmaHctPnVzYl93b3JrKTsKKwkJfQorCisJCS8qIElmIHNvbWVvbmUgY2FuY2VscyB0aGUgT1VUIFVSQiB0aGVuIGl0cyBzdGF0dXMKKwkJICogc2hvdWxkIGJlIGVpdGhlciAtRUNPTk5SRVNFVCBvciAtRU5PRU5ULgorCQkgKi8KKwkJY3RseC0+c3RhdGUgPSBDVExYX1JFUV9GQUlMRUQ7CisJCXVubG9ja2VkX3VzYmN0bHhfY29tcGxldGUoaHcsIGN0bHgpOworCQlkZWxldGVfcmVzcHRpbWVyID0gMTsKKwkJcnVuX3F1ZXVlID0gMTsKKwl9CisKKyBkZWxyZXNwOgorCWlmIChkZWxldGVfcmVzcHRpbWVyKSB7CisJCWlmICgodGltZXJfb2sgPSBkZWxfdGltZXIoJmh3LT5yZXNwdGltZXIpKSAhPSAwKSB7CisJCQlody0+cmVzcF90aW1lcl9kb25lID0gMTsKKwkJfQorCX0KKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmh3LT5jdGx4cS5sb2NrLCBmbGFncyk7CisKKwlpZiAoICF0aW1lcl9vayAmJiAoaHctPnJlc3BfdGltZXJfZG9uZSA9PSAwKSApIHsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmh3LT5jdGx4cS5sb2NrLCBmbGFncyk7CisJCWdvdG8gZGVscmVzcDsKKwl9CisKKwlpZiAocnVuX3F1ZXVlKQorCQloZmEzODR4X3VzYmN0bHhxX3J1bihodyk7CisKKyBkb25lOgorCURCRkVYSVQ7Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIGhmYTM4NHhfdXNiY3RseF9yZXF0aW1lcmZuCisqCisqIFRpbWVyIHJlc3BvbnNlIGZ1bmN0aW9uIGZvciBDVExYIHJlcXVlc3QgdGltZW91dHMuICBJZiB0aGlzCisqIGZ1bmN0aW9uIGlzIGNhbGxlZCwgaXQgbWVhbnMgdGhhdCB0aGUgY2FsbGJhY2sgZm9yIHRoZSBPVVQKKyogVVJCIGNvbnRhaW5pbmcgYSBQcmlzbTIueCBYWFhfUmVxdWVzdCB3YXMgbmV2ZXIgY2FsbGVkLgorKgorKiBBcmd1bWVudHM6CisqCWRhdGEJCWEgcHRyIHRvIHRoZSBoZmEzODR4X3QKKyoKKyogUmV0dXJuczoKKyoJbm90aGluZworKgorKiBTaWRlIGVmZmVjdHM6CisqCisqIENhbGwgY29udGV4dDoKKyoJaW50ZXJydXB0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyB2b2lkCitoZmEzODR4X3VzYmN0bHhfcmVxdGltZXJmbih1bnNpZ25lZCBsb25nIGRhdGEpCit7CisJaGZhMzg0eF90CSpodyA9IChoZmEzODR4X3QqKWRhdGE7CisJdW5zaWduZWQgbG9uZyAgIGZsYWdzOworCURCRkVOVEVSOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmh3LT5jdGx4cS5sb2NrLCBmbGFncyk7CisKKwlody0+cmVxX3RpbWVyX2RvbmUgPSAxOworCisJLyogUmVtb3ZpbmcgdGhlIGhhcmR3YXJlIGF1dG9tYXRpY2FsbHkgZW1wdGllcworCSAqIHRoZSBhY3RpdmUgbGlzdCAuLi4KKwkgKi8KKwlpZiAoICFsaXN0X2VtcHR5KCZody0+Y3RseHEuYWN0aXZlKSApCisJeworCQkvKgorCQkgKiBXZSBtdXN0IGVuc3VyZSB0aGF0IG91ciBVUkIgaXMgcmVtb3ZlZCBmcm9tCisJCSAqIHRoZSBzeXN0ZW0sIGlmIGl0IGhhc24ndCBhbHJlYWR5IGV4cGlyZWQuCisJCSAqLworCQlody0+Y3RseF91cmIudHJhbnNmZXJfZmxhZ3MgfD0gVVJCX0FTWU5DX1VOTElOSzsKKwkJaWYgKHVzYl91bmxpbmtfdXJiKCZody0+Y3RseF91cmIpID09IC1FSU5QUk9HUkVTUykKKwkJeworCQkJaGZhMzg0eF91c2JjdGx4X3QgKmN0bHggPSBnZXRfYWN0aXZlX2N0bHgoaHcpOworCisJCQljdGx4LT5zdGF0ZSA9IENUTFhfUkVRX0ZBSUxFRDsKKworCQkJLyogVGhpcyBVUkIgd2FzIGFjdGl2ZSwgYnV0IGhhcyBub3cgYmVlbgorCQkJICogY2FuY2VsbGVkLiBJdCB3aWxsIG5vdyBoYXZlIGEgc3RhdHVzIG9mCisJCQkgKiAtRUNPTk5SRVNFVCBpbiB0aGUgY2FsbGJhY2sgZnVuY3Rpb24uCisJCQkgKgorCQkJICogV2UgYXJlIGNhbmNlbGxpbmcgdGhpcyBDVExYLCBzbyB3ZSdyZQorCQkJICogbm90IGdvaW5nIHRvIG5lZWQgdG8gd2FpdCBmb3IgYSByZXNwb25zZS4KKwkJCSAqIFRoZSBVUkIncyBjYWxsYmFjayBmdW5jdGlvbiB3aWxsIGNoZWNrCisJCQkgKiB0aGF0IHRoaXMgdGltZXIgaXMgdHJ1bHkgZGVhZC4KKwkJCSAqLworCQkJaWYgKGRlbF90aW1lcigmaHctPnJlc3B0aW1lcikgIT0gMCkKKwkJCQlody0+cmVzcF90aW1lcl9kb25lID0gMTsKKwkJfQorCX0KKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmh3LT5jdGx4cS5sb2NrLCBmbGFncyk7CisKKwlEQkZFWElUOworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBoZmEzODR4X3VzYmN0bHhfcmVzcHRpbWVyZm4KKyoKKyogVGltZXIgcmVzcG9uc2UgZnVuY3Rpb24gZm9yIENUTFggcmVzcG9uc2UgdGltZW91dHMuICBJZiB0aGlzCisqIGZ1bmN0aW9uIGlzIGNhbGxlZCwgaXQgbWVhbnMgdGhhdCB0aGUgY2FsbGJhY2sgZm9yIHRoZSBJTgorKiBVUkIgY29udGFpbmluZyBhIFByaXNtMi54IFhYWF9SZXNwb25zZSB3YXMgbmV2ZXIgY2FsbGVkLgorKgorKiBBcmd1bWVudHM6CisqCWRhdGEJCWEgcHRyIHRvIHRoZSBoZmEzODR4X3QKKyoKKyogUmV0dXJuczoKKyoJbm90aGluZworKgorKiBTaWRlIGVmZmVjdHM6CisqCisqIENhbGwgY29udGV4dDoKKyoJaW50ZXJydXB0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyB2b2lkCitoZmEzODR4X3VzYmN0bHhfcmVzcHRpbWVyZm4odW5zaWduZWQgbG9uZyBkYXRhKQoreworCWhmYTM4NHhfdCAqaHcgPSAoaGZhMzg0eF90KilkYXRhOworCXVuc2lnbmVkIGxvbmcgICBmbGFnczsKKworCURCRkVOVEVSOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmh3LT5jdGx4cS5sb2NrLCBmbGFncyk7CisKKwlody0+cmVzcF90aW1lcl9kb25lID0gMTsKKworCS8qIFRoZSBhY3RpdmUgbGlzdCB3aWxsIGJlIGVtcHR5IGlmIHRoZQorCSAqIGFkYXB0ZXIgaGFzIGJlZW4gdW5wbHVnZ2VkIC4uLgorCSAqLworCWlmICggIWxpc3RfZW1wdHkoJmh3LT5jdGx4cS5hY3RpdmUpICkKKwl7CisJCWhmYTM4NHhfdXNiY3RseF90ICpjdGx4ID0gZ2V0X2FjdGl2ZV9jdGx4KGh3KTsKKworCQlpZiAoIHVubG9ja2VkX3VzYmN0bHhfY2FuY2VsX2FzeW5jKGh3LCBjdGx4KSA9PSAwICkKKwkJeworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaHctPmN0bHhxLmxvY2ssIGZsYWdzKTsKKwkJCWhmYTM4NHhfdXNiY3RseHFfcnVuKGh3KTsKKwkJCWdvdG8gZG9uZTsKKwkJfQorCX0KKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmh3LT5jdGx4cS5sb2NrLCBmbGFncyk7CisKKyBkb25lOgorCURCRkVYSVQ7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBoZmEzODR4X3VzYl90aHJvdHRsZWZuCisqCisqCisqIEFyZ3VtZW50czoKKyoJZGF0YQlwdHIgdG8gaHcKKyoKKyogUmV0dXJuczoKKyoJTm90aGluZworKgorKiBTaWRlIGVmZmVjdHM6CisqCisqIENhbGwgY29udGV4dDoKKyoJSW50ZXJydXB0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyB2b2lkCitoZmEzODR4X3VzYl90aHJvdHRsZWZuKHVuc2lnbmVkIGxvbmcgZGF0YSkKK3sKKwloZmEzODR4X3QgKmh3ID0gKGhmYTM4NHhfdCopZGF0YTsKKwl1bnNpZ25lZCBsb25nICAgZmxhZ3M7CisKKwlEQkZFTlRFUjsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZody0+Y3RseHEubG9jaywgZmxhZ3MpOworCisJLyoKKwkgKiBXZSBuZWVkIHRvIGNoZWNrIEJPVEggdGhlIFJYIGFuZCB0aGUgVFggdGhyb3R0bGUgY29udHJvbHMsCisJICogc28gd2UgdXNlIHRoZSBiaXR3aXNlIE9SIGluc3RlYWQgb2YgdGhlIGxvZ2ljYWwgT1IuCisJICovCisJV0xBTl9MT0dfREVCVUcoMywgImZsYWdzPTB4JWx4XG4iLCBody0+dXNiX2ZsYWdzKTsKKwlpZiAoICFody0+d2xhbmRldi0+aHdyZW1vdmVkICYmCisJICAgICAoCisJICAgICAgICh0ZXN0X2FuZF9jbGVhcl9iaXQoVEhST1RUTEVfUlgsICZody0+dXNiX2ZsYWdzKSAmJgorCSAgICAgICAhdGVzdF9hbmRfc2V0X2JpdChXT1JLX1JYX1JFU1VNRSwgJmh3LT51c2JfZmxhZ3MpKQorCSAgICAgICB8CisJICAgICAgICh0ZXN0X2FuZF9jbGVhcl9iaXQoVEhST1RUTEVfVFgsICZody0+dXNiX2ZsYWdzKSAmJgorCSAgICAgICAgIXRlc3RfYW5kX3NldF9iaXQoV09SS19UWF9SRVNVTUUsICZody0+dXNiX2ZsYWdzKSkKKwkgICAgICkgKQorCXsKKwkJc2NoZWR1bGVfd29yaygmaHctPnVzYl93b3JrKTsKKwl9CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZody0+Y3RseHEubG9jaywgZmxhZ3MpOworCisJREJGRVhJVDsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogaGZhMzg0eF91c2JjdGx4X3N1Ym1pdAorKgorKiBDYWxsZWQgZnJvbSB0aGUgZG94eHggZnVuY3Rpb25zIHRvIHN1Ym1pdCBhIENUTFggdG8gdGhlIHF1ZXVlCisqCisqIEFyZ3VtZW50czoKKyoJaHcJCXB0ciB0byB0aGUgaHcgc3RydWN0CisqCWN0bHgJCWN0bHggc3RydWN0dXJlIHRvIGVucXVldWUKKyoKKyogUmV0dXJuczoKKyoJLUVOT0RFViBpZiB0aGUgYWRhcHRlciBpcyB1bnBsdWdnZWQKKyoJMAorKgorKiBTaWRlIGVmZmVjdHM6CisqCisqIENhbGwgY29udGV4dDoKKyoJcHJvY2VzcyBvciBpbnRlcnJ1cHQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIGludAoraGZhMzg0eF91c2JjdGx4X3N1Ym1pdCgKKwloZmEzODR4X3QJCSpodywKKwloZmEzODR4X3VzYmN0bHhfdAkqY3RseCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCByZXQ7CisKKwlEQkZFTlRFUjsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZody0+Y3RseHEubG9jaywgZmxhZ3MpOworCisJaWYgKGh3LT53bGFuZGV2LT5od3JlbW92ZWQpIHsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaHctPmN0bHhxLmxvY2ssIGZsYWdzKTsKKwkJcmV0ID0gLUVOT0RFVjsKKwl9IGVsc2UgeworCQljdGx4LT5zdGF0ZSA9IENUTFhfUEVORElORzsKKwkJbGlzdF9hZGRfdGFpbCgmY3RseC0+bGlzdCwgJmh3LT5jdGx4cS5wZW5kaW5nKTsKKworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZody0+Y3RseHEubG9jaywgZmxhZ3MpOworCQloZmEzODR4X3VzYmN0bHhxX3J1bihodyk7CisJCXJldCA9IDA7CisJfQorCisJREJGRVhJVDsKKwlyZXR1cm4gcmV0OworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBoZmEzODR4X3VzYm91dF90eAorKgorKiBBdCB0aGlzIHBvaW50IHdlIGhhdmUgZmluaXNoZWQgYSBzZW5kIG9mIGEgZnJhbWUuICBNYXJrIHRoZSBVUkIKKyogYXMgYXZhaWxhYmxlIGFuZCBjYWxsIGV2X2FsbG9jIHRvIG5vdGlmeSBoaWdoZXIgbGF5ZXJzIHdlJ3JlCisqIHJlYWR5IGZvciBtb3JlLgorKgorKiBBcmd1bWVudHM6CisqCXdsYW5kZXYJCXdsYW4gZGV2aWNlCisqCXVzYm91dAkJcHRyIHRvIHRoZSB1c2IgdHJhbnNmZXIgYnVmZmVyCisqCisqIFJldHVybnM6CisqCW5vdGhpbmcKKyoKKyogU2lkZSBlZmZlY3RzOgorKgorKiBDYWxsIGNvbnRleHQ6CisqCWludGVycnVwdAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgdm9pZCBoZmEzODR4X3VzYm91dF90eCh3bGFuZGV2aWNlX3QgKndsYW5kZXYsIGhmYTM4NHhfdXNib3V0X3QgKnVzYm91dCkKK3sKKwlEQkZFTlRFUjsKKworCXByaXNtMnN0YV9ldl9hbGxvYyh3bGFuZGV2KTsKKworCURCRkVYSVQ7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBoZmEzODR4X2lzZ29vZF9wZHJjb3JlCisqCisqIFF1aWNrIGNoZWNrIG9mIFBEUiBjb2Rlcy4KKyoKKyogQXJndW1lbnRzOgorKglwZHJjb2RlCQlQRFIgY29kZSBudW1iZXIgKGhvc3Qgb3JkZXIpCisqCisqIFJldHVybnM6CisqCXplcm8JCW5vdCBnb29kLgorKglvbmUJCWlzIGdvb2QuCisqCisqIFNpZGUgZWZmZWN0czoKKyoKKyogQ2FsbCBjb250ZXh0OgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgaW50CitoZmEzODR4X2lzZ29vZF9wZHJjb2RlKFVJTlQxNiBwZHJjb2RlKQoreworCXN3aXRjaChwZHJjb2RlKSB7CisJY2FzZSBIRkEzODR4X1BEUl9FTkRfT0ZfUERBOgorCWNhc2UgSEZBMzg0eF9QRFJfUENCX1BBUlROVU06CisJY2FzZSBIRkEzODR4X1BEUl9QREFWRVI6CisJY2FzZSBIRkEzODR4X1BEUl9OSUNfU0VSSUFMOgorCWNhc2UgSEZBMzg0eF9QRFJfTUtLX01FQVNVUkVNRU5UUzoKKwljYXNlIEhGQTM4NHhfUERSX05JQ19SQU1TSVpFOgorCWNhc2UgSEZBMzg0eF9QRFJfTUZJU1VQUkFOR0U6CisJY2FzZSBIRkEzODR4X1BEUl9DRklTVVBSQU5HRToKKwljYXNlIEhGQTM4NHhfUERSX05JQ0lEOgorCWNhc2UgSEZBMzg0eF9QRFJfTUFDX0FERFJFU1M6CisJY2FzZSBIRkEzODR4X1BEUl9SRUdET01BSU46CisJY2FzZSBIRkEzODR4X1BEUl9BTExPV0VEX0NIQU5ORUw6CisJY2FzZSBIRkEzODR4X1BEUl9ERUZBVUxUX0NIQU5ORUw6CisJY2FzZSBIRkEzODR4X1BEUl9URU1QVFlQRToKKwljYXNlIEhGQTM4NHhfUERSX0lGUl9TRVRUSU5HOgorCWNhc2UgSEZBMzg0eF9QRFJfUkZSX1NFVFRJTkc6CisJY2FzZSBIRkEzODR4X1BEUl9IRkEzODYxX0JBU0VMSU5FOgorCWNhc2UgSEZBMzg0eF9QRFJfSEZBMzg2MV9TSEFET1c6CisJY2FzZSBIRkEzODR4X1BEUl9IRkEzODYxX0lGUkY6CisJY2FzZSBIRkEzODR4X1BEUl9IRkEzODYxX0NIQ0FMU1A6CisJY2FzZSBIRkEzODR4X1BEUl9IRkEzODYxX0NIQ0FMSToKKwljYXNlIEhGQTM4NHhfUERSXzM4NDJfTklDX0NPTkZJRzoKKwljYXNlIEhGQTM4NHhfUERSX1VTQl9JRDoKKwljYXNlIEhGQTM4NHhfUERSX1BDSV9JRDoKKwljYXNlIEhGQTM4NHhfUERSX1BDSV9JRkNPTkY6CisJY2FzZSBIRkEzODR4X1BEUl9QQ0lfUE1DT05GOgorCWNhc2UgSEZBMzg0eF9QRFJfUkZFTlJHWToKKwljYXNlIEhGQTM4NHhfUERSX0hGQTM4NjFfTUFORl9URVNUU1A6CisJY2FzZSBIRkEzODR4X1BEUl9IRkEzODYxX01BTkZfVEVTVEk6CisJCS8qIGNvZGUgaXMgT0sgKi8KKwkJcmV0dXJuIDE7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWlmICggcGRyY29kZSA8IDB4MTAwMCApIHsKKwkJCS8qIGNvZGUgaXMgT0ssIGJ1dCB3ZSBkb24ndCBrbm93IGV4YWN0bHkgd2hhdCBpdCBpcyAqLworCQkJV0xBTl9MT0dfREVCVUcoMywKKwkJCQkiRW5jb3VudGVyZWQgdW5rbm93biBQRFIjPTB4JTA0eCwgIgorCQkJCSJhc3N1bWluZyBpdCdzIG9rLlxuIiwKKwkJCQlwZHJjb2RlKTsKKwkJCXJldHVybiAxOworCQl9IGVsc2UgeworCQkJLyogYmFkIGNvZGUgKi8KKwkJCVdMQU5fTE9HX0RFQlVHKDMsCisJCQkJIkVuY291bnRlcmVkIHVua25vd24gUERSIz0weCUwNHgsICIKKwkJCQkiKD49MHgxMDAwKSwgYXNzdW1pbmcgaXQncyBiYWQuXG4iLAorCQkJCXBkcmNvZGUpOworCQkJcmV0dXJuIDA7CisJCX0KKwkJYnJlYWs7CisJfQorCXJldHVybiAwOyAvKiBhdm9pZCBjb21waWxlciB3YXJuaW5ncyAqLworfQorCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wODAyMTFjb252LmMgYi9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wODAyMTFjb252LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjgxMjFiOQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3A4MDIxMWNvbnYuYwpAQCAtMCwwICsxLDY4MyBAQAorLyogc3JjL3A4MDIxMS9wODAyMTFjb252LmMKKyoKKyogRXRoZXIvODAyLjExIGNvbnZlcnNpb25zIGFuZCBwYWNrZXQgYnVmZmVyIHJvdXRpbmVzCisqCisqIENvcHlyaWdodCAoQykgMTk5OSBBYnNvbHV0ZVZhbHVlIFN5c3RlbXMsIEluYy4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqCisqIGxpbnV4LXdsYW4KKyoKKyogICBUaGUgY29udGVudHMgb2YgdGhpcyBmaWxlIGFyZSBzdWJqZWN0IHRvIHRoZSBNb3ppbGxhIFB1YmxpYworKiAgIExpY2Vuc2UgVmVyc2lvbiAxLjEgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlCisqICAgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mCisqICAgdGhlIExpY2Vuc2UgYXQgaHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvCisqCisqICAgU29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTCisqICAgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvcgorKiAgIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZworKiAgIHJpZ2h0cyBhbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisqCisqICAgQWx0ZXJuYXRpdmVseSwgdGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBtYXkgYmUgdXNlZCB1bmRlciB0aGUKKyogICB0ZXJtcyBvZiB0aGUgR05VIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiAodGhlICJHUEwiKSwgaW4gd2hpY2gKKyogICBjYXNlIHRoZSBwcm92aXNpb25zIG9mIHRoZSBHUEwgYXJlIGFwcGxpY2FibGUgaW5zdGVhZCBvZiB0aGUKKyogICBhYm92ZS4gIElmIHlvdSB3aXNoIHRvIGFsbG93IHRoZSB1c2Ugb2YgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZQorKiAgIG9ubHkgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHUEwgYW5kIG5vdCB0byBhbGxvdyBvdGhlcnMgdG8gdXNlCisqICAgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSB1bmRlciB0aGUgTVBMLCBpbmRpY2F0ZSB5b3VyIGRlY2lzaW9uCisqICAgYnkgZGVsZXRpbmcgdGhlIHByb3Zpc2lvbnMgYWJvdmUgYW5kIHJlcGxhY2UgdGhlbSB3aXRoIHRoZSBub3RpY2UKKyogICBhbmQgb3RoZXIgcHJvdmlzaW9ucyByZXF1aXJlZCBieSB0aGUgR1BMLiAgSWYgeW91IGRvIG5vdCBkZWxldGUKKyogICB0aGUgcHJvdmlzaW9ucyBhYm92ZSwgYSByZWNpcGllbnQgbWF5IHVzZSB5b3VyIHZlcnNpb24gb2YgdGhpcworKiAgIGZpbGUgdW5kZXIgZWl0aGVyIHRoZSBNUEwgb3IgdGhlIEdQTC4KKyoKKyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyoKKyogSW5xdWlyaWVzIHJlZ2FyZGluZyB0aGUgbGludXgtd2xhbiBPcGVuIFNvdXJjZSBwcm9qZWN0IGNhbiBiZQorKiBtYWRlIGRpcmVjdGx5IHRvOgorKgorKiBBYnNvbHV0ZVZhbHVlIFN5c3RlbXMgSW5jLgorKiBpbmZvQGxpbnV4LXdsYW4uY29tCisqIGh0dHA6Ly93d3cubGludXgtd2xhbi5jb20KKyoKKyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyoKKyogUG9ydGlvbnMgb2YgdGhlIGRldmVsb3BtZW50IG9mIHRoaXMgc29mdHdhcmUgd2VyZSBmdW5kZWQgYnkKKyogSW50ZXJzaWwgQ29ycG9yYXRpb24gYXMgcGFydCBvZiBQUklTTShSKSBjaGlwc2V0IHByb2R1Y3QgZGV2ZWxvcG1lbnQuCisqCisqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqCisqIFRoaXMgZmlsZSBkZWZpbmVzIHRoZSBmdW5jdGlvbnMgdGhhdCBwZXJmb3JtIEV0aGVybmV0IHRvL2Zyb20KKyogODAyLjExIGZyYW1lIGNvbnZlcnNpb25zLgorKgorKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKi8KKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKiBTeXN0ZW0gSW5jbHVkZXMgKi8KKworI2RlZmluZSBfX05PX1ZFUlNJT05fXwkJLyogcHJldmVudCB0aGUgc3RhdGljIGRlZmluaXRpb24gKi8KKworCisjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgorCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC93aXJlbGVzcy5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvaWZfZXRoZXIuaD4KKworI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KKworI2luY2x1ZGUgInZlcnNpb24uaCIKKyNpbmNsdWRlICJ3bGFuX2NvbXBhdC5oIgorCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworLyogUHJvamVjdCBJbmNsdWRlcyAqLworCisjaW5jbHVkZSAicDgwMjExdHlwZXMuaCIKKyNpbmNsdWRlICJwODAyMTFoZHIuaCIKKyNpbmNsdWRlICJwODAyMTFjb252LmgiCisjaW5jbHVkZSAicDgwMjExbWdtdC5oIgorI2luY2x1ZGUgInA4MDIxMW1zZy5oIgorI2luY2x1ZGUgInA4MDIxMW5ldGRldi5oIgorI2luY2x1ZGUgInA4MDIxMWlvY3RsLmgiCisjaW5jbHVkZSAicDgwMjExcmVxLmgiCisKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKy8qIExvY2FsIENvbnN0YW50cyAqLworCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworLyogTG9jYWwgTWFjcm9zICovCisKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKy8qIExvY2FsIFR5cGVzICovCisKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKy8qIExvY2FsIFN0YXRpYyBEZWZpbml0aW9ucyAqLworCitzdGF0aWMgVUlOVDgJb3VpX3JmYzEwNDJbXSA9IHsweDAwLCAweDAwLCAweDAwfTsKK3N0YXRpYyBVSU5UOAlvdWlfODAyMWhbXSA9IHsweDAwLCAweDAwLCAweGY4fTsKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKy8qIExvY2FsIEZ1bmN0aW9uIERlY2xhcmF0aW9ucyAqLworCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKiBGdW5jdGlvbiBEZWZpbml0aW9ucyAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogcDgwMjExcGJfZXRoZXJfdG9fODAyMTEKKyoKKyogVXNlcyB0aGUgY29udGVudHMgb2YgdGhlIGV0aGVyIGZyYW1lIGFuZCB0aGUgZXRoZXJjb252IHNldHRpbmcKKyogdG8gYnVpbGQgdGhlIGVsZW1lbnRzIG9mIHRoZSA4MDIuMTEgZnJhbWUuCisqCisqIFdlIGRvbid0IGFjdHVhbGx5IHNldAorKiB1cCB0aGUgZnJhbWUgaGVhZGVyIGhlcmUuICBUaGF0J3MgdGhlIE1BQydzIGpvYi4gIFdlJ3JlIG9ubHkgaGFuZGxpbmcKKyogY29udmVyc2lvbiBvZiBESVhJSSBvciA4MDIuMytMTEMgZnJhbWVzIHRvIHNvbWV0aGluZyB0aGF0IHdvcmtzCisqIHdpdGggODAyLjExLgorKgorKiBOb3RlIC0tIDgwMi4xMSBoZWFkZXIgaXMgTk9UIHBhcnQgb2YgdGhlIHNrYi4gIExpa2V3aXNlLCB0aGUgODAyLjExCisqICAgICAgICAgRkNTIGlzIGFsc28gbm90IHByZXNlbnQgYW5kIHdpbGwgbmVlZCB0byBiZSBhZGRlZCBlbHNld2hlcmUuCisqCisqIEFyZ3VtZW50czoKKyoJZXRoY29udgkJQ29udmVyc2lvbiB0eXBlIHRvIHBlcmZvcm0KKyoJc2tiCQlza2J1ZmYgY29udGFpbmluZyB0aGUgZXRoZXIgZnJhbWUKKyogICAgICAgcDgwMjExX2hkciAgICAgIDgwMi4xMSBoZWFkZXIKKyoKKyogUmV0dXJuczoKKyoJMCBvbiBzdWNjZXNzLCBub24temVybyBvdGhlcndpc2UKKyoKKyogQ2FsbCBjb250ZXh0OgorKglNYXkgYmUgY2FsbGVkIGluIGludGVycnVwdCBvciBub24taW50ZXJydXB0IGNvbnRleHQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworaW50IHNrYl9ldGhlcl90b19wODAyMTEoIHdsYW5kZXZpY2VfdCAqd2xhbmRldiwgVUlOVDMyIGV0aGNvbnYsIHN0cnVjdCBza19idWZmICpza2IsIHA4MDIxMV9oZHJfdCAqcDgwMjExX2hkciwgcDgwMjExX21ldGF3ZXBfdCAqcDgwMjExX3dlcCkKK3sKKworCVVJTlQxNiAgICAgICAgICBmYzsKKwlVSU5UMTYgICAgICAgICAgcHJvdG87CisJd2xhbl9ldGhoZHJfdCAgIGVfaGRyOworCXdsYW5fbGxjX3QgICAgICAqZV9sbGM7CisJd2xhbl9zbmFwX3QgICAgICplX3NuYXA7CisJaW50IGZvbzsKKworCURCRkVOVEVSOworCW1lbWNweSgmZV9oZHIsIHNrYi0+ZGF0YSwgc2l6ZW9mKGVfaGRyKSk7CisKKwlpZiAoc2tiLT5sZW4gPD0gMCkgeworCQlXTEFOX0xPR19ERUJVRygxLCAiemVyby1sZW5ndGggc2tiIVxuIik7CisJCXJldHVybiAxOworCX0KKworCWlmICggZXRoY29udiA9PSBXTEFOX0VUSENPTlZfRU5DQVAgKSB7IC8qIHNpbXBsZXN0IGNhc2UgKi8KKwkgICAgICAgIFdMQU5fTE9HX0RFQlVHKDMsICJFTkNBUCBsZW46ICVkXG4iLCBza2ItPmxlbik7CisJCS8qIGhlcmUsIHdlIGRvbid0IGNhcmUgd2hhdCBraW5kIG9mIGV0aGVyIGZybS4gSnVzdCBzdGljayBpdCAqLworCQkvKiAgaW4gdGhlIDgwMjExIHBheWxvYWQgKi8KKwkJLyogd2hpY2ggaXMgdG8gc2F5LCBsZWF2ZSB0aGUgc2tiIGFsb25lLiAqLworCX0gZWxzZSB7CisJCS8qIHN0ZXAgMTogY2xhc3NpZnkgZXRoZXIgZnJhbWUsIERJWCBvciA4MDIuMz8gKi8KKwkJcHJvdG8gPSBudG9ocyhlX2hkci50eXBlKTsKKwkJaWYgKCBwcm90byA8PSAxNTAwICkgeworCQkgICAgICAgIFdMQU5fTE9HX0RFQlVHKDMsICI4MDIuMyBsZW46ICVkXG4iLCBza2ItPmxlbik7CisgICAgICAgICAgICAgICAgICAgICAgICAvKiBjb2RlcyA8PSAxNTAwIHJlc2VydmVkIGZvciA4MDIuMyBsZW5ndGhzICovCisJCQkvKiBpdCdzIDgwMi4zLCBwYXNzIGV0aGVyIHBheWxvYWQgdW5jaGFuZ2VkLCAgKi8KKworCQkJLyogdHJpbSBvZmYgZXRoZXJuZXQgaGVhZGVyICovCisJCQlza2JfcHVsbChza2IsIFdMQU5fRVRISERSX0xFTik7CisKKwkJCS8qICAgbGVhdmUgb2ZmIGFueSBQQUQgb2N0ZXRzLiAgKi8KKwkJCXNrYl90cmltKHNrYiwgcHJvdG8pOworCQl9IGVsc2UgeworCQkgICAgICAgIFdMQU5fTE9HX0RFQlVHKDMsICJESVhJSSBsZW46ICVkXG4iLCBza2ItPmxlbik7CisJCQkvKiBpdCdzIERJWElJLCB0aW1lIGZvciBzb21lIGNvbnZlcnNpb24gKi8KKworCQkJLyogdHJpbSBvZmYgZXRoZXJuZXQgaGVhZGVyICovCisJCQlza2JfcHVsbChza2IsIFdMQU5fRVRISERSX0xFTik7CisKKwkJCS8qIHRhY2sgb24gU05BUCAqLworCQkJZV9zbmFwID0gKHdsYW5fc25hcF90ICopIHNrYl9wdXNoKHNrYiwgc2l6ZW9mKHdsYW5fc25hcF90KSk7CisJCQllX3NuYXAtPnR5cGUgPSBodG9ucyhwcm90byk7CisJCQlpZiAoIGV0aGNvbnYgPT0gV0xBTl9FVEhDT05WXzgwMjFoICYmIHA4MDIxMV9zdHRfZmluZHByb3RvKHByb3RvKSApIHsKKwkJCQltZW1jcHkoIGVfc25hcC0+b3VpLCBvdWlfODAyMWgsIFdMQU5fSUVFRV9PVUlfTEVOKTsKKwkJCX0gZWxzZSB7CisJCQkJbWVtY3B5KCBlX3NuYXAtPm91aSwgb3VpX3JmYzEwNDIsIFdMQU5fSUVFRV9PVUlfTEVOKTsKKwkJCX0KKworCQkJLyogdGFjayBvbiBsbGMgKi8KKwkJCWVfbGxjID0gKHdsYW5fbGxjX3QgKikgc2tiX3B1c2goc2tiLCBzaXplb2Yod2xhbl9sbGNfdCkpOworCQkJZV9sbGMtPmRzYXAgPSAweEFBOwkvKiBTTkFQLCBzZWUgSUVFRSA4MDIgKi8KKwkJCWVfbGxjLT5zc2FwID0gMHhBQTsKKwkJCWVfbGxjLT5jdGwgPSAweDAzOworCisJCX0KKwl9CisKKwkvKiBTZXQgdXAgdGhlIDgwMi4xMSBoZWFkZXIgKi8KKwkvKiBJdCdzIGEgZGF0YSBmcmFtZSAqLworCWZjID0gaG9zdDJpZWVlMTYoIFdMQU5fU0VUX0ZDX0ZUWVBFKFdMQU5fRlRZUEVfREFUQSkgfAorCQkJICBXTEFOX1NFVF9GQ19GU1RZUEUoV0xBTl9GU1RZUEVfREFUQU9OTFkpKTsKKworCXN3aXRjaCAoIHdsYW5kZXYtPm1hY21vZGUgKSB7CisJY2FzZSBXTEFOX01BQ01PREVfSUJTU19TVEE6CisJCW1lbWNweShwODAyMTFfaGRyLT5hMy5hMSwgJmVfaGRyLmRhZGRyLCBXTEFOX0FERFJfTEVOKTsKKwkJbWVtY3B5KHA4MDIxMV9oZHItPmEzLmEyLCB3bGFuZGV2LT5uZXRkZXYtPmRldl9hZGRyLCBXTEFOX0FERFJfTEVOKTsKKwkJbWVtY3B5KHA4MDIxMV9oZHItPmEzLmEzLCB3bGFuZGV2LT5ic3NpZCwgV0xBTl9BRERSX0xFTik7CisJCWJyZWFrOworCWNhc2UgV0xBTl9NQUNNT0RFX0VTU19TVEE6CisJCWZjIHw9IGhvc3QyaWVlZTE2KFdMQU5fU0VUX0ZDX1RPRFMoMSkpOworCQltZW1jcHkocDgwMjExX2hkci0+YTMuYTEsIHdsYW5kZXYtPmJzc2lkLCBXTEFOX0FERFJfTEVOKTsKKwkJbWVtY3B5KHA4MDIxMV9oZHItPmEzLmEyLCB3bGFuZGV2LT5uZXRkZXYtPmRldl9hZGRyLCBXTEFOX0FERFJfTEVOKTsKKwkJbWVtY3B5KHA4MDIxMV9oZHItPmEzLmEzLCAmZV9oZHIuZGFkZHIsIFdMQU5fQUREUl9MRU4pOworCQlicmVhazsKKwljYXNlIFdMQU5fTUFDTU9ERV9FU1NfQVA6CisJCWZjIHw9IGhvc3QyaWVlZTE2KFdMQU5fU0VUX0ZDX0ZST01EUygxKSk7CisJCW1lbWNweShwODAyMTFfaGRyLT5hMy5hMSwgJmVfaGRyLmRhZGRyLCBXTEFOX0FERFJfTEVOKTsKKwkJbWVtY3B5KHA4MDIxMV9oZHItPmEzLmEyLCB3bGFuZGV2LT5ic3NpZCwgV0xBTl9BRERSX0xFTik7CisJCW1lbWNweShwODAyMTFfaGRyLT5hMy5hMywgJmVfaGRyLnNhZGRyLCBXTEFOX0FERFJfTEVOKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJV0xBTl9MT0dfRVJST1IoIkVycm9yOiBDb252ZXJ0aW5nIGV0aCB0byB3bGFuIGluIHVua25vd24gbW9kZS5cbiIpOworCQlyZXR1cm4gMTsKKwkJYnJlYWs7CisJfQorCisJcDgwMjExX3dlcC0+ZGF0YSA9IE5VTEw7CisKKwlpZiAoKHdsYW5kZXYtPmhvc3R3ZXAgJiBIT1NUV0VQX1BSSVZBQ1lJTlZPS0VEKSAmJiAod2xhbmRldi0+aG9zdHdlcCAmIEhPU1RXRVBfRU5DUllQVCkpIHsKKwkJLy8gWFhYWCBuZWVkIHRvIHBpY2sga2V5bnVtIG90aGVyIHRoYW4gZGVmYXVsdD8KKworI2lmIDEKKwkJcDgwMjExX3dlcC0+ZGF0YSA9IGttYWxsb2Moc2tiLT5sZW4sIEdGUF9BVE9NSUMpOworI2Vsc2UKKwkJcDgwMjExX3dlcC0+ZGF0YSA9IHNrYi0+ZGF0YTsKKyNlbmRpZgorCisJCWlmICgoZm9vID0gd2VwX2VuY3J5cHQod2xhbmRldiwgc2tiLT5kYXRhLCBwODAyMTFfd2VwLT5kYXRhLAorCQkJCSAgICAgICBza2ItPmxlbiwKKwkJCQkod2xhbmRldi0+aG9zdHdlcCAmIEhPU1RXRVBfREVGQVVMVEtFWV9NQVNLKSwKKwkJCQlwODAyMTFfd2VwLT5pdiwgcDgwMjExX3dlcC0+aWN2KSkpIHsKKwkJCVdMQU5fTE9HX1dBUk5JTkcoIkhvc3QgZW4tV0VQIGZhaWxlZCwgZHJvcHBpbmcgZnJhbWUgKCVkKS5cbiIsIGZvbyk7CisJCQlyZXR1cm4gMjsKKwkJfQorCQlmYyB8PSBob3N0MmllZWUxNihXTEFOX1NFVF9GQ19JU1dFUCgxKSk7CisJfQorCisKKwkvLwlza2ItPm5oLnJhdyA9IHNrYi0+ZGF0YTsKKworCXA4MDIxMV9oZHItPmEzLmZjID0gZmM7CisJcDgwMjExX2hkci0+YTMuZHVyID0gMDsKKwlwODAyMTFfaGRyLT5hMy5zZXEgPSAwOworCisJREJGRVhJVDsKKwlyZXR1cm4gMDsKK30KKworLyogamtyaWVnbDogZnJvbSBvcmlub2NvLCBtb2RpZmllZCAqLworc3RhdGljIHZvaWQgb3Jpbm9jb19zcHlfZ2F0aGVyKHdsYW5kZXZpY2VfdCAqd2xhbmRldiwgY2hhciAqbWFjLAorCQkJICAgICAgIHA4MDIxMV9yeG1ldGFfdCAqcnhtZXRhKQoreworICAgICAgICBpbnQgaTsKKworICAgICAgICAvKiBHYXRoZXIgd2lyZWxlc3Mgc3B5IHN0YXRpc3RpY3M6IGZvciBlYWNoIHBhY2tldCwgY29tcGFyZSB0aGUKKyAgICAgICAgICogc291cmNlIGFkZHJlc3Mgd2l0aCBvdXQgbGlzdCwgYW5kIGlmIG1hdGNoLCBnZXQgdGhlIHN0YXRzLi4uICovCisKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IHdsYW5kZXYtPnNweV9udW1iZXI7IGkrKykgeworCisgICAgICAgICAgICAgICAgaWYgKCFtZW1jbXAod2xhbmRldi0+c3B5X2FkZHJlc3NbaV0sIG1hYywgRVRIX0FMRU4pKSB7CisJCQltZW1jcHkod2xhbmRldi0+c3B5X2FkZHJlc3NbaV0sIG1hYywgRVRIX0FMRU4pOworICAgICAgICAgICAgICAgICAgICAgICAgd2xhbmRldi0+c3B5X3N0YXRbaV0ubGV2ZWwgPSByeG1ldGEtPnNpZ25hbDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHdsYW5kZXYtPnNweV9zdGF0W2ldLm5vaXNlID0gcnhtZXRhLT5ub2lzZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHdsYW5kZXYtPnNweV9zdGF0W2ldLnF1YWwgPSAocnhtZXRhLT5zaWduYWwgPiByeG1ldGEtPm5vaXNlKSA/IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJ4bWV0YS0+c2lnbmFsIC0gcnhtZXRhLT5ub2lzZSkgOiAwOworICAgICAgICAgICAgICAgICAgICAgICAgd2xhbmRldi0+c3B5X3N0YXRbaV0udXBkYXRlZCA9IDB4NzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgIH0KK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIHA4MDIxMXBiXzgwMjExX3RvX2V0aGVyCisqCisqIFVzZXMgdGhlIGNvbnRlbnRzIG9mIGEgcmVjZWl2ZWQgODAyLjExIGZyYW1lIGFuZCB0aGUgZXRoZXJjb252CisqIHNldHRpbmcgdG8gYnVpbGQgYW4gZXRoZXIgZnJhbWUuCisqCisqIFRoaXMgZnVuY3Rpb24gZXh0cmFjdHMgdGhlIHNyYyBhbmQgZGVzdCBhZGRyZXNzIGZyb20gdGhlIDgwMi4xMQorKiBmcmFtZSB0byB1c2UgaW4gdGhlIGNvbnN0cnVjdGlvbiBvZiB0aGUgZXRoIGZyYW1lLgorKgorKiBBcmd1bWVudHM6CisqCWV0aGNvbnYJCUNvbnZlcnNpb24gdHlwZSB0byBwZXJmb3JtCisqCXNrYgkJUGFja2V0IGJ1ZmZlciBjb250YWluaW5nIHRoZSA4MDIuMTEgZnJhbWUKKyoKKyogUmV0dXJuczoKKyoJMCBvbiBzdWNjZXNzLCBub24temVybyBvdGhlcndpc2UKKyoKKyogQ2FsbCBjb250ZXh0OgorKglNYXkgYmUgY2FsbGVkIGluIGludGVycnVwdCBvciBub24taW50ZXJydXB0IGNvbnRleHQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworaW50IHNrYl9wODAyMTFfdG9fZXRoZXIoIHdsYW5kZXZpY2VfdCAqd2xhbmRldiwgVUlOVDMyIGV0aGNvbnYsIHN0cnVjdCBza19idWZmICpza2IpCit7CisJbmV0ZGV2aWNlX3QgICAgICpuZXRkZXYgPSB3bGFuZGV2LT5uZXRkZXY7CisJVUlOVDE2ICAgICAgICAgIGZjOworCVVJTlQgICAgICAgICAgICBwYXlsb2FkX2xlbmd0aDsKKwlVSU5UICAgICAgICAgICAgcGF5bG9hZF9vZmZzZXQ7CisJVUlOVDgJCWRhZGRyW1dMQU5fRVRIQUREUl9MRU5dOworCVVJTlQ4CQlzYWRkcltXTEFOX0VUSEFERFJfTEVOXTsKKwlwODAyMTFfaGRyX3QgICAgKndfaGRyOworCXdsYW5fZXRoaGRyX3QgICAqZV9oZHI7CisJd2xhbl9sbGNfdCAgICAgICplX2xsYzsKKwl3bGFuX3NuYXBfdCAgICAgKmVfc25hcDsKKworCWludCBmb287CisKKwlEQkZFTlRFUjsKKworCXBheWxvYWRfbGVuZ3RoID0gc2tiLT5sZW4gLSBXTEFOX0hEUl9BM19MRU4gLSBXTEFOX0NSQ19MRU47CisJcGF5bG9hZF9vZmZzZXQgPSBXTEFOX0hEUl9BM19MRU47CisKKwl3X2hkciA9IChwODAyMTFfaGRyX3QgKikgc2tiLT5kYXRhOworCisgICAgICAgIC8qIHNldHVwIHNvbWUgdmFycyBmb3IgY29udmVuaWVuY2UgKi8KKwlmYyA9IGllZWUyaG9zdDE2KHdfaGRyLT5hMy5mYyk7CisJaWYgKCAoV0xBTl9HRVRfRkNfVE9EUyhmYykgPT0gMCkgJiYgKFdMQU5fR0VUX0ZDX0ZST01EUyhmYykgPT0gMCkgKSB7CisJCW1lbWNweShkYWRkciwgd19oZHItPmEzLmExLCBXTEFOX0VUSEFERFJfTEVOKTsKKwkJbWVtY3B5KHNhZGRyLCB3X2hkci0+YTMuYTIsIFdMQU5fRVRIQUREUl9MRU4pOworCX0gZWxzZSBpZiggKFdMQU5fR0VUX0ZDX1RPRFMoZmMpID09IDApICYmIChXTEFOX0dFVF9GQ19GUk9NRFMoZmMpID09IDEpICkgeworCQltZW1jcHkoZGFkZHIsIHdfaGRyLT5hMy5hMSwgV0xBTl9FVEhBRERSX0xFTik7CisJCW1lbWNweShzYWRkciwgd19oZHItPmEzLmEzLCBXTEFOX0VUSEFERFJfTEVOKTsKKwl9IGVsc2UgaWYoIChXTEFOX0dFVF9GQ19UT0RTKGZjKSA9PSAxKSAmJiAoV0xBTl9HRVRfRkNfRlJPTURTKGZjKSA9PSAwKSApIHsKKwkJbWVtY3B5KGRhZGRyLCB3X2hkci0+YTMuYTMsIFdMQU5fRVRIQUREUl9MRU4pOworCQltZW1jcHkoc2FkZHIsIHdfaGRyLT5hMy5hMiwgV0xBTl9FVEhBRERSX0xFTik7CisJfSBlbHNlIHsKKwkJcGF5bG9hZF9vZmZzZXQgPSBXTEFOX0hEUl9BNF9MRU47CisJCXBheWxvYWRfbGVuZ3RoIC09ICggV0xBTl9IRFJfQTRfTEVOIC0gV0xBTl9IRFJfQTNfTEVOICk7CisJCWlmIChwYXlsb2FkX2xlbmd0aCA8IDAgKSB7CisJCQlXTEFOX0xPR19FUlJPUigiQTQgZnJhbWUgdG9vIHNob3J0IVxuIik7CisJCQlyZXR1cm4gMTsKKwkJfQorCQltZW1jcHkoZGFkZHIsIHdfaGRyLT5hNC5hMywgV0xBTl9FVEhBRERSX0xFTik7CisJCW1lbWNweShzYWRkciwgd19oZHItPmE0LmE0LCBXTEFOX0VUSEFERFJfTEVOKTsKKwl9CisKKwkvKiBwZXJmb3JtIGRlLXdlcCBpZiBuZWNlc3NhcnkuLiAqLworCWlmICgod2xhbmRldi0+aG9zdHdlcCAmIEhPU1RXRVBfUFJJVkFDWUlOVk9LRUQpICYmIFdMQU5fR0VUX0ZDX0lTV0VQKGZjKSAmJiAod2xhbmRldi0+aG9zdHdlcCAmIEhPU1RXRVBfREVDUllQVCkpIHsKKwkJaWYgKHBheWxvYWRfbGVuZ3RoIDw9IDgpIHsKKwkJCVdMQU5fTE9HX0VSUk9SKCJXRVAgZnJhbWUgdG9vIHNob3J0ICgldSkuXG4iLAorCQkJCQlza2ItPmxlbik7CisJCQlyZXR1cm4gMTsKKwkJfQorCQlpZiAoKGZvbyA9IHdlcF9kZWNyeXB0KHdsYW5kZXYsIHNrYi0+ZGF0YSArIHBheWxvYWRfb2Zmc2V0ICsgNCwKKwkJCQkgICAgICAgcGF5bG9hZF9sZW5ndGggLSA4LCAtMSwKKwkJCQkgICAgICAgc2tiLT5kYXRhICsgcGF5bG9hZF9vZmZzZXQsCisJCQkJICAgICAgIHNrYi0+ZGF0YSArIHBheWxvYWRfb2Zmc2V0ICsgcGF5bG9hZF9sZW5ndGggLSA0KSkpIHsKKwkJCS8qIGRlLXdlcCBmYWlsZWQsIGRyb3Agc2tiLiAqLworCQkJV0xBTl9MT0dfREVCVUcoMSwgIkhvc3QgZGUtV0VQIGZhaWxlZCwgZHJvcHBpbmcgZnJhbWUgKCVkKS5cbiIsIGZvbyk7CisJCQl3bGFuZGV2LT5yeC5kZWNyeXB0X2VycisrOworCQkJcmV0dXJuIDI7CisJCX0KKworCQkvKiBzdWJ0cmFjdCB0aGUgSVYrSUNWIGxlbmd0aCBvZmYgdGhlIHBheWxvYWQgKi8KKwkJcGF5bG9hZF9sZW5ndGggLT0gODsKKwkJLyogY2hvcCBvZmYgdGhlIElWICovCisJCXNrYl9wdWxsKHNrYiwgNCk7CisJCS8qIGNob3Agb2ZmIHRoZSBJQ1YuICovCisJCXNrYl90cmltKHNrYiwgc2tiLT5sZW4gLSA0KTsKKworCQl3bGFuZGV2LT5yeC5kZWNyeXB0Kys7CisJfQorCisJZV9oZHIgPSAod2xhbl9ldGhoZHJfdCAqKSAoc2tiLT5kYXRhICsgcGF5bG9hZF9vZmZzZXQpOworCisJZV9sbGMgPSAod2xhbl9sbGNfdCAqKSAoc2tiLT5kYXRhICsgcGF5bG9hZF9vZmZzZXQpOworCWVfc25hcCA9ICh3bGFuX3NuYXBfdCAqKSAoc2tiLT5kYXRhICsgcGF5bG9hZF9vZmZzZXQgKyBzaXplb2Yod2xhbl9sbGNfdCkpOworCisJLyogVGVzdCBmb3IgdGhlIHZhcmlvdXMgZW5jb2RpbmdzICovCisJaWYgKCAocGF5bG9hZF9sZW5ndGggPj0gc2l6ZW9mKHdsYW5fZXRoaGRyX3QpKSAmJgorCSAgICAgKCBlX2xsYy0+ZHNhcCAhPSAweGFhIHx8IGVfbGxjLT5zc2FwICE9IDB4YWEgKSAmJgorCSAgICAgKChtZW1jbXAoZGFkZHIsIGVfaGRyLT5kYWRkciwgV0xBTl9FVEhBRERSX0xFTikgPT0gMCkgfHwKKwkgICAgIChtZW1jbXAoc2FkZHIsIGVfaGRyLT5zYWRkciwgV0xBTl9FVEhBRERSX0xFTikgPT0gMCkpKSB7CisJCVdMQU5fTE9HX0RFQlVHKDMsICI4MDIuMyBFTkNBUCBsZW46ICVkXG4iLCBwYXlsb2FkX2xlbmd0aCk7CisJCS8qIDgwMi4zIEVuY2Fwc3VsYXRlZCAqLworCQkvKiBUZXN0IGZvciBhbiBvdmVybGVuZ3RoIGZyYW1lICovCisJCWlmICggcGF5bG9hZF9sZW5ndGggPiAobmV0ZGV2LT5tdHUgKyBXTEFOX0VUSEhEUl9MRU4pKSB7CisJCQkvKiBBIGJvZ3VzIGxlbmd0aCBldGhmcm0gaGFzIGJlZW4gZW5jYXAnZC4gKi8KKwkJCS8qIElzIHNvbWVvbmUgdHJ5aW5nIGFuIG9mbG93IGF0dGFjaz8gKi8KKwkJCVdMQU5fTE9HX0VSUk9SKCJFTkNBUCBmcmFtZSB0b28gbGFyZ2UgKCVkID4gJWQpXG4iLAorCQkJCXBheWxvYWRfbGVuZ3RoLCBuZXRkZXYtPm10dSArIFdMQU5fRVRISERSX0xFTik7CisJCQlyZXR1cm4gMTsKKwkJfQorCisJCS8qIENob3Agb2ZmIHRoZSA4MDIuMTEgaGVhZGVyLiAgaXQncyBhbHJlYWR5IHNhbmUuICovCisJCXNrYl9wdWxsKHNrYiwgcGF5bG9hZF9vZmZzZXQpOworCQkvKiBjaG9wIG9mZiB0aGUgODAyLjExIENSQyAqLworCQlza2JfdHJpbShza2IsIHNrYi0+bGVuIC0gV0xBTl9DUkNfTEVOKTsKKworCX0gZWxzZSBpZiAoKHBheWxvYWRfbGVuZ3RoID49IHNpemVvZih3bGFuX2xsY190KSArIHNpemVvZih3bGFuX3NuYXBfdCkpICYmCisJCSAgIChlX2xsYy0+ZHNhcCA9PSAweGFhKSAmJgorCQkgICAoZV9sbGMtPnNzYXAgPT0gMHhhYSkgJiYKKwkJICAgKGVfbGxjLT5jdGwgPT0gMHgwMykgJiYKKwkJICAgKCgobWVtY21wKCBlX3NuYXAtPm91aSwgb3VpX3JmYzEwNDIsIFdMQU5fSUVFRV9PVUlfTEVOKT09MCkgJiYKKwkJICAgIChldGhjb252ID09IFdMQU5fRVRIQ09OVl84MDIxaCkgJiYKKwkJICAgIChwODAyMTFfc3R0X2ZpbmRwcm90byhpZWVlMmhvc3QxNihlX3NuYXAtPnR5cGUpKSkpIHx8CisJCSAgICAobWVtY21wKCBlX3NuYXAtPm91aSwgb3VpX3JmYzEwNDIsIFdMQU5fSUVFRV9PVUlfTEVOKSE9MCkpKQorCXsKKwkJV0xBTl9MT0dfREVCVUcoMywgIlNOQVArUkZDMTA0MiBsZW46ICVkXG4iLCBwYXlsb2FkX2xlbmd0aCk7CisJCS8qIGl0J3MgYSBTTkFQICsgUkZDMTA0MiBmcmFtZSAmJiBwcm90b2NvbCBpcyBpbiBTVFQgKi8KKwkJLyogYnVpbGQgODAyLjMgKyBSRkMxMDQyICovCisKKwkJLyogVGVzdCBmb3IgYW4gb3Zlcmxlbmd0aCBmcmFtZSAqLworCQlpZiAoIHBheWxvYWRfbGVuZ3RoID4gbmV0ZGV2LT5tdHUgKSB7CisJCQkvKiBBIGJvZ3VzIGxlbmd0aCBldGhmcm0gaGFzIGJlZW4gc2VudC4gKi8KKwkJCS8qIElzIHNvbWVvbmUgdHJ5aW5nIGFuIG9mbG93IGF0dGFjaz8gKi8KKwkJCVdMQU5fTE9HX0VSUk9SKCJTTkFQIGZyYW1lIHRvbyBsYXJnZSAoJWQgPiAlZClcbiIsCisJCQkJcGF5bG9hZF9sZW5ndGgsIG5ldGRldi0+bXR1KTsKKwkJCXJldHVybiAxOworCQl9CisKKwkJLyogY2hvcCA4MDIuMTEgaGVhZGVyIGZyb20gc2tiLiAqLworCQlza2JfcHVsbChza2IsIHBheWxvYWRfb2Zmc2V0KTsKKworCQkvKiBjcmVhdGUgODAyLjMgaGVhZGVyIGF0IGJlZ2lubmluZyBvZiBza2IuICovCisJCWVfaGRyID0gKHdsYW5fZXRoaGRyX3QgKikgc2tiX3B1c2goc2tiLCBXTEFOX0VUSEhEUl9MRU4pOworCQltZW1jcHkoZV9oZHItPmRhZGRyLCBkYWRkciwgV0xBTl9FVEhBRERSX0xFTik7CisJCW1lbWNweShlX2hkci0+c2FkZHIsIHNhZGRyLCBXTEFOX0VUSEFERFJfTEVOKTsKKwkJZV9oZHItPnR5cGUgPSBodG9ucyhwYXlsb2FkX2xlbmd0aCk7CisKKwkJLyogY2hvcCBvZmYgdGhlIDgwMi4xMSBDUkMgKi8KKwkJc2tiX3RyaW0oc2tiLCBza2ItPmxlbiAtIFdMQU5fQ1JDX0xFTik7CisKKwl9ICBlbHNlIGlmICgocGF5bG9hZF9sZW5ndGggPj0gc2l6ZW9mKHdsYW5fbGxjX3QpICsgc2l6ZW9mKHdsYW5fc25hcF90KSkgJiYKKwkJICAgIChlX2xsYy0+ZHNhcCA9PSAweGFhKSAmJgorCQkgICAgKGVfbGxjLT5zc2FwID09IDB4YWEpICYmCisJCSAgICAoZV9sbGMtPmN0bCA9PSAweDAzKSApIHsKKwkJV0xBTl9MT0dfREVCVUcoMywgIjgwMi4xaC9SRkMxMDQyIGxlbjogJWRcbiIsIHBheWxvYWRfbGVuZ3RoKTsKKwkJLyogaXQncyBhbiA4MDIuMWggZnJhbWUgfHwgKGFuIFJGQzEwNDIgJiYgcHJvdG9jb2wgaXMgbm90IGluIFNUVCkgKi8KKwkJLyogYnVpbGQgYSBESVhJSSArIFJGQzg5NCAqLworCisJCS8qIFRlc3QgZm9yIGFuIG92ZXJsZW5ndGggZnJhbWUgKi8KKwkJaWYgKChwYXlsb2FkX2xlbmd0aCAtIHNpemVvZih3bGFuX2xsY190KSAtIHNpemVvZih3bGFuX3NuYXBfdCkpCisJCSAgICA+IG5ldGRldi0+bXR1KSB7CisJCQkvKiBBIGJvZ3VzIGxlbmd0aCBldGhmcm0gaGFzIGJlZW4gc2VudC4gKi8KKwkJCS8qIElzIHNvbWVvbmUgdHJ5aW5nIGFuIG9mbG93IGF0dGFjaz8gKi8KKwkJCVdMQU5fTE9HX0VSUk9SKCJESVhJSSBmcmFtZSB0b28gbGFyZ2UgKCVsZCA+ICVkKVxuIiwKKwkJCQkJKGxvbmcgaW50KSAocGF5bG9hZF9sZW5ndGggLSBzaXplb2Yod2xhbl9sbGNfdCkgLQorCQkJCQkJICAgIHNpemVvZih3bGFuX3NuYXBfdCkpLAorCQkJCQluZXRkZXYtPm10dSk7CisJCQlyZXR1cm4gMTsKKwkJfQorCisJCS8qIGNob3AgODAyLjExIGhlYWRlciBmcm9tIHNrYi4gKi8KKwkJc2tiX3B1bGwoc2tiLCBwYXlsb2FkX29mZnNldCk7CisKKwkJLyogY2hvcCBsbGMgaGVhZGVyIGZyb20gc2tiLiAqLworCQlza2JfcHVsbChza2IsIHNpemVvZih3bGFuX2xsY190KSk7CisKKwkJLyogY2hvcCBzbmFwIGhlYWRlciBmcm9tIHNrYi4gKi8KKwkJc2tiX3B1bGwoc2tiLCBzaXplb2Yod2xhbl9zbmFwX3QpKTsKKworCQkvKiBjcmVhdGUgODAyLjMgaGVhZGVyIGF0IGJlZ2lubmluZyBvZiBza2IuICovCisJCWVfaGRyID0gKHdsYW5fZXRoaGRyX3QgKikgc2tiX3B1c2goc2tiLCBXTEFOX0VUSEhEUl9MRU4pOworCQllX2hkci0+dHlwZSA9IGVfc25hcC0+dHlwZTsKKwkJbWVtY3B5KGVfaGRyLT5kYWRkciwgZGFkZHIsIFdMQU5fRVRIQUREUl9MRU4pOworCQltZW1jcHkoZV9oZHItPnNhZGRyLCBzYWRkciwgV0xBTl9FVEhBRERSX0xFTik7CisKKwkJLyogY2hvcCBvZmYgdGhlIDgwMi4xMSBDUkMgKi8KKwkJc2tiX3RyaW0oc2tiLCBza2ItPmxlbiAtIFdMQU5fQ1JDX0xFTik7CisJfSBlbHNlIHsKKwkJV0xBTl9MT0dfREVCVUcoMywgIk5PTi1FTkNBUCBsZW46ICVkXG4iLCBwYXlsb2FkX2xlbmd0aCk7CisJCS8qIGFueSBOT04tRU5DQVAgKi8KKwkJLyogaXQncyBhIGdlbmVyaWMgODAyMTErTExDIG9yIElQWCAnUmF3IDgwMi4zJyAqLworCQkvKiAgYnVpbGQgYW4gODAyLjMgZnJhbWUgKi8KKwkJLyogYWxsb2NhdGUgc3BhY2UgYW5kIHNldHVwIGhvc3RidWYgKi8KKworCQkvKiBUZXN0IGZvciBhbiBvdmVybGVuZ3RoIGZyYW1lICovCisJCWlmICggcGF5bG9hZF9sZW5ndGggPiBuZXRkZXYtPm10dSApIHsKKwkJCS8qIEEgYm9ndXMgbGVuZ3RoIGV0aGZybSBoYXMgYmVlbiBzZW50LiAqLworCQkJLyogSXMgc29tZW9uZSB0cnlpbmcgYW4gb2Zsb3cgYXR0YWNrPyAqLworCQkJV0xBTl9MT0dfRVJST1IoIk9USEVSIGZyYW1lIHRvbyBsYXJnZSAoJWQgPiAlZClcbiIsCisJCQkJcGF5bG9hZF9sZW5ndGgsCisJCQkJbmV0ZGV2LT5tdHUpOworCQkJcmV0dXJuIDE7CisJCX0KKworCQkvKiBDaG9wIG9mZiB0aGUgODAyLjExIGhlYWRlci4gKi8KKwkJc2tiX3B1bGwoc2tiLCBwYXlsb2FkX29mZnNldCk7CisKKwkJLyogY3JlYXRlIDgwMi4zIGhlYWRlciBhdCBiZWdpbm5pbmcgb2Ygc2tiLiAqLworCQllX2hkciA9ICh3bGFuX2V0aGhkcl90ICopIHNrYl9wdXNoKHNrYiwgV0xBTl9FVEhIRFJfTEVOKTsKKwkJbWVtY3B5KGVfaGRyLT5kYWRkciwgZGFkZHIsIFdMQU5fRVRIQUREUl9MRU4pOworCQltZW1jcHkoZV9oZHItPnNhZGRyLCBzYWRkciwgV0xBTl9FVEhBRERSX0xFTik7CisJCWVfaGRyLT50eXBlID0gaHRvbnMocGF5bG9hZF9sZW5ndGgpOworCisJCS8qIGNob3Agb2ZmIHRoZSA4MDIuMTEgQ1JDICovCisJCXNrYl90cmltKHNrYiwgc2tiLT5sZW4gLSBXTEFOX0NSQ19MRU4pOworCisJfQorCisJc2tiLT5wcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHNrYiwgbmV0ZGV2KTsKKwlza2JfcmVzZXRfbWFjX2hlYWRlcihza2IpOworCisgICAgICAgIC8qIGprcmllZ2w6IHByb2Nlc3Mgc2lnbmFsIGFuZCBub2lzZSBhcyBzZXQgaW4gaGZhMzg0eF9pbnRfcngoKSAqLworCS8qIGprcmllZ2w6IG9ubHkgcHJvY2VzcyBzaWduYWwvbm9pc2UgaWYgcmVxdWVzdGVkIGJ5IGl3c3B5ICovCisgICAgICAgIGlmICh3bGFuZGV2LT5zcHlfbnVtYmVyKQorICAgICAgICAgICAgICAgIG9yaW5vY29fc3B5X2dhdGhlcih3bGFuZGV2LCBldGhfaGRyKHNrYiktPmhfc291cmNlLCBQODAyMTFTS0JfUlhNRVRBKHNrYikpOworCisJLyogRnJlZSB0aGUgbWV0YWRhdGEgKi8KKwlwODAyMTFza2JfcnhtZXRhX2RldGFjaChza2IpOworCisJREJGRVhJVDsKKwlyZXR1cm4gMDsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIHA4MDIxMV9zdHRfZmluZHByb3RvCisqCisqIFNlYXJjaGVzIHRoZSA4MDIuMWggU2VsZWN0aXZlIFRyYW5zbGF0aW9uIFRhYmxlIGZvciBhIGdpdmVuCisqIHByb3RvY29sLgorKgorKiBBcmd1bWVudHM6CisqCXByb3RvCXByb3RvY2wgbnVtYmVyIChpbiBob3N0IG9yZGVyKSB0byBzZWFyY2ggZm9yLgorKgorKiBSZXR1cm5zOgorKgkxIC0gaWYgdGhlIHRhYmxlIGlzIGVtcHR5IG9yIGEgbWF0Y2ggaXMgZm91bmQuCisqCTAgLSBpZiB0aGUgdGFibGUgaXMgbm9uLWVtcHR5IGFuZCBhIG1hdGNoIGlzIG5vdCBmb3VuZC4KKyoKKyogQ2FsbCBjb250ZXh0OgorKglNYXkgYmUgY2FsbGVkIGluIGludGVycnVwdCBvciBub24taW50ZXJydXB0IGNvbnRleHQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworaW50IHA4MDIxMV9zdHRfZmluZHByb3RvKFVJTlQxNiBwcm90bykKK3sKKwkvKiBBbHdheXMgcmV0dXJuIGZvdW5kIGZvciBub3cuICBUaGlzIGlzIHRoZSBiZWhhdmlvciB1c2VkIGJ5IHRoZSAqLworCS8qICBab29tIFdpbjk1IGRyaXZlciB3aGVuIDgwMi4xaCBtb2RlIGlzIHNlbGVjdGVkICovCisJLyogVE9ETzogSWYgbmVjZXNzYXJ5LCBhZGQgYW4gYWN0dWFsIHNlYXJjaCB3ZSdsbCBwcm9iYWJseQorCQkgbmVlZCB0aGlzIHRvIG1hdGNoIHRoZSBDTUFDJ3Mgd2F5IG9mIGRvaW5nIHRoaW5ncy4KKwkJIE5lZWQgdG8gZG8gc29tZSB0ZXN0aW5nIHRvIGNvbmZpcm0uCisJKi8KKworCWlmIChwcm90byA9PSAweDgwZjMpICAvKiBBUFBMRVRBTEsgKi8KKwkJcmV0dXJuIDE7CisKKwlyZXR1cm4gMDsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIHA4MDIxMXNrYl9yeG1ldGFfZGV0YWNoCisqCisqIERpc2Nvbm5lY3RzIHRoZSBmcm1tZXRhIGFuZCByeG1ldGEgZnJvbSBhbiBza2IuCisqCisqIEFyZ3VtZW50czoKKyoJd2xhbmRldgkJVGhlIHdsYW5kZXYgdGhpcyBza2IgYmVsb25ncyB0by4KKyoJc2tiCQlUaGUgc2tiIHdlJ3JlIGF0dGFjaGluZyB0by4KKyoKKyogUmV0dXJuczoKKyoJMCBvbiBzdWNjZXNzLCBub24temVybyBvdGhlcndpc2UKKyoKKyogQ2FsbCBjb250ZXh0OgorKglNYXkgYmUgY2FsbGVkIGluIGludGVycnVwdCBvciBub24taW50ZXJydXB0IGNvbnRleHQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwordm9pZAorcDgwMjExc2tiX3J4bWV0YV9kZXRhY2goc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlwODAyMTFfcnhtZXRhX3QJCSpyeG1ldGE7CisJcDgwMjExX2ZybW1ldGFfdAkqZnJtbWV0YTsKKworCURCRkVOVEVSOworCS8qIFNhbml0eSBjaGVja3MgKi8KKwlpZiAoIHNrYj09TlVMTCApIHsJCQkvKiBiYWQgc2tiICovCisJCVdMQU5fTE9HX0RFQlVHKDEsICJDYWxsZWQgdy8gbnVsbCBza2IuXG4iKTsKKwkJZ290byBleGl0OworCX0KKwlmcm1tZXRhID0gUDgwMjExU0tCX0ZSTU1FVEEoc2tiKTsKKwlpZiAoIGZybW1ldGEgPT0gTlVMTCApIHsgCQkvKiBubyBtYWdpYyAqLworCQlXTEFOX0xPR19ERUJVRygxLCAiQ2FsbGVkIHcvIGJhZCBmcm1tZXRhIG1hZ2ljLlxuIik7CisJCWdvdG8gZXhpdDsKKwl9CisJcnhtZXRhID0gZnJtbWV0YS0+cng7CisJaWYgKCByeG1ldGEgPT0gTlVMTCApIHsJCQkvKiBiYWQgbWV0YSBwdHIgKi8KKwkJV0xBTl9MT0dfREVCVUcoMSwgIkNhbGxlZCB3LyBiYWQgcnhtZXRhIHB0ci5cbiIpOworCQlnb3RvIGV4aXQ7CisJfQorCisJLyogRnJlZSByeG1ldGEgKi8KKwlrZnJlZShyeG1ldGEpOworCisJLyogQ2xlYXIgc2tiLT5jYiAqLworCW1lbXNldChza2ItPmNiLCAwLCBzaXplb2Yoc2tiLT5jYikpOworZXhpdDoKKwlEQkZFWElUOworCXJldHVybjsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIHA4MDIxMXNrYl9yeG1ldGFfYXR0YWNoCisqCisqIEFsbG9jYXRlcyBhIHA4MDIxMXJ4bWV0YSBzdHJ1Y3R1cmUsIGluaXRpYWxpemVzIGl0LCBhbmQgYXR0YWNoZXMKKyogaXQgdG8gYW4gc2tiLgorKgorKiBBcmd1bWVudHM6CisqCXdsYW5kZXYJCVRoZSB3bGFuZGV2IHRoaXMgc2tiIGJlbG9uZ3MgdG8uCisqCXNrYgkJVGhlIHNrYiB3ZSdyZSBhdHRhY2hpbmcgdG8uCisqCisqIFJldHVybnM6CisqCTAgb24gc3VjY2Vzcywgbm9uLXplcm8gb3RoZXJ3aXNlCisqCisqIENhbGwgY29udGV4dDoKKyoJTWF5IGJlIGNhbGxlZCBpbiBpbnRlcnJ1cHQgb3Igbm9uLWludGVycnVwdCBjb250ZXh0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK2ludAorcDgwMjExc2tiX3J4bWV0YV9hdHRhY2goc3RydWN0IHdsYW5kZXZpY2UgKndsYW5kZXYsIHN0cnVjdCBza19idWZmICpza2IpCit7CisJaW50CQkJcmVzdWx0ID0gMDsKKwlwODAyMTFfcnhtZXRhX3QJCSpyeG1ldGE7CisJcDgwMjExX2ZybW1ldGFfdAkqZnJtbWV0YTsKKworCURCRkVOVEVSOworCisJLyogSWYgdGhlc2UgYWxyZWFkeSBoYXZlIG1ldGFkYXRhLCB3ZSBlcnJvciBvdXQhICovCisJaWYgKFA4MDIxMVNLQl9SWE1FVEEoc2tiKSAhPSBOVUxMKSB7CisJCVdMQU5fTE9HX0VSUk9SKCIlczogUlhtZXRhIGFscmVhZHkgYXR0YWNoZWQhXG4iLAorCQkJCXdsYW5kZXYtPm5hbWUpOworCQlyZXN1bHQgPSAwOworCQlnb3RvIGV4aXQ7CisJfQorCisJLyogQWxsb2NhdGUgdGhlIHJ4bWV0YSAqLworCXJ4bWV0YSA9IGttYWxsb2Moc2l6ZW9mKHA4MDIxMV9yeG1ldGFfdCksIEdGUF9BVE9NSUMpOworCisJaWYgKCByeG1ldGEgPT0gTlVMTCApIHsKKwkJV0xBTl9MT0dfRVJST1IoIiVzOiBGYWlsZWQgdG8gYWxsb2NhdGUgcnhtZXRhLlxuIiwKKwkJCQl3bGFuZGV2LT5uYW1lKTsKKwkJcmVzdWx0ID0gMTsKKwkJZ290byBleGl0OworCX0KKworCS8qIEluaXRpYWxpemUgdGhlIHJ4bWV0YSAqLworCW1lbXNldChyeG1ldGEsIDAsIHNpemVvZihwODAyMTFfcnhtZXRhX3QpKTsKKwlyeG1ldGEtPndsYW5kZXYgPSB3bGFuZGV2OworCXJ4bWV0YS0+aG9zdHRpbWUgPSBqaWZmaWVzOworCisJLyogT3ZlcmxheSBhIGZybW1ldGFfdCBvbnRvIHNrYi0+Y2IgKi8KKwltZW1zZXQoc2tiLT5jYiwgMCwgc2l6ZW9mKHA4MDIxMV9mcm1tZXRhX3QpKTsKKwlmcm1tZXRhID0gKHA4MDIxMV9mcm1tZXRhX3QqKShza2ItPmNiKTsKKwlmcm1tZXRhLT5tYWdpYyA9IFA4MDIxMV9GUk1NRVRBX01BR0lDOworCWZybW1ldGEtPnJ4ID0gcnhtZXRhOworZXhpdDoKKwlEQkZFWElUOworCXJldHVybiByZXN1bHQ7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBwODAyMTFza2JfZnJlZQorKgorKiBGcmVlcyBhbiBlbnRpcmUgcDgwMjExc2tiIGJ5IGNoZWNraW5nIGFuZCBmcmVlaW5nIHRoZSBtZXRhIHN0cnVjdAorKiBhbmQgdGhlbiBmcmVlaW5nIHRoZSBza2IuCisqCisqIEFyZ3VtZW50czoKKyoJd2xhbmRldgkJVGhlIHdsYW5kZXYgdGhpcyBza2IgYmVsb25ncyB0by4KKyoJc2tiCQlUaGUgc2tiIHdlJ3JlIGF0dGFjaGluZyB0by4KKyoKKyogUmV0dXJuczoKKyoJMCBvbiBzdWNjZXNzLCBub24temVybyBvdGhlcndpc2UKKyoKKyogQ2FsbCBjb250ZXh0OgorKglNYXkgYmUgY2FsbGVkIGluIGludGVycnVwdCBvciBub24taW50ZXJydXB0IGNvbnRleHQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwordm9pZAorcDgwMjExc2tiX2ZyZWUoc3RydWN0IHdsYW5kZXZpY2UgKndsYW5kZXYsIHN0cnVjdCBza19idWZmICpza2IpCit7CisJcDgwMjExX2ZybW1ldGFfdAkqbWV0YTsKKwlEQkZFTlRFUjsKKwltZXRhID0gUDgwMjExU0tCX0ZSTU1FVEEoc2tiKTsKKwlpZiAoIG1ldGEgJiYgbWV0YS0+cngpIHsKKwkJcDgwMjExc2tiX3J4bWV0YV9kZXRhY2goc2tiKTsKKwl9IGVsc2UgeworCQlXTEFOX0xPR19FUlJPUigiRnJlZWluZyBhbiBza2IgKCVwKSB3LyBubyBmcm1tZXRhLlxuIiwgc2tiKTsKKwl9CisKKwlkZXZfa2ZyZWVfc2tiKHNrYik7CisJREJGRVhJVDsKKwlyZXR1cm47Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wODAyMTFjb252LmggYi9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wODAyMTFjb252LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2Y1YWI1N2MKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wODAyMTFjb252LmgKQEAgLTAsMCArMSwxODYgQEAKKy8qIHA4MDIxMWNvbnYuaAorKgorKiBFdGhlci84MDIuMTEgY29udmVyc2lvbnMgYW5kIHBhY2tldCBidWZmZXIgcm91dGluZXMKKyoKKyogQ29weXJpZ2h0IChDKSAxOTk5IEFic29sdXRlVmFsdWUgU3lzdGVtcywgSW5jLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyoKKyogbGludXgtd2xhbgorKgorKiAgIFRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgYXJlIHN1YmplY3QgdG8gdGhlIE1vemlsbGEgUHVibGljCisqICAgTGljZW5zZSBWZXJzaW9uIDEuMSAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUKKyogICBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YKKyogICB0aGUgTGljZW5zZSBhdCBodHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC8KKyoKKyogICBTb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMKKyogICBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yCisqICAgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nCisqICAgcmlnaHRzIGFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyoKKyogICBBbHRlcm5hdGl2ZWx5LCB0aGUgY29udGVudHMgb2YgdGhpcyBmaWxlIG1heSBiZSB1c2VkIHVuZGVyIHRoZQorKiAgIHRlcm1zIG9mIHRoZSBHTlUgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyICh0aGUgIkdQTCIpLCBpbiB3aGljaAorKiAgIGNhc2UgdGhlIHByb3Zpc2lvbnMgb2YgdGhlIEdQTCBhcmUgYXBwbGljYWJsZSBpbnN0ZWFkIG9mIHRoZQorKiAgIGFib3ZlLiAgSWYgeW91IHdpc2ggdG8gYWxsb3cgdGhlIHVzZSBvZiB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlCisqICAgb25seSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdQTCBhbmQgbm90IHRvIGFsbG93IG90aGVycyB0byB1c2UKKyogICB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIHVuZGVyIHRoZSBNUEwsIGluZGljYXRlIHlvdXIgZGVjaXNpb24KKyogICBieSBkZWxldGluZyB0aGUgcHJvdmlzaW9ucyBhYm92ZSBhbmQgcmVwbGFjZSB0aGVtIHdpdGggdGhlIG5vdGljZQorKiAgIGFuZCBvdGhlciBwcm92aXNpb25zIHJlcXVpcmVkIGJ5IHRoZSBHUEwuICBJZiB5b3UgZG8gbm90IGRlbGV0ZQorKiAgIHRoZSBwcm92aXNpb25zIGFib3ZlLCBhIHJlY2lwaWVudCBtYXkgdXNlIHlvdXIgdmVyc2lvbiBvZiB0aGlzCisqICAgZmlsZSB1bmRlciBlaXRoZXIgdGhlIE1QTCBvciB0aGUgR1BMLgorKgorKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKgorKiBJbnF1aXJpZXMgcmVnYXJkaW5nIHRoZSBsaW51eC13bGFuIE9wZW4gU291cmNlIHByb2plY3QgY2FuIGJlCisqIG1hZGUgZGlyZWN0bHkgdG86CisqCisqIEFic29sdXRlVmFsdWUgU3lzdGVtcyBJbmMuCisqIGluZm9AbGludXgtd2xhbi5jb20KKyogaHR0cDovL3d3dy5saW51eC13bGFuLmNvbQorKgorKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKgorKiBQb3J0aW9ucyBvZiB0aGUgZGV2ZWxvcG1lbnQgb2YgdGhpcyBzb2Z0d2FyZSB3ZXJlIGZ1bmRlZCBieQorKiBJbnRlcnNpbCBDb3Jwb3JhdGlvbiBhcyBwYXJ0IG9mIFBSSVNNKFIpIGNoaXBzZXQgcHJvZHVjdCBkZXZlbG9wbWVudC4KKyoKKyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyoKKyogVGhpcyBmaWxlIGRlY2xhcmVzIHRoZSBmdW5jdGlvbnMsIHR5cGVzIGFuZCBtYWNyb3MgdGhhdCBwZXJmb3JtCisqIEV0aGVybmV0IHRvL2Zyb20gODAyLjExIGZyYW1lIGNvbnZlcnNpb25zLgorKgorKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKi8KKworI2lmbmRlZiBfTElOVVhfUDgwMjExQ09OVl9ICisjZGVmaW5lIF9MSU5VWF9QODAyMTFDT05WX0gKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKy8qIENvbnN0YW50cyAqLworCisjZGVmaW5lIFdMQU5fRVRIQUREUl9MRU4JNgorI2RlZmluZSBXTEFOX0lFRUVfT1VJX0xFTgkzCisKKyNkZWZpbmUgV0xBTl9FVEhDT05WX0VOQ0FQCTEKKyNkZWZpbmUgV0xBTl9FVEhDT05WX1JGQzEwNDIJMgorI2RlZmluZSBXTEFOX0VUSENPTlZfODAyMWgJMworCisjZGVmaW5lIFdMQU5fTUlOX0VUSEZSTV9MRU4JNjAKKyNkZWZpbmUgV0xBTl9NQVhfRVRIRlJNX0xFTgkxNTE0CisjZGVmaW5lIFdMQU5fRVRISERSX0xFTgkJMTQKKworI2RlZmluZSBQODAyMTFDQVBUVVJFX1ZFUlNJT04JMHg4MDIxMTAwMQorCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworLyogTWFjcm9zICovCisKKyNkZWZpbmUJUDgwMjExX0ZSTU1FVEFfTUFHSUMJCTB4ODAyMTEwCisKKyNkZWZpbmUgUDgwMjExU0tCX0ZSTU1FVEEocykgXAorCSgoKCgocDgwMjExX2ZybW1ldGFfdCopKChzKS0+Y2IpKS0+bWFnaWMpPT1QODAyMTFfRlJNTUVUQV9NQUdJQykgPyBcCisJCSgocDgwMjExX2ZybW1ldGFfdCopKChzKS0+Y2IpKSA6IFwKKwkJKE5VTEwpKQorCisjZGVmaW5lIFA4MDIxMVNLQl9SWE1FVEEocykgXAorCShQODAyMTFTS0JfRlJNTUVUQSgocykpID8gIFA4MDIxMVNLQl9GUk1NRVRBKChzKSktPnJ4IDogKChwODAyMTFfcnhtZXRhX3QqKShOVUxMKSkpCisKK3R5cGVkZWYgc3RydWN0IHA4MDIxMV9yeG1ldGEKK3sKKwlzdHJ1Y3Qgd2xhbmRldmljZQkqd2xhbmRldjsKKworCVVJTlQ2NAltYWN0aW1lOwkvKiBIaS1yZXogTUFDLXN1cHBsaWVkIHRpbWUgdmFsdWUgKi8KKwlVSU5UNjQJaG9zdHRpbWU7CS8qIEJlc3QtcmV6IGhvc3Qgc3VwcGxpZWQgdGltZSB2YWx1ZSAqLworCisJVUlOVAlyeHJhdGU7CQkvKiBSZWNlaXZlIGRhdGEgcmF0ZSBpbiAxMDBrYnBzICovCisJVUlOVAlwcmlvcml0eTsJLyogMC0xNSwgMD1jb250ZW50aW9uLCA2PUNGICovCisJSU5UCXNpZ25hbDsJCS8qIEFuIFNTSSwgc2VlIHA4MDIxMW5ldGRldi5oICovCisJSU5UCW5vaXNlOwkJLyogQW4gU1NJLCBzZWUgcDgwMjExbmV0ZGV2LmggKi8KKwlVSU5UCWNoYW5uZWw7CS8qIFJlY2VpdmUgY2hhbm5lbCAobW9zdGx5IGZvciBzbmlmcykgKi8KKwlVSU5UCXByZWFtYmxlOwkvKiBQODAyMTFFTlVNX3ByZWFtYmxldHlwZV8qICovCisJVUlOVAllbmNvZGluZzsJLyogUDgwMjExRU5VTV9lbmNvZGluZ18qICovCisKK30gcDgwMjExX3J4bWV0YV90OworCit0eXBlZGVmIHN0cnVjdCBwODAyMTFfZnJtbWV0YQoreworCVVJTlQJCQltYWdpYzsKKwlwODAyMTFfcnhtZXRhX3QJCSpyeDsKK30gcDgwMjExX2ZybW1ldGFfdDsKKwordm9pZCBwODAyMTFza2JfZnJlZShzdHJ1Y3Qgd2xhbmRldmljZSAqd2xhbmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYik7CitpbnQgcDgwMjExc2tiX3J4bWV0YV9hdHRhY2goc3RydWN0IHdsYW5kZXZpY2UgKndsYW5kZXYsIHN0cnVjdCBza19idWZmICpza2IpOwordm9pZCBwODAyMTFza2JfcnhtZXRhX2RldGFjaChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKy8qIFR5cGVzICovCisKKy8qCisgKiBGcmFtZSBjYXB0dXJlIGhlYWRlci4gIChTZWUgZG9jL2NhcHR1cmVmcm0udHh0KQorICovCit0eXBlZGVmIHN0cnVjdCBwODAyMTFfY2FwaGRyCit7CisJVUlOVDMyCQl2ZXJzaW9uOworCVVJTlQzMgkJbGVuZ3RoOworCVVJTlQ2NAkJbWFjdGltZTsKKwlVSU5UNjQJCWhvc3R0aW1lOworCVVJTlQzMgkJcGh5dHlwZTsKKwlVSU5UMzIJCWNoYW5uZWw7CisJVUlOVDMyCQlkYXRhcmF0ZTsKKwlVSU5UMzIJCWFudGVubmE7CisJVUlOVDMyCQlwcmlvcml0eTsKKwlVSU5UMzIJCXNzaV90eXBlOworCUlOVDMyCQlzc2lfc2lnbmFsOworCUlOVDMyCQlzc2lfbm9pc2U7CisJVUlOVDMyCQlwcmVhbWJsZTsKKwlVSU5UMzIJCWVuY29kaW5nOworfSBwODAyMTFfY2FwaGRyX3Q7CisKKy8qIGJ1ZmZlciBmcmVlIG1ldGhvZCBwb2ludGVyIHR5cGUgKi8KK3R5cGVkZWYgdm9pZCAoKiBmcmVlYnVmX21ldGhvZF90KSh2b2lkICpidWYsIGludCBzaXplKTsKKwordHlwZWRlZiBzdHJ1Y3QgcDgwMjExX21ldGF3ZXAgeworCXZvaWQgICpkYXRhOworCVVJTlQ4IGl2WzRdOworCVVJTlQ4IGljdls0XTsKK30gcDgwMjExX21ldGF3ZXBfdDsKKworLyogbG9jYWwgZXRoZXIgaGVhZGVyIHR5cGUgKi8KK3R5cGVkZWYgc3RydWN0IHdsYW5fZXRoaGRyCit7CisJVUlOVDgJZGFkZHJbV0xBTl9FVEhBRERSX0xFTl07CisJVUlOVDgJc2FkZHJbV0xBTl9FVEhBRERSX0xFTl07CisJVUlOVDE2CXR5cGU7Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIHdsYW5fZXRoaGRyX3Q7CisKKy8qIGxvY2FsIGxsYyBoZWFkZXIgdHlwZSAqLwordHlwZWRlZiBzdHJ1Y3Qgd2xhbl9sbGMKK3sKKwlVSU5UOAlkc2FwOworCVVJTlQ4CXNzYXA7CisJVUlOVDgJY3RsOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyB3bGFuX2xsY190OworCisvKiBsb2NhbCBzbmFwIGhlYWRlciB0eXBlICovCit0eXBlZGVmIHN0cnVjdCB3bGFuX3NuYXAKK3sKKwlVSU5UOAlvdWlbV0xBTl9JRUVFX09VSV9MRU5dOworCVVJTlQxNgl0eXBlOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyB3bGFuX3NuYXBfdDsKKworLyogQ2lyY3VsYXIgaW5jbHVkZSB0cmljayAqLworc3RydWN0IHdsYW5kZXZpY2U7CisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKiBFeHRlcm5zICovCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKkZ1bmN0aW9uIERlY2xhcmF0aW9ucyAqLworCitpbnQgc2tiX3A4MDIxMV90b19ldGhlciggc3RydWN0IHdsYW5kZXZpY2UgKndsYW5kZXYsIFVJTlQzMiBldGhjb252LAorCQkJIHN0cnVjdCBza19idWZmICpza2IpOworaW50IHNrYl9ldGhlcl90b19wODAyMTEoIHN0cnVjdCB3bGFuZGV2aWNlICp3bGFuZGV2LCBVSU5UMzIgZXRoY29udiwKKwkJCSBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBwODAyMTFfaGRyX3QgKnA4MDIxMV9oZHIsCisJCQkgcDgwMjExX21ldGF3ZXBfdCAqcDgwMjExX3dlcCApOworCitpbnQgcDgwMjExX3N0dF9maW5kcHJvdG8oVUlOVDE2IHByb3RvKTsKK2ludCBwODAyMTFfc3R0X2FkZHByb3RvKFVJTlQxNiBwcm90byk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcDgwMjExaGRyLmggYi9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wODAyMTFoZHIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iN2IwODcyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcDgwMjExaGRyLmgKQEAgLTAsMCArMSwyOTkgQEAKKy8qIHA4MDIxMWhkci5oCisqCisqIE1hY3JvcywgdHlwZXMsIGFuZCBmdW5jdGlvbnMgZm9yIGhhbmRsaW5nIDgwMi4xMSBNQUMgaGVhZGVycworKgorKiBDb3B5cmlnaHQgKEMpIDE5OTkgQWJzb2x1dGVWYWx1ZSBTeXN0ZW1zLCBJbmMuICBBbGwgUmlnaHRzIFJlc2VydmVkLgorKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKgorKiBsaW51eC13bGFuCisqCisqICAgVGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBhcmUgc3ViamVjdCB0byB0aGUgTW96aWxsYSBQdWJsaWMKKyogICBMaWNlbnNlIFZlcnNpb24gMS4xICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZQorKiAgIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZgorKiAgIHRoZSBMaWNlbnNlIGF0IGh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBMLworKgorKiAgIFNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUworKiAgIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IKKyogICBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcKKyogICByaWdodHMgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorKgorKiAgIEFsdGVybmF0aXZlbHksIHRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgbWF5IGJlIHVzZWQgdW5kZXIgdGhlCisqICAgdGVybXMgb2YgdGhlIEdOVSBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgKHRoZSAiR1BMIiksIGluIHdoaWNoCisqICAgY2FzZSB0aGUgcHJvdmlzaW9ucyBvZiB0aGUgR1BMIGFyZSBhcHBsaWNhYmxlIGluc3RlYWQgb2YgdGhlCisqICAgYWJvdmUuICBJZiB5b3Ugd2lzaCB0byBhbGxvdyB0aGUgdXNlIG9mIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUKKyogICBvbmx5IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR1BMIGFuZCBub3QgdG8gYWxsb3cgb3RoZXJzIHRvIHVzZQorKiAgIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgdW5kZXIgdGhlIE1QTCwgaW5kaWNhdGUgeW91ciBkZWNpc2lvbgorKiAgIGJ5IGRlbGV0aW5nIHRoZSBwcm92aXNpb25zIGFib3ZlIGFuZCByZXBsYWNlIHRoZW0gd2l0aCB0aGUgbm90aWNlCisqICAgYW5kIG90aGVyIHByb3Zpc2lvbnMgcmVxdWlyZWQgYnkgdGhlIEdQTC4gIElmIHlvdSBkbyBub3QgZGVsZXRlCisqICAgdGhlIHByb3Zpc2lvbnMgYWJvdmUsIGEgcmVjaXBpZW50IG1heSB1c2UgeW91ciB2ZXJzaW9uIG9mIHRoaXMKKyogICBmaWxlIHVuZGVyIGVpdGhlciB0aGUgTVBMIG9yIHRoZSBHUEwuCisqCisqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqCisqIElucXVpcmllcyByZWdhcmRpbmcgdGhlIGxpbnV4LXdsYW4gT3BlbiBTb3VyY2UgcHJvamVjdCBjYW4gYmUKKyogbWFkZSBkaXJlY3RseSB0bzoKKyoKKyogQWJzb2x1dGVWYWx1ZSBTeXN0ZW1zIEluYy4KKyogaW5mb0BsaW51eC13bGFuLmNvbQorKiBodHRwOi8vd3d3LmxpbnV4LXdsYW4uY29tCisqCisqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqCisqIFBvcnRpb25zIG9mIHRoZSBkZXZlbG9wbWVudCBvZiB0aGlzIHNvZnR3YXJlIHdlcmUgZnVuZGVkIGJ5CisqIEludGVyc2lsIENvcnBvcmF0aW9uIGFzIHBhcnQgb2YgUFJJU00oUikgY2hpcHNldCBwcm9kdWN0IGRldmVsb3BtZW50LgorKgorKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKgorKiBUaGlzIGZpbGUgZGVjbGFyZXMgdGhlIGNvbnN0YW50cyBhbmQgdHlwZXMgdXNlZCBpbiB0aGUgaW50ZXJmYWNlCisqIGJldHdlZW4gYSB3bGFuIGRyaXZlciBhbmQgdGhlIHVzZXIgbW9kZSB1dGlsaXRpZXMuCisqCisqIE5vdGU6CisqICAtIENvbnN0YW50IHZhbHVlcyBhcmUgYWx3YXlzIGluIEhPU1QgYnl0ZSBvcmRlci4gIFRvIGFzc2lnbgorKiAgICB2YWx1ZXMgdG8gbXVsdGktYnl0ZSBmaWVsZHMgdGhleSBfbXVzdF8gYmUgY29udmVydGVkIHRvCisqICAgIGllZWUgYnl0ZSBvcmRlci4gIFRvIHJldHJpZXZlIG11bHRpLWJ5dGUgdmFsdWVzIGZyb20gaW5jb21pbmcKKyogICAgZnJhbWVzLCB0aGV5IG11c3QgYmUgY29udmVydGVkIHRvIGhvc3Qgb3JkZXIuCisqCisqIEFsbCBmdW5jdGlvbnMgZGVjbGFyZWQgaGVyZSBhcmUgaW1wbGVtZW50ZWQgaW4gcDgwMjExLmMKKyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyovCisKKyNpZm5kZWYgX1A4MDIxMUhEUl9ICisjZGVmaW5lIF9QODAyMTFIRFJfSAorCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworLyogU3lzdGVtIEluY2x1ZGVzICovCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKiBQcm9qZWN0IEluY2x1ZGVzICovCisKKyNpZm5kZWYgIF9XTEFOX0NPTVBBVF9ICisjaW5jbHVkZSAid2xhbl9jb21wYXQuaCIKKyNlbmRpZgorCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKiBDb25zdGFudHMgKi8KKworLyotLS0gU2l6ZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2RlZmluZSBXTEFOX0FERFJfTEVOCQkJNgorI2RlZmluZSBXTEFOX0NSQ19MRU4JCQk0CisjZGVmaW5lIFdMQU5fQlNTSURfTEVOCQkJNgorI2RlZmluZSBXTEFOX0JTU19UU19MRU4JCQk4CisjZGVmaW5lIFdMQU5fSERSX0EzX0xFTgkJCTI0CisjZGVmaW5lIFdMQU5fSERSX0E0X0xFTgkJCTMwCisjZGVmaW5lIFdMQU5fU1NJRF9NQVhMRU4JCTMyCisjZGVmaW5lIFdMQU5fREFUQV9NQVhMRU4JCTIzMTIKKyNkZWZpbmUgV0xBTl9BM0ZSX01BWExFTgkJKFdMQU5fSERSX0EzX0xFTiArIFdMQU5fREFUQV9NQVhMRU4gKyBXTEFOX0NSQ19MRU4pCisjZGVmaW5lIFdMQU5fQTRGUl9NQVhMRU4JCShXTEFOX0hEUl9BNF9MRU4gKyBXTEFOX0RBVEFfTUFYTEVOICsgV0xBTl9DUkNfTEVOKQorI2RlZmluZSBXTEFOX0JFQUNPTl9GUl9NQVhMRU4JCShXTEFOX0hEUl9BM19MRU4gKyAzMzQpCisjZGVmaW5lIFdMQU5fQVRJTV9GUl9NQVhMRU4JCShXTEFOX0hEUl9BM19MRU4gKyAwKQorI2RlZmluZSBXTEFOX0RJU0FTU09DX0ZSX01BWExFTgkJKFdMQU5fSERSX0EzX0xFTiArIDIpCisjZGVmaW5lIFdMQU5fQVNTT0NSRVFfRlJfTUFYTEVOCQkoV0xBTl9IRFJfQTNfTEVOICsgNDgpCisjZGVmaW5lIFdMQU5fQVNTT0NSRVNQX0ZSX01BWExFTgkoV0xBTl9IRFJfQTNfTEVOICsgMTYpCisjZGVmaW5lIFdMQU5fUkVBU1NPQ1JFUV9GUl9NQVhMRU4JKFdMQU5fSERSX0EzX0xFTiArIDU0KQorI2RlZmluZSBXTEFOX1JFQVNTT0NSRVNQX0ZSX01BWExFTgkoV0xBTl9IRFJfQTNfTEVOICsgMTYpCisjZGVmaW5lIFdMQU5fUFJPQkVSRVFfRlJfTUFYTEVOCQkoV0xBTl9IRFJfQTNfTEVOICsgNDQpCisjZGVmaW5lIFdMQU5fUFJPQkVSRVNQX0ZSX01BWExFTgkoV0xBTl9IRFJfQTNfTEVOICsgNzgpCisjZGVmaW5lIFdMQU5fQVVUSEVOX0ZSX01BWExFTgkJKFdMQU5fSERSX0EzX0xFTiArIDI2MSkKKyNkZWZpbmUgV0xBTl9ERUFVVEhFTl9GUl9NQVhMRU4JCShXTEFOX0hEUl9BM19MRU4gKyAyKQorI2RlZmluZSBXTEFOX1dFUF9OS0VZUwkJCTQKKyNkZWZpbmUgV0xBTl9XRVBfTUFYS0VZTEVOCQkxMworI2RlZmluZSBXTEFOX0NIQUxMRU5HRV9JRV9MRU4JCTEzMAorI2RlZmluZSBXTEFOX0NIQUxMRU5HRV9MRU4JCTEyOAorI2RlZmluZSBXTEFOX1dFUF9JVl9MRU4JCQk0CisjZGVmaW5lIFdMQU5fV0VQX0lDVl9MRU4JCTQKKworLyotLS0gRnJhbWUgQ29udHJvbCBGaWVsZCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qIEZyYW1lIFR5cGVzICovCisjZGVmaW5lIFdMQU5fRlRZUEVfTUdNVAkJCTB4MDAKKyNkZWZpbmUgV0xBTl9GVFlQRV9DVEwJCQkweDAxCisjZGVmaW5lIFdMQU5fRlRZUEVfREFUQQkJCTB4MDIKKworLyogRnJhbWUgc3VidHlwZXMgKi8KKy8qIE1hbmFnZW1lbnQgKi8KKyNkZWZpbmUgV0xBTl9GU1RZUEVfQVNTT0NSRVEJCTB4MDAKKyNkZWZpbmUgV0xBTl9GU1RZUEVfQVNTT0NSRVNQCQkweDAxCisjZGVmaW5lIFdMQU5fRlNUWVBFX1JFQVNTT0NSRVEJCTB4MDIKKyNkZWZpbmUgV0xBTl9GU1RZUEVfUkVBU1NPQ1JFU1AJCTB4MDMKKyNkZWZpbmUgV0xBTl9GU1RZUEVfUFJPQkVSRVEJCTB4MDQKKyNkZWZpbmUgV0xBTl9GU1RZUEVfUFJPQkVSRVNQCQkweDA1CisjZGVmaW5lIFdMQU5fRlNUWVBFX0JFQUNPTgkJMHgwOAorI2RlZmluZSBXTEFOX0ZTVFlQRV9BVElNCQkweDA5CisjZGVmaW5lIFdMQU5fRlNUWVBFX0RJU0FTU09DCQkweDBhCisjZGVmaW5lIFdMQU5fRlNUWVBFX0FVVEhFTgkJMHgwYgorI2RlZmluZSBXTEFOX0ZTVFlQRV9ERUFVVEhFTgkJMHgwYworCisvKiBDb250cm9sICovCisjZGVmaW5lIFdMQU5fRlNUWVBFX0JMT0NLQUNLUkVRCQkweDgKKyNkZWZpbmUgV0xBTl9GU1RZUEVfQkxPQ0tBQ0sgIAkJMHg5CisjZGVmaW5lIFdMQU5fRlNUWVBFX1BTUE9MTAkJMHgwYQorI2RlZmluZSBXTEFOX0ZTVFlQRV9SVFMJCQkweDBiCisjZGVmaW5lIFdMQU5fRlNUWVBFX0NUUwkJCTB4MGMKKyNkZWZpbmUgV0xBTl9GU1RZUEVfQUNLCQkJMHgwZAorI2RlZmluZSBXTEFOX0ZTVFlQRV9DRkVORAkJMHgwZQorI2RlZmluZSBXTEFOX0ZTVFlQRV9DRkVORENGQUNLCQkweDBmCisKKy8qIERhdGEgKi8KKyNkZWZpbmUgV0xBTl9GU1RZUEVfREFUQU9OTFkJCTB4MDAKKyNkZWZpbmUgV0xBTl9GU1RZUEVfREFUQV9DRkFDSwkJMHgwMQorI2RlZmluZSBXTEFOX0ZTVFlQRV9EQVRBX0NGUE9MTAkJMHgwMgorI2RlZmluZSBXTEFOX0ZTVFlQRV9EQVRBX0NGQUNLX0NGUE9MTAkweDAzCisjZGVmaW5lIFdMQU5fRlNUWVBFX05VTEwJCTB4MDQKKyNkZWZpbmUgV0xBTl9GU1RZUEVfQ0ZBQ0sJCTB4MDUKKyNkZWZpbmUgV0xBTl9GU1RZUEVfQ0ZQT0xMCQkweDA2CisjZGVmaW5lIFdMQU5fRlNUWVBFX0NGQUNLX0NGUE9MTAkweDA3CisKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKy8qIE1hY3JvcyAqLworCisvKi0tLSBGQyBNYWNyb3MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiBNYWNyb3MgdG8gZ2V0L3NldCB0aGUgYml0ZmllbGRzIG9mIHRoZSBGcmFtZSBDb250cm9sIEZpZWxkICovCisvKiAgR0VUX0ZDXz8/PyAtIHRha2VzIHRoZSBob3N0IGJ5dGUtb3JkZXIgdmFsdWUgb2YgYW4gRkMgICAgICovCisvKiAgICAgICAgICAgICAgIGFuZCByZXRyaWV2ZXMgdGhlIHZhbHVlIG9mIG9uZSBvZiB0aGUgICAgICAgICovCisvKiAgICAgICAgICAgICAgIGJpdGZpZWxkcyBhbmQgbW92ZXMgdGhhdCB2YWx1ZSBzbyBpdHMgbHNiIGlzICovCisvKiAgICAgICAgICAgICAgIGluIGJpdCAwLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgU0VUX0ZDXz8/PyAtIHRha2VzIGEgaG9zdCBvcmRlciB2YWx1ZSBmb3Igb25lIG9mIHRoZSBGQyAgICovCisvKiAgICAgICAgICAgICAgIGJpdGZpZWxkcyBhbmQgbW92ZXMgaXQgdG8gdGhlIHByb3BlciBiaXQgICAgICovCisvKiAgICAgICAgICAgICAgIGxvY2F0aW9uIGZvciBPUmluZyBpbnRvIGEgaG9zdCBvcmRlciBGQy4gICAgICovCisvKiAgICAgICAgICAgICAgIFRvIHNlbmQgdGhlIEZDIHByb2R1Y2VkIGZyb20gU0VUX0ZDXz8/PywgICAgICovCisvKiAgICAgICAgICAgICAgIG9uZSBtdXN0IHB1dCB0aGUgYnl0ZXMgaW4gSUVFRSBvcmRlci4gICAgICAgICovCisvKiAgZS5nLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgcHJpbnRmKCJ0aGUgZnJhbWUgc3VidHlwZSBpcyAleCIsICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgR0VUX0ZDX0ZUWVBFKCBpZWVlMmhvc3QoIHJ4LmZjICkpKSAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgdHguZmMgPSBob3N0MmllZWUoIFNFVF9GQ19GVFlQRShXTEFOX0ZUWVBfQ1RMKSB8ICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgIFNFVF9GQ19GU1RZUEUoV0xBTl9GU1RZUEVfUlRTKSApOyAgICovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKyNkZWZpbmUgV0xBTl9HRVRfRkNfUFZFUihuKQkgKCgoVUlOVDE2KShuKSkgJiAoQklUMCB8IEJJVDEpKQorI2RlZmluZSBXTEFOX0dFVF9GQ19GVFlQRShuKQkoKCgoVUlOVDE2KShuKSkgJiAoQklUMiB8IEJJVDMpKSA+PiAyKQorI2RlZmluZSBXTEFOX0dFVF9GQ19GU1RZUEUobikJKCgoKFVJTlQxNikobikpICYgKEJJVDR8QklUNXxCSVQ2fEJJVDcpKSA+PiA0KQorI2RlZmluZSBXTEFOX0dFVF9GQ19UT0RTKG4pIAkoKCgoVUlOVDE2KShuKSkgJiAoQklUOCkpID4+IDgpCisjZGVmaW5lIFdMQU5fR0VUX0ZDX0ZST01EUyhuKQkoKCgoVUlOVDE2KShuKSkgJiAoQklUOSkpID4+IDkpCisjZGVmaW5lIFdMQU5fR0VUX0ZDX01PUkVGUkFHKG4pICgoKChVSU5UMTYpKG4pKSAmIChCSVQxMCkpID4+IDEwKQorI2RlZmluZSBXTEFOX0dFVF9GQ19SRVRSWShuKQkoKCgoVUlOVDE2KShuKSkgJiAoQklUMTEpKSA+PiAxMSkKKyNkZWZpbmUgV0xBTl9HRVRfRkNfUFdSTUdUKG4pCSgoKChVSU5UMTYpKG4pKSAmIChCSVQxMikpID4+IDEyKQorI2RlZmluZSBXTEFOX0dFVF9GQ19NT1JFREFUQShuKSAoKCgoVUlOVDE2KShuKSkgJiAoQklUMTMpKSA+PiAxMykKKyNkZWZpbmUgV0xBTl9HRVRfRkNfSVNXRVAobikJKCgoKFVJTlQxNikobikpICYgKEJJVDE0KSkgPj4gMTQpCisjZGVmaW5lIFdMQU5fR0VUX0ZDX09SREVSKG4pCSgoKChVSU5UMTYpKG4pKSAmIChCSVQxNSkpID4+IDE1KQorCisjZGVmaW5lIFdMQU5fU0VUX0ZDX1BWRVIobikJKChVSU5UMTYpKG4pKQorI2RlZmluZSBXTEFOX1NFVF9GQ19GVFlQRShuKQkoKChVSU5UMTYpKG4pKSA8PCAyKQorI2RlZmluZSBXTEFOX1NFVF9GQ19GU1RZUEUobikJKCgoVUlOVDE2KShuKSkgPDwgNCkKKyNkZWZpbmUgV0xBTl9TRVRfRkNfVE9EUyhuKSAJKCgoVUlOVDE2KShuKSkgPDwgOCkKKyNkZWZpbmUgV0xBTl9TRVRfRkNfRlJPTURTKG4pCSgoKFVJTlQxNikobikpIDw8IDkpCisjZGVmaW5lIFdMQU5fU0VUX0ZDX01PUkVGUkFHKG4pICgoKFVJTlQxNikobikpIDw8IDEwKQorI2RlZmluZSBXTEFOX1NFVF9GQ19SRVRSWShuKQkoKChVSU5UMTYpKG4pKSA8PCAxMSkKKyNkZWZpbmUgV0xBTl9TRVRfRkNfUFdSTUdUKG4pCSgoKFVJTlQxNikobikpIDw8IDEyKQorI2RlZmluZSBXTEFOX1NFVF9GQ19NT1JFREFUQShuKSAoKChVSU5UMTYpKG4pKSA8PCAxMykKKyNkZWZpbmUgV0xBTl9TRVRfRkNfSVNXRVAobikJKCgoVUlOVDE2KShuKSkgPDwgMTQpCisjZGVmaW5lIFdMQU5fU0VUX0ZDX09SREVSKG4pCSgoKFVJTlQxNikobikpIDw8IDE1KQorCisvKi0tLSBEdXJhdGlvbiBNYWNyb3MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiBNYWNyb3MgdG8gZ2V0L3NldCB0aGUgYml0ZmllbGRzIG9mIHRoZSBEdXJhdGlvbiBGaWVsZCAgICAgICovCisvKiAgLSB0aGUgZHVyYXRpb24gdmFsdWUgaXMgb25seSB2YWxpZCB3aGVuIGJpdDE1IGlzIHplcm8gICAgICovCisvKiAgLSB0aGUgZmlybXdhcmUgaGFuZGxlcyB0aGVzZSB2YWx1ZXMsIHNvIEknbSBub3QgZ29pbmcgICAgICovCisvKiAgICB0aGVzZSBtYWNyb3MgcmlnaHQgbm93LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qLS0tIFNlcXVlbmNlIENvbnRyb2wgIE1hY3JvcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qIE1hY3JvcyB0byBnZXQvc2V0IHRoZSBiaXRmaWVsZHMgb2YgdGhlIFNlcXVlbmNlIENvbnRyb2wgICAgKi8KKy8qIEZpZWxkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNkZWZpbmUgV0xBTl9HRVRfU0VRX0ZSR05VTShuKSAoKChVSU5UMTYpKG4pKSAmIChCSVQwfEJJVDF8QklUMnxCSVQzKSkKKyNkZWZpbmUgV0xBTl9HRVRfU0VRX1NFUU5VTShuKSAoKCgoVUlOVDE2KShuKSkgJiAofihCSVQwfEJJVDF8QklUMnxCSVQzKSkpID4+IDQpCisKKy8qLS0tIERhdGEgcHRyIG1hY3JvIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qIENyZWF0ZXMgYSBVSU5UOCogdG8gdGhlIGRhdGEgcG9ydGlvbiBvZiBhIGZyYW1lICAgICAgICAgICAgKi8KKy8qIEFzc3VtZXMgeW91J3JlIHBhc3NpbmcgaW4gYSBwdHIgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgaGRyKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNkZWZpbmUgV0xBTl9IRFJfQTNfREFUQVAocCkgKCgoVUlOVDgqKShwKSkgKyBXTEFOX0hEUl9BM19MRU4pCisjZGVmaW5lIFdMQU5fSERSX0E0X0RBVEFQKHApICgoKFVJTlQ4KikocCkpICsgV0xBTl9IRFJfQTRfTEVOKQorCisjZGVmaW5lIERPVDExX1JBVEU1X0lTQkFTSUNfR0VUKHIpICAgICAoKChVSU5UOCkocikpICYgQklUNykKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKy8qIFR5cGVzICovCisKKy8qIEJTUyBUaW1lc3RhbXAgKi8KK3R5cGVkZWYgVUlOVDggd2xhbl9ic3NfdHNfdFtXTEFOX0JTU19UU19MRU5dOworCisvKiBHZW5lcmljIDgwMi4xMSBIZWFkZXIgdHlwZXMgKi8KKwordHlwZWRlZiBzdHJ1Y3QgcDgwMjExX2hkcl9hMworeworCVVJTlQxNglmYzsKKwlVSU5UMTYJZHVyOworCVVJTlQ4CWExW1dMQU5fQUREUl9MRU5dOworCVVJTlQ4CWEyW1dMQU5fQUREUl9MRU5dOworCVVJTlQ4CWEzW1dMQU5fQUREUl9MRU5dOworCVVJTlQxNglzZXE7Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIHA4MDIxMV9oZHJfYTNfdDsKKwordHlwZWRlZiBzdHJ1Y3QgcDgwMjExX2hkcl9hNAoreworCVVJTlQxNglmYzsKKwlVSU5UMTYJZHVyOworCVVJTlQ4CWExW1dMQU5fQUREUl9MRU5dOworCVVJTlQ4CWEyW1dMQU5fQUREUl9MRU5dOworCVVJTlQ4CWEzW1dMQU5fQUREUl9MRU5dOworCVVJTlQxNglzZXE7CisJVUlOVDgJYTRbV0xBTl9BRERSX0xFTl07Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIHA4MDIxMV9oZHJfYTRfdDsKKwordHlwZWRlZiB1bmlvbiBwODAyMTFfaGRyCit7CisJcDgwMjExX2hkcl9hM190CQlhMzsKKwlwODAyMTFfaGRyX2E0X3QJCWE0OworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBwODAyMTFfaGRyX3Q7CisKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKy8qIEV4dGVybiBEZWNsYXJhdGlvbnMgKi8KKworCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworLyogRnVuY3Rpb24gRGVjbGFyYXRpb25zICovCisKKy8qIEZyYW1lIGFuZCBoZWFkZXIgbGVuZ2h0IG1hY3JvcyAqLworCisjZGVmaW5lIFdMQU5fQ1RMX0ZSQU1FTEVOKGZzdHlwZSkgKFwKKwkoZnN0eXBlKSA9PSBXTEFOX0ZTVFlQRV9CTE9DS0FDS1JFUQk/IDI0IDogXAorCShmc3R5cGUpID09IFdMQU5fRlNUWVBFX0JMT0NLQUNLICAgCT8gMTUyIDogXAorCShmc3R5cGUpID09IFdMQU5fRlNUWVBFX1BTUE9MTAkJPyAyMCA6IFwKKwkoZnN0eXBlKSA9PSBXTEFOX0ZTVFlQRV9SVFMJCT8gMjAgOiBcCisJKGZzdHlwZSkgPT0gV0xBTl9GU1RZUEVfQ1RTCQk/IDE0IDogXAorCShmc3R5cGUpID09IFdMQU5fRlNUWVBFX0FDSwkJPyAxNCA6IFwKKwkoZnN0eXBlKSA9PSBXTEFOX0ZTVFlQRV9DRkVORAkJPyAyMCA6IFwKKwkoZnN0eXBlKSA9PSBXTEFOX0ZTVFlQRV9DRkVORENGQUNLCT8gMjAgOiA0KQorCisjZGVmaW5lIFdMQU5fRkNTX0xFTgkJCTQKKworLyogZnRjbCBpbiBIT1NUIG9yZGVyICovCitpbmxpbmUgc3RhdGljIFVJTlQxNiBwODAyMTFfaGVhZGVybGVuKFVJTlQxNiBmY3RsKQoreworCVVJTlQxNiBoZHJsZW4gPSAwOworCisJc3dpdGNoICggV0xBTl9HRVRfRkNfRlRZUEUoZmN0bCkgKSB7CisJY2FzZSBXTEFOX0ZUWVBFX01HTVQ6CisJCWhkcmxlbiA9IFdMQU5fSERSX0EzX0xFTjsKKwkJYnJlYWs7CisJY2FzZSBXTEFOX0ZUWVBFX0RBVEE6CisJCWhkcmxlbiA9IFdMQU5fSERSX0EzX0xFTjsKKwkJaWYgKCBXTEFOX0dFVF9GQ19UT0RTKGZjdGwpICYmIFdMQU5fR0VUX0ZDX0ZST01EUyhmY3RsKSApIHsKKwkJCWhkcmxlbiArPSBXTEFOX0FERFJfTEVOOworCQl9CisJCWJyZWFrOworCWNhc2UgV0xBTl9GVFlQRV9DVEw6CisJCWhkcmxlbiA9IFdMQU5fQ1RMX0ZSQU1FTEVOKFdMQU5fR0VUX0ZDX0ZTVFlQRShmY3RsKSkgLQorCQkJV0xBTl9GQ1NfTEVOOworCQlicmVhazsKKwlkZWZhdWx0OgorCQloZHJsZW4gPSBXTEFOX0hEUl9BM19MRU47CisJfQorCisJcmV0dXJuIGhkcmxlbjsKK30KKworI2VuZGlmIC8qIF9QODAyMTFIRFJfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcDgwMjExaW9jdGwuaCBiL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3A4MDIxMWlvY3RsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjViMmVhOAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3A4MDIxMWlvY3RsLmgKQEAgLTAsMCArMSwxMjMgQEAKKy8qIHA4MDIxMWlvY3RsLmgKKyoKKyogRGVjbGFyZXMgY29uc3RhbnRzIGFuZCB0eXBlcyBmb3IgdGhlIHA4MDIxMSBpb2N0bHMKKyoKKyogQ29weXJpZ2h0IChDKSAxOTk5IEFic29sdXRlVmFsdWUgU3lzdGVtcywgSW5jLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyoKKyogbGludXgtd2xhbgorKgorKiAgIFRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgYXJlIHN1YmplY3QgdG8gdGhlIE1vemlsbGEgUHVibGljCisqICAgTGljZW5zZSBWZXJzaW9uIDEuMSAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUKKyogICBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YKKyogICB0aGUgTGljZW5zZSBhdCBodHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC8KKyoKKyogICBTb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMKKyogICBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yCisqICAgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nCisqICAgcmlnaHRzIGFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyoKKyogICBBbHRlcm5hdGl2ZWx5LCB0aGUgY29udGVudHMgb2YgdGhpcyBmaWxlIG1heSBiZSB1c2VkIHVuZGVyIHRoZQorKiAgIHRlcm1zIG9mIHRoZSBHTlUgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyICh0aGUgIkdQTCIpLCBpbiB3aGljaAorKiAgIGNhc2UgdGhlIHByb3Zpc2lvbnMgb2YgdGhlIEdQTCBhcmUgYXBwbGljYWJsZSBpbnN0ZWFkIG9mIHRoZQorKiAgIGFib3ZlLiAgSWYgeW91IHdpc2ggdG8gYWxsb3cgdGhlIHVzZSBvZiB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlCisqICAgb25seSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdQTCBhbmQgbm90IHRvIGFsbG93IG90aGVycyB0byB1c2UKKyogICB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIHVuZGVyIHRoZSBNUEwsIGluZGljYXRlIHlvdXIgZGVjaXNpb24KKyogICBieSBkZWxldGluZyB0aGUgcHJvdmlzaW9ucyBhYm92ZSBhbmQgcmVwbGFjZSB0aGVtIHdpdGggdGhlIG5vdGljZQorKiAgIGFuZCBvdGhlciBwcm92aXNpb25zIHJlcXVpcmVkIGJ5IHRoZSBHUEwuICBJZiB5b3UgZG8gbm90IGRlbGV0ZQorKiAgIHRoZSBwcm92aXNpb25zIGFib3ZlLCBhIHJlY2lwaWVudCBtYXkgdXNlIHlvdXIgdmVyc2lvbiBvZiB0aGlzCisqICAgZmlsZSB1bmRlciBlaXRoZXIgdGhlIE1QTCBvciB0aGUgR1BMLgorKgorKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKgorKiBJbnF1aXJpZXMgcmVnYXJkaW5nIHRoZSBsaW51eC13bGFuIE9wZW4gU291cmNlIHByb2plY3QgY2FuIGJlCisqIG1hZGUgZGlyZWN0bHkgdG86CisqCisqIEFic29sdXRlVmFsdWUgU3lzdGVtcyBJbmMuCisqIGluZm9AbGludXgtd2xhbi5jb20KKyogaHR0cDovL3d3dy5saW51eC13bGFuLmNvbQorKgorKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKgorKiBQb3J0aW9ucyBvZiB0aGUgZGV2ZWxvcG1lbnQgb2YgdGhpcyBzb2Z0d2FyZSB3ZXJlIGZ1bmRlZCBieQorKiBJbnRlcnNpbCBDb3Jwb3JhdGlvbiBhcyBwYXJ0IG9mIFBSSVNNKFIpIGNoaXBzZXQgcHJvZHVjdCBkZXZlbG9wbWVudC4KKyoKKyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyoKKyogIFdoaWxlIHRoaXMgZmlsZSBpcyBjYWxsZWQgJ2lvY3RsJyBpcyBwdXJwb3NlIGdvZXMgYSBsaXR0bGUgYmV5b25kCisqICB0aGF0LiAgVGhpcyBmaWxlIGRlZmluZXMgdGhlIHR5cGVzIGFuZCBjb250YW50cyB1c2VkIHRvIGltcGxlbWVudAorKiAgdGhlIHA4MDIxMSByZXF1ZXN0L2NvbmZpcm0vaW5kaWNhdGUgaW50ZXJmYWNlcyBvbiBMaW51eC4gIFRoZQorKiAgcmVxdWVzdC9jb25maXJtIGludGVyZmFjZSBpcywgaW4gZmFjdCwgbm9ybWFsbHkgaW1wbGVtZW50ZWQgYXMgYW4KKyogIGlvY3RsLiAgVGhlIGluZGljYXRlIGludGVyZmFjZSBvbiB0aGUgb3RoZXIgaGFuZCwgaXMgaW1wbGVtZW50ZWQKKyogIHVzaW5nIHRoZSBMaW51eCAnbmV0bGluaycgaW50ZXJmYWNlLgorKgorKiAgVGhlIHJlYXNvbiBJIHNheSB0aGF0IHJlcXVlc3QvY29uZmlybSBpcyAnbm9ybWFsbHknIGltcGxlbWVudGVkCisqICB2aWEgaW9jdGwgaXMgdGhhdCB3ZSdyZSByZXNlcnZpbmcgdGhlIHJpZ2h0IHRvIGJlIGFibGUgdG8gc2VuZAorKiAgcmVxdWVzdCBjb21tYW5kcyB2aWEgdGhlIG5ldGxpbmsgaW50ZXJmYWNlLiAgVGhpcyB3aWxsIGJlIG5lY2Vzc2FyeQorKiAgaWYgd2UgZXZlciBuZWVkIHRvIHNlbmQgcmVxdWVzdCBtZXNzYWdlcyB3aGVuIHRoZXJlIGFyZW4ndCBhbnkKKyogIHdsYW4gbmV0d29yayBkZXZpY2VzIHByZXNlbnQgKGkuZS4gc2VuZGluZyBhIG1lc3NhZ2UgdGhhdCBvbmx5IHA4MDIxMQorKiAgY2FyZXMgYWJvdXQuCisqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqLworCisKKyNpZm5kZWYgX1A4MDIxMUlPQ1RMX0gKKyNkZWZpbmUgX1A4MDIxMUlPQ1RMX0gKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKy8qIENvbnN0YW50cyAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogcDgwMjExIGlvY3RsICJyZXF1ZXN0IiBjb2Rlcy4gIFNlZSBhcmd1bWVudCAyIG9mIGlvY3RsKDIpLiAqLworCisjZGVmaW5lIFA4MDIxMV9JRlRFU1QJCShTSU9DREVWUFJJVkFURSArIDApCisjZGVmaW5lIFA4MDIxMV9JRlJFUQkJKFNJT0NERVZQUklWQVRFICsgMSkKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qIE1hZ2ljIG51bWJlciwgYSBxdWljayB0ZXN0IHRvIHNlZSB3ZSdyZSBnZXR0aW5nIHRoZSBkZXNpcmVkIHN0cnVjdCAqLworCisjZGVmaW5lIFA4MDIxMV9JT0NUTF9NQUdJQwkoMHg0YTJkNDY0ZFVMKQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogTmV0bGluayBwcm90b2NvbCBudW1iZXJzIGZvciB0aGUgaW5kaWNhdGlvbiBpbnRlcmZhY2UgKi8KKworI2RlZmluZSBQODAyMTFfTkxfU09DS19JTkQJTkVUTElOS19VU0VSU09DSworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogTmV0bGluayBtdWx0aWNhc3QgYml0cyBmb3IgZGlmZmVyZW50IHR5cGVzIG9mIG1lc3NhZ2VzICovCisKKyNkZWZpbmUgUDgwMjExX05MX01DQVNUX0dSUF9NTE1FCUJJVDAJLyogTG9jYWwgc3RhdGlvbiBtZXNzYWdlcyAqLworI2RlZmluZSBQODAyMTFfTkxfTUNBU1RfR1JQX1NOSUZGCUJJVDEJLyogU25pZmZlciBtZXNzYWdlcyAqLworI2RlZmluZSBQODAyMTFfTkxfTUNBU1RfR1JQX0RJU1QJQklUMgkvKiBEaXN0cmlidXRpb24gc3lzdGVtIG1lc3NhZ2VzICovCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKiBNYWNyb3MgKi8KKworCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworLyogVHlwZXMgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qIEEgcHRyIHRvIHRoZSBmb2xsb3dpbmcgc3RydWN0dXJlIHR5cGUgaXMgcGFzc2VkIGFzIHRoZSB0aGlyZCAqLworLyogIGFyZ3VtZW50IHRvIHRoZSBpb2N0bCBzeXN0ZW0gY2FsbCB3aGVuIGlzc3VpbmcgYSByZXF1ZXN0IHRvICovCisvKiAgdGhlIHA4MDIxMSBtb2R1bGUuICovCisKK3R5cGVkZWYgc3RydWN0IHA4MDIxMWlvY3RsX3JlcQoreworCWNoYXIgCW5hbWVbV0xBTl9ERVZOQU1FTEVOX01BWF07CisJY2FkZHJfdCBkYXRhOworCVVJTlQzMgltYWdpYzsKKwlVSU5UMTYJbGVuOworCVVJTlQzMglyZXN1bHQ7Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIHA4MDIxMWlvY3RsX3JlcV90OworCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKiBFeHRlcm4gRGVjbGFyYXRpb25zICovCisKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKy8qIEZ1bmN0aW9uIERlY2xhcmF0aW9ucyAqLworCisKKyNlbmRpZiAvKiBfUDgwMjExSU9DVExfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcDgwMjExbWV0YS5oIGIvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcDgwMjExbWV0YS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVjYjNmNWEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wODAyMTFtZXRhLmgKQEAgLTAsMCArMSwxNjkgQEAKKy8qIHA4MDIxMW1ldGEuaAorKgorKiBNYWNyb3MsIGNvbnN0YW50cywgdHlwZXMsIGFuZCBmdW5jcyBmb3IgcDgwMjExIG1ldGFkYXRhCisqCisqIENvcHlyaWdodCAoQykgMTk5OSBBYnNvbHV0ZVZhbHVlIFN5c3RlbXMsIEluYy4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqCisqIGxpbnV4LXdsYW4KKyoKKyogICBUaGUgY29udGVudHMgb2YgdGhpcyBmaWxlIGFyZSBzdWJqZWN0IHRvIHRoZSBNb3ppbGxhIFB1YmxpYworKiAgIExpY2Vuc2UgVmVyc2lvbiAxLjEgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlCisqICAgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mCisqICAgdGhlIExpY2Vuc2UgYXQgaHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvCisqCisqICAgU29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTCisqICAgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvcgorKiAgIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZworKiAgIHJpZ2h0cyBhbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisqCisqICAgQWx0ZXJuYXRpdmVseSwgdGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBtYXkgYmUgdXNlZCB1bmRlciB0aGUKKyogICB0ZXJtcyBvZiB0aGUgR05VIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiAodGhlICJHUEwiKSwgaW4gd2hpY2gKKyogICBjYXNlIHRoZSBwcm92aXNpb25zIG9mIHRoZSBHUEwgYXJlIGFwcGxpY2FibGUgaW5zdGVhZCBvZiB0aGUKKyogICBhYm92ZS4gIElmIHlvdSB3aXNoIHRvIGFsbG93IHRoZSB1c2Ugb2YgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZQorKiAgIG9ubHkgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHUEwgYW5kIG5vdCB0byBhbGxvdyBvdGhlcnMgdG8gdXNlCisqICAgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSB1bmRlciB0aGUgTVBMLCBpbmRpY2F0ZSB5b3VyIGRlY2lzaW9uCisqICAgYnkgZGVsZXRpbmcgdGhlIHByb3Zpc2lvbnMgYWJvdmUgYW5kIHJlcGxhY2UgdGhlbSB3aXRoIHRoZSBub3RpY2UKKyogICBhbmQgb3RoZXIgcHJvdmlzaW9ucyByZXF1aXJlZCBieSB0aGUgR1BMLiAgSWYgeW91IGRvIG5vdCBkZWxldGUKKyogICB0aGUgcHJvdmlzaW9ucyBhYm92ZSwgYSByZWNpcGllbnQgbWF5IHVzZSB5b3VyIHZlcnNpb24gb2YgdGhpcworKiAgIGZpbGUgdW5kZXIgZWl0aGVyIHRoZSBNUEwgb3IgdGhlIEdQTC4KKyoKKyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyoKKyogSW5xdWlyaWVzIHJlZ2FyZGluZyB0aGUgbGludXgtd2xhbiBPcGVuIFNvdXJjZSBwcm9qZWN0IGNhbiBiZQorKiBtYWRlIGRpcmVjdGx5IHRvOgorKgorKiBBYnNvbHV0ZVZhbHVlIFN5c3RlbXMgSW5jLgorKiBpbmZvQGxpbnV4LXdsYW4uY29tCisqIGh0dHA6Ly93d3cubGludXgtd2xhbi5jb20KKyoKKyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyoKKyogUG9ydGlvbnMgb2YgdGhlIGRldmVsb3BtZW50IG9mIHRoaXMgc29mdHdhcmUgd2VyZSBmdW5kZWQgYnkKKyogSW50ZXJzaWwgQ29ycG9yYXRpb24gYXMgcGFydCBvZiBQUklTTShSKSBjaGlwc2V0IHByb2R1Y3QgZGV2ZWxvcG1lbnQuCisqCisqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqCisqIFRoaXMgZmlsZSBkZWNsYXJlcyBzb21lIG9mIHRoZSBjb25zdGFudHMgYW5kIHR5cGVzIHVzZWQgaW4gdmFyaW91cworKiBwYXJ0cyBvZiB0aGUgbGludXgtd2xhbiBzeXN0ZW0uCisqCisqIE5vdGVzOgorKiAgIC0gQ29uc3RhbnQgdmFsdWVzIGFyZSBhbHdheXMgaW4gSE9TVCBieXRlIG9yZGVyLgorKgorKiBBbGwgZnVuY3Rpb25zIGFuZCBzdGF0aWNzIGRlY2xhcmVkIGhlcmUgYXJlIGltcGxlbWVudGVkIGluIHA4MDIxMXR5cGVzLmMKKyogICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKi8KKworI2lmbmRlZiBfUDgwMjExTUVUQV9ICisjZGVmaW5lIF9QODAyMTFNRVRBX0gKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKy8qIFN5c3RlbSBJbmNsdWRlcyAqLworCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworLyogUHJvamVjdCBJbmNsdWRlcyAqLworCisjaWZuZGVmIF9XTEFOX0NPTVBBVF9ICisjaW5jbHVkZSAid2xhbl9jb21wYXQuaCIKKyNlbmRpZgorCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworLyogQ29uc3RhbnRzICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiAqLworCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworLyogTWFjcm9zICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiBUaGUgZm9sbG93aW5nIG1hY3JvcyBhcmUgdXNlZCB0byBlbnN1cmUgY29uc2lzdGVudCBuYW1pbmcgKi8KKy8qICBjb252ZW50aW9ucyBmb3IgYWxsIHRoZSBkaWZmZXJlbnQgbWV0YWRhdGEgbGlzdHMuICovCisKKyNkZWZpbmUgTUtSRVFNRVRBTkFNRShuYW1lKQkJcDgwMjExbWV0YV8gIyMgcmVxICMjIF8gIyMgbmFtZQorI2RlZmluZSBNS0lORE1FVEFOQU1FKG5hbWUpCQlwODAyMTFtZXRhXyAjIyBpbmQgIyMgXyAjIyBuYW1lCisjZGVmaW5lIE1LTUlCTUVUQU5BTUUobmFtZSkJCXA4MDIxMW1ldGFfICMjIG1pYiAjIyBfICMjIG5hbWUKKyNkZWZpbmUgTUtHUlBNRVRBTkFNRShuYW1lKQkJcDgwMjExbWV0YV8gIyMgZ3JwICMjIF8gIyMgbmFtZQorCisjZGVmaW5lIE1LUkVRTUVUQVNJWkUobmFtZSkJCXA4MDIxMW1ldGFfICMjIHJlcSAjIyBfICMjIG5hbWUgIyMgXyAjIyBzaXplCisjZGVmaW5lIE1LSU5ETUVUQVNJWkUobmFtZSkJCXA4MDIxMW1ldGFfICMjIGluZCAjIyBfICMjIG5hbWUgIyMgXyAjIyBzaXplCisjZGVmaW5lIE1LTUlCTUVUQVNJWkUobmFtZSkJCXA4MDIxMW1ldGFfICMjIG1pYiAjIyBfICMjIG5hbWUgIyMgXyAjIyBzaXplCisjZGVmaW5lIE1LR1JQTUVUQVNJWkUobmFtZSkJCXA4MDIxMW1ldGFfICMjIGdycCAjIyBfICMjIG5hbWUgIyMgXyAjIyBzaXplCisKKyNkZWZpbmUgR0VUTUVUQVNJWkUoYXB0cikJCSgqKigoVUlOVDMyKiopKGFwdHIpKSkKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qIFRoZSBmb2xsb3dpbmcgaWZkZWYgZGVwZW5kcyBvbiB0aGUgZm9sbG93aW5nIGRlZmluZXM6ICovCisvKiAgUDgwMjExX05PSU5DTFVERVNUUklOR1MgLSBpZiBkZWZpbmVkLCBhbGwgbWV0YWRhdGEgbmFtZSBmaWVsZHMgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZSBlbXB0eSBzdHJpbmdzICovCisKKyNpZmRlZiBQODAyMTFfTk9JTkNMVURFU1RSSU5HUworCSNkZWZpbmUJTUtJVEVNTkFNRShzKQkoIiIpCisjZWxzZQorCSNkZWZpbmUJTUtJVEVNTkFNRShzKQkocykKKyNlbmRpZgorCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworLyogVHlwZXMgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qIFRoZSBmb2xsb3dpbmcgc3RydWN0dXJlIHR5cGVzIGFyZSB1c2VkIGZvciB0aGUgbWV0YWRhdGEgKi8KKy8qIHJlcHJlc2VudGF0aW9uIG9mIGNhdGVnb3J5IGxpc3QgbWV0YWRhdGEsIGdyb3VwIGxpc3QgbWV0YWRhdGEsICovCisvKiBhbmQgZGF0YSBpdGVtIG1ldGFkYXRhIGZvciBib3RoIE1pYiBhbmQgTWVzc2FnZXMuICovCisKK3R5cGVkZWYgc3RydWN0IHA4MDIxMW1ldGEKK3sKKwljaGFyCQkJKm5hbWU7CQkvKiBkYXRhIGl0ZW0gbmFtZSAqLworCVVJTlQzMgkJCWRpZDsJCS8qIHBhcnRpYWwgZGlkICovCisJVUlOVDMyCQkJZmxhZ3M7CQkvKiBzZXQgb2YgdmFyaW91cyBmbGFnIGJpdHMgKi8KKwlVSU5UMzIJCQltaW47CQkvKiBtaW4gdmFsdWUgb2YgYSBCT1VOREVESU5UICovCisJVUlOVDMyCQkJbWF4OwkJLyogbWF4IHZhbHVlIG9mIGEgQk9VTkRFRElOVCAqLworCisJVUlOVDMyCQkJbWF4bGVuOwkJLyogbWF4bGVuIG9mIGEgT0NURVRTVFIgb3IgRElTUExBWVNUUiAqLworCVVJTlQzMgkJCW1pbmxlbjsJCS8qIG1pbmxlbiBvZiBhIE9DVEVUU1RSIG9yIERJU1BMQVlTVFIgKi8KKwlwODAyMTFlbnVtX3QJCSplbnVtcHRyOwkvKiBwdHIgdG8gdGhlIGVudW0gdHlwZSBmb3IgRU5VTUlOVCAqLworCXA4MDIxMV90b3RleHRfdAkJdG90ZXh0cHRyOwkvKiBwdHIgdG8gdG90ZXh0IGNvbnZlcnNpb24gZnVuY3Rpb24gKi8KKwlwODAyMTFfZnJvbXRleHRfdAlmcm9tdGV4dHB0cjsJLyogcHRyIHRvIHRvdGV4dCBjb252ZXJzaW9uIGZ1bmN0aW9uICovCisJcDgwMjExX3ZhbGlkX3QJCXZhbGlkZnVucHRyOwkvKiBwdHIgdG8gdG90ZXh0IGNvbnZlcnNpb24gZnVuY3Rpb24gKi8KK30gcDgwMjExbWV0YV90OworCit0eXBlZGVmIHN0cnVjdCBncnBsaXN0aXRlbQoreworCWNoYXIJCSpuYW1lOworCXA4MDIxMW1ldGFfdAkqaXRlbWxpc3Q7Cit9IGdycGxpc3RpdGVtX3Q7CisKK3R5cGVkZWYgc3RydWN0IGNhdGxpc3RpdGVtCit7CisJY2hhcgkJKm5hbWU7CisJZ3JwbGlzdGl0ZW1fdAkqZ3JwbGlzdDsKK30gY2F0bGlzdGl0ZW1fdDsKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKy8qIEV4dGVybiBEZWNsYXJhdGlvbnMgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qICovCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKiBGdW5jdGlvbiBEZWNsYXJhdGlvbnMgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qICovCitVSU5UMzIgcDgwMjExX3RleHQyZGlkKGNhdGxpc3RpdGVtX3QgKmNhdGxpc3QsIGNoYXIgKmNhdG5hbWUsIGNoYXIgKmdycG5hbWUsIGNoYXIgKml0ZW1uYW1lKTsKK1VJTlQzMiBwODAyMTFfdGV4dDJjYXRkaWQoY2F0bGlzdGl0ZW1fdCAqbGlzdCwgY2hhciAqbmFtZSApOworVUlOVDMyIHA4MDIxMV90ZXh0MmdycGRpZChncnBsaXN0aXRlbV90ICpsaXN0LCBjaGFyICpuYW1lICk7CitVSU5UMzIgcDgwMjExX3RleHQyaXRlbWRpZChwODAyMTFtZXRhX3QgKmxpc3QsIGNoYXIgKm5hbWUgKTsKK1VJTlQzMiBwODAyMTFfaXN2YWxpZF9kaWQoIGNhdGxpc3RpdGVtX3QgKmNhdGxpc3QsIFVJTlQzMiBkaWQgKTsKK1VJTlQzMiBwODAyMTFfaXN2YWxpZF9jYXRkaWQoIGNhdGxpc3RpdGVtX3QgKmNhdGxpc3QsIFVJTlQzMiBkaWQgKTsKK1VJTlQzMiBwODAyMTFfaXN2YWxpZF9ncnBkaWQoIGNhdGxpc3RpdGVtX3QgKmNhdGxpc3QsIFVJTlQzMiBkaWQgKTsKK1VJTlQzMiBwODAyMTFfaXN2YWxpZF9pdGVtZGlkKCBjYXRsaXN0aXRlbV90ICpjYXRsaXN0LCBVSU5UMzIgZGlkICk7CitjYXRsaXN0aXRlbV90ICpwODAyMTFfZGlkMmNhdCggY2F0bGlzdGl0ZW1fdCAqY2F0bGlzdCwgVUlOVDMyIGRpZCApOworZ3JwbGlzdGl0ZW1fdCAqcDgwMjExX2RpZDJncnAoIGNhdGxpc3RpdGVtX3QgKmNhdGxpc3QsIFVJTlQzMiBkaWQgKTsKK3A4MDIxMW1ldGFfdCAqcDgwMjExX2RpZDJpdGVtKCBjYXRsaXN0aXRlbV90ICpjYXRsaXN0LCBVSU5UMzIgZGlkICk7CitVSU5UMzIgcDgwMjExaXRlbV9tYXhkYXRhbGVuKCBzdHJ1Y3QgY2F0bGlzdGl0ZW0gKm1ldGFsaXN0LCBVSU5UMzIgZGlkICk7CitVSU5UMzIgcDgwMjExX21ldGFuYW1lMmRpZChzdHJ1Y3QgY2F0bGlzdGl0ZW0gKm1ldGFsaXN0LCBjaGFyICppdGVtbmFtZSk7CitVSU5UMzIgcDgwMjExaXRlbV9nZXRvZmZzZXQoIHN0cnVjdCBjYXRsaXN0aXRlbSAqbWV0YWxpc3QsIFVJTlQzMiBkaWQgKTsKK2ludCBwODAyMTFpdGVtX2dldHR5cGUocDgwMjExbWV0YV90ICptZXRhKTsKKworI2VuZGlmIC8qIF9QODAyMTFNRVRBX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3A4MDIxMW1ldGFkZWYuaCBiL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3A4MDIxMW1ldGFkZWYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzdmNDM1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcDgwMjExbWV0YWRlZi5oCkBAIC0wLDAgKzEsMjUyNCBAQAorLyogVGhpcyBmaWxlIGlzIEdFTkVSQVRFRCBBVVRPTUFUSUNBTExZLiAgRE8gTk9UIEVESVQgT1IgTU9ESUZZLgorKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKgorKiBDb3B5cmlnaHQgKEMpIDE5OTkgQWJzb2x1dGVWYWx1ZSBTeXN0ZW1zLCBJbmMuICBBbGwgUmlnaHRzIFJlc2VydmVkLgorKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKgorKiBsaW51eC13bGFuCisqCisqICAgVGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBhcmUgc3ViamVjdCB0byB0aGUgTW96aWxsYSBQdWJsaWMKKyogICBMaWNlbnNlIFZlcnNpb24gMS4xICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZQorKiAgIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZgorKiAgIHRoZSBMaWNlbnNlIGF0IGh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBMLworKgorKiAgIFNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUworKiAgIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IKKyogICBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcKKyogICByaWdodHMgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorKgorKiAgIEFsdGVybmF0aXZlbHksIHRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgbWF5IGJlIHVzZWQgdW5kZXIgdGhlCisqICAgdGVybXMgb2YgdGhlIEdOVSBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgKHRoZSAiR1BMIiksIGluIHdoaWNoCisqICAgY2FzZSB0aGUgcHJvdmlzaW9ucyBvZiB0aGUgR1BMIGFyZSBhcHBsaWNhYmxlIGluc3RlYWQgb2YgdGhlCisqICAgYWJvdmUuICBJZiB5b3Ugd2lzaCB0byBhbGxvdyB0aGUgdXNlIG9mIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUKKyogICBvbmx5IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR1BMIGFuZCBub3QgdG8gYWxsb3cgb3RoZXJzIHRvIHVzZQorKiAgIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgdW5kZXIgdGhlIE1QTCwgaW5kaWNhdGUgeW91ciBkZWNpc2lvbgorKiAgIGJ5IGRlbGV0aW5nIHRoZSBwcm92aXNpb25zIGFib3ZlIGFuZCByZXBsYWNlIHRoZW0gd2l0aCB0aGUgbm90aWNlCisqICAgYW5kIG90aGVyIHByb3Zpc2lvbnMgcmVxdWlyZWQgYnkgdGhlIEdQTC4gIElmIHlvdSBkbyBub3QgZGVsZXRlCisqICAgdGhlIHByb3Zpc2lvbnMgYWJvdmUsIGEgcmVjaXBpZW50IG1heSB1c2UgeW91ciB2ZXJzaW9uIG9mIHRoaXMKKyogICBmaWxlIHVuZGVyIGVpdGhlciB0aGUgTVBMIG9yIHRoZSBHUEwuCisqCisqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqCisqIElucXVpcmllcyByZWdhcmRpbmcgdGhlIGxpbnV4LXdsYW4gT3BlbiBTb3VyY2UgcHJvamVjdCBjYW4gYmUKKyogbWFkZSBkaXJlY3RseSB0bzoKKyoKKyogQWJzb2x1dGVWYWx1ZSBTeXN0ZW1zIEluYy4KKyogaW5mb0BsaW51eC13bGFuLmNvbQorKiBodHRwOi8vd3d3LmxpbnV4LXdsYW4uY29tCisqCisqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqCisqIFBvcnRpb25zIG9mIHRoZSBkZXZlbG9wbWVudCBvZiB0aGlzIHNvZnR3YXJlIHdlcmUgZnVuZGVkIGJ5CisqIEludGVyc2lsIENvcnBvcmF0aW9uIGFzIHBhcnQgb2YgUFJJU00oUikgY2hpcHNldCBwcm9kdWN0IGRldmVsb3BtZW50LgorKgorKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKi8KKworI2lmbmRlZiBfUDgwMjExTUtNRVRBREVGX0gKKyNkZWZpbmUgX1A4MDIxMU1LTUVUQURFRl9ICisKKworI2RlZmluZSBESURtc2dfY2F0X2RvdDExcmVxIFwKKwkJCVA4MDIxMURJRF9NS1NFQ1RJT04oMSkKKyNkZWZpbmUgRElEbXNnX2RvdDExcmVxX21pYmdldCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDEpKQorI2RlZmluZSBESURtc2dfZG90MTFyZXFfbWliZ2V0X21pYmF0dHJpYnV0ZSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDEpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxKSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9taWJnZXRfcmVzdWx0Y29kZSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDEpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgyKSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9taWJzZXQgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgyKSkKKyNkZWZpbmUgRElEbXNnX2RvdDExcmVxX21pYnNldF9taWJhdHRyaWJ1dGUgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgyKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMSkgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfZG90MTFyZXFfbWlic2V0X3Jlc3VsdGNvZGUgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgyKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMikgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfZG90MTFyZXFfcG93ZXJtZ210IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMykpCisjZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9wb3dlcm1nbXRfcG93ZXJtZ210bW9kZSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDMpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxKSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9wb3dlcm1nbXRfd2FrZXVwIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMykgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDIpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX2RvdDExcmVxX3Bvd2VybWdtdF9yZWNlaXZlZHRpbXMgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgzKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMykgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfZG90MTFyZXFfcG93ZXJtZ210X3Jlc3VsdGNvZGUgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgzKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oNCkgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfZG90MTFyZXFfc2NhbiBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDQpKQorI2RlZmluZSBESURtc2dfZG90MTFyZXFfc2Nhbl9ic3N0eXBlIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNCkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDEpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX2RvdDExcmVxX3NjYW5fYnNzaWQgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg0KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMikgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfZG90MTFyZXFfc2Nhbl9zc2lkIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNCkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDMpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX2RvdDExcmVxX3NjYW5fc2NhbnR5cGUgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg0KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oNCkgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfZG90MTFyZXFfc2Nhbl9wcm9iZWRlbGF5IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNCkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDUpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX2RvdDExcmVxX3NjYW5fY2hhbm5lbGxpc3QgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg0KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oNikgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfZG90MTFyZXFfc2Nhbl9taW5jaGFubmVsdGltZSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDQpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSg3KSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9zY2FuX21heGNoYW5uZWx0aW1lIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNCkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDgpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX2RvdDExcmVxX3NjYW5fcmVzdWx0Y29kZSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDQpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSg5KSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9zY2FuX251bWJzcyBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDQpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxMCkgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfZG90MTFyZXFfc2Nhbl9hcHBlbmQgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg0KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMTEpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX2RvdDExcmVxX3NjYW5fcmVzdWx0cyBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDUpKQorI2RlZmluZSBESURtc2dfZG90MTFyZXFfc2Nhbl9yZXN1bHRzX2Jzc2luZGV4IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDEpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX2RvdDExcmVxX3NjYW5fcmVzdWx0c19yZXN1bHRjb2RlIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDIpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX2RvdDExcmVxX3NjYW5fcmVzdWx0c19zaWduYWwgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMykgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfZG90MTFyZXFfc2Nhbl9yZXN1bHRzX25vaXNlIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDQpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX2RvdDExcmVxX3NjYW5fcmVzdWx0c19ic3NpZCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDUpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSg1KSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9zY2FuX3Jlc3VsdHNfc3NpZCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDUpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSg2KSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9zY2FuX3Jlc3VsdHNfYnNzdHlwZSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDUpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSg3KSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9zY2FuX3Jlc3VsdHNfYmVhY29ucGVyaW9kIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDgpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX2RvdDExcmVxX3NjYW5fcmVzdWx0c19kdGltcGVyaW9kIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDkpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX2RvdDExcmVxX3NjYW5fcmVzdWx0c190aW1lc3RhbXAgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMTApIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX2RvdDExcmVxX3NjYW5fcmVzdWx0c19sb2NhbHRpbWUgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMTEpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX2RvdDExcmVxX3NjYW5fcmVzdWx0c19maGR3ZWxsdGltZSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDUpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxMikgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfZG90MTFyZXFfc2Nhbl9yZXN1bHRzX2ZoaG9wc2V0IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDEzKSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9zY2FuX3Jlc3VsdHNfZmhob3BwYXR0ZXJuIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDE0KSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9zY2FuX3Jlc3VsdHNfZmhob3BpbmRleCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDUpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxNSkgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfZG90MTFyZXFfc2Nhbl9yZXN1bHRzX2RzY2hhbm5lbCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDUpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxNikgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfZG90MTFyZXFfc2Nhbl9yZXN1bHRzX2NmcGNvdW50IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDE3KSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9zY2FuX3Jlc3VsdHNfY2ZwcGVyaW9kIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDE4KSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9zY2FuX3Jlc3VsdHNfY2ZwbWF4ZHVyYXRpb24gXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMTkpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX2RvdDExcmVxX3NjYW5fcmVzdWx0c19jZnBkdXJyZW1haW5pbmcgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMjApIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX2RvdDExcmVxX3NjYW5fcmVzdWx0c19pYnNzYXRpbXdpbmRvdyBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDUpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgyMSkgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfZG90MTFyZXFfc2Nhbl9yZXN1bHRzX2NmcG9sbGFibGUgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMjIpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX2RvdDExcmVxX3NjYW5fcmVzdWx0c19jZnBvbGxyZXEgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMjMpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX2RvdDExcmVxX3NjYW5fcmVzdWx0c19wcml2YWN5IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDI0KSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9zY2FuX3Jlc3VsdHNfYmFzaWNyYXRlMSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDUpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgyNSkgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfZG90MTFyZXFfc2Nhbl9yZXN1bHRzX2Jhc2ljcmF0ZTIgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMjYpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX2RvdDExcmVxX3NjYW5fcmVzdWx0c19iYXNpY3JhdGUzIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDI3KSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9zY2FuX3Jlc3VsdHNfYmFzaWNyYXRlNCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDUpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgyOCkgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfZG90MTFyZXFfc2Nhbl9yZXN1bHRzX2Jhc2ljcmF0ZTUgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMjkpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX2RvdDExcmVxX3NjYW5fcmVzdWx0c19iYXNpY3JhdGU2IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDMwKSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9zY2FuX3Jlc3VsdHNfYmFzaWNyYXRlNyBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDUpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgzMSkgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfZG90MTFyZXFfc2Nhbl9yZXN1bHRzX2Jhc2ljcmF0ZTggXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMzIpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX2RvdDExcmVxX3NjYW5fcmVzdWx0c19zdXBwcmF0ZTEgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMzMpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX2RvdDExcmVxX3NjYW5fcmVzdWx0c19zdXBwcmF0ZTIgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMzQpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX2RvdDExcmVxX3NjYW5fcmVzdWx0c19zdXBwcmF0ZTMgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMzUpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX2RvdDExcmVxX3NjYW5fcmVzdWx0c19zdXBwcmF0ZTQgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMzYpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX2RvdDExcmVxX3NjYW5fcmVzdWx0c19zdXBwcmF0ZTUgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMzcpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX2RvdDExcmVxX3NjYW5fcmVzdWx0c19zdXBwcmF0ZTYgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMzgpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX2RvdDExcmVxX3NjYW5fcmVzdWx0c19zdXBwcmF0ZTcgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMzkpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX2RvdDExcmVxX3NjYW5fcmVzdWx0c19zdXBwcmF0ZTggXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oNDApIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX2RvdDExcmVxX2pvaW4gXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg2KSkKKyNkZWZpbmUgRElEbXNnX2RvdDExcmVxX2pvaW5fYnNzaWQgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg2KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMSkgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfZG90MTFyZXFfam9pbl9qb2luZmFpbHVyZXRpbWVvdXQgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg2KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMikgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfZG90MTFyZXFfam9pbl9iYXNpY3JhdGUxIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNikgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDMpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX2RvdDExcmVxX2pvaW5fYmFzaWNyYXRlMiBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDYpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSg0KSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9qb2luX2Jhc2ljcmF0ZTMgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg2KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oNSkgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfZG90MTFyZXFfam9pbl9iYXNpY3JhdGU0IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNikgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDYpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX2RvdDExcmVxX2pvaW5fYmFzaWNyYXRlNSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDYpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSg3KSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9qb2luX2Jhc2ljcmF0ZTYgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg2KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oOCkgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfZG90MTFyZXFfam9pbl9iYXNpY3JhdGU3IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNikgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDkpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX2RvdDExcmVxX2pvaW5fYmFzaWNyYXRlOCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDYpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxMCkgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfZG90MTFyZXFfam9pbl9vcGVyYXRpb25hbHJhdGUxIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNikgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDExKSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9qb2luX29wZXJhdGlvbmFscmF0ZTIgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg2KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMTIpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX2RvdDExcmVxX2pvaW5fb3BlcmF0aW9uYWxyYXRlMyBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDYpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxMykgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfZG90MTFyZXFfam9pbl9vcGVyYXRpb25hbHJhdGU0IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNikgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDE0KSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9qb2luX29wZXJhdGlvbmFscmF0ZTUgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg2KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMTUpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX2RvdDExcmVxX2pvaW5fb3BlcmF0aW9uYWxyYXRlNiBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDYpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxNikgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfZG90MTFyZXFfam9pbl9vcGVyYXRpb25hbHJhdGU3IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNikgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDE3KSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9qb2luX29wZXJhdGlvbmFscmF0ZTggXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg2KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMTgpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX2RvdDExcmVxX2pvaW5fcmVzdWx0Y29kZSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDYpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxOSkgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfZG90MTFyZXFfYXV0aGVudGljYXRlIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNykpCisjZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9hdXRoZW50aWNhdGVfcGVlcnN0YWFkZHJlc3MgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg3KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMSkgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfZG90MTFyZXFfYXV0aGVudGljYXRlX2F1dGhlbnRpY2F0aW9udHlwZSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDcpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgyKSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9hdXRoZW50aWNhdGVfYXV0aGVudGljYXRpb25mYWlsdXJldGltZW91dCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDcpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgzKSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9hdXRoZW50aWNhdGVfcmVzdWx0Y29kZSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDcpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSg0KSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9kZWF1dGhlbnRpY2F0ZSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDgpKQorI2RlZmluZSBESURtc2dfZG90MTFyZXFfZGVhdXRoZW50aWNhdGVfcGVlcnN0YWFkZHJlc3MgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg4KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMSkgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfZG90MTFyZXFfZGVhdXRoZW50aWNhdGVfcmVhc29uY29kZSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDgpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgyKSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9kZWF1dGhlbnRpY2F0ZV9yZXN1bHRjb2RlIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoOCkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDMpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX2RvdDExcmVxX2Fzc29jaWF0ZSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDkpKQorI2RlZmluZSBESURtc2dfZG90MTFyZXFfYXNzb2NpYXRlX3BlZXJzdGFhZGRyZXNzIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoOSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDEpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX2RvdDExcmVxX2Fzc29jaWF0ZV9hc3NvY2lhdGVmYWlsdXJldGltZW91dCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDkpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgyKSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9hc3NvY2lhdGVfY2Zwb2xsYWJsZSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDkpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgzKSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9hc3NvY2lhdGVfY2Zwb2xscmVxIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoOSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDQpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX2RvdDExcmVxX2Fzc29jaWF0ZV9wcml2YWN5IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoOSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDUpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX2RvdDExcmVxX2Fzc29jaWF0ZV9saXN0ZW5pbnRlcnZhbCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDkpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSg2KSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9hc3NvY2lhdGVfcmVzdWx0Y29kZSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDkpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSg3KSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9yZWFzc29jaWF0ZSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDEwKSkKKyNkZWZpbmUgRElEbXNnX2RvdDExcmVxX3JlYXNzb2NpYXRlX25ld2FwYWRkcmVzcyBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDEwKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMSkgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfZG90MTFyZXFfcmVhc3NvY2lhdGVfcmVhc3NvY2lhdGVmYWlsdXJldGltZW91dCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDEwKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMikgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfZG90MTFyZXFfcmVhc3NvY2lhdGVfY2Zwb2xsYWJsZSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDEwKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMykgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfZG90MTFyZXFfcmVhc3NvY2lhdGVfY2Zwb2xscmVxIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMTApIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSg0KSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9yZWFzc29jaWF0ZV9wcml2YWN5IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMTApIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSg1KSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9yZWFzc29jaWF0ZV9saXN0ZW5pbnRlcnZhbCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDEwKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oNikgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfZG90MTFyZXFfcmVhc3NvY2lhdGVfcmVzdWx0Y29kZSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDEwKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oNykgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfZG90MTFyZXFfZGlzYXNzb2NpYXRlIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMTEpKQorI2RlZmluZSBESURtc2dfZG90MTFyZXFfZGlzYXNzb2NpYXRlX3BlZXJzdGFhZGRyZXNzIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMTEpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxKSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9kaXNhc3NvY2lhdGVfcmVhc29uY29kZSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDExKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMikgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfZG90MTFyZXFfZGlzYXNzb2NpYXRlX3Jlc3VsdGNvZGUgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgxMSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDMpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX2RvdDExcmVxX3Jlc2V0IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMTIpKQorI2RlZmluZSBESURtc2dfZG90MTFyZXFfcmVzZXRfc2V0ZGVmYXVsdG1pYiBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDEyKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMSkgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfZG90MTFyZXFfcmVzZXRfbWFjYWRkcmVzcyBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDEyKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMikgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfZG90MTFyZXFfcmVzZXRfcmVzdWx0Y29kZSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDEyKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMykgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfZG90MTFyZXFfc3RhcnQgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgxMykpCisjZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9zdGFydF9zc2lkIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMTMpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxKSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9zdGFydF9ic3N0eXBlIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMTMpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgyKSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9zdGFydF9iZWFjb25wZXJpb2QgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgxMykgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDMpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX2RvdDExcmVxX3N0YXJ0X2R0aW1wZXJpb2QgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgxMykgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDQpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX2RvdDExcmVxX3N0YXJ0X2NmcHBlcmlvZCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDEzKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oNSkgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfZG90MTFyZXFfc3RhcnRfY2ZwbWF4ZHVyYXRpb24gXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgxMykgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDYpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX2RvdDExcmVxX3N0YXJ0X2ZoZHdlbGx0aW1lIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMTMpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSg3KSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9zdGFydF9maGhvcHNldCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDEzKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oOCkgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfZG90MTFyZXFfc3RhcnRfZmhob3BwYXR0ZXJuIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMTMpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSg5KSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9zdGFydF9kc2NoYW5uZWwgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgxMykgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDEwKSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9zdGFydF9pYnNzYXRpbXdpbmRvdyBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDEzKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMTEpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX2RvdDExcmVxX3N0YXJ0X3Byb2JlZGVsYXkgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgxMykgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDEyKSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9zdGFydF9jZnBvbGxhYmxlIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMTMpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxMykgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfZG90MTFyZXFfc3RhcnRfY2Zwb2xscmVxIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMTMpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxNCkgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfZG90MTFyZXFfc3RhcnRfYmFzaWNyYXRlMSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDEzKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMTUpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX2RvdDExcmVxX3N0YXJ0X2Jhc2ljcmF0ZTIgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgxMykgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDE2KSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9zdGFydF9iYXNpY3JhdGUzIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMTMpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxNykgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfZG90MTFyZXFfc3RhcnRfYmFzaWNyYXRlNCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDEzKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMTgpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX2RvdDExcmVxX3N0YXJ0X2Jhc2ljcmF0ZTUgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgxMykgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDE5KSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9zdGFydF9iYXNpY3JhdGU2IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMTMpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgyMCkgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfZG90MTFyZXFfc3RhcnRfYmFzaWNyYXRlNyBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDEzKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMjEpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX2RvdDExcmVxX3N0YXJ0X2Jhc2ljcmF0ZTggXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgxMykgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDIyKSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9zdGFydF9vcGVyYXRpb25hbHJhdGUxIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMTMpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgyMykgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfZG90MTFyZXFfc3RhcnRfb3BlcmF0aW9uYWxyYXRlMiBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDEzKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMjQpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX2RvdDExcmVxX3N0YXJ0X29wZXJhdGlvbmFscmF0ZTMgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgxMykgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDI1KSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9zdGFydF9vcGVyYXRpb25hbHJhdGU0IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMTMpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgyNikgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfZG90MTFyZXFfc3RhcnRfb3BlcmF0aW9uYWxyYXRlNSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDEzKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMjcpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX2RvdDExcmVxX3N0YXJ0X29wZXJhdGlvbmFscmF0ZTYgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgxMykgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDI4KSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9zdGFydF9vcGVyYXRpb25hbHJhdGU3IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMTMpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgyOSkgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfZG90MTFyZXFfc3RhcnRfb3BlcmF0aW9uYWxyYXRlOCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDEzKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMzApIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX2RvdDExcmVxX3N0YXJ0X3Jlc3VsdGNvZGUgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgxMykgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDMxKSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19jYXRfZG90MTFpbmQgXAorCQkJUDgwMjExRElEX01LU0VDVElPTigyKQorI2RlZmluZSBESURtc2dfZG90MTFpbmRfYXV0aGVudGljYXRlIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDIpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMSkpCisjZGVmaW5lIERJRG1zZ19kb3QxMWluZF9hdXRoZW50aWNhdGVfcGVlcnN0YWFkZHJlc3MgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMikgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMSkgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfZG90MTFpbmRfYXV0aGVudGljYXRlX2F1dGhlbnRpY2F0aW9udHlwZSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigyKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDEpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgyKSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19kb3QxMWluZF9kZWF1dGhlbnRpY2F0ZSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigyKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDIpKQorI2RlZmluZSBESURtc2dfZG90MTFpbmRfZGVhdXRoZW50aWNhdGVfcGVlcnN0YWFkZHJlc3MgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMikgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgyKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMSkgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfZG90MTFpbmRfZGVhdXRoZW50aWNhdGVfcmVhc29uY29kZSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigyKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDIpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgyKSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19kb3QxMWluZF9hc3NvY2lhdGUgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMikgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgzKSkKKyNkZWZpbmUgRElEbXNnX2RvdDExaW5kX2Fzc29jaWF0ZV9wZWVyc3RhYWRkcmVzcyBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigyKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDMpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxKSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19kb3QxMWluZF9hc3NvY2lhdGVfYWlkIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDIpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMykgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDIpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX2RvdDExaW5kX3JlYXNzb2NpYXRlIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDIpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNCkpCisjZGVmaW5lIERJRG1zZ19kb3QxMWluZF9yZWFzc29jaWF0ZV9wZWVyc3RhYWRkcmVzcyBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigyKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDQpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxKSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19kb3QxMWluZF9yZWFzc29jaWF0ZV9haWQgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMikgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg0KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMikgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfZG90MTFpbmRfcmVhc3NvY2lhdGVfb2xkYXBhZGRyZXNzIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDIpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNCkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDMpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX2RvdDExaW5kX2Rpc2Fzc29jaWF0ZSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigyKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDUpKQorI2RlZmluZSBESURtc2dfZG90MTFpbmRfZGlzYXNzb2NpYXRlX3BlZXJzdGFhZGRyZXNzIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDIpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDEpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX2RvdDExaW5kX2Rpc2Fzc29jaWF0ZV9yZWFzb25jb2RlIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDIpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDIpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX2NhdF9sbnhyZXEgXAorCQkJUDgwMjExRElEX01LU0VDVElPTigzKQorI2RlZmluZSBESURtc2dfbG54cmVxX2lmc3RhdGUgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMykgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgxKSkKKyNkZWZpbmUgRElEbXNnX2xueHJlcV9pZnN0YXRlX2lmc3RhdGUgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMykgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMSkgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfbG54cmVxX2lmc3RhdGVfcmVzdWx0Y29kZSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigzKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDEpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgyKSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19sbnhyZXFfd2xhbnNuaWZmIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDMpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMikpCisjZGVmaW5lIERJRG1zZ19sbnhyZXFfd2xhbnNuaWZmX2VuYWJsZSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigzKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDIpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxKSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19sbnhyZXFfd2xhbnNuaWZmX2NoYW5uZWwgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMykgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgyKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMikgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfbG54cmVxX3dsYW5zbmlmZl9wcmlzbWhlYWRlciBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigzKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDIpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgzKSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19sbnhyZXFfd2xhbnNuaWZmX3dsYW5oZWFkZXIgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMykgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgyKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oNCkgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfbG54cmVxX3dsYW5zbmlmZl9rZWVwd2VwZmxhZ3MgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMykgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgyKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oNSkgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfbG54cmVxX3dsYW5zbmlmZl9zdHJpcGZjcyBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigzKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDIpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSg2KSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19sbnhyZXFfd2xhbnNuaWZmX3BhY2tldF90cnVuYyBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigzKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDIpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSg3KSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19sbnhyZXFfd2xhbnNuaWZmX3Jlc3VsdGNvZGUgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMykgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgyKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oOCkgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfbG54cmVxX2hvc3R3ZXAgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMykgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgzKSkKKyNkZWZpbmUgRElEbXNnX2xueHJlcV9ob3N0d2VwX3Jlc3VsdGNvZGUgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMykgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgzKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMSkgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfbG54cmVxX2hvc3R3ZXBfZGVjcnlwdCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigzKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDMpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgyKSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19sbnhyZXFfaG9zdHdlcF9lbmNyeXB0IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDMpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMykgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDMpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX2xueHJlcV9jb21tc3F1YWxpdHkgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMykgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg0KSkKKyNkZWZpbmUgRElEbXNnX2xueHJlcV9jb21tc3F1YWxpdHlfcmVzdWx0Y29kZSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigzKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDQpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxKSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19sbnhyZXFfY29tbXNxdWFsaXR5X2RibSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigzKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDQpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgyKSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19sbnhyZXFfY29tbXNxdWFsaXR5X2xpbmsgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMykgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg0KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMykgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfbG54cmVxX2NvbW1zcXVhbGl0eV9sZXZlbCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigzKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDQpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSg0KSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19sbnhyZXFfY29tbXNxdWFsaXR5X25vaXNlIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDMpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNCkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDUpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX2xueHJlcV9hdXRvam9pbiBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigzKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDUpKQorI2RlZmluZSBESURtc2dfbG54cmVxX2F1dG9qb2luX3NzaWQgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMykgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMSkgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfbG54cmVxX2F1dG9qb2luX2F1dGh0eXBlIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDMpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDIpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX2xueHJlcV9hdXRvam9pbl9yZXN1bHRjb2RlIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDMpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDMpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX2NhdF9sbnhpbmQgXAorCQkJUDgwMjExRElEX01LU0VDVElPTig0KQorI2RlZmluZSBESURtc2dfbG54aW5kX3dsYW5zbmlmZnJtIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDQpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMSkpCisjZGVmaW5lIERJRG1zZ19sbnhpbmRfd2xhbnNuaWZmcm1faG9zdHRpbWUgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNCkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMSkgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfbG54aW5kX3dsYW5zbmlmZnJtX21hY3RpbWUgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNCkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMikgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfbG54aW5kX3dsYW5zbmlmZnJtX2NoYW5uZWwgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNCkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMykgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfbG54aW5kX3dsYW5zbmlmZnJtX3Jzc2kgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNCkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oNCkgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfbG54aW5kX3dsYW5zbmlmZnJtX3NxIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDQpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDUpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX2xueGluZF93bGFuc25pZmZybV9zaWduYWwgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNCkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oNikgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfbG54aW5kX3dsYW5zbmlmZnJtX25vaXNlIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDQpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDcpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX2xueGluZF93bGFuc25pZmZybV9yYXRlIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDQpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDgpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX2xueGluZF93bGFuc25pZmZybV9pc3R4IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDQpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDkpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX2xueGluZF93bGFuc25pZmZybV9mcm1sZW4gXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNCkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMTApIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX2xueGluZF9yb2FtIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDQpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMikpCisjZGVmaW5lIERJRG1zZ19sbnhpbmRfcm9hbV9yZWFzb24gXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNCkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgyKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMSkgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfY2F0X3AycmVxIFwKKwkJCVA4MDIxMURJRF9NS1NFQ1RJT04oNSkKKyNkZWZpbmUgRElEbXNnX3AycmVxX2pvaW4gXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgxKSkKKyNkZWZpbmUgRElEbXNnX3AycmVxX2pvaW5fYnNzaWQgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMSkgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfcDJyZXFfam9pbl9iYXNpY3JhdGUxIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDIpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX3AycmVxX2pvaW5fYmFzaWNyYXRlMiBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDEpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgzKSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19wMnJlcV9qb2luX2Jhc2ljcmF0ZTMgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oNCkgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfcDJyZXFfam9pbl9iYXNpY3JhdGU0IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDUpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX3AycmVxX2pvaW5fYmFzaWNyYXRlNSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDEpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSg2KSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19wMnJlcV9qb2luX2Jhc2ljcmF0ZTYgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oNykgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfcDJyZXFfam9pbl9iYXNpY3JhdGU3IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDgpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX3AycmVxX2pvaW5fYmFzaWNyYXRlOCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDEpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSg5KSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19wMnJlcV9qb2luX29wZXJhdGlvbmFscmF0ZTEgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMTApIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX3AycmVxX2pvaW5fb3BlcmF0aW9uYWxyYXRlMiBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDEpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxMSkgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfcDJyZXFfam9pbl9vcGVyYXRpb25hbHJhdGUzIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDEyKSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19wMnJlcV9qb2luX29wZXJhdGlvbmFscmF0ZTQgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMTMpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX3AycmVxX2pvaW5fb3BlcmF0aW9uYWxyYXRlNSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDEpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxNCkgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfcDJyZXFfam9pbl9vcGVyYXRpb25hbHJhdGU2IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDE1KSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19wMnJlcV9qb2luX29wZXJhdGlvbmFscmF0ZTcgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMTYpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX3AycmVxX2pvaW5fb3BlcmF0aW9uYWxyYXRlOCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDEpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxNykgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfcDJyZXFfam9pbl9zc2lkIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDE4KSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19wMnJlcV9qb2luX2NoYW5uZWwgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMTkpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX3AycmVxX2pvaW5fYXV0aHR5cGUgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMjApIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX3AycmVxX2pvaW5fcmVzdWx0Y29kZSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDEpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgyMSkgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfcDJyZXFfcmVhZHBkYSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDIpKQorI2RlZmluZSBESURtc2dfcDJyZXFfcmVhZHBkYV9wZGEgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgyKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMSkgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfcDJyZXFfcmVhZHBkYV9yZXN1bHRjb2RlIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMikgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDIpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX3AycmVxX3JlYWRjaXMgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgzKSkKKyNkZWZpbmUgRElEbXNnX3AycmVxX3JlYWRjaXNfY2lzIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMykgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDEpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX3AycmVxX3JlYWRjaXNfcmVzdWx0Y29kZSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDMpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgyKSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19wMnJlcV9hdXhwb3J0X3N0YXRlIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNCkpCisjZGVmaW5lIERJRG1zZ19wMnJlcV9hdXhwb3J0X3N0YXRlX2VuYWJsZSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDQpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxKSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19wMnJlcV9hdXhwb3J0X3N0YXRlX3Jlc3VsdGNvZGUgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg0KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMikgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfcDJyZXFfYXV4cG9ydF9yZWFkIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNSkpCisjZGVmaW5lIERJRG1zZ19wMnJlcV9hdXhwb3J0X3JlYWRfYWRkciBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDUpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxKSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19wMnJlcV9hdXhwb3J0X3JlYWRfbGVuIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDIpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX3AycmVxX2F1eHBvcnRfcmVhZF9kYXRhIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDMpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX3AycmVxX2F1eHBvcnRfcmVhZF9yZXN1bHRjb2RlIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDQpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX3AycmVxX2F1eHBvcnRfd3JpdGUgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg2KSkKKyNkZWZpbmUgRElEbXNnX3AycmVxX2F1eHBvcnRfd3JpdGVfYWRkciBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDYpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxKSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19wMnJlcV9hdXhwb3J0X3dyaXRlX2xlbiBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDYpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgyKSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19wMnJlcV9hdXhwb3J0X3dyaXRlX2RhdGEgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg2KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMykgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfcDJyZXFfYXV4cG9ydF93cml0ZV9yZXN1bHRjb2RlIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNikgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDQpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX3AycmVxX2xvd19sZXZlbCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDcpKQorI2RlZmluZSBESURtc2dfcDJyZXFfbG93X2xldmVsX2NvbW1hbmQgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg3KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMSkgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfcDJyZXFfbG93X2xldmVsX3BhcmFtMCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDcpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgyKSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19wMnJlcV9sb3dfbGV2ZWxfcGFyYW0xIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNykgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDMpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX3AycmVxX2xvd19sZXZlbF9wYXJhbTIgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg3KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oNCkgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfcDJyZXFfbG93X2xldmVsX3Jlc3AwIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNykgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDUpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX3AycmVxX2xvd19sZXZlbF9yZXNwMSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDcpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSg2KSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19wMnJlcV9sb3dfbGV2ZWxfcmVzcDIgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg3KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oNykgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfcDJyZXFfbG93X2xldmVsX3Jlc3VsdGNvZGUgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg3KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oOCkgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfcDJyZXFfdGVzdF9jb21tYW5kIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoOCkpCisjZGVmaW5lIERJRG1zZ19wMnJlcV90ZXN0X2NvbW1hbmRfdGVzdGNvZGUgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg4KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMSkgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfcDJyZXFfdGVzdF9jb21tYW5kX3Rlc3RwYXJhbSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDgpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgyKSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19wMnJlcV90ZXN0X2NvbW1hbmRfcmVzdWx0Y29kZSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDgpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgzKSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19wMnJlcV90ZXN0X2NvbW1hbmRfc3RhdHVzIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoOCkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDQpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX3AycmVxX3Rlc3RfY29tbWFuZF9yZXNwMCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDgpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSg1KSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19wMnJlcV90ZXN0X2NvbW1hbmRfcmVzcDEgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg4KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oNikgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfcDJyZXFfdGVzdF9jb21tYW5kX3Jlc3AyIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoOCkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDcpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX3AycmVxX21taV9yZWFkIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoOSkpCisjZGVmaW5lIERJRG1zZ19wMnJlcV9tbWlfcmVhZF9hZGRyIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoOSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDEpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX3AycmVxX21taV9yZWFkX3ZhbHVlIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoOSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDIpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX3AycmVxX21taV9yZWFkX3Jlc3VsdGNvZGUgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg5KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMykgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfcDJyZXFfbW1pX3dyaXRlIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMTApKQorI2RlZmluZSBESURtc2dfcDJyZXFfbW1pX3dyaXRlX2FkZHIgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgxMCkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDEpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX3AycmVxX21taV93cml0ZV9kYXRhIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMTApIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgyKSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19wMnJlcV9tbWlfd3JpdGVfcmVzdWx0Y29kZSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDEwKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMykgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfcDJyZXFfcmFtZGxfc3RhdGUgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgxMSkpCisjZGVmaW5lIERJRG1zZ19wMnJlcV9yYW1kbF9zdGF0ZV9lbmFibGUgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgxMSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDEpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX3AycmVxX3JhbWRsX3N0YXRlX2V4ZWFkZHIgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgxMSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDIpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX3AycmVxX3JhbWRsX3N0YXRlX3Jlc3VsdGNvZGUgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgxMSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDMpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX3AycmVxX3JhbWRsX3dyaXRlIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMTIpKQorI2RlZmluZSBESURtc2dfcDJyZXFfcmFtZGxfd3JpdGVfYWRkciBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDEyKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMSkgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfcDJyZXFfcmFtZGxfd3JpdGVfbGVuIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMTIpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgyKSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19wMnJlcV9yYW1kbF93cml0ZV9kYXRhIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMTIpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgzKSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19wMnJlcV9yYW1kbF93cml0ZV9yZXN1bHRjb2RlIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMTIpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSg0KSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19wMnJlcV9mbGFzaGRsX3N0YXRlIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMTMpKQorI2RlZmluZSBESURtc2dfcDJyZXFfZmxhc2hkbF9zdGF0ZV9lbmFibGUgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgxMykgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDEpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX3AycmVxX2ZsYXNoZGxfc3RhdGVfcmVzdWx0Y29kZSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDEzKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMikgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfcDJyZXFfZmxhc2hkbF93cml0ZSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDE0KSkKKyNkZWZpbmUgRElEbXNnX3AycmVxX2ZsYXNoZGxfd3JpdGVfYWRkciBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDE0KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMSkgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfcDJyZXFfZmxhc2hkbF93cml0ZV9sZW4gXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgxNCkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDIpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX3AycmVxX2ZsYXNoZGxfd3JpdGVfZGF0YSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDE0KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMykgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfcDJyZXFfZmxhc2hkbF93cml0ZV9yZXN1bHRjb2RlIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMTQpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSg0KSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19wMnJlcV9tbV9zdGF0ZSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDE1KSkKKyNkZWZpbmUgRElEbXNnX3AycmVxX21tX3N0YXRlX2VuYWJsZSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDE1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMSkgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfcDJyZXFfbW1fc3RhdGVfcmVzdWx0Y29kZSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDE1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMikgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfcDJyZXFfZHVtcF9zdGF0ZSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDE2KSkKKyNkZWZpbmUgRElEbXNnX3AycmVxX2R1bXBfc3RhdGVfbGV2ZWwgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgxNikgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDEpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX3AycmVxX2R1bXBfc3RhdGVfcmVzdWx0Y29kZSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDE2KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMikgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfcDJyZXFfY2hhbm5lbF9pbmZvIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMTcpKQorI2RlZmluZSBESURtc2dfcDJyZXFfY2hhbm5lbF9pbmZvX2NoYW5uZWxsaXN0IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMTcpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxKSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19wMnJlcV9jaGFubmVsX2luZm9fY2hhbm5lbGR3ZWxsdGltZSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDE3KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMikgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfcDJyZXFfY2hhbm5lbF9pbmZvX3Jlc3VsdGNvZGUgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgxNykgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDMpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX3AycmVxX2NoYW5uZWxfaW5mb19udW1jaGluZm8gXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgxNykgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDQpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX3AycmVxX2NoYW5uZWxfaW5mb19yZXN1bHRzIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMTgpKQorI2RlZmluZSBESURtc2dfcDJyZXFfY2hhbm5lbF9pbmZvX3Jlc3VsdHNfY2hhbm5lbCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDE4KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMSkgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfcDJyZXFfY2hhbm5lbF9pbmZvX3Jlc3VsdHNfcmVzdWx0Y29kZSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDE4KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMikgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfcDJyZXFfY2hhbm5lbF9pbmZvX3Jlc3VsdHNfYXZnbm9pc2VsZXZlbCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDE4KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMykgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfcDJyZXFfY2hhbm5lbF9pbmZvX3Jlc3VsdHNfcGVha25vaXNlbGV2ZWwgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgxOCkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDQpIHwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgRElEbXNnX3AycmVxX2NoYW5uZWxfaW5mb19yZXN1bHRzX2Jzc2FjdGl2ZSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDE4KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oNSkgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtc2dfcDJyZXFfY2hhbm5lbF9pbmZvX3Jlc3VsdHNfcGNmYWN0aXZlIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMTgpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSg2KSB8IDB4MDAwMDAwMDApCisjZGVmaW5lIERJRG1zZ19wMnJlcV9lbmFibGUgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgxOSkpCisjZGVmaW5lIERJRG1zZ19wMnJlcV9lbmFibGVfcmVzdWx0Y29kZSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDE5KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMSkgfCAweDAwMDAwMDAwKQorI2RlZmluZSBESURtaWJfY2F0X2RvdDExc210IFwKKwkJCVA4MDIxMURJRF9NS1NFQ1RJT04oMSkKKyNkZWZpbmUgRElEbWliX2RvdDExc210X3A4MDIxMVRhYmxlIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMSkpCisjZGVmaW5lIERJRG1pYl9kb3QxMXNtdF9wODAyMTFUYWJsZV9wODAyMTFfaWZzdGF0ZSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDEpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxKSB8IDB4MTAwMDAwMDApCisjZGVmaW5lIERJRG1pYl9kb3QxMXNtdF9kb3QxMVN0YXRpb25Db25maWdUYWJsZSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDIpKQorI2RlZmluZSBESURtaWJfZG90MTFzbXRfZG90MTFTdGF0aW9uQ29uZmlnVGFibGVfZG90MTFTdGF0aW9uSUQgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgyKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMSkgfCAweDE4MDAwMDAwKQorI2RlZmluZSBESURtaWJfZG90MTFzbXRfZG90MTFTdGF0aW9uQ29uZmlnVGFibGVfZG90MTFNZWRpdW1PY2N1cGFuY3lMaW1pdCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDIpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgyKSB8IDB4MTgwMDAwMDApCisjZGVmaW5lIERJRG1pYl9kb3QxMXNtdF9kb3QxMVN0YXRpb25Db25maWdUYWJsZV9kb3QxMUNGUG9sbGFibGUgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgyKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMykgfCAweDEwMDAwMDAwKQorI2RlZmluZSBESURtaWJfZG90MTFzbXRfZG90MTFTdGF0aW9uQ29uZmlnVGFibGVfZG90MTFDRlBQZXJpb2QgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgyKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oNCkgfCAweDE4MDAwMDAwKQorI2RlZmluZSBESURtaWJfZG90MTFzbXRfZG90MTFTdGF0aW9uQ29uZmlnVGFibGVfZG90MTFDRlBNYXhEdXJhdGlvbiBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDIpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSg1KSB8IDB4MTgwMDAwMDApCisjZGVmaW5lIERJRG1pYl9kb3QxMXNtdF9kb3QxMVN0YXRpb25Db25maWdUYWJsZV9kb3QxMUF1dGhlbnRpY2F0aW9uUmVzcG9uc2VUaW1lT3V0IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMikgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDYpIHwgMHgxODAwMDAwMCkKKyNkZWZpbmUgRElEbWliX2RvdDExc210X2RvdDExU3RhdGlvbkNvbmZpZ1RhYmxlX2RvdDExUHJpdmFjeU9wdGlvbkltcGxlbWVudGVkIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMikgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDcpIHwgMHgxMDAwMDAwMCkKKyNkZWZpbmUgRElEbWliX2RvdDExc210X2RvdDExU3RhdGlvbkNvbmZpZ1RhYmxlX2RvdDExUG93ZXJNYW5hZ2VtZW50TW9kZSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDIpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSg4KSB8IDB4MTgwMDAwMDApCisjZGVmaW5lIERJRG1pYl9kb3QxMXNtdF9kb3QxMVN0YXRpb25Db25maWdUYWJsZV9kb3QxMURlc2lyZWRTU0lEIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMikgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDkpIHwgMHgxODAwMDAwMCkKKyNkZWZpbmUgRElEbWliX2RvdDExc210X2RvdDExU3RhdGlvbkNvbmZpZ1RhYmxlX2RvdDExRGVzaXJlZEJTU1R5cGUgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgyKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMTApIHwgMHgxODAwMDAwMCkKKyNkZWZpbmUgRElEbWliX2RvdDExc210X2RvdDExU3RhdGlvbkNvbmZpZ1RhYmxlX2RvdDExT3BlcmF0aW9uYWxSYXRlU2V0IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMikgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDExKSB8IDB4MTgwMDAwMDApCisjZGVmaW5lIERJRG1pYl9kb3QxMXNtdF9kb3QxMVN0YXRpb25Db25maWdUYWJsZV9kb3QxMUJlYWNvblBlcmlvZCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDIpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxMikgfCAweDE4MDAwMDAwKQorI2RlZmluZSBESURtaWJfZG90MTFzbXRfZG90MTFTdGF0aW9uQ29uZmlnVGFibGVfZG90MTFEVElNUGVyaW9kIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMikgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDEzKSB8IDB4MTgwMDAwMDApCisjZGVmaW5lIERJRG1pYl9kb3QxMXNtdF9kb3QxMVN0YXRpb25Db25maWdUYWJsZV9kb3QxMUFzc29jaWF0aW9uUmVzcG9uc2VUaW1lT3V0IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMikgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDE0KSB8IDB4MTAwMDAwMDApCisjZGVmaW5lIERJRG1pYl9kb3QxMXNtdF9kb3QxMVN0YXRpb25Db25maWdUYWJsZV9kb3QxMURpc2Fzc29jaWF0ZVJlYXNvbiBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDIpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxNSkgfCAweDEwMDAwMDAwKQorI2RlZmluZSBESURtaWJfZG90MTFzbXRfZG90MTFTdGF0aW9uQ29uZmlnVGFibGVfZG90MTFEaXNhc3NvY2lhdGVTdGF0aW9uIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMikgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDE2KSB8IDB4MTAwMDAwMDApCisjZGVmaW5lIERJRG1pYl9kb3QxMXNtdF9kb3QxMVN0YXRpb25Db25maWdUYWJsZV9kb3QxMURlYXV0aGVudGljYXRlUmVhc29uIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMikgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDE3KSB8IDB4MTAwMDAwMDApCisjZGVmaW5lIERJRG1pYl9kb3QxMXNtdF9kb3QxMVN0YXRpb25Db25maWdUYWJsZV9kb3QxMURlYXV0aGVudGljYXRlU3RhdGlvbiBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDIpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxOCkgfCAweDEwMDAwMDAwKQorI2RlZmluZSBESURtaWJfZG90MTFzbXRfZG90MTFTdGF0aW9uQ29uZmlnVGFibGVfZG90MTFBdXRoZW50aWNhdGVGYWlsU3RhdHVzIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMikgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDE5KSB8IDB4MTAwMDAwMDApCisjZGVmaW5lIERJRG1pYl9kb3QxMXNtdF9kb3QxMVN0YXRpb25Db25maWdUYWJsZV9kb3QxMUF1dGhlbnRpY2F0ZUZhaWxTdGF0aW9uIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMikgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDIwKSB8IDB4MTAwMDAwMDApCisjZGVmaW5lIERJRG1pYl9kb3QxMXNtdF9kb3QxMUF1dGhlbnRpY2F0aW9uQWxnb3JpdGhtc1RhYmxlIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMykpCisjZGVmaW5lIERJRG1pYl9kb3QxMXNtdF9kb3QxMUF1dGhlbnRpY2F0aW9uQWxnb3JpdGhtc1RhYmxlX2RvdDExQXV0aGVudGljYXRpb25BbGdvcml0aG0xIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMykgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDEpIHwgMHgxNDAwMDAwMCkKKyNkZWZpbmUgRElEbWliX2RvdDExc210X2RvdDExQXV0aGVudGljYXRpb25BbGdvcml0aG1zVGFibGVfZG90MTFBdXRoZW50aWNhdGlvbkFsZ29yaXRobXNFbmFibGUxIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMykgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDIpIHwgMHgxYzAwMDAwMCkKKyNkZWZpbmUgRElEbWliX2RvdDExc210X2RvdDExQXV0aGVudGljYXRpb25BbGdvcml0aG1zVGFibGVfZG90MTFBdXRoZW50aWNhdGlvbkFsZ29yaXRobTIgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgzKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMykgfCAweDE0MDAwMDAwKQorI2RlZmluZSBESURtaWJfZG90MTFzbXRfZG90MTFBdXRoZW50aWNhdGlvbkFsZ29yaXRobXNUYWJsZV9kb3QxMUF1dGhlbnRpY2F0aW9uQWxnb3JpdGhtc0VuYWJsZTIgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgzKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oNCkgfCAweDFjMDAwMDAwKQorI2RlZmluZSBESURtaWJfZG90MTFzbXRfZG90MTFBdXRoZW50aWNhdGlvbkFsZ29yaXRobXNUYWJsZV9kb3QxMUF1dGhlbnRpY2F0aW9uQWxnb3JpdGhtMyBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDMpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSg1KSB8IDB4MTQwMDAwMDApCisjZGVmaW5lIERJRG1pYl9kb3QxMXNtdF9kb3QxMUF1dGhlbnRpY2F0aW9uQWxnb3JpdGhtc1RhYmxlX2RvdDExQXV0aGVudGljYXRpb25BbGdvcml0aG1zRW5hYmxlMyBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDMpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSg2KSB8IDB4MWMwMDAwMDApCisjZGVmaW5lIERJRG1pYl9kb3QxMXNtdF9kb3QxMUF1dGhlbnRpY2F0aW9uQWxnb3JpdGhtc1RhYmxlX2RvdDExQXV0aGVudGljYXRpb25BbGdvcml0aG00IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMykgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDcpIHwgMHgxNDAwMDAwMCkKKyNkZWZpbmUgRElEbWliX2RvdDExc210X2RvdDExQXV0aGVudGljYXRpb25BbGdvcml0aG1zVGFibGVfZG90MTFBdXRoZW50aWNhdGlvbkFsZ29yaXRobXNFbmFibGU0IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMykgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDgpIHwgMHgxYzAwMDAwMCkKKyNkZWZpbmUgRElEbWliX2RvdDExc210X2RvdDExQXV0aGVudGljYXRpb25BbGdvcml0aG1zVGFibGVfZG90MTFBdXRoZW50aWNhdGlvbkFsZ29yaXRobTUgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgzKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oOSkgfCAweDE0MDAwMDAwKQorI2RlZmluZSBESURtaWJfZG90MTFzbXRfZG90MTFBdXRoZW50aWNhdGlvbkFsZ29yaXRobXNUYWJsZV9kb3QxMUF1dGhlbnRpY2F0aW9uQWxnb3JpdGhtc0VuYWJsZTUgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgzKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMTApIHwgMHgxYzAwMDAwMCkKKyNkZWZpbmUgRElEbWliX2RvdDExc210X2RvdDExQXV0aGVudGljYXRpb25BbGdvcml0aG1zVGFibGVfZG90MTFBdXRoZW50aWNhdGlvbkFsZ29yaXRobTYgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgzKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMTEpIHwgMHgxNDAwMDAwMCkKKyNkZWZpbmUgRElEbWliX2RvdDExc210X2RvdDExQXV0aGVudGljYXRpb25BbGdvcml0aG1zVGFibGVfZG90MTFBdXRoZW50aWNhdGlvbkFsZ29yaXRobXNFbmFibGU2IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMykgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDEyKSB8IDB4MWMwMDAwMDApCisjZGVmaW5lIERJRG1pYl9kb3QxMXNtdF9kb3QxMVdFUERlZmF1bHRLZXlzVGFibGUgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg0KSkKKyNkZWZpbmUgRElEbWliX2RvdDExc210X2RvdDExV0VQRGVmYXVsdEtleXNUYWJsZV9kb3QxMVdFUERlZmF1bHRLZXkwIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNCkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDEpIHwgMHgwYzAwMDAwMCkKKyNkZWZpbmUgRElEbWliX2RvdDExc210X2RvdDExV0VQRGVmYXVsdEtleXNUYWJsZV9kb3QxMVdFUERlZmF1bHRLZXkxIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNCkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDIpIHwgMHgwYzAwMDAwMCkKKyNkZWZpbmUgRElEbWliX2RvdDExc210X2RvdDExV0VQRGVmYXVsdEtleXNUYWJsZV9kb3QxMVdFUERlZmF1bHRLZXkyIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNCkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDMpIHwgMHgwYzAwMDAwMCkKKyNkZWZpbmUgRElEbWliX2RvdDExc210X2RvdDExV0VQRGVmYXVsdEtleXNUYWJsZV9kb3QxMVdFUERlZmF1bHRLZXkzIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNCkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDQpIHwgMHgwYzAwMDAwMCkKKyNkZWZpbmUgRElEbWliX2RvdDExc210X2RvdDExV0VQS2V5TWFwcGluZ3NUYWJsZSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDUpKQorI2RlZmluZSBESURtaWJfZG90MTFzbXRfZG90MTFXRVBLZXlNYXBwaW5nc1RhYmxlX2RvdDExV0VQS2V5TWFwcGluZ0luZGV4IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDEpIHwgMHgxYzAwMDAwMCkKKyNkZWZpbmUgRElEbWliX2RvdDExc210X2RvdDExV0VQS2V5TWFwcGluZ3NUYWJsZV9kb3QxMVdFUEtleU1hcHBpbmdBZGRyZXNzIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDIpIHwgMHgxYzAwMDAwMCkKKyNkZWZpbmUgRElEbWliX2RvdDExc210X2RvdDExV0VQS2V5TWFwcGluZ3NUYWJsZV9kb3QxMVdFUEtleU1hcHBpbmdXRVBPbiBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDUpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgzKSB8IDB4MWMwMDAwMDApCisjZGVmaW5lIERJRG1pYl9kb3QxMXNtdF9kb3QxMVdFUEtleU1hcHBpbmdzVGFibGVfZG90MTFXRVBLZXlNYXBwaW5nVmFsdWUgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oNCkgfCAweDFjMDAwMDAwKQorI2RlZmluZSBESURtaWJfZG90MTFzbXRfZG90MTFQcml2YWN5VGFibGUgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg2KSkKKyNkZWZpbmUgRElEbWliX2RvdDExc210X2RvdDExUHJpdmFjeVRhYmxlX2RvdDExUHJpdmFjeUludm9rZWQgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg2KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMSkgfCAweDE4MDAwMDAwKQorI2RlZmluZSBESURtaWJfZG90MTFzbXRfZG90MTFQcml2YWN5VGFibGVfZG90MTFXRVBEZWZhdWx0S2V5SUQgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg2KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMikgfCAweDE4MDAwMDAwKQorI2RlZmluZSBESURtaWJfZG90MTFzbXRfZG90MTFQcml2YWN5VGFibGVfZG90MTFXRVBLZXlNYXBwaW5nTGVuZ3RoIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNikgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDMpIHwgMHgxODAwMDAwMCkKKyNkZWZpbmUgRElEbWliX2RvdDExc210X2RvdDExUHJpdmFjeVRhYmxlX2RvdDExRXhjbHVkZVVuZW5jcnlwdGVkIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNikgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDQpIHwgMHgxODAwMDAwMCkKKyNkZWZpbmUgRElEbWliX2RvdDExc210X2RvdDExUHJpdmFjeVRhYmxlX2RvdDExV0VQSUNWRXJyb3JDb3VudCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDYpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSg1KSB8IDB4MTAwMDAwMDApCisjZGVmaW5lIERJRG1pYl9kb3QxMXNtdF9kb3QxMVByaXZhY3lUYWJsZV9kb3QxMVdFUEV4Y2x1ZGVkQ291bnQgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg2KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oNikgfCAweDEwMDAwMDAwKQorI2RlZmluZSBESURtaWJfY2F0X2RvdDExbWFjIFwKKwkJCVA4MDIxMURJRF9NS1NFQ1RJT04oMikKKyNkZWZpbmUgRElEbWliX2RvdDExbWFjX2RvdDExT3BlcmF0aW9uVGFibGUgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMikgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgxKSkKKyNkZWZpbmUgRElEbWliX2RvdDExbWFjX2RvdDExT3BlcmF0aW9uVGFibGVfZG90MTFNQUNBZGRyZXNzIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDIpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDEpIHwgMHgxODAwMDAwMCkKKyNkZWZpbmUgRElEbWliX2RvdDExbWFjX2RvdDExT3BlcmF0aW9uVGFibGVfZG90MTFSVFNUaHJlc2hvbGQgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMikgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMikgfCAweDE4MDAwMDAwKQorI2RlZmluZSBESURtaWJfZG90MTFtYWNfZG90MTFPcGVyYXRpb25UYWJsZV9kb3QxMVNob3J0UmV0cnlMaW1pdCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigyKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDEpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgzKSB8IDB4MTAwMDAwMDApCisjZGVmaW5lIERJRG1pYl9kb3QxMW1hY19kb3QxMU9wZXJhdGlvblRhYmxlX2RvdDExTG9uZ1JldHJ5TGltaXQgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMikgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oNCkgfCAweDEwMDAwMDAwKQorI2RlZmluZSBESURtaWJfZG90MTFtYWNfZG90MTFPcGVyYXRpb25UYWJsZV9kb3QxMUZyYWdtZW50YXRpb25UaHJlc2hvbGQgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMikgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oNSkgfCAweDE4MDAwMDAwKQorI2RlZmluZSBESURtaWJfZG90MTFtYWNfZG90MTFPcGVyYXRpb25UYWJsZV9kb3QxMU1heFRyYW5zbWl0TVNEVUxpZmV0aW1lIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDIpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDYpIHwgMHgxMDAwMDAwMCkKKyNkZWZpbmUgRElEbWliX2RvdDExbWFjX2RvdDExT3BlcmF0aW9uVGFibGVfZG90MTFNYXhSZWNlaXZlTGlmZXRpbWUgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMikgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oNykgfCAweDEwMDAwMDAwKQorI2RlZmluZSBESURtaWJfZG90MTFtYWNfZG90MTFPcGVyYXRpb25UYWJsZV9kb3QxMU1hbnVmYWN0dXJlcklEIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDIpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDgpIHwgMHgxMDAwMDAwMCkKKyNkZWZpbmUgRElEbWliX2RvdDExbWFjX2RvdDExT3BlcmF0aW9uVGFibGVfZG90MTFQcm9kdWN0SUQgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMikgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oOSkgfCAweDEwMDAwMDAwKQorI2RlZmluZSBESURtaWJfZG90MTFtYWNfZG90MTFDb3VudGVyc1RhYmxlIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDIpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMikpCisjZGVmaW5lIERJRG1pYl9kb3QxMW1hY19kb3QxMUNvdW50ZXJzVGFibGVfZG90MTFUcmFuc21pdHRlZEZyYWdtZW50Q291bnQgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMikgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgyKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMSkgfCAweDEwMDAwMDAwKQorI2RlZmluZSBESURtaWJfZG90MTFtYWNfZG90MTFDb3VudGVyc1RhYmxlX2RvdDExTXVsdGljYXN0VHJhbnNtaXR0ZWRGcmFtZUNvdW50IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDIpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMikgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDIpIHwgMHgxMDAwMDAwMCkKKyNkZWZpbmUgRElEbWliX2RvdDExbWFjX2RvdDExQ291bnRlcnNUYWJsZV9kb3QxMUZhaWxlZENvdW50IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDIpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMikgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDMpIHwgMHgxMDAwMDAwMCkKKyNkZWZpbmUgRElEbWliX2RvdDExbWFjX2RvdDExQ291bnRlcnNUYWJsZV9kb3QxMVJldHJ5Q291bnQgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMikgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgyKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oNCkgfCAweDEwMDAwMDAwKQorI2RlZmluZSBESURtaWJfZG90MTFtYWNfZG90MTFDb3VudGVyc1RhYmxlX2RvdDExTXVsdGlwbGVSZXRyeUNvdW50IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDIpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMikgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDUpIHwgMHgxMDAwMDAwMCkKKyNkZWZpbmUgRElEbWliX2RvdDExbWFjX2RvdDExQ291bnRlcnNUYWJsZV9kb3QxMUZyYW1lRHVwbGljYXRlQ291bnQgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMikgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgyKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oNikgfCAweDEwMDAwMDAwKQorI2RlZmluZSBESURtaWJfZG90MTFtYWNfZG90MTFDb3VudGVyc1RhYmxlX2RvdDExUlRTU3VjY2Vzc0NvdW50IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDIpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMikgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDcpIHwgMHgxMDAwMDAwMCkKKyNkZWZpbmUgRElEbWliX2RvdDExbWFjX2RvdDExQ291bnRlcnNUYWJsZV9kb3QxMVJUU0ZhaWx1cmVDb3VudCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigyKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDIpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSg4KSB8IDB4MTAwMDAwMDApCisjZGVmaW5lIERJRG1pYl9kb3QxMW1hY19kb3QxMUNvdW50ZXJzVGFibGVfZG90MTFBQ0tGYWlsdXJlQ291bnQgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMikgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgyKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oOSkgfCAweDEwMDAwMDAwKQorI2RlZmluZSBESURtaWJfZG90MTFtYWNfZG90MTFDb3VudGVyc1RhYmxlX2RvdDExUmVjZWl2ZWRGcmFnbWVudENvdW50IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDIpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMikgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDEwKSB8IDB4MTAwMDAwMDApCisjZGVmaW5lIERJRG1pYl9kb3QxMW1hY19kb3QxMUNvdW50ZXJzVGFibGVfZG90MTFNdWx0aWNhc3RSZWNlaXZlZEZyYW1lQ291bnQgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMikgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgyKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMTEpIHwgMHgxMDAwMDAwMCkKKyNkZWZpbmUgRElEbWliX2RvdDExbWFjX2RvdDExQ291bnRlcnNUYWJsZV9kb3QxMUZDU0Vycm9yQ291bnQgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMikgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgyKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMTIpIHwgMHgxMDAwMDAwMCkKKyNkZWZpbmUgRElEbWliX2RvdDExbWFjX2RvdDExQ291bnRlcnNUYWJsZV9kb3QxMVRyYW5zbWl0dGVkRnJhbWVDb3VudCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigyKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDIpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxMykgfCAweDEwMDAwMDAwKQorI2RlZmluZSBESURtaWJfZG90MTFtYWNfZG90MTFDb3VudGVyc1RhYmxlX2RvdDExV0VQVW5kZWNyeXB0YWJsZUNvdW50IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDIpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMikgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDE0KSB8IDB4MTAwMDAwMDApCisjZGVmaW5lIERJRG1pYl9kb3QxMW1hY19kb3QxMUdyb3VwQWRkcmVzc2VzVGFibGUgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMikgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgzKSkKKyNkZWZpbmUgRElEbWliX2RvdDExbWFjX2RvdDExR3JvdXBBZGRyZXNzZXNUYWJsZV9kb3QxMUFkZHJlc3MxIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDIpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMykgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDEpIHwgMHgxYzAwMDAwMCkKKyNkZWZpbmUgRElEbWliX2RvdDExbWFjX2RvdDExR3JvdXBBZGRyZXNzZXNUYWJsZV9kb3QxMUFkZHJlc3MyIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDIpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMykgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDIpIHwgMHgxYzAwMDAwMCkKKyNkZWZpbmUgRElEbWliX2RvdDExbWFjX2RvdDExR3JvdXBBZGRyZXNzZXNUYWJsZV9kb3QxMUFkZHJlc3MzIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDIpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMykgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDMpIHwgMHgxYzAwMDAwMCkKKyNkZWZpbmUgRElEbWliX2RvdDExbWFjX2RvdDExR3JvdXBBZGRyZXNzZXNUYWJsZV9kb3QxMUFkZHJlc3M0IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDIpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMykgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDQpIHwgMHgxYzAwMDAwMCkKKyNkZWZpbmUgRElEbWliX2RvdDExbWFjX2RvdDExR3JvdXBBZGRyZXNzZXNUYWJsZV9kb3QxMUFkZHJlc3M1IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDIpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMykgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDUpIHwgMHgxYzAwMDAwMCkKKyNkZWZpbmUgRElEbWliX2RvdDExbWFjX2RvdDExR3JvdXBBZGRyZXNzZXNUYWJsZV9kb3QxMUFkZHJlc3M2IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDIpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMykgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDYpIHwgMHgxYzAwMDAwMCkKKyNkZWZpbmUgRElEbWliX2RvdDExbWFjX2RvdDExR3JvdXBBZGRyZXNzZXNUYWJsZV9kb3QxMUFkZHJlc3M3IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDIpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMykgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDcpIHwgMHgxYzAwMDAwMCkKKyNkZWZpbmUgRElEbWliX2RvdDExbWFjX2RvdDExR3JvdXBBZGRyZXNzZXNUYWJsZV9kb3QxMUFkZHJlc3M4IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDIpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMykgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDgpIHwgMHgxYzAwMDAwMCkKKyNkZWZpbmUgRElEbWliX2RvdDExbWFjX2RvdDExR3JvdXBBZGRyZXNzZXNUYWJsZV9kb3QxMUFkZHJlc3M5IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDIpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMykgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDkpIHwgMHgxYzAwMDAwMCkKKyNkZWZpbmUgRElEbWliX2RvdDExbWFjX2RvdDExR3JvdXBBZGRyZXNzZXNUYWJsZV9kb3QxMUFkZHJlc3MxMCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigyKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDMpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxMCkgfCAweDFjMDAwMDAwKQorI2RlZmluZSBESURtaWJfZG90MTFtYWNfZG90MTFHcm91cEFkZHJlc3Nlc1RhYmxlX2RvdDExQWRkcmVzczExIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDIpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMykgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDExKSB8IDB4MWMwMDAwMDApCisjZGVmaW5lIERJRG1pYl9kb3QxMW1hY19kb3QxMUdyb3VwQWRkcmVzc2VzVGFibGVfZG90MTFBZGRyZXNzMTIgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMikgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgzKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMTIpIHwgMHgxYzAwMDAwMCkKKyNkZWZpbmUgRElEbWliX2RvdDExbWFjX2RvdDExR3JvdXBBZGRyZXNzZXNUYWJsZV9kb3QxMUFkZHJlc3MxMyBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigyKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDMpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxMykgfCAweDFjMDAwMDAwKQorI2RlZmluZSBESURtaWJfZG90MTFtYWNfZG90MTFHcm91cEFkZHJlc3Nlc1RhYmxlX2RvdDExQWRkcmVzczE0IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDIpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMykgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDE0KSB8IDB4MWMwMDAwMDApCisjZGVmaW5lIERJRG1pYl9kb3QxMW1hY19kb3QxMUdyb3VwQWRkcmVzc2VzVGFibGVfZG90MTFBZGRyZXNzMTUgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMikgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgzKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMTUpIHwgMHgxYzAwMDAwMCkKKyNkZWZpbmUgRElEbWliX2RvdDExbWFjX2RvdDExR3JvdXBBZGRyZXNzZXNUYWJsZV9kb3QxMUFkZHJlc3MxNiBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigyKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDMpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxNikgfCAweDFjMDAwMDAwKQorI2RlZmluZSBESURtaWJfZG90MTFtYWNfZG90MTFHcm91cEFkZHJlc3Nlc1RhYmxlX2RvdDExQWRkcmVzczE3IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDIpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMykgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDE3KSB8IDB4MWMwMDAwMDApCisjZGVmaW5lIERJRG1pYl9kb3QxMW1hY19kb3QxMUdyb3VwQWRkcmVzc2VzVGFibGVfZG90MTFBZGRyZXNzMTggXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMikgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgzKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMTgpIHwgMHgxYzAwMDAwMCkKKyNkZWZpbmUgRElEbWliX2RvdDExbWFjX2RvdDExR3JvdXBBZGRyZXNzZXNUYWJsZV9kb3QxMUFkZHJlc3MxOSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigyKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDMpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxOSkgfCAweDFjMDAwMDAwKQorI2RlZmluZSBESURtaWJfZG90MTFtYWNfZG90MTFHcm91cEFkZHJlc3Nlc1RhYmxlX2RvdDExQWRkcmVzczIwIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDIpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMykgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDIwKSB8IDB4MWMwMDAwMDApCisjZGVmaW5lIERJRG1pYl9kb3QxMW1hY19kb3QxMUdyb3VwQWRkcmVzc2VzVGFibGVfZG90MTFBZGRyZXNzMjEgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMikgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgzKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMjEpIHwgMHgxYzAwMDAwMCkKKyNkZWZpbmUgRElEbWliX2RvdDExbWFjX2RvdDExR3JvdXBBZGRyZXNzZXNUYWJsZV9kb3QxMUFkZHJlc3MyMiBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigyKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDMpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgyMikgfCAweDFjMDAwMDAwKQorI2RlZmluZSBESURtaWJfZG90MTFtYWNfZG90MTFHcm91cEFkZHJlc3Nlc1RhYmxlX2RvdDExQWRkcmVzczIzIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDIpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMykgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDIzKSB8IDB4MWMwMDAwMDApCisjZGVmaW5lIERJRG1pYl9kb3QxMW1hY19kb3QxMUdyb3VwQWRkcmVzc2VzVGFibGVfZG90MTFBZGRyZXNzMjQgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMikgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgzKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMjQpIHwgMHgxYzAwMDAwMCkKKyNkZWZpbmUgRElEbWliX2RvdDExbWFjX2RvdDExR3JvdXBBZGRyZXNzZXNUYWJsZV9kb3QxMUFkZHJlc3MyNSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigyKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDMpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgyNSkgfCAweDFjMDAwMDAwKQorI2RlZmluZSBESURtaWJfZG90MTFtYWNfZG90MTFHcm91cEFkZHJlc3Nlc1RhYmxlX2RvdDExQWRkcmVzczI2IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDIpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMykgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDI2KSB8IDB4MWMwMDAwMDApCisjZGVmaW5lIERJRG1pYl9kb3QxMW1hY19kb3QxMUdyb3VwQWRkcmVzc2VzVGFibGVfZG90MTFBZGRyZXNzMjcgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMikgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgzKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMjcpIHwgMHgxYzAwMDAwMCkKKyNkZWZpbmUgRElEbWliX2RvdDExbWFjX2RvdDExR3JvdXBBZGRyZXNzZXNUYWJsZV9kb3QxMUFkZHJlc3MyOCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigyKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDMpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgyOCkgfCAweDFjMDAwMDAwKQorI2RlZmluZSBESURtaWJfZG90MTFtYWNfZG90MTFHcm91cEFkZHJlc3Nlc1RhYmxlX2RvdDExQWRkcmVzczI5IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDIpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMykgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDI5KSB8IDB4MWMwMDAwMDApCisjZGVmaW5lIERJRG1pYl9kb3QxMW1hY19kb3QxMUdyb3VwQWRkcmVzc2VzVGFibGVfZG90MTFBZGRyZXNzMzAgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMikgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgzKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMzApIHwgMHgxYzAwMDAwMCkKKyNkZWZpbmUgRElEbWliX2RvdDExbWFjX2RvdDExR3JvdXBBZGRyZXNzZXNUYWJsZV9kb3QxMUFkZHJlc3MzMSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigyKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDMpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgzMSkgfCAweDFjMDAwMDAwKQorI2RlZmluZSBESURtaWJfZG90MTFtYWNfZG90MTFHcm91cEFkZHJlc3Nlc1RhYmxlX2RvdDExQWRkcmVzczMyIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDIpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMykgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDMyKSB8IDB4MWMwMDAwMDApCisjZGVmaW5lIERJRG1pYl9jYXRfZG90MTFwaHkgXAorCQkJUDgwMjExRElEX01LU0VDVElPTigzKQorI2RlZmluZSBESURtaWJfZG90MTFwaHlfZG90MTFQaHlPcGVyYXRpb25UYWJsZSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigzKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDEpKQorI2RlZmluZSBESURtaWJfZG90MTFwaHlfZG90MTFQaHlPcGVyYXRpb25UYWJsZV9kb3QxMVBIWVR5cGUgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMykgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMSkgfCAweDEwMDAwMDAwKQorI2RlZmluZSBESURtaWJfZG90MTFwaHlfZG90MTFQaHlPcGVyYXRpb25UYWJsZV9kb3QxMUN1cnJlbnRSZWdEb21haW4gXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMykgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMikgfCAweDE4MDAwMDAwKQorI2RlZmluZSBESURtaWJfZG90MTFwaHlfZG90MTFQaHlPcGVyYXRpb25UYWJsZV9kb3QxMVRlbXBUeXBlIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDMpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDMpIHwgMHgxMDAwMDAwMCkKKyNkZWZpbmUgRElEbWliX2RvdDExcGh5X2RvdDExUGh5T3BlcmF0aW9uVGFibGVfZG90MTFDaGFubmVsQWdpbGl0eVByZXNlbnQgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMykgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oNCkgfCAweDEwMDAwMDAwKQorI2RlZmluZSBESURtaWJfZG90MTFwaHlfZG90MTFQaHlPcGVyYXRpb25UYWJsZV9kb3QxMUNoYW5uZWxBZ2lsaXR5RW5hYmxlZCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigzKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDEpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSg1KSB8IDB4MTAwMDAwMDApCisjZGVmaW5lIERJRG1pYl9kb3QxMXBoeV9kb3QxMVBoeU9wZXJhdGlvblRhYmxlX2RvdDExU2hvcnRQcmVhbWJsZUVuYWJsZWQgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMykgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oNikgfCAweDEwMDAwMDAwKQorI2RlZmluZSBESURtaWJfZG90MTFwaHlfZG90MTFQaHlBbnRlbm5hVGFibGUgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMykgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgyKSkKKyNkZWZpbmUgRElEbWliX2RvdDExcGh5X2RvdDExUGh5QW50ZW5uYVRhYmxlX2RvdDExQ3VycmVudFR4QW50ZW5uYSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigzKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDIpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxKSB8IDB4MTgwMDAwMDApCisjZGVmaW5lIERJRG1pYl9kb3QxMXBoeV9kb3QxMVBoeUFudGVubmFUYWJsZV9kb3QxMURpdmVyc2l0eVN1cHBvcnQgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMykgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgyKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMikgfCAweDEwMDAwMDAwKQorI2RlZmluZSBESURtaWJfZG90MTFwaHlfZG90MTFQaHlBbnRlbm5hVGFibGVfZG90MTFDdXJyZW50UnhBbnRlbm5hIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDMpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMikgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDMpIHwgMHgxODAwMDAwMCkKKyNkZWZpbmUgRElEbWliX2RvdDExcGh5X2RvdDExUGh5VHhQb3dlclRhYmxlIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDMpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMykpCisjZGVmaW5lIERJRG1pYl9kb3QxMXBoeV9kb3QxMVBoeVR4UG93ZXJUYWJsZV9kb3QxMU51bWJlclN1cHBvcnRlZFBvd2VyTGV2ZWxzIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDMpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMykgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDEpIHwgMHgxMDAwMDAwMCkKKyNkZWZpbmUgRElEbWliX2RvdDExcGh5X2RvdDExUGh5VHhQb3dlclRhYmxlX2RvdDExVHhQb3dlckxldmVsMSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigzKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDMpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgyKSB8IDB4MTAwMDAwMDApCisjZGVmaW5lIERJRG1pYl9kb3QxMXBoeV9kb3QxMVBoeVR4UG93ZXJUYWJsZV9kb3QxMVR4UG93ZXJMZXZlbDIgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMykgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgzKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMykgfCAweDEwMDAwMDAwKQorI2RlZmluZSBESURtaWJfZG90MTFwaHlfZG90MTFQaHlUeFBvd2VyVGFibGVfZG90MTFUeFBvd2VyTGV2ZWwzIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDMpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMykgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDQpIHwgMHgxMDAwMDAwMCkKKyNkZWZpbmUgRElEbWliX2RvdDExcGh5X2RvdDExUGh5VHhQb3dlclRhYmxlX2RvdDExVHhQb3dlckxldmVsNCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigzKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDMpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSg1KSB8IDB4MTAwMDAwMDApCisjZGVmaW5lIERJRG1pYl9kb3QxMXBoeV9kb3QxMVBoeVR4UG93ZXJUYWJsZV9kb3QxMVR4UG93ZXJMZXZlbDUgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMykgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgzKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oNikgfCAweDEwMDAwMDAwKQorI2RlZmluZSBESURtaWJfZG90MTFwaHlfZG90MTFQaHlUeFBvd2VyVGFibGVfZG90MTFUeFBvd2VyTGV2ZWw2IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDMpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMykgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDcpIHwgMHgxMDAwMDAwMCkKKyNkZWZpbmUgRElEbWliX2RvdDExcGh5X2RvdDExUGh5VHhQb3dlclRhYmxlX2RvdDExVHhQb3dlckxldmVsNyBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigzKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDMpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSg4KSB8IDB4MTAwMDAwMDApCisjZGVmaW5lIERJRG1pYl9kb3QxMXBoeV9kb3QxMVBoeVR4UG93ZXJUYWJsZV9kb3QxMVR4UG93ZXJMZXZlbDggXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMykgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgzKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oOSkgfCAweDEwMDAwMDAwKQorI2RlZmluZSBESURtaWJfZG90MTFwaHlfZG90MTFQaHlUeFBvd2VyVGFibGVfZG90MTFDdXJyZW50VHhQb3dlckxldmVsIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDMpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMykgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDEwKSB8IDB4MTgwMDAwMDApCisjZGVmaW5lIERJRG1pYl9kb3QxMXBoeV9kb3QxMVBoeUZIU1NUYWJsZSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigzKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDQpKQorI2RlZmluZSBESURtaWJfZG90MTFwaHlfZG90MTFQaHlGSFNTVGFibGVfZG90MTFIb3BUaW1lIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDMpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNCkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDEpIHwgMHgxMDAwMDAwMCkKKyNkZWZpbmUgRElEbWliX2RvdDExcGh5X2RvdDExUGh5RkhTU1RhYmxlX2RvdDExQ3VycmVudENoYW5uZWxOdW1iZXIgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMykgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg0KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMikgfCAweDE4MDAwMDAwKQorI2RlZmluZSBESURtaWJfZG90MTFwaHlfZG90MTFQaHlGSFNTVGFibGVfZG90MTFNYXhEd2VsbFRpbWUgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMykgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg0KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMykgfCAweDEwMDAwMDAwKQorI2RlZmluZSBESURtaWJfZG90MTFwaHlfZG90MTFQaHlGSFNTVGFibGVfZG90MTFDdXJyZW50RHdlbGxUaW1lIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDMpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNCkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDQpIHwgMHgxODAwMDAwMCkKKyNkZWZpbmUgRElEbWliX2RvdDExcGh5X2RvdDExUGh5RkhTU1RhYmxlX2RvdDExQ3VycmVudFNldCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigzKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDQpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSg1KSB8IDB4MTgwMDAwMDApCisjZGVmaW5lIERJRG1pYl9kb3QxMXBoeV9kb3QxMVBoeUZIU1NUYWJsZV9kb3QxMUN1cnJlbnRQYXR0ZXJuIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDMpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNCkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDYpIHwgMHgxODAwMDAwMCkKKyNkZWZpbmUgRElEbWliX2RvdDExcGh5X2RvdDExUGh5RkhTU1RhYmxlX2RvdDExQ3VycmVudEluZGV4IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDMpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNCkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDcpIHwgMHgxODAwMDAwMCkKKyNkZWZpbmUgRElEbWliX2RvdDExcGh5X2RvdDExUGh5RFNTU1RhYmxlIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDMpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNSkpCisjZGVmaW5lIERJRG1pYl9kb3QxMXBoeV9kb3QxMVBoeURTU1NUYWJsZV9kb3QxMUN1cnJlbnRDaGFubmVsIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDMpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDEpIHwgMHgxMDAwMDAwMCkKKyNkZWZpbmUgRElEbWliX2RvdDExcGh5X2RvdDExUGh5RFNTU1RhYmxlX2RvdDExQ0NBTW9kZVN1cHBvcnRlZCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigzKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDUpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgyKSB8IDB4MTAwMDAwMDApCisjZGVmaW5lIERJRG1pYl9kb3QxMXBoeV9kb3QxMVBoeURTU1NUYWJsZV9kb3QxMUN1cnJlbnRDQ0FNb2RlIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDMpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDMpIHwgMHgxMDAwMDAwMCkKKyNkZWZpbmUgRElEbWliX2RvdDExcGh5X2RvdDExUGh5RFNTU1RhYmxlX2RvdDExRURUaHJlc2hvbGQgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMykgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oNCkgfCAweDE4MDAwMDAwKQorI2RlZmluZSBESURtaWJfZG90MTFwaHlfZG90MTFQaHlEU1NTVGFibGVfZG90MTFTaG9ydFByZWFtYmxlT3B0aW9uSW1wbGVtZW50ZWQgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMykgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oNSkgfCAweDEwMDAwMDAwKQorI2RlZmluZSBESURtaWJfZG90MTFwaHlfZG90MTFQaHlEU1NTVGFibGVfZG90MTFQQkNDT3B0aW9uSW1wbGVtZW50ZWQgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMykgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oNikgfCAweDEwMDAwMDAwKQorI2RlZmluZSBESURtaWJfZG90MTFwaHlfZG90MTFQaHlJUlRhYmxlIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDMpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNikpCisjZGVmaW5lIERJRG1pYl9kb3QxMXBoeV9kb3QxMVBoeUlSVGFibGVfZG90MTFDQ0FXYXRjaGRvZ1RpbWVyTWF4IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDMpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNikgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDEpIHwgMHgxODAwMDAwMCkKKyNkZWZpbmUgRElEbWliX2RvdDExcGh5X2RvdDExUGh5SVJUYWJsZV9kb3QxMUNDQVdhdGNoZG9nQ291bnRNYXggXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMykgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg2KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMikgfCAweDE4MDAwMDAwKQorI2RlZmluZSBESURtaWJfZG90MTFwaHlfZG90MTFQaHlJUlRhYmxlX2RvdDExQ0NBV2F0Y2hkb2dUaW1lck1pbiBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigzKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDYpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgzKSB8IDB4MTgwMDAwMDApCisjZGVmaW5lIERJRG1pYl9kb3QxMXBoeV9kb3QxMVBoeUlSVGFibGVfZG90MTFDQ0FXYXRjaGRvZ0NvdW50TWluIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDMpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNikgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDQpIHwgMHgxODAwMDAwMCkKKyNkZWZpbmUgRElEbWliX2RvdDExcGh5X2RvdDExUmVnRG9tYWluc1N1cHBvcnRlZFRhYmxlIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDMpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNykpCisjZGVmaW5lIERJRG1pYl9kb3QxMXBoeV9kb3QxMVJlZ0RvbWFpbnNTdXBwb3J0ZWRUYWJsZV9kb3QxMVJlZ0RvbWFpbnNTdXBwb3J0SW5kZXggXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMykgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg3KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMSkgfCAweDFjMDAwMDAwKQorI2RlZmluZSBESURtaWJfZG90MTFwaHlfZG90MTFSZWdEb21haW5zU3VwcG9ydGVkVGFibGVfZG90MTFSZWdEb21haW5zU3VwcG9ydFZhbHVlIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDMpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNykgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDIpIHwgMHgxNDAwMDAwMCkKKyNkZWZpbmUgRElEbWliX2RvdDExcGh5X2RvdDExQW50ZW5uYXNMaXN0VGFibGUgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMykgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg4KSkKKyNkZWZpbmUgRElEbWliX2RvdDExcGh5X2RvdDExQW50ZW5uYXNMaXN0VGFibGVfZG90MTFBbnRlbm5hTGlzdEluZGV4IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDMpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoOCkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDEpIHwgMHgxYzAwMDAwMCkKKyNkZWZpbmUgRElEbWliX2RvdDExcGh5X2RvdDExQW50ZW5uYXNMaXN0VGFibGVfZG90MTFTdXBwb3J0ZWRUeEFudGVubmEgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMykgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg4KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMikgfCAweDFjMDAwMDAwKQorI2RlZmluZSBESURtaWJfZG90MTFwaHlfZG90MTFBbnRlbm5hc0xpc3RUYWJsZV9kb3QxMVN1cHBvcnRlZFJ4QW50ZW5uYSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigzKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDgpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgzKSB8IDB4MWMwMDAwMDApCisjZGVmaW5lIERJRG1pYl9kb3QxMXBoeV9kb3QxMUFudGVubmFzTGlzdFRhYmxlX2RvdDExRGl2ZXJzaXR5U2VsZWN0aW9uUnggXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMykgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg4KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oNCkgfCAweDFjMDAwMDAwKQorI2RlZmluZSBESURtaWJfZG90MTFwaHlfZG90MTFTdXBwb3J0ZWREYXRhUmF0ZXNUeFRhYmxlIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDMpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoOSkpCisjZGVmaW5lIERJRG1pYl9kb3QxMXBoeV9kb3QxMVN1cHBvcnRlZERhdGFSYXRlc1R4VGFibGVfZG90MTFTdXBwb3J0ZWREYXRhUmF0ZXNUeEluZGV4IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDMpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoOSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDEpIHwgMHgxYzAwMDAwMCkKKyNkZWZpbmUgRElEbWliX2RvdDExcGh5X2RvdDExU3VwcG9ydGVkRGF0YVJhdGVzVHhUYWJsZV9kb3QxMVN1cHBvcnRlZERhdGFSYXRlc1R4VmFsdWUgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMykgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg5KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMikgfCAweDE0MDAwMDAwKQorI2RlZmluZSBESURtaWJfZG90MTFwaHlfZG90MTFTdXBwb3J0ZWREYXRhUmF0ZXNSeFRhYmxlIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDMpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMTApKQorI2RlZmluZSBESURtaWJfZG90MTFwaHlfZG90MTFTdXBwb3J0ZWREYXRhUmF0ZXNSeFRhYmxlX2RvdDExU3VwcG9ydGVkRGF0YVJhdGVzUnhJbmRleCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigzKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDEwKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMSkgfCAweDFjMDAwMDAwKQorI2RlZmluZSBESURtaWJfZG90MTFwaHlfZG90MTFTdXBwb3J0ZWREYXRhUmF0ZXNSeFRhYmxlX2RvdDExU3VwcG9ydGVkRGF0YVJhdGVzUnhWYWx1ZSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTigzKSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDEwKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMikgfCAweDE0MDAwMDAwKQorI2RlZmluZSBESURtaWJfY2F0X2xueCBcCisJCQlQODAyMTFESURfTUtTRUNUSU9OKDQpCisjZGVmaW5lIERJRG1pYl9sbnhfbG54Q29uZmlnVGFibGUgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNCkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgxKSkKKyNkZWZpbmUgRElEbWliX2xueF9sbnhDb25maWdUYWJsZV9sbnhSU05BSUUgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNCkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMSkgfCAweDE4MDAwMDAwKQorI2RlZmluZSBESURtaWJfY2F0X3AyIFwKKwkJCVA4MDIxMURJRF9NS1NFQ1RJT04oNSkKKyNkZWZpbmUgRElEbWliX3AyX3AyVGFibGUgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgxKSkKKyNkZWZpbmUgRElEbWliX3AyX3AyVGFibGVfcDJNTVR4IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDEpIHwgMHgxODAwMDAwMCkKKyNkZWZpbmUgRElEbWliX3AyX3AyVGFibGVfcDJFYXJseUJlYWNvbiBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDEpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgyKSB8IDB4MTgwMDAwMDApCisjZGVmaW5lIERJRG1pYl9wMl9wMlRhYmxlX3AyUmVjZWl2ZWRGcmFtZVN0YXRpc3RpY3MgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMykgfCAweDEwMDAwMDAwKQorI2RlZmluZSBESURtaWJfcDJfcDJUYWJsZV9wMkNvbW11bmljYXRpb25UYWxsaWVzIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDQpIHwgMHgxMDAwMDAwMCkKKyNkZWZpbmUgRElEbWliX3AyX3AyVGFibGVfcDJBdXRoZW50aWNhdGVkIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDUpIHwgMHgxMDAwMDAwMCkKKyNkZWZpbmUgRElEbWliX3AyX3AyVGFibGVfcDJBc3NvY2lhdGVkIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDYpIHwgMHgxMDAwMDAwMCkKKyNkZWZpbmUgRElEbWliX3AyX3AyVGFibGVfcDJQb3dlclNhdmVVc2VyQ291bnQgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oNykgfCAweDEwMDAwMDAwKQorI2RlZmluZSBESURtaWJfcDJfcDJUYWJsZV9wMkNvbW1lbnQgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oOCkgfCAweDE4MDAwMDAwKQorI2RlZmluZSBESURtaWJfcDJfcDJUYWJsZV9wMkFjY2Vzc01vZGUgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oOSkgfCAweDE4MDAwMDAwKQorI2RlZmluZSBESURtaWJfcDJfcDJUYWJsZV9wMkFjY2Vzc0FsbG93IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDEwKSB8IDB4MTgwMDAwMDApCisjZGVmaW5lIERJRG1pYl9wMl9wMlRhYmxlX3AyQWNjZXNzRGVueSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDEpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxMSkgfCAweDE4MDAwMDAwKQorI2RlZmluZSBESURtaWJfcDJfcDJUYWJsZV9wMkNoYW5uZWxJbmZvUmVzdWx0cyBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDEpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxMikgfCAweDEwMDAwMDAwKQorI2RlZmluZSBESURtaWJfcDJfcDJTdGF0aWMgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgyKSkKKyNkZWZpbmUgRElEbWliX3AyX3AyU3RhdGljX3AyQ25mUG9ydFR5cGUgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgyKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMSkgfCAweDE4MDAwMDAwKQorI2RlZmluZSBESURtaWJfcDJfcDJTdGF0aWNfcDJDbmZPd25NQUNBZGRyZXNzIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMikgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDIpIHwgMHgxODAwMDAwMCkKKyNkZWZpbmUgRElEbWliX3AyX3AyU3RhdGljX3AyQ25mRGVzaXJlZFNTSUQgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgyKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMykgfCAweDE4MDAwMDAwKQorI2RlZmluZSBESURtaWJfcDJfcDJTdGF0aWNfcDJDbmZPd25DaGFubmVsIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMikgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDQpIHwgMHgxODAwMDAwMCkKKyNkZWZpbmUgRElEbWliX3AyX3AyU3RhdGljX3AyQ25mT3duU1NJRCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDIpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSg1KSB8IDB4MTgwMDAwMDApCisjZGVmaW5lIERJRG1pYl9wMl9wMlN0YXRpY19wMkNuZk93bkFUSU1XaW5kb3cgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgyKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oNikgfCAweDE4MDAwMDAwKQorI2RlZmluZSBESURtaWJfcDJfcDJTdGF0aWNfcDJDbmZTeXN0ZW1TY2FsZSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDIpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSg3KSB8IDB4MTgwMDAwMDApCisjZGVmaW5lIERJRG1pYl9wMl9wMlN0YXRpY19wMkNuZk1heERhdGFMZW5ndGggXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgyKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oOCkgfCAweDE4MDAwMDAwKQorI2RlZmluZSBESURtaWJfcDJfcDJTdGF0aWNfcDJDbmZXRFNBZGRyZXNzIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMikgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDkpIHwgMHgxODAwMDAwMCkKKyNkZWZpbmUgRElEbWliX3AyX3AyU3RhdGljX3AyQ25mUE1FbmFibGVkIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMikgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDEwKSB8IDB4MTgwMDAwMDApCisjZGVmaW5lIERJRG1pYl9wMl9wMlN0YXRpY19wMkNuZlBNRVBTIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMikgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDExKSB8IDB4MTgwMDAwMDApCisjZGVmaW5lIERJRG1pYl9wMl9wMlN0YXRpY19wMkNuZk11bHRpY2FzdFJlY2VpdmUgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgyKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMTIpIHwgMHgxODAwMDAwMCkKKyNkZWZpbmUgRElEbWliX3AyX3AyU3RhdGljX3AyQ25mTWF4U2xlZXBEdXJhdGlvbiBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDIpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxMykgfCAweDE4MDAwMDAwKQorI2RlZmluZSBESURtaWJfcDJfcDJTdGF0aWNfcDJDbmZQTUhvbGRvdmVyRHVyYXRpb24gXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgyKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMTQpIHwgMHgxODAwMDAwMCkKKyNkZWZpbmUgRElEbWliX3AyX3AyU3RhdGljX3AyQ25mT3duTmFtZSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDIpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxNSkgfCAweDE4MDAwMDAwKQorI2RlZmluZSBESURtaWJfcDJfcDJTdGF0aWNfcDJDbmZPd25EVElNUGVyaW9kIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMikgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDE2KSB8IDB4MTgwMDAwMDApCisjZGVmaW5lIERJRG1pYl9wMl9wMlN0YXRpY19wMkNuZldEU0FkZHJlc3MxIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMikgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDE3KSB8IDB4MTgwMDAwMDApCisjZGVmaW5lIERJRG1pYl9wMl9wMlN0YXRpY19wMkNuZldEU0FkZHJlc3MyIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMikgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDE4KSB8IDB4MTgwMDAwMDApCisjZGVmaW5lIERJRG1pYl9wMl9wMlN0YXRpY19wMkNuZldEU0FkZHJlc3MzIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMikgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDE5KSB8IDB4MTgwMDAwMDApCisjZGVmaW5lIERJRG1pYl9wMl9wMlN0YXRpY19wMkNuZldEU0FkZHJlc3M0IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMikgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDIwKSB8IDB4MTgwMDAwMDApCisjZGVmaW5lIERJRG1pYl9wMl9wMlN0YXRpY19wMkNuZldEU0FkZHJlc3M1IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMikgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDIxKSB8IDB4MTgwMDAwMDApCisjZGVmaW5lIERJRG1pYl9wMl9wMlN0YXRpY19wMkNuZldEU0FkZHJlc3M2IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMikgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDIyKSB8IDB4MTgwMDAwMDApCisjZGVmaW5lIERJRG1pYl9wMl9wMlN0YXRpY19wMkNuZk11bHRpY2FzdFBNQnVmZmVyaW5nIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMikgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDIzKSB8IDB4MTgwMDAwMDApCisjZGVmaW5lIERJRG1pYl9wMl9wMlN0YXRpY19wMkNuZldFUERlZmF1bHRLZXlJRCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDIpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgyNCkgfCAweDE4MDAwMDAwKQorI2RlZmluZSBESURtaWJfcDJfcDJTdGF0aWNfcDJDbmZXRVBEZWZhdWx0S2V5MCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDIpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgyNSkgfCAweDA4MDAwMDAwKQorI2RlZmluZSBESURtaWJfcDJfcDJTdGF0aWNfcDJDbmZXRVBEZWZhdWx0S2V5MSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDIpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgyNikgfCAweDA4MDAwMDAwKQorI2RlZmluZSBESURtaWJfcDJfcDJTdGF0aWNfcDJDbmZXRVBEZWZhdWx0S2V5MiBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDIpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgyNykgfCAweDA4MDAwMDAwKQorI2RlZmluZSBESURtaWJfcDJfcDJTdGF0aWNfcDJDbmZXRVBEZWZhdWx0S2V5MyBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDIpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgyOCkgfCAweDA4MDAwMDAwKQorI2RlZmluZSBESURtaWJfcDJfcDJTdGF0aWNfcDJDbmZXRVBGbGFncyBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDIpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgyOSkgfCAweDE4MDAwMDAwKQorI2RlZmluZSBESURtaWJfcDJfcDJTdGF0aWNfcDJDbmZBdXRoZW50aWNhdGlvbiBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDIpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgzMCkgfCAweDE4MDAwMDAwKQorI2RlZmluZSBESURtaWJfcDJfcDJTdGF0aWNfcDJDbmZNYXhBc3NvY2lhdGVkU3RhdGlvbnMgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgyKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMzEpIHwgMHgxODAwMDAwMCkKKyNkZWZpbmUgRElEbWliX3AyX3AyU3RhdGljX3AyQ25mVHhDb250cm9sIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMikgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDMyKSB8IDB4MTgwMDAwMDApCisjZGVmaW5lIERJRG1pYl9wMl9wMlN0YXRpY19wMkNuZlJvYW1pbmdNb2RlIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMikgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDMzKSB8IDB4MTgwMDAwMDApCisjZGVmaW5lIERJRG1pYl9wMl9wMlN0YXRpY19wMkNuZkhvc3RBdXRoZW50aWNhdGlvbiBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDIpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgzNCkgfCAweDE4MDAwMDAwKQorI2RlZmluZSBESURtaWJfcDJfcDJTdGF0aWNfcDJDbmZSY3ZDcmNFcnJvciBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDIpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgzNSkgfCAweDE4MDAwMDAwKQorI2RlZmluZSBESURtaWJfcDJfcDJTdGF0aWNfcDJDbmZBbHRSZXRyeUNvdW50IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMikgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDM2KSB8IDB4MTgwMDAwMDApCisjZGVmaW5lIERJRG1pYl9wMl9wMlN0YXRpY19wMkNuZkJlYWNvbkludGVydmFsIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMikgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDM3KSB8IDB4MTgwMDAwMDApCisjZGVmaW5lIERJRG1pYl9wMl9wMlN0YXRpY19wMkNuZk1lZGl1bU9jY3VwYW5jeUxpbWl0IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMikgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDM4KSB8IDB4MTgwMDAwMDApCisjZGVmaW5lIERJRG1pYl9wMl9wMlN0YXRpY19wMkNuZkNGUFBlcmlvZCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDIpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgzOSkgfCAweDE4MDAwMDAwKQorI2RlZmluZSBESURtaWJfcDJfcDJTdGF0aWNfcDJDbmZDRlBNYXhEdXJhdGlvbiBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDIpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSg0MCkgfCAweDE4MDAwMDAwKQorI2RlZmluZSBESURtaWJfcDJfcDJTdGF0aWNfcDJDbmZDRlBGbGFncyBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDIpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSg0MSkgfCAweDE4MDAwMDAwKQorI2RlZmluZSBESURtaWJfcDJfcDJTdGF0aWNfcDJDbmZTVEFQQ0ZJbmZvIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMikgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDQyKSB8IDB4MTgwMDAwMDApCisjZGVmaW5lIERJRG1pYl9wMl9wMlN0YXRpY19wMkNuZlByaW9yaXR5UVVzYWdlIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMikgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDQzKSB8IDB4MTgwMDAwMDApCisjZGVmaW5lIERJRG1pYl9wMl9wMlN0YXRpY19wMkNuZlRJTUN0cmwgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgyKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oNDQpIHwgMHgxODAwMDAwMCkKKyNkZWZpbmUgRElEbWliX3AyX3AyU3RhdGljX3AyQ25mVGhpcnR5MlRhbGx5IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMikgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDQ1KSB8IDB4MTgwMDAwMDApCisjZGVmaW5lIERJRG1pYl9wMl9wMlN0YXRpY19wMkNuZkVuaFNlY3VyaXR5IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMikgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDQ2KSB8IDB4MTgwMDAwMDApCisjZGVmaW5lIERJRG1pYl9wMl9wMlN0YXRpY19wMkNuZlNob3J0UHJlYW1ibGUgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgyKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oNDcpIHwgMHgxODAwMDAwMCkKKyNkZWZpbmUgRElEbWliX3AyX3AyU3RhdGljX3AyQ25mRXhjbHVkZUxvbmdQcmVhbWJsZSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDIpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSg0OCkgfCAweDE4MDAwMDAwKQorI2RlZmluZSBESURtaWJfcDJfcDJTdGF0aWNfcDJDbmZBdXRoZW50aWNhdGlvblJzcFRPIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMikgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDQ5KSB8IDB4MTgwMDAwMDApCisjZGVmaW5lIERJRG1pYl9wMl9wMlN0YXRpY19wMkNuZkJhc2ljUmF0ZXMgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgyKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oNTApIHwgMHgxODAwMDAwMCkKKyNkZWZpbmUgRElEbWliX3AyX3AyU3RhdGljX3AyQ25mU3VwcG9ydGVkUmF0ZXMgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgyKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oNTEpIHwgMHgxODAwMDAwMCkKKyNkZWZpbmUgRElEbWliX3AyX3AyRHluYW1pYyBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDMpKQorI2RlZmluZSBESURtaWJfcDJfcDJEeW5hbWljX3AyQ3JlYXRlSUJTUyBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDMpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxKSB8IDB4MTgwMDAwMDApCisjZGVmaW5lIERJRG1pYl9wMl9wMkR5bmFtaWNfcDJGcmFnbWVudGF0aW9uVGhyZXNob2xkIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMykgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDIpIHwgMHgxODAwMDAwMCkKKyNkZWZpbmUgRElEbWliX3AyX3AyRHluYW1pY19wMlJUU1RocmVzaG9sZCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDMpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgzKSB8IDB4MTgwMDAwMDApCisjZGVmaW5lIERJRG1pYl9wMl9wMkR5bmFtaWNfcDJUeFJhdGVDb250cm9sIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMykgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDQpIHwgMHgxODAwMDAwMCkKKyNkZWZpbmUgRElEbWliX3AyX3AyRHluYW1pY19wMlByb21pc2N1b3VzTW9kZSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDMpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSg1KSB8IDB4MTgwMDAwMDApCisjZGVmaW5lIERJRG1pYl9wMl9wMkR5bmFtaWNfcDJGcmFnbWVudGF0aW9uVGhyZXNob2xkMCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDMpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSg2KSB8IDB4MTgwMDAwMDApCisjZGVmaW5lIERJRG1pYl9wMl9wMkR5bmFtaWNfcDJGcmFnbWVudGF0aW9uVGhyZXNob2xkMSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDMpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSg3KSB8IDB4MTgwMDAwMDApCisjZGVmaW5lIERJRG1pYl9wMl9wMkR5bmFtaWNfcDJGcmFnbWVudGF0aW9uVGhyZXNob2xkMiBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDMpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSg4KSB8IDB4MTgwMDAwMDApCisjZGVmaW5lIERJRG1pYl9wMl9wMkR5bmFtaWNfcDJGcmFnbWVudGF0aW9uVGhyZXNob2xkMyBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDMpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSg5KSB8IDB4MTgwMDAwMDApCisjZGVmaW5lIERJRG1pYl9wMl9wMkR5bmFtaWNfcDJGcmFnbWVudGF0aW9uVGhyZXNob2xkNCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDMpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxMCkgfCAweDE4MDAwMDAwKQorI2RlZmluZSBESURtaWJfcDJfcDJEeW5hbWljX3AyRnJhZ21lbnRhdGlvblRocmVzaG9sZDUgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgzKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMTEpIHwgMHgxODAwMDAwMCkKKyNkZWZpbmUgRElEbWliX3AyX3AyRHluYW1pY19wMkZyYWdtZW50YXRpb25UaHJlc2hvbGQ2IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMykgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDEyKSB8IDB4MTgwMDAwMDApCisjZGVmaW5lIERJRG1pYl9wMl9wMkR5bmFtaWNfcDJSVFNUaHJlc2hvbGQwIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMykgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDEzKSB8IDB4MTgwMDAwMDApCisjZGVmaW5lIERJRG1pYl9wMl9wMkR5bmFtaWNfcDJSVFNUaHJlc2hvbGQxIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMykgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDE0KSB8IDB4MTgwMDAwMDApCisjZGVmaW5lIERJRG1pYl9wMl9wMkR5bmFtaWNfcDJSVFNUaHJlc2hvbGQyIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMykgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDE1KSB8IDB4MTgwMDAwMDApCisjZGVmaW5lIERJRG1pYl9wMl9wMkR5bmFtaWNfcDJSVFNUaHJlc2hvbGQzIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMykgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDE2KSB8IDB4MTgwMDAwMDApCisjZGVmaW5lIERJRG1pYl9wMl9wMkR5bmFtaWNfcDJSVFNUaHJlc2hvbGQ0IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMykgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDE3KSB8IDB4MTgwMDAwMDApCisjZGVmaW5lIERJRG1pYl9wMl9wMkR5bmFtaWNfcDJSVFNUaHJlc2hvbGQ1IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMykgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDE4KSB8IDB4MTgwMDAwMDApCisjZGVmaW5lIERJRG1pYl9wMl9wMkR5bmFtaWNfcDJSVFNUaHJlc2hvbGQ2IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMykgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDE5KSB8IDB4MTgwMDAwMDApCisjZGVmaW5lIERJRG1pYl9wMl9wMkR5bmFtaWNfcDJUeFJhdGVDb250cm9sMCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDMpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgyMCkgfCAweDE4MDAwMDAwKQorI2RlZmluZSBESURtaWJfcDJfcDJEeW5hbWljX3AyVHhSYXRlQ29udHJvbDEgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgzKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMjEpIHwgMHgxODAwMDAwMCkKKyNkZWZpbmUgRElEbWliX3AyX3AyRHluYW1pY19wMlR4UmF0ZUNvbnRyb2wyIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMykgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDIyKSB8IDB4MTgwMDAwMDApCisjZGVmaW5lIERJRG1pYl9wMl9wMkR5bmFtaWNfcDJUeFJhdGVDb250cm9sMyBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDMpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgyMykgfCAweDE4MDAwMDAwKQorI2RlZmluZSBESURtaWJfcDJfcDJEeW5hbWljX3AyVHhSYXRlQ29udHJvbDQgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgzKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMjQpIHwgMHgxODAwMDAwMCkKKyNkZWZpbmUgRElEbWliX3AyX3AyRHluYW1pY19wMlR4UmF0ZUNvbnRyb2w1IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMykgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDI1KSB8IDB4MTgwMDAwMDApCisjZGVmaW5lIERJRG1pYl9wMl9wMkR5bmFtaWNfcDJUeFJhdGVDb250cm9sNiBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDMpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgyNikgfCAweDE4MDAwMDAwKQorI2RlZmluZSBESURtaWJfcDJfcDJCZWhhdmlvciBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDQpKQorI2RlZmluZSBESURtaWJfcDJfcDJCZWhhdmlvcl9wMlRpY2tUaW1lIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNCkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDEpIHwgMHgxODAwMDAwMCkKKyNkZWZpbmUgRElEbWliX3AyX3AyTklDIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNSkpCisjZGVmaW5lIERJRG1pYl9wMl9wMk5JQ19wMk1heExvYWRUaW1lIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDEpIHwgMHgxMDAwMDAwMCkKKyNkZWZpbmUgRElEbWliX3AyX3AyTklDX3AyRExCdWZmZXJQYWdlIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDIpIHwgMHgxMDAwMDAwMCkKKyNkZWZpbmUgRElEbWliX3AyX3AyTklDX3AyRExCdWZmZXJPZmZzZXQgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMykgfCAweDEwMDAwMDAwKQorI2RlZmluZSBESURtaWJfcDJfcDJOSUNfcDJETEJ1ZmZlckxlbmd0aCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDUpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSg0KSB8IDB4MTAwMDAwMDApCisjZGVmaW5lIERJRG1pYl9wMl9wMk5JQ19wMlBSSUlkZW50aXR5IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDUpIHwgMHgxMDAwMDAwMCkKKyNkZWZpbmUgRElEbWliX3AyX3AyTklDX3AyUFJJU3VwUmFuZ2UgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oNikgfCAweDEwMDAwMDAwKQorI2RlZmluZSBESURtaWJfcDJfcDJOSUNfcDJDRklBY3RSYW5nZXMgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oNykgfCAweDEwMDAwMDAwKQorI2RlZmluZSBESURtaWJfcDJfcDJOSUNfcDJOSUNTZXJpYWxOdW1iZXIgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oOCkgfCAweDEwMDAwMDAwKQorI2RlZmluZSBESURtaWJfcDJfcDJOSUNfcDJOSUNJZGVudGl0eSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDUpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSg5KSB8IDB4MTAwMDAwMDApCisjZGVmaW5lIERJRG1pYl9wMl9wMk5JQ19wMk1GSVN1cFJhbmdlIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDEwKSB8IDB4MTAwMDAwMDApCisjZGVmaW5lIERJRG1pYl9wMl9wMk5JQ19wMkNGSVN1cFJhbmdlIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDExKSB8IDB4MTAwMDAwMDApCisjZGVmaW5lIERJRG1pYl9wMl9wMk5JQ19wMkNoYW5uZWxMaXN0IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDEyKSB8IDB4MTAwMDAwMDApCisjZGVmaW5lIERJRG1pYl9wMl9wMk5JQ19wMlJlZ3VsYXRvcnlEb21haW5zIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDEzKSB8IDB4MTAwMDAwMDApCisjZGVmaW5lIERJRG1pYl9wMl9wMk5JQ19wMlRlbXBUeXBlIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDE0KSB8IDB4MTAwMDAwMDApCisjZGVmaW5lIERJRG1pYl9wMl9wMk5JQ19wMlNUQUlkZW50aXR5IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDE1KSB8IDB4MTAwMDAwMDApCisjZGVmaW5lIERJRG1pYl9wMl9wMk5JQ19wMlNUQVN1cFJhbmdlIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDE2KSB8IDB4MTAwMDAwMDApCisjZGVmaW5lIERJRG1pYl9wMl9wMk5JQ19wMk1GSUFjdFJhbmdlcyBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDUpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxNykgfCAweDEwMDAwMDAwKQorI2RlZmluZSBESURtaWJfcDJfcDJOSUNfcDJTVEFDRklBY3RSYW5nZXMgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMTgpIHwgMHgxMDAwMDAwMCkKKyNkZWZpbmUgRElEbWliX3AyX3AyTklDX3AyQnVpbGRTZXF1ZW5jZSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDUpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxOSkgfCAweDEwMDAwMDAwKQorI2RlZmluZSBESURtaWJfcDJfcDJOSUNfcDJQcmltYXJ5RldJRCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDUpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgyMCkgfCAweDEwMDAwMDAwKQorI2RlZmluZSBESURtaWJfcDJfcDJOSUNfcDJTZWNvbmRhcnlGV0lEIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDIxKSB8IDB4MTAwMDAwMDApCisjZGVmaW5lIERJRG1pYl9wMl9wMk5JQ19wMlRlcnRpYXJ5RldJRCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDUpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgyMikgfCAweDEwMDAwMDAwKQorI2RlZmluZSBESURtaWJfcDJfcDJNQUMgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg2KSkKKyNkZWZpbmUgRElEbWliX3AyX3AyTUFDX3AyUG9ydFN0YXR1cyBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDYpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxKSB8IDB4MTAwMDAwMDApCisjZGVmaW5lIERJRG1pYl9wMl9wMk1BQ19wMkN1cnJlbnRTU0lEIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNikgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDIpIHwgMHgxMDAwMDAwMCkKKyNkZWZpbmUgRElEbWliX3AyX3AyTUFDX3AyQ3VycmVudEJTU0lEIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNikgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDMpIHwgMHgxMDAwMDAwMCkKKyNkZWZpbmUgRElEbWliX3AyX3AyTUFDX3AyQ29tbXNRdWFsaXR5IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNikgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDQpIHwgMHgxMDAwMDAwMCkKKyNkZWZpbmUgRElEbWliX3AyX3AyTUFDX3AyQ29tbXNRdWFsaXR5Q1EgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg2KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oNSkgfCAweDEwMDAwMDAwKQorI2RlZmluZSBESURtaWJfcDJfcDJNQUNfcDJDb21tc1F1YWxpdHlBU0wgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg2KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oNikgfCAweDEwMDAwMDAwKQorI2RlZmluZSBESURtaWJfcDJfcDJNQUNfcDJDb21tc1F1YWxpdHlBTkwgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg2KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oNykgfCAweDEwMDAwMDAwKQorI2RlZmluZSBESURtaWJfcDJfcDJNQUNfcDJkYm1Db21tc1F1YWxpdHkgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg2KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oOCkgfCAweDEwMDAwMDAwKQorI2RlZmluZSBESURtaWJfcDJfcDJNQUNfcDJkYm1Db21tc1F1YWxpdHlDUSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDYpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSg5KSB8IDB4MTAwMDAwMDApCisjZGVmaW5lIERJRG1pYl9wMl9wMk1BQ19wMmRibUNvbW1zUXVhbGl0eUFTTCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDYpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxMCkgfCAweDEwMDAwMDAwKQorI2RlZmluZSBESURtaWJfcDJfcDJNQUNfcDJkYm1Db21tc1F1YWxpdHlBTkwgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg2KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMTEpIHwgMHgxMDAwMDAwMCkKKyNkZWZpbmUgRElEbWliX3AyX3AyTUFDX3AyQ3VycmVudFR4UmF0ZSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDYpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxMikgfCAweDEwMDAwMDAwKQorI2RlZmluZSBESURtaWJfcDJfcDJNQUNfcDJDdXJyZW50QmVhY29uSW50ZXJ2YWwgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg2KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMTMpIHwgMHgxMDAwMDAwMCkKKyNkZWZpbmUgRElEbWliX3AyX3AyTUFDX3AyU3RhQ3VycmVudFNjYWxlVGhyZXNob2xkcyBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDYpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxNCkgfCAweDEwMDAwMDAwKQorI2RlZmluZSBESURtaWJfcDJfcDJNQUNfcDJBUEN1cnJlbnRTY2FsZVRocmVzaG9sZHMgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg2KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMTUpIHwgMHgxMDAwMDAwMCkKKyNkZWZpbmUgRElEbWliX3AyX3AyTUFDX3AyUHJvdG9jb2xSc3BUaW1lIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNikgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDE2KSB8IDB4MTAwMDAwMDApCisjZGVmaW5lIERJRG1pYl9wMl9wMk1BQ19wMlNob3J0UmV0cnlMaW1pdCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDYpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxNykgfCAweDEwMDAwMDAwKQorI2RlZmluZSBESURtaWJfcDJfcDJNQUNfcDJMb25nUmV0cnlMaW1pdCBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDYpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgxOCkgfCAweDEwMDAwMDAwKQorI2RlZmluZSBESURtaWJfcDJfcDJNQUNfcDJNYXhUcmFuc21pdExpZmV0aW1lIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNikgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDE5KSB8IDB4MTAwMDAwMDApCisjZGVmaW5lIERJRG1pYl9wMl9wMk1BQ19wMk1heFJlY2VpdmVMaWZldGltZSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDYpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgyMCkgfCAweDEwMDAwMDAwKQorI2RlZmluZSBESURtaWJfcDJfcDJNQUNfcDJDRlBvbGxhYmxlIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNikgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDIxKSB8IDB4MTAwMDAwMDApCisjZGVmaW5lIERJRG1pYl9wMl9wMk1BQ19wMkF1dGhlbnRpY2F0aW9uQWxnb3JpdGhtcyBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDYpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgyMikgfCAweDEwMDAwMDAwKQorI2RlZmluZSBESURtaWJfcDJfcDJNQUNfcDJQcml2YWN5T3B0aW9uSW1wbGVtZW50ZWQgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg2KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMjMpIHwgMHgxMDAwMDAwMCkKKyNkZWZpbmUgRElEbWliX3AyX3AyTUFDX3AyQ3VycmVudFR4UmF0ZTEgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg2KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMjQpIHwgMHgxMDAwMDAwMCkKKyNkZWZpbmUgRElEbWliX3AyX3AyTUFDX3AyQ3VycmVudFR4UmF0ZTIgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg2KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMjUpIHwgMHgxMDAwMDAwMCkKKyNkZWZpbmUgRElEbWliX3AyX3AyTUFDX3AyQ3VycmVudFR4UmF0ZTMgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg2KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMjYpIHwgMHgxMDAwMDAwMCkKKyNkZWZpbmUgRElEbWliX3AyX3AyTUFDX3AyQ3VycmVudFR4UmF0ZTQgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg2KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMjcpIHwgMHgxMDAwMDAwMCkKKyNkZWZpbmUgRElEbWliX3AyX3AyTUFDX3AyQ3VycmVudFR4UmF0ZTUgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg2KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMjgpIHwgMHgxMDAwMDAwMCkKKyNkZWZpbmUgRElEbWliX3AyX3AyTUFDX3AyQ3VycmVudFR4UmF0ZTYgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg2KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMjkpIHwgMHgxMDAwMDAwMCkKKyNkZWZpbmUgRElEbWliX3AyX3AyTUFDX3AyT3duTUFDQWRkcmVzcyBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDYpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgzMCkgfCAweDEwMDAwMDAwKQorI2RlZmluZSBESURtaWJfcDJfcDJNb2RlbSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDcpKQorI2RlZmluZSBESURtaWJfcDJfcDJNb2RlbV9wMlBIWVR5cGUgXAorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCg3KSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMSkgfCAweDEwMDAwMDAwKQorI2RlZmluZSBESURtaWJfcDJfcDJNb2RlbV9wMkN1cnJlbnRDaGFubmVsIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNykgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDIpIHwgMHgxMDAwMDAwMCkKKyNkZWZpbmUgRElEbWliX3AyX3AyTW9kZW1fcDJDdXJyZW50UG93ZXJTdGF0ZSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDcpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSgzKSB8IDB4MTAwMDAwMDApCisjZGVmaW5lIERJRG1pYl9wMl9wMk1vZGVtX3AyQ0NBTW9kZSBcCisJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKKwkJCVA4MDIxMURJRF9NS0dST1VQKDcpIHwgXAorCQkJUDgwMjExRElEX01LSVRFTSg0KSB8IDB4MTAwMDAwMDApCisjZGVmaW5lIERJRG1pYl9wMl9wMk1vZGVtX3AyU3VwcG9ydGVkRGF0YVJhdGVzIFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNykgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDUpIHwgMHgxMDAwMDAwMCkKKyNkZWZpbmUgRElEbWliX3AyX3AyTW9kZW1fcDJUeFBvd2VyTWF4IFwKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoNykgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDYpIHwgMHgxODAwMDAwMCkKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcDgwMjExbWV0YW1pYi5oIGIvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcDgwMjExbWV0YW1pYi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5ODY3ZmQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wODAyMTFtZXRhbWliLmgKQEAgLTAsMCArMSwxMDUgQEAKKy8qIHA4MDIxMW1ldGFtaWIuaAorKgorKiBNYWNyb3MsIGNvbnN0LCB0eXBlcywgYW5kIGZ1bmNzIGZvciBwODAyMTEgbWliIG1ldGFkYXRhCisqCisqIENvcHlyaWdodCAoQykgMTk5OSBBYnNvbHV0ZVZhbHVlIFN5c3RlbXMsIEluYy4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqCisqIGxpbnV4LXdsYW4KKyoKKyogICBUaGUgY29udGVudHMgb2YgdGhpcyBmaWxlIGFyZSBzdWJqZWN0IHRvIHRoZSBNb3ppbGxhIFB1YmxpYworKiAgIExpY2Vuc2UgVmVyc2lvbiAxLjEgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlCisqICAgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mCisqICAgdGhlIExpY2Vuc2UgYXQgaHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvCisqCisqICAgU29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTCisqICAgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvcgorKiAgIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZworKiAgIHJpZ2h0cyBhbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisqCisqICAgQWx0ZXJuYXRpdmVseSwgdGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBtYXkgYmUgdXNlZCB1bmRlciB0aGUKKyogICB0ZXJtcyBvZiB0aGUgR05VIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiAodGhlICJHUEwiKSwgaW4gd2hpY2gKKyogICBjYXNlIHRoZSBwcm92aXNpb25zIG9mIHRoZSBHUEwgYXJlIGFwcGxpY2FibGUgaW5zdGVhZCBvZiB0aGUKKyogICBhYm92ZS4gIElmIHlvdSB3aXNoIHRvIGFsbG93IHRoZSB1c2Ugb2YgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZQorKiAgIG9ubHkgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHUEwgYW5kIG5vdCB0byBhbGxvdyBvdGhlcnMgdG8gdXNlCisqICAgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSB1bmRlciB0aGUgTVBMLCBpbmRpY2F0ZSB5b3VyIGRlY2lzaW9uCisqICAgYnkgZGVsZXRpbmcgdGhlIHByb3Zpc2lvbnMgYWJvdmUgYW5kIHJlcGxhY2UgdGhlbSB3aXRoIHRoZSBub3RpY2UKKyogICBhbmQgb3RoZXIgcHJvdmlzaW9ucyByZXF1aXJlZCBieSB0aGUgR1BMLiAgSWYgeW91IGRvIG5vdCBkZWxldGUKKyogICB0aGUgcHJvdmlzaW9ucyBhYm92ZSwgYSByZWNpcGllbnQgbWF5IHVzZSB5b3VyIHZlcnNpb24gb2YgdGhpcworKiAgIGZpbGUgdW5kZXIgZWl0aGVyIHRoZSBNUEwgb3IgdGhlIEdQTC4KKyoKKyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyoKKyogSW5xdWlyaWVzIHJlZ2FyZGluZyB0aGUgbGludXgtd2xhbiBPcGVuIFNvdXJjZSBwcm9qZWN0IGNhbiBiZQorKiBtYWRlIGRpcmVjdGx5IHRvOgorKgorKiBBYnNvbHV0ZVZhbHVlIFN5c3RlbXMgSW5jLgorKiBpbmZvQGxpbnV4LXdsYW4uY29tCisqIGh0dHA6Ly93d3cubGludXgtd2xhbi5jb20KKyoKKyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyoKKyogUG9ydGlvbnMgb2YgdGhlIGRldmVsb3BtZW50IG9mIHRoaXMgc29mdHdhcmUgd2VyZSBmdW5kZWQgYnkKKyogSW50ZXJzaWwgQ29ycG9yYXRpb24gYXMgcGFydCBvZiBQUklTTShSKSBjaGlwc2V0IHByb2R1Y3QgZGV2ZWxvcG1lbnQuCisqCisqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqCisqIFRoaXMgZmlsZSBkZWNsYXJlcyBzb21lIG9mIHRoZSBjb25zdGFudHMgYW5kIHR5cGVzIHVzZWQgaW4gdmFyaW91cworKiBwYXJ0cyBvZiB0aGUgbGludXgtd2xhbiBzeXN0ZW0uCisqCisqIE5vdGVzOgorKiAgIC0gQ29uc3RhbnQgdmFsdWVzIGFyZSBhbHdheXMgaW4gSE9TVCBieXRlIG9yZGVyLgorKgorKiBBbGwgZnVuY3Rpb25zIGFuZCBzdGF0aWNzIGRlY2xhcmVkIGhlcmUgYXJlIGltcGxlbWVudGVkIGluIHA4MDIxMXR5cGVzLmMKKyogICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKi8KKworI2lmbmRlZiBfUDgwMjExTUVUQU1JQl9ICisjZGVmaW5lIF9QODAyMTFNRVRBTUlCX0gKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKy8qIFN5c3RlbSBJbmNsdWRlcyAqLworCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworLyogUHJvamVjdCBJbmNsdWRlcyAqLworCisjaWZuZGVmIF9XTEFOX0NPTVBBVF9ICisjaW5jbHVkZSAid2xhbl9jb21wYXQuaCIKKyNlbmRpZgorCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworLyogQ29uc3RhbnRzICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiAqLworCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworLyogTWFjcm9zICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiAqLworCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworLyogVHlwZXMgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qICovCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKiBFeHRlcm4gRGVjbGFyYXRpb25zICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiBUaGUgZm9sbG93aW5nIGlzIHRoZSBleHRlcm5hbCBkZWNsYXJhdGlvbiBmb3IgdGhlIG1pYiAqLworLyogY2F0ZWdvcnkgbWV0YWRhdGEgbGlzdCAqLworCitleHRlcm4gY2F0bGlzdGl0ZW1fdCBtaWJfY2F0bGlzdFtdOworZXh0ZXJuIFVJTlQzMiBtaWJfY2F0bGlzdF9zaXplOworCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKiBGdW5jdGlvbiBEZWNsYXJhdGlvbnMgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qICovCisKKyNlbmRpZiAvKiBfUDgwMjExTUVUQU1JQl9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wODAyMTFtZXRhbXNnLmggYi9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wODAyMTFtZXRhbXNnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGQ2ZGZjYwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3A4MDIxMW1ldGFtc2cuaApAQCAtMCwwICsxLDEwNSBAQAorLyogcDgwMjExbWV0YW1zZy5oCisqCisqIE1hY3JvcywgY29uc3QsIHR5cGVzLCBhbmQgZnVuY3MgZm9yIHA4MDIxMSBtc2cgbWV0YWRhdGEKKyoKKyogQ29weXJpZ2h0IChDKSAxOTk5IEFic29sdXRlVmFsdWUgU3lzdGVtcywgSW5jLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyoKKyogbGludXgtd2xhbgorKgorKiAgIFRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgYXJlIHN1YmplY3QgdG8gdGhlIE1vemlsbGEgUHVibGljCisqICAgTGljZW5zZSBWZXJzaW9uIDEuMSAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUKKyogICBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YKKyogICB0aGUgTGljZW5zZSBhdCBodHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC8KKyoKKyogICBTb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMKKyogICBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yCisqICAgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nCisqICAgcmlnaHRzIGFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyoKKyogICBBbHRlcm5hdGl2ZWx5LCB0aGUgY29udGVudHMgb2YgdGhpcyBmaWxlIG1heSBiZSB1c2VkIHVuZGVyIHRoZQorKiAgIHRlcm1zIG9mIHRoZSBHTlUgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyICh0aGUgIkdQTCIpLCBpbiB3aGljaAorKiAgIGNhc2UgdGhlIHByb3Zpc2lvbnMgb2YgdGhlIEdQTCBhcmUgYXBwbGljYWJsZSBpbnN0ZWFkIG9mIHRoZQorKiAgIGFib3ZlLiAgSWYgeW91IHdpc2ggdG8gYWxsb3cgdGhlIHVzZSBvZiB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlCisqICAgb25seSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdQTCBhbmQgbm90IHRvIGFsbG93IG90aGVycyB0byB1c2UKKyogICB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIHVuZGVyIHRoZSBNUEwsIGluZGljYXRlIHlvdXIgZGVjaXNpb24KKyogICBieSBkZWxldGluZyB0aGUgcHJvdmlzaW9ucyBhYm92ZSBhbmQgcmVwbGFjZSB0aGVtIHdpdGggdGhlIG5vdGljZQorKiAgIGFuZCBvdGhlciBwcm92aXNpb25zIHJlcXVpcmVkIGJ5IHRoZSBHUEwuICBJZiB5b3UgZG8gbm90IGRlbGV0ZQorKiAgIHRoZSBwcm92aXNpb25zIGFib3ZlLCBhIHJlY2lwaWVudCBtYXkgdXNlIHlvdXIgdmVyc2lvbiBvZiB0aGlzCisqICAgZmlsZSB1bmRlciBlaXRoZXIgdGhlIE1QTCBvciB0aGUgR1BMLgorKgorKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKgorKiBJbnF1aXJpZXMgcmVnYXJkaW5nIHRoZSBsaW51eC13bGFuIE9wZW4gU291cmNlIHByb2plY3QgY2FuIGJlCisqIG1hZGUgZGlyZWN0bHkgdG86CisqCisqIEFic29sdXRlVmFsdWUgU3lzdGVtcyBJbmMuCisqIGluZm9AbGludXgtd2xhbi5jb20KKyogaHR0cDovL3d3dy5saW51eC13bGFuLmNvbQorKgorKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKgorKiBQb3J0aW9ucyBvZiB0aGUgZGV2ZWxvcG1lbnQgb2YgdGhpcyBzb2Z0d2FyZSB3ZXJlIGZ1bmRlZCBieQorKiBJbnRlcnNpbCBDb3Jwb3JhdGlvbiBhcyBwYXJ0IG9mIFBSSVNNKFIpIGNoaXBzZXQgcHJvZHVjdCBkZXZlbG9wbWVudC4KKyoKKyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyoKKyogVGhpcyBmaWxlIGRlY2xhcmVzIHNvbWUgb2YgdGhlIGNvbnN0YW50cyBhbmQgdHlwZXMgdXNlZCBpbiB2YXJpb3VzCisqIHBhcnRzIG9mIHRoZSBsaW51eC13bGFuIHN5c3RlbS4KKyoKKyogTm90ZXM6CisqICAgLSBDb25zdGFudCB2YWx1ZXMgYXJlIGFsd2F5cyBpbiBIT1NUIGJ5dGUgb3JkZXIuCisqCisqIEFsbCBmdW5jdGlvbnMgYW5kIHN0YXRpY3MgZGVjbGFyZWQgaGVyZSBhcmUgaW1wbGVtZW50ZWQgaW4gcDgwMjExdHlwZXMuYworKiAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqLworCisjaWZuZGVmIF9QODAyMTFNRVRBTVNHX0gKKyNkZWZpbmUgX1A4MDIxMU1FVEFNU0dfSAorCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworLyogU3lzdGVtIEluY2x1ZGVzICovCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKiBQcm9qZWN0IEluY2x1ZGVzICovCisKKyNpZm5kZWYgX1dMQU5fQ09NUEFUX0gKKyNpbmNsdWRlICJ3bGFuX2NvbXBhdC5oIgorI2VuZGlmCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKiBDb25zdGFudHMgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qICovCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKiBNYWNyb3MgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qICovCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKiBUeXBlcyAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogKi8KKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKy8qIEV4dGVybiBEZWNsYXJhdGlvbnMgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qIFRoZSBmb2xsb3dpbmcgaXMgdGhlIGV4dGVybmFsIGRlY2xhcmF0aW9uIGZvciB0aGUgbWVzc2FnZSAqLworLyogY2F0ZWdvcnkgbWV0YWRhdGEgbGlzdCAqLworCitleHRlcm4gY2F0bGlzdGl0ZW1fdCBtc2dfY2F0bGlzdFtdOworZXh0ZXJuIFVJTlQzMiBtc2dfY2F0bGlzdF9zaXplOworCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKiBGdW5jdGlvbiBEZWNsYXJhdGlvbnMgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qICovCisKKyNlbmRpZiAvKiBfUDgwMjExTUVUQU1TR19IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wODAyMTFtZXRhc3RydWN0LmggYi9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wODAyMTFtZXRhc3RydWN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzE1ZjRiMgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3A4MDIxMW1ldGFzdHJ1Y3QuaApAQCAtMCwwICsxLDY0NCBAQAorLyogVGhpcyBmaWxlIGlzIEdFTkVSQVRFRCBBVVRPTUFUSUNBTExZLiAgRE8gTk9UIEVESVQgT1IgTU9ESUZZLgorKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKgorKiBDb3B5cmlnaHQgKEMpIDE5OTkgQWJzb2x1dGVWYWx1ZSBTeXN0ZW1zLCBJbmMuICBBbGwgUmlnaHRzIFJlc2VydmVkLgorKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKgorKiBsaW51eC13bGFuCisqCisqICAgVGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBhcmUgc3ViamVjdCB0byB0aGUgTW96aWxsYSBQdWJsaWMKKyogICBMaWNlbnNlIFZlcnNpb24gMS4xICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZQorKiAgIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZgorKiAgIHRoZSBMaWNlbnNlIGF0IGh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBMLworKgorKiAgIFNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUworKiAgIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IKKyogICBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcKKyogICByaWdodHMgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorKgorKiAgIEFsdGVybmF0aXZlbHksIHRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgbWF5IGJlIHVzZWQgdW5kZXIgdGhlCisqICAgdGVybXMgb2YgdGhlIEdOVSBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgKHRoZSAiR1BMIiksIGluIHdoaWNoCisqICAgY2FzZSB0aGUgcHJvdmlzaW9ucyBvZiB0aGUgR1BMIGFyZSBhcHBsaWNhYmxlIGluc3RlYWQgb2YgdGhlCisqICAgYWJvdmUuICBJZiB5b3Ugd2lzaCB0byBhbGxvdyB0aGUgdXNlIG9mIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUKKyogICBvbmx5IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR1BMIGFuZCBub3QgdG8gYWxsb3cgb3RoZXJzIHRvIHVzZQorKiAgIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgdW5kZXIgdGhlIE1QTCwgaW5kaWNhdGUgeW91ciBkZWNpc2lvbgorKiAgIGJ5IGRlbGV0aW5nIHRoZSBwcm92aXNpb25zIGFib3ZlIGFuZCByZXBsYWNlIHRoZW0gd2l0aCB0aGUgbm90aWNlCisqICAgYW5kIG90aGVyIHByb3Zpc2lvbnMgcmVxdWlyZWQgYnkgdGhlIEdQTC4gIElmIHlvdSBkbyBub3QgZGVsZXRlCisqICAgdGhlIHByb3Zpc2lvbnMgYWJvdmUsIGEgcmVjaXBpZW50IG1heSB1c2UgeW91ciB2ZXJzaW9uIG9mIHRoaXMKKyogICBmaWxlIHVuZGVyIGVpdGhlciB0aGUgTVBMIG9yIHRoZSBHUEwuCisqCisqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqCisqIElucXVpcmllcyByZWdhcmRpbmcgdGhlIGxpbnV4LXdsYW4gT3BlbiBTb3VyY2UgcHJvamVjdCBjYW4gYmUKKyogbWFkZSBkaXJlY3RseSB0bzoKKyoKKyogQWJzb2x1dGVWYWx1ZSBTeXN0ZW1zIEluYy4KKyogaW5mb0BsaW51eC13bGFuLmNvbQorKiBodHRwOi8vd3d3LmxpbnV4LXdsYW4uY29tCisqCisqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqCisqIFBvcnRpb25zIG9mIHRoZSBkZXZlbG9wbWVudCBvZiB0aGlzIHNvZnR3YXJlIHdlcmUgZnVuZGVkIGJ5CisqIEludGVyc2lsIENvcnBvcmF0aW9uIGFzIHBhcnQgb2YgUFJJU00oUikgY2hpcHNldCBwcm9kdWN0IGRldmVsb3BtZW50LgorKgorKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKi8KKworI2lmbmRlZiBfUDgwMjExTUtNRVRBU1RSVUNUX0gKKyNkZWZpbmUgX1A4MDIxMU1LTUVUQVNUUlVDVF9ICisKKwordHlwZWRlZiBzdHJ1Y3QgcDgwMjExbXNnX2RvdDExcmVxX21pYmdldAoreworCVVJTlQzMgkJbXNnY29kZQk7CisJVUlOVDMyCQltc2dsZW4JOworCVVJTlQ4CQlkZXZuYW1lW1dMQU5fREVWTkFNRUxFTl9NQVhdCTsKKwlwODAyMTFpdGVtX3VuazM5Ml90CW1pYmF0dHJpYnV0ZQk7CisJcDgwMjExaXRlbV91aW50MzJfdAlyZXN1bHRjb2RlCTsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gcDgwMjExbXNnX2RvdDExcmVxX21pYmdldF90OworCit0eXBlZGVmIHN0cnVjdCBwODAyMTFtc2dfZG90MTFyZXFfbWlic2V0Cit7CisJVUlOVDMyCQltc2djb2RlCTsKKwlVSU5UMzIJCW1zZ2xlbgk7CisJVUlOVDgJCWRldm5hbWVbV0xBTl9ERVZOQU1FTEVOX01BWF0JOworCXA4MDIxMWl0ZW1fdW5rMzkyX3QJbWliYXR0cmlidXRlCTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CXJlc3VsdGNvZGUJOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBwODAyMTFtc2dfZG90MTFyZXFfbWlic2V0X3Q7CisKK3R5cGVkZWYgc3RydWN0IHA4MDIxMW1zZ19kb3QxMXJlcV9wb3dlcm1nbXQKK3sKKwlVSU5UMzIJCW1zZ2NvZGUJOworCVVJTlQzMgkJbXNnbGVuCTsKKwlVSU5UOAkJZGV2bmFtZVtXTEFOX0RFVk5BTUVMRU5fTUFYXQk7CisJcDgwMjExaXRlbV91aW50MzJfdAlwb3dlcm1nbXRtb2RlCTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CXdha2V1cAk7CisJcDgwMjExaXRlbV91aW50MzJfdAlyZWNlaXZlZHRpbXMJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJcmVzdWx0Y29kZQk7Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIHA4MDIxMW1zZ19kb3QxMXJlcV9wb3dlcm1nbXRfdDsKKwordHlwZWRlZiBzdHJ1Y3QgcDgwMjExbXNnX2RvdDExcmVxX3NjYW4KK3sKKwlVSU5UMzIJCW1zZ2NvZGUJOworCVVJTlQzMgkJbXNnbGVuCTsKKwlVSU5UOAkJZGV2bmFtZVtXTEFOX0RFVk5BTUVMRU5fTUFYXQk7CisJcDgwMjExaXRlbV91aW50MzJfdAlic3N0eXBlCTsKKwlwODAyMTFpdGVtX3BzdHI2X3QJYnNzaWQJOworCVVJTlQ4CXBhZF8wQ1sxXQk7CisJcDgwMjExaXRlbV9wc3RyMzJfdAlzc2lkCTsKKwlVSU5UOAlwYWRfMURbM10JOworCXA4MDIxMWl0ZW1fdWludDMyX3QJc2NhbnR5cGUJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJcHJvYmVkZWxheQk7CisJcDgwMjExaXRlbV9wc3RyMTRfdAljaGFubmVsbGlzdAk7CisJVUlOVDgJcGFkXzJDWzFdCTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CW1pbmNoYW5uZWx0aW1lCTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CW1heGNoYW5uZWx0aW1lCTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CXJlc3VsdGNvZGUJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJbnVtYnNzCTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CWFwcGVuZAk7Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIHA4MDIxMW1zZ19kb3QxMXJlcV9zY2FuX3Q7CisKK3R5cGVkZWYgc3RydWN0IHA4MDIxMW1zZ19kb3QxMXJlcV9zY2FuX3Jlc3VsdHMKK3sKKwlVSU5UMzIJCW1zZ2NvZGUJOworCVVJTlQzMgkJbXNnbGVuCTsKKwlVSU5UOAkJZGV2bmFtZVtXTEFOX0RFVk5BTUVMRU5fTUFYXQk7CisJcDgwMjExaXRlbV91aW50MzJfdAlic3NpbmRleAk7CisJcDgwMjExaXRlbV91aW50MzJfdAlyZXN1bHRjb2RlCTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CXNpZ25hbAk7CisJcDgwMjExaXRlbV91aW50MzJfdAlub2lzZQk7CisJcDgwMjExaXRlbV9wc3RyNl90CWJzc2lkCTsKKwlVSU5UOAlwYWRfM0NbMV0JOworCXA4MDIxMWl0ZW1fcHN0cjMyX3QJc3NpZAk7CisJVUlOVDgJcGFkXzREWzNdCTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CWJzc3R5cGUJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJYmVhY29ucGVyaW9kCTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CWR0aW1wZXJpb2QJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJdGltZXN0YW1wCTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CWxvY2FsdGltZQk7CisJcDgwMjExaXRlbV91aW50MzJfdAlmaGR3ZWxsdGltZQk7CisJcDgwMjExaXRlbV91aW50MzJfdAlmaGhvcHNldAk7CisJcDgwMjExaXRlbV91aW50MzJfdAlmaGhvcHBhdHRlcm4JOworCXA4MDIxMWl0ZW1fdWludDMyX3QJZmhob3BpbmRleAk7CisJcDgwMjExaXRlbV91aW50MzJfdAlkc2NoYW5uZWwJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJY2ZwY291bnQJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJY2ZwcGVyaW9kCTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CWNmcG1heGR1cmF0aW9uCTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CWNmcGR1cnJlbWFpbmluZwk7CisJcDgwMjExaXRlbV91aW50MzJfdAlpYnNzYXRpbXdpbmRvdwk7CisJcDgwMjExaXRlbV91aW50MzJfdAljZnBvbGxhYmxlCTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CWNmcG9sbHJlcQk7CisJcDgwMjExaXRlbV91aW50MzJfdAlwcml2YWN5CTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CWJhc2ljcmF0ZTEJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJYmFzaWNyYXRlMgk7CisJcDgwMjExaXRlbV91aW50MzJfdAliYXNpY3JhdGUzCTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CWJhc2ljcmF0ZTQJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJYmFzaWNyYXRlNQk7CisJcDgwMjExaXRlbV91aW50MzJfdAliYXNpY3JhdGU2CTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CWJhc2ljcmF0ZTcJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJYmFzaWNyYXRlOAk7CisJcDgwMjExaXRlbV91aW50MzJfdAlzdXBwcmF0ZTEJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJc3VwcHJhdGUyCTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CXN1cHByYXRlMwk7CisJcDgwMjExaXRlbV91aW50MzJfdAlzdXBwcmF0ZTQJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJc3VwcHJhdGU1CTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CXN1cHByYXRlNgk7CisJcDgwMjExaXRlbV91aW50MzJfdAlzdXBwcmF0ZTcJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJc3VwcHJhdGU4CTsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gcDgwMjExbXNnX2RvdDExcmVxX3NjYW5fcmVzdWx0c190OworCit0eXBlZGVmIHN0cnVjdCBwODAyMTFtc2dfZG90MTFyZXFfam9pbgoreworCVVJTlQzMgkJbXNnY29kZQk7CisJVUlOVDMyCQltc2dsZW4JOworCVVJTlQ4CQlkZXZuYW1lW1dMQU5fREVWTkFNRUxFTl9NQVhdCTsKKwlwODAyMTFpdGVtX3BzdHI2X3QJYnNzaWQJOworCVVJTlQ4CXBhZF81Q1sxXQk7CisJcDgwMjExaXRlbV91aW50MzJfdAlqb2luZmFpbHVyZXRpbWVvdXQJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJYmFzaWNyYXRlMQk7CisJcDgwMjExaXRlbV91aW50MzJfdAliYXNpY3JhdGUyCTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CWJhc2ljcmF0ZTMJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJYmFzaWNyYXRlNAk7CisJcDgwMjExaXRlbV91aW50MzJfdAliYXNpY3JhdGU1CTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CWJhc2ljcmF0ZTYJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJYmFzaWNyYXRlNwk7CisJcDgwMjExaXRlbV91aW50MzJfdAliYXNpY3JhdGU4CTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CW9wZXJhdGlvbmFscmF0ZTEJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJb3BlcmF0aW9uYWxyYXRlMgk7CisJcDgwMjExaXRlbV91aW50MzJfdAlvcGVyYXRpb25hbHJhdGUzCTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CW9wZXJhdGlvbmFscmF0ZTQJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJb3BlcmF0aW9uYWxyYXRlNQk7CisJcDgwMjExaXRlbV91aW50MzJfdAlvcGVyYXRpb25hbHJhdGU2CTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CW9wZXJhdGlvbmFscmF0ZTcJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJb3BlcmF0aW9uYWxyYXRlOAk7CisJcDgwMjExaXRlbV91aW50MzJfdAlyZXN1bHRjb2RlCTsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gcDgwMjExbXNnX2RvdDExcmVxX2pvaW5fdDsKKwordHlwZWRlZiBzdHJ1Y3QgcDgwMjExbXNnX2RvdDExcmVxX2F1dGhlbnRpY2F0ZQoreworCVVJTlQzMgkJbXNnY29kZQk7CisJVUlOVDMyCQltc2dsZW4JOworCVVJTlQ4CQlkZXZuYW1lW1dMQU5fREVWTkFNRUxFTl9NQVhdCTsKKwlwODAyMTFpdGVtX3BzdHI2X3QJcGVlcnN0YWFkZHJlc3MJOworCVVJTlQ4CXBhZF82Q1sxXQk7CisJcDgwMjExaXRlbV91aW50MzJfdAlhdXRoZW50aWNhdGlvbnR5cGUJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJYXV0aGVudGljYXRpb25mYWlsdXJldGltZW91dAk7CisJcDgwMjExaXRlbV91aW50MzJfdAlyZXN1bHRjb2RlCTsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gcDgwMjExbXNnX2RvdDExcmVxX2F1dGhlbnRpY2F0ZV90OworCit0eXBlZGVmIHN0cnVjdCBwODAyMTFtc2dfZG90MTFyZXFfZGVhdXRoZW50aWNhdGUKK3sKKwlVSU5UMzIJCW1zZ2NvZGUJOworCVVJTlQzMgkJbXNnbGVuCTsKKwlVSU5UOAkJZGV2bmFtZVtXTEFOX0RFVk5BTUVMRU5fTUFYXQk7CisJcDgwMjExaXRlbV9wc3RyNl90CXBlZXJzdGFhZGRyZXNzCTsKKwlVSU5UOAlwYWRfN0NbMV0JOworCXA4MDIxMWl0ZW1fdWludDMyX3QJcmVhc29uY29kZQk7CisJcDgwMjExaXRlbV91aW50MzJfdAlyZXN1bHRjb2RlCTsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gcDgwMjExbXNnX2RvdDExcmVxX2RlYXV0aGVudGljYXRlX3Q7CisKK3R5cGVkZWYgc3RydWN0IHA4MDIxMW1zZ19kb3QxMXJlcV9hc3NvY2lhdGUKK3sKKwlVSU5UMzIJCW1zZ2NvZGUJOworCVVJTlQzMgkJbXNnbGVuCTsKKwlVSU5UOAkJZGV2bmFtZVtXTEFOX0RFVk5BTUVMRU5fTUFYXQk7CisJcDgwMjExaXRlbV9wc3RyNl90CXBlZXJzdGFhZGRyZXNzCTsKKwlVSU5UOAlwYWRfOENbMV0JOworCXA4MDIxMWl0ZW1fdWludDMyX3QJYXNzb2NpYXRlZmFpbHVyZXRpbWVvdXQJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJY2Zwb2xsYWJsZQk7CisJcDgwMjExaXRlbV91aW50MzJfdAljZnBvbGxyZXEJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJcHJpdmFjeQk7CisJcDgwMjExaXRlbV91aW50MzJfdAlsaXN0ZW5pbnRlcnZhbAk7CisJcDgwMjExaXRlbV91aW50MzJfdAlyZXN1bHRjb2RlCTsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gcDgwMjExbXNnX2RvdDExcmVxX2Fzc29jaWF0ZV90OworCit0eXBlZGVmIHN0cnVjdCBwODAyMTFtc2dfZG90MTFyZXFfcmVhc3NvY2lhdGUKK3sKKwlVSU5UMzIJCW1zZ2NvZGUJOworCVVJTlQzMgkJbXNnbGVuCTsKKwlVSU5UOAkJZGV2bmFtZVtXTEFOX0RFVk5BTUVMRU5fTUFYXQk7CisJcDgwMjExaXRlbV9wc3RyNl90CW5ld2FwYWRkcmVzcwk7CisJVUlOVDgJcGFkXzlDWzFdCTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CXJlYXNzb2NpYXRlZmFpbHVyZXRpbWVvdXQJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJY2Zwb2xsYWJsZQk7CisJcDgwMjExaXRlbV91aW50MzJfdAljZnBvbGxyZXEJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJcHJpdmFjeQk7CisJcDgwMjExaXRlbV91aW50MzJfdAlsaXN0ZW5pbnRlcnZhbAk7CisJcDgwMjExaXRlbV91aW50MzJfdAlyZXN1bHRjb2RlCTsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gcDgwMjExbXNnX2RvdDExcmVxX3JlYXNzb2NpYXRlX3Q7CisKK3R5cGVkZWYgc3RydWN0IHA4MDIxMW1zZ19kb3QxMXJlcV9kaXNhc3NvY2lhdGUKK3sKKwlVSU5UMzIJCW1zZ2NvZGUJOworCVVJTlQzMgkJbXNnbGVuCTsKKwlVSU5UOAkJZGV2bmFtZVtXTEFOX0RFVk5BTUVMRU5fTUFYXQk7CisJcDgwMjExaXRlbV9wc3RyNl90CXBlZXJzdGFhZGRyZXNzCTsKKwlVSU5UOAlwYWRfMTBDWzFdCTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CXJlYXNvbmNvZGUJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJcmVzdWx0Y29kZQk7Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIHA4MDIxMW1zZ19kb3QxMXJlcV9kaXNhc3NvY2lhdGVfdDsKKwordHlwZWRlZiBzdHJ1Y3QgcDgwMjExbXNnX2RvdDExcmVxX3Jlc2V0Cit7CisJVUlOVDMyCQltc2djb2RlCTsKKwlVSU5UMzIJCW1zZ2xlbgk7CisJVUlOVDgJCWRldm5hbWVbV0xBTl9ERVZOQU1FTEVOX01BWF0JOworCXA4MDIxMWl0ZW1fdWludDMyX3QJc2V0ZGVmYXVsdG1pYgk7CisJcDgwMjExaXRlbV9wc3RyNl90CW1hY2FkZHJlc3MJOworCVVJTlQ4CXBhZF8xMUNbMV0JOworCXA4MDIxMWl0ZW1fdWludDMyX3QJcmVzdWx0Y29kZQk7Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIHA4MDIxMW1zZ19kb3QxMXJlcV9yZXNldF90OworCit0eXBlZGVmIHN0cnVjdCBwODAyMTFtc2dfZG90MTFyZXFfc3RhcnQKK3sKKwlVSU5UMzIJCW1zZ2NvZGUJOworCVVJTlQzMgkJbXNnbGVuCTsKKwlVSU5UOAkJZGV2bmFtZVtXTEFOX0RFVk5BTUVMRU5fTUFYXQk7CisJcDgwMjExaXRlbV9wc3RyMzJfdAlzc2lkCTsKKwlVSU5UOAlwYWRfMTJEWzNdCTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CWJzc3R5cGUJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJYmVhY29ucGVyaW9kCTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CWR0aW1wZXJpb2QJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJY2ZwcGVyaW9kCTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CWNmcG1heGR1cmF0aW9uCTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CWZoZHdlbGx0aW1lCTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CWZoaG9wc2V0CTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CWZoaG9wcGF0dGVybgk7CisJcDgwMjExaXRlbV91aW50MzJfdAlkc2NoYW5uZWwJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJaWJzc2F0aW13aW5kb3cJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJcHJvYmVkZWxheQk7CisJcDgwMjExaXRlbV91aW50MzJfdAljZnBvbGxhYmxlCTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CWNmcG9sbHJlcQk7CisJcDgwMjExaXRlbV91aW50MzJfdAliYXNpY3JhdGUxCTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CWJhc2ljcmF0ZTIJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJYmFzaWNyYXRlMwk7CisJcDgwMjExaXRlbV91aW50MzJfdAliYXNpY3JhdGU0CTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CWJhc2ljcmF0ZTUJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJYmFzaWNyYXRlNgk7CisJcDgwMjExaXRlbV91aW50MzJfdAliYXNpY3JhdGU3CTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CWJhc2ljcmF0ZTgJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJb3BlcmF0aW9uYWxyYXRlMQk7CisJcDgwMjExaXRlbV91aW50MzJfdAlvcGVyYXRpb25hbHJhdGUyCTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CW9wZXJhdGlvbmFscmF0ZTMJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJb3BlcmF0aW9uYWxyYXRlNAk7CisJcDgwMjExaXRlbV91aW50MzJfdAlvcGVyYXRpb25hbHJhdGU1CTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CW9wZXJhdGlvbmFscmF0ZTYJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJb3BlcmF0aW9uYWxyYXRlNwk7CisJcDgwMjExaXRlbV91aW50MzJfdAlvcGVyYXRpb25hbHJhdGU4CTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CXJlc3VsdGNvZGUJOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBwODAyMTFtc2dfZG90MTFyZXFfc3RhcnRfdDsKKwordHlwZWRlZiBzdHJ1Y3QgcDgwMjExbXNnX2RvdDExaW5kX2F1dGhlbnRpY2F0ZQoreworCVVJTlQzMgkJbXNnY29kZQk7CisJVUlOVDMyCQltc2dsZW4JOworCVVJTlQ4CQlkZXZuYW1lW1dMQU5fREVWTkFNRUxFTl9NQVhdCTsKKwlwODAyMTFpdGVtX3BzdHI2X3QJcGVlcnN0YWFkZHJlc3MJOworCVVJTlQ4CXBhZF8xM0NbMV0JOworCXA4MDIxMWl0ZW1fdWludDMyX3QJYXV0aGVudGljYXRpb250eXBlCTsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gcDgwMjExbXNnX2RvdDExaW5kX2F1dGhlbnRpY2F0ZV90OworCit0eXBlZGVmIHN0cnVjdCBwODAyMTFtc2dfZG90MTFpbmRfZGVhdXRoZW50aWNhdGUKK3sKKwlVSU5UMzIJCW1zZ2NvZGUJOworCVVJTlQzMgkJbXNnbGVuCTsKKwlVSU5UOAkJZGV2bmFtZVtXTEFOX0RFVk5BTUVMRU5fTUFYXQk7CisJcDgwMjExaXRlbV9wc3RyNl90CXBlZXJzdGFhZGRyZXNzCTsKKwlVSU5UOAlwYWRfMTRDWzFdCTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CXJlYXNvbmNvZGUJOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBwODAyMTFtc2dfZG90MTFpbmRfZGVhdXRoZW50aWNhdGVfdDsKKwordHlwZWRlZiBzdHJ1Y3QgcDgwMjExbXNnX2RvdDExaW5kX2Fzc29jaWF0ZQoreworCVVJTlQzMgkJbXNnY29kZQk7CisJVUlOVDMyCQltc2dsZW4JOworCVVJTlQ4CQlkZXZuYW1lW1dMQU5fREVWTkFNRUxFTl9NQVhdCTsKKwlwODAyMTFpdGVtX3BzdHI2X3QJcGVlcnN0YWFkZHJlc3MJOworCVVJTlQ4CXBhZF8xNUNbMV0JOworCXA4MDIxMWl0ZW1fdWludDMyX3QJYWlkCTsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gcDgwMjExbXNnX2RvdDExaW5kX2Fzc29jaWF0ZV90OworCit0eXBlZGVmIHN0cnVjdCBwODAyMTFtc2dfZG90MTFpbmRfcmVhc3NvY2lhdGUKK3sKKwlVSU5UMzIJCW1zZ2NvZGUJOworCVVJTlQzMgkJbXNnbGVuCTsKKwlVSU5UOAkJZGV2bmFtZVtXTEFOX0RFVk5BTUVMRU5fTUFYXQk7CisJcDgwMjExaXRlbV9wc3RyNl90CXBlZXJzdGFhZGRyZXNzCTsKKwlVSU5UOAlwYWRfMTZDWzFdCTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CWFpZAk7CisJcDgwMjExaXRlbV9wc3RyNl90CW9sZGFwYWRkcmVzcwk7CisJVUlOVDgJcGFkXzE3Q1sxXQk7Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIHA4MDIxMW1zZ19kb3QxMWluZF9yZWFzc29jaWF0ZV90OworCit0eXBlZGVmIHN0cnVjdCBwODAyMTFtc2dfZG90MTFpbmRfZGlzYXNzb2NpYXRlCit7CisJVUlOVDMyCQltc2djb2RlCTsKKwlVSU5UMzIJCW1zZ2xlbgk7CisJVUlOVDgJCWRldm5hbWVbV0xBTl9ERVZOQU1FTEVOX01BWF0JOworCXA4MDIxMWl0ZW1fcHN0cjZfdAlwZWVyc3RhYWRkcmVzcwk7CisJVUlOVDgJcGFkXzE4Q1sxXQk7CisJcDgwMjExaXRlbV91aW50MzJfdAlyZWFzb25jb2RlCTsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gcDgwMjExbXNnX2RvdDExaW5kX2Rpc2Fzc29jaWF0ZV90OworCit0eXBlZGVmIHN0cnVjdCBwODAyMTFtc2dfbG54cmVxX2lmc3RhdGUKK3sKKwlVSU5UMzIJCW1zZ2NvZGUJOworCVVJTlQzMgkJbXNnbGVuCTsKKwlVSU5UOAkJZGV2bmFtZVtXTEFOX0RFVk5BTUVMRU5fTUFYXQk7CisJcDgwMjExaXRlbV91aW50MzJfdAlpZnN0YXRlCTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CXJlc3VsdGNvZGUJOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBwODAyMTFtc2dfbG54cmVxX2lmc3RhdGVfdDsKKwordHlwZWRlZiBzdHJ1Y3QgcDgwMjExbXNnX2xueHJlcV93bGFuc25pZmYKK3sKKwlVSU5UMzIJCW1zZ2NvZGUJOworCVVJTlQzMgkJbXNnbGVuCTsKKwlVSU5UOAkJZGV2bmFtZVtXTEFOX0RFVk5BTUVMRU5fTUFYXQk7CisJcDgwMjExaXRlbV91aW50MzJfdAllbmFibGUJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJY2hhbm5lbAk7CisJcDgwMjExaXRlbV91aW50MzJfdAlwcmlzbWhlYWRlcgk7CisJcDgwMjExaXRlbV91aW50MzJfdAl3bGFuaGVhZGVyCTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CWtlZXB3ZXBmbGFncwk7CisJcDgwMjExaXRlbV91aW50MzJfdAlzdHJpcGZjcwk7CisJcDgwMjExaXRlbV91aW50MzJfdAlwYWNrZXRfdHJ1bmMJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJcmVzdWx0Y29kZQk7Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIHA4MDIxMW1zZ19sbnhyZXFfd2xhbnNuaWZmX3Q7CisKK3R5cGVkZWYgc3RydWN0IHA4MDIxMW1zZ19sbnhyZXFfaG9zdHdlcAoreworCVVJTlQzMgkJbXNnY29kZQk7CisJVUlOVDMyCQltc2dsZW4JOworCVVJTlQ4CQlkZXZuYW1lW1dMQU5fREVWTkFNRUxFTl9NQVhdCTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CXJlc3VsdGNvZGUJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJZGVjcnlwdAk7CisJcDgwMjExaXRlbV91aW50MzJfdAllbmNyeXB0CTsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gcDgwMjExbXNnX2xueHJlcV9ob3N0d2VwX3Q7CisKK3R5cGVkZWYgc3RydWN0IHA4MDIxMW1zZ19sbnhyZXFfY29tbXNxdWFsaXR5Cit7CisJVUlOVDMyCQltc2djb2RlCTsKKwlVSU5UMzIJCW1zZ2xlbgk7CisJVUlOVDgJCWRldm5hbWVbV0xBTl9ERVZOQU1FTEVOX01BWF0JOworCXA4MDIxMWl0ZW1fdWludDMyX3QJcmVzdWx0Y29kZQk7CisJcDgwMjExaXRlbV91aW50MzJfdAlkYm0JOworCXA4MDIxMWl0ZW1fdWludDMyX3QJbGluawk7CisJcDgwMjExaXRlbV91aW50MzJfdAlsZXZlbAk7CisJcDgwMjExaXRlbV91aW50MzJfdAlub2lzZQk7Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIHA4MDIxMW1zZ19sbnhyZXFfY29tbXNxdWFsaXR5X3Q7CisKK3R5cGVkZWYgc3RydWN0IHA4MDIxMW1zZ19sbnhyZXFfYXV0b2pvaW4KK3sKKwlVSU5UMzIJCW1zZ2NvZGUJOworCVVJTlQzMgkJbXNnbGVuCTsKKwlVSU5UOAkJZGV2bmFtZVtXTEFOX0RFVk5BTUVMRU5fTUFYXQk7CisJcDgwMjExaXRlbV9wc3RyMzJfdAlzc2lkCTsKKwlVSU5UOAlwYWRfMTlEWzNdCTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CWF1dGh0eXBlCTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CXJlc3VsdGNvZGUJOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBwODAyMTFtc2dfbG54cmVxX2F1dG9qb2luX3Q7CisKK3R5cGVkZWYgc3RydWN0IHA4MDIxMW1zZ19sbnhpbmRfd2xhbnNuaWZmcm0KK3sKKwlVSU5UMzIJCW1zZ2NvZGUJOworCVVJTlQzMgkJbXNnbGVuCTsKKwlVSU5UOAkJZGV2bmFtZVtXTEFOX0RFVk5BTUVMRU5fTUFYXQk7CisJcDgwMjExaXRlbV91aW50MzJfdAlob3N0dGltZQk7CisJcDgwMjExaXRlbV91aW50MzJfdAltYWN0aW1lCTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CWNoYW5uZWwJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJcnNzaQk7CisJcDgwMjExaXRlbV91aW50MzJfdAlzcQk7CisJcDgwMjExaXRlbV91aW50MzJfdAlzaWduYWwJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJbm9pc2UJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJcmF0ZQk7CisJcDgwMjExaXRlbV91aW50MzJfdAlpc3R4CTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CWZybWxlbgk7Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIHA4MDIxMW1zZ19sbnhpbmRfd2xhbnNuaWZmcm1fdDsKKwordHlwZWRlZiBzdHJ1Y3QgcDgwMjExbXNnX2xueGluZF9yb2FtCit7CisJVUlOVDMyCQltc2djb2RlCTsKKwlVSU5UMzIJCW1zZ2xlbgk7CisJVUlOVDgJCWRldm5hbWVbV0xBTl9ERVZOQU1FTEVOX01BWF0JOworCXA4MDIxMWl0ZW1fdWludDMyX3QJcmVhc29uCTsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gcDgwMjExbXNnX2xueGluZF9yb2FtX3Q7CisKK3R5cGVkZWYgc3RydWN0IHA4MDIxMW1zZ19wMnJlcV9qb2luCit7CisJVUlOVDMyCQltc2djb2RlCTsKKwlVSU5UMzIJCW1zZ2xlbgk7CisJVUlOVDgJCWRldm5hbWVbV0xBTl9ERVZOQU1FTEVOX01BWF0JOworCXA4MDIxMWl0ZW1fcHN0cjZfdAlic3NpZAk7CisJVUlOVDgJcGFkXzIwQ1sxXQk7CisJcDgwMjExaXRlbV91aW50MzJfdAliYXNpY3JhdGUxCTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CWJhc2ljcmF0ZTIJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJYmFzaWNyYXRlMwk7CisJcDgwMjExaXRlbV91aW50MzJfdAliYXNpY3JhdGU0CTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CWJhc2ljcmF0ZTUJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJYmFzaWNyYXRlNgk7CisJcDgwMjExaXRlbV91aW50MzJfdAliYXNpY3JhdGU3CTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CWJhc2ljcmF0ZTgJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJb3BlcmF0aW9uYWxyYXRlMQk7CisJcDgwMjExaXRlbV91aW50MzJfdAlvcGVyYXRpb25hbHJhdGUyCTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CW9wZXJhdGlvbmFscmF0ZTMJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJb3BlcmF0aW9uYWxyYXRlNAk7CisJcDgwMjExaXRlbV91aW50MzJfdAlvcGVyYXRpb25hbHJhdGU1CTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CW9wZXJhdGlvbmFscmF0ZTYJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJb3BlcmF0aW9uYWxyYXRlNwk7CisJcDgwMjExaXRlbV91aW50MzJfdAlvcGVyYXRpb25hbHJhdGU4CTsKKwlwODAyMTFpdGVtX3BzdHIzMl90CXNzaWQJOworCVVJTlQ4CXBhZF8yMURbM10JOworCXA4MDIxMWl0ZW1fdWludDMyX3QJY2hhbm5lbAk7CisJcDgwMjExaXRlbV91aW50MzJfdAlhdXRodHlwZQk7CisJcDgwMjExaXRlbV91aW50MzJfdAlyZXN1bHRjb2RlCTsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gcDgwMjExbXNnX3AycmVxX2pvaW5fdDsKKwordHlwZWRlZiBzdHJ1Y3QgcDgwMjExbXNnX3AycmVxX3JlYWRwZGEKK3sKKwlVSU5UMzIJCW1zZ2NvZGUJOworCVVJTlQzMgkJbXNnbGVuCTsKKwlVSU5UOAkJZGV2bmFtZVtXTEFOX0RFVk5BTUVMRU5fTUFYXQk7CisJcDgwMjExaXRlbV91bmsxMDI0X3QJcGRhCTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CXJlc3VsdGNvZGUJOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBwODAyMTFtc2dfcDJyZXFfcmVhZHBkYV90OworCit0eXBlZGVmIHN0cnVjdCBwODAyMTFtc2dfcDJyZXFfcmVhZGNpcworeworCVVJTlQzMgkJbXNnY29kZQk7CisJVUlOVDMyCQltc2dsZW4JOworCVVJTlQ4CQlkZXZuYW1lW1dMQU5fREVWTkFNRUxFTl9NQVhdCTsKKwlwODAyMTFpdGVtX3VuazEwMjRfdAljaXMJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJcmVzdWx0Y29kZQk7Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIHA4MDIxMW1zZ19wMnJlcV9yZWFkY2lzX3Q7CisKK3R5cGVkZWYgc3RydWN0IHA4MDIxMW1zZ19wMnJlcV9hdXhwb3J0X3N0YXRlCit7CisJVUlOVDMyCQltc2djb2RlCTsKKwlVSU5UMzIJCW1zZ2xlbgk7CisJVUlOVDgJCWRldm5hbWVbV0xBTl9ERVZOQU1FTEVOX01BWF0JOworCXA4MDIxMWl0ZW1fdWludDMyX3QJZW5hYmxlCTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CXJlc3VsdGNvZGUJOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBwODAyMTFtc2dfcDJyZXFfYXV4cG9ydF9zdGF0ZV90OworCit0eXBlZGVmIHN0cnVjdCBwODAyMTFtc2dfcDJyZXFfYXV4cG9ydF9yZWFkCit7CisJVUlOVDMyCQltc2djb2RlCTsKKwlVSU5UMzIJCW1zZ2xlbgk7CisJVUlOVDgJCWRldm5hbWVbV0xBTl9ERVZOQU1FTEVOX01BWF0JOworCXA4MDIxMWl0ZW1fdWludDMyX3QJYWRkcgk7CisJcDgwMjExaXRlbV91aW50MzJfdAlsZW4JOworCXA4MDIxMWl0ZW1fdW5rMTAyNF90CWRhdGEJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJcmVzdWx0Y29kZQk7Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIHA4MDIxMW1zZ19wMnJlcV9hdXhwb3J0X3JlYWRfdDsKKwordHlwZWRlZiBzdHJ1Y3QgcDgwMjExbXNnX3AycmVxX2F1eHBvcnRfd3JpdGUKK3sKKwlVSU5UMzIJCW1zZ2NvZGUJOworCVVJTlQzMgkJbXNnbGVuCTsKKwlVSU5UOAkJZGV2bmFtZVtXTEFOX0RFVk5BTUVMRU5fTUFYXQk7CisJcDgwMjExaXRlbV91aW50MzJfdAlhZGRyCTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CWxlbgk7CisJcDgwMjExaXRlbV91bmsxMDI0X3QJZGF0YQk7CisJcDgwMjExaXRlbV91aW50MzJfdAlyZXN1bHRjb2RlCTsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gcDgwMjExbXNnX3AycmVxX2F1eHBvcnRfd3JpdGVfdDsKKwordHlwZWRlZiBzdHJ1Y3QgcDgwMjExbXNnX3AycmVxX2xvd19sZXZlbAoreworCVVJTlQzMgkJbXNnY29kZQk7CisJVUlOVDMyCQltc2dsZW4JOworCVVJTlQ4CQlkZXZuYW1lW1dMQU5fREVWTkFNRUxFTl9NQVhdCTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CWNvbW1hbmQJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJcGFyYW0wCTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CXBhcmFtMQk7CisJcDgwMjExaXRlbV91aW50MzJfdAlwYXJhbTIJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJcmVzcDAJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJcmVzcDEJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJcmVzcDIJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJcmVzdWx0Y29kZQk7Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIHA4MDIxMW1zZ19wMnJlcV9sb3dfbGV2ZWxfdDsKKwordHlwZWRlZiBzdHJ1Y3QgcDgwMjExbXNnX3AycmVxX3Rlc3RfY29tbWFuZAoreworCVVJTlQzMgkJbXNnY29kZQk7CisJVUlOVDMyCQltc2dsZW4JOworCVVJTlQ4CQlkZXZuYW1lW1dMQU5fREVWTkFNRUxFTl9NQVhdCTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CXRlc3Rjb2RlCTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CXRlc3RwYXJhbQk7CisJcDgwMjExaXRlbV91aW50MzJfdAlyZXN1bHRjb2RlCTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CXN0YXR1cwk7CisJcDgwMjExaXRlbV91aW50MzJfdAlyZXNwMAk7CisJcDgwMjExaXRlbV91aW50MzJfdAlyZXNwMQk7CisJcDgwMjExaXRlbV91aW50MzJfdAlyZXNwMgk7Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIHA4MDIxMW1zZ19wMnJlcV90ZXN0X2NvbW1hbmRfdDsKKwordHlwZWRlZiBzdHJ1Y3QgcDgwMjExbXNnX3AycmVxX21taV9yZWFkCit7CisJVUlOVDMyCQltc2djb2RlCTsKKwlVSU5UMzIJCW1zZ2xlbgk7CisJVUlOVDgJCWRldm5hbWVbV0xBTl9ERVZOQU1FTEVOX01BWF0JOworCXA4MDIxMWl0ZW1fdWludDMyX3QJYWRkcgk7CisJcDgwMjExaXRlbV91aW50MzJfdAl2YWx1ZQk7CisJcDgwMjExaXRlbV91aW50MzJfdAlyZXN1bHRjb2RlCTsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gcDgwMjExbXNnX3AycmVxX21taV9yZWFkX3Q7CisKK3R5cGVkZWYgc3RydWN0IHA4MDIxMW1zZ19wMnJlcV9tbWlfd3JpdGUKK3sKKwlVSU5UMzIJCW1zZ2NvZGUJOworCVVJTlQzMgkJbXNnbGVuCTsKKwlVSU5UOAkJZGV2bmFtZVtXTEFOX0RFVk5BTUVMRU5fTUFYXQk7CisJcDgwMjExaXRlbV91aW50MzJfdAlhZGRyCTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CWRhdGEJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJcmVzdWx0Y29kZQk7Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIHA4MDIxMW1zZ19wMnJlcV9tbWlfd3JpdGVfdDsKKwordHlwZWRlZiBzdHJ1Y3QgcDgwMjExbXNnX3AycmVxX3JhbWRsX3N0YXRlCit7CisJVUlOVDMyCQltc2djb2RlCTsKKwlVSU5UMzIJCW1zZ2xlbgk7CisJVUlOVDgJCWRldm5hbWVbV0xBTl9ERVZOQU1FTEVOX01BWF0JOworCXA4MDIxMWl0ZW1fdWludDMyX3QJZW5hYmxlCTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CWV4ZWFkZHIJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJcmVzdWx0Y29kZQk7Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIHA4MDIxMW1zZ19wMnJlcV9yYW1kbF9zdGF0ZV90OworCit0eXBlZGVmIHN0cnVjdCBwODAyMTFtc2dfcDJyZXFfcmFtZGxfd3JpdGUKK3sKKwlVSU5UMzIJCW1zZ2NvZGUJOworCVVJTlQzMgkJbXNnbGVuCTsKKwlVSU5UOAkJZGV2bmFtZVtXTEFOX0RFVk5BTUVMRU5fTUFYXQk7CisJcDgwMjExaXRlbV91aW50MzJfdAlhZGRyCTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CWxlbgk7CisJcDgwMjExaXRlbV91bms0MDk2X3QJZGF0YQk7CisJcDgwMjExaXRlbV91aW50MzJfdAlyZXN1bHRjb2RlCTsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gcDgwMjExbXNnX3AycmVxX3JhbWRsX3dyaXRlX3Q7CisKK3R5cGVkZWYgc3RydWN0IHA4MDIxMW1zZ19wMnJlcV9mbGFzaGRsX3N0YXRlCit7CisJVUlOVDMyCQltc2djb2RlCTsKKwlVSU5UMzIJCW1zZ2xlbgk7CisJVUlOVDgJCWRldm5hbWVbV0xBTl9ERVZOQU1FTEVOX01BWF0JOworCXA4MDIxMWl0ZW1fdWludDMyX3QJZW5hYmxlCTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CXJlc3VsdGNvZGUJOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBwODAyMTFtc2dfcDJyZXFfZmxhc2hkbF9zdGF0ZV90OworCit0eXBlZGVmIHN0cnVjdCBwODAyMTFtc2dfcDJyZXFfZmxhc2hkbF93cml0ZQoreworCVVJTlQzMgkJbXNnY29kZQk7CisJVUlOVDMyCQltc2dsZW4JOworCVVJTlQ4CQlkZXZuYW1lW1dMQU5fREVWTkFNRUxFTl9NQVhdCTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CWFkZHIJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJbGVuCTsKKwlwODAyMTFpdGVtX3VuazQwOTZfdAlkYXRhCTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CXJlc3VsdGNvZGUJOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBwODAyMTFtc2dfcDJyZXFfZmxhc2hkbF93cml0ZV90OworCit0eXBlZGVmIHN0cnVjdCBwODAyMTFtc2dfcDJyZXFfbW1fc3RhdGUKK3sKKwlVSU5UMzIJCW1zZ2NvZGUJOworCVVJTlQzMgkJbXNnbGVuCTsKKwlVSU5UOAkJZGV2bmFtZVtXTEFOX0RFVk5BTUVMRU5fTUFYXQk7CisJcDgwMjExaXRlbV91aW50MzJfdAllbmFibGUJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJcmVzdWx0Y29kZQk7Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIHA4MDIxMW1zZ19wMnJlcV9tbV9zdGF0ZV90OworCit0eXBlZGVmIHN0cnVjdCBwODAyMTFtc2dfcDJyZXFfZHVtcF9zdGF0ZQoreworCVVJTlQzMgkJbXNnY29kZQk7CisJVUlOVDMyCQltc2dsZW4JOworCVVJTlQ4CQlkZXZuYW1lW1dMQU5fREVWTkFNRUxFTl9NQVhdCTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CWxldmVsCTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CXJlc3VsdGNvZGUJOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBwODAyMTFtc2dfcDJyZXFfZHVtcF9zdGF0ZV90OworCit0eXBlZGVmIHN0cnVjdCBwODAyMTFtc2dfcDJyZXFfY2hhbm5lbF9pbmZvCit7CisJVUlOVDMyCQltc2djb2RlCTsKKwlVSU5UMzIJCW1zZ2xlbgk7CisJVUlOVDgJCWRldm5hbWVbV0xBTl9ERVZOQU1FTEVOX01BWF0JOworCXA4MDIxMWl0ZW1fdWludDMyX3QJY2hhbm5lbGxpc3QJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJY2hhbm5lbGR3ZWxsdGltZQk7CisJcDgwMjExaXRlbV91aW50MzJfdAlyZXN1bHRjb2RlCTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CW51bWNoaW5mbwk7Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIHA4MDIxMW1zZ19wMnJlcV9jaGFubmVsX2luZm9fdDsKKwordHlwZWRlZiBzdHJ1Y3QgcDgwMjExbXNnX3AycmVxX2NoYW5uZWxfaW5mb19yZXN1bHRzCit7CisJVUlOVDMyCQltc2djb2RlCTsKKwlVSU5UMzIJCW1zZ2xlbgk7CisJVUlOVDgJCWRldm5hbWVbV0xBTl9ERVZOQU1FTEVOX01BWF0JOworCXA4MDIxMWl0ZW1fdWludDMyX3QJY2hhbm5lbAk7CisJcDgwMjExaXRlbV91aW50MzJfdAlyZXN1bHRjb2RlCTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CWF2Z25vaXNlbGV2ZWwJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJcGVha25vaXNlbGV2ZWwJOworCXA4MDIxMWl0ZW1fdWludDMyX3QJYnNzYWN0aXZlCTsKKwlwODAyMTFpdGVtX3VpbnQzMl90CXBjZmFjdGl2ZQk7Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIHA4MDIxMW1zZ19wMnJlcV9jaGFubmVsX2luZm9fcmVzdWx0c190OworCit0eXBlZGVmIHN0cnVjdCBwODAyMTFtc2dfcDJyZXFfZW5hYmxlCit7CisJVUlOVDMyCQltc2djb2RlCTsKKwlVSU5UMzIJCW1zZ2xlbgk7CisJVUlOVDgJCWRldm5hbWVbV0xBTl9ERVZOQU1FTEVOX01BWF0JOworCXA4MDIxMWl0ZW1fdWludDMyX3QJcmVzdWx0Y29kZQk7Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIHA4MDIxMW1zZ19wMnJlcV9lbmFibGVfdDsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wODAyMTFtZ210LmggYi9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wODAyMTFtZ210LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmQ0YzE2MjkKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wODAyMTFtZ210LmgKQEAgLTAsMCArMSw1NzUgQEAKKy8qIHA4MDIxMW1nbXQuaAorKgorKiBNYWNyb3MsIHR5cGVzLCBhbmQgZnVuY3Rpb25zIHRvIGhhbmRsZSA4MDIuMTEgbWdtdCBmcmFtZXMKKyoKKyogQ29weXJpZ2h0IChDKSAxOTk5IEFic29sdXRlVmFsdWUgU3lzdGVtcywgSW5jLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyoKKyogbGludXgtd2xhbgorKgorKiAgIFRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgYXJlIHN1YmplY3QgdG8gdGhlIE1vemlsbGEgUHVibGljCisqICAgTGljZW5zZSBWZXJzaW9uIDEuMSAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUKKyogICBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YKKyogICB0aGUgTGljZW5zZSBhdCBodHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC8KKyoKKyogICBTb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMKKyogICBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yCisqICAgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nCisqICAgcmlnaHRzIGFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyoKKyogICBBbHRlcm5hdGl2ZWx5LCB0aGUgY29udGVudHMgb2YgdGhpcyBmaWxlIG1heSBiZSB1c2VkIHVuZGVyIHRoZQorKiAgIHRlcm1zIG9mIHRoZSBHTlUgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyICh0aGUgIkdQTCIpLCBpbiB3aGljaAorKiAgIGNhc2UgdGhlIHByb3Zpc2lvbnMgb2YgdGhlIEdQTCBhcmUgYXBwbGljYWJsZSBpbnN0ZWFkIG9mIHRoZQorKiAgIGFib3ZlLiAgSWYgeW91IHdpc2ggdG8gYWxsb3cgdGhlIHVzZSBvZiB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlCisqICAgb25seSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdQTCBhbmQgbm90IHRvIGFsbG93IG90aGVycyB0byB1c2UKKyogICB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIHVuZGVyIHRoZSBNUEwsIGluZGljYXRlIHlvdXIgZGVjaXNpb24KKyogICBieSBkZWxldGluZyB0aGUgcHJvdmlzaW9ucyBhYm92ZSBhbmQgcmVwbGFjZSB0aGVtIHdpdGggdGhlIG5vdGljZQorKiAgIGFuZCBvdGhlciBwcm92aXNpb25zIHJlcXVpcmVkIGJ5IHRoZSBHUEwuICBJZiB5b3UgZG8gbm90IGRlbGV0ZQorKiAgIHRoZSBwcm92aXNpb25zIGFib3ZlLCBhIHJlY2lwaWVudCBtYXkgdXNlIHlvdXIgdmVyc2lvbiBvZiB0aGlzCisqICAgZmlsZSB1bmRlciBlaXRoZXIgdGhlIE1QTCBvciB0aGUgR1BMLgorKgorKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKgorKiBJbnF1aXJpZXMgcmVnYXJkaW5nIHRoZSBsaW51eC13bGFuIE9wZW4gU291cmNlIHByb2plY3QgY2FuIGJlCisqIG1hZGUgZGlyZWN0bHkgdG86CisqCisqIEFic29sdXRlVmFsdWUgU3lzdGVtcyBJbmMuCisqIGluZm9AbGludXgtd2xhbi5jb20KKyogaHR0cDovL3d3dy5saW51eC13bGFuLmNvbQorKgorKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKgorKiBQb3J0aW9ucyBvZiB0aGUgZGV2ZWxvcG1lbnQgb2YgdGhpcyBzb2Z0d2FyZSB3ZXJlIGZ1bmRlZCBieQorKiBJbnRlcnNpbCBDb3Jwb3JhdGlvbiBhcyBwYXJ0IG9mIFBSSVNNKFIpIGNoaXBzZXQgcHJvZHVjdCBkZXZlbG9wbWVudC4KKyoKKyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyoKKyogVGhpcyBmaWxlIGRlY2xhcmVzIHRoZSBjb25zdGFudHMgYW5kIHR5cGVzIHVzZWQgaW4gdGhlIGludGVyZmFjZQorKiBiZXR3ZWVuIGEgd2xhbiBkcml2ZXIgYW5kIHRoZSB1c2VyIG1vZGUgdXRpbGl0aWVzLgorKgorKiBOb3RlczoKKyogIC0gQ29uc3RhbnQgdmFsdWVzIGFyZSBhbHdheXMgaW4gSE9TVCBieXRlIG9yZGVyLiAgVG8gYXNzaWduCisqICAgIHZhbHVlcyB0byBtdWx0aS1ieXRlIGZpZWxkcyB0aGV5IF9tdXN0XyBiZSBjb252ZXJ0ZWQgdG8KKyogICAgaWVlZSBieXRlIG9yZGVyLiAgVG8gcmV0cmlldmUgbXVsdGktYnl0ZSB2YWx1ZXMgZnJvbSBpbmNvbWluZworKiAgICBmcmFtZXMsIHRoZXkgbXVzdCBiZSBjb252ZXJ0ZWQgdG8gaG9zdCBvcmRlci4KKyoKKyogIC0gVGhlIGxlbiBtZW1iZXIgb2YgdGhlIGZyYW1lIHN0cnVjdHVyZSBkb2VzIE5PVCEhISBpbmNsdWRlCisqICAgIHRoZSBNQUMgQ1JDLiAgVGhlcmVmb3JlLCB0aGUgbGVuIGZpZWxkIG9uIHJ4J2QgZnJhbWVzIHNob3VsZAorKiAgICBoYXZlIDQgc3VidHJhY3RlZCBmcm9tIGl0LgorKgorKiBBbGwgZnVuY3Rpb25zIGRlY2xhcmVkIGhlcmUgYXJlIGltcGxlbWVudGVkIGluIHA4MDIxMS5jCisqCisqIFRoZSB0eXBlcywgbWFjcm9zLCBhbmQgZnVuY3Rpb25zIGRlZmluZWQgaGVyZSBhcmUgcHJpbWFyaWx5CisqIHVzZWQgZm9yIGVuY29kaW5nIGFuZCBkZWNvZGluZyBtYW5hZ2VtZW50IGZyYW1lcy4gIFRoZXkgYXJlCisqIGRlc2lnbmVkIHRvIGZvbGxvdyB0aGVzZSBwYXR0ZXJucyBvZiB1c2U6CisqCisqIERFQ09ERToKKyogMSkgYSBmcmFtZSBvZiBsZW5ndGggbGVuIGlzIHJlY2VpdmVkIGludG8gYnVmZmVyIGIKKyogMikgdXNpbmcgdGhlIGhkciBzdHJ1Y3R1cmUgYW5kIG1hY3Jvcywgd2UgZGV0ZXJtaW5lIHRoZSB0eXBlCisqIDMpIGFuIGFwcHJvcHJpYXRlIG1nbXQgZnJhbWUgc3RydWN0dXJlLCBtZiwgaXMgYWxsb2NhdGVkIGFuZCB6ZXJvZWQKKyogNCkgbWYuaGRyID0gYgorKiAgICBtZi5idWYgPSBiCisqICAgIG1mLmxlbiA9IGxlbgorKiA1KSBjYWxsIG1nbXRfZGVjb2RlKCBtZiApCisqIDYpIHRoZSBmcmFtZSBmaWVsZCBwb2ludGVycyBpbiBtZiBhcmUgbm93IHNldC4gIE5vdGUgdGhhdCBhbnkKKyogICAgbXVsdGktYnl0ZSBmcmFtZSBmaWVsZCB2YWx1ZXMgYWNjZXNzZWQgdXNpbmcgdGhlIGZyYW1lIGZpZWxkCisqICAgIHBvaW50ZXJzIGFyZSBpbiBpZWVlIGJ5dGUgb3JkZXIgYW5kIHdpbGwgaGF2ZSB0byBiZSBjb252ZXJ0ZWQKKyogICAgdG8gaG9zdCBvcmRlci4KKyoKKyogRU5DT0RFOgorKiAxKSBMaWJyYXJ5IGNsaWVudCBhbGxvY2F0ZXMgYnVmZmVyIHNwYWNlIGZvciBtYXhpbXVtIGxlbmd0aAorKiAgICBmcmFtZSBvZiB0aGUgZGVzaXJlZCB0eXBlCisqIDIpIExpYnJhcnkgY2xpZW50IGFsbG9jYXRlcyBhIG1nbXQgZnJhbWUgc3RydWN0dXJlLCBjYWxsZWQgbWYsCisqICAgIG9mIHRoZSBkZXNpcmVkIHR5cGUKKyogMykgU2V0IHRoZSBmb2xsb3dpbmc6CisqICAgIG1mLnR5cGUgPSA8ZGVzaXJlZCB0eXBlPgorKiAgICBtZi5idWYgPSA8YWxsb2NhdGVkIGJ1ZmZlciBhZGRyZXNzPgorKiA0KSBjYWxsIG1nbXRfZW5jb2RlKCBtZiApCisqIDUpIGFsbCBvZiB0aGUgZml4ZWQgZmllbGQgcG9pbnRlcnMgYW5kIGZpeGVkIGxlbmd0aCBpbmZvcm1hdGlvbiBlbGVtZW50CisqICAgIHBvaW50ZXJzIGluIG1mIGFyZSBub3cgc2V0IHRvIHRoZWlyIHJlc3BlY3RpdmUgbG9jYXRpb25zIGluIHRoZQorKiAgICBhbGxvY2F0ZWQgc3BhY2UgKGZvcnR1bmF0ZWx5LCBhbGwgdmFyaWFibGUgbGVuZ3RoIGluZm9ybWF0aW9uIGVsZW1lbnRzCisqICAgIGZhbGwgYXQgdGhlIGVuZCBvZiB0aGVpciByZXNwZWN0aXZlIGZyYW1lcykuCisqIDVhKSBUaGUgbGVuZ3RoIGZpZWxkIGlzIHNldCB0byBpbmNsdWRlIHRoZSBsYXN0IG9mIHRoZSBmaXhlZCBhbmQgZml4ZWQKKyogICAgIGxlbmd0aCBmaWVsZHMuICBJdCBtYXkgaGF2ZSB0byBiZSB1cGRhdGVkIGZvciBvcHRpb25hbCBvciB2YXJpYWJsZQorKiAJbGVuZ3RoIGluZm9ybWF0aW9uIGVsZW1lbnRzLgorKiA2KSBPcHRpb25hbCBhbmQgdmFyaWFibGUgbGVuZ3RoIGluZm9ybWF0aW9uIGVsZW1lbnRzIGFyZSBzcGVjaWFsIGNhc2VzCisqICAgIGFuZCBtdXN0IGJlIGhhbmRsZWQgaW5kaXZpZHVhbGx5IGJ5IHRoZSBjbGllbnQgY29kZS4KKyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyovCisKKyNpZm5kZWYgX1A4MDIxMU1HTVRfSAorI2RlZmluZSBfUDgwMjExTUdNVF9ICisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKiBTeXN0ZW0gSW5jbHVkZXMgKi8KKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKy8qIFByb2plY3QgSW5jbHVkZXMgKi8KKworI2lmbmRlZiAgX1dMQU5fQ09NUEFUX0gKKyNpbmNsdWRlICJ3bGFuX2NvbXBhdC5oIgorI2VuZGlmCisKKyNpZm5kZWYgIF9QODAyMTFIRFJfSAorI2luY2x1ZGUgInA4MDIxMWhkci5oIgorI2VuZGlmCisKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKy8qIENvbnN0YW50cyAqLworCisvKi0tIEluZm9ybWF0aW9uIEVsZW1lbnQgSURzIC0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNkZWZpbmUgV0xBTl9FSURfU1NJRAkJMAorI2RlZmluZSBXTEFOX0VJRF9TVVBQX1JBVEVTCTEKKyNkZWZpbmUgV0xBTl9FSURfRkhfUEFSTVMJMgorI2RlZmluZSBXTEFOX0VJRF9EU19QQVJNUwkzCisjZGVmaW5lIFdMQU5fRUlEX0NGX1BBUk1TCTQKKyNkZWZpbmUgV0xBTl9FSURfVElNCQk1CisjZGVmaW5lIFdMQU5fRUlEX0lCU1NfUEFSTVMJNgorLyotLSB2YWx1ZXMgNy0xNSByZXNlcnZlZCAtLSovCisjZGVmaW5lIFdMQU5fRUlEX0NIQUxMRU5HRQkxNgorLyotLSB2YWx1ZXMgMTctMzEgcmVzZXJ2ZWQgZm9yIGNoYWxsZW5nZSB0ZXh0IGV4dGVuc2lvbiAtLSovCisvKi0tIHZhbHVlcyAzMi0yNTUgcmVzZXJ2ZWQgLS0qLworCisvKi0tIFJlYXNvbiBDb2RlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNkZWZpbmUgV0xBTl9NR01UX1JFQVNPTl9SU1ZECQkJMAorI2RlZmluZSBXTEFOX01HTVRfUkVBU09OX1VOU1BFQwkJCTEKKyNkZWZpbmUgV0xBTl9NR01UX1JFQVNPTl9QUklPUl9BVVRIX0lOVkFMSUQJMgorI2RlZmluZSBXTEFOX01HTVRfUkVBU09OX0RFQVVUSF9MRUFWSU5HCQkzCisjZGVmaW5lIFdMQU5fTUdNVF9SRUFTT05fRElTQVNTT0NfSU5BQ1RJVkUJNAorI2RlZmluZSBXTEFOX01HTVRfUkVBU09OX0RJU0FTU09DX0FQX0JVU1kJNQorI2RlZmluZSBXTEFOX01HTVRfUkVBU09OX0NMQVNTMl9OT05BVVRICQk2CisjZGVmaW5lIFdMQU5fTUdNVF9SRUFTT05fQ0xBU1MzX05PTkFTU09DCTcKKyNkZWZpbmUgV0xBTl9NR01UX1JFQVNPTl9ESVNBU1NPQ19TVEFfSEFTTEVGVAk4CisjZGVmaW5lIFdMQU5fTUdNVF9SRUFTT05fQ0FOVF9BU1NPQ19OT05BVVRICTkKKworLyotLSBTdGF0dXMgQ29kZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZGVmaW5lIFdMQU5fTUdNVF9TVEFUVVNfU1VDQ0VTUwkJMAorI2RlZmluZSBXTEFOX01HTVRfU1RBVFVTX1VOU1BFQ19GQUlMVVJFCQkxCisjZGVmaW5lIFdMQU5fTUdNVF9TVEFUVVNfQ0FQU19VTlNVUFBPUlRFRAkxMAorI2RlZmluZSBXTEFOX01HTVRfU1RBVFVTX1JFQVNTT0NfTk9fQVNTT0MJMTEKKyNkZWZpbmUgV0xBTl9NR01UX1NUQVRVU19BU1NPQ19ERU5JRURfVU5TUEVDCTEyCisjZGVmaW5lIFdMQU5fTUdNVF9TVEFUVVNfVU5TVVBQT1JURURfQVVUSEFMRwkxMworI2RlZmluZSBXTEFOX01HTVRfU1RBVFVTX1JYX0FVVEhfTk9TRVEJCTE0CisjZGVmaW5lIFdMQU5fTUdNVF9TVEFUVVNfQ0hBTExFTkdFX0ZBSUwJCTE1CisjZGVmaW5lIFdMQU5fTUdNVF9TVEFUVVNfQVVUSF9USU1FT1VUCQkxNgorI2RlZmluZSBXTEFOX01HTVRfU1RBVFVTX0FTU09DX0RFTklFRF9CVVNZCTE3CisjZGVmaW5lIFdMQU5fTUdNVF9TVEFUVVNfQVNTT0NfREVOSUVEX1JBVEVTCTE4CisgIC8qIHA4MDIxMWIgYWRkaXRpb25zICovCisjZGVmaW5lIFdMQU5fTUdNVF9TVEFUVVNfQVNTT0NfREVOSUVEX05PU0hPUlQJMTkKKyNkZWZpbmUgV0xBTl9NR01UX1NUQVRVU19BU1NPQ19ERU5JRURfTk9QQkNDCTIwCisjZGVmaW5lIFdMQU5fTUdNVF9TVEFUVVNfQVNTT0NfREVOSUVEX05PQUdJTElUWQkyMQorCisKKworLyotLSBBdXRoIEFsZ29yaXRobSBGaWVsZCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2RlZmluZSBXTEFOX0FVVEhfQUxHX09QRU5TWVNURU0JCTAKKyNkZWZpbmUgV0xBTl9BVVRIX0FMR19TSEFSRURLRVkJCQkxCisKKy8qLS0gTWFuYWdlbWVudCBGcmFtZSBGaWVsZCBPZmZzZXRzIC0tLS0tLS0tLS0tLS0qLworLyogTm90ZTogTm90IGFsbCBmaWVsZHMgYXJlIGxpc3RlZCBiZWNhdXNlIG9mIHZhcmlhYmxlIGxlbmd0aHMsICAgKi8KKy8qICAgICAgIHNlZSB0aGUgY29kZSBpbiBwODAyMTEuYyB0byBzZWUgaG93IHdlIHNlYXJjaCBmb3IgZmllbGRzICovCisvKiBOb3RlOiBUaGVzZSBvZmZzZXRzIGFyZSBmcm9tIHRoZSBzdGFydCBvZiB0aGUgZnJhbWUgZGF0YSAgICAgICAqLworCisjZGVmaW5lIFdMQU5fQkVBQ09OX09GRl9UUwkJCTAKKyNkZWZpbmUgV0xBTl9CRUFDT05fT0ZGX0JDTl9JTlQJCQk4CisjZGVmaW5lIFdMQU5fQkVBQ09OX09GRl9DQVBJTkZPCQkJMTAKKyNkZWZpbmUgV0xBTl9CRUFDT05fT0ZGX1NTSUQJCQkxMgorCisjZGVmaW5lIFdMQU5fRElTQVNTT0NfT0ZGX1JFQVNPTgkJMAorCisjZGVmaW5lIFdMQU5fQVNTT0NSRVFfT0ZGX0NBUF9JTkZPCQkwCisjZGVmaW5lIFdMQU5fQVNTT0NSRVFfT0ZGX0xJU1RFTl9JTlQJCTIKKyNkZWZpbmUgV0xBTl9BU1NPQ1JFUV9PRkZfU1NJRAkJCTQKKworI2RlZmluZSBXTEFOX0FTU09DUkVTUF9PRkZfQ0FQX0lORk8JCTAKKyNkZWZpbmUgV0xBTl9BU1NPQ1JFU1BfT0ZGX1NUQVRVUwkJMgorI2RlZmluZSBXTEFOX0FTU09DUkVTUF9PRkZfQUlECQkJNAorI2RlZmluZSBXTEFOX0FTU09DUkVTUF9PRkZfU1VQUF9SQVRFUwkJNgorCisjZGVmaW5lIFdMQU5fUkVBU1NPQ1JFUV9PRkZfQ0FQX0lORk8JCTAKKyNkZWZpbmUgV0xBTl9SRUFTU09DUkVRX09GRl9MSVNURU5fSU5UCQkyCisjZGVmaW5lIFdMQU5fUkVBU1NPQ1JFUV9PRkZfQ1VSUl9BUAkJNAorI2RlZmluZSBXTEFOX1JFQVNTT0NSRVFfT0ZGX1NTSUQJCTEwCisKKyNkZWZpbmUgV0xBTl9SRUFTU09DUkVTUF9PRkZfQ0FQX0lORk8JCTAKKyNkZWZpbmUgV0xBTl9SRUFTU09DUkVTUF9PRkZfU1RBVFVTCQkyCisjZGVmaW5lIFdMQU5fUkVBU1NPQ1JFU1BfT0ZGX0FJRAkJNAorI2RlZmluZSBXTEFOX1JFQVNTT0NSRVNQX09GRl9TVVBQX1JBVEVTCQk2CisKKyNkZWZpbmUgV0xBTl9QUk9CRVJFUV9PRkZfU1NJRAkJCTAKKworI2RlZmluZSBXTEFOX1BST0JFUkVTUF9PRkZfVFMJCQkwCisjZGVmaW5lIFdMQU5fUFJPQkVSRVNQX09GRl9CQ05fSU5UCQk4CisjZGVmaW5lIFdMQU5fUFJPQkVSRVNQX09GRl9DQVBfSU5GTwkJMTAKKyNkZWZpbmUgV0xBTl9QUk9CRVJFU1BfT0ZGX1NTSUQJCQkxMgorCisjZGVmaW5lIFdMQU5fQVVUSEVOX09GRl9BVVRIX0FMRwkJMAorI2RlZmluZSBXTEFOX0FVVEhFTl9PRkZfQVVUSF9TRVEJCTIKKyNkZWZpbmUgV0xBTl9BVVRIRU5fT0ZGX1NUQVRVUwkJCTQKKyNkZWZpbmUgV0xBTl9BVVRIRU5fT0ZGX0NIQUxMRU5HRQkJNgorCisjZGVmaW5lIFdMQU5fREVBVVRIRU5fT0ZGX1JFQVNPTgkJMAorCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKiBNYWNyb3MgKi8KKworLyotLSBDYXBhYmlsaXR5IEZpZWxkIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZGVmaW5lIFdMQU5fR0VUX01HTVRfQ0FQX0lORk9fRVNTKG4pCQkoKG4pICYgQklUMCkKKyNkZWZpbmUgV0xBTl9HRVRfTUdNVF9DQVBfSU5GT19JQlNTKG4pCQkoKChuKSAmIEJJVDEpID4+IDEpCisjZGVmaW5lIFdMQU5fR0VUX01HTVRfQ0FQX0lORk9fQ0ZQT0xMQUJMRShuKQkoKChuKSAmIEJJVDIpID4+IDIpCisjZGVmaW5lIFdMQU5fR0VUX01HTVRfQ0FQX0lORk9fQ0ZQT0xMUkVRKG4pCSgoKG4pICYgQklUMykgPj4gMykKKyNkZWZpbmUgV0xBTl9HRVRfTUdNVF9DQVBfSU5GT19QUklWQUNZKG4pCSgoKG4pICYgQklUNCkgPj4gNCkKKyAgLyogcDgwMjExYiBhZGRpdGlvbnMgKi8KKyNkZWZpbmUgV0xBTl9HRVRfTUdNVF9DQVBfSU5GT19TSE9SVChuKQkJKCgobikgJiBCSVQ1KSA+PiA1KQorI2RlZmluZSBXTEFOX0dFVF9NR01UX0NBUF9JTkZPX1BCQ0MobikJCSgoKG4pICYgQklUNikgPj4gNikKKyNkZWZpbmUgV0xBTl9HRVRfTUdNVF9DQVBfSU5GT19BR0lMSVRZKG4pCSgoKG4pICYgQklUNykgPj4gNykKKworI2RlZmluZSBXTEFOX1NFVF9NR01UX0NBUF9JTkZPX0VTUyhuKQkJKG4pCisjZGVmaW5lIFdMQU5fU0VUX01HTVRfQ0FQX0lORk9fSUJTUyhuKQkJKChuKSA8PCAxKQorI2RlZmluZSBXTEFOX1NFVF9NR01UX0NBUF9JTkZPX0NGUE9MTEFCTEUobikJKChuKSA8PCAyKQorI2RlZmluZSBXTEFOX1NFVF9NR01UX0NBUF9JTkZPX0NGUE9MTFJFUShuKQkoKG4pIDw8IDMpCisjZGVmaW5lIFdMQU5fU0VUX01HTVRfQ0FQX0lORk9fUFJJVkFDWShuKQkoKG4pIDw8IDQpCisgIC8qIHA4MDIxMWIgYWRkaXRpb25zICovCisjZGVmaW5lIFdMQU5fU0VUX01HTVRfQ0FQX0lORk9fU0hPUlQobikJCSgobikgPDwgNSkKKyNkZWZpbmUgV0xBTl9TRVRfTUdNVF9DQVBfSU5GT19QQkNDKG4pCQkoKG4pIDw8IDYpCisjZGVmaW5lIFdMQU5fU0VUX01HTVRfQ0FQX0lORk9fQUdJTElUWShuKQkoKG4pIDw8IDcpCisKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKy8qIFR5cGVzICovCisKKy8qLS0gSW5mb3JtYXRpb24gRWxlbWVudCBUeXBlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiBwcm90b3R5cGUgc3RydWN0dXJlLCBhbGwgSUVzIHN0YXJ0IHdpdGggdGhlc2UgbWVtYmVycyAqLworCit0eXBlZGVmIHN0cnVjdCB3bGFuX2llCit7CisJVUlOVDgJZWlkOworCVVJTlQ4CWxlbjsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gd2xhbl9pZV90OworCisvKi0tIFNlcnZpY2UgU2V0IElkZW50aXR5IChTU0lEKSAgLS0tLS0tLS0tLS0tLS0tLS0qLwordHlwZWRlZiBzdHJ1Y3Qgd2xhbl9pZV9zc2lkCit7CisJVUlOVDgJZWlkOworCVVJTlQ4CWxlbjsKKwlVSU5UOAlzc2lkWzFdOyAgLyogbWF5IGJlIHplcm8sIHB0cnMgbWF5IG92ZXJsYXAgKi8KK30gX19XTEFOX0FUVFJJQl9QQUNLX18gd2xhbl9pZV9zc2lkX3Q7CisKKy8qLS0gU3VwcG9ydGVkIFJhdGVzICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCit0eXBlZGVmIHN0cnVjdCB3bGFuX2llX3N1cHBfcmF0ZXMKK3sKKwlVSU5UOAllaWQ7CisJVUlOVDgJbGVuOworCVVJTlQ4CXJhdGVzWzFdOyAgLyogaGFkIGJldHRlciBiZSBhdCBMRUFTVCBvbmUhICovCit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIHdsYW5faWVfc3VwcF9yYXRlc190OworCisvKi0tIEZIIFBhcmFtZXRlciBTZXQgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwordHlwZWRlZiBzdHJ1Y3Qgd2xhbl9pZV9maF9wYXJtcworeworCVVJTlQ4CWVpZDsKKwlVSU5UOAlsZW47CisJVUlOVDE2CWR3ZWxsOworCVVJTlQ4CWhvcHNldDsKKwlVSU5UOAlob3BwYXR0ZXJuOworCVVJTlQ4CWhvcGluZGV4OworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyB3bGFuX2llX2ZoX3Bhcm1zX3Q7CisKKy8qLS0gRFMgUGFyYW1ldGVyIFNldCAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCit0eXBlZGVmIHN0cnVjdCB3bGFuX2llX2RzX3Bhcm1zCit7CisJVUlOVDgJZWlkOworCVVJTlQ4CWxlbjsKKwlVSU5UOAljdXJyX2NoOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyB3bGFuX2llX2RzX3Bhcm1zX3Q7CisKKy8qLS0gQ0YgUGFyYW1ldGVyIFNldCAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3R5cGVkZWYgc3RydWN0IHdsYW5faWVfY2ZfcGFybXMKK3sKKwlVSU5UOAllaWQ7CisJVUlOVDgJbGVuOworCVVJTlQ4CWNmcF9jbnQ7CisJVUlOVDgJY2ZwX3BlcmlvZDsKKwlVSU5UMTYJY2ZwX21heGR1cjsKKwlVSU5UMTYJY2ZwX2R1cnJlbWFpbmluZzsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gd2xhbl9pZV9jZl9wYXJtc190OworCisvKi0tIFRJTSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwordHlwZWRlZiBzdHJ1Y3Qgd2xhbl9pZV90aW0KK3sKKwlVSU5UOAllaWQ7CisJVUlOVDgJbGVuOworCVVJTlQ4CWR0aW1fY250OworCVVJTlQ4CWR0aW1fcGVyaW9kOworCVVJTlQ4CWJpdG1hcF9jdGw7CisJVUlOVDgJdmlydF9ibVsxXTsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gd2xhbl9pZV90aW1fdDsKKworLyotLSBJQlNTIFBhcmFtZXRlciBTZXQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3R5cGVkZWYgc3RydWN0IHdsYW5faWVfaWJzc19wYXJtcworeworCVVJTlQ4CWVpZDsKKwlVSU5UOAlsZW47CisJVUlOVDE2CWF0aW1fd2luOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyB3bGFuX2llX2lic3NfcGFybXNfdDsKKworLyotLSBDaGFsbGVuZ2UgVGV4dCAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3R5cGVkZWYgc3RydWN0IHdsYW5faWVfY2hhbGxlbmdlCit7CisJVUlOVDgJZWlkOworCVVJTlQ4CWxlbjsKKwlVSU5UOAljaGFsbGVuZ2VbMV07Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIHdsYW5faWVfY2hhbGxlbmdlX3Q7CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiAgRnJhbWUgVHlwZXMgICovCisKKy8qIHByb3RvdHlwZSBzdHJ1Y3R1cmUsIGFsbCBtZ210IGZyYW1lIHR5cGVzIHdpbGwgc3RhcnQgd2l0aCB0aGVzZSBtZW1iZXJzICovCit0eXBlZGVmIHN0cnVjdCB3bGFuX2ZyX21nbXQKK3sKKwlVSU5UMTYJCQl0eXBlOworCVVJTlQxNgkJCWxlbjsJLyogRE9FUyBOT1QgaW5jbHVkZSBDUkMgISEhISovCisJVUlOVDgJCQkqYnVmOworCXA4MDIxMV9oZHJfdAkJKmhkcjsKKwkvKiB1c2VkIGZvciB0YXJnZXQgc3BlY2lmaWMgZGF0YSwgc2tiIGluIExpbnV4ICovCisJdm9pZAkJCSpwcml2OworCS8qLS0gZml4ZWQgZmllbGRzIC0tLS0tLS0tLS0tKi8KKwkvKi0tIGluZm8gZWxlbWVudHMgLS0tLS0tLS0tLSovCit9IHdsYW5fZnJfbWdtdF90OworCisvKi0tIEJlYWNvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwordHlwZWRlZiBzdHJ1Y3Qgd2xhbl9mcl9iZWFjb24KK3sKKwlVSU5UMTYJCQl0eXBlOworCVVJTlQxNgkJCWxlbjsKKwlVSU5UOAkJCSpidWY7CisJcDgwMjExX2hkcl90CQkqaGRyOworCS8qIHVzZWQgZm9yIHRhcmdldCBzcGVjaWZpYyBkYXRhLCBza2IgaW4gTGludXggKi8KKwl2b2lkCQkJKnByaXY7CisJLyotLSBmaXhlZCBmaWVsZHMgLS0tLS0tLS0tLS0qLworCVVJTlQ2NAkJCSp0czsKKwlVSU5UMTYJCQkqYmNuX2ludDsKKwlVSU5UMTYJCQkqY2FwX2luZm87CisJLyotLSBpbmZvIGVsZW1lbnRzIC0tLS0tLS0tLS0qLworCXdsYW5faWVfc3NpZF90CQkqc3NpZDsKKwl3bGFuX2llX3N1cHBfcmF0ZXNfdAkqc3VwcF9yYXRlczsKKwl3bGFuX2llX2ZoX3Bhcm1zX3QJKmZoX3Bhcm1zOworCXdsYW5faWVfZHNfcGFybXNfdAkqZHNfcGFybXM7CisJd2xhbl9pZV9jZl9wYXJtc190CSpjZl9wYXJtczsKKwl3bGFuX2llX2lic3NfcGFybXNfdAkqaWJzc19wYXJtczsKKwl3bGFuX2llX3RpbV90CQkqdGltOworCit9IHdsYW5fZnJfYmVhY29uX3Q7CisKKworLyotLSBJQlNTIEFUSU0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3R5cGVkZWYgc3RydWN0IHdsYW5fZnJfaWJzc2F0aW0KK3sKKwlVSU5UMTYJCQl0eXBlOworCVVJTlQxNgkJCWxlbjsKKwlVSU5UOCoJCQlidWY7CisJcDgwMjExX2hkcl90CQkqaGRyOworCS8qIHVzZWQgZm9yIHRhcmdldCBzcGVjaWZpYyBkYXRhLCBza2IgaW4gTGludXggKi8KKwl2b2lkCQkJKnByaXY7CisKKwkvKi0tIGZpeGVkIGZpZWxkcyAtLS0tLS0tLS0tLSovCisJLyotLSBpbmZvIGVsZW1lbnRzIC0tLS0tLS0tLS0qLworCisJLyogdGhpcyBmcmFtZSB0eXBlIGhhcyBhIG51bGwgYm9keSAqLworCit9IHdsYW5fZnJfaWJzc2F0aW1fdDsKKworLyotLSBEaXNhc3NvY2lhdGlvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3R5cGVkZWYgc3RydWN0IHdsYW5fZnJfZGlzYXNzb2MKK3sKKwlVSU5UMTYJCQl0eXBlOworCVVJTlQxNgkJCWxlbjsKKwlVSU5UOAkJCSpidWY7CisJcDgwMjExX2hkcl90CQkqaGRyOworCS8qIHVzZWQgZm9yIHRhcmdldCBzcGVjaWZpYyBkYXRhLCBza2IgaW4gTGludXggKi8KKwl2b2lkCQkJKnByaXY7CisJLyotLSBmaXhlZCBmaWVsZHMgLS0tLS0tLS0tLS0qLworCVVJTlQxNgkJCSpyZWFzb247CisKKwkvKi0tIGluZm8gZWxlbWVudHMgLS0tLS0tLS0tLSovCisKK30gd2xhbl9mcl9kaXNhc3NvY190OworCisvKi0tIEFzc29jaWF0aW9uIFJlcXVlc3QgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwordHlwZWRlZiBzdHJ1Y3Qgd2xhbl9mcl9hc3NvY3JlcQoreworCVVJTlQxNgkJCXR5cGU7CisJVUlOVDE2CQkJbGVuOworCVVJTlQ4KgkJCWJ1ZjsKKwlwODAyMTFfaGRyX3QJCSpoZHI7CisJLyogdXNlZCBmb3IgdGFyZ2V0IHNwZWNpZmljIGRhdGEsIHNrYiBpbiBMaW51eCAqLworCXZvaWQJCQkqcHJpdjsKKwkvKi0tIGZpeGVkIGZpZWxkcyAtLS0tLS0tLS0tLSovCisJVUlOVDE2CQkJKmNhcF9pbmZvOworCVVJTlQxNgkJCSpsaXN0ZW5faW50OworCS8qLS0gaW5mbyBlbGVtZW50cyAtLS0tLS0tLS0tKi8KKwl3bGFuX2llX3NzaWRfdAkJKnNzaWQ7CisJd2xhbl9pZV9zdXBwX3JhdGVzX3QJKnN1cHBfcmF0ZXM7CisKK30gd2xhbl9mcl9hc3NvY3JlcV90OworCisvKi0tIEFzc29jaWF0aW9uIFJlc3BvbnNlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwordHlwZWRlZiBzdHJ1Y3Qgd2xhbl9mcl9hc3NvY3Jlc3AKK3sKKwlVSU5UMTYJCQl0eXBlOworCVVJTlQxNgkJCWxlbjsKKwlVSU5UOAkJCSpidWY7CisJcDgwMjExX2hkcl90CQkqaGRyOworCS8qIHVzZWQgZm9yIHRhcmdldCBzcGVjaWZpYyBkYXRhLCBza2IgaW4gTGludXggKi8KKwl2b2lkCQkJKnByaXY7CisJLyotLSBmaXhlZCBmaWVsZHMgLS0tLS0tLS0tLS0qLworCVVJTlQxNgkJCSpjYXBfaW5mbzsKKwlVSU5UMTYJCQkqc3RhdHVzOworCVVJTlQxNgkJCSphaWQ7CisJLyotLSBpbmZvIGVsZW1lbnRzIC0tLS0tLS0tLS0qLworCXdsYW5faWVfc3VwcF9yYXRlc190CSpzdXBwX3JhdGVzOworCit9IHdsYW5fZnJfYXNzb2NyZXNwX3Q7CisKKy8qLS0gUmVhc3NvY2lhdGlvbiBSZXF1ZXN0IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCit0eXBlZGVmIHN0cnVjdCB3bGFuX2ZyX3JlYXNzb2NyZXEKK3sKKwlVSU5UMTYJCQl0eXBlOworCVVJTlQxNgkJCWxlbjsKKwlVSU5UOAkJCSpidWY7CisJcDgwMjExX2hkcl90CQkqaGRyOworCS8qIHVzZWQgZm9yIHRhcmdldCBzcGVjaWZpYyBkYXRhLCBza2IgaW4gTGludXggKi8KKwl2b2lkCQkJKnByaXY7CisJLyotLSBmaXhlZCBmaWVsZHMgLS0tLS0tLS0tLS0qLworCVVJTlQxNgkJCSpjYXBfaW5mbzsKKwlVSU5UMTYJCQkqbGlzdGVuX2ludDsKKwlVSU5UOAkJCSpjdXJyX2FwOworCS8qLS0gaW5mbyBlbGVtZW50cyAtLS0tLS0tLS0tKi8KKwl3bGFuX2llX3NzaWRfdAkJKnNzaWQ7CisJd2xhbl9pZV9zdXBwX3JhdGVzX3QJKnN1cHBfcmF0ZXM7CisKK30gd2xhbl9mcl9yZWFzc29jcmVxX3Q7CisKKy8qLS0gUmVhc3NvY2lhdGlvbiBSZXNwb25zZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCit0eXBlZGVmIHN0cnVjdCB3bGFuX2ZyX3JlYXNzb2NyZXNwCit7CisJVUlOVDE2CQkJdHlwZTsKKwlVSU5UMTYJCQlsZW47CisJVUlOVDgJCQkqYnVmOworCXA4MDIxMV9oZHJfdAkJKmhkcjsKKwkvKiB1c2VkIGZvciB0YXJnZXQgc3BlY2lmaWMgZGF0YSwgc2tiIGluIExpbnV4ICovCisJdm9pZAkJCSpwcml2OworCS8qLS0gZml4ZWQgZmllbGRzIC0tLS0tLS0tLS0tKi8KKwlVSU5UMTYJCQkqY2FwX2luZm87CisJVUlOVDE2CQkJKnN0YXR1czsKKwlVSU5UMTYJCQkqYWlkOworCS8qLS0gaW5mbyBlbGVtZW50cyAtLS0tLS0tLS0tKi8KKwl3bGFuX2llX3N1cHBfcmF0ZXNfdAkqc3VwcF9yYXRlczsKKworfSB3bGFuX2ZyX3JlYXNzb2NyZXNwX3Q7CisKKy8qLS0gUHJvYmUgUmVxdWVzdCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCit0eXBlZGVmIHN0cnVjdCB3bGFuX2ZyX3Byb2JlcmVxCit7CisJVUlOVDE2CQkJdHlwZTsKKwlVSU5UMTYJCQlsZW47CisJVUlOVDgJCQkqYnVmOworCXA4MDIxMV9oZHJfdAkJKmhkcjsKKwkvKiB1c2VkIGZvciB0YXJnZXQgc3BlY2lmaWMgZGF0YSwgc2tiIGluIExpbnV4ICovCisJdm9pZAkJCSpwcml2OworCS8qLS0gZml4ZWQgZmllbGRzIC0tLS0tLS0tLS0tKi8KKwkvKi0tIGluZm8gZWxlbWVudHMgLS0tLS0tLS0tLSovCisJd2xhbl9pZV9zc2lkX3QJCSpzc2lkOworCXdsYW5faWVfc3VwcF9yYXRlc190CSpzdXBwX3JhdGVzOworCit9IHdsYW5fZnJfcHJvYmVyZXFfdDsKKworLyotLSBQcm9iZSBSZXNwb25zZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3R5cGVkZWYgc3RydWN0IHdsYW5fZnJfcHJvYmVyZXNwCit7CisJVUlOVDE2CQkJdHlwZTsKKwlVSU5UMTYJCQlsZW47CisJVUlOVDgJCQkqYnVmOworCXA4MDIxMV9oZHJfdAkJKmhkcjsKKwkvKiB1c2VkIGZvciB0YXJnZXQgc3BlY2lmaWMgZGF0YSwgc2tiIGluIExpbnV4ICovCisJdm9pZAkJCSpwcml2OworCS8qLS0gZml4ZWQgZmllbGRzIC0tLS0tLS0tLS0tKi8KKwlVSU5UNjQJCQkqdHM7CisJVUlOVDE2CQkJKmJjbl9pbnQ7CisJVUlOVDE2CQkJKmNhcF9pbmZvOworCS8qLS0gaW5mbyBlbGVtZW50cyAtLS0tLS0tLS0tKi8KKwl3bGFuX2llX3NzaWRfdAkJKnNzaWQ7CisJd2xhbl9pZV9zdXBwX3JhdGVzX3QJKnN1cHBfcmF0ZXM7CisJd2xhbl9pZV9maF9wYXJtc190CSpmaF9wYXJtczsKKwl3bGFuX2llX2RzX3Bhcm1zX3QJKmRzX3Bhcm1zOworCXdsYW5faWVfY2ZfcGFybXNfdAkqY2ZfcGFybXM7CisJd2xhbl9pZV9pYnNzX3Bhcm1zX3QJKmlic3NfcGFybXM7Cit9IHdsYW5fZnJfcHJvYmVyZXNwX3Q7CisKKy8qLS0gQXV0aGVudGljYXRpb24gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCit0eXBlZGVmIHN0cnVjdCB3bGFuX2ZyX2F1dGhlbgoreworCVVJTlQxNgkJCXR5cGU7CisJVUlOVDE2CQkJbGVuOworCVVJTlQ4CQkJKmJ1ZjsKKwlwODAyMTFfaGRyX3QJCSpoZHI7CisJLyogdXNlZCBmb3IgdGFyZ2V0IHNwZWNpZmljIGRhdGEsIHNrYiBpbiBMaW51eCAqLworCXZvaWQJCQkqcHJpdjsKKwkvKi0tIGZpeGVkIGZpZWxkcyAtLS0tLS0tLS0tLSovCisJVUlOVDE2CQkJKmF1dGhfYWxnOworCVVJTlQxNgkJCSphdXRoX3NlcTsKKwlVSU5UMTYJCQkqc3RhdHVzOworCS8qLS0gaW5mbyBlbGVtZW50cyAtLS0tLS0tLS0tKi8KKwl3bGFuX2llX2NoYWxsZW5nZV90CSpjaGFsbGVuZ2U7CisKK30gd2xhbl9mcl9hdXRoZW5fdDsKKworLyotLSBEZWF1dGhlbmljYXRpb24gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwordHlwZWRlZiBzdHJ1Y3Qgd2xhbl9mcl9kZWF1dGhlbgoreworCVVJTlQxNgkJCXR5cGU7CisJVUlOVDE2CQkJbGVuOworCVVJTlQ4CQkJKmJ1ZjsKKwlwODAyMTFfaGRyX3QJCSpoZHI7CisJLyogdXNlZCBmb3IgdGFyZ2V0IHNwZWNpZmljIGRhdGEsIHNrYiBpbiBMaW51eCAqLworCXZvaWQJCQkqcHJpdjsKKwkvKi0tIGZpeGVkIGZpZWxkcyAtLS0tLS0tLS0tLSovCisJVUlOVDE2CQkJKnJlYXNvbjsKKworCS8qLS0gaW5mbyBlbGVtZW50cyAtLS0tLS0tLS0tKi8KKworfSB3bGFuX2ZyX2RlYXV0aGVuX3Q7CisKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKy8qIEV4dGVybiBEZWNsYXJhdGlvbnMgKi8KKworCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworLyogRnVuY3Rpb24gRGVjbGFyYXRpb25zICovCisKK3ZvaWQgd2xhbl9tZ210X2VuY29kZV9iZWFjb24oIHdsYW5fZnJfYmVhY29uX3QgICpmICk7Cit2b2lkIHdsYW5fbWdtdF9kZWNvZGVfYmVhY29uKCB3bGFuX2ZyX2JlYWNvbl90ICAqZiApOwordm9pZCB3bGFuX21nbXRfZW5jb2RlX2Rpc2Fzc29jKCB3bGFuX2ZyX2Rpc2Fzc29jX3QgICpmICk7Cit2b2lkIHdsYW5fbWdtdF9kZWNvZGVfZGlzYXNzb2MoIHdsYW5fZnJfZGlzYXNzb2NfdCAgKmYgKTsKK3ZvaWQgd2xhbl9tZ210X2VuY29kZV9hc3NvY3JlcSggd2xhbl9mcl9hc3NvY3JlcV90ICAqZiApOwordm9pZCB3bGFuX21nbXRfZGVjb2RlX2Fzc29jcmVxKCB3bGFuX2ZyX2Fzc29jcmVxX3QgICpmICk7Cit2b2lkIHdsYW5fbWdtdF9lbmNvZGVfYXNzb2NyZXNwKCB3bGFuX2ZyX2Fzc29jcmVzcF90ICAqZiApOwordm9pZCB3bGFuX21nbXRfZGVjb2RlX2Fzc29jcmVzcCggd2xhbl9mcl9hc3NvY3Jlc3BfdCAgKmYgKTsKK3ZvaWQgd2xhbl9tZ210X2VuY29kZV9yZWFzc29jcmVxKCB3bGFuX2ZyX3JlYXNzb2NyZXFfdCAgKmYgKTsKK3ZvaWQgd2xhbl9tZ210X2RlY29kZV9yZWFzc29jcmVxKCB3bGFuX2ZyX3JlYXNzb2NyZXFfdCAgKmYgKTsKK3ZvaWQgd2xhbl9tZ210X2VuY29kZV9yZWFzc29jcmVzcCggd2xhbl9mcl9yZWFzc29jcmVzcF90ICAqZiApOwordm9pZCB3bGFuX21nbXRfZGVjb2RlX3JlYXNzb2NyZXNwKCB3bGFuX2ZyX3JlYXNzb2NyZXNwX3QgICpmICk7Cit2b2lkIHdsYW5fbWdtdF9lbmNvZGVfcHJvYmVyZXEoIHdsYW5fZnJfcHJvYmVyZXFfdCAgKmYgKTsKK3ZvaWQgd2xhbl9tZ210X2RlY29kZV9wcm9iZXJlcSggd2xhbl9mcl9wcm9iZXJlcV90ICAqZiApOwordm9pZCB3bGFuX21nbXRfZW5jb2RlX3Byb2JlcmVzcCggd2xhbl9mcl9wcm9iZXJlc3BfdCAgKmYgKTsKK3ZvaWQgd2xhbl9tZ210X2RlY29kZV9wcm9iZXJlc3AoIHdsYW5fZnJfcHJvYmVyZXNwX3QgICpmICk7Cit2b2lkIHdsYW5fbWdtdF9lbmNvZGVfYXV0aGVuKCB3bGFuX2ZyX2F1dGhlbl90ICAqZiApOwordm9pZCB3bGFuX21nbXRfZGVjb2RlX2F1dGhlbiggd2xhbl9mcl9hdXRoZW5fdCAgKmYgKTsKK3ZvaWQgd2xhbl9tZ210X2VuY29kZV9kZWF1dGhlbiggd2xhbl9mcl9kZWF1dGhlbl90ICAqZiApOwordm9pZCB3bGFuX21nbXRfZGVjb2RlX2RlYXV0aGVuKCB3bGFuX2ZyX2RlYXV0aGVuX3QgICpmICk7CisKKworI2VuZGlmIC8qIF9QODAyMTFNR01UX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3A4MDIxMW1vZC5jIGIvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcDgwMjExbW9kLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTJjM2Y2MwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3A4MDIxMW1vZC5jCkBAIC0wLDAgKzEsMjE2IEBACisvKiBzcmMvcDgwMjExL3A4MDIxMW1vZC5jCisqCisqIE1vZHVsZSBlbnRyeSBhbmQgZXhpdCBmb3IgcDgwMjExCisqCisqIENvcHlyaWdodCAoQykgMTk5OSBBYnNvbHV0ZVZhbHVlIFN5c3RlbXMsIEluYy4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqCisqIGxpbnV4LXdsYW4KKyoKKyogICBUaGUgY29udGVudHMgb2YgdGhpcyBmaWxlIGFyZSBzdWJqZWN0IHRvIHRoZSBNb3ppbGxhIFB1YmxpYworKiAgIExpY2Vuc2UgVmVyc2lvbiAxLjEgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlCisqICAgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mCisqICAgdGhlIExpY2Vuc2UgYXQgaHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvCisqCisqICAgU29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTCisqICAgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvcgorKiAgIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZworKiAgIHJpZ2h0cyBhbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisqCisqICAgQWx0ZXJuYXRpdmVseSwgdGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBtYXkgYmUgdXNlZCB1bmRlciB0aGUKKyogICB0ZXJtcyBvZiB0aGUgR05VIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiAodGhlICJHUEwiKSwgaW4gd2hpY2gKKyogICBjYXNlIHRoZSBwcm92aXNpb25zIG9mIHRoZSBHUEwgYXJlIGFwcGxpY2FibGUgaW5zdGVhZCBvZiB0aGUKKyogICBhYm92ZS4gIElmIHlvdSB3aXNoIHRvIGFsbG93IHRoZSB1c2Ugb2YgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZQorKiAgIG9ubHkgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHUEwgYW5kIG5vdCB0byBhbGxvdyBvdGhlcnMgdG8gdXNlCisqICAgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSB1bmRlciB0aGUgTVBMLCBpbmRpY2F0ZSB5b3VyIGRlY2lzaW9uCisqICAgYnkgZGVsZXRpbmcgdGhlIHByb3Zpc2lvbnMgYWJvdmUgYW5kIHJlcGxhY2UgdGhlbSB3aXRoIHRoZSBub3RpY2UKKyogICBhbmQgb3RoZXIgcHJvdmlzaW9ucyByZXF1aXJlZCBieSB0aGUgR1BMLiAgSWYgeW91IGRvIG5vdCBkZWxldGUKKyogICB0aGUgcHJvdmlzaW9ucyBhYm92ZSwgYSByZWNpcGllbnQgbWF5IHVzZSB5b3VyIHZlcnNpb24gb2YgdGhpcworKiAgIGZpbGUgdW5kZXIgZWl0aGVyIHRoZSBNUEwgb3IgdGhlIEdQTC4KKyoKKyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyoKKyogSW5xdWlyaWVzIHJlZ2FyZGluZyB0aGUgbGludXgtd2xhbiBPcGVuIFNvdXJjZSBwcm9qZWN0IGNhbiBiZQorKiBtYWRlIGRpcmVjdGx5IHRvOgorKgorKiBBYnNvbHV0ZVZhbHVlIFN5c3RlbXMgSW5jLgorKiBpbmZvQGxpbnV4LXdsYW4uY29tCisqIGh0dHA6Ly93d3cubGludXgtd2xhbi5jb20KKyoKKyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyoKKyogUG9ydGlvbnMgb2YgdGhlIGRldmVsb3BtZW50IG9mIHRoaXMgc29mdHdhcmUgd2VyZSBmdW5kZWQgYnkKKyogSW50ZXJzaWwgQ29ycG9yYXRpb24gYXMgcGFydCBvZiBQUklTTShSKSBjaGlwc2V0IHByb2R1Y3QgZGV2ZWxvcG1lbnQuCisqCisqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqCisqIFRoaXMgZmlsZSBjb250YWlucyB0aGUgcDgwMjExLm8gZW50cnkgYW5kIGV4aXQgcG9pbnRzIGRlZmluZWQgZm9yIGxpbnV4CisqIGtlcm5lbCBtb2R1bGVzLgorKgorKiBOb3RlczoKKyogLSBhbGwgbW9kdWxlIHBhcmFtZXRlcnMgZm9yICBwODAyMTEubyBzaG91bGQgYmUgZGVmaW5lZCBoZXJlLgorKgorKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKi8KKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKy8qIFN5c3RlbSBJbmNsdWRlcyAqLworCisKKyNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpZiAoTElOVVhfVkVSU0lPTl9DT0RFID49IEtFUk5FTF9WRVJTSU9OKDIsNCwyNSkpCisjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KKyNlbmRpZgorCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3dpcmVsZXNzLmg+CisjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CisKKyNpbmNsdWRlICJ2ZXJzaW9uLmgiCisjaW5jbHVkZSAid2xhbl9jb21wYXQuaCIKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKy8qIFByb2plY3QgSW5jbHVkZXMgKi8KKworI2luY2x1ZGUgInA4MDIxMXR5cGVzLmgiCisjaW5jbHVkZSAicDgwMjExaGRyLmgiCisjaW5jbHVkZSAicDgwMjExbWdtdC5oIgorI2luY2x1ZGUgInA4MDIxMWNvbnYuaCIKKyNpbmNsdWRlICJwODAyMTFtc2cuaCIKKyNpbmNsdWRlICJwODAyMTFuZXRkZXYuaCIKKyNpbmNsdWRlICJwODAyMTFyZXEuaCIKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKy8qIExvY2FsIENvbnN0YW50cyAqLworCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKiBMb2NhbCBNYWNyb3MgKi8KKworCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworLyogTG9jYWwgVHlwZXMgKi8KKworCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworLyogTG9jYWwgU3RhdGljIERlZmluaXRpb25zICovCisKK3N0YXRpYyBjaGFyICp2ZXJzaW9uID0gInA4MDIxMS5vOiAiIFdMQU5fUkVMRUFTRTsKKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogLS1Nb2R1bGUgUGFyYW1ldGVycyAqLworCitpbnQgd2xhbl93YXRjaGRvZyA9IDUwMDA7Cittb2R1bGVfcGFyYW0od2xhbl93YXRjaGRvZywgaW50LCAwNjQ0KTsKK01PRFVMRV9QQVJNX0RFU0Mod2xhbl93YXRjaGRvZywgInRyYW5zbWl0IHRpbWVvdXQgaW4gbWlsbGlzZWNvbmRzIik7CisKK2ludCB3bGFuX3dleHRfd3JpdGUgPSAwOworI2lmIFdJUkVMRVNTX0VYVCA+IDEyCittb2R1bGVfcGFyYW0od2xhbl93ZXh0X3dyaXRlLCBpbnQsIDA2NDQpOworTU9EVUxFX1BBUk1fREVTQyh3bGFuX3dleHRfd3JpdGUsICJlbmFibGUgd3JpdGUgd2lyZWxlc3MgZXh0ZW5zaW9ucyIpOworI2VuZGlmCisKKyNpZmRlZiBXTEFOX0lOQ0xVREVfREVCVUcKK2ludCB3bGFuX2RlYnVnPTA7Cittb2R1bGVfcGFyYW0od2xhbl9kZWJ1ZywgaW50LCAwNjQ0KTsKK01PRFVMRV9QQVJNX0RFU0Mod2xhbl9kZWJ1ZywgInA4MDIxMSBkZWJ1ZyBsZXZlbCIpOworI2VuZGlmCisKK01PRFVMRV9MSUNFTlNFKCJEdWFsIE1QTC9HUEwiKTsKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKy8qIExvY2FsIEZ1bmN0aW9uIERlY2xhcmF0aW9ucyAqLworCitpbnQJaW5pdF9tb2R1bGUodm9pZCk7Cit2b2lkCWNsZWFudXBfbW9kdWxlKHZvaWQpOworCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworLyogRnVuY3Rpb24gRGVmaW5pdGlvbnMgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIGluaXRfbW9kdWxlCisqCisqIE1vZHVsZSBpbml0aWFsaXphdGlvbiByb3V0aW5lLCBjYWxsZWQgb25jZSBhdCBtb2R1bGUgbG9hZCB0aW1lLgorKgorKiBBcmd1bWVudHM6CisqCW5vbmUKKyoKKyogUmV0dXJuczoKKyoJMAktIHN1Y2Nlc3MKKyoJfjAJLSBmYWlsdXJlLCBtb2R1bGUgaXMgdW5sb2FkZWQuCisqCisqIFNpZGUgZWZmZWN0czoKKyoJVE9ETzogZGVmaW5lCisqCisqIENhbGwgY29udGV4dDoKKyoJcHJvY2VzcyB0aHJlYWQgKGluc21vZCBvciBtb2Rwcm9iZSkKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworaW50IGluaXRfbW9kdWxlKHZvaWQpCit7CisgICAgICAgIERCRkVOVEVSOworCisjaWYgMAorICAgICAgICBwcmludGsoS0VSTl9OT1RJQ0UgIiVzICglcykgTG9hZGVkXG4iLCB2ZXJzaW9uLCBXTEFOX0JVSUxEX0RBVEUpOworI2VuZGlmCisKKwlwODAyMTFuZXRkZXZfc3RhcnR1cCgpOworI2lmZGVmIENPTkZJR19IT1RQTFVHCisJcDgwMjExX3J1bl9zYmluX2hvdHBsdWcoTlVMTCwgV0xBTl9IT1RQTFVHX1NUQVJUVVApOworI2VuZGlmCisKKyAgICAgICAgREJGRVhJVDsKKyAgICAgICAgcmV0dXJuIDA7Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIGNsZWFudXBfbW9kdWxlCisqCisqIENhbGxlZCBhdCBtb2R1bGUgdW5sb2FkIHRpbWUuICBUaGlzIGlzIG91ciBsYXN0IGNoYW5jZSB0bworKiBjbGVhbiB1cCBhZnRlciBvdXJzZWx2ZXMuCisqCisqIEFyZ3VtZW50czoKKyoJbm9uZQorKgorKiBSZXR1cm5zOgorKglub3RoaW5nCisqCisqIFNpZGUgZWZmZWN0czoKKyoJVE9ETzogZGVmaW5lCisqCisqIENhbGwgY29udGV4dDoKKyoJcHJvY2VzcyB0aHJlYWQKKyoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwordm9pZCBjbGVhbnVwX21vZHVsZSh2b2lkKQoreworICAgICAgICBEQkZFTlRFUjsKKworI2lmZGVmIENPTkZJR19IT1RQTFVHCisJcDgwMjExX3J1bl9zYmluX2hvdHBsdWcoTlVMTCwgV0xBTl9IT1RQTFVHX1NIVVRET1dOKTsKKyNlbmRpZgorCXA4MDIxMW5ldGRldl9zaHV0ZG93bigpOworICAgICAgICBwcmludGsoS0VSTl9OT1RJQ0UgIiVzIFVubG9hZGVkXG4iLCB2ZXJzaW9uKTsKKworICAgICAgICBEQkZFWElUOworICAgICAgICByZXR1cm47Cit9CisKK0VYUE9SVF9TWU1CT0wocDgwMjExbmV0ZGV2X2h3cmVtb3ZlZCk7CitFWFBPUlRfU1lNQk9MKHJlZ2lzdGVyX3dsYW5kZXYpOworRVhQT1JUX1NZTUJPTChwODAyMTFuZXRkZXZfcngpOworRVhQT1JUX1NZTUJPTCh1bnJlZ2lzdGVyX3dsYW5kZXYpOworRVhQT1JUX1NZTUJPTCh3bGFuX3NldHVwKTsKK0VYUE9SVF9TWU1CT0wod2xhbl91bnNldHVwKTsKK0VYUE9SVF9TWU1CT0wocDgwMjExX3N1c3BlbmQpOworRVhQT1JUX1NZTUJPTChwODAyMTFfcmVzdW1lKTsKKworRVhQT1JUX1NZTUJPTChwODAyMTFza2JfZnJlZSk7CitFWFBPUlRfU1lNQk9MKHA4MDIxMXNrYl9yeG1ldGFfYXR0YWNoKTsKKworRVhQT1JUX1NZTUJPTChwODAyMTF3ZXh0X2V2ZW50X2Fzc29jaWF0ZWQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcDgwMjExbXNnLmggYi9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wODAyMTFtc2cuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMTRlOWZiCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcDgwMjExbXNnLmgKQEAgLTAsMCArMSwxMDIgQEAKKy8qIHA4MDIxMW1zZy5oCisqCisqIE1hY3JvcywgY29uc3RhbnRzLCB0eXBlcywgYW5kIGZ1bmNzIGZvciByZXEgYW5kIGluZCBtZXNzYWdlcworKgorKiBDb3B5cmlnaHQgKEMpIDE5OTkgQWJzb2x1dGVWYWx1ZSBTeXN0ZW1zLCBJbmMuICBBbGwgUmlnaHRzIFJlc2VydmVkLgorKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKgorKiBsaW51eC13bGFuCisqCisqICAgVGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBhcmUgc3ViamVjdCB0byB0aGUgTW96aWxsYSBQdWJsaWMKKyogICBMaWNlbnNlIFZlcnNpb24gMS4xICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZQorKiAgIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZgorKiAgIHRoZSBMaWNlbnNlIGF0IGh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBMLworKgorKiAgIFNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUworKiAgIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IKKyogICBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcKKyogICByaWdodHMgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorKgorKiAgIEFsdGVybmF0aXZlbHksIHRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgbWF5IGJlIHVzZWQgdW5kZXIgdGhlCisqICAgdGVybXMgb2YgdGhlIEdOVSBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgKHRoZSAiR1BMIiksIGluIHdoaWNoCisqICAgY2FzZSB0aGUgcHJvdmlzaW9ucyBvZiB0aGUgR1BMIGFyZSBhcHBsaWNhYmxlIGluc3RlYWQgb2YgdGhlCisqICAgYWJvdmUuICBJZiB5b3Ugd2lzaCB0byBhbGxvdyB0aGUgdXNlIG9mIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUKKyogICBvbmx5IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR1BMIGFuZCBub3QgdG8gYWxsb3cgb3RoZXJzIHRvIHVzZQorKiAgIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgdW5kZXIgdGhlIE1QTCwgaW5kaWNhdGUgeW91ciBkZWNpc2lvbgorKiAgIGJ5IGRlbGV0aW5nIHRoZSBwcm92aXNpb25zIGFib3ZlIGFuZCByZXBsYWNlIHRoZW0gd2l0aCB0aGUgbm90aWNlCisqICAgYW5kIG90aGVyIHByb3Zpc2lvbnMgcmVxdWlyZWQgYnkgdGhlIEdQTC4gIElmIHlvdSBkbyBub3QgZGVsZXRlCisqICAgdGhlIHByb3Zpc2lvbnMgYWJvdmUsIGEgcmVjaXBpZW50IG1heSB1c2UgeW91ciB2ZXJzaW9uIG9mIHRoaXMKKyogICBmaWxlIHVuZGVyIGVpdGhlciB0aGUgTVBMIG9yIHRoZSBHUEwuCisqCisqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqCisqIElucXVpcmllcyByZWdhcmRpbmcgdGhlIGxpbnV4LXdsYW4gT3BlbiBTb3VyY2UgcHJvamVjdCBjYW4gYmUKKyogbWFkZSBkaXJlY3RseSB0bzoKKyoKKyogQWJzb2x1dGVWYWx1ZSBTeXN0ZW1zIEluYy4KKyogaW5mb0BsaW51eC13bGFuLmNvbQorKiBodHRwOi8vd3d3LmxpbnV4LXdsYW4uY29tCisqCisqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqCisqIFBvcnRpb25zIG9mIHRoZSBkZXZlbG9wbWVudCBvZiB0aGlzIHNvZnR3YXJlIHdlcmUgZnVuZGVkIGJ5CisqIEludGVyc2lsIENvcnBvcmF0aW9uIGFzIHBhcnQgb2YgUFJJU00oUikgY2hpcHNldCBwcm9kdWN0IGRldmVsb3BtZW50LgorKgorKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKi8KKworI2lmbmRlZiBfUDgwMjExTVNHX0gKKyNkZWZpbmUgX1A4MDIxMU1TR19ICisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKiBTeXN0ZW0gSW5jbHVkZXMgKi8KKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKy8qIFByb2plY3QgSW5jbHVkZXMgKi8KKworI2lmbmRlZiBfV0xBTl9DT01QQVRfSAorI2luY2x1ZGUgIndsYW5fY29tcGF0LmgiCisjZW5kaWYKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKy8qIENvbnN0YW50cyAqLworCisjZGVmaW5lIE1TR19CVUZGX0xFTgkJNDAwMAorI2RlZmluZSBXTEFOX0RFVk5BTUVMRU5fTUFYCTE2CisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKiBNYWNyb3MgKi8KKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKy8qIFR5cGVzICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyotLS0tLSBNZXNzYWdlIFN0cnVjdHVyZSBUeXBlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogUHJvdG90eXBlIG1zZyB0eXBlICovCisKK3R5cGVkZWYgc3RydWN0IHA4MDIxMW1zZworeworCVVJTlQzMgltc2djb2RlOworCVVJTlQzMgltc2dsZW47CisJVUlOVDgJZGV2bmFtZVtXTEFOX0RFVk5BTUVMRU5fTUFYXTsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gcDgwMjExbXNnX3Q7CisKK3R5cGVkZWYgc3RydWN0IHA4MDIxMW1zZ2QKK3sKKwlVSU5UMzIJbXNnY29kZTsKKwlVSU5UMzIJbXNnbGVuOworCVVJTlQ4CWRldm5hbWVbV0xBTl9ERVZOQU1FTEVOX01BWF07CisJVUlOVDgJYXJnc1swXTsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gcDgwMjExbXNnZF90OworCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworLyogRXh0ZXJuIERlY2xhcmF0aW9ucyAqLworCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKiBGdW5jdGlvbiBEZWNsYXJhdGlvbnMgKi8KKworI2VuZGlmICAvKiBfUDgwMjExTVNHX0ggKi8KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcDgwMjExbmV0ZGV2LmMgYi9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wODAyMTFuZXRkZXYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMWY4NGE4Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcDgwMjExbmV0ZGV2LmMKQEAgLTAsMCArMSwxNTAyIEBACisvKiBzcmMvcDgwMjExL3A4MDIxMWtuZXRkZXYuYworKgorKiBMaW51eCBLZXJuZWwgbmV0IGRldmljZSBpbnRlcmZhY2UKKyoKKyogQ29weXJpZ2h0IChDKSAxOTk5IEFic29sdXRlVmFsdWUgU3lzdGVtcywgSW5jLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyoKKyogbGludXgtd2xhbgorKgorKiAgIFRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgYXJlIHN1YmplY3QgdG8gdGhlIE1vemlsbGEgUHVibGljCisqICAgTGljZW5zZSBWZXJzaW9uIDEuMSAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUKKyogICBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YKKyogICB0aGUgTGljZW5zZSBhdCBodHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC8KKyoKKyogICBTb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMKKyogICBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yCisqICAgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nCisqICAgcmlnaHRzIGFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyoKKyogICBBbHRlcm5hdGl2ZWx5LCB0aGUgY29udGVudHMgb2YgdGhpcyBmaWxlIG1heSBiZSB1c2VkIHVuZGVyIHRoZQorKiAgIHRlcm1zIG9mIHRoZSBHTlUgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyICh0aGUgIkdQTCIpLCBpbiB3aGljaAorKiAgIGNhc2UgdGhlIHByb3Zpc2lvbnMgb2YgdGhlIEdQTCBhcmUgYXBwbGljYWJsZSBpbnN0ZWFkIG9mIHRoZQorKiAgIGFib3ZlLiAgSWYgeW91IHdpc2ggdG8gYWxsb3cgdGhlIHVzZSBvZiB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlCisqICAgb25seSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdQTCBhbmQgbm90IHRvIGFsbG93IG90aGVycyB0byB1c2UKKyogICB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIHVuZGVyIHRoZSBNUEwsIGluZGljYXRlIHlvdXIgZGVjaXNpb24KKyogICBieSBkZWxldGluZyB0aGUgcHJvdmlzaW9ucyBhYm92ZSBhbmQgcmVwbGFjZSB0aGVtIHdpdGggdGhlIG5vdGljZQorKiAgIGFuZCBvdGhlciBwcm92aXNpb25zIHJlcXVpcmVkIGJ5IHRoZSBHUEwuICBJZiB5b3UgZG8gbm90IGRlbGV0ZQorKiAgIHRoZSBwcm92aXNpb25zIGFib3ZlLCBhIHJlY2lwaWVudCBtYXkgdXNlIHlvdXIgdmVyc2lvbiBvZiB0aGlzCisqICAgZmlsZSB1bmRlciBlaXRoZXIgdGhlIE1QTCBvciB0aGUgR1BMLgorKgorKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKgorKiBJbnF1aXJpZXMgcmVnYXJkaW5nIHRoZSBsaW51eC13bGFuIE9wZW4gU291cmNlIHByb2plY3QgY2FuIGJlCisqIG1hZGUgZGlyZWN0bHkgdG86CisqCisqIEFic29sdXRlVmFsdWUgU3lzdGVtcyBJbmMuCisqIGluZm9AbGludXgtd2xhbi5jb20KKyogaHR0cDovL3d3dy5saW51eC13bGFuLmNvbQorKgorKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKgorKiBQb3J0aW9ucyBvZiB0aGUgZGV2ZWxvcG1lbnQgb2YgdGhpcyBzb2Z0d2FyZSB3ZXJlIGZ1bmRlZCBieQorKiBJbnRlcnNpbCBDb3Jwb3JhdGlvbiBhcyBwYXJ0IG9mIFBSSVNNKFIpIGNoaXBzZXQgcHJvZHVjdCBkZXZlbG9wbWVudC4KKyoKKyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyoKKyogVGhlIGZ1bmN0aW9ucyByZXF1aXJlZCBmb3IgYSBMaW51eCBuZXR3b3JrIGRldmljZSBhcmUgZGVmaW5lZCBoZXJlLgorKgorKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKi8KKworCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworLyogU3lzdGVtIEluY2x1ZGVzICovCisKKworI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2ttb2QuaD4KKyNpbmNsdWRlIDxsaW51eC9pZl9hcnAuaD4KKyNpbmNsdWRlIDxsaW51eC93aXJlbGVzcy5oPgorI2luY2x1ZGUgPGxpbnV4L3NvY2tpb3MuaD4KKyNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgorCisjaW5jbHVkZSA8YXNtL2JpdG9wcy5oPgorI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CisjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgorCisjaWZkZWYgU0lPQ0VUSFRPT0wKKyNpbmNsdWRlIDxsaW51eC9ldGh0b29sLmg+CisjZW5kaWYKKworI2lmIFdJUkVMRVNTX0VYVCA+IDEyCisjaW5jbHVkZSA8bmV0L2l3X2hhbmRsZXIuaD4KKyNlbmRpZgorI2luY2x1ZGUgPG5ldC9uZXRfbmFtZXNwYWNlLmg+CisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKiBQcm9qZWN0IEluY2x1ZGVzICovCisKKyNpbmNsdWRlICJ2ZXJzaW9uLmgiCisjaW5jbHVkZSAid2xhbl9jb21wYXQuaCIKKyNpbmNsdWRlICJwODAyMTF0eXBlcy5oIgorI2luY2x1ZGUgInA4MDIxMWhkci5oIgorI2luY2x1ZGUgInA4MDIxMWNvbnYuaCIKKyNpbmNsdWRlICJwODAyMTFtZ210LmgiCisjaW5jbHVkZSAicDgwMjExbXNnLmgiCisjaW5jbHVkZSAicDgwMjExbmV0ZGV2LmgiCisjaW5jbHVkZSAicDgwMjExaW9jdGwuaCIKKyNpbmNsdWRlICJwODAyMTFyZXEuaCIKKyNpbmNsdWRlICJwODAyMTFtZXRhc3RydWN0LmgiCisjaW5jbHVkZSAicDgwMjExbWV0YWRlZi5oIgorCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworLyogTG9jYWwgQ29uc3RhbnRzICovCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKiBMb2NhbCBNYWNyb3MgKi8KKworCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworLyogTG9jYWwgVHlwZXMgKi8KKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKy8qIExvY2FsIFN0YXRpYyBEZWZpbml0aW9ucyAqLworCisjZGVmaW5lIF9fTk9fVkVSU0lPTl9fCQkvKiBwcmV2ZW50IHRoZSBzdGF0aWMgZGVmaW5pdGlvbiAqLworCisjaWZkZWYgQ09ORklHX1BST0NfRlMKK3N0YXRpYyBzdHJ1Y3QgcHJvY19kaXJfZW50cnkJKnByb2NfcDgwMjExOworI2VuZGlmCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKiBMb2NhbCBGdW5jdGlvbiBEZWNsYXJhdGlvbnMgKi8KKworLyogU3VwcG9ydCBmdW5jdGlvbnMgKi8KK3N0YXRpYyB2b2lkIHA4MDIxMW5ldGRldl9yeF9iaCh1bnNpZ25lZCBsb25nIGFyZyk7CisKKy8qIG5ldGRldmljZSBtZXRob2QgZnVuY3Rpb25zICovCitzdGF0aWMgaW50IHA4MDIxMWtuZXRkZXZfaW5pdCggbmV0ZGV2aWNlX3QgKm5ldGRldik7CitzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMqIHA4MDIxMWtuZXRkZXZfZ2V0X3N0YXRzKG5ldGRldmljZV90ICpuZXRkZXYpOworc3RhdGljIGludCBwODAyMTFrbmV0ZGV2X29wZW4oIG5ldGRldmljZV90ICpuZXRkZXYpOworc3RhdGljIGludCBwODAyMTFrbmV0ZGV2X3N0b3AoIG5ldGRldmljZV90ICpuZXRkZXYgKTsKK3N0YXRpYyBpbnQgcDgwMjExa25ldGRldl9oYXJkX3N0YXJ0X3htaXQoIHN0cnVjdCBza19idWZmICpza2IsIG5ldGRldmljZV90ICpuZXRkZXYpOworc3RhdGljIHZvaWQgcDgwMjExa25ldGRldl9zZXRfbXVsdGljYXN0X2xpc3QobmV0ZGV2aWNlX3QgKmRldik7CitzdGF0aWMgaW50IHA4MDIxMWtuZXRkZXZfZG9faW9jdGwobmV0ZGV2aWNlX3QgKmRldiwgc3RydWN0IGlmcmVxICppZnIsIGludCBjbWQpOworc3RhdGljIGludCBwODAyMTFrbmV0ZGV2X3NldF9tYWNfYWRkcmVzcyhuZXRkZXZpY2VfdCAqZGV2LCB2b2lkICphZGRyKTsKK3N0YXRpYyB2b2lkIHA4MDIxMWtuZXRkZXZfdHhfdGltZW91dChuZXRkZXZpY2VfdCAqbmV0ZGV2KTsKK3N0YXRpYyBpbnQgcDgwMjExX3J4X3R5cGVkcm9wKCB3bGFuZGV2aWNlX3QgKndsYW5kZXYsIFVJTlQxNiBmYyk7CisKKyNpZmRlZiBDT05GSUdfUFJPQ19GUworc3RhdGljIGludAorcDgwMjExbmV0ZGV2X3Byb2NfcmVhZCgKKwljaGFyCSpwYWdlLAorCWNoYXIJKipzdGFydCwKKwlvZmZfdAlvZmZzZXQsCisJaW50CWNvdW50LAorCWludAkqZW9mLAorCXZvaWQJKmRhdGEpOworI2VuZGlmCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKiBGdW5jdGlvbiBEZWZpbml0aW9ucyAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogcDgwMjExa25ldGRldl9zdGFydHVwCisqCisqIEluaXRpYWxpemUgdGhlIHdsYW5kZXZpY2UvbmV0ZGV2aWNlIHBhcnQgb2YgODAyLjExIHNlcnZpY2VzIGF0CisqIGxvYWQgdGltZS4KKyoKKyogQXJndW1lbnRzOgorKglub25lCisqCisqIFJldHVybnM6CisqCW5vdGhpbmcKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwordm9pZCBwODAyMTFuZXRkZXZfc3RhcnR1cCh2b2lkKQoreworCURCRkVOVEVSOworCisjaWZkZWYgQ09ORklHX1BST0NfRlMKKwlpZiAoaW5pdF9uZXQucHJvY19uZXQgIT0gTlVMTCkgeworCQlwcm9jX3A4MDIxMSA9IGNyZWF0ZV9wcm9jX2VudHJ5KAorCQkJCSJwODAyMTEiLAorCQkJCShTX0lGRElSfFNfSVJVR098U19JWFVHTyksCisJCQkJaW5pdF9uZXQucHJvY19uZXQpOworCX0KKyNlbmRpZgorCURCRkVYSVQ7CisJcmV0dXJuOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogcDgwMjExa25ldGRldl9zaHV0ZG93bgorKgorKiBTaHV0ZG93biB0aGUgd2xhbmRldmljZS9uZXRkZXZpY2UgcGFydCBvZiA4MDIuMTEgc2VydmljZXMgYXQKKyogdW5sb2FkIHRpbWUuCisqCisqIEFyZ3VtZW50czoKKyoJbm9uZQorKgorKiBSZXR1cm5zOgorKglub3RoaW5nCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3ZvaWQKK3A4MDIxMW5ldGRldl9zaHV0ZG93bih2b2lkKQoreworCURCRkVOVEVSOworI2lmZGVmIENPTkZJR19QUk9DX0ZTCisJaWYgKHByb2NfcDgwMjExICE9IE5VTEwpIHsKKwkJcmVtb3ZlX3Byb2NfZW50cnkoInA4MDIxMSIsIGluaXRfbmV0LnByb2NfbmV0KTsKKwl9CisjZW5kaWYKKwlEQkZFWElUOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogcDgwMjExa25ldGRldl9pbml0CisqCisqIEluaXQgbWV0aG9kIGZvciBhIExpbnV4IG5ldGRldmljZS4gIENhbGxlZCBpbiByZXNwb25zZSB0bworKiByZWdpc3Rlcl9uZXRkZXYuCisqCisqIEFyZ3VtZW50czoKKyoJbm9uZQorKgorKiBSZXR1cm5zOgorKglub3RoaW5nCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyBpbnQgcDgwMjExa25ldGRldl9pbml0KCBuZXRkZXZpY2VfdCAqbmV0ZGV2KQoreworCURCRkVOVEVSOworCS8qIENhbGxlZCBpbiByZXNwb25zZSB0byByZWdpc3Rlcl9uZXRkZXYgKi8KKwkvKiBUaGlzIGlzIHVzdWFsbHkgdGhlIHByb2JlIGZ1bmN0aW9uLCBidXQgdGhlIHByb2JlIGhhcyAqLworCS8qIGFscmVhZHkgYmVlbiBkb25lIGJ5IHRoZSBNU0QgYW5kIHRoZSBjcmVhdGVfa2RldiAqLworCS8qIGZ1bmN0aW9uLiAgQWxsIHdlIGRvIGhlcmUgaXMgcmV0dXJuIHN1Y2Nlc3MgKi8KKwlEQkZFWElUOworCXJldHVybiAwOworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBwODAyMTFrbmV0ZGV2X2dldF9zdGF0cworKgorKiBTdGF0aXN0aWNzIHJldHJpZXZhbCBmb3IgbGludXggbmV0ZGV2aWNlcy4gIEhlcmUgd2UncmUgcmVwb3J0aW5nCisqIHRoZSBMaW51eCBpL2YgbGV2ZWwgc3RhdGlzdGljcy4gIEhlbmNlLCBmb3IgdGhlIHByaW1hcnkgbnVtYmVycywKKyogd2UgZG9uJ3Qgd2FudCB0byByZXBvcnQgdGhlIG51bWJlcnMgZnJvbSB0aGUgTUlCLiAgRXZlbnR1YWxseSwKKyogaXQgbWlnaHQgYmUgdXNlZnVsIHRvIGNvbGxlY3Qgc29tZSBvZiB0aGUgZXJyb3IgY291bnRlcnMgdGhvdWdoLgorKgorKiBBcmd1bWVudHM6CisqCW5ldGRldgkJTGludXggbmV0ZGV2aWNlCisqCisqIFJldHVybnM6CisqCXRoZSBhZGRyZXNzIG9mIHRoZSBzdGF0aXN0aWNzIHN0cnVjdHVyZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMqCitwODAyMTFrbmV0ZGV2X2dldF9zdGF0cyhuZXRkZXZpY2VfdCAqbmV0ZGV2KQoreworCXdsYW5kZXZpY2VfdAkqd2xhbmRldiA9ICh3bGFuZGV2aWNlX3QqKW5ldGRldi0+cHJpdjsKKwlEQkZFTlRFUjsKKworCS8qIFRPRE86IHJldmlldyB0aGUgTUlCIHN0YXRzIGZvciBpdGVtcyB0aGF0IGNvcnJlc3BvbmQgdG8KKwkJbGludXggc3RhdHMgKi8KKworCURCRkVYSVQ7CisJcmV0dXJuICYod2xhbmRldi0+bGludXhfc3RhdHMpOworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBwODAyMTFrbmV0ZGV2X29wZW4KKyoKKyogTGludXggbmV0ZGV2aWNlIG9wZW4gbWV0aG9kLiAgRm9sbG93aW5nIGEgc3VjY2Vzc2Z1bCBjYWxsIGhlcmUsCisqIHRoZSBkZXZpY2UgaXMgc3VwcG9zZWQgdG8gYmUgcmVhZHkgZm9yIHR4IGFuZCByeC4gIEluIG91cgorKiBzaXR1YXRpb24gdGhhdCBtYXkgbm90IGJlIGVudGlyZWx5IHRydWUgZHVlIHRvIHRoZSBzdGF0ZSBvZiB0aGUKKyogTUFDIGJlbG93LgorKgorKiBBcmd1bWVudHM6CisqCW5ldGRldgkJTGludXggbmV0d29yayBkZXZpY2Ugc3RydWN0dXJlCisqCisqIFJldHVybnM6CisqCXplcm8gb24gc3VjY2Vzcywgbm9uLXplcm8gb3RoZXJ3aXNlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyBpbnQgcDgwMjExa25ldGRldl9vcGVuKCBuZXRkZXZpY2VfdCAqbmV0ZGV2ICkKK3sKKwlpbnQgCQlyZXN1bHQgPSAwOyAvKiBzdWNjZXNzICovCisJd2xhbmRldmljZV90CSp3bGFuZGV2ID0gKHdsYW5kZXZpY2VfdCopKG5ldGRldi0+cHJpdik7CisKKwlEQkZFTlRFUjsKKworCS8qIENoZWNrIHRvIG1ha2Ugc3VyZSB0aGUgTVNEIGlzIHJ1bm5pbmcgKi8KKwlpZiAoIHdsYW5kZXYtPm1zZHN0YXRlICE9IFdMQU5fTVNEX1JVTk5JTkcgKSB7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCS8qIFRlbGwgdGhlIE1TRCB0byBvcGVuICovCisJaWYgKCB3bGFuZGV2LT5vcGVuICE9IE5VTEwpIHsKKwkJcmVzdWx0ID0gd2xhbmRldi0+b3Blbih3bGFuZGV2KTsKKwkJaWYgKCByZXN1bHQgPT0gMCApIHsKKyNpZiAoIExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDIsMyw0MykgKQorCQkJbmV0ZGV2LT5pbnRlcnJ1cHQgPSAwOworI2VuZGlmCisJCQlwODAyMTFuZXRkZXZfc3RhcnRfcXVldWUod2xhbmRldik7CisJCQl3bGFuZGV2LT5zdGF0ZSA9IFdMQU5fREVWSUNFX09QRU47CisJCX0KKwl9IGVsc2UgeworCQlyZXN1bHQgPSAtRUFHQUlOOworCX0KKworCURCRkVYSVQ7CisJcmV0dXJuIHJlc3VsdDsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogcDgwMjExa25ldGRldl9zdG9wCisqCisqIExpbnV4IG5ldGRldmljZSBzdG9wIChjbG9zZSkgbWV0aG9kLiAgRm9sbG93aW5nIHRoaXMgY2FsbCwKKyogbm8gZnJhbWVzIHNob3VsZCBnbyB1cCBvciBkb3duIHRocm91Z2ggdGhpcyBpbnRlcmZhY2UuCisqCisqIEFyZ3VtZW50czoKKyoJbmV0ZGV2CQlMaW51eCBuZXR3b3JrIGRldmljZSBzdHJ1Y3R1cmUKKyoKKyogUmV0dXJuczoKKyoJemVybyBvbiBzdWNjZXNzLCBub24temVybyBvdGhlcndpc2UKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIGludCBwODAyMTFrbmV0ZGV2X3N0b3AoIG5ldGRldmljZV90ICpuZXRkZXYgKQoreworCWludAkJcmVzdWx0ID0gMDsKKwl3bGFuZGV2aWNlX3QJKndsYW5kZXYgPSAod2xhbmRldmljZV90KikobmV0ZGV2LT5wcml2KTsKKworCURCRkVOVEVSOworCisJaWYgKCB3bGFuZGV2LT5jbG9zZSAhPSBOVUxMICkgeworCQlyZXN1bHQgPSB3bGFuZGV2LT5jbG9zZSh3bGFuZGV2KTsKKwl9CisKKwlwODAyMTFuZXRkZXZfc3RvcF9xdWV1ZSh3bGFuZGV2KTsKKwl3bGFuZGV2LT5zdGF0ZSA9IFdMQU5fREVWSUNFX0NMT1NFRDsKKworCURCRkVYSVQ7CisJcmV0dXJuIHJlc3VsdDsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIHA4MDIxMW5ldGRldl9yeAorKgorKiBGcmFtZSByZWNlaXZlIGZ1bmN0aW9uIGNhbGxlZCBieSB0aGUgbWFjIHNwZWNpZmljIGRyaXZlci4KKyoKKyogQXJndW1lbnRzOgorKgl3bGFuZGV2CQlXTEFOIG5ldHdvcmsgZGV2aWNlIHN0cnVjdHVyZQorKglza2IJCXNrYnVmZiBjb250YWluaW5nIGEgZnVsbCA4MDIuMTEgZnJhbWUuCisqIFJldHVybnM6CisqCW5vdGhpbmcKKyogU2lkZSBlZmZlY3RzOgorKgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCit2b2lkCitwODAyMTFuZXRkZXZfcngod2xhbmRldmljZV90ICp3bGFuZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiICkKK3sKKwlEQkZFTlRFUjsKKworCS8qIEVucXVldWUgZm9yIHBvc3QtaXJxIHByb2Nlc3NpbmcgKi8KKwlza2JfcXVldWVfdGFpbCgmd2xhbmRldi0+bnNkX3J4cSwgc2tiKTsKKworCXRhc2tsZXRfc2NoZWR1bGUoJndsYW5kZXYtPnJ4X2JoKTsKKworICAgICAgICBEQkZFWElUOworCXJldHVybjsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIHA4MDIxMW5ldGRldl9yeF9iaAorKgorKiBEZWZlcnJlZCBwcm9jZXNzaW5nIG9mIGFsbCByZWNlaXZlZCBmcmFtZXMuCisqCisqIEFyZ3VtZW50czoKKyoJd2xhbmRldgkJV0xBTiBuZXR3b3JrIGRldmljZSBzdHJ1Y3R1cmUKKyoJc2tiCQlza2J1ZmYgY29udGFpbmluZyBhIGZ1bGwgODAyLjExIGZyYW1lLgorKiBSZXR1cm5zOgorKglub3RoaW5nCisqIFNpZGUgZWZmZWN0czoKKyoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIHZvaWQgcDgwMjExbmV0ZGV2X3J4X2JoKHVuc2lnbmVkIGxvbmcgYXJnKQoreworCXdsYW5kZXZpY2VfdCAqd2xhbmRldiA9ICh3bGFuZGV2aWNlX3QgKikgYXJnOworCXN0cnVjdCBza19idWZmICpza2IgPSBOVUxMOworCW5ldGRldmljZV90ICAgICAqZGV2ID0gd2xhbmRldi0+bmV0ZGV2OworCXA4MDIxMV9oZHJfYTNfdCAqaGRyOworCVVJTlQxNiBmYzsKKworICAgICAgICBEQkZFTlRFUjsKKworCS8qIExldCdzIGVtcHR5IG91ciBvdXIgcXVldWUgKi8KKwl3aGlsZSAoIChza2IgPSBza2JfZGVxdWV1ZSgmd2xhbmRldi0+bnNkX3J4cSkpICkgeworCQlpZiAod2xhbmRldi0+c3RhdGUgPT0gV0xBTl9ERVZJQ0VfT1BFTikgeworCisJCQlpZiAoZGV2LT50eXBlICE9IEFSUEhSRF9FVEhFUikgeworCQkJCS8qIFJBVyBmcmFtZTsgd2Ugc2hvdWxkbid0IGNvbnZlcnQgaXQgKi8KKwkJCQkvLyBYWFggQXBwZW5kIHRoZSBQcmlzbSBIZWFkZXIgaGVyZSBpbnN0ZWFkLgorCisJCQkJLyogc2V0IHVwIHZhcmlvdXMgZGF0YSBmaWVsZHMgKi8KKwkJCQlza2ItPmRldiA9IGRldjsKKwkJCQlza2JfcmVzZXRfbWFjX2hlYWRlcihza2IpOworCQkJCXNrYi0+aXBfc3VtbWVkID0gQ0hFQ0tTVU1fTk9ORTsKKwkJCQlza2ItPnBrdF90eXBlID0gUEFDS0VUX09USEVSSE9TVDsKKwkJCQlza2ItPnByb3RvY29sID0gaHRvbnMoRVRIX1BfODAyMTFfUkFXKTsKKwkJCQlkZXYtPmxhc3RfcnggPSBqaWZmaWVzOworCisJCQkJd2xhbmRldi0+bGludXhfc3RhdHMucnhfcGFja2V0cysrOworCQkJCXdsYW5kZXYtPmxpbnV4X3N0YXRzLnJ4X2J5dGVzICs9IHNrYi0+bGVuOworCQkJCW5ldGlmX3J4X25pKHNrYik7CisJCQkJY29udGludWU7CisJCQl9IGVsc2UgeworCQkJCWhkciA9IChwODAyMTFfaGRyX2EzX3QgKilza2ItPmRhdGE7CisJCQkJZmMgPSBpZWVlMmhvc3QxNihoZHItPmZjKTsKKwkJCQlpZiAocDgwMjExX3J4X3R5cGVkcm9wKHdsYW5kZXYsIGZjKSkgeworCQkJCQlkZXZfa2ZyZWVfc2tiKHNrYik7CisJCQkJCWNvbnRpbnVlOworCQkJCX0KKworCQkJCS8qIHBlcmZvcm0gbWNhc3QgZmlsdGVyaW5nICovCisJCQkJaWYgKHdsYW5kZXYtPm5ldGRldi0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkpIHsKKwkJCQkJLyogYWxsb3cgbXkgbG9jYWwgYWRkcmVzcyB0aHJvdWdoICovCisJCQkJCWlmIChtZW1jbXAoaGRyLT5hMSwgd2xhbmRldi0+bmV0ZGV2LT5kZXZfYWRkciwgV0xBTl9BRERSX0xFTikgIT0gMCkgeworCQkJCQkJLyogYnV0IHJlamVjdCBhbnl0aGluZyBlbHNlIHRoYXQgaXNuJ3QgbXVsdGljYXN0ICovCisJCQkJCQlpZiAoIShoZHItPmExWzBdICYgMHgwMSkpIHsKKwkJCQkJCQlkZXZfa2ZyZWVfc2tiKHNrYik7CisJCQkJCQkJY29udGludWU7CisJCQkJCQl9CisJCQkJCX0KKwkJCQl9CisKKwkJCQlpZiAoIHNrYl9wODAyMTFfdG9fZXRoZXIod2xhbmRldiwgd2xhbmRldi0+ZXRoY29udiwgc2tiKSA9PSAwICkgeworCQkJCQlza2ItPmRldi0+bGFzdF9yeCA9IGppZmZpZXM7CisJCQkJCXdsYW5kZXYtPmxpbnV4X3N0YXRzLnJ4X3BhY2tldHMrKzsKKwkJCQkJd2xhbmRldi0+bGludXhfc3RhdHMucnhfYnl0ZXMgKz0gc2tiLT5sZW47CisJCQkJCW5ldGlmX3J4X25pKHNrYik7CisJCQkJCWNvbnRpbnVlOworCQkJCX0KKwkJCQlXTEFOX0xPR19ERUJVRygxLCAicDgwMjExX3RvX2V0aGVyIGZhaWxlZC5cbiIpOworCQkJfQorCQl9CisJCWRldl9rZnJlZV9za2Ioc2tiKTsKKwl9CisKKyAgICAgICAgREJGRVhJVDsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogcDgwMjExa25ldGRldl9oYXJkX3N0YXJ0X3htaXQKKyoKKyogTGludXggbmV0ZGV2aWNlIG1ldGhvZCBmb3IgdHJhbnNtaXR0aW5nIGEgZnJhbWUuCisqCisqIEFyZ3VtZW50czoKKyoJc2tiCUxpbnV4IHNrX2J1ZmYgY29udGFpbmluZyB0aGUgZnJhbWUuCisqCW5ldGRldglMaW51eCBuZXRkZXZpY2UuCisqCisqIFNpZGUgZWZmZWN0czoKKyoJSWYgdGhlIGxvd2VyIGxheWVycyByZXBvcnQgdGhhdCBidWZmZXJzIGFyZSBmdWxsLiBuZXRkZXYtPnRidXN5CisqCXdpbGwgYmUgc2V0IHRvIHByZXZlbnQgaGlnaGVyIGxheWVycyBmcm9tIHNlbmRpbmcgbW9yZSB0cmFmZmljLgorKgorKglOb3RlOiBJZiB0aGlzIGZ1bmN0aW9uIHJldHVybnMgbm9uLXplcm8sIGhpZ2hlciBsYXllcnMgcmV0YWluCisqCSAgICAgIG93bmVyc2hpcCBvZiB0aGUgc2tiLgorKgorKiBSZXR1cm5zOgorKgl6ZXJvIG9uIHN1Y2Nlc3MsIG5vbi16ZXJvIG9uIGZhaWx1cmUuCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyBpbnQgcDgwMjExa25ldGRldl9oYXJkX3N0YXJ0X3htaXQoIHN0cnVjdCBza19idWZmICpza2IsIG5ldGRldmljZV90ICpuZXRkZXYpCit7CisJaW50CQlyZXN1bHQgPSAwOworCWludAkJdHhyZXN1bHQgPSAtMTsKKwl3bGFuZGV2aWNlX3QJKndsYW5kZXYgPSAod2xhbmRldmljZV90KiluZXRkZXYtPnByaXY7CisJcDgwMjExX2hkcl90ICAgIHA4MDIxMV9oZHI7CisJcDgwMjExX21ldGF3ZXBfdCBwODAyMTFfd2VwOworCisJREJGRU5URVI7CisKKwlpZiAoc2tiID09IE5VTEwpIHsKKwkJcmV0dXJuIDA7CisJfQorCisgICAgICAgIGlmICh3bGFuZGV2LT5zdGF0ZSAhPSBXTEFOX0RFVklDRV9PUEVOKSB7CisJCXJlc3VsdCA9IDE7CisJCWdvdG8gZmFpbGVkOworCX0KKworCW1lbXNldCgmcDgwMjExX2hkciwgMCwgc2l6ZW9mKHA4MDIxMV9oZHJfdCkpOworCW1lbXNldCgmcDgwMjExX3dlcCwgMCwgc2l6ZW9mKHA4MDIxMV9tZXRhd2VwX3QpKTsKKworI2lmIChMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigyLDMsMzgpICkKKwlpZiAoIHRlc3RfYW5kX3NldF9iaXQoMCwgKHZvaWQqKSYobmV0ZGV2LT50YnVzeSkpICE9IDAgKSB7CisJCS8qIFdlJ3ZlIGJlZW4gY2FsbGVkIHcvIHRidXN5IHNldCwgaGFzIHRoZSB0eCAqLworCQkvKiBwYXRoIHN0YWxsZWQ/ICAgKi8KKwkJV0xBTl9MT0dfREVCVUcoMSwgImNhbGxlZCB3aGVuIHRidXN5IHNldFxuIik7CisJCXJlc3VsdCA9IDE7CisJCWdvdG8gZmFpbGVkOworCX0KKyNlbHNlCisJaWYgKCBuZXRpZl9xdWV1ZV9zdG9wcGVkKG5ldGRldikgKSB7CisJCVdMQU5fTE9HX0RFQlVHKDEsICJjYWxsZWQgd2hlbiBxdWV1ZSBzdG9wcGVkLlxuIik7CisJCXJlc3VsdCA9IDE7CisJCWdvdG8gZmFpbGVkOworCX0KKworCW5ldGlmX3N0b3BfcXVldWUobmV0ZGV2KTsKKworCS8qIE5vIHRpbWVvdXQgaGFuZGxpbmcgaGVyZSwgMi4zLjM4KyBrZXJuZWxzIGNhbGwgdGhlCisJICogdGltZW91dCBmdW5jdGlvbiBkaXJlY3RseS4KKwkgKiBUT0RPOiBBZGQgdGltZW91dCBoYW5kbGluZy4KKwkqLworI2VuZGlmCisKKwkvKiBDaGVjayB0byBzZWUgdGhhdCBhIHZhbGlkIG1vZGUgaXMgc2V0ICovCisJc3dpdGNoKCB3bGFuZGV2LT5tYWNtb2RlICkgeworCWNhc2UgV0xBTl9NQUNNT0RFX0lCU1NfU1RBOgorCWNhc2UgV0xBTl9NQUNNT0RFX0VTU19TVEE6CisJY2FzZSBXTEFOX01BQ01PREVfRVNTX0FQOgorCQlicmVhazsKKwlkZWZhdWx0OgorCQkvKiBNb2RlIGlzbid0IHNldCB5ZXQsIGp1c3QgZHJvcCB0aGUgZnJhbWUKKwkJICogYW5kIHJldHVybiBzdWNjZXNzIC4KKwkJICogVE9ETzogd2UgbmVlZCBhIHNhbmVyIHdheSB0byBoYW5kbGUgdGhpcworCQkgKi8KKwkJaWYoc2tiLT5wcm90b2NvbCAhPSBFVEhfUF84MDIxMV9SQVcpIHsKKwkJCXA4MDIxMW5ldGRldl9zdGFydF9xdWV1ZSh3bGFuZGV2KTsKKwkJCVdMQU5fTE9HX05PVElDRSgKKwkJCQkiVHggYXR0ZW1wdCBwcmlvciB0byBhc3NvY2lhdGlvbiwgZnJhbWUgZHJvcHBlZC5cbiIpOworCQkJd2xhbmRldi0+bGludXhfc3RhdHMudHhfZHJvcHBlZCsrOworCQkJcmVzdWx0ID0gMDsKKwkJCWdvdG8gZmFpbGVkOworCQl9CisJCWJyZWFrOworCX0KKworCS8qIENoZWNrIGZvciByYXcgdHJhbnNtaXRzICovCisJaWYoc2tiLT5wcm90b2NvbCA9PSBFVEhfUF84MDIxMV9SQVcpIHsKKwkJaWYgKCFjYXBhYmxlKENBUF9ORVRfQURNSU4pKSB7CisJCQlyZXN1bHQgPSAxOworCQkJZ290byBmYWlsZWQ7CisJCX0KKwkJLyogbW92ZSB0aGUgaGVhZGVyIG92ZXIgKi8KKwkJbWVtY3B5KCZwODAyMTFfaGRyLCBza2ItPmRhdGEsIHNpemVvZihwODAyMTFfaGRyX3QpKTsKKwkJc2tiX3B1bGwoc2tiLCBzaXplb2YocDgwMjExX2hkcl90KSk7CisJfSBlbHNlIHsKKwkJaWYgKCBza2JfZXRoZXJfdG9fcDgwMjExKHdsYW5kZXYsIHdsYW5kZXYtPmV0aGNvbnYsIHNrYiwgJnA4MDIxMV9oZHIsICZwODAyMTFfd2VwKSAhPSAwICkgeworCQkJLyogY29udmVydCBmYWlsZWQgKi8KKwkJCVdMQU5fTE9HX0RFQlVHKDEsICJldGhlcl90b184MDIxMSglZCkgZmFpbGVkLlxuIiwKKwkJCQkJd2xhbmRldi0+ZXRoY29udik7CisJCQlyZXN1bHQgPSAxOworCQkJZ290byBmYWlsZWQ7CisJCX0KKwl9CisJaWYgKCB3bGFuZGV2LT50eGZyYW1lID09IE5VTEwgKSB7CisJCXJlc3VsdCA9IDE7CisJCWdvdG8gZmFpbGVkOworCX0KKworCW5ldGRldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOworCisJd2xhbmRldi0+bGludXhfc3RhdHMudHhfcGFja2V0cysrOworCS8qIGNvdW50IG9ubHkgdGhlIHBhY2tldCBwYXlsb2FkICovCisJd2xhbmRldi0+bGludXhfc3RhdHMudHhfYnl0ZXMgKz0gc2tiLT5sZW47CisKKwl0eHJlc3VsdCA9IHdsYW5kZXYtPnR4ZnJhbWUod2xhbmRldiwgc2tiLCAmcDgwMjExX2hkciwgJnA4MDIxMV93ZXApOworCisJaWYgKCB0eHJlc3VsdCA9PSAwKSB7CisJCS8qIHN1Y2Nlc3MgYW5kIG1vcmUgYnVmICovCisJCS8qIGF2YWlsLCByZTogaHdfdHhkYXRhICovCisJCXA4MDIxMW5ldGRldl93YWtlX3F1ZXVlKHdsYW5kZXYpOworCQlyZXN1bHQgPSAwOworCX0gZWxzZSBpZiAoIHR4cmVzdWx0ID09IDEgKSB7CisJCS8qIHN1Y2Nlc3MsIG5vIG1vcmUgYXZhaWwgKi8KKwkJV0xBTl9MT0dfREVCVUcoMywgInR4ZnJhbWUgc3VjY2Vzcywgbm8gbW9yZSBidWZzXG4iKTsKKwkJLyogbmV0ZGV2LT50YnVzeSA9IDE7ICBkb24ndCBzZXQgaGVyZSwgaXJxaGRsciAqLworCQkvKiAgIG1heSBoYXZlIGFscmVhZHkgY2xlYXJlZCBpdCAqLworCQlyZXN1bHQgPSAwOworCX0gZWxzZSBpZiAoIHR4cmVzdWx0ID09IDIgKSB7CisJCS8qIGFsbG9jIGZhaWx1cmUsIGRyb3AgZnJhbWUgKi8KKwkJV0xBTl9MT0dfREVCVUcoMywgInR4ZnJhbWUgcmV0dXJuZWQgYWxsb2NfZmFpbFxuIik7CisJCXJlc3VsdCA9IDE7CisJfSBlbHNlIHsKKwkJLyogYnVmZmVyIGZ1bGwgb3IgcXVldWUgYnVzeSwgZHJvcCBmcmFtZS4gKi8KKwkJV0xBTl9MT0dfREVCVUcoMywgInR4ZnJhbWUgcmV0dXJuZWQgZnVsbCBvciBidXN5XG4iKTsKKwkJcmVzdWx0ID0gMTsKKwl9CisKKyBmYWlsZWQ6CisJLyogRnJlZSB1cCB0aGUgV0VQIGJ1ZmZlciBpZiBpdCdzIG5vdCB0aGUgc2FtZSBhcyB0aGUgc2tiICovCisJaWYgKChwODAyMTFfd2VwLmRhdGEpICYmIChwODAyMTFfd2VwLmRhdGEgIT0gc2tiLT5kYXRhKSkKKwkJa2ZyZWUocDgwMjExX3dlcC5kYXRhKTsKKworCS8qIHdlIGFsd2F5cyBmcmVlIHRoZSBza2IgaGVyZSwgbmV2ZXIgaW4gYSBsb3dlciBsZXZlbC4gKi8KKwlpZiAoIXJlc3VsdCkKKwkJZGV2X2tmcmVlX3NrYihza2IpOworCisJREJGRVhJVDsKKwlyZXR1cm4gcmVzdWx0OworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBwODAyMTFrbmV0ZGV2X3NldF9tdWx0aWNhc3RfbGlzdAorKgorKiBDYWxsZWQgZnJvbSBoaWdoZXIgbGF2ZXJzIHdoZW5ldmVyIHRoZXJlJ3MgYSBuZWVkIHRvIHNldC9jbGVhcgorKiBwcm9taXNjdW91cyBtb2RlIG9yIHJld3JpdGUgdGhlIG11bHRpY2FzdCBsaXN0LgorKgorKiBBcmd1bWVudHM6CisqCW5vbmUKKyoKKyogUmV0dXJuczoKKyoJbm90aGluZworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgdm9pZCBwODAyMTFrbmV0ZGV2X3NldF9tdWx0aWNhc3RfbGlzdChuZXRkZXZpY2VfdCAqZGV2KQoreworCXdsYW5kZXZpY2VfdAkqd2xhbmRldiA9ICh3bGFuZGV2aWNlX3QqKWRldi0+cHJpdjsKKworCURCRkVOVEVSOworCisJLyogVE9ETzogIHJlYWwgbXVsdGljYXN0IHN1cHBvcnQgYXMgd2VsbCAqLworCisJaWYgKHdsYW5kZXYtPnNldF9tdWx0aWNhc3RfbGlzdCkKKwkJd2xhbmRldi0+c2V0X211bHRpY2FzdF9saXN0KHdsYW5kZXYsIGRldik7CisKKwlEQkZFWElUOworfQorCisjaWZkZWYgU0lPQ0VUSFRPT0wKKworc3RhdGljIGludCBwODAyMTFuZXRkZXZfZXRodG9vbCh3bGFuZGV2aWNlX3QgKndsYW5kZXYsIHZvaWQgX191c2VyICp1c2VyYWRkcikKK3sKKwlVSU5UMzIgZXRoY21kOworCXN0cnVjdCBldGh0b29sX2RydmluZm8gaW5mbzsKKwlzdHJ1Y3QgZXRodG9vbF92YWx1ZSBlZGF0YTsKKworCW1lbXNldCgmaW5mbywgMCwgc2l6ZW9mKGluZm8pKTsKKwltZW1zZXQoJmVkYXRhLCAwLCBzaXplb2YoZWRhdGEpKTsKKworCWlmIChjb3B5X2Zyb21fdXNlcigmZXRoY21kLCB1c2VyYWRkciwgc2l6ZW9mKGV0aGNtZCkpKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCXN3aXRjaCAoZXRoY21kKSB7CisJY2FzZSBFVEhUT09MX0dEUlZJTkZPOgorCQlpbmZvLmNtZCA9IGV0aGNtZDsKKwkJc25wcmludGYoaW5mby5kcml2ZXIsIHNpemVvZihpbmZvLmRyaXZlciksICJwODAyMTFfJXMiLAorCQkJIHdsYW5kZXYtPm5zZG5hbWUpOworCQlzbnByaW50ZihpbmZvLnZlcnNpb24sIHNpemVvZihpbmZvLnZlcnNpb24pLCAiJXMiLAorCQkJIFdMQU5fUkVMRUFTRSk7CisKKwkJLy8gaW5mby5md192ZXJzaW9uCisJCS8vIGluZm8uYnVzX2luZm8KKworCQlpZiAoY29weV90b191c2VyKHVzZXJhZGRyLCAmaW5mbywgc2l6ZW9mKGluZm8pKSkKKwkJCXJldHVybiAtRUZBVUxUOworCQlyZXR1cm4gMDsKKyNpZmRlZiBFVEhUT09MX0dMSU5LCisJY2FzZSBFVEhUT09MX0dMSU5LOgorCQllZGF0YS5jbWQgPSBldGhjbWQ7CisKKwkJaWYgKHdsYW5kZXYtPmxpbmtzdGF0dXMgJiYKKwkJICAgICh3bGFuZGV2LT5tYWNtb2RlICE9IFdMQU5fTUFDTU9ERV9OT05FKSkgeworCQkJZWRhdGEuZGF0YSA9IDE7CisJCX0gZWxzZSB7CisJCQllZGF0YS5kYXRhID0gMDsKKwkJfQorCisJCWlmIChjb3B5X3RvX3VzZXIodXNlcmFkZHIsICZlZGF0YSwgc2l6ZW9mKGVkYXRhKSkpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLUVGQVVMVDsKKwkJcmV0dXJuIDA7CisJfQorI2VuZGlmCisKKwlyZXR1cm4gLUVPUE5PVFNVUFA7Cit9CisKKyNlbmRpZgorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogcDgwMjExa25ldGRldl9kb19pb2N0bAorKgorKiBIYW5kbGUgYW4gaW9jdGwgY2FsbCBvbiBvbmUgb2Ygb3VyIGRldmljZXMuICBFdmVyeXRoaW5nIExpbnV4CisqIGlvY3RsIHNwZWNpZmljIGlzIGRvbmUgaGVyZS4gIFRoZW4gd2UgcGFzcyB0aGUgY29udGVudHMgb2YgdGhlCisqIGlmci0+ZGF0YSB0byB0aGUgcmVxdWVzdCBtZXNzYWdlIGhhbmRsZXIuCisqCisqIEFyZ3VtZW50czoKKyoJZGV2CUxpbnV4IGtlcm5lbCBuZXRkZXZpY2UKKyoJaWZyCU91ciBwcml2YXRlIGlvY3RsIHJlcXVlc3Qgc3RydWN0dXJlLCB0eXBlZCBmb3IgdGhlCisqCQlnZW5lcmljIHN0cnVjdCBpZnJlcSBzbyB3ZSBjYW4gdXNlIHB0ciB0byBmdW5jCisqCQl3L28gY2FzdC4KKyoKKyogUmV0dXJuczoKKyoJemVybyBvbiBzdWNjZXNzLCBhIG5lZ2F0aXZlIGVycm5vIG9uIGZhaWx1cmUuICBQb3NzaWJsZSB2YWx1ZXM6CisqCQktRU5FVERPV04gRGV2aWNlIGlzbid0IHVwLgorKgkJLUVCVVNZCWNtZCBhbHJlYWR5IGluIHByb2dyZXNzCisqCQktRVRJTUUJcDgwMjExIGNtZCB0aW1lZCBvdXQgKE1TRCBtYXkgaGF2ZSBpdHMgb3duIHRpbWVycykKKyoJCS1FRkFVTFQgbWVtb3J5IGZhdWx0IGNvcHlpbmcgbXNnIGZyb20gdXNlciBidWZmZXIKKyoJCS1FTk9NRU0gdW5hYmxlIHRvIGFsbG9jYXRlIGtlcm5lbCBtc2cgYnVmZmVyCisqCQktRU5PU1lTCWJhZCBtYWdpYywgaXQgdGhlIGNtZCByZWFsbHkgZm9yIHVzPworKgkJLUVJTlRSCXNsZWVwaW5nIG9uIGNtZCwgYXdha2VuZWQgYnkgc2lnbmFsLCBjbWQgY2FuY2VsbGVkLgorKgorKiBDYWxsIENvbnRleHQ6CisqCVByb2Nlc3MgdGhyZWFkIChpb2N0bCBjYWxsZXIpLiAgVE9ETzogU01QIHN1cHBvcnQgbWF5IHJlcXVpcmUKKyoJbG9ja3MuCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyBpbnQgcDgwMjExa25ldGRldl9kb19pb2N0bChuZXRkZXZpY2VfdCAqZGV2LCBzdHJ1Y3QgaWZyZXEgKmlmciwgaW50IGNtZCkKK3sKKwlpbnQJCQlyZXN1bHQgPSAwOworCXA4MDIxMWlvY3RsX3JlcV90CSpyZXEgPSAocDgwMjExaW9jdGxfcmVxX3QqKWlmcjsKKwl3bGFuZGV2aWNlX3QJCSp3bGFuZGV2ID0gKHdsYW5kZXZpY2VfdCopZGV2LT5wcml2OworCVVJTlQ4CQkJKm1zZ2J1ZjsKKwlEQkZFTlRFUjsKKworCVdMQU5fTE9HX0RFQlVHKDIsICJyeCdkIGlvY3RsLCBjbWQ9JWQsIGxlbj0lZFxuIiwgY21kLCByZXEtPmxlbik7CisKKyNpZiBXSVJFTEVTU19FWFQgPCAxMworCS8qIElzIHRoaXMgYSB3aXJlbGVzcyBleHRlbnNpb25zIGlvY3RsPyAqLworCWlmICgoY21kID49IFNJT0NJV0ZJUlNUKSAmJiAoY21kIDw9IFNJT0NJV0xBU1QpKSB7CisJCWlmICgocmVzdWx0ID0gcDgwMjExd2V4dF9zdXBwb3J0X2lvY3RsKGRldiwgaWZyLCBjbWQpKQorCQkgICAgIT0gKC1FT1BOT1RTVVBQKSkgeworCQkJZ290byBiYWlsOworCQl9CisJfQorI2VuZGlmCisKKyNpZmRlZiBTSU9DRVRIVE9PTAorCWlmIChjbWQgPT0gU0lPQ0VUSFRPT0wpIHsKKwkJcmVzdWx0ID0gcDgwMjExbmV0ZGV2X2V0aHRvb2wod2xhbmRldiwgKHZvaWQgX191c2VyICopIGlmci0+aWZyX2RhdGEpOworCQlnb3RvIGJhaWw7CisJfQorI2VuZGlmCisKKwkvKiBUZXN0IHRoZSBtYWdpYywgYXNzdW1lIGlmciBpcyBnb29kIGlmIGl0J3MgdGhlcmUgKi8KKwlpZiAoIHJlcS0+bWFnaWMgIT0gUDgwMjExX0lPQ1RMX01BR0lDICkgeworCQlyZXN1bHQgPSAtRU5PU1lTOworCQlnb3RvIGJhaWw7CisJfQorCisJaWYgKCBjbWQgPT0gUDgwMjExX0lGVEVTVCApIHsKKwkJcmVzdWx0ID0gMDsKKwkJZ290byBiYWlsOworCX0gZWxzZSBpZiAoIGNtZCAhPSBQODAyMTFfSUZSRVEgKSB7CisJCXJlc3VsdCA9IC1FTk9TWVM7CisJCWdvdG8gYmFpbDsKKwl9CisKKwkvKiBBbGxvY2F0ZSBhIGJ1ZiBvZiBzaXplIHJlcS0+bGVuICovCisJaWYgKChtc2didWYgPSBrbWFsbG9jKCByZXEtPmxlbiwgR0ZQX0tFUk5FTCkpKSB7CisJCWlmICggY29weV9mcm9tX3VzZXIoIG1zZ2J1ZiwgKHZvaWQgX191c2VyICopIHJlcS0+ZGF0YSwgcmVxLT5sZW4pICkgeworCQkJcmVzdWx0ID0gLUVGQVVMVDsKKwkJfSBlbHNlIHsKKwkJCXJlc3VsdCA9IHA4MDIxMXJlcV9kb3JlcXVlc3QoIHdsYW5kZXYsIG1zZ2J1Zik7CisJCX0KKworCQlpZiAoIHJlc3VsdCA9PSAwICkgeworCQkJaWYgKCBjb3B5X3RvX3VzZXIoICh2b2lkIF9fdXNlciAqKSByZXEtPmRhdGEsIG1zZ2J1ZiwgcmVxLT5sZW4pKSB7CisJCQkJcmVzdWx0ID0gLUVGQVVMVDsKKwkJCX0KKwkJfQorCQlrZnJlZShtc2didWYpOworCX0gZWxzZSB7CisJCXJlc3VsdCA9IC1FTk9NRU07CisJfQorYmFpbDoKKwlEQkZFWElUOworCisJcmV0dXJuIHJlc3VsdDsgLyogSWYgYWxsb2NhdGUsY29weWZyb20gb3IgY29weXRvIGZhaWxzLCByZXR1cm4gZXJybm8gKi8KK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIHA4MDIxMWtuZXRkZXZfc2V0X21hY19hZGRyZXNzCisqCisqIEhhbmRsZXMgdGhlIGlvY3RsIGZvciBjaGFuZ2luZyB0aGUgTUFDQWRkcmVzcyBvZiBhIG5ldGRldmljZQorKgorKiByZWZlcmVuY2VzOiBsaW51eC9uZXRkZXZpY2UuaCBhbmQgZHJpdmVycy9uZXQvbmV0X2luaXQuYworKgorKiBOT1RFOiBbTVNNXSBXZSBvbmx5IHByZXZlbnQgYWRkcmVzcyBjaGFuZ2VzIHdoZW4gdGhlIG5ldGRldiBpcworKiB1cC4gIFdlIGRvbid0IGNvbnRyb2wgYW55dGhpbmcgYmFzZWQgb24gZG90MTEgc3RhdGUuICBJZiB0aGUKKyogYWRkcmVzcyBpcyBjaGFuZ2VkIG9uIGEgU1RBIHRoYXQncyBjdXJyZW50bHkgYXNzb2NpYXRlZCwgeW91CisqIHdpbGwgcHJvYmFibHkgbG9zZSB0aGUgYWJpbGl0eSB0byBzZW5kIGFuZCByZWNlaXZlIGRhdGEgZnJhbWVzLgorKiBKdXN0IGJlIGF3YXJlLiAgVGhlcmVmb3JlLCB0aGlzIHNob3VsZCB1c3VhbGx5IG9ubHkgYmUgZG9uZQorKiBwcmlvciB0byBzY2FuL2pvaW4vYXV0aC9hc3NvYy4KKyoKKyogQXJndW1lbnRzOgorKglkZXYJbmV0ZGV2aWNlIHN0cnVjdAorKglhZGRyCXRoZSBuZXcgTUFDQWRkcmVzcyAoYSBzdHJ1Y3QpCisqCisqIFJldHVybnM6CisqCXplcm8gb24gc3VjY2VzcywgYSBuZWdhdGl2ZSBlcnJubyBvbiBmYWlsdXJlLiAgUG9zc2libGUgdmFsdWVzOgorKgkJLUVCVVNZCWRldmljZSBpcyBidXNzeSAoY21kIG5vdCBwb3NzaWJsZSkKKyoJCS1hbmQgZXJyb3JzIHJldHVybmVkIGJ5OiBwODAyMTFyZXFfZG9yZXF1ZXN0KC4uKQorKgorKiBieTogQ29sbGluIFIuIE11bGxpbmVyIDxjb2xsaW5AbXVsbGluZXIub3JnPgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgaW50IHA4MDIxMWtuZXRkZXZfc2V0X21hY19hZGRyZXNzKG5ldGRldmljZV90ICpkZXYsIHZvaWQgKmFkZHIpCit7CisJc3RydWN0IHNvY2thZGRyCQkJKm5ld19hZGRyID0gYWRkcjsKKwlwODAyMTFtc2dfZG90MTFyZXFfbWlic2V0X3QJZG90MTFyZXE7CisJcDgwMjExaXRlbV91bmszOTJfdAkJKm1pYmF0dHI7CisJcDgwMjExaXRlbV9wc3RyNl90CQkqbWFjYWRkcjsKKwlwODAyMTFpdGVtX3VpbnQzMl90CQkqcmVzdWx0Y29kZTsKKwlpbnQgcmVzdWx0ID0gMDsKKworCURCRkVOVEVSOworCS8qIElmIHdlJ3JlIHJ1bm5pbmcsIHdlIGRvbid0IGFsbG93IE1BQyBhZGRyZXNzIGNoYW5nZXMgKi8KKyNpZiAoTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiwzLDM4KSApCisJaWYgKCBkZXYtPnN0YXJ0KSB7CisJCXJldHVybiAtRUJVU1k7CisJfQorI2Vsc2UKKwlpZiAobmV0aWZfcnVubmluZyhkZXYpKSB7CisJCXJldHVybiAtRUJVU1k7CisJfQorI2VuZGlmCisKKwkvKiBTZXQgdXAgc29tZSBjb252ZW5pZW5jZSBwb2ludGVycy4gKi8KKwltaWJhdHRyID0gJmRvdDExcmVxLm1pYmF0dHJpYnV0ZTsKKwltYWNhZGRyID0gKHA4MDIxMWl0ZW1fcHN0cjZfdCopJm1pYmF0dHItPmRhdGE7CisJcmVzdWx0Y29kZSA9ICZkb3QxMXJlcS5yZXN1bHRjb2RlOworCisJLyogU2V0IHVwIGEgZG90MTFyZXFfbWlic2V0ICovCisJbWVtc2V0KCZkb3QxMXJlcSwgMCwgc2l6ZW9mKHA4MDIxMW1zZ19kb3QxMXJlcV9taWJzZXRfdCkpOworCWRvdDExcmVxLm1zZ2NvZGUgPSBESURtc2dfZG90MTFyZXFfbWlic2V0OworCWRvdDExcmVxLm1zZ2xlbiA9IHNpemVvZihwODAyMTFtc2dfZG90MTFyZXFfbWlic2V0X3QpOworCW1lbWNweShkb3QxMXJlcS5kZXZuYW1lLAorCQkoKHdsYW5kZXZpY2VfdCopKGRldi0+cHJpdikpLT5uYW1lLAorCQlXTEFOX0RFVk5BTUVMRU5fTUFYIC0gMSk7CisKKwkvKiBTZXQgdXAgdGhlIG1pYmF0dHJpYnV0ZSBhcmd1bWVudCAqLworCW1pYmF0dHItPmRpZCA9IERJRG1zZ19kb3QxMXJlcV9taWJzZXRfbWliYXR0cmlidXRlOworCW1pYmF0dHItPnN0YXR1cyA9IFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfZGF0YV9vazsKKwltaWJhdHRyLT5sZW4gPSBzaXplb2YobWliYXR0ci0+ZGF0YSk7CisKKwltYWNhZGRyLT5kaWQgPSBESURtaWJfZG90MTFtYWNfZG90MTFPcGVyYXRpb25UYWJsZV9kb3QxMU1BQ0FkZHJlc3M7CisJbWFjYWRkci0+c3RhdHVzID0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rOworCW1hY2FkZHItPmxlbiA9IHNpemVvZihtYWNhZGRyLT5kYXRhKTsKKwltYWNhZGRyLT5kYXRhLmxlbiA9IFdMQU5fQUREUl9MRU47CisJbWVtY3B5KCZtYWNhZGRyLT5kYXRhLmRhdGEsIG5ld19hZGRyLT5zYV9kYXRhLCBXTEFOX0FERFJfTEVOKTsKKworCS8qIFNldCB1cCB0aGUgcmVzdWx0Y29kZSBhcmd1bWVudCAqLworCXJlc3VsdGNvZGUtPmRpZCA9IERJRG1zZ19kb3QxMXJlcV9taWJzZXRfcmVzdWx0Y29kZTsKKwlyZXN1bHRjb2RlLT5zdGF0dXMgPSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX25vX3ZhbHVlOworCXJlc3VsdGNvZGUtPmxlbiA9IHNpemVvZihyZXN1bHRjb2RlLT5kYXRhKTsKKwlyZXN1bHRjb2RlLT5kYXRhID0gMDsKKworCS8qIG5vdyBmaXJlIHRoZSByZXF1ZXN0ICovCisJcmVzdWx0ID0gcDgwMjExcmVxX2RvcmVxdWVzdChkZXYtPnByaXYsIChVSU5UOCopJmRvdDExcmVxKTsKKworCS8qIElmIHRoZSByZXF1ZXN0IHdhc24ndCBzdWNjZXNzZnVsLCByZXBvcnQgYW4gZXJyb3IgYW5kIGRvbid0CisJICogY2hhbmdlIHRoZSBuZXRkZXYgYWRkcmVzcworCSAqLworCWlmICggcmVzdWx0ICE9IDAgfHwgcmVzdWx0Y29kZS0+ZGF0YSAhPSBQODAyMTFFTlVNX3Jlc3VsdGNvZGVfc3VjY2VzcykgeworCQlXTEFOX0xPR19FUlJPUigKKwkJIkxvdy1sZXZlbCBkcml2ZXIgZmFpbGVkIGRvdDExcmVxX21pYnNldChkb3QxMU1BQ0FkZHJlc3MpLlxuIik7CisJCXJlc3VsdCA9IC1FQUREUk5PVEFWQUlMOworCX0gZWxzZSB7CisJCS8qIGV2ZXJ5dGhpbmcncyBvaywgY2hhbmdlIHRoZSBhZGRyIGluIG5ldGRldiAqLworCQltZW1jcHkoZGV2LT5kZXZfYWRkciwgbmV3X2FkZHItPnNhX2RhdGEsIGRldi0+YWRkcl9sZW4pOworCX0KKworCURCRkVYSVQ7CisJcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIGludCB3bGFuX2NoYW5nZV9tdHUobmV0ZGV2aWNlX3QgKmRldiwgaW50IG5ld19tdHUpCit7CisJREJGRU5URVI7CisJLy8gMjMxMiBpcyBtYXggODAyLjExIHBheWxvYWQsIDIwIGlzIG92ZXJoZWFkLCAoZXRoZXIgKyBsbGMgK3NuYXApCisJLy8gYW5kIGFub3RoZXIgOCBmb3Igd2VwLgorICAgICAgICBpZiAoIChuZXdfbXR1IDwgNjgpIHx8IChuZXdfbXR1ID4gKDIzMTIgLSAyMCAtIDgpKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsKKworICAgICAgICBkZXYtPm10dSA9IG5ld19tdHU7CisKKwlEQkZFWElUOworCisgICAgICAgIHJldHVybiAwOworfQorCisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIHdsYW5fc2V0dXAKKyoKKyogUm91Z2hseSBtYXRjaGVzIHRoZSBmdW5jdGlvbmFsaXR5IG9mIGV0aGVyX3NldHVwLiAgSGVyZQorKiB3ZSBzZXQgdXAgYW55IG1lbWJlcnMgb2YgdGhlIHdsYW5kZXZpY2Ugc3RydWN0dXJlIHRoYXQgYXJlIGNvbW1vbgorKiB0byBhbGwgZGV2aWNlcy4gIEFkZGl0aW9uYWxseSwgd2UgYWxsb2NhdGUgYSBsaW51eCAnc3RydWN0IGRldmljZScKKyogYW5kIHBlcmZvcm0gdGhlIHNhbWUgc2V0dXAgYXMgZXRoZXJfc2V0dXAuCisqCisqIE5vdGU6IEl0J3MgaW1wb3J0YW50IHRoYXQgdGhlIGNhbGxlciBoYXZlIHNldHVwIHRoZSB3bGFuZGV2LT5uYW1lCisqCXB0ciBwcmlvciB0byBjYWxsaW5nIHRoaXMgZnVuY3Rpb24uCisqCisqIEFyZ3VtZW50czoKKyoJd2xhbmRldgkJcHRyIHRvIHRoZSB3bGFuZGV2IHN0cnVjdHVyZSBmb3IgdGhlCisqCQkJaW50ZXJmYWNlLgorKiBSZXR1cm5zOgorKgl6ZXJvIG9uIHN1Y2Nlc3MsIG5vbi16ZXJvIG90aGVyd2lzZS4KKyogQ2FsbCBDb250ZXh0OgorKglTaG91bGQgYmUgcHJvY2VzcyB0aHJlYWQuICBXZSdsbCBhc3N1bWUgaXQgbWlnaHQgYmUKKyoJaW50ZXJydXB0IHRob3VnaC4gIFdoZW4gd2UgYWRkIHN1cHBvcnQgZm9yIHN0YXRpY2FsbHkKKyoJY29tcGlsZWQgZHJpdmVycywgdGhpcyBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCBpbiB0aGUKKyoJY29udGV4dCBvZiB0aGUga2VybmVsIHN0YXJ0dXAgY29kZS4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworaW50IHdsYW5fc2V0dXAod2xhbmRldmljZV90ICp3bGFuZGV2KQoreworCWludAkJcmVzdWx0ID0gMDsKKwluZXRkZXZpY2VfdAkqZGV2OworCisJREJGRU5URVI7CisKKwkvKiBTZXQgdXAgdGhlIHdsYW5kZXYgKi8KKwl3bGFuZGV2LT5zdGF0ZSA9IFdMQU5fREVWSUNFX0NMT1NFRDsKKwl3bGFuZGV2LT5ldGhjb252ID0gV0xBTl9FVEhDT05WXzgwMjFoOworCXdsYW5kZXYtPm1hY21vZGUgPSBXTEFOX01BQ01PREVfTk9ORTsKKworCS8qIFNldCB1cCB0aGUgcnggcXVldWUgKi8KKwlza2JfcXVldWVfaGVhZF9pbml0KCZ3bGFuZGV2LT5uc2RfcnhxKTsKKwl0YXNrbGV0X2luaXQoJndsYW5kZXYtPnJ4X2JoLAorCQkgICAgIHA4MDIxMW5ldGRldl9yeF9iaCwKKwkJICAgICAodW5zaWduZWQgbG9uZyl3bGFuZGV2KTsKKworCS8qIEFsbG9jYXRlIGFuZCBpbml0aWFsaXplIHRoZSBzdHJ1Y3QgZGV2aWNlICovCisJZGV2ID0ga21hbGxvYyhzaXplb2YobmV0ZGV2aWNlX3QpLCBHRlBfQVRPTUlDKTsKKwlpZiAoIGRldiA9PSBOVUxMICkgeworCQlXTEFOX0xPR19FUlJPUigiRmFpbGVkIHRvIGFsbG9jIG5ldGRldi5cbiIpOworCQlyZXN1bHQgPSAxOworCX0gZWxzZSB7CisJCW1lbXNldCggZGV2LCAwLCBzaXplb2YobmV0ZGV2aWNlX3QpKTsKKwkJZXRoZXJfc2V0dXAoZGV2KTsKKwkJd2xhbmRldi0+bmV0ZGV2ID0gZGV2OworCQlkZXYtPnByaXYgPSB3bGFuZGV2OworCQlkZXYtPmhhcmRfc3RhcnRfeG1pdCA9CXA4MDIxMWtuZXRkZXZfaGFyZF9zdGFydF94bWl0OworCQlkZXYtPmdldF9zdGF0cyA9CXA4MDIxMWtuZXRkZXZfZ2V0X3N0YXRzOworI2lmZGVmIEhBVkVfUFJJVkFURV9JT0NUTAorCQlkZXYtPmRvX2lvY3RsID0gCXA4MDIxMWtuZXRkZXZfZG9faW9jdGw7CisjZW5kaWYKKyNpZmRlZiBIQVZFX01VTFRJQ0FTVAorCQlkZXYtPnNldF9tdWx0aWNhc3RfbGlzdCA9IHA4MDIxMWtuZXRkZXZfc2V0X211bHRpY2FzdF9saXN0OworI2VuZGlmCisJCWRldi0+aW5pdCA9CQlwODAyMTFrbmV0ZGV2X2luaXQ7CisJCWRldi0+b3BlbiA9CQlwODAyMTFrbmV0ZGV2X29wZW47CisJCWRldi0+c3RvcCA9CQlwODAyMTFrbmV0ZGV2X3N0b3A7CisKKyNpZmRlZiBDT05GSUdfTkVUX1dJUkVMRVNTCisjaWYgKChXSVJFTEVTU19FWFQgPCAxNykgJiYgKFdJUkVMRVNTX0VYVCA8IDIxKSkKKwkJZGV2LT5nZXRfd2lyZWxlc3Nfc3RhdHMgPSBwODAyMTF3ZXh0X2dldF93aXJlbGVzc19zdGF0czsKKyNlbmRpZgorI2lmIFdJUkVMRVNTX0VYVCA+IDEyCisJCWRldi0+d2lyZWxlc3NfaGFuZGxlcnMgPSAmcDgwMjExd2V4dF9oYW5kbGVyX2RlZjsKKyNlbmRpZgorI2VuZGlmCisKKyNpZiAoTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiwzLDM4KSApCisJCWRldi0+dGJ1c3kgPSAxOworCQlkZXYtPnN0YXJ0ID0gMDsKKyNlbHNlCisJCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKKyNlbmRpZgorI2lmZGVmIEhBVkVfQ0hBTkdFX01UVQorCQlkZXYtPmNoYW5nZV9tdHUgPSB3bGFuX2NoYW5nZV9tdHU7CisjZW5kaWYKKyNpZmRlZiBIQVZFX1NFVF9NQUNfQUREUgorCQlkZXYtPnNldF9tYWNfYWRkcmVzcyA9CXA4MDIxMWtuZXRkZXZfc2V0X21hY19hZGRyZXNzOworI2VuZGlmCisjaWZkZWYgSEFWRV9UWF9USU1FT1VUCisJCWRldi0+dHhfdGltZW91dCAgICAgID0gICZwODAyMTFrbmV0ZGV2X3R4X3RpbWVvdXQ7CisJCWRldi0+d2F0Y2hkb2dfdGltZW8gID0gICh3bGFuX3dhdGNoZG9nICogSFopIC8gMTAwMDsKKyNlbmRpZgorCQluZXRpZl9jYXJyaWVyX29mZihkZXYpOworCX0KKworCURCRkVYSVQ7CisJcmV0dXJuIHJlc3VsdDsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIHdsYW5fdW5zZXR1cAorKgorKiBUaGlzIGZ1bmN0aW9uIGlzIHBhaXJlZCB3aXRoIHRoZSB3bGFuX3NldHVwIHJvdXRpbmUuICBJdCBzaG91bGQKKyogYmUgY2FsbGVkIGFmdGVyIHVucmVnaXN0ZXJfd2xhbmRldi4gIEJhc2ljYWxseSwgYWxsIGl0IGRvZXMgaXMKKyogZnJlZSB0aGUgJ3N0cnVjdCBkZXZpY2UnIHRoYXQncyBhc3NvY2lhdGVkIHdpdGggdGhlIHdsYW5kZXYuCisqIFdlIGRvIGl0IGhlcmUgYmVjYXVzZSB0aGUgJ3N0cnVjdCBkZXZpY2UnIGlzbid0IGFsbG9jYXRlZAorKiBleHBsaWNpdGx5IGluIHRoZSBkcml2ZXIgY29kZSwgaXQncyBkb25lIGluIHdsYW5fc2V0dXAuICBUbworKiBkbyB0aGUgZnJlZSBpbiB0aGUgZHJpdmVyIG1pZ2h0IHNlZW0gbGlrZSAnbWFnaWMnLgorKgorKiBBcmd1bWVudHM6CisqCXdsYW5kZXYJCXB0ciB0byB0aGUgd2xhbmRldiBzdHJ1Y3R1cmUgZm9yIHRoZQorKgkJCWludGVyZmFjZS4KKyogUmV0dXJuczoKKyoJemVybyBvbiBzdWNjZXNzLCBub24temVybyBvdGhlcndpc2UuCisqIENhbGwgQ29udGV4dDoKKyoJU2hvdWxkIGJlIHByb2Nlc3MgdGhyZWFkLiAgV2UnbGwgYXNzdW1lIGl0IG1pZ2h0IGJlCisqCWludGVycnVwdCB0aG91Z2guICBXaGVuIHdlIGFkZCBzdXBwb3J0IGZvciBzdGF0aWNhbGx5CisqCWNvbXBpbGVkIGRyaXZlcnMsIHRoaXMgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgaW4gdGhlCisqCWNvbnRleHQgb2YgdGhlIGtlcm5lbCBzdGFydHVwIGNvZGUuCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK2ludCB3bGFuX3Vuc2V0dXAod2xhbmRldmljZV90ICp3bGFuZGV2KQoreworCWludAkJcmVzdWx0ID0gMDsKKworCURCRkVOVEVSOworCisJdGFza2xldF9raWxsKCZ3bGFuZGV2LT5yeF9iaCk7CisKKwlpZiAod2xhbmRldi0+bmV0ZGV2ID09IE5VTEwgKSB7CisJCVdMQU5fTE9HX0VSUk9SKCJjYWxsZWQgd2l0aG91dCB3bGFuZGV2LT5uZXRkZXYgc2V0LlxuIik7CisJCXJlc3VsdCA9IDE7CisJfSBlbHNlIHsKKwkJZnJlZV9uZXRkZXYod2xhbmRldi0+bmV0ZGV2KTsKKwkJd2xhbmRldi0+bmV0ZGV2ID0gTlVMTDsKKwl9CisKKwlEQkZFWElUOworCXJldHVybiAwOworfQorCisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIHJlZ2lzdGVyX3dsYW5kZXYKKyoKKyogUm91Z2hseSBtYXRjaGVzIHRoZSBmdW5jdGlvbmFsaXR5IG9mIHJlZ2lzdGVyX25ldGRldi4gIFRoaXMgZnVuY3Rpb24KKyogaXMgY2FsbGVkIGFmdGVyIHRoZSBkcml2ZXIgaGFzIHN1Y2Nlc3NmdWxseSBwcm9iZWQgYW5kIHNldCB1cCB0aGUKKyogcmVzb3VyY2VzIGZvciB0aGUgZGV2aWNlLiAgSXQncyBub3cgcmVhZHkgdG8gYmVjb21lIGEgbmFtZWQgZGV2aWNlCisqIGluIHRoZSBMaW51eCBzeXN0ZW0uCisqCisqIEZpcnN0IHdlIGFsbG9jYXRlIGEgbmFtZSBmb3IgdGhlIGRldmljZSAoaWYgbm90IGFscmVhZHkgc2V0KSwgdGhlbgorKiB3ZSBjYWxsIHRoZSBMaW51eCBmdW5jdGlvbiByZWdpc3Rlcl9uZXRkZXZpY2UuCisqCisqIEFyZ3VtZW50czoKKyoJd2xhbmRldgkJcHRyIHRvIHRoZSB3bGFuZGV2IHN0cnVjdHVyZSBmb3IgdGhlCisqCQkJaW50ZXJmYWNlLgorKiBSZXR1cm5zOgorKgl6ZXJvIG9uIHN1Y2Nlc3MsIG5vbi16ZXJvIG90aGVyd2lzZS4KKyogQ2FsbCBDb250ZXh0OgorKglDYW4gYmUgZWl0aGVyIGludGVycnVwdCBvciBub3QuCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK2ludCByZWdpc3Rlcl93bGFuZGV2KHdsYW5kZXZpY2VfdCAqd2xhbmRldikKK3sKKwlpbnQJCWkgPSAwOworCW5ldGRldmljZV90CSpkZXYgPSB3bGFuZGV2LT5uZXRkZXY7CisKKwlEQkZFTlRFUjsKKworCWkgPSBkZXZfYWxsb2NfbmFtZSh3bGFuZGV2LT5uZXRkZXYsICJ3bGFuJWQiKTsKKwlpZiAoaSA+PSAwKSB7CisJCWkgPSByZWdpc3Rlcl9uZXRkZXYod2xhbmRldi0+bmV0ZGV2KTsKKwl9CisJaWYgKGkgIT0gMCkgeworCQlyZXR1cm4gLUVJTzsKKwl9CisKKyNpZiAoIExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDIsNCwwKSApCisJZGV2LT5uYW1lID0gd2xhbmRldi0+bmFtZTsKKyNlbHNlCisJc3RyY3B5KHdsYW5kZXYtPm5hbWUsIGRldi0+bmFtZSk7CisjZW5kaWYKKworI2lmZGVmIENPTkZJR19QUk9DX0ZTCisJaWYgKHByb2NfcDgwMjExKSB7CisJCXdsYW5kZXYtPnByb2NkaXIgPSBwcm9jX21rZGlyKHdsYW5kZXYtPm5hbWUsIHByb2NfcDgwMjExKTsKKwkJaWYgKCB3bGFuZGV2LT5wcm9jZGlyICkKKwkJCXdsYW5kZXYtPnByb2N3bGFuZGV2ID0KKwkJCQljcmVhdGVfcHJvY19yZWFkX2VudHJ5KCJ3bGFuZGV2IiwgMCwKKwkJCQkJCSAgICAgICB3bGFuZGV2LT5wcm9jZGlyLAorCQkJCQkJICAgICAgIHA4MDIxMW5ldGRldl9wcm9jX3JlYWQsCisJCQkJCQkgICAgICAgd2xhbmRldik7CisJCWlmICh3bGFuZGV2LT5uc2RfcHJvY19yZWFkKQorCQkJY3JlYXRlX3Byb2NfcmVhZF9lbnRyeSgibnNkIiwgMCwKKwkJCQkJICAgICAgIHdsYW5kZXYtPnByb2NkaXIsCisJCQkJCSAgICAgICB3bGFuZGV2LT5uc2RfcHJvY19yZWFkLAorCQkJCQkgICAgICAgd2xhbmRldik7CisJfQorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfSE9UUExVRworCXA4MDIxMV9ydW5fc2Jpbl9ob3RwbHVnKHdsYW5kZXYsIFdMQU5fSE9UUExVR19SRUdJU1RFUik7CisjZW5kaWYKKworCURCRkVYSVQ7CisJcmV0dXJuIDA7Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIHVucmVnaXN0ZXJfd2xhbmRldgorKgorKiBSb3VnaGx5IG1hdGNoZXMgdGhlIGZ1bmN0aW9uYWxpdHkgb2YgdW5yZWdpc3Rlcl9uZXRkZXYuICBUaGlzCisqIGZ1bmN0aW9uIGlzIGNhbGxlZCB0byByZW1vdmUgYSBuYW1lZCBkZXZpY2UgZnJvbSB0aGUgc3lzdGVtLgorKgorKiBGaXJzdCB3ZSB0ZWxsIGxpbnV4IHRoYXQgdGhlIGRldmljZSBzaG91bGQgbm8gbG9uZ2VyIGV4aXN0LgorKiBUaGVuIHdlIHJlbW92ZSBpdCBmcm9tIHRoZSBsaXN0IG9mIGtub3duIHdsYW4gZGV2aWNlcy4KKyoKKyogQXJndW1lbnRzOgorKgl3bGFuZGV2CQlwdHIgdG8gdGhlIHdsYW5kZXYgc3RydWN0dXJlIGZvciB0aGUKKyoJCQlpbnRlcmZhY2UuCisqIFJldHVybnM6CisqCXplcm8gb24gc3VjY2Vzcywgbm9uLXplcm8gb3RoZXJ3aXNlLgorKiBDYWxsIENvbnRleHQ6CisqCUNhbiBiZSBlaXRoZXIgaW50ZXJydXB0IG9yIG5vdC4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworaW50IHVucmVnaXN0ZXJfd2xhbmRldih3bGFuZGV2aWNlX3QgKndsYW5kZXYpCit7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKworCURCRkVOVEVSOworCisjaWZkZWYgQ09ORklHX0hPVFBMVUcKKwlwODAyMTFfcnVuX3NiaW5faG90cGx1Zyh3bGFuZGV2LCBXTEFOX0hPVFBMVUdfUkVNT1ZFKTsKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX1BST0NfRlMKKwlpZiAoIHdsYW5kZXYtPnByb2N3bGFuZGV2ICkgeworCQlyZW1vdmVfcHJvY19lbnRyeSgid2xhbmRldiIsIHdsYW5kZXYtPnByb2NkaXIpOworCX0KKwlpZiAoIHdsYW5kZXYtPm5zZF9wcm9jX3JlYWQgKSB7CisJCXJlbW92ZV9wcm9jX2VudHJ5KCJuc2QiLCB3bGFuZGV2LT5wcm9jZGlyKTsKKwl9CisJaWYgKHdsYW5kZXYtPnByb2NkaXIpIHsKKwkJcmVtb3ZlX3Byb2NfZW50cnkod2xhbmRldi0+bmFtZSwgcHJvY19wODAyMTEpOworCX0KKyNlbmRpZgorCisJdW5yZWdpc3Rlcl9uZXRkZXYod2xhbmRldi0+bmV0ZGV2KTsKKworCS8qIE5vdyB0byBjbGVhbiBvdXQgdGhlIHJ4IHF1ZXVlICovCisJd2hpbGUgKCAoc2tiID0gc2tiX2RlcXVldWUoJndsYW5kZXYtPm5zZF9yeHEpKSApIHsKKwkJZGV2X2tmcmVlX3NrYihza2IpOworCX0KKworCURCRkVYSVQ7CisJcmV0dXJuIDA7Cit9CisKKyNpZmRlZiBDT05GSUdfUFJPQ19GUworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIHByb2NfcmVhZAorKgorKiBSZWFkIGZ1bmN0aW9uIGZvciAvcHJvYy9uZXQvcDgwMjExLzxkZXZpY2U+L3dsYW5kZXYKKyoKKyogQXJndW1lbnRzOgorKglidWYKKyoJc3RhcnQKKyoJb2Zmc2V0CisqCWNvdW50CisqCWVvZgorKglkYXRhCisqIFJldHVybnM6CisqCXplcm8gb24gc3VjY2Vzcywgbm9uLXplcm8gb3RoZXJ3aXNlLgorKiBDYWxsIENvbnRleHQ6CisqCUNhbiBiZSBlaXRoZXIgaW50ZXJydXB0IG9yIG5vdC4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIGludAorcDgwMjExbmV0ZGV2X3Byb2NfcmVhZCgKKwljaGFyCSpwYWdlLAorCWNoYXIJKipzdGFydCwKKwlvZmZfdAlvZmZzZXQsCisJaW50CWNvdW50LAorCWludAkqZW9mLAorCXZvaWQJKmRhdGEpCit7CisJY2hhcgkgKnAgPSBwYWdlOworCXdsYW5kZXZpY2VfdCAqd2xhbmRldiA9ICh3bGFuZGV2aWNlX3QgKikgZGF0YTsKKworCURCRkVOVEVSOworCWlmIChvZmZzZXQgIT0gMCkgeworCQkqZW9mID0gMTsKKwkJZ290byBleGl0OworCX0KKworCXAgKz0gc3ByaW50ZihwLCAicDgwMjExIHZlcnNpb246ICVzICglcylcblxuIiwKKwkJICAgICBXTEFOX1JFTEVBU0UsIFdMQU5fQlVJTERfREFURSk7CisJcCArPSBzcHJpbnRmKHAsICJuYW1lICAgICAgIDogJXNcbiIsIHdsYW5kZXYtPm5hbWUpOworCXAgKz0gc3ByaW50ZihwLCAibnNkIG5hbWUgICA6ICVzXG4iLCB3bGFuZGV2LT5uc2RuYW1lKTsKKwlwICs9IHNwcmludGYocCwgImFkZHJlc3MgICAgOiAlMDJ4OiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeFxuIiwKKwkJICAgICB3bGFuZGV2LT5uZXRkZXYtPmRldl9hZGRyWzBdLCB3bGFuZGV2LT5uZXRkZXYtPmRldl9hZGRyWzFdLCB3bGFuZGV2LT5uZXRkZXYtPmRldl9hZGRyWzJdLAorCQkgICAgIHdsYW5kZXYtPm5ldGRldi0+ZGV2X2FkZHJbM10sIHdsYW5kZXYtPm5ldGRldi0+ZGV2X2FkZHJbNF0sIHdsYW5kZXYtPm5ldGRldi0+ZGV2X2FkZHJbNV0pOworCXAgKz0gc3ByaW50ZihwLCAibnNkIGNhcHMgICA6ICVzJXMlcyVzJXMlcyVzJXMlcyVzXG4iLAorCQkgICAgICh3bGFuZGV2LT5uc2RjYXBzICYgUDgwMjExX05TRENBUF9IQVJEV0FSRVdFUCkgPyAid2VwX2h3ICIgOiAiIiwKKwkJICAgICAod2xhbmRldi0+bnNkY2FwcyAmIFA4MDIxMV9OU0RDQVBfVElFRFdFUCkgPyAid2VwX3RpZWQgIiA6ICIiLAorCQkgICAgICh3bGFuZGV2LT5uc2RjYXBzICYgUDgwMjExX05TRENBUF9OT0hPU1RXRVApID8gIndlcF9od19vbmx5ICIgOiAiIiwKKwkJICAgICAod2xhbmRldi0+bnNkY2FwcyAmIFA4MDIxMV9OU0RDQVBfUEJDQykgPyAicGJjYyAiIDogIiIsCisJCSAgICAgKHdsYW5kZXYtPm5zZGNhcHMgJiBQODAyMTFfTlNEQ0FQX1NIT1JUX1BSRUFNQkxFKSA/ICJzaG9ydF9wcmVhbWJsZSAiIDogIiIsCisJCSAgICAgKHdsYW5kZXYtPm5zZGNhcHMgJiBQODAyMTFfTlNEQ0FQX0FHSUxJVFkpID8gImFnaWxpdHkgIiA6ICIiLAorCQkgICAgICh3bGFuZGV2LT5uc2RjYXBzICYgUDgwMjExX05TRENBUF9BUF9SRVRSQU5TTUlUKSA/ICJhcF9yZXRyYW5zbWl0ICIgOiAiIiwKKwkJICAgICAod2xhbmRldi0+bnNkY2FwcyAmIFA4MDIxMV9OU0RDQVBfSFdGUkFHTUVOVCkgPyAiaHdfZnJhZyAiIDogIiIsCisJCSAgICAgKHdsYW5kZXYtPm5zZGNhcHMgJiBQODAyMTFfTlNEQ0FQX0FVVE9KT0lOKSA/ICJhdXRvam9pbiAiIDogIiIsCisJCSAgICAgKHdsYW5kZXYtPm5zZGNhcHMgJiBQODAyMTFfTlNEQ0FQX05PU0NBTikgPyAiIiA6ICJzY2FuICIpOworCisKKwlwICs9IHNwcmludGYocCwgImJzc2lkICAgICAgOiAlMDJ4OiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeFxuIiwKKwkJICAgICB3bGFuZGV2LT5ic3NpZFswXSwgd2xhbmRldi0+YnNzaWRbMV0sIHdsYW5kZXYtPmJzc2lkWzJdLAorCQkgICAgIHdsYW5kZXYtPmJzc2lkWzNdLCB3bGFuZGV2LT5ic3NpZFs0XSwgd2xhbmRldi0+YnNzaWRbNV0pOworCisJcCArPSBzcHJpbnRmKHAsICJFbmFibGVkICAgIDogJXMlc1xuIiwKKwkJICAgICAod2xhbmRldi0+c2hvcnRwcmVhbWJsZSkgPyAic2hvcnRfcHJlYW1ibGUgIiA6ICIiLAorCQkgICAgICh3bGFuZGV2LT5ob3N0d2VwICYgSE9TVFdFUF9QUklWQUNZSU5WT0tFRCkgPyAicHJpdmFjeSIgOiAiIik7CisKKworIGV4aXQ6CisJREJGRVhJVDsKKwlyZXR1cm4gKHAgLSBwYWdlKTsKK30KKyNlbmRpZgorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogcDgwMjExbmV0ZGV2X2h3cmVtb3ZlZAorKgorKiBIYXJkd2FyZSByZW1vdmVkIG5vdGlmaWNhdGlvbi4gVGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgY2FsbGVkCisqIGltbWVkaWF0ZWx5IGFmdGVyIGFuIE1TRCBoYXMgZGV0ZWN0ZWQgdGhhdCB0aGUgdW5kZXJseWluZyBoYXJkd2FyZQorKiBoYXMgYmVlbiB5YW5rZWQgb3V0IGZyb20gdW5kZXIgdXMuICBUaGUgcHJpbWFyeSB0aGluZ3Mgd2UgbmVlZAorKiB0byBkbyBhcmU6CisqICAgLSBNYXJrIHRoZSB3bGFuZGV2CisqICAgLSBQcmV2ZW50IGFueSBmdXJ0aGVyIHRyYWZmaWMgZnJvbSB0aGUga25ldGRldiBpL2YKKyogICAtIFByZXZlbnQgYW55IGZ1cnRoZXIgcmVxdWVzdHMgZnJvbSBtZ210IGkvZgorKiAgIC0gSWYgdGhlcmUgYXJlIGFueSB3YWl0cSdkIG1nbXQgcmVxdWVzdHMgb3IgbWdtdC1mcmFtZSBleGNoYW5nZXMsCisqICAgICBzaHV0IHRoZW0gZG93bi4KKyogICAtIENhbGwgdGhlIE1TRCBod3JlbW92ZWQgZnVuY3Rpb24uCisqCisqIFRoZSByZW1haW5kZXIgb2YgdGhlIGNsZWFudXAgd2lsbCBiZSBoYW5kbGVkIGJ5IHVucmVnaXN0ZXIoKS4KKyogT3VyIHByaW1hcnkgZ29hbCBoZXJlIGlzIHRvIHByZXZlbnQgYXMgbXVjaCB0aWNrbGluZyBvZiB0aGUgTVNECisqIGFzIHBvc3NpYmxlIHNpbmNlIHRoZSBNU0QgaXMgYWxyZWFkeSBpbiBhICd3b3VuZGVkJyBzdGF0ZS4KKyoKKyogVE9ETzogQXMgbmV3IGZlYXR1cmVzIGFyZSBhZGRlZCwgdGhpcyBmdW5jdGlvbiBzaG91bGQgYmUKKyogICAgICAgdXBkYXRlZC4KKyoKKyogQXJndW1lbnRzOgorKgl3bGFuZGV2CQlXTEFOIG5ldHdvcmsgZGV2aWNlIHN0cnVjdHVyZQorKiBSZXR1cm5zOgorKglub3RoaW5nCisqIFNpZGUgZWZmZWN0czoKKyoKKyogQ2FsbCBjb250ZXh0OgorKglVc3VhbGx5IGludGVycnVwdC4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwordm9pZCBwODAyMTFuZXRkZXZfaHdyZW1vdmVkKHdsYW5kZXZpY2VfdCAqd2xhbmRldikKK3sKKwlEQkZFTlRFUjsKKwl3bGFuZGV2LT5od3JlbW92ZWQgPSAxOworCWlmICggd2xhbmRldi0+c3RhdGUgPT0gV0xBTl9ERVZJQ0VfT1BFTikgeworCQlwODAyMTFuZXRkZXZfc3RvcF9xdWV1ZSh3bGFuZGV2KTsKKwl9CisKKwluZXRpZl9kZXZpY2VfZGV0YWNoKHdsYW5kZXYtPm5ldGRldik7CisKKwlEQkZFWElUOworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBwODAyMTFfcnhfdHlwZWRyb3AKKyoKKyogQ2xhc3NpZmllcyB0aGUgZnJhbWUsIGluY3JlbWVudHMgdGhlIGFwcHJvcHJpYXRlIGNvdW50ZXIsIGFuZAorKiByZXR1cm5zIDB8MXwyIGluZGljYXRpbmcgd2hldGhlciB0aGUgZHJpdmVyIHNob3VsZCBoYW5kbGUsIGlnbm9yZSwgb3IKKyogZHJvcCB0aGUgZnJhbWUKKyoKKyogQXJndW1lbnRzOgorKgl3bGFuZGV2CQl3bGFuIGRldmljZSBzdHJ1Y3R1cmUKKyoJZmMJCWZyYW1lIGNvbnRyb2wgZmllbGQKKyoKKyogUmV0dXJuczoKKyoJemVybyBpZiB0aGUgZnJhbWUgc2hvdWxkIGJlIGhhbmRsZWQgYnkgdGhlIGRyaXZlciwKKyogICAgICAgb25lIGlmIHRoZSBmcmFtZSBzaG91bGQgYmUgaWdub3JlZAorKiAgICAgICBhbnl0aGluZyBlbHNlIG1lYW5zIHdlIGRyb3AgaXQuCisqCisqIFNpZGUgZWZmZWN0czoKKyoKKyogQ2FsbCBjb250ZXh0OgorKglpbnRlcnJ1cHQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIGludCBwODAyMTFfcnhfdHlwZWRyb3AoIHdsYW5kZXZpY2VfdCAqd2xhbmRldiwgVUlOVDE2IGZjKQoreworCVVJTlQxNglmdHlwZTsKKwlVSU5UMTYJZnN0eXBlOworCWludAlkcm9wID0gMDsKKwkvKiBDbGFzc2lmeSBmcmFtZSwgaW5jcmVtZW50IGNvdW50ZXIgKi8KKwlmdHlwZSA9IFdMQU5fR0VUX0ZDX0ZUWVBFKGZjKTsKKwlmc3R5cGUgPSBXTEFOX0dFVF9GQ19GU1RZUEUoZmMpOworI2lmIDAKKwlXTEFOX0xPR19ERUJVRyg0LAorCQkicnhfdHlwZWRyb3AgOiBmdHlwZT0lZCBmc3R5cGU9JWQuXG4iLCBmdHlwZSwgZnN0eXBlKTsKKyNlbmRpZgorCXN3aXRjaCAoIGZ0eXBlICkgeworCWNhc2UgV0xBTl9GVFlQRV9NR01UOgorCQlpZiAoKHdsYW5kZXYtPm5ldGRldi0+ZmxhZ3MgJiBJRkZfUFJPTUlTQykgfHwKKwkJCSh3bGFuZGV2LT5uZXRkZXYtPmZsYWdzICYgSUZGX0FMTE1VTFRJKSkgeworCQkJZHJvcCA9IDE7CisJCQlicmVhazsKKwkJfQorCQlXTEFOX0xPR19ERUJVRygzLCAicngnZCBtZ210OlxuIik7CisJCXdsYW5kZXYtPnJ4Lm1nbXQrKzsKKwkJc3dpdGNoKCBmc3R5cGUgKSB7CisJCWNhc2UgV0xBTl9GU1RZUEVfQVNTT0NSRVE6CisJCQkvKiBwcmludGsoImFzc29jcmVxIik7ICovCisJCQl3bGFuZGV2LT5yeC5hc3NvY3JlcSsrOworCQkJYnJlYWs7CisJCWNhc2UgV0xBTl9GU1RZUEVfQVNTT0NSRVNQOgorCQkJLyogcHJpbnRrKCJhc3NvY3Jlc3AiKTsgKi8KKwkJCXdsYW5kZXYtPnJ4LmFzc29jcmVzcCsrOworCQkJYnJlYWs7CisJCWNhc2UgV0xBTl9GU1RZUEVfUkVBU1NPQ1JFUToKKwkJCS8qIHByaW50aygicmVhc3NvY3JlcSIpOyAqLworCQkJd2xhbmRldi0+cngucmVhc3NvY3JlcSsrOworCQkJYnJlYWs7CisJCWNhc2UgV0xBTl9GU1RZUEVfUkVBU1NPQ1JFU1A6CisJCQkvKiBwcmludGsoInJlYXNzb2NyZXNwIik7ICovCisJCQl3bGFuZGV2LT5yeC5yZWFzc29jcmVzcCsrOworCQkJYnJlYWs7CisJCWNhc2UgV0xBTl9GU1RZUEVfUFJPQkVSRVE6CisJCQkvKiBwcmludGsoInByb2JlcmVxIik7ICovCisJCQl3bGFuZGV2LT5yeC5wcm9iZXJlcSsrOworCQkJYnJlYWs7CisJCWNhc2UgV0xBTl9GU1RZUEVfUFJPQkVSRVNQOgorCQkJLyogcHJpbnRrKCJwcm9iZXJlc3AiKTsgKi8KKwkJCXdsYW5kZXYtPnJ4LnByb2JlcmVzcCsrOworCQkJYnJlYWs7CisJCWNhc2UgV0xBTl9GU1RZUEVfQkVBQ09OOgorCQkJLyogcHJpbnRrKCJiZWFjb24iKTsgKi8KKwkJCXdsYW5kZXYtPnJ4LmJlYWNvbisrOworCQkJYnJlYWs7CisJCWNhc2UgV0xBTl9GU1RZUEVfQVRJTToKKwkJCS8qIHByaW50aygiYXRpbSIpOyAqLworCQkJd2xhbmRldi0+cnguYXRpbSsrOworCQkJYnJlYWs7CisJCWNhc2UgV0xBTl9GU1RZUEVfRElTQVNTT0M6CisJCQkvKiBwcmludGsoImRpc2Fzc29jIik7ICovCisJCQl3bGFuZGV2LT5yeC5kaXNhc3NvYysrOworCQkJYnJlYWs7CisJCWNhc2UgV0xBTl9GU1RZUEVfQVVUSEVOOgorCQkJLyogcHJpbnRrKCJhdXRoZW4iKTsgKi8KKwkJCXdsYW5kZXYtPnJ4LmF1dGhlbisrOworCQkJYnJlYWs7CisJCWNhc2UgV0xBTl9GU1RZUEVfREVBVVRIRU46CisJCQkvKiBwcmludGsoImRlYXV0aGVuIik7ICovCisJCQl3bGFuZGV2LT5yeC5kZWF1dGhlbisrOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQkvKiBwcmludGsoInVua25vd24iKTsgKi8KKwkJCXdsYW5kZXYtPnJ4Lm1nbXRfdW5rbm93bisrOworCQkJYnJlYWs7CisJCX0KKwkJLyogcHJpbnRrKCJcbiIpOyAqLworCQlkcm9wID0gMjsKKwkJYnJlYWs7CisKKwljYXNlIFdMQU5fRlRZUEVfQ1RMOgorCQlpZiAoKHdsYW5kZXYtPm5ldGRldi0+ZmxhZ3MgJiBJRkZfUFJPTUlTQykgfHwKKwkJCSh3bGFuZGV2LT5uZXRkZXYtPmZsYWdzICYgSUZGX0FMTE1VTFRJKSkgeworCQkJZHJvcCA9IDE7CisJCQlicmVhazsKKwkJfQorCQlXTEFOX0xPR19ERUJVRygzLCAicngnZCBjdGw6XG4iKTsKKwkJd2xhbmRldi0+cnguY3RsKys7CisJCXN3aXRjaCggZnN0eXBlICkgeworCQljYXNlIFdMQU5fRlNUWVBFX1BTUE9MTDoKKwkJCS8qIHByaW50aygicHNwb2xsIik7ICovCisJCQl3bGFuZGV2LT5yeC5wc3BvbGwrKzsKKwkJCWJyZWFrOworCQljYXNlIFdMQU5fRlNUWVBFX1JUUzoKKwkJCS8qIHByaW50aygicnRzIik7ICovCisJCQl3bGFuZGV2LT5yeC5ydHMrKzsKKwkJCWJyZWFrOworCQljYXNlIFdMQU5fRlNUWVBFX0NUUzoKKwkJCS8qIHByaW50aygiY3RzIik7ICovCisJCQl3bGFuZGV2LT5yeC5jdHMrKzsKKwkJCWJyZWFrOworCQljYXNlIFdMQU5fRlNUWVBFX0FDSzoKKwkJCS8qIHByaW50aygiYWNrIik7ICovCisJCQl3bGFuZGV2LT5yeC5hY2srKzsKKwkJCWJyZWFrOworCQljYXNlIFdMQU5fRlNUWVBFX0NGRU5EOgorCQkJLyogcHJpbnRrKCJjZmVuZCIpOyAqLworCQkJd2xhbmRldi0+cnguY2ZlbmQrKzsKKwkJCWJyZWFrOworCQljYXNlIFdMQU5fRlNUWVBFX0NGRU5EQ0ZBQ0s6CisJCQkvKiBwcmludGsoImNmZW5kY2ZhY2siKTsgKi8KKwkJCXdsYW5kZXYtPnJ4LmNmZW5kY2ZhY2srKzsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJLyogcHJpbnRrKCJ1bmtub3duIik7ICovCisJCQl3bGFuZGV2LT5yeC5jdGxfdW5rbm93bisrOworCQkJYnJlYWs7CisJCX0KKwkJLyogcHJpbnRrKCJcbiIpOyAqLworCQlkcm9wID0gMjsKKwkJYnJlYWs7CisKKwljYXNlIFdMQU5fRlRZUEVfREFUQToKKwkJd2xhbmRldi0+cnguZGF0YSsrOworCQlzd2l0Y2goIGZzdHlwZSApIHsKKwkJY2FzZSBXTEFOX0ZTVFlQRV9EQVRBT05MWToKKwkJCXdsYW5kZXYtPnJ4LmRhdGFvbmx5Kys7CisJCQlicmVhazsKKwkJY2FzZSBXTEFOX0ZTVFlQRV9EQVRBX0NGQUNLOgorCQkJd2xhbmRldi0+cnguZGF0YV9jZmFjaysrOworCQkJYnJlYWs7CisJCWNhc2UgV0xBTl9GU1RZUEVfREFUQV9DRlBPTEw6CisJCQl3bGFuZGV2LT5yeC5kYXRhX2NmcG9sbCsrOworCQkJYnJlYWs7CisJCWNhc2UgV0xBTl9GU1RZUEVfREFUQV9DRkFDS19DRlBPTEw6CisJCQl3bGFuZGV2LT5yeC5kYXRhX19jZmFja19jZnBvbGwrKzsKKwkJCWJyZWFrOworCQljYXNlIFdMQU5fRlNUWVBFX05VTEw6CisJCQlXTEFOX0xPR19ERUJVRygzLCAicngnZCBkYXRhOm51bGxcbiIpOworCQkJd2xhbmRldi0+cngubnVsbCsrOworCQkJYnJlYWs7CisJCWNhc2UgV0xBTl9GU1RZUEVfQ0ZBQ0s6CisJCQlXTEFOX0xPR19ERUJVRygzLCAicngnZCBkYXRhOmNmYWNrXG4iKTsKKwkJCXdsYW5kZXYtPnJ4LmNmYWNrKys7CisJCQlicmVhazsKKwkJY2FzZSBXTEFOX0ZTVFlQRV9DRlBPTEw6CisJCQlXTEFOX0xPR19ERUJVRygzLCAicngnZCBkYXRhOmNmcG9sbFxuIik7CisJCQl3bGFuZGV2LT5yeC5jZnBvbGwrKzsKKwkJCWJyZWFrOworCQljYXNlIFdMQU5fRlNUWVBFX0NGQUNLX0NGUE9MTDoKKwkJCVdMQU5fTE9HX0RFQlVHKDMsICJyeCdkIGRhdGE6Y2ZhY2tfY2Zwb2xsXG4iKTsKKwkJCXdsYW5kZXYtPnJ4LmNmYWNrX2NmcG9sbCsrOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQkvKiBwcmludGsoInVua25vd24iKTsgKi8KKwkJCXdsYW5kZXYtPnJ4LmRhdGFfdW5rbm93bisrOworCQkJYnJlYWs7CisJCX0KKworCQlicmVhazsKKwl9CisJcmV0dXJuIGRyb3A7Cit9CisKKyNpZmRlZiBDT05GSUdfSE9UUExVRworLyogTm90aWZ5IHVzZXJzcGFjZSB3aGVuIGEgbmV0ZGV2aWNlIGV2ZW50IG9jY3VycywKKyAqIGJ5IHJ1bm5pbmcgJy9zYmluL2hvdHBsdWcgbmV0JyB3aXRoIGNlcnRhaW4KKyAqIGVudmlyb25tZW50IHZhcmlhYmxlcyBzZXQuCisgKi8KK2ludCBwODAyMTFfcnVuX3NiaW5faG90cGx1Zyh3bGFuZGV2aWNlX3QgKndsYW5kZXYsIGNoYXIgKmFjdGlvbikKK3sKKyAgICAgICAgY2hhciAqYXJndlszXSwgKmVudnBbN10sIGlmbmFtZVsxMiArIElGTkFNU0laXSwgYWN0aW9uX3N0clszMl07CisJY2hhciBuc2RuYW1lWzMyXSwgd2xhbl93ZXh0WzMyXTsKKyAgICAgICAgaW50IGk7CisKKwlpZiAod2xhbmRldikgeworCQlzcHJpbnRmKGlmbmFtZSwgIklOVEVSRkFDRT0lcyIsIHdsYW5kZXYtPm5hbWUpOworCQlzcHJpbnRmKG5zZG5hbWUsICJOU0ROQU1FPSVzIiwgd2xhbmRldi0+bnNkbmFtZSk7CisJfSBlbHNlIHsKKwkJc3ByaW50ZihpZm5hbWUsICJJTlRFUkZBQ0U9bnVsbCIpOworCQlzcHJpbnRmKG5zZG5hbWUsICJOU0ROQU1FPW51bGwiKTsKKwl9CisKKwlzcHJpbnRmKHdsYW5fd2V4dCwgIldMQU5fV0VYVD0lcyIsIHdsYW5fd2V4dF93cml0ZSA/ICJ5IiA6ICIiKTsKKyAgICAgICAgc3ByaW50ZihhY3Rpb25fc3RyLCAiQUNUSU9OPSVzIiwgYWN0aW9uKTsKKworICAgICAgICBpID0gMDsKKyAgICAgICAgYXJndltpKytdID0gaG90cGx1Z19wYXRoOworICAgICAgICBhcmd2W2krK10gPSAid2xhbiI7CisgICAgICAgIGFyZ3ZbaV0gPSBOVUxMOworCisgICAgICAgIGkgPSAwOworICAgICAgICAvKiBtaW5pbWFsIGNvbW1hbmQgZW52aXJvbm1lbnQgKi8KKyAgICAgICAgZW52cCBbaSsrXSA9ICJIT01FPS8iOworICAgICAgICBlbnZwIFtpKytdID0gIlBBVEg9L3NiaW46L2JpbjovdXNyL3NiaW46L3Vzci9iaW4iOworICAgICAgICBlbnZwIFtpKytdID0gaWZuYW1lOworICAgICAgICBlbnZwIFtpKytdID0gYWN0aW9uX3N0cjsKKyAgICAgICAgZW52cCBbaSsrXSA9IG5zZG5hbWU7CisgICAgICAgIGVudnAgW2krK10gPSB3bGFuX3dleHQ7CisgICAgICAgIGVudnAgW2ldID0gTlVMTDsKKworI2lmIChMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigyLDUsNjIpKQorICAgICAgICByZXR1cm4gY2FsbF91c2VybW9kZWhlbHBlcihhcmd2IFswXSwgYXJndiwgZW52cCk7CisjZWxzZQorICAgICAgICByZXR1cm4gY2FsbF91c2VybW9kZWhlbHBlcihhcmd2IFswXSwgYXJndiwgZW52cCwgMCk7CisjZW5kaWYKK30KKworI2VuZGlmCisKKwordm9pZCAgICBwODAyMTFfc3VzcGVuZCh3bGFuZGV2aWNlX3QgKndsYW5kZXYpCit7CisJREJGRU5URVI7CisKKyNpZmRlZiBDT05GSUdfSE9UUExVRworCXA4MDIxMV9ydW5fc2Jpbl9ob3RwbHVnKHdsYW5kZXYsIFdMQU5fSE9UUExVR19TVVNQRU5EKTsKKyNlbmRpZgorCisJREJGRVhJVDsKK30KKwordm9pZCAgICBwODAyMTFfcmVzdW1lKHdsYW5kZXZpY2VfdCAqd2xhbmRldikKK3sKKwlEQkZFTlRFUjsKKworI2lmZGVmIENPTkZJR19IT1RQTFVHCisJcDgwMjExX3J1bl9zYmluX2hvdHBsdWcod2xhbmRldiwgV0xBTl9IT1RQTFVHX1JFU1VNRSk7CisjZW5kaWYKKworCURCRkVYSVQ7Cit9CisKK3N0YXRpYyB2b2lkIHA4MDIxMWtuZXRkZXZfdHhfdGltZW91dCggbmV0ZGV2aWNlX3QgKm5ldGRldikKK3sKKwl3bGFuZGV2aWNlX3QJKndsYW5kZXYgPSAod2xhbmRldmljZV90KiluZXRkZXYtPnByaXY7CisJREJGRU5URVI7CisKKwlpZiAod2xhbmRldi0+dHhfdGltZW91dCkgeworCQl3bGFuZGV2LT50eF90aW1lb3V0KHdsYW5kZXYpOworCX0gZWxzZSB7CisJCVdMQU5fTE9HX1dBUk5JTkcoIkltcGxlbWVudCB0eF90aW1lb3V0IGZvciAlc1xuIiwKKwkJCQkgd2xhbmRldi0+bnNkbmFtZSk7CisJCXA4MDIxMW5ldGRldl93YWtlX3F1ZXVlKHdsYW5kZXYpOworCX0KKworCURCRkVYSVQ7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wODAyMTFuZXRkZXYuaCBiL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3A4MDIxMW5ldGRldi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliMmUwY2QKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wODAyMTFuZXRkZXYuaApAQCAtMCwwICsxLDMzNiBAQAorLyogcDgwMjExbmV0ZGV2LmgKKyoKKyogV0xBTiBuZXQgZGV2aWNlIHN0cnVjdHVyZSBhbmQgZnVuY3Rpb25zCisqCisqIENvcHlyaWdodCAoQykgMTk5OSBBYnNvbHV0ZVZhbHVlIFN5c3RlbXMsIEluYy4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqCisqIGxpbnV4LXdsYW4KKyoKKyogICBUaGUgY29udGVudHMgb2YgdGhpcyBmaWxlIGFyZSBzdWJqZWN0IHRvIHRoZSBNb3ppbGxhIFB1YmxpYworKiAgIExpY2Vuc2UgVmVyc2lvbiAxLjEgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlCisqICAgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mCisqICAgdGhlIExpY2Vuc2UgYXQgaHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvCisqCisqICAgU29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTCisqICAgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvcgorKiAgIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZworKiAgIHJpZ2h0cyBhbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisqCisqICAgQWx0ZXJuYXRpdmVseSwgdGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBtYXkgYmUgdXNlZCB1bmRlciB0aGUKKyogICB0ZXJtcyBvZiB0aGUgR05VIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiAodGhlICJHUEwiKSwgaW4gd2hpY2gKKyogICBjYXNlIHRoZSBwcm92aXNpb25zIG9mIHRoZSBHUEwgYXJlIGFwcGxpY2FibGUgaW5zdGVhZCBvZiB0aGUKKyogICBhYm92ZS4gIElmIHlvdSB3aXNoIHRvIGFsbG93IHRoZSB1c2Ugb2YgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZQorKiAgIG9ubHkgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHUEwgYW5kIG5vdCB0byBhbGxvdyBvdGhlcnMgdG8gdXNlCisqICAgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSB1bmRlciB0aGUgTVBMLCBpbmRpY2F0ZSB5b3VyIGRlY2lzaW9uCisqICAgYnkgZGVsZXRpbmcgdGhlIHByb3Zpc2lvbnMgYWJvdmUgYW5kIHJlcGxhY2UgdGhlbSB3aXRoIHRoZSBub3RpY2UKKyogICBhbmQgb3RoZXIgcHJvdmlzaW9ucyByZXF1aXJlZCBieSB0aGUgR1BMLiAgSWYgeW91IGRvIG5vdCBkZWxldGUKKyogICB0aGUgcHJvdmlzaW9ucyBhYm92ZSwgYSByZWNpcGllbnQgbWF5IHVzZSB5b3VyIHZlcnNpb24gb2YgdGhpcworKiAgIGZpbGUgdW5kZXIgZWl0aGVyIHRoZSBNUEwgb3IgdGhlIEdQTC4KKyoKKyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyoKKyogSW5xdWlyaWVzIHJlZ2FyZGluZyB0aGUgbGludXgtd2xhbiBPcGVuIFNvdXJjZSBwcm9qZWN0IGNhbiBiZQorKiBtYWRlIGRpcmVjdGx5IHRvOgorKgorKiBBYnNvbHV0ZVZhbHVlIFN5c3RlbXMgSW5jLgorKiBpbmZvQGxpbnV4LXdsYW4uY29tCisqIGh0dHA6Ly93d3cubGludXgtd2xhbi5jb20KKyoKKyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyoKKyogUG9ydGlvbnMgb2YgdGhlIGRldmVsb3BtZW50IG9mIHRoaXMgc29mdHdhcmUgd2VyZSBmdW5kZWQgYnkKKyogSW50ZXJzaWwgQ29ycG9yYXRpb24gYXMgcGFydCBvZiBQUklTTShSKSBjaGlwc2V0IHByb2R1Y3QgZGV2ZWxvcG1lbnQuCisqCisqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqCisqIFRoaXMgZmlsZSBkZWNsYXJlcyB0aGUgc3RydWN0dXJlIHR5cGUgdGhhdCByZXByZXNlbnRzIGVhY2ggd2xhbgorKiBpbnRlcmZhY2UuCisqCisqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqLworCisjaWZuZGVmIF9MSU5VWF9QODAyMTFORVRERVZfSAorI2RlZmluZSBfTElOVVhfUDgwMjExTkVUREVWX0gKKworI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L3dpcmVsZXNzLmg+CisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKiBDb25zdGFudHMgKi8KKworI2RlZmluZSBXTEFOX0RFVklDRV9DTE9TRUQJMAorI2RlZmluZSBXTEFOX0RFVklDRV9PUEVOCTEKKworI2RlZmluZSBXTEFOX01BQ01PREVfTk9ORQkwCisjZGVmaW5lIFdMQU5fTUFDTU9ERV9JQlNTX1NUQQkxCisjZGVmaW5lIFdMQU5fTUFDTU9ERV9FU1NfU1RBCTIKKyNkZWZpbmUgV0xBTl9NQUNNT0RFX0VTU19BUAkzCisKKy8qIE1TRCBTdGF0ZXMgKi8KKyNkZWZpbmUgV0xBTl9NU0RfU1RBUlQJCQktMQorI2RlZmluZSBXTEFOX01TRF9EUklWRVJMT0FERUQJCTAKKyNkZWZpbmUgV0xBTl9NU0RfSFdQUkVTRU5UX1BFTkRJTkcJMQorI2RlZmluZSBXTEFOX01TRF9IV0ZBSUwJCQkyCisjZGVmaW5lIFdMQU5fTVNEX0hXUFJFU0VOVAkJMworI2RlZmluZSBXTEFOX01TRF9GV0xPQURfUEVORElORwkJNAorI2RlZmluZSBXTEFOX01TRF9GV0xPQUQJCQk1CisjZGVmaW5lIFdMQU5fTVNEX1JVTk5JTkdfUEVORElORwk2CisjZGVmaW5lIFdMQU5fTVNEX1JVTk5JTkcJCTcKKworI2lmbmRlZiBFVEhfUF9FQ09ORVQKKyNkZWZpbmUgRVRIX1BfRUNPTkVUICAgMHgwMDE4ICAgIC8qIG5lZWRlZCBmb3IgMi4yLngga2VybmVscyAqLworI2VuZGlmCisKKyNkZWZpbmUgRVRIX1BfODAyMTFfUkFXICAgICAgICAoRVRIX1BfRUNPTkVUICsgMSkKKworI2lmbmRlZiBBUlBIUkRfSUVFRTgwMjExCisjZGVmaW5lIEFSUEhSRF9JRUVFODAyMTEgODAxICAgICAvKiBrZXJuZWwgMi40LjYgKi8KKyNlbmRpZgorCisjaWZuZGVmIEFSUEhSRF9JRUVFODAyMTFfUFJJU00gIC8qIGtlcm5lbCAyLjQuMTggKi8KKyNkZWZpbmUgQVJQSFJEX0lFRUU4MDIxMV9QUklTTSA4MDIKKyNlbmRpZgorCisvKi0tLSBOU0QgQ2FwYWJpbGl0aWVzIEZsYWdzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZGVmaW5lIFA4MDIxMV9OU0RDQVBfSEFSRFdBUkVXRVAgICAgICAgICAgIDB4MDEgIC8qIGhhcmR3YXJlIHdlcCBlbmdpbmUgKi8KKyNkZWZpbmUgUDgwMjExX05TRENBUF9USUVEV0VQICAgICAgICAgICAgICAgMHgwMiAgLyogY2FuJ3QgZGVjb3VwbGUgZW4vZGUgKi8KKyNkZWZpbmUgUDgwMjExX05TRENBUF9OT0hPU1RXRVAgICAgICAgICAgICAgMHgwNCAgLyogbXVzdCB1c2UgaGFyZHdhcmUgd2VwICovCisjZGVmaW5lIFA4MDIxMV9OU0RDQVBfUEJDQyAgICAgICAgICAgICAgICAgIDB4MDggIC8qIGhhcmR3YXJlIHN1cHBvcnRzIFBCQ0MgKi8KKyNkZWZpbmUgUDgwMjExX05TRENBUF9TSE9SVF9QUkVBTUJMRSAgICAgICAgMHgxMCAgLyogaGFyZHdhcmUgc3VwcG9ydHMgKi8KKyNkZWZpbmUgUDgwMjExX05TRENBUF9BR0lMSVRZICAgICAgICAgICAgICAgMHgyMCAgLyogaGFyZHdhcmUgc3VwcG9ydHMgKi8KKyNkZWZpbmUgUDgwMjExX05TRENBUF9BUF9SRVRSQU5TTUlUICAgICAgICAgMHg0MCAgLyogbnNkIGhhbmRsZXMgcmV0cmFuc21pdHMgKi8KKyNkZWZpbmUgUDgwMjExX05TRENBUF9IV0ZSQUdNRU5UICAgICAgICAgICAgMHg4MCAgLyogbnNkIGhhbmRsZXMgZnJhZy9kZWZyYWcgKi8KKyNkZWZpbmUgUDgwMjExX05TRENBUF9BVVRPSk9JTiAgICAgICAgICAgICAgMHgxMDAgIC8qIG5zZCBkb2VzIGF1dG9qb2luICovCisjZGVmaW5lIFA4MDIxMV9OU0RDQVBfTk9TQ0FOICAgICAgICAgICAgICAgIDB4MjAwICAvKiBuc2QgY2FuIHNjYW4gKi8KKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKy8qIE1hY3JvcyAqLworCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworLyogVHlwZXMgKi8KKworLyogUmVjZWl2ZWQgZnJhbWUgc3RhdGlzdGljcyAqLwordHlwZWRlZiBzdHJ1Y3QgcDgwMjExX2ZybXJ4X3QKK3sKKwlVSU5UMzIJbWdtdDsKKwlVSU5UMzIJYXNzb2NyZXE7CisJVUlOVDMyCWFzc29jcmVzcDsKKwlVSU5UMzIJcmVhc3NvY3JlcTsKKwlVSU5UMzIJcmVhc3NvY3Jlc3A7CisJVUlOVDMyCXByb2JlcmVxOworCVVJTlQzMglwcm9iZXJlc3A7CisJVUlOVDMyCWJlYWNvbjsKKwlVSU5UMzIJYXRpbTsKKwlVSU5UMzIJZGlzYXNzb2M7CisJVUlOVDMyCWF1dGhlbjsKKwlVSU5UMzIJZGVhdXRoZW47CisJVUlOVDMyCW1nbXRfdW5rbm93bjsKKwlVSU5UMzIJY3RsOworCVVJTlQzMglwc3BvbGw7CisJVUlOVDMyCXJ0czsKKwlVSU5UMzIJY3RzOworCVVJTlQzMglhY2s7CisJVUlOVDMyCWNmZW5kOworCVVJTlQzMgljZmVuZGNmYWNrOworCVVJTlQzMgljdGxfdW5rbm93bjsKKwlVSU5UMzIJZGF0YTsKKwlVSU5UMzIJZGF0YW9ubHk7CisJVUlOVDMyCWRhdGFfY2ZhY2s7CisJVUlOVDMyCWRhdGFfY2Zwb2xsOworCVVJTlQzMglkYXRhX19jZmFja19jZnBvbGw7CisJVUlOVDMyCW51bGw7CisJVUlOVDMyCWNmYWNrOworCVVJTlQzMgljZnBvbGw7CisJVUlOVDMyCWNmYWNrX2NmcG9sbDsKKwlVSU5UMzIJZGF0YV91bmtub3duOworCVVJTlQzMiAgZGVjcnlwdDsKKwlVSU5UMzIgIGRlY3J5cHRfZXJyOworfSBwODAyMTFfZnJtcnhfdDsKKworI2lmZGVmIFdJUkVMRVNTX0VYVAorLyogY2FsbGVkIGJ5IC9wcm9jL25ldC93aXJlbGVzcyAqLworc3RydWN0IGl3X3N0YXRpc3RpY3MqIHA4MDIxMXdleHRfZ2V0X3dpcmVsZXNzX3N0YXRzKG5ldGRldmljZV90ICpkZXYpOworLyogd2lyZWxlc3MgZXh0ZW5zaW9ucycgaW9jdGxzICovCitpbnQgcDgwMjExd2V4dF9zdXBwb3J0X2lvY3RsKG5ldGRldmljZV90ICpkZXYsIHN0cnVjdCBpZnJlcSAqaWZyLCBpbnQgY21kKTsKKyNpZiBXSVJFTEVTU19FWFQgPiAxMgorZXh0ZXJuIHN0cnVjdCBpd19oYW5kbGVyX2RlZiBwODAyMTF3ZXh0X2hhbmRsZXJfZGVmOworI2VuZGlmCisKK2ludCBwODAyMTF3ZXh0X2V2ZW50X2Fzc29jaWF0ZWQoc3RydWN0IHdsYW5kZXZpY2UgKndsYW5kZXYsIGludCBhc3NvYyk7CisKKyNlbmRpZiAvKiB3aXJlbGVzcyBleHRlbnNpb25zICovCisKKy8qIFdFUCBzdHVmZiAqLworI2RlZmluZSBOVU1fV0VQS0VZUyA0CisjZGVmaW5lIE1BWF9LRVlMRU4gMzIKKworI2RlZmluZSBIT1NUV0VQX0RFRkFVTFRLRVlfTUFTSyAoQklUMXxCSVQwKQorI2RlZmluZSBIT1NUV0VQX0RFQ1JZUFQgIEJJVDQKKyNkZWZpbmUgSE9TVFdFUF9FTkNSWVBUICBCSVQ1CisjZGVmaW5lIEhPU1RXRVBfUFJJVkFDWUlOVk9LRUQgQklUNgorI2RlZmluZSBIT1NUV0VQX0VYQ0xVREVVTkVOQ1JZUFRFRCBCSVQ3CisKK2V4dGVybiBpbnQgd2xhbl93YXRjaGRvZzsKK2V4dGVybiBpbnQgd2xhbl93ZXh0X3dyaXRlOworCisvKiBXTEFOIGRldmljZSB0eXBlICovCit0eXBlZGVmIHN0cnVjdCB3bGFuZGV2aWNlCit7CisJc3RydWN0IHdsYW5kZXZpY2UJKm5leHQ7CQkvKiBsaW5rIGZvciBsaXN0IG9mIGRldmljZXMgKi8KKwl2b2lkCQkJKnByaXY7CQkvKiBwcml2YXRlIGRhdGEgZm9yIE1TRCAqLworCisJLyogU3Vic3lzdGVtIFN0YXRlICovCisJY2hhcgkJbmFtZVtXTEFOX0RFVk5BTUVMRU5fTUFYXTsgLyogRGV2IG5hbWUsIGZyb20gcmVnaXN0ZXJfd2xhbmRldigpKi8KKwljaGFyCQkqbnNkbmFtZTsKKworCVVJTlQzMiAgICAgICAgICBzdGF0ZTsgICAgICAgICAgLyogRGV2aWNlIEkvRiBzdGF0ZSAob3Blbi9jbG9zZWQpICovCisJVUlOVDMyCQltc2RzdGF0ZTsJLyogc3RhdGUgb2YgdW5kZXJseWluZyBkcml2ZXIgKi8KKwlVSU5UMzIJCWh3cmVtb3ZlZDsJLyogSGFzIHRoZSBodyBiZWVuIHlhbmtlZCBvdXQ/ICovCisKKwkvKiBIYXJkd2FyZSBjb25maWcgKi8KKwlVSU5UCQlpcnE7CisJVUlOVAkJaW9iYXNlOworCVVJTlQJCW1lbWJhc2U7CisJVUlOVDMyICAgICAgICAgIG5zZGNhcHM7ICAvKiBOU0QgQ2FwYWJpbGl0aWVzIGZsYWdzICovCisKKwkvKiBDb25maWcgdmFycyAqLworCVVJTlQJCWV0aGNvbnY7CisKKwkvKiBkZXZpY2UgbWV0aG9kcyAoaW5pdCBieSBNU0QsIHVzZWQgYnkgcDgwMjExICovCisJaW50CQkoKm9wZW4pKHN0cnVjdCB3bGFuZGV2aWNlICp3bGFuZGV2KTsKKwlpbnQJCSgqY2xvc2UpKHN0cnVjdCB3bGFuZGV2aWNlICp3bGFuZGV2KTsKKwl2b2lkCQkoKnJlc2V0KShzdHJ1Y3Qgd2xhbmRldmljZSAqd2xhbmRldiApOworCWludAkJKCp0eGZyYW1lKShzdHJ1Y3Qgd2xhbmRldmljZSAqd2xhbmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgcDgwMjExX2hkcl90ICpwODAyMTFfaGRyLCBwODAyMTFfbWV0YXdlcF90ICpwODAyMTFfd2VwKTsKKwlpbnQJCSgqbWxtZXJlcXVlc3QpKHN0cnVjdCB3bGFuZGV2aWNlICp3bGFuZGV2LCBwODAyMTFtc2dfdCAqbXNnKTsKKwlpbnQgICAgICAgICAgICAgKCpzZXRfbXVsdGljYXN0X2xpc3QpKHN0cnVjdCB3bGFuZGV2aWNlICp3bGFuZGV2LAorCQkJCQkgICAgICBuZXRkZXZpY2VfdCAqZGV2KTsKKwl2b2lkCQkoKnR4X3RpbWVvdXQpKHN0cnVjdCB3bGFuZGV2aWNlICp3bGFuZGV2KTsKKworI2lmZGVmIENPTkZJR19QUk9DX0ZTCisJaW50ICAgICAgICAgICAgICgqbnNkX3Byb2NfcmVhZCkoY2hhciAqcGFnZSwgY2hhciAqKnN0YXJ0LCBvZmZfdCBvZmZzZXQsIGludCBjb3VudCwgaW50CSplb2YsIHZvaWQgKmRhdGEpOworI2VuZGlmCisKKwkvKiA4MDIuMTEgU3RhdGUgKi8KKwlVSU5UOAkJYnNzaWRbV0xBTl9CU1NJRF9MRU5dOworCXA4MDIxMXBzdHIzMl90CXNzaWQ7CisJVUlOVDMyCQltYWNtb2RlOworCWludCAgICAgICAgICAgICBsaW5rc3RhdHVzOworCWludCAgICAgICAgICAgICBzaG9ydHByZWFtYmxlOyAgLyogQyBib29sICovCisKKwkvKiBXRVAgU3RhdGUgKi8KKwlVSU5UOCB3ZXBfa2V5c1tOVU1fV0VQS0VZU11bTUFYX0tFWUxFTl07CisJVUlOVDggd2VwX2tleWxlbnNbTlVNX1dFUEtFWVNdOworCWludCAgIGhvc3R3ZXA7CisKKwkvKiBSZXF1ZXN0L0NvbmZpcm0gaS9mIHN0YXRlICh1c2VkIGJ5IHA4MDIxMSkgKi8KKwl1bnNpZ25lZCBsb25nCQlyZXF1ZXN0X3BlbmRpbmc7IC8qIGZsYWcsIGFjY2VzcyBhdG9taWNhbGx5ICovCisKKwkvKiBuZXRsaW5rIHNvY2tldCAqLworCS8qIHF1ZXVlIGZvciBpbmRpY2F0aW9ucyB3YWl0aW5nIGZvciBjbWQgY29tcGxldGlvbiAqLworCS8qIExpbnV4IG5ldGRldmljZSBhbmQgc3VwcG9ydCAqLworCW5ldGRldmljZV90CQkqbmV0ZGV2OwkvKiBwdHIgdG8gbGludXggbmV0ZGV2aWNlICovCisJc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgbGludXhfc3RhdHM7CisKKyNpZmRlZiBDT05GSUdfUFJPQ19GUworCS8qIFByb2NmcyBzdXBwb3J0ICovCisJc3RydWN0IHByb2NfZGlyX2VudHJ5CSpwcm9jZGlyOworCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeQkqcHJvY3dsYW5kZXY7CisjZW5kaWYKKworCS8qIFJ4IGJvdHRvbSBoYWxmICovCisJc3RydWN0IHRhc2tsZXRfc3RydWN0CXJ4X2JoOworCisJc3RydWN0IHNrX2J1ZmZfaGVhZAluc2RfcnhxOworCisJLyogODAyLjExIGRldmljZSBzdGF0aXN0aWNzICovCisJc3RydWN0IHA4MDIxMV9mcm1yeF90CXJ4OworCisvKiBjb21wYXRpYmlsaXR5IHRvIHdpcmVsZXNzIGV4dGVuc2lvbnMgKi8KKyNpZmRlZiBXSVJFTEVTU19FWFQKKwlzdHJ1Y3QgaXdfc3RhdGlzdGljcwl3c3RhdHM7CisKKwkvKiBqa3JpZWdsOiBpd3NweSBmaWVsZHMgKi8KKyAgICAgICAgVUlOVDgJCQlzcHlfbnVtYmVyOworICAgICAgICBjaGFyCQkJc3B5X2FkZHJlc3NbSVdfTUFYX1NQWV1bRVRIX0FMRU5dOworICAgICAgICBzdHJ1Y3QgaXdfcXVhbGl0eSAgICAgICBzcHlfc3RhdFtJV19NQVhfU1BZXTsKKworI2VuZGlmCisKK30gd2xhbmRldmljZV90OworCisvKiBXRVAgc3R1ZmYgKi8KK2ludCB3ZXBfY2hhbmdlX2tleSh3bGFuZGV2aWNlX3QgKndsYW5kZXYsIGludCBrZXludW0sIFVJTlQ4KiBrZXksIGludCBrZXlsZW4pOworaW50IHdlcF9kZWNyeXB0KHdsYW5kZXZpY2VfdCAqd2xhbmRldiwgVUlOVDggKmJ1ZiwgVUlOVDMyIGxlbiwgaW50IGtleV9vdmVycmlkZSwgVUlOVDggKml2LCBVSU5UOCAqaWN2KTsKK2ludCB3ZXBfZW5jcnlwdCh3bGFuZGV2aWNlX3QgKndsYW5kZXYsIFVJTlQ4ICpidWYsIFVJTlQ4ICpkc3QsIFVJTlQzMiBsZW4sIGludCBrZXludW0sIFVJTlQ4ICppdiwgVUlOVDggKmljdik7CisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKiBFeHRlcm5zICovCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKiBGdW5jdGlvbiBEZWNsYXJhdGlvbnMgKi8KKwordm9pZAlwODAyMTFuZXRkZXZfc3RhcnR1cCh2b2lkKTsKK3ZvaWQJcDgwMjExbmV0ZGV2X3NodXRkb3duKHZvaWQpOworaW50CXdsYW5fc2V0dXAod2xhbmRldmljZV90ICp3bGFuZGV2KTsKK2ludAl3bGFuX3Vuc2V0dXAod2xhbmRldmljZV90ICp3bGFuZGV2KTsKK2ludAlyZWdpc3Rlcl93bGFuZGV2KHdsYW5kZXZpY2VfdCAqd2xhbmRldik7CitpbnQJdW5yZWdpc3Rlcl93bGFuZGV2KHdsYW5kZXZpY2VfdCAqd2xhbmRldik7Cit2b2lkCXA4MDIxMW5ldGRldl9yeCh3bGFuZGV2aWNlX3QgKndsYW5kZXYsIHN0cnVjdCBza19idWZmICpza2IpOwordm9pZAlwODAyMTFuZXRkZXZfaHdyZW1vdmVkKHdsYW5kZXZpY2VfdCAqd2xhbmRldik7Cit2b2lkICAgIHA4MDIxMV9zdXNwZW5kKHdsYW5kZXZpY2VfdCAqd2xhbmRldik7Cit2b2lkICAgIHA4MDIxMV9yZXN1bWUod2xhbmRldmljZV90ICp3bGFuZGV2KTsKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKy8qIEZ1bmN0aW9uIERlZmluaXRpb25zICovCisKK3N0YXRpYyBpbmxpbmUgdm9pZAorcDgwMjExbmV0ZGV2X3N0b3BfcXVldWUod2xhbmRldmljZV90ICp3bGFuZGV2KQoreworCWlmICggIXdsYW5kZXYgKSByZXR1cm47CisJaWYgKCAhd2xhbmRldi0+bmV0ZGV2ICkgcmV0dXJuOworI2lmIChMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigyLDMsMzgpICkKKwl3bGFuZGV2LT5uZXRkZXYtPnRidXN5ID0gMTsKKwl3bGFuZGV2LT5uZXRkZXYtPnN0YXJ0ID0gMDsKKyNlbHNlCisJbmV0aWZfc3RvcF9xdWV1ZSh3bGFuZGV2LT5uZXRkZXYpOworI2VuZGlmCit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorcDgwMjExbmV0ZGV2X3N0YXJ0X3F1ZXVlKHdsYW5kZXZpY2VfdCAqd2xhbmRldikKK3sKKwlpZiAoICF3bGFuZGV2ICkgcmV0dXJuOworCWlmICggIXdsYW5kZXYtPm5ldGRldiApIHJldHVybjsKKyNpZiAoTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiwzLDM4KSApCisJd2xhbmRldi0+bmV0ZGV2LT50YnVzeSA9IDA7CisJd2xhbmRldi0+bmV0ZGV2LT5zdGFydCA9IDE7CisjZWxzZQorCW5ldGlmX3N0YXJ0X3F1ZXVlKHdsYW5kZXYtPm5ldGRldik7CisjZW5kaWYKK30KKworc3RhdGljIGlubGluZSB2b2lkCitwODAyMTFuZXRkZXZfd2FrZV9xdWV1ZSh3bGFuZGV2aWNlX3QgKndsYW5kZXYpCit7CisJaWYgKCAhd2xhbmRldiApIHJldHVybjsKKwlpZiAoICF3bGFuZGV2LT5uZXRkZXYgKSByZXR1cm47CisjaWYgKExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDIsMywzOCkgKQorCXdsYW5kZXYtPm5ldGRldi0+dGJ1c3kgPSAwOworCW1hcmtfYmgoTkVUX0JIKTsKKyNlbHNlCisJbmV0aWZfd2FrZV9xdWV1ZSh3bGFuZGV2LT5uZXRkZXYpOworI2VuZGlmCit9CisKKyNpZmRlZiBDT05GSUdfSE9UUExVRworI2RlZmluZSBXTEFOX0hPVFBMVUdfUkVHSVNURVIgInJlZ2lzdGVyIgorI2RlZmluZSBXTEFOX0hPVFBMVUdfUkVNT1ZFICAgInJlbW92ZSIKKyNkZWZpbmUgV0xBTl9IT1RQTFVHX1NUQVJUVVAgICJzdGFydHVwIgorI2RlZmluZSBXTEFOX0hPVFBMVUdfU0hVVERPV04gInNodXRkb3duIgorI2RlZmluZSBXTEFOX0hPVFBMVUdfU1VTUEVORCAic3VzcGVuZCIKKyNkZWZpbmUgV0xBTl9IT1RQTFVHX1JFU1VNRSAicmVzdW1lIgoraW50IHA4MDIxMV9ydW5fc2Jpbl9ob3RwbHVnKHdsYW5kZXZpY2VfdCAqd2xhbmRldiwgY2hhciAqYWN0aW9uKTsKKyNlbmRpZgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3A4MDIxMXJlcS5jIGIvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcDgwMjExcmVxLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDIzM2FiZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3A4MDIxMXJlcS5jCkBAIC0wLDAgKzEsMzI5IEBACisvKiBzcmMvcDgwMjExL3A4MDIxMXJlcS5jCisqCisqIFJlcXVlc3QvSW5kaWNhdGlvbi9NYWNNZ210IGludGVyZmFjZSBoYW5kbGluZyBmdW5jdGlvbnMKKyoKKyogQ29weXJpZ2h0IChDKSAxOTk5IEFic29sdXRlVmFsdWUgU3lzdGVtcywgSW5jLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyoKKyogbGludXgtd2xhbgorKgorKiAgIFRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgYXJlIHN1YmplY3QgdG8gdGhlIE1vemlsbGEgUHVibGljCisqICAgTGljZW5zZSBWZXJzaW9uIDEuMSAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUKKyogICBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YKKyogICB0aGUgTGljZW5zZSBhdCBodHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC8KKyoKKyogICBTb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMKKyogICBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yCisqICAgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nCisqICAgcmlnaHRzIGFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyoKKyogICBBbHRlcm5hdGl2ZWx5LCB0aGUgY29udGVudHMgb2YgdGhpcyBmaWxlIG1heSBiZSB1c2VkIHVuZGVyIHRoZQorKiAgIHRlcm1zIG9mIHRoZSBHTlUgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyICh0aGUgIkdQTCIpLCBpbiB3aGljaAorKiAgIGNhc2UgdGhlIHByb3Zpc2lvbnMgb2YgdGhlIEdQTCBhcmUgYXBwbGljYWJsZSBpbnN0ZWFkIG9mIHRoZQorKiAgIGFib3ZlLiAgSWYgeW91IHdpc2ggdG8gYWxsb3cgdGhlIHVzZSBvZiB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlCisqICAgb25seSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdQTCBhbmQgbm90IHRvIGFsbG93IG90aGVycyB0byB1c2UKKyogICB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIHVuZGVyIHRoZSBNUEwsIGluZGljYXRlIHlvdXIgZGVjaXNpb24KKyogICBieSBkZWxldGluZyB0aGUgcHJvdmlzaW9ucyBhYm92ZSBhbmQgcmVwbGFjZSB0aGVtIHdpdGggdGhlIG5vdGljZQorKiAgIGFuZCBvdGhlciBwcm92aXNpb25zIHJlcXVpcmVkIGJ5IHRoZSBHUEwuICBJZiB5b3UgZG8gbm90IGRlbGV0ZQorKiAgIHRoZSBwcm92aXNpb25zIGFib3ZlLCBhIHJlY2lwaWVudCBtYXkgdXNlIHlvdXIgdmVyc2lvbiBvZiB0aGlzCisqICAgZmlsZSB1bmRlciBlaXRoZXIgdGhlIE1QTCBvciB0aGUgR1BMLgorKgorKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKgorKiBJbnF1aXJpZXMgcmVnYXJkaW5nIHRoZSBsaW51eC13bGFuIE9wZW4gU291cmNlIHByb2plY3QgY2FuIGJlCisqIG1hZGUgZGlyZWN0bHkgdG86CisqCisqIEFic29sdXRlVmFsdWUgU3lzdGVtcyBJbmMuCisqIGluZm9AbGludXgtd2xhbi5jb20KKyogaHR0cDovL3d3dy5saW51eC13bGFuLmNvbQorKgorKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKgorKiBQb3J0aW9ucyBvZiB0aGUgZGV2ZWxvcG1lbnQgb2YgdGhpcyBzb2Z0d2FyZSB3ZXJlIGZ1bmRlZCBieQorKiBJbnRlcnNpbCBDb3Jwb3JhdGlvbiBhcyBwYXJ0IG9mIFBSSVNNKFIpIGNoaXBzZXQgcHJvZHVjdCBkZXZlbG9wbWVudC4KKyoKKyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyoKKyogVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBmdW5jdGlvbnMsIHR5cGVzLCBhbmQgbWFjcm9zIHRvIHN1cHBvcnQgdGhlCisqIE1MTUUgcmVxdWVzdCBpbnRlcmZhY2UgdGhhdCdzIGltcGxlbWVudGVkIHZpYSB0aGUgZGV2aWNlIGlvY3Rscy4KKyoKKyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyovCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKiBTeXN0ZW0gSW5jbHVkZXMgKi8KKworCisjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgorCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC93aXJlbGVzcy5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CisjaW5jbHVkZSA8bmV0L3NvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRsaW5rLmg+CisKKyNpbmNsdWRlICJ2ZXJzaW9uLmgiCisjaW5jbHVkZSAid2xhbl9jb21wYXQuaCIKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKy8qIFByb2plY3QgSW5jbHVkZXMgKi8KKworI2luY2x1ZGUgInA4MDIxMXR5cGVzLmgiCisjaW5jbHVkZSAicDgwMjExaGRyLmgiCisjaW5jbHVkZSAicDgwMjExbWdtdC5oIgorI2luY2x1ZGUgInA4MDIxMWNvbnYuaCIKKyNpbmNsdWRlICJwODAyMTFtc2cuaCIKKyNpbmNsdWRlICJwODAyMTFuZXRkZXYuaCIKKyNpbmNsdWRlICJwODAyMTFpb2N0bC5oIgorI2luY2x1ZGUgInA4MDIxMW1ldGFkZWYuaCIKKyNpbmNsdWRlICJwODAyMTFtZXRhc3RydWN0LmgiCisjaW5jbHVkZSAicDgwMjExcmVxLmgiCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKiBMb2NhbCBDb25zdGFudHMgKi8KKworLyogTWF4aW11bSBhbW91bnQgb2YgdGltZSB3ZSdsbCB3YWl0IGZvciBhIHJlcXVlc3QgdG8gY29tcGxldGUgKi8KKyNkZWZpbmUgUDgwMjExUkVRX01BWFRJTUUJMypIWgkvKiAzIHNlY29uZHMgKi8KKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKy8qIExvY2FsIE1hY3JvcyAqLworCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworLyogTG9jYWwgVHlwZXMgKi8KKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKy8qIExvY2FsIFN0YXRpYyBEZWZpbml0aW9ucyAqLworCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworLyogTG9jYWwgRnVuY3Rpb24gRGVjbGFyYXRpb25zICovCisKK3N0YXRpYyB2b2lkIHA4MDIxMXJlcV9oYW5kbGVtc2coIHdsYW5kZXZpY2VfdCAqd2xhbmRldiwgcDgwMjExbXNnX3QgKm1zZyk7CitzdGF0aWMgaW50IHA4MDIxMXJlcV9taWJzZXRfbWliZ2V0KHdsYW5kZXZpY2VfdCAqd2xhbmRldiwgcDgwMjExbXNnX2RvdDExcmVxX21pYmdldF90ICptaWJfbXNnLCBpbnQgaXNnZXQpOworCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworLyogRnVuY3Rpb24gRGVmaW5pdGlvbnMgKi8KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogcDgwMjExcmVxX2RvcmVxdWVzdAorKgorKiBIYW5kbGVzIGFuIE1MTUUgcmVxZXN0L2NvbmZpcm0gbWVzc2FnZS4KKyoKKyogQXJndW1lbnRzOgorKgl3bGFuZGV2CQlXTEFOIGRldmljZSBzdHJ1Y3QKKyoJbXNnYnVmCQlCdWZmZXIgY29udGFpbmluZyBhIHJlcXVlc3QgbWVzc2FnZQorKgorKiBSZXR1cm5zOgorKgkwIG9uIHN1Y2Nlc3MsIGFuIGVycm5vIG90aGVyd2lzZQorKgorKiBDYWxsIGNvbnRleHQ6CisqCVBvdGVudGlhbGx5IGJsb2NrcyB0aGUgY2FsbGVyLCBzbyBpdCdzIGEgZ29vZCBpZGVhIHRvCisqCW5vdCBjYWxsIHRoaXMgZnVuY3Rpb24gZnJvbSBhbiBpbnRlcnJ1cHQgY29udGV4dC4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworaW50IHA4MDIxMXJlcV9kb3JlcXVlc3QoIHdsYW5kZXZpY2VfdCAqd2xhbmRldiwgVUlOVDggKm1zZ2J1ZikKK3sKKwlpbnQJCXJlc3VsdCA9IDA7CisJcDgwMjExbXNnX3QJKm1zZyA9IChwODAyMTFtc2dfdCopbXNnYnVmOworCisJREJGRU5URVI7CisKKwkvKiBDaGVjayB0byBtYWtlIHN1cmUgdGhlIE1TRCBpcyBydW5uaW5nICovCisJaWYgKAorCSEoKHdsYW5kZXYtPm1zZHN0YXRlID09IFdMQU5fTVNEX0hXUFJFU0VOVCAmJgorCW1zZy0+bXNnY29kZSA9PSBESURtc2dfbG54cmVxX2lmc3RhdGUpIHx8CisJd2xhbmRldi0+bXNkc3RhdGUgPT0gV0xBTl9NU0RfUlVOTklORyB8fAorCXdsYW5kZXYtPm1zZHN0YXRlID09IFdMQU5fTVNEX0ZXTE9BRCkgKSB7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCS8qIENoZWNrIFBlcm1pc3Npb25zICovCisJaWYgKCFjYXBhYmxlKENBUF9ORVRfQURNSU4pICYmCisJICAgIChtc2ctPm1zZ2NvZGUgIT0gRElEbXNnX2RvdDExcmVxX21pYmdldCkpIHsKKwkJV0xBTl9MT0dfRVJST1IoIiVzOiBvbmx5IGRvdDExcmVxX21pYmdldCBhbGxvd2VkIGZvciBub24tcm9vdC5cbiIsIHdsYW5kZXYtPm5hbWUpOworCQlyZXR1cm4gLUVQRVJNOworCX0KKworCS8qIENoZWNrIGZvciBidXN5IHN0YXR1cyAqLworCWlmICggdGVzdF9hbmRfc2V0X2JpdCgxLCAmKHdsYW5kZXYtPnJlcXVlc3RfcGVuZGluZykpKSB7CisJCXJldHVybiAtRUJVU1k7CisJfQorCisJLyogQWxsb3cgcDgwMjExIHRvIGxvb2sgYXQgbXNnIGFuZCBoYW5kbGUgaWYgZGVzaXJlZC4gKi8KKwkvKiBTbyBmYXIsIGFsbCBwODAyMTEgbXNncyBhcmUgaW1tZWRpYXRlLCBubyB3YWl0cS90aW1lciBuZWNlc3NhcnkgKi8KKwkvKiBUaGlzIG1heSBjaGFuZ2UuICovCisJcDgwMjExcmVxX2hhbmRsZW1zZyh3bGFuZGV2LCBtc2cpOworCisJLyogUGFzcyBpdCBkb3duIHRvIHdsYW5kZXYgdmlhIHdsYW5kZXYtPm1sbWVyZXF1ZXN0ICovCisJaWYgKCB3bGFuZGV2LT5tbG1lcmVxdWVzdCAhPSBOVUxMICkKKwkJd2xhbmRldi0+bWxtZXJlcXVlc3Qod2xhbmRldiwgbXNnKTsKKworCWNsZWFyX2JpdCggMSwgJih3bGFuZGV2LT5yZXF1ZXN0X3BlbmRpbmcpKTsKKwlEQkZFWElUOworCXJldHVybiByZXN1bHQ7CS8qIGlmIHJlc3VsdD09MCwgbXNnLT5zdGF0dXMgc3RpbGwgbWF5IGNvbnRhaW4gYW4gZXJyICovCit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBwODAyMTFyZXFfaGFuZGxlbXNnCisqCisqIHA4MDIxMSBtZXNzYWdlIGhhbmRsZXIuICBQcmltYXJpbHkgbG9va3MgZm9yIG1lc3NhZ2VzIHRoYXQKKyogYmVsb25nIHRvIHA4MDIxMSBhbmQgdGhlbiBkaXNwYXRjaGVzIHRoZSBhcHByb3ByaWF0ZSByZXNwb25zZS4KKyogVE9ETzogd2UgZG9uJ3QgZG8gYW55dGhpbmcgeWV0LiAgT25jZSB0aGUgbGludXhNSUIgaXMgYmV0dGVyCisqCWRlZmluZWQgd2UnbGwgbmVlZCBhIGdldC9zZXQgaGFuZGxlci4KKyoKKyogQXJndW1lbnRzOgorKgl3bGFuZGV2CQlXTEFOIGRldmljZSBzdHJ1Y3QKKyoJbXNnCQltZXNzYWdlIHN0cnVjdHVyZQorKgorKiBSZXR1cm5zOgorKglub3RoaW5nIChhbnkgcmVzdWx0cyBhcmUgc2V0IGluIHRoZSBzdGF0dXMgZmllbGQgb2YgdGhlIG1zZykKKyoKKyogQ2FsbCBjb250ZXh0OgorKglQcm9jZXNzIHRocmVhZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgdm9pZCBwODAyMTFyZXFfaGFuZGxlbXNnKCB3bGFuZGV2aWNlX3QgKndsYW5kZXYsIHA4MDIxMW1zZ190ICptc2cpCit7CisgICAgICAgIERCRkVOVEVSOworCisJc3dpdGNoIChtc2ctPm1zZ2NvZGUpIHsKKworCWNhc2UgRElEbXNnX2xueHJlcV9ob3N0d2VwOiB7CisJCXA4MDIxMW1zZ19sbnhyZXFfaG9zdHdlcF90ICpyZXEgPSAocDgwMjExbXNnX2xueHJlcV9ob3N0d2VwX3QqKSBtc2c7CisJCXdsYW5kZXYtPmhvc3R3ZXAgJj0gfihIT1NUV0VQX0RFQ1JZUFR8SE9TVFdFUF9FTkNSWVBUKTsKKwkJaWYgKHJlcS0+ZGVjcnlwdC5kYXRhID09IFA4MDIxMUVOVU1fdHJ1dGhfdHJ1ZSkKKwkJCXdsYW5kZXYtPmhvc3R3ZXAgfD0gSE9TVFdFUF9ERUNSWVBUOworCQlpZiAocmVxLT5lbmNyeXB0LmRhdGEgPT0gUDgwMjExRU5VTV90cnV0aF90cnVlKQorCQkJd2xhbmRldi0+aG9zdHdlcCB8PSBIT1NUV0VQX0VOQ1JZUFQ7CisKKwkJYnJlYWs7CisJfQorCWNhc2UgRElEbXNnX2RvdDExcmVxX21pYmdldDoKKwljYXNlIERJRG1zZ19kb3QxMXJlcV9taWJzZXQ6IHsKKwkJaW50IGlzZ2V0ID0gKG1zZy0+bXNnY29kZSA9PSBESURtc2dfZG90MTFyZXFfbWliZ2V0KTsKKwkJcDgwMjExbXNnX2RvdDExcmVxX21pYmdldF90ICAqbWliX21zZyA9IChwODAyMTFtc2dfZG90MTFyZXFfbWliZ2V0X3QgKikgbXNnOworCQlwODAyMTFyZXFfbWlic2V0X21pYmdldCAod2xhbmRldiwgbWliX21zZywgaXNnZXQpOworCX0KKwlkZWZhdWx0OgorCQkvLyBYWFggZG8gbm90aGluZyEKKwkJOworCX0gLyogc3dpdGNoIG1zZy0+bXNnY29kZSAqLworCisJREJGRVhJVDsKKworCXJldHVybjsKK30KKworc3RhdGljIGludCBwODAyMTFyZXFfbWlic2V0X21pYmdldCh3bGFuZGV2aWNlX3QgKndsYW5kZXYsCisJCQkJICAgcDgwMjExbXNnX2RvdDExcmVxX21pYmdldF90ICptaWJfbXNnLAorCQkJCSAgIGludCBpc2dldCkKK3sKKwlwODAyMTFpdGVtZF90ICAgKm1pYml0ZW0gPSAocDgwMjExaXRlbWRfdCAqKSBtaWJfbXNnLT5taWJhdHRyaWJ1dGUuZGF0YTsKKwlwODAyMTFwc3RyZF90ICAqcHN0ciA9IChwODAyMTFwc3RyZF90KikgbWliaXRlbS0+ZGF0YTsKKwlVSU5UOCAqa2V5ID0gbWliaXRlbS0+ZGF0YSArIHNpemVvZihwODAyMTFwc3RyZF90KTsKKworCURCRkVOVEVSOworCisJc3dpdGNoIChtaWJpdGVtLT5kaWQpIHsKKwljYXNlIERJRG1pYl9kb3QxMXNtdF9wODAyMTFUYWJsZV9wODAyMTFfaWZzdGF0ZTogeworCQlVSU5UMzIgKmRhdGEgPSAoVUlOVDMyICopIG1pYml0ZW0tPmRhdGE7CisJCWlmIChpc2dldCkKKwkJCXN3aXRjaCAod2xhbmRldi0+bXNkc3RhdGUpIHsKKwkJCWNhc2UgV0xBTl9NU0RfSFdQUkVTRU5UOgorCQkJCSpkYXRhID0gUDgwMjExRU5VTV9pZnN0YXRlX2Rpc2FibGU7CisJCQkJYnJlYWs7CisJCQljYXNlIFdMQU5fTVNEX0ZXTE9BRDoKKwkJCQkqZGF0YSA9IFA4MDIxMUVOVU1faWZzdGF0ZV9md2xvYWQ7CisJCQkJYnJlYWs7CisJCQljYXNlIFdMQU5fTVNEX1JVTk5JTkc6CisJCQkJKmRhdGEgPSBQODAyMTFFTlVNX2lmc3RhdGVfZW5hYmxlOworCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQkqZGF0YSA9IFA4MDIxMUVOVU1faWZzdGF0ZV9lbmFibGU7CisJCQl9CisJCWJyZWFrOworCX0KKwljYXNlIERJRG1pYl9kb3QxMXBoeV9kb3QxMVBoeU9wZXJhdGlvblRhYmxlX2RvdDExU2hvcnRQcmVhbWJsZUVuYWJsZWQ6IHsKKwkJVUlOVDMyICpkYXRhID0gKFVJTlQzMiAqKSBtaWJpdGVtLT5kYXRhOworCisJCWlmIChpc2dldCkKKwkJCSpkYXRhID0gd2xhbmRldi0+c2hvcnRwcmVhbWJsZTsKKwkJZWxzZQorCQkJd2xhbmRldi0+c2hvcnRwcmVhbWJsZSA9ICpkYXRhOworCQlicmVhazsKKwl9CisJY2FzZSBESURtaWJfZG90MTFzbXRfZG90MTFXRVBEZWZhdWx0S2V5c1RhYmxlX2RvdDExV0VQRGVmYXVsdEtleTA6IHsKKwkJaWYgKCFpc2dldCkKKwkJCXdlcF9jaGFuZ2Vfa2V5KHdsYW5kZXYsIDAsIGtleSwgcHN0ci0+bGVuKTsKKwkJYnJlYWs7CisJfQorCWNhc2UgRElEbWliX2RvdDExc210X2RvdDExV0VQRGVmYXVsdEtleXNUYWJsZV9kb3QxMVdFUERlZmF1bHRLZXkxOiB7CisJCWlmICghaXNnZXQpCisJCQl3ZXBfY2hhbmdlX2tleSh3bGFuZGV2LCAxLCBrZXksIHBzdHItPmxlbik7CisJCWJyZWFrOworCX0KKwljYXNlIERJRG1pYl9kb3QxMXNtdF9kb3QxMVdFUERlZmF1bHRLZXlzVGFibGVfZG90MTFXRVBEZWZhdWx0S2V5MjogeworCQlpZiAoIWlzZ2V0KQorCQkJd2VwX2NoYW5nZV9rZXkod2xhbmRldiwgMiwga2V5LCBwc3RyLT5sZW4pOworCQlicmVhazsKKwl9CisJY2FzZSBESURtaWJfZG90MTFzbXRfZG90MTFXRVBEZWZhdWx0S2V5c1RhYmxlX2RvdDExV0VQRGVmYXVsdEtleTM6IHsKKwkJaWYgKCFpc2dldCkKKwkJCXdlcF9jaGFuZ2Vfa2V5KHdsYW5kZXYsIDMsIGtleSwgcHN0ci0+bGVuKTsKKwkJYnJlYWs7CisJfQorCWNhc2UgRElEbWliX2RvdDExc210X2RvdDExUHJpdmFjeVRhYmxlX2RvdDExV0VQRGVmYXVsdEtleUlEOiB7CisJCVVJTlQzMiAqZGF0YSA9IChVSU5UMzIgKikgbWliaXRlbS0+ZGF0YTsKKworCQlpZiAoaXNnZXQpIHsKKwkJCSpkYXRhID0gd2xhbmRldi0+aG9zdHdlcCAmIEhPU1RXRVBfREVGQVVMVEtFWV9NQVNLOworCQkJfSBlbHNlIHsKKwkJCQl3bGFuZGV2LT5ob3N0d2VwICY9IH4oSE9TVFdFUF9ERUZBVUxUS0VZX01BU0spOworCisJCQkJd2xhbmRldi0+aG9zdHdlcCB8PSAoKmRhdGEgJiBIT1NUV0VQX0RFRkFVTFRLRVlfTUFTSyk7CisJCQl9CisJCWJyZWFrOworCX0KKwljYXNlIERJRG1pYl9kb3QxMXNtdF9kb3QxMVByaXZhY3lUYWJsZV9kb3QxMVByaXZhY3lJbnZva2VkOiB7CisJCVVJTlQzMiAqZGF0YSA9IChVSU5UMzIgKikgbWliaXRlbS0+ZGF0YTsKKworCQlpZiAoaXNnZXQpIHsKKwkJCWlmICh3bGFuZGV2LT5ob3N0d2VwICYgSE9TVFdFUF9QUklWQUNZSU5WT0tFRCkKKwkJCQkqZGF0YSA9IFA4MDIxMUVOVU1fdHJ1dGhfdHJ1ZTsKKwkJCWVsc2UKKwkJCQkqZGF0YSA9IFA4MDIxMUVOVU1fdHJ1dGhfZmFsc2U7CisJCX0gZWxzZSB7CisJCQkJd2xhbmRldi0+aG9zdHdlcCAmPSB+KEhPU1RXRVBfUFJJVkFDWUlOVk9LRUQpOworCQkJCWlmICgqZGF0YSA9PSBQODAyMTFFTlVNX3RydXRoX3RydWUpCisJCQkJCXdsYW5kZXYtPmhvc3R3ZXAgfD0gSE9TVFdFUF9QUklWQUNZSU5WT0tFRDsKKwkJfQorCQlicmVhazsKKwl9CisJY2FzZSBESURtaWJfZG90MTFzbXRfZG90MTFQcml2YWN5VGFibGVfZG90MTFFeGNsdWRlVW5lbmNyeXB0ZWQ6IHsKKwkJVUlOVDMyICpkYXRhID0gKFVJTlQzMiAqKSBtaWJpdGVtLT5kYXRhOworCisJCWlmIChpc2dldCkgeworCQkJaWYgKHdsYW5kZXYtPmhvc3R3ZXAgJiBIT1NUV0VQX0VYQ0xVREVVTkVOQ1JZUFRFRCkKKwkJCQkqZGF0YSA9IFA4MDIxMUVOVU1fdHJ1dGhfdHJ1ZTsKKwkJCWVsc2UKKwkJCQkqZGF0YSA9IFA4MDIxMUVOVU1fdHJ1dGhfZmFsc2U7CisJCX0gZWxzZSB7CisJCQl3bGFuZGV2LT5ob3N0d2VwICY9IH4oSE9TVFdFUF9FWENMVURFVU5FTkNSWVBURUQpOworCQkJaWYgKCpkYXRhID09IFA4MDIxMUVOVU1fdHJ1dGhfdHJ1ZSkKKwkJCQl3bGFuZGV2LT5ob3N0d2VwIHw9IEhPU1RXRVBfRVhDTFVERVVORU5DUllQVEVEOworCQl9CisJCWJyZWFrOworCX0KKwlkZWZhdWx0OgorCQkvLyBYWFhYIGRvIG5vdGhpbmchCisJCTsKKwl9CisKKwlEQkZFWElUOworCXJldHVybiAwOworfQorCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wODAyMTFyZXEuaCBiL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3A4MDIxMXJlcS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0YWJkY2UKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wODAyMTFyZXEuaApAQCAtMCwwICsxLDY4IEBACisvKiBwODAyMTFyZXEuaAorKgorKiBSZXF1ZXN0IGhhbmRsaW5nIGZ1bmN0aW9ucworKgorKiBDb3B5cmlnaHQgKEMpIDE5OTkgQWJzb2x1dGVWYWx1ZSBTeXN0ZW1zLCBJbmMuICBBbGwgUmlnaHRzIFJlc2VydmVkLgorKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKgorKiBsaW51eC13bGFuCisqCisqICAgVGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBhcmUgc3ViamVjdCB0byB0aGUgTW96aWxsYSBQdWJsaWMKKyogICBMaWNlbnNlIFZlcnNpb24gMS4xICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZQorKiAgIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZgorKiAgIHRoZSBMaWNlbnNlIGF0IGh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBMLworKgorKiAgIFNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUworKiAgIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IKKyogICBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcKKyogICByaWdodHMgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorKgorKiAgIEFsdGVybmF0aXZlbHksIHRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgbWF5IGJlIHVzZWQgdW5kZXIgdGhlCisqICAgdGVybXMgb2YgdGhlIEdOVSBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgKHRoZSAiR1BMIiksIGluIHdoaWNoCisqICAgY2FzZSB0aGUgcHJvdmlzaW9ucyBvZiB0aGUgR1BMIGFyZSBhcHBsaWNhYmxlIGluc3RlYWQgb2YgdGhlCisqICAgYWJvdmUuICBJZiB5b3Ugd2lzaCB0byBhbGxvdyB0aGUgdXNlIG9mIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUKKyogICBvbmx5IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR1BMIGFuZCBub3QgdG8gYWxsb3cgb3RoZXJzIHRvIHVzZQorKiAgIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgdW5kZXIgdGhlIE1QTCwgaW5kaWNhdGUgeW91ciBkZWNpc2lvbgorKiAgIGJ5IGRlbGV0aW5nIHRoZSBwcm92aXNpb25zIGFib3ZlIGFuZCByZXBsYWNlIHRoZW0gd2l0aCB0aGUgbm90aWNlCisqICAgYW5kIG90aGVyIHByb3Zpc2lvbnMgcmVxdWlyZWQgYnkgdGhlIEdQTC4gIElmIHlvdSBkbyBub3QgZGVsZXRlCisqICAgdGhlIHByb3Zpc2lvbnMgYWJvdmUsIGEgcmVjaXBpZW50IG1heSB1c2UgeW91ciB2ZXJzaW9uIG9mIHRoaXMKKyogICBmaWxlIHVuZGVyIGVpdGhlciB0aGUgTVBMIG9yIHRoZSBHUEwuCisqCisqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqCisqIElucXVpcmllcyByZWdhcmRpbmcgdGhlIGxpbnV4LXdsYW4gT3BlbiBTb3VyY2UgcHJvamVjdCBjYW4gYmUKKyogbWFkZSBkaXJlY3RseSB0bzoKKyoKKyogQWJzb2x1dGVWYWx1ZSBTeXN0ZW1zIEluYy4KKyogaW5mb0BsaW51eC13bGFuLmNvbQorKiBodHRwOi8vd3d3LmxpbnV4LXdsYW4uY29tCisqCisqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqCisqIFBvcnRpb25zIG9mIHRoZSBkZXZlbG9wbWVudCBvZiB0aGlzIHNvZnR3YXJlIHdlcmUgZnVuZGVkIGJ5CisqIEludGVyc2lsIENvcnBvcmF0aW9uIGFzIHBhcnQgb2YgUFJJU00oUikgY2hpcHNldCBwcm9kdWN0IGRldmVsb3BtZW50LgorKgorKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKi8KKworI2lmbmRlZiBfTElOVVhfUDgwMjExUkVRX0gKKyNkZWZpbmUgX0xJTlVYX1A4MDIxMVJFUV9ICisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKiBDb25zdGFudHMgKi8KKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKy8qIE1hY3JvcyAqLworCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworLyogVHlwZXMgKi8KKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKy8qIEV4dGVybnMgKi8KKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKy8qIEZ1bmN0aW9uIERlY2xhcmF0aW9ucyAqLworCitpbnQJcDgwMjExcmVxX2RvcmVxdWVzdCh3bGFuZGV2aWNlX3QgKndsYW5kZXYsIFVJTlQ4ICptc2didWYpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3A4MDIxMXR5cGVzLmggYi9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wODAyMTF0eXBlcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxMWIwY2UKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wODAyMTF0eXBlcy5oCkBAIC0wLDAgKzEsNjc1IEBACisvKiBwODAyMTF0eXBlcy5oCisqCisqIE1hY3JvcywgY29uc3RhbnRzLCB0eXBlcywgYW5kIGZ1bmNzIGZvciBwODAyMTEgZGF0YSB0eXBlcworKgorKiBDb3B5cmlnaHQgKEMpIDE5OTkgQWJzb2x1dGVWYWx1ZSBTeXN0ZW1zLCBJbmMuICBBbGwgUmlnaHRzIFJlc2VydmVkLgorKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKgorKiBsaW51eC13bGFuCisqCisqICAgVGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBhcmUgc3ViamVjdCB0byB0aGUgTW96aWxsYSBQdWJsaWMKKyogICBMaWNlbnNlIFZlcnNpb24gMS4xICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZQorKiAgIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZgorKiAgIHRoZSBMaWNlbnNlIGF0IGh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBMLworKgorKiAgIFNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUworKiAgIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IKKyogICBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcKKyogICByaWdodHMgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorKgorKiAgIEFsdGVybmF0aXZlbHksIHRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgbWF5IGJlIHVzZWQgdW5kZXIgdGhlCisqICAgdGVybXMgb2YgdGhlIEdOVSBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgKHRoZSAiR1BMIiksIGluIHdoaWNoCisqICAgY2FzZSB0aGUgcHJvdmlzaW9ucyBvZiB0aGUgR1BMIGFyZSBhcHBsaWNhYmxlIGluc3RlYWQgb2YgdGhlCisqICAgYWJvdmUuICBJZiB5b3Ugd2lzaCB0byBhbGxvdyB0aGUgdXNlIG9mIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUKKyogICBvbmx5IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR1BMIGFuZCBub3QgdG8gYWxsb3cgb3RoZXJzIHRvIHVzZQorKiAgIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgdW5kZXIgdGhlIE1QTCwgaW5kaWNhdGUgeW91ciBkZWNpc2lvbgorKiAgIGJ5IGRlbGV0aW5nIHRoZSBwcm92aXNpb25zIGFib3ZlIGFuZCByZXBsYWNlIHRoZW0gd2l0aCB0aGUgbm90aWNlCisqICAgYW5kIG90aGVyIHByb3Zpc2lvbnMgcmVxdWlyZWQgYnkgdGhlIEdQTC4gIElmIHlvdSBkbyBub3QgZGVsZXRlCisqICAgdGhlIHByb3Zpc2lvbnMgYWJvdmUsIGEgcmVjaXBpZW50IG1heSB1c2UgeW91ciB2ZXJzaW9uIG9mIHRoaXMKKyogICBmaWxlIHVuZGVyIGVpdGhlciB0aGUgTVBMIG9yIHRoZSBHUEwuCisqCisqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqCisqIElucXVpcmllcyByZWdhcmRpbmcgdGhlIGxpbnV4LXdsYW4gT3BlbiBTb3VyY2UgcHJvamVjdCBjYW4gYmUKKyogbWFkZSBkaXJlY3RseSB0bzoKKyoKKyogQWJzb2x1dGVWYWx1ZSBTeXN0ZW1zIEluYy4KKyogaW5mb0BsaW51eC13bGFuLmNvbQorKiBodHRwOi8vd3d3LmxpbnV4LXdsYW4uY29tCisqCisqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqCisqIFBvcnRpb25zIG9mIHRoZSBkZXZlbG9wbWVudCBvZiB0aGlzIHNvZnR3YXJlIHdlcmUgZnVuZGVkIGJ5CisqIEludGVyc2lsIENvcnBvcmF0aW9uIGFzIHBhcnQgb2YgUFJJU00oUikgY2hpcHNldCBwcm9kdWN0IGRldmVsb3BtZW50LgorKgorKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKgorKiBUaGlzIGZpbGUgZGVjbGFyZXMgc29tZSBvZiB0aGUgY29uc3RhbnRzIGFuZCB0eXBlcyB1c2VkIGluIHZhcmlvdXMKKyogcGFydHMgb2YgdGhlIGxpbnV4LXdsYW4gc3lzdGVtLgorKgorKiBOb3RlczoKKyogICAtIENvbnN0YW50IHZhbHVlcyBhcmUgYWx3YXlzIGluIEhPU1QgYnl0ZSBvcmRlci4KKyoKKyogQWxsIGZ1bmN0aW9ucyBhbmQgc3RhdGljcyBkZWNsYXJlZCBoZXJlIGFyZSBpbXBsZW1lbnRlZCBpbiBwODAyMTF0eXBlcy5jCisqICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyovCisKKyNpZm5kZWYgX1A4MDIxMVRZUEVTX0gKKyNkZWZpbmUgX1A4MDIxMVRZUEVTX0gKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKy8qIFN5c3RlbSBJbmNsdWRlcyAqLworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKy8qIFByb2plY3QgSW5jbHVkZXMgKi8KKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisKKyNpZm5kZWYgX1dMQU5fQ09NUEFUX0gKKyNpbmNsdWRlICJ3bGFuX2NvbXBhdC5oIgorI2VuZGlmCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKiBDb25zdGFudHMgKi8KKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiBwODAyMTEgZGF0YSB0eXBlIGNvZGVzIHVzZWQgZm9yIE1JQiBpdGVtcyBhbmQgbWVzc2FnZSAqLworLyogYXJndW1lbnRzLiBUaGUgdmFyaW91cyBtZXRhZGF0YSBzdHJ1Y3R1cmVzIHByb3ZpZGUgYWRkaXRpb25hbCAqLworLyogaW5mb3JtYXRpb24gYWJvdXQgdGhlc2UgdHlwZXMuICovCisKKyNkZWZpbmUgUDgwMjExX1RZUEVfT0NURVRTVFIJCTEJLyogcGFzY2FsIGFycmF5IG9mIGJ5dGVzICovCisjZGVmaW5lIFA4MDIxMV9UWVBFX0RJU1BMQVlTVFIJCTIJLyogcGFzY2FsIGFycmF5IG9mIGJ5dGVzIGNvbnRhaW5pbmcgYXNjaWkgKi8KKyNkZWZpbmUgUDgwMjExX1RZUEVfSU5UCQkJNAkvKiBVSU5UMzIgbWluIGFuZCBtYXggbGltaXRlZCBieSAzMiBiaXRzICovCisjZGVmaW5lIFA4MDIxMV9UWVBFX0VOVU1JTlQJCTUJLyogVUlOVDMyIGhvbGRpbmcgYSBudW1lcmljCisJCQkJCQkgICBjb2RlIHRoYXQgY2FuIGJlIG1hcHBlZAorCQkJCQkJICAgdG8gYSB0ZXh0dWFsIG5hbWUgKi8KKyNkZWZpbmUgUDgwMjExX1RZUEVfVU5LREFUQQkJNgkvKiBEYXRhIGl0ZW0gY29udGFpbmluZyBhbgorCQkJCQkJICAgdW5rbm93biBkYXRhIHR5cGUgKi8KKyNkZWZpbmUgUDgwMjExX1RZUEVfSU5UQVJSQVkJCTcJLyogQXJyYXkgb2YgMzItYml0IGludGVnZXJzLiAqLworI2RlZmluZSBQODAyMTFfVFlQRV9CSVRBUlJBWQkJOAkvKiBBcnJheSBvZiBiaXRzLiAqLworI2RlZmluZSBQODAyMTFfVFlQRV9NQUNBUlJBWQkJOQkvKiBBcnJheSBvZiBNQUMgYWRkcmVzc2VzLiAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogVGhlIGZvbGxvd2luZyBjb25zdGFudHMgYXJlIGluZGV4ZXMgaW50byB0aGUgTWliIENhdGVnb3J5IExpc3QgKi8KKy8qIGFuZCB0aGUgTWVzc2FnZSBDYXRlZ29yeSBMaXN0ICovCisKKy8qIE1pYiBDYXRlZ29yeSBMaXN0ICovCisjZGVmaW5lIFA4MDIxMV9NSUJfQ0FUX0RPVDExU01UCQkxCisjZGVmaW5lIFA4MDIxMV9NSUJfQ0FUX0RPVDExTUFDCQkyCisjZGVmaW5lIFA4MDIxMV9NSUJfQ0FUX0RPVDExUEhZCQkzCisKKyNkZWZpbmUgUDgwMjExU0VDX0RPVDExU01UCQlQODAyMTFfTUlCX0NBVF9ET1QxMVNNVAorI2RlZmluZSBQODAyMTFTRUNfRE9UMTFNQUMJCVA4MDIxMV9NSUJfQ0FUX0RPVDExTUFDCisjZGVmaW5lIFA4MDIxMVNFQ19ET1QxMVBIWQkJUDgwMjExX01JQl9DQVRfRE9UMTFQSFkKKworLyogTWVzc2FnZSBDYXRlZ29yeSBMaXN0ICovCisjZGVmaW5lIFA4MDIxMV9NU0dfQ0FUX0RPVDExUkVRCQkxCisjZGVmaW5lIFA4MDIxMV9NU0dfQ0FUX0RPVDExSU5ECQkyCisvKiAjZGVmaW5lIFA4MDIxMV9NU0dfQ0FUX0RPVDExQ0ZNCQkzIChkb2Vzbid0IGV4aXN0IGF0IHRoaXMgdGltZSkgKi8KKworI2RlZmluZSBQODAyMTFTRUNfRE9UMTFSRVEJCVA4MDIxMV9NU0dfQ0FUX0RPVDExUkVRCisjZGVmaW5lIFA4MDIxMVNFQ19ET1QxMUlORAkJUDgwMjExX01TR19DQVRfRE9UMTFJTkQKKy8qICNkZWZpbmUgUDgwMjExU0VDX0RPVDExQ0ZNCQlQODAyMTFfTVNHX0NBVF9ET1QxMUNGTSAgKGRvZXNuJ3QgZXhpc3QgYXQgdGhpcyB0aW1lICovCisKKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogcDgwMjExIERJRCBmaWVsZCBjb2RlcyB0aGF0IHJlcHJlc2VudCBhY2Nlc3MgdHlwZSBhbmQgKi8KKy8qIGlzX3RhYmxlIHN0YXR1cy4gKi8KKworI2RlZmluZSBQODAyMTFESURfQUNDRVNTX1JFQUQJCTB4MTAwMDAwMDAKKyNkZWZpbmUgUDgwMjExRElEX0FDQ0VTU19XUklURQkJMHgwODAwMDAwMAorI2RlZmluZSBQODAyMTFESURfV1JJVEVPTkxZCQkweDAwMDAwMDAxCisjZGVmaW5lIFA4MDIxMURJRF9SRUFET05MWQkJMHgwMDAwMDAwMgorI2RlZmluZSBQODAyMTFESURfUkVBRFdSSVRFCQkweDAwMDAwMDAzCisjZGVmaW5lIFA4MDIxMURJRF9JU1RBQkxFX0ZBTFNFCQkwCisjZGVmaW5lIFA4MDIxMURJRF9JU1RBQkxFX1RSVUUJCTEKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qIHA4MDIxMSBlbnVtZXJhdGlvbiBjb25zdGFudHMuICBUaGUgdmFsdWUgdG8gdGV4dCBtYXBwaW5ncyBmb3IgKi8KKy8qICB0aGVzZSBpcyBpbiBwODAyMTF0eXBlcy5jLiAgVGhlc2UgZGVmaW5lcyB3ZXJlIGdlbmVyYXRlZCAqLworLyogIGZyb20gdGhlIG1hcHBpbmdzLiAqLworCisvKiBlcnJvciBjb2RlcyBmb3IgbG9va3VwcyAqLworI2RlZmluZSBQODAyMTFFTlVNX0JBRAkJCQkweGZmZmZmZmZmVUwKKyNkZWZpbmUgUDgwMjExRU5VTV9CQURTVFIJCQkiUDgwMjExRU5VTV9CQUQiCisKKyNkZWZpbmUgUDgwMjExRU5VTV90cnV0aF9mYWxzZQkJCTAKKyNkZWZpbmUgUDgwMjExRU5VTV90cnV0aF90cnVlCQkJMQorI2RlZmluZSBQODAyMTFFTlVNX2lmc3RhdGVfZGlzYWJsZQkJMAorI2RlZmluZSBQODAyMTFFTlVNX2lmc3RhdGVfZndsb2FkCQkxCisjZGVmaW5lIFA4MDIxMUVOVU1faWZzdGF0ZV9lbmFibGUJCTIKKyNkZWZpbmUgUDgwMjExRU5VTV9wb3dlcm1nbXRfYWN0aXZlCQkxCisjZGVmaW5lIFA4MDIxMUVOVU1fcG93ZXJtZ210X3Bvd2Vyc2F2ZQkJMgorI2RlZmluZSBQODAyMTFFTlVNX2Jzc3R5cGVfaW5mcmFzdHJ1Y3R1cmUJMQorI2RlZmluZSBQODAyMTFFTlVNX2Jzc3R5cGVfaW5kZXBlbmRlbnQJCTIKKyNkZWZpbmUgUDgwMjExRU5VTV9ic3N0eXBlX2FueQkJCTMKKyNkZWZpbmUgUDgwMjExRU5VTV9hdXRoYWxnX29wZW5zeXN0ZW0JCTEKKyNkZWZpbmUgUDgwMjExRU5VTV9hdXRoYWxnX3NoYXJlZGtleQkJMgorI2RlZmluZSBQODAyMTFFTlVNX3BoeXR5cGVfZmhzcwkJCTEKKyNkZWZpbmUgUDgwMjExRU5VTV9waHl0eXBlX2Rzc3MJCQkyCisjZGVmaW5lIFA4MDIxMUVOVU1fcGh5dHlwZV9pcmJhc2ViYW5kCQkzCisjZGVmaW5lIFA4MDIxMUVOVU1fdGVtcHR5cGVfY29tbWVyY2lhbAkJMQorI2RlZmluZSBQODAyMTFFTlVNX3RlbXB0eXBlX2luZHVzdHJpYWwJCTIKKyNkZWZpbmUgUDgwMjExRU5VTV9yZWdkb21haW5fZmNjCQkxNgorI2RlZmluZSBQODAyMTFFTlVNX3JlZ2RvbWFpbl9kb2MJCTMyCisjZGVmaW5lIFA4MDIxMUVOVU1fcmVnZG9tYWluX2V0c2kJCTQ4CisjZGVmaW5lIFA4MDIxMUVOVU1fcmVnZG9tYWluX3NwYWluCQk0OQorI2RlZmluZSBQODAyMTFFTlVNX3JlZ2RvbWFpbl9mcmFuY2UJCTUwCisjZGVmaW5lIFA4MDIxMUVOVU1fcmVnZG9tYWluX21rawkJNjQKKyNkZWZpbmUgUDgwMjExRU5VTV9jY2Ftb2RlX2Vkb25seQkJMQorI2RlZmluZSBQODAyMTFFTlVNX2NjYW1vZGVfY3Nvbmx5CQkyCisjZGVmaW5lIFA4MDIxMUVOVU1fY2NhbW9kZV9lZGFuZGNzCQk0CisjZGVmaW5lIFA4MDIxMUVOVU1fY2NhbW9kZV9jc3dpdGh0aW1lcgkJOAorI2RlZmluZSBQODAyMTFFTlVNX2NjYW1vZGVfaHJjc2FuZGVkCQkxNgorI2RlZmluZSBQODAyMTFFTlVNX2RpdmVyc2l0eV9maXhlZGxpc3QJCTEKKyNkZWZpbmUgUDgwMjExRU5VTV9kaXZlcnNpdHlfbm90c3VwcG9ydGVkCTIKKyNkZWZpbmUgUDgwMjExRU5VTV9kaXZlcnNpdHlfZHluYW1pYwkJMworI2RlZmluZSBQODAyMTFFTlVNX3NjYW50eXBlX2FjdGl2ZQkJMQorI2RlZmluZSBQODAyMTFFTlVNX3NjYW50eXBlX3Bhc3NpdmUJCTIKKyNkZWZpbmUgUDgwMjExRU5VTV9zY2FudHlwZV9ib3RoCQkzCisjZGVmaW5lIFA4MDIxMUVOVU1fcmVzdWx0Y29kZV9zdWNjZXNzCQkxCisjZGVmaW5lIFA4MDIxMUVOVU1fcmVzdWx0Y29kZV9pbnZhbGlkX3BhcmFtZXRlcnMJMgorI2RlZmluZSBQODAyMTFFTlVNX3Jlc3VsdGNvZGVfbm90X3N1cHBvcnRlZAkzCisjZGVmaW5lIFA4MDIxMUVOVU1fcmVzdWx0Y29kZV90aW1lb3V0CQk0CisjZGVmaW5lIFA4MDIxMUVOVU1fcmVzdWx0Y29kZV90b29fbWFueV9yZXEJNQorI2RlZmluZSBQODAyMTFFTlVNX3Jlc3VsdGNvZGVfcmVmdXNlZAkJNgorI2RlZmluZSBQODAyMTFFTlVNX3Jlc3VsdGNvZGVfYnNzX2FscmVhZHkJNworI2RlZmluZSBQODAyMTFFTlVNX3Jlc3VsdGNvZGVfaW52YWxpZF9hY2Nlc3MJOAorI2RlZmluZSBQODAyMTFFTlVNX3Jlc3VsdGNvZGVfaW52YWxpZF9taWJhdHRyaWJ1dGUJOQorI2RlZmluZSBQODAyMTFFTlVNX3Jlc3VsdGNvZGVfY2FudF9zZXRfcmVhZG9ubHlfbWliCTEwCisjZGVmaW5lIFA4MDIxMUVOVU1fcmVzdWx0Y29kZV9pbXBsZW1lbnRhdGlvbl9mYWlsdXJlCTExCisjZGVmaW5lIFA4MDIxMUVOVU1fcmVzdWx0Y29kZV9jYW50X2dldF93cml0ZW9ubHlfbWliCTEyCisjZGVmaW5lIFA4MDIxMUVOVU1fcmVhc29uX3Vuc3BlY19yZWFzb24JCTEKKyNkZWZpbmUgUDgwMjExRU5VTV9yZWFzb25fYXV0aF9ub3RfdmFsaWQJMgorI2RlZmluZSBQODAyMTFFTlVNX3JlYXNvbl9kZWF1dGhfbHZfc3MJCTMKKyNkZWZpbmUgUDgwMjExRU5VTV9yZWFzb25faW5hY3Rpdml0eQkJNAorI2RlZmluZSBQODAyMTFFTlVNX3JlYXNvbl9hcF9vdmVybG9hZAkJNQorI2RlZmluZSBQODAyMTFFTlVNX3JlYXNvbl9jbGFzczIzX2VycgkJNgorI2RlZmluZSBQODAyMTFFTlVNX3JlYXNvbl9jbGFzczNfZXJyCQk3CisjZGVmaW5lIFA4MDIxMUVOVU1fcmVhc29uX2Rpc2FzX2x2X3NzCQk4CisjZGVmaW5lIFA4MDIxMUVOVU1fcmVhc29uX2Fzb2Nfbm90X2F1dGgJCTkKKyNkZWZpbmUgUDgwMjExRU5VTV9zdGF0dXNfc3VjY2Vzc2Z1bAkJMAorI2RlZmluZSBQODAyMTFFTlVNX3N0YXR1c191bnNwZWNfZmFpbHVyZQkxCisjZGVmaW5lIFA4MDIxMUVOVU1fc3RhdHVzX3Vuc3VwX2NhcAkJMTAKKyNkZWZpbmUgUDgwMjExRU5VTV9zdGF0dXNfcmVhc29jX25vX2Fzb2MJMTEKKyNkZWZpbmUgUDgwMjExRU5VTV9zdGF0dXNfZmFpbF9vdGhlcgkJMTIKKyNkZWZpbmUgUDgwMjExRU5VTV9zdGF0dXNfdW5zcHRfYWxnCQkxMworI2RlZmluZSBQODAyMTFFTlVNX3N0YXR1c19hdXRoX3NlcV9mYWlsCQkxNAorI2RlZmluZSBQODAyMTFFTlVNX3N0YXR1c19jaGxuZ19mYWlsCQkxNQorI2RlZmluZSBQODAyMTFFTlVNX3N0YXR1c19hdXRoX3RpbWVvdXQJCTE2CisjZGVmaW5lIFA4MDIxMUVOVU1fc3RhdHVzX2FwX2Z1bGwJCTE3CisjZGVmaW5lIFA4MDIxMUVOVU1fc3RhdHVzX3Vuc3VwX3JhdGUJCTE4CisjZGVmaW5lIFA4MDIxMUVOVU1fc3RhdHVzX3Vuc3VwX3Nob3J0cHJlYW1ibGUJMTkKKyNkZWZpbmUgUDgwMjExRU5VTV9zdGF0dXNfdW5zdXBfcGJjYwkJMjAKKyNkZWZpbmUgUDgwMjExRU5VTV9zdGF0dXNfdW5zdXBfYWdpbGl0eQkJMjEKKyNkZWZpbmUgUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rCQkwCisjZGVmaW5lIFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfbm9fdmFsdWUJCTEKKyNkZWZpbmUgUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19pbnZhbGlkX2l0ZW1uYW1lCTIKKyNkZWZpbmUgUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19pbnZhbGlkX2l0ZW1kYXRhCTMKKyNkZWZpbmUgUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19taXNzaW5nX2l0ZW1kYXRhCTQKKyNkZWZpbmUgUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19pbmNvbXBsZXRlX2l0ZW1kYXRhCTUKKyNkZWZpbmUgUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19pbnZhbGlkX21zZ19kaWQJNgorI2RlZmluZSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2ludmFsaWRfbWliX2RpZAk3CisjZGVmaW5lIFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfbWlzc2luZ19jb252X2Z1bmMJOAorI2RlZmluZSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX3N0cmluZ190b29fbG9uZwk5CisjZGVmaW5lIFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfZGF0YV9vdXRfb2ZfcmFuZ2UJMTAKKyNkZWZpbmUgUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19zdHJpbmdfdG9vX3Nob3J0CTExCisjZGVmaW5lIFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfbWlzc2luZ192YWxpZF9mdW5jCTEyCisjZGVmaW5lIFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfdW5rbm93bgkJMTMKKyNkZWZpbmUgUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19pbnZhbGlkX2RpZAkJMTQKKyNkZWZpbmUgUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19taXNzaW5nX3ByaW50X2Z1bmMJMTUKKworI2RlZmluZSBQODAyMTFFTlVNX2xueHJvYW1fcmVhc29uX3Vua25vd24gICAgICAgIDAKKyNkZWZpbmUgUDgwMjExRU5VTV9sbnhyb2FtX3JlYXNvbl9iZWFjb24gICAgICAgICAxCisjZGVmaW5lIFA4MDIxMUVOVU1fbG54cm9hbV9yZWFzb25fc2lnbmFsICAgICAgICAgMgorI2RlZmluZSBQODAyMTFFTlVNX2xueHJvYW1fcmVhc29uX3R4cmV0cnkgICAgICAgIDMKKyNkZWZpbmUgUDgwMjExRU5VTV9sbnhyb2FtX3JlYXNvbl9ub3Rqb2luZWQgICAgICA0CisKKyNkZWZpbmUgUDgwMjExRU5VTV9wMnByZWFtYmxlX2xvbmcgICAgICAgICAgICAgICAwCisjZGVmaW5lIFA4MDIxMUVOVU1fcDJwcmVhbWJsZV9zaG9ydCAgICAgICAgICAgICAgMgorI2RlZmluZSBQODAyMTFFTlVNX3AycHJlYW1ibGVfbWl4ZWQgICAgICAgICAgICAgIDMKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qIHA4MDIxMSBtYXggbGVuZ3RoIGNvbnN0YW50cyBmb3IgdGhlIGRpZmZlcmVudCBwYXNjYWwgc3RyaW5ncy4gKi8KKworI2RlZmluZSBNQVhMRU5fUFNUUjYJCSg2KQkvKiBwYXNjYWwgYXJyYXkgb2YgNiBieXRlcyAqLworI2RlZmluZSBNQVhMRU5fUFNUUjE0CQkoMTQpCS8qIHBhc2NhbCBhcnJheSBvZiAxNCBieXRlcyAqLworI2RlZmluZSBNQVhMRU5fUFNUUjMyCQkoMzIpCS8qIHBhc2NhbCBhcnJheSBvZiAzMiBieXRlcyAqLworI2RlZmluZSBNQVhMRU5fUFNUUjI1NQkJKDI1NSkJLyogcGFzY2FsIGFycmF5IG9mIDI1NSBieXRlcyAqLworI2RlZmluZSBNQVhMRU5fTUlCQVRUUklCVVRFCSgzOTIpCS8qIG1heGltdW0gbWliYXR0cmlidXRlICovCisJCQkJCS8qIHdoZXJlIHRoZSBzaXplIG9mIHRoZSBEQVRBIGl0c2VsZiAqLworCQkJCQkvKiBpcyBhIERJRC1MRU4tREFUQSB0cmlwbGUgKi8KKwkJCQkJLyogd2l0aCBhIG1heCBzaXplIG9mIDQrNCszODQgKi8KKworI2RlZmluZSBQODAyMTFfU0VUX0lOVChpdGVtLCB2YWx1ZSkgZG8geyBcCisJKGl0ZW0pLmRhdGEgICA9ICh2YWx1ZSk7IFwKKwkoaXRlbSkuc3RhdHVzID0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rOyBcCisJfSB3aGlsZSgwKQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qIHN0cmluZyBjb25zdGFudHMgKi8KKworI2RlZmluZSBOT1RfU0VUCQkJIk5PVF9TRVQiCisjZGVmaW5lIE5PVF9TVVBQT1JURUQJCSJOT1RfU1VQUE9SVEVEIgorI2RlZmluZSBVTktOT1dOX0RBVEEJCSJVTktOT1dOX0RBVEEiCisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiAgTWV0YWRhdGEgZmxhZ3MgICovCisKKy8qIE1TTTogRG8gdGhlc2UgYmVsb25nIGluIHA4MDIxMW1ldGEuaD8gSSdtIG5vdCBzdXJlLiAqLworCisjZGVmaW5lIElTUkVRVUlSRUQJCSgweDgwMDAwMDAwVUwpCisjZGVmaW5lIElTUkVRVUVTVAkJKDB4NDAwMDAwMDBVTCkKKyNkZWZpbmUgSVNDT05GSVJNCQkoMHgyMDAwMDAwMFVMKQorCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKiBNYWNyb3MgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiBUaGUgZm9sbG93aW5nIG1hY3JvcyBhcmUgdXNlZCB0byBtYW5pcHVsYXRlIHRoZSAnZmxhZ3MnIGZpZWxkIGluICAgKi8KKy8qICB0aGUgbWV0YWRhdGEuICBUaGVzZSBhcmUgb25seSB1c2VkIHdoZW4gdGhlIG1ldGFkYXRhIGlzIGZvciAgICAgICAqLworLyogIGNvbW1hbmQgYXJndW1lbnRzIHRvIGRldGVybWluZSBpZiB0aGUgZGF0YSBpdGVtIGlzIHJlcXVpcmVkLCBhbmQgICovCisvKiAgd2hldGhlciB0aGUgbWV0YWRhdGEgaXRlbSBpcyBmb3IgYSByZXF1ZXN0IGNvbW1hbmQsIGNvbmZpcm0gICAgICAgKi8KKy8qICBjb21tYW5kIG9yIGJvdGguICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiBNU006IERvIHRoZXNlIGJlbG9uZyBpbiBwODAyMTFtZXRhLmg/ICBJJ20gbm90IHN1cmUgKi8KKworI2RlZmluZSBQODAyMTFJVEVNX1NFVEZMQUdTKHEsIHIsIGMpCSggcSB8IHIgfCBjICkKKworI2RlZmluZSBQODAyMTFJVEVNX0lTUkVRVUlSRUQoZmxhZ3MpCSgoKFVJTlQzMikoZmxhZ3MgJiBJU1JFUVVJUkVEKSkgPj4gMzEgKQorI2RlZmluZSBQODAyMTFJVEVNX0lTUkVRVUVTVChmbGFncykJKCgoVUlOVDMyKShmbGFncyAmIElTUkVRVUVTVCkpID4+IDMwICkKKyNkZWZpbmUgUDgwMjExSVRFTV9JU0NPTkZJUk0oZmxhZ3MpCSgoKFVJTlQzMikoZmxhZ3MgJiBJU0NPTkZJUk0pKSA+PiAyOSApCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiBUaGUgZm9sbG93aW5nIG1hY3JvIGNyZWF0ZXMgYSBuYW1lIGZvciBhbiBlbnVtICovCisKKyNkZWZpbmUgTUtFTlVNTkFNRShuYW1lKSBwODAyMTFlbnVtXyAjIyBuYW1lCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBUaGUgZm9sbG93aW5nIGNvbnN0YW50cyBhbmQgbWFjcm9zIGFyZSB1c2VkIHRvIGNvbnN0cnVjdCBhbmQKKyogZGVjb25zdHJ1Y3QgdGhlIERhdGEgSUQgY29kZXMuICBUaGUgY29kaW5nIGlzIGFzIGZvbGxvd3M6CisqCisqICAgICAuLi5yd3Rubm5ubm5ubmlpaWlpaWdnZ2dnZ3Nzc3NzcyAgICAgIHMgLSBTZWN0aW9uCisqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGcgLSBHcm91cAorKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpIC0gSXRlbQorKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuIC0gSW5kZXgKKyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdCAtIFRhYmxlIGZsYWcKKyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdyAtIFdyaXRlIGZsYWcKKyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgciAtIFJlYWQgZmxhZworKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuIC0gVW51c2VkCisqLworCisjZGVmaW5lIFA4MDIxMURJRF9JTlZBTElECQkweGZmZmZmZmZmVUwKKyNkZWZpbmUgUDgwMjExRElEX1ZBTElECQkJMHgwMDAwMDAwMFVMCisKKyNkZWZpbmUgUDgwMjExRElEX0xTQl9TRUNUSU9OCQkoMCkKKyNkZWZpbmUgUDgwMjExRElEX0xTQl9HUk9VUAkJKDYpCisjZGVmaW5lIFA4MDIxMURJRF9MU0JfSVRFTQkJKDEyKQorI2RlZmluZSBQODAyMTFESURfTFNCX0lOREVYCQkoMTgpCisjZGVmaW5lIFA4MDIxMURJRF9MU0JfSVNUQUJMRQkJKDI2KQorI2RlZmluZSBQODAyMTFESURfTFNCX0FDQ0VTUyAJCSgyNykKKworI2RlZmluZSBQODAyMTFESURfTUFTS19TRUNUSU9OCQkoMHgwMDAwMDAzZlVMKQorI2RlZmluZSBQODAyMTFESURfTUFTS19HUk9VUAkJKDB4MDAwMDAwM2ZVTCkKKyNkZWZpbmUgUDgwMjExRElEX01BU0tfSVRFTQkJKDB4MDAwMDAwM2ZVTCkKKyNkZWZpbmUgUDgwMjExRElEX01BU0tfSU5ERVgJCSgweDAwMDAwMGZmVUwpCisjZGVmaW5lIFA4MDIxMURJRF9NQVNLX0lTVEFCTEUJCSgweDAwMDAwMDAxVUwpCisjZGVmaW5lIFA4MDIxMURJRF9NQVNLX0FDQ0VTUyAJCSgweDAwMDAwMDAzVUwpCisKKworI2RlZmluZSBQODAyMTFESURfTUsoYSxtLGwpCSgoKChVSU5UMzIpKGEpKSAmIChtKSkgPDwgKGwpKQorCisjZGVmaW5lIFA4MDIxMURJRF9NS1NFQ1RJT04oYSkJUDgwMjExRElEX01LKGEsIFwKKwkJCQkJUDgwMjExRElEX01BU0tfU0VDVElPTiwgXAorCQkJCQlQODAyMTFESURfTFNCX1NFQ1RJT04gKQorI2RlZmluZSBQODAyMTFESURfTUtHUk9VUChhKQlQODAyMTFESURfTUsoYSwgXAorCQkJCQlQODAyMTFESURfTUFTS19HUk9VUCwgXAorCQkJCQlQODAyMTFESURfTFNCX0dST1VQICkKKyNkZWZpbmUgUDgwMjExRElEX01LSVRFTShhKQlQODAyMTFESURfTUsoYSwgXAorCQkJCQlQODAyMTFESURfTUFTS19JVEVNLCBcCisJCQkJCVA4MDIxMURJRF9MU0JfSVRFTSApCisjZGVmaW5lIFA4MDIxMURJRF9NS0lOREVYKGEpCVA4MDIxMURJRF9NSyhhLCBcCisJCQkJCVA4MDIxMURJRF9NQVNLX0lOREVYLCBcCisJCQkJCVA4MDIxMURJRF9MU0JfSU5ERVggKQorI2RlZmluZSBQODAyMTFESURfTUtJU1RBQkxFKGEpCVA4MDIxMURJRF9NSyhhLCBcCisJCQkJCVA4MDIxMURJRF9NQVNLX0lTVEFCTEUsIFwKKwkJCQkJUDgwMjExRElEX0xTQl9JU1RBQkxFICkKKworCisjZGVmaW5lIFA4MDIxMURJRF9NS0lEKHMsZyxpLG4sdCxhKQkoUDgwMjExRElEX01LU0VDVElPTihzKSB8IFwKKwkJCQkJCVA4MDIxMURJRF9NS0dST1VQKGcpIHwgXAorCQkJCSAJCVA4MDIxMURJRF9NS0lURU0oaSkgfCBcCisJCQkJIAkJUDgwMjExRElEX01LSU5ERVgobikgfCBcCisJCQkJCQlQODAyMTFESURfTUtJU1RBQkxFKHQpIHwgXAorCQkJCQkJKGEpICkKKworCisjZGVmaW5lIFA4MDIxMURJRF9HRVQoYSxtLGwpCSgoKChVSU5UMzIpKGEpKSA+PiAobCkpICYgKG0pKQorCisjZGVmaW5lIFA4MDIxMURJRF9TRUNUSU9OKGEpCVA4MDIxMURJRF9HRVQoYSwgXAorCQkJCQlQODAyMTFESURfTUFTS19TRUNUSU9OLCBcCisJCQkJCVA4MDIxMURJRF9MU0JfU0VDVElPTikKKyNkZWZpbmUgUDgwMjExRElEX0dST1VQKGEpCVA4MDIxMURJRF9HRVQoYSwgXAorCQkJCQlQODAyMTFESURfTUFTS19HUk9VUCwgXAorCQkJCQlQODAyMTFESURfTFNCX0dST1VQKQorI2RlZmluZSBQODAyMTFESURfSVRFTShhKQlQODAyMTFESURfR0VUKGEsIFwKKwkJCQkJUDgwMjExRElEX01BU0tfSVRFTSwgXAorCQkJCQlQODAyMTFESURfTFNCX0lURU0pCisjZGVmaW5lIFA4MDIxMURJRF9JTkRFWChhKQlQODAyMTFESURfR0VUKGEsIFwKKwkJCQkJUDgwMjExRElEX01BU0tfSU5ERVgsIFwKKwkJCQkJUDgwMjExRElEX0xTQl9JTkRFWCkKKyNkZWZpbmUgUDgwMjExRElEX0lTVEFCTEUoYSkJUDgwMjExRElEX0dFVChhLCBcCisJCQkJCVA4MDIxMURJRF9NQVNLX0lTVEFCTEUsIFwKKwkJCQkJUDgwMjExRElEX0xTQl9JU1RBQkxFKQorI2RlZmluZSBQODAyMTFESURfQUNDRVNTKGEpCVA4MDIxMURJRF9HRVQoYSwgXAorCQkJCQlQODAyMTFESURfTUFTS19BQ0NFU1MsIFwKKwkJCQkJUDgwMjExRElEX0xTQl9BQ0NFU1MpCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKiBUeXBlcyAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogVGhlIGZvbGxvd2luZyBzdHJ1Y3R1cmUgdHlwZXMgYXJlIHVzZWQgZm9yIHRoZSByZXByZXNlbmF0aW9uICovCisvKiAgb2YgRU5VTUlOVCB0eXBlIG1ldGFkYXRhLiAqLworCit0eXBlZGVmIHN0cnVjdCBwODAyMTFlbnVtcGFpcgoreworCVVJTlQzMgkJCXZhbDsKKwljaGFyCQkJKm5hbWU7Cit9IHA4MDIxMWVudW1wYWlyX3Q7CisKK3R5cGVkZWYgc3RydWN0IHA4MDIxMWVudW0KK3sKKwlJTlQJCQluaXRlbXM7CisJcDgwMjExZW51bXBhaXJfdAkqbGlzdDsKK30gcDgwMjExZW51bV90OworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogVGhlIGZvbGxvd2luZyBzdHJ1Y3R1cmUgdHlwZXMgYXJlIHVzZWQgdG8gc3RvcmUgZGF0YSBpdGVtcyBpbiAqLworLyogIG1lc3NhZ2VzLiAqLworCisvKiBUZW1wbGF0ZSBwYXNjYWwgc3RyaW5nICovCit0eXBlZGVmIHN0cnVjdCBwODAyMTFwc3RyCit7CisJVUlOVDgJCWxlbjsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gcDgwMjExcHN0cl90OworCit0eXBlZGVmIHN0cnVjdCBwODAyMTFwc3RyZAoreworCVVJTlQ4CQlsZW47CisJVUlOVDgJCWRhdGFbMF07Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIHA4MDIxMXBzdHJkX3Q7CisKKy8qIE1heGltdW0gcGFzY2FsIHN0cmluZyAqLwordHlwZWRlZiBzdHJ1Y3QgcDgwMjExcHN0cjI1NQoreworCVVJTlQ4CQlsZW47CisJVUlOVDgJCWRhdGFbTUFYTEVOX1BTVFIyNTVdOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBwODAyMTFwc3RyMjU1X3Q7CisKKy8qIHBhc2NhbCBzdHJpbmcgZm9yIG1hY2FkZHJlc3MgYW5kIGJzc2lkICovCit0eXBlZGVmIHN0cnVjdCBwODAyMTFwc3RyNgoreworCVVJTlQ4CQlsZW47CisJVUlOVDgJCWRhdGFbTUFYTEVOX1BTVFI2XTsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gcDgwMjExcHN0cjZfdDsKKworLyogcGFzY2FsIHN0cmluZyBmb3IgY2hhbm5lbCBsaXN0ICovCit0eXBlZGVmIHN0cnVjdCBwODAyMTFwc3RyMTQKK3sKKwlVSU5UOAkJbGVuOworCVVJTlQ4CQlkYXRhW01BWExFTl9QU1RSMTRdOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBwODAyMTFwc3RyMTRfdDsKKworLyogcGFzY2FsIHN0cmluZyBmb3Igc3NpZCAqLwordHlwZWRlZiBzdHJ1Y3QgcDgwMjExcHN0cjMyCit7CisJVUlOVDgJCWxlbjsKKwlVSU5UOAkJZGF0YVtNQVhMRU5fUFNUUjMyXTsKK30gX19XTEFOX0FUVFJJQl9QQUNLX18gcDgwMjExcHN0cjMyX3Q7CisKKy8qIE1BQyBhZGRyZXNzIGFycmF5ICovCit0eXBlZGVmIHN0cnVjdCBwODAyMTFtYWNhcnJheQoreworCVVJTlQzMgkJY250OworCVVJTlQ4CQlkYXRhWzFdW01BWExFTl9QU1RSNl07Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIHA4MDIxMW1hY2FycmF5X3Q7CisKKy8qIHByb3RvdHlwZSB0ZW1wbGF0ZSAqLwordHlwZWRlZiBzdHJ1Y3QgcDgwMjExaXRlbQoreworCVVJTlQzMgkJZGlkOworCVVJTlQxNgkJc3RhdHVzOworCVVJTlQxNgkJbGVuOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBwODAyMTFpdGVtX3Q7CisKKy8qIHByb3RvdHlwZSB0ZW1wbGF0ZSB3LyBkYXRhIGl0ZW0gKi8KK3R5cGVkZWYgc3RydWN0IHA4MDIxMWl0ZW1kCit7CisJVUlOVDMyCQlkaWQ7CisJVUlOVDE2CQlzdGF0dXM7CisJVUlOVDE2CQlsZW47CisJVUlOVDgJCWRhdGFbMF07Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIHA4MDIxMWl0ZW1kX3Q7CisKKy8qIG1lc3NhZ2UgZGF0YSBpdGVtIGZvciBJTlQsIEJPVU5ERURJTlQsIEVOVU1JTlQgKi8KK3R5cGVkZWYgc3RydWN0IHA4MDIxMWl0ZW1fdWludDMyCit7CisJVUlOVDMyCQlkaWQ7CisJVUlOVDE2CQlzdGF0dXM7CisJVUlOVDE2CQlsZW47CisJVUlOVDMyCQlkYXRhOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBwODAyMTFpdGVtX3VpbnQzMl90OworCisvKiBtZXNzYWdlIGRhdGEgaXRlbSBmb3IgT0NURVRTVFIsIERJU1BMQVlTVFIgKi8KK3R5cGVkZWYgc3RydWN0IHA4MDIxMWl0ZW1fcHN0cjYKK3sKKwlVSU5UMzIJCWRpZDsKKwlVSU5UMTYJCXN0YXR1czsKKwlVSU5UMTYJCWxlbjsKKwlwODAyMTFwc3RyNl90CWRhdGE7Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIHA4MDIxMWl0ZW1fcHN0cjZfdDsKKworLyogbWVzc2FnZSBkYXRhIGl0ZW0gZm9yIE9DVEVUU1RSLCBESVNQTEFZU1RSICovCit0eXBlZGVmIHN0cnVjdCBwODAyMTFpdGVtX3BzdHIxNAoreworCVVJTlQzMgkJCWRpZDsKKwlVSU5UMTYJCQlzdGF0dXM7CisJVUlOVDE2CQkJbGVuOworCXA4MDIxMXBzdHIxNF90CQlkYXRhOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBwODAyMTFpdGVtX3BzdHIxNF90OworCisvKiBtZXNzYWdlIGRhdGEgaXRlbSBmb3IgT0NURVRTVFIsIERJU1BMQVlTVFIgKi8KK3R5cGVkZWYgc3RydWN0IHA4MDIxMWl0ZW1fcHN0cjMyCit7CisJVUlOVDMyCQkJZGlkOworCVVJTlQxNgkJCXN0YXR1czsKKwlVSU5UMTYJCQlsZW47CisJcDgwMjExcHN0cjMyX3QJCWRhdGE7Cit9IF9fV0xBTl9BVFRSSUJfUEFDS19fIHA4MDIxMWl0ZW1fcHN0cjMyX3Q7CisKKy8qIG1lc3NhZ2UgZGF0YSBpdGVtIGZvciBPQ1RFVFNUUiwgRElTUExBWVNUUiAqLwordHlwZWRlZiBzdHJ1Y3QgcDgwMjExaXRlbV9wc3RyMjU1Cit7CisJVUlOVDMyCQkJZGlkOworCVVJTlQxNgkJCXN0YXR1czsKKwlVSU5UMTYJCQlsZW47CisJcDgwMjExcHN0cjI1NV90CQlkYXRhOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBwODAyMTFpdGVtX3BzdHIyNTVfdDsKKworLyogbWVzc2FnZSBkYXRhIGl0ZW0gZm9yIFVOSyAzOTIsIG5hbWVseSBtaWIgaXRlbXMgKi8KK3R5cGVkZWYgc3RydWN0ICBwODAyMTFpdGVtX3VuazM5MgoreworCVVJTlQzMgkJZGlkOworCVVJTlQxNgkJc3RhdHVzOworCVVJTlQxNgkJbGVuOworCVVJTlQ4CQlkYXRhW01BWExFTl9NSUJBVFRSSUJVVEVdOworfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBwODAyMTFpdGVtX3VuazM5Ml90OworCisvKiBtZXNzYWdlIGRhdGEgaXRlbSBmb3IgVU5LIDEwMjUsIG5hbWVseSBwMiBwZGFzICovCit0eXBlZGVmIHN0cnVjdCAgcDgwMjExaXRlbV91bmsxMDI0Cit7CisJVUlOVDMyCQlkaWQ7CisJVUlOVDE2CQlzdGF0dXM7CisJVUlOVDE2CQlsZW47CisJVUlOVDgJCWRhdGFbMTAyNF07Cit9ICBfX1dMQU5fQVRUUklCX1BBQ0tfXyBwODAyMTFpdGVtX3VuazEwMjRfdDsKKworLyogbWVzc2FnZSBkYXRhIGl0ZW0gZm9yIFVOSyA0MDk2LCBuYW1lbHkgcDIgZG93bmxvYWQgY2h1bmtzICovCit0eXBlZGVmIHN0cnVjdCAgcDgwMjExaXRlbV91bms0MDk2Cit7CisJVUlOVDMyCQlkaWQ7CisJVUlOVDE2CQlzdGF0dXM7CisJVUlOVDE2CQlsZW47CisJVUlOVDgJCWRhdGFbNDA5Nl07Cit9ICBfX1dMQU5fQVRUUklCX1BBQ0tfXyBwODAyMTFpdGVtX3VuazQwOTZfdDsKKworc3RydWN0IGNhdGxpc3RpdGVtOworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogVGhlIGZvbGxvd2luZyBzdHJ1Y3R1cmUgdHlwZSBpcyB1c2VkIHRvIHJlcHJlc2VudCBhbGwgb2YgdGhlICovCisvKiAgbWV0YWRhdGEgaXRlbXMuICBTb21lIGNvbXBvbmVudHMgbWF5IGNob29zZSB0byB1c2UgbW9yZSwgKi8KKy8qICBsZXNzIG9yIGRpZmZlcmVudCBtZXRhZGF0YSBpdGVtcy4gKi8KKwordHlwZWRlZiB2b2lkICgqcDgwMjExX3RvdGV4dF90KSggc3RydWN0IGNhdGxpc3RpdGVtICosIFVJTlQzMiBkaWQsIFVJTlQ4KiBpdGVtYnVmLCBjaGFyICp0ZXh0YnVmKTsKK3R5cGVkZWYgdm9pZCAoKnA4MDIxMV9mcm9tdGV4dF90KSggc3RydWN0IGNhdGxpc3RpdGVtICosIFVJTlQzMiBkaWQsIFVJTlQ4KiBpdGVtYnVmLCBjaGFyICp0ZXh0YnVmKTsKK3R5cGVkZWYgVUlOVDMyICgqcDgwMjExX3ZhbGlkX3QpKCBzdHJ1Y3QgY2F0bGlzdGl0ZW0gKiwgVUlOVDMyIGRpZCwgVUlOVDgqIGl0ZW1idWYpOworCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKiBFeHRlcm4gRGVjbGFyYXRpb25zICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiBFbnVtZXJhdGlvbiBMaXN0cyAqLworLyogIFRoZSBmb2xsb3dpbmcgYXJlIHRoZSBleHRlcm5hbCBkZWNsYXJhdGlvbnMgKi8KKy8qICBmb3IgYWxsIGVudW1lcmF0aW9ucyAgKi8KKworZXh0ZXJuIHA4MDIxMWVudW1fdCBNS0VOVU1OQU1FKHRydXRoKTsKK2V4dGVybiBwODAyMTFlbnVtX3QgTUtFTlVNTkFNRShpZnN0YXRlKTsKK2V4dGVybiBwODAyMTFlbnVtX3QgTUtFTlVNTkFNRShwb3dlcm1nbXQpOworZXh0ZXJuIHA4MDIxMWVudW1fdCBNS0VOVU1OQU1FKGJzc3R5cGUpOworZXh0ZXJuIHA4MDIxMWVudW1fdCBNS0VOVU1OQU1FKGF1dGhhbGcpOworZXh0ZXJuIHA4MDIxMWVudW1fdCBNS0VOVU1OQU1FKHBoeXR5cGUpOworZXh0ZXJuIHA4MDIxMWVudW1fdCBNS0VOVU1OQU1FKHRlbXB0eXBlKTsKK2V4dGVybiBwODAyMTFlbnVtX3QgTUtFTlVNTkFNRShyZWdkb21haW4pOworZXh0ZXJuIHA4MDIxMWVudW1fdCBNS0VOVU1OQU1FKGNjYW1vZGUpOworZXh0ZXJuIHA4MDIxMWVudW1fdCBNS0VOVU1OQU1FKGRpdmVyc2l0eSk7CitleHRlcm4gcDgwMjExZW51bV90IE1LRU5VTU5BTUUoc2NhbnR5cGUpOworZXh0ZXJuIHA4MDIxMWVudW1fdCBNS0VOVU1OQU1FKHJlc3VsdGNvZGUpOworZXh0ZXJuIHA4MDIxMWVudW1fdCBNS0VOVU1OQU1FKHJlYXNvbik7CitleHRlcm4gcDgwMjExZW51bV90IE1LRU5VTU5BTUUoc3RhdHVzKTsKK2V4dGVybiBwODAyMTFlbnVtX3QgTUtFTlVNTkFNRShtc2djb2RlKTsKK2V4dGVybiBwODAyMTFlbnVtX3QgTUtFTlVNTkFNRShtc2dpdGVtX3N0YXR1cyk7CisKK2V4dGVybiBwODAyMTFlbnVtX3QgTUtFTlVNTkFNRShsbnhyb2FtX3JlYXNvbik7CisKK2V4dGVybiBwODAyMTFlbnVtX3QgTUtFTlVNTkFNRShwMnByZWFtYmxlKTsKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKy8qIEZ1bmN0aW9uIERlY2xhcmF0aW9ucyAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogVGhlIGZvbGxvd2luZyBkZWNsYXJlIHNvbWUgdXRpbGl0eSBmdW5jdGlvbnMgZm9yIHVzZSB3aXRoIHRoZSAqLworLyogIHA4MDIxMWVudW1fdCB0eXBlLiAqLworCitVSU5UMzIgcDgwMjExZW51bV90ZXh0MmludChwODAyMTFlbnVtX3QgKmVwLCBjaGFyICp0ZXh0KTsKK1VJTlQzMiBwODAyMTFlbnVtX2ludDJ0ZXh0KHA4MDIxMWVudW1fdCAqZXAsIFVJTlQzMiB2YWwsIGNoYXIgKnRleHQpOwordm9pZCBwODAyMTFfZXJyb3IydGV4dChpbnQgZXJyX2NvZGUsIGNoYXIgKmVycl9zdHIpOworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogVGhlIGZvbGxvd2luZyBkZWNsYXJlIHNvbWUgdXRpbGl0eSBmdW5jdGlvbnMgZm9yIHVzZSB3aXRoIHRoZSAqLworLyogIHA4MDIxMWl0ZW1fdCBhbmQgcDgwMjExbWV0YV90IHR5cGVzLiAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogVGhlIGZvbGxvd2luZyBkZWNsYXJlIGZ1bmN0aW9ucyB0aGF0IHBlcmZvcm0gdmFsaWRhdGlvbiBhbmQgICAgKi8KKy8qIHRleHQgdG8gYmluYXJ5IGNvbnZlcnNpb25zIGJhc2VkIG9uIHRoZSBtZXRhZGF0YSBmb3IgaW50ZXJmYWNlICovCisvKiBhbmQgTUlCIGRhdGEgaXRlbXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyotLSBESVNQTEFZU1RSIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiBwc3RyID09PiBjc3RyICovCit2b2lkIHA4MDIxMV90b3RleHRfZGlzcGxheXN0ciggc3RydWN0IGNhdGxpc3RpdGVtICptZXRhbGlzdCwgVUlOVDMyIGRpZCwgVUlOVDggKml0ZW1idWYsIGNoYXIgKnRleHRidWYgKTsKKworLyogY3N0ciA9PT4gcHN0ciAqLwordm9pZCBwODAyMTFfZnJvbXRleHRfZGlzcGxheXN0ciggc3RydWN0IGNhdGxpc3RpdGVtICptZXRhbGlzdCwgVUlOVDMyIGRpZCwgVUlOVDggKml0ZW1idWYsIGNoYXIgKnRleHRidWYgKTsKKworLyogZnVuY3Rpb24gdGhhdCBjaGVja3MgdmFsaWRpdHkgb2YgYSBkaXNwbGF5c3RyIGJpbmFyeSB2YWx1ZSAqLworVUlOVDMyIHA4MDIxMV9pc3ZhbGlkX2Rpc3BsYXlzdHIoIHN0cnVjdCBjYXRsaXN0aXRlbSAqbWV0YWxpc3QsIFVJTlQzMiBkaWQsIFVJTlQ4ICppdGVtYnVmICk7CisKKy8qLS0gT0NURVRTVFIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogcHN0ciA9PT4gInh4Onh4Oi4uLi4iICovCit2b2lkIHA4MDIxMV90b3RleHRfb2N0ZXRzdHIoIHN0cnVjdCBjYXRsaXN0aXRlbSAqbWV0YWxpc3QsIFVJTlQzMiBkaWQsIFVJTlQ4ICppdGVtYnVmLCBjaGFyICp0ZXh0YnVmICk7CisKKy8qICJ4eDp4eDouLi4uIiA9PT4gcHN0ciAqLwordm9pZCBwODAyMTFfZnJvbXRleHRfb2N0ZXRzdHIoIHN0cnVjdCBjYXRsaXN0aXRlbSAqbWV0YWxpc3QsIFVJTlQzMiBkaWQsIFVJTlQ4ICppdGVtYnVmLCBjaGFyICp0ZXh0YnVmICk7CisKKy8qIGZ1bmN0aW9uIHRoYXQgY2hlY2tzIHZhbGlkaXR5IG9mIGFuIG9jdGV0c3RyIGJpbmFyeSB2YWx1ZSAqLworVUlOVDMyIHA4MDIxMV9pc3ZhbGlkX29jdGV0c3RyKCBzdHJ1Y3QgY2F0bGlzdGl0ZW0gKm1ldGFsaXN0LCBVSU5UMzIgZGlkLCBVSU5UOCAqaXRlbWJ1ZiApOworCisvKi0tIElOVCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qIFVJTlQzMiA9PT4gJWQgKi8KK3ZvaWQgcDgwMjExX3RvdGV4dF9pbnQoIHN0cnVjdCBjYXRsaXN0aXRlbSAqbWV0YWxpc3QsIFVJTlQzMiBkaWQsIFVJTlQ4ICppdGVtYnVmLCBjaGFyICp0ZXh0YnVmICk7CisKKy8qICVkID09PiBVSU5UMzIgKi8KK3ZvaWQgcDgwMjExX2Zyb210ZXh0X2ludCggc3RydWN0IGNhdGxpc3RpdGVtICptZXRhbGlzdCwgVUlOVDMyIGRpZCwgVUlOVDggKml0ZW1idWYsIGNoYXIgKnRleHRidWYgKTsKKworLyogZnVuY3Rpb24gdGhhdCBjaGVja3MgdmFsaWRpdHkgb2YgYW4gaW50J3MgYmluYXJ5IHZhbHVlIChhbHdheXMgc3VjY2Vzc2Z1bCkgKi8KK1VJTlQzMiBwODAyMTFfaXN2YWxpZF9pbnQoIHN0cnVjdCBjYXRsaXN0aXRlbSAqbWV0YWxpc3QsIFVJTlQzMiBkaWQsIFVJTlQ4ICppdGVtYnVmICk7CisKKy8qLS0gRU5VTUlOVCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogVUlOVDMyID09PiA8dmFsdWVuYW1lPiAqLwordm9pZCBwODAyMTFfdG90ZXh0X2VudW1pbnQoIHN0cnVjdCBjYXRsaXN0aXRlbSAqbWV0YWxpc3QsIFVJTlQzMiBkaWQsIFVJTlQ4ICppdGVtYnVmLCBjaGFyICp0ZXh0YnVmICk7CisKKy8qIDx2YWx1ZW5hbWU+ID09PiBVSU5UMzIgKi8KK3ZvaWQgcDgwMjExX2Zyb210ZXh0X2VudW1pbnQoIHN0cnVjdCBjYXRsaXN0aXRlbSAqbWV0YWxpc3QsIFVJTlQzMiBkaWQsIFVJTlQ4ICppdGVtYnVmLCBjaGFyICp0ZXh0YnVmICk7CisKKy8qIGZ1bmN0aW9uIHRoYXQgY2hlY2tzIHZhbGlkaXR5IG9mIGFuIGVudW0ncyBiaW5hcnkgdmFsdWUgKi8KK1VJTlQzMiBwODAyMTFfaXN2YWxpZF9lbnVtaW50KCBzdHJ1Y3QgY2F0bGlzdGl0ZW0gKm1ldGFsaXN0LCBVSU5UMzIgZGlkLCBVSU5UOCAqaXRlbWJ1ZiApOworCisvKi0tIElOVEFSUkFZIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qIFVJTlQzMltdID0+ICVkLCVkLCVkLC4uLiAqLwordm9pZCBwODAyMTFfdG90ZXh0X2ludGFycmF5KCBzdHJ1Y3QgY2F0bGlzdGl0ZW0gKm1ldGFsaXN0LCBVSU5UMzIgZGlkLCBVSU5UOCAqaXRlbWJ1ZiwgY2hhciAqdGV4dGJ1ZiApOworCisvKiAlZCwlZCwlZCwuLi4gPT0+IFVJTlQzMltdICovCit2b2lkIHA4MDIxMV9mcm9tdGV4dF9pbnRhcnJheSggc3RydWN0IGNhdGxpc3RpdGVtICptZXRhbGlzdCwgVUlOVDMyIGRpZCwgVUlOVDggKml0ZW1idWYsIGNoYXIgKnRleHRidWYgKTsKKworLyogZnVuY3Rpb24gdGhhdCBjaGVja3MgdmFsaWRpdHkgb2YgYW4gaW50ZWdlciBhcnJheSdzIHZhbHVlICovCitVSU5UMzIgcDgwMjExX2lzdmFsaWRfaW50YXJyYXkoIHN0cnVjdCBjYXRsaXN0aXRlbSAqbWV0YWxpc3QsIFVJTlQzMiBkaWQsIFVJTlQ4ICppdGVtYnVmICk7CisKKy8qLS0gQklUQVJSQVkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogVUlOVDMyID09PiAlZCwlZCwlZCwuLi4gKi8KK3ZvaWQgcDgwMjExX3RvdGV4dF9iaXRhcnJheSggc3RydWN0IGNhdGxpc3RpdGVtICptZXRhbGlzdCwgVUlOVDMyIGRpZCwgVUlOVDggKml0ZW1idWYsIGNoYXIgKnRleHRidWYgKTsKKworLyogJWQsJWQsJWQsLi4uID09PiBVSU5UMzIgKi8KK3ZvaWQgcDgwMjExX2Zyb210ZXh0X2JpdGFycmF5KCBzdHJ1Y3QgY2F0bGlzdGl0ZW0gKm1ldGFsaXN0LCBVSU5UMzIgZGlkLCBVSU5UOCAqaXRlbWJ1ZiwgY2hhciAqdGV4dGJ1ZiApOworCisvKiBmdW5jdGlvbiB0aGF0IGNoZWNrcyB2YWxpZGl0eSBvZiBhIGJpdCBhcnJheSdzIHZhbHVlICovCitVSU5UMzIgcDgwMjExX2lzdmFsaWRfYml0YXJyYXkoIHN0cnVjdCBjYXRsaXN0aXRlbSAqbWV0YWxpc3QsIFVJTlQzMiBkaWQsIFVJTlQ4ICppdGVtYnVmICk7CisKKy8qLS0gTUFDQVJSQVkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwordm9pZCBwODAyMTFfdG90ZXh0X21hY2FycmF5KCBzdHJ1Y3QgY2F0bGlzdGl0ZW0gKm1ldGFsaXN0LCBVSU5UMzIgZGlkLCBVSU5UOCAqaXRlbWJ1ZiwgY2hhciAqdGV4dGJ1ZiApOworCit2b2lkIHA4MDIxMV9mcm9tdGV4dF9tYWNhcnJheSggc3RydWN0IGNhdGxpc3RpdGVtICptZXRhbGlzdCwgVUlOVDMyIGRpZCwgVUlOVDggKml0ZW1idWYsIGNoYXIgKnRleHRidWYgKTsKKworLyogZnVuY3Rpb24gdGhhdCBjaGVja3MgdmFsaWRpdHkgb2YgYSBNQUMgYWRkcmVzcyBhcnJheSdzIHZhbHVlICovCitVSU5UMzIgcDgwMjExX2lzdmFsaWRfbWFjYXJyYXkoIHN0cnVjdCBjYXRsaXN0aXRlbSAqbWV0YWxpc3QsIFVJTlQzMiBkaWQsIFVJTlQ4ICppdGVtYnVmICk7CisKKy8qLS0gTUlCQVRUUklVQlRFIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiA8bWlidmFsdWU+ID09PiA8dGV4dHVhbCByZXByZXNlbnRhdGlvbiBpZGVudGlmaWVkIGluIE1JQiBtZXRhZGF0YT4gKi8KK3ZvaWQgcDgwMjExX3RvdGV4dF9nZXRtaWJhdHRyaWJ1dGUoIHN0cnVjdCBjYXRsaXN0aXRlbSAqbWV0YWxpc3QsIFVJTlQzMiBkaWQsIFVJTlQ4ICppdGVtYnVmLCBjaGFyICp0ZXh0YnVmICk7Cit2b2lkIHA4MDIxMV90b3RleHRfc2V0bWliYXR0cmlidXRlKCBzdHJ1Y3QgY2F0bGlzdGl0ZW0gKm1ldGFsaXN0LCBVSU5UMzIgZGlkLCBVSU5UOCAqaXRlbWJ1ZiwgY2hhciAqdGV4dGJ1ZiApOworCisKKy8qIDx0ZXh0dWFsIHJlcHJlc2VudGF0aW9uIGlkZW50aWZpZWQgaW4gTUlCIG1ldGFkYXRhPiA9PT4gPG1pYnZhbHVlPiAqLwordm9pZCBwODAyMTFfZnJvbXRleHRfZ2V0bWliYXR0cmlidXRlKCBzdHJ1Y3QgY2F0bGlzdGl0ZW0gKm1ldGFsaXN0LCBVSU5UMzIgZGlkLCBVSU5UOCAqaXRlbWJ1ZiwgY2hhciAqdGV4dGJ1ZiApOwordm9pZCBwODAyMTFfZnJvbXRleHRfc2V0bWliYXR0cmlidXRlKCBzdHJ1Y3QgY2F0bGlzdGl0ZW0gKm1ldGFsaXN0LCBVSU5UMzIgZGlkLCBVSU5UOCAqaXRlbWJ1ZiwgY2hhciAqdGV4dGJ1ZiApOworCisvKiBmdW5jdGlvbiB0aGF0IGNoZWNrcyB2YWxpZGl0eSBvZiBhIG1pYml0ZW0ncyBiaW5hcnkgdmFsdWUgKi8KK1VJTlQzMiBwODAyMTFfaXN2YWxpZF9nZXRtaWJhdHRyaWJ1dGUoIHN0cnVjdCBjYXRsaXN0aXRlbSAqbWV0YWxpc3QsIFVJTlQzMiBkaWQsIFVJTlQ4ICppdGVtYnVmICk7CitVSU5UMzIgcDgwMjExX2lzdmFsaWRfc2V0bWliYXR0cmlidXRlKCBzdHJ1Y3QgY2F0bGlzdGl0ZW0gKm1ldGFsaXN0LCBVSU5UMzIgZGlkLCBVSU5UOCAqaXRlbWJ1ZiApOworCisjZW5kaWYgLyogX1A4MDIxMVRZUEVTX0ggKi8KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcDgwMjExd2VwLmMgYi9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wODAyMTF3ZXAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41M2ZlMjk4Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcDgwMjExd2VwLmMKQEAgLTAsMCArMSwzMTcgQEAKKy8qIHNyYy9wODAyMTEvcDgwMjExd2VwLmMKKyoKKyogV0VQIGVuY29kZS9kZWNvZGUgZm9yIFA4MDIxMS4KKyoKKyogQ29weXJpZ2h0IChDKSAyMDAyIEFic29sdXRlVmFsdWUgU3lzdGVtcywgSW5jLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyoKKyogbGludXgtd2xhbgorKgorKiAgIFRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgYXJlIHN1YmplY3QgdG8gdGhlIE1vemlsbGEgUHVibGljCisqICAgTGljZW5zZSBWZXJzaW9uIDEuMSAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUKKyogICBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YKKyogICB0aGUgTGljZW5zZSBhdCBodHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC8KKyoKKyogICBTb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMKKyogICBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yCisqICAgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nCisqICAgcmlnaHRzIGFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyoKKyogICBBbHRlcm5hdGl2ZWx5LCB0aGUgY29udGVudHMgb2YgdGhpcyBmaWxlIG1heSBiZSB1c2VkIHVuZGVyIHRoZQorKiAgIHRlcm1zIG9mIHRoZSBHTlUgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyICh0aGUgIkdQTCIpLCBpbiB3aGljaAorKiAgIGNhc2UgdGhlIHByb3Zpc2lvbnMgb2YgdGhlIEdQTCBhcmUgYXBwbGljYWJsZSBpbnN0ZWFkIG9mIHRoZQorKiAgIGFib3ZlLiAgSWYgeW91IHdpc2ggdG8gYWxsb3cgdGhlIHVzZSBvZiB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlCisqICAgb25seSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdQTCBhbmQgbm90IHRvIGFsbG93IG90aGVycyB0byB1c2UKKyogICB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIHVuZGVyIHRoZSBNUEwsIGluZGljYXRlIHlvdXIgZGVjaXNpb24KKyogICBieSBkZWxldGluZyB0aGUgcHJvdmlzaW9ucyBhYm92ZSBhbmQgcmVwbGFjZSB0aGVtIHdpdGggdGhlIG5vdGljZQorKiAgIGFuZCBvdGhlciBwcm92aXNpb25zIHJlcXVpcmVkIGJ5IHRoZSBHUEwuICBJZiB5b3UgZG8gbm90IGRlbGV0ZQorKiAgIHRoZSBwcm92aXNpb25zIGFib3ZlLCBhIHJlY2lwaWVudCBtYXkgdXNlIHlvdXIgdmVyc2lvbiBvZiB0aGlzCisqICAgZmlsZSB1bmRlciBlaXRoZXIgdGhlIE1QTCBvciB0aGUgR1BMLgorKgorKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKgorKiBJbnF1aXJpZXMgcmVnYXJkaW5nIHRoZSBsaW51eC13bGFuIE9wZW4gU291cmNlIHByb2plY3QgY2FuIGJlCisqIG1hZGUgZGlyZWN0bHkgdG86CisqCisqIEFic29sdXRlVmFsdWUgU3lzdGVtcyBJbmMuCisqIGluZm9AbGludXgtd2xhbi5jb20KKyogaHR0cDovL3d3dy5saW51eC13bGFuLmNvbQorKgorKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKgorKiBQb3J0aW9ucyBvZiB0aGUgZGV2ZWxvcG1lbnQgb2YgdGhpcyBzb2Z0d2FyZSB3ZXJlIGZ1bmRlZCBieQorKiBJbnRlcnNpbCBDb3Jwb3JhdGlvbiBhcyBwYXJ0IG9mIFBSSVNNKFIpIGNoaXBzZXQgcHJvZHVjdCBkZXZlbG9wbWVudC4KKyoKKyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyovCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKiBTeXN0ZW0gSW5jbHVkZXMgKi8KKworCisjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgorCisjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvd2lyZWxlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvcmFuZG9tLmg+CisKKyNpbmNsdWRlICJ2ZXJzaW9uLmgiCisjaW5jbHVkZSAid2xhbl9jb21wYXQuaCIKKworLy8gI2RlZmluZSBXRVBfREVCVUcKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKy8qIFByb2plY3QgSW5jbHVkZXMgKi8KKworI2luY2x1ZGUgInZlcnNpb24uaCIKKyNpbmNsdWRlICJwODAyMTFoZHIuaCIKKyNpbmNsdWRlICJwODAyMTF0eXBlcy5oIgorI2luY2x1ZGUgInA4MDIxMW1zZy5oIgorI2luY2x1ZGUgInA4MDIxMWNvbnYuaCIKKyNpbmNsdWRlICJwODAyMTFuZXRkZXYuaCIKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKy8qIExvY2FsIENvbnN0YW50cyAqLworCisjZGVmaW5lIFNTV0FQKGEsYikge1VJTlQ4IHRtcCA9IHNbYV07IHNbYV0gPSBzW2JdOyBzW2JdID0gdG1wO30KKyNkZWZpbmUgV0VQX0tFWSh4KSAgICAgICAoKCh4KSAmIDB4QzApID4+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+dHlwZSA9IEFSUEhSRF9JRUVFODAyMTFfUFJJU007CisJCX0gZWxzZSB7CisJCQl3bGFuZGV2LT5uZXRkZXYtPnR5cGUgPSBBUlBIUkRfSUVFRTgwMjExOworCQl9CisKKwkJbXNnLT5yZXN1bHRjb2RlLmRhdGEgPSBQODAyMTFFTlVNX3Jlc3VsdGNvZGVfc3VjY2VzczsKKwkJcmVzdWx0ID0gMDsKKwkJZ290byBleGl0OworCQlicmVhazsKKwlkZWZhdWx0OgorCQltc2ctPnJlc3VsdGNvZGUuZGF0YSA9IFA4MDIxMUVOVU1fcmVzdWx0Y29kZV9pbnZhbGlkX3BhcmFtZXRlcnM7CisJCXJlc3VsdCA9IDA7CisJCWdvdG8gZXhpdDsKKwkJYnJlYWs7CisJfQorCitmYWlsZWQ6CisJbXNnLT5yZXN1bHRjb2RlLmRhdGEgPSBQODAyMTFFTlVNX3Jlc3VsdGNvZGVfcmVmdXNlZDsKKwlyZXN1bHQgPSAwOworZXhpdDoKKworCURCRkVYSVQ7CisJcmV0dXJuIHJlc3VsdDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3ByaXNtMm1nbXQuaCBiL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3ByaXNtMm1nbXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MzNmZDk5Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcHJpc20ybWdtdC5oCkBAIC0wLDAgKzEsMTgyIEBACisvKiBwcmlzbTJtZ210LmgKKyoKKyogRGVjbGFyZXMgdGhlIG1nbXQgY29tbWFuZCBoYW5kbGVyIGZ1bmN0aW9ucworKgorKiBDb3B5cmlnaHQgKEMpIDE5OTkgQWJzb2x1dGVWYWx1ZSBTeXN0ZW1zLCBJbmMuICBBbGwgUmlnaHRzIFJlc2VydmVkLgorKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKgorKiBsaW51eC13bGFuCisqCisqICAgVGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBhcmUgc3ViamVjdCB0byB0aGUgTW96aWxsYSBQdWJsaWMKKyogICBMaWNlbnNlIFZlcnNpb24gMS4xICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZQorKiAgIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZgorKiAgIHRoZSBMaWNlbnNlIGF0IGh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBMLworKgorKiAgIFNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUworKiAgIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IKKyogICBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcKKyogICByaWdodHMgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorKgorKiAgIEFsdGVybmF0aXZlbHksIHRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgbWF5IGJlIHVzZWQgdW5kZXIgdGhlCisqICAgdGVybXMgb2YgdGhlIEdOVSBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgKHRoZSAiR1BMIiksIGluIHdoaWNoCisqICAgY2FzZSB0aGUgcHJvdmlzaW9ucyBvZiB0aGUgR1BMIGFyZSBhcHBsaWNhYmxlIGluc3RlYWQgb2YgdGhlCisqICAgYWJvdmUuICBJZiB5b3Ugd2lzaCB0byBhbGxvdyB0aGUgdXNlIG9mIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUKKyogICBvbmx5IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR1BMIGFuZCBub3QgdG8gYWxsb3cgb3RoZXJzIHRvIHVzZQorKiAgIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgdW5kZXIgdGhlIE1QTCwgaW5kaWNhdGUgeW91ciBkZWNpc2lvbgorKiAgIGJ5IGRlbGV0aW5nIHRoZSBwcm92aXNpb25zIGFib3ZlIGFuZCByZXBsYWNlIHRoZW0gd2l0aCB0aGUgbm90aWNlCisqICAgYW5kIG90aGVyIHByb3Zpc2lvbnMgcmVxdWlyZWQgYnkgdGhlIEdQTC4gIElmIHlvdSBkbyBub3QgZGVsZXRlCisqICAgdGhlIHByb3Zpc2lvbnMgYWJvdmUsIGEgcmVjaXBpZW50IG1heSB1c2UgeW91ciB2ZXJzaW9uIG9mIHRoaXMKKyogICBmaWxlIHVuZGVyIGVpdGhlciB0aGUgTVBMIG9yIHRoZSBHUEwuCisqCisqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqCisqIElucXVpcmllcyByZWdhcmRpbmcgdGhlIGxpbnV4LXdsYW4gT3BlbiBTb3VyY2UgcHJvamVjdCBjYW4gYmUKKyogbWFkZSBkaXJlY3RseSB0bzoKKyoKKyogQWJzb2x1dGVWYWx1ZSBTeXN0ZW1zIEluYy4KKyogaW5mb0BsaW51eC13bGFuLmNvbQorKiBodHRwOi8vd3d3LmxpbnV4LXdsYW4uY29tCisqCisqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqCisqIFBvcnRpb25zIG9mIHRoZSBkZXZlbG9wbWVudCBvZiB0aGlzIHNvZnR3YXJlIHdlcmUgZnVuZGVkIGJ5CisqIEludGVyc2lsIENvcnBvcmF0aW9uIGFzIHBhcnQgb2YgUFJJU00oUikgY2hpcHNldCBwcm9kdWN0IGRldmVsb3BtZW50LgorKgorKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKgorKiBUaGlzIGZpbGUgY29udGFpbnMgdGhlIGNvbnN0YW50cyBhbmQgZGF0YSBzdHJ1Y3R1cmVzIGZvciBpbnRlcmFjdGlvbgorKiB3aXRoIHRoZSBoZmEzODR4IFdpcmVsZXNzIExBTiAoV0xBTikgTWVkaWEgQWNjZXNzIENvbnRvbGxlciAoTUFDKS4KKyogVGhlIGhmYTM4NHggaXMgYSBwb3J0aW9uIG9mIHRoZSBIYXJyaXMgUFJJU00odG0pIFdMQU4gY2hpcHNldC4KKyoKKyogW0ltcGxlbWVudGF0aW9uIGFuZCB1c2FnZSBub3Rlc10KKyoKKyogW1JlZmVyZW5jZXNdCisqICAgQ1cxMCBQcm9ncmFtbWVyJ3MgTWFudWFsIHYxLjUKKyogICBJRUVFIDgwMi4xMSBEMTAuMAorKgorKiAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKi8KKworI2lmbmRlZiBfUFJJU00yTUdNVF9ICisjZGVmaW5lIF9QUklTTTJNR01UX0gKKworCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworLyotLS0tLS0gQ29uc3RhbnRzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKy8qLS0tLS0tIE1hY3JvcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKi0tLS0tLSBUeXBlcyBhbmQgdGhlaXIgcmVsYXRlZCBjb25zdGFudHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworLyotLS0tLS0gU3RhdGljIHZhcmlhYmxlIGV4dGVybnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworI2lmIChXTEFOX0hPU1RJRiAhPSBXTEFOX1VTQikKK2V4dGVybiBpbnQgICAgICBwcmlzbTJfYmFwX3RpbWVvdXQ7CitleHRlcm4gaW50CXByaXNtMl9pcnFfZXZyZWFkX21heDsKKyNlbmRpZgorZXh0ZXJuIGludAlwcmlzbTJfZGVidWc7CitleHRlcm4gaW50ICAgICAgcHJpc20yX3Jlc2V0X2hvbGR0aW1lOworZXh0ZXJuIGludCAgICAgIHByaXNtMl9yZXNldF9zZXR0bGV0aW1lOworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKy8qLS0tIEZ1bmN0aW9uIERlY2xhcmF0aW9ucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworCitVSU5UMzIKK3ByaXNtMnN0YV9pZnN0YXRlKHdsYW5kZXZpY2VfdCAqd2xhbmRldiwgVUlOVDMyIGlmc3RhdGUpOworCit2b2lkCitwcmlzbTJzdGFfZXZfZHRpbSh3bGFuZGV2aWNlX3QgKndsYW5kZXYpOwordm9pZAorcHJpc20yc3RhX2V2X2luZmRyb3Aod2xhbmRldmljZV90ICp3bGFuZGV2KTsKK3ZvaWQKK3ByaXNtMnN0YV9ldl9pbmZvKHdsYW5kZXZpY2VfdCAqd2xhbmRldiwgaGZhMzg0eF9JbmZGcmFtZV90ICppbmYpOwordm9pZAorcHJpc20yc3RhX2V2X3R4ZXhjKHdsYW5kZXZpY2VfdCAqd2xhbmRldiwgVUlOVDE2IHN0YXR1cyk7Cit2b2lkCitwcmlzbTJzdGFfZXZfdHgod2xhbmRldmljZV90ICp3bGFuZGV2LCBVSU5UMTYgc3RhdHVzKTsKK3ZvaWQKK3ByaXNtMnN0YV9ldl9yeCh3bGFuZGV2aWNlX3QgKndsYW5kZXYsIHN0cnVjdCBza19idWZmICpza2IpOwordm9pZAorcHJpc20yc3RhX2V2X2FsbG9jKHdsYW5kZXZpY2VfdCAqd2xhbmRldik7CisKKworaW50IHByaXNtMm1nbXRfbWlic2V0X21pYmdldCh3bGFuZGV2aWNlX3QgKndsYW5kZXYsIHZvaWQgKm1zZ3ApOworaW50IHByaXNtMm1nbXRfcG93ZXJtZ210KHdsYW5kZXZpY2VfdCAqd2xhbmRldiwgdm9pZCAqbXNncCk7CitpbnQgcHJpc20ybWdtdF9zY2FuKHdsYW5kZXZpY2VfdCAqd2xhbmRldiwgdm9pZCAqbXNncCk7CitpbnQgcHJpc20ybWdtdF9zY2FuX3Jlc3VsdHMod2xhbmRldmljZV90ICp3bGFuZGV2LCB2b2lkICptc2dwKTsKK2ludCBwcmlzbTJtZ210X2pvaW4od2xhbmRldmljZV90ICp3bGFuZGV2LCB2b2lkICptc2dwKTsKK2ludCBwcmlzbTJtZ210X3AyX2pvaW4od2xhbmRldmljZV90ICp3bGFuZGV2LCB2b2lkICptc2dwKTsKK2ludCBwcmlzbTJtZ210X2F1dGhlbnRpY2F0ZSh3bGFuZGV2aWNlX3QgKndsYW5kZXYsIHZvaWQgKm1zZ3ApOworaW50IHByaXNtMm1nbXRfZGVhdXRoZW50aWNhdGUod2xhbmRldmljZV90ICp3bGFuZGV2LCB2b2lkICptc2dwKTsKK2ludCBwcmlzbTJtZ210X2Fzc29jaWF0ZSh3bGFuZGV2aWNlX3QgKndsYW5kZXYsIHZvaWQgKm1zZ3ApOworaW50IHByaXNtMm1nbXRfcmVhc3NvY2lhdGUod2xhbmRldmljZV90ICp3bGFuZGV2LCB2b2lkICptc2dwKTsKK2ludCBwcmlzbTJtZ210X2Rpc2Fzc29jaWF0ZSh3bGFuZGV2aWNlX3QgKndsYW5kZXYsIHZvaWQgKm1zZ3ApOworaW50IHByaXNtMm1nbXRfcmVzZXQod2xhbmRldmljZV90ICp3bGFuZGV2LCB2b2lkICptc2dwKTsKK2ludCBwcmlzbTJtZ210X3N0YXJ0KHdsYW5kZXZpY2VfdCAqd2xhbmRldiwgdm9pZCAqbXNncCk7CitpbnQgcHJpc20ybWdtdF93bGFuc25pZmYod2xhbmRldmljZV90ICp3bGFuZGV2LCB2b2lkICptc2dwKTsKK2ludCBwcmlzbTJtZ210X3JlYWRwZGEod2xhbmRldmljZV90ICp3bGFuZGV2LCB2b2lkICptc2dwKTsKK2ludCBwcmlzbTJtZ210X3JlYWRjaXMod2xhbmRldmljZV90ICp3bGFuZGV2LCB2b2lkICptc2dwKTsKK2ludCBwcmlzbTJtZ210X2F1eHBvcnRfc3RhdGUod2xhbmRldmljZV90ICp3bGFuZGV2LCB2b2lkICptc2dwKTsKK2ludCBwcmlzbTJtZ210X2F1eHBvcnRfcmVhZCh3bGFuZGV2aWNlX3QgKndsYW5kZXYsIHZvaWQgKm1zZ3ApOworaW50IHByaXNtMm1nbXRfYXV4cG9ydF93cml0ZSh3bGFuZGV2aWNlX3QgKndsYW5kZXYsIHZvaWQgKm1zZ3ApOworaW50IHByaXNtMm1nbXRfbG93X2xldmVsKHdsYW5kZXZpY2VfdCAqd2xhbmRldiwgdm9pZCAqbXNncCk7CitpbnQgcHJpc20ybWdtdF90ZXN0X2NvbW1hbmQod2xhbmRldmljZV90ICp3bGFuZGV2LCB2b2lkICptc2dwKTsKK2ludCBwcmlzbTJtZ210X21taV9yZWFkKHdsYW5kZXZpY2VfdCAqd2xhbmRldiwgdm9pZCAqbXNncCk7CitpbnQgcHJpc20ybWdtdF9tbWlfd3JpdGUod2xhbmRldmljZV90ICp3bGFuZGV2LCB2b2lkICptc2dwKTsKK2ludCBwcmlzbTJtZ210X3JhbWRsX3N0YXRlKHdsYW5kZXZpY2VfdCAqd2xhbmRldiwgdm9pZCAqbXNncCk7CitpbnQgcHJpc20ybWdtdF9yYW1kbF93cml0ZSh3bGFuZGV2aWNlX3QgKndsYW5kZXYsIHZvaWQgKm1zZ3ApOworaW50IHByaXNtMm1nbXRfZmxhc2hkbF9zdGF0ZSh3bGFuZGV2aWNlX3QgKndsYW5kZXYsIHZvaWQgKm1zZ3ApOworaW50IHByaXNtMm1nbXRfZmxhc2hkbF93cml0ZSh3bGFuZGV2aWNlX3QgKndsYW5kZXYsIHZvaWQgKm1zZ3ApOworaW50IHByaXNtMm1nbXRfbW1fc3RhdGUod2xhbmRldmljZV90ICp3bGFuZGV2LCB2b2lkICptc2dwKTsKK2ludCBwcmlzbTJtZ210X2R1bXBfc3RhdGUod2xhbmRldmljZV90ICp3bGFuZGV2LCB2b2lkICptc2dwKTsKK2ludCBwcmlzbTJtZ210X2VuYWJsZSh3bGFuZGV2aWNlX3QgKndsYW5kZXYsIHZvaWQgKm1zZ3ApOworaW50IHByaXNtMm1nbXRfY2hhbm5lbF9pbmZvKHdsYW5kZXZpY2VfdCAqd2xhbmRldiwgdm9pZCAqbXNncCk7CitpbnQgcHJpc20ybWdtdF9jaGFubmVsX2luZm9fcmVzdWx0cyh3bGFuZGV2aWNlX3QgKndsYW5kZXYsIHZvaWQgKm1zZ3ApOworaW50IHByaXNtMm1nbXRfYXV0b2pvaW4od2xhbmRldmljZV90ICp3bGFuZGV2LCB2b2lkICptc2dwKTsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogY29udmVyc2lvbiBmdW5jdGlvbnMgZ29pbmcgYmV0d2VlbiB3bGFuIG1lc3NhZ2UgZGF0YSB0eXBlcyBhbmQKKyogUHJpc20yIGRhdGEgdHlwZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiBieXRlIGFyZWEgY29udmVyc2lvbiBmdW5jdGlvbnMqLwordm9pZCBwcmlzbTJtZ210X3BzdHIyYnl0ZWFyZWEoVUlOVDggKmJ5dGVhcmVhLCBwODAyMTFwc3RyZF90ICpwc3RyKTsKK3ZvaWQgcHJpc20ybWdtdF9ieXRlYXJlYTJwc3RyKFVJTlQ4ICpieXRlYXJlYSwgcDgwMjExcHN0cmRfdCAqcHN0ciwgaW50IGxlbik7CisKKy8qIGJ5dGUgc3RyaW5nIGNvbnZlcnNpb24gZnVuY3Rpb25zKi8KK3ZvaWQgcHJpc20ybWdtdF9wc3RyMmJ5dGVzdHIoaGZhMzg0eF9ieXRlc3RyX3QgKmJ5dGVzdHIsIHA4MDIxMXBzdHJkX3QgKnBzdHIpOwordm9pZCBwcmlzbTJtZ210X2J5dGVzdHIycHN0cihoZmEzODR4X2J5dGVzdHJfdCAqYnl0ZXN0ciwgcDgwMjExcHN0cmRfdCAqcHN0cik7CisKKy8qIGludGVnZXIgY29udmVyc2lvbiBmdW5jdGlvbnMgKi8KK3ZvaWQgcHJpc20ybWdtdF9wcmlzbTJpbnQycDgwMjExaW50KFVJTlQxNiAqcHJpc20yaW50LCBVSU5UMzIgKndsYW5pbnQpOwordm9pZCBwcmlzbTJtZ210X3A4MDIxMWludDJwcmlzbTJpbnQoVUlOVDE2ICpwcmlzbTJpbnQsIFVJTlQzMiAqd2xhbmludCk7CisKKy8qIGVudW1lcmF0ZWQgaW50ZWdlciBjb252ZXJzaW9uIGZ1bmN0aW9ucyAqLwordm9pZCBwcmlzbTJtZ210X3ByaXNtMmVudW0ycDgwMjExZW51bShVSU5UMTYgKnByaXNtMmVudW0sIFVJTlQzMiAqd2xhbmVudW0sIFVJTlQxNiByaWQpOwordm9pZCBwcmlzbTJtZ210X3A4MDIxMWVudW0ycHJpc20yZW51bShVSU5UMTYgKnByaXNtMmVudW0sIFVJTlQzMiAqd2xhbmVudW0sIFVJTlQxNiByaWQpOworCisvKiBmdW5jdGlvbnMgdG8gY29udmVydCBhIGJpdCBhcmVhIHRvL2Zyb20gYW4gT3BlcmF0aW9uYWwgUmF0ZSBTZXQgKi8KK3ZvaWQgcHJpc20ybWdtdF9nZXRfb3ByYXRlc2V0KFVJTlQxNiAqcmF0ZSwgcDgwMjExcHN0cmRfdCAqcHN0cik7Cit2b2lkIHByaXNtMm1nbXRfc2V0X29wcmF0ZXNldChVSU5UMTYgKnJhdGUsIHA4MDIxMXBzdHJkX3QgKnBzdHIpOworCisvKiBmdW5jdGlvbnMgdG8gY29udmVydCBHcm91cCBBZGRyZXNzZXMgKi8KK3ZvaWQgcHJpc20ybWdtdF9nZXRfZ3JwYWRkcihVSU5UMzIgZGlkLAorCXA4MDIxMXBzdHJkX3QgKnBzdHIsIGhmYTM4NHhfdCAqcHJpdiApOworaW50IHByaXNtMm1nbXRfc2V0X2dycGFkZHIoVUlOVDMyIGRpZCwKKwlVSU5UOCAqcHJpc20yYnVmLCBwODAyMTFwc3RyZF90ICpwc3RyLCBoZmEzODR4X3QgKnByaXYgKTsKK2ludCBwcmlzbTJtZ210X2dldF9ncnBhZGRyX2luZGV4KCBVSU5UMzIgZGlkICk7CisKK3ZvaWQgcHJpc20yc3RhX3Byb2Nlc3NpbmdfZGVmZXIoc3RydWN0IHdvcmtfc3RydWN0ICpkYXRhKTsKKwordm9pZCBwcmlzbTJzdGFfY29tbXNxdWFsX2RlZmVyKHN0cnVjdCB3b3JrX3N0cnVjdCAqZGF0YSk7Cit2b2lkIHByaXNtMnN0YV9jb21tc3F1YWxfdGltZXIodW5zaWduZWQgbG9uZyBkYXRhKTsKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKy8qLS0tIElubGluZSBGdW5jdGlvbiBEZWZpbml0aW9ucyAoaWYgc3VwcG9ydGVkKSAtLS0tLS0tLS0tLS0tLSovCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworCisKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wcmlzbTJtaWIuYyBiL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3ByaXNtMm1pYi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI2OGZkOWIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wcmlzbTJtaWIuYwpAQCAtMCwwICsxLDM3OTkgQEAKKy8qIHNyYy9wcmlzbTIvZHJpdmVyL3ByaXNtMm1pYi5jCisqCisqIE1hbmFnZW1lbnQgcmVxdWVzdCBmb3IgbWlic2V0L21pYmdldAorKgorKiBDb3B5cmlnaHQgKEMpIDE5OTkgQWJzb2x1dGVWYWx1ZSBTeXN0ZW1zLCBJbmMuICBBbGwgUmlnaHRzIFJlc2VydmVkLgorKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKgorKiBsaW51eC13bGFuCisqCisqICAgVGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBhcmUgc3ViamVjdCB0byB0aGUgTW96aWxsYSBQdWJsaWMKKyogICBMaWNlbnNlIFZlcnNpb24gMS4xICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZQorKiAgIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZgorKiAgIHRoZSBMaWNlbnNlIGF0IGh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBMLworKgorKiAgIFNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUworKiAgIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IKKyogICBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcKKyogICByaWdodHMgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorKgorKiAgIEFsdGVybmF0aXZlbHksIHRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgbWF5IGJlIHVzZWQgdW5kZXIgdGhlCisqICAgdGVybXMgb2YgdGhlIEdOVSBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgKHRoZSAiR1BMIiksIGluIHdoaWNoCisqICAgY2FzZSB0aGUgcHJvdmlzaW9ucyBvZiB0aGUgR1BMIGFyZSBhcHBsaWNhYmxlIGluc3RlYWQgb2YgdGhlCisqICAgYWJvdmUuICBJZiB5b3Ugd2lzaCB0byBhbGxvdyB0aGUgdXNlIG9mIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUKKyogICBvbmx5IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR1BMIGFuZCBub3QgdG8gYWxsb3cgb3RoZXJzIHRvIHVzZQorKiAgIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgdW5kZXIgdGhlIE1QTCwgaW5kaWNhdGUgeW91ciBkZWNpc2lvbgorKiAgIGJ5IGRlbGV0aW5nIHRoZSBwcm92aXNpb25zIGFib3ZlIGFuZCByZXBsYWNlIHRoZW0gd2l0aCB0aGUgbm90aWNlCisqICAgYW5kIG90aGVyIHByb3Zpc2lvbnMgcmVxdWlyZWQgYnkgdGhlIEdQTC4gIElmIHlvdSBkbyBub3QgZGVsZXRlCisqICAgdGhlIHByb3Zpc2lvbnMgYWJvdmUsIGEgcmVjaXBpZW50IG1heSB1c2UgeW91ciB2ZXJzaW9uIG9mIHRoaXMKKyogICBmaWxlIHVuZGVyIGVpdGhlciB0aGUgTVBMIG9yIHRoZSBHUEwuCisqCisqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqCisqIElucXVpcmllcyByZWdhcmRpbmcgdGhlIGxpbnV4LXdsYW4gT3BlbiBTb3VyY2UgcHJvamVjdCBjYW4gYmUKKyogbWFkZSBkaXJlY3RseSB0bzoKKyoKKyogQWJzb2x1dGVWYWx1ZSBTeXN0ZW1zIEluYy4KKyogaW5mb0BsaW51eC13bGFuLmNvbQorKiBodHRwOi8vd3d3LmxpbnV4LXdsYW4uY29tCisqCisqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqCisqIFBvcnRpb25zIG9mIHRoZSBkZXZlbG9wbWVudCBvZiB0aGlzIHNvZnR3YXJlIHdlcmUgZnVuZGVkIGJ5CisqIEludGVyc2lsIENvcnBvcmF0aW9uIGFzIHBhcnQgb2YgUFJJU00oUikgY2hpcHNldCBwcm9kdWN0IGRldmVsb3BtZW50LgorKgorKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKgorKiBUaGUgZnVuY3Rpb25zIGluIHRoaXMgZmlsZSBoYW5kbGUgdGhlIG1pYnNldC9taWJnZXQgbWFuYWdlbWVudAorKiBmdW5jdGlvbnMuCisqCisqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqLworCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworLyogU3lzdGVtIEluY2x1ZGVzICovCisjZGVmaW5lIFdMQU5fREJWQVIJcHJpc20yX2RlYnVnCisKKyNpbmNsdWRlICJ2ZXJzaW9uLmgiCisKKworI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvd2lyZWxlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KKworI2luY2x1ZGUgIndsYW5fY29tcGF0LmgiCisKKy8vI2lmIChXTEFOX0hPU1RJRiA9PSBXTEFOX1BDTUNJQSkKKy8vI2luY2x1ZGUgPHBjbWNpYS92ZXJzaW9uLmg+CisvLyNpbmNsdWRlIDxwY21jaWEvY3NfdHlwZXMuaD4KKy8vI2luY2x1ZGUgPHBjbWNpYS9jcy5oPgorLy8jaW5jbHVkZSA8cGNtY2lhL2Npc3RwbC5oPgorLy8jaW5jbHVkZSA8cGNtY2lhL2RzLmg+CisvLyNpbmNsdWRlIDxwY21jaWEvY2lzcmVnLmg+CisvLyNlbmRpZgorLy8KKy8vI2lmICgoV0xBTl9IT1NUSUYgPT0gV0xBTl9QTFgpIHx8IChXTEFOX0hPU1RJRiA9PSBXTEFOX1BDSSkpCisvLyNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KKy8vI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorLy9lbmRpZgorCisvLyNpZiAoV0xBTl9IT1NUSUYgPT0gV0xBTl9VU0IpCisjaW5jbHVkZSA8bGludXgvdXNiLmg+CisvLyNlbmRpZgorCisjaW5jbHVkZSAid2xhbl9jb21wYXQuaCIKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKy8qIFByb2plY3QgSW5jbHVkZXMgKi8KKworI2luY2x1ZGUgInA4MDIxMXR5cGVzLmgiCisjaW5jbHVkZSAicDgwMjExaGRyLmgiCisjaW5jbHVkZSAicDgwMjExbWdtdC5oIgorI2luY2x1ZGUgInA4MDIxMWNvbnYuaCIKKyNpbmNsdWRlICJwODAyMTFtc2cuaCIKKyNpbmNsdWRlICJwODAyMTFuZXRkZXYuaCIKKyNpbmNsdWRlICJwODAyMTFtZXRhZGVmLmgiCisjaW5jbHVkZSAicDgwMjExbWV0YXN0cnVjdC5oIgorI2luY2x1ZGUgImhmYTM4NHguaCIKKyNpbmNsdWRlICJwcmlzbTJtZ210LmgiCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKiBMb2NhbCBDb25zdGFudHMgKi8KKworI2RlZmluZSBNSUJfVE1QX01BWExFTiAgICAyMDAgICAgLyogTWF4IGxlbmd0aCBvZiBSSUQgcmVjb3JkIChpbiBieXRlcykuICovCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKiBMb2NhbCBUeXBlcyAqLworCisjZGVmaW5lICBGX0FQICAgICAgICAgMHgxICAgICAgICAvKiBNSUIgaXMgc3VwcG9ydGVkIG9uIEFjY2VzcyBQb2ludHMuICovCisjZGVmaW5lICBGX1NUQSAgICAgICAgMHgyICAgICAgICAvKiBNSUIgaXMgc3VwcG9ydGVkIG9uIHN0YXRpb25zLiAqLworI2RlZmluZSAgRl9SRUFEICAgICAgIDB4NCAgICAgICAgLyogTUlCIG1heSBiZSByZWFkLiAqLworI2RlZmluZSAgRl9XUklURSAgICAgIDB4OCAgICAgICAgLyogTUlCIG1heSBiZSB3cml0dGVuLiAqLworCit0eXBlZGVmIHN0cnVjdCBtaWJyZWMKK3sKKyAgICBVSU5UMzIgICBkaWQ7CisgICAgVUlOVDE2ICAgZmxhZzsKKyAgICBVSU5UMTYgICBwYXJtMTsKKyAgICBVSU5UMTYgICBwYXJtMjsKKyAgICBVSU5UMTYgICBwYXJtMzsKKyAgICBpbnQgICAgICAoKmZ1bmMpKHN0cnVjdCBtaWJyZWMgICAgICAgICAgICAgICAgKm1pYiwKKyAgICAgICAgICAgICAgICAgICAgIGludCAgICAgICAgICAgICAgICAgICAgICAgICAgaXNnZXQsCisgICAgICAgICAgICAgICAgICAgICB3bGFuZGV2aWNlX3QgICAgICAgICAgICAgICAgICp3bGFuZGV2LAorICAgICAgICAgICAgICAgICAgICAgaGZhMzg0eF90ICAgICAgICAgICAgICAgICAgICAqaHcsCisgICAgICAgICAgICAgICAgICAgICBwODAyMTFtc2dfZG90MTFyZXFfbWlic2V0X3QgICptc2csCisgICAgICAgICAgICAgICAgICAgICB2b2lkICAgICAgICAgICAgICAgICAgICAgICAgICpkYXRhKTsKK30gbWlicmVjX3Q7CisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKiBMb2NhbCBGdW5jdGlvbiBEZWNsYXJhdGlvbnMgKi8KKworc3RhdGljIGludCBwcmlzbTJtaWJfYnl0ZXN0cjJwc3RyKAorbWlicmVjX3QgICAgICAgICAgICAgICAgICAgICAqbWliLAoraW50ICAgICAgICAgICAgICAgICAgICAgICAgICBpc2dldCwKK3dsYW5kZXZpY2VfdCAgICAgICAgICAgICAgICAgKndsYW5kZXYsCitoZmEzODR4X3QgICAgICAgICAgICAgICAgICAgICpodywKK3A4MDIxMW1zZ19kb3QxMXJlcV9taWJzZXRfdCAgKm1zZywKK3ZvaWQgICAgICAgICAgICAgICAgICAgICAgICAgKmRhdGEpOworCitzdGF0aWMgaW50IHByaXNtMm1pYl9ieXRlYXJlYTJwc3RyKAorbWlicmVjX3QgICAgICAgICAgICAgICAgICAgICAqbWliLAoraW50ICAgICAgICAgICAgICAgICAgICAgICAgICBpc2dldCwKK3dsYW5kZXZpY2VfdCAgICAgICAgICAgICAgICAgKndsYW5kZXYsCitoZmEzODR4X3QgICAgICAgICAgICAgICAgICAgICpodywKK3A4MDIxMW1zZ19kb3QxMXJlcV9taWJzZXRfdCAgKm1zZywKK3ZvaWQgICAgICAgICAgICAgICAgICAgICAgICAgKmRhdGEpOworCitzdGF0aWMgaW50IHByaXNtMm1pYl91aW50MzIoCittaWJyZWNfdCAgICAgICAgICAgICAgICAgICAgICptaWIsCitpbnQgICAgICAgICAgICAgICAgICAgICAgICAgIGlzZ2V0LAord2xhbmRldmljZV90ICAgICAgICAgICAgICAgICAqd2xhbmRldiwKK2hmYTM4NHhfdCAgICAgICAgICAgICAgICAgICAgKmh3LAorcDgwMjExbXNnX2RvdDExcmVxX21pYnNldF90ICAqbXNnLAordm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAqZGF0YSk7CisKK3N0YXRpYyBpbnQgcHJpc20ybWliX3VpbnQzMmFycmF5KAorbWlicmVjX3QgICAgICAgICAgICAgICAgICAgICAqbWliLAoraW50ICAgICAgICAgICAgICAgICAgICAgICAgICBpc2dldCwKK3dsYW5kZXZpY2VfdCAgICAgICAgICAgICAgICAgKndsYW5kZXYsCitoZmEzODR4X3QgICAgICAgICAgICAgICAgICAgICpodywKK3A4MDIxMW1zZ19kb3QxMXJlcV9taWJzZXRfdCAgKm1zZywKK3ZvaWQgICAgICAgICAgICAgICAgICAgICAgICAgKmRhdGEpOworCitzdGF0aWMgaW50IHByaXNtMm1pYl91aW50MzJvZmZzZXQoCittaWJyZWNfdCAgICAgICAgICAgICAgICAgICAgICptaWIsCitpbnQgICAgICAgICAgICAgICAgICAgICAgICAgIGlzZ2V0LAord2xhbmRldmljZV90ICAgICAgICAgICAgICAgICAqd2xhbmRldiwKK2hmYTM4NHhfdCAgICAgICAgICAgICAgICAgICAgKmh3LAorcDgwMjExbXNnX2RvdDExcmVxX21pYnNldF90ICAqbXNnLAordm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAqZGF0YSk7CisKK3N0YXRpYyBpbnQgcHJpc20ybWliX3RydXRoKAorbWlicmVjX3QgICAgICAgICAgICAgICAgICAgICAqbWliLAoraW50ICAgICAgICAgICAgICAgICAgICAgICAgICBpc2dldCwKK3dsYW5kZXZpY2VfdCAgICAgICAgICAgICAgICAgKndsYW5kZXYsCitoZmEzODR4X3QgICAgICAgICAgICAgICAgICAgICpodywKK3A4MDIxMW1zZ19kb3QxMXJlcV9taWJzZXRfdCAgKm1zZywKK3ZvaWQgICAgICAgICAgICAgICAgICAgICAgICAgKmRhdGEpOworCitzdGF0aWMgaW50IHByaXNtMm1pYl9wcmVhbWJsZSgKK21pYnJlY190ICAgICAgICAgICAgICAgICAgICAgKm1pYiwKK2ludCAgICAgICAgICAgICAgICAgICAgICAgICAgaXNnZXQsCit3bGFuZGV2aWNlX3QgICAgICAgICAgICAgICAgICp3bGFuZGV2LAoraGZhMzg0eF90ICAgICAgICAgICAgICAgICAgICAqaHcsCitwODAyMTFtc2dfZG90MTFyZXFfbWlic2V0X3QgICptc2csCit2b2lkICAgICAgICAgICAgICAgICAgICAgICAgICpkYXRhKTsKKworc3RhdGljIGludCBwcmlzbTJtaWJfZmxhZygKK21pYnJlY190ICAgICAgICAgICAgICAgICAgICAgKm1pYiwKK2ludCAgICAgICAgICAgICAgICAgICAgICAgICAgaXNnZXQsCit3bGFuZGV2aWNlX3QgICAgICAgICAgICAgICAgICp3bGFuZGV2LAoraGZhMzg0eF90ICAgICAgICAgICAgICAgICAgICAqaHcsCitwODAyMTFtc2dfZG90MTFyZXFfbWlic2V0X3QgICptc2csCit2b2lkICAgICAgICAgICAgICAgICAgICAgICAgICpkYXRhKTsKKworc3RhdGljIGludCBwcmlzbTJtaWJfYXBwY2ZpbmZvZmxhZygKK21pYnJlY190ICAgICAgICAgICAgICAgICAgICAgKm1pYiwKK2ludCAgICAgICAgICAgICAgICAgICAgICAgICAgaXNnZXQsCit3bGFuZGV2aWNlX3QgICAgICAgICAgICAgICAgICp3bGFuZGV2LAoraGZhMzg0eF90ICAgICAgICAgICAgICAgICAgICAqaHcsCitwODAyMTFtc2dfZG90MTFyZXFfbWlic2V0X3QgICptc2csCit2b2lkICAgICAgICAgICAgICAgICAgICAgICAgICpkYXRhKTsKKworc3RhdGljIGludCBwcmlzbTJtaWJfcmVndWxhdG9yeWRvbWFpbnMoCittaWJyZWNfdCAgICAgICAgICAgICAgICAgICAgICptaWIsCitpbnQgICAgICAgICAgICAgICAgICAgICAgICAgIGlzZ2V0LAord2xhbmRldmljZV90ICAgICAgICAgICAgICAgICAqd2xhbmRldiwKK2hmYTM4NHhfdCAgICAgICAgICAgICAgICAgICAgKmh3LAorcDgwMjExbXNnX2RvdDExcmVxX21pYnNldF90ICAqbXNnLAordm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAqZGF0YSk7CisKK3N0YXRpYyBpbnQgcHJpc20ybWliX3dlcGRlZmF1bHRrZXkoCittaWJyZWNfdCAgICAgICAgICAgICAgICAgICAgICptaWIsCitpbnQgICAgICAgICAgICAgICAgICAgICAgICAgIGlzZ2V0LAord2xhbmRldmljZV90ICAgICAgICAgICAgICAgICAqd2xhbmRldiwKK2hmYTM4NHhfdCAgICAgICAgICAgICAgICAgICAgKmh3LAorcDgwMjExbXNnX2RvdDExcmVxX21pYnNldF90ICAqbXNnLAordm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAqZGF0YSk7CisKK3N0YXRpYyBpbnQgcHJpc20ybWliX3Bvd2VybWFuYWdlbWVudCgKK21pYnJlY190ICAgICAgICAgICAgICAgICAgICAgKm1pYiwKK2ludCAgICAgICAgICAgICAgICAgICAgICAgICAgaXNnZXQsCit3bGFuZGV2aWNlX3QgICAgICAgICAgICAgICAgICp3bGFuZGV2LAoraGZhMzg0eF90ICAgICAgICAgICAgICAgICAgICAqaHcsCitwODAyMTFtc2dfZG90MTFyZXFfbWlic2V0X3QgICptc2csCit2b2lkICAgICAgICAgICAgICAgICAgICAgICAgICpkYXRhKTsKKworc3RhdGljIGludCBwcmlzbTJtaWJfcHJpdmFjeWludm9rZWQoCittaWJyZWNfdCAgICAgICAgICAgICAgICAgICAgICptaWIsCitpbnQgICAgICAgICAgICAgICAgICAgICAgICAgIGlzZ2V0LAord2xhbmRldmljZV90ICAgICAgICAgICAgICAgICAqd2xhbmRldiwKK2hmYTM4NHhfdCAgICAgICAgICAgICAgICAgICAgKmh3LAorcDgwMjExbXNnX2RvdDExcmVxX21pYnNldF90ICAqbXNnLAordm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAqZGF0YSk7CisKK3N0YXRpYyBpbnQgcHJpc20ybWliX2V4Y2x1ZGV1bmVuY3J5cHRlZCgKK21pYnJlY190ICAgICAgICAgICAgICAgICAgICAgKm1pYiwKK2ludCAgICAgICAgICAgICAgICAgICAgICAgICAgaXNnZXQsCit3bGFuZGV2aWNlX3QgICAgICAgICAgICAgICAgICp3bGFuZGV2LAoraGZhMzg0eF90ICAgICAgICAgICAgICAgICAgICAqaHcsCitwODAyMTFtc2dfZG90MTFyZXFfbWlic2V0X3QgICptc2csCit2b2lkICAgICAgICAgICAgICAgICAgICAgICAgICpkYXRhKTsKKworc3RhdGljIGludCBwcmlzbTJtaWJfZnJhZ21lbnRhdGlvbnRocmVzaG9sZCgKK21pYnJlY190ICAgICAgICAgICAgICAgICAgICAgKm1pYiwKK2ludCAgICAgICAgICAgICAgICAgICAgICAgICAgaXNnZXQsCit3bGFuZGV2aWNlX3QgICAgICAgICAgICAgICAgICp3bGFuZGV2LAoraGZhMzg0eF90ICAgICAgICAgICAgICAgICAgICAqaHcsCitwODAyMTFtc2dfZG90MTFyZXFfbWlic2V0X3QgICptc2csCit2b2lkICAgICAgICAgICAgICAgICAgICAgICAgICpkYXRhKTsKKworc3RhdGljIGludCBwcmlzbTJtaWJfb3BlcmF0aW9uYWxyYXRlc2V0KAorbWlicmVjX3QgICAgICAgICAgICAgICAgICAgICAqbWliLAoraW50ICAgICAgICAgICAgICAgICAgICAgICAgICBpc2dldCwKK3dsYW5kZXZpY2VfdCAgICAgICAgICAgICAgICAgKndsYW5kZXYsCitoZmEzODR4X3QgICAgICAgICAgICAgICAgICAgICpodywKK3A4MDIxMW1zZ19kb3QxMXJlcV9taWJzZXRfdCAgKm1zZywKK3ZvaWQgICAgICAgICAgICAgICAgICAgICAgICAgKmRhdGEpOworCitzdGF0aWMgaW50IHByaXNtMm1pYl9ncm91cGFkZHJlc3MoCittaWJyZWNfdCAgICAgICAgICAgICAgICAgICAgICptaWIsCitpbnQgICAgICAgICAgICAgICAgICAgICAgICAgIGlzZ2V0LAord2xhbmRldmljZV90ICAgICAgICAgICAgICAgICAqd2xhbmRldiwKK2hmYTM4NHhfdCAgICAgICAgICAgICAgICAgICAgKmh3LAorcDgwMjExbXNnX2RvdDExcmVxX21pYnNldF90ICAqbXNnLAordm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAqZGF0YSk7CisKK3N0YXRpYyBpbnQgcHJpc20ybWliX2Z3aWQoCittaWJyZWNfdCAgICAgICAgICAgICAgICAgICAgICptaWIsCitpbnQgICAgICAgICAgICAgICAgICAgICAgICAgIGlzZ2V0LAord2xhbmRldmljZV90ICAgICAgICAgICAgICAgICAqd2xhbmRldiwKK2hmYTM4NHhfdCAgICAgICAgICAgICAgICAgICAgKmh3LAorcDgwMjExbXNnX2RvdDExcmVxX21pYnNldF90ICAqbXNnLAordm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAqZGF0YSk7CisKK3N0YXRpYyBpbnQgcHJpc20ybWliX2F1dGhhbGcoCittaWJyZWNfdCAgICAgICAgICAgICAgICAgICAgICptaWIsCitpbnQgICAgICAgICAgICAgICAgICAgICAgICAgIGlzZ2V0LAord2xhbmRldmljZV90ICAgICAgICAgICAgICAgICAqd2xhbmRldiwKK2hmYTM4NHhfdCAgICAgICAgICAgICAgICAgICAgKmh3LAorcDgwMjExbXNnX2RvdDExcmVxX21pYnNldF90ICAqbXNnLAordm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAqZGF0YSk7CisKK3N0YXRpYyBpbnQgcHJpc20ybWliX2F1dGhhbGdlbmFibGUoCittaWJyZWNfdCAgICAgICAgICAgICAgICAgICAgICptaWIsCitpbnQgICAgICAgICAgICAgICAgICAgICAgICAgIGlzZ2V0LAord2xhbmRldmljZV90ICAgICAgICAgICAgICAgICAqd2xhbmRldiwKK2hmYTM4NHhfdCAgICAgICAgICAgICAgICAgICAgKmh3LAorcDgwMjExbXNnX2RvdDExcmVxX21pYnNldF90ICAqbXNnLAordm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAqZGF0YSk7CisKK3N0YXRpYyBpbnQgcHJpc20ybWliX3ByaXYoCittaWJyZWNfdCAgICAgICAgICAgICAgICAgICAgICptaWIsCitpbnQgICAgICAgICAgICAgICAgICAgICAgICAgIGlzZ2V0LAord2xhbmRldmljZV90ICAgICAgICAgICAgICAgICAqd2xhbmRldiwKK2hmYTM4NHhfdCAgICAgICAgICAgICAgICAgICAgKmh3LAorcDgwMjExbXNnX2RvdDExcmVxX21pYnNldF90ICAqbXNnLAordm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAqZGF0YSk7CisKK3N0YXRpYyB2b2lkIHByaXNtMm1pYl9wcml2X2F1dGhsaXN0KAoraGZhMzg0eF90ICAgICAgKmh3LAorcHJpc20yc3RhX2F1dGhsaXN0X3QgICpsaXN0KTsKKworc3RhdGljIHZvaWQgcHJpc20ybWliX3ByaXZfYWNjZXNzbW9kZSgKK2hmYTM4NHhfdCAgICAgICAgICpodywKK1VJTlQzMiAgICAgICAgICAgIG1vZGUpOworCitzdGF0aWMgdm9pZCBwcmlzbTJtaWJfcHJpdl9hY2Nlc3NhbGxvdygKK2hmYTM4NHhfdCAgICAgICAgICpodywKK3A4MDIxMW1hY2FycmF5X3QgICptYWNhcnJheSk7CisKK3N0YXRpYyB2b2lkIHByaXNtMm1pYl9wcml2X2FjY2Vzc2RlbnkoCitoZmEzODR4X3QgICAgICAgICAqaHcsCitwODAyMTFtYWNhcnJheV90ICAqbWFjYXJyYXkpOworCitzdGF0aWMgdm9pZCBwcmlzbTJtaWJfcHJpdl9kZWF1dGhlbnRpY2F0ZSgKK2hmYTM4NHhfdCAgICAgICAgICpodywKK1VJTlQ4ICAgICAgICAgICAgICphZGRyKTsKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKy8qIExvY2FsIFN0YXRpYyBEZWZpbml0aW9ucyAqLworCitzdGF0aWMgbWlicmVjX3QgbWlidGFiW10gPSB7CisKKyAgICAvKiBkb3QxMXNtdCBNSUIncyAqLworCisgICAgeyBESURtaWJfZG90MTFzbXRfZG90MTFTdGF0aW9uQ29uZmlnVGFibGVfZG90MTFTdGF0aW9uSUQsCisgICAgICAgICAgRl9BUCB8IEZfU1RBIHwgRl9SRUFEIHwgRl9XUklURSwKKyAgICAgICAgICBIRkEzODR4X1JJRF9DTkZPV05NQUNBRERSLCBIRkEzODR4X1JJRF9DTkZPV05NQUNBRERSX0xFTiwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfYnl0ZWFyZWEycHN0ciB9LAorICAgIHsgRElEbWliX2RvdDExc210X2RvdDExU3RhdGlvbkNvbmZpZ1RhYmxlX2RvdDExTWVkaXVtT2NjdXBhbmN5TGltaXQsCisgICAgICAgICAgRl9BUCB8IEZfUkVBRCB8IEZfV1JJVEUsCisgICAgICAgICAgSEZBMzg0eF9SSURfQ05GQVBQQ0ZJTkZPLCBIRkEzODR4X1JJRF9DTkZBUFBDRklORk9fTEVOLCAwLAorICAgICAgICAgIHByaXNtMm1pYl91aW50MzJvZmZzZXQgfSwKKyAgICB7IERJRG1pYl9kb3QxMXNtdF9kb3QxMVN0YXRpb25Db25maWdUYWJsZV9kb3QxMUNGUG9sbGFibGUsCisgICAgICAgICAgRl9TVEEgfCBGX1JFQUQsCisgICAgICAgICAgSEZBMzg0eF9SSURfQ0ZQT0xMQUJMRSwgMCwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfdWludDMyIH0sCisgICAgeyBESURtaWJfZG90MTFzbXRfZG90MTFTdGF0aW9uQ29uZmlnVGFibGVfZG90MTFDRlBQZXJpb2QsCisgICAgICAgICAgRl9BUCB8IEZfUkVBRCB8IEZfV1JJVEUsCisgICAgICAgICAgSEZBMzg0eF9SSURfQ05GQVBQQ0ZJTkZPLCBIRkEzODR4X1JJRF9DTkZBUFBDRklORk9fTEVOLCAxLAorICAgICAgICAgIHByaXNtMm1pYl91aW50MzJvZmZzZXQgfSwKKyAgICB7IERJRG1pYl9kb3QxMXNtdF9kb3QxMVN0YXRpb25Db25maWdUYWJsZV9kb3QxMUNGUE1heER1cmF0aW9uLAorICAgICAgICAgIEZfQVAgfCBGX1JFQUQgfCBGX1dSSVRFLAorICAgICAgICAgIEhGQTM4NHhfUklEX0NORkFQUENGSU5GTywgSEZBMzg0eF9SSURfQ05GQVBQQ0ZJTkZPX0xFTiwgMiwKKyAgICAgICAgICBwcmlzbTJtaWJfdWludDMyb2Zmc2V0IH0sCisgICAgeyBESURtaWJfZG90MTFzbXRfZG90MTFTdGF0aW9uQ29uZmlnVGFibGVfZG90MTFBdXRoZW50aWNhdGlvblJlc3BvbnNlVGltZU91dCwKKyAgICAgICAgICBGX1NUQSB8IEZfUkVBRCB8IEZfV1JJVEUsCisgICAgICAgICAgSEZBMzg0eF9SSURfQ05GQVVUSFJTUFRJTUVPVVQsIDAsIDAsCisgICAgICAgICAgcHJpc20ybWliX3VpbnQzMiB9LAorICAgIHsgRElEbWliX2RvdDExc210X2RvdDExU3RhdGlvbkNvbmZpZ1RhYmxlX2RvdDExUHJpdmFjeU9wdGlvbkltcGxlbWVudGVkLAorICAgICAgICAgIEZfQVAgfCBGX1NUQSB8IEZfUkVBRCwKKyAgICAgICAgICBIRkEzODR4X1JJRF9QUklWQUNZT1BUSU1QLCAwLCAwLAorICAgICAgICAgIHByaXNtMm1pYl91aW50MzIgfSwKKyAgICB7IERJRG1pYl9kb3QxMXNtdF9kb3QxMVN0YXRpb25Db25maWdUYWJsZV9kb3QxMVBvd2VyTWFuYWdlbWVudE1vZGUsCisgICAgICAgICAgRl9TVEEgfCBGX1JFQUQgfCBGX1dSSVRFLAorICAgICAgICAgIEhGQTM4NHhfUklEX0NORlBNRU5BQkxFRCwgMCwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfcG93ZXJtYW5hZ2VtZW50IH0sCisgICAgeyBESURtaWJfZG90MTFzbXRfZG90MTFTdGF0aW9uQ29uZmlnVGFibGVfZG90MTFEZXNpcmVkU1NJRCwKKyAgICAgICAgICBGX1NUQSB8IEZfUkVBRCB8IEZfV1JJVEUsCisgICAgICAgICAgSEZBMzg0eF9SSURfQ05GREVTSVJFRFNTSUQsIEhGQTM4NHhfUklEX0NORkRFU0lSRURTU0lEX0xFTiwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfYnl0ZXN0cjJwc3RyIH0sCisgICAgeyBESURtaWJfZG90MTFzbXRfZG90MTFTdGF0aW9uQ29uZmlnVGFibGVfZG90MTFEZXNpcmVkQlNTVHlwZSwKKyAgICAgICAgICBGX1NUQSB8IEZfUkVBRCB8IEZfV1JJVEUsCisgICAgICAgICAgMCwgMCwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfcHJpdiB9LAorICAgIHsgRElEbWliX2RvdDExc210X2RvdDExU3RhdGlvbkNvbmZpZ1RhYmxlX2RvdDExT3BlcmF0aW9uYWxSYXRlU2V0LAorICAgICAgICAgIEZfU1RBIHwgRl9SRUFEIHwgRl9XUklURSwKKyAgICAgICAgICBIRkEzODR4X1JJRF9UWFJBVEVDTlRMLCAwLCAwLAorICAgICAgICAgIHByaXNtMm1pYl9vcGVyYXRpb25hbHJhdGVzZXQgfSwKKyAgICB7IERJRG1pYl9kb3QxMXNtdF9kb3QxMVN0YXRpb25Db25maWdUYWJsZV9kb3QxMU9wZXJhdGlvbmFsUmF0ZVNldCwKKyAgICAgICAgICBGX0FQIHwgRl9SRUFEIHwgRl9XUklURSwKKyAgICAgICAgICBIRkEzODR4X1JJRF9UWFJBVEVDTlRMMCwgMCwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfb3BlcmF0aW9uYWxyYXRlc2V0IH0sCisgICAgeyBESURtaWJfZG90MTFzbXRfZG90MTFTdGF0aW9uQ29uZmlnVGFibGVfZG90MTFCZWFjb25QZXJpb2QsCisgICAgICAgICAgRl9BUCB8IEZfUkVBRCB8IEZfV1JJVEUsCisgICAgICAgICAgSEZBMzg0eF9SSURfQ05GQVBCQ05JTlQsIDAsIDAsCisgICAgICAgICAgcHJpc20ybWliX3VpbnQzMiB9LAorICAgIHsgRElEbWliX2RvdDExc210X2RvdDExU3RhdGlvbkNvbmZpZ1RhYmxlX2RvdDExRFRJTVBlcmlvZCwKKyAgICAgICAgICBGX0FQIHwgRl9TVEEgfCBGX1JFQUQgfCBGX1dSSVRFLAorICAgICAgICAgIEhGQTM4NHhfUklEX0NORk9XTkRUSU1QRVIsIDAsIDAsCisgICAgICAgICAgcHJpc20ybWliX3VpbnQzMiB9LAorICAgIHsgRElEbWliX2RvdDExc210X2RvdDExU3RhdGlvbkNvbmZpZ1RhYmxlX2RvdDExQXNzb2NpYXRpb25SZXNwb25zZVRpbWVPdXQsCisgICAgICAgICAgRl9BUCB8IEZfU1RBIHwgRl9SRUFELAorICAgICAgICAgIEhGQTM4NHhfUklEX1BST1RPQ09MUlNQVElNRSwgMCwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfdWludDMyIH0sCisgICAgeyBESURtaWJfZG90MTFzbXRfZG90MTFBdXRoZW50aWNhdGlvbkFsZ29yaXRobXNUYWJsZV9kb3QxMUF1dGhlbnRpY2F0aW9uQWxnb3JpdGhtMSwKKyAgICAgICAgICBGX0FQIHwgRl9TVEEgfCBGX1JFQUQsCisgICAgICAgICAgMSwgMCwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfYXV0aGFsZyB9LAorICAgIHsgRElEbWliX2RvdDExc210X2RvdDExQXV0aGVudGljYXRpb25BbGdvcml0aG1zVGFibGVfZG90MTFBdXRoZW50aWNhdGlvbkFsZ29yaXRobTIsCisgICAgICAgICAgRl9BUCB8IEZfU1RBIHwgRl9SRUFELAorICAgICAgICAgIDIsIDAsIDAsCisgICAgICAgICAgcHJpc20ybWliX2F1dGhhbGcgfSwKKyAgICB7IERJRG1pYl9kb3QxMXNtdF9kb3QxMUF1dGhlbnRpY2F0aW9uQWxnb3JpdGhtc1RhYmxlX2RvdDExQXV0aGVudGljYXRpb25BbGdvcml0aG0zLAorICAgICAgICAgIEZfQVAgfCBGX1NUQSB8IEZfUkVBRCwKKyAgICAgICAgICAzLCAwLCAwLAorICAgICAgICAgIHByaXNtMm1pYl9hdXRoYWxnIH0sCisgICAgeyBESURtaWJfZG90MTFzbXRfZG90MTFBdXRoZW50aWNhdGlvbkFsZ29yaXRobXNUYWJsZV9kb3QxMUF1dGhlbnRpY2F0aW9uQWxnb3JpdGhtNCwKKyAgICAgICAgICBGX0FQIHwgRl9TVEEgfCBGX1JFQUQsCisgICAgICAgICAgNCwgMCwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfYXV0aGFsZyB9LAorICAgIHsgRElEbWliX2RvdDExc210X2RvdDExQXV0aGVudGljYXRpb25BbGdvcml0aG1zVGFibGVfZG90MTFBdXRoZW50aWNhdGlvbkFsZ29yaXRobTUsCisgICAgICAgICAgRl9BUCB8IEZfU1RBIHwgRl9SRUFELAorICAgICAgICAgIDUsIDAsIDAsCisgICAgICAgICAgcHJpc20ybWliX2F1dGhhbGcgfSwKKyAgICB7IERJRG1pYl9kb3QxMXNtdF9kb3QxMUF1dGhlbnRpY2F0aW9uQWxnb3JpdGhtc1RhYmxlX2RvdDExQXV0aGVudGljYXRpb25BbGdvcml0aG02LAorICAgICAgICAgIEZfQVAgfCBGX1NUQSB8IEZfUkVBRCwKKyAgICAgICAgICA2LCAwLCAwLAorICAgICAgICAgIHByaXNtMm1pYl9hdXRoYWxnIH0sCisgICAgeyBESURtaWJfZG90MTFzbXRfZG90MTFBdXRoZW50aWNhdGlvbkFsZ29yaXRobXNUYWJsZV9kb3QxMUF1dGhlbnRpY2F0aW9uQWxnb3JpdGhtc0VuYWJsZTEsCisgICAgICAgICAgRl9BUCB8IEZfU1RBIHwgRl9SRUFEIHwgRl9XUklURSwKKyAgICAgICAgICAxLCAwLCAwLAorICAgICAgICAgIHByaXNtMm1pYl9hdXRoYWxnZW5hYmxlIH0sCisgICAgeyBESURtaWJfZG90MTFzbXRfZG90MTFBdXRoZW50aWNhdGlvbkFsZ29yaXRobXNUYWJsZV9kb3QxMUF1dGhlbnRpY2F0aW9uQWxnb3JpdGhtc0VuYWJsZTIsCisgICAgICAgICAgRl9BUCB8IEZfU1RBIHwgRl9SRUFEIHwgRl9XUklURSwKKyAgICAgICAgICAyLCAwLCAwLAorICAgICAgICAgIHByaXNtMm1pYl9hdXRoYWxnZW5hYmxlIH0sCisgICAgeyBESURtaWJfZG90MTFzbXRfZG90MTFBdXRoZW50aWNhdGlvbkFsZ29yaXRobXNUYWJsZV9kb3QxMUF1dGhlbnRpY2F0aW9uQWxnb3JpdGhtc0VuYWJsZTMsCisgICAgICAgICAgRl9BUCB8IEZfU1RBIHwgRl9SRUFEIHwgRl9XUklURSwKKyAgICAgICAgICAzLCAwLCAwLAorICAgICAgICAgIHByaXNtMm1pYl9hdXRoYWxnZW5hYmxlIH0sCisgICAgeyBESURtaWJfZG90MTFzbXRfZG90MTFBdXRoZW50aWNhdGlvbkFsZ29yaXRobXNUYWJsZV9kb3QxMUF1dGhlbnRpY2F0aW9uQWxnb3JpdGhtc0VuYWJsZTQsCisgICAgICAgICAgRl9BUCB8IEZfU1RBIHwgRl9SRUFEIHwgRl9XUklURSwKKyAgICAgICAgICA0LCAwLCAwLAorICAgICAgICAgIHByaXNtMm1pYl9hdXRoYWxnZW5hYmxlIH0sCisgICAgeyBESURtaWJfZG90MTFzbXRfZG90MTFBdXRoZW50aWNhdGlvbkFsZ29yaXRobXNUYWJsZV9kb3QxMUF1dGhlbnRpY2F0aW9uQWxnb3JpdGhtc0VuYWJsZTUsCisgICAgICAgICAgRl9BUCB8IEZfU1RBIHwgRl9SRUFEIHwgRl9XUklURSwKKyAgICAgICAgICA1LCAwLCAwLAorICAgICAgICAgIHByaXNtMm1pYl9hdXRoYWxnZW5hYmxlIH0sCisgICAgeyBESURtaWJfZG90MTFzbXRfZG90MTFBdXRoZW50aWNhdGlvbkFsZ29yaXRobXNUYWJsZV9kb3QxMUF1dGhlbnRpY2F0aW9uQWxnb3JpdGhtc0VuYWJsZTYsCisgICAgICAgICAgRl9BUCB8IEZfU1RBIHwgRl9SRUFEIHwgRl9XUklURSwKKyAgICAgICAgICA2LCAwLCAwLAorICAgICAgICAgIHByaXNtMm1pYl9hdXRoYWxnZW5hYmxlIH0sCisgICAgeyBESURtaWJfZG90MTFzbXRfZG90MTFXRVBEZWZhdWx0S2V5c1RhYmxlX2RvdDExV0VQRGVmYXVsdEtleTAsCisgICAgICAgICAgRl9BUCB8IEZfU1RBIHwgRl9XUklURSwKKyAgICAgICAgICBIRkEzODR4X1JJRF9DTkZXRVBERUZBVUxUS0VZMCwgMCwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfd2VwZGVmYXVsdGtleSB9LAorICAgIHsgRElEbWliX2RvdDExc210X2RvdDExV0VQRGVmYXVsdEtleXNUYWJsZV9kb3QxMVdFUERlZmF1bHRLZXkxLAorICAgICAgICAgIEZfQVAgfCBGX1NUQSB8IEZfV1JJVEUsCisgICAgICAgICAgSEZBMzg0eF9SSURfQ05GV0VQREVGQVVMVEtFWTEsIDAsIDAsCisgICAgICAgICAgcHJpc20ybWliX3dlcGRlZmF1bHRrZXkgfSwKKyAgICB7IERJRG1pYl9kb3QxMXNtdF9kb3QxMVdFUERlZmF1bHRLZXlzVGFibGVfZG90MTFXRVBEZWZhdWx0S2V5MiwKKyAgICAgICAgICBGX0FQIHwgRl9TVEEgfCBGX1dSSVRFLAorICAgICAgICAgIEhGQTM4NHhfUklEX0NORldFUERFRkFVTFRLRVkyLCAwLCAwLAorICAgICAgICAgIHByaXNtMm1pYl93ZXBkZWZhdWx0a2V5IH0sCisgICAgeyBESURtaWJfZG90MTFzbXRfZG90MTFXRVBEZWZhdWx0S2V5c1RhYmxlX2RvdDExV0VQRGVmYXVsdEtleTMsCisgICAgICAgICAgRl9BUCB8IEZfU1RBIHwgRl9XUklURSwKKyAgICAgICAgICBIRkEzODR4X1JJRF9DTkZXRVBERUZBVUxUS0VZMywgMCwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfd2VwZGVmYXVsdGtleSB9LAorICAgIHsgRElEbWliX2RvdDExc210X2RvdDExUHJpdmFjeVRhYmxlX2RvdDExUHJpdmFjeUludm9rZWQsCisgICAgICAgICAgRl9BUCB8IEZfU1RBIHwgRl9SRUFEIHwgRl9XUklURSwKKyAgICAgICAgICBIRkEzODR4X1JJRF9DTkZXRVBGTEFHUywgSEZBMzg0eF9XRVBGTEFHU19QUklWSU5WT0tFRCwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfcHJpdmFjeWludm9rZWQgfSwKKyAgICB7IERJRG1pYl9kb3QxMXNtdF9kb3QxMVByaXZhY3lUYWJsZV9kb3QxMVdFUERlZmF1bHRLZXlJRCwKKyAgICAgICAgICBGX0FQIHwgRl9TVEEgfCBGX1JFQUQgfCBGX1dSSVRFLAorICAgICAgICAgIEhGQTM4NHhfUklEX0NORldFUERFRkFVTFRLRVlJRCwgMCwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfdWludDMyIH0sCisgICAgeyBESURtaWJfZG90MTFzbXRfZG90MTFQcml2YWN5VGFibGVfZG90MTFFeGNsdWRlVW5lbmNyeXB0ZWQsCisgICAgICAgICAgRl9BUCB8IEZfU1RBIHwgRl9SRUFEIHwgRl9XUklURSwKKyAgICAgICAgICBIRkEzODR4X1JJRF9DTkZXRVBGTEFHUywgSEZBMzg0eF9XRVBGTEFHU19FWENMVURFLCAwLAorICAgICAgICAgIHByaXNtMm1pYl9leGNsdWRldW5lbmNyeXB0ZWQgfSwKKyAgICB7IERJRG1pYl9kb3QxMXBoeV9kb3QxMVBoeU9wZXJhdGlvblRhYmxlX2RvdDExU2hvcnRQcmVhbWJsZUVuYWJsZWQsCisgICAgICAgICAgRl9BUCB8IEZfU1RBIHwgRl9SRUFEIHwgRl9XUklURSwKKyAgICAgICAgICBIRkEzODR4X1JJRF9DTkZTSE9SVFBSRUFNQkxFLCAwLCAwLAorICAgICAgICAgIHByaXNtMm1pYl9wcmVhbWJsZSB9LAorCisgICAgLyogZG90MTFtYWMgTUlCJ3MgKi8KKworICAgIHsgRElEbWliX2RvdDExbWFjX2RvdDExT3BlcmF0aW9uVGFibGVfZG90MTFNQUNBZGRyZXNzLAorICAgICAgICAgIEZfQVAgfCBGX1NUQSB8IEZfUkVBRCB8IEZfV1JJVEUsCisgICAgICAgICAgSEZBMzg0eF9SSURfQ05GT1dOTUFDQUREUiwgSEZBMzg0eF9SSURfQ05GT1dOTUFDQUREUl9MRU4sIDAsCisgICAgICAgICAgcHJpc20ybWliX2J5dGVhcmVhMnBzdHIgfSwKKyAgICB7IERJRG1pYl9kb3QxMW1hY19kb3QxMU9wZXJhdGlvblRhYmxlX2RvdDExUlRTVGhyZXNob2xkLAorICAgICAgICAgIEZfU1RBIHwgRl9SRUFEIHwgRl9XUklURSwKKyAgICAgICAgICBIRkEzODR4X1JJRF9SVFNUSFJFU0gsIDAsIDAsCisgICAgICAgICAgcHJpc20ybWliX3VpbnQzMiB9LAorICAgIHsgRElEbWliX2RvdDExbWFjX2RvdDExT3BlcmF0aW9uVGFibGVfZG90MTFSVFNUaHJlc2hvbGQsCisgICAgICAgICAgRl9BUCB8IEZfUkVBRCB8IEZfV1JJVEUsCisgICAgICAgICAgSEZBMzg0eF9SSURfUlRTVEhSRVNIMCwgMCwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfdWludDMyIH0sCisgICAgeyBESURtaWJfZG90MTFtYWNfZG90MTFPcGVyYXRpb25UYWJsZV9kb3QxMVNob3J0UmV0cnlMaW1pdCwKKyAgICAgICAgICBGX0FQIHwgRl9TVEEgfCBGX1JFQUQsCisgICAgICAgICAgSEZBMzg0eF9SSURfU0hPUlRSRVRSWUxJTUlULCAwLCAwLAorICAgICAgICAgIHByaXNtMm1pYl91aW50MzIgfSwKKyAgICB7IERJRG1pYl9kb3QxMW1hY19kb3QxMU9wZXJhdGlvblRhYmxlX2RvdDExTG9uZ1JldHJ5TGltaXQsCisgICAgICAgICAgRl9BUCB8IEZfU1RBIHwgRl9SRUFELAorICAgICAgICAgIEhGQTM4NHhfUklEX0xPTkdSRVRSWUxJTUlULCAwLCAwLAorICAgICAgICAgIHByaXNtMm1pYl91aW50MzIgfSwKKyAgICB7IERJRG1pYl9kb3QxMW1hY19kb3QxMU9wZXJhdGlvblRhYmxlX2RvdDExRnJhZ21lbnRhdGlvblRocmVzaG9sZCwKKyAgICAgICAgICBGX1NUQSB8IEZfUkVBRCB8IEZfV1JJVEUsCisgICAgICAgICAgSEZBMzg0eF9SSURfRlJBR1RIUkVTSCwgMCwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfZnJhZ21lbnRhdGlvbnRocmVzaG9sZCB9LAorICAgIHsgRElEbWliX2RvdDExbWFjX2RvdDExT3BlcmF0aW9uVGFibGVfZG90MTFGcmFnbWVudGF0aW9uVGhyZXNob2xkLAorICAgICAgICAgIEZfQVAgfCBGX1JFQUQgfCBGX1dSSVRFLAorICAgICAgICAgIEhGQTM4NHhfUklEX0ZSQUdUSFJFU0gwLCAwLCAwLAorICAgICAgICAgIHByaXNtMm1pYl9mcmFnbWVudGF0aW9udGhyZXNob2xkIH0sCisgICAgeyBESURtaWJfZG90MTFtYWNfZG90MTFPcGVyYXRpb25UYWJsZV9kb3QxMU1heFRyYW5zbWl0TVNEVUxpZmV0aW1lLAorICAgICAgICAgIEZfQVAgfCBGX1NUQSB8IEZfUkVBRCwKKyAgICAgICAgICBIRkEzODR4X1JJRF9NQVhUWExJRkVUSU1FLCAwLCAwLAorICAgICAgICAgIHByaXNtMm1pYl91aW50MzIgfSwKKyAgICB7IERJRG1pYl9kb3QxMW1hY19kb3QxMU9wZXJhdGlvblRhYmxlX2RvdDExTWF4UmVjZWl2ZUxpZmV0aW1lLAorICAgICAgICAgIEZfQVAgfCBGX1NUQSB8IEZfUkVBRCwKKyAgICAgICAgICBIRkEzODR4X1JJRF9NQVhSWExJRkVUSU1FLCAwLCAwLAorICAgICAgICAgIHByaXNtMm1pYl91aW50MzIgfSwKKyAgICB7IERJRG1pYl9kb3QxMW1hY19kb3QxMUdyb3VwQWRkcmVzc2VzVGFibGVfZG90MTFBZGRyZXNzMSwKKyAgICAgICAgICBGX1NUQSB8IEZfUkVBRCB8IEZfV1JJVEUsCisgICAgICAgICAgMCwgMCwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfZ3JvdXBhZGRyZXNzIH0sCisgICAgeyBESURtaWJfZG90MTFtYWNfZG90MTFHcm91cEFkZHJlc3Nlc1RhYmxlX2RvdDExQWRkcmVzczIsCisgICAgICAgICAgRl9TVEEgfCBGX1JFQUQgfCBGX1dSSVRFLAorICAgICAgICAgIDAsIDAsIDAsCisgICAgICAgICAgcHJpc20ybWliX2dyb3VwYWRkcmVzcyB9LAorICAgIHsgRElEbWliX2RvdDExbWFjX2RvdDExR3JvdXBBZGRyZXNzZXNUYWJsZV9kb3QxMUFkZHJlc3MzLAorICAgICAgICAgIEZfU1RBIHwgRl9SRUFEIHwgRl9XUklURSwKKyAgICAgICAgICAwLCAwLCAwLAorICAgICAgICAgIHByaXNtMm1pYl9ncm91cGFkZHJlc3MgfSwKKyAgICB7IERJRG1pYl9kb3QxMW1hY19kb3QxMUdyb3VwQWRkcmVzc2VzVGFibGVfZG90MTFBZGRyZXNzNCwKKyAgICAgICAgICBGX1NUQSB8IEZfUkVBRCB8IEZfV1JJVEUsCisgICAgICAgICAgMCwgMCwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfZ3JvdXBhZGRyZXNzIH0sCisgICAgeyBESURtaWJfZG90MTFtYWNfZG90MTFHcm91cEFkZHJlc3Nlc1RhYmxlX2RvdDExQWRkcmVzczUsCisgICAgICAgICAgRl9TVEEgfCBGX1JFQUQgfCBGX1dSSVRFLAorICAgICAgICAgIDAsIDAsIDAsCisgICAgICAgICAgcHJpc20ybWliX2dyb3VwYWRkcmVzcyB9LAorICAgIHsgRElEbWliX2RvdDExbWFjX2RvdDExR3JvdXBBZGRyZXNzZXNUYWJsZV9kb3QxMUFkZHJlc3M2LAorICAgICAgICAgIEZfU1RBIHwgRl9SRUFEIHwgRl9XUklURSwKKyAgICAgICAgICAwLCAwLCAwLAorICAgICAgICAgIHByaXNtMm1pYl9ncm91cGFkZHJlc3MgfSwKKyAgICB7IERJRG1pYl9kb3QxMW1hY19kb3QxMUdyb3VwQWRkcmVzc2VzVGFibGVfZG90MTFBZGRyZXNzNywKKyAgICAgICAgICBGX1NUQSB8IEZfUkVBRCB8IEZfV1JJVEUsCisgICAgICAgICAgMCwgMCwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfZ3JvdXBhZGRyZXNzIH0sCisgICAgeyBESURtaWJfZG90MTFtYWNfZG90MTFHcm91cEFkZHJlc3Nlc1RhYmxlX2RvdDExQWRkcmVzczgsCisgICAgICAgICAgRl9TVEEgfCBGX1JFQUQgfCBGX1dSSVRFLAorICAgICAgICAgIDAsIDAsIDAsCisgICAgICAgICAgcHJpc20ybWliX2dyb3VwYWRkcmVzcyB9LAorICAgIHsgRElEbWliX2RvdDExbWFjX2RvdDExR3JvdXBBZGRyZXNzZXNUYWJsZV9kb3QxMUFkZHJlc3M5LAorICAgICAgICAgIEZfU1RBIHwgRl9SRUFEIHwgRl9XUklURSwKKyAgICAgICAgICAwLCAwLCAwLAorICAgICAgICAgIHByaXNtMm1pYl9ncm91cGFkZHJlc3MgfSwKKyAgICB7IERJRG1pYl9kb3QxMW1hY19kb3QxMUdyb3VwQWRkcmVzc2VzVGFibGVfZG90MTFBZGRyZXNzMTAsCisgICAgICAgICAgRl9TVEEgfCBGX1JFQUQgfCBGX1dSSVRFLAorICAgICAgICAgIDAsIDAsIDAsCisgICAgICAgICAgcHJpc20ybWliX2dyb3VwYWRkcmVzcyB9LAorICAgIHsgRElEbWliX2RvdDExbWFjX2RvdDExR3JvdXBBZGRyZXNzZXNUYWJsZV9kb3QxMUFkZHJlc3MxMSwKKyAgICAgICAgICBGX1NUQSB8IEZfUkVBRCB8IEZfV1JJVEUsCisgICAgICAgICAgMCwgMCwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfZ3JvdXBhZGRyZXNzIH0sCisgICAgeyBESURtaWJfZG90MTFtYWNfZG90MTFHcm91cEFkZHJlc3Nlc1RhYmxlX2RvdDExQWRkcmVzczEyLAorICAgICAgICAgIEZfU1RBIHwgRl9SRUFEIHwgRl9XUklURSwKKyAgICAgICAgICAwLCAwLCAwLAorICAgICAgICAgIHByaXNtMm1pYl9ncm91cGFkZHJlc3MgfSwKKyAgICB7IERJRG1pYl9kb3QxMW1hY19kb3QxMUdyb3VwQWRkcmVzc2VzVGFibGVfZG90MTFBZGRyZXNzMTMsCisgICAgICAgICAgRl9TVEEgfCBGX1JFQUQgfCBGX1dSSVRFLAorICAgICAgICAgIDAsIDAsIDAsCisgICAgICAgICAgcHJpc20ybWliX2dyb3VwYWRkcmVzcyB9LAorICAgIHsgRElEbWliX2RvdDExbWFjX2RvdDExR3JvdXBBZGRyZXNzZXNUYWJsZV9kb3QxMUFkZHJlc3MxNCwKKyAgICAgICAgICBGX1NUQSB8IEZfUkVBRCB8IEZfV1JJVEUsCisgICAgICAgICAgMCwgMCwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfZ3JvdXBhZGRyZXNzIH0sCisgICAgeyBESURtaWJfZG90MTFtYWNfZG90MTFHcm91cEFkZHJlc3Nlc1RhYmxlX2RvdDExQWRkcmVzczE1LAorICAgICAgICAgIEZfU1RBIHwgRl9SRUFEIHwgRl9XUklURSwKKyAgICAgICAgICAwLCAwLCAwLAorICAgICAgICAgIHByaXNtMm1pYl9ncm91cGFkZHJlc3MgfSwKKyAgICB7IERJRG1pYl9kb3QxMW1hY19kb3QxMUdyb3VwQWRkcmVzc2VzVGFibGVfZG90MTFBZGRyZXNzMTYsCisgICAgICAgICAgRl9TVEEgfCBGX1JFQUQgfCBGX1dSSVRFLAorICAgICAgICAgIDAsIDAsIDAsCisgICAgICAgICAgcHJpc20ybWliX2dyb3VwYWRkcmVzcyB9LAorICAgIHsgRElEbWliX2RvdDExbWFjX2RvdDExR3JvdXBBZGRyZXNzZXNUYWJsZV9kb3QxMUFkZHJlc3MxNywKKyAgICAgICAgICBGX1NUQSB8IEZfUkVBRCB8IEZfV1JJVEUsCisgICAgICAgICAgMCwgMCwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfZ3JvdXBhZGRyZXNzIH0sCisgICAgeyBESURtaWJfZG90MTFtYWNfZG90MTFHcm91cEFkZHJlc3Nlc1RhYmxlX2RvdDExQWRkcmVzczE4LAorICAgICAgICAgIEZfU1RBIHwgRl9SRUFEIHwgRl9XUklURSwKKyAgICAgICAgICAwLCAwLCAwLAorICAgICAgICAgIHByaXNtMm1pYl9ncm91cGFkZHJlc3MgfSwKKyAgICB7IERJRG1pYl9kb3QxMW1hY19kb3QxMUdyb3VwQWRkcmVzc2VzVGFibGVfZG90MTFBZGRyZXNzMTksCisgICAgICAgICAgRl9TVEEgfCBGX1JFQUQgfCBGX1dSSVRFLAorICAgICAgICAgIDAsIDAsIDAsCisgICAgICAgICAgcHJpc20ybWliX2dyb3VwYWRkcmVzcyB9LAorICAgIHsgRElEbWliX2RvdDExbWFjX2RvdDExR3JvdXBBZGRyZXNzZXNUYWJsZV9kb3QxMUFkZHJlc3MyMCwKKyAgICAgICAgICBGX1NUQSB8IEZfUkVBRCB8IEZfV1JJVEUsCisgICAgICAgICAgMCwgMCwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfZ3JvdXBhZGRyZXNzIH0sCisgICAgeyBESURtaWJfZG90MTFtYWNfZG90MTFHcm91cEFkZHJlc3Nlc1RhYmxlX2RvdDExQWRkcmVzczIxLAorICAgICAgICAgIEZfU1RBIHwgRl9SRUFEIHwgRl9XUklURSwKKyAgICAgICAgICAwLCAwLCAwLAorICAgICAgICAgIHByaXNtMm1pYl9ncm91cGFkZHJlc3MgfSwKKyAgICB7IERJRG1pYl9kb3QxMW1hY19kb3QxMUdyb3VwQWRkcmVzc2VzVGFibGVfZG90MTFBZGRyZXNzMjIsCisgICAgICAgICAgRl9TVEEgfCBGX1JFQUQgfCBGX1dSSVRFLAorICAgICAgICAgIDAsIDAsIDAsCisgICAgICAgICAgcHJpc20ybWliX2dyb3VwYWRkcmVzcyB9LAorICAgIHsgRElEbWliX2RvdDExbWFjX2RvdDExR3JvdXBBZGRyZXNzZXNUYWJsZV9kb3QxMUFkZHJlc3MyMywKKyAgICAgICAgICBGX1NUQSB8IEZfUkVBRCB8IEZfV1JJVEUsCisgICAgICAgICAgMCwgMCwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfZ3JvdXBhZGRyZXNzIH0sCisgICAgeyBESURtaWJfZG90MTFtYWNfZG90MTFHcm91cEFkZHJlc3Nlc1RhYmxlX2RvdDExQWRkcmVzczI0LAorICAgICAgICAgIEZfU1RBIHwgRl9SRUFEIHwgRl9XUklURSwKKyAgICAgICAgICAwLCAwLCAwLAorICAgICAgICAgIHByaXNtMm1pYl9ncm91cGFkZHJlc3MgfSwKKyAgICB7IERJRG1pYl9kb3QxMW1hY19kb3QxMUdyb3VwQWRkcmVzc2VzVGFibGVfZG90MTFBZGRyZXNzMjUsCisgICAgICAgICAgRl9TVEEgfCBGX1JFQUQgfCBGX1dSSVRFLAorICAgICAgICAgIDAsIDAsIDAsCisgICAgICAgICAgcHJpc20ybWliX2dyb3VwYWRkcmVzcyB9LAorICAgIHsgRElEbWliX2RvdDExbWFjX2RvdDExR3JvdXBBZGRyZXNzZXNUYWJsZV9kb3QxMUFkZHJlc3MyNiwKKyAgICAgICAgICBGX1NUQSB8IEZfUkVBRCB8IEZfV1JJVEUsCisgICAgICAgICAgMCwgMCwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfZ3JvdXBhZGRyZXNzIH0sCisgICAgeyBESURtaWJfZG90MTFtYWNfZG90MTFHcm91cEFkZHJlc3Nlc1RhYmxlX2RvdDExQWRkcmVzczI3LAorICAgICAgICAgIEZfU1RBIHwgRl9SRUFEIHwgRl9XUklURSwKKyAgICAgICAgICAwLCAwLCAwLAorICAgICAgICAgIHByaXNtMm1pYl9ncm91cGFkZHJlc3MgfSwKKyAgICB7IERJRG1pYl9kb3QxMW1hY19kb3QxMUdyb3VwQWRkcmVzc2VzVGFibGVfZG90MTFBZGRyZXNzMjgsCisgICAgICAgICAgRl9TVEEgfCBGX1JFQUQgfCBGX1dSSVRFLAorICAgICAgICAgIDAsIDAsIDAsCisgICAgICAgICAgcHJpc20ybWliX2dyb3VwYWRkcmVzcyB9LAorICAgIHsgRElEbWliX2RvdDExbWFjX2RvdDExR3JvdXBBZGRyZXNzZXNUYWJsZV9kb3QxMUFkZHJlc3MyOSwKKyAgICAgICAgICBGX1NUQSB8IEZfUkVBRCB8IEZfV1JJVEUsCisgICAgICAgICAgMCwgMCwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfZ3JvdXBhZGRyZXNzIH0sCisgICAgeyBESURtaWJfZG90MTFtYWNfZG90MTFHcm91cEFkZHJlc3Nlc1RhYmxlX2RvdDExQWRkcmVzczMwLAorICAgICAgICAgIEZfU1RBIHwgRl9SRUFEIHwgRl9XUklURSwKKyAgICAgICAgICAwLCAwLCAwLAorICAgICAgICAgIHByaXNtMm1pYl9ncm91cGFkZHJlc3MgfSwKKyAgICB7IERJRG1pYl9kb3QxMW1hY19kb3QxMUdyb3VwQWRkcmVzc2VzVGFibGVfZG90MTFBZGRyZXNzMzEsCisgICAgICAgICAgRl9TVEEgfCBGX1JFQUQgfCBGX1dSSVRFLAorICAgICAgICAgIDAsIDAsIDAsCisgICAgICAgICAgcHJpc20ybWliX2dyb3VwYWRkcmVzcyB9LAorICAgIHsgRElEbWliX2RvdDExbWFjX2RvdDExR3JvdXBBZGRyZXNzZXNUYWJsZV9kb3QxMUFkZHJlc3MzMiwKKyAgICAgICAgICBGX1NUQSB8IEZfUkVBRCB8IEZfV1JJVEUsCisgICAgICAgICAgMCwgMCwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfZ3JvdXBhZGRyZXNzIH0sCisKKyAgICAvKiBkb3QxMXBoeSBNSUIncyAqLworCisgICAgeyBESURtaWJfZG90MTFwaHlfZG90MTFQaHlPcGVyYXRpb25UYWJsZV9kb3QxMVBIWVR5cGUsCisgICAgICAgICAgRl9BUCB8IEZfU1RBIHwgRl9SRUFELAorICAgICAgICAgIEhGQTM4NHhfUklEX1BIWVRZUEUsIDAsIDAsCisgICAgICAgICAgcHJpc20ybWliX3VpbnQzMiB9LAorICAgIHsgRElEbWliX2RvdDExcGh5X2RvdDExUGh5T3BlcmF0aW9uVGFibGVfZG90MTFUZW1wVHlwZSwKKyAgICAgICAgICBGX0FQIHwgRl9TVEEgfCBGX1JFQUQsCisgICAgICAgICAgSEZBMzg0eF9SSURfVEVNUFRZUEUsIDAsIDAsCisgICAgICAgICAgcHJpc20ybWliX3VpbnQzMiB9LAorICAgIHsgRElEbWliX2RvdDExcGh5X2RvdDExUGh5RFNTU1RhYmxlX2RvdDExQ3VycmVudENoYW5uZWwsCisgICAgICAgICAgRl9TVEEgfCBGX1JFQUQsCisgICAgICAgICAgSEZBMzg0eF9SSURfQ1VSUkVOVENIQU5ORUwsIDAsIDAsCisgICAgICAgICAgcHJpc20ybWliX3VpbnQzMiB9LAorICAgIHsgRElEbWliX2RvdDExcGh5X2RvdDExUGh5RFNTU1RhYmxlX2RvdDExQ3VycmVudENoYW5uZWwsCisgICAgICAgICAgRl9BUCB8IEZfUkVBRCwKKyAgICAgICAgICBIRkEzODR4X1JJRF9DTkZPV05DSEFOTkVMLCAwLCAwLAorICAgICAgICAgIHByaXNtMm1pYl91aW50MzIgfSwKKyAgICB7IERJRG1pYl9kb3QxMXBoeV9kb3QxMVBoeURTU1NUYWJsZV9kb3QxMUN1cnJlbnRDQ0FNb2RlLAorICAgICAgICAgIEZfQVAgfCBGX1NUQSB8IEZfUkVBRCwKKyAgICAgICAgICBIRkEzODR4X1JJRF9DQ0FNT0RFLCAwLCAwLAorICAgICAgICAgIHByaXNtMm1pYl91aW50MzIgfSwKKworICAgIC8qIHAyVGFibGUgTUlCJ3MgKi8KKworICAgIHsgRElEbWliX3AyX3AyVGFibGVfcDJNTVR4LAorICAgICAgICAgIEZfQVAgfCBGX1NUQSB8IEZfUkVBRCB8IEZfV1JJVEUsCisgICAgICAgICAgMCwgMCwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfcHJpdiB9LAorICAgIHsgRElEbWliX3AyX3AyVGFibGVfcDJFYXJseUJlYWNvbiwKKyAgICAgICAgICBGX0FQIHwgRl9SRUFEIHwgRl9XUklURSwKKyAgICAgICAgICBCSVQ3LCAwLCAwLAorICAgICAgICAgIHByaXNtMm1pYl9hcHBjZmluZm9mbGFnIH0sCisgICAgeyBESURtaWJfcDJfcDJUYWJsZV9wMlJlY2VpdmVkRnJhbWVTdGF0aXN0aWNzLAorICAgICAgICAgIEZfQVAgfCBGX1NUQSB8IEZfUkVBRCwKKyAgICAgICAgICAwLCAwLCAwLAorICAgICAgICAgIHByaXNtMm1pYl9wcml2IH0sCisgICAgeyBESURtaWJfcDJfcDJUYWJsZV9wMkNvbW11bmljYXRpb25UYWxsaWVzLAorICAgICAgICAgIEZfQVAgfCBGX1NUQSB8IEZfUkVBRCwKKyAgICAgICAgICAwLCAwLCAwLAorICAgICAgICAgIHByaXNtMm1pYl9wcml2IH0sCisgICAgeyBESURtaWJfcDJfcDJUYWJsZV9wMkF1dGhlbnRpY2F0ZWQsCisgICAgICAgICAgRl9BUCB8IEZfUkVBRCwKKyAgICAgICAgICAwLCAwLCAwLAorICAgICAgICAgIHByaXNtMm1pYl9wcml2IH0sCisgICAgeyBESURtaWJfcDJfcDJUYWJsZV9wMkFzc29jaWF0ZWQsCisgICAgICAgICAgRl9BUCB8IEZfUkVBRCwKKyAgICAgICAgICAwLCAwLCAwLAorICAgICAgICAgIHByaXNtMm1pYl9wcml2IH0sCisgICAgeyBESURtaWJfcDJfcDJUYWJsZV9wMlBvd2VyU2F2ZVVzZXJDb3VudCwKKyAgICAgICAgICBGX0FQIHwgRl9SRUFELAorICAgICAgICAgIDAsIDAsIDAsCisgICAgICAgICAgcHJpc20ybWliX3ByaXYgfSwKKyAgICB7IERJRG1pYl9wMl9wMlRhYmxlX3AyQ29tbWVudCwKKyAgICAgICAgICBGX0FQIHwgRl9TVEEgfCBGX1JFQUQgfCBGX1dSSVRFLAorICAgICAgICAgIDAsIDAsIDAsCisgICAgICAgICAgcHJpc20ybWliX3ByaXYgfSwKKyAgICB7IERJRG1pYl9wMl9wMlRhYmxlX3AyQWNjZXNzTW9kZSwKKyAgICAgICAgICBGX0FQIHwgRl9SRUFEIHwgRl9XUklURSwKKyAgICAgICAgICAwLCAwLCAwLAorICAgICAgICAgIHByaXNtMm1pYl9wcml2IH0sCisgICAgeyBESURtaWJfcDJfcDJUYWJsZV9wMkFjY2Vzc0FsbG93LAorICAgICAgICAgIEZfQVAgfCBGX1JFQUQgfCBGX1dSSVRFLAorICAgICAgICAgIDAsIDAsIDAsCisgICAgICAgICAgcHJpc20ybWliX3ByaXYgfSwKKyAgICB7IERJRG1pYl9wMl9wMlRhYmxlX3AyQWNjZXNzRGVueSwKKyAgICAgICAgICBGX0FQIHwgRl9SRUFEIHwgRl9XUklURSwKKyAgICAgICAgICAwLCAwLCAwLAorICAgICAgICAgIHByaXNtMm1pYl9wcml2IH0sCisgICAgeyBESURtaWJfcDJfcDJUYWJsZV9wMkNoYW5uZWxJbmZvUmVzdWx0cywKKyAgICAgICAgICBGX0FQIHwgRl9SRUFELAorICAgICAgICAgIDAsIDAsIDAsCisgICAgICAgICAgcHJpc20ybWliX3ByaXYgfSwKKworICAgIC8qIHAyU3RhdGljIE1JQidzICovCisKKyAgICB7IERJRG1pYl9wMl9wMlN0YXRpY19wMkNuZlBvcnRUeXBlLAorICAgICAgICAgIEZfU1RBIHwgRl9SRUFEIHwgRl9XUklURSwKKyAgICAgICAgICBIRkEzODR4X1JJRF9DTkZQT1JUVFlQRSwgMCwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfdWludDMyIH0sCisgICAgeyBESURtaWJfcDJfcDJTdGF0aWNfcDJDbmZPd25NQUNBZGRyZXNzLAorICAgICAgICAgIEZfQVAgfCBGX1NUQSB8IEZfUkVBRCB8IEZfV1JJVEUsCisgICAgICAgICAgSEZBMzg0eF9SSURfQ05GT1dOTUFDQUREUiwgSEZBMzg0eF9SSURfQ05GT1dOTUFDQUREUl9MRU4sIDAsCisgICAgICAgICAgcHJpc20ybWliX2J5dGVhcmVhMnBzdHIgfSwKKyAgICB7IERJRG1pYl9wMl9wMlN0YXRpY19wMkNuZkRlc2lyZWRTU0lELAorICAgICAgICAgIEZfU1RBIHwgRl9SRUFEIHwgRl9XUklURSwKKyAgICAgICAgICBIRkEzODR4X1JJRF9DTkZERVNJUkVEU1NJRCwgSEZBMzg0eF9SSURfQ05GREVTSVJFRFNTSURfTEVOLCAwLAorICAgICAgICAgIHByaXNtMm1pYl9ieXRlc3RyMnBzdHIgfSwKKyAgICB7IERJRG1pYl9wMl9wMlN0YXRpY19wMkNuZk93bkNoYW5uZWwsCisgICAgICAgICAgRl9BUCB8IEZfU1RBIHwgRl9SRUFEIHwgRl9XUklURSwKKyAgICAgICAgICBIRkEzODR4X1JJRF9DTkZPV05DSEFOTkVMLCAwLCAwLAorICAgICAgICAgIHByaXNtMm1pYl91aW50MzIgfSwKKyAgICB7IERJRG1pYl9wMl9wMlN0YXRpY19wMkNuZk93blNTSUQsCisgICAgICAgICAgRl9BUCB8IEZfU1RBIHwgRl9SRUFEIHwgRl9XUklURSwKKyAgICAgICAgICBIRkEzODR4X1JJRF9DTkZPV05TU0lELCBIRkEzODR4X1JJRF9DTkZPV05TU0lEX0xFTiwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfYnl0ZXN0cjJwc3RyIH0sCisgICAgeyBESURtaWJfcDJfcDJTdGF0aWNfcDJDbmZPd25BVElNV2luZG93LAorICAgICAgICAgIEZfU1RBIHwgRl9SRUFEIHwgRl9XUklURSwKKyAgICAgICAgICBIRkEzODR4X1JJRF9DTkZPV05BVElNV0lOLCAwLCAwLAorICAgICAgICAgIHByaXNtMm1pYl91aW50MzIgfSwKKyAgICB7IERJRG1pYl9wMl9wMlN0YXRpY19wMkNuZlN5c3RlbVNjYWxlLAorICAgICAgICAgIEZfQVAgfCBGX1NUQSB8IEZfUkVBRCB8IEZfV1JJVEUsCisgICAgICAgICAgSEZBMzg0eF9SSURfQ05GU1lTU0NBTEUsIDAsIDAsCisgICAgICAgICAgcHJpc20ybWliX3VpbnQzMiB9LAorICAgIHsgRElEbWliX3AyX3AyU3RhdGljX3AyQ25mTWF4RGF0YUxlbmd0aCwKKyAgICAgICAgICBGX0FQIHwgRl9TVEEgfCBGX1JFQUQgfCBGX1dSSVRFLAorICAgICAgICAgIEhGQTM4NHhfUklEX0NORk1BWERBVEFMRU4sIDAsIDAsCisgICAgICAgICAgcHJpc20ybWliX3VpbnQzMiB9LAorICAgIHsgRElEbWliX3AyX3AyU3RhdGljX3AyQ25mV0RTQWRkcmVzcywKKyAgICAgICAgICBGX1NUQSB8IEZfUkVBRCB8IEZfV1JJVEUsCisgICAgICAgICAgSEZBMzg0eF9SSURfQ05GV0RTQUREUiwgSEZBMzg0eF9SSURfQ05GV0RTQUREUl9MRU4sIDAsCisgICAgICAgICAgcHJpc20ybWliX2J5dGVhcmVhMnBzdHIgfSwKKyAgICB7IERJRG1pYl9wMl9wMlN0YXRpY19wMkNuZlBNRW5hYmxlZCwKKyAgICAgICAgICBGX1NUQSB8IEZfUkVBRCB8IEZfV1JJVEUsCisgICAgICAgICAgSEZBMzg0eF9SSURfQ05GUE1FTkFCTEVELCAwLCAwLAorICAgICAgICAgIHByaXNtMm1pYl90cnV0aCB9LAorICAgIHsgRElEbWliX3AyX3AyU3RhdGljX3AyQ25mUE1FUFMsCisgICAgICAgICAgRl9TVEEgfCBGX1JFQUQgfCBGX1dSSVRFLAorICAgICAgICAgIEhGQTM4NHhfUklEX0NORlBNRVBTLCAwLCAwLAorICAgICAgICAgIHByaXNtMm1pYl90cnV0aCB9LAorICAgIHsgRElEbWliX3AyX3AyU3RhdGljX3AyQ25mTXVsdGljYXN0UmVjZWl2ZSwKKyAgICAgICAgICBGX1NUQSB8IEZfUkVBRCB8IEZfV1JJVEUsCisgICAgICAgICAgSEZBMzg0eF9SSURfQ05GTVVMVElDQVNUUlgsIDAsIDAsCisgICAgICAgICAgcHJpc20ybWliX3RydXRoIH0sCisgICAgeyBESURtaWJfcDJfcDJTdGF0aWNfcDJDbmZNYXhTbGVlcER1cmF0aW9uLAorICAgICAgICAgIEZfU1RBIHwgRl9SRUFEIHwgRl9XUklURSwKKyAgICAgICAgICBIRkEzODR4X1JJRF9DTkZNQVhTTEVFUERVUiwgMCwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfdWludDMyIH0sCisgICAgeyBESURtaWJfcDJfcDJTdGF0aWNfcDJDbmZQTUhvbGRvdmVyRHVyYXRpb24sCisgICAgICAgICAgRl9TVEEgfCBGX1JFQUQgfCBGX1dSSVRFLAorICAgICAgICAgIEhGQTM4NHhfUklEX0NORlBNSE9MRERVUiwgMCwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfdWludDMyIH0sCisgICAgeyBESURtaWJfcDJfcDJTdGF0aWNfcDJDbmZPd25OYW1lLAorICAgICAgICAgIEZfQVAgfCBGX1NUQSB8IEZfUkVBRCB8IEZfV1JJVEUsCisgICAgICAgICAgSEZBMzg0eF9SSURfQ05GT1dOTkFNRSwgSEZBMzg0eF9SSURfQ05GT1dOTkFNRV9MRU4sIDAsCisgICAgICAgICAgcHJpc20ybWliX2J5dGVzdHIycHN0ciB9LAorICAgIHsgRElEbWliX3AyX3AyU3RhdGljX3AyQ25mT3duRFRJTVBlcmlvZCwKKyAgICAgICAgICBGX0FQIHwgRl9TVEEgfCBGX1JFQUQgfCBGX1dSSVRFLAorICAgICAgICAgIEhGQTM4NHhfUklEX0NORk9XTkRUSU1QRVIsIDAsIDAsCisgICAgICAgICAgcHJpc20ybWliX3VpbnQzMiB9LAorICAgIHsgRElEbWliX3AyX3AyU3RhdGljX3AyQ25mV0RTQWRkcmVzczEsCisgICAgICAgICAgRl9BUCB8IEZfUkVBRCB8IEZfV1JJVEUsCisgICAgICAgICAgSEZBMzg0eF9SSURfQ05GV0RTQUREUjEsIEhGQTM4NHhfUklEX0NORldEU0FERFIxX0xFTiwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfYnl0ZWFyZWEycHN0ciB9LAorICAgIHsgRElEbWliX3AyX3AyU3RhdGljX3AyQ25mV0RTQWRkcmVzczIsCisgICAgICAgICAgRl9BUCB8IEZfUkVBRCB8IEZfV1JJVEUsCisgICAgICAgICAgSEZBMzg0eF9SSURfQ05GV0RTQUREUjIsIEhGQTM4NHhfUklEX0NORldEU0FERFIyX0xFTiwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfYnl0ZWFyZWEycHN0ciB9LAorICAgIHsgRElEbWliX3AyX3AyU3RhdGljX3AyQ25mV0RTQWRkcmVzczMsCisgICAgICAgICAgRl9BUCB8IEZfUkVBRCB8IEZfV1JJVEUsCisgICAgICAgICAgSEZBMzg0eF9SSURfQ05GV0RTQUREUjMsIEhGQTM4NHhfUklEX0NORldEU0FERFIzX0xFTiwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfYnl0ZWFyZWEycHN0ciB9LAorICAgIHsgRElEbWliX3AyX3AyU3RhdGljX3AyQ25mV0RTQWRkcmVzczQsCisgICAgICAgICAgRl9BUCB8IEZfUkVBRCB8IEZfV1JJVEUsCisgICAgICAgICAgSEZBMzg0eF9SSURfQ05GV0RTQUREUjQsIEhGQTM4NHhfUklEX0NORldEU0FERFI0X0xFTiwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfYnl0ZWFyZWEycHN0ciB9LAorICAgIHsgRElEbWliX3AyX3AyU3RhdGljX3AyQ25mV0RTQWRkcmVzczUsCisgICAgICAgICAgRl9BUCB8IEZfUkVBRCB8IEZfV1JJVEUsCisgICAgICAgICAgSEZBMzg0eF9SSURfQ05GV0RTQUREUjUsIEhGQTM4NHhfUklEX0NORldEU0FERFI1X0xFTiwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfYnl0ZWFyZWEycHN0ciB9LAorICAgIHsgRElEbWliX3AyX3AyU3RhdGljX3AyQ25mV0RTQWRkcmVzczYsCisgICAgICAgICAgRl9BUCB8IEZfUkVBRCB8IEZfV1JJVEUsCisgICAgICAgICAgSEZBMzg0eF9SSURfQ05GV0RTQUREUjYsIEhGQTM4NHhfUklEX0NORldEU0FERFI2X0xFTiwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfYnl0ZWFyZWEycHN0ciB9LAorICAgIHsgRElEbWliX3AyX3AyU3RhdGljX3AyQ25mTXVsdGljYXN0UE1CdWZmZXJpbmcsCisgICAgICAgICAgRl9BUCB8IEZfUkVBRCB8IEZfV1JJVEUsCisgICAgICAgICAgSEZBMzg0eF9SSURfQ05GTUNBU1RQTUJVRkYsIDAsIDAsCisgICAgICAgICAgcHJpc20ybWliX3RydXRoIH0sCisgICAgeyBESURtaWJfcDJfcDJTdGF0aWNfcDJDbmZXRVBEZWZhdWx0S2V5SUQsCisgICAgICAgICAgRl9BUCB8IEZfU1RBIHwgRl9SRUFEIHwgRl9XUklURSwKKyAgICAgICAgICBIRkEzODR4X1JJRF9DTkZXRVBERUZBVUxUS0VZSUQsIDAsIDAsCisgICAgICAgICAgcHJpc20ybWliX3VpbnQzMiB9LAorICAgIHsgRElEbWliX3AyX3AyU3RhdGljX3AyQ25mV0VQRGVmYXVsdEtleTAsCisgICAgICAgICAgRl9BUCB8IEZfU1RBIHwgRl9XUklURSwKKyAgICAgICAgICBIRkEzODR4X1JJRF9DTkZXRVBERUZBVUxUS0VZMCwgMCwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfd2VwZGVmYXVsdGtleSB9LAorICAgIHsgRElEbWliX3AyX3AyU3RhdGljX3AyQ25mV0VQRGVmYXVsdEtleTEsCisgICAgICAgICAgRl9BUCB8IEZfU1RBIHwgRl9XUklURSwKKyAgICAgICAgICBIRkEzODR4X1JJRF9DTkZXRVBERUZBVUxUS0VZMSwgMCwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfd2VwZGVmYXVsdGtleSB9LAorICAgIHsgRElEbWliX3AyX3AyU3RhdGljX3AyQ25mV0VQRGVmYXVsdEtleTIsCisgICAgICAgICAgRl9BUCB8IEZfU1RBIHwgRl9XUklURSwKKyAgICAgICAgICBIRkEzODR4X1JJRF9DTkZXRVBERUZBVUxUS0VZMiwgMCwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfd2VwZGVmYXVsdGtleSB9LAorICAgIHsgRElEbWliX3AyX3AyU3RhdGljX3AyQ25mV0VQRGVmYXVsdEtleTMsCisgICAgICAgICAgRl9BUCB8IEZfU1RBIHwgRl9XUklURSwKKyAgICAgICAgICBIRkEzODR4X1JJRF9DTkZXRVBERUZBVUxUS0VZMywgMCwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfd2VwZGVmYXVsdGtleSB9LAorICAgIHsgRElEbWliX3AyX3AyU3RhdGljX3AyQ25mV0VQRmxhZ3MsCisgICAgICAgICAgRl9BUCB8IEZfU1RBIHwgRl9SRUFEIHwgRl9XUklURSwKKyAgICAgICAgICBIRkEzODR4X1JJRF9DTkZXRVBGTEFHUywgMCwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfdWludDMyIH0sCisgICAgeyBESURtaWJfcDJfcDJTdGF0aWNfcDJDbmZBdXRoZW50aWNhdGlvbiwKKyAgICAgICAgICBGX0FQIHwgRl9TVEEgfCBGX1JFQUQgfCBGX1dSSVRFLAorICAgICAgICAgIEhGQTM4NHhfUklEX0NORkFVVEhFTlRJQ0FUSU9OLCAwLCAwLAorICAgICAgICAgIHByaXNtMm1pYl91aW50MzIgfSwKKyAgICB7IERJRG1pYl9wMl9wMlN0YXRpY19wMkNuZk1heEFzc29jaWF0ZWRTdGF0aW9ucywKKyAgICAgICAgICBGX0FQIHwgRl9SRUFEIHwgRl9XUklURSwKKyAgICAgICAgICBIRkEzODR4X1JJRF9DTkZNQVhBU1NPQ1NUQVRJT05TLCAwLCAwLAorICAgICAgICAgIHByaXNtMm1pYl91aW50MzIgfSwKKyAgICB7IERJRG1pYl9wMl9wMlN0YXRpY19wMkNuZlR4Q29udHJvbCwKKyAgICAgICAgICBGX0FQIHwgRl9TVEEgfCBGX1JFQUQgfCBGX1dSSVRFLAorICAgICAgICAgIEhGQTM4NHhfUklEX0NORlRYQ09OVFJPTCwgMCwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfdWludDMyIH0sCisgICAgeyBESURtaWJfcDJfcDJTdGF0aWNfcDJDbmZSb2FtaW5nTW9kZSwKKyAgICAgICAgICBGX1NUQSB8IEZfUkVBRCB8IEZfV1JJVEUsCisgICAgICAgICAgSEZBMzg0eF9SSURfQ05GUk9BTUlOR01PREUsIDAsIDAsCisgICAgICAgICAgcHJpc20ybWliX3VpbnQzMiB9LAorICAgIHsgRElEbWliX3AyX3AyU3RhdGljX3AyQ25mSG9zdEF1dGhlbnRpY2F0aW9uLAorICAgICAgICAgIEZfQVAgfCBGX1JFQUQgfCBGX1dSSVRFLAorICAgICAgICAgIEhGQTM4NHhfUklEX0NORkhPU1RBVVRIQVNTT0MsIDAsIDAsCisgICAgICAgICAgcHJpc20ybWliX3RydXRoIH0sCisgICAgeyBESURtaWJfcDJfcDJTdGF0aWNfcDJDbmZSY3ZDcmNFcnJvciwKKyAgICAgICAgICBGX0FQIHwgRl9TVEEgfCBGX1JFQUQgfCBGX1dSSVRFLAorICAgICAgICAgIEhGQTM4NHhfUklEX0NORlJDVkNSQ0VSUk9SLCAwLCAwLAorICAgICAgICAgIHByaXNtMm1pYl91aW50MzIgfSwKKyAgICB7IERJRG1pYl9wMl9wMlN0YXRpY19wMkNuZkFsdFJldHJ5Q291bnQsCisgICAgICAgICAgRl9BUCB8IEZfU1RBIHwgRl9SRUFEIHwgRl9XUklURSwKKyAgICAgICAgICBIRkEzODR4X1JJRF9DTkZBTFRSRVRSWUNOVCwgMCwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfdWludDMyIH0sCisgICAgeyBESURtaWJfcDJfcDJTdGF0aWNfcDJDbmZCZWFjb25JbnRlcnZhbCwKKyAgICAgICAgICBGX0FQIHwgRl9SRUFEIHwgRl9XUklURSwKKyAgICAgICAgICBIRkEzODR4X1JJRF9DTkZBUEJDTklOVCwgMCwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfdWludDMyIH0sCisgICAgeyBESURtaWJfcDJfcDJTdGF0aWNfcDJDbmZNZWRpdW1PY2N1cGFuY3lMaW1pdCwKKyAgICAgICAgICBGX0FQIHwgRl9SRUFEIHwgRl9XUklURSwKKyAgICAgICAgICBIRkEzODR4X1JJRF9DTkZBUFBDRklORk8sIEhGQTM4NHhfUklEX0NORkFQUENGSU5GT19MRU4sIDAsCisgICAgICAgICAgcHJpc20ybWliX3VpbnQzMm9mZnNldCB9LAorICAgIHsgRElEbWliX3AyX3AyU3RhdGljX3AyQ25mQ0ZQUGVyaW9kLAorICAgICAgICAgIEZfQVAgfCBGX1JFQUQgfCBGX1dSSVRFLAorICAgICAgICAgIEhGQTM4NHhfUklEX0NORkFQUENGSU5GTywgSEZBMzg0eF9SSURfQ05GQVBQQ0ZJTkZPX0xFTiwgMSwKKyAgICAgICAgICBwcmlzbTJtaWJfdWludDMyb2Zmc2V0IH0sCisgICAgeyBESURtaWJfcDJfcDJTdGF0aWNfcDJDbmZDRlBNYXhEdXJhdGlvbiwKKyAgICAgICAgICBGX0FQIHwgRl9SRUFEIHwgRl9XUklURSwKKyAgICAgICAgICBIRkEzODR4X1JJRF9DTkZBUFBDRklORk8sIEhGQTM4NHhfUklEX0NORkFQUENGSU5GT19MRU4sIDIsCisgICAgICAgICAgcHJpc20ybWliX3VpbnQzMm9mZnNldCB9LAorICAgIHsgRElEbWliX3AyX3AyU3RhdGljX3AyQ25mQ0ZQRmxhZ3MsCisgICAgICAgICAgRl9BUCB8IEZfUkVBRCB8IEZfV1JJVEUsCisgICAgICAgICAgSEZBMzg0eF9SSURfQ05GQVBQQ0ZJTkZPLCBIRkEzODR4X1JJRF9DTkZBUFBDRklORk9fTEVOLCAzLAorICAgICAgICAgIHByaXNtMm1pYl91aW50MzJvZmZzZXQgfSwKKyAgICB7IERJRG1pYl9wMl9wMlN0YXRpY19wMkNuZlNUQVBDRkluZm8sCisgICAgICAgICAgRl9TVEEgfCBGX1JFQUQgfCBGX1dSSVRFLAorICAgICAgICAgIEhGQTM4NHhfUklEX0NORlNUQVBDRklORk8sIDAsIDAsCisgICAgICAgICAgcHJpc20ybWliX3VpbnQzMiB9LAorICAgIHsgRElEbWliX3AyX3AyU3RhdGljX3AyQ25mUHJpb3JpdHlRVXNhZ2UsCisgICAgICAgICAgRl9BUCB8IEZfU1RBIHwgRl9SRUFEIHwgRl9XUklURSwKKyAgICAgICAgICBIRkEzODR4X1JJRF9DTkZQUklPUklUWVFVU0FHRSwgSEZBMzg0eF9SSURfQ05GUFJJT1FVU0FHRV9MRU4sIDAsCisgICAgICAgICAgcHJpc20ybWliX3VpbnQzMmFycmF5IH0sCisgICAgeyBESURtaWJfcDJfcDJTdGF0aWNfcDJDbmZUSU1DdHJsLAorICAgICAgICAgIEZfQVAgfCBGX1NUQSB8IEZfUkVBRCB8IEZfV1JJVEUsCisgICAgICAgICAgSEZBMzg0eF9SSURfQ05GVElNQ1RSTCwgMCwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfdWludDMyIH0sCisgICAgeyBESURtaWJfcDJfcDJTdGF0aWNfcDJDbmZUaGlydHkyVGFsbHksCisgICAgICAgICAgRl9BUCB8IEZfU1RBIHwgRl9SRUFEIHwgRl9XUklURSwKKyAgICAgICAgICBIRkEzODR4X1JJRF9DTkZUSElSVFkyVEFMTFksIDAsIDAsCisgICAgICAgICAgcHJpc20ybWliX3RydXRoIH0sCisgICAgeyBESURtaWJfcDJfcDJTdGF0aWNfcDJDbmZFbmhTZWN1cml0eSwKKyAgICAgICAgICBGX0FQIHwgRl9SRUFEIHwgRl9XUklURSwKKyAgICAgICAgICBIRkEzODR4X1JJRF9DTkZFTkhTRUNVUklUWSwgMCwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfdWludDMyIH0sCisgICAgeyBESURtaWJfcDJfcDJTdGF0aWNfcDJDbmZTaG9ydFByZWFtYmxlLAorICAgICAgICAgIEZfQVAgfCBGX1NUQSB8IEZfUkVBRCB8IEZfV1JJVEUsCisgICAgICAgICAgSEZBMzg0eF9SSURfQ05GU0hPUlRQUkVBTUJMRSwgMCwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfcHJlYW1ibGUgfSwKKyAgICB7IERJRG1pYl9wMl9wMlN0YXRpY19wMkNuZkV4Y2x1ZGVMb25nUHJlYW1ibGUsCisgICAgICAgICAgRl9BUCB8IEZfUkVBRCB8IEZfV1JJVEUsCisgICAgICAgICAgSEZBMzg0eF9SSURfQ05GRVhDTE9OR1BSRUFNQkxFLCAwLCAwLAorICAgICAgICAgIHByaXNtMm1pYl90cnV0aCB9LAorICAgIHsgRElEbWliX3AyX3AyU3RhdGljX3AyQ25mQXV0aGVudGljYXRpb25Sc3BUTywKKyAgICAgICAgICBGX1NUQSB8IEZfUkVBRCB8IEZfV1JJVEUsCisgICAgICAgICAgSEZBMzg0eF9SSURfQ05GQVVUSFJTUFRJTUVPVVQsIDAsIDAsCisgICAgICAgICAgcHJpc20ybWliX3VpbnQzMiB9LAorICAgIHsgRElEbWliX3AyX3AyU3RhdGljX3AyQ25mQmFzaWNSYXRlcywKKyAgICAgICAgICBGX0FQIHwgRl9TVEEgfCBGX1JFQUQgfCBGX1dSSVRFLAorICAgICAgICAgIEhGQTM4NHhfUklEX0NORkJBU0lDUkFURVMsIDAsIDAsCisgICAgICAgICAgcHJpc20ybWliX3VpbnQzMiB9LAorICAgIHsgRElEbWliX3AyX3AyU3RhdGljX3AyQ25mU3VwcG9ydGVkUmF0ZXMsCisgICAgICAgICAgRl9BUCB8IEZfU1RBIHwgRl9SRUFEIHwgRl9XUklURSwKKyAgICAgICAgICBIRkEzODR4X1JJRF9DTkZTVVBQUkFURVMsIDAsIDAsCisgICAgICAgICAgcHJpc20ybWliX3VpbnQzMiB9LAorCisgICAgLyogcDJEeW5hbWljIE1JQidzICovCisKKyAgICB7IERJRG1pYl9wMl9wMkR5bmFtaWNfcDJDcmVhdGVJQlNTLAorICAgICAgICAgIEZfU1RBIHwgRl9SRUFEIHwgRl9XUklURSwKKyAgICAgICAgICBIRkEzODR4X1JJRF9DUkVBVEVJQlNTLCAwLCAwLAorICAgICAgICAgIHByaXNtMm1pYl90cnV0aCB9LAorICAgIHsgRElEbWliX3AyX3AyRHluYW1pY19wMkZyYWdtZW50YXRpb25UaHJlc2hvbGQsCisgICAgICAgICAgRl9TVEEgfCBGX1JFQUQgfCBGX1dSSVRFLAorICAgICAgICAgIEhGQTM4NHhfUklEX0ZSQUdUSFJFU0gsIDAsIDAsCisgICAgICAgICAgcHJpc20ybWliX2ZyYWdtZW50YXRpb250aHJlc2hvbGQgfSwKKyAgICB7IERJRG1pYl9wMl9wMkR5bmFtaWNfcDJSVFNUaHJlc2hvbGQsCisgICAgICAgICAgRl9TVEEgfCBGX1JFQUQgfCBGX1dSSVRFLAorICAgICAgICAgIEhGQTM4NHhfUklEX1JUU1RIUkVTSCwgMCwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfdWludDMyIH0sCisgICAgeyBESURtaWJfcDJfcDJEeW5hbWljX3AyVHhSYXRlQ29udHJvbCwKKyAgICAgICAgICBGX1NUQSB8IEZfUkVBRCB8IEZfV1JJVEUsCisgICAgICAgICAgSEZBMzg0eF9SSURfVFhSQVRFQ05UTCwgMCwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfdWludDMyIH0sCisgICAgeyBESURtaWJfcDJfcDJEeW5hbWljX3AyUHJvbWlzY3VvdXNNb2RlLAorICAgICAgICAgIEZfU1RBIHwgRl9SRUFEIHwgRl9XUklURSwKKyAgICAgICAgICBIRkEzODR4X1JJRF9QUk9NSVNDTU9ERSwgMCwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfdHJ1dGggfSwKKyAgICB7IERJRG1pYl9wMl9wMkR5bmFtaWNfcDJGcmFnbWVudGF0aW9uVGhyZXNob2xkMCwKKyAgICAgICAgICBGX0FQIHwgRl9SRUFEIHwgRl9XUklURSwKKyAgICAgICAgICBIRkEzODR4X1JJRF9GUkFHVEhSRVNIMCwgMCwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfZnJhZ21lbnRhdGlvbnRocmVzaG9sZCB9LAorICAgIHsgRElEbWliX3AyX3AyRHluYW1pY19wMkZyYWdtZW50YXRpb25UaHJlc2hvbGQxLAorICAgICAgICAgIEZfQVAgfCBGX1JFQUQgfCBGX1dSSVRFLAorICAgICAgICAgIEhGQTM4NHhfUklEX0ZSQUdUSFJFU0gxLCAwLCAwLAorICAgICAgICAgIHByaXNtMm1pYl9mcmFnbWVudGF0aW9udGhyZXNob2xkIH0sCisgICAgeyBESURtaWJfcDJfcDJEeW5hbWljX3AyRnJhZ21lbnRhdGlvblRocmVzaG9sZDIsCisgICAgICAgICAgRl9BUCB8IEZfUkVBRCB8IEZfV1JJVEUsCisgICAgICAgICAgSEZBMzg0eF9SSURfRlJBR1RIUkVTSDIsIDAsIDAsCisgICAgICAgICAgcHJpc20ybWliX2ZyYWdtZW50YXRpb250aHJlc2hvbGQgfSwKKyAgICB7IERJRG1pYl9wMl9wMkR5bmFtaWNfcDJGcmFnbWVudGF0aW9uVGhyZXNob2xkMywKKyAgICAgICAgICBGX0FQIHwgRl9SRUFEIHwgRl9XUklURSwKKyAgICAgICAgICBIRkEzODR4X1JJRF9GUkFHVEhSRVNIMywgMCwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfZnJhZ21lbnRhdGlvbnRocmVzaG9sZCB9LAorICAgIHsgRElEbWliX3AyX3AyRHluYW1pY19wMkZyYWdtZW50YXRpb25UaHJlc2hvbGQ0LAorICAgICAgICAgIEZfQVAgfCBGX1JFQUQgfCBGX1dSSVRFLAorICAgICAgICAgIEhGQTM4NHhfUklEX0ZSQUdUSFJFU0g0LCAwLCAwLAorICAgICAgICAgIHByaXNtMm1pYl9mcmFnbWVudGF0aW9udGhyZXNob2xkIH0sCisgICAgeyBESURtaWJfcDJfcDJEeW5hbWljX3AyRnJhZ21lbnRhdGlvblRocmVzaG9sZDUsCisgICAgICAgICAgRl9BUCB8IEZfUkVBRCB8IEZfV1JJVEUsCisgICAgICAgICAgSEZBMzg0eF9SSURfRlJBR1RIUkVTSDUsIDAsIDAsCisgICAgICAgICAgcHJpc20ybWliX2ZyYWdtZW50YXRpb250aHJlc2hvbGQgfSwKKyAgICB7IERJRG1pYl9wMl9wMkR5bmFtaWNfcDJGcmFnbWVudGF0aW9uVGhyZXNob2xkNiwKKyAgICAgICAgICBGX0FQIHwgRl9SRUFEIHwgRl9XUklURSwKKyAgICAgICAgICBIRkEzODR4X1JJRF9GUkFHVEhSRVNINiwgMCwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfZnJhZ21lbnRhdGlvbnRocmVzaG9sZCB9LAorICAgIHsgRElEbWliX3AyX3AyRHluYW1pY19wMlJUU1RocmVzaG9sZDAsCisgICAgICAgICAgRl9BUCB8IEZfUkVBRCB8IEZfV1JJVEUsCisgICAgICAgICAgSEZBMzg0eF9SSURfUlRTVEhSRVNIMCwgMCwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfdWludDMyIH0sCisgICAgeyBESURtaWJfcDJfcDJEeW5hbWljX3AyUlRTVGhyZXNob2xkMSwKKyAgICAgICAgICBGX0FQIHwgRl9SRUFEIHwgRl9XUklURSwKKyAgICAgICAgICBIRkEzODR4X1JJRF9SVFNUSFJFU0gxLCAwLCAwLAorICAgICAgICAgIHByaXNtMm1pYl91aW50MzIgfSwKKyAgICB7IERJRG1pYl9wMl9wMkR5bmFtaWNfcDJSVFNUaHJlc2hvbGQyLAorICAgICAgICAgIEZfQVAgfCBGX1JFQUQgfCBGX1dSSVRFLAorICAgICAgICAgIEhGQTM4NHhfUklEX1JUU1RIUkVTSDIsIDAsIDAsCisgICAgICAgICAgcHJpc20ybWliX3VpbnQzMiB9LAorICAgIHsgRElEbWliX3AyX3AyRHluYW1pY19wMlJUU1RocmVzaG9sZDMsCisgICAgICAgICAgRl9BUCB8IEZfUkVBRCB8IEZfV1JJVEUsCisgICAgICAgICAgSEZBMzg0eF9SSURfUlRTVEhSRVNIMywgMCwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfdWludDMyIH0sCisgICAgeyBESURtaWJfcDJfcDJEeW5hbWljX3AyUlRTVGhyZXNob2xkNCwKKyAgICAgICAgICBGX0FQIHwgRl9SRUFEIHwgRl9XUklURSwKKyAgICAgICAgICBIRkEzODR4X1JJRF9SVFNUSFJFU0g0LCAwLCAwLAorICAgICAgICAgIHByaXNtMm1pYl91aW50MzIgfSwKKyAgICB7IERJRG1pYl9wMl9wMkR5bmFtaWNfcDJSVFNUaHJlc2hvbGQ1LAorICAgICAgICAgIEZfQVAgfCBGX1JFQUQgfCBGX1dSSVRFLAorICAgICAgICAgIEhGQTM4NHhfUklEX1JUU1RIUkVTSDUsIDAsIDAsCisgICAgICAgICAgcHJpc20ybWliX3VpbnQzMiB9LAorICAgIHsgRElEbWliX3AyX3AyRHluYW1pY19wMlJUU1RocmVzaG9sZDYsCisgICAgICAgICAgRl9BUCB8IEZfUkVBRCB8IEZfV1JJVEUsCisgICAgICAgICAgSEZBMzg0eF9SSURfUlRTVEhSRVNINiwgMCwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfdWludDMyIH0sCisgICAgeyBESURtaWJfcDJfcDJEeW5hbWljX3AyVHhSYXRlQ29udHJvbDAsCisgICAgICAgICAgRl9BUCB8IEZfUkVBRCB8IEZfV1JJVEUsCisgICAgICAgICAgSEZBMzg0eF9SSURfVFhSQVRFQ05UTDAsIDAsIDAsCisgICAgICAgICAgcHJpc20ybWliX3VpbnQzMiB9LAorICAgIHsgRElEbWliX3AyX3AyRHluYW1pY19wMlR4UmF0ZUNvbnRyb2wxLAorICAgICAgICAgIEZfQVAgfCBGX1JFQUQgfCBGX1dSSVRFLAorICAgICAgICAgIEhGQTM4NHhfUklEX1RYUkFURUNOVEwxLCAwLCAwLAorICAgICAgICAgIHByaXNtMm1pYl91aW50MzIgfSwKKyAgICB7IERJRG1pYl9wMl9wMkR5bmFtaWNfcDJUeFJhdGVDb250cm9sMiwKKyAgICAgICAgICBGX0FQIHwgRl9SRUFEIHwgRl9XUklURSwKKyAgICAgICAgICBIRkEzODR4X1JJRF9UWFJBVEVDTlRMMiwgMCwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfdWludDMyIH0sCisgICAgeyBESURtaWJfcDJfcDJEeW5hbWljX3AyVHhSYXRlQ29udHJvbDMsCisgICAgICAgICAgRl9BUCB8IEZfUkVBRCB8IEZfV1JJVEUsCisgICAgICAgICAgSEZBMzg0eF9SSURfVFhSQVRFQ05UTDMsIDAsIDAsCisgICAgICAgICAgcHJpc20ybWliX3VpbnQzMiB9LAorICAgIHsgRElEbWliX3AyX3AyRHluYW1pY19wMlR4UmF0ZUNvbnRyb2w0LAorICAgICAgICAgIEZfQVAgfCBGX1JFQUQgfCBGX1dSSVRFLAorICAgICAgICAgIEhGQTM4NHhfUklEX1RYUkFURUNOVEw0LCAwLCAwLAorICAgICAgICAgIHByaXNtMm1pYl91aW50MzIgfSwKKyAgICB7IERJRG1pYl9wMl9wMkR5bmFtaWNfcDJUeFJhdGVDb250cm9sNSwKKyAgICAgICAgICBGX0FQIHwgRl9SRUFEIHwgRl9XUklURSwKKyAgICAgICAgICBIRkEzODR4X1JJRF9UWFJBVEVDTlRMNSwgMCwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfdWludDMyIH0sCisgICAgeyBESURtaWJfcDJfcDJEeW5hbWljX3AyVHhSYXRlQ29udHJvbDYsCisgICAgICAgICAgRl9BUCB8IEZfUkVBRCB8IEZfV1JJVEUsCisgICAgICAgICAgSEZBMzg0eF9SSURfVFhSQVRFQ05UTDYsIDAsIDAsCisgICAgICAgICAgcHJpc20ybWliX3VpbnQzMiB9LAorCisgICAgLyogcDJCZWhhdmlvciBNSUIncyAqLworCisgICAgeyBESURtaWJfcDJfcDJCZWhhdmlvcl9wMlRpY2tUaW1lLAorICAgICAgICAgIEZfQVAgfCBGX1NUQSB8IEZfUkVBRCB8IEZfV1JJVEUsCisgICAgICAgICAgSEZBMzg0eF9SSURfSVRJQ0tUSU1FLCAwLCAwLAorICAgICAgICAgIHByaXNtMm1pYl91aW50MzIgfSwKKworICAgIC8qIHAyTklDIE1JQidzICovCisKKyAgICB7IERJRG1pYl9wMl9wMk5JQ19wMk1heExvYWRUaW1lLAorICAgICAgICAgIEZfQVAgfCBGX1NUQSB8IEZfUkVBRCwKKyAgICAgICAgICBIRkEzODR4X1JJRF9NQVhMT0FEVElNRSwgMCwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfdWludDMyIH0sCisgICAgeyBESURtaWJfcDJfcDJOSUNfcDJETEJ1ZmZlclBhZ2UsCisgICAgICAgICAgRl9BUCB8IEZfU1RBIHwgRl9SRUFELAorICAgICAgICAgIEhGQTM4NHhfUklEX0RPV05MT0FEQlVGRkVSLCBIRkEzODR4X1JJRF9ET1dOTE9BREJVRkZFUl9MRU4sIDAsCisgICAgICAgICAgcHJpc20ybWliX3VpbnQzMm9mZnNldCB9LAorICAgIHsgRElEbWliX3AyX3AyTklDX3AyRExCdWZmZXJPZmZzZXQsCisgICAgICAgICAgRl9BUCB8IEZfU1RBIHwgRl9SRUFELAorICAgICAgICAgIEhGQTM4NHhfUklEX0RPV05MT0FEQlVGRkVSLCBIRkEzODR4X1JJRF9ET1dOTE9BREJVRkZFUl9MRU4sIDEsCisgICAgICAgICAgcHJpc20ybWliX3VpbnQzMm9mZnNldCB9LAorICAgIHsgRElEbWliX3AyX3AyTklDX3AyRExCdWZmZXJMZW5ndGgsCisgICAgICAgICAgRl9BUCB8IEZfU1RBIHwgRl9SRUFELAorICAgICAgICAgIEhGQTM4NHhfUklEX0RPV05MT0FEQlVGRkVSLCBIRkEzODR4X1JJRF9ET1dOTE9BREJVRkZFUl9MRU4sIDIsCisgICAgICAgICAgcHJpc20ybWliX3VpbnQzMm9mZnNldCB9LAorICAgIHsgRElEbWliX3AyX3AyTklDX3AyUFJJSWRlbnRpdHksCisgICAgICAgICAgRl9BUCB8IEZfU1RBIHwgRl9SRUFELAorICAgICAgICAgIEhGQTM4NHhfUklEX1BSSUlERU5USVRZLCBIRkEzODR4X1JJRF9QUklJREVOVElUWV9MRU4sIDAsCisgICAgICAgICAgcHJpc20ybWliX3VpbnQzMmFycmF5IH0sCisgICAgeyBESURtaWJfcDJfcDJOSUNfcDJQUklTdXBSYW5nZSwKKyAgICAgICAgICBGX0FQIHwgRl9TVEEgfCBGX1JFQUQsCisgICAgICAgICAgSEZBMzg0eF9SSURfUFJJU1VQUkFOR0UsIEhGQTM4NHhfUklEX1BSSVNVUFJBTkdFX0xFTiwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfdWludDMyYXJyYXkgfSwKKyAgICB7IERJRG1pYl9wMl9wMk5JQ19wMkNGSUFjdFJhbmdlcywKKyAgICAgICAgICBGX0FQIHwgRl9TVEEgfCBGX1JFQUQsCisgICAgICAgICAgSEZBMzg0eF9SSURfUFJJX0NGSUFDVFJBTkdFUywgSEZBMzg0eF9SSURfQ0ZJQUNUUkFOR0VTX0xFTiwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfdWludDMyYXJyYXkgfSwKKyAgICB7IERJRG1pYl9wMl9wMk5JQ19wMkJ1aWxkU2VxdWVuY2UsCisgICAgICAgICAgRl9BUCB8IEZfU1RBIHwgRl9SRUFELAorICAgICAgICAgIEhGQTM4NHhfUklEX0JVSUxEU0VRLCBIRkEzODR4X1JJRF9CVUlMRFNFUV9MRU4sIDAsCisgICAgICAgICAgcHJpc20ybWliX3VpbnQzMmFycmF5IH0sCisgICAgeyBESURtaWJfcDJfcDJOSUNfcDJQcmltYXJ5RldJRCwKKyAgICAgICAgICBGX0FQIHwgRl9TVEEgfCBGX1JFQUQsCisgICAgICAgICAgMCwgMCwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfZndpZCB9LAorICAgIHsgRElEbWliX3AyX3AyTklDX3AyU2Vjb25kYXJ5RldJRCwKKyAgICAgICAgICBGX0FQIHwgRl9TVEEgfCBGX1JFQUQsCisgICAgICAgICAgMCwgMCwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfZndpZCB9LAorICAgIHsgRElEbWliX3AyX3AyTklDX3AyVGVydGlhcnlGV0lELAorICAgICAgICAgIEZfQVAgfCBGX1JFQUQsCisgICAgICAgICAgMCwgMCwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfZndpZCB9LAorICAgIHsgRElEbWliX3AyX3AyTklDX3AyTklDU2VyaWFsTnVtYmVyLAorICAgICAgICAgIEZfQVAgfCBGX1NUQSB8IEZfUkVBRCwKKyAgICAgICAgICBIRkEzODR4X1JJRF9OSUNTRVJJQUxOVU1CRVIsIEhGQTM4NHhfUklEX05JQ1NFUklBTE5VTUJFUl9MRU4sIDAsCisgICAgICAgICAgcHJpc20ybWliX2J5dGVhcmVhMnBzdHIgfSwKKyAgICB7IERJRG1pYl9wMl9wMk5JQ19wMk5JQ0lkZW50aXR5LAorICAgICAgICAgIEZfQVAgfCBGX1NUQSB8IEZfUkVBRCwKKyAgICAgICAgICBIRkEzODR4X1JJRF9OSUNJREVOVElUWSwgSEZBMzg0eF9SSURfTklDSURFTlRJVFlfTEVOLCAwLAorICAgICAgICAgIHByaXNtMm1pYl91aW50MzJhcnJheSB9LAorICAgIHsgRElEbWliX3AyX3AyTklDX3AyTUZJU3VwUmFuZ2UsCisgICAgICAgICAgRl9BUCB8IEZfU1RBIHwgRl9SRUFELAorICAgICAgICAgIEhGQTM4NHhfUklEX01GSVNVUFJBTkdFLCBIRkEzODR4X1JJRF9NRklTVVBSQU5HRV9MRU4sIDAsCisgICAgICAgICAgcHJpc20ybWliX3VpbnQzMmFycmF5IH0sCisgICAgeyBESURtaWJfcDJfcDJOSUNfcDJDRklTdXBSYW5nZSwKKyAgICAgICAgICBGX0FQIHwgRl9TVEEgfCBGX1JFQUQsCisgICAgICAgICAgSEZBMzg0eF9SSURfQ0ZJU1VQUkFOR0UsIEhGQTM4NHhfUklEX0NGSVNVUFJBTkdFX0xFTiwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfdWludDMyYXJyYXkgfSwKKyAgICB7IERJRG1pYl9wMl9wMk5JQ19wMkNoYW5uZWxMaXN0LAorICAgICAgICAgIEZfQVAgfCBGX1NUQSB8IEZfUkVBRCwKKyAgICAgICAgICBIRkEzODR4X1JJRF9DSEFOTkVMTElTVCwgMCwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfdWludDMyIH0sCisgICAgeyBESURtaWJfcDJfcDJOSUNfcDJSZWd1bGF0b3J5RG9tYWlucywKKyAgICAgICAgICBGX0FQIHwgRl9TVEEgfCBGX1JFQUQsCisgICAgICAgICAgSEZBMzg0eF9SSURfUkVHVUxBVE9SWURPTUFJTlMsIEhGQTM4NHhfUklEX1JFR1VMQVRPUllET01BSU5TX0xFTiwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfcmVndWxhdG9yeWRvbWFpbnMgfSwKKyAgICB7IERJRG1pYl9wMl9wMk5JQ19wMlRlbXBUeXBlLAorICAgICAgICAgIEZfQVAgfCBGX1NUQSB8IEZfUkVBRCwKKyAgICAgICAgICBIRkEzODR4X1JJRF9URU1QVFlQRSwgMCwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfdWludDMyIH0sCisgICAgeyBESURtaWJfcDJfcDJOSUNfcDJTVEFJZGVudGl0eSwKKyAgICAgICAgICBGX0FQIHwgRl9TVEEgfCBGX1JFQUQsCisgICAgICAgICAgSEZBMzg0eF9SSURfU1RBSURFTlRJVFksIEhGQTM4NHhfUklEX1NUQUlERU5USVRZX0xFTiwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfdWludDMyYXJyYXkgfSwKKyAgICB7IERJRG1pYl9wMl9wMk5JQ19wMlNUQVN1cFJhbmdlLAorICAgICAgICAgIEZfQVAgfCBGX1NUQSB8IEZfUkVBRCwKKyAgICAgICAgICBIRkEzODR4X1JJRF9TVEFTVVBSQU5HRSwgSEZBMzg0eF9SSURfU1RBU1VQUkFOR0VfTEVOLCAwLAorICAgICAgICAgIHByaXNtMm1pYl91aW50MzJhcnJheSB9LAorICAgIHsgRElEbWliX3AyX3AyTklDX3AyTUZJQWN0UmFuZ2VzLAorICAgICAgICAgIEZfQVAgfCBGX1NUQSB8IEZfUkVBRCwKKyAgICAgICAgICBIRkEzODR4X1JJRF9TVEFfTUZJQUNUUkFOR0VTLCBIRkEzODR4X1JJRF9NRklBQ1RSQU5HRVNfTEVOLCAwLAorICAgICAgICAgIHByaXNtMm1pYl91aW50MzJhcnJheSB9LAorICAgIHsgRElEbWliX3AyX3AyTklDX3AyU1RBQ0ZJQWN0UmFuZ2VzLAorICAgICAgICAgIEZfQVAgfCBGX1NUQSB8IEZfUkVBRCwKKyAgICAgICAgICBIRkEzODR4X1JJRF9TVEFfQ0ZJQUNUUkFOR0VTLCBIRkEzODR4X1JJRF9DRklBQ1RSQU5HRVMyX0xFTiwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfdWludDMyYXJyYXkgfSwKKworICAgIC8qIHAyTUFDIE1JQidzICovCisKKyAgICB7IERJRG1pYl9wMl9wMk1BQ19wMlBvcnRTdGF0dXMsCisgICAgICAgICAgRl9TVEEgfCBGX1JFQUQsCisgICAgICAgICAgSEZBMzg0eF9SSURfUE9SVFNUQVRVUywgMCwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfdWludDMyIH0sCisgICAgeyBESURtaWJfcDJfcDJNQUNfcDJDdXJyZW50U1NJRCwKKyAgICAgICAgICBGX1NUQSB8IEZfUkVBRCwKKyAgICAgICAgICBIRkEzODR4X1JJRF9DVVJSRU5UU1NJRCwgSEZBMzg0eF9SSURfQ1VSUkVOVFNTSURfTEVOLCAwLAorICAgICAgICAgIHByaXNtMm1pYl9ieXRlc3RyMnBzdHIgfSwKKyAgICB7IERJRG1pYl9wMl9wMk1BQ19wMkN1cnJlbnRCU1NJRCwKKyAgICAgICAgICBGX1NUQSB8IEZfUkVBRCwKKyAgICAgICAgICBIRkEzODR4X1JJRF9DVVJSRU5UQlNTSUQsIEhGQTM4NHhfUklEX0NVUlJFTlRCU1NJRF9MRU4sIDAsCisgICAgICAgICAgcHJpc20ybWliX2J5dGVhcmVhMnBzdHIgfSwKKyAgICB7IERJRG1pYl9wMl9wMk1BQ19wMkNvbW1zUXVhbGl0eSwKKyAgICAgICAgICBGX1NUQSB8IEZfUkVBRCwKKyAgICAgICAgICBIRkEzODR4X1JJRF9DT01NU1FVQUxJVFksIEhGQTM4NHhfUklEX0NPTU1TUVVBTElUWV9MRU4sIDAsCisgICAgICAgICAgcHJpc20ybWliX3VpbnQzMmFycmF5IH0sCisgICAgeyBESURtaWJfcDJfcDJNQUNfcDJDb21tc1F1YWxpdHlDUSwKKyAgICAgICAgICBGX1NUQSB8IEZfUkVBRCwKKyAgICAgICAgICBIRkEzODR4X1JJRF9DT01NU1FVQUxJVFksIEhGQTM4NHhfUklEX0NPTU1TUVVBTElUWV9MRU4sIDAsCisgICAgICAgICAgcHJpc20ybWliX3VpbnQzMm9mZnNldCB9LAorICAgIHsgRElEbWliX3AyX3AyTUFDX3AyQ29tbXNRdWFsaXR5QVNMLAorICAgICAgICAgIEZfU1RBIHwgRl9SRUFELAorICAgICAgICAgIEhGQTM4NHhfUklEX0NPTU1TUVVBTElUWSwgSEZBMzg0eF9SSURfQ09NTVNRVUFMSVRZX0xFTiwgMSwKKyAgICAgICAgICBwcmlzbTJtaWJfdWludDMyb2Zmc2V0IH0sCisgICAgeyBESURtaWJfcDJfcDJNQUNfcDJDb21tc1F1YWxpdHlBTkwsCisgICAgICAgICAgRl9TVEEgfCBGX1JFQUQsCisgICAgICAgICAgSEZBMzg0eF9SSURfQ09NTVNRVUFMSVRZLCBIRkEzODR4X1JJRF9DT01NU1FVQUxJVFlfTEVOLCAyLAorICAgICAgICAgIHByaXNtMm1pYl91aW50MzJvZmZzZXQgfSwKKyAgICB7IERJRG1pYl9wMl9wMk1BQ19wMmRibUNvbW1zUXVhbGl0eSwKKyAgICAgICAgICBGX1NUQSB8IEZfUkVBRCwKKyAgICAgICAgICBIRkEzODR4X1JJRF9EQk1DT01NU1FVQUxJVFksIEhGQTM4NHhfUklEX0RCTUNPTU1TUVVBTElUWV9MRU4sIDAsCisgICAgICAgICAgcHJpc20ybWliX3VpbnQzMmFycmF5IH0sCisgICAgeyBESURtaWJfcDJfcDJNQUNfcDJkYm1Db21tc1F1YWxpdHlDUSwKKyAgICAgICAgICBGX1NUQSB8IEZfUkVBRCwKKyAgICAgICAgICBIRkEzODR4X1JJRF9DT01NU1FVQUxJVFksIEhGQTM4NHhfUklEX0NPTU1TUVVBTElUWV9MRU4sIDAsCisgICAgICAgICAgcHJpc20ybWliX3VpbnQzMm9mZnNldCB9LAorICAgIHsgRElEbWliX3AyX3AyTUFDX3AyZGJtQ29tbXNRdWFsaXR5QVNMLAorICAgICAgICAgIEZfU1RBIHwgRl9SRUFELAorICAgICAgICAgIEhGQTM4NHhfUklEX0NPTU1TUVVBTElUWSwgSEZBMzg0eF9SSURfQ09NTVNRVUFMSVRZX0xFTiwgMSwKKyAgICAgICAgICBwcmlzbTJtaWJfdWludDMyb2Zmc2V0IH0sCisgICAgeyBESURtaWJfcDJfcDJNQUNfcDJkYm1Db21tc1F1YWxpdHlBTkwsCisgICAgICAgICAgRl9TVEEgfCBGX1JFQUQsCisgICAgICAgICAgSEZBMzg0eF9SSURfQ09NTVNRVUFMSVRZLCBIRkEzODR4X1JJRF9DT01NU1FVQUxJVFlfTEVOLCAyLAorICAgICAgICAgIHByaXNtMm1pYl91aW50MzJvZmZzZXQgfSwKKyAgICB7IERJRG1pYl9wMl9wMk1BQ19wMkN1cnJlbnRUeFJhdGUsCisgICAgICAgICAgRl9TVEEgfCBGX1JFQUQsCisgICAgICAgICAgSEZBMzg0eF9SSURfQ1VSUkVOVFRYUkFURSwgMCwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfdWludDMyIH0sCisgICAgeyBESURtaWJfcDJfcDJNQUNfcDJDdXJyZW50QmVhY29uSW50ZXJ2YWwsCisgICAgICAgICAgRl9BUCB8IEZfU1RBIHwgRl9SRUFELAorICAgICAgICAgIEhGQTM4NHhfUklEX0NVUlJFTlRCQ05JTlQsIDAsIDAsCisgICAgICAgICAgcHJpc20ybWliX3VpbnQzMiB9LAorICAgIHsgRElEbWliX3AyX3AyTUFDX3AyU3RhQ3VycmVudFNjYWxlVGhyZXNob2xkcywKKyAgICAgICAgICBGX1NUQSB8IEZfUkVBRCwKKyAgICAgICAgICBIRkEzODR4X1JJRF9DVVJSRU5UU0NBTEVUSFJFU0gsIEhGQTM4NHhfUklEX1NUQUNVUlNDQUxFVEhSRVNIX0xFTiwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfdWludDMyYXJyYXkgfSwKKyAgICB7IERJRG1pYl9wMl9wMk1BQ19wMkFQQ3VycmVudFNjYWxlVGhyZXNob2xkcywKKyAgICAgICAgICBGX0FQIHwgRl9SRUFELAorICAgICAgICAgIEhGQTM4NHhfUklEX0NVUlJFTlRTQ0FMRVRIUkVTSCwgSEZBMzg0eF9SSURfQVBDVVJTQ0FMRVRIUkVTSF9MRU4sIDAsCisgICAgICAgICAgcHJpc20ybWliX3VpbnQzMmFycmF5IH0sCisgICAgeyBESURtaWJfcDJfcDJNQUNfcDJQcm90b2NvbFJzcFRpbWUsCisgICAgICAgICAgRl9BUCB8IEZfU1RBIHwgRl9SRUFELAorICAgICAgICAgIEhGQTM4NHhfUklEX1BST1RPQ09MUlNQVElNRSwgMCwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfdWludDMyIH0sCisgICAgeyBESURtaWJfcDJfcDJNQUNfcDJTaG9ydFJldHJ5TGltaXQsCisgICAgICAgICAgRl9BUCB8IEZfU1RBIHwgRl9SRUFELAorICAgICAgICAgIEhGQTM4NHhfUklEX1NIT1JUUkVUUllMSU1JVCwgMCwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfdWludDMyIH0sCisgICAgeyBESURtaWJfcDJfcDJNQUNfcDJMb25nUmV0cnlMaW1pdCwKKyAgICAgICAgICBGX0FQIHwgRl9TVEEgfCBGX1JFQUQsCisgICAgICAgICAgSEZBMzg0eF9SSURfTE9OR1JFVFJZTElNSVQsIDAsIDAsCisgICAgICAgICAgcHJpc20ybWliX3VpbnQzMiB9LAorICAgIHsgRElEbWliX3AyX3AyTUFDX3AyTWF4VHJhbnNtaXRMaWZldGltZSwKKyAgICAgICAgICBGX0FQIHwgRl9TVEEgfCBGX1JFQUQsCisgICAgICAgICAgSEZBMzg0eF9SSURfTUFYVFhMSUZFVElNRSwgMCwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfdWludDMyIH0sCisgICAgeyBESURtaWJfcDJfcDJNQUNfcDJNYXhSZWNlaXZlTGlmZXRpbWUsCisgICAgICAgICAgRl9BUCB8IEZfU1RBIHwgRl9SRUFELAorICAgICAgICAgIEhGQTM4NHhfUklEX01BWFJYTElGRVRJTUUsIDAsIDAsCisgICAgICAgICAgcHJpc20ybWliX3VpbnQzMiB9LAorICAgIHsgRElEbWliX3AyX3AyTUFDX3AyQ0ZQb2xsYWJsZSwKKyAgICAgICAgICBGX1NUQSB8IEZfUkVBRCwKKyAgICAgICAgICBIRkEzODR4X1JJRF9DRlBPTExBQkxFLCAwLCAwLAorICAgICAgICAgIHByaXNtMm1pYl91aW50MzIgfSwKKyAgICB7IERJRG1pYl9wMl9wMk1BQ19wMkF1dGhlbnRpY2F0aW9uQWxnb3JpdGhtcywKKyAgICAgICAgICBGX0FQIHwgRl9TVEEgfCBGX1JFQUQsCisgICAgICAgICAgSEZBMzg0eF9SSURfQVVUSEFMR09SSVRITVMsIEhGQTM4NHhfUklEX0FVVEhBTEdPUklUSE1TX0xFTiwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfdWludDMyYXJyYXkgfSwKKyAgICB7IERJRG1pYl9wMl9wMk1BQ19wMlByaXZhY3lPcHRpb25JbXBsZW1lbnRlZCwKKyAgICAgICAgICBGX0FQIHwgRl9TVEEgfCBGX1JFQUQsCisgICAgICAgICAgSEZBMzg0eF9SSURfUFJJVkFDWU9QVElNUCwgMCwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfdWludDMyIH0sCisgICAgeyBESURtaWJfcDJfcDJNQUNfcDJDdXJyZW50VHhSYXRlMSwKKyAgICAgICAgICBGX0FQIHwgRl9SRUFELAorICAgICAgICAgIEhGQTM4NHhfUklEX0NVUlJFTlRUWFJBVEUxLCAwLCAwLAorICAgICAgICAgIHByaXNtMm1pYl91aW50MzIgfSwKKyAgICB7IERJRG1pYl9wMl9wMk1BQ19wMkN1cnJlbnRUeFJhdGUyLAorICAgICAgICAgIEZfQVAgfCBGX1JFQUQsCisgICAgICAgICAgSEZBMzg0eF9SSURfQ1VSUkVOVFRYUkFURTIsIDAsIDAsCisgICAgICAgICAgcHJpc20ybWliX3VpbnQzMiB9LAorICAgIHsgRElEbWliX3AyX3AyTUFDX3AyQ3VycmVudFR4UmF0ZTMsCisgICAgICAgICAgRl9BUCB8IEZfUkVBRCwKKyAgICAgICAgICBIRkEzODR4X1JJRF9DVVJSRU5UVFhSQVRFMywgMCwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfdWludDMyIH0sCisgICAgeyBESURtaWJfcDJfcDJNQUNfcDJDdXJyZW50VHhSYXRlNCwKKyAgICAgICAgICBGX0FQIHwgRl9SRUFELAorICAgICAgICAgIEhGQTM4NHhfUklEX0NVUlJFTlRUWFJBVEU0LCAwLCAwLAorICAgICAgICAgIHByaXNtMm1pYl91aW50MzIgfSwKKyAgICB7IERJRG1pYl9wMl9wMk1BQ19wMkN1cnJlbnRUeFJhdGU1LAorICAgICAgICAgIEZfQVAgfCBGX1JFQUQsCisgICAgICAgICAgSEZBMzg0eF9SSURfQ1VSUkVOVFRYUkFURTUsIDAsIDAsCisgICAgICAgICAgcHJpc20ybWliX3VpbnQzMiB9LAorICAgIHsgRElEbWliX3AyX3AyTUFDX3AyQ3VycmVudFR4UmF0ZTYsCisgICAgICAgICAgRl9BUCB8IEZfUkVBRCwKKyAgICAgICAgICBIRkEzODR4X1JJRF9DVVJSRU5UVFhSQVRFNiwgMCwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfdWludDMyIH0sCisgICAgeyBESURtaWJfcDJfcDJNQUNfcDJPd25NQUNBZGRyZXNzLAorICAgICAgICAgIEZfQVAgfCBGX1JFQUQsCisgICAgICAgICAgSEZBMzg0eF9SSURfT1dOTUFDQUREUkVTUywgSEZBMzg0eF9SSURfT1dOTUFDQUREUkVTU19MRU4sIDAsCisgICAgICAgICAgcHJpc20ybWliX2J5dGVhcmVhMnBzdHIgfSwKKworICAgIC8qIHAyTW9kZW0gTUlCJ3MgKi8KKworICAgIHsgRElEbWliX3AyX3AyTW9kZW1fcDJQSFlUeXBlLAorICAgICAgICAgIEZfQVAgfCBGX1NUQSB8IEZfUkVBRCwKKyAgICAgICAgICBIRkEzODR4X1JJRF9QSFlUWVBFLCAwLCAwLAorICAgICAgICAgIHByaXNtMm1pYl91aW50MzIgfSwKKyAgICB7IERJRG1pYl9wMl9wMk1vZGVtX3AyQ3VycmVudENoYW5uZWwsCisgICAgICAgICAgRl9BUCB8IEZfU1RBIHwgRl9SRUFELAorICAgICAgICAgIEhGQTM4NHhfUklEX0NVUlJFTlRDSEFOTkVMLCAwLCAwLAorICAgICAgICAgIHByaXNtMm1pYl91aW50MzIgfSwKKyAgICB7IERJRG1pYl9wMl9wMk1vZGVtX3AyQ3VycmVudFBvd2VyU3RhdGUsCisgICAgICAgICAgRl9BUCB8IEZfU1RBIHwgRl9SRUFELAorICAgICAgICAgIEhGQTM4NHhfUklEX0NVUlJFTlRQT1dFUlNUQVRFLCAwLCAwLAorICAgICAgICAgIHByaXNtMm1pYl91aW50MzIgfSwKKyAgICB7IERJRG1pYl9wMl9wMk1vZGVtX3AyQ0NBTW9kZSwKKyAgICAgICAgICBGX0FQIHwgRl9TVEEgfCBGX1JFQUQsCisgICAgICAgICAgSEZBMzg0eF9SSURfQ0NBTU9ERSwgMCwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfdWludDMyIH0sCisgICAgeyBESURtaWJfcDJfcDJNb2RlbV9wMlR4UG93ZXJNYXgsCisgICAgICAgICAgRl9BUCB8IEZfU1RBIHwgRl9SRUFEIHwgRl9XUklURSwKKyAgICAgICAgICBIRkEzODR4X1JJRF9UWFBPV0VSTUFYLCAwLCAwLAorICAgICAgICAgIHByaXNtMm1pYl91aW50MzIgfSwKKyAgICB7IERJRG1pYl9kb3QxMXBoeV9kb3QxMVBoeVR4UG93ZXJUYWJsZV9kb3QxMUN1cnJlbnRUeFBvd2VyTGV2ZWwsCisgICAgICAgICAgRl9BUCB8IEZfU1RBIHwgRl9SRUFEIHwgRl9XUklURSwKKyAgICAgICAgICBIRkEzODR4X1JJRF9UWFBPV0VSTUFYLCAwLCAwLAorICAgICAgICAgIHByaXNtMm1pYl91aW50MzIgfSwKKyAgICB7IERJRG1pYl9wMl9wMk1vZGVtX3AyU3VwcG9ydGVkRGF0YVJhdGVzLAorICAgICAgICAgIEZfQVAgfCBGX1NUQSB8IEZfUkVBRCwKKyAgICAgICAgICBIRkEzODR4X1JJRF9TVVBQT1JURUREQVRBUkFURVMsIEhGQTM4NHhfUklEX1NVUFBPUlRFRERBVEFSQVRFU19MRU4sIDAsCisgICAgICAgICAgcHJpc20ybWliX2J5dGVzdHIycHN0ciB9LAorCisgICAgLyogQW5kIGZpbmFsbHksIGxueCBtaWJzICovCisgICAgeyBESURtaWJfbG54X2xueENvbmZpZ1RhYmxlX2xueFJTTkFJRSwKKyAgICAgICAgICBGX1NUQSB8IEZfUkVBRCB8IEZfV1JJVEUsCisgICAgICAgICAgSEZBMzg0eF9SSURfQ05GV1BBREFUQSwgMCwgMCwKKyAgICAgICAgICBwcmlzbTJtaWJfcHJpdiB9LAorICAgIHsgMCwgMCwgMCwgMCwgMCwgTlVMTH19OworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1RoZXNlIE1JQidzIGFyZSBub3Qgc3VwcG9ydGVkIGF0IHRoaXMgdGltZToKKworRElEbWliX2RvdDExcGh5X2RvdDExUGh5T3BlcmF0aW9uVGFibGVfZG90MTFDaGFubmVsQWdpbGl0eVByZXNlbnQKK0RJRG1pYl9kb3QxMXBoeV9kb3QxMVBoeU9wZXJhdGlvblRhYmxlX2RvdDExQ2hhbm5lbEFnaWxpdHlFbmFibGVkCitESURtaWJfZG90MTFwaHlfZG90MTFQaHlEU1NTVGFibGVfZG90MTFQQkNDT3B0aW9uSW1wbGVtZW50ZWQKK0RJRG1pYl9kb3QxMXBoeV9kb3QxMVJlZ0RvbWFpbnNTdXBwb3J0ZWRUYWJsZV9kb3QxMVJlZ0RvbWFpbnNTdXBwb3J0SW5kZXgKK0RJRG1pYl9kb3QxMXBoeV9kb3QxMVN1cHBvcnRlZERhdGFSYXRlc1R4VGFibGVfZG90MTFTdXBwb3J0ZWREYXRhUmF0ZXNUeEluZGV4CitESURtaWJfZG90MTFwaHlfZG90MTFTdXBwb3J0ZWREYXRhUmF0ZXNUeFRhYmxlX2RvdDExU3VwcG9ydGVkRGF0YVJhdGVzVHhWYWx1ZQorRElEbWliX2RvdDExcGh5X2RvdDExU3VwcG9ydGVkRGF0YVJhdGVzUnhUYWJsZV9kb3QxMVN1cHBvcnRlZERhdGFSYXRlc1J4SW5kZXgKK0RJRG1pYl9kb3QxMXBoeV9kb3QxMVN1cHBvcnRlZERhdGFSYXRlc1J4VGFibGVfZG90MTFTdXBwb3J0ZWREYXRhUmF0ZXNSeFZhbHVlCisKK0RJRG1pYl9kb3QxMXBoeV9kb3QxMVJlZ0RvbWFpbnNTdXBwb3J0ZWRUYWJsZV9kb3QxMVJlZ0RvbWFpbnNTdXBwb3J0VmFsdWUKK1RPRE86IG5lZWQgdG8gaW52ZXN0aWdhdGUgd2h5IHdsYW4gaGFzIHRoaXMgYXMgZW51bWVyYXRlZCBhbmQgUHJpc20yIGhhcyB0aGlzCisgICAgICBhcyBidHllIHN0ci4KKworRElEbWliX2RvdDExcGh5X2RvdDExUGh5RFNTU1RhYmxlX2RvdDExU2hvcnRQcmVhbWJsZU9wdGlvbkltcGxlbWVudGVkCitUT0RPOiBGaW5kIG91dCB0aGUgZmlybXdhcmUgdmVyc2lvbiBudW1iZXIocykgZm9yIGlkZW50aWZ5aW5nCisgICAgICB3aGV0aGVyIHRoZSBmaXJtd2FyZSBpcyBjYXBhYmxlIG9mIHNob3J0IHByZWFtYmxlLiBUUlVFIG9yIEZBTFNFCisgICAgICB3aWxsIGJlIHJldHVybmVkIGJhc2VkIG9uIHRoZSB2ZXJzaW9uIG9mIHRoZSBmaXJtd2FyZS4KKworV0VQIEtleSBtYXBwaW5ncyBhcmVuJ3Qgc3VwcG9ydGVkIGluIHRoZSBmL3cuCitESURtaWJfZG90MTFzbXRfZG90MTFXRVBLZXlNYXBwaW5nc1RhYmxlX2RvdDExV0VQS2V5TWFwcGluZ0luZGV4CitESURtaWJfZG90MTFzbXRfZG90MTFXRVBLZXlNYXBwaW5nc1RhYmxlX2RvdDExV0VQS2V5TWFwcGluZ0FkZHJlc3MKK0RJRG1pYl9kb3QxMXNtdF9kb3QxMVdFUEtleU1hcHBpbmdzVGFibGVfZG90MTFXRVBLZXlNYXBwaW5nV0VQT24KK0RJRG1pYl9kb3QxMXNtdF9kb3QxMVdFUEtleU1hcHBpbmdzVGFibGVfZG90MTFXRVBLZXlNYXBwaW5nVmFsdWUKK0RJRG1pYl9kb3QxMXNtdF9kb3QxMVByaXZhY3lUYWJsZV9kb3QxMVdFUEtleU1hcHBpbmdMZW5ndGgKKworVE9ETzogaW1wbGVtZW50IGNvdW50ZXJzLgorRElEbWliX2RvdDExc210X2RvdDExUHJpdmFjeVRhYmxlX2RvdDExV0VQSUNWRXJyb3JDb3VudAorRElEbWliX2RvdDExc210X2RvdDExUHJpdmFjeVRhYmxlX2RvdDExV0VQRXhjbHVkZWRDb3VudAorRElEbWliX2RvdDExbWFjX2RvdDExQ291bnRlcnNUYWJsZV9kb3QxMVRyYW5zbWl0dGVkRnJhZ21lbnRDb3VudAorRElEbWliX2RvdDExbWFjX2RvdDExQ291bnRlcnNUYWJsZV9kb3QxMU11bHRpY2FzdFRyYW5zbWl0dGVkRnJhbWVDb3VudAorRElEbWliX2RvdDExbWFjX2RvdDExQ291bnRlcnNUYWJsZV9kb3QxMUZhaWxlZENvdW50CitESURtaWJfZG90MTFtYWNfZG90MTFDb3VudGVyc1RhYmxlX2RvdDExUmV0cnlDb3VudAorRElEbWliX2RvdDExbWFjX2RvdDExQ291bnRlcnNUYWJsZV9kb3QxMU11bHRpcGxlUmV0cnlDb3VudAorRElEbWliX2RvdDExbWFjX2RvdDExQ291bnRlcnNUYWJsZV9kb3QxMUZyYW1lRHVwbGljYXRlQ291bnQKK0RJRG1pYl9kb3QxMW1hY19kb3QxMUNvdW50ZXJzVGFibGVfZG90MTFSVFNTdWNjZXNzQ291bnQKK0RJRG1pYl9kb3QxMW1hY19kb3QxMUNvdW50ZXJzVGFibGVfZG90MTFSVFNGYWlsdXJlQ291bnQKK0RJRG1pYl9kb3QxMW1hY19kb3QxMUNvdW50ZXJzVGFibGVfZG90MTFBQ0tGYWlsdXJlQ291bnQKK0RJRG1pYl9kb3QxMW1hY19kb3QxMUNvdW50ZXJzVGFibGVfZG90MTFSZWNlaXZlZEZyYWdtZW50Q291bnQKK0RJRG1pYl9kb3QxMW1hY19kb3QxMUNvdW50ZXJzVGFibGVfZG90MTFNdWx0aWNhc3RSZWNlaXZlZEZyYW1lQ291bnQKK0RJRG1pYl9kb3QxMW1hY19kb3QxMUNvdW50ZXJzVGFibGVfZG90MTFGQ1NFcnJvckNvdW50CitESURtaWJfZG90MTFtYWNfZG90MTFDb3VudGVyc1RhYmxlX2RvdDExVHJhbnNtaXR0ZWRGcmFtZUNvdW50CitESURtaWJfZG90MTFtYWNfZG90MTFDb3VudGVyc1RhYmxlX2RvdDExV0VQVW5kZWNyeXB0YWJsZUNvdW50CisKK1RPRE86IGltcGxlbWVudCBzYW5lIHZhbHVlcyBmb3IgdGhlc2UuCitESURtaWJfZG90MTFtYWNfZG90MTFPcGVyYXRpb25UYWJsZV9kb3QxMU1hbnVmYWN0dXJlcklECitESURtaWJfZG90MTFtYWNfZG90MTFPcGVyYXRpb25UYWJsZV9kb3QxMVByb2R1Y3RJRAorCitOb3QgdG9vIHdvcnJpZWQgYWJvdXQgdGhlc2UgYXQgdGhlIG1vbWVudC4KK0RJRG1pYl9kb3QxMXBoeV9kb3QxMVBoeUFudGVubmFUYWJsZV9kb3QxMUN1cnJlbnRUeEFudGVubmEKK0RJRG1pYl9kb3QxMXBoeV9kb3QxMVBoeUFudGVubmFUYWJsZV9kb3QxMURpdmVyc2l0eVN1cHBvcnQKK0RJRG1pYl9kb3QxMXBoeV9kb3QxMVBoeUFudGVubmFUYWJsZV9kb3QxMUN1cnJlbnRSeEFudGVubmEKK0RJRG1pYl9kb3QxMXBoeV9kb3QxMVBoeVR4UG93ZXJUYWJsZV9kb3QxMU51bWJlclN1cHBvcnRlZFBvd2VyTGV2ZWxzCitESURtaWJfZG90MTFwaHlfZG90MTFQaHlUeFBvd2VyVGFibGVfZG90MTFUeFBvd2VyTGV2ZWwxCitESURtaWJfZG90MTFwaHlfZG90MTFQaHlUeFBvd2VyVGFibGVfZG90MTFUeFBvd2VyTGV2ZWwyCitESURtaWJfZG90MTFwaHlfZG90MTFQaHlUeFBvd2VyVGFibGVfZG90MTFUeFBvd2VyTGV2ZWwzCitESURtaWJfZG90MTFwaHlfZG90MTFQaHlUeFBvd2VyVGFibGVfZG90MTFUeFBvd2VyTGV2ZWw0CitESURtaWJfZG90MTFwaHlfZG90MTFQaHlUeFBvd2VyVGFibGVfZG90MTFUeFBvd2VyTGV2ZWw1CitESURtaWJfZG90MTFwaHlfZG90MTFQaHlUeFBvd2VyVGFibGVfZG90MTFUeFBvd2VyTGV2ZWw2CitESURtaWJfZG90MTFwaHlfZG90MTFQaHlUeFBvd2VyVGFibGVfZG90MTFUeFBvd2VyTGV2ZWw3CitESURtaWJfZG90MTFwaHlfZG90MTFQaHlUeFBvd2VyVGFibGVfZG90MTFUeFBvd2VyTGV2ZWw4CitESURtaWJfZG90MTFwaHlfZG90MTFQaHlUeFBvd2VyVGFibGVfZG90MTFDdXJyZW50VHhQb3dlckxldmVsCisKK1VtbW0sIEZIIGFuZCBJUiBkb24ndCBhcHBseQorRElEbWliX2RvdDExcGh5X2RvdDExUGh5RkhTU1RhYmxlX2RvdDExSG9wVGltZQorRElEbWliX2RvdDExcGh5X2RvdDExUGh5RkhTU1RhYmxlX2RvdDExQ3VycmVudENoYW5uZWxOdW1iZXIKK0RJRG1pYl9kb3QxMXBoeV9kb3QxMVBoeUZIU1NUYWJsZV9kb3QxMU1heER3ZWxsVGltZQorRElEbWliX2RvdDExcGh5X2RvdDExUGh5RkhTU1RhYmxlX2RvdDExQ3VycmVudER3ZWxsVGltZQorRElEbWliX2RvdDExcGh5X2RvdDExUGh5RkhTU1RhYmxlX2RvdDExQ3VycmVudFNldAorRElEbWliX2RvdDExcGh5X2RvdDExUGh5RkhTU1RhYmxlX2RvdDExQ3VycmVudFBhdHRlcm4KK0RJRG1pYl9kb3QxMXBoeV9kb3QxMVBoeUZIU1NUYWJsZV9kb3QxMUN1cnJlbnRJbmRleAorRElEbWliX2RvdDExcGh5X2RvdDExUGh5RFNTU1RhYmxlX2RvdDExQ0NBTW9kZVN1cHBvcnRlZAorRElEbWliX2RvdDExcGh5X2RvdDExUGh5RFNTU1RhYmxlX2RvdDExRURUaHJlc2hvbGQKK0RJRG1pYl9kb3QxMXBoeV9kb3QxMVBoeUlSVGFibGVfZG90MTFDQ0FXYXRjaGRvZ1RpbWVyTWF4CitESURtaWJfZG90MTFwaHlfZG90MTFQaHlJUlRhYmxlX2RvdDExQ0NBV2F0Y2hkb2dDb3VudE1heAorRElEbWliX2RvdDExcGh5X2RvdDExUGh5SVJUYWJsZV9kb3QxMUNDQVdhdGNoZG9nVGltZXJNaW4KK0RJRG1pYl9kb3QxMXBoeV9kb3QxMVBoeUlSVGFibGVfZG90MTFDQ0FXYXRjaGRvZ0NvdW50TWluCisKK1dlIGp1c3QgZG9uJ3QgaGF2ZSBlbm91Z2ggYW50ZW5uYXMgcmlnaHQgbm93IHRvIHdvcnJ5IGFib3V0IHRoaXMuCitESURtaWJfZG90MTFwaHlfZG90MTFBbnRlbm5hc0xpc3RUYWJsZV9kb3QxMUFudGVubmFMaXN0SW5kZXgKK0RJRG1pYl9kb3QxMXBoeV9kb3QxMUFudGVubmFzTGlzdFRhYmxlX2RvdDExU3VwcG9ydGVkVHhBbnRlbm5hCitESURtaWJfZG90MTFwaHlfZG90MTFBbnRlbm5hc0xpc3RUYWJsZV9kb3QxMVN1cHBvcnRlZFJ4QW50ZW5uYQorRElEbWliX2RvdDExcGh5X2RvdDExQW50ZW5uYXNMaXN0VGFibGVfZG90MTFEaXZlcnNpdHlTZWxlY3Rpb25SeAorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworLyogRnVuY3Rpb24gRGVmaW5pdGlvbnMgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIHByaXNtMm1nbXRfbWlic2V0X21pYmdldAorKgorKiBTZXQgdGhlIHZhbHVlIG9mIGEgbWliIGl0ZW0uCisqCisqIEFyZ3VtZW50czoKKyoJd2xhbmRldgkJd2xhbiBkZXZpY2Ugc3RydWN0dXJlCisqCW1zZ3AJCXB0ciB0byBtc2cgYnVmZmVyCisqCisqIFJldHVybnM6CisqCTAJc3VjY2VzcyBhbmQgZG9uZQorKgk8MAlzdWNjZXNzLCBidXQgd2UncmUgd2FpdGluZyBmb3Igc29tZXRoaW5nIHRvIGZpbmlzaC4KKyoJPjAJYW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgaGFuZGxpbmcgdGhlIG1lc3NhZ2UuCisqIFNpZGUgZWZmZWN0czoKKyoKKyogQ2FsbCBjb250ZXh0OgorKglwcm9jZXNzIHRocmVhZCAgKHVzdWFsbHkpCisqCWludGVycnVwdAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK2ludCBwcmlzbTJtZ210X21pYnNldF9taWJnZXQod2xhbmRldmljZV90ICp3bGFuZGV2LCB2b2lkICptc2dwKQoreworCWhmYTM4NHhfdAkJKmh3ID0gd2xhbmRldi0+cHJpdjsKKwlpbnQJCQlyZXN1bHQsIGlzZ2V0OworCW1pYnJlY190CQkqbWliOworCVVJTlQxNgkJCXdoaWNoOworCisJcDgwMjExbXNnX2RvdDExcmVxX21pYnNldF90CSptc2cgPSBtc2dwOworCXA4MDIxMWl0ZW1kX3QJCQkqbWliaXRlbTsKKworCURCRkVOVEVSOworCisJbXNnLT5yZXN1bHRjb2RlLnN0YXR1cyA9IFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfZGF0YV9vazsKKwltc2ctPnJlc3VsdGNvZGUuZGF0YSA9IFA4MDIxMUVOVU1fcmVzdWx0Y29kZV9zdWNjZXNzOworCisJLyoKKwkqKiBEZXRlcm1pbmUgaWYgdGhpcyBpcyBhbiBBY2Nlc3MgUG9pbnQgb3IgYSBzdGF0aW9uLgorCSovCisKKwl3aGljaCA9IGh3LT5hcCA/IEZfQVAgOiBGX1NUQTsKKworCS8qCisJKiogRmluZCB0aGUgTUlCIGluIHRoZSBNSUIgdGFibGUuICBOb3RlIHRoYXQgYSBNSUIgbWF5IGJlIGluIHRoZQorCSoqIHRhYmxlIHR3aWNlLi4ub25jZSBmb3IgYW4gQVAgYW5kIG9uY2UgZm9yIGEgc3RhdGlvbi4gIE1ha2Ugc3VyZQorCSoqIHRvIGdldCB0aGUgY29ycmVjdCBvbmUuICBOb3RlIHRoYXQgRElEPTAgbWFya3MgdGhlIGVuZCBvZiB0aGUKKwkqKiBNSUIgdGFibGUuCisJKi8KKworCW1pYml0ZW0gPSAocDgwMjExaXRlbWRfdCAqKSBtc2ctPm1pYmF0dHJpYnV0ZS5kYXRhOworCisJZm9yIChtaWIgPSBtaWJ0YWI7IG1pYi0+ZGlkICE9IDA7IG1pYisrKQorCQlpZiAobWliLT5kaWQgPT0gbWliaXRlbS0+ZGlkICYmIChtaWItPmZsYWcgJiB3aGljaCkpCisJCQlicmVhazsKKworCWlmIChtaWItPmRpZCA9PSAwKSB7CisJCW1zZy0+cmVzdWx0Y29kZS5kYXRhID0gUDgwMjExRU5VTV9yZXN1bHRjb2RlX25vdF9zdXBwb3J0ZWQ7CisJCWdvdG8gZG9uZTsKKwl9CisKKwkvKgorCSoqIERldGVybWluZSBpZiB0aGlzIGlzIGEgIm1pYmdldCIgb3IgYSAibWlic2V0Ii4gIElmIHRoaXMgaXMgYQorCSoqICJtaWJnZXQiLCB0aGVuIG1ha2Ugc3VyZSB0aGF0IHRoZSBNSUIgbWF5IGJlIHJlYWQuICBPdGhlcndpc2UsCisJKiogdGhpcyBpcyBhICJtaWJzZXQiIHNvIG1ha2UgbWFrZSBzdXJlIHRoYXQgdGhlIE1JQiBtYXkgYmUgd3JpdHRlbi4KKwkqLworCisJaXNnZXQgPSAobXNnLT5tc2djb2RlID09IERJRG1zZ19kb3QxMXJlcV9taWJnZXQpOworCisJaWYgKGlzZ2V0KSB7CisJCWlmICghKG1pYi0+ZmxhZyAmIEZfUkVBRCkpIHsKKwkJCW1zZy0+cmVzdWx0Y29kZS5kYXRhID0KKwkJCQlQODAyMTFFTlVNX3Jlc3VsdGNvZGVfY2FudF9nZXRfd3JpdGVvbmx5X21pYjsKKwkJCWdvdG8gZG9uZTsKKwkJfQorCX0gZWxzZSB7CisJCWlmICghKG1pYi0+ZmxhZyAmIEZfV1JJVEUpKSB7CisJCQltc2ctPnJlc3VsdGNvZGUuZGF0YSA9CisJCQkJUDgwMjExRU5VTV9yZXN1bHRjb2RlX2NhbnRfc2V0X3JlYWRvbmx5X21pYjsKKwkJCWdvdG8gZG9uZTsKKwkJfQorCX0KKworCS8qCisJKiogRXhlY3V0ZSB0aGUgTUlCIGZ1bmN0aW9uLiAgSWYgdGhpbmdzIHdvcmtlZCBva2F5LCB0aGVuIG1ha2UKKwkqKiBzdXJlIHRoYXQgdGhlIE1JQiBmdW5jdGlvbiBhbHNvIHdvcmtlZCBva2F5LiAgSWYgc28sIGFuZCB0aGlzCisJKiogaXMgYSAibWliZ2V0IiwgdGhlbiB0aGUgc3RhdHVzIHZhbHVlIG11c3QgYmUgc2V0IGZvciBib3RoIHRoZQorCSoqICJtaWJhdHRyaWJ1dGUiIHBhcmFtZXRlciBhbmQgdGhlIG1pYiBpdGVtIHdpdGhpbiB0aGUgZGF0YQorCSoqIHBvcnRpb24gb2YgdGhlICJtaWJhdHRyaWJ1dGUiLgorCSovCisKKwlyZXN1bHQgPSBtaWItPmZ1bmMobWliLCBpc2dldCwgd2xhbmRldiwgaHcsIG1zZywKKwkJCSAgICh2b2lkICopIG1pYml0ZW0tPmRhdGEpOworCisJaWYgKG1zZy0+cmVzdWx0Y29kZS5kYXRhID09IFA4MDIxMUVOVU1fcmVzdWx0Y29kZV9zdWNjZXNzKSB7CisJCWlmIChyZXN1bHQgIT0gMCkgeworCQkJV0xBTl9MT0dfREVCVUcoMSwgImdldC9zZXQgZmFpbHVyZSwgcmVzdWx0PSVkXG4iLAorCQkJCQlyZXN1bHQpOworCQkJbXNnLT5yZXN1bHRjb2RlLmRhdGEgPQorCQkJCSBQODAyMTFFTlVNX3Jlc3VsdGNvZGVfaW1wbGVtZW50YXRpb25fZmFpbHVyZTsKKwkJfSBlbHNlIHsKKwkJCWlmIChpc2dldCkgeworCQkJCW1zZy0+bWliYXR0cmlidXRlLnN0YXR1cyA9CisJCQkJCVA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfZGF0YV9vazsKKwkJCQltaWJpdGVtLT5zdGF0dXMgPQorCQkJCQlQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2RhdGFfb2s7CisJCQl9CisJCX0KKwl9CisKK2RvbmU6CisJREJGRVhJVDsKKworCXJldHVybigwKTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIHByaXNtMm1pYl9ieXRlc3RyMnBzdHIKKyoKKyogR2V0L3NldCBwc3RyIGRhdGEgdG8vZnJvbSBhIGJ5dGUgc3RyaW5nLgorKgorKiBNSUIgcmVjb3JkIHBhcmFtZXRlcnM6CisqICAgICAgIHBhcm0xICAgIFByaXNtMiBSSUQgdmFsdWUuCisqICAgICAgIHBhcm0yICAgIE51bWJlciBvZiBieXRlcyBvZiBSSUQgZGF0YS4KKyogICAgICAgcGFybTMgICAgTm90IHVzZWQuCisqCisqIEFyZ3VtZW50czoKKyogICAgICAgbWliICAgICAgTUlCIHJlY29yZC4KKyogICAgICAgaXNnZXQgICAgTUlCR0VUL01JQlNFVCBmbGFnLgorKiAgICAgICB3bGFuZGV2ICB3bGFuIGRldmljZSBzdHJ1Y3R1cmUuCisqICAgICAgIHByaXYgICAgICJwcml2IiBzdHJ1Y3R1cmUuCisqICAgICAgIGh3ICAgICAgICJodyIgc3RydWN0dXJlLgorKiAgICAgICBtc2cgICAgICBNZXNzYWdlIHN0cnVjdHVyZS4KKyogICAgICAgZGF0YSAgICAgRGF0YSBidWZmZXIuCisqCisqIFJldHVybnM6CisqICAgICAgIDAgICAtIFN1Y2Nlc3MuCisqICAgICAgIH4wICAtIEVycm9yLgorKgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbnQgcHJpc20ybWliX2J5dGVzdHIycHN0cigKK21pYnJlY190ICAgICAgICAgICAgICAgICAgICAgKm1pYiwKK2ludCAgICAgICAgICAgICAgICAgICAgICAgICAgaXNnZXQsCit3bGFuZGV2aWNlX3QgICAgICAgICAgICAgICAgICp3bGFuZGV2LAoraGZhMzg0eF90ICAgICAgICAgICAgICAgICAgICAqaHcsCitwODAyMTFtc2dfZG90MTFyZXFfbWlic2V0X3QgICptc2csCit2b2lkICAgICAgICAgICAgICAgICAgICAgICAgICpkYXRhKQoreworCWludCAgICAgICAgICAgICAgICByZXN1bHQ7CisJcDgwMjExcHN0cmRfdCAgICAgICpwc3RyID0gKHA4MDIxMXBzdHJkX3QqKSBkYXRhOworCVVJTlQ4ICAgICAgICAgICAgICBieXRlYnVmW01JQl9UTVBfTUFYTEVOXTsKKwloZmEzODR4X2J5dGVzdHJfdCAgKnAyYnl0ZXN0ciA9IChoZmEzODR4X2J5dGVzdHJfdCopIGJ5dGVidWY7CisKKwlEQkZFTlRFUjsKKworCWlmIChpc2dldCkgeworCQlyZXN1bHQgPSBoZmEzODR4X2RydnJfZ2V0Y29uZmlnKGh3LCBtaWItPnBhcm0xLCBieXRlYnVmLCBtaWItPnBhcm0yKTsKKwkJcHJpc20ybWdtdF9ieXRlc3RyMnBzdHIocDJieXRlc3RyLCBwc3RyKTsKKwl9IGVsc2UgeworCQltZW1zZXQoYnl0ZWJ1ZiwgMCwgbWliLT5wYXJtMik7CisJCXByaXNtMm1nbXRfcHN0cjJieXRlc3RyKHAyYnl0ZXN0ciwgcHN0cik7CisJCXJlc3VsdCA9IGhmYTM4NHhfZHJ2cl9zZXRjb25maWcoaHcsIG1pYi0+cGFybTEsIGJ5dGVidWYsIG1pYi0+cGFybTIpOworCX0KKworCURCRkVYSVQ7CisJcmV0dXJuKHJlc3VsdCk7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBwcmlzbTJtaWJfYnl0ZWFyZWEycHN0cgorKgorKiBHZXQvc2V0IHBzdHIgZGF0YSB0by9mcm9tIGEgYnl0ZSBhcmVhLgorKgorKiBNSUIgcmVjb3JkIHBhcmFtZXRlcnM6CisqICAgICAgIHBhcm0xICAgIFByaXNtMiBSSUQgdmFsdWUuCisqICAgICAgIHBhcm0yICAgIE51bWJlciBvZiBieXRlcyBvZiBSSUQgZGF0YS4KKyogICAgICAgcGFybTMgICAgTm90IHVzZWQuCisqCisqIEFyZ3VtZW50czoKKyogICAgICAgbWliICAgICAgTUlCIHJlY29yZC4KKyogICAgICAgaXNnZXQgICAgTUlCR0VUL01JQlNFVCBmbGFnLgorKiAgICAgICB3bGFuZGV2ICB3bGFuIGRldmljZSBzdHJ1Y3R1cmUuCisqICAgICAgIHByaXYgICAgICJwcml2IiBzdHJ1Y3R1cmUuCisqICAgICAgIGh3ICAgICAgICJodyIgc3RydWN0dXJlLgorKiAgICAgICBtc2cgICAgICBNZXNzYWdlIHN0cnVjdHVyZS4KKyogICAgICAgZGF0YSAgICAgRGF0YSBidWZmZXIuCisqCisqIFJldHVybnM6CisqICAgICAgIDAgICAtIFN1Y2Nlc3MuCisqICAgICAgIH4wICAtIEVycm9yLgorKgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbnQgcHJpc20ybWliX2J5dGVhcmVhMnBzdHIoCittaWJyZWNfdCAgICAgICAgICAgICAgICAgICAgICptaWIsCitpbnQgICAgICAgICAgICAgICAgICAgICAgICAgIGlzZ2V0LAord2xhbmRldmljZV90ICAgICAgICAgICAgICAgICAqd2xhbmRldiwKK2hmYTM4NHhfdCAgICAgICAgICAgICAgICAgICAgKmh3LAorcDgwMjExbXNnX2RvdDExcmVxX21pYnNldF90ICAqbXNnLAordm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAqZGF0YSkKK3sKKwlpbnQgICAgICAgICAgICByZXN1bHQ7CisJcDgwMjExcHN0cmRfdCAgKnBzdHIgPSAocDgwMjExcHN0cmRfdCopIGRhdGE7CisJVUlOVDggICAgICAgICAgYnl0ZWJ1ZltNSUJfVE1QX01BWExFTl07CisKKwlEQkZFTlRFUjsKKworCWlmIChpc2dldCkgeworCQlyZXN1bHQgPSBoZmEzODR4X2RydnJfZ2V0Y29uZmlnKGh3LCBtaWItPnBhcm0xLCBieXRlYnVmLCBtaWItPnBhcm0yKTsKKwkJcHJpc20ybWdtdF9ieXRlYXJlYTJwc3RyKGJ5dGVidWYsIHBzdHIsCW1pYi0+cGFybTIpOworCX0gZWxzZSB7CisJCW1lbXNldChieXRlYnVmLCAwLCBtaWItPnBhcm0yKTsKKwkJcHJpc20ybWdtdF9wc3RyMmJ5dGVhcmVhKGJ5dGVidWYsIHBzdHIpOworCQlyZXN1bHQgPSBoZmEzODR4X2RydnJfc2V0Y29uZmlnKGh3LCBtaWItPnBhcm0xLCBieXRlYnVmLCBtaWItPnBhcm0yKTsKKwl9CisKKwlEQkZFWElUOworCXJldHVybihyZXN1bHQpOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogcHJpc20ybWliX3VpbnQzMgorKgorKiBHZXQvc2V0IHVpbnQzMiBkYXRhLgorKgorKiBNSUIgcmVjb3JkIHBhcmFtZXRlcnM6CisqICAgICAgIHBhcm0xICAgIFByaXNtMiBSSUQgdmFsdWUuCisqICAgICAgIHBhcm0yICAgIE5vdCB1c2VkLgorKiAgICAgICBwYXJtMyAgICBOb3QgdXNlZC4KKyoKKyogQXJndW1lbnRzOgorKiAgICAgICBtaWIgICAgICBNSUIgcmVjb3JkLgorKiAgICAgICBpc2dldCAgICBNSUJHRVQvTUlCU0VUIGZsYWcuCisqICAgICAgIHdsYW5kZXYgIHdsYW4gZGV2aWNlIHN0cnVjdHVyZS4KKyogICAgICAgcHJpdiAgICAgInByaXYiIHN0cnVjdHVyZS4KKyogICAgICAgaHcgICAgICAgImh3IiBzdHJ1Y3R1cmUuCisqICAgICAgIG1zZyAgICAgIE1lc3NhZ2Ugc3RydWN0dXJlLgorKiAgICAgICBkYXRhICAgICBEYXRhIGJ1ZmZlci4KKyoKKyogUmV0dXJuczoKKyogICAgICAgMCAgIC0gU3VjY2Vzcy4KKyogICAgICAgfjAgIC0gRXJyb3IuCisqCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGludCBwcmlzbTJtaWJfdWludDMyKAorbWlicmVjX3QgICAgICAgICAgICAgICAgICAgICAqbWliLAoraW50ICAgICAgICAgICAgICAgICAgICAgICAgICBpc2dldCwKK3dsYW5kZXZpY2VfdCAgICAgICAgICAgICAgICAgKndsYW5kZXYsCitoZmEzODR4X3QgICAgICAgICAgICAgICAgICAgICpodywKK3A4MDIxMW1zZ19kb3QxMXJlcV9taWJzZXRfdCAgKm1zZywKK3ZvaWQgICAgICAgICAgICAgICAgICAgICAgICAgKmRhdGEpCit7CisJaW50ICAgICByZXN1bHQ7CisJVUlOVDMyICAqdWludDMyID0gKFVJTlQzMiopIGRhdGE7CisJVUlOVDggICBieXRlYnVmW01JQl9UTVBfTUFYTEVOXTsKKwlVSU5UMTYgICp3b3JkYnVmID0gKFVJTlQxNiopIGJ5dGVidWY7CisKKwlEQkZFTlRFUjsKKworCWlmIChpc2dldCkgeworCQlyZXN1bHQgPSBoZmEzODR4X2RydnJfZ2V0Y29uZmlnMTYoaHcsIG1pYi0+cGFybTEsIHdvcmRidWYpOworCQkqdWludDMyID0gKndvcmRidWY7CisJCS8qIFtNU01dIFJlbW92ZWQsIGdldGNvbmZpZzE2IHJldHVybnMgdGhlIHZhbHVlIGluIGhvc3Qgb3JkZXIuCisJCSAqIHByaXNtMm1nbXRfcHJpc20yaW50MnA4MDIxMWludCh3b3JkYnVmLCB1aW50MzIpOworCQkgKi8KKwl9IGVsc2UgeworCQkvKiBbTVNNXSBSZW1vdmVkLCBzZXRjb25maWcxNiBleHBlY3RzIGhvc3Qgb3JkZXIuCisJCSAqIHByaXNtMm1nbXRfcDgwMjExaW50MnByaXNtMmludCh3b3JkYnVmLCB1aW50MzIpOworCQkgKi8KKwkJKndvcmRidWYgPSAqdWludDMyOworCQlyZXN1bHQgPSBoZmEzODR4X2RydnJfc2V0Y29uZmlnMTYoaHcsIG1pYi0+cGFybTEsICp3b3JkYnVmKTsKKwl9CisKKwlEQkZFWElUOworCXJldHVybihyZXN1bHQpOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogcHJpc20ybWliX3VpbnQzMmFycmF5CisqCisqIEdldC9zZXQgYW4gYXJyYXkgb2YgdWludDMyIGRhdGEuCisqCisqIE1JQiByZWNvcmQgcGFyYW1ldGVyczoKKyogICAgICAgcGFybTEgICAgUHJpc20yIFJJRCB2YWx1ZS4KKyogICAgICAgcGFybTIgICAgTnVtYmVyIG9mIGJ5dGVzIG9mIFJJRCBkYXRhLgorKiAgICAgICBwYXJtMyAgICBOb3QgdXNlZC4KKyoKKyogQXJndW1lbnRzOgorKiAgICAgICBtaWIgICAgICBNSUIgcmVjb3JkLgorKiAgICAgICBpc2dldCAgICBNSUJHRVQvTUlCU0VUIGZsYWcuCisqICAgICAgIHdsYW5kZXYgIHdsYW4gZGV2aWNlIHN0cnVjdHVyZS4KKyogICAgICAgcHJpdiAgICAgInByaXYiIHN0cnVjdHVyZS4KKyogICAgICAgaHcgICAgICAgImh3IiBzdHJ1Y3R1cmUuCisqICAgICAgIG1zZyAgICAgIE1lc3NhZ2Ugc3RydWN0dXJlLgorKiAgICAgICBkYXRhICAgICBEYXRhIGJ1ZmZlci4KKyoKKyogUmV0dXJuczoKKyogICAgICAgMCAgIC0gU3VjY2Vzcy4KKyogICAgICAgfjAgIC0gRXJyb3IuCisqCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGludCBwcmlzbTJtaWJfdWludDMyYXJyYXkoCittaWJyZWNfdCAgICAgICAgICAgICAgICAgICAgICptaWIsCitpbnQgICAgICAgICAgICAgICAgICAgICAgICAgIGlzZ2V0LAord2xhbmRldmljZV90ICAgICAgICAgICAgICAgICAqd2xhbmRldiwKK2hmYTM4NHhfdCAgICAgICAgICAgICAgICAgICAgKmh3LAorcDgwMjExbXNnX2RvdDExcmVxX21pYnNldF90ICAqbXNnLAordm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAqZGF0YSkKK3sKKwlpbnQgICAgIHJlc3VsdDsKKwlVSU5UMzIgICp1aW50MzIgPSAoVUlOVDMyICopIGRhdGE7CisJVUlOVDggICBieXRlYnVmW01JQl9UTVBfTUFYTEVOXTsKKwlVSU5UMTYgICp3b3JkYnVmID0gKFVJTlQxNiopIGJ5dGVidWY7CisJaW50ICAgICBpLCBjbnQ7CisKKwlEQkZFTlRFUjsKKworCWNudCA9IG1pYi0+cGFybTIgLyBzaXplb2YoVUlOVDE2KTsKKworCWlmIChpc2dldCkgeworCQlyZXN1bHQgPSBoZmEzODR4X2RydnJfZ2V0Y29uZmlnKGh3LCBtaWItPnBhcm0xLCB3b3JkYnVmLCBtaWItPnBhcm0yKTsKKwkJZm9yIChpID0gMDsgaSA8IGNudDsgaSsrKQorCQkJcHJpc20ybWdtdF9wcmlzbTJpbnQycDgwMjExaW50KHdvcmRidWYraSwgdWludDMyK2kpOworCX0gZWxzZSB7CisJCWZvciAoaSA9IDA7IGkgPCBjbnQ7IGkrKykKKwkJCXByaXNtMm1nbXRfcDgwMjExaW50MnByaXNtMmludCh3b3JkYnVmK2ksIHVpbnQzMitpKTsKKwkJcmVzdWx0ID0gaGZhMzg0eF9kcnZyX3NldGNvbmZpZyhodywgbWliLT5wYXJtMSwgd29yZGJ1ZiwgbWliLT5wYXJtMik7CisJCX0KKworCURCRkVYSVQ7CisJcmV0dXJuKHJlc3VsdCk7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBwcmlzbTJtaWJfdWludDMyb2Zmc2V0CisqCisqIEdldC9zZXQgYSBzaW5nbGUgZWxlbWVudCBpbiBhbiBhcnJheSBvZiB1aW50MzIgZGF0YS4KKyoKKyogTUlCIHJlY29yZCBwYXJhbWV0ZXJzOgorKiAgICAgICBwYXJtMSAgICBQcmlzbTIgUklEIHZhbHVlLgorKiAgICAgICBwYXJtMiAgICBOdW1iZXIgb2YgYnl0ZXMgb2YgUklEIGRhdGEuCisqICAgICAgIHBhcm0zICAgIEVsZW1lbnQgaW5kZXguCisqCisqIEFyZ3VtZW50czoKKyogICAgICAgbWliICAgICAgTUlCIHJlY29yZC4KKyogICAgICAgaXNnZXQgICAgTUlCR0VUL01JQlNFVCBmbGFnLgorKiAgICAgICB3bGFuZGV2ICB3bGFuIGRldmljZSBzdHJ1Y3R1cmUuCisqICAgICAgIHByaXYgICAgICJwcml2IiBzdHJ1Y3R1cmUuCisqICAgICAgIGh3ICAgICAgICJodyIgc3RydWN0dXJlLgorKiAgICAgICBtc2cgICAgICBNZXNzYWdlIHN0cnVjdHVyZS4KKyogICAgICAgZGF0YSAgICAgRGF0YSBidWZmZXIuCisqCisqIFJldHVybnM6CisqICAgICAgIDAgICAtIFN1Y2Nlc3MuCisqICAgICAgIH4wICAtIEVycm9yLgorKgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbnQgcHJpc20ybWliX3VpbnQzMm9mZnNldCgKK21pYnJlY190ICAgICAgICAgICAgICAgICAgICAgKm1pYiwKK2ludCAgICAgICAgICAgICAgICAgICAgICAgICAgaXNnZXQsCit3bGFuZGV2aWNlX3QgICAgICAgICAgICAgICAgICp3bGFuZGV2LAoraGZhMzg0eF90ICAgICAgICAgICAgICAgICAgICAqaHcsCitwODAyMTFtc2dfZG90MTFyZXFfbWlic2V0X3QgICptc2csCit2b2lkICAgICAgICAgICAgICAgICAgICAgICAgICpkYXRhKQoreworCWludCAgICAgcmVzdWx0OworCVVJTlQzMiAgKnVpbnQzMiA9IChVSU5UMzIqKSBkYXRhOworCVVJTlQ4ICAgYnl0ZWJ1ZltNSUJfVE1QX01BWExFTl07CisJVUlOVDE2ICAqd29yZGJ1ZiA9IChVSU5UMTYqKSBieXRlYnVmOworCVVJTlQxNiAgY250OworCisJREJGRU5URVI7CisKKwljbnQgPSBtaWItPnBhcm0yIC8gc2l6ZW9mKFVJTlQxNik7CisKKwlyZXN1bHQgPSBoZmEzODR4X2RydnJfZ2V0Y29uZmlnKGh3LCBtaWItPnBhcm0xLCB3b3JkYnVmLCBtaWItPnBhcm0yKTsKKwlpZiAocmVzdWx0ID09IDApIHsKKwkJaWYgKGlzZ2V0KSB7CisJCQlpZiAobWliLT5wYXJtMyA8IGNudCkKKwkJCQlwcmlzbTJtZ210X3ByaXNtMmludDJwODAyMTFpbnQod29yZGJ1ZittaWItPnBhcm0zLCB1aW50MzIpOworCQkJZWxzZQorCQkJCSp1aW50MzIgPSAwOworCQl9IGVsc2UgeworCQkJaWYgKG1pYi0+cGFybTMgPCBjbnQpIHsKKwkJCQlwcmlzbTJtZ210X3A4MDIxMWludDJwcmlzbTJpbnQod29yZGJ1ZittaWItPnBhcm0zLCB1aW50MzIpOworCQkJCXJlc3VsdCA9IGhmYTM4NHhfZHJ2cl9zZXRjb25maWcoaHcsIG1pYi0+cGFybTEsIHdvcmRidWYsIG1pYi0+cGFybTIpOworCQkJfQorCQl9CisJfQorCisJREJGRVhJVDsKKwlyZXR1cm4ocmVzdWx0KTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIHByaXNtMm1pYl90cnV0aAorKgorKiBHZXQvc2V0IHRydXRoIGRhdGEuCisqCisqIE1JQiByZWNvcmQgcGFyYW1ldGVyczoKKyogICAgICAgcGFybTEgICAgUHJpc20yIFJJRCB2YWx1ZS4KKyogICAgICAgcGFybTIgICAgTm90IHVzZWQuCisqICAgICAgIHBhcm0zICAgIE5vdCB1c2VkLgorKgorKiBBcmd1bWVudHM6CisqICAgICAgIG1pYiAgICAgIE1JQiByZWNvcmQuCisqICAgICAgIGlzZ2V0ICAgIE1JQkdFVC9NSUJTRVQgZmxhZy4KKyogICAgICAgd2xhbmRldiAgd2xhbiBkZXZpY2Ugc3RydWN0dXJlLgorKiAgICAgICBwcml2ICAgICAicHJpdiIgc3RydWN0dXJlLgorKiAgICAgICBodyAgICAgICAiaHciIHN0cnVjdHVyZS4KKyogICAgICAgbXNnICAgICAgTWVzc2FnZSBzdHJ1Y3R1cmUuCisqICAgICAgIGRhdGEgICAgIERhdGEgYnVmZmVyLgorKgorKiBSZXR1cm5zOgorKiAgICAgICAwICAgLSBTdWNjZXNzLgorKiAgICAgICB+MCAgLSBFcnJvci4KKyoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW50IHByaXNtMm1pYl90cnV0aCgKK21pYnJlY190ICAgICAgICAgICAgICAgICAgICAgKm1pYiwKK2ludCAgICAgICAgICAgICAgICAgICAgICAgICAgaXNnZXQsCit3bGFuZGV2aWNlX3QgICAgICAgICAgICAgICAgICp3bGFuZGV2LAoraGZhMzg0eF90ICAgICAgICAgICAgICAgICAgICAqaHcsCitwODAyMTFtc2dfZG90MTFyZXFfbWlic2V0X3QgICptc2csCit2b2lkICAgICAgICAgICAgICAgICAgICAgICAgICpkYXRhKQoreworCWludCAgICAgcmVzdWx0OworCVVJTlQzMiAgKnVpbnQzMiA9IChVSU5UMzIqKSBkYXRhOworCVVJTlQ4ICAgYnl0ZWJ1ZltNSUJfVE1QX01BWExFTl07CisJVUlOVDE2ICAqd29yZGJ1ZiA9IChVSU5UMTYqKSBieXRlYnVmOworCisJREJGRU5URVI7CisKKwlpZiAoaXNnZXQpIHsKKwkJcmVzdWx0ID0gaGZhMzg0eF9kcnZyX2dldGNvbmZpZzE2KGh3LCBtaWItPnBhcm0xLCB3b3JkYnVmKTsKKwkJKnVpbnQzMiA9ICgqd29yZGJ1ZikgPworCQkJCVA4MDIxMUVOVU1fdHJ1dGhfdHJ1ZSA6IFA4MDIxMUVOVU1fdHJ1dGhfZmFsc2U7CisJfSBlbHNlIHsKKwkJKndvcmRidWYgPSAoKCp1aW50MzIpID09IFA4MDIxMUVOVU1fdHJ1dGhfdHJ1ZSkgPyAxIDogMDsKKwkJcmVzdWx0ID0gaGZhMzg0eF9kcnZyX3NldGNvbmZpZzE2KGh3LCBtaWItPnBhcm0xLCAqd29yZGJ1Zik7CisJfQorCisJREJGRVhJVDsKKwlyZXR1cm4ocmVzdWx0KTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIHByaXNtMm1pYl9mbGFnCisqCisqIEdldC9zZXQgYSBmbGFnLgorKgorKiBNSUIgcmVjb3JkIHBhcmFtZXRlcnM6CisqICAgICAgIHBhcm0xICAgIFByaXNtMiBSSUQgdmFsdWUuCisqICAgICAgIHBhcm0yICAgIEJpdCB0byBnZXQvc2V0LgorKiAgICAgICBwYXJtMyAgICBOb3QgdXNlZC4KKyoKKyogQXJndW1lbnRzOgorKiAgICAgICBtaWIgICAgICBNSUIgcmVjb3JkLgorKiAgICAgICBpc2dldCAgICBNSUJHRVQvTUlCU0VUIGZsYWcuCisqICAgICAgIHdsYW5kZXYgIHdsYW4gZGV2aWNlIHN0cnVjdHVyZS4KKyogICAgICAgcHJpdiAgICAgInByaXYiIHN0cnVjdHVyZS4KKyogICAgICAgaHcgICAgICAgImh3IiBzdHJ1Y3R1cmUuCisqICAgICAgIG1zZyAgICAgIE1lc3NhZ2Ugc3RydWN0dXJlLgorKiAgICAgICBkYXRhICAgICBEYXRhIGJ1ZmZlci4KKyoKKyogUmV0dXJuczoKKyogICAgICAgMCAgIC0gU3VjY2Vzcy4KKyogICAgICAgfjAgIC0gRXJyb3IuCisqCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGludCBwcmlzbTJtaWJfZmxhZygKK21pYnJlY190ICAgICAgICAgICAgICAgICAgICAgKm1pYiwKK2ludCAgICAgICAgICAgICAgICAgICAgICAgICAgaXNnZXQsCit3bGFuZGV2aWNlX3QgICAgICAgICAgICAgICAgICp3bGFuZGV2LAoraGZhMzg0eF90ICAgICAgICAgICAgICAgICAgICAqaHcsCitwODAyMTFtc2dfZG90MTFyZXFfbWlic2V0X3QgICptc2csCit2b2lkICAgICAgICAgICAgICAgICAgICAgICAgICpkYXRhKQoreworCWludCAgICAgcmVzdWx0OworCVVJTlQzMiAgKnVpbnQzMiA9IChVSU5UMzIqKSBkYXRhOworCVVJTlQ4ICAgYnl0ZWJ1ZltNSUJfVE1QX01BWExFTl07CisJVUlOVDE2ICAqd29yZGJ1ZiA9IChVSU5UMTYqKSBieXRlYnVmOworCVVJTlQzMiAgZmxhZ3M7CisKKwlEQkZFTlRFUjsKKworCXJlc3VsdCA9IGhmYTM4NHhfZHJ2cl9nZXRjb25maWcxNihodywgbWliLT5wYXJtMSwgd29yZGJ1Zik7CisJaWYgKHJlc3VsdCA9PSAwKSB7CisJCS8qIFtNU01dIFJlbW92ZWQsIGdldGNvbmZpZzE2IHJldHVybnMgdGhlIHZhbHVlIGluIGhvc3Qgb3JkZXIuCisJCSAqIHByaXNtMm1nbXRfcHJpc20yaW50MnA4MDIxMWludCh3b3JkYnVmLCAmZmxhZ3MpOworCQkgKi8KKwkJZmxhZ3MgPSAqd29yZGJ1ZjsKKwkJaWYgKGlzZ2V0KSB7CisJCQkqdWludDMyID0gKGZsYWdzICYgbWliLT5wYXJtMikgPworCQkJCVA4MDIxMUVOVU1fdHJ1dGhfdHJ1ZSA6IFA4MDIxMUVOVU1fdHJ1dGhfZmFsc2U7CisJCX0gZWxzZSB7CisJCQlpZiAoKCp1aW50MzIpID09IFA4MDIxMUVOVU1fdHJ1dGhfdHJ1ZSkKKwkJCQlmbGFncyB8PSBtaWItPnBhcm0yOworCQkJZWxzZQorCQkJCWZsYWdzICY9IH5taWItPnBhcm0yOworCQkJLyogW01TTV0gUmVtb3ZlZCwgc2V0Y29uZmlnMTYgZXhwZWN0cyBob3N0IG9yZGVyLgorCQkJICogcHJpc20ybWdtdF9wODAyMTFpbnQycHJpc20yaW50KHdvcmRidWYsICZmbGFncyk7CisJCQkgKi8KKwkJCSp3b3JkYnVmID0gZmxhZ3M7CisJCQlyZXN1bHQgPSBoZmEzODR4X2RydnJfc2V0Y29uZmlnMTYoaHcsIG1pYi0+cGFybTEsICp3b3JkYnVmKTsKKwkJfQorCX0KKworCURCRkVYSVQ7CisJcmV0dXJuKHJlc3VsdCk7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBwcmlzbTJtaWJfYXBwY2ZpbmZvZmxhZworKgorKiBHZXQvc2V0IGEgc2luZ2xlIGZsYWcgaW4gdGhlIEFQUENGSU5GTyByZWNvcmQuCisqCisqIE1JQiByZWNvcmQgcGFyYW1ldGVyczoKKyogICAgICAgcGFybTEgICAgQml0IHRvIGdldC9zZXQuCisqICAgICAgIHBhcm0yICAgIE5vdCB1c2VkLgorKiAgICAgICBwYXJtMyAgICBOb3QgdXNlZC4KKyoKKyogQXJndW1lbnRzOgorKiAgICAgICBtaWIgICAgICBNSUIgcmVjb3JkLgorKiAgICAgICBpc2dldCAgICBNSUJHRVQvTUlCU0VUIGZsYWcuCisqICAgICAgIHdsYW5kZXYgIHdsYW4gZGV2aWNlIHN0cnVjdHVyZS4KKyogICAgICAgcHJpdiAgICAgInByaXYiIHN0cnVjdHVyZS4KKyogICAgICAgaHcgICAgICAgImh3IiBzdHJ1Y3R1cmUuCisqICAgICAgIG1zZyAgICAgIE1lc3NhZ2Ugc3RydWN0dXJlLgorKiAgICAgICBkYXRhICAgICBEYXRhIGJ1ZmZlci4KKyoKKyogUmV0dXJuczoKKyogICAgICAgMCAgIC0gU3VjY2Vzcy4KKyogICAgICAgfjAgIC0gRXJyb3IuCisqCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGludCBwcmlzbTJtaWJfYXBwY2ZpbmZvZmxhZygKK21pYnJlY190ICAgICAgICAgICAgICAgICAgICAgKm1pYiwKK2ludCAgICAgICAgICAgICAgICAgICAgICAgICAgaXNnZXQsCit3bGFuZGV2aWNlX3QgICAgICAgICAgICAgICAgICp3bGFuZGV2LAoraGZhMzg0eF90ICAgICAgICAgICAgICAgICAgICAqaHcsCitwODAyMTFtc2dfZG90MTFyZXFfbWlic2V0X3QgICptc2csCit2b2lkICAgICAgICAgICAgICAgICAgICAgICAgICpkYXRhKQoreworCWludCAgICAgcmVzdWx0OworCVVJTlQzMiAgKnVpbnQzMiA9IChVSU5UMzIqKSBkYXRhOworCVVJTlQ4ICAgYnl0ZWJ1ZltNSUJfVE1QX01BWExFTl07CisJVUlOVDE2ICAqd29yZGJ1ZiA9IChVSU5UMTYqKSBieXRlYnVmOworCVVJTlQxNiAgd29yZDsKKworCURCRkVOVEVSOworCisJcmVzdWx0ID0gaGZhMzg0eF9kcnZyX2dldGNvbmZpZyhodywgSEZBMzg0eF9SSURfQ05GQVBQQ0ZJTkZPLAorCQkJCQlieXRlYnVmLCBIRkEzODR4X1JJRF9DTkZBUFBDRklORk9fTEVOKTsKKwlpZiAocmVzdWx0ID09IDApIHsKKwkJaWYgKGlzZ2V0KSB7CisJCQkqdWludDMyID0gKGhmYTM4NHgyaG9zdF8xNih3b3JkYnVmWzNdKSAmIG1pYi0+cGFybTEpID8KKwkJCQlQODAyMTFFTlVNX3RydXRoX3RydWUgOiBQODAyMTFFTlVNX3RydXRoX2ZhbHNlOworCQl9IGVsc2UgeworCQkJd29yZCA9IGhmYTM4NHgyaG9zdF8xNih3b3JkYnVmWzNdKTsKKwkJCXdvcmQgPSAoKCp1aW50MzIpID09IFA4MDIxMUVOVU1fdHJ1dGhfdHJ1ZSkgPworCQkJCSh3b3JkIHwgbWliLT5wYXJtMSkgOiAod29yZCAmIH5taWItPnBhcm0xKTsKKwkJCXdvcmRidWZbM10gPSBob3N0MmhmYTM4NHhfMTYod29yZCk7CisJCQlyZXN1bHQgPSBoZmEzODR4X2RydnJfc2V0Y29uZmlnKGh3LCBIRkEzODR4X1JJRF9DTkZBUFBDRklORk8sCisJCQkJCWJ5dGVidWYsIEhGQTM4NHhfUklEX0NORkFQUENGSU5GT19MRU4pOworCQl9CisJfQorCisJREJGRVhJVDsKKwlyZXR1cm4ocmVzdWx0KTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIHByaXNtMm1pYl9yZWd1bGF0b3J5ZG9tYWlucworKgorKiBHZXQgcmVndWxhdG9yeSBkb21haW4gZGF0YS4KKyoKKyogTUlCIHJlY29yZCBwYXJhbWV0ZXJzOgorKiAgICAgICBwYXJtMSAgICBQcmlzbTIgUklEIHZhbHVlLgorKiAgICAgICBwYXJtMiAgICBOdW1iZXIgb2YgYnl0ZXMgb2YgUklEIGRhdGEuCisqICAgICAgIHBhcm0zICAgIE5vdCB1c2VkLgorKgorKiBBcmd1bWVudHM6CisqICAgICAgIG1pYiAgICAgIE1JQiByZWNvcmQuCisqICAgICAgIGlzZ2V0ICAgIE1JQkdFVC9NSUJTRVQgZmxhZy4KKyogICAgICAgd2xhbmRldiAgd2xhbiBkZXZpY2Ugc3RydWN0dXJlLgorKiAgICAgICBwcml2ICAgICAicHJpdiIgc3RydWN0dXJlLgorKiAgICAgICBodyAgICAgICAiaHciIHN0cnVjdHVyZS4KKyogICAgICAgbXNnICAgICAgTWVzc2FnZSBzdHJ1Y3R1cmUuCisqICAgICAgIGRhdGEgICAgIERhdGEgYnVmZmVyLgorKgorKiBSZXR1cm5zOgorKiAgICAgICAwICAgLSBTdWNjZXNzLgorKiAgICAgICB+MCAgLSBFcnJvci4KKyoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW50IHByaXNtMm1pYl9yZWd1bGF0b3J5ZG9tYWlucygKK21pYnJlY190ICAgICAgICAgICAgICAgICAgICAgKm1pYiwKK2ludCAgICAgICAgICAgICAgICAgICAgICAgICAgaXNnZXQsCit3bGFuZGV2aWNlX3QgICAgICAgICAgICAgICAgICp3bGFuZGV2LAoraGZhMzg0eF90ICAgICAgICAgICAgICAgICAgICAqaHcsCitwODAyMTFtc2dfZG90MTFyZXFfbWlic2V0X3QgICptc2csCit2b2lkICAgICAgICAgICAgICAgICAgICAgICAgICpkYXRhKQoreworCWludCAgICAgICAgICAgIHJlc3VsdDsKKwlVSU5UMzIgICAgICAgICBjbnQ7CisJcDgwMjExcHN0cmRfdCAgKnBzdHIgPSAocDgwMjExcHN0cmRfdCopIGRhdGE7CisJVUlOVDggICAgICAgICAgYnl0ZWJ1ZltNSUJfVE1QX01BWExFTl07CisJVUlOVDE2ICAgICAgICAgKndvcmRidWYgPSAoVUlOVDE2KikgYnl0ZWJ1ZjsKKworCURCRkVOVEVSOworCisJcmVzdWx0ID0gMDsKKworCWlmIChpc2dldCkgeworCQlyZXN1bHQgPSBoZmEzODR4X2RydnJfZ2V0Y29uZmlnKGh3LCBtaWItPnBhcm0xLCB3b3JkYnVmLCBtaWItPnBhcm0yKTsKKwkJcHJpc20ybWdtdF9wcmlzbTJpbnQycDgwMjExaW50KHdvcmRidWYsICZjbnQpOworCQlwc3RyLT5sZW4gPSAoVUlOVDgpIGNudDsKKwkJbWVtY3B5KHBzdHItPmRhdGEsICZ3b3JkYnVmWzFdLCBwc3RyLT5sZW4pOworCX0KKworCURCRkVYSVQ7CisJcmV0dXJuKHJlc3VsdCk7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBwcmlzbTJtaWJfd2VwZGVmYXVsdGtleQorKgorKiBHZXQvc2V0IFdFUCBkZWZhdWx0IGtleXMuCisqCisqIE1JQiByZWNvcmQgcGFyYW1ldGVyczoKKyogICAgICAgcGFybTEgICAgUHJpc20yIFJJRCB2YWx1ZS4KKyogICAgICAgcGFybTIgICAgTnVtYmVyIG9mIGJ5dGVzIG9mIFJJRCBkYXRhLgorKiAgICAgICBwYXJtMyAgICBOb3QgdXNlZC4KKyoKKyogQXJndW1lbnRzOgorKiAgICAgICBtaWIgICAgICBNSUIgcmVjb3JkLgorKiAgICAgICBpc2dldCAgICBNSUJHRVQvTUlCU0VUIGZsYWcuCisqICAgICAgIHdsYW5kZXYgIHdsYW4gZGV2aWNlIHN0cnVjdHVyZS4KKyogICAgICAgcHJpdiAgICAgInByaXYiIHN0cnVjdHVyZS4KKyogICAgICAgaHcgICAgICAgImh3IiBzdHJ1Y3R1cmUuCisqICAgICAgIG1zZyAgICAgIE1lc3NhZ2Ugc3RydWN0dXJlLgorKiAgICAgICBkYXRhICAgICBEYXRhIGJ1ZmZlci4KKyoKKyogUmV0dXJuczoKKyogICAgICAgMCAgIC0gU3VjY2Vzcy4KKyogICAgICAgfjAgIC0gRXJyb3IuCisqCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGludCBwcmlzbTJtaWJfd2VwZGVmYXVsdGtleSgKK21pYnJlY190ICAgICAgICAgICAgICAgICAgICAgKm1pYiwKK2ludCAgICAgICAgICAgICAgICAgICAgICAgICAgaXNnZXQsCit3bGFuZGV2aWNlX3QgICAgICAgICAgICAgICAgICp3bGFuZGV2LAoraGZhMzg0eF90ICAgICAgICAgICAgICAgICAgICAqaHcsCitwODAyMTFtc2dfZG90MTFyZXFfbWlic2V0X3QgICptc2csCit2b2lkICAgICAgICAgICAgICAgICAgICAgICAgICpkYXRhKQoreworCWludCAgICAgICAgICAgIHJlc3VsdDsKKwlwODAyMTFwc3RyZF90ICAqcHN0ciA9IChwODAyMTFwc3RyZF90KikgZGF0YTsKKwlVSU5UOCAgICAgICAgICBieXRlYnVmW01JQl9UTVBfTUFYTEVOXTsKKwlVSU5UMTYgICAgICAgICBsZW47CisKKwlEQkZFTlRFUjsKKworCWlmIChpc2dldCkgeworCQlyZXN1bHQgPSAwOyAgICAvKiBTaG91bGQgbmV2ZXIgaGFwcGVuLiAqLworCX0gZWxzZSB7CisJCWxlbiA9IChwc3RyLT5sZW4gPiA1KSA/IEhGQTM4NHhfUklEX0NORldFUDEyOERFRkFVTFRLRVlfTEVOIDoKKwkJCQkJSEZBMzg0eF9SSURfQ05GV0VQREVGQVVMVEtFWV9MRU47CisJCW1lbXNldChieXRlYnVmLCAwLCBsZW4pOworCQlwcmlzbTJtZ210X3BzdHIyYnl0ZWFyZWEoYnl0ZWJ1ZiwgcHN0cik7CisJCXJlc3VsdCA9IGhmYTM4NHhfZHJ2cl9zZXRjb25maWcoaHcsIG1pYi0+cGFybTEsIGJ5dGVidWYsIGxlbik7CisJfQorCisJREJGRVhJVDsKKwlyZXR1cm4ocmVzdWx0KTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIHByaXNtMm1pYl9wb3dlcm1hbmFnZW1lbnQKKyoKKyogR2V0L3NldCA4MDIuMTEgcG93ZXIgbWFuYWdlbWVudCB2YWx1ZS4gIE5vdGUgdGhhdCB0aGlzIGlzIGRlZmluZWQgZGlmZmVyZW50bHkKKyogYnkgODAyLjExIGFuZCBQcmlzbTI6CisqCisqICAgICAgIE1lYW5pbmcgICAgIDgwMi4xMSAgICAgICBQcmlzbTIKKyogICAgICAgIGFjdGl2ZSAgICAgICAxICAgICAgICAgICBmYWxzZQorKiAgICAgIHBvd2Vyc2F2ZSAgICAgIDIgICAgICAgICAgIHRydWUKKyoKKyogTUlCIHJlY29yZCBwYXJhbWV0ZXJzOgorKiAgICAgICBwYXJtMSAgICBQcmlzbTIgUklEIHZhbHVlLgorKiAgICAgICBwYXJtMiAgICBOb3QgdXNlZC4KKyogICAgICAgcGFybTMgICAgTm90IHVzZWQuCisqCisqIEFyZ3VtZW50czoKKyogICAgICAgbWliICAgICAgTUlCIHJlY29yZC4KKyogICAgICAgaXNnZXQgICAgTUlCR0VUL01JQlNFVCBmbGFnLgorKiAgICAgICB3bGFuZGV2ICB3bGFuIGRldmljZSBzdHJ1Y3R1cmUuCisqICAgICAgIHByaXYgICAgICJwcml2IiBzdHJ1Y3R1cmUuCisqICAgICAgIGh3ICAgICAgICJodyIgc3RydWN0dXJlLgorKiAgICAgICBtc2cgICAgICBNZXNzYWdlIHN0cnVjdHVyZS4KKyogICAgICAgZGF0YSAgICAgRGF0YSBidWZmZXIuCisqCisqIFJldHVybnM6CisqICAgICAgIDAgICAtIFN1Y2Nlc3MuCisqICAgICAgIH4wICAtIEVycm9yLgorKgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbnQgcHJpc20ybWliX3Bvd2VybWFuYWdlbWVudCgKK21pYnJlY190ICAgICAgICAgICAgICAgICAgICAgKm1pYiwKK2ludCAgICAgICAgICAgICAgICAgICAgICAgICAgaXNnZXQsCit3bGFuZGV2aWNlX3QgICAgICAgICAgICAgICAgICp3bGFuZGV2LAoraGZhMzg0eF90ICAgICAgICAgICAgICAgICAgICAqaHcsCitwODAyMTFtc2dfZG90MTFyZXFfbWlic2V0X3QgICptc2csCit2b2lkICAgICAgICAgICAgICAgICAgICAgICAgICpkYXRhKQoreworCWludCAgICAgcmVzdWx0OworCVVJTlQzMiAgKnVpbnQzMiA9IChVSU5UMzIqKSBkYXRhOworCVVJTlQzMiAgdmFsdWU7CisKKwlEQkZFTlRFUjsKKworCWlmIChpc2dldCkgeworCQlyZXN1bHQgPSBwcmlzbTJtaWJfdWludDMyKG1pYiwgaXNnZXQsIHdsYW5kZXYsIGh3LCBtc2csICZ2YWx1ZSk7CisJCSp1aW50MzIgPSAodmFsdWUgPT0gMCkgPyAxIDogMjsKKwl9IGVsc2UgeworCQl2YWx1ZSA9ICgoKnVpbnQzMikgPT0gMSkgPyAwIDogMTsKKwkJcmVzdWx0ID0gcHJpc20ybWliX3VpbnQzMihtaWIsIGlzZ2V0LCB3bGFuZGV2LCBodywgbXNnLCAmdmFsdWUpOworCX0KKworCURCRkVYSVQ7CisJcmV0dXJuKHJlc3VsdCk7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBwcmlzbTJtaWJfcHJlYW1ibGUKKyoKKyogR2V0L3NldCBQcmlzbTIgc2hvcnQgcHJlYW1ibGUKKyoKKyogTUlCIHJlY29yZCBwYXJhbWV0ZXJzOgorKiAgICAgICBwYXJtMSAgICBQcmlzbTIgUklEIHZhbHVlLgorKiAgICAgICBwYXJtMiAgICBOb3QgdXNlZC4KKyogICAgICAgcGFybTMgICAgTm90IHVzZWQuCisqCisqIEFyZ3VtZW50czoKKyogICAgICAgbWliICAgICAgTUlCIHJlY29yZC4KKyogICAgICAgaXNnZXQgICAgTUlCR0VUL01JQlNFVCBmbGFnLgorKiAgICAgICB3bGFuZGV2ICB3bGFuIGRldmljZSBzdHJ1Y3R1cmUuCisqICAgICAgIHByaXYgICAgICJwcml2IiBzdHJ1Y3R1cmUuCisqICAgICAgIGh3ICAgICAgICJodyIgc3RydWN0dXJlLgorKiAgICAgICBtc2cgICAgICBNZXNzYWdlIHN0cnVjdHVyZS4KKyogICAgICAgZGF0YSAgICAgRGF0YSBidWZmZXIuCisqCisqIFJldHVybnM6CisqICAgICAgIDAgICAtIFN1Y2Nlc3MuCisqICAgICAgIH4wICAtIEVycm9yLgorKgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbnQgcHJpc20ybWliX3ByZWFtYmxlKAorbWlicmVjX3QgICAgICAgICAgICAgICAgICAgICAqbWliLAoraW50ICAgICAgICAgICAgICAgICAgICAgICAgICBpc2dldCwKK3dsYW5kZXZpY2VfdCAgICAgICAgICAgICAgICAgKndsYW5kZXYsCitoZmEzODR4X3QgICAgICAgICAgICAgICAgICAgICpodywKK3A4MDIxMW1zZ19kb3QxMXJlcV9taWJzZXRfdCAgKm1zZywKK3ZvaWQgICAgICAgICAgICAgICAgICAgICAgICAgKmRhdGEpCit7CisJaW50ICAgICByZXN1bHQ7CisJVUlOVDMyICAqdWludDMyID0gKFVJTlQzMiopIGRhdGE7CisJVUlOVDggICBieXRlYnVmW01JQl9UTVBfTUFYTEVOXTsKKwlVSU5UMTYgICp3b3JkYnVmID0gKFVJTlQxNiopIGJ5dGVidWY7CisKKwlEQkZFTlRFUjsKKworCWlmIChpc2dldCkgeworCQlyZXN1bHQgPSBoZmEzODR4X2RydnJfZ2V0Y29uZmlnMTYoaHcsIG1pYi0+cGFybTEsIHdvcmRidWYpOworCQkqdWludDMyID0gKndvcmRidWY7CisJfSBlbHNlIHsKKwkJKndvcmRidWYgPSAqdWludDMyOworCQlyZXN1bHQgPSBoZmEzODR4X2RydnJfc2V0Y29uZmlnMTYoaHcsIG1pYi0+cGFybTEsICp3b3JkYnVmKTsKKwl9CisKKwlEQkZFWElUOworCXJldHVybihyZXN1bHQpOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogcHJpc20ybWliX3ByaXZhY3lpbnZva2VkCisqCisqIEdldC9zZXQgdGhlIGRvdDExUHJpdmFjeUludm9rZWQgdmFsdWUuCisqCisqIE1JQiByZWNvcmQgcGFyYW1ldGVyczoKKyogICAgICAgcGFybTEgICAgUHJpc20yIFJJRCB2YWx1ZS4KKyogICAgICAgcGFybTIgICAgQml0IHZhbHVlIGZvciBQcml2YWN5SW52b2tlZCBmbGFnLgorKiAgICAgICBwYXJtMyAgICBOb3QgdXNlZC4KKyoKKyogQXJndW1lbnRzOgorKiAgICAgICBtaWIgICAgICBNSUIgcmVjb3JkLgorKiAgICAgICBpc2dldCAgICBNSUJHRVQvTUlCU0VUIGZsYWcuCisqICAgICAgIHdsYW5kZXYgIHdsYW4gZGV2aWNlIHN0cnVjdHVyZS4KKyogICAgICAgcHJpdiAgICAgInByaXYiIHN0cnVjdHVyZS4KKyogICAgICAgaHcgICAgICAgImh3IiBzdHJ1Y3R1cmUuCisqICAgICAgIG1zZyAgICAgIE1lc3NhZ2Ugc3RydWN0dXJlLgorKiAgICAgICBkYXRhICAgICBEYXRhIGJ1ZmZlci4KKyoKKyogUmV0dXJuczoKKyogICAgICAgMCAgIC0gU3VjY2Vzcy4KKyogICAgICAgfjAgIC0gRXJyb3IuCisqCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGludCBwcmlzbTJtaWJfcHJpdmFjeWludm9rZWQoCittaWJyZWNfdCAgICAgICAgICAgICAgICAgICAgICptaWIsCitpbnQgICAgICAgICAgICAgICAgICAgICAgICAgIGlzZ2V0LAord2xhbmRldmljZV90ICAgICAgICAgICAgICAgICAqd2xhbmRldiwKK2hmYTM4NHhfdCAgICAgICAgICAgICAgICAgICAgKmh3LAorcDgwMjExbXNnX2RvdDExcmVxX21pYnNldF90ICAqbXNnLAordm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAqZGF0YSkKK3sKKwlpbnQgICAgIHJlc3VsdDsKKworCURCRkVOVEVSOworCisJaWYgKHdsYW5kZXYtPmhvc3R3ZXAgJiBIT1NUV0VQX0RFQ1JZUFQpIHsKKwkJaWYgKHdsYW5kZXYtPmhvc3R3ZXAgJiBIT1NUV0VQX0RFQ1JZUFQpCisJCQltaWItPnBhcm0yIHw9IEhGQTM4NHhfV0VQRkxBR1NfRElTQUJMRV9SWENSWVBUOworCQlpZiAod2xhbmRldi0+aG9zdHdlcCAmIEhPU1RXRVBfRU5DUllQVCkKKwkJCW1pYi0+cGFybTIgfD0gSEZBMzg0eF9XRVBGTEFHU19ESVNBQkxFX1RYQ1JZUFQ7CisJfQorCisJcmVzdWx0ID0gcHJpc20ybWliX2ZsYWcobWliLCBpc2dldCwgd2xhbmRldiwgaHcsIG1zZywgZGF0YSk7CisKKwlEQkZFWElUOworCXJldHVybihyZXN1bHQpOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogcHJpc20ybWliX2V4Y2x1ZGV1bmVuY3J5cHRlZAorKgorKiBHZXQvc2V0IHRoZSBkb3QxMUV4Y2x1ZGVVbmVuY3J5cHRlZCB2YWx1ZS4KKyoKKyogTUlCIHJlY29yZCBwYXJhbWV0ZXJzOgorKiAgICAgICBwYXJtMSAgICBQcmlzbTIgUklEIHZhbHVlLgorKiAgICAgICBwYXJtMiAgICBCaXQgdmFsdWUgZm9yIEV4Y2x1ZGVVbmVuY3J5cHRlZCBmbGFnLgorKiAgICAgICBwYXJtMyAgICBOb3QgdXNlZC4KKyoKKyogQXJndW1lbnRzOgorKiAgICAgICBtaWIgICAgICBNSUIgcmVjb3JkLgorKiAgICAgICBpc2dldCAgICBNSUJHRVQvTUlCU0VUIGZsYWcuCisqICAgICAgIHdsYW5kZXYgIHdsYW4gZGV2aWNlIHN0cnVjdHVyZS4KKyogICAgICAgcHJpdiAgICAgInByaXYiIHN0cnVjdHVyZS4KKyogICAgICAgaHcgICAgICAgImh3IiBzdHJ1Y3R1cmUuCisqICAgICAgIG1zZyAgICAgIE1lc3NhZ2Ugc3RydWN0dXJlLgorKiAgICAgICBkYXRhICAgICBEYXRhIGJ1ZmZlci4KKyoKKyogUmV0dXJuczoKKyogICAgICAgMCAgIC0gU3VjY2Vzcy4KKyogICAgICAgfjAgIC0gRXJyb3IuCisqCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGludCBwcmlzbTJtaWJfZXhjbHVkZXVuZW5jcnlwdGVkKAorbWlicmVjX3QgICAgICAgICAgICAgICAgICAgICAqbWliLAoraW50ICAgICAgICAgICAgICAgICAgICAgICAgICBpc2dldCwKK3dsYW5kZXZpY2VfdCAgICAgICAgICAgICAgICAgKndsYW5kZXYsCitoZmEzODR4X3QgICAgICAgICAgICAgICAgICAgICpodywKK3A4MDIxMW1zZ19kb3QxMXJlcV9taWJzZXRfdCAgKm1zZywKK3ZvaWQgICAgICAgICAgICAgICAgICAgICAgICAgKmRhdGEpCit7CisJaW50ICAgICByZXN1bHQ7CisKKwlEQkZFTlRFUjsKKworCXJlc3VsdCA9IHByaXNtMm1pYl9mbGFnKG1pYiwgaXNnZXQsIHdsYW5kZXYsIGh3LCBtc2csIGRhdGEpOworCisJREJGRVhJVDsKKwlyZXR1cm4ocmVzdWx0KTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIHByaXNtMm1pYl9mcmFnbWVudGF0aW9udGhyZXNob2xkCisqCisqIEdldC9zZXQgdGhlIGZyYWdtZW50YXRpb24gdGhyZXNob2xkLgorKgorKiBNSUIgcmVjb3JkIHBhcmFtZXRlcnM6CisqICAgICAgIHBhcm0xICAgIFByaXNtMiBSSUQgdmFsdWUuCisqICAgICAgIHBhcm0yICAgIE5vdCB1c2VkLgorKiAgICAgICBwYXJtMyAgICBOb3QgdXNlZC4KKyoKKyogQXJndW1lbnRzOgorKiAgICAgICBtaWIgICAgICBNSUIgcmVjb3JkLgorKiAgICAgICBpc2dldCAgICBNSUJHRVQvTUlCU0VUIGZsYWcuCisqICAgICAgIHdsYW5kZXYgIHdsYW4gZGV2aWNlIHN0cnVjdHVyZS4KKyogICAgICAgcHJpdiAgICAgInByaXYiIHN0cnVjdHVyZS4KKyogICAgICAgaHcgICAgICAgImh3IiBzdHJ1Y3R1cmUuCisqICAgICAgIG1zZyAgICAgIE1lc3NhZ2Ugc3RydWN0dXJlLgorKiAgICAgICBkYXRhICAgICBEYXRhIGJ1ZmZlci4KKyoKKyogUmV0dXJuczoKKyogICAgICAgMCAgIC0gU3VjY2Vzcy4KKyogICAgICAgfjAgIC0gRXJyb3IuCisqCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGludCBwcmlzbTJtaWJfZnJhZ21lbnRhdGlvbnRocmVzaG9sZCgKK21pYnJlY190ICAgICAgICAgICAgICAgICAgICAgKm1pYiwKK2ludCAgICAgICAgICAgICAgICAgICAgICAgICAgaXNnZXQsCit3bGFuZGV2aWNlX3QgICAgICAgICAgICAgICAgICp3bGFuZGV2LAoraGZhMzg0eF90ICAgICAgICAgICAgICAgICAgICAqaHcsCitwODAyMTFtc2dfZG90MTFyZXFfbWlic2V0X3QgICptc2csCit2b2lkICAgICAgICAgICAgICAgICAgICAgICAgICpkYXRhKQoreworCWludCAgICAgcmVzdWx0OworCVVJTlQzMiAgKnVpbnQzMiA9IChVSU5UMzIqKSBkYXRhOworCisJREJGRU5URVI7CisKKwlpZiAoIWlzZ2V0KQorCQlpZiAoKCp1aW50MzIpICUgMikgeworCQkJV0xBTl9MT0dfV0FSTklORygiQXR0ZW1wdCB0byBzZXQgb2RkIG51bWJlciAiCisJCQkJCSAgIkZyYWdtZW50YXRpb25UaHJlc2hvbGRcbiIpOworCQkJbXNnLT5yZXN1bHRjb2RlLmRhdGEgPSBQODAyMTFFTlVNX3Jlc3VsdGNvZGVfbm90X3N1cHBvcnRlZDsKKwkJCXJldHVybigwKTsKKwkJfQorCisJcmVzdWx0ID0gcHJpc20ybWliX3VpbnQzMihtaWIsIGlzZ2V0LCB3bGFuZGV2LCBodywgbXNnLCBkYXRhKTsKKworCURCRkVYSVQ7CisJcmV0dXJuKHJlc3VsdCk7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBwcmlzbTJtaWJfb3BlcmF0aW9uYWxyYXRlc2V0CisqCisqIEdldC9zZXQgdGhlIG9wZXJhdGlvbmFsIHJhdGUgc2V0LgorKgorKiBNSUIgcmVjb3JkIHBhcmFtZXRlcnM6CisqICAgICAgIHBhcm0xICAgIFByaXNtMiBSSUQgdmFsdWUuCisqICAgICAgIHBhcm0yICAgIE5vdCB1c2VkLgorKiAgICAgICBwYXJtMyAgICBOb3QgdXNlZC4KKyoKKyogQXJndW1lbnRzOgorKiAgICAgICBtaWIgICAgICBNSUIgcmVjb3JkLgorKiAgICAgICBpc2dldCAgICBNSUJHRVQvTUlCU0VUIGZsYWcuCisqICAgICAgIHdsYW5kZXYgIHdsYW4gZGV2aWNlIHN0cnVjdHVyZS4KKyogICAgICAgcHJpdiAgICAgInByaXYiIHN0cnVjdHVyZS4KKyogICAgICAgaHcgICAgICAgImh3IiBzdHJ1Y3R1cmUuCisqICAgICAgIG1zZyAgICAgIE1lc3NhZ2Ugc3RydWN0dXJlLgorKiAgICAgICBkYXRhICAgICBEYXRhIGJ1ZmZlci4KKyoKKyogUmV0dXJuczoKKyogICAgICAgMCAgIC0gU3VjY2Vzcy4KKyogICAgICAgfjAgIC0gRXJyb3IuCisqCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGludCBwcmlzbTJtaWJfb3BlcmF0aW9uYWxyYXRlc2V0KAorbWlicmVjX3QgICAgICAgICAgICAgICAgICAgICAqbWliLAoraW50ICAgICAgICAgICAgICAgICAgICAgICAgICBpc2dldCwKK3dsYW5kZXZpY2VfdCAgICAgICAgICAgICAgICAgKndsYW5kZXYsCitoZmEzODR4X3QgICAgICAgICAgICAgICAgICAgICpodywKK3A4MDIxMW1zZ19kb3QxMXJlcV9taWJzZXRfdCAgKm1zZywKK3ZvaWQgICAgICAgICAgICAgICAgICAgICAgICAgKmRhdGEpCit7CisJaW50ICAgICAgICAgICAgcmVzdWx0OworCXA4MDIxMXBzdHJkX3QgICpwc3RyID0gKHA4MDIxMXBzdHJkX3QgKikgZGF0YTsKKwlVSU5UOCAgICAgICAgICBieXRlYnVmW01JQl9UTVBfTUFYTEVOXTsKKwlVSU5UMTYgICAgICAgICAqd29yZGJ1ZiA9IChVSU5UMTYqKSBieXRlYnVmOworCisJREJGRU5URVI7CisKKwlpZiAoaXNnZXQpIHsKKwkJcmVzdWx0ID0gaGZhMzg0eF9kcnZyX2dldGNvbmZpZzE2KGh3LCBtaWItPnBhcm0xLCB3b3JkYnVmKTsKKwkJcHJpc20ybWdtdF9nZXRfb3ByYXRlc2V0KHdvcmRidWYsIHBzdHIpOworCX0gZWxzZSB7CisJCXByaXNtMm1nbXRfc2V0X29wcmF0ZXNldCh3b3JkYnVmLCBwc3RyKTsKKwkJcmVzdWx0ID0gaGZhMzg0eF9kcnZyX3NldGNvbmZpZzE2KGh3LCBtaWItPnBhcm0xLCAqd29yZGJ1Zik7CisJCXJlc3VsdCA9IGhmYTM4NHhfZHJ2cl9zZXRjb25maWcxNihodywgSEZBMzg0eF9SSURfQ05GU1VQUFJBVEVTLCAqd29yZGJ1Zik7CisJfQorCisJREJGRVhJVDsKKwlyZXR1cm4ocmVzdWx0KTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIHByaXNtMm1pYl9ncm91cGFkZHJlc3MKKyoKKyogR2V0L3NldCB0aGUgZG90MTFHcm91cEFkZHJlc3Nlc1RhYmxlLgorKgorKiBNSUIgcmVjb3JkIHBhcmFtZXRlcnM6CisqICAgICAgIHBhcm0xICAgIE5vdCB1c2VkLgorKiAgICAgICBwYXJtMiAgICBOb3QgdXNlZC4KKyogICAgICAgcGFybTMgICAgTm90IHVzZWQuCisqCisqIEFyZ3VtZW50czoKKyogICAgICAgbWliICAgICAgTUlCIHJlY29yZC4KKyogICAgICAgaXNnZXQgICAgTUlCR0VUL01JQlNFVCBmbGFnLgorKiAgICAgICB3bGFuZGV2ICB3bGFuIGRldmljZSBzdHJ1Y3R1cmUuCisqICAgICAgIHByaXYgICAgICJwcml2IiBzdHJ1Y3R1cmUuCisqICAgICAgIGh3ICAgICAgICJodyIgc3RydWN0dXJlLgorKiAgICAgICBtc2cgICAgICBNZXNzYWdlIHN0cnVjdHVyZS4KKyogICAgICAgZGF0YSAgICAgRGF0YSBidWZmZXIuCisqCisqIFJldHVybnM6CisqICAgICAgIDAgICAtIFN1Y2Nlc3MuCisqICAgICAgIH4wICAtIEVycm9yLgorKgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbnQgcHJpc20ybWliX2dyb3VwYWRkcmVzcygKK21pYnJlY190ICAgICAgICAgICAgICAgICAgICAgKm1pYiwKK2ludCAgICAgICAgICAgICAgICAgICAgICAgICAgaXNnZXQsCit3bGFuZGV2aWNlX3QgICAgICAgICAgICAgICAgICp3bGFuZGV2LAoraGZhMzg0eF90ICAgICAgICAgICAgICAgICAgICAqaHcsCitwODAyMTFtc2dfZG90MTFyZXFfbWlic2V0X3QgICptc2csCit2b2lkICAgICAgICAgICAgICAgICAgICAgICAgICpkYXRhKQoreworCWludCAgICAgICAgICAgIHJlc3VsdDsKKwlwODAyMTFwc3RyZF90ICAqcHN0ciA9IChwODAyMTFwc3RyZF90ICopIGRhdGE7CisJVUlOVDggICAgICAgICAgYnl0ZWJ1ZltNSUJfVE1QX01BWExFTl07CisJVUlOVDE2ICAgICAgICAgbGVuOworCisJREJGRU5URVI7CisKKwkvKiBUT0RPOiBmaXggdGhpcy4gIGYvdyBkb2Vzbid0IHN1cHBvcnQgbWNhc3QgZmlsdGVycyAqLworCisJaWYgKGlzZ2V0KSB7CisJCXByaXNtMm1nbXRfZ2V0X2dycGFkZHIobWliLT5kaWQsIHBzdHIsIGh3KTsKKwkJcmV0dXJuKDApOworCX0KKworCXJlc3VsdCA9IHByaXNtMm1nbXRfc2V0X2dycGFkZHIobWliLT5kaWQsIGJ5dGVidWYsIHBzdHIsIGh3KTsKKwlpZiAocmVzdWx0ICE9IDApIHsKKwkJbXNnLT5yZXN1bHRjb2RlLmRhdGEgPSBQODAyMTFFTlVNX3Jlc3VsdGNvZGVfbm90X3N1cHBvcnRlZDsKKwkJcmV0dXJuKHJlc3VsdCk7CisJfQorCisJaWYgKGh3LT5kb3QxMV9ncnBjbnQgPD0gTUFYX1BSSVNNMl9HUlBfQUREUikgeworCQlsZW4gPSBody0+ZG90MTFfZ3JwY250ICogV0xBTl9BRERSX0xFTjsKKwkJbWVtY3B5KGJ5dGVidWYsIGh3LT5kb3QxMV9ncnBfYWRkclswXSwgbGVuKTsKKwkJcmVzdWx0ID0gaGZhMzg0eF9kcnZyX3NldGNvbmZpZyhodywgSEZBMzg0eF9SSURfR1JPVVBBRERSLCBieXRlYnVmLCBsZW4pOworCisJCS8qCisJCSoqIFR1cm4gb2ZmIHByb21pc2N1b3VzIG1vZGUgaWYgY291bnQgaXMgZXF1YWwgdG8gTUFYLiAgV2UgbWF5CisJCSoqIGhhdmUgYmVlbiBhdCBhIGhpZ2hlciBjb3VudCBpbiBwcm9taXNjdW91cyBtb2RlIGFuZCBuZWVkIHRvCisJCSoqIHR1cm4gaXQgb2ZmLgorCQkqLworCisJCS8qIGJ1dCBvbmx5IGlmIHdlJ3JlIG5vdCBhbHJlYWR5IGluIHByb21pc2MgbW9kZS4gOikgKi8KKwkJaWYgKChody0+ZG90MTFfZ3JwY250ID09IE1BWF9QUklTTTJfR1JQX0FERFIpICYmCisJCSAgICAhKCB3bGFuZGV2LT5uZXRkZXYtPmZsYWdzICYgSUZGX1BST01JU0MpKSB7CisJCQlyZXN1bHQgPSBoZmEzODR4X2RydnJfc2V0Y29uZmlnMTYoaHcsCisJCQkJCSAgICAgSEZBMzg0eF9SSURfUFJPTUlTQ01PREUsIDApOworCQl9CisJfSBlbHNlIHsKKworCQkvKgorCQkqKiBDbGVhciBncm91cCBhZGRyZXNzZXMgaW4gY2FyZCBhbmQgc2V0IHRvIHByb21pc2N1b3VzIG1vZGUuCisJCSovCisKKwkJbWVtc2V0KGJ5dGVidWYsIDAsIHNpemVvZihieXRlYnVmKSk7CisJCXJlc3VsdCA9IGhmYTM4NHhfZHJ2cl9zZXRjb25maWcoaHcsIEhGQTM4NHhfUklEX0dST1VQQUREUiwKKwkJCQkJCWJ5dGVidWYsIDApOworCQlpZiAocmVzdWx0ID09IDApIHsKKwkJCXJlc3VsdCA9IGhmYTM4NHhfZHJ2cl9zZXRjb25maWcxNihodywKKwkJCQkJSEZBMzg0eF9SSURfUFJPTUlTQ01PREUsIDEpOworCQl9CisJfQorCisJREJGRVhJVDsKKwlyZXR1cm4ocmVzdWx0KTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIHByaXNtMm1pYl9md2lkCisqCisqIEdldCB0aGUgZmlybXdhcmUgSUQuCisqCisqIE1JQiByZWNvcmQgcGFyYW1ldGVyczoKKyogICAgICAgcGFybTEgICAgTm90IHVzZWQuCisqICAgICAgIHBhcm0yICAgIE5vdCB1c2VkLgorKiAgICAgICBwYXJtMyAgICBOb3QgdXNlZC4KKyoKKyogQXJndW1lbnRzOgorKiAgICAgICBtaWIgICAgICBNSUIgcmVjb3JkLgorKiAgICAgICBpc2dldCAgICBNSUJHRVQvTUlCU0VUIGZsYWcuCisqICAgICAgIHdsYW5kZXYgIHdsYW4gZGV2aWNlIHN0cnVjdHVyZS4KKyogICAgICAgcHJpdiAgICAgInByaXYiIHN0cnVjdHVyZS4KKyogICAgICAgaHcgICAgICAgImh3IiBzdHJ1Y3R1cmUuCisqICAgICAgIG1zZyAgICAgIE1lc3NhZ2Ugc3RydWN0dXJlLgorKiAgICAgICBkYXRhICAgICBEYXRhIGJ1ZmZlci4KKyoKKyogUmV0dXJuczoKKyogICAgICAgMCAgIC0gU3VjY2Vzcy4KKyogICAgICAgfjAgIC0gRXJyb3IuCisqCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGludCBwcmlzbTJtaWJfZndpZCgKK21pYnJlY190ICAgICAgICAgICAgICAgICAgICAgKm1pYiwKK2ludCAgICAgICAgICAgICAgICAgICAgICAgICAgaXNnZXQsCit3bGFuZGV2aWNlX3QgICAgICAgICAgICAgICAgICp3bGFuZGV2LAoraGZhMzg0eF90ICAgICAgICAgICAgICAgICAgICAqaHcsCitwODAyMTFtc2dfZG90MTFyZXFfbWlic2V0X3QgICptc2csCit2b2lkICAgICAgICAgICAgICAgICAgICAgICAgICpkYXRhKQoreworCWludCAgICAgICAgICAgICByZXN1bHQ7CisJcDgwMjExcHN0cmRfdCAgICpwc3RyID0gKHA4MDIxMXBzdHJkX3QgKikgZGF0YTsKKwloZmEzODR4X0ZXSURfdCAgZndpZDsKKworCURCRkVOVEVSOworCisJaWYgKGlzZ2V0KSB7CisJCXJlc3VsdCA9IGhmYTM4NHhfZHJ2cl9nZXRjb25maWcoaHcsIEhGQTM4NHhfUklEX0ZXSUQsCisJCQkJCQkmZndpZCwgSEZBMzg0eF9SSURfRldJRF9MRU4pOworCQlpZiAobWliLT5kaWQgPT0gRElEbWliX3AyX3AyTklDX3AyUHJpbWFyeUZXSUQpIHsKKwkJCWZ3aWQucHJpbWFyeVtIRkEzODR4X0ZXSURfTEVOIC0gMV0gPSAnXDAnOworCQkJcHN0ci0+bGVuID0gc3RybGVuKGZ3aWQucHJpbWFyeSk7CisJCQltZW1jcHkocHN0ci0+ZGF0YSwgZndpZC5wcmltYXJ5LCBwc3RyLT5sZW4pOworCQl9IGVsc2UgeworCQkJZndpZC5zZWNvbmRhcnlbSEZBMzg0eF9GV0lEX0xFTiAtIDFdID0gJ1wwJzsKKwkJCXBzdHItPmxlbiA9IHN0cmxlbihmd2lkLnNlY29uZGFyeSk7CisJCQltZW1jcHkocHN0ci0+ZGF0YSwgZndpZC5zZWNvbmRhcnksIHBzdHItPmxlbik7CisJCX0KKwl9IGVsc2UKKwkJcmVzdWx0ID0gMDsgICAgIC8qIFNob3VsZCBuZXZlciBoYXBwZW4uICovCisKKwlEQkZFWElUOworCXJldHVybihyZXN1bHQpOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogcHJpc20ybWliX2F1dGhhbGcKKyoKKyogR2V0IHZhbHVlcyBmcm9tIHRoZSBBdWh0ZW50aWNhdGlvbkFsZ29yaXRobXNUYWJsZS4KKyoKKyogTUlCIHJlY29yZCBwYXJhbWV0ZXJzOgorKiAgICAgICBwYXJtMSAgICBUYWJsZSBpbmRleCAoMS02KS4KKyogICAgICAgcGFybTIgICAgTm90IHVzZWQuCisqICAgICAgIHBhcm0zICAgIE5vdCB1c2VkLgorKgorKiBBcmd1bWVudHM6CisqICAgICAgIG1pYiAgICAgIE1JQiByZWNvcmQuCisqICAgICAgIGlzZ2V0ICAgIE1JQkdFVC9NSUJTRVQgZmxhZy4KKyogICAgICAgd2xhbmRldiAgd2xhbiBkZXZpY2Ugc3RydWN0dXJlLgorKiAgICAgICBwcml2ICAgICAicHJpdiIgc3RydWN0dXJlLgorKiAgICAgICBodyAgICAgICAiaHciIHN0cnVjdHVyZS4KKyogICAgICAgbXNnICAgICAgTWVzc2FnZSBzdHJ1Y3R1cmUuCisqICAgICAgIGRhdGEgICAgIERhdGEgYnVmZmVyLgorKgorKiBSZXR1cm5zOgorKiAgICAgICAwICAgLSBTdWNjZXNzLgorKiAgICAgICB+MCAgLSBFcnJvci4KKyoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW50IHByaXNtMm1pYl9hdXRoYWxnKAorbWlicmVjX3QgICAgICAgICAgICAgICAgICAgICAqbWliLAoraW50ICAgICAgICAgICAgICAgICAgICAgICAgICBpc2dldCwKK3dsYW5kZXZpY2VfdCAgICAgICAgICAgICAgICAgKndsYW5kZXYsCitoZmEzODR4X3QgICAgICAgICAgICAgICAgICAgICpodywKK3A4MDIxMW1zZ19kb3QxMXJlcV9taWJzZXRfdCAgKm1zZywKK3ZvaWQgICAgICAgICAgICAgICAgICAgICAgICAgKmRhdGEpCit7CisJVUlOVDMyICAqdWludDMyID0gKFVJTlQzMiopIGRhdGE7CisKKwlEQkZFTlRFUjsKKworCS8qIE1TTTogcGt4IHN1cHBsaWVkIGNvZGUgdGhhdCAgY29kZSBxdWVyaWVzIFJJRCBGRDRELi4uLmJ1dCB0aGUgZi93J3MKKyAgICAgICAgICogIHJlc3VsdHMgYXJlIGJvZ3VzLiBUaGVyZWZvcmUsIHdlIGhhdmUgdG8gc2ltdWxhdGUgdGhlIGFwcHJvcHJpYXRlCisgICAgICAgICAqICByZXN1bHRzIGhlcmUgaW4gdGhlIGRyaXZlciBiYXNlZCBvbiBvdXIga25vd2xlZGdlIG9mIGV4aXN0aW5nIE1BQworICAgICAgICAgKiAgZmVhdHVyZXMuICBUaGF0J3MgdGhlIHdob2xlIHBvaW50IGJlaGluZCB0aGlzIHVnbHkgZnVuY3Rpb24uCisgICAgICAgICAqLworCisJaWYgKGlzZ2V0KSB7CisJCW1zZy0+cmVzdWx0Y29kZS5kYXRhID0gUDgwMjExRU5VTV9yZXN1bHRjb2RlX3N1Y2Nlc3M7CisJCXN3aXRjaCAobWliLT5wYXJtMSkgeworCQkJY2FzZSAxOiAvKiBPcGVuIFN5c3RlbSAqLworCQkJCSp1aW50MzIgPSBQODAyMTFFTlVNX2F1dGhhbGdfb3BlbnN5c3RlbTsKKwkJCQlicmVhazsKKwkJCWNhc2UgMjogLyogU2hhcmVkS2V5ICovCisJCQkJKnVpbnQzMiA9IFA4MDIxMUVOVU1fYXV0aGFsZ19zaGFyZWRrZXk7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCSp1aW50MzIgPSAwOworCQkJCW1zZy0+cmVzdWx0Y29kZS5kYXRhID0gUDgwMjExRU5VTV9yZXN1bHRjb2RlX25vdF9zdXBwb3J0ZWQ7CisJCQkJYnJlYWs7CisJCX0KKwl9CisKKwlEQkZFWElUOworCXJldHVybigwKTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIHByaXNtMm1pYl9hdXRoYWxnZW5hYmxlCisqCisqIEdldC9zZXQgdGhlIGVuYWJsZSB2YWx1ZXMgZnJvbSB0aGUgQXVodGVudGljYXRpb25BbGdvcml0aG1zVGFibGUuCisqCisqIE1JQiByZWNvcmQgcGFyYW1ldGVyczoKKyogICAgICAgcGFybTEgICAgVGFibGUgaW5kZXggKDEtNikuCisqICAgICAgIHBhcm0yICAgIE5vdCB1c2VkLgorKiAgICAgICBwYXJtMyAgICBOb3QgdXNlZC4KKyoKKyogQXJndW1lbnRzOgorKiAgICAgICBtaWIgICAgICBNSUIgcmVjb3JkLgorKiAgICAgICBpc2dldCAgICBNSUJHRVQvTUlCU0VUIGZsYWcuCisqICAgICAgIHdsYW5kZXYgIHdsYW4gZGV2aWNlIHN0cnVjdHVyZS4KKyogICAgICAgcHJpdiAgICAgInByaXYiIHN0cnVjdHVyZS4KKyogICAgICAgaHcgICAgICAgImh3IiBzdHJ1Y3R1cmUuCisqICAgICAgIG1zZyAgICAgIE1lc3NhZ2Ugc3RydWN0dXJlLgorKiAgICAgICBkYXRhICAgICBEYXRhIGJ1ZmZlci4KKyoKKyogUmV0dXJuczoKKyogICAgICAgMCAgIC0gU3VjY2Vzcy4KKyogICAgICAgfjAgIC0gRXJyb3IuCisqCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGludCBwcmlzbTJtaWJfYXV0aGFsZ2VuYWJsZSgKK21pYnJlY190ICAgICAgICAgICAgICAgICAgICAgKm1pYiwKK2ludCAgICAgICAgICAgICAgICAgICAgICAgICAgaXNnZXQsCit3bGFuZGV2aWNlX3QgICAgICAgICAgICAgICAgICp3bGFuZGV2LAoraGZhMzg0eF90ICAgICAgICAgICAgICAgICAgICAqaHcsCitwODAyMTFtc2dfZG90MTFyZXFfbWlic2V0X3QgICptc2csCit2b2lkICAgICAgICAgICAgICAgICAgICAgICAgICpkYXRhKQoreworCWludCAgICAgcmVzdWx0OworCVVJTlQzMiAgKnVpbnQzMiA9IChVSU5UMzIqKSBkYXRhOworCisJaW50ICAgICBpbmRleDsKKwlVSU5UMTYgIGNuZl9hdXRoOworCVVJTlQxNgltYXNrOworCisJREJGRU5URVI7CisKKwlpbmRleCA9IG1pYi0+cGFybTEgLSAxOworCisJcmVzdWx0ID0gaGZhMzg0eF9kcnZyX2dldGNvbmZpZzE2KCBodywKKwkJCUhGQTM4NHhfUklEX0NORkFVVEhFTlRJQ0FUSU9OLCAmY25mX2F1dGgpOworCVdMQU5fTE9HX0RFQlVHKDIsImNuZkF1dGhlbnRpY2F0aW9uMD0lZCwgaW5kZXg9JWRcbiIsIGNuZl9hdXRoLCBpbmRleCk7CisKKwlpZiAoaXNnZXQpIHsKKwkJaWYgKCBpbmRleCA9PSAwIHx8IGluZGV4ID09IDEgKSB7CisJCQkqdWludDMyID0gKGNuZl9hdXRoICYgKDE8PGluZGV4KSkgPworCQkJCVA4MDIxMUVOVU1fdHJ1dGhfdHJ1ZTogUDgwMjExRU5VTV90cnV0aF9mYWxzZTsKKwkJfSBlbHNlIHsKKwkJCSp1aW50MzIgPSBQODAyMTFFTlVNX3RydXRoX2ZhbHNlOworCQkJbXNnLT5yZXN1bHRjb2RlLmRhdGEgPSBQODAyMTFFTlVNX3Jlc3VsdGNvZGVfbm90X3N1cHBvcnRlZDsKKwkJfQorCX0gZWxzZSB7CisJCWlmICggaW5kZXggPT0gMCB8fCBpbmRleCA9PSAxICkgeworCQkJbWFzayA9IDEgPDwgaW5kZXg7CisJCQlpZiAoKnVpbnQzMj09UDgwMjExRU5VTV90cnV0aF90cnVlICkgeworCQkJCWNuZl9hdXRoIHw9IG1hc2s7CisJCQl9IGVsc2UgeworCQkJCWNuZl9hdXRoICY9IH5tYXNrOworCQkJfQorCQkJcmVzdWx0ID0gaGZhMzg0eF9kcnZyX3NldGNvbmZpZzE2KCBodywKKwkJCQkJSEZBMzg0eF9SSURfQ05GQVVUSEVOVElDQVRJT04sIGNuZl9hdXRoKTsKKwkJCVdMQU5fTE9HX0RFQlVHKDIsImNuZkF1dGhlbnRpY2F0aW9uOj0lZFxuIiwgY25mX2F1dGgpOworCQkJaWYgKCByZXN1bHQgKSB7CisJCQkJV0xBTl9MT0dfREVCVUcoMSwiVW5hYmxlIHRvIHNldCBwMmNuZkF1dGhlbnRpY2F0aW9uIHRvICVkXG4iLCBjbmZfYXV0aCk7CisJCQkJbXNnLT5yZXN1bHRjb2RlLmRhdGEgPSBQODAyMTFFTlVNX3Jlc3VsdGNvZGVfaW1wbGVtZW50YXRpb25fZmFpbHVyZTsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCW1zZy0+cmVzdWx0Y29kZS5kYXRhID0gUDgwMjExRU5VTV9yZXN1bHRjb2RlX25vdF9zdXBwb3J0ZWQ7CisJCX0KKwl9CisKKwlEQkZFWElUOworCXJldHVybihyZXN1bHQpOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogcHJpc20ybWliX3ByaXYKKyoKKyogR2V0L3NldCB2YWx1ZXMgaW4gdGhlICJwcml2IiBkYXRhIHN0cnVjdHVyZS4KKyoKKyogTUlCIHJlY29yZCBwYXJhbWV0ZXJzOgorKiAgICAgICBwYXJtMSAgICBOb3QgdXNlZC4KKyogICAgICAgcGFybTIgICAgTm90IHVzZWQuCisqICAgICAgIHBhcm0zICAgIE5vdCB1c2VkLgorKgorKiBBcmd1bWVudHM6CisqICAgICAgIG1pYiAgICAgIE1JQiByZWNvcmQuCisqICAgICAgIGlzZ2V0ICAgIE1JQkdFVC9NSUJTRVQgZmxhZy4KKyogICAgICAgd2xhbmRldiAgd2xhbiBkZXZpY2Ugc3RydWN0dXJlLgorKiAgICAgICBwcml2ICAgICAicHJpdiIgc3RydWN0dXJlLgorKiAgICAgICBodyAgICAgICAiaHciIHN0cnVjdHVyZS4KKyogICAgICAgbXNnICAgICAgTWVzc2FnZSBzdHJ1Y3R1cmUuCisqICAgICAgIGRhdGEgICAgIERhdGEgYnVmZmVyLgorKgorKiBSZXR1cm5zOgorKiAgICAgICAwICAgLSBTdWNjZXNzLgorKiAgICAgICB+MCAgLSBFcnJvci4KKyoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW50IHByaXNtMm1pYl9wcml2KAorbWlicmVjX3QgICAgICAgICAgICAgICAgICAgICAqbWliLAoraW50ICAgICAgICAgICAgICAgICAgICAgICAgICBpc2dldCwKK3dsYW5kZXZpY2VfdCAgICAgICAgICAgICAgICAgKndsYW5kZXYsCitoZmEzODR4X3QgICAgICAgICAgICAgICAgICAgICpodywKK3A4MDIxMW1zZ19kb3QxMXJlcV9taWJzZXRfdCAgKm1zZywKK3ZvaWQgICAgICAgICAgICAgICAgICAgICAgICAgKmRhdGEpCit7CisJVUlOVDMyICAgICAgICAgICAgKnVpbnQzMiA9IChVSU5UMzIqKSBkYXRhOworCXA4MDIxMXBzdHJkX3QgICAgICpwc3RyID0gKHA4MDIxMXBzdHJkX3QqKSBkYXRhOworCXA4MDIxMW1hY2FycmF5X3QgICptYWNhcnJheSA9IChwODAyMTFtYWNhcnJheV90ICopIGRhdGE7CisKKwlpbnQgIGksIGNudCwgcmVzdWx0LCBkb25lOworCisJcHJpc20yc3RhX2F1dGhsaXN0X3QgIG9sZDsKKworCS8qCisJKiogInRlc3QiIGlzIGEgbG90IGxvbmdlciB0aGFuIG5lY2Vzc2FyeSBidXQgd2hvIGNhcmVzPyAgLi4uYXMgbG9uZyBhcworCSoqIGl0IGlzIGxvbmcgZW5vdWdoIQorCSovCisKKwlVSU5UOCAgdGVzdFtzaXplb2Yod2xhbmRldi0+cngpICsgc2l6ZW9mKGh3LT50YWxsaWVzKV07CisKKwlEQkZFTlRFUjsKKworCXN3aXRjaCAobWliLT5kaWQpIHsKKwljYXNlIERJRG1pYl9wMl9wMlRhYmxlX3AyUmVjZWl2ZWRGcmFtZVN0YXRpc3RpY3M6CisKKwkJLyoKKwkJKiogTm90ZTogVGhlIHZhbHVlcyBpbiB0aGlzIHJlY29yZCBhcmUgY2hhbmdlZCBieSB0aGUKKwkJKiogaW50ZXJydXB0IGhhbmRsZXIgYW5kIHRoZXJlZm9yZSBjYW5ub3QgYmUgZ3VhcmFudGVlZAorCQkqKiB0byBiZSBzdGFibGUgd2hpbGUgdGhleSBhcmUgYmVpbmcgY29waWVkLiAgSG93ZXZlciwKKwkJKiogdGhlIGludGVycnVwdCBoYW5kbGVyIHdpbGwgdGFrZSBwcmlvcml0eSBvdmVyIHRoaXMKKwkJKiogY29kZS4gIEhlbmNlLCBpZiB0aGUgc2FtZSB2YWx1ZXMgYXJlIGNvcGllZCB0d2ljZSwKKwkJKiogdGhlbiB3ZSBhcmUgZW5zdXJlZCB0aGF0IHRoZSB2YWx1ZXMgaGF2ZSBub3QgYmVlbgorCQkqKiBjaGFuZ2VkLiAgSWYgdGhleSBoYXZlLCB0aGVuIGp1c3QgdHJ5IGFnYWluLiAgRG9uJ3QKKwkJKiogdHJ5IG1vcmUgdGhhbiAxMCB0aW1lcy4uLmlmIHdlIHN0aWxsIGhhdmVuJ3QgZ290IGl0LAorCQkqKiB0aGVuIHRoZSB2YWx1ZXMgd2UgZG8gaGF2ZSBhcmUgcHJvYmFibHkgZ29vZCBlbm91Z2guCisJCSoqIFRoaXMgc2NoZW1lIGZvciBjb3B5aW5nIHZhbHVlcyBpcyB1c2VkIGluIG9yZGVyIHRvCisJCSoqIHByZXZlbnQgaGF2aW5nIHRvIGJsb2NrIHRoZSBpbnRlcnJ1cHQgaGFuZGxlciB3aGlsZQorCQkqKiB3ZSBjb3B5IHRoZSB2YWx1ZXMuCisJCSovCisKKwkJaWYgKGlzZ2V0KQorCQkJZm9yIChpID0gMDsgaSA8IDEwOyBpKyspIHsKKwkJCQltZW1jcHkoZGF0YSwgJndsYW5kZXYtPnJ4LCBzaXplb2Yod2xhbmRldi0+cngpKTsKKwkJCQltZW1jcHkodGVzdCwgJndsYW5kZXYtPnJ4LCBzaXplb2Yod2xhbmRldi0+cngpKTsKKwkJCQlpZiAobWVtY21wKGRhdGEsIHRlc3QsIHNpemVvZih3bGFuZGV2LT5yeCkpID09IDApIGJyZWFrOworCQkJfQorCisJCWJyZWFrOworCisJY2FzZSBESURtaWJfcDJfcDJUYWJsZV9wMkNvbW11bmljYXRpb25UYWxsaWVzOgorCisJCS8qCisJCSoqIE5vdGU6IFRoZSB2YWx1ZXMgaW4gdGhpcyByZWNvcmQgYXJlIGNoYW5nZWQgYnkgdGhlCisJCSoqIGludGVycnVwdCBoYW5kbGVyIGFuZCB0aGVyZWZvcmUgY2Fubm90IGJlIGd1YXJhbnRlZWQKKwkJKiogdG8gYmUgc3RhYmxlIHdoaWxlIHRoZXkgYXJlIGJlaW5nIGNvcGllZC4gIFNlZSB0aGUKKwkJKiogbm90ZSBhYm92ZSBhYm91dCBjb3B5aW5nIHZhbHVlcy4KKwkJKi8KKworCQlpZiAoaXNnZXQpIHsKKwkJCXJlc3VsdCA9IGhmYTM4NHhfZHJ2cl9jb21tdGFsbGllcyhodyk7CisKKwkJCS8qID8/Pz8/PyBXZSBuZWVkIHRvIHdhaXQgYSBiaXQgaGVyZSBmb3IgdGhlICovCisJCQkvKiAgIHRhbGxpZXMgdG8gZ2V0IHVwZGF0ZWQuID8/Pz8/PyAqLworCQkJLyogTVNNOiBUT0RPOiBUaGUgcmlnaHQgd2F5IHRvIGRvIHRoaXMgaXMgdG8KKwkJCSAqICAgICAgYWRkIGEgImNvbW10YWxsaWUiIHdhaXQgcXVldWUgdG8gdGhlCisJCQkgKiAgICAgIHByaXYgc3RydWN0dXJlIHRoYXQgZ2V0cyBydW4gZXZlcnkgdGltZQorCQkJICogICAgICB3ZSByZWNlaXZlIGEgY29tbXRhbGx5IGluZm8gZnJhbWUuCisJCQkgKiAgICAgIFRoaXMgcHJvY2VzcyB3b3VsZCBzbGVlcCBvbiB0aGF0CisJCQkgKiAgICAgIHF1ZXVlIGFuZCBnZXQgYXdha2VuZWQgd2hlbiB0aGUKKwkJCSAqICAgICAgdGhlIHJlcXVlc3RlZCBpbmZvIGZyYW1lIGFycml2ZXMuCisJCQkgKiAgICAgIERvbid0IGhhdmUgdGltZSB0byBkbyBhbmQgdGVzdCB0aGlzCisJCQkgKiAgICAgIHJpZ2h0IG5vdy4KKwkJCSAqLworCisJCQkvKiBVZ2gsIHRoaXMgaXMgbmFzdHkuICovCisJCQlmb3IgKGkgPSAwOyBpIDwgMTA7IGkrKykgeworCQkJCW1lbWNweShkYXRhLAorCQkJCSAgICAgICAmaHctPnRhbGxpZXMsCisJCQkJICAgICAgIHNpemVvZihody0+dGFsbGllcykpOworCQkJCW1lbWNweSh0ZXN0LAorCQkJCSAgICAgICAmaHctPnRhbGxpZXMsCisJCQkJICAgICAgIHNpemVvZihody0+dGFsbGllcykpOworCQkJCWlmICggbWVtY21wKGRhdGEsCisJCQkJCSAgICB0ZXN0LAorCQkJCQkgICAgc2l6ZW9mKGh3LT50YWxsaWVzKSkgPT0gMCkKKwkJCQkJYnJlYWs7CisJCQl9CisJCX0KKworCQlicmVhazsKKworCWNhc2UgRElEbWliX3AyX3AyVGFibGVfcDJBdXRoZW50aWNhdGVkOgorCisJCWlmIChpc2dldCkgeworCQkJcHJpc20ybWliX3ByaXZfYXV0aGxpc3QoaHcsICZvbGQpOworCisJCQltYWNhcnJheS0+Y250ID0gMDsKKwkJCWZvciAoaSA9IDA7IGkgPCBvbGQuY250OyBpKyspIHsKKwkJCQlpZiAoIW9sZC5hc3NvY1tpXSkgeworCQkJCQltZW1jcHkobWFjYXJyYXktPmRhdGFbbWFjYXJyYXktPmNudF0sIG9sZC5hZGRyW2ldLCBXTEFOX0FERFJfTEVOKTsKKwkJCQkJbWFjYXJyYXktPmNudCsrOworCQkJCX0KKwkJCX0KKwkJfQorCisJCWJyZWFrOworCisJY2FzZSBESURtaWJfcDJfcDJUYWJsZV9wMkFzc29jaWF0ZWQ6CisKKwkJaWYgKGlzZ2V0KSB7CisJCQlwcmlzbTJtaWJfcHJpdl9hdXRobGlzdChodywgJm9sZCk7CisKKwkJCW1hY2FycmF5LT5jbnQgPSAwOworCQkJZm9yIChpID0gMDsgaSA8IG9sZC5jbnQ7IGkrKykgeworCQkJCWlmIChvbGQuYXNzb2NbaV0pIHsKKwkJCQkJbWVtY3B5KG1hY2FycmF5LT5kYXRhW21hY2FycmF5LT5jbnRdLCBvbGQuYWRkcltpXSwgV0xBTl9BRERSX0xFTik7CisJCQkJCW1hY2FycmF5LT5jbnQrKzsKKwkJCQl9CisJCQl9CisJCX0KKworCQlicmVhazsKKworCWNhc2UgRElEbWliX3AyX3AyVGFibGVfcDJQb3dlclNhdmVVc2VyQ291bnQ6CisKKwkJaWYgKGlzZ2V0KQorCQkJKnVpbnQzMiA9IGh3LT5wc3VzZXJjb3VudDsKKworCQlicmVhazsKKworCWNhc2UgRElEbWliX3AyX3AyVGFibGVfcDJDb21tZW50OgorCisJCWlmIChpc2dldCkgeworCQkJcHN0ci0+bGVuID0gc3RybGVuKGh3LT5jb21tZW50KTsKKwkJCW1lbWNweShwc3RyLT5kYXRhLCBody0+Y29tbWVudCwgcHN0ci0+bGVuKTsKKwkJfSBlbHNlIHsKKwkJCWNudCA9IHBzdHItPmxlbjsKKwkJCWlmIChjbnQgPCAwKSBjbnQgPSAwOworCQkJaWYgKGNudCA+PSBzaXplb2YoaHctPmNvbW1lbnQpKQorCQkJCWNudCA9IHNpemVvZihody0+Y29tbWVudCktMTsKKwkJCW1lbWNweShody0+Y29tbWVudCwgcHN0ci0+ZGF0YSwgY250KTsKKwkJCXBzdHItPmRhdGFbY250XSA9ICdcMCc7CisJCX0KKworCQlicmVhazsKKworCWNhc2UgRElEbWliX3AyX3AyVGFibGVfcDJBY2Nlc3NNb2RlOgorCisJCWlmIChpc2dldCkKKwkJCSp1aW50MzIgPSBody0+YWNjZXNzbW9kZTsKKwkJZWxzZQorCQkJcHJpc20ybWliX3ByaXZfYWNjZXNzbW9kZShodywgKnVpbnQzMik7CisKKwkJYnJlYWs7CisKKwljYXNlIERJRG1pYl9wMl9wMlRhYmxlX3AyQWNjZXNzQWxsb3c6CisKKwkJaWYgKGlzZ2V0KSB7CisJCQltYWNhcnJheS0+Y250ID0gaHctPmFsbG93LmNudDsKKwkJCW1lbWNweShtYWNhcnJheS0+ZGF0YSwgaHctPmFsbG93LmFkZHIsCisJCQkgICAgICAgbWFjYXJyYXktPmNudCpXTEFOX0FERFJfTEVOKTsKKwkJfSBlbHNlIHsKKwkJCXByaXNtMm1pYl9wcml2X2FjY2Vzc2FsbG93KGh3LCBtYWNhcnJheSk7CisJCX0KKworCQlicmVhazsKKworCWNhc2UgRElEbWliX3AyX3AyVGFibGVfcDJBY2Nlc3NEZW55OgorCisJCWlmIChpc2dldCkgeworCQkJbWFjYXJyYXktPmNudCA9IGh3LT5kZW55LmNudDsKKwkJCW1lbWNweShtYWNhcnJheS0+ZGF0YSwgaHctPmRlbnkuYWRkciwKKwkJCSAgICAgICBtYWNhcnJheS0+Y250KldMQU5fQUREUl9MRU4pOworCQl9IGVsc2UgeworCQkJcHJpc20ybWliX3ByaXZfYWNjZXNzZGVueShodywgbWFjYXJyYXkpOworCQl9CisKKwkJYnJlYWs7CisKKwljYXNlIERJRG1pYl9wMl9wMlRhYmxlX3AyQ2hhbm5lbEluZm9SZXN1bHRzOgorCisJCWlmIChpc2dldCkgeworCQkJZG9uZSA9IGF0b21pY19yZWFkKCZody0+Y2hhbm5lbF9pbmZvLmRvbmUpOworCQkJaWYgKGRvbmUgPT0gMCkgeworCQkJCW1zZy0+cmVzdWx0Y29kZS5zdGF0dXMgPSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX25vX3ZhbHVlOworCQkJCWJyZWFrOworCQkJfQorCQkJaWYgKGRvbmUgPT0gMSkgeworCQkJCW1zZy0+cmVzdWx0Y29kZS5zdGF0dXMgPSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2luY29tcGxldGVfaXRlbWRhdGE7CisJCQkJYnJlYWs7CisJCQl9CisKKwkJCWZvciAoaSA9IDA7IGkgPCAxNDsgaSsrLCB1aW50MzIgKz0gNSkgeworCQkJCXVpbnQzMlswXSA9IGkrMTsKKwkJCQl1aW50MzJbMV0gPSBody0+Y2hhbm5lbF9pbmZvLnJlc3VsdHMucmVzdWx0W2ldLmFubDsKKwkJCQl1aW50MzJbMl0gPSBody0+Y2hhbm5lbF9pbmZvLnJlc3VsdHMucmVzdWx0W2ldLnBubDsKKwkJCQl1aW50MzJbM10gPSAoaHctPmNoYW5uZWxfaW5mby5yZXN1bHRzLnJlc3VsdFtpXS5hY3RpdmUgJiBIRkEzODR4X0NISU5GT1JFU1VMVF9CU1NBQ1RJVkUpID8gMSA6IDA7CisJCQkJdWludDMyWzRdID0gKGh3LT5jaGFubmVsX2luZm8ucmVzdWx0cy5yZXN1bHRbaV0uYWN0aXZlICYgSEZBMzg0eF9DSElORk9SRVNVTFRfUENGQUNUSVZFKSA/IDEgOiAwOworCQkJfQorCQl9CisKKwkJYnJlYWs7CisKKwljYXNlIERJRG1pYl9kb3QxMXNtdF9kb3QxMVN0YXRpb25Db25maWdUYWJsZV9kb3QxMURlc2lyZWRCU1NUeXBlOgorCisJCWlmIChpc2dldCkKKwkJCSp1aW50MzIgPSBody0+ZG90MTFfZGVzaXJlZF9ic3NfdHlwZTsKKwkJZWxzZQorCQkJaHctPmRvdDExX2Rlc2lyZWRfYnNzX3R5cGUgPSAqdWludDMyOworCisJCWJyZWFrOworCisJY2FzZSBESURtaWJfbG54X2xueENvbmZpZ1RhYmxlX2xueFJTTkFJRTogeworCQloZmEzODR4X1dQQURhdGFfdCB3cGE7CisJCWlmIChpc2dldCkgeworCQkJaGZhMzg0eF9kcnZyX2dldGNvbmZpZyggaHcsIEhGQTM4NHhfUklEX0NORldQQURBVEEsCisJCQkJCQkoVUlOVDggKikgJndwYSwgc2l6ZW9mKHdwYSkpOworCQkJcHN0ci0+bGVuID0gaGZhMzg0eDJob3N0XzE2KHdwYS5kYXRhbGVuKTsKKwkJCW1lbWNweShwc3RyLT5kYXRhLCB3cGEuZGF0YSwgcHN0ci0+bGVuKTsKKwkJfSBlbHNlIHsKKwkJCXdwYS5kYXRhbGVuID0gaG9zdDJoZmEzODR4XzE2KHBzdHItPmxlbik7CisJCQltZW1jcHkod3BhLmRhdGEsIHBzdHItPmRhdGEsIHBzdHItPmxlbik7CisKKwkJCXJlc3VsdCA9IGhmYTM4NHhfZHJ2cl9zZXRjb25maWcoaHcsIEhGQTM4NHhfUklEX0NORldQQURBVEEsCisJCQkJKFVJTlQ4ICopICZ3cGEsIHNpemVvZih3cGEpKTsKKwkJfQorCQlicmVhazsKKwl9CisJZGVmYXVsdDoKKwkJV0xBTl9MT0dfRVJST1IoIlVuaGFuZGxlZCBESUQgMHglMDh4XG4iLCBtaWItPmRpZCk7CisJfQorCisJREJGRVhJVDsKKwlyZXR1cm4oMCk7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBwcmlzbTJtaWJfcHJpdl9hdXRobGlzdAorKgorKiBHZXQgYSBjb3B5IG9mIHRoZSBsaXN0IG9mIGF1dGhlbnRpY2F0ZWQgc3RhdGlvbnMuCisqCisqIEFyZ3VtZW50czoKKyogICAgICAgcHJpdiAgICAgInByaXYiIHN0cnVjdHVyZS4KKyogICAgICAgbGlzdCAgICAgTGlzdCBvZiBhdXRoZW50aWNhdGVkIHN0YXRpb25zLgorKgorKiBSZXR1cm5zOgorKglOb3RoaW5nCisqCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIHZvaWQgcHJpc20ybWliX3ByaXZfYXV0aGxpc3QoCitoZmEzODR4X3QgICAgICAgICAgICAgKmh3LAorcHJpc20yc3RhX2F1dGhsaXN0X3QgICpsaXN0KQoreworCXByaXNtMnN0YV9hdXRobGlzdF90ICB0ZXN0OworCWludCAgICAgICAgICAgICAgICAgICBpOworCisJREJGRU5URVI7CisKKwkvKgorCSoqIE5vdGU6IFRoZSB2YWx1ZXMgaW4gdGhpcyByZWNvcmQgYXJlIGNoYW5nZWQgYnkgdGhlIGludGVycnVwdAorCSoqIGhhbmRsZXIgYW5kIHRoZXJlZm9yZSBjYW5ub3QgYmUgZ3VhcmFudGVlZCB0byBiZSBzdGFibGUgd2hpbGUKKwkqKiB0aGV5IGFyZSBiZWluZyBjb3BpZWQuICBIb3dldmVyLCB0aGUgaW50ZXJydXB0IGhhbmRsZXIgd2lsbAorCSoqIHRha2UgcHJpb3JpdHkgb3ZlciB0aGlzIGNvZGUuICBIZW5jZSwgaWYgdGhlIHNhbWUgdmFsdWVzIGFyZQorCSoqIGNvcGllZCB0d2ljZSwgdGhlbiB3ZSBhcmUgZW5zdXJlZCB0aGF0IHRoZSB2YWx1ZXMgaGF2ZSBub3QKKwkqKiBiZWVuIGNoYW5nZWQuICBJZiB0aGV5IGhhdmUsIHRoZW4ganVzdCB0cnkgYWdhaW4uICBEb24ndCB0cnkKKwkqKiBtb3JlIHRoYW4gMTAgdGltZXMuLi50aGUgbGlzdCBvZiBhdXRoZW50aWNhdGVkIHN0YXRpb25zIGlzCisJKiogdW5saWtlbHkgdG8gYmUgY2hhbmdpbmcgZnJlcXVlbnRseSBlbm91Z2ggdGhhdCB3ZSBjYW4ndCBnZXQKKwkqKiBhIHNuYXBzaG90IGluIDEwIHRyaWVzLiAgRG9uJ3QgdHJ5IG1vcmUgdGhhbiB0aGlzIHNvIHRoYXQgd2UKKwkqKiBkb24ndCByaXNrIGxvY2tpbmctdXAgZm9yIGxvbmcgcGVyaW9kcyBvZiB0aW1lLiAgSWYgd2Ugc3RpbGwKKwkqKiBoYXZlbid0IGdvdCB0aGUgc25hcHNob3QsIHRoZW4gZ2VuZXJhdGUgYW4gZXJyb3IgbWVzc2FnZSBhbmQKKwkqKiByZXR1cm4gYW4gZW1wdHkgbGlzdCAoc2luY2UgdGhpcyBpcyB0aGUgb25seSB2YWxpZCBsaXN0IHRoYXQKKwkqKiB3ZSBjYW4gZ3VhcmVudGVlKS4gIFRoaXMgc2NoZW1lIGZvciBjb3B5aW5nIHZhbHVlcyBpcyB1c2VkIGluCisJKiogb3JkZXIgdG8gcHJldmVudCBoYXZpbmcgdG8gYmxvY2sgdGhlIGludGVycnVwdCBoYW5kbGVyIHdoaWxlCisJKiogd2UgY29weSB0aGUgdmFsdWVzLgorCSovCisKKwlmb3IgKGkgPSAwOyBpIDwgMTA7IGkrKykgeworCQltZW1jcHkobGlzdCwgJmh3LT5hdXRobGlzdCwgc2l6ZW9mKHByaXNtMnN0YV9hdXRobGlzdF90KSk7CisJCW1lbWNweSgmdGVzdCwgJmh3LT5hdXRobGlzdCwgc2l6ZW9mKHByaXNtMnN0YV9hdXRobGlzdF90KSk7CisJCWlmIChtZW1jbXAobGlzdCwgJnRlc3QsIHNpemVvZihwcmlzbTJzdGFfYXV0aGxpc3RfdCkpID09IDApCisJCQlicmVhazsKKwl9CisKKwlpZiAoaSA+PSAxMCkgeworCQlsaXN0LT5jbnQgPSAwOworCQlXTEFOX0xPR19FUlJPUigiQ291bGQgbm90IG9idGFpbiBzbmFwc2hvdCBvZiBhdXRoZW50aWNhdGVkIHN0YXRpb25zLlxuIik7CisJCX0KKworCURCRkVYSVQ7CisJcmV0dXJuOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogcHJpc20ybWliX3ByaXZfYWNjZXNzbW9kZQorKgorKiBTZXQgdGhlIEFjY2VzcyBNb2RlLgorKgorKiBBcmd1bWVudHM6CisqICAgICAgIHByaXYgICAgICJwcml2IiBzdHJ1Y3R1cmUuCisqICAgICAgIGh3ICAgICAgICJodyIgc3RydWN0dXJlLgorKiAgICAgICBtb2RlICAgICBOZXcgYWNjZXNzIG1vZGUuCisqCisqIFJldHVybnM6CisqCU5vdGhpbmcKKyoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgdm9pZCBwcmlzbTJtaWJfcHJpdl9hY2Nlc3Ntb2RlKAoraGZhMzg0eF90ICAgICAgICAgKmh3LAorVUlOVDMyICAgICAgICAgICAgbW9kZSkKK3sKKwlwcmlzbTJzdGFfYXV0aGxpc3RfdCAgb2xkOworCWludCAgICAgICAgICAgICAgICAgICBpLCBqLCBkZWF1dGg7CisJVUlOVDggICAgICAgICAgICAgICAgICphZGRyOworCisJREJGRU5URVI7CisKKwkvKgorCSoqIElmIHRoZSBtb2RlIGlzIG5vdCBjaGFuZ2luZyBvciBpdCBpcyBjaGFuZ2luZyB0byAiQWxsIiwgdGhlbiBpdCdzCisJKiogb2theSB0byBnbyBhaGVhZCB3aXRob3V0IGEgbG90IG9mIG1lc3NpbmcgYXJvdW5kLiAgT3RoZXJ3aXNlLCB0aGUKKwkqKiBhY2Nlc3MgbW9kZSBpcyBjaGFuZ2luZyBpbiBhIHdheSB0aGF0IG1heSBsZWF2ZSBzb21lIHN0YXRpb25zCisJKiogYXV0aGVudGljYXRlZCB3aGljaCBzaG91bGQgbm90IGJlIGF1dGhlbnRpY2F0ZWQuICBJdCB3aWxsIGJlCisJKiogbmVjZXNzYXJ5IHRvIGRlLWF1dGhlbnRpY2F0ZSB0aGVzZSBzdGF0aW9ucy4KKwkqLworCisJaWYgKG1vZGUgPT0gV0xBTl9BQ0NFU1NfQUxMIHx8IG1vZGUgPT0gaHctPmFjY2Vzc21vZGUpIHsKKwkJaHctPmFjY2Vzc21vZGUgPSBtb2RlOworCQlyZXR1cm47CisJfQorCisJLyoKKwkqKiBTd2l0Y2ggdG8gdGhlIG5ldyBhY2Nlc3MgbW9kZS4gIE9uY2UgdGhpcyBpcyBkb25lLCB0aGVuIHRoZSBpbnRlcnJ1cHQKKwkqKiBoYW5kbGVyICh3aGljaCB1c2VzIHRoaXMgdmFsdWUpIHdpbGwgYmUgcHJldmVudGVkIGZyb20gYXV0aGVudGljYXRpbmcKKwkqKiBBRERJVElPTkFMIHN0YXRpb25zIHdoaWNoIHNob3VsZCBub3QgYmUgYXV0aGVudGljYXRlZC4gIFRoZW4gZ2V0IGEKKwkqKiBjb3B5IG9mIHRoZSBjdXJyZW50IGxpc3Qgb2YgYXV0aGVudGljYXRlZCBzdGF0aW9ucy4KKwkqLworCisJaHctPmFjY2Vzc21vZGUgPSBtb2RlOworCisJcHJpc20ybWliX3ByaXZfYXV0aGxpc3QoaHcsICZvbGQpOworCisJLyoKKwkqKiBOb3cgZ28gdGhyb3VnaCB0aGUgbGlzdCBvZiBwcmV2aW91c2x5IGF1dGhlbnRpY2F0ZWQgc3RhdGlvbnMgKHNvbWUKKwkqKiBvZiB3aGljaCBtaWdodCBkZS1hdXRoZW50aWNhdGUgdGhlbXNlbHZlcyB3aGlsZSB3ZSBhcmUgcHJvY2Vzc2luZyBpdAorCSoqIGJ1dCB0aGF0IGlzIG9rYXkpLiAgQW55IHN0YXRpb24gd2hpY2ggbm8gbG9uZ2VyIG1hdGNoZXMgdGhlIGFjY2VzcworCSoqIG1vZGUsIG11c3QgYmUgZGUtYXV0aGVudGljYXRlZC4KKwkqLworCisJZm9yIChpID0gMDsgaSA8IG9sZC5jbnQ7IGkrKykgeworCQlhZGRyID0gb2xkLmFkZHJbaV07CisKKwkJaWYgKG1vZGUgPT0gV0xBTl9BQ0NFU1NfTk9ORSkKKwkJCWRlYXV0aCA9IDE7CisJCWVsc2UgeworCQkJaWYgKG1vZGUgPT0gV0xBTl9BQ0NFU1NfQUxMT1cpIHsKKwkJCQlmb3IgKGogPSAwOyBqIDwgaHctPmFsbG93LmNudDsgaisrKQorCQkJCQlpZiAobWVtY21wKGFkZHIsIGh3LT5hbGxvdy5hZGRyW2pdLAorCQkJCQkJCVdMQU5fQUREUl9MRU4pID09IDApCisJCQkJCQlicmVhazsKKwkJCQlkZWF1dGggPSAoaiA+PSBody0+YWxsb3cuY250KTsKKwkJCX0gZWxzZSB7CisJCQkJZm9yIChqID0gMDsgaiA8IGh3LT5kZW55LmNudDsgaisrKQorCQkJCQlpZiAobWVtY21wKGFkZHIsIGh3LT5kZW55LmFkZHJbal0sCisJCQkJCQkJV0xBTl9BRERSX0xFTikgPT0gMCkKKwkJCQkJCWJyZWFrOworCQkJCWRlYXV0aCA9IChqIDwgaHctPmRlbnkuY250KTsKKwkJCX0KKwkJfQorCisJCWlmIChkZWF1dGgpIHByaXNtMm1pYl9wcml2X2RlYXV0aGVudGljYXRlKGh3LCBhZGRyKTsKKwl9CisKKwlEQkZFWElUOworCXJldHVybjsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIHByaXNtMm1pYl9wcml2X2FjY2Vzc2FsbG93CisqCisqIENoYW5nZSB0aGUgbGlzdCBvZiBhbGxvd2VkIE1BQyBhZGRyZXNzZXMuCisqCisqIEFyZ3VtZW50czoKKyogICAgICAgcHJpdiAgICAgICJwcml2IiBzdHJ1Y3R1cmUuCisqICAgICAgIGh3ICAgICAgICAiaHciIHN0cnVjdHVyZS4KKyogICAgICAgbWFjYXJyYXkgIE5ldyBhcnJheSBvZiBNQUMgYWRkcmVzc2VzLgorKgorKiBSZXR1cm5zOgorKglOb3RoaW5nCisqCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIHZvaWQgcHJpc20ybWliX3ByaXZfYWNjZXNzYWxsb3coCitoZmEzODR4X3QgICAgICAgICAqaHcsCitwODAyMTFtYWNhcnJheV90ICAqbWFjYXJyYXkpCit7CisJcHJpc20yc3RhX2F1dGhsaXN0X3QgIG9sZDsKKwlpbnQgICAgICAgICAgICAgICAgICAgaSwgajsKKworCURCRkVOVEVSOworCisJLyoKKwkqKiBDaGFuZ2UgdGhlIGFjY2VzcyBsaXN0LiAgTm90ZSB0aGF0IHRoZSBpbnRlcnJ1cHQgaGFuZGxlciBtYXkgYmUgaW4KKwkqKiB0aGUgbWlkZGxlIG9mIHVzaW5nIHRoZSBhY2Nlc3MgbGlzdCEhISAgU2luY2UgdGhlIGludGVycnVwdCBoYW5kbGVyCisJKiogd2lsbAlhbHdheXMgaGF2ZSBwcmlvcml0eSBvdmVyIHRoaXMgcHJvY2VzcyBhbmQgdGhpcyBpcyB0aGUgb25seQorCSoqIHByb2Nlc3MgdGhhdCB3aWxsIG1vZGlmeSB0aGUgbGlzdCwgdGhpcyBwcm9ibGVtIGNhbiBiZSBoYW5kbGVkIGFzCisJKiogZm9sbG93czoKKwkqKgorCSoqICAgIDEuIFNldCB0aGUgIm1vZGlmeSIgZmxhZy4KKwkqKiAgICAyLiBDaGFuZ2UgdGhlIGZpcnN0IGNvcHkgb2YgdGhlIGxpc3QuCisJKiogICAgMy4gQ2xlYXIgdGhlICJtb2RpZnkiIGZsYWcuCisJKiogICAgNC4gQ2hhbmdlIHRoZSBiYWNrdXAgY29weSBvZiB0aGUgbGlzdC4KKwkqKgorCSoqIFRoZSBpbnRlcnJ1cHQgaGFuZGxlciB3aWxsIGNoZWNrIHRoZSAibW9kaWZ5IiBmbGFnLiAgSWYgTk9UIHNldCwgdGhlbgorCSoqIHRoZSBmaXJzdCBjb3B5IG9mIHRoZSBsaXN0IGlzIHZhbGlkIGFuZCBtYXkgYmUgdXNlZC4gIE90aGVyd2lzZSwgdGhlCisJKiogZmlyc3QgY29weSBpcyBiZWluZyBjaGFuZ2VkIGJ1dCB0aGUgYmFja3VwIGNvcHkgaXMgdmFsaWQgYW5kIG1heSBiZQorCSoqIHVzZWQuICBEb2luZyB0aGluZ3MgdGhpcyB3YXkgcHJldmVudHMgaGF2aW5nIHRvIGhhdmUgdGhlIGludGVycnVwdAorCSoqIGhhbmRsZXIgYmxvY2sgd2hpbGUgdGhlIGxpc3QgaXMgYmVpbmcgdXBkYXRlZC4KKwkqLworCisJaHctPmFsbG93Lm1vZGlmeSA9IDE7CisKKwlody0+YWxsb3cuY250ID0gbWFjYXJyYXktPmNudDsKKwltZW1jcHkoaHctPmFsbG93LmFkZHIsIG1hY2FycmF5LT5kYXRhLCBtYWNhcnJheS0+Y250KldMQU5fQUREUl9MRU4pOworCisJaHctPmFsbG93Lm1vZGlmeSA9IDA7CisKKwlody0+YWxsb3cuY250MSA9IG1hY2FycmF5LT5jbnQ7CisJbWVtY3B5KGh3LT5hbGxvdy5hZGRyMSwgbWFjYXJyYXktPmRhdGEsIG1hY2FycmF5LT5jbnQqV0xBTl9BRERSX0xFTik7CisKKwkvKgorCSoqIElmIHRoZSBjdXJyZW50IGFjY2VzcyBtb2RlIGlzICJBbGxvdyIsIHRoZW4gY2hhbmdpbmcgdGhlIGFjY2VzcworCSoqIGxpc3QgbWF5IGxlYXZlIHNvbWUgc3RhdGlvbnMgYXV0aGVudGljYXRlZCB3aGljaCBzaG91bGQgbm90IGJlCisJKiogYXV0aGVudGljYXRlZC4gIEl0IHdpbGwgYmUgbmVjZXNzYXJ5IHRvIGRlLWF1dGhlbnRpY2F0ZSB0aGVzZQorCSoqIHN0YXRpb25zLiAgT3RoZXJ3aXNlLCB0aGUgbGlzdCBjYW4gYmUgY2hhbmdlZCB3aXRob3V0IGEgbG90IG9mIGZ1c3MuCisJKi8KKworCWlmIChody0+YWNjZXNzbW9kZSA9PSBXTEFOX0FDQ0VTU19BTExPVykgeworCisJCS8qCisJCSoqIEdvIHRocm91Z2ggdGhlIGxpc3Qgb2YgYXV0aGVudGljYXRlZCBzdGF0aW9ucyAoc29tZSBvZgorCQkqKiB3aGljaCBtaWdodCBkZS1hdXRoZW50aWNhdGUgdGhlbXNlbHZlcyB3aGlsZSB3ZSBhcmUKKwkJKiogcHJvY2Vzc2luZyBpdCBidXQgdGhhdCBpcyBva2F5KS4gIEFueSBzdGF0aW9uIHdoaWNoIGlzCisJCSoqIG5vIGxvbmdlciBpbiB0aGUgbGlzdCBvZiBhbGxvd2VkIHN0YXRpb25zLCBtdXN0IGJlCisJCSoqIGRlLWF1dGhlbnRpY2F0ZWQuCisJCSovCisKKwkJcHJpc20ybWliX3ByaXZfYXV0aGxpc3QoaHcsICZvbGQpOworCisJCWZvciAoaSA9IDA7IGkgPCBvbGQuY250OyBpKyspIHsKKwkJCWZvciAoaiA9IDA7IGogPCBody0+YWxsb3cuY250OyBqKyspCisJCQkJaWYgKG1lbWNtcChvbGQuYWRkcltpXSwgaHctPmFsbG93LmFkZHJbal0sCisJCQkJCQkJV0xBTl9BRERSX0xFTikgPT0gMCkKKwkJCQkJYnJlYWs7CisJCQlpZiAoaiA+PSBody0+YWxsb3cuY250KQorCQkJCXByaXNtMm1pYl9wcml2X2RlYXV0aGVudGljYXRlKGh3LCBvbGQuYWRkcltpXSk7CisJCX0KKwl9CisKKwlEQkZFWElUOworCXJldHVybjsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIHByaXNtMm1pYl9wcml2X2FjY2Vzc2RlbnkKKyoKKyogQ2hhbmdlIHRoZSBsaXN0IG9mIGRlbmllZCBNQUMgYWRkcmVzc2VzLgorKgorKiBBcmd1bWVudHM6CisqICAgICAgIHByaXYgICAgICAicHJpdiIgc3RydWN0dXJlLgorKiAgICAgICBodyAgICAgICAgImh3IiBzdHJ1Y3R1cmUuCisqICAgICAgIG1hY2FycmF5ICBOZXcgYXJyYXkgb2YgTUFDIGFkZHJlc3Nlcy4KKyoKKyogUmV0dXJuczoKKyoJTm90aGluZworKgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyB2b2lkIHByaXNtMm1pYl9wcml2X2FjY2Vzc2RlbnkoCitoZmEzODR4X3QgICAgICAgICAqaHcsCitwODAyMTFtYWNhcnJheV90ICAqbWFjYXJyYXkpCit7CisJcHJpc20yc3RhX2F1dGhsaXN0X3QgIG9sZDsKKwlpbnQgICAgICAgICAgICAgICAgICAgaSwgajsKKworCURCRkVOVEVSOworCisJLyoKKwkqKiBDaGFuZ2UgdGhlIGFjY2VzcyBsaXN0LiAgTm90ZSB0aGF0IHRoZSBpbnRlcnJ1cHQgaGFuZGxlciBtYXkgYmUgaW4KKwkqKiB0aGUgbWlkZGxlIG9mIHVzaW5nIHRoZSBhY2Nlc3MgbGlzdCEhISAgU2luY2UgdGhlIGludGVycnVwdCBoYW5kbGVyCisJKiogd2lsbCBhbHdheXMgaGF2ZSBwcmlvcml0eSBvdmVyIHRoaXMgcHJvY2VzcyBhbmQgdGhpcyBpcyB0aGUgb25seQorCSoqIHByb2Nlc3MgdGhhdCB3aWxsIG1vZGlmeSB0aGUgbGlzdCwgdGhpcyBwcm9ibGVtIGNhbiBiZSBoYW5kbGVkIGFzCisJKiogZm9sbG93czoKKwkqKgorCSoqICAgIDEuIFNldCB0aGUgIm1vZGlmeSIgZmxhZy4KKwkqKiAgICAyLiBDaGFuZ2UgdGhlIGZpcnN0IGNvcHkgb2YgdGhlIGxpc3QuCisJKiogICAgMy4gQ2xlYXIgdGhlICJtb2RpZnkiIGZsYWcuCisJKiogICAgNC4gQ2hhbmdlIHRoZSBiYWNrdXAgY29weSBvZiB0aGUgbGlzdC4KKwkqKgorCSoqIFRoZSBpbnRlcnJ1cHQgaGFuZGxlciB3aWxsIGNoZWNrIHRoZSAibW9kaWZ5IiBmbGFnLiAgSWYgTk9UIHNldCwgdGhlbgorCSoqIHRoZSBmaXJzdCBjb3B5IG9mIHRoZSBsaXN0IGlzIHZhbGlkIGFuZCBtYXkgYmUgdXNlZC4gIE90aGVyd2lzZSwgdGhlCisJKiogZmlyc3QgY29weSBpcyBiZWluZyBjaGFuZ2VkIGJ1dCB0aGUgYmFja3VwIGNvcHkgaXMgdmFsaWQgYW5kIG1heSBiZQorCSoqIHVzZWQuICBEb2luZyB0aGluZ3MgdGhpcyB3YXkgcHJldmVudHMgaGF2aW5nIHRvIGhhdmUgdGhlIGludGVycnVwdAorCSoqIGhhbmRsZXIgYmxvY2sgd2hpbGUgdGhlIGxpc3QgaXMgYmVpbmcgdXBkYXRlZC4KKwkqLworCisJaHctPmRlbnkubW9kaWZ5ID0gMTsKKworCWh3LT5kZW55LmNudCA9IG1hY2FycmF5LT5jbnQ7CisJbWVtY3B5KGh3LT5kZW55LmFkZHIsIG1hY2FycmF5LT5kYXRhLCBtYWNhcnJheS0+Y250KldMQU5fQUREUl9MRU4pOworCisJaHctPmRlbnkubW9kaWZ5ID0gMDsKKworCWh3LT5kZW55LmNudDEgPSBtYWNhcnJheS0+Y250OworCW1lbWNweShody0+ZGVueS5hZGRyMSwgbWFjYXJyYXktPmRhdGEsIG1hY2FycmF5LT5jbnQqV0xBTl9BRERSX0xFTik7CisKKwkvKgorCSoqIElmIHRoZSBjdXJyZW50IGFjY2VzcyBtb2RlIGlzICJEZW55IiwgdGhlbiBjaGFuZ2luZyB0aGUgYWNjZXNzCisJKiogbGlzdCBtYXkgbGVhdmUgc29tZSBzdGF0aW9ucyBhdXRoZW50aWNhdGVkIHdoaWNoIHNob3VsZCBub3QgYmUKKwkqKiBhdXRoZW50aWNhdGVkLiAgSXQgd2lsbCBiZSBuZWNlc3NhcnkgdG8gZGUtYXV0aGVudGljYXRlIHRoZXNlCisJKiogc3RhdGlvbnMuICBPdGhlcndpc2UsIHRoZSBsaXN0IGNhbiBiZSBjaGFuZ2VkIHdpdGhvdXQgYSBsb3Qgb2YgZnVzcy4KKwkqLworCisJaWYgKGh3LT5hY2Nlc3Ntb2RlID09IFdMQU5fQUNDRVNTX0RFTlkpIHsKKworCQkvKgorCQkqKiBHbyB0aHJvdWdoIHRoZSBsaXN0IG9mIGF1dGhlbnRpY2F0ZWQgc3RhdGlvbnMgKHNvbWUgb2YKKwkJKiogd2hpY2ggbWlnaHQgZGUtYXV0aGVudGljYXRlIHRoZW1zZWx2ZXMgd2hpbGUgd2UgYXJlCisJCSoqIHByb2Nlc3NpbmcgaXQgYnV0IHRoYXQgaXMgb2theSkuICBBbnkgc3RhdGlvbiB3aGljaCBpcworCQkqKiBub3cgaW4gdGhlIGxpc3Qgb2YgZGVuaWVkIHN0YXRpb25zLCBtdXN0IGJlIGRlLWF1dGhlbnRpY2F0ZWQuCisJCSovCisKKwkJcHJpc20ybWliX3ByaXZfYXV0aGxpc3QoaHcsICZvbGQpOworCisJCWZvciAoaSA9IDA7IGkgPCBvbGQuY250OyBpKyspCisJCQlmb3IgKGogPSAwOyBqIDwgaHctPmRlbnkuY250OyBqKyspCisJCQkJaWYgKG1lbWNtcChvbGQuYWRkcltpXSwgaHctPmRlbnkuYWRkcltqXSwKKwkJCQkJCQkgV0xBTl9BRERSX0xFTikgPT0gMCkgeworCQkJCQlwcmlzbTJtaWJfcHJpdl9kZWF1dGhlbnRpY2F0ZShodywgb2xkLmFkZHJbaV0pOworCQkJCQlicmVhazsKKwkJCQl9CisJfQorCisJREJGRVhJVDsKKwlyZXR1cm47Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBwcmlzbTJtaWJfcHJpdl9kZWF1dGhlbnRpY2F0ZQorKgorKiBEZS1hdXRoZW50aWNhdGUgYSBzdGF0aW9uLiAgVGhpcyBpcyBkb25lIGJ5IHNlbmRpbmcgYSBIYW5kb3ZlckFkZHJlc3MKKyogaW5mb3JtYXRpb24gZnJhbWUgdG8gdGhlIGZpcm13YXJlLiAgVGhpcyBzaG91bGQgd29yaywgYWNjb3JkaW5nIHRvCisqIEludGVyc2lsLgorKgorKiBBcmd1bWVudHM6CisqICAgICAgIHByaXYgICAgICJwcml2IiBzdHJ1Y3R1cmUuCisqICAgICAgIGh3ICAgICAgICJodyIgc3RydWN0dXJlLgorKiAgICAgICBhZGRyICAgICBNQUMgYWRkcmVzcyBvZiBzdGF0aW9uIHRvIGJlIGRlLWF1dGhlbnRpY2F0ZWQuCisqCisqIFJldHVybnM6CisqCU5vdGhpbmcKKyoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgdm9pZCBwcmlzbTJtaWJfcHJpdl9kZWF1dGhlbnRpY2F0ZSgKK2hmYTM4NHhfdCAgICAgICAgICpodywKK1VJTlQ4ICAgICAgICAgICAgICphZGRyKQoreworCURCRkVOVEVSOworCWhmYTM4NHhfZHJ2cl9oYW5kb3ZlcihodywgYWRkcik7CisJREJGRVhJVDsKKwlyZXR1cm47Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIHByaXNtMm1nbXRfcHN0cjJieXRlc3RyCisqCisqIENvbnZlcnQgdGhlIHBzdHIgZGF0YSBpbiB0aGUgV0xBTiBtZXNzYWdlIHN0cnVjdHVyZSBpbnRvIGFuIGhmYTM4NHgKKyogYnl0ZSBzdHJpbmcgZm9ybWF0LgorKgorKiBBcmd1bWVudHM6CisqCWJ5dGVzdHIJCWhmYTM4NHggYnl0ZSBzdHJpbmcgZGF0YSB0eXBlCisqCXBzdHIJCXdsYW4gbWVzc2FnZSBkYXRhCisqCisqIFJldHVybnM6CisqCU5vdGhpbmcKKyoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCit2b2lkIHByaXNtMm1nbXRfcHN0cjJieXRlc3RyKGhmYTM4NHhfYnl0ZXN0cl90ICpieXRlc3RyLCBwODAyMTFwc3RyZF90ICpwc3RyKQoreworCURCRkVOVEVSOworCisJYnl0ZXN0ci0+bGVuID0gaG9zdDJoZmEzODR4XzE2KChVSU5UMTYpKHBzdHItPmxlbikpOworCW1lbWNweShieXRlc3RyLT5kYXRhLCBwc3RyLT5kYXRhLCBwc3RyLT5sZW4pOworCURCRkVYSVQ7Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIHByaXNtMm1nbXRfcHN0cjJieXRlYXJlYQorKgorKiBDb252ZXJ0IHRoZSBwc3RyIGRhdGEgaW4gdGhlIFdMQU4gbWVzc2FnZSBzdHJ1Y3R1cmUgaW50byBhbiBoZmEzODR4CisqIGJ5dGUgYXJlYSBmb3JtYXQuCisqCisqIEFyZ3VtZW50czoKKyoJYnl0ZWFyZWEJaGZhMzg0eCBieXRlIGFyZWEgZGF0YSB0eXBlCisqCXBzdHIJCXdsYW4gbWVzc2FnZSBkYXRhCisqCisqIFJldHVybnM6CisqCU5vdGhpbmcKKyoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCit2b2lkIHByaXNtMm1nbXRfcHN0cjJieXRlYXJlYShVSU5UOCAqYnl0ZWFyZWEsIHA4MDIxMXBzdHJkX3QgKnBzdHIpCit7CisJREJGRU5URVI7CisKKwltZW1jcHkoYnl0ZWFyZWEsIHBzdHItPmRhdGEsIHBzdHItPmxlbik7CisJREJGRVhJVDsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogcHJpc20ybWdtdF9ieXRlc3RyMnBzdHIKKyoKKyogQ29udmVydCB0aGUgZGF0YSBpbiBhbiBoZmEzODR4IGJ5dGUgc3RyaW5nIGZvcm1hdCBpbnRvIGEKKyogcHN0ciBpbiB0aGUgV0xBTiBtZXNzYWdlLgorKgorKiBBcmd1bWVudHM6CisqCWJ5dGVzdHIJCWhmYTM4NHggYnl0ZSBzdHJpbmcgZGF0YSB0eXBlCisqCW1zZwkJd2xhbiBtZXNzYWdlCisqCisqIFJldHVybnM6CisqCU5vdGhpbmcKKyoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCit2b2lkIHByaXNtMm1nbXRfYnl0ZXN0cjJwc3RyKGhmYTM4NHhfYnl0ZXN0cl90ICpieXRlc3RyLCBwODAyMTFwc3RyZF90ICpwc3RyKQoreworCURCRkVOVEVSOworCisJcHN0ci0+bGVuID0gKFVJTlQ4KShoZmEzODR4Mmhvc3RfMTYoKFVJTlQxNikoYnl0ZXN0ci0+bGVuKSkpOworCW1lbWNweShwc3RyLT5kYXRhLCBieXRlc3RyLT5kYXRhLCBwc3RyLT5sZW4pOworCURCRkVYSVQ7Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIHByaXNtMm1nbXRfYnl0ZWFyZWEycHN0cgorKgorKiBDb252ZXJ0IHRoZSBkYXRhIGluIGFuIGhmYTM4NHggYnl0ZSBhcmVhIGZvcm1hdCBpbnRvIGEgcHN0cgorKiBpbiB0aGUgV0xBTiBtZXNzYWdlLgorKgorKiBBcmd1bWVudHM6CisqCWJ5dGVhcmVhCWhmYTM4NHggYnl0ZSBhcmVhIGRhdGEgdHlwZQorKgltc2cJCXdsYW4gbWVzc2FnZQorKgorKiBSZXR1cm5zOgorKglOb3RoaW5nCisqCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKwordm9pZCBwcmlzbTJtZ210X2J5dGVhcmVhMnBzdHIoVUlOVDggKmJ5dGVhcmVhLCBwODAyMTFwc3RyZF90ICpwc3RyLCBpbnQgbGVuKQoreworCURCRkVOVEVSOworCisJcHN0ci0+bGVuID0gKFVJTlQ4KWxlbjsKKwltZW1jcHkocHN0ci0+ZGF0YSwgYnl0ZWFyZWEsIGxlbik7CisJREJGRVhJVDsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogcHJpc20ybWdtdF9wcmlzbTJpbnQycDgwMjExaW50CisqCisqIENvbnZlcnQgYW4gaGZhMzg0eCBpbnRlZ2VyIGludG8gYSB3bGFuIGludGVnZXIKKyoKKyogQXJndW1lbnRzOgorKglwcmlzbTJlbnVtCXBvaW50ZXIgdG8gaGZhMzg0eCBpbnRlZ2VyCisqCXdsYW5lbnVtCXBvaW50ZXIgdG8gcDgwMjExIGludGVnZXIKKyoKKyogUmV0dXJuczoKKyoJTm90aGluZworKgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3ZvaWQgcHJpc20ybWdtdF9wcmlzbTJpbnQycDgwMjExaW50KFVJTlQxNiAqcHJpc20yaW50LCBVSU5UMzIgKndsYW5pbnQpCit7CisJREJGRU5URVI7CisKKwkqd2xhbmludCA9IChVSU5UMzIpaGZhMzg0eDJob3N0XzE2KCpwcmlzbTJpbnQpOworCURCRkVYSVQ7Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIHByaXNtMm1nbXRfcDgwMjExaW50MnByaXNtMmludAorKgorKiBDb252ZXJ0IGEgd2xhbiBpbnRlZ2VyIGludG8gYW4gaGZhMzg0eCBpbnRlZ2VyCisqCisqIEFyZ3VtZW50czoKKyoJcHJpc20yZW51bQlwb2ludGVyIHRvIGhmYTM4NHggaW50ZWdlcgorKgl3bGFuZW51bQlwb2ludGVyIHRvIHA4MDIxMSBpbnRlZ2VyCisqCisqIFJldHVybnM6CisqCU5vdGhpbmcKKyoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCit2b2lkIHByaXNtMm1nbXRfcDgwMjExaW50MnByaXNtMmludChVSU5UMTYgKnByaXNtMmludCwgVUlOVDMyICp3bGFuaW50KQoreworCURCRkVOVEVSOworCisJKnByaXNtMmludCA9IGhvc3QyaGZhMzg0eF8xNigoVUlOVDE2KSgqd2xhbmludCkpOworCURCRkVYSVQ7Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIHByaXNtMm1nbXRfcHJpc20yZW51bTJwODAyMTFlbnVtCisqCisqIENvbnZlcnQgdGhlIGhmYTM4NHggZW51bWVyYXRlZCBpbnQgaW50byBhIHA4MDIxMSBlbnVtZXJhdGVkIGludAorKgorKiBBcmd1bWVudHM6CisqCXByaXNtMmVudW0JcG9pbnRlciB0byBoZmEzODR4IGludGVnZXIKKyoJd2xhbmVudW0JcG9pbnRlciB0byBwODAyMTEgaW50ZWdlcgorKglyaWQJCWhmYTM4NHggcmVjb3JkIGlkCisqCisqIFJldHVybnM6CisqCU5vdGhpbmcKKyoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwordm9pZCBwcmlzbTJtZ210X3ByaXNtMmVudW0ycDgwMjExZW51bShVSU5UMTYgKnByaXNtMmVudW0sIFVJTlQzMiAqd2xhbmVudW0sIFVJTlQxNiByaWQpCit7CisJREJGRU5URVI7CisKKwkvKiBBdCB0aGUgbW9tZW50LCB0aGUgbmVlZCBmb3IgdGhpcyBmdW5jdGlvbmFsaXR5IGhhc24ndAorCXByZXNlbnRlZCBpdHNlbGYuIEFsbCB0aGUgd2xhbiBlbnVtZXJhdGVkIHZhbHVlcyBhcmUKKwlhIDEtdG8tMSBtYXRjaCBhZ2FpbnN0IHRoZSBQcmlzbTIgZW51bWVyYXRlZCB2YWx1ZXMqLworCURCRkVYSVQ7CisJcmV0dXJuOworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBwcmlzbTJtZ210X3A4MDIxMWVudW0ycHJpc20yZW51bQorKgorKiBDb252ZXJ0IHRoZSBwODAyMTEgZW51bWVyYXRlZCBpbnQgaW50byBhbiBoZmEzODR4IGVudW1lcmF0ZWQgaW50CisqCisqIEFyZ3VtZW50czoKKyoJcHJpc20yZW51bQlwb2ludGVyIHRvIGhmYTM4NHggaW50ZWdlcgorKgl3bGFuZW51bQlwb2ludGVyIHRvIHA4MDIxMSBpbnRlZ2VyCisqCXJpZAkJaGZhMzg0eCByZWNvcmQgaWQKKyoKKyogUmV0dXJuczoKKyoJTm90aGluZworKgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCit2b2lkIHByaXNtMm1nbXRfcDgwMjExZW51bTJwcmlzbTJlbnVtKFVJTlQxNiAqcHJpc20yZW51bSwgVUlOVDMyICp3bGFuZW51bSwgVUlOVDE2IHJpZCkKK3sKKwlEQkZFTlRFUjsKKworCS8qIEF0IHRoZSBtb21lbnQsIHRoZSBuZWVkIGZvciB0aGlzIGZ1bmN0aW9uYWxpdHkgaGFzbid0CisJcHJlc2VudGVkIGl0c2VsZi4gQWxsIHRoZSB3bGFuIGVudW1lcmF0ZWQgdmFsdWVzIGFyZQorCWEgMS10by0xIG1hdGNoIGFnYWluc3QgdGhlIFByaXNtMiBlbnVtZXJhdGVkIHZhbHVlcyovCisJREJGRVhJVDsKKwlyZXR1cm47Cit9CisKKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogcHJpc20ybWdtdF9nZXRfb3ByYXRlc2V0CisqCisqIENvbnZlcnQgdGhlIGhmYTM4NHggYml0IGFyZWEgaW50byBhIHdsYW4gb2N0ZXQgc3RyaW5nLgorKgorKiBBcmd1bWVudHM6CisqCXJhdGUJCVByaXNtMiBiaXQgYXJlYQorKglwc3RyCQl3bGFuIG9jdGV0IHN0cmluZworKgorKiBSZXR1cm5zOgorKglOb3RoaW5nCisqCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3ZvaWQgcHJpc20ybWdtdF9nZXRfb3ByYXRlc2V0KFVJTlQxNiAqcmF0ZSwgcDgwMjExcHN0cmRfdCAqcHN0cikKK3sKKwlVSU5UOAlsZW47CisJVUlOVDgJKmRhdGFyYXRlOworCisJREJGRU5URVI7CisKKwlsZW4gPSAwOworCWRhdGFyYXRlID0gcHN0ci0+ZGF0YTsKKworIAkvKiAxIE1icHMgKi8KKwlpZiAoIEJJVDAgJiAoKnJhdGUpICkgeworCQlsZW4gKz0gKFVJTlQ4KTE7CisJCSpkYXRhcmF0ZSA9IChVSU5UOCkyOworCQlkYXRhcmF0ZSsrOworCX0KKworIAkvKiAyIE1icHMgKi8KKwlpZiAoIEJJVDEgJiAoKnJhdGUpICkgeworCQlsZW4gKz0gKFVJTlQ4KTE7CisJCSpkYXRhcmF0ZSA9IChVSU5UOCk0OworCQlkYXRhcmF0ZSsrOworCX0KKworIAkvKiA1LjUgTWJwcyAqLworCWlmICggQklUMiAmICgqcmF0ZSkgKSB7CisJCWxlbiArPSAoVUlOVDgpMTsKKwkJKmRhdGFyYXRlID0gKFVJTlQ4KTExOworCQlkYXRhcmF0ZSsrOworCX0KKworIAkvKiAxMSBNYnBzICovCisJaWYgKCBCSVQzICYgKCpyYXRlKSApIHsKKwkJbGVuICs9IChVSU5UOCkxOworCQkqZGF0YXJhdGUgPSAoVUlOVDgpMjI7CisJCWRhdGFyYXRlKys7CisJfQorCisJcHN0ci0+bGVuID0gbGVuOworCisJREJGRVhJVDsKKwlyZXR1cm47Cit9CisKKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogcHJpc20ybWdtdF9zZXRfb3ByYXRlc2V0CisqCisqIENvbnZlcnQgdGhlIHdsYW4gb2N0ZXQgc3RyaW5nIGludG8gYW4gaGZhMzg0eCBiaXQgYXJlYS4KKyoKKyogQXJndW1lbnRzOgorKglyYXRlCQlQcmlzbTIgYml0IGFyZWEKKyoJcHN0cgkJd2xhbiBvY3RldCBzdHJpbmcKKyoKKyogUmV0dXJuczoKKyoJTm90aGluZworKgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCit2b2lkIHByaXNtMm1nbXRfc2V0X29wcmF0ZXNldChVSU5UMTYgKnJhdGUsIHA4MDIxMXBzdHJkX3QgKnBzdHIpCit7CisJVUlOVDgJKmRhdGFyYXRlOworCWludAlpOworCisJREJGRU5URVI7CisKKwkqcmF0ZSA9IDA7CisKKwlkYXRhcmF0ZSA9IHBzdHItPmRhdGE7CisKKwlmb3IgKCBpPTA7IGkgPCBwc3RyLT5sZW47IGkrKywgZGF0YXJhdGUrKyApIHsKKwkJc3dpdGNoICgqZGF0YXJhdGUpIHsKKwkJY2FzZSAyOiAvKiAxIE1icHMgKi8KKwkJCSpyYXRlIHw9IEJJVDA7CisJCQlicmVhazsKKwkJY2FzZSA0OiAvKiAyIE1icHMgKi8KKwkJCSpyYXRlIHw9IEJJVDE7CisJCQlicmVhazsKKwkJY2FzZSAxMTogLyogNS41IE1icHMgKi8KKwkJCSpyYXRlIHw9IEJJVDI7CisJCQlicmVhazsKKwkJY2FzZSAyMjogLyogMTEgTWJwcyAqLworCQkJKnJhdGUgfD0gQklUMzsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJV0xBTl9MT0dfREVCVUcoMSwgIlVucmVjb2dpbnplZCBSYXRlIG9mICVkXG4iLAorCQkJCSpkYXRhcmF0ZSk7CisJCQlicmVhazsKKwkJfQorCX0KKworCURCRkVYSVQ7CisJcmV0dXJuOworfQorCisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIHByaXNtMm1nbXRfZ2V0X2dycGFkZHIKKyoKKyogUmV0cmlldmVzIGEgcGFydGljdWxhciBncm91cCBhZGRyZXNzIGZyb20gdGhlIGxpc3Qgb2YKKyogZ3JvdXAgYWRkcmVzc2VzLgorKgorKiBBcmd1bWVudHM6CisqCWRpZAkJbWliaXRlbSBkaWQKKyoJcHN0cgkJd2xhbiBvY3RldCBzdHJpbmcKKyoJcHJpdgkJcHJpc20yIGRyaXZlciBwcml2YXRlIGRhdGEgc3RydWN0dXJlCisqCisqIFJldHVybnM6CisqCU5vdGhpbmcKKyoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwordm9pZCBwcmlzbTJtZ210X2dldF9ncnBhZGRyKFVJTlQzMiBkaWQsIHA4MDIxMXBzdHJkX3QgKnBzdHIsCisJaGZhMzg0eF90ICpodyApCit7CisJaW50CWluZGV4OworCisJREJGRU5URVI7CisKKwlpbmRleCA9IHByaXNtMm1nbXRfZ2V0X2dycGFkZHJfaW5kZXgoZGlkKTsKKworCWlmICggaW5kZXggPj0gMCApIHsKKwkJcHN0ci0+bGVuID0gV0xBTl9BRERSX0xFTjsKKwkJbWVtY3B5KHBzdHItPmRhdGEsIGh3LT5kb3QxMV9ncnBfYWRkcltpbmRleF0sCisJCQlXTEFOX0FERFJfTEVOKTsKKwl9CisKKwlEQkZFWElUOworCXJldHVybjsKK30KKworCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBwcmlzbTJtZ210X3NldF9ncnBhZGRyCisqCisqIENvbnZlcnQgdGhlIHdsYW4gb2N0ZXQgc3RyaW5nIGludG8gYW4gaGZhMzg0eCBiaXQgYXJlYS4KKyoKKyogQXJndW1lbnRzOgorKglkaWQJCW1pYml0ZW0gZGlkCisqCWJ1ZgorKglncm91cHMKKyoKKyogUmV0dXJuczoKKyoJMAlTdWNjZXNzCisqCSEwCUVycm9yCisqCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK2ludCBwcmlzbTJtZ210X3NldF9ncnBhZGRyKFVJTlQzMiBkaWQsIFVJTlQ4ICpwcmlzbTJidWYsCisJcDgwMjExcHN0cmRfdCAqcHN0ciwgaGZhMzg0eF90ICpodyApCit7CisJVUlOVDgJbm9fYWRkcltXTEFOX0FERFJfTEVOXTsKKwlpbnQJaW5kZXg7CisKKwlEQkZFTlRFUjsKKworCW1lbXNldChub19hZGRyLCAwLCBXTEFOX0FERFJfTEVOKTsKKwlpZiAobWVtY21wKG5vX2FkZHIsIHBzdHItPmRhdGEsIFdMQU5fQUREUl9MRU4pICE9IDApIHsKKworCQkvKgorCQkqKiBUaGUgYWRkcmVzcyBpcyBOT1QgMCBzbyB3ZSBhcmUgImFkZGluZyIgYW4gYWRkcmVzcyB0byB0aGUKKwkJKiogZ3JvdXAgYWRkcmVzcyBsaXN0LiAgQ2hlY2sgdG8gbWFrZSBzdXJlIHdlIGFyZW4ndCB0cnlpbmcKKwkJKiogdG8gYWRkIG1vcmUgdGhhbiB0aGUgbWF4aW11bSBhbGxvd2VkIG51bWJlciBvZiBncm91cAorCQkqKiBhZGRyZXNzZXMgaW4gdGhlIGxpc3QuICBUaGUgbmV3IGFkZHJlc3MgaXMgYWRkZWQgdG8gdGhlCisJCSoqIGVuZCBvZiB0aGUgbGlzdCByZWdhcmRsZXNzIG9mIHRoZSBESUQgdXNlZCB0byBhZGQgdGhlCisJCSoqIGFkZHJlc3MuCisJCSovCisKKwkJaWYgKGh3LT5kb3QxMV9ncnBjbnQgPj0gTUFYX0dSUF9BRERSKSByZXR1cm4oLTEpOworCisJCW1lbWNweShody0+ZG90MTFfZ3JwX2FkZHJbaHctPmRvdDExX2dycGNudF0sIHBzdHItPmRhdGEsCisJCQkJCQkJCSBXTEFOX0FERFJfTEVOKTsKKwkJaHctPmRvdDExX2dycGNudCArPSAxOworCX0gZWxzZSB7CisKKwkJLyoKKwkJKiogVGhlIGFkZHJlc3MgaXMgMC4gIEludGVycHJldCB0aGlzIGFzICJkZWxldGluZyIgYW4gYWRkcmVzcworCQkqKiBmcm9tIHRoZSBncm91cCBhZGRyZXNzIGxpc3QuICBHZXQgdGhlIGFkZHJlc3MgaW5kZXggZnJvbQorCQkqKiB0aGUgRElELiAgSWYgdGhpcyBpcyB3aXRoaW4gdGhlIHJhbmdlIG9mIHVzZWQgYWRkcmVzc2VzLAorCQkqKiB0aGVuIGRlbGV0ZSB0aGUgc3BlY2lmaWVkIGFkZHJlc3MgYnkgc2hpZnRpbmcgYWxsIGZvbGxvd2luZworCQkqKiBhZGRyZXNzZXMgZG93bi4gIFRoZW4gY2xlYXIgdGhlIGxhc3QgYWRkcmVzcyAod2hpY2ggc2hvdWxkCisJCSoqIG5vdyBiZSB1bnVzZWQpLiAgSWYgdGhlIGFkZHJlc3MgaW5kZXggaXMgTk9UIHdpdGhpbiB0aGUKKwkJKiogcmFuZ2Ugb2YgdXNlZCBhZGRyZXNzZXMsIHRoZW4ganVzdCBpZ25vcmUgdGhlIGFkZHJlc3MuCisJCSovCisKKwkJaW5kZXggPSBwcmlzbTJtZ210X2dldF9ncnBhZGRyX2luZGV4KGRpZCk7CisJCWlmIChpbmRleCA+PSAwICYmIGluZGV4IDwgaHctPmRvdDExX2dycGNudCkgeworCQkJaHctPmRvdDExX2dycGNudCAtPSAxOworCQkJbWVtbW92ZShody0+ZG90MTFfZ3JwX2FkZHJbaW5kZXhdLAorCQkJCWh3LT5kb3QxMV9ncnBfYWRkcltpbmRleCArIDFdLAorCQkJCSgoaHctPmRvdDExX2dycGNudCktaW5kZXgpICogV0xBTl9BRERSX0xFTik7CisJCQltZW1zZXQoaHctPmRvdDExX2dycF9hZGRyW2h3LT5kb3QxMV9ncnBjbnRdLCAwLAorCQkJCQkJCQkgV0xBTl9BRERSX0xFTik7CisJCX0KKwl9CisKKwlEQkZFWElUOworCXJldHVybigwKTsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogcHJpc20ybWdtdF9nZXRfZ3JwYWRkcl9pbmRleAorKgorKiBHZXRzIHRoZSBpbmRleCBpbiB0aGUgZ3JvdXAgYWRkcmVzcyBsaXN0IGJhc2VkIG9uIHRoZSBkaWQuCisqCisqIEFyZ3VtZW50czoKKyoJZGlkCQltaWJpdGVtIGRpZAorKgorKiBSZXR1cm5zOgorKgk+PSAwCUlmIHZhbGlkIGRpZAorKgk8IDAJSWYgbm90IHZhbGlkIGRpZAorKgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitpbnQgcHJpc20ybWdtdF9nZXRfZ3JwYWRkcl9pbmRleCggVUlOVDMyIGRpZCApCit7CisJaW50CWluZGV4OworCisJREJGRU5URVI7CisKKwlpbmRleCA9IC0xOworCisJc3dpdGNoIChkaWQpIHsKKwljYXNlIERJRG1pYl9kb3QxMW1hY19kb3QxMUdyb3VwQWRkcmVzc2VzVGFibGVfZG90MTFBZGRyZXNzMToKKwkJaW5kZXggPSAwOworCQlicmVhazsKKwljYXNlIERJRG1pYl9kb3QxMW1hY19kb3QxMUdyb3VwQWRkcmVzc2VzVGFibGVfZG90MTFBZGRyZXNzMjoKKwkJaW5kZXggPSAxOworCQlicmVhazsKKwljYXNlIERJRG1pYl9kb3QxMW1hY19kb3QxMUdyb3VwQWRkcmVzc2VzVGFibGVfZG90MTFBZGRyZXNzMzoKKwkJaW5kZXggPSAyOworCQlicmVhazsKKwljYXNlIERJRG1pYl9kb3QxMW1hY19kb3QxMUdyb3VwQWRkcmVzc2VzVGFibGVfZG90MTFBZGRyZXNzNDoKKwkJaW5kZXggPSAzOworCQlicmVhazsKKwljYXNlIERJRG1pYl9kb3QxMW1hY19kb3QxMUdyb3VwQWRkcmVzc2VzVGFibGVfZG90MTFBZGRyZXNzNToKKwkJaW5kZXggPSA0OworCQlicmVhazsKKwljYXNlIERJRG1pYl9kb3QxMW1hY19kb3QxMUdyb3VwQWRkcmVzc2VzVGFibGVfZG90MTFBZGRyZXNzNjoKKwkJaW5kZXggPSA1OworCQlicmVhazsKKwljYXNlIERJRG1pYl9kb3QxMW1hY19kb3QxMUdyb3VwQWRkcmVzc2VzVGFibGVfZG90MTFBZGRyZXNzNzoKKwkJaW5kZXggPSA2OworCQlicmVhazsKKwljYXNlIERJRG1pYl9kb3QxMW1hY19kb3QxMUdyb3VwQWRkcmVzc2VzVGFibGVfZG90MTFBZGRyZXNzODoKKwkJaW5kZXggPSA3OworCQlicmVhazsKKwljYXNlIERJRG1pYl9kb3QxMW1hY19kb3QxMUdyb3VwQWRkcmVzc2VzVGFibGVfZG90MTFBZGRyZXNzOToKKwkJaW5kZXggPSA4OworCQlicmVhazsKKwljYXNlIERJRG1pYl9kb3QxMW1hY19kb3QxMUdyb3VwQWRkcmVzc2VzVGFibGVfZG90MTFBZGRyZXNzMTA6CisJCWluZGV4ID0gOTsKKwkJYnJlYWs7CisJY2FzZSBESURtaWJfZG90MTFtYWNfZG90MTFHcm91cEFkZHJlc3Nlc1RhYmxlX2RvdDExQWRkcmVzczExOgorCQlpbmRleCA9IDEwOworCQlicmVhazsKKwljYXNlIERJRG1pYl9kb3QxMW1hY19kb3QxMUdyb3VwQWRkcmVzc2VzVGFibGVfZG90MTFBZGRyZXNzMTI6CisJCWluZGV4ID0gMTE7CisJCWJyZWFrOworCWNhc2UgRElEbWliX2RvdDExbWFjX2RvdDExR3JvdXBBZGRyZXNzZXNUYWJsZV9kb3QxMUFkZHJlc3MxMzoKKwkJaW5kZXggPSAxMjsKKwkJYnJlYWs7CisJY2FzZSBESURtaWJfZG90MTFtYWNfZG90MTFHcm91cEFkZHJlc3Nlc1RhYmxlX2RvdDExQWRkcmVzczE0OgorCQlpbmRleCA9IDEzOworCQlicmVhazsKKwljYXNlIERJRG1pYl9kb3QxMW1hY19kb3QxMUdyb3VwQWRkcmVzc2VzVGFibGVfZG90MTFBZGRyZXNzMTU6CisJCWluZGV4ID0gMTQ7CisJCWJyZWFrOworCWNhc2UgRElEbWliX2RvdDExbWFjX2RvdDExR3JvdXBBZGRyZXNzZXNUYWJsZV9kb3QxMUFkZHJlc3MxNjoKKwkJaW5kZXggPSAxNTsKKwkJYnJlYWs7CisJY2FzZSBESURtaWJfZG90MTFtYWNfZG90MTFHcm91cEFkZHJlc3Nlc1RhYmxlX2RvdDExQWRkcmVzczE3OgorCQlpbmRleCA9IDE2OworCQlicmVhazsKKwljYXNlIERJRG1pYl9kb3QxMW1hY19kb3QxMUdyb3VwQWRkcmVzc2VzVGFibGVfZG90MTFBZGRyZXNzMTg6CisJCWluZGV4ID0gMTc7CisJCWJyZWFrOworCWNhc2UgRElEbWliX2RvdDExbWFjX2RvdDExR3JvdXBBZGRyZXNzZXNUYWJsZV9kb3QxMUFkZHJlc3MxOToKKwkJaW5kZXggPSAxODsKKwkJYnJlYWs7CisJY2FzZSBESURtaWJfZG90MTFtYWNfZG90MTFHcm91cEFkZHJlc3Nlc1RhYmxlX2RvdDExQWRkcmVzczIwOgorCQlpbmRleCA9IDE5OworCQlicmVhazsKKwljYXNlIERJRG1pYl9kb3QxMW1hY19kb3QxMUdyb3VwQWRkcmVzc2VzVGFibGVfZG90MTFBZGRyZXNzMjE6CisJCWluZGV4ID0gMjA7CisJCWJyZWFrOworCWNhc2UgRElEbWliX2RvdDExbWFjX2RvdDExR3JvdXBBZGRyZXNzZXNUYWJsZV9kb3QxMUFkZHJlc3MyMjoKKwkJaW5kZXggPSAyMTsKKwkJYnJlYWs7CisJY2FzZSBESURtaWJfZG90MTFtYWNfZG90MTFHcm91cEFkZHJlc3Nlc1RhYmxlX2RvdDExQWRkcmVzczIzOgorCQlpbmRleCA9IDIyOworCQlicmVhazsKKwljYXNlIERJRG1pYl9kb3QxMW1hY19kb3QxMUdyb3VwQWRkcmVzc2VzVGFibGVfZG90MTFBZGRyZXNzMjQ6CisJCWluZGV4ID0gMjM7CisJCWJyZWFrOworCWNhc2UgRElEbWliX2RvdDExbWFjX2RvdDExR3JvdXBBZGRyZXNzZXNUYWJsZV9kb3QxMUFkZHJlc3MyNToKKwkJaW5kZXggPSAyNDsKKwkJYnJlYWs7CisJY2FzZSBESURtaWJfZG90MTFtYWNfZG90MTFHcm91cEFkZHJlc3Nlc1RhYmxlX2RvdDExQWRkcmVzczI2OgorCQlpbmRleCA9IDI1OworCQlicmVhazsKKwljYXNlIERJRG1pYl9kb3QxMW1hY19kb3QxMUdyb3VwQWRkcmVzc2VzVGFibGVfZG90MTFBZGRyZXNzMjc6CisJCWluZGV4ID0gMjY7CisJCWJyZWFrOworCWNhc2UgRElEbWliX2RvdDExbWFjX2RvdDExR3JvdXBBZGRyZXNzZXNUYWJsZV9kb3QxMUFkZHJlc3MyODoKKwkJaW5kZXggPSAyNzsKKwkJYnJlYWs7CisJY2FzZSBESURtaWJfZG90MTFtYWNfZG90MTFHcm91cEFkZHJlc3Nlc1RhYmxlX2RvdDExQWRkcmVzczI5OgorCQlpbmRleCA9IDI4OworCQlicmVhazsKKwljYXNlIERJRG1pYl9kb3QxMW1hY19kb3QxMUdyb3VwQWRkcmVzc2VzVGFibGVfZG90MTFBZGRyZXNzMzA6CisJCWluZGV4ID0gMjk7CisJCWJyZWFrOworCWNhc2UgRElEbWliX2RvdDExbWFjX2RvdDExR3JvdXBBZGRyZXNzZXNUYWJsZV9kb3QxMUFkZHJlc3MzMToKKwkJaW5kZXggPSAzMDsKKwkJYnJlYWs7CisJY2FzZSBESURtaWJfZG90MTFtYWNfZG90MTFHcm91cEFkZHJlc3Nlc1RhYmxlX2RvdDExQWRkcmVzczMyOgorCQlpbmRleCA9IDMxOworCQlicmVhazsKKwl9CisKKwlEQkZFWElUOworCXJldHVybiBpbmRleDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3ByaXNtMnN0YS5jIGIvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcHJpc20yc3RhLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMThhYTE1ZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3ByaXNtMnN0YS5jCkBAIC0wLDAgKzEsMjUwMiBAQAorLyogc3JjL3ByaXNtMi9kcml2ZXIvcHJpc20yc3RhLmMKKyoKKyogSW1wbGVtZW50cyB0aGUgc3RhdGlvbiBmdW5jdGlvbmFsaXR5IGZvciBwcmlzbTIKKyoKKyogQ29weXJpZ2h0IChDKSAxOTk5IEFic29sdXRlVmFsdWUgU3lzdGVtcywgSW5jLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyoKKyogbGludXgtd2xhbgorKgorKiAgIFRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgYXJlIHN1YmplY3QgdG8gdGhlIE1vemlsbGEgUHVibGljCisqICAgTGljZW5zZSBWZXJzaW9uIDEuMSAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUKKyogICBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YKKyogICB0aGUgTGljZW5zZSBhdCBodHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC8KKyoKKyogICBTb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMKKyogICBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yCisqICAgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nCisqICAgcmlnaHRzIGFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyoKKyogICBBbHRlcm5hdGl2ZWx5LCB0aGUgY29udGVudHMgb2YgdGhpcyBmaWxlIG1heSBiZSB1c2VkIHVuZGVyIHRoZQorKiAgIHRlcm1zIG9mIHRoZSBHTlUgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyICh0aGUgIkdQTCIpLCBpbiB3aGljaAorKiAgIGNhc2UgdGhlIHByb3Zpc2lvbnMgb2YgdGhlIEdQTCBhcmUgYXBwbGljYWJsZSBpbnN0ZWFkIG9mIHRoZQorKiAgIGFib3ZlLiAgSWYgeW91IHdpc2ggdG8gYWxsb3cgdGhlIHVzZSBvZiB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlCisqICAgb25seSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdQTCBhbmQgbm90IHRvIGFsbG93IG90aGVycyB0byB1c2UKKyogICB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIHVuZGVyIHRoZSBNUEwsIGluZGljYXRlIHlvdXIgZGVjaXNpb24KKyogICBieSBkZWxldGluZyB0aGUgcHJvdmlzaW9ucyBhYm92ZSBhbmQgcmVwbGFjZSB0aGVtIHdpdGggdGhlIG5vdGljZQorKiAgIGFuZCBvdGhlciBwcm92aXNpb25zIHJlcXVpcmVkIGJ5IHRoZSBHUEwuICBJZiB5b3UgZG8gbm90IGRlbGV0ZQorKiAgIHRoZSBwcm92aXNpb25zIGFib3ZlLCBhIHJlY2lwaWVudCBtYXkgdXNlIHlvdXIgdmVyc2lvbiBvZiB0aGlzCisqICAgZmlsZSB1bmRlciBlaXRoZXIgdGhlIE1QTCBvciB0aGUgR1BMLgorKgorKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKgorKiBJbnF1aXJpZXMgcmVnYXJkaW5nIHRoZSBsaW51eC13bGFuIE9wZW4gU291cmNlIHByb2plY3QgY2FuIGJlCisqIG1hZGUgZGlyZWN0bHkgdG86CisqCisqIEFic29sdXRlVmFsdWUgU3lzdGVtcyBJbmMuCisqIGluZm9AbGludXgtd2xhbi5jb20KKyogaHR0cDovL3d3dy5saW51eC13bGFuLmNvbQorKgorKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKgorKiBQb3J0aW9ucyBvZiB0aGUgZGV2ZWxvcG1lbnQgb2YgdGhpcyBzb2Z0d2FyZSB3ZXJlIGZ1bmRlZCBieQorKiBJbnRlcnNpbCBDb3Jwb3JhdGlvbiBhcyBwYXJ0IG9mIFBSSVNNKFIpIGNoaXBzZXQgcHJvZHVjdCBkZXZlbG9wbWVudC4KKyoKKyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyoKKyogVGhpcyBmaWxlIGltcGxlbWVudHMgdGhlIG1vZHVsZSBhbmQgbGludXggcGNtY2lhIHJvdXRpbmVzIGZvciB0aGUKKyogcHJpc20yIGRyaXZlci4KKyoKKyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyovCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKiBTeXN0ZW0gSW5jbHVkZXMgKi8KKyNkZWZpbmUgV0xBTl9EQlZBUglwcmlzbTJfZGVidWcKKworI2luY2x1ZGUgInZlcnNpb24uaCIKKworCisjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgorCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaWYgKExJTlVYX1ZFUlNJT05fQ09ERSA+PSBLRVJORUxfVkVSU0lPTigyLDQsMjUpKQorI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CisjZW5kaWYKKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3dpcmVsZXNzLmg+CisjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CisKKyNpZiAoTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiw1LDApKQorI2luY2x1ZGUgPGxpbnV4L3RxdWV1ZS5oPgorI2Vsc2UKKyNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KKyNlbmRpZgorCisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CisjaW5jbHVkZSA8bGludXgvaWZfYXJwLmg+CisKKyNpZiAoV0xBTl9IT1NUSUYgPT0gV0xBTl9QQ01DSUEpCisjaW5jbHVkZSA8cGNtY2lhL3ZlcnNpb24uaD4KKyNpbmNsdWRlIDxwY21jaWEvY3NfdHlwZXMuaD4KKyNpbmNsdWRlIDxwY21jaWEvY3MuaD4KKyNpbmNsdWRlIDxwY21jaWEvY2lzdHBsLmg+CisjaW5jbHVkZSA8cGNtY2lhL2RzLmg+CisjaW5jbHVkZSA8cGNtY2lhL2Npc3JlZy5oPgorI2VuZGlmCisKKyNpbmNsdWRlICJ3bGFuX2NvbXBhdC5oIgorCisjaWYgKChXTEFOX0hPU1RJRiA9PSBXTEFOX1BMWCkgfHwgKFdMQU5fSE9TVElGID09IFdMQU5fUENJKSkKKyNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNlbmRpZgorCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworLyogUHJvamVjdCBJbmNsdWRlcyAqLworCisjaW5jbHVkZSAicDgwMjExdHlwZXMuaCIKKyNpbmNsdWRlICJwODAyMTFoZHIuaCIKKyNpbmNsdWRlICJwODAyMTFtZ210LmgiCisjaW5jbHVkZSAicDgwMjExY29udi5oIgorI2luY2x1ZGUgInA4MDIxMW1zZy5oIgorI2luY2x1ZGUgInA4MDIxMW5ldGRldi5oIgorI2luY2x1ZGUgInA4MDIxMXJlcS5oIgorI2luY2x1ZGUgInA4MDIxMW1ldGFkZWYuaCIKKyNpbmNsdWRlICJwODAyMTFtZXRhc3RydWN0LmgiCisjaW5jbHVkZSAiaGZhMzg0eC5oIgorI2luY2x1ZGUgInByaXNtMm1nbXQuaCIKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKy8qIExvY2FsIENvbnN0YW50cyAqLworCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworLyogTG9jYWwgTWFjcm9zICovCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKiBMb2NhbCBUeXBlcyAqLworCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworLyogTG9jYWwgU3RhdGljIERlZmluaXRpb25zICovCisKKyNpZiAoV0xBTl9IT1NUSUYgPT0gV0xBTl9QQ01DSUEpCisjZGVmaW5lIERSSVZFUl9TVUZGSVgJIl9jcyIKKyNlbGlmIChXTEFOX0hPU1RJRiA9PSBXTEFOX1BMWCkKKyNkZWZpbmUgRFJJVkVSX1NVRkZJWAkiX3BseCIKK3R5cGVkZWYgY2hhciogZGV2X2luZm9fdDsKKyNlbGlmIChXTEFOX0hPU1RJRiA9PSBXTEFOX1BDSSkKKyNkZWZpbmUgRFJJVkVSX1NVRkZJWAkiX3BjaSIKK3R5cGVkZWYgY2hhciogZGV2X2luZm9fdDsKKyNlbGlmIChXTEFOX0hPU1RJRiA9PSBXTEFOX1VTQikKKyNkZWZpbmUgRFJJVkVSX1NVRkZJWAkiX3VzYiIKK3R5cGVkZWYgY2hhciogZGV2X2luZm9fdDsKKyNlbHNlCisjZXJyb3IgIkhPU1RJRiB1bnN1cHBvcnRlZCBvciB1bmRlZmluZWQhIgorI2VuZGlmCisKK3N0YXRpYyBjaGFyCQkqdmVyc2lvbiA9ICJwcmlzbTIiIERSSVZFUl9TVUZGSVggIi5vOiAiIFdMQU5fUkVMRUFTRTsKK3N0YXRpYyBkZXZfaW5mb190CWRldl9pbmZvID0gInByaXNtMiIgRFJJVkVSX1NVRkZJWDsKKworI2lmIChXTEFOX0hPU1RJRiA9PSBXTEFOX1BMWCB8fCBXTEFOX0hPU1RJRiA9PSBXTEFOX1BDSSkKKyNpZmRlZiBDT05GSUdfUE0KK3N0YXRpYyBpbnQgcHJpc20yc3RhX3N1c3BlbmRfcGNpKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpOworc3RhdGljIGludCBwcmlzbTJzdGFfcmVzdW1lX3BjaShzdHJ1Y3QgcGNpX2RldiAqcGRldik7CisjZW5kaWYKKyNlbmRpZgorCisjaWYgKFdMQU5fSE9TVElGID09IFdMQU5fUENJKQorCisjZW5kaWYgLyogV0xBTl9QQ0kgKi8KKworc3RhdGljIHdsYW5kZXZpY2VfdCAqY3JlYXRlX3dsYW4odm9pZCk7CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiAtLU1vZHVsZSBQYXJhbWV0ZXJzICovCisKK2ludCAgICAgIHByaXNtMl9yZXNldF9ob2xkdGltZT0zMDsJLyogUmVzZXQgaG9sZCB0aW1lIGluIG1zICovCitpbnQJIHByaXNtMl9yZXNldF9zZXR0bGV0aW1lPTEwMDsJLyogUmVzZXQgc2V0dGxlIHRpbWUgaW4gbXMgKi8KKworI2lmIChXTEFOX0hPU1RJRiA9PSBXTEFOX1VTQikKK3N0YXRpYyBpbnQJcHJpc20yX2RvcmVzZXQ9MDsJCS8qIERvIGEgcmVzZXQgYXQgaW5pdD8gKi8KKyNlbHNlCitzdGF0aWMgaW50ICAgICAgcHJpc20yX2RvcmVzZXQ9MTsJCS8qIERvIGEgcmVzZXQgYXQgaW5pdD8gKi8KK2ludCAgICAgICAgICAgICBwcmlzbTJfYmFwX3RpbWVvdXQ9MTAwMDsgICAgICAgIC8qIEJBUCB0aW1lb3V0ICovCitpbnQJCXByaXNtMl9pcnFfZXZyZWFkX21heD0yMDsJLyogTWF4aW11bSBudW1iZXIgb2YKKwkJCQkJCSAqIGV2X3JlYWRzIChsb29wcykKKwkJCQkJCSAqIGluIGlycSBoYW5kbGVyCisJCQkJCQkgKi8KKyNlbmRpZgorCisjaWZkZWYgV0xBTl9JTkNMVURFX0RFQlVHCitpbnQgcHJpc20yX2RlYnVnPTA7Cittb2R1bGVfcGFyYW0oIHByaXNtMl9kZWJ1ZywgaW50LCAwNjQ0KTsKK01PRFVMRV9QQVJNX0RFU0MocHJpc20yX2RlYnVnLCAicHJpc20yIGRlYnVnZ2luZyIpOworI2VuZGlmCisKK21vZHVsZV9wYXJhbSggcHJpc20yX2RvcmVzZXQsIGludCwgMDY0NCk7CitNT0RVTEVfUEFSTV9ERVNDKHByaXNtMl9kb3Jlc2V0LCAiSXNzdWUgYSByZXNldCBvbiBpbml0aWFsaXphdGlvbiIpOworCittb2R1bGVfcGFyYW0oIHByaXNtMl9yZXNldF9ob2xkdGltZSwgaW50LCAwNjQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoIHByaXNtMl9yZXNldF9ob2xkdGltZSwgInJlc2V0IGhvbGQgdGltZSBpbiBtcyIpOworbW9kdWxlX3BhcmFtKCBwcmlzbTJfcmVzZXRfc2V0dGxldGltZSwgaW50LCAwNjQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoIHByaXNtMl9yZXNldF9zZXR0bGV0aW1lLCAicmVzZXQgc2V0dGxlIHRpbWUgaW4gbXMiKTsKKworI2lmIChXTEFOX0hPU1RJRiAhPSBXTEFOX1VTQikKK21vZHVsZV9wYXJhbSggcHJpc20yX2JhcF90aW1lb3V0LCBpbnQsIDA2NDQpOworTU9EVUxFX1BBUk1fREVTQyhwcmlzbTJfYmFwX3RpbWVvdXQsICJCdWZmZXJBY2Nlc3NQYXRoIFRpbWVvdXQgaW4gMTAqbiB1cyIpOworbW9kdWxlX3BhcmFtKCBwcmlzbTJfaXJxX2V2cmVhZF9tYXgsIGludCwgMDY0NCk7CitNT0RVTEVfUEFSTV9ERVNDKCBwcmlzbTJfaXJxX2V2cmVhZF9tYXgsICJNYXhpbWltIG51bWJlciBvZiBldmVudCByZWFkcyBpbiBpbnRlcnJ1cHQgaGFuZGxlciIpOworI2VuZGlmCisKK01PRFVMRV9MSUNFTlNFKCJEdWFsIE1QTC9HUEwiKTsKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKy8qIExvY2FsIEZ1bmN0aW9uIERlY2xhcmF0aW9ucyAqLworCitzdGF0aWMgaW50CXByaXNtMnN0YV9vcGVuKHdsYW5kZXZpY2VfdCAqd2xhbmRldik7CitzdGF0aWMgaW50CXByaXNtMnN0YV9jbG9zZSh3bGFuZGV2aWNlX3QgKndsYW5kZXYpOworc3RhdGljIHZvaWQJcHJpc20yc3RhX3Jlc2V0KHdsYW5kZXZpY2VfdCAqd2xhbmRldiApOworc3RhdGljIGludCAgICAgIHByaXNtMnN0YV90eGZyYW1lKHdsYW5kZXZpY2VfdCAqd2xhbmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgcDgwMjExX2hkcl90ICpwODAyMTFfaGRyLCBwODAyMTFfbWV0YXdlcF90ICpwODAyMTFfd2VwKTsKK3N0YXRpYyBpbnQJcHJpc20yc3RhX21sbWVyZXF1ZXN0KHdsYW5kZXZpY2VfdCAqd2xhbmRldiwgcDgwMjExbXNnX3QgKm1zZyk7CitzdGF0aWMgaW50CXByaXNtMnN0YV9nZXRjYXJkaW5mbyh3bGFuZGV2aWNlX3QgKndsYW5kZXYpOworc3RhdGljIGludAlwcmlzbTJzdGFfZ2xvYmFsc2V0dXAod2xhbmRldmljZV90ICp3bGFuZGV2KTsKK3N0YXRpYyBpbnQgICAgICBwcmlzbTJzdGFfc2V0bXVsdGljYXN0KHdsYW5kZXZpY2VfdCAqd2xhbmRldiwKKwkJCQkgICAgICAgbmV0ZGV2aWNlX3QgKmRldik7CisKK3N0YXRpYyB2b2lkCXByaXNtMnN0YV9pbmZfaGFuZG92ZXIoCisJCQl3bGFuZGV2aWNlX3QgKndsYW5kZXYsIGhmYTM4NHhfSW5mRnJhbWVfdCAqaW5mKTsKK3N0YXRpYyB2b2lkCXByaXNtMnN0YV9pbmZfdGFsbGllcygKKwkJCXdsYW5kZXZpY2VfdCAqd2xhbmRldiwgaGZhMzg0eF9JbmZGcmFtZV90ICppbmYpOworc3RhdGljIHZvaWQgICAgIHByaXNtMnN0YV9pbmZfaG9zdHNjYW5yZXN1bHRzKAorCQkJd2xhbmRldmljZV90ICp3bGFuZGV2LCBoZmEzODR4X0luZkZyYW1lX3QgKmluZik7CitzdGF0aWMgdm9pZAlwcmlzbTJzdGFfaW5mX3NjYW5yZXN1bHRzKAorCQkJd2xhbmRldmljZV90ICp3bGFuZGV2LCBoZmEzODR4X0luZkZyYW1lX3QgKmluZik7CitzdGF0aWMgdm9pZAlwcmlzbTJzdGFfaW5mX2NoaW5mb3Jlc3VsdHMoCisJCQl3bGFuZGV2aWNlX3QgKndsYW5kZXYsIGhmYTM4NHhfSW5mRnJhbWVfdCAqaW5mKTsKK3N0YXRpYyB2b2lkCXByaXNtMnN0YV9pbmZfbGlua3N0YXR1cygKKwkJCXdsYW5kZXZpY2VfdCAqd2xhbmRldiwgaGZhMzg0eF9JbmZGcmFtZV90ICppbmYpOworc3RhdGljIHZvaWQJcHJpc20yc3RhX2luZl9hc3NvY3N0YXR1cygKKwkJCXdsYW5kZXZpY2VfdCAqd2xhbmRldiwgaGZhMzg0eF9JbmZGcmFtZV90ICppbmYpOworc3RhdGljIHZvaWQJcHJpc20yc3RhX2luZl9hdXRocmVxKAorCQkJd2xhbmRldmljZV90ICp3bGFuZGV2LCBoZmEzODR4X0luZkZyYW1lX3QgKmluZik7CitzdGF0aWMgdm9pZAlwcmlzbTJzdGFfaW5mX2F1dGhyZXFfZGVmZXIoCisJCQl3bGFuZGV2aWNlX3QgKndsYW5kZXYsIGhmYTM4NHhfSW5mRnJhbWVfdCAqaW5mKTsKK3N0YXRpYyB2b2lkCXByaXNtMnN0YV9pbmZfcHN1c2VyY250KAorCQkJd2xhbmRldmljZV90ICp3bGFuZGV2LCBoZmEzODR4X0luZkZyYW1lX3QgKmluZik7CisKKyNpZmRlZiBDT05GSUdfUFJPQ19GUworc3RhdGljIGludAorcHJpc20yc3RhX3Byb2NfcmVhZCgKKwljaGFyCSpwYWdlLAorCWNoYXIJKipzdGFydCwKKwlvZmZfdAlvZmZzZXQsCisJaW50CWNvdW50LAorCWludAkqZW9mLAorCXZvaWQJKmRhdGEpOworI2VuZGlmCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKiBGdW5jdGlvbiBEZWZpbml0aW9ucyAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogZG1wbWVtCisqCisqIERlYnVnIHV0aWxpdHkgZnVuY3Rpb24gdG8gZHVtcCBtZW1vcnkgdG8gdGhlIGtlcm5lbCBkZWJ1ZyBsb2cuCisqCisqIEFyZ3VtZW50czoKKyoJYnVmCXB0ciBkYXRhIHdlIHdhbnQgZHVtcGVkCisqCWxlbglsZW5ndGggb2YgZGF0YQorKgorKiBSZXR1cm5zOgorKglub3RoaW5nCisqIFNpZGUgZWZmZWN0czoKKyoKKyogQ2FsbCBjb250ZXh0OgorKglwcm9jZXNzIHRocmVhZAorKglpbnRlcnJ1cHQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworaW5saW5lIHZvaWQgZG1wbWVtKHZvaWQgKmJ1ZiwgaW50IG4pCit7CisJaW50IGM7CisJZm9yICggYz0gMDsgYyA8IG47IGMrKykgeworCQlpZiAoIChjICUgMTYpID09IDAgKSBwcmludGsoS0VSTl9ERUJVRyJkbXBbJWRdOiAiLCBjKTsKKwkJcHJpbnRrKCIlMDJ4ICIsICgoVUlOVDgqKWJ1ZilbY10pOworCQlpZiAoIChjICUgMTYpID09IDE1ICkgcHJpbnRrKCJcbiIpOworCX0KKwlpZiAoIChjICUgMTYpICE9IDAgKSBwcmludGsoIlxuIik7Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIHByaXNtMnN0YV9vcGVuCisqCisqIFdMQU4gZGV2aWNlIG9wZW4gbWV0aG9kLiAgQ2FsbGVkIGZyb20gcDgwMjExbmV0ZGV2IHdoZW4ga2VybmVsCisqIGRldmljZSBvcGVuIChzdGFydCkgbWV0aG9kIGlzIGNhbGxlZCBpbiByZXNwb25zZSB0byB0aGUKKyogU0lPQ1NJSUZGTEFHUyBpb2N0bCBjaGFuZ2luZyB0aGUgZmxhZ3MgYml0IElGRl9VUAorKiBmcm9tIGNsZWFyIHRvIHNldC4KKyoKKyogQXJndW1lbnRzOgorKgl3bGFuZGV2CQl3bGFuIGRldmljZSBzdHJ1Y3R1cmUKKyoKKyogUmV0dXJuczoKKyoJMAlzdWNjZXNzCisqCT4wCWYvdyByZXBvcnRlZCBlcnJvcgorKgk8MAlkcml2ZXIgcmVwb3J0ZWQgZXJyb3IKKyoKKyogU2lkZSBlZmZlY3RzOgorKgorKiBDYWxsIGNvbnRleHQ6CisqCXByb2Nlc3MgdGhyZWFkCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyBpbnQgcHJpc20yc3RhX29wZW4od2xhbmRldmljZV90ICp3bGFuZGV2KQoreworCURCRkVOVEVSOworCisjaWZkZWYgQU5DSUVOVF9NT0RVTEVfQ09ERQorCU1PRF9JTkNfVVNFX0NPVU5UOworI2VuZGlmCisKKwkvKiBXZSBkb24ndCBjdXJyZW50bHkgaGF2ZSB0byBkbyBhbnl0aGluZyBlbHNlLgorCSAqIFRoZSBzZXR1cCBvZiB0aGUgTUFDIHNob3VsZCBiZSBzdWJzZXF1ZW50bHkgY29tcGxldGVkIHZpYQorCSAqIHRoZSBtbG1lIGNvbW1hbmRzLgorCSAqIEhpZ2hlciBsYXllcnMga25vdyB3ZSdyZSByZWFkeSBmcm9tIGRldi0+c3RhcnQ9PTEgYW5kCisJICogZGV2LT50YnVzeT09MC4gIE91ciByeCBwYXRoIGtub3dzIHRvIHBhc3MgdXAgcmVjZWl2ZWQvCisJICogZnJhbWVzIGJlY2F1c2Ugb2YgZGV2LT5mbGFncyZJRkZfVVAgaXMgdHJ1ZS4KKwkgKi8KKworCURCRkVYSVQ7CisJcmV0dXJuIDA7Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIHByaXNtMnN0YV9jbG9zZQorKgorKiBXTEFOIGRldmljZSBjbG9zZSBtZXRob2QuICBDYWxsZWQgZnJvbSBwODAyMTFuZXRkZXYgd2hlbiBrZXJuZWwKKyogZGV2aWNlIGNsb3NlIG1ldGhvZCBpcyBjYWxsZWQgaW4gcmVzcG9uc2UgdG8gdGhlCisqIFNJT0NTSUlGRkxBR1MgaW9jdGwgY2hhbmdpbmcgdGhlIGZsYWdzIGJpdCBJRkZfVVAKKyogZnJvbSBzZXQgdG8gY2xlYXIuCisqCisqIEFyZ3VtZW50czoKKyoJd2xhbmRldgkJd2xhbiBkZXZpY2Ugc3RydWN0dXJlCisqCisqIFJldHVybnM6CisqCTAJc3VjY2VzcworKgk+MAlmL3cgcmVwb3J0ZWQgZXJyb3IKKyoJPDAJZHJpdmVyIHJlcG9ydGVkIGVycm9yCisqCisqIFNpZGUgZWZmZWN0czoKKyoKKyogQ2FsbCBjb250ZXh0OgorKglwcm9jZXNzIHRocmVhZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgaW50IHByaXNtMnN0YV9jbG9zZSh3bGFuZGV2aWNlX3QgKndsYW5kZXYpCit7CisJREJGRU5URVI7CisKKyNpZmRlZiBBTkNJRU5UX01PRFVMRV9DT0RFCisJTU9EX0RFQ19VU0VfQ09VTlQ7CisjZW5kaWYKKworCS8qIFdlIGRvbid0IGN1cnJlbnRseSBoYXZlIHRvIGRvIGFueXRoaW5nIGVsc2UuCisJICogSGlnaGVyIGxheWVycyBrbm93IHdlJ3JlIG5vdCByZWFkeSBmcm9tIGRldi0+c3RhcnQ9PTAgYW5kCisJICogZGV2LT50YnVzeT09MS4gIE91ciByeCBwYXRoIGtub3dzIHRvIG5vdCBwYXNzIHVwIHJlY2VpdmVkCisJICogZnJhbWVzIGJlY2F1c2Ugb2YgZGV2LT5mbGFncyZJRkZfVVAgaXMgZmFsc2UuCisJICovCisKKwlEQkZFWElUOworCXJldHVybiAwOworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBwcmlzbTJzdGFfcmVzZXQKKyoKKyogTm90IGN1cnJlbnRseSBpbXBsZW50ZWQuCisqCisqIEFyZ3VtZW50czoKKyoJd2xhbmRldgkJd2xhbiBkZXZpY2Ugc3RydWN0dXJlCisqCW5vbmUKKyoKKyogUmV0dXJuczoKKyoJbm90aGluZworKgorKiBTaWRlIGVmZmVjdHM6CisqCisqIENhbGwgY29udGV4dDoKKyoJcHJvY2VzcyB0aHJlYWQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIHZvaWQgcHJpc20yc3RhX3Jlc2V0KHdsYW5kZXZpY2VfdCAqd2xhbmRldiApCit7CisJREJGRU5URVI7CisJREJGRVhJVDsKKwlyZXR1cm47Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIHByaXNtMnN0YV90eGZyYW1lCisqCisqIFRha2VzIGEgZnJhbWUgZnJvbSBwODAyMTEgYW5kIHF1ZXVlcyBpdCBmb3IgdHJhbnNtaXNzaW9uLgorKgorKiBBcmd1bWVudHM6CisqCXdsYW5kZXYJCXdsYW4gZGV2aWNlIHN0cnVjdHVyZQorKglwYgkJcGFja2V0IGJ1ZmZlciBzdHJ1Y3QuICBDb250YWlucyBhbiA4MDIuMTEKKyoJCQlkYXRhIGZyYW1lLgorKiAgICAgICBwODAyMTFfaGRyICAgICAgcG9pbnRzIHRvIHRoZSA4MDIuMTEgaGVhZGVyIGZvciB0aGUgcGFja2V0LgorKiBSZXR1cm5zOgorKgkwCQlTdWNjZXNzIGFuZCBtb3JlIGJ1ZmZzIGF2YWlsYWJsZQorKgkxCQlTdWNjZXNzIGJ1dCBubyBtb3JlIGJ1ZmZzCisqCTIJCUFsbG9jYXRpb24gZmFpbHVyZQorKgk0CQlCdWZmZXIgZnVsbCBvciBxdWV1ZSBidXN5CisqCisqIFNpZGUgZWZmZWN0czoKKyoKKyogQ2FsbCBjb250ZXh0OgorKglwcm9jZXNzIHRocmVhZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgaW50IHByaXNtMnN0YV90eGZyYW1lKHdsYW5kZXZpY2VfdCAqd2xhbmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCSAgICAgcDgwMjExX2hkcl90ICpwODAyMTFfaGRyLAorCQkJICAgICBwODAyMTFfbWV0YXdlcF90ICpwODAyMTFfd2VwKQoreworCWhmYTM4NHhfdAkJKmh3ID0gKGhmYTM4NHhfdCAqKXdsYW5kZXYtPnByaXY7CisJaW50CQkJcmVzdWx0OworCURCRkVOVEVSOworCisJLyogSWYgbmVjZXNzYXJ5LCBzZXQgdGhlIDgwMi4xMSBXRVAgYml0ICovCisJaWYgKCh3bGFuZGV2LT5ob3N0d2VwICYgKEhPU1RXRVBfUFJJVkFDWUlOVk9LRUQgfCBIT1NUV0VQX0VOQ1JZUFQpKSA9PSBIT1NUV0VQX1BSSVZBQ1lJTlZPS0VEKSB7CisJCXA4MDIxMV9oZHItPmEzLmZjIHw9IGhvc3QyaWVlZTE2KFdMQU5fU0VUX0ZDX0lTV0VQKDEpKTsKKwl9CisKKwlyZXN1bHQgPSBoZmEzODR4X2RydnJfdHhmcmFtZShodywgc2tiLCBwODAyMTFfaGRyLCBwODAyMTFfd2VwKTsKKworCURCRkVYSVQ7CisJcmV0dXJuIHJlc3VsdDsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogcHJpc20yc3RhX21sbWVyZXF1ZXN0CisqCisqIHdsYW4gY29tbWFuZCBtZXNzYWdlIGhhbmRsZXIuICBBbGwgd2UgZG8gaGVyZSBpcyBwYXNzIHRoZSBtZXNzYWdlCisqIG92ZXIgdG8gdGhlIHByaXNtMnN0YV9tZ210X2hhbmRsZXIuCisqCisqIEFyZ3VtZW50czoKKyoJd2xhbmRldgkJd2xhbiBkZXZpY2Ugc3RydWN0dXJlCisqCW1zZwkJd2xhbiBjb21tYW5kIG1lc3NhZ2UKKyogUmV0dXJuczoKKyoJMAkJc3VjY2VzcworKgk8MAkJc3VjY2Vzc2Z1bCBhY2NlcHRhbmNlIG9mIG1lc3NhZ2UsIGJ1dCB3ZSdyZQorKgkJCXdhaXRpbmcgZm9yIGFuIGFzeW5jIHByb2Nlc3MgdG8gZmluaXNoIGJlZm9yZQorKgkJCXdlJ3JlIGRvbmUgd2l0aCB0aGUgbXNnLiAgV2hlbiB0aGUgYXN5bmNoCisqCQkJcHJvY2VzcyBpcyBkb25lLCB3ZSdsbCBjYWxsIHRoZSBwODAyMTEKKyoJCQlmdW5jdGlvbiBwODAyMTFyZXFfY29uZmlybSgpIC4KKyoJPjAJCUFuIGVycm9yIG9jY3VycmVkIHdoaWxlIHdlIHdlcmUgaGFuZGxpbmcKKyoJCQl0aGUgbWVzc2FnZS4KKyoKKyogU2lkZSBlZmZlY3RzOgorKgorKiBDYWxsIGNvbnRleHQ6CisqCXByb2Nlc3MgdGhyZWFkCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyBpbnQgcHJpc20yc3RhX21sbWVyZXF1ZXN0KHdsYW5kZXZpY2VfdCAqd2xhbmRldiwgcDgwMjExbXNnX3QgKm1zZykKK3sKKyAgICAgICAgaGZhMzg0eF90ICAgICAgICAgICAgICAgKmh3ID0gKGhmYTM4NHhfdCAqKXdsYW5kZXYtPnByaXY7CisKKwlpbnQgcmVzdWx0ID0gMDsKKwlEQkZFTlRFUjsKKworCXN3aXRjaCggbXNnLT5tc2djb2RlICkKKwl7CisJY2FzZSBESURtc2dfZG90MTFyZXFfbWliZ2V0IDoKKwkJV0xBTl9MT0dfREVCVUcoMiwiUmVjZWl2ZWQgbWliZ2V0IHJlcXVlc3RcbiIpOworCQlyZXN1bHQgPSBwcmlzbTJtZ210X21pYnNldF9taWJnZXQod2xhbmRldiwgbXNnKTsKKwkJYnJlYWs7CisJY2FzZSBESURtc2dfZG90MTFyZXFfbWlic2V0IDoKKwkJV0xBTl9MT0dfREVCVUcoMiwiUmVjZWl2ZWQgbWlic2V0IHJlcXVlc3RcbiIpOworCQlyZXN1bHQgPSBwcmlzbTJtZ210X21pYnNldF9taWJnZXQod2xhbmRldiwgbXNnKTsKKwkJYnJlYWs7CisJY2FzZSBESURtc2dfZG90MTFyZXFfcG93ZXJtZ210IDoKKwkJV0xBTl9MT0dfREVCVUcoMiwiUmVjZWl2ZWQgcG93ZXJtZ210IHJlcXVlc3RcbiIpOworCQlyZXN1bHQgPSBwcmlzbTJtZ210X3Bvd2VybWdtdCh3bGFuZGV2LCBtc2cpOworCQlicmVhazsKKwljYXNlIERJRG1zZ19kb3QxMXJlcV9zY2FuIDoKKwkJV0xBTl9MT0dfREVCVUcoMiwiUmVjZWl2ZWQgc2NhbiByZXF1ZXN0XG4iKTsKKwkJcmVzdWx0ID0gcHJpc20ybWdtdF9zY2FuKHdsYW5kZXYsIG1zZyk7CisJCWJyZWFrOworCWNhc2UgRElEbXNnX2RvdDExcmVxX3NjYW5fcmVzdWx0cyA6CisJCVdMQU5fTE9HX0RFQlVHKDIsIlJlY2VpdmVkIHNjYW5fcmVzdWx0cyByZXF1ZXN0XG4iKTsKKwkJcmVzdWx0ID0gcHJpc20ybWdtdF9zY2FuX3Jlc3VsdHMod2xhbmRldiwgbXNnKTsKKwkJYnJlYWs7CisJY2FzZSBESURtc2dfZG90MTFyZXFfam9pbiA6CisJCVdMQU5fTE9HX0RFQlVHKDIsIlJlY2VpdmVkIGpvaW4gcmVxdWVzdFxuIik7CisJCXJlc3VsdCA9IHByaXNtMm1nbXRfam9pbih3bGFuZGV2LCBtc2cpOworCQlicmVhazsKKwljYXNlIERJRG1zZ19kb3QxMXJlcV9hdXRoZW50aWNhdGUgOgorCQlXTEFOX0xPR19ERUJVRygyLCJSZWNlaXZlZCBhdXRoZW50aWNhdGUgcmVxdWVzdFxuIik7CisJCXJlc3VsdCA9IHByaXNtMm1nbXRfYXV0aGVudGljYXRlKHdsYW5kZXYsIG1zZyk7CisJCWJyZWFrOworCWNhc2UgRElEbXNnX2RvdDExcmVxX2RlYXV0aGVudGljYXRlIDoKKwkJV0xBTl9MT0dfREVCVUcoMiwiUmVjZWl2ZWQgbWxtZSBkZWF1dGhlbnRpY2F0ZSByZXF1ZXN0XG4iKTsKKwkJcmVzdWx0ID0gcHJpc20ybWdtdF9kZWF1dGhlbnRpY2F0ZSh3bGFuZGV2LCBtc2cpOworCQlicmVhazsKKwljYXNlIERJRG1zZ19kb3QxMXJlcV9hc3NvY2lhdGUgOgorCQlXTEFOX0xPR19ERUJVRygyLCJSZWNlaXZlZCBtbG1lIGFzc29jaWF0ZSByZXF1ZXN0XG4iKTsKKwkJcmVzdWx0ID0gcHJpc20ybWdtdF9hc3NvY2lhdGUod2xhbmRldiwgbXNnKTsKKwkJYnJlYWs7CisJY2FzZSBESURtc2dfZG90MTFyZXFfcmVhc3NvY2lhdGUgOgorCQlXTEFOX0xPR19ERUJVRygyLCJSZWNlaXZlZCBtbG1lIHJlYXNzb2NpYXRlIHJlcXVlc3RcbiIpOworCQlyZXN1bHQgPSBwcmlzbTJtZ210X3JlYXNzb2NpYXRlKHdsYW5kZXYsIG1zZyk7CisJCWJyZWFrOworCWNhc2UgRElEbXNnX2RvdDExcmVxX2Rpc2Fzc29jaWF0ZSA6CisJCVdMQU5fTE9HX0RFQlVHKDIsIlJlY2VpdmVkIG1sbWUgZGlzYXNzb2NpYXRlIHJlcXVlc3RcbiIpOworCQlyZXN1bHQgPSBwcmlzbTJtZ210X2Rpc2Fzc29jaWF0ZSh3bGFuZGV2LCBtc2cpOworCQlicmVhazsKKwljYXNlIERJRG1zZ19kb3QxMXJlcV9yZXNldCA6CisJCVdMQU5fTE9HX0RFQlVHKDIsIlJlY2VpdmVkIG1sbWUgcmVzZXQgcmVxdWVzdFxuIik7CisJCXJlc3VsdCA9IHByaXNtMm1nbXRfcmVzZXQod2xhbmRldiwgbXNnKTsKKwkJYnJlYWs7CisJY2FzZSBESURtc2dfZG90MTFyZXFfc3RhcnQgOgorCQlXTEFOX0xPR19ERUJVRygyLCJSZWNlaXZlZCBtbG1lIHN0YXJ0IHJlcXVlc3RcbiIpOworCQlyZXN1bHQgPSBwcmlzbTJtZ210X3N0YXJ0KHdsYW5kZXYsIG1zZyk7CisJCWJyZWFrOworCS8qCisJICogUHJpc20yIHNwZWNpZmljIG1lc3NhZ2VzCisJICovCisJY2FzZSBESURtc2dfcDJyZXFfam9pbiA6CisJCVdMQU5fTE9HX0RFQlVHKDIsIlJlY2VpdmVkIHAyIGpvaW4gcmVxdWVzdFxuIik7CisJCXJlc3VsdCA9IHByaXNtMm1nbXRfcDJfam9pbih3bGFuZGV2LCBtc2cpOworCQlicmVhazsKKyAgICAgICAJY2FzZSBESURtc2dfcDJyZXFfcmVhZHBkYSA6CisJCVdMQU5fTE9HX0RFQlVHKDIsIlJlY2VpdmVkIG1sbWUgcmVhZHBkYSByZXF1ZXN0XG4iKTsKKwkJcmVzdWx0ID0gcHJpc20ybWdtdF9yZWFkcGRhKHdsYW5kZXYsIG1zZyk7CisJCWJyZWFrOworCWNhc2UgRElEbXNnX3AycmVxX3JlYWRjaXMgOgorCQlXTEFOX0xPR19ERUJVRygyLCJSZWNlaXZlZCBtbG1lIHJlYWRjaXMgcmVxdWVzdFxuIik7CisJCXJlc3VsdCA9IHByaXNtMm1nbXRfcmVhZGNpcyh3bGFuZGV2LCBtc2cpOworCQlicmVhazsKKwljYXNlIERJRG1zZ19wMnJlcV9hdXhwb3J0X3N0YXRlIDoKKwkJV0xBTl9MT0dfREVCVUcoMiwiUmVjZWl2ZWQgbWxtZSBhdXhwb3J0X3N0YXRlIHJlcXVlc3RcbiIpOworCQlyZXN1bHQgPSBwcmlzbTJtZ210X2F1eHBvcnRfc3RhdGUod2xhbmRldiwgbXNnKTsKKwkJYnJlYWs7CisJY2FzZSBESURtc2dfcDJyZXFfYXV4cG9ydF9yZWFkIDoKKwkJV0xBTl9MT0dfREVCVUcoMiwiUmVjZWl2ZWQgbWxtZSBhdXhwb3J0X3JlYWQgcmVxdWVzdFxuIik7CisJCXJlc3VsdCA9IHByaXNtMm1nbXRfYXV4cG9ydF9yZWFkKHdsYW5kZXYsIG1zZyk7CisJCWJyZWFrOworCWNhc2UgRElEbXNnX3AycmVxX2F1eHBvcnRfd3JpdGUgOgorCQlXTEFOX0xPR19ERUJVRygyLCJSZWNlaXZlZCBtbG1lIGF1eHBvcnRfd3JpdGUgcmVxdWVzdFxuIik7CisJCXJlc3VsdCA9IHByaXNtMm1nbXRfYXV4cG9ydF93cml0ZSh3bGFuZGV2LCBtc2cpOworCQlicmVhazsKKwljYXNlIERJRG1zZ19wMnJlcV9sb3dfbGV2ZWwgOgorCQlXTEFOX0xPR19ERUJVRygyLCJSZWNlaXZlZCBtbG1lIGxvd19sZXZlbCByZXF1ZXN0XG4iKTsKKwkJcmVzdWx0ID0gcHJpc20ybWdtdF9sb3dfbGV2ZWwod2xhbmRldiwgbXNnKTsKKwkJYnJlYWs7CisgICAgICAgIGNhc2UgRElEbXNnX3AycmVxX3Rlc3RfY29tbWFuZCA6CisgICAgICAgICAgICAgICAgV0xBTl9MT0dfREVCVUcoMiwiUmVjZWl2ZWQgbWxtZSB0ZXN0X2NvbW1hbmQgcmVxdWVzdFxuIik7CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gcHJpc20ybWdtdF90ZXN0X2NvbW1hbmQod2xhbmRldiwgbXNnKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBESURtc2dfcDJyZXFfbW1pX3JlYWQgOgorICAgICAgICAgICAgICAgIFdMQU5fTE9HX0RFQlVHKDIsIlJlY2VpdmVkIG1sbWUgbW1pX3JlYWQgcmVxdWVzdFxuIik7CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gcHJpc20ybWdtdF9tbWlfcmVhZCh3bGFuZGV2LCBtc2cpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIERJRG1zZ19wMnJlcV9tbWlfd3JpdGUgOgorICAgICAgICAgICAgICAgIFdMQU5fTE9HX0RFQlVHKDIsIlJlY2VpdmVkIG1sbWUgbW1pX3dyaXRlIHJlcXVlc3RcbiIpOworICAgICAgICAgICAgICAgIHJlc3VsdCA9IHByaXNtMm1nbXRfbW1pX3dyaXRlKHdsYW5kZXYsIG1zZyk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisJY2FzZSBESURtc2dfcDJyZXFfcmFtZGxfc3RhdGUgOgorCQlXTEFOX0xPR19ERUJVRygyLCJSZWNlaXZlZCBtbG1lIHJhbWRsX3N0YXRlIHJlcXVlc3RcbiIpOworCQlyZXN1bHQgPSBwcmlzbTJtZ210X3JhbWRsX3N0YXRlKHdsYW5kZXYsIG1zZyk7CisJCWJyZWFrOworCWNhc2UgRElEbXNnX3AycmVxX3JhbWRsX3dyaXRlIDoKKwkJV0xBTl9MT0dfREVCVUcoMiwiUmVjZWl2ZWQgbWxtZSByYW1kbF93cml0ZSByZXF1ZXN0XG4iKTsKKwkJcmVzdWx0ID0gcHJpc20ybWdtdF9yYW1kbF93cml0ZSh3bGFuZGV2LCBtc2cpOworCQlicmVhazsKKwljYXNlIERJRG1zZ19wMnJlcV9mbGFzaGRsX3N0YXRlIDoKKwkJV0xBTl9MT0dfREVCVUcoMiwiUmVjZWl2ZWQgbWxtZSBmbGFzaGRsX3N0YXRlIHJlcXVlc3RcbiIpOworCQlyZXN1bHQgPSBwcmlzbTJtZ210X2ZsYXNoZGxfc3RhdGUod2xhbmRldiwgbXNnKTsKKwkJYnJlYWs7CisJY2FzZSBESURtc2dfcDJyZXFfZmxhc2hkbF93cml0ZSA6CisJCVdMQU5fTE9HX0RFQlVHKDIsIlJlY2VpdmVkIG1sbWUgZmxhc2hkbF93cml0ZSByZXF1ZXN0XG4iKTsKKwkJcmVzdWx0ID0gcHJpc20ybWdtdF9mbGFzaGRsX3dyaXRlKHdsYW5kZXYsIG1zZyk7CisJCWJyZWFrOworCWNhc2UgRElEbXNnX3AycmVxX2R1bXBfc3RhdGUgOgorCQlXTEFOX0xPR19ERUJVRygyLCJSZWNlaXZlZCBtbG1lIGR1bXBfc3RhdGUgcmVxdWVzdFxuIik7CisJCXJlc3VsdCA9IHByaXNtMm1nbXRfZHVtcF9zdGF0ZSh3bGFuZGV2LCBtc2cpOworCQlicmVhazsKKwljYXNlIERJRG1zZ19wMnJlcV9jaGFubmVsX2luZm8gOgorCQlXTEFOX0xPR19ERUJVRygyLCJSZWNlaXZlZCBtbG1lIGNoYW5uZWxfaW5mbyByZXF1ZXN0XG4iKTsKKwkJcmVzdWx0ID0gcHJpc20ybWdtdF9jaGFubmVsX2luZm8od2xhbmRldiwgbXNnKTsKKwkJYnJlYWs7CisJY2FzZSBESURtc2dfcDJyZXFfY2hhbm5lbF9pbmZvX3Jlc3VsdHMgOgorCQlXTEFOX0xPR19ERUJVRygyLCJSZWNlaXZlZCBtbG1lIGNoYW5uZWxfaW5mb19yZXN1bHRzIHJlcXVlc3RcbiIpOworCQlyZXN1bHQgPSBwcmlzbTJtZ210X2NoYW5uZWxfaW5mb19yZXN1bHRzKHdsYW5kZXYsIG1zZyk7CisJCWJyZWFrOworCS8qCisJICogTGludXggc3BlY2lmaWMgbWVzc2FnZXMKKwkgKi8KKwljYXNlIERJRG1zZ19sbnhyZXFfaG9zdHdlcCA6CisJCWJyZWFrOyAgIC8vIGlnbm9yZSBtZS4KKyAgICAgICAgY2FzZSBESURtc2dfbG54cmVxX2lmc3RhdGUgOgorCQl7CisJCXA4MDIxMW1zZ19sbnhyZXFfaWZzdGF0ZV90CSppZnN0YXRlbXNnOworICAgICAgICAgICAgICAgIFdMQU5fTE9HX0RFQlVHKDIsIlJlY2VpdmVkIG1sbWUgaWZzdGF0ZSByZXF1ZXN0XG4iKTsKKwkJaWZzdGF0ZW1zZyA9IChwODAyMTFtc2dfbG54cmVxX2lmc3RhdGVfdCopbXNnOworICAgICAgICAgICAgICAgIHJlc3VsdCA9IHByaXNtMnN0YV9pZnN0YXRlKHdsYW5kZXYsIGlmc3RhdGVtc2ctPmlmc3RhdGUuZGF0YSk7CisJCWlmc3RhdGVtc2ctPnJlc3VsdGNvZGUuc3RhdHVzID0KKwkJCVA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfZGF0YV9vazsKKwkJaWZzdGF0ZW1zZy0+cmVzdWx0Y29kZS5kYXRhID0gcmVzdWx0OworCQlyZXN1bHQgPSAwOworCQl9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRElEbXNnX2xueHJlcV93bGFuc25pZmYgOgorICAgICAgICAgICAgICAgIFdMQU5fTE9HX0RFQlVHKDIsIlJlY2VpdmVkIG1sbWUgd2xhbnNuaWZmIHJlcXVlc3RcbiIpOworICAgICAgICAgICAgICAgIHJlc3VsdCA9IHByaXNtMm1nbXRfd2xhbnNuaWZmKHdsYW5kZXYsIG1zZyk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisJY2FzZSBESURtc2dfbG54cmVxX2F1dG9qb2luIDoKKwkJV0xBTl9MT0dfREVCVUcoMiwiUmVjZWl2ZWQgbWxtZSBhdXRvam9pbiByZXF1ZXN0XG4iKTsKKwkJcmVzdWx0ID0gcHJpc20ybWdtdF9hdXRvam9pbih3bGFuZGV2LCBtc2cpOworCQlicmVhazsKKwljYXNlIERJRG1zZ19wMnJlcV9lbmFibGUgOgorCQlXTEFOX0xPR19ERUJVRygyLCJSZWNlaXZlZCBtbG1lIGVuYWJsZSByZXF1ZXN0XG4iKTsKKwkJcmVzdWx0ID0gcHJpc20ybWdtdF9lbmFibGUod2xhbmRldiwgbXNnKTsKKwkJYnJlYWs7CisJY2FzZSBESURtc2dfbG54cmVxX2NvbW1zcXVhbGl0eTogeworCQlwODAyMTFtc2dfbG54cmVxX2NvbW1zcXVhbGl0eV90ICpxdWFsbXNnOworCisJCVdMQU5fTE9HX0RFQlVHKDIsIlJlY2VpdmVkIGNvbW1zcXVhbGl0eSByZXF1ZXN0XG4iKTsKKworCQlpZiAoaHctPmFwKQorCQkJYnJlYWs7CisKKwkJcXVhbG1zZyA9IChwODAyMTFtc2dfbG54cmVxX2NvbW1zcXVhbGl0eV90KikgbXNnOworCisJCXF1YWxtc2ctPmxpbmsuc3RhdHVzID0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rOworCQlxdWFsbXNnLT5sZXZlbC5zdGF0dXMgPSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2RhdGFfb2s7CisJCXF1YWxtc2ctPm5vaXNlLnN0YXR1cyA9IFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfZGF0YV9vazsKKworCisJCXF1YWxtc2ctPmxpbmsuZGF0YSA9IGhmYTM4NHgyaG9zdF8xNihody0+cXVhbC5DUV9jdXJyQlNTKTsKKwkJcXVhbG1zZy0+bGV2ZWwuZGF0YSA9IGhmYTM4NHgyaG9zdF8xNihody0+cXVhbC5BU0xfY3VyckJTUyk7CisJCXF1YWxtc2ctPm5vaXNlLmRhdGEgPSBoZmEzODR4Mmhvc3RfMTYoaHctPnF1YWwuQU5MX2N1cnJGQyk7CisKKwkJYnJlYWs7CisJfQorCWRlZmF1bHQ6CisJCVdMQU5fTE9HX1dBUk5JTkcoIlVua25vd24gbWdtdCByZXF1ZXN0IG1lc3NhZ2UgMHglMDh4IiwgbXNnLT5tc2djb2RlKTsKKwkJYnJlYWs7CisJfQorCisJREJGRVhJVDsKKwlyZXR1cm4gcmVzdWx0OworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBwcmlzbTJzdGFfaWZzdGF0ZQorKgorKiBJbnRlcmZhY2Ugc3RhdGUuICBUaGlzIGlzIHRoZSBwcmltYXJ5IFdMQU4gaW50ZXJmYWNlIGVuYWJsZS9kaXNhYmxlCisqIGhhbmRsZXIuICBGb2xsb3dpbmcgdGhlIGRyaXZlci9sb2FkL2RldmljZXByb2JlIHNlcXVlbmNlLCB0aGlzCisqIGZ1bmN0aW9uIG11c3QgYmUgY2FsbGVkIHdpdGggYSBzdGF0ZSBvZiAiZW5hYmxlIiBiZWZvcmUgYW55IG90aGVyCisqIGNvbW1hbmRzIHdpbGwgYmUgYWNjZXB0ZWQuCisqCisqIEFyZ3VtZW50czoKKyoJd2xhbmRldgkJd2xhbiBkZXZpY2Ugc3RydWN0dXJlCisqCW1zZ3AJCXB0ciB0byBtc2cgYnVmZmVyCisqCisqIFJldHVybnM6CisqIAlBIHA4MDIxMSBtZXNzYWdlIHJlc3VsdGNvZGUgdmFsdWUuCisqCisqIFNpZGUgZWZmZWN0czoKKyoKKyogQ2FsbCBjb250ZXh0OgorKglwcm9jZXNzIHRocmVhZCAgKHVzdWFsbHkpCisqCWludGVycnVwdAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitVSU5UMzIgcHJpc20yc3RhX2lmc3RhdGUod2xhbmRldmljZV90ICp3bGFuZGV2LCBVSU5UMzIgaWZzdGF0ZSkKK3sKKyAgICAgICAgaGZhMzg0eF90ICAgICAgICAgICAgICAgKmh3ID0gKGhmYTM4NHhfdCAqKXdsYW5kZXYtPnByaXY7CisJVUlOVDMyIAkJCXJlc3VsdDsKKwlEQkZFTlRFUjsKKworCXJlc3VsdCA9IFA4MDIxMUVOVU1fcmVzdWx0Y29kZV9pbXBsZW1lbnRhdGlvbl9mYWlsdXJlOworCisJV0xBTl9MT0dfREVCVUcoMiwgIkN1cnJlbnQgTVNEIHN0YXRlKCVkKSwgcmVxdWVzdGluZyglZClcbiIsCisJICAgICAgICAgICAgICAgICAgd2xhbmRldi0+bXNkc3RhdGUsIGlmc3RhdGUpOworCXN3aXRjaCAoaWZzdGF0ZSkKKwl7CisJY2FzZSBQODAyMTFFTlVNX2lmc3RhdGVfZndsb2FkOgorCQlzd2l0Y2ggKHdsYW5kZXYtPm1zZHN0YXRlKSB7CisJCWNhc2UgV0xBTl9NU0RfSFdQUkVTRU5UOgorCQkJd2xhbmRldi0+bXNkc3RhdGUgPSBXTEFOX01TRF9GV0xPQURfUEVORElORzsKKwkJCS8qCisJCQkgKiBJbml0aWFsaXplIHRoZSBkZXZpY2UrZHJpdmVyIHN1ZmZpY2llbnRseQorCQkJICogZm9yIGZpcm13YXJlIGxvYWRpbmcuCisJCQkgKi8KKyNpZiAoV0xBTl9IT1NUSUYgIT0gV0xBTl9VU0IpCisJCQlyZXN1bHQ9aGZhMzg0eF9jbWRfaW5pdGlhbGl6ZShodyk7CisjZWxzZQorCQkJaWYgKChyZXN1bHQ9aGZhMzg0eF9kcnZyX3N0YXJ0KGh3KSkpIHsKKwkJCQlXTEFOX0xPR19FUlJPUigKKwkJCQkJImhmYTM4NHhfZHJ2cl9zdGFydCgpIGZhaWxlZCwiCisJCQkJCSJyZXN1bHQ9JWRcbiIsIChpbnQpcmVzdWx0KTsKKwkJCQlyZXN1bHQgPQorCQkJCVA4MDIxMUVOVU1fcmVzdWx0Y29kZV9pbXBsZW1lbnRhdGlvbl9mYWlsdXJlOworCQkJCXdsYW5kZXYtPm1zZHN0YXRlID0gV0xBTl9NU0RfSFdQUkVTRU5UOworCQkJCWJyZWFrOworCQkJfQorI2VuZGlmCisJCQl3bGFuZGV2LT5tc2RzdGF0ZSA9IFdMQU5fTVNEX0ZXTE9BRDsKKwkJCXJlc3VsdCA9IFA4MDIxMUVOVU1fcmVzdWx0Y29kZV9zdWNjZXNzOworCQkJYnJlYWs7CisJCWNhc2UgV0xBTl9NU0RfRldMT0FEOgorCQkJaGZhMzg0eF9jbWRfaW5pdGlhbGl6ZShodyk7CisJCQlyZXN1bHQgPSBQODAyMTFFTlVNX3Jlc3VsdGNvZGVfc3VjY2VzczsKKwkJCWJyZWFrOworCQljYXNlIFdMQU5fTVNEX1JVTk5JTkc6CisJCQlXTEFOX0xPR19XQVJOSU5HKAorCQkJCSJDYW5ub3QgZW50ZXIgZndsb2FkIHN0YXRlIGZyb20gZW5hYmxlIHN0YXRlLCIKKwkJCQkieW91IG11c3QgZGlzYWJsZSBmaXJzdC5cbiIpOworCQkJcmVzdWx0ID0gUDgwMjExRU5VTV9yZXN1bHRjb2RlX2ludmFsaWRfcGFyYW1ldGVyczsKKwkJCWJyZWFrOworCQljYXNlIFdMQU5fTVNEX0hXRkFJTDoKKwkJZGVmYXVsdDoKKwkJCS8qIHByb2JlKCkgaGFkIGEgcHJvYmxlbSBvciB0aGUgbXNkc3RhdGUgY29udGFpbnMKKwkJCSAqIGFuIHVucmVjb2duaXplZCB2YWx1ZSwgdGhlcmUncyBub3RoaW5nIHdlIGNhbiBkby4KKwkJCSAqLworCQkJcmVzdWx0ID0gUDgwMjExRU5VTV9yZXN1bHRjb2RlX2ltcGxlbWVudGF0aW9uX2ZhaWx1cmU7CisJCQlicmVhazsKKwkJfQorCQlicmVhazsKKwljYXNlIFA4MDIxMUVOVU1faWZzdGF0ZV9lbmFibGU6CisJCXN3aXRjaCAod2xhbmRldi0+bXNkc3RhdGUpIHsKKwkJY2FzZSBXTEFOX01TRF9IV1BSRVNFTlQ6CisJCWNhc2UgV0xBTl9NU0RfRldMT0FEOgorCQkJd2xhbmRldi0+bXNkc3RhdGUgPSBXTEFOX01TRF9SVU5OSU5HX1BFTkRJTkc7CisJCQkvKiBJbml0aWFsaXplIHRoZSBkZXZpY2UrZHJpdmVyIGZvciBmdWxsCisJCQkgKiBvcGVyYXRpb24uIE5vdGUgdGhhdCB0aGlzIG1pZ2h0IG1lIGFuIEZXTE9BRCB0bworCQkJICogdG8gUlVOTklORyB0cmFuc2l0aW9uIHNvIHdlIG11c3Qgbm90IGRvIGEgY2hpcAorCQkJICogb3IgYm9hcmQgbGV2ZWwgcmVzZXQuICBOb3RlIHRoYXQgb24gZmFpbHVyZSwKKwkJCSAqIHRoZSBNU0Qgc3RhdGUgaXMgc2V0IHRvIEhXUFJFU0VOVCBiZWNhdXNlIHdlCisJCQkgKiBjYW4ndCBtYWtlIGFueSBhc3N1bXB0aW9ucyBhYm91dCB0aGUgc3RhdGUKKwkJCSAqIG9mIHRoZSBoYXJkd2FyZSBvciBhIHByZXZpb3VzIGZpcm13YXJlIGxvYWQuCisJCQkgKi8KKwkJCWlmICgocmVzdWx0PWhmYTM4NHhfZHJ2cl9zdGFydChodykpKSB7CisJCQkJV0xBTl9MT0dfRVJST1IoCisJCQkJCSJoZmEzODR4X2RydnJfc3RhcnQoKSBmYWlsZWQsIgorCQkJCQkicmVzdWx0PSVkXG4iLCAoaW50KXJlc3VsdCk7CisJCQkJcmVzdWx0ID0KKwkJCQlQODAyMTFFTlVNX3Jlc3VsdGNvZGVfaW1wbGVtZW50YXRpb25fZmFpbHVyZTsKKwkJCQl3bGFuZGV2LT5tc2RzdGF0ZSA9IFdMQU5fTVNEX0hXUFJFU0VOVDsKKwkJCQlicmVhazsKKwkJCX0KKworCQkJaWYgKChyZXN1bHQ9cHJpc20yc3RhX2dldGNhcmRpbmZvKHdsYW5kZXYpKSkgeworCQkJCVdMQU5fTE9HX0VSUk9SKAorCQkJCQkicHJpc20yc3RhX2dldGNhcmRpbmZvKCkgZmFpbGVkLCIKKwkJCQkJInJlc3VsdD0lZFxuIiwgKGludClyZXN1bHQpOworCQkJCXJlc3VsdCA9CisJCQkJUDgwMjExRU5VTV9yZXN1bHRjb2RlX2ltcGxlbWVudGF0aW9uX2ZhaWx1cmU7CisJCQkJaGZhMzg0eF9kcnZyX3N0b3AoaHcpOworCQkJCXdsYW5kZXYtPm1zZHN0YXRlID0gV0xBTl9NU0RfSFdQUkVTRU5UOworCQkJCWJyZWFrOworCQkJfQorCQkJaWYgKChyZXN1bHQ9cHJpc20yc3RhX2dsb2JhbHNldHVwKHdsYW5kZXYpKSkgeworCQkJCVdMQU5fTE9HX0VSUk9SKAorCQkJCQkicHJpc20yc3RhX2dsb2JhbHNldHVwKCkgZmFpbGVkLCIKKwkJCQkJInJlc3VsdD0lZFxuIiwgKGludClyZXN1bHQpOworCQkJCXJlc3VsdCA9CisJCQkJUDgwMjExRU5VTV9yZXN1bHRjb2RlX2ltcGxlbWVudGF0aW9uX2ZhaWx1cmU7CisJCQkJaGZhMzg0eF9kcnZyX3N0b3AoaHcpOworCQkJCXdsYW5kZXYtPm1zZHN0YXRlID0gV0xBTl9NU0RfSFdQUkVTRU5UOworCQkJCWJyZWFrOworCQkJfQorCQkJd2xhbmRldi0+bXNkc3RhdGUgPSBXTEFOX01TRF9SVU5OSU5HOworCQkJaHctPmpvaW5fYXAgPSAwOworCQkJaHctPmpvaW5fcmV0cmllcyA9IDYwOworCQkJcmVzdWx0ID0gUDgwMjExRU5VTV9yZXN1bHRjb2RlX3N1Y2Nlc3M7CisJCQlicmVhazsKKwkJY2FzZSBXTEFOX01TRF9SVU5OSU5HOgorCQkJLyogRG8gbm90aGluZywgd2UncmUgYWxyZWFkeSBpbiB0aGlzIHN0YXRlLiovCisJCQlyZXN1bHQgPSBQODAyMTFFTlVNX3Jlc3VsdGNvZGVfc3VjY2VzczsKKwkJCWJyZWFrOworCQljYXNlIFdMQU5fTVNEX0hXRkFJTDoKKwkJZGVmYXVsdDoKKwkJCS8qIHByb2JlKCkgaGFkIGEgcHJvYmxlbSBvciB0aGUgbXNkc3RhdGUgY29udGFpbnMKKwkJCSAqIGFuIHVucmVjb2duaXplZCB2YWx1ZSwgdGhlcmUncyBub3RoaW5nIHdlIGNhbiBkby4KKwkJCSAqLworCQkJcmVzdWx0ID0gUDgwMjExRU5VTV9yZXN1bHRjb2RlX2ltcGxlbWVudGF0aW9uX2ZhaWx1cmU7CisJCQlicmVhazsKKwkJfQorCQlicmVhazsKKwljYXNlIFA4MDIxMUVOVU1faWZzdGF0ZV9kaXNhYmxlOgorCQlzd2l0Y2ggKHdsYW5kZXYtPm1zZHN0YXRlKSB7CisJCWNhc2UgV0xBTl9NU0RfSFdQUkVTRU5UOgorCQkJLyogRG8gbm90aGluZywgd2UncmUgYWxyZWFkeSBpbiB0aGlzIHN0YXRlLiovCisJCQlyZXN1bHQgPSBQODAyMTFFTlVNX3Jlc3VsdGNvZGVfc3VjY2VzczsKKwkJCWJyZWFrOworCQljYXNlIFdMQU5fTVNEX0ZXTE9BRDoKKwkJY2FzZSBXTEFOX01TRF9SVU5OSU5HOgorCQkJd2xhbmRldi0+bXNkc3RhdGUgPSBXTEFOX01TRF9IV1BSRVNFTlRfUEVORElORzsKKwkJCS8qCisJCQkgKiBUT0RPOiBTaHV0IGRvd24gdGhlIE1BQyBjb21wbGV0ZWx5LiBIZXJlIGEgY2hpcAorCQkJICogb3IgYm9hcmQgbGV2ZWwgcmVzZXQgaXMgcHJvYmFibHkgY2FsbGVkIGZvci4KKwkJCSAqIEFmdGVyIGEgImRpc2FibGUiIF9hbGxfIHJlc3VsdHMgYXJlIGxvc3QsIGV2ZW4KKwkJCSAqIHRob3NlIGZyb20gYSBmd2xvYWQuCisJCQkgKi8KKwkJCWlmICghd2xhbmRldi0+aHdyZW1vdmVkKQorCQkJCW5ldGlmX2NhcnJpZXJfb2ZmKHdsYW5kZXYtPm5ldGRldik7CisKKwkJCWhmYTM4NHhfZHJ2cl9zdG9wKGh3KTsKKworCQkJd2xhbmRldi0+bWFjbW9kZSA9IFdMQU5fTUFDTU9ERV9OT05FOworCQkJd2xhbmRldi0+bXNkc3RhdGUgPSBXTEFOX01TRF9IV1BSRVNFTlQ7CisJCQlyZXN1bHQgPSBQODAyMTFFTlVNX3Jlc3VsdGNvZGVfc3VjY2VzczsKKwkJCWJyZWFrOworCQljYXNlIFdMQU5fTVNEX0hXRkFJTDoKKwkJZGVmYXVsdDoKKwkJCS8qIHByb2JlKCkgaGFkIGEgcHJvYmxlbSBvciB0aGUgbXNkc3RhdGUgY29udGFpbnMKKwkJCSAqIGFuIHVucmVjb2duaXplZCB2YWx1ZSwgdGhlcmUncyBub3RoaW5nIHdlIGNhbiBkby4KKwkJCSAqLworCQkJcmVzdWx0ID0gUDgwMjExRU5VTV9yZXN1bHRjb2RlX2ltcGxlbWVudGF0aW9uX2ZhaWx1cmU7CisJCQlicmVhazsKKwkJfQorCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXN1bHQgPSBQODAyMTFFTlVNX3Jlc3VsdGNvZGVfaW52YWxpZF9wYXJhbWV0ZXJzOworCQlicmVhazsKKwl9CisKKwlEQkZFWElUOworCXJldHVybiByZXN1bHQ7Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIHByaXNtMnN0YV9nZXRjYXJkaW5mbworKgorKiBDb2xsZWN0IHRoZSBOSUNJRCwgZmlybXdhcmUgdmVyc2lvbiBhbmQgYW55IG90aGVyIGlkZW50aWZpZXJzCisqIHdlJ2QgbGlrZSB0byBoYXZlIGluIGhvc3Qtc2lkZSBkYXRhIHN0cnVjdHVyZXMuCisqCisqIEFyZ3VtZW50czoKKyoJd2xhbmRldgkJd2xhbiBkZXZpY2Ugc3RydWN0dXJlCisqCisqIFJldHVybnM6CisqCTAJc3VjY2VzcworKgk+MAlmL3cgcmVwb3J0ZWQgZXJyb3IKKyoJPDAJZHJpdmVyIHJlcG9ydGVkIGVycm9yCisqCisqIFNpZGUgZWZmZWN0czoKKyoKKyogQ2FsbCBjb250ZXh0OgorKglFaXRoZXIuCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyBpbnQgcHJpc20yc3RhX2dldGNhcmRpbmZvKHdsYW5kZXZpY2VfdCAqd2xhbmRldikKK3sKKwlpbnQgCQkJcmVzdWx0ID0gMDsKKyAgICAgICAgaGZhMzg0eF90ICAgICAgICAgICAgICAgKmh3ID0gKGhmYTM4NHhfdCAqKXdsYW5kZXYtPnByaXY7CisJVUlOVDE2ICAgICAgICAgICAgICAgICAgdGVtcDsKKwlVSU5UOAkJCXNudW1bSEZBMzg0eF9SSURfTklDU0VSSUFMTlVNQkVSX0xFTl07CisJY2hhcgkJCXBzdHJbKEhGQTM4NHhfUklEX05JQ1NFUklBTE5VTUJFUl9MRU4gKiA0KSArIDFdOworCisJREJGRU5URVI7CisKKwkvKiBDb2xsZWN0IHZlcnNpb24gYW5kIGNvbXBhdGliaWxpdHkgaW5mbyAqLworCS8qICBTb21lIGFyZSBjcml0aWNhbCwgc29tZSBhcmUgbm90ICovCisJLyogTklDIGlkZW50aXR5ICovCisJcmVzdWx0ID0gaGZhMzg0eF9kcnZyX2dldGNvbmZpZyhodywgSEZBMzg0eF9SSURfTklDSURFTlRJVFksCisJCQkmaHctPmlkZW50X25pYywgc2l6ZW9mKGhmYTM4NHhfY29tcGlkZW50X3QpKTsKKwlpZiAoIHJlc3VsdCApIHsKKwkJV0xBTl9MT0dfRVJST1IoIkZhaWxlZCB0byByZXRyaWV2ZSBOSUNJREVOVElUWVxuIik7CisJCWdvdG8gZmFpbGVkOworCX0KKworCS8qIGdldCBhbGwgdGhlIG5pYyBpZCBmaWVsZHMgaW4gaG9zdCBieXRlIG9yZGVyICovCisJaHctPmlkZW50X25pYy5pZCA9IGhmYTM4NHgyaG9zdF8xNihody0+aWRlbnRfbmljLmlkKTsKKwlody0+aWRlbnRfbmljLnZhcmlhbnQgPSBoZmEzODR4Mmhvc3RfMTYoaHctPmlkZW50X25pYy52YXJpYW50KTsKKwlody0+aWRlbnRfbmljLm1ham9yID0gaGZhMzg0eDJob3N0XzE2KGh3LT5pZGVudF9uaWMubWFqb3IpOworCWh3LT5pZGVudF9uaWMubWlub3IgPSBoZmEzODR4Mmhvc3RfMTYoaHctPmlkZW50X25pYy5taW5vcik7CisKKwlXTEFOX0xPR19JTkZPKCAiaWRlbnQ6IG5pYyBoL3c6IGlkPTB4JTAyeCAlZC4lZC4lZFxuIiwKKwkJCWh3LT5pZGVudF9uaWMuaWQsIGh3LT5pZGVudF9uaWMubWFqb3IsCisJCQlody0+aWRlbnRfbmljLm1pbm9yLCBody0+aWRlbnRfbmljLnZhcmlhbnQpOworCisJLyogUHJpbWFyeSBmL3cgaWRlbnRpdHkgKi8KKwlyZXN1bHQgPSBoZmEzODR4X2RydnJfZ2V0Y29uZmlnKGh3LCBIRkEzODR4X1JJRF9QUklJREVOVElUWSwKKwkJCSZody0+aWRlbnRfcHJpX2Z3LCBzaXplb2YoaGZhMzg0eF9jb21waWRlbnRfdCkpOworCWlmICggcmVzdWx0ICkgeworCQlXTEFOX0xPR19FUlJPUigiRmFpbGVkIHRvIHJldHJpZXZlIFBSSUlERU5USVRZXG4iKTsKKwkJZ290byBmYWlsZWQ7CisJfQorCisJLyogZ2V0IGFsbCB0aGUgcHJpdmF0ZSBmdyBpZCBmaWVsZHMgaW4gaG9zdCBieXRlIG9yZGVyICovCisJaHctPmlkZW50X3ByaV9mdy5pZCA9IGhmYTM4NHgyaG9zdF8xNihody0+aWRlbnRfcHJpX2Z3LmlkKTsKKwlody0+aWRlbnRfcHJpX2Z3LnZhcmlhbnQgPSBoZmEzODR4Mmhvc3RfMTYoaHctPmlkZW50X3ByaV9mdy52YXJpYW50KTsKKwlody0+aWRlbnRfcHJpX2Z3Lm1ham9yID0gaGZhMzg0eDJob3N0XzE2KGh3LT5pZGVudF9wcmlfZncubWFqb3IpOworCWh3LT5pZGVudF9wcmlfZncubWlub3IgPSBoZmEzODR4Mmhvc3RfMTYoaHctPmlkZW50X3ByaV9mdy5taW5vcik7CisKKwlXTEFOX0xPR19JTkZPKCAiaWRlbnQ6IHByaSBmL3c6IGlkPTB4JTAyeCAlZC4lZC4lZFxuIiwKKwkJCWh3LT5pZGVudF9wcmlfZncuaWQsIGh3LT5pZGVudF9wcmlfZncubWFqb3IsCisJCQlody0+aWRlbnRfcHJpX2Z3Lm1pbm9yLCBody0+aWRlbnRfcHJpX2Z3LnZhcmlhbnQpOworCisJLyogU3RhdGlvbiAoU2Vjb25kYXJ5PykgZi93IGlkZW50aXR5ICovCisJcmVzdWx0ID0gaGZhMzg0eF9kcnZyX2dldGNvbmZpZyhodywgSEZBMzg0eF9SSURfU1RBSURFTlRJVFksCisJCQkmaHctPmlkZW50X3N0YV9mdywgc2l6ZW9mKGhmYTM4NHhfY29tcGlkZW50X3QpKTsKKwlpZiAoIHJlc3VsdCApIHsKKwkJV0xBTl9MT0dfRVJST1IoIkZhaWxlZCB0byByZXRyaWV2ZSBTVEFJREVOVElUWVxuIik7CisJCWdvdG8gZmFpbGVkOworCX0KKworCWlmIChody0+aWRlbnRfbmljLmlkIDwgMHg4MDAwKSB7CisJCVdMQU5fTE9HX0VSUk9SKCJGQVRBTDogQ2FyZCBpcyBub3QgYW4gSW50ZXJzaWwgUHJpc20yLzIuNS8zXG4iKTsKKwkJcmVzdWx0ID0gLTE7CisJCWdvdG8gZmFpbGVkOworCX0KKworCS8qIGdldCBhbGwgdGhlIHN0YXRpb24gZncgaWQgZmllbGRzIGluIGhvc3QgYnl0ZSBvcmRlciAqLworCWh3LT5pZGVudF9zdGFfZncuaWQgPSBoZmEzODR4Mmhvc3RfMTYoaHctPmlkZW50X3N0YV9mdy5pZCk7CisJaHctPmlkZW50X3N0YV9mdy52YXJpYW50ID0gaGZhMzg0eDJob3N0XzE2KGh3LT5pZGVudF9zdGFfZncudmFyaWFudCk7CisJaHctPmlkZW50X3N0YV9mdy5tYWpvciA9IGhmYTM4NHgyaG9zdF8xNihody0+aWRlbnRfc3RhX2Z3Lm1ham9yKTsKKwlody0+aWRlbnRfc3RhX2Z3Lm1pbm9yID0gaGZhMzg0eDJob3N0XzE2KGh3LT5pZGVudF9zdGFfZncubWlub3IpOworCisJLyogc3RyaXAgb3V0IHRoZSAnc3BlY2lhbCcgdmFyaWFudCBiaXRzICovCisJaHctPm1tX21vZHMgPSBody0+aWRlbnRfc3RhX2Z3LnZhcmlhbnQgJiAoQklUMTQgfCBCSVQxNSk7CisJaHctPmlkZW50X3N0YV9mdy52YXJpYW50ICY9IH4oKFVJTlQxNikoQklUMTQgfCBCSVQxNSkpOworCisJaWYgICggaHctPmlkZW50X3N0YV9mdy5pZCA9PSAweDFmICkgeworCQlody0+YXAgPSAwOworCQlXTEFOX0xPR19JTkZPKAorCQkJImlkZW50OiBzdGEgZi93OiBpZD0weCUwMnggJWQuJWQuJWRcbiIsCisJCQlody0+aWRlbnRfc3RhX2Z3LmlkLCBody0+aWRlbnRfc3RhX2Z3Lm1ham9yLAorCQkJaHctPmlkZW50X3N0YV9mdy5taW5vciwgaHctPmlkZW50X3N0YV9mdy52YXJpYW50KTsKKwl9IGVsc2UgeworCQlody0+YXAgPSAxOworCQlXTEFOX0xPR19JTkZPKAorCQkJImlkZW50OiAgYXAgZi93OiBpZD0weCUwMnggJWQuJWQuJWRcbiIsCisJCQlody0+aWRlbnRfc3RhX2Z3LmlkLCBody0+aWRlbnRfc3RhX2Z3Lm1ham9yLAorCQkJaHctPmlkZW50X3N0YV9mdy5taW5vciwgaHctPmlkZW50X3N0YV9mdy52YXJpYW50KTsKKwl9CisKKwkvKiBDb21wYXRpYmlsaXR5IHJhbmdlLCBNb2RlbSBzdXBwbGllciAqLworCXJlc3VsdCA9IGhmYTM4NHhfZHJ2cl9nZXRjb25maWcoaHcsIEhGQTM4NHhfUklEX01GSVNVUFJBTkdFLAorCQkJJmh3LT5jYXBfc3VwX21maSwgc2l6ZW9mKGhmYTM4NHhfY2FwbGV2ZWxfdCkpOworCWlmICggcmVzdWx0ICkgeworCQlXTEFOX0xPR19FUlJPUigiRmFpbGVkIHRvIHJldHJpZXZlIE1GSVNVUFJBTkdFXG4iKTsKKwkJZ290byBmYWlsZWQ7CisJfQorCisJLyogZ2V0IGFsbCB0aGUgQ29tcGF0aWJpbGl0eSByYW5nZSwgbW9kZW0gaW50ZXJmYWNlIHN1cHBsaWVyCisJZmllbGRzIGluIGJ5dGUgb3JkZXIgKi8KKwlody0+Y2FwX3N1cF9tZmkucm9sZSA9IGhmYTM4NHgyaG9zdF8xNihody0+Y2FwX3N1cF9tZmkucm9sZSk7CisJaHctPmNhcF9zdXBfbWZpLmlkID0gaGZhMzg0eDJob3N0XzE2KGh3LT5jYXBfc3VwX21maS5pZCk7CisJaHctPmNhcF9zdXBfbWZpLnZhcmlhbnQgPSBoZmEzODR4Mmhvc3RfMTYoaHctPmNhcF9zdXBfbWZpLnZhcmlhbnQpOworCWh3LT5jYXBfc3VwX21maS5ib3R0b20gPSBoZmEzODR4Mmhvc3RfMTYoaHctPmNhcF9zdXBfbWZpLmJvdHRvbSk7CisJaHctPmNhcF9zdXBfbWZpLnRvcCA9IGhmYTM4NHgyaG9zdF8xNihody0+Y2FwX3N1cF9tZmkudG9wKTsKKworCVdMQU5fTE9HX0lORk8oCisJCSJNRkk6U1VQOnJvbGU9MHglMDJ4OmlkPTB4JTAyeDp2YXI9MHglMDJ4OmIvdD0lZC8lZFxuIiwKKwkJaHctPmNhcF9zdXBfbWZpLnJvbGUsIGh3LT5jYXBfc3VwX21maS5pZCwKKwkJaHctPmNhcF9zdXBfbWZpLnZhcmlhbnQsIGh3LT5jYXBfc3VwX21maS5ib3R0b20sCisJCWh3LT5jYXBfc3VwX21maS50b3ApOworCisJLyogQ29tcGF0aWJpbGl0eSByYW5nZSwgQ29udHJvbGxlciBzdXBwbGllciAqLworCXJlc3VsdCA9IGhmYTM4NHhfZHJ2cl9nZXRjb25maWcoaHcsIEhGQTM4NHhfUklEX0NGSVNVUFJBTkdFLAorCQkJJmh3LT5jYXBfc3VwX2NmaSwgc2l6ZW9mKGhmYTM4NHhfY2FwbGV2ZWxfdCkpOworCWlmICggcmVzdWx0ICkgeworCQlXTEFOX0xPR19FUlJPUigiRmFpbGVkIHRvIHJldHJpZXZlIENGSVNVUFJBTkdFXG4iKTsKKwkJZ290byBmYWlsZWQ7CisJfQorCisJLyogZ2V0IGFsbCB0aGUgQ29tcGF0aWJpbGl0eSByYW5nZSwgY29udHJvbGxlciBpbnRlcmZhY2Ugc3VwcGxpZXIKKwlmaWVsZHMgaW4gYnl0ZSBvcmRlciAqLworCWh3LT5jYXBfc3VwX2NmaS5yb2xlID0gaGZhMzg0eDJob3N0XzE2KGh3LT5jYXBfc3VwX2NmaS5yb2xlKTsKKwlody0+Y2FwX3N1cF9jZmkuaWQgPSBoZmEzODR4Mmhvc3RfMTYoaHctPmNhcF9zdXBfY2ZpLmlkKTsKKwlody0+Y2FwX3N1cF9jZmkudmFyaWFudCA9IGhmYTM4NHgyaG9zdF8xNihody0+Y2FwX3N1cF9jZmkudmFyaWFudCk7CisJaHctPmNhcF9zdXBfY2ZpLmJvdHRvbSA9IGhmYTM4NHgyaG9zdF8xNihody0+Y2FwX3N1cF9jZmkuYm90dG9tKTsKKwlody0+Y2FwX3N1cF9jZmkudG9wID0gaGZhMzg0eDJob3N0XzE2KGh3LT5jYXBfc3VwX2NmaS50b3ApOworCisJV0xBTl9MT0dfSU5GTygKKwkJIkNGSTpTVVA6cm9sZT0weCUwMng6aWQ9MHglMDJ4OnZhcj0weCUwMng6Yi90PSVkLyVkXG4iLAorCQlody0+Y2FwX3N1cF9jZmkucm9sZSwgaHctPmNhcF9zdXBfY2ZpLmlkLAorCQlody0+Y2FwX3N1cF9jZmkudmFyaWFudCwgaHctPmNhcF9zdXBfY2ZpLmJvdHRvbSwKKwkJaHctPmNhcF9zdXBfY2ZpLnRvcCk7CisKKwkvKiBDb21wYXRpYmlsaXR5IHJhbmdlLCBQcmltYXJ5IGYvdyBzdXBwbGllciAqLworCXJlc3VsdCA9IGhmYTM4NHhfZHJ2cl9nZXRjb25maWcoaHcsIEhGQTM4NHhfUklEX1BSSVNVUFJBTkdFLAorCQkJJmh3LT5jYXBfc3VwX3ByaSwgc2l6ZW9mKGhmYTM4NHhfY2FwbGV2ZWxfdCkpOworCWlmICggcmVzdWx0ICkgeworCQlXTEFOX0xPR19FUlJPUigiRmFpbGVkIHRvIHJldHJpZXZlIFBSSVNVUFJBTkdFXG4iKTsKKwkJZ290byBmYWlsZWQ7CisJfQorCisJLyogZ2V0IGFsbCB0aGUgQ29tcGF0aWJpbGl0eSByYW5nZSwgcHJpbWFyeSBmaXJtd2FyZSBzdXBwbGllcgorCWZpZWxkcyBpbiBieXRlIG9yZGVyICovCisJaHctPmNhcF9zdXBfcHJpLnJvbGUgPSBoZmEzODR4Mmhvc3RfMTYoaHctPmNhcF9zdXBfcHJpLnJvbGUpOworCWh3LT5jYXBfc3VwX3ByaS5pZCA9IGhmYTM4NHgyaG9zdF8xNihody0+Y2FwX3N1cF9wcmkuaWQpOworCWh3LT5jYXBfc3VwX3ByaS52YXJpYW50ID0gaGZhMzg0eDJob3N0XzE2KGh3LT5jYXBfc3VwX3ByaS52YXJpYW50KTsKKwlody0+Y2FwX3N1cF9wcmkuYm90dG9tID0gaGZhMzg0eDJob3N0XzE2KGh3LT5jYXBfc3VwX3ByaS5ib3R0b20pOworCWh3LT5jYXBfc3VwX3ByaS50b3AgPSBoZmEzODR4Mmhvc3RfMTYoaHctPmNhcF9zdXBfcHJpLnRvcCk7CisKKwlXTEFOX0xPR19JTkZPKAorCQkiUFJJOlNVUDpyb2xlPTB4JTAyeDppZD0weCUwMng6dmFyPTB4JTAyeDpiL3Q9JWQvJWRcbiIsCisJCWh3LT5jYXBfc3VwX3ByaS5yb2xlLCBody0+Y2FwX3N1cF9wcmkuaWQsCisJCWh3LT5jYXBfc3VwX3ByaS52YXJpYW50LCBody0+Y2FwX3N1cF9wcmkuYm90dG9tLAorCQlody0+Y2FwX3N1cF9wcmkudG9wKTsKKworCS8qIENvbXBhdGliaWxpdHkgcmFuZ2UsIFN0YXRpb24gZi93IHN1cHBsaWVyICovCisJcmVzdWx0ID0gaGZhMzg0eF9kcnZyX2dldGNvbmZpZyhodywgSEZBMzg0eF9SSURfU1RBU1VQUkFOR0UsCisJCQkmaHctPmNhcF9zdXBfc3RhLCBzaXplb2YoaGZhMzg0eF9jYXBsZXZlbF90KSk7CisJaWYgKCByZXN1bHQgKSB7CisJCVdMQU5fTE9HX0VSUk9SKCJGYWlsZWQgdG8gcmV0cmlldmUgU1RBU1VQUkFOR0VcbiIpOworCQlnb3RvIGZhaWxlZDsKKwl9CisKKwkvKiBnZXQgYWxsIHRoZSBDb21wYXRpYmlsaXR5IHJhbmdlLCBzdGF0aW9uIGZpcm13YXJlIHN1cHBsaWVyCisJZmllbGRzIGluIGJ5dGUgb3JkZXIgKi8KKwlody0+Y2FwX3N1cF9zdGEucm9sZSA9IGhmYTM4NHgyaG9zdF8xNihody0+Y2FwX3N1cF9zdGEucm9sZSk7CisJaHctPmNhcF9zdXBfc3RhLmlkID0gaGZhMzg0eDJob3N0XzE2KGh3LT5jYXBfc3VwX3N0YS5pZCk7CisJaHctPmNhcF9zdXBfc3RhLnZhcmlhbnQgPSBoZmEzODR4Mmhvc3RfMTYoaHctPmNhcF9zdXBfc3RhLnZhcmlhbnQpOworCWh3LT5jYXBfc3VwX3N0YS5ib3R0b20gPSBoZmEzODR4Mmhvc3RfMTYoaHctPmNhcF9zdXBfc3RhLmJvdHRvbSk7CisJaHctPmNhcF9zdXBfc3RhLnRvcCA9IGhmYTM4NHgyaG9zdF8xNihody0+Y2FwX3N1cF9zdGEudG9wKTsKKworCWlmICggaHctPmNhcF9zdXBfc3RhLmlkID09IDB4MDQgKSB7CisJCVdMQU5fTE9HX0lORk8oCisJCSJTVEE6U1VQOnJvbGU9MHglMDJ4OmlkPTB4JTAyeDp2YXI9MHglMDJ4OmIvdD0lZC8lZFxuIiwKKwkJaHctPmNhcF9zdXBfc3RhLnJvbGUsIGh3LT5jYXBfc3VwX3N0YS5pZCwKKwkJaHctPmNhcF9zdXBfc3RhLnZhcmlhbnQsIGh3LT5jYXBfc3VwX3N0YS5ib3R0b20sCisJCWh3LT5jYXBfc3VwX3N0YS50b3ApOworCX0gZWxzZSB7CisJCVdMQU5fTE9HX0lORk8oCisJCSJBUDpTVVA6cm9sZT0weCUwMng6aWQ9MHglMDJ4OnZhcj0weCUwMng6Yi90PSVkLyVkXG4iLAorCQlody0+Y2FwX3N1cF9zdGEucm9sZSwgaHctPmNhcF9zdXBfc3RhLmlkLAorCQlody0+Y2FwX3N1cF9zdGEudmFyaWFudCwgaHctPmNhcF9zdXBfc3RhLmJvdHRvbSwKKwkJaHctPmNhcF9zdXBfc3RhLnRvcCk7CisJfQorCisJLyogQ29tcGF0aWJpbGl0eSByYW5nZSwgcHJpbWFyeSBmL3cgYWN0b3IsIENGSSBzdXBwbGllciAqLworCXJlc3VsdCA9IGhmYTM4NHhfZHJ2cl9nZXRjb25maWcoaHcsIEhGQTM4NHhfUklEX1BSSV9DRklBQ1RSQU5HRVMsCisJCQkmaHctPmNhcF9hY3RfcHJpX2NmaSwgc2l6ZW9mKGhmYTM4NHhfY2FwbGV2ZWxfdCkpOworCWlmICggcmVzdWx0ICkgeworCQlXTEFOX0xPR19FUlJPUigiRmFpbGVkIHRvIHJldHJpZXZlIFBSSV9DRklBQ1RSQU5HRVNcbiIpOworCQlnb3RvIGZhaWxlZDsKKwl9CisKKwkvKiBnZXQgYWxsIHRoZSBDb21wYXRpYmlsaXR5IHJhbmdlLCBwcmltYXJ5IGYvdyBhY3RvciwgQ0ZJIHN1cHBsaWVyCisJZmllbGRzIGluIGJ5dGUgb3JkZXIgKi8KKwlody0+Y2FwX2FjdF9wcmlfY2ZpLnJvbGUgPSBoZmEzODR4Mmhvc3RfMTYoaHctPmNhcF9hY3RfcHJpX2NmaS5yb2xlKTsKKwlody0+Y2FwX2FjdF9wcmlfY2ZpLmlkID0gaGZhMzg0eDJob3N0XzE2KGh3LT5jYXBfYWN0X3ByaV9jZmkuaWQpOworCWh3LT5jYXBfYWN0X3ByaV9jZmkudmFyaWFudCA9IGhmYTM4NHgyaG9zdF8xNihody0+Y2FwX2FjdF9wcmlfY2ZpLnZhcmlhbnQpOworCWh3LT5jYXBfYWN0X3ByaV9jZmkuYm90dG9tID0gaGZhMzg0eDJob3N0XzE2KGh3LT5jYXBfYWN0X3ByaV9jZmkuYm90dG9tKTsKKwlody0+Y2FwX2FjdF9wcmlfY2ZpLnRvcCA9IGhmYTM4NHgyaG9zdF8xNihody0+Y2FwX2FjdF9wcmlfY2ZpLnRvcCk7CisKKwlXTEFOX0xPR19JTkZPKAorCQkiUFJJLUNGSTpBQ1Q6cm9sZT0weCUwMng6aWQ9MHglMDJ4OnZhcj0weCUwMng6Yi90PSVkLyVkXG4iLAorCQlody0+Y2FwX2FjdF9wcmlfY2ZpLnJvbGUsIGh3LT5jYXBfYWN0X3ByaV9jZmkuaWQsCisJCWh3LT5jYXBfYWN0X3ByaV9jZmkudmFyaWFudCwgaHctPmNhcF9hY3RfcHJpX2NmaS5ib3R0b20sCisJCWh3LT5jYXBfYWN0X3ByaV9jZmkudG9wKTsKKworCS8qIENvbXBhdGliaWxpdHkgcmFuZ2UsIHN0YSBmL3cgYWN0b3IsIENGSSBzdXBwbGllciAqLworCXJlc3VsdCA9IGhmYTM4NHhfZHJ2cl9nZXRjb25maWcoaHcsIEhGQTM4NHhfUklEX1NUQV9DRklBQ1RSQU5HRVMsCisJCQkmaHctPmNhcF9hY3Rfc3RhX2NmaSwgc2l6ZW9mKGhmYTM4NHhfY2FwbGV2ZWxfdCkpOworCWlmICggcmVzdWx0ICkgeworCQlXTEFOX0xPR19FUlJPUigiRmFpbGVkIHRvIHJldHJpZXZlIFNUQV9DRklBQ1RSQU5HRVNcbiIpOworCQlnb3RvIGZhaWxlZDsKKwl9CisKKwkvKiBnZXQgYWxsIHRoZSBDb21wYXRpYmlsaXR5IHJhbmdlLCBzdGF0aW9uIGYvdyBhY3RvciwgQ0ZJIHN1cHBsaWVyCisJZmllbGRzIGluIGJ5dGUgb3JkZXIgKi8KKwlody0+Y2FwX2FjdF9zdGFfY2ZpLnJvbGUgPSBoZmEzODR4Mmhvc3RfMTYoaHctPmNhcF9hY3Rfc3RhX2NmaS5yb2xlKTsKKwlody0+Y2FwX2FjdF9zdGFfY2ZpLmlkID0gaGZhMzg0eDJob3N0XzE2KGh3LT5jYXBfYWN0X3N0YV9jZmkuaWQpOworCWh3LT5jYXBfYWN0X3N0YV9jZmkudmFyaWFudCA9IGhmYTM4NHgyaG9zdF8xNihody0+Y2FwX2FjdF9zdGFfY2ZpLnZhcmlhbnQpOworCWh3LT5jYXBfYWN0X3N0YV9jZmkuYm90dG9tID0gaGZhMzg0eDJob3N0XzE2KGh3LT5jYXBfYWN0X3N0YV9jZmkuYm90dG9tKTsKKwlody0+Y2FwX2FjdF9zdGFfY2ZpLnRvcCA9IGhmYTM4NHgyaG9zdF8xNihody0+Y2FwX2FjdF9zdGFfY2ZpLnRvcCk7CisKKwlXTEFOX0xPR19JTkZPKAorCQkiU1RBLUNGSTpBQ1Q6cm9sZT0weCUwMng6aWQ9MHglMDJ4OnZhcj0weCUwMng6Yi90PSVkLyVkXG4iLAorCQlody0+Y2FwX2FjdF9zdGFfY2ZpLnJvbGUsIGh3LT5jYXBfYWN0X3N0YV9jZmkuaWQsCisJCWh3LT5jYXBfYWN0X3N0YV9jZmkudmFyaWFudCwgaHctPmNhcF9hY3Rfc3RhX2NmaS5ib3R0b20sCisJCWh3LT5jYXBfYWN0X3N0YV9jZmkudG9wKTsKKworCS8qIENvbXBhdGliaWxpdHkgcmFuZ2UsIHN0YSBmL3cgYWN0b3IsIE1GSSBzdXBwbGllciAqLworCXJlc3VsdCA9IGhmYTM4NHhfZHJ2cl9nZXRjb25maWcoaHcsIEhGQTM4NHhfUklEX1NUQV9NRklBQ1RSQU5HRVMsCisJCQkmaHctPmNhcF9hY3Rfc3RhX21maSwgc2l6ZW9mKGhmYTM4NHhfY2FwbGV2ZWxfdCkpOworCWlmICggcmVzdWx0ICkgeworCQlXTEFOX0xPR19FUlJPUigiRmFpbGVkIHRvIHJldHJpZXZlIFNUQV9NRklBQ1RSQU5HRVNcbiIpOworCQlnb3RvIGZhaWxlZDsKKwl9CisKKwkvKiBnZXQgYWxsIHRoZSBDb21wYXRpYmlsaXR5IHJhbmdlLCBzdGF0aW9uIGYvdyBhY3RvciwgTUZJIHN1cHBsaWVyCisJZmllbGRzIGluIGJ5dGUgb3JkZXIgKi8KKwlody0+Y2FwX2FjdF9zdGFfbWZpLnJvbGUgPSBoZmEzODR4Mmhvc3RfMTYoaHctPmNhcF9hY3Rfc3RhX21maS5yb2xlKTsKKwlody0+Y2FwX2FjdF9zdGFfbWZpLmlkID0gaGZhMzg0eDJob3N0XzE2KGh3LT5jYXBfYWN0X3N0YV9tZmkuaWQpOworCWh3LT5jYXBfYWN0X3N0YV9tZmkudmFyaWFudCA9IGhmYTM4NHgyaG9zdF8xNihody0+Y2FwX2FjdF9zdGFfbWZpLnZhcmlhbnQpOworCWh3LT5jYXBfYWN0X3N0YV9tZmkuYm90dG9tID0gaGZhMzg0eDJob3N0XzE2KGh3LT5jYXBfYWN0X3N0YV9tZmkuYm90dG9tKTsKKwlody0+Y2FwX2FjdF9zdGFfbWZpLnRvcCA9IGhmYTM4NHgyaG9zdF8xNihody0+Y2FwX2FjdF9zdGFfbWZpLnRvcCk7CisKKwlXTEFOX0xPR19JTkZPKAorCQkiU1RBLU1GSTpBQ1Q6cm9sZT0weCUwMng6aWQ9MHglMDJ4OnZhcj0weCUwMng6Yi90PSVkLyVkXG4iLAorCQlody0+Y2FwX2FjdF9zdGFfbWZpLnJvbGUsIGh3LT5jYXBfYWN0X3N0YV9tZmkuaWQsCisJCWh3LT5jYXBfYWN0X3N0YV9tZmkudmFyaWFudCwgaHctPmNhcF9hY3Rfc3RhX21maS5ib3R0b20sCisJCWh3LT5jYXBfYWN0X3N0YV9tZmkudG9wKTsKKworCS8qIFNlcmlhbCBOdW1iZXIgKi8KKwlyZXN1bHQgPSBoZmEzODR4X2RydnJfZ2V0Y29uZmlnKGh3LCBIRkEzODR4X1JJRF9OSUNTRVJJQUxOVU1CRVIsCisJCQlzbnVtLCBIRkEzODR4X1JJRF9OSUNTRVJJQUxOVU1CRVJfTEVOKTsKKwlpZiAoICFyZXN1bHQgKSB7CisJCXdsYW5fbWtwcmludHN0cihzbnVtLCBIRkEzODR4X1JJRF9OSUNTRVJJQUxOVU1CRVJfTEVOLAorCQkJCXBzdHIsIHNpemVvZihwc3RyKSk7CisJCVdMQU5fTE9HX0lORk8oIlByaXNtMiBjYXJkIFNOOiAlc1xuIiwgcHN0cik7CisJfSBlbHNlIHsKKwkJV0xBTl9MT0dfRVJST1IoIkZhaWxlZCB0byByZXRyaWV2ZSBQcmlzbTIgQ2FyZCBTTlxuIik7CisJCWdvdG8gZmFpbGVkOworCX0KKworCS8qIENvbGxlY3QgdGhlIE1BQyBhZGRyZXNzICovCisJcmVzdWx0ID0gaGZhMzg0eF9kcnZyX2dldGNvbmZpZyhodywgSEZBMzg0eF9SSURfQ05GT1dOTUFDQUREUiwKKwkJd2xhbmRldi0+bmV0ZGV2LT5kZXZfYWRkciwgV0xBTl9BRERSX0xFTik7CisJaWYgKCByZXN1bHQgIT0gMCApIHsKKwkJV0xBTl9MT0dfRVJST1IoIkZhaWxlZCB0byByZXRyaWV2ZSBtYWMgYWRkcmVzc1xuIik7CisJCWdvdG8gZmFpbGVkOworCX0KKworCS8qIHNob3J0IHByZWFtYmxlIGlzIGFsd2F5cyBpbXBsZW1lbnRlZCAqLworCXdsYW5kZXYtPm5zZGNhcHMgfD0gUDgwMjExX05TRENBUF9TSE9SVF9QUkVBTUJMRTsKKworCS8qIGZpbmQgb3V0IGlmIGhhcmR3YXJlIHdlcCBpcyBpbXBsZW1lbnRlZCAqLworCWhmYTM4NHhfZHJ2cl9nZXRjb25maWcxNihodywgSEZBMzg0eF9SSURfUFJJVkFDWU9QVElNUCwgJnRlbXApOworCWlmICh0ZW1wKQorCQl3bGFuZGV2LT5uc2RjYXBzIHw9IFA4MDIxMV9OU0RDQVBfSEFSRFdBUkVXRVA7CisKKwkvKiBnZXQgdGhlIGRCbSBTY2FsaW5nIGNvbnN0YW50ICovCisJaGZhMzg0eF9kcnZyX2dldGNvbmZpZzE2KGh3LCBIRkEzODR4X1JJRF9DTkZEQk1BREpVU1QsICZ0ZW1wKTsKKwlody0+ZGJtYWRqdXN0ID0gdGVtcDsKKworCS8qIE9ubHkgZW5hYmxlIHNjYW4gYnkgZGVmYXVsdCBvbiBuZXdlciBmaXJtd2FyZSAqLworICAgICAgICBpZiAoSEZBMzg0eF9GSVJNV0FSRV9WRVJTSU9OKGh3LT5pZGVudF9zdGFfZncubWFqb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHctPmlkZW50X3N0YV9mdy5taW5vciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBody0+aWRlbnRfc3RhX2Z3LnZhcmlhbnQpIDwKKwkgICAgSEZBMzg0eF9GSVJNV0FSRV9WRVJTSU9OKDEsNSw1KSkgeworCQl3bGFuZGV2LT5uc2RjYXBzIHw9IFA4MDIxMV9OU0RDQVBfTk9TQ0FOOworCX0KKworCS8qIFRPRE86IFNldCBhbnkgaW50ZXJuYWxseSBtYW5hZ2VkIGNvbmZpZyBpdGVtcyAqLworCisJZ290byBkb25lOworZmFpbGVkOgorCVdMQU5fTE9HX0VSUk9SKCJGYWlsZWQsIHJlc3VsdD0lZFxuIiwgcmVzdWx0KTsKK2RvbmU6CisJREJGRVhJVDsKKwlyZXR1cm4gcmVzdWx0OworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBwcmlzbTJzdGFfZ2xvYmFsc2V0dXAKKyoKKyogU2V0IGFueSBnbG9iYWwgUklEcyB0aGF0IHdlIHdhbnQgdG8gc2V0IGF0IGRldmljZSBhY3RpdmF0aW9uLgorKgorKiBBcmd1bWVudHM6CisqCXdsYW5kZXYJCXdsYW4gZGV2aWNlIHN0cnVjdHVyZQorKgorKiBSZXR1cm5zOgorKgkwCXN1Y2Nlc3MKKyoJPjAJZi93IHJlcG9ydGVkIGVycm9yCisqCTwwCWRyaXZlciByZXBvcnRlZCBlcnJvcgorKgorKiBTaWRlIGVmZmVjdHM6CisqCisqIENhbGwgY29udGV4dDoKKyoJcHJvY2VzcyB0aHJlYWQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIGludCBwcmlzbTJzdGFfZ2xvYmFsc2V0dXAod2xhbmRldmljZV90ICp3bGFuZGV2KQoreworCWhmYTM4NHhfdCAgICAgICAgICAgICAgICpodyA9IChoZmEzODR4X3QgKil3bGFuZGV2LT5wcml2OworCisJLyogU2V0IHRoZSBtYXhpbXVtIGZyYW1lIHNpemUgKi8KKwlyZXR1cm4gaGZhMzg0eF9kcnZyX3NldGNvbmZpZzE2KGh3LCBIRkEzODR4X1JJRF9DTkZNQVhEQVRBTEVOLAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdMQU5fREFUQV9NQVhMRU4pOworfQorCitzdGF0aWMgaW50IHByaXNtMnN0YV9zZXRtdWx0aWNhc3Qod2xhbmRldmljZV90ICp3bGFuZGV2LCBuZXRkZXZpY2VfdCAqZGV2KQoreworCWludCByZXN1bHQgPSAwOworCWhmYTM4NHhfdCAgICAgICAgICAgICAgICpodyA9IChoZmEzODR4X3QgKil3bGFuZGV2LT5wcml2OworCisJVUlOVDE2ICBwcm9taXNjOworCisJREJGRU5URVI7CisKKwkvKiBJZiB3ZSdyZSBub3QgcmVhZHksIHdoYXQncyB0aGUgcG9pbnQ/ICovCisJaWYgKCBody0+c3RhdGUgIT0gSEZBMzg0eF9TVEFURV9SVU5OSU5HICkKKwkJZ290byBleGl0OworCisJLyogSWYgd2UncmUgYW4gQVAsIGRvIG5vdGhpbmcgaGVyZSAqLworCWlmIChody0+YXApCisJCWdvdG8gZXhpdDsKKworCWlmICggKGRldi0+ZmxhZ3MgJiAoSUZGX1BST01JU0MgfCBJRkZfQUxMTVVMVEkpKSAhPSAwICkKKwkJcHJvbWlzYyA9IFA4MDIxMUVOVU1fdHJ1dGhfdHJ1ZTsKKwllbHNlCisJCXByb21pc2MgPSBQODAyMTFFTlVNX3RydXRoX2ZhbHNlOworCisJcmVzdWx0ID0gaGZhMzg0eF9kcnZyX3NldGNvbmZpZzE2X2FzeW5jKGh3LCBIRkEzODR4X1JJRF9QUk9NSVNDTU9ERSwgcHJvbWlzYyk7CisKKwkvKiBYWFggVE9ETzogY29uZmlndXJlIHRoZSBtdWx0aWNhc3QgbGlzdCAqLworCS8vIENMRUFSX0hXX01VTFRJQ0FTVF9MSVNUCisJLy8gc3RydWN0IGRldl9tY19saXN0IGVsZW1lbnQgPSBkZXYtPm1jX2xpc3Q7CisJLy8gd2hpbGUgKGVsZW1lbnQgIT0gbnVsbCkgeworCS8vICBIV19BRERfTVVMVElDQVNUX0FERFIoZWxlbWVudC0+ZG1pX2FkZHIsIGRtaV9hZGRybGVuKQorCS8vICBlbGVtZW50ID0gZWxlbWVudC0+bmV4dDsKKwkvLyB9CisKKyBleGl0OgorCURCRkVYSVQ7CisJcmV0dXJuIHJlc3VsdDsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIHByaXNtMnN0YV9pbmZfaGFuZG92ZXIKKyoKKyogSGFuZGxlcyB0aGUgcmVjZWlwdCBvZiBhIEhhbmRvdmVyIGluZm8gZnJhbWUuIFNob3VsZCBvbmx5IGJlIHByZXNlbnQKKyogaW4gQVBzIG9ubHkuCisqCisqIEFyZ3VtZW50czoKKyoJd2xhbmRldgkJd2xhbiBkZXZpY2Ugc3RydWN0dXJlCisqCWluZgkJcHRyIHRvIGluZm8gZnJhbWUgKGNvbnRlbnRzIGluIGhmYTM4NHggb3JkZXIpCisqCisqIFJldHVybnM6CisqCW5vdGhpbmcKKyoKKyogU2lkZSBlZmZlY3RzOgorKgorKiBDYWxsIGNvbnRleHQ6CisqCWludGVycnVwdAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgdm9pZCBwcmlzbTJzdGFfaW5mX2hhbmRvdmVyKHdsYW5kZXZpY2VfdCAqd2xhbmRldiwgaGZhMzg0eF9JbmZGcmFtZV90ICppbmYpCit7CisJREJGRU5URVI7CisJV0xBTl9MT0dfREVCVUcoMiwicmVjZWl2ZWQgaW5mb2ZyYW1lOkhBTkRPVkVSICh1bmhhbmRsZWQpXG4iKTsKKwlEQkZFWElUOworCXJldHVybjsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogcHJpc20yc3RhX2luZl90YWxsaWVzCisqCisqIEhhbmRsZXMgdGhlIHJlY2VpcHQgb2YgYSBDb21tVGFsbGllcyBpbmZvIGZyYW1lLgorKgorKiBBcmd1bWVudHM6CisqCXdsYW5kZXYJCXdsYW4gZGV2aWNlIHN0cnVjdHVyZQorKglpbmYJCXB0ciB0byBpbmZvIGZyYW1lIChjb250ZW50cyBpbiBoZmEzODR4IG9yZGVyKQorKgorKiBSZXR1cm5zOgorKglub3RoaW5nCisqCisqIFNpZGUgZWZmZWN0czoKKyoKKyogQ2FsbCBjb250ZXh0OgorKglpbnRlcnJ1cHQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIHZvaWQgcHJpc20yc3RhX2luZl90YWxsaWVzKHdsYW5kZXZpY2VfdCAqd2xhbmRldiwgaGZhMzg0eF9JbmZGcmFtZV90ICppbmYpCit7CisgICAgICAgIGhmYTM4NHhfdCAgICAgICAgICAgICAgICpodyA9IChoZmEzODR4X3QgKil3bGFuZGV2LT5wcml2OworCVVJTlQxNgkJCSpzcmMxNjsKKwlVSU5UMzIJCQkqZHN0OworCVVJTlQzMgkJCSpzcmMzMjsKKwlpbnQJCQlpOworCWludAkJCWNudDsKKworCURCRkVOVEVSOworCisJLyoKKwkqKiBEZXRlcm1pbmUgaWYgdGhlc2UgYXJlIDE2LWJpdCBvciAzMi1iaXQgdGFsbGllcywgYmFzZWQgb24gdGhlCisJKiogcmVjb3JkIGxlbmd0aCBvZiB0aGUgaW5mbyByZWNvcmQuCisJKi8KKworCWNudCA9IHNpemVvZihoZmEzODR4X0NvbW1UYWxsaWVzMzJfdCkgLyBzaXplb2YoVUlOVDMyKTsKKwlpZiAoaW5mLT5mcmFtZWxlbiA+IDIyKSB7CisJCWRzdCAgID0gKFVJTlQzMiAqKSAmaHctPnRhbGxpZXM7CisJCXNyYzMyID0gKFVJTlQzMiAqKSAmaW5mLT5pbmZvLmNvbW10YWxsaWVzMzI7CisJCWZvciAoaSA9IDA7IGkgPCBjbnQ7IGkrKywgZHN0KyssIHNyYzMyKyspCisJCQkqZHN0ICs9IGhmYTM4NHgyaG9zdF8zMigqc3JjMzIpOworCX0gZWxzZSB7CisJCWRzdCAgID0gKFVJTlQzMiAqKSAmaHctPnRhbGxpZXM7CisJCXNyYzE2ID0gKFVJTlQxNiAqKSAmaW5mLT5pbmZvLmNvbW10YWxsaWVzMTY7CisJCWZvciAoaSA9IDA7IGkgPCBjbnQ7IGkrKywgZHN0KyssIHNyYzE2KyspCisJCQkqZHN0ICs9IGhmYTM4NHgyaG9zdF8xNigqc3JjMTYpOworCX0KKworCURCRkVYSVQ7CisKKwlyZXR1cm47Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBwcmlzbTJzdGFfaW5mX3NjYW5yZXN1bHRzCisqCisqIEhhbmRsZXMgdGhlIHJlY2VpcHQgb2YgYSBTY2FuIFJlc3VsdHMgaW5mbyBmcmFtZS4KKyoKKyogQXJndW1lbnRzOgorKgl3bGFuZGV2CQl3bGFuIGRldmljZSBzdHJ1Y3R1cmUKKyoJaW5mCQlwdHIgdG8gaW5mbyBmcmFtZSAoY29udGVudHMgaW4gaGZhMzg0eCBvcmRlcikKKyoKKyogUmV0dXJuczoKKyoJbm90aGluZworKgorKiBTaWRlIGVmZmVjdHM6CisqCisqIENhbGwgY29udGV4dDoKKyoJaW50ZXJydXB0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyB2b2lkIHByaXNtMnN0YV9pbmZfc2NhbnJlc3VsdHMod2xhbmRldmljZV90ICp3bGFuZGV2LAorCQkJCSAgICAgIGhmYTM4NHhfSW5mRnJhbWVfdCAqaW5mKQoreworCisgICAgICAgIGhmYTM4NHhfdCAgICAgICAgICAgICAgICpodyA9IChoZmEzODR4X3QgKil3bGFuZGV2LT5wcml2OworCWludAkJCW5ic3M7CisJaGZhMzg0eF9TY2FuUmVzdWx0X3QJKnNyID0gJihpbmYtPmluZm8uc2NhbnJlc3VsdCk7CisJaW50CQkJaTsKKwloZmEzODR4X0pvaW5SZXF1ZXN0X2RhdGFfdAlqb2lucmVxOworCWludAkJCXJlc3VsdDsKKwlEQkZFTlRFUjsKKworCS8qIEdldCB0aGUgbnVtYmVyIG9mIHJlc3VsdHMsIGZpcnN0IGluIGJ5dGVzLCB0aGVuIGluIHJlc3VsdHMgKi8KKwluYnNzID0gKGluZi0+ZnJhbWVsZW4gKiBzaXplb2YoVUlOVDE2KSkgLQorCQlzaXplb2YoaW5mLT5pbmZvdHlwZSkgLQorCQlzaXplb2YoaW5mLT5pbmZvLnNjYW5yZXN1bHQuc2NhbnJlYXNvbik7CisJbmJzcyAvPSBzaXplb2YoaGZhMzg0eF9TY2FuUmVzdWx0U3ViX3QpOworCisJLyogUHJpbnQgZW0gKi8KKwlXTEFOX0xPR19ERUJVRygxLCJyeCBzY2FucmVzdWx0cywgcmVhc29uPSVkLCBuYnNzPSVkOlxuIiwKKwkJaW5mLT5pbmZvLnNjYW5yZXN1bHQuc2NhbnJlYXNvbiwgbmJzcyk7CisJZm9yICggaSA9IDA7IGkgPCBuYnNzOyBpKyspIHsKKwkJV0xBTl9MT0dfREVCVUcoMSwgImNoaWQ9JWQgYW5sPSVkIHNsPSVkIGJjbmludD0lZFxuIiwKKwkJCXNyLT5yZXN1bHRbaV0uY2hpZCwKKwkJCXNyLT5yZXN1bHRbaV0uYW5sLAorCQkJc3ItPnJlc3VsdFtpXS5zbCwKKwkJCXNyLT5yZXN1bHRbaV0uYmNuaW50KTsKKwkJV0xBTl9MT0dfREVCVUcoMSwgIiAgY2FwaW5mbz0weCUwNHggcHJvYmVyZXNwX3JhdGU9JWRcbiIsCisJCQlzci0+cmVzdWx0W2ldLmNhcGluZm8sCisJCQlzci0+cmVzdWx0W2ldLnByb2JlcmVzcF9yYXRlKTsKKwl9CisJLyogaXNzdWUgYSBqb2luIHJlcXVlc3QgKi8KKwlqb2lucmVxLmNoYW5uZWwgPSBzci0+cmVzdWx0WzBdLmNoaWQ7CisJbWVtY3B5KCBqb2lucmVxLmJzc2lkLCBzci0+cmVzdWx0WzBdLmJzc2lkLCBXTEFOX0JTU0lEX0xFTik7CisJcmVzdWx0ID0gaGZhMzg0eF9kcnZyX3NldGNvbmZpZyggaHcsCisJCQlIRkEzODR4X1JJRF9KT0lOUkVRVUVTVCwKKwkJCSZqb2lucmVxLCBIRkEzODR4X1JJRF9KT0lOUkVRVUVTVF9MRU4pOworCWlmIChyZXN1bHQpIHsKKwkJV0xBTl9MT0dfRVJST1IoInNldGNvbmZpZyhqb2lucmVxKSBmYWlsZWQsIHJlc3VsdD0lZFxuIiwgcmVzdWx0KTsKKwl9CisKKwlEQkZFWElUOworCXJldHVybjsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIHByaXNtMnN0YV9pbmZfaG9zdHNjYW5yZXN1bHRzCisqCisqIEhhbmRsZXMgdGhlIHJlY2VpcHQgb2YgYSBTY2FuIFJlc3VsdHMgaW5mbyBmcmFtZS4KKyoKKyogQXJndW1lbnRzOgorKgl3bGFuZGV2CQl3bGFuIGRldmljZSBzdHJ1Y3R1cmUKKyoJaW5mCQlwdHIgdG8gaW5mbyBmcmFtZSAoY29udGVudHMgaW4gaGZhMzg0eCBvcmRlcikKKyoKKyogUmV0dXJuczoKKyoJbm90aGluZworKgorKiBTaWRlIGVmZmVjdHM6CisqCisqIENhbGwgY29udGV4dDoKKyoJaW50ZXJydXB0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyB2b2lkIHByaXNtMnN0YV9pbmZfaG9zdHNjYW5yZXN1bHRzKHdsYW5kZXZpY2VfdCAqd2xhbmRldiwKKwkJCQkJICBoZmEzODR4X0luZkZyYW1lX3QgKmluZikKK3sKKyAgICAgICAgaGZhMzg0eF90ICAgICAgICAgICAgICAgKmh3ID0gKGhmYTM4NHhfdCAqKXdsYW5kZXYtPnByaXY7CisJaW50CQkJbmJzczsKKwlEQkZFTlRFUjsKKworCW5ic3MgPSAoaW5mLT5mcmFtZWxlbiAtIDMpIC8gMzI7CisJV0xBTl9MT0dfREVCVUcoMSwgIlJlY2VpdmVkICVkIGhvc3RzY2FuIHJlc3VsdHNcbiIsIG5ic3MpOworCisJaWYgKG5ic3MgPiAzMikKKwkJbmJzcyA9IDMyOworCisJaWYgKGh3LT5zY2FucmVzdWx0cykKKwkJa2ZyZWUoaHctPnNjYW5yZXN1bHRzKTsKKworCWh3LT5zY2FucmVzdWx0cyA9IGttYWxsb2Moc2l6ZW9mKGhmYTM4NHhfSW5mRnJhbWVfdCksIEdGUF9BVE9NSUMpOworCW1lbWNweShody0+c2NhbnJlc3VsdHMsIGluZiwgc2l6ZW9mKGhmYTM4NHhfSW5mRnJhbWVfdCkpOworCisJaWYgKG5ic3MgPT0gMCkKKwkJbmJzcyA9IC0xOworCisgICAgICAgIC8qIE5vdGlmeS93YWtlIHRoZSBzbGVlcGluZyBjYWxsZXIuICovCisgICAgICAgIGh3LT5zY2FuZmxhZyA9IG5ic3M7CisgICAgICAgIHdha2VfdXBfaW50ZXJydXB0aWJsZSgmaHctPmNtZHEpOworCisJREJGRVhJVDsKK307CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBwcmlzbTJzdGFfaW5mX2NoaW5mb3Jlc3VsdHMKKyoKKyogSGFuZGxlcyB0aGUgcmVjZWlwdCBvZiBhIENoYW5uZWwgSW5mbyBSZXN1bHRzIGluZm8gZnJhbWUuCisqCisqIEFyZ3VtZW50czoKKyoJd2xhbmRldgkJd2xhbiBkZXZpY2Ugc3RydWN0dXJlCisqCWluZgkJcHRyIHRvIGluZm8gZnJhbWUgKGNvbnRlbnRzIGluIGhmYTM4NHggb3JkZXIpCisqCisqIFJldHVybnM6CisqCW5vdGhpbmcKKyoKKyogU2lkZSBlZmZlY3RzOgorKgorKiBDYWxsIGNvbnRleHQ6CisqCWludGVycnVwdAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgdm9pZCBwcmlzbTJzdGFfaW5mX2NoaW5mb3Jlc3VsdHMod2xhbmRldmljZV90ICp3bGFuZGV2LAorCQkJCQloZmEzODR4X0luZkZyYW1lX3QgKmluZikKK3sKKyAgICAgICAgaGZhMzg0eF90ICAgICAgICAgICAgICAgKmh3ID0gKGhmYTM4NHhfdCAqKXdsYW5kZXYtPnByaXY7CisJdW5zaWduZWQgaW50CQlpLCBuOworCisJREJGRU5URVI7CisJaHctPmNoYW5uZWxfaW5mby5yZXN1bHRzLnNjYW5jaGFubmVscyA9CisJCWhmYTM4NHgyaG9zdF8xNihpbmYtPmluZm8uY2hpbmZvcmVzdWx0LnNjYW5jaGFubmVscyk7CisjaWYgMAorCW1lbWNweSgmaW5mLT5pbmZvLmNoaW5mb3Jlc3VsdCwgJmh3LT5jaGFubmVsX2luZm8ucmVzdWx0cywgc2l6ZW9mKGhmYTM4NHhfQ2hJbmZvUmVzdWx0X3QpKTsKKyNlbmRpZgorCisJZm9yIChpPTAsIG49MDsgaTxIRkEzODR4X0NISU5GT1JFU1VMVF9NQVg7IGkrKykgeworCQlpZiAoaHctPmNoYW5uZWxfaW5mby5yZXN1bHRzLnNjYW5jaGFubmVscyAmICgxPDxpKSkgeworCQkJaW50IAljaGFubmVsPWhmYTM4NHgyaG9zdF8xNihpbmYtPmluZm8uY2hpbmZvcmVzdWx0LnJlc3VsdFtuXS5jaGlkKS0xOworCQkJaGZhMzg0eF9DaEluZm9SZXN1bHRTdWJfdCAqY2hpbmZvcmVzdWx0PSZody0+Y2hhbm5lbF9pbmZvLnJlc3VsdHMucmVzdWx0W2NoYW5uZWxdOworCQkJY2hpbmZvcmVzdWx0LT5jaGlkICAgPSBjaGFubmVsOworCQkJY2hpbmZvcmVzdWx0LT5hbmwgICAgPSBoZmEzODR4Mmhvc3RfMTYoaW5mLT5pbmZvLmNoaW5mb3Jlc3VsdC5yZXN1bHRbbl0uYW5sKTsKKwkJCWNoaW5mb3Jlc3VsdC0+cG5sICAgID0gaGZhMzg0eDJob3N0XzE2KGluZi0+aW5mby5jaGluZm9yZXN1bHQucmVzdWx0W25dLnBubCk7CisJCQljaGluZm9yZXN1bHQtPmFjdGl2ZSA9IGhmYTM4NHgyaG9zdF8xNihpbmYtPmluZm8uY2hpbmZvcmVzdWx0LnJlc3VsdFtuXS5hY3RpdmUpOworCQkJV0xBTl9MT0dfREVCVUcoMiwgImNoaW5mbzogY2hhbm5lbCAlZCwgJXMgbGV2ZWwgKGF2Zy9wZWFrKT0lZC8lZCBkQiwgcGNmICVkXG4iLAorCQkJCQljaGFubmVsKzEsCisJCQkJCWNoaW5mb3Jlc3VsdC0+YWN0aXZlICYKKwkJCQkJSEZBMzg0eF9DSElORk9SRVNVTFRfQlNTQUNUSVZFID8gInNpZ25hbCIgOiAibm9pc2UiLAorCQkJCQljaGluZm9yZXN1bHQtPmFubCwgY2hpbmZvcmVzdWx0LT5wbmwsCisJCQkJCWNoaW5mb3Jlc3VsdC0+YWN0aXZlICYgSEZBMzg0eF9DSElORk9SRVNVTFRfUENGQUNUSVZFID8gMSA6IDAKKwkJCSk7CisJCQluKys7CisJCX0KKwl9CisJYXRvbWljX3NldCgmaHctPmNoYW5uZWxfaW5mby5kb25lLCAyKTsKKworCWh3LT5jaGFubmVsX2luZm8uY291bnQgPSBuOworCURCRkVYSVQ7CisJcmV0dXJuOworfQorCit2b2lkIHByaXNtMnN0YV9wcm9jZXNzaW5nX2RlZmVyKHN0cnVjdCB3b3JrX3N0cnVjdCAqZGF0YSkKK3sKKwloZmEzODR4X3QJCSpodyA9IGNvbnRhaW5lcl9vZihkYXRhLCBzdHJ1Y3QgaGZhMzg0eCwgbGlua19iaCk7CisJd2xhbmRldmljZV90ICAgICAgICAgICAgKndsYW5kZXYgPSBody0+d2xhbmRldjsKKwloZmEzODR4X2J5dGVzdHIzMl90IHNzaWQ7CisJaW50CQkJcmVzdWx0OworCisJREJGRU5URVI7CisJLyogRmlyc3QgbGV0J3MgcHJvY2VzcyB0aGUgYXV0aCBmcmFtZXMgKi8KKwl7CisJCXN0cnVjdCBza19idWZmICAgICAgICAgICpza2I7CisJCWhmYTM4NHhfSW5mRnJhbWVfdCAqaW5mOworCisJCXdoaWxlICggKHNrYiA9IHNrYl9kZXF1ZXVlKCZody0+YXV0aHEpKSApIHsKKwkJCWluZiA9IChoZmEzODR4X0luZkZyYW1lX3QgKikgc2tiLT5kYXRhOworCQkJcHJpc20yc3RhX2luZl9hdXRocmVxX2RlZmVyKHdsYW5kZXYsIGluZik7CisJCX0KKworCX0KKworCS8qIE5vdyBsZXQncyBoYW5kbGUgdGhlIGxpbmtzdGF0dXMgc3R1ZmYgKi8KKwlpZiAoaHctPmxpbmtfc3RhdHVzID09IGh3LT5saW5rX3N0YXR1c19uZXcpCisJCWdvdG8gZmFpbGVkOworCisJaHctPmxpbmtfc3RhdHVzID0gaHctPmxpbmtfc3RhdHVzX25ldzsKKworCXN3aXRjaChody0+bGlua19zdGF0dXMpIHsKKwljYXNlIEhGQTM4NHhfTElOS19OT1RDT05ORUNURUQ6CisJCS8qIEknbSBjdXJyZW50bHkgYXNzdW1pbmcgdGhhdCB0aGlzIGlzIHRoZSBpbml0aWFsIGxpbmsKKwkJICogc3RhdGUuICBJdCBzaG91bGQgb25seSBiZSBwb3NzaWJsZSBpbW1lZGlhdGVseQorCQkgKiBmb2xsb3dpbmcgYW4gRW5hYmxlIGNvbW1hbmQuCisJCSAqIFJlc3BvbnNlOgorCQkgKiBCbG9jayBUcmFuc21pdHMsIElnbm9yZSByZWNlaXZlcyBvZiBkYXRhIGZyYW1lcworCQkgKi8KKwkJbmV0aWZfY2Fycmllcl9vZmYod2xhbmRldi0+bmV0ZGV2KTsKKworCQlXTEFOX0xPR19JTkZPKCJsaW5rc3RhdHVzPU5PVENPTk5FQ1RFRCAodW5oYW5kbGVkKVxuIik7CisJCWJyZWFrOworCisJY2FzZSBIRkEzODR4X0xJTktfQ09OTkVDVEVEOgorCQkvKiBUaGlzIG9uZSBpbmRpY2F0ZXMgYSBzdWNjZXNzZnVsIHNjYW4vam9pbi9hdXRoL2Fzc29jLgorCQkgKiBXaGVuIHdlIGhhdmUgdGhlIGZ1bGwgTUxNRSBjb21wbGVtZW50LCB0aGlzIGV2ZW50IHdpbGwKKwkJICogc2lnbmlmeSBzdWNjZXNzZnVsIGNvbXBsZXRpb24gb2YgYm90aCBtbG1lX2F1dGhlbnRpY2F0ZQorCQkgKiBhbmQgbWxtZV9hc3NvY2lhdGUuICBTdGF0ZSBtYW5hZ2VtZW50IHdpbGwgZ2V0IGEgbGl0dGxlCisJCSAqIHVnbHkgaGVyZS4KKwkJICogUmVzcG9uc2U6CisJCSAqIEluZGljYXRlIGF1dGhlbnRpY2F0aW9uIGFuZC9vciBhc3NvY2lhdGlvbgorCQkgKiBFbmFibGUgVHJhbnNtaXRzLCBSZWNlaXZlcyBhbmQgcGFzcyB1cCBkYXRhIGZyYW1lcworCQkgKi8KKworCQluZXRpZl9jYXJyaWVyX29uKHdsYW5kZXYtPm5ldGRldik7CisKKwkJLyogSWYgd2UgYXJlIGpvaW5pbmcgYSBzcGVjaWZpYyBBUCwgc2V0IG91ciBzdGF0ZSBhbmQgcmVzZXQgcmV0cmllcyAqLworCQlpZihody0+am9pbl9hcCA9PSAxKQorCQkJaHctPmpvaW5fYXAgPSAyOworCQlody0+am9pbl9yZXRyaWVzID0gNjA7CisKKwkJLyogRG9uJ3QgY2FsbCB0aGlzIGluIG1vbml0b3IgbW9kZSAqLworCQlpZiAoIHdsYW5kZXYtPm5ldGRldi0+dHlwZSA9PSBBUlBIUkRfRVRIRVIgKSB7CisJCQlVSU5UMTYJCQlwb3J0c3RhdHVzOworCisJCQlXTEFOX0xPR19JTkZPKCJsaW5rc3RhdHVzPUNPTk5FQ1RFRFxuIik7CisKKwkJCS8qIEZvciBub24tdXNiIGRldmljZXMsIHdlIGNhbiB1c2UgdGhlIHN5bmMgdmVyc2lvbnMgKi8KKwkJCS8qIENvbGxlY3QgdGhlIEJTU0lELCBhbmQgc2V0IHN0YXRlIHRvIGFsbG93IHR4ICovCisKKwkJCXJlc3VsdCA9IGhmYTM4NHhfZHJ2cl9nZXRjb25maWcoaHcsCisJCQkJCQkJSEZBMzg0eF9SSURfQ1VSUkVOVEJTU0lELAorCQkJCQkJCXdsYW5kZXYtPmJzc2lkLCBXTEFOX0JTU0lEX0xFTik7CisJCQlpZiAoIHJlc3VsdCApIHsKKwkJCQlXTEFOX0xPR19ERUJVRygxLAorCQkJCQkgICAgICAgImdldGNvbmZpZygweCUwMngpIGZhaWxlZCwgcmVzdWx0ID0gJWRcbiIsCisJCQkJCSAgICAgICBIRkEzODR4X1JJRF9DVVJSRU5UQlNTSUQsIHJlc3VsdCk7CisJCQkJZ290byBmYWlsZWQ7CisJCQl9CisKKwkJCXJlc3VsdCA9IGhmYTM4NHhfZHJ2cl9nZXRjb25maWcoaHcsCisJCQkJCQkJSEZBMzg0eF9SSURfQ1VSUkVOVFNTSUQsCisJCQkJCQkJJnNzaWQsIHNpemVvZihzc2lkKSk7CisJCQlpZiAoIHJlc3VsdCApIHsKKwkJCQlXTEFOX0xPR19ERUJVRygxLAorCQkJCQkgICAgICAgImdldGNvbmZpZygweCUwMngpIGZhaWxlZCwgcmVzdWx0ID0gJWRcbiIsCisJCQkJCSAgICAgICBIRkEzODR4X1JJRF9DVVJSRU5UU1NJRCwgcmVzdWx0KTsKKwkJCQlnb3RvIGZhaWxlZDsKKwkJCX0KKwkJCXByaXNtMm1nbXRfYnl0ZXN0cjJwc3RyKChoZmEzODR4X2J5dGVzdHJfdCAqKSZzc2lkLAorCQkJCQkJKHA4MDIxMXBzdHJkX3QgKikgJndsYW5kZXYtPnNzaWQpOworCisJCQkvKiBDb2xsZWN0IHRoZSBwb3J0IHN0YXR1cyAqLworCQkJcmVzdWx0ID0gaGZhMzg0eF9kcnZyX2dldGNvbmZpZzE2KGh3LAorCQkJCQkJCSAgSEZBMzg0eF9SSURfUE9SVFNUQVRVUywgJnBvcnRzdGF0dXMpOworCQkJaWYgKCByZXN1bHQgKSB7CisJCQkJV0xBTl9MT0dfREVCVUcoMSwKKwkJCQkJICAgICAgICJnZXRjb25maWcoMHglMDJ4KSBmYWlsZWQsIHJlc3VsdCA9ICVkXG4iLAorCQkJCQkgICAgICAgSEZBMzg0eF9SSURfUE9SVFNUQVRVUywgcmVzdWx0KTsKKwkJCQlnb3RvIGZhaWxlZDsKKwkJCX0KKwkJCXdsYW5kZXYtPm1hY21vZGUgPQorCQkJCShwb3J0c3RhdHVzID09IEhGQTM4NHhfUFNUQVRVU19DT05OX0lCU1MpID8KKwkJCQlXTEFOX01BQ01PREVfSUJTU19TVEEgOiBXTEFOX01BQ01PREVfRVNTX1NUQTsKKworCQkJLyogR2V0IHRoZSBiYWxsIHJvbGxpbmcgb24gdGhlIGNvbW1zIHF1YWxpdHkgc3R1ZmYgKi8KKwkJCXByaXNtMnN0YV9jb21tc3F1YWxfZGVmZXIoJmh3LT5jb21tc3F1YWxfYmgpOworCQl9CisJCWJyZWFrOworCisJY2FzZSBIRkEzODR4X0xJTktfRElTQ09OTkVDVEVEOgorCQkvKiBUaGlzIG9uZSBpbmRpY2F0ZXMgdGhhdCBvdXIgYXNzb2NpYXRpb24gaXMgZ29uZS4gIFdlJ3ZlCisJCSAqIGxvc3QgY29ubmVjdGlvbiB3aXRoIHRoZSBBUCBhbmQvb3IgYmVlbiBkaXNhc3NvY2lhdGVkLgorCQkgKiBUaGlzIGluZGljYXRlcyB0aGF0IHRoZSBNQUMgaGFzIGNvbXBsZXRlbHkgY2xlYXJlZCBpdCdzCisJCSAqIGFzc29jaWF0ZWQgc3RhdGUuICBXZSAqIHNob3VsZCBzZW5kIGEgZGVhdXRoIGluZGljYXRpb24KKwkJICogKGltcGx5aW5nIGRpc2Fzc29jKSB1cCAqIHRvIHRoZSBNTE1FLgorCQkgKiBSZXNwb25zZToKKwkJICogSW5kaWNhdGUgRGVhdXRoZW50aWNhdGlvbgorCQkgKiBCbG9jayBUcmFuc21pdHMsIElnbm9yZSByZWNlaXZlcyBvZiBkYXRhIGZyYW1lcworCQkgKi8KKwkJaWYoaHctPmpvaW5fYXAgPT0gMikKKwkJeworCQkJaGZhMzg0eF9Kb2luUmVxdWVzdF9kYXRhX3QgICAgICBqb2lucmVxOworCQkJam9pbnJlcSA9IGh3LT5qb2lucmVxOworCQkJLyogU2VuZCB0aGUgam9pbiByZXF1ZXN0ICovCisJCQloZmEzODR4X2RydnJfc2V0Y29uZmlnKCBodywKKwkJCQlIRkEzODR4X1JJRF9KT0lOUkVRVUVTVCwKKwkJCQkmam9pbnJlcSwgSEZBMzg0eF9SSURfSk9JTlJFUVVFU1RfTEVOKTsKKwkJCVdMQU5fTE9HX0lORk8oImxpbmtzdGF0dXM9RElTQ09OTkVDVEVEIChyZS1zdWJtaXR0aW5nIGpvaW4pXG4iKTsKKwkJfSBlbHNlIHsKKwkJCWlmICh3bGFuZGV2LT5uZXRkZXYtPnR5cGUgPT0gQVJQSFJEX0VUSEVSKQorCQkJCVdMQU5fTE9HX0lORk8oImxpbmtzdGF0dXM9RElTQ09OTkVDVEVEICh1bmhhbmRsZWQpXG4iKTsKKwkJfQorCQl3bGFuZGV2LT5tYWNtb2RlID0gV0xBTl9NQUNNT0RFX05PTkU7CisKKwkJbmV0aWZfY2Fycmllcl9vZmYod2xhbmRldi0+bmV0ZGV2KTsKKworCQlicmVhazsKKworCWNhc2UgSEZBMzg0eF9MSU5LX0FQX0NIQU5HRToKKwkJLyogVGhpcyBvbmUgaW5kaWNhdGVzIHRoYXQgdGhlIE1BQyBoYXMgZGVjaWRlZCB0byBhbmQKKwkJICogc3VjY2Vzc2Z1bGx5IGNvbXBsZXRlZCBhIGNoYW5nZSB0byBhbm90aGVyIEFQLiAgV2UKKwkJICogc2hvdWxkIHByb2JhYmx5IGltcGxlbWVudCBhIHJlYXNzb2NpYXRpb24gaW5kaWNhdGlvbgorCQkgKiBpbiByZXNwb25zZSB0byB0aGlzIG9uZS4gIEknbSB0aGlua2luZyB0aGF0IHRoZSB0aGUKKwkJICogcDgwMjExIGxheWVyIG5lZWRzIHRvIGJlIG5vdGlmaWVkIGluIGNhc2Ugb2YKKwkJICogYnVmZmVyaW5nL3F1ZXVlaW5nIGlzc3Vlcy4gIFVzZXIgbW9kZSBhbHNvIG5lZWRzIHRvIGJlCisJCSAqIG5vdGlmaWVkIHNvIHRoYXQgYW55IEJTUyBkZXBlbmRlbnQgZWxlbWVudHMgY2FuIGJlCisJCSAqIHVwZGF0ZWQuCisJCSAqIGFzc29jaWF0ZWQgc3RhdGUuICBXZSAqIHNob3VsZCBzZW5kIGEgZGVhdXRoIGluZGljYXRpb24KKwkJICogKGltcGx5aW5nIGRpc2Fzc29jKSB1cCAqIHRvIHRoZSBNTE1FLgorCQkgKiBSZXNwb25zZToKKwkJICogSW5kaWNhdGUgUmVhc3NvY2lhdGlvbgorCQkgKiBFbmFibGUgVHJhbnNtaXRzLCBSZWNlaXZlcyBhbmQgcGFzcyB1cCBkYXRhIGZyYW1lcworCQkgKi8KKwkJV0xBTl9MT0dfSU5GTygibGlua3N0YXR1cz1BUF9DSEFOR0VcbiIpOworCisJCXJlc3VsdCA9IGhmYTM4NHhfZHJ2cl9nZXRjb25maWcoaHcsCisJCQkJCQlIRkEzODR4X1JJRF9DVVJSRU5UQlNTSUQsCisJCQkJCQl3bGFuZGV2LT5ic3NpZCwgV0xBTl9CU1NJRF9MRU4pOworCQlpZiAoIHJlc3VsdCApIHsKKwkJCVdMQU5fTE9HX0RFQlVHKDEsCisJCQkJICAgICAgICJnZXRjb25maWcoMHglMDJ4KSBmYWlsZWQsIHJlc3VsdCA9ICVkXG4iLAorCQkJCSAgICAgICBIRkEzODR4X1JJRF9DVVJSRU5UQlNTSUQsIHJlc3VsdCk7CisJCQlnb3RvIGZhaWxlZDsKKwkJfQorCisJCXJlc3VsdCA9IGhmYTM4NHhfZHJ2cl9nZXRjb25maWcoaHcsCisJCQkJCQlIRkEzODR4X1JJRF9DVVJSRU5UU1NJRCwKKwkJCQkJCSZzc2lkLCBzaXplb2Yoc3NpZCkpOworCQlpZiAoIHJlc3VsdCApIHsKKwkJCVdMQU5fTE9HX0RFQlVHKDEsCisJCQkJICAgICAgICJnZXRjb25maWcoMHglMDJ4KSBmYWlsZWQsIHJlc3VsdCA9ICVkXG4iLAorCQkJCSAgICAgICBIRkEzODR4X1JJRF9DVVJSRU5UU1NJRCwgcmVzdWx0KTsKKwkJCWdvdG8gZmFpbGVkOworCQl9CisJCXByaXNtMm1nbXRfYnl0ZXN0cjJwc3RyKChoZmEzODR4X2J5dGVzdHJfdCAqKSZzc2lkLAorCQkJCQkocDgwMjExcHN0cmRfdCAqKSAmd2xhbmRldi0+c3NpZCk7CisKKworCQlody0+bGlua19zdGF0dXMgPSBIRkEzODR4X0xJTktfQ09OTkVDVEVEOworCQluZXRpZl9jYXJyaWVyX29uKHdsYW5kZXYtPm5ldGRldik7CisKKwkJYnJlYWs7CisKKwljYXNlIEhGQTM4NHhfTElOS19BUF9PVVRPRlJBTkdFOgorCQkvKiBUaGlzIG9uZSBpbmRpY2F0ZXMgdGhhdCB0aGUgTUFDIGhhcyBkZWNpZGVkIHRoYXQgdGhlCisJCSAqIEFQIGlzIG91dCBvZiByYW5nZSwgYnV0IGhhc24ndCBmb3VuZCBhIGJldHRlciBjYW5kaWRhdGUKKwkJICogc28gdGhlIE1BQyBtYWludGFpbnMgaXRzICJhc3NvY2lhdGVkIiBzdGF0ZSBpbiBjYXNlCisJCSAqIHdlIGdldCBiYWNrIGluIHJhbmdlLiAgV2Ugc2hvdWxkIGJsb2NrIHRyYW5zbWl0cyBhbmQKKwkJICogcmVjZWl2ZXMgaW4gdGhpcyBzdGF0ZS4gIERvIHdlIG5lZWQgYW4gaW5kaWNhdGlvbiBoZXJlPworCQkgKiBQcm9iYWJseSBub3Qgc2luY2UgYSBwb2xsaW5nIHVzZXItbW9kZSBlbGVtZW50IHdvdWxkCisJCSAqIGdldCB0aGlzIHN0YXR1cyBmcm9tIGZyb20gcDJQb3J0U3RhdHVzKEZENDApLiBXaGF0IGFib3V0CisJCSAqIHA4MDIxMT8KKwkJICogUmVzcG9uc2U6CisJCSAqIEJsb2NrIFRyYW5zbWl0cywgSWdub3JlIHJlY2VpdmVzIG9mIGRhdGEgZnJhbWVzCisJCSAqLworCQlXTEFOX0xPR19JTkZPKCJsaW5rc3RhdHVzPUFQX09VVE9GUkFOR0UgKHVuaGFuZGxlZClcbiIpOworCisJCW5ldGlmX2NhcnJpZXJfb2ZmKHdsYW5kZXYtPm5ldGRldik7CisKKwkJYnJlYWs7CisKKwljYXNlIEhGQTM4NHhfTElOS19BUF9JTlJBTkdFOgorCQkvKiBUaGlzIG9uZSBpbmRpY2F0ZXMgdGhhdCB0aGUgTUFDIGhhcyBkZWNpZGVkIHRoYXQgdGhlCisJCSAqIEFQIGlzIGJhY2sgaW4gcmFuZ2UuICBXZSBjb250aW51ZSB3b3JraW5nIHdpdGggb3VyCisJCSAqIGV4aXN0aW5nIGFzc29jaWF0aW9uLgorCQkgKiBSZXNwb25zZToKKwkJICogRW5hYmxlIFRyYW5zbWl0cywgUmVjZWl2ZXMgYW5kIHBhc3MgdXAgZGF0YSBmcmFtZXMKKwkJICovCisJCVdMQU5fTE9HX0lORk8oImxpbmtzdGF0dXM9QVBfSU5SQU5HRVxuIik7CisKKwkJaHctPmxpbmtfc3RhdHVzID0gSEZBMzg0eF9MSU5LX0NPTk5FQ1RFRDsKKwkJbmV0aWZfY2Fycmllcl9vbih3bGFuZGV2LT5uZXRkZXYpOworCisJCWJyZWFrOworCisJY2FzZSBIRkEzODR4X0xJTktfQVNTT0NGQUlMOgorCQkvKiBUaGlzIG9uZSBpcyBhY3R1YWxseSBhIHBlZXIgdG8gQ09OTkVDVEVELiAgV2UndmUKKwkJICogcmVxdWVzdGVkIGEgam9pbiBmb3IgYSBnaXZlbiBTU0lEIGFuZCBvcHRpb25hbGx5IEJTU0lELgorCQkgKiBXZSBjYW4gdXNlIHRoaXMgb25lIHRvIGluZGljYXRlIGF1dGhlbnRpY2F0aW9uIGFuZAorCQkgKiBhc3NvY2lhdGlvbiBmYWlsdXJlcy4gIFRoZSB0cmljayBpcyBnb2luZyB0byBiZQorCQkgKiAxKSBpZGVudGlmeWluZyB0aGUgZmFpbHVyZSwgYW5kIDIpIHN0YXRlIG1hbmFnZW1lbnQuCisJCSAqIFJlc3BvbnNlOgorCQkgKiBEaXNhYmxlIFRyYW5zbWl0cywgSWdub3JlIHJlY2VpdmVzIG9mIGRhdGEgZnJhbWVzCisJCSAqLworCQlpZihody0+am9pbl9hcCAmJiAtLWh3LT5qb2luX3JldHJpZXMgPiAwKQorCQl7CisJCQloZmEzODR4X0pvaW5SZXF1ZXN0X2RhdGFfdCAgICAgIGpvaW5yZXE7CisJCQlqb2lucmVxID0gaHctPmpvaW5yZXE7CisJCQkvKiBTZW5kIHRoZSBqb2luIHJlcXVlc3QgKi8KKwkJCWhmYTM4NHhfZHJ2cl9zZXRjb25maWcoIGh3LAorCQkJCUhGQTM4NHhfUklEX0pPSU5SRVFVRVNULAorCQkJCSZqb2lucmVxLCBIRkEzODR4X1JJRF9KT0lOUkVRVUVTVF9MRU4pOworCQkJV0xBTl9MT0dfSU5GTygibGlua3N0YXR1cz1BU1NPQ0ZBSUwgKHJlLXN1Ym1pdHRpbmcgam9pbilcbiIpOworCQl9IGVsc2UgeworCQkJV0xBTl9MT0dfSU5GTygibGlua3N0YXR1cz1BU1NPQ0ZBSUwgKHVuaGFuZGxlZClcbiIpOworCQl9CisKKwkJbmV0aWZfY2Fycmllcl9vZmYod2xhbmRldi0+bmV0ZGV2KTsKKworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCS8qIFRoaXMgaXMgYmFkLCBJTyBwb3J0IHByb2JsZW1zPyAqLworCQlXTEFOX0xPR19XQVJOSU5HKAorCQkJInVua25vd24gbGlua3N0YXR1cz0weCUwMnhcbiIsIGh3LT5saW5rX3N0YXR1cyk7CisJCWdvdG8gZmFpbGVkOworCQlicmVhazsKKwl9CisKKwl3bGFuZGV2LT5saW5rc3RhdHVzID0gKGh3LT5saW5rX3N0YXR1cyA9PSBIRkEzODR4X0xJTktfQ09OTkVDVEVEKTsKKyNpZmRlZiBXSVJFTEVTU19FWFQKKwlwODAyMTF3ZXh0X2V2ZW50X2Fzc29jaWF0ZWQod2xhbmRldiwgd2xhbmRldi0+bGlua3N0YXR1cyk7CisjZW5kaWYKKworIGZhaWxlZDoKKwlEQkZFWElUOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogcHJpc20yc3RhX2luZl9saW5rc3RhdHVzCisqCisqIEhhbmRsZXMgdGhlIHJlY2VpcHQgb2YgYSBMaW5rIFN0YXR1cyBpbmZvIGZyYW1lLgorKgorKiBBcmd1bWVudHM6CisqCXdsYW5kZXYJCXdsYW4gZGV2aWNlIHN0cnVjdHVyZQorKglpbmYJCXB0ciB0byBpbmZvIGZyYW1lIChjb250ZW50cyBpbiBoZmEzODR4IG9yZGVyKQorKgorKiBSZXR1cm5zOgorKglub3RoaW5nCisqCisqIFNpZGUgZWZmZWN0czoKKyoKKyogQ2FsbCBjb250ZXh0OgorKglpbnRlcnJ1cHQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIHZvaWQgcHJpc20yc3RhX2luZl9saW5rc3RhdHVzKHdsYW5kZXZpY2VfdCAqd2xhbmRldiwKKwkJCQkgICAgIGhmYTM4NHhfSW5mRnJhbWVfdCAqaW5mKQoreworICAgICAgICBoZmEzODR4X3QgICAgICAgICAgICAgICAqaHcgPSAoaGZhMzg0eF90ICopd2xhbmRldi0+cHJpdjsKKworCURCRkVOVEVSOworCisJaHctPmxpbmtfc3RhdHVzX25ldyA9IGhmYTM4NHgyaG9zdF8xNihpbmYtPmluZm8ubGlua3N0YXR1cy5saW5rc3RhdHVzKTsKKworCXNjaGVkdWxlX3dvcmsoJmh3LT5saW5rX2JoKTsKKworCURCRkVYSVQ7CisJcmV0dXJuOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogcHJpc20yc3RhX2luZl9hc3NvY3N0YXR1cworKgorKiBIYW5kbGVzIHRoZSByZWNlaXB0IG9mIGFuIEFzc29jaWF0aW9uIFN0YXR1cyBpbmZvIGZyYW1lLiBTaG91bGQKKyogYmUgcHJlc2VudCBpbiBBUHMgb25seS4KKyoKKyogQXJndW1lbnRzOgorKgl3bGFuZGV2CQl3bGFuIGRldmljZSBzdHJ1Y3R1cmUKKyoJaW5mCQlwdHIgdG8gaW5mbyBmcmFtZSAoY29udGVudHMgaW4gaGZhMzg0eCBvcmRlcikKKyoKKyogUmV0dXJuczoKKyoJbm90aGluZworKgorKiBTaWRlIGVmZmVjdHM6CisqCisqIENhbGwgY29udGV4dDoKKyoJaW50ZXJydXB0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyB2b2lkIHByaXNtMnN0YV9pbmZfYXNzb2NzdGF0dXMod2xhbmRldmljZV90ICp3bGFuZGV2LAorCQkJCSAgICAgIGhmYTM4NHhfSW5mRnJhbWVfdCAqaW5mKQoreworICAgICAgICBoZmEzODR4X3QgICAgICAgICAgICAgICAqaHcgPSAoaGZhMzg0eF90ICopd2xhbmRldi0+cHJpdjsKKwloZmEzODR4X0Fzc29jU3RhdHVzX3QJcmVjOworCWludAkJCWk7CisKKwlEQkZFTlRFUjsKKworCW1lbWNweSgmcmVjLCAmaW5mLT5pbmZvLmFzc29jc3RhdHVzLCBzaXplb2YocmVjKSk7CisJcmVjLmFzc29jc3RhdHVzID0gaGZhMzg0eDJob3N0XzE2KHJlYy5hc3NvY3N0YXR1cyk7CisJcmVjLnJlYXNvbiAgICAgID0gaGZhMzg0eDJob3N0XzE2KHJlYy5yZWFzb24pOworCisJLyoKKwkqKiBGaW5kIHRoZSBhZGRyZXNzIGluIHRoZSBsaXN0IG9mIGF1dGhlbnRpY2F0ZWQgc3RhdGlvbnMuICBJZiBpdCB3YXNuJ3QKKwkqKiBmb3VuZCwgdGhlbiB0aGlzIGFkZHJlc3MgaGFzIG5vdCBiZWVuIHByZXZpb3VzbHkgYXV0aGVudGljYXRlZCBhbmQKKwkqKiBzb21ldGhpbmcgd2VpcmQgaGFzIGhhcHBlbmVkIGlmIHRoaXMgaXMgYW55dGhpbmcgb3RoZXIgdGhhbiBhbgorCSoqICJhdXRoZW50aWNhdGlvbiBmYWlsZWQiIG1lc3NhZ2UuICBJZiB0aGUgYWRkcmVzcyB3YXMgZm91bmQsIHRoZW4KKwkqKiBzZXQgdGhlICJhc3NvY2lhdGVkIiBmbGFnIGZvciB0aGF0IHN0YXRpb24sIGJhc2VkIG9uIHdoZXRoZXIgdGhlCisJKiogc3RhdGlvbiBpcyBhc3NvY2lhdGluZyBvciBsb3NpbmcgaXRzIGFzc29jaWF0aW9uLiAgU29tZXRoaW5nIHdlaXJkCisJKiogaGFzIGFsc28gaGFwcGVuZWQgaWYgd2UgZmluZCB0aGUgYWRkcmVzcyBpbiB0aGUgbGlzdCBvZiBhdXRoZW50aWNhdGVkCisJKiogc3RhdGlvbnMgYnV0IHdlIGFyZSBnZXR0aW5nIGFuICJhdXRoZW50aWNhdGlvbiBmYWlsZWQiIG1lc3NhZ2UuCisJKi8KKworCWZvciAoaSA9IDA7IGkgPCBody0+YXV0aGxpc3QuY250OyBpKyspCisJCWlmIChtZW1jbXAocmVjLnN0YV9hZGRyLCBody0+YXV0aGxpc3QuYWRkcltpXSwgV0xBTl9BRERSX0xFTikgPT0gMCkKKwkJCWJyZWFrOworCisJaWYgKGkgPj0gaHctPmF1dGhsaXN0LmNudCkgeworCQlpZiAocmVjLmFzc29jc3RhdHVzICE9IEhGQTM4NHhfQVNTT0NTVEFUVVNfQVVUSEZBSUwpCisJCQlXTEFOX0xPR19XQVJOSU5HKCJhc3NvY3N0YXR1cyBpbmZvIGZyYW1lIHJlY2VpdmVkIGZvciBub24tYXV0aGVudGljYXRlZCBzdGF0aW9uLlxuIik7CisJfSBlbHNlIHsKKwkJaHctPmF1dGhsaXN0LmFzc29jW2ldID0KKwkJCShyZWMuYXNzb2NzdGF0dXMgPT0gSEZBMzg0eF9BU1NPQ1NUQVRVU19TVEFBU1NPQyB8fAorCQkJIHJlYy5hc3NvY3N0YXR1cyA9PSBIRkEzODR4X0FTU09DU1RBVFVTX1JFQVNTT0MpOworCisJCWlmIChyZWMuYXNzb2NzdGF0dXMgPT0gSEZBMzg0eF9BU1NPQ1NUQVRVU19BVVRIRkFJTCkKKwkJCVdMQU5fTE9HX1dBUk5JTkcoImF1dGhmYWlsIGFzc29jc3RhdHVzIGluZm8gZnJhbWUgcmVjZWl2ZWQgZm9yIGF1dGhlbnRpY2F0ZWQgc3RhdGlvbi5cbiIpOworCX0KKworCURCRkVYSVQ7CisKKwlyZXR1cm47Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBwcmlzbTJzdGFfaW5mX2F1dGhyZXEKKyoKKyogSGFuZGxlcyB0aGUgcmVjZWlwdCBvZiBhbiBBdXRoZW50aWNhdGlvbiBSZXF1ZXN0IGluZm8gZnJhbWUuIFNob3VsZAorKiBiZSBwcmVzZW50IGluIEFQcyBvbmx5LgorKgorKiBBcmd1bWVudHM6CisqCXdsYW5kZXYJCXdsYW4gZGV2aWNlIHN0cnVjdHVyZQorKglpbmYJCXB0ciB0byBpbmZvIGZyYW1lIChjb250ZW50cyBpbiBoZmEzODR4IG9yZGVyKQorKgorKiBSZXR1cm5zOgorKglub3RoaW5nCisqCisqIFNpZGUgZWZmZWN0czoKKyoKKyogQ2FsbCBjb250ZXh0OgorKglpbnRlcnJ1cHQKKyoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIHZvaWQgcHJpc20yc3RhX2luZl9hdXRocmVxKHdsYW5kZXZpY2VfdCAqd2xhbmRldiwKKwkJCQkgIGhmYTM4NHhfSW5mRnJhbWVfdCAqaW5mKQoreworICAgICAgICBoZmEzODR4X3QgICAgICAgICAgICAgICAqaHcgPSAoaGZhMzg0eF90ICopd2xhbmRldi0+cHJpdjsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCisJREJGRU5URVI7CisKKwlza2IgPSBkZXZfYWxsb2Nfc2tiKHNpemVvZigqaW5mKSk7CisJaWYgKHNrYikgeworCQlza2JfcHV0KHNrYiwgc2l6ZW9mKCppbmYpKTsKKwkJbWVtY3B5KHNrYi0+ZGF0YSwgaW5mLCBzaXplb2YoKmluZikpOworCQlza2JfcXVldWVfdGFpbCgmaHctPmF1dGhxLCBza2IpOworCQlzY2hlZHVsZV93b3JrKCZody0+bGlua19iaCk7CisJfQorCisJREJGRVhJVDsKK30KKworc3RhdGljIHZvaWQgcHJpc20yc3RhX2luZl9hdXRocmVxX2RlZmVyKHdsYW5kZXZpY2VfdCAqd2xhbmRldiwKKwkJCQkJaGZhMzg0eF9JbmZGcmFtZV90ICppbmYpCit7CisgICAgICAgIGhmYTM4NHhfdCAgICAgICAgICAgICAgICpodyA9IChoZmEzODR4X3QgKil3bGFuZGV2LT5wcml2OworCWhmYTM4NHhfYXV0aGVudGljYXRlU3RhdGlvbl9kYXRhX3QgIHJlYzsKKworCWludCAgICBpLCBhZGRlZCwgcmVzdWx0LCBjbnQ7CisJVUlOVDggICphZGRyOworCisJREJGRU5URVI7CisKKwkvKgorCSoqIEJ1aWxkIHRoZSBBdXRoZW50aWNhdGVTdGF0aW9uIHJlY29yZC4gIEluaXRpYWxpemUgaXQgZm9yIGRlbnlpbmcKKwkqKiBhdXRoZW50aWNhdGlvbi4KKwkqLworCisJbWVtY3B5KHJlYy5hZGRyZXNzLCBpbmYtPmluZm8uYXV0aHJlcS5zdGFfYWRkciwgV0xBTl9BRERSX0xFTik7CisJcmVjLnN0YXR1cyA9IFA4MDIxMUVOVU1fc3RhdHVzX3Vuc3BlY19mYWlsdXJlOworCisJLyoKKwkqKiBBdXRoZW50aWNhdGUgYmFzZWQgb24gdGhlIGFjY2VzcyBtb2RlLgorCSovCisKKwlzd2l0Y2ggKGh3LT5hY2Nlc3Ntb2RlKSB7CisJCWNhc2UgV0xBTl9BQ0NFU1NfTk9ORToKKworCQkJLyoKKwkJCSoqIERlbnkgYWxsIG5ldyBhdXRoZW50aWNhdGlvbnMuICBIb3dldmVyLCBpZiBhIHN0YXRpb24KKwkJCSoqIGlzIEFMUkVBRFkgYXV0aGVudGljYXRlZCwgdGhlbiBhY2NlcHQgaXQuCisJCQkqLworCisJCQlmb3IgKGkgPSAwOyBpIDwgaHctPmF1dGhsaXN0LmNudDsgaSsrKQorCQkJCWlmIChtZW1jbXAocmVjLmFkZHJlc3MsIGh3LT5hdXRobGlzdC5hZGRyW2ldLAorCQkJCQkJV0xBTl9BRERSX0xFTikgPT0gMCkgeworCQkJCQlyZWMuc3RhdHVzID0gUDgwMjExRU5VTV9zdGF0dXNfc3VjY2Vzc2Z1bDsKKwkJCQkJYnJlYWs7CisJCQkJfQorCisJCQlicmVhazsKKworCQljYXNlIFdMQU5fQUNDRVNTX0FMTDoKKworCQkJLyoKKwkJCSoqIEFsbG93IGFsbCBhdXRoZW50aWNhdGlvbnMuCisJCQkqLworCisJCQlyZWMuc3RhdHVzID0gUDgwMjExRU5VTV9zdGF0dXNfc3VjY2Vzc2Z1bDsKKwkJCWJyZWFrOworCisJCWNhc2UgV0xBTl9BQ0NFU1NfQUxMT1c6CisKKwkJCS8qCisJCQkqKiBPbmx5IGFsbG93IHRoZSBhdXRoZW50aWNhdGlvbiBpZiB0aGUgTUFDIGFkZHJlc3MKKwkJCSoqIGlzIGluIHRoZSBsaXN0IG9mIGFsbG93ZWQgYWRkcmVzc2VzLgorCQkJKioKKwkJCSoqIFNpbmNlIHRoaXMgaXMgdGhlIGludGVycnVwdCBoYW5kbGVyLCB3ZSBtYXkgYmUgaGVyZQorCQkJKiogd2hpbGUgdGhlIGFjY2VzcyBsaXN0IGlzIGluIHRoZSBtaWRkbGUgb2YgYmVpbmcKKwkJCSoqIHVwZGF0ZWQuICBDaG9vc2UgdGhlIGxpc3Qgd2hpY2ggaXMgY3VycmVudGx5IG9rYXkuCisJCQkqKiBTZWUgInByaXNtMm1pYl9wcml2X2FjY2Vzc2FsbG93KCkiIGZvciBkZXRhaWxzLgorCQkJKi8KKworCQkJaWYgKGh3LT5hbGxvdy5tb2RpZnkgPT0gMCkgeworCQkJCWNudCAgPSBody0+YWxsb3cuY250OworCQkJCWFkZHIgPSBody0+YWxsb3cuYWRkclswXTsKKwkJCX0gZWxzZSB7CisJCQkJY250ICA9IGh3LT5hbGxvdy5jbnQxOworCQkJCWFkZHIgPSBody0+YWxsb3cuYWRkcjFbMF07CisJCQl9CisKKwkJCWZvciAoaSA9IDA7IGkgPCBjbnQ7IGkrKywgYWRkciArPSBXTEFOX0FERFJfTEVOKQorCQkJCWlmIChtZW1jbXAocmVjLmFkZHJlc3MsIGFkZHIsIFdMQU5fQUREUl9MRU4pID09IDApIHsKKwkJCQkJcmVjLnN0YXR1cyA9IFA4MDIxMUVOVU1fc3RhdHVzX3N1Y2Nlc3NmdWw7CisJCQkJCWJyZWFrOworCQkJCX0KKworCQkJYnJlYWs7CisKKwkJY2FzZSBXTEFOX0FDQ0VTU19ERU5ZOgorCisJCQkvKgorCQkJKiogQWxsb3cgdGhlIGF1dGhlbnRpY2F0aW9uIFVOTEVTUyB0aGUgTUFDIGFkZHJlc3MgaXMKKwkJCSoqIGluIHRoZSBsaXN0IG9mIGRlbmllZCBhZGRyZXNzZXMuCisJCQkqKgorCQkJKiogU2luY2UgdGhpcyBpcyB0aGUgaW50ZXJydXB0IGhhbmRsZXIsIHdlIG1heSBiZSBoZXJlCisJCQkqKiB3aGlsZSB0aGUgYWNjZXNzIGxpc3QgaXMgaW4gdGhlIG1pZGRsZSBvZiBiZWluZworCQkJKiogdXBkYXRlZC4gIENob29zZSB0aGUgbGlzdCB3aGljaCBpcyBjdXJyZW50bHkgb2theS4KKwkJCSoqIFNlZSAicHJpc20ybWliX3ByaXZfYWNjZXNzZGVueSgpIiBmb3IgZGV0YWlscy4KKwkJCSovCisKKwkJCWlmIChody0+ZGVueS5tb2RpZnkgPT0gMCkgeworCQkJCWNudCAgPSBody0+ZGVueS5jbnQ7CisJCQkJYWRkciA9IGh3LT5kZW55LmFkZHJbMF07CisJCQl9IGVsc2UgeworCQkJCWNudCAgPSBody0+ZGVueS5jbnQxOworCQkJCWFkZHIgPSBody0+ZGVueS5hZGRyMVswXTsKKwkJCX0KKworCQkJcmVjLnN0YXR1cyA9IFA4MDIxMUVOVU1fc3RhdHVzX3N1Y2Nlc3NmdWw7CisKKwkJCWZvciAoaSA9IDA7IGkgPCBjbnQ7IGkrKywgYWRkciArPSBXTEFOX0FERFJfTEVOKQorCQkJCWlmIChtZW1jbXAocmVjLmFkZHJlc3MsIGFkZHIsIFdMQU5fQUREUl9MRU4pID09IDApIHsKKwkJCQkJcmVjLnN0YXR1cyA9IFA4MDIxMUVOVU1fc3RhdHVzX3Vuc3BlY19mYWlsdXJlOworCQkJCQlicmVhazsKKwkJCQl9CisKKwkJCWJyZWFrOworCX0KKworCS8qCisJKiogSWYgdGhlIGF1dGhlbnRpY2F0aW9uIGlzIG9rYXksIHRoZW4gYWRkIHRoZSBNQUMgYWRkcmVzcyB0byB0aGUgbGlzdAorCSoqIG9mIGF1dGhlbnRpY2F0ZWQgc3RhdGlvbnMuICBEb24ndCBhZGQgdGhlIGFkZHJlc3MgaWYgaXQgaXMgYWxyZWFkeSBpbgorCSoqIHRoZSBsaXN0LiAgKDgwMi4xMWIgZG9lcyBub3Qgc2VlbSB0byBkaXNhbGxvdyBhIHN0YXRpb24gZnJvbSBpc3N1aW5nCisJKiogYW4gYXV0aGVudGljYXRpb24gcmVxdWVzdCB3aGVuIHRoZSBzdGF0aW9uIGlzIGFscmVhZHkgYXV0aGVudGljYXRlZC4KKwkqKiBEb2VzIHRoaXMgc29ydCBvZiB0aGluZyBldmVyIGhhcHBlbj8gIFdlIG1pZ2h0IGFzIHdlbGwgZG8gdGhlIGNoZWNrCisJKioganVzdCBpbiBjYXNlLikKKwkqLworCisJYWRkZWQgPSAwOworCisJaWYgKHJlYy5zdGF0dXMgPT0gUDgwMjExRU5VTV9zdGF0dXNfc3VjY2Vzc2Z1bCkgeworCQlmb3IgKGkgPSAwOyBpIDwgaHctPmF1dGhsaXN0LmNudDsgaSsrKQorCQkJaWYgKG1lbWNtcChyZWMuYWRkcmVzcywgaHctPmF1dGhsaXN0LmFkZHJbaV0sIFdMQU5fQUREUl9MRU4pID09IDApCisJCQkJYnJlYWs7CisKKwkJaWYgKGkgPj0gaHctPmF1dGhsaXN0LmNudCkgeworCQkJaWYgKGh3LT5hdXRobGlzdC5jbnQgPj0gV0xBTl9BVVRIX01BWCkgeworCQkJCXJlYy5zdGF0dXMgPSBQODAyMTFFTlVNX3N0YXR1c19hcF9mdWxsOworCQkJfSBlbHNlIHsKKwkJCQltZW1jcHkoaHctPmF1dGhsaXN0LmFkZHJbaHctPmF1dGhsaXN0LmNudF0sCisJCQkJCXJlYy5hZGRyZXNzLCBXTEFOX0FERFJfTEVOKTsKKwkJCQlody0+YXV0aGxpc3QuY250Kys7CisJCQkJYWRkZWQgPSAxOworCQkJfQorCQl9CisJfQorCisJLyoKKwkqKiBTZW5kIGJhY2sgdGhlIHJlc3VsdHMgb2YgdGhlIGF1dGhlbnRpY2F0aW9uLiAgSWYgdGhpcyBkb2Vzbid0IHdvcmssCisJKiogdGhlbiBtYWtlIHN1cmUgdG8gcmVtb3ZlIHRoZSBhZGRyZXNzIGZyb20gdGhlIGF1dGhlbnRpY2F0ZWQgbGlzdCBpZgorCSoqIGl0IHdhcyBhZGRlZC4KKwkqLworCisJcmVjLnN0YXR1cyA9IGhvc3QyaGZhMzg0eF8xNihyZWMuc3RhdHVzKTsKKwlyZWMuYWxnb3JpdGhtID0gaW5mLT5pbmZvLmF1dGhyZXEuYWxnb3JpdGhtOworCisJcmVzdWx0ID0gaGZhMzg0eF9kcnZyX3NldGNvbmZpZyhodywgSEZBMzg0eF9SSURfQVVUSEVOVElDQVRFU1RBLAorCQkJCQkJCSZyZWMsIHNpemVvZihyZWMpKTsKKwlpZiAocmVzdWx0KSB7CisJCWlmIChhZGRlZCkgaHctPmF1dGhsaXN0LmNudC0tOworCQlXTEFOX0xPR19FUlJPUigic2V0Y29uZmlnKGF1dGhlbnRpY2F0ZXN0YXRpb24pIGZhaWxlZCwgcmVzdWx0PSVkXG4iLCByZXN1bHQpOworCX0KKworCURCRkVYSVQ7CisKKwlyZXR1cm47Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIHByaXNtMnN0YV9pbmZfcHN1c2VyY250CisqCisqIEhhbmRsZXMgdGhlIHJlY2VpcHQgb2YgYSBQb3dlclNhdmVVc2VyQ291bnQgaW5mbyBmcmFtZS4gU2hvdWxkCisqIGJlIHByZXNlbnQgaW4gQVBzIG9ubHkuCisqCisqIEFyZ3VtZW50czoKKyoJd2xhbmRldgkJd2xhbiBkZXZpY2Ugc3RydWN0dXJlCisqCWluZgkJcHRyIHRvIGluZm8gZnJhbWUgKGNvbnRlbnRzIGluIGhmYTM4NHggb3JkZXIpCisqCisqIFJldHVybnM6CisqCW5vdGhpbmcKKyoKKyogU2lkZSBlZmZlY3RzOgorKgorKiBDYWxsIGNvbnRleHQ6CisqCWludGVycnVwdAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgdm9pZCBwcmlzbTJzdGFfaW5mX3BzdXNlcmNudCh3bGFuZGV2aWNlX3QgKndsYW5kZXYsCisJCQkJICAgIGhmYTM4NHhfSW5mRnJhbWVfdCAqaW5mKQoreworICAgICAgICBoZmEzODR4X3QgICAgICAgICAgICAgICAqaHcgPSAoaGZhMzg0eF90ICopd2xhbmRldi0+cHJpdjsKKworCURCRkVOVEVSOworCisJaHctPnBzdXNlcmNvdW50ID0gaGZhMzg0eDJob3N0XzE2KGluZi0+aW5mby5wc3VzZXJjbnQudXNlcmNudCk7CisKKwlEQkZFWElUOworCisJcmV0dXJuOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogcHJpc20yc3RhX2V2X2R0aW0KKyoKKyogSGFuZGxlcyB0aGUgRFRJTSBlYXJseSB3YXJuaW5nIGV2ZW50LgorKgorKiBBcmd1bWVudHM6CisqCXdsYW5kZXYJCXdsYW4gZGV2aWNlIHN0cnVjdHVyZQorKgorKiBSZXR1cm5zOgorKglub3RoaW5nCisqCisqIFNpZGUgZWZmZWN0czoKKyoKKyogQ2FsbCBjb250ZXh0OgorKglpbnRlcnJ1cHQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwordm9pZCBwcmlzbTJzdGFfZXZfZHRpbSh3bGFuZGV2aWNlX3QgKndsYW5kZXYpCit7CisjaWYgMAorICAgICAgICBoZmEzODR4X3QgICAgICAgICAgICAgICAqaHcgPSAoaGZhMzg0eF90ICopd2xhbmRldi0+cHJpdjsKKyNlbmRpZgorCURCRkVOVEVSOworCVdMQU5fTE9HX0RFQlVHKDMsICJEVElNIGV2ZW50LCBjdXJyZW50bHkgdW5oYW5kbGVkLlxuIik7CisJREJGRVhJVDsKKwlyZXR1cm47Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIHByaXNtMnN0YV9ldl9pbmZkcm9wCisqCisqIEhhbmRsZXMgdGhlIEluZkRyb3AgZXZlbnQuCisqCisqIEFyZ3VtZW50czoKKyoJd2xhbmRldgkJd2xhbiBkZXZpY2Ugc3RydWN0dXJlCisqCisqIFJldHVybnM6CisqCW5vdGhpbmcKKyoKKyogU2lkZSBlZmZlY3RzOgorKgorKiBDYWxsIGNvbnRleHQ6CisqCWludGVycnVwdAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCit2b2lkIHByaXNtMnN0YV9ldl9pbmZkcm9wKHdsYW5kZXZpY2VfdCAqd2xhbmRldikKK3sKKyNpZiAwCisgICAgICAgIGhmYTM4NHhfdCAgICAgICAgICAgICAgICpodyA9IChoZmEzODR4X3QgKil3bGFuZGV2LT5wcml2OworI2VuZGlmCisJREJGRU5URVI7CisJV0xBTl9MT0dfREVCVUcoMywgIkluZm8gZnJhbWUgZHJvcHBlZCBkdWUgdG8gY2FyZCBtZW0gbG93LlxuIik7CisJREJGRVhJVDsKKwlyZXR1cm47Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIHByaXNtMnN0YV9ldl9pbmZvCisqCisqIEhhbmRsZXMgdGhlIEluZm8gZXZlbnQuCisqCisqIEFyZ3VtZW50czoKKyoJd2xhbmRldgkJd2xhbiBkZXZpY2Ugc3RydWN0dXJlCisqCWluZgkJcHRyIHRvIGEgZ2VuZXJpYyBpbmZvIGZyYW1lCisqCisqIFJldHVybnM6CisqCW5vdGhpbmcKKyoKKyogU2lkZSBlZmZlY3RzOgorKgorKiBDYWxsIGNvbnRleHQ6CisqCWludGVycnVwdAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCit2b2lkIHByaXNtMnN0YV9ldl9pbmZvKHdsYW5kZXZpY2VfdCAqd2xhbmRldiwgaGZhMzg0eF9JbmZGcmFtZV90ICppbmYpCit7CisJREJGRU5URVI7CisJaW5mLT5pbmZvdHlwZSA9IGhmYTM4NHgyaG9zdF8xNihpbmYtPmluZm90eXBlKTsKKwkvKiBEaXNwYXRjaCAqLworCXN3aXRjaCAoIGluZi0+aW5mb3R5cGUgKSB7CisJCWNhc2UgSEZBMzg0eF9JVF9IQU5ET1ZFUkFERFI6CisJCQlwcmlzbTJzdGFfaW5mX2hhbmRvdmVyKHdsYW5kZXYsIGluZik7CisJCQlicmVhazsKKwkJY2FzZSBIRkEzODR4X0lUX0NPTU1UQUxMSUVTOgorCQkJcHJpc20yc3RhX2luZl90YWxsaWVzKHdsYW5kZXYsIGluZik7CisJCQlicmVhazsKKyAgICAgICAgICAgICAgIGNhc2UgSEZBMzg0eF9JVF9IT1NUU0NBTlJFU1VMVFM6CisgICAgICAgICAgICAgICAgICAgICAgICBwcmlzbTJzdGFfaW5mX2hvc3RzY2FucmVzdWx0cyh3bGFuZGV2LCBpbmYpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisJCWNhc2UgSEZBMzg0eF9JVF9TQ0FOUkVTVUxUUzoKKwkJCXByaXNtMnN0YV9pbmZfc2NhbnJlc3VsdHMod2xhbmRldiwgaW5mKTsKKwkJCWJyZWFrOworCQljYXNlIEhGQTM4NHhfSVRfQ0hJTkZPUkVTVUxUUzoKKwkJCXByaXNtMnN0YV9pbmZfY2hpbmZvcmVzdWx0cyh3bGFuZGV2LCBpbmYpOworCQkJYnJlYWs7CisJCWNhc2UgSEZBMzg0eF9JVF9MSU5LU1RBVFVTOgorCQkJcHJpc20yc3RhX2luZl9saW5rc3RhdHVzKHdsYW5kZXYsIGluZik7CisJCQlicmVhazsKKwkJY2FzZSBIRkEzODR4X0lUX0FTU09DU1RBVFVTOgorCQkJcHJpc20yc3RhX2luZl9hc3NvY3N0YXR1cyh3bGFuZGV2LCBpbmYpOworCQkJYnJlYWs7CisJCWNhc2UgSEZBMzg0eF9JVF9BVVRIUkVROgorCQkJcHJpc20yc3RhX2luZl9hdXRocmVxKHdsYW5kZXYsIGluZik7CisJCQlicmVhazsKKwkJY2FzZSBIRkEzODR4X0lUX1BTVVNFUkNOVDoKKwkJCXByaXNtMnN0YV9pbmZfcHN1c2VyY250KHdsYW5kZXYsIGluZik7CisJCQlicmVhazsKKwkgICAgICAgIGNhc2UgSEZBMzg0eF9JVF9LRVlJRENIQU5HRUQ6CisJCQlXTEFOX0xPR19XQVJOSU5HKCJVbmhhbmRsZWQgSVRfS0VZSURDSEFOR0VEXG4iKTsKKwkJCWJyZWFrOworCSAgICAgICAgY2FzZSBIRkEzODR4X0lUX0FTU09DUkVROgorCQkJV0xBTl9MT0dfV0FSTklORygiVW5oYW5kbGVkIElUX0FTU09DUkVRXG4iKTsKKwkJCWJyZWFrOworCSAgICAgICAgY2FzZSBIRkEzODR4X0lUX01JQ0ZBSUxVUkU6CisJCQlXTEFOX0xPR19XQVJOSU5HKCJVbmhhbmRsZWQgSVRfTUlDRkFJTFVSRVxuIik7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCVdMQU5fTE9HX1dBUk5JTkcoCisJCQkJIlVua25vd24gaW5mbyB0eXBlPTB4JTAyeFxuIiwgaW5mLT5pbmZvdHlwZSk7CisJCQlicmVhazsKKwl9CisJREJGRVhJVDsKKwlyZXR1cm47Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIHByaXNtMnN0YV9ldl90eGV4YworKgorKiBIYW5kbGVzIHRoZSBUeEV4YyBldmVudC4gIEEgVHJhbnNtaXQgRXhjZXB0aW9uIGV2ZW50IGluZGljYXRlcworKiB0aGF0IHRoZSBNQUMncyBUWCBwcm9jZXNzIHdhcyB1bnN1Y2Nlc3NmdWwgLSBzbyB0aGUgcGFja2V0IGRpZAorKiBub3QgZ2V0IHRyYW5zbWl0dGVkLgorKgorKiBBcmd1bWVudHM6CisqCXdsYW5kZXYJCXdsYW4gZGV2aWNlIHN0cnVjdHVyZQorKglzdGF0dXMJCXR4IGZyYW1lIHN0YXR1cyB3b3JkCisqCisqIFJldHVybnM6CisqCW5vdGhpbmcKKyoKKyogU2lkZSBlZmZlY3RzOgorKgorKiBDYWxsIGNvbnRleHQ6CisqCWludGVycnVwdAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCit2b2lkIHByaXNtMnN0YV9ldl90eGV4Yyh3bGFuZGV2aWNlX3QgKndsYW5kZXYsIFVJTlQxNiBzdGF0dXMpCit7CisJREJGRU5URVI7CisKKwlXTEFOX0xPR19ERUJVRygzLCAiVHhFeGMgc3RhdHVzPTB4JXguXG4iLCBzdGF0dXMpOworCisJREJGRVhJVDsKKwlyZXR1cm47Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIHByaXNtMnN0YV9ldl90eAorKgorKiBIYW5kbGVzIHRoZSBUeCBldmVudC4KKyoKKyogQXJndW1lbnRzOgorKgl3bGFuZGV2CQl3bGFuIGRldmljZSBzdHJ1Y3R1cmUKKyoJc3RhdHVzCQl0eCBmcmFtZSBzdGF0dXMgd29yZAorKiBSZXR1cm5zOgorKglub3RoaW5nCisqCisqIFNpZGUgZWZmZWN0czoKKyoKKyogQ2FsbCBjb250ZXh0OgorKglpbnRlcnJ1cHQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwordm9pZCBwcmlzbTJzdGFfZXZfdHgod2xhbmRldmljZV90ICp3bGFuZGV2LCBVSU5UMTYgc3RhdHVzKQoreworCURCRkVOVEVSOworCVdMQU5fTE9HX0RFQlVHKDQsICJUeCBDb21wbGV0ZSwgc3RhdHVzPTB4JTA0eFxuIiwgc3RhdHVzKTsKKwkvKiB1cGRhdGUgbGludXggbmV0d29yayBzdGF0cyAqLworCXdsYW5kZXYtPmxpbnV4X3N0YXRzLnR4X3BhY2tldHMrKzsKKwlEQkZFWElUOworCXJldHVybjsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogcHJpc20yc3RhX2V2X3J4CisqCisqIEhhbmRsZXMgdGhlIFJ4IGV2ZW50LgorKgorKiBBcmd1bWVudHM6CisqCXdsYW5kZXYJCXdsYW4gZGV2aWNlIHN0cnVjdHVyZQorKgorKiBSZXR1cm5zOgorKglub3RoaW5nCisqCisqIFNpZGUgZWZmZWN0czoKKyoKKyogQ2FsbCBjb250ZXh0OgorKglpbnRlcnJ1cHQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwordm9pZCBwcmlzbTJzdGFfZXZfcngod2xhbmRldmljZV90ICp3bGFuZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCURCRkVOVEVSOworCisJcDgwMjExbmV0ZGV2X3J4KHdsYW5kZXYsIHNrYik7CisKKwlEQkZFWElUOworCXJldHVybjsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIHByaXNtMnN0YV9ldl9hbGxvYworKgorKiBIYW5kbGVzIHRoZSBBbGxvYyBldmVudC4KKyoKKyogQXJndW1lbnRzOgorKgl3bGFuZGV2CQl3bGFuIGRldmljZSBzdHJ1Y3R1cmUKKyoKKyogUmV0dXJuczoKKyoJbm90aGluZworKgorKiBTaWRlIGVmZmVjdHM6CisqCisqIENhbGwgY29udGV4dDoKKyoJaW50ZXJydXB0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3ZvaWQgcHJpc20yc3RhX2V2X2FsbG9jKHdsYW5kZXZpY2VfdCAqd2xhbmRldikKK3sKKwlEQkZFTlRFUjsKKworCXA4MDIxMW5ldGRldl93YWtlX3F1ZXVlKHdsYW5kZXYpOworCisJREJGRVhJVDsKKwlyZXR1cm47Cit9CisKKyNpZiAoV0xBTl9IT1NUSUYgPT0gV0xBTl9QTFggfHwgV0xBTl9IT1NUSUYgPT0gV0xBTl9QQ0kpCisjaWZkZWYgQ09ORklHX1BNCitzdGF0aWMgaW50IHByaXNtMnN0YV9zdXNwZW5kX3BjaShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQoreworICAgICAgIAl3bGFuZGV2aWNlX3QJCSp3bGFuZGV2OworCisJd2xhbmRldiA9ICh3bGFuZGV2aWNlX3QgKikgcGNpX2dldF9kcnZkYXRhKHBkZXYpOworCisJLyogcmVzZXQgaGFyZHdhcmUgKi8KKwlpZiAod2xhbmRldikgeworCQlwcmlzbTJzdGFfaWZzdGF0ZSh3bGFuZGV2LCBQODAyMTFFTlVNX2lmc3RhdGVfZGlzYWJsZSk7CisJCXA4MDIxMV9zdXNwZW5kKHdsYW5kZXYpOworCX0KKworCS8vIGNhbGwgYSBuZXRpZl9kZXZpY2VfZGV0YWNoKHdsYW5kZXYtPm5ldGRldikgPworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcHJpc20yc3RhX3Jlc3VtZV9wY2kgKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQoreworICAgICAgIAl3bGFuZGV2aWNlX3QJCSp3bGFuZGV2OworCisJd2xhbmRldiA9ICh3bGFuZGV2aWNlX3QgKikgcGNpX2dldF9kcnZkYXRhKHBkZXYpOworCisJaWYgKHdsYW5kZXYpIHsKKwkJcHJpc20yc3RhX2lmc3RhdGUod2xhbmRldiwgUDgwMjExRU5VTV9pZnN0YXRlX2Rpc2FibGUpOworCQlwODAyMTFfcmVzdW1lKHdsYW5kZXYpOworCX0KKworICAgICAgICByZXR1cm4gMDsKK30KKyNlbmRpZgorI2VuZGlmCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiBjcmVhdGVfd2xhbgorKgorKiBDYWxsZWQgYXQgbW9kdWxlIGluaXQgdGltZS4gIFRoaXMgY3JlYXRlcyB0aGUgd2xhbmRldmljZV90IHN0cnVjdHVyZQorKiBhbmQgaW5pdGlhbGl6ZXMgaXQgd2l0aCByZWxldmFudCBiaXRzLgorKgorKiBBcmd1bWVudHM6CisqCW5vbmUKKyoKKyogUmV0dXJuczoKKyoJdGhlIGNyZWF0ZWQgd2xhbmRldmljZV90IHN0cnVjdHVyZS4KKyoKKyogU2lkZSBlZmZlY3RzOgorKiAJYWxzbyBhbGxvY2F0ZXMgdGhlIHByaXYvaHcgc3RydWN0dXJlcy4KKyoKKyogQ2FsbCBjb250ZXh0OgorKglwcm9jZXNzIHRocmVhZAorKgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgd2xhbmRldmljZV90ICpjcmVhdGVfd2xhbih2b2lkKQoreworICAgICAgICB3bGFuZGV2aWNlX3QgICAgKndsYW5kZXYgPSBOVUxMOworCWhmYTM4NHhfdAkqaHcgPSBOVUxMOworCisgICAgICAJLyogQWxsb2Mgb3VyIHN0cnVjdHVyZXMgKi8KKwl3bGFuZGV2ID0Ja21hbGxvYyhzaXplb2Yod2xhbmRldmljZV90KSwgR0ZQX0tFUk5FTCk7CisJaHcgPQkJa21hbGxvYyhzaXplb2YoaGZhMzg0eF90KSwgR0ZQX0tFUk5FTCk7CisKKwlpZiAoIXdsYW5kZXYgfHwgIWh3KSB7CisJCVdMQU5fTE9HX0VSUk9SKCIlczogTWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZS5cbiIsIGRldl9pbmZvKTsKKwkJaWYgKHdsYW5kZXYpCWtmcmVlKHdsYW5kZXYpOworCQlpZiAoaHcpCQlrZnJlZShodyk7CisJCXJldHVybiBOVUxMOworCX0KKworCS8qIENsZWFyIGFsbCB0aGUgc3RydWN0cyAqLworCW1lbXNldCh3bGFuZGV2LCAwLCBzaXplb2Yod2xhbmRldmljZV90KSk7CisJbWVtc2V0KGh3LCAwLCBzaXplb2YoaGZhMzg0eF90KSk7CisKKwkvKiBJbml0aWFsaXplIHRoZSBuZXR3b3JrIGRldmljZSBvYmplY3QuICovCisJd2xhbmRldi0+bnNkbmFtZSA9IGRldl9pbmZvOworCXdsYW5kZXYtPm1zZHN0YXRlID0gV0xBTl9NU0RfSFdQUkVTRU5UX1BFTkRJTkc7CisJd2xhbmRldi0+cHJpdiA9IGh3OworCXdsYW5kZXYtPm9wZW4gPSBwcmlzbTJzdGFfb3BlbjsKKwl3bGFuZGV2LT5jbG9zZSA9IHByaXNtMnN0YV9jbG9zZTsKKwl3bGFuZGV2LT5yZXNldCA9IHByaXNtMnN0YV9yZXNldDsKKyNpZmRlZiBDT05GSUdfUFJPQ19GUworCXdsYW5kZXYtPm5zZF9wcm9jX3JlYWQgPSBwcmlzbTJzdGFfcHJvY19yZWFkOworI2VuZGlmCisJd2xhbmRldi0+dHhmcmFtZSA9IHByaXNtMnN0YV90eGZyYW1lOworCXdsYW5kZXYtPm1sbWVyZXF1ZXN0ID0gcHJpc20yc3RhX21sbWVyZXF1ZXN0OworCXdsYW5kZXYtPnNldF9tdWx0aWNhc3RfbGlzdCA9IHByaXNtMnN0YV9zZXRtdWx0aWNhc3Q7CisJd2xhbmRldi0+dHhfdGltZW91dCA9IGhmYTM4NHhfdHhfdGltZW91dDsKKworCXdsYW5kZXYtPm5zZGNhcHMgPSBQODAyMTFfTlNEQ0FQX0hXRlJBR01FTlQgfAorCSAgICAgICAgICAgICAgICAgICBQODAyMTFfTlNEQ0FQX0FVVE9KT0lOOworCisJLyogSW5pdGlhbGl6ZSB0aGUgZGV2aWNlIHByaXZhdGUgZGF0YSBzdHVjdHVyZS4gKi8KKyAgICAgICAgaHctPmRvdDExX2Rlc2lyZWRfYnNzX3R5cGUgPSAxOworCisJcmV0dXJuIHdsYW5kZXY7Cit9CisKKyNpZmRlZiBDT05GSUdfUFJPQ19GUworc3RhdGljIGludAorcHJpc20yc3RhX3Byb2NfcmVhZCgKKwljaGFyCSpwYWdlLAorCWNoYXIJKipzdGFydCwKKwlvZmZfdAlvZmZzZXQsCisJaW50CWNvdW50LAorCWludAkqZW9mLAorCXZvaWQJKmRhdGEpCit7CisJY2hhcgkgKnAgPSBwYWdlOworCXdsYW5kZXZpY2VfdCAqd2xhbmRldiA9ICh3bGFuZGV2aWNlX3QgKikgZGF0YTsKKwloZmEzODR4X3QgKmh3ID0gKGhmYTM4NHhfdCAqKSB3bGFuZGV2LT5wcml2OworCisJVUlOVDE2IGh3dHlwZSA9IDA7CisKKwlEQkZFTlRFUjsKKwlpZiAob2Zmc2V0ICE9IDApIHsKKwkJKmVvZiA9IDE7CisJCWdvdG8gZXhpdDsKKwl9CisKKwkvLyBYWFggMHgwMDAxIGZvciBwcmlzbTIuNS8zLCAweDAwMDAgZm9yIHByaXNtMi4KKwlod3R5cGUgPSBCSVQwOworCisjaWYgKFdMQU5fSE9TVElGICE9IFdMQU5fVVNCKQorCWlmIChody0+aXNyYW0xNikKKwkJaHd0eXBlIHw9IEJJVDE7CisjZW5kaWYKKworI2lmIChXTEFOX0hPU1RJRiA9PSBXTEFOX1BDSSkKKwlod3R5cGUgfD0gQklUMjsKKyNlbmRpZgorCisjZGVmaW5lIFBSSVNNMl9DVlNfSUQgIiRJZDogcHJpc20yc3RhLmMgMTgyNiAyMDA3LTAzLTE5IDE1OjM3OjAwWiBwaXp6YSAkIgorCisJcCArPSBzcHJpbnRmKHAsICIjICVzIHZlcnNpb24gJXMgKCVzKSAnJXMnXG5cbiIsCisJCSAgICAgZGV2X2luZm8sCisJCSAgICAgV0xBTl9SRUxFQVNFLCBXTEFOX0JVSUxEX0RBVEUsIFBSSVNNMl9DVlNfSUQpOworCisJcCArPSBzcHJpbnRmKHAsICIjIG5pYyBoL3c6IGlkPTB4JTAyeCAlZC4lZC4lZFxuIiwKKwkJICAgICBody0+aWRlbnRfbmljLmlkLCBody0+aWRlbnRfbmljLm1ham9yLAorCQkgICAgIGh3LT5pZGVudF9uaWMubWlub3IsIGh3LT5pZGVudF9uaWMudmFyaWFudCk7CisKKwlwICs9IHNwcmludGYocCwgIiMgcHJpIGYvdzogaWQ9MHglMDJ4ICVkLiVkLiVkXG4iLAorCQkgICAgIGh3LT5pZGVudF9wcmlfZncuaWQsIGh3LT5pZGVudF9wcmlfZncubWFqb3IsCisJCSAgICAgaHctPmlkZW50X3ByaV9mdy5taW5vciwgaHctPmlkZW50X3ByaV9mdy52YXJpYW50KTsKKworCWlmIChody0+aWRlbnRfc3RhX2Z3LmlkID09IDB4MWYpIHsKKwkJcCArPSBzcHJpbnRmKHAsICIjIHN0YSBmL3c6IGlkPTB4JTAyeCAlZC4lZC4lZFxuIiwKKwkJCSAgICAgaHctPmlkZW50X3N0YV9mdy5pZCwgaHctPmlkZW50X3N0YV9mdy5tYWpvciwKKwkJCSAgICAgaHctPmlkZW50X3N0YV9mdy5taW5vciwgaHctPmlkZW50X3N0YV9mdy52YXJpYW50KTsKKwl9IGVsc2UgeworCQlwICs9IHNwcmludGYocCwgIiMgYXAgZi93OiBpZD0weCUwMnggJWQuJWQuJWRcbiIsCisJCQkgICAgIGh3LT5pZGVudF9zdGFfZncuaWQsIGh3LT5pZGVudF9zdGFfZncubWFqb3IsCisJCQkgICAgIGh3LT5pZGVudF9zdGFfZncubWlub3IsIGh3LT5pZGVudF9zdGFfZncudmFyaWFudCk7CisJfQorCisjaWYgKFdMQU5fSE9TVElGICE9IFdMQU5fVVNCKQorCXAgKz0gc3ByaW50ZihwLCAiIyBpbml0aWFsIG5pYyBodyB0eXBlLCBuZWVkZWQgZm9yIFNTRiByYW1kbFxuIik7CisJcCArPSBzcHJpbnRmKHAsICJpbml0bmljaHc9JTA0eFxuIiwgaHd0eXBlKTsKKyNlbmRpZgorCisgZXhpdDoKKwlEQkZFWElUOworCXJldHVybiAocCAtIHBhZ2UpOworfQorI2VuZGlmCisKK3ZvaWQgcHJpc20yc3RhX2NvbW1zcXVhbF9kZWZlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKmRhdGEpCit7CisJaGZhMzg0eF90CQkqaHcgPSBjb250YWluZXJfb2YoZGF0YSwgc3RydWN0IGhmYTM4NHgsIGNvbW1zcXVhbF9iaCk7CisgICAgICAgIHdsYW5kZXZpY2VfdCAgICAgICAgICAgICp3bGFuZGV2ID0gaHctPndsYW5kZXY7CisJaGZhMzg0eF9ieXRlc3RyMzJfdCBzc2lkOworCWludCByZXN1bHQgPSAwOworCisJREJGRU5URVI7CisKKwlpZiAoaHctPndsYW5kZXYtPmh3cmVtb3ZlZCkKKwkJZ290byBkb25lOworCisJLyogd2UgZG9uJ3QgY2FyZSBpZiB3ZSdyZSBpbiBBUCBtb2RlICovCisJaWYgKCh3bGFuZGV2LT5tYWNtb2RlID09IFdMQU5fTUFDTU9ERV9OT05FKSB8fAorCSAgICAod2xhbmRldi0+bWFjbW9kZSA9PSBXTEFOX01BQ01PREVfRVNTX0FQKSkgeworCQlnb3RvIGRvbmU7CisJfQorCisJLyogSXQgb25seSBtYWtlcyBzZW5zZSB0byBwb2xsIHRoZXNlIGluIG5vbi1JQlNTICovCisJaWYgKHdsYW5kZXYtPm1hY21vZGUgIT0gV0xBTl9NQUNNT0RFX0lCU1NfU1RBKSB7CisJCXJlc3VsdCA9IGhmYTM4NHhfZHJ2cl9nZXRjb25maWcoaHcsIEhGQTM4NHhfUklEX0RCTUNPTU1TUVVBTElUWSwKKwkJCQkJCSZody0+cXVhbCwKKwkJCQkJCUhGQTM4NHhfUklEX0RCTUNPTU1TUVVBTElUWV9MRU4pOworCisJCWlmIChyZXN1bHQpIHsKKwkJCVdMQU5fTE9HX0VSUk9SKCJlcnJvciBmZXRjaGluZyBjb21tc3F1YWxcbiIpOworCQkJZ290byBkb25lOworCQl9CisKKwkJLy8gcXVhbC5DUV9jdXJyQlNTOyAvLyBsaW5rCisJCS8vIEFTTF9jdXJyQlNTOyAgLy8gbGV2ZWwKKwkJLy8gcXVhbC5BTkxfY3VyckZDOyAvLyBub2lzZQorCisJCVdMQU5fTE9HX0RFQlVHKDMsICJjb21tc3F1YWwgJWQgJWQgJWRcbiIsCisJCQkgICAgICAgaGZhMzg0eDJob3N0XzE2KGh3LT5xdWFsLkNRX2N1cnJCU1MpLAorCQkJICAgICAgIGhmYTM4NHgyaG9zdF8xNihody0+cXVhbC5BU0xfY3VyckJTUyksCisJCQkgICAgICAgaGZhMzg0eDJob3N0XzE2KGh3LT5xdWFsLkFOTF9jdXJyRkMpKTsKKwl9CisKKwkvKiBMYXN0bHksIHdlIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSBCU1NJRCBkaWRuJ3QgY2hhbmdlIG9uIHVzICovCisJcmVzdWx0ID0gaGZhMzg0eF9kcnZyX2dldGNvbmZpZyhodywKKwkJCQkJSEZBMzg0eF9SSURfQ1VSUkVOVEJTU0lELAorCQkJCQl3bGFuZGV2LT5ic3NpZCwgV0xBTl9CU1NJRF9MRU4pOworCWlmICggcmVzdWx0ICkgeworCQlXTEFOX0xPR19ERUJVRygxLAorCQkJICAgICAgICJnZXRjb25maWcoMHglMDJ4KSBmYWlsZWQsIHJlc3VsdCA9ICVkXG4iLAorCQkJICAgICAgIEhGQTM4NHhfUklEX0NVUlJFTlRCU1NJRCwgcmVzdWx0KTsKKwkJZ290byBkb25lOworCX0KKworCXJlc3VsdCA9IGhmYTM4NHhfZHJ2cl9nZXRjb25maWcoaHcsCisJCQkJCUhGQTM4NHhfUklEX0NVUlJFTlRTU0lELAorCQkJCQkmc3NpZCwgc2l6ZW9mKHNzaWQpKTsKKwlpZiAoIHJlc3VsdCApIHsKKwkJV0xBTl9MT0dfREVCVUcoMSwKKwkJCSAgICAgICAiZ2V0Y29uZmlnKDB4JTAyeCkgZmFpbGVkLCByZXN1bHQgPSAlZFxuIiwKKwkJCSAgICAgICBIRkEzODR4X1JJRF9DVVJSRU5UU1NJRCwgcmVzdWx0KTsKKwkJZ290byBkb25lOworCX0KKwlwcmlzbTJtZ210X2J5dGVzdHIycHN0cigoaGZhMzg0eF9ieXRlc3RyX3QgKikmc3NpZCwKKwkJCQkocDgwMjExcHN0cmRfdCAqKSAmd2xhbmRldi0+c3NpZCk7CisKKworCS8qIFJlc2NoZWR1bGUgdGltZXIgKi8KKwltb2RfdGltZXIoJmh3LT5jb21tc3F1YWxfdGltZXIsIGppZmZpZXMgKyBIWik7CisKKyBkb25lOgorCURCRkVYSVQ7Cit9CisKK3ZvaWQgcHJpc20yc3RhX2NvbW1zcXVhbF90aW1lcih1bnNpZ25lZCBsb25nIGRhdGEpCit7CisgICAgICAgIGhmYTM4NHhfdCAgICAgICAgICAgICAgICpodyA9IChoZmEzODR4X3QgKikgZGF0YTsKKworCURCRkVOVEVSOworCisJc2NoZWR1bGVfd29yaygmaHctPmNvbW1zcXVhbF9iaCk7CisKKwlEQkZFWElUOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvdmVyc2lvbi5oIGIvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvdmVyc2lvbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwNWY4ODIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy92ZXJzaW9uLmgKQEAgLTAsMCArMSw2NCBAQAorLyogc3JjL2luY2x1ZGUvd2xhbi92ZXJzaW9uLmgKKyoKKyoKKyogQ29weXJpZ2h0IChDKSAxOTk5IEFic29sdXRlVmFsdWUgU3lzdGVtcywgSW5jLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyoKKyogbGludXgtd2xhbgorKgorKiAgIFRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgYXJlIHN1YmplY3QgdG8gdGhlIE1vemlsbGEgUHVibGljCisqICAgTGljZW5zZSBWZXJzaW9uIDEuMSAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUKKyogICBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YKKyogICB0aGUgTGljZW5zZSBhdCBodHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC8KKyoKKyogICBTb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMKKyogICBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yCisqICAgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nCisqICAgcmlnaHRzIGFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyoKKyogICBBbHRlcm5hdGl2ZWx5LCB0aGUgY29udGVudHMgb2YgdGhpcyBmaWxlIG1heSBiZSB1c2VkIHVuZGVyIHRoZQorKiAgIHRlcm1zIG9mIHRoZSBHTlUgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyICh0aGUgIkdQTCIpLCBpbiB3aGljaAorKiAgIGNhc2UgdGhlIHByb3Zpc2lvbnMgb2YgdGhlIEdQTCBhcmUgYXBwbGljYWJsZSBpbnN0ZWFkIG9mIHRoZQorKiAgIGFib3ZlLiAgSWYgeW91IHdpc2ggdG8gYWxsb3cgdGhlIHVzZSBvZiB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlCisqICAgb25seSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdQTCBhbmQgbm90IHRvIGFsbG93IG90aGVycyB0byB1c2UKKyogICB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIHVuZGVyIHRoZSBNUEwsIGluZGljYXRlIHlvdXIgZGVjaXNpb24KKyogICBieSBkZWxldGluZyB0aGUgcHJvdmlzaW9ucyBhYm92ZSBhbmQgcmVwbGFjZSB0aGVtIHdpdGggdGhlIG5vdGljZQorKiAgIGFuZCBvdGhlciBwcm92aXNpb25zIHJlcXVpcmVkIGJ5IHRoZSBHUEwuICBJZiB5b3UgZG8gbm90IGRlbGV0ZQorKiAgIHRoZSBwcm92aXNpb25zIGFib3ZlLCBhIHJlY2lwaWVudCBtYXkgdXNlIHlvdXIgdmVyc2lvbiBvZiB0aGlzCisqICAgZmlsZSB1bmRlciBlaXRoZXIgdGhlIE1QTCBvciB0aGUgR1BMLgorKgorKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKgorKiBJbnF1aXJpZXMgcmVnYXJkaW5nIHRoZSBsaW51eC13bGFuIE9wZW4gU291cmNlIHByb2plY3QgY2FuIGJlCisqIG1hZGUgZGlyZWN0bHkgdG86CisqCisqIEFic29sdXRlVmFsdWUgU3lzdGVtcyBJbmMuCisqIGluZm9AbGludXgtd2xhbi5jb20KKyogaHR0cDovL3d3dy5saW51eC13bGFuLmNvbQorKgorKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKgorKiBQb3J0aW9ucyBvZiB0aGUgZGV2ZWxvcG1lbnQgb2YgdGhpcyBzb2Z0d2FyZSB3ZXJlIGZ1bmRlZCBieQorKiBJbnRlcnNpbCBDb3Jwb3JhdGlvbiBhcyBwYXJ0IG9mIFBSSVNNKFIpIGNoaXBzZXQgcHJvZHVjdCBkZXZlbG9wbWVudC4KKyoKKyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyovCisjaWZuZGVmIF9XTEFOX1ZFUlNJT05fSAorI2RlZmluZSBfV0xBTl9WRVJTSU9OX0gKKyNpZm5kZWYgS0VSTkVMX1ZFUlNJT04KKyNkZWZpbmUgS0VSTkVMX1ZFUlNJT04oYSxiLGMpICgoKGEpIDw8IDE2KSArICgoYikgPDwgOCkgKyAoYykpCisjZW5kaWYKKworLyogV0xBTl9IT1NUSUYgKGdlbmVyYWxseSBzZXQgb24gdGhlIGNvbW1hbmQgbGluZSwgbm90IGRldGVjdGVkKSAqLworI2RlZmluZSBXTEFOX05PTkUgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgV0xBTl9QQ01DSUEgICAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIFdMQU5fSVNBICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBXTEFOX1BDSSAgICAgICAgICAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgV0xBTl9VU0IgICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIFdMQU5fUExYICAgICAgICAgICAgICAgICAgICAgICAgNQorI2RlZmluZSBXTEFOX1NMQVZFICAgICAgICAgICAgICAgICAgICAgIDYKKyNkZWZpbmUgV0xBTl9SRUxFQVNFCSIwLjIuOCIKKyNkZWZpbmUgV0xBTl9SRUxFQVNFX0NPREUgMHgwMDAyMDgKKyNkZWZpbmUgV0xBTl9CVUlMRF9EQVRFICJUaHUgT2N0ICAyIDExOjA0OjQyIFBEVCAyMDA4IgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3dsYW5fY29tcGF0LmggYi9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy93bGFuX2NvbXBhdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3MDI2NTcKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy93bGFuX2NvbXBhdC5oCkBAIC0wLDAgKzEsNzU3IEBACisvKiB3bGFuX2NvbXBhdC5oCisqCisqIFR5cGVzIGFuZCBtYWNyb3MgdG8gYWlkIGluIHBvcnRhYmlsaXR5CisqCisqIENvcHlyaWdodCAoQykgMTk5OSBBYnNvbHV0ZVZhbHVlIFN5c3RlbXMsIEluYy4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqCisqIGxpbnV4LXdsYW4KKyoKKyogICBUaGUgY29udGVudHMgb2YgdGhpcyBmaWxlIGFyZSBzdWJqZWN0IHRvIHRoZSBNb3ppbGxhIFB1YmxpYworKiAgIExpY2Vuc2UgVmVyc2lvbiAxLjEgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlCisqICAgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mCisqICAgdGhlIExpY2Vuc2UgYXQgaHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvCisqCisqICAgU29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTCisqICAgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvcgorKiAgIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZworKiAgIHJpZ2h0cyBhbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisqCisqICAgQWx0ZXJuYXRpdmVseSwgdGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBtYXkgYmUgdXNlZCB1bmRlciB0aGUKKyogICB0ZXJtcyBvZiB0aGUgR05VIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiAodGhlICJHUEwiKSwgaW4gd2hpY2gKKyogICBjYXNlIHRoZSBwcm92aXNpb25zIG9mIHRoZSBHUEwgYXJlIGFwcGxpY2FibGUgaW5zdGVhZCBvZiB0aGUKKyogICBhYm92ZS4gIElmIHlvdSB3aXNoIHRvIGFsbG93IHRoZSB1c2Ugb2YgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZQorKiAgIG9ubHkgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHUEwgYW5kIG5vdCB0byBhbGxvdyBvdGhlcnMgdG8gdXNlCisqICAgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSB1bmRlciB0aGUgTVBMLCBpbmRpY2F0ZSB5b3VyIGRlY2lzaW9uCisqICAgYnkgZGVsZXRpbmcgdGhlIHByb3Zpc2lvbnMgYWJvdmUgYW5kIHJlcGxhY2UgdGhlbSB3aXRoIHRoZSBub3RpY2UKKyogICBhbmQgb3RoZXIgcHJvdmlzaW9ucyByZXF1aXJlZCBieSB0aGUgR1BMLiAgSWYgeW91IGRvIG5vdCBkZWxldGUKKyogICB0aGUgcHJvdmlzaW9ucyBhYm92ZSwgYSByZWNpcGllbnQgbWF5IHVzZSB5b3VyIHZlcnNpb24gb2YgdGhpcworKiAgIGZpbGUgdW5kZXIgZWl0aGVyIHRoZSBNUEwgb3IgdGhlIEdQTC4KKyoKKyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyoKKyogSW5xdWlyaWVzIHJlZ2FyZGluZyB0aGUgbGludXgtd2xhbiBPcGVuIFNvdXJjZSBwcm9qZWN0IGNhbiBiZQorKiBtYWRlIGRpcmVjdGx5IHRvOgorKgorKiBBYnNvbHV0ZVZhbHVlIFN5c3RlbXMgSW5jLgorKiBpbmZvQGxpbnV4LXdsYW4uY29tCisqIGh0dHA6Ly93d3cubGludXgtd2xhbi5jb20KKyoKKyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyoKKyogUG9ydGlvbnMgb2YgdGhlIGRldmVsb3BtZW50IG9mIHRoaXMgc29mdHdhcmUgd2VyZSBmdW5kZWQgYnkKKyogSW50ZXJzaWwgQ29ycG9yYXRpb24gYXMgcGFydCBvZiBQUklTTShSKSBjaGlwc2V0IHByb2R1Y3QgZGV2ZWxvcG1lbnQuCisqCisqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqLworCisjaWZuZGVmIF9XTEFOX0NPTVBBVF9ICisjZGVmaW5lIF9XTEFOX0NPTVBBVF9ICisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKi0tLS0tLSBFc3RhYmxpc2ggUGxhdGZvcm0gSWRlbnRpdHkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKy8qIEtleSBtYWNyb3M6ICovCisvKiBXTEFOX0NQVV9GQU1JTFkgKi8KKwkjZGVmaW5lIFdMQU5fSXg4NgkJCTEKKwkjZGVmaW5lIFdMQU5fUFBDCQkJMgorCSNkZWZpbmUgV0xBTl9JeDk2CQkJMworCSNkZWZpbmUgV0xBTl9BUk0JCQk0CisJI2RlZmluZSBXTEFOX0FMUEhBCQkJNQorCSNkZWZpbmUgV0xBTl9NSVBTCQkJNgorCSNkZWZpbmUgV0xBTl9IUFBBCQkJNworCSNkZWZpbmUgV0xBTl9TUEFSQwkJCTgKKwkjZGVmaW5lIFdMQU5fU0ggICAgCQkJOQorCSNkZWZpbmUgV0xBTl94ODZfNjQgICAgICAgICAgICAgICAgICAgICAxMAorLyogV0xBTl9TWVNBUkNIICovCisJI2RlZmluZSBXTEFOX1BDQVQJCQkxCisJI2RlZmluZSBXTEFOX01CWAkJCTIKKwkjZGVmaW5lIFdMQU5fUlBYCQkJMworCSNkZWZpbmUgV0xBTl9MV0FSQ0gJCQk0CisJI2RlZmluZSBXTEFOX1BNQUMJCQk1CisJI2RlZmluZSBXTEFOX1NLSUZGCQkJNgorCSNkZWZpbmUgV0xBTl9CSVRTWQkJCTcKKwkjZGVmaW5lIFdMQU5fQUxQSEFBUkNICQkJNworCSNkZWZpbmUgV0xBTl9NSVBTQVJDSAkJCTkKKwkjZGVmaW5lIFdMQU5fSFBQQUFSQ0gJCQkxMAorCSNkZWZpbmUgV0xBTl9TUEFSQ0FSQ0gJCQkxMQorCSNkZWZpbmUgV0xBTl9TSEFSQ0ggICAJCQkxMgorCisvKiBOb3RlOiB0aGUgUExYIEhPU1RJRiBhYm92ZSByZWZlcnMgdG8gc29tZSB2ZW5kb3JzIGltcGxlbWVudGF0aW9ucyBmb3IgKi8KKy8qICAgICAgIFBDSS4gIEl0J3MgYSBQTFggY2hpcCB0aGF0IGlzIGEgUENJIHRvIFBDTUNJQSBhZGFwdGVyLCBidXQgaXQgICAqLworLyogICAgICAgaXNuJ3QgYSByZWFsIFBDTUNJQSBob3N0IGludGVyZmFjZSBhZGFwdGVyIHByb3ZpZGluZyBhbGwgdGhlICAgICovCisvKiAgICAgICBjYXJkJnNvY2tldCBzZXJ2aWNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKworI2lmIChkZWZpbmVkKENPTkZJR19QUEMpIHx8IGRlZmluZWQoQ09ORklHXzh4eCkgfHwgZGVmaW5lZChfX3Bvd2VycGNfXykpCisjaWZuZGVmIF9fcHBjX18KKyNkZWZpbmUgX19wcGNfXworI2VuZGlmCisjZW5kaWYKKworI2lmIGRlZmluZWQoX19LRVJORUxfXykKKworI2lmbmRlZiBBVVRPQ09ORl9JTkNMVURFRAorI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKF9feDg2XzY0X18pCisJI2RlZmluZSBXTEFOX0NQVV9GQU1JTFkJCVdMQU5feDg2XzY0CisJI2RlZmluZSBXTEFOX1NZU0FSQ0gJCVdMQU5fUENBVAorI2VsaWYgZGVmaW5lZChfX2kzODZfXykgfHwgZGVmaW5lZChfX2k0ODZfXykgfHwgZGVmaW5lZChfX2k1ODZfXykgfHwgZGVmaW5lZChfX2k2ODZfXykKKwkjZGVmaW5lIFdMQU5fQ1BVX0ZBTUlMWQkJV0xBTl9JeDg2CisJI2RlZmluZSBXTEFOX1NZU0FSQ0gJCVdMQU5fUENBVAorI2VsaWYgZGVmaW5lZChfX3BwY19fKQorCSNkZWZpbmUgV0xBTl9DUFVfRkFNSUxZCQlXTEFOX1BQQworCSNpZiBkZWZpbmVkKENPTkZJR19NQlgpCisJCSNkZWZpbmUgV0xBTl9TWVNBUkNICVdMQU5fTUJYCisJI2VsaWYgZGVmaW5lZChDT05GSUdfUlBYTElURSkKKwkJI2RlZmluZSBXTEFOX1NZU0FSQ0gJV0xBTl9SUFgKKwkjZWxpZiBkZWZpbmVkKENPTkZJR19SUFhDTEFTU0lDKQorCQkjZGVmaW5lIFdMQU5fU1lTQVJDSAlXTEFOX1JQWAorCSNlbHNlCisJCSNkZWZpbmUgV0xBTl9TWVNBUkNICVdMQU5fUE1BQworCSNlbmRpZgorI2VsaWYgZGVmaW5lZChfX2FybV9fKQorCSNkZWZpbmUgV0xBTl9DUFVfRkFNSUxZCQlXTEFOX0FSTQorCSNkZWZpbmUgV0xBTl9TWVNBUkNICQlXTEFOX1NLSUZGCisjZWxpZiBkZWZpbmVkKF9fYWxwaGFfXykKKwkjZGVmaW5lIFdMQU5fQ1BVX0ZBTUlMWQkJV0xBTl9BTFBIQQorCSNkZWZpbmUgV0xBTl9TWVNBUkNICQlXTEFOX0FMUEhBQVJDSAorI2VsaWYgZGVmaW5lZChfX21pcHNfXykKKwkjZGVmaW5lIFdMQU5fQ1BVX0ZBTUlMWQkJV0xBTl9NSVBTCisJI2RlZmluZSBXTEFOX1NZU0FSQ0gJCVdMQU5fTUlQU0FSQ0gKKyNlbGlmIGRlZmluZWQoX19ocHBhX18pCisJI2RlZmluZSBXTEFOX0NQVV9GQU1JTFkJCVdMQU5fSFBQQQorCSNkZWZpbmUgV0xBTl9TWVNBUkNICQlXTEFOX0hQUEFBUkNICisjZWxpZiBkZWZpbmVkKF9fc3BhcmNfXykKKyAgICAgICAgI2RlZmluZSBXTEFOX0NQVV9GQU1JTFkgICAgICAgICBXTEFOX1NQQVJDCisgICAgICAgICNkZWZpbmUgV0xBTl9TWVNBUkNIICAgICAgICAgICAgV0xBTl9TUEFSQworI2VsaWYgZGVmaW5lZChfX3NoX18pCisgICAgICAgICNkZWZpbmUgV0xBTl9DUFVfRkFNSUxZICAgICAgICAgV0xBTl9TSAorICAgICAgICAjZGVmaW5lIFdMQU5fU1lTQVJDSCAgICAgICAgICAgIFdMQU5fU0hBUkNICisgICAgICAgICNpZm5kZWYgX19MSVRUTEVfRU5ESUFOX18KKyAgICAgICAgI2RlZmluZSBfX0xJVFRMRV9FTkRJQU5fXworICAgICAgICAjZW5kaWYKKyNlbHNlCisJI2Vycm9yICJObyBDUFUgaWRlbnRpZmllZCEiCisjZW5kaWYKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCisKKy8qCisgICBTb21lIGJpZyBlbmRpYW4gbWFjaGluZXMgaW1wbGljaXRseSBkbyBhbGwgSS9PIGluIGxpdHRsZSBlbmRpYW4gbW9kZS4KKworICAgSW4gcGFydGljdWxhcjoKKyAgICAgICAgICBMaW51eC9QUEMgb24gUG93ZXJNYWNzIChQQ0kpCisJICBBcm0vSW50ZWwgWHNjYWxlIChQQ0kpCisKKyAgIFRoaXMgbWF5IGFsc28gYWZmZWN0IFBMWCBib2FyZHMgYW5kIG90aGVyIEJFICZ8IFBQQyBwbGF0Zm9ybXM7CisgICBhcyBuZXcgb25lcyBhcmUgZGlzY292ZXJlZCwgYWRkIHRoZW0gYmVsb3cuCisqLworCisjaWYgZGVmaW5lZChXTEFOX0hPU1RJRikKKyNpZiAoKFdMQU5fSE9TVElGID09IFdMQU5fUENJKSB8fCAoV0xBTl9IT1NUSUYgPT0gV0xBTl9QTFgpKQorI2lmICgoV0xBTl9TWVNBUkNIID09IFdMQU5fU0tJRkYpIHx8IChXTEFOX1NZU0FSQ0ggPT0gV0xBTl9QTUFDKSB8fCAoV0xBTl9TWVNBUkNIID09IFdMQU5fU1BBUkMpKQorI2RlZmluZSBSRVZFUlNFX0VORElBTgorI2VuZGlmCisjZW5kaWYKKyNlbmRpZgorCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworLyotLS0tLS0gQml0IHNldHRpbmdzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisKKyNkZWZpbmUgQklUMAkweDAwMDAwMDAxCisjZGVmaW5lIEJJVDEJMHgwMDAwMDAwMgorI2RlZmluZSBCSVQyCTB4MDAwMDAwMDQKKyNkZWZpbmUgQklUMwkweDAwMDAwMDA4CisjZGVmaW5lIEJJVDQJMHgwMDAwMDAxMAorI2RlZmluZSBCSVQ1CTB4MDAwMDAwMjAKKyNkZWZpbmUgQklUNgkweDAwMDAwMDQwCisjZGVmaW5lIEJJVDcJMHgwMDAwMDA4MAorI2RlZmluZSBCSVQ4CTB4MDAwMDAxMDAKKyNkZWZpbmUgQklUOQkweDAwMDAwMjAwCisjZGVmaW5lIEJJVDEwCTB4MDAwMDA0MDAKKyNkZWZpbmUgQklUMTEJMHgwMDAwMDgwMAorI2RlZmluZSBCSVQxMgkweDAwMDAxMDAwCisjZGVmaW5lIEJJVDEzCTB4MDAwMDIwMDAKKyNkZWZpbmUgQklUMTQJMHgwMDAwNDAwMAorI2RlZmluZSBCSVQxNQkweDAwMDA4MDAwCisjZGVmaW5lIEJJVDE2CTB4MDAwMTAwMDAKKyNkZWZpbmUgQklUMTcJMHgwMDAyMDAwMAorI2RlZmluZSBCSVQxOAkweDAwMDQwMDAwCisjZGVmaW5lIEJJVDE5CTB4MDAwODAwMDAKKyNkZWZpbmUgQklUMjAJMHgwMDEwMDAwMAorI2RlZmluZSBCSVQyMQkweDAwMjAwMDAwCisjZGVmaW5lIEJJVDIyCTB4MDA0MDAwMDAKKyNkZWZpbmUgQklUMjMJMHgwMDgwMDAwMAorI2RlZmluZSBCSVQyNAkweDAxMDAwMDAwCisjZGVmaW5lIEJJVDI1CTB4MDIwMDAwMDAKKyNkZWZpbmUgQklUMjYJMHgwNDAwMDAwMAorI2RlZmluZSBCSVQyNwkweDA4MDAwMDAwCisjZGVmaW5lIEJJVDI4CTB4MTAwMDAwMDAKKyNkZWZpbmUgQklUMjkJMHgyMDAwMDAwMAorI2RlZmluZSBCSVQzMAkweDQwMDAwMDAwCisjZGVmaW5lIEJJVDMxCTB4ODAwMDAwMDAKKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKK3R5cGVkZWYgdV9pbnQ4X3QJVUlOVDg7Cit0eXBlZGVmIHVfaW50MTZfdAlVSU5UMTY7Cit0eXBlZGVmIHVfaW50MzJfdAlVSU5UMzI7CisKK3R5cGVkZWYgaW50OF90CQlJTlQ4OwordHlwZWRlZiBpbnQxNl90CQlJTlQxNjsKK3R5cGVkZWYgaW50MzJfdAkJSU5UMzI7CisKK3R5cGVkZWYgdW5zaWduZWQgaW50ICAgIFVJTlQ7Cit0eXBlZGVmIHNpZ25lZCBpbnQgICAgICBJTlQ7CisKK3R5cGVkZWYgdV9pbnQ2NF90CVVJTlQ2NDsKK3R5cGVkZWYgaW50NjRfdAkJSU5UNjQ7CisKKyNkZWZpbmUgVUlOVDhfTUFYCSgweGZmVUwpCisjZGVmaW5lIFVJTlQxNl9NQVgJKDB4ZmZmZlVMKQorI2RlZmluZSBVSU5UMzJfTUFYCSgweGZmZmZmZmZmVUwpCisKKyNkZWZpbmUgSU5UOF9NQVgJKDB4N2ZMKQorI2RlZmluZSBJTlQxNl9NQVgJKDB4N2ZmZkwpCisjZGVmaW5lIElOVDMyX01BWAkoMHg3ZmZmZmZmZkwpCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKi0tLS0tLSBDb21waWxlciBQb3J0YWJpbGl0eSBNYWNyb3MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKyNkZWZpbmUgX19XTEFOX0FUVFJJQl9QQUNLX18JCV9fYXR0cmlidXRlX18gKChwYWNrZWQpKQorCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworLyotLS0tLS0gT1MgUG9ydGFiaWxpdHkgTWFjcm9zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisKKyNpZm5kZWYgV0xBTl9EQlZBUgorI2RlZmluZSBXTEFOX0RCVkFSCXdsYW5fZGVidWcKKyNlbmRpZgorCisjaWZuZGVmIEtFUk5FTF9WRVJTSU9OCisjZGVmaW5lIEtFUk5FTF9WRVJTSU9OKGEsYixjKSAoKChhKSA8PCAxNikgKyAoKGIpIDw8IDgpICsgKGMpKQorI2VuZGlmCisKKyNpZiAoTElOVVhfVkVSU0lPTl9DT0RFID49IEtFUk5FTF9WRVJTSU9OKDIsNiwwKSkKKyMgIGlmIChMSU5VWF9WRVJTSU9OX0NPREUgPiBLRVJORUxfVkVSU0lPTigyLDYsOCkpCisjICAgIGluY2x1ZGUgPGxpbnV4L2hhcmRpcnEuaD4KKyMgIGVsc2UKKyMgICAgaW5jbHVkZSA8YXNtL2hhcmRpcnEuaD4KKyMgIGVuZGlmCisjZWxpZiBkZWZpbmVkKF9fS0VSTkVMX18pCisjICBkZWZpbmUgUFJFRU1QVF9NQVNLICAoMHgwMDAwMDBGRlVMKQorIyAgZGVmaW5lIHByZWVtcHRfY291bnQoKSAoMFVMKQorI2VuZGlmCisKKyNkZWZpbmUgV0xBTl9MT0dfRVJST1IoeCxhcmdzLi4uKSBwcmludGsoS0VSTl9FUlIgIiVzOiAiIHggLCBfX0ZVTkNUSU9OX18gLCAjI2FyZ3MpOworCisjZGVmaW5lIFdMQU5fTE9HX1dBUk5JTkcoeCxhcmdzLi4uKSBwcmludGsoS0VSTl9XQVJOSU5HICIlczogIiB4ICwgX19GVU5DVElPTl9fICwgIyNhcmdzKTsKKworI2RlZmluZSBXTEFOX0xPR19OT1RJQ0UoeCxhcmdzLi4uKSBwcmludGsoS0VSTl9OT1RJQ0UgIiVzOiAiIHggLCBfX0ZVTkNUSU9OX18gLCAjI2FyZ3MpOworCisjZGVmaW5lIFdMQU5fTE9HX0lORk8oYXJncy4uLiApIHByaW50ayhLRVJOX0lORk8gYXJncykKKworI2lmIGRlZmluZWQoV0xBTl9JTkNMVURFX0RFQlVHKQorCSNkZWZpbmUgV0xBTl9BU1NFUlQoYykgaWYgKCghKGMpKSAmJiBXTEFOX0RCVkFSID49IDEpIHsgXAorCQlXTEFOX0xPR19ERUJVRygxLCAiQXNzZXJ0aW9uIGZhaWx1cmUhXG4iKTsgfQorCSNkZWZpbmUgV0xBTl9IRVhfRFVNUCggbCwgeCwgcCwgbikJaWYoIFdMQU5fREJWQVIgPj0gKGwpICl7IFwKKwkJaW50IF9faV9fOyBcCisJCXByaW50ayhLRVJOX0RFQlVHIHggIjoiKTsgXAorCQlmb3IoIF9faV9fPTA7IF9faV9fIDwgKG4pOyBfX2lfXysrKSBcCisJCQlwcmludGsoICIgJTAyeCIsICgoVUlOVDgqKShwKSlbX19pX19dKTsgXAorCQlwcmludGsoIlxuIik7IH0KKwkjZGVmaW5lIERCRkVOVEVSIHsgaWYgKCBXTEFOX0RCVkFSID49IDUgKXsgV0xBTl9MT0dfREVCVUcoMywiLS0tLT5cbiIpOyB9IH0KKwkjZGVmaW5lIERCRkVYSVQgIHsgaWYgKCBXTEFOX0RCVkFSID49IDUgKXsgV0xBTl9MT0dfREVCVUcoMywiPC0tLS1cbiIpOyB9IH0KKworCSNkZWZpbmUgV0xBTl9MT0dfREVCVUcobCx4LGFyZ3MuLi4pIGlmICggV0xBTl9EQlZBUiA+PSAobCkpIHByaW50ayhLRVJOX0RFQlVHICIlcyglbHUpOiAiIHggLCAgX19GVU5DVElPTl9fLCAocHJlZW1wdF9jb3VudCgpICYgUFJFRU1QVF9NQVNLKSwgIyNhcmdzICk7CisjZWxzZQorCSNkZWZpbmUgV0xBTl9BU1NFUlQoYykKKwkjZGVmaW5lIFdMQU5fSEVYX0RVTVAoIGwsIHMsIHAsIG4pCisJI2RlZmluZSBEQkZFTlRFUgorCSNkZWZpbmUgREJGRVhJVAorCisJI2RlZmluZSBXTEFOX0xPR19ERUJVRyhsLCBzLCBhcmdzLi4uKQorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfU01QCisjZGVmaW5lIF9fU01QX18JCQkxCisjZW5kaWYKKworI2lmIGRlZmluZWQoX19LRVJORUxfXykKKworI2lmICgoTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiw1LDApKSB8fCAoTElOVVhfVkVSU0lPTl9DT0RFID49IEtFUk5FTF9WRVJTSU9OKDIsNiwxOSkpKQorI2RlZmluZSBVUkJfT05MWV9DQUxMQkFDSworI2VuZGlmCisKKyNpZiAoTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiw2LDE5KSkKKyNkZWZpbmUgUFRfUkVHUyAgICAsIHN0cnVjdCBwdF9yZWdzICpyZWdzCisjZWxzZQorI2RlZmluZSBQVF9SRUdTCisjZW5kaWYKKworI2lmIChMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigyLDYsNykpCisjICBkZWZpbmUgZGVsX3NpbmdsZXNob3RfdGltZXJfc3luYyhhKSAgZGVsX3RpbWVyX3N5bmMoYSkKKyNlbmRpZgorCisjaWYgKExJTlVYX1ZFUlNJT05fQ09ERSA+PSBLRVJORUxfVkVSU0lPTigyLDQsMTcpKQorI2RlZmluZSBDT05GSUdfTkVUTElOSwkJMQorI2VuZGlmCisKKyNpZiAoTElOVVhfVkVSU0lPTl9DT0RFID49IEtFUk5FTF9WRVJTSU9OKDIsNCwwKSkKKyNkZWZpbmUga2ZyZWVfcyhhLCBiKQlrZnJlZSgoYSkpCisjZW5kaWYKKworI2lmIChMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigyLDIsMTgpKQorI2lmbmRlZiBpbml0X3dhaXRxdWV1ZV9oZWFkCisjaWYgKExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDIsMCwxNikpCisjZGVmaW5lIGluaXRfd2FpdHF1ZXVlX2hlYWQocCkgICgqKHApID0gTlVMTCkKKyNlbHNlCisjZGVmaW5lIGluaXRfd2FpdHF1ZXVlX2hlYWQocCkgIGluaXRfd2FpdHF1ZXVlKHApCisjZW5kaWYKK3R5cGVkZWYgc3RydWN0IHdhaXRfcXVldWUgKndhaXRfcXVldWVfaGVhZF90OwordHlwZWRlZiBzdHJ1Y3Qgd2FpdF9xdWV1ZSB3YWl0X3F1ZXVlX3Q7CisjZGVmaW5lIHNldF9jdXJyZW50X3N0YXRlKGIpICB7IGN1cnJlbnQtPnN0YXRlID0gKGIpOyBtYigpOyB9CisjZGVmaW5lIGluaXRfd2FpdHF1ZXVlX2VudHJ5KGEsIGIpIHsgKGEpLT50YXNrID0gY3VycmVudDsgfQorI2VuZGlmCisjZW5kaWYKKworI2lmbmRlZiB3YWl0X2V2ZW50X2ludGVycnVwdGlibGVfdGltZW91dAorLy8gcmV0dmFsID09IDA7IHNpZ25hbCBtZXQ7IHdlJ3JlIGdvb2QuCisvLyByZXR2YWwgPCAwOyBpbnRlcnJ1cHRlZCBieSBzaWduYWwuCisvLyByZXR2YWwgPiAwOyB0aW1lZCBvdXQuCisKKyNpZiAoTElOVVhfVkVSU0lPTl9DT0RFID49IEtFUk5FTF9WRVJTSU9OKDIsNCwwKSkgIC8vIGZpeG1lPworCisjZGVmaW5lIF9fd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQod3EsIGNvbmRpdGlvbiwgcmV0KSAgICAgICAgICAgIFwKK2RvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIHdhaXRfcXVldWVfdCBfX3dhaXQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgaW5pdF93YWl0cXVldWVfZW50cnkoJl9fd2FpdCwgY3VycmVudCk7ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgYWRkX3dhaXRfcXVldWUoJndxLCAmX193YWl0KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICBmb3IgKDs7KSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICBpZiAoY29uZGl0aW9uKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgaWYgKCFzaWduYWxfcGVuZGluZyhjdXJyZW50KSkgeyAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgIHJldCA9IHNjaGVkdWxlX3RpbWVvdXQocmV0KSAgICA7ICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFyZXQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgcmV0ID0gLUVSRVNUQVJUU1lTOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIHNldF9jdXJyZW50X3N0YXRlKFRBU0tfUlVOTklORyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgcmVtb3ZlX3dhaXRfcXVldWUoJndxLCAmX193YWl0KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK30gd2hpbGUgKDApCisKKyNlbHNlIC8vIDIuMgorCisKKyNkZWZpbmUgX193YWl0X2V2ZW50X2ludGVycnVwdGlibGVfdGltZW91dCh3cSwgY29uZGl0aW9uLCByZXQpICAgICAgICAgIFwKK2RvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgc3RydWN0IHdhaXRfcXVldWUgX193YWl0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgX193YWl0LnRhc2sgPSBjdXJyZW50OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgYWRkX3dhaXRfcXVldWUoJndxLCAmX193YWl0KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgZm9yICg7OykgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICBjdXJyZW50LT5zdGF0ZSA9IFRBU0tfSU5URVJSVVBUSUJMRTsgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICBpZiAoY29uZGl0aW9uKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICBpZiAoIXNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSB7ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldCA9IHNjaGVkdWxlX3RpbWVvdXQocmV0KTsgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcmV0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICByZXQgPSAtRVJFU1RBUlRTWVM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgY3VycmVudC0+c3RhdGUgPSBUQVNLX1JVTk5JTkc7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgcmVtb3ZlX3dhaXRfcXVldWUoJndxLCAmX193YWl0KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK30gd2hpbGUgKDApCisKKyNlbmRpZiAgLy8gdmVyc2lvbiA+PSAyLjQKKworI2RlZmluZSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGVfdGltZW91dCh3cSwgY29uZGl0aW9uLCB0aW1lb3V0KQkgIFwKKyh7CQkJCQkJCQkJICBcCisJbG9uZyBfX3JldCA9IHRpbWVvdXQ7CQkJCQkJICBcCisJaWYgKCEoY29uZGl0aW9uKSkJCQkJCQkgIFwKKwkJX193YWl0X2V2ZW50X2ludGVycnVwdGlibGVfdGltZW91dCh3cSwgY29uZGl0aW9uLCBfX3JldCk7IFwKKwlfX3JldDsJCQkJCQkJCSAgXAorfSkKKworI2VuZGlmCisKKyNpZiAoTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiw0LDIwKSkKKyNpZmRlZiBfTElOVVhfTElTVF9ICisKK3N0YXRpYyBpbmxpbmUgdm9pZCBsaXN0X21vdmVfdGFpbChzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0LAorICAgICAgICAgIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpCit7CisgICAgICAgIF9fbGlzdF9kZWwobGlzdC0+cHJldiwgbGlzdC0+bmV4dCk7CisgICAgICAgIGxpc3RfYWRkX3RhaWwobGlzdCwgaGVhZCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX2xpc3Rfc3BsaWNlKHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QsCisJCQkJIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpCit7CisgICAgICBzdHJ1Y3QgbGlzdF9oZWFkICpmaXJzdCA9IGxpc3QtPm5leHQ7CisgICAgICBzdHJ1Y3QgbGlzdF9oZWFkICpsYXN0ID0gbGlzdC0+cHJldjsKKyAgICAgIHN0cnVjdCBsaXN0X2hlYWQgKmF0ID0gaGVhZC0+bmV4dDsKKworICAgICAgZmlyc3QtPnByZXYgPSBoZWFkOworICAgICAgaGVhZC0+bmV4dCA9IGZpcnN0OworCisgICAgICBsYXN0LT5uZXh0ID0gYXQ7CisgICAgICBhdC0+cHJldiA9IGxhc3Q7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBsaXN0X21vdmUoc3RydWN0IGxpc3RfaGVhZCAqbGlzdCwgc3RydWN0IGxpc3RfaGVhZCAqaGVhZCkKK3sKKyAgICAgIF9fbGlzdF9kZWwobGlzdC0+cHJldiwgbGlzdC0+bmV4dCk7CisgICAgICBsaXN0X2FkZChsaXN0LCBoZWFkKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGxpc3Rfc3BsaWNlX2luaXQoc3RydWN0IGxpc3RfaGVhZCAqbGlzdCwKKyAgICAgICAgICAgIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpCit7CisJaWYgKCFsaXN0X2VtcHR5KGxpc3QpKSB7CisJCV9fbGlzdF9zcGxpY2UobGlzdCwgaGVhZCk7CisJCUlOSVRfTElTVF9IRUFEKGxpc3QpOworCX0KK30KKworCisjZW5kaWYgIC8vIExJU1RfSAorI2VuZGlmCisKKyNpZiAoTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiwxLDkwKSkKKyNkZWZpbmUgc3Bpbl9sb2NrKGwpICAgICAgICAgICAgZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSBzcGluX3VubG9jayhsKSAgICAgICAgICBkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIHNwaW5fbG9ja19pcnFzYXZlKGwsZikgIGRvIHsgc2F2ZV9mbGFncyhmKTsgY2xpKCk7IH0gd2hpbGUgKDApCisjZGVmaW5lIHNwaW5fdW5sb2NrX2lycXJlc3RvcmUobCxmKSBkbyB7IHJlc3RvcmVfZmxhZ3MoZik7IH0gd2hpbGUgKDApCisjZGVmaW5lIHNwaW5fbG9ja19pbml0KHMpICAgICAgIGRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgc3Bpbl90cnlsb2NrKGwpICAgICAgICAgKDEpCit0eXBlZGVmIGludCBzcGlubG9ja190OworI2VuZGlmCisKKyNpZiAoTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiw0LDApKSAvLyBYWFggPz8/CisjZGVmaW5lIHNwaW5fbG9ja19iaCAgICAgICAgIHNwaW5fbG9jaworI2VuZGlmCisKKyNpZiAoTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiw0LDApKQorI2lmZGVmIENPTkZJR19TTVAKKyNkZWZpbmUgc3Bpbl9pc19sb2NrZWQoeCkgICAgICAgKCoodm9sYXRpbGUgY2hhciAqKSgmKHgpLT5sb2NrKSA8PSAwKQorI2Vsc2UKKyNkZWZpbmUgc3Bpbl9pc19sb2NrZWQobCkgICAgICAgKDApCisjZW5kaWYKKyNlbmRpZgorCisjaWYgKExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDIsNCwyOCkpCisjZGVmaW5lIF9fdXNlcgorI2RlZmluZSBfX2lvbWVtCisjZW5kaWYKKworI2lmZGVmIF9MSU5VWF9QUk9DX0ZTX0gKKyNpZiAoTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiwzLDI1KSkKKworZXh0ZXJuIGlubGluZSBzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKgorY3JlYXRlX3Byb2NfcmVhZF9lbnRyeShjb25zdCBjaGFyICpuYW1lLCBtb2RlX3QgbW9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHByb2NfZGlyX2VudHJ5ICpiYXNlLAorICAgICAgICAgICAgICAgICAgICAgICByZWFkX3Byb2NfdCAqcmVhZF9wcm9jLCB2b2lkICpkYXRhKQoreworICAgIHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcmVzID0gY3JlYXRlX3Byb2NfZW50cnkobmFtZSwgbW9kZSwgYmFzZSk7CisgICAgaWYgKHJlcykgeworICAgICAgICByZXMtPnJlYWRfcHJvYyA9IHJlYWRfcHJvYzsKKyAgICAgICAgcmVzLT5kYXRhID0gZGF0YTsKKyAgICB9CisgICAgcmV0dXJuIHJlczsKK30KKyNlbmRpZgorCisjaWYgKExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDIsMywyOSkpCisjaWZuZGVmIHByb2NfbWtkaXIKKyNkZWZpbmUgcHJvY19ta2RpcihuYW1lLCByb290KSBjcmVhdGVfcHJvY19lbnRyeShuYW1lLCBTX0lGRElSLCByb290KQorI2VuZGlmCisjZW5kaWYKKyNlbmRpZiAvKiBfTElOVVhfUFJPQ19GU19IICovCisKKyNpZiAoTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiw1LDApKQorI2lmbmRlZiBJTklUX1RRVUVVRQorI2RlZmluZSBQUkVQQVJFX1RRVUVVRShfdHEsIF9yb3V0aW5lLCBfZGF0YSkgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgKF90cSktPnJvdXRpbmUgPSBfcm91dGluZTsgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIChfdHEpLT5kYXRhID0gX2RhdGE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgfSB3aGlsZSAoMCkKKyNkZWZpbmUgSU5JVF9UUVVFVUUoX3RxLCBfcm91dGluZSwgX2RhdGEpICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIElOSVRfTElTVF9IRUFEKCYoX3RxKS0+bGlzdCk7ICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAoX3RxKS0+c3luYyA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgUFJFUEFSRV9UUVVFVUUoKF90cSksIChfcm91dGluZSksIChfZGF0YSkpOyAgICAgXAorICAgICAgICB9IHdoaWxlICgwKQorI2VuZGlmCisKKyNpZm5kZWYgY29udGFpbmVyX29mCisjZGVmaW5lIGNvbnRhaW5lcl9vZihwdHIsIHR5cGUsIG1lbWJlcikgKHsJCQlcCisgICAgICAgIGNvbnN0IHR5cGVvZiggKCh0eXBlICopMCktPm1lbWJlciApICpfX21wdHIgPSAocHRyKTsJXAorICAgICAgICAodHlwZSAqKSggKGNoYXIgKilfX21wdHIgLSBvZmZzZXRvZih0eXBlLG1lbWJlcikgKTt9KQorI2VuZGlmCisKKyNpZm5kZWYgSU5JVF9XT1JLCisjZGVmaW5lIHdvcmtfc3RydWN0IHRxX3N0cnVjdAorCisjaWYgKExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDIsNCwwKSkKKyNkZWZpbmUgc2NoZWR1bGVfd29yayhhKSAgIHF1ZXVlX3Rhc2soYSwgJnRxX3NjaGVkdWxlcikKKyNlbHNlCisjZGVmaW5lIHNjaGVkdWxlX3dvcmsoYSkgIHNjaGVkdWxlX3Rhc2soYSkKKyNlbmRpZgorCisjZGVmaW5lIGZsdXNoX3NjaGVkdWxlZF93b3JrICBmbHVzaF9zY2hlZHVsZWRfdGFza3MKKyNkZWZpbmUgSU5JVF9XT1JLMihfd3EsIF9yb3V0aW5lKSAgSU5JVF9UUVVFVUUoX3dxLCAodm9pZCAoKikodm9pZCAqKSlfcm91dGluZSwgX3dxKQorI2VuZGlmCisKKyNlbHNlIC8vID49IDIuNSBrZXJuZWwKKworI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDIsNiwyMCkKKyNkZWZpbmUgSU5JVF9XT1JLMihfd3EsIF9yb3V0aW5lKQlJTklUX1dPUksoX3dxLCAodm9pZCAoKikodm9pZCAqKSlfcm91dGluZSwgX3dxKQorI2Vsc2UKKyNkZWZpbmUgSU5JVF9XT1JLMihfd3EsIF9yb3V0aW5lKQlJTklUX1dPUksoX3dxLCBfcm91dGluZSkKKyNlbmRpZgorCisjZW5kaWYgLy8gPj0gMi41IGtlcm5lbAorCisjaWYgKExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDIsMywzOCkpCit0eXBlZGVmIHN0cnVjdCBkZXZpY2UgbmV0ZGV2aWNlX3Q7CisjZWxpZiAoTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiw0LDQpKQordHlwZWRlZiBzdHJ1Y3QgbmV0X2RldmljZSBuZXRkZXZpY2VfdDsKKyNlbHNlCisjdW5kZWYgbmV0ZGV2aWNlX3QKK3R5cGVkZWYgc3RydWN0IG5ldF9kZXZpY2UgbmV0ZGV2aWNlX3Q7CisjZW5kaWYKKworI2lmZGVmIFdJUkVMRVNTX0VYVAorI2lmIChXSVJFTEVTU19FWFQgPCAxMykKK3N0cnVjdCBpd19yZXF1ZXN0X2luZm8KK3sKKyAgICAgICAgX191MTYgICAgICAgICAgIGNtZDsgICAgICAgICAgICAvKiBXaXJlbGVzcyBFeHRlbnNpb24gY29tbWFuZCAqLworICAgICAgICBfX3UxNiAgICAgICAgICAgZmxhZ3M7ICAgICAgICAgIC8qIE1vcmUgdG8gY29tZSA7LSkgKi8KK307CisjZW5kaWYKKyNlbmRpZgorCisKKyNpZiAoTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiwxLDE4KSkKKyNkZWZpbmUgTU9EVUxFX1BBUk0oYSxiKSAgICAgICAgZXh0ZXJuIGludCBfX2JvZ3VzX2RlY2wKKyNkZWZpbmUgTU9EVUxFX0FVVEhPUihhKSAgICAgICAgZXh0ZXJuIGludCBfX2JvZ3VzX2RlY2wKKyNkZWZpbmUgTU9EVUxFX0RFU0NSSVBUSU9OKGEpICAgZXh0ZXJuIGludCBfX2JvZ3VzX2RlY2wKKyNkZWZpbmUgTU9EVUxFX1NVUFBPUlRFRF9ERVZJQ0UoYSkgZXh0ZXJuIGludCBfX2JvZ3VzX2RlY2wKKyN1bmRlZiAgR0VUX1VTRV9DT1VOVAorI2RlZmluZSBHRVRfVVNFX0NPVU5UKG0pICAgICAgICBtb2RfdXNlX2NvdW50XworI2VuZGlmCisKKyNpZm5kZWYgTU9EVUxFX09XTkVSCisjZGVmaW5lIE1PRFVMRV9PV05FUihhKSAgICAgICAgIGV4dGVybiBpbnQgX19ib2d1c19kZWNsCisjZGVmaW5lIEFOQ0lFTlRfTU9EVUxFX0NPREUKKyNlbmRpZgorCisjaWZuZGVmIE1PRFVMRV9MSUNFTlNFCisjZGVmaW5lIE1PRFVMRV9MSUNFTlNFKG0pICAgICAgIGV4dGVybiBpbnQgX19ib2d1c19kZWNsCisjZW5kaWYKKworLyogVE9ETzogIERvIHdlIGNhcmUgYWJvdXQgdGhpcz8gKi8KKyNpZm5kZWYgTU9EVUxFX0RFVklDRV9UQUJMRQorI2RlZmluZSBNT0RVTEVfREVWSUNFX1RBQkxFKGZvbyxiYXIpCisjZW5kaWYKKworI2RlZmluZSB3bGFuX21pbnV0ZXMydGlja3MoYSkgKChhKSood2xhbl90aWNrc19wZXJfc2VjICogIDYwKSkKKyNkZWZpbmUgd2xhbl9zZWNvbmRzMnRpY2tzKGEpICgoYSkqKHdsYW5fdGlja3NfcGVyX3NlYykpCisKKyNpZiAoTElOVVhfVkVSU0lPTl9DT0RFID4gS0VSTkVMX1ZFUlNJT04oMiw1LDQ3KSkKKyNkZWZpbmUgTkVXX01PRFVMRV9DT0RFCisjaWZkZWYgQU5DSUVOVF9NT0RVTEVfQ09ERQorI3VuZGVmIEFOQ0lFTlRfTU9EVUxFX0NPREUKKyNlbmRpZgorI2VsaWYgKExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDIsNCwyNSkpCisjZGVmaW5lIG1vZHVsZV9wYXJhbShuYW1lLCB0eXBlLCBwZXJtKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgc3RhdGljIGlubGluZSB2b2lkICpfX2NoZWNrX2V4aXN0ZW5jZV8jI25hbWUodm9pZCkgeyByZXR1cm4gJm5hbWU7IH0gXAorICAgICAgICBNT0RVTEVfUEFSTShuYW1lLCBfTU9EVUxFX1BBUk1fU1RSSU5HXyAjIyB0eXBlKQorCisjZGVmaW5lIF9NT0RVTEVfUEFSTV9TVFJJTkdfYnl0ZSAiYiIKKyNkZWZpbmUgX01PRFVMRV9QQVJNX1NUUklOR19zaG9ydCAiaCIKKyNkZWZpbmUgX01PRFVMRV9QQVJNX1NUUklOR191c2hvcnQgImgiCisjZGVmaW5lIF9NT0RVTEVfUEFSTV9TVFJJTkdfaW50ICJpIgorI2RlZmluZSBfTU9EVUxFX1BBUk1fU1RSSU5HX3VpbnQgImkiCisjZGVmaW5lIF9NT0RVTEVfUEFSTV9TVFJJTkdfbG9uZyAibCIKKyNkZWZpbmUgX01PRFVMRV9QQVJNX1NUUklOR191bG9uZyAibCIKKyNkZWZpbmUgX01PRFVMRV9QQVJNX1NUUklOR19ib29sICJpIgorI2VuZGlmCisKKy8qIGxpbnV4IDwgMi41LjY5ICovCisjaWZuZGVmIElSUV9OT05FCit0eXBlZGVmIHZvaWQgaXJxcmV0dXJuX3Q7CisjZGVmaW5lIElSUV9OT05FCisjZGVmaW5lIElSUV9IQU5ETEVECisjZGVmaW5lIElSUV9SRVRWQUwoeCkKKyNlbmRpZgorCisjaWZuZGVmIGluX2F0b21pYworI2RlZmluZSBpbl9hdG9taWMoKSAgMAorI2VuZGlmCisKKyNpZiAoTElOVVhfVkVSU0lPTl9DT0RFID4gS0VSTkVMX1ZFUlNJT04oMiw2LDEzKSkKKyNkZWZpbmUgVVJCX0FTWU5DX1VOTElOSyAwCisjZW5kaWYKKworI2lmIChMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigyLDYsNykpCisjZGVmaW5lIFVSQl9BU1lOQ19VTkxJTksgIFVTQl9BU1lOQ19VTkxJTksKKyNkZWZpbmUgdXNiX2ZpbGxfYnVsa191cmIgIEZJTExfQlVMS19VUkIKKyNkZWZpbmUgdXNiX2tpbGxfdXJiICB1c2JfdW5saW5rX3VyYgorI2Vsc2UKKyNkZWZpbmUgVVNCX1FVRVVFX0JVTEsgMAorI2VuZGlmCisKKyNpZiAoTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiw2LDExKSkKK3R5cGVkZWYgdTMyIHBtX21lc3NhZ2VfdDsKKyNlbmRpZgorCisjaWYgKExJTlVYX1ZFUlNJT05fQ09ERSA+IEtFUk5FTF9WRVJTSU9OKDIsNiw5KSkKKyNkZWZpbmUgaG90cGx1Z19wYXRoICAiL2V0Yy9ob3RwbHVnL3dsYW4uYWdlbnQiCisjZW5kaWYKKworI2lmIChMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigyLDYsMCkpCisjZGVmaW5lIGZyZWVfbmV0ZGV2KHgpICAgICAgIGtmcmVlKHgpCisjZW5kaWYKKworI2lmIChMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigyLDYsOSkpCisjZGVmaW5lIGV0aF9oZHIoeCkgICAgICAgICAgICh4KS0+bWFjLmV0aGVybmV0CisjZW5kaWYKKworI2lmIChMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigyLDQsMCkpCisjZGVmaW5lIGRlbF90aW1lcl9zeW5jKGEpICAgICAgIGRlbF90aW1lcihhKQorI2VuZGlmCisKKyNpZm5kZWYgbWlnaHRfc2xlZXAKKyNkZWZpbmUgbWlnaHRfc2xlZXAoYSkgICBkbyB7IH0gd2hpbGUgKDApCisjZW5kaWYKKworLyogQXBwYXJlbnRseSAyLjQuMiBldGh0b29sIGlzIHF1aXRlIGRpZmZlcmVudCwgbWF5YmUgbmV3ZXIgdG9vPyAqLworI2lmIChkZWZpbmVkKFNJT0VUSFRPT0wpICYmICFkZWZpbmVkKEVUSFRPT0xfR0RSVklORk8pKQorI3VuZGVmIFNJT0VUSFRPT0wKKyNlbmRpZgorCisvLyBwY21jaWEtY3Mgc3R1ZmYKKyNpZiAoKExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDIsNSw2OCkpICYmIFwKKyAgICAgIWRlZmluZWQocGNtY2lhX2FjY2Vzc19jb25maWd1cmF0aW9uX3JlZ2lzdGVyKSkKKyNkZWZpbmUgcGNtY2lhX2FjY2Vzc19jb25maWd1cmF0aW9uX3JlZ2lzdGVyKGhhbmRsZSwgcmVnKSBcCisgICAgICAgIENhcmRTZXJ2aWNlcyhBY2Nlc3NDb25maWd1cmF0aW9uUmVnaXN0ZXIsIGhhbmRsZSwgcmVnKQorI2RlZmluZSBwY21jaWFfcmVnaXN0ZXJfY2xpZW50KGhhbmRsZSwgcmVnKSBcCisgICAgICAgIENhcmRTZXJ2aWNlcyhSZWdpc3RlckNsaWVudCwgaGFuZGxlLCByZWcpCisjZGVmaW5lIHBjbWNpYV9kZXJlZ2lzdGVyX2NsaWVudChoYW5kbGUpIFwKKyAgICAgICAgQ2FyZFNlcnZpY2VzKERlcmVnaXN0ZXJDbGllbnQsIGhhbmRsZSkKKyNkZWZpbmUgcGNtY2lhX2dldF9maXJzdF90dXBsZShoYW5kbGUsIHR1cGxlKSBcCisgICAgICAgIENhcmRTZXJ2aWNlcyhHZXRGaXJzdFR1cGxlLCBoYW5kbGUsIHR1cGxlKQorI2RlZmluZSBwY21jaWFfZ2V0X25leHRfdHVwbGUoaGFuZGxlLCB0dXBsZSkgXAorICAgICAgICBDYXJkU2VydmljZXMoR2V0TmV4dFR1cGxlLCBoYW5kbGUsIHR1cGxlKQorI2RlZmluZSBwY21jaWFfZ2V0X3R1cGxlX2RhdGEoaGFuZGxlLCB0dXBsZSkgXAorICAgICAgICBDYXJkU2VydmljZXMoR2V0VHVwbGVEYXRhLCBoYW5kbGUsIHR1cGxlKQorI2RlZmluZSBwY21jaWFfcGFyc2VfdHVwbGUoaGFuZGxlLCB0dXBsZSwgcGFyc2UpIFwKKyAgICAgICAgQ2FyZFNlcnZpY2VzKFBhcnNlVHVwbGUsIGhhbmRsZSwgdHVwbGUsIHBhcnNlKQorI2RlZmluZSBwY21jaWFfZ2V0X2NvbmZpZ3VyYXRpb25faW5mbyhoYW5kbGUsIGNvbmZpZykgXAorICAgICAgICBDYXJkU2VydmljZXMoR2V0Q29uZmlndXJhdGlvbkluZm8sIGhhbmRsZSwgY29uZmlnKQorI2RlZmluZSBwY21jaWFfcmVxdWVzdF9pbyhoYW5kbGUsIHJlcSkgXAorICAgICAgICBDYXJkU2VydmljZXMoUmVxdWVzdElPLCBoYW5kbGUsIHJlcSkKKyNkZWZpbmUgcGNtY2lhX3JlcXVlc3RfaXJxKGhhbmRsZSwgcmVxKSBcCisgICAgICAgIENhcmRTZXJ2aWNlcyhSZXF1ZXN0SVJRLCBoYW5kbGUsIHJlcSkKKyNkZWZpbmUgcGNtY2lhX3JlcXVlc3RfY29uZmlndXJhdGlvbihoYW5kbGUsIHJlcSkgXAorICAgICAgICBDYXJkU2VydmljZXMoUmVxdWVzdENvbmZpZ3VyYXRpb24sIGhhbmRsZSwgcmVxKQorI2RlZmluZSBwY21jaWFfcmVsZWFzZV9jb25maWd1cmF0aW9uKGhhbmRsZSkgXAorICAgICAgICBDYXJkU2VydmljZXMoUmVsZWFzZUNvbmZpZ3VyYXRpb24sIGhhbmRsZSkKKyNkZWZpbmUgcGNtY2lhX3JlbGVhc2VfaW8oaGFuZGxlLCByZXEpIFwKKyAgICAgICAgQ2FyZFNlcnZpY2VzKFJlbGVhc2VJTywgaGFuZGxlLCByZXEpCisjZGVmaW5lIHBjbWNpYV9yZWxlYXNlX2lycShoYW5kbGUsIHJlcSkgXAorICAgICAgICBDYXJkU2VydmljZXMoUmVsZWFzZUlSUSwgaGFuZGxlLCByZXEpCisjZGVmaW5lIHBjbWNpYV9yZWxlYXNlX3dpbmRvdyh3aW4pIFwKKyAgICAgICAgQ2FyZFNlcnZpY2VzKFJlbGVhc2VXaW5kb3csIHdpbikKKyNkZWZpbmUgcGNtY2lhX2dldF9jYXJkX3NlcnZpY2VzX2luZm8oaW5mbykgXAorICAgICAgICBDYXJkU2VydmljZXMoR2V0Q2FyZFNlcnZpY2VzSW5mbywgaW5mbykKKyNkZWZpbmUgcGNtY2lhX3JlcG9ydF9lcnJvcihoYW5kbGUsIGVycikgXAorICAgICAgICBDYXJkU2VydmljZXMoUmVwb3J0RXJyb3IsIGhhbmRsZSwgZXJyKQorI2VuZGlmCisKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKi0tLS0tLSBIYXJkd2FyZSBQb3J0YWJpbGl0eSBNYWNyb3MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKworI2RlZmluZSBpZWVlMmhvc3QxNihuKQlfX2xlMTZfdG9fY3B1KG4pCisjZGVmaW5lIGllZWUyaG9zdDMyKG4pCV9fbGUzMl90b19jcHUobikKKyNkZWZpbmUgaG9zdDJpZWVlMTYobikJX19jcHVfdG9fbGUxNihuKQorI2RlZmluZSBob3N0MmllZWUzMihuKQlfX2NwdV90b19sZTMyKG4pCisKKyNpZiAoV0xBTl9DUFVfRkFNSUxZICE9IFdMQU5fTUlQUykKK3R5cGVkZWYgVUlOVDMyIHBoeXNfdDsKKyNlbmRpZgorCisjaWYgKFdMQU5fQ1BVX0ZBTUlMWSA9PSBXTEFOX1BQQykKKyAgICAgICAjZGVmaW5lIHdsYW5faW53KGEpICAgICAgICAgICAgICAgICAgICAgaW5fYmUxNigodW5zaWduZWQgc2hvcnQgKikoKGEpK19JT19CQVNFKSkKKyAgICAgICAjZGVmaW5lIHdsYW5faW53X2xlMTZfdG9fY3B1KGEpICAgICAgICAgaW53KChhKSkKKyAgICAgICAjZGVmaW5lIHdsYW5fb3V0dyh2LGEpICAgICAgICAgICAgICAgICAgb3V0X2JlMTYoKHVuc2lnbmVkIHNob3J0ICopKChhKStfSU9fQkFTRSksICh2KSkKKyAgICAgICAjZGVmaW5lIHdsYW5fb3V0d19jcHVfdG9fbGUxNih2LGEpICAgICAgb3V0dygodiksKGEpKQorI2Vsc2UKKyAgICAgICAjZGVmaW5lIHdsYW5faW53KGEpICAgICAgICAgICAgICAgICAgICAgaW53KChhKSkKKyAgICAgICAjZGVmaW5lIHdsYW5faW53X2xlMTZfdG9fY3B1KGEpICAgICAgICAgX19jcHVfdG9fbGUxNihpbncoKGEpKSkKKyAgICAgICAjZGVmaW5lIHdsYW5fb3V0dyh2LGEpICAgICAgICAgICAgICAgICAgb3V0dygodiksKGEpKQorICAgICAgICNkZWZpbmUgd2xhbl9vdXR3X2NwdV90b19sZTE2KHYsYSkgICAgICBvdXR3KF9fY3B1X3RvX2xlMTYoKHYpKSwoYSkpCisjZW5kaWYKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKy8qLS0tIEdlbmVyYWwgTWFjcm9zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworCisjZGVmaW5lIHdsYW5fbWF4KGEsIGIpICgoKGEpID4gKGIpKSA/IChhKSA6IChiKSkKKyNkZWZpbmUgd2xhbl9taW4oYSwgYikgKCgoYSkgPCAoYikpID8gKGEpIDogKGIpKQorCisjZGVmaW5lIHdsYW5faXNwcmludChjKQkoKChjKSA+ICgweDE5KSkgJiYgKChjKSA8ICgweDdmKSkpCisKKyNkZWZpbmUgd2xhbl9oZXhjaGFyKHgpICgoKHgpIDwgMHgwYSkgPyAoJzAnICsgKHgpKSA6ICgnYScgKyAoKHgpIC0gMHgwYSkpKQorCisvKiBDcmVhdGUgYSBzdHJpbmcgb2YgcHJpbnRhYmxlIGNoYXJzIGZyb20gc29tZXRoaW5nIHRoYXQgbWlnaHQgbm90IGJlICovCisvKiBJdCdzIHJlY29tbWVuZGVkIHRoYXQgdGhlIHN0ciBiZSA0KmxlbiArIDEgYnl0ZXMgbG9uZyAqLworI2RlZmluZSB3bGFuX21rcHJpbnRzdHIoYnVmLCBidWZsZW4sIHN0ciwgc3RybGVuKSBcCit7IFwKKwlpbnQgaSA9IDA7IFwKKwlpbnQgaiA9IDA7IFwKKwltZW1zZXQoc3RyLCAwLCAoc3RybGVuKSk7IFwKKwlmb3IgKGkgPSAwOyBpIDwgKGJ1Zmxlbik7IGkrKykgeyBcCisJCWlmICggd2xhbl9pc3ByaW50KChidWYpW2ldKSApIHsgXAorCQkJKHN0cilbal0gPSAoYnVmKVtpXTsgXAorCQkJaisrOyBcCisJCX0gZWxzZSB7IFwKKwkJCShzdHIpW2pdID0gJ1xcJzsgXAorCQkJKHN0cilbaisxXSA9ICd4JzsgXAorCQkJKHN0cilbaisyXSA9IHdsYW5faGV4Y2hhcigoKGJ1ZilbaV0gJiAweGYwKSA+PiA0KTsgXAorCQkJKHN0cilbaiszXSA9IHdsYW5faGV4Y2hhcigoKGJ1ZilbaV0gJiAweDBmKSk7IFwKKwkJCWogKz0gNDsgXAorCQl9IFwKKwl9IFwKK30KKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKy8qLS0tIFZhcmlhYmxlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworCisjaWZkZWYgV0xBTl9JTkNMVURFX0RFQlVHCitleHRlcm4gaW50IHdsYW5fZGVidWc7CisjZW5kaWYKKworZXh0ZXJuIGludCB3bGFuX2V0aGNvbnY7CQkvKiBXaGF0J3MgdGhlIGRlZmF1bHQgZXRoY29udj8gKi8KKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKy8qLS0tIEZ1bmN0aW9ucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworI2VuZGlmIC8qIF9XTEFOX0NPTVBBVF9IICovCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdGVsZXBob255L2l4ai5jIGIvZHJpdmVycy90ZWxlcGhvbnkvaXhqLmMKaW5kZXggZWM3YWViNS4uNDFiNjUzMCAxMDA2NDQKLS0tIGEvZHJpdmVycy90ZWxlcGhvbnkvaXhqLmMKKysrIGIvZHJpdmVycy90ZWxlcGhvbnkvaXhqLmMKQEAgLTQyLDggKzQyLDYgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qCi0gKiAkTG9nOiBpeGouYyx2ICQKLSAqCiAgKiBSZXZpc2lvbiA0LjggIDIwMDMvMDcvMDkgMTk6Mzk6MDAgIERhbmllbGUgQmVsbHVjY2kKICAqIEF1ZGl0IHNvbWUgY29weV8qX3VzZXIgYW5kIG1pbm9yIGNsZWFudXAuCiAgKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy90ZWxlcGhvbnkvaXhqX3BjbWNpYS5jIGIvZHJpdmVycy90ZWxlcGhvbnkvaXhqX3BjbWNpYS5jCmluZGV4IGZmOWEyOWIuLjM0N2MzZWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdGVsZXBob255L2l4al9wY21jaWEuYworKysgYi9kcml2ZXJzL3RlbGVwaG9ueS9peGpfcGNtY2lhLmMKQEAgLTEyNCw2NSArMTI0LDUzIEBACiAJcmV0dXJuOwogfQogCitzdGF0aWMgaW50IGl4al9jb25maWdfY2hlY2soc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2LAorCQkJICAgIGNpc3RwbF9jZnRhYmxlX2VudHJ5X3QgKmNmZywKKwkJCSAgICBjaXN0cGxfY2Z0YWJsZV9lbnRyeV90ICpkZmx0LAorCQkJICAgIHVuc2lnbmVkIGludCB2Y2MsCisJCQkgICAgdm9pZCAqcHJpdl9kYXRhKQoreworCWlmICgoY2ZnLT5pby5ud2luID4gMCkgfHwgKGRmbHQtPmlvLm53aW4gPiAwKSkgeworCQljaXN0cGxfaW9fdCAqaW8gPSAoY2ZnLT5pby5ud2luKSA/ICZjZmctPmlvIDogJmRmbHQtPmlvOworCQlwX2Rldi0+aW8uQmFzZVBvcnQxID0gaW8tPndpblswXS5iYXNlOworCQlwX2Rldi0+aW8uTnVtUG9ydHMxID0gaW8tPndpblswXS5sZW47CisJCWlmIChpby0+bndpbiA9PSAyKSB7CisJCQlwX2Rldi0+aW8uQmFzZVBvcnQyID0gaW8tPndpblsxXS5iYXNlOworCQkJcF9kZXYtPmlvLk51bVBvcnRzMiA9IGlvLT53aW5bMV0ubGVuOworCQl9CisJCWlmICghcGNtY2lhX3JlcXVlc3RfaW8ocF9kZXYsICZwX2Rldi0+aW8pKQorCQkJcmV0dXJuIDA7CisJfQorCXJldHVybiAtRU5PREVWOworfQorCiBzdGF0aWMgaW50IGl4al9jb25maWcoc3RydWN0IHBjbWNpYV9kZXZpY2UgKiBsaW5rKQogewogCUlYSiAqajsKIAlpeGpfaW5mb190ICppbmZvOwotCXR1cGxlX3QgdHVwbGU7Ci0JdV9zaG9ydCBidWZbMTI4XTsKLQljaXNwYXJzZV90IHBhcnNlOwotCWNpc3RwbF9jZnRhYmxlX2VudHJ5X3QgKmNmZyA9ICZwYXJzZS5jZnRhYmxlX2VudHJ5OwotCWNpc3RwbF9jZnRhYmxlX2VudHJ5X3QgZGZsdCA9Ci0JewotCQkwCi0JfTsKLQlpbnQgbGFzdF9yZXQsIGxhc3RfZm47CisJY2lzdHBsX2NmdGFibGVfZW50cnlfdCBkZmx0ID0geyAwIH07CisKIAlpbmZvID0gbGluay0+cHJpdjsKIAlERUJVRygwLCAiaXhqX2NvbmZpZygweCVwKVxuIiwgbGluayk7Ci0JdHVwbGUuVHVwbGVEYXRhID0gKGNpc2RhdGFfdCAqKSBidWY7Ci0JdHVwbGUuVHVwbGVPZmZzZXQgPSAwOwotCXR1cGxlLlR1cGxlRGF0YU1heCA9IDI1NTsKLQl0dXBsZS5EZXNpcmVkVHVwbGUgPSBDSVNUUExfQ0ZUQUJMRV9FTlRSWTsKLQl0dXBsZS5BdHRyaWJ1dGVzID0gMDsKLQlDU19DSEVDSyhHZXRGaXJzdFR1cGxlLCBwY21jaWFfZ2V0X2ZpcnN0X3R1cGxlKGxpbmssICZ0dXBsZSkpOwotCXdoaWxlICgxKSB7Ci0JCWlmIChwY21jaWFfZ2V0X3R1cGxlX2RhdGEobGluaywgJnR1cGxlKSAhPSAwIHx8Ci0JCQkJcGNtY2lhX3BhcnNlX3R1cGxlKGxpbmssICZ0dXBsZSwgJnBhcnNlKSAhPSAwKQotCQkJZ290byBuZXh0X2VudHJ5OwotCQlpZiAoKGNmZy0+aW8ubndpbiA+IDApIHx8IChkZmx0LmlvLm53aW4gPiAwKSkgewotCQkJY2lzdHBsX2lvX3QgKmlvID0gKGNmZy0+aW8ubndpbikgPyAmY2ZnLT5pbyA6ICZkZmx0LmlvOwotCQkJbGluay0+Y29uZi5Db25maWdJbmRleCA9IGNmZy0+aW5kZXg7Ci0JCQlsaW5rLT5pby5CYXNlUG9ydDEgPSBpby0+d2luWzBdLmJhc2U7Ci0JCQlsaW5rLT5pby5OdW1Qb3J0czEgPSBpby0+d2luWzBdLmxlbjsKLQkJCWlmIChpby0+bndpbiA9PSAyKSB7Ci0JCQkJbGluay0+aW8uQmFzZVBvcnQyID0gaW8tPndpblsxXS5iYXNlOwotCQkJCWxpbmstPmlvLk51bVBvcnRzMiA9IGlvLT53aW5bMV0ubGVuOwotCQkJfQotCQkJaWYgKHBjbWNpYV9yZXF1ZXN0X2lvKGxpbmssICZsaW5rLT5pbykgIT0gMCkKLQkJCQlnb3RvIG5leHRfZW50cnk7Ci0JCQkvKiBJZiB3ZSd2ZSBnb3QgdGhpcyBmYXIsIHdlJ3JlIGRvbmUgKi8KLQkJCWJyZWFrOwotCQl9Ci0JICAgICAgbmV4dF9lbnRyeToKLQkJaWYgKGNmZy0+ZmxhZ3MgJiBDSVNUUExfQ0ZUQUJMRV9ERUZBVUxUKQotCQkJZGZsdCA9ICpjZmc7Ci0JCUNTX0NIRUNLKEdldE5leHRUdXBsZSwgcGNtY2lhX2dldF9uZXh0X3R1cGxlKGxpbmssICZ0dXBsZSkpOwotCX0KIAotCUNTX0NIRUNLKFJlcXVlc3RDb25maWd1cmF0aW9uLCBwY21jaWFfcmVxdWVzdF9jb25maWd1cmF0aW9uKGxpbmssICZsaW5rLT5jb25mKSk7CisJaWYgKHBjbWNpYV9sb29wX2NvbmZpZyhsaW5rLCBpeGpfY29uZmlnX2NoZWNrLCAmZGZsdCkpCisJCWdvdG8gY3NfZmFpbGVkOworCisJaWYgKHBjbWNpYV9yZXF1ZXN0X2NvbmZpZ3VyYXRpb24obGluaywgJmxpbmstPmNvbmYpKQorCQlnb3RvIGNzX2ZhaWxlZDsKIAogCS8qCiAgCSAqCVJlZ2lzdGVyIHRoZSBjYXJkIHdpdGggdGhlIGNvcmUuCi0gCSAqLwkKLQlqPWl4al9wY21jaWFfcHJvYmUobGluay0+aW8uQmFzZVBvcnQxLGxpbmstPmlvLkJhc2VQb3J0MSArIDB4MTApOworCSAqLworCWogPSBpeGpfcGNtY2lhX3Byb2JlKGxpbmstPmlvLkJhc2VQb3J0MSwgbGluay0+aW8uQmFzZVBvcnQxICsgMHgxMCk7CiAKIAlpbmZvLT5uZGV2ID0gMTsKIAlpbmZvLT5ub2RlLm1ham9yID0gUEhPTkVfTUFKT1I7CiAJbGluay0+ZGV2X25vZGUgPSAmaW5mby0+bm9kZTsKIAlpeGpfZ2V0X3NlcmlhbChsaW5rLCBqKTsKIAlyZXR1cm4gMDsKKwogICAgICAgY3NfZmFpbGVkOgotCWNzX2Vycm9yKGxpbmssIGxhc3RfZm4sIGxhc3RfcmV0KTsKIAlpeGpfY3NfcmVsZWFzZShsaW5rKTsKIAlyZXR1cm4gLUVOT0RFVjsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdGVsZXBob255L3Bob25lZGV2LmMgYi9kcml2ZXJzL3RlbGVwaG9ueS9waG9uZWRldi5jCmluZGV4IDRkNzRiYTMuLjM3Y2FmNGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdGVsZXBob255L3Bob25lZGV2LmMKKysrIGIvZHJpdmVycy90ZWxlcGhvbnkvcGhvbmVkZXYuYwpAQCAtNTQsNyArNTQsNiBAQAogCWlmIChtaW5vciA+PSBQSE9ORV9OVU1fREVWSUNFUykKIAkJcmV0dXJuIC1FTk9ERVY7CiAKLQlsb2NrX2tlcm5lbCgpOwogCW11dGV4X2xvY2soJnBob25lX2xvY2spOwogCXAgPSBwaG9uZV9kZXZpY2VbbWlub3JdOwogCWlmIChwKQpAQCAtODEsNyArODAsNiBAQAogCWZvcHNfcHV0KG9sZF9mb3BzKTsKIGVuZDoKIAltdXRleF91bmxvY2soJnBob25lX2xvY2spOwotCXVubG9ja19rZXJuZWwoKTsKIAlyZXR1cm4gZXJyOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Vpby9LY29uZmlnIGIvZHJpdmVycy91aW8vS2NvbmZpZwppbmRleCA0MTkwYmU2Li4wNGI5NTRjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Vpby9LY29uZmlnCisrKyBiL2RyaXZlcnMvdWlvL0tjb25maWcKQEAgLTU4LDQgKzU4LDE3IEBACiAKIAkgIElmIHlvdSBjb21waWxlIHRoaXMgYXMgYSBtb2R1bGUsIGl0IHdpbGwgYmUgY2FsbGVkIHVpb19zbXguCiAKK2NvbmZpZyBVSU9fU0VSQ09TMworCXRyaXN0YXRlICJBdXRvbWF0YSBTZXJjb3MgSUlJIFBDSSBjYXJkIGRyaXZlciIKKwlkZWZhdWx0IG4KKwloZWxwCisJICBVc2Vyc3BhY2UgSS9PIGludGVyZmFjZSBmb3IgdGhlIFNlcmNvcyBJSUkgUENJIGNhcmQgZnJvbQorCSAgQXV0b21hdGEgR21iSC4gVGhlIHVzZXJzcGFjZSBwYXJ0IG9mIHRoaXMgZHJpdmVyIHdpbGwgYmUKKwkgIGF2YWlsYWJsZSBmb3IgZG93bmxvYWQgZnJvbSB0aGUgQXV0b21hdGEgR21iSCB3ZWIgc2l0ZS4KKworCSAgQXV0b21hdGEgR21iSDogICAgICAgIGh0dHA6Ly93d3cuYXV0b21hdGF3ZWIuY29tCisJICBTZXJjb3MgSUlJIGludGVyZmFjZTogaHR0cDovL3d3dy5zZXJjb3MuY29tCisKKwkgIElmIHlvdSBjb21waWxlIHRoaXMgYXMgYSBtb2R1bGUsIGl0IHdpbGwgYmUgY2FsbGVkIHVpb19zZXJjb3MzLgorCiBlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91aW8vTWFrZWZpbGUgYi9kcml2ZXJzL3Vpby9NYWtlZmlsZQppbmRleCA4NjY3YmJkLi5lNjk1NTgxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Vpby9NYWtlZmlsZQorKysgYi9kcml2ZXJzL3Vpby9NYWtlZmlsZQpAQCAtMywzICszLDQgQEAKIG9iai0kKENPTkZJR19VSU9fUERSVikJKz0gdWlvX3BkcnYubwogb2JqLSQoQ09ORklHX1VJT19QRFJWX0dFTklSUSkJKz0gdWlvX3BkcnZfZ2VuaXJxLm8KIG9iai0kKENPTkZJR19VSU9fU01YKQkrPSB1aW9fc214Lm8KK29iai0kKENPTkZJR19VSU9fU0VSQ09TMykJKz0gdWlvX3NlcmNvczMubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91aW8vdWlvLmMgYi9kcml2ZXJzL3Vpby91aW8uYwppbmRleCAzYTY5MzRiLi41ZGNjZjA1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Vpby91aW8uYworKysgYi9kcml2ZXJzL3Vpby91aW8uYwpAQCAtNjcsNiArNjcsMTEgQEAKIAlyZXR1cm4gc3ByaW50ZihidWYsICIweCVseFxuIiwgbWVtLT5zaXplKTsKIH0KIAorc3RhdGljIHNzaXplX3QgbWFwX29mZnNldF9zaG93KHN0cnVjdCB1aW9fbWVtICptZW0sIGNoYXIgKmJ1ZikKK3sKKwlyZXR1cm4gc3ByaW50ZihidWYsICIweCVseFxuIiwgbWVtLT5hZGRyICYgflBBR0VfTUFTSyk7Cit9CisKIHN0cnVjdCB1aW9fc3lzZnNfZW50cnkgewogCXN0cnVjdCBhdHRyaWJ1dGUgYXR0cjsKIAlzc2l6ZV90ICgqc2hvdykoc3RydWN0IHVpb19tZW0gKiwgY2hhciAqKTsKQEAgLTc3LDEwICs4MiwxMyBAQAogCV9fQVRUUihhZGRyLCBTX0lSVUdPLCBtYXBfYWRkcl9zaG93LCBOVUxMKTsKIHN0YXRpYyBzdHJ1Y3QgdWlvX3N5c2ZzX2VudHJ5IHNpemVfYXR0cmlidXRlID0KIAlfX0FUVFIoc2l6ZSwgU19JUlVHTywgbWFwX3NpemVfc2hvdywgTlVMTCk7CitzdGF0aWMgc3RydWN0IHVpb19zeXNmc19lbnRyeSBvZmZzZXRfYXR0cmlidXRlID0KKwlfX0FUVFIob2Zmc2V0LCBTX0lSVUdPLCBtYXBfb2Zmc2V0X3Nob3csIE5VTEwpOwogCiBzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqYXR0cnNbXSA9IHsKIAkmYWRkcl9hdHRyaWJ1dGUuYXR0ciwKIAkmc2l6ZV9hdHRyaWJ1dGUuYXR0ciwKKwkmb2Zmc2V0X2F0dHJpYnV0ZS5hdHRyLAogCU5VTEwsCS8qIG5lZWQgdG8gTlVMTCB0ZXJtaW5hdGUgdGhlIGxpc3Qgb2YgYXR0cmlidXRlcyAqLwogfTsKIApAQCAtNDgyLDE1ICs0OTAsMjMgQEAKIHsKIAlzdHJ1Y3QgdWlvX2RldmljZSAqaWRldiA9IHZtYS0+dm1fcHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBwYWdlICpwYWdlOworCXVuc2lnbmVkIGxvbmcgb2Zmc2V0OwogCiAJaW50IG1pID0gdWlvX2ZpbmRfbWVtX2luZGV4KHZtYSk7CiAJaWYgKG1pIDwgMCkKIAkJcmV0dXJuIFZNX0ZBVUxUX1NJR0JVUzsKIAorCS8qCisJICogV2UgbmVlZCB0byBzdWJ0cmFjdCBtaSBiZWNhdXNlIHVzZXJzcGFjZSB1c2VzIG9mZnNldCA9IE4qUEFHRV9TSVpFCisJICogdG8gdXNlIG1lbVtOXS4KKwkgKi8KKwlvZmZzZXQgPSAodm1mLT5wZ29mZiAtIG1pKSA8PCBQQUdFX1NISUZUOworCiAJaWYgKGlkZXYtPmluZm8tPm1lbVttaV0ubWVtdHlwZSA9PSBVSU9fTUVNX0xPR0lDQUwpCi0JCXBhZ2UgPSB2aXJ0X3RvX3BhZ2UoaWRldi0+aW5mby0+bWVtW21pXS5hZGRyKTsKKwkJcGFnZSA9IHZpcnRfdG9fcGFnZShpZGV2LT5pbmZvLT5tZW1bbWldLmFkZHIgKyBvZmZzZXQpOwogCWVsc2UKLQkJcGFnZSA9IHZtYWxsb2NfdG9fcGFnZSgodm9pZCopaWRldi0+aW5mby0+bWVtW21pXS5hZGRyKTsKKwkJcGFnZSA9IHZtYWxsb2NfdG9fcGFnZSgodm9pZCAqKWlkZXYtPmluZm8tPm1lbVttaV0uYWRkcgorCQkJCQkJCSsgb2Zmc2V0KTsKIAlnZXRfcGFnZShwYWdlKTsKIAl2bWYtPnBhZ2UgPSBwYWdlOwogCXJldHVybiAwOwpAQCAtNjgyLDkgKzY5OCw5IEBACiAJaWYgKHJldCkKIAkJZ290byBlcnJfZ2V0X21pbm9yOwogCi0JaWRldi0+ZGV2ID0gZGV2aWNlX2NyZWF0ZV9kcnZkYXRhKHVpb19jbGFzcy0+Y2xhc3MsIHBhcmVudCwKLQkJCQkJICBNS0RFVih1aW9fbWFqb3IsIGlkZXYtPm1pbm9yKSwgaWRldiwKLQkJCQkJICAidWlvJWQiLCBpZGV2LT5taW5vcik7CisJaWRldi0+ZGV2ID0gZGV2aWNlX2NyZWF0ZSh1aW9fY2xhc3MtPmNsYXNzLCBwYXJlbnQsCisJCQkJICBNS0RFVih1aW9fbWFqb3IsIGlkZXYtPm1pbm9yKSwgaWRldiwKKwkJCQkgICJ1aW8lZCIsIGlkZXYtPm1pbm9yKTsKIAlpZiAoSVNfRVJSKGlkZXYtPmRldikpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJVSU86IGRldmljZSByZWdpc3RlciBmYWlsZWRcbiIpOwogCQlyZXQgPSBQVFJfRVJSKGlkZXYtPmRldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Vpby91aW9fcGRydi5jIGIvZHJpdmVycy91aW8vdWlvX3BkcnYuYwppbmRleCAwYjRlZjM5Li5kNDk0Y2U5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Vpby91aW9fcGRydi5jCisrKyBiL2RyaXZlcnMvdWlvL3Vpb19wZHJ2LmMKQEAgLTEyLDcgKzEyLDcgQEAKICNpbmNsdWRlIDxsaW51eC91aW9fZHJpdmVyLmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5naWZ5Lmg+CiAKLSNkZWZpbmUgRFJJVkVSX05BTUUgInVpbyIKKyNkZWZpbmUgRFJJVkVSX05BTUUgInVpb19wZHJ2IgogCiBzdHJ1Y3QgdWlvX3BsYXRkYXRhIHsKIAlzdHJ1Y3QgdWlvX2luZm8gKnVpb2luZm87CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Vpby91aW9fc2VyY29zMy5jIGIvZHJpdmVycy91aW8vdWlvX3NlcmNvczMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNmQxYjJiCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91aW8vdWlvX3NlcmNvczMuYwpAQCAtMCwwICsxLDI0MyBAQAorLyogc2VyY29zMzogVUlPIGRyaXZlciBmb3IgdGhlIEF1dG9tYXRhIFNlcmNvcyBJSUkgUENJIGNhcmQKKworICAgQ29weXJpZ2h0IChDKSAyMDA4IExpbnV0cm9uaXggR21iSAorICAgICBBdXRob3I6IEpvaG4gT2duZXNzIDxqb2huLm9nbmVzc0BsaW51dHJvbml4LmRlPgorCisgICBUaGlzIGlzIGEgc3RyYWlnaHQtZm9yd2FyZCBVSU8gZHJpdmVyLCB3aGVyZSBpbnRlcnJ1cHRzIGFyZSBkaXNhYmxlZAorICAgYnkgdGhlIGludGVycnVwdCBoYW5kbGVyIGFuZCByZS1lbmFibGVkIHZpYSBhIHdyaXRlIHRvIHRoZSBVSU8gZGV2aWNlCisgICBieSB0aGUgdXNlcnNwYWNlLXBhcnQuCisKKyAgIFRoZSBvbmx5IHBhcnQgdGhhdCBtYXkgc2VlbSBvZGQgaXMgdGhlIHVzZSBvZiBhIGxvZ2ljYWwgT1Igd2hlbgorICAgc3RvcmluZyBhbmQgcmVzdG9yaW5nIGVuYWJsZWQgaW50ZXJydXB0cy4gVGhpcyBpcyBkb25lIGJlY2F1c2UgdGhlCisgICB1c2Vyc3BhY2UtcGFydCBjb3VsZCBkaXJlY3RseSBtb2RpZnkgdGhlIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIKKyAgIGF0IGFueSB0aW1lLiBUbyByZWR1Y2UgcG9zc2libGUgY29uZmxpY3RzLCB0aGUga2VybmVsIGRyaXZlciB1c2VzCisgICBhIGxvZ2ljYWwgT1IgdG8gbWFrZSBtb3JlIGNvbnRyb2xsZWQgY2hhbmdlcyAocmF0aGVyIHRoYW4gYmxpbmRseQorICAgb3ZlcndyaXRpbmcgcHJldmlvdXMgdmFsdWVzKS4KKworICAgUmFjZSBjb25kaXRpb25zIGV4aXN0IGlmIHRoZSB1c2Vyc3BhY2UtcGFydCBkaXJlY3RseSBtb2RpZmllcyB0aGUKKyAgIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgd2hpbGUgaW4gb3BlcmF0aW9uLiBUaGUgY29uc2VxdWVuY2VzIGFyZQorICAgdGhhdCBjZXJ0YWluIGludGVycnVwdHMgd291bGQgZmFpbCB0byBiZSBlbmFibGVkIG9yIGRpc2FibGVkLiBGb3IKKyAgIHRoaXMgcmVhc29uLCB0aGUgdXNlcnNwYWNlLXBhcnQgc2hvdWxkIG9ubHkgZGlyZWN0bHkgbW9kaWZ5IHRoZQorICAgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciBhdCB0aGUgYmVnaW5uaW5nICh0byBnZXQgdGhpbmdzIGdvaW5nKS4KKyAgIFRoZSB1c2Vyc3BhY2UtcGFydCBjYW4gc2FmZWx5IGRpc2FibGUgaW50ZXJydXB0cyBhdCBhbnkgdGltZSB1c2luZworICAgYSB3cml0ZSB0byB0aGUgVUlPIGRldmljZS4KKyovCisKKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC91aW9fZHJpdmVyLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKworLyogSUQncyBmb3IgU0VSQ09TIElJSSBQQ0kgY2FyZCAoUExYIDkwMzApICovCisjZGVmaW5lIFNFUkNPU19TVUJfVkVORE9SX0lEICAweDE5NzEKKyNkZWZpbmUgU0VSQ09TX1NVQl9TWVNJRF8zNTMwIDB4MzUzMAorI2RlZmluZSBTRVJDT1NfU1VCX1NZU0lEXzM1MzUgMHgzNTM1CisjZGVmaW5lIFNFUkNPU19TVUJfU1lTSURfMzc4MCAweDM3ODAKKworLyogSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAqLworI2RlZmluZSBJRVIwX09GRlNFVCAweDA4CisKKy8qIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgSVNSMF9PRkZTRVQgMHgxOAorCitzdHJ1Y3Qgc2VyY29zM19wcml2IHsKKwl1MzIgaWVyMF9jYWNoZTsKKwlzcGlubG9ja190IGllcjBfY2FjaGVfbG9jazsKK307CisKKy8qIHRoaXMgZnVuY3Rpb24gYXNzdW1lcyBpZXIwX2NhY2hlX2xvY2sgaXMgbG9ja2VkISAqLworc3RhdGljIHZvaWQgc2VyY29zM19kaXNhYmxlX2ludGVycnVwdHMoc3RydWN0IHVpb19pbmZvICppbmZvLAorCQkJCSAgICAgICBzdHJ1Y3Qgc2VyY29zM19wcml2ICpwcml2KQoreworCXZvaWQgX19pb21lbSAqaWVyMCA9IGluZm8tPm1lbVszXS5pbnRlcm5hbF9hZGRyICsgSUVSMF9PRkZTRVQ7CisKKwkvKiBhZGQgZW5hYmxlZCBpbnRlcnJ1cHRzIHRvIGNhY2hlICovCisJcHJpdi0+aWVyMF9jYWNoZSB8PSBpb3JlYWQzMihpZXIwKTsKKworCS8qIGRpc2FibGUgaW50ZXJydXB0cyAqLworCWlvd3JpdGUzMigwLCBpZXIwKTsKK30KKworLyogdGhpcyBmdW5jdGlvbiBhc3N1bWVzIGllcjBfY2FjaGVfbG9jayBpcyBsb2NrZWQhICovCitzdGF0aWMgdm9pZCBzZXJjb3MzX2VuYWJsZV9pbnRlcnJ1cHRzKHN0cnVjdCB1aW9faW5mbyAqaW5mbywKKwkJCQkgICAgICBzdHJ1Y3Qgc2VyY29zM19wcml2ICpwcml2KQoreworCXZvaWQgX19pb21lbSAqaWVyMCA9IGluZm8tPm1lbVszXS5pbnRlcm5hbF9hZGRyICsgSUVSMF9PRkZTRVQ7CisKKwkvKiByZXN0b3JlIHByZXZpb3VzbHkgZW5hYmxlZCBpbnRlcnJ1cHRzICovCisJaW93cml0ZTMyKGlvcmVhZDMyKGllcjApIHwgcHJpdi0+aWVyMF9jYWNoZSwgaWVyMCk7CisJcHJpdi0+aWVyMF9jYWNoZSA9IDA7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBzZXJjb3MzX2hhbmRsZXIoaW50IGlycSwgc3RydWN0IHVpb19pbmZvICppbmZvKQoreworCXN0cnVjdCBzZXJjb3MzX3ByaXYgKnByaXYgPSBpbmZvLT5wcml2OworCXZvaWQgX19pb21lbSAqaXNyMCA9IGluZm8tPm1lbVszXS5pbnRlcm5hbF9hZGRyICsgSVNSMF9PRkZTRVQ7CisJdm9pZCBfX2lvbWVtICppZXIwID0gaW5mby0+bWVtWzNdLmludGVybmFsX2FkZHIgKyBJRVIwX09GRlNFVDsKKworCWlmICghKGlvcmVhZDMyKGlzcjApICYgaW9yZWFkMzIoaWVyMCkpKQorCQlyZXR1cm4gSVJRX05PTkU7CisKKwlzcGluX2xvY2soJnByaXYtPmllcjBfY2FjaGVfbG9jayk7CisJc2VyY29zM19kaXNhYmxlX2ludGVycnVwdHMoaW5mbywgcHJpdik7CisJc3Bpbl91bmxvY2soJnByaXYtPmllcjBfY2FjaGVfbG9jayk7CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyBpbnQgc2VyY29zM19pcnFjb250cm9sKHN0cnVjdCB1aW9faW5mbyAqaW5mbywgczMyIGlycV9vbikKK3sKKwlzdHJ1Y3Qgc2VyY29zM19wcml2ICpwcml2ID0gaW5mby0+cHJpdjsKKworCXNwaW5fbG9ja19pcnEoJnByaXYtPmllcjBfY2FjaGVfbG9jayk7CisJaWYgKGlycV9vbikKKwkJc2VyY29zM19lbmFibGVfaW50ZXJydXB0cyhpbmZvLCBwcml2KTsKKwllbHNlCisJCXNlcmNvczNfZGlzYWJsZV9pbnRlcnJ1cHRzKGluZm8sIHByaXYpOworCXNwaW5fdW5sb2NrX2lycSgmcHJpdi0+aWVyMF9jYWNoZV9sb2NrKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNlcmNvczNfc2V0dXBfaW9tZW0oc3RydWN0IHBjaV9kZXYgKmRldiwgc3RydWN0IHVpb19pbmZvICppbmZvLAorCQkJICAgICAgIGludCBuLCBpbnQgcGNpX2JhcikKK3sKKwlpbmZvLT5tZW1bbl0uYWRkciA9IHBjaV9yZXNvdXJjZV9zdGFydChkZXYsIHBjaV9iYXIpOworCWlmICghaW5mby0+bWVtW25dLmFkZHIpCisJCXJldHVybiAtMTsKKwlpbmZvLT5tZW1bbl0uaW50ZXJuYWxfYWRkciA9IGlvcmVtYXAocGNpX3Jlc291cmNlX3N0YXJ0KGRldiwgcGNpX2JhciksCisJCQkJCSAgICAgcGNpX3Jlc291cmNlX2xlbihkZXYsIHBjaV9iYXIpKTsKKwlpZiAoIWluZm8tPm1lbVtuXS5pbnRlcm5hbF9hZGRyKQorCQlyZXR1cm4gLTE7CisJaW5mby0+bWVtW25dLnNpemUgPSBwY2lfcmVzb3VyY2VfbGVuKGRldiwgcGNpX2Jhcik7CisJaW5mby0+bWVtW25dLm1lbXR5cGUgPSBVSU9fTUVNX1BIWVM7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IHNlcmNvczNfcGNpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpkZXYsCisJCQkJICAgICAgIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZCkKK3sKKwlzdHJ1Y3QgdWlvX2luZm8gKmluZm87CisJc3RydWN0IHNlcmNvczNfcHJpdiAqcHJpdjsKKwlpbnQgaTsKKworCWluZm8gPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgdWlvX2luZm8pLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWluZm8pCisJCXJldHVybiAtRU5PTUVNOworCisJcHJpdiA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBzZXJjb3MzX3ByaXYpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXByaXYpCisJCWdvdG8gb3V0X2ZyZWU7CisKKwlpZiAocGNpX2VuYWJsZV9kZXZpY2UoZGV2KSkKKwkJZ290byBvdXRfZnJlZV9wcml2OworCisJaWYgKHBjaV9yZXF1ZXN0X3JlZ2lvbnMoZGV2LCAic2VyY29zMyIpKQorCQlnb3RvIG91dF9kaXNhYmxlOworCisJLyogd2Ugb25seSBuZWVkIFBDSSBCQVIncyAwLCAyLCAzLCA0LCA1ICovCisJaWYgKHNlcmNvczNfc2V0dXBfaW9tZW0oZGV2LCBpbmZvLCAwLCAwKSkKKwkJZ290byBvdXRfdW5tYXA7CisJaWYgKHNlcmNvczNfc2V0dXBfaW9tZW0oZGV2LCBpbmZvLCAxLCAyKSkKKwkJZ290byBvdXRfdW5tYXA7CisJaWYgKHNlcmNvczNfc2V0dXBfaW9tZW0oZGV2LCBpbmZvLCAyLCAzKSkKKwkJZ290byBvdXRfdW5tYXA7CisJaWYgKHNlcmNvczNfc2V0dXBfaW9tZW0oZGV2LCBpbmZvLCAzLCA0KSkKKwkJZ290byBvdXRfdW5tYXA7CisJaWYgKHNlcmNvczNfc2V0dXBfaW9tZW0oZGV2LCBpbmZvLCA0LCA1KSkKKwkJZ290byBvdXRfdW5tYXA7CisKKwlzcGluX2xvY2tfaW5pdCgmcHJpdi0+aWVyMF9jYWNoZV9sb2NrKTsKKwlpbmZvLT5wcml2ID0gcHJpdjsKKwlpbmZvLT5uYW1lID0gIlNlcmNvc19JSUlfUENJIjsKKwlpbmZvLT52ZXJzaW9uID0gIjAuMC4xIjsKKwlpbmZvLT5pcnEgPSBkZXYtPmlycTsKKwlpbmZvLT5pcnFfZmxhZ3MgPSBJUlFGX0RJU0FCTEVEIHwgSVJRRl9TSEFSRUQ7CisJaW5mby0+aGFuZGxlciA9IHNlcmNvczNfaGFuZGxlcjsKKwlpbmZvLT5pcnFjb250cm9sID0gc2VyY29zM19pcnFjb250cm9sOworCisJcGNpX3NldF9kcnZkYXRhKGRldiwgaW5mbyk7CisKKwlpZiAodWlvX3JlZ2lzdGVyX2RldmljZSgmZGV2LT5kZXYsIGluZm8pKQorCQlnb3RvIG91dF91bm1hcDsKKworCXJldHVybiAwOworCitvdXRfdW5tYXA6CisJZm9yIChpID0gMDsgaSA8IDU7IGkrKykgeworCQlpZiAoaW5mby0+bWVtW2ldLmludGVybmFsX2FkZHIpCisJCQlpb3VubWFwKGluZm8tPm1lbVtpXS5pbnRlcm5hbF9hZGRyKTsKKwl9CisJcGNpX3JlbGVhc2VfcmVnaW9ucyhkZXYpOworb3V0X2Rpc2FibGU6CisJcGNpX2Rpc2FibGVfZGV2aWNlKGRldik7CitvdXRfZnJlZV9wcml2OgorCWtmcmVlKHByaXYpOworb3V0X2ZyZWU6CisJa2ZyZWUoaW5mbyk7CisJcmV0dXJuIC1FTk9ERVY7Cit9CisKK3N0YXRpYyB2b2lkIHNlcmNvczNfcGNpX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqZGV2KQoreworCXN0cnVjdCB1aW9faW5mbyAqaW5mbyA9IHBjaV9nZXRfZHJ2ZGF0YShkZXYpOworCWludCBpOworCisJdWlvX3VucmVnaXN0ZXJfZGV2aWNlKGluZm8pOworCXBjaV9yZWxlYXNlX3JlZ2lvbnMoZGV2KTsKKwlwY2lfZGlzYWJsZV9kZXZpY2UoZGV2KTsKKwlwY2lfc2V0X2RydmRhdGEoZGV2LCBOVUxMKTsKKwlmb3IgKGkgPSAwOyBpIDwgNTsgaSsrKSB7CisJCWlmIChpbmZvLT5tZW1baV0uaW50ZXJuYWxfYWRkcikKKwkJCWlvdW5tYXAoaW5mby0+bWVtW2ldLmludGVybmFsX2FkZHIpOworCX0KKwlrZnJlZShpbmZvLT5wcml2KTsKKwlrZnJlZShpbmZvKTsKK30KKworc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHNlcmNvczNfcGNpX2lkc1tdIF9fZGV2aW5pdGRhdGEgPSB7CisJeworCQkudmVuZG9yID0gICAgICAgUENJX1ZFTkRPUl9JRF9QTFgsCisJCS5kZXZpY2UgPSAgICAgICBQQ0lfREVWSUNFX0lEX1BMWF85MDMwLAorCQkuc3VidmVuZG9yID0gICAgU0VSQ09TX1NVQl9WRU5ET1JfSUQsCisJCS5zdWJkZXZpY2UgPSAgICBTRVJDT1NfU1VCX1NZU0lEXzM1MzAsCisJfSwKKwl7CisJCS52ZW5kb3IgPSAgICAgICBQQ0lfVkVORE9SX0lEX1BMWCwKKwkJLmRldmljZSA9ICAgICAgIFBDSV9ERVZJQ0VfSURfUExYXzkwMzAsCisJCS5zdWJ2ZW5kb3IgPSAgICBTRVJDT1NfU1VCX1ZFTkRPUl9JRCwKKwkJLnN1YmRldmljZSA9ICAgIFNFUkNPU19TVUJfU1lTSURfMzUzNSwKKwl9LAorCXsKKwkJLnZlbmRvciA9ICAgICAgIFBDSV9WRU5ET1JfSURfUExYLAorCQkuZGV2aWNlID0gICAgICAgUENJX0RFVklDRV9JRF9QTFhfOTAzMCwKKwkJLnN1YnZlbmRvciA9ICAgIFNFUkNPU19TVUJfVkVORE9SX0lELAorCQkuc3ViZGV2aWNlID0gICAgU0VSQ09TX1NVQl9TWVNJRF8zNzgwLAorCX0sCisJeyAwLCB9Cit9OworCitzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgc2VyY29zM19wY2lfZHJpdmVyID0geworCS5uYW1lID0gInNlcmNvczMiLAorCS5pZF90YWJsZSA9IHNlcmNvczNfcGNpX2lkcywKKwkucHJvYmUgPSBzZXJjb3MzX3BjaV9wcm9iZSwKKwkucmVtb3ZlID0gc2VyY29zM19wY2lfcmVtb3ZlLAorfTsKKworc3RhdGljIGludCBfX2luaXQgc2VyY29zM19pbml0X21vZHVsZSh2b2lkKQoreworCXJldHVybiBwY2lfcmVnaXN0ZXJfZHJpdmVyKCZzZXJjb3MzX3BjaV9kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgc2VyY29zM19leGl0X21vZHVsZSh2b2lkKQoreworCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmc2VyY29zM19wY2lfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQoc2VyY29zM19pbml0X21vZHVsZSk7Cittb2R1bGVfZXhpdChzZXJjb3MzX2V4aXRfbW9kdWxlKTsKKworTU9EVUxFX0RFU0NSSVBUSU9OKCJVSU8gZHJpdmVyIGZvciB0aGUgQXV0b21hdGEgU2VyY29zIElJSSBQQ0kgY2FyZCIpOworTU9EVUxFX0FVVEhPUigiSm9obiBPZ25lc3MgPGpvaG4ub2duZXNzQGxpbnV0cm9uaXguZGU+Iik7CitNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9hdG0vdXNiYXRtLmMgYi9kcml2ZXJzL3VzYi9hdG0vdXNiYXRtLmMKaW5kZXggMGRhMmMyNS4uMDZkZDExNCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvYXRtL3VzYmF0bS5jCisrKyBiL2RyaXZlcnMvdXNiL2F0bS91c2JhdG0uYwpAQCAtMzQ0LDcgKzM0NCw3IEBACiAJCQkJX19mdW5jX18sIHNhcmItPmxlbiwgdmNjKTsKIAkJLyogZGlzY2FyZCBjZWxscyBhbHJlYWR5IHJlY2VpdmVkICovCiAJCXNrYl90cmltKHNhcmIsIDApOwotCQlVRFNMX0FTU0VSVChzYXJiLT50YWlsICsgQVRNX0NFTExfUEFZTE9BRCA8PSBzYXJiLT5lbmQpOworCQlVRFNMX0FTU0VSVChpbnN0YW5jZSwgc2FyYi0+dGFpbCArIEFUTV9DRUxMX1BBWUxPQUQgPD0gc2FyYi0+ZW5kKTsKIAl9CiAKIAltZW1jcHkoc2tiX3RhaWxfcG9pbnRlcihzYXJiKSwgc291cmNlICsgQVRNX0NFTExfSEVBREVSLCBBVE1fQ0VMTF9QQVlMT0FEKTsKQEAgLTQzMiw3ICs0MzIsNyBAQAogCQl1bnNpZ25lZCBjaGFyICpjZWxsX2J1ZiA9IGluc3RhbmNlLT5jZWxsX2J1ZjsKIAkJdW5zaWduZWQgaW50IHNwYWNlX2xlZnQgPSBzdHJpZGUgLSBidWZfdXNhZ2U7CiAKLQkJVURTTF9BU1NFUlQoYnVmX3VzYWdlIDw9IHN0cmlkZSk7CisJCVVEU0xfQVNTRVJUKGluc3RhbmNlLCBidWZfdXNhZ2UgPD0gc3RyaWRlKTsKIAogCQlpZiAoYXZhaWxfZGF0YSA+PSBzcGFjZV9sZWZ0KSB7CiAJCQkvKiBhZGQgbmV3IGRhdGEgYW5kIHByb2Nlc3MgY2VsbCAqLwpAQCAtNDc1LDcgKzQ3NSw3IEBACiAJdW5zaWduZWQgaW50IHN0cmlkZSA9IGluc3RhbmNlLT50eF9jaGFubmVsLnN0cmlkZTsKIAogCXZkYmcoIiVzOiBza2ItPmxlbj0lZCwgYXZhaWxfc3BhY2U9JXUiLCBfX2Z1bmNfXywgc2tiLT5sZW4sIGF2YWlsX3NwYWNlKTsKLQlVRFNMX0FTU0VSVCghKGF2YWlsX3NwYWNlICUgc3RyaWRlKSk7CisJVURTTF9BU1NFUlQoaW5zdGFuY2UsICEoYXZhaWxfc3BhY2UgJSBzdHJpZGUpKTsKIAogCWZvciAoYnl0ZXNfd3JpdHRlbiA9IDA7IGJ5dGVzX3dyaXR0ZW4gPCBhdmFpbF9zcGFjZSAmJiBjdHJsLT5sZW47CiAJICAgICBieXRlc193cml0dGVuICs9IHN0cmlkZSwgdGFyZ2V0ICs9IHN0cmlkZSkgewpAQCAtNTQ3LDcgKzU0Nyw3IEBACiAJCQkJaWYgKCF1cmItPmlzb19mcmFtZV9kZXNjW2ldLnN0YXR1cykgewogCQkJCQl1bnNpZ25lZCBpbnQgYWN0dWFsX2xlbmd0aCA9IHVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0uYWN0dWFsX2xlbmd0aDsKIAotCQkJCQlVRFNMX0FTU0VSVChhY3R1YWxfbGVuZ3RoIDw9IHBhY2tldF9zaXplKTsKKwkJCQkJVURTTF9BU1NFUlQoaW5zdGFuY2UsIGFjdHVhbF9sZW5ndGggPD0gcGFja2V0X3NpemUpOwogCiAJCQkJCWlmICghbWVyZ2VfbGVuZ3RoKQogCQkJCQkJbWVyZ2Vfc3RhcnQgPSAodW5zaWduZWQgY2hhciAqKXVyYi0+dHJhbnNmZXJfYnVmZmVyICsgdXJiLT5pc29fZnJhbWVfZGVzY1tpXS5vZmZzZXQ7CkBAIC0xMTg4LDcgKzExODgsNyBAQAogCQlzdHJ1Y3QgdXJiICp1cmI7CiAJCXVuc2lnbmVkIGludCBpc29fcGFja2V0cyA9IHVzYl9waXBlaXNvYyhjaGFubmVsLT5lbmRwb2ludCkgPyBjaGFubmVsLT5idWZfc2l6ZSAvIGNoYW5uZWwtPnBhY2tldF9zaXplIDogMDsKIAotCQlVRFNMX0FTU0VSVCghdXNiX3BpcGVpc29jKGNoYW5uZWwtPmVuZHBvaW50KSB8fCB1c2JfcGlwZWluKGNoYW5uZWwtPmVuZHBvaW50KSk7CisJCVVEU0xfQVNTRVJUKGluc3RhbmNlLCAhdXNiX3BpcGVpc29jKGNoYW5uZWwtPmVuZHBvaW50KSB8fCB1c2JfcGlwZWluKGNoYW5uZWwtPmVuZHBvaW50KSk7CiAKIAkJdXJiID0gdXNiX2FsbG9jX3VyYihpc29fcGFja2V0cywgR0ZQX0tFUk5FTCk7CiAJCWlmICghdXJiKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9hdG0vdXNiYXRtLmggYi9kcml2ZXJzL3VzYi9hdG0vdXNiYXRtLmgKaW5kZXggZTY4ODdjNi4uZjZmNDUwOCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvYXRtL3VzYmF0bS5oCisrKyBiL2RyaXZlcnMvdXNiL2F0bS91c2JhdG0uaApAQCAtNDAsOSArNDAsMTUgQEAKICovCiAKICNpZmRlZiBERUJVRwotI2RlZmluZSBVRFNMX0FTU0VSVCh4KQlCVUdfT04oISh4KSkKKyNkZWZpbmUgVURTTF9BU1NFUlQoaW5zdGFuY2UsIHgpCUJVR19PTighKHgpKQogI2Vsc2UKLSNkZWZpbmUgVURTTF9BU1NFUlQoeCkJZG8geyBpZiAoISh4KSkgd2FybigiZmFpbGVkIGFzc2VydGlvbiAnJXMnIGF0IGxpbmUgJWQiLCBfX3N0cmluZ2lmeSh4KSwgX19MSU5FX18pOyB9IHdoaWxlKDApCisjZGVmaW5lIFVEU0xfQVNTRVJUKGluc3RhbmNlLCB4KQkJCQkJXAorCWRvIHsJXAorCQlpZiAoISh4KSkJCQkJCQlcCisJCQlkZXZfd2FybigmKGluc3RhbmNlKS0+dXNiX2ludGYtPmRldiwJCVwKKwkJCQkgImZhaWxlZCBhc3NlcnRpb24gJyVzJyBhdCBsaW5lICVkIiwJXAorCQkJCSBfX3N0cmluZ2lmeSh4KSwgX19MSU5FX18pOwkJXAorCX0gd2hpbGUoMCkKICNlbmRpZgogCiAjZGVmaW5lIHVzYl9lcnIoaW5zdGFuY2UsIGZvcm1hdCwgYXJnLi4uKQlcCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9hdG0veHVzYmF0bS5jIGIvZHJpdmVycy91c2IvYXRtL3h1c2JhdG0uYwppbmRleCA4NDcyNTQzLi4xN2QxNjdiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9hdG0veHVzYmF0bS5jCisrKyBiL2RyaXZlcnMvdXNiL2F0bS94dXNiYXRtLmMKQEAgLTE5Myw3ICsxOTMsNyBAQAogCSAgICBudW1fdmVuZG9yICE9IG51bV9wcm9kdWN0IHx8CiAJICAgIG51bV92ZW5kb3IgIT0gbnVtX3J4X2VuZHBvaW50IHx8CiAJICAgIG51bV92ZW5kb3IgIT0gbnVtX3R4X2VuZHBvaW50KSB7Ci0JCXdhcm4oIm1hbGZvcm1lZCBtb2R1bGUgcGFyYW1ldGVycyIpOworCQlwcmludGsoS0VSTl9XQVJOSU5HICJ4dXNiYXRtOiBtYWxmb3JtZWQgbW9kdWxlIHBhcmFtZXRlcnNcbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NsYXNzL0tjb25maWcgYi9kcml2ZXJzL3VzYi9jbGFzcy9LY29uZmlnCmluZGV4IDY2ZjE3ZWQuLjI1MTllMzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2NsYXNzL0tjb25maWcKKysrIGIvZHJpdmVycy91c2IvY2xhc3MvS2NvbmZpZwpAQCAtNDAsMyArNDAsMTMgQEAKIAkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQogCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGNkYy13ZG0uCiAKK2NvbmZpZyBVU0JfVE1DCisJdHJpc3RhdGUgIlVTQiBUZXN0IGFuZCBNZWFzdXJlbWVudCBDbGFzcyBzdXBwb3J0IgorCWRlcGVuZHMgb24gVVNCCisJaGVscAorCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byBjb25uZWN0IGEgVVNCIGRldmljZSB0aGF0IGZvbGxvd3MKKwkgIHRoZSBVU0Iub3JnIHNwZWNpZmljYXRpb24gZm9yIFVTQiBUZXN0IGFuZCBNZWFzdXJlbWVudCBkZXZpY2VzCisJICB0byB5b3VyIGNvbXB1dGVyJ3MgVVNCIHBvcnQuCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQorCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHVzYnRtYy4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NsYXNzL01ha2VmaWxlIGIvZHJpdmVycy91c2IvY2xhc3MvTWFrZWZpbGUKaW5kZXggNTM1ZDU5YS4uMzJlODUyNyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvY2xhc3MvTWFrZWZpbGUKKysrIGIvZHJpdmVycy91c2IvY2xhc3MvTWFrZWZpbGUKQEAgLTYsMyArNiw0IEBACiBvYmotJChDT05GSUdfVVNCX0FDTSkJCSs9IGNkYy1hY20ubwogb2JqLSQoQ09ORklHX1VTQl9QUklOVEVSKQkrPSB1c2JscC5vCiBvYmotJChDT05GSUdfVVNCX1dETSkJCSs9IGNkYy13ZG0ubworb2JqLSQoQ09ORklHX1VTQl9UTUMpCQkrPSB1c2J0bWMubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY2xhc3MvY2RjLWFjbS5jIGIvZHJpdmVycy91c2IvY2xhc3MvY2RjLWFjbS5jCmluZGV4IGMyNTc0NTMuLmZhYjIzZWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2NsYXNzL2NkYy1hY20uYworKysgYi9kcml2ZXJzL3VzYi9jbGFzcy9jZGMtYWNtLmMKQEAgLTMyNiw4ICszMjYsOCBAQAogCXVzYl9tYXJrX2xhc3RfYnVzeShhY20tPmRldik7CiAJcmV0dmFsID0gdXNiX3N1Ym1pdF91cmIgKHVyYiwgR0ZQX0FUT01JQyk7CiAJaWYgKHJldHZhbCkKLQkJZXJyICgiJXMgLSB1c2Jfc3VibWl0X3VyYiBmYWlsZWQgd2l0aCByZXN1bHQgJWQiLAotCQkgICAgIF9fZnVuY19fLCByZXR2YWwpOworCQlkZXZfZXJyKCZ1cmItPmRldi0+ZGV2LCAiJXMgLSB1c2Jfc3VibWl0X3VyYiBmYWlsZWQgd2l0aCAiCisJCQkicmVzdWx0ICVkIiwgX19mdW5jX18sIHJldHZhbCk7CiB9CiAKIC8qIGRhdGEgaW50ZXJmYWNlIHJldHVybnMgaW5jb21pbmcgYnl0ZXMsIG9yIHdlIGdvdCB1bnRocm90dGxlZCAqLwpAQCAtNTE0LDcgKzUxNCw3IEBACiAKIAlydiA9IHVzYl9hdXRvcG1fZ2V0X2ludGVyZmFjZShhY20tPmNvbnRyb2wpOwogCWlmIChydiA8IDApIHsKLQkJZXJyKCJBdXRvcG0gZmFpbHVyZSBpbiAlcyIsIF9fZnVuY19fKTsKKwkJZGV2X2VycigmYWNtLT5kZXYtPmRldiwgIkF1dG9wbSBmYWlsdXJlIGluICVzXG4iLCBfX2Z1bmNfXyk7CiAJCXJldHVybjsKIAl9CiAJaWYgKGFjbS0+ZGVsYXllZF93YikgewpAQCAtOTI0LDcgKzkyNCw3IEBACiAJCiAJLyogbm9ybWFsIHByb2JpbmcqLwogCWlmICghYnVmZmVyKSB7Ci0JCWVycigiV2VpcmQgZGVzY3JpcHRvciByZWZlcmVuY2VzXG4iKTsKKwkJZGV2X2VycigmaW50Zi0+ZGV2LCAiV2VpcmQgZGVzY3JpcHRvciByZWZlcmVuY2VzXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCkBAIC05MzQsMjEgKzkzNCwyNCBAQAogCQkJYnVmbGVuID0gaW50Zi0+Y3VyX2FsdHNldHRpbmctPmVuZHBvaW50LT5leHRyYWxlbjsKIAkJCWJ1ZmZlciA9IGludGYtPmN1cl9hbHRzZXR0aW5nLT5lbmRwb2ludC0+ZXh0cmE7CiAJCX0gZWxzZSB7Ci0JCQllcnIoIlplcm8gbGVuZ3RoIGRlc2NyaXB0b3IgcmVmZXJlbmNlc1xuIik7CisJCQlkZXZfZXJyKCZpbnRmLT5kZXYsCisJCQkJIlplcm8gbGVuZ3RoIGRlc2NyaXB0b3IgcmVmZXJlbmNlc1xuIik7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCX0KIAogCXdoaWxlIChidWZsZW4gPiAwKSB7CiAJCWlmIChidWZmZXIgWzFdICE9IFVTQl9EVF9DU19JTlRFUkZBQ0UpIHsKLQkJCWVycigic2tpcHBpbmcgZ2FyYmFnZVxuIik7CisJCQlkZXZfZXJyKCZpbnRmLT5kZXYsICJza2lwcGluZyBnYXJiYWdlXG4iKTsKIAkJCWdvdG8gbmV4dF9kZXNjOwogCQl9CiAKIAkJc3dpdGNoIChidWZmZXIgWzJdKSB7CiAJCQljYXNlIFVTQl9DRENfVU5JT05fVFlQRTogLyogd2UndmUgZm91bmQgaXQgKi8KIAkJCQlpZiAodW5pb25faGVhZGVyKSB7Ci0JCQkJCWVycigiTW9yZSB0aGFuIG9uZSB1bmlvbiBkZXNjcmlwdG9yLCBza2lwcGluZyAuLi4iKTsKKwkJCQkJZGV2X2VycigmaW50Zi0+ZGV2LCAiTW9yZSB0aGFuIG9uZSAiCisJCQkJCQkidW5pb24gZGVzY3JpcHRvciwgIgorCQkJCQkJInNraXBwaW5nIC4uLlxuIik7CiAJCQkJCWdvdG8gbmV4dF9kZXNjOwogCQkJCX0KIAkJCQl1bmlvbl9oZWFkZXIgPSAoc3RydWN0IHVzYl9jZGNfdW5pb25fZGVzYyAqKQpAQCAtOTY2LDcgKzk2OSw5IEBACiAJCQkJY2FsbF9tYW5hZ2VtZW50X2Z1bmN0aW9uID0gYnVmZmVyWzNdOwogCQkJCWNhbGxfaW50ZXJmYWNlX251bSA9IGJ1ZmZlcls0XTsKIAkJCQlpZiAoKGNhbGxfbWFuYWdlbWVudF9mdW5jdGlvbiAmIDMpICE9IDMpCi0JCQkJCWVycigiVGhpcyBkZXZpY2UgY2Fubm90IGRvIGNhbGxzIG9uIGl0cyBvd24uIEl0IGlzIG5vIG1vZGVtLiIpOworCQkJCQlkZXZfZXJyKCZpbnRmLT5kZXYsICJUaGlzIGRldmljZSAiCisJCQkJCQkiY2Fubm90IGRvIGNhbGxzIG9uIGl0cyBvd24uICIKKwkJCQkJCSJJdCBpcyBubyBtb2RlbS5cbiIpOwogCQkJCWJyZWFrOwogCQkJZGVmYXVsdDoKIAkJCQkvKiB0aGVyZSBhcmUgTE9UUyBtb3JlIENEQyBkZXNjcmlwdG9ycyB0aGF0CkBAIC0xMDUxLDcgKzEwNTYsNyBAQAogCWZvciAobWlub3IgPSAwOyBtaW5vciA8IEFDTV9UVFlfTUlOT1JTICYmIGFjbV90YWJsZVttaW5vcl07IG1pbm9yKyspOwogCiAJaWYgKG1pbm9yID09IEFDTV9UVFlfTUlOT1JTKSB7Ci0JCWVycigibm8gbW9yZSBmcmVlIGFjbSBkZXZpY2VzIik7CisJCWRldl9lcnIoJmludGYtPmRldiwgIm5vIG1vcmUgZnJlZSBhY20gZGV2aWNlc1xuIik7CiAJCXJldHVybiAtRU5PREVWOwogCX0KIApAQCAtMTQ1NCw3ICsxNDU5LDggQEAKIAkJcmV0dXJuIHJldHZhbDsKIAl9CiAKLQlpbmZvKERSSVZFUl9WRVJTSU9OICI6IiBEUklWRVJfREVTQyk7CisJcHJpbnRrKEtFUk5fSU5GTyBLQlVJTERfTU9ETkFNRSAiOiAiIERSSVZFUl9WRVJTSU9OICI6IgorCSAgICAgICBEUklWRVJfREVTQyAiXG4iKTsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY2xhc3MvY2RjLXdkbS5jIGIvZHJpdmVycy91c2IvY2xhc3MvY2RjLXdkbS5jCmluZGV4IDdlOGUxMjMuLjc0MjlmNzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2NsYXNzL2NkYy13ZG0uYworKysgYi9kcml2ZXJzL3VzYi9jbGFzcy9jZGMtd2RtLmMKQEAgLTEzMiwxMCArMTMyLDEyIEBACiAJCQkJIm5vbnplcm8gdXJiIHN0YXR1cyByZWNlaXZlZDogLUVTSFVURE9XTiIpOwogCQkJYnJlYWs7CiAJCWNhc2UgLUVQSVBFOgotCQkJZXJyKCJub256ZXJvIHVyYiBzdGF0dXMgcmVjZWl2ZWQ6IC1FUElQRSIpOworCQkJZGV2X2VycigmZGVzYy0+aW50Zi0+ZGV2LAorCQkJCSJub256ZXJvIHVyYiBzdGF0dXMgcmVjZWl2ZWQ6IC1FUElQRVxuIik7CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKLQkJCWVycigiVW5leHBlY3RlZCBlcnJvciAlZCIsIHN0YXR1cyk7CisJCQlkZXZfZXJyKCZkZXNjLT5pbnRmLT5kZXYsCisJCQkJIlVuZXhwZWN0ZWQgZXJyb3IgJWRcbiIsIHN0YXR1cyk7CiAJCQlicmVhazsKIAkJfQogCX0KQEAgLTE3MCwxNiArMTcyLDE4IEBACiAJCQlyZXR1cm47IC8qIHVucGx1ZyAqLwogCQljYXNlIC1FUElQRToKIAkJCXNldF9iaXQoV0RNX0lOVF9TVEFMTCwgJmRlc2MtPmZsYWdzKTsKLQkJCWVycigiU3RhbGwgb24gaW50IGVuZHBvaW50Iik7CisJCQlkZXZfZXJyKCZkZXNjLT5pbnRmLT5kZXYsICJTdGFsbCBvbiBpbnQgZW5kcG9pbnRcbiIpOwogCQkJZ290byBzdzsgLyogaGFsdCBpcyBjbGVhcmVkIGluIHdvcmsgKi8KIAkJZGVmYXVsdDoKLQkJCWVycigibm9uemVybyB1cmIgc3RhdHVzIHJlY2VpdmVkOiAlZCIsIHN0YXR1cyk7CisJCQlkZXZfZXJyKCZkZXNjLT5pbnRmLT5kZXYsCisJCQkJIm5vbnplcm8gdXJiIHN0YXR1cyByZWNlaXZlZDogJWRcbiIsIHN0YXR1cyk7CiAJCQlicmVhazsKIAkJfQogCX0KIAogCWlmICh1cmItPmFjdHVhbF9sZW5ndGggPCBzaXplb2Yoc3RydWN0IHVzYl9jZGNfbm90aWZpY2F0aW9uKSkgewotCQllcnIoIndkbV9pbnRfY2FsbGJhY2sgLSAlZCBieXRlcyIsIHVyYi0+YWN0dWFsX2xlbmd0aCk7CisJCWRldl9lcnIoJmRlc2MtPmludGYtPmRldiwgIndkbV9pbnRfY2FsbGJhY2sgLSAlZCBieXRlc1xuIiwKKwkJCXVyYi0+YWN0dWFsX2xlbmd0aCk7CiAJCWdvdG8gZXhpdDsKIAl9CiAKQEAgLTE5OCw3ICsyMDIsOCBAQAogCQlnb3RvIGV4aXQ7CiAJZGVmYXVsdDoKIAkJY2xlYXJfYml0KFdETV9QT0xMX1JVTk5JTkcsICZkZXNjLT5mbGFncyk7Ci0JCWVycigidW5rbm93biBub3RpZmljYXRpb24gJWQgcmVjZWl2ZWQ6IGluZGV4ICVkIGxlbiAlZCIsCisJCWRldl9lcnIoJmRlc2MtPmludGYtPmRldiwKKwkJCSJ1bmtub3duIG5vdGlmaWNhdGlvbiAlZCByZWNlaXZlZDogaW5kZXggJWQgbGVuICVkXG4iLAogCQkJZHItPmJOb3RpZmljYXRpb25UeXBlLCBkci0+d0luZGV4LCBkci0+d0xlbmd0aCk7CiAJCWdvdG8gZXhpdDsKIAl9CkBAIC0yMzYsMTQgKzI0MSwxNiBAQAogc3c6CiAJCQlydiA9IHNjaGVkdWxlX3dvcmsoJmRlc2MtPnJ4d29yayk7CiAJCQlpZiAocnYpCi0JCQkJZXJyKCJDYW5ub3Qgc2NoZWR1bGUgd29yayIpOworCQkJCWRldl9lcnIoJmRlc2MtPmludGYtPmRldiwKKwkJCQkJIkNhbm5vdCBzY2hlZHVsZSB3b3JrXG4iKTsKIAkJfQogCX0KIGV4aXQ6CiAJcnYgPSB1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9BVE9NSUMpOwogCWlmIChydikKLQkJZXJyKCIlcyAtIHVzYl9zdWJtaXRfdXJiIGZhaWxlZCB3aXRoIHJlc3VsdCAlZCIsCi0JCSAgICAgX19mdW5jX18sIHJ2KTsKKwkJZGV2X2VycigmZGVzYy0+aW50Zi0+ZGV2LAorCQkJIiVzIC0gdXNiX3N1Ym1pdF91cmIgZmFpbGVkIHdpdGggcmVzdWx0ICVkXG4iLAorCQkJX19mdW5jX18sIHJ2KTsKIAogfQogCkBAIC0zNTMsNyArMzYwLDcgQEAKIAlpZiAocnYgPCAwKSB7CiAJCWtmcmVlKGJ1Zik7CiAJCWNsZWFyX2JpdChXRE1fSU5fVVNFLCAmZGVzYy0+ZmxhZ3MpOwotCQllcnIoIlR4IFVSQiBlcnJvcjogJWQiLCBydik7CisJCWRldl9lcnIoJmRlc2MtPmludGYtPmRldiwgIlR4IFVSQiBlcnJvcjogJWRcbiIsIHJ2KTsKIAl9IGVsc2UgewogCQlkZXZfZGJnKCZkZXNjLT5pbnRmLT5kZXYsICJUeCBVUkIgaGFzIGJlZW4gc3VibWl0dGVkIGluZGV4PSVkIiwKIAkJCXJlcS0+d0luZGV4KTsKQEAgLTQwMSw3ICs0MDgsOCBAQAogCQkJaW50IHQgPSBkZXNjLT5yZXJyOwogCQkJZGVzYy0+cmVyciA9IDA7CiAJCQlzcGluX3VubG9ja19pcnEoJmRlc2MtPml1c3Bpbik7Ci0JCQllcnIoInJlYWRpbmcgaGFkIHJlc3VsdGVkIGluICVkIiwgdCk7CisJCQlkZXZfZXJyKCZkZXNjLT5pbnRmLT5kZXYsCisJCQkJInJlYWRpbmcgaGFkIHJlc3VsdGVkIGluICVkXG4iLCB0KTsKIAkJCXJ2ID0gLUVJTzsKIAkJCWdvdG8gZXJyOwogCQl9CkBAIC00NDAsNyArNDQ4LDcgQEAKIGVycjoKIAltdXRleF91bmxvY2soJmRlc2MtPnJsb2NrKTsKIAlpZiAocnYgPCAwKQotCQllcnIoIndkbV9yZWFkOiBleGl0IGVycm9yIik7CisJCWRldl9lcnIoJmRlc2MtPmludGYtPmRldiwgIndkbV9yZWFkOiBleGl0IGVycm9yXG4iKTsKIAlyZXR1cm4gcnY7CiB9CiAKQEAgLTQ1MCw3ICs0NTgsOCBAQAogCiAJd2FpdF9ldmVudChkZXNjLT53YWl0LCAhdGVzdF9iaXQoV0RNX0lOX1VTRSwgJmRlc2MtPmZsYWdzKSk7CiAJaWYgKGRlc2MtPndlcnIgPCAwKQotCQllcnIoIkVycm9yIGluIGZsdXNoIHBhdGg6ICVkIiwgZGVzYy0+d2Vycik7CisJCWRldl9lcnIoJmRlc2MtPmludGYtPmRldiwgIkVycm9yIGluIGZsdXNoIHBhdGg6ICVkXG4iLAorCQkJZGVzYy0+d2Vycik7CiAKIAlyZXR1cm4gZGVzYy0+d2VycjsKIH0KQEAgLTUwMiw3ICs1MTEsNyBAQAogCiAJcnYgPSB1c2JfYXV0b3BtX2dldF9pbnRlcmZhY2UoZGVzYy0+aW50Zik7CiAJaWYgKHJ2IDwgMCkgewotCQllcnIoIkVycm9yIGF1dG9wbSAtICVkIiwgcnYpOworCQlkZXZfZXJyKCZkZXNjLT5pbnRmLT5kZXYsICJFcnJvciBhdXRvcG0gLSAlZFxuIiwgcnYpOwogCQlnb3RvIG91dDsKIAl9CiAJaW50Zi0+bmVlZHNfcmVtb3RlX3dha2V1cCA9IDE7CkBAIC01MTIsNyArNTIxLDggQEAKIAkJcnYgPSB1c2Jfc3VibWl0X3VyYihkZXNjLT52YWxpZGl0eSwgR0ZQX0tFUk5FTCk7CiAJCWlmIChydiA8IDApIHsKIAkJCWRlc2MtPmNvdW50LS07Ci0JCQllcnIoIkVycm9yIHN1Ym1pdHRpbmcgaW50IHVyYiAtICVkIiwgcnYpOworCQkJZGV2X2VycigmZGVzYy0+aW50Zi0+ZGV2LAorCQkJCSJFcnJvciBzdWJtaXR0aW5nIGludCB1cmIgLSAlZFxuIiwgcnYpOwogCQl9CiAJfSBlbHNlIHsKIAkJcnYgPSAwOwpAQCAtNjAwLDcgKzYxMCw3IEBACiAKIAl3aGlsZSAoYnVmbGVuID4gMCkgewogCQlpZiAoYnVmZmVyIFsxXSAhPSBVU0JfRFRfQ1NfSU5URVJGQUNFKSB7Ci0JCQllcnIoInNraXBwaW5nIGdhcmJhZ2UiKTsKKwkJCWRldl9lcnIoJmludGYtPmRldiwgInNraXBwaW5nIGdhcmJhZ2VcbiIpOwogCQkJZ290byBuZXh0X2Rlc2M7CiAJCX0KIApAQCAtNjE0LDcgKzYyNCw4IEBACiAJCQkJIkZpbmRpbmcgbWF4aW11bSBidWZmZXIgbGVuZ3RoOiAlZCIsIG1heGNvbSk7CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKLQkJCWVycigiSWdub3JpbmcgZXh0cmEgaGVhZGVyLCB0eXBlICVkLCBsZW5ndGggJWQiLAorCQkJZGV2X2VycigmaW50Zi0+ZGV2LAorCQkJCSJJZ25vcmluZyBleHRyYSBoZWFkZXIsIHR5cGUgJWQsIGxlbmd0aCAlZFxuIiwKIAkJCQlidWZmZXJbMl0sIGJ1ZmZlclswXSk7CiAJCQlicmVhazsKIAkJfQpAQCAtNzcyLDcgKzc4Myw4IEBACiAJaWYgKGRlc2MtPmNvdW50KSB7CiAJCXJ2ID0gdXNiX3N1Ym1pdF91cmIoZGVzYy0+dmFsaWRpdHksIEdGUF9OT0lPKTsKIAkJaWYgKHJ2IDwgMCkKLQkJCWVycigiRXJyb3IgcmVzdW1lIHN1Ym1pdHRpbmcgaW50IHVyYiAtICVkIiwgcnYpOworCQkJZGV2X2VycigmZGVzYy0+aW50Zi0+ZGV2LAorCQkJCSJFcnJvciByZXN1bWUgc3VibWl0dGluZyBpbnQgdXJiIC0gJWRcbiIsIHJ2KTsKIAl9CiAJcmV0dXJuIHJ2OwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY2xhc3MvdXNibHAuYyBiL2RyaXZlcnMvdXNiL2NsYXNzL3VzYmxwLmMKaW5kZXggMDY0NzE2NC4uYjU3NzVhZiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvY2xhc3MvdXNibHAuYworKysgYi9kcml2ZXJzL3VzYi9jbGFzcy91c2JscC5jCkBAIC01OTMsOCArNTkzLDkgQEAKIAkJCQllcnIgPSB1c2JscF9ocF9jaGFubmVsX2NoYW5nZV9yZXF1ZXN0KHVzYmxwLAogCQkJCQlhcmcsICZuZXdDaGFubmVsKTsKIAkJCQlpZiAoZXJyIDwgMCkgewotCQkJCQllcnIoInVzYmxwJWQ6IGVycm9yID0gJWQgc2V0dGluZyAiCi0JCQkJCQkiSFAgY2hhbm5lbCIsCisJCQkJCWRldl9lcnIoJnVzYmxwLT5kZXYtPmRldiwKKwkJCQkJCSJ1c2JscCVkOiBlcnJvciA9ICVkIHNldHRpbmcgIgorCQkJCQkJIkhQIGNoYW5uZWxcbiIsCiAJCQkJCQl1c2JscC0+bWlub3IsIGVycik7CiAJCQkJCXJldHZhbCA9IC1FSU87CiAJCQkJCWdvdG8gZG9uZTsKQEAgLTEwNzYsMTUgKzEwNzcsMTYgQEAKIAkJICAgICAgIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKIHsKIAlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldiAoaW50Zik7Ci0Jc3RydWN0IHVzYmxwICp1c2JscCA9IE5VTEw7CisJc3RydWN0IHVzYmxwICp1c2JscDsKIAlpbnQgcHJvdG9jb2w7CiAJaW50IHJldHZhbDsKIAogCS8qIE1hbGxvYyBhbmQgc3RhcnQgaW5pdGlhbGl6aW5nIHVzYmxwIHN0cnVjdHVyZSBzbyB3ZSBjYW4gdXNlIGl0CiAJICogZGlyZWN0bHkuICovCi0JaWYgKCEodXNibHAgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgdXNibHApLCBHRlBfS0VSTkVMKSkpIHsKKwl1c2JscCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB1c2JscCksIEdGUF9LRVJORUwpOworCWlmICghdXNibHApIHsKIAkJcmV0dmFsID0gLUVOT01FTTsKLQkJZ290byBhYm9ydDsKKwkJZ290byBhYm9ydF9yZXQ7CiAJfQogCXVzYmxwLT5kZXYgPSBkZXY7CiAJbXV0ZXhfaW5pdCgmdXNibHAtPndtdXQpOwpAQCAtMTE3OSwxMiArMTE4MSwxMSBAQAogCXVzYl9zZXRfaW50ZmRhdGEgKGludGYsIE5VTEwpOwogCWRldmljZV9yZW1vdmVfZmlsZSgmaW50Zi0+ZGV2LCAmZGV2X2F0dHJfaWVlZTEyODRfaWQpOwogYWJvcnQ6Ci0JaWYgKHVzYmxwKSB7Ci0JCWtmcmVlKHVzYmxwLT5yZWFkYnVmKTsKLQkJa2ZyZWUodXNibHAtPnN0YXR1c2J1Zik7Ci0JCWtmcmVlKHVzYmxwLT5kZXZpY2VfaWRfc3RyaW5nKTsKLQkJa2ZyZWUodXNibHApOwotCX0KKwlrZnJlZSh1c2JscC0+cmVhZGJ1Zik7CisJa2ZyZWUodXNibHAtPnN0YXR1c2J1Zik7CisJa2ZyZWUodXNibHAtPmRldmljZV9pZF9zdHJpbmcpOworCWtmcmVlKHVzYmxwKTsKK2Fib3J0X3JldDoKIAlyZXR1cm4gcmV0dmFsOwogfQogCkBAIC0xMzQ1LDcgKzEzNDYsNyBAQAogCXVzYl9kZXJlZ2lzdGVyX2RldihpbnRmLCAmdXNibHBfY2xhc3MpOwogCiAJaWYgKCF1c2JscCB8fCAhdXNibHAtPmRldikgewotCQllcnIoImJvZ3VzIGRpc2Nvbm5lY3QiKTsKKwkJZGV2X2VycigmaW50Zi0+ZGV2LCAiYm9ndXMgZGlzY29ubmVjdFxuIik7CiAJCUJVRyAoKTsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NsYXNzL3VzYnRtYy5jIGIvZHJpdmVycy91c2IvY2xhc3MvdXNidG1jLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTQzODExZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL2NsYXNzL3VzYnRtYy5jCkBAIC0wLDAgKzEsMTA4NyBAQAorLyoqCisgKiBkcml2ZXJzL3VzYi9jbGFzcy91c2J0bWMuYyAtIFVTQiBUZXN0ICYgTWVhc3VybWVudCBjbGFzcyBkcml2ZXIKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgU3RlZmFuIEtvcHAsIEdlY2hpbmdlbiwgR2VybWFueQorICogQ29weXJpZ2h0IChDKSAyMDA4IE5vdmVsbCwgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDA4IEdyZWcgS3JvYWgtSGFydG1hbiA8Z3JlZ2toQHN1c2UuZGU+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyCisgKiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZ251Lm9yZy9jb3B5bGVmdC9ncGwuaHRtbC4KKyAqLworCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CisjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGxpbnV4L2tyZWYuaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi90bWMuaD4KKworCisjZGVmaW5lIFVTQlRNQ19NSU5PUl9CQVNFCTE3NgorCisvKgorICogU2l6ZSBvZiBkcml2ZXIgaW50ZXJuYWwgSU8gYnVmZmVyLiBNdXN0IGJlIG11bHRpcGxlIG9mIDQgYW5kIGF0IGxlYXN0IGFzCisgKiBsYXJnZSBhcyB3TWF4UGFja2V0U2l6ZSAod2hpY2ggaXMgdXN1YWxseSA1MTIgYnl0ZXMpLgorICovCisjZGVmaW5lIFVTQlRNQ19TSVpFX0lPQlVGRkVSCTIwNDgKKworLyogRGVmYXVsdCBVU0IgdGltZW91dCAoaW4gbWlsbGlzZWNvbmRzKSAqLworI2RlZmluZSBVU0JUTUNfVElNRU9VVAkJMTAKKworLyoKKyAqIE1heGltdW0gbnVtYmVyIG9mIHJlYWQgY3ljbGVzIHRvIGVtcHR5IGJ1bGsgaW4gZW5kcG9pbnQgZHVyaW5nIENMRUFSIGFuZAorICogQUJPUlRfQlVMS19JTiByZXF1ZXN0cy4gRW5kcyB0aGUgbG9vcCBpZiAoZm9yIHdoYXRldmVyIHJlYXNvbikgYSBzaG9ydAorICogcGFja2V0IGlzIG5ldmVyIHJlYWQuCisgKi8KKyNkZWZpbmUgVVNCVE1DX01BWF9SRUFEU19UT19DTEVBUl9CVUxLX0lOCTEwMAorCitzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgdXNidG1jX2RldmljZXNbXSA9IHsKKwl7IFVTQl9JTlRFUkZBQ0VfSU5GTyhVU0JfQ0xBU1NfQVBQX1NQRUMsIDMsIDApLCB9LAorCXsgMCwgfSAvKiB0ZXJtaW5hdGluZyBlbnRyeSAqLworfTsKKworLyoKKyAqIFRoaXMgc3RydWN0dXJlIGlzIHRoZSBjYXBhYmlsaXRpZXMgZm9yIHRoZSBkZXZpY2UKKyAqIFNlZSBzZWN0aW9uIDQuMi4xLjggb2YgdGhlIFVTQlRNQyBzcGVjaWZpY2F0aW9uIGZvciBkZXRhaWxzLgorICovCitzdHJ1Y3QgdXNidG1jX2Rldl9jYXBhYmlsaXRpZXMgeworCV9fdTggaW50ZXJmYWNlX2NhcGFiaWxpdGllczsKKwlfX3U4IGRldmljZV9jYXBhYmlsaXRpZXM7CisJX191OCB1c2I0ODhfaW50ZXJmYWNlX2NhcGFiaWxpdGllczsKKwlfX3U4IHVzYjQ4OF9kZXZpY2VfY2FwYWJpbGl0aWVzOworfTsKKworLyogVGhpcyBzdHJ1Y3R1cmUgaG9sZHMgcHJpdmF0ZSBkYXRhIGZvciBlYWNoIFVTQlRNQyBkZXZpY2UuIE9uZSBjb3B5IGlzCisgKiBhbGxvY2F0ZWQgZm9yIGVhY2ggVVNCVE1DIGRldmljZSBpbiB0aGUgZHJpdmVyJ3MgcHJvYmUgZnVuY3Rpb24uCisgKi8KK3N0cnVjdCB1c2J0bWNfZGV2aWNlX2RhdGEgeworCWNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZDsKKwlzdHJ1Y3QgdXNiX2RldmljZSAqdXNiX2RldjsKKwlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZjsKKworCXVuc2lnbmVkIGludCBidWxrX2luOworCXVuc2lnbmVkIGludCBidWxrX291dDsKKworCXU4IGJUYWc7CisJdTggYlRhZ19sYXN0X3dyaXRlOwkvKiBuZWVkZWQgZm9yIGFib3J0ICovCisJdTggYlRhZ19sYXN0X3JlYWQ7CS8qIG5lZWRlZCBmb3IgYWJvcnQgKi8KKworCS8qIGF0dHJpYnV0ZXMgZnJvbSB0aGUgVVNCIFRNQyBzcGVjIGZvciB0aGlzIGRldmljZSAqLworCXU4IFRlcm1DaGFyOworCWJvb2wgVGVybUNoYXJFbmFibGVkOworCWJvb2wgYXV0b19hYm9ydDsKKworCXN0cnVjdCB1c2J0bWNfZGV2X2NhcGFiaWxpdGllcwljYXBhYmlsaXRpZXM7CisJc3RydWN0IGtyZWYga3JlZjsKKwlzdHJ1Y3QgbXV0ZXggaW9fbXV0ZXg7CS8qIG9ubHkgb25lIGkvbyBmdW5jdGlvbiBydW5uaW5nIGF0IGEgdGltZSAqLworfTsKKyNkZWZpbmUgdG9fdXNidG1jX2RhdGEoZCkgY29udGFpbmVyX29mKGQsIHN0cnVjdCB1c2J0bWNfZGV2aWNlX2RhdGEsIGtyZWYpCisKKy8qIEZvcndhcmQgZGVjbGFyYXRpb25zICovCitzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgdXNidG1jX2RyaXZlcjsKKworc3RhdGljIHZvaWQgdXNidG1jX2RlbGV0ZShzdHJ1Y3Qga3JlZiAqa3JlZikKK3sKKwlzdHJ1Y3QgdXNidG1jX2RldmljZV9kYXRhICpkYXRhID0gdG9fdXNidG1jX2RhdGEoa3JlZik7CisKKwl1c2JfcHV0X2RldihkYXRhLT51c2JfZGV2KTsKKwlrZnJlZShkYXRhKTsKK30KKworc3RhdGljIGludCB1c2J0bWNfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCkKK3sKKwlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZjsKKwlzdHJ1Y3QgdXNidG1jX2RldmljZV9kYXRhICpkYXRhOworCWludCByZXR2YWwgPSAtRU5PREVWOworCisJaW50ZiA9IHVzYl9maW5kX2ludGVyZmFjZSgmdXNidG1jX2RyaXZlciwgaW1pbm9yKGlub2RlKSk7CisJaWYgKCFpbnRmKSB7CisJCXByaW50ayhLRVJOX0VSUiBLQlVJTERfTU9ETkFNRQorCQkgICAgICAgIjogY2FuIG5vdCBmaW5kIGRldmljZSBmb3IgbWlub3IgJWQiLCBpbWlub3IoaW5vZGUpKTsKKwkJZ290byBleGl0OworCX0KKworCWRhdGEgPSB1c2JfZ2V0X2ludGZkYXRhKGludGYpOworCWtyZWZfZ2V0KCZkYXRhLT5rcmVmKTsKKworCS8qIFN0b3JlIHBvaW50ZXIgaW4gZmlsZSBzdHJ1Y3R1cmUncyBwcml2YXRlIGRhdGEgZmllbGQgKi8KKwlmaWxwLT5wcml2YXRlX2RhdGEgPSBkYXRhOworCitleGl0OgorCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyBpbnQgdXNidG1jX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJc3RydWN0IHVzYnRtY19kZXZpY2VfZGF0YSAqZGF0YSA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKworCWtyZWZfcHV0KCZkYXRhLT5rcmVmLCB1c2J0bWNfZGVsZXRlKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB1c2J0bWNfaW9jdGxfYWJvcnRfYnVsa19pbihzdHJ1Y3QgdXNidG1jX2RldmljZV9kYXRhICpkYXRhKQoreworCWNoYXIgKmJ1ZmZlcjsKKwlzdHJ1Y3QgZGV2aWNlICpkZXY7CisJaW50IHJ2OworCWludCBuOworCWludCBhY3R1YWw7CisJc3RydWN0IHVzYl9ob3N0X2ludGVyZmFjZSAqY3VycmVudF9zZXR0aW5nOworCWludCBtYXhfc2l6ZTsKKworCWRldiA9ICZkYXRhLT5pbnRmLT5kZXY7CisJYnVmZmVyID0ga21hbGxvYyhVU0JUTUNfU0laRV9JT0JVRkZFUiwgR0ZQX0tFUk5FTCk7CisJaWYgKCFidWZmZXIpCisJCXJldHVybiAtRU5PTUVNOworCisJcnYgPSB1c2JfY29udHJvbF9tc2coZGF0YS0+dXNiX2RldiwKKwkJCSAgICAgdXNiX3JjdmN0cmxwaXBlKGRhdGEtPnVzYl9kZXYsIDApLAorCQkJICAgICBVU0JUTUNfUkVRVUVTVF9JTklUSUFURV9BQk9SVF9CVUxLX0lOLAorCQkJICAgICBVU0JfRElSX0lOIHwgVVNCX1RZUEVfQ0xBU1MgfCBVU0JfUkVDSVBfRU5EUE9JTlQsCisJCQkgICAgIGRhdGEtPmJUYWdfbGFzdF9yZWFkLCBkYXRhLT5idWxrX2luLAorCQkJICAgICBidWZmZXIsIDIsIFVTQlRNQ19USU1FT1VUKTsKKworCWlmIChydiA8IDApIHsKKwkJZGV2X2VycihkZXYsICJ1c2JfY29udHJvbF9tc2cgcmV0dXJuZWQgJWRcbiIsIHJ2KTsKKwkJZ290byBleGl0OworCX0KKworCWRldl9kYmcoZGV2LCAiSU5JVElBVEVfQUJPUlRfQlVMS19JTiByZXR1cm5lZCAleFxuIiwgYnVmZmVyWzBdKTsKKworCWlmIChidWZmZXJbMF0gPT0gVVNCVE1DX1NUQVRVU19GQUlMRUQpIHsKKwkJcnYgPSAwOworCQlnb3RvIGV4aXQ7CisJfQorCisJaWYgKGJ1ZmZlclswXSAhPSBVU0JUTUNfU1RBVFVTX1NVQ0NFU1MpIHsKKwkJZGV2X2VycihkZXYsICJJTklUSUFURV9BQk9SVF9CVUxLX0lOIHJldHVybmVkICV4XG4iLAorCQkJYnVmZmVyWzBdKTsKKwkJcnYgPSAtRVBFUk07CisJCWdvdG8gZXhpdDsKKwl9CisKKwltYXhfc2l6ZSA9IDA7CisJY3VycmVudF9zZXR0aW5nID0gZGF0YS0+aW50Zi0+Y3VyX2FsdHNldHRpbmc7CisJZm9yIChuID0gMDsgbiA8IGN1cnJlbnRfc2V0dGluZy0+ZGVzYy5iTnVtRW5kcG9pbnRzOyBuKyspCisJCWlmIChjdXJyZW50X3NldHRpbmctPmVuZHBvaW50W25dLmRlc2MuYkVuZHBvaW50QWRkcmVzcyA9PQorCQkJZGF0YS0+YnVsa19pbikKKwkJCW1heF9zaXplID0gbGUxNl90b19jcHUoY3VycmVudF9zZXR0aW5nLT5lbmRwb2ludFtuXS4KKwkJCQkJCWRlc2Mud01heFBhY2tldFNpemUpOworCisJaWYgKG1heF9zaXplID09IDApIHsKKwkJZGV2X2VycihkZXYsICJDb3VsZG4ndCBnZXQgd01heFBhY2tldFNpemVcbiIpOworCQlydiA9IC1FUEVSTTsKKwkJZ290byBleGl0OworCX0KKworCWRldl9kYmcoJmRhdGEtPmludGYtPmRldiwgIndNYXhQYWNrZXRTaXplIGlzICVkXG4iLCBtYXhfc2l6ZSk7CisKKwluID0gMDsKKworCWRvIHsKKwkJZGV2X2RiZyhkZXYsICJSZWFkaW5nIGZyb20gYnVsayBpbiBFUFxuIik7CisKKwkJcnYgPSB1c2JfYnVsa19tc2coZGF0YS0+dXNiX2RldiwKKwkJCQkgIHVzYl9yY3ZidWxrcGlwZShkYXRhLT51c2JfZGV2LAorCQkJCQkJICBkYXRhLT5idWxrX2luKSwKKwkJCQkgIGJ1ZmZlciwgVVNCVE1DX1NJWkVfSU9CVUZGRVIsCisJCQkJICAmYWN0dWFsLCBVU0JUTUNfVElNRU9VVCk7CisKKwkJbisrOworCisJCWlmIChydiA8IDApIHsKKwkJCWRldl9lcnIoZGV2LCAidXNiX2J1bGtfbXNnIHJldHVybmVkICVkXG4iLCBydik7CisJCQlnb3RvIGV4aXQ7CisJCX0KKwl9IHdoaWxlICgoYWN0dWFsID09IG1heF9zaXplKSAmJgorCQkgKG4gPCBVU0JUTUNfTUFYX1JFQURTX1RPX0NMRUFSX0JVTEtfSU4pKTsKKworCWlmIChhY3R1YWwgPT0gbWF4X3NpemUpIHsKKwkJZGV2X2VycihkZXYsICJDb3VsZG4ndCBjbGVhciBkZXZpY2UgYnVmZmVyIHdpdGhpbiAlZCBjeWNsZXNcbiIsCisJCQlVU0JUTUNfTUFYX1JFQURTX1RPX0NMRUFSX0JVTEtfSU4pOworCQlydiA9IC1FUEVSTTsKKwkJZ290byBleGl0OworCX0KKworCW4gPSAwOworCit1c2J0bWNfYWJvcnRfYnVsa19pbl9zdGF0dXM6CisJcnYgPSB1c2JfY29udHJvbF9tc2coZGF0YS0+dXNiX2RldiwKKwkJCSAgICAgdXNiX3JjdmN0cmxwaXBlKGRhdGEtPnVzYl9kZXYsIDApLAorCQkJICAgICBVU0JUTUNfUkVRVUVTVF9DSEVDS19BQk9SVF9CVUxLX0lOX1NUQVRVUywKKwkJCSAgICAgVVNCX0RJUl9JTiB8IFVTQl9UWVBFX0NMQVNTIHwgVVNCX1JFQ0lQX0VORFBPSU5ULAorCQkJICAgICAwLCBkYXRhLT5idWxrX2luLCBidWZmZXIsIDB4MDgsCisJCQkgICAgIFVTQlRNQ19USU1FT1VUKTsKKworCWlmIChydiA8IDApIHsKKwkJZGV2X2VycihkZXYsICJ1c2JfY29udHJvbF9tc2cgcmV0dXJuZWQgJWRcbiIsIHJ2KTsKKwkJZ290byBleGl0OworCX0KKworCWRldl9kYmcoZGV2LCAiSU5JVElBVEVfQUJPUlRfQlVMS19JTiByZXR1cm5lZCAleFxuIiwgYnVmZmVyWzBdKTsKKworCWlmIChidWZmZXJbMF0gPT0gVVNCVE1DX1NUQVRVU19TVUNDRVNTKSB7CisJCXJ2ID0gMDsKKwkJZ290byBleGl0OworCX0KKworCWlmIChidWZmZXJbMF0gIT0gVVNCVE1DX1NUQVRVU19QRU5ESU5HKSB7CisJCWRldl9lcnIoZGV2LCAiSU5JVElBVEVfQUJPUlRfQlVMS19JTiByZXR1cm5lZCAleFxuIiwgYnVmZmVyWzBdKTsKKwkJcnYgPSAtRVBFUk07CisJCWdvdG8gZXhpdDsKKwl9CisKKwlpZiAoYnVmZmVyWzFdID09IDEpCisJCWRvIHsKKwkJCWRldl9kYmcoZGV2LCAiUmVhZGluZyBmcm9tIGJ1bGsgaW4gRVBcbiIpOworCisJCQlydiA9IHVzYl9idWxrX21zZyhkYXRhLT51c2JfZGV2LAorCQkJCQkgIHVzYl9yY3ZidWxrcGlwZShkYXRhLT51c2JfZGV2LAorCQkJCQkJCSAgZGF0YS0+YnVsa19pbiksCisJCQkJCSAgYnVmZmVyLCBVU0JUTUNfU0laRV9JT0JVRkZFUiwKKwkJCQkJICAmYWN0dWFsLCBVU0JUTUNfVElNRU9VVCk7CisKKwkJCW4rKzsKKworCQkJaWYgKHJ2IDwgMCkgeworCQkJCWRldl9lcnIoZGV2LCAidXNiX2J1bGtfbXNnIHJldHVybmVkICVkXG4iLCBydik7CisJCQkJZ290byBleGl0OworCQkJfQorCQl9IHdoaWxlICgoYWN0dWFsID0gbWF4X3NpemUpICYmCisJCQkgKG4gPCBVU0JUTUNfTUFYX1JFQURTX1RPX0NMRUFSX0JVTEtfSU4pKTsKKworCWlmIChhY3R1YWwgPT0gbWF4X3NpemUpIHsKKwkJZGV2X2VycihkZXYsICJDb3VsZG4ndCBjbGVhciBkZXZpY2UgYnVmZmVyIHdpdGhpbiAlZCBjeWNsZXNcbiIsCisJCQlVU0JUTUNfTUFYX1JFQURTX1RPX0NMRUFSX0JVTEtfSU4pOworCQlydiA9IC1FUEVSTTsKKwkJZ290byBleGl0OworCX0KKworCWdvdG8gdXNidG1jX2Fib3J0X2J1bGtfaW5fc3RhdHVzOworCitleGl0OgorCWtmcmVlKGJ1ZmZlcik7CisJcmV0dXJuIHJ2OworCit9CisKK3N0YXRpYyBpbnQgdXNidG1jX2lvY3RsX2Fib3J0X2J1bGtfb3V0KHN0cnVjdCB1c2J0bWNfZGV2aWNlX2RhdGEgKmRhdGEpCit7CisJc3RydWN0IGRldmljZSAqZGV2OworCXU4ICpidWZmZXI7CisJaW50IHJ2OworCWludCBuOworCisJZGV2ID0gJmRhdGEtPmludGYtPmRldjsKKworCWJ1ZmZlciA9IGttYWxsb2MoOCwgR0ZQX0tFUk5FTCk7CisJaWYgKCFidWZmZXIpCisJCXJldHVybiAtRU5PTUVNOworCisJcnYgPSB1c2JfY29udHJvbF9tc2coZGF0YS0+dXNiX2RldiwKKwkJCSAgICAgdXNiX3JjdmN0cmxwaXBlKGRhdGEtPnVzYl9kZXYsIDApLAorCQkJICAgICBVU0JUTUNfUkVRVUVTVF9JTklUSUFURV9BQk9SVF9CVUxLX09VVCwKKwkJCSAgICAgVVNCX0RJUl9JTiB8IFVTQl9UWVBFX0NMQVNTIHwgVVNCX1JFQ0lQX0VORFBPSU5ULAorCQkJICAgICBkYXRhLT5iVGFnX2xhc3Rfd3JpdGUsIGRhdGEtPmJ1bGtfb3V0LAorCQkJICAgICBidWZmZXIsIDIsIFVTQlRNQ19USU1FT1VUKTsKKworCWlmIChydiA8IDApIHsKKwkJZGV2X2VycihkZXYsICJ1c2JfY29udHJvbF9tc2cgcmV0dXJuZWQgJWRcbiIsIHJ2KTsKKwkJZ290byBleGl0OworCX0KKworCWRldl9kYmcoZGV2LCAiSU5JVElBVEVfQUJPUlRfQlVMS19PVVQgcmV0dXJuZWQgJXhcbiIsIGJ1ZmZlclswXSk7CisKKwlpZiAoYnVmZmVyWzBdICE9IFVTQlRNQ19TVEFUVVNfU1VDQ0VTUykgeworCQlkZXZfZXJyKGRldiwgIklOSVRJQVRFX0FCT1JUX0JVTEtfT1VUIHJldHVybmVkICV4XG4iLAorCQkJYnVmZmVyWzBdKTsKKwkJcnYgPSAtRVBFUk07CisJCWdvdG8gZXhpdDsKKwl9CisKKwluID0gMDsKKwordXNidG1jX2Fib3J0X2J1bGtfb3V0X2NoZWNrX3N0YXR1czoKKwlydiA9IHVzYl9jb250cm9sX21zZyhkYXRhLT51c2JfZGV2LAorCQkJICAgICB1c2JfcmN2Y3RybHBpcGUoZGF0YS0+dXNiX2RldiwgMCksCisJCQkgICAgIFVTQlRNQ19SRVFVRVNUX0NIRUNLX0FCT1JUX0JVTEtfT1VUX1NUQVRVUywKKwkJCSAgICAgVVNCX0RJUl9JTiB8IFVTQl9UWVBFX0NMQVNTIHwgVVNCX1JFQ0lQX0VORFBPSU5ULAorCQkJICAgICAwLCBkYXRhLT5idWxrX291dCwgYnVmZmVyLCAweDA4LAorCQkJICAgICBVU0JUTUNfVElNRU9VVCk7CisJbisrOworCWlmIChydiA8IDApIHsKKwkJZGV2X2VycihkZXYsICJ1c2JfY29udHJvbF9tc2cgcmV0dXJuZWQgJWRcbiIsIHJ2KTsKKwkJZ290byBleGl0OworCX0KKworCWRldl9kYmcoZGV2LCAiQ0hFQ0tfQUJPUlRfQlVMS19PVVQgcmV0dXJuZWQgJXhcbiIsIGJ1ZmZlclswXSk7CisKKwlpZiAoYnVmZmVyWzBdID09IFVTQlRNQ19TVEFUVVNfU1VDQ0VTUykKKwkJZ290byB1c2J0bWNfYWJvcnRfYnVsa19vdXRfY2xlYXJfaGFsdDsKKworCWlmICgoYnVmZmVyWzBdID09IFVTQlRNQ19TVEFUVVNfUEVORElORykgJiYKKwkgICAgKG4gPCBVU0JUTUNfTUFYX1JFQURTX1RPX0NMRUFSX0JVTEtfSU4pKQorCQlnb3RvIHVzYnRtY19hYm9ydF9idWxrX291dF9jaGVja19zdGF0dXM7CisKKwlydiA9IC1FUEVSTTsKKwlnb3RvIGV4aXQ7CisKK3VzYnRtY19hYm9ydF9idWxrX291dF9jbGVhcl9oYWx0OgorCXJ2ID0gdXNiX2NvbnRyb2xfbXNnKGRhdGEtPnVzYl9kZXYsCisJCQkgICAgIHVzYl9zbmRjdHJscGlwZShkYXRhLT51c2JfZGV2LCAwKSwKKwkJCSAgICAgVVNCX1JFUV9DTEVBUl9GRUFUVVJFLAorCQkJICAgICBVU0JfRElSX09VVCB8IFVTQl9UWVBFX1NUQU5EQVJEIHwKKwkJCSAgICAgVVNCX1JFQ0lQX0VORFBPSU5ULAorCQkJICAgICBVU0JfRU5EUE9JTlRfSEFMVCwgZGF0YS0+YnVsa19vdXQsIGJ1ZmZlciwKKwkJCSAgICAgMCwgVVNCVE1DX1RJTUVPVVQpOworCisJaWYgKHJ2IDwgMCkgeworCQlkZXZfZXJyKGRldiwgInVzYl9jb250cm9sX21zZyByZXR1cm5lZCAlZFxuIiwgcnYpOworCQlnb3RvIGV4aXQ7CisJfQorCXJ2ID0gMDsKKworZXhpdDoKKwlrZnJlZShidWZmZXIpOworCXJldHVybiBydjsKK30KKworc3RhdGljIHNzaXplX3QgdXNidG1jX3JlYWQoc3RydWN0IGZpbGUgKmZpbHAsIGNoYXIgX191c2VyICpidWYsCisJCQkgICBzaXplX3QgY291bnQsIGxvZmZfdCAqZl9wb3MpCit7CisJc3RydWN0IHVzYnRtY19kZXZpY2VfZGF0YSAqZGF0YTsKKwlzdHJ1Y3QgZGV2aWNlICpkZXY7CisJdW5zaWduZWQgbG9uZyBpbnQgbl9jaGFyYWN0ZXJzOworCXU4ICpidWZmZXI7CisJaW50IGFjdHVhbDsKKwlpbnQgZG9uZTsKKwlpbnQgcmVtYWluaW5nOworCWludCByZXR2YWw7CisJaW50IHRoaXNfcGFydDsKKworCS8qIEdldCBwb2ludGVyIHRvIHByaXZhdGUgZGF0YSBzdHJ1Y3R1cmUgKi8KKwlkYXRhID0gZmlscC0+cHJpdmF0ZV9kYXRhOworCWRldiA9ICZkYXRhLT5pbnRmLT5kZXY7CisKKwlidWZmZXIgPSBrbWFsbG9jKFVTQlRNQ19TSVpFX0lPQlVGRkVSLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWJ1ZmZlcikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwltdXRleF9sb2NrKCZkYXRhLT5pb19tdXRleCk7CisKKwlyZW1haW5pbmcgPSBjb3VudDsKKwlkb25lID0gMDsKKworCXdoaWxlIChyZW1haW5pbmcgPiAwKSB7CisJCWlmIChyZW1haW5pbmcgPiBVU0JUTUNfU0laRV9JT0JVRkZFUiAtIDEyIC0gMykKKwkJCXRoaXNfcGFydCA9IFVTQlRNQ19TSVpFX0lPQlVGRkVSIC0gMTIgLSAzOworCQllbHNlCisJCQl0aGlzX3BhcnQgPSByZW1haW5pbmc7CisKKwkJLyogU2V0dXAgSU8gYnVmZmVyIGZvciBERVZfREVQX01TR19JTiBtZXNzYWdlCisJCSAqIFJlZmVyIHRvIGNsYXNzIHNwZWNzIGZvciBkZXRhaWxzCisJCSAqLworCQlidWZmZXJbMF0gPSAyOworCQlidWZmZXJbMV0gPSBkYXRhLT5iVGFnOworCQlidWZmZXJbMl0gPSB+KGRhdGEtPmJUYWcpOworCQlidWZmZXJbM10gPSAwOyAvKiBSZXNlcnZlZCAqLworCQlidWZmZXJbNF0gPSAodGhpc19wYXJ0IC0gMTIgLSAzKSAmIDI1NTsKKwkJYnVmZmVyWzVdID0gKCh0aGlzX3BhcnQgLSAxMiAtIDMpID4+IDgpICYgMjU1OworCQlidWZmZXJbNl0gPSAoKHRoaXNfcGFydCAtIDEyIC0gMykgPj4gMTYpICYgMjU1OworCQlidWZmZXJbN10gPSAoKHRoaXNfcGFydCAtIDEyIC0gMykgPj4gMjQpICYgMjU1OworCQlidWZmZXJbOF0gPSBkYXRhLT5UZXJtQ2hhckVuYWJsZWQgKiAyOworCQkvKiBVc2UgdGVybSBjaGFyYWN0ZXI/ICovCisJCWJ1ZmZlcls5XSA9IGRhdGEtPlRlcm1DaGFyOworCQlidWZmZXJbMTBdID0gMDsgLyogUmVzZXJ2ZWQgKi8KKwkJYnVmZmVyWzExXSA9IDA7IC8qIFJlc2VydmVkICovCisKKwkJLyogU2VuZCBidWxrIFVSQiAqLworCQlyZXR2YWwgPSB1c2JfYnVsa19tc2coZGF0YS0+dXNiX2RldiwKKwkJCQkgICAgICB1c2Jfc25kYnVsa3BpcGUoZGF0YS0+dXNiX2RldiwKKwkJCQkJCSAgICAgIGRhdGEtPmJ1bGtfb3V0KSwKKwkJCQkgICAgICBidWZmZXIsIDEyLCAmYWN0dWFsLCBVU0JUTUNfVElNRU9VVCk7CisKKwkJLyogU3RvcmUgYlRhZyAoaW4gY2FzZSB3ZSBuZWVkIHRvIGFib3J0KSAqLworCQlkYXRhLT5iVGFnX2xhc3Rfd3JpdGUgPSBkYXRhLT5iVGFnOworCisJCS8qIEluY3JlbWVudCBiVGFnIC0tIGFuZCBpbmNyZW1lbnQgYWdhaW4gaWYgemVybyAqLworCQlkYXRhLT5iVGFnKys7CisJCWlmICghZGF0YS0+YlRhZykKKwkJCShkYXRhLT5iVGFnKSsrOworCisJCWlmIChyZXR2YWwgPCAwKSB7CisJCQlkZXZfZXJyKGRldiwgInVzYl9idWxrX21zZyByZXR1cm5lZCAlZFxuIiwgcmV0dmFsKTsKKwkJCWlmIChkYXRhLT5hdXRvX2Fib3J0KQorCQkJCXVzYnRtY19pb2N0bF9hYm9ydF9idWxrX291dChkYXRhKTsKKwkJCWdvdG8gZXhpdDsKKwkJfQorCisJCS8qIFNlbmQgYnVsayBVUkIgKi8KKwkJcmV0dmFsID0gdXNiX2J1bGtfbXNnKGRhdGEtPnVzYl9kZXYsCisJCQkJICAgICAgdXNiX3JjdmJ1bGtwaXBlKGRhdGEtPnVzYl9kZXYsCisJCQkJCQkgICAgICBkYXRhLT5idWxrX2luKSwKKwkJCQkgICAgICBidWZmZXIsIFVTQlRNQ19TSVpFX0lPQlVGRkVSLCAmYWN0dWFsLAorCQkJCSAgICAgIFVTQlRNQ19USU1FT1VUKTsKKworCQkvKiBTdG9yZSBiVGFnIChpbiBjYXNlIHdlIG5lZWQgdG8gYWJvcnQpICovCisJCWRhdGEtPmJUYWdfbGFzdF9yZWFkID0gZGF0YS0+YlRhZzsKKworCQlpZiAocmV0dmFsIDwgMCkgeworCQkJZGV2X2VycihkZXYsICJVbmFibGUgdG8gcmVhZCBkYXRhLCBlcnJvciAlZFxuIiwgcmV0dmFsKTsKKwkJCWlmIChkYXRhLT5hdXRvX2Fib3J0KQorCQkJCXVzYnRtY19pb2N0bF9hYm9ydF9idWxrX2luKGRhdGEpOworCQkJZ290byBleGl0OworCQl9CisKKwkJLyogSG93IG1hbnkgY2hhcmFjdGVycyBkaWQgdGhlIGluc3RydW1lbnQgc2VuZD8gKi8KKwkJbl9jaGFyYWN0ZXJzID0gYnVmZmVyWzRdICsKKwkJCSAgICAgICAoYnVmZmVyWzVdIDw8IDgpICsKKwkJCSAgICAgICAoYnVmZmVyWzZdIDw8IDE2KSArCisJCQkgICAgICAgKGJ1ZmZlcls3XSA8PCAyNCk7CisKKwkJLyogQ29weSBidWZmZXIgdG8gdXNlciBzcGFjZSAqLworCQlpZiAoY29weV90b191c2VyKGJ1ZiArIGRvbmUsICZidWZmZXJbMTJdLCBuX2NoYXJhY3RlcnMpKSB7CisJCQkvKiBUaGVyZSBtdXN0IGhhdmUgYmVlbiBhbiBhZGRyZXNzaW5nIHByb2JsZW0gKi8KKwkJCXJldHZhbCA9IC1FRkFVTFQ7CisJCQlnb3RvIGV4aXQ7CisJCX0KKworCQlkb25lICs9IG5fY2hhcmFjdGVyczsKKwkJaWYgKG5fY2hhcmFjdGVycyA8IFVTQlRNQ19TSVpFX0lPQlVGRkVSKQorCQkJcmVtYWluaW5nID0gMDsKKwl9CisKKwkvKiBVcGRhdGUgZmlsZSBwb3NpdGlvbiB2YWx1ZSAqLworCSpmX3BvcyA9ICpmX3BvcyArIGRvbmU7CisJcmV0dmFsID0gZG9uZTsKKworZXhpdDoKKwltdXRleF91bmxvY2soJmRhdGEtPmlvX211dGV4KTsKKwlrZnJlZShidWZmZXIpOworCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHVzYnRtY193cml0ZShzdHJ1Y3QgZmlsZSAqZmlscCwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZiwKKwkJCSAgICBzaXplX3QgY291bnQsIGxvZmZfdCAqZl9wb3MpCit7CisJc3RydWN0IHVzYnRtY19kZXZpY2VfZGF0YSAqZGF0YTsKKwl1OCAqYnVmZmVyOworCWludCByZXR2YWw7CisJaW50IGFjdHVhbDsKKwl1bnNpZ25lZCBsb25nIGludCBuX2J5dGVzOworCWludCBuOworCWludCByZW1haW5pbmc7CisJaW50IGRvbmU7CisJaW50IHRoaXNfcGFydDsKKworCWRhdGEgPSBmaWxwLT5wcml2YXRlX2RhdGE7CisKKwlidWZmZXIgPSBrbWFsbG9jKFVTQlRNQ19TSVpFX0lPQlVGRkVSLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWJ1ZmZlcikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwltdXRleF9sb2NrKCZkYXRhLT5pb19tdXRleCk7CisKKwlyZW1haW5pbmcgPSBjb3VudDsKKwlkb25lID0gMDsKKworCXdoaWxlIChyZW1haW5pbmcgPiAwKSB7CisJCWlmIChyZW1haW5pbmcgPiBVU0JUTUNfU0laRV9JT0JVRkZFUiAtIDEyKSB7CisJCQl0aGlzX3BhcnQgPSBVU0JUTUNfU0laRV9JT0JVRkZFUiAtIDEyOworCQkJYnVmZmVyWzhdID0gMDsKKwkJfSBlbHNlIHsKKwkJCXRoaXNfcGFydCA9IHJlbWFpbmluZzsKKwkJCWJ1ZmZlcls4XSA9IDE7CisJCX0KKworCQkvKiBTZXR1cCBJTyBidWZmZXIgZm9yIERFVl9ERVBfTVNHX09VVCBtZXNzYWdlICovCisJCWJ1ZmZlclswXSA9IDE7CisJCWJ1ZmZlclsxXSA9IGRhdGEtPmJUYWc7CisJCWJ1ZmZlclsyXSA9IH4oZGF0YS0+YlRhZyk7CisJCWJ1ZmZlclszXSA9IDA7IC8qIFJlc2VydmVkICovCisJCWJ1ZmZlcls0XSA9IHRoaXNfcGFydCAmIDI1NTsKKwkJYnVmZmVyWzVdID0gKHRoaXNfcGFydCA+PiA4KSAmIDI1NTsKKwkJYnVmZmVyWzZdID0gKHRoaXNfcGFydCA+PiAxNikgJiAyNTU7CisJCWJ1ZmZlcls3XSA9ICh0aGlzX3BhcnQgPj4gMjQpICYgMjU1OworCQkvKiBidWZmZXJbOF0gaXMgc2V0IGFib3ZlLi4uICovCisJCWJ1ZmZlcls5XSA9IDA7IC8qIFJlc2VydmVkICovCisJCWJ1ZmZlclsxMF0gPSAwOyAvKiBSZXNlcnZlZCAqLworCQlidWZmZXJbMTFdID0gMDsgLyogUmVzZXJ2ZWQgKi8KKworCQlpZiAoY29weV9mcm9tX3VzZXIoJmJ1ZmZlclsxMl0sIGJ1ZiArIGRvbmUsIHRoaXNfcGFydCkpIHsKKwkJCXJldHZhbCA9IC1FRkFVTFQ7CisJCQlnb3RvIGV4aXQ7CisJCX0KKworCQluX2J5dGVzID0gMTIgKyB0aGlzX3BhcnQ7CisJCWlmICh0aGlzX3BhcnQgJSA0KQorCQkJbl9ieXRlcyArPSA0IC0gdGhpc19wYXJ0ICUgNDsKKwkJCWZvciAobiA9IDEyICsgdGhpc19wYXJ0OyBuIDwgbl9ieXRlczsgbisrKQorCQkJCWJ1ZmZlcltuXSA9IDA7CisKKwkJcmV0dmFsID0gdXNiX2J1bGtfbXNnKGRhdGEtPnVzYl9kZXYsCisJCQkJICAgICAgdXNiX3NuZGJ1bGtwaXBlKGRhdGEtPnVzYl9kZXYsCisJCQkJCQkgICAgICBkYXRhLT5idWxrX291dCksCisJCQkJICAgICAgYnVmZmVyLCBuX2J5dGVzLCAmYWN0dWFsLCBVU0JUTUNfVElNRU9VVCk7CisKKwkJZGF0YS0+YlRhZ19sYXN0X3dyaXRlID0gZGF0YS0+YlRhZzsKKwkJZGF0YS0+YlRhZysrOworCisJCWlmICghZGF0YS0+YlRhZykKKwkJCWRhdGEtPmJUYWcrKzsKKworCQlpZiAocmV0dmFsIDwgMCkgeworCQkJZGV2X2VycigmZGF0YS0+aW50Zi0+ZGV2LAorCQkJCSJVbmFibGUgdG8gc2VuZCBkYXRhLCBlcnJvciAlZFxuIiwgcmV0dmFsKTsKKwkJCWlmIChkYXRhLT5hdXRvX2Fib3J0KQorCQkJCXVzYnRtY19pb2N0bF9hYm9ydF9idWxrX291dChkYXRhKTsKKwkJCWdvdG8gZXhpdDsKKwkJfQorCisJCXJlbWFpbmluZyAtPSB0aGlzX3BhcnQ7CisJCWRvbmUgKz0gdGhpc19wYXJ0OworCX0KKworCXJldHZhbCA9IGNvdW50OworZXhpdDoKKwltdXRleF91bmxvY2soJmRhdGEtPmlvX211dGV4KTsKKwlrZnJlZShidWZmZXIpOworCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyBpbnQgdXNidG1jX2lvY3RsX2NsZWFyKHN0cnVjdCB1c2J0bWNfZGV2aWNlX2RhdGEgKmRhdGEpCit7CisJc3RydWN0IHVzYl9ob3N0X2ludGVyZmFjZSAqY3VycmVudF9zZXR0aW5nOworCXN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqZGVzYzsKKwlzdHJ1Y3QgZGV2aWNlICpkZXY7CisJdTggKmJ1ZmZlcjsKKwlpbnQgcnY7CisJaW50IG47CisJaW50IGFjdHVhbDsKKwlpbnQgbWF4X3NpemU7CisKKwlkZXYgPSAmZGF0YS0+aW50Zi0+ZGV2OworCisJZGV2X2RiZyhkZXYsICJTZW5kaW5nIElOSVRJQVRFX0NMRUFSIHJlcXVlc3RcbiIpOworCisJYnVmZmVyID0ga21hbGxvYyhVU0JUTUNfU0laRV9JT0JVRkZFUiwgR0ZQX0tFUk5FTCk7CisJaWYgKCFidWZmZXIpCisJCXJldHVybiAtRU5PTUVNOworCisJcnYgPSB1c2JfY29udHJvbF9tc2coZGF0YS0+dXNiX2RldiwKKwkJCSAgICAgdXNiX3JjdmN0cmxwaXBlKGRhdGEtPnVzYl9kZXYsIDApLAorCQkJICAgICBVU0JUTUNfUkVRVUVTVF9JTklUSUFURV9DTEVBUiwKKwkJCSAgICAgVVNCX0RJUl9JTiB8IFVTQl9UWVBFX0NMQVNTIHwgVVNCX1JFQ0lQX0lOVEVSRkFDRSwKKwkJCSAgICAgMCwgMCwgYnVmZmVyLCAxLCBVU0JUTUNfVElNRU9VVCk7CisJaWYgKHJ2IDwgMCkgeworCQlkZXZfZXJyKGRldiwgInVzYl9jb250cm9sX21zZyByZXR1cm5lZCAlZFxuIiwgcnYpOworCQlnb3RvIGV4aXQ7CisJfQorCisJZGV2X2RiZyhkZXYsICJJTklUSUFURV9DTEVBUiByZXR1cm5lZCAleFxuIiwgYnVmZmVyWzBdKTsKKworCWlmIChidWZmZXJbMF0gIT0gVVNCVE1DX1NUQVRVU19TVUNDRVNTKSB7CisJCWRldl9lcnIoZGV2LCAiSU5JVElBVEVfQ0xFQVIgcmV0dXJuZWQgJXhcbiIsIGJ1ZmZlclswXSk7CisJCXJ2ID0gLUVQRVJNOworCQlnb3RvIGV4aXQ7CisJfQorCisJbWF4X3NpemUgPSAwOworCWN1cnJlbnRfc2V0dGluZyA9IGRhdGEtPmludGYtPmN1cl9hbHRzZXR0aW5nOworCWZvciAobiA9IDA7IG4gPCBjdXJyZW50X3NldHRpbmctPmRlc2MuYk51bUVuZHBvaW50czsgbisrKSB7CisJCWRlc2MgPSAmY3VycmVudF9zZXR0aW5nLT5lbmRwb2ludFtuXS5kZXNjOworCQlpZiAoZGVzYy0+YkVuZHBvaW50QWRkcmVzcyA9PSBkYXRhLT5idWxrX2luKQorCQkJbWF4X3NpemUgPSBsZTE2X3RvX2NwdShkZXNjLT53TWF4UGFja2V0U2l6ZSk7CisJfQorCisJaWYgKG1heF9zaXplID09IDApIHsKKwkJZGV2X2VycihkZXYsICJDb3VsZG4ndCBnZXQgd01heFBhY2tldFNpemVcbiIpOworCQlydiA9IC1FUEVSTTsKKwkJZ290byBleGl0OworCX0KKworCWRldl9kYmcoZGV2LCAid01heFBhY2tldFNpemUgaXMgJWRcbiIsIG1heF9zaXplKTsKKworCW4gPSAwOworCit1c2J0bWNfY2xlYXJfY2hlY2tfc3RhdHVzOgorCisJZGV2X2RiZyhkZXYsICJTZW5kaW5nIENIRUNLX0NMRUFSX1NUQVRVUyByZXF1ZXN0XG4iKTsKKworCXJ2ID0gdXNiX2NvbnRyb2xfbXNnKGRhdGEtPnVzYl9kZXYsCisJCQkgICAgIHVzYl9yY3ZjdHJscGlwZShkYXRhLT51c2JfZGV2LCAwKSwKKwkJCSAgICAgVVNCVE1DX1JFUVVFU1RfQ0hFQ0tfQ0xFQVJfU1RBVFVTLAorCQkJICAgICBVU0JfRElSX0lOIHwgVVNCX1RZUEVfQ0xBU1MgfCBVU0JfUkVDSVBfSU5URVJGQUNFLAorCQkJICAgICAwLCAwLCBidWZmZXIsIDIsIFVTQlRNQ19USU1FT1VUKTsKKwlpZiAocnYgPCAwKSB7CisJCWRldl9lcnIoZGV2LCAidXNiX2NvbnRyb2xfbXNnIHJldHVybmVkICVkXG4iLCBydik7CisJCWdvdG8gZXhpdDsKKwl9CisKKwlkZXZfZGJnKGRldiwgIkNIRUNLX0NMRUFSX1NUQVRVUyByZXR1cm5lZCAleFxuIiwgYnVmZmVyWzBdKTsKKworCWlmIChidWZmZXJbMF0gPT0gVVNCVE1DX1NUQVRVU19TVUNDRVNTKQorCQlnb3RvIHVzYnRtY19jbGVhcl9idWxrX291dF9oYWx0OworCisJaWYgKGJ1ZmZlclswXSAhPSBVU0JUTUNfU1RBVFVTX1BFTkRJTkcpIHsKKwkJZGV2X2VycihkZXYsICJDSEVDS19DTEVBUl9TVEFUVVMgcmV0dXJuZWQgJXhcbiIsIGJ1ZmZlclswXSk7CisJCXJ2ID0gLUVQRVJNOworCQlnb3RvIGV4aXQ7CisJfQorCisJaWYgKGJ1ZmZlclsxXSA9PSAxKQorCQlkbyB7CisJCQlkZXZfZGJnKGRldiwgIlJlYWRpbmcgZnJvbSBidWxrIGluIEVQXG4iKTsKKworCQkJcnYgPSB1c2JfYnVsa19tc2coZGF0YS0+dXNiX2RldiwKKwkJCQkJICB1c2JfcmN2YnVsa3BpcGUoZGF0YS0+dXNiX2RldiwKKwkJCQkJCQkgIGRhdGEtPmJ1bGtfaW4pLAorCQkJCQkgIGJ1ZmZlciwgVVNCVE1DX1NJWkVfSU9CVUZGRVIsCisJCQkJCSAgJmFjdHVhbCwgVVNCVE1DX1RJTUVPVVQpOworCQkJbisrOworCisJCQlpZiAocnYgPCAwKSB7CisJCQkJZGV2X2VycihkZXYsICJ1c2JfY29udHJvbF9tc2cgcmV0dXJuZWQgJWRcbiIsCisJCQkJCXJ2KTsKKwkJCQlnb3RvIGV4aXQ7CisJCQl9CisJCX0gd2hpbGUgKChhY3R1YWwgPT0gbWF4X3NpemUpICYmCisJCQkgIChuIDwgVVNCVE1DX01BWF9SRUFEU19UT19DTEVBUl9CVUxLX0lOKSk7CisKKwlpZiAoYWN0dWFsID09IG1heF9zaXplKSB7CisJCWRldl9lcnIoZGV2LCAiQ291bGRuJ3QgY2xlYXIgZGV2aWNlIGJ1ZmZlciB3aXRoaW4gJWQgY3ljbGVzXG4iLAorCQkJVVNCVE1DX01BWF9SRUFEU19UT19DTEVBUl9CVUxLX0lOKTsKKwkJcnYgPSAtRVBFUk07CisJCWdvdG8gZXhpdDsKKwl9CisKKwlnb3RvIHVzYnRtY19jbGVhcl9jaGVja19zdGF0dXM7CisKK3VzYnRtY19jbGVhcl9idWxrX291dF9oYWx0OgorCisJcnYgPSB1c2JfY29udHJvbF9tc2coZGF0YS0+dXNiX2RldiwKKwkJCSAgICAgdXNiX3NuZGN0cmxwaXBlKGRhdGEtPnVzYl9kZXYsIDApLAorCQkJICAgICBVU0JfUkVRX0NMRUFSX0ZFQVRVUkUsCisJCQkgICAgIFVTQl9ESVJfT1VUIHwgVVNCX1RZUEVfU1RBTkRBUkQgfAorCQkJICAgICBVU0JfUkVDSVBfRU5EUE9JTlQsCisJCQkgICAgIFVTQl9FTkRQT0lOVF9IQUxULAorCQkJICAgICBkYXRhLT5idWxrX291dCwgYnVmZmVyLCAwLAorCQkJICAgICBVU0JUTUNfVElNRU9VVCk7CisJaWYgKHJ2IDwgMCkgeworCQlkZXZfZXJyKGRldiwgInVzYl9jb250cm9sX21zZyByZXR1cm5lZCAlZFxuIiwgcnYpOworCQlnb3RvIGV4aXQ7CisJfQorCXJ2ID0gMDsKKworZXhpdDoKKwlrZnJlZShidWZmZXIpOworCXJldHVybiBydjsKK30KKworc3RhdGljIGludCB1c2J0bWNfaW9jdGxfY2xlYXJfb3V0X2hhbHQoc3RydWN0IHVzYnRtY19kZXZpY2VfZGF0YSAqZGF0YSkKK3sKKwl1OCAqYnVmZmVyOworCWludCBydjsKKworCWJ1ZmZlciA9IGttYWxsb2MoMiwgR0ZQX0tFUk5FTCk7CisJaWYgKCFidWZmZXIpCisJCXJldHVybiAtRU5PTUVNOworCisJcnYgPSB1c2JfY29udHJvbF9tc2coZGF0YS0+dXNiX2RldiwKKwkJCSAgICAgdXNiX3NuZGN0cmxwaXBlKGRhdGEtPnVzYl9kZXYsIDApLAorCQkJICAgICBVU0JfUkVRX0NMRUFSX0ZFQVRVUkUsCisJCQkgICAgIFVTQl9ESVJfT1VUIHwgVVNCX1RZUEVfU1RBTkRBUkQgfAorCQkJICAgICBVU0JfUkVDSVBfRU5EUE9JTlQsCisJCQkgICAgIFVTQl9FTkRQT0lOVF9IQUxULCBkYXRhLT5idWxrX291dCwKKwkJCSAgICAgYnVmZmVyLCAwLCBVU0JUTUNfVElNRU9VVCk7CisKKwlpZiAocnYgPCAwKSB7CisJCWRldl9lcnIoJmRhdGEtPnVzYl9kZXYtPmRldiwgInVzYl9jb250cm9sX21zZyByZXR1cm5lZCAlZFxuIiwKKwkJCXJ2KTsKKwkJZ290byBleGl0OworCX0KKwlydiA9IDA7CisKK2V4aXQ6CisJa2ZyZWUoYnVmZmVyKTsKKwlyZXR1cm4gcnY7Cit9CisKK3N0YXRpYyBpbnQgdXNidG1jX2lvY3RsX2NsZWFyX2luX2hhbHQoc3RydWN0IHVzYnRtY19kZXZpY2VfZGF0YSAqZGF0YSkKK3sKKwl1OCAqYnVmZmVyOworCWludCBydjsKKworCWJ1ZmZlciA9IGttYWxsb2MoMiwgR0ZQX0tFUk5FTCk7CisJaWYgKCFidWZmZXIpCisJCXJldHVybiAtRU5PTUVNOworCisJcnYgPSB1c2JfY29udHJvbF9tc2coZGF0YS0+dXNiX2RldiwgdXNiX3NuZGN0cmxwaXBlKGRhdGEtPnVzYl9kZXYsIDApLAorCQkJICAgICBVU0JfUkVRX0NMRUFSX0ZFQVRVUkUsCisJCQkgICAgIFVTQl9ESVJfT1VUIHwgVVNCX1RZUEVfU1RBTkRBUkQgfAorCQkJICAgICBVU0JfUkVDSVBfRU5EUE9JTlQsCisJCQkgICAgIFVTQl9FTkRQT0lOVF9IQUxULCBkYXRhLT5idWxrX2luLCBidWZmZXIsIDAsCisJCQkgICAgIFVTQlRNQ19USU1FT1VUKTsKKworCWlmIChydiA8IDApIHsKKwkJZGV2X2VycigmZGF0YS0+dXNiX2Rldi0+ZGV2LCAidXNiX2NvbnRyb2xfbXNnIHJldHVybmVkICVkXG4iLAorCQkJcnYpOworCQlnb3RvIGV4aXQ7CisJfQorCXJ2ID0gMDsKKworZXhpdDoKKwlrZnJlZShidWZmZXIpOworCXJldHVybiBydjsKK30KKworc3RhdGljIGludCBnZXRfY2FwYWJpbGl0aWVzKHN0cnVjdCB1c2J0bWNfZGV2aWNlX2RhdGEgKmRhdGEpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJmRhdGEtPnVzYl9kZXYtPmRldjsKKwljaGFyICpidWZmZXI7CisJaW50IHJ2OworCisJYnVmZmVyID0ga21hbGxvYygweDE4LCBHRlBfS0VSTkVMKTsKKwlpZiAoIWJ1ZmZlcikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlydiA9IHVzYl9jb250cm9sX21zZyhkYXRhLT51c2JfZGV2LCB1c2JfcmN2Y3RybHBpcGUoZGF0YS0+dXNiX2RldiwgMCksCisJCQkgICAgIFVTQlRNQ19SRVFVRVNUX0dFVF9DQVBBQklMSVRJRVMsCisJCQkgICAgIFVTQl9ESVJfSU4gfCBVU0JfVFlQRV9DTEFTUyB8IFVTQl9SRUNJUF9JTlRFUkZBQ0UsCisJCQkgICAgIDAsIDAsIGJ1ZmZlciwgMHgxOCwgVVNCVE1DX1RJTUVPVVQpOworCWlmIChydiA8IDApIHsKKwkJZGV2X2VycihkZXYsICJ1c2JfY29udHJvbF9tc2cgcmV0dXJuZWQgJWRcbiIsIHJ2KTsKKwkJcmV0dXJuIHJ2OworCX0KKworCWRldl9kYmcoZGV2LCAiR0VUX0NBUEFCSUxJVElFUyByZXR1cm5lZCAleFxuIiwgYnVmZmVyWzBdKTsKKwlkZXZfZGJnKGRldiwgIkludGVyZmFjZSBjYXBhYmlsaXRpZXMgYXJlICV4XG4iLCBidWZmZXJbNF0pOworCWRldl9kYmcoZGV2LCAiRGV2aWNlIGNhcGFiaWxpdGllcyBhcmUgJXhcbiIsIGJ1ZmZlcls1XSk7CisJZGV2X2RiZyhkZXYsICJVU0I0ODggaW50ZXJmYWNlIGNhcGFiaWxpdGllcyBhcmUgJXhcbiIsIGJ1ZmZlclsxNF0pOworCWRldl9kYmcoZGV2LCAiVVNCNDg4IGRldmljZSBjYXBhYmlsaXRpZXMgYXJlICV4XG4iLCBidWZmZXJbMTVdKTsKKwlpZiAoYnVmZmVyWzBdICE9IFVTQlRNQ19TVEFUVVNfU1VDQ0VTUykgeworCQlkZXZfZXJyKGRldiwgIkdFVF9DQVBBQklMSVRJRVMgcmV0dXJuZWQgJXhcbiIsIGJ1ZmZlclswXSk7CisJCXJldHVybiAtRVBFUk07CisJfQorCisJZGF0YS0+Y2FwYWJpbGl0aWVzLmludGVyZmFjZV9jYXBhYmlsaXRpZXMgPSBidWZmZXJbNF07CisJZGF0YS0+Y2FwYWJpbGl0aWVzLmRldmljZV9jYXBhYmlsaXRpZXMgPSBidWZmZXJbNV07CisJZGF0YS0+Y2FwYWJpbGl0aWVzLnVzYjQ4OF9pbnRlcmZhY2VfY2FwYWJpbGl0aWVzID0gYnVmZmVyWzE0XTsKKwlkYXRhLT5jYXBhYmlsaXRpZXMudXNiNDg4X2RldmljZV9jYXBhYmlsaXRpZXMgPSBidWZmZXJbMTVdOworCisJa2ZyZWUoYnVmZmVyKTsKKwlyZXR1cm4gMDsKK30KKworI2RlZmluZSBjYXBhYmlsaXR5X2F0dHJpYnV0ZShuYW1lKQkJCQkJXAorc3RhdGljIHNzaXplX3Qgc2hvd18jI25hbWUoc3RydWN0IGRldmljZSAqZGV2LAkJCQlcCisJCQkgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQlcCit7CQkJCQkJCQkJXAorCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmID0gdG9fdXNiX2ludGVyZmFjZShkZXYpOwkJXAorCXN0cnVjdCB1c2J0bWNfZGV2aWNlX2RhdGEgKmRhdGEgPSB1c2JfZ2V0X2ludGZkYXRhKGludGYpOwlcCisJCQkJCQkJCQlcCisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIGRhdGEtPmNhcGFiaWxpdGllcy5uYW1lKTsJCVwKK30JCQkJCQkJCQlcCitzdGF0aWMgREVWSUNFX0FUVFIobmFtZSwgU19JUlVHTywgc2hvd18jI25hbWUsIE5VTEwpCisKK2NhcGFiaWxpdHlfYXR0cmlidXRlKGludGVyZmFjZV9jYXBhYmlsaXRpZXMpOworY2FwYWJpbGl0eV9hdHRyaWJ1dGUoZGV2aWNlX2NhcGFiaWxpdGllcyk7CitjYXBhYmlsaXR5X2F0dHJpYnV0ZSh1c2I0ODhfaW50ZXJmYWNlX2NhcGFiaWxpdGllcyk7CitjYXBhYmlsaXR5X2F0dHJpYnV0ZSh1c2I0ODhfZGV2aWNlX2NhcGFiaWxpdGllcyk7CisKK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpjYXBhYmlsaXR5X2F0dHJzW10gPSB7CisJJmRldl9hdHRyX2ludGVyZmFjZV9jYXBhYmlsaXRpZXMuYXR0ciwKKwkmZGV2X2F0dHJfZGV2aWNlX2NhcGFiaWxpdGllcy5hdHRyLAorCSZkZXZfYXR0cl91c2I0ODhfaW50ZXJmYWNlX2NhcGFiaWxpdGllcy5hdHRyLAorCSZkZXZfYXR0cl91c2I0ODhfZGV2aWNlX2NhcGFiaWxpdGllcy5hdHRyLAorCU5VTEwsCit9OworCitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBjYXBhYmlsaXR5X2F0dHJfZ3JwID0geworCS5hdHRycyA9IGNhcGFiaWxpdHlfYXR0cnMsCit9OworCitzdGF0aWMgc3NpemVfdCBzaG93X1Rlcm1DaGFyKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCSAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiA9IHRvX3VzYl9pbnRlcmZhY2UoZGV2KTsKKwlzdHJ1Y3QgdXNidG1jX2RldmljZV9kYXRhICpkYXRhID0gdXNiX2dldF9pbnRmZGF0YShpbnRmKTsKKworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVjXG4iLCBkYXRhLT5UZXJtQ2hhcik7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHN0b3JlX1Rlcm1DaGFyKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCSAgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJICAgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYgPSB0b191c2JfaW50ZXJmYWNlKGRldik7CisJc3RydWN0IHVzYnRtY19kZXZpY2VfZGF0YSAqZGF0YSA9IHVzYl9nZXRfaW50ZmRhdGEoaW50Zik7CisKKwlpZiAoY291bnQgPCAxKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlkYXRhLT5UZXJtQ2hhciA9IGJ1ZlswXTsKKwlyZXR1cm4gY291bnQ7Cit9CitzdGF0aWMgREVWSUNFX0FUVFIoVGVybUNoYXIsIFNfSVJVR08sIHNob3dfVGVybUNoYXIsIHN0b3JlX1Rlcm1DaGFyKTsKKworI2RlZmluZSBkYXRhX2F0dHJpYnV0ZShuYW1lKQkJCQkJCVwKK3N0YXRpYyBzc2l6ZV90IHNob3dfIyNuYW1lKHN0cnVjdCBkZXZpY2UgKmRldiwJCQkJXAorCQkJICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikJXAorewkJCQkJCQkJCVwKKwlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiA9IHRvX3VzYl9pbnRlcmZhY2UoZGV2KTsJCVwKKwlzdHJ1Y3QgdXNidG1jX2RldmljZV9kYXRhICpkYXRhID0gdXNiX2dldF9pbnRmZGF0YShpbnRmKTsJXAorCQkJCQkJCQkJXAorCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBkYXRhLT5uYW1lKTsJCQlcCit9CQkJCQkJCQkJXAorc3RhdGljIHNzaXplX3Qgc3RvcmVfIyNuYW1lKHN0cnVjdCBkZXZpY2UgKmRldiwJCQkJXAorCQkJICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAkJXAorCQkJICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQkJXAorewkJCQkJCQkJCVwKKwlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiA9IHRvX3VzYl9pbnRlcmZhY2UoZGV2KTsJCVwKKwlzdHJ1Y3QgdXNidG1jX2RldmljZV9kYXRhICpkYXRhID0gdXNiX2dldF9pbnRmZGF0YShpbnRmKTsJXAorCXNzaXplX3QgcmVzdWx0OwkJCQkJCQlcCisJdW5zaWduZWQgdmFsOwkJCQkJCQlcCisJCQkJCQkJCQlcCisJcmVzdWx0ID0gc3NjYW5mKGJ1ZiwgIiV1XG4iLCAmdmFsKTsJCQkJXAorCWlmIChyZXN1bHQgIT0gMSkJCQkJCQlcCisJCXJlc3VsdCA9IC1FSU5WQUw7CQkJCQlcCisJZGF0YS0+bmFtZSA9IHZhbDsJCQkJCQlcCisJaWYgKHJlc3VsdCA8IDApCQkJCQkJCVwKKwkJcmV0dXJuIHJlc3VsdDsJCQkJCQlcCisJZWxzZQkJCQkJCQkJXAorCQlyZXR1cm4gY291bnQ7CQkJCQkJXAorfQkJCQkJCQkJCVwKK3N0YXRpYyBERVZJQ0VfQVRUUihuYW1lLCBTX0lSVUdPLCBzaG93XyMjbmFtZSwgc3RvcmVfIyNuYW1lKQorCitkYXRhX2F0dHJpYnV0ZShUZXJtQ2hhckVuYWJsZWQpOworZGF0YV9hdHRyaWJ1dGUoYXV0b19hYm9ydCk7CisKK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpkYXRhX2F0dHJzW10gPSB7CisJJmRldl9hdHRyX1Rlcm1DaGFyLmF0dHIsCisJJmRldl9hdHRyX1Rlcm1DaGFyRW5hYmxlZC5hdHRyLAorCSZkZXZfYXR0cl9hdXRvX2Fib3J0LmF0dHIsCisJTlVMTCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIGRhdGFfYXR0cl9ncnAgPSB7CisJLmF0dHJzID0gZGF0YV9hdHRycywKK307CisKK3N0YXRpYyBpbnQgdXNidG1jX2lvY3RsX2luZGljYXRvcl9wdWxzZShzdHJ1Y3QgdXNidG1jX2RldmljZV9kYXRhICpkYXRhKQoreworCXN0cnVjdCBkZXZpY2UgKmRldjsKKwl1OCAqYnVmZmVyOworCWludCBydjsKKworCWRldiA9ICZkYXRhLT5pbnRmLT5kZXY7CisKKwlidWZmZXIgPSBrbWFsbG9jKDIsIEdGUF9LRVJORUwpOworCWlmICghYnVmZmVyKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXJ2ID0gdXNiX2NvbnRyb2xfbXNnKGRhdGEtPnVzYl9kZXYsCisJCQkgICAgIHVzYl9yY3ZjdHJscGlwZShkYXRhLT51c2JfZGV2LCAwKSwKKwkJCSAgICAgVVNCVE1DX1JFUVVFU1RfSU5ESUNBVE9SX1BVTFNFLAorCQkJICAgICBVU0JfRElSX0lOIHwgVVNCX1RZUEVfQ0xBU1MgfCBVU0JfUkVDSVBfSU5URVJGQUNFLAorCQkJICAgICAwLCAwLCBidWZmZXIsIDB4MDEsIFVTQlRNQ19USU1FT1VUKTsKKworCWlmIChydiA8IDApIHsKKwkJZGV2X2VycihkZXYsICJ1c2JfY29udHJvbF9tc2cgcmV0dXJuZWQgJWRcbiIsIHJ2KTsKKwkJZ290byBleGl0OworCX0KKworCWRldl9kYmcoZGV2LCAiSU5ESUNBVE9SX1BVTFNFIHJldHVybmVkICV4XG4iLCBidWZmZXJbMF0pOworCisJaWYgKGJ1ZmZlclswXSAhPSBVU0JUTUNfU1RBVFVTX1NVQ0NFU1MpIHsKKwkJZGV2X2VycihkZXYsICJJTkRJQ0FUT1JfUFVMU0UgcmV0dXJuZWQgJXhcbiIsIGJ1ZmZlclswXSk7CisJCXJ2ID0gLUVQRVJNOworCQlnb3RvIGV4aXQ7CisJfQorCXJ2ID0gMDsKKworZXhpdDoKKwlrZnJlZShidWZmZXIpOworCXJldHVybiBydjsKK30KKworc3RhdGljIGxvbmcgdXNidG1jX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKK3sKKwlzdHJ1Y3QgdXNidG1jX2RldmljZV9kYXRhICpkYXRhOworCWludCByZXR2YWwgPSAtRUJBRFJRQzsKKworCWRhdGEgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJbXV0ZXhfbG9jaygmZGF0YS0+aW9fbXV0ZXgpOworCisJc3dpdGNoIChjbWQpIHsKKwljYXNlIFVTQlRNQ19JT0NUTF9DTEVBUl9PVVRfSEFMVDoKKwkJcmV0dmFsID0gdXNidG1jX2lvY3RsX2NsZWFyX291dF9oYWx0KGRhdGEpOworCisJY2FzZSBVU0JUTUNfSU9DVExfQ0xFQVJfSU5fSEFMVDoKKwkJcmV0dmFsID0gdXNidG1jX2lvY3RsX2NsZWFyX2luX2hhbHQoZGF0YSk7CisKKwljYXNlIFVTQlRNQ19JT0NUTF9JTkRJQ0FUT1JfUFVMU0U6CisJCXJldHZhbCA9IHVzYnRtY19pb2N0bF9pbmRpY2F0b3JfcHVsc2UoZGF0YSk7CisKKwljYXNlIFVTQlRNQ19JT0NUTF9DTEVBUjoKKwkJcmV0dmFsID0gdXNidG1jX2lvY3RsX2NsZWFyKGRhdGEpOworCisJY2FzZSBVU0JUTUNfSU9DVExfQUJPUlRfQlVMS19PVVQ6CisJCXJldHZhbCA9IHVzYnRtY19pb2N0bF9hYm9ydF9idWxrX291dChkYXRhKTsKKworCWNhc2UgVVNCVE1DX0lPQ1RMX0FCT1JUX0JVTEtfSU46CisJCXJldHZhbCA9IHVzYnRtY19pb2N0bF9hYm9ydF9idWxrX2luKGRhdGEpOworCX0KKworCW11dGV4X3VubG9jaygmZGF0YS0+aW9fbXV0ZXgpOworCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGZvcHMgPSB7CisJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCS5yZWFkCQk9IHVzYnRtY19yZWFkLAorCS53cml0ZQkJPSB1c2J0bWNfd3JpdGUsCisJLm9wZW4JCT0gdXNidG1jX29wZW4sCisJLnJlbGVhc2UJPSB1c2J0bWNfcmVsZWFzZSwKKwkudW5sb2NrZWRfaW9jdGwJPSB1c2J0bWNfaW9jdGwsCit9OworCitzdGF0aWMgc3RydWN0IHVzYl9jbGFzc19kcml2ZXIgdXNidG1jX2NsYXNzID0geworCS5uYW1lID0JCSJ1c2J0bWMlZCIsCisJLmZvcHMgPQkJJmZvcHMsCisJLm1pbm9yX2Jhc2UgPQlVU0JUTUNfTUlOT1JfQkFTRSwKK307CisKKworc3RhdGljIGludCB1c2J0bWNfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsCisJCQljb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCit7CisJc3RydWN0IHVzYnRtY19kZXZpY2VfZGF0YSAqZGF0YTsKKwlzdHJ1Y3QgdXNiX2hvc3RfaW50ZXJmYWNlICppZmFjZV9kZXNjOworCXN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqZW5kcG9pbnQ7CisJaW50IG47CisJaW50IHJldGNvZGU7CisKKwlkZXZfZGJnKCZpbnRmLT5kZXYsICIlcyBjYWxsZWRcbiIsIF9fZnVuY19fKTsKKworCWRhdGEgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgdXNidG1jX2RldmljZV9kYXRhKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFkYXRhKSB7CisJCWRldl9lcnIoJmludGYtPmRldiwgIlVuYWJsZSB0byBhbGxvY2F0ZSBrZXJuZWwgbWVtb3J5XG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJZGF0YS0+aW50ZiA9IGludGY7CisJZGF0YS0+aWQgPSBpZDsKKwlkYXRhLT51c2JfZGV2ID0gdXNiX2dldF9kZXYoaW50ZXJmYWNlX3RvX3VzYmRldihpbnRmKSk7CisJdXNiX3NldF9pbnRmZGF0YShpbnRmLCBkYXRhKTsKKwlrcmVmX2luaXQoJmRhdGEtPmtyZWYpOworCW11dGV4X2luaXQoJmRhdGEtPmlvX211dGV4KTsKKworCS8qIEluaXRpYWxpemUgVVNCVE1DIGJUYWcgYW5kIG90aGVyIGZpZWxkcyAqLworCWRhdGEtPmJUYWcJPSAxOworCWRhdGEtPlRlcm1DaGFyRW5hYmxlZCA9IDA7CisJZGF0YS0+VGVybUNoYXIgPSAnXG4nOworCisJLyogVVNCVE1DIGRldmljZXMgaGF2ZSBvbmx5IG9uZSBzZXR0aW5nLCBzbyB1c2UgdGhhdCAqLworCWlmYWNlX2Rlc2MgPSBkYXRhLT5pbnRmLT5jdXJfYWx0c2V0dGluZzsKKworCS8qIEZpbmQgYnVsayBpbiBlbmRwb2ludCAqLworCWZvciAobiA9IDA7IG4gPCBpZmFjZV9kZXNjLT5kZXNjLmJOdW1FbmRwb2ludHM7IG4rKykgeworCQllbmRwb2ludCA9ICZpZmFjZV9kZXNjLT5lbmRwb2ludFtuXS5kZXNjOworCisJCWlmICh1c2JfZW5kcG9pbnRfaXNfYnVsa19pbihlbmRwb2ludCkpIHsKKwkJCWRhdGEtPmJ1bGtfaW4gPSBlbmRwb2ludC0+YkVuZHBvaW50QWRkcmVzczsKKwkJCWRldl9kYmcoJmludGYtPmRldiwgIkZvdW5kIGJ1bGsgaW4gZW5kcG9pbnQgYXQgJXVcbiIsCisJCQkJZGF0YS0+YnVsa19pbik7CisJCQlicmVhazsKKwkJfQorCX0KKworCS8qIEZpbmQgYnVsayBvdXQgZW5kcG9pbnQgKi8KKwlmb3IgKG4gPSAwOyBuIDwgaWZhY2VfZGVzYy0+ZGVzYy5iTnVtRW5kcG9pbnRzOyBuKyspIHsKKwkJZW5kcG9pbnQgPSAmaWZhY2VfZGVzYy0+ZW5kcG9pbnRbbl0uZGVzYzsKKworCQlpZiAodXNiX2VuZHBvaW50X2lzX2J1bGtfb3V0KGVuZHBvaW50KSkgeworCQkJZGF0YS0+YnVsa19vdXQgPSBlbmRwb2ludC0+YkVuZHBvaW50QWRkcmVzczsKKwkJCWRldl9kYmcoJmludGYtPmRldiwgIkZvdW5kIEJ1bGsgb3V0IGVuZHBvaW50IGF0ICV1XG4iLAorCQkJCWRhdGEtPmJ1bGtfb3V0KTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJcmV0Y29kZSA9IGdldF9jYXBhYmlsaXRpZXMoZGF0YSk7CisJaWYgKHJldGNvZGUpCisJCWRldl9lcnIoJmludGYtPmRldiwgImNhbid0IHJlYWQgY2FwYWJpbGl0aWVzXG4iKTsKKwllbHNlCisJCXJldGNvZGUgPSBzeXNmc19jcmVhdGVfZ3JvdXAoJmludGYtPmRldi5rb2JqLAorCQkJCQkgICAgICZjYXBhYmlsaXR5X2F0dHJfZ3JwKTsKKworCXJldGNvZGUgPSBzeXNmc19jcmVhdGVfZ3JvdXAoJmludGYtPmRldi5rb2JqLCAmZGF0YV9hdHRyX2dycCk7CisKKwlyZXRjb2RlID0gdXNiX3JlZ2lzdGVyX2RldihpbnRmLCAmdXNidG1jX2NsYXNzKTsKKwlpZiAocmV0Y29kZSkgeworCQlkZXZfZXJyKCZpbnRmLT5kZXYsICJOb3QgYWJsZSB0byBnZXQgYSBtaW5vciIKKwkJCSIgKGJhc2UgJXUsIHNsaWNlIGRlZmF1bHQpOiAlZFxuIiwgVVNCVE1DX01JTk9SX0JBU0UsCisJCQlyZXRjb2RlKTsKKwkJZ290byBlcnJvcl9yZWdpc3RlcjsKKwl9CisJZGV2X2RiZygmaW50Zi0+ZGV2LCAiVXNpbmcgbWlub3IgbnVtYmVyICVkXG4iLCBpbnRmLT5taW5vcik7CisKKwlyZXR1cm4gMDsKKworZXJyb3JfcmVnaXN0ZXI6CisJc3lzZnNfcmVtb3ZlX2dyb3VwKCZpbnRmLT5kZXYua29iaiwgJmNhcGFiaWxpdHlfYXR0cl9ncnApOworCXN5c2ZzX3JlbW92ZV9ncm91cCgmaW50Zi0+ZGV2LmtvYmosICZkYXRhX2F0dHJfZ3JwKTsKKwlrcmVmX3B1dCgmZGF0YS0+a3JlZiwgdXNidG1jX2RlbGV0ZSk7CisJcmV0dXJuIHJldGNvZGU7Cit9CisKK3N0YXRpYyB2b2lkIHVzYnRtY19kaXNjb25uZWN0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKQoreworCXN0cnVjdCB1c2J0bWNfZGV2aWNlX2RhdGEgKmRhdGE7CisKKwlkZXZfZGJnKCZpbnRmLT5kZXYsICJ1c2J0bWNfZGlzY29ubmVjdCBjYWxsZWRcbiIpOworCisJZGF0YSA9IHVzYl9nZXRfaW50ZmRhdGEoaW50Zik7CisJdXNiX2RlcmVnaXN0ZXJfZGV2KGludGYsICZ1c2J0bWNfY2xhc3MpOworCXN5c2ZzX3JlbW92ZV9ncm91cCgmaW50Zi0+ZGV2LmtvYmosICZjYXBhYmlsaXR5X2F0dHJfZ3JwKTsKKwlzeXNmc19yZW1vdmVfZ3JvdXAoJmludGYtPmRldi5rb2JqLCAmZGF0YV9hdHRyX2dycCk7CisJa3JlZl9wdXQoJmRhdGEtPmtyZWYsIHVzYnRtY19kZWxldGUpOworfQorCitzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgdXNidG1jX2RyaXZlciA9IHsKKwkubmFtZQkJPSAidXNidG1jIiwKKwkuaWRfdGFibGUJPSB1c2J0bWNfZGV2aWNlcywKKwkucHJvYmUJCT0gdXNidG1jX3Byb2JlLAorCS5kaXNjb25uZWN0CT0gdXNidG1jX2Rpc2Nvbm5lY3QKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHVzYnRtY19pbml0KHZvaWQpCit7CisJaW50IHJldGNvZGU7CisKKwlyZXRjb2RlID0gdXNiX3JlZ2lzdGVyKCZ1c2J0bWNfZHJpdmVyKTsKKwlpZiAocmV0Y29kZSkKKwkJcHJpbnRrKEtFUk5fRVJSIEtCVUlMRF9NT0ROQU1FIjogVW5hYmxlIHRvIHJlZ2lzdGVyIGRyaXZlclxuIik7CisJcmV0dXJuIHJldGNvZGU7Cit9Cittb2R1bGVfaW5pdCh1c2J0bWNfaW5pdCk7CisKK3N0YXRpYyB2b2lkIF9fZXhpdCB1c2J0bWNfZXhpdCh2b2lkKQoreworCXVzYl9kZXJlZ2lzdGVyKCZ1c2J0bWNfZHJpdmVyKTsKK30KK21vZHVsZV9leGl0KHVzYnRtY19leGl0KTsKKworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY29yZS9LY29uZmlnIGIvZHJpdmVycy91c2IvY29yZS9LY29uZmlnCmluZGV4IGNjOWYzOTcuLmUxNzU5ZDE3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9jb3JlL0tjb25maWcKKysrIGIvZHJpdmVycy91c2IvY29yZS9LY29uZmlnCkBAIC0xMzQsNSArMTM0LDUgQEAKIAkgIElmIHlvdSBzYXkgWSBoZXJlLCB0aGVuIExpbnV4IHdpbGwgcmVmdXNlIHRvIGVudW1lcmF0ZQogCSAgZXh0ZXJuYWwgaHVicy4gIE9URyBob3N0cyBhcmUgYWxsb3dlZCB0byByZWR1Y2UgaGFyZHdhcmUKIAkgIGFuZCBzb2Z0d2FyZSBjb3N0cyBieSBub3Qgc3VwcG9ydGluZyBleHRlcm5hbCBodWJzLiAgU28KLQkgIGFyZSAiRW1lZGRlZCBIb3N0cyIgdGhhdCBkb24ndCBvZmZlciBPVEcgc3VwcG9ydC4KKwkgIGFyZSAiRW1iZWRkZWQgSG9zdHMiIHRoYXQgZG9uJ3Qgb2ZmZXIgT1RHIHN1cHBvcnQuCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NvcmUvZGV2aW8uYyBiL2RyaXZlcnMvdXNiL2NvcmUvZGV2aW8uYwppbmRleCAyMDI5MGM1Li4yYmNjZWZlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9jb3JlL2RldmlvLmMKKysrIGIvZHJpdmVycy91c2IvY29yZS9kZXZpby5jCkBAIC00MTMsNyArNDEzLDggQEAKIAlpZiAobGlrZWx5KGlmbnVtIDwgOCpzaXplb2YocHMtPmlmY2xhaW1lZCkpKQogCQljbGVhcl9iaXQoaWZudW0sICZwcy0+aWZjbGFpbWVkKTsKIAllbHNlCi0JCXdhcm4oImludGVyZmFjZSBudW1iZXIgJXUgb3V0IG9mIHJhbmdlIiwgaWZudW0pOworCQlkZXZfd2FybigmaW50Zi0+ZGV2LCAiaW50ZXJmYWNlIG51bWJlciAldSBvdXQgb2YgcmFuZ2VcbiIsCisJCQkgaWZudW0pOwogCiAJdXNiX3NldF9pbnRmZGF0YShpbnRmLCBOVUxMKTsKIApAQCAtNjI0LDYgKzYyNSw4IEBACiAJc21wX3dtYigpOwogCWxpc3RfYWRkX3RhaWwoJnBzLT5saXN0LCAmZGV2LT5maWxlbGlzdCk7CiAJZmlsZS0+cHJpdmF0ZV9kYXRhID0gcHM7CisJc25vb3AoJmRldi0+ZGV2LCAib3BlbmVkIGJ5IHByb2Nlc3MgJWQ6ICVzXG4iLCB0YXNrX3BpZF9ucihjdXJyZW50KSwKKwkJCWN1cnJlbnQtPmNvbW0pOwogIG91dDoKIAlpZiAocmV0KSB7CiAJCWtmcmVlKHBzKTsKQEAgLTE3MjksOSArMTczMiw5IEBACiB7CiAJc3RydWN0IGRldmljZSAqY2xkZXY7CiAKLQljbGRldiA9IGRldmljZV9jcmVhdGVfZHJ2ZGF0YSh1c2JfY2xhc3NkZXZfY2xhc3MsICZkZXYtPmRldiwKLQkJCQkgICAgICBkZXYtPmRldi5kZXZ0LCBOVUxMLCAidXNiZGV2JWQuJWQiLAotCQkJCSAgICAgIGRldi0+YnVzLT5idXNudW0sIGRldi0+ZGV2bnVtKTsKKwljbGRldiA9IGRldmljZV9jcmVhdGUodXNiX2NsYXNzZGV2X2NsYXNzLCAmZGV2LT5kZXYsIGRldi0+ZGV2LmRldnQsCisJCQkgICAgICBOVUxMLCAidXNiZGV2JWQuJWQiLCBkZXYtPmJ1cy0+YnVzbnVtLAorCQkJICAgICAgZGV2LT5kZXZudW0pOwogCWlmIChJU19FUlIoY2xkZXYpKQogCQlyZXR1cm4gUFRSX0VSUihjbGRldik7CiAJZGV2LT51c2JfY2xhc3NkZXYgPSBjbGRldjsKQEAgLTE3NzQsMTkgKzE3NzcsMjAgQEAKIAlyZXR2YWwgPSByZWdpc3Rlcl9jaHJkZXZfcmVnaW9uKFVTQl9ERVZJQ0VfREVWLCBVU0JfREVWSUNFX01BWCwKIAkJCQkJInVzYl9kZXZpY2UiKTsKIAlpZiAocmV0dmFsKSB7Ci0JCWVycigidW5hYmxlIHRvIHJlZ2lzdGVyIG1pbm9ycyBmb3IgdXNiX2RldmljZSIpOworCQlwcmludGsoS0VSTl9FUlIgIlVuYWJsZSB0byByZWdpc3RlciBtaW5vcnMgZm9yIHVzYl9kZXZpY2VcbiIpOwogCQlnb3RvIG91dDsKIAl9CiAJY2Rldl9pbml0KCZ1c2JfZGV2aWNlX2NkZXYsICZ1c2JkZXZfZmlsZV9vcGVyYXRpb25zKTsKIAlyZXR2YWwgPSBjZGV2X2FkZCgmdXNiX2RldmljZV9jZGV2LCBVU0JfREVWSUNFX0RFViwgVVNCX0RFVklDRV9NQVgpOwogCWlmIChyZXR2YWwpIHsKLQkJZXJyKCJ1bmFibGUgdG8gZ2V0IHVzYl9kZXZpY2UgbWFqb3IgJWQiLCBVU0JfREVWSUNFX01BSk9SKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJVbmFibGUgdG8gZ2V0IHVzYl9kZXZpY2UgbWFqb3IgJWRcbiIsCisJCSAgICAgICBVU0JfREVWSUNFX01BSk9SKTsKIAkJZ290byBlcnJvcl9jZGV2OwogCX0KICNpZmRlZiBDT05GSUdfVVNCX0RFVklDRV9DTEFTUwogCXVzYl9jbGFzc2Rldl9jbGFzcyA9IGNsYXNzX2NyZWF0ZShUSElTX01PRFVMRSwgInVzYl9kZXZpY2UiKTsKIAlpZiAoSVNfRVJSKHVzYl9jbGFzc2Rldl9jbGFzcykpIHsKLQkJZXJyKCJ1bmFibGUgdG8gcmVnaXN0ZXIgdXNiX2RldmljZSBjbGFzcyIpOworCQlwcmludGsoS0VSTl9FUlIgIlVuYWJsZSB0byByZWdpc3RlciB1c2JfZGV2aWNlIGNsYXNzXG4iKTsKIAkJcmV0dmFsID0gUFRSX0VSUih1c2JfY2xhc3NkZXZfY2xhc3MpOwogCQljZGV2X2RlbCgmdXNiX2RldmljZV9jZGV2KTsKIAkJdXNiX2NsYXNzZGV2X2NsYXNzID0gTlVMTDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NvcmUvZHJpdmVyLmMgYi9kcml2ZXJzL3VzYi9jb3JlL2RyaXZlci5jCmluZGV4IDVhN2ZhNmYuLmU5MzViZTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2NvcmUvZHJpdmVyLmMKKysrIGIvZHJpdmVycy91c2IvY29yZS9kcml2ZXIuYwpAQCAtMTA3MCw3ICsxMDcwLDggQEAKIAkJCQlzdHJ1Y3QgdXNiX2RyaXZlciAqZHJpdmVyOwogCiAJCQkJZHJpdmVyID0gdG9fdXNiX2RyaXZlcihpbnRmLT5kZXYuZHJpdmVyKTsKLQkJCQlpZiAoIWRyaXZlci0+cmVzZXRfcmVzdW1lKQorCQkJCWlmICghZHJpdmVyLT5yZXNldF9yZXN1bWUgfHwKKwkJCQkgICAgaW50Zi0+bmVlZHNfcmVtb3RlX3dha2V1cCkKIAkJCQkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCQkJfQogCQl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jb3JlL2VuZHBvaW50LmMgYi9kcml2ZXJzL3VzYi9jb3JlL2VuZHBvaW50LmMKaW5kZXggMjI5MTIxMy4uOTQ2ZmFlNCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvY29yZS9lbmRwb2ludC5jCisrKyBiL2RyaXZlcnMvdXNiL2NvcmUvZW5kcG9pbnQuYwpAQCAtMTY5LDcgKzE2OSw4IEBACiAJZXJyb3IgPSBhbGxvY19jaHJkZXZfcmVnaW9uKCZkZXYsIDAsIE1BWF9FTkRQT0lOVF9NSU5PUlMsCiAJCQkJICAgICJ1c2JfZW5kcG9pbnQiKTsKIAlpZiAoZXJyb3IpIHsKLQkJZXJyKCJ1bmFibGUgdG8gZ2V0IGEgZHluYW1pYyBtYWpvciBmb3IgdXNiIGVuZHBvaW50cyIpOworCQlwcmludGsoS0VSTl9FUlIgIlVuYWJsZSB0byBnZXQgYSBkeW5hbWljIG1ham9yIGZvciAiCisJCSAgICAgICAidXNiIGVuZHBvaW50cy5cbiIpOwogCQlyZXR1cm4gZXJyb3I7CiAJfQogCXVzYl9lbmRwb2ludF9tYWpvciA9IE1BSk9SKGRldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jb3JlL2ZpbGUuYyBiL2RyaXZlcnMvdXNiL2NvcmUvZmlsZS5jCmluZGV4IDZiMWIyMjkuLjk5N2U2NTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2NvcmUvZmlsZS5jCisrKyBiL2RyaXZlcnMvdXNiL2NvcmUvZmlsZS5jCkBAIC04Niw3ICs4Niw3IEBACiAJdXNiX2NsYXNzLT5jbGFzcyA9IGNsYXNzX2NyZWF0ZShUSElTX01PRFVMRSwgInVzYiIpOwogCWlmIChJU19FUlIodXNiX2NsYXNzLT5jbGFzcykpIHsKIAkJcmVzdWx0ID0gSVNfRVJSKHVzYl9jbGFzcy0+Y2xhc3MpOwotCQllcnIoImNsYXNzX2NyZWF0ZSBmYWlsZWQgZm9yIHVzYiBkZXZpY2VzIik7CisJCXByaW50ayhLRVJOX0VSUiAiY2xhc3NfY3JlYXRlIGZhaWxlZCBmb3IgdXNiIGRldmljZXNcbiIpOwogCQlrZnJlZSh1c2JfY2xhc3MpOwogCQl1c2JfY2xhc3MgPSBOVUxMOwogCX0KQEAgLTExNSw3ICsxMTUsOCBAQAogCiAJZXJyb3IgPSByZWdpc3Rlcl9jaHJkZXYoVVNCX01BSk9SLCAidXNiIiwgJnVzYl9mb3BzKTsKIAlpZiAoZXJyb3IpCi0JCWVycigidW5hYmxlIHRvIGdldCBtYWpvciAlZCBmb3IgdXNiIGRldmljZXMiLCBVU0JfTUFKT1IpOworCQlwcmludGsoS0VSTl9FUlIgIlVuYWJsZSB0byBnZXQgbWFqb3IgJWQgZm9yIHVzYiBkZXZpY2VzXG4iLAorCQkgICAgICAgVVNCX01BSk9SKTsKIAogCXJldHVybiBlcnJvcjsKIH0KQEAgLTE5Niw5ICsxOTcsOSBAQAogCQkrK3RlbXA7CiAJZWxzZQogCQl0ZW1wID0gbmFtZTsKLQlpbnRmLT51c2JfZGV2ID0gZGV2aWNlX2NyZWF0ZV9kcnZkYXRhKHVzYl9jbGFzcy0+Y2xhc3MsICZpbnRmLT5kZXYsCi0JCQkJCSAgICAgIE1LREVWKFVTQl9NQUpPUiwgbWlub3IpLCBOVUxMLAotCQkJCQkgICAgICAiJXMiLCB0ZW1wKTsKKwlpbnRmLT51c2JfZGV2ID0gZGV2aWNlX2NyZWF0ZSh1c2JfY2xhc3MtPmNsYXNzLCAmaW50Zi0+ZGV2LAorCQkJCSAgICAgIE1LREVWKFVTQl9NQUpPUiwgbWlub3IpLCBOVUxMLAorCQkJCSAgICAgICIlcyIsIHRlbXApOwogCWlmIChJU19FUlIoaW50Zi0+dXNiX2RldikpIHsKIAkJZG93bl93cml0ZSgmbWlub3JfcndzZW0pOwogCQl1c2JfbWlub3JzW2ludGYtPm1pbm9yXSA9IE5VTEw7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jb3JlL2hjZC5jIGIvZHJpdmVycy91c2IvY29yZS9oY2QuYwppbmRleCA4YWIzODlkLi5mYzkwMThlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9jb3JlL2hjZC5jCisrKyBiL2RyaXZlcnMvdXNiL2NvcmUvaGNkLmMKQEAgLTgxLDYgKzgxLDEwIEBACiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKKy8qIEtlZXAgdHJhY2sgb2Ygd2hpY2ggaG9zdCBjb250cm9sbGVyIGRyaXZlcnMgYXJlIGxvYWRlZCAqLwordW5zaWduZWQgbG9uZyB1c2JfaGNkc19sb2FkZWQ7CitFWFBPUlRfU1lNQk9MX0dQTCh1c2JfaGNkc19sb2FkZWQpOworCiAvKiBob3N0IGNvbnRyb2xsZXJzIHdlIG1hbmFnZSAqLwogTElTVF9IRUFEICh1c2JfYnVzX2xpc3QpOwogRVhQT1JUX1NZTUJPTF9HUEwgKHVzYl9idXNfbGlzdCk7CkBAIC04MTgsOSArODIyLDggQEAKIAlzZXRfYml0IChidXNudW0sIGJ1c21hcC5idXNtYXApOwogCWJ1cy0+YnVzbnVtID0gYnVzbnVtOwogCi0JYnVzLT5kZXYgPSBkZXZpY2VfY3JlYXRlX2RydmRhdGEodXNiX2hvc3RfY2xhc3MsIGJ1cy0+Y29udHJvbGxlciwKLQkJCQkJIE1LREVWKDAsIDApLCBidXMsCi0JCQkJCSAidXNiX2hvc3QlZCIsIGJ1c251bSk7CisJYnVzLT5kZXYgPSBkZXZpY2VfY3JlYXRlKHVzYl9ob3N0X2NsYXNzLCBidXMtPmNvbnRyb2xsZXIsIE1LREVWKDAsIDApLAorCQkJCSBidXMsICJ1c2JfaG9zdCVkIiwgYnVzbnVtKTsKIAlyZXN1bHQgPSBQVFJfRVJSKGJ1cy0+ZGV2KTsKIAlpZiAoSVNfRVJSKGJ1cy0+ZGV2KSkKIAkJZ290byBlcnJvcl9jcmVhdGVfY2xhc3NfZGV2OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY29yZS9oY2QuaCBiL2RyaXZlcnMvdXNiL2NvcmUvaGNkLmgKaW5kZXggZTcxMGNlMC4uMmRjZGU2MSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvY29yZS9oY2QuaAorKysgYi9kcml2ZXJzL3VzYi9jb3JlL2hjZC5oCkBAIC00ODIsNCArNDgyLDEwIEBACiAgKi8KIGV4dGVybiBzdHJ1Y3Qgcndfc2VtYXBob3JlIGVoY2lfY2ZfcG9ydF9yZXNldF9yd3NlbTsKIAorLyogS2VlcCB0cmFjayBvZiB3aGljaCBob3N0IGNvbnRyb2xsZXIgZHJpdmVycyBhcmUgbG9hZGVkICovCisjZGVmaW5lIFVTQl9VSENJX0xPQURFRAkJMAorI2RlZmluZSBVU0JfT0hDSV9MT0FERUQJCTEKKyNkZWZpbmUgVVNCX0VIQ0lfTE9BREVECQkyCitleHRlcm4gdW5zaWduZWQgbG9uZyB1c2JfaGNkc19sb2FkZWQ7CisKICNlbmRpZiAvKiBfX0tFUk5FTF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jb3JlL2h1Yi5jIGIvZHJpdmVycy91c2IvY29yZS9odWIuYwppbmRleCBkOTk5NjM4Li5kNzNjZTI2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9jb3JlL2h1Yi5jCisrKyBiL2RyaXZlcnMvdXNiL2NvcmUvaHViLmMKQEAgLTc3LDYgKzc3LDcgQEAKIAl1bnNpZ25lZAkJaGFzX2luZGljYXRvcnM6MTsKIAl1OAkJCWluZGljYXRvcltVU0JfTUFYQ0hJTERSRU5dOwogCXN0cnVjdCBkZWxheWVkX3dvcmsJbGVkczsKKwlzdHJ1Y3QgZGVsYXllZF93b3JrCWluaXRfd29yazsKIH07CiAKIApAQCAtMTAwLDYgKzEwMSwxNSBAQAogTU9EVUxFX1BBUk1fREVTQyAoYmxpbmtlbmxpZ2h0cywgInRydWUgdG8gY3ljbGUgbGVkcyBvbiBodWJzIik7CiAKIC8qCisgKiBEZXZpY2UgU0FUQTgwMDAgRlcxLjAgZnJvbSBEQVRBU1QwUiBUZWNobm9sb2d5IENvcnAgcmVxdWlyZXMgYWJvdXQKKyAqIDEwIHNlY29uZHMgdG8gc2VuZCByZXBseSBmb3IgdGhlIGluaXRpYWwgNjQtYnl0ZSBkZXNjcmlwdG9yIHJlcXVlc3QuCisgKi8KKy8qIGRlZmluZSBpbml0aWFsIDY0LWJ5dGUgZGVzY3JpcHRvciByZXF1ZXN0IHRpbWVvdXQgaW4gbWlsbGlzZWNvbmRzICovCitzdGF0aWMgaW50IGluaXRpYWxfZGVzY3JpcHRvcl90aW1lb3V0ID0gVVNCX0NUUkxfR0VUX1RJTUVPVVQ7Cittb2R1bGVfcGFyYW0oaW5pdGlhbF9kZXNjcmlwdG9yX3RpbWVvdXQsIGludCwgU19JUlVHT3xTX0lXVVNSKTsKK01PRFVMRV9QQVJNX0RFU0MoaW5pdGlhbF9kZXNjcmlwdG9yX3RpbWVvdXQsICJpbml0aWFsIDY0LWJ5dGUgZGVzY3JpcHRvciByZXF1ZXN0IHRpbWVvdXQgaW4gbWlsbGlzZWNvbmRzIChkZWZhdWx0IDUwMDAgLSA1LjAgc2Vjb25kcykiKTsKKworLyoKICAqIEFzIG9mIDIuNi4xMCB3ZSBpbnRyb2R1Y2UgYSBuZXcgVVNCIGRldmljZSBpbml0aWFsaXphdGlvbiBzY2hlbWUgd2hpY2gKICAqIGNsb3NlbHkgcmVzZW1ibGVzIHRoZSB3YXkgV2luZG93cyB3b3Jrcy4gIEhvcGVmdWxseSBpdCB3aWxsIGJlIGNvbXBhdGlibGUKICAqIHdpdGggYSB3aWRlciByYW5nZSBvZiBkZXZpY2VzIHRoYW4gdGhlIG9sZCBzY2hlbWUuICBIb3dldmVyIHNvbWUgcHJldmlvdXNseQpAQCAtNTE1LDEwICs1MjUsMTQgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHVzYl9odWJfdHRfY2xlYXJfYnVmZmVyKTsKIAotc3RhdGljIHZvaWQgaHViX3Bvd2VyX29uKHN0cnVjdCB1c2JfaHViICpodWIpCisvKiBJZiBkb19kZWxheSBpcyBmYWxzZSwgcmV0dXJuIHRoZSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIHRoZSBjYWxsZXIKKyAqIG5lZWRzIHRvIGRlbGF5LgorICovCitzdGF0aWMgdW5zaWduZWQgaHViX3Bvd2VyX29uKHN0cnVjdCB1c2JfaHViICpodWIsIGJvb2wgZG9fZGVsYXkpCiB7CiAJaW50IHBvcnQxOwogCXVuc2lnbmVkIHBnb29kX2RlbGF5ID0gaHViLT5kZXNjcmlwdG9yLT5iUHdyT24yUHdyR29vZCAqIDI7CisJdW5zaWduZWQgZGVsYXk7CiAJdTE2IHdIdWJDaGFyYWN0ZXJpc3RpY3MgPQogCQkJbGUxNl90b19jcHUoaHViLT5kZXNjcmlwdG9yLT53SHViQ2hhcmFjdGVyaXN0aWNzKTsKIApAQCAtNTM3LDcgKzU1MSwxMCBAQAogCQlzZXRfcG9ydF9mZWF0dXJlKGh1Yi0+aGRldiwgcG9ydDEsIFVTQl9QT1JUX0ZFQVRfUE9XRVIpOwogCiAJLyogV2FpdCBhdCBsZWFzdCAxMDAgbXNlYyBmb3IgcG93ZXIgdG8gYmVjb21lIHN0YWJsZSAqLwotCW1zbGVlcChtYXgocGdvb2RfZGVsYXksICh1bnNpZ25lZCkgMTAwKSk7CisJZGVsYXkgPSBtYXgocGdvb2RfZGVsYXksICh1bnNpZ25lZCkgMTAwKTsKKwlpZiAoZG9fZGVsYXkpCisJCW1zbGVlcChkZWxheSk7CisJcmV0dXJuIGRlbGF5OwogfQogCiBzdGF0aWMgaW50IGh1Yl9odWJfc3RhdHVzKHN0cnVjdCB1c2JfaHViICpodWIsCkBAIC01OTksMjEgKzYxNiw1NSBAQAogfQogCiBlbnVtIGh1Yl9hY3RpdmF0aW9uX3R5cGUgewotCUhVQl9JTklULCBIVUJfUE9TVF9SRVNFVCwgSFVCX1JFU1VNRSwgSFVCX1JFU0VUX1JFU1VNRQorCUhVQl9JTklULCBIVUJfSU5JVDIsIEhVQl9JTklUMywKKwlIVUJfUE9TVF9SRVNFVCwgSFVCX1JFU1VNRSwgSFVCX1JFU0VUX1JFU1VNRSwKIH07CiAKK3N0YXRpYyB2b2lkIGh1Yl9pbml0X2Z1bmMyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd3MpOworc3RhdGljIHZvaWQgaHViX2luaXRfZnVuYzMoc3RydWN0IHdvcmtfc3RydWN0ICp3cyk7CisKIHN0YXRpYyB2b2lkIGh1Yl9hY3RpdmF0ZShzdHJ1Y3QgdXNiX2h1YiAqaHViLCBlbnVtIGh1Yl9hY3RpdmF0aW9uX3R5cGUgdHlwZSkKIHsKIAlzdHJ1Y3QgdXNiX2RldmljZSAqaGRldiA9IGh1Yi0+aGRldjsKIAlpbnQgcG9ydDE7CiAJaW50IHN0YXR1czsKIAlib29sIG5lZWRfZGVib3VuY2VfZGVsYXkgPSBmYWxzZTsKKwl1bnNpZ25lZCBkZWxheTsKKworCS8qIENvbnRpbnVlIGEgcGFydGlhbCBpbml0aWFsaXphdGlvbiAqLworCWlmICh0eXBlID09IEhVQl9JTklUMikKKwkJZ290byBpbml0MjsKKwlpZiAodHlwZSA9PSBIVUJfSU5JVDMpCisJCWdvdG8gaW5pdDM7CiAKIAkvKiBBZnRlciBhIHJlc3VtZSwgcG9ydCBwb3dlciBzaG91bGQgc3RpbGwgYmUgb24uCiAJICogRm9yIGFueSBvdGhlciB0eXBlIG9mIGFjdGl2YXRpb24sIHR1cm4gaXQgb24uCiAJICovCi0JaWYgKHR5cGUgIT0gSFVCX1JFU1VNRSkKLQkJaHViX3Bvd2VyX29uKGh1Yik7CisJaWYgKHR5cGUgIT0gSFVCX1JFU1VNRSkgeworCisJCS8qIFNwZWVkIHVwIHN5c3RlbSBib290IGJ5IHVzaW5nIGEgZGVsYXllZF93b3JrIGZvciB0aGUKKwkJICogaHViJ3MgaW5pdGlhbCBwb3dlci11cCBkZWxheXMuICBUaGlzIGlzIHByZXR0eSBhd2t3YXJkCisJCSAqIGFuZCB0aGUgaW1wbGVtZW50YXRpb24gbG9va3MgbGlrZSBhIGhvbWUtYnJld2VkIHNvcnQgb2YKKwkJICogc2V0am1wL2xvbmdqbXAsIGJ1dCBpdCBzYXZlcyBhdCBsZWFzdCAxMDAgbXMgZm9yIGVhY2gKKwkJICogcm9vdCBodWIgKGFzc3VtaW5nIHVzYmNvcmUgaXMgY29tcGlsZWQgaW50byB0aGUga2VybmVsCisJCSAqIHJhdGhlciB0aGFuIGFzIGEgbW9kdWxlKS4gIEl0IGFkZHMgdXAuCisJCSAqCisJCSAqIFRoaXMgY2FuJ3QgYmUgZG9uZSBmb3IgSFVCX1JFU1VNRSBvciBIVUJfUkVTRVRfUkVTVU1FCisJCSAqIGJlY2F1c2UgZm9yIHRob3NlIGFjdGl2YXRpb24gdHlwZXMgdGhlIHBvcnRzIGhhdmUgdG8gYmUKKwkJICogb3BlcmF0aW9uYWwgd2hlbiB3ZSByZXR1cm4uICBJbiB0aGVvcnkgdGhpcyBjb3VsZCBiZSBkb25lCisJCSAqIGZvciBIVUJfUE9TVF9SRVNFVCwgYnV0IGl0J3MgZWFzaWVyIG5vdCB0by4KKwkJICovCisJCWlmICh0eXBlID09IEhVQl9JTklUKSB7CisJCQlkZWxheSA9IGh1Yl9wb3dlcl9vbihodWIsIGZhbHNlKTsKKwkJCVBSRVBBUkVfREVMQVlFRF9XT1JLKCZodWItPmluaXRfd29yaywgaHViX2luaXRfZnVuYzIpOworCQkJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZodWItPmluaXRfd29yaywKKwkJCQkJbXNlY3NfdG9famlmZmllcyhkZWxheSkpOworCQkJcmV0dXJuOwkJLyogQ29udGludWVzIGF0IGluaXQyOiBiZWxvdyAqLworCQl9IGVsc2UgeworCQkJaHViX3Bvd2VyX29uKGh1YiwgdHJ1ZSk7CisJCX0KKwl9CisgaW5pdDI6CiAKIAkvKiBDaGVjayBlYWNoIHBvcnQgYW5kIHNldCBodWItPmNoYW5nZV9iaXRzIHRvIGxldCBraHViZCBrbm93CiAJICogd2hpY2ggcG9ydHMgbmVlZCBhdHRlbnRpb24uCkBAIC02OTIsOSArNzQzLDIwIEBACiAJICogSWYgYW55IHBvcnQtc3RhdHVzIGNoYW5nZXMgZG8gb2NjdXIgZHVyaW5nIHRoaXMgZGVsYXksIGtodWJkCiAJICogd2lsbCBzZWUgdGhlbSBsYXRlciBhbmQgaGFuZGxlIHRoZW0gbm9ybWFsbHkuCiAJICovCi0JaWYgKG5lZWRfZGVib3VuY2VfZGVsYXkpCi0JCW1zbGVlcChIVUJfREVCT1VOQ0VfU1RBQkxFKTsKKwlpZiAobmVlZF9kZWJvdW5jZV9kZWxheSkgeworCQlkZWxheSA9IEhVQl9ERUJPVU5DRV9TVEFCTEU7CiAKKwkJLyogRG9uJ3QgZG8gYSBsb25nIHNsZWVwIGluc2lkZSBhIHdvcmtxdWV1ZSByb3V0aW5lICovCisJCWlmICh0eXBlID09IEhVQl9JTklUMikgeworCQkJUFJFUEFSRV9ERUxBWUVEX1dPUksoJmh1Yi0+aW5pdF93b3JrLCBodWJfaW5pdF9mdW5jMyk7CisJCQlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJmh1Yi0+aW5pdF93b3JrLAorCQkJCQltc2Vjc190b19qaWZmaWVzKGRlbGF5KSk7CisJCQlyZXR1cm47CQkvKiBDb250aW51ZXMgYXQgaW5pdDM6IGJlbG93ICovCisJCX0gZWxzZSB7CisJCQltc2xlZXAoZGVsYXkpOworCQl9CisJfQorIGluaXQzOgogCWh1Yi0+cXVpZXNjaW5nID0gMDsKIAogCXN0YXR1cyA9IHVzYl9zdWJtaXRfdXJiKGh1Yi0+dXJiLCBHRlBfTk9JTyk7CkBAIC03MDcsNiArNzY5LDIxIEBACiAJa2lja19raHViZChodWIpOwogfQogCisvKiBJbXBsZW1lbnQgdGhlIGNvbnRpbnVhdGlvbnMgZm9yIHRoZSBkZWxheXMgYWJvdmUgKi8KK3N0YXRpYyB2b2lkIGh1Yl9pbml0X2Z1bmMyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd3MpCit7CisJc3RydWN0IHVzYl9odWIgKmh1YiA9IGNvbnRhaW5lcl9vZih3cywgc3RydWN0IHVzYl9odWIsIGluaXRfd29yay53b3JrKTsKKworCWh1Yl9hY3RpdmF0ZShodWIsIEhVQl9JTklUMik7Cit9CisKK3N0YXRpYyB2b2lkIGh1Yl9pbml0X2Z1bmMzKHN0cnVjdCB3b3JrX3N0cnVjdCAqd3MpCit7CisJc3RydWN0IHVzYl9odWIgKmh1YiA9IGNvbnRhaW5lcl9vZih3cywgc3RydWN0IHVzYl9odWIsIGluaXRfd29yay53b3JrKTsKKworCWh1Yl9hY3RpdmF0ZShodWIsIEhVQl9JTklUMyk7Cit9CisKIGVudW0gaHViX3F1aWVzY2luZ190eXBlIHsKIAlIVUJfRElTQ09OTkVDVCwgSFVCX1BSRV9SRVNFVCwgSFVCX1NVU1BFTkQKIH07CkBAIC03MTYsNiArNzkzLDggQEAKIAlzdHJ1Y3QgdXNiX2RldmljZSAqaGRldiA9IGh1Yi0+aGRldjsKIAlpbnQgaTsKIAorCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmaHViLT5pbml0X3dvcmspOworCiAJLyoga2h1YmQgYW5kIHJlbGF0ZWQgYWN0aXZpdHkgd29uJ3QgcmUtdHJpZ2dlciAqLwogCWh1Yi0+cXVpZXNjaW5nID0gMTsKIApAQCAtMTA5OSw2ICsxMTc4LDcgQEAKIAlodWItPmludGZkZXYgPSAmaW50Zi0+ZGV2OwogCWh1Yi0+aGRldiA9IGhkZXY7CiAJSU5JVF9ERUxBWUVEX1dPUksoJmh1Yi0+bGVkcywgbGVkX3dvcmspOworCUlOSVRfREVMQVlFRF9XT1JLKCZodWItPmluaXRfd29yaywgTlVMTCk7CiAJdXNiX2dldF9pbnRmKGludGYpOwogCiAJdXNiX3NldF9pbnRmZGF0YSAoaW50ZiwgaHViKTsKQEAgLTI0NjcsNyArMjU0Nyw3IEBACiAJCQkJCVVTQl9SRVFfR0VUX0RFU0NSSVBUT1IsIFVTQl9ESVJfSU4sCiAJCQkJCVVTQl9EVF9ERVZJQ0UgPDwgOCwgMCwKIAkJCQkJYnVmLCBHRVRfREVTQ1JJUFRPUl9CVUZTSVpFLAotCQkJCQlVU0JfQ1RSTF9HRVRfVElNRU9VVCk7CisJCQkJCWluaXRpYWxfZGVzY3JpcHRvcl90aW1lb3V0KTsKIAkJCQlzd2l0Y2ggKGJ1Zi0+Yk1heFBhY2tldFNpemUwKSB7CiAJCQkJY2FzZSA4OiBjYXNlIDE2OiBjYXNlIDMyOiBjYXNlIDY0OiBjYXNlIDI1NToKIAkJCQkJaWYgKGJ1Zi0+YkRlc2NyaXB0b3JUeXBlID09CkBAIC0zMDM1LDcgKzMxMTUsNyBAQAogCQkJCQlpKTsKIAkJCQljbGVhcl9wb3J0X2ZlYXR1cmUoaGRldiwgaSwKIAkJCQkJVVNCX1BPUlRfRkVBVF9DX09WRVJfQ1VSUkVOVCk7Ci0JCQkJaHViX3Bvd2VyX29uKGh1Yik7CisJCQkJaHViX3Bvd2VyX29uKGh1YiwgdHJ1ZSk7CiAJCQl9CiAKIAkJCWlmIChwb3J0Y2hhbmdlICYgVVNCX1BPUlRfU1RBVF9DX1JFU0VUKSB7CkBAIC0zMDcwLDcgKzMxNTAsNyBAQAogCQkJCWRldl9kYmcgKGh1Yl9kZXYsICJvdmVyY3VycmVudCBjaGFuZ2VcbiIpOwogCQkJCW1zbGVlcCg1MDApOwkvKiBDb29sIGRvd24gKi8KIAkJCQljbGVhcl9odWJfZmVhdHVyZShoZGV2LCBDX0hVQl9PVkVSX0NVUlJFTlQpOwotICAgICAgICAgICAgICAgICAgICAgICAgCWh1Yl9wb3dlcl9vbihodWIpOworICAgICAgICAgICAgICAgICAgICAgICAgCWh1Yl9wb3dlcl9vbihodWIsIHRydWUpOwogCQkJfQogCQl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NvcmUvaW5vZGUuYyBiL2RyaXZlcnMvdXNiL2NvcmUvaW5vZGUuYwppbmRleCBkYjQxMGU5Li45NDYzMjI2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9jb3JlL2lub2RlLmMKKysrIGIvZHJpdmVycy91c2IvY29yZS9pbm9kZS5jCkBAIC05Nyw3ICs5Nyw3IEBACiAJT3B0X2VyciwKIH07CiAKLXN0YXRpYyBtYXRjaF90YWJsZV90IHRva2VucyA9IHsKK3N0YXRpYyBjb25zdCBtYXRjaF90YWJsZV90IHRva2VucyA9IHsKIAl7T3B0X2RldnVpZCwgImRldnVpZD0ldSJ9LAogCXtPcHRfZGV2Z2lkLCAiZGV2Z2lkPSV1In0sCiAJe09wdF9kZXZtb2RlLCAiZGV2bW9kZT0lbyJ9LApAQCAtMTgwLDggKzE4MCw4IEBACiAJCQlsaXN0bW9kZSA9IG9wdGlvbiAmIFNfSVJXWFVHTzsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgotCQkJZXJyKCJ1c2JmczogdW5yZWNvZ25pc2VkIG1vdW50IG9wdGlvbiBcIiVzXCIgIgotCQkJICAgICJvciBtaXNzaW5nIHZhbHVlXG4iLCBwKTsKKwkJCXByaW50ayhLRVJOX0VSUiAidXNiZnM6IHVucmVjb2duaXNlZCBtb3VudCBvcHRpb24gIgorCQkJICAgICAgICJcIiVzXCIgb3IgbWlzc2luZyB2YWx1ZVxuIiwgcCk7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCX0KQEAgLTI0MCw3ICsyNDAsOSBAQAogCQkJCXVwZGF0ZV9zcGVjaWFsKGJ1cyk7CiAJCQkJYnJlYWs7CiAJCQlkZWZhdWx0OgotCQkJCXdhcm4oIlVua25vd24gbm9kZSAlcyBtb2RlICV4IGZvdW5kIG9uIHJlbW91bnQhXG4iLGJ1cy0+ZF9uYW1lLm5hbWUsYnVzLT5kX2lub2RlLT5pX21vZGUpOworCQkJCXByaW50ayhLRVJOX1dBUk5JTkcgInVzYmZzOiBVbmtub3duIG5vZGUgJXMgIgorCQkJCSAgICAgICAibW9kZSAleCBmb3VuZCBvbiByZW1vdW50IVxuIiwKKwkJCQkgICAgICAgYnVzLT5kX25hbWUubmFtZSwgYnVzLT5kX2lub2RlLT5pX21vZGUpOwogCQkJCWJyZWFrOwogCQkJfQogCQl9CkBAIC0yNTksNyArMjYxLDcgQEAKIAkJcmV0dXJuIDA7CiAKIAlpZiAocGFyc2Vfb3B0aW9ucyhzYiwgZGF0YSkpIHsKLQkJd2FybigidXNiZnM6IG1vdW50IHBhcmFtZXRlciBlcnJvcjoiKTsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAidXNiZnM6IG1vdW50IHBhcmFtZXRlciBlcnJvci5cbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKQEAgLTU5OSw3ICs2MDEsNyBAQAogCS8qIGNyZWF0ZSB0aGUgZGV2aWNlcyBzcGVjaWFsIGZpbGUgKi8KIAlyZXR2YWwgPSBzaW1wbGVfcGluX2ZzKCZ1c2JfZnNfdHlwZSwgJnVzYmZzX21vdW50LCAmdXNiZnNfbW91bnRfY291bnQpOwogCWlmIChyZXR2YWwpIHsKLQkJZXJyICgiVW5hYmxlIHRvIGdldCB1c2JmcyBtb3VudCIpOworCQlwcmludGsoS0VSTl9FUlIgIlVuYWJsZSB0byBnZXQgdXNiZnMgbW91bnRcbiIpOwogCQlnb3RvIGV4aXQ7CiAJfQogCkBAIC02MTEsNyArNjEzLDcgQEAKIAkJCQkJICAgICAgIE5VTEwsICZ1c2Jmc19kZXZpY2VzX2ZvcHMsCiAJCQkJCSAgICAgICBsaXN0dWlkLCBsaXN0Z2lkKTsKIAlpZiAoZGV2aWNlc191c2Jmc19kZW50cnkgPT0gTlVMTCkgewotCQllcnIgKCJVbmFibGUgdG8gY3JlYXRlIGRldmljZXMgdXNiZnMgZmlsZSIpOworCQlwcmludGsoS0VSTl9FUlIgIlVuYWJsZSB0byBjcmVhdGUgZGV2aWNlcyB1c2JmcyBmaWxlXG4iKTsKIAkJcmV0dmFsID0gLUVOT0RFVjsKIAkJZ290byBlcnJvcl9jbGVhbl9tb3VudHM7CiAJfQpAQCAtNjYzLDcgKzY2NSw3IEBACiAJYnVzLT51c2Jmc19kZW50cnkgPSBmc19jcmVhdGVfZmlsZSAobmFtZSwgYnVzbW9kZSB8IFNfSUZESVIsIHBhcmVudCwKIAkJCQkJICAgIGJ1cywgTlVMTCwgYnVzdWlkLCBidXNnaWQpOwogCWlmIChidXMtPnVzYmZzX2RlbnRyeSA9PSBOVUxMKSB7Ci0JCWVyciAoImVycm9yIGNyZWF0aW5nIHVzYmZzIGJ1cyBlbnRyeSIpOworCQlwcmludGsoS0VSTl9FUlIgIkVycm9yIGNyZWF0aW5nIHVzYmZzIGJ1cyBlbnRyeVxuIik7CiAJCXJldHVybjsKIAl9CiB9CkBAIC02OTQsNyArNjk2LDcgQEAKIAkJCQkJICAgICZ1c2JkZXZfZmlsZV9vcGVyYXRpb25zLAogCQkJCQkgICAgZGV2dWlkLCBkZXZnaWQpOwogCWlmIChkZXYtPnVzYmZzX2RlbnRyeSA9PSBOVUxMKSB7Ci0JCWVyciAoImVycm9yIGNyZWF0aW5nIHVzYmZzIGRldmljZSBlbnRyeSIpOworCQlwcmludGsoS0VSTl9FUlIgIkVycm9yIGNyZWF0aW5nIHVzYmZzIGRldmljZSBlbnRyeVxuIik7CiAJCXJldHVybjsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NvcmUvbWVzc2FnZS5jIGIvZHJpdmVycy91c2IvY29yZS9tZXNzYWdlLmMKaW5kZXggMjg2YjQ0My4uODg3NzM4NSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvY29yZS9tZXNzYWdlLmMKKysrIGIvZHJpdmVycy91c2IvY29yZS9tZXNzYWdlLmMKQEAgLTEyMDQsNyArMTIwNCw4IEBACiAKIAlhbHQgPSB1c2JfYWx0bnVtX3RvX2FsdHNldHRpbmcoaWZhY2UsIGFsdGVybmF0ZSk7CiAJaWYgKCFhbHQpIHsKLQkJd2Fybigic2VsZWN0aW5nIGludmFsaWQgYWx0c2V0dGluZyAlZCIsIGFsdGVybmF0ZSk7CisJCWRldl93YXJuKCZkZXYtPmRldiwgInNlbGVjdGluZyBpbnZhbGlkIGFsdHNldHRpbmcgJWQiLAorCQkJIGFsdGVybmF0ZSk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY29yZS9zeXNmcy5jIGIvZHJpdmVycy91c2IvY29yZS9zeXNmcy5jCmluZGV4IDVlMWY1ZDUuLmY2NmZiYTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2NvcmUvc3lzZnMuYworKysgYi9kcml2ZXJzL3VzYi9jb3JlL3N5c2ZzLmMKQEAgLTc0Myw2ICs3NDMsMjkgQEAKIH0KIHN0YXRpYyBERVZJQ0VfQVRUUihtb2RhbGlhcywgU19JUlVHTywgc2hvd19tb2RhbGlhcywgTlVMTCk7CiAKK3N0YXRpYyBzc2l6ZV90IHNob3dfc3VwcG9ydHNfYXV0b3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2LAorCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmOworCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2OworCWludCByZXQ7CisKKwlpbnRmID0gdG9fdXNiX2ludGVyZmFjZShkZXYpOworCXVkZXYgPSBpbnRlcmZhY2VfdG9fdXNiZGV2KGludGYpOworCisJdXNiX2xvY2tfZGV2aWNlKHVkZXYpOworCS8qIERldmljZXMgd2lsbCBiZSBhdXRvc3VzcGVuZGVkIGV2ZW4gd2hlbiBhbiBpbnRlcmZhY2UgaXNuJ3QgY2xhaW1lZCAqLworCWlmICghaW50Zi0+ZGV2LmRyaXZlciB8fAorCQkJdG9fdXNiX2RyaXZlcihpbnRmLT5kZXYuZHJpdmVyKS0+c3VwcG9ydHNfYXV0b3N1c3BlbmQpCisJCXJldCA9IHNwcmludGYoYnVmLCAiJXVcbiIsIDEpOworCWVsc2UKKwkJcmV0ID0gc3ByaW50ZihidWYsICIldVxuIiwgMCk7CisJdXNiX3VubG9ja19kZXZpY2UodWRldik7CisKKwlyZXR1cm4gcmV0OworfQorc3RhdGljIERFVklDRV9BVFRSKHN1cHBvcnRzX2F1dG9zdXNwZW5kLCBTX0lSVUdPLCBzaG93X3N1cHBvcnRzX2F1dG9zdXNwZW5kLCBOVUxMKTsKKwogc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmludGZfYXR0cnNbXSA9IHsKIAkmZGV2X2F0dHJfYkludGVyZmFjZU51bWJlci5hdHRyLAogCSZkZXZfYXR0cl9iQWx0ZXJuYXRlU2V0dGluZy5hdHRyLApAQCAtNzUxLDYgKzc3NCw3IEBACiAJJmRldl9hdHRyX2JJbnRlcmZhY2VTdWJDbGFzcy5hdHRyLAogCSZkZXZfYXR0cl9iSW50ZXJmYWNlUHJvdG9jb2wuYXR0ciwKIAkmZGV2X2F0dHJfbW9kYWxpYXMuYXR0ciwKKwkmZGV2X2F0dHJfc3VwcG9ydHNfYXV0b3N1c3BlbmQuYXR0ciwKIAlOVUxMLAogfTsKIHN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIGludGZfYXR0cl9ncnAgPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jb3JlL3VyYi5jIGIvZHJpdmVycy91c2IvY29yZS91cmIuYwppbmRleCA0NzExMWU4Li5mMjYzODAwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9jb3JlL3VyYi5jCisrKyBiL2RyaXZlcnMvdXNiL2NvcmUvdXJiLmMKQEAgLTEwLDYgKzEwLDggQEAKIAogI2RlZmluZSB0b191cmIoZCkgY29udGFpbmVyX29mKGQsIHN0cnVjdCB1cmIsIGtyZWYpCiAKK3N0YXRpYyBERUZJTkVfU1BJTkxPQ0sodXNiX3JlamVjdF9sb2NrKTsKKwogc3RhdGljIHZvaWQgdXJiX2Rlc3Ryb3koc3RydWN0IGtyZWYgKmtyZWYpCiB7CiAJc3RydWN0IHVyYiAqdXJiID0gdG9fdXJiKGtyZWYpOwpAQCAtNjgsNyArNzAsNyBAQAogCQlpc29fcGFja2V0cyAqIHNpemVvZihzdHJ1Y3QgdXNiX2lzb19wYWNrZXRfZGVzY3JpcHRvciksCiAJCW1lbV9mbGFncyk7CiAJaWYgKCF1cmIpIHsKLQkJZXJyKCJhbGxvY191cmI6IGttYWxsb2MgZmFpbGVkIik7CisJCXByaW50ayhLRVJOX0VSUiAiYWxsb2NfdXJiOiBrbWFsbG9jIGZhaWxlZFxuIik7CiAJCXJldHVybiBOVUxMOwogCX0KIAl1c2JfaW5pdF91cmIodXJiKTsKQEAgLTEyNyw2ICsxMjksMTMgQEAKIAl1c2JfZ2V0X3VyYih1cmIpOwogCWxpc3RfYWRkX3RhaWwoJnVyYi0+YW5jaG9yX2xpc3QsICZhbmNob3ItPnVyYl9saXN0KTsKIAl1cmItPmFuY2hvciA9IGFuY2hvcjsKKworCWlmICh1bmxpa2VseShhbmNob3ItPnBvaXNvbmVkKSkgeworCQlzcGluX2xvY2soJnVzYl9yZWplY3RfbG9jayk7CisJCXVyYi0+cmVqZWN0Kys7CisJCXNwaW5fdW5sb2NrKCZ1c2JfcmVqZWN0X2xvY2spOworCX0KKwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFuY2hvci0+bG9jaywgZmxhZ3MpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwodXNiX2FuY2hvcl91cmIpOwpAQCAtMzk4LDcgKzQwNyw3IEBACiAKIAkvKiBmYWlsIGlmIHN1Ym1pdHRlciBnYXZlIGJvZ3VzIGZsYWdzICovCiAJaWYgKHVyYi0+dHJhbnNmZXJfZmxhZ3MgIT0gb3JpZ19mbGFncykgewotCQllcnIoIkJPR1VTIHVyYiBmbGFncywgJXggLS0+ICV4IiwKKwkJZGV2X2VycigmZGV2LT5kZXYsICJCT0dVUyB1cmIgZmxhZ3MsICV4IC0tPiAleFxuIiwKIAkJCW9yaWdfZmxhZ3MsIHVyYi0+dHJhbnNmZXJfZmxhZ3MpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CkBAIC01NDQsMjUgKzU1Myw3MCBAQAogICovCiB2b2lkIHVzYl9raWxsX3VyYihzdHJ1Y3QgdXJiICp1cmIpCiB7Ci0Jc3RhdGljIERFRklORV9NVVRFWChyZWplY3RfbXV0ZXgpOwotCiAJbWlnaHRfc2xlZXAoKTsKIAlpZiAoISh1cmIgJiYgdXJiLT5kZXYgJiYgdXJiLT5lcCkpCiAJCXJldHVybjsKLQltdXRleF9sb2NrKCZyZWplY3RfbXV0ZXgpOworCXNwaW5fbG9ja19pcnEoJnVzYl9yZWplY3RfbG9jayk7CiAJKyt1cmItPnJlamVjdDsKLQltdXRleF91bmxvY2soJnJlamVjdF9tdXRleCk7CisJc3Bpbl91bmxvY2tfaXJxKCZ1c2JfcmVqZWN0X2xvY2spOwogCiAJdXNiX2hjZF91bmxpbmtfdXJiKHVyYiwgLUVOT0VOVCk7CiAJd2FpdF9ldmVudCh1c2Jfa2lsbF91cmJfcXVldWUsIGF0b21pY19yZWFkKCZ1cmItPnVzZV9jb3VudCkgPT0gMCk7CiAKLQltdXRleF9sb2NrKCZyZWplY3RfbXV0ZXgpOworCXNwaW5fbG9ja19pcnEoJnVzYl9yZWplY3RfbG9jayk7CiAJLS11cmItPnJlamVjdDsKLQltdXRleF91bmxvY2soJnJlamVjdF9tdXRleCk7CisJc3Bpbl91bmxvY2tfaXJxKCZ1c2JfcmVqZWN0X2xvY2spOwogfQogRVhQT1JUX1NZTUJPTF9HUEwodXNiX2tpbGxfdXJiKTsKIAogLyoqCisgKiB1c2JfcG9pc29uX3VyYiAtIHJlbGlhYmx5IGtpbGwgYSB0cmFuc2ZlciBhbmQgcHJldmVudCBmdXJ0aGVyIHVzZSBvZiBhbiBVUkIKKyAqIEB1cmI6IHBvaW50ZXIgdG8gVVJCIGRlc2NyaWJpbmcgYSBwcmV2aW91c2x5IHN1Ym1pdHRlZCByZXF1ZXN0LAorICoJbWF5IGJlIE5VTEwKKyAqCisgKiBUaGlzIHJvdXRpbmUgY2FuY2VscyBhbiBpbi1wcm9ncmVzcyByZXF1ZXN0LiAgSXQgaXMgZ3VhcmFudGVlZCB0aGF0CisgKiB1cG9uIHJldHVybiBhbGwgY29tcGxldGlvbiBoYW5kbGVycyB3aWxsIGhhdmUgZmluaXNoZWQgYW5kIHRoZSBVUkIKKyAqIHdpbGwgYmUgdG90YWxseSBpZGxlIGFuZCBjYW5ub3QgYmUgcmV1c2VkLiAgVGhlc2UgZmVhdHVyZXMgbWFrZQorICogdGhpcyBhbiBpZGVhbCB3YXkgdG8gc3RvcCBJL08gaW4gYSBkaXNjb25uZWN0KCkgY2FsbGJhY2suCisgKiBJZiB0aGUgcmVxdWVzdCBoYXMgbm90IGFscmVhZHkgZmluaXNoZWQgb3IgYmVlbiB1bmxpbmtlZAorICogdGhlIGNvbXBsZXRpb24gaGFuZGxlciB3aWxsIHNlZSB1cmItPnN0YXR1cyA9PSAtRU5PRU5ULgorICoKKyAqIEFmdGVyIGFuZCB3aGlsZSB0aGUgcm91dGluZSBydW5zLCBhdHRlbXB0cyB0byByZXN1Ym1pdCB0aGUgVVJCIHdpbGwgZmFpbAorICogd2l0aCBlcnJvciAtRVBFUk0uICBUaHVzIGV2ZW4gaWYgdGhlIFVSQidzIGNvbXBsZXRpb24gaGFuZGxlciBhbHdheXMKKyAqIHRyaWVzIHRvIHJlc3VibWl0LCBpdCB3aWxsIG5vdCBzdWNjZWVkIGFuZCB0aGUgVVJCIHdpbGwgYmVjb21lIGlkbGUuCisgKgorICogVGhpcyByb3V0aW5lIG1heSBub3QgYmUgdXNlZCBpbiBhbiBpbnRlcnJ1cHQgY29udGV4dCAoc3VjaCBhcyBhIGJvdHRvbQorICogaGFsZiBvciBhIGNvbXBsZXRpb24gaGFuZGxlciksIG9yIHdoZW4gaG9sZGluZyBhIHNwaW5sb2NrLCBvciBpbiBvdGhlcgorICogc2l0dWF0aW9ucyB3aGVyZSB0aGUgY2FsbGVyIGNhbid0IHNjaGVkdWxlKCkuCisgKi8KK3ZvaWQgdXNiX3BvaXNvbl91cmIoc3RydWN0IHVyYiAqdXJiKQoreworCW1pZ2h0X3NsZWVwKCk7CisJaWYgKCEodXJiICYmIHVyYi0+ZGV2ICYmIHVyYi0+ZXApKQorCQlyZXR1cm47CisJc3Bpbl9sb2NrX2lycSgmdXNiX3JlamVjdF9sb2NrKTsKKwkrK3VyYi0+cmVqZWN0OworCXNwaW5fdW5sb2NrX2lycSgmdXNiX3JlamVjdF9sb2NrKTsKKworCXVzYl9oY2RfdW5saW5rX3VyYih1cmIsIC1FTk9FTlQpOworCXdhaXRfZXZlbnQodXNiX2tpbGxfdXJiX3F1ZXVlLCBhdG9taWNfcmVhZCgmdXJiLT51c2VfY291bnQpID09IDApOworfQorRVhQT1JUX1NZTUJPTF9HUEwodXNiX3BvaXNvbl91cmIpOworCit2b2lkIHVzYl91bnBvaXNvbl91cmIoc3RydWN0IHVyYiAqdXJiKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpZiAoIXVyYikKKwkJcmV0dXJuOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnVzYl9yZWplY3RfbG9jaywgZmxhZ3MpOworCS0tdXJiLT5yZWplY3Q7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdXNiX3JlamVjdF9sb2NrLCBmbGFncyk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTCh1c2JfdW5wb2lzb25fdXJiKTsKKworLyoqCiAgKiB1c2Jfa2lsbF9hbmNob3JlZF91cmJzIC0gY2FuY2VsIHRyYW5zZmVyIHJlcXVlc3RzIGVuIG1hc3NlCiAgKiBAYW5jaG9yOiBhbmNob3IgdGhlIHJlcXVlc3RzIGFyZSBib3VuZCB0bwogICoKQEAgLTU4OSw2ICs2NDMsMzUgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHVzYl9raWxsX2FuY2hvcmVkX3VyYnMpOwogCisKKy8qKgorICogdXNiX3BvaXNvbl9hbmNob3JlZF91cmJzIC0gY2Vhc2UgYWxsIHRyYWZmaWMgZnJvbSBhbiBhbmNob3IKKyAqIEBhbmNob3I6IGFuY2hvciB0aGUgcmVxdWVzdHMgYXJlIGJvdW5kIHRvCisgKgorICogdGhpcyBhbGxvd3MgYWxsIG91dHN0YW5kaW5nIFVSQnMgdG8gYmUgcG9pc29uZWQgc3RhcnRpbmcKKyAqIGZyb20gdGhlIGJhY2sgb2YgdGhlIHF1ZXVlLiBOZXdseSBhZGRlZCBVUkJzIHdpbGwgYWxzbyBiZQorICogcG9pc29uZWQKKyAqLwordm9pZCB1c2JfcG9pc29uX2FuY2hvcmVkX3VyYnMoc3RydWN0IHVzYl9hbmNob3IgKmFuY2hvcikKK3sKKwlzdHJ1Y3QgdXJiICp2aWN0aW07CisKKwlzcGluX2xvY2tfaXJxKCZhbmNob3ItPmxvY2spOworCWFuY2hvci0+cG9pc29uZWQgPSAxOworCXdoaWxlICghbGlzdF9lbXB0eSgmYW5jaG9yLT51cmJfbGlzdCkpIHsKKwkJdmljdGltID0gbGlzdF9lbnRyeShhbmNob3ItPnVyYl9saXN0LnByZXYsIHN0cnVjdCB1cmIsCisJCQkJICAgIGFuY2hvcl9saXN0KTsKKwkJLyogd2UgbXVzdCBtYWtlIHN1cmUgdGhlIFVSQiBpc24ndCBmcmVlZCBiZWZvcmUgd2Uga2lsbCBpdCovCisJCXVzYl9nZXRfdXJiKHZpY3RpbSk7CisJCXNwaW5fdW5sb2NrX2lycSgmYW5jaG9yLT5sb2NrKTsKKwkJLyogdGhpcyB3aWxsIHVuYW5jaG9yIHRoZSBVUkIgKi8KKwkJdXNiX3BvaXNvbl91cmIodmljdGltKTsKKwkJdXNiX3B1dF91cmIodmljdGltKTsKKwkJc3Bpbl9sb2NrX2lycSgmYW5jaG9yLT5sb2NrKTsKKwl9CisJc3Bpbl91bmxvY2tfaXJxKCZhbmNob3ItPmxvY2spOworfQorRVhQT1JUX1NZTUJPTF9HUEwodXNiX3BvaXNvbl9hbmNob3JlZF91cmJzKTsKIC8qKgogICogdXNiX3VubGlua19hbmNob3JlZF91cmJzIC0gYXN5bmNocm9ub3VzbHkgY2FuY2VsIHRyYW5zZmVyIHJlcXVlc3RzIGVuIG1hc3NlCiAgKiBAYW5jaG9yOiBhbmNob3IgdGhlIHJlcXVlc3RzIGFyZSBib3VuZCB0bwpAQCAtNjMzLDMgKzcxNiw3MyBAQAogCQkJCSAgbXNlY3NfdG9famlmZmllcyh0aW1lb3V0KSk7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTCh1c2Jfd2FpdF9hbmNob3JfZW1wdHlfdGltZW91dCk7CisKKy8qKgorICogdXNiX2dldF9mcm9tX2FuY2hvciAtIGdldCBhbiBhbmNob3IncyBvbGRlc3QgdXJiCisgKiBAYW5jaG9yOiB0aGUgYW5jaG9yIHdob3NlIHVyYiB5b3Ugd2FudAorICoKKyAqIHRoaXMgd2lsbCB0YWtlIHRoZSBvbGRlc3QgdXJiIGZyb20gYW4gYW5jaG9yLAorICogdW5hbmNob3IgYW5kIHJldHVybiBpdAorICovCitzdHJ1Y3QgdXJiICp1c2JfZ2V0X2Zyb21fYW5jaG9yKHN0cnVjdCB1c2JfYW5jaG9yICphbmNob3IpCit7CisJc3RydWN0IHVyYiAqdmljdGltOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmYW5jaG9yLT5sb2NrLCBmbGFncyk7CisJaWYgKCFsaXN0X2VtcHR5KCZhbmNob3ItPnVyYl9saXN0KSkgeworCQl2aWN0aW0gPSBsaXN0X2VudHJ5KGFuY2hvci0+dXJiX2xpc3QubmV4dCwgc3RydWN0IHVyYiwKKwkJCQkgICAgYW5jaG9yX2xpc3QpOworCQl1c2JfZ2V0X3VyYih2aWN0aW0pOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbmNob3ItPmxvY2ssIGZsYWdzKTsKKwkJdXNiX3VuYW5jaG9yX3VyYih2aWN0aW0pOworCX0gZWxzZSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFuY2hvci0+bG9jaywgZmxhZ3MpOworCQl2aWN0aW0gPSBOVUxMOworCX0KKworCXJldHVybiB2aWN0aW07Cit9CisKK0VYUE9SVF9TWU1CT0xfR1BMKHVzYl9nZXRfZnJvbV9hbmNob3IpOworCisvKioKKyAqIHVzYl9zY3V0dGxlX2FuY2hvcmVkX3VyYnMgLSB1bmFuY2hvciBhbGwgYW4gYW5jaG9yJ3MgdXJicworICogQGFuY2hvcjogdGhlIGFuY2hvciB3aG9zZSB1cmJzIHlvdSB3YW50IHRvIHVuYW5jaG9yCisgKgorICogdXNlIHRoaXMgdG8gZ2V0IHJpZCBvZiBhbGwgYW4gYW5jaG9yJ3MgdXJicworICovCit2b2lkIHVzYl9zY3V0dGxlX2FuY2hvcmVkX3VyYnMoc3RydWN0IHVzYl9hbmNob3IgKmFuY2hvcikKK3sKKwlzdHJ1Y3QgdXJiICp2aWN0aW07CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZhbmNob3ItPmxvY2ssIGZsYWdzKTsKKwl3aGlsZSAoIWxpc3RfZW1wdHkoJmFuY2hvci0+dXJiX2xpc3QpKSB7CisJCXZpY3RpbSA9IGxpc3RfZW50cnkoYW5jaG9yLT51cmJfbGlzdC5wcmV2LCBzdHJ1Y3QgdXJiLAorCQkJCSAgICBhbmNob3JfbGlzdCk7CisJCXVzYl9nZXRfdXJiKHZpY3RpbSk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFuY2hvci0+bG9jaywgZmxhZ3MpOworCQkvKiB0aGlzIG1heSBmcmVlIHRoZSBVUkIgKi8KKwkJdXNiX3VuYW5jaG9yX3VyYih2aWN0aW0pOworCQl1c2JfcHV0X3VyYih2aWN0aW0pOworCQlzcGluX2xvY2tfaXJxc2F2ZSgmYW5jaG9yLT5sb2NrLCBmbGFncyk7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFuY2hvci0+bG9jaywgZmxhZ3MpOworfQorCitFWFBPUlRfU1lNQk9MX0dQTCh1c2Jfc2N1dHRsZV9hbmNob3JlZF91cmJzKTsKKworLyoqCisgKiB1c2JfYW5jaG9yX2VtcHR5IC0gaXMgYW4gYW5jaG9yIGVtcHR5CisgKiBAYW5jaG9yOiB0aGUgYW5jaG9yIHlvdSB3YW50IHRvIHF1ZXJ5CisgKgorICogcmV0dXJucyAxIGlmIHRoZSBhbmNob3IgaGFzIG5vIHVyYnMgYXNzb2NpYXRlZCB3aXRoIGl0CisgKi8KK2ludCB1c2JfYW5jaG9yX2VtcHR5KHN0cnVjdCB1c2JfYW5jaG9yICphbmNob3IpCit7CisJcmV0dXJuIGxpc3RfZW1wdHkoJmFuY2hvci0+dXJiX2xpc3QpOworfQorCitFWFBPUlRfU1lNQk9MX0dQTCh1c2JfYW5jaG9yX2VtcHR5KTsKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWcgYi9kcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZwppbmRleCBhY2M5NWIyLi5kZDRjZDVhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZwpAQCAtNDUsNyArNDUsNyBAQAogCiBjb25maWcgVVNCX0dBREdFVF9ERUJVRwogCWJvb2xlYW4gIkRlYnVnZ2luZyBtZXNzYWdlcyAoREVWRUxPUE1FTlQpIgotCWRlcGVuZHMgb24gVVNCX0dBREdFVCAmJiBERUJVR19LRVJORUwKKwlkZXBlbmRzIG9uIERFQlVHX0tFUk5FTAogCWhlbHAKIAkgICBNYW55IGNvbnRyb2xsZXIgYW5kIGdhZGdldCBkcml2ZXJzIHdpbGwgcHJpbnQgc29tZSBkZWJ1Z2dpbmcKIAkgICBtZXNzYWdlcyBpZiB5b3UgdXNlIHRoaXMgb3B0aW9uIHRvIGFzayBmb3IgdGhvc2UgbWVzc2FnZXMuCkBAIC01OSw3ICs1OSw3IEBACiAKIGNvbmZpZyBVU0JfR0FER0VUX0RFQlVHX0ZJTEVTCiAJYm9vbGVhbiAiRGVidWdnaW5nIGluZm9ybWF0aW9uIGZpbGVzIChERVZFTE9QTUVOVCkiCi0JZGVwZW5kcyBvbiBVU0JfR0FER0VUICYmIFBST0NfRlMKKwlkZXBlbmRzIG9uIFBST0NfRlMKIAloZWxwCiAJICAgU29tZSBvZiB0aGUgZHJpdmVycyBpbiB0aGUgImdhZGdldCIgZnJhbWV3b3JrIGNhbiBleHBvc2UKIAkgICBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24gaW4gZmlsZXMgc3VjaCBhcyAvcHJvYy9kcml2ZXIvdWRjCkBAIC03MCw3ICs3MCw3IEBACiAKIGNvbmZpZyBVU0JfR0FER0VUX0RFQlVHX0ZTCiAJYm9vbGVhbiAiRGVidWdnaW5nIGluZm9ybWF0aW9uIGZpbGVzIGluIGRlYnVnZnMgKERFVkVMT1BNRU5UKSIKLQlkZXBlbmRzIG9uIFVTQl9HQURHRVQgJiYgREVCVUdfRlMKKwlkZXBlbmRzIG9uIERFQlVHX0ZTCiAJaGVscAogCSAgIFNvbWUgb2YgdGhlIGRyaXZlcnMgaW4gdGhlICJnYWRnZXQiIGZyYW1ld29yayBjYW4gZXhwb3NlCiAJICAgZGVidWdnaW5nIGluZm9ybWF0aW9uIGluIGZpbGVzIHVuZGVyIC9zeXMva2VybmVsL2RlYnVnLy4KQEAgLTc5LDEyICs3OSwzNiBAQAogCSAgIEVuYWJsZSB0aGVzZSBmaWxlcyBieSBjaG9vc2luZyAiWSIgaGVyZS4gIElmIGluIGRvdWJ0LCBvcgogCSAgIHRvIGNvbnNlcnZlIGtlcm5lbCBtZW1vcnksIHNheSAiTiIuCiAKK2NvbmZpZyBVU0JfR0FER0VUX1ZCVVNfRFJBVworCWludCAiTWF4aW11bSBWQlVTIFBvd2VyIHVzYWdlICgyLTUwMCBtQSkiCisJcmFuZ2UgMiA1MDAKKwlkZWZhdWx0IDIKKwloZWxwCisJICAgU29tZSBkZXZpY2VzIG5lZWQgdG8gZHJhdyBwb3dlciBmcm9tIFVTQiB3aGVuIHRoZXkgYXJlCisJICAgY29uZmlndXJlZCwgcGVyaGFwcyB0byBvcGVyYXRlIGNpcmN1aXRyeSBvciB0byByZWNoYXJnZQorCSAgIGJhdHRlcmllcy4gIFRoaXMgaXMgaW4gYWRkaXRpb24gdG8gYW55IGxvY2FsIHBvd2VyIHN1cHBseSwKKwkgICBzdWNoIGFzIGFuIEFDIGFkYXB0ZXIgb3IgYmF0dGVyaWVzLgorCisJICAgRW50ZXIgdGhlIG1heGltdW0gcG93ZXIgeW91ciBkZXZpY2UgZHJhd3MgdGhyb3VnaCBVU0IsIGluCisJICAgbWlsbGlBbXBlcmVzLiAgVGhlIHBlcm1pdHRlZCByYW5nZSBvZiB2YWx1ZXMgaXMgMiAtIDUwMCBtQTsKKwkgICAwIG1BIHdvdWxkIGJlIGxlZ2FsLCBidXQgY2FuIG1ha2Ugc29tZSBob3N0cyBtaXNiZWhhdmUuCisKKwkgICBUaGlzIHZhbHVlIHdpbGwgYmUgdXNlZCBleGNlcHQgZm9yIHN5c3RlbS1zcGVjaWZpYyBnYWRnZXQKKwkgICBkcml2ZXJzIHRoYXQgaGF2ZSBtb3JlIHNwZWNpZmljIGluZm9ybWF0aW9uLgorCiBjb25maWcJVVNCX0dBREdFVF9TRUxFQ1RFRAogCWJvb2xlYW4KIAogIwogIyBVU0IgUGVyaXBoZXJhbCBDb250cm9sbGVyIFN1cHBvcnQKICMKKyMgVGhlIG9yZGVyIGhlcmUgaXMgYWxwaGFiZXRpY2FsLCBleGNlcHQgdGhhdCBpbnRlZ3JhdGVkIGNvbnRyb2xsZXJzIGdvCisjIGJlZm9yZSBkaXNjcmV0ZSBvbmVzIHNvIHRoZXkgd2lsbCBiZSB0aGUgaW5pdGlhbC9kZWZhdWx0IHZhbHVlOgorIyAgIC0gaW50ZWdyYXRlZC9TT0MgY29udHJvbGxlcnMgZmlyc3QKKyMgICAtIGxpY2Vuc2VkIElQIHVzZWQgaW4gYm90aCBTT0MgYW5kIGRpc2NyZXRlIHZlcnNpb25zCisjICAgLSBkaXNjcmV0ZSBvbmVzIChpbmNsdWRpbmcgYWxsIFBDSS1vbmx5IGNvbnRyb2xsZXJzKQorIyAgIC0gZGVidWcvZHVtbXkgZ2FkZ2V0K2hjZCBpcyBsYXN0LgorIwogY2hvaWNlCiAJcHJvbXB0ICJVU0IgUGVyaXBoZXJhbCBDb250cm9sbGVyIgogCWRlcGVuZHMgb24gVVNCX0dBREdFVApAQCAtOTQsMjYgKzExOCwyNyBAQAogCSAgIE1hbnkgY29udHJvbGxlciBkcml2ZXJzIGFyZSBwbGF0Zm9ybS1zcGVjaWZpYzsgdGhlc2UKIAkgICBvZnRlbiBuZWVkIGJvYXJkLXNwZWNpZmljIGhvb2tzLgogCi1jb25maWcgVVNCX0dBREdFVF9BTUQ1NTM2VURDCi0JYm9vbGVhbiAiQU1ENTUzNiBVREMiCi0JZGVwZW5kcyBvbiBQQ0kKLQlzZWxlY3QgVVNCX0dBREdFVF9EVUFMU1BFRUQKKyMKKyMgSW50ZWdyYXRlZCBjb250cm9sbGVycworIworCitjb25maWcgVVNCX0dBREdFVF9BVDkxCisJYm9vbGVhbiAiQXRtZWwgQVQ5MSBVU0IgRGV2aWNlIFBvcnQiCisJZGVwZW5kcyBvbiBBUkNIX0FUOTEgJiYgIUFSQ0hfQVQ5MVNBTTlSTCAmJiAhQVJDSF9BVDkxQ0FQOQorCXNlbGVjdCBVU0JfR0FER0VUX1NFTEVDVEVECiAJaGVscAotCSAgIFRoZSBBTUQ1NTM2IFVEQyBpcyBwYXJ0IG9mIHRoZSBBTUQgR2VvZGUgQ1M1NTM2LCBhbiB4ODYgc291dGhicmlkZ2UuCi0JICAgSXQgaXMgYSBVU0IgSGlnaHNwZWVkIERNQSBjYXBhYmxlIFVTQiBkZXZpY2UgY29udHJvbGxlci4gQmVzaWRlIGVwMAotCSAgIGl0IHByb3ZpZGVzIDQgSU4gYW5kIDQgT1VUIGVuZHBvaW50cyAoYnVsayBvciBpbnRlcnJ1cHQgdHlwZSkuCi0JICAgVGhlIFVEQyBwb3J0IHN1cHBvcnRzIE9URyBvcGVyYXRpb24sIGFuZCBtYXkgYmUgdXNlZCBhcyBhIGhvc3QgcG9ydAotCSAgIGlmIGl0J3Mgbm90IGJlaW5nIHVzZWQgdG8gaW1wbGVtZW50IHBlcmlwaGVyYWwgb3IgT1RHIHJvbGVzLgorCSAgIE1hbnkgQXRtZWwgQVQ5MSBwcm9jZXNzb3JzIChzdWNoIGFzIHRoZSBBVDkxUk0yMDAwKSBoYXZlIGEKKwkgICBmdWxsIHNwZWVkIFVTQiBEZXZpY2UgUG9ydCB3aXRoIHN1cHBvcnQgZm9yIGZpdmUgY29uZmlndXJhYmxlCisJICAgZW5kcG9pbnRzIChwbHVzIGVuZHBvaW50IHplcm8pLgogCiAJICAgU2F5ICJ5IiB0byBsaW5rIHRoZSBkcml2ZXIgc3RhdGljYWxseSwgb3IgIm0iIHRvIGJ1aWxkIGEKLQkgICBkeW5hbWljYWxseSBsaW5rZWQgbW9kdWxlIGNhbGxlZCAiYW1kNTUzNnVkYyIgYW5kIGZvcmNlIGFsbAorCSAgIGR5bmFtaWNhbGx5IGxpbmtlZCBtb2R1bGUgY2FsbGVkICJhdDkxX3VkYyIgYW5kIGZvcmNlIGFsbAogCSAgIGdhZGdldCBkcml2ZXJzIHRvIGFsc28gYmUgZHluYW1pY2FsbHkgbGlua2VkLgogCi1jb25maWcgVVNCX0FNRDU1MzZVREMKK2NvbmZpZyBVU0JfQVQ5MQogCXRyaXN0YXRlCi0JZGVwZW5kcyBvbiBVU0JfR0FER0VUX0FNRDU1MzZVREMKKwlkZXBlbmRzIG9uIFVTQl9HQURHRVRfQVQ5MQogCWRlZmF1bHQgVVNCX0dBREdFVAotCXNlbGVjdCBVU0JfR0FER0VUX1NFTEVDVEVECiAKIGNvbmZpZyBVU0JfR0FER0VUX0FUTUVMX1VTQkEKIAlib29sZWFuICJBdG1lbCBVU0JBIgpAQCAtMTUwLDI4ICsxNzUsNTAgQEAKIAlkZWZhdWx0IFVTQl9HQURHRVQKIAlzZWxlY3QgVVNCX0dBREdFVF9TRUxFQ1RFRAogCi1jb25maWcgVVNCX0dBREdFVF9ORVQyMjgwCi0JYm9vbGVhbiAiTmV0Q2hpcCAyMjh4IgotCWRlcGVuZHMgb24gUENJCi0Jc2VsZWN0IFVTQl9HQURHRVRfRFVBTFNQRUVECitjb25maWcgVVNCX0dBREdFVF9MSDdBNDBYCisJYm9vbGVhbiAiTEg3QTQwWCIKKwlkZXBlbmRzIG9uIEFSQ0hfTEg3QTQwWAogCWhlbHAKLQkgICBOZXRDaGlwIDIyODAgLyAyMjgyIGlzIGEgUENJIGJhc2VkIFVTQiBwZXJpcGhlcmFsIGNvbnRyb2xsZXIgd2hpY2gKLQkgICBzdXBwb3J0cyBib3RoIGZ1bGwgYW5kIGhpZ2ggc3BlZWQgVVNCIDIuMCBkYXRhIHRyYW5zZmVycy4gIAotCSAgIAotCSAgIEl0IGhhcyBzaXggY29uZmlndXJhYmxlIGVuZHBvaW50cywgYXMgd2VsbCBhcyBlbmRwb2ludCB6ZXJvCi0JICAgKGZvciBjb250cm9sIHRyYW5zZmVycykgYW5kIHNldmVyYWwgZW5kcG9pbnRzIHdpdGggZGVkaWNhdGVkCi0JICAgZnVuY3Rpb25zLgorCSAgIFRoaXMgZHJpdmVyIHByb3ZpZGVzIFVTQiBEZXZpY2UgQ29udHJvbGxlciBkcml2ZXIgZm9yIExIN0E0MHgKIAotCSAgIFNheSAieSIgdG8gbGluayB0aGUgZHJpdmVyIHN0YXRpY2FsbHksIG9yICJtIiB0byBidWlsZCBhCi0JICAgZHluYW1pY2FsbHkgbGlua2VkIG1vZHVsZSBjYWxsZWQgIm5ldDIyODAiIGFuZCBmb3JjZSBhbGwKLQkgICBnYWRnZXQgZHJpdmVycyB0byBhbHNvIGJlIGR5bmFtaWNhbGx5IGxpbmtlZC4KLQotY29uZmlnIFVTQl9ORVQyMjgwCitjb25maWcgVVNCX0xIN0E0MFgKIAl0cmlzdGF0ZQotCWRlcGVuZHMgb24gVVNCX0dBREdFVF9ORVQyMjgwCisJZGVwZW5kcyBvbiBVU0JfR0FER0VUX0xIN0E0MFgKIAlkZWZhdWx0IFVTQl9HQURHRVQKIAlzZWxlY3QgVVNCX0dBREdFVF9TRUxFQ1RFRAogCitjb25maWcgVVNCX0dBREdFVF9PTUFQCisJYm9vbGVhbiAiT01BUCBVU0IgRGV2aWNlIENvbnRyb2xsZXIiCisJZGVwZW5kcyBvbiBBUkNIX09NQVAKKwlzZWxlY3QgSVNQMTMwMV9PTUFQIGlmIE1BQ0hfT01BUF9IMiB8fCBNQUNIX09NQVBfSDMgfHwgTUFDSF9PTUFQX0g0X09URworCWhlbHAKKwkgICBNYW55IFRleGFzIEluc3RydW1lbnRzIE9NQVAgcHJvY2Vzc29ycyBoYXZlIGZsZXhpYmxlIGZ1bGwKKwkgICBzcGVlZCBVU0IgZGV2aWNlIGNvbnRyb2xsZXJzLCB3aXRoIHN1cHBvcnQgZm9yIHVwIHRvIDMwCisJICAgZW5kcG9pbnRzIChwbHVzIGVuZHBvaW50IHplcm8pLiAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgdGhlCisJICAgY29udHJvbGxlciBpbiB0aGUgT01BUCAxNjExLCBhbmQgc2hvdWxkIHdvcmsgd2l0aCBjb250cm9sbGVycworCSAgIGluIG90aGVyIE9NQVAgcHJvY2Vzc29ycyB0b28sIGdpdmVuIG1pbm9yIHR3ZWFrcy4KKworCSAgIFNheSAieSIgdG8gbGluayB0aGUgZHJpdmVyIHN0YXRpY2FsbHksIG9yICJtIiB0byBidWlsZCBhCisJICAgZHluYW1pY2FsbHkgbGlua2VkIG1vZHVsZSBjYWxsZWQgIm9tYXBfdWRjIiBhbmQgZm9yY2UgYWxsCisJICAgZ2FkZ2V0IGRyaXZlcnMgdG8gYWxzbyBiZSBkeW5hbWljYWxseSBsaW5rZWQuCisKK2NvbmZpZyBVU0JfT01BUAorCXRyaXN0YXRlCisJZGVwZW5kcyBvbiBVU0JfR0FER0VUX09NQVAKKwlkZWZhdWx0IFVTQl9HQURHRVQKKwlzZWxlY3QgVVNCX0dBREdFVF9TRUxFQ1RFRAorCitjb25maWcgVVNCX09URworCWJvb2xlYW4gIk9URyBTdXBwb3J0IgorCWRlcGVuZHMgb24gVVNCX0dBREdFVF9PTUFQICYmIEFSQ0hfT01BUF9PVEcgJiYgVVNCX09IQ0lfSENECisJaGVscAorCSAgIFRoZSBtb3N0IG5vdGFibGUgZmVhdHVyZSBvZiBVU0IgT1RHIGlzIHN1cHBvcnQgZm9yIGEKKwkgICAiRHVhbC1Sb2xlIiBkZXZpY2UsIHdoaWNoIGNhbiBhY3QgYXMgZWl0aGVyIGEgZGV2aWNlCisJICAgb3IgYSBob3N0LiAgVGhlIGluaXRpYWwgcm9sZSBjaG9pY2UgY2FuIGJlIGNoYW5nZWQKKwkgICBsYXRlciwgd2hlbiB0d28gZHVhbC1yb2xlIGRldmljZXMgdGFsayB0byBlYWNoIG90aGVyLgorCisJICAgU2VsZWN0IHRoaXMgb25seSBpZiB5b3VyIE9NQVAgYm9hcmQgaGFzIGEgTWluaS1BQiBjb25uZWN0b3IuCisKIGNvbmZpZyBVU0JfR0FER0VUX1BYQTI1WAogCWJvb2xlYW4gIlBYQSAyNXggb3IgSVhQIDR4eCIKIAlkZXBlbmRzIG9uIChBUkNIX1BYQSAmJiBQWEEyNXgpIHx8IEFSQ0hfSVhQNFhYCkBAIC0yMDMsNiArMjUwLDYxIEBACiAJZGVmYXVsdCB5IGlmIFVTQl9FVEgKIAlkZWZhdWx0IHkgaWYgVVNCX0dfU0VSSUFMCiAKK2NvbmZpZyBVU0JfR0FER0VUX1BYQTI3WAorCWJvb2xlYW4gIlBYQSAyN3giCisJZGVwZW5kcyBvbiBBUkNIX1BYQSAmJiBQWEEyN3gKKwloZWxwCisJICAgSW50ZWwncyBQWEEgMjd4IHNlcmllcyBYU2NhbGUgQVJNIHY1VEUgcHJvY2Vzc29ycyBpbmNsdWRlCisJICAgYW4gaW50ZWdyYXRlZCBmdWxsIHNwZWVkIFVTQiAxLjEgZGV2aWNlIGNvbnRyb2xsZXIuCisKKwkgICBJdCBoYXMgdXAgdG8gMjMgZW5kcG9pbnRzLCBhcyB3ZWxsIGFzIGVuZHBvaW50IHplcm8gKGZvcgorCSAgIGNvbnRyb2wgdHJhbnNmZXJzKS4KKworCSAgIFNheSAieSIgdG8gbGluayB0aGUgZHJpdmVyIHN0YXRpY2FsbHksIG9yICJtIiB0byBidWlsZCBhCisJICAgZHluYW1pY2FsbHkgbGlua2VkIG1vZHVsZSBjYWxsZWQgInB4YTI3eF91ZGMiIGFuZCBmb3JjZSBhbGwKKwkgICBnYWRnZXQgZHJpdmVycyB0byBhbHNvIGJlIGR5bmFtaWNhbGx5IGxpbmtlZC4KKworY29uZmlnIFVTQl9QWEEyN1gKKwl0cmlzdGF0ZQorCWRlcGVuZHMgb24gVVNCX0dBREdFVF9QWEEyN1gKKwlkZWZhdWx0IFVTQl9HQURHRVQKKwlzZWxlY3QgVVNCX0dBREdFVF9TRUxFQ1RFRAorCitjb25maWcgVVNCX0dBREdFVF9TM0MyNDEwCisJYm9vbGVhbiAiUzNDMjQxMCBVU0IgRGV2aWNlIENvbnRyb2xsZXIiCisJZGVwZW5kcyBvbiBBUkNIX1MzQzI0MTAKKwloZWxwCisJICBTYW1zdW5nJ3MgUzNDMjQxMCBpcyBhbiBBUk0tNCBwcm9jZXNzb3Igd2l0aCBhbiBpbnRlZ3JhdGVkCisJICBmdWxsIHNwZWVkIFVTQiAxLjEgZGV2aWNlIGNvbnRyb2xsZXIuICBJdCBoYXMgNCBjb25maWd1cmFibGUKKwkgIGVuZHBvaW50cywgYXMgd2VsbCBhcyBlbmRwb2ludCB6ZXJvIChmb3IgY29udHJvbCB0cmFuc2ZlcnMpLgorCisJICBUaGlzIGRyaXZlciBoYXMgYmVlbiB0ZXN0ZWQgb24gdGhlIFMzQzI0MTAsIFMzQzI0MTIsIGFuZAorCSAgUzNDMjQ0MCBwcm9jZXNzb3JzLgorCitjb25maWcgVVNCX1MzQzI0MTAKKwl0cmlzdGF0ZQorCWRlcGVuZHMgb24gVVNCX0dBREdFVF9TM0MyNDEwCisJZGVmYXVsdCBVU0JfR0FER0VUCisJc2VsZWN0IFVTQl9HQURHRVRfU0VMRUNURUQKKworY29uZmlnIFVTQl9TM0MyNDEwX0RFQlVHCisJYm9vbGVhbiAiUzNDMjQxMCB1ZGMgZGVidWcgbWVzc2FnZXMiCisJZGVwZW5kcyBvbiBVU0JfR0FER0VUX1MzQzI0MTAKKworIworIyBDb250cm9sbGVycyBhdmFpbGFibGUgaW4gYm90aCBpbnRlZ3JhdGVkIGFuZCBkaXNjcmV0ZSB2ZXJzaW9ucworIworCisjIG11c2IgYnVpbGRzIGluIC4uL211c2IgYWxvbmcgd2l0aCBob3N0IHN1cHBvcnQKK2NvbmZpZyBVU0JfR0FER0VUX01VU0JfSERSQworCWJvb2xlYW4gIkludmVudHJhIEhEUkMgVVNCIFBlcmlwaGVyYWwgKFRJLCAuLi4pIgorCWRlcGVuZHMgb24gVVNCX01VU0JfSERSQyAmJiAoVVNCX01VU0JfUEVSSVBIRVJBTCB8fCBVU0JfTVVTQl9PVEcpCisJc2VsZWN0IFVTQl9HQURHRVRfRFVBTFNQRUVECisJc2VsZWN0IFVTQl9HQURHRVRfU0VMRUNURUQKKwloZWxwCisJICBUaGlzIE9URy1jYXBhYmxlIHNpbGljb24gSVAgaXMgdXNlZCBpbiBkdWFsIGRlc2lnbnMgaW5jbHVkaW5nCisJICB0aGUgVEkgRGFWaW5jaSwgT01BUCAyNDN4LCBPTUFQIDM0M3gsIGFuZCBUVVNCIDYwMTAuCisKIGNvbmZpZyBVU0JfR0FER0VUX002NjU5MgogCWJvb2xlYW4gIlJlbmVzYXMgTTY2NTkyIFVTQiBQZXJpcGhlcmFsIENvbnRyb2xsZXIiCiAJc2VsZWN0IFVTQl9HQURHRVRfRFVBTFNQRUVECkBAIC0yMzEsMjMgKzMzMyw2OSBAQAogCSAgIEhvd2V2ZXIsIHRoaXMgcHJvYmxlbSBpcyBpbXByb3ZlZCBpZiBjaGFuZ2UgYSB2YWx1ZSBvZgogCSAgIE5FVF9JUF9BTElHTiB0byA0LgogCi1jb25maWcgVVNCX0dBREdFVF9QWEEyN1gKLQlib29sZWFuICJQWEEgMjd4IgotCWRlcGVuZHMgb24gQVJDSF9QWEEgJiYgUFhBMjd4Ci0JaGVscAotCSAgIEludGVsJ3MgUFhBIDI3eCBzZXJpZXMgWFNjYWxlIEFSTSB2NVRFIHByb2Nlc3NvcnMgaW5jbHVkZQotCSAgIGFuIGludGVncmF0ZWQgZnVsbCBzcGVlZCBVU0IgMS4xIGRldmljZSBjb250cm9sbGVyLgorIworIyBDb250cm9sbGVycyBhdmFpbGFibGUgb25seSBpbiBkaXNjcmV0ZSBmb3JtIChhbmQgYWxsIFBDSSBjb250cm9sbGVycykKKyMKIAotCSAgIEl0IGhhcyB1cCB0byAyMyBlbmRwb2ludHMsIGFzIHdlbGwgYXMgZW5kcG9pbnQgemVybyAoZm9yCi0JICAgY29udHJvbCB0cmFuc2ZlcnMpLgorY29uZmlnIFVTQl9HQURHRVRfQU1ENTUzNlVEQworCWJvb2xlYW4gIkFNRDU1MzYgVURDIgorCWRlcGVuZHMgb24gUENJCisJc2VsZWN0IFVTQl9HQURHRVRfRFVBTFNQRUVECisJaGVscAorCSAgIFRoZSBBTUQ1NTM2IFVEQyBpcyBwYXJ0IG9mIHRoZSBBTUQgR2VvZGUgQ1M1NTM2LCBhbiB4ODYgc291dGhicmlkZ2UuCisJICAgSXQgaXMgYSBVU0IgSGlnaHNwZWVkIERNQSBjYXBhYmxlIFVTQiBkZXZpY2UgY29udHJvbGxlci4gQmVzaWRlIGVwMAorCSAgIGl0IHByb3ZpZGVzIDQgSU4gYW5kIDQgT1VUIGVuZHBvaW50cyAoYnVsayBvciBpbnRlcnJ1cHQgdHlwZSkuCisJICAgVGhlIFVEQyBwb3J0IHN1cHBvcnRzIE9URyBvcGVyYXRpb24sIGFuZCBtYXkgYmUgdXNlZCBhcyBhIGhvc3QgcG9ydAorCSAgIGlmIGl0J3Mgbm90IGJlaW5nIHVzZWQgdG8gaW1wbGVtZW50IHBlcmlwaGVyYWwgb3IgT1RHIHJvbGVzLgogCiAJICAgU2F5ICJ5IiB0byBsaW5rIHRoZSBkcml2ZXIgc3RhdGljYWxseSwgb3IgIm0iIHRvIGJ1aWxkIGEKLQkgICBkeW5hbWljYWxseSBsaW5rZWQgbW9kdWxlIGNhbGxlZCAicHhhMjd4X3VkYyIgYW5kIGZvcmNlIGFsbAorCSAgIGR5bmFtaWNhbGx5IGxpbmtlZCBtb2R1bGUgY2FsbGVkICJhbWQ1NTM2dWRjIiBhbmQgZm9yY2UgYWxsCiAJICAgZ2FkZ2V0IGRyaXZlcnMgdG8gYWxzbyBiZSBkeW5hbWljYWxseSBsaW5rZWQuCiAKLWNvbmZpZyBVU0JfUFhBMjdYCitjb25maWcgVVNCX0FNRDU1MzZVREMKIAl0cmlzdGF0ZQotCWRlcGVuZHMgb24gVVNCX0dBREdFVF9QWEEyN1gKKwlkZXBlbmRzIG9uIFVTQl9HQURHRVRfQU1ENTUzNlVEQworCWRlZmF1bHQgVVNCX0dBREdFVAorCXNlbGVjdCBVU0JfR0FER0VUX1NFTEVDVEVECisKK2NvbmZpZyBVU0JfR0FER0VUX0ZTTF9RRQorCWJvb2xlYW4gIkZyZWVzY2FsZSBRRS9DUE0gVVNCIERldmljZSBDb250cm9sbGVyIgorCWRlcGVuZHMgb24gRlNMX1NPQyAmJiAoUVVJQ0NfRU5HSU5FIHx8IENQTSkKKwloZWxwCisJICAgU29tZSBvZiBGcmVlc2NhbGUgUG93ZXJQQyBwcm9jZXNzb3JzIGhhdmUgYSBGdWxsIFNwZWVkCisJICAgUUUvQ1BNMiBVU0IgY29udHJvbGxlciwgd2hpY2ggc3VwcG9ydCBkZXZpY2UgbW9kZSB3aXRoIDQKKwkgICBwcm9ncmFtbWFibGUgZW5kcG9pbnRzLiBUaGlzIGRyaXZlciBzdXBwb3J0cyB0aGUKKwkgICBjb250cm9sbGVyIGluIHRoZSBNUEM4MzYwIGFuZCBNUEM4MjcyLCBhbmQgc2hvdWxkIHdvcmsgd2l0aAorCSAgIGNvbnRyb2xsZXJzIGhhdmluZyBRRSBvciBDUE0yLCBnaXZlbiBtaW5vciB0d2Vha3MuCisKKwkgICBTZXQgQ09ORklHX1VTQl9HQURHRVQgdG8gIm0iIHRvIGJ1aWxkIHRoaXMgZHJpdmVyIGFzIGEKKwkgICBkeW5taWNhbGx5IGxpbmtlZCBtb2R1bGUgY2FsbGVkICJmc2xfcWVfdWRjIi4KKworY29uZmlnIFVTQl9GU0xfUUUKKwl0cmlzdGF0ZQorCWRlcGVuZHMgb24gVVNCX0dBREdFVF9GU0xfUUUKKwlkZWZhdWx0IFVTQl9HQURHRVQKKwlzZWxlY3QgVVNCX0dBREdFVF9TRUxFQ1RFRAorCitjb25maWcgVVNCX0dBREdFVF9ORVQyMjgwCisJYm9vbGVhbiAiTmV0Q2hpcCAyMjh4IgorCWRlcGVuZHMgb24gUENJCisJc2VsZWN0IFVTQl9HQURHRVRfRFVBTFNQRUVECisJaGVscAorCSAgIE5ldENoaXAgMjI4MCAvIDIyODIgaXMgYSBQQ0kgYmFzZWQgVVNCIHBlcmlwaGVyYWwgY29udHJvbGxlciB3aGljaAorCSAgIHN1cHBvcnRzIGJvdGggZnVsbCBhbmQgaGlnaCBzcGVlZCBVU0IgMi4wIGRhdGEgdHJhbnNmZXJzLgorCisJICAgSXQgaGFzIHNpeCBjb25maWd1cmFibGUgZW5kcG9pbnRzLCBhcyB3ZWxsIGFzIGVuZHBvaW50IHplcm8KKwkgICAoZm9yIGNvbnRyb2wgdHJhbnNmZXJzKSBhbmQgc2V2ZXJhbCBlbmRwb2ludHMgd2l0aCBkZWRpY2F0ZWQKKwkgICBmdW5jdGlvbnMuCisKKwkgICBTYXkgInkiIHRvIGxpbmsgdGhlIGRyaXZlciBzdGF0aWNhbGx5LCBvciAibSIgdG8gYnVpbGQgYQorCSAgIGR5bmFtaWNhbGx5IGxpbmtlZCBtb2R1bGUgY2FsbGVkICJuZXQyMjgwIiBhbmQgZm9yY2UgYWxsCisJICAgZ2FkZ2V0IGRyaXZlcnMgdG8gYWxzbyBiZSBkeW5hbWljYWxseSBsaW5rZWQuCisKK2NvbmZpZyBVU0JfTkVUMjI4MAorCXRyaXN0YXRlCisJZGVwZW5kcyBvbiBVU0JfR0FER0VUX05FVDIyODAKIAlkZWZhdWx0IFVTQl9HQURHRVQKIAlzZWxlY3QgVVNCX0dBREdFVF9TRUxFQ1RFRAogCkBAIC0yNTcsNyArNDA1LDcgQEAKIAloZWxwCiAJICAgVGhlIFRvc2hpYmEgVEM4NkMwMDEgaXMgYSBQQ0kgZGV2aWNlIHdoaWNoIGluY2x1ZGVzIGNvbnRyb2xsZXJzCiAJICAgZm9yIGZ1bGwgc3BlZWQgVVNCIGRldmljZXMsIElERSwgSTJDLCBTSU8sIHBsdXMgYSBVU0IgaG9zdCAoT0hDSSkuCi0JICAgCisKIAkgICBUaGUgZGV2aWNlIGNvbnRyb2xsZXIgaGFzIHRocmVlIGNvbmZpZ3VyYWJsZSAoYnVsayBvciBpbnRlcnJ1cHQpCiAJICAgZW5kcG9pbnRzLCBwbHVzIGVuZHBvaW50IHplcm8gKGZvciBjb250cm9sIHRyYW5zZmVycykuCiAKQEAgLTI3Miw5OCArNDIwLDkgQEAKIAlzZWxlY3QgVVNCX0dBREdFVF9TRUxFQ1RFRAogCiAKLWNvbmZpZyBVU0JfR0FER0VUX0xIN0E0MFgKLQlib29sZWFuICJMSDdBNDBYIgotCWRlcGVuZHMgb24gQVJDSF9MSDdBNDBYCi0JaGVscAotICAgIFRoaXMgZHJpdmVyIHByb3ZpZGVzIFVTQiBEZXZpY2UgQ29udHJvbGxlciBkcml2ZXIgZm9yIExIN0E0MHgKLQotY29uZmlnIFVTQl9MSDdBNDBYCi0JdHJpc3RhdGUKLQlkZXBlbmRzIG9uIFVTQl9HQURHRVRfTEg3QTQwWAotCWRlZmF1bHQgVVNCX0dBREdFVAotCXNlbGVjdCBVU0JfR0FER0VUX1NFTEVDVEVECi0KLSMgYnVpbHQgaW4gLi4vbXVzYiBhbG9uZyB3aXRoIGhvc3Qgc3VwcG9ydAotY29uZmlnIFVTQl9HQURHRVRfTVVTQl9IRFJDCi0JYm9vbGVhbiAiSW52ZW50cmEgSERSQyBVU0IgUGVyaXBoZXJhbCAoVEksIC4uLikiCi0JZGVwZW5kcyBvbiBVU0JfTVVTQl9IRFJDICYmIChVU0JfTVVTQl9QRVJJUEhFUkFMIHx8IFVTQl9NVVNCX09URykKLQlzZWxlY3QgVVNCX0dBREdFVF9EVUFMU1BFRUQKLQlzZWxlY3QgVVNCX0dBREdFVF9TRUxFQ1RFRAotCWhlbHAKLQkgIFRoaXMgT1RHLWNhcGFibGUgc2lsaWNvbiBJUCBpcyB1c2VkIGluIGR1YWwgZGVzaWducyBpbmNsdWRpbmcKLQkgIHRoZSBUSSBEYVZpbmNpLCBPTUFQIDI0M3gsIE9NQVAgMzQzeCwgYW5kIFRVU0IgNjAxMC4KLQotY29uZmlnIFVTQl9HQURHRVRfT01BUAotCWJvb2xlYW4gIk9NQVAgVVNCIERldmljZSBDb250cm9sbGVyIgotCWRlcGVuZHMgb24gQVJDSF9PTUFQCi0Jc2VsZWN0IElTUDEzMDFfT01BUCBpZiBNQUNIX09NQVBfSDIgfHwgTUFDSF9PTUFQX0gzCi0JaGVscAotCSAgIE1hbnkgVGV4YXMgSW5zdHJ1bWVudHMgT01BUCBwcm9jZXNzb3JzIGhhdmUgZmxleGlibGUgZnVsbAotCSAgIHNwZWVkIFVTQiBkZXZpY2UgY29udHJvbGxlcnMsIHdpdGggc3VwcG9ydCBmb3IgdXAgdG8gMzAKLQkgICBlbmRwb2ludHMgKHBsdXMgZW5kcG9pbnQgemVybykuICBUaGlzIGRyaXZlciBzdXBwb3J0cyB0aGUKLQkgICBjb250cm9sbGVyIGluIHRoZSBPTUFQIDE2MTEsIGFuZCBzaG91bGQgd29yayB3aXRoIGNvbnRyb2xsZXJzCi0JICAgaW4gb3RoZXIgT01BUCBwcm9jZXNzb3JzIHRvbywgZ2l2ZW4gbWlub3IgdHdlYWtzLgotCi0JICAgU2F5ICJ5IiB0byBsaW5rIHRoZSBkcml2ZXIgc3RhdGljYWxseSwgb3IgIm0iIHRvIGJ1aWxkIGEKLQkgICBkeW5hbWljYWxseSBsaW5rZWQgbW9kdWxlIGNhbGxlZCAib21hcF91ZGMiIGFuZCBmb3JjZSBhbGwKLQkgICBnYWRnZXQgZHJpdmVycyB0byBhbHNvIGJlIGR5bmFtaWNhbGx5IGxpbmtlZC4KLQotY29uZmlnIFVTQl9PTUFQCi0JdHJpc3RhdGUKLQlkZXBlbmRzIG9uIFVTQl9HQURHRVRfT01BUAotCWRlZmF1bHQgVVNCX0dBREdFVAotCXNlbGVjdCBVU0JfR0FER0VUX1NFTEVDVEVECi0KLWNvbmZpZyBVU0JfT1RHCi0JYm9vbGVhbiAiT1RHIFN1cHBvcnQiCi0JZGVwZW5kcyBvbiBVU0JfR0FER0VUX09NQVAgJiYgQVJDSF9PTUFQX09URyAmJiBVU0JfT0hDSV9IQ0QKLQloZWxwCi0JICAgVGhlIG1vc3Qgbm90YWJsZSBmZWF0dXJlIG9mIFVTQiBPVEcgaXMgc3VwcG9ydCBmb3IgYQotCSAgICJEdWFsLVJvbGUiIGRldmljZSwgd2hpY2ggY2FuIGFjdCBhcyBlaXRoZXIgYSBkZXZpY2UKLQkgICBvciBhIGhvc3QuICBUaGUgaW5pdGlhbCByb2xlIGNob2ljZSBjYW4gYmUgY2hhbmdlZAotCSAgIGxhdGVyLCB3aGVuIHR3byBkdWFsLXJvbGUgZGV2aWNlcyB0YWxrIHRvIGVhY2ggb3RoZXIuCi0KLQkgICBTZWxlY3QgdGhpcyBvbmx5IGlmIHlvdXIgT01BUCBib2FyZCBoYXMgYSBNaW5pLUFCIGNvbm5lY3Rvci4KLQotY29uZmlnIFVTQl9HQURHRVRfUzNDMjQxMAotCWJvb2xlYW4gIlMzQzI0MTAgVVNCIERldmljZSBDb250cm9sbGVyIgotCWRlcGVuZHMgb24gQVJDSF9TM0MyNDEwCi0JaGVscAotCSAgU2Ftc3VuZydzIFMzQzI0MTAgaXMgYW4gQVJNLTQgcHJvY2Vzc29yIHdpdGggYW4gaW50ZWdyYXRlZAotCSAgZnVsbCBzcGVlZCBVU0IgMS4xIGRldmljZSBjb250cm9sbGVyLiAgSXQgaGFzIDQgY29uZmlndXJhYmxlCi0JICBlbmRwb2ludHMsIGFzIHdlbGwgYXMgZW5kcG9pbnQgemVybyAoZm9yIGNvbnRyb2wgdHJhbnNmZXJzKS4KLQotCSAgVGhpcyBkcml2ZXIgaGFzIGJlZW4gdGVzdGVkIG9uIHRoZSBTM0MyNDEwLCBTM0MyNDEyLCBhbmQKLQkgIFMzQzI0NDAgcHJvY2Vzc29ycy4KLQotY29uZmlnIFVTQl9TM0MyNDEwCi0JdHJpc3RhdGUKLQlkZXBlbmRzIG9uIFVTQl9HQURHRVRfUzNDMjQxMAotCWRlZmF1bHQgVVNCX0dBREdFVAotCXNlbGVjdCBVU0JfR0FER0VUX1NFTEVDVEVECi0KLWNvbmZpZyBVU0JfUzNDMjQxMF9ERUJVRwotCWJvb2xlYW4gIlMzQzI0MTAgdWRjIGRlYnVnIG1lc3NhZ2VzIgotCWRlcGVuZHMgb24gVVNCX0dBREdFVF9TM0MyNDEwCi0KLWNvbmZpZyBVU0JfR0FER0VUX0FUOTEKLQlib29sZWFuICJBVDkxIFVTQiBEZXZpY2UgUG9ydCIKLQlkZXBlbmRzIG9uIEFSQ0hfQVQ5MSAmJiAhQVJDSF9BVDkxU0FNOVJMICYmICFBUkNIX0FUOTFDQVA5Ci0Jc2VsZWN0IFVTQl9HQURHRVRfU0VMRUNURUQKLQloZWxwCi0JICAgTWFueSBBdG1lbCBBVDkxIHByb2Nlc3NvcnMgKHN1Y2ggYXMgdGhlIEFUOTFSTTIwMDApIGhhdmUgYQotCSAgIGZ1bGwgc3BlZWQgVVNCIERldmljZSBQb3J0IHdpdGggc3VwcG9ydCBmb3IgZml2ZSBjb25maWd1cmFibGUKLQkgICBlbmRwb2ludHMgKHBsdXMgZW5kcG9pbnQgemVybykuCi0KLQkgICBTYXkgInkiIHRvIGxpbmsgdGhlIGRyaXZlciBzdGF0aWNhbGx5LCBvciAibSIgdG8gYnVpbGQgYQotCSAgIGR5bmFtaWNhbGx5IGxpbmtlZCBtb2R1bGUgY2FsbGVkICJhdDkxX3VkYyIgYW5kIGZvcmNlIGFsbAotCSAgIGdhZGdldCBkcml2ZXJzIHRvIGFsc28gYmUgZHluYW1pY2FsbHkgbGlua2VkLgotCi1jb25maWcgVVNCX0FUOTEKLQl0cmlzdGF0ZQotCWRlcGVuZHMgb24gVVNCX0dBREdFVF9BVDkxCi0JZGVmYXVsdCBVU0JfR0FER0VUCisjCisjIExBU1QgLS0gZHVtbXkvZW11bGF0ZWQgY29udHJvbGxlcgorIwogCiBjb25maWcgVVNCX0dBREdFVF9EVU1NWV9IQ0QKIAlib29sZWFuICJEdW1teSBIQ0QgKERFVkVMT1BNRU5UKSIKQEAgLTU1MywxOSArNjEyLDIzIEBACiAJICBub3JtYWwgb3BlcmF0aW9uLgogCiBjb25maWcgVVNCX0dfU0VSSUFMCi0JdHJpc3RhdGUgIlNlcmlhbCBHYWRnZXQgKHdpdGggQ0RDIEFDTSBzdXBwb3J0KSIKKwl0cmlzdGF0ZSAiU2VyaWFsIEdhZGdldCAod2l0aCBDREMgQUNNIGFuZCBDREMgT0JFWCBzdXBwb3J0KSIKIAloZWxwCiAJICBUaGUgU2VyaWFsIEdhZGdldCB0YWxrcyB0byB0aGUgTGludXgtVVNCIGdlbmVyaWMgc2VyaWFsIGRyaXZlci4KIAkgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIGEgQ0RDLUFDTSBtb2R1bGUgb3B0aW9uLCB3aGljaCBjYW4gYmUgdXNlZAogCSAgdG8gaW50ZXJvcGVyYXRlIHdpdGggTVMtV2luZG93cyBob3N0cyBvciB3aXRoIHRoZSBMaW51eC1VU0IKIAkgICJjZGMtYWNtIiBkcml2ZXIuCiAKKwkgIFRoaXMgZHJpdmVyIGFsc28gc3VwcG9ydHMgYSBDREMtT0JFWCBvcHRpb24uICBZb3Ugd2lsbCBuZWVkIGEKKwkgIHVzZXIgc3BhY2UgT0JFWCBzZXJ2ZXIgdGFsa2luZyB0byAvZGV2L3R0eUdTKiwgc2luY2UgdGhlIGtlcm5lbAorCSAgaXRzZWxmIGRvZXNuJ3QgaW1wbGVtZW50IHRoZSBPQkVYIHByb3RvY29sLgorCiAJICBTYXkgInkiIHRvIGxpbmsgdGhlIGRyaXZlciBzdGF0aWNhbGx5LCBvciAibSIgdG8gYnVpbGQgYQogCSAgZHluYW1pY2FsbHkgbGlua2VkIG1vZHVsZSBjYWxsZWQgImdfc2VyaWFsIi4KIAogCSAgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBEb2N1bWVudGF0aW9uL3VzYi9nYWRnZXRfc2VyaWFsLnR4dAogCSAgd2hpY2ggaW5jbHVkZXMgaW5zdHJ1Y3Rpb25zIGFuZCBhICJkcml2ZXIgaW5mbyBmaWxlIiBuZWVkZWQgdG8KLQkgIG1ha2UgTVMtV2luZG93cyB3b3JrIHdpdGggdGhpcyBkcml2ZXIuCisJICBtYWtlIE1TLVdpbmRvd3Mgd29yayB3aXRoIENEQyBBQ00uCiAKIGNvbmZpZyBVU0JfTUlESV9HQURHRVQKIAl0cmlzdGF0ZSAiTUlESSBHYWRnZXQgKEVYUEVSSU1FTlRBTCkiCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvTWFrZWZpbGUgYi9kcml2ZXJzL3VzYi9nYWRnZXQvTWFrZWZpbGUKaW5kZXggZmNiNWNiOS4uYmQ0MDQxYiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L01ha2VmaWxlCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9NYWtlZmlsZQpAQCAtMTgsMjggKzE4LDIwIEBACiBvYmotJChDT05GSUdfVVNCX0FUTUVMX1VTQkEpCSs9IGF0bWVsX3VzYmFfdWRjLm8KIG9iai0kKENPTkZJR19VU0JfRlNMX1VTQjIpCSs9IGZzbF91c2IyX3VkYy5vCiBvYmotJChDT05GSUdfVVNCX002NjU5MikJKz0gbTY2NTkyLXVkYy5vCitvYmotJChDT05GSUdfVVNCX0ZTTF9RRSkJKz0gZnNsX3FlX3VkYy5vCiAKICMKICMgVVNCIGdhZGdldCBkcml2ZXJzCiAjCi1DX1VUSUxTID0JY29tcG9zaXRlLm8gdXNic3RyaW5nLm8gY29uZmlnLm8gZXBhdXRvY29uZi5vCi0KLWdfemVyby1vYmpzCQkJOj0gemVyby5vIGZfc291cmNlc2luay5vIGZfbG9vcGJhY2subyAkKENfVVRJTFMpCi1nX2V0aGVyLW9ianMJCQk6PSBldGhlci5vIHVfZXRoZXIubyBmX3N1YnNldC5vIGZfZWNtLm8gJChDX1VUSUxTKQotZ19zZXJpYWwtb2JqcwkJCTo9IHNlcmlhbC5vIHVfc2VyaWFsLm8gZl9hY20ubyBmX3NlcmlhbC5vICQoQ19VVElMUykKLWdfbWlkaS1vYmpzCQkJOj0gZ21pZGkubyB1c2JzdHJpbmcubyBjb25maWcubyBlcGF1dG9jb25mLm8KK2dfemVyby1vYmpzCQkJOj0gemVyby5vCitnX2V0aGVyLW9ianMJCQk6PSBldGhlci5vCitnX3NlcmlhbC1vYmpzCQkJOj0gc2VyaWFsLm8KK2dfbWlkaS1vYmpzCQkJOj0gZ21pZGkubwogZ2FkZ2V0ZnMtb2JqcwkJCTo9IGlub2RlLm8KLWdfZmlsZV9zdG9yYWdlLW9ianMJCTo9IGZpbGVfc3RvcmFnZS5vIHVzYnN0cmluZy5vIGNvbmZpZy5vIFwKLQkJCQkJZXBhdXRvY29uZi5vCi1nX3ByaW50ZXItb2JqcwkJCTo9IHByaW50ZXIubyB1c2JzdHJpbmcubyBjb25maWcubyBcCi0JCQkJCWVwYXV0b2NvbmYubwotZ19jZGMtb2JqcwkJCTo9IGNkYzIubyB1X2V0aGVyLm8gZl9lY20ubyBcCi0JCQkJCXVfc2VyaWFsLm8gZl9hY20ubyAkKENfVVRJTFMpCitnX2ZpbGVfc3RvcmFnZS1vYmpzCQk6PSBmaWxlX3N0b3JhZ2UubworZ19wcmludGVyLW9ianMJCQk6PSBwcmludGVyLm8KK2dfY2RjLW9ianMJCQk6PSBjZGMyLm8KIAotaWZlcSAoJChDT05GSUdfVVNCX0VUSF9STkRJUykseSkKLQlnX2V0aGVyLW9ianMJCSs9IGZfcm5kaXMubyBybmRpcy5vCi1lbmRpZgotIAogb2JqLSQoQ09ORklHX1VTQl9aRVJPKQkJKz0gZ196ZXJvLm8KIG9iai0kKENPTkZJR19VU0JfRVRIKQkJKz0gZ19ldGhlci5vCiBvYmotJChDT05GSUdfVVNCX0dBREdFVEZTKQkrPSBnYWRnZXRmcy5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvY2RjMi5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2NkYzIuYwppbmRleCBhMzlhNGI5Li41NDk1YjE3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvY2RjMi5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9jZGMyLmMKQEAgLTQzLDYgKzQzLDI1IEBACiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKKy8qCisgKiBLYnVpbGQgaXMgbm90IHZlcnkgY29vcGVyYXRpdmUgd2l0aCByZXNwZWN0IHRvIGxpbmtpbmcgc2VwYXJhdGVseQorICogY29tcGlsZWQgbGlicmFyeSBvYmplY3RzIGludG8gb25lIG1vZHVsZS4gIFNvIGZvciBub3cgd2Ugd29uJ3QgdXNlCisgKiBzZXBhcmF0ZSBjb21waWxhdGlvbiAuLi4gZW5zdXJpbmcgaW5pdC9leGl0IHNlY3Rpb25zIHdvcmsgdG8gc2hyaW5rCisgKiB0aGUgcnVudGltZSBmb290cHJpbnQsIGFuZCBnaXZpbmcgdXMgYXQgbGVhc3Qgc29tZSBwYXJ0cyBvZiB3aGF0CisgKiBhICJnY2MgLS1jb21iaW5lIC4uLiBwYXJ0MS5jIHBhcnQyLmMgcGFydDMuYyAuLi4gIiBidWlsZCB3b3VsZC4KKyAqLworCisjaW5jbHVkZSAiY29tcG9zaXRlLmMiCisjaW5jbHVkZSAidXNic3RyaW5nLmMiCisjaW5jbHVkZSAiY29uZmlnLmMiCisjaW5jbHVkZSAiZXBhdXRvY29uZi5jIgorI2luY2x1ZGUgInVfc2VyaWFsLmMiCisjaW5jbHVkZSAiZl9hY20uYyIKKyNpbmNsdWRlICJmX2VjbS5jIgorI2luY2x1ZGUgInVfZXRoZXIuYyIKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKwogc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2Rlc2NyaXB0b3IgZGV2aWNlX2Rlc2MgPSB7CiAJLmJMZW5ndGggPQkJc2l6ZW9mIGRldmljZV9kZXNjLAogCS5iRGVzY3JpcHRvclR5cGUgPQlVU0JfRFRfREVWSUNFLApAQCAtMTM2LDcgKzE1NSw2IEBACiAJLmJDb25maWd1cmF0aW9uVmFsdWUJPSAxLAogCS8qIC5pQ29uZmlndXJhdGlvbiA9IERZTkFNSUMgKi8KIAkuYm1BdHRyaWJ1dGVzCQk9IFVTQl9DT05GSUdfQVRUX1NFTEZQT1dFUiwKLQkuYk1heFBvd2VyCQk9IDEsCS8qIDIgbUEsIG1pbmltYWwgKi8KIH07CiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCkBAIC0xNDgsNyArMTY2LDggQEAKIAlpbnQJCQlzdGF0dXM7CiAKIAlpZiAoIWNhbl9zdXBwb3J0X2VjbShjZGV2LT5nYWRnZXQpKSB7Ci0JCUVSUk9SKGNkZXYsICJjb250cm9sbGVyICclcycgbm90IHVzYWJsZVxuIiwgZ2FkZ2V0LT5uYW1lKTsKKwkJZGV2X2VycigmZ2FkZ2V0LT5kZXYsICJjb250cm9sbGVyICclcycgbm90IHVzYWJsZVxuIiwKKwkJCQlnYWRnZXQtPm5hbWUpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKQEAgLTIwMyw3ICsyMjIsOCBAQAogCWlmIChzdGF0dXMgPCAwKQogCQlnb3RvIGZhaWwxOwogCi0JSU5GTyhjZGV2LCAiJXMsIHZlcnNpb246ICIgRFJJVkVSX1ZFUlNJT04gIlxuIiwgRFJJVkVSX0RFU0MpOworCWRldl9pbmZvKCZnYWRnZXQtPmRldiwgIiVzLCB2ZXJzaW9uOiAiIERSSVZFUl9WRVJTSU9OICJcbiIsCisJCQlEUklWRVJfREVTQyk7CiAKIAlyZXR1cm4gMDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L2NvbXBvc2l0ZS5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2NvbXBvc2l0ZS5jCmluZGV4IDg1Yzg3NmMuLmYyZGEwMjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9jb21wb3NpdGUuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvY29tcG9zaXRlLmMKQEAgLTEyOCw2ICsxMjgsNzAgQEAKIH0KIAogLyoqCisgKiB1c2JfZnVuY3Rpb25fZGVhY3RpdmF0ZSAtIHByZXZlbnQgZnVuY3Rpb24gYW5kIGdhZGdldCBlbnVtZXJhdGlvbgorICogQGZ1bmN0aW9uOiB0aGUgZnVuY3Rpb24gdGhhdCBpc24ndCB5ZXQgcmVhZHkgdG8gcmVzcG9uZAorICoKKyAqIEJsb2NrcyByZXNwb25zZSBvZiB0aGUgZ2FkZ2V0IGRyaXZlciB0byBob3N0IGVudW1lcmF0aW9uIGJ5CisgKiBwcmV2ZW50aW5nIHRoZSBkYXRhIGxpbmUgcHVsbHVwIGZyb20gYmVpbmcgYWN0aXZhdGVkLiAgVGhpcyBpcworICogbm9ybWFsbHkgY2FsbGVkIGR1cmluZyBAYmluZCgpIHByb2Nlc3NpbmcgdG8gY2hhbmdlIGZyb20gdGhlCisgKiBpbml0aWFsICJyZWFkeSB0byByZXNwb25kIiBzdGF0ZSwgb3Igd2hlbiBhIHJlcXVpcmVkIHJlc291cmNlCisgKiBiZWNvbWVzIGF2YWlsYWJsZS4KKyAqCisgKiBGb3IgZXhhbXBsZSwgZHJpdmVycyB0aGF0IHNlcnZlIGFzIGEgcGFzc3Rocm91Z2ggdG8gYSB1c2Vyc3BhY2UKKyAqIGRhZW1vbiBjYW4gYmxvY2sgZW51bWVyYXRpb24gdW5sZXNzIHRoYXQgZGFlbW9uIChzdWNoIGFzIGFuIE9CRVgsCisgKiBNVFAsIG9yIHByaW50IHNlcnZlcikgaXMgcmVhZHkgdG8gaGFuZGxlIGhvc3QgcmVxdWVzdHMuCisgKgorICogTm90IGFsbCBzeXN0ZW1zIHN1cHBvcnQgc29mdHdhcmUgY29udHJvbCBvZiB0aGVpciBVU0IgcGVyaXBoZXJhbAorICogZGF0YSBwdWxsdXBzLgorICoKKyAqIFJldHVybnMgemVybyBvbiBzdWNjZXNzLCBlbHNlIG5lZ2F0aXZlIGVycm5vLgorICovCitpbnQgdXNiX2Z1bmN0aW9uX2RlYWN0aXZhdGUoc3RydWN0IHVzYl9mdW5jdGlvbiAqZnVuY3Rpb24pCit7CisJc3RydWN0IHVzYl9jb21wb3NpdGVfZGV2CSpjZGV2ID0gZnVuY3Rpb24tPmNvbmZpZy0+Y2RldjsKKwlpbnQJCQkJc3RhdHVzID0gMDsKKworCXNwaW5fbG9jaygmY2Rldi0+bG9jayk7CisKKwlpZiAoY2Rldi0+ZGVhY3RpdmF0aW9ucyA9PSAwKQorCQlzdGF0dXMgPSB1c2JfZ2FkZ2V0X2Rpc2Nvbm5lY3QoY2Rldi0+Z2FkZ2V0KTsKKwlpZiAoc3RhdHVzID09IDApCisJCWNkZXYtPmRlYWN0aXZhdGlvbnMrKzsKKworCXNwaW5fdW5sb2NrKCZjZGV2LT5sb2NrKTsKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKioKKyAqIHVzYl9mdW5jdGlvbl9hY3RpdmF0ZSAtIGFsbG93IGZ1bmN0aW9uIGFuZCBnYWRnZXQgZW51bWVyYXRpb24KKyAqIEBmdW5jdGlvbjogZnVuY3Rpb24gb24gd2hpY2ggdXNiX2Z1bmN0aW9uX2FjdGl2YXRlKCkgd2FzIGNhbGxlZAorICoKKyAqIFJldmVyc2VzIGVmZmVjdCBvZiB1c2JfZnVuY3Rpb25fZGVhY3RpdmF0ZSgpLiAgSWYgbm8gbW9yZSBmdW5jdGlvbnMKKyAqIGFyZSBkZWxheWluZyB0aGVpciBhY3RpdmF0aW9uLCB0aGUgZ2FkZ2V0IGRyaXZlciB3aWxsIHJlc3BvbmQgdG8KKyAqIGhvc3QgZW51bWVyYXRpb24gcHJvY2VkdXJlcy4KKyAqCisgKiBSZXR1cm5zIHplcm8gb24gc3VjY2VzcywgZWxzZSBuZWdhdGl2ZSBlcnJuby4KKyAqLworaW50IHVzYl9mdW5jdGlvbl9hY3RpdmF0ZShzdHJ1Y3QgdXNiX2Z1bmN0aW9uICpmdW5jdGlvbikKK3sKKwlzdHJ1Y3QgdXNiX2NvbXBvc2l0ZV9kZXYJKmNkZXYgPSBmdW5jdGlvbi0+Y29uZmlnLT5jZGV2OworCWludAkJCQlzdGF0dXMgPSAwOworCisJc3Bpbl9sb2NrKCZjZGV2LT5sb2NrKTsKKworCWlmIChXQVJOX09OKGNkZXYtPmRlYWN0aXZhdGlvbnMgPT0gMCkpCisJCXN0YXR1cyA9IC1FSU5WQUw7CisJZWxzZSB7CisJCWNkZXYtPmRlYWN0aXZhdGlvbnMtLTsKKwkJaWYgKGNkZXYtPmRlYWN0aXZhdGlvbnMgPT0gMCkKKwkJCXN0YXR1cyA9IHVzYl9nYWRnZXRfY29ubmVjdChjZGV2LT5nYWRnZXQpOworCX0KKworCXNwaW5fdW5sb2NrKCZjZGV2LT5sb2NrKTsKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKioKICAqIHVzYl9pbnRlcmZhY2VfaWQoKSAtIGFsbG9jYXRlIGFuIHVudXNlZCBpbnRlcmZhY2UgSUQKICAqIEBjb25maWc6IGNvbmZpZ3VyYXRpb24gYXNzb2NpYXRlZCB3aXRoIHRoZSBpbnRlcmZhY2UKICAqIEBmdW5jdGlvbjogZnVuY3Rpb24gaGFuZGxpbmcgdGhlIGludGVyZmFjZQpAQCAtMTgxLDcgKzI0NSw3IEBACiAJYy0+YkNvbmZpZ3VyYXRpb25WYWx1ZSA9IGNvbmZpZy0+YkNvbmZpZ3VyYXRpb25WYWx1ZTsKIAljLT5pQ29uZmlndXJhdGlvbiA9IGNvbmZpZy0+aUNvbmZpZ3VyYXRpb247CiAJYy0+Ym1BdHRyaWJ1dGVzID0gVVNCX0NPTkZJR19BVFRfT05FIHwgY29uZmlnLT5ibUF0dHJpYnV0ZXM7Ci0JYy0+Yk1heFBvd2VyID0gY29uZmlnLT5iTWF4UG93ZXI7CisJYy0+Yk1heFBvd2VyID0gY29uZmlnLT5iTWF4UG93ZXIgPyA6IChDT05GSUdfVVNCX0dBREdFVF9WQlVTX0RSQVcgLyAyKTsKIAogCS8qIFRoZXJlIG1heSBiZSBlLmcuIE9URyBkZXNjcmlwdG9ycyAqLwogCWlmIChjb25maWctPmRlc2NyaXB0b3JzKSB7CkBAIC0zNjgsNyArNDMyLDcgQEAKIAl9CiAKIAkvKiB3aGVuIHdlIHJldHVybiwgYmUgc3VyZSBvdXIgcG93ZXIgdXNhZ2UgaXMgdmFsaWQgKi8KLQlwb3dlciA9IDIgKiBjLT5iTWF4UG93ZXI7CisJcG93ZXIgPSBjLT5iTWF4UG93ZXIgPyAoMiAqIGMtPmJNYXhQb3dlcikgOiBDT05GSUdfVVNCX0dBREdFVF9WQlVTX0RSQVc7CiBkb25lOgogCXVzYl9nYWRnZXRfdmJ1c19kcmF3KGdhZGdldCwgcG93ZXIpOwogCXJldHVybiByZXN1bHQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvZHVtbXlfaGNkLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZHVtbXlfaGNkLmMKaW5kZXggNzYwMGEwYy4uOTA2NDY5NiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2R1bW15X2hjZC5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9kdW1teV9oY2QuYwpAQCAtODIsNiArODIsNyBAQAogCWNvbnN0IHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqZGVzYzsKIAlzdHJ1Y3QgdXNiX2VwCQkJZXA7CiAJdW5zaWduZWQJCQloYWx0ZWQgOiAxOworCXVuc2lnbmVkCQkJd2VkZ2VkIDogMTsKIAl1bnNpZ25lZAkJCWFscmVhZHlfc2VlbiA6IDE7CiAJdW5zaWduZWQJCQlzZXR1cF9zdGFnZSA6IDE7CiB9OwpAQCAtNDM2LDYgKzQzNyw3IEBACiAJLyogYXQgdGhpcyBwb2ludCByZWFsIGhhcmR3YXJlIHNob3VsZCBiZSBOQUtpbmcgdHJhbnNmZXJzCiAJICogdG8gdGhhdCBlbmRwb2ludCwgdW50aWwgYSBidWZmZXIgaXMgcXVldWVkIHRvIGl0LgogCSAqLworCWVwLT5oYWx0ZWQgPSBlcC0+d2VkZ2VkID0gMDsKIAlyZXR2YWwgPSAwOwogZG9uZToKIAlyZXR1cm4gcmV0dmFsOwpAQCAtNTk3LDcgKzU5OSw3IEBACiB9CiAKIHN0YXRpYyBpbnQKLWR1bW15X3NldF9oYWx0IChzdHJ1Y3QgdXNiX2VwICpfZXAsIGludCB2YWx1ZSkKK2R1bW15X3NldF9oYWx0X2FuZF93ZWRnZShzdHJ1Y3QgdXNiX2VwICpfZXAsIGludCB2YWx1ZSwgaW50IHdlZGdlZCkKIHsKIAlzdHJ1Y3QgZHVtbXlfZXAJCSplcDsKIAlzdHJ1Y3QgZHVtbXkJCSpkdW07CkBAIC02MDksMTYgKzYxMSwzMiBAQAogCWlmICghZHVtLT5kcml2ZXIpCiAJCXJldHVybiAtRVNIVVRET1dOOwogCWlmICghdmFsdWUpCi0JCWVwLT5oYWx0ZWQgPSAwOworCQllcC0+aGFsdGVkID0gZXAtPndlZGdlZCA9IDA7CiAJZWxzZSBpZiAoZXAtPmRlc2MgJiYgKGVwLT5kZXNjLT5iRW5kcG9pbnRBZGRyZXNzICYgVVNCX0RJUl9JTikgJiYKIAkJCSFsaXN0X2VtcHR5ICgmZXAtPnF1ZXVlKSkKIAkJcmV0dXJuIC1FQUdBSU47Ci0JZWxzZQorCWVsc2UgewogCQllcC0+aGFsdGVkID0gMTsKKwkJaWYgKHdlZGdlZCkKKwkJCWVwLT53ZWRnZWQgPSAxOworCX0KIAkvKiBGSVhNRSBjbGVhciBlbXVsYXRlZCBkYXRhIHRvZ2dsZSB0b28gKi8KIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludAorZHVtbXlfc2V0X2hhbHQoc3RydWN0IHVzYl9lcCAqX2VwLCBpbnQgdmFsdWUpCit7CisJcmV0dXJuIGR1bW15X3NldF9oYWx0X2FuZF93ZWRnZShfZXAsIHZhbHVlLCAwKTsKK30KKworc3RhdGljIGludCBkdW1teV9zZXRfd2VkZ2Uoc3RydWN0IHVzYl9lcCAqX2VwKQoreworCWlmICghX2VwIHx8IF9lcC0+bmFtZSA9PSBlcDBuYW1lKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlyZXR1cm4gZHVtbXlfc2V0X2hhbHRfYW5kX3dlZGdlKF9lcCwgMSwgMSk7Cit9CisKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2VwX29wcyBkdW1teV9lcF9vcHMgPSB7CiAJLmVuYWJsZQkJPSBkdW1teV9lbmFibGUsCiAJLmRpc2FibGUJPSBkdW1teV9kaXNhYmxlLApAQCAtNjMwLDYgKzY0OCw3IEBACiAJLmRlcXVldWUJPSBkdW1teV9kZXF1ZXVlLAogCiAJLnNldF9oYWx0CT0gZHVtbXlfc2V0X2hhbHQsCisJLnNldF93ZWRnZQk9IGR1bW15X3NldF93ZWRnZSwKIH07CiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCkBAIC03NjAsNyArNzc5LDggQEAKIAkJZXAtPmVwLm5hbWUgPSBlcF9uYW1lIFtpXTsKIAkJZXAtPmVwLm9wcyA9ICZkdW1teV9lcF9vcHM7CiAJCWxpc3RfYWRkX3RhaWwgKCZlcC0+ZXAuZXBfbGlzdCwgJmR1bS0+Z2FkZ2V0LmVwX2xpc3QpOwotCQllcC0+aGFsdGVkID0gZXAtPmFscmVhZHlfc2VlbiA9IGVwLT5zZXR1cF9zdGFnZSA9IDA7CisJCWVwLT5oYWx0ZWQgPSBlcC0+d2VkZ2VkID0gZXAtPmFscmVhZHlfc2VlbiA9CisJCQkJZXAtPnNldHVwX3N0YWdlID0gMDsKIAkJZXAtPmVwLm1heHBhY2tldCA9IH4wOwogCQllcC0+bGFzdF9pbyA9IGppZmZpZXM7CiAJCWVwLT5nYWRnZXQgPSAmZHVtLT5nYWRnZXQ7CkBAIC0xMzUxLDcgKzEzNzEsNyBAQAogCQkJCX0gZWxzZSBpZiAoc2V0dXAuYlJlcXVlc3RUeXBlID09IEVwX1JlcXVlc3QpIHsKIAkJCQkJLy8gZW5kcG9pbnQgaGFsdAogCQkJCQllcDIgPSBmaW5kX2VuZHBvaW50IChkdW0sIHdfaW5kZXgpOwotCQkJCQlpZiAoIWVwMikgeworCQkJCQlpZiAoIWVwMiB8fCBlcDItPmVwLm5hbWUgPT0gZXAwbmFtZSkgewogCQkJCQkJdmFsdWUgPSAtRU9QTk9UU1VQUDsKIAkJCQkJCWJyZWFrOwogCQkJCQl9CkBAIC0xMzgwLDcgKzE0MDAsOCBAQAogCQkJCQkJdmFsdWUgPSAtRU9QTk9UU1VQUDsKIAkJCQkJCWJyZWFrOwogCQkJCQl9Ci0JCQkJCWVwMi0+aGFsdGVkID0gMDsKKwkJCQkJaWYgKCFlcDItPndlZGdlZCkKKwkJCQkJCWVwMi0+aGFsdGVkID0gMDsKIAkJCQkJdmFsdWUgPSAwOwogCQkJCQlzdGF0dXMgPSAwOwogCQkJCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9ldGhlci5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2V0aGVyLmMKaW5kZXggYmNhYzJlNi4uMzcyNTJkMCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2V0aGVyLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2V0aGVyLmMKQEAgLTk2LDYgKzk2LDI4IEBACiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKKy8qCisgKiBLYnVpbGQgaXMgbm90IHZlcnkgY29vcGVyYXRpdmUgd2l0aCByZXNwZWN0IHRvIGxpbmtpbmcgc2VwYXJhdGVseQorICogY29tcGlsZWQgbGlicmFyeSBvYmplY3RzIGludG8gb25lIG1vZHVsZS4gIFNvIGZvciBub3cgd2Ugd29uJ3QgdXNlCisgKiBzZXBhcmF0ZSBjb21waWxhdGlvbiAuLi4gZW5zdXJpbmcgaW5pdC9leGl0IHNlY3Rpb25zIHdvcmsgdG8gc2hyaW5rCisgKiB0aGUgcnVudGltZSBmb290cHJpbnQsIGFuZCBnaXZpbmcgdXMgYXQgbGVhc3Qgc29tZSBwYXJ0cyBvZiB3aGF0CisgKiBhICJnY2MgLS1jb21iaW5lIC4uLiBwYXJ0MS5jIHBhcnQyLmMgcGFydDMuYyAuLi4gIiBidWlsZCB3b3VsZC4KKyAqLworI2luY2x1ZGUgImNvbXBvc2l0ZS5jIgorI2luY2x1ZGUgInVzYnN0cmluZy5jIgorI2luY2x1ZGUgImNvbmZpZy5jIgorI2luY2x1ZGUgImVwYXV0b2NvbmYuYyIKKworI2luY2x1ZGUgImZfZWNtLmMiCisjaW5jbHVkZSAiZl9zdWJzZXQuYyIKKyNpZmRlZglDT05GSUdfVVNCX0VUSF9STkRJUworI2luY2x1ZGUgImZfcm5kaXMuYyIKKyNpbmNsdWRlICJybmRpcy5jIgorI2VuZGlmCisjaW5jbHVkZSAidV9ldGhlci5jIgorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCiAvKiBETyBOT1QgUkVVU0UgVEhFU0UgSURzIHdpdGggYSBwcm90b2NvbC1pbmNvbXBhdGlibGUgZHJpdmVyISEgIEV2ZXIhIQogICogSW5zdGVhZDogIGFsbG9jYXRlIHlvdXIgb3duLCB1c2luZyBub3JtYWwgVVNCLUlGIHByb2NlZHVyZXMuCiAgKi8KQEAgLTIyMCw3ICsyNDIsNiBAQAogCS5iQ29uZmlndXJhdGlvblZhbHVlCT0gMiwKIAkvKiAuaUNvbmZpZ3VyYXRpb24gPSBEWU5BTUlDICovCiAJLmJtQXR0cmlidXRlcwkJPSBVU0JfQ09ORklHX0FUVF9TRUxGUE9XRVIsCi0JLmJNYXhQb3dlcgkJPSAxLAkvKiAyIG1BLCBtaW5pbWFsICovCiB9OwogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwpAQCAtMjQ5LDcgKzI3MCw2IEBACiAJLmJDb25maWd1cmF0aW9uVmFsdWUJPSAxLAogCS8qIC5pQ29uZmlndXJhdGlvbiA9IERZTkFNSUMgKi8KIAkuYm1BdHRyaWJ1dGVzCQk9IFVTQl9DT05GSUdfQVRUX1NFTEZQT1dFUiwKLQkuYk1heFBvd2VyCQk9IDEsCS8qIDIgbUEsIG1pbmltYWwgKi8KIH07CiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCkBAIC0yOTMsNyArMzEzLDggQEAKIAkJICogYnV0IGlmIHRoZSBjb250cm9sbGVyIGlzbid0IHJlY29nbml6ZWQgYXQgYWxsIHRoZW4KIAkJICogdGhhdCBhc3N1bXB0aW9uIGlzIGEgYml0IG1vcmUgbGlrZWx5IHRvIGJlIHdyb25nLgogCQkgKi8KLQkJV0FSTklORyhjZGV2LCAiY29udHJvbGxlciAnJXMnIG5vdCByZWNvZ25pemVkOyB0cnlpbmcgJXNcbiIsCisJCWRldl93YXJuKCZnYWRnZXQtPmRldiwKKwkJCQkiY29udHJvbGxlciAnJXMnIG5vdCByZWNvZ25pemVkOyB0cnlpbmcgJXNcbiIsCiAJCQkJZ2FkZ2V0LT5uYW1lLAogCQkJCWV0aF9jb25maWdfZHJpdmVyLmxhYmVsKTsKIAkJZGV2aWNlX2Rlc2MuYmNkRGV2aWNlID0KQEAgLTMzMiw3ICszNTMsOCBAQAogCWlmIChzdGF0dXMgPCAwKQogCQlnb3RvIGZhaWw7CiAKLQlJTkZPKGNkZXYsICIlcywgdmVyc2lvbjogIiBEUklWRVJfVkVSU0lPTiAiXG4iLCBEUklWRVJfREVTQyk7CisJZGV2X2luZm8oJmdhZGdldC0+ZGV2LCAiJXMsIHZlcnNpb246ICIgRFJJVkVSX1ZFUlNJT04gIlxuIiwKKwkJCURSSVZFUl9ERVNDKTsKIAogCXJldHVybiAwOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvZl9lY20uYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9mX2VjbS5jCmluZGV4IGEyYjVjMDkuLjRhZTU3OTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9mX2VjbS5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9mX2VjbS5jCkBAIC04Myw3ICs4Myw3IEBACiB9CiAKIC8qIHBlYWsgKHRoZW9yZXRpY2FsKSBidWxrIHRyYW5zZmVyIHJhdGUgaW4gYml0cy1wZXItc2Vjb25kICovCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGJpdHJhdGUoc3RydWN0IHVzYl9nYWRnZXQgKmcpCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGVjbV9iaXRyYXRlKHN0cnVjdCB1c2JfZ2FkZ2V0ICpnKQogewogCWlmIChnYWRnZXRfaXNfZHVhbHNwZWVkKGcpICYmIGctPnNwZWVkID09IFVTQl9TUEVFRF9ISUdIKQogCQlyZXR1cm4gMTMgKiA1MTIgKiA4ICogMTAwMCAqIDg7CkBAIC0xMDcsNyArMTA3LDcgQEAKICAqLwogCiAjZGVmaW5lIExPRzJfU1RBVFVTX0lOVEVSVkFMX01TRUMJNQkvKiAxIDw8IDUgPT0gMzIgbXNlYyAqLwotI2RlZmluZSBTVEFUVVNfQllURUNPVU5UCQkxNgkvKiA4IGJ5dGUgaGVhZGVyICsgZGF0YSAqLworI2RlZmluZSBFQ01fU1RBVFVTX0JZVEVDT1VOVAkJMTYJLyogOCBieXRlIGhlYWRlciArIGRhdGEgKi8KIAogCiAvKiBpbnRlcmZhY2UgZGVzY3JpcHRvcjogKi8KQEAgLTEyNSw4ICsxMjUsOCBAQAogCS8qIC5pSW50ZXJmYWNlID0gRFlOQU1JQyAqLwogfTsKIAotc3RhdGljIHN0cnVjdCB1c2JfY2RjX2hlYWRlcl9kZXNjIGhlYWRlcl9kZXNjIF9faW5pdGRhdGEgPSB7Ci0JLmJMZW5ndGggPQkJc2l6ZW9mIGhlYWRlcl9kZXNjLAorc3RhdGljIHN0cnVjdCB1c2JfY2RjX2hlYWRlcl9kZXNjIGVjbV9oZWFkZXJfZGVzYyBfX2luaXRkYXRhID0geworCS5iTGVuZ3RoID0JCXNpemVvZiBlY21faGVhZGVyX2Rlc2MsCiAJLmJEZXNjcmlwdG9yVHlwZSA9CVVTQl9EVF9DU19JTlRFUkZBQ0UsCiAJLmJEZXNjcmlwdG9yU3ViVHlwZSA9CVVTQl9DRENfSEVBREVSX1RZUEUsCiAKQEAgLTE0MSw4ICsxNDEsOCBAQAogCS8qIC5iU2xhdmVJbnRlcmZhY2UwID0JRFlOQU1JQyAqLwogfTsKIAotc3RhdGljIHN0cnVjdCB1c2JfY2RjX2V0aGVyX2Rlc2MgZXRoZXJfZGVzYyBfX2luaXRkYXRhID0gewotCS5iTGVuZ3RoID0JCXNpemVvZiBldGhlcl9kZXNjLAorc3RhdGljIHN0cnVjdCB1c2JfY2RjX2V0aGVyX2Rlc2MgZWNtX2Rlc2MgX19pbml0ZGF0YSA9IHsKKwkuYkxlbmd0aCA9CQlzaXplb2YgZWNtX2Rlc2MsCiAJLmJEZXNjcmlwdG9yVHlwZSA9CVVTQl9EVF9DU19JTlRFUkZBQ0UsCiAJLmJEZXNjcmlwdG9yU3ViVHlwZSA9CVVTQl9DRENfRVRIRVJORVRfVFlQRSwKIApAQCAtMTg2LDE3ICsxODYsMTcgQEAKIAogLyogZnVsbCBzcGVlZCBzdXBwb3J0OiAqLwogCi1zdGF0aWMgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yIGZzX25vdGlmeV9kZXNjIF9faW5pdGRhdGEgPSB7CitzdGF0aWMgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yIGZzX2VjbV9ub3RpZnlfZGVzYyBfX2luaXRkYXRhID0gewogCS5iTGVuZ3RoID0JCVVTQl9EVF9FTkRQT0lOVF9TSVpFLAogCS5iRGVzY3JpcHRvclR5cGUgPQlVU0JfRFRfRU5EUE9JTlQsCiAKIAkuYkVuZHBvaW50QWRkcmVzcyA9CVVTQl9ESVJfSU4sCiAJLmJtQXR0cmlidXRlcyA9CQlVU0JfRU5EUE9JTlRfWEZFUl9JTlQsCi0JLndNYXhQYWNrZXRTaXplID0JX19jb25zdGFudF9jcHVfdG9fbGUxNihTVEFUVVNfQllURUNPVU5UKSwKKwkud01heFBhY2tldFNpemUgPQlfX2NvbnN0YW50X2NwdV90b19sZTE2KEVDTV9TVEFUVVNfQllURUNPVU5UKSwKIAkuYkludGVydmFsID0JCTEgPDwgTE9HMl9TVEFUVVNfSU5URVJWQUxfTVNFQywKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgZnNfaW5fZGVzYyBfX2luaXRkYXRhID0geworc3RhdGljIHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciBmc19lY21faW5fZGVzYyBfX2luaXRkYXRhID0gewogCS5iTGVuZ3RoID0JCVVTQl9EVF9FTkRQT0lOVF9TSVpFLAogCS5iRGVzY3JpcHRvclR5cGUgPQlVU0JfRFRfRU5EUE9JTlQsCiAKQEAgLTIwNCw3ICsyMDQsNyBAQAogCS5ibUF0dHJpYnV0ZXMgPQkJVVNCX0VORFBPSU5UX1hGRVJfQlVMSywKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgZnNfb3V0X2Rlc2MgX19pbml0ZGF0YSA9IHsKK3N0YXRpYyBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgZnNfZWNtX291dF9kZXNjIF9faW5pdGRhdGEgPSB7CiAJLmJMZW5ndGggPQkJVVNCX0RUX0VORFBPSU5UX1NJWkUsCiAJLmJEZXNjcmlwdG9yVHlwZSA9CVVTQl9EVF9FTkRQT0lOVCwKIApAQCAtMjEyLDM0ICsyMTIsMzQgQEAKIAkuYm1BdHRyaWJ1dGVzID0JCVVTQl9FTkRQT0lOVF9YRkVSX0JVTEssCiB9OwogCi1zdGF0aWMgc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqZXRoX2ZzX2Z1bmN0aW9uW10gX19pbml0ZGF0YSA9IHsKK3N0YXRpYyBzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICplY21fZnNfZnVuY3Rpb25bXSBfX2luaXRkYXRhID0gewogCS8qIENEQyBFQ00gY29udHJvbCBkZXNjcmlwdG9ycyAqLwogCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZlY21fY29udHJvbF9pbnRmLAotCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZoZWFkZXJfZGVzYywKKwkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmZWNtX2hlYWRlcl9kZXNjLAogCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZlY21fdW5pb25fZGVzYywKLQkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmZXRoZXJfZGVzYywKKwkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmZWNtX2Rlc2MsCiAJLyogTk9URTogc3RhdHVzIGVuZHBvaW50IG1pZ2h0IG5lZWQgdG8gYmUgcmVtb3ZlZCAqLwotCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZmc19ub3RpZnlfZGVzYywKKwkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmZnNfZWNtX25vdGlmeV9kZXNjLAogCS8qIGRhdGEgaW50ZXJmYWNlLCBhbHRzZXR0aW5ncyAwIGFuZCAxICovCiAJKHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKikgJmVjbV9kYXRhX25vcF9pbnRmLAogCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZlY21fZGF0YV9pbnRmLAotCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZmc19pbl9kZXNjLAotCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZmc19vdXRfZGVzYywKKwkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmZnNfZWNtX2luX2Rlc2MsCisJKHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKikgJmZzX2VjbV9vdXRfZGVzYywKIAlOVUxMLAogfTsKIAogLyogaGlnaCBzcGVlZCBzdXBwb3J0OiAqLwogCi1zdGF0aWMgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yIGhzX25vdGlmeV9kZXNjIF9faW5pdGRhdGEgPSB7CitzdGF0aWMgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yIGhzX2VjbV9ub3RpZnlfZGVzYyBfX2luaXRkYXRhID0gewogCS5iTGVuZ3RoID0JCVVTQl9EVF9FTkRQT0lOVF9TSVpFLAogCS5iRGVzY3JpcHRvclR5cGUgPQlVU0JfRFRfRU5EUE9JTlQsCiAKIAkuYkVuZHBvaW50QWRkcmVzcyA9CVVTQl9ESVJfSU4sCiAJLmJtQXR0cmlidXRlcyA9CQlVU0JfRU5EUE9JTlRfWEZFUl9JTlQsCi0JLndNYXhQYWNrZXRTaXplID0JX19jb25zdGFudF9jcHVfdG9fbGUxNihTVEFUVVNfQllURUNPVU5UKSwKKwkud01heFBhY2tldFNpemUgPQlfX2NvbnN0YW50X2NwdV90b19sZTE2KEVDTV9TVEFUVVNfQllURUNPVU5UKSwKIAkuYkludGVydmFsID0JCUxPRzJfU1RBVFVTX0lOVEVSVkFMX01TRUMgKyA0LAogfTsKLXN0YXRpYyBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgaHNfaW5fZGVzYyBfX2luaXRkYXRhID0geworc3RhdGljIHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciBoc19lY21faW5fZGVzYyBfX2luaXRkYXRhID0gewogCS5iTGVuZ3RoID0JCVVTQl9EVF9FTkRQT0lOVF9TSVpFLAogCS5iRGVzY3JpcHRvclR5cGUgPQlVU0JfRFRfRU5EUE9JTlQsCiAKQEAgLTI0OCw3ICsyNDgsNyBAQAogCS53TWF4UGFja2V0U2l6ZSA9CV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoNTEyKSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgaHNfb3V0X2Rlc2MgX19pbml0ZGF0YSA9IHsKK3N0YXRpYyBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgaHNfZWNtX291dF9kZXNjIF9faW5pdGRhdGEgPSB7CiAJLmJMZW5ndGggPQkJVVNCX0RUX0VORFBPSU5UX1NJWkUsCiAJLmJEZXNjcmlwdG9yVHlwZSA9CVVTQl9EVF9FTkRQT0lOVCwKIApAQCAtMjU3LDE5ICsyNTcsMTkgQEAKIAkud01heFBhY2tldFNpemUgPQlfX2NvbnN0YW50X2NwdV90b19sZTE2KDUxMiksCiB9OwogCi1zdGF0aWMgc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqZXRoX2hzX2Z1bmN0aW9uW10gX19pbml0ZGF0YSA9IHsKK3N0YXRpYyBzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICplY21faHNfZnVuY3Rpb25bXSBfX2luaXRkYXRhID0gewogCS8qIENEQyBFQ00gY29udHJvbCBkZXNjcmlwdG9ycyAqLwogCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZlY21fY29udHJvbF9pbnRmLAotCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZoZWFkZXJfZGVzYywKKwkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmZWNtX2hlYWRlcl9kZXNjLAogCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZlY21fdW5pb25fZGVzYywKLQkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmZXRoZXJfZGVzYywKKwkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmZWNtX2Rlc2MsCiAJLyogTk9URTogc3RhdHVzIGVuZHBvaW50IG1pZ2h0IG5lZWQgdG8gYmUgcmVtb3ZlZCAqLwotCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZoc19ub3RpZnlfZGVzYywKKwkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmaHNfZWNtX25vdGlmeV9kZXNjLAogCS8qIGRhdGEgaW50ZXJmYWNlLCBhbHRzZXR0aW5ncyAwIGFuZCAxICovCiAJKHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKikgJmVjbV9kYXRhX25vcF9pbnRmLAogCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZlY21fZGF0YV9pbnRmLAotCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZoc19pbl9kZXNjLAotCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZoc19vdXRfZGVzYywKKwkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmaHNfZWNtX2luX2Rlc2MsCisJKHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKikgJmhzX2VjbV9vdXRfZGVzYywKIAlOVUxMLAogfTsKIApAQCAtMzI5LDE0ICszMjksMTQgQEAKIAkJZXZlbnQtPmJOb3RpZmljYXRpb25UeXBlID0gVVNCX0NEQ19OT1RJRllfU1BFRURfQ0hBTkdFOwogCQlldmVudC0+d1ZhbHVlID0gY3B1X3RvX2xlMTYoMCk7CiAJCWV2ZW50LT53TGVuZ3RoID0gY3B1X3RvX2xlMTYoOCk7Ci0JCXJlcS0+bGVuZ3RoID0gU1RBVFVTX0JZVEVDT1VOVDsKKwkJcmVxLT5sZW5ndGggPSBFQ01fU1RBVFVTX0JZVEVDT1VOVDsKIAogCQkvKiBTUEVFRF9DSEFOR0UgZGF0YSBpcyB1cC9kb3duIHNwZWVkcyBpbiBiaXRzL3NlYyAqLwogCQlkYXRhID0gcmVxLT5idWYgKyBzaXplb2YgKmV2ZW50OwotCQlkYXRhWzBdID0gY3B1X3RvX2xlMzIoYml0cmF0ZShjZGV2LT5nYWRnZXQpKTsKKwkJZGF0YVswXSA9IGNwdV90b19sZTMyKGVjbV9iaXRyYXRlKGNkZXYtPmdhZGdldCkpOwogCQlkYXRhWzFdID0gZGF0YVswXTsKIAotCQlEQkcoY2RldiwgIm5vdGlmeSBzcGVlZCAlZFxuIiwgYml0cmF0ZShjZGV2LT5nYWRnZXQpKTsKKwkJREJHKGNkZXYsICJub3RpZnkgc3BlZWQgJWRcbiIsIGVjbV9iaXRyYXRlKGNkZXYtPmdhZGdldCkpOwogCQllY20tPm5vdGlmeV9zdGF0ZSA9IEVDTV9OT1RJRllfTk9ORTsKIAkJYnJlYWs7CiAJfQpAQCAtNjI4LDEzICs2MjgsMTMgQEAKIAlzdGF0dXMgPSAtRU5PREVWOwogCiAJLyogYWxsb2NhdGUgaW5zdGFuY2Utc3BlY2lmaWMgZW5kcG9pbnRzICovCi0JZXAgPSB1c2JfZXBfYXV0b2NvbmZpZyhjZGV2LT5nYWRnZXQsICZmc19pbl9kZXNjKTsKKwllcCA9IHVzYl9lcF9hdXRvY29uZmlnKGNkZXYtPmdhZGdldCwgJmZzX2VjbV9pbl9kZXNjKTsKIAlpZiAoIWVwKQogCQlnb3RvIGZhaWw7CiAJZWNtLT5wb3J0LmluX2VwID0gZXA7CiAJZXAtPmRyaXZlcl9kYXRhID0gY2RldjsJLyogY2xhaW0gKi8KIAotCWVwID0gdXNiX2VwX2F1dG9jb25maWcoY2Rldi0+Z2FkZ2V0LCAmZnNfb3V0X2Rlc2MpOworCWVwID0gdXNiX2VwX2F1dG9jb25maWcoY2Rldi0+Z2FkZ2V0LCAmZnNfZWNtX291dF9kZXNjKTsKIAlpZiAoIWVwKQogCQlnb3RvIGZhaWw7CiAJZWNtLT5wb3J0Lm91dF9lcCA9IGVwOwpAQCAtNjQ0LDcgKzY0NCw3IEBACiAJICogZG9uJ3QgdHJlYXQgaXQgdGhhdCB3YXkuICBJdCdzIHNpbXBsZXIsIGFuZCBzb21lIG5ld2VyIENEQwogCSAqIHByb2ZpbGVzICh3aXJlbGVzcyBoYW5kc2V0cykgbm8gbG9uZ2VyIHRyZWF0IGl0IGFzIG9wdGlvbmFsLgogCSAqLwotCWVwID0gdXNiX2VwX2F1dG9jb25maWcoY2Rldi0+Z2FkZ2V0LCAmZnNfbm90aWZ5X2Rlc2MpOworCWVwID0gdXNiX2VwX2F1dG9jb25maWcoY2Rldi0+Z2FkZ2V0LCAmZnNfZWNtX25vdGlmeV9kZXNjKTsKIAlpZiAoIWVwKQogCQlnb3RvIGZhaWw7CiAJZWNtLT5ub3RpZnkgPSBlcDsKQEAgLTY1Niw0NyArNjU2LDQ3IEBACiAJZWNtLT5ub3RpZnlfcmVxID0gdXNiX2VwX2FsbG9jX3JlcXVlc3QoZXAsIEdGUF9LRVJORUwpOwogCWlmICghZWNtLT5ub3RpZnlfcmVxKQogCQlnb3RvIGZhaWw7Ci0JZWNtLT5ub3RpZnlfcmVxLT5idWYgPSBrbWFsbG9jKFNUQVRVU19CWVRFQ09VTlQsIEdGUF9LRVJORUwpOworCWVjbS0+bm90aWZ5X3JlcS0+YnVmID0ga21hbGxvYyhFQ01fU1RBVFVTX0JZVEVDT1VOVCwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFlY20tPm5vdGlmeV9yZXEtPmJ1ZikKIAkJZ290byBmYWlsOwogCWVjbS0+bm90aWZ5X3JlcS0+Y29udGV4dCA9IGVjbTsKIAllY20tPm5vdGlmeV9yZXEtPmNvbXBsZXRlID0gZWNtX25vdGlmeV9jb21wbGV0ZTsKIAogCS8qIGNvcHkgZGVzY3JpcHRvcnMsIGFuZCB0cmFjayBlbmRwb2ludCBjb3BpZXMgKi8KLQlmLT5kZXNjcmlwdG9ycyA9IHVzYl9jb3B5X2Rlc2NyaXB0b3JzKGV0aF9mc19mdW5jdGlvbik7CisJZi0+ZGVzY3JpcHRvcnMgPSB1c2JfY29weV9kZXNjcmlwdG9ycyhlY21fZnNfZnVuY3Rpb24pOwogCWlmICghZi0+ZGVzY3JpcHRvcnMpCiAJCWdvdG8gZmFpbDsKIAotCWVjbS0+ZnMuaW4gPSB1c2JfZmluZF9lbmRwb2ludChldGhfZnNfZnVuY3Rpb24sCi0JCQlmLT5kZXNjcmlwdG9ycywgJmZzX2luX2Rlc2MpOwotCWVjbS0+ZnMub3V0ID0gdXNiX2ZpbmRfZW5kcG9pbnQoZXRoX2ZzX2Z1bmN0aW9uLAotCQkJZi0+ZGVzY3JpcHRvcnMsICZmc19vdXRfZGVzYyk7Ci0JZWNtLT5mcy5ub3RpZnkgPSB1c2JfZmluZF9lbmRwb2ludChldGhfZnNfZnVuY3Rpb24sCi0JCQlmLT5kZXNjcmlwdG9ycywgJmZzX25vdGlmeV9kZXNjKTsKKwllY20tPmZzLmluID0gdXNiX2ZpbmRfZW5kcG9pbnQoZWNtX2ZzX2Z1bmN0aW9uLAorCQkJZi0+ZGVzY3JpcHRvcnMsICZmc19lY21faW5fZGVzYyk7CisJZWNtLT5mcy5vdXQgPSB1c2JfZmluZF9lbmRwb2ludChlY21fZnNfZnVuY3Rpb24sCisJCQlmLT5kZXNjcmlwdG9ycywgJmZzX2VjbV9vdXRfZGVzYyk7CisJZWNtLT5mcy5ub3RpZnkgPSB1c2JfZmluZF9lbmRwb2ludChlY21fZnNfZnVuY3Rpb24sCisJCQlmLT5kZXNjcmlwdG9ycywgJmZzX2VjbV9ub3RpZnlfZGVzYyk7CiAKIAkvKiBzdXBwb3J0IGFsbCByZWxldmFudCBoYXJkd2FyZSBzcGVlZHMuLi4gd2UgZXhwZWN0IHRoYXQgd2hlbgogCSAqIGhhcmR3YXJlIGlzIGR1YWwgc3BlZWQsIGFsbCBidWxrLWNhcGFibGUgZW5kcG9pbnRzIHdvcmsgYXQKIAkgKiBib3RoIHNwZWVkcwogCSAqLwogCWlmIChnYWRnZXRfaXNfZHVhbHNwZWVkKGMtPmNkZXYtPmdhZGdldCkpIHsKLQkJaHNfaW5fZGVzYy5iRW5kcG9pbnRBZGRyZXNzID0KLQkJCQlmc19pbl9kZXNjLmJFbmRwb2ludEFkZHJlc3M7Ci0JCWhzX291dF9kZXNjLmJFbmRwb2ludEFkZHJlc3MgPQotCQkJCWZzX291dF9kZXNjLmJFbmRwb2ludEFkZHJlc3M7Ci0JCWhzX25vdGlmeV9kZXNjLmJFbmRwb2ludEFkZHJlc3MgPQotCQkJCWZzX25vdGlmeV9kZXNjLmJFbmRwb2ludEFkZHJlc3M7CisJCWhzX2VjbV9pbl9kZXNjLmJFbmRwb2ludEFkZHJlc3MgPQorCQkJCWZzX2VjbV9pbl9kZXNjLmJFbmRwb2ludEFkZHJlc3M7CisJCWhzX2VjbV9vdXRfZGVzYy5iRW5kcG9pbnRBZGRyZXNzID0KKwkJCQlmc19lY21fb3V0X2Rlc2MuYkVuZHBvaW50QWRkcmVzczsKKwkJaHNfZWNtX25vdGlmeV9kZXNjLmJFbmRwb2ludEFkZHJlc3MgPQorCQkJCWZzX2VjbV9ub3RpZnlfZGVzYy5iRW5kcG9pbnRBZGRyZXNzOwogCiAJCS8qIGNvcHkgZGVzY3JpcHRvcnMsIGFuZCB0cmFjayBlbmRwb2ludCBjb3BpZXMgKi8KLQkJZi0+aHNfZGVzY3JpcHRvcnMgPSB1c2JfY29weV9kZXNjcmlwdG9ycyhldGhfaHNfZnVuY3Rpb24pOworCQlmLT5oc19kZXNjcmlwdG9ycyA9IHVzYl9jb3B5X2Rlc2NyaXB0b3JzKGVjbV9oc19mdW5jdGlvbik7CiAJCWlmICghZi0+aHNfZGVzY3JpcHRvcnMpCiAJCQlnb3RvIGZhaWw7CiAKLQkJZWNtLT5ocy5pbiA9IHVzYl9maW5kX2VuZHBvaW50KGV0aF9oc19mdW5jdGlvbiwKLQkJCQlmLT5oc19kZXNjcmlwdG9ycywgJmhzX2luX2Rlc2MpOwotCQllY20tPmhzLm91dCA9IHVzYl9maW5kX2VuZHBvaW50KGV0aF9oc19mdW5jdGlvbiwKLQkJCQlmLT5oc19kZXNjcmlwdG9ycywgJmhzX291dF9kZXNjKTsKLQkJZWNtLT5ocy5ub3RpZnkgPSB1c2JfZmluZF9lbmRwb2ludChldGhfaHNfZnVuY3Rpb24sCi0JCQkJZi0+aHNfZGVzY3JpcHRvcnMsICZoc19ub3RpZnlfZGVzYyk7CisJCWVjbS0+aHMuaW4gPSB1c2JfZmluZF9lbmRwb2ludChlY21faHNfZnVuY3Rpb24sCisJCQkJZi0+aHNfZGVzY3JpcHRvcnMsICZoc19lY21faW5fZGVzYyk7CisJCWVjbS0+aHMub3V0ID0gdXNiX2ZpbmRfZW5kcG9pbnQoZWNtX2hzX2Z1bmN0aW9uLAorCQkJCWYtPmhzX2Rlc2NyaXB0b3JzLCAmaHNfZWNtX291dF9kZXNjKTsKKwkJZWNtLT5ocy5ub3RpZnkgPSB1c2JfZmluZF9lbmRwb2ludChlY21faHNfZnVuY3Rpb24sCisJCQkJZi0+aHNfZGVzY3JpcHRvcnMsICZoc19lY21fbm90aWZ5X2Rlc2MpOwogCX0KIAogCS8qIE5PVEU6ICBhbGwgdGhhdCBpcyBkb25lIHdpdGhvdXQga25vd2luZyBvciBjYXJpbmcgYWJvdXQKQEAgLTc5NSw3ICs3OTUsNyBAQAogCQlpZiAoc3RhdHVzIDwgMCkKIAkJCXJldHVybiBzdGF0dXM7CiAJCWVjbV9zdHJpbmdfZGVmc1sxXS5pZCA9IHN0YXR1czsKLQkJZXRoZXJfZGVzYy5pTUFDQWRkcmVzcyA9IHN0YXR1czsKKwkJZWNtX2Rlc2MuaU1BQ0FkZHJlc3MgPSBzdGF0dXM7CiAJfQogCiAJLyogYWxsb2NhdGUgYW5kIGluaXRpYWxpemUgb25lIG5ldyBpbnN0YW5jZSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L2ZfbG9vcGJhY2suYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9mX2xvb3BiYWNrLmMKaW5kZXggZWRhNGNkZTcuLjhhZmZlMWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9mX2xvb3BiYWNrLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2ZfbG9vcGJhY2suYwpAQCAtNzAsNyArNzAsNyBAQAogCiAvKiBmdWxsIHNwZWVkIHN1cHBvcnQ6ICovCiAKLXN0YXRpYyBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgZnNfc291cmNlX2Rlc2MgPSB7CitzdGF0aWMgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yIGZzX2xvb3Bfc291cmNlX2Rlc2MgPSB7CiAJLmJMZW5ndGggPQkJVVNCX0RUX0VORFBPSU5UX1NJWkUsCiAJLmJEZXNjcmlwdG9yVHlwZSA9CVVTQl9EVF9FTkRQT0lOVCwKIApAQCAtNzgsNyArNzgsNyBAQAogCS5ibUF0dHJpYnV0ZXMgPQkJVVNCX0VORFBPSU5UX1hGRVJfQlVMSywKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgZnNfc2lua19kZXNjID0geworc3RhdGljIHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciBmc19sb29wX3NpbmtfZGVzYyA9IHsKIAkuYkxlbmd0aCA9CQlVU0JfRFRfRU5EUE9JTlRfU0laRSwKIAkuYkRlc2NyaXB0b3JUeXBlID0JVVNCX0RUX0VORFBPSU5ULAogCkBAIC04OCwxNCArODgsMTQgQEAKIAogc3RhdGljIHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKmZzX2xvb3BiYWNrX2Rlc2NzW10gPSB7CiAJKHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKikgJmxvb3BiYWNrX2ludGYsCi0JKHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKikgJmZzX3NpbmtfZGVzYywKLQkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmZnNfc291cmNlX2Rlc2MsCisJKHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKikgJmZzX2xvb3Bfc2lua19kZXNjLAorCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZmc19sb29wX3NvdXJjZV9kZXNjLAogCU5VTEwsCiB9OwogCiAvKiBoaWdoIHNwZWVkIHN1cHBvcnQ6ICovCiAKLXN0YXRpYyBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgaHNfc291cmNlX2Rlc2MgPSB7CitzdGF0aWMgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yIGhzX2xvb3Bfc291cmNlX2Rlc2MgPSB7CiAJLmJMZW5ndGggPQkJVVNCX0RUX0VORFBPSU5UX1NJWkUsCiAJLmJEZXNjcmlwdG9yVHlwZSA9CVVTQl9EVF9FTkRQT0lOVCwKIApAQCAtMTAzLDcgKzEwMyw3IEBACiAJLndNYXhQYWNrZXRTaXplID0JX19jb25zdGFudF9jcHVfdG9fbGUxNig1MTIpLAogfTsKIAotc3RhdGljIHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciBoc19zaW5rX2Rlc2MgPSB7CitzdGF0aWMgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yIGhzX2xvb3Bfc2lua19kZXNjID0gewogCS5iTGVuZ3RoID0JCVVTQl9EVF9FTkRQT0lOVF9TSVpFLAogCS5iRGVzY3JpcHRvclR5cGUgPQlVU0JfRFRfRU5EUE9JTlQsCiAKQEAgLTExMyw4ICsxMTMsOCBAQAogCiBzdGF0aWMgc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqaHNfbG9vcGJhY2tfZGVzY3NbXSA9IHsKIAkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmbG9vcGJhY2tfaW50ZiwKLQkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmaHNfc291cmNlX2Rlc2MsCi0JKHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKikgJmhzX3NpbmtfZGVzYywKKwkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmaHNfbG9vcF9zb3VyY2VfZGVzYywKKwkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmaHNfbG9vcF9zaW5rX2Rlc2MsCiAJTlVMTCwKIH07CiAKQEAgLTE1Miw3ICsxNTIsNyBAQAogCiAJLyogYWxsb2NhdGUgZW5kcG9pbnRzICovCiAKLQlsb29wLT5pbl9lcCA9IHVzYl9lcF9hdXRvY29uZmlnKGNkZXYtPmdhZGdldCwgJmZzX3NvdXJjZV9kZXNjKTsKKwlsb29wLT5pbl9lcCA9IHVzYl9lcF9hdXRvY29uZmlnKGNkZXYtPmdhZGdldCwgJmZzX2xvb3Bfc291cmNlX2Rlc2MpOwogCWlmICghbG9vcC0+aW5fZXApIHsKIGF1dG9jb25mX2ZhaWw6CiAJCUVSUk9SKGNkZXYsICIlczogY2FuJ3QgYXV0b2NvbmZpZ3VyZSBvbiAlc1xuIiwKQEAgLTE2MSwxNyArMTYxLDE3IEBACiAJfQogCWxvb3AtPmluX2VwLT5kcml2ZXJfZGF0YSA9IGNkZXY7CS8qIGNsYWltICovCiAKLQlsb29wLT5vdXRfZXAgPSB1c2JfZXBfYXV0b2NvbmZpZyhjZGV2LT5nYWRnZXQsICZmc19zaW5rX2Rlc2MpOworCWxvb3AtPm91dF9lcCA9IHVzYl9lcF9hdXRvY29uZmlnKGNkZXYtPmdhZGdldCwgJmZzX2xvb3Bfc2lua19kZXNjKTsKIAlpZiAoIWxvb3AtPm91dF9lcCkKIAkJZ290byBhdXRvY29uZl9mYWlsOwogCWxvb3AtPm91dF9lcC0+ZHJpdmVyX2RhdGEgPSBjZGV2OwkvKiBjbGFpbSAqLwogCiAJLyogc3VwcG9ydCBoaWdoIHNwZWVkIGhhcmR3YXJlICovCiAJaWYgKGdhZGdldF9pc19kdWFsc3BlZWQoYy0+Y2Rldi0+Z2FkZ2V0KSkgewotCQloc19zb3VyY2VfZGVzYy5iRW5kcG9pbnRBZGRyZXNzID0KLQkJCQlmc19zb3VyY2VfZGVzYy5iRW5kcG9pbnRBZGRyZXNzOwotCQloc19zaW5rX2Rlc2MuYkVuZHBvaW50QWRkcmVzcyA9Ci0JCQkJZnNfc2lua19kZXNjLmJFbmRwb2ludEFkZHJlc3M7CisJCWhzX2xvb3Bfc291cmNlX2Rlc2MuYkVuZHBvaW50QWRkcmVzcyA9CisJCQkJZnNfbG9vcF9zb3VyY2VfZGVzYy5iRW5kcG9pbnRBZGRyZXNzOworCQloc19sb29wX3NpbmtfZGVzYy5iRW5kcG9pbnRBZGRyZXNzID0KKwkJCQlmc19sb29wX3NpbmtfZGVzYy5iRW5kcG9pbnRBZGRyZXNzOwogCQlmLT5oc19kZXNjcmlwdG9ycyA9IGhzX2xvb3BiYWNrX2Rlc2NzOwogCX0KIApAQCAtMjU1LDggKzI1NSwxMCBAQAogCXN0cnVjdCB1c2JfcmVxdWVzdAkJCSpyZXE7CiAJdW5zaWduZWQJCQkJaTsKIAotCXNyYyA9IGVwX2Nob29zZShjZGV2LT5nYWRnZXQsICZoc19zb3VyY2VfZGVzYywgJmZzX3NvdXJjZV9kZXNjKTsKLQlzaW5rID0gZXBfY2hvb3NlKGNkZXYtPmdhZGdldCwgJmhzX3NpbmtfZGVzYywgJmZzX3NpbmtfZGVzYyk7CisJc3JjID0gZXBfY2hvb3NlKGNkZXYtPmdhZGdldCwKKwkJCSZoc19sb29wX3NvdXJjZV9kZXNjLCAmZnNfbG9vcF9zb3VyY2VfZGVzYyk7CisJc2luayA9IGVwX2Nob29zZShjZGV2LT5nYWRnZXQsCisJCQkmaHNfbG9vcF9zaW5rX2Rlc2MsICZmc19sb29wX3NpbmtfZGVzYyk7CiAKIAkvKiBvbmUgZW5kcG9pbnQgd3JpdGVzIGRhdGEgYmFjayBJTiB0byB0aGUgaG9zdCAqLwogCWVwID0gbG9vcC0+aW5fZXA7CkBAIC0zNTAsNyArMzUyLDYgQEAKIAkuYmluZAkJPSBsb29wYmFja19iaW5kX2NvbmZpZywKIAkuYkNvbmZpZ3VyYXRpb25WYWx1ZSA9IDIsCiAJLmJtQXR0cmlidXRlcwk9IFVTQl9DT05GSUdfQVRUX1NFTEZQT1dFUiwKLQkuYk1heFBvd2VyCT0gMSwJLyogMiBtQSwgbWluaW1hbCAqLwogCS8qIC5pQ29uZmlndXJhdGlvbiA9IERZTkFNSUMgKi8KIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9mX29iZXguYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9mX29iZXguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MGMyZTdlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2Zfb2JleC5jCkBAIC0wLDAgKzEsNDkzIEBACisvKgorICogZl9vYmV4LmMgLS0gVVNCIENEQyBPQkVYIGZ1bmN0aW9uIGRyaXZlcgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBOb2tpYSBDb3Jwb3JhdGlvbgorICogQ29udGFjdDogRmVsaXBlIEJhbGJpIDxmZWxpcGUuYmFsYmlAbm9raWEuY29tPgorICoKKyAqIEJhc2VkIG9uIGZfYWNtLmMgYnkgQWwgQm9yY2hlcnMgYW5kIERhdmlkIEJyb3duZWxsLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKworLyogI2RlZmluZSBWRVJCT1NFX0RFQlVHICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC91dHNuYW1lLmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisKKyNpbmNsdWRlICJ1X3NlcmlhbC5oIgorI2luY2x1ZGUgImdhZGdldF9jaGlwcy5oIgorCisKKy8qCisgKiBUaGlzIENEQyBPQkVYIGZ1bmN0aW9uIHN1cHBvcnQganVzdCBwYWNrYWdlcyBhIFRUWS1pc2ggYnl0ZSBzdHJlYW0uCisgKiBBIHVzZXIgbW9kZSBzZXJ2ZXIgd2lsbCBwdXQgaXQgaW50byAicmF3IiBtb2RlIGFuZCBoYW5kbGUgYWxsIHRoZQorICogcmVsZXZhbnQgcHJvdG9jb2wgZGV0YWlscyAuLi4gdGhpcyBpcyBqdXN0IGEga2VybmVsIHBhc3N0aHJvdWdoLgorICogV2hlbiBwb3NzaWJsZSwgd2UgcHJldmVudCBnYWRnZXQgZW51bWVyYXRpb24gdW50aWwgdGhhdCBzZXJ2ZXIgaXMKKyAqIHJlYWR5IHRvIGhhbmRsZSB0aGUgY29tbWFuZHMuCisgKi8KKworc3RydWN0IG9iZXhfZXBfZGVzY3MgeworCXN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvcgkqb2JleF9pbjsKKwlzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IJKm9iZXhfb3V0OworfTsKKworc3RydWN0IGZfb2JleCB7CisJc3RydWN0IGdzZXJpYWwJCQlwb3J0OworCXU4CQkJCWN0cmxfaWQ7CisJdTgJCQkJZGF0YV9pZDsKKwl1OAkJCQlwb3J0X251bTsKKwl1OAkJCQljYW5fYWN0aXZhdGU7CisKKwlzdHJ1Y3Qgb2JleF9lcF9kZXNjcwkJZnM7CisJc3RydWN0IG9iZXhfZXBfZGVzY3MJCWhzOworfTsKKworc3RhdGljIGlubGluZSBzdHJ1Y3QgZl9vYmV4ICpmdW5jX3RvX29iZXgoc3RydWN0IHVzYl9mdW5jdGlvbiAqZikKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKGYsIHN0cnVjdCBmX29iZXgsIHBvcnQuZnVuYyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGZfb2JleCAqcG9ydF90b19vYmV4KHN0cnVjdCBnc2VyaWFsICpwKQoreworCXJldHVybiBjb250YWluZXJfb2YocCwgc3RydWN0IGZfb2JleCwgcG9ydCk7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKyNkZWZpbmUgT0JFWF9DVFJMX0lEWAkwCisjZGVmaW5lIE9CRVhfREFUQV9JRFgJMQorCitzdGF0aWMgc3RydWN0IHVzYl9zdHJpbmcgb2JleF9zdHJpbmdfZGVmc1tdID0geworCVtPQkVYX0NUUkxfSURYXS5zCT0gIkNEQyBPYmplY3QgRXhjaGFuZ2UgKE9CRVgpIiwKKwlbT0JFWF9EQVRBX0lEWF0ucwk9ICJDREMgT0JFWCBEYXRhIiwKKwl7ICB9LAkvKiBlbmQgb2YgbGlzdCAqLworfTsKKworc3RhdGljIHN0cnVjdCB1c2JfZ2FkZ2V0X3N0cmluZ3Mgb2JleF9zdHJpbmdfdGFibGUgPSB7CisJLmxhbmd1YWdlCQk9IDB4MDQwOSwJLyogZW4tVVMgKi8KKwkuc3RyaW5ncwkJPSBvYmV4X3N0cmluZ19kZWZzLAorfTsKKworc3RhdGljIHN0cnVjdCB1c2JfZ2FkZ2V0X3N0cmluZ3MgKm9iZXhfc3RyaW5nc1tdID0geworCSZvYmV4X3N0cmluZ190YWJsZSwKKwlOVUxMLAorfTsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIHN0cnVjdCB1c2JfaW50ZXJmYWNlX2Rlc2NyaXB0b3Igb2JleF9jb250cm9sX2ludGYgX19pbml0ZGF0YSA9IHsKKwkuYkxlbmd0aAkJPSBzaXplb2Yob2JleF9jb250cm9sX2ludGYpLAorCS5iRGVzY3JpcHRvclR5cGUJPSBVU0JfRFRfSU5URVJGQUNFLAorCS5iSW50ZXJmYWNlTnVtYmVyCT0gMCwKKworCS5iQWx0ZXJuYXRlU2V0dGluZwk9IDAsCisJLmJOdW1FbmRwb2ludHMJCT0gMCwKKwkuYkludGVyZmFjZUNsYXNzCT0gVVNCX0NMQVNTX0NPTU0sCisJLmJJbnRlcmZhY2VTdWJDbGFzcwk9IFVTQl9DRENfU1VCQ0xBU1NfT0JFWCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2ludGVyZmFjZV9kZXNjcmlwdG9yIG9iZXhfZGF0YV9ub3BfaW50ZiBfX2luaXRkYXRhID0geworCS5iTGVuZ3RoCQk9IHNpemVvZihvYmV4X2RhdGFfbm9wX2ludGYpLAorCS5iRGVzY3JpcHRvclR5cGUJPSBVU0JfRFRfSU5URVJGQUNFLAorCS5iSW50ZXJmYWNlTnVtYmVyCT0gMSwKKworCS5iQWx0ZXJuYXRlU2V0dGluZwk9IDAsCisJLmJOdW1FbmRwb2ludHMJCT0gMCwKKwkuYkludGVyZmFjZUNsYXNzCT0gVVNCX0NMQVNTX0NEQ19EQVRBLAorfTsKKworc3RhdGljIHN0cnVjdCB1c2JfaW50ZXJmYWNlX2Rlc2NyaXB0b3Igb2JleF9kYXRhX2ludGYgX19pbml0ZGF0YSA9IHsKKwkuYkxlbmd0aAkJPSBzaXplb2Yob2JleF9kYXRhX2ludGYpLAorCS5iRGVzY3JpcHRvclR5cGUJPSBVU0JfRFRfSU5URVJGQUNFLAorCS5iSW50ZXJmYWNlTnVtYmVyCT0gMiwKKworCS5iQWx0ZXJuYXRlU2V0dGluZwk9IDEsCisJLmJOdW1FbmRwb2ludHMJCT0gMiwKKwkuYkludGVyZmFjZUNsYXNzCT0gVVNCX0NMQVNTX0NEQ19EQVRBLAorfTsKKworc3RhdGljIHN0cnVjdCB1c2JfY2RjX2hlYWRlcl9kZXNjIG9iZXhfY2RjX2hlYWRlcl9kZXNjIF9faW5pdGRhdGEgPSB7CisJLmJMZW5ndGgJCT0gc2l6ZW9mKG9iZXhfY2RjX2hlYWRlcl9kZXNjKSwKKwkuYkRlc2NyaXB0b3JUeXBlCT0gVVNCX0RUX0NTX0lOVEVSRkFDRSwKKwkuYkRlc2NyaXB0b3JTdWJUeXBlCT0gVVNCX0NEQ19IRUFERVJfVFlQRSwKKwkuYmNkQ0RDCQkJPSBfX2NvbnN0YW50X2NwdV90b19sZTE2KDB4MDEyMCksCit9OworCitzdGF0aWMgc3RydWN0IHVzYl9jZGNfdW5pb25fZGVzYyBvYmV4X2NkY191bmlvbl9kZXNjIF9faW5pdGRhdGEgPSB7CisJLmJMZW5ndGgJCT0gc2l6ZW9mKG9iZXhfY2RjX3VuaW9uX2Rlc2MpLAorCS5iRGVzY3JpcHRvclR5cGUJPSBVU0JfRFRfQ1NfSU5URVJGQUNFLAorCS5iRGVzY3JpcHRvclN1YlR5cGUJPSBVU0JfQ0RDX1VOSU9OX1RZUEUsCisJLmJNYXN0ZXJJbnRlcmZhY2UwCT0gMSwKKwkuYlNsYXZlSW50ZXJmYWNlMAk9IDIsCit9OworCitzdGF0aWMgc3RydWN0IHVzYl9jZGNfb2JleF9kZXNjIG9iZXhfZGVzYyBfX2luaXRkYXRhID0geworCS5iTGVuZ3RoCQk9IHNpemVvZihvYmV4X2Rlc2MpLAorCS5iRGVzY3JpcHRvclR5cGUJPSBVU0JfRFRfQ1NfSU5URVJGQUNFLAorCS5iRGVzY3JpcHRvclN1YlR5cGUJPSBVU0JfQ0RDX09CRVhfVFlQRSwKKwkuYmNkVmVyc2lvbgkJPSBfX2NvbnN0YW50X2NwdV90b19sZTE2KDB4MDEwMCksCit9OworCisvKiBIaWdoLVNwZWVkIFN1cHBvcnQgKi8KKworc3RhdGljIHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciBvYmV4X2hzX2VwX291dF9kZXNjIF9faW5pdGRhdGEgPSB7CisJLmJMZW5ndGgJCT0gVVNCX0RUX0VORFBPSU5UX1NJWkUsCisJLmJEZXNjcmlwdG9yVHlwZQk9IFVTQl9EVF9FTkRQT0lOVCwKKworCS5iRW5kcG9pbnRBZGRyZXNzCT0gVVNCX0RJUl9PVVQsCisJLmJtQXR0cmlidXRlcwkJPSBVU0JfRU5EUE9JTlRfWEZFUl9CVUxLLAorCS53TWF4UGFja2V0U2l6ZQkJPSBfX2NvbnN0YW50X2NwdV90b19sZTE2KDUxMiksCit9OworCitzdGF0aWMgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yIG9iZXhfaHNfZXBfaW5fZGVzYyBfX2luaXRkYXRhID0geworCS5iTGVuZ3RoCQk9IFVTQl9EVF9FTkRQT0lOVF9TSVpFLAorCS5iRGVzY3JpcHRvclR5cGUJPSBVU0JfRFRfRU5EUE9JTlQsCisKKwkuYkVuZHBvaW50QWRkcmVzcwk9IFVTQl9ESVJfSU4sCisJLmJtQXR0cmlidXRlcwkJPSBVU0JfRU5EUE9JTlRfWEZFUl9CVUxLLAorCS53TWF4UGFja2V0U2l6ZQkJPSBfX2NvbnN0YW50X2NwdV90b19sZTE2KDUxMiksCit9OworCitzdGF0aWMgc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqaHNfZnVuY3Rpb25bXSBfX2luaXRkYXRhID0geworCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZvYmV4X2NvbnRyb2xfaW50ZiwKKwkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmb2JleF9jZGNfaGVhZGVyX2Rlc2MsCisJKHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKikgJm9iZXhfZGVzYywKKwkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmb2JleF9jZGNfdW5pb25fZGVzYywKKworCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZvYmV4X2RhdGFfbm9wX2ludGYsCisJKHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKikgJm9iZXhfZGF0YV9pbnRmLAorCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZvYmV4X2hzX2VwX2luX2Rlc2MsCisJKHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKikgJm9iZXhfaHNfZXBfb3V0X2Rlc2MsCisJTlVMTCwKK307CisKKy8qIEZ1bGwtU3BlZWQgU3VwcG9ydCAqLworCitzdGF0aWMgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yIG9iZXhfZnNfZXBfaW5fZGVzYyBfX2luaXRkYXRhID0geworCS5iTGVuZ3RoCQk9IFVTQl9EVF9FTkRQT0lOVF9TSVpFLAorCS5iRGVzY3JpcHRvclR5cGUJPSBVU0JfRFRfRU5EUE9JTlQsCisKKwkuYkVuZHBvaW50QWRkcmVzcwk9IFVTQl9ESVJfSU4sCisJLmJtQXR0cmlidXRlcwkJPSBVU0JfRU5EUE9JTlRfWEZFUl9CVUxLLAorfTsKKworc3RhdGljIHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciBvYmV4X2ZzX2VwX291dF9kZXNjIF9faW5pdGRhdGEgPSB7CisJLmJMZW5ndGgJCT0gVVNCX0RUX0VORFBPSU5UX1NJWkUsCisJLmJEZXNjcmlwdG9yVHlwZQk9IFVTQl9EVF9FTkRQT0lOVCwKKworCS5iRW5kcG9pbnRBZGRyZXNzCT0gVVNCX0RJUl9PVVQsCisJLmJtQXR0cmlidXRlcwkJPSBVU0JfRU5EUE9JTlRfWEZFUl9CVUxLLAorfTsKKworc3RhdGljIHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKmZzX2Z1bmN0aW9uW10gX19pbml0ZGF0YSA9IHsKKwkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmb2JleF9jb250cm9sX2ludGYsCisJKHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKikgJm9iZXhfY2RjX2hlYWRlcl9kZXNjLAorCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZvYmV4X2Rlc2MsCisJKHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKikgJm9iZXhfY2RjX3VuaW9uX2Rlc2MsCisKKwkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmb2JleF9kYXRhX25vcF9pbnRmLAorCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZvYmV4X2RhdGFfaW50ZiwKKwkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmb2JleF9mc19lcF9pbl9kZXNjLAorCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZvYmV4X2ZzX2VwX291dF9kZXNjLAorCU5VTEwsCit9OworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW50IG9iZXhfc2V0X2FsdChzdHJ1Y3QgdXNiX2Z1bmN0aW9uICpmLCB1bnNpZ25lZCBpbnRmLCB1bnNpZ25lZCBhbHQpCit7CisJc3RydWN0IGZfb2JleAkJKm9iZXggPSBmdW5jX3RvX29iZXgoZik7CisJc3RydWN0IHVzYl9jb21wb3NpdGVfZGV2ICpjZGV2ID0gZi0+Y29uZmlnLT5jZGV2OworCisJaWYgKGludGYgPT0gb2JleC0+Y3RybF9pZCkgeworCQlpZiAoYWx0ICE9IDApCisJCQlnb3RvIGZhaWw7CisJCS8qIE5PUCAqLworCQlEQkcoY2RldiwgInJlc2V0IG9iZXggdHR5R1MlZCBjb250cm9sXG4iLCBvYmV4LT5wb3J0X251bSk7CisKKwl9IGVsc2UgaWYgKGludGYgPT0gb2JleC0+ZGF0YV9pZCkgeworCQlpZiAoYWx0ID4gMSkKKwkJCWdvdG8gZmFpbDsKKworCQlpZiAob2JleC0+cG9ydC5pbi0+ZHJpdmVyX2RhdGEpIHsKKwkJCURCRyhjZGV2LCAicmVzZXQgb2JleCB0dHlHUyVkXG4iLCBvYmV4LT5wb3J0X251bSk7CisJCQlnc2VyaWFsX2Rpc2Nvbm5lY3QoJm9iZXgtPnBvcnQpOworCQl9CisKKwkJaWYgKCFvYmV4LT5wb3J0LmluX2Rlc2MpIHsKKwkJCURCRyhjZGV2LCAiaW5pdCBvYmV4IHR0eUdTJWRcbiIsIG9iZXgtPnBvcnRfbnVtKTsKKwkJCW9iZXgtPnBvcnQuaW5fZGVzYyA9IGVwX2Nob29zZShjZGV2LT5nYWRnZXQsCisJCQkJCW9iZXgtPmhzLm9iZXhfaW4sIG9iZXgtPmZzLm9iZXhfaW4pOworCQkJb2JleC0+cG9ydC5vdXRfZGVzYyA9IGVwX2Nob29zZShjZGV2LT5nYWRnZXQsCisJCQkJCW9iZXgtPmhzLm9iZXhfb3V0LCBvYmV4LT5mcy5vYmV4X291dCk7CisJCX0KKworCQlpZiAoYWx0ID09IDEpIHsKKwkJCURCRyhjZGV2LCAiYWN0aXZhdGUgb2JleCB0dHlHUyVkXG4iLCBvYmV4LT5wb3J0X251bSk7CisJCQlnc2VyaWFsX2Nvbm5lY3QoJm9iZXgtPnBvcnQsIG9iZXgtPnBvcnRfbnVtKTsKKwkJfQorCisJfSBlbHNlCisJCWdvdG8gZmFpbDsKKworCXJldHVybiAwOworCitmYWlsOgorCXJldHVybiAtRUlOVkFMOworfQorCitzdGF0aWMgaW50IG9iZXhfZ2V0X2FsdChzdHJ1Y3QgdXNiX2Z1bmN0aW9uICpmLCB1bnNpZ25lZCBpbnRmKQoreworCXN0cnVjdCBmX29iZXgJCSpvYmV4ID0gZnVuY190b19vYmV4KGYpOworCisJaWYgKGludGYgPT0gb2JleC0+Y3RybF9pZCkKKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gb2JleC0+cG9ydC5pbi0+ZHJpdmVyX2RhdGEgPyAxIDogMDsKK30KKworc3RhdGljIHZvaWQgb2JleF9kaXNhYmxlKHN0cnVjdCB1c2JfZnVuY3Rpb24gKmYpCit7CisJc3RydWN0IGZfb2JleAkqb2JleCA9IGZ1bmNfdG9fb2JleChmKTsKKwlzdHJ1Y3QgdXNiX2NvbXBvc2l0ZV9kZXYgKmNkZXYgPSBmLT5jb25maWctPmNkZXY7CisKKwlEQkcoY2RldiwgIm9iZXggdHR5R1MlZCBkaXNhYmxlXG4iLCBvYmV4LT5wb3J0X251bSk7CisJZ3NlcmlhbF9kaXNjb25uZWN0KCZvYmV4LT5wb3J0KTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIHZvaWQgb2JleF9jb25uZWN0KHN0cnVjdCBnc2VyaWFsICpnKQoreworCXN0cnVjdCBmX29iZXgJCSpvYmV4ID0gcG9ydF90b19vYmV4KGcpOworCXN0cnVjdCB1c2JfY29tcG9zaXRlX2RldiAqY2RldiA9IGctPmZ1bmMuY29uZmlnLT5jZGV2OworCWludAkJCXN0YXR1czsKKworCWlmICghb2JleC0+Y2FuX2FjdGl2YXRlKQorCQlyZXR1cm47CisKKwlzdGF0dXMgPSB1c2JfZnVuY3Rpb25fYWN0aXZhdGUoJmctPmZ1bmMpOworCWlmIChzdGF0dXMpCisJCURCRyhjZGV2LCAib2JleCB0dHlHUyVkIGZ1bmN0aW9uIGFjdGl2YXRlIC0tPiAlZFxuIiwKKwkJCW9iZXgtPnBvcnRfbnVtLCBzdGF0dXMpOworfQorCitzdGF0aWMgdm9pZCBvYmV4X2Rpc2Nvbm5lY3Qoc3RydWN0IGdzZXJpYWwgKmcpCit7CisJc3RydWN0IGZfb2JleAkJKm9iZXggPSBwb3J0X3RvX29iZXgoZyk7CisJc3RydWN0IHVzYl9jb21wb3NpdGVfZGV2ICpjZGV2ID0gZy0+ZnVuYy5jb25maWctPmNkZXY7CisJaW50CQkJc3RhdHVzOworCisJaWYgKCFvYmV4LT5jYW5fYWN0aXZhdGUpCisJCXJldHVybjsKKworCXN0YXR1cyA9IHVzYl9mdW5jdGlvbl9kZWFjdGl2YXRlKCZnLT5mdW5jKTsKKwlpZiAoc3RhdHVzKQorCQlEQkcoY2RldiwgIm9iZXggdHR5R1MlZCBmdW5jdGlvbiBkZWFjdGl2YXRlIC0tPiAlZFxuIiwKKwkJCW9iZXgtPnBvcnRfbnVtLCBzdGF0dXMpOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW50IF9faW5pdAorb2JleF9iaW5kKHN0cnVjdCB1c2JfY29uZmlndXJhdGlvbiAqYywgc3RydWN0IHVzYl9mdW5jdGlvbiAqZikKK3sKKwlzdHJ1Y3QgdXNiX2NvbXBvc2l0ZV9kZXYgKmNkZXYgPSBjLT5jZGV2OworCXN0cnVjdCBmX29iZXgJCSpvYmV4ID0gZnVuY190b19vYmV4KGYpOworCWludAkJCXN0YXR1czsKKwlzdHJ1Y3QgdXNiX2VwCQkqZXA7CisKKwkvKiBhbGxvY2F0ZSBpbnN0YW5jZS1zcGVjaWZpYyBpbnRlcmZhY2UgSURzLCBhbmQgcGF0Y2ggZGVzY3JpcHRvcnMgKi8KKworCXN0YXR1cyA9IHVzYl9pbnRlcmZhY2VfaWQoYywgZik7CisJaWYgKHN0YXR1cyA8IDApCisJCWdvdG8gZmFpbDsKKwlvYmV4LT5jdHJsX2lkID0gc3RhdHVzOworCisJb2JleF9jb250cm9sX2ludGYuYkludGVyZmFjZU51bWJlciA9IHN0YXR1czsKKwlvYmV4X2NkY191bmlvbl9kZXNjLmJNYXN0ZXJJbnRlcmZhY2UwID0gc3RhdHVzOworCisJc3RhdHVzID0gdXNiX2ludGVyZmFjZV9pZChjLCBmKTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJZ290byBmYWlsOworCW9iZXgtPmRhdGFfaWQgPSBzdGF0dXM7CisKKwlvYmV4X2RhdGFfbm9wX2ludGYuYkludGVyZmFjZU51bWJlciA9IHN0YXR1czsKKwlvYmV4X2RhdGFfaW50Zi5iSW50ZXJmYWNlTnVtYmVyID0gc3RhdHVzOworCW9iZXhfY2RjX3VuaW9uX2Rlc2MuYlNsYXZlSW50ZXJmYWNlMCA9IHN0YXR1czsKKworCS8qIGFsbG9jYXRlIGluc3RhbmNlLXNwZWNpZmljIGVuZHBvaW50cyAqLworCisJZXAgPSB1c2JfZXBfYXV0b2NvbmZpZyhjZGV2LT5nYWRnZXQsICZvYmV4X2ZzX2VwX2luX2Rlc2MpOworCWlmICghZXApCisJCWdvdG8gZmFpbDsKKwlvYmV4LT5wb3J0LmluID0gZXA7CisJZXAtPmRyaXZlcl9kYXRhID0gY2RldjsJLyogY2xhaW0gKi8KKworCWVwID0gdXNiX2VwX2F1dG9jb25maWcoY2Rldi0+Z2FkZ2V0LCAmb2JleF9mc19lcF9vdXRfZGVzYyk7CisJaWYgKCFlcCkKKwkJZ290byBmYWlsOworCW9iZXgtPnBvcnQub3V0ID0gZXA7CisJZXAtPmRyaXZlcl9kYXRhID0gY2RldjsJLyogY2xhaW0gKi8KKworCS8qIGNvcHkgZGVzY3JpcHRvcnMsIGFuZCB0cmFjayBlbmRwb2ludCBjb3BpZXMgKi8KKwlmLT5kZXNjcmlwdG9ycyA9IHVzYl9jb3B5X2Rlc2NyaXB0b3JzKGZzX2Z1bmN0aW9uKTsKKworCW9iZXgtPmZzLm9iZXhfaW4gPSB1c2JfZmluZF9lbmRwb2ludChmc19mdW5jdGlvbiwKKwkJCWYtPmRlc2NyaXB0b3JzLCAmb2JleF9mc19lcF9pbl9kZXNjKTsKKwlvYmV4LT5mcy5vYmV4X291dCA9IHVzYl9maW5kX2VuZHBvaW50KGZzX2Z1bmN0aW9uLAorCQkJZi0+ZGVzY3JpcHRvcnMsICZvYmV4X2ZzX2VwX291dF9kZXNjKTsKKworCS8qIHN1cHBvcnQgYWxsIHJlbGV2YW50IGhhcmR3YXJlIHNwZWVkcy4uLiB3ZSBleHBlY3QgdGhhdCB3aGVuCisJICogaGFyZHdhcmUgaXMgZHVhbCBzcGVlZCwgYWxsIGJ1bGstY2FwYWJsZSBlbmRwb2ludHMgd29yayBhdAorCSAqIGJvdGggc3BlZWRzCisJICovCisJaWYgKGdhZGdldF9pc19kdWFsc3BlZWQoYy0+Y2Rldi0+Z2FkZ2V0KSkgeworCisJCW9iZXhfaHNfZXBfaW5fZGVzYy5iRW5kcG9pbnRBZGRyZXNzID0KKwkJCQlvYmV4X2ZzX2VwX2luX2Rlc2MuYkVuZHBvaW50QWRkcmVzczsKKwkJb2JleF9oc19lcF9vdXRfZGVzYy5iRW5kcG9pbnRBZGRyZXNzID0KKwkJCQlvYmV4X2ZzX2VwX291dF9kZXNjLmJFbmRwb2ludEFkZHJlc3M7CisKKwkJLyogY29weSBkZXNjcmlwdG9ycywgYW5kIHRyYWNrIGVuZHBvaW50IGNvcGllcyAqLworCQlmLT5oc19kZXNjcmlwdG9ycyA9IHVzYl9jb3B5X2Rlc2NyaXB0b3JzKGhzX2Z1bmN0aW9uKTsKKworCQlvYmV4LT5ocy5vYmV4X2luID0gdXNiX2ZpbmRfZW5kcG9pbnQoaHNfZnVuY3Rpb24sCisJCQkJZi0+ZGVzY3JpcHRvcnMsICZvYmV4X2hzX2VwX2luX2Rlc2MpOworCQlvYmV4LT5ocy5vYmV4X291dCA9IHVzYl9maW5kX2VuZHBvaW50KGhzX2Z1bmN0aW9uLAorCQkJCWYtPmRlc2NyaXB0b3JzLCAmb2JleF9oc19lcF9vdXRfZGVzYyk7CisJfQorCisJLyogQXZvaWQgbGV0dGluZyB0aGlzIGdhZGdldCBlbnVtZXJhdGUgdW50aWwgdGhlIHVzZXJzcGFjZQorCSAqIE9CRVggc2VydmVyIGlzIGFjdGl2ZS4KKwkgKi8KKwlzdGF0dXMgPSB1c2JfZnVuY3Rpb25fZGVhY3RpdmF0ZShmKTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJV0FSTklORyhjZGV2LCAib2JleCB0dHlHUyVkOiBjYW4ndCBwcmV2ZW50IGVudW1lcmF0aW9uLCAlZFxuIiwKKwkJCW9iZXgtPnBvcnRfbnVtLCBzdGF0dXMpOworCWVsc2UKKwkJb2JleC0+Y2FuX2FjdGl2YXRlID0gdHJ1ZTsKKworCisJREJHKGNkZXYsICJvYmV4IHR0eUdTJWQ6ICVzIHNwZWVkIElOLyVzIE9VVC8lc1xuIiwKKwkJCW9iZXgtPnBvcnRfbnVtLAorCQkJZ2FkZ2V0X2lzX2R1YWxzcGVlZChjLT5jZGV2LT5nYWRnZXQpID8gImR1YWwiIDogImZ1bGwiLAorCQkJb2JleC0+cG9ydC5pbi0+bmFtZSwgb2JleC0+cG9ydC5vdXQtPm5hbWUpOworCisJcmV0dXJuIDA7CisKK2ZhaWw6CisJLyogd2UgbWlnaHQgYXMgd2VsbCByZWxlYXNlIG91ciBjbGFpbXMgb24gZW5kcG9pbnRzICovCisJaWYgKG9iZXgtPnBvcnQub3V0KQorCQlvYmV4LT5wb3J0Lm91dC0+ZHJpdmVyX2RhdGEgPSBOVUxMOworCWlmIChvYmV4LT5wb3J0LmluKQorCQlvYmV4LT5wb3J0LmluLT5kcml2ZXJfZGF0YSA9IE5VTEw7CisKKwlFUlJPUihjZGV2LCAiJXMvJXA6IGNhbid0IGJpbmQsIGVyciAlZFxuIiwgZi0+bmFtZSwgZiwgc3RhdHVzKTsKKworCXJldHVybiBzdGF0dXM7Cit9CisKK3N0YXRpYyB2b2lkCitvYmV4X3VuYmluZChzdHJ1Y3QgdXNiX2NvbmZpZ3VyYXRpb24gKmMsIHN0cnVjdCB1c2JfZnVuY3Rpb24gKmYpCit7CisJaWYgKGdhZGdldF9pc19kdWFsc3BlZWQoYy0+Y2Rldi0+Z2FkZ2V0KSkKKwkJdXNiX2ZyZWVfZGVzY3JpcHRvcnMoZi0+aHNfZGVzY3JpcHRvcnMpOworCXVzYl9mcmVlX2Rlc2NyaXB0b3JzKGYtPmRlc2NyaXB0b3JzKTsKKwlrZnJlZShmdW5jX3RvX29iZXgoZikpOworfQorCisvKiBTb21lIGNvbnRyb2xsZXJzIGNhbid0IHN1cHBvcnQgQ0RDIE9CRVggLi4uICovCitzdGF0aWMgaW5saW5lIGJvb2wgY2FuX3N1cHBvcnRfb2JleChzdHJ1Y3QgdXNiX2NvbmZpZ3VyYXRpb24gKmMpCit7CisJLyogU2luY2UgdGhlIGZpcnN0IGludGVyZmFjZSBpcyBhIE5PUCwgd2UgY2FuIGlnbm9yZSB0aGUKKwkgKiBpc3N1ZSBvZiBtdWx0aS1pbnRlcmZhY2Ugc3VwcG9ydCBvbiBtb3N0IGNvbnRyb2xsZXJzLgorCSAqCisJICogQWx0c2V0dGluZ3MgYXJlIG1hbmRhdG9yeSwgaG93ZXZlci4uLgorCSAqLworCWlmICghZ2FkZ2V0X3N1cHBvcnRzX2FsdHNldHRpbmdzKGMtPmNkZXYtPmdhZGdldCkpCisJCXJldHVybiBmYWxzZTsKKworCS8qIGV2ZXJ5dGhpbmcgZWxzZSBpcyAqcHJvYmFibHkqIGZpbmUgLi4uICovCisJcmV0dXJuIHRydWU7Cit9CisKKy8qKgorICogb2JleF9iaW5kX2NvbmZpZyAtIGFkZCBhIENEQyBPQkVYIGZ1bmN0aW9uIHRvIGEgY29uZmlndXJhdGlvbgorICogQGM6IHRoZSBjb25maWd1cmF0aW9uIHRvIHN1cHBvcnQgdGhlIENEQyBPQkVYIGluc3RhbmNlCisgKiBAcG9ydF9udW06IC9kZXYvdHR5R1MqIHBvcnQgdGhpcyBpbnRlcmZhY2Ugd2lsbCB1c2UKKyAqIENvbnRleHQ6IHNpbmdsZSB0aHJlYWRlZCBkdXJpbmcgZ2FkZ2V0IHNldHVwCisgKgorICogUmV0dXJucyB6ZXJvIG9uIHN1Y2Nlc3MsIGVsc2UgbmVnYXRpdmUgZXJybm8uCisgKgorICogQ2FsbGVyIG11c3QgaGF2ZSBjYWxsZWQgQGdzZXJpYWxfc2V0dXAoKSB3aXRoIGVub3VnaCBwb3J0cyB0bworICogaGFuZGxlIGFsbCB0aGUgb25lcyBpdCBiaW5kcy4gIENhbGxlciBpcyBhbHNvIHJlc3BvbnNpYmxlCisgKiBmb3IgY2FsbGluZyBAZ3NlcmlhbF9jbGVhbnVwKCkgYmVmb3JlIG1vZHVsZSB1bmxvYWQuCisgKi8KK2ludCBfX2luaXQgb2JleF9iaW5kX2NvbmZpZyhzdHJ1Y3QgdXNiX2NvbmZpZ3VyYXRpb24gKmMsIHU4IHBvcnRfbnVtKQoreworCXN0cnVjdCBmX29iZXgJKm9iZXg7CisJaW50CQlzdGF0dXM7CisKKwlpZiAoIWNhbl9zdXBwb3J0X29iZXgoYykpCisJCXJldHVybiAtRUlOVkFMOworCisJLyogbWF5YmUgYWxsb2NhdGUgZGV2aWNlLWdsb2JhbCBzdHJpbmcgSURzLCBhbmQgcGF0Y2ggZGVzY3JpcHRvcnMgKi8KKwlpZiAob2JleF9zdHJpbmdfZGVmc1tPQkVYX0NUUkxfSURYXS5pZCA9PSAwKSB7CisJCXN0YXR1cyA9IHVzYl9zdHJpbmdfaWQoYy0+Y2Rldik7CisJCWlmIChzdGF0dXMgPCAwKQorCQkJcmV0dXJuIHN0YXR1czsKKwkJb2JleF9zdHJpbmdfZGVmc1tPQkVYX0NUUkxfSURYXS5pZCA9IHN0YXR1czsKKworCQlvYmV4X2NvbnRyb2xfaW50Zi5pSW50ZXJmYWNlID0gc3RhdHVzOworCisJCXN0YXR1cyA9IHVzYl9zdHJpbmdfaWQoYy0+Y2Rldik7CisJCWlmIChzdGF0dXMgPCAwKQorCQkJcmV0dXJuIHN0YXR1czsKKwkJb2JleF9zdHJpbmdfZGVmc1tPQkVYX0RBVEFfSURYXS5pZCA9IHN0YXR1czsKKworCQlvYmV4X2RhdGFfbm9wX2ludGYuaUludGVyZmFjZSA9CisJCQlvYmV4X2RhdGFfaW50Zi5pSW50ZXJmYWNlID0gc3RhdHVzOworCX0KKworCS8qIGFsbG9jYXRlIGFuZCBpbml0aWFsaXplIG9uZSBuZXcgaW5zdGFuY2UgKi8KKwlvYmV4ID0ga3phbGxvYyhzaXplb2YgKm9iZXgsIEdGUF9LRVJORUwpOworCWlmICghb2JleCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlvYmV4LT5wb3J0X251bSA9IHBvcnRfbnVtOworCisJb2JleC0+cG9ydC5jb25uZWN0ID0gb2JleF9jb25uZWN0OworCW9iZXgtPnBvcnQuZGlzY29ubmVjdCA9IG9iZXhfZGlzY29ubmVjdDsKKworCW9iZXgtPnBvcnQuZnVuYy5uYW1lID0gIm9iZXgiOworCW9iZXgtPnBvcnQuZnVuYy5zdHJpbmdzID0gb2JleF9zdHJpbmdzOworCS8qIGRlc2NyaXB0b3JzIGFyZSBwZXItaW5zdGFuY2UgY29waWVzICovCisJb2JleC0+cG9ydC5mdW5jLmJpbmQgPSBvYmV4X2JpbmQ7CisJb2JleC0+cG9ydC5mdW5jLnVuYmluZCA9IG9iZXhfdW5iaW5kOworCW9iZXgtPnBvcnQuZnVuYy5zZXRfYWx0ID0gb2JleF9zZXRfYWx0OworCW9iZXgtPnBvcnQuZnVuYy5nZXRfYWx0ID0gb2JleF9nZXRfYWx0OworCW9iZXgtPnBvcnQuZnVuYy5kaXNhYmxlID0gb2JleF9kaXNhYmxlOworCisJc3RhdHVzID0gdXNiX2FkZF9mdW5jdGlvbihjLCAmb2JleC0+cG9ydC5mdW5jKTsKKwlpZiAoc3RhdHVzKQorCQlrZnJlZShvYmV4KTsKKworCXJldHVybiBzdGF0dXM7Cit9CisKK01PRFVMRV9BVVRIT1IoIkZlbGlwZSBCYWxiaSIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L2Zfc291cmNlc2luay5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2Zfc291cmNlc2luay5jCmluZGV4IGYxOGMzYTEuLmRjODRkMjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9mX3NvdXJjZXNpbmsuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZl9zb3VyY2VzaW5rLmMKQEAgLTU1Miw3ICs1NTIsNiBAQAogCS5zZXR1cAkJPSBzb3VyY2VzaW5rX3NldHVwLAogCS5iQ29uZmlndXJhdGlvblZhbHVlID0gMywKIAkuYm1BdHRyaWJ1dGVzCT0gVVNCX0NPTkZJR19BVFRfU0VMRlBPV0VSLAotCS5iTWF4UG93ZXIJPSAxLAkvKiAyIG1BLCBtaW5pbWFsICovCiAJLyogLmlDb25maWd1cmF0aW9uID0gRFlOQU1JQyAqLwogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L2Zfc3Vic2V0LmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZl9zdWJzZXQuYwppbmRleCBhY2I4ZDIzLi5mZTE4MzI4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvZl9zdWJzZXQuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZl9zdWJzZXQuYwpAQCAtMTAzLDggKzEwMyw4IEBACiAJLyogLmlJbnRlcmZhY2UgPSBEWU5BTUlDICovCiB9OwogCi1zdGF0aWMgc3RydWN0IHVzYl9jZGNfaGVhZGVyX2Rlc2MgaGVhZGVyX2Rlc2MgX19pbml0ZGF0YSA9IHsKLQkuYkxlbmd0aCA9CQlzaXplb2YgaGVhZGVyX2Rlc2MsCitzdGF0aWMgc3RydWN0IHVzYl9jZGNfaGVhZGVyX2Rlc2MgbWRsbV9oZWFkZXJfZGVzYyBfX2luaXRkYXRhID0geworCS5iTGVuZ3RoID0JCXNpemVvZiBtZGxtX2hlYWRlcl9kZXNjLAogCS5iRGVzY3JpcHRvclR5cGUgPQlVU0JfRFRfQ1NfSU5URVJGQUNFLAogCS5iRGVzY3JpcHRvclN1YlR5cGUgPQlVU0JfQ0RDX0hFQURFUl9UWVBFLAogCkBAIC0xNTIsNyArMTUyLDcgQEAKIAogLyogZnVsbCBzcGVlZCBzdXBwb3J0OiAqLwogCi1zdGF0aWMgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yIGZzX2luX2Rlc2MgX19pbml0ZGF0YSA9IHsKK3N0YXRpYyBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgZnNfc3Vic2V0X2luX2Rlc2MgX19pbml0ZGF0YSA9IHsKIAkuYkxlbmd0aCA9CQlVU0JfRFRfRU5EUE9JTlRfU0laRSwKIAkuYkRlc2NyaXB0b3JUeXBlID0JVVNCX0RUX0VORFBPSU5ULAogCkBAIC0xNjAsNyArMTYwLDcgQEAKIAkuYm1BdHRyaWJ1dGVzID0JCVVTQl9FTkRQT0lOVF9YRkVSX0JVTEssCiB9OwogCi1zdGF0aWMgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yIGZzX291dF9kZXNjIF9faW5pdGRhdGEgPSB7CitzdGF0aWMgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yIGZzX3N1YnNldF9vdXRfZGVzYyBfX2luaXRkYXRhID0gewogCS5iTGVuZ3RoID0JCVVTQl9EVF9FTkRQT0lOVF9TSVpFLAogCS5iRGVzY3JpcHRvclR5cGUgPQlVU0JfRFRfRU5EUE9JTlQsCiAKQEAgLTE3MCwxOCArMTcwLDE4IEBACiAKIHN0YXRpYyBzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICpmc19ldGhfZnVuY3Rpb25bXSBfX2luaXRkYXRhID0gewogCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZzdWJzZXRfZGF0YV9pbnRmLAotCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZoZWFkZXJfZGVzYywKKwkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmbWRsbV9oZWFkZXJfZGVzYywKIAkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmbWRsbV9kZXNjLAogCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZtZGxtX2RldGFpbF9kZXNjLAogCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZldGhlcl9kZXNjLAotCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZmc19pbl9kZXNjLAotCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZmc19vdXRfZGVzYywKKwkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmZnNfc3Vic2V0X2luX2Rlc2MsCisJKHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKikgJmZzX3N1YnNldF9vdXRfZGVzYywKIAlOVUxMLAogfTsKIAogLyogaGlnaCBzcGVlZCBzdXBwb3J0OiAqLwogCi1zdGF0aWMgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yIGhzX2luX2Rlc2MgX19pbml0ZGF0YSA9IHsKK3N0YXRpYyBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgaHNfc3Vic2V0X2luX2Rlc2MgX19pbml0ZGF0YSA9IHsKIAkuYkxlbmd0aCA9CQlVU0JfRFRfRU5EUE9JTlRfU0laRSwKIAkuYkRlc2NyaXB0b3JUeXBlID0JVVNCX0RUX0VORFBPSU5ULAogCkBAIC0xODksNyArMTg5LDcgQEAKIAkud01heFBhY2tldFNpemUgPQlfX2NvbnN0YW50X2NwdV90b19sZTE2KDUxMiksCiB9OwogCi1zdGF0aWMgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yIGhzX291dF9kZXNjIF9faW5pdGRhdGEgPSB7CitzdGF0aWMgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yIGhzX3N1YnNldF9vdXRfZGVzYyBfX2luaXRkYXRhID0gewogCS5iTGVuZ3RoID0JCVVTQl9EVF9FTkRQT0lOVF9TSVpFLAogCS5iRGVzY3JpcHRvclR5cGUgPQlVU0JfRFRfRU5EUE9JTlQsCiAKQEAgLTE5OSwxMiArMTk5LDEyIEBACiAKIHN0YXRpYyBzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICpoc19ldGhfZnVuY3Rpb25bXSBfX2luaXRkYXRhID0gewogCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZzdWJzZXRfZGF0YV9pbnRmLAotCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZoZWFkZXJfZGVzYywKKwkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmbWRsbV9oZWFkZXJfZGVzYywKIAkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmbWRsbV9kZXNjLAogCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZtZGxtX2RldGFpbF9kZXNjLAogCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZldGhlcl9kZXNjLAotCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZoc19pbl9kZXNjLAotCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZoc19vdXRfZGVzYywKKwkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmaHNfc3Vic2V0X2luX2Rlc2MsCisJKHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKikgJmhzX3N1YnNldF9vdXRfZGVzYywKIAlOVUxMLAogfTsKIApAQCAtMjgxLDEzICsyODEsMTMgQEAKIAlzdGF0dXMgPSAtRU5PREVWOwogCiAJLyogYWxsb2NhdGUgaW5zdGFuY2Utc3BlY2lmaWMgZW5kcG9pbnRzICovCi0JZXAgPSB1c2JfZXBfYXV0b2NvbmZpZyhjZGV2LT5nYWRnZXQsICZmc19pbl9kZXNjKTsKKwllcCA9IHVzYl9lcF9hdXRvY29uZmlnKGNkZXYtPmdhZGdldCwgJmZzX3N1YnNldF9pbl9kZXNjKTsKIAlpZiAoIWVwKQogCQlnb3RvIGZhaWw7CiAJZ2V0aC0+cG9ydC5pbl9lcCA9IGVwOwogCWVwLT5kcml2ZXJfZGF0YSA9IGNkZXY7CS8qIGNsYWltICovCiAKLQllcCA9IHVzYl9lcF9hdXRvY29uZmlnKGNkZXYtPmdhZGdldCwgJmZzX291dF9kZXNjKTsKKwllcCA9IHVzYl9lcF9hdXRvY29uZmlnKGNkZXYtPmdhZGdldCwgJmZzX3N1YnNldF9vdXRfZGVzYyk7CiAJaWYgKCFlcCkKIAkJZ290byBmYWlsOwogCWdldGgtPnBvcnQub3V0X2VwID0gZXA7CkBAIC0yOTcsOSArMjk3LDkgQEAKIAlmLT5kZXNjcmlwdG9ycyA9IHVzYl9jb3B5X2Rlc2NyaXB0b3JzKGZzX2V0aF9mdW5jdGlvbik7CiAKIAlnZXRoLT5mcy5pbiA9IHVzYl9maW5kX2VuZHBvaW50KGZzX2V0aF9mdW5jdGlvbiwKLQkJCWYtPmRlc2NyaXB0b3JzLCAmZnNfaW5fZGVzYyk7CisJCQlmLT5kZXNjcmlwdG9ycywgJmZzX3N1YnNldF9pbl9kZXNjKTsKIAlnZXRoLT5mcy5vdXQgPSB1c2JfZmluZF9lbmRwb2ludChmc19ldGhfZnVuY3Rpb24sCi0JCQlmLT5kZXNjcmlwdG9ycywgJmZzX291dF9kZXNjKTsKKwkJCWYtPmRlc2NyaXB0b3JzLCAmZnNfc3Vic2V0X291dF9kZXNjKTsKIAogCiAJLyogc3VwcG9ydCBhbGwgcmVsZXZhbnQgaGFyZHdhcmUgc3BlZWRzLi4uIHdlIGV4cGVjdCB0aGF0IHdoZW4KQEAgLTMwNywxOCArMzA3LDE4IEBACiAJICogYm90aCBzcGVlZHMKIAkgKi8KIAlpZiAoZ2FkZ2V0X2lzX2R1YWxzcGVlZChjLT5jZGV2LT5nYWRnZXQpKSB7Ci0JCWhzX2luX2Rlc2MuYkVuZHBvaW50QWRkcmVzcyA9Ci0JCQkJZnNfaW5fZGVzYy5iRW5kcG9pbnRBZGRyZXNzOwotCQloc19vdXRfZGVzYy5iRW5kcG9pbnRBZGRyZXNzID0KLQkJCQlmc19vdXRfZGVzYy5iRW5kcG9pbnRBZGRyZXNzOworCQloc19zdWJzZXRfaW5fZGVzYy5iRW5kcG9pbnRBZGRyZXNzID0KKwkJCQlmc19zdWJzZXRfaW5fZGVzYy5iRW5kcG9pbnRBZGRyZXNzOworCQloc19zdWJzZXRfb3V0X2Rlc2MuYkVuZHBvaW50QWRkcmVzcyA9CisJCQkJZnNfc3Vic2V0X291dF9kZXNjLmJFbmRwb2ludEFkZHJlc3M7CiAKIAkJLyogY29weSBkZXNjcmlwdG9ycywgYW5kIHRyYWNrIGVuZHBvaW50IGNvcGllcyAqLwogCQlmLT5oc19kZXNjcmlwdG9ycyA9IHVzYl9jb3B5X2Rlc2NyaXB0b3JzKGhzX2V0aF9mdW5jdGlvbik7CiAKIAkJZ2V0aC0+aHMuaW4gPSB1c2JfZmluZF9lbmRwb2ludChoc19ldGhfZnVuY3Rpb24sCi0JCQkJZi0+aHNfZGVzY3JpcHRvcnMsICZoc19pbl9kZXNjKTsKKwkJCQlmLT5oc19kZXNjcmlwdG9ycywgJmhzX3N1YnNldF9pbl9kZXNjKTsKIAkJZ2V0aC0+aHMub3V0ID0gdXNiX2ZpbmRfZW5kcG9pbnQoaHNfZXRoX2Z1bmN0aW9uLAotCQkJCWYtPmhzX2Rlc2NyaXB0b3JzLCAmaHNfb3V0X2Rlc2MpOworCQkJCWYtPmhzX2Rlc2NyaXB0b3JzLCAmaHNfc3Vic2V0X291dF9kZXNjKTsKIAl9CiAKIAkvKiBOT1RFOiAgYWxsIHRoYXQgaXMgZG9uZSB3aXRob3V0IGtub3dpbmcgb3IgY2FyaW5nIGFib3V0CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvZmlsZV9zdG9yYWdlLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZmlsZV9zdG9yYWdlLmMKaW5kZXggZWEyYzMxZC4uYzRlNjJhNiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2ZpbGVfc3RvcmFnZS5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9maWxlX3N0b3JhZ2UuYwpAQCAtMjQ1LDYgKzI0NSwxOCBAQAogI2luY2x1ZGUgImdhZGdldF9jaGlwcy5oIgogCiAKKworLyoKKyAqIEtidWlsZCBpcyBub3QgdmVyeSBjb29wZXJhdGl2ZSB3aXRoIHJlc3BlY3QgdG8gbGlua2luZyBzZXBhcmF0ZWx5CisgKiBjb21waWxlZCBsaWJyYXJ5IG9iamVjdHMgaW50byBvbmUgbW9kdWxlLiAgU28gZm9yIG5vdyB3ZSB3b24ndCB1c2UKKyAqIHNlcGFyYXRlIGNvbXBpbGF0aW9uIC4uLiBlbnN1cmluZyBpbml0L2V4aXQgc2VjdGlvbnMgd29yayB0byBzaHJpbmsKKyAqIHRoZSBydW50aW1lIGZvb3RwcmludCwgYW5kIGdpdmluZyB1cyBhdCBsZWFzdCBzb21lIHBhcnRzIG9mIHdoYXQKKyAqIGEgImdjYyAtLWNvbWJpbmUgLi4uIHBhcnQxLmMgcGFydDIuYyBwYXJ0My5jIC4uLiAiIGJ1aWxkIHdvdWxkLgorICovCisjaW5jbHVkZSAidXNic3RyaW5nLmMiCisjaW5jbHVkZSAiY29uZmlnLmMiCisjaW5jbHVkZSAiZXBhdXRvY29uZi5jIgorCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCiAjZGVmaW5lIERSSVZFUl9ERVNDCQkiRmlsZS1iYWNrZWQgU3RvcmFnZSBHYWRnZXQiCkBAIC04MzksNyArODUxLDcgQEAKIAkuYkNvbmZpZ3VyYXRpb25WYWx1ZSA9CUNPTkZJR19WQUxVRSwKIAkuaUNvbmZpZ3VyYXRpb24gPQlTVFJJTkdfQ09ORklHLAogCS5ibUF0dHJpYnV0ZXMgPQkJVVNCX0NPTkZJR19BVFRfT05FIHwgVVNCX0NPTkZJR19BVFRfU0VMRlBPV0VSLAotCS5iTWF4UG93ZXIgPQkJMSwJLy8gc2VsZi1wb3dlcmVkCisJLmJNYXhQb3dlciA9CQlDT05GSUdfVVNCX0dBREdFVF9WQlVTX0RSQVcgLyAyLAogfTsKIAogc3RhdGljIHN0cnVjdCB1c2Jfb3RnX2Rlc2NyaXB0b3IKQEAgLTI2NjQsMTEgKzI2NzYsMjQgQEAKIAkvKiBWZXJpZnkgdGhlIGxlbmd0aCBvZiB0aGUgY29tbWFuZCBpdHNlbGYgKi8KIAlpZiAoY21uZF9zaXplICE9IGZzZy0+Y21uZF9zaXplKSB7CiAKLQkJLyogU3BlY2lhbCBjYXNlIHdvcmthcm91bmQ6IE1TLVdpbmRvd3MgaXNzdWVzIFJFUVVFU1QgU0VOU0UKLQkJICogd2l0aCBjYnctPkxlbmd0aCA9PSAxMiAoaXQgc2hvdWxkIGJlIDYpLiAqLwotCQlpZiAoZnNnLT5jbW5kWzBdID09IFNDX1JFUVVFU1RfU0VOU0UgJiYgZnNnLT5jbW5kX3NpemUgPT0gMTIpCisJCS8qIFNwZWNpYWwgY2FzZSB3b3JrYXJvdW5kOiBUaGVyZSBhcmUgcGxlbnR5IG9mIGJ1Z2d5IFNDU0kKKwkJICogaW1wbGVtZW50YXRpb25zLiBNYW55IGhhdmUgaXNzdWVzIHdpdGggY2J3LT5MZW5ndGgKKwkJICogZmllbGQgcGFzc2luZyBhIHdyb25nIGNvbW1hbmQgc2l6ZS4gRm9yIHRob3NlIGNhc2VzIHdlCisJCSAqIGFsd2F5cyB0cnkgdG8gd29yayBhcm91bmQgdGhlIHByb2JsZW0gYnkgdXNpbmcgdGhlIGxlbmd0aAorCQkgKiBzZW50IGJ5IHRoZSBob3N0IHNpZGUgcHJvdmlkZWQgaXQgaXMgYXQgbGVhc3QgYXMgbGFyZ2UKKwkJICogYXMgdGhlIGNvcnJlY3QgY29tbWFuZCBsZW5ndGguCisJCSAqIEV4YW1wbGVzIG9mIHN1Y2ggY2FzZXMgd291bGQgYmUgTVMtV2luZG93cywgd2hpY2ggaXNzdWVzCisJCSAqIFJFUVVFU1QgU0VOU0Ugd2l0aCBjYnctPkxlbmd0aCA9PSAxMiB3aGVyZSBpdCBzaG91bGQKKwkJICogYmUgNiwgYW5kIHhib3gzNjAgaXNzdWluZyBJTlFVSVJZLCBURVNUIFVOSVQgUkVBRFkgYW5kCisJCSAqIFJFUVVFU1QgU0VOU0Ugd2l0aCBjYnctPkxlbmd0aCA9PSAxMCB3aGVyZSBpdCBzaG91bGQKKwkJICogYmUgNiBhcyB3ZWxsLgorCQkgKi8KKwkJaWYgKGNtbmRfc2l6ZSA8PSBmc2ctPmNtbmRfc2l6ZSkgeworCQkJREJHKGZzZywgIiVzIGlzIGJ1Z2d5ISBFeHBlY3RlZCBsZW5ndGggJWQgIgorCQkJCQkiYnV0IHdlIGdvdCAlZFxuIiwgbmFtZSwKKwkJCQkJY21uZF9zaXplLCBmc2ctPmNtbmRfc2l6ZSk7CiAJCQljbW5kX3NpemUgPSBmc2ctPmNtbmRfc2l6ZTsKLQkJZWxzZSB7CisJCX0gZWxzZSB7CiAJCQlmc2ctPnBoYXNlX2Vycm9yID0gMTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvZnNsX3FlX3VkYy5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2ZzbF9xZV91ZGMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZmU4YjQ0Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2ZzbF9xZV91ZGMuYwpAQCAtMCwwICsxLDI3NjAgQEAKKy8qCisgKiBkcml2ZXIvdXNiL2dhZGdldC9mc2xfcWVfdWRjLmMKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYtMjAwOCBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIAlYaWUgWGlhb2JvIDxYLlhpZUBmcmVlc2NhbGUuY29tPgorICogCUxpIFlhbmcgPGxlb2xpQGZyZWVzY2FsZS5jb20+CisgKiAJQmFzZWQgb24gYmFyZWJvYXJkIGNvZGUgZnJvbSBTaGxvbWkgR3JpZGlzaC4KKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIEZyZWVzY2xlIFFFL0NQTSBVU0IgUGhlcmlwaGVyYWwgQ29udHJvbGxlciBEcml2ZXIKKyAqIFRoZSBjb250cm9sbGVyIGNhbiBiZSBmb3VuZCBvbiBNUEM4MzYwLCBNUEM4MjcyLCBhbmQgZXRjLgorICogTVBDODM2MCBSZXYgMS4xIG1heSBuZWVkIFFFIG1pcmNvY29kZSB1cGRhdGUKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjdW5kZWYgVVNCX1RSQUNFCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgorI2luY2x1ZGUgPGxpbnV4L29mX3BsYXRmb3JtLmg+CisjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC91c2IvY2g5Lmg+CisjaW5jbHVkZSA8bGludXgvdXNiL2dhZGdldC5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi9vdGcuaD4KKyNpbmNsdWRlIDxhc20vcWUuaD4KKyNpbmNsdWRlIDxhc20vY3BtLmg+CisjaW5jbHVkZSA8YXNtL2RtYS5oPgorI2luY2x1ZGUgPGFzbS9yZWcuaD4KKyNpbmNsdWRlICJmc2xfcWVfdWRjLmgiCisKKyNkZWZpbmUgRFJJVkVSX0RFU0MgICAgICJGcmVlc2NhbGUgUUUvQ1BNIFVTQiBEZXZpY2UgQ29udHJvbGxlciBkcml2ZXIiCisjZGVmaW5lIERSSVZFUl9BVVRIT1IgICAiWGllIFhpYW9CbyIKKyNkZWZpbmUgRFJJVkVSX1ZFUlNJT04gICIxLjAiCisKKyNkZWZpbmUgRE1BX0FERFJfSU5WQUxJRCAgICAgICAgKH4oZG1hX2FkZHJfdCkwKQorCitzdGF0aWMgY29uc3QgY2hhciBkcml2ZXJfbmFtZVtdID0gImZzbF9xZV91ZGMiOworc3RhdGljIGNvbnN0IGNoYXIgZHJpdmVyX2Rlc2NbXSA9IERSSVZFUl9ERVNDOworCisvKmVwIG5hbWUgaXMgaW1wb3J0YW50IGluIGdhZGdldCwgaXQgc2hvdWxkIG9iZXkgdGhlIGNvbnZlbnRpb24gb2YgZXBfbWF0Y2goKSovCitzdGF0aWMgY29uc3QgY2hhciAqY29uc3QgZXBfbmFtZVtdID0geworCSJlcDAtY29udHJvbCIsIC8qIGV2ZXJ5b25lIGhhcyBlcDAgKi8KKwkvKiAzIGNvbmZpZ3VyYWJsZSBlbmRwb2ludHMgKi8KKwkiZXAxIiwKKwkiZXAyIiwKKwkiZXAzIiwKK307CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgcWVfZXAwX2Rlc2MgPSB7CisJLmJMZW5ndGggPQkJVVNCX0RUX0VORFBPSU5UX1NJWkUsCisJLmJEZXNjcmlwdG9yVHlwZSA9CVVTQl9EVF9FTkRQT0lOVCwKKworCS5iRW5kcG9pbnRBZGRyZXNzID0JMCwKKwkuYm1BdHRyaWJ1dGVzID0JCVVTQl9FTkRQT0lOVF9YRkVSX0NPTlRST0wsCisJLndNYXhQYWNrZXRTaXplID0JVVNCX01BWF9DVFJMX1BBWUxPQUQsCit9OworCisvKiBpdCBpcyBpbml0aWFsaXplZCBpbiBwcm9iZSgpICAqLworc3RhdGljIHN0cnVjdCBxZV91ZGMgKnVkY19jb250cm9sbGVyOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgSW50ZXJuYWwgVXNlZCBGdW5jdGlvbiBTdGFydAorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBkb25lKCkgLSByZXRpcmUgYSByZXF1ZXN0OyBjYWxsZXIgYmxvY2tlZCBpcnFzCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyB2b2lkIGRvbmUoc3RydWN0IHFlX2VwICplcCwgc3RydWN0IHFlX3JlcSAqcmVxLCBpbnQgc3RhdHVzKQoreworCXN0cnVjdCBxZV91ZGMgKnVkYyA9IGVwLT51ZGM7CisJdW5zaWduZWQgY2hhciBzdG9wcGVkID0gZXAtPnN0b3BwZWQ7CisKKwkvKiB0aGUgcmVxLT5xdWV1ZSBwb2ludGVyIGlzIHVzZWQgYnkgZXBfcXVldWUoKSBmdW5jLCBpbiB3aGljaAorCSAqIHRoZSByZXF1ZXN0IHdpbGwgYmUgYWRkZWQgaW50byBhIHVkY19lcC0+cXVldWUgJ2QgdGFpbAorCSAqIHNvIGhlcmUgdGhlIHJlcSB3aWxsIGJlIGRyb3BwZWQgZnJvbSB0aGUgZXAtPnF1ZXVlCisJICovCisJbGlzdF9kZWxfaW5pdCgmcmVxLT5xdWV1ZSk7CisKKwkvKiByZXEuc3RhdHVzIHNob3VsZCBiZSBzZXQgYXMgLUVJTlBST0dSRVNTIGluIGVwX3F1ZXVlKCkgKi8KKwlpZiAocmVxLT5yZXEuc3RhdHVzID09IC1FSU5QUk9HUkVTUykKKwkJcmVxLT5yZXEuc3RhdHVzID0gc3RhdHVzOworCWVsc2UKKwkJc3RhdHVzID0gcmVxLT5yZXEuc3RhdHVzOworCisJaWYgKHJlcS0+bWFwcGVkKSB7CisJCWRtYV91bm1hcF9zaW5nbGUodWRjLT5nYWRnZXQuZGV2LnBhcmVudCwKKwkJCXJlcS0+cmVxLmRtYSwgcmVxLT5yZXEubGVuZ3RoLAorCQkJZXBfaXNfaW4oZXApCisJCQkJPyBETUFfVE9fREVWSUNFCisJCQkJOiBETUFfRlJPTV9ERVZJQ0UpOworCQlyZXEtPnJlcS5kbWEgPSBETUFfQUREUl9JTlZBTElEOworCQlyZXEtPm1hcHBlZCA9IDA7CisJfSBlbHNlCisJCWRtYV9zeW5jX3NpbmdsZV9mb3JfY3B1KHVkYy0+Z2FkZ2V0LmRldi5wYXJlbnQsCisJCQlyZXEtPnJlcS5kbWEsIHJlcS0+cmVxLmxlbmd0aCwKKwkJCWVwX2lzX2luKGVwKQorCQkJCT8gRE1BX1RPX0RFVklDRQorCQkJCTogRE1BX0ZST01fREVWSUNFKTsKKworCWlmIChzdGF0dXMgJiYgKHN0YXR1cyAhPSAtRVNIVVRET1dOKSkKKwkJZGV2X3ZkYmcodWRjLT5kZXYsICJjb21wbGV0ZSAlcyByZXEgJXAgc3RhdCAlZCBsZW4gJXUvJXVcbiIsCisJCQllcC0+ZXAubmFtZSwgJnJlcS0+cmVxLCBzdGF0dXMsCisJCQlyZXEtPnJlcS5hY3R1YWwsIHJlcS0+cmVxLmxlbmd0aCk7CisKKwkvKiBkb24ndCBtb2RpZnkgcXVldWUgaGVhZHMgZHVyaW5nIGNvbXBsZXRpb24gY2FsbGJhY2sgKi8KKwllcC0+c3RvcHBlZCA9IDE7CisJc3Bpbl91bmxvY2soJnVkYy0+bG9jayk7CisKKwkvKiB0aGlzIGNvbXBsZXRlKCkgc2hvdWxkIGEgZnVuYyBpbXBsZW1lbnRlZCBieSBnYWRnZXQgbGF5ZXIsCisJICogZWcgZnNnLT5idWxrX2luX2NvbXBsZXRlKCkgKi8KKwlpZiAocmVxLT5yZXEuY29tcGxldGUpCisJCXJlcS0+cmVxLmNvbXBsZXRlKCZlcC0+ZXAsICZyZXEtPnJlcSk7CisKKwlzcGluX2xvY2soJnVkYy0+bG9jayk7CisKKwllcC0+c3RvcHBlZCA9IHN0b3BwZWQ7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIG51a2UoKTogZGVsZXRlIGFsbCByZXF1ZXN0cyByZWxhdGVkIHRvIHRoaXMgZXAKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIHZvaWQgbnVrZShzdHJ1Y3QgcWVfZXAgKmVwLCBpbnQgc3RhdHVzKQoreworCS8qIFdoZXRoZXIgdGhpcyBlcSBoYXMgcmVxdWVzdCBsaW5rZWQgKi8KKwl3aGlsZSAoIWxpc3RfZW1wdHkoJmVwLT5xdWV1ZSkpIHsKKwkJc3RydWN0IHFlX3JlcSAqcmVxID0gTlVMTDsKKwkJcmVxID0gbGlzdF9lbnRyeShlcC0+cXVldWUubmV4dCwgc3RydWN0IHFlX3JlcSwgcXVldWUpOworCisJCWRvbmUoZXAsIHJlcSwgc3RhdHVzKTsKKwl9Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKgorICogVVNCIGFuZCBFbmRwb2ludCBtYW5pcHVsYXRlIHByb2Nlc3MsIGluY2x1ZGUgcGFyYW1ldGVyIGFuZCByZWdpc3RlciAgICAgICAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiBAdmFsdWU6IDEtLXNldCBzdGFsbCAwLS1jbGVhbiBzdGFsbCAqLworc3RhdGljIGludCBxZV9lcHJ4X3N0YWxsX2NoYW5nZShzdHJ1Y3QgcWVfZXAgKmVwLCBpbnQgdmFsdWUpCit7CisJdTE2IHRlbV91c2VwOworCXU4IGVwbnVtID0gZXAtPmVwbnVtOworCXN0cnVjdCBxZV91ZGMgKnVkYyA9IGVwLT51ZGM7CisKKwl0ZW1fdXNlcCA9IGluX2JlMTYoJnVkYy0+dXNiX3JlZ3MtPnVzYl91c2VwW2VwbnVtXSk7CisJdGVtX3VzZXAgPSB0ZW1fdXNlcCAmIH5VU0JfUkhTX01BU0s7CisJaWYgKHZhbHVlID09IDEpCisJCXRlbV91c2VwIHw9IFVTQl9SSFNfU1RBTEw7CisJZWxzZSBpZiAoZXAtPmRpciA9PSBVU0JfRElSX0lOKQorCQl0ZW1fdXNlcCB8PSBVU0JfUkhTX0lHTk9SRV9PVVQ7CisKKwlvdXRfYmUxNigmdWRjLT51c2JfcmVncy0+dXNiX3VzZXBbZXBudW1dLCB0ZW1fdXNlcCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcWVfZXB0eF9zdGFsbF9jaGFuZ2Uoc3RydWN0IHFlX2VwICplcCwgaW50IHZhbHVlKQoreworCXUxNiB0ZW1fdXNlcDsKKwl1OCBlcG51bSA9IGVwLT5lcG51bTsKKwlzdHJ1Y3QgcWVfdWRjICp1ZGMgPSBlcC0+dWRjOworCisJdGVtX3VzZXAgPSBpbl9iZTE2KCZ1ZGMtPnVzYl9yZWdzLT51c2JfdXNlcFtlcG51bV0pOworCXRlbV91c2VwID0gdGVtX3VzZXAgJiB+VVNCX1RIU19NQVNLOworCWlmICh2YWx1ZSA9PSAxKQorCQl0ZW1fdXNlcCB8PSBVU0JfVEhTX1NUQUxMOworCWVsc2UgaWYgKGVwLT5kaXIgPT0gVVNCX0RJUl9PVVQpCisJCXRlbV91c2VwIHw9IFVTQl9USFNfSUdOT1JFX0lOOworCisJb3V0X2JlMTYoJnVkYy0+dXNiX3JlZ3MtPnVzYl91c2VwW2VwbnVtXSwgdGVtX3VzZXApOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcWVfZXAwX3N0YWxsKHN0cnVjdCBxZV91ZGMgKnVkYykKK3sKKwlxZV9lcHR4X3N0YWxsX2NoYW5nZSgmdWRjLT5lcHNbMF0sIDEpOworCXFlX2Vwcnhfc3RhbGxfY2hhbmdlKCZ1ZGMtPmVwc1swXSwgMSk7CisJdWRjX2NvbnRyb2xsZXItPmVwMF9zdGF0ZSA9IFdBSVRfRk9SX1NFVFVQOworCXVkY19jb250cm9sbGVyLT5lcDBfZGlyID0gMDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBxZV9lcHJ4X25hY2soc3RydWN0IHFlX2VwICplcCkKK3sKKwl1OCBlcG51bSA9IGVwLT5lcG51bTsKKwlzdHJ1Y3QgcWVfdWRjICp1ZGMgPSBlcC0+dWRjOworCisJaWYgKGVwLT5zdGF0ZSA9PSBFUF9TVEFURV9JRExFKSB7CisJCS8qIFNldCB0aGUgZXAncyBuYWNrICovCisJCWNscnNldGJpdHNfYmUxNigmdWRjLT51c2JfcmVncy0+dXNiX3VzZXBbZXBudW1dLAorCQkJCVVTQl9SSFNfTUFTSywgVVNCX1JIU19OQUNLKTsKKworCQkvKiBNYXNrIFJ4IGFuZCBCdXN5IGludGVycnVwdHMgKi8KKwkJY2xyYml0czE2KCZ1ZGMtPnVzYl9yZWdzLT51c2JfdXNibXIsCisJCQkJKFVTQl9FX1JYQl9NQVNLIHwgVVNCX0VfQlNZX01BU0spKTsKKworCQllcC0+c3RhdGUgPSBFUF9TVEFURV9OQUNLOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBxZV9lcHJ4X25vcm1hbChzdHJ1Y3QgcWVfZXAgKmVwKQoreworCXN0cnVjdCBxZV91ZGMgKnVkYyA9IGVwLT51ZGM7CisKKwlpZiAoZXAtPnN0YXRlID09IEVQX1NUQVRFX05BQ0spIHsKKwkJY2xyc2V0Yml0c19iZTE2KCZ1ZGMtPnVzYl9yZWdzLT51c2JfdXNlcFtlcC0+ZXBudW1dLAorCQkJCVVTQl9SVEhTX01BU0ssIFVTQl9USFNfSUdOT1JFX0lOKTsKKworCQkvKiBVbm1hc2sgUlggaW50ZXJydXB0cyAqLworCQlvdXRfYmUxNigmdWRjLT51c2JfcmVncy0+dXNiX3VzYmVyLAorCQkJCVVTQl9FX0JTWV9NQVNLIHwgVVNCX0VfUlhCX01BU0spOworCQlzZXRiaXRzMTYoJnVkYy0+dXNiX3JlZ3MtPnVzYl91c2JtciwKKwkJCQkoVVNCX0VfUlhCX01BU0sgfCBVU0JfRV9CU1lfTUFTSykpOworCisJCWVwLT5zdGF0ZSA9IEVQX1NUQVRFX0lETEU7CisJCWVwLT5oYXNfZGF0YSA9IDA7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcWVfZXBfY21kX3N0b3B0eChzdHJ1Y3QgcWVfZXAgKmVwKQoreworCWlmIChlcC0+dWRjLT5zb2NfdHlwZSA9PSBQT1JUX0NQTSkKKwkJY3BtX2NvbW1hbmQoQ1BNX1VTQl9TVE9QX1RYIHwgKGVwLT5lcG51bSA8PCBDUE1fVVNCX0VQX1NISUZUKSwKKwkJCQlDUE1fVVNCX1NUT1BfVFhfT1BDT0RFKTsKKwllbHNlCisJCXFlX2lzc3VlX2NtZChRRV9VU0JfU1RPUF9UWCwgUUVfQ1JfU1VCQkxPQ0tfVVNCLAorCQkJCWVwLT5lcG51bSwgMCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBxZV9lcF9jbWRfcmVzdGFydHR4KHN0cnVjdCBxZV9lcCAqZXApCit7CisJaWYgKGVwLT51ZGMtPnNvY190eXBlID09IFBPUlRfQ1BNKQorCQljcG1fY29tbWFuZChDUE1fVVNCX1JFU1RBUlRfVFggfCAoZXAtPmVwbnVtIDw8CisJCQkJQ1BNX1VTQl9FUF9TSElGVCksIENQTV9VU0JfUkVTVEFSVF9UWF9PUENPREUpOworCWVsc2UKKwkJcWVfaXNzdWVfY21kKFFFX1VTQl9SRVNUQVJUX1RYLCBRRV9DUl9TVUJCTE9DS19VU0IsCisJCQkJZXAtPmVwbnVtLCAwKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHFlX2VwX2ZsdXNodHhmaWZvKHN0cnVjdCBxZV9lcCAqZXApCit7CisJc3RydWN0IHFlX3VkYyAqdWRjID0gZXAtPnVkYzsKKwlpbnQgaTsKKworCWkgPSAoaW50KWVwLT5lcG51bTsKKworCXFlX2VwX2NtZF9zdG9wdHgoZXApOworCW91dF84KCZ1ZGMtPnVzYl9yZWdzLT51c2JfdXNjb20sCisJCVVTQl9DTURfRkxVU0hfRklGTyB8IChVU0JfQ01EX0VQX01BU0sgJiAoZXAtPmVwbnVtKSkpOworCW91dF9iZTE2KCZ1ZGMtPmVwX3BhcmFtW2ldLT50YnB0ciwgaW5fYmUxNigmdWRjLT5lcF9wYXJhbVtpXS0+dGJhc2UpKTsKKwlvdXRfYmUzMigmdWRjLT5lcF9wYXJhbVtpXS0+dHN0YXRlLCAwKTsKKwlvdXRfYmUxNigmdWRjLT5lcF9wYXJhbVtpXS0+dGJjbnQsIDApOworCisJZXAtPmNfdHhiZCA9IGVwLT50eGJhc2U7CisJZXAtPm5fdHhiZCA9IGVwLT50eGJhc2U7CisJcWVfZXBfY21kX3Jlc3RhcnR0eChlcCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcWVfZXBfZmlsbHR4ZmlmbyhzdHJ1Y3QgcWVfZXAgKmVwKQoreworCXN0cnVjdCBxZV91ZGMgKnVkYyA9IGVwLT51ZGM7CisKKwlvdXRfOCgmdWRjLT51c2JfcmVncy0+dXNiX3VzY29tLAorCQkJVVNCX0NNRF9TVFJfRklGTyB8IChVU0JfQ01EX0VQX01BU0sgJiAoZXAtPmVwbnVtKSkpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHFlX2VwYmRzX3Jlc2V0KHN0cnVjdCBxZV91ZGMgKnVkYywgaW50IHBpcGVfbnVtKQoreworCXN0cnVjdCBxZV9lcCAqZXA7CisJdTMyIGJkcmluZ19sZW47CisJc3RydWN0IHFlX2JkIF9faW9tZW0gKmJkOworCWludCBpOworCisJZXAgPSAmdWRjLT5lcHNbcGlwZV9udW1dOworCisJaWYgKGVwLT5kaXIgPT0gVVNCX0RJUl9PVVQpCisJCWJkcmluZ19sZW4gPSBVU0JfQkRSSU5HX0xFTl9SWDsKKwllbHNlCisJCWJkcmluZ19sZW4gPSBVU0JfQkRSSU5HX0xFTjsKKworCWJkID0gZXAtPnJ4YmFzZTsKKwlmb3IgKGkgPSAwOyBpIDwgKGJkcmluZ19sZW4gLSAxKTsgaSsrKSB7CisJCW91dF9iZTMyKCh1MzIgX19pb21lbSAqKWJkLCBSX0UgfCBSX0kpOworCQliZCsrOworCX0KKwlvdXRfYmUzMigodTMyIF9faW9tZW0gKiliZCwgUl9FIHwgUl9JIHwgUl9XKTsKKworCWJkID0gZXAtPnR4YmFzZTsKKwlmb3IgKGkgPSAwOyBpIDwgVVNCX0JEUklOR19MRU5fVFggLSAxOyBpKyspIHsKKwkJb3V0X2JlMzIoJmJkLT5idWYsIDApOworCQlvdXRfYmUzMigodTMyIF9faW9tZW0gKiliZCwgMCk7CisJCWJkKys7CisJfQorCW91dF9iZTMyKCh1MzIgX19pb21lbSAqKWJkLCBUX1cpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcWVfZXBfcmVzZXQoc3RydWN0IHFlX3VkYyAqdWRjLCBpbnQgcGlwZV9udW0pCit7CisJc3RydWN0IHFlX2VwICplcDsKKwl1MTYgdG1wdXNlcDsKKworCWVwID0gJnVkYy0+ZXBzW3BpcGVfbnVtXTsKKwl0bXB1c2VwID0gaW5fYmUxNigmdWRjLT51c2JfcmVncy0+dXNiX3VzZXBbcGlwZV9udW1dKTsKKwl0bXB1c2VwICY9IH5VU0JfUlRIU19NQVNLOworCisJc3dpdGNoIChlcC0+ZGlyKSB7CisJY2FzZSBVU0JfRElSX0JPVEg6CisJCXFlX2VwX2ZsdXNodHhmaWZvKGVwKTsKKwkJYnJlYWs7CisJY2FzZSBVU0JfRElSX09VVDoKKwkJdG1wdXNlcCB8PSBVU0JfVEhTX0lHTk9SRV9JTjsKKwkJYnJlYWs7CisJY2FzZSBVU0JfRElSX0lOOgorCQlxZV9lcF9mbHVzaHR4ZmlmbyhlcCk7CisJCXRtcHVzZXAgfD0gVVNCX1JIU19JR05PUkVfT1VUOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisJb3V0X2JlMTYoJnVkYy0+dXNiX3JlZ3MtPnVzYl91c2VwW3BpcGVfbnVtXSwgdG1wdXNlcCk7CisKKwlxZV9lcGJkc19yZXNldCh1ZGMsIHBpcGVfbnVtKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHFlX2VwX3RvZ2dsZWRhdGEwMShzdHJ1Y3QgcWVfZXAgKmVwKQoreworCWVwLT5kYXRhMDEgXj0gMHgxOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHFlX2VwX2JkX2luaXQoc3RydWN0IHFlX3VkYyAqdWRjLCB1bnNpZ25lZCBjaGFyIHBpcGVfbnVtKQoreworCXN0cnVjdCBxZV9lcCAqZXAgPSAmdWRjLT5lcHNbcGlwZV9udW1dOworCXVuc2lnbmVkIGxvbmcgdG1wX2FkZHIgPSAwOworCXN0cnVjdCB1c2JfZXBfcGFyYSBfX2lvbWVtICplcHBhcmFtOworCWludCBpOworCXN0cnVjdCBxZV9iZCBfX2lvbWVtICpiZDsKKwlpbnQgYmRyaW5nX2xlbjsKKworCWlmIChlcC0+ZGlyID09IFVTQl9ESVJfT1VUKQorCQliZHJpbmdfbGVuID0gVVNCX0JEUklOR19MRU5fUlg7CisJZWxzZQorCQliZHJpbmdfbGVuID0gVVNCX0JEUklOR19MRU47CisKKwllcHBhcmFtID0gdWRjLT5lcF9wYXJhbVtwaXBlX251bV07CisJLyogYWxsb2MgbXVsdGktcmFtIGZvciBCRCByaW5ncyBhbmQgc2V0IHRoZSBlcCBwYXJhbWV0ZXJzICovCisJdG1wX2FkZHIgPSBjcG1fbXVyYW1fYWxsb2Moc2l6ZW9mKHN0cnVjdCBxZV9iZCkgKiAoYmRyaW5nX2xlbiArCisJCQkJVVNCX0JEUklOR19MRU5fVFgpLCBRRV9BTElHTk1FTlRfT0ZfQkQpOworCW91dF9iZTE2KCZlcHBhcmFtLT5yYmFzZSwgKHUxNil0bXBfYWRkcik7CisJb3V0X2JlMTYoJmVwcGFyYW0tPnRiYXNlLCAodTE2KSh0bXBfYWRkciArCisJCQkJKHNpemVvZihzdHJ1Y3QgcWVfYmQpICogYmRyaW5nX2xlbikpKTsKKworCW91dF9iZTE2KCZlcHBhcmFtLT5yYnB0ciwgaW5fYmUxNigmZXBwYXJhbS0+cmJhc2UpKTsKKwlvdXRfYmUxNigmZXBwYXJhbS0+dGJwdHIsIGluX2JlMTYoJmVwcGFyYW0tPnRiYXNlKSk7CisKKwllcC0+cnhiYXNlID0gY3BtX211cmFtX2FkZHIodG1wX2FkZHIpOworCWVwLT50eGJhc2UgPSBjcG1fbXVyYW1fYWRkcih0bXBfYWRkciArIChzaXplb2Yoc3RydWN0IHFlX2JkKQorCQkJCSogYmRyaW5nX2xlbikpOworCWVwLT5uX3J4YmQgPSBlcC0+cnhiYXNlOworCWVwLT5lX3J4YmQgPSBlcC0+cnhiYXNlOworCWVwLT5uX3R4YmQgPSBlcC0+dHhiYXNlOworCWVwLT5jX3R4YmQgPSBlcC0+dHhiYXNlOworCWVwLT5kYXRhMDEgPSAwOyAvKiBkYXRhMCAqLworCisJLyogSW5pdCBUWCBhbmQgUlggYmRzICovCisJYmQgPSBlcC0+cnhiYXNlOworCWZvciAoaSA9IDA7IGkgPCBiZHJpbmdfbGVuIC0gMTsgaSsrKSB7CisJCW91dF9iZTMyKCZiZC0+YnVmLCAwKTsKKwkJb3V0X2JlMzIoKHUzMiBfX2lvbWVtICopYmQsIDApOworCQliZCsrOworCX0KKwlvdXRfYmUzMigmYmQtPmJ1ZiwgMCk7CisJb3V0X2JlMzIoKHUzMiBfX2lvbWVtICopYmQsIFJfVyk7CisKKwliZCA9IGVwLT50eGJhc2U7CisJZm9yIChpID0gMDsgaSA8IFVTQl9CRFJJTkdfTEVOX1RYIC0gMTsgaSsrKSB7CisJCW91dF9iZTMyKCZiZC0+YnVmLCAwKTsKKwkJb3V0X2JlMzIoKHUzMiBfX2lvbWVtICopYmQsIDApOworCQliZCsrOworCX0KKwlvdXRfYmUzMigmYmQtPmJ1ZiwgMCk7CisJb3V0X2JlMzIoKHUzMiBfX2lvbWVtICopYmQsIFRfVyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBxZV9lcF9yeGJkX3VwZGF0ZShzdHJ1Y3QgcWVfZXAgKmVwKQoreworCXVuc2lnbmVkIGludCBzaXplOworCWludCBpOworCXVuc2lnbmVkIGludCB0bXA7CisJc3RydWN0IHFlX2JkIF9faW9tZW0gKmJkOworCXVuc2lnbmVkIGludCBiZHJpbmdfbGVuOworCisJaWYgKGVwLT5yeGJhc2UgPT0gTlVMTCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwliZCA9IGVwLT5yeGJhc2U7CisKKwllcC0+cnhmcmFtZSA9IGttYWxsb2Moc2l6ZW9mKCplcC0+cnhmcmFtZSksIEdGUF9BVE9NSUMpOworCWlmIChlcC0+cnhmcmFtZSA9PSBOVUxMKSB7CisJCWRldl9lcnIoZXAtPnVkYy0+ZGV2LCAibWFsbG9jIHJ4ZnJhbWUgZmFpbGVkXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJcWVfZnJhbWVfaW5pdChlcC0+cnhmcmFtZSk7CisKKwlpZiAoZXAtPmRpciA9PSBVU0JfRElSX09VVCkKKwkJYmRyaW5nX2xlbiA9IFVTQl9CRFJJTkdfTEVOX1JYOworCWVsc2UKKwkJYmRyaW5nX2xlbiA9IFVTQl9CRFJJTkdfTEVOOworCisJc2l6ZSA9IChlcC0+ZXAubWF4cGFja2V0ICsgVVNCX0NSQ19TSVpFICsgMikgKiAoYmRyaW5nX2xlbiArIDEpOworCWVwLT5yeGJ1ZmZlciA9IGt6YWxsb2Moc2l6ZSwgR0ZQX0FUT01JQyk7CisJaWYgKGVwLT5yeGJ1ZmZlciA9PSBOVUxMKSB7CisJCWRldl9lcnIoZXAtPnVkYy0+ZGV2LCAibWFsbG9jIHJ4YnVmZmVyIGZhaWxlZCxzaXplPSVkXG4iLAorCQkJCXNpemUpOworCQlrZnJlZShlcC0+cnhmcmFtZSk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCWVwLT5yeGJ1Zl9kID0gdmlydF90b19waHlzKCh2b2lkICopZXAtPnJ4YnVmZmVyKTsKKwlpZiAoZXAtPnJ4YnVmX2QgPT0gRE1BX0FERFJfSU5WQUxJRCkgeworCQllcC0+cnhidWZfZCA9IGRtYV9tYXBfc2luZ2xlKHVkY19jb250cm9sbGVyLT5nYWRnZXQuZGV2LnBhcmVudCwKKwkJCQkJZXAtPnJ4YnVmZmVyLAorCQkJCQlzaXplLAorCQkJCQlETUFfRlJPTV9ERVZJQ0UpOworCQllcC0+cnhidWZtYXAgPSAxOworCX0gZWxzZSB7CisJCWRtYV9zeW5jX3NpbmdsZV9mb3JfZGV2aWNlKHVkY19jb250cm9sbGVyLT5nYWRnZXQuZGV2LnBhcmVudCwKKwkJCQkJZXAtPnJ4YnVmX2QsIHNpemUsCisJCQkJCURNQV9GUk9NX0RFVklDRSk7CisJCWVwLT5yeGJ1Zm1hcCA9IDA7CisJfQorCisJc2l6ZSA9IGVwLT5lcC5tYXhwYWNrZXQgKyBVU0JfQ1JDX1NJWkUgKyAyOworCXRtcCA9IGVwLT5yeGJ1Zl9kOworCXRtcCA9ICh1MzIpKCgodG1wID4+IDIpIDw8IDIpICsgNCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgYmRyaW5nX2xlbiAtIDE7IGkrKykgeworCQlvdXRfYmUzMigmYmQtPmJ1ZiwgdG1wKTsKKwkJb3V0X2JlMzIoKHUzMiBfX2lvbWVtICopYmQsIChSX0UgfCBSX0kpKTsKKwkJdG1wID0gdG1wICsgc2l6ZTsKKwkJYmQrKzsKKwl9CisJb3V0X2JlMzIoJmJkLT5idWYsIHRtcCk7CisJb3V0X2JlMzIoKHUzMiBfX2lvbWVtICopYmQsIChSX0UgfCBSX0kgfCBSX1cpKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHFlX2VwX3JlZ2lzdGVyX2luaXQoc3RydWN0IHFlX3VkYyAqdWRjLCB1bnNpZ25lZCBjaGFyIHBpcGVfbnVtKQoreworCXN0cnVjdCBxZV9lcCAqZXAgPSAmdWRjLT5lcHNbcGlwZV9udW1dOworCXN0cnVjdCB1c2JfZXBfcGFyYSBfX2lvbWVtICplcHBhcmFtOworCXUxNiB1c2VwLCBsb2dlcG51bTsKKwl1MTYgdG1wOworCXU4IHJ0ZmNyID0gMDsKKworCWVwcGFyYW0gPSB1ZGMtPmVwX3BhcmFtW3BpcGVfbnVtXTsKKworCXVzZXAgPSAwOworCWxvZ2VwbnVtID0gKGVwLT5kZXNjLT5iRW5kcG9pbnRBZGRyZXNzICYgVVNCX0VORFBPSU5UX05VTUJFUl9NQVNLKTsKKwl1c2VwIHw9IChsb2dlcG51bSA8PCBVU0JfRVBOVU1fU0hJRlQpOworCisJc3dpdGNoIChlcC0+ZGVzYy0+Ym1BdHRyaWJ1dGVzICYgMHgwMykgeworCWNhc2UgVVNCX0VORFBPSU5UX1hGRVJfQlVMSzoKKwkJdXNlcCB8PSBVU0JfVFJBTlNfQlVMSzsKKwkJYnJlYWs7CisJY2FzZSBVU0JfRU5EUE9JTlRfWEZFUl9JU09DOgorCQl1c2VwIHw9ICBVU0JfVFJBTlNfSVNPOworCQlicmVhazsKKwljYXNlIFVTQl9FTkRQT0lOVF9YRkVSX0lOVDoKKwkJdXNlcCB8PSBVU0JfVFJBTlNfSU5UOworCQlicmVhazsKKwlkZWZhdWx0OgorCQl1c2VwIHw9IFVTQl9UUkFOU19DVFI7CisJCWJyZWFrOworCX0KKworCXN3aXRjaCAoZXAtPmRpcikgeworCWNhc2UgVVNCX0RJUl9PVVQ6CisJCXVzZXAgfD0gVVNCX1RIU19JR05PUkVfSU47CisJCWJyZWFrOworCWNhc2UgVVNCX0RJUl9JTjoKKwkJdXNlcCB8PSBVU0JfUkhTX0lHTk9SRV9PVVQ7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKwlvdXRfYmUxNigmdWRjLT51c2JfcmVncy0+dXNiX3VzZXBbcGlwZV9udW1dLCB1c2VwKTsKKworCXJ0ZmNyID0gMHgzMDsKKwlvdXRfOCgmZXBwYXJhbS0+cmJtciwgcnRmY3IpOworCW91dF84KCZlcHBhcmFtLT50Ym1yLCBydGZjcik7CisKKwl0bXAgPSAodTE2KShlcC0+ZXAubWF4cGFja2V0ICsgVVNCX0NSQ19TSVpFKTsKKwkvKiBNUkJMUiBtdXN0IGJlIGRpdmlzYmxlIGJ5IDQgKi8KKwl0bXAgPSAodTE2KSgoKHRtcCA+PiAyKSA8PCAyKSArIDQpOworCW91dF9iZTE2KCZlcHBhcmFtLT5tcmJsciwgdG1wKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHFlX2VwX2luaXQoc3RydWN0IHFlX3VkYyAqdWRjLAorCQkgICAgICB1bnNpZ25lZCBjaGFyIHBpcGVfbnVtLAorCQkgICAgICBjb25zdCBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmRlc2MpCit7CisJc3RydWN0IHFlX2VwICplcCA9ICZ1ZGMtPmVwc1twaXBlX251bV07CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgcmV2YWwgPSAwOworCXUxNiBtYXggPSAwOworCisJbWF4ID0gbGUxNl90b19jcHUoZGVzYy0+d01heFBhY2tldFNpemUpOworCisJLyogY2hlY2sgdGhlIG1heCBwYWNrYWdlIHNpemUgdmFsaWRhdGUgZm9yIHRoaXMgZW5kcG9pbnQgKi8KKwkvKiBSZWZlciB0byBVU0IyLjAgc3BlYyB0YWJsZSA5LTEzLAorCSovCisJaWYgKHBpcGVfbnVtICE9IDApIHsKKwkJc3dpdGNoIChkZXNjLT5ibUF0dHJpYnV0ZXMgJiBVU0JfRU5EUE9JTlRfWEZFUlRZUEVfTUFTSykgeworCQljYXNlIFVTQl9FTkRQT0lOVF9YRkVSX0JVTEs6CisJCQlpZiAoc3Ryc3RyKGVwLT5lcC5uYW1lLCAiLWlzbyIpCisJCQkJCXx8IHN0cnN0cihlcC0+ZXAubmFtZSwgIi1pbnQiKSkKKwkJCQlnb3RvIGVuX2RvbmU7CisJCQlzd2l0Y2ggKHVkYy0+Z2FkZ2V0LnNwZWVkKSB7CisJCQljYXNlIFVTQl9TUEVFRF9ISUdIOgorCQkJaWYgKChtYXggPT0gMTI4KSB8fCAobWF4ID09IDI1NikgfHwgKG1heCA9PSA1MTIpKQorCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQlzd2l0Y2ggKG1heCkgeworCQkJCWNhc2UgNDoKKwkJCQljYXNlIDg6CisJCQkJY2FzZSAxNjoKKwkJCQljYXNlIDMyOgorCQkJCWNhc2UgNjQ6CisJCQkJCWJyZWFrOworCQkJCWRlZmF1bHQ6CisJCQkJY2FzZSBVU0JfU1BFRURfTE9XOgorCQkJCQlnb3RvIGVuX2RvbmU7CisJCQkJfQorCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgVVNCX0VORFBPSU5UX1hGRVJfSU5UOgorCQkJaWYgKHN0cnN0cihlcC0+ZXAubmFtZSwgIi1pc28iKSkJLyogYnVsayBpcyBvayAqLworCQkJCWdvdG8gZW5fZG9uZTsKKwkJCXN3aXRjaCAodWRjLT5nYWRnZXQuc3BlZWQpIHsKKwkJCWNhc2UgVVNCX1NQRUVEX0hJR0g6CisJCQkJaWYgKG1heCA8PSAxMDI0KQorCQkJCQlicmVhazsKKwkJCWNhc2UgVVNCX1NQRUVEX0ZVTEw6CisJCQkJaWYgKG1heCA8PSA2NCkKKwkJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCWlmIChtYXggPD0gOCkKKwkJCQkJYnJlYWs7CisJCQkJZ290byBlbl9kb25lOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgVVNCX0VORFBPSU5UX1hGRVJfSVNPQzoKKwkJCWlmIChzdHJzdHIoZXAtPmVwLm5hbWUsICItYnVsayIpCisJCQkJfHwgc3Ryc3RyKGVwLT5lcC5uYW1lLCAiLWludCIpKQorCQkJCWdvdG8gZW5fZG9uZTsKKwkJCXN3aXRjaCAodWRjLT5nYWRnZXQuc3BlZWQpIHsKKwkJCWNhc2UgVVNCX1NQRUVEX0hJR0g6CisJCQkJaWYgKG1heCA8PSAxMDI0KQorCQkJCQlicmVhazsKKwkJCWNhc2UgVVNCX1NQRUVEX0ZVTEw6CisJCQkJaWYgKG1heCA8PSAxMDIzKQorCQkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJZ290byBlbl9kb25lOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgVVNCX0VORFBPSU5UX1hGRVJfQ09OVFJPTDoKKwkJCWlmIChzdHJzdHIoZXAtPmVwLm5hbWUsICItaXNvIikKKwkJCQl8fCBzdHJzdHIoZXAtPmVwLm5hbWUsICItaW50IikpCisJCQkJZ290byBlbl9kb25lOworCQkJc3dpdGNoICh1ZGMtPmdhZGdldC5zcGVlZCkgeworCQkJY2FzZSBVU0JfU1BFRURfSElHSDoKKwkJCWNhc2UgVVNCX1NQRUVEX0ZVTEw6CisJCQkJc3dpdGNoIChtYXgpIHsKKwkJCQljYXNlIDE6CisJCQkJY2FzZSAyOgorCQkJCWNhc2UgNDoKKwkJCQljYXNlIDg6CisJCQkJY2FzZSAxNjoKKwkJCQljYXNlIDMyOgorCQkJCWNhc2UgNjQ6CisJCQkJCWJyZWFrOworCQkJCWRlZmF1bHQ6CisJCQkJCWdvdG8gZW5fZG9uZTsKKwkJCQl9CisJCQljYXNlIFVTQl9TUEVFRF9MT1c6CisJCQkJc3dpdGNoIChtYXgpIHsKKwkJCQljYXNlIDE6CisJCQkJY2FzZSAyOgorCQkJCWNhc2UgNDoKKwkJCQljYXNlIDg6CisJCQkJCWJyZWFrOworCQkJCWRlZmF1bHQ6CisJCQkJCWdvdG8gZW5fZG9uZTsKKwkJCQl9CisJCQlkZWZhdWx0OgorCQkJCWdvdG8gZW5fZG9uZTsKKwkJCX0KKwkJCWJyZWFrOworCisJCWRlZmF1bHQ6CisJCQlnb3RvIGVuX2RvbmU7CisJCX0KKwl9IC8qIGlmIGVwMCovCisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmdWRjLT5sb2NrLCBmbGFncyk7CisKKwkvKiBpbml0aWFsaXplIGVwIHN0cnVjdHVyZSAqLworCWVwLT5lcC5tYXhwYWNrZXQgPSBtYXg7CisJZXAtPnRtID0gKHU4KShkZXNjLT5ibUF0dHJpYnV0ZXMgJiBVU0JfRU5EUE9JTlRfWEZFUlRZUEVfTUFTSyk7CisJZXAtPmRlc2MgPSBkZXNjOworCWVwLT5zdG9wcGVkID0gMDsKKwllcC0+aW5pdCA9IDE7CisKKwlpZiAocGlwZV9udW0gPT0gMCkgeworCQllcC0+ZGlyID0gVVNCX0RJUl9CT1RIOworCQl1ZGMtPmVwMF9kaXIgPSBVU0JfRElSX09VVDsKKwkJdWRjLT5lcDBfc3RhdGUgPSBXQUlUX0ZPUl9TRVRVUDsKKwl9IGVsc2UJeworCQlzd2l0Y2ggKGRlc2MtPmJFbmRwb2ludEFkZHJlc3MgJiBVU0JfRU5EUE9JTlRfRElSX01BU0spIHsKKwkJY2FzZSBVU0JfRElSX09VVDoKKwkJCWVwLT5kaXIgPSBVU0JfRElSX09VVDsKKwkJCWJyZWFrOworCQljYXNlIFVTQl9ESVJfSU46CisJCQllcC0+ZGlyID0gVVNCX0RJUl9JTjsKKwkJZGVmYXVsdDoKKwkJCWJyZWFrOworCQl9CisJfQorCisJLyogaGFyZHdhcmUgc3BlY2lhbCBvcGVyYXRpb24gKi8KKwlxZV9lcF9iZF9pbml0KHVkYywgcGlwZV9udW0pOworCWlmICgoZXAtPnRtID09IFVTQlBfVE1fQ1RMKSB8fCAoZXAtPmRpciA9PSBVU0JfRElSX09VVCkpIHsKKwkJcmV2YWwgPSBxZV9lcF9yeGJkX3VwZGF0ZShlcCk7CisJCWlmIChyZXZhbCkKKwkJCWdvdG8gZW5fZG9uZTE7CisJfQorCisJaWYgKChlcC0+dG0gPT0gVVNCUF9UTV9DVEwpIHx8IChlcC0+ZGlyID09IFVTQl9ESVJfSU4pKSB7CisJCWVwLT50eGZyYW1lID0ga21hbGxvYyhzaXplb2YoKmVwLT50eGZyYW1lKSwgR0ZQX0FUT01JQyk7CisJCWlmIChlcC0+dHhmcmFtZSA9PSBOVUxMKSB7CisJCQlkZXZfZXJyKHVkYy0+ZGV2LCAibWFsbG9jIHR4ZnJhbWUgZmFpbGVkXG4iKTsKKwkJCWdvdG8gZW5fZG9uZTI7CisJCX0KKwkJcWVfZnJhbWVfaW5pdChlcC0+dHhmcmFtZSk7CisJfQorCisJcWVfZXBfcmVnaXN0ZXJfaW5pdCh1ZGMsIHBpcGVfbnVtKTsKKworCS8qIE5vdyBIVyB3aWxsIGJlIE5BS2luZyB0cmFuc2ZlcnMgdG8gdGhhdCBFUCwKKwkgKiB1bnRpbCBhIGJ1ZmZlciBpcyBxdWV1ZWQgdG8gaXQuICovCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdWRjLT5sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gMDsKK2VuX2RvbmUyOgorCWtmcmVlKGVwLT5yeGJ1ZmZlcik7CisJa2ZyZWUoZXAtPnJ4ZnJhbWUpOworZW5fZG9uZTE6CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdWRjLT5sb2NrLCBmbGFncyk7Citlbl9kb25lOgorCWRldl9kYmcodWRjLT5kZXYsICJmYWlsZWQgdG8gaW5pdGlhbGl6ZSAlc1xuIiwgZXAtPmVwLm5hbWUpOworCXJldHVybiAtRU5PREVWOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgcWVfdXNiX2VuYWJsZSh2b2lkKQoreworCXNldGJpdHM4KCZ1ZGNfY29udHJvbGxlci0+dXNiX3JlZ3MtPnVzYl91c21vZCwgVVNCX01PREVfRU4pOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgcWVfdXNiX2Rpc2FibGUodm9pZCkKK3sKKwljbHJiaXRzOCgmdWRjX2NvbnRyb2xsZXItPnVzYl9yZWdzLT51c2JfdXNtb2QsIFVTQl9NT0RFX0VOKTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKgorICoJCVVTQiBhbmQgRVAgYmFzaWMgbWFuaXB1bGF0ZSBmdW5jdGlvbiBlbmQJCSAgICAgICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCQlVREMgdHJhbnNtaXQgYW5kIHJlY2VpdmUgcHJvY2VzcworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyB2b2lkIHJlY3ljbGVfb25lX3J4YmQoc3RydWN0IHFlX2VwICplcCkKK3sKKwl1MzIgYmRzdGF0dXM7CisKKwliZHN0YXR1cyA9IGluX2JlMzIoKHUzMiBfX2lvbWVtICopZXAtPmVfcnhiZCk7CisJYmRzdGF0dXMgPSBSX0kgfCBSX0UgfCAoYmRzdGF0dXMgJiBSX1cpOworCW91dF9iZTMyKCh1MzIgX19pb21lbSAqKWVwLT5lX3J4YmQsIGJkc3RhdHVzKTsKKworCWlmIChiZHN0YXR1cyAmIFJfVykKKwkJZXAtPmVfcnhiZCA9IGVwLT5yeGJhc2U7CisJZWxzZQorCQllcC0+ZV9yeGJkKys7Cit9CisKK3N0YXRpYyB2b2lkIHJlY3ljbGVfcnhiZHMoc3RydWN0IHFlX2VwICplcCwgdW5zaWduZWQgY2hhciBzdG9wYXRuZXh0KQoreworCXUzMiBiZHN0YXR1czsKKwlzdHJ1Y3QgcWVfYmQgX19pb21lbSAqYmQsICpuZXh0YmQ7CisJdW5zaWduZWQgY2hhciBzdG9wID0gMDsKKworCW5leHRiZCA9IGVwLT5uX3J4YmQ7CisJYmQgPSBlcC0+ZV9yeGJkOworCWJkc3RhdHVzID0gaW5fYmUzMigodTMyIF9faW9tZW0gKiliZCk7CisKKwl3aGlsZSAoIShiZHN0YXR1cyAmIFJfRSkgJiYgIShiZHN0YXR1cyAmIEJEX0xFTkdUSF9NQVNLKSAmJiAhc3RvcCkgeworCQliZHN0YXR1cyA9IFJfRSB8IFJfSSB8IChiZHN0YXR1cyAmIFJfVyk7CisJCW91dF9iZTMyKCh1MzIgX19pb21lbSAqKWJkLCBiZHN0YXR1cyk7CisKKwkJaWYgKGJkc3RhdHVzICYgUl9XKQorCQkJYmQgPSBlcC0+cnhiYXNlOworCQllbHNlCisJCQliZCsrOworCisJCWJkc3RhdHVzID0gaW5fYmUzMigodTMyIF9faW9tZW0gKiliZCk7CisJCWlmIChzdG9wYXRuZXh0ICYmIChiZCA9PSBuZXh0YmQpKQorCQkJc3RvcCA9IDE7CisJfQorCisJZXAtPmVfcnhiZCA9IGJkOworfQorCitzdGF0aWMgdm9pZCBlcF9yZWN5Y2xlX3J4YmRzKHN0cnVjdCBxZV9lcCAqZXApCit7CisJc3RydWN0IHFlX2JkIF9faW9tZW0gKmJkID0gZXAtPm5fcnhiZDsKKwl1MzIgYmRzdGF0dXM7CisJdTggZXBudW0gPSBlcC0+ZXBudW07CisJc3RydWN0IHFlX3VkYyAqdWRjID0gZXAtPnVkYzsKKworCWJkc3RhdHVzID0gaW5fYmUzMigodTMyIF9faW9tZW0gKiliZCk7CisJaWYgKCEoYmRzdGF0dXMgJiBSX0UpICYmICEoYmRzdGF0dXMgJiBCRF9MRU5HVEhfTUFTSykpIHsKKwkJYmQgPSBlcC0+cnhiYXNlICsKKwkJCQkoKGluX2JlMTYoJnVkYy0+ZXBfcGFyYW1bZXBudW1dLT5yYnB0cikgLQorCQkJCSAgaW5fYmUxNigmdWRjLT5lcF9wYXJhbVtlcG51bV0tPnJiYXNlKSkKKwkJCQkgPj4gMyk7CisJCWJkc3RhdHVzID0gaW5fYmUzMigodTMyIF9faW9tZW0gKiliZCk7CisKKwkJaWYgKGJkc3RhdHVzICYgUl9XKQorCQkJYmQgPSBlcC0+cnhiYXNlOworCQllbHNlCisJCQliZCsrOworCisJCWVwLT5lX3J4YmQgPSBiZDsKKwkJcmVjeWNsZV9yeGJkcyhlcCwgMCk7CisJCWVwLT5lX3J4YmQgPSBlcC0+bl9yeGJkOworCX0gZWxzZQorCQlyZWN5Y2xlX3J4YmRzKGVwLCAxKTsKKworCWlmIChpbl9iZTE2KCZ1ZGMtPnVzYl9yZWdzLT51c2JfdXNiZXIpICYgVVNCX0VfQlNZX01BU0spCisJCW91dF9iZTE2KCZ1ZGMtPnVzYl9yZWdzLT51c2JfdXNiZXIsIFVTQl9FX0JTWV9NQVNLKTsKKworCWlmIChlcC0+aGFzX2RhdGEgPD0gMCAmJiAoIWxpc3RfZW1wdHkoJmVwLT5xdWV1ZSkpKQorCQlxZV9lcHJ4X25vcm1hbChlcCk7CisKKwllcC0+bG9jYWxuYWNrID0gMDsKK30KKworc3RhdGljIHZvaWQgc2V0dXBfcmVjZWl2ZWRfaGFuZGxlKHN0cnVjdCBxZV91ZGMgKnVkYywKKwkJCQkJc3RydWN0IHVzYl9jdHJscmVxdWVzdCAqc2V0dXApOworc3RhdGljIGludCBxZV9lcF9yeGZyYW1lX2hhbmRsZShzdHJ1Y3QgcWVfZXAgKmVwKTsKK3N0YXRpYyB2b2lkIGVwMF9yZXFfY29tcGxldGUoc3RydWN0IHFlX3VkYyAqdWRjLCBzdHJ1Y3QgcWVfcmVxICpyZXEpOworLyogd2hlbiBCRCBQSUQgaXMgc2V0dXAsIGhhbmRsZSB0aGUgcGFja2V0ICovCitzdGF0aWMgaW50IGVwMF9zZXR1cF9oYW5kbGUoc3RydWN0IHFlX3VkYyAqdWRjKQoreworCXN0cnVjdCBxZV9lcCAqZXAgPSAmdWRjLT5lcHNbMF07CisJc3RydWN0IHFlX2ZyYW1lICpwZnJhbWU7CisJdW5zaWduZWQgaW50IGZzaXplOworCXU4ICpjcDsKKworCXBmcmFtZSA9IGVwLT5yeGZyYW1lOworCWlmICgoZnJhbWVfZ2V0X2luZm8ocGZyYW1lKSAmIFBJRF9TRVRVUCkKKwkJCSYmICh1ZGMtPmVwMF9zdGF0ZSA9PSBXQUlUX0ZPUl9TRVRVUCkpIHsKKwkJZnNpemUgPSBmcmFtZV9nZXRfbGVuZ3RoKHBmcmFtZSk7CisJCWlmICh1bmxpa2VseShmc2l6ZSAhPSA4KSkKKwkJCXJldHVybiAtRUlOVkFMOworCQljcCA9ICh1OCAqKSZ1ZGMtPmxvY2FsX3NldHVwX2J1ZmY7CisJCW1lbWNweShjcCwgcGZyYW1lLT5kYXRhLCBmc2l6ZSk7CisJCWVwLT5kYXRhMDEgPSAxOworCisJCS8qIGhhbmRsZSB0aGUgdXNiIGNvbW1hbmQgYmFzZSBvbiB0aGUgdXNiX2N0cmxyZXF1ZXN0ICovCisJCXNldHVwX3JlY2VpdmVkX2hhbmRsZSh1ZGMsICZ1ZGMtPmxvY2FsX3NldHVwX2J1ZmYpOworCQlyZXR1cm4gMDsKKwl9CisJcmV0dXJuIC1FSU5WQUw7Cit9CisKK3N0YXRpYyBpbnQgcWVfZXAwX3J4KHN0cnVjdCBxZV91ZGMgKnVkYykKK3sKKwlzdHJ1Y3QgcWVfZXAgKmVwID0gJnVkYy0+ZXBzWzBdOworCXN0cnVjdCBxZV9mcmFtZSAqcGZyYW1lOworCXN0cnVjdCBxZV9iZCBfX2lvbWVtICpiZDsKKwl1MzIgYmRzdGF0dXMsIGxlbmd0aDsKKwl1MzIgdmFkZHI7CisKKwlwZnJhbWUgPSBlcC0+cnhmcmFtZTsKKworCWlmIChlcC0+ZGlyID09IFVTQl9ESVJfSU4pIHsKKwkJZGV2X2Vycih1ZGMtPmRldiwgImVwMCBub3QgYSBjb250cm9sIGVuZHBvaW50XG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJYmQgPSBlcC0+bl9yeGJkOworCWJkc3RhdHVzID0gaW5fYmUzMigodTMyIF9faW9tZW0gKiliZCk7CisJbGVuZ3RoID0gYmRzdGF0dXMgJiBCRF9MRU5HVEhfTUFTSzsKKworCXdoaWxlICghKGJkc3RhdHVzICYgUl9FKSAmJiBsZW5ndGgpIHsKKwkJaWYgKChiZHN0YXR1cyAmIFJfRikgJiYgKGJkc3RhdHVzICYgUl9MKQorCQkJJiYgIShiZHN0YXR1cyAmIFJfRVJST1IpKSB7CisJCQlpZiAobGVuZ3RoID09IFVTQl9DUkNfU0laRSkgeworCQkJCXVkYy0+ZXAwX3N0YXRlID0gV0FJVF9GT1JfU0VUVVA7CisJCQkJZGV2X3ZkYmcodWRjLT5kZXYsCisJCQkJCSJyZWNlaXZlIGEgWkxQIGluIHN0YXR1cyBwaGFzZVxuIik7CisJCQl9IGVsc2UgeworCQkJCXFlX2ZyYW1lX2NsZWFuKHBmcmFtZSk7CisJCQkJdmFkZHIgPSAodTMyKXBoeXNfdG9fdmlydChpbl9iZTMyKCZiZC0+YnVmKSk7CisJCQkJZnJhbWVfc2V0X2RhdGEocGZyYW1lLCAodTggKil2YWRkcik7CisJCQkJZnJhbWVfc2V0X2xlbmd0aChwZnJhbWUsCisJCQkJCQkobGVuZ3RoIC0gVVNCX0NSQ19TSVpFKSk7CisJCQkJZnJhbWVfc2V0X3N0YXR1cyhwZnJhbWUsIEZSQU1FX09LKTsKKwkJCQlzd2l0Y2ggKGJkc3RhdHVzICYgUl9QSUQpIHsKKwkJCQljYXNlIFJfUElEX1NFVFVQOgorCQkJCQlmcmFtZV9zZXRfaW5mbyhwZnJhbWUsIFBJRF9TRVRVUCk7CisJCQkJCWJyZWFrOworCQkJCWNhc2UgUl9QSURfREFUQTE6CisJCQkJCWZyYW1lX3NldF9pbmZvKHBmcmFtZSwgUElEX0RBVEExKTsKKwkJCQkJYnJlYWs7CisJCQkJZGVmYXVsdDoKKwkJCQkJZnJhbWVfc2V0X2luZm8ocGZyYW1lLCBQSURfREFUQTApOworCQkJCQlicmVhazsKKwkJCQl9CisKKwkJCQlpZiAoKGJkc3RhdHVzICYgUl9QSUQpID09IFJfUElEX1NFVFVQKQorCQkJCQllcDBfc2V0dXBfaGFuZGxlKHVkYyk7CisJCQkJZWxzZQorCQkJCQlxZV9lcF9yeGZyYW1lX2hhbmRsZShlcCk7CisJCQl9CisJCX0gZWxzZSB7CisJCQlkZXZfZXJyKHVkYy0+ZGV2LCAiVGhlIHJlY2VpdmUgZnJhbWUgd2l0aCBlcnJvciFcbiIpOworCQl9CisKKwkJLyogbm90ZTogZG9uJ3QgY2xlYXIgdGhlIHJ4YmQncyBidWZmZXIgYWRkcmVzcyAqLworCQlyZWN5Y2xlX29uZV9yeGJkKGVwKTsKKworCQkvKiBHZXQgbmV4dCBCRCAqLworCQlpZiAoYmRzdGF0dXMgJiBSX1cpCisJCQliZCA9IGVwLT5yeGJhc2U7CisJCWVsc2UKKwkJCWJkKys7CisKKwkJYmRzdGF0dXMgPSBpbl9iZTMyKCh1MzIgX19pb21lbSAqKWJkKTsKKwkJbGVuZ3RoID0gYmRzdGF0dXMgJiBCRF9MRU5HVEhfTUFTSzsKKworCX0KKworCWVwLT5uX3J4YmQgPSBiZDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHFlX2VwX3J4ZnJhbWVfaGFuZGxlKHN0cnVjdCBxZV9lcCAqZXApCit7CisJc3RydWN0IHFlX2ZyYW1lICpwZnJhbWU7CisJdTggZnJhbWVwaWQgPSAwOworCXVuc2lnbmVkIGludCBmc2l6ZTsKKwl1OCAqY3A7CisJc3RydWN0IHFlX3JlcSAqcmVxOworCisJcGZyYW1lID0gZXAtPnJ4ZnJhbWU7CisKKwlpZiAoZnJhbWVfZ2V0X2luZm8ocGZyYW1lKSAmIFBJRF9EQVRBMSkKKwkJZnJhbWVwaWQgPSAweDE7CisKKwlpZiAoZnJhbWVwaWQgIT0gZXAtPmRhdGEwMSkgeworCQlkZXZfZXJyKGVwLT51ZGMtPmRldiwgInRoZSBkYXRhMDEgZXJyb3IhXG4iKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJZnNpemUgPSBmcmFtZV9nZXRfbGVuZ3RoKHBmcmFtZSk7CisJaWYgKGxpc3RfZW1wdHkoJmVwLT5xdWV1ZSkpIHsKKwkJZGV2X2VycihlcC0+dWRjLT5kZXYsICJ0aGUgJXMgaGF2ZSBubyByZXF1ZXVlIVxuIiwgZXAtPm5hbWUpOworCX0gZWxzZSB7CisJCXJlcSA9IGxpc3RfZW50cnkoZXAtPnF1ZXVlLm5leHQsIHN0cnVjdCBxZV9yZXEsIHF1ZXVlKTsKKworCQljcCA9ICh1OCAqKShyZXEtPnJlcS5idWYpICsgcmVxLT5yZXEuYWN0dWFsOworCQlpZiAoY3ApIHsKKwkJCW1lbWNweShjcCwgcGZyYW1lLT5kYXRhLCBmc2l6ZSk7CisJCQlyZXEtPnJlcS5hY3R1YWwgKz0gZnNpemU7CisJCQlpZiAoKGZzaXplIDwgZXAtPmVwLm1heHBhY2tldCkgfHwKKwkJCQkJKHJlcS0+cmVxLmFjdHVhbCA+PSByZXEtPnJlcS5sZW5ndGgpKSB7CisJCQkJaWYgKGVwLT5lcG51bSA9PSAwKQorCQkJCQllcDBfcmVxX2NvbXBsZXRlKGVwLT51ZGMsIHJlcSk7CisJCQkJZWxzZQorCQkJCQlkb25lKGVwLCByZXEsIDApOworCQkJCWlmIChsaXN0X2VtcHR5KCZlcC0+cXVldWUpICYmIGVwLT5lcG51bSAhPSAwKQorCQkJCQlxZV9lcHJ4X25hY2soZXApOworCQkJfQorCQl9CisJfQorCisJcWVfZXBfdG9nZ2xlZGF0YTAxKGVwKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBlcF9yeF90YXNrbGV0KHVuc2lnbmVkIGxvbmcgZGF0YSkKK3sKKwlzdHJ1Y3QgcWVfdWRjICp1ZGMgPSAoc3RydWN0IHFlX3VkYyAqKWRhdGE7CisJc3RydWN0IHFlX2VwICplcDsKKwlzdHJ1Y3QgcWVfZnJhbWUgKnBmcmFtZTsKKwlzdHJ1Y3QgcWVfYmQgX19pb21lbSAqYmQ7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1MzIgYmRzdGF0dXMsIGxlbmd0aDsKKwl1MzIgdmFkZHIsIGk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmdWRjLT5sb2NrLCBmbGFncyk7CisKKwlmb3IgKGkgPSAxOyBpIDwgVVNCX01BWF9FTkRQT0lOVFM7IGkrKykgeworCQllcCA9ICZ1ZGMtPmVwc1tpXTsKKworCQlpZiAoZXAtPmRpciA9PSBVU0JfRElSX0lOIHx8IGVwLT5lbmFibGVfdGFza2xldCA9PSAwKSB7CisJCQlkZXZfZGJnKHVkYy0+ZGV2LAorCQkJCSJUaGlzIGlzIGEgdHJhbnNtaXQgZXAgb3IgZGlzYWJsZSB0YXNrbGV0IVxuIik7CisJCQljb250aW51ZTsKKwkJfQorCisJCXBmcmFtZSA9IGVwLT5yeGZyYW1lOworCQliZCA9IGVwLT5uX3J4YmQ7CisJCWJkc3RhdHVzID0gaW5fYmUzMigodTMyIF9faW9tZW0gKiliZCk7CisJCWxlbmd0aCA9IGJkc3RhdHVzICYgQkRfTEVOR1RIX01BU0s7CisKKwkJd2hpbGUgKCEoYmRzdGF0dXMgJiBSX0UpICYmIGxlbmd0aCkgeworCQkJaWYgKGxpc3RfZW1wdHkoJmVwLT5xdWV1ZSkpIHsKKwkJCQlxZV9lcHJ4X25hY2soZXApOworCQkJCWRldl9kYmcodWRjLT5kZXYsCisJCQkJCSJUaGUgcnhlcCBoYXZlIG5vcmVxICVkXG4iLAorCQkJCQllcC0+aGFzX2RhdGEpOworCQkJCWJyZWFrOworCQkJfQorCisJCQlpZiAoKGJkc3RhdHVzICYgUl9GKSAmJiAoYmRzdGF0dXMgJiBSX0wpCisJCQkJJiYgIShiZHN0YXR1cyAmIFJfRVJST1IpKSB7CisJCQkJcWVfZnJhbWVfY2xlYW4ocGZyYW1lKTsKKwkJCQl2YWRkciA9ICh1MzIpcGh5c190b192aXJ0KGluX2JlMzIoJmJkLT5idWYpKTsKKwkJCQlmcmFtZV9zZXRfZGF0YShwZnJhbWUsICh1OCAqKXZhZGRyKTsKKwkJCQlmcmFtZV9zZXRfbGVuZ3RoKHBmcmFtZSwKKwkJCQkJCShsZW5ndGggLSBVU0JfQ1JDX1NJWkUpKTsKKwkJCQlmcmFtZV9zZXRfc3RhdHVzKHBmcmFtZSwgRlJBTUVfT0spOworCQkJCXN3aXRjaCAoYmRzdGF0dXMgJiBSX1BJRCkgeworCQkJCWNhc2UgUl9QSURfREFUQTE6CisJCQkJCWZyYW1lX3NldF9pbmZvKHBmcmFtZSwgUElEX0RBVEExKTsKKwkJCQkJYnJlYWs7CisJCQkJY2FzZSBSX1BJRF9TRVRVUDoKKwkJCQkJZnJhbWVfc2V0X2luZm8ocGZyYW1lLCBQSURfU0VUVVApOworCQkJCQlicmVhazsKKwkJCQlkZWZhdWx0OgorCQkJCQlmcmFtZV9zZXRfaW5mbyhwZnJhbWUsIFBJRF9EQVRBMCk7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCQkvKiBoYW5kbGUgdGhlIHJ4IGZyYW1lICovCisJCQkJcWVfZXBfcnhmcmFtZV9oYW5kbGUoZXApOworCQkJfSBlbHNlIHsKKwkJCQlkZXZfZXJyKHVkYy0+ZGV2LAorCQkJCQkiZXJyb3IgaW4gcmVjZWl2ZWQgZnJhbWVcbiIpOworCQkJfQorCQkJLyogbm90ZTogZG9uJ3QgY2xlYXIgdGhlIHJ4YmQncyBidWZmZXIgYWRkcmVzcyAqLworCQkJLypjbGVhciB0aGUgbGVuZ3RoICovCisJCQlvdXRfYmUzMigodTMyIF9faW9tZW0gKiliZCwgYmRzdGF0dXMgJiBCRF9TVEFUVVNfTUFTSyk7CisJCQllcC0+aGFzX2RhdGEtLTsKKwkJCWlmICghKGVwLT5sb2NhbG5hY2spKQorCQkJCXJlY3ljbGVfb25lX3J4YmQoZXApOworCisJCQkvKiBHZXQgbmV4dCBCRCAqLworCQkJaWYgKGJkc3RhdHVzICYgUl9XKQorCQkJCWJkID0gZXAtPnJ4YmFzZTsKKwkJCWVsc2UKKwkJCQliZCsrOworCisJCQliZHN0YXR1cyA9IGluX2JlMzIoKHUzMiBfX2lvbWVtICopYmQpOworCQkJbGVuZ3RoID0gYmRzdGF0dXMgJiBCRF9MRU5HVEhfTUFTSzsKKwkJfQorCisJCWVwLT5uX3J4YmQgPSBiZDsKKworCQlpZiAoZXAtPmxvY2FsbmFjaykKKwkJCWVwX3JlY3ljbGVfcnhiZHMoZXApOworCisJCWVwLT5lbmFibGVfdGFza2xldCA9IDA7CisJfSAvKiBmb3IgaT0xICovCisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ1ZGMtPmxvY2ssIGZsYWdzKTsKK30KKworc3RhdGljIGludCBxZV9lcF9yeChzdHJ1Y3QgcWVfZXAgKmVwKQoreworCXN0cnVjdCBxZV91ZGMgKnVkYzsKKwlzdHJ1Y3QgcWVfZnJhbWUgKnBmcmFtZTsKKwlzdHJ1Y3QgcWVfYmQgX19pb21lbSAqYmQ7CisJdTE2IHN3b2ZmcywgdWNvZmZzLCBlbXB0eWJkczsKKworCXVkYyA9IGVwLT51ZGM7CisJcGZyYW1lID0gZXAtPnJ4ZnJhbWU7CisKKwlpZiAoZXAtPmRpciA9PSBVU0JfRElSX0lOKSB7CisJCWRldl9lcnIodWRjLT5kZXYsICJ0cmFuc21pdCBlcCBpbiByeCBmdW5jdGlvblxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWJkID0gZXAtPm5fcnhiZDsKKworCXN3b2ZmcyA9ICh1MTYpKGJkIC0gZXAtPnJ4YmFzZSk7CisJdWNvZmZzID0gKHUxNikoKGluX2JlMTYoJnVkYy0+ZXBfcGFyYW1bZXAtPmVwbnVtXS0+cmJwdHIpIC0KKwkJCWluX2JlMTYoJnVkYy0+ZXBfcGFyYW1bZXAtPmVwbnVtXS0+cmJhc2UpKSA+PiAzKTsKKwlpZiAoc3dvZmZzIDwgdWNvZmZzKQorCQllbXB0eWJkcyA9IFVTQl9CRFJJTkdfTEVOX1JYIC0gdWNvZmZzICsgc3dvZmZzOworCWVsc2UKKwkJZW1wdHliZHMgPSBzd29mZnMgLSB1Y29mZnM7CisKKwlpZiAoZW1wdHliZHMgPCBNSU5fRU1QVFlfQkRTKSB7CisJCXFlX2VwcnhfbmFjayhlcCk7CisJCWVwLT5sb2NhbG5hY2sgPSAxOworCQlkZXZfdmRiZyh1ZGMtPmRldiwgIiVkIGVtcHR5IGJkcywgc2VuZCBOQUNLXG4iLCBlbXB0eWJkcyk7CisJfQorCWVwLT5oYXNfZGF0YSA9IFVTQl9CRFJJTkdfTEVOX1JYIC0gZW1wdHliZHM7CisKKwlpZiAobGlzdF9lbXB0eSgmZXAtPnF1ZXVlKSkgeworCQlxZV9lcHJ4X25hY2soZXApOworCQlkZXZfdmRiZyh1ZGMtPmRldiwgIlRoZSByeGVwIGhhdmUgbm8gcmVxIHF1ZXVlZCB3aXRoICVkIEJEc1xuIiwKKwkJCQllcC0+aGFzX2RhdGEpOworCQlyZXR1cm4gMDsKKwl9CisKKwl0YXNrbGV0X3NjaGVkdWxlKCZ1ZGMtPnJ4X3Rhc2tsZXQpOworCWVwLT5lbmFibGVfdGFza2xldCA9IDE7CisKKwlyZXR1cm4gMDsKK30KKworLyogc2VuZCBkYXRhIGZyb20gYSBmcmFtZSwgbm8gbWF0dGVyIHdoYXQgdHhfcmVxICovCitzdGF0aWMgaW50IHFlX2VwX3R4KHN0cnVjdCBxZV9lcCAqZXAsIHN0cnVjdCBxZV9mcmFtZSAqZnJhbWUpCit7CisJc3RydWN0IHFlX3VkYyAqdWRjID0gZXAtPnVkYzsKKwlzdHJ1Y3QgcWVfYmQgX19pb21lbSAqYmQ7CisJdTE2IHNhdmV1c2JtcjsKKwl1MzIgYmRzdGF0dXMsIHBpZG1hc2s7CisJdTMyIHBhZGRyOworCisJaWYgKGVwLT5kaXIgPT0gVVNCX0RJUl9PVVQpIHsKKwkJZGV2X2Vycih1ZGMtPmRldiwgInJlY2VpdmUgZXAgcGFzc2VkIHRvIHR4IGZ1bmN0aW9uXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogRGlzYWJsZSB0aGUgVHggaW50ZXJydXB0ICovCisJc2F2ZXVzYm1yID0gaW5fYmUxNigmdWRjLT51c2JfcmVncy0+dXNiX3VzYm1yKTsKKwlvdXRfYmUxNigmdWRjLT51c2JfcmVncy0+dXNiX3VzYm1yLAorCQkJc2F2ZXVzYm1yICYgfihVU0JfRV9UWEJfTUFTSyB8IFVTQl9FX1RYRV9NQVNLKSk7CisKKwliZCA9IGVwLT5uX3R4YmQ7CisJYmRzdGF0dXMgPSBpbl9iZTMyKCh1MzIgX19pb21lbSAqKWJkKTsKKworCWlmICghKGJkc3RhdHVzICYgKFRfUiB8IEJEX0xFTkdUSF9NQVNLKSkpIHsKKwkJaWYgKGZyYW1lX2dldF9sZW5ndGgoZnJhbWUpID09IDApIHsKKwkJCWZyYW1lX3NldF9kYXRhKGZyYW1lLCB1ZGMtPm51bGxidWYpOworCQkJZnJhbWVfc2V0X2xlbmd0aChmcmFtZSwgMik7CisJCQlmcmFtZS0+aW5mbyB8PSAoWkxQIHwgTk9fQ1JDKTsKKwkJCWRldl92ZGJnKHVkYy0+ZGV2LCAidGhlIGZyYW1lIHNpemUgPSAwXG4iKTsKKwkJfQorCQlwYWRkciA9IHZpcnRfdG9fcGh5cygodm9pZCAqKWZyYW1lLT5kYXRhKTsKKwkJb3V0X2JlMzIoJmJkLT5idWYsIHBhZGRyKTsKKwkJYmRzdGF0dXMgPSAoYmRzdGF0dXMmVF9XKTsKKwkJaWYgKCEoZnJhbWVfZ2V0X2luZm8oZnJhbWUpICYgTk9fQ1JDKSkKKwkJCWJkc3RhdHVzIHw9IFRfUiB8IFRfSSB8IFRfTCB8IFRfVEMKKwkJCQkJfCBmcmFtZV9nZXRfbGVuZ3RoKGZyYW1lKTsKKwkJZWxzZQorCQkJYmRzdGF0dXMgfD0gVF9SIHwgVF9JIHwgVF9MIHwgZnJhbWVfZ2V0X2xlbmd0aChmcmFtZSk7CisKKwkJLyogaWYgdGhlIHBhY2tldCBpcyBhIFpMUCBpbiBzdGF0dXMgcGhhc2UgKi8KKwkJaWYgKChlcC0+ZXBudW0gPT0gMCkgJiYgKHVkYy0+ZXAwX3N0YXRlID09IERBVEFfU1RBVEVfTkVFRF9aTFApKQorCQkJZXAtPmRhdGEwMSA9IDB4MTsKKworCQlpZiAoZXAtPmRhdGEwMSkgeworCQkJcGlkbWFzayA9IFRfUElEX0RBVEExOworCQkJZnJhbWUtPmluZm8gfD0gUElEX0RBVEExOworCQl9IGVsc2UgeworCQkJcGlkbWFzayA9IFRfUElEX0RBVEEwOworCQkJZnJhbWUtPmluZm8gfD0gUElEX0RBVEEwOworCQl9CisJCWJkc3RhdHVzIHw9IFRfQ05GOworCQliZHN0YXR1cyB8PSBwaWRtYXNrOworCQlvdXRfYmUzMigodTMyIF9faW9tZW0gKiliZCwgYmRzdGF0dXMpOworCQlxZV9lcF9maWxsdHhmaWZvKGVwKTsKKworCQkvKiBlbmFibGUgdGhlIFRYIGludGVycnVwdCAqLworCQlvdXRfYmUxNigmdWRjLT51c2JfcmVncy0+dXNiX3VzYm1yLCBzYXZldXNibXIpOworCisJCXFlX2VwX3RvZ2dsZWRhdGEwMShlcCk7CisJCWlmIChiZHN0YXR1cyAmIFRfVykKKwkJCWVwLT5uX3R4YmQgPSBlcC0+dHhiYXNlOworCQllbHNlCisJCQllcC0+bl90eGJkKys7CisKKwkJcmV0dXJuIDA7CisJfSBlbHNlIHsKKwkJb3V0X2JlMTYoJnVkYy0+dXNiX3JlZ3MtPnVzYl91c2Jtciwgc2F2ZXVzYm1yKTsKKwkJZGV2X3ZkYmcodWRjLT5kZXYsICJUaGUgdHggYmQgaXMgbm90IHJlYWR5IVxuIik7CisJCXJldHVybiAtRUJVU1k7CisJfQorfQorCisvKiB3aGVuIGEgYmQgd2FzIHRyYW5zbWl0dGVkLCB0aGUgZnVuY3Rpb24gY2FuCisgKiBoYW5kbGUgdGhlIHR4X3JlcSwgbm90IGluY2x1ZGUgZXAwICAgICAgICAgICAqLworc3RhdGljIGludCB0eGNvbXBsZXRlKHN0cnVjdCBxZV9lcCAqZXAsIHVuc2lnbmVkIGNoYXIgcmVzdGFydCkKK3sKKwlpZiAoZXAtPnR4X3JlcSAhPSBOVUxMKSB7CisJCWlmICghcmVzdGFydCkgeworCQkJaW50IGFzZW50ID0gZXAtPmxhc3Q7CisJCQllcC0+c2VudCArPSBhc2VudDsKKwkJCWVwLT5sYXN0IC09IGFzZW50OworCQl9IGVsc2UgeworCQkJZXAtPmxhc3QgPSAwOworCQl9CisKKwkJLyogYSByZXF1ZXN0IGFscmVhZHkgd2VyZSB0cmFuc21pdHRlZCBjb21wbGV0ZWx5ICovCisJCWlmICgoZXAtPnR4X3JlcS0+cmVxLmxlbmd0aCAtIGVwLT5zZW50KSA8PSAwKSB7CisJCQllcC0+dHhfcmVxLT5yZXEuYWN0dWFsID0gKHVuc2lnbmVkIGludCllcC0+c2VudDsKKwkJCWRvbmUoZXAsIGVwLT50eF9yZXEsIDApOworCQkJZXAtPnR4X3JlcSA9IE5VTEw7CisJCQllcC0+bGFzdCA9IDA7CisJCQllcC0+c2VudCA9IDA7CisJCX0KKwl9CisKKwkvKiB3ZSBzaG91bGQgZ2FpbiBhIG5ldyB0eF9yZXEgZm90IHRoaXMgZW5kcG9pbnQgKi8KKwlpZiAoZXAtPnR4X3JlcSA9PSBOVUxMKSB7CisJCWlmICghbGlzdF9lbXB0eSgmZXAtPnF1ZXVlKSkgeworCQkJZXAtPnR4X3JlcSA9IGxpc3RfZW50cnkoZXAtPnF1ZXVlLm5leHQsCXN0cnVjdCBxZV9yZXEsCisJCQkJCQkJcXVldWUpOworCQkJZXAtPmxhc3QgPSAwOworCQkJZXAtPnNlbnQgPSAwOworCQl9CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qIGdpdmUgYSBmcmFtZSBhbmQgYSB0eF9yZXEsIHNlbmQgc29tZSBkYXRhICovCitzdGF0aWMgaW50IHFlX3VzYl9zZW5kZGF0YShzdHJ1Y3QgcWVfZXAgKmVwLCBzdHJ1Y3QgcWVfZnJhbWUgKmZyYW1lKQoreworCXVuc2lnbmVkIGludCBzaXplOworCXU4ICpidWY7CisKKwlxZV9mcmFtZV9jbGVhbihmcmFtZSk7CisJc2l6ZSA9IG1pbl90KHUzMiwgKGVwLT50eF9yZXEtPnJlcS5sZW5ndGggLSBlcC0+c2VudCksCisJCQkJZXAtPmVwLm1heHBhY2tldCk7CisJYnVmID0gKHU4ICopZXAtPnR4X3JlcS0+cmVxLmJ1ZiArIGVwLT5zZW50OworCWlmIChidWYgJiYgc2l6ZSkgeworCQllcC0+bGFzdCA9IHNpemU7CisJCWZyYW1lX3NldF9kYXRhKGZyYW1lLCBidWYpOworCQlmcmFtZV9zZXRfbGVuZ3RoKGZyYW1lLCBzaXplKTsKKwkJZnJhbWVfc2V0X3N0YXR1cyhmcmFtZSwgRlJBTUVfT0spOworCQlmcmFtZV9zZXRfaW5mbyhmcmFtZSwgMCk7CisJCXJldHVybiBxZV9lcF90eChlcCwgZnJhbWUpOworCX0KKwlyZXR1cm4gLUVJTzsKK30KKworLyogZ2l2ZSBhIGZyYW1lIHN0cnVjdCxzZW5kIGEgWkxQICovCitzdGF0aWMgaW50IHNlbmRudWxsZGF0YShzdHJ1Y3QgcWVfZXAgKmVwLCBzdHJ1Y3QgcWVfZnJhbWUgKmZyYW1lLCB1aW50IGluZm9yKQoreworCXN0cnVjdCBxZV91ZGMgKnVkYyA9IGVwLT51ZGM7CisKKwlpZiAoZnJhbWUgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlxZV9mcmFtZV9jbGVhbihmcmFtZSk7CisJZnJhbWVfc2V0X2RhdGEoZnJhbWUsICh1OCAqKXVkYy0+bnVsbGJ1Zik7CisJZnJhbWVfc2V0X2xlbmd0aChmcmFtZSwgMik7CisJZnJhbWVfc2V0X3N0YXR1cyhmcmFtZSwgRlJBTUVfT0spOworCWZyYW1lX3NldF9pbmZvKGZyYW1lLCAoWkxQIHwgTk9fQ1JDIHwgaW5mb3IpKTsKKworCXJldHVybiBxZV9lcF90eChlcCwgZnJhbWUpOworfQorCitzdGF0aWMgaW50IGZyYW1lX2NyZWF0ZV90eChzdHJ1Y3QgcWVfZXAgKmVwLCBzdHJ1Y3QgcWVfZnJhbWUgKmZyYW1lKQoreworCXN0cnVjdCBxZV9yZXEgKnJlcSA9IGVwLT50eF9yZXE7CisJaW50IHJldmFsOworCisJaWYgKHJlcSA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWlmICgocmVxLT5yZXEubGVuZ3RoIC0gZXAtPnNlbnQpID4gMCkKKwkJcmV2YWwgPSBxZV91c2Jfc2VuZGRhdGEoZXAsIGZyYW1lKTsKKwllbHNlCisJCXJldmFsID0gc2VuZG51bGxkYXRhKGVwLCBmcmFtZSwgMCk7CisKKwlyZXR1cm4gcmV2YWw7Cit9CisKKy8qIGlmIGRpcmVjdGlvbiBpcyBESVJfSU4sIHRoZSBzdGF0dXMgaXMgRGV2aWNlLT5Ib3N0CisgKiBpZiBkaXJlY3Rpb24gaXMgRElSX09VVCwgdGhlIHN0YXR1cyB0cmFuc2FjdGlvbiBpcyBEZXZpY2U8LUhvc3QKKyAqIGluIHN0YXR1cyBwaGFzZSwgdWRjIGNyZWF0ZSBhIHJlcXVlc3QgYW5kIGdhaW4gc3RhdHVzICovCitzdGF0aWMgaW50IGVwMF9wcmltZV9zdGF0dXMoc3RydWN0IHFlX3VkYyAqdWRjLCBpbnQgZGlyZWN0aW9uKQoreworCisJc3RydWN0IHFlX2VwICplcCA9ICZ1ZGMtPmVwc1swXTsKKworCWlmIChkaXJlY3Rpb24gPT0gVVNCX0RJUl9JTikgeworCQl1ZGMtPmVwMF9zdGF0ZSA9IERBVEFfU1RBVEVfTkVFRF9aTFA7CisJCXVkYy0+ZXAwX2RpciA9IFVTQl9ESVJfSU47CisJCXNlbmRudWxsZGF0YShlcCwgZXAtPnR4ZnJhbWUsIFNFVFVQX1NUQVRVUyB8IE5PX1JFUSk7CisJfSBlbHNlIHsKKwkJdWRjLT5lcDBfZGlyID0gVVNCX0RJUl9PVVQ7CisJCXVkYy0+ZXAwX3N0YXRlID0gV0FJVF9GT1JfT1VUX1NUQVRVUzsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyogYSByZXF1ZXN0IGNvbXBsZXRlIGluIGVwMCwgd2hldGhlciBnYWRnZXQgcmVxdWVzdCBvciB1ZGMgcmVxdWVzdCAqLworc3RhdGljIHZvaWQgZXAwX3JlcV9jb21wbGV0ZShzdHJ1Y3QgcWVfdWRjICp1ZGMsIHN0cnVjdCBxZV9yZXEgKnJlcSkKK3sKKwlzdHJ1Y3QgcWVfZXAgKmVwID0gJnVkYy0+ZXBzWzBdOworCS8qIGJlY2F1c2UgdXNiIGFuZCBlcCdzIHN0YXR1cyBhbHJlYWR5IGJlZW4gc2V0IGluIGNoOXNldGFkZHJlc3MoKSAqLworCisJc3dpdGNoICh1ZGMtPmVwMF9zdGF0ZSkgeworCWNhc2UgREFUQV9TVEFURV9YTUlUOgorCQlkb25lKGVwLCByZXEsIDApOworCQkvKiByZWNlaXZlIHN0YXR1cyBwaGFzZSAqLworCQlpZiAoZXAwX3ByaW1lX3N0YXR1cyh1ZGMsIFVTQl9ESVJfT1VUKSkKKwkJCXFlX2VwMF9zdGFsbCh1ZGMpOworCQlicmVhazsKKworCWNhc2UgREFUQV9TVEFURV9ORUVEX1pMUDoKKwkJZG9uZShlcCwgcmVxLCAwKTsKKwkJdWRjLT5lcDBfc3RhdGUgPSBXQUlUX0ZPUl9TRVRVUDsKKwkJYnJlYWs7CisKKwljYXNlIERBVEFfU1RBVEVfUkVDVjoKKwkJZG9uZShlcCwgcmVxLCAwKTsKKwkJLyogc2VuZCBzdGF0dXMgcGhhc2UgKi8KKwkJaWYgKGVwMF9wcmltZV9zdGF0dXModWRjLCBVU0JfRElSX0lOKSkKKwkJCXFlX2VwMF9zdGFsbCh1ZGMpOworCQlicmVhazsKKworCWNhc2UgV0FJVF9GT1JfT1VUX1NUQVRVUzoKKwkJZG9uZShlcCwgcmVxLCAwKTsKKwkJdWRjLT5lcDBfc3RhdGUgPSBXQUlUX0ZPUl9TRVRVUDsKKwkJYnJlYWs7CisKKwljYXNlIFdBSVRfRk9SX1NFVFVQOgorCQlkZXZfdmRiZyh1ZGMtPmRldiwgIlVuZXhwZWN0ZWQgaW50ZXJydXB0XG4iKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlxZV9lcDBfc3RhbGwodWRjKTsKKwkJYnJlYWs7CisJfQorfQorCitzdGF0aWMgaW50IGVwMF90eGNvbXBsZXRlKHN0cnVjdCBxZV9lcCAqZXAsIHVuc2lnbmVkIGNoYXIgcmVzdGFydCkKK3sKKwlzdHJ1Y3QgcWVfcmVxICp0eF9yZXEgPSBOVUxMOworCXN0cnVjdCBxZV9mcmFtZSAqZnJhbWUgPSBlcC0+dHhmcmFtZTsKKworCWlmICgoZnJhbWVfZ2V0X2luZm8oZnJhbWUpICYgKFpMUCB8IE5PX1JFUSkpID09IChaTFAgfCBOT19SRVEpKSB7CisJCWlmICghcmVzdGFydCkKKwkJCWVwLT51ZGMtPmVwMF9zdGF0ZSA9IFdBSVRfRk9SX1NFVFVQOworCQllbHNlCisJCQlzZW5kbnVsbGRhdGEoZXAsIGVwLT50eGZyYW1lLCBTRVRVUF9TVEFUVVMgfCBOT19SRVEpOworCQlyZXR1cm4gMDsKKwl9CisKKwl0eF9yZXEgPSBlcC0+dHhfcmVxOworCWlmICh0eF9yZXEgIT0gTlVMTCkgeworCQlpZiAoIXJlc3RhcnQpIHsKKwkJCWludCBhc2VudCA9IGVwLT5sYXN0OworCQkJZXAtPnNlbnQgKz0gYXNlbnQ7CisJCQllcC0+bGFzdCAtPSBhc2VudDsKKwkJfSBlbHNlIHsKKwkJCWVwLT5sYXN0ID0gMDsKKwkJfQorCisJCS8qIGEgcmVxdWVzdCBhbHJlYWR5IHdlcmUgdHJhbnNtaXR0ZWQgY29tcGxldGVseSAqLworCQlpZiAoKGVwLT50eF9yZXEtPnJlcS5sZW5ndGggLSBlcC0+c2VudCkgPD0gMCkgeworCQkJZXAtPnR4X3JlcS0+cmVxLmFjdHVhbCA9ICh1bnNpZ25lZCBpbnQpZXAtPnNlbnQ7CisJCQllcDBfcmVxX2NvbXBsZXRlKGVwLT51ZGMsIGVwLT50eF9yZXEpOworCQkJZXAtPnR4X3JlcSA9IE5VTEw7CisJCQllcC0+bGFzdCA9IDA7CisJCQllcC0+c2VudCA9IDA7CisJCX0KKwl9IGVsc2UgeworCQlkZXZfdmRiZyhlcC0+dWRjLT5kZXYsICJ0aGUgZXAwX2NvbnRyb2xsZXIgaGF2ZSBubyByZXFcbiIpOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGVwMF90eGZyYW1lX2hhbmRsZShzdHJ1Y3QgcWVfZXAgKmVwKQoreworCS8qIGlmIGhhdmUgZXJyb3IsIHRyYW5zbWl0IGFnYWluICovCisJaWYgKGZyYW1lX2dldF9zdGF0dXMoZXAtPnR4ZnJhbWUpICYgRlJBTUVfRVJST1IpIHsKKwkJcWVfZXBfZmx1c2h0eGZpZm8oZXApOworCQlkZXZfdmRiZyhlcC0+dWRjLT5kZXYsICJUaGUgRVAwIHRyYW5zbWl0IGRhdGEgaGF2ZSBlcnJvciFcbiIpOworCQlpZiAoZnJhbWVfZ2V0X2luZm8oZXAtPnR4ZnJhbWUpICYgUElEX0RBVEEwKQorCQkJZXAtPmRhdGEwMSA9IDA7CisJCWVsc2UKKwkJCWVwLT5kYXRhMDEgPSAxOworCisJCWVwMF90eGNvbXBsZXRlKGVwLCAxKTsKKwl9IGVsc2UKKwkJZXAwX3R4Y29tcGxldGUoZXAsIDApOworCisJZnJhbWVfY3JlYXRlX3R4KGVwLCBlcC0+dHhmcmFtZSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcWVfZXAwX3R4Y29uZihzdHJ1Y3QgcWVfZXAgKmVwKQoreworCXN0cnVjdCBxZV9iZCBfX2lvbWVtICpiZDsKKwlzdHJ1Y3QgcWVfZnJhbWUgKnBmcmFtZTsKKwl1MzIgYmRzdGF0dXM7CisKKwliZCA9IGVwLT5jX3R4YmQ7CisJYmRzdGF0dXMgPSBpbl9iZTMyKCh1MzIgX19pb21lbSAqKWJkKTsKKwl3aGlsZSAoIShiZHN0YXR1cyAmIFRfUikgJiYgKGJkc3RhdHVzICYgflRfVykpIHsKKwkJcGZyYW1lID0gZXAtPnR4ZnJhbWU7CisKKwkJLyogY2xlYXIgYW5kIHJlY3ljbGUgdGhlIEJEICovCisJCW91dF9iZTMyKCh1MzIgX19pb21lbSAqKWJkLCBiZHN0YXR1cyAmIFRfVyk7CisJCW91dF9iZTMyKCZiZC0+YnVmLCAwKTsKKwkJaWYgKGJkc3RhdHVzICYgVF9XKQorCQkJZXAtPmNfdHhiZCA9IGVwLT50eGJhc2U7CisJCWVsc2UKKwkJCWVwLT5jX3R4YmQrKzsKKworCQlpZiAoZXAtPmNfdHhiZCA9PSBlcC0+bl90eGJkKSB7CisJCQlpZiAoYmRzdGF0dXMgJiBERVZJQ0VfVF9FUlJPUikgeworCQkJCWZyYW1lX3NldF9zdGF0dXMocGZyYW1lLCBGUkFNRV9FUlJPUik7CisJCQkJaWYgKGJkc3RhdHVzICYgVF9UTykKKwkJCQkJcGZyYW1lLT5zdGF0dXMgfD0gVFhfRVJfVElNRU9VVDsKKwkJCQlpZiAoYmRzdGF0dXMgJiBUX1VOKQorCQkJCQlwZnJhbWUtPnN0YXR1cyB8PSBUWF9FUl9VTkRFUlVOOworCQkJfQorCQkJZXAwX3R4ZnJhbWVfaGFuZGxlKGVwKTsKKwkJfQorCisJCWJkID0gZXAtPmNfdHhiZDsKKwkJYmRzdGF0dXMgPSBpbl9iZTMyKCh1MzIgX19pb21lbSAqKWJkKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBlcF90eGZyYW1lX2hhbmRsZShzdHJ1Y3QgcWVfZXAgKmVwKQoreworCWlmIChmcmFtZV9nZXRfc3RhdHVzKGVwLT50eGZyYW1lKSAmIEZSQU1FX0VSUk9SKSB7CisJCXFlX2VwX2ZsdXNodHhmaWZvKGVwKTsKKwkJZGV2X3ZkYmcoZXAtPnVkYy0+ZGV2LCAiVGhlIEVQMCB0cmFuc21pdCBkYXRhIGhhdmUgZXJyb3IhXG4iKTsKKwkJaWYgKGZyYW1lX2dldF9pbmZvKGVwLT50eGZyYW1lKSAmIFBJRF9EQVRBMCkKKwkJCWVwLT5kYXRhMDEgPSAwOworCQllbHNlCisJCQllcC0+ZGF0YTAxID0gMTsKKworCQl0eGNvbXBsZXRlKGVwLCAxKTsKKwl9IGVsc2UKKwkJdHhjb21wbGV0ZShlcCwgMCk7CisKKwlmcmFtZV9jcmVhdGVfdHgoZXAsIGVwLT50eGZyYW1lKTsgLyogc2VuZCB0aGUgZGF0YSAqLworCXJldHVybiAwOworfQorCisvKiBjb25maXJtIHRoZSBhbHJlYWR5IHRyYWluc21pdGVkIGJkICovCitzdGF0aWMgaW50IHFlX2VwX3R4Y29uZihzdHJ1Y3QgcWVfZXAgKmVwKQoreworCXN0cnVjdCBxZV9iZCBfX2lvbWVtICpiZDsKKwlzdHJ1Y3QgcWVfZnJhbWUgKnBmcmFtZSA9IE5VTEw7CisJdTMyIGJkc3RhdHVzOworCXVuc2lnbmVkIGNoYXIgYnJlYWtvbnJ4aW50ZXJydXB0ID0gMDsKKworCWJkID0gZXAtPmNfdHhiZDsKKwliZHN0YXR1cyA9IGluX2JlMzIoKHUzMiBfX2lvbWVtICopYmQpOworCXdoaWxlICghKGJkc3RhdHVzICYgVF9SKSAmJiAoYmRzdGF0dXMgJiB+VF9XKSkgeworCQlwZnJhbWUgPSBlcC0+dHhmcmFtZTsKKwkJaWYgKGJkc3RhdHVzICYgREVWSUNFX1RfRVJST1IpIHsKKwkJCWZyYW1lX3NldF9zdGF0dXMocGZyYW1lLCBGUkFNRV9FUlJPUik7CisJCQlpZiAoYmRzdGF0dXMgJiBUX1RPKQorCQkJCXBmcmFtZS0+c3RhdHVzIHw9IFRYX0VSX1RJTUVPVVQ7CisJCQlpZiAoYmRzdGF0dXMgJiBUX1VOKQorCQkJCXBmcmFtZS0+c3RhdHVzIHw9IFRYX0VSX1VOREVSVU47CisJCX0KKworCQkvKiBjbGVhciBhbmQgcmVjeWNsZSB0aGUgQkQgKi8KKwkJb3V0X2JlMzIoKHUzMiBfX2lvbWVtICopYmQsIGJkc3RhdHVzICYgVF9XKTsKKwkJb3V0X2JlMzIoJmJkLT5idWYsIDApOworCQlpZiAoYmRzdGF0dXMgJiBUX1cpCisJCQllcC0+Y190eGJkID0gZXAtPnR4YmFzZTsKKwkJZWxzZQorCQkJZXAtPmNfdHhiZCsrOworCisJCS8qIGhhbmRsZSB0aGUgdHggZnJhbWUgKi8KKwkJZXBfdHhmcmFtZV9oYW5kbGUoZXApOworCQliZCA9IGVwLT5jX3R4YmQ7CisJCWJkc3RhdHVzID0gaW5fYmUzMigodTMyIF9faW9tZW0gKiliZCk7CisJfQorCWlmIChicmVha29ucnhpbnRlcnJ1cHQpCisJCXJldHVybiAtRUlPOworCWVsc2UKKwkJcmV0dXJuIDA7Cit9CisKKy8qIEFkZCBhIHJlcXVlc3QgaW4gcXVldWUsIGFuZCB0cnkgdG8gdHJhbnNtaXQgYSBwYWNrZXQgKi8KK3N0YXRpYyBpbnQgZXBfcmVxX3NlbmQoc3RydWN0IHFlX2VwICplcCwgc3RydWN0IHFlX3JlcSAqcmVxKQoreworCWludCByZXZhbCA9IDA7CisKKwlpZiAoZXAtPnR4X3JlcSA9PSBOVUxMKSB7CisJCWVwLT5zZW50ID0gMDsKKwkJZXAtPmxhc3QgPSAwOworCQl0eGNvbXBsZXRlKGVwLCAwKTsgLyogY2FuIGdhaW4gYSBuZXcgdHhfcmVxICovCisJCXJldmFsID0gZnJhbWVfY3JlYXRlX3R4KGVwLCBlcC0+dHhmcmFtZSk7CisJfQorCXJldHVybiByZXZhbDsKK30KKworLyogTWF5YmUgdGhpcyBpcyBhIGdvb2QgaWRlYWwgKi8KK3N0YXRpYyBpbnQgZXBfcmVxX3J4KHN0cnVjdCBxZV9lcCAqZXAsIHN0cnVjdCBxZV9yZXEgKnJlcSkKK3sKKwlzdHJ1Y3QgcWVfdWRjICp1ZGMgPSBlcC0+dWRjOworCXN0cnVjdCBxZV9mcmFtZSAqcGZyYW1lID0gTlVMTDsKKwlzdHJ1Y3QgcWVfYmQgX19pb21lbSAqYmQ7CisJdTMyIGJkc3RhdHVzLCBsZW5ndGg7CisJdTMyIHZhZGRyLCBmc2l6ZTsKKwl1OCAqY3A7CisJdTggZmluaXNoX3JlcSA9IDA7CisJdTggZnJhbWVwaWQ7CisKKwlpZiAobGlzdF9lbXB0eSgmZXAtPnF1ZXVlKSkgeworCQlkZXZfdmRiZyh1ZGMtPmRldiwgInRoZSByZXEgYWxyZWFkeSBmaW5pc2ghXG4iKTsKKwkJcmV0dXJuIDA7CisJfQorCXBmcmFtZSA9IGVwLT5yeGZyYW1lOworCisJYmQgPSBlcC0+bl9yeGJkOworCWJkc3RhdHVzID0gaW5fYmUzMigodTMyIF9faW9tZW0gKiliZCk7CisJbGVuZ3RoID0gYmRzdGF0dXMgJiBCRF9MRU5HVEhfTUFTSzsKKworCXdoaWxlICghKGJkc3RhdHVzICYgUl9FKSAmJiBsZW5ndGgpIHsKKwkJaWYgKGZpbmlzaF9yZXEpCisJCQlicmVhazsKKwkJaWYgKChiZHN0YXR1cyAmIFJfRikgJiYgKGJkc3RhdHVzICYgUl9MKQorCQkJCQkmJiAhKGJkc3RhdHVzICYgUl9FUlJPUikpIHsKKwkJCXFlX2ZyYW1lX2NsZWFuKHBmcmFtZSk7CisJCQl2YWRkciA9ICh1MzIpcGh5c190b192aXJ0KGluX2JlMzIoJmJkLT5idWYpKTsKKwkJCWZyYW1lX3NldF9kYXRhKHBmcmFtZSwgKHU4ICopdmFkZHIpOworCQkJZnJhbWVfc2V0X2xlbmd0aChwZnJhbWUsIChsZW5ndGggLSBVU0JfQ1JDX1NJWkUpKTsKKwkJCWZyYW1lX3NldF9zdGF0dXMocGZyYW1lLCBGUkFNRV9PSyk7CisJCQlzd2l0Y2ggKGJkc3RhdHVzICYgUl9QSUQpIHsKKwkJCWNhc2UgUl9QSURfREFUQTE6CisJCQkJZnJhbWVfc2V0X2luZm8ocGZyYW1lLCBQSURfREFUQTEpOyBicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJZnJhbWVfc2V0X2luZm8ocGZyYW1lLCBQSURfREFUQTApOyBicmVhazsKKwkJCX0KKwkJCS8qIGhhbmRsZSB0aGUgcnggZnJhbWUgKi8KKworCQkJaWYgKGZyYW1lX2dldF9pbmZvKHBmcmFtZSkgJiBQSURfREFUQTEpCisJCQkJZnJhbWVwaWQgPSAweDE7CisJCQllbHNlCisJCQkJZnJhbWVwaWQgPSAwOworCisJCQlpZiAoZnJhbWVwaWQgIT0gZXAtPmRhdGEwMSkgeworCQkJCWRldl92ZGJnKHVkYy0+ZGV2LCAidGhlIGRhdGEwMSBlcnJvciFcbiIpOworCQkJfSBlbHNlIHsKKwkJCQlmc2l6ZSA9IGZyYW1lX2dldF9sZW5ndGgocGZyYW1lKTsKKworCQkJCWNwID0gKHU4ICopKHJlcS0+cmVxLmJ1ZikgKyByZXEtPnJlcS5hY3R1YWw7CisJCQkJaWYgKGNwKSB7CisJCQkJCW1lbWNweShjcCwgcGZyYW1lLT5kYXRhLCBmc2l6ZSk7CisJCQkJCXJlcS0+cmVxLmFjdHVhbCArPSBmc2l6ZTsKKwkJCQkJaWYgKChmc2l6ZSA8IGVwLT5lcC5tYXhwYWNrZXQpCisJCQkJCQl8fCAocmVxLT5yZXEuYWN0dWFsID49CisJCQkJCQkJcmVxLT5yZXEubGVuZ3RoKSkgeworCQkJCQkJZmluaXNoX3JlcSA9IDE7CisJCQkJCQlkb25lKGVwLCByZXEsIDApOworCQkJCQkJaWYgKGxpc3RfZW1wdHkoJmVwLT5xdWV1ZSkpCisJCQkJCQkJcWVfZXByeF9uYWNrKGVwKTsKKwkJCQkJfQorCQkJCX0KKwkJCQlxZV9lcF90b2dnbGVkYXRhMDEoZXApOworCQkJfQorCQl9IGVsc2UgeworCQkJZGV2X2Vycih1ZGMtPmRldiwgIlRoZSByZWNlaXZlIGZyYW1lIHdpdGggZXJyb3IhXG4iKTsKKwkJfQorCisJCS8qIG5vdGU6IGRvbid0IGNsZWFyIHRoZSByeGJkJ3MgYnVmZmVyIGFkZHJlc3MgKgorCQkgKiBvbmx5IENsZWFyIHRoZSBsZW5ndGggKi8KKwkJb3V0X2JlMzIoKHUzMiBfX2lvbWVtICopYmQsIChiZHN0YXR1cyAmIEJEX1NUQVRVU19NQVNLKSk7CisJCWVwLT5oYXNfZGF0YS0tOworCisJCS8qIEdldCBuZXh0IEJEICovCisJCWlmIChiZHN0YXR1cyAmIFJfVykKKwkJCWJkID0gZXAtPnJ4YmFzZTsKKwkJZWxzZQorCQkJYmQrKzsKKworCQliZHN0YXR1cyA9IGluX2JlMzIoKHUzMiBfX2lvbWVtICopYmQpOworCQlsZW5ndGggPSBiZHN0YXR1cyAmIEJEX0xFTkdUSF9NQVNLOworCX0KKworCWVwLT5uX3J4YmQgPSBiZDsKKwllcF9yZWN5Y2xlX3J4YmRzKGVwKTsKKworCXJldHVybiAwOworfQorCisvKiBvbmx5IGFkZCB0aGUgcmVxdWVzdCBpbiBxdWV1ZSAqLworc3RhdGljIGludCBlcF9yZXFfcmVjZWl2ZShzdHJ1Y3QgcWVfZXAgKmVwLCBzdHJ1Y3QgcWVfcmVxICpyZXEpCit7CisJaWYgKGVwLT5zdGF0ZSA9PSBFUF9TVEFURV9OQUNLKSB7CisJCWlmIChlcC0+aGFzX2RhdGEgPD0gMCkgeworCQkJLyogRW5hYmxlIHJ4IGFuZCB1bm1hc2sgcnggaW50ZXJydXB0ICovCisJCQlxZV9lcHJ4X25vcm1hbChlcCk7CisJCX0gZWxzZSB7CisJCQkvKiBDb3B5IHRoZSBleGlzdCBCRCBkYXRhICovCisJCQllcF9yZXFfcngoZXAsIHJlcSk7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisJSW50ZXJuYWwgVXNlZCBGdW5jdGlvbiBFbmQKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJRW5kcG9pbnQgTWFuYWdlbWVudCBGdW5jdGlvbnMgRm9yIEdhZGdldAorIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyBpbnQgcWVfZXBfZW5hYmxlKHN0cnVjdCB1c2JfZXAgKl9lcCwKKwkJCSBjb25zdCBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmRlc2MpCit7CisJc3RydWN0IHFlX3VkYyAqdWRjOworCXN0cnVjdCBxZV9lcCAqZXA7CisJaW50IHJldHZhbCA9IDA7CisJdW5zaWduZWQgY2hhciBlcG51bTsKKworCWVwID0gY29udGFpbmVyX29mKF9lcCwgc3RydWN0IHFlX2VwLCBlcCk7CisKKwkvKiBjYXRjaCB2YXJpb3VzIGJvZ3VzIHBhcmFtZXRlcnMgKi8KKwlpZiAoIV9lcCB8fCAhZGVzYyB8fCBlcC0+ZGVzYyB8fCBfZXAtPm5hbWUgPT0gZXBfbmFtZVswXSB8fAorCQkJKGRlc2MtPmJEZXNjcmlwdG9yVHlwZSAhPSBVU0JfRFRfRU5EUE9JTlQpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXVkYyA9IGVwLT51ZGM7CisJaWYgKCF1ZGMtPmRyaXZlciB8fCAodWRjLT5nYWRnZXQuc3BlZWQgPT0gVVNCX1NQRUVEX1VOS05PV04pKQorCQlyZXR1cm4gLUVTSFVURE9XTjsKKworCWVwbnVtID0gKHU4KWRlc2MtPmJFbmRwb2ludEFkZHJlc3MgJiAweEY7CisKKwlyZXR2YWwgPSBxZV9lcF9pbml0KHVkYywgZXBudW0sIGRlc2MpOworCWlmIChyZXR2YWwgIT0gMCkgeworCQljcG1fbXVyYW1fZnJlZShjcG1fbXVyYW1fb2Zmc2V0KGVwLT5yeGJhc2UpKTsKKwkJZGV2X2RiZyh1ZGMtPmRldiwgImVuYWJsZSBlcCVkIGZhaWxlZFxuIiwgZXAtPmVwbnVtKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCWRldl9kYmcodWRjLT5kZXYsICJlbmFibGUgZXAlZCBzdWNjZXNzZnVsXG4iLCBlcC0+ZXBudW0pOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHFlX2VwX2Rpc2FibGUoc3RydWN0IHVzYl9lcCAqX2VwKQoreworCXN0cnVjdCBxZV91ZGMgKnVkYzsKKwlzdHJ1Y3QgcWVfZXAgKmVwOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdW5zaWduZWQgaW50IHNpemU7CisKKwllcCA9IGNvbnRhaW5lcl9vZihfZXAsIHN0cnVjdCBxZV9lcCwgZXApOworCXVkYyA9IGVwLT51ZGM7CisKKwlpZiAoIV9lcCB8fCAhZXAtPmRlc2MpIHsKKwkJZGV2X2RiZyh1ZGMtPmRldiwgIiVzIG5vdCBlbmFibGVkXG4iLCBfZXAgPyBlcC0+ZXAubmFtZSA6IE5VTEwpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmdWRjLT5sb2NrLCBmbGFncyk7CisJLyogTnVrZSBhbGwgcGVuZGluZyByZXF1ZXN0cyAoZG9lcyBmbHVzaCkgKi8KKwludWtlKGVwLCAtRVNIVVRET1dOKTsKKwllcC0+ZGVzYyA9IE5VTEw7CisJZXAtPnN0b3BwZWQgPSAxOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnVkYy0+bG9jaywgZmxhZ3MpOworCisJY3BtX211cmFtX2ZyZWUoY3BtX211cmFtX29mZnNldChlcC0+cnhiYXNlKSk7CisKKwlpZiAoZXAtPmRpciA9PSBVU0JfRElSX09VVCkKKwkJc2l6ZSA9IChlcC0+ZXAubWF4cGFja2V0ICsgVVNCX0NSQ19TSVpFICsgMikgKgorCQkJCShVU0JfQkRSSU5HX0xFTl9SWCArIDEpOworCWVsc2UKKwkJc2l6ZSA9IChlcC0+ZXAubWF4cGFja2V0ICsgVVNCX0NSQ19TSVpFICsgMikgKgorCQkJCShVU0JfQkRSSU5HX0xFTiArIDEpOworCisJaWYgKGVwLT5kaXIgIT0gVVNCX0RJUl9JTikgeworCQlrZnJlZShlcC0+cnhmcmFtZSk7CisJCWlmIChlcC0+cnhidWZtYXApIHsKKwkJCWRtYV91bm1hcF9zaW5nbGUodWRjX2NvbnRyb2xsZXItPmdhZGdldC5kZXYucGFyZW50LAorCQkJCQllcC0+cnhidWZfZCwgc2l6ZSwKKwkJCQkJRE1BX0ZST01fREVWSUNFKTsKKwkJCWVwLT5yeGJ1Zl9kID0gRE1BX0FERFJfSU5WQUxJRDsKKwkJfSBlbHNlIHsKKwkJCWRtYV9zeW5jX3NpbmdsZV9mb3JfY3B1KAorCQkJCQl1ZGNfY29udHJvbGxlci0+Z2FkZ2V0LmRldi5wYXJlbnQsCisJCQkJCWVwLT5yeGJ1Zl9kLCBzaXplLAorCQkJCQlETUFfRlJPTV9ERVZJQ0UpOworCQl9CisJCWtmcmVlKGVwLT5yeGJ1ZmZlcik7CisJfQorCisJaWYgKGVwLT5kaXIgIT0gVVNCX0RJUl9PVVQpCisJCWtmcmVlKGVwLT50eGZyYW1lKTsKKworCWRldl9kYmcodWRjLT5kZXYsICJkaXNhYmxlZCAlcyBPS1xuIiwgX2VwLT5uYW1lKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCB1c2JfcmVxdWVzdCAqcWVfYWxsb2NfcmVxdWVzdChzdHJ1Y3QgdXNiX2VwICpfZXAsCWdmcF90IGdmcF9mbGFncykKK3sKKwlzdHJ1Y3QgcWVfcmVxICpyZXE7CisKKwlyZXEgPSBremFsbG9jKHNpemVvZigqcmVxKSwgZ2ZwX2ZsYWdzKTsKKwlpZiAoIXJlcSkKKwkJcmV0dXJuIE5VTEw7CisKKwlyZXEtPnJlcS5kbWEgPSBETUFfQUREUl9JTlZBTElEOworCisJSU5JVF9MSVNUX0hFQUQoJnJlcS0+cXVldWUpOworCisJcmV0dXJuICZyZXEtPnJlcTsKK30KKworc3RhdGljIHZvaWQgcWVfZnJlZV9yZXF1ZXN0KHN0cnVjdCB1c2JfZXAgKl9lcCwgc3RydWN0IHVzYl9yZXF1ZXN0ICpfcmVxKQoreworCXN0cnVjdCBxZV9yZXEgKnJlcTsKKworCXJlcSA9IGNvbnRhaW5lcl9vZihfcmVxLCBzdHJ1Y3QgcWVfcmVxLCByZXEpOworCisJaWYgKF9yZXEpCisJCWtmcmVlKHJlcSk7Cit9CisKKy8qIHF1ZXVlcyAoc3VibWl0cykgYW4gSS9PIHJlcXVlc3QgdG8gYW4gZW5kcG9pbnQgKi8KK3N0YXRpYyBpbnQgcWVfZXBfcXVldWUoc3RydWN0IHVzYl9lcCAqX2VwLCBzdHJ1Y3QgdXNiX3JlcXVlc3QgKl9yZXEsCisJCQkJZ2ZwX3QgZ2ZwX2ZsYWdzKQoreworCXN0cnVjdCBxZV9lcCAqZXAgPSBjb250YWluZXJfb2YoX2VwLCBzdHJ1Y3QgcWVfZXAsIGVwKTsKKwlzdHJ1Y3QgcWVfcmVxICpyZXEgPSBjb250YWluZXJfb2YoX3JlcSwgc3RydWN0IHFlX3JlcSwgcmVxKTsKKwlzdHJ1Y3QgcWVfdWRjICp1ZGM7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgcmV2YWw7CisKKwl1ZGMgPSBlcC0+dWRjOworCS8qIGNhdGNoIHZhcmlvdXMgYm9ndXMgcGFyYW1ldGVycyAqLworCWlmICghX3JlcSB8fCAhcmVxLT5yZXEuY29tcGxldGUgfHwgIXJlcS0+cmVxLmJ1ZgorCQkJfHwgIWxpc3RfZW1wdHkoJnJlcS0+cXVldWUpKSB7CisJCWRldl9kYmcodWRjLT5kZXYsICJiYWQgcGFyYW1zXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCWlmICghX2VwIHx8ICghZXAtPmRlc2MgJiYgZXBfaW5kZXgoZXApKSkgeworCQlkZXZfZGJnKHVkYy0+ZGV2LCAiYmFkIGVwXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKCF1ZGMtPmRyaXZlciB8fCB1ZGMtPmdhZGdldC5zcGVlZCA9PSBVU0JfU1BFRURfVU5LTk9XTikKKwkJcmV0dXJuIC1FU0hVVERPV047CisKKwlyZXEtPmVwID0gZXA7CisKKwkvKiBtYXAgdmlydHVhbCBhZGRyZXNzIHRvIGhhcmR3YXJlICovCisJaWYgKHJlcS0+cmVxLmRtYSA9PSBETUFfQUREUl9JTlZBTElEKSB7CisJCXJlcS0+cmVxLmRtYSA9IGRtYV9tYXBfc2luZ2xlKGVwLT51ZGMtPmdhZGdldC5kZXYucGFyZW50LAorCQkJCQlyZXEtPnJlcS5idWYsCisJCQkJCXJlcS0+cmVxLmxlbmd0aCwKKwkJCQkJZXBfaXNfaW4oZXApCisJCQkJCT8gRE1BX1RPX0RFVklDRSA6CisJCQkJCURNQV9GUk9NX0RFVklDRSk7CisJCXJlcS0+bWFwcGVkID0gMTsKKwl9IGVsc2UgeworCQlkbWFfc3luY19zaW5nbGVfZm9yX2RldmljZShlcC0+dWRjLT5nYWRnZXQuZGV2LnBhcmVudCwKKwkJCQkJcmVxLT5yZXEuZG1hLCByZXEtPnJlcS5sZW5ndGgsCisJCQkJCWVwX2lzX2luKGVwKQorCQkJCQk/IERNQV9UT19ERVZJQ0UgOgorCQkJCQlETUFfRlJPTV9ERVZJQ0UpOworCQlyZXEtPm1hcHBlZCA9IDA7CisJfQorCisJcmVxLT5yZXEuc3RhdHVzID0gLUVJTlBST0dSRVNTOworCXJlcS0+cmVxLmFjdHVhbCA9IDA7CisKKwlsaXN0X2FkZF90YWlsKCZyZXEtPnF1ZXVlLCAmZXAtPnF1ZXVlKTsKKwlkZXZfdmRiZyh1ZGMtPmRldiwgImdhZGdldCBoYXZlIHJlcXVlc3QgaW4gJXMhICVkXG4iLAorCQkJZXAtPm5hbWUsIHJlcS0+cmVxLmxlbmd0aCk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJnVkYy0+bG9jaywgZmxhZ3MpOworCS8qIHB1c2ggdGhlIHJlcXVlc3QgdG8gZGV2aWNlICovCisJaWYgKGVwX2lzX2luKGVwKSkKKwkJcmV2YWwgPSBlcF9yZXFfc2VuZChlcCwgcmVxKTsKKworCS8qIEVQMCAqLworCWlmIChlcF9pbmRleChlcCkgPT0gMCAmJiByZXEtPnJlcS5sZW5ndGggPiAwKSB7CisJCWlmIChlcF9pc19pbihlcCkpCisJCQl1ZGMtPmVwMF9zdGF0ZSA9IERBVEFfU1RBVEVfWE1JVDsKKwkJZWxzZQorCQkJdWRjLT5lcDBfc3RhdGUgPSBEQVRBX1NUQVRFX1JFQ1Y7CisJfQorCisJaWYgKGVwLT5kaXIgPT0gVVNCX0RJUl9PVVQpCisJCXJldmFsID0gZXBfcmVxX3JlY2VpdmUoZXAsIHJlcSk7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ1ZGMtPmxvY2ssIGZsYWdzKTsKKworCXJldHVybiAwOworfQorCisvKiBkZXF1ZXVlcyAoY2FuY2VscywgdW5saW5rcykgYW4gSS9PIHJlcXVlc3QgZnJvbSBhbiBlbmRwb2ludCAqLworc3RhdGljIGludCBxZV9lcF9kZXF1ZXVlKHN0cnVjdCB1c2JfZXAgKl9lcCwgc3RydWN0IHVzYl9yZXF1ZXN0ICpfcmVxKQoreworCXN0cnVjdCBxZV9lcCAqZXAgPSBjb250YWluZXJfb2YoX2VwLCBzdHJ1Y3QgcWVfZXAsIGVwKTsKKwlzdHJ1Y3QgcWVfcmVxICpyZXE7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWlmICghX2VwIHx8ICFfcmVxKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZlcC0+dWRjLT5sb2NrLCBmbGFncyk7CisKKwkvKiBtYWtlIHN1cmUgaXQncyBhY3R1YWxseSBxdWV1ZWQgb24gdGhpcyBlbmRwb2ludCAqLworCWxpc3RfZm9yX2VhY2hfZW50cnkocmVxLCAmZXAtPnF1ZXVlLCBxdWV1ZSkgeworCQlpZiAoJnJlcS0+cmVxID09IF9yZXEpCisJCQlicmVhazsKKwl9CisKKwlpZiAoJnJlcS0+cmVxICE9IF9yZXEpIHsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZXAtPnVkYy0+bG9jaywgZmxhZ3MpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlkb25lKGVwLCByZXEsIC1FQ09OTlJFU0VUKTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmVwLT51ZGMtPmxvY2ssIGZsYWdzKTsKKwlyZXR1cm4gMDsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogbW9kaWZ5IHRoZSBlbmRwb2ludCBoYWx0IGZlYXR1cmUKKyAqIEBlcDogdGhlIG5vbi1pc29jaHJvbm91cyBlbmRwb2ludCBiZWluZyBzdGFsbGVkCisgKiBAdmFsdWU6IDEtLXNldCBoYWx0ICAwLS1jbGVhciBoYWx0CisgKiBSZXR1cm5zIHplcm8sIG9yIGEgbmVnYXRpdmUgZXJyb3IgY29kZS4KKyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyBpbnQgcWVfZXBfc2V0X2hhbHQoc3RydWN0IHVzYl9lcCAqX2VwLCBpbnQgdmFsdWUpCit7CisJc3RydWN0IHFlX2VwICplcDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCBzdGF0dXMgPSAtRU9QTk9UU1VQUDsKKwlzdHJ1Y3QgcWVfdWRjICp1ZGM7CisKKwllcCA9IGNvbnRhaW5lcl9vZihfZXAsIHN0cnVjdCBxZV9lcCwgZXApOworCWlmICghX2VwIHx8ICFlcC0+ZGVzYykgeworCQlzdGF0dXMgPSAtRUlOVkFMOworCQlnb3RvIG91dDsKKwl9CisKKwl1ZGMgPSBlcC0+dWRjOworCS8qIEF0dGVtcHQgdG8gaGFsdCBJTiBlcCB3aWxsIGZhaWwgaWYgYW55IHRyYW5zZmVyIHJlcXVlc3RzCisJICogYXJlIHN0aWxsIHF1ZXVlICovCisJaWYgKHZhbHVlICYmIGVwX2lzX2luKGVwKSAmJiAhbGlzdF9lbXB0eSgmZXAtPnF1ZXVlKSkgeworCQlzdGF0dXMgPSAtRUFHQUlOOworCQlnb3RvIG91dDsKKwl9CisKKwlzdGF0dXMgPSAwOworCXNwaW5fbG9ja19pcnFzYXZlKCZlcC0+dWRjLT5sb2NrLCBmbGFncyk7CisJcWVfZXB0eF9zdGFsbF9jaGFuZ2UoZXAsIHZhbHVlKTsKKwlxZV9lcHJ4X3N0YWxsX2NoYW5nZShlcCwgdmFsdWUpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmVwLT51ZGMtPmxvY2ssIGZsYWdzKTsKKworCWlmIChlcC0+ZXBudW0gPT0gMCkgeworCQl1ZGMtPmVwMF9zdGF0ZSA9IFdBSVRfRk9SX1NFVFVQOworCQl1ZGMtPmVwMF9kaXIgPSAwOworCX0KKworCS8qIHNldCBkYXRhIHRvZ2dsZSB0byBEQVRBMCBvbiBjbGVhciBoYWx0ICovCisJaWYgKHZhbHVlID09IDApCisJCWVwLT5kYXRhMDEgPSAwOworb3V0OgorCWRldl92ZGJnKHVkYy0+ZGV2LCAiJXMgJXMgaGFsdCBzdGF0ICVkXG4iLCBlcC0+ZXAubmFtZSwKKwkJCXZhbHVlID8gICJzZXQiIDogImNsZWFyIiwgc3RhdHVzKTsKKworCXJldHVybiBzdGF0dXM7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2VwX29wcyBxZV9lcF9vcHMgPSB7CisJLmVuYWJsZSA9IHFlX2VwX2VuYWJsZSwKKwkuZGlzYWJsZSA9IHFlX2VwX2Rpc2FibGUsCisKKwkuYWxsb2NfcmVxdWVzdCA9IHFlX2FsbG9jX3JlcXVlc3QsCisJLmZyZWVfcmVxdWVzdCA9IHFlX2ZyZWVfcmVxdWVzdCwKKworCS5xdWV1ZSA9IHFlX2VwX3F1ZXVlLAorCS5kZXF1ZXVlID0gcWVfZXBfZGVxdWV1ZSwKKworCS5zZXRfaGFsdCA9IHFlX2VwX3NldF9oYWx0LAorfTsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwlHYWRnZXQgRHJpdmVyIExheWVyIE9wZXJhdGlvbnMKKyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiBHZXQgdGhlIGN1cnJlbnQgZnJhbWUgbnVtYmVyICovCitzdGF0aWMgaW50IHFlX2dldF9mcmFtZShzdHJ1Y3QgdXNiX2dhZGdldCAqZ2FkZ2V0KQoreworCXUxNiB0bXA7CisKKwl0bXAgPSBpbl9iZTE2KCZ1ZGNfY29udHJvbGxlci0+dXNiX3BhcmFtLT5mcmFtZV9uKTsKKwlpZiAodG1wICYgMHg4MDAwKQorCQl0bXAgPSB0bXAgJiAweDA3ZmY7CisJZWxzZQorCQl0bXAgPSAtRUlOVkFMOworCisJcmV0dXJuIChpbnQpdG1wOworfQorCisvKiBUcmllcyB0byB3YWtlIHVwIHRoZSBob3N0IGNvbm5lY3RlZCB0byB0aGlzIGdhZGdldAorICoKKyAqIFJldHVybiA6IDAtc3VjY2VzcworICogTmVnYXRpdmUtdGhpcyBmZWF0dXJlIG5vdCBlbmFibGVkIGJ5IGhvc3Qgb3Igbm90IHN1cHBvcnRlZCBieSBkZXZpY2UgaHcKKyAqLworc3RhdGljIGludCBxZV93YWtldXAoc3RydWN0IHVzYl9nYWRnZXQgKmdhZGdldCkKK3sKKwlyZXR1cm4gLUVOT1RTVVBQOworfQorCisvKiBOb3RpZnkgY29udHJvbGxlciB0aGF0IFZCVVMgaXMgcG93ZXJlZCwgQ2FsbGVkIGJ5IHdoYXRldmVyCisgICBkZXRlY3RzIFZCVVMgc2Vzc2lvbnMgKi8KK3N0YXRpYyBpbnQgcWVfdmJ1c19zZXNzaW9uKHN0cnVjdCB1c2JfZ2FkZ2V0ICpnYWRnZXQsIGludCBpc19hY3RpdmUpCit7CisJcmV0dXJuIC1FTk9UU1VQUDsKK30KKworLyogY29uc3RyYWluIGNvbnRyb2xsZXIncyBWQlVTIHBvd2VyIHVzYWdlCisgKiBUaGlzIGNhbGwgaXMgdXNlZCBieSBnYWRnZXQgZHJpdmVycyBkdXJpbmcgU0VUX0NPTkZJR1VSQVRJT04gY2FsbHMsCisgKiByZXBvcnRpbmcgaG93IG11Y2ggcG93ZXIgdGhlIGRldmljZSBtYXkgY29uc3VtZS4gIEZvciBleGFtcGxlLCB0aGlzCisgKiBjb3VsZCBhZmZlY3QgaG93IHF1aWNrbHkgYmF0dGVyaWVzIGFyZSByZWNoYXJnZWQuCisgKgorICogUmV0dXJucyB6ZXJvIG9uIHN1Y2Nlc3MsIGVsc2UgbmVnYXRpdmUgZXJybm8uCisgKi8KK3N0YXRpYyBpbnQgcWVfdmJ1c19kcmF3KHN0cnVjdCB1c2JfZ2FkZ2V0ICpnYWRnZXQsIHVuc2lnbmVkIG1BKQoreworCXJldHVybiAtRU5PVFNVUFA7Cit9CisKKy8qIENoYW5nZSBEYXRhKyBwdWxsdXAgc3RhdHVzCisgKiB0aGlzIGZ1bmMgaXMgdXNlZCBieSB1c2JfZ2FkZ2V0X2Nvbm5lY3QvZGlzY29ubmVjdAorICovCitzdGF0aWMgaW50IHFlX3B1bGx1cChzdHJ1Y3QgdXNiX2dhZGdldCAqZ2FkZ2V0LCBpbnQgaXNfb24pCit7CisJcmV0dXJuIC1FTk9UU1VQUDsKK30KKworLyogZGVmaW5lZCBpbiB1c2JfZ2FkZ2V0LmggKi8KK3N0YXRpYyBzdHJ1Y3QgdXNiX2dhZGdldF9vcHMgcWVfZ2FkZ2V0X29wcyA9IHsKKwkuZ2V0X2ZyYW1lID0gcWVfZ2V0X2ZyYW1lLAorCS53YWtldXAgPSBxZV93YWtldXAsCisvKgkuc2V0X3NlbGZwb3dlcmVkID0gcWVfc2V0X3NlbGZwb3dlcmVkLCovIC8qIGFsd2F5cyBzZWxmcG93ZXJlZCAqLworCS52YnVzX3Nlc3Npb24gPSBxZV92YnVzX3Nlc3Npb24sCisJLnZidXNfZHJhdyA9IHFlX3ZidXNfZHJhdywKKwkucHVsbHVwID0gcWVfcHVsbHVwLAorfTsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJVVNCIGVwMCBTZXR1cCBwcm9jZXNzIGluIEJVUyBFbnVtZXJhdGlvbgorIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIGludCB1ZGNfcmVzZXRfZXBfcXVldWUoc3RydWN0IHFlX3VkYyAqdWRjLCB1OCBwaXBlKQoreworCXN0cnVjdCBxZV9lcCAqZXAgPSAmdWRjLT5lcHNbcGlwZV07CisKKwludWtlKGVwLCAtRUNPTk5SRVNFVCk7CisJZXAtPnR4X3JlcSA9IE5VTEw7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcmVzZXRfcXVldWVzKHN0cnVjdCBxZV91ZGMgKnVkYykKK3sKKwl1OCBwaXBlOworCisJZm9yIChwaXBlID0gMDsgcGlwZSA8IFVTQl9NQVhfRU5EUE9JTlRTOyBwaXBlKyspCisJCXVkY19yZXNldF9lcF9xdWV1ZSh1ZGMsIHBpcGUpOworCisJLyogcmVwb3J0IGRpc2Nvbm5lY3Q7IHRoZSBkcml2ZXIgaXMgYWxyZWFkeSBxdWllc2NlZCAqLworCXNwaW5fdW5sb2NrKCZ1ZGMtPmxvY2spOworCXVkYy0+ZHJpdmVyLT5kaXNjb25uZWN0KCZ1ZGMtPmdhZGdldCk7CisJc3Bpbl9sb2NrKCZ1ZGMtPmxvY2spOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGNoOXNldGFkZHJlc3Moc3RydWN0IHFlX3VkYyAqdWRjLCB1MTYgdmFsdWUsIHUxNiBpbmRleCwKKwkJCXUxNiBsZW5ndGgpCit7CisJLyogU2F2ZSB0aGUgbmV3IGFkZHJlc3MgdG8gZGV2aWNlIHN0cnVjdCAqLworCXVkYy0+ZGV2aWNlX2FkZHJlc3MgPSAodTgpIHZhbHVlOworCS8qIFVwZGF0ZSB1c2Igc3RhdGUgKi8KKwl1ZGMtPnVzYl9zdGF0ZSA9IFVTQl9TVEFURV9BRERSRVNTOworCisJLyogU3RhdHVzIHBoYXNlICwgc2VuZCBhIFpMUCAqLworCWlmIChlcDBfcHJpbWVfc3RhdHVzKHVkYywgVVNCX0RJUl9JTikpCisJCXFlX2VwMF9zdGFsbCh1ZGMpOworfQorCitzdGF0aWMgdm9pZCBvd25lcmNvbXBsZXRlKHN0cnVjdCB1c2JfZXAgKl9lcCwgc3RydWN0IHVzYl9yZXF1ZXN0ICpfcmVxKQoreworCXN0cnVjdCBxZV9yZXEgKnJlcSA9IGNvbnRhaW5lcl9vZihfcmVxLCBzdHJ1Y3QgcWVfcmVxLCByZXEpOworCisJcmVxLT5yZXEuYnVmID0gTlVMTDsKKwlrZnJlZShyZXEpOworfQorCitzdGF0aWMgdm9pZCBjaDlnZXRzdGF0dXMoc3RydWN0IHFlX3VkYyAqdWRjLCB1OCByZXF1ZXN0X3R5cGUsIHUxNiB2YWx1ZSwKKwkJCXUxNiBpbmRleCwgdTE2IGxlbmd0aCkKK3sKKwl1MTYgdXNiX3N0YXR1cyA9IDA7CisJc3RydWN0IHFlX3JlcSAqcmVxOworCXN0cnVjdCBxZV9lcCAqZXA7CisJaW50IHN0YXR1cyA9IDA7CisKKwllcCA9ICZ1ZGMtPmVwc1swXTsKKwlpZiAoKHJlcXVlc3RfdHlwZSAmIFVTQl9SRUNJUF9NQVNLKSA9PSBVU0JfUkVDSVBfREVWSUNFKSB7CisJCS8qIEdldCBkZXZpY2Ugc3RhdHVzICovCisJCXVzYl9zdGF0dXMgPSAxIDw8IFVTQl9ERVZJQ0VfU0VMRl9QT1dFUkVEOworCX0gZWxzZSBpZiAoKHJlcXVlc3RfdHlwZSAmIFVTQl9SRUNJUF9NQVNLKSA9PSBVU0JfUkVDSVBfSU5URVJGQUNFKSB7CisJCS8qIEdldCBpbnRlcmZhY2Ugc3RhdHVzICovCisJCS8qIFdlIGRvbid0IGhhdmUgaW50ZXJmYWNlIGluZm9ybWF0aW9uIGluIHVkYyBkcml2ZXIgKi8KKwkJdXNiX3N0YXR1cyA9IDA7CisJfSBlbHNlIGlmICgocmVxdWVzdF90eXBlICYgVVNCX1JFQ0lQX01BU0spID09IFVTQl9SRUNJUF9FTkRQT0lOVCkgeworCQkvKiBHZXQgZW5kcG9pbnQgc3RhdHVzICovCisJCWludCBwaXBlID0gaW5kZXggJiBVU0JfRU5EUE9JTlRfTlVNQkVSX01BU0s7CisJCXN0cnVjdCBxZV9lcCAqdGFyZ2V0X2VwID0gJnVkYy0+ZXBzW3BpcGVdOworCQl1MTYgdXNlcDsKKworCQkvKiBzdGFsbCBpZiBlbmRwb2ludCBkb2Vzbid0IGV4aXN0ICovCisJCWlmICghdGFyZ2V0X2VwLT5kZXNjKQorCQkJZ290byBzdGFsbDsKKworCQl1c2VwID0gaW5fYmUxNigmdWRjLT51c2JfcmVncy0+dXNiX3VzZXBbcGlwZV0pOworCQlpZiAoaW5kZXggJiBVU0JfRElSX0lOKSB7CisJCQlpZiAodGFyZ2V0X2VwLT5kaXIgIT0gVVNCX0RJUl9JTikKKwkJCQlnb3RvIHN0YWxsOworCQkJaWYgKCh1c2VwICYgVVNCX1RIU19NQVNLKSA9PSBVU0JfVEhTX1NUQUxMKQorCQkJCXVzYl9zdGF0dXMgPSAxIDw8IFVTQl9FTkRQT0lOVF9IQUxUOworCQl9IGVsc2UgeworCQkJaWYgKHRhcmdldF9lcC0+ZGlyICE9IFVTQl9ESVJfT1VUKQorCQkJCWdvdG8gc3RhbGw7CisJCQlpZiAoKHVzZXAgJiBVU0JfUkhTX01BU0spID09IFVTQl9SSFNfU1RBTEwpCisJCQkJdXNiX3N0YXR1cyA9IDEgPDwgVVNCX0VORFBPSU5UX0hBTFQ7CisJCX0KKwl9CisKKwlyZXEgPSBjb250YWluZXJfb2YocWVfYWxsb2NfcmVxdWVzdCgmZXAtPmVwLCBHRlBfS0VSTkVMKSwKKwkJCQkJc3RydWN0IHFlX3JlcSwgcmVxKTsKKwlyZXEtPnJlcS5sZW5ndGggPSAyOworCXJlcS0+cmVxLmJ1ZiA9IHVkYy0+c3RhdHVzYnVmOworCSoodTE2ICopcmVxLT5yZXEuYnVmID0gY3B1X3RvX2xlMTYodXNiX3N0YXR1cyk7CisJcmVxLT5yZXEuc3RhdHVzID0gLUVJTlBST0dSRVNTOworCXJlcS0+cmVxLmFjdHVhbCA9IDA7CisJcmVxLT5yZXEuY29tcGxldGUgPSBvd25lcmNvbXBsZXRlOworCisJdWRjLT5lcDBfZGlyID0gVVNCX0RJUl9JTjsKKworCS8qIGRhdGEgcGhhc2UgKi8KKwlzdGF0dXMgPSBxZV9lcF9xdWV1ZSgmZXAtPmVwLCAmcmVxLT5yZXEsIEdGUF9BVE9NSUMpOworCisJaWYgKHN0YXR1cyA9PSAwKQorCQlyZXR1cm47CitzdGFsbDoKKwlkZXZfZXJyKHVkYy0+ZGV2LCAiQ2FuJ3QgcmVzcG9uZCB0byBnZXRzdGF0dXMgcmVxdWVzdCBcbiIpOworCXFlX2VwMF9zdGFsbCh1ZGMpOworfQorCisvKiBvbmx5IGhhbmRsZSB0aGUgc2V0dXAgcmVxdWVzdCwgc3VwcG9zZSB0aGUgZGV2aWNlIGluIG5vcm1hbCBzdGF0dXMgKi8KK3N0YXRpYyB2b2lkIHNldHVwX3JlY2VpdmVkX2hhbmRsZShzdHJ1Y3QgcWVfdWRjICp1ZGMsCisJCQkJc3RydWN0IHVzYl9jdHJscmVxdWVzdCAqc2V0dXApCit7CisJLyogRml4IEVuZGlhbiAodWRjLT5sb2NhbF9zZXR1cF9idWZmIGlzIGNwdSBFbmRpYW4gbm93KSovCisJdTE2IHdWYWx1ZSA9IGxlMTZfdG9fY3B1KHNldHVwLT53VmFsdWUpOworCXUxNiB3SW5kZXggPSBsZTE2X3RvX2NwdShzZXR1cC0+d0luZGV4KTsKKwl1MTYgd0xlbmd0aCA9IGxlMTZfdG9fY3B1KHNldHVwLT53TGVuZ3RoKTsKKworCS8qIGNsZWFyIHRoZSBwcmV2aW91cyByZXF1ZXN0IGluIHRoZSBlcDAgKi8KKwl1ZGNfcmVzZXRfZXBfcXVldWUodWRjLCAwKTsKKworCWlmIChzZXR1cC0+YlJlcXVlc3RUeXBlICYgVVNCX0RJUl9JTikKKwkJdWRjLT5lcDBfZGlyID0gVVNCX0RJUl9JTjsKKwllbHNlCisJCXVkYy0+ZXAwX2RpciA9IFVTQl9ESVJfT1VUOworCisJc3dpdGNoIChzZXR1cC0+YlJlcXVlc3QpIHsKKwljYXNlIFVTQl9SRVFfR0VUX1NUQVRVUzoKKwkJLyogRGF0YStTdGF0dXMgcGhhc2UgZm9ybSB1ZGMgKi8KKwkJaWYgKChzZXR1cC0+YlJlcXVlc3RUeXBlICYgKFVTQl9ESVJfSU4gfCBVU0JfVFlQRV9NQVNLKSkKKwkJCQkJIT0gKFVTQl9ESVJfSU4gfCBVU0JfVFlQRV9TVEFOREFSRCkpCisJCQlicmVhazsKKwkJY2g5Z2V0c3RhdHVzKHVkYywgc2V0dXAtPmJSZXF1ZXN0VHlwZSwgd1ZhbHVlLCB3SW5kZXgsCisJCQkJCXdMZW5ndGgpOworCQlyZXR1cm47CisKKwljYXNlIFVTQl9SRVFfU0VUX0FERFJFU1M6CisJCS8qIFN0YXR1cyBwaGFzZSBmcm9tIHVkYyAqLworCQlpZiAoc2V0dXAtPmJSZXF1ZXN0VHlwZSAhPSAoVVNCX0RJUl9PVVQgfCBVU0JfVFlQRV9TVEFOREFSRCB8CisJCQkJCQlVU0JfUkVDSVBfREVWSUNFKSkKKwkJCWJyZWFrOworCQljaDlzZXRhZGRyZXNzKHVkYywgd1ZhbHVlLCB3SW5kZXgsIHdMZW5ndGgpOworCQlyZXR1cm47CisKKwljYXNlIFVTQl9SRVFfQ0xFQVJfRkVBVFVSRToKKwljYXNlIFVTQl9SRVFfU0VUX0ZFQVRVUkU6CisJCS8qIFJlcXVlc3RzIHdpdGggbm8gZGF0YSBwaGFzZSwgc3RhdHVzIHBoYXNlIGZyb20gdWRjICovCisJCWlmICgoc2V0dXAtPmJSZXF1ZXN0VHlwZSAmIFVTQl9UWVBFX01BU0spCisJCQkJCSE9IFVTQl9UWVBFX1NUQU5EQVJEKQorCQkJYnJlYWs7CisKKwkJaWYgKChzZXR1cC0+YlJlcXVlc3RUeXBlICYgVVNCX1JFQ0lQX01BU0spCisJCQkJPT0gVVNCX1JFQ0lQX0VORFBPSU5UKSB7CisJCQlpbnQgcGlwZSA9IHdJbmRleCAmIFVTQl9FTkRQT0lOVF9OVU1CRVJfTUFTSzsKKwkJCXN0cnVjdCBxZV9lcCAqZXA7CisKKwkJCWlmICh3VmFsdWUgIT0gMCB8fCB3TGVuZ3RoICE9IDAKKwkJCQl8fCBwaXBlID4gVVNCX01BWF9FTkRQT0lOVFMpCisJCQkJYnJlYWs7CisJCQllcCA9ICZ1ZGMtPmVwc1twaXBlXTsKKworCQkJc3Bpbl91bmxvY2soJnVkYy0+bG9jayk7CisJCQlxZV9lcF9zZXRfaGFsdCgmZXAtPmVwLAorCQkJCQkoc2V0dXAtPmJSZXF1ZXN0ID09IFVTQl9SRVFfU0VUX0ZFQVRVUkUpCisJCQkJCQk/IDEgOiAwKTsKKwkJCXNwaW5fbG9jaygmdWRjLT5sb2NrKTsKKwkJfQorCisJCWVwMF9wcmltZV9zdGF0dXModWRjLCBVU0JfRElSX0lOKTsKKworCQlyZXR1cm47CisKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisKKwlpZiAod0xlbmd0aCkgeworCQkvKiBEYXRhIHBoYXNlIGZyb20gZ2FkZ2V0LCBzdGF0dXMgcGhhc2UgZnJvbSB1ZGMgKi8KKwkJaWYgKHNldHVwLT5iUmVxdWVzdFR5cGUgJiBVU0JfRElSX0lOKSB7CisJCQl1ZGMtPmVwMF9zdGF0ZSA9IERBVEFfU1RBVEVfWE1JVDsKKwkJCXVkYy0+ZXAwX2RpciA9IFVTQl9ESVJfSU47CisJCX0gZWxzZSB7CisJCQl1ZGMtPmVwMF9zdGF0ZSA9IERBVEFfU1RBVEVfUkVDVjsKKwkJCXVkYy0+ZXAwX2RpciA9IFVTQl9ESVJfT1VUOworCQl9CisJCXNwaW5fdW5sb2NrKCZ1ZGMtPmxvY2spOworCQlpZiAodWRjLT5kcml2ZXItPnNldHVwKCZ1ZGMtPmdhZGdldCwKKwkJCQkJJnVkYy0+bG9jYWxfc2V0dXBfYnVmZikgPCAwKQorCQkJcWVfZXAwX3N0YWxsKHVkYyk7CisJCXNwaW5fbG9jaygmdWRjLT5sb2NrKTsKKwl9IGVsc2UgeworCQkvKiBObyBkYXRhIHBoYXNlLCBJTiBzdGF0dXMgZnJvbSBnYWRnZXQgKi8KKwkJdWRjLT5lcDBfZGlyID0gVVNCX0RJUl9JTjsKKwkJc3Bpbl91bmxvY2soJnVkYy0+bG9jayk7CisJCWlmICh1ZGMtPmRyaXZlci0+c2V0dXAoJnVkYy0+Z2FkZ2V0LAorCQkJCQkmdWRjLT5sb2NhbF9zZXR1cF9idWZmKSA8IDApCisJCQlxZV9lcDBfc3RhbGwodWRjKTsKKwkJc3Bpbl9sb2NrKCZ1ZGMtPmxvY2spOworCQl1ZGMtPmVwMF9zdGF0ZSA9IERBVEFfU1RBVEVfTkVFRF9aTFA7CisJfQorfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwlVU0IgSW50ZXJydXB0IGhhbmRsZXJzCisgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgdm9pZCBzdXNwZW5kX2lycShzdHJ1Y3QgcWVfdWRjICp1ZGMpCit7CisJdWRjLT5yZXN1bWVfc3RhdGUgPSB1ZGMtPnVzYl9zdGF0ZTsKKwl1ZGMtPnVzYl9zdGF0ZSA9IFVTQl9TVEFURV9TVVNQRU5ERUQ7CisKKwkvKiByZXBvcnQgc3VzcGVuZCB0byB0aGUgZHJpdmVyICxzZXJpYWwuYyBub3Qgc3VwcG9ydCB0aGlzKi8KKwlpZiAodWRjLT5kcml2ZXItPnN1c3BlbmQpCisJCXVkYy0+ZHJpdmVyLT5zdXNwZW5kKCZ1ZGMtPmdhZGdldCk7Cit9CisKK3N0YXRpYyB2b2lkIHJlc3VtZV9pcnEoc3RydWN0IHFlX3VkYyAqdWRjKQoreworCXVkYy0+dXNiX3N0YXRlID0gdWRjLT5yZXN1bWVfc3RhdGU7CisJdWRjLT5yZXN1bWVfc3RhdGUgPSAwOworCisJLyogcmVwb3J0IHJlc3VtZSB0byB0aGUgZHJpdmVyICwgc2VyaWFsLmMgbm90IHN1cHBvcnQgdGhpcyovCisJaWYgKHVkYy0+ZHJpdmVyLT5yZXN1bWUpCisJCXVkYy0+ZHJpdmVyLT5yZXN1bWUoJnVkYy0+Z2FkZ2V0KTsKK30KKworc3RhdGljIHZvaWQgaWRsZV9pcnEoc3RydWN0IHFlX3VkYyAqdWRjKQoreworCXU4IHVzYnM7CisKKwl1c2JzID0gaW5fOCgmdWRjLT51c2JfcmVncy0+dXNiX3VzYnMpOworCWlmICh1c2JzICYgVVNCX0lETEVfU1RBVFVTX01BU0spIHsKKwkJaWYgKCh1ZGMtPnVzYl9zdGF0ZSkgIT0gVVNCX1NUQVRFX1NVU1BFTkRFRCkKKwkJCXN1c3BlbmRfaXJxKHVkYyk7CisJfSBlbHNlIHsKKwkJaWYgKHVkYy0+dXNiX3N0YXRlID09IFVTQl9TVEFURV9TVVNQRU5ERUQpCisJCQlyZXN1bWVfaXJxKHVkYyk7CisJfQorfQorCitzdGF0aWMgaW50IHJlc2V0X2lycShzdHJ1Y3QgcWVfdWRjICp1ZGMpCit7CisJdW5zaWduZWQgY2hhciBpOworCisJcWVfdXNiX2Rpc2FibGUoKTsKKwlvdXRfOCgmdWRjLT51c2JfcmVncy0+dXNiX3VzYWRyLCAwKTsKKworCWZvciAoaSA9IDA7IGkgPCBVU0JfTUFYX0VORFBPSU5UUzsgaSsrKSB7CisJCWlmICh1ZGMtPmVwc1tpXS5pbml0KQorCQkJcWVfZXBfcmVzZXQodWRjLCBpKTsKKwl9CisKKwlyZXNldF9xdWV1ZXModWRjKTsKKwl1ZGMtPnVzYl9zdGF0ZSA9IFVTQl9TVEFURV9ERUZBVUxUOworCXVkYy0+ZXAwX3N0YXRlID0gV0FJVF9GT1JfU0VUVVA7CisJdWRjLT5lcDBfZGlyID0gVVNCX0RJUl9PVVQ7CisJcWVfdXNiX2VuYWJsZSgpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGJzeV9pcnEoc3RydWN0IHFlX3VkYyAqdWRjKQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHR4ZV9pcnEoc3RydWN0IHFlX3VkYyAqdWRjKQoreworCXJldHVybiAwOworfQorCisvKiBlcDAgdHggaW50ZXJydXB0IGFsc28gaW4gaGVyZSAqLworc3RhdGljIGludCB0eF9pcnEoc3RydWN0IHFlX3VkYyAqdWRjKQoreworCXN0cnVjdCBxZV9lcCAqZXA7CisJc3RydWN0IHFlX2JkIF9faW9tZW0gKmJkOworCWludCBpLCByZXMgPSAwOworCisJaWYgKCh1ZGMtPnVzYl9zdGF0ZSA9PSBVU0JfU1RBVEVfQUREUkVTUykKKwkJJiYgKGluXzgoJnVkYy0+dXNiX3JlZ3MtPnVzYl91c2FkcikgPT0gMCkpCisJCW91dF84KCZ1ZGMtPnVzYl9yZWdzLT51c2JfdXNhZHIsIHVkYy0+ZGV2aWNlX2FkZHJlc3MpOworCisJZm9yIChpID0gKFVTQl9NQVhfRU5EUE9JTlRTLTEpOyAoKGkgPj0gMCkgJiYgKHJlcyA9PSAwKSk7IGktLSkgeworCQllcCA9ICZ1ZGMtPmVwc1tpXTsKKwkJaWYgKGVwICYmIGVwLT5pbml0ICYmIChlcC0+ZGlyICE9IFVTQl9ESVJfT1VUKSkgeworCQkJYmQgPSBlcC0+Y190eGJkOworCQkJaWYgKCEoaW5fYmUzMigodTMyIF9faW9tZW0gKiliZCkgJiBUX1IpCisJCQkJCQkmJiAoaW5fYmUzMigmYmQtPmJ1ZikpKSB7CisJCQkJLyogY29uZmlybSB0aGUgdHJhbnNtaXR0ZWQgYmQgKi8KKwkJCQlpZiAoZXAtPmVwbnVtID09IDApCisJCQkJCXJlcyA9IHFlX2VwMF90eGNvbmYoZXApOworCQkJCWVsc2UKKwkJCQkJcmVzID0gcWVfZXBfdHhjb25mKGVwKTsKKwkJCX0KKwkJfQorCX0KKwlyZXR1cm4gcmVzOworfQorCisKKy8qIHNldHVwIHBhY2tlY3QncyByeCBpcyBoYW5kbGUgaW4gdGhlIGZ1bmN0aW9uIHRvbyAqLworc3RhdGljIHZvaWQgcnhfaXJxKHN0cnVjdCBxZV91ZGMgKnVkYykKK3sKKwlzdHJ1Y3QgcWVfZXAgKmVwOworCXN0cnVjdCBxZV9iZCBfX2lvbWVtICpiZDsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBVU0JfTUFYX0VORFBPSU5UUzsgaSsrKSB7CisJCWVwID0gJnVkYy0+ZXBzW2ldOworCQlpZiAoZXAgJiYgZXAtPmluaXQgJiYgKGVwLT5kaXIgIT0gVVNCX0RJUl9JTikpIHsKKwkJCWJkID0gZXAtPm5fcnhiZDsKKwkJCWlmICghKGluX2JlMzIoKHUzMiBfX2lvbWVtICopYmQpICYgUl9FKQorCQkJCQkJJiYgKGluX2JlMzIoJmJkLT5idWYpKSkgeworCQkJCWlmIChlcC0+ZXBudW0gPT0gMCkgeworCQkJCQlxZV9lcDBfcngodWRjKTsKKwkJCQl9IGVsc2UgeworCQkJCQkvKm5vbi1zZXR1cCBwYWNrYWdlIHJlY2VpdmUqLworCQkJCQlxZV9lcF9yeChlcCk7CisJCQkJfQorCQkJfQorCQl9CisJfQorfQorCitzdGF0aWMgaXJxcmV0dXJuX3QgcWVfdWRjX2lycShpbnQgaXJxLCB2b2lkICpfdWRjKQoreworCXN0cnVjdCBxZV91ZGMgKnVkYyA9IChzdHJ1Y3QgcWVfdWRjICopX3VkYzsKKwl1MTYgaXJxX3NyYzsKKwlpcnFyZXR1cm5fdCBzdGF0dXMgPSBJUlFfTk9ORTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnVkYy0+bG9jaywgZmxhZ3MpOworCisJaXJxX3NyYyA9IGluX2JlMTYoJnVkYy0+dXNiX3JlZ3MtPnVzYl91c2JlcikgJgorCQlpbl9iZTE2KCZ1ZGMtPnVzYl9yZWdzLT51c2JfdXNibXIpOworCS8qIENsZWFyIG5vdGlmaWNhdGlvbiBiaXRzICovCisJb3V0X2JlMTYoJnVkYy0+dXNiX3JlZ3MtPnVzYl91c2JlciwgaXJxX3NyYyk7CisJLyogVVNCIEludGVycnVwdCAqLworCWlmIChpcnFfc3JjICYgVVNCX0VfSURMRV9NQVNLKSB7CisJCWlkbGVfaXJxKHVkYyk7CisJCWlycV9zcmMgJj0gflVTQl9FX0lETEVfTUFTSzsKKwkJc3RhdHVzID0gSVJRX0hBTkRMRUQ7CisJfQorCisJaWYgKGlycV9zcmMgJiBVU0JfRV9UWEJfTUFTSykgeworCQl0eF9pcnEodWRjKTsKKwkJaXJxX3NyYyAmPSB+VVNCX0VfVFhCX01BU0s7CisJCXN0YXR1cyA9IElSUV9IQU5ETEVEOworCX0KKworCWlmIChpcnFfc3JjICYgVVNCX0VfUlhCX01BU0spIHsKKwkJcnhfaXJxKHVkYyk7CisJCWlycV9zcmMgJj0gflVTQl9FX1JYQl9NQVNLOworCQlzdGF0dXMgPSBJUlFfSEFORExFRDsKKwl9CisKKwlpZiAoaXJxX3NyYyAmIFVTQl9FX1JFU0VUX01BU0spIHsKKwkJcmVzZXRfaXJxKHVkYyk7CisJCWlycV9zcmMgJj0gflVTQl9FX1JFU0VUX01BU0s7CisJCXN0YXR1cyA9IElSUV9IQU5ETEVEOworCX0KKworCWlmIChpcnFfc3JjICYgVVNCX0VfQlNZX01BU0spIHsKKwkJYnN5X2lycSh1ZGMpOworCQlpcnFfc3JjICY9IH5VU0JfRV9CU1lfTUFTSzsKKwkJc3RhdHVzID0gSVJRX0hBTkRMRUQ7CisJfQorCisJaWYgKGlycV9zcmMgJiBVU0JfRV9UWEVfTUFTSykgeworCQl0eGVfaXJxKHVkYyk7CisJCWlycV9zcmMgJj0gflVTQl9FX1RYRV9NQVNLOworCQlzdGF0dXMgPSBJUlFfSEFORExFRDsKKwl9CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ1ZGMtPmxvY2ssIGZsYWdzKTsKKworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCUdhZGdldCBkcml2ZXIgcmVnaXN0ZXIgYW5kIHVucmVnaXN0ZXIuCisgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworaW50IHVzYl9nYWRnZXRfcmVnaXN0ZXJfZHJpdmVyKHN0cnVjdCB1c2JfZ2FkZ2V0X2RyaXZlciAqZHJpdmVyKQoreworCWludCByZXR2YWw7CisJdW5zaWduZWQgbG9uZyBmbGFncyA9IDA7CisKKwkvKiBzdGFuZGFyZCBvcGVyYXRpb25zICovCisJaWYgKCF1ZGNfY29udHJvbGxlcikKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlpZiAoIWRyaXZlciB8fCAoZHJpdmVyLT5zcGVlZCAhPSBVU0JfU1BFRURfRlVMTAorCQkJJiYgZHJpdmVyLT5zcGVlZCAhPSBVU0JfU1BFRURfSElHSCkKKwkJCXx8ICFkcml2ZXItPmJpbmQgfHwgIWRyaXZlci0+ZGlzY29ubmVjdAorCQkJfHwgIWRyaXZlci0+c2V0dXApCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKHVkY19jb250cm9sbGVyLT5kcml2ZXIpCisJCXJldHVybiAtRUJVU1k7CisKKwkvKiBsb2NrIGlzIG5lZWRlZCBidXQgd2hldGhlciBzaG91bGQgdXNlIHRoaXMgbG9jayBvciBhbm90aGVyICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJnVkY19jb250cm9sbGVyLT5sb2NrLCBmbGFncyk7CisKKwlkcml2ZXItPmRyaXZlci5idXMgPSBOVUxMOworCS8qIGhvb2sgdXAgdGhlIGRyaXZlciAqLworCXVkY19jb250cm9sbGVyLT5kcml2ZXIgPSBkcml2ZXI7CisJdWRjX2NvbnRyb2xsZXItPmdhZGdldC5kZXYuZHJpdmVyID0gJmRyaXZlci0+ZHJpdmVyOworCXVkY19jb250cm9sbGVyLT5nYWRnZXQuc3BlZWQgPSAoZW51bSB1c2JfZGV2aWNlX3NwZWVkKShkcml2ZXItPnNwZWVkKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ1ZGNfY29udHJvbGxlci0+bG9jaywgZmxhZ3MpOworCisJcmV0dmFsID0gZHJpdmVyLT5iaW5kKCZ1ZGNfY29udHJvbGxlci0+Z2FkZ2V0KTsKKwlpZiAocmV0dmFsKSB7CisJCWRldl9lcnIodWRjX2NvbnRyb2xsZXItPmRldiwgImJpbmQgdG8gJXMgLS0+ICVkIiwKKwkJCQlkcml2ZXItPmRyaXZlci5uYW1lLCByZXR2YWwpOworCQl1ZGNfY29udHJvbGxlci0+Z2FkZ2V0LmRldi5kcml2ZXIgPSBOVUxMOworCQl1ZGNfY29udHJvbGxlci0+ZHJpdmVyID0gTlVMTDsKKwkJcmV0dXJuIHJldHZhbDsKKwl9CisKKwkvKiBFbmFibGUgSVJRIHJlZyBhbmQgU2V0IHVzYmNtZCByZWcgRU4gYml0ICovCisJcWVfdXNiX2VuYWJsZSgpOworCisJb3V0X2JlMTYoJnVkY19jb250cm9sbGVyLT51c2JfcmVncy0+dXNiX3VzYmVyLCAweGZmZmYpOworCW91dF9iZTE2KCZ1ZGNfY29udHJvbGxlci0+dXNiX3JlZ3MtPnVzYl91c2JtciwgVVNCX0VfREVGQVVMVF9ERVZJQ0UpOworCXVkY19jb250cm9sbGVyLT51c2Jfc3RhdGUgPSBVU0JfU1RBVEVfQVRUQUNIRUQ7CisJdWRjX2NvbnRyb2xsZXItPmVwMF9zdGF0ZSA9IFdBSVRfRk9SX1NFVFVQOworCXVkY19jb250cm9sbGVyLT5lcDBfZGlyID0gVVNCX0RJUl9PVVQ7CisJZGV2X2luZm8odWRjX2NvbnRyb2xsZXItPmRldiwgIiVzIGJpbmQgdG8gZHJpdmVyICVzIFxuIiwKKwkJdWRjX2NvbnRyb2xsZXItPmdhZGdldC5uYW1lLCBkcml2ZXItPmRyaXZlci5uYW1lKTsKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0wodXNiX2dhZGdldF9yZWdpc3Rlcl9kcml2ZXIpOworCitpbnQgdXNiX2dhZGdldF91bnJlZ2lzdGVyX2RyaXZlcihzdHJ1Y3QgdXNiX2dhZGdldF9kcml2ZXIgKmRyaXZlcikKK3sKKwlzdHJ1Y3QgcWVfZXAgKmxvb3BfZXA7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWlmICghdWRjX2NvbnRyb2xsZXIpCisJCXJldHVybiAtRU5PREVWOworCisJaWYgKCFkcml2ZXIgfHwgZHJpdmVyICE9IHVkY19jb250cm9sbGVyLT5kcml2ZXIpCisJCXJldHVybiAtRUlOVkFMOworCisJLyogc3RvcCB1c2IgY29udHJvbGxlciwgZGlzYWJsZSBpbnRyICovCisJcWVfdXNiX2Rpc2FibGUoKTsKKworCS8qIGluIGZhY3QsIG5vIG5lZWRlZCAqLworCXVkY19jb250cm9sbGVyLT51c2Jfc3RhdGUgPSBVU0JfU1RBVEVfQVRUQUNIRUQ7CisJdWRjX2NvbnRyb2xsZXItPmVwMF9zdGF0ZSA9IFdBSVRfRk9SX1NFVFVQOworCXVkY19jb250cm9sbGVyLT5lcDBfZGlyID0gMDsKKworCS8qIHN0YW5kIG9wZXJhdGlvbiAqLworCXNwaW5fbG9ja19pcnFzYXZlKCZ1ZGNfY29udHJvbGxlci0+bG9jaywgZmxhZ3MpOworCXVkY19jb250cm9sbGVyLT5nYWRnZXQuc3BlZWQgPSBVU0JfU1BFRURfVU5LTk9XTjsKKwludWtlKCZ1ZGNfY29udHJvbGxlci0+ZXBzWzBdLCAtRVNIVVRET1dOKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGxvb3BfZXAsICZ1ZGNfY29udHJvbGxlci0+Z2FkZ2V0LmVwX2xpc3QsCisJCQkJZXAuZXBfbGlzdCkKKwkJbnVrZShsb29wX2VwLCAtRVNIVVRET1dOKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ1ZGNfY29udHJvbGxlci0+bG9jaywgZmxhZ3MpOworCisJLyogdW5iaW5kIGdhZGdldCBhbmQgdW5ob29rIGRyaXZlci4gKi8KKwlkcml2ZXItPnVuYmluZCgmdWRjX2NvbnRyb2xsZXItPmdhZGdldCk7CisJdWRjX2NvbnRyb2xsZXItPmdhZGdldC5kZXYuZHJpdmVyID0gTlVMTDsKKwl1ZGNfY29udHJvbGxlci0+ZHJpdmVyID0gTlVMTDsKKworCWRldl9pbmZvKHVkY19jb250cm9sbGVyLT5kZXYsICJ1bnJlZ2lzdGVyZWQgZ2FkZ2V0IGRyaXZlciAnJXMnXHJcbiIsCisJCQlkcml2ZXItPmRyaXZlci5uYW1lKTsKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0wodXNiX2dhZGdldF91bnJlZ2lzdGVyX2RyaXZlcik7CisKKy8qIHVkYyBzdHJ1Y3R1cmUncyBhbGxvYyBhbmQgc2V0dXAsIGluY2x1ZGUgZXAtcGFyYW0gYWxsb2MgKi8KK3N0YXRpYyBzdHJ1Y3QgcWVfdWRjIF9fZGV2aW5pdCAqcWVfdWRjX2NvbmZpZyhzdHJ1Y3Qgb2ZfZGV2aWNlICpvZmRldikKK3sKKwlzdHJ1Y3QgcWVfdWRjICp1ZGM7CisJc3RydWN0IGRldmljZV9ub2RlICpucCA9IG9mZGV2LT5ub2RlOworCXVuc2lnbmVkIGludCB0bXBfYWRkciA9IDA7CisJc3RydWN0IHVzYl9kZXZpY2VfcGFyYSBfX2lvbWVtICp1c2JwcmFtOworCXVuc2lnbmVkIGludCBpOworCXU2NCBzaXplOworCXUzMiBvZmZzZXQ7CisKKwl1ZGMgPSBremFsbG9jKHNpemVvZigqdWRjKSwgR0ZQX0tFUk5FTCk7CisJaWYgKHVkYyA9PSBOVUxMKSB7CisJCWRldl9lcnIoJm9mZGV2LT5kZXYsICJtYWxsb2MgdWRjIGZhaWxlZFxuIik7CisJCWdvdG8gY2xlYW51cDsKKwl9CisKKwl1ZGMtPmRldiA9ICZvZmRldi0+ZGV2OworCisJLyogZ2V0IGRlZmF1bHQgYWRkcmVzcyBvZiB1c2IgcGFyYW1ldGVyIGluIE1VUkFNIGZyb20gZGV2aWNlIHRyZWUgKi8KKwlvZmZzZXQgPSAqb2ZfZ2V0X2FkZHJlc3MobnAsIDEsICZzaXplLCBOVUxMKTsKKwl1ZGMtPnVzYl9wYXJhbSA9IGNwbV9tdXJhbV9hZGRyKG9mZnNldCk7CisJbWVtc2V0X2lvKHVkYy0+dXNiX3BhcmFtLCAwLCBzaXplKTsKKworCXVzYnByYW0gPSB1ZGMtPnVzYl9wYXJhbTsKKwlvdXRfYmUxNigmdXNicHJhbS0+ZnJhbWVfbiwgMCk7CisJb3V0X2JlMzIoJnVzYnByYW0tPnJzdGF0ZSwgMCk7CisKKwl0bXBfYWRkciA9IGNwbV9tdXJhbV9hbGxvYygoVVNCX01BWF9FTkRQT0lOVFMgKgorCQkJCQlzaXplb2Yoc3RydWN0IHVzYl9lcF9wYXJhKSksCisJCQkJCSAgIFVTQl9FUF9QQVJBX0FMSUdOTUVOVCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgVVNCX01BWF9FTkRQT0lOVFM7IGkrKykgeworCQlvdXRfYmUxNigmdXNicHJhbS0+ZXBwdHJbaV0sICh1MTYpdG1wX2FkZHIpOworCQl1ZGMtPmVwX3BhcmFtW2ldID0gY3BtX211cmFtX2FkZHIodG1wX2FkZHIpOworCQl0bXBfYWRkciArPSAzMjsKKwl9CisKKwltZW1zZXRfaW8odWRjLT5lcF9wYXJhbVswXSwgMCwKKwkJCVVTQl9NQVhfRU5EUE9JTlRTICogc2l6ZW9mKHN0cnVjdCB1c2JfZXBfcGFyYSkpOworCisJdWRjLT5yZXN1bWVfc3RhdGUgPSBVU0JfU1RBVEVfTk9UQVRUQUNIRUQ7CisJdWRjLT51c2Jfc3RhdGUgPSBVU0JfU1RBVEVfUE9XRVJFRDsKKwl1ZGMtPmVwMF9kaXIgPSAwOworCisJc3Bpbl9sb2NrX2luaXQoJnVkYy0+bG9jayk7CisJcmV0dXJuIHVkYzsKKworY2xlYW51cDoKKwlrZnJlZSh1ZGMpOworCXJldHVybiBOVUxMOworfQorCisvKiBVU0IgQ29udHJvbGxlciByZWdpc3RlciBpbml0ICovCitzdGF0aWMgaW50IF9fZGV2aW5pdCBxZV91ZGNfcmVnX2luaXQoc3RydWN0IHFlX3VkYyAqdWRjKQoreworCXN0cnVjdCB1c2JfY3RsciBfX2lvbWVtICpxZV91c2JyZWdzOworCXFlX3VzYnJlZ3MgPSB1ZGMtPnVzYl9yZWdzOworCisJLyogSW5pdCB0aGUgdXNiIHJlZ2lzdGVyICovCisJb3V0XzgoJnFlX3VzYnJlZ3MtPnVzYl91c21vZCwgMHgwMSk7CisJb3V0X2JlMTYoJnFlX3VzYnJlZ3MtPnVzYl91c2JtciwgMCk7CisJb3V0XzgoJnFlX3VzYnJlZ3MtPnVzYl91c2NvbSwgMCk7CisJb3V0X2JlMTYoJnFlX3VzYnJlZ3MtPnVzYl91c2JlciwgVVNCRVJfQUxMX0NMRUFSKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IF9fZGV2aW5pdCBxZV9lcF9jb25maWcoc3RydWN0IHFlX3VkYyAqdWRjLCB1bnNpZ25lZCBjaGFyIHBpcGVfbnVtKQoreworCXN0cnVjdCBxZV9lcCAqZXAgPSAmdWRjLT5lcHNbcGlwZV9udW1dOworCisJZXAtPnVkYyA9IHVkYzsKKwlzdHJjcHkoZXAtPm5hbWUsIGVwX25hbWVbcGlwZV9udW1dKTsKKwllcC0+ZXAubmFtZSA9IGVwX25hbWVbcGlwZV9udW1dOworCisJZXAtPmVwLm9wcyA9ICZxZV9lcF9vcHM7CisJZXAtPnN0b3BwZWQgPSAxOworCWVwLT5lcC5tYXhwYWNrZXQgPSAodW5zaWduZWQgc2hvcnQpIH4wOworCWVwLT5kZXNjID0gTlVMTDsKKwllcC0+ZGlyID0gMHhmZjsKKwllcC0+ZXBudW0gPSAodTgpcGlwZV9udW07CisJZXAtPnNlbnQgPSAwOworCWVwLT5sYXN0ID0gMDsKKwllcC0+aW5pdCA9IDA7CisJZXAtPnJ4ZnJhbWUgPSBOVUxMOworCWVwLT50eGZyYW1lID0gTlVMTDsKKwllcC0+dHhfcmVxID0gTlVMTDsKKwllcC0+c3RhdGUgPSBFUF9TVEFURV9JRExFOworCWVwLT5oYXNfZGF0YSA9IDA7CisKKwkvKiB0aGUgcXVldWUgbGlzdHMgYW55IHJlcSBmb3IgdGhpcyBlcCAqLworCUlOSVRfTElTVF9IRUFEKCZlcC0+cXVldWUpOworCisJLyogZ2FnZGV0LmVwX2xpc3QgdXNlZCBmb3IgZXBfYXV0b2NvbmZpZyBzbyBubyBlcDAqLworCWlmIChwaXBlX251bSAhPSAwKQorCQlsaXN0X2FkZF90YWlsKCZlcC0+ZXAuZXBfbGlzdCwgJnVkYy0+Z2FkZ2V0LmVwX2xpc3QpOworCisJZXAtPmdhZGdldCA9ICZ1ZGMtPmdhZGdldDsKKworCXJldHVybiAwOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKglVREMgZGV2aWNlIERyaXZlciBvcGVyYXRpb24gZnVuY3Rpb25zCQkJCSoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgdm9pZCBxZV91ZGNfcmVsZWFzZShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJaW50IGkgPSAwOworCisJY29tcGxldGUodWRjX2NvbnRyb2xsZXItPmRvbmUpOworCWNwbV9tdXJhbV9mcmVlKGNwbV9tdXJhbV9vZmZzZXQodWRjX2NvbnRyb2xsZXItPmVwX3BhcmFtWzBdKSk7CisJZm9yIChpID0gMDsgaSA8IFVTQl9NQVhfRU5EUE9JTlRTOyBpKyspCisJCXVkY19jb250cm9sbGVyLT5lcF9wYXJhbVtpXSA9IE5VTEw7CisKKwlrZnJlZSh1ZGNfY29udHJvbGxlcik7CisJdWRjX2NvbnRyb2xsZXIgPSBOVUxMOworfQorCisvKiBEcml2ZXIgcHJvYmUgZnVuY3Rpb25zICovCitzdGF0aWMgaW50IF9fZGV2aW5pdCBxZV91ZGNfcHJvYmUoc3RydWN0IG9mX2RldmljZSAqb2ZkZXYsCisJCQljb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkICptYXRjaCkKK3sKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wID0gb2ZkZXYtPm5vZGU7CisJc3RydWN0IHFlX2VwICplcDsKKwl1bnNpZ25lZCBpbnQgcmV0ID0gMDsKKwl1bnNpZ25lZCBpbnQgaTsKKwljb25zdCB2b2lkICpwcm9wOworCisJcHJvcCA9IG9mX2dldF9wcm9wZXJ0eShucCwgIm1vZGUiLCBOVUxMKTsKKwlpZiAoIXByb3AgfHwgc3RyY21wKHByb3AsICJwZXJpcGhlcmFsIikpCisJCXJldHVybiAtRU5PREVWOworCisJLyogSW5pdGlhbGl6ZSB0aGUgdWRjIHN0cnVjdHVyZSBpbmNsdWRpbmcgUUggbWVtYmVyIGFuZCBvdGhlciBtZW1iZXIgKi8KKwl1ZGNfY29udHJvbGxlciA9IHFlX3VkY19jb25maWcob2ZkZXYpOworCWlmICghdWRjX2NvbnRyb2xsZXIpIHsKKwkJZGV2X2RiZygmb2ZkZXYtPmRldiwgInVkY19jb250cm9sbCBpcyBOVUxMXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJdWRjX2NvbnRyb2xsZXItPnNvY190eXBlID0gKHVuc2lnbmVkIGxvbmcpbWF0Y2gtPmRhdGE7CisJdWRjX2NvbnRyb2xsZXItPnVzYl9yZWdzID0gb2ZfaW9tYXAobnAsIDApOworCWlmICghdWRjX2NvbnRyb2xsZXItPnVzYl9yZWdzKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gZXJyMTsKKwl9CisKKwkvKiBpbml0aWFsaXplIHVzYiBodyByZWcgZXhjZXB0IGZvciByZWdzIGZvciBFUCwKKwkgKiBsZWF2ZSB1c2JpbnRyIHJlZyB1bnRvdWNoZWQqLworCXFlX3VkY19yZWdfaW5pdCh1ZGNfY29udHJvbGxlcik7CisKKwkvKiBoZXJlIGNvbWVzIHRoZSBzdGFuZCBvcGVyYXRpb25zIGZvciBwcm9iZQorCSAqIHNldCB0aGUgcWVfdWRjLT5nYWRnZXQueHh4ICovCisJdWRjX2NvbnRyb2xsZXItPmdhZGdldC5vcHMgPSAmcWVfZ2FkZ2V0X29wczsKKworCS8qIGdhZGdldC5lcDAgaXMgYSBwb2ludGVyICovCisJdWRjX2NvbnRyb2xsZXItPmdhZGdldC5lcDAgPSAmdWRjX2NvbnRyb2xsZXItPmVwc1swXS5lcDsKKworCUlOSVRfTElTVF9IRUFEKCZ1ZGNfY29udHJvbGxlci0+Z2FkZ2V0LmVwX2xpc3QpOworCisJLyogbW9kaWZ5IGluIHJlZ2lzdGVyIGdhZGdldCBwcm9jZXNzICovCisJdWRjX2NvbnRyb2xsZXItPmdhZGdldC5zcGVlZCA9IFVTQl9TUEVFRF9VTktOT1dOOworCisJLyogbmFtZTogSWRlbnRpZmllcyB0aGUgY29udHJvbGxlciBoYXJkd2FyZSB0eXBlLiAqLworCXVkY19jb250cm9sbGVyLT5nYWRnZXQubmFtZSA9IGRyaXZlcl9uYW1lOworCisJZGV2aWNlX2luaXRpYWxpemUoJnVkY19jb250cm9sbGVyLT5nYWRnZXQuZGV2KTsKKworCXN0cmNweSh1ZGNfY29udHJvbGxlci0+Z2FkZ2V0LmRldi5idXNfaWQsICJnYWRnZXQiKTsKKworCXVkY19jb250cm9sbGVyLT5nYWRnZXQuZGV2LnJlbGVhc2UgPSBxZV91ZGNfcmVsZWFzZTsKKwl1ZGNfY29udHJvbGxlci0+Z2FkZ2V0LmRldi5wYXJlbnQgPSAmb2ZkZXYtPmRldjsKKworCS8qIGluaXRpYWxpemUgcWVfZXAgc3RydWN0ICovCisJZm9yIChpID0gMDsgaSA8IFVTQl9NQVhfRU5EUE9JTlRTIDsgaSsrKSB7CisJCS8qIGJlY2F1c2UgdGhlIGVwIHR5cGUgaXNuJ3QgZGVjaWRlIGhlcmUgc28KKwkJICogcWVfZXBfaW5pdCgpIHNob3VsZCBiZSBjYWxsZWQgaW4gZXBfZW5hYmxlKCkgKi8KKworCQkvKiBzZXR1cCB0aGUgcWVfZXAgc3RydWN0IGFuZCBsaW5rIGVwLmVwLmxpc3QKKwkJICogaW50byBnYWRnZXQuZXBfbGlzdCAqLworCQlxZV9lcF9jb25maWcodWRjX2NvbnRyb2xsZXIsICh1bnNpZ25lZCBjaGFyKWkpOworCX0KKworCS8qIGVwMCBpbml0aWFsaXphdGlvbiBpbiBoZXJlICovCisJcmV0ID0gcWVfZXBfaW5pdCh1ZGNfY29udHJvbGxlciwgMCwgJnFlX2VwMF9kZXNjKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycjI7CisKKwkvKiBjcmVhdGUgYSBidWYgZm9yIFpMUCBzZW5kLCBuZWVkIHRvIHJlbWFpbiB6ZXJvZWQgKi8KKwl1ZGNfY29udHJvbGxlci0+bnVsbGJ1ZiA9IGt6YWxsb2MoMjU2LCBHRlBfS0VSTkVMKTsKKwlpZiAodWRjX2NvbnRyb2xsZXItPm51bGxidWYgPT0gTlVMTCkgeworCQlkZXZfZGJnKHVkY19jb250cm9sbGVyLT5kZXYsICJjYW5ub3QgYWxsb2MgbnVsbGJ1ZlxuIik7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gZXJyMzsKKwl9CisKKwkvKiBidWZmZXIgZm9yIGRhdGEgb2YgZ2V0X3N0YXR1cyByZXF1ZXN0ICovCisJdWRjX2NvbnRyb2xsZXItPnN0YXR1c2J1ZiA9IGt6YWxsb2MoMiwgR0ZQX0tFUk5FTCk7CisJaWYgKHVkY19jb250cm9sbGVyLT5zdGF0dXNidWYgPT0gTlVMTCkgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIGVycjQ7CisJfQorCisJdWRjX2NvbnRyb2xsZXItPm51bGxwID0gdmlydF90b19waHlzKCh2b2lkICopdWRjX2NvbnRyb2xsZXItPm51bGxidWYpOworCWlmICh1ZGNfY29udHJvbGxlci0+bnVsbHAgPT0gRE1BX0FERFJfSU5WQUxJRCkgeworCQl1ZGNfY29udHJvbGxlci0+bnVsbHAgPSBkbWFfbWFwX3NpbmdsZSgKKwkJCQkJdWRjX2NvbnRyb2xsZXItPmdhZGdldC5kZXYucGFyZW50LAorCQkJCQl1ZGNfY29udHJvbGxlci0+bnVsbGJ1ZiwKKwkJCQkJMjU2LAorCQkJCQlETUFfVE9fREVWSUNFKTsKKwkJdWRjX2NvbnRyb2xsZXItPm51bGxtYXAgPSAxOworCX0gZWxzZSB7CisJCWRtYV9zeW5jX3NpbmdsZV9mb3JfZGV2aWNlKHVkY19jb250cm9sbGVyLT5nYWRnZXQuZGV2LnBhcmVudCwKKwkJCQkJdWRjX2NvbnRyb2xsZXItPm51bGxwLCAyNTYsCisJCQkJCURNQV9UT19ERVZJQ0UpOworCX0KKworCXRhc2tsZXRfaW5pdCgmdWRjX2NvbnRyb2xsZXItPnJ4X3Rhc2tsZXQsIGVwX3J4X3Rhc2tsZXQsCisJCQkodW5zaWduZWQgbG9uZyl1ZGNfY29udHJvbGxlcik7CisJLyogcmVxdWVzdCBpcnEgYW5kIGRpc2FibGUgRFIgICovCisJdWRjX2NvbnRyb2xsZXItPnVzYl9pcnEgPSBpcnFfb2ZfcGFyc2VfYW5kX21hcChucCwgMCk7CisKKwlyZXQgPSByZXF1ZXN0X2lycSh1ZGNfY29udHJvbGxlci0+dXNiX2lycSwgcWVfdWRjX2lycSwgMCwKKwkJCQlkcml2ZXJfbmFtZSwgdWRjX2NvbnRyb2xsZXIpOworCWlmIChyZXQpIHsKKwkJZGV2X2Vycih1ZGNfY29udHJvbGxlci0+ZGV2LCAiY2Fubm90IHJlcXVlc3QgaXJxICVkIGVyciAlZCBcbiIsCisJCQl1ZGNfY29udHJvbGxlci0+dXNiX2lycSwgcmV0KTsKKwkJZ290byBlcnI1OworCX0KKworCXJldCA9IGRldmljZV9hZGQoJnVkY19jb250cm9sbGVyLT5nYWRnZXQuZGV2KTsKKwlpZiAocmV0KQorCQlnb3RvIGVycjY7CisKKwlkZXZfaW5mbyh1ZGNfY29udHJvbGxlci0+ZGV2LAorCQkJIiVzIFVTQiBjb250cm9sbGVyIGluaXRpYWxpemVkIGFzIGRldmljZVxuIiwKKwkJCSh1ZGNfY29udHJvbGxlci0+c29jX3R5cGUgPT0gUE9SVF9RRSkgPyAiUUUiIDogIkNQTSIpOworCXJldHVybiAwOworCitlcnI2OgorCWZyZWVfaXJxKHVkY19jb250cm9sbGVyLT51c2JfaXJxLCB1ZGNfY29udHJvbGxlcik7CitlcnI1OgorCWlmICh1ZGNfY29udHJvbGxlci0+bnVsbG1hcCkgeworCQlkbWFfdW5tYXBfc2luZ2xlKHVkY19jb250cm9sbGVyLT5nYWRnZXQuZGV2LnBhcmVudCwKKwkJCXVkY19jb250cm9sbGVyLT5udWxscCwgMjU2LAorCQkJCURNQV9UT19ERVZJQ0UpOworCQkJdWRjX2NvbnRyb2xsZXItPm51bGxwID0gRE1BX0FERFJfSU5WQUxJRDsKKwl9IGVsc2UgeworCQlkbWFfc3luY19zaW5nbGVfZm9yX2NwdSh1ZGNfY29udHJvbGxlci0+Z2FkZ2V0LmRldi5wYXJlbnQsCisJCQl1ZGNfY29udHJvbGxlci0+bnVsbHAsIDI1NiwKKwkJCQlETUFfVE9fREVWSUNFKTsKKwl9CisJa2ZyZWUodWRjX2NvbnRyb2xsZXItPnN0YXR1c2J1Zik7CitlcnI0OgorCWtmcmVlKHVkY19jb250cm9sbGVyLT5udWxsYnVmKTsKK2VycjM6CisJZXAgPSAmdWRjX2NvbnRyb2xsZXItPmVwc1swXTsKKwljcG1fbXVyYW1fZnJlZShjcG1fbXVyYW1fb2Zmc2V0KGVwLT5yeGJhc2UpKTsKKwlrZnJlZShlcC0+cnhmcmFtZSk7CisJa2ZyZWUoZXAtPnJ4YnVmZmVyKTsKKwlrZnJlZShlcC0+dHhmcmFtZSk7CitlcnIyOgorCWlvdW5tYXAodWRjX2NvbnRyb2xsZXItPnVzYl9yZWdzKTsKK2VycjE6CisJa2ZyZWUodWRjX2NvbnRyb2xsZXIpOworCisJcmV0dXJuIHJldDsKK30KKworI2lmZGVmIENPTkZJR19QTQorc3RhdGljIGludCBxZV91ZGNfc3VzcGVuZChzdHJ1Y3Qgb2ZfZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3sKKwlyZXR1cm4gLUVOT1RTVVBQOworfQorCitzdGF0aWMgaW50IHFlX3VkY19yZXN1bWUoc3RydWN0IG9mX2RldmljZSAqZGV2KQoreworCXJldHVybiAtRU5PVFNVUFA7Cit9CisjZW5kaWYKKworc3RhdGljIGludCBfX2RldmV4aXQgcWVfdWRjX3JlbW92ZShzdHJ1Y3Qgb2ZfZGV2aWNlICpvZmRldikKK3sKKwlzdHJ1Y3QgcWVfZXAgKmVwOworCXVuc2lnbmVkIGludCBzaXplOworCisJREVDTEFSRV9DT01QTEVUSU9OKGRvbmUpOworCisJaWYgKCF1ZGNfY29udHJvbGxlcikKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwl1ZGNfY29udHJvbGxlci0+ZG9uZSA9ICZkb25lOworCXRhc2tsZXRfZGlzYWJsZSgmdWRjX2NvbnRyb2xsZXItPnJ4X3Rhc2tsZXQpOworCisJaWYgKHVkY19jb250cm9sbGVyLT5udWxsbWFwKSB7CisJCWRtYV91bm1hcF9zaW5nbGUodWRjX2NvbnRyb2xsZXItPmdhZGdldC5kZXYucGFyZW50LAorCQkJdWRjX2NvbnRyb2xsZXItPm51bGxwLCAyNTYsCisJCQkJRE1BX1RPX0RFVklDRSk7CisJCQl1ZGNfY29udHJvbGxlci0+bnVsbHAgPSBETUFfQUREUl9JTlZBTElEOworCX0gZWxzZSB7CisJCWRtYV9zeW5jX3NpbmdsZV9mb3JfY3B1KHVkY19jb250cm9sbGVyLT5nYWRnZXQuZGV2LnBhcmVudCwKKwkJCXVkY19jb250cm9sbGVyLT5udWxscCwgMjU2LAorCQkJCURNQV9UT19ERVZJQ0UpOworCX0KKwlrZnJlZSh1ZGNfY29udHJvbGxlci0+c3RhdHVzYnVmKTsKKwlrZnJlZSh1ZGNfY29udHJvbGxlci0+bnVsbGJ1Zik7CisKKwllcCA9ICZ1ZGNfY29udHJvbGxlci0+ZXBzWzBdOworCWNwbV9tdXJhbV9mcmVlKGNwbV9tdXJhbV9vZmZzZXQoZXAtPnJ4YmFzZSkpOworCXNpemUgPSAoZXAtPmVwLm1heHBhY2tldCArIFVTQl9DUkNfU0laRSArIDIpICogKFVTQl9CRFJJTkdfTEVOICsgMSk7CisKKwlrZnJlZShlcC0+cnhmcmFtZSk7CisJaWYgKGVwLT5yeGJ1Zm1hcCkgeworCQlkbWFfdW5tYXBfc2luZ2xlKHVkY19jb250cm9sbGVyLT5nYWRnZXQuZGV2LnBhcmVudCwKKwkJCQllcC0+cnhidWZfZCwgc2l6ZSwKKwkJCQlETUFfRlJPTV9ERVZJQ0UpOworCQllcC0+cnhidWZfZCA9IERNQV9BRERSX0lOVkFMSUQ7CisJfSBlbHNlIHsKKwkJZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUodWRjX2NvbnRyb2xsZXItPmdhZGdldC5kZXYucGFyZW50LAorCQkJCWVwLT5yeGJ1Zl9kLCBzaXplLAorCQkJCURNQV9GUk9NX0RFVklDRSk7CisJfQorCisJa2ZyZWUoZXAtPnJ4YnVmZmVyKTsKKwlrZnJlZShlcC0+dHhmcmFtZSk7CisKKwlmcmVlX2lycSh1ZGNfY29udHJvbGxlci0+dXNiX2lycSwgdWRjX2NvbnRyb2xsZXIpOworCisJdGFza2xldF9raWxsKCZ1ZGNfY29udHJvbGxlci0+cnhfdGFza2xldCk7CisKKwlpb3VubWFwKHVkY19jb250cm9sbGVyLT51c2JfcmVncyk7CisKKwlkZXZpY2VfdW5yZWdpc3RlcigmdWRjX2NvbnRyb2xsZXItPmdhZGdldC5kZXYpOworCS8qIHdhaXQgZm9yIHJlbGVhc2UoKSBvZiBnYWRnZXQuZGV2IHRvIGZyZWUgdWRjICovCisJd2FpdF9mb3JfY29tcGxldGlvbigmZG9uZSk7CisKKwlyZXR1cm4gMDsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIF9fZGV2aW5pdGRhdGEgcWVfdWRjX21hdGNoW10gPSB7CisJeworCQkuY29tcGF0aWJsZSA9ICJmc2wsbXBjODM2MC1xZS11c2IiLAorCQkuZGF0YSA9ICh2b2lkICopUE9SVF9RRSwKKwl9LAorCXsKKwkJLmNvbXBhdGlibGUgPSAiZnNsLG1wYzgyNzItY3BtLXVzYiIsCisJCS5kYXRhID0gKHZvaWQgKilQT1JUX0NQTSwKKwl9LAorCXt9LAorfTsKKworTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgcWVfdWRjX21hdGNoKTsKKworc3RhdGljIHN0cnVjdCBvZl9wbGF0Zm9ybV9kcml2ZXIgdWRjX2RyaXZlciA9IHsKKwkubmFtZSAgICAgICAgICAgPSAoY2hhciAqKWRyaXZlcl9uYW1lLAorCS5tYXRjaF90YWJsZSAgICA9IHFlX3VkY19tYXRjaCwKKwkucHJvYmUgICAgICAgICAgPSBxZV91ZGNfcHJvYmUsCisJLnJlbW92ZSAgICAgICAgID0gX19kZXZleGl0X3AocWVfdWRjX3JlbW92ZSksCisjaWZkZWYgQ09ORklHX1BNCisJLnN1c3BlbmQgICAgICAgID0gcWVfdWRjX3N1c3BlbmQsCisJLnJlc3VtZSAgICAgICAgID0gcWVfdWRjX3Jlc3VtZSwKKyNlbmRpZgorfTsKKworc3RhdGljIGludCBfX2luaXQgcWVfdWRjX2luaXQodm9pZCkKK3sKKwlwcmludGsoS0VSTl9JTkZPICIlczogJXMsICVzXG4iLCBkcml2ZXJfbmFtZSwgZHJpdmVyX2Rlc2MsCisJCQlEUklWRVJfVkVSU0lPTik7CisJcmV0dXJuIG9mX3JlZ2lzdGVyX3BsYXRmb3JtX2RyaXZlcigmdWRjX2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBxZV91ZGNfZXhpdCh2b2lkKQoreworCW9mX3VucmVnaXN0ZXJfcGxhdGZvcm1fZHJpdmVyKCZ1ZGNfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQocWVfdWRjX2luaXQpOworbW9kdWxlX2V4aXQocWVfdWRjX2V4aXQpOworCitNT0RVTEVfREVTQ1JJUFRJT04oRFJJVkVSX0RFU0MpOworTU9EVUxFX0FVVEhPUihEUklWRVJfQVVUSE9SKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L2ZzbF9xZV91ZGMuaCBiL2RyaXZlcnMvdXNiL2dhZGdldC9mc2xfcWVfdWRjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzFiMjcxMAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9mc2xfcWVfdWRjLmgKQEAgLTAsMCArMSw0MzcgQEAKKy8qCisgKiBkcml2ZXJzL3VzYi9nYWRnZXQvcWVfdWRjLmgKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAwOCBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIAlYaWFvYm8gWGllIDxYLlhpZUBmcmVlc2NhbGUuY29tPgorICogCUxpIFlhbmcgPGxlb2xpQGZyZWVzY2FsZS5jb20+CisgKgorICogRGVzY3JpcHRpb246CisgKiBGcmVlc2NhbGUgVVNCIGRldmljZS9lbmRwb2ludCBtYW5hZ2VtZW50IHJlZ2lzdGVycworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0CisgKiB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2lmbmRlZiBfX0ZTTF9RRV9VRENfSAorI2RlZmluZSBfX0ZTTF9RRV9VRENfSAorCisvKiBTb0MgdHlwZSAqLworI2RlZmluZSBQT1JUX0NQTQkwCisjZGVmaW5lIFBPUlRfUUUJCTEKKworI2RlZmluZSBVU0JfTUFYX0VORFBPSU5UUyAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgVVNCX01BWF9QSVBFUyAgICAgICAgICAgICAgICAgICBVU0JfTUFYX0VORFBPSU5UUworI2RlZmluZSBVU0JfRVAwX01BWF9TSVpFCQk2NAorI2RlZmluZSBVU0JfTUFYX0NUUkxfUEFZTE9BRCAgICAgICAgICAgIDB4NDAwMAorI2RlZmluZSBVU0JfQkRSSU5HX0xFTgkJCTE2CisjZGVmaW5lIFVTQl9CRFJJTkdfTEVOX1JYCQkyNTYKKyNkZWZpbmUgVVNCX0JEUklOR19MRU5fVFgJCTE2CisjZGVmaW5lIE1JTl9FTVBUWV9CRFMJCQkxMjgKKyNkZWZpbmUgTUFYX0RBVEFfQkRTCQkJOAorI2RlZmluZSBVU0JfQ1JDX1NJWkUJCQkyCisjZGVmaW5lIFVTQl9ESVJfQk9USAkJCTB4ODgKKyNkZWZpbmUgUl9CVUZfTUFYU0laRQkJCTB4ODAwCisjZGVmaW5lIFVTQl9FUF9QQVJBX0FMSUdOTUVOVAkJMzIKKworLyogVVNCIE1vZGUgUmVnaXN0ZXIgYml0IGRlZmluZSAqLworI2RlZmluZSBVU0JfTU9ERV9FTgkJMHgwMQorI2RlZmluZSBVU0JfTU9ERV9IT1NUCQkweDAyCisjZGVmaW5lIFVTQl9NT0RFX1RFU1QJCTB4MDQKKyNkZWZpbmUgVVNCX01PREVfU0ZURQkJMHgwOAorI2RlZmluZSBVU0JfTU9ERV9SRVNVTUUJCTB4NDAKKyNkZWZpbmUgVVNCX01PREVfTFNTCQkweDgwCisKKy8qIFVTQiBTbGF2ZSBBZGRyZXNzIFJlZ2lzdGVyIE1hc2sgKi8KKyNkZWZpbmUgVVNCX1NMVkFERFJfTUFTSwkweDdGCisKKy8qIFVTQiBFbmRwb2ludCByZWdpc3RlciBkZWZpbmUgKi8KKyNkZWZpbmUgVVNCX0VQTlVNX01BU0sJCTB4RjAwMAorI2RlZmluZSBVU0JfRVBOVU1fU0hJRlQJCTEyCisKKyNkZWZpbmUgVVNCX1RSQU5TX01PREVfU0hJRlQJOAorI2RlZmluZSBVU0JfVFJBTlNfQ1RSCQkweDAwMDAKKyNkZWZpbmUgVVNCX1RSQU5TX0lOVAkJMHgwMTAwCisjZGVmaW5lIFVTQl9UUkFOU19CVUxLCQkweDAyMDAKKyNkZWZpbmUgVVNCX1RSQU5TX0lTTwkJMHgwMzAwCisKKyNkZWZpbmUgVVNCX0VQX01GCQkweDAwMjAKKyNkZWZpbmUgVVNCX0VQX1JURQkJMHgwMDEwCisKKyNkZWZpbmUgVVNCX1RIU19TSElGVAkJMgorI2RlZmluZSBVU0JfVEhTX01BU0sJCTB4MDAwYworI2RlZmluZSBVU0JfVEhTX05PUk1BTAkJMHgwCisjZGVmaW5lIFVTQl9USFNfSUdOT1JFX0lOCTB4MDAwNAorI2RlZmluZSBVU0JfVEhTX05BQ0sJCTB4MDAwOAorI2RlZmluZSBVU0JfVEhTX1NUQUxMCQkweDAwMGMKKworI2RlZmluZSBVU0JfUkhTX1NISUZUICAgCTAKKyNkZWZpbmUgVVNCX1JIU19NQVNLCQkweDAwMDMKKyNkZWZpbmUgVVNCX1JIU19OT1JNQUwgIAkweDAKKyNkZWZpbmUgVVNCX1JIU19JR05PUkVfT1VUCTB4MDAwMQorI2RlZmluZSBVU0JfUkhTX05BQ0sJCTB4MDAwMgorI2RlZmluZSBVU0JfUkhTX1NUQUxMCQkweDAwMDMKKworI2RlZmluZSBVU0JfUlRIU19NQVNLCQkweDAwMGYKKworLyogVVNCIENvbW1hbmQgUmVnaXN0ZXIgZGVmaW5lICovCisjZGVmaW5lIFVTQl9DTURfU1RSX0ZJRk8JMHg4MAorI2RlZmluZSBVU0JfQ01EX0ZMVVNIX0ZJRk8JMHg0MAorI2RlZmluZSBVU0JfQ01EX0lTRlQJCTB4MjAKKyNkZWZpbmUgVVNCX0NNRF9EU0ZUCQkweDEwCisjZGVmaW5lIFVTQl9DTURfRVBfTUFTSwkJMHgwMworCisvKiBVU0IgRXZlbnQgYW5kIE1hc2sgUmVnaXN0ZXIgZGVmaW5lICovCisjZGVmaW5lIFVTQl9FX01TRl9NQVNLCQkweDA4MDAKKyNkZWZpbmUgVVNCX0VfU0ZUX01BU0sJCTB4MDQwMAorI2RlZmluZSBVU0JfRV9SRVNFVF9NQVNLCTB4MDIwMAorI2RlZmluZSBVU0JfRV9JRExFX01BU0sJCTB4MDEwMAorI2RlZmluZSBVU0JfRV9UWEU0X01BU0sJCTB4MDA4MAorI2RlZmluZSBVU0JfRV9UWEUzX01BU0sJCTB4MDA0MAorI2RlZmluZSBVU0JfRV9UWEUyX01BU0sJCTB4MDAyMAorI2RlZmluZSBVU0JfRV9UWEUxX01BU0sJCTB4MDAxMAorI2RlZmluZSBVU0JfRV9TT0ZfTUFTSwkJMHgwMDA4CisjZGVmaW5lIFVTQl9FX0JTWV9NQVNLCQkweDAwMDQKKyNkZWZpbmUgVVNCX0VfVFhCX01BU0sJCTB4MDAwMgorI2RlZmluZSBVU0JfRV9SWEJfTUFTSwkJMHgwMDAxCisjZGVmaW5lIFVTQkVSX0FMTF9DTEVBUiAJMHgwZmZmCisKKyNkZWZpbmUgVVNCX0VfREVGQVVMVF9ERVZJQ0UgICAoVVNCX0VfUkVTRVRfTUFTSyB8IFVTQl9FX1RYRTRfTUFTSyB8IFwKKwkJCQlVU0JfRV9UWEUzX01BU0sgfCBVU0JfRV9UWEUyX01BU0sgfCBcCisJCQkJVVNCX0VfVFhFMV9NQVNLIHwgVVNCX0VfQlNZX01BU0sgfCBcCisJCQkJVVNCX0VfVFhCX01BU0sgfCBVU0JfRV9SWEJfTUFTSykKKworI2RlZmluZSBVU0JfRV9UWEVfTUFTSyAgICAgICAgIChVU0JfRV9UWEU0X01BU0sgfCBVU0JfRV9UWEUzX01BU0t8XAorCQkJCSBVU0JfRV9UWEUyX01BU0sgfCBVU0JfRV9UWEUxX01BU0spCisvKiBVU0IgU3RhdHVzIFJlZ2lzdGVyIGRlZmluZSAqLworI2RlZmluZSBVU0JfSURMRV9TVEFUVVNfTUFTSwkweDAxCisKKy8qIFVTQiBTdGFydCBvZiBGcmFtZSBUaW1lciAqLworI2RlZmluZSBVU0JfVVNTRlRfTUFTSwkJMHgzRkZGCisKKy8qIFVTQiBGcmFtZSBOdW1iZXIgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgVVNCX1VTRlJOX01BU0sJCTB4RkZGRgorCitzdHJ1Y3QgdXNiX2RldmljZV9wYXJheworCXUxNgllcHB0cls0XTsKKwl1MzIJcnN0YXRlOworCXUzMglycHRyOworCXUxNglmcmFtZV9uOworCXUxNglyYmNudDsKKwl1MzIJcnRlbXA7CisJdTMyCXJ4dXNiX2RhdGE7CisJdTE2CXJ4dXB0cjsKKwl1OAlyZXNvWzJdOworCXUzMglzb2Z0Ymw7CisJdTgJc29mdWNyY3RlbXA7Cit9OworCitzdHJ1Y3QgdXNiX2VwX3BhcmF7CisJdTE2CXJiYXNlOworCXUxNgl0YmFzZTsKKwl1OAlyYm1yOworCXU4CXRibXI7CisJdTE2CW1yYmxyOworCXUxNglyYnB0cjsKKwl1MTYJdGJwdHI7CisJdTMyCXRzdGF0ZTsKKwl1MzIJdHB0cjsKKwl1MTYJdGNyYzsKKwl1MTYJdGJjbnQ7CisJdTMyCXR0ZW1wOworCXUxNgl0eHVzYnVfcHRyOworCXU4CXJlc2VydmVbMl07Cit9OworCisjZGVmaW5lIFVTQl9CVVNNT0RFX0dCTAkJMHgyMAorI2RlZmluZSBVU0JfQlVTTU9ERV9CT19NQVNLCTB4MTgKKyNkZWZpbmUgVVNCX0JVU01PREVfQk9fU0hJRlQJMHgzCisjZGVmaW5lIFVTQl9CVVNNT0RFX0JFCQkweDIKKyNkZWZpbmUgVVNCX0JVU01PREVfQ0VUTQkweDA0CisjZGVmaW5lIFVTQl9CVVNNT0RFX0RUQgkJMHgwMgorCisvKiBFbmRwb2ludCBiYXNpYyBoYW5kbGUgKi8KKyNkZWZpbmUgZXBfaW5kZXgoRVApCQkoKEVQKS0+ZGVzYy0+YkVuZHBvaW50QWRkcmVzcyAmIDB4RikKKyNkZWZpbmUgZXBfbWF4cGFja2V0KEVQKQkoKEVQKS0+ZXAubWF4cGFja2V0KQorI2RlZmluZSBlcF9pc19pbihFUCkJKChlcF9pbmRleChFUCkgPT0gMCkgPyAoRVAtPnVkYy0+ZXAwX2RpciA9PSBcCisJCQlVU0JfRElSX0lOKSA6ICgoRVApLT5kZXNjLT5iRW5kcG9pbnRBZGRyZXNzIFwKKwkJCSYgVVNCX0RJUl9JTikgPT0gVVNCX0RJUl9JTikKKworLyogZXAwIHRyYW5zZmVyIHN0YXRlICovCisjZGVmaW5lIFdBSVRfRk9SX1NFVFVQICAgICAgICAgIDAKKyNkZWZpbmUgREFUQV9TVEFURV9YTUlUICAgICAgICAgMQorI2RlZmluZSBEQVRBX1NUQVRFX05FRURfWkxQICAgICAyCisjZGVmaW5lIFdBSVRfRk9SX09VVF9TVEFUVVMgICAgIDMKKyNkZWZpbmUgREFUQV9TVEFURV9SRUNWICAgICAgICAgNAorCisvKiBlcCB0cmFtc2ZlciBtb2RlICovCisjZGVmaW5lIFVTQlBfVE1fQ1RMCTAKKyNkZWZpbmUgVVNCUF9UTV9JU08JMQorI2RlZmluZSBVU0JQX1RNX0JVTEsJMgorI2RlZmluZSBVU0JQX1RNX0lOVAkzCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwlVU0IgUlggQW5kIFRYIERBVEEgRnJhbWUKKyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdHJ1Y3QgcWVfZnJhbWV7CisJdTggKmRhdGE7CisJdTMyIGxlbjsKKwl1MzIgc3RhdHVzOworCXUzMiBpbmZvOworCisJdm9pZCAqcHJpdmRhdGE7CisJc3RydWN0IGxpc3RfaGVhZCBub2RlOworfTsKKworLyogRnJhbWUgc3RydWN0dXJlLCBpbmZvIGZpZWxkLiAqLworI2RlZmluZSBQSURfREFUQTAgICAgICAgICAgICAgIDB4ODAwMDAwMDAgLyogRGF0YSB0b2dnbGUgemVybyAqLworI2RlZmluZSBQSURfREFUQTEgICAgICAgICAgICAgIDB4NDAwMDAwMDAgLyogRGF0YSB0b2dnbGUgb25lICAqLworI2RlZmluZSBQSURfU0VUVVAgICAgICAgICAgICAgIDB4MjAwMDAwMDAgLyogc2V0dXAgYml0ICovCisjZGVmaW5lIFNFVFVQX1NUQVRVUyAgICAgICAgICAgMHgxMDAwMDAwMCAvKiBzZXR1cCBzdGF0dXMgYml0ICovCisjZGVmaW5lIFNFVEFERFJfU1RBVFVTICAgICAgICAgMHgwODAwMDAwMCAvKiBzZXR1cHVwIGFkZHJlc3Mgc3RhdHVzIGJpdCAqLworI2RlZmluZSBOT19SRVEgICAgICAgICAgICAgICAgIDB4MDQwMDAwMDAgLyogRnJhbWUgd2l0aG91dCByZXF1ZXN0ICovCisjZGVmaW5lIEhPU1RfREFUQSAgICAgICAgICAgICAgMHgwMjAwMDAwMCAvKiBIb3N0IGRhdGEgZnJhbWUgKi8KKyNkZWZpbmUgRklSU1RfUEFDS0VUX0lOX0ZSQU1FICAweDAxMDAwMDAwIC8qIGZpcnN0IHBhY2tldCBpbiB0aGUgZnJhbWUgKi8KKyNkZWZpbmUgVE9LRU5fRlJBTUUgICAgICAgICAgICAweDAwODAwMDAwIC8qIEhvc3QgdG9rZW4gZnJhbWUgKi8KKyNkZWZpbmUgWkxQICAgICAgICAgICAgICAgICAgICAweDAwNDAwMDAwIC8qIFplcm8gbGVuZ3RoIHBhY2tldCAqLworI2RlZmluZSBJTl9UT0tFTl9GUkFNRSAgICAgICAgIDB4MDAyMDAwMDAgLyogSW4gdG9rZW4gcGFja2FnZSAqLworI2RlZmluZSBPVVRfVE9LRU5fRlJBTUUgICAgICAgIDB4MDAxMDAwMDAgLyogT3V0IHRva2VuIHBhY2thZ2UgKi8KKyNkZWZpbmUgU0VUVVBfVE9LRU5fRlJBTUUgICAgICAweDAwMDgwMDAwIC8qIFNldHVwIHRva2VuIHBhY2thZ2UgKi8KKyNkZWZpbmUgU1RBTExfRlJBTUUgICAgICAgICAgICAweDAwMDQwMDAwIC8qIFN0YWxsIGhhbmRzaGFrZSAqLworI2RlZmluZSBOQUNLX0ZSQU1FICAgICAgICAgICAgIDB4MDAwMjAwMDAgLyogTmFjayBoYW5kc2hha2UgKi8KKyNkZWZpbmUgTk9fUElEICAgICAgICAgICAgICAgICAweDAwMDEwMDAwIC8qIE5vIHNlbmQgUElEICovCisjZGVmaW5lIE5PX0NSQyAgICAgICAgICAgICAgICAgMHgwMDAwODAwMCAvKiBObyBzZW5kIENSQyAqLworI2RlZmluZSBIT1NUX0NPTU1BTkQgICAgICAgICAgIDB4MDAwMDQwMDAgLyogSG9zdCBjb21tYW5kIGZyYW1lICAgKi8KKworLyogRnJhbWUgc3RhdHVzIGZpZWxkICovCisvKiBSZWNlaXZlIHNpZGUgKi8KKyNkZWZpbmUgRlJBTUVfT0sgICAgICAgICAgICAgICAweDAwMDAwMDAwIC8qIEZyYW1lIHRyYW5taXR0ZWQgb3IgcmVjZWl2ZWQgT0sgKi8KKyNkZWZpbmUgRlJBTUVfRVJST1IgICAgICAgICAgICAweDgwMDAwMDAwIC8qIEVycm9yIG9jY3VyZWQgb24gZnJhbWUgKi8KKyNkZWZpbmUgU1RBUlRfRlJBTUVfTE9TVCAgICAgICAweDQwMDAwMDAwIC8qIFNUQVJUX0ZSQU1FX0xPU1QgKi8KKyNkZWZpbmUgRU5EX0ZSQU1FX0xPU1QgICAgICAgICAweDIwMDAwMDAwIC8qIEVORF9GUkFNRV9MT1NUICovCisjZGVmaW5lIFJYX0VSX05PTk9DVCAgICAgICAgICAgMHgxMDAwMDAwMCAvKiBSeCBOb24gT2N0ZXQgQWxpZ25lZCBQYWNrZXQgKi8KKyNkZWZpbmUgUlhfRVJfQklUU1RVRkYgICAgICAgICAweDA4MDAwMDAwIC8qIEZyYW1lIEFib3J0ZWQgLS1SZWNlaXZlZCBwYWNrZXQKKwkJCQkJICAgICB3aXRoIGJpdCBzdHVmZiBlcnJvciAqLworI2RlZmluZSBSWF9FUl9DUkMgICAgICAgICAgICAgIDB4MDQwMDAwMDAgLyogUmVjZWl2ZWQgcGFja2V0IHdpdGggQ1JDIGVycm9yICovCisjZGVmaW5lIFJYX0VSX09WRVJVTiAgICAgICAgICAgMHgwMjAwMDAwMCAvKiBPdmVyLXJ1biBvY2N1cmVkIG9uIHJlY2VwdGlvbiAqLworI2RlZmluZSBSWF9FUl9QSUQgICAgICAgICAgICAgIDB4MDEwMDAwMDAgLyogV3JvbmcgUElEIHJlY2VpdmVkICovCisvKiBUcmFubWl0IHNpZGUgKi8KKyNkZWZpbmUgVFhfRVJfTkFLICAgICAgICAgICAgICAweDAwODAwMDAwIC8qIFJlY2VpdmVkIE5BSyBoYW5kc2hha2UgKi8KKyNkZWZpbmUgVFhfRVJfU1RBTEwgICAgICAgICAgICAweDAwNDAwMDAwIC8qIFJlY2VpdmVkIFNUQUxMIGhhbmRzaGFrZSAqLworI2RlZmluZSBUWF9FUl9USU1FT1VUICAgICAgICAgIDB4MDAyMDAwMDAgLyogVHJhbnNtaXQgdGltZSBvdXQgKi8KKyNkZWZpbmUgVFhfRVJfVU5ERVJVTiAgICAgICAgICAweDAwMTAwMDAwIC8qIFRyYW5zbWl0IHVuZGVycnVuICovCisjZGVmaW5lIEZSQU1FX0lOUFJPR1JFU1MgICAgICAgMHgwMDA4MDAwMCAvKiBGcmFtZSBpcyBiZWluZyB0cmFuc21pdHRlZCAqLworI2RlZmluZSBFUl9EQVRBX1VOREVSVU4gICAgICAgIDB4MDAwNDAwMDAgLyogRnJhbWUgaXMgc2hvcnRlciB0aGVuIGV4cGVjdGVkICovCisjZGVmaW5lIEVSX0RBVEFfT1ZFUlVOICAgICAgICAgMHgwMDAyMDAwMCAvKiBGcmFtZSBpcyBsb25nZXIgdGhlbiBleHBlY3RlZCAqLworCisvKiBRRSBVU0IgZnJhbWUgb3BlcmF0aW9uIGZ1bmN0aW9ucyAqLworI2RlZmluZSBmcmFtZV9nZXRfbGVuZ3RoKGZybSkgKGZybS0+bGVuKQorI2RlZmluZSBmcmFtZV9zZXRfbGVuZ3RoKGZybSwgbGVuZykgKGZybS0+bGVuID0gbGVuZykKKyNkZWZpbmUgZnJhbWVfZ2V0X2RhdGEoZnJtKSAoZnJtLT5kYXRhKQorI2RlZmluZSBmcmFtZV9zZXRfZGF0YShmcm0sIGRhdCkgKGZybS0+ZGF0YSA9IGRhdCkKKyNkZWZpbmUgZnJhbWVfZ2V0X2luZm8oZnJtKSAoZnJtLT5pbmZvKQorI2RlZmluZSBmcmFtZV9zZXRfaW5mbyhmcm0sIGluZikgKGZybS0+aW5mbyA9IGluZikKKyNkZWZpbmUgZnJhbWVfZ2V0X3N0YXR1cyhmcm0pIChmcm0tPnN0YXR1cykKKyNkZWZpbmUgZnJhbWVfc2V0X3N0YXR1cyhmcm0sIHN0YXQpIChmcm0tPnN0YXR1cyA9IHN0YXQpCisjZGVmaW5lIGZyYW1lX2dldF9wcml2ZGF0YShmcm0pIChmcm0tPnByaXZkYXRhKQorI2RlZmluZSBmcmFtZV9zZXRfcHJpdmRhdGEoZnJtLCBkYXQpIChmcm0tPnByaXZkYXRhID0gZGF0KQorCitzdGF0aWMgaW5saW5lIHZvaWQgcWVfZnJhbWVfY2xlYW4oc3RydWN0IHFlX2ZyYW1lICpmcm0pCit7CisJZnJhbWVfc2V0X2RhdGEoZnJtLCBOVUxMKTsKKwlmcmFtZV9zZXRfbGVuZ3RoKGZybSwgMCk7CisJZnJhbWVfc2V0X3N0YXR1cyhmcm0sIEZSQU1FX09LKTsKKwlmcmFtZV9zZXRfaW5mbyhmcm0sIDApOworCWZyYW1lX3NldF9wcml2ZGF0YShmcm0sIE5VTEwpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgcWVfZnJhbWVfaW5pdChzdHJ1Y3QgcWVfZnJhbWUgKmZybSkKK3sKKwlxZV9mcmFtZV9jbGVhbihmcm0pOworCUlOSVRfTElTVF9IRUFEKCYoZnJtLT5ub2RlKSk7Cit9CisKK3N0cnVjdCBxZV9yZXEgeworCXN0cnVjdCB1c2JfcmVxdWVzdCByZXE7CisJc3RydWN0IGxpc3RfaGVhZCBxdWV1ZTsKKwkvKiBlcF9xdWV1ZSgpIGZ1bmMgd2lsbCBhZGQKKwkgYSByZXF1ZXN0LT5xdWV1ZSBpbnRvIGEgdWRjX2VwLT5xdWV1ZSAnZCB0YWlsICovCisJc3RydWN0IHFlX2VwICplcDsKKwl1bnNpZ25lZCBtYXBwZWQ6MTsKK307CisKK3N0cnVjdCBxZV9lcCB7CisJc3RydWN0IHVzYl9lcCBlcDsKKwlzdHJ1Y3QgbGlzdF9oZWFkIHF1ZXVlOworCXN0cnVjdCBxZV91ZGMgKnVkYzsKKwljb25zdCBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmRlc2M7CisJc3RydWN0IHVzYl9nYWRnZXQgKmdhZGdldDsKKworCXU4IHN0YXRlOworCisJc3RydWN0IHFlX2JkIF9faW9tZW0gKnJ4YmFzZTsKKwlzdHJ1Y3QgcWVfYmQgX19pb21lbSAqbl9yeGJkOworCXN0cnVjdCBxZV9iZCBfX2lvbWVtICplX3J4YmQ7CisKKwlzdHJ1Y3QgcWVfYmQgX19pb21lbSAqdHhiYXNlOworCXN0cnVjdCBxZV9iZCBfX2lvbWVtICpuX3R4YmQ7CisJc3RydWN0IHFlX2JkIF9faW9tZW0gKmNfdHhiZDsKKworCXN0cnVjdCBxZV9mcmFtZSAqcnhmcmFtZTsKKwl1OCAqcnhidWZmZXI7CisJZG1hX2FkZHJfdCByeGJ1Zl9kOworCXU4IHJ4YnVmbWFwOworCXVuc2lnbmVkIGNoYXIgbG9jYWxuYWNrOworCWludCBoYXNfZGF0YTsKKworCXN0cnVjdCBxZV9mcmFtZSAqdHhmcmFtZTsKKwlzdHJ1Y3QgcWVfcmVxICp0eF9yZXE7CisJaW50IHNlbnQ7ICAvKmRhdGEgYWxyZWFkeSBzZW50ICovCisJaW50IGxhc3Q7ICAvKmRhdGEgc2VudCBpbiB0aGUgbGFzdCB0aW1lKi8KKworCXU4IGRpcjsKKwl1OCBlcG51bTsKKwl1OCB0bTsgLyogdHJhbnNmZXIgbW9kZSAqLworCXU4IGRhdGEwMTsKKwl1OCBpbml0OworCisJdTggYWxyZWFkeV9zZWVuOworCXU4IGVuYWJsZV90YXNrbGV0OworCXU4IHNldHVwX3N0YWdlOworCXUzMiBsYXN0X2lvOyAgICAgICAgICAgIC8qIHRpbWVzdGFtcCAqLworCisJY2hhciBuYW1lWzE0XTsKKworCXVuc2lnbmVkIGRvdWJsZV9idWY6MTsKKwl1bnNpZ25lZCBzdG9wcGVkOjE7CisJdW5zaWduZWQgZm5mOjE7CisJdW5zaWduZWQgaGFzX2RtYToxOworCisJdTggYWNrd2FpdDsKKwl1OCBkbWFfY2hhbm5lbDsKKwl1MTYgZG1hX2NvdW50ZXI7CisJaW50IGxjaDsKKworCXN0cnVjdCB0aW1lcl9saXN0IHRpbWVyOworfTsKKworc3RydWN0IHFlX3VkYyB7CisJc3RydWN0IHVzYl9nYWRnZXQgZ2FkZ2V0OworCXN0cnVjdCB1c2JfZ2FkZ2V0X2RyaXZlciAqZHJpdmVyOworCXN0cnVjdCBkZXZpY2UgKmRldjsKKwlzdHJ1Y3QgcWVfZXAgZXBzW1VTQl9NQVhfRU5EUE9JTlRTXTsKKwlzdHJ1Y3QgdXNiX2N0cmxyZXF1ZXN0IGxvY2FsX3NldHVwX2J1ZmY7CisJc3BpbmxvY2tfdCBsb2NrOwkvKiBsb2NrIGZvciBzZXQvY29uZmlnIHFlX3VkYyAqLworCXVuc2lnbmVkIGxvbmcgc29jX3R5cGU7CQkvKiBRRSBvciBDUE0gc29jICovCisKKwlzdHJ1Y3QgcWVfcmVxICpzdGF0dXNfcmVxOwkvKiBlcDAgc3RhdHVzIHJlcXVlc3QgKi8KKworCS8qIFVTQiBhbmQgRVAgUGFyYW1ldGVyIEJsb2NrIHBvaW50ZXIgKi8KKwlzdHJ1Y3QgdXNiX2RldmljZV9wYXJhIF9faW9tZW0gKnVzYl9wYXJhbTsKKwlzdHJ1Y3QgdXNiX2VwX3BhcmEgX19pb21lbSAqZXBfcGFyYW1bNF07CisKKwl1MzIgbWF4X3BpcGVzOyAgICAgICAgICAvKiBEZXZpY2UgbWF4IHBpcGVzICovCisJdTMyIG1heF91c2VfZW5kcHRzOyAgICAgLyogTWF4IGVuZHBvaW50ZXMgdG8gYmUgdXNlZCAqLworCXUzMiBidXNfcmVzZXQ7ICAgICAgICAgIC8qIERldmljZSBpcyBidXMgcmVzZXRpbmcgKi8KKwl1MzIgcmVzdW1lX3N0YXRlOyAgICAgICAvKiBVU0Igc3RhdGUgdG8gcmVzdW1lKi8KKwl1MzIgdXNiX3N0YXRlOyAgICAgICAgICAvKiBVU0IgY3VycmVudCBzdGF0ZSAqLworCXUzMiB1c2JfbmV4dF9zdGF0ZTsgICAgIC8qIFVTQiBuZXh0IHN0YXRlICovCisJdTMyIGVwMF9zdGF0ZTsgICAgICAgICAgLyogRW5wb2ludCB6ZXJvIHN0YXRlICovCisJdTMyIGVwMF9kaXI7ICAgICAgICAgICAgLyogRW5wb2ludCB6ZXJvIGRpcmVjdGlvbjogY2FuIGJlCisJCQkJVVNCX0RJUl9JTiBvciBVU0JfRElSX09VVCovCisJdTMyIHVzYl9zb2ZfY291bnQ7ICAgICAgLyogU09GIGNvdW50ICovCisJdTMyIGVycm9yczsgICAgICAgICAgICAgLyogVVNCIEVSUk9ScyBjb3VudCAqLworCisJdTggKnRtcGJ1ZjsKKwl1MzIgY19zdGFydDsKKwl1MzIgY19lbmQ7CisKKwl1OCAqbnVsbGJ1ZjsKKwl1OCAqc3RhdHVzYnVmOworCWRtYV9hZGRyX3QgbnVsbHA7CisJdTggbnVsbG1hcDsKKwl1OCBkZXZpY2VfYWRkcmVzczsJLyogRGV2aWNlIFVTQiBhZGRyZXNzICovCisKKwl1bnNpZ25lZCBpbnQgdXNiX2Nsb2NrOworCXVuc2lnbmVkIGludCB1c2JfaXJxOworCXN0cnVjdCB1c2JfY3RsciBfX2lvbWVtICp1c2JfcmVnczsKKworCXN0cnVjdCB0YXNrbGV0X3N0cnVjdCByeF90YXNrbGV0OworCisJc3RydWN0IGNvbXBsZXRpb24gKmRvbmU7CS8qIHRvIG1ha2Ugc3VyZSByZWxlYXNlKCkgaXMgZG9uZSAqLworfTsKKworI2RlZmluZSBFUF9TVEFURV9JRExFCTAKKyNkZWZpbmUgRVBfU1RBVEVfTkFDSwkxCisjZGVmaW5lIEVQX1NUQVRFX1NUQUxMCTIKKworLyoKKyAqIHRyYW5zbWl0IEJEJ3Mgc3RhdHVzCisgKi8KKyNkZWZpbmUgVF9SICAgICAgICAgICAweDgwMDAwMDAwICAgICAgICAgLyogcmVhZHkgYml0ICovCisjZGVmaW5lIFRfVyAgICAgICAgICAgMHgyMDAwMDAwMCAgICAgICAgIC8qIHdyYXAgYml0ICovCisjZGVmaW5lIFRfSSAgICAgICAgICAgMHgxMDAwMDAwMCAgICAgICAgIC8qIGludGVycnVwdCBvbiBjb21wbGV0aW9uICovCisjZGVmaW5lIFRfTCAgICAgICAgICAgMHgwODAwMDAwMCAgICAgICAgIC8qIGxhc3QgKi8KKyNkZWZpbmUgVF9UQyAgICAgICAgICAweDA0MDAwMDAwICAgICAgICAgLyogdHJhbnNtaXQgQ1JDICovCisjZGVmaW5lIFRfQ05GICAgICAgICAgMHgwMjAwMDAwMCAgICAgICAgIC8qIHdhaXQgZm9yICB0cmFuc21pdCBjb25maXJtICovCisjZGVmaW5lIFRfTFNQICAgICAgICAgMHgwMTAwMDAwMCAgICAgICAgIC8qIExvdy1zcGVlZCB0cmFuc2FjdGlvbiAqLworI2RlZmluZSBUX1BJRCAgICAgICAgIDB4MDBjMDAwMDAgICAgICAgICAvKiBwYWNrZXQgaWQgKi8KKyNkZWZpbmUgVF9OQUsgICAgICAgICAweDAwMTAwMDAwICAgICAgICAgLyogTm8gYWNrLiAqLworI2RlZmluZSBUX1NUQUwgICAgICAgIDB4MDAwODAwMDAgICAgICAgICAvKiBTdGFsbCByZWNpZXZlZCAqLworI2RlZmluZSBUX1RPICAgICAgICAgIDB4MDAwNDAwMDAgICAgICAgICAvKiB0aW1lIG91dCAqLworI2RlZmluZSBUX1VOICAgICAgICAgIDB4MDAwMjAwMDAgICAgICAgICAvKiB1bmRlcnJ1biAqLworCisjZGVmaW5lIERFVklDRV9UX0VSUk9SICAgIChUX1VOIHwgVF9UTykKKyNkZWZpbmUgSE9TVF9UX0VSUk9SICAgICAgKFRfVU4gfCBUX1RPIHwgVF9OQUsgfCBUX1NUQUwpCisjZGVmaW5lIERFVklDRV9UX0JEX01BU0sgIERFVklDRV9UX0VSUk9SCisjZGVmaW5lIEhPU1RfVF9CRF9NQVNLICAgIEhPU1RfVF9FUlJPUgorCisjZGVmaW5lIFRfUElEX1NISUZUICAgNgorI2RlZmluZSBUX1BJRF9EQVRBMCAgIDB4MDA4MDAwMDAgICAgICAgICAvKiBEYXRhIDAgdG9nZ2xlICovCisjZGVmaW5lIFRfUElEX0RBVEExICAgMHgwMGMwMDAwMCAgICAgICAgIC8qIERhdGEgMSB0b2dnbGUgKi8KKworLyoKKyAqIHJlY2VpdmUgQkQncyBzdGF0dXMKKyAqLworI2RlZmluZSBSX0UgICAgICAgICAgIDB4ODAwMDAwMDAgICAgICAgICAvKiBidWZmZXIgZW1wdHkgKi8KKyNkZWZpbmUgUl9XICAgICAgICAgICAweDIwMDAwMDAwICAgICAgICAgLyogd3JhcCBiaXQgKi8KKyNkZWZpbmUgUl9JICAgICAgICAgICAweDEwMDAwMDAwICAgICAgICAgLyogaW50ZXJydXB0IG9uIHJlY2VwdGlvbiAqLworI2RlZmluZSBSX0wgICAgICAgICAgIDB4MDgwMDAwMDAgICAgICAgICAvKiBsYXN0ICovCisjZGVmaW5lIFJfRiAgICAgICAgICAgMHgwNDAwMDAwMCAgICAgICAgIC8qIGZpcnN0ICovCisjZGVmaW5lIFJfUElEICAgICAgICAgMHgwMGMwMDAwMCAgICAgICAgIC8qIHBhY2tldCBpZCAqLworI2RlZmluZSBSX05PICAgICAgICAgIDB4MDAxMDAwMDAgICAgICAgICAvKiBSeCBOb24gT2N0ZXQgQWxpZ25lZCBQYWNrZXQgKi8KKyNkZWZpbmUgUl9BQiAgICAgICAgICAweDAwMDgwMDAwICAgICAgICAgLyogRnJhbWUgQWJvcnRlZCAqLworI2RlZmluZSBSX0NSICAgICAgICAgIDB4MDAwNDAwMDAgICAgICAgICAvKiBDUkMgRXJyb3IgKi8KKyNkZWZpbmUgUl9PViAgICAgICAgICAweDAwMDIwMDAwICAgICAgICAgLyogT3ZlcnJ1biAqLworCisjZGVmaW5lIFJfRVJST1IgICAgICAgKFJfTk8gfCBSX0FCIHwgUl9DUiB8IFJfT1YpCisjZGVmaW5lIFJfQkRfTUFTSyAgICAgUl9FUlJPUgorCisjZGVmaW5lIFJfUElEX0RBVEEwICAgMHgwMDAwMDAwMAorI2RlZmluZSBSX1BJRF9EQVRBMSAgIDB4MDA0MDAwMDAKKyNkZWZpbmUgUl9QSURfU0VUVVAgICAweDAwODAwMDAwCisKKyNkZWZpbmUgQ1BNX1VTQl9TVE9QX1RYIDB4MmU2MDAwMDAKKyNkZWZpbmUgQ1BNX1VTQl9SRVNUQVJUX1RYIDB4MmU2MDAwMDAKKyNkZWZpbmUgQ1BNX1VTQl9TVE9QX1RYX09QQ09ERSAweDBhCisjZGVmaW5lIENQTV9VU0JfUkVTVEFSVF9UWF9PUENPREUgMHgwYgorI2RlZmluZSBDUE1fVVNCX0VQX1NISUZUIDUKKworI2lmbmRlZiBDT05GSUdfQ1BNCitpbmxpbmUgaW50IGNwbV9jb21tYW5kKHUzMiBjb21tYW5kLCB1OCBvcGNvZGUpCit7CisJcmV0dXJuIC1FT1BOT1RTVVBQOworfQorI2VuZGlmCisKKyNpZm5kZWYgQ09ORklHX1FVSUNDX0VOR0lORQoraW5saW5lIGludCBxZV9pc3N1ZV9jbWQodTMyIGNtZCwgdTMyIGRldmljZSwgdTggbWNuX3Byb3RvY29sLAorCXUzMiBjbWRfaW5wdXQpCit7CisJcmV0dXJuIC1FT1BOT1RTVVBQOworfQorI2VuZGlmCisKKyNlbmRpZiAgLyogX19GU0xfUUVfVURDX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9mc2xfdXNiMl91ZGMuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9mc2xfdXNiMl91ZGMuYwppbmRleCA0NWFkNTU2Li4wOTFiYjU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvZnNsX3VzYjJfdWRjLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2ZzbF91c2IyX3VkYy5jCkBAIC0yMywxMSArMjMsOCBAQAogI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KLSNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC90aW1lci5oPgogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CkBAIC00NCwxMSArNDEsOSBAQAogCiAjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgotI2luY2x1ZGUgPGFzbS9pcnEuaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAjaW5jbHVkZSA8YXNtL3VuYWxpZ25lZC5oPgogI2luY2x1ZGUgPGFzbS9kbWEuaD4KLSNpbmNsdWRlIDxhc20vY2FjaGVmbHVzaC5oPgogCiAjaW5jbHVkZSAiZnNsX3VzYjJfdWRjLmgiCiAKQEAgLTYxLDggKzU2LDggQEAKIHN0YXRpYyBjb25zdCBjaGFyIGRyaXZlcl9uYW1lW10gPSAiZnNsLXVzYjItdWRjIjsKIHN0YXRpYyBjb25zdCBjaGFyIGRyaXZlcl9kZXNjW10gPSBEUklWRVJfREVTQzsKIAotdm9sYXRpbGUgc3RhdGljIHN0cnVjdCB1c2JfZHJfZGV2aWNlICpkcl9yZWdzID0gTlVMTDsKLXZvbGF0aWxlIHN0YXRpYyBzdHJ1Y3QgdXNiX3N5c19pbnRlcmZhY2UgKnVzYl9zeXNfcmVncyA9IE5VTEw7CitzdGF0aWMgc3RydWN0IHVzYl9kcl9kZXZpY2UgKmRyX3JlZ3M7CitzdGF0aWMgc3RydWN0IHVzYl9zeXNfaW50ZXJmYWNlICp1c2Jfc3lzX3JlZ3M7CiAKIC8qIGl0IGlzIGluaXRpYWxpemVkIGluIHByb2JlKCkgICovCiBzdGF0aWMgc3RydWN0IGZzbF91ZGMgKnVkY19jb250cm9sbGVyID0gTlVMTDsKQEAgLTc2LDE2ICs3MSwxNCBAQAogCS53TWF4UGFja2V0U2l6ZSA9CVVTQl9NQVhfQ1RSTF9QQVlMT0FELAogfTsKIAotc3RhdGljIGludCBmc2xfdWRjX3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwgcG1fbWVzc2FnZV90IHN0YXRlKTsKLXN0YXRpYyBpbnQgZnNsX3VkY19yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldik7CiBzdGF0aWMgdm9pZCBmc2xfZXBfZmlmb19mbHVzaChzdHJ1Y3QgdXNiX2VwICpfZXApOwogCiAjaWZkZWYgQ09ORklHX1BQQzMyCiAjZGVmaW5lIGZzbF9yZWFkbChhZGRyKQkJaW5fbGUzMihhZGRyKQotI2RlZmluZSBmc2xfd3JpdGVsKGFkZHIsIHZhbDMyKSBvdXRfbGUzMih2YWwzMiwgYWRkcikKKyNkZWZpbmUgZnNsX3dyaXRlbCh2YWwzMiwgYWRkcikgb3V0X2xlMzIoYWRkciwgdmFsMzIpCiAjZWxzZQogI2RlZmluZSBmc2xfcmVhZGwoYWRkcikJCXJlYWRsKGFkZHIpCi0jZGVmaW5lIGZzbF93cml0ZWwoYWRkciwgdmFsMzIpIHdyaXRlbChhZGRyLCB2YWwzMikKKyNkZWZpbmUgZnNsX3dyaXRlbCh2YWwzMiwgYWRkcikgd3JpdGVsKHZhbDMyLCBhZGRyKQogI2VuZGlmCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtMTg1LDEwICsxNzgsNiBAQAogCXVuc2lnbmVkIGxvbmcgdGltZW91dDsKICNkZWZpbmUgRlNMX1VEQ19SRVNFVF9USU1FT1VUIDEwMDAKIAotCS8qIGJlZm9yZSBoZXJlLCBtYWtlIHN1cmUgZHJfcmVncyBoYXMgYmVlbiBpbml0aWFsaXplZCAqLwotCWlmICghdWRjKQotCQlyZXR1cm4gLUVJTlZBTDsKLQogCS8qIFN0b3AgYW5kIHJlc2V0IHRoZSB1c2IgY29udHJvbGxlciAqLwogCXRtcCA9IGZzbF9yZWFkbCgmZHJfcmVncy0+dXNiY21kKTsKIAl0bXAgJj0gflVTQl9DTURfUlVOX1NUT1A7CkBAIC0yMDIsNyArMTkxLDcgQEAKIAl0aW1lb3V0ID0gamlmZmllcyArIEZTTF9VRENfUkVTRVRfVElNRU9VVDsKIAl3aGlsZSAoZnNsX3JlYWRsKCZkcl9yZWdzLT51c2JjbWQpICYgVVNCX0NNRF9DVFJMX1JFU0VUKSB7CiAJCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIHRpbWVvdXQpKSB7Ci0JCQlFUlIoInVkYyByZXNldCB0aW1lb3V0ISBcbiIpOworCQkJRVJSKCJ1ZGMgcmVzZXQgdGltZW91dCFcbiIpOwogCQkJcmV0dXJuIC1FVElNRURPVVQ7CiAJCX0KIAkJY3B1X3JlbGF4KCk7CkBAIC0zMTUsNyArMzA0LDggQEAKIAlyZXR1cm47CiB9CiAKLXZvaWQgZHJfZXBfc2V0dXAodW5zaWduZWQgY2hhciBlcF9udW0sIHVuc2lnbmVkIGNoYXIgZGlyLCB1bnNpZ25lZCBjaGFyIGVwX3R5cGUpCitzdGF0aWMgdm9pZCBkcl9lcF9zZXR1cCh1bnNpZ25lZCBjaGFyIGVwX251bSwgdW5zaWduZWQgY2hhciBkaXIsCisJCQl1bnNpZ25lZCBjaGFyIGVwX3R5cGUpCiB7CiAJdW5zaWduZWQgaW50IHRtcF9lcGN0cmwgPSAwOwogCkBAIC01NjMsNyArNTUzLDcgQEAKIAkvKiBudWtlIGFsbCBwZW5kaW5nIHJlcXVlc3RzIChkb2VzIGZsdXNoKSAqLwogCW51a2UoZXAsIC1FU0hVVERPV04pOwogCi0JZXAtPmRlc2MgPSAwOworCWVwLT5kZXNjID0gTlVMTDsKIAllcC0+c3RvcHBlZCA9IDE7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdWRjLT5sb2NrLCBmbGFncyk7CiAKQEAgLTYwMiw3ICs1OTIsNyBAQAogfQogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotc3RhdGljIGludCBmc2xfcXVldWVfdGQoc3RydWN0IGZzbF9lcCAqZXAsIHN0cnVjdCBmc2xfcmVxICpyZXEpCitzdGF0aWMgdm9pZCBmc2xfcXVldWVfdGQoc3RydWN0IGZzbF9lcCAqZXAsIHN0cnVjdCBmc2xfcmVxICpyZXEpCiB7CiAJaW50IGkgPSBlcF9pbmRleChlcCkgKiAyICsgZXBfaXNfaW4oZXApOwogCXUzMiB0ZW1wLCBiaXRtYXNrLCB0bXBfc3RhdDsKQEAgLTY1MywxMyArNjQzLDE2IEBACiAJCQl8IEVQX1FVRVVFX0hFQURfU1RBVFVTX0hBTFQpKTsKIAlkUUgtPnNpemVfaW9jX2ludF9zdHMgJj0gdGVtcDsKIAorCS8qIEVuc3VyZSB0aGF0IHVwZGF0ZXMgdG8gdGhlIFFIIHdpbGwgb2NjdXJlIGJlZm9yZSBwcmltaW5nLiAqLworCXdtYigpOworCiAJLyogUHJpbWUgZW5kcG9pbnQgYnkgd3JpdGluZyAxIHRvIEVORFBUUFJJTUUgKi8KIAl0ZW1wID0gZXBfaXNfaW4oZXApCiAJCT8gKDEgPDwgKGVwX2luZGV4KGVwKSArIDE2KSkKIAkJOiAoMSA8PCAoZXBfaW5kZXgoZXApKSk7CiAJZnNsX3dyaXRlbCh0ZW1wLCAmZHJfcmVncy0+ZW5kcG9pbnRwcmltZSk7CiBvdXQ6Ci0JcmV0dXJuIDA7CisJcmV0dXJuOwogfQogCiAvKiBGaWxsIGluIHRoZSBkVEQgc3RydWN0dXJlCkBAIC03MTAsNyArNzAzLDcgQEAKIAkJKmlzX2xhc3QgPSAwOwogCiAJaWYgKCgqaXNfbGFzdCkgPT0gMCkKLQkJVkRCRygibXVsdGktZHRkIHJlcXVlc3QhXG4iKTsKKwkJVkRCRygibXVsdGktZHRkIHJlcXVlc3QhIik7CiAJLyogRmlsbCBpbiB0aGUgdHJhbnNmZXIgc2l6ZTsgc2V0IGFjdGl2ZSBiaXQgKi8KIAlzd2FwX3RlbXAgPSAoKCpsZW5ndGggPDwgRFREX0xFTkdUSF9CSVRfUE9TKSB8IERURF9TVEFUVVNfQUNUSVZFKTsKIApAQCAtNzczLDExICs3NjYsMTEgQEAKIAkvKiBjYXRjaCB2YXJpb3VzIGJvZ3VzIHBhcmFtZXRlcnMgKi8KIAlpZiAoIV9yZXEgfHwgIXJlcS0+cmVxLmNvbXBsZXRlIHx8ICFyZXEtPnJlcS5idWYKIAkJCXx8ICFsaXN0X2VtcHR5KCZyZXEtPnF1ZXVlKSkgewotCQlWREJHKCIlcywgYmFkIHBhcmFtc1xuIiwgX19mdW5jX18pOworCQlWREJHKCIlcywgYmFkIHBhcmFtcyIsIF9fZnVuY19fKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCWlmICh1bmxpa2VseSghX2VwIHx8ICFlcC0+ZGVzYykpIHsKLQkJVkRCRygiJXMsIGJhZCBlcFxuIiwgX19mdW5jX18pOworCQlWREJHKCIlcywgYmFkIGVwIiwgX19mdW5jX18pOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAJaWYgKGVwLT5kZXNjLT5ibUF0dHJpYnV0ZXMgPT0gVVNCX0VORFBPSU5UX1hGRVJfSVNPQykgewpAQCAtMTA2OSw3ICsxMDYyLDcgQEAKIAogCXVkYyA9IGNvbnRhaW5lcl9vZihnYWRnZXQsIHN0cnVjdCBmc2xfdWRjLCBnYWRnZXQpOwogCXNwaW5fbG9ja19pcnFzYXZlKCZ1ZGMtPmxvY2ssIGZsYWdzKTsKLQlWREJHKCJWQlVTICVzXG4iLCBpc19hY3RpdmUgPyAib24iIDogIm9mZiIpOworCVZEQkcoIlZCVVMgJXMiLCBpc19hY3RpdmUgPyAib24iIDogIm9mZiIpOwogCXVkYy0+dmJ1c19hY3RpdmUgPSAoaXNfYWN0aXZlICE9IDApOwogCWlmIChjYW5fcHVsbHVwKHVkYykpCiAJCWZzbF93cml0ZWwoKGZzbF9yZWFkbCgmZHJfcmVncy0+dXNiY21kKSB8IFVTQl9DTURfUlVOX1NUT1ApLApAQCAtMTE0Niw3ICsxMTM5LDYgQEAKIHsKIAlzdHJ1Y3QgZnNsX3JlcSAqcmVxID0gdWRjLT5zdGF0dXNfcmVxOwogCXN0cnVjdCBmc2xfZXAgKmVwOwotCWludCBzdGF0dXMgPSAwOwogCiAJaWYgKGRpcmVjdGlvbiA9PSBFUF9ESVJfSU4pCiAJCXVkYy0+ZXAwX2RpciA9IFVTQl9ESVJfSU47CkBAIC0xMTY0LDI3ICsxMTU2LDIxIEBACiAJcmVxLT5kdGRfY291bnQgPSAwOwogCiAJaWYgKGZzbF9yZXFfdG9fZHRkKHJlcSkgPT0gMCkKLQkJc3RhdHVzID0gZnNsX3F1ZXVlX3RkKGVwLCByZXEpOworCQlmc2xfcXVldWVfdGQoZXAsIHJlcSk7CiAJZWxzZQogCQlyZXR1cm4gLUVOT01FTTsKIAotCWlmIChzdGF0dXMpCi0JCUVSUigiQ2FuJ3QgcXVldWUgZXAwIHN0YXR1cyByZXF1ZXN0IFxuIik7CiAJbGlzdF9hZGRfdGFpbCgmcmVxLT5xdWV1ZSwgJmVwLT5xdWV1ZSk7CiAKLQlyZXR1cm4gc3RhdHVzOworCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW5saW5lIGludCB1ZGNfcmVzZXRfZXBfcXVldWUoc3RydWN0IGZzbF91ZGMgKnVkYywgdTggcGlwZSkKK3N0YXRpYyB2b2lkIHVkY19yZXNldF9lcF9xdWV1ZShzdHJ1Y3QgZnNsX3VkYyAqdWRjLCB1OCBwaXBlKQogewogCXN0cnVjdCBmc2xfZXAgKmVwID0gZ2V0X2VwX2J5X3BpcGUodWRjLCBwaXBlKTsKIAotCWlmICghZXAtPm5hbWUpCi0JCXJldHVybiAwOwotCi0JbnVrZShlcCwgLUVTSFVURE9XTik7Ci0KLQlyZXR1cm4gMDsKKwlpZiAoZXAtPm5hbWUpCisJCW51a2UoZXAsIC1FU0hVVERPV04pOwogfQogCiAvKgpAQCAtMTIwOCwxMCArMTE5NCw4IEBACiAJCXUxNiBpbmRleCwgdTE2IGxlbmd0aCkKIHsKIAl1MTYgdG1wID0gMDsJCS8qIFN0YXR1cywgY3B1IGVuZGlhbiAqLwotCiAJc3RydWN0IGZzbF9yZXEgKnJlcTsKIAlzdHJ1Y3QgZnNsX2VwICplcDsKLQlpbnQgc3RhdHVzID0gMDsKIAogCWVwID0gJnVkYy0+ZXBzWzBdOwogCkBAIC0xMjUwLDE0ICsxMjM0LDEwIEBACiAKIAkvKiBwcmltZSB0aGUgZGF0YSBwaGFzZSAqLwogCWlmICgoZnNsX3JlcV90b19kdGQocmVxKSA9PSAwKSkKLQkJc3RhdHVzID0gZnNsX3F1ZXVlX3RkKGVwLCByZXEpOworCQlmc2xfcXVldWVfdGQoZXAsIHJlcSk7CiAJZWxzZQkJCS8qIG5vIG1lbSAqLwogCQlnb3RvIHN0YWxsOwogCi0JaWYgKHN0YXR1cykgewotCQlFUlIoIkNhbid0IHJlc3BvbmQgdG8gZ2V0c3RhdHVzIHJlcXVlc3QgXG4iKTsKLQkJZ290byBzdGFsbDsKLQl9CiAJbGlzdF9hZGRfdGFpbCgmcmVxLT5xdWV1ZSwgJmVwLT5xdWV1ZSk7CiAJdWRjLT5lcDBfc3RhdGUgPSBEQVRBX1NUQVRFX1hNSVQ7CiAJcmV0dXJuOwpAQCAtMTM5Nyw3ICsxMzc3LDcgQEAKIAkJdWRjLT5lcDBfc3RhdGUgPSBXQUlUX0ZPUl9TRVRVUDsKIAkJYnJlYWs7CiAJY2FzZSBXQUlUX0ZPUl9TRVRVUDoKLQkJRVJSKCJVbmV4cGVjdCBlcDAgcGFja2V0cyBcbiIpOworCQlFUlIoIlVuZXhwZWN0IGVwMCBwYWNrZXRzXG4iKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJZXAwc3RhbGwodWRjKTsKQEAgLTE0NzYsNyArMTQ1Niw3IEBACiAJCQkJc3RhdHVzID0gLUVJTFNFUTsKIAkJCQlicmVhazsKIAkJCX0gZWxzZQotCQkJCUVSUigiVW5rbm93biBlcnJvciBoYXMgb2NjdXJlZCAoMHgleCkhXHJcbiIsCisJCQkJRVJSKCJVbmtub3duIGVycm9yIGhhcyBvY2N1cmVkICgweCV4KSFcbiIsCiAJCQkJCWVycm9ycyk7CiAKIAkJfSBlbHNlIGlmIChsZTMyX3RvX2NwdShjdXJyX3RkLT5zaXplX2lvY19zdHMpCkBAIC0xNDk1LDcgKzE0NzUsNyBAQAogCQkJfQogCQl9IGVsc2UgewogCQkJdGRfY29tcGxldGUrKzsKLQkJCVZEQkcoImRURCB0cmFuc21pdHRlZCBzdWNjZXNzZnVsICIpOworCQkJVkRCRygiZFREIHRyYW5zbWl0dGVkIHN1Y2Nlc3NmdWwiKTsKIAkJfQogCiAJCWlmIChqICE9IGN1cnJfcmVxLT5kdGRfY291bnQgLSAxKQpAQCAtMTU2OCw5ICsxNTQ4LDYgQEAKIHsKIAl1MzIgc3BlZWQ7CiAKLQlpZiAodWRjLT5idXNfcmVzZXQpCi0JCXVkYy0+YnVzX3Jlc2V0ID0gMDsKLQogCS8qIEJ1cyByZXNldHRpbmcgaXMgZmluaXNoZWQgKi8KIAlpZiAoIShmc2xfcmVhZGwoJmRyX3JlZ3MtPnBvcnRzYzEpICYgUE9SVFNDWF9QT1JUX1JFU0VUKSkgewogCQkvKiBHZXQgdGhlIHNwZWVkICovCkBAIC0xNjc4LDggKzE2NTUsNiBAQAogCiAJaWYgKGZzbF9yZWFkbCgmZHJfcmVncy0+cG9ydHNjMSkgJiBQT1JUU0NYX1BPUlRfUkVTRVQpIHsKIAkJVkRCRygiQnVzIHJlc2V0Iik7Ci0JCS8qIEJ1cyBpcyByZXNldGluZyAqLwotCQl1ZGMtPmJ1c19yZXNldCA9IDE7CiAJCS8qIFJlc2V0IGFsbCB0aGUgcXVldWVzLCBpbmNsdWRlIFhELCBkVEQsIEVQIHF1ZXVlCiAJCSAqIGhlYWQgYW5kIFRSIFF1ZXVlICovCiAJCXJlc2V0X3F1ZXVlcyh1ZGMpOwpAQCAtMTc2OCw3ICsxNzQzLDcgQEAKIAl9CiAKIAlpZiAoaXJxX3NyYyAmIChVU0JfU1RTX0VSUiB8IFVTQl9TVFNfU1lTX0VSUikpIHsKLQkJVkRCRygiRXJyb3IgSVJRICV4ICIsIGlycV9zcmMpOworCQlWREJHKCJFcnJvciBJUlEgJXgiLCBpcnFfc3JjKTsKIAl9CiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ1ZGMtPmxvY2ssIGZsYWdzKTsKQEAgLTE3OTksNyArMTc3NCw3IEBACiAJLyogbG9jayBpcyBuZWVkZWQgYnV0IHdoZXRoZXIgc2hvdWxkIHVzZSB0aGlzIGxvY2sgb3IgYW5vdGhlciAqLwogCXNwaW5fbG9ja19pcnFzYXZlKCZ1ZGNfY29udHJvbGxlci0+bG9jaywgZmxhZ3MpOwogCi0JZHJpdmVyLT5kcml2ZXIuYnVzID0gMDsKKwlkcml2ZXItPmRyaXZlci5idXMgPSBOVUxMOwogCS8qIGhvb2sgdXAgdGhlIGRyaXZlciAqLwogCXVkY19jb250cm9sbGVyLT5kcml2ZXIgPSBkcml2ZXI7CiAJdWRjX2NvbnRyb2xsZXItPmdhZGdldC5kZXYuZHJpdmVyID0gJmRyaXZlci0+ZHJpdmVyOwpAQCAtMTgwOSw4ICsxNzg0LDggQEAKIAlyZXR2YWwgPSBkcml2ZXItPmJpbmQoJnVkY19jb250cm9sbGVyLT5nYWRnZXQpOwogCWlmIChyZXR2YWwpIHsKIAkJVkRCRygiYmluZCB0byAlcyAtLT4gJWQiLCBkcml2ZXItPmRyaXZlci5uYW1lLCByZXR2YWwpOwotCQl1ZGNfY29udHJvbGxlci0+Z2FkZ2V0LmRldi5kcml2ZXIgPSAwOwotCQl1ZGNfY29udHJvbGxlci0+ZHJpdmVyID0gMDsKKwkJdWRjX2NvbnRyb2xsZXItPmdhZGdldC5kZXYuZHJpdmVyID0gTlVMTDsKKwkJdWRjX2NvbnRyb2xsZXItPmRyaXZlciA9IE5VTEw7CiAJCWdvdG8gb3V0OwogCX0KIApAQCAtMTgxOSwxMiArMTc5NCwxMiBAQAogCXVkY19jb250cm9sbGVyLT51c2Jfc3RhdGUgPSBVU0JfU1RBVEVfQVRUQUNIRUQ7CiAJdWRjX2NvbnRyb2xsZXItPmVwMF9zdGF0ZSA9IFdBSVRfRk9SX1NFVFVQOwogCXVkY19jb250cm9sbGVyLT5lcDBfZGlyID0gMDsKLQlwcmludGsoS0VSTl9JTkZPICIlczogYmluZCB0byBkcml2ZXIgJXMgXG4iLAorCXByaW50ayhLRVJOX0lORk8gIiVzOiBiaW5kIHRvIGRyaXZlciAlc1xuIiwKIAkJCXVkY19jb250cm9sbGVyLT5nYWRnZXQubmFtZSwgZHJpdmVyLT5kcml2ZXIubmFtZSk7CiAKIG91dDoKIAlpZiAocmV0dmFsKQotCQlwcmludGsoInJldHZhbCAlZCBcbiIsIHJldHZhbCk7CisJCXByaW50aygiZ2FkZ2V0IGRyaXZlciByZWdpc3RlciBmYWlsZWQgJWRcbiIsIHJldHZhbCk7CiAJcmV0dXJuIHJldHZhbDsKIH0KIEVYUE9SVF9TWU1CT0wodXNiX2dhZGdldF9yZWdpc3Rlcl9kcml2ZXIpOwpAQCAtMTg0Miw3ICsxODE3LDcgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlpZiAodWRjX2NvbnRyb2xsZXItPnRyYW5zY2VpdmVyKQotCQkodm9pZClvdGdfc2V0X3BlcmlwaGVyYWwodWRjX2NvbnRyb2xsZXItPnRyYW5zY2VpdmVyLCAwKTsKKwkJb3RnX3NldF9wZXJpcGhlcmFsKHVkY19jb250cm9sbGVyLT50cmFuc2NlaXZlciwgTlVMTCk7CiAKIAkvKiBzdG9wIERSLCBkaXNhYmxlIGludHIgKi8KIAlkcl9jb250cm9sbGVyX3N0b3AodWRjX2NvbnRyb2xsZXIpOwpAQCAtMTg2MywxMCArMTgzOCwxMCBAQAogCiAJLyogdW5iaW5kIGdhZGdldCBhbmQgdW5ob29rIGRyaXZlci4gKi8KIAlkcml2ZXItPnVuYmluZCgmdWRjX2NvbnRyb2xsZXItPmdhZGdldCk7Ci0JdWRjX2NvbnRyb2xsZXItPmdhZGdldC5kZXYuZHJpdmVyID0gMDsKLQl1ZGNfY29udHJvbGxlci0+ZHJpdmVyID0gMDsKKwl1ZGNfY29udHJvbGxlci0+Z2FkZ2V0LmRldi5kcml2ZXIgPSBOVUxMOworCXVkY19jb250cm9sbGVyLT5kcml2ZXIgPSBOVUxMOwogCi0JcHJpbnRrKCJ1bnJlZ2lzdGVyZWQgZ2FkZ2V0IGRyaXZlciAnJXMnXHJcbiIsIGRyaXZlci0+ZHJpdmVyLm5hbWUpOworCXByaW50aygidW5yZWdpc3RlcmVkIGdhZGdldCBkcml2ZXIgJyVzJ1xuIiwgZHJpdmVyLT5kcml2ZXIubmFtZSk7CiAJcmV0dXJuIDA7CiB9CiBFWFBPUlRfU1lNQk9MKHVzYl9nYWRnZXRfdW5yZWdpc3Rlcl9kcml2ZXIpOwpAQCAtMTkyMiw3ICsxODk3LDcgQEAKIAl0bXBfcmVnID0gZnNsX3JlYWRsKCZkcl9yZWdzLT51c2JzdHMpOwogCXQgPSBzY25wcmludGYobmV4dCwgc2l6ZSwKIAkJCSJVU0IgU3RhdHVzIFJlZzpcbiIKLQkJCSJEciBTdXNwZW5kOiAlZCIgIlJlc2V0IFJlY2VpdmVkOiAlZCIgIlN5c3RlbSBFcnJvcjogJXMiCisJCQkiRHIgU3VzcGVuZDogJWQgUmVzZXQgUmVjZWl2ZWQ6ICVkIFN5c3RlbSBFcnJvcjogJXMgIgogCQkJIlVTQiBFcnJvciBJbnRlcnJ1cHQ6ICVzXG5cbiIsCiAJCQkodG1wX3JlZyAmIFVTQl9TVFNfU1VTUEVORCkgPyAxIDogMCwKIAkJCSh0bXBfcmVnICYgVVNCX1NUU19SRVNFVCkgPyAxIDogMCwKQEAgLTE5MzQsMTEgKzE5MDksMTEgQEAKIAl0bXBfcmVnID0gZnNsX3JlYWRsKCZkcl9yZWdzLT51c2JpbnRyKTsKIAl0ID0gc2NucHJpbnRmKG5leHQsIHNpemUsCiAJCQkiVVNCIEludHJydXB0IEVuYWJsZSBSZWc6XG4iCi0JCQkiU2xlZXAgRW5hYmxlOiAlZCIgIlNPRiBSZWNlaXZlZCBFbmFibGU6ICVkIgorCQkJIlNsZWVwIEVuYWJsZTogJWQgU09GIFJlY2VpdmVkIEVuYWJsZTogJWQgIgogCQkJIlJlc2V0IEVuYWJsZTogJWRcbiIKLQkJCSJTeXN0ZW0gRXJyb3IgRW5hYmxlOiAlZCIKKwkJCSJTeXN0ZW0gRXJyb3IgRW5hYmxlOiAlZCAiCiAJCQkiUG9ydCBDaGFuZ2UgRGVjdGVjdGVkIEVuYWJsZTogJWRcbiIKLQkJCSJVU0IgRXJyb3IgSW50ciBFbmFibGU6ICVkIiAiVVNCIEludHIgRW5hYmxlOiAlZFxuXG4iLAorCQkJIlVTQiBFcnJvciBJbnRyIEVuYWJsZTogJWQgVVNCIEludHIgRW5hYmxlOiAlZFxuXG4iLAogCQkJKHRtcF9yZWcgJiBVU0JfSU5UUl9ERVZJQ0VfU1VTUEVORCkgPyAxIDogMCwKIAkJCSh0bXBfcmVnICYgVVNCX0lOVFJfU09GX0VOKSA/IDEgOiAwLAogCQkJKHRtcF9yZWcgJiBVU0JfSU5UUl9SRVNFVF9FTikgPyAxIDogMCwKQEAgLTE5NTEsMjEgKzE5MjYsMjEgQEAKIAogCXRtcF9yZWcgPSBmc2xfcmVhZGwoJmRyX3JlZ3MtPmZyaW5kZXgpOwogCXQgPSBzY25wcmludGYobmV4dCwgc2l6ZSwKLQkJCSJVU0IgRnJhbWUgSW5kZXggUmVnOiIgIkZyYW1lIE51bWJlciBpcyAweCV4XG5cbiIsCisJCQkiVVNCIEZyYW1lIEluZGV4IFJlZzogRnJhbWUgTnVtYmVyIGlzIDB4JXhcblxuIiwKIAkJCSh0bXBfcmVnICYgVVNCX0ZSSU5ERVhfTUFTS1MpKTsKIAlzaXplIC09IHQ7CiAJbmV4dCArPSB0OwogCiAJdG1wX3JlZyA9IGZzbF9yZWFkbCgmZHJfcmVncy0+ZGV2aWNlYWRkcik7CiAJdCA9IHNjbnByaW50ZihuZXh0LCBzaXplLAotCQkJIlVTQiBEZXZpY2UgQWRkcmVzcyBSZWc6IiAiRGV2aWNlIEFkZHIgaXMgMHgleFxuXG4iLAorCQkJIlVTQiBEZXZpY2UgQWRkcmVzcyBSZWc6IERldmljZSBBZGRyIGlzIDB4JXhcblxuIiwKIAkJCSh0bXBfcmVnICYgVVNCX0RFVklDRV9BRERSRVNTX01BU0spKTsKIAlzaXplIC09IHQ7CiAJbmV4dCArPSB0OwogCiAJdG1wX3JlZyA9IGZzbF9yZWFkbCgmZHJfcmVncy0+ZW5kcG9pbnRsaXN0YWRkcik7CiAJdCA9IHNjbnByaW50ZihuZXh0LCBzaXplLAotCQkJIlVTQiBFbmRwb2ludCBMaXN0IEFkZHJlc3MgUmVnOiIKKwkJCSJVU0IgRW5kcG9pbnQgTGlzdCBBZGRyZXNzIFJlZzogIgogCQkJIkRldmljZSBBZGRyIGlzIDB4JXhcblxuIiwKIAkJCSh0bXBfcmVnICYgVVNCX0VQX0xJU1RfQUREUkVTU19NQVNLKSk7CiAJc2l6ZSAtPSB0OwpAQCAtMTk3NCwxMSArMTk0OSwxMiBAQAogCXRtcF9yZWcgPSBmc2xfcmVhZGwoJmRyX3JlZ3MtPnBvcnRzYzEpOwogCXQgPSBzY25wcmludGYobmV4dCwgc2l6ZSwKIAkJIlVTQiBQb3J0IFN0YXR1cyZDb250cm9sIFJlZzpcbiIKLQkJIlBvcnQgVHJhbnNjZWl2ZXIgVHlwZSA6ICVzIiAiUG9ydCBTcGVlZDogJXMgXG4iCi0JCSJQSFkgTG93IFBvd2VyIFN1c3BlbmQ6ICVzIiAiUG9ydCBSZXNldDogJXMiCi0JCSJQb3J0IFN1c3BlbmQgTW9kZTogJXMgXG4iICJPdmVyLWN1cnJlbnQgQ2hhbmdlOiAlcyIKKwkJIlBvcnQgVHJhbnNjZWl2ZXIgVHlwZSA6ICVzIFBvcnQgU3BlZWQ6ICVzXG4iCisJCSJQSFkgTG93IFBvd2VyIFN1c3BlbmQ6ICVzIFBvcnQgUmVzZXQ6ICVzICIKKwkJIlBvcnQgU3VzcGVuZCBNb2RlOiAlc1xuIgorCQkiT3Zlci1jdXJyZW50IENoYW5nZTogJXMgIgogCQkiUG9ydCBFbmFibGUvRGlzYWJsZSBDaGFuZ2U6ICVzXG4iCi0JCSJQb3J0IEVuYWJsZWQvRGlzYWJsZWQ6ICVzIgorCQkiUG9ydCBFbmFibGVkL0Rpc2FibGVkOiAlcyAiCiAJCSJDdXJyZW50IENvbm5lY3QgU3RhdHVzOiAlc1xuXG4iLCAoIHsKIAkJCWNoYXIgKnM7CiAJCQlzd2l0Y2ggKHRtcF9yZWcgJiBQT1JUU0NYX1BUU19GU0xTKSB7CkBAIC0yMDIzLDcgKzE5OTksNyBAQAogCiAJdG1wX3JlZyA9IGZzbF9yZWFkbCgmZHJfcmVncy0+dXNibW9kZSk7CiAJdCA9IHNjbnByaW50ZihuZXh0LCBzaXplLAotCQkJIlVTQiBNb2RlIFJlZzoiICJDb250cm9sbGVyIE1vZGUgaXMgOiAlc1xuXG4iLCAoIHsKKwkJCSJVU0IgTW9kZSBSZWc6IENvbnRyb2xsZXIgTW9kZSBpczogJXNcblxuIiwgKCB7CiAJCQkJY2hhciAqczsKIAkJCQlzd2l0Y2ggKHRtcF9yZWcgJiBVU0JfTU9ERV9DVFJMX01PREVfSE9TVCkgewogCQkJCWNhc2UgVVNCX01PREVfQ1RSTF9NT0RFX0lETEU6CkBAIC0yMDQyLDcgKzIwMTgsNyBAQAogCiAJdG1wX3JlZyA9IGZzbF9yZWFkbCgmZHJfcmVncy0+ZW5kcHRzZXR1cHN0YXQpOwogCXQgPSBzY25wcmludGYobmV4dCwgc2l6ZSwKLQkJCSJFbmRwb2ludCBTZXR1cCBTdGF0dXMgUmVnOiIgIlNFVFVQIG9uIGVwIDB4JXhcblxuIiwKKwkJCSJFbmRwb2ludCBTZXR1cCBTdGF0dXMgUmVnOiBTRVRVUCBvbiBlcCAweCV4XG5cbiIsCiAJCQkodG1wX3JlZyAmIEVQX1NFVFVQX1NUQVRVU19NQVNLKSk7CiAJc2l6ZSAtPSB0OwogCW5leHQgKz0gdDsKQEAgLTIwNTUsMTIgKzIwMzEsMTIgQEAKIAkJbmV4dCArPSB0OwogCX0KIAl0bXBfcmVnID0gZnNsX3JlYWRsKCZkcl9yZWdzLT5lbmRwb2ludHByaW1lKTsKLQl0ID0gc2NucHJpbnRmKG5leHQsIHNpemUsICJFUCBQcmltZSBSZWcgPSBbMHgleF1cbiIsIHRtcF9yZWcpOworCXQgPSBzY25wcmludGYobmV4dCwgc2l6ZSwgIkVQIFByaW1lIFJlZyA9IFsweCV4XVxuXG4iLCB0bXBfcmVnKTsKIAlzaXplIC09IHQ7CiAJbmV4dCArPSB0OwogCiAJdG1wX3JlZyA9IHVzYl9zeXNfcmVncy0+c25vb3AxOwotCXQgPSBzY25wcmludGYobmV4dCwgc2l6ZSwgIlxuU25vb3AxIFJlZyA6ID0gWzB4JXhdXG5cbiIsIHRtcF9yZWcpOworCXQgPSBzY25wcmludGYobmV4dCwgc2l6ZSwgIlNub29wMSBSZWcgOiA9IFsweCV4XVxuXG4iLCB0bXBfcmVnKTsKIAlzaXplIC09IHQ7CiAJbmV4dCArPSB0OwogCkBAIC0yMDg0LDcgKzIwNjAsNyBAQAogCX0gZWxzZSB7CiAJCWxpc3RfZm9yX2VhY2hfZW50cnkocmVxLCAmZXAtPnF1ZXVlLCBxdWV1ZSkgewogCQkJdCA9IHNjbnByaW50ZihuZXh0LCBzaXplLAotCQkJCSJyZXEgJXAgYWN0dWFsIDB4JXggbGVuZ3RoIDB4JXggIGJ1ZiAlcFxuIiwKKwkJCQkicmVxICVwIGFjdHVhbCAweCV4IGxlbmd0aCAweCV4IGJ1ZiAlcFxuIiwKIAkJCQkmcmVxLT5yZXEsIHJlcS0+cmVxLmFjdHVhbCwKIAkJCQlyZXEtPnJlcS5sZW5ndGgsIHJlcS0+cmVxLmJ1Zik7CiAJCQlzaXplIC09IHQ7CkBAIC0yMTEwLDcgKzIwODYsNyBAQAogCQkJfSBlbHNlIHsKIAkJCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHJlcSwgJmVwLT5xdWV1ZSwgcXVldWUpIHsKIAkJCQkJdCA9IHNjbnByaW50ZihuZXh0LCBzaXplLAotCQkJCQkJInJlcSAlcCBhY3R1YWwgMHgleCBsZW5ndGgiCisJCQkJCQkicmVxICVwIGFjdHVhbCAweCV4IGxlbmd0aCAiCiAJCQkJCQkiMHgleCAgYnVmICVwXG4iLAogCQkJCQkJJnJlcS0+cmVxLCByZXEtPnJlcS5hY3R1YWwsCiAJCQkJCQlyZXEtPnJlcS5sZW5ndGgsIHJlcS0+cmVxLmJ1Zik7CkBAIC0yMjAyLDcgKzIxNzgsNiBAQAogCXVkYy0+dXNiX3N0YXRlID0gVVNCX1NUQVRFX1BPV0VSRUQ7CiAJdWRjLT5lcDBfZGlyID0gMDsKIAl1ZGMtPnJlbW90ZV93YWtldXAgPSAwOwkvKiBkZWZhdWx0IHRvIDAgb24gcmVzZXQgKi8KLQlzcGluX2xvY2tfaW5pdCgmdWRjLT5sb2NrKTsKIAogCXJldHVybiAwOwogfQpAQCAtMjI1NCw3ICsyMjI5LDcgQEAKIAl1MzIgZGNjcGFyYW1zOwogCiAJaWYgKHN0cmNtcChwZGV2LT5uYW1lLCBkcml2ZXJfbmFtZSkpIHsKLQkJVkRCRygiV3JvbmcgZGV2aWNlXG4iKTsKKwkJVkRCRygiV3JvbmcgZGV2aWNlIik7CiAJCXJldHVybiAtRU5PREVWOwogCX0KIApAQCAtMjI2NCwyMyArMjIzOSwyNiBAQAogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKKwlzcGluX2xvY2tfaW5pdCgmdWRjX2NvbnRyb2xsZXItPmxvY2spOworCXVkY19jb250cm9sbGVyLT5zdG9wcGVkID0gMTsKKwogCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CiAJaWYgKCFyZXMpIHsKLQkJa2ZyZWUodWRjX2NvbnRyb2xsZXIpOwotCQlyZXR1cm4gLUVOWElPOworCQlyZXQgPSAtRU5YSU87CisJCWdvdG8gZXJyX2tmcmVlOwogCX0KIAogCWlmICghcmVxdWVzdF9tZW1fcmVnaW9uKHJlcy0+c3RhcnQsIHJlcy0+ZW5kIC0gcmVzLT5zdGFydCArIDEsCiAJCQkJZHJpdmVyX25hbWUpKSB7Ci0JCUVSUigicmVxdWVzdCBtZW0gcmVnaW9uIGZvciAlcyBmYWlsZWQgXG4iLCBwZGV2LT5uYW1lKTsKLQkJa2ZyZWUodWRjX2NvbnRyb2xsZXIpOwotCQlyZXR1cm4gLUVCVVNZOworCQlFUlIoInJlcXVlc3QgbWVtIHJlZ2lvbiBmb3IgJXMgZmFpbGVkXG4iLCBwZGV2LT5uYW1lKTsKKwkJcmV0ID0gLUVCVVNZOworCQlnb3RvIGVycl9rZnJlZTsKIAl9CiAKIAlkcl9yZWdzID0gaW9yZW1hcChyZXMtPnN0YXJ0LCByZXMtPmVuZCAtIHJlcy0+c3RhcnQgKyAxKTsKIAlpZiAoIWRyX3JlZ3MpIHsKIAkJcmV0ID0gLUVOT01FTTsKLQkJZ290byBlcnIxOworCQlnb3RvIGVycl9yZWxlYXNlX21lbV9yZWdpb247CiAJfQogCiAJdXNiX3N5c19yZWdzID0gKHN0cnVjdCB1c2Jfc3lzX2ludGVyZmFjZSAqKQpAQCAtMjI5MSw3ICsyMjY5LDcgQEAKIAlpZiAoIShkY2NwYXJhbXMgJiBEQ0NQQVJBTVNfREMpKSB7CiAJCUVSUigiVGhpcyBTT0MgZG9lc24ndCBzdXBwb3J0IGRldmljZSByb2xlXG4iKTsKIAkJcmV0ID0gLUVOT0RFVjsKLQkJZ290byBlcnIyOworCQlnb3RvIGVycl9pb3VubWFwOwogCX0KIAkvKiBHZXQgbWF4IGRldmljZSBlbmRwb2ludHMgKi8KIAkvKiBERU4gaXMgYmlkaXJlY3Rpb25hbCBlcCBudW1iZXIsIG1heF9lcCBkb3VibGVzIHRoZSBudW1iZXIgKi8KQEAgLTIzMDAsMjIgKzIyNzgsMjIgQEAKIAl1ZGNfY29udHJvbGxlci0+aXJxID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKTsKIAlpZiAoIXVkY19jb250cm9sbGVyLT5pcnEpIHsKIAkJcmV0ID0gLUVOT0RFVjsKLQkJZ290byBlcnIyOworCQlnb3RvIGVycl9pb3VubWFwOwogCX0KIAogCXJldCA9IHJlcXVlc3RfaXJxKHVkY19jb250cm9sbGVyLT5pcnEsIGZzbF91ZGNfaXJxLCBJUlFGX1NIQVJFRCwKIAkJCWRyaXZlcl9uYW1lLCB1ZGNfY29udHJvbGxlcik7CiAJaWYgKHJldCAhPSAwKSB7Ci0JCUVSUigiY2Fubm90IHJlcXVlc3QgaXJxICVkIGVyciAlZCBcbiIsCisJCUVSUigiY2Fubm90IHJlcXVlc3QgaXJxICVkIGVyciAlZFxuIiwKIAkJCQl1ZGNfY29udHJvbGxlci0+aXJxLCByZXQpOwotCQlnb3RvIGVycjI7CisJCWdvdG8gZXJyX2lvdW5tYXA7CiAJfQogCiAJLyogSW5pdGlhbGl6ZSB0aGUgdWRjIHN0cnVjdHVyZSBpbmNsdWRpbmcgUUggbWVtYmVyIGFuZCBvdGhlciBtZW1iZXIgKi8KIAlpZiAoc3RydWN0X3VkY19zZXR1cCh1ZGNfY29udHJvbGxlciwgcGRldikpIHsKIAkJRVJSKCJDYW4ndCBpbml0aWFsaXplIHVkYyBkYXRhIHN0cnVjdHVyZVxuIik7CiAJCXJldCA9IC1FTk9NRU07Ci0JCWdvdG8gZXJyMzsKKwkJZ290byBlcnJfZnJlZV9pcnE7CiAJfQogCiAJLyogaW5pdGlhbGl6ZSB1c2IgaHcgcmVnIGV4Y2VwdCBmb3IgcmVncyBmb3IgRVAsCkBAIC0yMzM2LDcgKzIzMTQsNyBAQAogCXVkY19jb250cm9sbGVyLT5nYWRnZXQuZGV2LnBhcmVudCA9ICZwZGV2LT5kZXY7CiAJcmV0ID0gZGV2aWNlX3JlZ2lzdGVyKCZ1ZGNfY29udHJvbGxlci0+Z2FkZ2V0LmRldik7CiAJaWYgKHJldCA8IDApCi0JCWdvdG8gZXJyMzsKKwkJZ290byBlcnJfZnJlZV9pcnE7CiAKIAkvKiBzZXR1cCBRSCBhbmQgZXBjdHJsIGZvciBlcDAgKi8KIAllcDBfc2V0dXAodWRjX2NvbnRyb2xsZXIpOwpAQCAtMjM2NiwyMCArMjM0NCwyMiBAQAogCQkJRFREX0FMSUdOTUVOVCwgVURDX0RNQV9CT1VOREFSWSk7CiAJaWYgKHVkY19jb250cm9sbGVyLT50ZF9wb29sID09IE5VTEwpIHsKIAkJcmV0ID0gLUVOT01FTTsKLQkJZ290byBlcnI0OworCQlnb3RvIGVycl91bnJlZ2lzdGVyOwogCX0KIAljcmVhdGVfcHJvY19maWxlKCk7CiAJcmV0dXJuIDA7CiAKLWVycjQ6CitlcnJfdW5yZWdpc3RlcjoKIAlkZXZpY2VfdW5yZWdpc3RlcigmdWRjX2NvbnRyb2xsZXItPmdhZGdldC5kZXYpOwotZXJyMzoKK2Vycl9mcmVlX2lycToKIAlmcmVlX2lycSh1ZGNfY29udHJvbGxlci0+aXJxLCB1ZGNfY29udHJvbGxlcik7Ci1lcnIyOgorZXJyX2lvdW5tYXA6CiAJaW91bm1hcChkcl9yZWdzKTsKLWVycjE6CitlcnJfcmVsZWFzZV9tZW1fcmVnaW9uOgogCXJlbGVhc2VfbWVtX3JlZ2lvbihyZXMtPnN0YXJ0LCByZXMtPmVuZCAtIHJlcy0+c3RhcnQgKyAxKTsKK2Vycl9rZnJlZToKIAlrZnJlZSh1ZGNfY29udHJvbGxlcik7CisJdWRjX2NvbnRyb2xsZXIgPSBOVUxMOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTI0NjksNyArMjQ0OSw3IEBACiBzdGF0aWMgdm9pZCBfX2V4aXQgdWRjX2V4aXQodm9pZCkKIHsKIAlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmdWRjX2RyaXZlcik7Ci0JcHJpbnRrKCIlcyB1bnJlZ2lzdGVyZWQgXG4iLCBkcml2ZXJfZGVzYyk7CisJcHJpbnRrKCIlcyB1bnJlZ2lzdGVyZWRcbiIsIGRyaXZlcl9kZXNjKTsKIH0KIAogbW9kdWxlX2V4aXQodWRjX2V4aXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L2ZzbF91c2IyX3VkYy5oIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2ZzbF91c2IyX3VkYy5oCmluZGV4IDYxMzE3NTIuLmU2M2VmMTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9mc2xfdXNiMl91ZGMuaAorKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZnNsX3VzYjJfdWRjLmgKQEAgLTQyNCwxNiArNDI0LDYgQEAKIC8qIENvbnRyb2xsZXIgZG1hIGJvdW5kYXJ5ICovCiAjZGVmaW5lIFVEQ19ETUFfQk9VTkRBUlkJCQkweDEwMDAKIAotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotLyogIyMjIyMgZW51bSBkYXRhCi0qLwotdHlwZWRlZiBlbnVtIHsKLQllX1VMUEksCi0JZV9VVE1JXzhCSVQsCi0JZV9VVE1JXzE2QklULAotCWVfU0VSSUFMCi19IGVfUGh5SW50ZXJmYWNlOwotCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCiAvKiAjIyMgZHJpdmVyIHByaXZhdGUgZGF0YQpAQCAtNDY5LDkgKzQ1OSw5IEBACiAjZGVmaW5lIEVQX0RJUl9PVVQJMAogCiBzdHJ1Y3QgZnNsX3VkYyB7Ci0KIAlzdHJ1Y3QgdXNiX2dhZGdldCBnYWRnZXQ7CiAJc3RydWN0IHVzYl9nYWRnZXRfZHJpdmVyICpkcml2ZXI7CisJc3RydWN0IGNvbXBsZXRpb24gKmRvbmU7CS8qIHRvIG1ha2Ugc3VyZSByZWxlYXNlKCkgaXMgZG9uZSAqLwogCXN0cnVjdCBmc2xfZXAgKmVwczsKIAl1bnNpZ25lZCBpbnQgbWF4X2VwOwogCXVuc2lnbmVkIGludCBpcnE7CkBAIC00OTIsMjAgKzQ4MiwxMyBAQAogCXNpemVfdCBlcF9xaF9zaXplOwkJLyogc2l6ZSBhZnRlciBhbGlnbm1lbnQgYWRqdXN0bWVudCovCiAJZG1hX2FkZHJfdCBlcF9xaF9kbWE7CQkvKiBkbWEgYWRkcmVzcyBvZiBRSCAqLwogCi0JdTMyIG1heF9waXBlczsJCS8qIERldmljZSBtYXggcGlwZXMgKi8KLQl1MzIgbWF4X3VzZV9lbmRwdHM7CS8qIE1heCBlbmRwb2ludGVzIHRvIGJlIHVzZWQgKi8KLQl1MzIgYnVzX3Jlc2V0OwkJLyogRGV2aWNlIGlzIGJ1cyByZXNldGluZyAqLworCXUzMiBtYXhfcGlwZXM7ICAgICAgICAgIC8qIERldmljZSBtYXggcGlwZXMgKi8KIAl1MzIgcmVzdW1lX3N0YXRlOwkvKiBVU0Igc3RhdGUgdG8gcmVzdW1lICovCiAJdTMyIHVzYl9zdGF0ZTsJCS8qIFVTQiBjdXJyZW50IHN0YXRlICovCi0JdTMyIHVzYl9uZXh0X3N0YXRlOwkvKiBVU0IgbmV4dCBzdGF0ZSAqLwogCXUzMiBlcDBfc3RhdGU7CQkvKiBFbmRwb2ludCB6ZXJvIHN0YXRlICovCiAJdTMyIGVwMF9kaXI7CQkvKiBFbmRwb2ludCB6ZXJvIGRpcmVjdGlvbjogY2FuIGJlCiAJCQkJICAgVVNCX0RJUl9JTiBvciBVU0JfRElSX09VVCAqLwotCXUzMiB1c2Jfc29mX2NvdW50OwkvKiBTT0YgY291bnQgKi8KLQl1MzIgZXJyb3JzOwkJLyogVVNCIEVSUk9ScyBjb3VudCAqLwogCXU4IGRldmljZV9hZGRyZXNzOwkvKiBEZXZpY2UgVVNCIGFkZHJlc3MgKi8KLQotCXN0cnVjdCBjb21wbGV0aW9uICpkb25lOwkvKiB0byBtYWtlIHN1cmUgcmVsZWFzZSgpIGlzIGRvbmUgKi8KIH07CiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvZ2FkZ2V0X2NoaXBzLmggYi9kcml2ZXJzL3VzYi9nYWRnZXQvZ2FkZ2V0X2NoaXBzLmgKaW5kZXggMTdkOTkwNS4uNGUzMTA3ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2dhZGdldF9jaGlwcy5oCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9nYWRnZXRfY2hpcHMuaApAQCAtMTUxLDYgKzE1MSwxMyBAQAogI2RlZmluZQlnYWRnZXRfaXNfbTY2NTkyKGcpCTAKICNlbmRpZgogCisvKiBGcmVlc2NhbGUgQ1BNL1FFIFVEQyBTVVBQT1JUICovCisjaWZkZWYgQ09ORklHX1VTQl9HQURHRVRfRlNMX1FFCisjZGVmaW5lIGdhZGdldF9pc19mc2xfcWUoZykJIXN0cmNtcCgiZnNsX3FlX3VkYyIsIChnKS0+bmFtZSkKKyNlbHNlCisjZGVmaW5lIGdhZGdldF9pc19mc2xfcWUoZykJMAorI2VuZGlmCisKIAogLy8gQ09ORklHX1VTQl9HQURHRVRfU1gyCiAvLyBDT05GSUdfVVNCX0dBREdFVF9BVTFYMDAKQEAgLTIxNiw2ICsyMjMsOCBAQAogCQlyZXR1cm4gMHgyMDsKIAllbHNlIGlmIChnYWRnZXRfaXNfbTY2NTkyKGdhZGdldCkpCiAJCXJldHVybiAweDIxOworCWVsc2UgaWYgKGdhZGdldF9pc19mc2xfcWUoZ2FkZ2V0KSkKKwkJcmV0dXJuIDB4MjI7CiAJcmV0dXJuIC1FTk9FTlQ7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9nbWlkaS5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2dtaWRpLmMKaW5kZXggZWE4NjUxZS4uNjBkM2Y5ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2dtaWRpLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2dtaWRpLmMKQEAgLTM1LDYgKzM1LDIxIEBACiAKICNpbmNsdWRlICJnYWRnZXRfY2hpcHMuaCIKIAorCisvKgorICogS2J1aWxkIGlzIG5vdCB2ZXJ5IGNvb3BlcmF0aXZlIHdpdGggcmVzcGVjdCB0byBsaW5raW5nIHNlcGFyYXRlbHkKKyAqIGNvbXBpbGVkIGxpYnJhcnkgb2JqZWN0cyBpbnRvIG9uZSBtb2R1bGUuICBTbyBmb3Igbm93IHdlIHdvbid0IHVzZQorICogc2VwYXJhdGUgY29tcGlsYXRpb24gLi4uIGVuc3VyaW5nIGluaXQvZXhpdCBzZWN0aW9ucyB3b3JrIHRvIHNocmluaworICogdGhlIHJ1bnRpbWUgZm9vdHByaW50LCBhbmQgZ2l2aW5nIHVzIGF0IGxlYXN0IHNvbWUgcGFydHMgb2Ygd2hhdAorICogYSAiZ2NjIC0tY29tYmluZSAuLi4gcGFydDEuYyBwYXJ0Mi5jIHBhcnQzLmMgLi4uICIgYnVpbGQgd291bGQuCisgKi8KKyNpbmNsdWRlICJ1c2JzdHJpbmcuYyIKKyNpbmNsdWRlICJjb25maWcuYyIKKyNpbmNsdWRlICJlcGF1dG9jb25mLmMiCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKwogTU9EVUxFX0FVVEhPUigiQmVuIFdpbGxpYW1zb24iKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKIApAQCAtMjA3LDcgKzIyMiw3IEBACiAJICogcG93ZXIgcHJvcGVydGllcyBvZiB0aGUgZGV2aWNlLiBJcyBpdCBzZWxmcG93ZXJlZD8KIAkgKi8KIAkuYm1BdHRyaWJ1dGVzID0JCVVTQl9DT05GSUdfQVRUX09ORSwKLQkuYk1heFBvd2VyID0JCTEsCisJLmJNYXhQb3dlciA9CQlDT05GSUdfVVNCX0dBREdFVF9WQlVTX0RSQVcgLyAyLAogfTsKIAogLyogQi4zLjEgIFN0YW5kYXJkIEFDIEludGVyZmFjZSBEZXNjcmlwdG9yICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvbmV0MjI4MC5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L25ldDIyODAuYwppbmRleCA1Y2ZiNWViLi44YWU3MGRlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvbmV0MjI4MC5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9uZXQyMjgwLmMKQEAgLTE3OCw2ICsxNzgsNyBAQAogCiAJLyogZXBfcmVzZXQoKSBoYXMgYWxyZWFkeSBiZWVuIGNhbGxlZCAqLwogCWVwLT5zdG9wcGVkID0gMDsKKwllcC0+d2VkZ2VkID0gMDsKIAllcC0+b3V0X292ZXJmbG93ID0gMDsKIAogCS8qIHNldCBzcGVlZC1kZXBlbmRlbnQgbWF4IHBhY2tldDsgbWF5IGtpY2sgaW4gaGlnaCBiYW5kd2lkdGggKi8KQEAgLTEyMTgsNyArMTIxOSw3IEBACiBzdGF0aWMgaW50IG5ldDIyODBfZmlmb19zdGF0dXMgKHN0cnVjdCB1c2JfZXAgKl9lcCk7CiAKIHN0YXRpYyBpbnQKLW5ldDIyODBfc2V0X2hhbHQgKHN0cnVjdCB1c2JfZXAgKl9lcCwgaW50IHZhbHVlKQorbmV0MjI4MF9zZXRfaGFsdF9hbmRfd2VkZ2Uoc3RydWN0IHVzYl9lcCAqX2VwLCBpbnQgdmFsdWUsIGludCB3ZWRnZWQpCiB7CiAJc3RydWN0IG5ldDIyODBfZXAJKmVwOwogCXVuc2lnbmVkIGxvbmcJCWZsYWdzOwpAQCAtMTIzOSwxNiArMTI0MCwyMSBAQAogCWVsc2UgaWYgKGVwLT5pc19pbiAmJiB2YWx1ZSAmJiBuZXQyMjgwX2ZpZm9fc3RhdHVzIChfZXApICE9IDApCiAJCXJldHZhbCA9IC1FQUdBSU47CiAJZWxzZSB7Ci0JCVZERUJVRyAoZXAtPmRldiwgIiVzICVzIGhhbHRcbiIsIF9lcC0+bmFtZSwKLQkJCQl2YWx1ZSA/ICJzZXQiIDogImNsZWFyIik7CisJCVZERUJVRyAoZXAtPmRldiwgIiVzICVzICVzXG4iLCBfZXAtPm5hbWUsCisJCQkJdmFsdWUgPyAic2V0IiA6ICJjbGVhciIsCisJCQkJd2VkZ2VkID8gIndlZGdlIiA6ICJoYWx0Iik7CiAJCS8qIHNldC9jbGVhciwgdGhlbiBzeW5jaCBtZW1vcnkgdmlld3Mgd2l0aCB0aGUgZGV2aWNlICovCiAJCWlmICh2YWx1ZSkgewogCQkJaWYgKGVwLT5udW0gPT0gMCkKIAkJCQllcC0+ZGV2LT5wcm90b2NvbF9zdGFsbCA9IDE7CiAJCQllbHNlCiAJCQkJc2V0X2hhbHQgKGVwKTsKLQkJfSBlbHNlCisJCQlpZiAod2VkZ2VkKQorCQkJCWVwLT53ZWRnZWQgPSAxOworCQl9IGVsc2UgewogCQkJY2xlYXJfaGFsdCAoZXApOworCQkJZXAtPndlZGdlZCA9IDA7CisJCX0KIAkJKHZvaWQpIHJlYWRsICgmZXAtPnJlZ3MtPmVwX3JzcCk7CiAJfQogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUgKCZlcC0+ZGV2LT5sb2NrLCBmbGFncyk7CkBAIC0xMjU3LDYgKzEyNjMsMjAgQEAKIH0KIAogc3RhdGljIGludAorbmV0MjI4MF9zZXRfaGFsdChzdHJ1Y3QgdXNiX2VwICpfZXAsIGludCB2YWx1ZSkKK3sKKwlyZXR1cm4gbmV0MjI4MF9zZXRfaGFsdF9hbmRfd2VkZ2UoX2VwLCB2YWx1ZSwgMCk7Cit9CisKK3N0YXRpYyBpbnQKK25ldDIyODBfc2V0X3dlZGdlKHN0cnVjdCB1c2JfZXAgKl9lcCkKK3sKKwlpZiAoIV9lcCB8fCBfZXAtPm5hbWUgPT0gZXAwbmFtZSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJcmV0dXJuIG5ldDIyODBfc2V0X2hhbHRfYW5kX3dlZGdlKF9lcCwgMSwgMSk7Cit9CisKK3N0YXRpYyBpbnQKIG5ldDIyODBfZmlmb19zdGF0dXMgKHN0cnVjdCB1c2JfZXAgKl9lcCkKIHsKIAlzdHJ1Y3QgbmV0MjI4MF9lcAkqZXA7CkBAIC0xMzAyLDYgKzEzMjIsNyBAQAogCS5kZXF1ZXVlCT0gbmV0MjI4MF9kZXF1ZXVlLAogCiAJLnNldF9oYWx0CT0gbmV0MjI4MF9zZXRfaGFsdCwKKwkuc2V0X3dlZGdlCT0gbmV0MjI4MF9zZXRfd2VkZ2UsCiAJLmZpZm9fc3RhdHVzCT0gbmV0MjI4MF9maWZvX3N0YXR1cywKIAkuZmlmb19mbHVzaAk9IG5ldDIyODBfZmlmb19mbHVzaCwKIH07CkBAIC0yNDEwLDkgKzI0MzEsMTQgQEAKIAkJCQlnb3RvIGRvX3N0YWxsOwogCQkJaWYgKChlID0gZ2V0X2VwX2J5X2FkZHIgKGRldiwgd19pbmRleCkpID09IDApCiAJCQkJZ290byBkb19zdGFsbDsKLQkJCWNsZWFyX2hhbHQgKGUpOworCQkJaWYgKGUtPndlZGdlZCkgeworCQkJCVZERUJVRyhkZXYsICIlcyB3ZWRnZWQsIGhhbHQgbm90IGNsZWFyZWRcbiIsCisJCQkJCQllcC0+ZXAubmFtZSk7CisJCQl9IGVsc2UgeworCQkJCVZERUJVRyhkZXYsICIlcyBjbGVhciBoYWx0XG4iLCBlcC0+ZXAubmFtZSk7CisJCQkJY2xlYXJfaGFsdChlKTsKKwkJCX0KIAkJCWFsbG93X3N0YXR1cyAoZXApOwotCQkJVkRFQlVHIChkZXYsICIlcyBjbGVhciBoYWx0XG4iLCBlcC0+ZXAubmFtZSk7CiAJCQlnb3RvIG5leHRfZW5kcG9pbnRzOwogCQkJfQogCQkJYnJlYWs7CkBAIC0yNDI3LDYgKzI0NTMsOCBAQAogCQkJCWdvdG8gZG9fc3RhbGw7CiAJCQlpZiAoKGUgPSBnZXRfZXBfYnlfYWRkciAoZGV2LCB3X2luZGV4KSkgPT0gMCkKIAkJCQlnb3RvIGRvX3N0YWxsOworCQkJaWYgKGUtPmVwLm5hbWUgPT0gZXAwbmFtZSkKKwkJCQlnb3RvIGRvX3N0YWxsOwogCQkJc2V0X2hhbHQgKGUpOwogCQkJYWxsb3dfc3RhdHVzIChlcCk7CiAJCQlWREVCVUcgKGRldiwgIiVzIHNldCBoYWx0XG4iLCBlcC0+ZXAubmFtZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvbmV0MjI4MC5oIGIvZHJpdmVycy91c2IvZ2FkZ2V0L25ldDIyODAuaAppbmRleCA4MWE3MWRiLi5jMzY4NTIyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvbmV0MjI4MC5oCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9uZXQyMjgwLmgKQEAgLTEwOSw2ICsxMDksNyBAQAogCQkJCQkJaW5fZmlmb192YWxpZGF0ZSA6IDEsCiAJCQkJCQlvdXRfb3ZlcmZsb3cgOiAxLAogCQkJCQkJc3RvcHBlZCA6IDEsCisJCQkJCQl3ZWRnZWQgOiAxLAogCQkJCQkJaXNfaW4gOiAxLAogCQkJCQkJaXNfaXNvIDogMSwKIAkJCQkJCXJlc3BvbmRlZCA6IDE7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvb21hcF91ZGMuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9vbWFwX3VkYy5jCmluZGV4IGJiNTRjY2EuLjM0ZTllMzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9vbWFwX3VkYy5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9vbWFwX3VkYy5jCkBAIC0yMzEzLDYgKzIzMTMsMTMgQEAKIAogCXRtcCA9IG9tYXBfcmVhZGwoT1RHX1JFVik7CiAJaWYgKGNwdV9pc19vbWFwMjR4eCgpKSB7CisJCS8qCisJCSAqIFJFVklTSVQ6IE5vdCBjbGVhciBob3cgdGhpcyB3b3JrcyBvbiBPTUFQMi4gIHRyYW5zCisJCSAqIGlzIEFORGVkIHRvIHByb2R1Y2UgYml0cyA3IGFuZCA4LCB3aGljaCBtaWdodCBtYWtlCisJCSAqIHNlbnNlIGZvciBVU0JfVFJBTlNDRUlWRVJfQ1RSTCBvbiBPTUFQMSwKKwkJICogYnV0IHdpdGggQ09OVFJPTF9ERVZDT05GLCB0aGVzZSBiaXRzIGhhdmUgc29tZXRoaW5nIHRvCisJCSAqIGRvIHdpdGggdGhlIGZyYW1lIGFkanVzdG1lbnQgY291bnRlciBhbmQgTWNCU1AyLgorCQkgKi8KIAkJY3RybF9uYW1lID0gImNvbnRyb2xfZGV2Y29uZiI7CiAJCXRyYW5zID0gb21hcF9jdHJsX3JlYWRsKE9NQVAyX0NPTlRST0xfREVWQ09ORjApOwogCX0gZWxzZSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvcHJpbnRlci5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L3ByaW50ZXIuYwppbmRleCBlMDA5MDA4Li41YTMwMzRmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvcHJpbnRlci5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9wcmludGVyLmMKQEAgLTUzLDYgKzUzLDIwIEBACiAKICNpbmNsdWRlICJnYWRnZXRfY2hpcHMuaCIKIAorCisvKgorICogS2J1aWxkIGlzIG5vdCB2ZXJ5IGNvb3BlcmF0aXZlIHdpdGggcmVzcGVjdCB0byBsaW5raW5nIHNlcGFyYXRlbHkKKyAqIGNvbXBpbGVkIGxpYnJhcnkgb2JqZWN0cyBpbnRvIG9uZSBtb2R1bGUuICBTbyBmb3Igbm93IHdlIHdvbid0IHVzZQorICogc2VwYXJhdGUgY29tcGlsYXRpb24gLi4uIGVuc3VyaW5nIGluaXQvZXhpdCBzZWN0aW9ucyB3b3JrIHRvIHNocmluaworICogdGhlIHJ1bnRpbWUgZm9vdHByaW50LCBhbmQgZ2l2aW5nIHVzIGF0IGxlYXN0IHNvbWUgcGFydHMgb2Ygd2hhdAorICogYSAiZ2NjIC0tY29tYmluZSAuLi4gcGFydDEuYyBwYXJ0Mi5jIHBhcnQzLmMgLi4uICIgYnVpbGQgd291bGQuCisgKi8KKyNpbmNsdWRlICJ1c2JzdHJpbmcuYyIKKyNpbmNsdWRlICJjb25maWcuYyIKKyNpbmNsdWRlICJlcGF1dG9jb25mLmMiCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKICNkZWZpbmUgRFJJVkVSX0RFU0MJCSJQcmludGVyIEdhZGdldCIKICNkZWZpbmUgRFJJVkVSX1ZFUlNJT04JCSIyMDA3IE9DVCAwNiIKIApAQCAtMjM4LDcgKzI1Miw3IEBACiAJLmJDb25maWd1cmF0aW9uVmFsdWUgPQlERVZfQ09ORklHX1ZBTFVFLAogCS5pQ29uZmlndXJhdGlvbiA9CTAsCiAJLmJtQXR0cmlidXRlcyA9CQlVU0JfQ09ORklHX0FUVF9PTkUgfCBVU0JfQ09ORklHX0FUVF9TRUxGUE9XRVIsCi0JLmJNYXhQb3dlciA9CQkxCS8qIFNlbGYtUG93ZXJlZCAqLworCS5iTWF4UG93ZXIgPQkJQ09ORklHX1VTQl9HQURHRVRfVkJVU19EUkFXIC8gMiwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgdXNiX2ludGVyZmFjZV9kZXNjcmlwdG9yIGludGZfZGVzYyA9IHsKQEAgLTEyNjQsOCArMTI3OCw3IEBACiAJLyogcmVzcG9uZCB3aXRoIGRhdGEgdHJhbnNmZXIgYmVmb3JlIHN0YXR1cyBwaGFzZT8gKi8KIAlpZiAodmFsdWUgPj0gMCkgewogCQlyZXEtPmxlbmd0aCA9IHZhbHVlOwotCQlyZXEtPnplcm8gPSB2YWx1ZSA8IHdMZW5ndGgKLQkJCQkmJiAodmFsdWUgJSBnYWRnZXQtPmVwMC0+bWF4cGFja2V0KSA9PSAwOworCQlyZXEtPnplcm8gPSB2YWx1ZSA8IHdMZW5ndGg7CiAJCXZhbHVlID0gdXNiX2VwX3F1ZXVlKGdhZGdldC0+ZXAwLCByZXEsIEdGUF9BVE9NSUMpOwogCQlpZiAodmFsdWUgPCAwKSB7CiAJCQlEQkcoZGV2LCAiZXBfcXVldWUgLS0+ICVkXG4iLCB2YWx1ZSk7CkBAIC0xMzYwLDggKzEzNzMsOCBAQAogCiAKIAkvKiBTZXR1cCB0aGUgc3lzZnMgZmlsZXMgZm9yIHRoZSBwcmludGVyIGdhZGdldC4gKi8KLQlkZXYtPnBkZXYgPSBkZXZpY2VfY3JlYXRlX2RydmRhdGEodXNiX2dhZGdldF9jbGFzcywgTlVMTCwKLQkJCQkJICBnX3ByaW50ZXJfZGV2bm8sIE5VTEwsICJnX3ByaW50ZXIiKTsKKwlkZXYtPnBkZXYgPSBkZXZpY2VfY3JlYXRlKHVzYl9nYWRnZXRfY2xhc3MsIE5VTEwsIGdfcHJpbnRlcl9kZXZubywKKwkJCQkgIE5VTEwsICJnX3ByaW50ZXIiKTsKIAlpZiAoSVNfRVJSKGRldi0+cGRldikpIHsKIAkJRVJST1IoZGV2LCAiRmFpbGVkIHRvIGNyZWF0ZSBkZXZpY2U6IGdfcHJpbnRlclxuIik7CiAJCWdvdG8gZmFpbDsKQEAgLTE0NjMsNyArMTQ3Niw2IEBACiAJaWYgKGdhZGdldC0+aXNfb3RnKSB7CiAJCW90Z19kZXNjLmJtQXR0cmlidXRlcyB8PSBVU0JfT1RHX0hOUCwKIAkJY29uZmlnX2Rlc2MuYm1BdHRyaWJ1dGVzIHw9IFVTQl9DT05GSUdfQVRUX1dBS0VVUDsKLQkJY29uZmlnX2Rlc2MuYk1heFBvd2VyID0gNDsKIAl9CiAKIAlzcGluX2xvY2tfaW5pdCgmZGV2LT5sb2NrKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9weGEyN3hfdWRjLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvcHhhMjd4X3VkYy5jCmluZGV4IDdjYmM3OGEuLmJjZjM3NWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9weGEyN3hfdWRjLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L3B4YTI3eF91ZGMuYwpAQCAtMjIsNyArMjIsNiBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9ybmRpcy5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L3JuZGlzLmMKaW5kZXggNzIyOGU4NS4uOGMyNmY1ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L3JuZGlzLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L3JuZGlzLmMKQEAgLTU3LDExICs1Nyw2IEBACiAjZGVmaW5lIHJuZGlzX2RlYnVnCQkwCiAjZW5kaWYKIAotI2RlZmluZSBEQkcoc3RyLGFyZ3MuLi4pIGRvIHsgXAotCWlmIChybmRpc19kZWJ1ZykgXAotCQlwcl9kZWJ1ZyhzdHIgLCAjIyBhcmdzKTsgXAotCX0gd2hpbGUgKDApCi0KICNkZWZpbmUgUk5ESVNfTUFYX0NPTkZJR1MJMQogCiAKQEAgLTE4Myw5ICsxNzgsOSBAQAogCWlmICghcmVzcCkgcmV0dXJuIC1FTk9NRU07CiAKIAlpZiAoYnVmX2xlbiAmJiBybmRpc19kZWJ1ZyA+IDEpIHsKLQkJREJHKCJxdWVyeSBPSUQgJTA4eCB2YWx1ZSwgbGVuICVkOlxuIiwgT0lELCBidWZfbGVuKTsKKwkJcHJfZGVidWcoInF1ZXJ5IE9JRCAlMDh4IHZhbHVlLCBsZW4gJWQ6XG4iLCBPSUQsIGJ1Zl9sZW4pOwogCQlmb3IgKGkgPSAwOyBpIDwgYnVmX2xlbjsgaSArPSAxNikgewotCQkJREJHKCIlMDNkOiAlMDh4ICUwOHggJTA4eCAlMDh4XG4iLCBpLAorCQkJcHJfZGVidWcoIiUwM2Q6ICUwOHggJTA4eCAlMDh4ICUwOHhcbiIsIGksCiAJCQkJZ2V0X3VuYWxpZ25lZF9sZTMyKCZidWZbaV0pLAogCQkJCWdldF91bmFsaWduZWRfbGUzMigmYnVmW2kgKyA0XSksCiAJCQkJZ2V0X3VuYWxpZ25lZF9sZTMyKCZidWZbaSArIDhdKSwKQEAgLTIwOSw3ICsyMDQsNyBAQAogCiAJLyogbWFuZGF0b3J5ICovCiAJY2FzZSBPSURfR0VOX1NVUFBPUlRFRF9MSVNUOgotCQlEQkcoIiVzOiBPSURfR0VOX1NVUFBPUlRFRF9MSVNUXG4iLCBfX2Z1bmNfXyk7CisJCXByX2RlYnVnKCIlczogT0lEX0dFTl9TVVBQT1JURURfTElTVFxuIiwgX19mdW5jX18pOwogCQlsZW5ndGggPSBzaXplb2YgKG9pZF9zdXBwb3J0ZWRfbGlzdCk7CiAJCWNvdW50ICA9IGxlbmd0aCAvIHNpemVvZiAodTMyKTsKIAkJZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspCkBAIC0yMTksNyArMjE0LDcgQEAKIAogCS8qIG1hbmRhdG9yeSAqLwogCWNhc2UgT0lEX0dFTl9IQVJEV0FSRV9TVEFUVVM6Ci0JCURCRygiJXM6IE9JRF9HRU5fSEFSRFdBUkVfU1RBVFVTXG4iLCBfX2Z1bmNfXyk7CisJCXByX2RlYnVnKCIlczogT0lEX0dFTl9IQVJEV0FSRV9TVEFUVVNcbiIsIF9fZnVuY19fKTsKIAkJLyogQm9ndXMgcXVlc3Rpb24hCiAJCSAqIEhhcmR3YXJlIG11c3QgYmUgcmVhZHkgdG8gcmVjZWl2ZSBoaWdoIGxldmVsIHByb3RvY29scy4KIAkJICogQlRXOgpAQCAtMjMyLDE0ICsyMjcsMTQgQEAKIAogCS8qIG1hbmRhdG9yeSAqLwogCWNhc2UgT0lEX0dFTl9NRURJQV9TVVBQT1JURUQ6Ci0JCURCRygiJXM6IE9JRF9HRU5fTUVESUFfU1VQUE9SVEVEXG4iLCBfX2Z1bmNfXyk7CisJCXByX2RlYnVnKCIlczogT0lEX0dFTl9NRURJQV9TVVBQT1JURURcbiIsIF9fZnVuY19fKTsKIAkJKm91dGJ1ZiA9IGNwdV90b19sZTMyIChybmRpc19wZXJfZGV2X3BhcmFtcyBbY29uZmlnTnJdLm1lZGl1bSk7CiAJCXJldHZhbCA9IDA7CiAJCWJyZWFrOwogCiAJLyogbWFuZGF0b3J5ICovCiAJY2FzZSBPSURfR0VOX01FRElBX0lOX1VTRToKLQkJREJHKCIlczogT0lEX0dFTl9NRURJQV9JTl9VU0VcbiIsIF9fZnVuY19fKTsKKwkJcHJfZGVidWcoIiVzOiBPSURfR0VOX01FRElBX0lOX1VTRVxuIiwgX19mdW5jX18pOwogCQkvKiBvbmUgbWVkaXVtLCBvbmUgdHJhbnNwb3J0Li4uIChtYXliZSB5b3UgZG8gaXQgYmV0dGVyKSAqLwogCQkqb3V0YnVmID0gY3B1X3RvX2xlMzIgKHJuZGlzX3Blcl9kZXZfcGFyYW1zIFtjb25maWdOcl0ubWVkaXVtKTsKIAkJcmV0dmFsID0gMDsKQEAgLTI0Nyw3ICsyNDIsNyBAQAogCiAJLyogbWFuZGF0b3J5ICovCiAJY2FzZSBPSURfR0VOX01BWElNVU1fRlJBTUVfU0laRToKLQkJREJHKCIlczogT0lEX0dFTl9NQVhJTVVNX0ZSQU1FX1NJWkVcbiIsIF9fZnVuY19fKTsKKwkJcHJfZGVidWcoIiVzOiBPSURfR0VOX01BWElNVU1fRlJBTUVfU0laRVxuIiwgX19mdW5jX18pOwogCQlpZiAocm5kaXNfcGVyX2Rldl9wYXJhbXMgW2NvbmZpZ05yXS5kZXYpIHsKIAkJCSpvdXRidWYgPSBjcHVfdG9fbGUzMiAoCiAJCQkJcm5kaXNfcGVyX2Rldl9wYXJhbXMgW2NvbmZpZ05yXS5kZXYtPm10dSk7CkBAIC0yNTgsNyArMjUzLDcgQEAKIAkvKiBtYW5kYXRvcnkgKi8KIAljYXNlIE9JRF9HRU5fTElOS19TUEVFRDoKIAkJaWYgKHJuZGlzX2RlYnVnID4gMSkKLQkJCURCRygiJXM6IE9JRF9HRU5fTElOS19TUEVFRFxuIiwgX19mdW5jX18pOworCQkJcHJfZGVidWcoIiVzOiBPSURfR0VOX0xJTktfU1BFRURcbiIsIF9fZnVuY19fKTsKIAkJaWYgKHJuZGlzX3Blcl9kZXZfcGFyYW1zIFtjb25maWdOcl0ubWVkaWFfc3RhdGUKIAkJCQk9PSBORElTX01FRElBX1NUQVRFX0RJU0NPTk5FQ1RFRCkKIAkJCSpvdXRidWYgPSBfX2NvbnN0YW50X2NwdV90b19sZTMyICgwKTsKQEAgLTI3MCw3ICsyNjUsNyBAQAogCiAJLyogbWFuZGF0b3J5ICovCiAJY2FzZSBPSURfR0VOX1RSQU5TTUlUX0JMT0NLX1NJWkU6Ci0JCURCRygiJXM6IE9JRF9HRU5fVFJBTlNNSVRfQkxPQ0tfU0laRVxuIiwgX19mdW5jX18pOworCQlwcl9kZWJ1ZygiJXM6IE9JRF9HRU5fVFJBTlNNSVRfQkxPQ0tfU0laRVxuIiwgX19mdW5jX18pOwogCQlpZiAocm5kaXNfcGVyX2Rldl9wYXJhbXMgW2NvbmZpZ05yXS5kZXYpIHsKIAkJCSpvdXRidWYgPSBjcHVfdG9fbGUzMiAoCiAJCQkJcm5kaXNfcGVyX2Rldl9wYXJhbXMgW2NvbmZpZ05yXS5kZXYtPm10dSk7CkBAIC0yODAsNyArMjc1LDcgQEAKIAogCS8qIG1hbmRhdG9yeSAqLwogCWNhc2UgT0lEX0dFTl9SRUNFSVZFX0JMT0NLX1NJWkU6Ci0JCURCRygiJXM6IE9JRF9HRU5fUkVDRUlWRV9CTE9DS19TSVpFXG4iLCBfX2Z1bmNfXyk7CisJCXByX2RlYnVnKCIlczogT0lEX0dFTl9SRUNFSVZFX0JMT0NLX1NJWkVcbiIsIF9fZnVuY19fKTsKIAkJaWYgKHJuZGlzX3Blcl9kZXZfcGFyYW1zIFtjb25maWdOcl0uZGV2KSB7CiAJCQkqb3V0YnVmID0gY3B1X3RvX2xlMzIgKAogCQkJCXJuZGlzX3Blcl9kZXZfcGFyYW1zIFtjb25maWdOcl0uZGV2LT5tdHUpOwpAQCAtMjkwLDcgKzI4NSw3IEBACiAKIAkvKiBtYW5kYXRvcnkgKi8KIAljYXNlIE9JRF9HRU5fVkVORE9SX0lEOgotCQlEQkcoIiVzOiBPSURfR0VOX1ZFTkRPUl9JRFxuIiwgX19mdW5jX18pOworCQlwcl9kZWJ1ZygiJXM6IE9JRF9HRU5fVkVORE9SX0lEXG4iLCBfX2Z1bmNfXyk7CiAJCSpvdXRidWYgPSBjcHVfdG9fbGUzMiAoCiAJCQlybmRpc19wZXJfZGV2X3BhcmFtcyBbY29uZmlnTnJdLnZlbmRvcklEKTsKIAkJcmV0dmFsID0gMDsKQEAgLTI5OCw3ICsyOTMsNyBAQAogCiAJLyogbWFuZGF0b3J5ICovCiAJY2FzZSBPSURfR0VOX1ZFTkRPUl9ERVNDUklQVElPTjoKLQkJREJHKCIlczogT0lEX0dFTl9WRU5ET1JfREVTQ1JJUFRJT05cbiIsIF9fZnVuY19fKTsKKwkJcHJfZGVidWcoIiVzOiBPSURfR0VOX1ZFTkRPUl9ERVNDUklQVElPTlxuIiwgX19mdW5jX18pOwogCQlsZW5ndGggPSBzdHJsZW4gKHJuZGlzX3Blcl9kZXZfcGFyYW1zIFtjb25maWdOcl0udmVuZG9yRGVzY3IpOwogCQltZW1jcHkgKG91dGJ1ZiwKIAkJCXJuZGlzX3Blcl9kZXZfcGFyYW1zIFtjb25maWdOcl0udmVuZG9yRGVzY3IsIGxlbmd0aCk7CkBAIC0zMDYsNyArMzAxLDcgQEAKIAkJYnJlYWs7CiAKIAljYXNlIE9JRF9HRU5fVkVORE9SX0RSSVZFUl9WRVJTSU9OOgotCQlEQkcoIiVzOiBPSURfR0VOX1ZFTkRPUl9EUklWRVJfVkVSU0lPTlxuIiwgX19mdW5jX18pOworCQlwcl9kZWJ1ZygiJXM6IE9JRF9HRU5fVkVORE9SX0RSSVZFUl9WRVJTSU9OXG4iLCBfX2Z1bmNfXyk7CiAJCS8qIENyZWF0ZWQgYXMgTEUgKi8KIAkJKm91dGJ1ZiA9IHJuZGlzX2RyaXZlcl92ZXJzaW9uOwogCQlyZXR2YWwgPSAwOwpAQCAtMzE0LDE0ICszMDksMTQgQEAKIAogCS8qIG1hbmRhdG9yeSAqLwogCWNhc2UgT0lEX0dFTl9DVVJSRU5UX1BBQ0tFVF9GSUxURVI6Ci0JCURCRygiJXM6IE9JRF9HRU5fQ1VSUkVOVF9QQUNLRVRfRklMVEVSXG4iLCBfX2Z1bmNfXyk7CisJCXByX2RlYnVnKCIlczogT0lEX0dFTl9DVVJSRU5UX1BBQ0tFVF9GSUxURVJcbiIsIF9fZnVuY19fKTsKIAkJKm91dGJ1ZiA9IGNwdV90b19sZTMyICgqcm5kaXNfcGVyX2Rldl9wYXJhbXNbY29uZmlnTnJdLmZpbHRlcik7CiAJCXJldHZhbCA9IDA7CiAJCWJyZWFrOwogCiAJLyogbWFuZGF0b3J5ICovCiAJY2FzZSBPSURfR0VOX01BWElNVU1fVE9UQUxfU0laRToKLQkJREJHKCIlczogT0lEX0dFTl9NQVhJTVVNX1RPVEFMX1NJWkVcbiIsIF9fZnVuY19fKTsKKwkJcHJfZGVidWcoIiVzOiBPSURfR0VOX01BWElNVU1fVE9UQUxfU0laRVxuIiwgX19mdW5jX18pOwogCQkqb3V0YnVmID0gX19jb25zdGFudF9jcHVfdG9fbGUzMihSTkRJU19NQVhfVE9UQUxfU0laRSk7CiAJCXJldHZhbCA9IDA7CiAJCWJyZWFrOwpAQCAtMzI5LDE0ICszMjQsMTQgQEAKIAkvKiBtYW5kYXRvcnkgKi8KIAljYXNlIE9JRF9HRU5fTUVESUFfQ09OTkVDVF9TVEFUVVM6CiAJCWlmIChybmRpc19kZWJ1ZyA+IDEpCi0JCQlEQkcoIiVzOiBPSURfR0VOX01FRElBX0NPTk5FQ1RfU1RBVFVTXG4iLCBfX2Z1bmNfXyk7CisJCQlwcl9kZWJ1ZygiJXM6IE9JRF9HRU5fTUVESUFfQ09OTkVDVF9TVEFUVVNcbiIsIF9fZnVuY19fKTsKIAkJKm91dGJ1ZiA9IGNwdV90b19sZTMyIChybmRpc19wZXJfZGV2X3BhcmFtcyBbY29uZmlnTnJdCiAJCQkJCQkubWVkaWFfc3RhdGUpOwogCQlyZXR2YWwgPSAwOwogCQlicmVhazsKIAogCWNhc2UgT0lEX0dFTl9QSFlTSUNBTF9NRURJVU06Ci0JCURCRygiJXM6IE9JRF9HRU5fUEhZU0lDQUxfTUVESVVNXG4iLCBfX2Z1bmNfXyk7CisJCXByX2RlYnVnKCIlczogT0lEX0dFTl9QSFlTSUNBTF9NRURJVU1cbiIsIF9fZnVuY19fKTsKIAkJKm91dGJ1ZiA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIgKDApOwogCQlyZXR2YWwgPSAwOwogCQlicmVhazsKQEAgLTM0Niw3ICszNDEsNyBAQAogCSAqIHZlcnNpb25zIGVtaXQgdW5kZWZpbmVkIFJORElTIG1lc3NhZ2VzLiBET0NVTUVOVCBBTEwgVEhFU0UhCiAJICovCiAJY2FzZSBPSURfR0VOX01BQ19PUFRJT05TOgkJLyogZnJvbSBXaW5NRSAqLwotCQlEQkcoIiVzOiBPSURfR0VOX01BQ19PUFRJT05TXG4iLCBfX2Z1bmNfXyk7CisJCXByX2RlYnVnKCIlczogT0lEX0dFTl9NQUNfT1BUSU9OU1xuIiwgX19mdW5jX18pOwogCQkqb3V0YnVmID0gX19jb25zdGFudF9jcHVfdG9fbGUzMigKIAkJCSAgTkRJU19NQUNfT1BUSU9OX1JFQ0VJVkVfU0VSSUFMSVpFRAogCQkJfCBORElTX01BQ19PUFRJT05fRlVMTF9EVVBMRVgpOwpAQCAtMzU4LDcgKzM1Myw3IEBACiAJLyogbWFuZGF0b3J5ICovCiAJY2FzZSBPSURfR0VOX1hNSVRfT0s6CiAJCWlmIChybmRpc19kZWJ1ZyA+IDEpCi0JCQlEQkcoIiVzOiBPSURfR0VOX1hNSVRfT0tcbiIsIF9fZnVuY19fKTsKKwkJCXByX2RlYnVnKCIlczogT0lEX0dFTl9YTUlUX09LXG4iLCBfX2Z1bmNfXyk7CiAJCWlmIChzdGF0cykgewogCQkJKm91dGJ1ZiA9IGNwdV90b19sZTMyKHN0YXRzLT50eF9wYWNrZXRzCiAJCQkJLSBzdGF0cy0+dHhfZXJyb3JzIC0gc3RhdHMtPnR4X2Ryb3BwZWQpOwpAQCAtMzY5LDcgKzM2NCw3IEBACiAJLyogbWFuZGF0b3J5ICovCiAJY2FzZSBPSURfR0VOX1JDVl9PSzoKIAkJaWYgKHJuZGlzX2RlYnVnID4gMSkKLQkJCURCRygiJXM6IE9JRF9HRU5fUkNWX09LXG4iLCBfX2Z1bmNfXyk7CisJCQlwcl9kZWJ1ZygiJXM6IE9JRF9HRU5fUkNWX09LXG4iLCBfX2Z1bmNfXyk7CiAJCWlmIChzdGF0cykgewogCQkJKm91dGJ1ZiA9IGNwdV90b19sZTMyKHN0YXRzLT5yeF9wYWNrZXRzCiAJCQkJLSBzdGF0cy0+cnhfZXJyb3JzIC0gc3RhdHMtPnJ4X2Ryb3BwZWQpOwpAQCAtMzgwLDcgKzM3NSw3IEBACiAJLyogbWFuZGF0b3J5ICovCiAJY2FzZSBPSURfR0VOX1hNSVRfRVJST1I6CiAJCWlmIChybmRpc19kZWJ1ZyA+IDEpCi0JCQlEQkcoIiVzOiBPSURfR0VOX1hNSVRfRVJST1JcbiIsIF9fZnVuY19fKTsKKwkJCXByX2RlYnVnKCIlczogT0lEX0dFTl9YTUlUX0VSUk9SXG4iLCBfX2Z1bmNfXyk7CiAJCWlmIChzdGF0cykgewogCQkJKm91dGJ1ZiA9IGNwdV90b19sZTMyKHN0YXRzLT50eF9lcnJvcnMpOwogCQkJcmV0dmFsID0gMDsKQEAgLTM5MCw3ICszODUsNyBAQAogCS8qIG1hbmRhdG9yeSAqLwogCWNhc2UgT0lEX0dFTl9SQ1ZfRVJST1I6CiAJCWlmIChybmRpc19kZWJ1ZyA+IDEpCi0JCQlEQkcoIiVzOiBPSURfR0VOX1JDVl9FUlJPUlxuIiwgX19mdW5jX18pOworCQkJcHJfZGVidWcoIiVzOiBPSURfR0VOX1JDVl9FUlJPUlxuIiwgX19mdW5jX18pOwogCQlpZiAoc3RhdHMpIHsKIAkJCSpvdXRidWYgPSBjcHVfdG9fbGUzMihzdGF0cy0+cnhfZXJyb3JzKTsKIAkJCXJldHZhbCA9IDA7CkBAIC0zOTksNyArMzk0LDcgQEAKIAogCS8qIG1hbmRhdG9yeSAqLwogCWNhc2UgT0lEX0dFTl9SQ1ZfTk9fQlVGRkVSOgotCQlEQkcoIiVzOiBPSURfR0VOX1JDVl9OT19CVUZGRVJcbiIsIF9fZnVuY19fKTsKKwkJcHJfZGVidWcoIiVzOiBPSURfR0VOX1JDVl9OT19CVUZGRVJcbiIsIF9fZnVuY19fKTsKIAkJaWYgKHN0YXRzKSB7CiAJCQkqb3V0YnVmID0gY3B1X3RvX2xlMzIoc3RhdHMtPnJ4X2Ryb3BwZWQpOwogCQkJcmV0dmFsID0gMDsKQEAgLTQxMCw3ICs0MDUsNyBAQAogCiAJLyogbWFuZGF0b3J5ICovCiAJY2FzZSBPSURfODAyXzNfUEVSTUFORU5UX0FERFJFU1M6Ci0JCURCRygiJXM6IE9JRF84MDJfM19QRVJNQU5FTlRfQUREUkVTU1xuIiwgX19mdW5jX18pOworCQlwcl9kZWJ1ZygiJXM6IE9JRF84MDJfM19QRVJNQU5FTlRfQUREUkVTU1xuIiwgX19mdW5jX18pOwogCQlpZiAocm5kaXNfcGVyX2Rldl9wYXJhbXMgW2NvbmZpZ05yXS5kZXYpIHsKIAkJCWxlbmd0aCA9IEVUSF9BTEVOOwogCQkJbWVtY3B5IChvdXRidWYsCkBAIC00MjIsNyArNDE3LDcgQEAKIAogCS8qIG1hbmRhdG9yeSAqLwogCWNhc2UgT0lEXzgwMl8zX0NVUlJFTlRfQUREUkVTUzoKLQkJREJHKCIlczogT0lEXzgwMl8zX0NVUlJFTlRfQUREUkVTU1xuIiwgX19mdW5jX18pOworCQlwcl9kZWJ1ZygiJXM6IE9JRF84MDJfM19DVVJSRU5UX0FERFJFU1NcbiIsIF9fZnVuY19fKTsKIAkJaWYgKHJuZGlzX3Blcl9kZXZfcGFyYW1zIFtjb25maWdOcl0uZGV2KSB7CiAJCQlsZW5ndGggPSBFVEhfQUxFTjsKIAkJCW1lbWNweSAob3V0YnVmLApAQCAtNDM0LDcgKzQyOSw3IEBACiAKIAkvKiBtYW5kYXRvcnkgKi8KIAljYXNlIE9JRF84MDJfM19NVUxUSUNBU1RfTElTVDoKLQkJREJHKCIlczogT0lEXzgwMl8zX01VTFRJQ0FTVF9MSVNUXG4iLCBfX2Z1bmNfXyk7CisJCXByX2RlYnVnKCIlczogT0lEXzgwMl8zX01VTFRJQ0FTVF9MSVNUXG4iLCBfX2Z1bmNfXyk7CiAJCS8qIE11bHRpY2FzdCBiYXNlIGFkZHJlc3Mgb25seSAqLwogCQkqb3V0YnVmID0gX19jb25zdGFudF9jcHVfdG9fbGUzMiAoMHhFMDAwMDAwMCk7CiAJCXJldHZhbCA9IDA7CkBAIC00NDIsMjEgKzQzNywyMSBAQAogCiAJLyogbWFuZGF0b3J5ICovCiAJY2FzZSBPSURfODAyXzNfTUFYSU1VTV9MSVNUX1NJWkU6Ci0JCURCRygiJXM6IE9JRF84MDJfM19NQVhJTVVNX0xJU1RfU0laRVxuIiwgX19mdW5jX18pOworCQlwcl9kZWJ1ZygiJXM6IE9JRF84MDJfM19NQVhJTVVNX0xJU1RfU0laRVxuIiwgX19mdW5jX18pOwogCQkvKiBNdWx0aWNhc3QgYmFzZSBhZGRyZXNzIG9ubHkgKi8KIAkJKm91dGJ1ZiA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIgKDEpOwogCQlyZXR2YWwgPSAwOwogCQlicmVhazsKIAogCWNhc2UgT0lEXzgwMl8zX01BQ19PUFRJT05TOgotCQlEQkcoIiVzOiBPSURfODAyXzNfTUFDX09QVElPTlNcbiIsIF9fZnVuY19fKTsKKwkJcHJfZGVidWcoIiVzOiBPSURfODAyXzNfTUFDX09QVElPTlNcbiIsIF9fZnVuY19fKTsKIAkJYnJlYWs7CiAKIAkvKiBpZWVlODAyLjMgc3RhdGlzdGljcyBPSURzICh0YWJsZSA0LTQpICovCiAKIAkvKiBtYW5kYXRvcnkgKi8KIAljYXNlIE9JRF84MDJfM19SQ1ZfRVJST1JfQUxJR05NRU5UOgotCQlEQkcoIiVzOiBPSURfODAyXzNfUkNWX0VSUk9SX0FMSUdOTUVOVFxuIiwgX19mdW5jX18pOworCQlwcl9kZWJ1ZygiJXM6IE9JRF84MDJfM19SQ1ZfRVJST1JfQUxJR05NRU5UXG4iLCBfX2Z1bmNfXyk7CiAJCWlmIChzdGF0cykgewogCQkJKm91dGJ1ZiA9IGNwdV90b19sZTMyKHN0YXRzLT5yeF9mcmFtZV9lcnJvcnMpOwogCQkJcmV0dmFsID0gMDsKQEAgLTQ2NSwxNCArNDYwLDE0IEBACiAKIAkvKiBtYW5kYXRvcnkgKi8KIAljYXNlIE9JRF84MDJfM19YTUlUX09ORV9DT0xMSVNJT046Ci0JCURCRygiJXM6IE9JRF84MDJfM19YTUlUX09ORV9DT0xMSVNJT05cbiIsIF9fZnVuY19fKTsKKwkJcHJfZGVidWcoIiVzOiBPSURfODAyXzNfWE1JVF9PTkVfQ09MTElTSU9OXG4iLCBfX2Z1bmNfXyk7CiAJCSpvdXRidWYgPSBfX2NvbnN0YW50X2NwdV90b19sZTMyICgwKTsKIAkJcmV0dmFsID0gMDsKIAkJYnJlYWs7CiAKIAkvKiBtYW5kYXRvcnkgKi8KIAljYXNlIE9JRF84MDJfM19YTUlUX01PUkVfQ09MTElTSU9OUzoKLQkJREJHKCIlczogT0lEXzgwMl8zX1hNSVRfTU9SRV9DT0xMSVNJT05TXG4iLCBfX2Z1bmNfXyk7CisJCXByX2RlYnVnKCIlczogT0lEXzgwMl8zX1hNSVRfTU9SRV9DT0xMSVNJT05TXG4iLCBfX2Z1bmNfXyk7CiAJCSpvdXRidWYgPSBfX2NvbnN0YW50X2NwdV90b19sZTMyICgwKTsKIAkJcmV0dmFsID0gMDsKIAkJYnJlYWs7CkBAIC01MDQsOSArNDk5LDkgQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAKIAlpZiAoYnVmX2xlbiAmJiBybmRpc19kZWJ1ZyA+IDEpIHsKLQkJREJHKCJzZXQgT0lEICUwOHggdmFsdWUsIGxlbiAlZDpcbiIsIE9JRCwgYnVmX2xlbik7CisJCXByX2RlYnVnKCJzZXQgT0lEICUwOHggdmFsdWUsIGxlbiAlZDpcbiIsIE9JRCwgYnVmX2xlbik7CiAJCWZvciAoaSA9IDA7IGkgPCBidWZfbGVuOyBpICs9IDE2KSB7Ci0JCQlEQkcoIiUwM2Q6ICUwOHggJTA4eCAlMDh4ICUwOHhcbiIsIGksCisJCQlwcl9kZWJ1ZygiJTAzZDogJTA4eCAlMDh4ICUwOHggJTA4eFxuIiwgaSwKIAkJCQlnZXRfdW5hbGlnbmVkX2xlMzIoJmJ1ZltpXSksCiAJCQkJZ2V0X3VuYWxpZ25lZF9sZTMyKCZidWZbaSArIDRdKSwKIAkJCQlnZXRfdW5hbGlnbmVkX2xlMzIoJmJ1ZltpICsgOF0pLApAQCAtNTI1LDcgKzUyMCw3IEBACiAJCSAqCU1VTFRJQ0FTVCwgQUxMX01VTFRJQ0FTVCwgQlJPQURDQVNUCiAJCSAqLwogCQkqcGFyYW1zLT5maWx0ZXIgPSAodTE2KWdldF91bmFsaWduZWRfbGUzMihidWYpOwotCQlEQkcoIiVzOiBPSURfR0VOX0NVUlJFTlRfUEFDS0VUX0ZJTFRFUiAlMDh4XG4iLAorCQlwcl9kZWJ1ZygiJXM6IE9JRF9HRU5fQ1VSUkVOVF9QQUNLRVRfRklMVEVSICUwOHhcbiIsCiAJCQlfX2Z1bmNfXywgKnBhcmFtcy0+ZmlsdGVyKTsKIAogCQkvKiB0aGlzIGNhbGwgaGFzIGEgc2lnbmlmaWNhbnQgc2lkZSBlZmZlY3Q6ICBpdCdzCkBAIC01NDcsNyArNTQyLDcgQEAKIAogCWNhc2UgT0lEXzgwMl8zX01VTFRJQ0FTVF9MSVNUOgogCQkvKiBJIHRoaW5rIHdlIGNhbiBpZ25vcmUgdGhpcyAqLwotCQlEQkcoIiVzOiBPSURfODAyXzNfTVVMVElDQVNUX0xJU1RcbiIsIF9fZnVuY19fKTsKKwkJcHJfZGVidWcoIiVzOiBPSURfODAyXzNfTVVMVElDQVNUX0xJU1RcbiIsIF9fZnVuY19fKTsKIAkJcmV0dmFsID0gMDsKIAkJYnJlYWs7CiAKQEAgLTYwNiw3ICs2MDEsNyBAQAogCXJuZGlzX3Jlc3BfdCAgICAgICAgICAgICpyOwogCXN0cnVjdCBybmRpc19wYXJhbXMJKnBhcmFtcyA9IHJuZGlzX3Blcl9kZXZfcGFyYW1zICsgY29uZmlnTnI7CiAKLQkvLyBEQkcoIiVzOiBPSUQgPSAlMDhYXG4iLCBfX2Z1bmNfXywgY3B1X3RvX2xlMzIoYnVmLT5PSUQpKTsKKwkvKiBwcl9kZWJ1ZygiJXM6IE9JRCA9ICUwOFhcbiIsIF9fZnVuY19fLCBjcHVfdG9fbGUzMihidWYtPk9JRCkpOyAqLwogCWlmICghcGFyYW1zLT5kZXYpCiAJCXJldHVybiAtRU5PVFNVUFA7CiAKQEAgLTY1OSwxNSArNjU0LDE1IEBACiAJQnVmT2Zmc2V0ID0gbGUzMl90b19jcHUgKGJ1Zi0+SW5mb3JtYXRpb25CdWZmZXJPZmZzZXQpOwogCiAjaWZkZWYJVkVSQk9TRV9ERUJVRwotCURCRygiJXM6IExlbmd0aDogJWRcbiIsIF9fZnVuY19fLCBCdWZMZW5ndGgpOwotCURCRygiJXM6IE9mZnNldDogJWRcbiIsIF9fZnVuY19fLCBCdWZPZmZzZXQpOwotCURCRygiJXM6IEluZm9CdWZmZXI6ICIsIF9fZnVuY19fKTsKKwlwcl9kZWJ1ZygiJXM6IExlbmd0aDogJWRcbiIsIF9fZnVuY19fLCBCdWZMZW5ndGgpOworCXByX2RlYnVnKCIlczogT2Zmc2V0OiAlZFxuIiwgX19mdW5jX18sIEJ1Zk9mZnNldCk7CisJcHJfZGVidWcoIiVzOiBJbmZvQnVmZmVyOiAiLCBfX2Z1bmNfXyk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgQnVmTGVuZ3RoOyBpKyspIHsKLQkJREJHKCIlMDJ4ICIsICooKCh1OCAqKSBidWYpICsgaSArIDggKyBCdWZPZmZzZXQpKTsKKwkJcHJfZGVidWcoIiUwMnggIiwgKigoKHU4ICopIGJ1ZikgKyBpICsgOCArIEJ1Zk9mZnNldCkpOwogCX0KIAotCURCRygiXG4iKTsKKwlwcl9kZWJ1ZygiXG4iKTsKICNlbmRpZgogCiAJcmVzcC0+TWVzc2FnZVR5cGUgPSBfX2NvbnN0YW50X2NwdV90b19sZTMyIChSRU1PVEVfTkRJU19TRVRfQ01QTFQpOwpAQCAtODIxLDE0ICs4MTYsMTQgQEAKIAkvKiBGb3IgVVNCOiByZXNwb25zZXMgbWF5IHRha2UgdXAgdG8gMTAgc2Vjb25kcyAqLwogCXN3aXRjaCAoTXNnVHlwZSkgewogCWNhc2UgUkVNT1RFX05ESVNfSU5JVElBTElaRV9NU0c6Ci0JCURCRygiJXM6IFJFTU9URV9ORElTX0lOSVRJQUxJWkVfTVNHXG4iLAorCQlwcl9kZWJ1ZygiJXM6IFJFTU9URV9ORElTX0lOSVRJQUxJWkVfTVNHXG4iLAogCQkJX19mdW5jX18gKTsKIAkJcGFyYW1zLT5zdGF0ZSA9IFJORElTX0lOSVRJQUxJWkVEOwogCQlyZXR1cm4gIHJuZGlzX2luaXRfcmVzcG9uc2UgKGNvbmZpZ05yLAogCQkJCQkocm5kaXNfaW5pdF9tc2dfdHlwZSAqKSBidWYpOwogCiAJY2FzZSBSRU1PVEVfTkRJU19IQUxUX01TRzoKLQkJREJHKCIlczogUkVNT1RFX05ESVNfSEFMVF9NU0dcbiIsCisJCXByX2RlYnVnKCIlczogUkVNT1RFX05ESVNfSEFMVF9NU0dcbiIsCiAJCQlfX2Z1bmNfXyApOwogCQlwYXJhbXMtPnN0YXRlID0gUk5ESVNfVU5JTklUSUFMSVpFRDsKIAkJaWYgKHBhcmFtcy0+ZGV2KSB7CkBAIC04NDYsNyArODQxLDcgQEAKIAkJCQkJKHJuZGlzX3NldF9tc2dfdHlwZSAqKSBidWYpOwogCiAJY2FzZSBSRU1PVEVfTkRJU19SRVNFVF9NU0c6Ci0JCURCRygiJXM6IFJFTU9URV9ORElTX1JFU0VUX01TR1xuIiwKKwkJcHJfZGVidWcoIiVzOiBSRU1PVEVfTkRJU19SRVNFVF9NU0dcbiIsCiAJCQlfX2Z1bmNfXyApOwogCQlyZXR1cm4gcm5kaXNfcmVzZXRfcmVzcG9uc2UgKGNvbmZpZ05yLAogCQkJCQkocm5kaXNfcmVzZXRfbXNnX3R5cGUgKikgYnVmKTsKQEAgLTg1NCw3ICs4NDksNyBAQAogCWNhc2UgUkVNT1RFX05ESVNfS0VFUEFMSVZFX01TRzoKIAkJLyogRm9yIFVTQjogaG9zdCBkb2VzIHRoaXMgZXZlcnkgNSBzZWNvbmRzICovCiAJCWlmIChybmRpc19kZWJ1ZyA+IDEpCi0JCQlEQkcoIiVzOiBSRU1PVEVfTkRJU19LRUVQQUxJVkVfTVNHXG4iLAorCQkJcHJfZGVidWcoIiVzOiBSRU1PVEVfTkRJU19LRUVQQUxJVkVfTVNHXG4iLAogCQkJCV9fZnVuY19fICk7CiAJCXJldHVybiBybmRpc19rZWVwYWxpdmVfcmVzcG9uc2UgKGNvbmZpZ05yLAogCQkJCQkJIChybmRpc19rZWVwYWxpdmVfbXNnX3R5cGUgKikKQEAgLTg3MCw3ICs4NjUsNyBAQAogCQl7CiAJCQl1bnNpZ25lZCBpOwogCQkJZm9yIChpID0gMDsgaSA8IE1zZ0xlbmd0aDsgaSArPSAxNikgewotCQkJCURCRygiJTAzZDogIgorCQkJCXByX2RlYnVnKCIlMDNkOiAiCiAJCQkJCSIgJTAyeCAlMDJ4ICUwMnggJTAyeCIKIAkJCQkJIiAlMDJ4ICUwMnggJTAyeCAlMDJ4IgogCQkJCQkiICUwMnggJTAyeCAlMDJ4ICUwMngiCkBAIC05MDUsMTggKzkwMCwxOCBAQAogCQkJcm5kaXNfcGVyX2Rldl9wYXJhbXMgW2ldLnVzZWQgPSAxOwogCQkJcm5kaXNfcGVyX2Rldl9wYXJhbXMgW2ldLnJlc3BfYXZhaWwgPSByZXNwX2F2YWlsOwogCQkJcm5kaXNfcGVyX2Rldl9wYXJhbXMgW2ldLnYgPSB2OwotCQkJREJHKCIlczogY29uZmlnTnIgPSAlZFxuIiwgX19mdW5jX18sIGkpOworCQkJcHJfZGVidWcoIiVzOiBjb25maWdOciA9ICVkXG4iLCBfX2Z1bmNfXywgaSk7CiAJCQlyZXR1cm4gaTsKIAkJfQogCX0KLQlEQkcoImZhaWxlZFxuIik7CisJcHJfZGVidWcoImZhaWxlZFxuIik7CiAKIAlyZXR1cm4gLUVOT0RFVjsKIH0KIAogdm9pZCBybmRpc19kZXJlZ2lzdGVyIChpbnQgY29uZmlnTnIpCiB7Ci0JREJHKCIlczogXG4iLCBfX2Z1bmNfXyApOworCXByX2RlYnVnKCIlczogXG4iLCBfX2Z1bmNfXyk7CiAKIAlpZiAoY29uZmlnTnIgPj0gUk5ESVNfTUFYX0NPTkZJR1MpIHJldHVybjsKIAlybmRpc19wZXJfZGV2X3BhcmFtcyBbY29uZmlnTnJdLnVzZWQgPSAwOwpAQCAtOTI2LDcgKzkyMSw3IEBACiAKIGludCBybmRpc19zZXRfcGFyYW1fZGV2KHU4IGNvbmZpZ05yLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MTYgKmNkY19maWx0ZXIpCiB7Ci0JREJHKCIlczpcbiIsIF9fZnVuY19fICk7CisJcHJfZGVidWcoIiVzOlxuIiwgX19mdW5jX18pOwogCWlmICghZGV2KQogCQlyZXR1cm4gLUVJTlZBTDsKIAlpZiAoY29uZmlnTnIgPj0gUk5ESVNfTUFYX0NPTkZJR1MpIHJldHVybiAtMTsKQEAgLTkzOSw3ICs5MzQsNyBAQAogCiBpbnQgcm5kaXNfc2V0X3BhcmFtX3ZlbmRvciAodTggY29uZmlnTnIsIHUzMiB2ZW5kb3JJRCwgY29uc3QgY2hhciAqdmVuZG9yRGVzY3IpCiB7Ci0JREJHKCIlczpcbiIsIF9fZnVuY19fICk7CisJcHJfZGVidWcoIiVzOlxuIiwgX19mdW5jX18pOwogCWlmICghdmVuZG9yRGVzY3IpIHJldHVybiAtMTsKIAlpZiAoY29uZmlnTnIgPj0gUk5ESVNfTUFYX0NPTkZJR1MpIHJldHVybiAtMTsKIApAQCAtOTUxLDcgKzk0Niw3IEBACiAKIGludCBybmRpc19zZXRfcGFyYW1fbWVkaXVtICh1OCBjb25maWdOciwgdTMyIG1lZGl1bSwgdTMyIHNwZWVkKQogewotCURCRygiJXM6ICV1ICV1XG4iLCBfX2Z1bmNfXywgbWVkaXVtLCBzcGVlZCk7CisJcHJfZGVidWcoIiVzOiAldSAldVxuIiwgX19mdW5jX18sIG1lZGl1bSwgc3BlZWQpOwogCWlmIChjb25maWdOciA+PSBSTkRJU19NQVhfQ09ORklHUykgcmV0dXJuIC0xOwogCiAJcm5kaXNfcGVyX2Rldl9wYXJhbXMgW2NvbmZpZ05yXS5tZWRpdW0gPSBtZWRpdW07CkBAIC0xMTE0LDcgKzExMDksNyBAQAogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQlpZiAoZmxfc3BlZWQpIHAtPnNwZWVkID0gc3BlZWQ7Ci0JCQllbHNlIERCRygiJWMgaXMgbm90IHZhbGlkXG4iLCBjKTsKKwkJCWVsc2UgcHJfZGVidWcoIiVjIGlzIG5vdCB2YWxpZFxuIiwgYyk7CiAJCQlicmVhazsKIAkJfQogCkBAIC0xMTU5LDEyICsxMTU0LDEyIEBACiAJCQkJCSZybmRpc19wcm9jX2ZvcHMsCiAJCQkJCSh2b2lkICopKHJuZGlzX3Blcl9kZXZfcGFyYW1zICsgaSkpKSkKIAkJewotCQkJREJHKCIlcyA6cmVtb3ZlIGVudHJpZXMiLCBfX2Z1bmNfXyk7CisJCQlwcl9kZWJ1ZygiJXMgOnJlbW92ZSBlbnRyaWVzIiwgX19mdW5jX18pOwogCQkJd2hpbGUgKGkpIHsKIAkJCQlzcHJpbnRmIChuYW1lLCBOQU1FX1RFTVBMQVRFLCAtLWkpOwogCQkJCXJlbW92ZV9wcm9jX2VudHJ5IChuYW1lLCBOVUxMKTsKIAkJCX0KLQkJCURCRygiXG4iKTsKKwkJCXByX2RlYnVnKCJcbiIpOwogCQkJcmV0dXJuIC1FSU87CiAJCX0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L3MzYzI0MTBfdWRjLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvczNjMjQxMF91ZGMuYwppbmRleCAyOWQxM2ViLi40OGY1MWIxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvczNjMjQxMF91ZGMuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvczNjMjQxMF91ZGMuYwpAQCAtMTY1MSw3ICsxNjUxLDcgQEAKIAkJcmV0dXJuIC1FQlVTWTsKIAogCWlmICghZHJpdmVyLT5iaW5kIHx8ICFkcml2ZXItPnNldHVwCi0JCQl8fCBkcml2ZXItPnNwZWVkICE9IFVTQl9TUEVFRF9GVUxMKSB7CisJCQl8fCBkcml2ZXItPnNwZWVkIDwgVVNCX1NQRUVEX0ZVTEwpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJJbnZhbGlkIGRyaXZlcjogYmluZCAlcCBzZXR1cCAlcCBzcGVlZCAlZFxuIiwKIAkJCWRyaXZlci0+YmluZCwgZHJpdmVyLT5zZXR1cCwgZHJpdmVyLT5zcGVlZCk7CiAJCXJldHVybiAtRUlOVkFMOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L3NlcmlhbC5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L3NlcmlhbC5jCmluZGV4IGIzNjk5YWYuLjM3ODc5YWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9zZXJpYWwuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvc2VyaWFsLmMKQEAgLTMwLDYgKzMwLDI1IEBACiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKKy8qCisgKiBLYnVpbGQgaXMgbm90IHZlcnkgY29vcGVyYXRpdmUgd2l0aCByZXNwZWN0IHRvIGxpbmtpbmcgc2VwYXJhdGVseQorICogY29tcGlsZWQgbGlicmFyeSBvYmplY3RzIGludG8gb25lIG1vZHVsZS4gIFNvIGZvciBub3cgd2Ugd29uJ3QgdXNlCisgKiBzZXBhcmF0ZSBjb21waWxhdGlvbiAuLi4gZW5zdXJpbmcgaW5pdC9leGl0IHNlY3Rpb25zIHdvcmsgdG8gc2hyaW5rCisgKiB0aGUgcnVudGltZSBmb290cHJpbnQsIGFuZCBnaXZpbmcgdXMgYXQgbGVhc3Qgc29tZSBwYXJ0cyBvZiB3aGF0CisgKiBhICJnY2MgLS1jb21iaW5lIC4uLiBwYXJ0MS5jIHBhcnQyLmMgcGFydDMuYyAuLi4gIiBidWlsZCB3b3VsZC4KKyAqLworI2luY2x1ZGUgImNvbXBvc2l0ZS5jIgorI2luY2x1ZGUgInVzYnN0cmluZy5jIgorI2luY2x1ZGUgImNvbmZpZy5jIgorI2luY2x1ZGUgImVwYXV0b2NvbmYuYyIKKworI2luY2x1ZGUgImZfYWNtLmMiCisjaW5jbHVkZSAiZl9vYmV4LmMiCisjaW5jbHVkZSAiZl9zZXJpYWwuYyIKKyNpbmNsdWRlICJ1X3NlcmlhbC5jIgorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCiAvKiBUaGFua3MgdG8gTmV0Q2hpcCBUZWNobm9sb2dpZXMgZm9yIGRvbmF0aW5nIHRoaXMgcHJvZHVjdCBJRC4KICoKICogRE8gTk9UIFJFVVNFIFRIRVNFIElEcyB3aXRoIGEgcHJvdG9jb2wtaW5jb21wYXRpYmxlIGRyaXZlciEhICBFdmVyISEKQEAgLTM4LDYgKzU3LDcgQEAKICNkZWZpbmUgR1NfVkVORE9SX0lECQkJMHgwNTI1CS8qIE5ldENoaXAgKi8KICNkZWZpbmUgR1NfUFJPRFVDVF9JRAkJCTB4YTRhNgkvKiBMaW51eC1VU0IgU2VyaWFsIEdhZGdldCAqLwogI2RlZmluZSBHU19DRENfUFJPRFVDVF9JRAkJMHhhNGE3CS8qIC4uLiBhcyBDREMtQUNNICovCisjZGVmaW5lIEdTX0NEQ19PQkVYX1BST0RVQ1RfSUQJCTB4YTRhOQkvKiAuLi4gYXMgQ0RDLU9CRVggKi8KIAogLyogc3RyaW5nIElEcyBhcmUgYXNzaWduZWQgZHluYW1pY2FsbHkgKi8KIApAQCAtMTA3LDYgKzEyNywxMCBAQAogbW9kdWxlX3BhcmFtKHVzZV9hY20sIGJvb2wsIDApOwogTU9EVUxFX1BBUk1fREVTQyh1c2VfYWNtLCAiVXNlIENEQyBBQ00sIGRlZmF1bHQ9eWVzIik7CiAKK3N0YXRpYyBpbnQgdXNlX29iZXggPSBmYWxzZTsKK21vZHVsZV9wYXJhbSh1c2Vfb2JleCwgYm9vbCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKHVzZV9vYmV4LCAiVXNlIENEQyBPQkVYLCBkZWZhdWx0PW5vIik7CisKIHN0YXRpYyB1bnNpZ25lZCBuX3BvcnRzID0gMTsKIG1vZHVsZV9wYXJhbShuX3BvcnRzLCB1aW50LCAwKTsKIE1PRFVMRV9QQVJNX0RFU0Mobl9wb3J0cywgIm51bWJlciBvZiBwb3J0cyB0byBjcmVhdGUsIGRlZmF1bHQ9MSIpOwpAQCAtMTIxLDYgKzE0NSw4IEBACiAJZm9yIChpID0gMDsgaSA8IG5fcG9ydHMgJiYgc3RhdHVzID09IDA7IGkrKykgewogCQlpZiAodXNlX2FjbSkKIAkJCXN0YXR1cyA9IGFjbV9iaW5kX2NvbmZpZyhjLCBpKTsKKwkJZWxzZSBpZiAodXNlX29iZXgpCisJCQlzdGF0dXMgPSBvYmV4X2JpbmRfY29uZmlnKGMsIGkpOwogCQllbHNlCiAJCQlzdGF0dXMgPSBnc2VyX2JpbmRfY29uZmlnKGMsIGkpOwogCX0KQEAgLTEzMyw3ICsxNTksNiBAQAogCS8qIC5iQ29uZmlndXJhdGlvblZhbHVlID0gZih1c2VfYWNtKSAqLwogCS8qIC5pQ29uZmlndXJhdGlvbiA9IERZTkFNSUMgKi8KIAkuYm1BdHRyaWJ1dGVzCT0gVVNCX0NPTkZJR19BVFRfU0VMRlBPV0VSLAotCS5iTWF4UG93ZXIJPSAxLAkvKiAyIG1BLCBtaW5pbWFsICovCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBnc19iaW5kKHN0cnVjdCB1c2JfY29tcG9zaXRlX2RldiAqY2RldikKQEAgLTIzMSw2ICsyNTYsMTIgQEAKIAkJZGV2aWNlX2Rlc2MuYkRldmljZUNsYXNzID0gVVNCX0NMQVNTX0NPTU07CiAJCWRldmljZV9kZXNjLmlkUHJvZHVjdCA9CiAJCQkJX19jb25zdGFudF9jcHVfdG9fbGUxNihHU19DRENfUFJPRFVDVF9JRCk7CisJfSBlbHNlIGlmICh1c2Vfb2JleCkgeworCQlzZXJpYWxfY29uZmlnX2RyaXZlci5sYWJlbCA9ICJDREMgT0JFWCBjb25maWciOworCQlzZXJpYWxfY29uZmlnX2RyaXZlci5iQ29uZmlndXJhdGlvblZhbHVlID0gMzsKKwkJZGV2aWNlX2Rlc2MuYkRldmljZUNsYXNzID0gVVNCX0NMQVNTX0NPTU07CisJCWRldmljZV9kZXNjLmlkUHJvZHVjdCA9CisJCQlfX2NvbnN0YW50X2NwdV90b19sZTE2KEdTX0NEQ19PQkVYX1BST0RVQ1RfSUQpOwogCX0gZWxzZSB7CiAJCXNlcmlhbF9jb25maWdfZHJpdmVyLmxhYmVsID0gIkdlbmVyaWMgU2VyaWFsIGNvbmZpZyI7CiAJCXNlcmlhbF9jb25maWdfZHJpdmVyLmJDb25maWd1cmF0aW9uVmFsdWUgPSAxOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L3VfZXRoZXIuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC91X2V0aGVyLmMKaW5kZXggMzc5MWU2Mi4uNjY5NDhiNyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L3VfZXRoZXIuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvdV9ldGhlci5jCkBAIC01Miw3ICs1Miw3IEBACiAgKiB0aGlzIHNpbmdsZSAicGh5c2ljYWwiIGxpbmsgdG8gYmUgdXNlZCBieSBtdWx0aXBsZSB2aXJ0dWFsIGxpbmtzLikKICAqLwogCi0jZGVmaW5lIERSSVZFUl9WRVJTSU9OCSIyOS1NYXktMjAwOCIKKyNkZWZpbmUgVUVUSF9fVkVSU0lPTgkiMjktTWF5LTIwMDgiCiAKIHN0cnVjdCBldGhfZGV2IHsKIAkvKiBsb2NrIGlzIGhlbGQgd2hpbGUgYWNjZXNzaW5nIHBvcnRfdXNiCkBAIC0xNzAsNyArMTcwLDcgQEAKIAlzdHJ1Y3QgZXRoX2RldgkqZGV2ID0gbmV0ZGV2X3ByaXYobmV0KTsKIAogCXN0cmxjcHkocC0+ZHJpdmVyLCAiZ19ldGhlciIsIHNpemVvZiBwLT5kcml2ZXIpOwotCXN0cmxjcHkocC0+dmVyc2lvbiwgRFJJVkVSX1ZFUlNJT04sIHNpemVvZiBwLT52ZXJzaW9uKTsKKwlzdHJsY3B5KHAtPnZlcnNpb24sIFVFVEhfX1ZFUlNJT04sIHNpemVvZiBwLT52ZXJzaW9uKTsKIAlzdHJsY3B5KHAtPmZ3X3ZlcnNpb24sIGRldi0+Z2FkZ2V0LT5uYW1lLCBzaXplb2YgcC0+ZndfdmVyc2lvbik7CiAJc3RybGNweShwLT5idXNfaW5mbywgZGV2X25hbWUoJmRldi0+Z2FkZ2V0LT5kZXYpLCBzaXplb2YgcC0+YnVzX2luZm8pOwogfQpAQCAtODczLDYgKzg3MywxMyBAQAogCQlzcGluX2xvY2soJmRldi0+bG9jayk7CiAJCWRldi0+cG9ydF91c2IgPSBsaW5rOwogCQlsaW5rLT5pb3BvcnQgPSBkZXY7CisJCWlmIChuZXRpZl9ydW5uaW5nKGRldi0+bmV0KSkgeworCQkJaWYgKGxpbmstPm9wZW4pCisJCQkJbGluay0+b3BlbihsaW5rKTsKKwkJfSBlbHNlIHsKKwkJCWlmIChsaW5rLT5jbG9zZSkKKwkJCQlsaW5rLT5jbG9zZShsaW5rKTsKKwkJfQogCQlzcGluX3VubG9jaygmZGV2LT5sb2NrKTsKIAogCQluZXRpZl9jYXJyaWVyX29uKGRldi0+bmV0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC91X3NlcmlhbC5oIGIvZHJpdmVycy91c2IvZ2FkZ2V0L3Vfc2VyaWFsLmgKaW5kZXggYWYzOTEwZC4uMzAwZjBlZCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L3Vfc2VyaWFsLmgKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L3Vfc2VyaWFsLmgKQEAgLTYyLDUgKzYyLDYgQEAKIC8qIGZ1bmN0aW9ucyBhcmUgYm91bmQgdG8gY29uZmlndXJhdGlvbnMgYnkgYSBjb25maWcgb3IgZ2FkZ2V0IGRyaXZlciAqLwogaW50IGFjbV9iaW5kX2NvbmZpZyhzdHJ1Y3QgdXNiX2NvbmZpZ3VyYXRpb24gKmMsIHU4IHBvcnRfbnVtKTsKIGludCBnc2VyX2JpbmRfY29uZmlnKHN0cnVjdCB1c2JfY29uZmlndXJhdGlvbiAqYywgdTggcG9ydF9udW0pOworaW50IG9iZXhfYmluZF9jb25maWcoc3RydWN0IHVzYl9jb25maWd1cmF0aW9uICpjLCB1OCBwb3J0X251bSk7CiAKICNlbmRpZiAvKiBfX1VfU0VSSUFMX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC96ZXJvLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvemVyby5jCmluZGV4IGFhMGJkNGYuLjM2MWQ5NjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC96ZXJvLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L3plcm8uYwpAQCAtNTksNiArNTksMjMgQEAKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAorLyoKKyAqIEtidWlsZCBpcyBub3QgdmVyeSBjb29wZXJhdGl2ZSB3aXRoIHJlc3BlY3QgdG8gbGlua2luZyBzZXBhcmF0ZWx5CisgKiBjb21waWxlZCBsaWJyYXJ5IG9iamVjdHMgaW50byBvbmUgbW9kdWxlLiAgU28gZm9yIG5vdyB3ZSB3b24ndCB1c2UKKyAqIHNlcGFyYXRlIGNvbXBpbGF0aW9uIC4uLiBlbnN1cmluZyBpbml0L2V4aXQgc2VjdGlvbnMgd29yayB0byBzaHJpbmsKKyAqIHRoZSBydW50aW1lIGZvb3RwcmludCwgYW5kIGdpdmluZyB1cyBhdCBsZWFzdCBzb21lIHBhcnRzIG9mIHdoYXQKKyAqIGEgImdjYyAtLWNvbWJpbmUgLi4uIHBhcnQxLmMgcGFydDIuYyBwYXJ0My5jIC4uLiAiIGJ1aWxkIHdvdWxkLgorICovCisjaW5jbHVkZSAiY29tcG9zaXRlLmMiCisjaW5jbHVkZSAidXNic3RyaW5nLmMiCisjaW5jbHVkZSAiY29uZmlnLmMiCisjaW5jbHVkZSAiZXBhdXRvY29uZi5jIgorCisjaW5jbHVkZSAiZl9zb3VyY2VzaW5rLmMiCisjaW5jbHVkZSAiZl9sb29wYmFjay5jIgorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCiAjZGVmaW5lIERSSVZFUl9WRVJTSU9OCQkiQ2luY28gZGUgTWF5byAyMDA4IgogCiBzdGF0aWMgY29uc3QgY2hhciBsb25nbmFtZVtdID0gIkdhZGdldCBaZXJvIjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1kYmcuYyBiL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1kYmcuYwppbmRleCBiMGY4ZWQ1Li4wY2I1M2NhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktZGJnLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9laGNpLWRiZy5jCkBAIC0zNTgsNyArMzU4LDggQEAKIAlzdHJ1Y3QgdXNiX2J1cyAqYnVzOwogCXN0cnVjdCBtdXRleCBtdXRleDsJLyogcHJvdGVjdCBmaWxsaW5nIG9mIGJ1ZmZlciAqLwogCXNpemVfdCBjb3VudDsJCS8qIG51bWJlciBvZiBjaGFyYWN0ZXJzIGZpbGxlZCBpbnRvIGJ1ZmZlciAqLwotCWNoYXIgKnBhZ2U7CisJY2hhciAqb3V0cHV0X2J1ZjsKKwlzaXplX3QgYWxsb2Nfc2l6ZTsKIH07CiAKICNkZWZpbmUgc3BlZWRfY2hhcihpbmZvMSkgKHsgY2hhciB0bXA7IFwKQEAgLTQ4OCw4ICs0ODksOCBAQAogCiAJaGNkID0gYnVzX3RvX2hjZChidWYtPmJ1cyk7CiAJZWhjaSA9IGhjZF90b19laGNpIChoY2QpOwotCW5leHQgPSBidWYtPnBhZ2U7Ci0Jc2l6ZSA9IFBBR0VfU0laRTsKKwluZXh0ID0gYnVmLT5vdXRwdXRfYnVmOworCXNpemUgPSBidWYtPmFsbG9jX3NpemU7CiAKIAkqbmV4dCA9IDA7CiAKQEAgLTUxMCw3ICs1MTEsNyBAQAogCX0KIAlzcGluX3VubG9ja19pcnFyZXN0b3JlICgmZWhjaS0+bG9jaywgZmxhZ3MpOwogCi0JcmV0dXJuIHN0cmxlbihidWYtPnBhZ2UpOworCXJldHVybiBzdHJsZW4oYnVmLT5vdXRwdXRfYnVmKTsKIH0KIAogI2RlZmluZSBEQkdfU0NIRURfTElNSVQgNjQKQEAgLTUzMSw4ICs1MzIsOCBAQAogCiAJaGNkID0gYnVzX3RvX2hjZChidWYtPmJ1cyk7CiAJZWhjaSA9IGhjZF90b19laGNpIChoY2QpOwotCW5leHQgPSBidWYtPnBhZ2U7Ci0Jc2l6ZSA9IFBBR0VfU0laRTsKKwluZXh0ID0gYnVmLT5vdXRwdXRfYnVmOworCXNpemUgPSBidWYtPmFsbG9jX3NpemU7CiAKIAl0ZW1wID0gc2NucHJpbnRmIChuZXh0LCBzaXplLCAic2l6ZSA9ICVkXG4iLCBlaGNpLT5wZXJpb2RpY19zaXplKTsKIAlzaXplIC09IHRlbXA7CkBAIC01NjgsMTQgKzU2OSwxNiBAQAogCQkJCWZvciAodGVtcCA9IDA7IHRlbXAgPCBzZWVuX2NvdW50OyB0ZW1wKyspIHsKIAkJCQkJaWYgKHNlZW4gW3RlbXBdLnB0ciAhPSBwLnB0cikKIAkJCQkJCWNvbnRpbnVlOwotCQkJCQlpZiAocC5xaC0+cWhfbmV4dC5wdHIpCisJCQkJCWlmIChwLnFoLT5xaF9uZXh0LnB0cikgewogCQkJCQkJdGVtcCA9IHNjbnByaW50ZiAobmV4dCwgc2l6ZSwKIAkJCQkJCQkiIC4uLiIpOwotCQkJCQlwLnB0ciA9IE5VTEw7CisJCQkJCQlzaXplIC09IHRlbXA7CisJCQkJCQluZXh0ICs9IHRlbXA7CisJCQkJCX0KIAkJCQkJYnJlYWs7CiAJCQkJfQogCQkJCS8qIHNob3cgbW9yZSBpbmZvIHRoZSBmaXJzdCB0aW1lIGFyb3VuZCAqLwotCQkJCWlmICh0ZW1wID09IHNlZW5fY291bnQgJiYgcC5wdHIpIHsKKwkJCQlpZiAodGVtcCA9PSBzZWVuX2NvdW50KSB7CiAJCQkJCXUzMglzY3JhdGNoID0gaGMzMl90b19jcHVwKGVoY2ksCiAJCQkJCQkJJnAucWgtPmh3X2luZm8xKTsKIAkJCQkJc3RydWN0IGVoY2lfcXRkCSpxdGQ7CkBAIC02NDksNyArNjUyLDcgQEAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlICgmZWhjaS0+bG9jaywgZmxhZ3MpOwogCWtmcmVlIChzZWVuKTsKIAotCXJldHVybiBQQUdFX1NJWkUgLSBzaXplOworCXJldHVybiBidWYtPmFsbG9jX3NpemUgLSBzaXplOwogfQogI3VuZGVmIERCR19TQ0hFRF9MSU1JVAogCkBAIC02NjUsMTQgKzY2OCwxNCBAQAogCiAJaGNkID0gYnVzX3RvX2hjZChidWYtPmJ1cyk7CiAJZWhjaSA9IGhjZF90b19laGNpIChoY2QpOwotCW5leHQgPSBidWYtPnBhZ2U7Ci0Jc2l6ZSA9IFBBR0VfU0laRTsKKwluZXh0ID0gYnVmLT5vdXRwdXRfYnVmOworCXNpemUgPSBidWYtPmFsbG9jX3NpemU7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSAoJmVoY2ktPmxvY2ssIGZsYWdzKTsKIAogCWlmICghdGVzdF9iaXQoSENEX0ZMQUdfSFdfQUNDRVNTSUJMRSwgJmhjZC0+ZmxhZ3MpKSB7CiAJCXNpemUgPSBzY25wcmludGYgKG5leHQsIHNpemUsCi0JCQkiYnVzICVzLCBkZXZpY2UgJXMgKGRyaXZlciAiIERSSVZFUl9WRVJTSU9OICIpXG4iCisJCQkiYnVzICVzLCBkZXZpY2UgJXNcbiIKIAkJCSIlc1xuIgogCQkJIlNVU1BFTkRFRCAobm8gcmVnaXN0ZXIgYWNjZXNzKVxuIiwKIAkJCWhjZC0+c2VsZi5jb250cm9sbGVyLT5idXMtPm5hbWUsCkBAIC02ODQsNyArNjg3LDcgQEAKIAkvKiBDYXBhYmlsaXR5IFJlZ2lzdGVycyAqLwogCWkgPSBIQ19WRVJTSU9OKGVoY2lfcmVhZGwoZWhjaSwgJmVoY2ktPmNhcHMtPmhjX2NhcGJhc2UpKTsKIAl0ZW1wID0gc2NucHJpbnRmIChuZXh0LCBzaXplLAotCQkiYnVzICVzLCBkZXZpY2UgJXMgKGRyaXZlciAiIERSSVZFUl9WRVJTSU9OICIpXG4iCisJCSJidXMgJXMsIGRldmljZSAlc1xuIgogCQkiJXNcbiIKIAkJIkVIQ0kgJXguJTAyeCwgaGNkIHN0YXRlICVkXG4iLAogCQloY2QtPnNlbGYuY29udHJvbGxlci0+YnVzLT5uYW1lLApAQCAtODA4LDcgKzgxMSw3IEBACiBkb25lOgogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUgKCZlaGNpLT5sb2NrLCBmbGFncyk7CiAKLQlyZXR1cm4gUEFHRV9TSVpFIC0gc2l6ZTsKKwlyZXR1cm4gYnVmLT5hbGxvY19zaXplIC0gc2l6ZTsKIH0KIAogc3RhdGljIHN0cnVjdCBkZWJ1Z19idWZmZXIgKmFsbG9jX2J1ZmZlcihzdHJ1Y3QgdXNiX2J1cyAqYnVzLApAQCAtODIyLDYgKzgyNSw3IEBACiAJCWJ1Zi0+YnVzID0gYnVzOwogCQlidWYtPmZpbGxfZnVuYyA9IGZpbGxfZnVuYzsKIAkJbXV0ZXhfaW5pdCgmYnVmLT5tdXRleCk7CisJCWJ1Zi0+YWxsb2Nfc2l6ZSA9IFBBR0VfU0laRTsKIAl9CiAKIAlyZXR1cm4gYnVmOwpAQCAtODMxLDEwICs4MzUsMTAgQEAKIHsKIAlpbnQgcmV0ID0gMDsKIAotCWlmICghYnVmLT5wYWdlKQotCQlidWYtPnBhZ2UgPSAoY2hhciAqKWdldF96ZXJvZWRfcGFnZShHRlBfS0VSTkVMKTsKKwlpZiAoIWJ1Zi0+b3V0cHV0X2J1ZikKKwkJYnVmLT5vdXRwdXRfYnVmID0gKGNoYXIgKil2bWFsbG9jKGJ1Zi0+YWxsb2Nfc2l6ZSk7CiAKLQlpZiAoIWJ1Zi0+cGFnZSkgeworCWlmICghYnVmLT5vdXRwdXRfYnVmKSB7CiAJCXJldCA9IC1FTk9NRU07CiAJCWdvdG8gb3V0OwogCX0KQEAgLTg2Nyw3ICs4NzEsNyBAQAogCW11dGV4X3VubG9jaygmYnVmLT5tdXRleCk7CiAKIAlyZXQgPSBzaW1wbGVfcmVhZF9mcm9tX2J1ZmZlcih1c2VyX2J1ZiwgbGVuLCBvZmZzZXQsCi0JCQkJICAgICAgYnVmLT5wYWdlLCBidWYtPmNvdW50KTsKKwkJCQkgICAgICBidWYtPm91dHB1dF9idWYsIGJ1Zi0+Y291bnQpOwogCiBvdXQ6CiAJcmV0dXJuIHJldDsKQEAgLTg3OSw4ICs4ODMsOCBAQAogCXN0cnVjdCBkZWJ1Z19idWZmZXIgKmJ1ZiA9IGZpbGUtPnByaXZhdGVfZGF0YTsKIAogCWlmIChidWYpIHsKLQkJaWYgKGJ1Zi0+cGFnZSkKLQkJCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZylidWYtPnBhZ2UpOworCQlpZiAoYnVmLT5vdXRwdXRfYnVmKQorCQkJdmZyZWUoYnVmLT5vdXRwdXRfYnVmKTsKIAkJa2ZyZWUoYnVmKTsKIAl9CiAKQEAgLTg5NSwxMCArODk5LDE0IEBACiAKIHN0YXRpYyBpbnQgZGVidWdfcGVyaW9kaWNfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKLQlmaWxlLT5wcml2YXRlX2RhdGEgPSBhbGxvY19idWZmZXIoaW5vZGUtPmlfcHJpdmF0ZSwKLQkJCQkJICBmaWxsX3BlcmlvZGljX2J1ZmZlcik7CisJc3RydWN0IGRlYnVnX2J1ZmZlciAqYnVmOworCWJ1ZiA9IGFsbG9jX2J1ZmZlcihpbm9kZS0+aV9wcml2YXRlLCBmaWxsX3BlcmlvZGljX2J1ZmZlcik7CisJaWYgKCFidWYpCisJCXJldHVybiAtRU5PTUVNOwogCi0JcmV0dXJuIGZpbGUtPnByaXZhdGVfZGF0YSA/IDAgOiAtRU5PTUVNOworCWJ1Zi0+YWxsb2Nfc2l6ZSA9IChzaXplb2Yodm9pZCAqKSA9PSA0ID8gNiA6IDgpKlBBR0VfU0laRTsKKwlmaWxlLT5wcml2YXRlX2RhdGEgPSBidWY7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgZGVidWdfcmVnaXN0ZXJzX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktaGNkLmMgYi9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktaGNkLmMKaW5kZXggODQwOWUwNy4uZDM0M2FmYSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9laGNpLWhjZC5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1oY2QuYwpAQCAtMjQsNiArMjQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC90aW1lci5oPgpAQCAtNTksNyArNjAsNiBAQAogICogcHJvdmlkaW5nIGVhcmx5IGRldmljZXMgZm9yIHRob3NlIGhvc3QgY29udHJvbGxlcnMgdG8gdGFsayB0byEKICAqLwogCi0jZGVmaW5lIERSSVZFUl9WRVJTSU9OICIxMCBEZWMgMjAwNCIKICNkZWZpbmUgRFJJVkVSX0FVVEhPUiAiRGF2aWQgQnJvd25lbGwiCiAjZGVmaW5lIERSSVZFUl9ERVNDICJVU0IgMi4wICdFbmhhbmNlZCcgSG9zdCBDb250cm9sbGVyIChFSENJKSBEcml2ZXIiCiAKQEAgLTYyMCw5ICs2MjAsOSBAQAogCiAJdGVtcCA9IEhDX1ZFUlNJT04oZWhjaV9yZWFkbChlaGNpLCAmZWhjaS0+Y2Fwcy0+aGNfY2FwYmFzZSkpOwogCWVoY2lfaW5mbyAoZWhjaSwKLQkJIlVTQiAleC4leCBzdGFydGVkLCBFSENJICV4LiUwMngsIGRyaXZlciAlcyVzXG4iLAorCQkiVVNCICV4LiV4IHN0YXJ0ZWQsIEVIQ0kgJXguJTAyeCVzXG4iLAogCQkoKGVoY2ktPnNicm4gJiAweGYwKT4+NCksIChlaGNpLT5zYnJuICYgMHgwZiksCi0JCXRlbXAgPj4gOCwgdGVtcCAmIDB4ZmYsIERSSVZFUl9WRVJTSU9OLAorCQl0ZW1wID4+IDgsIHRlbXAgJiAweGZmLAogCQlpZ25vcmVfb2MgPyAiLCBvdmVyY3VycmVudCBpZ25vcmVkIiA6ICIiKTsKIAogCWVoY2lfd3JpdGVsKGVoY2ksIElOVFJfTUFTSywKQEAgLTcwNiw3ICs3MDYsNyBAQAogCQlwY2Rfc3RhdHVzID0gc3RhdHVzOwogCiAJCS8qIHJlc3VtZSByb290IGh1Yj8gKi8KLQkJaWYgKCEoZWhjaV9yZWFkbChlaGNpLCAmZWhjaS0+cmVncy0+Y29tbWFuZCkgJiBDTURfUlVOKSkKKwkJaWYgKCEoY21kICYgQ01EX1JVTikpCiAJCQl1c2JfaGNkX3Jlc3VtZV9yb290X2h1YihoY2QpOwogCiAJCXdoaWxlIChpLS0pIHsKQEAgLTcxNSw4ICs3MTUsMTEgQEAKIAogCQkJaWYgKHBzdGF0dXMgJiBQT1JUX09XTkVSKQogCQkJCWNvbnRpbnVlOwotCQkJaWYgKCEocHN0YXR1cyAmIFBPUlRfUkVTVU1FKQotCQkJCQl8fCBlaGNpLT5yZXNldF9kb25lIFtpXSAhPSAwKQorCQkJaWYgKCEodGVzdF9iaXQoaSwgJmVoY2ktPnN1c3BlbmRlZF9wb3J0cykgJiYKKwkJCQkJKChwc3RhdHVzICYgUE9SVF9SRVNVTUUpIHx8CisJCQkJCQkhKHBzdGF0dXMgJiBQT1JUX1NVU1BFTkQpKSAmJgorCQkJCQkocHN0YXR1cyAmIFBPUlRfUEUpICYmCisJCQkJCWVoY2ktPnJlc2V0X2RvbmVbaV0gPT0gMCkpCiAJCQkJY29udGludWU7CiAKIAkJCS8qIHN0YXJ0IDIwIG1zZWMgcmVzdW1lIHNpZ25hbGluZyBmcm9tIHRoaXMgcG9ydCwKQEAgLTczMSw5ICs3MzQsOCBAQAogCiAJLyogUENJIGVycm9ycyBbNC4xNS4yLjRdICovCiAJaWYgKHVubGlrZWx5ICgoc3RhdHVzICYgU1RTX0ZBVEFMKSAhPSAwKSkgewotCQlkYmdfY21kIChlaGNpLCAiZmF0YWwiLCBlaGNpX3JlYWRsKGVoY2ksCi0JCQkJCQkgICAmZWhjaS0+cmVncy0+Y29tbWFuZCkpOwotCQlkYmdfc3RhdHVzIChlaGNpLCAiZmF0YWwiLCBzdGF0dXMpOworCQlkYmdfY21kKGVoY2ksICJmYXRhbCIsIGNtZCk7CisJCWRiZ19zdGF0dXMoZWhjaSwgImZhdGFsIiwgc3RhdHVzKTsKIAkJaWYgKHN0YXR1cyAmIFNUU19IQUxUKSB7CiAJCQllaGNpX2VyciAoZWhjaSwgImZhdGFsIGVycm9yXG4iKTsKIGRlYWQ6CkBAIC05OTQsOSArOTk2LDcgQEAKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAotI2RlZmluZSBEUklWRVJfSU5GTyBEUklWRVJfVkVSU0lPTiAiICIgRFJJVkVSX0RFU0MKLQotTU9EVUxFX0RFU0NSSVBUSU9OIChEUklWRVJfSU5GTyk7CitNT0RVTEVfREVTQ1JJUFRJT04oRFJJVkVSX0RFU0MpOwogTU9EVUxFX0FVVEhPUiAoRFJJVkVSX0FVVEhPUik7CiBNT0RVTEVfTElDRU5TRSAoIkdQTCIpOwogCkBAIC0xMDIwLDExICsxMDIwLDYgQEAKICNkZWZpbmUJUFMzX1NZU1RFTV9CVVNfRFJJVkVSCXBzM19laGNpX2RyaXZlcgogI2VuZGlmCiAKLSNpZiBkZWZpbmVkKENPTkZJR180NDBFUFgpICYmICFkZWZpbmVkKENPTkZJR19QUENfTUVSR0UpCi0jaW5jbHVkZSAiZWhjaS1wcGMtc29jLmMiCi0jZGVmaW5lCVBMQVRGT1JNX0RSSVZFUgkJZWhjaV9wcGNfc29jX2RyaXZlcgotI2VuZGlmCi0KICNpZmRlZiBDT05GSUdfVVNCX0VIQ0lfSENEX1BQQ19PRgogI2luY2x1ZGUgImVoY2ktcHBjLW9mLmMiCiAjZGVmaW5lIE9GX1BMQVRGT1JNX0RSSVZFUgllaGNpX2hjZF9wcGNfb2ZfZHJpdmVyCkBAIC0xMDQ5LDYgKzEwNDQsMTYgQEAKIHsKIAlpbnQgcmV0dmFsID0gMDsKIAorCWlmICh1c2JfZGlzYWJsZWQoKSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlwcmludGsoS0VSTl9JTkZPICIlczogIiBEUklWRVJfREVTQyAiXG4iLCBoY2RfbmFtZSk7CisJc2V0X2JpdChVU0JfRUhDSV9MT0FERUQsICZ1c2JfaGNkc19sb2FkZWQpOworCWlmICh0ZXN0X2JpdChVU0JfVUhDSV9MT0FERUQsICZ1c2JfaGNkc19sb2FkZWQpIHx8CisJCQl0ZXN0X2JpdChVU0JfT0hDSV9MT0FERUQsICZ1c2JfaGNkc19sb2FkZWQpKQorCQlwcmludGsoS0VSTl9XQVJOSU5HICJXYXJuaW5nISBlaGNpX2hjZCBzaG91bGQgYWx3YXlzIGJlIGxvYWRlZCIKKwkJCQkiIGJlZm9yZSB1aGNpX2hjZCBhbmQgb2hjaV9oY2QsIG5vdCBhZnRlclxuIik7CisKIAlwcl9kZWJ1ZygiJXM6IGJsb2NrIHNpemVzOiBxaCAlWmQgcXRkICVaZCBpdGQgJVpkIHNpdGQgJVpkXG4iLAogCQkgaGNkX25hbWUsCiAJCSBzaXplb2Yoc3RydWN0IGVoY2lfcWgpLCBzaXplb2Yoc3RydWN0IGVoY2lfcXRkKSwKQEAgLTEwNTYsOCArMTA2MSwxMCBAQAogCiAjaWZkZWYgREVCVUcKIAllaGNpX2RlYnVnX3Jvb3QgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIoImVoY2kiLCBOVUxMKTsKLQlpZiAoIWVoY2lfZGVidWdfcm9vdCkKLQkJcmV0dXJuIC1FTk9FTlQ7CisJaWYgKCFlaGNpX2RlYnVnX3Jvb3QpIHsKKwkJcmV0dmFsID0gLUVOT0VOVDsKKwkJZ290byBlcnJfZGVidWc7CisJfQogI2VuZGlmCiAKICNpZmRlZiBQTEFURk9STV9EUklWRVIKQEAgLTExMDUsNiArMTExMiw4IEBACiAJZGVidWdmc19yZW1vdmUoZWhjaV9kZWJ1Z19yb290KTsKIAllaGNpX2RlYnVnX3Jvb3QgPSBOVUxMOwogI2VuZGlmCitlcnJfZGVidWc6CisJY2xlYXJfYml0KFVTQl9FSENJX0xPQURFRCwgJnVzYl9oY2RzX2xvYWRlZCk7CiAJcmV0dXJuIHJldHZhbDsKIH0KIG1vZHVsZV9pbml0KGVoY2lfaGNkX2luaXQpOwpAQCAtMTEyNiw2ICsxMTM1LDcgQEAKICNpZmRlZiBERUJVRwogCWRlYnVnZnNfcmVtb3ZlKGVoY2lfZGVidWdfcm9vdCk7CiAjZW5kaWYKKwljbGVhcl9iaXQoVVNCX0VIQ0lfTE9BREVELCAmdXNiX2hjZHNfbG9hZGVkKTsKIH0KIG1vZHVsZV9leGl0KGVoY2lfaGNkX2NsZWFudXApOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktaHViLmMgYi9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktaHViLmMKaW5kZXggNzQwODM1Yi4uMjE4Zjk2NiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9laGNpLWh1Yi5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1odWIuYwpAQCAtMjM2LDEwICsyMzYsOCBAQAogCQl0ZW1wID0gZWhjaV9yZWFkbChlaGNpLCAmZWhjaS0+cmVncy0+cG9ydF9zdGF0dXMgW2ldKTsKIAkJdGVtcCAmPSB+KFBPUlRfUldDX0JJVFMgfCBQT1JUX1dBS0VfQklUUyk7CiAJCWlmICh0ZXN0X2JpdChpLCAmZWhjaS0+YnVzX3N1c3BlbmRlZCkgJiYKLQkJCQkodGVtcCAmIFBPUlRfU1VTUEVORCkpIHsKLQkJCWVoY2ktPnJlc2V0X2RvbmUgW2ldID0gamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMgKDIwKTsKKwkJCQkodGVtcCAmIFBPUlRfU1VTUEVORCkpCiAJCQl0ZW1wIHw9IFBPUlRfUkVTVU1FOwotCQl9CiAJCWVoY2lfd3JpdGVsKGVoY2ksIHRlbXAsICZlaGNpLT5yZWdzLT5wb3J0X3N0YXR1cyBbaV0pOwogCX0KIAlpID0gSENTX05fUE9SVFMgKGVoY2ktPmhjc19wYXJhbXMpOwpAQCAtNDgyLDEwICs0ODAsOSBAQAogCQkgKiBjb250cm9sbGVyIGJ5IHRoZSB1c2VyLgogCQkgKi8KIAotCQlpZiAoKHRlbXAgJiBtYXNrKSAhPSAwCi0JCQkJfHwgKCh0ZW1wICYgUE9SVF9SRVNVTUUpICE9IDAKLQkJCQkJJiYgdGltZV9hZnRlcl9lcShqaWZmaWVzLAotCQkJCQkJZWhjaS0+cmVzZXRfZG9uZVtpXSkpKSB7CisJCWlmICgodGVtcCAmIG1hc2spICE9IDAgfHwgdGVzdF9iaXQoaSwgJmVoY2ktPnBvcnRfY19zdXNwZW5kKQorCQkJCXx8IChlaGNpLT5yZXNldF9kb25lW2ldICYmIHRpbWVfYWZ0ZXJfZXEoCisJCQkJCWppZmZpZXMsIGVoY2ktPnJlc2V0X2RvbmVbaV0pKSkgewogCQkJaWYgKGkgPCA3KQogCQkJICAgIGJ1ZiBbMF0gfD0gMSA8PCAoaSArIDEpOwogCQkJZWxzZQpAQCAtNjg4LDYgKzY4NSw3IEBACiAJCQkvKiByZXN1bWUgY29tcGxldGVkPyAqLwogCQkJZWxzZSBpZiAodGltZV9hZnRlcl9lcShqaWZmaWVzLAogCQkJCQllaGNpLT5yZXNldF9kb25lW3dJbmRleF0pKSB7CisJCQkJY2xlYXJfYml0KHdJbmRleCwgJmVoY2ktPnN1c3BlbmRlZF9wb3J0cyk7CiAJCQkJc2V0X2JpdCh3SW5kZXgsICZlaGNpLT5wb3J0X2Nfc3VzcGVuZCk7CiAJCQkJZWhjaS0+cmVzZXRfZG9uZVt3SW5kZXhdID0gMDsKIApAQCAtNzM0LDYgKzczMiw5IEBACiAJCQkJCWVoY2lfcmVhZGwoZWhjaSwgc3RhdHVzX3JlZykpOwogCQl9CiAKKwkJaWYgKCEodGVtcCAmIChQT1JUX1JFU1VNRXxQT1JUX1JFU0VUKSkpCisJCQllaGNpLT5yZXNldF9kb25lW3dJbmRleF0gPSAwOworCiAJCS8qIHRyYW5zZmVyIGRlZGljYXRlZCBwb3J0cyB0byB0aGUgY29tcGFuaW9uIGhjICovCiAJCWlmICgodGVtcCAmIFBPUlRfQ09OTkVDVCkgJiYKIAkJCQl0ZXN0X2JpdCh3SW5kZXgsICZlaGNpLT5jb21wYW5pb25fcG9ydHMpKSB7CkBAIC03NTcsOCArNzU4LDE3IEBACiAJCX0KIAkJaWYgKHRlbXAgJiBQT1JUX1BFKQogCQkJc3RhdHVzIHw9IDEgPDwgVVNCX1BPUlRfRkVBVF9FTkFCTEU7Ci0JCWlmICh0ZW1wICYgKFBPUlRfU1VTUEVORHxQT1JUX1JFU1VNRSkpCisKKwkJLyogbWF5YmUgdGhlIHBvcnQgd2FzIHVuc3VzcGVuZGVkIHdpdGhvdXQgb3VyIGtub3dsZWRnZSAqLworCQlpZiAodGVtcCAmIChQT1JUX1NVU1BFTkR8UE9SVF9SRVNVTUUpKSB7CiAJCQlzdGF0dXMgfD0gMSA8PCBVU0JfUE9SVF9GRUFUX1NVU1BFTkQ7CisJCX0gZWxzZSBpZiAodGVzdF9iaXQod0luZGV4LCAmZWhjaS0+c3VzcGVuZGVkX3BvcnRzKSkgeworCQkJY2xlYXJfYml0KHdJbmRleCwgJmVoY2ktPnN1c3BlbmRlZF9wb3J0cyk7CisJCQllaGNpLT5yZXNldF9kb25lW3dJbmRleF0gPSAwOworCQkJaWYgKHRlbXAgJiBQT1JUX1BFKQorCQkJCXNldF9iaXQod0luZGV4LCAmZWhjaS0+cG9ydF9jX3N1c3BlbmQpOworCQl9CisKIAkJaWYgKHRlbXAgJiBQT1JUX09DKQogCQkJc3RhdHVzIHw9IDEgPDwgVVNCX1BPUlRfRkVBVF9PVkVSX0NVUlJFTlQ7CiAJCWlmICh0ZW1wICYgUE9SVF9SRVNFVCkKQEAgLTgwMyw2ICs4MTMsNyBAQAogCQkJCQl8fCAodGVtcCAmIFBPUlRfUkVTRVQpICE9IDApCiAJCQkJZ290byBlcnJvcjsKIAkJCWVoY2lfd3JpdGVsKGVoY2ksIHRlbXAgfCBQT1JUX1NVU1BFTkQsIHN0YXR1c19yZWcpOworCQkJc2V0X2JpdCh3SW5kZXgsICZlaGNpLT5zdXNwZW5kZWRfcG9ydHMpOwogCQkJYnJlYWs7CiAJCWNhc2UgVVNCX1BPUlRfRkVBVF9QT1dFUjoKIAkJCWlmIChIQ1NfUFBDIChlaGNpLT5oY3NfcGFyYW1zKSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1wcGMtc29jLmMgYi9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktcHBjLXNvYy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1Mjk1OTBlLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1wcGMtc29jLmMKKysrIC9kZXYvbnVsbApAQCAtMSwyMDEgKzAsMCBAQAotLyoKLSAqIEVIQ0kgSENEIChIb3N0IENvbnRyb2xsZXIgRHJpdmVyKSBmb3IgVVNCLgotICoKLSAqIChDKSBDb3B5cmlnaHQgMjAwNi0yMDA3IFN0ZWZhbiBSb2VzZSA8c3JAZGVueC5kZT4sIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcKLSAqCi0gKiBCdXMgR2x1ZSBmb3IgUFBDIE9uLUNoaXAgRUhDSSBkcml2ZXIKLSAqIFRlc3RlZCBvbiBBTUNDIDQ0MEVQeAotICoKLSAqIEJhc2VkIG9uICJlaGNpLWF1MXh4eC5jIiBieSBLLkJvZ2UgPGthcnN0ZW4uYm9nZUBhbWQuY29tPgotICoKLSAqIFRoaXMgZmlsZSBpcyBsaWNlbmNlZCB1bmRlciB0aGUgR1BMLgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KLQotZXh0ZXJuIGludCB1c2JfZGlzYWJsZWQodm9pZCk7Ci0KLS8qIGNhbGxlZCBkdXJpbmcgcHJvYmUoKSBhZnRlciBjaGlwIHJlc2V0IGNvbXBsZXRlcyAqLwotc3RhdGljIGludCBlaGNpX3BwY19zb2Nfc2V0dXAoc3RydWN0IHVzYl9oY2QgKmhjZCkKLXsKLQlzdHJ1Y3QgZWhjaV9oY2QJKmVoY2kgPSBoY2RfdG9fZWhjaShoY2QpOwotCWludAkJcmV0dmFsOwotCi0JcmV0dmFsID0gZWhjaV9oYWx0KGVoY2kpOwotCWlmIChyZXR2YWwpCi0JCXJldHVybiByZXR2YWw7Ci0KLQlyZXR2YWwgPSBlaGNpX2luaXQoaGNkKTsKLQlpZiAocmV0dmFsKQotCQlyZXR1cm4gcmV0dmFsOwotCi0JZWhjaS0+c2JybiA9IDB4MjA7Ci0JcmV0dXJuIGVoY2lfcmVzZXQoZWhjaSk7Ci19Ci0KLS8qKgotICogdXNiX2VoY2lfcHBjX3NvY19wcm9iZSAtIGluaXRpYWxpemUgUFBDLVNvQy1iYXNlZCBIQ0RzCi0gKiBDb250ZXh0OiAhaW5faW50ZXJydXB0KCkKLSAqCi0gKiBBbGxvY2F0ZXMgYmFzaWMgcmVzb3VyY2VzIGZvciB0aGlzIFVTQiBob3N0IGNvbnRyb2xsZXIsIGFuZAotICogdGhlbiBpbnZva2VzIHRoZSBzdGFydCgpIG1ldGhvZCBmb3IgdGhlIEhDRCBhc3NvY2lhdGVkIHdpdGggaXQKLSAqIHRocm91Z2ggdGhlIGhvdHBsdWcgZW50cnkncyBkcml2ZXJfZGF0YS4KLSAqCi0gKi8KLWludCB1c2JfZWhjaV9wcGNfc29jX3Byb2JlKGNvbnN0IHN0cnVjdCBoY19kcml2ZXIgKmRyaXZlciwKLQkJCSAgIHN0cnVjdCB1c2JfaGNkICoqaGNkX291dCwKLQkJCSAgIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKLXsKLQlpbnQgcmV0dmFsOwotCXN0cnVjdCB1c2JfaGNkICpoY2Q7Ci0Jc3RydWN0IGVoY2lfaGNkICplaGNpOwotCi0JaWYgKGRldi0+cmVzb3VyY2VbMV0uZmxhZ3MgIT0gSU9SRVNPVVJDRV9JUlEpIHsKLQkJcHJfZGVidWcoInJlc291cmNlWzFdIGlzIG5vdCBJT1JFU09VUkNFX0lSUSIpOwotCQlyZXR2YWwgPSAtRU5PTUVNOwotCX0KLQloY2QgPSB1c2JfY3JlYXRlX2hjZChkcml2ZXIsICZkZXYtPmRldiwgIlBQQy1TT0MgRUhDSSIpOwotCWlmICghaGNkKQotCQlyZXR1cm4gLUVOT01FTTsKLQloY2QtPnJzcmNfc3RhcnQgPSBkZXYtPnJlc291cmNlWzBdLnN0YXJ0OwotCWhjZC0+cnNyY19sZW4gPSBkZXYtPnJlc291cmNlWzBdLmVuZCAtIGRldi0+cmVzb3VyY2VbMF0uc3RhcnQgKyAxOwotCi0JaWYgKCFyZXF1ZXN0X21lbV9yZWdpb24oaGNkLT5yc3JjX3N0YXJ0LCBoY2QtPnJzcmNfbGVuLCBoY2RfbmFtZSkpIHsKLQkJcHJfZGVidWcoInJlcXVlc3RfbWVtX3JlZ2lvbiBmYWlsZWQiKTsKLQkJcmV0dmFsID0gLUVCVVNZOwotCQlnb3RvIGVycjE7Ci0JfQotCi0JaGNkLT5yZWdzID0gaW9yZW1hcChoY2QtPnJzcmNfc3RhcnQsIGhjZC0+cnNyY19sZW4pOwotCWlmICghaGNkLT5yZWdzKSB7Ci0JCXByX2RlYnVnKCJpb3JlbWFwIGZhaWxlZCIpOwotCQlyZXR2YWwgPSAtRU5PTUVNOwotCQlnb3RvIGVycjI7Ci0JfQotCi0JZWhjaSA9IGhjZF90b19laGNpKGhjZCk7Ci0JZWhjaS0+YmlnX2VuZGlhbl9tbWlvID0gMTsKLQllaGNpLT5iaWdfZW5kaWFuX2Rlc2MgPSAxOwotCWVoY2ktPmNhcHMgPSBoY2QtPnJlZ3M7Ci0JZWhjaS0+cmVncyA9IGhjZC0+cmVncyArIEhDX0xFTkdUSChlaGNpX3JlYWRsKGVoY2ksICZlaGNpLT5jYXBzLT5oY19jYXBiYXNlKSk7Ci0KLQkvKiBjYWNoZSB0aGlzIHJlYWRvbmx5IGRhdGE7IG1pbmltaXplIGNoaXAgcmVhZHMgKi8KLQllaGNpLT5oY3NfcGFyYW1zID0gZWhjaV9yZWFkbChlaGNpLCAmZWhjaS0+Y2Fwcy0+aGNzX3BhcmFtcyk7Ci0KLSNpZiBkZWZpbmVkKENPTkZJR180NDBFUFgpCi0JLyoKLQkgKiA0NDBFUHggRXJyYXRhIFVTQkhfMwotCSAqIEZpeDogRW5hYmxlIEJyZWFrIE1lbW9yeSBUcmFuc2ZlciAoQk1UKSBpbiBJTlNOUkVHMwotCSAqLwotCW91dF9iZTMyKCh2b2lkICopKCh1bG9uZykoJmVoY2ktPnJlZ3MtPmNvbW1hbmQpICsgMHg4YyksICgxIDw8IDApKTsKLQllaGNpX2RiZyhlaGNpLCAiQnJlYWsgTWVtb3J5IFRyYW5zZmVyIChCTVQpIGhhcyBiZWVkIGVuYWJsZWQhXG4iKTsKLSNlbmRpZgotCi0JcmV0dmFsID0gdXNiX2FkZF9oY2QoaGNkLCBkZXYtPnJlc291cmNlWzFdLnN0YXJ0LCBJUlFGX0RJU0FCTEVEKTsKLQlpZiAocmV0dmFsID09IDApCi0JCXJldHVybiByZXR2YWw7Ci0KLQlpb3VubWFwKGhjZC0+cmVncyk7Ci1lcnIyOgotCXJlbGVhc2VfbWVtX3JlZ2lvbihoY2QtPnJzcmNfc3RhcnQsIGhjZC0+cnNyY19sZW4pOwotZXJyMToKLQl1c2JfcHV0X2hjZChoY2QpOwotCXJldHVybiByZXR2YWw7Ci19Ci0KLS8qIG1heSBiZSBjYWxsZWQgd2l0aG91dCBjb250cm9sbGVyIGVsZWN0cmljYWxseSBwcmVzZW50ICovCi0vKiBtYXkgYmUgY2FsbGVkIHdpdGggY29udHJvbGxlciwgYnVzLCBhbmQgZGV2aWNlcyBhY3RpdmUgKi8KLQotLyoqCi0gKiB1c2JfZWhjaV9oY2RfcHBjX3NvY19yZW1vdmUgLSBzaHV0ZG93biBwcm9jZXNzaW5nIGZvciBQUEMtU29DLWJhc2VkIEhDRHMKLSAqIEBkZXY6IFVTQiBIb3N0IENvbnRyb2xsZXIgYmVpbmcgcmVtb3ZlZAotICogQ29udGV4dDogIWluX2ludGVycnVwdCgpCi0gKgotICogUmV2ZXJzZXMgdGhlIGVmZmVjdCBvZiB1c2JfZWhjaV9oY2RfcHBjX3NvY19wcm9iZSgpLCBmaXJzdCBpbnZva2luZwotICogdGhlIEhDRCdzIHN0b3AoKSBtZXRob2QuICBJdCBpcyBhbHdheXMgY2FsbGVkIGZyb20gYSB0aHJlYWQKLSAqIGNvbnRleHQsIG5vcm1hbGx5ICJybW1vZCIsICJhcG1kIiwgb3Igc29tZXRoaW5nIHNpbWlsYXIuCi0gKgotICovCi12b2lkIHVzYl9laGNpX3BwY19zb2NfcmVtb3ZlKHN0cnVjdCB1c2JfaGNkICpoY2QsIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKLXsKLQl1c2JfcmVtb3ZlX2hjZChoY2QpOwotCWlvdW5tYXAoaGNkLT5yZWdzKTsKLQlyZWxlYXNlX21lbV9yZWdpb24oaGNkLT5yc3JjX3N0YXJ0LCBoY2QtPnJzcmNfbGVuKTsKLQl1c2JfcHV0X2hjZChoY2QpOwotfQotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGhjX2RyaXZlciBlaGNpX3BwY19zb2NfaGNfZHJpdmVyID0gewotCS5kZXNjcmlwdGlvbiA9IGhjZF9uYW1lLAotCS5wcm9kdWN0X2Rlc2MgPSAiUFBDLVNPQyBFSENJIiwKLQkuaGNkX3ByaXZfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgZWhjaV9oY2QpLAotCi0JLyoKLQkgKiBnZW5lcmljIGhhcmR3YXJlIGxpbmthZ2UKLQkgKi8KLQkuaXJxID0gZWhjaV9pcnEsCi0JLmZsYWdzID0gSENEX01FTU9SWSB8IEhDRF9VU0IyLAotCi0JLyoKLQkgKiBiYXNpYyBsaWZlY3ljbGUgb3BlcmF0aW9ucwotCSAqLwotCS5yZXNldCA9IGVoY2lfcHBjX3NvY19zZXR1cCwKLQkuc3RhcnQgPSBlaGNpX3J1biwKLQkuc3RvcCA9IGVoY2lfc3RvcCwKLQkuc2h1dGRvd24gPSBlaGNpX3NodXRkb3duLAotCi0JLyoKLQkgKiBtYW5hZ2luZyBpL28gcmVxdWVzdHMgYW5kIGFzc29jaWF0ZWQgZGV2aWNlIHJlc291cmNlcwotCSAqLwotCS51cmJfZW5xdWV1ZSA9IGVoY2lfdXJiX2VucXVldWUsCi0JLnVyYl9kZXF1ZXVlID0gZWhjaV91cmJfZGVxdWV1ZSwKLQkuZW5kcG9pbnRfZGlzYWJsZSA9IGVoY2lfZW5kcG9pbnRfZGlzYWJsZSwKLQotCS8qCi0JICogc2NoZWR1bGluZyBzdXBwb3J0Ci0JICovCi0JLmdldF9mcmFtZV9udW1iZXIgPSBlaGNpX2dldF9mcmFtZSwKLQotCS8qCi0JICogcm9vdCBodWIgc3VwcG9ydAotCSAqLwotCS5odWJfc3RhdHVzX2RhdGEgPSBlaGNpX2h1Yl9zdGF0dXNfZGF0YSwKLQkuaHViX2NvbnRyb2wgPSBlaGNpX2h1Yl9jb250cm9sLAotCS5idXNfc3VzcGVuZCA9IGVoY2lfYnVzX3N1c3BlbmQsCi0JLmJ1c19yZXN1bWUgPSBlaGNpX2J1c19yZXN1bWUsCi0JLnJlbGlucXVpc2hfcG9ydCA9IGVoY2lfcmVsaW5xdWlzaF9wb3J0LAotCS5wb3J0X2hhbmRlZF9vdmVyID0gZWhjaV9wb3J0X2hhbmRlZF9vdmVyLAotfTsKLQotc3RhdGljIGludCBlaGNpX2hjZF9wcGNfc29jX2Rydl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQotewotCXN0cnVjdCB1c2JfaGNkICpoY2QgPSBOVUxMOwotCWludCByZXQ7Ci0KLQlwcl9kZWJ1ZygiSW4gZWhjaV9oY2RfcHBjX3NvY19kcnZfcHJvYmVcbiIpOwotCi0JaWYgKHVzYl9kaXNhYmxlZCgpKQotCQlyZXR1cm4gLUVOT0RFVjsKLQotCS8qIEZJWE1FIHdlIG9ubHkgd2FudCBvbmUgb25lIHByb2JlKCkgbm90IHR3byAqLwotCXJldCA9IHVzYl9laGNpX3BwY19zb2NfcHJvYmUoJmVoY2lfcHBjX3NvY19oY19kcml2ZXIsICZoY2QsIHBkZXYpOwotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbnQgZWhjaV9oY2RfcHBjX3NvY19kcnZfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCi17Ci0Jc3RydWN0IHVzYl9oY2QgKmhjZCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwotCi0JLyogRklYTUUgd2Ugb25seSB3YW50IG9uZSBvbmUgcmVtb3ZlKCkgbm90IHR3byAqLwotCXVzYl9laGNpX3BwY19zb2NfcmVtb3ZlKGhjZCwgcGRldik7Ci0JcmV0dXJuIDA7Ci19Ci0KLU1PRFVMRV9BTElBUygicGxhdGZvcm06cHBjLXNvYy1laGNpIik7Ci1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBlaGNpX3BwY19zb2NfZHJpdmVyID0gewotCS5wcm9iZSA9IGVoY2lfaGNkX3BwY19zb2NfZHJ2X3Byb2JlLAotCS5yZW1vdmUgPSBlaGNpX2hjZF9wcGNfc29jX2Rydl9yZW1vdmUsCi0JLnNodXRkb3duID0gdXNiX2hjZF9wbGF0Zm9ybV9zaHV0ZG93biwKLQkuZHJpdmVyID0gewotCQkubmFtZSA9ICJwcGMtc29jLWVoY2kiLAotCX0KLX07CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L2VoY2kuaCBiL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS5oCmluZGV4IGI2OTdhMTMuLmIxMTc5OGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS5oCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS5oCkBAIC05OSw2ICs5OSw4IEBACiAJCQlvd25lZCBieSB0aGUgY29tcGFuaW9uIGR1cmluZyBhIGJ1cyBzdXNwZW5kICovCiAJdW5zaWduZWQgbG9uZwkJcG9ydF9jX3N1c3BlbmQ7CQkvKiB3aGljaCBwb3J0cyBoYXZlCiAJCQl0aGUgY2hhbmdlLXN1c3BlbmQgZmVhdHVyZSB0dXJuZWQgb24gKi8KKwl1bnNpZ25lZCBsb25nCQlzdXNwZW5kZWRfcG9ydHM7CS8qIHdoaWNoIHBvcnRzIGFyZQorCQkJc3VzcGVuZGVkICovCiAKIAkvKiBwZXItSEMgbWVtb3J5IHBvb2xzIChjb3VsZCBiZSBwZXItYnVzLCBidXQgLi4uKSAqLwogCXN0cnVjdCBkbWFfcG9vbAkJKnFoX3Bvb2w7CS8qIHFoIHBlciBhY3RpdmUgdXJiICovCkBAIC0xODEsMTQgKzE4MywxNiBAQAogCSAqIHRoZSBhc3luYyByaW5nOyBqdXN0IHRoZSBJL08gd2F0Y2hkb2cuICBOb3RlIHRoYXQgaWYgYQogCSAqIFNIUklOSyB3ZXJlIHBlbmRpbmcsIE9GRiB3b3VsZCBuZXZlciBiZSByZXF1ZXN0ZWQuCiAJICovCi0JaWYgKHRpbWVyX3BlbmRpbmcoJmVoY2ktPndhdGNoZG9nKQotCQkJJiYgKChCSVQoVElNRVJfQVNZTkNfU0hSSU5LKSB8IEJJVChUSU1FUl9BU1lOQ19PRkYpKQotCQkJCSYgZWhjaS0+YWN0aW9ucykpCi0JCXJldHVybjsKKwllbnVtIGVoY2lfdGltZXJfYWN0aW9uIG9sZGFjdGlvbnMgPSBlaGNpLT5hY3Rpb25zOwogCiAJaWYgKCF0ZXN0X2FuZF9zZXRfYml0IChhY3Rpb24sICZlaGNpLT5hY3Rpb25zKSkgewogCQl1bnNpZ25lZCBsb25nIHQ7CiAKKwkJaWYgKHRpbWVyX3BlbmRpbmcoJmVoY2ktPndhdGNoZG9nKQorCQkJJiYgKChCSVQoVElNRVJfQVNZTkNfU0hSSU5LKSB8IEJJVChUSU1FUl9BU1lOQ19PRkYpKQorCQkJCSYgb2xkYWN0aW9ucykpCisJCQlyZXR1cm47CisKIAkJc3dpdGNoIChhY3Rpb24pIHsKIAkJY2FzZSBUSU1FUl9JT19XQVRDSERPRzoKIAkJCXQgPSBFSENJX0lPX0pJRkZJRVM7CkBAIC0yMDQsNyArMjA4LDcgQEAKIAkJCXQgPSBESVZfUk9VTkRfVVAoRUhDSV9TSFJJTktfRlJBTUVTICogSFosIDEwMDApICsgMTsKIAkJCWJyZWFrOwogCQl9Ci0JCW1vZF90aW1lcigmZWhjaS0+d2F0Y2hkb2csIHQgKyBqaWZmaWVzKTsKKwkJbW9kX3RpbWVyKCZlaGNpLT53YXRjaGRvZywgcm91bmRfamlmZmllcyh0ICsgamlmZmllcykpOwogCX0KIH0KIApAQCAtNjA0LDE2ICs2MDgsNyBAQAogLyoKICAqIEJpZy1lbmRpYW4gcmVhZC93cml0ZSBmdW5jdGlvbnMgYXJlIGFyY2gtc3BlY2lmaWMuCiAgKiBPdGhlciBhcmNoZXMgY2FuIGJlIGFkZGVkIGlmL3doZW4gdGhleSdyZSBuZWVkZWQuCi0gKgotICogUkVWSVNJVDogYXJjaC9wb3dlcnBjIG5vdyBoYXMgcmVhZGwvd3JpdGVsX2JlLCBzbyB0aGUKLSAqIGRlZmluaXRpb24gYmVsb3cgY2FuIGRpZSBvbmNlIHRoZSA0eHggc3VwcG9ydCBpcwotICogZmluYWxseSBwb3J0ZWQgb3Zlci4KICAqLwotI2lmIGRlZmluZWQoQ09ORklHX1BQQykgJiYgIWRlZmluZWQoQ09ORklHX1BQQ19NRVJHRSkKLSNkZWZpbmUgcmVhZGxfYmUoYWRkcikJCWluX2JlMzIoKF9fZm9yY2UgdW5zaWduZWQgKilhZGRyKQotI2RlZmluZSB3cml0ZWxfYmUodmFsLCBhZGRyKQlvdXRfYmUzMigoX19mb3JjZSB1bnNpZ25lZCAqKWFkZHIsIHZhbCkKLSNlbmRpZgotCiAjaWYgZGVmaW5lZChDT05GSUdfQVJNKSAmJiBkZWZpbmVkKENPTkZJR19BUkNIX0lYUDRYWCkKICNkZWZpbmUgcmVhZGxfYmUoYWRkcikJCV9fcmF3X3JlYWRsKChfX2ZvcmNlIHVuc2lnbmVkICopYWRkcikKICNkZWZpbmUgd3JpdGVsX2JlKHZhbCwgYWRkcikJX19yYXdfd3JpdGVsKHZhbCwgKF9fZm9yY2UgdW5zaWduZWQgKilhZGRyKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9pc3AxMTZ4LWhjZC5jIGIvZHJpdmVycy91c2IvaG9zdC9pc3AxMTZ4LWhjZC5jCmluZGV4IGNlMWNhMGIuLjRkZGEzMWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QvaXNwMTE2eC1oY2QuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L2lzcDExNngtaGNkLmMKQEAgLTE1NjIsMTEgKzE1NjIsMTIgQEAKIHsKIAlzdHJ1Y3QgdXNiX2hjZCAqaGNkOwogCXN0cnVjdCBpc3AxMTZ4ICppc3AxMTZ4OwotCXN0cnVjdCByZXNvdXJjZSAqYWRkciwgKmRhdGE7CisJc3RydWN0IHJlc291cmNlICphZGRyLCAqZGF0YSwgKmlyZXM7CiAJdm9pZCBfX2lvbWVtICphZGRyX3JlZzsKIAl2b2lkIF9faW9tZW0gKmRhdGFfcmVnOwogCWludCBpcnE7CiAJaW50IHJldCA9IDA7CisJdW5zaWduZWQgbG9uZyBpcnFmbGFnczsKIAogCWlmIChwZGV2LT5udW1fcmVzb3VyY2VzIDwgMykgewogCQlyZXQgPSAtRU5PREVWOwpAQCAtMTU3NSwxMiArMTU3NiwxNiBAQAogCiAJZGF0YSA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CiAJYWRkciA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMSk7Ci0JaXJxID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKTsKLQlpZiAoIWFkZHIgfHwgIWRhdGEgfHwgaXJxIDwgMCkgeworCWlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9JUlEsIDApOworCisJaWYgKCFhZGRyIHx8ICFkYXRhIHx8ICFpcmVzKSB7CiAJCXJldCA9IC1FTk9ERVY7CiAJCWdvdG8gZXJyMTsKIAl9CiAKKwlpcnEgPSBpcmVzLT5zdGFydDsKKwlpcnFmbGFncyA9IGlyZXMtPmZsYWdzICYgSVJRRl9UUklHR0VSX01BU0s7CisKIAlpZiAocGRldi0+ZGV2LmRtYV9tYXNrKSB7CiAJCURCRygiRE1BIG5vdCBzdXBwb3J0ZWRcbiIpOwogCQlyZXQgPSAtRUlOVkFMOwpAQCAtMTYzNCw3ICsxNjM5LDcgQEAKIAkJZ290byBlcnI2OwogCX0KIAotCXJldCA9IHVzYl9hZGRfaGNkKGhjZCwgaXJxLCBJUlFGX0RJU0FCTEVEKTsKKwlyZXQgPSB1c2JfYWRkX2hjZChoY2QsIGlycSwgaXJxZmxhZ3MgfCBJUlFGX0RJU0FCTEVEKTsKIAlpZiAocmV0KQogCQlnb3RvIGVycjY7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvaXNwMTc2MC1pZi5jIGIvZHJpdmVycy91c2IvaG9zdC9pc3AxNzYwLWlmLmMKaW5kZXggMDUxZWY3Yi4uYWY4NDlmNSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9pc3AxNzYwLWlmLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9pc3AxNzYwLWlmLmMKQEAgLTIxOCw3ICsyMTgsNyBAQAogCSAqIGFuZCByZWFkaW5nIGJhY2sgYW5kIGNoZWNraW5nIHRoZSBjb250ZW50cyBhcmUgc2FtZSBvciBub3QKIAkgKi8KIAlpZiAocmVnX2RhdGEgIT0gMHhGQUNFKSB7Ci0JCWVycigic2NyYXRjaCByZWdpc3RlciBtaXNtYXRjaCAleCIsIHJlZ19kYXRhKTsKKwkJZGV2X2VycigmZGV2LT5kZXYsICJzY3JhdGNoIHJlZ2lzdGVyIG1pc21hdGNoICV4XG4iLCByZWdfZGF0YSk7CiAJCWdvdG8gY2xlYW47CiAJfQogCkBAIC0yMzIsOSArMjMyLDEwIEBACiAJaGNkID0gaXNwMTc2MF9yZWdpc3RlcihwY2lfbWVtX3BoeTAsIGxlbmd0aCwgZGV2LT5pcnEsCiAJCUlSUUZfU0hBUkVEIHwgSVJRRl9ESVNBQkxFRCwgJmRldi0+ZGV2LCBkZXZfbmFtZSgmZGV2LT5kZXYpLAogCQlkZXZmbGFncyk7Ci0JcGNpX3NldF9kcnZkYXRhKGRldiwgaGNkKTsKLQlpZiAoIWhjZCkKKwlpZiAoIUlTX0VSUihoY2QpKSB7CisJCXBjaV9zZXRfZHJ2ZGF0YShkZXYsIGhjZCk7CiAJCXJldHVybiAwOworCX0KIGNsZWFuOgogCXN0YXR1cyA9IC1FTk9ERVY7CiAJaW91bm1hcChpb2Jhc2UpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9vaGNpLWRiZy5jIGIvZHJpdmVycy91c2IvaG9zdC9vaGNpLWRiZy5jCmluZGV4IDdjZWYxZDIuLmQzMjY5NjU2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L29oY2ktZGJnLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9vaGNpLWRiZy5jCkBAIC02NDksNyArNjQ5LDcgQEAKIAlvaGNpX2RiZ19zdyAob2hjaSwgJm5leHQsICZzaXplLAogCQkiYnVzICVzLCBkZXZpY2UgJXNcbiIKIAkJIiVzXG4iCi0JCSIlcyB2ZXJzaW9uICIgRFJJVkVSX1ZFUlNJT04gIlxuIiwKKwkJIiVzXG4iLAogCQloY2QtPnNlbGYuY29udHJvbGxlci0+YnVzLT5uYW1lLAogCQlkZXZfbmFtZShoY2QtPnNlbGYuY29udHJvbGxlciksCiAJCWhjZC0+cHJvZHVjdF9kZXNjLApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9vaGNpLWhjZC5jIGIvZHJpdmVycy91c2IvaG9zdC9vaGNpLWhjZC5jCmluZGV4IDg5OTAxOTYuLjg2NDdkYWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1oY2QuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L29oY2ktaGNkLmMKQEAgLTQ2LDcgKzQ2LDYgQEAKIAogI2luY2x1ZGUgIi4uL2NvcmUvaGNkLmgiCiAKLSNkZWZpbmUgRFJJVkVSX1ZFUlNJT04gIjIwMDYgQXVndXN0IDA0IgogI2RlZmluZSBEUklWRVJfQVVUSE9SICJSb21hbiBXZWlzc2dhZXJiZXIsIERhdmlkIEJyb3duZWxsIgogI2RlZmluZSBEUklWRVJfREVTQyAiVVNCIDEuMSAnT3BlbicgSG9zdCBDb250cm9sbGVyIChPSENJKSBEcml2ZXIiCiAKQEAgLTk4NCwxMCArOTgzLDggQEAKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAotI2RlZmluZSBEUklWRVJfSU5GTyBEUklWRVJfVkVSU0lPTiAiICIgRFJJVkVSX0RFU0MKLQogTU9EVUxFX0FVVEhPUiAoRFJJVkVSX0FVVEhPUik7Ci1NT0RVTEVfREVTQ1JJUFRJT04gKERSSVZFUl9JTkZPKTsKK01PRFVMRV9ERVNDUklQVElPTihEUklWRVJfREVTQyk7CiBNT0RVTEVfTElDRU5TRSAoIkdQTCIpOwogCiAjaWZkZWYgQ09ORklHX1BDSQpAQCAtMTA5NSw5ICsxMDkyLDEwIEBACiAJaWYgKHVzYl9kaXNhYmxlZCgpKQogCQlyZXR1cm4gLUVOT0RFVjsKIAotCXByaW50ayAoS0VSTl9ERUJVRyAiJXM6ICIgRFJJVkVSX0lORk8gIlxuIiwgaGNkX25hbWUpOworCXByaW50ayhLRVJOX0lORk8gIiVzOiAiIERSSVZFUl9ERVNDICJcbiIsIGhjZF9uYW1lKTsKIAlwcl9kZWJ1ZyAoIiVzOiBibG9jayBzaXplczogZWQgJVpkIHRkICVaZFxuIiwgaGNkX25hbWUsCiAJCXNpemVvZiAoc3RydWN0IGVkKSwgc2l6ZW9mIChzdHJ1Y3QgdGQpKTsKKwlzZXRfYml0KFVTQl9PSENJX0xPQURFRCwgJnVzYl9oY2RzX2xvYWRlZCk7CiAKICNpZmRlZiBERUJVRwogCW9oY2lfZGVidWdfcm9vdCA9IGRlYnVnZnNfY3JlYXRlX2Rpcigib2hjaSIsIE5VTEwpOwpAQCAtMTE4NCw2ICsxMTgyLDcgQEAKICBlcnJvcl9kZWJ1ZzoKICNlbmRpZgogCisJY2xlYXJfYml0KFVTQl9PSENJX0xPQURFRCwgJnVzYl9oY2RzX2xvYWRlZCk7CiAJcmV0dXJuIHJldHZhbDsKIH0KIG1vZHVsZV9pbml0KG9oY2lfaGNkX21vZF9pbml0KTsKQEAgLTEyMTQsNiArMTIxMyw3IEBACiAjaWZkZWYgREVCVUcKIAlkZWJ1Z2ZzX3JlbW92ZShvaGNpX2RlYnVnX3Jvb3QpOwogI2VuZGlmCisJY2xlYXJfYml0KFVTQl9PSENJX0xPQURFRCwgJnVzYl9oY2RzX2xvYWRlZCk7CiB9CiBtb2R1bGVfZXhpdChvaGNpX2hjZF9tb2RfZXhpdCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1odWIuYyBiL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1odWIuYwppbmRleCA3ZWE5YTdiLi4zMmJiY2U5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L29oY2ktaHViLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9vaGNpLWh1Yi5jCkBAIC0zNTksMjEgKzM1OSwyNCBAQAogCiAvKiBDYXJyeSBvdXQgcG9sbGluZy0sIGF1dG9zdG9wLSwgYW5kIGF1dG9yZXN1bWUtcmVsYXRlZCBzdGF0ZSBjaGFuZ2VzICovCiBzdGF0aWMgaW50IG9oY2lfcm9vdF9odWJfc3RhdGVfY2hhbmdlcyhzdHJ1Y3Qgb2hjaV9oY2QgKm9oY2ksIGludCBjaGFuZ2VkLAotCQlpbnQgYW55X2Nvbm5lY3RlZCkKKwkJaW50IGFueV9jb25uZWN0ZWQsIGludCByaHNjX3N0YXR1cykKIHsKIAlpbnQJcG9sbF9yaCA9IDE7Ci0JaW50CXJoc2M7CisJaW50CXJoc2NfZW5hYmxlOwogCi0JcmhzYyA9IG9oY2lfcmVhZGwob2hjaSwgJm9oY2ktPnJlZ3MtPmludHJlbmFibGUpICYgT0hDSV9JTlRSX1JIU0M7CisJLyogU29tZSBicm9rZW4gY29udHJvbGxlcnMgbmV2ZXIgdHVybiBvZmYgUkhDUyBpbiB0aGUgaW50ZXJydXB0CisJICogc3RhdHVzIHJlZ2lzdGVyLiAgRm9yIHRoZWlyIHNha2Ugd2Ugd29uJ3QgcmUtZW5hYmxlIFJIU0MKKwkgKiBpbnRlcnJ1cHRzIGlmIHRoZSBpbnRlcnJ1cHQgYml0IGlzIGFscmVhZHkgYWN0aXZlLgorCSAqLworCXJoc2NfZW5hYmxlID0gb2hjaV9yZWFkbChvaGNpLCAmb2hjaS0+cmVncy0+aW50cmVuYWJsZSkgJgorCQkJT0hDSV9JTlRSX1JIU0M7CisKIAlzd2l0Y2ggKG9oY2ktPmhjX2NvbnRyb2wgJiBPSENJX0NUUkxfSENGUykgewotCiAJY2FzZSBPSENJX1VTQl9PUEVSOgotCQkvKiBJZiBubyBzdGF0dXMgY2hhbmdlcyBhcmUgcGVuZGluZywgZW5hYmxlIHN0YXR1cy1jaGFuZ2UKLQkJICogaW50ZXJydXB0cy4KLQkJICovCi0JCWlmICghcmhzYyAmJiAhY2hhbmdlZCkgewotCQkJcmhzYyA9IE9IQ0lfSU5UUl9SSFNDOwotCQkJb2hjaV93cml0ZWwob2hjaSwgcmhzYywgJm9oY2ktPnJlZ3MtPmludHJlbmFibGUpOworCQkvKiBJZiBubyBzdGF0dXMgY2hhbmdlcyBhcmUgcGVuZGluZywgZW5hYmxlIFJIU0MgaW50ZXJydXB0cy4gKi8KKwkJaWYgKCFyaHNjX2VuYWJsZSAmJiAhcmhzY19zdGF0dXMgJiYgIWNoYW5nZWQpIHsKKwkJCXJoc2NfZW5hYmxlID0gT0hDSV9JTlRSX1JIU0M7CisJCQlvaGNpX3dyaXRlbChvaGNpLCByaHNjX2VuYWJsZSwgJm9oY2ktPnJlZ3MtPmludHJlbmFibGUpOwogCQl9CiAKIAkJLyogS2VlcCBvbiBwb2xsaW5nIHVudGlsIHdlIGtub3cgYSBkZXZpY2UgaXMgY29ubmVjdGVkCkBAIC0zODMsNyArMzg2LDcgQEAKIAkJCWlmIChhbnlfY29ubmVjdGVkIHx8CiAJCQkJCSFkZXZpY2VfbWF5X3dha2V1cCgmb2hjaV90b19oY2Qob2hjaSkKIAkJCQkJCS0+c2VsZi5yb290X2h1Yi0+ZGV2KSkgewotCQkJCWlmIChyaHNjKQorCQkJCWlmIChyaHNjX2VuYWJsZSkKIAkJCQkJcG9sbF9yaCA9IDA7CiAJCQl9IGVsc2UgewogCQkJCW9oY2ktPmF1dG9zdG9wID0gMTsKQEAgLTM5NiwzNCArMzk5LDQ1IEBACiAJCQkJb2hjaS0+YXV0b3N0b3AgPSAwOwogCQkJCW9oY2ktPm5leHRfc3RhdGVjaGFuZ2UgPSBqaWZmaWVzICsKIAkJCQkJCVNUQVRFQ0hBTkdFX0RFTEFZOwotCQkJfSBlbHNlIGlmIChyaHNjICYmIHRpbWVfYWZ0ZXJfZXEoamlmZmllcywKKwkJCX0gZWxzZSBpZiAodGltZV9hZnRlcl9lcShqaWZmaWVzLAogCQkJCQkJb2hjaS0+bmV4dF9zdGF0ZWNoYW5nZSkKIAkJCQkJJiYgIW9oY2ktPmVkX3JtX2xpc3QKIAkJCQkJJiYgIShvaGNpLT5oY19jb250cm9sICYKIAkJCQkJCU9IQ0lfU0NIRURfRU5BQkxFUykpIHsKIAkJCQlvaGNpX3JoX3N1c3BlbmQob2hjaSwgMSk7Ci0JCQkJcG9sbF9yaCA9IDA7CisJCQkJaWYgKHJoc2NfZW5hYmxlKQorCQkJCQlwb2xsX3JoID0gMDsKIAkJCX0KIAkJfQogCQlicmVhazsKIAotCS8qIGlmIHRoZXJlIGlzIGEgcG9ydCBjaGFuZ2UsIGF1dG9zdGFydCBvciBhc2sgdG8gYmUgcmVzdW1lZCAqLwogCWNhc2UgT0hDSV9VU0JfU1VTUEVORDoKIAljYXNlIE9IQ0lfVVNCX1JFU1VNRToKKwkJLyogaWYgdGhlcmUgaXMgYSBwb3J0IGNoYW5nZSwgYXV0b3N0YXJ0IG9yIGFzayB0byBiZSByZXN1bWVkICovCiAJCWlmIChjaGFuZ2VkKSB7CiAJCQlpZiAob2hjaS0+YXV0b3N0b3ApCiAJCQkJb2hjaV9yaF9yZXN1bWUob2hjaSk7CiAJCQllbHNlCiAJCQkJdXNiX2hjZF9yZXN1bWVfcm9vdF9odWIob2hjaV90b19oY2Qob2hjaSkpOwotCQl9IGVsc2UgewotCQkJaWYgKCFyaHNjICYmIChvaGNpLT5hdXRvc3RvcCB8fAotCQkJCQlvaGNpX3RvX2hjZChvaGNpKS0+c2VsZi5yb290X2h1Yi0+Ci0JCQkJCQlkb19yZW1vdGVfd2FrZXVwKSkKLQkJCQlvaGNpX3dyaXRlbChvaGNpLCBPSENJX0lOVFJfUkhTQywKLQkJCQkJCSZvaGNpLT5yZWdzLT5pbnRyZW5hYmxlKTsKIAotCQkJLyogZXZlcnl0aGluZyBpcyBpZGxlLCBubyBuZWVkIGZvciBwb2xsaW5nICovCisJCS8qIElmIHJlbW90ZSB3YWtldXAgaXMgZGlzYWJsZWQsIHN0b3AgcG9sbGluZyAqLworCQl9IGVsc2UgaWYgKCFvaGNpLT5hdXRvc3RvcCAmJgorCQkJCSFvaGNpX3RvX2hjZChvaGNpKS0+c2VsZi5yb290X2h1Yi0+CisJCQkJCWRvX3JlbW90ZV93YWtldXApIHsKIAkJCXBvbGxfcmggPSAwOworCisJCX0gZWxzZSB7CisJCQkvKiBJZiBubyBzdGF0dXMgY2hhbmdlcyBhcmUgcGVuZGluZywKKwkJCSAqIGVuYWJsZSBSSFNDIGludGVycnVwdHMKKwkJCSAqLworCQkJaWYgKCFyaHNjX2VuYWJsZSAmJiAhcmhzY19zdGF0dXMpIHsKKwkJCQlyaHNjX2VuYWJsZSA9IE9IQ0lfSU5UUl9SSFNDOworCQkJCW9oY2lfd3JpdGVsKG9oY2ksIHJoc2NfZW5hYmxlLAorCQkJCQkJJm9oY2ktPnJlZ3MtPmludHJlbmFibGUpOworCQkJfQorCQkJLyogS2VlcCBwb2xsaW5nIHVudGlsIFJIU0MgaXMgZW5hYmxlZCAqLworCQkJaWYgKHJoc2NfZW5hYmxlKQorCQkJCXBvbGxfcmggPSAwOwogCQl9CiAJCWJyZWFrOwogCX0KQEAgLTQ0MSwxOCArNDU1LDIyIEBACiAgKiBhdXRvc3RvcCBpc24ndCB1c2VkIHdoZW4gQ09ORklHX1BNIGlzIHR1cm5lZCBvZmYuCiAgKi8KIHN0YXRpYyBpbnQgb2hjaV9yb290X2h1Yl9zdGF0ZV9jaGFuZ2VzKHN0cnVjdCBvaGNpX2hjZCAqb2hjaSwgaW50IGNoYW5nZWQsCi0JCWludCBhbnlfY29ubmVjdGVkKQorCQlpbnQgYW55X2Nvbm5lY3RlZCwgaW50IHJoc2Nfc3RhdHVzKQogewogCS8qIElmIFJIU0MgaXMgZW5hYmxlZCwgZG9uJ3QgcG9sbCAqLwogCWlmIChvaGNpX3JlYWRsKG9oY2ksICZvaGNpLT5yZWdzLT5pbnRyZW5hYmxlKSAmIE9IQ0lfSU5UUl9SSFNDKQogCQlyZXR1cm4gMDsKIAotCS8qIElmIG5vIHN0YXR1cyBjaGFuZ2VzIGFyZSBwZW5kaW5nLCBlbmFibGUgc3RhdHVzLWNoYW5nZSBpbnRlcnJ1cHRzICovCi0JaWYgKCFjaGFuZ2VkKSB7Ci0JCW9oY2lfd3JpdGVsKG9oY2ksIE9IQ0lfSU5UUl9SSFNDLCAmb2hjaS0+cmVncy0+aW50cmVuYWJsZSk7Ci0JCXJldHVybiAwOwotCX0KLQlyZXR1cm4gMTsKKwkvKiBJZiBzdGF0dXMgY2hhbmdlcyBhcmUgcGVuZGluZywgY29udGludWUgcG9sbGluZy4KKwkgKiBDb252ZXJzZWx5LCBpZiBubyBzdGF0dXMgY2hhbmdlcyBhcmUgcGVuZGluZyBidXQgdGhlIFJIU0MKKwkgKiBzdGF0dXMgYml0IHdhcyBzZXQsIHRoZW4gUkhTQyBtYXkgYmUgYnJva2VuIHNvIGNvbnRpbnVlIHBvbGxpbmcuCisJICovCisJaWYgKGNoYW5nZWQgfHwgcmhzY19zdGF0dXMpCisJCXJldHVybiAxOworCisJLyogSXQncyBzYWZlIHRvIHJlLWVuYWJsZSBSSFNDIGludGVycnVwdHMgKi8KKwlvaGNpX3dyaXRlbChvaGNpLCBPSENJX0lOVFJfUkhTQywgJm9oY2ktPnJlZ3MtPmludHJlbmFibGUpOworCXJldHVybiAwOwogfQogCiAjZW5kaWYJLyogQ09ORklHX1BNICovCkBAIC00NjcsNiArNDg1LDcgQEAKIAlzdHJ1Y3Qgb2hjaV9oY2QJKm9oY2kgPSBoY2RfdG9fb2hjaSAoaGNkKTsKIAlpbnQJCWksIGNoYW5nZWQgPSAwLCBsZW5ndGggPSAxOwogCWludAkJYW55X2Nvbm5lY3RlZCA9IDA7CisJaW50CQlyaHNjX3N0YXR1czsKIAl1bnNpZ25lZCBsb25nCWZsYWdzOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUgKCZvaGNpLT5sb2NrLCBmbGFncyk7CkBAIC00OTIsMTIgKzUxMSwxMCBAQAogCQlsZW5ndGgrKzsKIAl9CiAKLQkvKiBTb21lIGJyb2tlbiBjb250cm9sbGVycyBuZXZlciB0dXJuIG9mZiBSSENTIGluIHRoZSBpbnRlcnJ1cHQKLQkgKiBzdGF0dXMgcmVnaXN0ZXIuICBGb3IgdGhlaXIgc2FrZSB3ZSB3b24ndCByZS1lbmFibGUgUkhTQwotCSAqIGludGVycnVwdHMgaWYgdGhlIGZsYWcgaXMgYWxyZWFkeSBzZXQuCi0JICovCi0JaWYgKG9oY2lfcmVhZGwob2hjaSwgJm9oY2ktPnJlZ3MtPmludHJzdGF0dXMpICYgT0hDSV9JTlRSX1JIU0MpCi0JCWNoYW5nZWQgPSAxOworCS8qIENsZWFyIHRoZSBSSFNDIHN0YXR1cyBmbGFnIGJlZm9yZSByZWFkaW5nIHRoZSBwb3J0IHN0YXR1c2VzICovCisJb2hjaV93cml0ZWwob2hjaSwgT0hDSV9JTlRSX1JIU0MsICZvaGNpLT5yZWdzLT5pbnRyc3RhdHVzKTsKKwlyaHNjX3N0YXR1cyA9IG9oY2lfcmVhZGwob2hjaSwgJm9oY2ktPnJlZ3MtPmludHJzdGF0dXMpICYKKwkJCU9IQ0lfSU5UUl9SSFNDOwogCiAJLyogbG9vayBhdCBlYWNoIHBvcnQgKi8KIAlmb3IgKGkgPSAwOyBpIDwgb2hjaS0+bnVtX3BvcnRzOyBpKyspIHsKQEAgLTUxNyw3ICs1MzQsNyBAQAogCX0KIAogCWhjZC0+cG9sbF9yaCA9IG9oY2lfcm9vdF9odWJfc3RhdGVfY2hhbmdlcyhvaGNpLCBjaGFuZ2VkLAotCQkJYW55X2Nvbm5lY3RlZCk7CisJCQlhbnlfY29ubmVjdGVkLCByaHNjX3N0YXR1cyk7CiAKIGRvbmU6CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSAoJm9oY2ktPmxvY2ssIGZsYWdzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1vbWFwLmMgYi9kcml2ZXJzL3VzYi9ob3N0L29oY2ktb21hcC5jCmluZGV4IDk1YjNlYzguLjkxNjk3YmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1vbWFwLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9vaGNpLW9tYXAuYwpAQCAtMjMxLDcgKzIzMSw3IEBACiAKIAlvbWFwX29oY2lfY2xvY2tfcG93ZXIoMSk7CiAKLQlpZiAoY3B1X2lzX29tYXAxNTEwKCkpIHsKKwlpZiAoY3B1X2lzX29tYXAxNXh4KCkpIHsKIAkJb21hcF8xNTEwX2xvY2FsX2J1c19wb3dlcigxKTsKIAkJb21hcF8xNTEwX2xvY2FsX2J1c19pbml0KCk7CiAJfQpAQCAtMzE5LDcgKzMxOSw3IEBACiAJaWYgKElTX0VSUih1c2JfaG9zdF9jaykpCiAJCXJldHVybiBQVFJfRVJSKHVzYl9ob3N0X2NrKTsKIAotCWlmICghY3B1X2lzX29tYXAxNTEwKCkpCisJaWYgKCFjcHVfaXNfb21hcDE1eHgoKSkKIAkJdXNiX2RjX2NrID0gY2xrX2dldCgwLCAidXNiX2RjX2NrIik7CiAJZWxzZQogCQl1c2JfZGNfY2sgPSBjbGtfZ2V0KDAsICJsYl9jayIpOwpAQCAtMzQ0LDcgKzM0NCwxMiBAQAogCQlnb3RvIGVycjE7CiAJfQogCi0JaGNkLT5yZWdzID0gKHZvaWQgX19pb21lbSAqKSAoaW50KSBJT19BRERSRVNTKGhjZC0+cnNyY19zdGFydCk7CisJaGNkLT5yZWdzID0gaW9yZW1hcChoY2QtPnJzcmNfc3RhcnQsIGhjZC0+cnNyY19sZW4pOworCWlmICghaGNkLT5yZWdzKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImNhbid0IGlvcmVtYXAgT0hDSSBIQ0RcbiIpOworCQlyZXR2YWwgPSAtRU5PTUVNOworCQlnb3RvIGVycjI7CisJfQogCiAJb2hjaSA9IGhjZF90b19vaGNpKGhjZCk7CiAJb2hjaV9oY2RfaW5pdChvaGNpKTsKQEAgLTM1NSwxMSArMzYwLDExIEBACiAJaXJxID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKTsKIAlpZiAoaXJxIDwgMCkgewogCQlyZXR2YWwgPSAtRU5YSU87Ci0JCWdvdG8gZXJyMjsKKwkJZ290byBlcnIzOwogCX0KIAlyZXR2YWwgPSB1c2JfYWRkX2hjZChoY2QsIGlycSwgSVJRRl9ESVNBQkxFRCk7CiAJaWYgKHJldHZhbCkKLQkJZ290byBlcnIyOworCQlnb3RvIGVycjM7CiAKIAlob3N0X2luaXRpYWxpemVkID0gMTsKIApAQCAtMzY3LDYgKzM3Miw4IEBACiAJCW9tYXBfb2hjaV9jbG9ja19wb3dlcigwKTsKIAogCXJldHVybiAwOworZXJyMzoKKwlpb3VubWFwKGhjZC0+cmVncyk7CiBlcnIyOgogCXJlbGVhc2VfbWVtX3JlZ2lvbihoY2QtPnJzcmNfc3RhcnQsIGhjZC0+cnNyY19sZW4pOwogZXJyMToKQEAgLTQwMSw2ICs0MDgsNyBAQAogCX0KIAlpZiAobWFjaGluZV9pc19vbWFwX29zaygpKQogCQlvbWFwX2ZyZWVfZ3Bpbyg5KTsKKwlpb3VubWFwKGhjZC0+cmVncyk7CiAJcmVsZWFzZV9tZW1fcmVnaW9uKGhjZC0+cnNyY19zdGFydCwgaGNkLT5yc3JjX2xlbik7CiAJdXNiX3B1dF9oY2QoaGNkKTsKIAljbGtfcHV0KHVzYl9kY19jayk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L29oY2ktcG54NDAwOC5jIGIvZHJpdmVycy91c2IvaG9zdC9vaGNpLXBueDQwMDguYwppbmRleCA2NThhMmE5Li5lMzA2Y2E2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L29oY2ktcG54NDAwOC5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1wbng0MDA4LmMKQEAgLTMzMSw3ICszMzEsNyBAQAogCiAJaW50IHJldCA9IDAsIGlycTsKIAotCWRldl9kYmcoJnBkZXYtPmRldiwgIiVzOiAiIERSSVZFUl9JTkZPICIgKHBueDQwMDgpXG4iLCBoY2RfbmFtZSk7CisJZGV2X2RiZygmcGRldi0+ZGV2LCAiJXM6ICIgRFJJVkVSX0RFU0MgIiAocG54NDAwOClcbiIsIGhjZF9uYW1lKTsKIAlpZiAodXNiX2Rpc2FibGVkKCkpIHsKIAkJZXJyKCJVU0IgaXMgZGlzYWJsZWQiKTsKIAkJcmV0ID0gLUVOT0RFVjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS5oIGIvZHJpdmVycy91c2IvaG9zdC9vaGNpLmgKaW5kZXggZmFmNjIyZS4uMjIyMDExZiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9vaGNpLmgKKysrIGIvZHJpdmVycy91c2IvaG9zdC9vaGNpLmgKQEAgLTU0MCwxNSArNTQwLDcgQEAKICAqIEJpZy1lbmRpYW4gcmVhZC93cml0ZSBmdW5jdGlvbnMgYXJlIGFyY2gtc3BlY2lmaWMuCiAgKiBPdGhlciBhcmNoZXMgY2FuIGJlIGFkZGVkIGlmL3doZW4gdGhleSdyZSBuZWVkZWQuCiAgKgotICogUkVWSVNJVDogYXJjaC9wb3dlcnBjIG5vdyBoYXMgcmVhZGwvd3JpdGVsX2JlLCBzbyB0aGUKLSAqIGRlZmluaXRpb24gYmVsb3cgY2FuIGRpZSBvbmNlIHRoZSBTVEIwNHh4eCBzdXBwb3J0IGlzCi0gKiBmaW5hbGx5IHBvcnRlZCBvdmVyLgogICovCi0jaWYgZGVmaW5lZChDT05GSUdfUFBDKSAmJiAhZGVmaW5lZChDT05GSUdfUFBDX01FUkdFKQotI2RlZmluZSByZWFkbF9iZShhZGRyKQkJaW5fYmUzMigoX19mb3JjZSB1bnNpZ25lZCAqKWFkZHIpCi0jZGVmaW5lIHdyaXRlbF9iZSh2YWwsIGFkZHIpCW91dF9iZTMyKChfX2ZvcmNlIHVuc2lnbmVkICopYWRkciwgdmFsKQotI2VuZGlmCi0KIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IF9vaGNpX3JlYWRsIChjb25zdCBzdHJ1Y3Qgb2hjaV9oY2QgKm9oY2ksCiAJCQkJCV9faGMzMiBfX2lvbWVtICogcmVncykKIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvcjhhNjY1OTctaGNkLmMgYi9kcml2ZXJzL3VzYi9ob3N0L3I4YTY2NTk3LWhjZC5jCmluZGV4IGVhNzEyNmYuLmMxOGQ4NzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QvcjhhNjY1OTctaGNkLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9yOGE2NjU5Ny1oY2QuYwpAQCAtNjYsNyArNjYsNyBAQAogbW9kdWxlX3BhcmFtKGVuZGlhbiwgdXNob3J0LCAwNjQ0KTsKIE1PRFVMRV9QQVJNX0RFU0MoZW5kaWFuLCAiZGF0YSBlbmRpYW46IGJpZz0yNTYsIGxpdHRsZT0wIChkZWZhdWx0PTApIik7CiAKLXN0YXRpYyB1bnNpZ25lZCBzaG9ydCBpcnFfc2Vuc2UgPSBJTlRMOworc3RhdGljIHVuc2lnbmVkIHNob3J0IGlycV9zZW5zZSA9IDB4ZmY7CiBtb2R1bGVfcGFyYW0oaXJxX3NlbnNlLCB1c2hvcnQsIDA2NDQpOwogTU9EVUxFX1BBUk1fREVTQyhpcnFfc2Vuc2UsICJJUlEgc2Vuc2U6IGxvdyBsZXZlbD0zMiwgZmFsbGluZyBlZGdlPTAgIgogCQkiKGRlZmF1bHQ9MzIpIik7CkBAIC0xMTgsNyArMTE4LDcgQEAKIAkJcjhhNjY1OTdfd3JpdGUocjhhNjY1OTcsIFNDS0UsIFNZU0NGRzApOwogCQl0bXAgPSByOGE2NjU5N19yZWFkKHI4YTY2NTk3LCBTWVNDRkcwKTsKIAkJaWYgKGkrKyA+IDEwMDApIHsKLQkJCWVycigicmVnaXN0ZXIgYWNjZXNzIGZhaWwuIik7CisJCQlwcmludGsoS0VSTl9FUlIgInI4YTY2NTk3OiByZWdpc3RlciBhY2Nlc3MgZmFpbC5cbiIpOwogCQkJcmV0dXJuIC1FTlhJTzsKIAkJfQogCX0gd2hpbGUgKCh0bXAgJiBTQ0tFKSAhPSBTQ0tFKTsKQEAgLTEyOCw3ICsxMjgsNyBAQAogCQlyOGE2NjU5N193cml0ZShyOGE2NjU5NywgVVNCRSwgU1lTQ0ZHMCk7CiAJCXRtcCA9IHI4YTY2NTk3X3JlYWQocjhhNjY1OTcsIFNZU0NGRzApOwogCQlpZiAoaSsrID4gMTAwMCkgewotCQkJZXJyKCJyZWdpc3RlciBhY2Nlc3MgZmFpbC4iKTsKKwkJCXByaW50ayhLRVJOX0VSUiAicjhhNjY1OTc6IHJlZ2lzdGVyIGFjY2VzcyBmYWlsLlxuIik7CiAJCQlyZXR1cm4gLUVOWElPOwogCQl9CiAJfSB3aGlsZSAoKHRtcCAmIFVTQkUpICE9IFVTQkUpOwpAQCAtMTQxLDcgKzE0MSw3IEBACiAJCW1zbGVlcCgxKTsKIAkJdG1wID0gcjhhNjY1OTdfcmVhZChyOGE2NjU5NywgU1lTQ0ZHMCk7CiAJCWlmIChpKysgPiA1MDApIHsKLQkJCWVycigicmVnaXN0ZXIgYWNjZXNzIGZhaWwuIik7CisJCQlwcmludGsoS0VSTl9FUlIgInI4YTY2NTk3OiByZWdpc3RlciBhY2Nlc3MgZmFpbC5cbiIpOwogCQkJcmV0dXJuIC1FTlhJTzsKIAkJfQogCX0gd2hpbGUgKCh0bXAgJiBTQ0tFKSAhPSBTQ0tFKTsKQEAgLTI2NSw3ICsyNjUsNyBAQAogCWlmIChyb290X3BvcnQpIHsKIAkJKnJvb3RfcG9ydCA9IChkZXZwYXRoWzBdICYgMHgwRikgLSAxOwogCQlpZiAoKnJvb3RfcG9ydCA+PSBSOEE2NjU5N19NQVhfUk9PVF9IVUIpCi0JCQllcnIoImlsbGVnYWwgcm9vdCBwb3J0IG51bWJlciIpOworCQkJcHJpbnRrKEtFUk5fRVJSICJyOGE2NjU5NzogSWxsZWdhbCByb290IHBvcnQgbnVtYmVyLlxuIik7CiAJfQogCWlmIChodWJfcG9ydCkKIAkJKmh1Yl9wb3J0ID0gZGV2cGF0aFsyXSAmIDB4MEY7CkBAIC0yODYsNyArMjg2LDcgQEAKIAkJdXNic3BkID0gSFNNT0RFOwogCQlicmVhazsKIAlkZWZhdWx0OgotCQllcnIoInVua25vd24gc3BlZWQiKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJyOGE2NjU5NzogdW5rbm93biBzcGVlZFxuIik7CiAJCWJyZWFrOwogCX0KIApAQCAtMzg1LDcgKzM4NSw3IEBACiAJc3RydWN0IHI4YTY2NTk3X2RldmljZSAqZGV2OwogCiAJaWYgKGlzX2h1Yl9saW1pdCh1cmItPmRldi0+ZGV2cGF0aCkpIHsKLQkJZXJyKCJFeHRlcm5lbCBodWIgbGltaXQgcmVhY2hlZC4iKTsKKwkJZGV2X2VycigmdXJiLT5kZXYtPmRldiwgIkV4dGVybmFsIGh1YiBsaW1pdCByZWFjaGVkLlxuIik7CiAJCXJldHVybiAwOwogCX0KIApAQCAtNDA2LDggKzQwNiw5IEBACiAJCXJldHVybiBhZGRyOwogCX0KIAotCWVycigiY2Fubm90IGNvbW11bmljYXRlIHdpdGggYSBVU0IgZGV2aWNlIG1vcmUgdGhhbiAxMC4oJXgpIiwKLQkgICAgcjhhNjY1OTctPmFkZHJlc3NfbWFwKTsKKwlkZXZfZXJyKCZ1cmItPmRldi0+ZGV2LAorCQkiY2Fubm90IGNvbW11bmljYXRlIHdpdGggYSBVU0IgZGV2aWNlIG1vcmUgdGhhbiAxMC4oJXgpXG4iLAorCQlyOGE2NjU5Ny0+YWRkcmVzc19tYXApOwogCiAJcmV0dXJuIDA7CiB9CkBAIC00NDcsNyArNDQ4LDggQEAKIAlkbyB7CiAJCXRtcCA9IHI4YTY2NTk3X3JlYWQocjhhNjY1OTcsIHJlZyk7CiAJCWlmIChpKysgPiAxMDAwMDAwKSB7Ci0JCQllcnIoInJlZ2lzdGVyJWx4LCBsb29wICV4IGlzIHRpbWVvdXQiLCByZWcsIGxvb3ApOworCQkJcHJpbnRrKEtFUk5fRVJSICJyOGE2NjU5NzogcmVnaXN0ZXIlbHgsIGxvb3AgJXggIgorCQkJICAgICAgICJpcyB0aW1lb3V0XG4iLCByZWcsIGxvb3ApOwogCQkJYnJlYWs7CiAJCX0KIAkJbmRlbGF5KDEpOwpAQCAtNjc1LDcgKzY3Nyw3IEBACiAJCQlhcnJheVtpKytdID0gMTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJZXJyKCJJbGxlZ2FsIHR5cGUiKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJyOGE2NjU5NzogSWxsZWdhbCB0eXBlXG4iKTsKIAkJcmV0dXJuIDA7CiAJfQogCkBAIC03MDUsNyArNzA3LDcgQEAKIAkJcjhhNjY1OTdfdHlwZSA9IFI4QTY2NTk3X0lTTzsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJZXJyKCJJbGxlZ2FsIHR5cGUiKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJyOGE2NjU5NzogSWxsZWdhbCB0eXBlXG4iKTsKIAkJcjhhNjY1OTdfdHlwZSA9IDB4MDAwMDsKIAkJYnJlYWs7CiAJfQpAQCAtNzI0LDcgKzcyNiw3IEBACiAJZWxzZSBpZiAoY2hlY2tfaW50ZXJydXB0KHBpcGVudW0pKQogCQlidWZudW0gPSA0ICsgKHBpcGVudW0gLSA2KTsKIAllbHNlCi0JCWVycigiSWxsZWdhbCBwaXBlbnVtICglZCkiLCBwaXBlbnVtKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJyOGE2NjU5NzogSWxsZWdhbCBwaXBlbnVtICglZClcbiIsIHBpcGVudW0pOwogCiAJcmV0dXJuIGJ1Zm51bTsKIH0KQEAgLTc0MCw3ICs3NDIsNyBAQAogCWVsc2UgaWYgKGNoZWNrX2ludGVycnVwdChwaXBlbnVtKSkKIAkJYnVmX2JzaXplID0gMDsKIAllbHNlCi0JCWVycigiSWxsZWdhbCBwaXBlbnVtICglZCkiLCBwaXBlbnVtKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJyOGE2NjU5NzogSWxsZWdhbCBwaXBlbnVtICglZClcbiIsIHBpcGVudW0pOwogCiAJcmV0dXJuIGJ1Zl9ic2l6ZTsKIH0KQEAgLTc2MCwxMCArNzYyLDEyIEBACiAJCQlpZiAoKHI4YTY2NTk3LT5kbWFfbWFwICYgKDEgPDwgaSkpICE9IDApCiAJCQkJY29udGludWU7CiAKLQkJCWluZm8oImFkZHJlc3MgJWQsIEVuZHBvaW50QWRkcmVzcyAweCUwMnggdXNlIERNQSBGSUZPIiwKLQkJCSAgICAgdXNiX3BpcGVkZXZpY2UodXJiLT5waXBlKSwKLQkJCSAgICAgaW5mby0+ZGlyX2luID8gVVNCX0VORFBPSU5UX0RJUl9NQVNLICsgaW5mby0+ZXBudW0KLQkJCQkJICAgIDogaW5mby0+ZXBudW0pOworCQkJZGV2X2luZm8oJmRldi0+dWRldi0+ZGV2LAorCQkJCSAiYWRkcmVzcyAlZCwgRW5kcG9pbnRBZGRyZXNzIDB4JTAyeCB1c2UgIgorCQkJCSAiRE1BIEZJRk9cbiIsIHVzYl9waXBlZGV2aWNlKHVyYi0+cGlwZSksCisJCQkJIGluZm8tPmRpcl9pbiA/CisJCQkJIAlVU0JfRU5EUE9JTlRfRElSX01BU0sgKyBpbmZvLT5lcG51bQorCQkJCQk6IGluZm8tPmVwbnVtKTsKIAogCQkJcjhhNjY1OTctPmRtYV9tYXAgfD0gMSA8PCBpOwogCQkJZGV2LT5kbWFfbWFwIHw9IDEgPDwgaTsKQEAgLTExODcsNyArMTE5MSw3IEBACiAJCXByZXBhcmVfc3RhdHVzX3BhY2tldChyOGE2NjU5NywgdGQpOwogCQlicmVhazsKIAlkZWZhdWx0OgotCQllcnIoImludmFsaWQgdHlwZS4iKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJyOGE2NjU5NzogaW52YWxpZCB0eXBlLlxuIik7CiAJCWJyZWFrOwogCX0KIApAQCAtMTI5NSw3ICsxMjk5LDcgQEAKIAlpZiAodW5saWtlbHkoKHRtcCAmIEZSRFkpID09IDApKSB7CiAJCXBpcGVfc3RvcChyOGE2NjU5NywgdGQtPnBpcGUpOwogCQlwaXBlX2lycV9kaXNhYmxlKHI4YTY2NTk3LCBwaXBlbnVtKTsKLQkJZXJyKCJpbiBmaWZvIG5vdCByZWFkeSAoJWQpIiwgcGlwZW51bSk7CisJCXByaW50ayhLRVJOX0VSUiAicjhhNjY1OTc6IGluIGZpZm8gbm90IHJlYWR5ICglZClcbiIsIHBpcGVudW0pOwogCQlmaW5pc2hfcmVxdWVzdChyOGE2NjU5NywgdGQsIHBpcGVudW0sIHRkLT51cmIsIC1FUElQRSk7CiAJCXJldHVybjsKIAl9CkBAIC0xMzcwLDcgKzEzNzQsNyBAQAogCWlmICh1bmxpa2VseSgodG1wICYgRlJEWSkgPT0gMCkpIHsKIAkJcGlwZV9zdG9wKHI4YTY2NTk3LCB0ZC0+cGlwZSk7CiAJCXBpcGVfaXJxX2Rpc2FibGUocjhhNjY1OTcsIHBpcGVudW0pOwotCQllcnIoIm91dCB3cml0ZSBmaWZvIG5vdCByZWFkeS4gKCVkKSIsIHBpcGVudW0pOworCQlwcmludGsoS0VSTl9FUlIgInI4YTY2NTk3OiBvdXQgZmlmbyBub3QgcmVhZHkgKCVkKVxuIiwgcGlwZW51bSk7CiAJCWZpbmlzaF9yZXF1ZXN0KHI4YTY2NTk3LCB0ZCwgcGlwZW51bSwgdXJiLCAtRVBJUEUpOwogCQlyZXR1cm47CiAJfQpAQCAtMjAwNSw3ICsyMDA5LDcgQEAKIAkJcmV0dXJuIGRldjsKIAl9CiAKLQllcnIoImdldF9yOGE2NjU5N19kZXZpY2UgZmFpbC4oJWQpXG4iLCBhZGRyKTsKKwlwcmludGsoS0VSTl9FUlIgInI4YTY2NTk3OiBnZXRfcjhhNjY1OTdfZGV2aWNlIGZhaWwuKCVkKVxuIiwgYWRkcik7CiAJcmV0dXJuIE5VTEw7CiB9CiAKQEAgLTIyNjMsNyArMjI2Nyw3IEBACiAjZGVmaW5lIHJlc291cmNlX2xlbihyKSAoKChyKS0+ZW5kIC0gKHIpLT5zdGFydCkgKyAxKQogc3RhdGljIGludCBfX2luaXQgcjhhNjY1OTdfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKLQlzdHJ1Y3QgcmVzb3VyY2UgKnJlcyA9IE5VTEw7CisJc3RydWN0IHJlc291cmNlICpyZXMgPSBOVUxMLCAqaXJlczsKIAlpbnQgaXJxID0gLTE7CiAJdm9pZCBfX2lvbWVtICpyZWcgPSBOVUxMOwogCXN0cnVjdCB1c2JfaGNkICpoY2QgPSBOVUxMOwpAQCAtMjI3NCw3ICsyMjc4LDcgQEAKIAogCWlmIChwZGV2LT5kZXYuZG1hX21hc2spIHsKIAkJcmV0ID0gLUVJTlZBTDsKLQkJZXJyKCJkbWEgbm90IHN1cHBvcnQiKTsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiZG1hIG5vdCBzdXBwb3J0ZWRcbiIpOwogCQlnb3RvIGNsZWFuX3VwOwogCX0KIApAQCAtMjI4MiwyMSArMjI4NiwyNSBAQAogCQkJCQkgICAoY2hhciAqKWhjZF9uYW1lKTsKIAlpZiAoIXJlcykgewogCQlyZXQgPSAtRU5PREVWOwotCQllcnIoInBsYXRmb3JtX2dldF9yZXNvdXJjZV9ieW5hbWUgZXJyb3IuIik7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgInBsYXRmb3JtX2dldF9yZXNvdXJjZV9ieW5hbWUgZXJyb3IuXG4iKTsKIAkJZ290byBjbGVhbl91cDsKIAl9CiAKLQlpcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApOwotCWlmIChpcnEgPCAwKSB7CisJaXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX0lSUSwgMCk7CisJaWYgKCFpcmVzKSB7CiAJCXJldCA9IC1FTk9ERVY7Ci0JCWVycigicGxhdGZvcm1fZ2V0X2lycSBlcnJvci4iKTsKKwkJZGV2X2VycigmcGRldi0+ZGV2LAorCQkJInBsYXRmb3JtX2dldF9yZXNvdXJjZSBJT1JFU09VUkNFX0lSUSBlcnJvci5cbiIpOwogCQlnb3RvIGNsZWFuX3VwOwogCX0KIAorCWlycSA9IGlyZXMtPnN0YXJ0OworCWlycV90cmlnZ2VyID0gaXJlcy0+ZmxhZ3MgJiBJUlFGX1RSSUdHRVJfTUFTSzsKKwogCXJlZyA9IGlvcmVtYXAocmVzLT5zdGFydCwgcmVzb3VyY2VfbGVuKHJlcykpOwogCWlmIChyZWcgPT0gTlVMTCkgewogCQlyZXQgPSAtRU5PTUVNOwotCQllcnIoImlvcmVtYXAgZXJyb3IuIik7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImlvcmVtYXAgZXJyb3IuXG4iKTsKIAkJZ290byBjbGVhbl91cDsKIAl9CiAKQEAgLTIzMDQsNyArMjMxMiw3IEBACiAJaGNkID0gdXNiX2NyZWF0ZV9oY2QoJnI4YTY2NTk3X2hjX2RyaXZlciwgJnBkZXYtPmRldiwgKGNoYXIgKiloY2RfbmFtZSk7CiAJaWYgKCFoY2QpIHsKIAkJcmV0ID0gLUVOT01FTTsKLQkJZXJyKCJGYWlsZWQgdG8gY3JlYXRlIGhjZCIpOworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJGYWlsZWQgdG8gY3JlYXRlIGhjZFxuIik7CiAJCWdvdG8gY2xlYW5fdXA7CiAJfQogCXI4YTY2NTk3ID0gaGNkX3RvX3I4YTY2NTk3KGhjZCk7CkBAIC0yMzI5LDEzICsyMzM3LDMzIEBACiAJSU5JVF9MSVNUX0hFQUQoJnI4YTY2NTk3LT5jaGlsZF9kZXZpY2UpOwogCiAJaGNkLT5yc3JjX3N0YXJ0ID0gcmVzLT5zdGFydDsKLQlpZiAoaXJxX3NlbnNlID09IElOVEwpCi0JCWlycV90cmlnZ2VyID0gSVJRRl9UUklHR0VSX0xPVzsKLQllbHNlCi0JCWlycV90cmlnZ2VyID0gSVJRRl9UUklHR0VSX0ZBTExJTkc7CisKKwkvKiBpcnFfc2Vuc2Ugc2V0dGluZyBvbiBjbWRsaW5lIHRha2VzIHByZWNlZGVuY2Ugb3ZlciByZXNvdXJjZQorCSAqIHNldHRpbmdzLCBzbyB0aGUgaW50cm9kdWN0aW9uIG9mIGlycWZsYWdzIGluIElSUSByZXNvdXJzZQorCSAqIHdvbid0IGRpc3R1cmIgZXhpc3Rpbmcgc2V0dXBzICovCisJc3dpdGNoIChpcnFfc2Vuc2UpIHsKKwkJY2FzZSBJTlRMOgorCQkJaXJxX3RyaWdnZXIgPSBJUlFGX1RSSUdHRVJfTE9XOworCQkJYnJlYWs7CisJCWNhc2UgMDoKKwkJCWlycV90cmlnZ2VyID0gSVJRRl9UUklHR0VSX0ZBTExJTkc7CisJCQlicmVhazsKKwkJY2FzZSAweGZmOgorCQkJaWYgKGlycV90cmlnZ2VyKQorCQkJCWlycV9zZW5zZSA9IChpcnFfdHJpZ2dlciAmIElSUUZfVFJJR0dFUl9MT1cpID8KKwkJCQkJICAgIElOVEwgOiAwOworCQkJZWxzZSB7CisJCQkJaXJxX3NlbnNlID0gSU5UTDsKKwkJCQlpcnFfdHJpZ2dlciA9IElSUUZfVFJJR0dFUl9MT1c7CisJCQl9CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWRldl9lcnIoJnBkZXYtPmRldiwgIlVua25vd24gaXJxX3NlbnNlIHZhbHVlLlxuIik7CisJfQorCiAJcmV0ID0gdXNiX2FkZF9oY2QoaGNkLCBpcnEsIElSUUZfRElTQUJMRUQgfCBpcnFfdHJpZ2dlcik7CiAJaWYgKHJldCAhPSAwKSB7Ci0JCWVycigiRmFpbGVkIHRvIGFkZCBoY2QiKTsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiRmFpbGVkIHRvIGFkZCBoY2RcbiIpOwogCQlnb3RvIGNsZWFuX3VwOwogCX0KIApAQCAtMjM2NCw3ICsyMzkyLDggQEAKIAlpZiAodXNiX2Rpc2FibGVkKCkpCiAJCXJldHVybiAtRU5PREVWOwogCi0JaW5mbygiZHJpdmVyICVzLCAlcyIsIGhjZF9uYW1lLCBEUklWRVJfVkVSU0lPTik7CisJcHJpbnRrKEtFUk5fSU5GTyBLQlVJTERfTU9ETkFNRSAiOiBkcml2ZXIgJXMsICVzXG4iLCBoY2RfbmFtZSwKKwkgICAgICAgRFJJVkVSX1ZFUlNJT04pOwogCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJnI4YTY2NTk3X2RyaXZlcik7CiB9CiBtb2R1bGVfaW5pdChyOGE2NjU5N19pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3Qvc2w4MTEtaGNkLmMgYi9kcml2ZXJzL3VzYi9ob3N0L3NsODExLWhjZC5jCmluZGV4IDhhNzRiYmIuLmUxMDZlOWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3Qvc2w4MTEtaGNkLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9zbDgxMS1oY2QuYwpAQCAtMTYyMCwyMiArMTYyMCwyNiBAQAogewogCXN0cnVjdCB1c2JfaGNkCQkqaGNkOwogCXN0cnVjdCBzbDgxMQkJKnNsODExOwotCXN0cnVjdCByZXNvdXJjZQkJKmFkZHIsICpkYXRhOworCXN0cnVjdCByZXNvdXJjZQkJKmFkZHIsICpkYXRhLCAqaXJlczsKIAlpbnQJCQlpcnE7CiAJdm9pZCBfX2lvbWVtCQkqYWRkcl9yZWc7CiAJdm9pZCBfX2lvbWVtCQkqZGF0YV9yZWc7CiAJaW50CQkJcmV0dmFsOwogCXU4CQkJdG1wLCBpb2FkZHIgPSAwOworCXVuc2lnbmVkIGxvbmcJCWlycWZsYWdzOwogCiAJLyogYmFzaWMgc2FuaXR5IGNoZWNrcyBmaXJzdC4gIGJvYXJkLXNwZWNpZmljIGluaXQgbG9naWMgc2hvdWxkCiAJICogaGF2ZSBpbml0aWFsaXplZCB0aGVzZSB0aHJlZSByZXNvdXJjZXMgYW5kIHByb2JhYmx5IGJvYXJkCiAJICogc3BlY2lmaWMgcGxhdGZvcm1fZGF0YS4gIHdlIGRvbid0IHByb2JlIGZvciBJUlFzLCBhbmQgZG8gb25seQogCSAqIG1pbmltYWwgc2FuaXR5IGNoZWNraW5nLgogCSAqLwotCWlycSA9IHBsYXRmb3JtX2dldF9pcnEoZGV2LCAwKTsKLQlpZiAoZGV2LT5udW1fcmVzb3VyY2VzIDwgMyB8fCBpcnEgPCAwKQorCWlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UoZGV2LCBJT1JFU09VUkNFX0lSUSwgMCk7CisJaWYgKGRldi0+bnVtX3Jlc291cmNlcyA8IDMgfHwgIWlyZXMpCiAJCXJldHVybiAtRU5PREVWOwogCisJaXJxID0gaXJlcy0+c3RhcnQ7CisJaXJxZmxhZ3MgPSBpcmVzLT5mbGFncyAmIElSUUZfVFJJR0dFUl9NQVNLOworCiAJLyogcmVmdXNlIHRvIGNvbmZ1c2UgdXNiY29yZSAqLwogCWlmIChkZXYtPmRldi5kbWFfbWFzaykgewogCQlEQkcoIm5vIHdlIHdvbid0IGRtYVxuIik7CkBAIC0xNzE3LDggKzE3MjEsMTEgQEAKIAkgKiB0cmlnZ2VycyAoZS5nLiBtb3N0IEFSTSBDUFVzKS4gIEluaXRpYWwgZHJpdmVyIHN0cmVzcyB0ZXN0aW5nCiAJICogd2FzIG9uIGEgc3lzdGVtIHdpdGggc2luZ2xlIGVkZ2UgdHJpZ2dlcmluZywgc28gbW9zdCBzb3J0cyBvZgogCSAqIHRyaWdnZXJpbmcgYXJyYW5nZW1lbnQgc2hvdWxkIHdvcmsuCisJICoKKwkgKiBVc2UgcmVzb3VyY2UgSVJRIGZsYWdzIGlmIHNldCBieSBwbGF0Zm9ybSBkZXZpY2Ugc2V0dXAuCiAJICovCi0JcmV0dmFsID0gdXNiX2FkZF9oY2QoaGNkLCBpcnEsIElSUUZfRElTQUJMRUQgfCBJUlFGX1NIQVJFRCk7CisJaXJxZmxhZ3MgfD0gSVJRRl9TSEFSRUQ7CisJcmV0dmFsID0gdXNiX2FkZF9oY2QoaGNkLCBpcnEsIElSUUZfRElTQUJMRUQgfCBpcnFmbGFncyk7CiAJaWYgKHJldHZhbCAhPSAwKQogCQlnb3RvIGVycjY7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3Qvc2w4MTFfY3MuYyBiL2RyaXZlcnMvdXNiL2hvc3Qvc2w4MTFfY3MuYwppbmRleCA1ZGE2M2Y1Li41MTY4NDhkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L3NsODExX2NzLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9zbDgxMV9jcy5jCkBAIC0xMTIsNyArMTEyLDggQEAKIAkubnVtX3Jlc291cmNlcwkJPSBBUlJBWV9TSVpFKHJlc291cmNlcyksCiB9OwogCi1zdGF0aWMgaW50IHNsODExX2hjX2luaXQoc3RydWN0IGRldmljZSAqcGFyZW50LCBpb2FkZHJfdCBiYXNlX2FkZHIsIGludCBpcnEpCitzdGF0aWMgaW50IHNsODExX2hjX2luaXQoc3RydWN0IGRldmljZSAqcGFyZW50LCByZXNvdXJjZV9zaXplX3QgYmFzZV9hZGRyLAorCQkJIGludCBpcnEpCiB7CiAJaWYgKHBsYXRmb3JtX2Rldi5kZXYucGFyZW50KQogCQlyZXR1cm4gLUVCVVNZOwpAQCAtMTU1LDk3ICsxNTYsNzIgQEAKIAlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcigmcGxhdGZvcm1fZGV2KTsKIH0KIAorc3RhdGljIGludCBzbDgxMV9jc19jb25maWdfY2hlY2soc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2LAorCQkJCSBjaXN0cGxfY2Z0YWJsZV9lbnRyeV90ICpjZmcsCisJCQkJIGNpc3RwbF9jZnRhYmxlX2VudHJ5X3QgKmRmbHQsCisJCQkJIHVuc2lnbmVkIGludCB2Y2MsCisJCQkJIHZvaWQgKnByaXZfZGF0YSkKK3sKKwlpZiAoY2ZnLT5pbmRleCA9PSAwKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCS8qIFVzZSBwb3dlciBzZXR0aW5ncyBmb3IgVmNjIGFuZCBWcHAgaWYgcHJlc2VudCAqLworCS8qICBOb3RlIHRoYXQgdGhlIENJUyB2YWx1ZXMgbmVlZCB0byBiZSByZXNjYWxlZCAqLworCWlmIChjZmctPnZjYy5wcmVzZW50ICYgKDE8PENJU1RQTF9QT1dFUl9WTk9NKSkgeworCQlpZiAoY2ZnLT52Y2MucGFyYW1bQ0lTVFBMX1BPV0VSX1ZOT01dLzEwMDAwICE9IHZjYykKKwkJCXJldHVybiAtRU5PREVWOworCX0gZWxzZSBpZiAoZGZsdC0+dmNjLnByZXNlbnQgJiAoMTw8Q0lTVFBMX1BPV0VSX1ZOT00pKSB7CisJCWlmIChkZmx0LT52Y2MucGFyYW1bQ0lTVFBMX1BPV0VSX1ZOT01dLzEwMDAwICE9IHZjYykKKwkJCXJldHVybiAtRU5PREVWOworCQl9CisKKwlpZiAoY2ZnLT52cHAxLnByZXNlbnQgJiAoMTw8Q0lTVFBMX1BPV0VSX1ZOT00pKQorCQlwX2Rldi0+Y29uZi5WcHAgPQorCQkJY2ZnLT52cHAxLnBhcmFtW0NJU1RQTF9QT1dFUl9WTk9NXS8xMDAwMDsKKwllbHNlIGlmIChkZmx0LT52cHAxLnByZXNlbnQgJiAoMTw8Q0lTVFBMX1BPV0VSX1ZOT00pKQorCQlwX2Rldi0+Y29uZi5WcHAgPQorCQkJZGZsdC0+dnBwMS5wYXJhbVtDSVNUUExfUE9XRVJfVk5PTV0vMTAwMDA7CisKKwkvKiB3ZSBuZWVkIGFuIGludGVycnVwdCAqLworCWlmIChjZmctPmlycS5JUlFJbmZvMSB8fCBkZmx0LT5pcnEuSVJRSW5mbzEpCisJCXBfZGV2LT5jb25mLkF0dHJpYnV0ZXMgfD0gQ09ORl9FTkFCTEVfSVJROworCisJLyogSU8gd2luZG93IHNldHRpbmdzICovCisJcF9kZXYtPmlvLk51bVBvcnRzMSA9IHBfZGV2LT5pby5OdW1Qb3J0czIgPSAwOworCWlmICgoY2ZnLT5pby5ud2luID4gMCkgfHwgKGRmbHQtPmlvLm53aW4gPiAwKSkgeworCQljaXN0cGxfaW9fdCAqaW8gPSAoY2ZnLT5pby5ud2luKSA/ICZjZmctPmlvIDogJmRmbHQtPmlvOworCisJCXBfZGV2LT5pby5BdHRyaWJ1dGVzMSA9IElPX0RBVEFfUEFUSF9XSURUSF84OworCQlwX2Rldi0+aW8uSU9BZGRyTGluZXMgPSBpby0+ZmxhZ3MgJiBDSVNUUExfSU9fTElORVNfTUFTSzsKKwkJcF9kZXYtPmlvLkJhc2VQb3J0MSA9IGlvLT53aW5bMF0uYmFzZTsKKwkJcF9kZXYtPmlvLk51bVBvcnRzMSA9IGlvLT53aW5bMF0ubGVuOworCisJCXJldHVybiBwY21jaWFfcmVxdWVzdF9pbyhwX2RldiwgJnBfZGV2LT5pbyk7CisJfQorCXBjbWNpYV9kaXNhYmxlX2RldmljZShwX2Rldik7CisJcmV0dXJuIC1FTk9ERVY7Cit9CisKKwogc3RhdGljIGludCBzbDgxMV9jc19jb25maWcoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCiB7CiAJc3RydWN0IGRldmljZQkJKnBhcmVudCA9ICZoYW5kbGVfdG9fZGV2KGxpbmspOwogCWxvY2FsX2luZm9fdAkJKmRldiA9IGxpbmstPnByaXY7Ci0JdHVwbGVfdAkJCXR1cGxlOwotCWNpc3BhcnNlX3QJCXBhcnNlOwogCWludAkJCWxhc3RfZm4sIGxhc3RfcmV0OwotCXVfY2hhcgkJCWJ1Zls2NF07Ci0JY29uZmlnX2luZm9fdAkJY29uZjsKLQljaXN0cGxfY2Z0YWJsZV9lbnRyeV90CWRmbHQgPSB7IDAgfTsKIAogCURCRygwLCAic2w4MTFfY3NfY29uZmlnKDB4JXApXG4iLCBsaW5rKTsKIAotCS8qIExvb2sgdXAgdGhlIGN1cnJlbnQgVmNjICovCi0JQ1NfQ0hFQ0soR2V0Q29uZmlndXJhdGlvbkluZm8sCi0JCQlwY21jaWFfZ2V0X2NvbmZpZ3VyYXRpb25faW5mbyhsaW5rLCAmY29uZikpOwotCi0JdHVwbGUuQXR0cmlidXRlcyA9IDA7Ci0JdHVwbGUuVHVwbGVEYXRhID0gYnVmOwotCXR1cGxlLlR1cGxlRGF0YU1heCA9IHNpemVvZihidWYpOwotCXR1cGxlLlR1cGxlT2Zmc2V0ID0gMDsKLQl0dXBsZS5EZXNpcmVkVHVwbGUgPSBDSVNUUExfQ0ZUQUJMRV9FTlRSWTsKLQlDU19DSEVDSyhHZXRGaXJzdFR1cGxlLCBwY21jaWFfZ2V0X2ZpcnN0X3R1cGxlKGxpbmssICZ0dXBsZSkpOwotCXdoaWxlICgxKSB7Ci0JCWNpc3RwbF9jZnRhYmxlX2VudHJ5X3QJKmNmZyA9ICYocGFyc2UuY2Z0YWJsZV9lbnRyeSk7Ci0KLQkJaWYgKHBjbWNpYV9nZXRfdHVwbGVfZGF0YShsaW5rLCAmdHVwbGUpICE9IDAKLQkJCQl8fCBwY21jaWFfcGFyc2VfdHVwbGUobGluaywgJnR1cGxlLCAmcGFyc2UpCi0JCQkJCQkhPSAwKQotCQkJZ290byBuZXh0X2VudHJ5OwotCi0JCWlmIChjZmctPmZsYWdzICYgQ0lTVFBMX0NGVEFCTEVfREVGQVVMVCkgewotCQkJZGZsdCA9ICpjZmc7Ci0JCX0KLQotCQlpZiAoY2ZnLT5pbmRleCA9PSAwKQotCQkJZ290byBuZXh0X2VudHJ5OwotCi0JCWxpbmstPmNvbmYuQ29uZmlnSW5kZXggPSBjZmctPmluZGV4OwotCi0JCS8qIFVzZSBwb3dlciBzZXR0aW5ncyBmb3IgVmNjIGFuZCBWcHAgaWYgcHJlc2VudCAqLwotCQkvKiAgTm90ZSB0aGF0IHRoZSBDSVMgdmFsdWVzIG5lZWQgdG8gYmUgcmVzY2FsZWQgKi8KLQkJaWYgKGNmZy0+dmNjLnByZXNlbnQgJiAoMTw8Q0lTVFBMX1BPV0VSX1ZOT00pKSB7Ci0JCQlpZiAoY2ZnLT52Y2MucGFyYW1bQ0lTVFBMX1BPV0VSX1ZOT01dLzEwMDAwCi0JCQkJCSE9IGNvbmYuVmNjKQotCQkJCWdvdG8gbmV4dF9lbnRyeTsKLQkJfSBlbHNlIGlmIChkZmx0LnZjYy5wcmVzZW50ICYgKDE8PENJU1RQTF9QT1dFUl9WTk9NKSkgewotCQkJaWYgKGRmbHQudmNjLnBhcmFtW0NJU1RQTF9QT1dFUl9WTk9NXS8xMDAwMAotCQkJCQkhPSBjb25mLlZjYykKLQkJCQlnb3RvIG5leHRfZW50cnk7Ci0JCX0KLQotCQlpZiAoY2ZnLT52cHAxLnByZXNlbnQgJiAoMTw8Q0lTVFBMX1BPV0VSX1ZOT00pKQotCQkJbGluay0+Y29uZi5WcHAgPQotCQkJCWNmZy0+dnBwMS5wYXJhbVtDSVNUUExfUE9XRVJfVk5PTV0vMTAwMDA7Ci0JCWVsc2UgaWYgKGRmbHQudnBwMS5wcmVzZW50ICYgKDE8PENJU1RQTF9QT1dFUl9WTk9NKSkKLQkJCWxpbmstPmNvbmYuVnBwID0KLQkJCQlkZmx0LnZwcDEucGFyYW1bQ0lTVFBMX1BPV0VSX1ZOT01dLzEwMDAwOwotCi0JCS8qIHdlIG5lZWQgYW4gaW50ZXJydXB0ICovCi0JCWlmIChjZmctPmlycS5JUlFJbmZvMSB8fCBkZmx0LmlycS5JUlFJbmZvMSkKLQkJCWxpbmstPmNvbmYuQXR0cmlidXRlcyB8PSBDT05GX0VOQUJMRV9JUlE7Ci0KLQkJLyogSU8gd2luZG93IHNldHRpbmdzICovCi0JCWxpbmstPmlvLk51bVBvcnRzMSA9IGxpbmstPmlvLk51bVBvcnRzMiA9IDA7Ci0JCWlmICgoY2ZnLT5pby5ud2luID4gMCkgfHwgKGRmbHQuaW8ubndpbiA+IDApKSB7Ci0JCQljaXN0cGxfaW9fdCAqaW8gPSAoY2ZnLT5pby5ud2luKSA/ICZjZmctPmlvIDogJmRmbHQuaW87Ci0KLQkJCWxpbmstPmlvLkF0dHJpYnV0ZXMxID0gSU9fREFUQV9QQVRIX1dJRFRIXzg7Ci0JCQlsaW5rLT5pby5JT0FkZHJMaW5lcyA9IGlvLT5mbGFncyAmIENJU1RQTF9JT19MSU5FU19NQVNLOwotCQkJbGluay0+aW8uQmFzZVBvcnQxID0gaW8tPndpblswXS5iYXNlOwotCQkJbGluay0+aW8uTnVtUG9ydHMxID0gaW8tPndpblswXS5sZW47Ci0KLQkJCWlmIChwY21jaWFfcmVxdWVzdF9pbyhsaW5rLCAmbGluay0+aW8pICE9IDApCi0JCQkJZ290byBuZXh0X2VudHJ5OwotCQl9Ci0JCWJyZWFrOwotCi1uZXh0X2VudHJ5OgotCQlwY21jaWFfZGlzYWJsZV9kZXZpY2UobGluayk7Ci0JCWxhc3RfcmV0ID0gcGNtY2lhX2dldF9uZXh0X3R1cGxlKGxpbmssICZ0dXBsZSk7Ci0JfQorCWlmIChwY21jaWFfbG9vcF9jb25maWcobGluaywgc2w4MTFfY3NfY29uZmlnX2NoZWNrLCBOVUxMKSkKKwkJZ290byBmYWlsZWQ7CiAKIAkvKiByZXF1aXJlIGFuIElSUSBhbmQgdHdvIHJlZ2lzdGVycyAqLwogCWlmICghbGluay0+aW8uTnVtUG9ydHMxIHx8IGxpbmstPmlvLk51bVBvcnRzMSA8IDIpCi0JCWdvdG8gY3NfZmFpbGVkOworCQlnb3RvIGZhaWxlZDsKIAlpZiAobGluay0+Y29uZi5BdHRyaWJ1dGVzICYgQ09ORl9FTkFCTEVfSVJRKQogCQlDU19DSEVDSyhSZXF1ZXN0SVJRLAogCQkJcGNtY2lhX3JlcXVlc3RfaXJxKGxpbmssICZsaW5rLT5pcnEpKTsKIAllbHNlCi0JCWdvdG8gY3NfZmFpbGVkOworCQlnb3RvIGZhaWxlZDsKIAogCUNTX0NIRUNLKFJlcXVlc3RDb25maWd1cmF0aW9uLAogCQlwY21jaWFfcmVxdWVzdF9jb25maWd1cmF0aW9uKGxpbmssICZsaW5rLT5jb25mKSk7CkBAIC0yNjYsOCArMjQyLDkgQEAKIAlpZiAoc2w4MTFfaGNfaW5pdChwYXJlbnQsIGxpbmstPmlvLkJhc2VQb3J0MSwgbGluay0+aXJxLkFzc2lnbmVkSVJRKQogCQkJPCAwKSB7CiBjc19mYWlsZWQ6Ci0JCXByaW50aygic2w4MTFfY3NfY29uZmlnIGZhaWxlZFxuIik7CiAJCWNzX2Vycm9yKGxpbmssIGxhc3RfZm4sIGxhc3RfcmV0KTsKK2ZhaWxlZDoKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAic2w4MTFfY3NfY29uZmlnIGZhaWxlZFxuIik7CiAJCXNsODExX2NzX3JlbGVhc2UobGluayk7CiAJCXJldHVybiAgLUVOT0RFVjsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L3VoY2ktaGNkLmMgYi9kcml2ZXJzL3VzYi9ob3N0L3VoY2ktaGNkLmMKaW5kZXggM2E3YmZlNy4uY2Y1ZTRjZiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC91aGNpLWhjZC5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvdWhjaS1oY2QuYwpAQCAtNTMsNyArNTMsNiBAQAogLyoKICAqIFZlcnNpb24gSW5mb3JtYXRpb24KICAqLwotI2RlZmluZSBEUklWRVJfVkVSU0lPTiAidjMuMCIKICNkZWZpbmUgRFJJVkVSX0FVVEhPUiAiTGludXMgJ0Zyb2RvIFJhYmJpdCcgVG9ydmFsZHMsIEpvaGFubmVzIEVyZGZlbHQsIFwKIFJhbmR5IER1bmxhcCwgR2VvcmcgQWNoZXIsIERldGkgRmxpZWdsLCBUaG9tYXMgU2FpbGVyLCBSb21hbiBXZWlzc2dhZXJiZXIsIFwKIEFsYW4gU3Rlcm4iCkBAIC05NTEsMTIgKzk1MCwxMyBAQAogewogCWludCByZXR2YWwgPSAtRU5PTUVNOwogCi0JcHJpbnRrKEtFUk5fSU5GTyBEUklWRVJfREVTQyAiICIgRFJJVkVSX1ZFUlNJT04gIiVzXG4iLAotCQkJaWdub3JlX29jID8gIiwgb3ZlcmN1cnJlbnQgaWdub3JlZCIgOiAiIik7Ci0KIAlpZiAodXNiX2Rpc2FibGVkKCkpCiAJCXJldHVybiAtRU5PREVWOwogCisJcHJpbnRrKEtFUk5fSU5GTyAidWhjaV9oY2Q6ICIgRFJJVkVSX0RFU0MgIiVzXG4iLAorCQkJaWdub3JlX29jID8gIiwgb3ZlcmN1cnJlbnQgaWdub3JlZCIgOiAiIik7CisJc2V0X2JpdChVU0JfVUhDSV9MT0FERUQsICZ1c2JfaGNkc19sb2FkZWQpOworCiAJaWYgKERFQlVHX0NPTkZJR1VSRUQpIHsKIAkJZXJyYnVmID0ga21hbGxvYyhFUlJCVUZfTEVOLCBHRlBfS0VSTkVMKTsKIAkJaWYgKCFlcnJidWYpCkBAIC05ODgsNiArOTg4LDcgQEAKIAogZXJyYnVmX2ZhaWxlZDoKIAorCWNsZWFyX2JpdChVU0JfVUhDSV9MT0FERUQsICZ1c2JfaGNkc19sb2FkZWQpOwogCXJldHVybiByZXR2YWw7CiB9CiAKQEAgLTk5Nyw2ICs5OTgsNyBAQAogCWttZW1fY2FjaGVfZGVzdHJveSh1aGNpX3VwX2NhY2hlcCk7CiAJZGVidWdmc19yZW1vdmUodWhjaV9kZWJ1Z2ZzX3Jvb3QpOwogCWtmcmVlKGVycmJ1Zik7CisJY2xlYXJfYml0KFVTQl9VSENJX0xPQURFRCwgJnVzYl9oY2RzX2xvYWRlZCk7CiB9CiAKIG1vZHVsZV9pbml0KHVoY2lfaGNkX2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC91aGNpLXEuYyBiL2RyaXZlcnMvdXNiL2hvc3QvdWhjaS1xLmMKaW5kZXggZGI2NDU5My4uNTYzMWQ4OSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC91aGNpLXEuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L3VoY2ktcS5jCkBAIC0xMjMsMTQgKzEyMywxMCBAQAogCiBzdGF0aWMgdm9pZCB1aGNpX2ZyZWVfdGQoc3RydWN0IHVoY2lfaGNkICp1aGNpLCBzdHJ1Y3QgdWhjaV90ZCAqdGQpCiB7Ci0JaWYgKCFsaXN0X2VtcHR5KCZ0ZC0+bGlzdCkpIHsKLQkJZGV2X3dhcm4odWhjaV9kZXYodWhjaSksICJ0ZCAlcCBzdGlsbCBpbiBsaXN0IVxuIiwgdGQpOwotCQlXQVJOX09OKDEpOwotCX0KLQlpZiAoIWxpc3RfZW1wdHkoJnRkLT5mbF9saXN0KSkgewotCQlkZXZfd2Fybih1aGNpX2Rldih1aGNpKSwgInRkICVwIHN0aWxsIGluIGZsX2xpc3QhXG4iLCB0ZCk7Ci0JCVdBUk5fT04oMSk7Ci0JfQorCWlmICghbGlzdF9lbXB0eSgmdGQtPmxpc3QpKQorCQlkZXZfV0FSTih1aGNpX2Rldih1aGNpKSwgInRkICVwIHN0aWxsIGluIGxpc3QhXG4iLCB0ZCk7CisJaWYgKCFsaXN0X2VtcHR5KCZ0ZC0+ZmxfbGlzdCkpCisJCWRldl9XQVJOKHVoY2lfZGV2KHVoY2kpLCAidGQgJXAgc3RpbGwgaW4gZmxfbGlzdCFcbiIsIHRkKTsKIAogCWRtYV9wb29sX2ZyZWUodWhjaS0+dGRfcG9vbCwgdGQsIHRkLT5kbWFfaGFuZGxlKTsKIH0KQEAgLTI5NSwxMCArMjkxLDggQEAKIHN0YXRpYyB2b2lkIHVoY2lfZnJlZV9xaChzdHJ1Y3QgdWhjaV9oY2QgKnVoY2ksIHN0cnVjdCB1aGNpX3FoICpxaCkKIHsKIAlXQVJOX09OKHFoLT5zdGF0ZSAhPSBRSF9TVEFURV9JRExFICYmIHFoLT51ZGV2KTsKLQlpZiAoIWxpc3RfZW1wdHkoJnFoLT5xdWV1ZSkpIHsKLQkJZGV2X3dhcm4odWhjaV9kZXYodWhjaSksICJxaCAlcCBsaXN0IG5vdCBlbXB0eSFcbiIsIHFoKTsKLQkJV0FSTl9PTigxKTsKLQl9CisJaWYgKCFsaXN0X2VtcHR5KCZxaC0+cXVldWUpKQorCQlkZXZfV0FSTih1aGNpX2Rldih1aGNpKSwgInFoICVwIGxpc3Qgbm90IGVtcHR5IVxuIiwgcWgpOwogCiAJbGlzdF9kZWwoJnFoLT5ub2RlKTsKIAlpZiAocWgtPnVkZXYpIHsKQEAgLTc0NiwxMSArNzQwLDkgQEAKIHsKIAlzdHJ1Y3QgdWhjaV90ZCAqdGQsICp0bXA7CiAKLQlpZiAoIWxpc3RfZW1wdHkoJnVyYnAtPm5vZGUpKSB7Ci0JCWRldl93YXJuKHVoY2lfZGV2KHVoY2kpLCAidXJiICVwIHN0aWxsIG9uIFFIJ3MgbGlzdCFcbiIsCisJaWYgKCFsaXN0X2VtcHR5KCZ1cmJwLT5ub2RlKSkKKwkJZGV2X1dBUk4odWhjaV9kZXYodWhjaSksICJ1cmIgJXAgc3RpbGwgb24gUUgncyBsaXN0IVxuIiwKIAkJCQl1cmJwLT51cmIpOwotCQlXQVJOX09OKDEpOwotCX0KIAogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSh0ZCwgdG1wLCAmdXJicC0+dGRfbGlzdCwgbGlzdCkgewogCQl1aGNpX3JlbW92ZV90ZF9mcm9tX3VyYnAodGQpOwpAQCAtMTA3MywxMyArMTA2NSwxOCBAQAogCQl9CiAJCWlmIChleHBvbmVudCA8IDApCiAJCQlyZXR1cm4gLUVJTlZBTDsKLQkJcWgtPnBlcmlvZCA9IDEgPDwgZXhwb25lbnQ7Ci0JCXFoLT5za2VsID0gU0tFTF9JTkRFWChleHBvbmVudCk7CiAKLQkJLyogRm9yIG5vdywgaW50ZXJydXB0IHBoYXNlIGlzIGZpeGVkIGJ5IHRoZSBsYXlvdXQKLQkJICogb2YgdGhlIFFIIGxpc3RzLiAqLwotCQlxaC0+cGhhc2UgPSAocWgtPnBlcmlvZCAvIDIpICYgKE1BWF9QSEFTRSAtIDEpOwotCQlyZXQgPSB1aGNpX2NoZWNrX2JhbmR3aWR0aCh1aGNpLCBxaCk7CisJCS8qIElmIHRoZSBzbG90IGlzIGZ1bGwsIHRyeSBhIGxvd2VyIHBlcmlvZCAqLworCQlkbyB7CisJCQlxaC0+cGVyaW9kID0gMSA8PCBleHBvbmVudDsKKwkJCXFoLT5za2VsID0gU0tFTF9JTkRFWChleHBvbmVudCk7CisKKwkJCS8qIEZvciBub3csIGludGVycnVwdCBwaGFzZSBpcyBmaXhlZCBieSB0aGUgbGF5b3V0CisJCQkgKiBvZiB0aGUgUUggbGlzdHMuCisJCQkgKi8KKwkJCXFoLT5waGFzZSA9IChxaC0+cGVyaW9kIC8gMikgJiAoTUFYX1BIQVNFIC0gMSk7CisJCQlyZXQgPSB1aGNpX2NoZWNrX2JhbmR3aWR0aCh1aGNpLCBxaCk7CisJCX0gd2hpbGUgKHJldCAhPSAwICYmIC0tZXhwb25lbnQgPj0gMCk7CiAJCWlmIChyZXQpCiAJCQlyZXR1cm4gcmV0OwogCX0gZWxzZSBpZiAocWgtPnBlcmlvZCA+IHVyYi0+aW50ZXJ2YWwpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9pbWFnZS9tZGM4MDAuYyBiL2RyaXZlcnMvdXNiL2ltYWdlL21kYzgwMC5jCmluZGV4IDBmYjExNGMuLjg3OGM3N2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2ltYWdlL21kYzgwMC5jCisrKyBiL2RyaXZlcnMvdXNiL2ltYWdlL21kYzgwMC5jCkBAIC0zNTUsMTMgKzM1NSwxNCBAQAogCWlmIChtZGM4MDAtPmNhbWVyYV9yZXF1ZXN0X3JlYWR5PjApCiAJewogCQltZGM4MDAtPmNhbWVyYV9yZXF1ZXN0X3JlYWR5PTA7Ci0JCWVyciAoInRpbWVvdXQgd2FpdGluZyBmb3IgY2FtZXJhLiIpOworCQlkZXZfZXJyKCZtZGM4MDAtPmRldi0+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+bWlub3IpOworCWRldl9pbmZvKCZpbnRlcmZhY2UtPmRldiwgIkxFR08gVVNCIFRvd2VyICMlZCBub3cgYXR0YWNoZWQgdG8gbWFqb3IgIgorCQkgIiVkIG1pbm9yICVkXG4iLCAoZGV2LT5taW5vciAtIExFR09fVVNCX1RPV0VSX01JTk9SX0JBU0UpLAorCQkgVVNCX01BSk9SLCBkZXYtPm1pbm9yKTsKIAogCS8qIGdldCB0aGUgZmlybXdhcmUgdmVyc2lvbiBhbmQgbG9nIGl0ICovCiAJcmVzdWx0ID0gdXNiX2NvbnRyb2xfbXNnICh1ZGV2LApAQCAtOTcxLDEwICs5NzIsMTAgQEAKIAkJcmV0dmFsID0gcmVzdWx0OwogCQlnb3RvIGVycm9yOwogCX0KLQlpbmZvKCJMRUdPIFVTQiBUb3dlciBmaXJtd2FyZSB2ZXJzaW9uIGlzICVkLiVkIGJ1aWxkICVkIiwKLQkgICAgIGdldF92ZXJzaW9uX3JlcGx5Lm1ham9yLAotCSAgICAgZ2V0X3ZlcnNpb25fcmVwbHkubWlub3IsCi0JICAgICBsZTE2X3RvX2NwdShnZXRfdmVyc2lvbl9yZXBseS5idWlsZF9ubykpOworCWRldl9pbmZvKCZpbnRlcmZhY2UtPmRldiwgIkxFR08gVVNCIFRvd2VyIGZpcm13YXJlIHZlcnNpb24gaXMgJWQuJWQgIgorCQkgImJ1aWxkICVkXG4iLCBnZXRfdmVyc2lvbl9yZXBseS5tYWpvciwKKwkJIGdldF92ZXJzaW9uX3JlcGx5Lm1pbm9yLAorCQkgbGUxNl90b19jcHUoZ2V0X3ZlcnNpb25fcmVwbHkuYnVpbGRfbm8pKTsKIAogCiBleGl0OgpAQCAtMTAyMSw3ICsxMDIyLDggQEAKIAkJbXV0ZXhfdW5sb2NrKCZkZXYtPmxvY2spOwogCX0KIAotCWluZm8oIkxFR08gVVNCIFRvd2VyICMlZCBub3cgZGlzY29ubmVjdGVkIiwgKG1pbm9yIC0gTEVHT19VU0JfVE9XRVJfTUlOT1JfQkFTRSkpOworCWRldl9pbmZvKCZpbnRlcmZhY2UtPmRldiwgIkxFR08gVVNCIFRvd2VyICMlZCBub3cgZGlzY29ubmVjdGVkXG4iLAorCQkgKG1pbm9yIC0gTEVHT19VU0JfVE9XRVJfTUlOT1JfQkFTRSkpOwogCiAJZGJnKDIsICIlczogbGVhdmUiLCBfX2Z1bmNfXyk7CiB9CkBAIC0xMDQ2LDcgKzEwNDgsOCBAQAogCQlnb3RvIGV4aXQ7CiAJfQogCi0JaW5mbyhEUklWRVJfREVTQyAiICIgRFJJVkVSX1ZFUlNJT04pOworCXByaW50ayhLRVJOX0lORk8gS0JVSUxEX01PRE5BTUUgIjogIiBEUklWRVJfVkVSU0lPTiAiOiIKKwkgICAgICAgRFJJVkVSX0RFU0MgIlxuIik7CiAKIGV4aXQ6CiAJZGJnKDIsICIlczogbGVhdmUsIHJldHVybiB2YWx1ZSAlZCIsIF9fZnVuY19fLCByZXR2YWwpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWlzYy9waGlkZ2V0a2l0LmMgYi9kcml2ZXJzL3VzYi9taXNjL3BoaWRnZXRraXQuYwppbmRleCA0Y2ZhMjViLi5jYzhlMGE5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9taXNjL3BoaWRnZXRraXQuYworKysgYi9kcml2ZXJzL3VzYi9taXNjL3BoaWRnZXRraXQuYwpAQCAtNTk1LDkgKzU5NSw4IEBACiAgICAgICAgIH0gd2hpbGUodmFsdWUpOwogICAgICAgICBraXQtPmRldl9ubyA9IGJpdDsKIAotCWtpdC0+ZGV2ID0gZGV2aWNlX2NyZWF0ZV9kcnZkYXRhKHBoaWRnZXRfY2xhc3MsICZraXQtPnVkZXYtPmRldiwKLQkJCQkJTUtERVYoMCwgMCksIGtpdCwKLQkJCQkJImludGVyZmFjZWtpdCVkIiwga2l0LT5kZXZfbm8pOworCWtpdC0+ZGV2ID0gZGV2aWNlX2NyZWF0ZShwaGlkZ2V0X2NsYXNzLCAma2l0LT51ZGV2LT5kZXYsIE1LREVWKDAsIDApLAorCQkJCSBraXQsICJpbnRlcmZhY2VraXQlZCIsIGtpdC0+ZGV2X25vKTsKICAgICAgICAgaWYgKElTX0VSUihraXQtPmRldikpIHsKICAgICAgICAgICAgICAgICByYyA9IFBUUl9FUlIoa2l0LT5kZXYpOwogICAgICAgICAgICAgICAgIGtpdC0+ZGV2ID0gTlVMTDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21pc2MvcGhpZGdldG1vdG9yY29udHJvbC5jIGIvZHJpdmVycy91c2IvbWlzYy9waGlkZ2V0bW90b3Jjb250cm9sLmMKaW5kZXggOWI0Njk2Zi4uMzgwODhiNCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbWlzYy9waGlkZ2V0bW90b3Jjb250cm9sLmMKKysrIGIvZHJpdmVycy91c2IvbWlzYy9waGlkZ2V0bW90b3Jjb250cm9sLmMKQEAgLTM2NSw5ICszNjUsOCBAQAogCX0gd2hpbGUodmFsdWUpOwogCW1jLT5kZXZfbm8gPSBiaXQ7CiAKLQltYy0+ZGV2ID0gZGV2aWNlX2NyZWF0ZV9kcnZkYXRhKHBoaWRnZXRfY2xhc3MsICZtYy0+dWRldi0+ZGV2LAotCQkJCQlNS0RFVigwLCAwKSwgbWMsCi0JCQkJCSJtb3RvcmNvbnRyb2wlZCIsIG1jLT5kZXZfbm8pOworCW1jLT5kZXYgPSBkZXZpY2VfY3JlYXRlKHBoaWRnZXRfY2xhc3MsICZtYy0+dWRldi0+ZGV2LCBNS0RFVigwLCAwKSwgbWMsCisJCQkJIm1vdG9yY29udHJvbCVkIiwgbWMtPmRldl9ubyk7CiAJaWYgKElTX0VSUihtYy0+ZGV2KSkgewogCQlyYyA9IFBUUl9FUlIobWMtPmRldik7CiAJCW1jLT5kZXYgPSBOVUxMOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWlzYy9waGlkZ2V0c2Vydm8uYyBiL2RyaXZlcnMvdXNiL21pc2MvcGhpZGdldHNlcnZvLmMKaW5kZXggMWNhN2RkYi4uYmVmNmZlMSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbWlzYy9waGlkZ2V0c2Vydm8uYworKysgYi9kcml2ZXJzL3VzYi9taXNjL3BoaWRnZXRzZXJ2by5jCkBAIC0yNzUsOSArMjc1LDggQEAKICAgICAgICAgfSB3aGlsZSAodmFsdWUpOwogCWRldi0+ZGV2X25vID0gYml0OwogCi0JZGV2LT5kZXYgPSBkZXZpY2VfY3JlYXRlX2RydmRhdGEocGhpZGdldF9jbGFzcywgJmRldi0+dWRldi0+ZGV2LAotCQkJCQkgTUtERVYoMCwgMCksIGRldiwKLQkJCQkJICJzZXJ2byVkIiwgZGV2LT5kZXZfbm8pOworCWRldi0+ZGV2ID0gZGV2aWNlX2NyZWF0ZShwaGlkZ2V0X2NsYXNzLCAmZGV2LT51ZGV2LT5kZXYsIE1LREVWKDAsIDApLAorCQkJCSBkZXYsICJzZXJ2byVkIiwgZGV2LT5kZXZfbm8pOwogCWlmIChJU19FUlIoZGV2LT5kZXYpKSB7CiAJCXJjID0gUFRSX0VSUihkZXYtPmRldik7CiAJCWRldi0+ZGV2ID0gTlVMTDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21pc2MvcmlvNTAwLmMgYi9kcml2ZXJzL3VzYi9taXNjL3JpbzUwMC5jCmluZGV4IDI0OGExMmEuLmRlYjk1YmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL21pc2MvcmlvNTAwLmMKKysrIGIvZHJpdmVycy91c2IvbWlzYy9yaW81MDAuYwpAQCAtODksNyArODksNyBAQAogCiAJbXV0ZXhfdW5sb2NrKCYocmlvLT5sb2NrKSk7CiAKLQlpbmZvKCJSaW8gb3BlbmVkLiIpOworCWRldl9pbmZvKCZyaW8tPnJpb19kZXYtPmRldiwgIlJpbyBvcGVuZWQuXG4iKTsKIAogCXJldHVybiAwOwogfQpAQCAtMTAwLDcgKzEwMCw3IEBACiAKIAlyaW8tPmlzb3BlbiA9IDA7CiAKLQlpbmZvKCJSaW8gY2xvc2VkLiIpOworCWRldl9pbmZvKCZyaW8tPnJpb19kZXYtPmRldiwgIlJpbyBjbG9zZWQuXG4iKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNDUxLDcgKzQ1MSw3IEBACiAJc3RydWN0IHJpb191c2JfZGF0YSAqcmlvID0gJnJpb19pbnN0YW5jZTsKIAlpbnQgcmV0dmFsOwogCi0JaW5mbygiVVNCIFJpbyBmb3VuZCBhdCBhZGRyZXNzICVkIiwgZGV2LT5kZXZudW0pOworCWRldl9pbmZvKCZpbnRmLT5kZXYsICJVU0IgUmlvIGZvdW5kIGF0IGFkZHJlc3MgJWRcbiIsIGRldi0+ZGV2bnVtKTsKIAogCXJldHZhbCA9IHVzYl9yZWdpc3Rlcl9kZXYoaW50ZiwgJnVzYl9yaW9fY2xhc3MpOwogCWlmIChyZXR2YWwpIHsKQEAgLTUwMyw3ICs1MDMsNyBAQAogCQlrZnJlZShyaW8tPmlidWYpOwogCQlrZnJlZShyaW8tPm9idWYpOwogCi0JCWluZm8oIlVTQiBSaW8gZGlzY29ubmVjdGVkLiIpOworCQlkZXZfaW5mbygmaW50Zi0+ZGV2LCAiVVNCIFJpbyBkaXNjb25uZWN0ZWQuXG4iKTsKIAogCQlyaW8tPnByZXNlbnQgPSAwOwogCQltdXRleF91bmxvY2soJihyaW8tPmxvY2spKTsKQEAgLTUzMSw3ICs1MzEsOCBAQAogCWlmIChyZXR2YWwpCiAJCWdvdG8gb3V0OwogCi0JaW5mbyhEUklWRVJfVkVSU0lPTiAiOiIgRFJJVkVSX0RFU0MpOworCXByaW50ayhLRVJOX0lORk8gS0JVSUxEX01PRE5BTUUgIjogIiBEUklWRVJfVkVSU0lPTiAiOiIKKwkgICAgICAgRFJJVkVSX0RFU0MgIlxuIik7CiAKIG91dDoKIAlyZXR1cm4gcmV0dmFsOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWlzYy90cmFuY2V2aWJyYXRvci5jIGIvZHJpdmVycy91c2IvbWlzYy90cmFuY2V2aWJyYXRvci5jCmluZGV4IDAzMzY4ZWQuLjJlMTQxMDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL21pc2MvdHJhbmNldmlicmF0b3IuYworKysgYi9kcml2ZXJzL3VzYi9taXNjL3RyYW5jZXZpYnJhdG9yLmMKQEAgLTE0NCw3ICsxNDQsOCBAQAogCQlyZXR1cm4gcmV0dmFsOwogCX0KIAotCWluZm8oRFJJVkVSX1ZFUlNJT04gIjoiIERSSVZFUl9ERVNDKTsKKwlwcmludGsoS0VSTl9JTkZPIEtCVUlMRF9NT0ROQU1FICI6ICIgRFJJVkVSX1ZFUlNJT04gIjoiCisJICAgICAgIERSSVZFUl9ERVNDICJcbiIpOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9taXNjL3VzYmxjZC5jIGIvZHJpdmVycy91c2IvbWlzYy91c2JsY2QuYwppbmRleCAyZGI0MjI4Li5lMGZmOWNjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9taXNjL3VzYmxjZC5jCisrKyBiL2RyaXZlcnMvdXNiL21pc2MvdXNibGNkLmMKQEAgLTMxMSw3ICszMTEsNyBAQAogCWRldi0+aW50ZXJmYWNlID0gaW50ZXJmYWNlOwogCiAJaWYgKGxlMTZfdG9fY3B1KGRldi0+dWRldi0+ZGVzY3JpcHRvci5pZFByb2R1Y3QpICE9IDB4MDAwMSkgewotCQl3YXJuKEtFUk5fSU5GTyAiVVNCTENEIG1vZGVsIG5vdCBzdXBwb3J0ZWQuIik7CisJCWRldl93YXJuKCZpbnRlcmZhY2UtPmRldiwgIlVTQkxDRCBtb2RlbCBub3Qgc3VwcG9ydGVkLlxuIik7CiAJCXJldHVybiAtRU5PREVWOwogCX0KIAkKQEAgLTM1OSwxMiArMzU5LDEzIEBACiAKIAlpID0gbGUxNl90b19jcHUoZGV2LT51ZGV2LT5kZXNjcmlwdG9yLmJjZERldmljZSk7CiAKLQlpbmZvKCJVU0JMQ0QgVmVyc2lvbiAlMWQlMWQuJTFkJTFkIGZvdW5kIGF0IGFkZHJlc3MgJWQiLAotCQkoaSAmIDB4RjAwMCk+PjEyLChpICYgMHhGMDApPj44LChpICYgMHhGMCk+PjQsKGkgJiAweEYpLAotCQlkZXYtPnVkZXYtPmRldm51bSk7CisJZGV2X2luZm8oJmludGVyZmFjZS0+ZGV2LCAiVVNCTENEIFZlcnNpb24gJTFkJTFkLiUxZCUxZCBmb3VuZCAiCisJCSAiYXQgYWRkcmVzcyAlZFxuIiwgKGkgJiAweEYwMDApPj4xMiwgKGkgJiAweEYwMCk+PjgsCisJCSAoaSAmIDB4RjApPj40LChpICYgMHhGKSwgZGV2LT51ZGV2LT5kZXZudW0pOwogCiAJLyogbGV0IHRoZSB1c2VyIGtub3cgd2hhdCBub2RlIHRoaXMgZGV2aWNlIGlzIG5vdyBhdHRhY2hlZCB0byAqLwotCWluZm8oIlVTQiBMQ0QgZGV2aWNlIG5vdyBhdHRhY2hlZCB0byBVU0JMQ0QtJWQiLCBpbnRlcmZhY2UtPm1pbm9yKTsKKwlkZXZfaW5mbygmaW50ZXJmYWNlLT5kZXYsICJVU0IgTENEIGRldmljZSBub3cgYXR0YWNoZWQgdG8gVVNCTENELSVkXG4iLAorCQkgaW50ZXJmYWNlLT5taW5vcik7CiAJcmV0dXJuIDA7CiAKIGVycm9yOgpAQCAtNDEzLDcgKzQxNCw3IEBACiAJLyogZGVjcmVtZW50IG91ciB1c2FnZSBjb3VudCAqLwogCWtyZWZfcHV0KCZkZXYtPmtyZWYsIGxjZF9kZWxldGUpOwogCi0JaW5mbygiVVNCIExDRCAjJWQgbm93IGRpc2Nvbm5lY3RlZCIsIG1pbm9yKTsKKwlkZXZfaW5mbygmaW50ZXJmYWNlLT5kZXYsICJVU0IgTENEICMlZCBub3cgZGlzY29ubmVjdGVkXG4iLCBtaW5vcik7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBsY2RfZHJpdmVyID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWlzYy91c2JzZXZzZWcuYyBiL2RyaXZlcnMvdXNiL21pc2MvdXNic2V2c2VnLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjhhNmEzYQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL21pc2MvdXNic2V2c2VnLmMKQEAgLTAsMCArMSwzOTQgQEAKKy8qCisgKiBVU0IgNyBTZWdtZW50IERyaXZlcgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBIYXJyaXNvbiBNZXR6Z2VyIDxoYXJyaXNvbm1ldHpAZ21haWwuY29tPgorICogQmFzZWQgb24gdXNibGVkLmMgYnkgR3JlZyBLcm9haC1IYXJ0bWFuIChncmVnQGtyb2FoLmNvbSkKKyAqCisgKglUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKgltb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICoJcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHZlcnNpb24gMi4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC91c2IuaD4KKworCisjZGVmaW5lIERSSVZFUl9BVVRIT1IgIkhhcnJpc29uIE1ldHpnZXIgPGhhcnJpc29ubWV0ekBnbWFpbC5jb20+IgorI2RlZmluZSBEUklWRVJfREVTQyAiVVNCIDcgU2VnbWVudCBEcml2ZXIiCisKKyNkZWZpbmUgVkVORE9SX0lECTB4MGZjNQorI2RlZmluZSBQUk9EVUNUX0lECTB4MTIyNworI2RlZmluZSBNQVhMRU4JCTYKKworLyogdGFibGUgb2YgZGV2aWNlcyB0aGF0IHdvcmsgd2l0aCB0aGlzIGRyaXZlciAqLworc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGlkX3RhYmxlW10gPSB7CisJeyBVU0JfREVWSUNFKFZFTkRPUl9JRCwgUFJPRFVDVF9JRCkgfSwKKwl7IH0sCit9OworTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIGlkX3RhYmxlKTsKKworLyogdGhlIGRpZmZlcmVudCB0ZXh0IGRpc3BsYXkgbW9kZXMgdGhlIGRldmljZSBpcyBjYXBhYmxlIG9mICovCitzdGF0aWMgY2hhciAqZGlzcGxheV90ZXh0bW9kZXNbXSA9IHsicmF3IiwgImhleCIsICJhc2NpaSIsIE5VTEx9OworCitzdHJ1Y3QgdXNiX3NldnNlZ2RldiB7CisJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXY7CisKKwl1OCBwb3dlcmVkOworCXU4IG1vZGVfbXNiOworCXU4IG1vZGVfbHNiOworCXU4IGRlY2ltYWxzW01BWExFTl07CisJdTggdGV4dG1vZGU7CisJdTggdGV4dFtNQVhMRU5dOworCXUxNiB0ZXh0bGVuZ3RoOworfTsKKworLyogc3lzZnNfc3RyZXEgY2FuJ3QgcmVwbGFjZSB0aGlzIGNvbXBsZXRlbHkKKyAqIElmIHRoZSBkZXZpY2Ugd2FzIGluIGhleCBtb2RlLCBhbmQgdGhlIHVzZXIgd2FudGVkIGEgMCwKKyAqIGlmIHN0ciBjb21tYW5kcyBhcmUgdXNlZCwgd2Ugd291bGQgYXNzdW1lIHRoZSBlbmQgb2Ygc3RyaW5nCisgKiBzbyBtZW0gY29tbWFuZHMgYXJlIHVzZWQuCisgKi8KK2lubGluZSBzaXplX3QgbXlfbWVtbGVuKGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCWlmIChjb3VudCA+IDAgJiYgYnVmW2NvdW50LTFdID09ICdcbicpCisJCXJldHVybiBjb3VudCAtIDE7CisJZWxzZQorCQlyZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyB2b2lkIHVwZGF0ZV9kaXNwbGF5X3Bvd2VyZWQoc3RydWN0IHVzYl9zZXZzZWdkZXYgKm15ZGV2KQoreworCWludCByYzsKKworCXJjID0gdXNiX2NvbnRyb2xfbXNnKG15ZGV2LT51ZGV2LAorCQkJdXNiX3NuZGN0cmxwaXBlKG15ZGV2LT51ZGV2LCAwKSwKKwkJCTB4MTIsCisJCQkweDQ4LAorCQkJKDgwICogMHgxMDApICsgMTAsIC8qICAocG93ZXIgbW9kZSkgKi8KKwkJCSgweDAwICogMHgxMDApICsgKG15ZGV2LT5wb3dlcmVkID8gMSA6IDApLAorCQkJTlVMTCwKKwkJCTAsCisJCQkyMDAwKTsKKwlpZiAocmMgPCAwKQorCQlkZXZfZGJnKCZteWRldi0+dWRldi0+ZGV2LCAicG93ZXIgcmV0dmFsID0gJWRcbiIsIHJjKTsKK30KKworc3RhdGljIHZvaWQgdXBkYXRlX2Rpc3BsYXlfbW9kZShzdHJ1Y3QgdXNiX3NldnNlZ2RldiAqbXlkZXYpCit7CisJaW50IHJjOworCisJcmMgPSB1c2JfY29udHJvbF9tc2cobXlkZXYtPnVkZXYsCisJCQl1c2Jfc25kY3RybHBpcGUobXlkZXYtPnVkZXYsIDApLAorCQkJMHgxMiwKKwkJCTB4NDgsCisJCQkoODIgKiAweDEwMCkgKyAxMCwgLyogKHNldCBtb2RlKSAqLworCQkJKG15ZGV2LT5tb2RlX21zYiAqIDB4MTAwKSArIG15ZGV2LT5tb2RlX2xzYiwKKwkJCU5VTEwsCisJCQkwLAorCQkJMjAwMCk7CisKKwlpZiAocmMgPCAwKQorCQlkZXZfZGJnKCZteWRldi0+dWRldi0+ZGV2LCAibW9kZSByZXR2YWwgPSAlZFxuIiwgcmMpOworfQorCitzdGF0aWMgdm9pZCB1cGRhdGVfZGlzcGxheV92aXN1YWwoc3RydWN0IHVzYl9zZXZzZWdkZXYgKm15ZGV2KQoreworCWludCByYzsKKwlpbnQgaTsKKwl1bnNpZ25lZCBjaGFyICpidWZmZXI7CisJdTggZGVjaW1hbHMgPSAwOworCisJYnVmZmVyID0ga3phbGxvYyhNQVhMRU4sIEdGUF9LRVJORUwpOworCWlmICghYnVmZmVyKSB7CisJCWRldl9lcnIoJm15ZGV2LT51ZGV2LT5kZXYsICJvdXQgb2YgbWVtb3J5XG4iKTsKKwkJcmV0dXJuOworCX0KKworCS8qIFRoZSBkZXZpY2UgaXMgcmlnaHQgdG8gbGVmdCwgd2hlcmUgYXMgeW91IHdyaXRlIGxlZnQgdG8gcmlnaHQgKi8KKwlmb3IgKGkgPSAwOyBpIDwgbXlkZXYtPnRleHRsZW5ndGg7IGkrKykKKwkJYnVmZmVyW2ldID0gbXlkZXYtPnRleHRbbXlkZXYtPnRleHRsZW5ndGgtMS1pXTsKKworCXJjID0gdXNiX2NvbnRyb2xfbXNnKG15ZGV2LT51ZGV2LAorCQkJdXNiX3NuZGN0cmxwaXBlKG15ZGV2LT51ZGV2LCAwKSwKKwkJCTB4MTIsCisJCQkweDQ4LAorCQkJKDg1ICogMHgxMDApICsgMTAsIC8qICh3cml0ZSB0ZXh0KSAqLworCQkJKDAgKiAweDEwMCkgKyBteWRldi0+dGV4dG1vZGUsIC8qIG1vZGUgICovCisJCQlidWZmZXIsCisJCQlteWRldi0+dGV4dGxlbmd0aCwKKwkJCTIwMDApOworCisJaWYgKHJjIDwgMCkKKwkJZGV2X2RiZygmbXlkZXYtPnVkZXYtPmRldiwgIndyaXRlIHJldHZhbCA9ICVkXG4iLCByYyk7CisKKwlrZnJlZShidWZmZXIpOworCisJLyogVGhlIGRldmljZSBpcyByaWdodCB0byBsZWZ0LCB3aGVyZSBhcyB5b3Ugd3JpdGUgbGVmdCB0byByaWdodCAqLworCWZvciAoaSA9IDA7IGkgPCBzaXplb2YobXlkZXYtPmRlY2ltYWxzKTsgaSsrKQorCQlkZWNpbWFscyB8PSBteWRldi0+ZGVjaW1hbHNbaV0gPDwgaTsKKworCXJjID0gdXNiX2NvbnRyb2xfbXNnKG15ZGV2LT51ZGV2LAorCQkJdXNiX3NuZGN0cmxwaXBlKG15ZGV2LT51ZGV2LCAwKSwKKwkJCTB4MTIsCisJCQkweDQ4LAorCQkJKDg2ICogMHgxMDApICsgMTAsIC8qIChzZXQgZGVjaW1hbCkgKi8KKwkJCSgwICogMHgxMDApICsgZGVjaW1hbHMsIC8qIGRlY2ltYWxzICovCisJCQlOVUxMLAorCQkJMCwKKwkJCTIwMDApOworCisJaWYgKHJjIDwgMCkKKwkJZGV2X2RiZygmbXlkZXYtPnVkZXYtPmRldiwgImRlY2ltYWwgcmV0dmFsID0gJWRcbiIsIHJjKTsKK30KKworI2RlZmluZSBNWURFVl9BVFRSX1NJTVBMRV9VTlNJR05FRChuYW1lLCB1cGRhdGVfZmNuKQkJXAorc3RhdGljIHNzaXplX3Qgc2hvd19hdHRyXyMjbmFtZShzdHJ1Y3QgZGV2aWNlICpkZXYsIAkJXAorCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpIAkJXAorewkJCQkJCQkJXAorCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmID0gdG9fdXNiX2ludGVyZmFjZShkZXYpOwlcCisJc3RydWN0IHVzYl9zZXZzZWdkZXYgKm15ZGV2ID0gdXNiX2dldF9pbnRmZGF0YShpbnRmKTsJXAorCQkJCQkJCQlcCisJcmV0dXJuIHNwcmludGYoYnVmLCAiJXVcbiIsIG15ZGV2LT5uYW1lKTsJCVwKK30JCQkJCQkJCVwKKwkJCQkJCQkJXAorc3RhdGljIHNzaXplX3Qgc2V0X2F0dHJfIyNuYW1lKHN0cnVjdCBkZXZpY2UgKmRldiwgCQlcCisJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KSBcCit7CQkJCQkJCQlcCisJc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYgPSB0b191c2JfaW50ZXJmYWNlKGRldik7CVwKKwlzdHJ1Y3QgdXNiX3NldnNlZ2RldiAqbXlkZXYgPSB1c2JfZ2V0X2ludGZkYXRhKGludGYpOwlcCisJCQkJCQkJCVwKKwlteWRldi0+bmFtZSA9IHNpbXBsZV9zdHJ0b3VsKGJ1ZiwgTlVMTCwgMTApOwkJXAorCXVwZGF0ZV9mY24obXlkZXYpOyBcCisJCQkJCQkJCVwKKwlyZXR1cm4gY291bnQ7CQkJCQkJXAorfQkJCQkJCQkJXAorc3RhdGljIERFVklDRV9BVFRSKG5hbWUsIFNfSVdVR08gfCBTX0lSVUdPLCBzaG93X2F0dHJfIyNuYW1lLCBzZXRfYXR0cl8jI25hbWUpOworCitzdGF0aWMgc3NpemVfdCBzaG93X2F0dHJfdGV4dChzdHJ1Y3QgZGV2aWNlICpkZXYsCisJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiA9IHRvX3VzYl9pbnRlcmZhY2UoZGV2KTsKKwlzdHJ1Y3QgdXNiX3NldnNlZ2RldiAqbXlkZXYgPSB1c2JfZ2V0X2ludGZkYXRhKGludGYpOworCisJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgbXlkZXYtPnRleHRsZW5ndGgsICIlc1xuIiwgbXlkZXYtPnRleHQpOworfQorCitzdGF0aWMgc3NpemVfdCBzZXRfYXR0cl90ZXh0KHN0cnVjdCBkZXZpY2UgKmRldiwKKwlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYgPSB0b191c2JfaW50ZXJmYWNlKGRldik7CisJc3RydWN0IHVzYl9zZXZzZWdkZXYgKm15ZGV2ID0gdXNiX2dldF9pbnRmZGF0YShpbnRmKTsKKwlzaXplX3QgZW5kID0gbXlfbWVtbGVuKGJ1ZiwgY291bnQpOworCisJaWYgKGVuZCA+IHNpemVvZihteWRldi0+dGV4dCkpCisJCXJldHVybiAtRUlOVkFMOworCisJbWVtc2V0KG15ZGV2LT50ZXh0LCAwLCBzaXplb2YobXlkZXYtPnRleHQpKTsKKwlteWRldi0+dGV4dGxlbmd0aCA9IGVuZDsKKworCWlmIChlbmQgPiAwKQorCQltZW1jcHkobXlkZXYtPnRleHQsIGJ1ZiwgZW5kKTsKKworCXVwZGF0ZV9kaXNwbGF5X3Zpc3VhbChteWRldik7CisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgREVWSUNFX0FUVFIodGV4dCwgU19JV1VHTyB8IFNfSVJVR08sIHNob3dfYXR0cl90ZXh0LCBzZXRfYXR0cl90ZXh0KTsKKworc3RhdGljIHNzaXplX3Qgc2hvd19hdHRyX2RlY2ltYWxzKHN0cnVjdCBkZXZpY2UgKmRldiwKKwlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmID0gdG9fdXNiX2ludGVyZmFjZShkZXYpOworCXN0cnVjdCB1c2Jfc2V2c2VnZGV2ICpteWRldiA9IHVzYl9nZXRfaW50ZmRhdGEoaW50Zik7CisJaW50IGk7CisJaW50IHBvczsKKworCWZvciAoaSA9IDA7IGkgPCBzaXplb2YobXlkZXYtPmRlY2ltYWxzKTsgaSsrKSB7CisJCXBvcyA9IHNpemVvZihteWRldi0+ZGVjaW1hbHMpIC0gMSAtIGk7CisJCWlmIChteWRldi0+ZGVjaW1hbHNbaV0gPT0gMCkKKwkJCWJ1Zltwb3NdID0gJzAnOworCQllbHNlIGlmIChteWRldi0+ZGVjaW1hbHNbaV0gPT0gMSkKKwkJCWJ1Zltwb3NdID0gJzEnOworCQllbHNlCisJCQlidWZbcG9zXSA9ICd4JzsKKwl9CisKKwlidWZbc2l6ZW9mKG15ZGV2LT5kZWNpbWFscyldID0gJ1xuJzsKKwlyZXR1cm4gc2l6ZW9mKG15ZGV2LT5kZWNpbWFscykgKyAxOworfQorCitzdGF0aWMgc3NpemVfdCBzZXRfYXR0cl9kZWNpbWFscyhzdHJ1Y3QgZGV2aWNlICpkZXYsCisJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmID0gdG9fdXNiX2ludGVyZmFjZShkZXYpOworCXN0cnVjdCB1c2Jfc2V2c2VnZGV2ICpteWRldiA9IHVzYl9nZXRfaW50ZmRhdGEoaW50Zik7CisJc2l6ZV90IGVuZCA9IG15X21lbWxlbihidWYsIGNvdW50KTsKKwlpbnQgaTsKKworCWlmIChlbmQgPiBzaXplb2YobXlkZXYtPmRlY2ltYWxzKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlmb3IgKGkgPSAwOyBpIDwgZW5kOyBpKyspCisJCWlmIChidWZbaV0gIT0gJzAnICYmIGJ1ZltpXSAhPSAnMScpCisJCQlyZXR1cm4gLUVJTlZBTDsKKworCW1lbXNldChteWRldi0+ZGVjaW1hbHMsIDAsIHNpemVvZihteWRldi0+ZGVjaW1hbHMpKTsKKwlmb3IgKGkgPSAwOyBpIDwgZW5kOyBpKyspCisJCWlmIChidWZbaV0gPT0gJzEnKQorCQkJbXlkZXYtPmRlY2ltYWxzW2VuZC0xLWldID0gMTsKKworCXVwZGF0ZV9kaXNwbGF5X3Zpc3VhbChteWRldik7CisKKwlyZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyBERVZJQ0VfQVRUUihkZWNpbWFscywgU19JV1VHTyB8IFNfSVJVR08sCisJc2hvd19hdHRyX2RlY2ltYWxzLCBzZXRfYXR0cl9kZWNpbWFscyk7CisKK3N0YXRpYyBzc2l6ZV90IHNob3dfYXR0cl90ZXh0bW9kZShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiA9IHRvX3VzYl9pbnRlcmZhY2UoZGV2KTsKKwlzdHJ1Y3QgdXNiX3NldnNlZ2RldiAqbXlkZXYgPSB1c2JfZ2V0X2ludGZkYXRhKGludGYpOworCWludCBpOworCisJYnVmWzBdID0gMDsKKworCWZvciAoaSA9IDA7IGRpc3BsYXlfdGV4dG1vZGVzW2ldOyBpKyspIHsKKwkJaWYgKG15ZGV2LT50ZXh0bW9kZSA9PSBpKSB7CisJCQlzdHJjYXQoYnVmLCAiIFsiKTsKKwkJCXN0cmNhdChidWYsIGRpc3BsYXlfdGV4dG1vZGVzW2ldKTsKKwkJCXN0cmNhdChidWYsICJdICIpOworCQl9IGVsc2UgeworCQkJc3RyY2F0KGJ1ZiwgIiAiKTsKKwkJCXN0cmNhdChidWYsIGRpc3BsYXlfdGV4dG1vZGVzW2ldKTsKKwkJCXN0cmNhdChidWYsICIgIik7CisJCX0KKwl9CisJc3RyY2F0KGJ1ZiwgIlxuIik7CisKKworCXJldHVybiBzdHJsZW4oYnVmKTsKK30KKworc3RhdGljIHNzaXplX3Qgc2V0X2F0dHJfdGV4dG1vZGUoc3RydWN0IGRldmljZSAqZGV2LAorCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiA9IHRvX3VzYl9pbnRlcmZhY2UoZGV2KTsKKwlzdHJ1Y3QgdXNiX3NldnNlZ2RldiAqbXlkZXYgPSB1c2JfZ2V0X2ludGZkYXRhKGludGYpOworCWludCBpOworCisJZm9yIChpID0gMDsgZGlzcGxheV90ZXh0bW9kZXNbaV07IGkrKykgeworCQlpZiAoc3lzZnNfc3RyZXEoZGlzcGxheV90ZXh0bW9kZXNbaV0sIGJ1ZikpIHsKKwkJCW15ZGV2LT50ZXh0bW9kZSA9IGk7CisJCQl1cGRhdGVfZGlzcGxheV92aXN1YWwobXlkZXYpOworCQkJcmV0dXJuIGNvdW50OworCQl9CisJfQorCisJcmV0dXJuIC1FSU5WQUw7Cit9CisKK3N0YXRpYyBERVZJQ0VfQVRUUih0ZXh0bW9kZSwgU19JV1VHTyB8IFNfSVJVR08sCisJc2hvd19hdHRyX3RleHRtb2RlLCBzZXRfYXR0cl90ZXh0bW9kZSk7CisKKworTVlERVZfQVRUUl9TSU1QTEVfVU5TSUdORUQocG93ZXJlZCwgdXBkYXRlX2Rpc3BsYXlfcG93ZXJlZCk7CitNWURFVl9BVFRSX1NJTVBMRV9VTlNJR05FRChtb2RlX21zYiwgdXBkYXRlX2Rpc3BsYXlfbW9kZSk7CitNWURFVl9BVFRSX1NJTVBMRV9VTlNJR05FRChtb2RlX2xzYiwgdXBkYXRlX2Rpc3BsYXlfbW9kZSk7CisKK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpkZXZfYXR0cnNbXSA9IHsKKwkmZGV2X2F0dHJfcG93ZXJlZC5hdHRyLAorCSZkZXZfYXR0cl90ZXh0LmF0dHIsCisJJmRldl9hdHRyX3RleHRtb2RlLmF0dHIsCisJJmRldl9hdHRyX2RlY2ltYWxzLmF0dHIsCisJJmRldl9hdHRyX21vZGVfbXNiLmF0dHIsCisJJmRldl9hdHRyX21vZGVfbHNiLmF0dHIsCisJTlVMTAorfTsKKworc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgZGV2X2F0dHJfZ3JwID0geworCS5hdHRycyA9IGRldl9hdHRycywKK307CisKK3N0YXRpYyBpbnQgc2V2c2VnX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UsCisJY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQoreworCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldihpbnRlcmZhY2UpOworCXN0cnVjdCB1c2Jfc2V2c2VnZGV2ICpteWRldiA9IE5VTEw7CisJaW50IHJjID0gLUVOT01FTTsKKworCW15ZGV2ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHVzYl9zZXZzZWdkZXYpLCBHRlBfS0VSTkVMKTsKKwlpZiAobXlkZXYgPT0gTlVMTCkgeworCQlkZXZfZXJyKCZpbnRlcmZhY2UtPmRldiwgIk91dCBvZiBtZW1vcnlcbiIpOworCQlnb3RvIGVycm9yX21lbTsKKwl9CisKKwlteWRldi0+dWRldiA9IHVzYl9nZXRfZGV2KHVkZXYpOworCXVzYl9zZXRfaW50ZmRhdGEoaW50ZXJmYWNlLCBteWRldik7CisKKwkvKnNldCBkZWZhdWx0cyAqLworCW15ZGV2LT50ZXh0bW9kZSA9IDB4MDI7IC8qIGFzY2lpIG1vZGUgKi8KKwlteWRldi0+bW9kZV9tc2IgPSAweDA2OyAvKiA2IGNoYXJhY3RlcnMgKi8KKwlteWRldi0+bW9kZV9sc2IgPSAweDNmOyAvKiBzY2FubW9kZSBmb3IgNiBjaGFycyAqLworCisJcmMgPSBzeXNmc19jcmVhdGVfZ3JvdXAoJmludGVyZmFjZS0+ZGV2LmtvYmosICZkZXZfYXR0cl9ncnApOworCWlmIChyYykKKwkJZ290byBlcnJvcjsKKworCWRldl9pbmZvKCZpbnRlcmZhY2UtPmRldiwgIlVTQiA3IFNlZ21lbnQgZGV2aWNlIG5vdyBhdHRhY2hlZFxuIik7CisJcmV0dXJuIDA7CisKK2Vycm9yOgorCXVzYl9zZXRfaW50ZmRhdGEoaW50ZXJmYWNlLCBOVUxMKTsKKwl1c2JfcHV0X2RldihteWRldi0+dWRldik7CisJa2ZyZWUobXlkZXYpOworZXJyb3JfbWVtOgorCXJldHVybiByYzsKK30KKworc3RhdGljIHZvaWQgc2V2c2VnX2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSkKK3sKKwlzdHJ1Y3QgdXNiX3NldnNlZ2RldiAqbXlkZXY7CisKKwlteWRldiA9IHVzYl9nZXRfaW50ZmRhdGEoaW50ZXJmYWNlKTsKKwlzeXNmc19yZW1vdmVfZ3JvdXAoJmludGVyZmFjZS0+ZGV2LmtvYmosICZkZXZfYXR0cl9ncnApOworCXVzYl9zZXRfaW50ZmRhdGEoaW50ZXJmYWNlLCBOVUxMKTsKKwl1c2JfcHV0X2RldihteWRldi0+dWRldik7CisJa2ZyZWUobXlkZXYpOworCWRldl9pbmZvKCZpbnRlcmZhY2UtPmRldiwgIlVTQiA3IFNlZ21lbnQgbm93IGRpc2Nvbm5lY3RlZFxuIik7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBzZXZzZWdfZHJpdmVyID0geworCS5uYW1lID0JCSJ1c2JzZXZzZWciLAorCS5wcm9iZSA9CXNldnNlZ19wcm9iZSwKKwkuZGlzY29ubmVjdCA9CXNldnNlZ19kaXNjb25uZWN0LAorCS5pZF90YWJsZSA9CWlkX3RhYmxlLAorfTsKKworc3RhdGljIGludCBfX2luaXQgdXNiX3NldnNlZ19pbml0KHZvaWQpCit7CisJaW50IHJjID0gMDsKKworCXJjID0gdXNiX3JlZ2lzdGVyKCZzZXZzZWdfZHJpdmVyKTsKKwlpZiAocmMpCisJCWVycigidXNiX3JlZ2lzdGVyIGZhaWxlZC4gRXJyb3IgbnVtYmVyICVkIiwgcmMpOworCXJldHVybiByYzsKK30KKworc3RhdGljIHZvaWQgX19leGl0IHVzYl9zZXZzZWdfZXhpdCh2b2lkKQoreworCXVzYl9kZXJlZ2lzdGVyKCZzZXZzZWdfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQodXNiX3NldnNlZ19pbml0KTsKK21vZHVsZV9leGl0KHVzYl9zZXZzZWdfZXhpdCk7CisKK01PRFVMRV9BVVRIT1IoRFJJVkVSX0FVVEhPUik7CitNT0RVTEVfREVTQ1JJUFRJT04oRFJJVkVSX0RFU0MpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWlzYy91c3M3MjAuYyBiL2RyaXZlcnMvdXNiL21pc2MvdXNzNzIwLmMKaW5kZXggZjEyNTViMC4uOWE2YzI3YSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbWlzYy91c3M3MjAuYworKysgYi9kcml2ZXJzL3VzYi9taXNjL3VzczcyMC5jCkBAIC0yMjgsMTEgKzIyOCwxMiBAQAogCQlyZXQgPSBycS0+dXJiLT5zdGF0dXM7CiAJCSp2YWwgPSBwcml2LT5yZWdbKHJlZyA+PSA5KSA/IDAgOiByZWdpbmRleFtyZWddXTsKIAkJaWYgKHJldCkKLQkJCXdhcm4oImdldF8xMjg0X3JlZ2lzdGVyOiB1c2IgZXJyb3IgJWQiLCByZXQpOworCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiZ2V0XzEyODRfcmVnaXN0ZXI6ICIKKwkJCSAgICAgICAidXNiIGVycm9yICVkXG4iLCByZXQpOwogCQlrcmVmX3B1dCgmcnEtPnJlZl9jb3VudCwgZGVzdHJveV9hc3luYyk7CiAJCXJldHVybiByZXQ7CiAJfQotCXdhcm4oImdldF8xMjg0X3JlZ2lzdGVyIHRpbWVvdXQiKTsKKwlwcmludGsoS0VSTl9XQVJOSU5HICJnZXRfMTI4NF9yZWdpc3RlciB0aW1lb3V0XG4iKTsKIAlraWxsX2FsbF9hc3luY19yZXF1ZXN0c19wcml2KHByaXYpOwogCXJldHVybiAtRUlPOwogfQpAQCAtNzE2LDcgKzcxNyw3IEBACiAJc3Bpbl9sb2NrX2luaXQoJnByaXYtPmFzeW5jbG9jayk7CiAJSU5JVF9MSVNUX0hFQUQoJnByaXYtPmFzeW5jbGlzdCk7CiAJaWYgKCEocHAgPSBwYXJwb3J0X3JlZ2lzdGVyX3BvcnQoMCwgUEFSUE9SVF9JUlFfTk9ORSwgUEFSUE9SVF9ETUFfTk9ORSwgJnBhcnBvcnRfdXNzNzIwX29wcykpKSB7Ci0JCXdhcm4oImNvdWxkIG5vdCByZWdpc3RlciBwYXJwb3J0Iik7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgInVzczcyMDogY291bGQgbm90IHJlZ2lzdGVyIHBhcnBvcnRcbiIpOwogCQlnb3RvIHByb2JlX2Fib3J0OwogCX0KIApAQCAtODAwLDEwICs4MDEsMTQgQEAKIAlpZiAocmV0dmFsKQogCQlnb3RvIG91dDsKIAotCWluZm8oRFJJVkVSX1ZFUlNJT04gIjoiIERSSVZFUl9ERVNDKTsKLQlpbmZvKCJOT1RFOiB0aGlzIGlzIGEgc3BlY2lhbCBwdXJwb3NlIGRyaXZlciB0byBhbGxvdyBub25zdGFuZGFyZCIpOwotCWluZm8oInByb3RvY29scyAoZWcuIGJpdGJhbmcpIG92ZXIgVVNTNzIwIHVzYiB0byBwYXJhbGxlbCBjYWJsZXMiKTsKLQlpbmZvKCJJZiB5b3UganVzdCB3YW50IHRvIGNvbm5lY3QgdG8gYSBwcmludGVyLCB1c2UgdXNibHAgaW5zdGVhZCIpOworCXByaW50ayhLRVJOX0lORk8gS0JVSUxEX01PRE5BTUUgIjogIiBEUklWRVJfVkVSU0lPTiAiOiIKKwkgICAgICAgRFJJVkVSX0RFU0MgIlxuIik7CisJcHJpbnRrKEtFUk5fSU5GTyBLQlVJTERfTU9ETkFNRSAiOiBOT1RFOiB0aGlzIGlzIGEgc3BlY2lhbCBwdXJwb3NlICIKKwkgICAgICAgImRyaXZlciB0byBhbGxvdyBub25zdGFuZGFyZFxuIik7CisJcHJpbnRrKEtFUk5fSU5GTyBLQlVJTERfTU9ETkFNRSAiOiBwcm90b2NvbHMgKGVnLiBiaXRiYW5nKSBvdmVyICIKKwkgICAgICAgIlVTUzcyMCB1c2IgdG8gcGFyYWxsZWwgY2FibGVzXG4iKTsKKwlwcmludGsoS0VSTl9JTkZPIEtCVUlMRF9NT0ROQU1FICI6IElmIHlvdSBqdXN0IHdhbnQgdG8gY29ubmVjdCB0byBhICIKKwkgICAgICAgInByaW50ZXIsIHVzZSB1c2JscCBpbnN0ZWFkXG4iKTsKIG91dDoKIAlyZXR1cm4gcmV0dmFsOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWlzYy92c3R1c2IuYyBiL2RyaXZlcnMvdXNiL21pc2MvdnN0dXNiLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODY0ODQ3MGMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9taXNjL3ZzdHVzYi5jCkBAIC0wLDAgKzEsNzgyIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICBGaWxlOiBkcml2ZXJzL3VzYi9taXNjL3ZzdHVzYi5jCisgKgorICogIFB1cnBvc2U6IFN1cHBvcnQgZm9yIHRoZSBidWxrIFVTQiBWZXJuaWVyIFNwZWN0cm9waG90b21ldGVycworICoKKyAqICBBdXRob3I6ICAgICBKb2hubmllIFBldGVycworICogICAgICAgICAgICAgIEF4aWFuIENvbnN1bHRpbmcKKyAqICAgICAgICAgICAgICBCZWF2ZXJ0b24sIE9SLCBVU0EgOTcwMDUKKyAqCisgKiAgTW9kaWZpZWQgYnk6ICAgICBFUXdhcmUgRW5naW5lZXJpbmcsIEluYy4KKyAqICAgICAgICAgICAgICAgICAgIE9yZWdvbiBDaXR5LCBPUiwgVVNBIDk3MDQ1CisgKgorICogIENvcHlyaWdodDogIDIwMDcsIDIwMDgKKyAqICAgICAgICAgICAgICBWZXJuaWVyIFNvZnR3YXJlICYgVGVjaG5vbG9neQorICogICAgICAgICAgICAgIEJlYXZlcnRvbiwgT1IsIFVTQSA5NzAwNQorICoKKyAqICBXZWI6ICAgICAgICB3d3cudmVybmllci5jb20KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KKyNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CisjaW5jbHVkZSA8bGludXgvdXNiLmg+CisKKyNpbmNsdWRlIDxsaW51eC91c2IvdnN0dXNiLmg+CisKKyNkZWZpbmUgRFJJVkVSX1ZFUlNJT04gIlZTVCBVU0IgRHJpdmVyIFZlcnNpb24gMS41IgorI2RlZmluZSBEUklWRVJfREVTQyAiVmVybmllciBTb2Z0d2FyZSBUZWNobm9sb2d5IEJ1bGsgVVNCIERyaXZlciIKKworI2lmZGVmIENPTkZJR19VU0JfRFlOQU1JQ19NSU5PUlMKKwkjZGVmaW5lIFZTVFVTQl9NSU5PUl9CQVNFCTAKKyNlbHNlCisJI2RlZmluZSBWU1RVU0JfTUlOT1JfQkFTRQkxOTkKKyNlbmRpZgorCisjZGVmaW5lIFVTQl9WRU5ET1JfT0NFQU5PUFRJQ1MJMHgyNDU3CisjZGVmaW5lIFVTQl9WRU5ET1JfVkVSTklFUgkweDA4RjcJLyogVmVybmllciBTb2Z0d2FyZSAmIFRlY2hub2xvZ3kgKi8KKworI2RlZmluZSBVU0JfUFJPRFVDVF9VU0IyMDAwCTB4MTAwMgorI2RlZmluZSBVU0JfUFJPRFVDVF9BREMxMDAwX0ZXCTB4MTAwMwkvKiBmaXJtd2FyZSBkb3dubG9hZCAocmVudW1lcmF0ZXMpICovCisjZGVmaW5lIFVTQl9QUk9EVUNUX0FEQzEwMDAJMHgxMDA0CisjZGVmaW5lIFVTQl9QUk9EVUNUX0hSMjAwMF9GVwkweDEwMDkJLyogZmlybXdhcmUgZG93bmxvYWQgKHJlbnVtZXJhdGVzKSAqLworI2RlZmluZSBVU0JfUFJPRFVDVF9IUjIwMDAJMHgxMDBBCisjZGVmaW5lIFVTQl9QUk9EVUNUX0hSNDAwMF9GVwkweDEwMTEJLyogZmlybXdhcmUgZG93bmxvYWQgKHJlbnVtZXJhdGVzKSAqLworI2RlZmluZSBVU0JfUFJPRFVDVF9IUjQwMDAJMHgxMDEyCisjZGVmaW5lIFVTQl9QUk9EVUNUX1VTQjY1MAkweDEwMTQJLyogIlJlZCBUaWRlIiAqLworI2RlZmluZSBVU0JfUFJPRFVDVF9RRTY1MDAwCTB4MTAxOAorI2RlZmluZSBVU0JfUFJPRFVDVF9VU0I0MDAwCTB4MTAyMgorI2RlZmluZSBVU0JfUFJPRFVDVF9VU0IzMjUJMHgxMDI0CS8qICJWZXJuaWVyIFNwZWN0cm9tZXRlciIgKi8KKworI2RlZmluZSBVU0JfUFJPRFVDVF9MQUJQUk8JMHgwMDAxCisjZGVmaW5lIFVTQl9QUk9EVUNUX0xBQlFVRVNUCTB4MDAwNQorCisjZGVmaW5lIFZTVF9NQVhCVUZGRVIJCSg2NCoxMDI0KQorCitzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgaWRfdGFibGVbXSA9IHsKKwl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9PQ0VBTk9QVElDUywgVVNCX1BST0RVQ1RfVVNCMjAwMCl9LAorCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX09DRUFOT1BUSUNTLCBVU0JfUFJPRFVDVF9IUjQwMDApfSwKKwl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9PQ0VBTk9QVElDUywgVVNCX1BST0RVQ1RfVVNCNjUwKX0sCisJeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfT0NFQU5PUFRJQ1MsIFVTQl9QUk9EVUNUX1VTQjQwMDApfSwKKwl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9PQ0VBTk9QVElDUywgVVNCX1BST0RVQ1RfVVNCMzI1KX0sCisJeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfVkVSTklFUiwgVVNCX1BST0RVQ1RfTEFCUVVFU1QpfSwKKwl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9WRVJOSUVSLCBVU0JfUFJPRFVDVF9MQUJQUk8pfSwKKwl7fSwKK307CisKK01PRFVMRV9ERVZJQ0VfVEFCTEUodXNiLCBpZF90YWJsZSk7CisKK3N0cnVjdCB2c3R1c2JfZGV2aWNlIHsKKwlzdHJ1Y3Qga3JlZgkJCQlrcmVmOworCXN0cnVjdCBtdXRleCAgICAgICAgICAgIGxvY2s7CisJc3RydWN0IHVzYl9kZXZpY2UgICAgICAgKnVzYl9kZXY7CisJY2hhciAgICAgICAgICAgICAgICAgICAgcHJlc2VudDsKKwljaGFyICAgICAgICAgICAgICAgICAgICBpc29wZW47CisJc3RydWN0IHVzYl9hbmNob3IgICAgICAgc3VibWl0dGVkOworCWludCAgICAgICAgICAgICAgICAgICAgIHJkX3BpcGU7CisJaW50ICAgICAgICAgICAgICAgICAgICAgcmRfdGltZW91dF9tczsKKwlpbnQgICAgICAgICAgICAgICAgICAgICB3cl9waXBlOworCWludCAgICAgICAgICAgICAgICAgICAgIHdyX3RpbWVvdXRfbXM7Cit9OworI2RlZmluZSB0b192c3RfZGV2KGQpIGNvbnRhaW5lcl9vZihkLCBzdHJ1Y3QgdnN0dXNiX2RldmljZSwga3JlZikKKworc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIHZzdHVzYl9kcml2ZXI7CisKK3N0YXRpYyB2b2lkIHZzdHVzYl9kZWxldGUoc3RydWN0IGtyZWYgKmtyZWYpCit7CisJc3RydWN0IHZzdHVzYl9kZXZpY2UgKnZzdGRldiA9IHRvX3ZzdF9kZXYoa3JlZik7CisKKwl1c2JfcHV0X2Rldih2c3RkZXYtPnVzYl9kZXYpOworCWtmcmVlKHZzdGRldik7Cit9CisKK3N0YXRpYyBpbnQgdnN0dXNiX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJc3RydWN0IHZzdHVzYl9kZXZpY2UgKnZzdGRldjsKKwlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlOworCisJaW50ZXJmYWNlID0gdXNiX2ZpbmRfaW50ZXJmYWNlKCZ2c3R1c2JfZHJpdmVyLCBpbWlub3IoaW5vZGUpKTsKKworCWlmICghaW50ZXJmYWNlKSB7CisJCXByaW50ayhLRVJOX0VSUiBLQlVJTERfTU9ETkFNRQorCQkgICAgICAgIjogJXMgLSBlcnJvciwgY2FuJ3QgZmluZCBkZXZpY2UgZm9yIG1pbm9yICVkXG4iLAorCQkgICAgICAgX19mdW5jX18sIGltaW5vcihpbm9kZSkpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwl2c3RkZXYgPSB1c2JfZ2V0X2ludGZkYXRhKGludGVyZmFjZSk7CisKKwlpZiAoIXZzdGRldikKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwkvKiBsb2NrIHRoaXMgZGV2aWNlICovCisJbXV0ZXhfbG9jaygmdnN0ZGV2LT5sb2NrKTsKKworCS8qIGNhbiBvbmx5IG9wZW4gb25lIHRpbWUgKi8KKwlpZiAoKCF2c3RkZXYtPnByZXNlbnQpIHx8ICh2c3RkZXYtPmlzb3BlbikpIHsKKwkJbXV0ZXhfdW5sb2NrKCZ2c3RkZXYtPmxvY2spOworCQlyZXR1cm4gLUVCVVNZOworCX0KKworCS8qIGluY3JlbWVudCBvdXIgdXNhZ2UgY291bnQgKi8KKwlrcmVmX2dldCgmdnN0ZGV2LT5rcmVmKTsKKworCXZzdGRldi0+aXNvcGVuID0gMTsKKworCS8qIHNhdmUgZGV2aWNlIGluIHRoZSBmaWxlJ3MgcHJpdmF0ZSBzdHJ1Y3R1cmUgKi8KKwlmaWxlLT5wcml2YXRlX2RhdGEgPSB2c3RkZXY7CisKKwlkZXZfZGJnKCZ2c3RkZXYtPnVzYl9kZXYtPmRldiwgIiVzOiBvcGVuZWRcbiIsIF9fZnVuY19fKTsKKworCW11dGV4X3VubG9jaygmdnN0ZGV2LT5sb2NrKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZzdHVzYl9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXN0cnVjdCB2c3R1c2JfZGV2aWNlICp2c3RkZXY7CisKKwl2c3RkZXYgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisKKwlpZiAodnN0ZGV2ID09IE5VTEwpCisJCXJldHVybiAtRU5PREVWOworCisJbXV0ZXhfbG9jaygmdnN0ZGV2LT5sb2NrKTsKKworCXZzdGRldi0+aXNvcGVuID0gMDsKKworCWRldl9kYmcoJnZzdGRldi0+dXNiX2Rldi0+ZGV2LCAiJXM6IHJlbGVhc2VkXG4iLCBfX2Z1bmNfXyk7CisKKwltdXRleF91bmxvY2soJnZzdGRldi0+bG9jayk7CisKKwlrcmVmX3B1dCgmdnN0ZGV2LT5rcmVmLCB2c3R1c2JfZGVsZXRlKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCB1c2JfYXBpX2Jsb2NraW5nX2NvbXBsZXRpb24oc3RydWN0IHVyYiAqdXJiKQoreworCXN0cnVjdCBjb21wbGV0aW9uICpjb21wbGV0ZWl0ID0gdXJiLT5jb250ZXh0OworCisJY29tcGxldGUoY29tcGxldGVpdCk7Cit9CisKK3N0YXRpYyBpbnQgdnN0dXNiX2ZpbGxfYW5kX3NlbmRfdXJiKHN0cnVjdCB1cmIgKnVyYiwKKwkJCQkgICAgc3RydWN0IHVzYl9kZXZpY2UgKnVzYl9kZXYsCisJCQkJICAgIHVuc2lnbmVkIGludCBwaXBlLCB2b2lkICpkYXRhLAorCQkJCSAgICB1bnNpZ25lZCBpbnQgbGVuLCBzdHJ1Y3QgY29tcGxldGlvbiAqZG9uZSkKK3sKKwlzdHJ1Y3QgdXNiX2hvc3RfZW5kcG9pbnQgKmVwOworCXN0cnVjdCB1c2JfaG9zdF9lbmRwb2ludCAqKmhvc3RlcDsKKwl1bnNpZ25lZCBpbnQgcGlwZW5kOworCisJaW50IHN0YXR1czsKKworCWhvc3RlcCA9IHVzYl9waXBlaW4ocGlwZSkgPyB1c2JfZGV2LT5lcF9pbiA6IHVzYl9kZXYtPmVwX291dDsKKwlwaXBlbmQgPSB1c2JfcGlwZWVuZHBvaW50KHBpcGUpOworCWVwID0gaG9zdGVwW3BpcGVuZF07CisKKwlpZiAoIWVwIHx8IChsZW4gPT0gMCkpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKChlcC0+ZGVzYy5ibUF0dHJpYnV0ZXMgJiBVU0JfRU5EUE9JTlRfWEZFUlRZUEVfTUFTSykKKwkgICAgPT0gVVNCX0VORFBPSU5UX1hGRVJfSU5UKSB7CisJCXBpcGUgPSAocGlwZSAmIH4oMyA8PCAzMCkpIHwgKFBJUEVfSU5URVJSVVBUIDw8IDMwKTsKKwkJdXNiX2ZpbGxfaW50X3VyYih1cmIsIHVzYl9kZXYsIHBpcGUsIGRhdGEsIGxlbiwKKwkJCQkgKHVzYl9jb21wbGV0ZV90KXVzYl9hcGlfYmxvY2tpbmdfY29tcGxldGlvbiwKKwkJCQkgTlVMTCwgZXAtPmRlc2MuYkludGVydmFsKTsKKwl9IGVsc2UKKwkJdXNiX2ZpbGxfYnVsa191cmIodXJiLCB1c2JfZGV2LCBwaXBlLCBkYXRhLCBsZW4sCisJCQkJICAodXNiX2NvbXBsZXRlX3QpdXNiX2FwaV9ibG9ja2luZ19jb21wbGV0aW9uLAorCQkJCSAgTlVMTCk7CisKKwlpbml0X2NvbXBsZXRpb24oZG9uZSk7CisJdXJiLT5jb250ZXh0ID0gZG9uZTsKKwl1cmItPmFjdHVhbF9sZW5ndGggPSAwOworCXN0YXR1cyA9IHVzYl9zdWJtaXRfdXJiKHVyYiwgR0ZQX0tFUk5FTCk7CisKKwlyZXR1cm4gc3RhdHVzOworfQorCitzdGF0aWMgaW50IHZzdHVzYl9jb21wbGV0ZV91cmIoc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgY29tcGxldGlvbiAqZG9uZSwKKwkJCSAgICAgICBpbnQgdGltZW91dCwgaW50ICphY3R1YWxfbGVuZ3RoKQoreworCXVuc2lnbmVkIGxvbmcgZXhwaXJlOworCWludCBzdGF0dXM7CisKKwlleHBpcmUgPSB0aW1lb3V0ID8gbXNlY3NfdG9famlmZmllcyh0aW1lb3V0KSA6IE1BWF9TQ0hFRFVMRV9USU1FT1VUOworCWlmICghd2FpdF9mb3JfY29tcGxldGlvbl9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQoZG9uZSwgZXhwaXJlKSkgeworCQl1c2Jfa2lsbF91cmIodXJiKTsKKwkJc3RhdHVzID0gdXJiLT5zdGF0dXMgPT0gLUVOT0VOVCA/IC1FVElNRURPVVQgOiB1cmItPnN0YXR1czsKKworCQlkZXZfZGJnKCZ1cmItPmRldi0+ZGV2LAorCQkJIiVzIHRpbWVkIG91dCBvbiBlcCVkJXMgbGVuPSVkLyVkLCB1cmIgc3RhdHVzID0gJWRcbiIsCisJCQljdXJyZW50LT5jb21tLAorCQkJdXNiX3BpcGVlbmRwb2ludCh1cmItPnBpcGUpLAorCQkJdXNiX3BpcGVpbih1cmItPnBpcGUpID8gImluIiA6ICJvdXQiLAorCQkJdXJiLT5hY3R1YWxfbGVuZ3RoLAorCQkJdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoLAorCQkJdXJiLT5zdGF0dXMpOworCisJfSBlbHNlIHsKKwkJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSB7CisJCQkvKiBpZiByZWFsbHkgYW4gZXJyb3IgKi8KKwkJCWlmICh1cmItPnN0YXR1cyAmJiAhKCh1cmItPnN0YXR1cyA9PSAtRU5PRU5UKSAgICAgfHwKKwkJCQkJICAgICAodXJiLT5zdGF0dXMgPT0gLUVDT05OUkVTRVQpIHx8CisJCQkJCSAgICAgKHVyYi0+c3RhdHVzID09IC1FU0hVVERPV04pKSkgeworCQkJCXN0YXR1cyA9IC1FSU5UUjsKKwkJCQl1c2Jfa2lsbF91cmIodXJiKTsKKwkJCX0gZWxzZSB7CisJCQkJc3RhdHVzID0gMDsKKwkJCX0KKworCQkJZGV2X2RiZygmdXJiLT5kZXYtPmRldiwKKwkJCQkiJXM6IHNpZ25hbCBwZW5kaW5nIG9uIGVwJWQlcyBsZW49JWQvJWQsIgorCQkJCSJ1cmIgc3RhdHVzID0gJWRcbiIsCisJCQkJY3VycmVudC0+Y29tbSwKKwkJCQl1c2JfcGlwZWVuZHBvaW50KHVyYi0+cGlwZSksCisJCQkJdXNiX3BpcGVpbih1cmItPnBpcGUpID8gImluIiA6ICJvdXQiLAorCQkJCXVyYi0+YWN0dWFsX2xlbmd0aCwKKwkJCQl1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgsCisJCQkJdXJiLT5zdGF0dXMpOworCisJCX0gZWxzZSB7CisJCQlzdGF0dXMgPSB1cmItPnN0YXR1czsKKwkJfQorCX0KKworCWlmIChhY3R1YWxfbGVuZ3RoKQorCQkqYWN0dWFsX2xlbmd0aCA9IHVyYi0+YWN0dWFsX2xlbmd0aDsKKworCXJldHVybiBzdGF0dXM7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHZzdHVzYl9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmZmVyLAorCQkJICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCit7CisJc3RydWN0IHZzdHVzYl9kZXZpY2UgKnZzdGRldjsKKwlpbnQgY250ID0gLTE7CisJdm9pZCAqYnVmOworCWludCByZXR2YWwgPSAwOworCisJc3RydWN0IHVyYiAgICAgICAgICAgICAgKnVyYjsKKwlzdHJ1Y3QgdXNiX2RldmljZSAgICAgICAqZGV2OworCXVuc2lnbmVkIGludCAgICAgICAgICAgIHBpcGU7CisJaW50ICAgICAgICAgICAgICAgICAgICAgdGltZW91dDsKKworCURFQ0xBUkVfQ09NUExFVElPTl9PTlNUQUNLKGRvbmUpOworCisJdnN0ZGV2ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCisJaWYgKHZzdGRldiA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCS8qIHZlcmlmeSB0aGF0IHdlIGFjdHVhbGx5IHdhbnQgdG8gcmVhZCBzb21lIGRhdGEgKi8KKwlpZiAoKGNvdW50ID09IDApIHx8IChjb3VudCA+IFZTVF9NQVhCVUZGRVIpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCS8qIGxvY2sgdGhpcyBvYmplY3QgKi8KKwlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZ2c3RkZXYtPmxvY2spKQorCQlyZXR1cm4gLUVSRVNUQVJUU1lTOworCisJLyogYW55b25lIGhvbWUgKi8KKwlpZiAoIXZzdGRldi0+cHJlc2VudCkgeworCQltdXRleF91bmxvY2soJnZzdGRldi0+bG9jayk7CisJCXByaW50ayhLRVJOX0VSUiBLQlVJTERfTU9ETkFNRQorCQkgICAgICAgIjogJXM6IGRldmljZSBub3QgcHJlc2VudFxuIiwgX19mdW5jX18pOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwkvKiBwdWxsIG91dCB0aGUgbmVjZXNzYXJ5IGRhdGEgKi8KKwlkZXYgPSAgICAgdnN0ZGV2LT51c2JfZGV2OworCXBpcGUgPSAgICB1c2JfcmN2YnVsa3BpcGUoZGV2LCB2c3RkZXYtPnJkX3BpcGUpOworCXRpbWVvdXQgPSB2c3RkZXYtPnJkX3RpbWVvdXRfbXM7CisKKwlidWYgPSBrbWFsbG9jKGNvdW50LCBHRlBfS0VSTkVMKTsKKwlpZiAoYnVmID09IE5VTEwpIHsKKwkJbXV0ZXhfdW5sb2NrKCZ2c3RkZXYtPmxvY2spOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwl1cmIgPSB1c2JfYWxsb2NfdXJiKDAsIEdGUF9LRVJORUwpOworCWlmICghdXJiKSB7CisJCWtmcmVlKGJ1Zik7CisJCW11dGV4X3VubG9jaygmdnN0ZGV2LT5sb2NrKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJdXNiX2FuY2hvcl91cmIodXJiLCAmdnN0ZGV2LT5zdWJtaXR0ZWQpOworCXJldHZhbCA9IHZzdHVzYl9maWxsX2FuZF9zZW5kX3VyYih1cmIsIGRldiwgcGlwZSwgYnVmLCBjb3VudCwgJmRvbmUpOworCW11dGV4X3VubG9jaygmdnN0ZGV2LT5sb2NrKTsKKwlpZiAocmV0dmFsKSB7CisJCXVzYl91bmFuY2hvcl91cmIodXJiKTsKKwkJZGV2X2VycigmZGV2LT5kZXYsICIlczogZXJyb3IgJWQgZmlsbGluZyBhbmQgc2VuZGluZyB1cmIgJWRcbiIsCisJCQlfX2Z1bmNfXywgcmV0dmFsLCBwaXBlKTsKKwkJZ290byBleGl0OworCX0KKworCXJldHZhbCA9IHZzdHVzYl9jb21wbGV0ZV91cmIodXJiLCAmZG9uZSwgdGltZW91dCwgJmNudCk7CisJaWYgKHJldHZhbCkgeworCQlkZXZfZXJyKCZkZXYtPmRldiwgIiVzOiBlcnJvciAlZCBjb21wbGV0aW5nIHVyYiAlZFxuIiwKKwkJCV9fZnVuY19fLCByZXR2YWwsIHBpcGUpOworCQlnb3RvIGV4aXQ7CisJfQorCisJaWYgKGNvcHlfdG9fdXNlcihidWZmZXIsIGJ1ZiwgY250KSkgeworCQlkZXZfZXJyKCZkZXYtPmRldiwgIiVzOiBjYW4ndCBjb3B5X3RvX3VzZXJcbiIsIF9fZnVuY19fKTsKKwkJcmV0dmFsID0gLUVGQVVMVDsKKwl9IGVsc2UgeworCQlyZXR2YWwgPSBjbnQ7CisJCWRldl9kYmcoJmRldi0+ZGV2LCAiJXM6IHJlYWQgJWQgYnl0ZXMgZnJvbSBwaXBlICVkXG4iLAorCQkJX19mdW5jX18sIGNudCwgcGlwZSk7CisJfQorCitleGl0OgorCXVzYl9mcmVlX3VyYih1cmIpOworCWtmcmVlKGJ1Zik7CisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIHNzaXplX3QgdnN0dXNiX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmZmVyLAorCQkJICAgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQoreworCXN0cnVjdCB2c3R1c2JfZGV2aWNlICp2c3RkZXY7CisJaW50IGNudCA9IC0xOworCXZvaWQgKmJ1ZjsKKwlpbnQgcmV0dmFsID0gMDsKKworCXN0cnVjdCB1cmIgICAgICAgICAgICAgICp1cmI7CisJc3RydWN0IHVzYl9kZXZpY2UgICAgICAgKmRldjsKKwl1bnNpZ25lZCBpbnQgICAgICAgICAgICBwaXBlOworCWludCAgICAgICAgICAgICAgICAgICAgIHRpbWVvdXQ7CisKKwlERUNMQVJFX0NPTVBMRVRJT05fT05TVEFDSyhkb25lKTsKKworCXZzdGRldiA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKworCWlmICh2c3RkZXYgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwkvKiB2ZXJpZnkgdGhhdCB3ZSBhY3R1YWxseSBoYXZlIHNvbWUgZGF0YSB0byB3cml0ZSAqLworCWlmICgoY291bnQgPT0gMCkgfHwgKGNvdW50ID4gVlNUX01BWEJVRkZFUikpCisJCXJldHVybiByZXR2YWw7CisKKwkvKiBsb2NrIHRoaXMgb2JqZWN0ICovCisJaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmdnN0ZGV2LT5sb2NrKSkKKwkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKKworCS8qIGFueW9uZSBob21lICovCisJaWYgKCF2c3RkZXYtPnByZXNlbnQpIHsKKwkJbXV0ZXhfdW5sb2NrKCZ2c3RkZXYtPmxvY2spOworCQlwcmludGsoS0VSTl9FUlIgS0JVSUxEX01PRE5BTUUKKwkJICAgICAgICI6ICVzOiBkZXZpY2Ugbm90IHByZXNlbnRcbiIsIF9fZnVuY19fKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJLyogcHVsbCBvdXQgdGhlIG5lY2Vzc2FyeSBkYXRhICovCisJZGV2ID0gICAgIHZzdGRldi0+dXNiX2RldjsKKwlwaXBlID0gICAgdXNiX3NuZGJ1bGtwaXBlKGRldiwgdnN0ZGV2LT53cl9waXBlKTsKKwl0aW1lb3V0ID0gdnN0ZGV2LT53cl90aW1lb3V0X21zOworCisJYnVmID0ga21hbGxvYyhjb3VudCwgR0ZQX0tFUk5FTCk7CisJaWYgKGJ1ZiA9PSBOVUxMKSB7CisJCW11dGV4X3VubG9jaygmdnN0ZGV2LT5sb2NrKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJdXJiID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXVyYikgeworCQlrZnJlZShidWYpOworCQltdXRleF91bmxvY2soJnZzdGRldi0+bG9jayk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCWlmIChjb3B5X2Zyb21fdXNlcihidWYsIGJ1ZmZlciwgY291bnQpKSB7CisJCWRldl9lcnIoJmRldi0+ZGV2LCAiJXM6IGNhbid0IGNvcHlfZnJvbV91c2VyXG4iLCBfX2Z1bmNfXyk7CisJCXJldHZhbCA9IC1FRkFVTFQ7CisJCWdvdG8gZXhpdDsKKwl9CisKKwl1c2JfYW5jaG9yX3VyYih1cmIsICZ2c3RkZXYtPnN1Ym1pdHRlZCk7CisJcmV0dmFsID0gdnN0dXNiX2ZpbGxfYW5kX3NlbmRfdXJiKHVyYiwgZGV2LCBwaXBlLCBidWYsIGNvdW50LCAmZG9uZSk7CisJbXV0ZXhfdW5sb2NrKCZ2c3RkZXYtPmxvY2spOworCWlmIChyZXR2YWwpIHsKKwkJdXNiX3VuYW5jaG9yX3VyYih1cmIpOworCQlkZXZfZXJyKCZkZXYtPmRldiwgIiVzOiBlcnJvciAlZCBmaWxsaW5nIGFuZCBzZW5kaW5nIHVyYiAlZFxuIiwKKwkJCV9fZnVuY19fLCByZXR2YWwsIHBpcGUpOworCQlnb3RvIGV4aXQ7CisJfQorCisJcmV0dmFsID0gdnN0dXNiX2NvbXBsZXRlX3VyYih1cmIsICZkb25lLCB0aW1lb3V0LCAmY250KTsKKwlpZiAocmV0dmFsKSB7CisJCWRldl9lcnIoJmRldi0+ZGV2LCAiJXM6IGVycm9yICVkIGNvbXBsZXRpbmcgdXJiICVkXG4iLAorCQkJX19mdW5jX18sIHJldHZhbCwgcGlwZSk7CisJCWdvdG8gZXhpdDsKKwl9IGVsc2UgeworCQlyZXR2YWwgPSBjbnQ7CisJCWRldl9kYmcoJmRldi0+ZGV2LCAiJXM6IHNlbnQgJWQgYnl0ZXMgdG8gcGlwZSAlZFxuIiwKKwkJCV9fZnVuY19fLCBjbnQsIHBpcGUpOworCX0KKworZXhpdDoKKwl1c2JfZnJlZV91cmIodXJiKTsKKwlrZnJlZShidWYpOworCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyBsb25nIHZzdHVzYl9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCit7CisJaW50IHJldHZhbCA9IDA7CisJaW50IGNudCA9IC0xOworCXZvaWQgX191c2VyICpkYXRhID0gKHZvaWQgX191c2VyICopYXJnOworCXN0cnVjdCB2c3R1c2JfYXJncyB1c2JfZGF0YTsKKworCXN0cnVjdCB2c3R1c2JfZGV2aWNlICp2c3RkZXY7CisJdm9pZCAqYnVmZmVyID0gTlVMTDsgLyogbXVzdCBiZSBpbml0aWFsaXplZC4gYnVmZmVyIGlzCisJCQkgICAgICAqCXJlZmVyZW5jZWQgb24gZXhpdCBidXQgbm90IGFsbAorCQkJICAgICAgKiBpb2N0bHMgYWxsb2NhdGUgaXQgKi8KKworCXN0cnVjdCB1cmIgICAgICAgICAgICAgICp1cmIgPSBOVUxMOyAvKiBtdXN0IGJlIGluaXRpYWxpemVkLiB1cmIgaXMKKwkJCQkJICAgICAgKglyZWZlcmVuY2VkIG9uIGV4aXQgYnV0IG5vdCBhbGwKKwkJCQkJICAgICAgKiBpb2N0bHMgYWxsb2NhdGUgaXQgKi8KKwlzdHJ1Y3QgdXNiX2RldmljZSAgICAgICAqZGV2OworCXVuc2lnbmVkIGludCAgICAgICAgICAgIHBpcGU7CisJaW50ICAgICAgICAgICAgICAgICAgICAgdGltZW91dDsKKworCURFQ0xBUkVfQ09NUExFVElPTl9PTlNUQUNLKGRvbmUpOworCisJdnN0ZGV2ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCisJaWYgKF9JT0NfVFlQRShjbWQpICE9IFZTVF9JT0NfTUFHSUMpIHsKKwkJZGV2X3dhcm4oJnZzdGRldi0+dXNiX2Rldi0+ZGV2LAorCQkJICIlczogaW9jdGwgY29tbWFuZCAleCwgYmFkIGlvY3RsIG1hZ2ljICV4LCAiCisJCQkgImV4cGVjdGVkICV4XG4iLCBfX2Z1bmNfXywgY21kLAorCQkJIF9JT0NfVFlQRShjbWQpLCBWU1RfSU9DX01BR0lDKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKHZzdGRldiA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWlmIChjb3B5X2Zyb21fdXNlcigmdXNiX2RhdGEsIGRhdGEsIHNpemVvZihzdHJ1Y3QgdnN0dXNiX2FyZ3MpKSkgeworCQlkZXZfZXJyKCZ2c3RkZXYtPnVzYl9kZXYtPmRldiwgIiVzOiBjYW4ndCBjb3B5X2Zyb21fdXNlclxuIiwKKwkJCV9fZnVuY19fKTsKKwkJcmV0dXJuIC1FRkFVTFQ7CisJfQorCisJLyogbG9jayB0aGlzIG9iamVjdCAqLworCWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJnZzdGRldi0+bG9jaykpIHsKKwkJcmV0dmFsID0gLUVSRVNUQVJUU1lTOworCQlnb3RvIGV4aXQ7CisJfQorCisJLyogYW55b25lIGhvbWUgKi8KKwlpZiAoIXZzdGRldi0+cHJlc2VudCkgeworCQltdXRleF91bmxvY2soJnZzdGRldi0+bG9jayk7CisJCWRldl9lcnIoJnZzdGRldi0+dXNiX2Rldi0+ZGV2LCAiJXM6IGRldmljZSBub3QgcHJlc2VudFxuIiwKKwkJCV9fZnVuY19fKTsKKwkJcmV0dmFsID0gLUVOT0RFVjsKKwkJZ290byBleGl0OworCX0KKworCS8qIHB1bGwgb3V0IHRoZSBuZWNlc3NhcnkgZGF0YSAqLworCWRldiA9IHZzdGRldi0+dXNiX2RldjsKKworCXN3aXRjaCAoY21kKSB7CisKKwljYXNlIElPQ1RMX1ZTVFVTQl9DT05GSUdfUlc6CisKKwkJdnN0ZGV2LT5yZF9waXBlID0gdXNiX2RhdGEucmRfcGlwZTsKKwkJdnN0ZGV2LT5yZF90aW1lb3V0X21zID0gdXNiX2RhdGEucmRfdGltZW91dF9tczsKKwkJdnN0ZGV2LT53cl9waXBlID0gdXNiX2RhdGEud3JfcGlwZTsKKwkJdnN0ZGV2LT53cl90aW1lb3V0X21zID0gdXNiX2RhdGEud3JfdGltZW91dF9tczsKKworCQltdXRleF91bmxvY2soJnZzdGRldi0+bG9jayk7CisKKwkJZGV2X2RiZygmZGV2LT5kZXYsICIlczogc2V0dGluZyBwaXBlcy90aW1lb3V0cywgIgorCQkJInJkcGlwZSA9ICVkLCByZHRpbWVvdXQgPSAlZCwgIgorCQkJIndycGlwZSA9ICVkLCB3cnRpbWVvdXQgPSAlZFxuIiwgX19mdW5jX18sCisJCQl2c3RkZXYtPnJkX3BpcGUsIHZzdGRldi0+cmRfdGltZW91dF9tcywKKwkJCXZzdGRldi0+d3JfcGlwZSwgdnN0ZGV2LT53cl90aW1lb3V0X21zKTsKKwkJYnJlYWs7CisKKwljYXNlIElPQ1RMX1ZTVFVTQl9TRU5EX1BJUEU6CisKKwkJaWYgKCh1c2JfZGF0YS5jb3VudCA9PSAwKSB8fCAodXNiX2RhdGEuY291bnQgPiBWU1RfTUFYQlVGRkVSKSkgeworCQkJbXV0ZXhfdW5sb2NrKCZ2c3RkZXYtPmxvY2spOworCQkJcmV0dmFsID0gLUVJTlZBTDsKKwkJCWdvdG8gZXhpdDsKKwkJfQorCisJCWJ1ZmZlciA9IGttYWxsb2ModXNiX2RhdGEuY291bnQsIEdGUF9LRVJORUwpOworCQlpZiAoYnVmZmVyID09IE5VTEwpIHsKKwkJCW11dGV4X3VubG9jaygmdnN0ZGV2LT5sb2NrKTsKKwkJCXJldHZhbCA9IC1FTk9NRU07CisJCQlnb3RvIGV4aXQ7CisJCX0KKworCQl1cmIgPSB1c2JfYWxsb2NfdXJiKDAsIEdGUF9LRVJORUwpOworCQlpZiAoIXVyYikgeworCQkJbXV0ZXhfdW5sb2NrKCZ2c3RkZXYtPmxvY2spOworCQkJcmV0dmFsID0gLUVOT01FTTsKKwkJCWdvdG8gZXhpdDsKKwkJfQorCisJCXRpbWVvdXQgPSB1c2JfZGF0YS50aW1lb3V0X21zOworCisJCXBpcGUgPSB1c2Jfc25kYnVsa3BpcGUoZGV2LCB1c2JfZGF0YS5waXBlKTsKKworCQlpZiAoY29weV9mcm9tX3VzZXIoYnVmZmVyLCB1c2JfZGF0YS5idWZmZXIsIHVzYl9kYXRhLmNvdW50KSkgeworCQkJZGV2X2VycigmZGV2LT5kZXYsICIlczogY2FuJ3QgY29weV9mcm9tX3VzZXJcbiIsCisJCQkJX19mdW5jX18pOworCQkJbXV0ZXhfdW5sb2NrKCZ2c3RkZXYtPmxvY2spOworCQkJcmV0dmFsID0gLUVGQVVMVDsKKwkJCWdvdG8gZXhpdDsKKwkJfQorCisJCXVzYl9hbmNob3JfdXJiKHVyYiwgJnZzdGRldi0+c3VibWl0dGVkKTsKKwkJcmV0dmFsID0gdnN0dXNiX2ZpbGxfYW5kX3NlbmRfdXJiKHVyYiwgZGV2LCBwaXBlLCBidWZmZXIsCisJCQkJCQkgIHVzYl9kYXRhLmNvdW50LCAmZG9uZSk7CisJCW11dGV4X3VubG9jaygmdnN0ZGV2LT5sb2NrKTsKKwkJaWYgKHJldHZhbCkgeworCQkJdXNiX3VuYW5jaG9yX3VyYih1cmIpOworCQkJZGV2X2VycigmZGV2LT5kZXYsCisJCQkJIiVzOiBlcnJvciAlZCBmaWxsaW5nIGFuZCBzZW5kaW5nIHVyYiAlZFxuIiwKKwkJCQlfX2Z1bmNfXywgcmV0dmFsLCBwaXBlKTsKKwkJCWdvdG8gZXhpdDsKKwkJfQorCisJCXJldHZhbCA9IHZzdHVzYl9jb21wbGV0ZV91cmIodXJiLCAmZG9uZSwgdGltZW91dCwgJmNudCk7CisJCWlmIChyZXR2YWwpIHsKKwkJCWRldl9lcnIoJmRldi0+ZGV2LCAiJXM6IGVycm9yICVkIGNvbXBsZXRpbmcgdXJiICVkXG4iLAorCQkJCV9fZnVuY19fLCByZXR2YWwsIHBpcGUpOworCQl9CisKKwkJYnJlYWs7CisJY2FzZSBJT0NUTF9WU1RVU0JfUkVDVl9QSVBFOgorCisJCWlmICgodXNiX2RhdGEuY291bnQgPT0gMCkgfHwgKHVzYl9kYXRhLmNvdW50ID4gVlNUX01BWEJVRkZFUikpIHsKKwkJCW11dGV4X3VubG9jaygmdnN0ZGV2LT5sb2NrKTsKKwkJCXJldHZhbCA9IC1FSU5WQUw7CisJCQlnb3RvIGV4aXQ7CisJCX0KKworCQlidWZmZXIgPSBrbWFsbG9jKHVzYl9kYXRhLmNvdW50LCBHRlBfS0VSTkVMKTsKKwkJaWYgKGJ1ZmZlciA9PSBOVUxMKSB7CisJCQltdXRleF91bmxvY2soJnZzdGRldi0+bG9jayk7CisJCQlyZXR2YWwgPSAtRU5PTUVNOworCQkJZ290byBleGl0OworCQl9CisKKwkJdXJiID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCF1cmIpIHsKKwkJCW11dGV4X3VubG9jaygmdnN0ZGV2LT5sb2NrKTsKKwkJCXJldHZhbCA9IC1FTk9NRU07CisJCQlnb3RvIGV4aXQ7CisJCX0KKworCQl0aW1lb3V0ID0gdXNiX2RhdGEudGltZW91dF9tczsKKworCQlwaXBlID0gdXNiX3JjdmJ1bGtwaXBlKGRldiwgdXNiX2RhdGEucGlwZSk7CisKKwkJdXNiX2FuY2hvcl91cmIodXJiLCAmdnN0ZGV2LT5zdWJtaXR0ZWQpOworCQlyZXR2YWwgPSB2c3R1c2JfZmlsbF9hbmRfc2VuZF91cmIodXJiLCBkZXYsIHBpcGUsIGJ1ZmZlciwKKwkJCQkJCSAgdXNiX2RhdGEuY291bnQsICZkb25lKTsKKwkJbXV0ZXhfdW5sb2NrKCZ2c3RkZXYtPmxvY2spOworCQlpZiAocmV0dmFsKSB7CisJCQl1c2JfdW5hbmNob3JfdXJiKHVyYik7CisJCQlkZXZfZXJyKCZkZXYtPmRldiwKKwkJCQkiJXM6IGVycm9yICVkIGZpbGxpbmcgYW5kIHNlbmRpbmcgdXJiICVkXG4iLAorCQkJCV9fZnVuY19fLCByZXR2YWwsIHBpcGUpOworCQkJZ290byBleGl0OworCQl9CisKKwkJcmV0dmFsID0gdnN0dXNiX2NvbXBsZXRlX3VyYih1cmIsICZkb25lLCB0aW1lb3V0LCAmY250KTsKKwkJaWYgKHJldHZhbCkgeworCQkJZGV2X2VycigmZGV2LT5kZXYsICIlczogZXJyb3IgJWQgY29tcGxldGluZyB1cmIgJWRcbiIsCisJCQkJX19mdW5jX18sIHJldHZhbCwgcGlwZSk7CisJCQlnb3RvIGV4aXQ7CisJCX0KKworCQlpZiAoY29weV90b191c2VyKHVzYl9kYXRhLmJ1ZmZlciwgYnVmZmVyLCBjbnQpKSB7CisJCQlkZXZfZXJyKCZkZXYtPmRldiwgIiVzOiBjYW4ndCBjb3B5X3RvX3VzZXJcbiIsCisJCQkJX19mdW5jX18pOworCQkJcmV0dmFsID0gLUVGQVVMVDsKKwkJCWdvdG8gZXhpdDsKKwkJfQorCisJCXVzYl9kYXRhLmNvdW50ID0gY250OworCQlpZiAoY29weV90b191c2VyKGRhdGEsICZ1c2JfZGF0YSwgc2l6ZW9mKHN0cnVjdCB2c3R1c2JfYXJncykpKSB7CisJCQlkZXZfZXJyKCZkZXYtPmRldiwgIiVzOiBjYW4ndCBjb3B5X3RvX3VzZXJcbiIsCisJCQkJX19mdW5jX18pOworCQkJcmV0dmFsID0gLUVGQVVMVDsKKwkJfSBlbHNlIHsKKwkJCWRldl9kYmcoJmRldi0+ZGV2LCAiJXM6IHJlY3YgJWQgYnl0ZXMgZnJvbSBwaXBlICVkXG4iLAorCQkJCV9fZnVuY19fLCB1c2JfZGF0YS5jb3VudCwgdXNiX2RhdGEucGlwZSk7CisJCX0KKworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCW11dGV4X3VubG9jaygmdnN0ZGV2LT5sb2NrKTsKKwkJZGV2X3dhcm4oJmRldi0+ZGV2LCAiaW9jdGxfdnN0dXNiOiBpbnZhbGlkIGlvY3RsIGNtZCAleFxuIiwKKwkJCSBjbWQpOworCQlyZXR1cm4gLUVJTlZBTDsKKwkJYnJlYWs7CisJfQorZXhpdDoKKwl1c2JfZnJlZV91cmIodXJiKTsKKwlrZnJlZShidWZmZXIpOworCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHZzdHVzYl9mb3BzID0geworCS5vd25lciA9ICAgICAgICAgICAgICAgIFRISVNfTU9EVUxFLAorCS5yZWFkID0gICAgICAgICAgICAgICAgIHZzdHVzYl9yZWFkLAorCS53cml0ZSA9ICAgICAgICAgICAgICAgIHZzdHVzYl93cml0ZSwKKwkudW5sb2NrZWRfaW9jdGwgPSAgICAgICB2c3R1c2JfaW9jdGwsCisJLmNvbXBhdF9pb2N0bCA9ICAgICAgICAgdnN0dXNiX2lvY3RsLAorCS5vcGVuID0gICAgICAgICAgICAgICAgIHZzdHVzYl9vcGVuLAorCS5yZWxlYXNlID0gICAgICAgICAgICAgIHZzdHVzYl9yZWxlYXNlLAorfTsKKworc3RhdGljIHN0cnVjdCB1c2JfY2xhc3NfZHJpdmVyIHVzYl92c3R1c2JfY2xhc3MgPSB7CisJLm5hbWUgPSAgICAgICAgICJ1c2IvdnN0dXNiJWQiLAorCS5mb3BzID0gICAgICAgICAmdnN0dXNiX2ZvcHMsCisJLm1pbm9yX2Jhc2UgPSAgIFZTVFVTQl9NSU5PUl9CQVNFLAorfTsKKworc3RhdGljIGludCB2c3R1c2JfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsCisJCQljb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCit7CisJc3RydWN0IHVzYl9kZXZpY2UgKmRldiA9IGludGVyZmFjZV90b191c2JkZXYoaW50Zik7CisJc3RydWN0IHZzdHVzYl9kZXZpY2UgKnZzdGRldjsKKwlpbnQgaTsKKwlpbnQgcmV0dmFsID0gMDsKKworCS8qIGFsbG9jYXRlIG1lbW9yeSBmb3Igb3VyIGRldmljZSBzdGF0ZSBhbmQgaW50aWFsaXplIGl0ICovCisKKwl2c3RkZXYgPSBremFsbG9jKHNpemVvZigqdnN0ZGV2KSwgR0ZQX0tFUk5FTCk7CisJaWYgKHZzdGRldiA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCS8qIG11c3QgZG8gdXNiX2dldF9kZXYoKSBwcmlvciB0byBrcmVmX2luaXQoKSBzaW5jZSB0aGUga3JlZl9wdXQoKQorCSAqIHJlbGVhc2UgZnVuY3Rpb24gd2lsbCBkbyBhIHVzYl9wdXRfZGV2KCkgKi8KKwl1c2JfZ2V0X2RldihkZXYpOworCWtyZWZfaW5pdCgmdnN0ZGV2LT5rcmVmKTsKKwltdXRleF9pbml0KCZ2c3RkZXYtPmxvY2spOworCisJaSA9IGRldi0+ZGVzY3JpcHRvci5iY2REZXZpY2U7CisKKwlkZXZfZGJnKCZpbnRmLT5kZXYsICJWZXJzaW9uICUxZCUxZC4lMWQlMWQgZm91bmQgYXQgYWRkcmVzcyAlZFxuIiwKKwkJKGkgJiAweEYwMDApID4+IDEyLCAoaSAmIDB4RjAwKSA+PiA4LAorCQkoaSAmIDB4RjApID4+IDQsIChpICYgMHhGKSwgZGV2LT5kZXZudW0pOworCisJdnN0ZGV2LT5wcmVzZW50ID0gMTsKKwl2c3RkZXYtPmlzb3BlbiA9IDA7CisJdnN0ZGV2LT51c2JfZGV2ID0gZGV2OworCWluaXRfdXNiX2FuY2hvcigmdnN0ZGV2LT5zdWJtaXR0ZWQpOworCisJdXNiX3NldF9pbnRmZGF0YShpbnRmLCB2c3RkZXYpOworCXJldHZhbCA9IHVzYl9yZWdpc3Rlcl9kZXYoaW50ZiwgJnVzYl92c3R1c2JfY2xhc3MpOworCWlmIChyZXR2YWwpIHsKKwkJZGV2X2VycigmaW50Zi0+ZGV2LAorCQkJIiVzOiBOb3QgYWJsZSB0byBnZXQgYSBtaW5vciBmb3IgdGhpcyBkZXZpY2UuXG4iLAorCQkJX19mdW5jX18pOworCQl1c2Jfc2V0X2ludGZkYXRhKGludGYsIE5VTEwpOworCQlrcmVmX3B1dCgmdnN0ZGV2LT5rcmVmLCB2c3R1c2JfZGVsZXRlKTsKKwkJcmV0dXJuIHJldHZhbDsKKwl9CisKKwkvKiBsZXQgdGhlIHVzZXIga25vdyB3aGF0IG5vZGUgdGhpcyBkZXZpY2UgaXMgbm93IGF0dGFjaGVkIHRvICovCisJZGV2X2luZm8oJmludGYtPmRldiwKKwkJICJWU1QgVVNCIERldmljZSAjJWQgbm93IGF0dGFjaGVkIHRvIG1ham9yICVkIG1pbm9yICVkXG4iLAorCQkgKGludGYtPm1pbm9yIC0gVlNUVVNCX01JTk9SX0JBU0UpLCBVU0JfTUFKT1IsIGludGYtPm1pbm9yKTsKKworCWRldl9pbmZvKCZpbnRmLT5kZXYsICIlcywgJXNcbiIsIERSSVZFUl9ERVNDLCBEUklWRVJfVkVSU0lPTik7CisKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgdm9pZCB2c3R1c2JfZGlzY29ubmVjdChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKK3sKKwlzdHJ1Y3QgdnN0dXNiX2RldmljZSAqdnN0ZGV2ID0gdXNiX2dldF9pbnRmZGF0YShpbnRmKTsKKworCXVzYl9kZXJlZ2lzdGVyX2RldihpbnRmLCAmdXNiX3ZzdHVzYl9jbGFzcyk7CisJdXNiX3NldF9pbnRmZGF0YShpbnRmLCBOVUxMKTsKKworCWlmICh2c3RkZXYpIHsKKworCQltdXRleF9sb2NrKCZ2c3RkZXYtPmxvY2spOworCQl2c3RkZXYtPnByZXNlbnQgPSAwOworCisJCXVzYl9raWxsX2FuY2hvcmVkX3VyYnMoJnZzdGRldi0+c3VibWl0dGVkKTsKKworCQltdXRleF91bmxvY2soJnZzdGRldi0+bG9jayk7CisKKwkJa3JlZl9wdXQoJnZzdGRldi0+a3JlZiwgdnN0dXNiX2RlbGV0ZSk7CisJfQorCit9CisKK3N0YXRpYyBpbnQgdnN0dXNiX3N1c3BlbmQoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsIHBtX21lc3NhZ2VfdCBtZXNzYWdlKQoreworCXN0cnVjdCB2c3R1c2JfZGV2aWNlICp2c3RkZXYgPSB1c2JfZ2V0X2ludGZkYXRhKGludGYpOworCWludCB0aW1lOworCWlmICghdnN0ZGV2KQorCQlyZXR1cm4gMDsKKworCW11dGV4X2xvY2soJnZzdGRldi0+bG9jayk7CisJdGltZSA9IHVzYl93YWl0X2FuY2hvcl9lbXB0eV90aW1lb3V0KCZ2c3RkZXYtPnN1Ym1pdHRlZCwgMTAwMCk7CisJaWYgKCF0aW1lKQorCQl1c2Jfa2lsbF9hbmNob3JlZF91cmJzKCZ2c3RkZXYtPnN1Ym1pdHRlZCk7CisJbXV0ZXhfdW5sb2NrKCZ2c3RkZXYtPmxvY2spOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdnN0dXNiX3Jlc3VtZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIHZzdHVzYl9kcml2ZXIgPSB7CisJLm5hbWUgPSAgICAgICAgICJ2c3R1c2IiLAorCS5wcm9iZSA9ICAgICAgICB2c3R1c2JfcHJvYmUsCisJLmRpc2Nvbm5lY3QgPSAgIHZzdHVzYl9kaXNjb25uZWN0LAorCS5zdXNwZW5kID0gICAgICB2c3R1c2Jfc3VzcGVuZCwKKwkucmVzdW1lID0gICAgICAgdnN0dXNiX3Jlc3VtZSwKKwkuaWRfdGFibGUgPSBpZF90YWJsZSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHZzdHVzYl9pbml0KHZvaWQpCit7CisJaW50IHJjOworCisJcmMgPSB1c2JfcmVnaXN0ZXIoJnZzdHVzYl9kcml2ZXIpOworCWlmIChyYykKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogZmFpbGVkIHRvIHJlZ2lzdGVyICglZCkiLCBfX2Z1bmNfXywgcmMpOworCisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgdnN0dXNiX2V4aXQodm9pZCkKK3sKKwl1c2JfZGVyZWdpc3RlcigmdnN0dXNiX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KHZzdHVzYl9pbml0KTsKK21vZHVsZV9leGl0KHZzdHVzYl9leGl0KTsKKworTU9EVUxFX0FVVEhPUigiRGVubmlzIE8nQnJpZW4vU3RlcGhlbiBXYXJlIik7CitNT0RVTEVfREVTQ1JJUFRJT04oRFJJVkVSX1ZFUlNJT04pOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbW9uL21vbl9iaW4uYyBiL2RyaXZlcnMvdXNiL21vbi9tb25fYmluLmMKaW5kZXggNjU2NmZjMC4uYzlkZTNmMCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbW9uL21vbl9iaW4uYworKysgYi9kcml2ZXJzL3VzYi9tb24vbW9uX2Jpbi5jCkBAIC0xMTYyLDkgKzExNjIsOSBAQAogCWlmIChtaW5vciA+PSBNT05fQklOX01BWF9NSU5PUikKIAkJcmV0dXJuIDA7CiAKLQlkZXYgPSBkZXZpY2VfY3JlYXRlX2RydmRhdGEobW9uX2Jpbl9jbGFzcywgdWJ1cz8gdWJ1cy0+Y29udHJvbGxlcjogTlVMTCwKLQkJCQkgICAgTUtERVYoTUFKT1IobW9uX2Jpbl9kZXYwKSwgbWlub3IpLCBOVUxMLAotCQkJCSAgICAidXNibW9uJWQiLCBtaW5vcik7CisJZGV2ID0gZGV2aWNlX2NyZWF0ZShtb25fYmluX2NsYXNzLCB1YnVzID8gdWJ1cy0+Y29udHJvbGxlciA6IE5VTEwsCisJCQkgICAgTUtERVYoTUFKT1IobW9uX2Jpbl9kZXYwKSwgbWlub3IpLCBOVUxMLAorCQkJICAgICJ1c2Jtb24lZCIsIG1pbm9yKTsKIAlpZiAoSVNfRVJSKGRldikpCiAJCXJldHVybiAwOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9tb24vbW9uX21haW4uYyBiL2RyaXZlcnMvdXNiL21vbi9tb25fbWFpbi5jCmluZGV4IDQ0MmQ4MDcuLjVlMGFiNDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL21vbi9tb25fbWFpbi5jCisrKyBiL2RyaXZlcnMvdXNiL21vbi9tb25fbWFpbi5jCkBAIC0zNjEsMTIgKzM2MSwxMiBAQAogCX0KIAkvLyBNT0RfSU5DX1VTRV9DT1VOVCh3aGljaF9tb2R1bGU/KTsKIAotCXVzYl9yZWdpc3Rlcl9ub3RpZnkoJm1vbl9uYik7CiAKIAltdXRleF9sb2NrKCZ1c2JfYnVzX2xpc3RfbG9jayk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeSAodWJ1cywgJnVzYl9idXNfbGlzdCwgYnVzX2xpc3QpIHsKIAkJbW9uX2J1c19pbml0KHVidXMpOwogCX0KKwl1c2JfcmVnaXN0ZXJfbm90aWZ5KCZtb25fbmIpOwogCW11dGV4X3VubG9jaygmdXNiX2J1c19saXN0X2xvY2spOwogCXJldHVybiAwOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9tdXNiL0tjb25maWcgYi9kcml2ZXJzL3VzYi9tdXNiL0tjb25maWcKaW5kZXggNThiMmI4Zi4uNGI5NTQyYiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbXVzYi9LY29uZmlnCisrKyBiL2RyaXZlcnMvdXNiL211c2IvS2NvbmZpZwpAQCAtMzMsMTAgKzMzLDYgQEAKIAlkZWZhdWx0IHkgaWYgQVJDSF9EQVZJTkNJCiAJZGVmYXVsdCB5IGlmIEFSQ0hfT01BUDI0MzAKIAlkZWZhdWx0IHkgaWYgQVJDSF9PTUFQMzRYWAotCWhlbHAKLQkgIFVzZSBhIHN0YXRpYyA8YXNtL2FyY2gvaGRyY19jbmYuaD4gZmlsZSB0byBkZXNjcmliZSBob3cgdGhlCi0JICBjb250cm9sbGVyIGlzIGNvbmZpZ3VyZWQgKGVuZHBvaW50cywgbWVjaGFuaXNtcywgZXRjKSBvbiB0aGUKLQkgIGN1cnJlbnQgaXRlcmF0aW9uIG9mIGEgZ2l2ZW4gc3lzdGVtLW9uLWNoaXAuCiAKIGNvbW1lbnQgIkRhVmluY2kgNjQ0eCBVU0Igc3VwcG9ydCIKIAlkZXBlbmRzIG9uIFVTQl9NVVNCX0hEUkMgJiYgQVJDSF9EQVZJTkNJCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9tdXNiL2NwcGlfZG1hLmggYi9kcml2ZXJzL3VzYi9tdXNiL2NwcGlfZG1hLmgKaW5kZXggZmM1MjE2Yi4uNzI5YjQwNyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbXVzYi9jcHBpX2RtYS5oCisrKyBiL2RyaXZlcnMvdXNiL211c2IvY3BwaV9kbWEuaApAQCAtMTE5LDggKzExOSw4IEBACiAJdm9pZCBfX2lvbWVtCQkJKm1yZWdzOwkJLyogTWVudG9yIHJlZ3MgKi8KIAl2b2lkIF9faW9tZW0JCQkqdGliYXNlOwkvKiBUSS9DUFBJIHJlZ3MgKi8KIAotCXN0cnVjdCBjcHBpX2NoYW5uZWwJCXR4W01VU0JfQ19OVU1fRVBUIC0gMV07Ci0Jc3RydWN0IGNwcGlfY2hhbm5lbAkJcnhbTVVTQl9DX05VTV9FUFIgLSAxXTsKKwlzdHJ1Y3QgY3BwaV9jaGFubmVsCQl0eFs0XTsKKwlzdHJ1Y3QgY3BwaV9jaGFubmVsCQlyeFs0XTsKIAogCXN0cnVjdCBkbWFfcG9vbAkJCSpwb29sOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9tdXNiL2RhdmluY2kuYyBiL2RyaXZlcnMvdXNiL211c2IvZGF2aW5jaS5jCmluZGV4IDc1YmFmMTguLmRmYjNiY2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL211c2IvZGF2aW5jaS5jCisrKyBiL2RyaXZlcnMvdXNiL211c2IvZGF2aW5jaS5jCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9jbGsuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KIAogI2luY2x1ZGUgPGFzbS9hcmNoL2hhcmR3YXJlLmg+CiAjaW5jbHVkZSA8YXNtL2FyY2gvbWVtb3J5Lmg+CkBAIC0zOSw3ICs0MCw3IEBACiAjaW5jbHVkZSAibXVzYl9jb3JlLmgiCiAKICNpZmRlZiBDT05GSUdfTUFDSF9EQVZJTkNJX0VWTQotI2luY2x1ZGUgPGFzbS9hcmNoL2kyYy1jbGllbnQuaD4KKyNkZWZpbmUgR1BJT19uVkJVU19EUlYJCTg3CiAjZW5kaWYKIAogI2luY2x1ZGUgImRhdmluY2kuaCIKQEAgLTEzOCw3ICsxMzksNiBAQAogLyogVkJVUyBTV0lUQ0hJTkcgSVMgQk9BUkQtU1BFQ0lGSUMgKi8KIAogI2lmZGVmIENPTkZJR19NQUNIX0RBVklOQ0lfRVZNCi0jaWZuZGVmIENPTkZJR19NQUNIX0RBVklOQ0lfRVZNX09URwogCiAvKiBJMkMgb3BlcmF0aW9ucyBhcmUgYWx3YXlzIHN5bmNocm9ub3VzLCBhbmQgcmVxdWlyZSBhIHRhc2sgY29udGV4dC4KICAqIFdpdGggdW5sb2FkZWQgc3lzdGVtcywgdXNpbmcgdGhlIHNoYXJlZCB3b3JrcXVldWUgc2VlbXMgdG8gc3VmZmljZQpAQCAtMTQ2LDEyICsxNDYsMTEgQEAKICAqLwogc3RhdGljIHZvaWQgZXZtX2RlZmVycmVkX2RydnZidXMoc3RydWN0IHdvcmtfc3RydWN0ICppZ25vcmVkKQogewotCWRhdmluY2lfaTJjX2V4cGFuZGVyX29wKDB4M2EsIFVTQl9EUlZWQlVTLCB2YnVzX3N0YXRlKTsKKwlncGlvX3NldF92YWx1ZV9jYW5zbGVlcChHUElPX25WQlVTX0RSViwgdmJ1c19zdGF0ZSk7CiAJdmJ1c19zdGF0ZSA9ICF2YnVzX3N0YXRlOwogfQogc3RhdGljIERFQ0xBUkVfV09SSyhldm1fdmJ1c193b3JrLCBldm1fZGVmZXJyZWRfZHJ2dmJ1cyk7CiAKLSNlbmRpZgkvKiBtb2RpZmllZCBib2FyZCAqLwogI2VuZGlmCS8qIEVWTSAqLwogCiBzdGF0aWMgdm9pZCBkYXZpbmNpX3NvdXJjZV9wb3dlcihzdHJ1Y3QgbXVzYiAqbXVzYiwgaW50IGlzX29uLCBpbnQgaW1tZWRpYXRlKQpAQCAtMTY1LDIxICsxNjQsMTAgQEAKIAogI2lmZGVmIENPTkZJR19NQUNIX0RBVklOQ0lfRVZNCiAJaWYgKG1hY2hpbmVfaXNfZGF2aW5jaV9ldm0oKSkgewotI2lmZGVmIENPTkZJR19NQUNIX0RBVklOQ0lfRVZNX09URwotCQkvKiBtb2RpZmllZCBFVk0gYm9hcmQgc3dpdGNoaW5nIFZCVVMgd2l0aCBHUElPKDYpIG5vdCBJMkMKLQkJICogTk9URTogIFBJTk1VWDAuUkdCODg4IChiaXQyMykgbXVzdCBiZSBjbGVhcgotCQkgKi8KLQkJaWYgKGlzX29uKQotCQkJZ3Bpb19zZXQoR1BJTyg2KSk7Ci0JCWVsc2UKLQkJCWdwaW9fY2xlYXIoR1BJTyg2KSk7Ci0JCWltbWVkaWF0ZSA9IDE7Ci0jZWxzZQogCQlpZiAoaW1tZWRpYXRlKQotCQkJZGF2aW5jaV9pMmNfZXhwYW5kZXJfb3AoMHgzYSwgVVNCX0RSVlZCVVMsICFpc19vbik7CisJCQlncGlvX3NldF92YWx1ZV9jYW5zbGVlcChHUElPX25WQlVTX0RSViwgdmJ1c19zdGF0ZSk7CiAJCWVsc2UKIAkJCXNjaGVkdWxlX3dvcmsoJmV2bV92YnVzX3dvcmspOwotI2VuZGlmCiAJfQogI2VuZGlmCiAJaWYgKGltbWVkaWF0ZSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL211c2IvbXVzYl9jb3JlLmMgYi9kcml2ZXJzL3VzYi9tdXNiL211c2JfY29yZS5jCmluZGV4IDEyOGU5NDkuLjRhMzU3NDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL211c2IvbXVzYl9jb3JlLmMKKysrIGIvZHJpdmVycy91c2IvbXVzYi9tdXNiX2NvcmUuYwpAQCAtODIsOSArODIsOSBAQAogLyoKICAqIFRoaXMgZ2V0cyBtYW55IGtpbmRzIG9mIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb246CiAgKgktIEtjb25maWcgZm9yIGV2ZXJ5dGhpbmcgdXNlci1jb25maWd1cmFibGUKLSAqCS0gPGFzbS9hcmNoL2hkcmNfY25mLmg+IGZvciBTT0Mgb3IgZmFtaWx5IGRldGFpbHMKICAqCS0gcGxhdGZvcm1fZGV2aWNlIGZvciBhZGRyZXNzaW5nLCBpcnEsIGFuZCBwbGF0Zm9ybV9kYXRhCiAgKgktIHBsYXRmb3JtX2RhdGEgaXMgbW9zdGx5IGZvciBib2FyZC1zcGVjaWZpYyBpbmZvcm1hcmlvbgorICoJICAocGx1cyByZWNlbnRybHksIFNPQyBvciBmYW1pbHkgZGV0YWlscykKICAqCiAgKiBNb3N0IG9mIHRoZSBjb25kaXRpb25hbCBjb21waWxhdGlvbiB3aWxsIChzb21lZGF5KSB2YW5pc2guCiAgKi8KQEAgLTk3NCw5ICs5NzQsOSBAQAogLyoKICAqIFRoZSBzaWxpY29uIGVpdGhlciBoYXMgaGFyZC13aXJlZCBlbmRwb2ludCBjb25maWd1cmF0aW9ucywgb3IgZWxzZQogICogImR5bmFtaWMgZmlmbyIgc2l6aW5nLiAgVGhlIGRyaXZlciBoYXMgc3VwcG9ydCBmb3IgYm90aCwgdGhvdWdoIGF0IHRoaXMKLSAqIHdyaXRpbmcgb25seSB0aGUgZHluYW1pYyBzaXppbmcgaXMgdmVyeSB3ZWxsIHRlc3RlZC4gICBXZSB1c2Ugbm9ybWFsCi0gKiBpZGlvbXMgdG8gc28gYm90aCBtb2RlcyBhcmUgY29tcGlsZS10ZXN0ZWQsIGJ1dCBkZWFkIGNvZGUgZWxpbWluYXRpb24KLSAqIGxlYXZlcyBvbmx5IHRoZSByZWxldmFudCBvbmUgaW4gdGhlIG9iamVjdCBmaWxlLgorICogd3JpdGluZyBvbmx5IHRoZSBkeW5hbWljIHNpemluZyBpcyB2ZXJ5IHdlbGwgdGVzdGVkLiAgIFNpbmNlIHdlIHN3aXRjaGVkCisgKiBhd2F5IGZyb20gY29tcGlsZS10aW1lIGhhcmR3YXJlIHBhcmFtZXRlcnMsIHdlIGNhbiBubyBsb25nZXIgcmVseSBvbgorICogZGVhZCBjb2RlIGVsaW1pbmF0aW9uIHRvIGxlYXZlIG9ubHkgdGhlIHJlbGV2YW50IG9uZSBpbiB0aGUgb2JqZWN0IGZpbGUuCiAgKgogICogV2UgZG9uJ3QgY3VycmVudGx5IHVzZSBkeW5hbWljIGZpZm8gc2V0dXAgY2FwYWJpbGl0eSB0byBkbyBhbnl0aGluZwogICogbW9yZSB0aGFuIHNlbGVjdGluZyBvbmUgb2YgYSBidW5jaCBvZiBwcmVkZWZpbmVkIGNvbmZpZ3VyYXRpb25zLgpAQCAtMTgwNiw2ICsxODA2LDcgQEAKIAltdXNiLT5jdHJsX2Jhc2UgPSBtYmFzZTsKIAltdXNiLT5uSXJxID0gLUVOT0RFVjsKIAltdXNiLT5jb25maWcgPSBjb25maWc7CisJQlVHX09OKG11c2ItPmNvbmZpZy0+bnVtX2VwcyA+IE1VU0JfQ19OVU1fRVBTKTsKIAlmb3IgKGVwbnVtID0gMCwgZXAgPSBtdXNiLT5lbmRwb2ludHM7CiAJCQllcG51bSA8IG11c2ItPmNvbmZpZy0+bnVtX2VwczsKIAkJCWVwbnVtKyssIGVwKyspIHsKQEAgLTIwNTQsMTUgKzIwNTUsNiBAQAogCiAJfQogCi0JcmV0dXJuIDA7Ci0KLWZhaWw6Ci0JaWYgKG11c2ItPmNsb2NrKQotCQljbGtfcHV0KG11c2ItPmNsb2NrKTsKLQlkZXZpY2VfaW5pdF93YWtldXAoZGV2LCAwKTsKLQltdXNiX2ZyZWUobXVzYik7Ci0JcmV0dXJuIHN0YXR1czsKLQogI2lmZGVmIENPTkZJR19TWVNGUwogCXN0YXR1cyA9IGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl9tb2RlKTsKIAlzdGF0dXMgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfdmJ1cyk7CkBAIC0yMDcxLDEyICsyMDYzLDMxIEBACiAjZW5kaWYgLyogQ09ORklHX1VTQl9HQURHRVRfTVVTQl9IRFJDICovCiAJc3RhdHVzID0gMDsKICNlbmRpZgorCWlmIChzdGF0dXMpCisJCWdvdG8gZmFpbDI7CisKKwlyZXR1cm4gMDsKKworZmFpbDI6CisjaWZkZWYgQ09ORklHX1NZU0ZTCisJZGV2aWNlX3JlbW92ZV9maWxlKG11c2ItPmNvbnRyb2xsZXIsICZkZXZfYXR0cl9tb2RlKTsKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUobXVzYi0+Y29udHJvbGxlciwgJmRldl9hdHRyX3ZidXMpOworI2lmZGVmIENPTkZJR19VU0JfTVVTQl9PVEcKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUobXVzYi0+Y29udHJvbGxlciwgJmRldl9hdHRyX3NycCk7CisjZW5kaWYKKyNlbmRpZgorCW11c2JfcGxhdGZvcm1fZXhpdChtdXNiKTsKK2ZhaWw6CisJZGV2X2VycihtdXNiLT5jb250cm9sbGVyLAorCQkibXVzYl9pbml0X2NvbnRyb2xsZXIgZmFpbGVkIHdpdGggc3RhdHVzICVkXG4iLCBzdGF0dXMpOworCisJaWYgKG11c2ItPmNsb2NrKQorCQljbGtfcHV0KG11c2ItPmNsb2NrKTsKKwlkZXZpY2VfaW5pdF93YWtldXAoZGV2LCAwKTsKKwltdXNiX2ZyZWUobXVzYik7CiAKIAlyZXR1cm4gc3RhdHVzOwogCi1mYWlsMjoKLQltdXNiX3BsYXRmb3JtX2V4aXQobXVzYik7Ci0JZ290byBmYWlsOwogfQogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbXVzYi9tdXNiX2dhZGdldF9lcDAuYyBiL2RyaXZlcnMvdXNiL211c2IvbXVzYl9nYWRnZXRfZXAwLmMKaW5kZXggYTU3NjUyZi4uM2Y1ZTMwZCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbXVzYi9tdXNiX2dhZGdldF9lcDAuYworKysgYi9kcml2ZXJzL3VzYi9tdXNiL211c2JfZ2FkZ2V0X2VwMC5jCkBAIC00MzcsNyArNDM3LDcgQEAKIHsKIAl2b2lkIF9faW9tZW0JCSpyZWdzID0gbXVzYi0+Y29udHJvbF9lcC0+cmVnczsKIAlzdHJ1Y3QgdXNiX3JlcXVlc3QJKnJlcTsKLQl1MTYJCQl0bXA7CisJdTE2CQkJY291bnQsIGNzcjsKIAogCXJlcSA9IG5leHRfZXAwX3JlcXVlc3QobXVzYik7CiAKQEAgLTQ0OSwzNSArNDQ5LDM1IEBACiAJCXVuc2lnbmVkCWxlbiA9IHJlcS0+bGVuZ3RoIC0gcmVxLT5hY3R1YWw7CiAKIAkJLyogcmVhZCB0aGUgYnVmZmVyICovCi0JCXRtcCA9IG11c2JfcmVhZGIocmVncywgTVVTQl9DT1VOVDApOwotCQlpZiAodG1wID4gbGVuKSB7CisJCWNvdW50ID0gbXVzYl9yZWFkYihyZWdzLCBNVVNCX0NPVU5UMCk7CisJCWlmIChjb3VudCA+IGxlbikgewogCQkJcmVxLT5zdGF0dXMgPSAtRU9WRVJGTE9XOwotCQkJdG1wID0gbGVuOworCQkJY291bnQgPSBsZW47CiAJCX0KLQkJbXVzYl9yZWFkX2ZpZm8oJm11c2ItPmVuZHBvaW50c1swXSwgdG1wLCBidWYpOwotCQlyZXEtPmFjdHVhbCArPSB0bXA7Ci0JCXRtcCA9IE1VU0JfQ1NSMF9QX1NWRFJYUEtUUkRZOwotCQlpZiAodG1wIDwgNjQgfHwgcmVxLT5hY3R1YWwgPT0gcmVxLT5sZW5ndGgpIHsKKwkJbXVzYl9yZWFkX2ZpZm8oJm11c2ItPmVuZHBvaW50c1swXSwgY291bnQsIGJ1Zik7CisJCXJlcS0+YWN0dWFsICs9IGNvdW50OworCQljc3IgPSBNVVNCX0NTUjBfUF9TVkRSWFBLVFJEWTsKKwkJaWYgKGNvdW50IDwgNjQgfHwgcmVxLT5hY3R1YWwgPT0gcmVxLT5sZW5ndGgpIHsKIAkJCW11c2ItPmVwMF9zdGF0ZSA9IE1VU0JfRVAwX1NUQUdFX1NUQVRVU0lOOwotCQkJdG1wIHw9IE1VU0JfQ1NSMF9QX0RBVEFFTkQ7CisJCQljc3IgfD0gTVVTQl9DU1IwX1BfREFUQUVORDsKIAkJfSBlbHNlCiAJCQlyZXEgPSBOVUxMOwogCX0gZWxzZQotCQl0bXAgPSBNVVNCX0NTUjBfUF9TVkRSWFBLVFJEWSB8IE1VU0JfQ1NSMF9QX1NFTkRTVEFMTDsKKwkJY3NyID0gTVVTQl9DU1IwX1BfU1ZEUlhQS1RSRFkgfCBNVVNCX0NTUjBfUF9TRU5EU1RBTEw7CiAKIAogCS8qIENvbXBsZXRpb24gaGFuZGxlciBtYXkgY2hvb3NlIHRvIHN0YWxsLCBlLmcuIGJlY2F1c2UgdGhlCiAJICogbWVzc2FnZSBqdXN0IHJlY2VpdmVkIGhvbGRzIGludmFsaWQgZGF0YS4KIAkgKi8KIAlpZiAocmVxKSB7Ci0JCW11c2ItPmFja3BlbmQgPSB0bXA7CisJCW11c2ItPmFja3BlbmQgPSBjc3I7CiAJCW11c2JfZ19lcDBfZ2l2ZWJhY2sobXVzYiwgcmVxKTsKIAkJaWYgKCFtdXNiLT5hY2twZW5kKQogCQkJcmV0dXJuOwogCQltdXNiLT5hY2twZW5kID0gMDsKIAl9CiAJbXVzYl9lcF9zZWxlY3QobXVzYi0+bXJlZ3MsIDApOwotCW11c2Jfd3JpdGV3KHJlZ3MsIE1VU0JfQ1NSMCwgdG1wKTsKKwltdXNiX3dyaXRldyhyZWdzLCBNVVNCX0NTUjAsIGNzcik7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9tdXNiL211c2JfaG9zdC5jIGIvZHJpdmVycy91c2IvbXVzYi9tdXNiX2hvc3QuYwppbmRleCA4YjRiZTAxLi4zMTMzOTkwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9tdXNiL211c2JfaG9zdC5jCisrKyBiL2RyaXZlcnMvdXNiL211c2IvbXVzYl9ob3N0LmMKQEAgLTEwOCw3ICsxMDgsNyBAQAogLyoKICAqIENsZWFyIFRYIGZpZm8uIE5lZWRlZCB0byBhdm9pZCBCQUJCTEUgZXJyb3JzLgogICovCi1zdGF0aWMgaW5saW5lIHZvaWQgbXVzYl9oX3R4X2ZsdXNoX2ZpZm8oc3RydWN0IG11c2JfaHdfZXAgKmVwKQorc3RhdGljIHZvaWQgbXVzYl9oX3R4X2ZsdXNoX2ZpZm8oc3RydWN0IG11c2JfaHdfZXAgKmVwKQogewogCXZvaWQgX19pb21lbQkqZXBpbyA9IGVwLT5yZWdzOwogCXUxNgkJY3NyOwpAQCAtMjkxLDYgKzI5MSw3IEBACiAJCQl1cmItPmFjdHVhbF9sZW5ndGgsIHVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aAogCQkJKTsKIAorCXVzYl9oY2RfdW5saW5rX3VyYl9mcm9tX2VwKG11c2JfdG9faGNkKG11c2IpLCB1cmIpOwogCXNwaW5fdW5sb2NrKCZtdXNiLT5sb2NrKTsKIAl1c2JfaGNkX2dpdmViYWNrX3VyYihtdXNiX3RvX2hjZChtdXNiKSwgdXJiLCBzdGF0dXMpOwogCXNwaW5fbG9jaygmbXVzYi0+bG9jayk7CkBAIC0zNTMsOCArMzU0LDYgQEAKIAkJYnJlYWs7CiAJfQogCi0JdXNiX2hjZF91bmxpbmtfdXJiX2Zyb21fZXAobXVzYl90b19oY2QobXVzYiksIHVyYik7Ci0KIAlxaC0+aXNfcmVhZHkgPSAwOwogCV9fbXVzYl9naXZlYmFjayhtdXNiLCB1cmIsIHN0YXR1cyk7CiAJcWgtPmlzX3JlYWR5ID0gcmVhZHk7CkBAIC00MzYsNyArNDM1LDcgQEAKIAl9CiB9CiAKLXN0YXRpYyBpbmxpbmUgdTE2IG11c2JfaF9mbHVzaF9yeGZpZm8oc3RydWN0IG11c2JfaHdfZXAgKmh3X2VwLCB1MTYgY3NyKQorc3RhdGljIHUxNiBtdXNiX2hfZmx1c2hfcnhmaWZvKHN0cnVjdCBtdXNiX2h3X2VwICpod19lcCwgdTE2IGNzcikKIHsKIAkvKiB3ZSBkb24ndCB3YW50IGZpZm8gdG8gZmlsbCBpdHNlbGYgYWdhaW47CiAJICogaWdub3JlIGRtYSAodmFyaW91cyBtb2RlbHMpLApAQCAtMTAwNSw3ICsxMDA0LDcgQEAKIAogLyoKICAqIEhhbmRsZSBkZWZhdWx0IGVuZHBvaW50IGludGVycnVwdCBhcyBob3N0LiBPbmx5IGNhbGxlZCBpbiBJUlEgdGltZQotICogZnJvbSB0aGUgTGludXhJc3IoKSBpbnRlcnJ1cHQgc2VydmljZSByb3V0aW5lLgorICogZnJvbSBtdXNiX2ludGVycnVwdCgpLgogICoKICAqIGNhbGxlZCB3aXRoIGNvbnRyb2xsZXIgaXJxbG9ja2VkCiAgKi8KQEAgLTE3OTEsNyArMTc5MCw5IEBACiAJICovCiAJcWggPSBremFsbG9jKHNpemVvZiAqcWgsIG1lbV9mbGFncyk7CiAJaWYgKCFxaCkgeworCQlzcGluX2xvY2tfaXJxc2F2ZSgmbXVzYi0+bG9jaywgZmxhZ3MpOwogCQl1c2JfaGNkX3VubGlua191cmJfZnJvbV9lcChoY2QsIHVyYik7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm11c2ItPmxvY2ssIGZsYWdzKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCkBAIC0xODczLDcgKzE4NzQsMTEgQEAKIAkJCS8qIHNldCB1cCB0dCBpbmZvIGlmIG5lZWRlZCAqLwogCQkJaWYgKHVyYi0+ZGV2LT50dCkgewogCQkJCXFoLT5oX3BvcnRfcmVnID0gKHU4KSB1cmItPmRldi0+dHRwb3J0OwotCQkJCXFoLT5oX2FkZHJfcmVnIHw9IDB4ODA7CisJCQkJaWYgKHVyYi0+ZGV2LT50dC0+aHViKQorCQkJCQlxaC0+aF9hZGRyX3JlZyA9CisJCQkJCQkodTgpIHVyYi0+ZGV2LT50dC0+aHViLT5kZXZudW07CisJCQkJaWYgKHVyYi0+ZGV2LT50dC0+bXVsdGkpCisJCQkJCXFoLT5oX2FkZHJfcmVnIHw9IDB4ODA7CiAJCQl9CiAJCX0KIAl9CkBAIC0xOTAzLDcgKzE5MDgsOSBAQAogCiBkb25lOgogCWlmIChyZXQgIT0gMCkgeworCQlzcGluX2xvY2tfaXJxc2F2ZSgmbXVzYi0+bG9jaywgZmxhZ3MpOwogCQl1c2JfaGNkX3VubGlua191cmJfZnJvbV9lcChoY2QsIHVyYik7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm11c2ItPmxvY2ssIGZsYWdzKTsKIAkJa2ZyZWUocWgpOwogCX0KIAlyZXR1cm4gcmV0OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbXVzYi9tdXNiX2lvLmggYi9kcml2ZXJzL3VzYi9tdXNiL211c2JfaW8uaAppbmRleCA2YmJlZGFlLi4yMjNmMGE1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9tdXNiL211c2JfaW8uaAorKysgYi9kcml2ZXJzL3VzYi9tdXNiL211c2JfaW8uaApAQCAtMzcsNyArMzcsOSBAQAogCiAjaW5jbHVkZSA8bGludXgvaW8uaD4KIAotI2lmbmRlZglDT05GSUdfQVJNCisjaWYgIWRlZmluZWQoQ09ORklHX0FSTSkgJiYgIWRlZmluZWQoQ09ORklHX1NVUEVSSCkgXAorCSYmICFkZWZpbmVkKENPTkZJR19BVlIzMikgJiYgIWRlZmluZWQoQ09ORklHX1BQQzMyKSBcCisJJiYgIWRlZmluZWQoQ09ORklHX1BQQzY0KQogc3RhdGljIGlubGluZSB2b2lkIHJlYWRzbChjb25zdCB2b2lkIF9faW9tZW0gKmFkZHIsIHZvaWQgKmJ1ZiwgaW50IGxlbikKIAl7IGluc2woKHVuc2lnbmVkIGxvbmcpYWRkciwgYnVmLCBsZW4pOyB9CiBzdGF0aWMgaW5saW5lIHZvaWQgcmVhZHN3KGNvbnN0IHZvaWQgX19pb21lbSAqYWRkciwgdm9pZCAqYnVmLCBpbnQgbGVuKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbXVzYi9tdXNiaHNkbWEuYyBiL2RyaXZlcnMvdXNiL211c2IvbXVzYmhzZG1hLmMKaW5kZXggOWJhOGZiNy4uOGM3MzRlZiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbXVzYi9tdXNiaHNkbWEuYworKysgYi9kcml2ZXJzL3VzYi9tdXNiL211c2Joc2RtYS5jCkBAIC00NSw4ICs0NSw4IEBACiAjZGVmaW5lIE1VU0JfSFNETUFfQUREUkVTUwkJMHg4CiAjZGVmaW5lIE1VU0JfSFNETUFfQ09VTlQJCTB4YwogCi0jZGVmaW5lIE1VU0JfSFNETUFfQ0hBTk5FTF9PRkZTRVQoX2JDaGFubmVsLCBfb2Zmc2V0KQkJXAotCQkoTVVTQl9IU0RNQV9CQVNFICsgKF9iQ2hhbm5lbCA8PCA0KSArIF9vZmZzZXQpCisjZGVmaW5lIE1VU0JfSFNETUFfQ0hBTk5FTF9PRkZTRVQoX2JjaGFubmVsLCBfb2Zmc2V0KQkJXAorCQkoTVVTQl9IU0RNQV9CQVNFICsgKF9iY2hhbm5lbCA8PCA0KSArIF9vZmZzZXQpCiAKIC8qIGNvbnRyb2wgcmVnaXN0ZXIgKDE2LWJpdCk6ICovCiAjZGVmaW5lIE1VU0JfSFNETUFfRU5BQkxFX1NISUZUCQkwCkBAIC02NywyMyArNjcsMjMgQEAKIHN0cnVjdCBtdXNiX2RtYV9jb250cm9sbGVyOwogCiBzdHJ1Y3QgbXVzYl9kbWFfY2hhbm5lbCB7Ci0Jc3RydWN0IGRtYV9jaGFubmVsCQlDaGFubmVsOworCXN0cnVjdCBkbWFfY2hhbm5lbAkJY2hhbm5lbDsKIAlzdHJ1Y3QgbXVzYl9kbWFfY29udHJvbGxlcgkqY29udHJvbGxlcjsKLQl1MzIJCQkJZHdTdGFydEFkZHJlc3M7CisJdTMyCQkJCXN0YXJ0X2FkZHI7CiAJdTMyCQkJCWxlbjsKLQl1MTYJCQkJd01heFBhY2tldFNpemU7Ci0JdTgJCQkJYkluZGV4OworCXUxNgkJCQltYXhfcGFja2V0X3N6OworCXU4CQkJCWlkeDsKIAl1OAkJCQllcG51bTsKIAl1OAkJCQl0cmFuc21pdDsKIH07CiAKIHN0cnVjdCBtdXNiX2RtYV9jb250cm9sbGVyIHsKLQlzdHJ1Y3QgZG1hX2NvbnRyb2xsZXIJCUNvbnRyb2xsZXI7Ci0Jc3RydWN0IG11c2JfZG1hX2NoYW5uZWwJCWFDaGFubmVsW01VU0JfSFNETUFfQ0hBTk5FTFNdOwotCXZvaWQJCQkJKnBEbWFQcml2YXRlOwotCXZvaWQgX19pb21lbQkJCSpwQ29yZUJhc2U7Ci0JdTgJCQkJYkNoYW5uZWxDb3VudDsKLQl1OAkJCQlibVVzZWRDaGFubmVsczsKKwlzdHJ1Y3QgZG1hX2NvbnRyb2xsZXIJCWNvbnRyb2xsZXI7CisJc3RydWN0IG11c2JfZG1hX2NoYW5uZWwJCWNoYW5uZWxbTVVTQl9IU0RNQV9DSEFOTkVMU107CisJdm9pZAkJCQkqcHJpdmF0ZV9kYXRhOworCXZvaWQgX19pb21lbQkJCSpiYXNlOworCXU4CQkJCWNoYW5uZWxfY291bnQ7CisJdTgJCQkJdXNlZF9jaGFubmVsczsKIAl1OAkJCQlpcnE7CiB9OwogCkBAIC05Myw5MSArOTMsOTEgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgZG1hX2NoYW5uZWxfcmVsZWFzZShzdHJ1Y3QgZG1hX2NoYW5uZWwgKnBDaGFubmVsKTsKK3N0YXRpYyB2b2lkIGRtYV9jaGFubmVsX3JlbGVhc2Uoc3RydWN0IGRtYV9jaGFubmVsICpjaGFubmVsKTsKIAogc3RhdGljIGludCBkbWFfY29udHJvbGxlcl9zdG9wKHN0cnVjdCBkbWFfY29udHJvbGxlciAqYykKIHsKLQlzdHJ1Y3QgbXVzYl9kbWFfY29udHJvbGxlciAqY29udHJvbGxlciA9Ci0JCWNvbnRhaW5lcl9vZihjLCBzdHJ1Y3QgbXVzYl9kbWFfY29udHJvbGxlciwgQ29udHJvbGxlcik7Ci0Jc3RydWN0IG11c2IgKm11c2IgPSAoc3RydWN0IG11c2IgKikgY29udHJvbGxlci0+cERtYVByaXZhdGU7Ci0Jc3RydWN0IGRtYV9jaGFubmVsICpwQ2hhbm5lbDsKLQl1OCBiQml0OworCXN0cnVjdCBtdXNiX2RtYV9jb250cm9sbGVyICpjb250cm9sbGVyID0gY29udGFpbmVyX29mKGMsCisJCQlzdHJ1Y3QgbXVzYl9kbWFfY29udHJvbGxlciwgY29udHJvbGxlcik7CisJc3RydWN0IG11c2IgKm11c2IgPSBjb250cm9sbGVyLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IGRtYV9jaGFubmVsICpjaGFubmVsOworCXU4IGJpdDsKIAotCWlmIChjb250cm9sbGVyLT5ibVVzZWRDaGFubmVscyAhPSAwKSB7CisJaWYgKGNvbnRyb2xsZXItPnVzZWRfY2hhbm5lbHMgIT0gMCkgewogCQlkZXZfZXJyKG11c2ItPmNvbnRyb2xsZXIsCiAJCQkiU3RvcHBpbmcgRE1BIGNvbnRyb2xsZXIgd2hpbGUgY2hhbm5lbCBhY3RpdmVcbiIpOwogCi0JCWZvciAoYkJpdCA9IDA7IGJCaXQgPCBNVVNCX0hTRE1BX0NIQU5ORUxTOyBiQml0KyspIHsKLQkJCWlmIChjb250cm9sbGVyLT5ibVVzZWRDaGFubmVscyAmICgxIDw8IGJCaXQpKSB7Ci0JCQkJcENoYW5uZWwgPSAmY29udHJvbGxlci0+YUNoYW5uZWxbYkJpdF0uQ2hhbm5lbDsKLQkJCQlkbWFfY2hhbm5lbF9yZWxlYXNlKHBDaGFubmVsKTsKKwkJZm9yIChiaXQgPSAwOyBiaXQgPCBNVVNCX0hTRE1BX0NIQU5ORUxTOyBiaXQrKykgeworCQkJaWYgKGNvbnRyb2xsZXItPnVzZWRfY2hhbm5lbHMgJiAoMSA8PCBiaXQpKSB7CisJCQkJY2hhbm5lbCA9ICZjb250cm9sbGVyLT5jaGFubmVsW2JpdF0uY2hhbm5lbDsKKwkJCQlkbWFfY2hhbm5lbF9yZWxlYXNlKGNoYW5uZWwpOwogCi0JCQkJaWYgKCFjb250cm9sbGVyLT5ibVVzZWRDaGFubmVscykKKwkJCQlpZiAoIWNvbnRyb2xsZXItPnVzZWRfY2hhbm5lbHMpCiAJCQkJCWJyZWFrOwogCQkJfQogCQl9CiAJfQorCiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgZG1hX2NoYW5uZWwgKmRtYV9jaGFubmVsX2FsbG9jYXRlKHN0cnVjdCBkbWFfY29udHJvbGxlciAqYywKIAkJCQlzdHJ1Y3QgbXVzYl9od19lcCAqaHdfZXAsIHU4IHRyYW5zbWl0KQogewotCXU4IGJCaXQ7Ci0Jc3RydWN0IGRtYV9jaGFubmVsICpwQ2hhbm5lbCA9IE5VTEw7Ci0Jc3RydWN0IG11c2JfZG1hX2NoYW5uZWwgKnBJbXBsQ2hhbm5lbCA9IE5VTEw7Ci0Jc3RydWN0IG11c2JfZG1hX2NvbnRyb2xsZXIgKmNvbnRyb2xsZXIgPQotCQkJY29udGFpbmVyX29mKGMsIHN0cnVjdCBtdXNiX2RtYV9jb250cm9sbGVyLCBDb250cm9sbGVyKTsKKwlzdHJ1Y3QgbXVzYl9kbWFfY29udHJvbGxlciAqY29udHJvbGxlciA9IGNvbnRhaW5lcl9vZihjLAorCQkJc3RydWN0IG11c2JfZG1hX2NvbnRyb2xsZXIsIGNvbnRyb2xsZXIpOworCXN0cnVjdCBtdXNiX2RtYV9jaGFubmVsICptdXNiX2NoYW5uZWwgPSBOVUxMOworCXN0cnVjdCBkbWFfY2hhbm5lbCAqY2hhbm5lbCA9IE5VTEw7CisJdTggYml0OwogCi0JZm9yIChiQml0ID0gMDsgYkJpdCA8IE1VU0JfSFNETUFfQ0hBTk5FTFM7IGJCaXQrKykgewotCQlpZiAoIShjb250cm9sbGVyLT5ibVVzZWRDaGFubmVscyAmICgxIDw8IGJCaXQpKSkgewotCQkJY29udHJvbGxlci0+Ym1Vc2VkQ2hhbm5lbHMgfD0gKDEgPDwgYkJpdCk7Ci0JCQlwSW1wbENoYW5uZWwgPSAmKGNvbnRyb2xsZXItPmFDaGFubmVsW2JCaXRdKTsKLQkJCXBJbXBsQ2hhbm5lbC0+Y29udHJvbGxlciA9IGNvbnRyb2xsZXI7Ci0JCQlwSW1wbENoYW5uZWwtPmJJbmRleCA9IGJCaXQ7Ci0JCQlwSW1wbENoYW5uZWwtPmVwbnVtID0gaHdfZXAtPmVwbnVtOwotCQkJcEltcGxDaGFubmVsLT50cmFuc21pdCA9IHRyYW5zbWl0OwotCQkJcENoYW5uZWwgPSAmKHBJbXBsQ2hhbm5lbC0+Q2hhbm5lbCk7Ci0JCQlwQ2hhbm5lbC0+cHJpdmF0ZV9kYXRhID0gcEltcGxDaGFubmVsOwotCQkJcENoYW5uZWwtPnN0YXR1cyA9IE1VU0JfRE1BX1NUQVRVU19GUkVFOwotCQkJcENoYW5uZWwtPm1heF9sZW4gPSAweDEwMDAwOworCWZvciAoYml0ID0gMDsgYml0IDwgTVVTQl9IU0RNQV9DSEFOTkVMUzsgYml0KyspIHsKKwkJaWYgKCEoY29udHJvbGxlci0+dXNlZF9jaGFubmVscyAmICgxIDw8IGJpdCkpKSB7CisJCQljb250cm9sbGVyLT51c2VkX2NoYW5uZWxzIHw9ICgxIDw8IGJpdCk7CisJCQltdXNiX2NoYW5uZWwgPSAmKGNvbnRyb2xsZXItPmNoYW5uZWxbYml0XSk7CisJCQltdXNiX2NoYW5uZWwtPmNvbnRyb2xsZXIgPSBjb250cm9sbGVyOworCQkJbXVzYl9jaGFubmVsLT5pZHggPSBiaXQ7CisJCQltdXNiX2NoYW5uZWwtPmVwbnVtID0gaHdfZXAtPmVwbnVtOworCQkJbXVzYl9jaGFubmVsLT50cmFuc21pdCA9IHRyYW5zbWl0OworCQkJY2hhbm5lbCA9ICYobXVzYl9jaGFubmVsLT5jaGFubmVsKTsKKwkJCWNoYW5uZWwtPnByaXZhdGVfZGF0YSA9IG11c2JfY2hhbm5lbDsKKwkJCWNoYW5uZWwtPnN0YXR1cyA9IE1VU0JfRE1BX1NUQVRVU19GUkVFOworCQkJY2hhbm5lbC0+bWF4X2xlbiA9IDB4MTAwMDA7CiAJCQkvKiBUeCA9PiBtb2RlIDE7IFJ4ID0+IG1vZGUgMCAqLwotCQkJcENoYW5uZWwtPmRlc2lyZWRfbW9kZSA9IHRyYW5zbWl0OwotCQkJcENoYW5uZWwtPmFjdHVhbF9sZW4gPSAwOworCQkJY2hhbm5lbC0+ZGVzaXJlZF9tb2RlID0gdHJhbnNtaXQ7CisJCQljaGFubmVsLT5hY3R1YWxfbGVuID0gMDsKIAkJCWJyZWFrOwogCQl9CiAJfQotCXJldHVybiBwQ2hhbm5lbDsKKworCXJldHVybiBjaGFubmVsOwogfQogCi1zdGF0aWMgdm9pZCBkbWFfY2hhbm5lbF9yZWxlYXNlKHN0cnVjdCBkbWFfY2hhbm5lbCAqcENoYW5uZWwpCitzdGF0aWMgdm9pZCBkbWFfY2hhbm5lbF9yZWxlYXNlKHN0cnVjdCBkbWFfY2hhbm5lbCAqY2hhbm5lbCkKIHsKLQlzdHJ1Y3QgbXVzYl9kbWFfY2hhbm5lbCAqcEltcGxDaGFubmVsID0KLQkJKHN0cnVjdCBtdXNiX2RtYV9jaGFubmVsICopIHBDaGFubmVsLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IG11c2JfZG1hX2NoYW5uZWwgKm11c2JfY2hhbm5lbCA9IGNoYW5uZWwtPnByaXZhdGVfZGF0YTsKIAotCXBDaGFubmVsLT5hY3R1YWxfbGVuID0gMDsKLQlwSW1wbENoYW5uZWwtPmR3U3RhcnRBZGRyZXNzID0gMDsKLQlwSW1wbENoYW5uZWwtPmxlbiA9IDA7CisJY2hhbm5lbC0+YWN0dWFsX2xlbiA9IDA7CisJbXVzYl9jaGFubmVsLT5zdGFydF9hZGRyID0gMDsKKwltdXNiX2NoYW5uZWwtPmxlbiA9IDA7CiAKLQlwSW1wbENoYW5uZWwtPmNvbnRyb2xsZXItPmJtVXNlZENoYW5uZWxzICY9Ci0JCX4oMSA8PCBwSW1wbENoYW5uZWwtPmJJbmRleCk7CisJbXVzYl9jaGFubmVsLT5jb250cm9sbGVyLT51c2VkX2NoYW5uZWxzICY9CisJCX4oMSA8PCBtdXNiX2NoYW5uZWwtPmlkeCk7CiAKLQlwQ2hhbm5lbC0+c3RhdHVzID0gTVVTQl9ETUFfU1RBVFVTX1VOS05PV047CisJY2hhbm5lbC0+c3RhdHVzID0gTVVTQl9ETUFfU1RBVFVTX1VOS05PV047CiB9CiAKLXN0YXRpYyB2b2lkIGNvbmZpZ3VyZV9jaGFubmVsKHN0cnVjdCBkbWFfY2hhbm5lbCAqcENoYW5uZWwsCitzdGF0aWMgdm9pZCBjb25maWd1cmVfY2hhbm5lbChzdHJ1Y3QgZG1hX2NoYW5uZWwgKmNoYW5uZWwsCiAJCQkJdTE2IHBhY2tldF9zeiwgdTggbW9kZSwKIAkJCQlkbWFfYWRkcl90IGRtYV9hZGRyLCB1MzIgbGVuKQogewotCXN0cnVjdCBtdXNiX2RtYV9jaGFubmVsICpwSW1wbENoYW5uZWwgPQotCQkoc3RydWN0IG11c2JfZG1hX2NoYW5uZWwgKikgcENoYW5uZWwtPnByaXZhdGVfZGF0YTsKLQlzdHJ1Y3QgbXVzYl9kbWFfY29udHJvbGxlciAqY29udHJvbGxlciA9IHBJbXBsQ2hhbm5lbC0+Y29udHJvbGxlcjsKLQl2b2lkIF9faW9tZW0gKm1iYXNlID0gY29udHJvbGxlci0+cENvcmVCYXNlOwotCXU4IGJDaGFubmVsID0gcEltcGxDaGFubmVsLT5iSW5kZXg7CisJc3RydWN0IG11c2JfZG1hX2NoYW5uZWwgKm11c2JfY2hhbm5lbCA9IGNoYW5uZWwtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgbXVzYl9kbWFfY29udHJvbGxlciAqY29udHJvbGxlciA9IG11c2JfY2hhbm5lbC0+Y29udHJvbGxlcjsKKwl2b2lkIF9faW9tZW0gKm1iYXNlID0gY29udHJvbGxlci0+YmFzZTsKKwl1OCBiY2hhbm5lbCA9IG11c2JfY2hhbm5lbC0+aWR4OwogCXUxNiBjc3IgPSAwOwogCiAJREJHKDQsICIlcCwgcGt0X3N6ICVkLCBhZGRyIDB4JXgsIGxlbiAlZCwgbW9kZSAlZFxuIiwKLQkJCXBDaGFubmVsLCBwYWNrZXRfc3osIGRtYV9hZGRyLCBsZW4sIG1vZGUpOworCQkJY2hhbm5lbCwgcGFja2V0X3N6LCBkbWFfYWRkciwgbGVuLCBtb2RlKTsKIAogCWlmIChtb2RlKSB7CiAJCWNzciB8PSAxIDw8IE1VU0JfSFNETUFfTU9ERTFfU0hJRlQ7CkBAIC0xOTUsMTgwICsxOTUsMTgzIEBACiAJCX0KIAl9CiAKLQljc3IgfD0gKHBJbXBsQ2hhbm5lbC0+ZXBudW0gPDwgTVVTQl9IU0RNQV9FTkRQT0lOVF9TSElGVCkKKwljc3IgfD0gKG11c2JfY2hhbm5lbC0+ZXBudW0gPDwgTVVTQl9IU0RNQV9FTkRQT0lOVF9TSElGVCkKIAkJfCAoMSA8PCBNVVNCX0hTRE1BX0VOQUJMRV9TSElGVCkKIAkJfCAoMSA8PCBNVVNCX0hTRE1BX0lSUUVOQUJMRV9TSElGVCkKLQkJfCAocEltcGxDaGFubmVsLT50cmFuc21pdAorCQl8IChtdXNiX2NoYW5uZWwtPnRyYW5zbWl0CiAJCQkJPyAoMSA8PCBNVVNCX0hTRE1BX1RSQU5TTUlUX1NISUZUKQogCQkJCTogMCk7CiAKIAkvKiBhZGRyZXNzL2NvdW50ICovCiAJbXVzYl93cml0ZWwobWJhc2UsCi0JCU1VU0JfSFNETUFfQ0hBTk5FTF9PRkZTRVQoYkNoYW5uZWwsIE1VU0JfSFNETUFfQUREUkVTUyksCisJCU1VU0JfSFNETUFfQ0hBTk5FTF9PRkZTRVQoYmNoYW5uZWwsIE1VU0JfSFNETUFfQUREUkVTUyksCiAJCWRtYV9hZGRyKTsKIAltdXNiX3dyaXRlbChtYmFzZSwKLQkJTVVTQl9IU0RNQV9DSEFOTkVMX09GRlNFVChiQ2hhbm5lbCwgTVVTQl9IU0RNQV9DT1VOVCksCisJCU1VU0JfSFNETUFfQ0hBTk5FTF9PRkZTRVQoYmNoYW5uZWwsIE1VU0JfSFNETUFfQ09VTlQpLAogCQlsZW4pOwogCiAJLyogY29udHJvbCAodGhpcyBzaG91bGQgc3RhcnQgdGhpbmdzKSAqLwogCW11c2Jfd3JpdGV3KG1iYXNlLAotCQlNVVNCX0hTRE1BX0NIQU5ORUxfT0ZGU0VUKGJDaGFubmVsLCBNVVNCX0hTRE1BX0NPTlRST0wpLAorCQlNVVNCX0hTRE1BX0NIQU5ORUxfT0ZGU0VUKGJjaGFubmVsLCBNVVNCX0hTRE1BX0NPTlRST0wpLAogCQljc3IpOwogfQogCi1zdGF0aWMgaW50IGRtYV9jaGFubmVsX3Byb2dyYW0oc3RydWN0IGRtYV9jaGFubmVsICpwQ2hhbm5lbCwKK3N0YXRpYyBpbnQgZG1hX2NoYW5uZWxfcHJvZ3JhbShzdHJ1Y3QgZG1hX2NoYW5uZWwgKmNoYW5uZWwsCiAJCQkJdTE2IHBhY2tldF9zeiwgdTggbW9kZSwKIAkJCQlkbWFfYWRkcl90IGRtYV9hZGRyLCB1MzIgbGVuKQogewotCXN0cnVjdCBtdXNiX2RtYV9jaGFubmVsICpwSW1wbENoYW5uZWwgPQotCQkJKHN0cnVjdCBtdXNiX2RtYV9jaGFubmVsICopIHBDaGFubmVsLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IG11c2JfZG1hX2NoYW5uZWwgKm11c2JfY2hhbm5lbCA9IGNoYW5uZWwtPnByaXZhdGVfZGF0YTsKIAogCURCRygyLCAiZXAlZC0lcyBwa3Rfc3ogJWQsIGRtYV9hZGRyIDB4JXggbGVuZ3RoICVkLCBtb2RlICVkXG4iLAotCQlwSW1wbENoYW5uZWwtPmVwbnVtLAotCQlwSW1wbENoYW5uZWwtPnRyYW5zbWl0ID8gIlR4IiA6ICJSeCIsCisJCW11c2JfY2hhbm5lbC0+ZXBudW0sCisJCW11c2JfY2hhbm5lbC0+dHJhbnNtaXQgPyAiVHgiIDogIlJ4IiwKIAkJcGFja2V0X3N6LCBkbWFfYWRkciwgbGVuLCBtb2RlKTsKIAotCUJVR19PTihwQ2hhbm5lbC0+c3RhdHVzID09IE1VU0JfRE1BX1NUQVRVU19VTktOT1dOIHx8Ci0JCXBDaGFubmVsLT5zdGF0dXMgPT0gTVVTQl9ETUFfU1RBVFVTX0JVU1kpOworCUJVR19PTihjaGFubmVsLT5zdGF0dXMgPT0gTVVTQl9ETUFfU1RBVFVTX1VOS05PV04gfHwKKwkJY2hhbm5lbC0+c3RhdHVzID09IE1VU0JfRE1BX1NUQVRVU19CVVNZKTsKIAotCXBDaGFubmVsLT5hY3R1YWxfbGVuID0gMDsKLQlwSW1wbENoYW5uZWwtPmR3U3RhcnRBZGRyZXNzID0gZG1hX2FkZHI7Ci0JcEltcGxDaGFubmVsLT5sZW4gPSBsZW47Ci0JcEltcGxDaGFubmVsLT53TWF4UGFja2V0U2l6ZSA9IHBhY2tldF9zejsKLQlwQ2hhbm5lbC0+c3RhdHVzID0gTVVTQl9ETUFfU1RBVFVTX0JVU1k7CisJY2hhbm5lbC0+YWN0dWFsX2xlbiA9IDA7CisJbXVzYl9jaGFubmVsLT5zdGFydF9hZGRyID0gZG1hX2FkZHI7CisJbXVzYl9jaGFubmVsLT5sZW4gPSBsZW47CisJbXVzYl9jaGFubmVsLT5tYXhfcGFja2V0X3N6ID0gcGFja2V0X3N6OworCWNoYW5uZWwtPnN0YXR1cyA9IE1VU0JfRE1BX1NUQVRVU19CVVNZOwogCiAJaWYgKChtb2RlID09IDEpICYmIChsZW4gPj0gcGFja2V0X3N6KSkKLQkJY29uZmlndXJlX2NoYW5uZWwocENoYW5uZWwsIHBhY2tldF9zeiwgMSwgZG1hX2FkZHIsIGxlbik7CisJCWNvbmZpZ3VyZV9jaGFubmVsKGNoYW5uZWwsIHBhY2tldF9zeiwgMSwgZG1hX2FkZHIsIGxlbik7CiAJZWxzZQotCQljb25maWd1cmVfY2hhbm5lbChwQ2hhbm5lbCwgcGFja2V0X3N6LCAwLCBkbWFfYWRkciwgbGVuKTsKKwkJY29uZmlndXJlX2NoYW5uZWwoY2hhbm5lbCwgcGFja2V0X3N6LCAwLCBkbWFfYWRkciwgbGVuKTsKIAogCXJldHVybiB0cnVlOwogfQogCi1zdGF0aWMgaW50IGRtYV9jaGFubmVsX2Fib3J0KHN0cnVjdCBkbWFfY2hhbm5lbCAqcENoYW5uZWwpCitzdGF0aWMgaW50IGRtYV9jaGFubmVsX2Fib3J0KHN0cnVjdCBkbWFfY2hhbm5lbCAqY2hhbm5lbCkKIHsKLQlzdHJ1Y3QgbXVzYl9kbWFfY2hhbm5lbCAqcEltcGxDaGFubmVsID0KLQkJKHN0cnVjdCBtdXNiX2RtYV9jaGFubmVsICopIHBDaGFubmVsLT5wcml2YXRlX2RhdGE7Ci0JdTggYkNoYW5uZWwgPSBwSW1wbENoYW5uZWwtPmJJbmRleDsKLQl2b2lkIF9faW9tZW0gKm1iYXNlID0gcEltcGxDaGFubmVsLT5jb250cm9sbGVyLT5wQ29yZUJhc2U7CisJc3RydWN0IG11c2JfZG1hX2NoYW5uZWwgKm11c2JfY2hhbm5lbCA9IGNoYW5uZWwtPnByaXZhdGVfZGF0YTsKKwl2b2lkIF9faW9tZW0gKm1iYXNlID0gbXVzYl9jaGFubmVsLT5jb250cm9sbGVyLT5iYXNlOworCisJdTggYmNoYW5uZWwgPSBtdXNiX2NoYW5uZWwtPmlkeDsKIAl1MTYgY3NyOwogCi0JaWYgKHBDaGFubmVsLT5zdGF0dXMgPT0gTVVTQl9ETUFfU1RBVFVTX0JVU1kpIHsKLQkJaWYgKHBJbXBsQ2hhbm5lbC0+dHJhbnNtaXQpIHsKKwlpZiAoY2hhbm5lbC0+c3RhdHVzID09IE1VU0JfRE1BX1NUQVRVU19CVVNZKSB7CisJCWlmIChtdXNiX2NoYW5uZWwtPnRyYW5zbWl0KSB7CiAKIAkJCWNzciA9IG11c2JfcmVhZHcobWJhc2UsCi0JCQkJTVVTQl9FUF9PRkZTRVQocEltcGxDaGFubmVsLT5lcG51bSwKKwkJCQlNVVNCX0VQX09GRlNFVChtdXNiX2NoYW5uZWwtPmVwbnVtLAogCQkJCQkJTVVTQl9UWENTUikpOwogCQkJY3NyICY9IH4oTVVTQl9UWENTUl9BVVRPU0VUIHwKIAkJCQkgTVVTQl9UWENTUl9ETUFFTkFCIHwKIAkJCQkgTVVTQl9UWENTUl9ETUFNT0RFKTsKIAkJCW11c2Jfd3JpdGV3KG1iYXNlLAotCQkJCU1VU0JfRVBfT0ZGU0VUKHBJbXBsQ2hhbm5lbC0+ZXBudW0sCi0JCQkJCQlNVVNCX1RYQ1NSKSwKKwkJCQlNVVNCX0VQX09GRlNFVChtdXNiX2NoYW5uZWwtPmVwbnVtLCBNVVNCX1RYQ1NSKSwKIAkJCQljc3IpOwogCQl9IGVsc2UgewogCQkJY3NyID0gbXVzYl9yZWFkdyhtYmFzZSwKLQkJCQlNVVNCX0VQX09GRlNFVChwSW1wbENoYW5uZWwtPmVwbnVtLAorCQkJCU1VU0JfRVBfT0ZGU0VUKG11c2JfY2hhbm5lbC0+ZXBudW0sCiAJCQkJCQlNVVNCX1JYQ1NSKSk7CiAJCQljc3IgJj0gfihNVVNCX1JYQ1NSX0FVVE9DTEVBUiB8CiAJCQkJIE1VU0JfUlhDU1JfRE1BRU5BQiB8CiAJCQkJIE1VU0JfUlhDU1JfRE1BTU9ERSk7CiAJCQltdXNiX3dyaXRldyhtYmFzZSwKLQkJCQlNVVNCX0VQX09GRlNFVChwSW1wbENoYW5uZWwtPmVwbnVtLAotCQkJCQkJTVVTQl9SWENTUiksCisJCQkJTVVTQl9FUF9PRkZTRVQobXVzYl9jaGFubmVsLT5lcG51bSwgTVVTQl9SWENTUiksCiAJCQkJY3NyKTsKIAkJfQogCiAJCW11c2Jfd3JpdGV3KG1iYXNlLAotCQkJTVVTQl9IU0RNQV9DSEFOTkVMX09GRlNFVChiQ2hhbm5lbCwgTVVTQl9IU0RNQV9DT05UUk9MKSwKKwkJCU1VU0JfSFNETUFfQ0hBTk5FTF9PRkZTRVQoYmNoYW5uZWwsIE1VU0JfSFNETUFfQ09OVFJPTCksCiAJCQkwKTsKIAkJbXVzYl93cml0ZWwobWJhc2UsCi0JCQlNVVNCX0hTRE1BX0NIQU5ORUxfT0ZGU0VUKGJDaGFubmVsLCBNVVNCX0hTRE1BX0FERFJFU1MpLAorCQkJTVVTQl9IU0RNQV9DSEFOTkVMX09GRlNFVChiY2hhbm5lbCwgTVVTQl9IU0RNQV9BRERSRVNTKSwKIAkJCTApOwogCQltdXNiX3dyaXRlbChtYmFzZSwKLQkJCU1VU0JfSFNETUFfQ0hBTk5FTF9PRkZTRVQoYkNoYW5uZWwsIE1VU0JfSFNETUFfQ09VTlQpLAorCQkJTVVTQl9IU0RNQV9DSEFOTkVMX09GRlNFVChiY2hhbm5lbCwgTVVTQl9IU0RNQV9DT1VOVCksCiAJCQkwKTsKIAotCQlwQ2hhbm5lbC0+c3RhdHVzID0gTVVTQl9ETUFfU1RBVFVTX0ZSRUU7CisJCWNoYW5uZWwtPnN0YXR1cyA9IE1VU0JfRE1BX1NUQVRVU19GUkVFOwogCX0KKwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaXJxcmV0dXJuX3QgZG1hX2NvbnRyb2xsZXJfaXJxKGludCBpcnEsIHZvaWQgKnByaXZhdGVfZGF0YSkKIHsKLQlzdHJ1Y3QgbXVzYl9kbWFfY29udHJvbGxlciAqY29udHJvbGxlciA9Ci0JCShzdHJ1Y3QgbXVzYl9kbWFfY29udHJvbGxlciAqKXByaXZhdGVfZGF0YTsKLQlzdHJ1Y3QgbXVzYl9kbWFfY2hhbm5lbCAqcEltcGxDaGFubmVsOwotCXN0cnVjdCBtdXNiICptdXNiID0gY29udHJvbGxlci0+cERtYVByaXZhdGU7Ci0Jdm9pZCBfX2lvbWVtICptYmFzZSA9IGNvbnRyb2xsZXItPnBDb3JlQmFzZTsKLQlzdHJ1Y3QgZG1hX2NoYW5uZWwgKnBDaGFubmVsOwotCXU4IGJDaGFubmVsOwotCXUxNiBjc3I7Ci0JdTMyIGR3QWRkcmVzczsKLQl1OCBpbnRfaHNkbWE7CisJc3RydWN0IG11c2JfZG1hX2NvbnRyb2xsZXIgKmNvbnRyb2xsZXIgPSBwcml2YXRlX2RhdGE7CisJc3RydWN0IG11c2IgKm11c2IgPSBjb250cm9sbGVyLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IG11c2JfZG1hX2NoYW5uZWwgKm11c2JfY2hhbm5lbDsKKwlzdHJ1Y3QgZG1hX2NoYW5uZWwgKmNoYW5uZWw7CisKKwl2b2lkIF9faW9tZW0gKm1iYXNlID0gY29udHJvbGxlci0+YmFzZTsKKwogCWlycXJldHVybl90IHJldHZhbCA9IElSUV9OT05FOworCiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAorCXU4IGJjaGFubmVsOworCXU4IGludF9oc2RtYTsKKworCXUzMiBhZGRyOworCXUxNiBjc3I7CisKIAlzcGluX2xvY2tfaXJxc2F2ZSgmbXVzYi0+bG9jaywgZmxhZ3MpOwogCiAJaW50X2hzZG1hID0gbXVzYl9yZWFkYihtYmFzZSwgTVVTQl9IU0RNQV9JTlRSKTsKIAlpZiAoIWludF9oc2RtYSkKIAkJZ290byBkb25lOwogCi0JZm9yIChiQ2hhbm5lbCA9IDA7IGJDaGFubmVsIDwgTVVTQl9IU0RNQV9DSEFOTkVMUzsgYkNoYW5uZWwrKykgewotCQlpZiAoaW50X2hzZG1hICYgKDEgPDwgYkNoYW5uZWwpKSB7Ci0JCQlwSW1wbENoYW5uZWwgPSAoc3RydWN0IG11c2JfZG1hX2NoYW5uZWwgKikKLQkJCQkJJihjb250cm9sbGVyLT5hQ2hhbm5lbFtiQ2hhbm5lbF0pOwotCQkJcENoYW5uZWwgPSAmcEltcGxDaGFubmVsLT5DaGFubmVsOworCWZvciAoYmNoYW5uZWwgPSAwOyBiY2hhbm5lbCA8IE1VU0JfSFNETUFfQ0hBTk5FTFM7IGJjaGFubmVsKyspIHsKKwkJaWYgKGludF9oc2RtYSAmICgxIDw8IGJjaGFubmVsKSkgeworCQkJbXVzYl9jaGFubmVsID0gKHN0cnVjdCBtdXNiX2RtYV9jaGFubmVsICopCisJCQkJCSYoY29udHJvbGxlci0+Y2hhbm5lbFtiY2hhbm5lbF0pOworCQkJY2hhbm5lbCA9ICZtdXNiX2NoYW5uZWwtPmNoYW5uZWw7CiAKIAkJCWNzciA9IG11c2JfcmVhZHcobWJhc2UsCi0JCQkJCU1VU0JfSFNETUFfQ0hBTk5FTF9PRkZTRVQoYkNoYW5uZWwsCisJCQkJCU1VU0JfSFNETUFfQ0hBTk5FTF9PRkZTRVQoYmNoYW5uZWwsCiAJCQkJCQkJTVVTQl9IU0RNQV9DT05UUk9MKSk7CiAKLQkJCWlmIChjc3IgJiAoMSA8PCBNVVNCX0hTRE1BX0JVU0VSUk9SX1NISUZUKSkKLQkJCQlwSW1wbENoYW5uZWwtPkNoYW5uZWwuc3RhdHVzID0KKwkJCWlmIChjc3IgJiAoMSA8PCBNVVNCX0hTRE1BX0JVU0VSUk9SX1NISUZUKSkgeworCQkJCW11c2JfY2hhbm5lbC0+Y2hhbm5lbC5zdGF0dXMgPQogCQkJCQlNVVNCX0RNQV9TVEFUVVNfQlVTX0FCT1JUOwotCQkJZWxzZSB7CisJCQl9IGVsc2UgewogCQkJCXU4IGRldmN0bDsKIAotCQkJCWR3QWRkcmVzcyA9IG11c2JfcmVhZGwobWJhc2UsCisJCQkJYWRkciA9IG11c2JfcmVhZGwobWJhc2UsCiAJCQkJCQlNVVNCX0hTRE1BX0NIQU5ORUxfT0ZGU0VUKAotCQkJCQkJCWJDaGFubmVsLAorCQkJCQkJCWJjaGFubmVsLAogCQkJCQkJCU1VU0JfSFNETUFfQUREUkVTUykpOwotCQkJCXBDaGFubmVsLT5hY3R1YWxfbGVuID0gZHdBZGRyZXNzCi0JCQkJCS0gcEltcGxDaGFubmVsLT5kd1N0YXJ0QWRkcmVzczsKKwkJCQljaGFubmVsLT5hY3R1YWxfbGVuID0gYWRkcgorCQkJCQktIG11c2JfY2hhbm5lbC0+c3RhcnRfYWRkcjsKIAogCQkJCURCRygyLCAiY2ggJXAsIDB4JXggLT4gMHgleCAoJWQgLyAlZCkgJXNcbiIsCi0JCQkJCXBDaGFubmVsLCBwSW1wbENoYW5uZWwtPmR3U3RhcnRBZGRyZXNzLAotCQkJCQlkd0FkZHJlc3MsIHBDaGFubmVsLT5hY3R1YWxfbGVuLAotCQkJCQlwSW1wbENoYW5uZWwtPmxlbiwKLQkJCQkJKHBDaGFubmVsLT5hY3R1YWxfbGVuCi0JCQkJCQk8IHBJbXBsQ2hhbm5lbC0+bGVuKSA/CisJCQkJCWNoYW5uZWwsIG11c2JfY2hhbm5lbC0+c3RhcnRfYWRkciwKKwkJCQkJYWRkciwgY2hhbm5lbC0+YWN0dWFsX2xlbiwKKwkJCQkJbXVzYl9jaGFubmVsLT5sZW4sCisJCQkJCShjaGFubmVsLT5hY3R1YWxfbGVuCisJCQkJCQk8IG11c2JfY2hhbm5lbC0+bGVuKSA/CiAJCQkJCSI9PiByZWNvbmZpZyAwIiA6ICI9PiBjb21wbGV0ZSIpOwogCiAJCQkJZGV2Y3RsID0gbXVzYl9yZWFkYihtYmFzZSwgTVVTQl9ERVZDVEwpOwogCi0JCQkJcENoYW5uZWwtPnN0YXR1cyA9IE1VU0JfRE1BX1NUQVRVU19GUkVFOworCQkJCWNoYW5uZWwtPnN0YXR1cyA9IE1VU0JfRE1BX1NUQVRVU19GUkVFOwogCiAJCQkJLyogY29tcGxldGVkICovCiAJCQkJaWYgKChkZXZjdGwgJiBNVVNCX0RFVkNUTF9ITSkKLQkJCQkJJiYgKHBJbXBsQ2hhbm5lbC0+dHJhbnNtaXQpCi0JCQkJCSYmICgocENoYW5uZWwtPmRlc2lyZWRfbW9kZSA9PSAwKQotCQkJCQkgICAgfHwgKHBDaGFubmVsLT5hY3R1YWxfbGVuICYKLQkJCQkJICAgIChwSW1wbENoYW5uZWwtPndNYXhQYWNrZXRTaXplIC0gMSkpKQorCQkJCQkmJiAobXVzYl9jaGFubmVsLT50cmFuc21pdCkKKwkJCQkJJiYgKChjaGFubmVsLT5kZXNpcmVkX21vZGUgPT0gMCkKKwkJCQkJICAgIHx8IChjaGFubmVsLT5hY3R1YWxfbGVuICYKKwkJCQkJICAgIChtdXNiX2NoYW5uZWwtPm1heF9wYWNrZXRfc3ogLSAxKSkpCiAJCQkJCSApIHsKIAkJCQkJLyogU2VuZCBvdXQgdGhlIHBhY2tldCAqLwogCQkJCQltdXNiX2VwX3NlbGVjdChtYmFzZSwKLQkJCQkJCXBJbXBsQ2hhbm5lbC0+ZXBudW0pOworCQkJCQkJbXVzYl9jaGFubmVsLT5lcG51bSk7CiAJCQkJCW11c2Jfd3JpdGV3KG1iYXNlLCBNVVNCX0VQX09GRlNFVCgKLQkJCQkJCQlwSW1wbENoYW5uZWwtPmVwbnVtLAorCQkJCQkJCW11c2JfY2hhbm5lbC0+ZXBudW0sCiAJCQkJCQkJTVVTQl9UWENTUiksCiAJCQkJCQlNVVNCX1RYQ1NSX1RYUEtUUkRZKTsKLQkJCQl9IGVsc2UKKwkJCQl9IGVsc2UgewogCQkJCQltdXNiX2RtYV9jb21wbGV0aW9uKAogCQkJCQkJbXVzYiwKLQkJCQkJCXBJbXBsQ2hhbm5lbC0+ZXBudW0sCi0JCQkJCQlwSW1wbENoYW5uZWwtPnRyYW5zbWl0KTsKKwkJCQkJCW11c2JfY2hhbm5lbC0+ZXBudW0sCisJCQkJCQltdXNiX2NoYW5uZWwtPnRyYW5zbWl0KTsKKwkJCQl9CiAJCQl9CiAJCX0KIAl9CkBAIC0zODAsOSArMzgzLDkgQEAKIAogdm9pZCBkbWFfY29udHJvbGxlcl9kZXN0cm95KHN0cnVjdCBkbWFfY29udHJvbGxlciAqYykKIHsKLQlzdHJ1Y3QgbXVzYl9kbWFfY29udHJvbGxlciAqY29udHJvbGxlcjsKKwlzdHJ1Y3QgbXVzYl9kbWFfY29udHJvbGxlciAqY29udHJvbGxlciA9IGNvbnRhaW5lcl9vZihjLAorCQkJc3RydWN0IG11c2JfZG1hX2NvbnRyb2xsZXIsIGNvbnRyb2xsZXIpOwogCi0JY29udHJvbGxlciA9IGNvbnRhaW5lcl9vZihjLCBzdHJ1Y3QgbXVzYl9kbWFfY29udHJvbGxlciwgQ29udHJvbGxlcik7CiAJaWYgKCFjb250cm9sbGVyKQogCQlyZXR1cm47CiAKQEAgLTM5Myw3ICszOTYsNyBAQAogfQogCiBzdHJ1Y3QgZG1hX2NvbnRyb2xsZXIgKl9faW5pdAotZG1hX2NvbnRyb2xsZXJfY3JlYXRlKHN0cnVjdCBtdXNiICptdXNiLCB2b2lkIF9faW9tZW0gKnBDb3JlQmFzZSkKK2RtYV9jb250cm9sbGVyX2NyZWF0ZShzdHJ1Y3QgbXVzYiAqbXVzYiwgdm9pZCBfX2lvbWVtICpiYXNlKQogewogCXN0cnVjdCBtdXNiX2RtYV9jb250cm9sbGVyICpjb250cm9sbGVyOwogCXN0cnVjdCBkZXZpY2UgKmRldiA9IG11c2ItPmNvbnRyb2xsZXI7CkBAIC00MDUsMjkgKzQwOCwzMCBAQAogCQlyZXR1cm4gTlVMTDsKIAl9CiAKLQljb250cm9sbGVyID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IG11c2JfZG1hX2NvbnRyb2xsZXIpLCBHRlBfS0VSTkVMKTsKKwljb250cm9sbGVyID0ga3phbGxvYyhzaXplb2YoKmNvbnRyb2xsZXIpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWNvbnRyb2xsZXIpCiAJCXJldHVybiBOVUxMOwogCi0JY29udHJvbGxlci0+YkNoYW5uZWxDb3VudCA9IE1VU0JfSFNETUFfQ0hBTk5FTFM7Ci0JY29udHJvbGxlci0+cERtYVByaXZhdGUgPSBtdXNiOwotCWNvbnRyb2xsZXItPnBDb3JlQmFzZSA9IHBDb3JlQmFzZTsKKwljb250cm9sbGVyLT5jaGFubmVsX2NvdW50ID0gTVVTQl9IU0RNQV9DSEFOTkVMUzsKKwljb250cm9sbGVyLT5wcml2YXRlX2RhdGEgPSBtdXNiOworCWNvbnRyb2xsZXItPmJhc2UgPSBiYXNlOwogCi0JY29udHJvbGxlci0+Q29udHJvbGxlci5zdGFydCA9IGRtYV9jb250cm9sbGVyX3N0YXJ0OwotCWNvbnRyb2xsZXItPkNvbnRyb2xsZXIuc3RvcCA9IGRtYV9jb250cm9sbGVyX3N0b3A7Ci0JY29udHJvbGxlci0+Q29udHJvbGxlci5jaGFubmVsX2FsbG9jID0gZG1hX2NoYW5uZWxfYWxsb2NhdGU7Ci0JY29udHJvbGxlci0+Q29udHJvbGxlci5jaGFubmVsX3JlbGVhc2UgPSBkbWFfY2hhbm5lbF9yZWxlYXNlOwotCWNvbnRyb2xsZXItPkNvbnRyb2xsZXIuY2hhbm5lbF9wcm9ncmFtID0gZG1hX2NoYW5uZWxfcHJvZ3JhbTsKLQljb250cm9sbGVyLT5Db250cm9sbGVyLmNoYW5uZWxfYWJvcnQgPSBkbWFfY2hhbm5lbF9hYm9ydDsKKwljb250cm9sbGVyLT5jb250cm9sbGVyLnN0YXJ0ID0gZG1hX2NvbnRyb2xsZXJfc3RhcnQ7CisJY29udHJvbGxlci0+Y29udHJvbGxlci5zdG9wID0gZG1hX2NvbnRyb2xsZXJfc3RvcDsKKwljb250cm9sbGVyLT5jb250cm9sbGVyLmNoYW5uZWxfYWxsb2MgPSBkbWFfY2hhbm5lbF9hbGxvY2F0ZTsKKwljb250cm9sbGVyLT5jb250cm9sbGVyLmNoYW5uZWxfcmVsZWFzZSA9IGRtYV9jaGFubmVsX3JlbGVhc2U7CisJY29udHJvbGxlci0+Y29udHJvbGxlci5jaGFubmVsX3Byb2dyYW0gPSBkbWFfY2hhbm5lbF9wcm9ncmFtOworCWNvbnRyb2xsZXItPmNvbnRyb2xsZXIuY2hhbm5lbF9hYm9ydCA9IGRtYV9jaGFubmVsX2Fib3J0OwogCiAJaWYgKHJlcXVlc3RfaXJxKGlycSwgZG1hX2NvbnRyb2xsZXJfaXJxLCBJUlFGX0RJU0FCTEVELAotCQkJbXVzYi0+Y29udHJvbGxlci0+YnVzX2lkLCAmY29udHJvbGxlci0+Q29udHJvbGxlcikpIHsKKwkJCW11c2ItPmNvbnRyb2xsZXItPmJ1c19pZCwgJmNvbnRyb2xsZXItPmNvbnRyb2xsZXIpKSB7CiAJCWRldl9lcnIoZGV2LCAicmVxdWVzdF9pcnEgJWQgZmFpbGVkIVxuIiwgaXJxKTsKLQkJZG1hX2NvbnRyb2xsZXJfZGVzdHJveSgmY29udHJvbGxlci0+Q29udHJvbGxlcik7CisJCWRtYV9jb250cm9sbGVyX2Rlc3Ryb3koJmNvbnRyb2xsZXItPmNvbnRyb2xsZXIpOworCiAJCXJldHVybiBOVUxMOwogCX0KIAogCWNvbnRyb2xsZXItPmlycSA9IGlycTsKIAotCXJldHVybiAmY29udHJvbGxlci0+Q29udHJvbGxlcjsKKwlyZXR1cm4gJmNvbnRyb2xsZXItPmNvbnRyb2xsZXI7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvYWlyY2FibGUuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9haXJjYWJsZS5jCmluZGV4IDc5ZWE5OGMuLjUzN2Y5NTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9haXJjYWJsZS5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9haXJjYWJsZS5jCkBAIC0yMjAsOCArMjIwLDggQEAKIAogCWJ1ZiA9IGt6YWxsb2MoY291bnQgKyBIQ0lfSEVBREVSX0xFTkdUSCwgR0ZQX0FUT01JQyk7CiAJaWYgKCFidWYpIHsKLQkJZXJyKCIlcy0ga3phbGxvYyglZCkgZmFpbGVkLiIsIF9fZnVuY19fLAotCQkgICAgY291bnQgKyBIQ0lfSEVBREVSX0xFTkdUSCk7CisJCWRldl9lcnIoJnBvcnQtPmRldiwgIiVzLSBremFsbG9jKCVkKSBmYWlsZWQuXG4iLAorCQkJX19mdW5jX18sIGNvdW50ICsgSENJX0hFQURFUl9MRU5HVEgpOwogCQlyZXR1cm47CiAJfQogCkBAIC0yNzIsMjMgKzI3MiwyNCBAQAogCSAqIDY0IGJ5dGVzLCB0byBlbnN1cmUgSSBkbyBub3QgZ2V0IHRocm90dGxlZC4KIAkgKiBBc2sgVVNCIG1haWxpbmcgbGlzdCBmb3IgYmV0dGVyIGFwcm9hY2guCiAJICovCi0JdHR5ID0gcG9ydC0+cG9ydC50dHk7CisJdHR5ID0gdHR5X3BvcnRfdHR5X2dldCgmcG9ydC0+cG9ydCk7CiAKIAlpZiAoIXR0eSkgewogCQlzY2hlZHVsZV93b3JrKCZwcml2LT5yeF93b3JrKTsKLQkJZXJyKCIlcyAtIE5vIHR0eSBhdmFpbGFibGUiLCBfX2Z1bmNfXyk7CisJCWRldl9lcnIoJnBvcnQtPmRldiwgIiVzIC0gTm8gdHR5IGF2YWlsYWJsZVxuIiwgX19mdW5jX18pOwogCQlyZXR1cm4gOwogCX0KIAogCWNvdW50ID0gbWluKDY0LCBzZXJpYWxfYnVmX2RhdGFfYXZhaWwocHJpdi0+cnhfYnVmKSk7CiAKIAlpZiAoY291bnQgPD0gMCkKLQkJcmV0dXJuOyAvKiBXZSBoYXZlIGZpbmlzaGVkIHNlbmRpbmcgZXZlcnl0aGluZy4gKi8KKwkJZ290byBvdXQ7IC8qIFdlIGhhdmUgZmluaXNoZWQgc2VuZGluZyBldmVyeXRoaW5nLiAqLwogCiAJdHR5X3ByZXBhcmVfZmxpcF9zdHJpbmcodHR5LCAmZGF0YSwgY291bnQpOwogCWlmICghZGF0YSkgewotCQllcnIoIiVzLSBremFsbG9jKCVkKSBmYWlsZWQuIiwgX19mdW5jX18sIGNvdW50KTsKLQkJcmV0dXJuOworCQlkZXZfZXJyKCZwb3J0LT5kZXYsICIlcy0ga3phbGxvYyglZCkgZmFpbGVkLiIsCisJCQkJCQkJX19mdW5jX18sIGNvdW50KTsKKwkJZ290byBvdXQ7CiAJfQogCiAJc2VyaWFsX2J1Zl9nZXQocHJpdi0+cnhfYnVmLCBkYXRhLCBjb3VudCk7CkBAIC0yOTcsNyArMjk4LDggQEAKIAogCWlmIChzZXJpYWxfYnVmX2RhdGFfYXZhaWwocHJpdi0+cnhfYnVmKSkKIAkJc2NoZWR1bGVfd29yaygmcHJpdi0+cnhfd29yayk7Ci0KK291dDoJCQorCXR0eV9rcmVmX3B1dCh0dHkpOwogCXJldHVybjsKIH0KIC8qIEVuZCBvZiBwcml2YXRlIG1ldGhvZHMgKi8KQEAgLTMzNCw3ICszMzYsNyBAQAogCiAJcHJpdiA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBhaXJjYWJsZV9wcml2YXRlKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFwcml2KSB7Ci0JCWVycigiJXMtIGttYWxsb2MoJVpkKSBmYWlsZWQuIiwgX19mdW5jX18sCisJCWRldl9lcnIoJnBvcnQtPmRldiwgIiVzLSBrbWFsbG9jKCVaZCkgZmFpbGVkLlxuIiwgX19mdW5jX18sCiAJCQlzaXplb2Yoc3RydWN0IGFpcmNhYmxlX3ByaXZhdGUpKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQpAQCAtNDk1LDcgKzQ5Nyw3IEBACiAJdXNiX3NlcmlhbF9kZWJ1Z19kYXRhKGRlYnVnLCAmcG9ydC0+ZGV2LCBfX2Z1bmNfXywKIAkJCQl1cmItPmFjdHVhbF9sZW5ndGgsIHVyYi0+dHJhbnNmZXJfYnVmZmVyKTsKIAotCXR0eSA9IHBvcnQtPnBvcnQudHR5OworCXR0eSA9IHR0eV9wb3J0X3R0eV9nZXQoJnBvcnQtPnBvcnQpOwogCWlmICh0dHkgJiYgdXJiLT5hY3R1YWxfbGVuZ3RoKSB7CiAJCWlmICh1cmItPmFjdHVhbF9sZW5ndGggPD0gMikgewogCQkJLyogVGhpcyBpcyBhbiBpbmNvbXBsZXRlIHBhY2thZ2UgKi8KQEAgLTUyNyw2ICs1MjksNyBAQAogCQl9CiAJCWFpcmNhYmxlX3JlYWQoJnByaXYtPnJ4X3dvcmspOwogCX0KKwl0dHlfa3JlZl9wdXQodHR5KTsKIAogCS8qIFNjaGVkdWxlIHRoZSBuZXh0IHJlYWQgX2lmXyB3ZSBhcmUgc3RpbGwgb3BlbiAqLwogCWlmIChwb3J0LT5wb3J0LmNvdW50KSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvYmVsa2luX3NhLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvYmVsa2luX3NhLmMKaW5kZXggMmViZTA2Yy4uYjdlYWNhZCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL2JlbGtpbl9zYS5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9iZWxraW5fc2EuYwpAQCAtMTg3LDcgKzE4Nyw3IEBACiAJLyogc2VlIGNvbW1lbnRzIGF0IHRvcCBvZiBmaWxlICovCiAJcHJpdi0+YmFkX2Zsb3dfY29udHJvbCA9CiAJCShsZTE2X3RvX2NwdShkZXYtPmRlc2NyaXB0b3IuYmNkRGV2aWNlKSA8PSAweDAyMDYpID8gMSA6IDA7Ci0JaW5mbygiYmNkRGV2aWNlOiAlMDR4LCBiZmM6ICVkIiwKKwlkZXZfaW5mbygmZGV2LT5kZXYsICJiY2REZXZpY2U6ICUwNHgsIGJmYzogJWRcbiIsCiAJCQkJCWxlMTZfdG9fY3B1KGRldi0+ZGVzY3JpcHRvci5iY2REZXZpY2UpLAogCQkJCQlwcml2LT5iYWRfZmxvd19jb250cm9sKTsKIApAQCAtMjI4LDcgKzIyOCw3IEBACiAJcG9ydC0+cmVhZF91cmItPmRldiA9IHBvcnQtPnNlcmlhbC0+ZGV2OwogCXJldHZhbCA9IHVzYl9zdWJtaXRfdXJiKHBvcnQtPnJlYWRfdXJiLCBHRlBfS0VSTkVMKTsKIAlpZiAocmV0dmFsKSB7Ci0JCWVycigidXNiX3N1Ym1pdF91cmIocmVhZCBidWxrKSBmYWlsZWQiKTsKKwkJZGV2X2VycigmcG9ydC0+ZGV2LCAidXNiX3N1Ym1pdF91cmIocmVhZCBidWxrKSBmYWlsZWRcbiIpOwogCQlnb3RvIGV4aXQ7CiAJfQogCkBAIC0yMzYsNyArMjM2LDcgQEAKIAlyZXR2YWwgPSB1c2Jfc3VibWl0X3VyYihwb3J0LT5pbnRlcnJ1cHRfaW5fdXJiLCBHRlBfS0VSTkVMKTsKIAlpZiAocmV0dmFsKSB7CiAJCXVzYl9raWxsX3VyYihwb3J0LT5yZWFkX3VyYik7Ci0JCWVycigiIHVzYl9zdWJtaXRfdXJiKHJlYWQgaW50KSBmYWlsZWQiKTsKKwkJZGV2X2VycigmcG9ydC0+ZGV2LCAidXNiX3N1Ym1pdF91cmIocmVhZCBpbnQpIGZhaWxlZFxuIik7CiAJfQogCiBleGl0OgpAQCAtMzIyLDcgKzMyMiw3IEBACiAJICogdG8gbG9vayBpbiB0byB0aGlzIGJlZm9yZSBjb21taXR0aW5nIGFueSBjb2RlLgogCSAqLwogCWlmIChwcml2LT5sYXN0X2xzciAmIEJFTEtJTl9TQV9MU1JfRVJSKSB7Ci0JCXR0eSA9IHBvcnQtPnBvcnQudHR5OworCQl0dHkgPSB0dHlfcG9ydF90dHlfZ2V0KCZwb3J0LT5wb3J0KTsKIAkJLyogT3ZlcnJ1biBFcnJvciAqLwogCQlpZiAocHJpdi0+bGFzdF9sc3IgJiBCRUxLSU5fU0FfTFNSX09FKSB7CiAJCX0KQEAgLTMzNSwxNCArMzM1LDE1IEBACiAJCS8qIEJyZWFrIEluZGljYXRvciAqLwogCQlpZiAocHJpdi0+bGFzdF9sc3IgJiBCRUxLSU5fU0FfTFNSX0JJKSB7CiAJCX0KKwkJdHR5X2tyZWZfcHV0KHR0eSk7CiAJfQogI2VuZGlmCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwogZXhpdDoKIAlyZXR2YWwgPSB1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9BVE9NSUMpOwogCWlmIChyZXR2YWwpCi0JCWVycigiJXMgLSB1c2Jfc3VibWl0X3VyYiBmYWlsZWQgd2l0aCByZXN1bHQgJWQiLAotCQkgICAgIF9fZnVuY19fLCByZXR2YWwpOworCQlkZXZfZXJyKCZwb3J0LT5kZXYsICIlcyAtIHVzYl9zdWJtaXRfdXJiIGZhaWxlZCB3aXRoICIKKwkJCSJyZXN1bHQgJWRcbiIsIF9fZnVuY19fLCByZXR2YWwpOwogfQogCiBzdGF0aWMgdm9pZCBiZWxraW5fc2Ffc2V0X3Rlcm1pb3Moc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwKQEAgLTM4MSwxMiArMzgyLDEyIEBACiAJCWlmICgob2xkX2NmbGFnICYgQ0JBVUQpID09IEIwKSB7CiAJCQljb250cm9sX3N0YXRlIHw9IChUSU9DTV9EVFJ8VElPQ01fUlRTKTsKIAkJCWlmIChCU0FfVVNCX0NNRChCRUxLSU5fU0FfU0VUX0RUUl9SRVFVRVNULCAxKSA8IDApCi0JCQkJZXJyKCJTZXQgRFRSIGVycm9yIik7CisJCQkJZGV2X2VycigmcG9ydC0+ZGV2LCAiU2V0IERUUiBlcnJvclxuIik7CiAJCQkvKiBkb24ndCBzZXQgUlRTIGlmIHVzaW5nIGhhcmR3YXJlIGZsb3cgY29udHJvbCAqLwogCQkJaWYgKCEob2xkX2NmbGFnICYgQ1JUU0NUUykpCiAJCQkJaWYgKEJTQV9VU0JfQ01EKEJFTEtJTl9TQV9TRVRfUlRTX1JFUVVFU1QKIAkJCQkJCQkJLCAxKSA8IDApCi0JCQkJCWVycigiU2V0IFJUUyBlcnJvciIpOworCQkJCQlkZXZfZXJyKCZwb3J0LT5kZXYsICJTZXQgUlRTIGVycm9yXG4iKTsKIAkJfQogCX0KIApAQCAtNDAyLDE4ICs0MDMsMTggQEAKIAkJLyogUmVwb3J0IHRoZSBhY3R1YWwgYmF1ZCByYXRlIGJhY2sgdG8gdGhlIGNhbGxlciAqLwogCQl0dHlfZW5jb2RlX2JhdWRfcmF0ZSh0dHksIGJhdWQsIGJhdWQpOwogCQlpZiAoQlNBX1VTQl9DTUQoQkVMS0lOX1NBX1NFVF9CQVVEUkFURV9SRVFVRVNULCB1cmJfdmFsdWUpIDwgMCkKLQkJCWVycigiU2V0IGJhdWRyYXRlIGVycm9yIik7CisJCQlkZXZfZXJyKCZwb3J0LT5kZXYsICJTZXQgYmF1ZHJhdGUgZXJyb3JcbiIpOwogCX0gZWxzZSB7CiAJCS8qIERpc2FibGUgZmxvdyBjb250cm9sICovCiAJCWlmIChCU0FfVVNCX0NNRChCRUxLSU5fU0FfU0VUX0ZMT1dfQ1RSTF9SRVFVRVNULAogCQkJCQkJQkVMS0lOX1NBX0ZMT1dfTk9ORSkgPCAwKQotCQkJZXJyKCJEaXNhYmxlIGZsb3djb250cm9sIGVycm9yIik7CisJCQlkZXZfZXJyKCZwb3J0LT5kZXYsICJEaXNhYmxlIGZsb3djb250cm9sIGVycm9yXG4iKTsKIAkJLyogRHJvcCBSVFMgYW5kIERUUiAqLwogCQljb250cm9sX3N0YXRlICY9IH4oVElPQ01fRFRSIHwgVElPQ01fUlRTKTsKIAkJaWYgKEJTQV9VU0JfQ01EKEJFTEtJTl9TQV9TRVRfRFRSX1JFUVVFU1QsIDApIDwgMCkKLQkJCWVycigiRFRSIExPVyBlcnJvciIpOworCQkJZGV2X2VycigmcG9ydC0+ZGV2LCAiRFRSIExPVyBlcnJvclxuIik7CiAJCWlmIChCU0FfVVNCX0NNRChCRUxLSU5fU0FfU0VUX1JUU19SRVFVRVNULCAwKSA8IDApCi0JCQllcnIoIlJUUyBMT1cgZXJyb3IiKTsKKwkJCWRldl9lcnIoJnBvcnQtPmRldiwgIlJUUyBMT1cgZXJyb3JcbiIpOwogCX0KIAogCS8qIHNldCB0aGUgcGFyaXR5ICovCkBAIC00MjQsNyArNDI1LDcgQEAKIAkJZWxzZQogCQkJdXJiX3ZhbHVlID0gQkVMS0lOX1NBX1BBUklUWV9OT05FOwogCQlpZiAoQlNBX1VTQl9DTUQoQkVMS0lOX1NBX1NFVF9QQVJJVFlfUkVRVUVTVCwgdXJiX3ZhbHVlKSA8IDApCi0JCQllcnIoIlNldCBwYXJpdHkgZXJyb3IiKTsKKwkJCWRldl9lcnIoJnBvcnQtPmRldiwgIlNldCBwYXJpdHkgZXJyb3JcbiIpOwogCX0KIAogCS8qIHNldCB0aGUgbnVtYmVyIG9mIGRhdGEgYml0cyAqLwpAQCAtNDQ3LDcgKzQ0OCw3IEBACiAJCQlicmVhazsKIAkJfQogCQlpZiAoQlNBX1VTQl9DTUQoQkVMS0lOX1NBX1NFVF9EQVRBX0JJVFNfUkVRVUVTVCwgdXJiX3ZhbHVlKSA8IDApCi0JCQllcnIoIlNldCBkYXRhIGJpdHMgZXJyb3IiKTsKKwkJCWRldl9lcnIoJnBvcnQtPmRldiwgIlNldCBkYXRhIGJpdHMgZXJyb3JcbiIpOwogCX0KIAogCS8qIHNldCB0aGUgbnVtYmVyIG9mIHN0b3AgYml0cyAqLwpAQCAtNDU2LDcgKzQ1Nyw3IEBACiAJCQkJCQk6IEJFTEtJTl9TQV9TVE9QX0JJVFMoMSk7CiAJCWlmIChCU0FfVVNCX0NNRChCRUxLSU5fU0FfU0VUX1NUT1BfQklUU19SRVFVRVNULAogCQkJCQkJCXVyYl92YWx1ZSkgPCAwKQotCQkJZXJyKCJTZXQgc3RvcCBiaXRzIGVycm9yIik7CisJCQlkZXZfZXJyKCZwb3J0LT5kZXYsICJTZXQgc3RvcCBiaXRzIGVycm9yXG4iKTsKIAl9CiAKIAkvKiBTZXQgZmxvdyBjb250cm9sICovCkBAIC00NzcsNyArNDc4LDcgQEAKIAkJCXVyYl92YWx1ZSAmPSB+KEJFTEtJTl9TQV9GTE9XX0lSVFMpOwogCiAJCWlmIChCU0FfVVNCX0NNRChCRUxLSU5fU0FfU0VUX0ZMT1dfQ1RSTF9SRVFVRVNULCB1cmJfdmFsdWUpIDwgMCkKLQkJCWVycigiU2V0IGZsb3cgY29udHJvbCBlcnJvciIpOworCQkJZGV2X2VycigmcG9ydC0+ZGV2LCAiU2V0IGZsb3cgY29udHJvbCBlcnJvclxuIik7CiAJfQogCiAJLyogc2F2ZSBvZmYgdGhlIG1vZGlmaWVkIHBvcnQgc2V0dGluZ3MgKi8KQEAgLTQ5Myw3ICs0OTQsNyBAQAogCXN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwgPSBwb3J0LT5zZXJpYWw7CiAKIAlpZiAoQlNBX1VTQl9DTUQoQkVMS0lOX1NBX1NFVF9CUkVBS19SRVFVRVNULCBicmVha19zdGF0ZSA/IDEgOiAwKSA8IDApCi0JCWVycigiU2V0IGJyZWFrX2N0bCAlZCIsIGJyZWFrX3N0YXRlKTsKKwkJZGV2X2VycigmcG9ydC0+ZGV2LCAiU2V0IGJyZWFrX2N0bCAlZFxuIiwgYnJlYWtfc3RhdGUpOwogfQogCiAKQEAgLTU1MywxMyArNTU0LDEzIEBACiAKIAlyZXR2YWwgPSBCU0FfVVNCX0NNRChCRUxLSU5fU0FfU0VUX1JUU19SRVFVRVNULCBydHMpOwogCWlmIChyZXR2YWwgPCAwKSB7Ci0JCWVycigiU2V0IFJUUyBlcnJvciAlZCIsIHJldHZhbCk7CisJCWRldl9lcnIoJnBvcnQtPmRldiwgIlNldCBSVFMgZXJyb3IgJWRcbiIsIHJldHZhbCk7CiAJCWdvdG8gZXhpdDsKIAl9CiAKIAlyZXR2YWwgPSBCU0FfVVNCX0NNRChCRUxLSU5fU0FfU0VUX0RUUl9SRVFVRVNULCBkdHIpOwogCWlmIChyZXR2YWwgPCAwKSB7Ci0JCWVycigiU2V0IERUUiBlcnJvciAlZCIsIHJldHZhbCk7CisJCWRldl9lcnIoJnBvcnQtPmRldiwgIlNldCBEVFIgZXJyb3IgJWRcbiIsIHJldHZhbCk7CiAJCWdvdG8gZXhpdDsKIAl9CiBleGl0OgpAQCAtNTc2LDcgKzU3Nyw4IEBACiAJcmV0dmFsID0gdXNiX3JlZ2lzdGVyKCZiZWxraW5fZHJpdmVyKTsKIAlpZiAocmV0dmFsKQogCQlnb3RvIGZhaWxlZF91c2JfcmVnaXN0ZXI7Ci0JaW5mbyhEUklWRVJfREVTQyAiICIgRFJJVkVSX1ZFUlNJT04pOworCXByaW50ayhLRVJOX0lORk8gS0JVSUxEX01PRE5BTUUgIjogIiBEUklWRVJfVkVSU0lPTiAiOiIKKwkgICAgICAgRFJJVkVSX0RFU0MgIlxuIik7CiAJcmV0dXJuIDA7CiBmYWlsZWRfdXNiX3JlZ2lzdGVyOgogCXVzYl9zZXJpYWxfZGVyZWdpc3RlcigmYmVsa2luX2RldmljZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvY29uc29sZS5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL2NvbnNvbGUuYwppbmRleCBlOTgwNzY2Li41YjIwZGUxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvY29uc29sZS5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9jb25zb2xlLmMKQEAgLTExNyw3ICsxMTcsNyBAQAogCX0KIAogCXBvcnQgPSBzZXJpYWwtPnBvcnRbMF07Ci0JcG9ydC0+cG9ydC50dHkgPSBOVUxMOworCXR0eV9wb3J0X3R0eV9zZXQoJnBvcnQtPnBvcnQsIE5VTEwpOwogCiAJaW5mby0+cG9ydCA9IHBvcnQ7CiAKQEAgLTE0Myw3ICsxNDMsNyBAQAogCQkJfQogCQkJbWVtc2V0KCZkdW1teSwgMCwgc2l6ZW9mKHN0cnVjdCBrdGVybWlvcykpOwogCQkJdHR5LT50ZXJtaW9zID0gdGVybWlvczsKLQkJCXBvcnQtPnBvcnQudHR5ID0gdHR5OworCQkJdHR5X3BvcnRfdHR5X3NldCgmcG9ydC0+cG9ydCwgdHR5KTsKIAkJfQogCiAJCS8qIG9ubHkgY2FsbCB0aGUgZGV2aWNlIHNwZWNpZmljIG9wZW4gaWYgdGhpcwpAQCAtMTYzLDcgKzE2Myw3IEBACiAJCQl0dHlfdGVybWlvc19lbmNvZGVfYmF1ZF9yYXRlKHRlcm1pb3MsIGJhdWQsIGJhdWQpOwogCQkJc2VyaWFsLT50eXBlLT5zZXRfdGVybWlvcyh0dHksIHBvcnQsICZkdW1teSk7CiAKLQkJCXBvcnQtPnBvcnQudHR5ID0gTlVMTDsKKwkJCXR0eV9wb3J0X3R0eV9zZXQoJnBvcnQtPnBvcnQsIE5VTEwpOwogCQkJa2ZyZWUodGVybWlvcyk7CiAJCQlrZnJlZSh0dHkpOwogCQl9CkBAIC0xNzYsNyArMTc2LDcgQEAKIAlyZXR1cm4gcmV0dmFsOwogZnJlZV90ZXJtaW9zOgogCWtmcmVlKHRlcm1pb3MpOwotCXBvcnQtPnBvcnQudHR5ID0gTlVMTDsKKwl0dHlfcG9ydF90dHlfc2V0KCZwb3J0LT5wb3J0LCBOVUxMKTsKIGZyZWVfdHR5OgogCWtmcmVlKHR0eSk7CiByZXNldF9vcGVuX2NvdW50OgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2NwMjEwMS5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL2NwMjEwMS5jCmluZGV4IDEyNzk1NTMuLjgwMDhkMGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9jcDIxMDEuYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvY3AyMTAxLmMKQEAgLTc1Myw3ICs3NTMsOCBAQAogCX0KIAogCS8qIFN1Y2Nlc3MgKi8KLQlpbmZvKERSSVZFUl9ERVNDICIgIiBEUklWRVJfVkVSU0lPTik7CisJcHJpbnRrKEtFUk5fSU5GTyBLQlVJTERfTU9ETkFNRSAiOiAiIERSSVZFUl9WRVJTSU9OICI6IgorCSAgICAgICBEUklWRVJfREVTQyAiXG4iKTsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2N5YmVyamFjay5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL2N5YmVyamFjay5jCmluZGV4IGI0ZDcyMzUuLjg1OGJkZDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9jeWJlcmphY2suYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvY3liZXJqYWNrLmMKQEAgLTE0MSw3ICsxNDEsOCBAQAogCQlyZXN1bHQgPSB1c2Jfc3VibWl0X3VyYihzZXJpYWwtPnBvcnRbaV0tPmludGVycnVwdF9pbl91cmIsCiAJCQkJCUdGUF9LRVJORUwpOwogCQlpZiAocmVzdWx0KQotCQkJZXJyKCIgdXNiX3N1Ym1pdF91cmIocmVhZCBpbnQpIGZhaWxlZCIpOworCQkJZGV2X2Vycigmc2VyaWFsLT5kZXYtPmRldiwKKwkJCQkidXNiX3N1Ym1pdF91cmIocmVhZCBpbnQpIGZhaWxlZFxuIik7CiAJCWRiZygiJXMgLSB1c2Jfc3VibWl0X3VyYihpbnQgdXJiKSIsIF9fZnVuY19fKTsKIAl9CiAKQEAgLTI3NCw4ICsyNzUsOSBAQAogCQkvKiBzZW5kIHRoZSBkYXRhIG91dCB0aGUgYnVsayBwb3J0ICovCiAJCXJlc3VsdCA9IHVzYl9zdWJtaXRfdXJiKHBvcnQtPndyaXRlX3VyYiwgR0ZQX0FUT01JQyk7CiAJCWlmIChyZXN1bHQpIHsKLQkJCWVycigiJXMgLSBmYWlsZWQgc3VibWl0dGluZyB3cml0ZSB1cmIsIGVycm9yICVkIiwKLQkJCQkJCQlfX2Z1bmNfXywgcmVzdWx0KTsKKwkJCWRldl9lcnIoJnBvcnQtPmRldiwKKwkJCQkiJXMgLSBmYWlsZWQgc3VibWl0dGluZyB3cml0ZSB1cmIsIGVycm9yICVkIiwKKwkJCQlfX2Z1bmNfXywgcmVzdWx0KTsKIAkJCS8qIFRocm93IGF3YXkgZGF0YS4gTm8gYmV0dGVyIGlkZWEgd2hhdCB0byBkbyB3aXRoIGl0LiAqLwogCQkJcHJpdi0+d3JmaWxsZWQgPSAwOwogCQkJcHJpdi0+d3JzZW50ID0gMDsKQEAgLTM1MSw3ICszNTMsOSBAQAogCQkJcG9ydC0+cmVhZF91cmItPmRldiA9IHBvcnQtPnNlcmlhbC0+ZGV2OwogCQkJcmVzdWx0ID0gdXNiX3N1Ym1pdF91cmIocG9ydC0+cmVhZF91cmIsIEdGUF9BVE9NSUMpOwogCQkJaWYgKHJlc3VsdCkKLQkJCQllcnIoIiVzIC0gZmFpbGVkIHJlc3VibWl0dGluZyByZWFkIHVyYiwgZXJyb3IgJWQiLCBfX2Z1bmNfXywgcmVzdWx0KTsKKwkJCQlkZXZfZXJyKCZwb3J0LT5kZXYsICIlcyAtIGZhaWxlZCByZXN1Ym1pdHRpbmcgIgorCQkJCQkicmVhZCB1cmIsIGVycm9yICVkXG4iLAorCQkJCQlfX2Z1bmNfXywgcmVzdWx0KTsKIAkJCWRiZygiJXMgLSB1c2Jfc3VibWl0X3VyYihyZWFkIHVyYikiLCBfX2Z1bmNfXyk7CiAJCX0KIAl9CkBAIC0zNjAsNyArMzY0LDcgQEAKIAlwb3J0LT5pbnRlcnJ1cHRfaW5fdXJiLT5kZXYgPSBwb3J0LT5zZXJpYWwtPmRldjsKIAlyZXN1bHQgPSB1c2Jfc3VibWl0X3VyYihwb3J0LT5pbnRlcnJ1cHRfaW5fdXJiLCBHRlBfQVRPTUlDKTsKIAlpZiAocmVzdWx0KQotCQllcnIoIiB1c2Jfc3VibWl0X3VyYihyZWFkIGludCkgZmFpbGVkIik7CisJCWRldl9lcnIoJnBvcnQtPmRldiwgInVzYl9zdWJtaXRfdXJiKHJlYWQgaW50KSBmYWlsZWRcbiIpOwogCWRiZygiJXMgLSB1c2Jfc3VibWl0X3VyYihpbnQgdXJiKSIsIF9fZnVuY19fKTsKIH0KIApAQCAtMzg0LDcgKzM4OCw3IEBACiAJCXJldHVybjsKIAl9CiAKLQl0dHkgPSBwb3J0LT5wb3J0LnR0eTsKKwl0dHkgPSB0dHlfcG9ydF90dHlfZ2V0KCZwb3J0LT5wb3J0KTsKIAlpZiAoIXR0eSkgewogCQlkYmcoIiVzIC0gaWdub3Jpbmcgc2luY2UgZGV2aWNlIG5vdCBvcGVuXG4iLCBfX2Z1bmNfXyk7CiAJCXJldHVybjsKQEAgLTM5NCw2ICszOTgsNyBAQAogCQl0dHlfaW5zZXJ0X2ZsaXBfc3RyaW5nKHR0eSwgZGF0YSwgdXJiLT5hY3R1YWxfbGVuZ3RoKTsKIAkJdHR5X2ZsaXBfYnVmZmVyX3B1c2godHR5KTsKIAl9CisJdHR5X2tyZWZfcHV0KHR0eSk7CiAKIAlzcGluX2xvY2soJnByaXYtPmxvY2spOwogCkBAIC00MTMsOCArNDE4LDggQEAKIAkJcG9ydC0+cmVhZF91cmItPmRldiA9IHBvcnQtPnNlcmlhbC0+ZGV2OwogCQlyZXN1bHQgPSB1c2Jfc3VibWl0X3VyYihwb3J0LT5yZWFkX3VyYiwgR0ZQX0FUT01JQyk7CiAJCWlmIChyZXN1bHQpCi0JCQllcnIoIiVzIC0gZmFpbGVkIHJlc3VibWl0dGluZyByZWFkIHVyYiwgZXJyb3IgJWQiLAotCQkJCV9fZnVuY19fLCByZXN1bHQpOworCQkJZGV2X2VycigmcG9ydC0+ZGV2LCAiJXMgLSBmYWlsZWQgcmVzdWJtaXR0aW5nIHJlYWQgIgorCQkJCSJ1cmIsIGVycm9yICVkXG4iLCBfX2Z1bmNfXywgcmVzdWx0KTsKIAkJZGJnKCIlcyAtIHVzYl9zdWJtaXRfdXJiKHJlYWQgdXJiKSIsIF9fZnVuY19fKTsKIAl9CiB9CkBAIC00NjEsOCArNDY2LDkgQEAKIAkJLyogc2VuZCB0aGUgZGF0YSBvdXQgdGhlIGJ1bGsgcG9ydCAqLwogCQlyZXN1bHQgPSB1c2Jfc3VibWl0X3VyYihwb3J0LT53cml0ZV91cmIsIEdGUF9BVE9NSUMpOwogCQlpZiAocmVzdWx0KSB7Ci0JCQllcnIoIiVzIC0gZmFpbGVkIHN1Ym1pdHRpbmcgd3JpdGUgdXJiLCBlcnJvciAlZCIsCi0JCQkJCQkJCV9fZnVuY19fLCByZXN1bHQpOworCQkJZGV2X2VycigmcG9ydC0+ZGV2LAorCQkJCSIlcyAtIGZhaWxlZCBzdWJtaXR0aW5nIHdyaXRlIHVyYiwgZXJyb3IgJWRcbiIsCisJCQkJX19mdW5jX18sIHJlc3VsdCk7CiAJCQkvKiBUaHJvdyBhd2F5IGRhdGEuIE5vIGJldHRlciBpZGVhIHdoYXQgdG8gZG8gd2l0aCBpdC4gKi8KIAkJCXByaXYtPndyZmlsbGVkID0gMDsKIAkJCXByaXYtPndyc2VudCA9IDA7CkBAIC00OTgsOCArNTA0LDkgQEAKIAlpZiAocmV0dmFsKQogCQlnb3RvIGZhaWxlZF91c2JfcmVnaXN0ZXI7CiAKLQlpbmZvKERSSVZFUl9WRVJTSU9OICIgIiBEUklWRVJfQVVUSE9SKTsKLQlpbmZvKERSSVZFUl9ERVNDKTsKKwlwcmludGsoS0VSTl9JTkZPIEtCVUlMRF9NT0ROQU1FICI6ICIgRFJJVkVSX1ZFUlNJT04gIiAiCisJICAgICAgIERSSVZFUl9BVVRIT1IgIlxuIik7CisJcHJpbnRrKEtFUk5fSU5GTyBLQlVJTERfTU9ETkFNRSAiOiAiIERSSVZFUl9ERVNDICJcbiIpOwogCiAJcmV0dXJuIDA7CiBmYWlsZWRfdXNiX3JlZ2lzdGVyOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2N5cHJlc3NfbTguYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9jeXByZXNzX204LmMKaW5kZXggMjI4MzdhMy4uZWFlNDc0MCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL2N5cHJlc3NfbTguYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvY3lwcmVzc19tOC5jCkBAIC00MDQsOCArNDA0LDggQEAKIAkJCSByZXR2YWwgIT0gLUVOT0RFVik7CiAKIAkJaWYgKHJldHZhbCAhPSBzaXplb2YoZmVhdHVyZV9idWZmZXIpKSB7Ci0JCQllcnIoIiVzIC0gZmFpbGVkIHNlbmRpbmcgc2VyaWFsIGxpbmUgc2V0dGluZ3MgLSAlZCIsCi0JCQkJCQkJX19mdW5jX18sIHJldHZhbCk7CisJCQlkZXZfZXJyKCZwb3J0LT5kZXYsICIlcyAtIGZhaWxlZCBzZW5kaW5nIHNlcmlhbCAiCisJCQkJImxpbmUgc2V0dGluZ3MgLSAlZFxuIiwgX19mdW5jX18sIHJldHZhbCk7CiAJCQljeXByZXNzX3NldF9kZWFkKHBvcnQpOwogCQl9IGVsc2UgewogCQkJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKQEAgLTQ0Myw3ICs0NDMsOCBAQAogCQkJCQkJJiYgcmV0dmFsICE9IC1FTk9ERVYpOwogCiAJCWlmIChyZXR2YWwgIT0gc2l6ZW9mKGZlYXR1cmVfYnVmZmVyKSkgewotCQkJZXJyKCIlcyAtIGZhaWxlZCB0byByZXRyaWV2ZSBzZXJpYWwgbGluZSBzZXR0aW5ncyAtICVkIiwgX19mdW5jX18sIHJldHZhbCk7CisJCQlkZXZfZXJyKCZwb3J0LT5kZXYsICIlcyAtIGZhaWxlZCB0byByZXRyaWV2ZSBzZXJpYWwgIgorCQkJCSJsaW5lIHNldHRpbmdzIC0gJWRcbiIsIF9fZnVuY19fLCByZXR2YWwpOwogCQkJY3lwcmVzc19zZXRfZGVhZChwb3J0KTsKIAkJCXJldHVybiByZXR2YWw7CiAJCX0gZWxzZSB7CkBAIC00NzYsOCArNDc3LDggQEAKIAlwcml2LT5jb21tX2lzX29rID0gMDsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CiAKLQllcnIoImN5cHJlc3NfbTggc3VzcGVuZGluZyBmYWlsaW5nIHBvcnQgJWQgLSBpbnRlcnZhbCBtaWdodCBiZSB0b28gc2hvcnQiLAotCSAgICBwb3J0LT5udW1iZXIpOworCWRldl9lcnIoJnBvcnQtPmRldiwgImN5cHJlc3NfbTggc3VzcGVuZGluZyBmYWlsaW5nIHBvcnQgJWQgLSAiCisJCSJpbnRlcnZhbCBtaWdodCBiZSB0b28gc2hvcnRcbiIsIHBvcnQtPm51bWJlcik7CiB9CiAKIApAQCAtNjc5LDcgKzY4MCw4IEBACiAKIAkvKiBzZXR1cCB0aGUgcG9ydCBhbmQgc3RhcnQgcmVhZGluZyBmcm9tIHRoZSBkZXZpY2UgKi8KIAlpZiAoIXBvcnQtPmludGVycnVwdF9pbl91cmIpIHsKLQkJZXJyKCIlcyAtIGludGVycnVwdF9pbl91cmIgaXMgZW1wdHkhIiwgX19mdW5jX18pOworCQlkZXZfZXJyKCZwb3J0LT5kZXYsICIlcyAtIGludGVycnVwdF9pbl91cmIgaXMgZW1wdHkhXG4iLAorCQkJX19mdW5jX18pOwogCQlyZXR1cm4gLTE7CiAJfQogCkBAIC0xMTA3LDggKzExMDksOCBAQAogCQlkYXRhX2JpdHMgPSAzOwogCQlicmVhazsKIAlkZWZhdWx0OgotCQllcnIoIiVzIC0gQ1NJWkUgd2FzIHNldCwgYnV0IG5vdCBDUzUtQ1M4IiwKLQkJCQlfX2Z1bmNfXyk7CisJCWRldl9lcnIoJnBvcnQtPmRldiwgIiVzIC0gQ1NJWkUgd2FzIHNldCwgYnV0IG5vdCBDUzUtQ1M4XG4iLAorCQkJX19mdW5jX18pOwogCQlkYXRhX2JpdHMgPSAzOwogCX0KIAlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwpAQCAtMTI4Niw3ICsxMjg4LDcgQEAKIAl9CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwogCi0JdHR5ID0gcG9ydC0+cG9ydC50dHk7CisJdHR5ID0gdHR5X3BvcnRfdHR5X2dldCgmcG9ydC0+cG9ydCk7CiAJaWYgKCF0dHkpIHsKIAkJZGJnKCIlcyAtIGJhZCB0dHkgcG9pbnRlciAtIGV4aXRpbmciLCBfX2Z1bmNfXyk7CiAJCXJldHVybjsKQEAgLTEzNjIsNyArMTM2NCw3IEBACiAJCQkJCWRhdGFbaV0pOwogCQkJdHR5X2luc2VydF9mbGlwX2NoYXIodHR5LCBkYXRhW2ldLCB0dHlfZmxhZyk7CiAJCX0KLQkJdHR5X2ZsaXBfYnVmZmVyX3B1c2gocG9ydC0+cG9ydC50dHkpOworCQl0dHlfZmxpcF9idWZmZXJfcHVzaCh0dHkpOwogCX0KIAogCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CkBAIC0xMzcxLDYgKzEzNzMsNyBAQAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKIAogY29udGludWVfcmVhZDoKKwl0dHlfa3JlZl9wdXQodHR5KTsKIAogCS8qIENvbnRpbnVlIHRyeWluZyB0byBhbHdheXMgcmVhZC4uLiB1bmxlc3MgdGhlIHBvcnQgaGFzIGNsb3NlZC4gKi8KIApAQCAtMTY1Nyw3ICsxNjYwLDggQEAKIAlpZiAocmV0dmFsKQogCQlnb3RvIGZhaWxlZF91c2JfcmVnaXN0ZXI7CiAKLQlpbmZvKERSSVZFUl9ERVNDICIgIiBEUklWRVJfVkVSU0lPTik7CisJcHJpbnRrKEtFUk5fSU5GTyBLQlVJTERfTU9ETkFNRSAiOiAiIERSSVZFUl9WRVJTSU9OICI6IgorCSAgICAgICBEUklWRVJfREVTQyAiXG4iKTsKIAlyZXR1cm4gMDsKIAogZmFpbGVkX3VzYl9yZWdpc3RlcjoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9kaWdpX2FjY2VsZXBvcnQuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9kaWdpX2FjY2VsZXBvcnQuYwppbmRleCAyNDBhYWQxLi42OWY4NGYwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvZGlnaV9hY2NlbGVwb3J0LmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2RpZ2lfYWNjZWxlcG9ydC5jCkBAIC02MDQsNyArNjA0LDkgQEAKIAogc3RhdGljIHZvaWQgZGlnaV93YWtldXBfd3JpdGUoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCkKIHsKLQl0dHlfd2FrZXVwKHBvcnQtPnBvcnQudHR5KTsKKwlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5ID0gdHR5X3BvcnRfdHR5X2dldCgmcG9ydC0+cG9ydCk7CisJdHR5X3dha2V1cCh0dHkpOworCXR0eV9rcmVmX3B1dCh0dHkpOwogfQogCiAKQEAgLTY1OSw3ICs2NjEsOCBAQAogCX0KIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZvb2JfcHJpdi0+ZHBfcG9ydF9sb2NrLCBmbGFncyk7CiAJaWYgKHJldCkKLQkJZXJyKCIlczogdXNiX3N1Ym1pdF91cmIgZmFpbGVkLCByZXQ9JWQiLCBfX2Z1bmNfXywgcmV0KTsKKwkJZGV2X2VycigmcG9ydC0+ZGV2LCAiJXM6IHVzYl9zdWJtaXRfdXJiIGZhaWxlZCwgcmV0PSVkXG4iLAorCQkJX19mdW5jX18sIHJldCk7CiAJcmV0dXJuIHJldDsKIAogfQpAQCAtNzQxLDcgKzc0NCw4IEBACiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+ZHBfcG9ydF9sb2NrLCBmbGFncyk7CiAKIAlpZiAocmV0KQotCQllcnIoIiVzOiB1c2Jfc3VibWl0X3VyYiBmYWlsZWQsIHJldD0lZCwgcG9ydD0lZCIsCisJCWRldl9lcnIoJnBvcnQtPmRldiwKKwkJCSIlczogdXNiX3N1Ym1pdF91cmIgZmFpbGVkLCByZXQ9JWQsIHBvcnQ9JWRcbiIsCiAJCQlfX2Z1bmNfXywgcmV0LCBwcml2LT5kcF9wb3J0X251bSk7CiAJcmV0dXJuIHJldDsKIH0KQEAgLTgxMCw3ICs4MTQsOCBAQAogCXNwaW5fdW5sb2NrKCZwb3J0X3ByaXYtPmRwX3BvcnRfbG9jayk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmb29iX3ByaXYtPmRwX3BvcnRfbG9jaywgZmxhZ3MpOwogCWlmIChyZXQpCi0JCWVycigiJXM6IHVzYl9zdWJtaXRfdXJiIGZhaWxlZCwgcmV0PSVkIiwgX19mdW5jX18sIHJldCk7CisJCWRldl9lcnIoJnBvcnQtPmRldiwgIiVzOiB1c2Jfc3VibWl0X3VyYiBmYWlsZWQsIHJldD0lZFxuIiwKKwkJCV9fZnVuY19fLCByZXQpOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTkwNSw3ICs5MTAsOCBAQAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmRwX3BvcnRfbG9jaywgZmxhZ3MpOwogCiAJaWYgKHJldCkKLQkJZXJyKCIlczogdXNiX3N1Ym1pdF91cmIgZmFpbGVkLCByZXQ9JWQsIHBvcnQ9JWQiLAorCQlkZXZfZXJyKCZwb3J0LT5kZXYsCisJCQkiJXM6IHVzYl9zdWJtaXRfdXJiIGZhaWxlZCwgcmV0PSVkLCBwb3J0PSVkXG4iLAogCQkJX19mdW5jX18sIHJldCwgcHJpdi0+ZHBfcG9ydF9udW0pOwogfQogCkBAIC0xMjEyLDcgKzEyMTgsOCBAQAogCS8qIHJldHVybiBsZW5ndGggb2YgbmV3IGRhdGEgd3JpdHRlbiwgb3IgZXJyb3IgKi8KIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5kcF9wb3J0X2xvY2ssIGZsYWdzKTsKIAlpZiAocmV0IDwgMCkKLQkJZXJyKCIlczogdXNiX3N1Ym1pdF91cmIgZmFpbGVkLCByZXQ9JWQsIHBvcnQ9JWQiLAorCQlkZXZfZXJyKCZwb3J0LT5kZXYsCisJCQkiJXM6IHVzYl9zdWJtaXRfdXJiIGZhaWxlZCwgcmV0PSVkLCBwb3J0PSVkXG4iLAogCQkJX19mdW5jX18sIHJldCwgcHJpdi0+ZHBfcG9ydF9udW0pOwogCWRiZygiZGlnaV93cml0ZTogcmV0dXJuaW5nICVkIiwgcmV0KTsKIAlyZXR1cm4gcmV0OwpAQCAtMTIzMywxNCArMTI0MCwxNiBAQAogCiAJLyogcG9ydCBhbmQgc2VyaWFsIHNhbml0eSBjaGVjayAqLwogCWlmIChwb3J0ID09IE5VTEwgfHwgKHByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCkpID09IE5VTEwpIHsKLQkJZXJyKCIlczogcG9ydCBvciBwb3J0LT5wcml2YXRlIGlzIE5VTEwsIHN0YXR1cz0lZCIsCi0JCSAgICBfX2Z1bmNfXywgc3RhdHVzKTsKKwkJZGV2X2VycigmcG9ydC0+ZGV2LAorCQkJIiVzOiBwb3J0IG9yIHBvcnQtPnByaXZhdGUgaXMgTlVMTCwgc3RhdHVzPSVkXG4iLAorCQkJX19mdW5jX18sIHN0YXR1cyk7CiAJCXJldHVybjsKIAl9CiAJc2VyaWFsID0gcG9ydC0+c2VyaWFsOwogCWlmIChzZXJpYWwgPT0gTlVMTCB8fCAoc2VyaWFsX3ByaXYgPSB1c2JfZ2V0X3NlcmlhbF9kYXRhKHNlcmlhbCkpID09IE5VTEwpIHsKLQkJZXJyKCIlczogc2VyaWFsIG9yIHNlcmlhbC0+cHJpdmF0ZSBpcyBOVUxMLCBzdGF0dXM9JWQiLAotCQkgICAgX19mdW5jX18sIHN0YXR1cyk7CisJCWRldl9lcnIoJnBvcnQtPmRldiwKKwkJCSIlczogc2VyaWFsIG9yIHNlcmlhbC0+cHJpdmF0ZSBpcyBOVUxMLCBzdGF0dXM9JWRcbiIsCisJCQlfX2Z1bmNfXywgc3RhdHVzKTsKIAkJcmV0dXJuOwogCX0KIApAQCAtMTI4Miw3ICsxMjkxLDggQEAKIAogCXNwaW5fdW5sb2NrKCZwcml2LT5kcF9wb3J0X2xvY2spOwogCWlmIChyZXQpCi0JCWVycigiJXM6IHVzYl9zdWJtaXRfdXJiIGZhaWxlZCwgcmV0PSVkLCBwb3J0PSVkIiwKKwkJZGV2X2VycigmcG9ydC0+ZGV2LAorCQkJIiVzOiB1c2Jfc3VibWl0X3VyYiBmYWlsZWQsIHJldD0lZCwgcG9ydD0lZFxuIiwKIAkJCV9fZnVuY19fLCByZXQsIHByaXYtPmRwX3BvcnRfbnVtKTsKIH0KIApAQCAtMTUxNiw4ICsxNTI2LDkgQEAKIAkJcG9ydC0+d3JpdGVfdXJiLT5kZXYgPSBwb3J0LT5zZXJpYWwtPmRldjsKIAkJcmV0ID0gdXNiX3N1Ym1pdF91cmIocG9ydC0+cmVhZF91cmIsIEdGUF9LRVJORUwpOwogCQlpZiAocmV0ICE9IDApIHsKLQkJCWVycigiJXM6IHVzYl9zdWJtaXRfdXJiIGZhaWxlZCwgcmV0PSVkLCBwb3J0PSVkIiwKLQkJCQkJX19mdW5jX18sIHJldCwgaSk7CisJCQlkZXZfZXJyKCZwb3J0LT5kZXYsCisJCQkJIiVzOiB1c2Jfc3VibWl0X3VyYiBmYWlsZWQsIHJldD0lZCwgcG9ydD0lZFxuIiwKKwkJCQlfX2Z1bmNfXywgcmV0LCBpKTsKIAkJCWJyZWFrOwogCQl9CiAJfQpAQCAtMTYxNiwyMiArMTYyNywyNiBAQAogCWRiZygiZGlnaV9yZWFkX2J1bGtfY2FsbGJhY2s6IFRPUCIpOwogCiAJLyogcG9ydCBzYW5pdHkgY2hlY2ssIGRvIG5vdCByZXN1Ym1pdCBpZiBwb3J0IGlzIG5vdCB2YWxpZCAqLwotCWlmIChwb3J0ID09IE5VTEwgfHwgKHByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCkpID09IE5VTEwpIHsKLQkJZXJyKCIlczogcG9ydCBvciBwb3J0LT5wcml2YXRlIGlzIE5VTEwsIHN0YXR1cz0lZCIsCi0JCSAgICBfX2Z1bmNfXywgc3RhdHVzKTsKKwlpZiAocG9ydCA9PSBOVUxMKQorCQlyZXR1cm47CisJcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKwlpZiAocHJpdiA9PSBOVUxMKSB7CisJCWRldl9lcnIoJnBvcnQtPmRldiwgIiVzOiBwb3J0LT5wcml2YXRlIGlzIE5VTEwsIHN0YXR1cz0lZFxuIiwKKwkJCV9fZnVuY19fLCBzdGF0dXMpOwogCQlyZXR1cm47CiAJfQogCWlmIChwb3J0LT5zZXJpYWwgPT0gTlVMTCB8fAogCQkoc2VyaWFsX3ByaXYgPSB1c2JfZ2V0X3NlcmlhbF9kYXRhKHBvcnQtPnNlcmlhbCkpID09IE5VTEwpIHsKLQkJZXJyKCIlczogc2VyaWFsIGlzIGJhZCBvciBzZXJpYWwtPnByaXZhdGUgaXMgTlVMTCwgc3RhdHVzPSVkIiwKLQkJCV9fZnVuY19fLCBzdGF0dXMpOworCQlkZXZfZXJyKCZwb3J0LT5kZXYsICIlczogc2VyaWFsIGlzIGJhZCBvciBzZXJpYWwtPnByaXZhdGUgIgorCQkJImlzIE5VTEwsIHN0YXR1cz0lZFxuIiwgX19mdW5jX18sIHN0YXR1cyk7CiAJCXJldHVybjsKIAl9CiAKIAkvKiBkbyBub3QgcmVzdWJtaXQgdXJiIGlmIGl0IGhhcyBhbnkgc3RhdHVzIGVycm9yICovCiAJaWYgKHN0YXR1cykgewotCQllcnIoIiVzOiBub256ZXJvIHJlYWQgYnVsayBzdGF0dXM6IHN0YXR1cz0lZCwgcG9ydD0lZCIsCi0JCSAgICBfX2Z1bmNfXywgc3RhdHVzLCBwcml2LT5kcF9wb3J0X251bSk7CisJCWRldl9lcnIoJnBvcnQtPmRldiwKKwkJCSIlczogbm9uemVybyByZWFkIGJ1bGsgc3RhdHVzOiBzdGF0dXM9JWQsIHBvcnQ9JWRcbiIsCisJCQlfX2Z1bmNfXywgc3RhdHVzLCBwcml2LT5kcF9wb3J0X251bSk7CiAJCXJldHVybjsKIAl9CiAKQEAgLTE2NDgsOCArMTY2Myw5IEBACiAJdXJiLT5kZXYgPSBwb3J0LT5zZXJpYWwtPmRldjsKIAlyZXQgPSB1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9BVE9NSUMpOwogCWlmIChyZXQgIT0gMCkgewotCQllcnIoIiVzOiBmYWlsZWQgcmVzdWJtaXR0aW5nIHVyYiwgcmV0PSVkLCBwb3J0PSVkIiwKLQkJICAgIF9fZnVuY19fLCByZXQsIHByaXYtPmRwX3BvcnRfbnVtKTsKKwkJZGV2X2VycigmcG9ydC0+ZGV2LAorCQkJIiVzOiBmYWlsZWQgcmVzdWJtaXR0aW5nIHVyYiwgcmV0PSVkLCBwb3J0PSVkXG4iLAorCQkJX19mdW5jX18sIHJldCwgcHJpdi0+ZHBfcG9ydF9udW0pOwogCX0KIAogfQpAQCAtMTY2OCw3ICsxNjg0LDcgQEAKIHsKIAogCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSB1cmItPmNvbnRleHQ7Ci0Jc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSA9IHBvcnQtPnBvcnQudHR5OworCXN0cnVjdCB0dHlfc3RydWN0ICp0dHk7CiAJc3RydWN0IGRpZ2lfcG9ydCAqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKIAlpbnQgb3Bjb2RlID0gKCh1bnNpZ25lZCBjaGFyICopdXJiLT50cmFuc2Zlcl9idWZmZXIpWzBdOwogCWludCBsZW4gPSAoKHVuc2lnbmVkIGNoYXIgKil1cmItPnRyYW5zZmVyX2J1ZmZlcilbMV07CkBAIC0xNjg1LDEzICsxNzAxLDE1IEBACiAKIAkvKiBzaG9ydC9tdWx0aXBsZSBwYWNrZXQgY2hlY2sgKi8KIAlpZiAodXJiLT5hY3R1YWxfbGVuZ3RoICE9IGxlbiArIDIpIHsKLQkJZXJyKCIlczogSU5DT01QTEVURSBPUiBNVUxUSVBMRSBQQUNLRVQsIHVyYi0+c3RhdHVzPSVkLCAiCi0JCSAgICAicG9ydD0lZCwgb3Bjb2RlPSVkLCBsZW49JWQsIGFjdHVhbF9sZW5ndGg9JWQsICIKLQkJICAgICJzdGF0dXM9JWQiLCBfX2Z1bmNfXywgc3RhdHVzLCBwcml2LT5kcF9wb3J0X251bSwKLQkJICAgIG9wY29kZSwgbGVuLCB1cmItPmFjdHVhbF9sZW5ndGgsIHBvcnRfc3RhdHVzKTsKKwkJZGV2X2VycigmcG9ydC0+ZGV2LCAiJXM6IElOQ09NUExFVEUgT1IgTVVMVElQTEUgUEFDS0VULCAiCisJCQkidXJiLT5zdGF0dXM9JWQsIHBvcnQ9JWQsIG9wY29kZT0lZCwgbGVuPSVkLCAiCisJCQkiYWN0dWFsX2xlbmd0aD0lZCwgc3RhdHVzPSVkXG4iLCBfX2Z1bmNfXywgc3RhdHVzLAorCQkJcHJpdi0+ZHBfcG9ydF9udW0sIG9wY29kZSwgbGVuLCB1cmItPmFjdHVhbF9sZW5ndGgsCisJCQlwb3J0X3N0YXR1cyk7CiAJCXJldHVybiAtMTsKIAl9CiAKKwl0dHkgPSB0dHlfcG9ydF90dHlfZ2V0KCZwb3J0LT5wb3J0KTsKIAlzcGluX2xvY2soJnByaXYtPmRwX3BvcnRfbG9jayk7CiAKIAkvKiBjaGVjayBmb3IgdGhyb3R0bGU7IGlmIHNldCwgZG8gbm90IHJlc3VibWl0IHJlYWQgdXJiICovCkBAIC0xNzM1LDYgKzE3NTMsNyBAQAogCQl9CiAJfQogCXNwaW5fdW5sb2NrKCZwcml2LT5kcF9wb3J0X2xvY2spOworCXR0eV9rcmVmX3B1dCh0dHkpOwogCiAJaWYgKG9wY29kZSA9PSBESUdJX0NNRF9SRUNFSVZFX0RJU0FCTEUpCiAJCWRiZygiJXM6IGdvdCBSRUNFSVZFX0RJU0FCTEUiLCBfX2Z1bmNfXyk7CkBAIC0xNzYwLDYgKzE3NzksNyBAQAogCiAJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IHVyYi0+Y29udGV4dDsKIAlzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsID0gcG9ydC0+c2VyaWFsOworCXN0cnVjdCB0dHlfc3RydWN0ICp0dHk7CiAJc3RydWN0IGRpZ2lfcG9ydCAqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKIAlpbnQgb3Bjb2RlLCBsaW5lLCBzdGF0dXMsIHZhbDsKIAlpbnQgaTsKQEAgLTE3ODcsMTAgKzE4MDcsMTEgQEAKIAkJaWYgKHByaXYgPT0gTlVMTCkKIAkJCXJldHVybiAtMTsKIAorCQl0dHkgPSB0dHlfcG9ydF90dHlfZ2V0KCZwb3J0LT5wb3J0KTsKIAkJcnRzID0gMDsKIAkJaWYgKHBvcnQtPnBvcnQuY291bnQpCi0JCQlydHMgPSBwb3J0LT5wb3J0LnR0eS0+dGVybWlvcy0+Y19jZmxhZyAmIENSVFNDVFM7Ci0KKwkJCXJ0cyA9IHR0eS0+dGVybWlvcy0+Y19jZmxhZyAmIENSVFNDVFM7CisJCQogCQlpZiAob3Bjb2RlID09IERJR0lfQ01EX1JFQURfSU5QVVRfU0lHTkFMUykgewogCQkJc3Bpbl9sb2NrKCZwcml2LT5kcF9wb3J0X2xvY2spOwogCQkJLyogY29udmVydCBmcm9tIGRpZ2kgZmxhZ3MgdG8gdGVybWlveCBmbGFncyAqLwpAQCAtMTc5OCwxNCArMTgxOSwxNCBAQAogCQkJCXByaXYtPmRwX21vZGVtX3NpZ25hbHMgfD0gVElPQ01fQ1RTOwogCQkJCS8qIHBvcnQgbXVzdCBiZSBvcGVuIHRvIHVzZSB0dHkgc3RydWN0ICovCiAJCQkJaWYgKHJ0cykgewotCQkJCQlwb3J0LT5wb3J0LnR0eS0+aHdfc3RvcHBlZCA9IDA7CisJCQkJCXR0eS0+aHdfc3RvcHBlZCA9IDA7CiAJCQkJCWRpZ2lfd2FrZXVwX3dyaXRlKHBvcnQpOwogCQkJCX0KIAkJCX0gZWxzZSB7CiAJCQkJcHJpdi0+ZHBfbW9kZW1fc2lnbmFscyAmPSB+VElPQ01fQ1RTOwogCQkJCS8qIHBvcnQgbXVzdCBiZSBvcGVuIHRvIHVzZSB0dHkgc3RydWN0ICovCiAJCQkJaWYgKHJ0cykKLQkJCQkJcG9ydC0+cG9ydC50dHktPmh3X3N0b3BwZWQgPSAxOworCQkJCQl0dHktPmh3X3N0b3BwZWQgPSAxOwogCQkJfQogCQkJaWYgKHZhbCAmIERJR0lfUkVBRF9JTlBVVF9TSUdOQUxTX0RTUikKIAkJCQlwcml2LT5kcF9tb2RlbV9zaWduYWxzIHw9IFRJT0NNX0RTUjsKQEAgLTE4MzAsNiArMTg1MSw3IEBACiAJCX0gZWxzZSBpZiAob3Bjb2RlID09IERJR0lfQ01EX0lGTFVTSF9GSUZPKSB7CiAJCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJnByaXYtPmRwX2ZsdXNoX3dhaXQpOwogCQl9CisJCXR0eV9rcmVmX3B1dCh0dHkpOwogCX0KIAlyZXR1cm4gMDsKIApAQCAtMTg0Nyw3ICsxODY5LDggQEAKIAlyZXR2YWwgPSB1c2JfcmVnaXN0ZXIoJmRpZ2lfZHJpdmVyKTsKIAlpZiAocmV0dmFsKQogCQlnb3RvIGZhaWxlZF91c2JfcmVnaXN0ZXI7Ci0JaW5mbyhEUklWRVJfVkVSU0lPTiAiOiIgRFJJVkVSX0RFU0MpOworCXByaW50ayhLRVJOX0lORk8gS0JVSUxEX01PRE5BTUUgIjogIiBEUklWRVJfVkVSU0lPTiAiOiIKKwkgICAgICAgRFJJVkVSX0RFU0MgIlxuIik7CiAJcmV0dXJuIDA7CiBmYWlsZWRfdXNiX3JlZ2lzdGVyOgogCXVzYl9zZXJpYWxfZGVyZWdpc3RlcigmZGlnaV9hY2NlbGVwb3J0XzRfZGV2aWNlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9lbXBlZy5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL2VtcGVnLmMKaW5kZXggYTZhYjViNS4uOGE2OWNjZSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL2VtcGVnLmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2VtcGVnLmMKQEAgLTMzLDkgKzMzLDggQEAKICAqCU1vdmVkIE1PRF9ERUNfVVNFX0NPVU5UIHRvIGVuZCBvZiBlbXBlZ19jbG9zZSgpLgogICoKICAqICgxMi8wMy8yMDAwKSBnYgotICoJQWRkZWQgcG9ydC0+cG9ydC50dHktPmxkaXNjLnNldF90ZXJtaW9zKHBvcnQtPnBvcnQudHR5LCBOVUxMKSB0bwotICoJZW1wZWdfb3BlbigpLiBUaGlzIG5vdGlmaWVzIHRoZSB0dHkgZHJpdmVyIHRoYXQgdGhlIHRlcm1pb3MgaGF2ZQotICoJY2hhbmdlZC4KKyAqCUFkZGVkIHR0eS0+bGRpc2Muc2V0X3Rlcm1pb3MocG9ydCwgdHR5LCBOVUxMKSB0byBlbXBlZ19vcGVuKCkuCisgKglUaGlzIG5vdGlmaWVzIHRoZSB0dHkgZHJpdmVyIHRoYXQgdGhlIHRlcm1pb3MgaGF2ZSBjaGFuZ2VkLgogICoKICAqICgxMS8xMy8yMDAwKSBnYgogICoJTW92ZWQgdHR5LT5sb3dfbGF0ZW5jeSA9IDEgZnJvbSBlbXBlZ19yZWFkX2J1bGtfY2FsbGJhY2soKSB0bwpAQCAtMzU0LDcgKzM1Myw3IEBACiAKIAl1c2Jfc2VyaWFsX2RlYnVnX2RhdGEoZGVidWcsICZwb3J0LT5kZXYsIF9fZnVuY19fLAogCQkJCQkJdXJiLT5hY3R1YWxfbGVuZ3RoLCBkYXRhKTsKLQl0dHkgPSBwb3J0LT5wb3J0LnR0eTsKKwl0dHkgPSB0dHlfcG9ydF90dHlfZ2V0KCZwb3J0LT5wb3J0KTsKIAogCWlmICh1cmItPmFjdHVhbF9sZW5ndGgpIHsKIAkJdHR5X2J1ZmZlcl9yZXF1ZXN0X3Jvb20odHR5LCB1cmItPmFjdHVhbF9sZW5ndGgpOwpAQCAtMzYyLDYgKzM2MSw3IEBACiAJCXR0eV9mbGlwX2J1ZmZlcl9wdXNoKHR0eSk7CiAJCWJ5dGVzX2luICs9IHVyYi0+YWN0dWFsX2xlbmd0aDsKIAl9CisJdHR5X2tyZWZfcHV0KHR0eSk7CiAKIAkvKiBDb250aW51ZSB0cnlpbmcgdG8gYWx3YXlzIHJlYWQgICovCiAJdXNiX2ZpbGxfYnVsa191cmIoCkBAIC00MTYsNyArNDE2LDcgQEAKIAlkYmcoIiVzIiwgX19mdW5jX18pOwogCiAJaWYgKHNlcmlhbC0+ZGV2LT5hY3Rjb25maWctPmRlc2MuYkNvbmZpZ3VyYXRpb25WYWx1ZSAhPSAxKSB7Ci0JCWVycigiYWN0aXZlIGNvbmZpZyAjJWQgIT0gMSA/PyIsCisJCWRldl9lcnIoJnNlcmlhbC0+ZGV2LT5kZXYsICJhY3RpdmUgY29uZmlnICMlZCAhPSAxID8/XG4iLAogCQkJc2VyaWFsLT5kZXYtPmFjdGNvbmZpZy0+ZGVzYy5iQ29uZmlndXJhdGlvblZhbHVlKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQpAQCAtNDk5LDE1ICs0OTksMTUgQEAKIAkJdXJiID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfS0VSTkVMKTsKIAkJd3JpdGVfdXJiX3Bvb2xbaV0gPSB1cmI7CiAJCWlmICh1cmIgPT0gTlVMTCkgewotCQkJZXJyKCJObyBtb3JlIHVyYnM/Pz8iKTsKKwkJCXByaW50ayhLRVJOX0VSUiAiZW1wZWc6IE5vIG1vcmUgdXJicz8/P1xuIik7CiAJCQljb250aW51ZTsKIAkJfQogCiAJCXVyYi0+dHJhbnNmZXJfYnVmZmVyID0ga21hbGxvYyhVUkJfVFJBTlNGRVJfQlVGRkVSX1NJWkUsCiAJCQkJCQkJCUdGUF9LRVJORUwpOwogCQlpZiAoIXVyYi0+dHJhbnNmZXJfYnVmZmVyKSB7Ci0JCQllcnIoIiVzIC0gb3V0IG9mIG1lbW9yeSBmb3IgdXJiIGJ1ZmZlcnMuIiwKLQkJCSAgICBfX2Z1bmNfXyk7CisJCQlwcmludGsoS0VSTl9FUlIgImVtcGVnOiAlcyAtIG91dCBvZiBtZW1vcnkgZm9yIHVyYiAiCisJCQkgICAgICAgImJ1ZmZlcnMuIiwgX19mdW5jX18pOwogCQkJY29udGludWU7CiAJCX0KIAl9CkBAIC01MTksNyArNTE5LDggQEAKIAlpZiAocmV0dmFsKQogCQlnb3RvIGZhaWxlZF91c2JfcmVnaXN0ZXI7CiAKLQlpbmZvKERSSVZFUl9WRVJTSU9OICI6IiBEUklWRVJfREVTQyk7CisJcHJpbnRrKEtFUk5fSU5GTyBLQlVJTERfTU9ETkFNRSAiOiAiIERSSVZFUl9WRVJTSU9OICI6IgorCSAgICAgICBEUklWRVJfREVTQyAiXG4iKTsKIAogCXJldHVybiAwOwogZmFpbGVkX3VzYl9yZWdpc3RlcjoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9lenVzYi5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL2V6dXNiLmMKaW5kZXggNzExZTg0Zi4uM2NmYzc2MiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL2V6dXNiLmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2V6dXNiLmMKQEAgLTI4LDcgKzI4LDggQEAKIAogCS8qIGRiZygiZXp1c2Jfd3JpdGVtZW1vcnkgJXgsICVkIiwgYWRkcmVzcywgbGVuZ3RoKTsgKi8KIAlpZiAoIXNlcmlhbC0+ZGV2KSB7Ci0JCWVycigiJXMgLSBubyBwaHlzaWNhbCBkZXZpY2UgcHJlc2VudCwgZmFpbGluZy4iLCBfX2Z1bmNfXyk7CisJCXByaW50ayhLRVJOX0VSUiAiZXp1c2I6ICVzIC0gbm8gcGh5c2ljYWwgZGV2aWNlIHByZXNlbnQsICIKKwkJICAgICAgICJmYWlsaW5nLlxuIiwgX19mdW5jX18pOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9mdGRpX3Npby5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL2Z0ZGlfc2lvLmMKaW5kZXggM2RjOTNiNS4uNTFkN2JkZSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL2Z0ZGlfc2lvLmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2Z0ZGlfc2lvLmMKQEAgLTU3OCw2ICs1NzgsNyBAQAogCXsgVVNCX0RFVklDRShGQUxDT01fVklELCBGQUxDT01fVFdJU1RfUElEKSB9LAogCXsgVVNCX0RFVklDRShGQUxDT01fVklELCBGQUxDT01fU0FNQkFfUElEKSB9LAogCXsgVVNCX0RFVklDRShGVERJX1ZJRCwgRlRESV9TVVVOVE9fU1BPUlRTX1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0UoRlRESV9WSUQsIEZURElfT0NFQU5JQ19QSUQpIH0sCiAJeyBVU0JfREVWSUNFKFRUSV9WSUQsIFRUSV9RTDM1NVBfUElEKSB9LAogCXsgVVNCX0RFVklDRShGVERJX1ZJRCwgRlRESV9STV9DQU5WSUVXX1BJRCkgfSwKIAl7IFVTQl9ERVZJQ0UoQkFOREJfVklELCBCQU5EQl9VU09UTDRfUElEKSB9LApAQCAtODYwLDcgKzg2MSw3IEBACiAKIAlrZnJlZShidWYpOwogCWlmIChydiA8IDApIHsKLQkJZXJyKCIlcyBFcnJvciBmcm9tIE1PREVNX0NUUkwgdXJiOiBEVFIgJXMsIFJUUyAlcyIsCisJCWRiZygiJXMgRXJyb3IgZnJvbSBNT0RFTV9DVFJMIHVyYjogRFRSICVzLCBSVFMgJXMiLAogCQkJCV9fZnVuY19fLAogCQkJCShzZXQgJiBUSU9DTV9EVFIpID8gIkhJR0giIDoKIAkJCQkoY2xlYXIgJiBUSU9DTV9EVFIpID8gIkxPVyIgOiAidW5jaGFuZ2VkIiwKQEAgLTExNTMsNyArMTE1NCw3IEBACiAJCS8qIEFzc3VtZSBpdHMgYW4gRlQyMzJSICAqLwogCQlwcml2LT5jaGlwX3R5cGUgPSBGVDIzMlJMOwogCX0KLQlpbmZvKCJEZXRlY3RlZCAlcyIsIGZ0ZGlfY2hpcF9uYW1lW3ByaXYtPmNoaXBfdHlwZV0pOworCWRldl9pbmZvKCZ1ZGV2LT5kZXYsICJEZXRlY3RlZCAlc1xuIiwgZnRkaV9jaGlwX25hbWVbcHJpdi0+Y2hpcF90eXBlXSk7CiB9CiAKIApAQCAtMTMyNiw3ICsxMzI3LDcgQEAKIAogCXByaXYgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgZnRkaV9wcml2YXRlKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFwcml2KSB7Ci0JCWVycigiJXMtIGttYWxsb2MoJVpkKSBmYWlsZWQuIiwgX19mdW5jX18sCisJCWRldl9lcnIoJnBvcnQtPmRldiwgIiVzLSBrbWFsbG9jKCVaZCkgZmFpbGVkLlxuIiwgX19mdW5jX18sCiAJCQkJCXNpemVvZihzdHJ1Y3QgZnRkaV9wcml2YXRlKSk7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KQEAgLTE0MDksNyArMTQxMCw4IEBACiAJZGJnKCIlcyIsIF9fZnVuY19fKTsKIAogCWlmIChpbnRlcmZhY2UgPT0gdWRldi0+YWN0Y29uZmlnLT5pbnRlcmZhY2VbMF0pIHsKLQkJaW5mbygiSWdub3Jpbmcgc2VyaWFsIHBvcnQgcmVzZXJ2ZWQgZm9yIEpUQUciKTsKKwkJZGV2X2luZm8oJnVkZXYtPmRldiwKKwkJCSAiSWdub3Jpbmcgc2VyaWFsIHBvcnQgcmVzZXJ2ZWQgZm9yIEpUQUdcbiIpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKQEAgLTE0MjcsNyArMTQyOSw4IEBACiAKIAlpZiAoZXAtPmVuYWJsZWQgJiYgZXBfZGVzYy0+d01heFBhY2tldFNpemUgPT0gMCkgewogCQllcF9kZXNjLT53TWF4UGFja2V0U2l6ZSA9IGNwdV90b19sZTE2KDB4NDApOwotCQlpbmZvKCJGaXhpbmcgaW52YWxpZCB3TWF4UGFja2V0U2l6ZSBvbiByZWFkIHBpcGUiKTsKKwkJZGV2X2luZm8oJnNlcmlhbC0+ZGV2LT5kZXYsCisJCQkgIkZpeGluZyBpbnZhbGlkIHdNYXhQYWNrZXRTaXplIG9uIHJlYWQgcGlwZVxuIik7CiAJfQogCiAJcmV0dXJuIDA7CkBAIC0xNTIxLDggKzE1MjQsOSBAQAogCQkJZnRkaV9yZWFkX2J1bGtfY2FsbGJhY2ssIHBvcnQpOwogCXJlc3VsdCA9IHVzYl9zdWJtaXRfdXJiKHBvcnQtPnJlYWRfdXJiLCBHRlBfS0VSTkVMKTsKIAlpZiAocmVzdWx0KQotCQllcnIoIiVzIC0gZmFpbGVkIHN1Ym1pdHRpbmcgcmVhZCB1cmIsIGVycm9yICVkIiwKLQkJCQkJCQlfX2Z1bmNfXywgcmVzdWx0KTsKKwkJZGV2X2VycigmcG9ydC0+ZGV2LAorCQkJIiVzIC0gZmFpbGVkIHN1Ym1pdHRpbmcgcmVhZCB1cmIsIGVycm9yICVkXG4iLAorCQkJX19mdW5jX18sIHJlc3VsdCk7CiAKIAogCXJldHVybiByZXN1bHQ7CkBAIC0xNTU2LDcgKzE1NjAsNyBAQAogCQkJCSAgICBGVERJX1NJT19TRVRfRkxPV19DVFJMX1JFUVVFU1RfVFlQRSwKIAkJCQkgICAgMCwgcHJpdi0+aW50ZXJmYWNlLCBidWYsIDAsCiAJCQkJICAgIFdEUl9USU1FT1VUKSA8IDApIHsKLQkJCWVycigiZXJyb3IgZnJvbSBmbG93Y29udHJvbCB1cmIiKTsKKwkJCWRldl9lcnIoJnBvcnQtPmRldiwgImVycm9yIGZyb20gZmxvd2NvbnRyb2wgdXJiXG4iKTsKIAkJfQogCiAJCS8qIGRyb3AgUlRTIGFuZCBEVFIgKi8KQEAgLTE2MjEsMTQgKzE2MjUsMTUgQEAKIAogCWJ1ZmZlciA9IGttYWxsb2ModHJhbnNmZXJfc2l6ZSwgR0ZQX0FUT01JQyk7CiAJaWYgKCFidWZmZXIpIHsKLQkJZXJyKCIlcyByYW4gb3V0IG9mIGtlcm5lbCBtZW1vcnkgZm9yIHVyYiAuLi4iLCBfX2Z1bmNfXyk7CisJCWRldl9lcnIoJnBvcnQtPmRldiwKKwkJCSIlcyByYW4gb3V0IG9mIGtlcm5lbCBtZW1vcnkgZm9yIHVyYiAuLi5cbiIsIF9fZnVuY19fKTsKIAkJY291bnQgPSAtRU5PTUVNOwogCQlnb3RvIGVycm9yX25vX2J1ZmZlcjsKIAl9CiAKIAl1cmIgPSB1c2JfYWxsb2NfdXJiKDAsIEdGUF9BVE9NSUMpOwogCWlmICghdXJiKSB7Ci0JCWVycigiJXMgLSBubyBtb3JlIGZyZWUgdXJicyIsIF9fZnVuY19fKTsKKwkJZGV2X2VycigmcG9ydC0+ZGV2LCAiJXMgLSBubyBtb3JlIGZyZWUgdXJic1xuIiwgX19mdW5jX18pOwogCQljb3VudCA9IC1FTk9NRU07CiAJCWdvdG8gZXJyb3Jfbm9fdXJiOwogCX0KQEAgLTE2NzIsOCArMTY3Nyw5IEBACiAKIAlzdGF0dXMgPSB1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9BVE9NSUMpOwogCWlmIChzdGF0dXMpIHsKLQkJZXJyKCIlcyAtIGZhaWxlZCBzdWJtaXR0aW5nIHdyaXRlIHVyYiwgZXJyb3IgJWQiLAotCQkJCQkJCV9fZnVuY19fLCBzdGF0dXMpOworCQlkZXZfZXJyKCZwb3J0LT5kZXYsCisJCQkiJXMgLSBmYWlsZWQgc3VibWl0dGluZyB3cml0ZSB1cmIsIGVycm9yICVkXG4iLAorCQkJX19mdW5jX18sIHN0YXR1cyk7CiAJCWNvdW50ID0gc3RhdHVzOwogCQlnb3RvIGVycm9yOwogCX0gZWxzZSB7CkBAIC0xNzgwLDcgKzE3ODYsOCBAQAogCWJ1ZmZlcmVkID0gKGludClwcml2LT50eF9vdXRzdGFuZGluZ19ieXRlczsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT50eF9sb2NrLCBmbGFncyk7CiAJaWYgKGJ1ZmZlcmVkIDwgMCkgewotCQllcnIoIiVzIG91dHN0YW5kaW5nIHR4IGJ5dGVzIGlzIG5lZ2F0aXZlISIsIF9fZnVuY19fKTsKKwkJZGV2X2VycigmcG9ydC0+ZGV2LCAiJXMgb3V0c3RhbmRpbmcgdHggYnl0ZXMgaXMgbmVnYXRpdmUhXG4iLAorCQkJX19mdW5jX18pOwogCQlidWZmZXJlZCA9IDA7CiAJfQogCXJldHVybiBidWZmZXJlZDsKQEAgLTE3OTYsMTEgKzE4MDMsMTIgQEAKIAlpbnQgc3RhdHVzID0gdXJiLT5zdGF0dXM7CiAKIAlpZiAodXJiLT5udW1iZXJfb2ZfcGFja2V0cyA+IDApIHsKLQkJZXJyKCIlcyB0cmFuc2Zlcl9idWZmZXJfbGVuZ3RoICVkIGFjdHVhbF9sZW5ndGggJWQgbnVtYmVyIG9mIHBhY2tldHMgJWQiLAotCQkJCV9fZnVuY19fLAotCQkJCXVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCwKLQkJCQl1cmItPmFjdHVhbF9sZW5ndGgsIHVyYi0+bnVtYmVyX29mX3BhY2tldHMpOwotCQllcnIoIiVzIHRyYW5zZmVyX2ZsYWdzICV4ICIsIF9fZnVuY19fLCB1cmItPnRyYW5zZmVyX2ZsYWdzKTsKKwkJZGV2X2VycigmcG9ydC0+ZGV2LCAiJXMgdHJhbnNmZXJfYnVmZmVyX2xlbmd0aCAlZCAiCisJCQkiYWN0dWFsX2xlbmd0aCAlZCBudW1iZXIgb2YgcGFja2V0cyAlZFxuIiwgX19mdW5jX18sCisJCQl1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgsCisJCQl1cmItPmFjdHVhbF9sZW5ndGgsIHVyYi0+bnVtYmVyX29mX3BhY2tldHMpOworCQlkZXZfZXJyKCZwb3J0LT5kZXYsICIlcyB0cmFuc2Zlcl9mbGFncyAleFxuIiwgX19mdW5jX18sCisJCQl1cmItPnRyYW5zZmVyX2ZsYWdzKTsKIAl9CiAKIAlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fZnVuY19fLCBwb3J0LT5udW1iZXIpOwpAQCAtMTgwOCw3ICsxODE2LDcgQEAKIAlpZiAocG9ydC0+cG9ydC5jb3VudCA8PSAwKQogCQlyZXR1cm47CiAKLQl0dHkgPSBwb3J0LT5wb3J0LnR0eTsKKwl0dHkgPSB0dHlfcG9ydF90dHlfZ2V0KCZwb3J0LT5wb3J0KTsKIAlpZiAoIXR0eSkgewogCQlkYmcoIiVzIC0gYmFkIHR0eSBwb2ludGVyIC0gZXhpdGluZyIsIF9fZnVuY19fKTsKIAkJcmV0dXJuOwpAQCAtMTgxNywxNyArMTgyNSwxNyBAQAogCXByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CiAJaWYgKCFwcml2KSB7CiAJCWRiZygiJXMgLSBiYWQgcG9ydCBwcml2YXRlIGRhdGEgcG9pbnRlciAtIGV4aXRpbmciLCBfX2Z1bmNfXyk7Ci0JCXJldHVybjsKKwkJZ290byBvdXQ7CiAJfQogCiAJaWYgKHVyYiAhPSBwb3J0LT5yZWFkX3VyYikKLQkJZXJyKCIlcyAtIE5vdCBteSB1cmIhIiwgX19mdW5jX18pOworCQlkZXZfZXJyKCZwb3J0LT5kZXYsICIlcyAtIE5vdCBteSB1cmIhXG4iLCBfX2Z1bmNfXyk7CiAKIAlpZiAoc3RhdHVzKSB7CiAJCS8qIFRoaXMgd2lsbCBoYXBwZW4gYXQgY2xvc2UgZXZlcnkgdGltZSBzbyBpdCBpcyBhIGRiZyBub3QgYW4KIAkJICAgZXJyICovCiAJCWRiZygiKHRoaXMgaXMgb2sgb24gY2xvc2UpIG5vbnplcm8gcmVhZCBidWxrIHN0YXR1cyByZWNlaXZlZDogJWQiLCBzdGF0dXMpOwotCQlyZXR1cm47CisJCWdvdG8gb3V0OwogCX0KIAogCS8qIGNvdW50IGRhdGEgYnl0ZXMsIGJ1dCBub3Qgc3RhdHVzIGJ5dGVzICovCkBAIC0xODM4LDcgKzE4NDYsOCBAQAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPnJ4X2xvY2ssIGZsYWdzKTsKIAogCWZ0ZGlfcHJvY2Vzc19yZWFkKCZwcml2LT5yeF93b3JrLndvcmspOwotCitvdXQ6CisJdHR5X2tyZWZfcHV0KHR0eSk7CiB9IC8qIGZ0ZGlfcmVhZF9idWxrX2NhbGxiYWNrICovCiAKIApAQCAtMTg2Myw3ICsxODcyLDcgQEAKIAlpZiAocG9ydC0+cG9ydC5jb3VudCA8PSAwKQogCQlyZXR1cm47CiAKLQl0dHkgPSBwb3J0LT5wb3J0LnR0eTsKKwl0dHkgPSB0dHlfcG9ydF90dHlfZ2V0KCZwb3J0LT5wb3J0KTsKIAlpZiAoIXR0eSkgewogCQlkYmcoIiVzIC0gYmFkIHR0eSBwb2ludGVyIC0gZXhpdGluZyIsIF9fZnVuY19fKTsKIAkJcmV0dXJuOwpAQCAtMTg3MiwxMyArMTg4MSwxMyBAQAogCXByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CiAJaWYgKCFwcml2KSB7CiAJCWRiZygiJXMgLSBiYWQgcG9ydCBwcml2YXRlIGRhdGEgcG9pbnRlciAtIGV4aXRpbmciLCBfX2Z1bmNfXyk7Ci0JCXJldHVybjsKKwkJZ290byBvdXQ7CiAJfQogCiAJdXJiID0gcG9ydC0+cmVhZF91cmI7CiAJaWYgKCF1cmIpIHsKIAkJZGJnKCIlcyAtIGJhZCByZWFkX3VyYiBwb2ludGVyIC0gZXhpdGluZyIsIF9fZnVuY19fKTsKLQkJcmV0dXJuOworCQlnb3RvIG91dDsKIAl9CiAKIAlkYXRhID0gdXJiLT50cmFuc2Zlcl9idWZmZXI7CkBAIC0xOTIzLDcgKzE5MzIsOCBAQAogCiAJCWxlbmd0aCA9IG1pbihQS1RTWiwgdXJiLT5hY3R1YWxfbGVuZ3RoLXBhY2tldF9vZmZzZXQpLTI7CiAJCWlmIChsZW5ndGggPCAwKSB7Ci0JCQllcnIoIiVzIC0gYmFkIHBhY2tldCBsZW5ndGg6ICVkIiwgX19mdW5jX18sIGxlbmd0aCsyKTsKKwkJCWRldl9lcnIoJnBvcnQtPmRldiwgIiVzIC0gYmFkIHBhY2tldCBsZW5ndGg6ICVkXG4iLAorCQkJCV9fZnVuY19fLCBsZW5ndGgrMik7CiAJCQlsZW5ndGggPSAwOwogCQl9CiAKQEAgLTIwMjAsNyArMjAzMCw3IEBACiAJCQlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJnByaXYtPnJ4X3dvcmssIDEpOwogCQllbHNlCiAJCQlkYmcoIiVzIC0gcG9ydCBpcyBjbG9zZWQiLCBfX2Z1bmNfXyk7Ci0JCXJldHVybjsKKwkJZ290byBvdXQ7CiAJfQogCiAJLyogdXJiIGlzIGNvbXBsZXRlbHkgcHJvY2Vzc2VkICovCkBAIC0yMDM4LDkgKzIwNDgsMTIgQEAKIAogCQlyZXN1bHQgPSB1c2Jfc3VibWl0X3VyYihwb3J0LT5yZWFkX3VyYiwgR0ZQX0FUT01JQyk7CiAJCWlmIChyZXN1bHQpCi0JCQllcnIoIiVzIC0gZmFpbGVkIHJlc3VibWl0dGluZyByZWFkIHVyYiwgZXJyb3IgJWQiLAotCQkJCQkJCV9fZnVuY19fLCByZXN1bHQpOworCQkJZGV2X2VycigmcG9ydC0+ZGV2LAorCQkJCSIlcyAtIGZhaWxlZCByZXN1Ym1pdHRpbmcgcmVhZCB1cmIsIGVycm9yICVkXG4iLAorCQkJCV9fZnVuY19fLCByZXN1bHQpOwogCX0KK291dDoKKwl0dHlfa3JlZl9wdXQodHR5KTsKIH0gLyogZnRkaV9wcm9jZXNzX3JlYWQgKi8KIAogCkBAIC0yMDY2LDggKzIwNzksOCBAQAogCQkJRlRESV9TSU9fU0VUX0RBVEFfUkVRVUVTVF9UWVBFLAogCQkJdXJiX3ZhbHVlICwgcHJpdi0+aW50ZXJmYWNlLAogCQkJYnVmLCAwLCBXRFJfVElNRU9VVCkgPCAwKSB7Ci0JCWVycigiJXMgRkFJTEVEIHRvIGVuYWJsZS9kaXNhYmxlIGJyZWFrIHN0YXRlIChzdGF0ZSB3YXMgJWQpIiwKLQkJCQkJCQlfX2Z1bmNfXywgYnJlYWtfc3RhdGUpOworCQlkZXZfZXJyKCZwb3J0LT5kZXYsICIlcyBGQUlMRUQgdG8gZW5hYmxlL2Rpc2FibGUgYnJlYWsgc3RhdGUgIgorCQkJIihzdGF0ZSB3YXMgJWQpXG4iLCBfX2Z1bmNfXywgYnJlYWtfc3RhdGUpOwogCX0KIAogCWRiZygiJXMgYnJlYWsgc3RhdGUgaXMgJWQgLSB1cmIgaXMgJWQiLCBfX2Z1bmNfXywKQEAgLTIxMzksNyArMjE1Miw3IEBACiAJCWNhc2UgQ1M3OiB1cmJfdmFsdWUgfD0gNzsgZGJnKCJTZXR0aW5nIENTNyIpOyBicmVhazsKIAkJY2FzZSBDUzg6IHVyYl92YWx1ZSB8PSA4OyBkYmcoIlNldHRpbmcgQ1M4Iik7IGJyZWFrOwogCQlkZWZhdWx0OgotCQkJZXJyKCJDU0laRSB3YXMgc2V0IGJ1dCBub3QgQ1M1LUNTOCIpOworCQkJZGV2X2VycigmcG9ydC0+ZGV2LCAiQ1NJWkUgd2FzIHNldCBidXQgbm90IENTNS1DUzhcbiIpOwogCQl9CiAJfQogCkBAIC0yMTUyLDcgKzIxNjUsOCBAQAogCQkJICAgIEZURElfU0lPX1NFVF9EQVRBX1JFUVVFU1RfVFlQRSwKIAkJCSAgICB1cmJfdmFsdWUgLCBwcml2LT5pbnRlcmZhY2UsCiAJCQkgICAgYnVmLCAwLCBXRFJfU0hPUlRfVElNRU9VVCkgPCAwKSB7Ci0JCWVycigiJXMgRkFJTEVEIHRvIHNldCBkYXRhYml0cy9zdG9wYml0cy9wYXJpdHkiLCBfX2Z1bmNfXyk7CisJCWRldl9lcnIoJnBvcnQtPmRldiwgIiVzIEZBSUxFRCB0byBzZXQgIgorCQkJImRhdGFiaXRzL3N0b3BiaXRzL3Bhcml0eVxuIiwgX19mdW5jX18pOwogCX0KIAogCS8qIE5vdyBkbyB0aGUgYmF1ZHJhdGUgKi8KQEAgLTIxNjMsMTQgKzIxNzcsMTcgQEAKIAkJCQkgICAgRlRESV9TSU9fU0VUX0ZMT1dfQ1RSTF9SRVFVRVNUX1RZUEUsCiAJCQkJICAgIDAsIHByaXYtPmludGVyZmFjZSwKIAkJCQkgICAgYnVmLCAwLCBXRFJfVElNRU9VVCkgPCAwKSB7Ci0JCQllcnIoIiVzIGVycm9yIGZyb20gZGlzYWJsZSBmbG93Y29udHJvbCB1cmIiLCBfX2Z1bmNfXyk7CisJCQlkZXZfZXJyKCZwb3J0LT5kZXYsCisJCQkJIiVzIGVycm9yIGZyb20gZGlzYWJsZSBmbG93Y29udHJvbCB1cmJcbiIsCisJCQkJX19mdW5jX18pOwogCQl9CiAJCS8qIERyb3AgUlRTIGFuZCBEVFIgKi8KIAkJY2xlYXJfbWN0cmwocG9ydCwgVElPQ01fRFRSIHwgVElPQ01fUlRTKTsKIAl9IGVsc2UgewogCQkvKiBzZXQgdGhlIGJhdWRyYXRlIGRldGVybWluZWQgYmVmb3JlICovCiAJCWlmIChjaGFuZ2Vfc3BlZWQodHR5LCBwb3J0KSkKLQkJCWVycigiJXMgdXJiIGZhaWxlZCB0byBzZXQgYmF1ZHJhdGUiLCBfX2Z1bmNfXyk7CisJCQlkZXZfZXJyKCZwb3J0LT5kZXYsICIlcyB1cmIgZmFpbGVkIHRvIHNldCBiYXVkcmF0ZVxuIiwKKwkJCQlfX2Z1bmNfXyk7CiAJCS8qIEVuc3VyZSBSVFMgYW5kIERUUiBhcmUgcmFpc2VkIHdoZW4gYmF1ZHJhdGUgY2hhbmdlZCBmcm9tIDAgKi8KIAkJaWYgKCFvbGRfdGVybWlvcyB8fCAob2xkX3Rlcm1pb3MtPmNfY2ZsYWcgJiBDQkFVRCkgPT0gQjApCiAJCQlzZXRfbWN0cmwocG9ydCwgVElPQ01fRFRSIHwgVElPQ01fUlRTKTsKQEAgLTIxODYsNyArMjIwMyw4IEBACiAJCQkJICAgIEZURElfU0lPX1NFVF9GTE9XX0NUUkxfUkVRVUVTVF9UWVBFLAogCQkJCSAgICAwICwgKEZURElfU0lPX1JUU19DVFNfSFMgfCBwcml2LT5pbnRlcmZhY2UpLAogCQkJCSAgICBidWYsIDAsIFdEUl9USU1FT1VUKSA8IDApIHsKLQkJCWVycigidXJiIGZhaWxlZCB0byBzZXQgdG8gcnRzL2N0cyBmbG93IGNvbnRyb2wiKTsKKwkJCWRldl9lcnIoJnBvcnQtPmRldiwKKwkJCQkidXJiIGZhaWxlZCB0byBzZXQgdG8gcnRzL2N0cyBmbG93IGNvbnRyb2xcbiIpOwogCQl9CiAKIAl9IGVsc2UgewpAQCAtMjIxNyw3ICsyMjM1LDggQEAKIAkJCQkJICAgIHVyYl92YWx1ZSAsIChGVERJX1NJT19YT05fWE9GRl9IUwogCQkJCQkJCSB8IHByaXYtPmludGVyZmFjZSksCiAJCQkJCSAgICBidWYsIDAsIFdEUl9USU1FT1VUKSA8IDApIHsKLQkJCQllcnIoInVyYiBmYWlsZWQgdG8gc2V0IHRvIHhvbi94b2ZmIGZsb3cgY29udHJvbCIpOworCQkJCWRldl9lcnIoJnBvcnQtPmRldiwgInVyYiBmYWlsZWQgdG8gc2V0IHRvICIKKwkJCQkJInhvbi94b2ZmIGZsb3cgY29udHJvbFxuIik7CiAJCQl9CiAJCX0gZWxzZSB7CiAJCQkvKiBlbHNlIGNsYXVzZSB0byBvbmx5IHJ1biBpZiBjZmxhZyAhIENSVFNDVFMgYW5kIGlmbGFnCkBAIC0yMjMwLDcgKzIyNDksOCBAQAogCQkJCQkgICAgRlRESV9TSU9fU0VUX0ZMT1dfQ1RSTF9SRVFVRVNUX1RZUEUsCiAJCQkJCSAgICAwLCBwcml2LT5pbnRlcmZhY2UsCiAJCQkJCSAgICBidWYsIDAsIFdEUl9USU1FT1VUKSA8IDApIHsKLQkJCQllcnIoInVyYiBmYWlsZWQgdG8gY2xlYXIgZmxvdyBjb250cm9sIik7CisJCQkJZGV2X2VycigmcG9ydC0+ZGV2LAorCQkJCQkidXJiIGZhaWxlZCB0byBjbGVhciBmbG93IGNvbnRyb2xcbiIpOwogCQkJfQogCQl9CiAKQEAgLTIyNTYsNyArMjI3Niw3IEBACiAJCQkgICAwLCAwLAogCQkJICAgYnVmLCAxLCBXRFJfVElNRU9VVCk7CiAJCWlmIChyZXQgPCAwKSB7Ci0JCQllcnIoIiVzIENvdWxkIG5vdCBnZXQgbW9kZW0gc3RhdHVzIG9mIGRldmljZSAtIGVycjogJWQiLCBfX2Z1bmNfXywKKwkJCWRiZygiJXMgQ291bGQgbm90IGdldCBtb2RlbSBzdGF0dXMgb2YgZGV2aWNlIC0gZXJyOiAlZCIsIF9fZnVuY19fLAogCQkJICAgIHJldCk7CiAJCQlyZXR1cm4gcmV0OwogCQl9CkBAIC0yMjc1LDcgKzIyOTUsNyBAQAogCQkJCSAgIDAsIHByaXYtPmludGVyZmFjZSwKIAkJCQkgICBidWYsIDIsIFdEUl9USU1FT1VUKTsKIAkJaWYgKHJldCA8IDApIHsKLQkJCWVycigiJXMgQ291bGQgbm90IGdldCBtb2RlbSBzdGF0dXMgb2YgZGV2aWNlIC0gZXJyOiAlZCIsIF9fZnVuY19fLAorCQkJZGJnKCIlcyBDb3VsZCBub3QgZ2V0IG1vZGVtIHN0YXR1cyBvZiBkZXZpY2UgLSBlcnI6ICVkIiwgX19mdW5jX18sCiAJCQkgICAgcmV0KTsKIAkJCXJldHVybiByZXQ7CiAJCX0KQEAgLTI0MjIsNyArMjQ0Miw4IEBACiAJaWYgKHJldHZhbCkKIAkJZ290byBmYWlsZWRfdXNiX3JlZ2lzdGVyOwogCi0JaW5mbyhEUklWRVJfVkVSU0lPTiAiOiIgRFJJVkVSX0RFU0MpOworCXByaW50ayhLRVJOX0lORk8gS0JVSUxEX01PRE5BTUUgIjogIiBEUklWRVJfVkVSU0lPTiAiOiIKKwkgICAgICAgRFJJVkVSX0RFU0MgIlxuIik7CiAJcmV0dXJuIDA7CiBmYWlsZWRfdXNiX3JlZ2lzdGVyOgogCXVzYl9zZXJpYWxfZGVyZWdpc3RlcigmZnRkaV9zaW9fZGV2aWNlKTsKQEAgLTI0NTUsNSArMjQ3Niw1IEBACiBNT0RVTEVfUEFSTV9ERVNDKHZlbmRvciwgIlVzZXIgc3BlY2lmaWVkIHZlbmRvciBJRCAoZGVmYXVsdD0iCiAJCV9fTU9EVUxFX1NUUklORyhGVERJX1ZJRCkiKSIpOwogbW9kdWxlX3BhcmFtKHByb2R1Y3QsIHVzaG9ydCwgMCk7Ci1NT0RVTEVfUEFSTV9ERVNDKHZlbmRvciwgIlVzZXIgc3BlY2lmaWVkIHByb2R1Y3QgSUQiKTsKK01PRFVMRV9QQVJNX0RFU0MocHJvZHVjdCwgIlVzZXIgc3BlY2lmaWVkIHByb2R1Y3QgSUQiKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2Z0ZGlfc2lvLmggYi9kcml2ZXJzL3VzYi9zZXJpYWwvZnRkaV9zaW8uaAppbmRleCA4YTViNmRmLi4wN2EzOTkyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvZnRkaV9zaW8uaAorKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvZnRkaV9zaW8uaApAQCAtNjI4LDYgKzYyOCwxMSBAQAogI2RlZmluZSBGVERJX1NVVU5UT19TUE9SVFNfUElECTB4RjY4MAkvKiBTdXVudG8gU3BvcnRzIGluc3RydW1lbnQgKi8KIAogLyoKKyAqIE9jZWFuaWMgcHJvZHVjdCBpZHMKKyAqLworI2RlZmluZSBGVERJX09DRUFOSUNfUElECTB4RjQ2MCAgLyogT2NlYW5pYyBkaXZlIGluc3RydW1lbnQgKi8KKworLyoKICAqIFRUaSAoVGh1cmxieSBUaGFuZGFyIEluc3RydW1lbnRzKQogICovCiAjZGVmaW5lIFRUSV9WSUQJCQkweDEwM0UJLyogVmVuZG9yIElkICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvZ2FybWluX2dwcy5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL2dhcm1pbl9ncHMuYwppbmRleCBkOTUzODIwLi44ZTZhNjZlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvZ2FybWluX2dwcy5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9nYXJtaW5fZ3BzLmMKQEAgLTI3Niw3ICsyNzYsNyBAQAogc3RhdGljIHZvaWQgc2VuZF90b190dHkoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwKIAkJCWNoYXIgKmRhdGEsIHVuc2lnbmVkIGludCBhY3R1YWxfbGVuZ3RoKQogewotCXN0cnVjdCB0dHlfc3RydWN0ICp0dHkgPSBwb3J0LT5wb3J0LnR0eTsKKwlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5ID0gdHR5X3BvcnRfdHR5X2dldCgmcG9ydC0+cG9ydCk7CiAKIAlpZiAodHR5ICYmIGFjdHVhbF9sZW5ndGgpIHsKIApAQCAtMjg3LDYgKzI4Nyw3IEBACiAJCXR0eV9pbnNlcnRfZmxpcF9zdHJpbmcodHR5LCBkYXRhLCBhY3R1YWxfbGVuZ3RoKTsKIAkJdHR5X2ZsaXBfYnVmZmVyX3B1c2godHR5KTsKIAl9CisJdHR5X2tyZWZfcHV0KHR0eSk7CiB9CiAKIApAQCAtMTU4NCw3ICsxNTg1LDggQEAKIAlyZXR2YWwgPSB1c2JfcmVnaXN0ZXIoJmdhcm1pbl9kcml2ZXIpOwogCWlmIChyZXR2YWwpCiAJCWdvdG8gZmFpbGVkX3VzYl9yZWdpc3RlcjsKLQlpbmZvKERSSVZFUl9ERVNDICIgIiBEUklWRVJfVkVSU0lPTik7CisJcHJpbnRrKEtFUk5fSU5GTyBLQlVJTERfTU9ETkFNRSAiOiAiIERSSVZFUl9WRVJTSU9OICI6IgorCSAgICAgICBEUklWRVJfREVTQyAiXG4iKTsKIAogCXJldHVybiAwOwogZmFpbGVkX3VzYl9yZWdpc3RlcjoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9nZW5lcmljLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvZ2VuZXJpYy5jCmluZGV4IGZlODRjODguLjgxNDkwOWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9nZW5lcmljLmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2dlbmVyaWMuYwpAQCAtMzMwLDcgKzMzMCw3IEBACiBzdGF0aWMgdm9pZCBmbHVzaF9hbmRfcmVzdWJtaXRfcmVhZF91cmIoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCkKIHsKIAlzdHJ1Y3QgdXJiICp1cmIgPSBwb3J0LT5yZWFkX3VyYjsKLQlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5ID0gcG9ydC0+cG9ydC50dHk7CisJc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSA9IHR0eV9wb3J0X3R0eV9nZXQoJnBvcnQtPnBvcnQpOwogCWludCByb29tOwogCiAJLyogUHVzaCBkYXRhIHRvIHR0eSAqLwpAQCAtMzQxLDYgKzM0MSw3IEBACiAJCQl0dHlfZmxpcF9idWZmZXJfcHVzaCh0dHkpOwogCQl9CiAJfQorCXR0eV9rcmVmX3B1dCh0dHkpOwogCiAJcmVzdWJtaXRfcmVhZF91cmIocG9ydCwgR0ZQX0FUT01JQyk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvaHA0eC5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL2hwNHguYwppbmRleCBhYjkwNTg2Li40MzEzMjkyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvaHA0eC5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9ocDR4LmMKQEAgLTYzLDcgKzYzLDggQEAKIAlyZXR2YWwgPSB1c2JfcmVnaXN0ZXIoJmhwNDlncF9kcml2ZXIpOwogCWlmIChyZXR2YWwpCiAJCWdvdG8gZmFpbGVkX3VzYl9yZWdpc3RlcjsKLQlpbmZvKERSSVZFUl9ERVNDICIgIiBEUklWRVJfVkVSU0lPTik7CisJcHJpbnRrKEtFUk5fSU5GTyBLQlVJTERfTU9ETkFNRSAiOiAiIERSSVZFUl9WRVJTSU9OICI6IgorCSAgICAgICBEUklWRVJfREVTQyAiXG4iKTsKIAlyZXR1cm4gMDsKIGZhaWxlZF91c2JfcmVnaXN0ZXI6CiAJdXNiX3NlcmlhbF9kZXJlZ2lzdGVyKCZocDQ5Z3BfZGV2aWNlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9pb19lZGdlcG9ydC5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL2lvX2VkZ2Vwb3J0LmMKaW5kZXggYmZhNTA4ZC4uZTg1YzhjMCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL2lvX2VkZ2Vwb3J0LmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2lvX2VkZ2Vwb3J0LmMKQEAgLTYwMCw2ICs2MDAsNyBAQAogCXN0cnVjdCBlZGdlcG9ydF9zZXJpYWwJKmVkZ2Vfc2VyaWFsID0gdXJiLT5jb250ZXh0OwogCXN0cnVjdCBlZGdlcG9ydF9wb3J0ICplZGdlX3BvcnQ7CiAJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydDsKKwlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5OwogCXVuc2lnbmVkIGNoYXIgKmRhdGEgPSB1cmItPnRyYW5zZmVyX2J1ZmZlcjsKIAlpbnQgbGVuZ3RoID0gdXJiLT5hY3R1YWxfbGVuZ3RoOwogCWludCBieXRlc19hdmFpbDsKQEAgLTY3NSw5ICs2NzYsMTIgQEAKIAogCQkJCQkvKiB0ZWxsIHRoZSB0dHkgZHJpdmVyIHRoYXQgc29tZXRoaW5nCiAJCQkJCSAgIGhhcyBjaGFuZ2VkICovCi0JCQkJCWlmIChlZGdlX3BvcnQtPnBvcnQtPnBvcnQudHR5KQotCQkJCQkJdHR5X3dha2V1cChlZGdlX3BvcnQtPnBvcnQtPnBvcnQudHR5KTsKLQorCQkJCQl0dHkgPSB0dHlfcG9ydF90dHlfZ2V0KAorCQkJCQkJJmVkZ2VfcG9ydC0+cG9ydC0+cG9ydCk7CisJCQkJCWlmICh0dHkpIHsKKwkJCQkJCXR0eV93YWtldXAodHR5KTsKKwkJCQkJCXR0eV9rcmVmX3B1dCh0dHkpOworCQkJCQl9CiAJCQkJCS8qIFNpbmNlIHdlIGhhdmUgbW9yZSBjcmVkaXQsIGNoZWNrCiAJCQkJCSAgIGlmIG1vcmUgZGF0YSBjYW4gYmUgc2VudCAqLwogCQkJCQlzZW5kX21vcmVfcG9ydF9kYXRhKGVkZ2Vfc2VyaWFsLApAQCAtNzc4LDEzICs3ODIsMTQgQEAKIAkJICAgIF9fZnVuY19fLCBzdGF0dXMpOwogCX0KIAotCXR0eSA9IGVkZ2VfcG9ydC0+cG9ydC0+cG9ydC50dHk7CisJdHR5ID0gdHR5X3BvcnRfdHR5X2dldCgmZWRnZV9wb3J0LT5wb3J0LT5wb3J0KTsKIAogCWlmICh0dHkgJiYgZWRnZV9wb3J0LT5vcGVuKSB7CiAJCS8qIGxldCB0aGUgdHR5IGRyaXZlciB3YWtldXAgaWYgaXQgaGFzIGEgc3BlY2lhbAogCQkgICB3cml0ZV93YWtldXAgZnVuY3Rpb24gKi8KIAkJdHR5X3dha2V1cCh0dHkpOwogCX0KKwl0dHlfa3JlZl9wdXQodHR5KTsKIAogCS8qIFJlbGVhc2UgdGhlIFdyaXRlIFVSQiAqLwogCWVkZ2VfcG9ydC0+d3JpdGVfaW5fcHJvZ3Jlc3MgPSBmYWxzZTsKQEAgLTgyNiwxMSArODMxLDEyIEBACiAJfQogCiAJLyogR2V0IHBvaW50ZXIgdG8gdHR5ICovCi0JdHR5ID0gZWRnZV9wb3J0LT5wb3J0LT5wb3J0LnR0eTsKKwl0dHkgPSB0dHlfcG9ydF90dHlfZ2V0KCZlZGdlX3BvcnQtPnBvcnQtPnBvcnQpOwogCiAJLyogdGVsbCB0aGUgdHR5IGRyaXZlciB0aGF0IHNvbWV0aGluZyBoYXMgY2hhbmdlZCAqLwogCWlmICh0dHkgJiYgZWRnZV9wb3J0LT5vcGVuKQogCQl0dHlfd2FrZXVwKHR0eSk7CisJdHR5X2tyZWZfcHV0KHR0eSk7CiAKIAkvKiB3ZSBoYXZlIGNvbXBsZXRlZCB0aGUgY29tbWFuZCAqLwogCWVkZ2VfcG9ydC0+Y29tbWFuZFBlbmRpbmcgPSBmYWxzZTsKQEAgLTE5MzIsMTEgKzE5MzgsMTMgQEAKIAkJCQkJCQllZGdlX3NlcmlhbC0+cnhQb3J0XTsKIAkJCQllZGdlX3BvcnQgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CiAJCQkJaWYgKGVkZ2VfcG9ydC0+b3BlbikgewotCQkJCQl0dHkgPSBlZGdlX3BvcnQtPnBvcnQtPnBvcnQudHR5OworCQkJCQl0dHkgPSB0dHlfcG9ydF90dHlfZ2V0KAorCQkJCQkJJmVkZ2VfcG9ydC0+cG9ydC0+cG9ydCk7CiAJCQkJCWlmICh0dHkpIHsKIAkJCQkJCWRiZygiJXMgLSBTZW5kaW5nICVkIGJ5dGVzIHRvIFRUWSBmb3IgcG9ydCAlZCIsCiAJCQkJCQkJX19mdW5jX18sIHJ4TGVuLCBlZGdlX3NlcmlhbC0+cnhQb3J0KTsKIAkJCQkJCWVkZ2VfdHR5X3JlY3YoJmVkZ2Vfc2VyaWFsLT5zZXJpYWwtPmRldi0+ZGV2LCB0dHksIGJ1ZmZlciwgcnhMZW4pOworCQkJCQkJdHR5X2tyZWZfcHV0KHR0eSk7CiAJCQkJCX0KIAkJCQkJZWRnZV9wb3J0LT5pY291bnQucnggKz0gcnhMZW47CiAJCQkJfQpAQCAtMTk3MSw2ICsxOTc5LDcgQEAKIHsKIAlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0OwogCXN0cnVjdCBlZGdlcG9ydF9wb3J0ICplZGdlX3BvcnQ7CisJc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eTsKIAlfX3U4IGNvZGUgPSBlZGdlX3NlcmlhbC0+cnhTdGF0dXNDb2RlOwogCiAJLyogc3dpdGNoIHRoZSBwb3J0IHBvaW50ZXIgdG8gdGhlIG9uZSBiZWluZyBjdXJyZW50bHkgdGFsa2VkIGFib3V0ICovCkBAIC0yMDIwLDEwICsyMDI5LDEyIEBACiAKIAkJLyogc2VuZCB0aGUgY3VycmVudCBsaW5lIHNldHRpbmdzIHRvIHRoZSBwb3J0IHNvIHdlIGFyZQogCQkgICBpbiBzeW5jIHdpdGggYW55IGZ1cnRoZXIgdGVybWlvcyBjYWxscyAqLwotCQkvKiBGSVhNRTogbG9ja2luZyBvbiB0dHkgKi8KLQkJaWYgKGVkZ2VfcG9ydC0+cG9ydC0+cG9ydC50dHkpCi0JCQljaGFuZ2VfcG9ydF9zZXR0aW5ncyhlZGdlX3BvcnQtPnBvcnQtPnBvcnQudHR5LAotCQkJCWVkZ2VfcG9ydCwgZWRnZV9wb3J0LT5wb3J0LT5wb3J0LnR0eS0+dGVybWlvcyk7CisJCXR0eSA9IHR0eV9wb3J0X3R0eV9nZXQoJmVkZ2VfcG9ydC0+cG9ydC0+cG9ydCk7CisJCWlmICh0dHkpIHsKKwkJCWNoYW5nZV9wb3J0X3NldHRpbmdzKHR0eSwKKwkJCQllZGdlX3BvcnQsIHR0eS0+dGVybWlvcyk7CisJCQl0dHlfa3JlZl9wdXQodHR5KTsKKwkJfQogCiAJCS8qIHdlIGhhdmUgY29tcGxldGVkIHRoZSBvcGVuICovCiAJCWVkZ2VfcG9ydC0+b3BlblBlbmRpbmcgPSBmYWxzZTsKQEAgLTIxNjMsMTAgKzIxNzQsMTQgQEAKIAl9CiAKIAkvKiBQbGFjZSBMU1IgZGF0YSBieXRlIGludG8gUnggYnVmZmVyICovCi0JaWYgKGxzckRhdGEgJiYgZWRnZV9wb3J0LT5wb3J0LT5wb3J0LnR0eSkKLQkJZWRnZV90dHlfcmVjdigmZWRnZV9wb3J0LT5wb3J0LT5kZXYsCi0JCQkJCWVkZ2VfcG9ydC0+cG9ydC0+cG9ydC50dHksICZkYXRhLCAxKTsKLQorCWlmIChsc3JEYXRhKSB7CisJCXN0cnVjdCB0dHlfc3RydWN0ICp0dHkgPQorCQkJCXR0eV9wb3J0X3R0eV9nZXQoJmVkZ2VfcG9ydC0+cG9ydC0+cG9ydCk7CisJCWlmICh0dHkpIHsKKwkJCWVkZ2VfdHR5X3JlY3YoJmVkZ2VfcG9ydC0+cG9ydC0+ZGV2LCB0dHksICZkYXRhLCAxKTsKKwkJCXR0eV9rcmVmX3B1dCh0dHkpOworCQl9CisJfQogCS8qIHVwZGF0ZSBpbnB1dCBsaW5lIGNvdW50ZXJzICovCiAJaWNvdW50ID0gJmVkZ2VfcG9ydC0+aWNvdW50OwogCWlmIChuZXdMc3IgJiBMU1JfQlJFQUspCkBAIC0zMDk0LDEzICszMTA5LDEzIEBACiAJCQkJZWRnZV9zZXJpYWwtPmludGVycnVwdF9yZWFkX3VyYiA9CiAJCQkJCQl1c2JfYWxsb2NfdXJiKDAsIEdGUF9LRVJORUwpOwogCQkJCWlmICghZWRnZV9zZXJpYWwtPmludGVycnVwdF9yZWFkX3VyYikgewotCQkJCQllcnIoIm91dCBvZiBtZW1vcnkiKTsKKwkJCQkJZGV2X2VycigmZGV2LT5kZXYsICJvdXQgb2YgbWVtb3J5XG4iKTsKIAkJCQkJcmV0dXJuIC1FTk9NRU07CiAJCQkJfQogCQkJCWVkZ2Vfc2VyaWFsLT5pbnRlcnJ1cHRfaW5fYnVmZmVyID0KIAkJCQkJa21hbGxvYyhidWZmZXJfc2l6ZSwgR0ZQX0tFUk5FTCk7CiAJCQkJaWYgKCFlZGdlX3NlcmlhbC0+aW50ZXJydXB0X2luX2J1ZmZlcikgewotCQkJCQllcnIoIm91dCBvZiBtZW1vcnkiKTsKKwkJCQkJZGV2X2VycigmZGV2LT5kZXYsICJvdXQgb2YgbWVtb3J5XG4iKTsKIAkJCQkJdXNiX2ZyZWVfdXJiKGVkZ2Vfc2VyaWFsLT5pbnRlcnJ1cHRfcmVhZF91cmIpOwogCQkJCQlyZXR1cm4gLUVOT01FTTsKIAkJCQl9CkBAIC0zMTMxLDEzICszMTQ2LDEzIEBACiAJCQkJZWRnZV9zZXJpYWwtPnJlYWRfdXJiID0KIAkJCQkJCXVzYl9hbGxvY191cmIoMCwgR0ZQX0tFUk5FTCk7CiAJCQkJaWYgKCFlZGdlX3NlcmlhbC0+cmVhZF91cmIpIHsKLQkJCQkJZXJyKCJvdXQgb2YgbWVtb3J5Iik7CisJCQkJCWRldl9lcnIoJmRldi0+ZGV2LCAib3V0IG9mIG1lbW9yeVxuIik7CiAJCQkJCXJldHVybiAtRU5PTUVNOwogCQkJCX0KIAkJCQllZGdlX3NlcmlhbC0+YnVsa19pbl9idWZmZXIgPQogCQkJCQlrbWFsbG9jKGJ1ZmZlcl9zaXplLCBHRlBfS0VSTkVMKTsKIAkJCQlpZiAoIWVkZ2Vfc2VyaWFsLT5idWxrX2luX2J1ZmZlcikgewotCQkJCQllcnIoIm91dCBvZiBtZW1vcnkiKTsKKwkJCQkJZGV2X2VycigmZGV2LT5kZXYsICJvdXQgb2YgbWVtb3J5XG4iKTsKIAkJCQkJdXNiX2ZyZWVfdXJiKGVkZ2Vfc2VyaWFsLT5yZWFkX3VyYik7CiAJCQkJCXJldHVybiAtRU5PTUVNOwogCQkJCX0KQEAgLTMxNjYsNyArMzE4MSw4IEBACiAJCX0KIAogCQlpZiAoIWludGVycnVwdF9pbl9mb3VuZCB8fCAhYnVsa19pbl9mb3VuZCB8fCAhYnVsa19vdXRfZm91bmQpIHsKLQkJCWVycigiRXJyb3IgLSB0aGUgcHJvcGVyIGVuZHBvaW50cyB3ZXJlIG5vdCBmb3VuZCEiKTsKKwkJCWRldl9lcnIoJmRldi0+ZGV2LCAiRXJyb3IgLSB0aGUgcHJvcGVyIGVuZHBvaW50cyAiCisJCQkJIndlcmUgbm90IGZvdW5kIVxuIik7CiAJCQlyZXR1cm4gLUVOT0RFVjsKIAkJfQogCkBAIC0zMTc1LDggKzMxOTEsOSBAQAogCQlyZXNwb25zZSA9IHVzYl9zdWJtaXRfdXJiKGVkZ2Vfc2VyaWFsLT5pbnRlcnJ1cHRfcmVhZF91cmIsCiAJCQkJCQkJCUdGUF9LRVJORUwpOwogCQlpZiAocmVzcG9uc2UpCi0JCQllcnIoIiVzIC0gRXJyb3IgJWQgc3VibWl0dGluZyBjb250cm9sIHVyYiIsCi0JCQkJCQkJX19mdW5jX18sIHJlc3BvbnNlKTsKKwkJCWRldl9lcnIoJmRldi0+ZGV2LAorCQkJCSIlcyAtIEVycm9yICVkIHN1Ym1pdHRpbmcgY29udHJvbCB1cmJcbiIsCisJCQkJX19mdW5jX18sIHJlc3BvbnNlKTsKIAl9CiAJcmV0dXJuIHJlc3BvbnNlOwogfQpAQCAtMzIzOCw3ICszMjU1LDggQEAKIAlpZiAocmV0dmFsKQogCQlnb3RvIGZhaWxlZF91c2JfcmVnaXN0ZXI7CiAJYXRvbWljX3NldCgmQ21kVXJicywgMCk7Ci0JaW5mbyhEUklWRVJfREVTQyAiICIgRFJJVkVSX1ZFUlNJT04pOworCXByaW50ayhLRVJOX0lORk8gS0JVSUxEX01PRE5BTUUgIjogIiBEUklWRVJfVkVSU0lPTiAiOiIKKwkgICAgICAgRFJJVkVSX0RFU0MgIlxuIik7CiAJcmV0dXJuIDA7CiAKIGZhaWxlZF91c2JfcmVnaXN0ZXI6CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvaW9fdGkuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9pb190aS5jCmluZGV4IGNiNGM1NDMuLmMzY2RkMDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9pb190aS5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9pb190aS5jCkBAIC01NzIsNyArNTcyLDcgQEAKIAkJCQkJCQkJaW50IGZsdXNoKQogewogCWludCBiYXVkX3JhdGU7Ci0Jc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSA9IHBvcnQtPnBvcnQtPnBvcnQudHR5OworCXN0cnVjdCB0dHlfc3RydWN0ICp0dHkgPSB0dHlfcG9ydF90dHlfZ2V0KCZwb3J0LT5wb3J0LT5wb3J0KTsKIAl3YWl0X3F1ZXVlX3Qgd2FpdDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCkBAIC01OTksNiArNTk5LDcgQEAKIAlpZiAoZmx1c2gpCiAJCWVkZ2VfYnVmX2NsZWFyKHBvcnQtPmVwX291dF9idWYpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBvcnQtPmVwX2xvY2ssIGZsYWdzKTsKKwl0dHlfa3JlZl9wdXQodHR5KTsKIAogCS8qIHdhaXQgZm9yIGRhdGEgdG8gZHJhaW4gZnJvbSB0aGUgZGV2aWNlICovCiAJdGltZW91dCArPSBqaWZmaWVzOwpAQCAtMTU1NCw3ICsxNTU1LDcgQEAKIAkvKiBTYXZlIHRoZSBuZXcgbW9kZW0gc3RhdHVzICovCiAJZWRnZV9wb3J0LT5zaGFkb3dfbXNyID0gbXNyICYgMHhmMDsKIAotCXR0eSA9IGVkZ2VfcG9ydC0+cG9ydC0+cG9ydC50dHk7CisJdHR5ID0gdHR5X3BvcnRfdHR5X2dldCgmZWRnZV9wb3J0LT5wb3J0LT5wb3J0KTsKIAkvKiBoYW5kbGUgQ1RTIGZsb3cgY29udHJvbCAqLwogCWlmICh0dHkgJiYgQ19DUlRTQ1RTKHR0eSkpIHsKIAkJaWYgKG1zciAmIEVER0VQT1JUX01TUl9DVFMpIHsKQEAgLTE1NjQsNiArMTU2NSw3IEBACiAJCQl0dHktPmh3X3N0b3BwZWQgPSAxOwogCQl9CiAJfQorCXR0eV9rcmVmX3B1dCh0dHkpOwogCiAJcmV0dXJuOwogfQpAQCAtMTU3NCw2ICsxNTc2LDcgQEAKIAlzdHJ1Y3QgYXN5bmNfaWNvdW50ICppY291bnQ7CiAJX191OCBuZXdfbHNyID0gKF9fdTgpKGxzciAmIChfX3U4KShMU1JfT1ZFUl9FUlIgfCBMU1JfUEFSX0VSUiB8CiAJCQkJCQlMU1JfRlJNX0VSUiB8IExTUl9CUkVBSykpOworCXN0cnVjdCB0dHlfc3RydWN0ICp0dHk7CiAKIAlkYmcoIiVzIC0gJTAyeCIsIF9fZnVuY19fLCBuZXdfbHNyKTsKIApAQCAtMTU4Nyw4ICsxNTkwLDEzIEBACiAJCW5ld19sc3IgJj0gKF9fdTgpKExTUl9PVkVSX0VSUiB8IExTUl9CUkVBSyk7CiAKIAkvKiBQbGFjZSBMU1IgZGF0YSBieXRlIGludG8gUnggYnVmZmVyICovCi0JaWYgKGxzcl9kYXRhICYmIGVkZ2VfcG9ydC0+cG9ydC0+cG9ydC50dHkpCi0JCWVkZ2VfdHR5X3JlY3YoJmVkZ2VfcG9ydC0+cG9ydC0+ZGV2LCBlZGdlX3BvcnQtPnBvcnQtPnBvcnQudHR5LCAmZGF0YSwgMSk7CisJaWYgKGxzcl9kYXRhKSB7CisJCXR0eSA9IHR0eV9wb3J0X3R0eV9nZXQoJmVkZ2VfcG9ydC0+cG9ydC0+cG9ydCk7CisJCWlmICh0dHkpIHsKKwkJCWVkZ2VfdHR5X3JlY3YoJmVkZ2VfcG9ydC0+cG9ydC0+ZGV2LCB0dHksICZkYXRhLCAxKTsKKwkJCXR0eV9rcmVmX3B1dCh0dHkpOworCQl9CisJfQogCiAJLyogdXBkYXRlIGlucHV0IGxpbmUgY291bnRlcnMgKi8KIAlpY291bnQgPSAmZWRnZV9wb3J0LT5pY291bnQ7CkBAIC0xNzQ5LDcgKzE3NTcsNyBAQAogCQkrK2RhdGE7CiAJfQogCi0JdHR5ID0gZWRnZV9wb3J0LT5wb3J0LT5wb3J0LnR0eTsKKwl0dHkgPSB0dHlfcG9ydF90dHlfZ2V0KCZlZGdlX3BvcnQtPnBvcnQtPnBvcnQpOwogCWlmICh0dHkgJiYgdXJiLT5hY3R1YWxfbGVuZ3RoKSB7CiAJCXVzYl9zZXJpYWxfZGVidWdfZGF0YShkZWJ1ZywgJmVkZ2VfcG9ydC0+cG9ydC0+ZGV2LAogCQkJCQlfX2Z1bmNfXywgdXJiLT5hY3R1YWxfbGVuZ3RoLCBkYXRhKTsKQEAgLTE3NjEsNiArMTc2OSw3IEBACiAJCQkJCQkJdXJiLT5hY3R1YWxfbGVuZ3RoKTsKIAkJZWRnZV9wb3J0LT5pY291bnQucnggKz0gdXJiLT5hY3R1YWxfbGVuZ3RoOwogCX0KKwl0dHlfa3JlZl9wdXQodHR5KTsKIAogZXhpdDoKIAkvKiBjb250aW51ZSByZWFkIHVubGVzcyBzdG9wcGVkICovCkBAIC0xNzk2LDYgKzE4MDUsNyBAQAogCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSB1cmItPmNvbnRleHQ7CiAJc3RydWN0IGVkZ2Vwb3J0X3BvcnQgKmVkZ2VfcG9ydCA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKIAlpbnQgc3RhdHVzID0gdXJiLT5zdGF0dXM7CisJc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eTsKIAogCWRiZygiJXMgLSBwb3J0ICVkIiwgX19mdW5jX18sIHBvcnQtPm51bWJlcik7CiAKQEAgLTE4MTgsNyArMTgyOCw5IEBACiAJfQogCiAJLyogc2VuZCBhbnkgYnVmZmVyZWQgZGF0YSAqLwotCWVkZ2Vfc2VuZChwb3J0LT5wb3J0LnR0eSk7CisJdHR5ID0gdHR5X3BvcnRfdHR5X2dldCgmcG9ydC0+cG9ydCk7CisJZWRnZV9zZW5kKHR0eSk7CisJdHR5X2tyZWZfcHV0KHR0eSk7CiB9CiAKIHN0YXRpYyBpbnQgZWRnZV9vcGVuKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksCkBAIC0xODc2LDcgKzE4ODgsNyBAQAogCiAJLyogc2V0IHVwIHRoZSBwb3J0IHNldHRpbmdzICovCiAJaWYgKHR0eSkKLQkJZWRnZV9zZXRfdGVybWlvcyh0dHksIHBvcnQsIHBvcnQtPnBvcnQudHR5LT50ZXJtaW9zKTsKKwkJZWRnZV9zZXRfdGVybWlvcyh0dHksIHBvcnQsIHR0eS0+dGVybWlvcyk7CiAKIAkvKiBvcGVuIHVwIHRoZSBwb3J0ICovCiAKQEAgLTI5NjYsNyArMjk3OCw4IEBACiAJcmV0dmFsID0gdXNiX3JlZ2lzdGVyKCZpb19kcml2ZXIpOwogCWlmIChyZXR2YWwpCiAJCWdvdG8gZmFpbGVkX3VzYl9yZWdpc3RlcjsKLQlpbmZvKERSSVZFUl9ERVNDICIgIiBEUklWRVJfVkVSU0lPTik7CisJcHJpbnRrKEtFUk5fSU5GTyBLQlVJTERfTU9ETkFNRSAiOiAiIERSSVZFUl9WRVJTSU9OICI6IgorCSAgICAgICBEUklWRVJfREVTQyAiXG4iKTsKIAlyZXR1cm4gMDsKIGZhaWxlZF91c2JfcmVnaXN0ZXI6CiAJdXNiX3NlcmlhbF9kZXJlZ2lzdGVyKCZlZGdlcG9ydF8ycG9ydF9kZXZpY2UpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2lwYXEuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9pcGFxLmMKaW5kZXggY2Q5YTJlMTMuLjEzMmJlNzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9pcGFxLmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2lwYXEuYwpAQCAtNjA4LDcgKzYwOCw3IEBACiAJYnl0ZXNfb3V0ID0gMDsKIAlwcml2ID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGlwYXFfcHJpdmF0ZSksIEdGUF9LRVJORUwpOwogCWlmIChwcml2ID09IE5VTEwpIHsKLQkJZXJyKCIlcyAtIE91dCBvZiBtZW1vcnkiLCBfX2Z1bmNfXyk7CisJCWRldl9lcnIoJnBvcnQtPmRldiwgIiVzIC0gT3V0IG9mIG1lbW9yeVxuIiwgX19mdW5jX18pOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAJdXNiX3NldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQsIHByaXYpOwpAQCAtNjkzLDggKzY5Myw3IEBACiAJfQogCiAJaWYgKCFyZXRyaWVzICYmIHJlc3VsdCkgewotCQllcnIoIiVzIC0gZmFpbGVkIGRvaW5nIGNvbnRyb2wgdXJiLCBlcnJvciAlZCIsIF9fZnVuY19fLAotCQkgICAgcmVzdWx0KTsKKwkJZGV2X2VycigmcG9ydC0+ZGV2LCAiJXMgLSBmYWlsZWQgZG9pbmcgY29udHJvbCB1cmIsIGVycm9yICVkXG4iLAkJCV9fZnVuY19fLCByZXN1bHQpOwogCQlnb3RvIGVycm9yOwogCX0KIApAQCAtNzA3LDggKzcwNiw5IEBACiAKIAlyZXN1bHQgPSB1c2Jfc3VibWl0X3VyYihwb3J0LT5yZWFkX3VyYiwgR0ZQX0tFUk5FTCk7CiAJaWYgKHJlc3VsdCkgewotCQllcnIoIiVzIC0gZmFpbGVkIHN1Ym1pdHRpbmcgcmVhZCB1cmIsIGVycm9yICVkIiwKLQkJCQkJCV9fZnVuY19fLCByZXN1bHQpOworCQlkZXZfZXJyKCZwb3J0LT5kZXYsCisJCQkiJXMgLSBmYWlsZWQgc3VibWl0dGluZyByZWFkIHVyYiwgZXJyb3IgJWRcbiIsCisJCQlfX2Z1bmNfXywgcmVzdWx0KTsKIAkJZ290byBlcnJvcjsKIAl9CiAKQEAgLTcxNiw3ICs3MTYsNyBAQAogCiBlbm9tZW06CiAJcmVzdWx0ID0gLUVOT01FTTsKLQllcnIoIiVzIC0gT3V0IG9mIG1lbW9yeSIsIF9fZnVuY19fKTsKKwlkZXZfZXJyKCZwb3J0LT5kZXYsICIlcyAtIE91dCBvZiBtZW1vcnlcbiIsIF9fZnVuY19fKTsKIGVycm9yOgogCWlwYXFfZGVzdHJveV9saXN0cyhwb3J0KTsKIAlrZnJlZShwcml2KTsKQEAgLTc2NCwxMyArNzY0LDE0IEBACiAJdXNiX3NlcmlhbF9kZWJ1Z19kYXRhKGRlYnVnLCAmcG9ydC0+ZGV2LCBfX2Z1bmNfXywKIAkJCQkJCXVyYi0+YWN0dWFsX2xlbmd0aCwgZGF0YSk7CiAKLQl0dHkgPSBwb3J0LT5wb3J0LnR0eTsKKwl0dHkgPSB0dHlfcG9ydF90dHlfZ2V0KCZwb3J0LT5wb3J0KTsKIAlpZiAodHR5ICYmIHVyYi0+YWN0dWFsX2xlbmd0aCkgewogCQl0dHlfYnVmZmVyX3JlcXVlc3Rfcm9vbSh0dHksIHVyYi0+YWN0dWFsX2xlbmd0aCk7CiAJCXR0eV9pbnNlcnRfZmxpcF9zdHJpbmcodHR5LCBkYXRhLCB1cmItPmFjdHVhbF9sZW5ndGgpOwogCQl0dHlfZmxpcF9idWZmZXJfcHVzaCh0dHkpOwogCQlieXRlc19pbiArPSB1cmItPmFjdHVhbF9sZW5ndGg7CiAJfQorCXR0eV9rcmVmX3B1dCh0dHkpOwogCiAJLyogQ29udGludWUgdHJ5aW5nIHRvIGFsd2F5cyByZWFkICAqLwogCXVzYl9maWxsX2J1bGtfdXJiKHBvcnQtPnJlYWRfdXJiLCBwb3J0LT5zZXJpYWwtPmRldiwKQEAgLTc4MCw4ICs3ODEsOSBAQAogCSAgICBpcGFxX3JlYWRfYnVsa19jYWxsYmFjaywgcG9ydCk7CiAJcmVzdWx0ID0gdXNiX3N1Ym1pdF91cmIocG9ydC0+cmVhZF91cmIsIEdGUF9BVE9NSUMpOwogCWlmIChyZXN1bHQpCi0JCWVycigiJXMgLSBmYWlsZWQgcmVzdWJtaXR0aW5nIHJlYWQgdXJiLCBlcnJvciAlZCIsCi0JCQkJCQkJX19mdW5jX18sIHJlc3VsdCk7CisJCWRldl9lcnIoJnBvcnQtPmRldiwKKwkJCSIlcyAtIGZhaWxlZCByZXN1Ym1pdHRpbmcgcmVhZCB1cmIsIGVycm9yICVkXG4iLAorCQkJX19mdW5jX18sIHJlc3VsdCk7CiAJcmV0dXJuOwogfQogCkBAIC04NDYsNyArODQ4LDggQEAKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmd3JpdGVfbGlzdF9sb2NrLCBmbGFncyk7CiAJCXJlc3VsdCA9IHVzYl9zdWJtaXRfdXJiKHBvcnQtPndyaXRlX3VyYiwgR0ZQX0FUT01JQyk7CiAJCWlmIChyZXN1bHQpCi0JCQllcnIoIiVzIC0gZmFpbGVkIHN1Ym1pdHRpbmcgd3JpdGUgdXJiLCBlcnJvciAlZCIsCisJCQlkZXZfZXJyKCZwb3J0LT5kZXYsCisJCQkJIiVzIC0gZmFpbGVkIHN1Ym1pdHRpbmcgd3JpdGUgdXJiLCBlcnJvciAlZFxuIiwKIAkJCQlfX2Z1bmNfXywgcmVzdWx0KTsKIAl9IGVsc2UgewogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ3cml0ZV9saXN0X2xvY2ssIGZsYWdzKTsKQEAgLTkwOCw4ICs5MTEsOSBAQAogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ3cml0ZV9saXN0X2xvY2ssIGZsYWdzKTsKIAkJcmVzdWx0ID0gdXNiX3N1Ym1pdF91cmIocG9ydC0+d3JpdGVfdXJiLCBHRlBfQVRPTUlDKTsKIAkJaWYgKHJlc3VsdCkKLQkJCWVycigiJXMgLSBmYWlsZWQgc3VibWl0dGluZyB3cml0ZSB1cmIsIGVycm9yICVkIiwKLQkJCQkJX19mdW5jX18sIHJlc3VsdCk7CisJCQlkZXZfZXJyKCZwb3J0LT5kZXYsCisJCQkJIiVzIC0gZmFpbGVkIHN1Ym1pdHRpbmcgd3JpdGUgdXJiLCBlcnJvciAlZFxuIiwKKwkJCQlfX2Z1bmNfXywgcmVzdWx0KTsKIAl9IGVsc2UgewogCQlwcml2LT5hY3RpdmUgPSAwOwogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ3cml0ZV9saXN0X2xvY2ssIGZsYWdzKTsKQEAgLTk1Niw3ICs5NjAsNyBAQAogewogCWRiZygiJXMiLCBfX2Z1bmNfXyk7CiAJaWYgKHNlcmlhbC0+ZGV2LT5hY3Rjb25maWctPmRlc2MuYkNvbmZpZ3VyYXRpb25WYWx1ZSAhPSAxKSB7Ci0JCWVycigiYWN0aXZlIGNvbmZpZyAjJWQgIT0gMSA/PyIsCisJCWRldl9lcnIoJnNlcmlhbC0+ZGV2LT5kZXYsICJhY3RpdmUgY29uZmlnICMlZCAhPSAxID8/XG4iLAogCQkJc2VyaWFsLT5kZXYtPmFjdGNvbmZpZy0+ZGVzYy5iQ29uZmlndXJhdGlvblZhbHVlKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQpAQCAtOTc1LDcgKzk3OSw2IEBACiAJcmV0dmFsID0gdXNiX3NlcmlhbF9yZWdpc3RlcigmaXBhcV9kZXZpY2UpOwogCWlmIChyZXR2YWwpCiAJCWdvdG8gZmFpbGVkX3VzYl9zZXJpYWxfcmVnaXN0ZXI7Ci0JaW5mbyhEUklWRVJfREVTQyAiICIgRFJJVkVSX1ZFUlNJT04pOwogCWlmICh2ZW5kb3IpIHsKIAkJaXBhcV9pZF90YWJsZVswXS5pZFZlbmRvciA9IHZlbmRvcjsKIAkJaXBhcV9pZF90YWJsZVswXS5pZFByb2R1Y3QgPSBwcm9kdWN0OwpAQCAtOTg0LDYgKzk4Nyw4IEBACiAJaWYgKHJldHZhbCkKIAkJZ290byBmYWlsZWRfdXNiX3JlZ2lzdGVyOwogCisJcHJpbnRrKEtFUk5fSU5GTyBLQlVJTERfTU9ETkFNRSAiOiAiIERSSVZFUl9WRVJTSU9OICI6IgorCSAgICAgICBEUklWRVJfREVTQyAiXG4iKTsKIAlyZXR1cm4gMDsKIGZhaWxlZF91c2JfcmVnaXN0ZXI6CiAJdXNiX3NlcmlhbF9kZXJlZ2lzdGVyKCZpcGFxX2RldmljZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvaXB3LmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvaXB3LmMKaW5kZXggYTg0MjAyNS4uM2FjNTlhOCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL2lwdy5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9pcHcuYwpAQCAtMTcwLDEyICsxNzAsMTMgQEAKIAl1c2Jfc2VyaWFsX2RlYnVnX2RhdGEoZGVidWcsICZwb3J0LT5kZXYsIF9fZnVuY19fLAogCQkJCQl1cmItPmFjdHVhbF9sZW5ndGgsIGRhdGEpOwogCi0JdHR5ID0gcG9ydC0+cG9ydC50dHk7CisJdHR5ID0gdHR5X3BvcnRfdHR5X2dldCgmcG9ydC0+cG9ydCk7CiAJaWYgKHR0eSAmJiB1cmItPmFjdHVhbF9sZW5ndGgpIHsKIAkJdHR5X2J1ZmZlcl9yZXF1ZXN0X3Jvb20odHR5LCB1cmItPmFjdHVhbF9sZW5ndGgpOwogCQl0dHlfaW5zZXJ0X2ZsaXBfc3RyaW5nKHR0eSwgZGF0YSwgdXJiLT5hY3R1YWxfbGVuZ3RoKTsKIAkJdHR5X2ZsaXBfYnVmZmVyX3B1c2godHR5KTsKIAl9CisJdHR5X2tyZWZfcHV0KHR0eSk7CiAKIAkvKiBDb250aW51ZSB0cnlpbmcgdG8gYWx3YXlzIHJlYWQgICovCiAJdXNiX2ZpbGxfYnVsa191cmIocG9ydC0+cmVhZF91cmIsIHBvcnQtPnNlcmlhbC0+ZGV2LApAQCAtNDg0LDcgKzQ4NSw4IEBACiAJCXVzYl9zZXJpYWxfZGVyZWdpc3RlcigmaXB3X2RldmljZSk7CiAJCXJldHVybiByZXR2YWw7CiAJfQotCWluZm8oRFJJVkVSX0RFU0MgIiAiIERSSVZFUl9WRVJTSU9OKTsKKwlwcmludGsoS0VSTl9JTkZPIEtCVUlMRF9NT0ROQU1FICI6ICIgRFJJVkVSX1ZFUlNJT04gIjoiCisJICAgICAgIERSSVZFUl9ERVNDICJcbiIpOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvaXItdXNiLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvaXItdXNiLmMKaW5kZXggZTU5MTU1Yy4uYjY3OWE1NSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL2lyLXVzYi5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9pci11c2IuYwpAQCAtNDY1LDExICs0NjUsMTIgQEAKIAkJCWlyX2JhdWQgPSAqZGF0YSAmIDB4MGY7CiAJCXVzYl9zZXJpYWxfZGVidWdfZGF0YShkZWJ1ZywgJnBvcnQtPmRldiwgX19mdW5jX18sCiAJCQkJCQl1cmItPmFjdHVhbF9sZW5ndGgsIGRhdGEpOwotIAkJdHR5ID0gcG9ydC0+cG9ydC50dHk7CisJCXR0eSA9IHR0eV9wb3J0X3R0eV9nZXQoJnBvcnQtPnBvcnQpOwogCQlpZiAodHR5X2J1ZmZlcl9yZXF1ZXN0X3Jvb20odHR5LCB1cmItPmFjdHVhbF9sZW5ndGggLSAxKSkgewogCQkJdHR5X2luc2VydF9mbGlwX3N0cmluZyh0dHksIGRhdGErMSwgdXJiLT5hY3R1YWxfbGVuZ3RoIC0gMSk7CiAJCQl0dHlfZmxpcF9idWZmZXJfcHVzaCh0dHkpOwogCQl9CisJCXR0eV9rcmVmX3B1dCh0dHkpOwogCiAJCS8qCiAJCSAqIE5vIGJyZWFrIGhlcmUuCkBAIC02MDEsNyArNjAyLDggQEAKIAlpZiAocmV0dmFsKQogCQlnb3RvIGZhaWxlZF91c2JfcmVnaXN0ZXI7CiAKLQlpbmZvKERSSVZFUl9ERVNDICIgIiBEUklWRVJfVkVSU0lPTik7CisJcHJpbnRrKEtFUk5fSU5GTyBLQlVJTERfTU9ETkFNRSAiOiAiIERSSVZFUl9WRVJTSU9OICI6IgorCSAgICAgICBEUklWRVJfREVTQyAiXG4iKTsKIAogCXJldHVybiAwOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvaXV1X3Bob2VuaXguYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9pdXVfcGhvZW5peC5jCmluZGV4IGRkZmYzN2YuLmUzMjA5NzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9pdXVfcGhvZW5peC5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9pdXVfcGhvZW5peC5jCkBAIC02MjksMTMgKzYyOSwxNCBAQAogCX0KIAogCWRiZygiJXMgLSAlaSBjaGFycyB0byB3cml0ZSIsIF9fZnVuY19fLCB1cmItPmFjdHVhbF9sZW5ndGgpOwotCXR0eSA9IHBvcnQtPnBvcnQudHR5OworCXR0eSA9IHR0eV9wb3J0X3R0eV9nZXQoJnBvcnQtPnBvcnQpOwogCWlmIChkYXRhID09IE5VTEwpCiAJCWRiZygiJXMgLSBkYXRhIGlzIE5VTEwgISEhIiwgX19mdW5jX18pOwogCWlmICh0dHkgJiYgdXJiLT5hY3R1YWxfbGVuZ3RoICYmIGRhdGEpIHsKIAkJdHR5X2luc2VydF9mbGlwX3N0cmluZyh0dHksIGRhdGEsIHVyYi0+YWN0dWFsX2xlbmd0aCk7CiAJCXR0eV9mbGlwX2J1ZmZlcl9wdXNoKHR0eSk7CiAJfQorCXR0eV9rcmVmX3B1dCh0dHkpOwogCWl1dV9sZWRfYWN0aXZpdHlfb24odXJiKTsKIH0KIApAQCAtMTE4NCw3ICsxMTg1LDggQEAKIAlyZXR2YWwgPSB1c2JfcmVnaXN0ZXIoJml1dV9kcml2ZXIpOwogCWlmIChyZXR2YWwpCiAJCWdvdG8gZmFpbGVkX3VzYl9yZWdpc3RlcjsKLQlpbmZvKERSSVZFUl9ERVNDICIgIiBEUklWRVJfVkVSU0lPTik7CisJcHJpbnRrKEtFUk5fSU5GTyBLQlVJTERfTU9ETkFNRSAiOiAiIERSSVZFUl9WRVJTSU9OICI6IgorCSAgICAgICBEUklWRVJfREVTQyAiXG4iKTsKIAlyZXR1cm4gMDsKIGZhaWxlZF91c2JfcmVnaXN0ZXI6CiAJdXNiX3NlcmlhbF9kZXJlZ2lzdGVyKCZpdXVfZGV2aWNlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9rZXlzcGFuLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwva2V5c3Bhbi5jCmluZGV4IDcwNDcxNmYuLjk4NzhjMGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9rZXlzcGFuLmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2tleXNwYW4uYwpAQCAtMjE3LDcgKzIxNyw4IEBACiAJaWYgKHJldHZhbCkKIAkJZ290byBmYWlsZWRfdXNiX3JlZ2lzdGVyOwogCi0JaW5mbyhEUklWRVJfVkVSU0lPTiAiOiIgRFJJVkVSX0RFU0MpOworCXByaW50ayhLRVJOX0lORk8gS0JVSUxEX01PRE5BTUUgIjogIiBEUklWRVJfVkVSU0lPTiAiOiIKKwkgICAgICAgRFJJVkVSX0RFU0MgIlxuIik7CiAKIAlyZXR1cm4gMDsKIGZhaWxlZF91c2JfcmVnaXN0ZXI6CkBAIC00MzAsNyArNDMxLDcgQEAKIAl9CiAKIAlwb3J0ID0gIHVyYi0+Y29udGV4dDsKLQl0dHkgPSBwb3J0LT5wb3J0LnR0eTsKKwl0dHkgPSB0dHlfcG9ydF90dHlfZ2V0KCZwb3J0LT5wb3J0KTsKIAlpZiAodHR5ICYmIHVyYi0+YWN0dWFsX2xlbmd0aCkgewogCQkvKiAweDgwIGJpdCBpcyBlcnJvciBmbGFnICovCiAJCWlmICgoZGF0YVswXSAmIDB4ODApID09IDApIHsKQEAgLTQ1OSw2ICs0NjAsNyBAQAogCQl9CiAJCXR0eV9mbGlwX2J1ZmZlcl9wdXNoKHR0eSk7CiAJfQorCXR0eV9rcmVmX3B1dCh0dHkpOwogCiAJLyogUmVzdWJtaXQgdXJiIHNvIHdlIGNvbnRpbnVlIHJlY2VpdmluZyAqLwogCXVyYi0+ZGV2ID0gcG9ydC0+c2VyaWFsLT5kZXY7CkBAIC01MTMsNiArNTE1LDcgQEAKIAlzdHJ1Y3QgdXNiX3NlcmlhbAkJCSpzZXJpYWw7CiAJc3RydWN0IHVzYl9zZXJpYWxfcG9ydAkJCSpwb3J0OwogCXN0cnVjdCBrZXlzcGFuX3BvcnRfcHJpdmF0ZQkgCSpwX3ByaXY7CisJc3RydWN0IHR0eV9zdHJ1Y3QJCQkqdHR5OwogCWludCBvbGRfZGNkX3N0YXRlLCBlcnI7CiAJaW50IHN0YXR1cyA9IHVyYi0+c3RhdHVzOwogCkBAIC01NTMsMTIgKzU1NiwxMSBAQAogCXBfcHJpdi0+ZGNkX3N0YXRlID0gKChtc2ctPmdwaWFfZGNkKSA/IDEgOiAwKTsKIAlwX3ByaXYtPnJpX3N0YXRlID0gKChtc2ctPnJpKSA/IDEgOiAwKTsKIAotCWlmIChwb3J0LT5wb3J0LnR0eSAmJiAhQ19DTE9DQUwocG9ydC0+cG9ydC50dHkpCi0JICAgICYmIG9sZF9kY2Rfc3RhdGUgIT0gcF9wcml2LT5kY2Rfc3RhdGUpIHsKLQkJaWYgKG9sZF9kY2Rfc3RhdGUpCi0JCQl0dHlfaGFuZ3VwKHBvcnQtPnBvcnQudHR5KTsKLQkJLyogIGVsc2UgKi8KLQkJLyoJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZwX3ByaXYtPm9wZW5fd2FpdCk7ICovCisJaWYgKG9sZF9kY2Rfc3RhdGUgIT0gcF9wcml2LT5kY2Rfc3RhdGUpIHsKKwkJdHR5ID0gdHR5X3BvcnRfdHR5X2dldCgmcG9ydC0+cG9ydCk7CisJCWlmICh0dHkgJiYgIUNfQ0xPQ0FMKHR0eSkpCisJCQl0dHlfaGFuZ3VwKHR0eSk7CisJCXR0eV9rcmVmX3B1dCh0dHkpOwogCX0KIAogCS8qIFJlc3VibWl0IHVyYiBzbyB3ZSBjb250aW51ZSByZWNlaXZpbmcgKi8KQEAgLTYwNCwxMSArNjA2LDEyIEBACiAJCXBfcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKIAkJZGF0YSA9IHVyYi0+dHJhbnNmZXJfYnVmZmVyOwogCi0JCXR0eSA9IHBvcnQtPnBvcnQudHR5OwotCQlpZiAodXJiLT5hY3R1YWxfbGVuZ3RoKSB7CisJCXR0eSA9dHR5X3BvcnRfdHR5X2dldCgmcG9ydC0+cG9ydCk7CisJCWlmICh0dHkgJiYgdXJiLT5hY3R1YWxfbGVuZ3RoKSB7CiAJCQl0dHlfaW5zZXJ0X2ZsaXBfc3RyaW5nKHR0eSwgZGF0YSwgdXJiLT5hY3R1YWxfbGVuZ3RoKTsKIAkJCXR0eV9mbGlwX2J1ZmZlcl9wdXNoKHR0eSk7CiAJCX0KKwkJdHR5X2tyZWZfcHV0KHR0eSk7CiAKIAkJLyogUmVzdWJtaXQgdXJiIHNvIHdlIGNvbnRpbnVlIHJlY2VpdmluZyAqLwogCQl1cmItPmRldiA9IHBvcnQtPnNlcmlhbC0+ZGV2OwpAQCAtNjUyLDYgKzY1NSw3IEBACiAJc3RydWN0IHVzYl9zZXJpYWwJCQkqc2VyaWFsOwogCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQJCQkqcG9ydDsKIAlzdHJ1Y3Qga2V5c3Bhbl9wb3J0X3ByaXZhdGUJIAkqcF9wcml2OworCXN0cnVjdCB0dHlfc3RydWN0CQkJKnR0eTsKIAlpbnQgb2xkX2RjZF9zdGF0ZTsKIAlpbnQgc3RhdHVzID0gdXJiLT5zdGF0dXM7CiAKQEAgLTY4OSwxMiArNjkzLDExIEBACiAJcF9wcml2LT5kY2Rfc3RhdGUgPSAoKG1zZy0+ZGNkKSA/IDEgOiAwKTsKIAlwX3ByaXYtPnJpX3N0YXRlID0gKChtc2ctPnJpKSA/IDEgOiAwKTsKIAotCWlmIChwb3J0LT5wb3J0LnR0eSAmJiAhQ19DTE9DQUwocG9ydC0+cG9ydC50dHkpCi0JICAgICYmIG9sZF9kY2Rfc3RhdGUgIT0gcF9wcml2LT5kY2Rfc3RhdGUpIHsKLQkJaWYgKG9sZF9kY2Rfc3RhdGUpCi0JCQl0dHlfaGFuZ3VwKHBvcnQtPnBvcnQudHR5KTsKLQkJLyogIGVsc2UgKi8KLQkJLyoJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZwX3ByaXYtPm9wZW5fd2FpdCk7ICovCisJaWYoIG9sZF9kY2Rfc3RhdGUgIT0gcF9wcml2LT5kY2Rfc3RhdGUgJiYgb2xkX2RjZF9zdGF0ZSkgeworCQl0dHkgPSB0dHlfcG9ydF90dHlfZ2V0KCZwb3J0LT5wb3J0KTsKKwkJaWYgKHR0eSAmJiAhQ19DTE9DQUwodHR5KSkgCisJCQl0dHlfaGFuZ3VwKHR0eSk7CisJCXR0eV9rcmVmX3B1dCh0dHkpOwogCX0KIAogCQkvKiBSZXN1Ym1pdCB1cmIgc28gd2UgY29udGludWUgcmVjZWl2aW5nICovCkBAIC03ODUsMTIgKzc4OCwxMSBAQAogCXBfcHJpdi0+ZGNkX3N0YXRlID0gKChtc2ctPmRjZCkgPyAxIDogMCk7CiAJcF9wcml2LT5yaV9zdGF0ZSA9ICgobXNnLT5yaSkgPyAxIDogMCk7CiAKLQlpZiAocG9ydC0+cG9ydC50dHkgJiYgIUNfQ0xPQ0FMKHBvcnQtPnBvcnQudHR5KQotCSAgICAmJiBvbGRfZGNkX3N0YXRlICE9IHBfcHJpdi0+ZGNkX3N0YXRlKSB7Ci0JCWlmIChvbGRfZGNkX3N0YXRlKQotCQkJdHR5X2hhbmd1cChwb3J0LT5wb3J0LnR0eSk7Ci0JCS8qICBlbHNlICovCi0JCS8qCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmcF9wcml2LT5vcGVuX3dhaXQpOyAqLworCWlmIChvbGRfZGNkX3N0YXRlICE9IHBfcHJpdi0+ZGNkX3N0YXRlICYmIG9sZF9kY2Rfc3RhdGUpIHsKKwkJc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSA9IHR0eV9wb3J0X3R0eV9nZXQoJnBvcnQtPnBvcnQpOworCQlpZiAodHR5ICYmICFDX0NMT0NBTCh0dHkpKQorCQkJdHR5X2hhbmd1cCh0dHkpOworCQl0dHlfa3JlZl9wdXQodHR5KTsKIAl9CiAKIAkvKiBSZXN1Ym1pdCB1cmIgc28gd2UgY29udGludWUgcmVjZWl2aW5nICovCkBAIC04MjcsNyArODI5LDcgQEAKIAl9CiAKIAlwb3J0ID0gIHVyYi0+Y29udGV4dDsKLQl0dHkgPSBwb3J0LT5wb3J0LnR0eTsKKwl0dHkgPSB0dHlfcG9ydF90dHlfZ2V0KCZwb3J0LT5wb3J0KTsKIAlpZiAodHR5ICYmIHVyYi0+YWN0dWFsX2xlbmd0aCkgewogCQkvKiAweDgwIGJpdCBpcyBlcnJvciBmbGFnICovCiAJCWlmICgoZGF0YVswXSAmIDB4ODApID09IDApIHsKQEAgLTg1MCw2ICs4NTIsNyBAQAogCQl9CiAJCXR0eV9mbGlwX2J1ZmZlcl9wdXNoKHR0eSk7CiAJfQorCXR0eV9rcmVmX3B1dCh0dHkpOwogCiAJLyogUmVzdWJtaXQgdXJiIHNvIHdlIGNvbnRpbnVlIHJlY2VpdmluZyAqLwogCXVyYi0+ZGV2ID0gcG9ydC0+c2VyaWFsLT5kZXY7CkBAIC04OTMsNyArODk2LDcgQEAKIAkJCQlyZXR1cm47CiAJCQl9CiAJCQlwb3J0ID0gc2VyaWFsLT5wb3J0W2RhdGFbaSsrXV07Ci0JCQl0dHkgPSBwb3J0LT5wb3J0LnR0eTsKKwkJCXR0eSA9IHR0eV9wb3J0X3R0eV9nZXQoJnBvcnQtPnBvcnQpOwogCQkJbGVuID0gZGF0YVtpKytdOwogCiAJCQkvKiAweDgwIGJpdCBpcyBlcnJvciBmbGFnICovCkBAIC05MjcsNiArOTMwLDcgQEAKIAkJCX0KIAkJCWlmIChwb3J0LT5wb3J0LmNvdW50KQogCQkJCXR0eV9mbGlwX2J1ZmZlcl9wdXNoKHR0eSk7CisJCQl0dHlfa3JlZl9wdXQodHR5KTsKIAkJfQogCX0KIApAQCAtOTY3LDggKzk3MSw4IEBACiAJcG9ydCA9ICB1cmItPmNvbnRleHQ7CiAJcF9wcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOwogCi0JdHR5ID0gcG9ydC0+cG9ydC50dHk7CiAJaWYgKHVyYi0+YWN0dWFsX2xlbmd0aCkgeworCQl0dHkgPSB0dHlfcG9ydF90dHlfZ2V0KCZwb3J0LT5wb3J0KTsKIAkJLyogaWYgY3VycmVudCBtb2RlIGlzIERNQSwgbG9va3MgbGlrZSB1c2EyOCBmb3JtYXQKIAkJICAgb3RoZXJ3aXNlIGxvb2tzIGxpa2UgdXNhMjYgZGF0YSBmb3JtYXQgKi8KIApAQCAtMTAwNCw2ICsxMDA4LDcgQEAKIAkJCX0KIAkJfQogCQl0dHlfZmxpcF9idWZmZXJfcHVzaCh0dHkpOworCQl0dHlfa3JlZl9wdXQodHR5KTsKIAl9CiAKIAkvKiBSZXN1Ym1pdCB1cmIgc28gd2UgY29udGludWUgcmVjZWl2aW5nICovCkBAIC0xMDI1LDYgKzEwMzAsNyBAQAogCXN0cnVjdCB1c2Jfc2VyaWFsCQkJKnNlcmlhbDsKIAlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0CQkJKnBvcnQ7CiAJc3RydWN0IGtleXNwYW5fcG9ydF9wcml2YXRlCSAJKnBfcHJpdjsKKwlzdHJ1Y3QgdHR5X3N0cnVjdAkJCSp0dHk7CiAJaW50IG9sZF9kY2Rfc3RhdGUsIGVycjsKIAlpbnQgc3RhdHVzID0gdXJiLT5zdGF0dXM7CiAKQEAgLTEwNTMsMTIgKzEwNTksMTEgQEAKIAlwX3ByaXYtPmRjZF9zdGF0ZSA9ICgobXNnLT5kY2QpID8gMSA6IDApOwogCXBfcHJpdi0+cmlfc3RhdGUgPSAoKG1zZy0+cmkpID8gMSA6IDApOwogCi0JaWYgKHBvcnQtPnBvcnQudHR5ICYmICFDX0NMT0NBTChwb3J0LT5wb3J0LnR0eSkKLQkgICAgJiYgb2xkX2RjZF9zdGF0ZSAhPSBwX3ByaXYtPmRjZF9zdGF0ZSkgewotCQlpZiAob2xkX2RjZF9zdGF0ZSkKLQkJCXR0eV9oYW5ndXAocG9ydC0+cG9ydC50dHkpOwotCQkvKiAgZWxzZSAqLwotCQkvKgl3YWtlX3VwX2ludGVycnVwdGlibGUoJnBfcHJpdi0+b3Blbl93YWl0KTsgKi8KKwlpZiAob2xkX2RjZF9zdGF0ZSAhPSBwX3ByaXYtPmRjZF9zdGF0ZSAmJiBvbGRfZGNkX3N0YXRlKSB7CisJCXR0eSA9IHR0eV9wb3J0X3R0eV9nZXQoJnBvcnQtPnBvcnQpOworCQlpZiAodHR5ICYmICFDX0NMT0NBTCh0dHkpKQorCQkJdHR5X2hhbmd1cCh0dHkpOworCQl0dHlfa3JlZl9wdXQodHR5KTsKIAl9CiAKIAkvKiBSZXN1Ym1pdCB1cmIgc28gd2UgY29udGludWUgcmVjZWl2aW5nICovCkBAIC0xMTMwLDEyICsxMTM1LDExIEBACiAJcF9wcml2LT5jdHNfc3RhdGUgPSAoKG1zZy0+aHNraWFfY3RzKSA/IDEgOiAwKTsKIAlwX3ByaXYtPmRjZF9zdGF0ZSA9ICgobXNnLT5ncGlhX2RjZCkgPyAxIDogMCk7CiAKLQlpZiAocG9ydC0+cG9ydC50dHkgJiYgIUNfQ0xPQ0FMKHBvcnQtPnBvcnQudHR5KQotCSAgICAmJiBvbGRfZGNkX3N0YXRlICE9IHBfcHJpdi0+ZGNkX3N0YXRlKSB7Ci0JCWlmIChvbGRfZGNkX3N0YXRlKQotCQkJdHR5X2hhbmd1cChwb3J0LT5wb3J0LnR0eSk7Ci0JCS8qICBlbHNlICovCi0JCS8qCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmcF9wcml2LT5vcGVuX3dhaXQpOyAqLworCWlmIChvbGRfZGNkX3N0YXRlICE9IHBfcHJpdi0+ZGNkX3N0YXRlICYmIG9sZF9kY2Rfc3RhdGUpIHsKKwkJc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSA9IHR0eV9wb3J0X3R0eV9nZXQoJnBvcnQtPnBvcnQpOworCQlpZiAodHR5ICYmICFDX0NMT0NBTCh0dHkpKQorCQkJdHR5X2hhbmd1cCh0dHkpOworCQl0dHlfa3JlZl9wdXQodHR5KTsKIAl9CiAKIAkvKiBSZXN1Ym1pdCB1cmIgc28gd2UgY29udGludWUgcmVjZWl2aW5nICovCkBAIC0xMzMyLDcgKzEzMzYsNyBAQAogCQkJc3RvcF91cmIocF9wcml2LT5vdXRfdXJic1tpXSk7CiAJCX0KIAl9Ci0JcG9ydC0+cG9ydC50dHkgPSBOVUxMOworCXR0eV9wb3J0X3R0eV9zZXQoJnBvcnQtPnBvcnQsIE5VTEwpOwogfQogCiAvKiBkb3dubG9hZCB0aGUgZmlybXdhcmUgdG8gYSBwcmUtcmVudW1lcmF0aW9uIGRldmljZSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2tleXNwYW5fcGRhLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwva2V5c3Bhbl9wZGEuYwppbmRleCAwNDAwNDBhLi5iZjFhZTI0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwva2V5c3Bhbl9wZGEuYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwva2V5c3Bhbl9wZGEuYwpAQCAtMTcyLDggKzE3Miw5IEBACiAJc3RydWN0IGtleXNwYW5fcGRhX3ByaXZhdGUgKnByaXYgPQogCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IGtleXNwYW5fcGRhX3ByaXZhdGUsIHdha2V1cF93b3JrKTsKIAlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gcHJpdi0+cG9ydDsKLQotCXR0eV93YWtldXAocG9ydC0+cG9ydC50dHkpOworCXN0cnVjdCB0dHlfc3RydWN0ICp0dHkgPSB0dHlfcG9ydF90dHlfZ2V0KCZwb3J0LT5wb3J0KTsKKwl0dHlfd2FrZXVwKHR0eSk7CisJdHR5X2tyZWZfcHV0KHR0eSk7CiB9CiAKIHN0YXRpYyB2b2lkIGtleXNwYW5fcGRhX3JlcXVlc3RfdW50aHJvdHRsZShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCkBAIC0yMDUsNyArMjA2LDcgQEAKIHN0YXRpYyB2b2lkIGtleXNwYW5fcGRhX3J4X2ludGVycnVwdChzdHJ1Y3QgdXJiICp1cmIpCiB7CiAJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IHVyYi0+Y29udGV4dDsKLQlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5ID0gcG9ydC0+cG9ydC50dHk7CisJc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSA9IHR0eV9wb3J0X3R0eV9nZXQoJnBvcnQtPnBvcnQpOwogCXVuc2lnbmVkIGNoYXIgKmRhdGEgPSB1cmItPnRyYW5zZmVyX2J1ZmZlcjsKIAlpbnQgcmV0dmFsOwogCWludCBzdGF0dXMgPSB1cmItPnN0YXR1czsKQEAgLTIyMiw3ICsyMjMsNyBAQAogCQkvKiB0aGlzIHVyYiBpcyB0ZXJtaW5hdGVkLCBjbGVhbiB1cCAqLwogCQlkYmcoIiVzIC0gdXJiIHNodXR0aW5nIGRvd24gd2l0aCBzdGF0dXM6ICVkIiwKIAkJICAgIF9fZnVuY19fLCBzdGF0dXMpOwotCQlyZXR1cm47CisJCWdvdG8gb3V0OwogCWRlZmF1bHQ6CiAJCWRiZygiJXMgLSBub256ZXJvIHVyYiBzdGF0dXMgcmVjZWl2ZWQ6ICVkIiwKIAkJICAgIF9fZnVuY19fLCBzdGF0dXMpOwpAQCAtMjYxLDggKzI2MiwxMSBAQAogZXhpdDoKIAlyZXR2YWwgPSB1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9BVE9NSUMpOwogCWlmIChyZXR2YWwpCi0JCWVycigiJXMgLSB1c2Jfc3VibWl0X3VyYiBmYWlsZWQgd2l0aCByZXN1bHQgJWQiLAotCQkgICAgIF9fZnVuY19fLCByZXR2YWwpOworCQlkZXZfZXJyKCZwb3J0LT5kZXYsCisJCQkiJXMgLSB1c2Jfc3VibWl0X3VyYiBmYWlsZWQgd2l0aCByZXN1bHQgJWQiLAorCQkJX19mdW5jX18sIHJldHZhbCk7CitvdXQ6CisJdHR5X2tyZWZfcHV0KHR0eSk7CQkgICAgIAogfQogCiAKQEAgLTczOCwxMSArNzQyLDEzIEBACiAJCWZ3X25hbWUgPSAia2V5c3Bhbl9wZGEveGlyY29tX3Bncy5mdyI7CiAjZW5kaWYKIAllbHNlIHsKLQkJZXJyKCIlczogdW5rbm93biB2ZW5kb3IsIGFib3J0aW5nLiIsIF9fZnVuY19fKTsKKwkJZGV2X2Vycigmc2VyaWFsLT5kZXYtPmRldiwgIiVzOiB1bmtub3duIHZlbmRvciwgYWJvcnRpbmcuXG4iLAorCQkJX19mdW5jX18pOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAJaWYgKHJlcXVlc3RfaWhleF9maXJtd2FyZSgmZncsIGZ3X25hbWUsICZzZXJpYWwtPmRldi0+ZGV2KSkgewotCQllcnIoImZhaWxlZCB0byBsb2FkIGZpcm13YXJlIFwiJXNcIlxuIiwgZndfbmFtZSk7CisJCWRldl9lcnIoJnNlcmlhbC0+ZGV2LT5kZXYsICJmYWlsZWQgdG8gbG9hZCBmaXJtd2FyZSBcIiVzXCJcbiIsCisJCQlmd19uYW1lKTsKIAkJcmV0dXJuIC1FTk9FTlQ7CiAJfQogCXJlY29yZCA9IChjb25zdCBzdHJ1Y3QgaWhleF9iaW5yZWMgKilmdy0+ZGF0YTsKQEAgLTc1MiwxMCArNzU4LDEwIEBACiAJCQkJCSAgICAgKHVuc2lnbmVkIGNoYXIgKilyZWNvcmQtPmRhdGEsCiAJCQkJCSAgICAgYmUxNl90b19jcHUocmVjb3JkLT5sZW4pLCAweGEwKTsKIAkJaWYgKHJlc3BvbnNlIDwgMCkgewotCQkJZXJyKCJlenVzYl93cml0ZW1lbW9yeSBmYWlsZWQgZm9yIEtleXNwYW4gUERBICIKLQkJCSAgICAiZmlybXdhcmUgKCVkICUwNFggJXAgJWQpIiwKLQkJCSAgICByZXNwb25zZSwgYmUzMl90b19jcHUocmVjb3JkLT5hZGRyKSwKLQkJCSAgICByZWNvcmQtPmRhdGEsIGJlMTZfdG9fY3B1KHJlY29yZC0+bGVuKSk7CisJCQlkZXZfZXJyKCZzZXJpYWwtPmRldi0+ZGV2LCAiZXp1c2Jfd3JpdGVtZW1vcnkgZmFpbGVkICIKKwkJCQkiZm9yIEtleXNwYW4gUERBIGZpcm13YXJlICglZCAlMDRYICVwICVkKVxuIiwKKwkJCQlyZXNwb25zZSwgYmUzMl90b19jcHUocmVjb3JkLT5hZGRyKSwKKwkJCQlyZWNvcmQtPmRhdGEsIGJlMTZfdG9fY3B1KHJlY29yZC0+bGVuKSk7CiAJCQlicmVhazsKIAkJfQogCQlyZWNvcmQgPSBpaGV4X25leHRfYmlucmVjKHJlY29yZCk7CkBAIC04NzAsNyArODc2LDggQEAKIAlyZXR2YWwgPSB1c2JfcmVnaXN0ZXIoJmtleXNwYW5fcGRhX2RyaXZlcik7CiAJaWYgKHJldHZhbCkKIAkJZ290byBmYWlsZWRfdXNiX3JlZ2lzdGVyOwotCWluZm8oRFJJVkVSX0RFU0MgIiAiIERSSVZFUl9WRVJTSU9OKTsKKwlwcmludGsoS0VSTl9JTkZPIEtCVUlMRF9NT0ROQU1FICI6ICIgRFJJVkVSX1ZFUlNJT04gIjoiCisJICAgICAgIERSSVZFUl9ERVNDICJcbiIpOwogCXJldHVybiAwOwogZmFpbGVkX3VzYl9yZWdpc3RlcjoKICNpZmRlZiBYSVJDT00KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9rbDVrdXNiMTA1LmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwva2w1a3VzYjEwNS5jCmluZGV4IGI4NGRkZGMuLmRjMzZhMDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9rbDVrdXNiMTA1LmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2tsNWt1c2IxMDUuYwpAQCAtMTgyLDEyICsxODIsMTIgQEAKIAkJCXNpemVvZihzdHJ1Y3Qga2xzaV8xMDVfcG9ydF9zZXR0aW5ncyksCiAJCQlLTFNJX1RJTUVPVVQpOwogCWlmIChyYyA8IDApCi0JCWVycigiQ2hhbmdlIHBvcnQgc2V0dGluZ3MgZmFpbGVkIChlcnJvciA9ICVkKSIsIHJjKTsKLQlpbmZvKCIlcyAtICVkIGJ5dGUgYmxvY2ssIGJhdWRyYXRlICV4LCBkYXRhYml0cyAlZCwgdTEgJWQsIHUyICVkIiwKLQkgICAgX19mdW5jX18sCi0JICAgIHNldHRpbmdzLT5wa3RsZW4sCi0JICAgIHNldHRpbmdzLT5iYXVkcmF0ZSwgc2V0dGluZ3MtPmRhdGFiaXRzLAotCSAgICBzZXR0aW5ncy0+dW5rbm93bjEsIHNldHRpbmdzLT51bmtub3duMik7CisJCWRldl9lcnIoJnBvcnQtPmRldiwKKwkJCSJDaGFuZ2UgcG9ydCBzZXR0aW5ncyBmYWlsZWQgKGVycm9yID0gJWQpXG4iLCByYyk7CisJZGV2X2luZm8oJnBvcnQtPnNlcmlhbC0+ZGV2LT5kZXYsCisJCSAiJWQgYnl0ZSBibG9jaywgYmF1ZHJhdGUgJXgsIGRhdGFiaXRzICVkLCB1MSAlZCwgdTIgJWRcbiIsCisJCSBzZXR0aW5ncy0+cGt0bGVuLCBzZXR0aW5ncy0+YmF1ZHJhdGUsIHNldHRpbmdzLT5kYXRhYml0cywKKwkJIHNldHRpbmdzLT51bmtub3duMSwgc2V0dGluZ3MtPnVua25vd24yKTsKIAlyZXR1cm4gcmM7CiB9IC8qIGtsc2lfMTA1X2NoZ19wb3J0X3NldHRpbmdzICovCiAKQEAgLTIxNSw3ICsyMTUsNyBAQAogCV9fdTggc3RhdHVzX2J1ZltLTFNJX1NUQVRVU0JVRl9MRU5dID0geyAtMSwgLTF9OwogCV9fdTE2IHN0YXR1czsKIAotCWluZm8oIiVzIC0gc2VuZGluZyBTSU8gUG9sbCByZXF1ZXN0IiwgX19mdW5jX18pOworCWRldl9pbmZvKCZwb3J0LT5zZXJpYWwtPmRldi0+ZGV2LCAic2VuZGluZyBTSU8gUG9sbCByZXF1ZXN0XG4iKTsKIAlyYyA9IHVzYl9jb250cm9sX21zZyhwb3J0LT5zZXJpYWwtPmRldiwKIAkJCSAgICAgdXNiX3JjdmN0cmxwaXBlKHBvcnQtPnNlcmlhbC0+ZGV2LCAwKSwKIAkJCSAgICAgS0w1S1VTQjEwNUFfU0lPX1BPTEwsCkBAIC0yMjYsMTIgKzIyNiwxMyBAQAogCQkJICAgICAxMDAwMAogCQkJICAgICApOwogCWlmIChyYyA8IDApCi0JCWVycigiUmVhZGluZyBsaW5lIHN0YXR1cyBmYWlsZWQgKGVycm9yID0gJWQpIiwgcmMpOworCQlkZXZfZXJyKCZwb3J0LT5kZXYsICJSZWFkaW5nIGxpbmUgc3RhdHVzIGZhaWxlZCAoZXJyb3IgPSAlZClcbiIsCisJCQlyYyk7CiAJZWxzZSB7CiAJCXN0YXR1cyA9IGdldF91bmFsaWduZWRfbGUxNihzdGF0dXNfYnVmKTsKIAotCQlpbmZvKCIlcyAtIHJlYWQgc3RhdHVzICV4ICV4IiwgX19mdW5jX18sCi0JCSAgICAgc3RhdHVzX2J1ZlswXSwgc3RhdHVzX2J1ZlsxXSk7CisJCWRldl9pbmZvKCZwb3J0LT5zZXJpYWwtPmRldi0+ZGV2LCAicmVhZCBzdGF0dXMgJXggJXgiLAorCQkJIHN0YXR1c19idWZbMF0sIHN0YXR1c19idWZbMV0pOwogCiAJCSpsaW5lX3N0YXRlX3AgPSBrbHNpXzEwNV9zdGF0dXMybGluZXN0YXRlKHN0YXR1cyk7CiAJfQpAQCAtMjgwLDE1ICsyODEsMTYgQEAKIAogCQkJcHJpdi0+d3JpdGVfdXJiX3Bvb2xbal0gPSB1cmI7CiAJCQlpZiAodXJiID09IE5VTEwpIHsKLQkJCQllcnIoIk5vIG1vcmUgdXJicz8/PyIpOworCQkJCWRldl9lcnIoJnNlcmlhbC0+ZGV2LT5kZXYsICJObyBtb3JlIHVyYnM/Pz9cbiIpOwogCQkJCWdvdG8gZXJyX2NsZWFudXA7CiAJCQl9CiAKIAkJCXVyYi0+dHJhbnNmZXJfYnVmZmVyID0KIAkJCQlrbWFsbG9jKFVSQl9UUkFOU0ZFUl9CVUZGRVJfU0laRSwgR0ZQX0tFUk5FTCk7CiAJCQlpZiAoIXVyYi0+dHJhbnNmZXJfYnVmZmVyKSB7Ci0JCQkJZXJyKCIlcyAtIG91dCBvZiBtZW1vcnkgZm9yIHVyYiBidWZmZXJzLiIsCi0JCQkJCQkJCV9fZnVuY19fKTsKKwkJCQlkZXZfZXJyKCZzZXJpYWwtPmRldi0+ZGV2LAorCQkJCQkiJXMgLSBvdXQgb2YgbWVtb3J5IGZvciB1cmIgYnVmZmVycy5cbiIsCisJCQkJCV9fZnVuY19fKTsKIAkJCQlnb3RvIGVycl9jbGVhbnVwOwogCQkJfQogCQl9CkBAIC00MDksNyArNDExLDggQEAKIAogCXJjID0gdXNiX3N1Ym1pdF91cmIocG9ydC0+cmVhZF91cmIsIEdGUF9LRVJORUwpOwogCWlmIChyYykgewotCQllcnIoIiVzIC0gZmFpbGVkIHN1Ym1pdHRpbmcgcmVhZCB1cmIsIGVycm9yICVkIiwgX19mdW5jX18sIHJjKTsKKwkJZGV2X2VycigmcG9ydC0+ZGV2LCAiJXMgLSBmYWlsZWQgc3VibWl0dGluZyByZWFkIHVyYiwgIgorCQkJImVycm9yICVkXG4iLCBfX2Z1bmNfXywgcmMpOwogCQlyZXR2YWwgPSByYzsKIAkJZ290byBleGl0OwogCX0KQEAgLTQyNCw3ICs0MjcsNyBAQAogCQkJICAgICAwLAogCQkJICAgICBLTFNJX1RJTUVPVVQpOwogCWlmIChyYyA8IDApIHsKLQkJZXJyKCJFbmFibGluZyByZWFkIGZhaWxlZCAoZXJyb3IgPSAlZCkiLCByYyk7CisJCWRldl9lcnIoJnBvcnQtPmRldiwgIkVuYWJsaW5nIHJlYWQgZmFpbGVkIChlcnJvciA9ICVkKVxuIiwgcmMpOwogCQlyZXR2YWwgPSByYzsKIAl9IGVsc2UKIAkJZGJnKCIlcyAtIGVuYWJsZWQgcmVhZGluZyIsIF9fZnVuY19fKTsKQEAgLTQ2NCw3ICs0NjcsOCBAQAogCQkJCSAgICAgTlVMTCwgMCwKIAkJCQkgICAgIEtMU0lfVElNRU9VVCk7CiAJCWlmIChyYyA8IDApCi0JCQllcnIoIkRpc2FibGluZyByZWFkIGZhaWxlZCAoZXJyb3IgPSAlZCkiLCByYyk7CisJCQlkZXZfZXJyKCZwb3J0LT5kZXYsCisJCQkJIkRpc2FibGluZyByZWFkIGZhaWxlZCAoZXJyb3IgPSAlZClcbiIsIHJjKTsKIAl9CiAJbXV0ZXhfdW5sb2NrKCZwb3J0LT5zZXJpYWwtPmRpc2NfbXV0ZXgpOwogCkBAIC00NzUsOCArNDc5LDkgQEAKIAkvKiBGSVhNRSAqLwogCS8qIHdnZyAtIGRvIEkgbmVlZCB0aGlzPyBJIHRoaW5rIHNvLiAqLwogCXVzYl9raWxsX3VyYihwb3J0LT5pbnRlcnJ1cHRfaW5fdXJiKTsKLQlpbmZvKCJrbDVrdXNiMTA1IHBvcnQgc3RhdHM6ICVsZCBieXRlcyBpbiwgJWxkIGJ5dGVzIG91dCIsCi0JCQkJCXByaXYtPmJ5dGVzX2luLCBwcml2LT5ieXRlc19vdXQpOworCWRldl9pbmZvKCZwb3J0LT5zZXJpYWwtPmRldi0+ZGV2LAorCQkgInBvcnQgc3RhdHM6ICVsZCBieXRlcyBpbiwgJWxkIGJ5dGVzIG91dFxuIiwKKwkJIHByaXYtPmJ5dGVzX2luLCBwcml2LT5ieXRlc19vdXQpOwogfSAvKiBrbHNpXzEwNV9jbG9zZSAqLwogCiAKQEAgLTUyMiw3ICs1MjcsOSBAQAogCQkJdXJiLT50cmFuc2Zlcl9idWZmZXIgPQogCQkJCWttYWxsb2MoVVJCX1RSQU5TRkVSX0JVRkZFUl9TSVpFLCBHRlBfQVRPTUlDKTsKIAkJCWlmICh1cmItPnRyYW5zZmVyX2J1ZmZlciA9PSBOVUxMKSB7Ci0JCQkJZXJyKCIlcyAtIG5vIG1vcmUga2VybmVsIG1lbW9yeS4uLiIsIF9fZnVuY19fKTsKKwkJCQlkZXZfZXJyKCZwb3J0LT5kZXYsCisJCQkJCSIlcyAtIG5vIG1vcmUga2VybmVsIG1lbW9yeS4uLlxuIiwKKwkJCQkJX19mdW5jX18pOwogCQkJCWdvdG8gZXhpdDsKIAkJCX0KIAkJfQpAQCAtNTQ5LDggKzU1Niw5IEBACiAJCS8qIHNlbmQgdGhlIGRhdGEgb3V0IHRoZSBidWxrIHBvcnQgKi8KIAkJcmVzdWx0ID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfQVRPTUlDKTsKIAkJaWYgKHJlc3VsdCkgewotCQkJZXJyKCIlcyAtIGZhaWxlZCBzdWJtaXR0aW5nIHdyaXRlIHVyYiwgZXJyb3IgJWQiLAotCQkJCQkJCV9fZnVuY19fLCByZXN1bHQpOworCQkJZGV2X2VycigmcG9ydC0+ZGV2LAorCQkJCSIlcyAtIGZhaWxlZCBzdWJtaXR0aW5nIHdyaXRlIHVyYiwgZXJyb3IgJWRcbiIsCisJCQkJX19mdW5jX18sIHJlc3VsdCk7CiAJCQlnb3RvIGV4aXQ7CiAJCX0KIAkJYnVmICs9IHNpemU7CkBAIC02NTgsNyArNjY2LDcgQEAKIAl9IGVsc2UgewogCQlpbnQgYnl0ZXNfc2VudCA9ICgoX191OCAqKSBkYXRhKVswXSArCiAJCQkJICgodW5zaWduZWQgaW50KSAoKF9fdTggKikgZGF0YSlbMV0gPDwgOCk7Ci0JCXR0eSA9IHBvcnQtPnBvcnQudHR5OworCQl0dHkgPSB0dHlfcG9ydF90dHlfZ2V0KCZwb3J0LT5wb3J0KTsKIAkJLyogd2Ugc2hvdWxkIGltbWVkaWF0ZWx5IHJlc3VibWl0IHRoZSBVUkIsIGJlZm9yZSBhdHRlbXB0aW5nCiAJCSAqIHRvIHBhc3MgdGhlIGRhdGEgb24gdG8gdGhlIHR0eSBsYXllci4gQnV0IHRoYXQgbmVlZHMgbG9ja2luZwogCQkgKiBhZ2FpbnN0IHJlLWVudHJ5IGFuIHRoZW4gbWl4ZWQtdXAgZGF0YSBiZWNhdXNlIG9mCkBAIC02NzksNiArNjg3LDcgQEAKIAkJdHR5X2J1ZmZlcl9yZXF1ZXN0X3Jvb20odHR5LCBieXRlc19zZW50KTsKIAkJdHR5X2luc2VydF9mbGlwX3N0cmluZyh0dHksIGRhdGEgKyAyLCBieXRlc19zZW50KTsKIAkJdHR5X2ZsaXBfYnVmZmVyX3B1c2godHR5KTsKKwkJdHR5X2tyZWZfcHV0KHR0eSk7CiAKIAkJLyogYWdhaW4gbG9ja2xlc3MsIGJ1dCBkZWJ1ZyBpbmZvIG9ubHkgKi8KIAkJcHJpdi0+Ynl0ZXNfaW4gKz0gYnl0ZXNfc2VudDsKQEAgLTY5Myw4ICs3MDIsOSBAQAogCQkgICAgICBwb3J0KTsKIAlyYyA9IHVzYl9zdWJtaXRfdXJiKHBvcnQtPnJlYWRfdXJiLCBHRlBfQVRPTUlDKTsKIAlpZiAocmMpCi0JCWVycigiJXMgLSBmYWlsZWQgcmVzdWJtaXR0aW5nIHJlYWQgdXJiLCBlcnJvciAlZCIsCi0JCQkJCQkJX19mdW5jX18sIHJjKTsKKwkJZGV2X2VycigmcG9ydC0+ZGV2LAorCQkJIiVzIC0gZmFpbGVkIHJlc3VibWl0dGluZyByZWFkIHVyYiwgZXJyb3IgJWRcbiIsCisJCQlfX2Z1bmNfXywgcmMpOwogfSAvKiBrbHNpXzEwNV9yZWFkX2J1bGtfY2FsbGJhY2sgKi8KIAogCkBAIC03OTgsNyArODA4LDggQEAKIAkJCXByaXYtPmNmZy5kYXRhYml0cyA9IGtsNWt1c2IxMDVhX2R0Yl84OwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6Ci0JCQllcnIoIkNTSVpFIHdhcyBub3QgQ1M1LUNTOCwgdXNpbmcgZGVmYXVsdCBvZiA4Iik7CisJCQlkZXZfZXJyKCZwb3J0LT5kZXYsCisJCQkJIkNTSVpFIHdhcyBub3QgQ1M1LUNTOCwgdXNpbmcgZGVmYXVsdCBvZiA4XG4iKTsKIAkJCXByaXYtPmNmZy5kYXRhYml0cyA9IGtsNWt1c2IxMDVhX2R0Yl84OwogCQkJYnJlYWs7CiAJCX0KQEAgLTg4NSw3ICs4OTYsOCBAQAogCiAJcmMgPSBrbHNpXzEwNV9nZXRfbGluZV9zdGF0ZShwb3J0LCAmbGluZV9zdGF0ZSk7CiAJaWYgKHJjIDwgMCkgewotCQllcnIoIlJlYWRpbmcgbGluZSBjb250cm9sIGZhaWxlZCAoZXJyb3IgPSAlZCkiLCByYyk7CisJCWRldl9lcnIoJnBvcnQtPmRldiwKKwkJCSJSZWFkaW5nIGxpbmUgY29udHJvbCBmYWlsZWQgKGVycm9yID0gJWQpXG4iLCByYyk7CiAJCS8qIGJldHRlciByZXR1cm4gdmFsdWU/IEVBR0FJTj8gKi8KIAkJcmV0dXJuIHJjOwogCX0KQEAgLTk0Myw4ICs5NTUsOSBAQAogCXBvcnQtPnJlYWRfdXJiLT5kZXYgPSBwb3J0LT5zZXJpYWwtPmRldjsKIAlyZXN1bHQgPSB1c2Jfc3VibWl0X3VyYihwb3J0LT5yZWFkX3VyYiwgR0ZQX0FUT01JQyk7CiAJaWYgKHJlc3VsdCkKLQkJZXJyKCIlcyAtIGZhaWxlZCBzdWJtaXR0aW5nIHJlYWQgdXJiLCBlcnJvciAlZCIsIF9fZnVuY19fLAotCQkgICAgcmVzdWx0KTsKKwkJZGV2X2VycigmcG9ydC0+ZGV2LAorCQkJIiVzIC0gZmFpbGVkIHN1Ym1pdHRpbmcgcmVhZCB1cmIsIGVycm9yICVkXG4iLAorCQkJX19mdW5jX18sIHJlc3VsdCk7CiB9CiAKIApAQCAtOTU5LDcgKzk3Miw4IEBACiAJaWYgKHJldHZhbCkKIAkJZ290byBmYWlsZWRfdXNiX3JlZ2lzdGVyOwogCi0JaW5mbyhEUklWRVJfREVTQyAiICIgRFJJVkVSX1ZFUlNJT04pOworCXByaW50ayhLRVJOX0lORk8gS0JVSUxEX01PRE5BTUUgIjogIiBEUklWRVJfVkVSU0lPTiAiOiIKKwkgICAgICAgRFJJVkVSX0RFU0MgIlxuIik7CiAJcmV0dXJuIDA7CiBmYWlsZWRfdXNiX3JlZ2lzdGVyOgogCXVzYl9zZXJpYWxfZGVyZWdpc3Rlcigma2w1a3VzYjEwNWRfZGV2aWNlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9rb2JpbF9zY3QuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9rb2JpbF9zY3QuYwppbmRleCBkZWJhMjhlYy4uNjI4NmJhYSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL2tvYmlsX3NjdC5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9rb2JpbF9zY3QuYwpAQCAtMzgzLDcgKzM4Myw3IEBACiAJCXJldHVybjsKIAl9CiAKLQl0dHkgPSBwb3J0LT5wb3J0LnR0eTsKKwl0dHkgPSB0dHlfcG9ydF90dHlfZ2V0KCZwb3J0LT5wb3J0KTsKIAlpZiAodXJiLT5hY3R1YWxfbGVuZ3RoKSB7CiAKIAkJLyogQkVHSU4gREVCVUcgKi8KQEAgLTQwNSw2ICs0MDUsNyBAQAogCQl0dHlfaW5zZXJ0X2ZsaXBfc3RyaW5nKHR0eSwgZGF0YSwgdXJiLT5hY3R1YWxfbGVuZ3RoKTsKIAkJdHR5X2ZsaXBfYnVmZmVyX3B1c2godHR5KTsKIAl9CisJdHR5X2tyZWZfcHV0KHR0eSk7CiAJLyogc29tZW9uZSBzZXRzIHRoZSBkZXYgdG8gMCBpZiB0aGUgY2xvc2UgbWV0aG9kIGhhcyBiZWVuIGNhbGxlZCAqLwogCXBvcnQtPmludGVycnVwdF9pbl91cmItPmRldiA9IHBvcnQtPnNlcmlhbC0+ZGV2OwogCkBAIC03NDMsOCArNzQ0LDggQEAKIAlpZiAocmV0dmFsKQogCQlnb3RvIGZhaWxlZF91c2JfcmVnaXN0ZXI7CiAKLQlpbmZvKERSSVZFUl9WRVJTSU9OICIgIiBEUklWRVJfQVVUSE9SKTsKLQlpbmZvKERSSVZFUl9ERVNDKTsKKwlwcmludGsoS0VSTl9JTkZPIEtCVUlMRF9NT0ROQU1FICI6ICIgRFJJVkVSX1ZFUlNJT04gIjoiCisJICAgICAgIERSSVZFUl9ERVNDICJcbiIpOwogCiAJcmV0dXJuIDA7CiBmYWlsZWRfdXNiX3JlZ2lzdGVyOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL21jdF91MjMyLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvbWN0X3UyMzIuYwppbmRleCAwZGVkOGJkLi4wNzcxMGNmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvbWN0X3UyMzIuYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvbWN0X3UyMzIuYwpAQCAtMjQ2LDcgKzI0Niw4IEBACiAJCQkJMCwgMCwgJmRpdmlzb3IsIE1DVF9VMjMyX1NFVF9CQVVEX1JBVEVfU0laRSwKIAkJCQlXRFJfVElNRU9VVCk7CiAJaWYgKHJjIDwgMCkJLypGSVhNRTogV2hhdCB2YWx1ZSBzcGVlZCByZXN1bHRzICovCi0JCWVycigiU2V0IEJBVUQgUkFURSAlZCBmYWlsZWQgKGVycm9yID0gJWQpIiwgdmFsdWUsIHJjKTsKKwkJZGV2X2VycigmcG9ydC0+ZGV2LCAiU2V0IEJBVUQgUkFURSAlZCBmYWlsZWQgKGVycm9yID0gJWQpXG4iLAorCQkJdmFsdWUsIHJjKTsKIAllbHNlCiAJCXR0eV9lbmNvZGVfYmF1ZF9yYXRlKHR0eSwgc3BlZWQsIHNwZWVkKTsKIAlkYmcoInNldF9iYXVkX3JhdGU6IHZhbHVlOiAweCV4LCBkaXZpc29yOiAweCV4IiwgdmFsdWUsIGRpdmlzb3IpOwpAQCAtMjc0LDggKzI3NSw5IEBACiAJCQkJMCwgMCwgJnplcm9fYnl0ZSwgTUNUX1UyMzJfU0VUX1VOS05PV04xX1NJWkUsCiAJCQkJV0RSX1RJTUVPVVQpOwogCWlmIChyYyA8IDApCi0JCWVycigiU2VuZGluZyBVU0IgZGV2aWNlIHJlcXVlc3QgY29kZSAlZCBmYWlsZWQgKGVycm9yID0gJWQpIiwKLQkJICAgIE1DVF9VMjMyX1NFVF9VTktOT1dOMV9SRVFVRVNULCByYyk7CisJCWRldl9lcnIoJnBvcnQtPmRldiwgIlNlbmRpbmcgVVNCIGRldmljZSByZXF1ZXN0IGNvZGUgJWQgIgorCQkJImZhaWxlZCAoZXJyb3IgPSAlZClcbiIsIE1DVF9VMjMyX1NFVF9VTktOT1dOMV9SRVFVRVNULAorCQkJcmMpOwogCiAJaWYgKHBvcnQgJiYgQ19DUlRTQ1RTKHR0eSkpCiAJICAgY3RzX2VuYWJsZV9ieXRlID0gMTsKQEAgLTI4OCw4ICsyOTAsOCBAQAogCQkJMCwgMCwgJmN0c19lbmFibGVfYnl0ZSwgTUNUX1UyMzJfU0VUX0NUU19TSVpFLAogCQkJV0RSX1RJTUVPVVQpOwogCWlmIChyYyA8IDApCi0JCWVycigiU2VuZGluZyBVU0IgZGV2aWNlIHJlcXVlc3QgY29kZSAlZCBmYWlsZWQgKGVycm9yID0gJWQpIiwKLQkJCQkJTUNUX1UyMzJfU0VUX0NUU19SRVFVRVNULCByYyk7CisJCWRldl9lcnIoJnBvcnQtPmRldiwgIlNlbmRpbmcgVVNCIGRldmljZSByZXF1ZXN0IGNvZGUgJWQgIgorCQkJImZhaWxlZCAoZXJyb3IgPSAlZClcbiIsIE1DVF9VMjMyX1NFVF9DVFNfUkVRVUVTVCwgcmMpOwogCiAJcmV0dXJuIHJjOwogfSAvKiBtY3RfdTIzMl9zZXRfYmF1ZF9yYXRlICovCkBAIC0zMDMsNyArMzA1LDggQEAKIAkJCTAsIDAsICZsY3IsIE1DVF9VMjMyX1NFVF9MSU5FX0NUUkxfU0laRSwKIAkJCVdEUl9USU1FT1VUKTsKIAlpZiAocmMgPCAwKQotCQllcnIoIlNldCBMSU5FIENUUkwgMHgleCBmYWlsZWQgKGVycm9yID0gJWQpIiwgbGNyLCByYyk7CisJCWRldl9lcnIoJnNlcmlhbC0+ZGV2LT5kZXYsCisJCQkiU2V0IExJTkUgQ1RSTCAweCV4IGZhaWxlZCAoZXJyb3IgPSAlZClcbiIsIGxjciwgcmMpOwogCWRiZygic2V0X2xpbmVfY3RybDogMHgleCIsIGxjcik7CiAJcmV0dXJuIHJjOwogfSAvKiBtY3RfdTIzMl9zZXRfbGluZV9jdHJsICovCkBAIC0zMjUsNyArMzI4LDggQEAKIAkJCTAsIDAsICZtY3IsIE1DVF9VMjMyX1NFVF9NT0RFTV9DVFJMX1NJWkUsCiAJCQlXRFJfVElNRU9VVCk7CiAJaWYgKHJjIDwgMCkKLQkJZXJyKCJTZXQgTU9ERU0gQ1RSTCAweCV4IGZhaWxlZCAoZXJyb3IgPSAlZCkiLCBtY3IsIHJjKTsKKwkJZGV2X2Vycigmc2VyaWFsLT5kZXYtPmRldiwKKwkJCSJTZXQgTU9ERU0gQ1RSTCAweCV4IGZhaWxlZCAoZXJyb3IgPSAlZClcbiIsIG1jciwgcmMpOwogCWRiZygic2V0X21vZGVtX2N0cmw6IHN0YXRlPTB4JXggPT0+IG1jcj0weCV4IiwgY29udHJvbF9zdGF0ZSwgbWNyKTsKIAogCXJldHVybiByYzsKQEAgLTM0MSw3ICszNDUsOCBAQAogCQkJMCwgMCwgbXNyLCBNQ1RfVTIzMl9HRVRfTU9ERU1fU1RBVF9TSVpFLAogCQkJV0RSX1RJTUVPVVQpOwogCWlmIChyYyA8IDApIHsKLQkJZXJyKCJHZXQgTU9ERU0gU1RBVHVzIGZhaWxlZCAoZXJyb3IgPSAlZCkiLCByYyk7CisJCWRldl9lcnIoJnNlcmlhbC0+ZGV2LT5kZXYsCisJCQkiR2V0IE1PREVNIFNUQVR1cyBmYWlsZWQgKGVycm9yID0gJWQpXG4iLCByYyk7CiAJCSptc3IgPSAwOwogCX0KIAlkYmcoImdldF9tb2RlbV9zdGF0OiAweCV4IiwgKm1zcik7CkBAIC00NzAsOCArNDc1LDkgQEAKIAlwb3J0LT5yZWFkX3VyYi0+ZGV2ID0gcG9ydC0+c2VyaWFsLT5kZXY7CiAJcmV0dmFsID0gdXNiX3N1Ym1pdF91cmIocG9ydC0+cmVhZF91cmIsIEdGUF9LRVJORUwpOwogCWlmIChyZXR2YWwpIHsKLQkJZXJyKCJ1c2Jfc3VibWl0X3VyYihyZWFkIGJ1bGspIGZhaWxlZCBwaXBlIDB4JXggZXJyICVkIiwKLQkJICAgIHBvcnQtPnJlYWRfdXJiLT5waXBlLCByZXR2YWwpOworCQlkZXZfZXJyKCZwb3J0LT5kZXYsCisJCQkidXNiX3N1Ym1pdF91cmIocmVhZCBidWxrKSBmYWlsZWQgcGlwZSAweCV4IGVyciAlZFxuIiwKKwkJCXBvcnQtPnJlYWRfdXJiLT5waXBlLCByZXR2YWwpOwogCQlnb3RvIGVycm9yOwogCX0KIApAQCAtNDc5LDggKzQ4NSw5IEBACiAJcmV0dmFsID0gdXNiX3N1Ym1pdF91cmIocG9ydC0+aW50ZXJydXB0X2luX3VyYiwgR0ZQX0tFUk5FTCk7CiAJaWYgKHJldHZhbCkgewogCQl1c2Jfa2lsbF91cmIocG9ydC0+cmVhZF91cmIpOwotCQllcnIoIiB1c2Jfc3VibWl0X3VyYihyZWFkIGludCkgZmFpbGVkIHBpcGUgMHgleCBlcnIgJWQiLAotCQkgICAgcG9ydC0+aW50ZXJydXB0X2luX3VyYi0+cGlwZSwgcmV0dmFsKTsKKwkJZGV2X2VycigmcG9ydC0+ZGV2LAorCQkJInVzYl9zdWJtaXRfdXJiKHJlYWQgaW50KSBmYWlsZWQgcGlwZSAweCV4IGVyciAlZCIsCisJCQlwb3J0LT5pbnRlcnJ1cHRfaW5fdXJiLT5waXBlLCByZXR2YWwpOwogCQlnb3RvIGVycm9yOwogCX0KIAlyZXR1cm4gMDsKQEAgLTU2MywxMCArNTcwLDExIEBACiAJICogV29yay1hLXJvdW5kOiBoYW5kbGUgdGhlICd1c3VhbCcgYnVsay1pbiBwaXBlIGhlcmUKIAkgKi8KIAlpZiAodXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoID4gMikgewotCQl0dHkgPSBwb3J0LT5wb3J0LnR0eTsKKwkJdHR5ID0gdHR5X3BvcnRfdHR5X2dldCgmcG9ydC0+cG9ydCk7CiAJCWlmICh1cmItPmFjdHVhbF9sZW5ndGgpIHsKIAkJCXR0eV9pbnNlcnRfZmxpcF9zdHJpbmcodHR5LCBkYXRhLCB1cmItPmFjdHVhbF9sZW5ndGgpOwogCQkJdHR5X2ZsaXBfYnVmZmVyX3B1c2godHR5KTsKKwkJCXR0eV9rcmVmX3B1dCh0dHkpOwogCQl9CiAJCWdvdG8gZXhpdDsKIAl9CkBAIC01OTEsNyArNTk5LDcgQEAKIAkgKiB0byBsb29rIGluIHRvIHRoaXMgYmVmb3JlIGNvbW1pdHRpbmcgYW55IGNvZGUuCiAJICovCiAJaWYgKHByaXYtPmxhc3RfbHNyICYgTUNUX1UyMzJfTFNSX0VSUikgewotCQl0dHkgPSBwb3J0LT5wb3J0LnR0eTsKKwkJdHR5ID0gdHR5X3BvcnRfdHR5X2dldCgmcG9ydC0+cG9ydCk7CiAJCS8qIE92ZXJydW4gRXJyb3IgKi8KIAkJaWYgKHByaXYtPmxhc3RfbHNyICYgTUNUX1UyMzJfTFNSX09FKSB7CiAJCX0KQEAgLTYwNCwxNCArNjEyLDE2IEBACiAJCS8qIEJyZWFrIEluZGljYXRvciAqLwogCQlpZiAocHJpdi0+bGFzdF9sc3IgJiBNQ1RfVTIzMl9MU1JfQkkpIHsKIAkJfQorCQl0dHlfa3JlZl9wdXQodHR5KTsKIAl9CiAjZW5kaWYKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CiBleGl0OgogCXJldHZhbCA9IHVzYl9zdWJtaXRfdXJiKHVyYiwgR0ZQX0FUT01JQyk7CiAJaWYgKHJldHZhbCkKLQkJZXJyKCIlcyAtIHVzYl9zdWJtaXRfdXJiIGZhaWxlZCB3aXRoIHJlc3VsdCAlZCIsCi0JCSAgICAgX19mdW5jX18sIHJldHZhbCk7CisJCWRldl9lcnIoJnBvcnQtPmRldiwKKwkJCSIlcyAtIHVzYl9zdWJtaXRfdXJiIGZhaWxlZCB3aXRoIHJlc3VsdCAlZFxuIiwKKwkJCV9fZnVuY19fLCByZXR2YWwpOwogfSAvKiBtY3RfdTIzMl9yZWFkX2ludF9jYWxsYmFjayAqLwogCiBzdGF0aWMgdm9pZCBtY3RfdTIzMl9zZXRfdGVybWlvcyhzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LApAQCAtNjc4LDcgKzY4OCw4IEBACiAJY2FzZSBDUzg6CiAJCWxhc3RfbGNyIHw9IE1DVF9VMjMyX0RBVEFfQklUU184OyBicmVhazsKIAlkZWZhdWx0OgotCQllcnIoIkNTSVpFIHdhcyBub3QgQ1M1LUNTOCwgdXNpbmcgZGVmYXVsdCBvZiA4Iik7CisJCWRldl9lcnIoJnBvcnQtPmRldiwKKwkJCSJDU0laRSB3YXMgbm90IENTNS1DUzgsIHVzaW5nIGRlZmF1bHQgb2YgOFxuIik7CiAJCWxhc3RfbGNyIHw9IE1DVF9VMjMyX0RBVEFfQklUU184OwogCQlicmVhazsKIAl9CkBAIC04MTUsNyArODI2LDggQEAKIAlyZXR2YWwgPSB1c2JfcmVnaXN0ZXIoJm1jdF91MjMyX2RyaXZlcik7CiAJaWYgKHJldHZhbCkKIAkJZ290byBmYWlsZWRfdXNiX3JlZ2lzdGVyOwotCWluZm8oRFJJVkVSX0RFU0MgIiAiIERSSVZFUl9WRVJTSU9OKTsKKwlwcmludGsoS0VSTl9JTkZPIEtCVUlMRF9NT0ROQU1FICI6ICIgRFJJVkVSX1ZFUlNJT04gIjoiCisJICAgICAgIERSSVZFUl9ERVNDICJcbiIpOwogCXJldHVybiAwOwogZmFpbGVkX3VzYl9yZWdpc3RlcjoKIAl1c2Jfc2VyaWFsX2RlcmVnaXN0ZXIoJm1jdF91MjMyX2RldmljZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvbW9zNzcyMC5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL21vczc3MjAuYwppbmRleCA3YzQ5MTdkLi5lNzcyY2MwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvbW9zNzcyMC5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9tb3M3NzIwLmMKQEAgLTIxNiwxMiArMjE2LDEzIEBACiAKIAlkYXRhID0gdXJiLT50cmFuc2Zlcl9idWZmZXI7CiAKLQl0dHkgPSBwb3J0LT5wb3J0LnR0eTsKKwl0dHkgPSB0dHlfcG9ydF90dHlfZ2V0KCZwb3J0LT5wb3J0KTsKIAlpZiAodHR5ICYmIHVyYi0+YWN0dWFsX2xlbmd0aCkgewogCQl0dHlfYnVmZmVyX3JlcXVlc3Rfcm9vbSh0dHksIHVyYi0+YWN0dWFsX2xlbmd0aCk7CiAJCXR0eV9pbnNlcnRfZmxpcF9zdHJpbmcodHR5LCBkYXRhLCB1cmItPmFjdHVhbF9sZW5ndGgpOwogCQl0dHlfZmxpcF9idWZmZXJfcHVzaCh0dHkpOwogCX0KKwl0dHlfa3JlZl9wdXQodHR5KTsKIAogCWlmICghcG9ydC0+cmVhZF91cmIpIHsKIAkJZGJnKCJVUkIgS0lMTEVEICEhISIpOwpAQCAtMjYyLDEwICsyNjMsMTEgQEAKIAogCWRiZygiRW50ZXJpbmcgLi4uLi4uLi4uIik7CiAKLQl0dHkgPSBtb3M3NzIwX3BvcnQtPnBvcnQtPnBvcnQudHR5OworCXR0eSA9IHR0eV9wb3J0X3R0eV9nZXQoJm1vczc3MjBfcG9ydC0+cG9ydC0+cG9ydCk7CiAKIAlpZiAodHR5ICYmIG1vczc3MjBfcG9ydC0+b3BlbikKIAkJdHR5X3dha2V1cCh0dHkpOworCXR0eV9rcmVmX3B1dCh0dHkpOwogfQogCiAvKgpAQCAtMzUzLDE0ICszNTUsMTYgQEAKIAkJbW9zNzcyMF9wb3J0LT53cml0ZV91cmJfcG9vbFtqXSA9IHVyYjsKIAogCQlpZiAodXJiID09IE5VTEwpIHsKLQkJCWVycigiTm8gbW9yZSB1cmJzPz8/Iik7CisJCQlkZXZfZXJyKCZwb3J0LT5kZXYsICJObyBtb3JlIHVyYnM/Pz9cbiIpOwogCQkJY29udGludWU7CiAJCX0KIAogCQl1cmItPnRyYW5zZmVyX2J1ZmZlciA9IGttYWxsb2MoVVJCX1RSQU5TRkVSX0JVRkZFUl9TSVpFLAogCQkJCQkgICAgICAgR0ZQX0tFUk5FTCk7CiAJCWlmICghdXJiLT50cmFuc2Zlcl9idWZmZXIpIHsKLQkJCWVycigiJXMtb3V0IG9mIG1lbW9yeSBmb3IgdXJiIGJ1ZmZlcnMuIiwgX19mdW5jX18pOworCQkJZGV2X2VycigmcG9ydC0+ZGV2LAorCQkJCSIlcy1vdXQgb2YgbWVtb3J5IGZvciB1cmIgYnVmZmVycy5cbiIsCisJCQkJX19mdW5jX18pOwogCQkJdXNiX2ZyZWVfdXJiKG1vczc3MjBfcG9ydC0+d3JpdGVfdXJiX3Bvb2xbal0pOwogCQkJbW9zNzcyMF9wb3J0LT53cml0ZV91cmJfcG9vbFtqXSA9IE5VTEw7CiAJCQljb250aW51ZTsKQEAgLTY5Miw3ICs2OTYsOCBAQAogCQl1cmItPnRyYW5zZmVyX2J1ZmZlciA9IGttYWxsb2MoVVJCX1RSQU5TRkVSX0JVRkZFUl9TSVpFLAogCQkJCQkgICAgICAgR0ZQX0tFUk5FTCk7CiAJCWlmICh1cmItPnRyYW5zZmVyX2J1ZmZlciA9PSBOVUxMKSB7Ci0JCQllcnIoIiVzIG5vIG1vcmUga2VybmVsIG1lbW9yeS4uLiIsIF9fZnVuY19fKTsKKwkJCWRldl9lcnIoJnBvcnQtPmRldiwgIiVzIG5vIG1vcmUga2VybmVsIG1lbW9yeS4uLlxuIiwKKwkJCQlfX2Z1bmNfXyk7CiAJCQlnb3RvIGV4aXQ7CiAJCX0KIAl9CkBAIC03MTIsOCArNzE3LDggQEAKIAkvKiBzZW5kIGl0IGRvd24gdGhlIHBpcGUgKi8KIAlzdGF0dXMgPSB1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9BVE9NSUMpOwogCWlmIChzdGF0dXMpIHsKLQkJZXJyKCIlcyAtIHVzYl9zdWJtaXRfdXJiKHdyaXRlIGJ1bGspIGZhaWxlZCB3aXRoIHN0YXR1cyA9ICVkIiwKLQkJICAgIF9fZnVuY19fLCBzdGF0dXMpOworCQlkZXZfZXJyKCZwb3J0LT5kZXYsICIlcyAtIHVzYl9zdWJtaXRfdXJiKHdyaXRlIGJ1bGspIGZhaWxlZCAiCisJCQkid2l0aCBzdGF0dXMgPSAlZFxuIiwgX19mdW5jX18sIHN0YXR1cyk7CiAJCWJ5dGVzX3NlbnQgPSBzdGF0dXM7CiAJCWdvdG8gZXhpdDsKIAl9CkBAIC05NzMsNyArOTc4LDcgQEAKIAkvKiBDYWxjdWxhdGUgdGhlIERpdmlzb3IgKi8KIAlzdGF0dXMgPSBjYWxjX2JhdWRfcmF0ZV9kaXZpc29yKGJhdWRyYXRlLCAmZGl2aXNvcik7CiAJaWYgKHN0YXR1cykgewotCQllcnIoIiVzIC0gYmFkIGJhdWQgcmF0ZSIsIF9fZnVuY19fKTsKKwkJZGV2X2VycigmcG9ydC0+ZGV2LCAiJXMgLSBiYWQgYmF1ZCByYXRlXG4iLCBfX2Z1bmNfXyk7CiAJCXJldHVybiBzdGF0dXM7CiAJfQogCkBAIC0xMjY3LDI5ICsxMjcyLDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotLyoKLSAqIGdldF9udW1iZXJfYnl0ZXNfYXZhaWwgLSBnZXQgbnVtYmVyIG9mIGJ5dGVzIGF2YWlsYWJsZQotICoKLSAqIFB1cnBvc2U6IExldCB1c2VyIGNhbGwgaW9jdGwgdG8gZ2V0IHRoZSBjb3VudCBvZiBudW1iZXIgb2YgYnl0ZXMgYXZhaWxhYmxlLgotICovCi1zdGF0aWMgaW50IGdldF9udW1iZXJfYnl0ZXNfYXZhaWwoc3RydWN0IG1vc2NoaXBfcG9ydCAqbW9zNzcyMF9wb3J0LAotCQkJCSAgdW5zaWduZWQgaW50IF9fdXNlciAqdmFsdWUpCi17Ci0JdW5zaWduZWQgaW50IHJlc3VsdCA9IDA7Ci0Jc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSA9IG1vczc3MjBfcG9ydC0+cG9ydC0+cG9ydC50dHk7Ci0KLQlpZiAoIXR0eSkKLQkJcmV0dXJuIC1FTk9JT0NUTENNRDsKLQotCXJlc3VsdCA9IHR0eS0+cmVhZF9jbnQ7Ci0KLQlkYmcoIiVzKCVkKSA9ICVkIiwgX19mdW5jX18sICBtb3M3NzIwX3BvcnQtPnBvcnQtPm51bWJlciwgcmVzdWx0KTsKLQlpZiAoY29weV90b191c2VyKHZhbHVlLCAmcmVzdWx0LCBzaXplb2YoaW50KSkpCi0JCXJldHVybiAtRUZBVUxUOwotCi0JcmV0dXJuIC1FTk9JT0NUTENNRDsKLX0KLQogc3RhdGljIGludCBzZXRfbW9kZW1faW5mbyhzdHJ1Y3QgbW9zY2hpcF9wb3J0ICptb3M3NzIwX3BvcnQsIHVuc2lnbmVkIGludCBjbWQsCiAJCQkgIHVuc2lnbmVkIGludCBfX3VzZXIgKnZhbHVlKQogewpAQCAtMTQwOSwxMyArMTM5MSw2IEBACiAJZGJnKCIlcyAtIHBvcnQgJWQsIGNtZCA9IDB4JXgiLCBfX2Z1bmNfXywgcG9ydC0+bnVtYmVyLCBjbWQpOwogCiAJc3dpdGNoIChjbWQpIHsKLQljYXNlIFRJT0NJTlE6Ci0JCS8qIHJldHVybiBudW1iZXIgb2YgYnl0ZXMgYXZhaWxhYmxlICovCi0JCWRiZygiJXMgKCVkKSBUSU9DSU5RIiwgX19mdW5jX18sICBwb3J0LT5udW1iZXIpOwotCQlyZXR1cm4gZ2V0X251bWJlcl9ieXRlc19hdmFpbChtb3M3NzIwX3BvcnQsCi0JCQkJCSAgICAgICh1bnNpZ25lZCBpbnQgX191c2VyICopYXJnKTsKLQkJYnJlYWs7Ci0KIAljYXNlIFRJT0NTRVJHRVRMU1I6CiAJCWRiZygiJXMgKCVkKSBUSU9DU0VSR0VUTFNSIiwgX19mdW5jX18sICBwb3J0LT5udW1iZXIpOwogCQlyZXR1cm4gZ2V0X2xzcl9pbmZvKHR0eSwgbW9zNzcyMF9wb3J0LApAQCAtMTUwNiw3ICsxNDgxLDcgQEAKIAkvKiBjcmVhdGUgb3VyIHByaXZhdGUgc2VyaWFsIHN0cnVjdHVyZSAqLwogCW1vczc3MjBfc2VyaWFsID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IG1vc2NoaXBfc2VyaWFsKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKG1vczc3MjBfc2VyaWFsID09IE5VTEwpIHsKLQkJZXJyKCIlcyAtIE91dCBvZiBtZW1vcnkiLCBfX2Z1bmNfXyk7CisJCWRldl9lcnIoJmRldi0+ZGV2LCAiJXMgLSBPdXQgb2YgbWVtb3J5XG4iLCBfX2Z1bmNfXyk7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KIApAQCAtMTUxOSw3ICsxNDk0LDcgQEAKIAlmb3IgKGkgPSAwOyBpIDwgc2VyaWFsLT5udW1fcG9ydHM7ICsraSkgewogCQltb3M3NzIwX3BvcnQgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgbW9zY2hpcF9wb3J0KSwgR0ZQX0tFUk5FTCk7CiAJCWlmIChtb3M3NzIwX3BvcnQgPT0gTlVMTCkgewotCQkJZXJyKCIlcyAtIE91dCBvZiBtZW1vcnkiLCBfX2Z1bmNfXyk7CisJCQlkZXZfZXJyKCZkZXYtPmRldiwgIiVzIC0gT3V0IG9mIG1lbW9yeVxuIiwgX19mdW5jX18pOwogCQkJdXNiX3NldF9zZXJpYWxfZGF0YShzZXJpYWwsIE5VTEwpOwogCQkJa2ZyZWUobW9zNzcyMF9zZXJpYWwpOwogCQkJcmV0dXJuIC1FTk9NRU07CkBAIC0xNjEzLDcgKzE1ODgsOCBAQAogCWlmIChyZXR2YWwpCiAJCWdvdG8gZmFpbGVkX3BvcnRfZGV2aWNlX3JlZ2lzdGVyOwogCi0JaW5mbyhEUklWRVJfREVTQyAiICIgRFJJVkVSX1ZFUlNJT04pOworCXByaW50ayhLRVJOX0lORk8gS0JVSUxEX01PRE5BTUUgIjogIiBEUklWRVJfVkVSU0lPTiAiOiIKKwkgICAgICAgRFJJVkVSX0RFU0MgIlxuIik7CiAKIAkvKiBSZWdpc3RlciB3aXRoIHRoZSB1c2IgKi8KIAlyZXR2YWwgPSB1c2JfcmVnaXN0ZXIoJnVzYl9kcml2ZXIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL21vczc4NDAuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9tb3M3ODQwLmMKaW5kZXggMDlkODIwNi4uZmRhNGE2NCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL21vczc4NDAuYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvbW9zNzg0MC5jCkBAIC03MDksMTIgKzcwOSwxMyBAQAogCWRiZygiJXMiLCAiRW50ZXJpbmcgLi4uLi4uLi4uLi4gXG4iKTsKIAogCWlmICh1cmItPmFjdHVhbF9sZW5ndGgpIHsKLQkJdHR5ID0gbW9zNzg0MF9wb3J0LT5wb3J0LT5wb3J0LnR0eTsKKwkJdHR5ID0gdHR5X3BvcnRfdHR5X2dldCgmbW9zNzg0MF9wb3J0LT5wb3J0LT5wb3J0KTsKIAkJaWYgKHR0eSkgewogCQkJdHR5X2J1ZmZlcl9yZXF1ZXN0X3Jvb20odHR5LCB1cmItPmFjdHVhbF9sZW5ndGgpOwogCQkJdHR5X2luc2VydF9mbGlwX3N0cmluZyh0dHksIGRhdGEsIHVyYi0+YWN0dWFsX2xlbmd0aCk7CiAJCQlkYmcoIiAlcyBcbiIsIGRhdGEpOwogCQkJdHR5X2ZsaXBfYnVmZmVyX3B1c2godHR5KTsKKwkJCXR0eV9rcmVmX3B1dCh0dHkpOwogCQl9CiAJCW1vczc4NDBfcG9ydC0+aWNvdW50LnJ4ICs9IHVyYi0+YWN0dWFsX2xlbmd0aDsKIAkJc21wX3dtYigpOwpAQCAtNzczLDEwICs3NzQsMTAgQEAKIAogCWRiZygiJXMgXG4iLCAiRW50ZXJpbmcgLi4uLi4uLi4uIik7CiAKLQl0dHkgPSBtb3M3ODQwX3BvcnQtPnBvcnQtPnBvcnQudHR5OwotCisJdHR5ID0gdHR5X3BvcnRfdHR5X2dldCgmbW9zNzg0MF9wb3J0LT5wb3J0LT5wb3J0KTsKIAlpZiAodHR5ICYmIG1vczc4NDBfcG9ydC0+b3BlbikKIAkJdHR5X3dha2V1cCh0dHkpOworCXR0eV9rcmVmX3B1dCh0dHkpOwogCiB9CiAKQEAgLTg0Myw3ICs4NDQsNyBAQAogCQltb3M3ODQwX3BvcnQtPndyaXRlX3VyYl9wb29sW2pdID0gdXJiOwogCiAJCWlmICh1cmIgPT0gTlVMTCkgewotCQkJZXJyKCJObyBtb3JlIHVyYnM/Pz8iKTsKKwkJCWRldl9lcnIoJnBvcnQtPmRldiwgIk5vIG1vcmUgdXJicz8/P1xuIik7CiAJCQljb250aW51ZTsKIAkJfQogCkBAIC04NTIsNyArODUzLDkgQEAKIAkJaWYgKCF1cmItPnRyYW5zZmVyX2J1ZmZlcikgewogCQkJdXNiX2ZyZWVfdXJiKHVyYik7CiAJCQltb3M3ODQwX3BvcnQtPndyaXRlX3VyYl9wb29sW2pdID0gTlVMTDsKLQkJCWVycigiJXMtb3V0IG9mIG1lbW9yeSBmb3IgdXJiIGJ1ZmZlcnMuIiwgX19mdW5jX18pOworCQkJZGV2X2VycigmcG9ydC0+ZGV2LAorCQkJCSIlcy1vdXQgb2YgbWVtb3J5IGZvciB1cmIgYnVmZmVycy5cbiIsCisJCQkJX19mdW5jX18pOwogCQkJY29udGludWU7CiAJCX0KIAl9CkBAIC0xMDIwLDggKzEwMjMsOCBAQAogCQkJICAgIHVzYl9zdWJtaXRfdXJiKHNlcmlhbC0+cG9ydFswXS0+aW50ZXJydXB0X2luX3VyYiwKIAkJCQkJICAgR0ZQX0tFUk5FTCk7CiAJCQlpZiAocmVzcG9uc2UpIHsKLQkJCQllcnIoIiVzIC0gRXJyb3IgJWQgc3VibWl0dGluZyBpbnRlcnJ1cHQgdXJiIiwKLQkJCQkgICAgX19mdW5jX18sIHJlc3BvbnNlKTsKKwkJCQlkZXZfZXJyKCZwb3J0LT5kZXYsICIlcyAtIEVycm9yICVkIHN1Ym1pdHRpbmcgIgorCQkJCQkiaW50ZXJydXB0IHVyYlxuIiwgX19mdW5jX18sIHJlc3BvbnNlKTsKIAkJCX0KIAogCQl9CkBAIC0xMDU0LDggKzEwNTcsOCBAQAogCSAgICBwb3J0LT5idWxrX2luX2VuZHBvaW50QWRkcmVzcyk7CiAJcmVzcG9uc2UgPSB1c2Jfc3VibWl0X3VyYihtb3M3ODQwX3BvcnQtPnJlYWRfdXJiLCBHRlBfS0VSTkVMKTsKIAlpZiAocmVzcG9uc2UpIHsKLQkJZXJyKCIlcyAtIEVycm9yICVkIHN1Ym1pdHRpbmcgY29udHJvbCB1cmIiLCBfX2Z1bmNfXywKLQkJICAgIHJlc3BvbnNlKTsKKwkJZGV2X2VycigmcG9ydC0+ZGV2LCAiJXMgLSBFcnJvciAlZCBzdWJtaXR0aW5nIGNvbnRyb2wgdXJiXG4iLAorCQkJX19mdW5jX18sIHJlc3BvbnNlKTsKIAl9CiAKIAkvKiBpbml0aWFsaXplIG91ciB3YWl0IHF1ZXVlcyAqLwpAQCAtMTQ5MSw3ICsxNDk0LDggQEAKIAkJICAgIGttYWxsb2MoVVJCX1RSQU5TRkVSX0JVRkZFUl9TSVpFLCBHRlBfS0VSTkVMKTsKIAogCQlpZiAodXJiLT50cmFuc2Zlcl9idWZmZXIgPT0gTlVMTCkgewotCQkJZXJyKCIlcyBubyBtb3JlIGtlcm5lbCBtZW1vcnkuLi4iLCBfX2Z1bmNfXyk7CisJCQlkZXZfZXJyKCZwb3J0LT5kZXYsICIlcyBubyBtb3JlIGtlcm5lbCBtZW1vcnkuLi5cbiIsCisJCQkJX19mdW5jX18pOwogCQkJZ290byBleGl0OwogCQl9CiAJfQpAQCAtMTUxNiw4ICsxNTIwLDggQEAKIAogCWlmIChzdGF0dXMpIHsKIAkJbW9zNzg0MF9wb3J0LT5idXN5W2ldID0gMDsKLQkJZXJyKCIlcyAtIHVzYl9zdWJtaXRfdXJiKHdyaXRlIGJ1bGspIGZhaWxlZCB3aXRoIHN0YXR1cyA9ICVkIiwKLQkJICAgIF9fZnVuY19fLCBzdGF0dXMpOworCQlkZXZfZXJyKCZwb3J0LT5kZXYsICIlcyAtIHVzYl9zdWJtaXRfdXJiKHdyaXRlIGJ1bGspIGZhaWxlZCAiCisJCQkid2l0aCBzdGF0dXMgPSAlZFxuIiwgX19mdW5jX18sIHN0YXR1cyk7CiAJCWJ5dGVzX3NlbnQgPSBzdGF0dXM7CiAJCWdvdG8gZXhpdDsKIAl9CkBAIC0xODU1LDggKzE4NTksNyBAQAogCQkvKiBDYWxjdWxhdGUgdGhlIERpdmlzb3IgKi8KIAogCQlpZiAoc3RhdHVzKSB7Ci0JCQllcnIoIiVzIC0gYmFkIGJhdWQgcmF0ZSIsIF9fZnVuY19fKTsKLQkJCWRiZygiJXNcbiIsICJiYWQgYmF1ZCByYXRlIik7CisJCQlkZXZfZXJyKCZwb3J0LT5kZXYsICIlcyAtIGJhZCBiYXVkIHJhdGVcbiIsIF9fZnVuY19fKTsKIAkJCXJldHVybiBzdGF0dXM7CiAJCX0KIAkJLyogRW5hYmxlIGFjY2VzcyB0byBkaXZpc29yIGxhdGNoICovCkBAIC0yNDQ1LDcgKzI0NDgsNyBAQAogCWZvciAoaSA9IDA7IGkgPCBzZXJpYWwtPm51bV9wb3J0czsgKytpKSB7CiAJCW1vczc4NDBfcG9ydCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBtb3NjaGlwX3BvcnQpLCBHRlBfS0VSTkVMKTsKIAkJaWYgKG1vczc4NDBfcG9ydCA9PSBOVUxMKSB7Ci0JCQllcnIoIiVzIC0gT3V0IG9mIG1lbW9yeSIsIF9fZnVuY19fKTsKKwkJCWRldl9lcnIoJmRldi0+ZGV2LCAiJXMgLSBPdXQgb2YgbWVtb3J5XG4iLCBfX2Z1bmNfXyk7CiAJCQlzdGF0dXMgPSAtRU5PTUVNOwogCQkJaS0tOyAvKiBkb24ndCBmb2xsb3cgTlVMTCBwb2ludGVyIGNsZWFuaW5nIHVwICovCiAJCQlnb3RvIGVycm9yOwpAQCAtMjc0Miw3ICsyNzQ1LDggQEAKIAkJZ290byBmYWlsZWRfcG9ydF9kZXZpY2VfcmVnaXN0ZXI7CiAKIAlkYmcoIiVzXG4iLCAiRW50cmluZy4uLiIpOwotCWluZm8oRFJJVkVSX0RFU0MgIiAiIERSSVZFUl9WRVJTSU9OKTsKKwlwcmludGsoS0VSTl9JTkZPIEtCVUlMRF9NT0ROQU1FICI6ICIgRFJJVkVSX1ZFUlNJT04gIjoiCisJICAgICAgIERSSVZFUl9ERVNDICJcbiIpOwogCiAJLyogUmVnaXN0ZXIgd2l0aCB0aGUgdXNiICovCiAJcmV0dmFsID0gdXNiX3JlZ2lzdGVyKCZpb19kcml2ZXIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL25hdm1hbi5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL25hdm1hbi5jCmluZGV4IGQ2NzM2NTMuLmJjZGNiYjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9uYXZtYW4uYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvbmF2bWFuLmMKQEAgLTY0LDEyICs2NCwxMyBAQAogCXVzYl9zZXJpYWxfZGVidWdfZGF0YShkZWJ1ZywgJnBvcnQtPmRldiwgX19mdW5jX18sCiAJCQkgICAgICB1cmItPmFjdHVhbF9sZW5ndGgsIGRhdGEpOwogCi0JdHR5ID0gcG9ydC0+cG9ydC50dHk7CisJdHR5ID0gdHR5X3BvcnRfdHR5X2dldCgmcG9ydC0+cG9ydCk7CiAJaWYgKHR0eSAmJiB1cmItPmFjdHVhbF9sZW5ndGgpIHsKIAkJdHR5X2J1ZmZlcl9yZXF1ZXN0X3Jvb20odHR5LCB1cmItPmFjdHVhbF9sZW5ndGgpOwogCQl0dHlfaW5zZXJ0X2ZsaXBfc3RyaW5nKHR0eSwgZGF0YSwgdXJiLT5hY3R1YWxfbGVuZ3RoKTsKIAkJdHR5X2ZsaXBfYnVmZmVyX3B1c2godHR5KTsKIAl9CisJdHR5X2tyZWZfcHV0KHR0eSk7CiAKIGV4aXQ6CiAJcmVzdWx0ID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfQVRPTUlDKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9vbW5pbmV0LmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvb21uaW5ldC5jCmluZGV4IGFlOGUyMjcuLmRmNjUzOTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9vbW5pbmV0LmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL29tbmluZXQuYwpAQCAtMTU0LDggKzE1NCw4IEBACiAKIAlvZCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBvbW5pbmV0X2RhdGEpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIW9kKSB7Ci0JCWVycigiJXMtIGttYWxsb2MoJVpkKSBmYWlsZWQuIiwKLQkJCQlfX2Z1bmNfXywgc2l6ZW9mKHN0cnVjdCBvbW5pbmV0X2RhdGEpKTsKKwkJZGV2X2VycigmcG9ydC0+ZGV2LCAiJXMtIGttYWxsb2MoJVpkKSBmYWlsZWQuXG4iLAorCQkJX19mdW5jX18sIHNpemVvZihzdHJ1Y3Qgb21uaW5ldF9kYXRhKSk7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAl1c2Jfc2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCwgb2QpOwpAQCAtMTcyLDcgKzE3Miw3IEBACiAJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX2Z1bmNfXywgcG9ydC0+bnVtYmVyKTsKIAogCXdwb3J0ID0gc2VyaWFsLT5wb3J0WzFdOwotCXdwb3J0LT5wb3J0LnR0eSA9IHR0eTsJCS8qIEZJWE1FICovCisJdHR5X3BvcnRfdHR5X3NldCgmd3BvcnQtPnBvcnQsIHR0eSk7CiAKIAkvKiBTdGFydCByZWFkaW5nIGZyb20gdGhlIGRldmljZSAqLwogCXVzYl9maWxsX2J1bGtfdXJiKHBvcnQtPnJlYWRfdXJiLCBzZXJpYWwtPmRldiwKQEAgLTE4Myw4ICsxODMsOSBAQAogCQkJb21uaW5ldF9yZWFkX2J1bGtfY2FsbGJhY2ssIHBvcnQpOwogCXJlc3VsdCA9IHVzYl9zdWJtaXRfdXJiKHBvcnQtPnJlYWRfdXJiLCBHRlBfS0VSTkVMKTsKIAlpZiAocmVzdWx0KQotCQllcnIoIiVzIC0gZmFpbGVkIHN1Ym1pdHRpbmcgcmVhZCB1cmIsIGVycm9yICVkIiwKLQkJCQkJCQlfX2Z1bmNfXywgcmVzdWx0KTsKKwkJZGV2X2VycigmcG9ydC0+ZGV2LAorCQkJIiVzIC0gZmFpbGVkIHN1Ym1pdHRpbmcgcmVhZCB1cmIsIGVycm9yICVkXG4iLAorCQkJX19mdW5jX18sIHJlc3VsdCk7CiAJcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtMjI5LDkgKzIzMCwxMSBAQAogCX0KIAogCWlmICh1cmItPmFjdHVhbF9sZW5ndGggJiYgaGVhZGVyLT5vaF9sZW4pIHsKLQkJdHR5X2luc2VydF9mbGlwX3N0cmluZyhwb3J0LT5wb3J0LnR0eSwKLQkJCWRhdGEgKyBPTU5JTkVUX0RBVEFPRkZTRVQsIGhlYWRlci0+b2hfbGVuKTsKLQkJdHR5X2ZsaXBfYnVmZmVyX3B1c2gocG9ydC0+cG9ydC50dHkpOworCQlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5ID0gdHR5X3BvcnRfdHR5X2dldCgmcG9ydC0+cG9ydCk7CisJCXR0eV9pbnNlcnRfZmxpcF9zdHJpbmcodHR5LCBkYXRhICsgT01OSU5FVF9EQVRBT0ZGU0VULAorCQkJCQkJCWhlYWRlci0+b2hfbGVuKTsKKwkJdHR5X2ZsaXBfYnVmZmVyX3B1c2godHR5KTsKKwkJdHR5X2tyZWZfcHV0KHR0eSk7CiAJfQogCiAJLyogQ29udGludWUgdHJ5aW5nIHRvIGFsd2F5cyByZWFkICAqLwpAQCAtMjQyLDggKzI0NSw5IEBACiAJCQlvbW5pbmV0X3JlYWRfYnVsa19jYWxsYmFjaywgcG9ydCk7CiAJcmVzdWx0ID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfQVRPTUlDKTsKIAlpZiAocmVzdWx0KQotCQllcnIoIiVzIC0gZmFpbGVkIHJlc3VibWl0dGluZyByZWFkIHVyYiwgZXJyb3IgJWQiLAotCQkJCQkJX19mdW5jX18sIHJlc3VsdCk7CisJCWRldl9lcnIoJnBvcnQtPmRldiwKKwkJCSIlcyAtIGZhaWxlZCByZXN1Ym1pdHRpbmcgcmVhZCB1cmIsIGVycm9yICVkXG4iLAorCQkJX19mdW5jX18sIHJlc3VsdCk7CiAKIAlyZXR1cm47CiB9CkBAIC0yOTYsOCArMzAwLDkgQEAKIAlyZXN1bHQgPSB1c2Jfc3VibWl0X3VyYih3cG9ydC0+d3JpdGVfdXJiLCBHRlBfQVRPTUlDKTsKIAlpZiAocmVzdWx0KSB7CiAJCXdwb3J0LT53cml0ZV91cmJfYnVzeSA9IDA7Ci0JCWVycigiJXMgLSBmYWlsZWQgc3VibWl0dGluZyB3cml0ZSB1cmIsIGVycm9yICVkIiwKLQkJCQkJCQlfX2Z1bmNfXywgcmVzdWx0KTsKKwkJZGV2X2VycigmcG9ydC0+ZGV2LAorCQkJIiVzIC0gZmFpbGVkIHN1Ym1pdHRpbmcgd3JpdGUgdXJiLCBlcnJvciAlZFxuIiwKKwkJCV9fZnVuY19fLCByZXN1bHQpOwogCX0gZWxzZQogCQlyZXN1bHQgPSBjb3VudDsKIApAQCAtMzYyLDcgKzM2Nyw4IEBACiAJcmV0dmFsID0gdXNiX3JlZ2lzdGVyKCZvbW5pbmV0X2RyaXZlcik7CiAJaWYgKHJldHZhbCkKIAkJZ290byBmYWlsZWRfdXNiX3JlZ2lzdGVyOwotCWluZm8oRFJJVkVSX1ZFUlNJT04gIjoiIERSSVZFUl9ERVNDKTsKKwlwcmludGsoS0VSTl9JTkZPIEtCVUlMRF9NT0ROQU1FICI6ICIgRFJJVkVSX1ZFUlNJT04gIjoiCisJICAgICAgIERSSVZFUl9ERVNDICJcbiIpOwogCXJldHVybiAwOwogZmFpbGVkX3VzYl9yZWdpc3RlcjoKIAl1c2Jfc2VyaWFsX2RlcmVnaXN0ZXIoJnp5eGVsX29tbmluZXRfZGV2aWNlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9vcHRpb24uYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9vcHRpb24uYwppbmRleCA3M2Y4Mjc3Li4zZDg3ZWFiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvb3B0aW9uLmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL29wdGlvbi5jCkBAIC03OSwyNyArNzksMTYgQEAKICNkZWZpbmUgT1BUSU9OX1BST0RVQ1RfVklQRVIJCQkweDY2MDAKICNkZWZpbmUgT1BUSU9OX1BST0RVQ1RfVklQRVJfQlVTCQkweDY2MDEKICNkZWZpbmUgT1BUSU9OX1BST0RVQ1RfR1RfTUFYX1JFQURZCQkweDY3MDEKLSNkZWZpbmUgT1BUSU9OX1BST0RVQ1RfR1RfTUFYCQkJMHg2NzExCiAjZGVmaW5lIE9QVElPTl9QUk9EVUNUX0ZVSklfTU9ERU1fTElHSFQJCTB4NjcyMQogI2RlZmluZSBPUFRJT05fUFJPRFVDVF9GVUpJX01PREVNX0dUCQkweDY3NDEKICNkZWZpbmUgT1BUSU9OX1BST0RVQ1RfRlVKSV9NT0RFTV9FWAkJMHg2NzYxCi0jZGVmaW5lIE9QVElPTl9QUk9EVUNUX0ZVSklfTkVUV09SS19MSUdIVAkweDY3MzEKLSNkZWZpbmUgT1BUSU9OX1BST0RVQ1RfRlVKSV9ORVRXT1JLX0dUCQkweDY3NTEKLSNkZWZpbmUgT1BUSU9OX1BST0RVQ1RfRlVKSV9ORVRXT1JLX0VYCQkweDY3NzEKICNkZWZpbmUgT1BUSU9OX1BST0RVQ1RfS09JX01PREVNCQkweDY4MDAKLSNkZWZpbmUgT1BUSU9OX1BST0RVQ1RfS09JX05FVFdPUksJCTB4NjgxMQogI2RlZmluZSBPUFRJT05fUFJPRFVDVF9TQ09SUElPTl9NT0RFTQkJMHg2OTAxCi0jZGVmaW5lIE9QVElPTl9QUk9EVUNUX1NDT1JQSU9OX05FVFdPUksJCTB4NjkxMQogI2RlZmluZSBPUFRJT05fUFJPRFVDVF9FVE5BX01PREVNCQkweDcwMDEKLSNkZWZpbmUgT1BUSU9OX1BST0RVQ1RfRVROQV9ORVRXT1JLCQkweDcwMTEKICNkZWZpbmUgT1BUSU9OX1BST0RVQ1RfRVROQV9NT0RFTV9MSVRFCQkweDcwMjEKICNkZWZpbmUgT1BUSU9OX1BST0RVQ1RfRVROQV9NT0RFTV9HVAkJMHg3MDQxCiAjZGVmaW5lIE9QVElPTl9QUk9EVUNUX0VUTkFfTU9ERU1fRVgJCTB4NzA2MQotI2RlZmluZSBPUFRJT05fUFJPRFVDVF9FVE5BX05FVFdPUktfTElURQkweDcwMzEKLSNkZWZpbmUgT1BUSU9OX1BST0RVQ1RfRVROQV9ORVRXT1JLX0dUCQkweDcwNTEKLSNkZWZpbmUgT1BUSU9OX1BST0RVQ1RfRVROQV9ORVRXT1JLX0VYCQkweDcwNzEKICNkZWZpbmUgT1BUSU9OX1BST0RVQ1RfRVROQV9LT0lfTU9ERU0JCTB4NzEwMAotI2RlZmluZSBPUFRJT05fUFJPRFVDVF9FVE5BX0tPSV9ORVRXT1JLCQkweDcxMTEKIAogI2RlZmluZSBIVUFXRUlfVkVORE9SX0lECQkJMHgxMkQxCiAjZGVmaW5lIEhVQVdFSV9QUk9EVUNUX0U2MDAJCQkweDEwMDEKQEAgLTIyMCw2ICsyMDksMTYgQEAKICNkZWZpbmUgWlRFX1BST0RVQ1RfTUY2MjgJCQkweDAwMTUKICNkZWZpbmUgWlRFX1BST0RVQ1RfQ0RNQV9URUNICQkJMHhmZmZlCiAKKy8qIEVyaWNzc29uIHByb2R1Y3RzICovCisjZGVmaW5lIEVSSUNTU09OX1ZFTkRPUl9JRAkJCTB4MGJkYgorI2RlZmluZSBFUklDU1NPTl9QUk9EVUNUX0YzNTA3RwkJCTB4MTkwMAorCisvKiBQYW50ZWNoIHByb2R1Y3RzICovCisjZGVmaW5lIFBBTlRFQ0hfVkVORE9SX0lECQkJMHgxMDZjCisjZGVmaW5lIFBBTlRFQ0hfUFJPRFVDVF9QQzU3NDAJCQkweDM3MDEKKyNkZWZpbmUgUEFOVEVDSF9QUk9EVUNUX1BDNTc1MAkJCTB4MzcwMiAgLyogUFgtNTAwICovCisjZGVmaW5lIFBBTlRFQ0hfUFJPRFVDVF9VTTE1MAkJCTB4MzcxMQorCiBzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgb3B0aW9uX2lkc1tdID0gewogCXsgVVNCX0RFVklDRShPUFRJT05fVkVORE9SX0lELCBPUFRJT05fUFJPRFVDVF9DT0xUKSB9LAogCXsgVVNCX0RFVklDRShPUFRJT05fVkVORE9SX0lELCBPUFRJT05fUFJPRFVDVF9SSUNPTEEpIH0sCkBAIC0yMzUsMjcgKzIzNCwxNiBAQAogCXsgVVNCX0RFVklDRShPUFRJT05fVkVORE9SX0lELCBPUFRJT05fUFJPRFVDVF9WSVBFUikgfSwKIAl7IFVTQl9ERVZJQ0UoT1BUSU9OX1ZFTkRPUl9JRCwgT1BUSU9OX1BST0RVQ1RfVklQRVJfQlVTKSB9LAogCXsgVVNCX0RFVklDRShPUFRJT05fVkVORE9SX0lELCBPUFRJT05fUFJPRFVDVF9HVF9NQVhfUkVBRFkpIH0sCi0JeyBVU0JfREVWSUNFKE9QVElPTl9WRU5ET1JfSUQsIE9QVElPTl9QUk9EVUNUX0dUX01BWCkgfSwKIAl7IFVTQl9ERVZJQ0UoT1BUSU9OX1ZFTkRPUl9JRCwgT1BUSU9OX1BST0RVQ1RfRlVKSV9NT0RFTV9MSUdIVCkgfSwKIAl7IFVTQl9ERVZJQ0UoT1BUSU9OX1ZFTkRPUl9JRCwgT1BUSU9OX1BST0RVQ1RfRlVKSV9NT0RFTV9HVCkgfSwKIAl7IFVTQl9ERVZJQ0UoT1BUSU9OX1ZFTkRPUl9JRCwgT1BUSU9OX1BST0RVQ1RfRlVKSV9NT0RFTV9FWCkgfSwKLQl7IFVTQl9ERVZJQ0UoT1BUSU9OX1ZFTkRPUl9JRCwgT1BUSU9OX1BST0RVQ1RfRlVKSV9ORVRXT1JLX0xJR0hUKSB9LAotCXsgVVNCX0RFVklDRShPUFRJT05fVkVORE9SX0lELCBPUFRJT05fUFJPRFVDVF9GVUpJX05FVFdPUktfR1QpIH0sCi0JeyBVU0JfREVWSUNFKE9QVElPTl9WRU5ET1JfSUQsIE9QVElPTl9QUk9EVUNUX0ZVSklfTkVUV09SS19FWCkgfSwKIAl7IFVTQl9ERVZJQ0UoT1BUSU9OX1ZFTkRPUl9JRCwgT1BUSU9OX1BST0RVQ1RfS09JX01PREVNKSB9LAotCXsgVVNCX0RFVklDRShPUFRJT05fVkVORE9SX0lELCBPUFRJT05fUFJPRFVDVF9LT0lfTkVUV09SSykgfSwKIAl7IFVTQl9ERVZJQ0UoT1BUSU9OX1ZFTkRPUl9JRCwgT1BUSU9OX1BST0RVQ1RfU0NPUlBJT05fTU9ERU0pIH0sCi0JeyBVU0JfREVWSUNFKE9QVElPTl9WRU5ET1JfSUQsIE9QVElPTl9QUk9EVUNUX1NDT1JQSU9OX05FVFdPUkspIH0sCiAJeyBVU0JfREVWSUNFKE9QVElPTl9WRU5ET1JfSUQsIE9QVElPTl9QUk9EVUNUX0VUTkFfTU9ERU0pIH0sCi0JeyBVU0JfREVWSUNFKE9QVElPTl9WRU5ET1JfSUQsIE9QVElPTl9QUk9EVUNUX0VUTkFfTkVUV09SSykgfSwKIAl7IFVTQl9ERVZJQ0UoT1BUSU9OX1ZFTkRPUl9JRCwgT1BUSU9OX1BST0RVQ1RfRVROQV9NT0RFTV9MSVRFKSB9LAogCXsgVVNCX0RFVklDRShPUFRJT05fVkVORE9SX0lELCBPUFRJT05fUFJPRFVDVF9FVE5BX01PREVNX0dUKSB9LAogCXsgVVNCX0RFVklDRShPUFRJT05fVkVORE9SX0lELCBPUFRJT05fUFJPRFVDVF9FVE5BX01PREVNX0VYKSB9LAotCXsgVVNCX0RFVklDRShPUFRJT05fVkVORE9SX0lELCBPUFRJT05fUFJPRFVDVF9FVE5BX05FVFdPUktfTElURSkgfSwKLQl7IFVTQl9ERVZJQ0UoT1BUSU9OX1ZFTkRPUl9JRCwgT1BUSU9OX1BST0RVQ1RfRVROQV9ORVRXT1JLX0dUKSB9LAotCXsgVVNCX0RFVklDRShPUFRJT05fVkVORE9SX0lELCBPUFRJT05fUFJPRFVDVF9FVE5BX05FVFdPUktfRVgpIH0sCiAJeyBVU0JfREVWSUNFKE9QVElPTl9WRU5ET1JfSUQsIE9QVElPTl9QUk9EVUNUX0VUTkFfS09JX01PREVNKSB9LAotCXsgVVNCX0RFVklDRShPUFRJT05fVkVORE9SX0lELCBPUFRJT05fUFJPRFVDVF9FVE5BX0tPSV9ORVRXT1JLKSB9LAogCXsgVVNCX0RFVklDRV9BTkRfSU5URVJGQUNFX0lORk8oSFVBV0VJX1ZFTkRPUl9JRCwgSFVBV0VJX1BST0RVQ1RfRTYwMCwgMHhmZiwgMHhmZiwgMHhmZikgfSwKIAl7IFVTQl9ERVZJQ0VfQU5EX0lOVEVSRkFDRV9JTkZPKEhVQVdFSV9WRU5ET1JfSUQsIEhVQVdFSV9QUk9EVUNUX0UyMjAsIDB4ZmYsIDB4ZmYsIDB4ZmYpIH0sCiAJeyBVU0JfREVWSUNFX0FORF9JTlRFUkZBQ0VfSU5GTyhIVUFXRUlfVkVORE9SX0lELCBIVUFXRUlfUFJPRFVDVF9FMjIwQklTLCAweGZmLCAweGZmLCAweGZmKSB9LApAQCAtMzE4LDcgKzMwNiw4IEBACiAJeyBVU0JfREVWSUNFKERFTExfVkVORE9SX0lELCAweDgxMzYpIH0sCS8qIERlbGwgV2lyZWxlc3MgSFNEUEEgNTUyMCA9PSBOb3ZhdGVsIEV4cGVkaXRlIEVVODYwRCAqLwogCXsgVVNCX0RFVklDRShERUxMX1ZFTkRPUl9JRCwgMHg4MTM3KSB9LAkvKiBEZWxsIFdpcmVsZXNzIEhTRFBBIDU1MjAgKi8KIAl7IFVTQl9ERVZJQ0UoREVMTF9WRU5ET1JfSUQsIDB4ODEzOCkgfSwJLyogRGVsbCBXaXJlbGVzcyA1NTIwIFZvZGEgSSBNb2JpbGUgQnJvYWRiYW5kICgzRyBIU0RQQSkgTWluaWNhcmQgKi8KLQl7IFVTQl9ERVZJQ0UoQU5ZREFUQV9WRU5ET1JfSUQsIEFOWURBVEFfUFJPRFVDVF9BRFVfRTEwMEEpIH0sCisJeyBVU0JfREVWSUNFKERFTExfVkVORE9SX0lELCAweDgxNDcpIH0sCS8qIERlbGwgV2lyZWxlc3MgNTUzMCBNb2JpbGUgQnJvYWRiYW5kICgzRyBIU1BBKSBNaW5pLUNhcmQgKi8KKwl7IFVTQl9ERVZJQ0UoQU5ZREFUQV9WRU5ET1JfSUQsIEFOWURBVEFfUFJPRFVDVF9BRFVfRTEwMEEpIH0sCS8qIEFEVS1FMTAwLCBBRFUtMzEwICovCiAJeyBVU0JfREVWSUNFKEFOWURBVEFfVkVORE9SX0lELCBBTllEQVRBX1BST0RVQ1RfQURVXzUwMEEpIH0sCiAJeyBVU0JfREVWSUNFKEFOWURBVEFfVkVORE9SX0lELCBBTllEQVRBX1BST0RVQ1RfQURVXzYyMFVXKSB9LAogCXsgVVNCX0RFVklDRShBWEVTU1RFTF9WRU5ET1JfSUQsIEFYRVNTVEVMX1BST0RVQ1RfTVYxMTBIKSB9LApAQCAtMzQ5LDYgKzMzOCwxMCBAQAogCXsgVVNCX0RFVklDRShURUxJVF9WRU5ET1JfSUQsIFRFTElUX1BST0RVQ1RfVUM4NjRFKSB9LAogCXsgVVNCX0RFVklDRShaVEVfVkVORE9SX0lELCBaVEVfUFJPRFVDVF9NRjYyOCkgfSwKIAl7IFVTQl9ERVZJQ0UoWlRFX1ZFTkRPUl9JRCwgWlRFX1BST0RVQ1RfQ0RNQV9URUNIKSB9LAorCXsgVVNCX0RFVklDRShFUklDU1NPTl9WRU5ET1JfSUQsIEVSSUNTU09OX1BST0RVQ1RfRjM1MDdHKSB9LAorCXsgVVNCX0RFVklDRShQQU5URUNIX1ZFTkRPUl9JRCwgUEFOVEVDSF9QUk9EVUNUX1BDNTc0MCkgfSwKKwl7IFVTQl9ERVZJQ0UoUEFOVEVDSF9WRU5ET1JfSUQsIFBBTlRFQ0hfUFJPRFVDVF9QQzU3NTApIH0sCisJeyBVU0JfREVWSUNFKFBBTlRFQ0hfVkVORE9SX0lELCBQQU5URUNIX1BST0RVQ1RfVU0xNTApIH0sCiAJeyB9IC8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCiB9OwogTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIG9wdGlvbl9pZHMpOwpAQCAtNDI3LDcgKzQyMCw4IEBACiAJaWYgKHJldHZhbCkKIAkJZ290byBmYWlsZWRfZHJpdmVyX3JlZ2lzdGVyOwogCi0JaW5mbyhEUklWRVJfREVTQyAiOiAiIERSSVZFUl9WRVJTSU9OKTsKKwlwcmludGsoS0VSTl9JTkZPIEtCVUlMRF9NT0ROQU1FICI6ICIgRFJJVkVSX1ZFUlNJT04gIjoiCisJICAgICAgIERSSVZFUl9ERVNDICJcbiIpOwogCiAJcmV0dXJuIDA7CiAKQEAgLTU3MSwxNCArNTY1LDE0IEBACiAJCWRiZygiJXM6IG5vbnplcm8gc3RhdHVzOiAlZCBvbiBlbmRwb2ludCAlMDJ4LiIsCiAJCSAgICBfX2Z1bmNfXywgc3RhdHVzLCBlbmRwb2ludCk7CiAJfSBlbHNlIHsKLQkJdHR5ID0gcG9ydC0+cG9ydC50dHk7CisJCXR0eSA9IHR0eV9wb3J0X3R0eV9nZXQoJnBvcnQtPnBvcnQpOwogCQlpZiAodXJiLT5hY3R1YWxfbGVuZ3RoKSB7CiAJCQl0dHlfYnVmZmVyX3JlcXVlc3Rfcm9vbSh0dHksIHVyYi0+YWN0dWFsX2xlbmd0aCk7CiAJCQl0dHlfaW5zZXJ0X2ZsaXBfc3RyaW5nKHR0eSwgZGF0YSwgdXJiLT5hY3R1YWxfbGVuZ3RoKTsKIAkJCXR0eV9mbGlwX2J1ZmZlcl9wdXNoKHR0eSk7Ci0JCX0gZWxzZSB7CisJCX0gZWxzZSAKIAkJCWRiZygiJXM6IGVtcHR5IHJlYWQgdXJiIHJlY2VpdmVkIiwgX19mdW5jX18pOwotCQl9CisJCXR0eV9rcmVmX3B1dCh0dHkpOwogCiAJCS8qIFJlc3VibWl0IHVyYiBzbyB3ZSBjb250aW51ZSByZWNlaXZpbmcgKi8KIAkJaWYgKHBvcnQtPnBvcnQuY291bnQgJiYgc3RhdHVzICE9IC1FU0hVVERPV04pIHsKQEAgLTY0Nyw5ICs2NDEsMTMgQEAKIAkJCXBvcnRkYXRhLT5kc3Jfc3RhdGUgPSAoKHNpZ25hbHMgJiAweDAyKSA/IDEgOiAwKTsKIAkJCXBvcnRkYXRhLT5yaV9zdGF0ZSA9ICgoc2lnbmFscyAmIDB4MDgpID8gMSA6IDApOwogCi0JCQlpZiAocG9ydC0+cG9ydC50dHkgJiYgIUNfQ0xPQ0FMKHBvcnQtPnBvcnQudHR5KSAmJgotCQkJCQlvbGRfZGNkX3N0YXRlICYmICFwb3J0ZGF0YS0+ZGNkX3N0YXRlKQotCQkJCXR0eV9oYW5ndXAocG9ydC0+cG9ydC50dHkpOworCQkJaWYgKG9sZF9kY2Rfc3RhdGUgJiYgIXBvcnRkYXRhLT5kY2Rfc3RhdGUpIHsKKwkJCQlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5ID0KKwkJCQkJCXR0eV9wb3J0X3R0eV9nZXQoJnBvcnQtPnBvcnQpOworCQkJCWlmICh0dHkgJiYgIUNfQ0xPQ0FMKHR0eSkpCisJCQkJCXR0eV9oYW5ndXAodHR5KTsKKwkJCQl0dHlfa3JlZl9wdXQodHR5KTsKKwkJCX0KIAkJfSBlbHNlIHsKIAkJCWRiZygiJXM6IHR5cGUgJXggcmVxICV4IiwgX19mdW5jX18sCiAJCQkJcmVxX3BrdC0+YlJlcXVlc3RUeXBlLCByZXFfcGt0LT5iUmVxdWVzdCk7CkBAIC03OTMsNyArNzkxLDcgQEAKIAkJZm9yIChpID0gMDsgaSA8IE5fT1VUX1VSQjsgaSsrKQogCQkJdXNiX2tpbGxfdXJiKHBvcnRkYXRhLT5vdXRfdXJic1tpXSk7CiAJfQotCXBvcnQtPnBvcnQudHR5ID0gTlVMTDsJLyogRklYTUUgKi8KKwl0dHlfcG9ydF90dHlfc2V0KCZwb3J0LT5wb3J0LCBOVUxMKTsKIH0KIAogLyogSGVscGVyIGZ1bmN0aW9ucyB1c2VkIGJ5IG9wdGlvbl9zZXR1cF91cmJzICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvb3RpNjg1OC5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL290aTY4NTguYwppbmRleCA4MWRiNTcxLi5iYTU1MWYwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvb3RpNjg1OC5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9vdGk2ODU4LmMKQEAgLTIyNCwxMCArMjI0LDYgQEAKIAlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0OyAgIC8qIFVTQiBwb3J0IHdpdGggd2hpY2ggYXNzb2NpYXRlZCAqLwogfTsKIAotI3VuZGVmIGRiZwotLyogI2RlZmluZSBkYmcoZm9ybWF0LCBhcmcuLi4pIHByaW50ayhLRVJOX0lORk8gIiVzOiAiIGZvcm1hdCAiXG4iLCBfX0ZJTEVfXywgIyMgYXJnKSAqLwotI2RlZmluZSBkYmcoZm9ybWF0LCBhcmcuLi4pIHByaW50ayhLRVJOX0lORk8gIiIgZm9ybWF0ICJcbiIsICMjIGFyZykKLQogc3RhdGljIHZvaWQgc2V0dXBfbGluZShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiB7CiAJc3RydWN0IG90aTY4NThfcHJpdmF0ZSAqcHJpdiA9IGNvbnRhaW5lcl9vZih3b3JrLApAQCAtMTAwMiwxMSArOTk4LDEyIEBACiAJCXJldHVybjsKIAl9CiAKLQl0dHkgPSBwb3J0LT5wb3J0LnR0eTsKKwl0dHkgPSB0dHlfcG9ydF90dHlfZ2V0KCZwb3J0LT5wb3J0KTsKIAlpZiAodHR5ICE9IE5VTEwgJiYgdXJiLT5hY3R1YWxfbGVuZ3RoID4gMCkgewogCQl0dHlfaW5zZXJ0X2ZsaXBfc3RyaW5nKHR0eSwgZGF0YSwgdXJiLT5hY3R1YWxfbGVuZ3RoKTsKIAkJdHR5X2ZsaXBfYnVmZmVyX3B1c2godHR5KTsKIAl9CisJdHR5X2tyZWZfcHV0KHR0eSk7CiAKIAkvKiBzY2hlZHVsZSB0aGUgaW50ZXJydXB0IHVyYiBpZiB3ZSBhcmUgc3RpbGwgb3BlbiAqLwogCWlmIChwb3J0LT5wb3J0LmNvdW50ICE9IDApIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9wbDIzMDMuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9wbDIzMDMuYwppbmRleCAxZWRlMTQ0Li40OTFjODg1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvcGwyMzAzLmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL3BsMjMwMy5jCkBAIC0xNTQsNyArMTU0LDYgQEAKIAl3YWl0X3F1ZXVlX2hlYWRfdCBkZWx0YV9tc3Jfd2FpdDsKIAl1OCBsaW5lX2NvbnRyb2w7CiAJdTggbGluZV9zdGF0dXM7Ci0JdTggdGVybWlvc19pbml0aWFsaXplZDsKIAllbnVtIHBsMjMwM190eXBlIHR5cGU7CiB9OwogCkBAIC01MjYsMTYgKzUyNSw2IEBACiAKIAlkYmcoIiVzIC0gIHBvcnQgJWQiLCBfX2Z1bmNfXywgcG9ydC0+bnVtYmVyKTsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7Ci0JaWYgKCFwcml2LT50ZXJtaW9zX2luaXRpYWxpemVkKSB7Ci0JCSoodHR5LT50ZXJtaW9zKSA9IHR0eV9zdGRfdGVybWlvczsKLQkJdHR5LT50ZXJtaW9zLT5jX2NmbGFnID0gQjk2MDAgfCBDUzggfCBDUkVBRCB8IEhVUENMIHwgQ0xPQ0FMOwotCQl0dHktPnRlcm1pb3MtPmNfaXNwZWVkID0gOTYwMDsKLQkJdHR5LT50ZXJtaW9zLT5jX29zcGVlZCA9IDk2MDA7Ci0JCXByaXYtPnRlcm1pb3NfaW5pdGlhbGl6ZWQgPSAxOwotCX0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7Ci0KIAkvKiBUaGUgUEwyMzAzIGlzIHJlcG9ydGVkIHRvIGxvc2UgYnl0ZXMgaWYgeW91IGNoYW5nZQogCSAgIHNlcmlhbCBzZXR0aW5ncyBldmVuIHRvIHRoZSBzYW1lIHZhbHVlcyBhcyBiZWZvcmUuIFRodXMKIAkgICB3ZSBhY3R1YWxseSBuZWVkIHRvIGZpbHRlciBpbiB0aGlzIHNwZWNpZmljIGNhc2UgKi8KQEAgLTEwNTcsNyArMTA0Niw3IEBACiAJCXR0eV9mbGFnID0gVFRZX0ZSQU1FOwogCWRiZygiJXMgLSB0dHlfZmxhZyA9ICVkIiwgX19mdW5jX18sIHR0eV9mbGFnKTsKIAotCXR0eSA9IHBvcnQtPnBvcnQudHR5OworCXR0eSA9IHR0eV9wb3J0X3R0eV9nZXQoJnBvcnQtPnBvcnQpOwogCWlmICh0dHkgJiYgdXJiLT5hY3R1YWxfbGVuZ3RoKSB7CiAJCXR0eV9idWZmZXJfcmVxdWVzdF9yb29tKHR0eSwgdXJiLT5hY3R1YWxfbGVuZ3RoICsgMSk7CiAJCS8qIG92ZXJydW4gaXMgc3BlY2lhbCwgbm90IGFzc29jaWF0ZWQgd2l0aCBhIGNoYXIgKi8KQEAgLTEwNjcsNyArMTA1Niw3IEBACiAJCQl0dHlfaW5zZXJ0X2ZsaXBfY2hhcih0dHksIGRhdGFbaV0sIHR0eV9mbGFnKTsKIAkJdHR5X2ZsaXBfYnVmZmVyX3B1c2godHR5KTsKIAl9Ci0KKwl0dHlfa3JlZl9wdXQodHR5KTsKIAkvKiBTY2hlZHVsZSB0aGUgbmV4dCByZWFkIF9pZl8gd2UgYXJlIHN0aWxsIG9wZW4gKi8KIAlpZiAocG9ydC0+cG9ydC5jb3VudCkgewogCQl1cmItPmRldiA9IHBvcnQtPnNlcmlhbC0+ZGV2OwpAQCAtMTE1OCw3ICsxMTQ3LDcgQEAKIAlyZXR2YWwgPSB1c2JfcmVnaXN0ZXIoJnBsMjMwM19kcml2ZXIpOwogCWlmIChyZXR2YWwpCiAJCWdvdG8gZmFpbGVkX3VzYl9yZWdpc3RlcjsKLQlpbmZvKERSSVZFUl9ERVNDKTsKKwlwcmludGsoS0VSTl9JTkZPIEtCVUlMRF9NT0ROQU1FICI6ICIgRFJJVkVSX0RFU0MgIlxuIik7CiAJcmV0dXJuIDA7CiBmYWlsZWRfdXNiX3JlZ2lzdGVyOgogCXVzYl9zZXJpYWxfZGVyZWdpc3RlcigmcGwyMzAzX2RldmljZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvc2FmZV9zZXJpYWwuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9zYWZlX3NlcmlhbC5jCmluZGV4IGRlZjUyZDAuLjRiNDYzY2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9zYWZlX3NlcmlhbC5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9zYWZlX3NlcmlhbC5jCkBAIC0yMTcsNiArMjE3LDcgQEAKIAlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gIHVyYi0+Y29udGV4dDsKIAl1bnNpZ25lZCBjaGFyICpkYXRhID0gdXJiLT50cmFuc2Zlcl9idWZmZXI7CiAJdW5zaWduZWQgY2hhciBsZW5ndGggPSB1cmItPmFjdHVhbF9sZW5ndGg7CisJc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eTsKIAlpbnQgcmVzdWx0OwogCWludCBzdGF0dXMgPSB1cmItPnN0YXR1czsKIApAQCAtMjQyLDI4ICsyNDMsMzEgQEAKIAkJcHJpbnRrKCJcbiIpOwogCX0KICNlbmRpZgorCXR0eSA9IHR0eV9wb3J0X3R0eV9nZXQoJnBvcnQtPnBvcnQpOwogCWlmIChzYWZlKSB7CiAJCV9fdTE2IGZjczsKIAkJZmNzID0gZmNzX2NvbXB1dGUxMChkYXRhLCBsZW5ndGgsIENSQzEwX0lOSVRGQ1MpOwogCQlpZiAoIWZjcykgewogCQkJaW50IGFjdHVhbF9sZW5ndGggPSBkYXRhW2xlbmd0aCAtIDJdID4+IDI7CiAJCQlpZiAoYWN0dWFsX2xlbmd0aCA8PSAobGVuZ3RoIC0gMikpIHsKLQkJCQlpbmZvKCIlcyAtIGFjdHVhbDogJWQiLCBfX2Z1bmNfXywKLQkJCQkJCQlhY3R1YWxfbGVuZ3RoKTsKLQkJCQl0dHlfaW5zZXJ0X2ZsaXBfc3RyaW5nKHBvcnQtPnBvcnQudHR5LAorCQkJCWRldl9pbmZvKCZ1cmItPmRldi0+ZGV2LCAiJXMgLSBhY3R1YWw6ICVkXG4iLAorCQkJCQkgX19mdW5jX18sIGFjdHVhbF9sZW5ndGgpOworCQkJCXR0eV9pbnNlcnRfZmxpcF9zdHJpbmcodHR5LAogCQkJCQkJCWRhdGEsIGFjdHVhbF9sZW5ndGgpOwotCQkJCXR0eV9mbGlwX2J1ZmZlcl9wdXNoKHBvcnQtPnBvcnQudHR5KTsKKwkJCQl0dHlfZmxpcF9idWZmZXJfcHVzaCh0dHkpOwogCQkJfSBlbHNlIHsKLQkJCQllcnIoIiVzIC0gaW5jb25zaXN0ZW50IGxlbmd0aHMgJWQ6JWQiLAorCQkJCWRldl9lcnIoJnBvcnQtPmRldiwKKwkJCQkJIiVzIC0gaW5jb25zaXN0ZW50IGxlbmd0aHMgJWQ6JWRcbiIsCiAJCQkJCV9fZnVuY19fLCBhY3R1YWxfbGVuZ3RoLCBsZW5ndGgpOwogCQkJfQogCQl9IGVsc2UgewotCQkJZXJyKCIlcyAtIGJhZCBDUkMgJXgiLCBfX2Z1bmNfXywgZmNzKTsKKwkJCWRldl9lcnIoJnBvcnQtPmRldiwgIiVzIC0gYmFkIENSQyAleFxuIiwgX19mdW5jX18sIGZjcyk7CiAJCX0KIAl9IGVsc2UgewotCQl0dHlfaW5zZXJ0X2ZsaXBfc3RyaW5nKHBvcnQtPnBvcnQudHR5LCBkYXRhLCBsZW5ndGgpOwotCQl0dHlfZmxpcF9idWZmZXJfcHVzaChwb3J0LT5wb3J0LnR0eSk7CisJCXR0eV9pbnNlcnRfZmxpcF9zdHJpbmcodHR5LCBkYXRhLCBsZW5ndGgpOworCQl0dHlfZmxpcF9idWZmZXJfcHVzaCh0dHkpOwogCX0KKwl0dHlfa3JlZl9wdXQodHR5KTsKIAogCS8qIENvbnRpbnVlIHRyeWluZyB0byBhbHdheXMgcmVhZCAgKi8KIAl1c2JfZmlsbF9idWxrX3VyYih1cmIsIHBvcnQtPnNlcmlhbC0+ZGV2LApAQCAtMjc0LDggKzI3OCw5IEBACiAKIAlyZXN1bHQgPSB1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9BVE9NSUMpOwogCWlmIChyZXN1bHQpCi0JCWVycigiJXMgLSBmYWlsZWQgcmVzdWJtaXR0aW5nIHJlYWQgdXJiLCBlcnJvciAlZCIsCi0JCQkJCQkJX19mdW5jX18sIHJlc3VsdCk7CisJCWRldl9lcnIoJnBvcnQtPmRldiwKKwkJCSIlcyAtIGZhaWxlZCByZXN1Ym1pdHRpbmcgcmVhZCB1cmIsIGVycm9yICVkXG4iLAorCQkJX19mdW5jX18sIHJlc3VsdCk7CiAJCS8qIEZJWE1FOiBOZWVkIGEgbWVjaGFuaXNtIHRvIHJldHJ5IGxhdGVyIGlmIHRoaXMgaGFwcGVucyAqLwogfQogCkBAIC0zNjYsOCArMzcxLDkgQEAKIAlyZXN1bHQgPSB1c2Jfc3VibWl0X3VyYihwb3J0LT53cml0ZV91cmIsIEdGUF9LRVJORUwpOwogCWlmIChyZXN1bHQpIHsKIAkJcG9ydC0+d3JpdGVfdXJiX2J1c3kgPSAwOwotCQllcnIoIiVzIC0gZmFpbGVkIHN1Ym1pdHRpbmcgd3JpdGUgdXJiLCBlcnJvciAlZCIsCi0JCQkJCQkJX19mdW5jX18sIHJlc3VsdCk7CisJCWRldl9lcnIoJnBvcnQtPmRldiwKKwkJCSIlcyAtIGZhaWxlZCBzdWJtaXR0aW5nIHdyaXRlIHVyYiwgZXJyb3IgJWRcbiIsCisJCQlfX2Z1bmNfXywgcmVzdWx0KTsKIAkJcmV0dXJuIDA7CiAJfQogCWRiZygiJXMgdXJiOiAlcCBzdWJtaXR0ZWQiLCBfX2Z1bmNfXywgcG9ydC0+d3JpdGVfdXJiKTsKQEAgLTQyNSwxNCArNDMxLDEzIEBACiB7CiAJaW50IGksIHJldHZhbDsKIAotCWluZm8oRFJJVkVSX1ZFUlNJT04gIiAiIERSSVZFUl9BVVRIT1IpOwotCWluZm8oRFJJVkVSX0RFU0MpOwotCWluZm8oInZlbmRvcjogJXggcHJvZHVjdDogJXggc2FmZTogJWQgcGFkZGVkOiAlZFxuIiwKLQkJCQkJdmVuZG9yLCBwcm9kdWN0LCBzYWZlLCBwYWRkZWQpOworCXByaW50ayhLRVJOX0lORk8gS0JVSUxEX01PRE5BTUUgIjogIiBEUklWRVJfVkVSU0lPTiAiOiIKKwkgICAgICAgRFJJVkVSX0RFU0MgIlxuIik7CiAKIAkvKiBpZiB3ZSBoYXZlIHZlbmRvciAvIHByb2R1Y3QgcGFyYW1ldGVycyBwYXRjaCB0aGVtIGludG8gaWQgbGlzdCAqLwogCWlmICh2ZW5kb3IgfHwgcHJvZHVjdCkgewotCQlpbmZvKCJ2ZW5kb3I6ICV4IHByb2R1Y3Q6ICV4XG4iLCB2ZW5kb3IsIHByb2R1Y3QpOworCQlwcmludGsoS0VSTl9JTkZPIEtCVUlMRF9NT0ROQU1FICI6IHZlbmRvcjogJXggcHJvZHVjdDogJXhcbiIsCisJCSAgICAgICB2ZW5kb3IsIHByb2R1Y3QpOwogCiAJCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGlkX3RhYmxlKTsgaSsrKSB7CiAJCQlpZiAoIWlkX3RhYmxlW2ldLmlkVmVuZG9yICYmICFpZF90YWJsZVtpXS5pZFByb2R1Y3QpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9zaWVycmEuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9zaWVycmEuYwppbmRleCBlYTFhMTAzLi4wZjJiNjcyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvc2llcnJhLmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL3NpZXJyYS5jCkBAIC0yNDcsNyArMjQ3LDcgQEAKIAlzdHJ1Y3Qgc2llcnJhX3BvcnRfcHJpdmF0ZSAqcG9ydGRhdGE7CiAJX191MTYgaW50ZXJmYWNlID0gMDsKIAotCWRiZygiJXMiLCBfX2Z1bmNfXyk7CisJZGV2X2RiZygmcG9ydC0+ZGV2LCAiJXMiLCBfX2Z1bmNfXyk7CiAKIAlwb3J0ZGF0YSA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKIApAQCAtMjg0LDcgKzI4NCw3IEBACiBzdGF0aWMgdm9pZCBzaWVycmFfc2V0X3Rlcm1pb3Moc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwKIAkJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGt0ZXJtaW9zICpvbGRfdGVybWlvcykKIHsKLQlkYmcoIiVzIiwgX19mdW5jX18pOworCWRldl9kYmcoJnBvcnQtPmRldiwgIiVzIiwgX19mdW5jX18pOwogCXR0eV90ZXJtaW9zX2NvcHlfaHcodHR5LT50ZXJtaW9zLCBvbGRfdGVybWlvcyk7CiAJc2llcnJhX3NlbmRfc2V0dXAodHR5LCBwb3J0KTsKIH0KQEAgLTI5NSw2ICsyOTUsNyBAQAogCXVuc2lnbmVkIGludCB2YWx1ZTsKIAlzdHJ1Y3Qgc2llcnJhX3BvcnRfcHJpdmF0ZSAqcG9ydGRhdGE7CiAKKwlkZXZfZGJnKCZwb3J0LT5kZXYsICIlcyIsIF9fZnVuY19fKTsKIAlwb3J0ZGF0YSA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKIAogCXZhbHVlID0gKChwb3J0ZGF0YS0+cnRzX3N0YXRlKSA/IFRJT0NNX1JUUyA6IDApIHwKQEAgLTMzNCwxNCArMzM1LDE0IEBACiAJaW50IHN0YXR1cyA9IHVyYi0+c3RhdHVzOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fZnVuY19fLCBwb3J0LT5udW1iZXIpOworCWRldl9kYmcoJnBvcnQtPmRldiwgIiVzIC0gcG9ydCAlZCIsIF9fZnVuY19fLCBwb3J0LT5udW1iZXIpOwogCiAJLyogZnJlZSB1cCB0aGUgdHJhbnNmZXIgYnVmZmVyLCBhcyB1c2JfZnJlZV91cmIoKSBkb2VzIG5vdCBkbyB0aGlzICovCiAJa2ZyZWUodXJiLT50cmFuc2Zlcl9idWZmZXIpOwogCiAJaWYgKHN0YXR1cykKLQkJZGJnKCIlcyAtIG5vbnplcm8gd3JpdGUgYnVsayBzdGF0dXMgcmVjZWl2ZWQ6ICVkIiwKLQkJICAgIF9fZnVuY19fLCBzdGF0dXMpOworCQlkZXZfZGJnKCZwb3J0LT5kZXYsICIlcyAtIG5vbnplcm8gd3JpdGUgYnVsayBzdGF0dXMgIgorCQkgICAgInJlY2VpdmVkOiAlZCIsIF9fZnVuY19fLCBzdGF0dXMpOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnBvcnRkYXRhLT5sb2NrLCBmbGFncyk7CiAJLS1wb3J0ZGF0YS0+b3V0c3RhbmRpbmdfdXJiczsKQEAgLTM2MywxMiArMzY0LDEyIEBACiAKIAlwb3J0ZGF0YSA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKIAotCWRiZygiJXM6IHdyaXRlICglZCBjaGFycykiLCBfX2Z1bmNfXywgY291bnQpOworCWRldl9kYmcoJnBvcnQtPmRldiwgIiVzOiB3cml0ZSAoJWQgY2hhcnMpIiwgX19mdW5jX18sIGNvdW50KTsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZwb3J0ZGF0YS0+bG9jaywgZmxhZ3MpOwogCWlmIChwb3J0ZGF0YS0+b3V0c3RhbmRpbmdfdXJicyA+IE5fT1VUX1VSQikgewogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwb3J0ZGF0YS0+bG9jaywgZmxhZ3MpOwotCQlkYmcoIiVzIC0gd3JpdGUgbGltaXQgaGl0XG4iLCBfX2Z1bmNfXyk7CisJCWRldl9kYmcoJnBvcnQtPmRldiwgIiVzIC0gd3JpdGUgbGltaXQgaGl0XG4iLCBfX2Z1bmNfXyk7CiAJCXJldHVybiAwOwogCX0KIAlwb3J0ZGF0YS0+b3V0c3RhbmRpbmdfdXJicysrOwpAQCAtNDM3LDE3ICs0MzgsMTggQEAKIAlwb3J0ID0gIHVyYi0+Y29udGV4dDsKIAogCWlmIChzdGF0dXMpIHsKLQkJZGJnKCIlczogbm9uemVybyBzdGF0dXM6ICVkIG9uIGVuZHBvaW50ICUwMnguIiwKLQkJICAgIF9fZnVuY19fLCBzdGF0dXMsIGVuZHBvaW50KTsKKwkJZGV2X2RiZygmcG9ydC0+ZGV2LCAiJXM6IG5vbnplcm8gc3RhdHVzOiAlZCBvbiIKKwkJICAgICIgZW5kcG9pbnQgJTAyeC4iLCBfX2Z1bmNfXywgc3RhdHVzLCBlbmRwb2ludCk7CiAJfSBlbHNlIHsKLQkJdHR5ID0gcG9ydC0+cG9ydC50dHk7CiAJCWlmICh1cmItPmFjdHVhbF9sZW5ndGgpIHsKKwkJdHR5ID0gdHR5X3BvcnRfdHR5X2dldCgmcG9ydC0+cG9ydCk7CiAJCQl0dHlfYnVmZmVyX3JlcXVlc3Rfcm9vbSh0dHksIHVyYi0+YWN0dWFsX2xlbmd0aCk7CiAJCQl0dHlfaW5zZXJ0X2ZsaXBfc3RyaW5nKHR0eSwgZGF0YSwgdXJiLT5hY3R1YWxfbGVuZ3RoKTsKIAkJCXR0eV9mbGlwX2J1ZmZlcl9wdXNoKHR0eSk7Ci0JCX0gZWxzZSB7Ci0JCQlkYmcoIiVzOiBlbXB0eSByZWFkIHVyYiByZWNlaXZlZCIsIF9fZnVuY19fKTsKLQkJfQorCQkJdHR5X2tyZWZfcHV0KHR0eSk7CisJCX0gZWxzZQorCQkJZGV2X2RiZygmcG9ydC0+ZGV2LCAiJXM6IGVtcHR5IHJlYWQgdXJiIgorCQkJCSIgcmVjZWl2ZWQiLCBfX2Z1bmNfXyk7CiAKIAkJLyogUmVzdWJtaXQgdXJiIHNvIHdlIGNvbnRpbnVlIHJlY2VpdmluZyAqLwogCQlpZiAocG9ydC0+cG9ydC5jb3VudCAmJiBzdGF0dXMgIT0gLUVTSFVURE9XTikgewpAQCAtNDY4LDE1ICs0NzAsMTcgQEAKIAlzdHJ1Y3Qgc2llcnJhX3BvcnRfcHJpdmF0ZSAqcG9ydGRhdGEgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CiAJc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCA9IHBvcnQtPnNlcmlhbDsKIAotCWRiZygiJXMiLCBfX2Z1bmNfXyk7Ci0JZGJnKCIlczogdXJiICVwIHBvcnQgJXAgaGFzIGRhdGEgJXAiLCBfX2Z1bmNfXywgdXJiLCBwb3J0LCBwb3J0ZGF0YSk7CisJZGV2X2RiZygmcG9ydC0+ZGV2LCAiJXMiLCBfX2Z1bmNfXyk7CisJZGV2X2RiZygmcG9ydC0+ZGV2LCAiJXM6IHVyYiAlcCBwb3J0ICVwIGhhcyBkYXRhICVwIiwgX19mdW5jX18sCisJCXVyYiwgcG9ydCwgcG9ydGRhdGEpOwogCiAJaWYgKHN0YXR1cyA9PSAwKSB7CiAJCXN0cnVjdCB1c2JfY3RybHJlcXVlc3QgKnJlcV9wa3QgPQogCQkJCShzdHJ1Y3QgdXNiX2N0cmxyZXF1ZXN0ICopdXJiLT50cmFuc2Zlcl9idWZmZXI7CiAKIAkJaWYgKCFyZXFfcGt0KSB7Ci0JCQlkYmcoIiVzOiBOVUxMIHJlcV9wa3RcbiIsIF9fZnVuY19fKTsKKwkJCWRldl9kYmcoJnBvcnQtPmRldiwgIiVzOiBOVUxMIHJlcV9wa3RcbiIsCisJCQkJX19mdW5jX18pOwogCQkJcmV0dXJuOwogCQl9CiAJCWlmICgocmVxX3BrdC0+YlJlcXVlc3RUeXBlID09IDB4QTEpICYmCkBAIC00ODUsOCArNDg5LDEwIEBACiAJCQl1bnNpZ25lZCBjaGFyIHNpZ25hbHMgPSAqKCh1bnNpZ25lZCBjaGFyICopCiAJCQkJCXVyYi0+dHJhbnNmZXJfYnVmZmVyICsKIAkJCQkJc2l6ZW9mKHN0cnVjdCB1c2JfY3RybHJlcXVlc3QpKTsKKwkJCXN0cnVjdCB0dHlfc3RydWN0ICp0dHk7CiAKLQkJCWRiZygiJXM6IHNpZ25hbCB4JXgiLCBfX2Z1bmNfXywgc2lnbmFscyk7CisJCQlkZXZfZGJnKCZwb3J0LT5kZXYsICIlczogc2lnbmFsIHgleCIsIF9fZnVuY19fLAorCQkJCXNpZ25hbHMpOwogCiAJCQlvbGRfZGNkX3N0YXRlID0gcG9ydGRhdGEtPmRjZF9zdGF0ZTsKIAkJCXBvcnRkYXRhLT5jdHNfc3RhdGUgPSAxOwpAQCAtNDk0LDIzICs1MDAsMjYgQEAKIAkJCXBvcnRkYXRhLT5kc3Jfc3RhdGUgPSAoKHNpZ25hbHMgJiAweDAyKSA/IDEgOiAwKTsKIAkJCXBvcnRkYXRhLT5yaV9zdGF0ZSA9ICgoc2lnbmFscyAmIDB4MDgpID8gMSA6IDApOwogCi0JCQlpZiAocG9ydC0+cG9ydC50dHkgJiYgIUNfQ0xPQ0FMKHBvcnQtPnBvcnQudHR5KSAmJgorCQkJdHR5ID0gdHR5X3BvcnRfdHR5X2dldCgmcG9ydC0+cG9ydCk7CisJCQlpZiAodHR5ICYmICFDX0NMT0NBTCh0dHkpICYmCiAJCQkJCW9sZF9kY2Rfc3RhdGUgJiYgIXBvcnRkYXRhLT5kY2Rfc3RhdGUpCi0JCQkJdHR5X2hhbmd1cChwb3J0LT5wb3J0LnR0eSk7CisJCQkJdHR5X2hhbmd1cCh0dHkpOworCQkJdHR5X2tyZWZfcHV0KHR0eSk7CiAJCX0gZWxzZSB7Ci0JCQlkYmcoIiVzOiB0eXBlICV4IHJlcSAleCIsIF9fZnVuY19fLAotCQkJCXJlcV9wa3QtPmJSZXF1ZXN0VHlwZSwgcmVxX3BrdC0+YlJlcXVlc3QpOworCQkJZGV2X2RiZygmcG9ydC0+ZGV2LCAiJXM6IHR5cGUgJXggcmVxICV4IiwKKwkJCQlfX2Z1bmNfXywgcmVxX3BrdC0+YlJlcXVlc3RUeXBlLAorCQkJCXJlcV9wa3QtPmJSZXF1ZXN0KTsKIAkJfQogCX0gZWxzZQotCQlkYmcoIiVzOiBlcnJvciAlZCIsIF9fZnVuY19fLCBzdGF0dXMpOworCQlkZXZfZGJnKCZwb3J0LT5kZXYsICIlczogZXJyb3IgJWQiLCBfX2Z1bmNfXywgc3RhdHVzKTsKIAogCS8qIFJlc3VibWl0IHVyYiBzbyB3ZSBjb250aW51ZSByZWNlaXZpbmcgSVJRIGRhdGEgKi8KIAlpZiAoc3RhdHVzICE9IC1FU0hVVERPV04pIHsKIAkJdXJiLT5kZXYgPSBzZXJpYWwtPmRldjsKIAkJZXJyID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfQVRPTUlDKTsKIAkJaWYgKGVycikKLQkJCWRiZygiJXM6IHJlc3VibWl0IGludHIgdXJiIGZhaWxlZC4gKCVkKSIsCi0JCQkJX19mdW5jX18sIGVycik7CisJCQlkZXZfZGJnKCZwb3J0LT5kZXYsICIlczogcmVzdWJtaXQgaW50ciB1cmIgIgorCQkJCSJmYWlsZWQuICglZCkiLAlfX2Z1bmNfXywgZXJyKTsKIAl9CiB9CiAKQEAgLTUyMCwxNCArNTI5LDE0IEBACiAJc3RydWN0IHNpZXJyYV9wb3J0X3ByaXZhdGUgKnBvcnRkYXRhID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fZnVuY19fLCBwb3J0LT5udW1iZXIpOworCWRldl9kYmcoJnBvcnQtPmRldiwgIiVzIC0gcG9ydCAlZCIsIF9fZnVuY19fLCBwb3J0LT5udW1iZXIpOwogCiAJLyogdHJ5IHRvIGdpdmUgYSBnb29kIG51bWJlciBiYWNrIGJhc2VkIG9uIGlmIHdlIGhhdmUgYW55IGZyZWUgdXJicyBhdAogCSAqIHRoaXMgcG9pbnQgaW4gdGltZSAqLwogCXNwaW5fbG9ja19pcnFzYXZlKCZwb3J0ZGF0YS0+bG9jaywgZmxhZ3MpOwogCWlmIChwb3J0ZGF0YS0+b3V0c3RhbmRpbmdfdXJicyA+IE5fT1VUX1VSQiAqIDIgLyAzKSB7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBvcnRkYXRhLT5sb2NrLCBmbGFncyk7Ci0JCWRiZygiJXMgLSB3cml0ZSBsaW1pdCBoaXRcbiIsIF9fZnVuY19fKTsKKwkJZGV2X2RiZygmcG9ydC0+ZGV2LCAiJXMgLSB3cml0ZSBsaW1pdCBoaXRcbiIsIF9fZnVuY19fKTsKIAkJcmV0dXJuIDA7CiAJfQogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBvcnRkYXRhLT5sb2NrLCBmbGFncyk7CkBAIC01NDYsNyArNTU1LDcgQEAKIAogCXBvcnRkYXRhID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOwogCi0JZGJnKCIlcyIsIF9fZnVuY19fKTsKKwlkZXZfZGJnKCZwb3J0LT5kZXYsICIlcyIsIF9fZnVuY19fKTsKIAogCS8qIFNldCBzb21lIHNhbmUgZGVmYXVsdHMgKi8KIAlwb3J0ZGF0YS0+cnRzX3N0YXRlID0gMTsKQEAgLTU1OCw4ICs1NjcsOCBAQAogCQlpZiAoIXVyYikKIAkJCWNvbnRpbnVlOwogCQlpZiAodXJiLT5kZXYgIT0gc2VyaWFsLT5kZXYpIHsKLQkJCWRiZygiJXM6IGRldiAlcCAhPSAlcCIsIF9fZnVuY19fLAotCQkJCXVyYi0+ZGV2LCBzZXJpYWwtPmRldik7CisJCQlkZXZfZGJnKCZwb3J0LT5kZXYsICIlczogZGV2ICVwICE9ICVwIiwKKwkJCQkgX19mdW5jX18sIHVyYi0+ZGV2LCBzZXJpYWwtPmRldik7CiAJCQljb250aW51ZTsKIAkJfQogCkBAIC01OTgsNyArNjA3LDcgQEAKIAlzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsID0gcG9ydC0+c2VyaWFsOwogCXN0cnVjdCBzaWVycmFfcG9ydF9wcml2YXRlICpwb3J0ZGF0YTsKIAotCWRiZygiJXMiLCBfX2Z1bmNfXyk7CisJZGV2X2RiZygmcG9ydC0+ZGV2LCAiJXMiLCBfX2Z1bmNfXyk7CiAJcG9ydGRhdGEgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CiAKIAlwb3J0ZGF0YS0+cnRzX3N0YXRlID0gMDsKQEAgLTYxNiw4ICs2MjUsNyBAQAogCX0KIAogCXVzYl9raWxsX3VyYihwb3J0LT5pbnRlcnJ1cHRfaW5fdXJiKTsKLQotCXBvcnQtPnBvcnQudHR5ID0gTlVMTDsJLyogRklYTUUgKi8KKwl0dHlfcG9ydF90dHlfc2V0KCZwb3J0LT5wb3J0LCBOVUxMKTsKIH0KIAogc3RhdGljIGludCBzaWVycmFfc3RhcnR1cChzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKQpAQCAtNjI4LDcgKzYzNiw3IEBACiAJaW50IGk7CiAJaW50IGo7CiAKLQlkYmcoIiVzIiwgX19mdW5jX18pOworCWRldl9kYmcoJnNlcmlhbC0+ZGV2LT5kZXYsICIlcyIsIF9fZnVuY19fKTsKIAogCS8qIFNldCBEZXZpY2UgbW9kZSB0byBEMCAqLwogCXNpZXJyYV9zZXRfcG93ZXJfc3RhdGUoc2VyaWFsLT5kZXYsIDB4MDAwMCk7CkBAIC02NDIsOCArNjUwLDkgQEAKIAkJcG9ydCA9IHNlcmlhbC0+cG9ydFtpXTsKIAkJcG9ydGRhdGEgPSBremFsbG9jKHNpemVvZigqcG9ydGRhdGEpLCBHRlBfS0VSTkVMKTsKIAkJaWYgKCFwb3J0ZGF0YSkgewotCQkJZGJnKCIlczoga21hbGxvYyBmb3Igc2llcnJhX3BvcnRfcHJpdmF0ZSAoJWQpIGZhaWxlZCEuIiwKLQkJCQkJX19mdW5jX18sIGkpOworCQkJZGV2X2RiZygmcG9ydC0+ZGV2LCAiJXM6IGttYWxsb2MgZm9yICIKKwkJCQkic2llcnJhX3BvcnRfcHJpdmF0ZSAoJWQpIGZhaWxlZCEuIiwKKwkJCQlfX2Z1bmNfXywgaSk7CiAJCQlyZXR1cm4gLUVOT01FTTsKIAkJfQogCQlzcGluX2xvY2tfaW5pdCgmcG9ydGRhdGEtPmxvY2spOwpAQCAtNjYzLDggKzY3Miw4IEBACiAJCWZvciAoaiA9IDA7IGogPCBOX0lOX1VSQjsgKytqKSB7CiAJCQl1cmIgPSB1c2JfYWxsb2NfdXJiKDAsIEdGUF9LRVJORUwpOwogCQkJaWYgKHVyYiA9PSBOVUxMKSB7Ci0JCQkJZGJnKCIlczogYWxsb2MgZm9yIGluIHBvcnQgZmFpbGVkLiIsCi0JCQkJICAgIF9fZnVuY19fKTsKKwkJCQlkZXZfZGJnKCZwb3J0LT5kZXYsICIlczogYWxsb2MgZm9yIGluICIKKwkJCQkJInBvcnQgZmFpbGVkLiIsIF9fZnVuY19fKTsKIAkJCQljb250aW51ZTsKIAkJCX0KIAkJCS8qIEZpbGwgVVJCIHVzaW5nIHN1cHBsaWVkIGRhdGEuICovCkBAIC02ODYsNyArNjk1LDcgQEAKIAlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0OwogCXN0cnVjdCBzaWVycmFfcG9ydF9wcml2YXRlICpwb3J0ZGF0YTsKIAotCWRiZygiJXMiLCBfX2Z1bmNfXyk7CisJZGV2X2RiZygmc2VyaWFsLT5kZXYtPmRldiwgIiVzIiwgX19mdW5jX18pOwogCiAJZm9yIChpID0gMDsgaSA8IHNlcmlhbC0+bnVtX3BvcnRzOyArK2kpIHsKIAkJcG9ydCA9IHNlcmlhbC0+cG9ydFtpXTsKQEAgLTc0MSw3ICs3NTAsOCBAQAogCWlmIChyZXR2YWwpCiAJCWdvdG8gZmFpbGVkX2RyaXZlcl9yZWdpc3RlcjsKIAotCWluZm8oRFJJVkVSX0RFU0MgIjogIiBEUklWRVJfVkVSU0lPTik7CisJcHJpbnRrKEtFUk5fSU5GTyBLQlVJTERfTU9ETkFNRSAiOiAiIERSSVZFUl9WRVJTSU9OICI6IgorCSAgICAgICBEUklWRVJfREVTQyAiXG4iKTsKIAogCXJldHVybiAwOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvc3BjcDh4NS5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL3NwY3A4eDUuYwppbmRleCAyODNjZjZiLi5hNjViYzJiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvc3BjcDh4NS5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9zcGNwOHg1LmMKQEAgLTU4OSw4ICs1ODksOCBAQAogCWNhc2UgMTAwMDAwMDoKIAkJCWJ1ZlswXSA9IDB4MGI7CWJyZWFrOwogCWRlZmF1bHQ6Ci0JCWVycigic3BjcDgyNSBkcml2ZXIgZG9lcyBub3Qgc3VwcG9ydCB0aGUgYmF1ZHJhdGUgIgotCQkgICAgInJlcXVlc3RlZCwgdXNpbmcgZGVmYXVsdCBvZiA5NjAwLiIpOworCQlkZXZfZXJyKCZwb3J0LT5kZXYsICJzcGNwODI1IGRyaXZlciBkb2VzIG5vdCBzdXBwb3J0IHRoZSAiCisJCQkiYmF1ZHJhdGUgcmVxdWVzdGVkLCB1c2luZyBkZWZhdWx0IG9mIDk2MDAuXG4iKTsKIAl9CiAKIAkvKiBTZXQgRGF0YSBMZW5ndGggOiAwMDo1Yml0LCAwMTo2Yml0LCAxMDo3Yml0LCAxMTo4Yml0ICovCkBAIC02MjksNyArNjI5LDggQEAKIAkJCSAgICBTRVRfVUFSVF9GT1JNQVRfVFlQRSwgU0VUX1VBUlRfRk9STUFULAogCQkJICAgIHVhcnRkYXRhLCAwLCBOVUxMLCAwLCAxMDApOwogCWlmIChpIDwgMCkKLQkJZXJyKCJTZXQgVUFSVCBmb3JtYXQgJSN4IGZhaWxlZCAoZXJyb3IgPSAlZCkiLCB1YXJ0ZGF0YSwgaSk7CisJCWRldl9lcnIoJnBvcnQtPmRldiwgIlNldCBVQVJUIGZvcm1hdCAlI3ggZmFpbGVkIChlcnJvciA9ICVkKVxuIiwKKwkJCXVhcnRkYXRhLCBpKTsKIAlkYmcoIjB4MjE6MHg0MDowOjAgICVkXG4iLCBpKTsKIAogCWlmIChjZmxhZyAmIENSVFNDVFMpIHsKQEAgLTc1NSw3ICs3NTYsNyBAQAogCQl0dHlfZmxhZyA9IFRUWV9GUkFNRTsKIAlkZXZfZGJnKCZwb3J0LT5kZXYsICJ0dHlfZmxhZyA9ICVkXG4iLCB0dHlfZmxhZyk7CiAKLQl0dHkgPSBwb3J0LT5wb3J0LnR0eTsKKwl0dHkgPSB0dHlfcG9ydF90dHlfZ2V0KCZwb3J0LT5wb3J0KTsKIAlpZiAodHR5ICYmIHVyYi0+YWN0dWFsX2xlbmd0aCkgewogCQl0dHlfYnVmZmVyX3JlcXVlc3Rfcm9vbSh0dHksIHVyYi0+YWN0dWFsX2xlbmd0aCArIDEpOwogCQkvKiBvdmVycnVuIGlzIHNwZWNpYWwsIG5vdCBhc3NvY2lhdGVkIHdpdGggYSBjaGFyICovCkBAIC03NjUsNiArNzY2LDcgQEAKIAkJCXR0eV9pbnNlcnRfZmxpcF9jaGFyKHR0eSwgZGF0YVtpXSwgdHR5X2ZsYWcpOwogCQl0dHlfZmxpcF9idWZmZXJfcHVzaCh0dHkpOwogCX0KKwl0dHlfa3JlZl9wdXQodHR5KTsKIAogCS8qIFNjaGVkdWxlIHRoZSBuZXh0IHJlYWQgX2lmXyB3ZSBhcmUgc3RpbGwgb3BlbiAqLwogCWlmIChwb3J0LT5wb3J0LmNvdW50KSB7CkBAIC0xMDUzLDcgKzEwNTUsOCBAQAogCXJldHZhbCA9IHVzYl9yZWdpc3Rlcigmc3BjcDh4NV9kcml2ZXIpOwogCWlmIChyZXR2YWwpCiAJCWdvdG8gZmFpbGVkX3VzYl9yZWdpc3RlcjsKLQlpbmZvKERSSVZFUl9ERVNDICIgIiBEUklWRVJfVkVSU0lPTik7CisJcHJpbnRrKEtFUk5fSU5GTyBLQlVJTERfTU9ETkFNRSAiOiAiIERSSVZFUl9WRVJTSU9OICI6IgorCSAgICAgICBEUklWRVJfREVTQyAiXG4iKTsKIAlyZXR1cm4gMDsKIGZhaWxlZF91c2JfcmVnaXN0ZXI6CiAJdXNiX3NlcmlhbF9kZXJlZ2lzdGVyKCZzcGNwOHg1X2RldmljZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvdGlfdXNiXzM0MTBfNTA1Mi5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL3RpX3VzYl8zNDEwXzUwNTIuYwppbmRleCA5YTNlNDk1Li4zMWM0MmQxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvdGlfdXNiXzM0MTBfNTA1Mi5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC90aV91c2JfMzQxMF81MDUyLmMKQEAgLTg1LDcgKzg1LDYgQEAKICNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CiAjaW5jbHVkZSA8bGludXgvdXNiLmg+CiAjaW5jbHVkZSA8bGludXgvdXNiL3NlcmlhbC5oPgotI2luY2x1ZGUgPGxpbnV4L2Zpcm13YXJlLmg+CiAKICNpbmNsdWRlICJ0aV91c2JfMzQxMF81MDUyLmgiCiAKQEAgLTE3OSw3ICsxNzgsNyBAQAogc3RhdGljIGludCB0aV9nZXRfbHNyKHN0cnVjdCB0aV9wb3J0ICp0cG9ydCk7CiBzdGF0aWMgaW50IHRpX2dldF9zZXJpYWxfaW5mbyhzdHJ1Y3QgdGlfcG9ydCAqdHBvcnQsCiAJc3RydWN0IHNlcmlhbF9zdHJ1Y3QgX191c2VyICpyZXRfYXJnKTsKLXN0YXRpYyBpbnQgdGlfc2V0X3NlcmlhbF9pbmZvKHN0cnVjdCB0aV9wb3J0ICp0cG9ydCwKK3N0YXRpYyBpbnQgdGlfc2V0X3NlcmlhbF9pbmZvKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCB0aV9wb3J0ICp0cG9ydCwKIAlzdHJ1Y3Qgc2VyaWFsX3N0cnVjdCBfX3VzZXIgKm5ld19hcmcpOwogc3RhdGljIHZvaWQgdGlfaGFuZGxlX25ld19tc3Ioc3RydWN0IHRpX3BvcnQgKnRwb3J0LCBfX3U4IG1zcik7CiAKQEAgLTM4Myw3ICszODIsOCBAQAogCWlmIChyZXQpCiAJCWdvdG8gZmFpbGVkX3VzYjsKIAotCWluZm8oVElfRFJJVkVSX0RFU0MgIiAiIFRJX0RSSVZFUl9WRVJTSU9OKTsKKwlwcmludGsoS0VSTl9JTkZPIEtCVUlMRF9NT0ROQU1FICI6ICIgVElfRFJJVkVSX1ZFUlNJT04gIjoiCisJICAgICAgIFRJX0RSSVZFUl9ERVNDICJcbiIpOwogCiAJcmV0dXJuIDA7CiAKQEAgLTg1Nyw4ICs4NTcsOCBAQAogCQkJCShzdHJ1Y3Qgc2VyaWFsX3N0cnVjdCBfX3VzZXIgKilhcmcpOwogCWNhc2UgVElPQ1NTRVJJQUw6CiAJCWRiZygiJXMgLSAoJWQpIFRJT0NTU0VSSUFMIiwgX19mdW5jX18sIHBvcnQtPm51bWJlcik7Ci0JCXJldHVybiB0aV9zZXRfc2VyaWFsX2luZm8odHBvcnQsCi0JCQkJCShzdHJ1Y3Qgc2VyaWFsX3N0cnVjdCBfX3VzZXIgKilhcmcpOworCQlyZXR1cm4gdGlfc2V0X3NlcmlhbF9pbmZvKHR0eSwgdHBvcnQsCisJCQkJKHN0cnVjdCBzZXJpYWxfc3RydWN0IF9fdXNlciAqKWFyZyk7CiAJY2FzZSBUSU9DTUlXQUlUOgogCQlkYmcoIiVzIC0gKCVkKSBUSU9DTUlXQUlUIiwgX19mdW5jX18sIHBvcnQtPm51bWJlcik7CiAJCWNwcmV2ID0gdHBvcnQtPnRwX2ljb3VudDsKQEAgLTEyMTEsNiArMTIxMSw3IEBACiAJc3RydWN0IGRldmljZSAqZGV2ID0gJnVyYi0+ZGV2LT5kZXY7CiAJaW50IHN0YXR1cyA9IHVyYi0+c3RhdHVzOwogCWludCByZXR2YWwgPSAwOworCXN0cnVjdCB0dHlfc3RydWN0ICp0dHk7CiAKIAlkYmcoIiVzIiwgX19mdW5jX18pOwogCkBAIC0xMjM5LDIwICsxMjQwLDIyIEBACiAJCXJldHVybjsKIAl9CiAKLQlpZiAocG9ydC0+cG9ydC50dHkgJiYgdXJiLT5hY3R1YWxfbGVuZ3RoKSB7CisJdHR5ID0gdHR5X3BvcnRfdHR5X2dldCgmcG9ydC0+cG9ydCk7CisJaWYgKHR0eSAmJiB1cmItPmFjdHVhbF9sZW5ndGgpIHsKIAkJdXNiX3NlcmlhbF9kZWJ1Z19kYXRhKGRlYnVnLCBkZXYsIF9fZnVuY19fLAogCQkJdXJiLT5hY3R1YWxfbGVuZ3RoLCB1cmItPnRyYW5zZmVyX2J1ZmZlcik7CiAKIAkJaWYgKCF0cG9ydC0+dHBfaXNfb3BlbikKIAkJCWRiZygiJXMgLSBwb3J0IGNsb3NlZCwgZHJvcHBpbmcgZGF0YSIsIF9fZnVuY19fKTsKIAkJZWxzZQotCQkJdGlfcmVjdigmdXJiLT5kZXYtPmRldiwgcG9ydC0+cG9ydC50dHksCisJCQl0aV9yZWN2KCZ1cmItPmRldi0+ZGV2LCB0dHksCiAJCQkJCQl1cmItPnRyYW5zZmVyX2J1ZmZlciwKIAkJCQkJCXVyYi0+YWN0dWFsX2xlbmd0aCk7CiAKIAkJc3Bpbl9sb2NrKCZ0cG9ydC0+dHBfbG9jayk7CiAJCXRwb3J0LT50cF9pY291bnQucnggKz0gdXJiLT5hY3R1YWxfbGVuZ3RoOwogCQlzcGluX3VubG9jaygmdHBvcnQtPnRwX2xvY2spOworCQl0dHlfa3JlZl9wdXQodHR5KTsKIAl9CiAKIGV4aXQ6CkBAIC0xMzMwLDcgKzEzMzMsNyBAQAogewogCWludCBjb3VudCwgcmVzdWx0OwogCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSB0cG9ydC0+dHBfcG9ydDsKLQlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5ID0gcG9ydC0+cG9ydC50dHk7CS8qIEZJWE1FICovCisJc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSA9IHR0eV9wb3J0X3R0eV9nZXQoJnBvcnQtPnBvcnQpOwkvKiBGSVhNRSAqLwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIApAQCAtMTMzOCwxOSArMTM0MSwxNSBAQAogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnRwb3J0LT50cF9sb2NrLCBmbGFncyk7CiAKLQlpZiAodHBvcnQtPnRwX3dyaXRlX3VyYl9pbl91c2UpIHsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdHBvcnQtPnRwX2xvY2ssIGZsYWdzKTsKLQkJcmV0dXJuOwotCX0KKwlpZiAodHBvcnQtPnRwX3dyaXRlX3VyYl9pbl91c2UpCisJCWdvdG8gdW5sb2NrOwogCiAJY291bnQgPSB0aV9idWZfZ2V0KHRwb3J0LT50cF93cml0ZV9idWYsCiAJCQkJcG9ydC0+d3JpdGVfdXJiLT50cmFuc2Zlcl9idWZmZXIsCiAJCQkJcG9ydC0+YnVsa19vdXRfc2l6ZSk7CiAKLQlpZiAoY291bnQgPT0gMCkgewotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0cG9ydC0+dHBfbG9jaywgZmxhZ3MpOwotCQlyZXR1cm47Ci0JfQorCWlmIChjb3VudCA9PSAwKQorCQlnb3RvIHVubG9jazsKIAogCXRwb3J0LT50cF93cml0ZV91cmJfaW5fdXNlID0gMTsKIApAQCAtMTM4MCw3ICsxMzc5LDEzIEBACiAJLyogbW9yZSByb29tIGluIHRoZSBidWZmZXIgZm9yIG5ldyB3cml0ZXMsIHdha2V1cCAqLwogCWlmICh0dHkpCiAJCXR0eV93YWtldXAodHR5KTsKKwl0dHlfa3JlZl9wdXQodHR5KTsKIAl3YWtlX3VwX2ludGVycnVwdGlibGUoJnRwb3J0LT50cF93cml0ZV93YWl0KTsKKwlyZXR1cm47Cit1bmxvY2s6CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdHBvcnQtPnRwX2xvY2ssIGZsYWdzKTsKKwl0dHlfa3JlZl9wdXQodHR5KTsKKwlyZXR1cm47CiB9CiAKIApAQCAtMTQ2NCwyMCArMTQ2OSwxNiBAQAogfQogCiAKLXN0YXRpYyBpbnQgdGlfc2V0X3NlcmlhbF9pbmZvKHN0cnVjdCB0aV9wb3J0ICp0cG9ydCwKK3N0YXRpYyBpbnQgdGlfc2V0X3NlcmlhbF9pbmZvKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCB0aV9wb3J0ICp0cG9ydCwKIAlzdHJ1Y3Qgc2VyaWFsX3N0cnVjdCBfX3VzZXIgKm5ld19hcmcpCiB7Ci0Jc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IHRwb3J0LT50cF9wb3J0OwogCXN0cnVjdCBzZXJpYWxfc3RydWN0IG5ld19zZXJpYWw7CiAKIAlpZiAoY29weV9mcm9tX3VzZXIoJm5ld19zZXJpYWwsIG5ld19hcmcsIHNpemVvZihuZXdfc2VyaWFsKSkpCiAJCXJldHVybiAtRUZBVUxUOwogCiAJdHBvcnQtPnRwX2ZsYWdzID0gbmV3X3NlcmlhbC5mbGFncyAmIFRJX1NFVF9TRVJJQUxfRkxBR1M7Ci0JLyogRklYTUUgKi8KLQlpZiAocG9ydC0+cG9ydC50dHkpCi0JCXBvcnQtPnBvcnQudHR5LT5sb3dfbGF0ZW5jeSA9Ci0JCQkodHBvcnQtPnRwX2ZsYWdzICYgQVNZTkNfTE9XX0xBVEVOQ1kpID8gMSA6IDA7CisJdHR5LT5sb3dfbGF0ZW5jeSA9ICh0cG9ydC0+dHBfZmxhZ3MgJiBBU1lOQ19MT1dfTEFURU5DWSkgPyAxIDogMDsKIAl0cG9ydC0+dHBfY2xvc2luZ193YWl0ID0gbmV3X3NlcmlhbC5jbG9zaW5nX3dhaXQ7CiAKIAlyZXR1cm4gMDsKQEAgLTE1MTAsNyArMTUxMSw3IEBACiAJdHBvcnQtPnRwX21zciA9IG1zciAmIFRJX01TUl9NQVNLOwogCiAJLyogaGFuZGxlIENUUyBmbG93IGNvbnRyb2wgKi8KLQl0dHkgPSB0cG9ydC0+dHBfcG9ydC0+cG9ydC50dHk7CisJdHR5ID0gdHR5X3BvcnRfdHR5X2dldCgmdHBvcnQtPnRwX3BvcnQtPnBvcnQpOwogCWlmICh0dHkgJiYgQ19DUlRTQ1RTKHR0eSkpIHsKIAkJaWYgKG1zciAmIFRJX01TUl9DVFMpIHsKIAkJCXR0eS0+aHdfc3RvcHBlZCA9IDA7CkBAIC0xNTE5LDYgKzE1MjAsNyBAQAogCQkJdHR5LT5od19zdG9wcGVkID0gMTsKIAkJfQogCX0KKwl0dHlfa3JlZl9wdXQodHR5KTsKIH0KIAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvdXNiLXNlcmlhbC5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL3VzYi1zZXJpYWwuYwppbmRleCA0ZjdmOWUzLi44YmUzZjM5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvdXNiLXNlcmlhbC5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC91c2Itc2VyaWFsLmMKQEAgLTIxNCw3ICsyMTQsNyBAQAogCS8qIHNldCB1cCBvdXIgcG9ydCBzdHJ1Y3R1cmUgbWFraW5nIHRoZSB0dHkgZHJpdmVyCiAJICogcmVtZW1iZXIgb3VyIHBvcnQgb2JqZWN0LCBhbmQgdXMgaXQgKi8KIAl0dHktPmRyaXZlcl9kYXRhID0gcG9ydDsKLQlwb3J0LT5wb3J0LnR0eSA9IHR0eTsKKwl0dHlfcG9ydF90dHlfc2V0KCZwb3J0LT5wb3J0LCB0dHkpOwogCiAJaWYgKHBvcnQtPnBvcnQuY291bnQgPT0gMSkgewogCkBAIC0yNDYsNyArMjQ2LDcgQEAKIGJhaWxvdXRfbXV0ZXhfdW5sb2NrOgogCXBvcnQtPnBvcnQuY291bnQgPSAwOwogCXR0eS0+ZHJpdmVyX2RhdGEgPSBOVUxMOwotCXBvcnQtPnBvcnQudHR5ID0gTlVMTDsKKwl0dHlfcG9ydF90dHlfc2V0KCZwb3J0LT5wb3J0LCBOVUxMKTsKIAltdXRleF91bmxvY2soJnBvcnQtPm11dGV4KTsKIGJhaWxvdXRfa3JlZl9wdXQ6CiAJdXNiX3NlcmlhbF9wdXQoc2VyaWFsKTsKQEAgLTI3NiwxMCArMjc2LDExIEBACiAJCXBvcnQtPnNlcmlhbC0+dHlwZS0+Y2xvc2UodHR5LCBwb3J0LCBmaWxwKTsKIAogCWlmIChwb3J0LT5wb3J0LmNvdW50ID09IChwb3J0LT5jb25zb2xlPyAxIDogMCkpIHsKLQkJaWYgKHBvcnQtPnBvcnQudHR5KSB7Ci0JCQlpZiAocG9ydC0+cG9ydC50dHktPmRyaXZlcl9kYXRhKQotCQkJCXBvcnQtPnBvcnQudHR5LT5kcml2ZXJfZGF0YSA9IE5VTEw7Ci0JCQlwb3J0LT5wb3J0LnR0eSA9IE5VTEw7CisJCXN0cnVjdCB0dHlfc3RydWN0ICp0dHkgPSB0dHlfcG9ydF90dHlfZ2V0KCZwb3J0LT5wb3J0KTsKKwkJaWYgKHR0eSkgeworCQkJaWYgKHR0eS0+ZHJpdmVyX2RhdGEpCisJCQkJdHR5LT5kcml2ZXJfZGF0YSA9IE5VTEw7CisJCQl0dHlfcG9ydF90dHlfc2V0KCZwb3J0LT5wb3J0LCBOVUxMKTsKIAkJfQogCX0KIApAQCAtNTA4LDExICs1MDksMTIgQEAKIAlpZiAoIXBvcnQpCiAJCXJldHVybjsKIAotCXR0eSA9IHBvcnQtPnBvcnQudHR5OworCXR0eSA9IHR0eV9wb3J0X3R0eV9nZXQoJnBvcnQtPnBvcnQpOwogCWlmICghdHR5KQogCQlyZXR1cm47CiAKIAl0dHlfd2FrZXVwKHR0eSk7CisJdHR5X2tyZWZfcHV0KHR0eSk7CiB9CiAKIHN0YXRpYyB2b2lkIHBvcnRfcmVsZWFzZShzdHJ1Y3QgZGV2aWNlICpkZXYpCkBAIC04MTksNiArODIxLDcgQEAKIAkJcG9ydCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQpLCBHRlBfS0VSTkVMKTsKIAkJaWYgKCFwb3J0KQogCQkJZ290byBwcm9iZV9lcnJvcjsKKwkJdHR5X3BvcnRfaW5pdCgmcG9ydC0+cG9ydCk7CiAJCXBvcnQtPnNlcmlhbCA9IHNlcmlhbDsKIAkJc3Bpbl9sb2NrX2luaXQoJnBvcnQtPmxvY2spOwogCQltdXRleF9pbml0KCZwb3J0LT5tdXRleCk7CkBAIC0xMDQwLDggKzEwNDMsMTEgQEAKIAlmb3IgKGkgPSAwOyBpIDwgc2VyaWFsLT5udW1fcG9ydHM7ICsraSkgewogCQlwb3J0ID0gc2VyaWFsLT5wb3J0W2ldOwogCQlpZiAocG9ydCkgewotCQkJaWYgKHBvcnQtPnBvcnQudHR5KQotCQkJCXR0eV9oYW5ndXAocG9ydC0+cG9ydC50dHkpOworCQkJc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSA9IHR0eV9wb3J0X3R0eV9nZXQoJnBvcnQtPnBvcnQpOworCQkJaWYgKHR0eSkgeworCQkJCXR0eV9oYW5ndXAodHR5KTsKKwkJCQl0dHlfa3JlZl9wdXQodHR5KTsKKwkJCX0KIAkJCWtpbGxfdHJhZmZpYyhwb3J0KTsKIAkJfQogCX0KQEAgLTExMTUsNyArMTEyMSw4IEBACiAKIAlyZXN1bHQgPSBidXNfcmVnaXN0ZXIoJnVzYl9zZXJpYWxfYnVzX3R5cGUpOwogCWlmIChyZXN1bHQpIHsKLQkJZXJyKCIlcyAtIHJlZ2lzdGVyaW5nIGJ1cyBkcml2ZXIgZmFpbGVkIiwgX19mdW5jX18pOworCQlwcmludGsoS0VSTl9FUlIgInVzYi1zZXJpYWw6ICVzIC0gcmVnaXN0ZXJpbmcgYnVzIGRyaXZlciAiCisJCSAgICAgICAiZmFpbGVkXG4iLCBfX2Z1bmNfXyk7CiAJCWdvdG8gZXhpdF9idXM7CiAJfQogCkBAIC0xMTM2LDI1ICsxMTQzLDI4IEBACiAJdHR5X3NldF9vcGVyYXRpb25zKHVzYl9zZXJpYWxfdHR5X2RyaXZlciwgJnNlcmlhbF9vcHMpOwogCXJlc3VsdCA9IHR0eV9yZWdpc3Rlcl9kcml2ZXIodXNiX3NlcmlhbF90dHlfZHJpdmVyKTsKIAlpZiAocmVzdWx0KSB7Ci0JCWVycigiJXMgLSB0dHlfcmVnaXN0ZXJfZHJpdmVyIGZhaWxlZCIsIF9fZnVuY19fKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJ1c2Itc2VyaWFsOiAlcyAtIHR0eV9yZWdpc3Rlcl9kcml2ZXIgZmFpbGVkXG4iLAorCQkgICAgICAgX19mdW5jX18pOwogCQlnb3RvIGV4aXRfcmVnX2RyaXZlcjsKIAl9CiAKIAkvKiByZWdpc3RlciB0aGUgVVNCIGRyaXZlciAqLwogCXJlc3VsdCA9IHVzYl9yZWdpc3RlcigmdXNiX3NlcmlhbF9kcml2ZXIpOwogCWlmIChyZXN1bHQgPCAwKSB7Ci0JCWVycigiJXMgLSB1c2JfcmVnaXN0ZXIgZmFpbGVkIiwgX19mdW5jX18pOworCQlwcmludGsoS0VSTl9FUlIgInVzYi1zZXJpYWw6ICVzIC0gdXNiX3JlZ2lzdGVyIGZhaWxlZFxuIiwKKwkJICAgICAgIF9fZnVuY19fKTsKIAkJZ290byBleGl0X3R0eTsKIAl9CiAKIAkvKiByZWdpc3RlciB0aGUgZ2VuZXJpYyBkcml2ZXIsIGlmIHdlIHNob3VsZCAqLwogCXJlc3VsdCA9IHVzYl9zZXJpYWxfZ2VuZXJpY19yZWdpc3RlcihkZWJ1Zyk7CiAJaWYgKHJlc3VsdCA8IDApIHsKLQkJZXJyKCIlcyAtIHJlZ2lzdGVyaW5nIGdlbmVyaWMgZHJpdmVyIGZhaWxlZCIsIF9fZnVuY19fKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJ1c2Itc2VyaWFsOiAlcyAtIHJlZ2lzdGVyaW5nIGdlbmVyaWMgIgorCQkgICAgICAgImRyaXZlciBmYWlsZWRcbiIsIF9fZnVuY19fKTsKIAkJZ290byBleGl0X2dlbmVyaWM7CiAJfQogCi0JaW5mbyhEUklWRVJfREVTQyk7CisJcHJpbnRrKEtFUk5fSU5GTyBLQlVJTERfTU9ETkFNRSAiOiAiIERSSVZFUl9ERVNDICJcbiIpOwogCiAJcmV0dXJuIHJlc3VsdDsKIApAQCAtMTE2OCw3ICsxMTc4LDggQEAKIAlidXNfdW5yZWdpc3RlcigmdXNiX3NlcmlhbF9idXNfdHlwZSk7CiAKIGV4aXRfYnVzOgotCWVycigiJXMgLSByZXR1cm5pbmcgd2l0aCBlcnJvciAlZCIsIF9fZnVuY19fLCByZXN1bHQpOworCXByaW50ayhLRVJOX0VSUiAidXNiLXNlcmlhbDogJXMgLSByZXR1cm5pbmcgd2l0aCBlcnJvciAlZFxuIiwKKwkgICAgICAgX19mdW5jX18sIHJlc3VsdCk7CiAJcHV0X3R0eV9kcml2ZXIodXNiX3NlcmlhbF90dHlfZHJpdmVyKTsKIAlyZXR1cm4gcmVzdWx0OwogfQpAQCAtMTIyNywxMSArMTIzOCwxMSBAQAogCiAJcmV0dmFsID0gdXNiX3NlcmlhbF9idXNfcmVnaXN0ZXIoZHJpdmVyKTsKIAlpZiAocmV0dmFsKSB7Ci0JCWVycigicHJvYmxlbSAlZCB3aGVuIHJlZ2lzdGVyaW5nIGRyaXZlciAlcyIsCi0JCQkJCQlyZXR2YWwsIGRyaXZlci0+ZGVzY3JpcHRpb24pOworCQlwcmludGsoS0VSTl9FUlIgInVzYi1zZXJpYWw6IHByb2JsZW0gJWQgd2hlbiByZWdpc3RlcmluZyAiCisJCSAgICAgICAiZHJpdmVyICVzXG4iLCByZXR2YWwsIGRyaXZlci0+ZGVzY3JpcHRpb24pOwogCQlsaXN0X2RlbCgmZHJpdmVyLT5kcml2ZXJfbGlzdCk7CiAJfSBlbHNlCi0JCWluZm8oIlVTQiBTZXJpYWwgc3VwcG9ydCByZWdpc3RlcmVkIGZvciAlcyIsCisJCXByaW50ayhLRVJOX0lORk8gIlVTQiBTZXJpYWwgc3VwcG9ydCByZWdpc3RlcmVkIGZvciAlc1xuIiwKIAkJCQkJCWRyaXZlci0+ZGVzY3JpcHRpb24pOwogCiAJcmV0dXJuIHJldHZhbDsKQEAgLTEyNDIsNyArMTI1Myw4IEBACiB2b2lkIHVzYl9zZXJpYWxfZGVyZWdpc3RlcihzdHJ1Y3QgdXNiX3NlcmlhbF9kcml2ZXIgKmRldmljZSkKIHsKIAkvKiBtdXN0IGJlIGNhbGxlZCB3aXRoIEJLTCBoZWxkICovCi0JaW5mbygiVVNCIFNlcmlhbCBkZXJlZ2lzdGVyaW5nIGRyaXZlciAlcyIsIGRldmljZS0+ZGVzY3JpcHRpb24pOworCXByaW50ayhLRVJOX0lORk8gIlVTQiBTZXJpYWwgZGVyZWdpc3RlcmluZyBkcml2ZXIgJXNcbiIsCisJICAgICAgIGRldmljZS0+ZGVzY3JpcHRpb24pOwogCWxpc3RfZGVsKCZkZXZpY2UtPmRyaXZlcl9saXN0KTsKIAl1c2Jfc2VyaWFsX2J1c19kZXJlZ2lzdGVyKGRldmljZSk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvdmlzb3IuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC92aXNvci5jCmluZGV4IGNmODkyNGYuLjRmYWNjZTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC92aXNvci5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC92aXNvci5jCkBAIC00OTksNyArNDk5LDcgQEAKIAlpbnQgc3RhdHVzID0gdXJiLT5zdGF0dXM7CiAJc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eTsKIAlpbnQgcmVzdWx0OwotCWludCBhdmFpbGFibGVfcm9vbTsKKwlpbnQgYXZhaWxhYmxlX3Jvb20gPSAwOwogCiAJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX2Z1bmNfXywgcG9ydC0+bnVtYmVyKTsKIApAQCAtNTEyLDEzICs1MTIsMTcgQEAKIAl1c2Jfc2VyaWFsX2RlYnVnX2RhdGEoZGVidWcsICZwb3J0LT5kZXYsIF9fZnVuY19fLAogCQkJCQkJdXJiLT5hY3R1YWxfbGVuZ3RoLCBkYXRhKTsKIAotCXR0eSA9IHBvcnQtPnBvcnQudHR5OwotCWlmICh0dHkgJiYgdXJiLT5hY3R1YWxfbGVuZ3RoKSB7Ci0JCWF2YWlsYWJsZV9yb29tID0gdHR5X2J1ZmZlcl9yZXF1ZXN0X3Jvb20odHR5LAorCWlmICh1cmItPmFjdHVhbF9sZW5ndGgpIHsKKwkJdHR5ID0gdHR5X3BvcnRfdHR5X2dldCgmcG9ydC0+cG9ydCk7CisJCWlmICh0dHkpIHsKKwkJCWF2YWlsYWJsZV9yb29tID0gdHR5X2J1ZmZlcl9yZXF1ZXN0X3Jvb20odHR5LAogCQkJCQkJCXVyYi0+YWN0dWFsX2xlbmd0aCk7Ci0JCWlmIChhdmFpbGFibGVfcm9vbSkgewotCQkJdHR5X2luc2VydF9mbGlwX3N0cmluZyh0dHksIGRhdGEsIGF2YWlsYWJsZV9yb29tKTsKLQkJCXR0eV9mbGlwX2J1ZmZlcl9wdXNoKHR0eSk7CisJCQlpZiAoYXZhaWxhYmxlX3Jvb20pIHsKKwkJCQl0dHlfaW5zZXJ0X2ZsaXBfc3RyaW5nKHR0eSwgZGF0YSwKKwkJCQkJCQlhdmFpbGFibGVfcm9vbSk7CisJCQkJdHR5X2ZsaXBfYnVmZmVyX3B1c2godHR5KTsKKwkJCX0KKwkJCXR0eV9rcmVmX3B1dCh0dHkpOwogCQl9CiAJCXNwaW5fbG9jaygmcHJpdi0+bG9jayk7CiAJCXByaXYtPmJ5dGVzX2luICs9IGF2YWlsYWJsZV9yb29tOwpAQCAtNzY0LDcgKzc2OCw3IEBACiAJZGJnKCIlcyIsIF9fZnVuY19fKTsKIAogCWlmIChzZXJpYWwtPmRldi0+YWN0Y29uZmlnLT5kZXNjLmJDb25maWd1cmF0aW9uVmFsdWUgIT0gMSkgewotCQllcnIoImFjdGl2ZSBjb25maWcgIyVkICE9IDEgPz8iLAorCQlkZXZfZXJyKCZzZXJpYWwtPmRldi0+ZGV2LCAiYWN0aXZlIGNvbmZpZyAjJWQgIT0gMSA/P1xuIiwKIAkJCXNlcmlhbC0+ZGV2LT5hY3Rjb25maWctPmRlc2MuYkNvbmZpZ3VyYXRpb25WYWx1ZSk7CiAJCXJldHVybiAtRU5PREVWOwogCX0KQEAgLTk2NywxMSArOTcxLDE0IEBACiAJCQkJYnJlYWs7CiAJCQl9CiAJCX0KLQkJaW5mbygKLQkJICAiVW50ZXN0ZWQgVVNCIGRldmljZSBzcGVjaWZpZWQgYXQgdGltZSBvZiBtb2R1bGUgaW5zZXJ0aW9uIik7Ci0JCWluZm8oIldhcm5pbmc6IFRoaXMgaXMgbm90IGd1YXJhbnRlZWQgdG8gd29yayIpOwotCQlpbmZvKCJVc2luZyBhIG5ld2VyIGtlcm5lbCBpcyBwcmVmZXJyZWQgdG8gdGhpcyBtZXRob2QiKTsKLQkJaW5mbygiQWRkaW5nIFBhbG0gT1MgcHJvdG9jb2wgNC54IHN1cHBvcnQgZm9yIHVua25vd24gZGV2aWNlOiAweCV4LzB4JXgiLAorCQlwcmludGsoS0VSTl9JTkZPIEtCVUlMRF9NT0ROQU1FCisJCSAgICAgICAiOiBVbnRlc3RlZCBVU0IgZGV2aWNlIHNwZWNpZmllZCBhdCB0aW1lIG9mIG1vZHVsZSBpbnNlcnRpb25cbiIpOworCQlwcmludGsoS0VSTl9JTkZPIEtCVUlMRF9NT0ROQU1FCisJCSAgICAgICAiOiBXYXJuaW5nOiBUaGlzIGlzIG5vdCBndWFyYW50ZWVkIHRvIHdvcmtcbiIpOworCQlwcmludGsoS0VSTl9JTkZPIEtCVUlMRF9NT0ROQU1FCisJCSAgICAgICAiOiBVc2luZyBhIG5ld2VyIGtlcm5lbCBpcyBwcmVmZXJyZWQgdG8gdGhpcyBtZXRob2RcbiIpOworCQlwcmludGsoS0VSTl9JTkZPIEtCVUlMRF9NT0ROQU1FCisJCSAgICAgICAiOiBBZGRpbmcgUGFsbSBPUyBwcm90b2NvbCA0Lnggc3VwcG9ydCBmb3IgdW5rbm93biBkZXZpY2U6IDB4JXgvMHgleFxuIiwKIAkJCXZlbmRvciwgcHJvZHVjdCk7CiAJfQogCXJldHZhbCA9IHVzYl9zZXJpYWxfcmVnaXN0ZXIoJmhhbmRzcHJpbmdfZGV2aWNlKTsKQEAgLTk4Niw3ICs5OTMsNyBAQAogCXJldHZhbCA9IHVzYl9yZWdpc3Rlcigmdmlzb3JfZHJpdmVyKTsKIAlpZiAocmV0dmFsKQogCQlnb3RvIGZhaWxlZF91c2JfcmVnaXN0ZXI7Ci0JaW5mbyhEUklWRVJfREVTQyk7CisJcHJpbnRrKEtFUk5fSU5GTyBLQlVJTERfTU9ETkFNRSAiOiAiIERSSVZFUl9ERVNDICJcbiIpOwogCiAJcmV0dXJuIDA7CiBmYWlsZWRfdXNiX3JlZ2lzdGVyOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL3doaXRlaGVhdC5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL3doaXRlaGVhdC5jCmluZGV4IDNhOWQxNDMuLjUzMzVkMzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC93aGl0ZWhlYXQuYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvd2hpdGVoZWF0LmMKQEAgLTMwMywxMiArMzAzLDE1IEBACiAKIAlpZiAocmVxdWVzdF9paGV4X2Zpcm13YXJlKCZmaXJtd2FyZV9mdywgIndoaXRlaGVhdC5mdyIsCiAJCQkJICAmc2VyaWFsLT5kZXYtPmRldikpIHsKLQkJZXJyKCIlcyAtIHJlcXVlc3QgXCJ3aGl0ZWhlYXQuZndcIiBmYWlsZWQiLCBfX2Z1bmNfXyk7CisJCWRldl9lcnIoJnNlcmlhbC0+ZGV2LT5kZXYsCisJCQkiJXMgLSByZXF1ZXN0IFwid2hpdGVoZWF0LmZ3XCIgZmFpbGVkXG4iLCBfX2Z1bmNfXyk7CiAJCWdvdG8gb3V0OwogCX0KIAlpZiAocmVxdWVzdF9paGV4X2Zpcm13YXJlKCZsb2FkZXJfZncsICJ3aGl0ZWhlYXRfbG9hZGVyLmZ3IiwKIAkJCSAgICAgJnNlcmlhbC0+ZGV2LT5kZXYpKSB7Ci0JCWVycigiJXMgLSByZXF1ZXN0IFwid2hpdGVoZWF0X2xvYWRlci5md1wiIGZhaWxlZCIsIF9fZnVuY19fKTsKKwkJZGV2X2Vycigmc2VyaWFsLT5kZXYtPmRldiwKKwkJCSIlcyAtIHJlcXVlc3QgXCJ3aGl0ZWhlYXRfbG9hZGVyLmZ3XCIgZmFpbGVkXG4iLAorCQkJX19mdW5jX18pOwogCQlnb3RvIG91dDsKIAl9CiAJcmV0ID0gMDsKQEAgLTMyMCw5ICszMjMsMTAgQEAKIAkJCQkJICAgICAgKHVuc2lnbmVkIGNoYXIgKilyZWNvcmQtPmRhdGEsCiAJCQkJCSAgICAgIGJlMTZfdG9fY3B1KHJlY29yZC0+bGVuKSwgMHhhMCk7CiAJCWlmIChyZXNwb25zZSA8IDApIHsKLQkJCWVycigiJXMgLSBlenVzYl93cml0ZW1lbW9yeSBmYWlsZWQgZm9yIGxvYWRlciAoJWQgJTA0WCAlcCAlZCkiLAotCQkJICAgIF9fZnVuY19fLCByZXNwb25zZSwgYmUzMl90b19jcHUocmVjb3JkLT5hZGRyKSwKLQkJCSAgICByZWNvcmQtPmRhdGEsIGJlMTZfdG9fY3B1KHJlY29yZC0+bGVuKSk7CisJCQlkZXZfZXJyKCZzZXJpYWwtPmRldi0+ZGV2LCAiJXMgLSBlenVzYl93cml0ZW1lbW9yeSAiCisJCQkJImZhaWxlZCBmb3IgbG9hZGVyICglZCAlMDRYICVwICVkKVxuIiwKKwkJCQlfX2Z1bmNfXywgcmVzcG9uc2UsIGJlMzJfdG9fY3B1KHJlY29yZC0+YWRkciksCisJCQkJcmVjb3JkLT5kYXRhLCBiZTE2X3RvX2NwdShyZWNvcmQtPmxlbikpOwogCQkJYnJlYWs7CiAJCX0KIAkJcmVjb3JkID0gaWhleF9uZXh0X2JpbnJlYyhyZWNvcmQpOwpAQCAtMzM4LDkgKzM0MiwxMSBAQAogCQkJCQkgICAgICAodW5zaWduZWQgY2hhciAqKXJlY29yZC0+ZGF0YSwKIAkJCQkJICAgICAgYmUxNl90b19jcHUocmVjb3JkLT5sZW4pLCAweGEzKTsKIAkJaWYgKHJlc3BvbnNlIDwgMCkgewotCQkJZXJyKCIlcyAtIGV6dXNiX3dyaXRlbWVtb3J5IGZhaWxlZCBmb3IgZmlyc3QgZmlybXdhcmUgc3RlcCAoJWQgJTA0WCAlcCAlZCkiLCAKLQkJCSAgICBfX2Z1bmNfXywgcmVzcG9uc2UsIGJlMzJfdG9fY3B1KHJlY29yZC0+YWRkciksCi0JCQkgICAgcmVjb3JkLT5kYXRhLCBiZTE2X3RvX2NwdShyZWNvcmQtPmxlbikpOworCQkJZGV2X2Vycigmc2VyaWFsLT5kZXYtPmRldiwgIiVzIC0gZXp1c2Jfd3JpdGVtZW1vcnkgIgorCQkJCSJmYWlsZWQgZm9yIGZpcnN0IGZpcm13YXJlIHN0ZXAgIgorCQkJCSIoJWQgJTA0WCAlcCAlZClcbiIsIF9fZnVuY19fLCByZXNwb25zZSwKKwkJCQliZTMyX3RvX2NwdShyZWNvcmQtPmFkZHIpLCByZWNvcmQtPmRhdGEsCisJCQkJYmUxNl90b19jcHUocmVjb3JkLT5sZW4pKTsKIAkJCWJyZWFrOwogCQl9CiAJCSsrcmVjb3JkOwpAQCAtMzU0LDkgKzM2MCwxMSBAQAogCQkJCQkgICAgICAodW5zaWduZWQgY2hhciAqKXJlY29yZC0+ZGF0YSwKIAkJCQkJICAgICAgYmUxNl90b19jcHUocmVjb3JkLT5sZW4pLCAweGEwKTsKIAkJaWYgKHJlc3BvbnNlIDwgMCkgewotCQkJZXJyKCIlcyAtIGV6dXNiX3dyaXRlbWVtb3J5IGZhaWxlZCBmb3Igc2Vjb25kIGZpcm13YXJlIHN0ZXAgKCVkICUwNFggJXAgJWQpIiwgCi0JCQkgICAgX19mdW5jX18sIHJlc3BvbnNlLCBiZTMyX3RvX2NwdShyZWNvcmQtPmFkZHIpLAotCQkJICAgIHJlY29yZC0+ZGF0YSwgYmUxNl90b19jcHUocmVjb3JkLT5sZW4pKTsKKwkJCWRldl9lcnIoJnNlcmlhbC0+ZGV2LT5kZXYsICIlcyAtIGV6dXNiX3dyaXRlbWVtb3J5ICIKKwkJCQkiZmFpbGVkIGZvciBzZWNvbmQgZmlybXdhcmUgc3RlcCAiCisJCQkJIiglZCAlMDRYICVwICVkKVxuIiwgX19mdW5jX18sIHJlc3BvbnNlLAorCQkJCWJlMzJfdG9fY3B1KHJlY29yZC0+YWRkciksIHJlY29yZC0+ZGF0YSwKKwkJCQliZTE2X3RvX2NwdShyZWNvcmQtPmxlbikpOwogCQkJYnJlYWs7CiAJCX0KIAkJKytyZWNvcmQ7CkBAIC00MjEsMTIgKzQyOSwxMiBAQAogCXJldCA9IHVzYl9idWxrX21zZyhzZXJpYWwtPmRldiwgcGlwZSwgY29tbWFuZCwgMiwKIAkJCQkJCSZhbGVuLCBDT01NQU5EX1RJTUVPVVRfTVMpOwogCWlmIChyZXQpIHsKLQkJZXJyKCIlczogQ291bGRuJ3Qgc2VuZCBjb21tYW5kIFslZF0iLAotCQkJCXNlcmlhbC0+dHlwZS0+ZGVzY3JpcHRpb24sIHJldCk7CisJCWRldl9lcnIoJnNlcmlhbC0+ZGV2LT5kZXYsICIlczogQ291bGRuJ3Qgc2VuZCBjb21tYW5kIFslZF1cbiIsCisJCQlzZXJpYWwtPnR5cGUtPmRlc2NyaXB0aW9uLCByZXQpOwogCQlnb3RvIG5vX2Zpcm13YXJlOwogCX0gZWxzZSBpZiAoYWxlbiAhPSAyKSB7Ci0JCWVycigiJXM6IFNlbmQgY29tbWFuZCBpbmNvbXBsZXRlIFslZF0iLAotCQkJCXNlcmlhbC0+dHlwZS0+ZGVzY3JpcHRpb24sIGFsZW4pOworCQlkZXZfZXJyKCZzZXJpYWwtPmRldi0+ZGV2LCAiJXM6IFNlbmQgY29tbWFuZCBpbmNvbXBsZXRlIFslZF1cbiIsCisJCQlzZXJpYWwtPnR5cGUtPmRlc2NyaXB0aW9uLCBhbGVuKTsKIAkJZ290byBub19maXJtd2FyZTsKIAl9CiAKQEAgLTQzNywzMSArNDQ1LDMzIEBACiAJcmV0ID0gdXNiX2J1bGtfbXNnKHNlcmlhbC0+ZGV2LCBwaXBlLCByZXN1bHQsCiAJCQlzaXplb2YoKmh3X2luZm8pICsgMSwgJmFsZW4sIENPTU1BTkRfVElNRU9VVF9NUyk7CiAJaWYgKHJldCkgewotCQllcnIoIiVzOiBDb3VsZG4ndCBnZXQgcmVzdWx0cyBbJWRdIiwKLQkJCQlzZXJpYWwtPnR5cGUtPmRlc2NyaXB0aW9uLCByZXQpOworCQlkZXZfZXJyKCZzZXJpYWwtPmRldi0+ZGV2LCAiJXM6IENvdWxkbid0IGdldCByZXN1bHRzIFslZF1cbiIsCisJCQlzZXJpYWwtPnR5cGUtPmRlc2NyaXB0aW9uLCByZXQpOwogCQlnb3RvIG5vX2Zpcm13YXJlOwogCX0gZWxzZSBpZiAoYWxlbiAhPSBzaXplb2YoKmh3X2luZm8pICsgMSkgewotCQllcnIoIiVzOiBHZXQgcmVzdWx0cyBpbmNvbXBsZXRlIFslZF0iLAotCQkJCXNlcmlhbC0+dHlwZS0+ZGVzY3JpcHRpb24sIGFsZW4pOworCQlkZXZfZXJyKCZzZXJpYWwtPmRldi0+ZGV2LCAiJXM6IEdldCByZXN1bHRzIGluY29tcGxldGUgWyVkXVxuIiwKKwkJCXNlcmlhbC0+dHlwZS0+ZGVzY3JpcHRpb24sIGFsZW4pOwogCQlnb3RvIG5vX2Zpcm13YXJlOwogCX0gZWxzZSBpZiAocmVzdWx0WzBdICE9IGNvbW1hbmRbMF0pIHsKLQkJZXJyKCIlczogQ29tbWFuZCBmYWlsZWQgWyVkXSIsCi0JCQkJc2VyaWFsLT50eXBlLT5kZXNjcmlwdGlvbiwgcmVzdWx0WzBdKTsKKwkJZGV2X2Vycigmc2VyaWFsLT5kZXYtPmRldiwgIiVzOiBDb21tYW5kIGZhaWxlZCBbJWRdXG4iLAorCQkJc2VyaWFsLT50eXBlLT5kZXNjcmlwdGlvbiwgcmVzdWx0WzBdKTsKIAkJZ290byBub19maXJtd2FyZTsKIAl9CiAKIAlod19pbmZvID0gKHN0cnVjdCB3aGl0ZWhlYXRfaHdfaW5mbyAqKSZyZXN1bHRbMV07CiAKLQlpbmZvKCIlczogRHJpdmVyICVzOiBGaXJtd2FyZSB2JWQuJTAyZCIsIHNlcmlhbC0+dHlwZS0+ZGVzY3JpcHRpb24sCi0JICAgICBEUklWRVJfVkVSU0lPTiwgaHdfaW5mby0+c3dfbWFqb3JfcmV2LCBod19pbmZvLT5zd19taW5vcl9yZXYpOworCWRldl9pbmZvKCZzZXJpYWwtPmRldi0+ZGV2LCAiJXM6IERyaXZlciAlczogRmlybXdhcmUgdiVkLiUwMmRcbiIsCisJCSBzZXJpYWwtPnR5cGUtPmRlc2NyaXB0aW9uLCBEUklWRVJfVkVSU0lPTiwKKwkJIGh3X2luZm8tPnN3X21ham9yX3JldiwgaHdfaW5mby0+c3dfbWlub3JfcmV2KTsKIAogCWZvciAoaSA9IDA7IGkgPCBzZXJpYWwtPm51bV9wb3J0czsgaSsrKSB7CiAJCXBvcnQgPSBzZXJpYWwtPnBvcnRbaV07CiAKIAkJaW5mbyA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCB3aGl0ZWhlYXRfcHJpdmF0ZSksIEdGUF9LRVJORUwpOwogCQlpZiAoaW5mbyA9PSBOVUxMKSB7Ci0JCQllcnIoIiVzOiBPdXQgb2YgbWVtb3J5IGZvciBwb3J0IHN0cnVjdHVyZXNcbiIsCi0JCQkJCXNlcmlhbC0+dHlwZS0+ZGVzY3JpcHRpb24pOworCQkJZGV2X2VycigmcG9ydC0+ZGV2LAorCQkJCSIlczogT3V0IG9mIG1lbW9yeSBmb3IgcG9ydCBzdHJ1Y3R1cmVzXG4iLAorCQkJCXNlcmlhbC0+dHlwZS0+ZGVzY3JpcHRpb24pOwogCQkJZ290byBub19wcml2YXRlOwogCQl9CiAKQEAgLTQ4MSwxOCArNDkxLDIwIEBACiAJCWZvciAoaiA9IDA7IGogPCB1cmJfcG9vbF9zaXplOyBqKyspIHsKIAkJCXVyYiA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0tFUk5FTCk7CiAJCQlpZiAoIXVyYikgewotCQkJCWVycigiTm8gZnJlZSB1cmJzIGF2YWlsYWJsZSIpOworCQkJCWRldl9lcnIoJnBvcnQtPmRldiwgIk5vIGZyZWUgdXJicyBhdmFpbGFibGVcbiIpOwogCQkJCWdvdG8gbm9fcnhfdXJiOwogCQkJfQogCQkJYnVmX3NpemUgPSBwb3J0LT5yZWFkX3VyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aDsKIAkJCXVyYi0+dHJhbnNmZXJfYnVmZmVyID0ga21hbGxvYyhidWZfc2l6ZSwgR0ZQX0tFUk5FTCk7CiAJCQlpZiAoIXVyYi0+dHJhbnNmZXJfYnVmZmVyKSB7Ci0JCQkJZXJyKCJDb3VsZG4ndCBhbGxvY2F0ZSB1cmIgYnVmZmVyIik7CisJCQkJZGV2X2VycigmcG9ydC0+ZGV2LAorCQkJCQkiQ291bGRuJ3QgYWxsb2NhdGUgdXJiIGJ1ZmZlclxuIik7CiAJCQkJZ290byBub19yeF9idWY7CiAJCQl9CiAJCQl3cmFwID0ga21hbGxvYyhzaXplb2YoKndyYXApLCBHRlBfS0VSTkVMKTsKIAkJCWlmICghd3JhcCkgewotCQkJCWVycigiQ291bGRuJ3QgYWxsb2NhdGUgdXJiIHdyYXBwZXIiKTsKKwkJCQlkZXZfZXJyKCZwb3J0LT5kZXYsCisJCQkJCSJDb3VsZG4ndCBhbGxvY2F0ZSB1cmIgd3JhcHBlclxuIik7CiAJCQkJZ290byBub19yeF93cmFwOwogCQkJfQogCQkJdXNiX2ZpbGxfYnVsa191cmIodXJiLCBzZXJpYWwtPmRldiwKQEAgLTUwNSwxOCArNTE3LDIwIEBACiAKIAkJCXVyYiA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0tFUk5FTCk7CiAJCQlpZiAoIXVyYikgewotCQkJCWVycigiTm8gZnJlZSB1cmJzIGF2YWlsYWJsZSIpOworCQkJCWRldl9lcnIoJnBvcnQtPmRldiwgIk5vIGZyZWUgdXJicyBhdmFpbGFibGVcbiIpOwogCQkJCWdvdG8gbm9fdHhfdXJiOwogCQkJfQogCQkJYnVmX3NpemUgPSBwb3J0LT53cml0ZV91cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGg7CiAJCQl1cmItPnRyYW5zZmVyX2J1ZmZlciA9IGttYWxsb2MoYnVmX3NpemUsIEdGUF9LRVJORUwpOwogCQkJaWYgKCF1cmItPnRyYW5zZmVyX2J1ZmZlcikgewotCQkJCWVycigiQ291bGRuJ3QgYWxsb2NhdGUgdXJiIGJ1ZmZlciIpOworCQkJCWRldl9lcnIoJnBvcnQtPmRldiwKKwkJCQkJIkNvdWxkbid0IGFsbG9jYXRlIHVyYiBidWZmZXJcbiIpOwogCQkJCWdvdG8gbm9fdHhfYnVmOwogCQkJfQogCQkJd3JhcCA9IGttYWxsb2Moc2l6ZW9mKCp3cmFwKSwgR0ZQX0tFUk5FTCk7CiAJCQlpZiAoIXdyYXApIHsKLQkJCQllcnIoIkNvdWxkbid0IGFsbG9jYXRlIHVyYiB3cmFwcGVyIik7CisJCQkJZGV2X2VycigmcG9ydC0+ZGV2LAorCQkJCQkiQ291bGRuJ3QgYWxsb2NhdGUgdXJiIHdyYXBwZXJcbiIpOwogCQkJCWdvdG8gbm9fdHhfd3JhcDsKIAkJCX0KIAkJCXVzYl9maWxsX2J1bGtfdXJiKHVyYiwgc2VyaWFsLT5kZXYsCkBAIC01MzQsOCArNTQ4LDkgQEAKIAljb21tYW5kX2luZm8gPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3Qgd2hpdGVoZWF0X2NvbW1hbmRfcHJpdmF0ZSksCiAJCQkJCQkJCUdGUF9LRVJORUwpOwogCWlmIChjb21tYW5kX2luZm8gPT0gTlVMTCkgewotCQllcnIoIiVzOiBPdXQgb2YgbWVtb3J5IGZvciBwb3J0IHN0cnVjdHVyZXNcbiIsCi0JCQkJCXNlcmlhbC0+dHlwZS0+ZGVzY3JpcHRpb24pOworCQlkZXZfZXJyKCZzZXJpYWwtPmRldi0+ZGV2LAorCQkJIiVzOiBPdXQgb2YgbWVtb3J5IGZvciBwb3J0IHN0cnVjdHVyZXNcbiIsCisJCQlzZXJpYWwtPnR5cGUtPmRlc2NyaXB0aW9uKTsKIAkJZ290byBub19jb21tYW5kX3ByaXZhdGU7CiAJfQogCkBAIC01NTIsMTIgKzU2NywxNSBAQAogCiBub19maXJtd2FyZToKIAkvKiBGaXJtd2FyZSBsaWtlbHkgbm90IHJ1bm5pbmcgKi8KLQllcnIoIiVzOiBVbmFibGUgdG8gcmV0cmlldmUgZmlybXdhcmUgdmVyc2lvbiwgdHJ5IHJlcGx1Z2dpbmdcbiIsCi0JCQkJCXNlcmlhbC0+dHlwZS0+ZGVzY3JpcHRpb24pOwotCWVycigiJXM6IElmIHRoZSBmaXJtd2FyZSBpcyBub3QgcnVubmluZyAoc3RhdHVzIGxlZCBub3QgYmxpbmtpbmcpXG4iLAotCQkJCQlzZXJpYWwtPnR5cGUtPmRlc2NyaXB0aW9uKTsKLQllcnIoIiVzOiBwbGVhc2UgY29udGFjdCBzdXBwb3J0QGNvbm5lY3R0ZWNoLmNvbVxuIiwKLQkJCQkJc2VyaWFsLT50eXBlLT5kZXNjcmlwdGlvbik7CisJZGV2X2Vycigmc2VyaWFsLT5kZXYtPmRldiwKKwkJIiVzOiBVbmFibGUgdG8gcmV0cmlldmUgZmlybXdhcmUgdmVyc2lvbiwgdHJ5IHJlcGx1Z2dpbmdcbiIsCisJCXNlcmlhbC0+dHlwZS0+ZGVzY3JpcHRpb24pOworCWRldl9lcnIoJnNlcmlhbC0+ZGV2LT5kZXYsCisJCSIlczogSWYgdGhlIGZpcm13YXJlIGlzIG5vdCBydW5uaW5nIChzdGF0dXMgbGVkIG5vdCBibGlua2luZylcbiIsCisJCXNlcmlhbC0+dHlwZS0+ZGVzY3JpcHRpb24pOworCWRldl9lcnIoJnNlcmlhbC0+ZGV2LT5kZXYsCisJCSIlczogcGxlYXNlIGNvbnRhY3Qgc3VwcG9ydEBjb25uZWN0dGVjaC5jb21cbiIsCisJCXNlcmlhbC0+dHlwZS0+ZGVzY3JpcHRpb24pOwogCWtmcmVlKHJlc3VsdCk7CiAJcmV0dXJuIC1FTk9ERVY7CiAKQEAgLTY4MCw4ICs2OTgsOSBAQAogCS8qIFN0YXJ0IHJlYWRpbmcgZnJvbSB0aGUgZGV2aWNlICovCiAJcmV0dmFsID0gc3RhcnRfcG9ydF9yZWFkKHBvcnQpOwogCWlmIChyZXR2YWwpIHsKLQkJZXJyKCIlcyAtIGZhaWxlZCBzdWJtaXR0aW5nIHJlYWQgdXJiLCBlcnJvciAlZCIsCi0JCQkJX19mdW5jX18sIHJldHZhbCk7CisJCWRldl9lcnIoJnBvcnQtPmRldiwKKwkJCSIlcyAtIGZhaWxlZCBzdWJtaXR0aW5nIHJlYWQgdXJiLCBlcnJvciAlZFxuIiwKKwkJCV9fZnVuY19fLCByZXR2YWwpOwogCQlmaXJtX2Nsb3NlKHBvcnQpOwogCQlzdG9wX2NvbW1hbmRfcG9ydChwb3J0LT5zZXJpYWwpOwogCQlnb3RvIGV4aXQ7CkBAIC04MDYsOCArODI1LDkgQEAKIAkJdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoID0gYnl0ZXM7CiAJCXJlc3VsdCA9IHVzYl9zdWJtaXRfdXJiKHVyYiwgR0ZQX0FUT01JQyk7CiAJCWlmIChyZXN1bHQpIHsKLQkJCWVycigiJXMgLSBmYWlsZWQgc3VibWl0dGluZyB3cml0ZSB1cmIsIGVycm9yICVkIiwKLQkJCQkJCQlfX2Z1bmNfXywgcmVzdWx0KTsKKwkJCWRldl9lcnIoJnBvcnQtPmRldiwKKwkJCQkiJXMgLSBmYWlsZWQgc3VibWl0dGluZyB3cml0ZSB1cmIsIGVycm9yICVkXG4iLAorCQkJCV9fZnVuY19fLCByZXN1bHQpOwogCQkJc2VudCA9IHJlc3VsdDsKIAkJCXNwaW5fbG9ja19pcnFzYXZlKCZpbmZvLT5sb2NrLCBmbGFncyk7CiAJCQlsaXN0X2FkZCh0bXAsICZpbmZvLT50eF91cmJzX2ZyZWUpOwpAQCAtMTA3NSw3ICsxMDk1LDcgQEAKIAl3cmFwID0gdXJiX3RvX3dyYXAodXJiLCAmaW5mby0+cnhfdXJic19zdWJtaXR0ZWQpOwogCWlmICghd3JhcCkgewogCQlzcGluX3VubG9jaygmaW5mby0+bG9jayk7Ci0JCWVycigiJXMgLSBOb3QgbXkgdXJiISIsIF9fZnVuY19fKTsKKwkJZGV2X2VycigmcG9ydC0+ZGV2LCAiJXMgLSBOb3QgbXkgdXJiIVxuIiwgX19mdW5jX18pOwogCQlyZXR1cm47CiAJfQogCWxpc3RfZGVsKCZ3cmFwLT5saXN0KTsKQEAgLTExMTksNyArMTEzOSw3IEBACiAJd3JhcCA9IHVyYl90b193cmFwKHVyYiwgJmluZm8tPnR4X3VyYnNfc3VibWl0dGVkKTsKIAlpZiAoIXdyYXApIHsKIAkJc3Bpbl91bmxvY2soJmluZm8tPmxvY2spOwotCQllcnIoIiVzIC0gTm90IG15IHVyYiEiLCBfX2Z1bmNfXyk7CisJCWRldl9lcnIoJnBvcnQtPmRldiwgIiVzIC0gTm90IG15IHVyYiFcbiIsIF9fZnVuY19fKTsKIAkJcmV0dXJuOwogCX0KIAlsaXN0X21vdmUoJndyYXAtPmxpc3QsICZpbmZvLT50eF91cmJzX2ZyZWUpOwpAQCAtMTM4Myw4ICsxNDAzLDkgQEAKIAkJY29tbWFuZF9wb3J0LT5yZWFkX3VyYi0+ZGV2ID0gc2VyaWFsLT5kZXY7CiAJCXJldHZhbCA9IHVzYl9zdWJtaXRfdXJiKGNvbW1hbmRfcG9ydC0+cmVhZF91cmIsIEdGUF9LRVJORUwpOwogCQlpZiAocmV0dmFsKSB7Ci0JCQllcnIoIiVzIC0gZmFpbGVkIHN1Ym1pdHRpbmcgcmVhZCB1cmIsIGVycm9yICVkIiwKLQkJCQkJCQlfX2Z1bmNfXywgcmV0dmFsKTsKKwkJCWRldl9lcnIoJnNlcmlhbC0+ZGV2LT5kZXYsCisJCQkJIiVzIC0gZmFpbGVkIHN1Ym1pdHRpbmcgcmVhZCB1cmIsIGVycm9yICVkXG4iLAorCQkJCV9fZnVuY19fLCByZXR2YWwpOwogCQkJZ290byBleGl0OwogCQl9CiAJfQpAQCAtMTQ4MSw3ICsxNTAyLDcgQEAKIAlzdHJ1Y3Qgd2hpdGVoZWF0X3ByaXZhdGUgKmluZm8gPQogCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IHdoaXRlaGVhdF9wcml2YXRlLCByeF93b3JrKTsKIAlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gaW5mby0+cG9ydDsKLQlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5ID0gcG9ydC0+cG9ydC50dHk7CisJc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSA9IHR0eV9wb3J0X3R0eV9nZXQoJnBvcnQtPnBvcnQpOwogCXN0cnVjdCB3aGl0ZWhlYXRfdXJiX3dyYXAgKndyYXA7CiAJc3RydWN0IHVyYiAqdXJiOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CkBAIC0xNDkzLDcgKzE1MTQsNyBAQAogCXNwaW5fbG9ja19pcnFzYXZlKCZpbmZvLT5sb2NrLCBmbGFncyk7CiAJaWYgKGluZm8tPmZsYWdzICYgVEhST1RUTEVEKSB7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmluZm8tPmxvY2ssIGZsYWdzKTsKLQkJcmV0dXJuOworCQlnb3RvIG91dDsKIAl9CiAKIAlsaXN0X2Zvcl9lYWNoX3NhZmUodG1wLCB0bXAyLCAmaW5mby0+cnhfdXJiX3EpIHsKQEAgLTE1MTMsNyArMTUzNCw3IEBACiAJCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW5mby0+bG9jaywgZmxhZ3MpOwogCQkJCXR0eV9mbGlwX2J1ZmZlcl9wdXNoKHR0eSk7CiAJCQkJc2NoZWR1bGVfd29yaygmaW5mby0+cnhfd29yayk7Ci0JCQkJcmV0dXJuOworCQkJCWdvdG8gb3V0OwogCQkJfQogCQkJdHR5X2luc2VydF9mbGlwX3N0cmluZyh0dHksIHVyYi0+dHJhbnNmZXJfYnVmZmVyLCBsZW4pOwogCQkJc2VudCArPSBsZW47CkBAIC0xNTIyLDcgKzE1NDMsOCBAQAogCQl1cmItPmRldiA9IHBvcnQtPnNlcmlhbC0+ZGV2OwogCQlyZXN1bHQgPSB1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9BVE9NSUMpOwogCQlpZiAocmVzdWx0KSB7Ci0JCQllcnIoIiVzIC0gZmFpbGVkIHJlc3VibWl0dGluZyByZWFkIHVyYiwgZXJyb3IgJWQiLAorCQkJZGV2X2VycigmcG9ydC0+ZGV2LAorCQkJCSIlcyAtIGZhaWxlZCByZXN1Ym1pdHRpbmcgcmVhZCB1cmIsIGVycm9yICVkXG4iLAogCQkJCV9fZnVuY19fLCByZXN1bHQpOwogCQkJc3Bpbl9sb2NrX2lycXNhdmUoJmluZm8tPmxvY2ssIGZsYWdzKTsKIAkJCWxpc3RfYWRkKHRtcCwgJmluZm8tPnJ4X3VyYnNfZnJlZSk7CkBAIC0xNTM2LDYgKzE1NTgsOCBAQAogCiAJaWYgKHNlbnQpCiAJCXR0eV9mbGlwX2J1ZmZlcl9wdXNoKHR0eSk7CitvdXQ6CisJdHR5X2tyZWZfcHV0KHR0eSk7CiB9CiAKIApAQCAtMTU1NCw3ICsxNTc4LDggQEAKIAlyZXR2YWwgPSB1c2JfcmVnaXN0ZXIoJndoaXRlaGVhdF9kcml2ZXIpOwogCWlmIChyZXR2YWwpCiAJCWdvdG8gZmFpbGVkX3VzYl9yZWdpc3RlcjsKLQlpbmZvKERSSVZFUl9ERVNDICIgIiBEUklWRVJfVkVSU0lPTik7CisJcHJpbnRrKEtFUk5fSU5GTyBLQlVJTERfTU9ETkFNRSAiOiAiIERSSVZFUl9WRVJTSU9OICI6IgorCSAgICAgICBEUklWRVJfREVTQyAiXG4iKTsKIAlyZXR1cm4gMDsKIGZhaWxlZF91c2JfcmVnaXN0ZXI6CiAJdXNiX3NlcmlhbF9kZXJlZ2lzdGVyKCZ3aGl0ZWhlYXRfZGV2aWNlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3N0b3JhZ2Uvb25ldG91Y2guYyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2Uvb25ldG91Y2guYwppbmRleCA5OGI4OWVhLi5jN2JmODk1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zdG9yYWdlL29uZXRvdWNoLmMKKysrIGIvZHJpdmVycy91c2Ivc3RvcmFnZS9vbmV0b3VjaC5jCkBAIC03OCw4ICs3OCw4IEBACiByZXN1Ym1pdDoKIAlyZXR2YWwgPSB1c2Jfc3VibWl0X3VyYiAodXJiLCBHRlBfQVRPTUlDKTsKIAlpZiAocmV0dmFsKQotCQllcnIgKCJjYW4ndCByZXN1Ym1pdCBpbnRyLCAlcy0lcy9pbnB1dDAsIHJldHZhbCAlZCIsCi0JCQlvbmV0b3VjaC0+dWRldi0+YnVzLT5idXNfbmFtZSwKKwkJZGV2X2VycigmZGV2LT5kZXYsICJjYW4ndCByZXN1Ym1pdCBpbnRyLCAlcy0lcy9pbnB1dDAsICIKKwkJCSJyZXR2YWwgJWRcbiIsIG9uZXRvdWNoLT51ZGV2LT5idXMtPmJ1c19uYW1lLAogCQkJb25ldG91Y2gtPnVkZXYtPmRldnBhdGgsIHJldHZhbCk7CiB9CiAKQEAgLTkwLDcgKzkwLDcgQEAKIAlvbmV0b3VjaC0+aXNfb3BlbiA9IDE7CiAJb25ldG91Y2gtPmlycS0+ZGV2ID0gb25ldG91Y2gtPnVkZXY7CiAJaWYgKHVzYl9zdWJtaXRfdXJiKG9uZXRvdWNoLT5pcnEsIEdGUF9LRVJORUwpKSB7Ci0JCWVycigidXNiX3N1Ym1pdF91cmIgZmFpbGVkIik7CisJCWRldl9lcnIoJmRldi0+ZGV2LCAidXNiX3N1Ym1pdF91cmIgZmFpbGVkXG4iKTsKIAkJcmV0dXJuIC1FSU87CiAJfQogCkBAIC0xMTcsNyArMTE3LDggQEAKIAkJCWJyZWFrOwogCQljYXNlIFVTX1JFU1VNRToKIAkJCWlmICh1c2Jfc3VibWl0X3VyYihvbmV0b3VjaC0+aXJxLCBHRlBfS0VSTkVMKSAhPSAwKQotCQkJCWVycigidXNiX3N1Ym1pdF91cmIgZmFpbGVkIik7CisJCQkJZGV2X2Vycigmb25ldG91Y2gtPmlycS0+ZGV2LT5kZXYsCisJCQkJCSJ1c2Jfc3VibWl0X3VyYiBmYWlsZWRcbiIpOwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQlicmVhazsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdHJhbnNwb3J0LmMgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL3RyYW5zcG9ydC5jCmluZGV4IDM1MjNhMGIuLjc5MTA4ZDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdHJhbnNwb3J0LmMKKysrIGIvZHJpdmVycy91c2Ivc3RvcmFnZS90cmFuc3BvcnQuYwpAQCAtNjYzLDcgKzY2Myw3IEBACiAJfQogCiAJLyogRGlkIHdlIHRyYW5zZmVyIGxlc3MgdGhhbiB0aGUgbWluaW11bSBhbW91bnQgcmVxdWlyZWQ/ICovCi0JaWYgKHNyYi0+cmVzdWx0ID09IFNBTV9TVEFUX0dPT0QgJiYKKwlpZiAoKHNyYi0+cmVzdWx0ID09IFNBTV9TVEFUX0dPT0QgfHwgc3JiLT5zZW5zZV9idWZmZXJbMl0gPT0gMCkgJiYKIAkJCXNjc2lfYnVmZmxlbihzcmIpIC0gc2NzaV9nZXRfcmVzaWQoc3JiKSA8IHNyYi0+dW5kZXJmbG93KQogCQlzcmItPnJlc3VsdCA9IChESURfRVJST1IgPDwgMTYpIHwgKFNVR0dFU1RfUkVUUlkgPDwgMjQpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL0tjb25maWcgYi9kcml2ZXJzL3ZpZGVvL0tjb25maWcKaW5kZXggZjc5YzIwNC4uMGYxMzQ0OCAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9LY29uZmlnCisrKyBiL2RyaXZlcnMvdmlkZW8vS2NvbmZpZwpAQCAtNzYsNiArNzYsMTQgQEAKICAgICAgICBzZWxlY3QgSTJDCiAgICAgICAgZGVmYXVsdCBuCiAKK2NvbmZpZyBGQl9CT09UX1ZFU0FfU1VQUE9SVAorCWJvb2wKKwlkZXBlbmRzIG9uIEZCCisJZGVmYXVsdCBuCisJLS0taGVscC0tLQorCSAgSWYgdHJ1ZSwgYXQgbGVhc3Qgb25lIHNlbGVjdGVkIGZyYW1lYnVmZmVyIGRyaXZlciBjYW4gdGFrZSBhZHZhbnRhZ2UKKwkgIG9mIFZFU0EgdmlkZW8gbW9kZXMgc2V0IGF0IGFuIGVhcmx5IGJvb3Qgc3RhZ2UgdmlhIHRoZSB2Z2E9IHBhcmFtZXRlci4KKwogY29uZmlnIEZCX0NGQl9GSUxMUkVDVAogCXRyaXN0YXRlCiAJZGVwZW5kcyBvbiBGQgpAQCAtMjU0LDE2ICsyNjIsMjQgQEAKIAlzZWxlY3QgRkJfQ0ZCX0NPUFlBUkVBCiAJc2VsZWN0IEZCX0NGQl9JTUFHRUJMSVQKIAloZWxwCi0JICBUaGlzIGlzIHRoZSBmcmFtZSBidWZmZXIgZGV2aWNlIGRyaXZlciBmb3IgdGhlIFBlcm1lZGlhMiBBR1AgZnJhbWUKLQkgIGJ1ZmZlciBjYXJkIGZyb20gQVNLLCBha2EgYEdyYXBoaWMgQmxhc3RlciBFeHh0cmVtZScuICBUaGVyZSBpcyBhCi0JICBwcm9kdWN0IHBhZ2UgYXQKLQkgIDxodHRwOi8vd3d3LmFzay5jb20uaGsvcHJvZHVjdC9QZXJtZWRpYSUyMDIvcGVybWVkaWEyLmh0bT4uCisJICBUaGlzIGlzIHRoZSBmcmFtZSBidWZmZXIgZGV2aWNlIGRyaXZlciBmb3IgY2FyZHMgYmFzZWQgb24KKwkgIHRoZSAzRCBMYWJzIFBlcm1lZGlhLCBQZXJtZWRpYSAyIGFuZCBQZXJtZWRpYSAyViBjaGlwcy4KKwkgIFRoZSBkcml2ZXIgd2FzIHRlc3RlZCBvbiB0aGUgZm9sbG93aW5nIGNhcmRzOgorCQlEaWFtb25kIEZpcmVHTCAxMDAwIFBSTyBBR1AKKwkJRUxTQSBHbG9yaWEgU3luZXJneSBQQ0kKKwkJQXBwaWFuIEplcm9uaW1vIFBSTyAoYm90aCBoZWFkcykgUENJCisJCTNETGFicyBPeHlnZW4gQUNYIGFrYSBFT050cm9uaWNzIFBpY2Fzc28gUDIgUENJCisJCVRlY2hzb3VyY2UgUmFwdG9yIEdGWC04UCAoYWthIFN1biBQR1gtMzIpIG9uIFNQQVJDCisJCUFTSyBHcmFwaGljIEJsYXN0ZXIgRXh4dHJlbWUgQUdQCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQorCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHBtMmZiLgogCiBjb25maWcgRkJfUE0yX0ZJRk9fRElTQ09OTkVDVAogCWJvb2wgImVuYWJsZSBGSUZPIGRpc2Nvbm5lY3QgZmVhdHVyZSIKIAlkZXBlbmRzIG9uIEZCX1BNMiAmJiBQQ0kKIAloZWxwCi0JICBTdXBwb3J0IHRoZSBQZXJtZWRpYTIgRklGTyBkaXNjb25uZWN0IGZlYXR1cmUgKHNlZSBDT05GSUdfRkJfUE0yKS4KKwkgIFN1cHBvcnQgdGhlIFBlcm1lZGlhMiBGSUZPIGRpc2Nvbm5lY3QgZmVhdHVyZS4KIAogY29uZmlnIEZCX0FSTUNMQ0QKIAl0cmlzdGF0ZSAiQVJNIFByaW1lQ2VsbCBQTDExMCBzdXBwb3J0IgpAQCAtNjczLDYgKzY4OSw3IEBACiAJc2VsZWN0IEZCX0NGQl9GSUxMUkVDVAogCXNlbGVjdCBGQl9DRkJfQ09QWUFSRUEKIAlzZWxlY3QgRkJfQ0ZCX0lNQUdFQkxJVAorCXNlbGVjdCBGQl9CT09UX1ZFU0FfU1VQUE9SVAogCWhlbHAKIAkgIFRoaXMgaXMgdGhlIGZyYW1lIGJ1ZmZlciBkZXZpY2UgZHJpdmVyIGZvciBnZW5lcmljIFZFU0EgMi4wCiAJICBjb21wbGlhbnQgZ3JhcGhpYyBjYXJkcy4gVGhlIG9sZGVyIFZFU0EgMS4yIGNhcmRzIGFyZSBub3Qgc3VwcG9ydGVkLgpAQCAtNjgxLDIzICs2OTgsMTQgQEAKIAogY29uZmlnIEZCX0VGSQogCWJvb2wgIkVGSS1iYXNlZCBGcmFtZWJ1ZmZlciBTdXBwb3J0IgotCWRlcGVuZHMgb24gKEZCID0geSkgJiYgWDg2Ci0Jc2VsZWN0IEZCX0NGQl9GSUxMUkVDVAotCXNlbGVjdCBGQl9DRkJfQ09QWUFSRUEKLQlzZWxlY3QgRkJfQ0ZCX0lNQUdFQkxJVAotCWhlbHAKLQkgIFRoaXMgaXMgdGhlIEVGSSBmcmFtZSBidWZmZXIgZGV2aWNlIGRyaXZlci4gSWYgdGhlIGZpcm13YXJlIG9uCi0JICB5b3VyIHBsYXRmb3JtIGlzIFVFRkkyLjAsIHNlbGVjdCBZIHRvIGFkZCBzdXBwb3J0IGZvcgotCSAgR3JhcGhpY3MgT3V0cHV0IFByb3RvY29sIGZvciBlYXJseSBjb25zb2xlIG1lc3NhZ2VzIHRvIGFwcGVhci4KLQotY29uZmlnIEZCX0lNQUMKLQlib29sICJJbnRlbC1iYXNlZCBNYWNpbnRvc2ggRnJhbWVidWZmZXIgU3VwcG9ydCIKIAlkZXBlbmRzIG9uIChGQiA9IHkpICYmIFg4NiAmJiBFRkkKIAlzZWxlY3QgRkJfQ0ZCX0ZJTExSRUNUCiAJc2VsZWN0IEZCX0NGQl9DT1BZQVJFQQogCXNlbGVjdCBGQl9DRkJfSU1BR0VCTElUCiAJaGVscAotCSAgVGhpcyBpcyB0aGUgZnJhbWUgYnVmZmVyIGRldmljZSBkcml2ZXIgZm9yIHRoZSBJbnRlbC1iYXNlZCBNYWNpbnRvc2gKKwkgIFRoaXMgaXMgdGhlIEVGSSBmcmFtZSBidWZmZXIgZGV2aWNlIGRyaXZlci4gSWYgdGhlIGZpcm13YXJlIG9uCisJICB5b3VyIHBsYXRmb3JtIGlzIEVGSSAxLjEwIG9yIFVFRkkgMi4wLCBzZWxlY3QgWSB0byBhZGQgc3VwcG9ydCBmb3IKKwkgIHVzaW5nIHRoZSBFRkkgZnJhbWVidWZmZXIgYXMgeW91ciBjb25zb2xlLgogCiBjb25maWcgRkJfTjQxMQogICAgICAgIHRyaXN0YXRlICJONDExIEFwb2xsby9IZWN1YmEgZGV2a2l0IHN1cHBvcnQiCkBAIC0xMTE4LDYgKzExMjYsNyBAQAogCXNlbGVjdCBGQl9DRkJfRklMTFJFQ1QKIAlzZWxlY3QgRkJfQ0ZCX0NPUFlBUkVBCiAJc2VsZWN0IEZCX0NGQl9JTUFHRUJMSVQKKwlzZWxlY3QgRkJfQk9PVF9WRVNBX1NVUFBPUlQKIAloZWxwCiAJICBUaGlzIGRyaXZlciBzdXBwb3J0cyB0aGUgb24tYm9hcmQgZ3JhcGhpY3MgYnVpbHQgaW4gdG8gdGhlIEludGVsCiAgICAgICAgICAgODMwTS84NDVHLzg1MkdNLzg1NUdNLzg2NUcvOTE1Ry85MTVHTS85NDVHLzk0NUdNLzk2NUcvOTY1R00gY2hpcHNldHMuCkBAIC0xNDcwLDYgKzE0NzksNyBAQAogCXNlbGVjdCBGQl9DRkJfRklMTFJFQ1QKIAlzZWxlY3QgRkJfQ0ZCX0NPUFlBUkVBCiAJc2VsZWN0IEZCX0NGQl9JTUFHRUJMSVQKKwlzZWxlY3QgRkJfQk9PVF9WRVNBX1NVUFBPUlQKIAloZWxwCiAJICBUaGlzIGlzIHRoZSBmcmFtZSBidWZmZXIgZGV2aWNlIGRyaXZlciBmb3IgdGhlIFNpUyAzMDAsIDMxNSwgMzMwCiAJICBhbmQgMzQwIHNlcmllcyBhcyB3ZWxsIGFzIFhHSSBWM1hULCBWNSwgVjgsIFo3IGdyYXBoaWNzIGNoaXBzZXRzLgpAQCAtMTQ5Miw2ICsxNTAyLDI0IEBACiAJICAoMzE1L0gvUFJPLCA1NXgsIDY1MCwgNjUxLCA3NDAsIDMzMCwgNjYxLCA3NDEsIDc2MCwgNzYxKSBhcyB3ZWxsCiAJICBhcyBYR0kgVjNYVCwgVjUsIFY4IGFuZCBaNy4KIAorY29uZmlnIEZCX1ZJQQorICAgICAgIHRyaXN0YXRlICJWSUEgVW5pQ2hyb21lIChQcm8pIGFuZCBDaHJvbWU5IGRpc3BsYXkgc3VwcG9ydCIKKyAgICAgICBkZXBlbmRzIG9uIEZCICYmIFBDSQorICAgICAgIHNlbGVjdCBGQl9DRkJfRklMTFJFQ1QKKyAgICAgICBzZWxlY3QgRkJfQ0ZCX0NPUFlBUkVBCisgICAgICAgc2VsZWN0IEZCX0NGQl9JTUFHRUJMSVQKKyAgICAgICBzZWxlY3QgRkJfU09GVF9DVVJTT1IKKyAgICAgICBzZWxlY3QgSTJDX0FMR09CSVQKKyAgICAgICBzZWxlY3QgSTJDCisgICAgICAgaGVscAorCSAgVGhpcyBpcyB0aGUgZnJhbWUgYnVmZmVyIGRldmljZSBkcml2ZXIgZm9yIEdyYXBoaWNzIGNoaXBzIG9mIFZJQQorCSAgVW5pQ2hyb21lIChQcm8pIEZhbWlseSAoQ0xFMjY2LFBNODAwL0NONDAwLFA0TTgwMENFL1A0TTgwMFByby8KKwkgIENONzAwL1ZOODAwLENYNzAwL1ZYNzAwLFA0TTg5MCkgYW5kIENocm9tZTkgRmFtaWx5IChLOE04OTAsQ044OTYKKyAJICAvUDRNOTAwLFZYODAwKQorCSAgU2F5IFkgaWYgeW91IGhhdmUgYSBWSUEgVW5pQ2hyb21lIGdyYXBoaWNzIGJvYXJkLgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCB2aWFmYi4KIGNvbmZpZyBGQl9ORU9NQUdJQwogCXRyaXN0YXRlICJOZW9NYWdpYyBkaXNwbGF5IHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBGQiAmJiBQQ0kKQEAgLTE1MjEsMjUgKzE1NDksMjUgQEAKIAkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBreXJvZmIuCiAKIGNvbmZpZyBGQl8zREZYCi0JdHJpc3RhdGUgIjNEZnggQmFuc2hlZS9Wb29kb28zIGRpc3BsYXkgc3VwcG9ydCIKKwl0cmlzdGF0ZSAiM0RmeCBCYW5zaGVlL1Zvb2RvbzMvVm9vZG9vNSBkaXNwbGF5IHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBGQiAmJiBQQ0kKIAlzZWxlY3QgRkJfQ0ZCX0lNQUdFQkxJVAogCXNlbGVjdCBGQl9DRkJfRklMTFJFQ1QKIAlzZWxlY3QgRkJfQ0ZCX0NPUFlBUkVBCiAJaGVscAotCSAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgZ3JhcGhpY3MgYm9hcmRzIHdpdGggdGhlIDNEZnggQmFuc2hlZS9Wb29kb28zCi0JICBjaGlwcy4gU2F5IFkgaWYgeW91IGhhdmUgc3VjaCBhIGdyYXBoaWNzIGJvYXJkLgorCSAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgZ3JhcGhpY3MgYm9hcmRzIHdpdGggdGhlIDNEZnggQmFuc2hlZSwKKwkgIFZvb2RvbzMgb3IgVlNBLTEwMCAoYWthIFZvb2RvbzQvNSkgY2hpcHMuIFNheSBZIGlmIHlvdSBoYXZlCisJICBzdWNoIGEgZ3JhcGhpY3MgYm9hcmQuCiAKIAkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQogCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHRkZnhmYi4KIAogY29uZmlnIEZCXzNERlhfQUNDRUwKLQlib29sICIzRGZ4IEJhbnNoZWUvVm9vZG9vMyBBY2NlbGVyYXRpb24gZnVuY3Rpb25zIChFWFBFUklNRU5UQUwpIgorCWJvb2wgIjNEZnggQWNjZWxlcmF0aW9uIGZ1bmN0aW9ucyAoRVhQRVJJTUVOVEFMKSIKIAlkZXBlbmRzIG9uIEZCXzNERlggJiYgRVhQRVJJTUVOVEFMCiAJLS0taGVscC0tLQotCVRoaXMgd2lsbCBjb21waWxlIHRoZSAzRGZ4IEJhbnNoZWUvVm9vZG9vMyBmcmFtZSBidWZmZXIgZGV2aWNlCi0Jd2l0aCBhY2NlbGVyYXRpb24gZnVuY3Rpb25zLgotCisJVGhpcyB3aWxsIGNvbXBpbGUgdGhlIDNEZnggQmFuc2hlZS9Wb29kb28zL1ZTQS0xMDAgZnJhbWUgYnVmZmVyCisJZGV2aWNlIGRyaXZlciB3aXRoIGFjY2VsZXJhdGlvbiBmdW5jdGlvbnMuCiAKIGNvbmZpZyBGQl9WT09ET08xCiAJdHJpc3RhdGUgIjNEZnggVm9vZG9vIEdyYXBoaWNzIChzc3QxKSBzdXBwb3J0IgpAQCAtMTYwNCwxNyArMTYzMiwxNiBAQAogCXNlbGVjdCBGQl9DRkJfQ09QWUFSRUEKIAlzZWxlY3QgRkJfQ0ZCX0lNQUdFQkxJVAogCS0tLWhlbHAtLS0KLQkgIFRoaXMgZHJpdmVyIGlzIHN1cHBvc2VkIHRvIHN1cHBvcnQgZ3JhcGhpY3MgYm9hcmRzIHdpdGggdGhlCi0JICBUcmlkZW50IEN5YmVyWFhYWC9JbWFnZS9DeWJlckJsYWRlIGNoaXBzIG1vc3RseSBmb3VuZCBpbiBsYXB0b3BzCisJICBUaGlzIGlzIHRoZSBmcmFtZSBidWZmZXIgZGV2aWNlIGRyaXZlciBmb3IgVHJpZGVudCBQQ0kvQUdQIGNoaXBzZXRzLgorCSAgU3VwcG9ydGVkIGNoaXBzZXQgZmFtaWxpZXMgYXJlIFRHVUkgOTQ0MC85NlhYLCAzREltYWdlLCBCbGFkZTNECisJICBhbmQgQmxhZGUgWFAuCisJICBUaGVyZSBhcmUgYWxzbyBpbnRlZ3JhdGVkIHZlcnNpb25zIG9mIHRoZXNlIGNoaXBzIGNhbGxlZCBDeWJlclhYWFgsCisJICBDeWJlckltYWdlIG9yIEN5YmVyQmxhZGUuIFRoZXNlIGNoaXBzIGFyZSBtb3N0bHkgZm91bmQgaW4gbGFwdG9wcwogCSAgYnV0IGFsc28gb24gc29tZSBtb3RoZXJib2FyZHMuIEZvciBtb3JlIGluZm9ybWF0aW9uLCByZWFkCiAJICA8ZmlsZTpEb2N1bWVudGF0aW9uL2ZiL3RyaWRlbnRmYi50eHQ+CiAKLQkgIEN5YmVyYmxhZGUvaTEgc3VwcG9ydCB3aWxsIGJlIHJlbW92ZWQgc29vbiwgdXNlIHRoZSBjeWJsYWZiIGRyaXZlcgotCSAgaW5zdGVhZC4KLQogCSAgU2F5IFkgaWYgeW91IGhhdmUgc3VjaCBhIGdyYXBoaWNzIGJvYXJkLgogCi0KIAkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQogCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHRyaWRlbnRmYi4KIApAQCAtMTg2OSw2ICsxODk2LDI4IEBACiAJLS0taGVscC0tLQogCSAgRnJhbWUgYnVmZmVyIGRyaXZlciBmb3IgdGhlIG9uLWNoaXAgU0gtTW9iaWxlIExDRCBjb250cm9sbGVyLgogCitjb25maWcgRkJfVE1JTworCXRyaXN0YXRlICJUb3NoaWJhIE1vYmlsZSBJTyBGcmFtZUJ1ZmZlciBzdXBwb3J0IgorCWRlcGVuZHMgb24gRkIgJiYgTUZEX0NPUkUKKwlzZWxlY3QgRkJfQ0ZCX0ZJTExSRUNUCisJc2VsZWN0IEZCX0NGQl9DT1BZQVJFQQorCXNlbGVjdCBGQl9DRkJfSU1BR0VCTElUCisJLS0taGVscC0tLQorCSAgRnJhbWUgYnVmZmVyIGRyaXZlciBmb3IgdGhlIFRvc2hpYmEgTW9iaWxlIElPIGludGVncmF0ZWQgYXMgZm91bmQKKwkgIG9uIHRoZSBTaGFycCBTTC02MDAwIHNlcmllcworCisJICBUaGlzIGRyaXZlciBpcyBhbHNvIGF2YWlsYWJsZSBhcyBhIG1vZHVsZSAoID0gY29kZSB3aGljaCBjYW4gYmUKKwkgIGluc2VydGVkIGFuZCByZW1vdmVkIGZyb20gdGhlIHJ1bm5pbmcga2VybmVsIHdoZW5ldmVyIHlvdSB3YW50KS4gVGhlCisJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgdG1pb2ZiLiBJZiB5b3Ugd2FudCB0byBjb21waWxlIGl0IGFzIGEgbW9kdWxlLAorCSAgc2F5IE0gaGVyZSBhbmQgcmVhZCA8ZmlsZTpEb2N1bWVudGF0aW9uL2tidWlsZC9tb2R1bGVzLnR4dD4uCisKKwkgIElmIHVuc3VyZSwgc2F5IE4uCisKK2NvbmZpZyBGQl9UTUlPX0FDQ0VMTAorCWJvb2wgInRtaW9mYiBhY2NlbGVyYXRpb24iCisJZGVwZW5kcyBvbiBGQl9UTUlPCisJZGVmYXVsdCB5CisKIGNvbmZpZyBGQl9TM0MyNDEwCiAJdHJpc3RhdGUgIlMzQzI0MTAgTENEIGZyYW1lYnVmZmVyIHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBGQiAmJiBBUkNIX1MzQzI0MTAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vTWFrZWZpbGUgYi9kcml2ZXJzL3ZpZGVvL01ha2VmaWxlCmluZGV4IGFkMDMzMGIuLjI0OGJkZGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vTWFrZWZpbGUKKysrIGIvZHJpdmVycy92aWRlby9NYWtlZmlsZQpAQCAtNDIsNiArNDIsNyBAQAogb2JqLSQoQ09ORklHX0ZCX0FUWTEyOCkJCSAgKz0gYXR5LyBtYWNtb2Rlcy5vCiBvYmotJChDT05GSUdfRkJfUkFERU9OKQkJICArPSBhdHkvCiBvYmotJChDT05GSUdfRkJfU0lTKQkJICArPSBzaXMvCitvYmotJChDT05GSUdfRkJfVklBKQkJICArPSB2aWEvCiBvYmotJChDT05GSUdfRkJfS1lSTykgICAgICAgICAgICAgKz0ga3lyby8KIG9iai0kKENPTkZJR19GQl9TQVZBR0UpCQkgICs9IHNhdmFnZS8KIG9iai0kKENPTkZJR19GQl9HRU9ERSkJCSAgKz0gZ2VvZGUvCkBAIC05Nyw2ICs5OCw3IEBACiBvYmotJChDT05GSUdfRkJfQVNJTElBTlQpCSAgKz0gYXNpbGlhbnRmYi5vCiBvYmotJChDT05GSUdfRkJfUFhBKQkJICArPSBweGFmYi5vCiBvYmotJChDT05GSUdfRkJfVzEwMCkJCSAgKz0gdzEwMGZiLm8KK29iai0kKENPTkZJR19GQl9UTUlPKQkJICArPSB0bWlvZmIubwogb2JqLSQoQ09ORklHX0ZCX0FVMTEwMCkJCSAgKz0gYXUxMTAwZmIubwogb2JqLSQoQ09ORklHX0ZCX0FVMTIwMCkJCSAgKz0gYXUxMjAwZmIubwogb2JqLSQoQ09ORklHX0ZCX1BNQUdfQUEpCSAgKz0gcG1hZy1hYS1mYi5vCkBAIC0xMjQsNyArMTI2LDYgQEAKICMgUGxhdGZvcm0gb3IgZmFsbGJhY2sgZHJpdmVycyBnbyBoZXJlCiBvYmotJChDT05GSUdfRkJfVVZFU0EpICAgICAgICAgICAgKz0gdXZlc2FmYi5vCiBvYmotJChDT05GSUdfRkJfVkVTQSkgICAgICAgICAgICAgKz0gdmVzYWZiLm8KLW9iai0kKENPTkZJR19GQl9JTUFDKSAgICAgICAgICAgICArPSBpbWFjZmIubwogb2JqLSQoQ09ORklHX0ZCX0VGSSkgICAgICAgICAgICAgICs9IGVmaWZiLm8KIG9iai0kKENPTkZJR19GQl9WR0ExNikgICAgICAgICAgICArPSB2Z2ExNmZiLm8KIG9iai0kKENPTkZJR19GQl9PRikgICAgICAgICAgICAgICArPSBvZmZiLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vYXRtZWxfbGNkZmIuYyBiL2RyaXZlcnMvdmlkZW8vYXRtZWxfbGNkZmIuYwppbmRleCBkMzhmZDUyLi5mOGQwYTU3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2F0bWVsX2xjZGZiLmMKKysrIGIvZHJpdmVycy92aWRlby9hdG1lbF9sY2RmYi5jCkBAIC0zNzIsNiArMzcyLDEzIEBACiAJdmFyLT50cmFuc3Aub2Zmc2V0ID0gdmFyLT50cmFuc3AubGVuZ3RoID0gMDsKIAl2YXItPnhvZmZzZXQgPSB2YXItPnlvZmZzZXQgPSAwOwogCisJaWYgKGluZm8tPmZpeC5zbWVtX2xlbikgeworCQl1bnNpZ25lZCBpbnQgc21lbV9sZW4gPSAodmFyLT54cmVzX3ZpcnR1YWwgKiB2YXItPnlyZXNfdmlydHVhbAorCQkJCQkgKiAoKHZhci0+Yml0c19wZXJfcGl4ZWwgKyA3KSAvIDgpKTsKKwkJaWYgKHNtZW1fbGVuID4gaW5mby0+Zml4LnNtZW1fbGVuKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJfQorCiAJLyogU2F0dXJhdGUgdmVydGljYWwgYW5kIGhvcml6b250YWwgdGltaW5ncyBhdCBtYXhpbXVtIHZhbHVlcyAqLwogCXZhci0+dnN5bmNfbGVuID0gbWluX3QodTMyLCB2YXItPnZzeW5jX2xlbiwKIAkJCShBVE1FTF9MQ0RDX1ZQVyA+PiBBVE1FTF9MQ0RDX1ZQV19PRkZTRVQpICsgMSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2F0eS9yYWRlb25fYWNjZWwuYyBiL2RyaXZlcnMvdmlkZW8vYXR5L3JhZGVvbl9hY2NlbC5jCmluZGV4IGFhOTVmODMuLjg3MThmNzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vYXR5L3JhZGVvbl9hY2NlbC5jCisrKyBiL2RyaXZlcnMvdmlkZW8vYXR5L3JhZGVvbl9hY2NlbC5jCkBAIC01LDYxICs1LDYxIEBACiAgKiAtLWR0ZQogICovCiAKLXN0YXRpYyB2b2lkIHJhZGVvbl9maXh1cF9vZmZzZXQoc3RydWN0IHJhZGVvbmZiX2luZm8gKnJpbmZvKQorI2RlZmluZSBGTFVTSF9DQUNIRV9XT1JLQVJPVU5ECTEKKwordm9pZCByYWRlb25fZmlmb191cGRhdGVfYW5kX3dhaXQoc3RydWN0IHJhZGVvbmZiX2luZm8gKnJpbmZvLCBpbnQgZW50cmllcykKIHsKLQl1MzIgbG9jYWxfYmFzZTsKKwlpbnQgaTsKIAotCS8qICoqKiBVZ2x5IHdvcmthcm91bmQgKioqICovCi0JLyoKLQkgKiBPbiBzb21lIHBsYXRmb3JtcywgdGhlIHZpZGVvIG1lbW9yeSBpcyBtYXBwZWQgYXQgMCBpbiByYWRlb24gY2hpcCBzcGFjZQotCSAqIChsaWtlIFBQQ3MpIGJ5IHRoZSBmaXJtd2FyZS4gWCB3aWxsIGFsd2F5cyBtb3ZlIGl0IHVwIHNvIHRoYXQgaXQncyBzZWVuCi0JICogYnkgdGhlIGNoaXAgdG8gYmUgYXQgdGhlIHNhbWUgYWRkcmVzcyBhcyB0aGUgUENJIEJBUi4KLQkgKiBUaGF0IG1lYW5zIHRoYXQgd2hlbiBzd2l0Y2hpbmcgYmFjayBmcm9tIFgsIHRoZXJlIGlzIGEgbWlzbWF0Y2ggYmV0d2VlbgotCSAqIHRoZSBvZmZzZXRzIHByb2dyYW1tZWQgaW50byB0aGUgZW5naW5lLiBUaGlzIG1lYW5zIHRoYXQgcG90ZW50aWFsbHksCi0JICogYWNjZWwgb3BlcmF0aW9ucyBkb25lIGJlZm9yZSByYWRlb25mYiBoYXMgYSBjaGFuY2UgdG8gcmUtaW5pdCB0aGUgZW5naW5lCi0JICogd2lsbCBoYXZlIGluY29ycmVjdCBvZmZzZXRzLCBhbmQgcG90ZW50aWFsbHkgdHJhc2ggc3lzdGVtIG1lbW9yeSAhCi0JICoKLQkgKiBUaGUgY29ycmVjdCBmaXggaXMgZm9yIGZiY29uIHRvIG5ldmVyIGNhbGwgYW55IGFjY2VsIG9wIGJlZm9yZSB0aGUgZW5naW5lCi0JICogaGFzIHByb3Blcmx5IGJlZW4gcmUtaW5pdGlhbGl6ZWQgKGJ5IGEgY2FsbCB0byBzZXRfdmFyKSwgYnV0IHRoaXMgaXMgYQotCSAqIGNvbXBsZXggZml4LiBUaGlzIHdvcmthcm91bmQgaW4gdGhlIG1lYW50aW1lLCBjYWxsZWQgYmVmb3JlIGV2ZXJ5IGFjY2VsCi0JICogb3BlcmF0aW9uLCBtYWtlcyBzdXJlIHRoZSBvZmZzZXRzIGFyZSBpbiBzeW5jLgotCSAqLworCWZvciAoaT0wOyBpPDIwMDAwMDA7IGkrKykgeworCQlyaW5mby0+Zmlmb19mcmVlID0gSU5SRUcoUkJCTV9TVEFUVVMpICYgMHg3ZjsKKwkJaWYgKHJpbmZvLT5maWZvX2ZyZWUgPj0gZW50cmllcykKKwkJCXJldHVybjsKKwkJdWRlbGF5KDEwKTsKKwl9CisJcHJpbnRrKEtFUk5fRVJSICJyYWRlb25mYjogRklGTyBUaW1lb3V0ICFcbiIpOworCS8qIFhYWCBUb2RvOiBhdHRlbXB0IHRvIHJlc2V0IHRoZSBlbmdpbmUgKi8KK30KIAotCXJhZGVvbl9maWZvX3dhaXQgKDEpOwotCWxvY2FsX2Jhc2UgPSBJTlJFRyhNQ19GQl9MT0NBVElPTikgPDwgMTY7Ci0JaWYgKGxvY2FsX2Jhc2UgPT0gcmluZm8tPmZiX2xvY2FsX2Jhc2UpCitzdGF0aWMgaW5saW5lIHZvaWQgcmFkZW9uX2ZpZm9fd2FpdChzdHJ1Y3QgcmFkZW9uZmJfaW5mbyAqcmluZm8sIGludCBlbnRyaWVzKQoreworCWlmIChlbnRyaWVzIDw9IHJpbmZvLT5maWZvX2ZyZWUpCisJCXJpbmZvLT5maWZvX2ZyZWUgLT0gZW50cmllczsKKwllbHNlCisJCXJhZGVvbl9maWZvX3VwZGF0ZV9hbmRfd2FpdChyaW5mbywgZW50cmllcyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCByYWRlb25mYl9zZXRfY3JlZyhzdHJ1Y3QgcmFkZW9uZmJfaW5mbyAqcmluZm8sIHUzMiByZWcsCisJCQkJICAgICB1MzIgKmNhY2hlLCB1MzIgbmV3X3ZhbCkKK3sKKwlpZiAobmV3X3ZhbCA9PSAqY2FjaGUpCiAJCXJldHVybjsKLQotCXJpbmZvLT5mYl9sb2NhbF9iYXNlID0gbG9jYWxfYmFzZTsKLQotCXJhZGVvbl9maWZvX3dhaXQgKDMpOwotCU9VVFJFRyhERUZBVUxUX1BJVENIX09GRlNFVCwgKHJpbmZvLT5waXRjaCA8PCAweDE2KSB8Ci0JCQkJICAgICAocmluZm8tPmZiX2xvY2FsX2Jhc2UgPj4gMTApKTsKLQlPVVRSRUcoRFNUX1BJVENIX09GRlNFVCwgKHJpbmZvLT5waXRjaCA8PCAweDE2KSB8IChyaW5mby0+ZmJfbG9jYWxfYmFzZSA+PiAxMCkpOwotCU9VVFJFRyhTUkNfUElUQ0hfT0ZGU0VULCAocmluZm8tPnBpdGNoIDw8IDB4MTYpIHwgKHJpbmZvLT5mYl9sb2NhbF9iYXNlID4+IDEwKSk7CisJKmNhY2hlID0gbmV3X3ZhbDsKKwlyYWRlb25fZmlmb193YWl0KHJpbmZvLCAxKTsKKwlPVVRSRUcocmVnLCBuZXdfdmFsKTsKIH0KIAogc3RhdGljIHZvaWQgcmFkZW9uZmJfcHJpbV9maWxscmVjdChzdHJ1Y3QgcmFkZW9uZmJfaW5mbyAqcmluZm8sIAogCQkJCSAgIGNvbnN0IHN0cnVjdCBmYl9maWxscmVjdCAqcmVnaW9uKQogewotCXJhZGVvbl9maWZvX3dhaXQoNCk7ICAKLSAgCi0JT1VUUkVHKERQX0dVSV9NQVNURVJfQ05UTCwgIAotCQlyaW5mby0+ZHBfZ3VpX21hc3Rlcl9jbnRsICAvKiBjb250YWlucywgbGlrZSBHTUNfRFNUXzMyQlBQICovCi0gICAgICAgICAgICAgICAgfCBHTUNfQlJVU0hfU09MSURfQ09MT1IKLSAgICAgICAgICAgICAgICB8IFJPUDNfUCk7Ci0JaWYgKHJhZGVvbl9nZXRfZHN0YnBwKHJpbmZvLT5kZXB0aCkgIT0gRFNUXzhCUFApCi0JCU9VVFJFRyhEUF9CUlVTSF9GUkdEX0NMUiwgcmluZm8tPnBzZXVkb19wYWxldHRlW3JlZ2lvbi0+Y29sb3JdKTsKLQllbHNlCi0JCU9VVFJFRyhEUF9CUlVTSF9GUkdEX0NMUiwgcmVnaW9uLT5jb2xvcik7Ci0JT1VUUkVHKERQX1dSSVRFX01TSywgMHhmZmZmZmZmZik7Ci0JT1VUUkVHKERQX0NOVEwsIChEU1RfWF9MRUZUX1RPX1JJR0hUIHwgRFNUX1lfVE9QX1RPX0JPVFRPTSkpOworCXJhZGVvbmZiX3NldF9jcmVnKHJpbmZvLCBEUF9HVUlfTUFTVEVSX0NOVEwsICZyaW5mby0+ZHBfZ3VpX21jX2NhY2hlLAorCQkJICByaW5mby0+ZHBfZ3VpX21jX2Jhc2UgfCBHTUNfQlJVU0hfU09MSURfQ09MT1IgfCBST1AzX1ApOworCXJhZGVvbmZiX3NldF9jcmVnKHJpbmZvLCBEUF9DTlRMLCAmcmluZm8tPmRwX2NudGxfY2FjaGUsCisJCQkgIERTVF9YX0xFRlRfVE9fUklHSFQgfCBEU1RfWV9UT1BfVE9fQk9UVE9NKTsKKwlyYWRlb25mYl9zZXRfY3JlZyhyaW5mbywgRFBfQlJVU0hfRlJHRF9DTFIsICZyaW5mby0+ZHBfYnJ1c2hfZmdfY2FjaGUsCisJCQkgIHJlZ2lvbi0+Y29sb3IpOwogCi0JcmFkZW9uX2ZpZm9fd2FpdCgyKTsKKwkvKiBFbnN1cmUgdGhlIGRzdCBjYWNoZSBpcyBmbHVzaGVkIGFuZCB0aGUgZW5naW5lIGlkbGUgYmVmb3JlCisJICogaXNzdWluZyB0aGUgb3BlcmF0aW9uLgorCSAqCisJICogVGhpcyB3b3JrcyBhcm91bmQgZW5naW5lIGxvY2t1cHMgb24gc29tZSBjYXJkcworCSAqLworI2lmIEZMVVNIX0NBQ0hFX1dPUktBUk9VTkQKKwlyYWRlb25fZmlmb193YWl0KHJpbmZvLCAyKTsKIAlPVVRSRUcoRFNUQ0FDSEVfQ1RMU1RBVCwgUkIyRF9EQ19GTFVTSF9BTEwpOwogCU9VVFJFRyhXQUlUX1VOVElMLCAoV0FJVF8yRF9JRExFQ0xFQU4gfCBXQUlUX0RNQV9HVUlfSURMRSkpOwotCi0JcmFkZW9uX2ZpZm9fd2FpdCgyKTsgIAorI2VuZGlmCisJcmFkZW9uX2ZpZm9fd2FpdChyaW5mbywgMik7CiAJT1VUUkVHKERTVF9ZX1gsIChyZWdpb24tPmR5IDw8IDE2KSB8IHJlZ2lvbi0+ZHgpOwogCU9VVFJFRyhEU1RfV0lEVEhfSEVJR0hULCAocmVnaW9uLT53aWR0aCA8PCAxNikgfCByZWdpb24tPmhlaWdodCk7CiB9CkBAIC03MCwxNSArNzAsMTQgQEAKIAlzdHJ1Y3QgZmJfZmlsbHJlY3QgbW9kZGVkOwogCWludCB2eHJlcywgdnlyZXM7CiAgIAotCWlmIChpbmZvLT5zdGF0ZSAhPSBGQklORk9fU1RBVEVfUlVOTklORykKKwlXQVJOX09OKHJpbmZvLT5nZnhfbW9kZSk7CisJaWYgKGluZm8tPnN0YXRlICE9IEZCSU5GT19TVEFURV9SVU5OSU5HIHx8IHJpbmZvLT5nZnhfbW9kZSkKIAkJcmV0dXJuOwogCWlmIChpbmZvLT5mbGFncyAmIEZCSU5GT19IV0FDQ0VMX0RJU0FCTEVEKSB7CiAJCWNmYl9maWxscmVjdChpbmZvLCByZWdpb24pOwogCQlyZXR1cm47CiAJfQogCi0JcmFkZW9uX2ZpeHVwX29mZnNldChyaW5mbyk7Ci0KIAl2eHJlcyA9IGluZm8tPnZhci54cmVzX3ZpcnR1YWw7CiAJdnlyZXMgPSBpbmZvLT52YXIueXJlc192aXJ0dWFsOwogCkBAIC05MSw2ICs5MCwxMCBAQAogCWlmKG1vZGRlZC5keCArIG1vZGRlZC53aWR0aCAgPiB2eHJlcykgbW9kZGVkLndpZHRoICA9IHZ4cmVzIC0gbW9kZGVkLmR4OwogCWlmKG1vZGRlZC5keSArIG1vZGRlZC5oZWlnaHQgPiB2eXJlcykgbW9kZGVkLmhlaWdodCA9IHZ5cmVzIC0gbW9kZGVkLmR5OwogCisJaWYgKGluZm8tPmZpeC52aXN1YWwgPT0gRkJfVklTVUFMX1RSVUVDT0xPUiB8fAorCSAgICBpbmZvLT5maXgudmlzdWFsID09IEZCX1ZJU1VBTF9ESVJFQ1RDT0xPUiApCisJCW1vZGRlZC5jb2xvciA9ICgodTMyICopIChpbmZvLT5wc2V1ZG9fcGFsZXR0ZSkpW3JlZ2lvbi0+Y29sb3JdOworCiAJcmFkZW9uZmJfcHJpbV9maWxscmVjdChyaW5mbywgJm1vZGRlZCk7CiB9CiAKQEAgLTEwOSwyMiArMTEyLDIyIEBACiAJaWYgKCB4ZGlyIDwgMCApIHsgc3ggKz0gdy0xOyBkeCArPSB3LTE7IH0KIAlpZiAoIHlkaXIgPCAwICkgeyBzeSArPSBoLTE7IGR5ICs9IGgtMTsgfQogCi0JcmFkZW9uX2ZpZm9fd2FpdCgzKTsKLQlPVVRSRUcoRFBfR1VJX01BU1RFUl9DTlRMLAotCQlyaW5mby0+ZHBfZ3VpX21hc3Rlcl9jbnRsIC8qIGkuZS4gR01DX0RTVF8zMkJQUCAqLwotCQl8IEdNQ19CUlVTSF9OT05FCi0JCXwgR01DX1NSQ19EU1RDT0xPUgotCQl8IFJPUDNfUyAKLQkJfCBEUF9TUkNfU09VUkNFX01FTU9SWSApOwotCU9VVFJFRyhEUF9XUklURV9NU0ssIDB4ZmZmZmZmZmYpOwotCU9VVFJFRyhEUF9DTlRMLCAoeGRpcj49MCA/IERTVF9YX0xFRlRfVE9fUklHSFQgOiAwKQotCQkJfCAoeWRpcj49MCA/IERTVF9ZX1RPUF9UT19CT1RUT00gOiAwKSk7CisJcmFkZW9uZmJfc2V0X2NyZWcocmluZm8sIERQX0dVSV9NQVNURVJfQ05UTCwgJnJpbmZvLT5kcF9ndWlfbWNfY2FjaGUsCisJCQkgIHJpbmZvLT5kcF9ndWlfbWNfYmFzZSB8CisJCQkgIEdNQ19CUlVTSF9OT05FIHwKKwkJCSAgR01DX1NSQ19EQVRBVFlQRV9DT0xPUiB8CisJCQkgIFJPUDNfUyB8CisJCQkgIERQX1NSQ19TT1VSQ0VfTUVNT1JZKTsKKwlyYWRlb25mYl9zZXRfY3JlZyhyaW5mbywgRFBfQ05UTCwgJnJpbmZvLT5kcF9jbnRsX2NhY2hlLAorCQkJICAoeGRpcj49MCA/IERTVF9YX0xFRlRfVE9fUklHSFQgOiAwKSB8CisJCQkgICh5ZGlyPj0wID8gRFNUX1lfVE9QX1RPX0JPVFRPTSA6IDApKTsKIAotCXJhZGVvbl9maWZvX3dhaXQoMik7CisjaWYgRkxVU0hfQ0FDSEVfV09SS0FST1VORAorCXJhZGVvbl9maWZvX3dhaXQocmluZm8sIDIpOwogCU9VVFJFRyhEU1RDQUNIRV9DVExTVEFULCBSQjJEX0RDX0ZMVVNIX0FMTCk7CiAJT1VUUkVHKFdBSVRfVU5USUwsIChXQUlUXzJEX0lETEVDTEVBTiB8IFdBSVRfRE1BX0dVSV9JRExFKSk7Ci0KLQlyYWRlb25fZmlmb193YWl0KDMpOworI2VuZGlmCisJcmFkZW9uX2ZpZm9fd2FpdChyaW5mbywgMyk7CiAJT1VUUkVHKFNSQ19ZX1gsIChzeSA8PCAxNikgfCBzeCk7CiAJT1VUUkVHKERTVF9ZX1gsIChkeSA8PCAxNikgfCBkeCk7CiAJT1VUUkVHKERTVF9IRUlHSFRfV0lEVEgsIChoIDw8IDE2KSB8IHcpOwpAQCAtMTQzLDE1ICsxNDYsMTQgQEAKIAltb2RkZWQud2lkdGggID0gYXJlYS0+d2lkdGg7CiAJbW9kZGVkLmhlaWdodCA9IGFyZWEtPmhlaWdodDsKICAgCi0JaWYgKGluZm8tPnN0YXRlICE9IEZCSU5GT19TVEFURV9SVU5OSU5HKQorCVdBUk5fT04ocmluZm8tPmdmeF9tb2RlKTsKKwlpZiAoaW5mby0+c3RhdGUgIT0gRkJJTkZPX1NUQVRFX1JVTk5JTkcgfHwgcmluZm8tPmdmeF9tb2RlKQogCQlyZXR1cm47CiAJaWYgKGluZm8tPmZsYWdzICYgRkJJTkZPX0hXQUNDRUxfRElTQUJMRUQpIHsKIAkJY2ZiX2NvcHlhcmVhKGluZm8sIGFyZWEpOwogCQlyZXR1cm47CiAJfQogCi0JcmFkZW9uX2ZpeHVwX29mZnNldChyaW5mbyk7Ci0KIAl2eHJlcyA9IGluZm8tPnZhci54cmVzX3ZpcnR1YWw7CiAJdnlyZXMgPSBpbmZvLT52YXIueXJlc192aXJ0dWFsOwogCkBAIC0xNjgsMTMgKzE3MCwxMTIgQEAKIAlyYWRlb25mYl9wcmltX2NvcHlhcmVhKHJpbmZvLCAmbW9kZGVkKTsKIH0KIAorc3RhdGljIHZvaWQgcmFkZW9uZmJfcHJpbV9pbWFnZWJsaXQoc3RydWN0IHJhZGVvbmZiX2luZm8gKnJpbmZvLAorCQkJCSAgICBjb25zdCBzdHJ1Y3QgZmJfaW1hZ2UgKmltYWdlLAorCQkJCSAgICB1MzIgZmcsIHUzMiBiZykKK3sKKwl1bnNpZ25lZCBpbnQgc3JjX2J5dGVzLCBkd29yZHM7CisJdTMyICpiaXRzOworCisJcmFkZW9uZmJfc2V0X2NyZWcocmluZm8sIERQX0dVSV9NQVNURVJfQ05UTCwgJnJpbmZvLT5kcF9ndWlfbWNfY2FjaGUsCisJCQkgIHJpbmZvLT5kcF9ndWlfbWNfYmFzZSB8CisJCQkgIEdNQ19CUlVTSF9OT05FIHwKKwkJCSAgR01DX1NSQ19EQVRBVFlQRV9NT05PX0ZHX0JHIHwKKwkJCSAgUk9QM19TIHwKKwkJCSAgR01DX0JZVEVfT1JERVJfTVNCX1RPX0xTQiB8CisJCQkgIERQX1NSQ19TT1VSQ0VfSE9TVF9EQVRBKTsKKwlyYWRlb25mYl9zZXRfY3JlZyhyaW5mbywgRFBfQ05UTCwgJnJpbmZvLT5kcF9jbnRsX2NhY2hlLAorCQkJICBEU1RfWF9MRUZUX1RPX1JJR0hUIHwgRFNUX1lfVE9QX1RPX0JPVFRPTSk7CisJcmFkZW9uZmJfc2V0X2NyZWcocmluZm8sIERQX1NSQ19GUkdEX0NMUiwgJnJpbmZvLT5kcF9zcmNfZmdfY2FjaGUsIGZnKTsKKwlyYWRlb25mYl9zZXRfY3JlZyhyaW5mbywgRFBfU1JDX0JLR0RfQ0xSLCAmcmluZm8tPmRwX3NyY19iZ19jYWNoZSwgYmcpOworCisJcmFkZW9uX2ZpZm9fd2FpdChyaW5mbywgMSk7CisJT1VUUkVHKERTVF9ZX1gsIChpbWFnZS0+ZHkgPDwgMTYpIHwgaW1hZ2UtPmR4KTsKKworCS8qIEVuc3VyZSB0aGUgZHN0IGNhY2hlIGlzIGZsdXNoZWQgYW5kIHRoZSBlbmdpbmUgaWRsZSBiZWZvcmUKKwkgKiBpc3N1aW5nIHRoZSBvcGVyYXRpb24uCisJICoKKwkgKiBUaGlzIHdvcmtzIGFyb3VuZCBlbmdpbmUgbG9ja3VwcyBvbiBzb21lIGNhcmRzCisJICovCisjaWYgRkxVU0hfQ0FDSEVfV09SS0FST1VORAorCXJhZGVvbl9maWZvX3dhaXQocmluZm8sIDIpOworCU9VVFJFRyhEU1RDQUNIRV9DVExTVEFULCBSQjJEX0RDX0ZMVVNIX0FMTCk7CisJT1VUUkVHKFdBSVRfVU5USUwsIChXQUlUXzJEX0lETEVDTEVBTiB8IFdBSVRfRE1BX0dVSV9JRExFKSk7CisjZW5kaWYKKworCS8qIFggaGVyZSBwYWRzIHdpZHRoIHRvIGEgbXVsdGlwbGUgb2YgMzIgYW5kIHVzZXMgdGhlIGNsaXBwZXIgdG8KKwkgKiBhZGp1c3QgdGhlIHJlc3VsdC4gSXMgdGhhdCByZWFsbHkgbmVjZXNzYXJ5ID8gVGhpbmdzIHNlZW0gdG8KKwkgKiB3b3JrIG9rIGZvciBtZSB3aXRob3V0IHRoYXQgYW5kIHRoZSBkb2NvIGRvZXNuJ3Qgc2VlbSB0byBpbXBseQorCSAqIHRoZXJlIGlzIHN1Y2ggYSByZXN0cmljdGlvbi4KKwkgKi8KKwlPVVRSRUcoRFNUX1dJRFRIX0hFSUdIVCwgKGltYWdlLT53aWR0aCA8PCAxNikgfCBpbWFnZS0+aGVpZ2h0KTsKKworCXNyY19ieXRlcyA9ICgoKGltYWdlLT53aWR0aCAqIGltYWdlLT5kZXB0aCkgKyA3KSAvIDgpICogaW1hZ2UtPmhlaWdodDsKKwlkd29yZHMgPSAoc3JjX2J5dGVzICsgMykgLyA0OworCWJpdHMgPSAodTMyKikoaW1hZ2UtPmRhdGEpOworCisJd2hpbGUoZHdvcmRzID49IDgpIHsKKwkJcmFkZW9uX2ZpZm9fd2FpdChyaW5mbywgOCk7CisjaWYgQklUU19QRVJfTE9ORyA9PSA2NAorCQlfX3Jhd193cml0ZXEoKigodTY0ICopKGJpdHMpKSwgcmluZm8tPm1taW9fYmFzZSArIEhPU1RfREFUQTApOworCQlfX3Jhd193cml0ZXEoKigodTY0ICopKGJpdHMrMikpLCByaW5mby0+bW1pb19iYXNlICsgSE9TVF9EQVRBMik7CisJCV9fcmF3X3dyaXRlcSgqKCh1NjQgKikoYml0cys0KSksIHJpbmZvLT5tbWlvX2Jhc2UgKyBIT1NUX0RBVEE0KTsKKwkJX19yYXdfd3JpdGVxKCooKHU2NCAqKShiaXRzKzYpKSwgcmluZm8tPm1taW9fYmFzZSArIEhPU1RfREFUQTYpOworCQliaXRzICs9IDg7CisjZWxzZQorCQlfX3Jhd193cml0ZWwoKihiaXRzKyspLCByaW5mby0+bW1pb19iYXNlICsgSE9TVF9EQVRBMCk7CisJCV9fcmF3X3dyaXRlbCgqKGJpdHMrKyksIHJpbmZvLT5tbWlvX2Jhc2UgKyBIT1NUX0RBVEExKTsKKwkJX19yYXdfd3JpdGVsKCooYml0cysrKSwgcmluZm8tPm1taW9fYmFzZSArIEhPU1RfREFUQTIpOworCQlfX3Jhd193cml0ZWwoKihiaXRzKyspLCByaW5mby0+bW1pb19iYXNlICsgSE9TVF9EQVRBMyk7CisJCV9fcmF3X3dyaXRlbCgqKGJpdHMrKyksIHJpbmZvLT5tbWlvX2Jhc2UgKyBIT1NUX0RBVEE0KTsKKwkJX19yYXdfd3JpdGVsKCooYml0cysrKSwgcmluZm8tPm1taW9fYmFzZSArIEhPU1RfREFUQTUpOworCQlfX3Jhd193cml0ZWwoKihiaXRzKyspLCByaW5mby0+bW1pb19iYXNlICsgSE9TVF9EQVRBNik7CisJCV9fcmF3X3dyaXRlbCgqKGJpdHMrKyksIHJpbmZvLT5tbWlvX2Jhc2UgKyBIT1NUX0RBVEE3KTsKKyNlbmRpZgorCQlkd29yZHMgLT0gODsKKwl9CisJd2hpbGUoZHdvcmRzLS0pIHsKKwkJcmFkZW9uX2ZpZm9fd2FpdChyaW5mbywgMSk7CisJCV9fcmF3X3dyaXRlbCgqKGJpdHMrKyksIHJpbmZvLT5tbWlvX2Jhc2UgKyBIT1NUX0RBVEEwKTsKKwl9Cit9CisKIHZvaWQgcmFkZW9uZmJfaW1hZ2VibGl0KHN0cnVjdCBmYl9pbmZvICppbmZvLCBjb25zdCBzdHJ1Y3QgZmJfaW1hZ2UgKmltYWdlKQogewogCXN0cnVjdCByYWRlb25mYl9pbmZvICpyaW5mbyA9IGluZm8tPnBhcjsKKwl1MzIgZmcsIGJnOwogCi0JaWYgKGluZm8tPnN0YXRlICE9IEZCSU5GT19TVEFURV9SVU5OSU5HKQorCVdBUk5fT04ocmluZm8tPmdmeF9tb2RlKTsKKwlpZiAoaW5mby0+c3RhdGUgIT0gRkJJTkZPX1NUQVRFX1JVTk5JTkcgfHwgcmluZm8tPmdmeF9tb2RlKQogCQlyZXR1cm47Ci0JcmFkZW9uX2VuZ2luZV9pZGxlKCk7CisKKwlpZiAoIWltYWdlLT53aWR0aCB8fCAhaW1hZ2UtPmhlaWdodCkKKwkJcmV0dXJuOworCisJLyogV2Ugb25seSBkbyAxIGJwcCBjb2xvciBleHBhbnNpb24gZm9yIG5vdyAqLworCWlmIChpbmZvLT5mbGFncyAmIEZCSU5GT19IV0FDQ0VMX0RJU0FCTEVEIHx8IGltYWdlLT5kZXB0aCAhPSAxKQorCQlnb3RvIGZhbGxiYWNrOworCisJLyogRmFsbGJhY2sgaWYgcnVubmluZyBvdXQgb2YgdGhlIHNjcmVlbi4gV2UgbWF5IGRvIGNsaXBwaW5nCisJICogaW4gdGhlIGZ1dHVyZSAqLworCWlmICgoaW1hZ2UtPmR4ICsgaW1hZ2UtPndpZHRoKSA+IGluZm8tPnZhci54cmVzX3ZpcnR1YWwgfHwKKwkgICAgKGltYWdlLT5keSArIGltYWdlLT5oZWlnaHQpID4gaW5mby0+dmFyLnlyZXNfdmlydHVhbCkKKwkJZ290byBmYWxsYmFjazsKKworCWlmIChpbmZvLT5maXgudmlzdWFsID09IEZCX1ZJU1VBTF9UUlVFQ09MT1IgfHwKKwkgICAgaW5mby0+Zml4LnZpc3VhbCA9PSBGQl9WSVNVQUxfRElSRUNUQ09MT1IpIHsKKwkJZmcgPSAoKHUzMiopKGluZm8tPnBzZXVkb19wYWxldHRlKSlbaW1hZ2UtPmZnX2NvbG9yXTsKKwkJYmcgPSAoKHUzMiopKGluZm8tPnBzZXVkb19wYWxldHRlKSlbaW1hZ2UtPmJnX2NvbG9yXTsKKwl9IGVsc2UgeworCQlmZyA9IGltYWdlLT5mZ19jb2xvcjsKKwkJYmcgPSBpbWFnZS0+YmdfY29sb3I7CisJfQorCisJcmFkZW9uZmJfcHJpbV9pbWFnZWJsaXQocmluZm8sIGltYWdlLCBmZywgYmcpOworCXJldHVybjsKKworIGZhbGxiYWNrOgorCXJhZGVvbl9lbmdpbmVfaWRsZShyaW5mbyk7CiAKIAljZmJfaW1hZ2VibGl0KGluZm8sIGltYWdlKTsKIH0KQEAgLTE4NSw3ICsyODYsOCBAQAogCiAJaWYgKGluZm8tPnN0YXRlICE9IEZCSU5GT19TVEFURV9SVU5OSU5HKQogCQlyZXR1cm4gMDsKLQlyYWRlb25fZW5naW5lX2lkbGUoKTsKKworCXJhZGVvbl9lbmdpbmVfaWRsZShyaW5mbyk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTIxMSw5ICszMTMsNyBAQAogCWhvc3RfcGF0aF9jbnRsID0gSU5SRUcoSE9TVF9QQVRIX0NOVEwpOwogCXJiYm1fc29mdF9yZXNldCA9IElOUkVHKFJCQk1fU09GVF9SRVNFVCk7CiAKLQlpZiAocmluZm8tPmZhbWlseSA9PSBDSElQX0ZBTUlMWV9SMzAwIHx8Ci0JICAgIHJpbmZvLT5mYW1pbHkgPT0gQ0hJUF9GQU1JTFlfUjM1MCB8fAotCSAgICByaW5mby0+ZmFtaWx5ID09IENISVBfRkFNSUxZX1JWMzUwKSB7CisJaWYgKElTX1IzMDBfVkFSSUFOVChyaW5mbykpIHsKIAkJdTMyIHRtcDsKIAogCQlPVVRSRUcoUkJCTV9TT0ZUX1JFU0VULCAocmJibV9zb2Z0X3Jlc2V0IHwKQEAgLTI0OSw5ICszNDksNyBAQAogCUlOUkVHKEhPU1RfUEFUSF9DTlRMKTsKIAlPVVRSRUcoSE9TVF9QQVRIX0NOVEwsIGhvc3RfcGF0aF9jbnRsKTsKIAotCWlmIChyaW5mby0+ZmFtaWx5ICE9IENISVBfRkFNSUxZX1IzMDAgJiYKLQkgICAgcmluZm8tPmZhbWlseSAhPSBDSElQX0ZBTUlMWV9SMzUwICYmCi0JICAgIHJpbmZvLT5mYW1pbHkgIT0gQ0hJUF9GQU1JTFlfUlYzNTApCisJaWYgKCFJU19SMzAwX1ZBUklBTlQocmluZm8pKQogCQlPVVRSRUcoUkJCTV9TT0ZUX1JFU0VULCByYmJtX3NvZnRfcmVzZXQpOwogCiAJT1VUUkVHKENMT0NLX0NOVExfSU5ERVgsIGNsb2NrX2NudGxfaW5kZXgpOwpAQCAtMjY1LDE1ICszNjMsMjQgQEAKIAkvKiBkaXNhYmxlIDNEIGVuZ2luZSAqLwogCU9VVFJFRyhSQjNEX0NOVEwsIDApOwogCisJcmluZm8tPmZpZm9fZnJlZSA9IDA7CiAJcmFkZW9uZmJfZW5naW5lX3Jlc2V0KHJpbmZvKTsKIAotCXJhZGVvbl9maWZvX3dhaXQgKDEpOwotCWlmICgocmluZm8tPmZhbWlseSAhPSBDSElQX0ZBTUlMWV9SMzAwKSAmJgotCSAgICAocmluZm8tPmZhbWlseSAhPSBDSElQX0ZBTUlMWV9SMzUwKSAmJgotCSAgICAocmluZm8tPmZhbWlseSAhPSBDSElQX0ZBTUlMWV9SVjM1MCkpCisJcmFkZW9uX2ZpZm9fd2FpdChyaW5mbywgMSk7CisJaWYgKElTX1IzMDBfVkFSSUFOVChyaW5mbykpIHsKKwkJT1VUUkVHKFJCMkRfRFNUQ0FDSEVfTU9ERSwgSU5SRUcoUkIyRF9EU1RDQUNIRV9NT0RFKSB8CisJCSAgICAgICBSQjJEX0RDX0FVVE9GTFVTSF9FTkFCTEUgfAorCQkgICAgICAgUkIyRF9EQ19EQ19ESVNBQkxFX0lHTk9SRV9QRSk7CisJfSBlbHNlIHsKKwkJLyogVGhpcyBuZWVkcyB0byBiZSBkb3VibGUgY2hlY2tlZCB3aXRoIEFUSS4gTGF0ZXN0IFggZHJpdmVyCisJCSAqIGNvbXBsZXRlbHkgImZvcmdldHMiIHRvIHNldCB0aGlzIHJlZ2lzdGVyIG9uIDwgcjN4eCwgYW5kCisJCSAqIHdlIHVzZWQgdG8ganVzdCB3cml0ZSAwIHRoZXJlLi4uIEknbGwga2VlcCB0aGUgMCBhbmQgdXBkYXRlCisJCSAqIHRoYXQgd2hlbiB3ZSBoYXZlIHNvcnRlZCB0aGluZ3Mgb3V0IG9uIFggc2lkZS4KKwkJICovCiAJCU9VVFJFRyhSQjJEX0RTVENBQ0hFX01PREUsIDApOworCX0KIAotCXJhZGVvbl9maWZvX3dhaXQgKDMpOworCXJhZGVvbl9maWZvX3dhaXQocmluZm8sIDMpOwogCS8qIFdlIHJlLXJlYWQgTUNfRkJfTE9DQVRJT04gZnJvbSBjYXJkIGFzIGl0IGNhbiBoYXZlIGJlZW4KIAkgKiBtb2RpZmllZCBieSBYRnJlZSBkcml2ZXJzIChvdWNoICEpCiAJICovCkBAIC0yODQsNDEgKzM5MSw1NyBAQAogCU9VVFJFRyhEU1RfUElUQ0hfT0ZGU0VULCAocmluZm8tPnBpdGNoIDw8IDB4MTYpIHwgKHJpbmZvLT5mYl9sb2NhbF9iYXNlID4+IDEwKSk7CiAJT1VUUkVHKFNSQ19QSVRDSF9PRkZTRVQsIChyaW5mby0+cGl0Y2ggPDwgMHgxNikgfCAocmluZm8tPmZiX2xvY2FsX2Jhc2UgPj4gMTApKTsKIAotCXJhZGVvbl9maWZvX3dhaXQgKDEpOwotI2lmIGRlZmluZWQoX19CSUdfRU5ESUFOKQorCXJhZGVvbl9maWZvX3dhaXQocmluZm8sIDEpOworI2lmZGVmIF9fQklHX0VORElBTgogCU9VVFJFR1AoRFBfREFUQVRZUEUsIEhPU1RfQklHX0VORElBTl9FTiwgfkhPU1RfQklHX0VORElBTl9FTik7CiAjZWxzZQogCU9VVFJFR1AoRFBfREFUQVRZUEUsIDAsIH5IT1NUX0JJR19FTkRJQU5fRU4pOwogI2VuZGlmCi0JcmFkZW9uX2ZpZm9fd2FpdCAoMik7CisJcmFkZW9uX2ZpZm9fd2FpdChyaW5mbywgMik7CiAJT1VUUkVHKERFRkFVTFRfU0NfVE9QX0xFRlQsIDApOwogCU9VVFJFRyhERUZBVUxUX1NDX0JPVFRPTV9SSUdIVCwgKERFRkFVTFRfU0NfUklHSFRfTUFYIHwKIAkJCQkJIERFRkFVTFRfU0NfQk9UVE9NX01BWCkpOwogCisJLyogc2V0IGRlZmF1bHQgRFBfR1VJX01BU1RFUl9DTlRMICovCiAJdGVtcCA9IHJhZGVvbl9nZXRfZHN0YnBwKHJpbmZvLT5kZXB0aCk7Ci0JcmluZm8tPmRwX2d1aV9tYXN0ZXJfY250bCA9ICgodGVtcCA8PCA4KSB8IEdNQ19DTFJfQ01QX0NOVExfRElTKTsKKwlyaW5mby0+ZHBfZ3VpX21jX2Jhc2UgPSAoKHRlbXAgPDwgOCkgfCBHTUNfQ0xSX0NNUF9DTlRMX0RJUyk7CiAKLQlyYWRlb25fZmlmb193YWl0ICgxKTsKLQlPVVRSRUcoRFBfR1VJX01BU1RFUl9DTlRMLCAocmluZm8tPmRwX2d1aV9tYXN0ZXJfY250bCB8Ci0JCQkJICAgIEdNQ19CUlVTSF9TT0xJRF9DT0xPUiB8Ci0JCQkJICAgIEdNQ19TUkNfREFUQVRZUEVfQ09MT1IpKTsKKwlyaW5mby0+ZHBfZ3VpX21jX2NhY2hlID0gcmluZm8tPmRwX2d1aV9tY19iYXNlIHwKKwkJR01DX0JSVVNIX1NPTElEX0NPTE9SIHwKKwkJR01DX1NSQ19EQVRBVFlQRV9DT0xPUjsKKwlyYWRlb25fZmlmb193YWl0KHJpbmZvLCAxKTsKKwlPVVRSRUcoRFBfR1VJX01BU1RFUl9DTlRMLCByaW5mby0+ZHBfZ3VpX21jX2NhY2hlKTsKIAotCXJhZGVvbl9maWZvX3dhaXQgKDcpOwogCiAJLyogY2xlYXIgbGluZSBkcmF3aW5nIHJlZ3MgKi8KKwlyYWRlb25fZmlmb193YWl0KHJpbmZvLCAyKTsKIAlPVVRSRUcoRFNUX0xJTkVfU1RBUlQsIDApOwogCU9VVFJFRyhEU1RfTElORV9FTkQsIDApOwogCi0JLyogc2V0IGJydXNoIGNvbG9yIHJlZ3MgKi8KLQlPVVRSRUcoRFBfQlJVU0hfRlJHRF9DTFIsIDB4ZmZmZmZmZmYpOwotCU9VVFJFRyhEUF9CUlVTSF9CS0dEX0NMUiwgMHgwMDAwMDAwMCk7CisJLyogc2V0IGJydXNoIGFuZCBzb3VyY2UgY29sb3IgcmVncyAqLworCXJpbmZvLT5kcF9icnVzaF9mZ19jYWNoZSA9IDB4ZmZmZmZmZmY7CisJcmluZm8tPmRwX2JydXNoX2JnX2NhY2hlID0gMHgwMDAwMDAwMDsKKwlyaW5mby0+ZHBfc3JjX2ZnX2NhY2hlID0gMHhmZmZmZmZmZjsKKwlyaW5mby0+ZHBfc3JjX2JnX2NhY2hlID0gMHgwMDAwMDAwMDsKKwlyYWRlb25fZmlmb193YWl0KHJpbmZvLCA0KTsKKwlPVVRSRUcoRFBfQlJVU0hfRlJHRF9DTFIsIHJpbmZvLT5kcF9icnVzaF9mZ19jYWNoZSk7CisJT1VUUkVHKERQX0JSVVNIX0JLR0RfQ0xSLCByaW5mby0+ZHBfYnJ1c2hfYmdfY2FjaGUpOworCU9VVFJFRyhEUF9TUkNfRlJHRF9DTFIsIHJpbmZvLT5kcF9zcmNfZmdfY2FjaGUpOworCU9VVFJFRyhEUF9TUkNfQktHRF9DTFIsIHJpbmZvLT5kcF9zcmNfYmdfY2FjaGUpOwogCi0JLyogc2V0IHNvdXJjZSBjb2xvciByZWdzICovCi0JT1VUUkVHKERQX1NSQ19GUkdEX0NMUiwgMHhmZmZmZmZmZik7Ci0JT1VUUkVHKERQX1NSQ19CS0dEX0NMUiwgMHgwMDAwMDAwMCk7CisJLyogRGVmYXVsdCBkaXJlY3Rpb24gKi8KKwlyaW5mby0+ZHBfY250bF9jYWNoZSA9IERTVF9YX0xFRlRfVE9fUklHSFQgfCBEU1RfWV9UT1BfVE9fQk9UVE9NOworCXJhZGVvbl9maWZvX3dhaXQocmluZm8sIDEpOworCU9VVFJFRyhEUF9DTlRMLCByaW5mby0+ZHBfY250bF9jYWNoZSk7CiAKIAkvKiBkZWZhdWx0IHdyaXRlIG1hc2sgKi8KKwlyYWRlb25fZmlmb193YWl0KHJpbmZvLCAxKTsKIAlPVVRSRUcoRFBfV1JJVEVfTVNLLCAweGZmZmZmZmZmKTsKIAotCXJhZGVvbl9lbmdpbmVfaWRsZSAoKTsKKwkvKiBEZWZhdWx0IHRvIG5vIHN3YXBwaW5nIG9mIGhvc3QgZGF0YSAqLworCXJhZGVvbl9maWZvX3dhaXQocmluZm8sIDEpOworCU9VVFJFRyhSQkJNX0dVSUNOVEwsIFJCQk1fR1VJQ05UTF9IT1NUX0RBVEFfU1dBUF9OT05FKTsKKworCS8qIE1ha2Ugc3VyZSBpdCdzIHNldHRsZWQgKi8KKwlyYWRlb25fZW5naW5lX2lkbGUocmluZm8pOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9hdHkvcmFkZW9uX2JhY2tsaWdodC5jIGIvZHJpdmVycy92aWRlby9hdHkvcmFkZW9uX2JhY2tsaWdodC5jCmluZGV4IDFhMDU2YWQuLmYzNDNiYTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vYXR5L3JhZGVvbl9iYWNrbGlnaHQuYworKysgYi9kcml2ZXJzL3ZpZGVvL2F0eS9yYWRlb25fYmFja2xpZ2h0LmMKQEAgLTY2LDcgKzY2LDcgQEAKIAkJbGV2ZWwgPSBiZC0+cHJvcHMuYnJpZ2h0bmVzczsKIAogCWRlbF90aW1lcl9zeW5jKCZyaW5mby0+bHZkc190aW1lcik7Ci0JcmFkZW9uX2VuZ2luZV9pZGxlKCk7CisJcmFkZW9uX2VuZ2luZV9pZGxlKHJpbmZvKTsKIAogCWx2ZHNfZ2VuX2NudGwgPSBJTlJFRyhMVkRTX0dFTl9DTlRMKTsKIAlpZiAobGV2ZWwgPiAwKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2F0eS9yYWRlb25fYmFzZS5jIGIvZHJpdmVycy92aWRlby9hdHkvcmFkZW9uX2Jhc2UuYwppbmRleCA2NTIyNzNlLi45YTU4MjFjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2F0eS9yYWRlb25fYmFzZS5jCisrKyBiL2RyaXZlcnMvdmlkZW8vYXR5L3JhZGVvbl9iYXNlLmMKQEAgLTg1Miw3ICs4NTIsNiBAQAogICAgICAgICBpZiAocmluZm8tPmFzbGVlcCkKICAgICAgICAgCXJldHVybiAwOwogCi0JcmFkZW9uX2ZpZm9fd2FpdCgyKTsKICAgICAgICAgT1VUUkVHKENSVENfT0ZGU0VULCAoKHZhci0+eW9mZnNldCAqIHZhci0+eHJlc192aXJ0dWFsICsgdmFyLT54b2Zmc2V0KQogCQkJICAgICAqIHZhci0+Yml0c19wZXJfcGl4ZWwgLyA4KSAmIH43KTsKICAgICAgICAgcmV0dXJuIDA7CkBAIC04ODIsNyArODgxLDYgQEAKIAkJCWlmIChyYykKIAkJCQlyZXR1cm4gcmM7CiAKLQkJCXJhZGVvbl9maWZvX3dhaXQoMik7CiAJCQlpZiAodmFsdWUgJiAweDAxKSB7CiAJCQkJdG1wID0gSU5SRUcoTFZEU19HRU5fQ05UTCk7CiAKQEAgLTk0MCw3ICs5MzgsNyBAQAogCWlmIChyaW5mby0+bG9ja19ibGFuaykKIAkJcmV0dXJuIDA7CiAKLQlyYWRlb25fZW5naW5lX2lkbGUoKTsKKwlyYWRlb25fZW5naW5lX2lkbGUocmluZm8pOwogCiAJdmFsID0gSU5SRUcoQ1JUQ19FWFRfQ05UTCk7CiAgICAgICAgIHZhbCAmPSB+KENSVENfRElTUExBWV9ESVMgfCBDUlRDX0hTWU5DX0RJUyB8CkBAIC0xMDQ4LDcgKzEwNDYsNyBAQAogCiAJaWYgKHJpbmZvLT5hc2xlZXApCiAJCXJldHVybiAwOwotCQkKKwogCXJldHVybiByYWRlb25fc2NyZWVuX2JsYW5rKHJpbmZvLCBibGFuaywgMCk7CiB9CiAKQEAgLTEwNzQsOCArMTA3Miw2IEBACiAgICAgICAgIHBpbmRleCA9IHJlZ25vOwogCiAgICAgICAgIGlmICghcmluZm8tPmFzbGVlcCkgewotCQlyYWRlb25fZmlmb193YWl0KDkpOwotCiAJCWlmIChyaW5mby0+YnBwID09IDE2KSB7CiAJCQlwaW5kZXggPSByZWdubyAqIDg7CiAKQEAgLTEyNDQsOCArMTI0MCw2IEBACiB7CiAJaW50IGk7CiAKLQlyYWRlb25fZmlmb193YWl0KDIwKTsKLQogCS8qIFdvcmthcm91bmQgZnJvbSBYRnJlZSAqLwogCWlmIChyaW5mby0+aXNfbW9iaWxpdHkpIHsKIAkgICAgICAgIC8qIEEgdGVtcG9yYWwgd29ya2Fyb3VuZCBmb3IgdGhlIG9jY2F0aW9uYWwgYmxhbmtpbmcgb24gY2VydGFpbiBsYXB0b3AKQEAgLTEyODYsMTEgKzEyODAsMTAgQEAKIAlyYWRlb25fcGxsX2VycmF0YV9hZnRlcl9kYXRhKHJpbmZvKTsKIAogCS8qIFNldCBQUExMIHJlZi4gZGl2ICovCi0JaWYgKHJpbmZvLT5mYW1pbHkgPT0gQ0hJUF9GQU1JTFlfUjMwMCB8fAorCWlmIChJU19SMzAwX1ZBUklBTlQocmluZm8pIHx8CiAJICAgIHJpbmZvLT5mYW1pbHkgPT0gQ0hJUF9GQU1JTFlfUlMzMDAgfHwKLQkgICAgcmluZm8tPmZhbWlseSA9PSBDSElQX0ZBTUlMWV9SMzUwIHx8Ci0JICAgIHJpbmZvLT5mYW1pbHkgPT0gQ0hJUF9GQU1JTFlfUlYzNTAgfHwKLQkgICAgcmluZm8tPmZhbWlseSA9PSBDSElQX0ZBTUlMWV9SVjM4MCApIHsKKwkgICAgcmluZm8tPmZhbWlseSA9PSBDSElQX0ZBTUlMWV9SUzQwMCB8fAorCSAgICByaW5mby0+ZmFtaWx5ID09IENISVBfRkFNSUxZX1JTNDgwKSB7CiAJCWlmIChtb2RlLT5wcGxsX3JlZl9kaXYgJiBSMzAwX1BQTExfUkVGX0RJVl9BQ0NfTUFTSykgewogCQkJLyogV2hlbiByZXN0b3JpbmcgY29uc29sZSBtb2RlLCB1c2Ugc2F2ZWQgUFBMTF9SRUZfRElWCiAJCQkgKiBzZXR0aW5nLgpAQCAtMTM0Miw3ICsxMzM1LDcgQEAKIHsKIAlzdHJ1Y3QgcmFkZW9uZmJfaW5mbyAqcmluZm8gPSAoc3RydWN0IHJhZGVvbmZiX2luZm8gKilkYXRhOwogCi0JcmFkZW9uX2VuZ2luZV9pZGxlKCk7CisJcmFkZW9uX2VuZ2luZV9pZGxlKHJpbmZvKTsKIAogCU9VVFJFRyhMVkRTX0dFTl9DTlRMLCByaW5mby0+cGVuZGluZ19sdmRzX2dlbl9jbnRsKTsKIH0KQEAgLTEzNjAsMTAgKzEzNTMsMTEgQEAKIAlpZiAobm9tb2Rlc2V0KQogCQlyZXR1cm47CiAKKwlyYWRlb25fZW5naW5lX2lkbGUocmluZm8pOworCiAJaWYgKCFyZWdzX29ubHkpCiAJCXJhZGVvbl9zY3JlZW5fYmxhbmsocmluZm8sIEZCX0JMQU5LX05PUk1BTCwgMCk7CiAKLQlyYWRlb25fZmlmb193YWl0KDMxKTsKIAlmb3IgKGk9MDsgaTwxMDsgaSsrKQogCQlPVVRSRUcoY29tbW9uX3JlZ3NbaV0ucmVnLCBjb21tb25fcmVnc1tpXS52YWwpOwogCkBAIC0xMzkxLDcgKzEzODUsNiBAQAogCXJhZGVvbl93cml0ZV9wbGxfcmVncyhyaW5mbywgbW9kZSk7CiAKIAlpZiAoKHByaW1hcnlfbW9uID09IE1UX0RGUCkgfHwgKHByaW1hcnlfbW9uID09IE1UX0xDRCkpIHsKLQkJcmFkZW9uX2ZpZm9fd2FpdCgxMCk7CiAJCU9VVFJFRyhGUF9DUlRDX0hfVE9UQUxfRElTUCwgbW9kZS0+ZnBfY3J0Y19oX3RvdGFsX2Rpc3ApOwogCQlPVVRSRUcoRlBfQ1JUQ19WX1RPVEFMX0RJU1AsIG1vZGUtPmZwX2NydGNfdl90b3RhbF9kaXNwKTsKIAkJT1VUUkVHKEZQX0hfU1lOQ19TVFJUX1dJRCwgbW9kZS0+ZnBfaF9zeW5jX3N0cnRfd2lkKTsKQEAgLTE0MDYsNyArMTM5OSw2IEBACiAJaWYgKCFyZWdzX29ubHkpCiAJCXJhZGVvbl9zY3JlZW5fYmxhbmsocmluZm8sIEZCX0JMQU5LX1VOQkxBTkssIDApOwogCi0JcmFkZW9uX2ZpZm9fd2FpdCgyKTsKIAlPVVRQTEwoVkNMS19FQ1BfQ05UTCwgbW9kZS0+dmNsa19lY3BfY250bCk7CiAJCiAJcmV0dXJuOwpAQCAtMTQ2MSwxMCArMTQ1Myw3IEBACiAJCS8qIE5vdCBhbGwgY2hpcCByZXZzIGhhdmUgdGhlIHNhbWUgZm9ybWF0IGZvciB0aGlzIHJlZ2lzdGVyLAogCQkgKiBleHRyYWN0IHRoZSBzb3VyY2Ugc2VsZWN0aW9uCiAJCSAqLwotCQlpZiAocmluZm8tPmZhbWlseSA9PSBDSElQX0ZBTUlMWV9SMjAwIHx8Ci0JCSAgICByaW5mby0+ZmFtaWx5ID09IENISVBfRkFNSUxZX1IzMDAgfHwKLQkJICAgIHJpbmZvLT5mYW1pbHkgPT0gQ0hJUF9GQU1JTFlfUjM1MCB8fAotCQkgICAgcmluZm8tPmZhbWlseSA9PSBDSElQX0ZBTUlMWV9SVjM1MCkgeworCQlpZiAocmluZm8tPmZhbWlseSA9PSBDSElQX0ZBTUlMWV9SMjAwIHx8IElTX1IzMDBfVkFSSUFOVChyaW5mbykpIHsKIAkJCXNvdXJjZSA9IChmcDJfZ2VuX2NudGwgPj4gMTApICYgMHgzOwogCQkJLyogc291cmNlZCBmcm9tIHRyYW5zZm9ybSB1bml0LCBjaGVjayBmb3IgdHJhbnNmb3JtIHVuaXQKIAkJCSAqIG93biBzb3VyY2UKQEAgLTE1NjAsNyArMTU0OSw3IEBACiAJLyogV2UgYWx3YXlzIHdhbnQgZW5naW5lIHRvIGJlIGlkbGUgb24gYSBtb2RlIHN3aXRjaCwgZXZlbgogCSAqIGlmIHdlIHdvbid0IGFjdHVhbGx5IGNoYW5nZSB0aGUgbW9kZQogCSAqLwotCXJhZGVvbl9lbmdpbmVfaWRsZSgpOworCXJhZGVvbl9lbmdpbmVfaWRsZShyaW5mbyk7CiAKIAloU3luY1N0YXJ0ID0gbW9kZS0+eHJlcyArIG1vZGUtPnJpZ2h0X21hcmdpbjsKIAloU3luY0VuZCA9IGhTeW5jU3RhcnQgKyBtb2RlLT5oc3luY19sZW47CkBAIC0xODU1LDcgKzE4NDQsNiBAQAogCXJldHVybiAwOwogfQogCi0KIHN0YXRpYyBzdHJ1Y3QgZmJfb3BzIHJhZGVvbmZiX29wcyA9IHsKIAkub3duZXIJCQk9IFRISVNfTU9EVUxFLAogCS5mYl9jaGVja192YXIJCT0gcmFkZW9uZmJfY2hlY2tfdmFyLApAQCAtMTg3OSw2ICsxODY3LDcgQEAKIAlpbmZvLT5wYXIgPSByaW5mbzsKIAlpbmZvLT5wc2V1ZG9fcGFsZXR0ZSA9IHJpbmZvLT5wc2V1ZG9fcGFsZXR0ZTsKIAlpbmZvLT5mbGFncyA9IEZCSU5GT19ERUZBVUxUCisJCSAgICB8IEZCSU5GT19IV0FDQ0VMX0lNQUdFQkxJVAogCQkgICAgfCBGQklORk9fSFdBQ0NFTF9DT1BZQVJFQQogCQkgICAgfCBGQklORk9fSFdBQ0NFTF9GSUxMUkVDVAogCQkgICAgfCBGQklORk9fSFdBQ0NFTF9YUEFOCkBAIC0yMDA1LDExICsxOTk0LDExIEBACiAgICAgICAgICAgICAocmluZm8tPmZhbWlseSA9PSBDSElQX0ZBTUlMWV9SUzIwMCkgfHwKICAgICAgICAgICAgIChyaW5mby0+ZmFtaWx5ID09IENISVBfRkFNSUxZX1JTMzAwKSB8fAogICAgICAgICAgICAgKHJpbmZvLT5mYW1pbHkgPT0gQ0hJUF9GQU1JTFlfUkM0MTApIHx8CisgICAgICAgICAgICAocmluZm8tPmZhbWlseSA9PSBDSElQX0ZBTUlMWV9SUzQwMCkgfHwKIAkgICAgKHJpbmZvLT5mYW1pbHkgPT0gQ0hJUF9GQU1JTFlfUlM0ODApICkgewogICAgICAgICAgIHUzMiB0b20gPSBJTlJFRyhOQl9UT00pOwogICAgICAgICAgIHRtcCA9ICgoKCh0b20gPj4gMTYpIC0gKHRvbSAmIDB4ZmZmZikgKyAxKSA8PCA2KSAqIDEwMjQpOwogCi0gCQlyYWRlb25fZmlmb193YWl0KDYpOwogICAgICAgICAgIE9VVFJFRyhNQ19GQl9MT0NBVElPTiwgdG9tKTsKICAgICAgICAgICBPVVRSRUcoRElTUExBWV9CQVNFX0FERFIsICh0b20gJiAweGZmZmYpIDw8IDE2KTsKICAgICAgICAgICBPVVRSRUcoQ1JUQzJfRElTUExBWV9CQVNFX0FERFIsICh0b20gJiAweGZmZmYpIDw8IDE2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vYXR5L3JhZGVvbl9pMmMuYyBiL2RyaXZlcnMvdmlkZW8vYXR5L3JhZGVvbl9pMmMuYwppbmRleCA4YzhmYTM1Li4yYzU1NjcxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2F0eS9yYWRlb25faTJjLmMKKysrIGIvZHJpdmVycy92aWRlby9hdHkvcmFkZW9uX2kyYy5jCkBAIC0xMzksMTIgKzEzOSw4IEBACiBpbnQgcmFkZW9uX3Byb2JlX2kyY19jb25uZWN0b3Ioc3RydWN0IHJhZGVvbmZiX2luZm8gKnJpbmZvLCBpbnQgY29ubiwKIAkJCSAgICAgICB1OCAqKm91dF9lZGlkKQogewotCXUzMiByZWcgPSByaW5mby0+aTJjW2Nvbm4tMV0uZGRjX3JlZzsKIAl1OCAqZWRpZDsKIAotCU9VVFJFRyhyZWcsIElOUkVHKHJlZykgJgotCQkJfihWR0FfRERDX0RBVEFfT1VUUFVUIHwgVkdBX0REQ19DTEtfT1VUUFVUKSk7Ci0KIAllZGlkID0gZmJfZGRjX3JlYWQoJnJpbmZvLT5pMmNbY29ubi0xXS5hZGFwdGVyKTsKIAogCWlmIChvdXRfZWRpZCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vYXR5L3JhZGVvbl9wbS5jIGIvZHJpdmVycy92aWRlby9hdHkvcmFkZW9uX3BtLmMKaW5kZXggNjc1YWJkYS4uM2RmNTAxNSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9hdHkvcmFkZW9uX3BtLmMKKysrIGIvZHJpdmVycy92aWRlby9hdHkvcmFkZW9uX3BtLmMKQEAgLTI2NTMsOSArMjY1Myw5IEBACiAKIAlpZiAoIShpbmZvLT5mbGFncyAmIEZCSU5GT19IV0FDQ0VMX0RJU0FCTEVEKSkgewogCQkvKiBNYWtlIHN1cmUgZW5naW5lIGlzIHJlc2V0ICovCi0JCXJhZGVvbl9lbmdpbmVfaWRsZSgpOworCQlyYWRlb25fZW5naW5lX2lkbGUocmluZm8pOwogCQlyYWRlb25mYl9lbmdpbmVfcmVzZXQocmluZm8pOwotCQlyYWRlb25fZW5naW5lX2lkbGUoKTsKKwkJcmFkZW9uX2VuZ2luZV9pZGxlKHJpbmZvKTsKIAl9CiAKIAkvKiBCbGFuayBkaXNwbGF5IGFuZCBMQ0QgKi8KQEAgLTI3NjcsNyArMjc2Nyw3IEBACiAKIAkJcmluZm8tPmFzbGVlcCA9IDA7CiAJfSBlbHNlCi0JCXJhZGVvbl9lbmdpbmVfaWRsZSgpOworCQlyYWRlb25fZW5naW5lX2lkbGUocmluZm8pOwogCiAJLyogUmVzdG9yZSBkaXNwbGF5ICYgZW5naW5lICovCiAJcmFkZW9uX3dyaXRlX21vZGUgKHJpbmZvLCAmcmluZm8tPnN0YXRlLCAxKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vYXR5L3JhZGVvbmZiLmggYi9kcml2ZXJzL3ZpZGVvL2F0eS9yYWRlb25mYi5oCmluZGV4IGNjYmZmZmQuLmVhMGI1YjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vYXR5L3JhZGVvbmZiLmgKKysrIGIvZHJpdmVycy92aWRlby9hdHkvcmFkZW9uZmIuaApAQCAtNTMsNiArNTMsNyBAQAogCUNISVBfRkFNSUxZX1JWMzgwLCAgICAvKiBSVjM3MC9SVjM4MC9NMjIvTTI0ICovCiAJQ0hJUF9GQU1JTFlfUjQyMCwgICAgIC8qIFI0MjAvUjQyMy9NMTggKi8KIAlDSElQX0ZBTUlMWV9SQzQxMCwKKwlDSElQX0ZBTUlMWV9SUzQwMCwKIAlDSElQX0ZBTUlMWV9SUzQ4MCwKIAlDSElQX0ZBTUlMWV9MQVNULAogfTsKQEAgLTMzNSw3ICszMzYsMTUgQEAKIAlpbnQJCQltb24yX3R5cGU7CiAJdTgJCSAgICAgICAgKm1vbjJfRURJRDsKIAotCXUzMgkJCWRwX2d1aV9tYXN0ZXJfY250bDsKKwkvKiBhY2NlbCBiaXRzICovCisJdTMyCQkJZHBfZ3VpX21jX2Jhc2U7CisJdTMyCQkJZHBfZ3VpX21jX2NhY2hlOworCXUzMgkJCWRwX2NudGxfY2FjaGU7CisJdTMyCQkJZHBfYnJ1c2hfZmdfY2FjaGU7CisJdTMyCQkJZHBfYnJ1c2hfYmdfY2FjaGU7CisJdTMyCQkJZHBfc3JjX2ZnX2NhY2hlOworCXUzMgkJCWRwX3NyY19iZ19jYWNoZTsKKwl1MzIJCQlmaWZvX2ZyZWU7CiAKIAlzdHJ1Y3QgcGxsX2luZm8JCXBsbDsKIApAQCAtMzQ3LDYgKzM1Niw3IEBACiAJaW50CQkJbG9ja19ibGFuazsKIAlpbnQJCQlkeW5jbGs7CiAJaW50CQkJbm9fc2NoZWR1bGU7CisJaW50IAkJCWdmeF9tb2RlOwogCWVudW0gcmFkZW9uX3BtX21vZGUJcG1fbW9kZTsKIAlyZWluaXRfZnVuY3Rpb25fcHRyICAgICByZWluaXRfZnVuYzsKIApAQCAtMzkxLDggKzQwMSwxNCBAQAogI2RlZmluZSBPVVRSRUc4KGFkZHIsdmFsKQl3cml0ZWIodmFsLCAocmluZm8tPm1taW9fYmFzZSkrYWRkcikKICNkZWZpbmUgSU5SRUcxNihhZGRyKQkJcmVhZHcoKHJpbmZvLT5tbWlvX2Jhc2UpK2FkZHIpCiAjZGVmaW5lIE9VVFJFRzE2KGFkZHIsdmFsKQl3cml0ZXcodmFsLCAocmluZm8tPm1taW9fYmFzZSkrYWRkcikKKworI2lmZGVmIENPTkZJR19QUEMKKyNkZWZpbmUgSU5SRUcoYWRkcikJICAgICAJKHsgZWllaW8oKTsgbGRfbGUzMihyaW5mby0+bW1pb19iYXNlKyhhZGRyKSk7IH0pCisjZGVmaW5lIE9VVFJFRyhhZGRyLHZhbCkJZG8geyBlaWVpbygpOyBzdF9sZTMyKHJpbmZvLT5tbWlvX2Jhc2UrKGFkZHIpLCh2YWwpKTsgfSB3aGlsZSgwKQorI2Vsc2UKICNkZWZpbmUgSU5SRUcoYWRkcikJCXJlYWRsKChyaW5mby0+bW1pb19iYXNlKSthZGRyKQogI2RlZmluZSBPVVRSRUcoYWRkcix2YWwpCXdyaXRlbCh2YWwsIChyaW5mby0+bW1pb19iYXNlKSthZGRyKQorI2VuZGlmCiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBfT1VUUkVHUChzdHJ1Y3QgcmFkZW9uZmJfaW5mbyAqcmluZm8sIHUzMiBhZGRyLAogCQkgICAgICAgdTMyIHZhbCwgdTMyIG1hc2spCkBAIC01MzMsMTYgKzU0OSwyNSBAQAogLyoKICAqIDJEIEVuZ2luZSBoZWxwZXIgcm91dGluZXMKICAqLworCitleHRlcm4gdm9pZCByYWRlb25fZmlmb191cGRhdGVfYW5kX3dhaXQoc3RydWN0IHJhZGVvbmZiX2luZm8gKnJpbmZvLCBpbnQgZW50cmllcyk7CisKIHN0YXRpYyBpbmxpbmUgdm9pZCByYWRlb25fZW5naW5lX2ZsdXNoIChzdHJ1Y3QgcmFkZW9uZmJfaW5mbyAqcmluZm8pCiB7CiAJaW50IGk7CiAKLQkvKiBpbml0aWF0ZSBmbHVzaCAqLwotCU9VVFJFR1AoUkIyRF9EU1RDQUNIRV9DVExTVEFULCBSQjJEX0RDX0ZMVVNIX0FMTCwKKwkvKiBJbml0aWF0ZSBmbHVzaCAqLworCU9VVFJFR1AoRFNUQ0FDSEVfQ1RMU1RBVCwgUkIyRF9EQ19GTFVTSF9BTEwsCiAJICAgICAgICB+UkIyRF9EQ19GTFVTSF9BTEwpOwogCisJLyogRW5zdXJlIEZJRk8gaXMgZW1wdHksIGllLCBtYWtlIHN1cmUgdGhlIGZsdXNoIGNvbW1hbmRzCisJICogaGFzIHJlYWNoZWQgdGhlIGNhY2hlCisJICovCisJcmFkZW9uX2ZpZm9fdXBkYXRlX2FuZF93YWl0KHJpbmZvLCA2NCk7CisKKwkvKiBXYWl0IGZvciB0aGUgZmx1c2ggdG8gY29tcGxldGUgKi8KIAlmb3IgKGk9MDsgaSA8IDIwMDAwMDA7IGkrKykgewotCQlpZiAoIShJTlJFRyhSQjJEX0RTVENBQ0hFX0NUTFNUQVQpICYgUkIyRF9EQ19CVVNZKSkKKwkJaWYgKCEoSU5SRUcoRFNUQ0FDSEVfQ1RMU1RBVCkgJiBSQjJEX0RDX0JVU1kpKQogCQkJcmV0dXJuOwogCQl1ZGVsYXkoMSk7CiAJfQpAQCAtNTUwLDI1ICs1NzUsMTIgQEAKIH0KIAogCi1zdGF0aWMgaW5saW5lIHZvaWQgX3JhZGVvbl9maWZvX3dhaXQoc3RydWN0IHJhZGVvbmZiX2luZm8gKnJpbmZvLCBpbnQgZW50cmllcykKLXsKLQlpbnQgaTsKLQotCWZvciAoaT0wOyBpPDIwMDAwMDA7IGkrKykgewotCQlpZiAoKElOUkVHKFJCQk1fU1RBVFVTKSAmIDB4N2YpID49IGVudHJpZXMpCi0JCQlyZXR1cm47Ci0JCXVkZWxheSgxKTsKLQl9Ci0JcHJpbnRrKEtFUk5fRVJSICJyYWRlb25mYjogRklGTyBUaW1lb3V0ICFcbiIpOwotfQotCi0KLXN0YXRpYyBpbmxpbmUgdm9pZCBfcmFkZW9uX2VuZ2luZV9pZGxlKHN0cnVjdCByYWRlb25mYl9pbmZvICpyaW5mbykKK3N0YXRpYyBpbmxpbmUgdm9pZCByYWRlb25fZW5naW5lX2lkbGUoc3RydWN0IHJhZGVvbmZiX2luZm8gKnJpbmZvKQogewogCWludCBpOwogCiAJLyogZW5zdXJlIEZJRk8gaXMgZW1wdHkgYmVmb3JlIHdhaXRpbmcgZm9yIGlkbGUgKi8KLQlfcmFkZW9uX2ZpZm9fd2FpdCAocmluZm8sIDY0KTsKKwlyYWRlb25fZmlmb191cGRhdGVfYW5kX3dhaXQgKHJpbmZvLCA2NCk7CiAKIAlmb3IgKGk9MDsgaTwyMDAwMDAwOyBpKyspIHsKIAkJaWYgKCgoSU5SRUcoUkJCTV9TVEFUVVMpICYgR1VJX0FDVElWRSkpID09IDApIHsKQEAgLTU4MSw4ICs1OTMsNiBAQAogfQogCiAKLSNkZWZpbmUgcmFkZW9uX2VuZ2luZV9pZGxlKCkJCV9yYWRlb25fZW5naW5lX2lkbGUocmluZm8pCi0jZGVmaW5lIHJhZGVvbl9maWZvX3dhaXQoZW50cmllcykJX3JhZGVvbl9maWZvX3dhaXQocmluZm8sZW50cmllcykKICNkZWZpbmUgcmFkZW9uX21zbGVlcChtcykJCV9yYWRlb25fbXNsZWVwKHJpbmZvLG1zKQogCiAKQEAgLTYxMiw2ICs2MjIsNyBAQAogZXh0ZXJuIGludCByYWRlb25mYl9zeW5jKHN0cnVjdCBmYl9pbmZvICppbmZvKTsKIGV4dGVybiB2b2lkIHJhZGVvbmZiX2VuZ2luZV9pbml0IChzdHJ1Y3QgcmFkZW9uZmJfaW5mbyAqcmluZm8pOwogZXh0ZXJuIHZvaWQgcmFkZW9uZmJfZW5naW5lX3Jlc2V0KHN0cnVjdCByYWRlb25mYl9pbmZvICpyaW5mbyk7CitleHRlcm4gdm9pZCByYWRlb25fZml4dXBfbWVtX29mZnNldChzdHJ1Y3QgcmFkZW9uZmJfaW5mbyAqcmluZm8pOwogCiAvKiBPdGhlciBmdW5jdGlvbnMgKi8KIGV4dGVybiBpbnQgcmFkZW9uX3NjcmVlbl9ibGFuayhzdHJ1Y3QgcmFkZW9uZmJfaW5mbyAqcmluZm8sIGludCBibGFuaywgaW50IG1vZGVfc3dpdGNoKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L2hwNjgwX2JsLmMgYi9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9ocDY4MF9ibC5jCmluZGV4IDZmYTBiOWQuLmQ0Y2ZlZDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L2hwNjgwX2JsLmMKKysrIGIvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvaHA2ODBfYmwuYwpAQCAtMTksNyArMTksNyBAQAogI2luY2x1ZGUgPGxpbnV4L2JhY2tsaWdodC5oPgogCiAjaW5jbHVkZSA8Y3B1L2RhYy5oPgotI2luY2x1ZGUgPGFzbS9ocDZ4eC5oPgorI2luY2x1ZGUgPG1hY2gvaHA2eHguaD4KICNpbmNsdWRlIDxhc20vaGQ2NDQ2MS5oPgogCiAjZGVmaW5lIEhQNjgwX01BWF9JTlRFTlNJVFkgMjU1CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9tYnBfbnZpZGlhX2JsLmMgYi9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9tYnBfbnZpZGlhX2JsLmMKaW5kZXggMzg1Y2JhNC4uMDY5NjRhZiAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvbWJwX252aWRpYV9ibC5jCisrKyBiL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L21icF9udmlkaWFfYmwuYwpAQCAtMTExLDYgKzExMSw0IEBACiBNT0RVTEVfQVVUSE9SKCJNYXR0aGV3IEdhcnJldHQgPG1qZ0ByZWRoYXQuY29tPiIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJOdmlkaWEtYmFzZWQgTWFjYm9vayBQcm8gQmFja2xpZ2h0IERyaXZlciIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotTU9EVUxFX0FMSUFTKCJzdm5BcHBsZUluYy46cG5NYWNCb29rUHJvMywxIik7Ci1NT0RVTEVfQUxJQVMoInN2bkFwcGxlSW5jLjpwbk1hY0Jvb2tQcm8zLDIiKTsKLU1PRFVMRV9BTElBUygic3ZuQXBwbGVJbmMuOnBuTWFjQm9va1BybzQsMSIpOworTU9EVUxFX0RFVklDRV9UQUJMRShkbWksIG1icF9kZXZpY2VfdGFibGUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9jYXJtaW5lZmIuYyBiL2RyaXZlcnMvdmlkZW8vY2FybWluZWZiLmMKaW5kZXggZTE1YmI0NC4uYzliMTkxMyAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9jYXJtaW5lZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL2Nhcm1pbmVmYi5jCkBAIC01MzUsNyArNTM1LDcgQEAKIAkuZmJfc2V0Y29scmVnCT0gY2FybWluZV9zZXRjb2xyZWcsCiB9OwogCi1zdGF0aWMgaW50IGFsbG9jX2Nhcm1pbmVfZmIodm9pZCBfX2lvbWVtICpyZWdzLCB2b2lkIF9faW9tZW0gKnNtZW1fYmFzZSwKK3N0YXRpYyBpbnQgX19kZXZpbml0IGFsbG9jX2Nhcm1pbmVfZmIodm9pZCBfX2lvbWVtICpyZWdzLCB2b2lkIF9faW9tZW0gKnNtZW1fYmFzZSwKIAkJaW50IHNtZW1fb2Zmc2V0LCBzdHJ1Y3QgZGV2aWNlICpkZXZpY2UsIHN0cnVjdCBmYl9pbmZvICoqcmluZm8pCiB7CiAJaW50IHJldDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vY2lycnVzZmIuYyBiL2RyaXZlcnMvdmlkZW8vY2lycnVzZmIuYwppbmRleCBlNzI5ZmIyLi4wNDhiMTM5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2NpcnJ1c2ZiLmMKKysrIGIvZHJpdmVycy92aWRlby9jaXJydXNmYi5jCkBAIC0zMjcsMjkgKzMyNyw3IEBACiAjZW5kaWYgLyogQ09ORklHX1pPUlJPICovCiAKIHN0cnVjdCBjaXJydXNmYl9yZWdzIHsKLQlsb25nIGZyZXE7Ci0JbG9uZyBub207Ci0JbG9uZyBkZW47Ci0JbG9uZyBkaXY7Ci0JbG9uZyBtdWx0aXBsZXhpbmc7Ci0JbG9uZyBtY2xrOwotCWxvbmcgZGl2TUNMSzsKLQotCWxvbmcgSG9yaXpSZXM7CQkvKiBUaGUgeCByZXNvbHV0aW9uIGluIHBpeGVsICovCi0JbG9uZyBIb3JpelRvdGFsOwotCWxvbmcgSG9yaXpEaXNwRW5kOwotCWxvbmcgSG9yaXpCbGFua1N0YXJ0OwotCWxvbmcgSG9yaXpCbGFua0VuZDsKLQlsb25nIEhvcml6U3luY1N0YXJ0OwotCWxvbmcgSG9yaXpTeW5jRW5kOwotCi0JbG9uZyBWZXJ0UmVzOwkJLyogdGhlIHBoeXNpY2FsIHkgcmVzb2x1dGlvbiBpbiBzY2FubGluZXMgKi8KLQlsb25nIFZlcnRUb3RhbDsKLQlsb25nIFZlcnREaXNwRW5kOwotCWxvbmcgVmVydFN5bmNTdGFydDsKLQlsb25nIFZlcnRTeW5jRW5kOwotCWxvbmcgVmVydEJsYW5rU3RhcnQ7Ci0JbG9uZyBWZXJ0QmxhbmtFbmQ7CisJaW50IG11bHRpcGxleGluZzsKIH07CiAKICNpZmRlZiBDSVJSVVNGQl9ERUJVRwpAQCAtMzY3LDExMCArMzQ1LDEzIEBACiAKIAlzdHJ1Y3QgY2lycnVzZmJfcmVncyBjdXJyZW50bW9kZTsKIAlpbnQgYmxhbmtfbW9kZTsKKwl1MzIgcHNldWRvX3BhbGV0dGVbMTZdOwogCi0JdTMyCXBzZXVkb19wYWxldHRlWzE2XTsKLQotI2lmZGVmIENPTkZJR19aT1JSTwotCXN0cnVjdCB6b3Jyb19kZXYgKnpkZXY7Ci0jZW5kaWYKLSNpZmRlZiBDT05GSUdfUENJCi0Jc3RydWN0IHBjaV9kZXYgKnBkZXY7Ci0jZW5kaWYKIAl2b2lkICgqdW5tYXApKHN0cnVjdCBmYl9pbmZvICppbmZvKTsKIH07CiAKLXN0YXRpYyB1bnNpZ25lZCBjaXJydXNmYl9kZWZfbW9kZSA9IDE7Ci1zdGF0aWMgaW50IG5vYWNjZWw7Ci0KLS8qCi0gKiAgICBQcmVkZWZpbmVkIFZpZGVvIE1vZGVzCi0gKi8KLQotc3RhdGljIGNvbnN0IHN0cnVjdCB7Ci0JY29uc3QgY2hhciAqbmFtZTsKLQlzdHJ1Y3QgZmJfdmFyX3NjcmVlbmluZm8gdmFyOwotfSBjaXJydXNmYl9wcmVkZWZpbmVkW10gPSB7Ci0JewotCQkvKiBhdXRvZGV0ZWN0IG1vZGUgKi8KLQkJLm5hbWUJPSAiQXV0b2RldGVjdCIsCi0JfSwgewotCQkvKiA2NDB4NDgwLCAzMS4yNSBrSHosIDYwIEh6LCAyNSBNSHogUGl4Q2xvY2sgKi8KLQkJLm5hbWUJPSAiNjQweDQ4MCIsCi0JCS52YXIJPSB7Ci0JCQkueHJlcwkJPSA2NDAsCi0JCQkueXJlcwkJPSA0ODAsCi0JCQkueHJlc192aXJ0dWFsCT0gNjQwLAotCQkJLnlyZXNfdmlydHVhbAk9IDQ4MCwKLQkJCS5iaXRzX3Blcl9waXhlbAk9IDgsCi0JCQkucmVkCQk9IHsgLmxlbmd0aCA9IDggfSwKLQkJCS5ncmVlbgkJPSB7IC5sZW5ndGggPSA4IH0sCi0JCQkuYmx1ZQkJPSB7IC5sZW5ndGggPSA4IH0sCi0JCQkud2lkdGgJCT0gLTEsCi0JCQkuaGVpZ2h0CQk9IC0xLAotCQkJLnBpeGNsb2NrCT0gNDAwMDAsCi0JCQkubGVmdF9tYXJnaW4JPSA0OCwKLQkJCS5yaWdodF9tYXJnaW4JPSAxNiwKLQkJCS51cHBlcl9tYXJnaW4JPSAzMiwKLQkJCS5sb3dlcl9tYXJnaW4JPSA4LAotCQkJLmhzeW5jX2xlbgk9IDk2LAotCQkJLnZzeW5jX2xlbgk9IDQsCi0JCQkuc3luYwk9IEZCX1NZTkNfSE9SX0hJR0hfQUNUIHwgRkJfU1lOQ19WRVJUX0hJR0hfQUNULAotCQkJLnZtb2RlCQk9IEZCX1ZNT0RFX05PTklOVEVSTEFDRUQKLQkJIH0KLQl9LCB7Ci0JCS8qIDgwMHg2MDAsIDQ4IGtIeiwgNzYgSHosIDUwIE1IeiBQaXhDbG9jayAqLwotCQkubmFtZQk9ICI4MDB4NjAwIiwKLQkJLnZhcgk9IHsKLQkJCS54cmVzCQk9IDgwMCwKLQkJCS55cmVzCQk9IDYwMCwKLQkJCS54cmVzX3ZpcnR1YWwJPSA4MDAsCi0JCQkueXJlc192aXJ0dWFsCT0gNjAwLAotCQkJLmJpdHNfcGVyX3BpeGVsCT0gOCwKLQkJCS5yZWQJCT0geyAubGVuZ3RoID0gOCB9LAotCQkJLmdyZWVuCQk9IHsgLmxlbmd0aCA9IDggfSwKLQkJCS5ibHVlCQk9IHsgLmxlbmd0aCA9IDggfSwKLQkJCS53aWR0aAkJPSAtMSwKLQkJCS5oZWlnaHQJCT0gLTEsCi0JCQkucGl4Y2xvY2sJPSAyMDAwMCwKLQkJCS5sZWZ0X21hcmdpbgk9IDEyOCwKLQkJCS5yaWdodF9tYXJnaW4JPSAxNiwKLQkJCS51cHBlcl9tYXJnaW4JPSAyNCwKLQkJCS5sb3dlcl9tYXJnaW4JPSAyLAotCQkJLmhzeW5jX2xlbgk9IDk2LAotCQkJLnZzeW5jX2xlbgk9IDYsCi0JCQkudm1vZGUJCT0gRkJfVk1PREVfTk9OSU5URVJMQUNFRAotCQkgfQotCX0sIHsKLQkJLyoKLQkJICogTW9kZWxpbmUgZnJvbSBYRjg2Q29uZmlnOgotCQkgKiBNb2RlICIxMDI0eDc2OCIgODAgIDEwMjQgMTEzNiAxMzQwIDE0MzIgIDc2OCA3NzAgNzc0IDgwNQotCQkgKi8KLQkJLyogMTAyNHg3NjgsIDU1Ljgga0h6LCA3MCBIeiwgODAgTUh6IFBpeENsb2NrICovCi0JCS5uYW1lCT0gIjEwMjR4NzY4IiwKLQkJLnZhcgk9IHsKLQkJCS54cmVzCQk9IDEwMjQsCi0JCQkueXJlcwkJPSA3NjgsCi0JCQkueHJlc192aXJ0dWFsCT0gMTAyNCwKLQkJCS55cmVzX3ZpcnR1YWwJPSA3NjgsCi0JCQkuYml0c19wZXJfcGl4ZWwJPSA4LAotCQkJLnJlZAkJPSB7IC5sZW5ndGggPSA4IH0sCi0JCQkuZ3JlZW4JCT0geyAubGVuZ3RoID0gOCB9LAotCQkJLmJsdWUJCT0geyAubGVuZ3RoID0gOCB9LAotCQkJLndpZHRoCQk9IC0xLAotCQkJLmhlaWdodAkJPSAtMSwKLQkJCS5waXhjbG9jawk9IDEyNTAwLAotCQkJLmxlZnRfbWFyZ2luCT0gMTQ0LAotCQkJLnJpZ2h0X21hcmdpbgk9IDMyLAotCQkJLnVwcGVyX21hcmdpbgk9IDMwLAotCQkJLmxvd2VyX21hcmdpbgk9IDIsCi0JCQkuaHN5bmNfbGVuCT0gMTkyLAotCQkJLnZzeW5jX2xlbgk9IDYsCi0JCQkudm1vZGUJCT0gRkJfVk1PREVfTk9OSU5URVJMQUNFRAotCQl9Ci0JfQotfTsKLQotI2RlZmluZSBOVU1fVE9UQUxfTU9ERVMgICAgQVJSQVlfU0laRShjaXJydXNmYl9wcmVkZWZpbmVkKQorc3RhdGljIGludCBub2FjY2VsIF9fZGV2aW5pdGRhdGE7CitzdGF0aWMgY2hhciAqbW9kZV9vcHRpb24gX19kZXZpbml0ZGF0YSA9ICI2NDB4NDgwQDYwIjsKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAvKioqKiBCRUdJTiBQUk9UT1RZUEVTICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTUxNCwxMCArMzk1LDYgQEAKIAkuZmJfaW1hZ2VibGl0CT0gY2lycnVzZmJfaW1hZ2VibGl0LAogfTsKIAotLyotLS0gSGFyZHdhcmUgU3BlY2lmaWMgUm91dGluZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi1zdGF0aWMgaW50IGNpcnJ1c2ZiX2RlY29kZV92YXIoY29uc3Qgc3RydWN0IGZiX3Zhcl9zY3JlZW5pbmZvICp2YXIsCi0JCQkJc3RydWN0IGNpcnJ1c2ZiX3JlZ3MgKnJlZ3MsCi0JCQkJc3RydWN0IGZiX2luZm8gKmluZm8pOwogLyotLS0gSW50ZXJuYWwgcm91dGluZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiBzdGF0aWMgdm9pZCBpbml0X3ZnYWNoaXAoc3RydWN0IGZiX2luZm8gKmluZm8pOwogc3RhdGljIHZvaWQgc3dpdGNoX21vbml0b3Ioc3RydWN0IGNpcnJ1c2ZiX2luZm8gKmNpbmZvLCBpbnQgb24pOwpAQCAtNTQ2LDkgKzQyMyw3IEBACiAJCQkgICAgICB1X3Nob3J0IHdpZHRoLCB1X3Nob3J0IGhlaWdodCwKIAkJCSAgICAgIHVfY2hhciBjb2xvciwgdV9zaG9ydCBsaW5lX2xlbmd0aCk7CiAKLXN0YXRpYyB2b2lkIGJlc3RjbG9jayhsb25nIGZyZXEsIGxvbmcgKmJlc3QsCi0JCSAgICAgIGxvbmcgKm5vbSwgbG9uZyAqZGVuLAotCQkgICAgICBsb25nICpkaXYsIGxvbmcgbWF4ZnJlcSk7CitzdGF0aWMgdm9pZCBiZXN0Y2xvY2sobG9uZyBmcmVxLCBpbnQgKm5vbSwgaW50ICpkZW4sIGludCAqZGl2KTsKIAogI2lmZGVmIENJUlJVU0ZCX0RFQlVHCiBzdGF0aWMgdm9pZCBjaXJydXNmYl9kdW1wKHZvaWQpOwpAQCAtNTg0LDQ1ICs0NTksMjggQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyoqKiogQkVHSU4gSGFyZHdhcmUgc3BlY2lmaWMgUm91dGluZXMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLS8qIEdldCBhIGdvb2QgTUNMSyB2YWx1ZSAqLwotc3RhdGljIGxvbmcgY2lycnVzZmJfZ2V0X21jbGsobG9uZyBmcmVxLCBpbnQgYnBwLCBsb25nICpkaXYpCisvKiBDaGVjayBpZiB0aGUgTUNMSyBpcyBub3QgYSBiZXR0ZXIgY2xvY2sgc291cmNlICovCitzdGF0aWMgaW50IGNpcnJ1c2ZiX2NoZWNrX21jbGsoc3RydWN0IGNpcnJ1c2ZiX2luZm8gKmNpbmZvLCBsb25nIGZyZXEpCiB7Ci0JbG9uZyBtY2xrOworCWxvbmcgbWNsayA9IHZnYV9yc2VxKGNpbmZvLT5yZWdiYXNlLCBDTF9TRVFSMUYpICYgMHgzZjsKIAotCWFzc2VydChkaXYgIT0gTlVMTCk7Ci0KLQkvKiBDYWxjdWxhdGUgTUNMSywgaW4gY2FzZSBWQ0xLIGlzIGhpZ2ggZW5vdWdoIHRvIHJlcXVpcmUgPiA1ME1Iei4KLQkgKiBBc3N1bWUgYSA2NC1iaXQgZGF0YSBwYXRoIGZvciBub3cuICBUaGUgZm9ybXVsYSBpczoKLQkgKiAoKEIgKiBQQ0xLICogMikvVykgKiAxLjIKLQkgKiBCID0gYnl0ZXMgcGVyIHBpeGVsLCBQQ0xLID0gcGl4Y2xvY2ssIFcgPSBkYXRhIHdpZHRoIGluIGJ5dGVzICovCi0JbWNsayA9ICgoYnBwIC8gOCkgKiBmcmVxICogMikgLyA0OwotCW1jbGsgPSAobWNsayAqIDEyKSAvIDEwOwotCWlmIChtY2xrIDwgNTAwMDApCi0JCW1jbGsgPSA1MDAwMDsKLQlEUFJJTlRLKCJVc2UgTUNMSyBvZiAlbGQga0h6XG4iLCBtY2xrKTsKLQotCS8qIENhbGN1bGF0ZSB2YWx1ZSBmb3IgU1IxRi4gIE11bHRpcGx5IGJ5IDIgc28gd2UgY2FuIHJvdW5kIHVwLiAqLwotCW1jbGsgPSAoKG1jbGsgKiAxNikgLyAxNDMxOCk7Ci0JbWNsayA9IChtY2xrICsgMSkgLyAyOwotCURQUklOVEsoIlNldCBTUjFGWzU6MF0gdG8gMHglbHhcbiIsIG1jbGspOworCS8qIFJlYWQgTUNMSyB2YWx1ZSAqLworCW1jbGsgPSAoMTQzMTggKiBtY2xrKSA+PiAzOworCURQUklOVEsoIlJlYWQgTUNMSyBvZiAlbGQga0h6XG4iLCBtY2xrKTsKIAogCS8qIERldGVybWluZSBpZiB3ZSBzaG91bGQgdXNlIE1DTEsgaW5zdGVhZCBvZiBWQ0xLLCBhbmQgaWYgc28sIHdoYXQgd2UKLQkgICAqIHNob3VsZCBkaXZpZGUgaXQgYnkgdG8gZ2V0IFZDTEsgKi8KLQlzd2l0Y2ggKGZyZXEpIHsKLQljYXNlIDI0NzUxIC4uLiAyNTI0OToKLQkJKmRpdiA9IDI7Ci0JCURQUklOVEsoIlVzaW5nIFZDTEsgPSBNQ0xLLzJcbiIpOwotCQlicmVhazsKLQljYXNlIDQ5NTAxIC4uLiA1MDQ5OToKLQkJKmRpdiA9IDE7CisJICogc2hvdWxkIGRpdmlkZSBpdCBieSB0byBnZXQgVkNMSworCSAqLworCisJaWYgKGFicyhmcmVxIC0gbWNsaykgPCAyNTApIHsKIAkJRFBSSU5USygiVXNpbmcgVkNMSyA9IE1DTEtcbiIpOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQkqZGl2ID0gMDsKLQkJYnJlYWs7CisJCXJldHVybiAxOworCX0gZWxzZSBpZiAoYWJzKGZyZXEgLSAobWNsayAvIDIpKSA8IDI1MCkgeworCQlEUFJJTlRLKCJVc2luZyBWQ0xLID0gTUNMSy8yXG4iKTsKKwkJcmV0dXJuIDI7CiAJfQogCi0JcmV0dXJuIG1jbGs7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgY2lycnVzZmJfY2hlY2tfdmFyKHN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyAqdmFyLApAQCAtNjM4LDcgKzQ5Niw2IEBACiAJCWJyZWFrOwkJLyogOCBwaXhlbCBwZXIgYnl0ZSwgb25seSAxLzR0aCBvZiBtZW0gdXNhYmxlICovCiAJY2FzZSA4OgogCWNhc2UgMTY6Ci0JY2FzZSAyNDoKIAljYXNlIDMyOgogCQlicmVhazsJCS8qIDEgcGl4ZWwgPT0gMSBieXRlICovCiAJZGVmYXVsdDoKQEAgLTcxMyw3ICs1NzAsNiBAQAogCQl2YXItPmJsdWUubGVuZ3RoID0gNTsKIAkJYnJlYWs7CiAKLQljYXNlIDI0OgogCWNhc2UgMzI6CiAJCWlmIChpc1BSZVApIHsKIAkJCXZhci0+cmVkLm9mZnNldCA9IDg7CkBAIC03NjcsOCArNjIzLDYgQEAKIAlsb25nIG1heGNsb2NrOwogCWludCBtYXhjbG9ja2lkeCA9IHZhci0+Yml0c19wZXJfcGl4ZWwgPj4gMzsKIAlzdHJ1Y3QgY2lycnVzZmJfaW5mbyAqY2luZm8gPSBpbmZvLT5wYXI7Ci0JaW50IHhyZXMsIGhmcm9udCwgaHN5bmMsIGhiYWNrOwotCWludCB5cmVzLCB2ZnJvbnQsIHZzeW5jLCB2YmFjazsKIAogCXN3aXRjaCAodmFyLT5iaXRzX3Blcl9waXhlbCkgewogCWNhc2UgMToKQEAgLTc4MiwxMCArNjM2LDkgQEAKIAkJYnJlYWs7CiAKIAljYXNlIDE2OgotCWNhc2UgMjQ6CiAJY2FzZSAzMjoKIAkJaW5mby0+Zml4LmxpbmVfbGVuZ3RoID0gdmFyLT54cmVzX3ZpcnR1YWwgKiBtYXhjbG9ja2lkeDsKLQkJaW5mby0+Zml4LnZpc3VhbCA9IEZCX1ZJU1VBTF9ESVJFQ1RDT0xPUjsKKwkJaW5mby0+Zml4LnZpc3VhbCA9IEZCX1ZJU1VBTF9UUlVFQ09MT1I7CiAJCWJyZWFrOwogCiAJZGVmYXVsdDoKQEAgLTgyNyw5MCArNjgwLDMzIEBACiAJc3dpdGNoICh2YXItPmJpdHNfcGVyX3BpeGVsKSB7CiAJY2FzZSAxNjoKIAljYXNlIDMyOgotCQlpZiAocmVncy0+SG9yaXpSZXMgPD0gODAwKQorCQlpZiAodmFyLT54cmVzIDw9IDgwMCkKIAkJCS8qIFhiaCBoYXMgdGhpcyB0eXBlIG9mIGNsb2NrIGZvciAzMi1iaXQgKi8KIAkJCWZyZXEgLz0gMjsKIAkJYnJlYWs7CiAJfQogI2VuZGlmCi0KLQliZXN0Y2xvY2soZnJlcSwgJnJlZ3MtPmZyZXEsICZyZWdzLT5ub20sICZyZWdzLT5kZW4sICZyZWdzLT5kaXYsCi0JCSAgbWF4Y2xvY2spOwotCXJlZ3MtPm1jbGsgPSBjaXJydXNmYl9nZXRfbWNsayhmcmVxLCB2YXItPmJpdHNfcGVyX3BpeGVsLAotCQkJCQkmcmVncy0+ZGl2TUNMSyk7Ci0KLQl4cmVzID0gdmFyLT54cmVzOwotCWhmcm9udCA9IHZhci0+cmlnaHRfbWFyZ2luOwotCWhzeW5jID0gdmFyLT5oc3luY19sZW47Ci0JaGJhY2sgPSB2YXItPmxlZnRfbWFyZ2luOwotCi0JeXJlcyA9IHZhci0+eXJlczsKLQl2ZnJvbnQgPSB2YXItPmxvd2VyX21hcmdpbjsKLQl2c3luYyA9IHZhci0+dnN5bmNfbGVuOwotCXZiYWNrID0gdmFyLT51cHBlcl9tYXJnaW47Ci0KLQlpZiAodmFyLT52bW9kZSAmIEZCX1ZNT0RFX0RPVUJMRSkgewotCQl5cmVzICo9IDI7Ci0JCXZmcm9udCAqPSAyOwotCQl2c3luYyAqPSAyOwotCQl2YmFjayAqPSAyOwotCX0gZWxzZSBpZiAodmFyLT52bW9kZSAmIEZCX1ZNT0RFX0lOVEVSTEFDRUQpIHsKLQkJeXJlcyA9ICh5cmVzICsgMSkgLyAyOwotCQl2ZnJvbnQgPSAodmZyb250ICsgMSkgLyAyOwotCQl2c3luYyA9ICh2c3luYyArIDEpIC8gMjsKLQkJdmJhY2sgPSAodmJhY2sgKyAxKSAvIDI7Ci0JfQotCXJlZ3MtPkhvcml6UmVzID0geHJlczsKLQlyZWdzLT5Ib3JpelRvdGFsID0gKHhyZXMgKyBoZnJvbnQgKyBoc3luYyArIGhiYWNrKSAvIDggLSA1OwotCXJlZ3MtPkhvcml6RGlzcEVuZCA9IHhyZXMgLyA4IC0gMTsKLQlyZWdzLT5Ib3JpekJsYW5rU3RhcnQgPSB4cmVzIC8gODsKLQkvKiBkb2VzIG5vdCBjb3VudCB3aXRoICItNSIgKi8KLQlyZWdzLT5Ib3JpekJsYW5rRW5kID0gcmVncy0+SG9yaXpUb3RhbCArIDU7Ci0JcmVncy0+SG9yaXpTeW5jU3RhcnQgPSAoeHJlcyArIGhmcm9udCkgLyA4ICsgMTsKLQlyZWdzLT5Ib3JpelN5bmNFbmQgPSAoeHJlcyArIGhmcm9udCArIGhzeW5jKSAvIDggKyAxOwotCi0JcmVncy0+VmVydFJlcyA9IHlyZXM7Ci0JcmVncy0+VmVydFRvdGFsID0geXJlcyArIHZmcm9udCArIHZzeW5jICsgdmJhY2sgLSAyOwotCXJlZ3MtPlZlcnREaXNwRW5kID0geXJlcyAtIDE7Ci0JcmVncy0+VmVydEJsYW5rU3RhcnQgPSB5cmVzOwotCXJlZ3MtPlZlcnRCbGFua0VuZCA9IHJlZ3MtPlZlcnRUb3RhbDsKLQlyZWdzLT5WZXJ0U3luY1N0YXJ0ID0geXJlcyArIHZmcm9udCAtIDE7Ci0JcmVncy0+VmVydFN5bmNFbmQgPSB5cmVzICsgdmZyb250ICsgdnN5bmMgLSAxOwotCi0JaWYgKHJlZ3MtPlZlcnRSZXMgPj0gMTAyNCkgewotCQlyZWdzLT5WZXJ0VG90YWwgLz0gMjsKLQkJcmVncy0+VmVydFN5bmNTdGFydCAvPSAyOwotCQlyZWdzLT5WZXJ0U3luY0VuZCAvPSAyOwotCQlyZWdzLT5WZXJ0RGlzcEVuZCAvPSAyOwotCX0KLQlpZiAocmVncy0+bXVsdGlwbGV4aW5nKSB7Ci0JCXJlZ3MtPkhvcml6VG90YWwgLz0gMjsKLQkJcmVncy0+SG9yaXpTeW5jU3RhcnQgLz0gMjsKLQkJcmVncy0+SG9yaXpTeW5jRW5kIC89IDI7Ci0JCXJlZ3MtPkhvcml6RGlzcEVuZCAvPSAyOwotCX0KLQogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBjaXJydXNmYl9zZXRfbWNsayhjb25zdCBzdHJ1Y3QgY2lycnVzZmJfaW5mbyAqY2luZm8sIGludCB2YWwsCi0JCQkJaW50IGRpdikKK3N0YXRpYyB2b2lkIGNpcnJ1c2ZiX3NldF9tY2xrX2FzX3NvdXJjZShjb25zdCBzdHJ1Y3QgY2lycnVzZmJfaW5mbyAqY2luZm8sCisJCQkJCWludCBkaXYpCiB7CisJdW5zaWduZWQgY2hhciBvbGQxZiwgb2xkMWU7CiAJYXNzZXJ0KGNpbmZvICE9IE5VTEwpOworCW9sZDFmID0gdmdhX3JzZXEoY2luZm8tPnJlZ2Jhc2UsIENMX1NFUVIxRikgJiB+MHg0MDsKIAotCWlmIChkaXYgPT0gMikgewotCQkvKiBWQ0xLID0gTUNMSy8yICovCi0JCXVuc2lnbmVkIGNoYXIgb2xkID0gdmdhX3JzZXEoY2luZm8tPnJlZ2Jhc2UsIENMX1NFUVIxRSk7Ci0JCXZnYV93c2VxKGNpbmZvLT5yZWdiYXNlLCBDTF9TRVFSMUUsIG9sZCB8IDB4MSk7Ci0JCXZnYV93c2VxKGNpbmZvLT5yZWdiYXNlLCBDTF9TRVFSMUYsIDB4NDAgfCAodmFsICYgMHgzZikpOwotCX0gZWxzZSBpZiAoZGl2ID09IDEpIHsKLQkJLyogVkNMSyA9IE1DTEsgKi8KLQkJdW5zaWduZWQgY2hhciBvbGQgPSB2Z2FfcnNlcShjaW5mby0+cmVnYmFzZSwgQ0xfU0VRUjFFKTsKLQkJdmdhX3dzZXEoY2luZm8tPnJlZ2Jhc2UsIENMX1NFUVIxRSwgb2xkICYgfjB4MSk7Ci0JCXZnYV93c2VxKGNpbmZvLT5yZWdiYXNlLCBDTF9TRVFSMUYsIDB4NDAgfCAodmFsICYgMHgzZikpOwotCX0gZWxzZSB7Ci0JCXZnYV93c2VxKGNpbmZvLT5yZWdiYXNlLCBDTF9TRVFSMUYsIHZhbCAmIDB4M2YpOworCWlmIChkaXYpIHsKKwkJRFBSSU5USygiU2V0ICVzIGFzIHBpeGNsb2NrIHNvdXJjZS5cbiIsCisJCQkJCShkaXYgPT0gMikgPyAiTUNMSy8yIiA6ICJNQ0xLIik7CisJCW9sZDFmIHw9IDB4NDA7CisJCW9sZDFlID0gdmdhX3JzZXEoY2luZm8tPnJlZ2Jhc2UsIENMX1NFUVIxRSkgJiB+MHgxOworCQlpZiAoZGl2ID09IDIpCisJCQlvbGQxZSB8PSAxOworCisJCXZnYV93c2VxKGNpbmZvLT5yZWdiYXNlLCBDTF9TRVFSMUUsIG9sZDFlKTsKIAl9CisJdmdhX3dzZXEoY2luZm8tPnJlZ2Jhc2UsIENMX1NFUVIxRiwgb2xkMWYpOwogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtOTI3LDYgKzcyMywxMCBAQAogCXVuc2lnbmVkIGNoYXIgdG1wOwogCWludCBvZmZzZXQgPSAwLCBlcnI7CiAJY29uc3Qgc3RydWN0IGNpcnJ1c2ZiX2JvYXJkX2luZm9fcmVjICpiaTsKKwlpbnQgaGRpc3BlbmQsIGhzeW5jc3RhcnQsIGhzeW5jZW5kLCBodG90YWw7CisJaW50IHlyZXMsIHZkaXNwZW5kLCB2c3luY3N0YXJ0LCB2c3luY2VuZCwgdnRvdGFsOworCWxvbmcgZnJlcTsKKwlpbnQgbm9tLCBkZW4sIGRpdjsKIAogCURQUklOVEsoIkVOVEVSXG4iKTsKIAlEUFJJTlRLKCJSZXF1ZXN0ZWQgbW9kZTogJWR4JWR4JWRcbiIsCkBAIC05NDQsNzYgKzc0NCwxMTcgQEAKIAogCWJpID0gJmNpcnJ1c2ZiX2JvYXJkX2luZm9bY2luZm8tPmJ0eXBlXTsKIAorCWhzeW5jc3RhcnQgPSB2YXItPnhyZXMgKyB2YXItPnJpZ2h0X21hcmdpbjsKKwloc3luY2VuZCA9IGhzeW5jc3RhcnQgKyB2YXItPmhzeW5jX2xlbjsKKwlodG90YWwgPSAoaHN5bmNlbmQgKyB2YXItPmxlZnRfbWFyZ2luKSAvIDggLSA1OworCWhkaXNwZW5kID0gdmFyLT54cmVzIC8gOCAtIDE7CisJaHN5bmNzdGFydCA9IGhzeW5jc3RhcnQgLyA4ICsgMTsKKwloc3luY2VuZCA9IGhzeW5jZW5kIC8gOCArIDE7CisKKwl5cmVzID0gdmFyLT55cmVzOworCXZzeW5jc3RhcnQgPSB5cmVzICsgdmFyLT5sb3dlcl9tYXJnaW47CisJdnN5bmNlbmQgPSB2c3luY3N0YXJ0ICsgdmFyLT52c3luY19sZW47CisJdnRvdGFsID0gdnN5bmNlbmQgKyB2YXItPnVwcGVyX21hcmdpbjsKKwl2ZGlzcGVuZCA9IHlyZXMgLSAxOworCisJaWYgKHZhci0+dm1vZGUgJiBGQl9WTU9ERV9ET1VCTEUpIHsKKwkJeXJlcyAqPSAyOworCQl2c3luY3N0YXJ0ICo9IDI7CisJCXZzeW5jZW5kICo9IDI7CisJCXZ0b3RhbCAqPSAyOworCX0gZWxzZSBpZiAodmFyLT52bW9kZSAmIEZCX1ZNT0RFX0lOVEVSTEFDRUQpIHsKKwkJeXJlcyA9ICh5cmVzICsgMSkgLyAyOworCQl2c3luY3N0YXJ0ID0gKHZzeW5jc3RhcnQgKyAxKSAvIDI7CisJCXZzeW5jZW5kID0gKHZzeW5jZW5kICsgMSkgLyAyOworCQl2dG90YWwgPSAodnRvdGFsICsgMSkgLyAyOworCX0KKworCXZ0b3RhbCAtPSAyOworCXZzeW5jc3RhcnQgLT0gMTsKKwl2c3luY2VuZCAtPSAxOworCisJaWYgKHlyZXMgPj0gMTAyNCkgeworCQl2dG90YWwgLz0gMjsKKwkJdnN5bmNzdGFydCAvPSAyOworCQl2c3luY2VuZCAvPSAyOworCQl2ZGlzcGVuZCAvPSAyOworCX0KKwlpZiAocmVncy5tdWx0aXBsZXhpbmcpIHsKKwkJaHRvdGFsIC89IDI7CisJCWhzeW5jc3RhcnQgLz0gMjsKKwkJaHN5bmNlbmQgLz0gMjsKKwkJaGRpc3BlbmQgLz0gMjsKKwl9CiAJLyogdW5sb2NrIHJlZ2lzdGVyIFZHQV9DUlRDX0hfVE9UQUwuLkNSVDcgKi8KIAl2Z2Ffd2NydChyZWdiYXNlLCBWR0FfQ1JUQ19WX1NZTkNfRU5ELCAweDIwKTsJLyogcHJldmlvdXNseTogMHgwMCkgKi8KIAogCS8qIGlmIGRlYnVnZ2luZyBpcyBlbmFibGVkLCBhbGwgcGFyYW1ldGVycyBnZXQgb3V0cHV0IGJlZm9yZSB3cml0aW5nICovCi0JRFBSSU5USygiQ1JUMDogJWxkXG4iLCByZWdzLkhvcml6VG90YWwpOwotCXZnYV93Y3J0KHJlZ2Jhc2UsIFZHQV9DUlRDX0hfVE9UQUwsIHJlZ3MuSG9yaXpUb3RhbCk7CisJRFBSSU5USygiQ1JUMDogJWRcbiIsIGh0b3RhbCk7CisJdmdhX3djcnQocmVnYmFzZSwgVkdBX0NSVENfSF9UT1RBTCwgaHRvdGFsKTsKIAotCURQUklOVEsoIkNSVDE6ICVsZFxuIiwgcmVncy5Ib3JpekRpc3BFbmQpOwotCXZnYV93Y3J0KHJlZ2Jhc2UsIFZHQV9DUlRDX0hfRElTUCwgcmVncy5Ib3JpekRpc3BFbmQpOworCURQUklOVEsoIkNSVDE6ICVkXG4iLCBoZGlzcGVuZCk7CisJdmdhX3djcnQocmVnYmFzZSwgVkdBX0NSVENfSF9ESVNQLCBoZGlzcGVuZCk7CiAKLQlEUFJJTlRLKCJDUlQyOiAlbGRcbiIsIHJlZ3MuSG9yaXpCbGFua1N0YXJ0KTsKLQl2Z2Ffd2NydChyZWdiYXNlLCBWR0FfQ1JUQ19IX0JMQU5LX1NUQVJULCByZWdzLkhvcml6QmxhbmtTdGFydCk7CisJRFBSSU5USygiQ1JUMjogJWRcbiIsIHZhci0+eHJlcyAvIDgpOworCXZnYV93Y3J0KHJlZ2Jhc2UsIFZHQV9DUlRDX0hfQkxBTktfU1RBUlQsIHZhci0+eHJlcyAvIDgpOwogCiAJLyogICsgMTI4OiBDb21wYXRpYmxlIHJlYWQgKi8KLQlEUFJJTlRLKCJDUlQzOiAxMjgrJWxkXG4iLCByZWdzLkhvcml6QmxhbmtFbmQgJSAzMik7CisJRFBSSU5USygiQ1JUMzogMTI4KyVkXG4iLCAoaHRvdGFsICsgNSkgJSAzMik7CiAJdmdhX3djcnQocmVnYmFzZSwgVkdBX0NSVENfSF9CTEFOS19FTkQsCi0JCSAxMjggKyAocmVncy5Ib3JpekJsYW5rRW5kICUgMzIpKTsKKwkJIDEyOCArICgoaHRvdGFsICsgNSkgJSAzMikpOwogCi0JRFBSSU5USygiQ1JUNDogJWxkXG4iLCByZWdzLkhvcml6U3luY1N0YXJ0KTsKLQl2Z2Ffd2NydChyZWdiYXNlLCBWR0FfQ1JUQ19IX1NZTkNfU1RBUlQsIHJlZ3MuSG9yaXpTeW5jU3RhcnQpOworCURQUklOVEsoIkNSVDQ6ICVkXG4iLCBoc3luY3N0YXJ0KTsKKwl2Z2Ffd2NydChyZWdiYXNlLCBWR0FfQ1JUQ19IX1NZTkNfU1RBUlQsIGhzeW5jc3RhcnQpOwogCi0JdG1wID0gcmVncy5Ib3JpelN5bmNFbmQgJSAzMjsKLQlpZiAocmVncy5Ib3JpekJsYW5rRW5kICYgMzIpCisJdG1wID0gaHN5bmNlbmQgJSAzMjsKKwlpZiAoKGh0b3RhbCArIDUpICYgMzIpCiAJCXRtcCArPSAxMjg7CiAJRFBSSU5USygiQ1JUNTogJWRcbiIsIHRtcCk7CiAJdmdhX3djcnQocmVnYmFzZSwgVkdBX0NSVENfSF9TWU5DX0VORCwgdG1wKTsKIAotCURQUklOVEsoIkNSVDY6ICVsZFxuIiwgcmVncy5WZXJ0VG90YWwgJiAweGZmKTsKLQl2Z2Ffd2NydChyZWdiYXNlLCBWR0FfQ1JUQ19WX1RPVEFMLCAocmVncy5WZXJ0VG90YWwgJiAweGZmKSk7CisJRFBSSU5USygiQ1JUNjogJWRcbiIsIHZ0b3RhbCAmIDB4ZmYpOworCXZnYV93Y3J0KHJlZ2Jhc2UsIFZHQV9DUlRDX1ZfVE9UQUwsIHZ0b3RhbCAmIDB4ZmYpOwogCiAJdG1wID0gMTY7CQkvKiBMaW5lQ29tcGFyZSBiaXQgIzkgKi8KLQlpZiAocmVncy5WZXJ0VG90YWwgJiAyNTYpCisJaWYgKHZ0b3RhbCAmIDI1NikKIAkJdG1wIHw9IDE7Ci0JaWYgKHJlZ3MuVmVydERpc3BFbmQgJiAyNTYpCisJaWYgKHZkaXNwZW5kICYgMjU2KQogCQl0bXAgfD0gMjsKLQlpZiAocmVncy5WZXJ0U3luY1N0YXJ0ICYgMjU2KQorCWlmICh2c3luY3N0YXJ0ICYgMjU2KQogCQl0bXAgfD0gNDsKLQlpZiAocmVncy5WZXJ0QmxhbmtTdGFydCAmIDI1NikKKwlpZiAoKHZkaXNwZW5kICsgMSkgJiAyNTYpCiAJCXRtcCB8PSA4OwotCWlmIChyZWdzLlZlcnRUb3RhbCAmIDUxMikKKwlpZiAodnRvdGFsICYgNTEyKQogCQl0bXAgfD0gMzI7Ci0JaWYgKHJlZ3MuVmVydERpc3BFbmQgJiA1MTIpCisJaWYgKHZkaXNwZW5kICYgNTEyKQogCQl0bXAgfD0gNjQ7Ci0JaWYgKHJlZ3MuVmVydFN5bmNTdGFydCAmIDUxMikKKwlpZiAodnN5bmNzdGFydCAmIDUxMikKIAkJdG1wIHw9IDEyODsKIAlEUFJJTlRLKCJDUlQ3OiAlZFxuIiwgdG1wKTsKIAl2Z2Ffd2NydChyZWdiYXNlLCBWR0FfQ1JUQ19PVkVSRkxPVywgdG1wKTsKIAogCXRtcCA9IDB4NDA7CQkvKiBMaW5lQ29tcGFyZSBiaXQgIzggKi8KLQlpZiAocmVncy5WZXJ0QmxhbmtTdGFydCAmIDUxMikKKwlpZiAoKHZkaXNwZW5kICsgMSkgJiA1MTIpCiAJCXRtcCB8PSAweDIwOwogCWlmICh2YXItPnZtb2RlICYgRkJfVk1PREVfRE9VQkxFKQogCQl0bXAgfD0gMHg4MDsKIAlEUFJJTlRLKCJDUlQ5OiAlZFxuIiwgdG1wKTsKIAl2Z2Ffd2NydChyZWdiYXNlLCBWR0FfQ1JUQ19NQVhfU0NBTiwgdG1wKTsKIAotCURQUklOVEsoIkNSVDEwOiAlbGRcbiIsIHJlZ3MuVmVydFN5bmNTdGFydCAmIDB4ZmYpOwotCXZnYV93Y3J0KHJlZ2Jhc2UsIFZHQV9DUlRDX1ZfU1lOQ19TVEFSVCwgcmVncy5WZXJ0U3luY1N0YXJ0ICYgMHhmZik7CisJRFBSSU5USygiQ1JUMTA6ICVkXG4iLCB2c3luY3N0YXJ0ICYgMHhmZik7CisJdmdhX3djcnQocmVnYmFzZSwgVkdBX0NSVENfVl9TWU5DX1NUQVJULCB2c3luY3N0YXJ0ICYgMHhmZik7CiAKLQlEUFJJTlRLKCJDUlQxMTogNjQrMzIrJWxkXG4iLCByZWdzLlZlcnRTeW5jRW5kICUgMTYpOwotCXZnYV93Y3J0KHJlZ2Jhc2UsIFZHQV9DUlRDX1ZfU1lOQ19FTkQsIHJlZ3MuVmVydFN5bmNFbmQgJSAxNiArIDY0ICsgMzIpOworCURQUklOVEsoIkNSVDExOiA2NCszMislZFxuIiwgdnN5bmNlbmQgJSAxNik7CisJdmdhX3djcnQocmVnYmFzZSwgVkdBX0NSVENfVl9TWU5DX0VORCwgdnN5bmNlbmQgJSAxNiArIDY0ICsgMzIpOwogCi0JRFBSSU5USygiQ1JUMTI6ICVsZFxuIiwgcmVncy5WZXJ0RGlzcEVuZCAmIDB4ZmYpOwotCXZnYV93Y3J0KHJlZ2Jhc2UsIFZHQV9DUlRDX1ZfRElTUF9FTkQsIHJlZ3MuVmVydERpc3BFbmQgJiAweGZmKTsKKwlEUFJJTlRLKCJDUlQxMjogJWRcbiIsIHZkaXNwZW5kICYgMHhmZik7CisJdmdhX3djcnQocmVnYmFzZSwgVkdBX0NSVENfVl9ESVNQX0VORCwgdmRpc3BlbmQgJiAweGZmKTsKIAotCURQUklOVEsoIkNSVDE1OiAlbGRcbiIsIHJlZ3MuVmVydEJsYW5rU3RhcnQgJiAweGZmKTsKLQl2Z2Ffd2NydChyZWdiYXNlLCBWR0FfQ1JUQ19WX0JMQU5LX1NUQVJULCByZWdzLlZlcnRCbGFua1N0YXJ0ICYgMHhmZik7CisJRFBSSU5USygiQ1JUMTU6ICVkXG4iLCAodmRpc3BlbmQgKyAxKSAmIDB4ZmYpOworCXZnYV93Y3J0KHJlZ2Jhc2UsIFZHQV9DUlRDX1ZfQkxBTktfU1RBUlQsICh2ZGlzcGVuZCArIDEpICYgMHhmZik7CiAKLQlEUFJJTlRLKCJDUlQxNjogJWxkXG4iLCByZWdzLlZlcnRCbGFua0VuZCAmIDB4ZmYpOwotCXZnYV93Y3J0KHJlZ2Jhc2UsIFZHQV9DUlRDX1ZfQkxBTktfRU5ELCByZWdzLlZlcnRCbGFua0VuZCAmIDB4ZmYpOworCURQUklOVEsoIkNSVDE2OiAlZFxuIiwgdnRvdGFsICYgMHhmZik7CisJdmdhX3djcnQocmVnYmFzZSwgVkdBX0NSVENfVl9CTEFOS19FTkQsIHZ0b3RhbCAmIDB4ZmYpOwogCiAJRFBSSU5USygiQ1JUMTg6IDB4ZmZcbiIpOwogCXZnYV93Y3J0KHJlZ2Jhc2UsIFZHQV9DUlRDX0xJTkVfQ09NUEFSRSwgMHhmZik7CkBAIC0xMDIxLDM4ICs4NjIsNTMgQEAKIAl0bXAgPSAwOwogCWlmICh2YXItPnZtb2RlICYgRkJfVk1PREVfSU5URVJMQUNFRCkKIAkJdG1wIHw9IDE7Ci0JaWYgKHJlZ3MuSG9yaXpCbGFua0VuZCAmIDY0KQorCWlmICgoaHRvdGFsICsgNSkgJiA2NCkKIAkJdG1wIHw9IDE2OwotCWlmIChyZWdzLkhvcml6QmxhbmtFbmQgJiAxMjgpCisJaWYgKChodG90YWwgKyA1KSAmIDEyOCkKIAkJdG1wIHw9IDMyOwotCWlmIChyZWdzLlZlcnRCbGFua0VuZCAmIDI1NikKKwlpZiAodnRvdGFsICYgMjU2KQogCQl0bXAgfD0gNjQ7Ci0JaWYgKHJlZ3MuVmVydEJsYW5rRW5kICYgNTEyKQorCWlmICh2dG90YWwgJiA1MTIpCiAJCXRtcCB8PSAxMjg7CiAKIAlEUFJJTlRLKCJDUlQxYTogJWRcbiIsIHRtcCk7CiAJdmdhX3djcnQocmVnYmFzZSwgQ0xfQ1JUMUEsIHRtcCk7CiAKKwlmcmVxID0gUElDT1MyS0haKHZhci0+cGl4Y2xvY2spOworCWJlc3RjbG9jayhmcmVxLCAmbm9tLCAmZGVuLCAmZGl2KTsKKwogCS8qIHNldCBWQ0xLMCAqLwogCS8qIGhhcmR3YXJlIFJlZkNsb2NrOiAxNC4zMTgxOCBNSHogKi8KIAkvKiBmb3JtdWxhOiBWQ2xrID0gKE9TQyAqIE4pIC8gKEQgKiAoMStQKSkgKi8KIAkvKiBFeGFtcGxlOiBWQ2xrID0gKDE0LjMxODE4ICogOTEpIC8gKDIzICogKDErMSkpID0gMjguMzI1IE1IeiAqLwogCi0JdmdhX3dzZXEocmVnYmFzZSwgQ0xfU0VRUkIsIHJlZ3Mubm9tKTsKLQl0bXAgPSByZWdzLmRlbiA8PCAxOwotCWlmIChyZWdzLmRpdiAhPSAwKQotCQl0bXAgfD0gMTsKKwlpZiAoY2luZm8tPmJ0eXBlID09IEJUX0FMUElORSkgeworCQkvKiBpZiBmcmVxIGlzIGNsb3NlIHRvIG1jbGsgb3IgbWNsay8yIHNlbGVjdCBtY2xrCisJCSAqIGFzIGNsb2NrIHNvdXJjZQorCQkgKi8KKwkJaW50IGRpdk1DTEsgPSBjaXJydXNmYl9jaGVja19tY2xrKGNpbmZvLCBmcmVxKTsKKwkJaWYgKGRpdk1DTEspICB7CisJCQlub20gPSAwOworCQkJY2lycnVzZmJfc2V0X21jbGtfYXNfc291cmNlKGNpbmZvLCBkaXZNQ0xLKTsKKwkJfQorCX0KKwlpZiAobm9tKSB7CisJCXZnYV93c2VxKHJlZ2Jhc2UsIENMX1NFUVJCLCBub20pOworCQl0bXAgPSBkZW4gPDwgMTsKKwkJaWYgKGRpdiAhPSAwKQorCQkJdG1wIHw9IDE7CiAKLQkvKiA2IGJpdCBkZW5vbTsgT05MWSA1NDM0ISEhIChidWdnZWQgbWUgMTAgZGF5cykgKi8KLQlpZiAoKGNpbmZvLT5idHlwZSA9PSBCVF9TRDY0KSB8fAotCSAgICAoY2luZm8tPmJ0eXBlID09IEJUX0FMUElORSkgfHwKLQkgICAgKGNpbmZvLT5idHlwZSA9PSBCVF9HRDU0ODApKQotCQl0bXAgfD0gMHg4MDsKKwkJLyogNiBiaXQgZGVub207IE9OTFkgNTQzNCEhISAoYnVnZ2VkIG1lIDEwIGRheXMpICovCisJCWlmICgoY2luZm8tPmJ0eXBlID09IEJUX1NENjQpIHx8CisJCSAgICAoY2luZm8tPmJ0eXBlID09IEJUX0FMUElORSkgfHwKKwkJICAgIChjaW5mby0+YnR5cGUgPT0gQlRfR0Q1NDgwKSkKKwkJCXRtcCB8PSAweDgwOwogCi0JRFBSSU5USygiQ0xfU0VRUjFCOiAlbGRcbiIsIChsb25nKSB0bXApOwotCXZnYV93c2VxKHJlZ2Jhc2UsIENMX1NFUVIxQiwgdG1wKTsKKwkJRFBSSU5USygiQ0xfU0VRUjFCOiAlbGRcbiIsIChsb25nKSB0bXApOworCQl2Z2Ffd3NlcShyZWdiYXNlLCBDTF9TRVFSMUIsIHRtcCk7CisJfQogCi0JaWYgKHJlZ3MuVmVydFJlcyA+PSAxMDI0KQorCWlmICh5cmVzID49IDEwMjQpCiAJCS8qIDEyODB4MTAyNCAqLwogCQl2Z2Ffd2NydChyZWdiYXNlLCBWR0FfQ1JUQ19NT0RFLCAweGM3KTsKIAllbHNlCkBAIC0xMDY2LDcgKzkyMiw3IEBACiAJLyogZG9uJ3Qga25vdyBpZiBpdCB3b3VsZCBodXJ0IHRvIGFsc28gcHJvZ3JhbSB0aGlzIGlmIG5vIGludGVybGFjZWQgKi8KIAkvKiBtb2RlIGlzIHVzZWQsIGJ1dCBJIGZlZWwgYmV0dGVyIHRoaXMgd2F5Li4gOi0pICovCiAJaWYgKHZhci0+dm1vZGUgJiBGQl9WTU9ERV9JTlRFUkxBQ0VEKQotCQl2Z2Ffd2NydChyZWdiYXNlLCBWR0FfQ1JUQ19SRUdTLCByZWdzLkhvcml6VG90YWwgLyAyKTsKKwkJdmdhX3djcnQocmVnYmFzZSwgVkdBX0NSVENfUkVHUywgaHRvdGFsIC8gMik7CiAJZWxzZQogCQl2Z2Ffd2NydChyZWdiYXNlLCBWR0FfQ1JUQ19SRUdTLCAweDAwKTsJLyogaW50ZXJsYWNlIGNvbnRyb2wgKi8KIApAQCAtMTI0MCw3ICsxMDk2LDYgQEAKIAogCQljYXNlIEJUX0FMUElORToKIAkJCURQUklOVEsoIiAoZm9yIEdENTQzeClcbiIpOwotCQkJY2lycnVzZmJfc2V0X21jbGsoY2luZm8sIHJlZ3MubWNsaywgcmVncy5kaXZNQ0xLKTsKIAkJCS8qIFdlIGFscmVhZHkgc2V0IFNSRiBhbmQgU1IxRiAqLwogCQkJYnJlYWs7CiAKQEAgLTEzMTIsMTEgKzExNjcsNyBAQAogCiAJCWNhc2UgQlRfQUxQSU5FOgogCQkJRFBSSU5USygiIChmb3IgR0Q1NDN4KVxuIik7Ci0JCQlpZiAocmVncy5Ib3JpelJlcyA+PSAxMDI0KQotCQkJCXZnYV93c2VxKHJlZ2Jhc2UsIENMX1NFUVI3LCAweGE3KTsKLQkJCWVsc2UKLQkJCQl2Z2Ffd3NlcShyZWdiYXNlLCBDTF9TRVFSNywgMHhhMyk7Ci0JCQljaXJydXNmYl9zZXRfbWNsayhjaW5mbywgcmVncy5tY2xrLCByZWdzLmRpdk1DTEspOworCQkJdmdhX3dzZXEocmVnYmFzZSwgQ0xfU0VRUjcsIDB4YTcpOwogCQkJYnJlYWs7CiAKIAkJY2FzZSBCVF9HRDU0ODA6CkBAIC0xMzYwLDcgKzEyMTEsNyBAQAogCSAqLwogCiAJZWxzZSBpZiAodmFyLT5iaXRzX3Blcl9waXhlbCA9PSAzMikgewotCQlEUFJJTlRLKCJjaXJydXNmYjogcHJlcGFyaW5nIGZvciAyNC8zMiBiaXQgZGVlcCBkaXNwbGF5XG4iKTsKKwkJRFBSSU5USygiY2lycnVzZmI6IHByZXBhcmluZyBmb3IgMzIgYml0IGRlZXAgZGlzcGxheVxuIik7CiAJCXN3aXRjaCAoY2luZm8tPmJ0eXBlKSB7CiAJCWNhc2UgQlRfU0Q2NDoKIAkJCS8qIEV4dGVuZGVkIFNlcXVlbmNlciBNb2RlOiAyNTZjIGNvbC4gbW9kZSAqLwpAQCAtMTM5NCw3ICsxMjQ1LDYgQEAKIAkJY2FzZSBCVF9BTFBJTkU6CiAJCQlEUFJJTlRLKCIgKGZvciBHRDU0M3gpXG4iKTsKIAkJCXZnYV93c2VxKHJlZ2Jhc2UsIENMX1NFUVI3LCAweGE5KTsKLQkJCWNpcnJ1c2ZiX3NldF9tY2xrKGNpbmZvLCByZWdzLm1jbGssIHJlZ3MuZGl2TUNMSyk7CiAJCQlicmVhazsKIAogCQljYXNlIEJUX0dENTQ4MDoKQEAgLTE5NDksOCArMTc5OSw2IEBACiAJLyogbWlzYy4uLiAqLwogCVdIRFIoY2luZm8sIDApOwkvKiBIaWRkZW4gREFDIHJlZ2lzdGVyOiAtICovCiAKLQlwcmludGsoS0VSTl9ERUJVRyAiY2lycnVzZmI6IFRoaXMgYm9hcmQgaGFzICVsZCBieXRlcyBvZiBEUkFNIG1lbW9yeVxuIiwKLQkJaW5mby0+c2NyZWVuX3NpemUpOwogCURQUklOVEsoIkVYSVRcbiIpOwogCXJldHVybjsKIH0KQEAgLTIxMjIsNyArMTk3MCw3IEBACiAgKiBiYXNlZCBvbiB0aGUgRFJBTSBiYW5kd2lkdGggYml0IGFuZCBEUkFNIGJhbmsgc3dpdGNoaW5nIGJpdC4gIFRoaXMKICAqIHdvcmtzIHdpdGggMU1CLCAyTUIgYW5kIDRNQiBjb25maWd1cmF0aW9ucyAod2hpY2ggdGhlIE1vdG9yb2xhIGJvYXJkcwogICogc2VlbSB0byBoYXZlLiAqLwotc3RhdGljIHVuc2lnbmVkIGludCBjaXJydXNmYl9nZXRfbWVtc2l6ZSh1OCBfX2lvbWVtICpyZWdiYXNlKQorc3RhdGljIHVuc2lnbmVkIGludCBfX2RldmluaXQgY2lycnVzZmJfZ2V0X21lbXNpemUodTggX19pb21lbSAqcmVnYmFzZSkKIHsKIAl1bnNpZ25lZCBsb25nIG1lbTsKIAl1bnNpZ25lZCBjaGFyIFNSRjsKQEAgLTIxODgsOCArMjAzNiw3IEBACiAKIHN0YXRpYyB2b2lkIGNpcnJ1c2ZiX3BjaV91bm1hcChzdHJ1Y3QgZmJfaW5mbyAqaW5mbykKIHsKLQlzdHJ1Y3QgY2lycnVzZmJfaW5mbyAqY2luZm8gPSBpbmZvLT5wYXI7Ci0Jc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBjaW5mby0+cGRldjsKKwlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHRvX3BjaV9kZXYoaW5mby0+ZGV2aWNlKTsKIAogCWlvdW5tYXAoaW5mby0+c2NyZWVuX2Jhc2UpOwogI2lmIDAgLyogaWYgc3lzdGVtIGRpZG4ndCBjbGFpbSB0aGlzIHJlZ2lvbiwgd2Ugd291bGQuLi4gKi8KQEAgLTIyMDUsMjAgKzIwNTIsMjIgQEAKIHN0YXRpYyB2b2lkIF9fZGV2ZXhpdCBjaXJydXNmYl96b3Jyb191bm1hcChzdHJ1Y3QgZmJfaW5mbyAqaW5mbykKIHsKIAlzdHJ1Y3QgY2lycnVzZmJfaW5mbyAqY2luZm8gPSBpbmZvLT5wYXI7Ci0Jem9ycm9fcmVsZWFzZV9kZXZpY2UoY2luZm8tPnpkZXYpOworCXN0cnVjdCB6b3Jyb19kZXYgKnpkZXYgPSB0b196b3Jyb19kZXYoaW5mby0+ZGV2aWNlKTsKKworCXpvcnJvX3JlbGVhc2VfZGV2aWNlKHpkZXYpOwogCiAJaWYgKGNpbmZvLT5idHlwZSA9PSBCVF9QSUNBU1NPNCkgewogCQljaW5mby0+cmVnYmFzZSAtPSAweDYwMDAwMDsKIAkJaW91bm1hcCgodm9pZCAqKWNpbmZvLT5yZWdiYXNlKTsKIAkJaW91bm1hcChpbmZvLT5zY3JlZW5fYmFzZSk7CiAJfSBlbHNlIHsKLQkJaWYgKHpvcnJvX3Jlc291cmNlX3N0YXJ0KGNpbmZvLT56ZGV2KSA+IDB4MDEwMDAwMDApCisJCWlmICh6b3Jyb19yZXNvdXJjZV9zdGFydCh6ZGV2KSA+IDB4MDEwMDAwMDApCiAJCQlpb3VubWFwKGluZm8tPnNjcmVlbl9iYXNlKTsKIAl9CiB9CiAjZW5kaWYgLyogQ09ORklHX1pPUlJPICovCiAKLXN0YXRpYyBpbnQgY2lycnVzZmJfc2V0X2ZiaW5mbyhzdHJ1Y3QgZmJfaW5mbyAqaW5mbykKK3N0YXRpYyBpbnQgX19kZXZpbml0IGNpcnJ1c2ZiX3NldF9mYmluZm8oc3RydWN0IGZiX2luZm8gKmluZm8pCiB7CiAJc3RydWN0IGNpcnJ1c2ZiX2luZm8gKmNpbmZvID0gaW5mby0+cGFyOwogCXN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyAqdmFyID0gJmluZm8tPnZhcjsKQEAgLTIyMzUsNyArMjA4NCw3IEBACiAJaWYgKGNpbmZvLT5idHlwZSA9PSBCVF9HRDU0ODApIHsKIAkJaWYgKHZhci0+Yml0c19wZXJfcGl4ZWwgPT0gMTYpCiAJCQlpbmZvLT5zY3JlZW5fYmFzZSArPSAxICogTUJfOwotCQlpZiAodmFyLT5iaXRzX3Blcl9waXhlbCA9PSAyNCB8fCB2YXItPmJpdHNfcGVyX3BpeGVsID09IDMyKQorCQlpZiAodmFyLT5iaXRzX3Blcl9waXhlbCA9PSAzMikKIAkJCWluZm8tPnNjcmVlbl9iYXNlICs9IDIgKiBNQl87CiAJfQogCkBAIC0yMjYyLDcgKzIxMTEsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGNpcnJ1c2ZiX3JlZ2lzdGVyKHN0cnVjdCBmYl9pbmZvICppbmZvKQorc3RhdGljIGludCBfX2RldmluaXQgY2lycnVzZmJfcmVnaXN0ZXIoc3RydWN0IGZiX2luZm8gKmluZm8pCiB7CiAJc3RydWN0IGNpcnJ1c2ZiX2luZm8gKmNpbmZvID0gaW5mby0+cGFyOwogCWludCBlcnI7CkBAIC0yMjc4LDIzICsyMTI3LDI3IEBACiAJLyogc2FuaXR5IGNoZWNrcyAqLwogCWFzc2VydChidHlwZSAhPSBCVF9OT05FKTsKIAorCS8qIHNldCBhbGwgdGhlIHZpdGFsIHN0dWZmICovCisJY2lycnVzZmJfc2V0X2ZiaW5mbyhpbmZvKTsKKwogCURQUklOVEsoImNpcnJ1c2ZiOiAoUkFNIHN0YXJ0IHNldCB0bzogMHglcClcbiIsIGluZm8tPnNjcmVlbl9iYXNlKTsKIAotCS8qIE1ha2UgcHJldGVuZCB3ZSd2ZSBzZXQgdGhlIHZhciBzbyBvdXIgc3RydWN0dXJlcyBhcmUgaW4gYSAiZ29vZCIgKi8KLQkvKiBzdGF0ZSwgZXZlbiB0aG91Z2ggd2UgaGF2ZW4ndCB3cml0dGVuIHRoZSBtb2RlIHRvIHRoZSBodyB5ZXQuLi4gICovCi0JaW5mby0+dmFyID0gY2lycnVzZmJfcHJlZGVmaW5lZFtjaXJydXNmYl9kZWZfbW9kZV0udmFyOworCWVyciA9IGZiX2ZpbmRfbW9kZSgmaW5mby0+dmFyLCBpbmZvLCBtb2RlX29wdGlvbiwgTlVMTCwgMCwgTlVMTCwgOCk7CisJaWYgKCFlcnIpIHsKKwkJRFBSSU5USygid3JvbmcgaW5pdGlhbCB2aWRlbyBtb2RlXG4iKTsKKwkJZXJyID0gLUVJTlZBTDsKKwkJZ290byBlcnJfZGVhbGxvY19jbWFwOworCX0KKwogCWluZm8tPnZhci5hY3RpdmF0ZSA9IEZCX0FDVElWQVRFX05PVzsKIAogCWVyciA9IGNpcnJ1c2ZiX2RlY29kZV92YXIoJmluZm8tPnZhciwgJmNpbmZvLT5jdXJyZW50bW9kZSwgaW5mbyk7CiAJaWYgKGVyciA8IDApIHsKIAkJLyogc2hvdWxkIG5ldmVyIGhhcHBlbiAqLwogCQlEUFJJTlRLKCJjaG9raW5nIG9uIGRlZmF1bHQgdmFyLi4uIHVtbSwgbm8gZ29vZC5cbiIpOwotCQlnb3RvIGVycl91bm1hcF9jaXJydXNmYjsKKwkJZ290byBlcnJfZGVhbGxvY19jbWFwOwogCX0KIAotCS8qIHNldCBhbGwgdGhlIHZpdGFsIHN0dWZmICovCi0JY2lycnVzZmJfc2V0X2ZiaW5mbyhpbmZvKTsKLQogCWVyciA9IHJlZ2lzdGVyX2ZyYW1lYnVmZmVyKGluZm8pOwogCWlmIChlcnIgPCAwKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiY2lycnVzZmI6IGNvdWxkIG5vdCByZWdpc3RlciAiCkBAIC0yMzA3LDcgKzIxNjAsNiBAQAogCiBlcnJfZGVhbGxvY19jbWFwOgogCWZiX2RlYWxsb2NfY21hcCgmaW5mby0+Y21hcCk7Ci1lcnJfdW5tYXBfY2lycnVzZmI6CiAJY2luZm8tPnVubWFwKGluZm8pOwogCWZyYW1lYnVmZmVyX3JlbGVhc2UoaW5mbyk7CiAJcmV0dXJuIGVycjsKQEAgLTIzMzAsOCArMjE4Miw4IEBACiB9CiAKICNpZmRlZiBDT05GSUdfUENJCi1zdGF0aWMgaW50IGNpcnJ1c2ZiX3BjaV9yZWdpc3RlcihzdHJ1Y3QgcGNpX2RldiAqcGRldiwKLQkJCQkgIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpCitzdGF0aWMgaW50IF9fZGV2aW5pdCBjaXJydXNmYl9wY2lfcmVnaXN0ZXIoc3RydWN0IHBjaV9kZXYgKnBkZXYsCisJCQkJCSAgIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpCiB7CiAJc3RydWN0IGNpcnJ1c2ZiX2luZm8gKmNpbmZvOwogCXN0cnVjdCBmYl9pbmZvICppbmZvOwpAQCAtMjM1Myw3ICsyMjA1LDYgQEAKIAl9CiAKIAljaW5mbyA9IGluZm8tPnBhcjsKLQljaW5mby0+cGRldiA9IHBkZXY7CiAJY2luZm8tPmJ0eXBlID0gYnR5cGUgPSAoZW51bSBjaXJydXNfYm9hcmQpIGVudC0+ZHJpdmVyX2RhdGE7CiAKIAlEUFJJTlRLKCIgRm91bmQgUENJIGRldmljZSwgYmFzZSBhZGRyZXNzIDAgaXMgMHgleCwgYnR5cGUgc2V0IHRvICVkXG4iLApAQCAtMjQ1OSw4ICsyMzEwLDggQEAKICNlbmRpZiAvKiBDT05GSUdfUENJICovCiAKICNpZmRlZiBDT05GSUdfWk9SUk8KLXN0YXRpYyBpbnQgY2lycnVzZmJfem9ycm9fcmVnaXN0ZXIoc3RydWN0IHpvcnJvX2RldiAqeiwKLQkJCQkgICBjb25zdCBzdHJ1Y3Qgem9ycm9fZGV2aWNlX2lkICplbnQpCitzdGF0aWMgaW50IF9fZGV2aW5pdCBjaXJydXNmYl96b3Jyb19yZWdpc3RlcihzdHJ1Y3Qgem9ycm9fZGV2ICp6LAorCQkJCQkgICAgIGNvbnN0IHN0cnVjdCB6b3Jyb19kZXZpY2VfaWQgKmVudCkKIHsKIAlzdHJ1Y3QgY2lycnVzZmJfaW5mbyAqY2luZm87CiAJc3RydWN0IGZiX2luZm8gKmluZm87CkBAIC0yNDg5LDcgKzIzNDAsNiBAQAogCWFzc2VydCh6KTsKIAlhc3NlcnQoYnR5cGUgIT0gQlRfTk9ORSk7CiAKLQljaW5mby0+emRldiA9IHo7CiAJYm9hcmRfYWRkciA9IHpvcnJvX3Jlc291cmNlX3N0YXJ0KHopOwogCWJvYXJkX3NpemUgPSB6b3Jyb19yZXNvdXJjZV9sZW4oeik7CiAJaW5mby0+c2NyZWVuX3NpemUgPSBzaXplOwpAQCAtMjYyMSwxNyArMjQ3MSwxNyBAQAogCQlyZXR1cm4gMDsKIAogCXdoaWxlICgodGhpc19vcHQgPSBzdHJzZXAoJm9wdGlvbnMsICIsIikpICE9IE5VTEwpIHsKLQkJaWYgKCEqdGhpc19vcHQpIGNvbnRpbnVlOworCQlpZiAoISp0aGlzX29wdCkKKwkJCWNvbnRpbnVlOwogCiAJCURQUklOVEsoImNpcnJ1c2ZiX3NldHVwOiBvcHRpb24gJyVzJ1xuIiwgdGhpc19vcHQpOwogCi0JCWZvciAoaSA9IDA7IGkgPCBOVU1fVE9UQUxfTU9ERVM7IGkrKykgewotCQkJc3ByaW50ZihzLCAibW9kZTolcyIsIGNpcnJ1c2ZiX3ByZWRlZmluZWRbaV0ubmFtZSk7Ci0JCQlpZiAoc3RyY21wKHRoaXNfb3B0LCBzKSA9PSAwKQotCQkJCWNpcnJ1c2ZiX2RlZl9tb2RlID0gaTsKLQkJfQogCQlpZiAoIXN0cmNtcCh0aGlzX29wdCwgIm5vYWNjZWwiKSkKIAkJCW5vYWNjZWwgPSAxOworCQllbHNlIGlmICghc3RybmNtcCh0aGlzX29wdCwgIm1vZGU6IiwgNSkpCisJCQltb2RlX29wdGlvbiA9IHRoaXNfb3B0ICsgNTsKKwkJZWxzZQorCQkJbW9kZV9vcHRpb24gPSB0aGlzX29wdDsKIAl9CiAJcmV0dXJuIDA7CiB9CkBAIC0yNjU3LDYgKzI1MDcsMTEgQEAKIAogbW9kdWxlX2luaXQoY2lycnVzZmJfaW5pdCk7CiAKK21vZHVsZV9wYXJhbShtb2RlX29wdGlvbiwgY2hhcnAsIDApOworTU9EVUxFX1BBUk1fREVTQyhtb2RlX29wdGlvbiwgIkluaXRpYWwgdmlkZW8gbW9kZSBlLmcuICc2NDh4NDgwLThANjAnIik7Cittb2R1bGVfcGFyYW0obm9hY2NlbCwgYm9vbCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKG5vYWNjZWwsICJEaXNhYmxlIGFjY2VsZXJhdGlvbiIpOworCiAjaWZkZWYgTU9EVUxFCiBtb2R1bGVfZXhpdChjaXJydXNmYl9leGl0KTsKICNlbmRpZgpAQCAtMzA1MCwxNiArMjkwNSwxNCBAQAogICogYmVzdGNsb2NrKCkgLSBkZXRlcm1pbmUgY2xvc2VzdCBwb3NzaWJsZSBjbG9jayBsb3dlcig/KSB0aGFuIHRoZQogICogZGVzaXJlZCBwaXhlbCBjbG9jawogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotc3RhdGljIHZvaWQgYmVzdGNsb2NrKGxvbmcgZnJlcSwgbG9uZyAqYmVzdCwgbG9uZyAqbm9tLAotCQkgICAgICAgbG9uZyAqZGVuLCBsb25nICpkaXYsIGxvbmcgbWF4ZnJlcSkKK3N0YXRpYyB2b2lkIGJlc3RjbG9jayhsb25nIGZyZXEsIGludCAqbm9tLCBpbnQgKmRlbiwgaW50ICpkaXYpCiB7Ci0JbG9uZyBuLCBoLCBkLCBmOworCWludCBuLCBkOworCWxvbmcgaCwgZGlmZjsKIAotCWFzc2VydChiZXN0ICE9IE5VTEwpOwogCWFzc2VydChub20gIT0gTlVMTCk7CiAJYXNzZXJ0KGRlbiAhPSBOVUxMKTsKIAlhc3NlcnQoZGl2ICE9IE5VTEwpOwotCWFzc2VydChtYXhmcmVxID4gMCk7CiAKIAkqbm9tID0gMDsKIAkqZGVuID0gMDsKQEAgLTMwNzAsNTEgKzI5MjMsNDcgQEAKIAlpZiAoZnJlcSA8IDgwMDApCiAJCWZyZXEgPSA4MDAwOwogCi0JaWYgKGZyZXEgPiBtYXhmcmVxKQotCQlmcmVxID0gbWF4ZnJlcTsKLQotCSpiZXN0ID0gMDsKLQlmID0gZnJlcSAqIDEwOworCWRpZmYgPSBmcmVxOwogCiAJZm9yIChuID0gMzI7IG4gPCAxMjg7IG4rKykgewotCQlkID0gKDE0MzE4MSAqIG4pIC8gZjsKKwkJaW50IHMgPSAwOworCisJCWQgPSAoMTQzMTggKiBuKSAvIGZyZXE7CiAJCWlmICgoZCA+PSA3KSAmJiAoZCA8PSA2MykpIHsKLQkJCWlmIChkID4gMzEpCi0JCQkJZCA9IChkIC8gMikgKiAyOwotCQkJaCA9ICgxNDMxOCAqIG4pIC8gZDsKLQkJCWlmIChhYnMoaCAtIGZyZXEpIDwgYWJzKCpiZXN0IC0gZnJlcSkpIHsKLQkJCQkqYmVzdCA9IGg7CisJCQlpbnQgdGVtcCA9IGQ7CisKKwkJCWlmICh0ZW1wID4gMzEpIHsKKwkJCQlzID0gMTsKKwkJCQl0ZW1wID4+PSAxOworCQkJfQorCQkJaCA9ICgoMTQzMTggKiBuKSAvIHRlbXApID4+IHM7CisJCQloID0gaCA+IGZyZXEgPyBoIC0gZnJlcSA6IGZyZXEgLSBoOworCQkJaWYgKGggPCBkaWZmKSB7CisJCQkJZGlmZiA9IGg7CiAJCQkJKm5vbSA9IG47Ci0JCQkJaWYgKGQgPCAzMikgewotCQkJCQkqZGVuID0gZDsKLQkJCQkJKmRpdiA9IDA7Ci0JCQkJfSBlbHNlIHsKLQkJCQkJKmRlbiA9IGQgLyAyOwotCQkJCQkqZGl2ID0gMTsKLQkJCQl9CisJCQkJKmRlbiA9IHRlbXA7CisJCQkJKmRpdiA9IHM7CiAJCQl9CiAJCX0KLQkJZCA9IERJVl9ST1VORF9VUCgxNDMxODEgKiBuLCBmKTsKKwkJZCsrOwogCQlpZiAoKGQgPj0gNykgJiYgKGQgPD0gNjMpKSB7Ci0JCQlpZiAoZCA+IDMxKQotCQkJCWQgPSAoZCAvIDIpICogMjsKLQkJCWggPSAoMTQzMTggKiBuKSAvIGQ7Ci0JCQlpZiAoYWJzKGggLSBmcmVxKSA8IGFicygqYmVzdCAtIGZyZXEpKSB7Ci0JCQkJKmJlc3QgPSBoOworCQkJaWYgKGQgPiAzMSkgeworCQkJCXMgPSAxOworCQkJCWQgPj49IDE7CisJCQl9CisJCQloID0gKCgxNDMxOCAqIG4pIC8gZCkgPj4gczsKKwkJCWggPSBoID4gZnJlcSA/IGggLSBmcmVxIDogZnJlcSAtIGg7CisJCQlpZiAoaCA8IGRpZmYpIHsKKwkJCQlkaWZmID0gaDsKIAkJCQkqbm9tID0gbjsKLQkJCQlpZiAoZCA8IDMyKSB7Ci0JCQkJCSpkZW4gPSBkOwotCQkJCQkqZGl2ID0gMDsKLQkJCQl9IGVsc2UgewotCQkJCQkqZGVuID0gZCAvIDI7Ci0JCQkJCSpkaXYgPSAxOwotCQkJCX0KKwkJCQkqZGVuID0gZDsKKwkJCQkqZGl2ID0gczsKIAkJCX0KIAkJfQogCX0KIAogCURQUklOVEsoIkJlc3QgcG9zc2libGUgdmFsdWVzIGZvciBnaXZlbiBmcmVxdWVuY3k6XG4iKTsKLQlEUFJJTlRLKCIJYmVzdDogJWxkIGtIeiAgbm9tOiAlbGQgIGRlbjogJWxkICBkaXY6ICVsZFxuIiwKKwlEUFJJTlRLKCIJZnJlcTogJWxkIGtIeiAgbm9tOiAlZCAgZGVuOiAlZCAgZGl2OiAlZFxuIiwKIAkJZnJlcSwgKm5vbSwgKmRlbiwgKmRpdik7CiAKIAlEUFJJTlRLKCJFWElUXG4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vY29uc29sZS9mYmNvbi5jIGIvZHJpdmVycy92aWRlby9jb25zb2xlL2ZiY29uLmMKaW5kZXggOWNiZmY4NC4uNjRiM2QzMCAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9jb25zb2xlL2ZiY29uLmMKKysrIGIvZHJpdmVycy92aWRlby9jb25zb2xlL2ZiY29uLmMKQEAgLTE4NTUsOCArMTg1NSw2IEBACiAJc3RydWN0IGZiX2luZm8gKmluZm8gPSByZWdpc3RlcmVkX2ZiW2NvbjJmYl9tYXBbdmMtPnZjX251bV1dOwogCXN0cnVjdCBkaXNwbGF5ICpwID0gJmZiX2Rpc3BsYXlbdmMtPnZjX251bV07CiAJaW50IHNjcm9sbF9wYXJ0aWFsID0gaW5mby0+ZmxhZ3MgJiBGQklORk9fUEFSVElBTF9QQU5fT0s7Ci0JdW5zaWduZWQgc2hvcnQgc2F2ZWRfZWM7Ci0JaW50IHJldDsKIAogCWlmIChmYmNvbl9pc19pbmFjdGl2ZSh2YywgaW5mbykpCiAJCXJldHVybiAtRUlOVkFMOwpAQCAtMTg2OSwxMSArMTg2Nyw2IEBACiAJICogICAgICAgICAgIHdob2xlIHNjcmVlbiAocHJldmVudHMgZmxpY2tlcikuCiAJICovCiAKLQlzYXZlZF9lYyA9IHZjLT52Y192aWRlb19lcmFzZV9jaGFyOwotCXZjLT52Y192aWRlb19lcmFzZV9jaGFyID0gdmMtPnZjX3NjcmxfZXJhc2VfY2hhcjsKLQotCXJldCA9IDA7Ci0KIAlzd2l0Y2ggKGRpcikgewogCWNhc2UgU01fVVA6CiAJCWlmIChjb3VudCA+IHZjLT52Y19yb3dzKQkvKiBNYXhpbXVtIHJlYWxpc3RpYyBzaXplICovCkBAIC0xODkwLDkgKzE4ODMsOSBAQAogCQkJc2NyX21lbXNldHcoKHVuc2lnbmVkIHNob3J0ICopICh2Yy0+dmNfb3JpZ2luICsKIAkJCQkJCQl2Yy0+dmNfc2l6ZV9yb3cgKgogCQkJCQkJCShiIC0gY291bnQpKSwKLQkJCQkgICAgdmMtPnZjX3NjcmxfZXJhc2VfY2hhciwKKwkJCQkgICAgdmMtPnZjX3ZpZGVvX2VyYXNlX2NoYXIsCiAJCQkJICAgIHZjLT52Y19zaXplX3JvdyAqIGNvdW50KTsKLQkJCXJldCA9IDE7CisJCQlyZXR1cm4gMTsKIAkJCWJyZWFrOwogCiAJCWNhc2UgU0NST0xMX1dSQVBfTU9WRToKQEAgLTE5NjIsMTAgKzE5NTUsOSBAQAogCQkJc2NyX21lbXNldHcoKHVuc2lnbmVkIHNob3J0ICopICh2Yy0+dmNfb3JpZ2luICsKIAkJCQkJCQl2Yy0+dmNfc2l6ZV9yb3cgKgogCQkJCQkJCShiIC0gY291bnQpKSwKLQkJCQkgICAgdmMtPnZjX3NjcmxfZXJhc2VfY2hhciwKKwkJCQkgICAgdmMtPnZjX3ZpZGVvX2VyYXNlX2NoYXIsCiAJCQkJICAgIHZjLT52Y19zaXplX3JvdyAqIGNvdW50KTsKLQkJCXJldCA9IDE7Ci0JCQlicmVhazsKKwkJCXJldHVybiAxOwogCQl9CiAJCWJyZWFrOwogCkBAIC0xOTgyLDkgKzE5NzQsOSBAQAogCQkJc2NyX21lbXNldHcoKHVuc2lnbmVkIHNob3J0ICopICh2Yy0+dmNfb3JpZ2luICsKIAkJCQkJCQl2Yy0+dmNfc2l6ZV9yb3cgKgogCQkJCQkJCXQpLAotCQkJCSAgICB2Yy0+dmNfc2NybF9lcmFzZV9jaGFyLAorCQkJCSAgICB2Yy0+dmNfdmlkZW9fZXJhc2VfY2hhciwKIAkJCQkgICAgdmMtPnZjX3NpemVfcm93ICogY291bnQpOwotCQkJcmV0ID0gMTsKKwkJCXJldHVybiAxOwogCQkJYnJlYWs7CiAKIAkJY2FzZSBTQ1JPTExfV1JBUF9NT1ZFOgpAQCAtMjA1MiwxNSArMjA0NCwxMiBAQAogCQkJc2NyX21lbXNldHcoKHVuc2lnbmVkIHNob3J0ICopICh2Yy0+dmNfb3JpZ2luICsKIAkJCQkJCQl2Yy0+dmNfc2l6ZV9yb3cgKgogCQkJCQkJCXQpLAotCQkJCSAgICB2Yy0+dmNfc2NybF9lcmFzZV9jaGFyLAorCQkJCSAgICB2Yy0+dmNfdmlkZW9fZXJhc2VfY2hhciwKIAkJCQkgICAgdmMtPnZjX3NpemVfcm93ICogY291bnQpOwotCQkJcmV0ID0gMTsKLQkJCWJyZWFrOworCQkJcmV0dXJuIDE7CiAJCX0KLQkJYnJlYWs7CiAJfQotCXZjLT52Y192aWRlb19lcmFzZV9jaGFyID0gc2F2ZWRfZWM7Ci0JcmV0dXJuIHJldDsKKwlyZXR1cm4gMDsKIH0KIAogCkBAIC0yNTIyLDkgKzI1MTEsNiBAQAogCQkJYyA9IHZjLT52Y192aWRlb19lcmFzZV9jaGFyOwogCQkJdmMtPnZjX3ZpZGVvX2VyYXNlX2NoYXIgPQogCQkJICAgICgoYyAmIDB4ZmUwMCkgPj4gMSkgfCAoYyAmIDB4ZmYpOwotCQkJYyA9IHZjLT52Y19zY3JsX2VyYXNlX2NoYXI7Ci0JCQl2Yy0+dmNfc2NybF9lcmFzZV9jaGFyID0KLQkJCSAgICAoKGMgJiAweEZFMDApID4+IDEpIHwgKGMgJiAweEZGKTsKIAkJCXZjLT52Y19hdHRyID4+PSAxOwogCQl9CiAJfSBlbHNlIGlmICghdmMtPnZjX2hpX2ZvbnRfbWFzayAmJiBjbnQgPT0gNTEyKSB7CkBAIC0yNTU1LDE0ICsyNTQxLDkgQEAKIAkJCWlmICh2Yy0+dmNfY2FuX2RvX2NvbG9yKSB7CiAJCQkJdmMtPnZjX3ZpZGVvX2VyYXNlX2NoYXIgPQogCQkJCSAgICAoKGMgJiAweGZmMDApIDw8IDEpIHwgKGMgJiAweGZmKTsKLQkJCQljID0gdmMtPnZjX3NjcmxfZXJhc2VfY2hhcjsKLQkJCQl2Yy0+dmNfc2NybF9lcmFzZV9jaGFyID0KLQkJCQkgICAgKChjICYgMHhGRjAwKSA8PCAxKSB8IChjICYgMHhGRik7CiAJCQkJdmMtPnZjX2F0dHIgPDw9IDE7Ci0JCQl9IGVsc2UgeworCQkJfSBlbHNlCiAJCQkJdmMtPnZjX3ZpZGVvX2VyYXNlX2NoYXIgPSBjICYgfjB4MTAwOwotCQkJCXZjLT52Y19zY3JsX2VyYXNlX2NoYXIgPSBjICYgfjB4MTAwOwotCQkJfQogCQl9CiAKIAl9CkBAIC0yOTk2LDggKzI5NzcsOCBAQAogCQlwID0gJmZiX2Rpc3BsYXlbdmMtPnZjX251bV07CiAJCXNldF9ibGl0dGluZ190eXBlKHZjLCBpbmZvKTsKIAkJdmFyX3RvX2Rpc3BsYXkocCwgJmluZm8tPnZhciwgaW5mbyk7Ci0JCWNvbHMgPSBGQkNPTl9TV0FQKHAtPnJvdGF0ZSwgaW5mby0+dmFyLnhyZXMsIGluZm8tPnZhci55cmVzKTsKLQkJcm93cyA9IEZCQ09OX1NXQVAocC0+cm90YXRlLCBpbmZvLT52YXIueXJlcywgaW5mby0+dmFyLnhyZXMpOworCQljb2xzID0gRkJDT05fU1dBUChvcHMtPnJvdGF0ZSwgaW5mby0+dmFyLnhyZXMsIGluZm8tPnZhci55cmVzKTsKKwkJcm93cyA9IEZCQ09OX1NXQVAob3BzLT5yb3RhdGUsIGluZm8tPnZhci55cmVzLCBpbmZvLT52YXIueHJlcyk7CiAJCWNvbHMgLz0gdmMtPnZjX2ZvbnQud2lkdGg7CiAJCXJvd3MgLz0gdmMtPnZjX2ZvbnQuaGVpZ2h0OwogCQl2Y19yZXNpemUodmMsIGNvbHMsIHJvd3MpOwpAQCAtMzU5Miw4ICszNTczLDggQEAKIAogCWFjcXVpcmVfY29uc29sZV9zZW0oKTsKIAlmYl9yZWdpc3Rlcl9jbGllbnQoJmZiY29uX2V2ZW50X25vdGlmaWVyKTsKLQlmYmNvbl9kZXZpY2UgPSBkZXZpY2VfY3JlYXRlX2RydmRhdGEoZmJfY2xhc3MsIE5VTEwsIE1LREVWKDAsIDApLAotCQkJCQkgICAgIE5VTEwsICJmYmNvbiIpOworCWZiY29uX2RldmljZSA9IGRldmljZV9jcmVhdGUoZmJfY2xhc3MsIE5VTEwsIE1LREVWKDAsIDApLCBOVUxMLAorCQkJCSAgICAgImZiY29uIik7CiAKIAlpZiAoSVNfRVJSKGZiY29uX2RldmljZSkpIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiVW5hYmxlIHRvIGNyZWF0ZSBkZXZpY2UgIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9jb25zb2xlL21kYWNvbi5jIGIvZHJpdmVycy92aWRlby9jb25zb2xlL21kYWNvbi5jCmluZGV4IDk5MDEwNjQuLmRkM2VhYWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vY29uc29sZS9tZGFjb24uYworKysgYi9kcml2ZXJzL3ZpZGVvL2NvbnNvbGUvbWRhY29uLmMKQEAgLTUzMyw3ICs1MzMsNyBAQAogCiBzdGF0aWMgaW50IG1kYWNvbl9zY3JvbGwoc3RydWN0IHZjX2RhdGEgKmMsIGludCB0LCBpbnQgYiwgaW50IGRpciwgaW50IGxpbmVzKQogewotCXUxNiBlYXR0ciA9IG1kYV9jb252ZXJ0X2F0dHIoYy0+dmNfc2NybF9lcmFzZV9jaGFyKTsKKwl1MTYgZWF0dHIgPSBtZGFfY29udmVydF9hdHRyKGMtPnZjX3ZpZGVvX2VyYXNlX2NoYXIpOwogCiAJaWYgKCFsaW5lcykKIAkJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2NvbnNvbGUvc3RpY29uLmMgYi9kcml2ZXJzL3ZpZGVvL2NvbnNvbGUvc3RpY29uLmMKaW5kZXggNDA1NWRiZC4uNDkxYzFjMSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9jb25zb2xlL3N0aWNvbi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vY29uc29sZS9zdGljb24uYwpAQCAtMTcwLDEyICsxNzAsMTIgQEAKICAgICBzd2l0Y2ggKGRpcikgewogICAgIGNhc2UgU01fVVA6CiAJc3RpX2Jtb3ZlKHN0aSwgdCArIGNvdW50LCAwLCB0LCAwLCBiIC0gdCAtIGNvdW50LCBjb25wLT52Y19jb2xzKTsKLQlzdGlfY2xlYXIoc3RpLCBiIC0gY291bnQsIDAsIGNvdW50LCBjb25wLT52Y19jb2xzLCBjb25wLT52Y19zY3JsX2VyYXNlX2NoYXIpOworCXN0aV9jbGVhcihzdGksIGIgLSBjb3VudCwgMCwgY291bnQsIGNvbnAtPnZjX2NvbHMsIGNvbnAtPnZjX3ZpZGVvX2VyYXNlX2NoYXIpOwogCWJyZWFrOwogCiAgICAgY2FzZSBTTV9ET1dOOgogCXN0aV9ibW92ZShzdGksIHQsIDAsIHQgKyBjb3VudCwgMCwgYiAtIHQgLSBjb3VudCwgY29ucC0+dmNfY29scyk7Ci0Jc3RpX2NsZWFyKHN0aSwgdCwgMCwgY291bnQsIGNvbnAtPnZjX2NvbHMsIGNvbnAtPnZjX3NjcmxfZXJhc2VfY2hhcik7CisJc3RpX2NsZWFyKHN0aSwgdCwgMCwgY291bnQsIGNvbnAtPnZjX2NvbHMsIGNvbnAtPnZjX3ZpZGVvX2VyYXNlX2NoYXIpOwogCWJyZWFrOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9jb25zb2xlL3ZnYWNvbi5jIGIvZHJpdmVycy92aWRlby9jb25zb2xlL3ZnYWNvbi5jCmluZGV4IGJkMWY1N2IuLjQ0OGQyMDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vY29uc29sZS92Z2Fjb24uYworKysgYi9kcml2ZXJzL3ZpZGVvL2NvbnNvbGUvdmdhY29uLmMKQEAgLTIzOSw4ICsyMzksNyBAQAogCiBzdGF0aWMgaW50IHZnYWNvbl9zY3JvbGxkZWx0YShzdHJ1Y3QgdmNfZGF0YSAqYywgaW50IGxpbmVzKQogewotCWludCBzdGFydCwgZW5kLCBjb3VudCwgc29mZiwgZGlmZjsKLQl2b2lkICpkLCAqczsKKwlpbnQgc3RhcnQsIGVuZCwgY291bnQsIHNvZmY7CiAKIAlpZiAoIWxpbmVzKSB7CiAJCWMtPnZjX3Zpc2libGVfb3JpZ2luID0gYy0+dmNfb3JpZ2luOwpAQCAtMjg3LDI5ICsyODYsMjkgQEAKIAlpZiAoY291bnQgPiBjLT52Y19yb3dzKQogCQljb3VudCA9IGMtPnZjX3Jvd3M7CiAKLQlkaWZmID0gYy0+dmNfcm93cyAtIGNvdW50OworCWlmIChjb3VudCkgeworCQlpbnQgY29weXNpemU7CiAKLQlkID0gKHZvaWQgKikgYy0+dmNfb3JpZ2luOwotCXMgPSAodm9pZCAqKSBjLT52Y19zY3JlZW5idWY7CisJCWludCBkaWZmID0gYy0+dmNfcm93cyAtIGNvdW50OworCQl2b2lkICpkID0gKHZvaWQgKikgYy0+dmNfb3JpZ2luOworCQl2b2lkICpzID0gKHZvaWQgKikgYy0+dmNfc2NyZWVuYnVmOwogCi0Jd2hpbGUgKGNvdW50LS0pIHsKLQkJc2NyX21lbWNweXcoZCwgdmdhY29uX3Njcm9sbGJhY2sgKyBzb2ZmLCBjLT52Y19zaXplX3Jvdyk7Ci0JCWQgKz0gYy0+dmNfc2l6ZV9yb3c7Ci0JCXNvZmYgKz0gYy0+dmNfc2l6ZV9yb3c7CisJCWNvdW50ICo9IGMtPnZjX3NpemVfcm93OworCQkvKiBob3cgbXVjaCBtZW1vcnkgdG8gZW5kIG9mIGJ1ZmZlciBsZWZ0PyAqLworCQljb3B5c2l6ZSA9IG1pbihjb3VudCwgdmdhY29uX3Njcm9sbGJhY2tfc2l6ZSAtIHNvZmYpOworCQlzY3JfbWVtY3B5dyhkLCB2Z2Fjb25fc2Nyb2xsYmFjayArIHNvZmYsIGNvcHlzaXplKTsKKwkJZCArPSBjb3B5c2l6ZTsKKwkJY291bnQgLT0gY29weXNpemU7CiAKLQkJaWYgKHNvZmYgPj0gdmdhY29uX3Njcm9sbGJhY2tfc2l6ZSkKLQkJCXNvZmYgPSAwOwotCX0KLQotCWlmIChkaWZmID09IGMtPnZjX3Jvd3MpIHsKLQkJdmdhY29uX2N1cnNvcihjLCBDTV9NT1ZFKTsKLQl9IGVsc2UgewotCQl3aGlsZSAoZGlmZi0tKSB7Ci0JCQlzY3JfbWVtY3B5dyhkLCBzLCBjLT52Y19zaXplX3Jvdyk7Ci0JCQlkICs9IGMtPnZjX3NpemVfcm93OwotCQkJcyArPSBjLT52Y19zaXplX3JvdzsKKwkJaWYgKGNvdW50KSB7CisJCQlzY3JfbWVtY3B5dyhkLCB2Z2Fjb25fc2Nyb2xsYmFjaywgY291bnQpOworCQkJZCArPSBjb3VudDsKIAkJfQotCX0KKworCQlpZiAoZGlmZikKKwkJCXNjcl9tZW1jcHl3KGQsIHMsIGRpZmYgKiBjLT52Y19zaXplX3Jvdyk7CisJfSBlbHNlCisJCXZnYWNvbl9jdXJzb3IoYywgQ01fTU9WRSk7CiAKIAlyZXR1cm4gMTsKIH0KQEAgLTEzNTAsNyArMTM0OSw3IEBACiAJCX0gZWxzZQogCQkJYy0+dmNfb3JpZ2luICs9IGRlbHRhOwogCQlzY3JfbWVtc2V0dygodTE2ICopIChjLT52Y19vcmlnaW4gKyBjLT52Y19zY3JlZW5idWZfc2l6ZSAtCi0JCQkJICAgICBkZWx0YSksIGMtPnZjX3NjcmxfZXJhc2VfY2hhciwKKwkJCQkgICAgIGRlbHRhKSwgYy0+dmNfdmlkZW9fZXJhc2VfY2hhciwKIAkJCSAgICBkZWx0YSk7CiAJfSBlbHNlIHsKIAkJaWYgKG9sZG8gLSBkZWx0YSA8IHZnYV92cmFtX2Jhc2UpIHsKQEAgLTEzNjMsNyArMTM2Miw3IEBACiAJCX0gZWxzZQogCQkJYy0+dmNfb3JpZ2luIC09IGRlbHRhOwogCQljLT52Y19zY3JfZW5kID0gYy0+dmNfb3JpZ2luICsgYy0+dmNfc2NyZWVuYnVmX3NpemU7Ci0JCXNjcl9tZW1zZXR3KCh1MTYgKikgKGMtPnZjX29yaWdpbiksIGMtPnZjX3NjcmxfZXJhc2VfY2hhciwKKwkJc2NyX21lbXNldHcoKHUxNiAqKSAoYy0+dmNfb3JpZ2luKSwgYy0+dmNfdmlkZW9fZXJhc2VfY2hhciwKIAkJCSAgICBkZWx0YSk7CiAJfQogCWMtPnZjX3Njcl9lbmQgPSBjLT52Y19vcmlnaW4gKyBjLT52Y19zY3JlZW5idWZfc2l6ZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vZGlzcGxheS9kaXNwbGF5LXN5c2ZzLmMgYi9kcml2ZXJzL3ZpZGVvL2Rpc3BsYXkvZGlzcGxheS1zeXNmcy5jCmluZGV4IDZlZjgwMGIuLjQ4MzBiMWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vZGlzcGxheS9kaXNwbGF5LXN5c2ZzLmMKKysrIGIvZHJpdmVycy92aWRlby9kaXNwbGF5L2Rpc3BsYXktc3lzZnMuYwpAQCAtMTUzLDEyICsxNTMsOSBAQAogCQltdXRleF91bmxvY2soJmFsbG9jYXRlZF9kc3BfbG9jayk7CiAKIAkJaWYgKCFyZXQpIHsKLQkJCW5ld19kZXYtPmRldiA9IGRldmljZV9jcmVhdGVfZHJ2ZGF0YShkaXNwbGF5X2NsYXNzLAotCQkJCQkJCSAgICAgcGFyZW50LAotCQkJCQkJCSAgICAgTUtERVYoMCwwKSwKLQkJCQkJCQkgICAgIG5ld19kZXYsCi0JCQkJCQkJICAgICAiZGlzcGxheSVkIiwKLQkJCQkJCQkgICAgIG5ld19kZXYtPmlkeCk7CisJCQluZXdfZGV2LT5kZXYgPSBkZXZpY2VfY3JlYXRlKGRpc3BsYXlfY2xhc3MsIHBhcmVudCwKKwkJCQkJCSAgICAgTUtERVYoMCwgMCksIG5ld19kZXYsCisJCQkJCQkgICAgICJkaXNwbGF5JWQiLCBuZXdfZGV2LT5pZHgpOwogCQkJaWYgKCFJU19FUlIobmV3X2Rldi0+ZGV2KSkgewogCQkJCW5ld19kZXYtPnBhcmVudCA9IHBhcmVudDsKIAkJCQluZXdfZGV2LT5kcml2ZXIgPSBkcml2ZXI7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2VmaWZiLmMgYi9kcml2ZXJzL3ZpZGVvL2VmaWZiLmMKaW5kZXggYmQ3NzlhZS4uZGFmOWI4MSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9lZmlmYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vZWZpZmIuYwpAQCAtMTIsNiArMTIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2ZiLmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvc2NyZWVuX2luZm8uaD4KKyNpbmNsdWRlIDxsaW51eC9kbWkuaD4KIAogI2luY2x1ZGUgPHZpZGVvL3ZnYS5oPgogCkBAIC0zMyw2ICszNCwxMDUgQEAKIAkudmlzdWFsCQkJPSBGQl9WSVNVQUxfVFJVRUNPTE9SLAogfTsKIAorZW51bSB7CisJTV9JMTcsCQkvKiAxNy1JbmNoIGlNYWMgKi8KKwlNX0kyMCwJCS8qIDIwLUluY2ggaU1hYyAqLworCU1fSTIwX1NSLAkvKiAyMC1JbmNoIGlNYWMgKFNhbnRhIFJvc2EpICovCisJTV9JMjQsCQkvKiAyNC1JbmNoIGlNYWMgKi8KKwlNX01JTkksCQkvKiBNYWMgTWluaSAqLworCU1fTUIsCQkvKiBNYWNCb29rICovCisJTV9NQl8yLAkJLyogTWFjQm9vaywgMm5kIHJldi4gKi8KKwlNX01CXzMsCQkvKiBNYWNCb29rLCAzcmQgcmV2LiAqLworCU1fTUJfU1IsCS8qIE1hY0Jvb2ssIDJuZCBnZW4sIChTYW50YSBSb3NhKSAqLworCU1fTUJBLAkJLyogTWFjQm9vayBBaXIgKi8KKwlNX01CUCwJCS8qIE1hY0Jvb2sgUHJvICovCisJTV9NQlBfMiwJLyogTWFjQm9vayBQcm8gMm5kIGdlbiAqLworCU1fTUJQX1NSLAkvKiBNYWNCb29rIFBybyAoU2FudGEgUm9zYSkgKi8KKwlNX01CUF80LAkvKiBNYWNCb29rIFBybywgNHRoIGdlbiAqLworCU1fVU5LTk9XTgkvKiBwbGFjZWhvbGRlciAqLworfTsKKworc3RhdGljIHN0cnVjdCBlZmlmYl9kbWlfaW5mbyB7CisJY2hhciAqb3B0bmFtZTsKKwl1bnNpZ25lZCBsb25nIGJhc2U7CisJaW50IHN0cmlkZTsKKwlpbnQgd2lkdGg7CisJaW50IGhlaWdodDsKK30gZG1pX2xpc3RbXSA9IHsKKwlbTV9JMTddID0geyAiaTE3IiwgMHg4MDAxMDAwMCwgMTQ3MiAqIDQsIDE0NDAsIDkwMCB9LAorCVtNX0kyMF0gPSB7ICJpMjAiLCAweDgwMDEwMDAwLCAxNzI4ICogNCwgMTY4MCwgMTA1MCB9LCAvKiBndWVzcyAqLworCVtNX0kyMF9TUl0gPSB7ICJpbWFjNyIsIDB4NDAwMTAwMDAsIDE3MjggKiA0LCAxNjgwLCAxMDUwIH0sCisJW01fSTI0XSA9IHsgImkyNCIsIDB4ODAwMTAwMDAsIDIwNDggKiA0LCAxOTIwLCAxMjAwIH0sIC8qIGd1ZXNzICovCisJW01fTUlOSV09IHsgIm1pbmkiLCAweDgwMDAwMDAwLCAyMDQ4ICogNCwgMTAyNCwgNzY4IH0sCisJW01fTUJdID0geyAibWFjYm9vayIsIDB4ODAwMDAwMDAsIDIwNDggKiA0LCAxMjgwLCA4MDAgfSwKKwlbTV9NQkFdID0geyAibWJhIiwgMHg4MDAwMDAwMCwgMjA0OCAqIDQsIDEyODAsIDgwMCB9LAorCVtNX01CUF0gPSB7ICJtYnAiLCAweDgwMDEwMDAwLCAxNDcyICogNCwgMTQ0MCwgOTAwIH0sCisJW01fTUJQXzJdID0geyAibWJwMiIsIDAsIDAsIDAsIDAgfSwgLyogcGxhY2Vob2xkZXIgKi8KKwlbTV9NQlBfU1JdID0geyAibWJwMyIsIDB4ODAwMzAwMDAsIDIwNDggKiA0LCAxNDQwLCA5MDAgfSwKKwlbTV9NQlBfNF0gPSB7ICJtYnA0IiwgMHhjMDA2MDAwMCwgMjA0OCAqIDQsIDE5MjAsIDEyMDAgfSwKKwlbTV9VTktOT1dOXSA9IHsgTlVMTCwgMCwgMCwgMCwgMCB9Cit9OworCitzdGF0aWMgaW50IHNldF9zeXN0ZW0oY29uc3Qgc3RydWN0IGRtaV9zeXN0ZW1faWQgKmlkKTsKKworI2RlZmluZSBFRklGQl9ETUlfU1lTVEVNX0lEKHZlbmRvciwgbmFtZSwgZW51bWlkKQkJXAorCXsgc2V0X3N5c3RlbSwgbmFtZSwgewkJCQkJXAorCQlETUlfTUFUQ0goRE1JX0JJT1NfVkVORE9SLCB2ZW5kb3IpLAkJXAorCQlETUlfTUFUQ0goRE1JX1BST0RVQ1RfTkFNRSwgbmFtZSkgfSwJCVwKKwkgICZkbWlfbGlzdFtlbnVtaWRdIH0KKworc3RhdGljIHN0cnVjdCBkbWlfc3lzdGVtX2lkIF9faW5pdGRhdGEgZG1pX3N5c3RlbV90YWJsZVtdID0geworCUVGSUZCX0RNSV9TWVNURU1fSUQoIkFwcGxlIENvbXB1dGVyLCBJbmMuIiwgImlNYWM0LDEiLCBNX0kxNyksCisJLyogQXQgbGVhc3Qgb25lIG9mIHRoZXNlIHR3byB3aWxsIGJlIHJpZ2h0OyBtYXliZSBib3RoPyAqLworCUVGSUZCX0RNSV9TWVNURU1fSUQoIkFwcGxlIENvbXB1dGVyLCBJbmMuIiwgImlNYWM1LDEiLCBNX0kyMCksCisJRUZJRkJfRE1JX1NZU1RFTV9JRCgiQXBwbGUgSW5jLiIsICJpTWFjNSwxIiwgTV9JMjApLAorCS8qIEF0IGxlYXN0IG9uZSBvZiB0aGVzZSB0d28gd2lsbCBiZSByaWdodDsgbWF5YmUgYm90aD8gKi8KKwlFRklGQl9ETUlfU1lTVEVNX0lEKCJBcHBsZSBDb21wdXRlciwgSW5jLiIsICJpTWFjNiwxIiwgTV9JMjQpLAorCUVGSUZCX0RNSV9TWVNURU1fSUQoIkFwcGxlIEluYy4iLCAiaU1hYzYsMSIsIE1fSTI0KSwKKwlFRklGQl9ETUlfU1lTVEVNX0lEKCJBcHBsZSBJbmMuIiwgImlNYWM3LDEiLCBNX0kyMF9TUiksCisJRUZJRkJfRE1JX1NZU1RFTV9JRCgiQXBwbGUgQ29tcHV0ZXIsIEluYy4iLCAiTWFjbWluaTEsMSIsIE1fTUlOSSksCisJRUZJRkJfRE1JX1NZU1RFTV9JRCgiQXBwbGUgQ29tcHV0ZXIsIEluYy4iLCAiTWFjQm9vazEsMSIsIE1fTUIpLAorCS8qIEF0IGxlYXN0IG9uZSBvZiB0aGVzZSB0d28gd2lsbCBiZSByaWdodDsgbWF5YmUgYm90aD8gKi8KKwlFRklGQl9ETUlfU1lTVEVNX0lEKCJBcHBsZSBDb21wdXRlciwgSW5jLiIsICJNYWNCb29rMiwxIiwgTV9NQiksCisJRUZJRkJfRE1JX1NZU1RFTV9JRCgiQXBwbGUgSW5jLiIsICJNYWNCb29rMiwxIiwgTV9NQiksCisJLyogQXQgbGVhc3Qgb25lIG9mIHRoZXNlIHR3byB3aWxsIGJlIHJpZ2h0OyBtYXliZSBib3RoPyAqLworCUVGSUZCX0RNSV9TWVNURU1fSUQoIkFwcGxlIENvbXB1dGVyLCBJbmMuIiwgIk1hY0Jvb2szLDEiLCBNX01CKSwKKwlFRklGQl9ETUlfU1lTVEVNX0lEKCJBcHBsZSBJbmMuIiwgIk1hY0Jvb2szLDEiLCBNX01CKSwKKwlFRklGQl9ETUlfU1lTVEVNX0lEKCJBcHBsZSBJbmMuIiwgIk1hY0Jvb2s0LDEiLCBNX01CKSwKKwlFRklGQl9ETUlfU1lTVEVNX0lEKCJBcHBsZSBJbmMuIiwgIk1hY0Jvb2tBaXIxLDEiLCBNX01CQSksCisJRUZJRkJfRE1JX1NZU1RFTV9JRCgiQXBwbGUgQ29tcHV0ZXIsIEluYy4iLCAiTWFjQm9va1BybzEsMSIsIE1fTUJQKSwKKwlFRklGQl9ETUlfU1lTVEVNX0lEKCJBcHBsZSBDb21wdXRlciwgSW5jLiIsICJNYWNCb29rUHJvMiwxIiwgTV9NQlBfMiksCisJRUZJRkJfRE1JX1NZU1RFTV9JRCgiQXBwbGUgSW5jLiIsICJNYWNCb29rUHJvMiwxIiwgTV9NQlBfMiksCisJRUZJRkJfRE1JX1NZU1RFTV9JRCgiQXBwbGUgQ29tcHV0ZXIsIEluYy4iLCAiTWFjQm9va1BybzMsMSIsIE1fTUJQX1NSKSwKKwlFRklGQl9ETUlfU1lTVEVNX0lEKCJBcHBsZSBJbmMuIiwgIk1hY0Jvb2tQcm8zLDEiLCBNX01CUF9TUiksCisJRUZJRkJfRE1JX1NZU1RFTV9JRCgiQXBwbGUgSW5jLiIsICJNYWNCb29rUHJvNCwxIiwgTV9NQlBfNCksCisJe30sCit9OworCitzdGF0aWMgaW50IHNldF9zeXN0ZW0oY29uc3Qgc3RydWN0IGRtaV9zeXN0ZW1faWQgKmlkKQoreworCXN0cnVjdCBlZmlmYl9kbWlfaW5mbyAqaW5mbyA9IGlkLT5kcml2ZXJfZGF0YTsKKwlpZiAoaW5mby0+YmFzZSA9PSAwKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCXByaW50ayhLRVJOX0lORk8gImVmaWZiOiBkbWkgZGV0ZWN0ZWQgJXMgLSBmcmFtZWJ1ZmZlciBhdCAlcCAiCisJCQkgIiglZHglZCwgc3RyaWRlICVkKVxuIiwgaWQtPmlkZW50LAorCQkJICh2b2lkICopaW5mby0+YmFzZSwgaW5mby0+d2lkdGgsIGluZm8tPmhlaWdodCwKKwkJCSBpbmZvLT5zdHJpZGUpOworCisJLyogVHJ1c3QgdGhlIGJvb3Rsb2FkZXIgb3ZlciB0aGUgRE1JIHRhYmxlcyAqLworCWlmIChzY3JlZW5faW5mby5sZmJfYmFzZSA9PSAwKQorCQlzY3JlZW5faW5mby5sZmJfYmFzZSA9IGluZm8tPmJhc2U7CisJaWYgKHNjcmVlbl9pbmZvLmxmYl9saW5lbGVuZ3RoID09IDApCisJCXNjcmVlbl9pbmZvLmxmYl9saW5lbGVuZ3RoID0gaW5mby0+c3RyaWRlOworCWlmIChzY3JlZW5faW5mby5sZmJfd2lkdGggPT0gMCkKKwkJc2NyZWVuX2luZm8ubGZiX3dpZHRoID0gaW5mby0+d2lkdGg7CisJaWYgKHNjcmVlbl9pbmZvLmxmYl9oZWlnaHQgPT0gMCkKKwkJc2NyZWVuX2luZm8ubGZiX2hlaWdodCA9IGluZm8tPmhlaWdodDsKKworCXJldHVybiAwOworfQorCiBzdGF0aWMgaW50IGVmaWZiX3NldGNvbHJlZyh1bnNpZ25lZCByZWdubywgdW5zaWduZWQgcmVkLCB1bnNpZ25lZCBncmVlbiwKIAkJCSAgIHVuc2lnbmVkIGJsdWUsIHVuc2lnbmVkIHRyYW5zcCwKIAkJCSAgIHN0cnVjdCBmYl9pbmZvICppbmZvKQpAQCAtNjcsNiArMTY3LDM4IEBACiAJLmZiX2ltYWdlYmxpdAk9IGNmYl9pbWFnZWJsaXQsCiB9OwogCitzdGF0aWMgaW50IF9faW5pdCBlZmlmYl9zZXR1cChjaGFyICpvcHRpb25zKQoreworCWNoYXIgKnRoaXNfb3B0OworCWludCBpOworCisJaWYgKCFvcHRpb25zIHx8ICEqb3B0aW9ucykKKwkJcmV0dXJuIDA7CisKKwl3aGlsZSAoKHRoaXNfb3B0ID0gc3Ryc2VwKCZvcHRpb25zLCAiLCIpKSAhPSBOVUxMKSB7CisJCWlmICghKnRoaXNfb3B0KSBjb250aW51ZTsKKworCQlmb3IgKGkgPSAwOyBpIDwgTV9VTktOT1dOOyBpKyspIHsKKwkJCWlmICghc3RyY21wKHRoaXNfb3B0LCBkbWlfbGlzdFtpXS5vcHRuYW1lKSAmJgorCQkJCQlkbWlfbGlzdFtpXS5iYXNlICE9IDApIHsKKwkJCQlzY3JlZW5faW5mby5sZmJfYmFzZSA9IGRtaV9saXN0W2ldLmJhc2U7CisJCQkJc2NyZWVuX2luZm8ubGZiX2xpbmVsZW5ndGggPSBkbWlfbGlzdFtpXS5zdHJpZGU7CisJCQkJc2NyZWVuX2luZm8ubGZiX3dpZHRoID0gZG1pX2xpc3RbaV0ud2lkdGg7CisJCQkJc2NyZWVuX2luZm8ubGZiX2hlaWdodCA9IGRtaV9saXN0W2ldLmhlaWdodDsKKwkJCX0KKwkJfQorCQlpZiAoIXN0cm5jbXAodGhpc19vcHQsICJiYXNlOiIsIDUpKQorCQkJc2NyZWVuX2luZm8ubGZiX2Jhc2UgPSBzaW1wbGVfc3RydG91bCh0aGlzX29wdCs1LCBOVUxMLCAwKTsKKwkJZWxzZSBpZiAoIXN0cm5jbXAodGhpc19vcHQsICJzdHJpZGU6IiwgNykpCisJCQlzY3JlZW5faW5mby5sZmJfbGluZWxlbmd0aCA9IHNpbXBsZV9zdHJ0b3VsKHRoaXNfb3B0KzcsIE5VTEwsIDApICogNDsKKwkJZWxzZSBpZiAoIXN0cm5jbXAodGhpc19vcHQsICJoZWlnaHQ6IiwgNykpCisJCQlzY3JlZW5faW5mby5sZmJfaGVpZ2h0ID0gc2ltcGxlX3N0cnRvdWwodGhpc19vcHQrNywgTlVMTCwgMCk7CisJCWVsc2UgaWYgKCFzdHJuY21wKHRoaXNfb3B0LCAid2lkdGg6IiwgNikpCisJCQlzY3JlZW5faW5mby5sZmJfd2lkdGggPSBzaW1wbGVfc3RydG91bCh0aGlzX29wdCs2LCBOVUxMLCAwKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbnQgX19pbml0IGVmaWZiX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgZmJfaW5mbyAqaW5mbzsKQEAgLTc0LDYgKzIwNiwyNiBAQAogCXVuc2lnbmVkIGludCBzaXplX3Ztb2RlOwogCXVuc2lnbmVkIGludCBzaXplX3JlbWFwOwogCXVuc2lnbmVkIGludCBzaXplX3RvdGFsOworCWludCByZXF1ZXN0X3N1Y2NlZWRlZCA9IDA7CisKKwlwcmludGsoS0VSTl9JTkZPICJlZmlmYjogcHJvYmluZyBmb3IgZWZpZmJcbiIpOworCisJaWYgKCFzY3JlZW5faW5mby5sZmJfZGVwdGgpCisJCXNjcmVlbl9pbmZvLmxmYl9kZXB0aCA9IDMyOworCWlmICghc2NyZWVuX2luZm8ucGFnZXMpCisJCXNjcmVlbl9pbmZvLnBhZ2VzID0gMTsKKworCS8qIGp1c3QgYXNzdW1lIHRoZXkncmUgYWxsIHVuc2V0IGlmIGFueSBhcmUgKi8KKwlpZiAoIXNjcmVlbl9pbmZvLmJsdWVfc2l6ZSkgeworCQlzY3JlZW5faW5mby5ibHVlX3NpemUgPSA4OworCQlzY3JlZW5faW5mby5ibHVlX3BvcyA9IDA7CisJCXNjcmVlbl9pbmZvLmdyZWVuX3NpemUgPSA4OworCQlzY3JlZW5faW5mby5ncmVlbl9wb3MgPSA4OworCQlzY3JlZW5faW5mby5yZWRfc2l6ZSA9IDg7CisJCXNjcmVlbl9pbmZvLnJlZF9wb3MgPSAxNjsKKwkJc2NyZWVuX2luZm8ucnN2ZF9zaXplID0gODsKKwkJc2NyZWVuX2luZm8ucnN2ZF9wb3MgPSAyNDsKKwl9CiAKIAllZmlmYl9maXguc21lbV9zdGFydCA9IHNjcmVlbl9pbmZvLmxmYl9iYXNlOwogCWVmaWZiX2RlZmluZWQuYml0c19wZXJfcGl4ZWwgPSBzY3JlZW5faW5mby5sZmJfZGVwdGg7CkBAIC05OCwyMSArMjUwLDI1IEBACiAJICogICAgICAgICAgICAgICAgIG9wdGlvbiB0byBzaW1wbHkgdXNlIHNpemVfdG90YWwgYXMgdGhhdAogCSAqICAgICAgICAgICAgICAgICB3YXN0ZXMgcGxlbnR5IG9mIGtlcm5lbCBhZGRyZXNzIHNwYWNlLiAqLwogCXNpemVfcmVtYXAgID0gc2l6ZV92bW9kZSAqIDI7Ci0JaWYgKHNpemVfcmVtYXAgPCBzaXplX3Ztb2RlKQotCQlzaXplX3JlbWFwID0gc2l6ZV92bW9kZTsKIAlpZiAoc2l6ZV9yZW1hcCA+IHNpemVfdG90YWwpCiAJCXNpemVfcmVtYXAgPSBzaXplX3RvdGFsOworCWlmIChzaXplX3JlbWFwICUgUEFHRV9TSVpFKQorCQlzaXplX3JlbWFwICs9IFBBR0VfU0laRSAtIChzaXplX3JlbWFwICUgUEFHRV9TSVpFKTsKIAllZmlmYl9maXguc21lbV9sZW4gPSBzaXplX3JlbWFwOwogCi0JaWYgKCFyZXF1ZXN0X21lbV9yZWdpb24oZWZpZmJfZml4LnNtZW1fc3RhcnQsIHNpemVfdG90YWwsICJlZmlmYiIpKQorCWlmIChyZXF1ZXN0X21lbV9yZWdpb24oZWZpZmJfZml4LnNtZW1fc3RhcnQsIHNpemVfcmVtYXAsICJlZmlmYiIpKSB7CisJCXJlcXVlc3Rfc3VjY2VlZGVkID0gMTsKKwl9IGVsc2UgewogCQkvKiBXZSBjYW5ub3QgbWFrZSB0aGlzIGZhdGFsLiBTb21ldGltZXMgdGhpcyBjb21lcyBmcm9tIG1hZ2ljCiAJCSAgIHNwYWNlcyBvdXIgcmVzb3VyY2UgaGFuZGxlcnMgc2ltcGx5IGRvbid0IGtub3cgYWJvdXQgKi8KIAkJcHJpbnRrKEtFUk5fV0FSTklORwogCQkgICAgICAgImVmaWZiOiBjYW5ub3QgcmVzZXJ2ZSB2aWRlbyBtZW1vcnkgYXQgMHglbHhcbiIsCiAJCQllZmlmYl9maXguc21lbV9zdGFydCk7CisJfQogCiAJaW5mbyA9IGZyYW1lYnVmZmVyX2FsbG9jKHNpemVvZih1MzIpICogMTYsICZkZXYtPmRldik7CiAJaWYgKCFpbmZvKSB7CisJCXByaW50ayhLRVJOX0VSUiAiZWZpZmI6IGNhbm5vdCBhbGxvY2F0ZSBmcmFtZWJ1ZmZlclxuIik7CiAJCWVyciA9IC1FTk9NRU07CiAJCWdvdG8gZXJyX3JlbGVhc2VfbWVtOwogCX0KQEAgLTEyNSw3ICsyODEsNyBAQAogCQkJCSIweCV4IEAgMHglbHhcbiIsCiAJCQllZmlmYl9maXguc21lbV9sZW4sIGVmaWZiX2ZpeC5zbWVtX3N0YXJ0KTsKIAkJZXJyID0gLUVJTzsKLQkJZ290byBlcnJfdW5tYXA7CisJCWdvdG8gZXJyX3JlbGVhc2VfZmI7CiAJfQogCiAJcHJpbnRrKEtFUk5fSU5GTyAiZWZpZmI6IGZyYW1lYnVmZmVyIGF0IDB4JWx4LCBtYXBwZWQgdG8gMHglcCwgIgpAQCAtMTc4LDI1ICszMzQsMjcgQEAKIAlpbmZvLT5maXggPSBlZmlmYl9maXg7CiAJaW5mby0+ZmxhZ3MgPSBGQklORk9fRkxBR19ERUZBVUxUOwogCi0JaWYgKGZiX2FsbG9jX2NtYXAoJmluZm8tPmNtYXAsIDI1NiwgMCkgPCAwKSB7Ci0JCWVyciA9IC1FTk9NRU07CisJaWYgKChlcnIgPSBmYl9hbGxvY19jbWFwKCZpbmZvLT5jbWFwLCAyNTYsIDApKSA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJlZmlmYjogY2Fubm90IGFsbG9jYXRlIGNvbG9ybWFwXG4iKTsKIAkJZ290byBlcnJfdW5tYXA7CiAJfQotCWlmIChyZWdpc3Rlcl9mcmFtZWJ1ZmZlcihpbmZvKSA8IDApIHsKLQkJZXJyID0gLUVJTlZBTDsKKwlpZiAoKGVyciA9IHJlZ2lzdGVyX2ZyYW1lYnVmZmVyKGluZm8pKSA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJlZmlmYjogY2Fubm90IHJlZ2lzdGVyIGZyYW1lYnVmZmVyXG4iKTsKIAkJZ290byBlcnJfZmJfZGVhbG9jOwogCX0KIAlwcmludGsoS0VSTl9JTkZPICJmYiVkOiAlcyBmcmFtZSBidWZmZXIgZGV2aWNlXG4iLAotCSAgICAgICBpbmZvLT5ub2RlLCBpbmZvLT5maXguaWQpOworCQlpbmZvLT5ub2RlLCBpbmZvLT5maXguaWQpOwogCXJldHVybiAwOwogCiBlcnJfZmJfZGVhbG9jOgogCWZiX2RlYWxsb2NfY21hcCgmaW5mby0+Y21hcCk7CiBlcnJfdW5tYXA6CiAJaW91bm1hcChpbmZvLT5zY3JlZW5fYmFzZSk7CitlcnJfcmVsZWFzZV9mYjoKIAlmcmFtZWJ1ZmZlcl9yZWxlYXNlKGluZm8pOwogZXJyX3JlbGVhc2VfbWVtOgotCXJlbGVhc2VfbWVtX3JlZ2lvbihlZmlmYl9maXguc21lbV9zdGFydCwgc2l6ZV90b3RhbCk7CisJaWYgKHJlcXVlc3Rfc3VjY2VlZGVkKQorCQlyZWxlYXNlX21lbV9yZWdpb24oZWZpZmJfZml4LnNtZW1fc3RhcnQsIHNpemVfdG90YWwpOwogCXJldHVybiBlcnI7CiB9CiAKQEAgLTIxNCw5ICszNzIsMjIgQEAKIHN0YXRpYyBpbnQgX19pbml0IGVmaWZiX2luaXQodm9pZCkKIHsKIAlpbnQgcmV0OworCWNoYXIgKm9wdGlvbiA9IE5VTEw7CiAKIAlpZiAoc2NyZWVuX2luZm8ub3JpZ192aWRlb19pc1ZHQSAhPSBWSURFT19UWVBFX0VGSSkKIAkJcmV0dXJuIC1FTk9ERVY7CisJZG1pX2NoZWNrX3N5c3RlbShkbWlfc3lzdGVtX3RhYmxlKTsKKworCWlmIChmYl9nZXRfb3B0aW9ucygiZWZpZmIiLCAmb3B0aW9uKSkKKwkJcmV0dXJuIC1FTk9ERVY7CisJZWZpZmJfc2V0dXAob3B0aW9uKTsKKworCS8qIFdlIGRvbid0IGdldCBsaW5lbGVuZ3RoIGZyb20gVUdBIERyYXcgUHJvdG9jb2wsIG9ubHkgZnJvbQorCSAqIEVGSSBHcmFwaGljcyBQcm90b2NvbC4gIFNvIGlmIGl0J3Mgbm90IGluIERNSSwgYW5kIGl0J3Mgbm90CisJICogcGFzc2VkIGluIGZyb20gdGhlIHVzZXIsIHdlIHJlYWxseSBjYW4ndCB1c2UgdGhlIGZyYW1lYnVmZmVyLgorCSAqLworCWlmICghc2NyZWVuX2luZm8ubGZiX2xpbmVsZW5ndGgpCisJCXJldHVybiAtRU5PREVWOwogCiAJcmV0ID0gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZlZmlmYl9kcml2ZXIpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2ZibWVtLmMgYi9kcml2ZXJzL3ZpZGVvL2ZibWVtLmMKaW5kZXggMDczNzU3MC4uY2Q1ZjIwZCAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9mYm1lbS5jCisrKyBiL2RyaXZlcnMvdmlkZW8vZmJtZW0uYwpAQCAtMjgsOSArMjgsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KICNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2NvbnNvbGUuaD4KLSNpZmRlZiBDT05GSUdfS01PRAogI2luY2x1ZGUgPGxpbnV4L2ttb2QuaD4KLSNlbmRpZgogI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2VmaS5oPgpAQCAtODM3LDEzICs4MzUsNiBAQAogCXJldHVybiAoY250KSA/IGNudCA6IGVycjsKIH0KIAotI2lmZGVmIENPTkZJR19LTU9ECi1zdGF0aWMgdm9pZCB0cnlfdG9fbG9hZChpbnQgZmIpCi17Ci0JcmVxdWVzdF9tb2R1bGUoImZiJWQiLCBmYik7Ci19Ci0jZW5kaWYgLyogQ09ORklHX0tNT0QgKi8KLQogaW50CiBmYl9wYW5fZGlzcGxheShzdHJ1Y3QgZmJfaW5mbyAqaW5mbywgc3RydWN0IGZiX3Zhcl9zY3JlZW5pbmZvICp2YXIpCiB7CkBAIC0xMDExLDEwMyArMTAwMiwxMzIgQEAKICAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCAKLWZiX2lvY3RsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLAorc3RhdGljIGxvbmcKK2ZiX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLAogCSB1bnNpZ25lZCBsb25nIGFyZykKIHsKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZTsKIAlpbnQgZmJpZHggPSBpbWlub3IoaW5vZGUpOwotCXN0cnVjdCBmYl9pbmZvICppbmZvID0gcmVnaXN0ZXJlZF9mYltmYmlkeF07Ci0Jc3RydWN0IGZiX29wcyAqZmIgPSBpbmZvLT5mYm9wczsKKwlzdHJ1Y3QgZmJfaW5mbyAqaW5mbzsKKwlzdHJ1Y3QgZmJfb3BzICpmYjsKIAlzdHJ1Y3QgZmJfdmFyX3NjcmVlbmluZm8gdmFyOwogCXN0cnVjdCBmYl9maXhfc2NyZWVuaW5mbyBmaXg7CiAJc3RydWN0IGZiX2NvbjJmYm1hcCBjb24yZmI7CiAJc3RydWN0IGZiX2NtYXBfdXNlciBjbWFwOwogCXN0cnVjdCBmYl9ldmVudCBldmVudDsKIAl2b2lkIF9fdXNlciAqYXJncCA9ICh2b2lkIF9fdXNlciAqKWFyZzsKLQlpbnQgaTsKLQkKLQlpZiAoIWZiKQorCWxvbmcgcmV0ID0gMDsKKworCWluZm8gPSByZWdpc3RlcmVkX2ZiW2ZiaWR4XTsKKwltdXRleF9sb2NrKCZpbmZvLT5sb2NrKTsKKwlmYiA9IGluZm8tPmZib3BzOworCisJaWYgKCFmYikgeworCQltdXRleF91bmxvY2soJmluZm8tPmxvY2spOwogCQlyZXR1cm4gLUVOT0RFVjsKKwl9CiAJc3dpdGNoIChjbWQpIHsKIAljYXNlIEZCSU9HRVRfVlNDUkVFTklORk86Ci0JCXJldHVybiBjb3B5X3RvX3VzZXIoYXJncCwgJmluZm8tPnZhciwKKwkJcmV0ID0gY29weV90b191c2VyKGFyZ3AsICZpbmZvLT52YXIsCiAJCQkJICAgIHNpemVvZih2YXIpKSA/IC1FRkFVTFQgOiAwOworCQlicmVhazsKIAljYXNlIEZCSU9QVVRfVlNDUkVFTklORk86Ci0JCWlmIChjb3B5X2Zyb21fdXNlcigmdmFyLCBhcmdwLCBzaXplb2YodmFyKSkpCi0JCQlyZXR1cm4gLUVGQVVMVDsKKwkJaWYgKGNvcHlfZnJvbV91c2VyKCZ2YXIsIGFyZ3AsIHNpemVvZih2YXIpKSkgeworCQkJcmV0ID0gIC1FRkFVTFQ7CisJCQlicmVhazsKKwkJfQogCQlhY3F1aXJlX2NvbnNvbGVfc2VtKCk7CiAJCWluZm8tPmZsYWdzIHw9IEZCSU5GT19NSVNDX1VTRVJFVkVOVDsKLQkJaSA9IGZiX3NldF92YXIoaW5mbywgJnZhcik7CisJCXJldCA9IGZiX3NldF92YXIoaW5mbywgJnZhcik7CiAJCWluZm8tPmZsYWdzICY9IH5GQklORk9fTUlTQ19VU0VSRVZFTlQ7CiAJCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKLQkJaWYgKGkpIHJldHVybiBpOwotCQlpZiAoY29weV90b191c2VyKGFyZ3AsICZ2YXIsIHNpemVvZih2YXIpKSkKLQkJCXJldHVybiAtRUZBVUxUOwotCQlyZXR1cm4gMDsKKwkJaWYgKHJldCA9PSAwICYmIGNvcHlfdG9fdXNlcihhcmdwLCAmdmFyLCBzaXplb2YodmFyKSkpCisJCQlyZXQgPSAtRUZBVUxUOworCQlicmVhazsKIAljYXNlIEZCSU9HRVRfRlNDUkVFTklORk86Ci0JCXJldHVybiBjb3B5X3RvX3VzZXIoYXJncCwgJmluZm8tPmZpeCwKKwkJcmV0ID0gY29weV90b191c2VyKGFyZ3AsICZpbmZvLT5maXgsCiAJCQkJICAgIHNpemVvZihmaXgpKSA/IC1FRkFVTFQgOiAwOworCQlicmVhazsKIAljYXNlIEZCSU9QVVRDTUFQOgogCQlpZiAoY29weV9mcm9tX3VzZXIoJmNtYXAsIGFyZ3AsIHNpemVvZihjbWFwKSkpCi0JCQlyZXR1cm4gLUVGQVVMVDsKLQkJcmV0dXJuIChmYl9zZXRfdXNlcl9jbWFwKCZjbWFwLCBpbmZvKSk7CisJCQlyZXQgPSAtRUZBVUxUOworCQllbHNlCisJCQlyZXQgPSBmYl9zZXRfdXNlcl9jbWFwKCZjbWFwLCBpbmZvKTsKKwkJYnJlYWs7CiAJY2FzZSBGQklPR0VUQ01BUDoKIAkJaWYgKGNvcHlfZnJvbV91c2VyKCZjbWFwLCBhcmdwLCBzaXplb2YoY21hcCkpKQotCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCXJldHVybiBmYl9jbWFwX3RvX3VzZXIoJmluZm8tPmNtYXAsICZjbWFwKTsKKwkJCXJldCA9IC1FRkFVTFQ7CisJCWVsc2UKKwkJCXJldCA9IGZiX2NtYXBfdG9fdXNlcigmaW5mby0+Y21hcCwgJmNtYXApOworCQlicmVhazsKIAljYXNlIEZCSU9QQU5fRElTUExBWToKLQkJaWYgKGNvcHlfZnJvbV91c2VyKCZ2YXIsIGFyZ3AsIHNpemVvZih2YXIpKSkKLQkJCXJldHVybiAtRUZBVUxUOworCQlpZiAoY29weV9mcm9tX3VzZXIoJnZhciwgYXJncCwgc2l6ZW9mKHZhcikpKSB7CisJCQlyZXQgPSAtRUZBVUxUOworCQkJYnJlYWs7CisJCX0KIAkJYWNxdWlyZV9jb25zb2xlX3NlbSgpOwotCQlpID0gZmJfcGFuX2Rpc3BsYXkoaW5mbywgJnZhcik7CisJCXJldCA9IGZiX3Bhbl9kaXNwbGF5KGluZm8sICZ2YXIpOwogCQlyZWxlYXNlX2NvbnNvbGVfc2VtKCk7Ci0JCWlmIChpKQotCQkJcmV0dXJuIGk7Ci0JCWlmIChjb3B5X3RvX3VzZXIoYXJncCwgJnZhciwgc2l6ZW9mKHZhcikpKQotCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCXJldHVybiAwOworCQlpZiAocmV0ID09IDAgJiYgY29weV90b191c2VyKGFyZ3AsICZ2YXIsIHNpemVvZih2YXIpKSkKKwkJCXJldCA9IC1FRkFVTFQ7CisJCWJyZWFrOwogCWNhc2UgRkJJT19DVVJTT1I6Ci0JCXJldHVybiAtRUlOVkFMOworCQlyZXQgPSAtRUlOVkFMOworCQlicmVhazsKIAljYXNlIEZCSU9HRVRfQ09OMkZCTUFQOgogCQlpZiAoY29weV9mcm9tX3VzZXIoJmNvbjJmYiwgYXJncCwgc2l6ZW9mKGNvbjJmYikpKQotCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCWlmIChjb24yZmIuY29uc29sZSA8IDEgfHwgY29uMmZiLmNvbnNvbGUgPiBNQVhfTlJfQ09OU09MRVMpCi0JCSAgICByZXR1cm4gLUVJTlZBTDsKLQkJY29uMmZiLmZyYW1lYnVmZmVyID0gLTE7Ci0JCWV2ZW50LmluZm8gPSBpbmZvOwotCQlldmVudC5kYXRhID0gJmNvbjJmYjsKLQkJZmJfbm90aWZpZXJfY2FsbF9jaGFpbihGQl9FVkVOVF9HRVRfQ09OU09MRV9NQVAsICZldmVudCk7Ci0JCXJldHVybiBjb3B5X3RvX3VzZXIoYXJncCwgJmNvbjJmYiwKKwkJCXJldCA9IC1FRkFVTFQ7CisJCWVsc2UgaWYgKGNvbjJmYi5jb25zb2xlIDwgMSB8fCBjb24yZmIuY29uc29sZSA+IE1BWF9OUl9DT05TT0xFUykKKwkJCXJldCA9IC1FSU5WQUw7CisJCWVsc2UgeworCQkJY29uMmZiLmZyYW1lYnVmZmVyID0gLTE7CisJCQlldmVudC5pbmZvID0gaW5mbzsKKwkJCWV2ZW50LmRhdGEgPSAmY29uMmZiOworCQkJZmJfbm90aWZpZXJfY2FsbF9jaGFpbihGQl9FVkVOVF9HRVRfQ09OU09MRV9NQVAsCisJCQkJCQkJCSZldmVudCk7CisJCQlyZXQgPSBjb3B5X3RvX3VzZXIoYXJncCwgJmNvbjJmYiwKIAkJCQkgICAgc2l6ZW9mKGNvbjJmYikpID8gLUVGQVVMVCA6IDA7CisJCX0KKwkJYnJlYWs7CiAJY2FzZSBGQklPUFVUX0NPTjJGQk1BUDoKLQkJaWYgKGNvcHlfZnJvbV91c2VyKCZjb24yZmIsIGFyZ3AsIHNpemVvZihjb24yZmIpKSkKLQkJCXJldHVybiAtIEVGQVVMVDsKLQkJaWYgKGNvbjJmYi5jb25zb2xlIDwgMSB8fCBjb24yZmIuY29uc29sZSA+IE1BWF9OUl9DT05TT0xFUykKLQkJICAgIHJldHVybiAtRUlOVkFMOwotCQlpZiAoY29uMmZiLmZyYW1lYnVmZmVyIDwgMCB8fCBjb24yZmIuZnJhbWVidWZmZXIgPj0gRkJfTUFYKQotCQkgICAgcmV0dXJuIC1FSU5WQUw7Ci0jaWZkZWYgQ09ORklHX0tNT0QKKwkJaWYgKGNvcHlfZnJvbV91c2VyKCZjb24yZmIsIGFyZ3AsIHNpemVvZihjb24yZmIpKSkgeworCQkJcmV0ID0gLUVGQVVMVDsKKwkJCWJyZWFrOworCQl9CisJCWlmIChjb24yZmIuY29uc29sZSA8IDEgfHwgY29uMmZiLmNvbnNvbGUgPiBNQVhfTlJfQ09OU09MRVMpIHsKKwkJCXJldCA9IC1FSU5WQUw7CisJCQlicmVhazsKKwkJfQorCQlpZiAoY29uMmZiLmZyYW1lYnVmZmVyIDwgMCB8fCBjb24yZmIuZnJhbWVidWZmZXIgPj0gRkJfTUFYKSB7CisJCQlyZXQgPSAtRUlOVkFMOworCQkJYnJlYWs7CisJCX0KIAkJaWYgKCFyZWdpc3RlcmVkX2ZiW2NvbjJmYi5mcmFtZWJ1ZmZlcl0pCi0JCSAgICB0cnlfdG9fbG9hZChjb24yZmIuZnJhbWVidWZmZXIpOwotI2VuZGlmIC8qIENPTkZJR19LTU9EICovCi0JCWlmICghcmVnaXN0ZXJlZF9mYltjb24yZmIuZnJhbWVidWZmZXJdKQotCQkgICAgcmV0dXJuIC1FSU5WQUw7CisJCQlyZXF1ZXN0X21vZHVsZSgiZmIlZCIsIGNvbjJmYi5mcmFtZWJ1ZmZlcik7CisJCWlmICghcmVnaXN0ZXJlZF9mYltjb24yZmIuZnJhbWVidWZmZXJdKSB7CisJCQlyZXQgPSAtRUlOVkFMOworCQkJYnJlYWs7CisJCX0KIAkJZXZlbnQuaW5mbyA9IGluZm87CiAJCWV2ZW50LmRhdGEgPSAmY29uMmZiOwotCQlyZXR1cm4gZmJfbm90aWZpZXJfY2FsbF9jaGFpbihGQl9FVkVOVF9TRVRfQ09OU09MRV9NQVAsCisJCXJldCA9IGZiX25vdGlmaWVyX2NhbGxfY2hhaW4oRkJfRVZFTlRfU0VUX0NPTlNPTEVfTUFQLAogCQkJCQkgICAgICAmZXZlbnQpOworCQlicmVhazsKIAljYXNlIEZCSU9CTEFOSzoKIAkJYWNxdWlyZV9jb25zb2xlX3NlbSgpOwogCQlpbmZvLT5mbGFncyB8PSBGQklORk9fTUlTQ19VU0VSRVZFTlQ7Ci0JCWkgPSBmYl9ibGFuayhpbmZvLCBhcmcpOworCQlyZXQgPSBmYl9ibGFuayhpbmZvLCBhcmcpOwogCQlpbmZvLT5mbGFncyAmPSB+RkJJTkZPX01JU0NfVVNFUkVWRU5UOwogCQlyZWxlYXNlX2NvbnNvbGVfc2VtKCk7Ci0JCXJldHVybiBpOworCQlicmVhazs7CiAJZGVmYXVsdDoKIAkJaWYgKGZiLT5mYl9pb2N0bCA9PSBOVUxMKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCXJldHVybiBmYi0+ZmJfaW9jdGwoaW5mbywgY21kLCBhcmcpOworCQkJcmV0ID0gLUVOT1RUWTsKKwkJZWxzZQorCQkJcmV0ID0gZmItPmZiX2lvY3RsKGluZm8sIGNtZCwgYXJnKTsKIAl9CisJbXV0ZXhfdW5sb2NrKCZpbmZvLT5sb2NrKTsKKwlyZXR1cm4gcmV0OwogfQogCiAjaWZkZWYgQ09ORklHX0NPTVBBVApAQCAtMTE2MSw3ICsxMTgxLDcgQEAKIAkgICAgcHV0X3VzZXIoY29tcGF0X3B0cihkYXRhKSwgJmNtYXAtPnRyYW5zcCkpCiAJCXJldHVybiAtRUZBVUxUOwogCi0JZXJyID0gZmJfaW9jdGwoaW5vZGUsIGZpbGUsIGNtZCwgKHVuc2lnbmVkIGxvbmcpIGNtYXApOworCWVyciA9IGZiX2lvY3RsKGZpbGUsIGNtZCwgKHVuc2lnbmVkIGxvbmcpIGNtYXApOwogCiAJaWYgKCFlcnIpIHsKIAkJaWYgKGNvcHlfaW5fdXNlcigmY21hcDMyLT5zdGFydCwKQEAgLTEyMTUsNyArMTIzNSw3IEBACiAKIAlvbGRfZnMgPSBnZXRfZnMoKTsKIAlzZXRfZnMoS0VSTkVMX0RTKTsKLQllcnIgPSBmYl9pb2N0bChpbm9kZSwgZmlsZSwgY21kLCAodW5zaWduZWQgbG9uZykgJmZpeCk7CisJZXJyID0gZmJfaW9jdGwoZmlsZSwgY21kLCAodW5zaWduZWQgbG9uZykgJmZpeCk7CiAJc2V0X2ZzKG9sZF9mcyk7CiAKIAlpZiAoIWVycikKQEAgLTEyMzMsNyArMTI1Myw3IEBACiAJc3RydWN0IGZiX29wcyAqZmIgPSBpbmZvLT5mYm9wczsKIAlsb25nIHJldCA9IC1FTk9JT0NUTENNRDsKIAotCWxvY2tfa2VybmVsKCk7CisJbXV0ZXhfbG9jaygmaW5mby0+bG9jayk7CiAJc3dpdGNoKGNtZCkgewogCWNhc2UgRkJJT0dFVF9WU0NSRUVOSU5GTzoKIAljYXNlIEZCSU9QVVRfVlNDUkVFTklORk86CkBAIC0xMjQyLDcgKzEyNjIsNyBAQAogCWNhc2UgRkJJT1BVVF9DT04yRkJNQVA6CiAJCWFyZyA9ICh1bnNpZ25lZCBsb25nKSBjb21wYXRfcHRyKGFyZyk7CiAJY2FzZSBGQklPQkxBTks6Ci0JCXJldCA9IGZiX2lvY3RsKGlub2RlLCBmaWxlLCBjbWQsIGFyZyk7CisJCXJldCA9IGZiX2lvY3RsKGZpbGUsIGNtZCwgYXJnKTsKIAkJYnJlYWs7CiAKIAljYXNlIEZCSU9HRVRfRlNDUkVFTklORk86CkBAIC0xMjU5LDcgKzEyNzksNyBAQAogCQkJcmV0ID0gZmItPmZiX2NvbXBhdF9pb2N0bChpbmZvLCBjbWQsIGFyZyk7CiAJCWJyZWFrOwogCX0KLQl1bmxvY2tfa2VybmVsKCk7CisJbXV0ZXhfdW5sb2NrKCZpbmZvLT5sb2NrKTsKIAlyZXR1cm4gcmV0OwogfQogI2VuZGlmCkBAIC0xMjgxLDEzICsxMzAxLDEzIEBACiAJCXJldHVybiAtRU5PREVWOwogCWlmIChmYi0+ZmJfbW1hcCkgewogCQlpbnQgcmVzOwotCQlsb2NrX2tlcm5lbCgpOworCQltdXRleF9sb2NrKCZpbmZvLT5sb2NrKTsKIAkJcmVzID0gZmItPmZiX21tYXAoaW5mbywgdm1hKTsKLQkJdW5sb2NrX2tlcm5lbCgpOworCQltdXRleF91bmxvY2soJmluZm8tPmxvY2spOwogCQlyZXR1cm4gcmVzOwogCX0KIAotCWxvY2tfa2VybmVsKCk7CisJbXV0ZXhfbG9jaygmaW5mby0+bG9jayk7CiAKIAkvKiBmcmFtZSBidWZmZXIgbWVtb3J5ICovCiAJc3RhcnQgPSBpbmZvLT5maXguc21lbV9zdGFydDsKQEAgLTEyOTYsMTMgKzEzMTYsMTMgQEAKIAkJLyogbWVtb3J5IG1hcHBlZCBpbyAqLwogCQlvZmYgLT0gbGVuOwogCQlpZiAoaW5mby0+dmFyLmFjY2VsX2ZsYWdzKSB7Ci0JCQl1bmxvY2tfa2VybmVsKCk7CisJCQltdXRleF91bmxvY2soJmluZm8tPmxvY2spOwogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KIAkJc3RhcnQgPSBpbmZvLT5maXgubW1pb19zdGFydDsKIAkJbGVuID0gUEFHRV9BTElHTigoc3RhcnQgJiB+UEFHRV9NQVNLKSArIGluZm8tPmZpeC5tbWlvX2xlbik7CiAJfQotCXVubG9ja19rZXJuZWwoKTsKKwltdXRleF91bmxvY2soJmluZm8tPmxvY2spOwogCXN0YXJ0ICY9IFBBR0VfTUFTSzsKIAlpZiAoKHZtYS0+dm1fZW5kIC0gdm1hLT52bV9zdGFydCArIG9mZikgPiBsZW4pCiAJCXJldHVybiAtRUlOVkFMOwpAQCAtMTMyNiwxNSArMTM0NiwxMyBAQAogCiAJaWYgKGZiaWR4ID49IEZCX01BWCkKIAkJcmV0dXJuIC1FTk9ERVY7Ci0JbG9ja19rZXJuZWwoKTsKLSNpZmRlZiBDT05GSUdfS01PRAotCWlmICghKGluZm8gPSByZWdpc3RlcmVkX2ZiW2ZiaWR4XSkpCi0JCXRyeV90b19sb2FkKGZiaWR4KTsKLSNlbmRpZiAvKiBDT05GSUdfS01PRCAqLwotCWlmICghKGluZm8gPSByZWdpc3RlcmVkX2ZiW2ZiaWR4XSkpIHsKLQkJcmVzID0gLUVOT0RFVjsKLQkJZ290byBvdXQ7Ci0JfQorCWluZm8gPSByZWdpc3RlcmVkX2ZiW2ZiaWR4XTsKKwlpZiAoIWluZm8pCisJCXJlcXVlc3RfbW9kdWxlKCJmYiVkIiwgZmJpZHgpOworCWluZm8gPSByZWdpc3RlcmVkX2ZiW2ZiaWR4XTsKKwlpZiAoIWluZm8pCisJCXJldHVybiAtRU5PREVWOworCW11dGV4X2xvY2soJmluZm8tPmxvY2spOwogCWlmICghdHJ5X21vZHVsZV9nZXQoaW5mby0+ZmJvcHMtPm93bmVyKSkgewogCQlyZXMgPSAtRU5PREVWOwogCQlnb3RvIG91dDsKQEAgLTEzNTAsNyArMTM2OCw3IEBACiAJCWZiX2RlZmVycmVkX2lvX29wZW4oaW5mbywgaW5vZGUsIGZpbGUpOwogI2VuZGlmCiBvdXQ6Ci0JdW5sb2NrX2tlcm5lbCgpOworCW11dGV4X3VubG9jaygmaW5mby0+bG9jayk7CiAJcmV0dXJuIHJlczsKIH0KIApAQCAtMTM1OSwxMSArMTM3NywxMSBAQAogewogCXN0cnVjdCBmYl9pbmZvICogY29uc3QgaW5mbyA9IGZpbGUtPnByaXZhdGVfZGF0YTsKIAotCWxvY2tfa2VybmVsKCk7CisJbXV0ZXhfbG9jaygmaW5mby0+bG9jayk7CiAJaWYgKGluZm8tPmZib3BzLT5mYl9yZWxlYXNlKQogCQlpbmZvLT5mYm9wcy0+ZmJfcmVsZWFzZShpbmZvLDEpOwogCW1vZHVsZV9wdXQoaW5mby0+ZmJvcHMtPm93bmVyKTsKLQl1bmxvY2tfa2VybmVsKCk7CisJbXV0ZXhfdW5sb2NrKCZpbmZvLT5sb2NrKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTM3MSw3ICsxMzg5LDcgQEAKIAkub3duZXIgPQlUSElTX01PRFVMRSwKIAkucmVhZCA9CQlmYl9yZWFkLAogCS53cml0ZSA9CWZiX3dyaXRlLAotCS5pb2N0bCA9CWZiX2lvY3RsLAorCS51bmxvY2tlZF9pb2N0bCA9IGZiX2lvY3RsLAogI2lmZGVmIENPTkZJR19DT01QQVQKIAkuY29tcGF0X2lvY3RsID0gZmJfY29tcGF0X2lvY3RsLAogI2VuZGlmCkBAIC0xNDQyLDEwICsxNDYwLDEwIEBACiAJCWlmICghcmVnaXN0ZXJlZF9mYltpXSkKIAkJCWJyZWFrOwogCWZiX2luZm8tPm5vZGUgPSBpOworCW11dGV4X2luaXQoJmZiX2luZm8tPmxvY2spOwogCi0JZmJfaW5mby0+ZGV2ID0gZGV2aWNlX2NyZWF0ZV9kcnZkYXRhKGZiX2NsYXNzLCBmYl9pbmZvLT5kZXZpY2UsCi0JCQkJCSAgICAgTUtERVYoRkJfTUFKT1IsIGkpLCBOVUxMLAotCQkJCQkgICAgICJmYiVkIiwgaSk7CisJZmJfaW5mby0+ZGV2ID0gZGV2aWNlX2NyZWF0ZShmYl9jbGFzcywgZmJfaW5mby0+ZGV2aWNlLAorCQkJCSAgICAgTUtERVYoRkJfTUFKT1IsIGkpLCBOVUxMLCAiZmIlZCIsIGkpOwogCWlmIChJU19FUlIoZmJfaW5mby0+ZGV2KSkgewogCQkvKiBOb3QgZmF0YWwgKi8KIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiVW5hYmxlIHRvIGNyZWF0ZSBkZXZpY2UgZm9yIGZyYW1lYnVmZmVyICVkOyBlcnJubyA9ICVsZFxuIiwgaSwgUFRSX0VSUihmYl9pbmZvLT5kZXYpKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vZmJtb24uYyBiL2RyaXZlcnMvdmlkZW8vZmJtb24uYwppbmRleCA2YTBhYTE4Li41YzFhMmMwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2ZibW9uLmMKKysrIGIvZHJpdmVycy92aWRlby9mYm1vbi5jCkBAIC01NjQsNyArNTY0LDEzIEBACiAJCW1vZGUtPnN5bmMgfD0gRkJfU1lOQ19WRVJUX0hJR0hfQUNUOwogCW1vZGUtPnJlZnJlc2ggPSBQSVhFTF9DTE9DSy8oKEhfQUNUSVZFICsgSF9CTEFOS0lORykgKgogCQkJCSAgICAgKFZfQUNUSVZFICsgVl9CTEFOS0lORykpOwotCW1vZGUtPnZtb2RlID0gMDsKKwlpZiAoSU5URVJMQUNFRCkgeworCQltb2RlLT55cmVzICo9IDI7CisJCW1vZGUtPnVwcGVyX21hcmdpbiAqPSAyOworCQltb2RlLT5sb3dlcl9tYXJnaW4gKj0gMjsKKwkJbW9kZS0+dnN5bmNfbGVuICo9IDI7CisJCW1vZGUtPnZtb2RlIHw9IEZCX1ZNT0RFX0lOVEVSTEFDRUQ7CisJfQogCW1vZGUtPmZsYWcgPSBGQl9NT0RFX0lTX0RFVEFJTEVEOwogCiAJRFBSSU5USygiICAgICAgJWQgTUh6ICIsICBQSVhFTF9DTE9DSy8xMDAwMDAwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vaW1hY2ZiLmMgYi9kcml2ZXJzL3ZpZGVvL2ltYWNmYi5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MzY2ZWYyLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvdmlkZW8vaW1hY2ZiLmMKKysrIC9kZXYvbnVsbApAQCAtMSwzNzYgKzAsMCBAQAotLyoKLSAqIGZyYW1lYnVmZmVyIGRyaXZlciBmb3IgSW50ZWwgQmFzZWQgTWFjJ3MKLSAqCi0gKiAoYykgMjAwNiBFZGdhciBIdWNlayA8Z2ltbGlAZGFyay1ncmVlbi5jb20+Ci0gKiBPcmlnaW5hbCBpbWFjIGRyaXZlciB3cml0dGVuIGJ5IEdlcmQgS25vcnIgPGtyYXhlbEBnb2xkYmFjaC5pbi1iZXJsaW4uZGU+Ci0gKgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+Ci0jaW5jbHVkZSA8bGludXgvZmIuaD4KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+Ci0jaW5jbHVkZSA8bGludXgvbW0uaD4KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9zY3JlZW5faW5mby5oPgotI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KLSNpbmNsdWRlIDxsaW51eC9kbWkuaD4KLSNpbmNsdWRlIDxsaW51eC9lZmkuaD4KLQotI2luY2x1ZGUgPGFzbS9pby5oPgotCi0jaW5jbHVkZSA8dmlkZW8vdmdhLmg+Ci0KLXR5cGVkZWYgZW51bSBfTUFDX1RZUEUgewotCU1fSTE3LAotCU1fSTIwLAotCU1fTUlOSSwKLQlNX01BQ0JPT0ssCi0JTV9VTktOT1dOCi19IE1BQ19UWVBFOwotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotc3RhdGljIHN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyBpbWFjZmJfZGVmaW5lZCBfX2luaXRkYXRhID0gewotCS5hY3RpdmF0ZQkJPSBGQl9BQ1RJVkFURV9OT1csCi0JLmhlaWdodAkJCT0gLTEsCi0JLndpZHRoCQkJPSAtMSwKLQkucmlnaHRfbWFyZ2luCQk9IDMyLAotCS51cHBlcl9tYXJnaW4JCT0gMTYsCi0JLmxvd2VyX21hcmdpbgkJPSA0LAotCS52c3luY19sZW4JCT0gNCwKLQkudm1vZGUJCQk9IEZCX1ZNT0RFX05PTklOVEVSTEFDRUQsCi19OwotCi1zdGF0aWMgc3RydWN0IGZiX2ZpeF9zY3JlZW5pbmZvIGltYWNmYl9maXggX19pbml0ZGF0YSA9IHsKLQkuaWQJCQk9ICJJTUFDIFZHQSIsCi0JLnR5cGUJCQk9IEZCX1RZUEVfUEFDS0VEX1BJWEVMUywKLQkuYWNjZWwJCQk9IEZCX0FDQ0VMX05PTkUsCi0JLnZpc3VhbAkJCT0gRkJfVklTVUFMX1RSVUVDT0xPUiwKLX07Ci0KLXN0YXRpYyBpbnQgaW52ZXJzZTsKLXN0YXRpYyBpbnQgbW9kZWwJCT0gTV9VTktOT1dOOwotc3RhdGljIGludCBtYW51YWxfaGVpZ2h0Owotc3RhdGljIGludCBtYW51YWxfd2lkdGg7Ci0KLXN0YXRpYyBpbnQgc2V0X3N5c3RlbShjb25zdCBzdHJ1Y3QgZG1pX3N5c3RlbV9pZCAqaWQpCi17Ci0JcHJpbnRrKEtFUk5fSU5GTyAiaW1hY2ZiOiAlcyBkZXRlY3RlZCAtIHNldCBzeXN0ZW0gdG8gJWxkXG4iLAotCQlpZC0+aWRlbnQsIChsb25nKWlkLT5kcml2ZXJfZGF0YSk7Ci0KLQltb2RlbCA9IChsb25nKWlkLT5kcml2ZXJfZGF0YTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgc3RydWN0IGRtaV9zeXN0ZW1faWQgX19pbml0ZGF0YSBkbWlfc3lzdGVtX3RhYmxlW10gPSB7Ci0JeyBzZXRfc3lzdGVtLCAiaU1hYzQsMSIsIHsKLQkgIERNSV9NQVRDSChETUlfQklPU19WRU5ET1IsIkFwcGxlIENvbXB1dGVyLCBJbmMuIiksCi0JICBETUlfTUFUQ0goRE1JX1BST0RVQ1RfTkFNRSwiaU1hYzQsMSIpIH0sICh2b2lkKilNX0kxN30sCi0JeyBzZXRfc3lzdGVtLCAiTWFjQm9va1BybzEsMSIsIHsKLQkgIERNSV9NQVRDSChETUlfQklPU19WRU5ET1IsIkFwcGxlIENvbXB1dGVyLCBJbmMuIiksCi0JICBETUlfTUFUQ0goRE1JX1BST0RVQ1RfTkFNRSwiTWFjQm9va1BybzEsMSIpIH0sICh2b2lkKilNX0kxN30sCi0JeyBzZXRfc3lzdGVtLCAiTWFjQm9vazEsMSIsIHsKLQkgIERNSV9NQVRDSChETUlfQklPU19WRU5ET1IsIkFwcGxlIENvbXB1dGVyLCBJbmMuIiksCi0JICBETUlfTUFUQ0goRE1JX1BST0RVQ1RfTkFNRSwiTWFjQm9vazEsMSIpfSwgKHZvaWQgKilNX01BQ0JPT0t9LAotCXsgc2V0X3N5c3RlbSwgIk1hY21pbmkxLDEiLCB7Ci0JICBETUlfTUFUQ0goRE1JX0JJT1NfVkVORE9SLCJBcHBsZSBDb21wdXRlciwgSW5jLiIpLAotCSAgRE1JX01BVENIKERNSV9QUk9EVUNUX05BTUUsIk1hY21pbmkxLDEiKX0sICh2b2lkICopTV9NSU5JfSwKLQl7fSwKLX07Ci0KLSNkZWZpbmUJREVGQVVMVF9GQl9NRU0JMTAyNCoxMDI0KjE2Ci0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi1zdGF0aWMgaW50IGltYWNmYl9zZXRjb2xyZWcodW5zaWduZWQgcmVnbm8sIHVuc2lnbmVkIHJlZCwgdW5zaWduZWQgZ3JlZW4sCi0JCQkgICAgdW5zaWduZWQgYmx1ZSwgdW5zaWduZWQgdHJhbnNwLAotCQkJICAgIHN0cnVjdCBmYl9pbmZvICppbmZvKQotewotCS8qCi0JICogIFNldCBhIHNpbmdsZSBjb2xvciByZWdpc3Rlci4gVGhlIHZhbHVlcyBzdXBwbGllZCBhcmUKLQkgKiAgYWxyZWFkeSByb3VuZGVkIGRvd24gdG8gdGhlIGhhcmR3YXJlJ3MgY2FwYWJpbGl0aWVzCi0JICogIChhY2NvcmRpbmcgdG8gdGhlIGVudHJpZXMgaW4gdGhlIGB2YXInIHN0cnVjdHVyZSkuIFJldHVybgotCSAqICAhPSAwIGZvciBpbnZhbGlkIHJlZ25vLgotCSAqLwotCi0JaWYgKHJlZ25vID49IGluZm8tPmNtYXAubGVuKQotCQlyZXR1cm4gMTsKLQotCWlmIChyZWdubyA8IDE2KSB7Ci0JCXJlZCAgID4+PSA4OwotCQlncmVlbiA+Pj0gODsKLQkJYmx1ZSAgPj49IDg7Ci0JCSgodTMyICopKGluZm8tPnBzZXVkb19wYWxldHRlKSlbcmVnbm9dID0KLQkJCShyZWQgICA8PCBpbmZvLT52YXIucmVkLm9mZnNldCkgICB8Ci0JCQkoZ3JlZW4gPDwgaW5mby0+dmFyLmdyZWVuLm9mZnNldCkgfAotCQkJKGJsdWUgIDw8IGluZm8tPnZhci5ibHVlLm9mZnNldCk7Ci0JfQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgc3RydWN0IGZiX29wcyBpbWFjZmJfb3BzID0gewotCS5vd25lcgkJPSBUSElTX01PRFVMRSwKLQkuZmJfc2V0Y29scmVnCT0gaW1hY2ZiX3NldGNvbHJlZywKLQkuZmJfZmlsbHJlY3QJPSBjZmJfZmlsbHJlY3QsCi0JLmZiX2NvcHlhcmVhCT0gY2ZiX2NvcHlhcmVhLAotCS5mYl9pbWFnZWJsaXQJPSBjZmJfaW1hZ2VibGl0LAotfTsKLQotc3RhdGljIGludCBfX2luaXQgaW1hY2ZiX3NldHVwKGNoYXIgKm9wdGlvbnMpCi17Ci0JY2hhciAqdGhpc19vcHQ7Ci0KLQlpZiAoIW9wdGlvbnMgfHwgISpvcHRpb25zKQotCQlyZXR1cm4gMDsKLQotCXdoaWxlICgodGhpc19vcHQgPSBzdHJzZXAoJm9wdGlvbnMsICIsIikpICE9IE5VTEwpIHsKLQkJaWYgKCEqdGhpc19vcHQpIGNvbnRpbnVlOwotCi0JCWlmICghc3RyY21wKHRoaXNfb3B0LCAiaW52ZXJzZSIpKQotCQkJaW52ZXJzZSA9IDE7Ci0JCWVsc2UgaWYgKCFzdHJjbXAodGhpc19vcHQsICJpMTciKSkKLQkJCW1vZGVsID0gTV9JMTc7Ci0JCWVsc2UgaWYgKCFzdHJjbXAodGhpc19vcHQsICJpMjAiKSkKLQkJCW1vZGVsID0gTV9JMjA7Ci0JCWVsc2UgaWYgKCFzdHJjbXAodGhpc19vcHQsICJtaW5pIikpCi0JCQltb2RlbCA9IE1fTUlOSTsKLQkJZWxzZSBpZiAoIXN0cmNtcCh0aGlzX29wdCwgIm1hY2Jvb2siKSkKLQkJCW1vZGVsID0gTV9NQUNCT09LOwotCQllbHNlIGlmICghc3RybmNtcCh0aGlzX29wdCwgImhlaWdodDoiLCA3KSkKLQkJCW1hbnVhbF9oZWlnaHQgPSBzaW1wbGVfc3RydG91bCh0aGlzX29wdCs3LCBOVUxMLCAwKTsKLQkJZWxzZSBpZiAoIXN0cm5jbXAodGhpc19vcHQsICJ3aWR0aDoiLCA2KSkKLQkJCW1hbnVhbF93aWR0aCA9IHNpbXBsZV9zdHJ0b3VsKHRoaXNfb3B0KzYsIE5VTEwsIDApOwotCX0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBfX2luaXQgaW1hY2ZiX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgZmJfaW5mbyAqaW5mbzsKLQlpbnQgZXJyOwotCXVuc2lnbmVkIGludCBzaXplX3Ztb2RlOwotCXVuc2lnbmVkIGludCBzaXplX3JlbWFwOwotCXVuc2lnbmVkIGludCBzaXplX3RvdGFsOwotCi0Jc2NyZWVuX2luZm8ubGZiX2RlcHRoID0gMzI7Ci0Jc2NyZWVuX2luZm8ubGZiX3NpemUgPSBERUZBVUxUX0ZCX01FTSAvIDB4MTAwMDA7Ci0Jc2NyZWVuX2luZm8ucGFnZXM9MTsKLQlzY3JlZW5faW5mby5ibHVlX3NpemUgPSA4OwotCXNjcmVlbl9pbmZvLmJsdWVfcG9zID0gMDsKLQlzY3JlZW5faW5mby5ncmVlbl9zaXplID0gODsKLQlzY3JlZW5faW5mby5ncmVlbl9wb3MgPSA4OwotCXNjcmVlbl9pbmZvLnJlZF9zaXplID0gODsKLQlzY3JlZW5faW5mby5yZWRfcG9zID0gMTY7Ci0Jc2NyZWVuX2luZm8ucnN2ZF9zaXplID0gODsKLQlzY3JlZW5faW5mby5yc3ZkX3BvcyA9IDI0OwotCi0Jc3dpdGNoIChtb2RlbCkgewotCWNhc2UgTV9JMTc6Ci0JCXNjcmVlbl9pbmZvLmxmYl93aWR0aCA9IDE0NDA7Ci0JCXNjcmVlbl9pbmZvLmxmYl9oZWlnaHQgPSA5MDA7Ci0JCXNjcmVlbl9pbmZvLmxmYl9saW5lbGVuZ3RoID0gMTQ3MiAqIDQ7Ci0JCXNjcmVlbl9pbmZvLmxmYl9iYXNlID0gMHg4MDAxMDAwMDsKLQkJYnJlYWs7Ci0JY2FzZSBNX0kyMDoKLQkJc2NyZWVuX2luZm8ubGZiX3dpZHRoID0gMTY4MDsKLQkJc2NyZWVuX2luZm8ubGZiX2hlaWdodCA9IDEwNTA7Ci0JCXNjcmVlbl9pbmZvLmxmYl9saW5lbGVuZ3RoID0gMTcyOCAqIDQ7Ci0JCXNjcmVlbl9pbmZvLmxmYl9iYXNlID0gMHg4MDAxMDAwMDsKLQkJYnJlYWs7Ci0JY2FzZSBNX01JTkk6Ci0JCXNjcmVlbl9pbmZvLmxmYl93aWR0aCA9IDEwMjQ7Ci0JCXNjcmVlbl9pbmZvLmxmYl9oZWlnaHQgPSA3Njg7Ci0JCXNjcmVlbl9pbmZvLmxmYl9saW5lbGVuZ3RoID0gMjA0OCAqIDQ7Ci0JCXNjcmVlbl9pbmZvLmxmYl9iYXNlID0gMHg4MDAwMDAwMDsKLQkJYnJlYWs7Ci0JY2FzZSBNX01BQ0JPT0s6Ci0JCXNjcmVlbl9pbmZvLmxmYl93aWR0aCA9IDEyODA7Ci0JCXNjcmVlbl9pbmZvLmxmYl9oZWlnaHQgPSA4MDA7Ci0JCXNjcmVlbl9pbmZvLmxmYl9saW5lbGVuZ3RoID0gMjA0OCAqIDQ7Ci0JCXNjcmVlbl9pbmZvLmxmYl9iYXNlID0gMHg4MDAwMDAwMDsKLQkJYnJlYWs7Ci0gCX0KLQotCS8qIGlmIHRoZSB1c2VyIHdhbnRzIHRvIG1hbnVhbGx5IHNwZWNpZnkgaGVpZ2h0L3dpZHRoLAotCSAgIHdlIHdpbGwgb3ZlcnJpZGUgdGhlIGRlZmF1bHRzICovCi0JLyogVE9ETzogZXZlbnR1YWxseSBnZXQgYXV0by1kZXRlY3Rpb24gd29ya2luZyAqLwotCWlmIChtYW51YWxfaGVpZ2h0ID4gMCkKLQkJc2NyZWVuX2luZm8ubGZiX2hlaWdodCA9IG1hbnVhbF9oZWlnaHQ7Ci0JaWYgKG1hbnVhbF93aWR0aCA+IDApCi0JCXNjcmVlbl9pbmZvLmxmYl93aWR0aCA9IG1hbnVhbF93aWR0aDsKLQotCWltYWNmYl9maXguc21lbV9zdGFydCA9IHNjcmVlbl9pbmZvLmxmYl9iYXNlOwotCWltYWNmYl9kZWZpbmVkLmJpdHNfcGVyX3BpeGVsID0gc2NyZWVuX2luZm8ubGZiX2RlcHRoOwotCWltYWNmYl9kZWZpbmVkLnhyZXMgPSBzY3JlZW5faW5mby5sZmJfd2lkdGg7Ci0JaW1hY2ZiX2RlZmluZWQueXJlcyA9IHNjcmVlbl9pbmZvLmxmYl9oZWlnaHQ7Ci0JaW1hY2ZiX2ZpeC5saW5lX2xlbmd0aCA9IHNjcmVlbl9pbmZvLmxmYl9saW5lbGVuZ3RoOwotCi0JLyogICBzaXplX3Ztb2RlIC0tIHRoYXQgaXMgdGhlIGFtb3VudCBvZiBtZW1vcnkgbmVlZGVkIGZvciB0aGUKLQkgKiAgICAgICAgICAgICAgICAgdXNlZCB2aWRlbyBtb2RlLCBpLmUuIHRoZSBtaW5pbXVtIGFtb3VudCBvZgotCSAqICAgICAgICAgICAgICAgICBtZW1vcnkgd2UgbmVlZC4gKi8KLQlzaXplX3Ztb2RlID0gaW1hY2ZiX2RlZmluZWQueXJlcyAqIGltYWNmYl9maXgubGluZV9sZW5ndGg7Ci0KLQkvKiAgIHNpemVfdG90YWwgLS0gYWxsIHZpZGVvIG1lbW9yeSB3ZSBoYXZlLiBVc2VkIGZvcgotCSAqICAgICAgICAgICAgICAgICBlbnRyaWVzLCByZXNzb3VyY2UgYWxsb2NhdGlvbiBhbmQgYm91bmRzCi0JICogICAgICAgICAgICAgICAgIGNoZWNraW5nLiAqLwotCXNpemVfdG90YWwgPSBzY3JlZW5faW5mby5sZmJfc2l6ZSAqIDY1NTM2OwotCWlmIChzaXplX3RvdGFsIDwgc2l6ZV92bW9kZSkKLQkJc2l6ZV90b3RhbCA9IHNpemVfdm1vZGU7Ci0KLQkvKiAgIHNpemVfcmVtYXAgLS0gdGhlIGFtb3VudCBvZiB2aWRlbyBtZW1vcnkgd2UgYXJlIGdvaW5nIHRvCi0JICogICAgICAgICAgICAgICAgIHVzZSBmb3IgaW1hY2ZiLiAgV2l0aCBtb2Rlcm4gY2FyZHMgaXQgaXMgbm8KLQkgKiAgICAgICAgICAgICAgICAgb3B0aW9uIHRvIHNpbXBseSB1c2Ugc2l6ZV90b3RhbCBhcyB0aGF0Ci0JICogICAgICAgICAgICAgICAgIHdhc3RlcyBwbGVudHkgb2Yga2VybmVsIGFkZHJlc3Mgc3BhY2UuICovCi0Jc2l6ZV9yZW1hcCAgPSBzaXplX3Ztb2RlICogMjsKLQlpZiAoc2l6ZV9yZW1hcCA8IHNpemVfdm1vZGUpCi0JCXNpemVfcmVtYXAgPSBzaXplX3Ztb2RlOwotCWlmIChzaXplX3JlbWFwID4gc2l6ZV90b3RhbCkKLQkJc2l6ZV9yZW1hcCA9IHNpemVfdG90YWw7Ci0JaW1hY2ZiX2ZpeC5zbWVtX2xlbiA9IHNpemVfcmVtYXA7Ci0KLQlpZiAoIXJlcXVlc3RfbWVtX3JlZ2lvbihpbWFjZmJfZml4LnNtZW1fc3RhcnQsIHNpemVfdG90YWwsICJpbWFjZmIiKSkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HCi0JCSAgICAgICAiaW1hY2ZiOiBjYW5ub3QgcmVzZXJ2ZSB2aWRlbyBtZW1vcnkgYXQgMHglbHhcbiIsCi0JCQlpbWFjZmJfZml4LnNtZW1fc3RhcnQpOwotCQkvKiBXZSBjYW5ub3QgbWFrZSB0aGlzIGZhdGFsLiBTb21ldGltZXMgdGhpcyBjb21lcyBmcm9tIG1hZ2ljCi0JCSAgIHNwYWNlcyBvdXIgcmVzb3VyY2UgaGFuZGxlcnMgc2ltcGx5IGRvbid0IGtub3cgYWJvdXQgKi8KLQl9Ci0KLQlpbmZvID0gZnJhbWVidWZmZXJfYWxsb2Moc2l6ZW9mKHUzMikgKiAxNiwgJmRldi0+ZGV2KTsKLQlpZiAoIWluZm8pIHsKLQkJZXJyID0gLUVOT01FTTsKLQkJZ290byBlcnJfcmVsZWFzZV9tZW07Ci0JfQotCWluZm8tPnBzZXVkb19wYWxldHRlID0gaW5mby0+cGFyOwotCWluZm8tPnBhciA9IE5VTEw7Ci0KLQlpbmZvLT5zY3JlZW5fYmFzZSA9IGlvcmVtYXAoaW1hY2ZiX2ZpeC5zbWVtX3N0YXJ0LCBpbWFjZmJfZml4LnNtZW1fbGVuKTsKLQlpZiAoIWluZm8tPnNjcmVlbl9iYXNlKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiaW1hY2ZiOiBhYm9ydCwgY2Fubm90IGlvcmVtYXAgdmlkZW8gbWVtb3J5ICIKLQkJCQkiMHgleCBAIDB4JWx4XG4iLAotCQkJaW1hY2ZiX2ZpeC5zbWVtX2xlbiwgaW1hY2ZiX2ZpeC5zbWVtX3N0YXJ0KTsKLQkJZXJyID0gLUVJTzsKLQkJZ290byBlcnJfdW5tYXA7Ci0JfQotCi0JcHJpbnRrKEtFUk5fSU5GTyAiaW1hY2ZiOiBmcmFtZWJ1ZmZlciBhdCAweCVseCwgbWFwcGVkIHRvIDB4JXAsICIKLQkgICAgICAgInVzaW5nICVkaywgdG90YWwgJWRrXG4iLAotCSAgICAgICBpbWFjZmJfZml4LnNtZW1fc3RhcnQsIGluZm8tPnNjcmVlbl9iYXNlLAotCSAgICAgICBzaXplX3JlbWFwLzEwMjQsIHNpemVfdG90YWwvMTAyNCk7Ci0JcHJpbnRrKEtFUk5fSU5GTyAiaW1hY2ZiOiBtb2RlIGlzICVkeCVkeCVkLCBsaW5lbGVuZ3RoPSVkLCBwYWdlcz0lZFxuIiwKLQkgICAgICAgaW1hY2ZiX2RlZmluZWQueHJlcywgaW1hY2ZiX2RlZmluZWQueXJlcywKLQkgICAgICAgaW1hY2ZiX2RlZmluZWQuYml0c19wZXJfcGl4ZWwsIGltYWNmYl9maXgubGluZV9sZW5ndGgsCi0JICAgICAgIHNjcmVlbl9pbmZvLnBhZ2VzKTsKLQotCWltYWNmYl9kZWZpbmVkLnhyZXNfdmlydHVhbCA9IGltYWNmYl9kZWZpbmVkLnhyZXM7Ci0JaW1hY2ZiX2RlZmluZWQueXJlc192aXJ0dWFsID0gaW1hY2ZiX2ZpeC5zbWVtX2xlbiAvCi0JCQkJCWltYWNmYl9maXgubGluZV9sZW5ndGg7Ci0JcHJpbnRrKEtFUk5fSU5GTyAiaW1hY2ZiOiBzY3JvbGxpbmc6IHJlZHJhd1xuIik7Ci0JaW1hY2ZiX2RlZmluZWQueXJlc192aXJ0dWFsID0gaW1hY2ZiX2RlZmluZWQueXJlczsKLQotCS8qIHNvbWUgZHVtbXkgdmFsdWVzIGZvciB0aW1pbmcgdG8gbWFrZSBmYnNldCBoYXBweSAqLwotCWltYWNmYl9kZWZpbmVkLnBpeGNsb2NrICAgICA9IDEwMDAwMDAwIC8gaW1hY2ZiX2RlZmluZWQueHJlcyAqCi0JCQkJCTEwMDAgLyBpbWFjZmJfZGVmaW5lZC55cmVzOwotCWltYWNmYl9kZWZpbmVkLmxlZnRfbWFyZ2luICA9IChpbWFjZmJfZGVmaW5lZC54cmVzIC8gOCkgJiAweGY4OwotCWltYWNmYl9kZWZpbmVkLmhzeW5jX2xlbiAgICA9IChpbWFjZmJfZGVmaW5lZC54cmVzIC8gOCkgJiAweGY4OwotCi0JaW1hY2ZiX2RlZmluZWQucmVkLm9mZnNldCAgICA9IHNjcmVlbl9pbmZvLnJlZF9wb3M7Ci0JaW1hY2ZiX2RlZmluZWQucmVkLmxlbmd0aCAgICA9IHNjcmVlbl9pbmZvLnJlZF9zaXplOwotCWltYWNmYl9kZWZpbmVkLmdyZWVuLm9mZnNldCAgPSBzY3JlZW5faW5mby5ncmVlbl9wb3M7Ci0JaW1hY2ZiX2RlZmluZWQuZ3JlZW4ubGVuZ3RoICA9IHNjcmVlbl9pbmZvLmdyZWVuX3NpemU7Ci0JaW1hY2ZiX2RlZmluZWQuYmx1ZS5vZmZzZXQgICA9IHNjcmVlbl9pbmZvLmJsdWVfcG9zOwotCWltYWNmYl9kZWZpbmVkLmJsdWUubGVuZ3RoICAgPSBzY3JlZW5faW5mby5ibHVlX3NpemU7Ci0JaW1hY2ZiX2RlZmluZWQudHJhbnNwLm9mZnNldCA9IHNjcmVlbl9pbmZvLnJzdmRfcG9zOwotCWltYWNmYl9kZWZpbmVkLnRyYW5zcC5sZW5ndGggPSBzY3JlZW5faW5mby5yc3ZkX3NpemU7Ci0KLQlwcmludGsoS0VSTl9JTkZPICJpbWFjZmI6ICVzOiAiCi0JICAgICAgICJzaXplPSVkOiVkOiVkOiVkLCBzaGlmdD0lZDolZDolZDolZFxuIiwKLQkgICAgICAgIlRydWVjb2xvciIsCi0JICAgICAgIHNjcmVlbl9pbmZvLnJzdmRfc2l6ZSwKLQkgICAgICAgc2NyZWVuX2luZm8ucmVkX3NpemUsCi0JICAgICAgIHNjcmVlbl9pbmZvLmdyZWVuX3NpemUsCi0JICAgICAgIHNjcmVlbl9pbmZvLmJsdWVfc2l6ZSwKLQkgICAgICAgc2NyZWVuX2luZm8ucnN2ZF9wb3MsCi0JICAgICAgIHNjcmVlbl9pbmZvLnJlZF9wb3MsCi0JICAgICAgIHNjcmVlbl9pbmZvLmdyZWVuX3BvcywKLQkgICAgICAgc2NyZWVuX2luZm8uYmx1ZV9wb3MpOwotCi0JaW1hY2ZiX2ZpeC55cGFuc3RlcCAgPSAwOwotCWltYWNmYl9maXgueXdyYXBzdGVwID0gMDsKLQotCS8qIHJlcXVlc3QgZmFpbHVyZSBkb2VzIG5vdCBmYXplIHVzLCBhcyB2Z2Fjb24gcHJvYmFibHkgaGFzIHRoaXMKLQkgKiByZWdpb24gYWxyZWFkeSAoRklYTUUpICovCi0JcmVxdWVzdF9yZWdpb24oMHgzYzAsIDMyLCAiaW1hY2ZiIik7Ci0KLQlpbmZvLT5mYm9wcyA9ICZpbWFjZmJfb3BzOwotCWluZm8tPnZhciA9IGltYWNmYl9kZWZpbmVkOwotCWluZm8tPmZpeCA9IGltYWNmYl9maXg7Ci0JaW5mby0+ZmxhZ3MgPSBGQklORk9fRkxBR19ERUZBVUxUOwotCi0JaWYgKGZiX2FsbG9jX2NtYXAoJmluZm8tPmNtYXAsIDI1NiwgMCkgPCAwKSB7Ci0JCWVyciA9IC1FTk9NRU07Ci0JCWdvdG8gZXJyX3VubWFwOwotCX0KLQlpZiAocmVnaXN0ZXJfZnJhbWVidWZmZXIoaW5mbyk8MCkgewotCQllcnIgPSAtRUlOVkFMOwotCQlnb3RvIGVycl9mYl9kZWFsb2M7Ci0JfQotCXByaW50ayhLRVJOX0lORk8gImZiJWQ6ICVzIGZyYW1lIGJ1ZmZlciBkZXZpY2VcbiIsCi0JICAgICAgIGluZm8tPm5vZGUsIGluZm8tPmZpeC5pZCk7Ci0JcmV0dXJuIDA7Ci0KLWVycl9mYl9kZWFsb2M6Ci0JZmJfZGVhbGxvY19jbWFwKCZpbmZvLT5jbWFwKTsKLWVycl91bm1hcDoKLQlpb3VubWFwKGluZm8tPnNjcmVlbl9iYXNlKTsKLQlmcmFtZWJ1ZmZlcl9yZWxlYXNlKGluZm8pOwotZXJyX3JlbGVhc2VfbWVtOgotCXJlbGVhc2VfbWVtX3JlZ2lvbihpbWFjZmJfZml4LnNtZW1fc3RhcnQsIHNpemVfdG90YWwpOwotCXJldHVybiBlcnI7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGltYWNmYl9kcml2ZXIgPSB7Ci0JLnByb2JlCT0gaW1hY2ZiX3Byb2JlLAotCS5kcml2ZXIJPSB7Ci0JCS5uYW1lCT0gImltYWNmYiIsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGltYWNmYl9kZXZpY2UgPSB7Ci0JLm5hbWUJPSAiaW1hY2ZiIiwKLX07Ci0KLXN0YXRpYyBpbnQgX19pbml0IGltYWNmYl9pbml0KHZvaWQpCi17Ci0JaW50IHJldDsKLQljaGFyICpvcHRpb24gPSBOVUxMOwotCi0JaWYgKCFlZmlfZW5hYmxlZCkKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JaWYgKCFkbWlfY2hlY2tfc3lzdGVtKGRtaV9zeXN0ZW1fdGFibGUpKQotCQlyZXR1cm4gLUVOT0RFVjsKLQlpZiAobW9kZWwgPT0gTV9VTktOT1dOKQotCQlyZXR1cm4gLUVOT0RFVjsKLQotCWlmIChmYl9nZXRfb3B0aW9ucygiaW1hY2ZiIiwgJm9wdGlvbikpCi0JCXJldHVybiAtRU5PREVWOwotCi0JaW1hY2ZiX3NldHVwKG9wdGlvbik7Ci0JcmV0ID0gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZpbWFjZmJfZHJpdmVyKTsKLQotCWlmICghcmV0KSB7Ci0JCXJldCA9IHBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmaW1hY2ZiX2RldmljZSk7Ci0JCWlmIChyZXQpCi0JCQlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmaW1hY2ZiX2RyaXZlcik7Ci0JfQotCXJldHVybiByZXQ7Ci19Ci1tb2R1bGVfaW5pdChpbWFjZmJfaW5pdCk7Ci0KLU1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vaW50ZWxmYi9pbnRlbGZiLmggYi9kcml2ZXJzL3ZpZGVvL2ludGVsZmIvaW50ZWxmYi5oCmluZGV4IDMzMjVmYmQuLmE1MGJlYTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vaW50ZWxmYi9pbnRlbGZiLmgKKysrIGIvZHJpdmVycy92aWRlby9pbnRlbGZiL2ludGVsZmIuaApAQCAtMTIsOSArMTIsOSBAQAogI2VuZGlmCiAKIC8qKiogVmVyc2lvbi9uYW1lICoqKi8KLSNkZWZpbmUgSU5URUxGQl9WRVJTSU9OCQkJIjAuOS41IgorI2RlZmluZSBJTlRFTEZCX1ZFUlNJT04JCQkiMC45LjYiCiAjZGVmaW5lIElOVEVMRkJfTU9EVUxFX05BTUUJCSJpbnRlbGZiIgotI2RlZmluZSBTVVBQT1JURURfQ0hJUFNFVFMJCSI4MzBNLzg0NUcvODUyR00vODU1R00vODY1Ry85MTVHLzkxNUdNLzk0NUcvOTQ1R00vOTY1Ry85NjVHTSIKKyNkZWZpbmUgU1VQUE9SVEVEX0NISVBTRVRTCQkiODMwTS84NDVHLzg1MkdNLzg1NUdNLzg2NUcvOTE1Ry85MTVHTS85NDVHLzk0NUdNLzk0NUdNRS85NjVHLzk2NUdNIgogCiAKIC8qKiogRGVidWcvZmVhdHVyZSBkZWZpbmVzICoqKi8KQEAgLTU4LDYgKzU4LDcgQEAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF85MTVHTQkweDI1OTIKICNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF85NDVHCTB4Mjc3MgogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzk0NUdNCTB4MjdBMgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzk0NUdNRQkweDI3QUUKICNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF85NjVHCTB4MjlBMgogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzk2NUdNCTB4MkEwMgogCkBAIC0xNjAsNiArMTYxLDcgQEAKIAlJTlRFTF85MTVHTSwKIAlJTlRFTF85NDVHLAogCUlOVEVMXzk0NUdNLAorCUlOVEVMXzk0NUdNRSwKIAlJTlRFTF85NjVHLAogCUlOVEVMXzk2NUdNLAogfTsKQEAgLTM2Myw2ICszNjUsNyBAQAogCQkJKChkaW5mbyktPmNoaXBzZXQgPT0gSU5URUxfOTE1R00pIHx8CVwKIAkJCSgoZGluZm8pLT5jaGlwc2V0ID09IElOVEVMXzk0NUcpIHx8CVwKIAkJCSgoZGluZm8pLT5jaGlwc2V0ID09IElOVEVMXzk0NUdNKSB8fAlcCisJCQkoKGRpbmZvKS0+Y2hpcHNldCA9PSBJTlRFTF85NDVHTUUpIHx8CVwKIAkJCSgoZGluZm8pLT5jaGlwc2V0ID09IElOVEVMXzk2NUcpIHx8CVwKIAkJCSgoZGluZm8pLT5jaGlwc2V0ID09IElOVEVMXzk2NUdNKSkKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9pbnRlbGZiL2ludGVsZmJfaTJjLmMgYi9kcml2ZXJzL3ZpZGVvL2ludGVsZmIvaW50ZWxmYl9pMmMuYwppbmRleCBmY2Y5ZmFkLi41ZDg5NmI4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2ludGVsZmIvaW50ZWxmYl9pMmMuYworKysgYi9kcml2ZXJzL3ZpZGVvL2ludGVsZmIvaW50ZWxmYl9pMmMuYwpAQCAtMTcxLDYgKzE3MSw3IEBACiAJCS8qIGhhcyBzb21lIExWRFMgKyB0di1vdXQgKi8KIAljYXNlIElOVEVMXzk0NUc6CiAJY2FzZSBJTlRFTF85NDVHTToKKwljYXNlIElOVEVMXzk0NUdNRToKIAljYXNlIElOVEVMXzk2NUc6CiAJY2FzZSBJTlRFTF85NjVHTToKIAkJLyogU0RWTyBwb3J0cyBoYXZlIGEgc2luZ2xlIGNvbnRyb2wgYnVzIC0gMiBkZXZpY2VzICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2ludGVsZmIvaW50ZWxmYmRydi5jIGIvZHJpdmVycy92aWRlby9pbnRlbGZiL2ludGVsZmJkcnYuYwppbmRleCBlNDQzMDNmLi5hMDllMjM2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2ludGVsZmIvaW50ZWxmYmRydi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vaW50ZWxmYi9pbnRlbGZiZHJ2LmMKQEAgLTIsNyArMiw3IEBACiAgKiBpbnRlbGZiCiAgKgogICogTGludXggZnJhbWVidWZmZXIgZHJpdmVyIGZvciBJbnRlbChSKSA4MzBNLzg0NUcvODUyR00vODU1R00vODY1Ry85MTVHLzkxNUdNLwotICogOTQ1Ry85NDVHTS85NjVHLzk2NUdNIGludGVncmF0ZWQgZ3JhcGhpY3MgY2hpcHMuCisgKiA5NDVHLzk0NUdNLzk0NUdNRS85NjVHLzk2NUdNIGludGVncmF0ZWQgZ3JhcGhpY3MgY2hpcHMuCiAgKgogICogQ29weXJpZ2h0IMKpIDIwMDIsIDIwMDMgRGF2aWQgRGF3ZXMgPGRhd2VzQHhmcmVlODYub3JnPgogICogICAgICAgICAgICAgICAgICAgMjAwNCBTeWx2YWluIE1leWVyCkBAIC0xMDIsNiArMTAyLDkgQEAKICAqCiAgKiAgICAwNC8yMDA4IC0gVmVyc2lvbiAwLjkuNQogICogICAgICAgICAgICAgIEFkZCBzdXBwb3J0IGZvciA5NjVHLzk2NUdNLiAoTWFpayBCcm9lbW1lIDxtYnJvZW1tZUBwbHVzc2VydmVyLmRlPikKKyAqCisgKiAgICAwOC8yMDA4IC0gVmVyc2lvbiAwLjkuNgorICogICAgICAgICAgICAgIEFkZCBzdXBwb3J0IGZvciA5NDVHTUUuIChQaGlsIEVuZGVjb3R0IDxzcGFtX2Zyb21faW50ZWxmYkBjaGV6cGhpbC5vcmc+KQogICovCiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KQEAgLTE4Myw2ICsxODYsNyBAQAogCXsgUENJX1ZFTkRPUl9JRF9JTlRFTCwgUENJX0RFVklDRV9JRF9JTlRFTF85MTVHTSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgUENJX0NMQVNTX0RJU1BMQVlfVkdBIDw8IDgsIElOVEVMRkJfQ0xBU1NfTUFTSywgSU5URUxfOTE1R00gfSwKIAl7IFBDSV9WRU5ET1JfSURfSU5URUwsIFBDSV9ERVZJQ0VfSURfSU5URUxfOTQ1RywgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgUENJX0NMQVNTX0RJU1BMQVlfVkdBIDw8IDgsIElOVEVMRkJfQ0xBU1NfTUFTSywgSU5URUxfOTQ1RyB9LAogCXsgUENJX1ZFTkRPUl9JRF9JTlRFTCwgUENJX0RFVklDRV9JRF9JTlRFTF85NDVHTSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgUENJX0NMQVNTX0RJU1BMQVlfVkdBIDw8IDgsIElOVEVMRkJfQ0xBU1NfTUFTSywgSU5URUxfOTQ1R00gfSwKKwl7IFBDSV9WRU5ET1JfSURfSU5URUwsIFBDSV9ERVZJQ0VfSURfSU5URUxfOTQ1R01FLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCBQQ0lfQ0xBU1NfRElTUExBWV9WR0EgPDwgOCwgSU5URUxGQl9DTEFTU19NQVNLLCBJTlRFTF85NDVHTUUgfSwKIAl7IFBDSV9WRU5ET1JfSURfSU5URUwsIFBDSV9ERVZJQ0VfSURfSU5URUxfOTY1RywgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgUENJX0NMQVNTX0RJU1BMQVlfVkdBIDw8IDgsIElOVEVMRkJfQ0xBU1NfTUFTSywgSU5URUxfOTY1RyB9LAogCXsgUENJX1ZFTkRPUl9JRF9JTlRFTCwgUENJX0RFVklDRV9JRF9JTlRFTF85NjVHTSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgUENJX0NMQVNTX0RJU1BMQVlfVkdBIDw8IDgsIElOVEVMRkJfQ0xBU1NfTUFTSywgSU5URUxfOTY1R00gfSwKIAl7IDAsIH0KQEAgLTU1NSw2ICs1NTksNyBAQAogCSAgICAoZW50LT5kZXZpY2UgPT0gUENJX0RFVklDRV9JRF9JTlRFTF85MTVHTSkgfHwKIAkgICAgKGVudC0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfSU5URUxfOTQ1RykgIHx8CiAJICAgIChlbnQtPmRldmljZSA9PSBQQ0lfREVWSUNFX0lEX0lOVEVMXzk0NUdNKSB8fAorCSAgICAoZW50LT5kZXZpY2UgPT0gUENJX0RFVklDRV9JRF9JTlRFTF85NDVHTUUpIHx8CiAJICAgIChlbnQtPmRldmljZSA9PSBQQ0lfREVWSUNFX0lEX0lOVEVMXzk2NUcpIHx8CiAJICAgIChlbnQtPmRldmljZSA9PSBQQ0lfREVWSUNFX0lEX0lOVEVMXzk2NUdNKSkgewogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2ludGVsZmIvaW50ZWxmYmh3LmMgYi9kcml2ZXJzL3ZpZGVvL2ludGVsZmIvaW50ZWxmYmh3LmMKaW5kZXggOGU2ZDZhNC4uOGIyNmIyNyAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9pbnRlbGZiL2ludGVsZmJody5jCisrKyBiL2RyaXZlcnMvdmlkZW8vaW50ZWxmYi9pbnRlbGZiaHcuYwpAQCAtMTQzLDYgKzE0MywxMiBAQAogCQlkaW5mby0+bW9iaWxlID0gMTsKIAkJZGluZm8tPnBsbF9pbmRleCA9IFBMTFNfSTl4eDsKIAkJcmV0dXJuIDA7CisJY2FzZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzk0NUdNRToKKwkJZGluZm8tPm5hbWUgPSAiSW50ZWwoUikgOTQ1R01FIjsKKwkJZGluZm8tPmNoaXBzZXQgPSBJTlRFTF85NDVHTUU7CisJCWRpbmZvLT5tb2JpbGUgPSAxOworCQlkaW5mby0+cGxsX2luZGV4ID0gUExMU19JOXh4OworCQlyZXR1cm4gMDsKIAljYXNlIFBDSV9ERVZJQ0VfSURfSU5URUxfOTY1RzoKIAkJZGluZm8tPm5hbWUgPSAiSW50ZWwoUikgOTY1RyI7CiAJCWRpbmZvLT5jaGlwc2V0ID0gSU5URUxfOTY1RzsKQEAgLTE4Niw2ICsxOTIsNyBAQAogCWNhc2UgUENJX0RFVklDRV9JRF9JTlRFTF85MTVHTToKIAljYXNlIFBDSV9ERVZJQ0VfSURfSU5URUxfOTQ1RzoKIAljYXNlIFBDSV9ERVZJQ0VfSURfSU5URUxfOTQ1R006CisJY2FzZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzk0NUdNRToKIAljYXNlIFBDSV9ERVZJQ0VfSURfSU5URUxfOTY1RzoKIAljYXNlIFBDSV9ERVZJQ0VfSURfSU5URUxfOTY1R006CiAJCS8qIDkxNSwgOTQ1IGFuZCA5NjUgY2hpcHNldHMgc3VwcG9ydCBhIDI1Nk1CIGFwZXJ0dXJlLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9tYXRyb3gvbWF0cm94ZmJfYmFzZS5jIGIvZHJpdmVycy92aWRlby9tYXRyb3gvbWF0cm94ZmJfYmFzZS5jCmluZGV4IGMwMjEzNjIuLjhlN2EyNzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vbWF0cm94L21hdHJveGZiX2Jhc2UuYworKysgYi9kcml2ZXJzL3ZpZGVvL21hdHJveC9tYXRyb3hmYl9iYXNlLmMKQEAgLTE0NTMsNiArMTQ1MywxMyBAQAogCQlNR0FfRzEwMCwKIAkJJnZiRzEwMCwKIAkJIk1HQS1HMTAwIChBR1ApIn0sCisJe1BDSV9WRU5ET1JfSURfTUFUUk9YLAlQQ0lfREVWSUNFX0lEX01BVFJPWF9HMjAwRVZfUENJLAkweEZGLAorCQkwLAkJCTAsCisJCURFVkZfRzIwMCwKKwkJMjMwMDAwLAorCQlNR0FfRzIwMCwKKwkJJnZiRzIwMCwKKwkJIk1HQS1HMjAwZVYgKFBDSSkifSwKIAl7UENJX1ZFTkRPUl9JRF9NQVRST1gsCVBDSV9ERVZJQ0VfSURfTUFUUk9YX0cyMDBfUENJLAkweEZGLAogCQkwLAkJCTAsCiAJCURFVkZfRzIwMCwKQEAgLTIxMTgsNiArMjEyNSw4IEBACiAJCVBDSV9BTllfSUQsCVBDSV9BTllfSUQsCTAsIDAsIDB9LAogCXtQQ0lfVkVORE9SX0lEX01BVFJPWCwJUENJX0RFVklDRV9JRF9NQVRST1hfRzEwMF9BR1AsCiAJCVBDSV9BTllfSUQsCVBDSV9BTllfSUQsCTAsIDAsIDB9LAorCXtQQ0lfVkVORE9SX0lEX01BVFJPWCwJUENJX0RFVklDRV9JRF9NQVRST1hfRzIwMEVWX1BDSSwKKwkJUENJX0FOWV9JRCwJUENJX0FOWV9JRCwJMCwgMCwgMH0sCiAJe1BDSV9WRU5ET1JfSURfTUFUUk9YLAlQQ0lfREVWSUNFX0lEX01BVFJPWF9HMjAwX1BDSSwKIAkJUENJX0FOWV9JRCwJUENJX0FOWV9JRCwJMCwgMCwgMH0sCiAJe1BDSV9WRU5ET1JfSURfTUFUUk9YLAlQQ0lfREVWSUNFX0lEX01BVFJPWF9HMjAwX0FHUCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vbWV0cm9ub21lZmIuYyBiL2RyaXZlcnMvdmlkZW8vbWV0cm9ub21lZmIuYwppbmRleCBhZmVlZDA2Li5kZjFmNzU3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL21ldHJvbm9tZWZiLmMKKysrIGIvZHJpdmVycy92aWRlby9tZXRyb25vbWVmYi5jCkBAIC0xODgsNyArMTg4LDcgQEAKIAkJZXBkX2ZyYW1lX3RhYmxlW3Bhci0+ZHRdLndmbV9zaXplID0gdXNlcl93Zm1fc2l6ZTsKIAogCWlmIChzaXplICE9IGVwZF9mcmFtZV90YWJsZVtwYXItPmR0XS53Zm1fc2l6ZSkgewotCQlkZXZfZXJyKGRldiwgIkVycm9yOiB1bmV4cGVjdGVkIHNpemUgJWQgIT0gJWRcbiIsIHNpemUsCisJCWRldl9lcnIoZGV2LCAiRXJyb3I6IHVuZXhwZWN0ZWQgc2l6ZSAlWmQgIT0gJWRcbiIsIHNpemUsCiAJCQkJCWVwZF9mcmFtZV90YWJsZVtwYXItPmR0XS53Zm1fc2l6ZSk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vbmVvZmIuYyBiL2RyaXZlcnMvdmlkZW8vbmVvZmIuYwppbmRleCAyNTE3MmIyLi5iZmI4MDJkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL25lb2ZiLmMKKysrIGIvZHJpdmVycy92aWRlby9uZW9mYi5jCkBAIC00MjYsMTEgKzQyNiwxMSBAQAogewogCXVuc2lnbmVkIGNoYXIgdG1wOwogCisJdG1wID0gdmdhX3JzZXEoTlVMTCwgMHgwMSk7CiAJaWYgKG9uKSB7CiAJCS8qCiAJCSAqIFR1cm4gb2ZmIHNjcmVlbiBhbmQgZGlzYWJsZSBzZXF1ZW5jZXIuCiAJCSAqLwotCQl0bXAgPSB2Z2FfcnNlcShOVUxMLCAweDAxKTsKIAkJdmdhX3dzZXEoTlVMTCwgMHgwMCwgMHgwMSk7CQkvKiBTeW5jaHJvbm91cyBSZXNldCAqLwogCQl2Z2Ffd3NlcShOVUxMLCAweDAxLCB0bXAgfCAweDIwKTsJLyogZGlzYWJsZSB0aGUgZGlzcGxheSAqLwogCkBAIC00MzksNyArNDM5LDYgQEAKIAkJLyoKIAkJICogUmVlbmFibGUgc2VxdWVuY2VyLCB0aGVuIHR1cm4gb24gc2NyZWVuLgogCQkgKi8KLQkJdG1wID0gdmdhX3JzZXEoTlVMTCwgMHgwMSk7CiAJCXZnYV93c2VxKE5VTEwsIDB4MDEsIHRtcCAmIH4weDIwKTsJLyogcmVlbmFibGUgZGlzcGxheSAqLwogCQl2Z2Ffd3NlcShOVUxMLCAweDAwLCAweDAzKTsJCS8qIGNsZWFyIHN5bmNocm9ub3VzcmVzZXQgKi8KIApAQCAtNTU4LDE0ICs1NTcsMTIgQEAKIHsKIAlzdHJ1Y3QgbmVvZmJfcGFyICpwYXIgPSBpbmZvLT5wYXI7CiAKLQltdXRleF9sb2NrKCZwYXItPm9wZW5fbG9jayk7CiAJaWYgKCFwYXItPnJlZl9jb3VudCkgewogCQltZW1zZXQoJnBhci0+c3RhdGUsIDAsIHNpemVvZihzdHJ1Y3Qgdmdhc3RhdGUpKTsKIAkJcGFyLT5zdGF0ZS5mbGFncyA9IFZHQV9TQVZFX01PREUgfCBWR0FfU0FWRV9GT05UUzsKIAkJc2F2ZV92Z2EoJnBhci0+c3RhdGUpOwogCX0KIAlwYXItPnJlZl9jb3VudCsrOwotCW11dGV4X3VubG9jaygmcGFyLT5vcGVuX2xvY2spOwogCiAJcmV0dXJuIDA7CiB9CkBAIC01NzUsMTYgKzU3MiwxMyBAQAogewogCXN0cnVjdCBuZW9mYl9wYXIgKnBhciA9IGluZm8tPnBhcjsKIAotCW11dGV4X2xvY2soJnBhci0+b3Blbl9sb2NrKTsKLQlpZiAoIXBhci0+cmVmX2NvdW50KSB7Ci0JCW11dGV4X3VubG9jaygmcGFyLT5vcGVuX2xvY2spOworCWlmICghcGFyLT5yZWZfY291bnQpCiAJCXJldHVybiAtRUlOVkFMOwotCX0KKwogCWlmIChwYXItPnJlZl9jb3VudCA9PSAxKSB7CiAJCXJlc3RvcmVfdmdhKCZwYXItPnN0YXRlKTsKIAl9CiAJcGFyLT5yZWZfY291bnQtLTsKLQltdXRleF91bmxvY2soJnBhci0+b3Blbl9sb2NrKTsKIAogCXJldHVybiAwOwogfQpAQCAtNjQ4LDEwICs2NDIsMTAgQEAKIAl2YXItPmJsdWUubXNiX3JpZ2h0ID0gMDsKIAl2YXItPnRyYW5zcC5tc2JfcmlnaHQgPSAwOwogCisJdmFyLT50cmFuc3Aub2Zmc2V0ID0gMDsKKwl2YXItPnRyYW5zcC5sZW5ndGggPSAwOwogCXN3aXRjaCAodmFyLT5iaXRzX3Blcl9waXhlbCkgewogCWNhc2UgODoJCS8qIFBTRVVET0NPTE9VUiwgMjU2ICovCi0JCXZhci0+dHJhbnNwLm9mZnNldCA9IDA7Ci0JCXZhci0+dHJhbnNwLmxlbmd0aCA9IDA7CiAJCXZhci0+cmVkLm9mZnNldCA9IDA7CiAJCXZhci0+cmVkLmxlbmd0aCA9IDg7CiAJCXZhci0+Z3JlZW4ub2Zmc2V0ID0gMDsKQEAgLTY2MSw4ICs2NTUsNiBAQAogCQlicmVhazsKIAogCWNhc2UgMTY6CQkvKiBESVJFQ1RDT0xPVVIsIDY0ayAqLwotCQl2YXItPnRyYW5zcC5vZmZzZXQgPSAwOwotCQl2YXItPnRyYW5zcC5sZW5ndGggPSAwOwogCQl2YXItPnJlZC5vZmZzZXQgPSAxMTsKIAkJdmFyLT5yZWQubGVuZ3RoID0gNTsKIAkJdmFyLT5ncmVlbi5vZmZzZXQgPSA1OwpAQCAtNjcyLDggKzY2NCw2IEBACiAJCWJyZWFrOwogCiAJY2FzZSAyNDoJCS8qIFRSVUVDT0xPVVIsIDE2bSAqLwotCQl2YXItPnRyYW5zcC5vZmZzZXQgPSAwOwotCQl2YXItPnRyYW5zcC5sZW5ndGggPSAwOwogCQl2YXItPnJlZC5vZmZzZXQgPSAxNjsKIAkJdmFyLT5yZWQubGVuZ3RoID0gODsKIAkJdmFyLT5ncmVlbi5vZmZzZXQgPSA4OwpAQCAtNzA0LDggKzY5NCw2IEBACiAJaWYgKHZyYW1sZW4gPiA0ICogMTAyNCAqIDEwMjQpCiAJCXZyYW1sZW4gPSA0ICogMTAyNCAqIDEwMjQ7CiAKLQlpZiAodmFyLT55cmVzX3ZpcnR1YWwgPCB2YXItPnlyZXMpCi0JCXZhci0+eXJlc192aXJ0dWFsID0gdmFyLT55cmVzOwogCWlmICh2YXItPnhyZXNfdmlydHVhbCA8IHZhci0+eHJlcykKIAkJdmFyLT54cmVzX3ZpcnR1YWwgPSB2YXItPnhyZXM7CiAKQEAgLTcyMiw4ICs3MTAsNiBAQAogCSAgIGlmIGl0IHdhcyBwb3NzaWJsZS4gV2Ugc2hvdWxkIHJldHVybiAtRUlOVkFMLCBidXQgSSBkaXNhZ3JlZSAqLwogCWlmICh2YXItPnlyZXNfdmlydHVhbCA8IHZhci0+eXJlcykKIAkJdmFyLT55cmVzID0gdmFyLT55cmVzX3ZpcnR1YWw7Ci0JaWYgKHZhci0+eHJlc192aXJ0dWFsIDwgdmFyLT54cmVzKQotCQl2YXItPnhyZXMgPSB2YXItPnhyZXNfdmlydHVhbDsKIAlpZiAodmFyLT54b2Zmc2V0ICsgdmFyLT54cmVzID4gdmFyLT54cmVzX3ZpcnR1YWwpCiAJCXZhci0+eG9mZnNldCA9IHZhci0+eHJlc192aXJ0dWFsIC0gdmFyLT54cmVzOwogCWlmICh2YXItPnlvZmZzZXQgKyB2YXItPnlyZXMgPiB2YXItPnlyZXNfdmlydHVhbCkKQEAgLTExODYsOCArMTE3MiwxMSBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBuZW9mYl91cGRhdGVfc3RhcnQoc3RydWN0IGZiX2luZm8gKmluZm8sCi0JCQkgICAgICAgc3RydWN0IGZiX3Zhcl9zY3JlZW5pbmZvICp2YXIpCisvKgorICogICAgUGFuIG9yIFdyYXAgdGhlIERpc3BsYXkKKyAqLworc3RhdGljIGludCBuZW9mYl9wYW5fZGlzcGxheShzdHJ1Y3QgZmJfdmFyX3NjcmVlbmluZm8gKnZhciwKKwkJCSAgICAgc3RydWN0IGZiX2luZm8gKmluZm8pCiB7CiAJc3RydWN0IG5lb2ZiX3BhciAqcGFyID0gaW5mby0+cGFyOwogCXN0cnVjdCB2Z2FzdGF0ZSAqc3RhdGUgPSAmcGFyLT5zdGF0ZTsKQEAgLTEyMTYsMzUgKzEyMDUsNyBAQAogCXZnYV93Z2Z4KHN0YXRlLT52Z2FiYXNlLCAweDBFLCAoKChCYXNlID4+IDE2KSAmIDB4MGYpIHwgKG9sZEV4dENSVERpc3BBZGRyICYgMHhmMCkpKTsKIAogCW5lb0xvY2soc3RhdGUpOwotfQogCi0vKgotICogICAgUGFuIG9yIFdyYXAgdGhlIERpc3BsYXkKLSAqLwotc3RhdGljIGludCBuZW9mYl9wYW5fZGlzcGxheShzdHJ1Y3QgZmJfdmFyX3NjcmVlbmluZm8gKnZhciwKLQkJCSAgICAgc3RydWN0IGZiX2luZm8gKmluZm8pCi17Ci0JdV9pbnQgeV9ib3R0b207Ci0KLQl5X2JvdHRvbSA9IHZhci0+eW9mZnNldDsKLQotCWlmICghKHZhci0+dm1vZGUgJiBGQl9WTU9ERV9ZV1JBUCkpCi0JCXlfYm90dG9tICs9IHZhci0+eXJlczsKLQotCWlmICh2YXItPnhvZmZzZXQgPiAodmFyLT54cmVzX3ZpcnR1YWwgLSB2YXItPnhyZXMpKQotCQlyZXR1cm4gLUVJTlZBTDsKLQlpZiAoeV9ib3R0b20gPiBpbmZvLT52YXIueXJlc192aXJ0dWFsKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCW5lb2ZiX3VwZGF0ZV9zdGFydChpbmZvLCB2YXIpOwotCi0JaW5mby0+dmFyLnhvZmZzZXQgPSB2YXItPnhvZmZzZXQ7Ci0JaW5mby0+dmFyLnlvZmZzZXQgPSB2YXItPnlvZmZzZXQ7Ci0KLQlpZiAodmFyLT52bW9kZSAmIEZCX1ZNT0RFX1lXUkFQKQotCQlpbmZvLT52YXIudm1vZGUgfD0gRkJfVk1PREVfWVdSQVA7Ci0JZWxzZQotCQlpbmZvLT52YXIudm1vZGUgJj0gfkZCX1ZNT0RFX1lXUkFQOwogCXJldHVybiAwOwogfQogCkBAIC0xOTkyLDcgKzE5NTMsNiBAQAogCiAJaW5mby0+Zml4LmFjY2VsID0gaWQtPmRyaXZlcl9kYXRhOwogCi0JbXV0ZXhfaW5pdCgmcGFyLT5vcGVuX2xvY2spOwogCXBhci0+cGNpX2J1cnN0ID0gIW5vcGNpYnVyc3Q7CiAJcGFyLT5sY2Rfc3RyZXRjaCA9ICFub3N0cmV0Y2g7CiAJcGFyLT5saWJyZXR0byA9IGxpYnJldHRvOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9vbWFwL2Rpc3BjLmMgYi9kcml2ZXJzL3ZpZGVvL29tYXAvZGlzcGMuYwppbmRleCA2ZWZjZjg5Li5kZmI3MmY1ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9vbWFwL2Rpc3BjLmMKKysrIGIvZHJpdmVycy92aWRlby9vbWFwL2Rpc3BjLmMKQEAgLTE1Niw3ICsxNTYsNyBAQAogfTsKIAogc3RhdGljIHN0cnVjdCB7Ci0JdTMyCQliYXNlOworCXZvaWQgX19pb21lbQkqYmFzZTsKIAogCXN0cnVjdCBvbWFwZmJfbWVtX2Rlc2MJbWVtX2Rlc2M7CiAJc3RydWN0IHJlc21hcAkJKnJlc19tYXBbRElTUENfTUVNVFlQRV9OVU1dOwpAQCAtMjEyLDkgKzIxMiw5IEBACiAJZGlzcGNfd3JpdGVfcmVnKERJU1BDX0NPTlRST0wsIGwpOwogCiAJLyogU2V0IGJ5cGFzcyBtb2RlIGluIFJGQkkgbW9kdWxlICovCi0JbCA9IF9fcmF3X3JlYWRsKGlvX3AydihSRkJJX0NPTlRST0wpKTsKKwlsID0gX19yYXdfcmVhZGwoSU9fQUREUkVTUyhSRkJJX0NPTlRST0wpKTsKIAlsIHw9IGVuYWJsZSA/IDAgOiAoMSA8PCAxKTsKLQlfX3Jhd193cml0ZWwobCwgaW9fcDJ2KFJGQklfQ09OVFJPTCkpOworCV9fcmF3X3dyaXRlbChsLCBJT19BRERSRVNTKFJGQklfQ09OVFJPTCkpOwogfQogCiBzdGF0aWMgdm9pZCBzZXRfbGNkX2RhdGFfbGluZXMoaW50IGRhdGFfbGluZXMpCkBAIC0xMzQ5LDE0ICsxMzQ5LDE5IEBACiAKIAltZW1zZXQoJmRpc3BjLCAwLCBzaXplb2YoZGlzcGMpKTsKIAotCWRpc3BjLmJhc2UgPSBpb19wMnYoRElTUENfQkFTRSk7CisJZGlzcGMuYmFzZSA9IGlvcmVtYXAoRElTUENfQkFTRSwgU1pfMUspOworCWlmICghZGlzcGMuYmFzZSkgeworCQlkZXZfZXJyKGZiZGV2LT5kZXYsICJjYW4ndCBpb3JlbWFwIERJU1BDXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCiAJZGlzcGMuZmJkZXYgPSBmYmRldjsKIAlkaXNwYy5leHRfbW9kZSA9IGV4dF9tb2RlOwogCiAJaW5pdF9jb21wbGV0aW9uKCZkaXNwYy5mcmFtZV9kb25lKTsKIAogCWlmICgociA9IGdldF9kc3NfY2xvY2tzKCkpIDwgMCkKLQkJcmV0dXJuIHI7CisJCWdvdG8gZmFpbDA7CiAKIAllbmFibGVfaW50ZXJmYWNlX2Nsb2NrcygxKTsKIAllbmFibGVfbGNkX2Nsb2NrcygxKTsKQEAgLTE0MTQsNyArMTQxOSw3IEBACiAJfQogCiAJLyogTDMgZmlyZXdhbGwgc2V0dGluZzogZW5hYmxlIGFjY2VzcyB0byBPQ00gUkFNICovCi0JX19yYXdfd3JpdGVsKDB4NDAyMDAwYjAsIGlvX3AydigweDY4MDA1MGEwKSk7CisJX19yYXdfd3JpdGVsKDB4NDAyMDAwYjAsIElPX0FERFJFU1MoMHg2ODAwNTBhMCkpOwogCiAJaWYgKChyID0gYWxsb2NfcGFsZXR0ZV9yYW0oKSkgPCAwKQogCQlnb3RvIGZhaWwyOwpAQCAtMTQ2NCw3ICsxNDY5LDggQEAKIAllbmFibGVfbGNkX2Nsb2NrcygwKTsKIAllbmFibGVfaW50ZXJmYWNlX2Nsb2NrcygwKTsKIAlwdXRfZHNzX2Nsb2NrcygpOwotCitmYWlsMDoKKwlpb3VubWFwKGRpc3BjLmJhc2UpOwogCXJldHVybiByOwogfQogCkBAIC0xNDgxLDYgKzE0ODcsNyBAQAogCWZyZWVfaXJxKElOVF8yNFhYX0RTU19JUlEsIGRpc3BjLmZiZGV2KTsKIAllbmFibGVfaW50ZXJmYWNlX2Nsb2NrcygwKTsKIAlwdXRfZHNzX2Nsb2NrcygpOworCWlvdW5tYXAoZGlzcGMuYmFzZSk7CiB9CiAKIGNvbnN0IHN0cnVjdCBsY2RfY3RybCBvbWFwMl9pbnRfY3RybCA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vb21hcC9kaXNwYy5oIGIvZHJpdmVycy92aWRlby9vbWFwL2Rpc3BjLmgKaW5kZXggZWIxNTEyYi4uZWY3MjBhNyAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9vbWFwL2Rpc3BjLmgKKysrIGIvZHJpdmVycy92aWRlby9vbWFwL2Rpc3BjLmgKQEAgLTQwLDQgKzQwLDYgQEAKIGV4dGVybiBpbnQgIG9tYXBfZGlzcGNfcmVxdWVzdF9pcnEodm9pZCAoKmNhbGxiYWNrKSh2b2lkICpkYXRhKSwgdm9pZCAqZGF0YSk7CiBleHRlcm4gdm9pZCBvbWFwX2Rpc3BjX2ZyZWVfaXJxKHZvaWQpOwogCitleHRlcm4gY29uc3Qgc3RydWN0IGxjZF9jdHJsIG9tYXAyX2ludF9jdHJsOworCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vb21hcC9sY2RfaDQuYyBiL2RyaXZlcnMvdmlkZW8vb21hcC9sY2RfaDQuYwppbmRleCA4OGMxOWQ0Li42ZmY1NjQzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL29tYXAvbGNkX2g0LmMKKysrIGIvZHJpdmVycy92aWRlby9vbWFwL2xjZF9oNC5jCkBAIC00Nyw3ICs0Nyw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0cnVjdCBsY2RfcGFuZWwgaDRfcGFuZWwgPSB7CitzdGF0aWMgc3RydWN0IGxjZF9wYW5lbCBoNF9wYW5lbCA9IHsKIAkubmFtZQkJPSAiaDQiLAogCS5jb25maWcJCT0gT01BUF9MQ0RDX1BBTkVMX1RGVCwKIApAQCAtOTEsNyArOTEsNyBAQAogCXJldHVybiAwOwogfQogCi1zdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGg0X3BhbmVsX2RyaXZlciA9IHsKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGg0X3BhbmVsX2RyaXZlciA9IHsKIAkucHJvYmUJCT0gaDRfcGFuZWxfcHJvYmUsCiAJLnJlbW92ZQkJPSBoNF9wYW5lbF9yZW1vdmUsCiAJLnN1c3BlbmQJPSBoNF9wYW5lbF9zdXNwZW5kLApkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9vbWFwL2xjZF9pbm4xNjEwLmMgYi9kcml2ZXJzL3ZpZGVvL29tYXAvbGNkX2lubjE2MTAuYwppbmRleCA2YTQyYzZhLi40YzRmN2VlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL29tYXAvbGNkX2lubjE2MTAuYworKysgYi9kcml2ZXJzL3ZpZGVvL29tYXAvbGNkX2lubjE2MTAuYwpAQCAtMzIsNDMgKzMyLDQzIEBACiB7CiAJaW50IHIgPSAwOwogCi0JaWYgKG9tYXBfcmVxdWVzdF9ncGlvKDE0KSkgeworCWlmIChncGlvX3JlcXVlc3QoMTQsICJsY2RfZW4wIikpIHsKIAkJcHJfZXJyKE1PRFVMRV9OQU1FICI6IGNhbid0IHJlcXVlc3QgR1BJTyAxNFxuIik7CiAJCXIgPSAtMTsKIAkJZ290byBleGl0OwogCX0KLQlpZiAob21hcF9yZXF1ZXN0X2dwaW8oMTUpKSB7CisJaWYgKGdwaW9fcmVxdWVzdCgxNSwgImxjZF9lbjEiKSkgewogCQlwcl9lcnIoTU9EVUxFX05BTUUgIjogY2FuJ3QgcmVxdWVzdCBHUElPIDE1XG4iKTsKLQkJb21hcF9mcmVlX2dwaW8oMTQpOworCQlncGlvX2ZyZWUoMTQpOwogCQlyID0gLTE7CiAJCWdvdG8gZXhpdDsKIAl9CiAJLyogY29uZmlndXJlIEdQSU8oMTQsIDE1KSBhcyBvdXRwdXRzICovCi0Jb21hcF9zZXRfZ3Bpb19kaXJlY3Rpb24oMTQsIDApOwotCW9tYXBfc2V0X2dwaW9fZGlyZWN0aW9uKDE1LCAwKTsKKwlncGlvX2RpcmVjdGlvbl9vdXRwdXQoMTQsIDApOworCWdwaW9fZGlyZWN0aW9uX291dHB1dCgxNSwgMCk7CiBleGl0OgogCXJldHVybiByOwogfQogCiBzdGF0aWMgdm9pZCBpbm5vdmF0b3IxNjEwX3BhbmVsX2NsZWFudXAoc3RydWN0IGxjZF9wYW5lbCAqcGFuZWwpCiB7Ci0Jb21hcF9mcmVlX2dwaW8oMTUpOwotCW9tYXBfZnJlZV9ncGlvKDE0KTsKKwlncGlvX2ZyZWUoMTUpOworCWdwaW9fZnJlZSgxNCk7CiB9CiAKIHN0YXRpYyBpbnQgaW5ub3ZhdG9yMTYxMF9wYW5lbF9lbmFibGUoc3RydWN0IGxjZF9wYW5lbCAqcGFuZWwpCiB7CiAJLyogc2V0IEdQSU8xNCBhbmQgR1BJTzE1IGhpZ2ggKi8KLQlvbWFwX3NldF9ncGlvX2RhdGFvdXQoMTQsIDEpOwotCW9tYXBfc2V0X2dwaW9fZGF0YW91dCgxNSwgMSk7CisJZ3Bpb19zZXRfdmFsdWUoMTQsIDEpOworCWdwaW9fc2V0X3ZhbHVlKDE1LCAxKTsKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHZvaWQgaW5ub3ZhdG9yMTYxMF9wYW5lbF9kaXNhYmxlKHN0cnVjdCBsY2RfcGFuZWwgKnBhbmVsKQogewogCS8qIHNldCBHUElPMTMsIEdQSU8xNCBhbmQgR1BJTzE1IGxvdyAqLwotCW9tYXBfc2V0X2dwaW9fZGF0YW91dCgxNCwgMCk7Ci0Jb21hcF9zZXRfZ3Bpb19kYXRhb3V0KDE1LCAwKTsKKwlncGlvX3NldF92YWx1ZSgxNCwgMCk7CisJZ3Bpb19zZXRfdmFsdWUoMTUsIDApOwogfQogCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBpbm5vdmF0b3IxNjEwX3BhbmVsX2dldF9jYXBzKHN0cnVjdCBsY2RfcGFuZWwgKnBhbmVsKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9vbWFwL2xjZF9vc2suYyBiL2RyaXZlcnMvdmlkZW8vb21hcC9sY2Rfb3NrLmMKaW5kZXggYTRhNzI1Zi4uMzc5Yzk2ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9vbWFwL2xjZF9vc2suYworKysgYi9kcml2ZXJzL3ZpZGVvL29tYXAvbGNkX29zay5jCkBAIC0yOSw2ICsyOSw3IEBACiAKIHN0YXRpYyBpbnQgb3NrX3BhbmVsX2luaXQoc3RydWN0IGxjZF9wYW5lbCAqcGFuZWwsIHN0cnVjdCBvbWFwZmJfZGV2aWNlICpmYmRldikKIHsKKwkvKiBncGlvMiB3YXMgYWxsb2NhdGVkIGluIGJvYXJkIGluaXQgKi8KIAlyZXR1cm4gMDsKIH0KIApAQCAtNDcsMTEgKzQ4LDggQEAKIAkvKiBTZXQgUFdMIGxldmVsICovCiAJb21hcF93cml0ZWIoMHhGRiwgT01BUF9QV0xfRU5BQkxFKTsKIAotCS8qIGNvbmZpZ3VyZSBHUElPMiBhcyBvdXRwdXQgKi8KLQlvbWFwX3NldF9ncGlvX2RpcmVjdGlvbigyLCAwKTsKLQotCS8qIHNldCBHUElPMiBoaWdoICovCi0Jb21hcF9zZXRfZ3Bpb19kYXRhb3V0KDIsIDEpOworCS8qIHNldCBHUElPMiBoaWdoIChsY2QgcG93ZXIgZW5hYmxlZCkgKi8KKwlncGlvX3NldF92YWx1ZSgyLCAxKTsKIAogCXJldHVybiAwOwogfQpAQCAtNjUsNyArNjMsNyBAQAogCW9tYXBfd3JpdGViKDB4MDAsIE9NQVBfUFdMX0NMS19FTkFCTEUpOwogCiAJLyogc2V0IEdQSU8yIGxvdyAqLwotCW9tYXBfc2V0X2dwaW9fZGF0YW91dCgyLCAwKTsKKwlncGlvX3NldF92YWx1ZSgyLCAwKTsKIH0KIAogc3RhdGljIHVuc2lnbmVkIGxvbmcgb3NrX3BhbmVsX2dldF9jYXBzKHN0cnVjdCBsY2RfcGFuZWwgKnBhbmVsKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9vbWFwL2xjZF9zeDEuYyBiL2RyaXZlcnMvdmlkZW8vb21hcC9sY2Rfc3gxLmMKaW5kZXggY2FhNmE4OS4uZTU1ZGUyMCAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9vbWFwL2xjZF9zeDEuYworKysgYi9kcml2ZXJzL3ZpZGVvL29tYXAvbGNkX3N4MS5jCkBAIC04MSwyMSArODEsMjEgQEAKIAlpbnQgaSwgc2hpZnRlciA9IDB4ODA7CiAKIAlpZiAoIWZsYWcpCi0JCW9tYXBfc2V0X2dwaW9fZGF0YW91dChfQV9MQ0RfU1NDX0EwLCAwKTsKKwkJZ3Bpb19zZXRfdmFsdWUoX0FfTENEX1NTQ19BMCwgMCk7CiAJbWRlbGF5KDIpOwotCW9tYXBfc2V0X2dwaW9fZGF0YW91dChBX0xDRF9TU0NfUkQsIDEpOworCWdwaW9fc2V0X3ZhbHVlKEFfTENEX1NTQ19SRCwgMSk7CiAKLQlvbWFwX3NldF9ncGlvX2RhdGFvdXQoQV9MQ0RfU1NDX1NELCBmbGFnKTsKKwlncGlvX3NldF92YWx1ZShBX0xDRF9TU0NfU0QsIGZsYWcpOwogCiAJT01BUF9NQ0JTUF9XUklURShPTUFQMTUxMF9NQ0JTUDNfQkFTRSwgUENSMCwgMHgyMjAwKTsKIAlPTUFQX01DQlNQX1dSSVRFKE9NQVAxNTEwX01DQlNQM19CQVNFLCBQQ1IwLCAweDIyMDIpOwogCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspIHsKIAkJT01BUF9NQ0JTUF9XUklURShPTUFQMTUxMF9NQ0JTUDNfQkFTRSwgUENSMCwgMHgyMjAwKTsKLQkJb21hcF9zZXRfZ3Bpb19kYXRhb3V0KEFfTENEX1NTQ19TRCwgc2hpZnRlciAmIGJ5dGUpOworCQlncGlvX3NldF92YWx1ZShBX0xDRF9TU0NfU0QsIHNoaWZ0ZXIgJiBieXRlKTsKIAkJT01BUF9NQ0JTUF9XUklURShPTUFQMTUxMF9NQ0JTUDNfQkFTRSwgUENSMCwgMHgyMjAyKTsKIAkJc2hpZnRlciA+Pj0gMTsKIAl9Ci0Jb21hcF9zZXRfZ3Bpb19kYXRhb3V0KF9BX0xDRF9TU0NfQTAsIDEpOworCWdwaW9fc2V0X3ZhbHVlKF9BX0xDRF9TU0NfQTAsIDEpOwogfQogCiBzdGF0aWMgdm9pZCBpbml0X3N5c3RlbSh2b2lkKQpAQCAtMTA3LDI1ICsxMDcsMTggQEAKIHN0YXRpYyB2b2lkIHNldHVwX0dQSU8odm9pZCkKIHsKIAkvKiBuZXcgd2F2ZSAqLwotCW9tYXBfcmVxdWVzdF9ncGlvKEFfTENEX1NTQ19SRCk7Ci0Jb21hcF9yZXF1ZXN0X2dwaW8oQV9MQ0RfU1NDX1NEKTsKLQlvbWFwX3JlcXVlc3RfZ3BpbyhfQV9MQ0RfUkVTRVQpOwotCW9tYXBfcmVxdWVzdF9ncGlvKF9BX0xDRF9TU0NfQ1MpOwotCW9tYXBfcmVxdWVzdF9ncGlvKF9BX0xDRF9TU0NfQTApOworCWdwaW9fcmVxdWVzdChBX0xDRF9TU0NfUkQsICJsY2Rfc3NjX3JkIik7CisJZ3Bpb19yZXF1ZXN0KEFfTENEX1NTQ19TRCwgImxjZF9zc2Nfc2QiKTsKKwlncGlvX3JlcXVlc3QoX0FfTENEX1JFU0VULCAibGNkX3Jlc2V0Iik7CisJZ3Bpb19yZXF1ZXN0KF9BX0xDRF9TU0NfQ1MsICJsY2Rfc3NjX2NzIik7CisJZ3Bpb19yZXF1ZXN0KF9BX0xDRF9TU0NfQTAsICJsY2Rfc3NjX2EwIik7CiAKLQkvKiBzZXQgYWxsIEdQSU9zIHRvIG91dHB1dCAqLwotCW9tYXBfc2V0X2dwaW9fZGlyZWN0aW9uKEFfTENEX1NTQ19SRCwgMCk7Ci0Jb21hcF9zZXRfZ3Bpb19kaXJlY3Rpb24oQV9MQ0RfU1NDX1NELCAwKTsKLQlvbWFwX3NldF9ncGlvX2RpcmVjdGlvbihfQV9MQ0RfUkVTRVQsIDApOwotCW9tYXBfc2V0X2dwaW9fZGlyZWN0aW9uKF9BX0xDRF9TU0NfQ1MsIDApOwotCW9tYXBfc2V0X2dwaW9fZGlyZWN0aW9uKF9BX0xDRF9TU0NfQTAsIDApOwotCi0JLyogc2V0IEdQSU8gZGF0YSAqLwotCW9tYXBfc2V0X2dwaW9fZGF0YW91dChBX0xDRF9TU0NfUkQsIDEpOwotCW9tYXBfc2V0X2dwaW9fZGF0YW91dChBX0xDRF9TU0NfU0QsIDApOwotCW9tYXBfc2V0X2dwaW9fZGF0YW91dChfQV9MQ0RfUkVTRVQsIDApOwotCW9tYXBfc2V0X2dwaW9fZGF0YW91dChfQV9MQ0RfU1NDX0NTLCAxKTsKLQlvbWFwX3NldF9ncGlvX2RhdGFvdXQoX0FfTENEX1NTQ19BMCwgMSk7CisJLyogc2V0IEdQSU9zIHRvIG91dHB1dCwgd2l0aCBpbml0aWFsIGRhdGEgKi8KKwlncGlvX2RpcmVjdGlvbl9vdXRwdXQoQV9MQ0RfU1NDX1JELCAxKTsKKwlncGlvX2RpcmVjdGlvbl9vdXRwdXQoQV9MQ0RfU1NDX1NELCAwKTsKKwlncGlvX2RpcmVjdGlvbl9vdXRwdXQoX0FfTENEX1JFU0VULCAwKTsKKwlncGlvX2RpcmVjdGlvbl9vdXRwdXQoX0FfTENEX1NTQ19DUywgMSk7CisJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KF9BX0xDRF9TU0NfQTAsIDEpOwogfQogCiBzdGF0aWMgdm9pZCBkaXNwbGF5X2luaXQodm9pZCkKQEAgLTEzOSw2MSArMTMyLDYxIEBACiAJbWRlbGF5KDIpOwogCiAJLyogcmVzZXQgTENEICovCi0Jb21hcF9zZXRfZ3Bpb19kYXRhb3V0KEFfTENEX1NTQ19TRCwgMSk7CisJZ3Bpb19zZXRfdmFsdWUoQV9MQ0RfU1NDX1NELCAxKTsKIAllcHNvbl9zZW5kYnl0ZSgwLCAweDI1KTsKIAotCW9tYXBfc2V0X2dwaW9fZGF0YW91dChfQV9MQ0RfUkVTRVQsIDApOworCWdwaW9fc2V0X3ZhbHVlKF9BX0xDRF9SRVNFVCwgMCk7CiAJbWRlbGF5KDEwKTsKLQlvbWFwX3NldF9ncGlvX2RhdGFvdXQoX0FfTENEX1JFU0VULCAxKTsKKwlncGlvX3NldF92YWx1ZShfQV9MQ0RfUkVTRVQsIDEpOwogCi0Jb21hcF9zZXRfZ3Bpb19kYXRhb3V0KF9BX0xDRF9TU0NfQ1MsIDEpOworCWdwaW9fc2V0X3ZhbHVlKF9BX0xDRF9TU0NfQ1MsIDEpOwogCW1kZWxheSgyKTsKLQlvbWFwX3NldF9ncGlvX2RhdGFvdXQoX0FfTENEX1NTQ19DUywgMCk7CisJZ3Bpb19zZXRfdmFsdWUoX0FfTENEX1NTQ19DUywgMCk7CiAKIAkvKiBpbml0IExDRCwgcGhhc2UgMSAqLwogCWVwc29uX3NlbmRieXRlKDAsIDB4Q0EpOwogCWZvciAoaSA9IDA7IGkgPCAxMDsgaSsrKQogCQllcHNvbl9zZW5kYnl0ZSgxLCBJTklUXzFbaV0pOwotCW9tYXBfc2V0X2dwaW9fZGF0YW91dChfQV9MQ0RfU1NDX0NTLCAxKTsKLQlvbWFwX3NldF9ncGlvX2RhdGFvdXQoX0FfTENEX1NTQ19DUywgMCk7CisJZ3Bpb19zZXRfdmFsdWUoX0FfTENEX1NTQ19DUywgMSk7CisJZ3Bpb19zZXRfdmFsdWUoX0FfTENEX1NTQ19DUywgMCk7CiAKIAkvKiBpbml0IExDRCBwaGFzZSAyICovCiAJZXBzb25fc2VuZGJ5dGUoMCwgMHhDQik7CiAJZm9yIChpID0gMDsgaSA8IDEyNTsgaSsrKQogCQllcHNvbl9zZW5kYnl0ZSgxLCBJTklUXzJbaV0pOwotCW9tYXBfc2V0X2dwaW9fZGF0YW91dChfQV9MQ0RfU1NDX0NTLCAxKTsKLQlvbWFwX3NldF9ncGlvX2RhdGFvdXQoX0FfTENEX1NTQ19DUywgMCk7CisJZ3Bpb19zZXRfdmFsdWUoX0FfTENEX1NTQ19DUywgMSk7CisJZ3Bpb19zZXRfdmFsdWUoX0FfTENEX1NTQ19DUywgMCk7CiAKIAkvKiBpbml0IExDRCBwaGFzZSAyYSAqLwogCWVwc29uX3NlbmRieXRlKDAsIDB4Q0MpOwogCWZvciAoaSA9IDA7IGkgPCAxNDsgaSsrKQogCQllcHNvbl9zZW5kYnl0ZSgxLCBJTklUXzNbaV0pOwotCW9tYXBfc2V0X2dwaW9fZGF0YW91dChfQV9MQ0RfU1NDX0NTLCAxKTsKLQlvbWFwX3NldF9ncGlvX2RhdGFvdXQoX0FfTENEX1NTQ19DUywgMCk7CisJZ3Bpb19zZXRfdmFsdWUoX0FfTENEX1NTQ19DUywgMSk7CisJZ3Bpb19zZXRfdmFsdWUoX0FfTENEX1NTQ19DUywgMCk7CiAKIAkvKiBpbml0IExDRCBwaGFzZSAzICovCiAJZXBzb25fc2VuZGJ5dGUoMCwgMHhCQyk7CiAJZXBzb25fc2VuZGJ5dGUoMSwgMHgwOCk7Ci0Jb21hcF9zZXRfZ3Bpb19kYXRhb3V0KF9BX0xDRF9TU0NfQ1MsIDEpOwotCW9tYXBfc2V0X2dwaW9fZGF0YW91dChfQV9MQ0RfU1NDX0NTLCAwKTsKKwlncGlvX3NldF92YWx1ZShfQV9MQ0RfU1NDX0NTLCAxKTsKKwlncGlvX3NldF92YWx1ZShfQV9MQ0RfU1NDX0NTLCAwKTsKIAogCS8qIGluaXQgTENEIHBoYXNlIDQgKi8KIAllcHNvbl9zZW5kYnl0ZSgwLCAweDA3KTsKIAllcHNvbl9zZW5kYnl0ZSgxLCAweDA1KTsKLQlvbWFwX3NldF9ncGlvX2RhdGFvdXQoX0FfTENEX1NTQ19DUywgMSk7Ci0Jb21hcF9zZXRfZ3Bpb19kYXRhb3V0KF9BX0xDRF9TU0NfQ1MsIDApOworCWdwaW9fc2V0X3ZhbHVlKF9BX0xDRF9TU0NfQ1MsIDEpOworCWdwaW9fc2V0X3ZhbHVlKF9BX0xDRF9TU0NfQ1MsIDApOwogCiAJLyogaW5pdCBMQ0QgcGhhc2UgNSAqLwogCWVwc29uX3NlbmRieXRlKDAsIDB4OTQpOwotCW9tYXBfc2V0X2dwaW9fZGF0YW91dChfQV9MQ0RfU1NDX0NTLCAxKTsKLQlvbWFwX3NldF9ncGlvX2RhdGFvdXQoX0FfTENEX1NTQ19DUywgMCk7CisJZ3Bpb19zZXRfdmFsdWUoX0FfTENEX1NTQ19DUywgMSk7CisJZ3Bpb19zZXRfdmFsdWUoX0FfTENEX1NTQ19DUywgMCk7CiAKIAkvKiBpbml0IExDRCBwaGFzZSA2ICovCiAJZXBzb25fc2VuZGJ5dGUoMCwgMHhDNik7CiAJZXBzb25fc2VuZGJ5dGUoMSwgMHg4MCk7Ci0Jb21hcF9zZXRfZ3Bpb19kYXRhb3V0KF9BX0xDRF9TU0NfQ1MsIDEpOworCWdwaW9fc2V0X3ZhbHVlKF9BX0xDRF9TU0NfQ1MsIDEpOwogCW1kZWxheSgxMDApOyAvKiB1c2VkIHRvIGJlIDEwMDAgKi8KLQlvbWFwX3NldF9ncGlvX2RhdGFvdXQoX0FfTENEX1NTQ19DUywgMCk7CisJZ3Bpb19zZXRfdmFsdWUoX0FfTENEX1NTQ19DUywgMCk7CiAKIAkvKiBpbml0IExDRCBwaGFzZSA3ICovCiAJZXBzb25fc2VuZGJ5dGUoMCwgMHgxNik7CkBAIC0yMDEsOCArMTk0LDggQEAKIAllcHNvbl9zZW5kYnl0ZSgxLCAweDAwKTsKIAllcHNvbl9zZW5kYnl0ZSgxLCAweEIxKTsKIAllcHNvbl9zZW5kYnl0ZSgxLCAweDAwKTsKLQlvbWFwX3NldF9ncGlvX2RhdGFvdXQoX0FfTENEX1NTQ19DUywgMSk7Ci0Jb21hcF9zZXRfZ3Bpb19kYXRhb3V0KF9BX0xDRF9TU0NfQ1MsIDApOworCWdwaW9fc2V0X3ZhbHVlKF9BX0xDRF9TU0NfQ1MsIDEpOworCWdwaW9fc2V0X3ZhbHVlKF9BX0xDRF9TU0NfQ1MsIDApOwogCiAJLyogaW5pdCBMQ0QgcGhhc2UgOCAqLwogCWVwc29uX3NlbmRieXRlKDAsIDB4NzYpOwpAQCAtMjEwLDEyICsyMDMsMTIgQEAKIAllcHNvbl9zZW5kYnl0ZSgxLCAweDAwKTsKIAllcHNvbl9zZW5kYnl0ZSgxLCAweERCKTsKIAllcHNvbl9zZW5kYnl0ZSgxLCAweDAwKTsKLQlvbWFwX3NldF9ncGlvX2RhdGFvdXQoX0FfTENEX1NTQ19DUywgMSk7Ci0Jb21hcF9zZXRfZ3Bpb19kYXRhb3V0KF9BX0xDRF9TU0NfQ1MsIDApOworCWdwaW9fc2V0X3ZhbHVlKF9BX0xDRF9TU0NfQ1MsIDEpOworCWdwaW9fc2V0X3ZhbHVlKF9BX0xDRF9TU0NfQ1MsIDApOwogCiAJLyogaW5pdCBMQ0QgcGhhc2UgOSAqLwogCWVwc29uX3NlbmRieXRlKDAsIDB4QUYpOwotCW9tYXBfc2V0X2dwaW9fZGF0YW91dChfQV9MQ0RfU1NDX0NTLCAxKTsKKwlncGlvX3NldF92YWx1ZShfQV9MQ0RfU1NDX0NTLCAxKTsKIH0KIAogc3RhdGljIGludCBzeDFfcGFuZWxfaW5pdChzdHJ1Y3QgbGNkX3BhbmVsICpwYW5lbCwgc3RydWN0IG9tYXBmYl9kZXZpY2UgKmZiZGV2KQpAQCAtMjMxLDE4ICsyMjQsMTggQEAKIHsKIAlwcmludGsoS0VSTl9JTkZPICJTWDE6IExDRCBwYW5lbCBkaXNhYmxlXG4iKTsKIAlzeDFfc2V0bW1pcG93ZXIoMCk7Ci0Jb21hcF9zZXRfZ3Bpb19kYXRhb3V0KF9BX0xDRF9TU0NfQ1MsIDEpOworCWdwaW9fc2V0X3ZhbHVlKF9BX0xDRF9TU0NfQ1MsIDEpOwogCiAJZXBzb25fc2VuZGJ5dGUoMCwgMHgyNSk7Ci0Jb21hcF9zZXRfZ3Bpb19kYXRhb3V0KF9BX0xDRF9TU0NfQ1MsIDApOworCWdwaW9fc2V0X3ZhbHVlKF9BX0xDRF9TU0NfQ1MsIDApOwogCiAJZXBzb25fc2VuZGJ5dGUoMCwgMHhBRSk7Ci0Jb21hcF9zZXRfZ3Bpb19kYXRhb3V0KF9BX0xDRF9TU0NfQ1MsIDEpOworCWdwaW9fc2V0X3ZhbHVlKF9BX0xDRF9TU0NfQ1MsIDEpOwogCW1kZWxheSgxMDApOwotCW9tYXBfc2V0X2dwaW9fZGF0YW91dChfQV9MQ0RfU1NDX0NTLCAwKTsKKwlncGlvX3NldF92YWx1ZShfQV9MQ0RfU1NDX0NTLCAwKTsKIAogCWVwc29uX3NlbmRieXRlKDAsIDB4OTUpOwotCW9tYXBfc2V0X2dwaW9fZGF0YW91dChfQV9MQ0RfU1NDX0NTLCAxKTsKKwlncGlvX3NldF92YWx1ZShfQV9MQ0RfU1NDX0NTLCAxKTsKIH0KIAogc3RhdGljIGludCBzeDFfcGFuZWxfZW5hYmxlKHN0cnVjdCBsY2RfcGFuZWwgKnBhbmVsKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9vbWFwL2xjZGMuYyBiL2RyaXZlcnMvdmlkZW8vb21hcC9sY2RjLmMKaW5kZXggODM1MTRmMC4uNmUyZWE3NSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9vbWFwL2xjZGMuYworKysgYi9kcml2ZXJzL3ZpZGVvL29tYXAvbGNkYy5jCkBAIC0zNCw2ICszNCw4IEBACiAKICNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgogCisjaW5jbHVkZSAibGNkYy5oIgorCiAjZGVmaW5lIE1PRFVMRV9OQU1FCQkJImxjZGMiCiAKICNkZWZpbmUgT01BUF9MQ0RDX0JBU0UJCQkweGZmZmVjMDAwCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL29tYXAvbGNkYy5oIGIvZHJpdmVycy92aWRlby9vbWFwL2xjZGMuaAppbmRleCBhZGI3MzFlNS4uODQ1MjIyMiAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9vbWFwL2xjZGMuaAorKysgYi9kcml2ZXJzL3ZpZGVvL29tYXAvbGNkYy5oCkBAIC00LDQgKzQsNiBAQAogaW50IG9tYXBfbGNkY19zZXRfZG1hX2NhbGxiYWNrKHZvaWQgKCpjYWxsYmFjaykodm9pZCAqZGF0YSksIHZvaWQgKmRhdGEpOwogdm9pZCBvbWFwX2xjZGNfZnJlZV9kbWFfY2FsbGJhY2sodm9pZCk7CiAKK2V4dGVybiBjb25zdCBzdHJ1Y3QgbGNkX2N0cmwgb21hcDFfaW50X2N0cmw7CisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9vbWFwL29tYXBmYl9tYWluLmMgYi9kcml2ZXJzL3ZpZGVvL29tYXAvb21hcGZiX21haW4uYwppbmRleCA1MWExMzhiLi41YTVlNDA3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL29tYXAvb21hcGZiX21haW4uYworKysgYi9kcml2ZXJzL3ZpZGVvL29tYXAvb21hcGZiX21haW4uYwpAQCAtMzEsMTEgKzMxLDE0IEBACiAjaW5jbHVkZSA8bWFjaC9kbWEuaD4KICNpbmNsdWRlIDxtYWNoL29tYXBmYi5oPgogCisjaW5jbHVkZSAibGNkYy5oIgorI2luY2x1ZGUgImRpc3BjLmgiCisKICNkZWZpbmUgTU9EVUxFX05BTUUJIm9tYXBmYiIKIAogc3RhdGljIHVuc2lnbmVkIGludAlkZWZfYWNjZWw7CiBzdGF0aWMgdW5zaWduZWQgbG9uZwlkZWZfdnJhbVtPTUFQRkJfUExBTkVfTlVNXTsKLXN0YXRpYyBpbnQJCWRlZl92cmFtX2NudDsKK3N0YXRpYyB1bnNpZ25lZCBpbnQJZGVmX3ZyYW1fY250Owogc3RhdGljIHVuc2lnbmVkIGxvbmcJZGVmX3Z4cmVzOwogc3RhdGljIHVuc2lnbmVkIGxvbmcJZGVmX3Z5cmVzOwogc3RhdGljIHVuc2lnbmVkIGludAlkZWZfcm90YXRlOwpAQCAtODQsMTIgKzg3LDEwIEBACiAgKiBMQ0QgcGFuZWwKICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICovCi1leHRlcm4gc3RydWN0IGxjZF9jdHJsIG9tYXAxX2ludF9jdHJsOwotZXh0ZXJuIHN0cnVjdCBsY2RfY3RybCBvbWFwMl9pbnRfY3RybDsKIGV4dGVybiBzdHJ1Y3QgbGNkX2N0cmwgaHdhNzQyX2N0cmw7CiBleHRlcm4gc3RydWN0IGxjZF9jdHJsIGJsaXp6YXJkX2N0cmw7CiAKLXN0YXRpYyBzdHJ1Y3QgbGNkX2N0cmwgKmN0cmxzW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGxjZF9jdHJsICpjdHJsc1tdID0gewogI2lmZGVmIENPTkZJR19BUkNIX09NQVAxCiAJJm9tYXAxX2ludF9jdHJsLAogI2Vsc2UKQEAgLTc0MCw3ICs3NDEsNyBAQAogCWludCByZXQ7CiAKIAlvbWFwZmJfcnF1ZXVlX2xvY2socGxhbmUtPmZiZGV2KTsKLQlyZXQgPSBvbWFwZmJfdXBkYXRlX3dpbmRvd19hc3luYyhmYmksIHdpbiwgTlVMTCwgMCk7CisJcmV0ID0gb21hcGZiX3VwZGF0ZV93aW5kb3dfYXN5bmMoZmJpLCB3aW4sIE5VTEwsIE5VTEwpOwogCW9tYXBmYl9ycXVldWVfdW5sb2NrKHBsYW5lLT5mYmRldik7CiAKIAlyZXR1cm4gcmV0OwpAQCAtNzY4LDcgKzc2OSw3IEBACiAJd2luLmZvcm1hdCA9IDA7CiAKIAlvbWFwZmJfcnF1ZXVlX2xvY2soZmJkZXYpOwotCXIgPSBmYmRldi0+Y3RybC0+dXBkYXRlX3dpbmRvdyhmYmksICZ3aW4sIE5VTEwsIDApOworCXIgPSBmYmRldi0+Y3RybC0+dXBkYXRlX3dpbmRvdyhmYmksICZ3aW4sIE5VTEwsIE5VTEwpOwogCW9tYXBmYl9ycXVldWVfdW5sb2NrKGZiZGV2KTsKIAogCXJldHVybiByOwpAQCAtMTA0Nyw3ICsxMDQ4LDcgQEAKIAkJd2luLmhlaWdodCA9IDI7CiAJCXdpbi5vdXRfd2lkdGggPSAyOwogCQl3aW4ub3V0X2hlaWdodCA9IDI7Ci0JCWZiZGV2LT5jdHJsLT51cGRhdGVfd2luZG93KGZiZGV2LT5mYl9pbmZvWzBdLCAmd2luLCBOVUxMLCAwKTsKKwkJZmJkZXYtPmN0cmwtPnVwZGF0ZV93aW5kb3coZmJkZXYtPmZiX2luZm9bMF0sICZ3aW4sIE5VTEwsIE5VTEwpOwogCX0KIAlvbWFwZmJfcnF1ZXVlX3VubG9jayhmYmRldik7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL29tYXAvcmZiaS5jIGIvZHJpdmVycy92aWRlby9vbWFwL3JmYmkuYwppbmRleCA0YTZmMTNkLi5hMTNjOGRjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL29tYXAvcmZiaS5jCisrKyBiL2RyaXZlcnMvdmlkZW8vb21hcC9yZmJpLmMKQEAgLTU5LDcgKzU5LDcgQEAKICNkZWZpbmUgRElTUENfQ09OVFJPTAkJMHgwMDQwCiAKIHN0YXRpYyBzdHJ1Y3QgewotCXUzMgkJYmFzZTsKKwl2b2lkIF9faW9tZW0JKmJhc2U7CiAJdm9pZAkJKCpsY2RjX2NhbGxiYWNrKSh2b2lkICpkYXRhKTsKIAl2b2lkCQkqbGNkY19jYWxsYmFja19kYXRhOwogCXVuc2lnbmVkIGxvbmcJbDRfa2h6OwpAQCAtNTE4LDcgKzUxOCwxMSBAQAogCWludCByOwogCiAJcmZiaS5mYmRldiA9IGZiZGV2OwotCXJmYmkuYmFzZSA9IGlvX3AydihSRkJJX0JBU0UpOworCXJmYmkuYmFzZSA9IGlvcmVtYXAoUkZCSV9CQVNFLCBTWl8xSyk7CisJaWYgKCFyZmJpLmJhc2UpIHsKKwkJZGV2X2VycihmYmRldi0+ZGV2LCAiY2FuJ3QgaW9yZW1hcCBSRkJJXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQogCiAJaWYgKChyID0gcmZiaV9nZXRfY2xvY2tzKCkpIDwgMCkKIAkJcmV0dXJuIHI7CkBAIC01NjYsNiArNTcwLDcgQEAKIHsKIAlvbWFwX2Rpc3BjX2ZyZWVfaXJxKCk7CiAJcmZiaV9wdXRfY2xvY2tzKCk7CisJaW91bm1hcChyZmJpLmJhc2UpOwogfQogCiBjb25zdCBzdHJ1Y3QgbGNkX2N0cmxfZXh0aWYgb21hcDJfZXh0X2lmID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9vbWFwL3Nvc3NpLmMgYi9kcml2ZXJzL3ZpZGVvL29tYXAvc29zc2kuYwppbmRleCA2MzU5MzUzLi5hNzY5NDYyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL29tYXAvc29zc2kuYworKysgYi9kcml2ZXJzL3ZpZGVvL29tYXAvc29zc2kuYwpAQCAtNTc0LDcgKzU3NCwxMiBAQAogCXN0cnVjdCBjbGsgKmRwbGwxb3V0X2NrOwogCWludCByOwogCi0Jc29zc2kuYmFzZSA9ICh2b2lkIF9faW9tZW0gKilJT19BRERSRVNTKE9NQVBfU09TU0lfQkFTRSk7CisJc29zc2kuYmFzZSA9IGlvcmVtYXAoT01BUF9TT1NTSV9CQVNFLCBTWl8xSyk7CisJaWYgKCFzb3NzaS5iYXNlKSB7CisJCWRldl9lcnIoZmJkZXYtPmRldiwgImNhbid0IGlvcmVtYXAgU29TU0lcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKIAlzb3NzaS5mYmRldiA9IGZiZGV2OwogCXNwaW5fbG9ja19pbml0KCZzb3NzaS5sb2NrKTsKIApAQCAtNjY1LDYgKzY3MCw3IEBACiB7CiAJb21hcF9sY2RjX2ZyZWVfZG1hX2NhbGxiYWNrKCk7CiAJY2xrX3B1dChzb3NzaS5mY2spOworCWlvdW5tYXAoc29zc2kuYmFzZSk7CiB9CiAKIHN0cnVjdCBsY2RfY3RybF9leHRpZiBvbWFwMV9leHRfaWYgPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3MxZDEzeHh4ZmIuYyBiL2RyaXZlcnMvdmlkZW8vczFkMTN4eHhmYi5jCmluZGV4IGI4MjlkYzcuLmE3YjAxZDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vczFkMTN4eHhmYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vczFkMTN4eHhmYi5jCkBAIC01MCw2ICs1MCwxMSBAQAogI2RlZmluZSBkYmcoZm10LCBhcmdzLi4uKSBkbyB7IH0gd2hpbGUgKDApCiAjZW5kaWYKIAorc3RhdGljIGNvbnN0IGludCBfX2RldmluaXRjb25zdCBzMWQxM3h4eGZiX3JldmlzaW9uc1tdID0geworCVMxRDEzNTA2X0NISVBfUkVWLAkvKiBSZXYuNCBvbiBIUCBKb3JuYWRhIDd4eCBTMUQxMzUwNiAqLworCVMxRDEzODA2X0NISVBfUkVWLAkvKiBSZXYuNyBvbiAuLiAqLworfTsKKwogLyoKICAqIEhlcmUgd2UgZGVmaW5lIHRoZSBkZWZhdWx0IHN0cnVjdCBmYl9maXhfc2NyZWVuaW5mbwogICovCkBAIC01MzgsNiArNTQzLDcgQEAKIAlzdHJ1Y3QgZmJfaW5mbyAqaW5mbzsKIAlzdHJ1Y3QgczFkMTN4eHhmYl9wZGF0YSAqcGRhdGEgPSBOVUxMOwogCWludCByZXQgPSAwOworCWludCBpOwogCXU4IHJldmlzaW9uOwogCiAJZGJnKCJwcm9iZSBjYWxsZWQ6IGRldmljZSBpcyAlcFxuIiwgcGRldik7CkBAIC02MDcsMTAgKzYxMywxOSBAQAogCQlnb3RvIGJhaWw7CiAJfQogCi0JcmV2aXNpb24gPSBzMWQxM3h4eGZiX3JlYWRyZWcoZGVmYXVsdF9wYXIsIFMxRFJFR19SRVZfQ09ERSk7Ci0JaWYgKChyZXZpc2lvbiA+PiAyKSAhPSBTMURfQ0hJUF9SRVYpIHsKLQkJcHJpbnRrKEtFUk5fSU5GTyBQRlggImNoaXAgbm90IGZvdW5kOiAlaVxuIiwgKHJldmlzaW9uID4+IDIpKTsKLQkJcmV0ID0gLUVOT0RFVjsKKwlyZXZpc2lvbiA9IHMxZDEzeHh4ZmJfcmVhZHJlZyhkZWZhdWx0X3BhciwgUzFEUkVHX1JFVl9DT0RFKSA+PiAyOworCisJcmV0ID0gLUVOT0RFVjsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHMxZDEzeHh4ZmJfcmV2aXNpb25zKTsgaSsrKSB7CisJCWlmIChyZXZpc2lvbiA9PSBzMWQxM3h4eGZiX3JldmlzaW9uc1tpXSkKKwkJCXJldCA9IDA7CisJfQorCisJaWYgKCFyZXQpCisJCXByaW50ayhLRVJOX0lORk8gUEZYICJjaGlwIHJldmlzaW9uICVpXG4iLCByZXZpc2lvbik7CisJZWxzZSB7CisJCXByaW50ayhLRVJOX0lORk8gUEZYICJ1bmtub3duIGNoaXAgcmV2aXNpb24gJWlcbiIsIHJldmlzaW9uKTsKIAkJZ290byBiYWlsOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9zaF9tb2JpbGVfbGNkY2ZiLmMgYi9kcml2ZXJzL3ZpZGVvL3NoX21vYmlsZV9sY2RjZmIuYwppbmRleCA0YzMyYzA2Li5lZmZmNjcyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL3NoX21vYmlsZV9sY2RjZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL3NoX21vYmlsZV9sY2RjZmIuYwpAQCAtMTYsNyArMTYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+Ci0jaW5jbHVkZSA8YXNtL3NoX21vYmlsZV9sY2RjLmg+CisjaW5jbHVkZSA8dmlkZW8vc2hfbW9iaWxlX2xjZGMuaD4KIAogI2RlZmluZSBQQUxFVFRFX05SIDE2CiAKQEAgLTM0LDcgKzM0LDkgQEAKIAogc3RydWN0IHNoX21vYmlsZV9sY2RjX3ByaXYgewogCXZvaWQgX19pb21lbSAqYmFzZTsKKyNpZmRlZiBDT05GSUdfSEFWRV9DTEsKIAlzdHJ1Y3QgY2xrICpjbGs7CisjZW5kaWYKIAl1bnNpZ25lZCBsb25nIGxkZGNrcjsKIAlzdHJ1Y3Qgc2hfbW9iaWxlX2xjZGNfY2hhbiBjaFsyXTsKIH07CkBAIC0yNjAsNiArMjYyLDExIEBACiAJCXRtcCA9IGNoLT5sZG10MXJfdmFsdWU7CiAJCXRtcCB8PSAobGNkX2NmZy0+c3luYyAmIEZCX1NZTkNfVkVSVF9ISUdIX0FDVCkgPyAwIDogMSA8PCAyODsKIAkJdG1wIHw9IChsY2RfY2ZnLT5zeW5jICYgRkJfU1lOQ19IT1JfSElHSF9BQ1QpID8gMCA6IDEgPDwgMjc7CisJCXRtcCB8PSAoY2gtPmNmZy5mbGFncyAmIExDRENfRkxBR1NfRFdQT0wpID8gMSA8PCAyNiA6IDA7CisJCXRtcCB8PSAoY2gtPmNmZy5mbGFncyAmIExDRENfRkxBR1NfRElQT0wpID8gMSA8PCAyNSA6IDA7CisJCXRtcCB8PSAoY2gtPmNmZy5mbGFncyAmIExDRENfRkxBR1NfREFQT0wpID8gMSA8PCAyNCA6IDA7CisJCXRtcCB8PSAoY2gtPmNmZy5mbGFncyAmIExDRENfRkxBR1NfSFNDTlQpID8gMSA8PCAxNyA6IDA7CisJCXRtcCB8PSAoY2gtPmNmZy5mbGFncyAmIExDRENfRkxBR1NfRFdDTlQpID8gMSA8PCAxNiA6IDA7CiAJCWxjZGNfd3JpdGVfY2hhbihjaCwgTERNVDFSLCB0bXApOwogCiAJCS8qIHNldHVwIFNZUyBidXMgKi8KQEAgLTQyMiw2ICs0MjksNyBAQAogCiAJcHJpdi0+bGRkY2tyID0gaWNrc2VsIDw8IDE2OwogCisjaWZkZWYgQ09ORklHX0hBVkVfQ0xLCiAJaWYgKHN0cikgewogCQlwcml2LT5jbGsgPSBjbGtfZ2V0KGRldiwgc3RyKTsKIAkJaWYgKElTX0VSUihwcml2LT5jbGspKSB7CkBAIC00MzEsNiArNDM5LDcgQEAKIAogCQljbGtfZW5hYmxlKHByaXYtPmNsayk7CiAJfQorI2VuZGlmCiAKIAlyZXR1cm4gMDsKIH0KQEAgLTU4NSw3ICs1OTQsNiBAQAogCQlnb3RvIGVycjE7CiAJfQogCi0JcHJpdi0+bGRkY2tyID0gcGRhdGEtPmxkZGNrcjsKIAlwcml2LT5iYXNlID0gaW9yZW1hcF9ub2NhY2hlKHJlcy0+c3RhcnQsIChyZXMtPmVuZCAtIHJlcy0+c3RhcnQpICsgMSk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgajsgaSsrKSB7CkBAIC02ODgsMTAgKzY5NiwxMiBAQAogCQlmYl9kZWFsbG9jX2NtYXAoJmluZm8tPmNtYXApOwogCX0KIAorI2lmZGVmIENPTkZJR19IQVZFX0NMSwogCWlmIChwcml2LT5jbGspIHsKIAkJY2xrX2Rpc2FibGUocHJpdi0+Y2xrKTsKIAkJY2xrX3B1dChwcml2LT5jbGspOwogCX0KKyNlbmRpZgogCiAJaWYgKHByaXYtPmJhc2UpCiAJCWlvdW5tYXAocHJpdi0+YmFzZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3RkZnhmYi5jIGIvZHJpdmVycy92aWRlby90ZGZ4ZmIuYwppbmRleCA0NTk5YTQzLi4xNGJkM2YzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL3RkZnhmYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vdGRmeGZiLmMKQEAgLTExOTUsNTcgKzExOTUsNTggQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAKIAlkZWZhdWx0X3BhciA9IGluZm8tPnBhcjsKKwlpbmZvLT5maXggPSB0ZGZ4X2ZpeDsKIAogCS8qIENvbmZpZ3VyZSB0aGUgZGVmYXVsdCBmYl9maXhfc2NyZWVuaW5mbyBmaXJzdCAqLwogCXN3aXRjaCAocGRldi0+ZGV2aWNlKSB7CiAJY2FzZSBQQ0lfREVWSUNFX0lEXzNERlhfQkFOU0hFRToKLQkJc3RyY3B5KHRkZnhfZml4LmlkLCAiM0RmeCBCYW5zaGVlIik7CisJCXN0cmNweShpbmZvLT5maXguaWQsICIzRGZ4IEJhbnNoZWUiKTsKIAkJZGVmYXVsdF9wYXItPm1heF9waXhjbG9jayA9IEJBTlNIRUVfTUFYX1BJWENMT0NLOwogCQlicmVhazsKIAljYXNlIFBDSV9ERVZJQ0VfSURfM0RGWF9WT09ET08zOgotCQlzdHJjcHkodGRmeF9maXguaWQsICIzRGZ4IFZvb2RvbzMiKTsKKwkJc3RyY3B5KGluZm8tPmZpeC5pZCwgIjNEZnggVm9vZG9vMyIpOwogCQlkZWZhdWx0X3Bhci0+bWF4X3BpeGNsb2NrID0gVk9PRE9PM19NQVhfUElYQ0xPQ0s7CiAJCWJyZWFrOwogCWNhc2UgUENJX0RFVklDRV9JRF8zREZYX1ZPT0RPTzU6Ci0JCXN0cmNweSh0ZGZ4X2ZpeC5pZCwgIjNEZnggVm9vZG9vNSIpOworCQlzdHJjcHkoaW5mby0+Zml4LmlkLCAiM0RmeCBWb29kb281Iik7CiAJCWRlZmF1bHRfcGFyLT5tYXhfcGl4Y2xvY2sgPSBWT09ET081X01BWF9QSVhDTE9DSzsKIAkJYnJlYWs7CiAJfQogCi0JdGRmeF9maXgubW1pb19zdGFydCA9IHBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCAwKTsKLQl0ZGZ4X2ZpeC5tbWlvX2xlbiA9IHBjaV9yZXNvdXJjZV9sZW4ocGRldiwgMCk7Ci0JaWYgKCFyZXF1ZXN0X21lbV9yZWdpb24odGRmeF9maXgubW1pb19zdGFydCwgdGRmeF9maXgubW1pb19sZW4sCisJaW5mby0+Zml4Lm1taW9fc3RhcnQgPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgMCk7CisJaW5mby0+Zml4Lm1taW9fbGVuID0gcGNpX3Jlc291cmNlX2xlbihwZGV2LCAwKTsKKwlpZiAoIXJlcXVlc3RfbWVtX3JlZ2lvbihpbmZvLT5maXgubW1pb19zdGFydCwgaW5mby0+Zml4Lm1taW9fbGVuLAogCQkJCSJ0ZGZ4IHJlZ2Jhc2UiKSkgewogCQlwcmludGsoS0VSTl9FUlIgInRkZnhmYjogQ2FuJ3QgcmVzZXJ2ZSByZWdiYXNlXG4iKTsKIAkJZ290byBvdXRfZXJyOwogCX0KIAogCWRlZmF1bHRfcGFyLT5yZWdiYXNlX3ZpcnQgPQotCQlpb3JlbWFwX25vY2FjaGUodGRmeF9maXgubW1pb19zdGFydCwgdGRmeF9maXgubW1pb19sZW4pOworCQlpb3JlbWFwX25vY2FjaGUoaW5mby0+Zml4Lm1taW9fc3RhcnQsIGluZm8tPmZpeC5tbWlvX2xlbik7CiAJaWYgKCFkZWZhdWx0X3Bhci0+cmVnYmFzZV92aXJ0KSB7CiAJCXByaW50ayhLRVJOX0VSUiAiZmI6IENhbid0IHJlbWFwICVzIHJlZ2lzdGVyIGFyZWEuXG4iLAotCQkJCXRkZnhfZml4LmlkKTsKKwkJCQlpbmZvLT5maXguaWQpOwogCQlnb3RvIG91dF9lcnJfcmVnYmFzZTsKIAl9CiAKLQl0ZGZ4X2ZpeC5zbWVtX3N0YXJ0ID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIDEpOwotCXRkZnhfZml4LnNtZW1fbGVuID0gZG9fbGZiX3NpemUoZGVmYXVsdF9wYXIsIHBkZXYtPmRldmljZSk7Ci0JaWYgKCF0ZGZ4X2ZpeC5zbWVtX2xlbikgewotCQlwcmludGsoS0VSTl9FUlIgImZiOiBDYW4ndCBjb3VudCAlcyBtZW1vcnkuXG4iLCB0ZGZ4X2ZpeC5pZCk7CisJaW5mby0+Zml4LnNtZW1fc3RhcnQgPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgMSk7CisJaW5mby0+Zml4LnNtZW1fbGVuID0gZG9fbGZiX3NpemUoZGVmYXVsdF9wYXIsIHBkZXYtPmRldmljZSk7CisJaWYgKCFpbmZvLT5maXguc21lbV9sZW4pIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJmYjogQ2FuJ3QgY291bnQgJXMgbWVtb3J5LlxuIiwgaW5mby0+Zml4LmlkKTsKIAkJZ290byBvdXRfZXJyX3JlZ2Jhc2U7CiAJfQogCi0JaWYgKCFyZXF1ZXN0X21lbV9yZWdpb24odGRmeF9maXguc21lbV9zdGFydCwKKwlpZiAoIXJlcXVlc3RfbWVtX3JlZ2lvbihpbmZvLT5maXguc21lbV9zdGFydCwKIAkJCQlwY2lfcmVzb3VyY2VfbGVuKHBkZXYsIDEpLCAidGRmeCBzbWVtIikpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJ0ZGZ4ZmI6IENhbid0IHJlc2VydmUgc21lbVxuIik7CiAJCWdvdG8gb3V0X2Vycl9yZWdiYXNlOwogCX0KIAotCWluZm8tPnNjcmVlbl9iYXNlID0gaW9yZW1hcF9ub2NhY2hlKHRkZnhfZml4LnNtZW1fc3RhcnQsCi0JCQkJCSAgICB0ZGZ4X2ZpeC5zbWVtX2xlbik7CisJaW5mby0+c2NyZWVuX2Jhc2UgPSBpb3JlbWFwX25vY2FjaGUoaW5mby0+Zml4LnNtZW1fc3RhcnQsCisJCQkJCSAgICBpbmZvLT5maXguc21lbV9sZW4pOwogCWlmICghaW5mby0+c2NyZWVuX2Jhc2UpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJmYjogQ2FuJ3QgcmVtYXAgJXMgZnJhbWVidWZmZXIuXG4iLAotCQkJCXRkZnhfZml4LmlkKTsKKwkJCQlpbmZvLT5maXguaWQpOwogCQlnb3RvIG91dF9lcnJfc2NyZWVuYmFzZTsKIAl9CiAKQEAgLTEyNTcsMjAgKzEyNTgsMTkgQEAKIAkJZ290byBvdXRfZXJyX3NjcmVlbmJhc2U7CiAJfQogCi0JcHJpbnRrKEtFUk5fSU5GTyAiZmI6ICVzIG1lbW9yeSA9ICVkS1xuIiwgdGRmeF9maXguaWQsCi0JCQl0ZGZ4X2ZpeC5zbWVtX2xlbiA+PiAxMCk7CisJcHJpbnRrKEtFUk5fSU5GTyAiZmI6ICVzIG1lbW9yeSA9ICVkS1xuIiwgaW5mby0+Zml4LmlkLAorCQkJaW5mby0+Zml4LnNtZW1fbGVuID4+IDEwKTsKIAogCWRlZmF1bHRfcGFyLT5tdHJyX2hhbmRsZSA9IC0xOwogCWlmICghbm9tdHJyKQogCQlkZWZhdWx0X3Bhci0+bXRycl9oYW5kbGUgPQotCQkJbXRycl9hZGQodGRmeF9maXguc21lbV9zdGFydCwgdGRmeF9maXguc21lbV9sZW4sCisJCQltdHJyX2FkZChpbmZvLT5maXguc21lbV9zdGFydCwgaW5mby0+Zml4LnNtZW1fbGVuLAogCQkJCSBNVFJSX1RZUEVfV1JDT01CLCAxKTsKIAotCXRkZnhfZml4LnlwYW5zdGVwCT0gbm9wYW4gPyAwIDogMTsKLQl0ZGZ4X2ZpeC55d3JhcHN0ZXAJPSBub3dyYXAgPyAwIDogMTsKKwlpbmZvLT5maXgueXBhbnN0ZXAJPSBub3BhbiA/IDAgOiAxOworCWluZm8tPmZpeC55d3JhcHN0ZXAJPSBub3dyYXAgPyAwIDogMTsKIAogCWluZm8tPmZib3BzCQk9ICZ0ZGZ4ZmJfb3BzOwotCWluZm8tPmZpeAkJPSB0ZGZ4X2ZpeDsKIAlpbmZvLT5wc2V1ZG9fcGFsZXR0ZQk9IGRlZmF1bHRfcGFyLT5wYWxldHRlOwogCWluZm8tPmZsYWdzCQk9IEZCSU5GT19ERUZBVUxUIHwgRkJJTkZPX0hXQUNDRUxfWVBBTjsKICNpZmRlZiBDT05GSUdfRkJfM0RGWF9BQ0NFTApAQCAtMTMyMywxNCArMTMyMywxNCBAQAogb3V0X2Vycl9zY3JlZW5iYXNlOgogCWlmIChpbmZvLT5zY3JlZW5fYmFzZSkKIAkJaW91bm1hcChpbmZvLT5zY3JlZW5fYmFzZSk7Ci0JcmVsZWFzZV9tZW1fcmVnaW9uKHRkZnhfZml4LnNtZW1fc3RhcnQsIHBjaV9yZXNvdXJjZV9sZW4ocGRldiwgMSkpOworCXJlbGVhc2VfbWVtX3JlZ2lvbihpbmZvLT5maXguc21lbV9zdGFydCwgcGNpX3Jlc291cmNlX2xlbihwZGV2LCAxKSk7CiBvdXRfZXJyX3JlZ2Jhc2U6CiAJLyoKIAkgKiBDbGVhbnVwIGFmdGVyIGFueXRoaW5nIHRoYXQgd2FzIHJlbWFwcGVkL2FsbG9jYXRlZC4KIAkgKi8KIAlpZiAoZGVmYXVsdF9wYXItPnJlZ2Jhc2VfdmlydCkKIAkJaW91bm1hcChkZWZhdWx0X3Bhci0+cmVnYmFzZV92aXJ0KTsKLQlyZWxlYXNlX21lbV9yZWdpb24odGRmeF9maXgubW1pb19zdGFydCwgdGRmeF9maXgubW1pb19sZW4pOworCXJlbGVhc2VfbWVtX3JlZ2lvbihpbmZvLT5maXgubW1pb19zdGFydCwgaW5mby0+Zml4Lm1taW9fbGVuKTsKIG91dF9lcnI6CiAJZnJhbWVidWZmZXJfcmVsZWFzZShpbmZvKTsKIAlyZXR1cm4gLUVOWElPOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby90bWlvZmIuYyBiL2RyaXZlcnMvdmlkZW8vdG1pb2ZiLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmEzODAwMQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdmlkZW8vdG1pb2ZiLmMKQEAgLTAsMCArMSwxMDUwIEBACisvKgorICogRnJhbWUgQnVmZmVyIERldmljZSBmb3IgVG9zaGliYSBNb2JpbGUgSU8oVE1JTykgY29udHJvbGxlcgorICoKKyAqIENvcHlyaWdodChDKSAyMDA1LTIwMDYgQ2hyaXMgSHVtYmVydAorICogQ29weXJpZ2h0KEMpIDIwMDUgRGlyayBPcGZlcgorICogQ29weXRpZ2h0KEMpIDIwMDcsMjAwOCBEbWl0cnkgQmFyeXNoa292CisgKgorICogQmFzZWQgb246CisgKglkcml2ZXJzL3ZpZGVvL3cxMDBmYi5jCisgKgljb2RlIHdyaXR0ZW4gYnkgU2hhcnAvTGluZW8gZm9yIDIuNCBrZXJuZWxzCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9mYi5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisvKiBXaHkgc2hvdWxkIGZiIGRyaXZlciBjYWxsIGNvbnNvbGUgZnVuY3Rpb25zPyBiZWNhdXNlIGFjcXVpcmVfY29uc29sZV9zZW0oKSAqLworI2luY2x1ZGUgPGxpbnV4L2NvbnNvbGUuaD4KKyNpbmNsdWRlIDxsaW51eC9tZmQvY29yZS5oPgorI2luY2x1ZGUgPGxpbnV4L21mZC90bWlvLmg+CisjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgorCisvKgorICogYWNjZWxlcmF0b3IgY29tbWFuZHMKKyAqLworI2RlZmluZSBUTUlPRkJfQUNDX0NTQURSKHgpCSgweDAwMDAwMDAwIHwgKCh4KSAmIDB4MDAxZmZmZmUpKQorI2RlZmluZSBUTUlPRkJfQUNDX0NIUElYKHgpCSgweDAxMDAwMDAwIHwgKCh4KSAmIDB4MDAwMDAzZmYpKQorI2RlZmluZSBUTUlPRkJfQUNDX0NWUElYKHgpCSgweDAyMDAwMDAwIHwgKCh4KSAmIDB4MDAwMDAzZmYpKQorI2RlZmluZSBUTUlPRkJfQUNDX1BTQURSKHgpCSgweDAzMDAwMDAwIHwgKCh4KSAmIDB4MDBmZmZmZmUpKQorI2RlZmluZSBUTUlPRkJfQUNDX1BIUElYKHgpCSgweDA0MDAwMDAwIHwgKCh4KSAmIDB4MDAwMDAzZmYpKQorI2RlZmluZSBUTUlPRkJfQUNDX1BWUElYKHgpCSgweDA1MDAwMDAwIHwgKCh4KSAmIDB4MDAwMDAzZmYpKQorI2RlZmluZSBUTUlPRkJfQUNDX1BIT0ZTKHgpCSgweDA2MDAwMDAwIHwgKCh4KSAmIDB4MDAwMDAzZmYpKQorI2RlZmluZSBUTUlPRkJfQUNDX1BWT0ZTKHgpCSgweDA3MDAwMDAwIHwgKCh4KSAmIDB4MDAwMDAzZmYpKQorI2RlZmluZSBUTUlPRkJfQUNDX1BPQURSKHgpCSgweDA4MDAwMDAwIHwgKCh4KSAmIDB4MDBmZmZmZmUpKQorI2RlZmluZSBUTUlPRkJfQUNDX1JTVFIoeCkJKDB4MDkwMDAwMDAgfCAoKHgpICYgMHgwMDAwMDBmZikpCisjZGVmaW5lIFRNSU9GQl9BQ0NfVENMT1IoeCkJKDB4MEEwMDAwMDAgfCAoKHgpICYgMHgwMDAwZmZmZikpCisjZGVmaW5lIFRNSU9GQl9BQ0NfRklMTCh4KQkoMHgwQjAwMDAwMCB8ICgoeCkgJiAweDAwMDBmZmZmKSkKKyNkZWZpbmUgVE1JT0ZCX0FDQ19EU0FEUih4KQkoMHgwQzAwMDAwMCB8ICgoeCkgJiAweDAwZmZmZmZlKSkKKyNkZWZpbmUgVE1JT0ZCX0FDQ19TU0FEUih4KQkoMHgwRDAwMDAwMCB8ICgoeCkgJiAweDAwZmZmZmZlKSkKKyNkZWZpbmUgVE1JT0ZCX0FDQ19ESFBJWCh4KQkoMHgwRTAwMDAwMCB8ICgoeCkgJiAweDAwMDAwM2ZmKSkKKyNkZWZpbmUgVE1JT0ZCX0FDQ19EVlBJWCh4KQkoMHgwRjAwMDAwMCB8ICgoeCkgJiAweDAwMDAwM2ZmKSkKKyNkZWZpbmUgVE1JT0ZCX0FDQ19TSFBJWCh4KQkoMHgxMDAwMDAwMCB8ICgoeCkgJiAweDAwMDAwM2ZmKSkKKyNkZWZpbmUgVE1JT0ZCX0FDQ19TVlBJWCh4KQkoMHgxMTAwMDAwMCB8ICgoeCkgJiAweDAwMDAwM2ZmKSkKKyNkZWZpbmUgVE1JT0ZCX0FDQ19MQklOSSh4KQkoMHgxMjAwMDAwMCB8ICgoeCkgJiAweDAwMDBmZmZmKSkKKyNkZWZpbmUgVE1JT0ZCX0FDQ19MQksyKHgpCSgweDEzMDAwMDAwIHwgKCh4KSAmIDB4MDAwMGZmZmYpKQorI2RlZmluZSBUTUlPRkJfQUNDX1NIQklOSSh4KQkoMHgxNDAwMDAwMCB8ICgoeCkgJiAweDAwMDBmZmZmKSkKKyNkZWZpbmUgVE1JT0ZCX0FDQ19TSEJLMih4KQkoMHgxNTAwMDAwMCB8ICgoeCkgJiAweDAwMDBmZmZmKSkKKyNkZWZpbmUgVE1JT0ZCX0FDQ19TVkJJTkkoeCkJKDB4MTYwMDAwMDAgfCAoKHgpICYgMHgwMDAwZmZmZikpCisjZGVmaW5lIFRNSU9GQl9BQ0NfU1ZCSzIoeCkJKDB4MTcwMDAwMDAgfCAoKHgpICYgMHgwMDAwZmZmZikpCisKKyNkZWZpbmUgVE1JT0ZCX0FDQ19DTUdPCQkweDIwMDAwMDAwCisjZGVmaW5lIFRNSU9GQl9BQ0NfQ01HT19DRU5ECTB4MDAwMDAwMDEKKyNkZWZpbmUgVE1JT0ZCX0FDQ19DTUdPX0lOVAkweDAwMDAwMDAyCisjZGVmaW5lIFRNSU9GQl9BQ0NfQ01HT19DTU9ECTB4MDAwMDAwMTAKKyNkZWZpbmUgVE1JT0ZCX0FDQ19DTUdPX0NEVlJWCTB4MDAwMDAwMjAKKyNkZWZpbmUgVE1JT0ZCX0FDQ19DTUdPX0NESFJWCTB4MDAwMDAwNDAKKyNkZWZpbmUgVE1JT0ZCX0FDQ19DTUdPX1JVTkQJMHgwMDAwODAwMAorI2RlZmluZSBUTUlPRkJfQUNDX1NDR08JCTB4MjEwMDAwMDAKKyNkZWZpbmUgVE1JT0ZCX0FDQ19TQ0dPX0NFTkQJMHgwMDAwMDAwMQorI2RlZmluZSBUTUlPRkJfQUNDX1NDR09fSU5UCTB4MDAwMDAwMDIKKyNkZWZpbmUgVE1JT0ZCX0FDQ19TQ0dPX1JPUDMJMHgwMDAwMDAwNAorI2RlZmluZSBUTUlPRkJfQUNDX1NDR09fVFJOUwkweDAwMDAwMDA4CisjZGVmaW5lIFRNSU9GQl9BQ0NfU0NHT19EVlJWCTB4MDAwMDAwMTAKKyNkZWZpbmUgVE1JT0ZCX0FDQ19TQ0dPX0RIUlYJMHgwMDAwMDAyMAorI2RlZmluZSBUTUlPRkJfQUNDX1NDR09fU1ZSVgkweDAwMDAwMDQwCisjZGVmaW5lIFRNSU9GQl9BQ0NfU0NHT19TSFJWCTB4MDAwMDAwODAKKyNkZWZpbmUgVE1JT0ZCX0FDQ19TQ0dPX0RTVFhZCTB4MDAwMDgwMDAKKyNkZWZpbmUgVE1JT0ZCX0FDQ19TQkdPCQkweDIyMDAwMDAwCisjZGVmaW5lIFRNSU9GQl9BQ0NfU0JHT19DRU5ECTB4MDAwMDAwMDEKKyNkZWZpbmUgVE1JT0ZCX0FDQ19TQkdPX0lOVAkweDAwMDAwMDAyCisjZGVmaW5lIFRNSU9GQl9BQ0NfU0JHT19EVlJWCTB4MDAwMDAwMTAKKyNkZWZpbmUgVE1JT0ZCX0FDQ19TQkdPX0RIUlYJMHgwMDAwMDAyMAorI2RlZmluZSBUTUlPRkJfQUNDX1NCR09fU1ZSVgkweDAwMDAwMDQwCisjZGVmaW5lIFRNSU9GQl9BQ0NfU0JHT19TSFJWCTB4MDAwMDAwODAKKyNkZWZpbmUgVE1JT0ZCX0FDQ19TQkdPX1NCTUQJMHgwMDAwMDEwMAorI2RlZmluZSBUTUlPRkJfQUNDX0ZMR08JCTB4MjMwMDAwMDAKKyNkZWZpbmUgVE1JT0ZCX0FDQ19GTEdPX0NFTkQJMHgwMDAwMDAwMQorI2RlZmluZSBUTUlPRkJfQUNDX0ZMR09fSU5UCTB4MDAwMDAwMDIKKyNkZWZpbmUgVE1JT0ZCX0FDQ19GTEdPX1JPUDMJMHgwMDAwMDAwNAorI2RlZmluZSBUTUlPRkJfQUNDX0xER08JCTB4MjQwMDAwMDAKKyNkZWZpbmUgVE1JT0ZCX0FDQ19MREdPX0NFTkQJMHgwMDAwMDAwMQorI2RlZmluZSBUTUlPRkJfQUNDX0xER09fSU5UCTB4MDAwMDAwMDIKKyNkZWZpbmUgVE1JT0ZCX0FDQ19MREdPX1JPUDMJMHgwMDAwMDAwNAorI2RlZmluZSBUTUlPRkJfQUNDX0xER09fRU5EUFgJMHgwMDAwMDAwOAorI2RlZmluZSBUTUlPRkJfQUNDX0xER09fTFZSVgkweDAwMDAwMDEwCisjZGVmaW5lIFRNSU9GQl9BQ0NfTERHT19MSFJWCTB4MDAwMDAwMjAKKyNkZWZpbmUgVE1JT0ZCX0FDQ19MREdPX0xETU9ECTB4MDAwMDAwNDAKKworLyogYSBGSUZPIGlzIGFsd2F5cyBhbGxvY2F0ZWQsIGV2ZW4gaWYgYWNjZWxlcmF0aW9uIGlzIG5vdCB1c2VkICovCisjZGVmaW5lIFRNSU9GQl9GSUZPX1NJWkUJNTEyCisKKy8qCisgKiBMQ0QgSG9zdCBDb250cm9sbGVyIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIKKyAqCisgKiBUaGlzIGlvbWVtIGFyZWEgc3VwcG9ydHMgb25seSAxNi1iaXQgSU8uCisgKi8KKyNkZWZpbmUgQ0NSX0NNRAkJCTB4MDQgLyogQ29tbWFuZAkJCQkqLworI2RlZmluZSBDQ1JfUkVWSUQJCTB4MDggLyogUmV2aXNpb24gSUQJCQkqLworI2RlZmluZSBDQ1JfQkFTRUwJCTB4MTAgLyogTENEIENvbnRyb2wgUmVnIEJhc2UgQWRkciBMb3cJKi8KKyNkZWZpbmUgQ0NSX0JBU0VICQkweDEyIC8qIExDRCBDb250cm9sIFJlZyBCYXNlIEFkZHIgSGlnaAkqLworI2RlZmluZSBDQ1JfVUdDQwkJMHg0MCAvKiBVbmlmaWVkIEdhdGVkIENsb2NrIENvbnRyb2wJKi8KKyNkZWZpbmUgQ0NSX0dDQwkJCTB4NDIgLyogR2F0ZWQgQ2xvY2sgQ29udHJvbAkJKi8KKyNkZWZpbmUgQ0NSX1VTQwkJCTB4NTAgLyogVW5pZmllZCBTb2Z0d2FyZSBDbGVhcgkJKi8KKyNkZWZpbmUgQ0NSX1ZSQU1SVEMJCTB4NjAgLyogVlJBTSBUaW1pbmcgQ29udHJvbAkJKi8KKwkJCQkvKiAweDYxIFZSQU0gUmVmcmVzaCBDb250cm9sCQkqLworI2RlZmluZSBDQ1JfVlJBTVNBQwkJMHg2MiAvKiBWUkFNIEFjY2VzcyBDb250cm9sCQkqLworCQkJCS8qIDB4NjMJVlJBTSBTdGF0dXMJCQkqLworI2RlZmluZSBDQ1JfVlJBTUJDCQkweDY0IC8qIFZSQU0gQmxvY2sgQ29udHJvbAkJKi8KKworLyoKKyAqIExDRCBDb250cm9sIFJlZ2lzdGVyCisgKgorICogVGhpcyBpb21lbSBhcmVhIHN1cHBvcnRzIG9ubHkgMTYtYml0IElPLgorICovCisjZGVmaW5lIExDUl9VSVMJCQkweDAwMCAvKiBVbmlmaWVkIEludGVycnVwdCBTdGF0dXMJKi8KKyNkZWZpbmUgTENSX1ZIUE4JCTB4MDA4IC8qIFZSQU0gSG9yaXpvbnRhbCBQaXhlbCBOdW1iZXIJKi8KKyNkZWZpbmUgTENSX0NGU0FMCQkweDAwYSAvKiBDb21tYW5kIEZJRk8gU3RhcnQgQWRkcmVzcyBMb3cJKi8KKyNkZWZpbmUgTENSX0NGU0FICQkweDAwYyAvKiBDb21tYW5kIEZJRk8gU3RhcnQgQWRkcmVzcyBIaWdoICovCisjZGVmaW5lIExDUl9DRlMJCQkweDAwZSAvKiBDb21tYW5kIEZJRk8gU2l6ZQkJKi8KKyNkZWZpbmUgTENSX0NGV1MJCTB4MDEwIC8qIENvbW1hbmQgRklGTyBXcml0ZWFibGUgU2l6ZQkqLworI2RlZmluZSBMQ1JfQkJJRQkJMHgwMTIgLyogQml0QkxUIEludGVycnVwdCBFbmFibGUJKi8KKyNkZWZpbmUgTENSX0JCSVNDCQkweDAxNCAvKiBCaXRCTFQgSW50ZXJydXB0IFN0YXR1cyBhbmQgQ2xlYXIgKi8KKyNkZWZpbmUgTENSX0NDUwkJCTB4MDE2IC8qIENvbW1hbmQgQ291bnQgU3RhdHVzCQkqLworI2RlZmluZSBMQ1JfQkJFUwkJMHgwMTggLyogQml0QkxUIEV4ZWN1dGlvbiBTdGF0dXMJKi8KKyNkZWZpbmUgTENSX0NNREwJCTB4MDFjIC8qIENvbW1hbmQgTG93CQkJKi8KKyNkZWZpbmUgTENSX0NNREgJCTB4MDFlIC8qIENvbW1hbmQgSGlnaAkJCSovCisjZGVmaW5lIExDUl9DRkMJCQkweDAyMiAvKiBDb21tYW5kIEZJRk8gQ2xlYXIJCSovCisjZGVmaW5lIExDUl9DQ0lGQwkJMHgwMjQgLyogQ01PUyBDYW1lcmEgSUYgQ29udHJvbAkJKi8KKyNkZWZpbmUgTENSX0hXVAkJCTB4MDI2IC8qIEhhcmR3YXJlIFRlc3QJCQkqLworI2RlZmluZSBMQ1JfTENEQ0NSQwkJMHgxMDAgLyogTENEQyBDbG9jayBhbmQgUmVzZXQgQ29udHJvbAkqLworI2RlZmluZSBMQ1JfTENEQ0MJCTB4MTAyIC8qIExDREMgQ29udHJvbAkJCSovCisjZGVmaW5lIExDUl9MQ0RDT1BDCQkweDEwNCAvKiBMQ0RDIE91dHB1dCBQaW4gQ29udHJvbAkqLworI2RlZmluZSBMQ1JfTENESVMJCTB4MTA4IC8qIExDRCBJbnRlcnJ1cHQgU3RhdHVzCQkqLworI2RlZmluZSBMQ1JfTENESU0JCTB4MTBhIC8qIExDRCBJbnRlcnJ1cHQgTWFzawkJKi8KKyNkZWZpbmUgTENSX0xDRElFCQkweDEwYyAvKiBMQ0QgSW50ZXJydXB0IEVuYWJsZQkJKi8KKyNkZWZpbmUgTENSX0dEU0FMCQkweDEyMiAvKiBHcmFwaGljcyBEaXNwbGF5IFN0YXJ0IEFkZHJlc3MgTG93ICovCisjZGVmaW5lIExDUl9HRFNBSAkJMHgxMjQgLyogR3JhcGhpY3MgRGlzcGxheSBTdGFydCBBZGRyZXNzIEhpZ2ggKi8KKyNkZWZpbmUgTENSX1ZIUENMCQkweDEyYSAvKiBWUkFNIEhvcml6b250YWwgUGl4ZWwgQ291bnQgTG93ICovCisjZGVmaW5lIExDUl9WSFBDSAkJMHgxMmMgLyogVlJBTSBIb3Jpem9udGFsIFBpeGVsIENvdW50IEhpZ2ggKi8KKyNkZWZpbmUgTENSX0dNCQkJMHgxMmUgLyogR3JhcGhpYyBNb2RlKFZSQU0gYWNjZXNzIGVuYWJsZSkgKi8KKyNkZWZpbmUgTENSX0hUCQkJMHgxNDAgLyogSG9yaXpvbnRhbCBUb3RhbAkJKi8KKyNkZWZpbmUgTENSX0hEUwkJCTB4MTQyIC8qIEhvcml6b250YWwgRGlzcGxheSBTdGFydAkqLworI2RlZmluZSBMQ1JfSFNTCQkJMHgxNDQgLyogSC1TeW5jIFN0YXJ0CQkJKi8KKyNkZWZpbmUgTENSX0hTRQkJCTB4MTQ2IC8qIEgtU3luYyBFbmQJCQkqLworI2RlZmluZSBMQ1JfSE5QCQkJMHgxNGMgLyogSG9yaXpvbnRhbCBOdW1iZXIgb2YgUGl4ZWxzCSovCisjZGVmaW5lIExDUl9WVAkJCTB4MTUwIC8qIFZlcnRpY2FsIFRvdGFsCQkJKi8KKyNkZWZpbmUgTENSX1ZEUwkJCTB4MTUyIC8qIFZlcnRpY2FsIERpc3BsYXkgU3RhcnQJCSovCisjZGVmaW5lIExDUl9WU1MJCQkweDE1NCAvKiBWLVN5bmMgU3RhcnQJCQkqLworI2RlZmluZSBMQ1JfVlNFCQkJMHgxNTYgLyogVi1TeW5jIEVuZAkJCSovCisjZGVmaW5lIExDUl9DRExOCQkweDE2MCAvKiBDdXJyZW50IERpc3BsYXkgTGluZSBOdW1iZXIJKi8KKyNkZWZpbmUgTENSX0lMTgkJCTB4MTYyIC8qIEludGVycnVwdCBMaW5lIE51bWJlcgkJKi8KKyNkZWZpbmUgTENSX1NQCQkJMHgxNjQgLyogU3luYyBQb2xhcml0eQkJCSovCisjZGVmaW5lIExDUl9NSVNDCQkweDE2NiAvKiBNSVNDKFJHQjU2NSBtb2RlKQkJKi8KKyNkZWZpbmUgTENSX1ZJSFNTCQkweDE2YSAvKiBWaWRlbyBJbnRlcmZhY2UgSC1TeW5jIFN0YXJ0CSovCisjZGVmaW5lIExDUl9WSVZTCQkweDE2YyAvKiBWaWRlbyBJbnRlcmZhY2UgVmVydGljYWwgU3RhcnQJKi8KKyNkZWZpbmUgTENSX1ZJVkUJCTB4MTZlIC8qIFZpZGVvIEludGVyZmFjZSBWZXJ0aWNhbCBFbmQJKi8KKyNkZWZpbmUgTENSX1ZJVlNTCQkweDE3MCAvKiBWaWRlbyBJbnRlcmZhY2UgVi1TeW5jIFN0YXJ0CSovCisjZGVmaW5lIExDUl9WQ0NJUwkJMHgxN2UgLyogVmlkZW8gLyBDTU9TIENhbWVyYSBJbnRlcmZhY2UgU2VsZWN0ICovCisjZGVmaW5lIExDUl9WSURXU0FMCQkweDE4MCAvKiBWSSBEYXRhIFdyaXRlIFN0YXJ0IEFkZHJlc3MgTG93ICovCisjZGVmaW5lIExDUl9WSURXU0FICQkweDE4MiAvKiBWSSBEYXRhIFdyaXRlIFN0YXJ0IEFkZHJlc3MgSGlnaCAqLworI2RlZmluZSBMQ1JfVklEUlNBTAkJMHgxODQgLyogVkkgRGF0YSBSZWFkIFN0YXJ0IEFkZHJlc3MgTG93CSovCisjZGVmaW5lIExDUl9WSURSU0FICQkweDE4NiAvKiBWSSBEYXRhIFJlYWQgU3RhcnQgQWRkcmVzcyBIaWdoICovCisjZGVmaW5lIExDUl9WSVBERFNUCQkweDE4OCAvKiBWSSBQaWN0dXJlIERhdGEgRGlzcGxheSBTdGFydCBUaW1pbmcgKi8KKyNkZWZpbmUgTENSX1ZJUERERVQJCTB4MTg2IC8qIFZJIFBpY3R1cmUgRGF0YSBEaXNwbGF5IEVuZCBUaW1pbmcgKi8KKyNkZWZpbmUgTENSX1ZJRQkJCTB4MThjIC8qIFZpZGVvIEludGVyZmFjZSBFbmFibGUJCSovCisjZGVmaW5lIExDUl9WQ1MJCQkweDE4ZSAvKiBWaWRlby9DYW1lcmEgU2VsZWN0CQkqLworI2RlZmluZSBMQ1JfVlBIV0MJCTB4MTk0IC8qIFZpZGVvIFBpY3R1cmUgSG9yaXpvbnRhbCBXYWl0IENvdW50ICovCisjZGVmaW5lIExDUl9WUEhTCQkweDE5NiAvKiBWaWRlbyBQaWN0dXJlIEhvcml6b250YWwgU2l6ZQkqLworI2RlZmluZSBMQ1JfVlBWV0MJCTB4MTk4IC8qIFZpZGVvIFBpY3R1cmUgVmVydGljYWwgV2FpdCBDb3VudCAqLworI2RlZmluZSBMQ1JfVlBWUwkJMHgxOWEgLyogVmlkZW8gUGljdHVyZSBWZXJ0aWNhbCBTaXplCSovCisjZGVmaW5lIExDUl9QTEhQSVgJCTB4MWEwIC8qIFBMSFBJWAkJCQkqLworI2RlZmluZSBMQ1JfWFMJCQkweDFhMiAvKiBYU3RhcnQJCQkJKi8KKyNkZWZpbmUgTENSX1hDS0hXCQkweDFhNCAvKiBYQ0sgSGlnaCBXaWR0aAkJCSovCisjZGVmaW5lIExDUl9TVEhTCQkweDFhOCAvKiBTVEggU3RhcnQJCQkqLworI2RlZmluZSBMQ1JfVlQyCQkJMHgxYWEgLyogVmVydGljYWwgVG90YWwJCQkqLworI2RlZmluZSBMQ1JfWUNLU1cJCTB4MWFjIC8qIFlDSyBTdGFydCBXYWl0CQkJKi8KKyNkZWZpbmUgTENSX1lTVFMJCTB4MWFlIC8qIFlTVCBTdGFydAkJCSovCisjZGVmaW5lIExDUl9QUE9MUwkJMHgxYjAgLyogI1BQT0wgU3RhcnQJCQkqLworI2RlZmluZSBMQ1JfUFJFQ1cJCTB4MWIyIC8qIFBSRUMgV2lkdGgJCQkqLworI2RlZmluZSBMQ1JfVkNMS0hXCQkweDFiNCAvKiBWQ0xLIEhpZ2ggV2lkdGgJCSovCisjZGVmaW5lIExDUl9PQwkJCTB4MWI2IC8qIE91dHB1dCBDb250cm9sCQkJKi8KKworc3RhdGljIGNoYXIgKm1vZGVfb3B0aW9uIF9fZGV2aW5pdGRhdGE7CisKK3N0cnVjdCB0bWlvZmJfcGFyIHsKKwl1MzIJCQkJcHNldWRvX3BhbGV0dGVbMTZdOworCisjaWZkZWYgQ09ORklHX0ZCX1RNSU9fQUNDRUxMCisJd2FpdF9xdWV1ZV9oZWFkX3QJCXdhaXRfYWNjOworCWJvb2wJCQkJdXNlX3BvbGxpbmc7CisjZW5kaWYKKworCXZvaWQgX19pb21lbQkJCSpjY3I7CisJdm9pZCBfX2lvbWVtCQkJKmxjcjsKK307CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKgorICogcmVhc29ucyBmb3IgYW4gaW50ZXJydXB0OgorICoJdWlzCWJiaXNjCWxjZGlzCisgKgkwMTAwCTAwMDEJYWNjZWxlcmF0b3IgY29tbWFuZCBjb21wbGV0ZWQKKyAqIAkyMDAwCTAwMDEJdnN5bmMgc3RhcnQKKyAqIAkyMDAwCTAwMDIJZGlzcGxheSBzdGFydAorICogCTIwMDAJMDAwNAlsaW5lIG51bWJlciBtYXRjaCgweDFmZiBtYXNrPz8/KQorICovCitzdGF0aWMgaXJxcmV0dXJuX3QgdG1pb2ZiX2lycShpbnQgaXJxLCB2b2lkICpfX2luZm8pCit7CisJc3RydWN0IGZiX2luZm8gKmluZm8gPSBfX2luZm87CisJc3RydWN0IHRtaW9mYl9wYXIgKnBhciA9IGluZm8tPnBhcjsKKwl1bnNpZ25lZCBpbnQgYmJpc2MgPSB0bWlvX2lvcmVhZDE2KHBhci0+bGNyICsgTENSX0JCSVNDKTsKKworCisJLyoKKwkgKiBXZSB3ZXJlIGluIHBvbGxpbmcgbW9kZSBhbmQgbm93IHdlIGdvdCBjb3JyZWN0IGlycS4KKwkgKiBTd2l0Y2ggYmFjayB0byBJUlEtYmFzZWQgc3luYyBvZiBjb21tYW5kIEZJRk8KKwkgKi8KKwlpZiAodW5saWtlbHkocGFyLT51c2VfcG9sbGluZyAmJiBpcnEgIT0gLTEpKSB7CisJCXByaW50ayhLRVJOX0lORk8gInRtaW9mYjogc3dpdGNoaW5nIHRvIHdhaXRxXG4iKTsKKwkJcGFyLT51c2VfcG9sbGluZyA9IGZhbHNlOworCX0KKworCXRtaW9faW93cml0ZTE2KGJiaXNjLCBwYXItPmxjciArIExDUl9CQklTQyk7CisKKyNpZmRlZiBDT05GSUdfRkJfVE1JT19BQ0NFTEwKKwlpZiAoYmJpc2MgJiAxKQorCQl3YWtlX3VwKCZwYXItPndhaXRfYWNjKTsKKyNlbmRpZgorCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisKKy8qCisgKiBUdXJucyBvZmYgdGhlIExDRCBjb250cm9sbGVyIGFuZCBMQ0QgaG9zdCBjb250cm9sbGVyLgorICovCitzdGF0aWMgaW50IHRtaW9mYl9od19zdG9wKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgbWZkX2NlbGwgKmNlbGwgPSBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOworCXN0cnVjdCB0bWlvX2ZiX2RhdGEgKmRhdGEgPSBjZWxsLT5kcml2ZXJfZGF0YTsKKwlzdHJ1Y3QgZmJfaW5mbyAqaW5mbyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IHRtaW9mYl9wYXIgKnBhciA9IGluZm8tPnBhcjsKKworCXRtaW9faW93cml0ZTE2KDAsIHBhci0+Y2NyICsgQ0NSX1VHQ0MpOworCXRtaW9faW93cml0ZTE2KDAsIHBhci0+bGNyICsgTENSX0dNKTsKKwlkYXRhLT5sY2Rfc2V0X3Bvd2VyKGRldiwgMCk7CisJdG1pb19pb3dyaXRlMTYoMHgwMDEwLCBwYXItPmxjciArIExDUl9MQ0RDQ1JDKTsKKworCXJldHVybiAwOworfQorCisvKgorICogSW5pdGlhbGl6ZXMgdGhlIExDRCBob3N0IGNvbnRyb2xsZXIuCisgKi8KK3N0YXRpYyBpbnQgdG1pb2ZiX2h3X2luaXQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQoreworCXN0cnVjdCBtZmRfY2VsbCAqY2VsbCA9IGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJc3RydWN0IGZiX2luZm8gKmluZm8gPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCB0bWlvZmJfcGFyICpwYXIgPSBpbmZvLT5wYXI7CisJY29uc3Qgc3RydWN0IHJlc291cmNlICpubGNyID0gJmNlbGwtPnJlc291cmNlc1swXTsKKwljb25zdCBzdHJ1Y3QgcmVzb3VyY2UgKnZyYW0gPSAmY2VsbC0+cmVzb3VyY2VzWzJdOworCXVuc2lnbmVkIGxvbmcgYmFzZTsKKworCWlmIChubGNyID09IE5VTEwgfHwgdnJhbSA9PSBOVUxMKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWJhc2UgPSBubGNyLT5zdGFydDsKKworCXRtaW9faW93cml0ZTE2KDB4MDAzYSwgcGFyLT5jY3IgKyBDQ1JfVUdDQyk7CisJdG1pb19pb3dyaXRlMTYoMHgwMDNhLCBwYXItPmNjciArIENDUl9HQ0MpOworCXRtaW9faW93cml0ZTE2KDB4M2YwMCwgcGFyLT5jY3IgKyBDQ1JfVVNDKTsKKworCW1zbGVlcCgyKTsgLyogd2FpdCBmb3IgZGV2aWNlIHRvIHNldHRsZSAqLworCisJdG1pb19pb3dyaXRlMTYoMHgwMDAwLCBwYXItPmNjciArIENDUl9VU0MpOworCXRtaW9faW93cml0ZTE2KGJhc2UgPj4gMTYsIHBhci0+Y2NyICsgQ0NSX0JBU0VIKTsKKwl0bWlvX2lvd3JpdGUxNihiYXNlLCBwYXItPmNjciArIENDUl9CQVNFTCk7CisJdG1pb19pb3dyaXRlMTYoMHgwMDAyLCBwYXItPmNjciArIENDUl9DTUQpOyAvKiBiYXNlIGFkZHJlc3MgZW5hYmxlICovCisJdG1pb19pb3dyaXRlMTYoMHg0MGE4LCBwYXItPmNjciArIENDUl9WUkFNUlRDKTsgLyogVlJBTVJDLCBWUkFNVEMgKi8KKwl0bWlvX2lvd3JpdGUxNigweDAwMTgsIHBhci0+Y2NyICsgQ0NSX1ZSQU1TQUMpOyAvKiBWUkFNU1RTLCBWUkFNQUMgKi8KKwl0bWlvX2lvd3JpdGUxNigweDAwMDIsIHBhci0+Y2NyICsgQ0NSX1ZSQU1CQyk7CisJbXNsZWVwKDIpOyAvKiB3YWl0IGZvciBkZXZpY2UgdG8gc2V0dGxlICovCisJdG1pb19pb3dyaXRlMTYoMHgwMDBiLCBwYXItPmNjciArIENDUl9WUkFNQkMpOworCisJYmFzZSA9IHZyYW0tPnN0YXJ0ICsgaW5mby0+c2NyZWVuX3NpemU7CisJdG1pb19pb3dyaXRlMTYoYmFzZSA+PiAxNiwgcGFyLT5sY3IgKyBMQ1JfQ0ZTQUgpOworCXRtaW9faW93cml0ZTE2KGJhc2UsIHBhci0+bGNyICsgTENSX0NGU0FMKTsKKwl0bWlvX2lvd3JpdGUxNihUTUlPRkJfRklGT19TSVpFIC0gMSwgcGFyLT5sY3IgKyBMQ1JfQ0ZTKTsKKwl0bWlvX2lvd3JpdGUxNigxLCBwYXItPmxjciArIExDUl9DRkMpOworCXRtaW9faW93cml0ZTE2KDEsIHBhci0+bGNyICsgTENSX0JCSUUpOworCXRtaW9faW93cml0ZTE2KDAsIHBhci0+bGNyICsgTENSX0NGV1MpOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBTZXRzIHRoZSBMQ0QgY29udHJvbGxlcidzIG91dHB1dCByZXNvbHV0aW9uIGFuZCBwaXhlbCBjbG9jaworICovCitzdGF0aWMgdm9pZCB0bWlvZmJfaHdfbW9kZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCit7CisJc3RydWN0IG1mZF9jZWxsICpjZWxsID0gZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKKwlzdHJ1Y3QgdG1pb19mYl9kYXRhICpkYXRhID0gY2VsbC0+ZHJpdmVyX2RhdGE7CisJc3RydWN0IGZiX2luZm8gKmluZm8gPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBmYl92aWRlb21vZGUgKm1vZGUgPSBpbmZvLT5tb2RlOworCXN0cnVjdCB0bWlvZmJfcGFyICpwYXIgPSBpbmZvLT5wYXI7CisJdW5zaWduZWQgaW50IGk7CisKKwl0bWlvX2lvd3JpdGUxNigwLCBwYXItPmxjciArIExDUl9HTSk7CisJZGF0YS0+bGNkX3NldF9wb3dlcihkZXYsIDApOworCXRtaW9faW93cml0ZTE2KDB4MDAxMCwgcGFyLT5sY3IgKyBMQ1JfTENEQ0NSQyk7CisJZGF0YS0+bGNkX21vZGUoZGV2LCBtb2RlKTsKKwlkYXRhLT5sY2Rfc2V0X3Bvd2VyKGRldiwgMSk7CisKKwl0bWlvX2lvd3JpdGUxNihpbmZvLT5maXgubGluZV9sZW5ndGgsIHBhci0+bGNyICsgTENSX1ZIUE4pOworCXRtaW9faW93cml0ZTE2KDAsIHBhci0+bGNyICsgTENSX0dEU0FIKTsKKwl0bWlvX2lvd3JpdGUxNigwLCBwYXItPmxjciArIExDUl9HRFNBTCk7CisJdG1pb19pb3dyaXRlMTYoaW5mby0+Zml4LmxpbmVfbGVuZ3RoID4+IDE2LCBwYXItPmxjciArIExDUl9WSFBDSCk7CisJdG1pb19pb3dyaXRlMTYoaW5mby0+Zml4LmxpbmVfbGVuZ3RoLCBwYXItPmxjciArIExDUl9WSFBDTCk7CisJdG1pb19pb3dyaXRlMTYoaSA9IDAsIHBhci0+bGNyICsgTENSX0hTUyk7CisJdG1pb19pb3dyaXRlMTYoaSArPSBtb2RlLT5oc3luY19sZW4sIHBhci0+bGNyICsgTENSX0hTRSk7CisJdG1pb19pb3dyaXRlMTYoaSArPSBtb2RlLT5sZWZ0X21hcmdpbiwgcGFyLT5sY3IgKyBMQ1JfSERTKTsKKwl0bWlvX2lvd3JpdGUxNihpICs9IG1vZGUtPnhyZXMgKyBtb2RlLT5yaWdodF9tYXJnaW4sIHBhci0+bGNyICsgTENSX0hUKTsKKwl0bWlvX2lvd3JpdGUxNihtb2RlLT54cmVzLCBwYXItPmxjciArIExDUl9ITlApOworCXRtaW9faW93cml0ZTE2KGkgPSAwLCBwYXItPmxjciArIExDUl9WU1MpOworCXRtaW9faW93cml0ZTE2KGkgKz0gbW9kZS0+dnN5bmNfbGVuLCBwYXItPmxjciArIExDUl9WU0UpOworCXRtaW9faW93cml0ZTE2KGkgKz0gbW9kZS0+dXBwZXJfbWFyZ2luLCBwYXItPmxjciArIExDUl9WRFMpOworCXRtaW9faW93cml0ZTE2KGkgKz0gbW9kZS0+eXJlcywgcGFyLT5sY3IgKyBMQ1JfSUxOKTsKKwl0bWlvX2lvd3JpdGUxNihpICs9IG1vZGUtPmxvd2VyX21hcmdpbiwgcGFyLT5sY3IgKyBMQ1JfVlQpOworCXRtaW9faW93cml0ZTE2KDMsIHBhci0+bGNyICsgTENSX01JU0MpOyAvKiBSR0I1NjUgbW9kZSAqLworCXRtaW9faW93cml0ZTE2KDEsIHBhci0+bGNyICsgTENSX0dNKTsgLyogVlJBTSBlbmFibGUgKi8KKwl0bWlvX2lvd3JpdGUxNigweDQwMDcsIHBhci0+bGNyICsgTENSX0xDRENDKTsKKwl0bWlvX2lvd3JpdGUxNigzLCBwYXItPmxjciArIExDUl9TUCk7ICAvKiBzeW5jIHBvbGFyaXR5ICovCisKKwl0bWlvX2lvd3JpdGUxNigweDAwMTAsIHBhci0+bGNyICsgTENSX0xDRENDUkMpOworCW1zbGVlcCg1KTsgLyogd2FpdCBmb3IgZGV2aWNlIHRvIHNldHRsZSAqLworCXRtaW9faW93cml0ZTE2KDB4MDAxNCwgcGFyLT5sY3IgKyBMQ1JfTENEQ0NSQyk7IC8qIFNUT1BfQ0tQICovCisJbXNsZWVwKDUpOyAvKiB3YWl0IGZvciBkZXZpY2UgdG8gc2V0dGxlICovCisJdG1pb19pb3dyaXRlMTYoMHgwMDE1LCBwYXItPmxjciArIExDUl9MQ0RDQ1JDKTsgLyogU1RPUF9DS1B8U09GVF9SRVNFVCovCisJdG1pb19pb3dyaXRlMTYoMHhmZmZhLCBwYXItPmxjciArIExDUl9WQ1MpOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworI2lmZGVmIENPTkZJR19GQl9UTUlPX0FDQ0VMTAorc3RhdGljIGludCBfX211c3RfY2hlY2sKK3RtaW9mYl9hY2Nfd2FpdChzdHJ1Y3QgZmJfaW5mbyAqaW5mbywgdW5zaWduZWQgaW50IGNjcykKK3sKKwlzdHJ1Y3QgdG1pb2ZiX3BhciAqcGFyID0gaW5mby0+cGFyOworCS8qCisJICogVGhpcyBjb2RlIGNhbiBiZSBjYWxsZWQgd2hpdGggaW50ZXJydXB0cyBkaXNhYmxlZC4KKwkgKiBTbyBpbnN0ZWFkIG9mIHJlbGF5aW5nIG9uIGlycSB0byB0cmlnZ2VyIHRoZSBldmVudCwKKwkgKiBwb2xsIHRoZSBzdGF0ZSB0aWxsIHRoZSBuZWNlc3NhcnkgY29tbWFuZCBpcyBleGVjdXRlZC4KKwkgKi8KKwlpZiAoaXJxc19kaXNhYmxlZCgpIHx8IHBhci0+dXNlX3BvbGxpbmcpIHsKKwkJaW50IGkgPSAwOworCQl3aGlsZSAodG1pb19pb3JlYWQxNihwYXItPmxjciArIExDUl9DQ1MpID4gY2NzKSB7CisJCQl1ZGVsYXkoMSk7CisJCQlpKys7CisJCQlpZiAoaSA+IDEwMDAwKSB7CisJCQkJcHJfZXJyKCJ0bWlvZmI6IHRpbWVvdXQgd2FpdGluZyBmb3IgJWRcbiIsCisJCQkJCQljY3MpOworCQkJCXJldHVybiAtRVRJTUVET1VUOworCQkJfQorCQkJdG1pb2ZiX2lycSgtMSwgaW5mbyk7CisJCX0KKwl9IGVsc2UgeworCQlpZiAoIXdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV90aW1lb3V0KHBhci0+d2FpdF9hY2MsCisJCQkJdG1pb19pb3JlYWQxNihwYXItPmxjciArIExDUl9DQ1MpIDw9IGNjcywKKwkJCQkxMDAwKSkgeworCQkJcHJfZXJyKCJ0bWlvZmI6IHRpbWVvdXQgd2FpdGluZyBmb3IgJWRcbiIsIGNjcyk7CisJCQlyZXR1cm4gLUVUSU1FRE9VVDsKKwkJfQorCX0KKworCXJldHVybiAwOworfQorCisvKgorICogV3JpdGVzIGFuIGFjY2VsZXJhdG9yIGNvbW1hbmQgdG8gdGhlIGFjY2VsZXJhdG9yJ3MgRklGTy4KKyAqLworc3RhdGljIGludAordG1pb2ZiX2FjY193cml0ZShzdHJ1Y3QgZmJfaW5mbyAqaW5mbywgY29uc3QgdTMyICpjbWQsIHVuc2lnbmVkIGludCBjb3VudCkKK3sKKwlzdHJ1Y3QgdG1pb2ZiX3BhciAqcGFyID0gaW5mby0+cGFyOworCWludCByZXQ7CisKKwlyZXQgPSB0bWlvZmJfYWNjX3dhaXQoaW5mbywgVE1JT0ZCX0ZJRk9fU0laRSAtIGNvdW50KTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJZm9yICg7IGNvdW50OyBjb3VudC0tLCBjbWQrKykgeworCQl0bWlvX2lvd3JpdGUxNigqY21kID4+IDE2LCBwYXItPmxjciArIExDUl9DTURIKTsKKwkJdG1pb19pb3dyaXRlMTYoKmNtZCwgcGFyLT5sY3IgKyBMQ1JfQ01ETCk7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIFdhaXQgZm9yIHRoZSBhY2NlbGVyYXRvciB0byBmaW5pc2ggaXRzIG9wZXJhdGlvbnMgYmVmb3JlIHdyaXRpbmcKKyAqIHRvIHRoZSBmcmFtZWJ1ZmZlciBmb3IgY29uc2lzdGVudCBkaXNwbGF5IG91dHB1dC4KKyAqLworc3RhdGljIGludCB0bWlvZmJfc3luYyhzdHJ1Y3QgZmJfaW5mbyAqZmJpKQoreworCXN0cnVjdCB0bWlvZmJfcGFyICpwYXIgPSBmYmktPnBhcjsKKworCWludCByZXQ7CisJaW50IGkgPSAwOworCisJcmV0ID0gdG1pb2ZiX2FjY193YWl0KGZiaSwgMCk7CisKKwl3aGlsZSAodG1pb19pb3JlYWQxNihwYXItPmxjciArIExDUl9CQkVTKSAmIDIpIHsgLyogYmxpdCBhY3RpdmUgKi8KKwkJdWRlbGF5KDEpOworCQlpKysgOworCQlpZiAoaSA+IDEwMDAwKSB7CisJCQlwcmludGsoS0VSTl9FUlIgInRpbWVvdXQgd2FpdGluZyBmb3IgYmxpdCB0byBlbmQhXG4iKTsKKwkJCXJldHVybiAtRVRJTUVET1VUOworCQl9CisJfQorCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQKK3RtaW9mYl9maWxscmVjdChzdHJ1Y3QgZmJfaW5mbyAqZmJpLCBjb25zdCBzdHJ1Y3QgZmJfZmlsbHJlY3QgKnJlY3QpCit7CisJY29uc3QgdTMyIGNtZFtdID0geworCQlUTUlPRkJfQUNDX0RTQURSKChyZWN0LT5keSAqIGZiaS0+bW9kZS0+eHJlcyArIHJlY3QtPmR4KSAqIDIpLAorCQlUTUlPRkJfQUNDX0RIUElYKHJlY3QtPndpZHRoIC0gMSksCisJCVRNSU9GQl9BQ0NfRFZQSVgocmVjdC0+aGVpZ2h0IC0gMSksCisJCVRNSU9GQl9BQ0NfRklMTChyZWN0LT5jb2xvciksCisJCVRNSU9GQl9BQ0NfRkxHTywKKwl9OworCisJaWYgKGZiaS0+c3RhdGUgIT0gRkJJTkZPX1NUQVRFX1JVTk5JTkcgfHwKKwkgICAgZmJpLT5mbGFncyAmIEZCSU5GT19IV0FDQ0VMX0RJU0FCTEVEKSB7CisJCWNmYl9maWxscmVjdChmYmksIHJlY3QpOworCQlyZXR1cm47CisJfQorCisJdG1pb2ZiX2FjY193cml0ZShmYmksIGNtZCwgQVJSQVlfU0laRShjbWQpKTsKK30KKworc3RhdGljIHZvaWQKK3RtaW9mYl9jb3B5YXJlYShzdHJ1Y3QgZmJfaW5mbyAqZmJpLCBjb25zdCBzdHJ1Y3QgZmJfY29weWFyZWEgKmFyZWEpCit7CisJY29uc3QgdTMyIGNtZFtdID0geworCQlUTUlPRkJfQUNDX0RTQURSKChhcmVhLT5keSAqIGZiaS0+bW9kZS0+eHJlcyArIGFyZWEtPmR4KSAqIDIpLAorCQlUTUlPRkJfQUNDX0RIUElYKGFyZWEtPndpZHRoIC0gMSksCisJCVRNSU9GQl9BQ0NfRFZQSVgoYXJlYS0+aGVpZ2h0IC0gMSksCisJCVRNSU9GQl9BQ0NfU1NBRFIoKGFyZWEtPnN5ICogZmJpLT5tb2RlLT54cmVzICsgYXJlYS0+c3gpICogMiksCisJCVRNSU9GQl9BQ0NfU0NHTywKKwl9OworCisJaWYgKGZiaS0+c3RhdGUgIT0gRkJJTkZPX1NUQVRFX1JVTk5JTkcgfHwKKwkgICAgZmJpLT5mbGFncyAmIEZCSU5GT19IV0FDQ0VMX0RJU0FCTEVEKSB7CisJCWNmYl9jb3B5YXJlYShmYmksIGFyZWEpOworCQlyZXR1cm47CisJfQorCisJdG1pb2ZiX2FjY193cml0ZShmYmksIGNtZCwgQVJSQVlfU0laRShjbWQpKTsKK30KKyNlbmRpZgorCitzdGF0aWMgdm9pZCB0bWlvZmJfY2xlYXJzY3JlZW4oc3RydWN0IGZiX2luZm8gKmluZm8pCit7CisJY29uc3Qgc3RydWN0IGZiX2ZpbGxyZWN0IHJlY3QgPSB7CisJCS5keAk9IDAsCisJCS5keQk9IDAsCisJCS53aWR0aAk9IGluZm8tPm1vZGUtPnhyZXMsCisJCS5oZWlnaHQJPSBpbmZvLT5tb2RlLT55cmVzLAorCQkuY29sb3IJPSAwLAorCQkucm9wCT0gUk9QX0NPUFksCisJfTsKKworCWluZm8tPmZib3BzLT5mYl9maWxscmVjdChpbmZvLCAmcmVjdCk7Cit9CisKK3N0YXRpYyBpbnQgdG1pb2ZiX3ZibGFuayhzdHJ1Y3QgZmJfaW5mbyAqZmJpLCBzdHJ1Y3QgZmJfdmJsYW5rICp2YmxhbmspCit7CisJc3RydWN0IHRtaW9mYl9wYXIgKnBhciA9IGZiaS0+cGFyOworCXN0cnVjdCBmYl92aWRlb21vZGUgKm1vZGUgPSBmYmktPm1vZGU7CisJdW5zaWduZWQgaW50IHZjb3VudCA9IHRtaW9faW9yZWFkMTYocGFyLT5sY3IgKyBMQ1JfQ0RMTik7CisJdW5zaWduZWQgaW50IHZkcyA9IG1vZGUtPnZzeW5jX2xlbiArIG1vZGUtPnVwcGVyX21hcmdpbjsKKworCXZibGFuay0+dmNvdW50ID0gdmNvdW50OworCXZibGFuay0+ZmxhZ3MgPSBGQl9WQkxBTktfSEFWRV9WQkxBTksgfCBGQl9WQkxBTktfSEFWRV9WQ09VTlQKKwkJCQkJCXwgRkJfVkJMQU5LX0hBVkVfVlNZTkM7CisKKwlpZiAodmNvdW50IDwgbW9kZS0+dnN5bmNfbGVuKQorCQl2YmxhbmstPmZsYWdzIHw9IEZCX1ZCTEFOS19WU1lOQ0lORzsKKworCWlmICh2Y291bnQgPCB2ZHMgfHwgdmNvdW50ID4gdmRzICsgbW9kZS0+eXJlcykKKwkJdmJsYW5rLT5mbGFncyB8PSBGQl9WQkxBTktfVkJMQU5LSU5HOworCisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIGludCB0bWlvZmJfaW9jdGwoc3RydWN0IGZiX2luZm8gKmZiaSwKKwkJdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCit7CisJc3dpdGNoIChjbWQpIHsKKwljYXNlIEZCSU9HRVRfVkJMQU5LOiB7CisJCXN0cnVjdCBmYl92YmxhbmsgdmJsYW5rID0gezB9OworCQl2b2lkIF9fdXNlciAqYXJncCA9ICh2b2lkIF9fdXNlciAqKSBhcmc7CisKKwkJdG1pb2ZiX3ZibGFuayhmYmksICZ2YmxhbmspOworCQlpZiAoY29weV90b191c2VyKGFyZ3AsICZ2YmxhbmssIHNpemVvZiB2YmxhbmspKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisJCXJldHVybiAwOworCX0KKworI2lmZGVmIENPTkZJR19GQl9UTUlPX0FDQ0VMTAorCWNhc2UgRkJJT19UTUlPX0FDQ19TWU5DOgorCQl0bWlvZmJfc3luYyhmYmkpOworCQlyZXR1cm4gMDsKKworCWNhc2UgRkJJT19UTUlPX0FDQ19XUklURTogeworCQl1MzIgX191c2VyICphcmdwID0gKHZvaWQgX191c2VyICopIGFyZzsKKwkJdTMyIGxlbjsKKwkJdTMyIGFjY1sxNl07CisKKwkJaWYgKGdldF91c2VyKGxlbiwgYXJncCkpCisJCQlyZXR1cm4gLUVGQVVMVDsKKwkJaWYgKGxlbiA+IEFSUkFZX1NJWkUoYWNjKSkKKwkJCXJldHVybiAtRUlOVkFMOworCQlpZiAoY29weV9mcm9tX3VzZXIoYWNjLCBhcmdwICsgMSwgc2l6ZW9mKHUzMikgKiBsZW4pKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisKKwkJcmV0dXJuIHRtaW9mYl9hY2Nfd3JpdGUoZmJpLCBhY2MsIGxlbik7CisJfQorI2VuZGlmCisJfQorCisJcmV0dXJuIC1FTk9UVFk7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiBTZWxlY3QgdGhlIHNtYWxsZXN0IG1vZGUgdGhhdCBhbGxvd3MgdGhlIGRlc2lyZWQgcmVzb2x1dGlvbiB0byBiZQorICogZGlzcGxheWVkLiAgSWYgZGVzaXJlZCwgdGhlIHggYW5kIHkgcGFyYW1ldGVycyBjYW4gYmUgcm91bmRlZCB1cCB0bworICogbWF0Y2ggdGhlIHNlbGVjdGVkIG1vZGUuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgZmJfdmlkZW9tb2RlICoKK3RtaW9mYl9maW5kX21vZGUoc3RydWN0IGZiX2luZm8gKmluZm8sIHN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyAqdmFyKQoreworCXN0cnVjdCBtZmRfY2VsbCAqY2VsbCA9CisJCWluZm8tPmRldmljZS0+cGxhdGZvcm1fZGF0YTsKKwlzdHJ1Y3QgdG1pb19mYl9kYXRhICpkYXRhID0gY2VsbC0+ZHJpdmVyX2RhdGE7CisJc3RydWN0IGZiX3ZpZGVvbW9kZSAqYmVzdCA9IE5VTEw7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgZGF0YS0+bnVtX21vZGVzOyBpKyspIHsKKwkJc3RydWN0IGZiX3ZpZGVvbW9kZSAqbW9kZSA9IGRhdGEtPm1vZGVzICsgaTsKKworCQlpZiAobW9kZS0+eHJlcyA+PSB2YXItPnhyZXMgJiYgbW9kZS0+eXJlcyA+PSB2YXItPnlyZXMKKwkJCQkmJiAoIWJlc3QgfHwgKG1vZGUtPnhyZXMgPCBiZXN0LT54cmVzCisJCQkJCSAgICYmIG1vZGUtPnlyZXMgPCBiZXN0LT55cmVzKSkpCisJCQliZXN0ID0gbW9kZTsKKwl9CisKKwlyZXR1cm4gYmVzdDsKK30KKworc3RhdGljIGludCB0bWlvZmJfY2hlY2tfdmFyKHN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyAqdmFyLCBzdHJ1Y3QgZmJfaW5mbyAqaW5mbykKK3sKKworCXN0cnVjdCBmYl92aWRlb21vZGUgKm1vZGU7CisJc3RydWN0IG1mZF9jZWxsICpjZWxsID0KKwkJaW5mby0+ZGV2aWNlLT5wbGF0Zm9ybV9kYXRhOworCXN0cnVjdCB0bWlvX2ZiX2RhdGEgKmRhdGEgPSBjZWxsLT5kcml2ZXJfZGF0YTsKKworCW1vZGUgPSB0bWlvZmJfZmluZF9tb2RlKGluZm8sIHZhcik7CisJaWYgKCFtb2RlIHx8IHZhci0+Yml0c19wZXJfcGl4ZWwgPiAxNikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlmYl92aWRlb21vZGVfdG9fdmFyKHZhciwgbW9kZSk7CisKKwl2YXItPnhyZXNfdmlydHVhbCA9IG1vZGUtPnhyZXM7CisJdmFyLT55cmVzX3ZpcnR1YWwgPSBpbmZvLT5zY3JlZW5fc2l6ZSAvIChtb2RlLT54cmVzICogMik7CisKKwlpZiAodmFyLT55cmVzX3ZpcnR1YWwgPCB2YXItPnlyZXMpCisJCXJldHVybiAtRUlOVkFMOworCisJdmFyLT54b2Zmc2V0ID0gMDsKKwl2YXItPnlvZmZzZXQgPSAwOworCXZhci0+Yml0c19wZXJfcGl4ZWwgPSAxNjsKKwl2YXItPmdyYXlzY2FsZSA9IDA7CisJdmFyLT5yZWQub2Zmc2V0ID0gMTE7CisJdmFyLT5yZWQubGVuZ3RoID0gNTsKKwl2YXItPmdyZWVuLm9mZnNldCA9IDU7CisJdmFyLT5ncmVlbi5sZW5ndGggPSA2OworCXZhci0+Ymx1ZS5vZmZzZXQgPSAwOworCXZhci0+Ymx1ZS5sZW5ndGggPSA1OworCXZhci0+dHJhbnNwLm9mZnNldCA9IDA7CisJdmFyLT50cmFuc3AubGVuZ3RoID0gMDsKKwl2YXItPm5vbnN0ZCA9IDA7CisJdmFyLT5oZWlnaHQgPSBkYXRhLT5oZWlnaHQ7IC8qIG1tICovCisJdmFyLT53aWR0aCA9IGRhdGEtPndpZHRoOyAvKiBtbSAqLworCXZhci0+cm90YXRlID0gMDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB0bWlvZmJfc2V0X3BhcihzdHJ1Y3QgZmJfaW5mbyAqaW5mbykKK3sKKwlzdHJ1Y3QgZmJfdmFyX3NjcmVlbmluZm8gKnZhciA9ICZpbmZvLT52YXI7CisJc3RydWN0IGZiX3ZpZGVvbW9kZSAqbW9kZTsKKworCW1vZGUgPSB0bWlvZmJfZmluZF9tb2RlKGluZm8sIHZhcik7CisJaWYgKCFtb2RlKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWluZm8tPm1vZGUgPSBtb2RlOworCWluZm8tPmZpeC5saW5lX2xlbmd0aCA9IGluZm8tPm1vZGUtPnhyZXMgKgorCQkJdmFyLT5iaXRzX3Blcl9waXhlbCAvIDg7CisKKwl0bWlvZmJfaHdfbW9kZSh0b19wbGF0Zm9ybV9kZXZpY2UoaW5mby0+ZGV2aWNlKSk7CisJdG1pb2ZiX2NsZWFyc2NyZWVuKGluZm8pOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHRtaW9mYl9zZXRjb2xyZWcodW5zaWduZWQgcmVnbm8sIHVuc2lnbmVkIHJlZCwgdW5zaWduZWQgZ3JlZW4sCisJCQkgICB1bnNpZ25lZCBibHVlLCB1bnNpZ25lZCB0cmFuc3AsCisJCQkgICBzdHJ1Y3QgZmJfaW5mbyAqaW5mbykKK3sKKwlzdHJ1Y3QgdG1pb2ZiX3BhciAqcGFyID0gaW5mby0+cGFyOworCisJaWYgKHJlZ25vIDwgQVJSQVlfU0laRShwYXItPnBzZXVkb19wYWxldHRlKSkgeworCQlwYXItPnBzZXVkb19wYWxldHRlW3JlZ25vXSA9CisJCQkoKHJlZCAmIDB4ZjgwMCkpIHwKKwkJCSgoZ3JlZW4gJiAweGZjMDApID4+ICA1KSB8CisJCQkoKGJsdWUgJiAweGY4MDApID4+IDExKTsKKwkJcmV0dXJuIDA7CisJfQorCisJcmV0dXJuIC1FSU5WQUw7Cit9CisKK3N0YXRpYyBpbnQgdG1pb2ZiX2JsYW5rKGludCBibGFuaywgc3RydWN0IGZiX2luZm8gKmluZm8pCit7CisJLyoKKwkgKiBldmVyeXRoaW5nIGlzIGRvbmUgaW4gbGNkL2JsIGRyaXZlcnMuCisJICogdGhpcyBpcyBwdXJlbHkgdG8gbWFrZSBzeXNmcyBoYXBweSBhbmQgd29yay4KKwkgKi8KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBmYl9vcHMgdG1pb2ZiX29wcyA9IHsKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCisKKwkuZmJfaW9jdGwJPSB0bWlvZmJfaW9jdGwsCisJLmZiX2NoZWNrX3Zhcgk9IHRtaW9mYl9jaGVja192YXIsCisJLmZiX3NldF9wYXIJPSB0bWlvZmJfc2V0X3BhciwKKwkuZmJfc2V0Y29scmVnCT0gdG1pb2ZiX3NldGNvbHJlZywKKwkuZmJfYmxhbmsJPSB0bWlvZmJfYmxhbmssCisJLmZiX2ltYWdlYmxpdAk9IGNmYl9pbWFnZWJsaXQsCisjaWZkZWYgQ09ORklHX0ZCX1RNSU9fQUNDRUxMCisJLmZiX3N5bmMJPSB0bWlvZmJfc3luYywKKwkuZmJfZmlsbHJlY3QJPSB0bWlvZmJfZmlsbHJlY3QsCisJLmZiX2NvcHlhcmVhCT0gdG1pb2ZiX2NvcHlhcmVhLAorI2Vsc2UKKwkuZmJfZmlsbHJlY3QJPSBjZmJfZmlsbHJlY3QsCisJLmZiX2NvcHlhcmVhCT0gY2ZiX2NvcHlhcmVhLAorI2VuZGlmCit9OworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGludCBfX2RldmluaXQgdG1pb2ZiX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgbWZkX2NlbGwgKmNlbGwgPSBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOworCXN0cnVjdCB0bWlvX2ZiX2RhdGEgKmRhdGEgPSBjZWxsLT5kcml2ZXJfZGF0YTsKKwlzdHJ1Y3QgcmVzb3VyY2UgKmNjciA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShkZXYsIElPUkVTT1VSQ0VfTUVNLCAxKTsKKwlzdHJ1Y3QgcmVzb3VyY2UgKmxjciA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnZyYW0gPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UoZGV2LCBJT1JFU09VUkNFX01FTSwgMik7CisJaW50IGlycSA9IHBsYXRmb3JtX2dldF9pcnEoZGV2LCAwKTsKKwlzdHJ1Y3QgZmJfaW5mbyAqaW5mbzsKKwlzdHJ1Y3QgdG1pb2ZiX3BhciAqcGFyOworCWludCByZXR2YWw7CisKKwkvKgorCSAqIFRoaXMgaXMgdGhlIG9ubHkgd2F5IEFUTSB0byBkaXNhYmxlIHRoZSBmYgorCSAqLworCWlmIChkYXRhID09IE5VTEwpIHsKKwkJZGV2X2VycigmZGV2LT5kZXYsICJOVUxMIHBsYXRmb3JtIGRhdGEhXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaW5mbyA9IGZyYW1lYnVmZmVyX2FsbG9jKHNpemVvZihzdHJ1Y3QgdG1pb2ZiX3BhciksICZkZXYtPmRldik7CisKKwlpZiAoIWluZm8pCisJCXJldHVybiAtRU5PTUVNOworCisJcGFyID0gaW5mby0+cGFyOworCisjaWZkZWYgQ09ORklHX0ZCX1RNSU9fQUNDRUxMCisJaW5pdF93YWl0cXVldWVfaGVhZCgmcGFyLT53YWl0X2FjYyk7CisKKwlwYXItPnVzZV9wb2xsaW5nID0gdHJ1ZTsKKworCWluZm8tPmZsYWdzID0gRkJJTkZPX0RFRkFVTFQgfCBGQklORk9fSFdBQ0NFTF9DT1BZQVJFQQorCQkJfCBGQklORk9fSFdBQ0NFTF9GSUxMUkVDVDsKKyNlbHNlCisJaW5mby0+ZmxhZ3MgPSBGQklORk9fREVGQVVMVDsKKyNlbmRpZgorCisJaW5mby0+ZmJvcHMgPSAmdG1pb2ZiX29wczsKKworCXN0cmNweShpbmZvLT5maXguaWQsICJ0bWlvLWZiIik7CisJaW5mby0+Zml4LnNtZW1fc3RhcnQgPSB2cmFtLT5zdGFydDsKKwlpbmZvLT5maXguc21lbV9sZW4gPSByZXNvdXJjZV9zaXplKHZyYW0pOworCWluZm8tPmZpeC50eXBlID0gRkJfVFlQRV9QQUNLRURfUElYRUxTOworCWluZm8tPmZpeC52aXN1YWwgPSBGQl9WSVNVQUxfVFJVRUNPTE9SOworCWluZm8tPmZpeC5tbWlvX3N0YXJ0ID0gbGNyLT5zdGFydDsKKwlpbmZvLT5maXgubW1pb19sZW4gPSByZXNvdXJjZV9zaXplKGxjcik7CisJaW5mby0+Zml4LmFjY2VsID0gRkJfQUNDRUxfTk9ORTsKKwlpbmZvLT5zY3JlZW5fc2l6ZSA9IGluZm8tPmZpeC5zbWVtX2xlbiAtICg0ICogVE1JT0ZCX0ZJRk9fU0laRSk7CisJaW5mby0+cHNldWRvX3BhbGV0dGUgPSBwYXItPnBzZXVkb19wYWxldHRlOworCisJcGFyLT5jY3IgPSBpb3JlbWFwKGNjci0+c3RhcnQsIHJlc291cmNlX3NpemUoY2NyKSk7CisJaWYgKCFwYXItPmNjcikgeworCQlyZXR2YWwgPSAtRU5PTUVNOworCQlnb3RvIGVycl9pb3JlbWFwX2NjcjsKKwl9CisKKwlwYXItPmxjciA9IGlvcmVtYXAoaW5mby0+Zml4Lm1taW9fc3RhcnQsIGluZm8tPmZpeC5tbWlvX2xlbik7CisJaWYgKCFwYXItPmxjcikgeworCQlyZXR2YWwgPSAtRU5PTUVNOworCQlnb3RvIGVycl9pb3JlbWFwX2xjcjsKKwl9CisKKwlpbmZvLT5zY3JlZW5fYmFzZSA9IGlvcmVtYXAoaW5mby0+Zml4LnNtZW1fc3RhcnQsIGluZm8tPmZpeC5zbWVtX2xlbik7CisJaWYgKCFpbmZvLT5zY3JlZW5fYmFzZSkgeworCQlyZXR2YWwgPSAtRU5PTUVNOworCQlnb3RvIGVycl9pb3JlbWFwX3ZyYW07CisJfQorCisJcmV0dmFsID0gcmVxdWVzdF9pcnEoaXJxLCAmdG1pb2ZiX2lycSwgSVJRRl9ESVNBQkxFRCwKKwkJCQkJZGV2LT5kZXYuYnVzX2lkLCBpbmZvKTsKKworCWlmIChyZXR2YWwpCisJCWdvdG8gZXJyX3JlcXVlc3RfaXJxOworCisJcGxhdGZvcm1fc2V0X2RydmRhdGEoZGV2LCBpbmZvKTsKKworCXJldHZhbCA9IGZiX2ZpbmRfbW9kZSgmaW5mby0+dmFyLCBpbmZvLCBtb2RlX29wdGlvbiwKKwkJCWRhdGEtPm1vZGVzLCBkYXRhLT5udW1fbW9kZXMsCisJCQlkYXRhLT5tb2RlcywgMTYpOworCWlmICghcmV0dmFsKSB7CisJCXJldHZhbCA9IC1FSU5WQUw7CisJCWdvdG8gZXJyX2ZpbmRfbW9kZTsKKwl9CisKKwlpZiAoY2VsbC0+ZW5hYmxlKSB7CisJCXJldHZhbCA9IGNlbGwtPmVuYWJsZShkZXYpOworCQlpZiAocmV0dmFsKQorCQkJZ290byBlcnJfZW5hYmxlOworCX0KKworCXJldHZhbCA9IHRtaW9mYl9od19pbml0KGRldik7CisJaWYgKHJldHZhbCkKKwkJZ290byBlcnJfaHdfaW5pdDsKKworCWZiX3ZpZGVvbW9kZV90b19tb2RlbGlzdChkYXRhLT5tb2RlcywgZGF0YS0+bnVtX21vZGVzLAorCQkJCSAmaW5mby0+bW9kZWxpc3QpOworCisJcmV0dmFsID0gcmVnaXN0ZXJfZnJhbWVidWZmZXIoaW5mbyk7CisJaWYgKHJldHZhbCA8IDApCisJCWdvdG8gZXJyX3JlZ2lzdGVyX2ZyYW1lYnVmZmVyOworCisJcHJpbnRrKEtFUk5fSU5GTyAiZmIlZDogJXMgZnJhbWUgYnVmZmVyIGRldmljZVxuIiwKKwkJCQlpbmZvLT5ub2RlLCBpbmZvLT5maXguaWQpOworCisJcmV0dXJuIDA7CisKK2Vycl9yZWdpc3Rlcl9mcmFtZWJ1ZmZlcjoKKy8qZXJyX3NldF9wYXI6Ki8KKwl0bWlvZmJfaHdfc3RvcChkZXYpOworZXJyX2h3X2luaXQ6CisJaWYgKGNlbGwtPmRpc2FibGUpCisJCWNlbGwtPmRpc2FibGUoZGV2KTsKK2Vycl9lbmFibGU6CitlcnJfZmluZF9tb2RlOgorCXBsYXRmb3JtX3NldF9kcnZkYXRhKGRldiwgTlVMTCk7CisJZnJlZV9pcnEoaXJxLCBpbmZvKTsKK2Vycl9yZXF1ZXN0X2lycToKKwlpb3VubWFwKGluZm8tPnNjcmVlbl9iYXNlKTsKK2Vycl9pb3JlbWFwX3ZyYW06CisJaW91bm1hcChwYXItPmxjcik7CitlcnJfaW9yZW1hcF9sY3I6CisJaW91bm1hcChwYXItPmNjcik7CitlcnJfaW9yZW1hcF9jY3I6CisJZnJhbWVidWZmZXJfcmVsZWFzZShpbmZvKTsKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgaW50IF9fZGV2ZXhpdCB0bWlvZmJfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgbWZkX2NlbGwgKmNlbGwgPSBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOworCXN0cnVjdCBmYl9pbmZvICppbmZvID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKKwlpbnQgaXJxID0gcGxhdGZvcm1fZ2V0X2lycShkZXYsIDApOworCXN0cnVjdCB0bWlvZmJfcGFyICpwYXI7CisKKwlpZiAoaW5mbykgeworCQlwYXIgPSBpbmZvLT5wYXI7CisJCXVucmVnaXN0ZXJfZnJhbWVidWZmZXIoaW5mbyk7CisKKwkJdG1pb2ZiX2h3X3N0b3AoZGV2KTsKKworCQlpZiAoY2VsbC0+ZGlzYWJsZSkKKwkJCWNlbGwtPmRpc2FibGUoZGV2KTsKKworCQlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShkZXYsIE5VTEwpOworCisJCWZyZWVfaXJxKGlycSwgaW5mbyk7CisKKwkJaW91bm1hcChpbmZvLT5zY3JlZW5fYmFzZSk7CisJCWlvdW5tYXAocGFyLT5sY3IpOworCQlpb3VubWFwKHBhci0+Y2NyKTsKKworCQlmcmFtZWJ1ZmZlcl9yZWxlYXNlKGluZm8pOworCX0KKworCXJldHVybiAwOworfQorCisjaWZkZWYgREVCVUcKK3N0YXRpYyB2b2lkIHRtaW9mYl9kdW1wX3JlZ3Moc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQoreworCXN0cnVjdCBmYl9pbmZvICppbmZvID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgdG1pb2ZiX3BhciAqcGFyID0gaW5mby0+cGFyOworCisJcHJpbnRrKEtFUk5fREVCVUcgImxoY2NyOlxuIik7CisjZGVmaW5lIENDUl9QUihuKQlwcmludGsoS0VSTl9ERUJVRyAiXHQiICNuICIgPSBcdCUwNHhcbiIsXAorCQl0bWlvX2lvcmVhZDE2KHBhci0+Y2NyICsgQ0NSXyAjIyBuKSk7CisJQ0NSX1BSKENNRCk7CisJQ0NSX1BSKFJFVklEKTsKKwlDQ1JfUFIoQkFTRUwpOworCUNDUl9QUihCQVNFSCk7CisJQ0NSX1BSKFVHQ0MpOworCUNDUl9QUihHQ0MpOworCUNDUl9QUihVU0MpOworCUNDUl9QUihWUkFNUlRDKTsKKwlDQ1JfUFIoVlJBTVNBQyk7CisJQ0NSX1BSKFZSQU1CQyk7CisjdW5kZWYgQ0NSX1BSCisKKwlwcmludGsoS0VSTl9ERUJVRyAibGNyOiBcbiIpOworI2RlZmluZSBMQ1JfUFIobikJcHJpbnRrKEtFUk5fREVCVUcgIlx0IiAjbiAiID0gXHQlMDR4XG4iLFwKKwkJdG1pb19pb3JlYWQxNihwYXItPmxjciArIExDUl8gIyMgbikpOworCUxDUl9QUihVSVMpOworCUxDUl9QUihWSFBOKTsKKwlMQ1JfUFIoQ0ZTQUwpOworCUxDUl9QUihDRlNBSCk7CisJTENSX1BSKENGUyk7CisJTENSX1BSKENGV1MpOworCUxDUl9QUihCQklFKTsKKwlMQ1JfUFIoQkJJU0MpOworCUxDUl9QUihDQ1MpOworCUxDUl9QUihCQkVTKTsKKwlMQ1JfUFIoQ01ETCk7CisJTENSX1BSKENNREgpOworCUxDUl9QUihDRkMpOworCUxDUl9QUihDQ0lGQyk7CisJTENSX1BSKEhXVCk7CisJTENSX1BSKExDRENDUkMpOworCUxDUl9QUihMQ0RDQyk7CisJTENSX1BSKExDRENPUEMpOworCUxDUl9QUihMQ0RJUyk7CisJTENSX1BSKExDRElNKTsKKwlMQ1JfUFIoTENESUUpOworCUxDUl9QUihHRFNBTCk7CisJTENSX1BSKEdEU0FIKTsKKwlMQ1JfUFIoVkhQQ0wpOworCUxDUl9QUihWSFBDSCk7CisJTENSX1BSKEdNKTsKKwlMQ1JfUFIoSFQpOworCUxDUl9QUihIRFMpOworCUxDUl9QUihIU1MpOworCUxDUl9QUihIU0UpOworCUxDUl9QUihITlApOworCUxDUl9QUihWVCk7CisJTENSX1BSKFZEUyk7CisJTENSX1BSKFZTUyk7CisJTENSX1BSKFZTRSk7CisJTENSX1BSKENETE4pOworCUxDUl9QUihJTE4pOworCUxDUl9QUihTUCk7CisJTENSX1BSKE1JU0MpOworCUxDUl9QUihWSUhTUyk7CisJTENSX1BSKFZJVlMpOworCUxDUl9QUihWSVZFKTsKKwlMQ1JfUFIoVklWU1MpOworCUxDUl9QUihWQ0NJUyk7CisJTENSX1BSKFZJRFdTQUwpOworCUxDUl9QUihWSURXU0FIKTsKKwlMQ1JfUFIoVklEUlNBTCk7CisJTENSX1BSKFZJRFJTQUgpOworCUxDUl9QUihWSVBERFNUKTsKKwlMQ1JfUFIoVklQRERFVCk7CisJTENSX1BSKFZJRSk7CisJTENSX1BSKFZDUyk7CisJTENSX1BSKFZQSFdDKTsKKwlMQ1JfUFIoVlBIUyk7CisJTENSX1BSKFZQVldDKTsKKwlMQ1JfUFIoVlBWUyk7CisJTENSX1BSKFBMSFBJWCk7CisJTENSX1BSKFhTKTsKKwlMQ1JfUFIoWENLSFcpOworCUxDUl9QUihTVEhTKTsKKwlMQ1JfUFIoVlQyKTsKKwlMQ1JfUFIoWUNLU1cpOworCUxDUl9QUihZU1RTKTsKKwlMQ1JfUFIoUFBPTFMpOworCUxDUl9QUihQUkVDVyk7CisJTENSX1BSKFZDTEtIVyk7CisJTENSX1BSKE9DKTsKKyN1bmRlZiBMQ1JfUFIKK30KKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX1BNCitzdGF0aWMgaW50IHRtaW9mYl9zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQoreworCXN0cnVjdCBmYl9pbmZvICppbmZvID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgdG1pb2ZiX3BhciAqcGFyID0gaW5mby0+cGFyOworCXN0cnVjdCBtZmRfY2VsbCAqY2VsbCA9IGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJaW50IHJldHZhbCA9IDA7CisKKwlhY3F1aXJlX2NvbnNvbGVfc2VtKCk7CisKKwlmYl9zZXRfc3VzcGVuZChpbmZvLCAxKTsKKworCWlmIChpbmZvLT5mYm9wcy0+ZmJfc3luYykKKwkJaW5mby0+ZmJvcHMtPmZiX3N5bmMoaW5mbyk7CisKKworCS8qCisJICogVGhlIGZiIHNob3VsZCBiZSB1c2FibGUgZXZlbiBpZiBpbnRlcnJ1cHRzIGFyZSBkaXNhYmxlZCAoYW5kIHRoZXkgYXJlCisJICogZHVyaW5nIHN1c3BlbmQvcmVzdW1lKS4gU3dpdGNoIHRlbXBvcmFyeSB0byBmb3JjZWQgcG9sbGluZy4KKwkgKi8KKwlwcmludGsoS0VSTl9JTkZPICJ0bWlvZmI6IHN3aXRjaGluZyB0byBwb2xsaW5nXG4iKTsKKwlwYXItPnVzZV9wb2xsaW5nID0gdHJ1ZTsKKwl0bWlvZmJfaHdfc3RvcChkZXYpOworCisJaWYgKGNlbGwtPnN1c3BlbmQpCisJCXJldHZhbCA9IGNlbGwtPnN1c3BlbmQoZGV2KTsKKworCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKKworCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyBpbnQgdG1pb2ZiX3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGZiX2luZm8gKmluZm8gPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBtZmRfY2VsbCAqY2VsbCA9IGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJaW50IHJldHZhbDsKKworCWFjcXVpcmVfY29uc29sZV9zZW0oKTsKKworCWlmIChjZWxsLT5yZXN1bWUpIHsKKwkJcmV0dmFsID0gY2VsbC0+cmVzdW1lKGRldik7CisJCWlmIChyZXR2YWwpCisJCQlnb3RvIG91dDsKKwl9CisKKwl0bWlvZmJfaXJxKC0xLCBpbmZvKTsKKworCXRtaW9mYl9od19pbml0KGRldik7CisKKwl0bWlvZmJfaHdfbW9kZShkZXYpOworCisJZmJfc2V0X3N1c3BlbmQoaW5mbywgMCk7CitvdXQ6CisJcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCXJldHVybiByZXR2YWw7Cit9CisjZWxzZQorI2RlZmluZSB0bWlvZmJfc3VzcGVuZAlOVUxMCisjZGVmaW5lIHRtaW9mYl9yZXN1bWUJTlVMTAorI2VuZGlmCisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHRtaW9mYl9kcml2ZXIgPSB7CisJLmRyaXZlci5uYW1lCT0gInRtaW8tZmIiLAorCS5kcml2ZXIub3duZXIJPSBUSElTX01PRFVMRSwKKwkucHJvYmUJCT0gdG1pb2ZiX3Byb2JlLAorCS5yZW1vdmUJCT0gX19kZXZleGl0X3AodG1pb2ZiX3JlbW92ZSksCisJLnN1c3BlbmQJPSB0bWlvZmJfc3VzcGVuZCwKKwkucmVzdW1lCQk9IHRtaW9mYl9yZXN1bWUsCit9OworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworI2lmbmRlZiBNT0RVTEUKK3N0YXRpYyB2b2lkIF9faW5pdCB0bWlvZmJfc2V0dXAoY2hhciAqb3B0aW9ucykKK3sKKwljaGFyICp0aGlzX29wdDsKKworCWlmICghb3B0aW9ucyB8fCAhKm9wdGlvbnMpCisJCXJldHVybjsKKworCXdoaWxlICgodGhpc19vcHQgPSBzdHJzZXAoJm9wdGlvbnMsICIsIikpICE9IE5VTEwpIHsKKwkJaWYgKCEqdGhpc19vcHQpCisJCQljb250aW51ZTsKKwkJLyoKKwkJICogRklYTUUKKwkJICovCisJfQorfQorI2VuZGlmCisKK3N0YXRpYyBpbnQgX19pbml0IHRtaW9mYl9pbml0KHZvaWQpCit7CisjaWZuZGVmIE1PRFVMRQorCWNoYXIgKm9wdGlvbiA9IE5VTEw7CisKKwlpZiAoZmJfZ2V0X29wdGlvbnMoInRtaW9mYiIsICZvcHRpb24pKQorCQlyZXR1cm4gLUVOT0RFVjsKKwl0bWlvZmJfc2V0dXAob3B0aW9uKTsKKyNlbmRpZgorCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJnRtaW9mYl9kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgdG1pb2ZiX2NsZWFudXAodm9pZCkKK3sKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmdG1pb2ZiX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KHRtaW9mYl9pbml0KTsKK21vZHVsZV9leGl0KHRtaW9mYl9jbGVhbnVwKTsKKworTU9EVUxFX0RFU0NSSVBUSU9OKCJUTUlPIGZyYW1lYnVmZmVyIGRyaXZlciIpOworTU9EVUxFX0FVVEhPUigiQ2hyaXMgSHVtYmVydCwgRGlyayBPcGZlciwgRG1pdHJ5IEJhcnlzaGtvdiIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby91dmVzYWZiLmMgYi9kcml2ZXJzL3ZpZGVvL3V2ZXNhZmIuYwppbmRleCA1MDc0NDIyLi42YzJkMzdmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL3V2ZXNhZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL3V2ZXNhZmIuYwpAQCAtNTE2LDEwICs1MTYsMTIgQEAKIAogCQllcnIgPSB1dmVzYWZiX2V4ZWModGFzayk7CiAJCWlmIChlcnIgfHwgKHRhc2stPnQucmVncy5lYXggJiAweGZmZmYpICE9IDB4MDA0ZikgewotCQkJcHJpbnRrKEtFUk5fRVJSICJ1dmVzYWZiOiBHZXR0aW5nIG1vZGUgaW5mbyBibG9jayAiCisJCQlwcmludGsoS0VSTl9XQVJOSU5HICJ1dmVzYWZiOiBHZXR0aW5nIG1vZGUgaW5mbyBibG9jayAiCiAJCQkJImZvciBtb2RlIDB4JXggZmFpbGVkIChlYXg9MHgleCwgZXJyPSVkKVxuIiwKIAkJCQkqbW9kZSwgKHUzMil0YXNrLT50LnJlZ3MuZWF4LCBlcnIpOwotCQkJcmV0dXJuIC1FSU5WQUw7CisJCQltb2RlKys7CisJCQlwYXItPnZiZV9tb2Rlc19jbnQtLTsKKwkJCWNvbnRpbnVlOwogCQl9CiAKIAkJbWliID0gdGFzay0+YnVmOwpAQCAtNTQ4LDcgKzU1MCwxMCBAQAogCQkJbWliLT5kZXB0aCA9IG1pYi0+Yml0c19wZXJfcGl4ZWw7CiAJfQogCi0JcmV0dXJuIDA7CisJaWYgKHBhci0+dmJlX21vZGVzX2NudCA+IDApCisJCXJldHVybiAwOworCWVsc2UKKwkJcmV0dXJuIC1FSU5WQUw7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3ZnYTE2ZmIuYyBiL2RyaXZlcnMvdmlkZW8vdmdhMTZmYi5jCmluZGV4IGUzMWJjYTguLjViMjkzODkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vdmdhMTZmYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vdmdhMTZmYi5jCkBAIC01OCw3ICs1OCw2IEBACiAJCXVuc2lnbmVkIGNoYXIJQ2xvY2tpbmdNb2RlOwkgIC8qIFNlcS1Db250cm9sbGVyOjAxaCAqLwogCX0gdmdhX3N0YXRlOwogCXN0cnVjdCB2Z2FzdGF0ZSBzdGF0ZTsKLQlzdHJ1Y3QgbXV0ZXggb3Blbl9sb2NrOwogCXVuc2lnbmVkIGludCByZWZfY291bnQ7CiAJaW50IHBhbGV0dGVfYmxhbmtlZCwgdmVzYV9ibGFua2VkLCBtb2RlLCBpc1ZHQTsKIAl1OCBtaXNjLCBwZWxfbXNrLCB2c3MsIGNsa2RpdjsKQEAgLTI4Niw3ICsyODUsNiBAQAogewogCXN0cnVjdCB2Z2ExNmZiX3BhciAqcGFyID0gaW5mby0+cGFyOwogCi0JbXV0ZXhfbG9jaygmcGFyLT5vcGVuX2xvY2spOwogCWlmICghcGFyLT5yZWZfY291bnQpIHsKIAkJbWVtc2V0KCZwYXItPnN0YXRlLCAwLCBzaXplb2Yoc3RydWN0IHZnYXN0YXRlKSk7CiAJCXBhci0+c3RhdGUuZmxhZ3MgPSBWR0FfU0FWRV9GT05UUyB8IFZHQV9TQVZFX01PREUgfApAQCAtMjk0LDcgKzI5Miw2IEBACiAJCXNhdmVfdmdhKCZwYXItPnN0YXRlKTsKIAl9CiAJcGFyLT5yZWZfY291bnQrKzsKLQltdXRleF91bmxvY2soJnBhci0+b3Blbl9sb2NrKTsKIAogCXJldHVybiAwOwogfQpAQCAtMzAzLDE1ICszMDAsMTIgQEAKIHsKIAlzdHJ1Y3QgdmdhMTZmYl9wYXIgKnBhciA9IGluZm8tPnBhcjsKIAotCW11dGV4X2xvY2soJnBhci0+b3Blbl9sb2NrKTsKLQlpZiAoIXBhci0+cmVmX2NvdW50KSB7Ci0JCW11dGV4X3VubG9jaygmcGFyLT5vcGVuX2xvY2spOworCWlmICghcGFyLT5yZWZfY291bnQpCiAJCXJldHVybiAtRUlOVkFMOwotCX0KKwogCWlmIChwYXItPnJlZl9jb3VudCA9PSAxKQogCQlyZXN0b3JlX3ZnYSgmcGFyLT5zdGF0ZSk7CiAJcGFyLT5yZWZfY291bnQtLTsKLQltdXRleF91bmxvY2soJnBhci0+b3Blbl9sb2NrKTsKIAogCXJldHVybiAwOwogfQpAQCAtMTMyNiw3ICsxMzIwLDYgQEAKIAlwcmludGsoS0VSTl9JTkZPICJ2Z2ExNmZiOiBtYXBwZWQgdG8gMHglcFxuIiwgaW5mby0+c2NyZWVuX2Jhc2UpOwogCXBhciA9IGluZm8tPnBhcjsKIAotCW11dGV4X2luaXQoJnBhci0+b3Blbl9sb2NrKTsKIAlwYXItPmlzVkdBID0gc2NyZWVuX2luZm8ub3JpZ192aWRlb19pc1ZHQTsKIAlwYXItPnBhbGV0dGVfYmxhbmtlZCA9IDA7CiAJcGFyLT52ZXNhX2JsYW5rZWQgPSAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby92aWEvTWFrZWZpbGUgYi9kcml2ZXJzL3ZpZGVvL3ZpYS9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNTMzYjRiCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy92aWRlby92aWEvTWFrZWZpbGUKQEAgLTAsMCArMSw3IEBACisjCisjIE1ha2VmaWxlIGZvciB0aGUgVklBIGZyYW1lYnVmZmVyIGRyaXZlciAoZm9yIExpbnV4IEtlcm5lbCAyLjYpCisjCisKK29iai0kKENPTkZJR19GQl9WSUEpICs9IHZpYWZiLm8KKwordmlhZmIteQk6PXZpYWZiZGV2Lm8gaHcubyBpZmFjZS5vICB2aWFfaTJjLm8gZHZpLm8gbGNkLm8gaW9jdGwubyBhY2NlbC5vIHZpYV91dGlsaXR5Lm8gdnQxNjM2Lm8gZ2xvYmFsLm8gdGJsRFBBU2V0dGluZy5vIHZpYW1vZGUubyB0YmwxNjM2Lm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vdmlhL2FjY2VsLmMgYi9kcml2ZXJzL3ZpZGVvL3ZpYS9hY2NlbC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYzMjUyM2YKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3ZpZGVvL3ZpYS9hY2NlbC5jCkBAIC0wLDAgKzEsMjc5IEBACisvKgorICogQ29weXJpZ2h0IDE5OTgtMjAwOCBWSUEgVGVjaG5vbG9naWVzLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgMjAwMS0yMDA4IFMzIEdyYXBoaWNzLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKKyAqIGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRJRVMgT1IgUkVQUkVTRU5UQVRJT05TOyB3aXRob3V0IGV2ZW4KKyAqIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UuU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogZm9yIG1vcmUgZGV0YWlscy4KKworICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLAorICogNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworI2luY2x1ZGUgImdsb2JhbC5oIgorCit2b2lkIHZpYWZiX2luaXRfYWNjZWwodm9pZCkKK3sKKwl2aWFwYXJpbmZvLT5mYm1lbV9mcmVlIC09IENVUlNPUl9TSVpFOworCXZpYXBhcmluZm8tPmN1cnNvcl9zdGFydCA9IHZpYXBhcmluZm8tPmZibWVtX2ZyZWU7CisJdmlhcGFyaW5mby0+ZmJtZW1fdXNlZCArPSBDVVJTT1JfU0laRTsKKworCS8qIFJldmVyc2UgOCoxMDI0IG1lbW9yeSBzcGFjZSBmb3IgY3Vyc29yIGltYWdlICovCisJdmlhcGFyaW5mby0+ZmJtZW1fZnJlZSAtPSAoQ1VSU09SX1NJWkUgKyBWUV9TSVpFKTsKKwl2aWFwYXJpbmZvLT5WUV9zdGFydCA9IHZpYXBhcmluZm8tPmZibWVtX2ZyZWU7CisJdmlhcGFyaW5mby0+VlFfZW5kID0gdmlhcGFyaW5mby0+VlFfc3RhcnQgKyBWUV9TSVpFIC0gMTsKKwl2aWFwYXJpbmZvLT5mYm1lbV91c2VkICs9IChDVVJTT1JfU0laRSArIFZRX1NJWkUpOyB9CisKK3ZvaWQgdmlhZmJfaW5pdF8yZF9lbmdpbmUodm9pZCkKK3sKKwl1MzIgZHdWUVN0YXJ0QWRkciwgZHdWUUVuZEFkZHI7CisJdTMyIGR3VlFMZW4sIGR3VlFTdGFydEwsIGR3VlFFbmRMLCBkd1ZRU3RhcnRFbmRIOworCisJLyogaW5pdCAyRCBlbmdpbmUgcmVncyB0byByZXNldCAyRCBlbmdpbmUgKi8KKwl3cml0ZWwoMHgwLCB2aWFwYXJpbmZvLT5pb192aXJ0ICsgVklBX1JFR19HRU1PREUpOworCXdyaXRlbCgweDAsIHZpYXBhcmluZm8tPmlvX3ZpcnQgKyBWSUFfUkVHX1NSQ1BPUyk7CisJd3JpdGVsKDB4MCwgdmlhcGFyaW5mby0+aW9fdmlydCArIFZJQV9SRUdfRFNUUE9TKTsKKwl3cml0ZWwoMHgwLCB2aWFwYXJpbmZvLT5pb192aXJ0ICsgVklBX1JFR19ESU1FTlNJT04pOworCXdyaXRlbCgweDAsIHZpYXBhcmluZm8tPmlvX3ZpcnQgKyBWSUFfUkVHX1BBVEFERFIpOworCXdyaXRlbCgweDAsIHZpYXBhcmluZm8tPmlvX3ZpcnQgKyBWSUFfUkVHX0ZHQ09MT1IpOworCXdyaXRlbCgweDAsIHZpYXBhcmluZm8tPmlvX3ZpcnQgKyBWSUFfUkVHX0JHQ09MT1IpOworCXdyaXRlbCgweDAsIHZpYXBhcmluZm8tPmlvX3ZpcnQgKyBWSUFfUkVHX0NMSVBUTCk7CisJd3JpdGVsKDB4MCwgdmlhcGFyaW5mby0+aW9fdmlydCArIFZJQV9SRUdfQ0xJUEJSKTsKKwl3cml0ZWwoMHgwLCB2aWFwYXJpbmZvLT5pb192aXJ0ICsgVklBX1JFR19PRkZTRVQpOworCXdyaXRlbCgweDAsIHZpYXBhcmluZm8tPmlvX3ZpcnQgKyBWSUFfUkVHX0tFWUNPTlRST0wpOworCXdyaXRlbCgweDAsIHZpYXBhcmluZm8tPmlvX3ZpcnQgKyBWSUFfUkVHX1NSQ0JBU0UpOworCXdyaXRlbCgweDAsIHZpYXBhcmluZm8tPmlvX3ZpcnQgKyBWSUFfUkVHX0RTVEJBU0UpOworCXdyaXRlbCgweDAsIHZpYXBhcmluZm8tPmlvX3ZpcnQgKyBWSUFfUkVHX1BJVENIKTsKKwl3cml0ZWwoMHgwLCB2aWFwYXJpbmZvLT5pb192aXJ0ICsgVklBX1JFR19NT05PUEFUMSk7CisKKwkvKiBJbml0IEFHUCBhbmQgVlEgcmVncyAqLworCXN3aXRjaCAodmlhcGFyaW5mby0+Y2hpcF9pbmZvLT5nZnhfY2hpcF9uYW1lKSB7CisJY2FzZSBVTklDSFJPTUVfSzhNODkwOgorCWNhc2UgVU5JQ0hST01FX1A0TTkwMDoKKwkJd3JpdGVsKDB4MDAxMDAwMDAsIHZpYXBhcmluZm8tPmlvX3ZpcnQgKyBWSUFfUkVHX0NSX1RSQU5TRVQpOworCQl3cml0ZWwoMHg2ODBBMDAwMCwgdmlhcGFyaW5mby0+aW9fdmlydCArIFZJQV9SRUdfQ1JfVFJBTlNQQUNFKTsKKwkJd3JpdGVsKDB4MDIwMDAwMDAsIHZpYXBhcmluZm8tPmlvX3ZpcnQgKyBWSUFfUkVHX0NSX1RSQU5TUEFDRSk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJd3JpdGVsKDB4MDAxMDAwMDAsIHZpYXBhcmluZm8tPmlvX3ZpcnQgKyBWSUFfUkVHX1RSQU5TRVQpOworCQl3cml0ZWwoMHgwMDAwMDAwMCwgdmlhcGFyaW5mby0+aW9fdmlydCArIFZJQV9SRUdfVFJBTlNQQUNFKTsKKwkJd3JpdGVsKDB4MDAzMzMwMDQsIHZpYXBhcmluZm8tPmlvX3ZpcnQgKyBWSUFfUkVHX1RSQU5TUEFDRSk7CisJCXdyaXRlbCgweDYwMDAwMDAwLCB2aWFwYXJpbmZvLT5pb192aXJ0ICsgVklBX1JFR19UUkFOU1BBQ0UpOworCQl3cml0ZWwoMHg2MTAwMDAwMCwgdmlhcGFyaW5mby0+aW9fdmlydCArIFZJQV9SRUdfVFJBTlNQQUNFKTsKKwkJd3JpdGVsKDB4NjIwMDAwMDAsIHZpYXBhcmluZm8tPmlvX3ZpcnQgKyBWSUFfUkVHX1RSQU5TUEFDRSk7CisJCXdyaXRlbCgweDYzMDAwMDAwLCB2aWFwYXJpbmZvLT5pb192aXJ0ICsgVklBX1JFR19UUkFOU1BBQ0UpOworCQl3cml0ZWwoMHg2NDAwMDAwMCwgdmlhcGFyaW5mby0+aW9fdmlydCArIFZJQV9SRUdfVFJBTlNQQUNFKTsKKwkJd3JpdGVsKDB4N0QwMDAwMDAsIHZpYXBhcmluZm8tPmlvX3ZpcnQgKyBWSUFfUkVHX1RSQU5TUEFDRSk7CisKKwkJd3JpdGVsKDB4RkUwMjAwMDAsIHZpYXBhcmluZm8tPmlvX3ZpcnQgKyBWSUFfUkVHX1RSQU5TRVQpOworCQl3cml0ZWwoMHgwMDAwMDAwMCwgdmlhcGFyaW5mby0+aW9fdmlydCArIFZJQV9SRUdfVFJBTlNQQUNFKTsKKwkJYnJlYWs7CisJfQorCWlmICh2aWFwYXJpbmZvLT5WUV9zdGFydCAhPSAwKSB7CisJCS8qIEVuYWJsZSBWUSAqLworCQlkd1ZRU3RhcnRBZGRyID0gdmlhcGFyaW5mby0+VlFfc3RhcnQ7CisJCWR3VlFFbmRBZGRyID0gdmlhcGFyaW5mby0+VlFfZW5kOworCisJCWR3VlFTdGFydEwgPSAweDUwMDAwMDAwIHwgKGR3VlFTdGFydEFkZHIgJiAweEZGRkZGRik7CisJCWR3VlFFbmRMID0gMHg1MTAwMDAwMCB8IChkd1ZRRW5kQWRkciAmIDB4RkZGRkZGKTsKKwkJZHdWUVN0YXJ0RW5kSCA9IDB4NTIwMDAwMDAgfAorCQkJKChkd1ZRU3RhcnRBZGRyICYgMHhGRjAwMDAwMCkgPj4gMjQpIHwKKwkJCSgoZHdWUUVuZEFkZHIgJiAweEZGMDAwMDAwKSA+PiAxNik7CisJCWR3VlFMZW4gPSAweDUzMDAwMDAwIHwgKFZRX1NJWkUgPj4gMyk7CisJCXN3aXRjaCAodmlhcGFyaW5mby0+Y2hpcF9pbmZvLT5nZnhfY2hpcF9uYW1lKSB7CisJCWNhc2UgVU5JQ0hST01FX0s4TTg5MDoKKwkJY2FzZSBVTklDSFJPTUVfUDRNOTAwOgorCQkJZHdWUVN0YXJ0TCB8PSAweDIwMDAwMDAwOworCQkJZHdWUUVuZEwgfD0gMHgyMDAwMDAwMDsKKwkJCWR3VlFTdGFydEVuZEggfD0gMHgyMDAwMDAwMDsKKwkJCWR3VlFMZW4gfD0gMHgyMDAwMDAwMDsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJYnJlYWs7CisJCX0KKworCQlzd2l0Y2ggKHZpYXBhcmluZm8tPmNoaXBfaW5mby0+Z2Z4X2NoaXBfbmFtZSkgeworCQljYXNlIFVOSUNIUk9NRV9LOE04OTA6CisJCWNhc2UgVU5JQ0hST01FX1A0TTkwMDoKKwkJCXdyaXRlbCgweDAwMTAwMDAwLAorCQkJCXZpYXBhcmluZm8tPmlvX3ZpcnQgKyBWSUFfUkVHX0NSX1RSQU5TRVQpOworCQkJd3JpdGVsKGR3VlFTdGFydEVuZEgsCisJCQkJdmlhcGFyaW5mby0+aW9fdmlydCArIFZJQV9SRUdfQ1JfVFJBTlNQQUNFKTsKKwkJCXdyaXRlbChkd1ZRU3RhcnRMLAorCQkJCXZpYXBhcmluZm8tPmlvX3ZpcnQgKyBWSUFfUkVHX0NSX1RSQU5TUEFDRSk7CisJCQl3cml0ZWwoZHdWUUVuZEwsCisJCQkJdmlhcGFyaW5mby0+aW9fdmlydCArIFZJQV9SRUdfQ1JfVFJBTlNQQUNFKTsKKwkJCXdyaXRlbChkd1ZRTGVuLAorCQkJCXZpYXBhcmluZm8tPmlvX3ZpcnQgKyBWSUFfUkVHX0NSX1RSQU5TUEFDRSk7CisJCQl3cml0ZWwoMHg3NDMwMTAwMSwKKwkJCQl2aWFwYXJpbmZvLT5pb192aXJ0ICsgVklBX1JFR19DUl9UUkFOU1BBQ0UpOworCQkJd3JpdGVsKDB4MDAwMDAwMDAsCisJCQkJdmlhcGFyaW5mby0+aW9fdmlydCArIFZJQV9SRUdfQ1JfVFJBTlNQQUNFKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJd3JpdGVsKDB4MDBGRTAwMDAsCisJCQkJdmlhcGFyaW5mby0+aW9fdmlydCArIFZJQV9SRUdfVFJBTlNFVCk7CisJCQl3cml0ZWwoMHgwODAwMDNGRSwKKwkJCQl2aWFwYXJpbmZvLT5pb192aXJ0ICsgVklBX1JFR19UUkFOU1BBQ0UpOworCQkJd3JpdGVsKDB4MEEwMDAyN0MsCisJCQkJdmlhcGFyaW5mby0+aW9fdmlydCArIFZJQV9SRUdfVFJBTlNQQUNFKTsKKwkJCXdyaXRlbCgweDBCMDAwMjYwLAorCQkJCXZpYXBhcmluZm8tPmlvX3ZpcnQgKyBWSUFfUkVHX1RSQU5TUEFDRSk7CisJCQl3cml0ZWwoMHgwQzAwMDI3NCwKKwkJCQl2aWFwYXJpbmZvLT5pb192aXJ0ICsgVklBX1JFR19UUkFOU1BBQ0UpOworCQkJd3JpdGVsKDB4MEQwMDAyNjQsCisJCQkJdmlhcGFyaW5mby0+aW9fdmlydCArIFZJQV9SRUdfVFJBTlNQQUNFKTsKKwkJCXdyaXRlbCgweDBFMDAwMDAwLAorCQkJCXZpYXBhcmluZm8tPmlvX3ZpcnQgKyBWSUFfUkVHX1RSQU5TUEFDRSk7CisJCQl3cml0ZWwoMHgwRjAwMDAyMCwKKwkJCQl2aWFwYXJpbmZvLT5pb192aXJ0ICsgVklBX1JFR19UUkFOU1BBQ0UpOworCQkJd3JpdGVsKDB4MTAwMDAyN0UsCisJCQkJdmlhcGFyaW5mby0+aW9fdmlydCArIFZJQV9SRUdfVFJBTlNQQUNFKTsKKwkJCXdyaXRlbCgweDExMDAwMkZFLAorCQkJCXZpYXBhcmluZm8tPmlvX3ZpcnQgKyBWSUFfUkVHX1RSQU5TUEFDRSk7CisJCQl3cml0ZWwoMHgyMDBGMDA2MCwKKwkJCQl2aWFwYXJpbmZvLT5pb192aXJ0ICsgVklBX1JFR19UUkFOU1BBQ0UpOworCisJCQl3cml0ZWwoMHgwMDAwMDAwNiwKKwkJCQl2aWFwYXJpbmZvLT5pb192aXJ0ICsgVklBX1JFR19UUkFOU1BBQ0UpOworCQkJd3JpdGVsKDB4NDAwMDhDMEYsCisJCQkJdmlhcGFyaW5mby0+aW9fdmlydCArIFZJQV9SRUdfVFJBTlNQQUNFKTsKKwkJCXdyaXRlbCgweDQ0MDAwMDAwLAorCQkJCXZpYXBhcmluZm8tPmlvX3ZpcnQgKyBWSUFfUkVHX1RSQU5TUEFDRSk7CisJCQl3cml0ZWwoMHg0NTA4MEMwNCwKKwkJCQl2aWFwYXJpbmZvLT5pb192aXJ0ICsgVklBX1JFR19UUkFOU1BBQ0UpOworCQkJd3JpdGVsKDB4NDY4MDA0MDgsCisJCQkJdmlhcGFyaW5mby0+aW9fdmlydCArIFZJQV9SRUdfVFJBTlNQQUNFKTsKKworCQkJd3JpdGVsKGR3VlFTdGFydEVuZEgsCisJCQkJdmlhcGFyaW5mby0+aW9fdmlydCArIFZJQV9SRUdfVFJBTlNQQUNFKTsKKwkJCXdyaXRlbChkd1ZRU3RhcnRMLAorCQkJCXZpYXBhcmluZm8tPmlvX3ZpcnQgKyBWSUFfUkVHX1RSQU5TUEFDRSk7CisJCQl3cml0ZWwoZHdWUUVuZEwsCisJCQkJdmlhcGFyaW5mby0+aW9fdmlydCArIFZJQV9SRUdfVFJBTlNQQUNFKTsKKwkJCXdyaXRlbChkd1ZRTGVuLAorCQkJCXZpYXBhcmluZm8tPmlvX3ZpcnQgKyBWSUFfUkVHX1RSQU5TUEFDRSk7CisJCQlicmVhazsKKwkJfQorCX0gZWxzZSB7CisJCS8qIERpc2FibGUgVlEgKi8KKwkJc3dpdGNoICh2aWFwYXJpbmZvLT5jaGlwX2luZm8tPmdmeF9jaGlwX25hbWUpIHsKKwkJY2FzZSBVTklDSFJPTUVfSzhNODkwOgorCQljYXNlIFVOSUNIUk9NRV9QNE05MDA6CisJCQl3cml0ZWwoMHgwMDEwMDAwMCwKKwkJCQl2aWFwYXJpbmZvLT5pb192aXJ0ICsgVklBX1JFR19DUl9UUkFOU0VUKTsKKwkJCXdyaXRlbCgweDc0MzAxMDAwLAorCQkJCXZpYXBhcmluZm8tPmlvX3ZpcnQgKyBWSUFfUkVHX0NSX1RSQU5TUEFDRSk7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXdyaXRlbCgweDAwRkUwMDAwLAorCQkJCXZpYXBhcmluZm8tPmlvX3ZpcnQgKyBWSUFfUkVHX1RSQU5TRVQpOworCQkJd3JpdGVsKDB4MDAwMDAwMDQsCisJCQkJdmlhcGFyaW5mby0+aW9fdmlydCArIFZJQV9SRUdfVFJBTlNQQUNFKTsKKwkJCXdyaXRlbCgweDQwMDA4QzBGLAorCQkJCXZpYXBhcmluZm8tPmlvX3ZpcnQgKyBWSUFfUkVHX1RSQU5TUEFDRSk7CisJCQl3cml0ZWwoMHg0NDAwMDAwMCwKKwkJCQl2aWFwYXJpbmZvLT5pb192aXJ0ICsgVklBX1JFR19UUkFOU1BBQ0UpOworCQkJd3JpdGVsKDB4NDUwODBDMDQsCisJCQkJdmlhcGFyaW5mby0+aW9fdmlydCArIFZJQV9SRUdfVFJBTlNQQUNFKTsKKwkJCXdyaXRlbCgweDQ2ODAwNDA4LAorCQkJCXZpYXBhcmluZm8tPmlvX3ZpcnQgKyBWSUFfUkVHX1RSQU5TUEFDRSk7CisJCQlicmVhazsKKwkJfQorCX0KKworCXZpYWZiX3NldF8yZF9jb2xvcl9kZXB0aCh2aWFwYXJpbmZvLT5icHApOworCisJd3JpdGVsKDB4MCwgdmlhcGFyaW5mby0+aW9fdmlydCArIFZJQV9SRUdfU1JDQkFTRSk7CisJd3JpdGVsKDB4MCwgdmlhcGFyaW5mby0+aW9fdmlydCArIFZJQV9SRUdfRFNUQkFTRSk7CisKKwl3cml0ZWwoVklBX1BJVENIX0VOQUJMRSB8CisJCSAgICgoKHZpYXBhcmluZm8tPmhyZXMgKgorCQkgICAgICB2aWFwYXJpbmZvLT5icHAgPj4gMykgPj4gMykgfCAoKCh2aWFwYXJpbmZvLT5ocmVzICoKKwkJCQkJCSAgIHZpYXBhcmluZm8tPgorCQkJCQkJICAgYnBwID4+IDMpID4+IDMpIDw8IDE2KSksCisJCQkJCXZpYXBhcmluZm8tPmlvX3ZpcnQgKyBWSUFfUkVHX1BJVENIKTsKK30KKwordm9pZCB2aWFmYl9zZXRfMmRfY29sb3JfZGVwdGgoaW50IGJwcCkKK3sKKwl1MzIgZHdHRU1vZGU7CisKKwlkd0dFTW9kZSA9IHJlYWRsKHZpYXBhcmluZm8tPmlvX3ZpcnQgKyAweDA0KSAmIDB4RkZGRkZDRkY7CisKKwlzd2l0Y2ggKGJwcCkgeworCWNhc2UgMTY6CisJCWR3R0VNb2RlIHw9IFZJQV9HRU1fMTZicHA7CisJCWJyZWFrOworCWNhc2UgMzI6CisJCWR3R0VNb2RlIHw9IFZJQV9HRU1fMzJicHA7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWR3R0VNb2RlIHw9IFZJQV9HRU1fOGJwcDsKKwkJYnJlYWs7CisJfQorCisJLyogU2V0IEJQUCBhbmQgUGl0Y2ggKi8KKwl3cml0ZWwoZHdHRU1vZGUsIHZpYXBhcmluZm8tPmlvX3ZpcnQgKyBWSUFfUkVHX0dFTU9ERSk7Cit9CisKK3ZvaWQgdmlhZmJfaHdfY3Vyc29yX2luaXQodm9pZCkKK3sKKwkvKiBTZXQgQ3Vyc29yIEltYWdlIEJhc2UgQWRkcmVzcyAqLworCXdyaXRlbCh2aWFwYXJpbmZvLT5jdXJzb3Jfc3RhcnQsCisJCXZpYXBhcmluZm8tPmlvX3ZpcnQgKyBWSUFfUkVHX0NVUlNPUl9NT0RFKTsKKwl3cml0ZWwoMHgwLCB2aWFwYXJpbmZvLT5pb192aXJ0ICsgVklBX1JFR19DVVJTT1JfUE9TKTsKKwl3cml0ZWwoMHgwLCB2aWFwYXJpbmZvLT5pb192aXJ0ICsgVklBX1JFR19DVVJTT1JfT1JHKTsKKwl3cml0ZWwoMHgwLCB2aWFwYXJpbmZvLT5pb192aXJ0ICsgVklBX1JFR19DVVJTT1JfQkcpOworCXdyaXRlbCgweDAsIHZpYXBhcmluZm8tPmlvX3ZpcnQgKyBWSUFfUkVHX0NVUlNPUl9GRyk7Cit9CisKK3ZvaWQgdmlhZmJfc2hvd19od19jdXJzb3Ioc3RydWN0IGZiX2luZm8gKmluZm8sIGludCBTdGF0dXMpCit7CisJdTMyIHRlbXA7CisJdTMyIGlnYV9wYXRoID0gKChzdHJ1Y3QgdmlhZmJfcGFyICopKGluZm8tPnBhcikpLT5pZ2FfcGF0aDsKKworCXRlbXAgPSByZWFkbCh2aWFwYXJpbmZvLT5pb192aXJ0ICsgVklBX1JFR19DVVJTT1JfTU9ERSk7CisJc3dpdGNoIChTdGF0dXMpIHsKKwljYXNlIEhXX0N1cnNvcl9PTjoKKwkJdGVtcCB8PSAweDE7CisJCWJyZWFrOworCWNhc2UgSFdfQ3Vyc29yX09GRjoKKwkJdGVtcCAmPSAweEZGRkZGRkZFOworCQlicmVhazsKKwl9CisJc3dpdGNoIChpZ2FfcGF0aCkgeworCWNhc2UgSUdBMjoKKwkJdGVtcCB8PSAweDgwMDAwMDAwOworCQlicmVhazsKKwljYXNlIElHQTE6CisJZGVmYXVsdDoKKwkJdGVtcCAmPSAweDdGRkZGRkZGOworCX0KKwl3cml0ZWwodGVtcCwgdmlhcGFyaW5mby0+aW9fdmlydCArIFZJQV9SRUdfQ1VSU09SX01PREUpOworfQorCitpbnQgdmlhZmJfd2FpdF9lbmdpbmVfaWRsZSh2b2lkKQoreworCWludCBsb29wID0gMDsKKworCXdoaWxlICghKHJlYWRsKHZpYXBhcmluZm8tPmlvX3ZpcnQgKyBWSUFfUkVHX1NUQVRVUykgJgorCQkJVklBX1ZSX1FVRVVFX0JVU1kpICYmIChsb29wKysgPCBNQVhMT09QKSkKKwkJY3B1X3JlbGF4KCk7CisKKwl3aGlsZSAoKHJlYWRsKHZpYXBhcmluZm8tPmlvX3ZpcnQgKyBWSUFfUkVHX1NUQVRVUykgJgorCQkgICAgKFZJQV9DTURfUkdUUl9CVVNZIHwgVklBXzJEX0VOR19CVVNZIHwgVklBXzNEX0VOR19CVVNZKSkgJiYKKwkJICAgIChsb29wKysgPCBNQVhMT09QKSkKKwkJY3B1X3JlbGF4KCk7CisKKwlyZXR1cm4gbG9vcCA+PSBNQVhMT09QOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby92aWEvYWNjZWwuaCBiL2RyaXZlcnMvdmlkZW8vdmlhL2FjY2VsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjliZjg1NAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdmlkZW8vdmlhL2FjY2VsLmgKQEAgLTAsMCArMSwxNjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgMTk5OC0yMDA4IFZJQSBUZWNobm9sb2dpZXMsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAyMDAxLTIwMDggUzMgR3JhcGhpY3MsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKworICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOworICogZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVElFUyBPUiBSRVBSRVNFTlRBVElPTlM7IHdpdGhvdXQgZXZlbgorICogdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS5TZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sCisgKiA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICovCisKKyNpZm5kZWYgX19BQ0NFTF9IX18KKyNkZWZpbmUgX19BQ0NFTF9IX18KKworI2RlZmluZSBGQl9BQ0NFTF9WSUFfVU5JQ0hST01FICA1MAorCisvKiBNTUlPIEJhc2UgQWRkcmVzcyBEZWZpbml0aW9uICovCisjZGVmaW5lIE1NSU9fVkdBQkFTRSAgICAgICAgICAgICAgICAweDgwMDAKKyNkZWZpbmUgTU1JT19DUl9SRUFEICAgICAgICAgICAgICAgIChNTUlPX1ZHQUJBU0UgKyAweDNENCkKKyNkZWZpbmUgTU1JT19DUl9XUklURSAgICAgICAgICAgICAgIChNTUlPX1ZHQUJBU0UgKyAweDNENSkKKyNkZWZpbmUgTU1JT19TUl9SRUFEICAgICAgICAgICAgICAgIChNTUlPX1ZHQUJBU0UgKyAweDNDNCkKKyNkZWZpbmUgTU1JT19TUl9XUklURSAgICAgICAgICAgICAgIChNTUlPX1ZHQUJBU0UgKyAweDNDNSkKKworLyogSFcgQ3Vyc29yIFN0YXR1cyBEZWZpbmUgKi8KKyNkZWZpbmUgSFdfQ3Vyc29yX09OICAgIDAKKyNkZWZpbmUgSFdfQ3Vyc29yX09GRiAgIDEKKworI2RlZmluZSBDVVJTT1JfU0laRSAgICAgKDggKiAxMDI0KQorI2RlZmluZSBWUV9TSVpFICAgICAgICAgKDI1NiAqIDEwMjQpCisKKyNkZWZpbmUgVklBX01NSU9fQkxUQkFTRSAgICAgICAgMHgyMDAwMDAKKyNkZWZpbmUgVklBX01NSU9fQkxUU0laRSAgICAgICAgMHgyMDAwMDAKKworLyogRGVmaW5lcyBmb3IgMkQgcmVnaXN0ZXJzICovCisjZGVmaW5lIFZJQV9SRUdfR0VDTUQgICAgICAgICAgIDB4MDAwCisjZGVmaW5lIFZJQV9SRUdfR0VNT0RFICAgICAgICAgIDB4MDA0CisjZGVmaW5lIFZJQV9SRUdfU1JDUE9TICAgICAgICAgIDB4MDA4CisjZGVmaW5lIFZJQV9SRUdfRFNUUE9TICAgICAgICAgIDB4MDBDCisvKiB3aWR0aCBhbmQgaGVpZ2h0ICovCisjZGVmaW5lIFZJQV9SRUdfRElNRU5TSU9OICAgICAgIDB4MDEwCisjZGVmaW5lIFZJQV9SRUdfUEFUQUREUiAgICAgICAgIDB4MDE0CisjZGVmaW5lIFZJQV9SRUdfRkdDT0xPUiAgICAgICAgIDB4MDE4CisjZGVmaW5lIFZJQV9SRUdfQkdDT0xPUiAgICAgICAgIDB4MDFDCisvKiB0b3AgYW5kIGxlZnQgb2YgY2xpcHBpbmcgKi8KKyNkZWZpbmUgVklBX1JFR19DTElQVEwgICAgICAgICAgMHgwMjAKKy8qIGJvdHRvbSBhbmQgcmlnaHQgb2YgY2xpcHBpbmcgKi8KKyNkZWZpbmUgVklBX1JFR19DTElQQlIgICAgICAgICAgMHgwMjQKKyNkZWZpbmUgVklBX1JFR19PRkZTRVQgICAgICAgICAgMHgwMjgKKy8qIGNvbG9yIGtleSBjb250cm9sICovCisjZGVmaW5lIFZJQV9SRUdfS0VZQ09OVFJPTCAgICAgIDB4MDJDCisjZGVmaW5lIFZJQV9SRUdfU1JDQkFTRSAgICAgICAgIDB4MDMwCisjZGVmaW5lIFZJQV9SRUdfRFNUQkFTRSAgICAgICAgIDB4MDM0CisvKiBwaXRjaCBvZiBzcmMgYW5kIGRzdCAqLworI2RlZmluZSBWSUFfUkVHX1BJVENIICAgICAgICAgICAweDAzOAorI2RlZmluZSBWSUFfUkVHX01PTk9QQVQwICAgICAgICAweDAzQworI2RlZmluZSBWSUFfUkVHX01PTk9QQVQxICAgICAgICAweDA0MAorLyogZnJvbSAweDEwMCB0byAweDFmZiAqLworI2RlZmluZSBWSUFfUkVHX0NPTE9SUEFUICAgICAgICAweDEwMAorCisvKiBWSUFfUkVHX1BJVENIKDB4MzgpOiBQaXRjaCBTZXR0aW5nICovCisjZGVmaW5lIFZJQV9QSVRDSF9FTkFCTEUgICAgICAgIDB4ODAwMDAwMDAKKworLyogZGVmaW5lcyBmb3IgVklBIEhXIGN1cnNvciByZWdpc3RlcnMgKi8KKyNkZWZpbmUgVklBX1JFR19DVVJTT1JfTU9ERSAgICAgMHgyRDAKKyNkZWZpbmUgVklBX1JFR19DVVJTT1JfUE9TICAgICAgMHgyRDQKKyNkZWZpbmUgVklBX1JFR19DVVJTT1JfT1JHICAgICAgMHgyRDgKKyNkZWZpbmUgVklBX1JFR19DVVJTT1JfQkcgICAgICAgMHgyREMKKyNkZWZpbmUgVklBX1JFR19DVVJTT1JfRkcgICAgICAgMHgyRTAKKworLyogVklBX1JFR19HRU1PREUoMHgwNCk6IEdFIG1vZGUgKi8KKyNkZWZpbmUgVklBX0dFTV84YnBwICAgICAgICAgICAgMHgwMDAwMDAwMAorI2RlZmluZSBWSUFfR0VNXzE2YnBwICAgICAgICAgICAweDAwMDAwMTAwCisjZGVmaW5lIFZJQV9HRU1fMzJicHAgICAgICAgICAgIDB4MDAwMDAzMDAKKworLyogVklBX1JFR19HRUNNRCgweDAwKTogMkQgRW5naW5lIENvbW1hbmQgICovCisjZGVmaW5lIFZJQV9HRUNfTk9PUCAgICAgICAgICAgIDB4MDAwMDAwMDAKKyNkZWZpbmUgVklBX0dFQ19CTFQgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBWSUFfR0VDX0xJTkUgICAgICAgICAgICAweDAwMDAwMDA1CisKKy8qIFJvdGF0ZSBDb21tYW5kICovCisjZGVmaW5lIFZJQV9HRUNfUk9UICAgICAgICAgICAgIDB4MDAwMDAwMDgKKworI2RlZmluZSBWSUFfR0VDX1NSQ19YWSAgICAgICAgICAweDAwMDAwMDAwCisjZGVmaW5lIFZJQV9HRUNfU1JDX0xJTkVBUiAgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgVklBX0dFQ19EU1RfWFkgICAgICAgICAgMHgwMDAwMDAwMAorI2RlZmluZSBWSUFfR0VDX0RTVF9MSU5SQVQgICAgICAweDAwMDAwMDIwCisKKyNkZWZpbmUgVklBX0dFQ19TUkNfRkIgICAgICAgICAgMHgwMDAwMDAwMAorI2RlZmluZSBWSUFfR0VDX1NSQ19TWVMgICAgICAgICAweDAwMDAwMDQwCisjZGVmaW5lIFZJQV9HRUNfRFNUX0ZCICAgICAgICAgIDB4MDAwMDAwMDAKKyNkZWZpbmUgVklBX0dFQ19EU1RfU1lTICAgICAgICAgMHgwMDAwMDA4MAorCisvKiBzb3VyY2UgaXMgbW9ubyAqLworI2RlZmluZSBWSUFfR0VDX1NSQ19NT05PICAgICAgICAweDAwMDAwMTAwCisvKiBwYXR0ZXJuIGlzIG1vbm8gKi8KKyNkZWZpbmUgVklBX0dFQ19QQVRfTU9OTyAgICAgICAgMHgwMDAwMDIwMAorLyogbW9ubyBzcmMgaXMgb3BhcXVlICovCisjZGVmaW5lIFZJQV9HRUNfTVNSQ19PUEFRVUUgICAgIDB4MDAwMDAwMDAKKy8qIG1vbm8gc3JjIGlzIHRyYW5zcGFyZW50ICovCisjZGVmaW5lIFZJQV9HRUNfTVNSQ19UUkFOUyAgICAgIDB4MDAwMDA0MDAKKy8qIHBhdHRlcm4gaXMgaW4gZnJhbWUgYnVmZmVyICovCisjZGVmaW5lIFZJQV9HRUNfUEFUX0ZCICAgICAgICAgIDB4MDAwMDAwMDAKKy8qIHBhdHRlcm4gaXMgZnJvbSByZWcgc2V0dGluZyAqLworI2RlZmluZSBWSUFfR0VDX1BBVF9SRUcgICAgICAgICAweDAwMDAwODAwCisKKyNkZWZpbmUgVklBX0dFQ19DTElQX0RJU0FCTEUgICAgMHgwMDAwMDAwMAorI2RlZmluZSBWSUFfR0VDX0NMSVBfRU5BQkxFICAgICAweDAwMDAxMDAwCisKKyNkZWZpbmUgVklBX0dFQ19GSVhDT0xPUl9QQVQgICAgMHgwMDAwMjAwMAorCisjZGVmaW5lIFZJQV9HRUNfSU5DWCAgICAgICAgICAgIDB4MDAwMDAwMDAKKyNkZWZpbmUgVklBX0dFQ19ERUNZICAgICAgICAgICAgMHgwMDAwNDAwMAorI2RlZmluZSBWSUFfR0VDX0lOQ1kgICAgICAgICAgICAweDAwMDAwMDAwCisjZGVmaW5lIFZJQV9HRUNfREVDWCAgICAgICAgICAgIDB4MDAwMDgwMDAKKy8qIG1vbm8gcGF0dGVybiBpcyBvcGFxdWUgKi8KKyNkZWZpbmUgVklBX0dFQ19NUEFUX09QQVFVRSAgICAgMHgwMDAwMDAwMAorLyogbW9ubyBwYXR0ZXJuIGlzIHRyYW5zcGFyZW50ICovCisjZGVmaW5lIFZJQV9HRUNfTVBBVF9UUkFOUyAgICAgIDB4MDAwMTAwMDAKKworI2RlZmluZSBWSUFfR0VDX01PTk9fVU5QQUNLICAgICAweDAwMDAwMDAwCisjZGVmaW5lIFZJQV9HRUNfTU9OT19QQUNLICAgICAgIDB4MDAwMjAwMDAKKyNkZWZpbmUgVklBX0dFQ19NT05PX0RXT1JEICAgICAgMHgwMDAwMDAwMAorI2RlZmluZSBWSUFfR0VDX01PTk9fV09SRCAgICAgICAweDAwMDQwMDAwCisjZGVmaW5lIFZJQV9HRUNfTU9OT19CWVRFICAgICAgIDB4MDAwODAwMDAKKworI2RlZmluZSBWSUFfR0VDX0xBU1RQSVhFTF9PTiAgICAweDAwMDAwMDAwCisjZGVmaW5lIFZJQV9HRUNfTEFTVFBJWEVMX09GRiAgIDB4MDAxMDAwMDAKKyNkZWZpbmUgVklBX0dFQ19YX01BSk9SICAgICAgICAgMHgwMDAwMDAwMAorI2RlZmluZSBWSUFfR0VDX1lfTUFKT1IgICAgICAgICAweDAwMjAwMDAwCisjZGVmaW5lIFZJQV9HRUNfUVVJQ0tfU1RBUlQgICAgIDB4MDA4MDAwMDAKKworLyogZGVmaW5lcyBmb3IgVklBIDNEIHJlZ2lzdGVycyAqLworI2RlZmluZSBWSUFfUkVHX1NUQVRVUyAgICAgICAgICAweDQwMAorI2RlZmluZSBWSUFfUkVHX0NSX1RSQU5TRVQgICAgICAweDQxQworI2RlZmluZSBWSUFfUkVHX0NSX1RSQU5TUEFDRQkweDQyMAorI2RlZmluZSBWSUFfUkVHX1RSQU5TRVQgICAgICAgICAweDQzQworI2RlZmluZSBWSUFfUkVHX1RSQU5TUEFDRSAgICAgICAweDQ0MAorCisvKiBWSUFfUkVHX1NUQVRVUygweDQwMCk6IEVuZ2luZSBTdGF0dXMgKi8KKworLyogQ29tbWFuZCBSZWd1bGF0b3IgaXMgYnVzeSAqLworI2RlZmluZSBWSUFfQ01EX1JHVFJfQlVTWSAgICAgICAweDAwMDAwMDgwCisvKiAyRCBFbmdpbmUgaXMgYnVzeSAqLworI2RlZmluZSBWSUFfMkRfRU5HX0JVU1kgICAgICAgICAweDAwMDAwMDAyCisvKiAzRCBFbmdpbmUgaXMgYnVzeSAqLworI2RlZmluZSBWSUFfM0RfRU5HX0JVU1kgICAgICAgICAweDAwMDAwMDAxCisvKiBWaXJ0dWFsIFF1ZXVlIGlzIGJ1c3kgKi8KKyNkZWZpbmUgVklBX1ZSX1FVRVVFX0JVU1kgICAgICAgMHgwMDAyMDAwMAorCisjZGVmaW5lIE1BWExPT1AgICAgICAgICAgICAgICAgIDB4RkZGRkZGCisKK3ZvaWQgdmlhZmJfaW5pdF9hY2NlbCh2b2lkKTsKK3ZvaWQgdmlhZmJfaW5pdF8yZF9lbmdpbmUodm9pZCk7Cit2b2lkIHNldF8yZF9jb2xvcl9kZXB0aChpbnQpOwordm9pZCB2aWFmYl9od19jdXJzb3JfaW5pdCh2b2lkKTsKK3ZvaWQgdmlhZmJfc2hvd19od19jdXJzb3Ioc3RydWN0IGZiX2luZm8gKmluZm8sIGludCBTdGF0dXMpOyBpbnQKK3ZpYWZiX3dhaXRfZW5naW5lX2lkbGUodm9pZCk7IHZvaWQgdmlhZmJfc2V0XzJkX2NvbG9yX2RlcHRoKGludCBicHApOworCisjZW5kaWYgLyogX19BQ0NFTF9IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vdmlhL2NoaXAuaCBiL2RyaXZlcnMvdmlkZW8vdmlhL2NoaXAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZGU5NWVkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy92aWRlby92aWEvY2hpcC5oCkBAIC0wLDAgKzEsMTkwIEBACisvKgorICogQ29weXJpZ2h0IDE5OTgtMjAwOCBWSUEgVGVjaG5vbG9naWVzLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgMjAwMS0yMDA4IFMzIEdyYXBoaWNzLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKKyAqIGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRJRVMgT1IgUkVQUkVTRU5UQVRJT05TOyB3aXRob3V0IGV2ZW4KKyAqIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UuU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogZm9yIG1vcmUgZGV0YWlscy4KKworICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLAorICogNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworI2lmbmRlZiBfX0NISVBfSF9fCisjZGVmaW5lIF9fQ0hJUF9IX18KKworI2luY2x1ZGUgImdsb2JhbC5oIgorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogRGVmaW5pdGlvbiBHcmFwaGljIENoaXAgSW5mb3JtYXRpb24gKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNkZWZpbmUgICAgIFBDSV9WSUFfVkVORE9SX0lEICAgICAgIDB4MTEwNgorCisvKiBEZWZpbmUgVklBIEdyYXBoaWMgQ2hpcCBOYW1lICovCisjZGVmaW5lICAgICBVTklDSFJPTUVfQ0xFMjY2ICAgICAgICAxCisjZGVmaW5lICAgICBVTklDSFJPTUVfQ0xFMjY2X0RJRCAgICAweDMxMjIKKyNkZWZpbmUgICAgIENMRTI2Nl9SRVZJU0lPTl9BWCAgICAgIDB4MEEKKyNkZWZpbmUgICAgIENMRTI2Nl9SRVZJU0lPTl9DWCAgICAgIDB4MEMKKworI2RlZmluZSAgICAgVU5JQ0hST01FX0s0MDAgICAgICAgICAgMgorI2RlZmluZSAgICAgVU5JQ0hST01FX0s0MDBfRElEICAgICAgMHg3MjA1CisKKyNkZWZpbmUgICAgIFVOSUNIUk9NRV9LODAwICAgICAgICAgIDMKKyNkZWZpbmUgICAgIFVOSUNIUk9NRV9LODAwX0RJRCAgICAgIDB4MzEwOAorCisjZGVmaW5lICAgICBVTklDSFJPTUVfUE04MDAgICAgICAgICA0CisjZGVmaW5lICAgICBVTklDSFJPTUVfUE04MDBfRElEICAgICAweDMxMTgKKworI2RlZmluZSAgICAgVU5JQ0hST01FX0NONzAwICAgICAgICAgNQorI2RlZmluZSAgICAgVU5JQ0hST01FX0NONzAwX0RJRCAgICAgMHgzMzQ0CisKKyNkZWZpbmUgICAgIFVOSUNIUk9NRV9DWDcwMCAgICAgICAgIDYKKyNkZWZpbmUgICAgIFVOSUNIUk9NRV9DWDcwMF9ESUQgICAgIDB4MzE1NworI2RlZmluZSAgICAgQ1g3MDBfUkVWSVNJT05fNzAwICAgICAgMHgwCisjZGVmaW5lICAgICBDWDcwMF9SRVZJU0lPTl83MDBNICAgICAweDEKKyNkZWZpbmUgICAgIENYNzAwX1JFVklTSU9OXzcwME0yICAgIDB4MgorCisjZGVmaW5lICAgICBVTklDSFJPTUVfQ043NTAgICAgICAgICA3CisjZGVmaW5lICAgICBVTklDSFJPTUVfQ043NTBfRElEICAgICAweDMyMjUKKworI2RlZmluZSAgICAgVU5JQ0hST01FX0s4TTg5MCAgICAgICAgOAorI2RlZmluZSAgICAgVU5JQ0hST01FX0s4TTg5MF9ESUQgICAgMHgzMjMwCisKKyNkZWZpbmUgICAgIFVOSUNIUk9NRV9QNE04OTAgICAgICAgIDkKKyNkZWZpbmUgICAgIFVOSUNIUk9NRV9QNE04OTBfRElEICAgIDB4MzM0MworCisjZGVmaW5lICAgICBVTklDSFJPTUVfUDRNOTAwICAgICAgICAxMAorI2RlZmluZSAgICAgVU5JQ0hST01FX1A0TTkwMF9ESUQgICAgMHgzMzcxCisKKyNkZWZpbmUgICAgIFVOSUNIUk9NRV9WWDgwMCAgICAgICAgIDExCisjZGVmaW5lICAgICBVTklDSFJPTUVfVlg4MDBfRElEICAgICAweDExMjIKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogRGVmaW5pdGlvbiBUTURTIFRyYXNtaXR0ZXIgSW5mb3JtYXRpb24gICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBEZWZpbml0aW9uIFRNRFMgVHJhc21pdHRlciBJbmRleCAqLworI2RlZmluZSAgICAgTk9OX1RNRFNfVFJBTlNNSVRURVIgICAgMHgwMAorI2RlZmluZSAgICAgVlQxNjMyX1RNRFMgICAgICAgICAgICAgMHgwMQorI2RlZmluZSAgICAgSU5URUdSQVRFRF9UTURTICAgICAgICAgMHg0MgorCisvKiBEZWZpbml0aW9uIFRNRFMgVHJhc21pdHRlciBJMkMgU2xhdmUgQWRkcmVzcyAqLworI2RlZmluZSAgICAgVlQxNjMyX1RNRFNfSTJDX0FERFIgICAgMHgxMAorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBEZWZpbml0aW9uIExWRFMgVHJhc21pdHRlciBJbmZvcm1hdGlvbiAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIERlZmluaXRpb24gTFZEUyBUcmFzbWl0dGVyIEluZGV4ICovCisjZGVmaW5lICAgICBOT05fTFZEU19UUkFOU01JVFRFUiAgICAweDAwCisjZGVmaW5lICAgICBWVDE2MzFfTFZEUyAgICAgICAgICAgICAweDAxCisjZGVmaW5lICAgICBWVDE2MzZfTFZEUyAgICAgICAgICAgICAweDBFCisjZGVmaW5lICAgICBJTlRFR1JBVEVEX0xWRFMgICAgICAgICAweDQxCisKKy8qIERlZmluaXRpb24gRGlnaXRhbCBUcmFuc21pdHRlciBNb2RlICovCisjZGVmaW5lICAgICBUWF9EQVRBXzEyX0JJVFMgICAgICAgICAweDAxCisjZGVmaW5lICAgICBUWF9EQVRBXzI0X0JJVFMgICAgICAgICAweDAyCisjZGVmaW5lICAgICBUWF9EQVRBX0REUl9NT0RFICAgICAgICAweDA0CisjZGVmaW5lICAgICBUWF9EQVRBX1NEUl9NT0RFICAgICAgICAweDA4CisKKy8qIERlZmluaXRpb24gTFZEUyBUcmFzbWl0dGVyIEkyQyBTbGF2ZSBBZGRyZXNzICovCisjZGVmaW5lICAgICBWVDE2MzFfTFZEU19JMkNfQUREUiAgICAweDcwCisjZGVmaW5lICAgICBWVDMyNzFfTFZEU19JMkNfQUREUiAgICAweDgwCisjZGVmaW5lICAgICBWVDE2MzZfTFZEU19JMkNfQUREUiAgICAweDgwCisKK3N0cnVjdCB0bWRzX2NoaXBfaW5mb3JtYXRpb24geworCWludCB0bWRzX2NoaXBfbmFtZTsKKwlpbnQgdG1kc19jaGlwX3NsYXZlX2FkZHI7CisJaW50IGR2aV9wYW5lbF9pZDsKKwlpbnQgZGF0YV9tb2RlOworCWludCBvdXRwdXRfaW50ZXJmYWNlOworCWludCBpMmNfcG9ydDsKKwlpbnQgZGV2aWNlX3R5cGU7Cit9OworCitzdHJ1Y3QgbHZkc19jaGlwX2luZm9ybWF0aW9uIHsKKwlpbnQgbHZkc19jaGlwX25hbWU7CisJaW50IGx2ZHNfY2hpcF9zbGF2ZV9hZGRyOworCWludCBkYXRhX21vZGU7CisJaW50IG91dHB1dF9pbnRlcmZhY2U7CisJaW50IGkyY19wb3J0OworfTsKKworc3RydWN0IGNoaXBfaW5mb3JtYXRpb24geworCWludCBnZnhfY2hpcF9uYW1lOworCWludCBnZnhfY2hpcF9yZXZpc2lvbjsKKwlpbnQgY2hpcF9vbl9zbG90OworCXN0cnVjdCB0bWRzX2NoaXBfaW5mb3JtYXRpb24gdG1kc19jaGlwX2luZm87CisJc3RydWN0IGx2ZHNfY2hpcF9pbmZvcm1hdGlvbiBsdmRzX2NoaXBfaW5mbzsKKwlzdHJ1Y3QgbHZkc19jaGlwX2luZm9ybWF0aW9uIGx2ZHNfY2hpcF9pbmZvMjsKK307CisKK3N0cnVjdCBjcnRfc2V0dGluZ19pbmZvcm1hdGlvbiB7CisJaW50IGlnYV9wYXRoOworCWludCBoX2FjdGl2ZTsKKwlpbnQgdl9hY3RpdmU7CisJaW50IGJwcDsKKwlpbnQgcmVmcmVzaF9yYXRlOworfTsKKworc3RydWN0IHRtZHNfc2V0dGluZ19pbmZvcm1hdGlvbiB7CisJaW50IGlnYV9wYXRoOworCWludCBoX2FjdGl2ZTsKKwlpbnQgdl9hY3RpdmU7CisJaW50IGJwcDsKKwlpbnQgcmVmcmVzaF9yYXRlOworCWludCBnZXRfZHZpX3NpemVfbWV0aG9kOworCWludCBtYXhfcGl4ZWxfY2xvY2s7CisJaW50IGR2aV9wYW5lbF9zaXplOworCWludCBkdmlfcGFuZWxfaHJlczsKKwlpbnQgZHZpX3BhbmVsX3ZyZXM7CisJaW50IG5hdGl2ZV9zaXplOworfTsKKworc3RydWN0IGx2ZHNfc2V0dGluZ19pbmZvcm1hdGlvbiB7CisJaW50IGlnYV9wYXRoOworCWludCBoX2FjdGl2ZTsKKwlpbnQgdl9hY3RpdmU7CisJaW50IGJwcDsKKwlpbnQgcmVmcmVzaF9yYXRlOworCWludCBnZXRfbGNkX3NpemVfbWV0aG9kOworCWludCBsY2RfcGFuZWxfaWQ7CisJaW50IGxjZF9wYW5lbF9zaXplOworCWludCBsY2RfcGFuZWxfaHJlczsKKwlpbnQgbGNkX3BhbmVsX3ZyZXM7CisJaW50IGRpc3BsYXlfbWV0aG9kOworCWludCBkZXZpY2VfbGNkX2R1YWxlZGdlOworCWludCBMQ0REaXRoZXJpbmc7CisJaW50IGxjZF9tb2RlOworCXUzMiB2Y2xrOwkJLypwYW5lbCBtb2RlIGNsb2NrIHZhbHVlICovCit9OworCitzdHJ1Y3QgR0ZYX0RQQV9TRVRUSU5HIHsKKwlpbnQgQ2xrUmFuZ2VJbmRleDsKKwl1OCBEVlAwOwkJLyogQ1I5NlszOjBdICovCisJdTggRFZQMERhdGFEcmlfUzE7CS8qIFNSMkFbNV0gICAqLworCXU4IERWUDBEYXRhRHJpX1M7CS8qIFNSMUJbMV0gICAqLworCXU4IERWUDBDbG9ja0RyaV9TMTsJLyogU1IyQVs0XSAgICovCisJdTggRFZQMENsb2NrRHJpX1M7CS8qIFNSMUVbMl0gICAqLworCXU4IERWUDE7CQkvKiBDUjlCWzM6MF0gKi8KKwl1OCBEVlAxRHJpdmluZzsJCS8qIFNSNjVbMzowXSwgRGF0YSBhbmQgQ2xvY2sgZHJpdmluZyAqLworCXU4IERGUEhpZ2g7CQkvKiBDUjk3WzM6MF0gKi8KKwl1OCBERlBMb3c7CQkvKiBDUjk5WzM6MF0gKi8KKworfTsKKworc3RydWN0IFZUMTYzNl9EUEFfU0VUVElORyB7CisJaW50IFBhbmVsU2l6ZUlEOworCXU4IENMS19TRUxfU1QxOworCXU4IENMS19TRUxfU1QyOworfTsKKyNlbmRpZiAvKiBfX0NISVBfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3ZpYS9kZWJ1Zy5oIGIvZHJpdmVycy92aWRlby92aWEvZGVidWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NmVhY2MyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy92aWRlby92aWEvZGVidWcuaApAQCAtMCwwICsxLDQxIEBACisvKgorICogQ29weXJpZ2h0IDE5OTgtMjAwOCBWSUEgVGVjaG5vbG9naWVzLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgMjAwMS0yMDA4IFMzIEdyYXBoaWNzLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKKyAqIGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRJRVMgT1IgUkVQUkVTRU5UQVRJT05TOyB3aXRob3V0IGV2ZW4KKyAqIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UuU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogZm9yIG1vcmUgZGV0YWlscy4KKworICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLAorICogNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworI2lmbmRlZiBfX0RFQlVHX0hfXworI2RlZmluZSBfX0RFQlVHX0hfXworCisjaWZuZGVmIFZJQUZCX0RFQlVHCisjZGVmaW5lIFZJQUZCX0RFQlVHIDAKKyNlbmRpZgorCisjaWYgVklBRkJfREVCVUcKKyNkZWZpbmUgREVCVUdfTVNHKGYsIGEuLi4pICAgcHJpbnRrKGYsICMjIGEpCisjZWxzZQorI2RlZmluZSBERUJVR19NU0coZiwgYS4uLikKKyNlbmRpZgorCisjZGVmaW5lIFZJQUZCX1dBUk4gMAorI2lmIFZJQUZCX1dBUk4KKyNkZWZpbmUgV0FSTl9NU0coZiwgYS4uLikgICBwcmludGsoZiwgIyMgYSkKKyNlbHNlCisjZGVmaW5lIFdBUk5fTVNHKGYsIGEuLi4pCisjZW5kaWYKKworI2VuZGlmIC8qIF9fREVCVUdfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3ZpYS9kdmkuYyBiL2RyaXZlcnMvdmlkZW8vdmlhL2R2aS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ2OTY1NDQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3ZpZGVvL3ZpYS9kdmkuYwpAQCAtMCwwICsxLDY4MiBAQAorLyoKKyAqIENvcHlyaWdodCAxOTk4LTIwMDggVklBIFRlY2hub2xvZ2llcywgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IDIwMDEtMjAwOCBTMyBHcmFwaGljcywgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247CisgKiBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5USUVTIE9SIFJFUFJFU0VOVEFUSU9OUzsgd2l0aG91dCBldmVuCisgKiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFLlNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGZvciBtb3JlIGRldGFpbHMuCisKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwKKyAqIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKyNpbmNsdWRlICJnbG9iYWwuaCIKKworc3RhdGljIHZvaWQgdG1kc19yZWdpc3Rlcl93cml0ZShpbnQgaW5kZXgsIHU4IGRhdGEpOworc3RhdGljIGludCB0bWRzX3JlZ2lzdGVyX3JlYWQoaW50IGluZGV4KTsKK3N0YXRpYyBpbnQgdG1kc19yZWdpc3Rlcl9yZWFkX2J5dGVzKGludCBpbmRleCwgdTggKmJ1ZmYsIGludCBidWZmX2xlbik7CitzdGF0aWMgaW50IGNoZWNrX3JlZHVjZV9ibGFua2luZ19tb2RlKGludCBtb2RlX2luZGV4LAorCWludCByZWZyZXNoX3JhdGUpOworc3RhdGljIGludCBkdmlfZ2V0X3BhbmVsX3NpemVfZnJvbV9EREN2MSh2b2lkKTsKK3N0YXRpYyBpbnQgZHZpX2dldF9wYW5lbF9zaXplX2Zyb21fRERDdjIodm9pZCk7CitzdGF0aWMgdW5zaWduZWQgY2hhciBkdmlfZ2V0X3BhbmVsX2luZm8odm9pZCk7CitzdGF0aWMgaW50IHZpYWZiX2R2aV9xdWVyeV9FRElEKHZvaWQpOworCitzdGF0aWMgaW50IGNoZWNrX3RtZHNfY2hpcChpbnQgZGV2aWNlX2lkX3N1YmFkZHIsIGludCBkZXZpY2VfaWQpCit7CisJaWYgKHRtZHNfcmVnaXN0ZXJfcmVhZChkZXZpY2VfaWRfc3ViYWRkcikgPT0gZGV2aWNlX2lkKQorCQlyZXR1cm4gT0s7CisJZWxzZQorCQlyZXR1cm4gRkFJTDsKK30KKwordm9pZCB2aWFmYl9pbml0X2R2aV9zaXplKHZvaWQpCit7CisJREVCVUdfTVNHKEtFUk5fSU5GTyAidmlhZmJfaW5pdF9kdmlfc2l6ZSgpXG4iKTsKKwlERUJVR19NU0coS0VSTl9JTkZPCisJCSJ2aWFwYXJpbmZvLT50bWRzX3NldHRpbmdfaW5mby0+Z2V0X2R2aV9zaXplX21ldGhvZCAlZFxuIiwKKwkJICB2aWFwYXJpbmZvLT50bWRzX3NldHRpbmdfaW5mby0+Z2V0X2R2aV9zaXplX21ldGhvZCk7CisKKwlzd2l0Y2ggKHZpYXBhcmluZm8tPnRtZHNfc2V0dGluZ19pbmZvLT5nZXRfZHZpX3NpemVfbWV0aG9kKSB7CisJY2FzZSBHRVRfRFZJX1NJWkVfQllfU1lTVEVNX0JJT1M6CisJCWJyZWFrOworCWNhc2UgR0VUX0RWSV9TWklFX0JZX0hXX1NUUkFQUElORzoKKwkJYnJlYWs7CisJY2FzZSBHRVRfRFZJX1NJWkVfQllfVkdBX0JJT1M6CisJZGVmYXVsdDoKKwkJZHZpX2dldF9wYW5lbF9pbmZvKCk7CisJCWJyZWFrOworCX0KKwlyZXR1cm47Cit9CisKK2ludCB2aWFmYl90bWRzX3RyYXNtaXR0ZXJfaWRlbnRpZnkodm9pZCkKK3sKKwl1bnNpZ25lZCBjaGFyIHNyMmEgPSAwLCBzcjFlID0gMCwgc3IzZSA9IDA7CisKKwkvKiBUdXJuIG9uIG91cHV0dGluZyBwYWQgKi8KKwlzd2l0Y2ggKHZpYXBhcmluZm8tPmNoaXBfaW5mby0+Z2Z4X2NoaXBfbmFtZSkgeworCWNhc2UgVU5JQ0hST01FX0s4TTg5MDoKKwkgICAgLyo9KiBERlAgTG93IFBhZCBvbiAqPSovCisJCXNyMmEgPSB2aWFmYl9yZWFkX3JlZyhWSUFTUiwgU1IyQSk7CisJCXZpYWZiX3dyaXRlX3JlZ19tYXNrKFNSMkEsIFZJQVNSLCAweDAzLCBCSVQwICsgQklUMSk7CisJCWJyZWFrOworCisJY2FzZSBVTklDSFJPTUVfUDRNOTAwOgorCWNhc2UgVU5JQ0hST01FX1A0TTg5MDoKKwkJLyogREZQIExvdyBQYWQgb24gKi8KKwkJc3IyYSA9IHZpYWZiX3JlYWRfcmVnKFZJQVNSLCBTUjJBKTsKKwkJdmlhZmJfd3JpdGVfcmVnX21hc2soU1IyQSwgVklBU1IsIDB4MDMsIEJJVDAgKyBCSVQxKTsKKwkJLyogRFZQMCBQYWQgb24gKi8KKwkJc3IxZSA9IHZpYWZiX3JlYWRfcmVnKFZJQVNSLCBTUjFFKTsKKwkJdmlhZmJfd3JpdGVfcmVnX21hc2soU1IxRSwgVklBU1IsIDB4QzAsIEJJVDYgKyBCSVQ3KTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCSAgICAvKiBEVlAwL0RWUDEgUGFkIG9uICovCisJCXNyMWUgPSB2aWFmYl9yZWFkX3JlZyhWSUFTUiwgU1IxRSk7CisJCXZpYWZiX3dyaXRlX3JlZ19tYXNrKFNSMUUsIFZJQVNSLCAweEYwLCBCSVQ0ICsKKwkJCUJJVDUgKyBCSVQ2ICsgQklUNyk7CisJICAgIC8qIFNSM0VbMV1NdWx0aS1mdW5jdGlvbiBzZWxlY3Rpb246CisJICAgIDAgPSBFbXVsYXRlIEkyQyBhbmQgRERDIGJ1cyBieSBHUElPMi8zLzQuICovCisJCXNyM2UgPSB2aWFmYl9yZWFkX3JlZyhWSUFTUiwgU1IzRSk7CisJCXZpYWZiX3dyaXRlX3JlZ19tYXNrKFNSM0UsIFZJQVNSLCAweDAsIEJJVDUpOworCQlicmVhazsKKwl9CisKKwkvKiBDaGVjayBmb3IgVlQxNjMyOiAqLworCXZpYXBhcmluZm8tPmNoaXBfaW5mby0+dG1kc19jaGlwX2luZm8udG1kc19jaGlwX25hbWUgPSBWVDE2MzJfVE1EUzsKKwl2aWFwYXJpbmZvLT5jaGlwX2luZm8tPgorCQl0bWRzX2NoaXBfaW5mby50bWRzX2NoaXBfc2xhdmVfYWRkciA9IFZUMTYzMl9UTURTX0kyQ19BRERSOworCXZpYXBhcmluZm8tPmNoaXBfaW5mby0+dG1kc19jaGlwX2luZm8uaTJjX3BvcnQgPSBJMkNQT1JUSU5ERVg7CisJaWYgKGNoZWNrX3RtZHNfY2hpcChWVDE2MzJfREVWSUNFX0lEX1JFRywgVlQxNjMyX0RFVklDRV9JRCkgIT0gRkFJTCkgeworCQkvKgorCQkgKiBDdXJyZW50bHkgb25seSBzdXBwb3J0IDEyYml0cyxkdWFsIGVkZ2UsYWRkIDI0Yml0cyBtb2RlIGxhdGVyCisJCSAqLworCQl0bWRzX3JlZ2lzdGVyX3dyaXRlKDB4MDgsIDB4M2IpOworCisJCURFQlVHX01TRyhLRVJOX0lORk8gIlxuIFZUMTYzMiBUTURTICEgXG4iKTsKKwkJREVCVUdfTVNHKEtFUk5fSU5GTyAiXG4gJTJkIiwKKwkJCSAgdmlhcGFyaW5mby0+Y2hpcF9pbmZvLT50bWRzX2NoaXBfaW5mby50bWRzX2NoaXBfbmFtZSk7CisJCURFQlVHX01TRyhLRVJOX0lORk8gIlxuICUyZCIsCisJCQkgIHZpYXBhcmluZm8tPmNoaXBfaW5mby0+dG1kc19jaGlwX2luZm8uaTJjX3BvcnQpOworCQlyZXR1cm4gT0s7CisJfSBlbHNlIHsKKwkJdmlhcGFyaW5mby0+Y2hpcF9pbmZvLT50bWRzX2NoaXBfaW5mby5pMmNfcG9ydCA9IEdQSU9QT1JUSU5ERVg7CisJCWlmIChjaGVja190bWRzX2NoaXAoVlQxNjMyX0RFVklDRV9JRF9SRUcsIFZUMTYzMl9ERVZJQ0VfSUQpCisJCSAgICAhPSBGQUlMKSB7CisJCQl0bWRzX3JlZ2lzdGVyX3dyaXRlKDB4MDgsIDB4M2IpOworCQkJREVCVUdfTVNHKEtFUk5fSU5GTyAiXG4gVlQxNjMyIFRNRFMgISBcbiIpOworCQkJREVCVUdfTVNHKEtFUk5fSU5GTyAiXG4gJTJkIiwKKwkJCQkgIHZpYXBhcmluZm8tPmNoaXBfaW5mby0+CisJCQkJICB0bWRzX2NoaXBfaW5mby50bWRzX2NoaXBfbmFtZSk7CisJCQlERUJVR19NU0coS0VSTl9JTkZPICJcbiAlMmQiLAorCQkJCSAgdmlhcGFyaW5mby0+Y2hpcF9pbmZvLT4KKwkJCQkgIHRtZHNfY2hpcF9pbmZvLmkyY19wb3J0KTsKKwkJCXJldHVybiBPSzsKKwkJfQorCX0KKworCXZpYXBhcmluZm8tPmNoaXBfaW5mby0+dG1kc19jaGlwX2luZm8udG1kc19jaGlwX25hbWUgPSBJTlRFR1JBVEVEX1RNRFM7CisKKwlpZiAoKHZpYXBhcmluZm8tPmNoaXBfaW5mby0+Z2Z4X2NoaXBfbmFtZSA9PSBVTklDSFJPTUVfQ1g3MDApICYmCisJICAgICgodmlhZmJfZGlzcGxheV9oYXJkd2FyZV9sYXlvdXQgPT0gSFdfTEFZT1VUX0RWSV9PTkxZKSB8fAorCSAgICAgKHZpYWZiX2Rpc3BsYXlfaGFyZHdhcmVfbGF5b3V0ID09IEhXX0xBWU9VVF9MQ0RfRFZJKSkpIHsKKwkJREVCVUdfTVNHKEtFUk5fSU5GTyAiXG4gSW50ZWdyYXRlZCBUTURTICEgXG4iKTsKKwkJcmV0dXJuIE9LOworCX0KKworCXN3aXRjaCAodmlhcGFyaW5mby0+Y2hpcF9pbmZvLT5nZnhfY2hpcF9uYW1lKSB7CisJY2FzZSBVTklDSFJPTUVfSzhNODkwOgorCQl2aWFmYl93cml0ZV9yZWcoU1IyQSwgVklBU1IsIHNyMmEpOworCQlicmVhazsKKworCWNhc2UgVU5JQ0hST01FX1A0TTkwMDoKKwljYXNlIFVOSUNIUk9NRV9QNE04OTA6CisJCXZpYWZiX3dyaXRlX3JlZyhTUjJBLCBWSUFTUiwgc3IyYSk7CisJCXZpYWZiX3dyaXRlX3JlZyhTUjFFLCBWSUFTUiwgc3IxZSk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJdmlhZmJfd3JpdGVfcmVnKFNSMUUsIFZJQVNSLCBzcjFlKTsKKwkJdmlhZmJfd3JpdGVfcmVnKFNSM0UsIFZJQVNSLCBzcjNlKTsKKwkJYnJlYWs7CisJfQorCisJdmlhcGFyaW5mby0+Y2hpcF9pbmZvLT4KKwkJdG1kc19jaGlwX2luZm8udG1kc19jaGlwX25hbWUgPSBOT05fVE1EU19UUkFOU01JVFRFUjsKKwl2aWFwYXJpbmZvLT5jaGlwX2luZm8tPnRtZHNfY2hpcF9pbmZvLgorCQl0bWRzX2NoaXBfc2xhdmVfYWRkciA9IFZUMTYzMl9UTURTX0kyQ19BRERSOworCXJldHVybiBGQUlMOworfQorCitzdGF0aWMgdm9pZCB0bWRzX3JlZ2lzdGVyX3dyaXRlKGludCBpbmRleCwgdTggZGF0YSkKK3sKKwl2aWFwYXJpbmZvLT5pMmNfc3R1ZmYuaTJjX3BvcnQgPQorCQl2aWFwYXJpbmZvLT5jaGlwX2luZm8tPnRtZHNfY2hpcF9pbmZvLmkyY19wb3J0OworCisJdmlhZmJfaTJjX3dyaXRlYnl0ZSh2aWFwYXJpbmZvLT5jaGlwX2luZm8tPnRtZHNfY2hpcF9pbmZvLgorCQl0bWRzX2NoaXBfc2xhdmVfYWRkciwgaW5kZXgsCisJCSAgICAgZGF0YSk7Cit9CisKK3N0YXRpYyBpbnQgdG1kc19yZWdpc3Rlcl9yZWFkKGludCBpbmRleCkKK3sKKwl1OCBkYXRhOworCisJdmlhcGFyaW5mby0+aTJjX3N0dWZmLmkyY19wb3J0ID0KKwkJdmlhcGFyaW5mby0+Y2hpcF9pbmZvLT50bWRzX2NoaXBfaW5mby5pMmNfcG9ydDsKKwl2aWFmYl9pMmNfcmVhZGJ5dGUoKHU4KSB2aWFwYXJpbmZvLT5jaGlwX2luZm8tPgorCSAgICB0bWRzX2NoaXBfaW5mby50bWRzX2NoaXBfc2xhdmVfYWRkciwKKwkJCSh1OCkgaW5kZXgsICZkYXRhKTsKKwlyZXR1cm4gZGF0YTsKK30KKworc3RhdGljIGludCB0bWRzX3JlZ2lzdGVyX3JlYWRfYnl0ZXMoaW50IGluZGV4LCB1OCAqYnVmZiwgaW50IGJ1ZmZfbGVuKQoreworCXZpYXBhcmluZm8tPmkyY19zdHVmZi5pMmNfcG9ydCA9CisJCXZpYXBhcmluZm8tPmNoaXBfaW5mby0+dG1kc19jaGlwX2luZm8uaTJjX3BvcnQ7CisJdmlhZmJfaTJjX3JlYWRieXRlcygodTgpIHZpYXBhcmluZm8tPmNoaXBfaW5mby0+dG1kc19jaGlwX2luZm8uCisJCQkgdG1kc19jaGlwX3NsYXZlX2FkZHIsICh1OCkgaW5kZXgsIGJ1ZmYsIGJ1ZmZfbGVuKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjaGVja19yZWR1Y2VfYmxhbmtpbmdfbW9kZShpbnQgbW9kZV9pbmRleCwKKwlpbnQgcmVmcmVzaF9yYXRlKQoreworCWlmIChyZWZyZXNoX3JhdGUgIT0gNjApCisJCXJldHVybiBmYWxzZTsKKworCXN3aXRjaCAobW9kZV9pbmRleCkgeworCQkvKiBGb2xsb3dpbmcgbW9kZXMgaGF2ZSByZWR1Y2UgYmxhbmtpbmcgbW9kZS4gKi8KKwljYXNlIFZJQV9SRVNfMTM2MFg3Njg6CisJY2FzZSBWSUFfUkVTXzE0MDBYMTA1MDoKKwljYXNlIFZJQV9SRVNfMTQ0MFg5MDA6CisJY2FzZSBWSUFfUkVTXzE2MDBYOTAwOgorCWNhc2UgVklBX1JFU18xNjgwWDEwNTA6CisJY2FzZSBWSUFfUkVTXzE5MjBYMTA4MDoKKwljYXNlIFZJQV9SRVNfMTkyMFgxMjAwOgorCQlicmVhazsKKworCWRlZmF1bHQ6CisJCURFQlVHX01TRyhLRVJOX0lORk8KKwkJCSAgIlRoaXMgZHZpIG1vZGUgJWQgaGF2ZSBubyByZWR1Y2UgYmxhbmtpbmcgbW9kZSFcbiIsCisJCQkgIG1vZGVfaW5kZXgpOworCQlyZXR1cm4gZmFsc2U7CisJfQorCisJcmV0dXJuIHRydWU7Cit9CisKKy8qIERWSSBTZXQgTW9kZSAqLwordm9pZCB2aWFmYl9kdmlfc2V0X21vZGUoaW50IHZpZGVvX2luZGV4LCBpbnQgbW9kZV9icHAsIGludCBzZXRfaWdhKQoreworCXN0cnVjdCBWaWRlb01vZGVUYWJsZSAqdmlkZW9Nb2RlID0gTlVMTDsKKwlzdHJ1Y3QgY3J0X21vZGVfdGFibGUgKnBEdmlUaW1pbmc7CisJdW5zaWduZWQgbG9uZyBkZXNpcmVQaXhlbENsb2NrLCBtYXhQaXhlbENsb2NrOworCWludCBzdGF0dXMgPSAwOworCXZpZGVvTW9kZSA9IHZpYWZiX2dldF9tb2RldGJsX3BvaW50ZXIodmlkZW9faW5kZXgpOworCXBEdmlUaW1pbmcgPSB2aWRlb01vZGUtPmNydGM7CisJZGVzaXJlUGl4ZWxDbG9jayA9IHBEdmlUaW1pbmctPmNsayAvIDEwMDAwMDA7CisJbWF4UGl4ZWxDbG9jayA9ICh1bnNpZ25lZCBsb25nKXZpYXBhcmluZm8tPgorCQl0bWRzX3NldHRpbmdfaW5mby0+bWF4X3BpeGVsX2Nsb2NrOworCisJREVCVUdfTVNHKEtFUk5fSU5GTyAiXG5EVklfc2V0X21vZGUhIVxuIik7CisKKwlpZiAoKG1heFBpeGVsQ2xvY2sgIT0gMCkgJiYgKGRlc2lyZVBpeGVsQ2xvY2sgPiBtYXhQaXhlbENsb2NrKSkgeworCQkvKkNoZWNrIGlmIHJlZHVjZS1ibGFua2luZyBtb2RlIGlzIGV4aXN0ICovCisJCXN0YXR1cyA9CisJCSAgICBjaGVja19yZWR1Y2VfYmxhbmtpbmdfbW9kZSh2aWRlb19pbmRleCwKKwkJCQkJICAgICAgIHBEdmlUaW1pbmctPnJlZnJlc2hfcmF0ZSk7CisJCWlmIChzdGF0dXMpIHsKKwkJCXZpZGVvX2luZGV4ICs9IDEwMDsJLypVc2UgcmVkdWNlLWJsYW5raW5nIG1vZGUgKi8KKwkJCXZpZGVvTW9kZSA9IHZpYWZiX2dldF9tb2RldGJsX3BvaW50ZXIodmlkZW9faW5kZXgpOworCQkJcER2aVRpbWluZyA9IHZpZGVvTW9kZS0+Y3J0YzsKKwkJCURFQlVHX01TRyhLRVJOX0lORk8KKwkJCQkgICJEVkkgdXNlIHJlZHVjZSBibGFua2luZyBtb2RlICVkISFcbiIsCisJCQkJICB2aWRlb19pbmRleCk7CisJCX0KKwl9CisJdmlhZmJfZmlsbF9jcnRjX3RpbWluZyhwRHZpVGltaW5nLCB2aWRlb19pbmRleCwgbW9kZV9icHAgLyA4LCBzZXRfaWdhKTsKKwl2aWFmYl9zZXRfb3V0cHV0X3BhdGgoREVWSUNFX0RWSSwgc2V0X2lnYSwKKwkJCXZpYXBhcmluZm8tPmNoaXBfaW5mby0+dG1kc19jaGlwX2luZm8ub3V0cHV0X2ludGVyZmFjZSk7Cit9CisKKy8qIFNlbnNlIERWSSBDb25uZWN0b3IgKi8KK2ludCB2aWFmYl9kdmlfc2Vuc2Uodm9pZCkKK3sKKwl1OCBSZWdTUjFFID0gMCwgUmVnU1IzRSA9IDAsIFJlZ0NSNkIgPSAwLCBSZWdDUjkxID0gMCwKKwkJUmVnQ1I5MyA9IDAsIFJlZ0NSOUIgPSAwLCBkYXRhOworCWludCByZXQgPSBmYWxzZTsKKworCURFQlVHX01TRyhLRVJOX0lORk8gInZpYWZiX2R2aV9zZW5zZSEhXG4iKTsKKworCWlmICh2aWFwYXJpbmZvLT5jaGlwX2luZm8tPmdmeF9jaGlwX25hbWUgPT0gVU5JQ0hST01FX0NMRTI2NikgeworCQkvKiBESTEgUGFkIG9uICovCisJCVJlZ1NSMUUgPSB2aWFmYl9yZWFkX3JlZyhWSUFTUiwgU1IxRSk7CisJCXZpYWZiX3dyaXRlX3JlZyhTUjFFLCBWSUFTUiwgUmVnU1IxRSB8IDB4MzApOworCisJCS8qIENSNkJbMF1WQ0sgSW5wdXQgU2VsZWN0aW9uOiAxID0gRXh0ZXJuYWwgY2xvY2suICovCisJCVJlZ0NSNkIgPSB2aWFmYl9yZWFkX3JlZyhWSUFDUiwgQ1I2Qik7CisJCXZpYWZiX3dyaXRlX3JlZyhDUjZCLCBWSUFDUiwgUmVnQ1I2QiB8IDB4MDgpOworCisJCS8qIENSOTFbNF0gVkREIE9uIFszXSBEYXRhIE9uIFsyXSBWRUUgT24gWzFdIEJhY2sgTGlnaHQgT2ZmCisJCSAgIFswXSBTb2Z0d2FyZSBDb250cm9sIFBvd2VyIFNlcXVlbmNlICovCisJCVJlZ0NSOTEgPSB2aWFmYl9yZWFkX3JlZyhWSUFDUiwgQ1I5MSk7CisJCXZpYWZiX3dyaXRlX3JlZyhDUjkxLCBWSUFDUiwgMHgxRCk7CisKKwkJLyogQ1I5M1s3XSBESTEgRGF0YSBTb3VyY2UgU2VsZWN0aW9uOiAxID0gRFNQMi4KKwkJICAgQ1I5M1s1XSBESTEgQ2xvY2sgU291cmNlOiAxID0gaW50ZXJuYWwuCisJCSAgIENSOTNbNF0gREkxIENsb2NrIFBvbGFyaXR5LgorCQkgICBDUjkzWzM6MV0gREkxIENsb2NrIEFkanVzdC4gQ1I5M1swXSBESTEgZW5hYmxlICovCisJCVJlZ0NSOTMgPSB2aWFmYl9yZWFkX3JlZyhWSUFDUiwgQ1I5Myk7CisJCXZpYWZiX3dyaXRlX3JlZyhDUjkzLCBWSUFDUiwgMHgwMSk7CisJfSBlbHNlIHsKKwkJLyogRFZQMC9EVlAxIFBhZCBvbiAqLworCQlSZWdTUjFFID0gdmlhZmJfcmVhZF9yZWcoVklBU1IsIFNSMUUpOworCQl2aWFmYl93cml0ZV9yZWcoU1IxRSwgVklBU1IsIFJlZ1NSMUUgfCAweEYwKTsKKworCQkvKiBTUjNFWzFdTXVsdGktZnVuY3Rpb24gc2VsZWN0aW9uOgorCQkgICAwID0gRW11bGF0ZSBJMkMgYW5kIEREQyBidXMgYnkgR1BJTzIvMy80LiAqLworCQlSZWdTUjNFID0gdmlhZmJfcmVhZF9yZWcoVklBU1IsIFNSM0UpOworCQl2aWFmYl93cml0ZV9yZWcoU1IzRSwgVklBU1IsIFJlZ1NSM0UgJiAofjB4MjApKTsKKworCQkvKiBDUjkxWzRdIFZERCBPbiBbM10gRGF0YSBPbiBbMl0gVkVFIE9uIFsxXSBCYWNrIExpZ2h0IE9mZgorCQkgICBbMF0gU29mdHdhcmUgQ29udHJvbCBQb3dlciBTZXF1ZW5jZSAqLworCQlSZWdDUjkxID0gdmlhZmJfcmVhZF9yZWcoVklBQ1IsIENSOTEpOworCQl2aWFmYl93cml0ZV9yZWcoQ1I5MSwgVklBQ1IsIDB4MUQpOworCisJCS8qQ1I5Qls0XSBEVlAxIERhdGEgU291cmNlIFNlbGVjdGlvbjogMSA9IEZyb20gc2Vjb25kYXJ5CisJCWRpc3BsYXkuQ1I5QlsyOjBdIERWUDEgQ2xvY2sgQWRqdXN0ICovCisJCVJlZ0NSOUIgPSB2aWFmYl9yZWFkX3JlZyhWSUFDUiwgQ1I5Qik7CisJCXZpYWZiX3dyaXRlX3JlZyhDUjlCLCBWSUFDUiwgMHgwMSk7CisJfQorCisJZGF0YSA9ICh1OCkgdG1kc19yZWdpc3Rlcl9yZWFkKDB4MDkpOworCWlmIChkYXRhICYgMHgwNCkKKwkJcmV0ID0gdHJ1ZTsKKworCWlmIChyZXQgPT0gZmFsc2UpIHsKKwkJaWYgKHZpYWZiX2R2aV9xdWVyeV9FRElEKCkpCisJCQlyZXQgPSB0cnVlOworCX0KKworCS8qIFJlc3RvcmUgc3RhdHVzICovCisJdmlhZmJfd3JpdGVfcmVnKFNSMUUsIFZJQVNSLCBSZWdTUjFFKTsKKwl2aWFmYl93cml0ZV9yZWcoQ1I5MSwgVklBQ1IsIFJlZ0NSOTEpOworCWlmICh2aWFwYXJpbmZvLT5jaGlwX2luZm8tPmdmeF9jaGlwX25hbWUgPT0gVU5JQ0hST01FX0NMRTI2NikgeworCQl2aWFmYl93cml0ZV9yZWcoQ1I2QiwgVklBQ1IsIFJlZ0NSNkIpOworCQl2aWFmYl93cml0ZV9yZWcoQ1I5MywgVklBQ1IsIFJlZ0NSOTMpOworCX0gZWxzZSB7CisJCXZpYWZiX3dyaXRlX3JlZyhTUjNFLCBWSUFTUiwgUmVnU1IzRSk7CisJCXZpYWZiX3dyaXRlX3JlZyhDUjlCLCBWSUFDUiwgUmVnQ1I5Qik7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworLyogUXVlcnkgRmxhdCBQYW5lbCdzIEVESUQgVGFibGUgVmVyc2lvbiBUaHJvdWdoIERWSSBDb25uZWN0b3IgKi8KK3N0YXRpYyBpbnQgdmlhZmJfZHZpX3F1ZXJ5X0VESUQodm9pZCkKK3sKKwl1OCBkYXRhMCwgZGF0YTE7CisJaW50IHJlc3RvcmU7CisKKwlERUJVR19NU0coS0VSTl9JTkZPICJ2aWFmYl9kdmlfcXVlcnlfRURJRCEhXG4iKTsKKworCXJlc3RvcmUgPSB2aWFwYXJpbmZvLT5jaGlwX2luZm8tPnRtZHNfY2hpcF9pbmZvLnRtZHNfY2hpcF9zbGF2ZV9hZGRyOworCXZpYXBhcmluZm8tPmNoaXBfaW5mby0+dG1kc19jaGlwX2luZm8udG1kc19jaGlwX3NsYXZlX2FkZHIgPSAweEEwOworCisJZGF0YTAgPSAodTgpIHRtZHNfcmVnaXN0ZXJfcmVhZCgweDAwKTsKKwlkYXRhMSA9ICh1OCkgdG1kc19yZWdpc3Rlcl9yZWFkKDB4MDEpOworCWlmICgoZGF0YTAgPT0gMCkgJiYgKGRhdGExID09IDB4RkYpKSB7CisJCXZpYXBhcmluZm8tPmNoaXBfaW5mby0+CisJCQl0bWRzX2NoaXBfaW5mby50bWRzX2NoaXBfc2xhdmVfYWRkciA9IHJlc3RvcmU7CisJCXJldHVybiBFRElEX1ZFUlNJT05fMTsJLyogRm91bmQgRURJRDEgVGFibGUgKi8KKwl9CisKKwlkYXRhMCA9ICh1OCkgdG1kc19yZWdpc3Rlcl9yZWFkKDB4MDApOworCXZpYXBhcmluZm8tPmNoaXBfaW5mby0+dG1kc19jaGlwX2luZm8udG1kc19jaGlwX3NsYXZlX2FkZHIgPSByZXN0b3JlOworCWlmIChkYXRhMCA9PSAweDIwKQorCQlyZXR1cm4gRURJRF9WRVJTSU9OXzI7CS8qIEZvdW5kIEVESUQyIFRhYmxlICovCisJZWxzZQorCQlyZXR1cm4gZmFsc2U7Cit9CisKKy8qCisgKgorICogaW50IGR2aV9nZXRfcGFuZWxfc2l6ZV9mcm9tX0REQ3YxKHZvaWQpCisgKgorICogICAgIC0gR2V0IFBhbmVsIFNpemUgVXNpbmcgRURJRDEgVGFibGUKKyAqCisgKiBSZXR1cm4gVHlwZTogICAgaW50CisgKgorICovCitzdGF0aWMgaW50IGR2aV9nZXRfcGFuZWxfc2l6ZV9mcm9tX0REQ3YxKHZvaWQpCit7CisJaW50IGksIG1heF9oID0gMCwgbWF4X3YgPSAwLCB0bXAsIHJlc3RvcmU7CisJdW5zaWduZWQgY2hhciByRGF0YTsKKwl1bnNpZ25lZCBjaGFyIEVESURfREFUQVsxOF07CisKKwlERUJVR19NU0coS0VSTl9JTkZPICJcbiBkdmlfZ2V0X3BhbmVsX3NpemVfZnJvbV9EREN2MSBcbiIpOworCisJcmVzdG9yZSA9IHZpYXBhcmluZm8tPmNoaXBfaW5mby0+dG1kc19jaGlwX2luZm8udG1kc19jaGlwX3NsYXZlX2FkZHI7CisJdmlhcGFyaW5mby0+Y2hpcF9pbmZvLT50bWRzX2NoaXBfaW5mby50bWRzX2NoaXBfc2xhdmVfYWRkciA9IDB4QTA7CisKKwlyRGF0YSA9IHRtZHNfcmVnaXN0ZXJfcmVhZCgweDIzKTsKKwlpZiAockRhdGEgJiAweDNDKQorCQltYXhfaCA9IDY0MDsKKwlpZiAockRhdGEgJiAweEMwKQorCQltYXhfaCA9IDcyMDsKKwlpZiAockRhdGEgJiAweDAzKQorCQltYXhfaCA9IDgwMDsKKworCXJEYXRhID0gdG1kc19yZWdpc3Rlcl9yZWFkKDB4MjQpOworCWlmIChyRGF0YSAmIDB4QzApCisJCW1heF9oID0gODAwOworCWlmIChyRGF0YSAmIDB4MUUpCisJCW1heF9oID0gMTAyNDsKKwlpZiAockRhdGEgJiAweDAxKQorCQltYXhfaCA9IDEyODA7CisKKwlmb3IgKGkgPSAweDI1OyBpIDwgMHg2RDsgaSsrKSB7CisJCXN3aXRjaCAoaSkgeworCQljYXNlIDB4MjY6CisJCWNhc2UgMHgyODoKKwkJY2FzZSAweDJBOgorCQljYXNlIDB4MkM6CisJCWNhc2UgMHgyRToKKwkJY2FzZSAweDMwOgorCQljYXNlIDB4MzI6CisJCWNhc2UgMHgzNDoKKwkJCXJEYXRhID0gdG1kc19yZWdpc3Rlcl9yZWFkKGkpOworCQkJaWYgKHJEYXRhID09IDEpCisJCQkJYnJlYWs7CisJCQkvKiBkYXRhID0gKGRhdGEgKyAzMSkgKiA4ICovCisJCQl0bXAgPSAockRhdGEgKyAzMSkgPDwgMzsKKwkJCWlmICh0bXAgPiBtYXhfaCkKKwkJCQltYXhfaCA9IHRtcDsKKwkJCWJyZWFrOworCisJCWNhc2UgMHgzNjoKKwkJY2FzZSAweDQ4OgorCQljYXNlIDB4NUE6CisJCWNhc2UgMHg2QzoKKwkJCXRtZHNfcmVnaXN0ZXJfcmVhZF9ieXRlcyhpLCBFRElEX0RBVEEsIDEwKTsKKwkJCWlmICghKEVESURfREFUQVswXSB8fCBFRElEX0RBVEFbMV0pKSB7CisJCQkJLyogVGhlIGZpcnN0IHR3byBieXRlIG11c3QgYmUgemVyby4gKi8KKwkJCQlpZiAoRURJRF9EQVRBWzNdID09IDB4RkQpIHsKKwkJCQkJLyogVG8gZ2V0IG1heCBwaXhlbCBjbG9jay4gKi8KKwkJCQkJdmlhcGFyaW5mby0+dG1kc19zZXR0aW5nX2luZm8tPgorCQkJCQltYXhfcGl4ZWxfY2xvY2sgPSBFRElEX0RBVEFbOV0gKiAxMDsKKwkJCQl9CisJCQl9CisJCQlicmVhazsKKworCQlkZWZhdWx0OgorCQkJYnJlYWs7CisJCX0KKwl9CisKKwlzd2l0Y2ggKG1heF9oKSB7CisJY2FzZSA2NDA6CisJCXZpYXBhcmluZm8tPnRtZHNfc2V0dGluZ19pbmZvLT5kdmlfcGFuZWxfc2l6ZSA9CisJCQlWSUFfUkVTXzY0MFg0ODA7CisJCWJyZWFrOworCWNhc2UgODAwOgorCQl2aWFwYXJpbmZvLT50bWRzX3NldHRpbmdfaW5mby0+ZHZpX3BhbmVsX3NpemUgPQorCQkJVklBX1JFU184MDBYNjAwOworCQlicmVhazsKKwljYXNlIDEwMjQ6CisJCXZpYXBhcmluZm8tPnRtZHNfc2V0dGluZ19pbmZvLT5kdmlfcGFuZWxfc2l6ZSA9CisJCQlWSUFfUkVTXzEwMjRYNzY4OworCQlicmVhazsKKwljYXNlIDEyODA6CisJCXZpYXBhcmluZm8tPnRtZHNfc2V0dGluZ19pbmZvLT5kdmlfcGFuZWxfc2l6ZSA9CisJCQlWSUFfUkVTXzEyODBYMTAyNDsKKwkJYnJlYWs7CisJY2FzZSAxNDAwOgorCQl2aWFwYXJpbmZvLT50bWRzX3NldHRpbmdfaW5mby0+ZHZpX3BhbmVsX3NpemUgPQorCQkJVklBX1JFU18xNDAwWDEwNTA7CisJCWJyZWFrOworCWNhc2UgMTQ0MDoKKwkJdmlhcGFyaW5mby0+dG1kc19zZXR0aW5nX2luZm8tPmR2aV9wYW5lbF9zaXplID0KKwkJCVZJQV9SRVNfMTQ0MFgxMDUwOworCQlicmVhazsKKwljYXNlIDE2MDA6CisJCXZpYXBhcmluZm8tPnRtZHNfc2V0dGluZ19pbmZvLT5kdmlfcGFuZWxfc2l6ZSA9CisJCQlWSUFfUkVTXzE2MDBYMTIwMDsKKwkJYnJlYWs7CisJY2FzZSAxOTIwOgorCQlpZiAobWF4X3YgPT0gMTIwMCkgeworCQkJdmlhcGFyaW5mby0+dG1kc19zZXR0aW5nX2luZm8tPmR2aV9wYW5lbF9zaXplID0KKwkJCQlWSUFfUkVTXzE5MjBYMTIwMDsKKwkJfSBlbHNlIHsKKwkJCXZpYXBhcmluZm8tPnRtZHNfc2V0dGluZ19pbmZvLT5kdmlfcGFuZWxfc2l6ZSA9CisJCQkJVklBX1JFU18xOTIwWDEwODA7CisJCX0KKworCQlicmVhazsKKwlkZWZhdWx0OgorCQl2aWFwYXJpbmZvLT50bWRzX3NldHRpbmdfaW5mby0+ZHZpX3BhbmVsX3NpemUgPQorCQkJVklBX1JFU18xMDI0WDc2ODsKKwkJREVCVUdfTVNHKEtFUk5fSU5GTyAiVW5rbm93IHBhbmVsIHNpemUgbWF4IHJlc29sdXRpb24gPSAlZCAhXAorCQkJCQkgc2V0IGRlZmF1bHQgcGFuZWwgc2l6ZS5cbiIsIG1heF9oKTsKKwkJYnJlYWs7CisJfQorCisJREVCVUdfTVNHKEtFUk5fSU5GTyAiRFZJIG1heCBwaXhlbGNsb2NrID0gJWRcbiIsCisJCSAgdmlhcGFyaW5mby0+dG1kc19zZXR0aW5nX2luZm8tPm1heF9waXhlbF9jbG9jayk7CisJdmlhcGFyaW5mby0+Y2hpcF9pbmZvLT50bWRzX2NoaXBfaW5mby50bWRzX2NoaXBfc2xhdmVfYWRkciA9IHJlc3RvcmU7CisJcmV0dXJuIHZpYXBhcmluZm8tPnRtZHNfc2V0dGluZ19pbmZvLT5kdmlfcGFuZWxfc2l6ZTsKK30KKworLyoKKyAqCisgKiBpbnQgZHZpX2dldF9wYW5lbF9zaXplX2Zyb21fRERDdjIodm9pZCkKKyAqCisgKiAgICAgLSBHZXQgUGFuZWwgU2l6ZSBVc2luZyBFRElEMiBUYWJsZQorICoKKyAqIFJldHVybiBUeXBlOiAgICBpbnQKKyAqCisgKi8KK3N0YXRpYyBpbnQgZHZpX2dldF9wYW5lbF9zaXplX2Zyb21fRERDdjIodm9pZCkKK3sKKwlpbnQgSFNpemUgPSAwLCByZXN0b3JlOworCXVuc2lnbmVkIGNoYXIgUl9CdWZmZXJbMl07CisKKwlERUJVR19NU0coS0VSTl9JTkZPICJcbiBkdmlfZ2V0X3BhbmVsX3NpemVfZnJvbV9EREN2MiBcbiIpOworCisJcmVzdG9yZSA9IHZpYXBhcmluZm8tPmNoaXBfaW5mby0+dG1kc19jaGlwX2luZm8udG1kc19jaGlwX3NsYXZlX2FkZHI7CisJdmlhcGFyaW5mby0+Y2hpcF9pbmZvLT50bWRzX2NoaXBfaW5mby50bWRzX2NoaXBfc2xhdmVfYWRkciA9IDB4QTI7CisKKwkvKiBIb3Jpem9udGFsOiAweDc2LCAweDc3ICovCisJdG1kc19yZWdpc3Rlcl9yZWFkX2J5dGVzKDB4NzYsIFJfQnVmZmVyLCAyKTsKKwlIU2l6ZSA9IFJfQnVmZmVyWzBdOworCUhTaXplICs9IFJfQnVmZmVyWzFdIDw8IDg7CisKKwlzd2l0Y2ggKEhTaXplKSB7CisJY2FzZSA2NDA6CisJCXZpYXBhcmluZm8tPnRtZHNfc2V0dGluZ19pbmZvLT5kdmlfcGFuZWxfc2l6ZSA9CisJCQlWSUFfUkVTXzY0MFg0ODA7CisJCWJyZWFrOworCWNhc2UgODAwOgorCQl2aWFwYXJpbmZvLT50bWRzX3NldHRpbmdfaW5mby0+ZHZpX3BhbmVsX3NpemUgPQorCQkJVklBX1JFU184MDBYNjAwOworCQlicmVhazsKKwljYXNlIDEwMjQ6CisJCXZpYXBhcmluZm8tPnRtZHNfc2V0dGluZ19pbmZvLT5kdmlfcGFuZWxfc2l6ZSA9CisJCQlWSUFfUkVTXzEwMjRYNzY4OworCQlicmVhazsKKwljYXNlIDEyODA6CisJCXZpYXBhcmluZm8tPnRtZHNfc2V0dGluZ19pbmZvLT5kdmlfcGFuZWxfc2l6ZSA9CisJCQlWSUFfUkVTXzEyODBYMTAyNDsKKwkJYnJlYWs7CisJY2FzZSAxNDAwOgorCQl2aWFwYXJpbmZvLT50bWRzX3NldHRpbmdfaW5mby0+ZHZpX3BhbmVsX3NpemUgPQorCQkJVklBX1JFU18xNDAwWDEwNTA7CisJCWJyZWFrOworCWNhc2UgMTQ0MDoKKwkJdmlhcGFyaW5mby0+dG1kc19zZXR0aW5nX2luZm8tPmR2aV9wYW5lbF9zaXplID0KKwkJCVZJQV9SRVNfMTQ0MFgxMDUwOworCQlicmVhazsKKwljYXNlIDE2MDA6CisJCXZpYXBhcmluZm8tPnRtZHNfc2V0dGluZ19pbmZvLT5kdmlfcGFuZWxfc2l6ZSA9CisJCQlWSUFfUkVTXzE2MDBYMTIwMDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJdmlhcGFyaW5mby0+dG1kc19zZXR0aW5nX2luZm8tPmR2aV9wYW5lbF9zaXplID0KKwkJCVZJQV9SRVNfMTAyNFg3Njg7CisJCURFQlVHX01TRyhLRVJOX0lORk8gIlVua25vdyBwYW5lbCBzaXplIG1heCByZXNvbHV0aW9uID0gJWQhXAorCQkJCQlzZXQgZGVmYXVsdCBwYW5lbCBzaXplLlxuIiwgSFNpemUpOworCQlicmVhazsKKwl9CisKKwl2aWFwYXJpbmZvLT5jaGlwX2luZm8tPnRtZHNfY2hpcF9pbmZvLnRtZHNfY2hpcF9zbGF2ZV9hZGRyID0gcmVzdG9yZTsKKwlyZXR1cm4gdmlhcGFyaW5mby0+dG1kc19zZXR0aW5nX2luZm8tPmR2aV9wYW5lbF9zaXplOworfQorCisvKgorICoKKyAqIHVuc2lnbmVkIGNoYXIgZHZpX2dldF9wYW5lbF9pbmZvKHZvaWQpCisgKgorICogICAgIC0gR2V0IFBhbmVsIFNpemUKKyAqCisgKiBSZXR1cm4gVHlwZTogICAgdW5zaWduZWQgY2hhcgorICovCitzdGF0aWMgdW5zaWduZWQgY2hhciBkdmlfZ2V0X3BhbmVsX2luZm8odm9pZCkKK3sKKwl1bnNpZ25lZCBjaGFyIGR2aXBhbmVsc2l6ZTsKKwlERUJVR19NU0coS0VSTl9JTkZPICJkdmlfZ2V0X3BhbmVsX2luZm8hIFxuIik7CisKKwl2aWFmYl9kdmlfc2Vuc2UoKTsKKwlzd2l0Y2ggKHZpYWZiX2R2aV9xdWVyeV9FRElEKCkpIHsKKwljYXNlIDE6CisJCWR2aV9nZXRfcGFuZWxfc2l6ZV9mcm9tX0REQ3YxKCk7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJZHZpX2dldF9wYW5lbF9zaXplX2Zyb21fRERDdjIoKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCisJREVCVUdfTVNHKEtFUk5fSU5GTyAiZHZpIHBhbmVsIHNpemUgaXMgJTJkIFxuIiwKKwkJICB2aWFwYXJpbmZvLT50bWRzX3NldHRpbmdfaW5mby0+ZHZpX3BhbmVsX3NpemUpOworCWR2aXBhbmVsc2l6ZSA9ICh1bnNpZ25lZCBjaGFyKSh2aWFwYXJpbmZvLT4KKwkJdG1kc19zZXR0aW5nX2luZm8tPmR2aV9wYW5lbF9zaXplKTsKKwlyZXR1cm4gZHZpcGFuZWxzaXplOworfQorCisvKiBJZiBEaXNhYmxlIERWSSwgdHVybiBvZmYgcGFkICovCit2b2lkIHZpYWZiX2R2aV9kaXNhYmxlKHZvaWQpCit7CisJaWYgKHZpYXBhcmluZm8tPmNoaXBfaW5mby0+CisJCXRtZHNfY2hpcF9pbmZvLm91dHB1dF9pbnRlcmZhY2UgPT0gSU5URVJGQUNFX0RWUDApCisJCXZpYWZiX3dyaXRlX3JlZyhTUjFFLCBWSUFTUiwKKwkJdmlhZmJfcmVhZF9yZWcoVklBU1IsIFNSMUUpICYgKH4weEMwKSk7CisKKwlpZiAodmlhcGFyaW5mby0+Y2hpcF9pbmZvLT4KKwkJdG1kc19jaGlwX2luZm8ub3V0cHV0X2ludGVyZmFjZSA9PSBJTlRFUkZBQ0VfRFZQMSkKKwkJdmlhZmJfd3JpdGVfcmVnKFNSMUUsIFZJQVNSLAorCQl2aWFmYl9yZWFkX3JlZyhWSUFTUiwgU1IxRSkgJiAofjB4MzApKTsKKworCWlmICh2aWFwYXJpbmZvLT5jaGlwX2luZm8tPgorCQl0bWRzX2NoaXBfaW5mby5vdXRwdXRfaW50ZXJmYWNlID09IElOVEVSRkFDRV9ERlBfSElHSCkKKwkJdmlhZmJfd3JpdGVfcmVnKFNSMkEsIFZJQVNSLAorCQl2aWFmYl9yZWFkX3JlZyhWSUFTUiwgU1IyQSkgJiAofjB4MEMpKTsKKworCWlmICh2aWFwYXJpbmZvLT5jaGlwX2luZm8tPgorCQl0bWRzX2NoaXBfaW5mby5vdXRwdXRfaW50ZXJmYWNlID09IElOVEVSRkFDRV9ERlBfTE9XKQorCQl2aWFmYl93cml0ZV9yZWcoU1IyQSwgVklBU1IsCisJCXZpYWZiX3JlYWRfcmVnKFZJQVNSLCBTUjJBKSAmICh+MHgwMykpOworCisJaWYgKHZpYXBhcmluZm8tPmNoaXBfaW5mby0+CisJCXRtZHNfY2hpcF9pbmZvLm91dHB1dF9pbnRlcmZhY2UgPT0gSU5URVJGQUNFX1RNRFMpCisJCS8qIFR1cm4gb2ZmIFRNRFMgcG93ZXIuICovCisJCXZpYWZiX3dyaXRlX3JlZyhDUkQyLCBWSUFDUiwKKwkJdmlhZmJfcmVhZF9yZWcoVklBQ1IsIENSRDIpIHwgMHgwOCk7Cit9CisKKy8qIElmIEVuYWJsZSBEVkksIHR1cm4gb2ZmIHBhZCAqLwordm9pZCB2aWFmYl9kdmlfZW5hYmxlKHZvaWQpCit7CisJdTggZGF0YTsKKworCWlmICh2aWFwYXJpbmZvLT5jaGlwX2luZm8tPgorCQl0bWRzX2NoaXBfaW5mby5vdXRwdXRfaW50ZXJmYWNlID09IElOVEVSRkFDRV9EVlAwKSB7CisJCXZpYWZiX3dyaXRlX3JlZyhTUjFFLCBWSUFTUiwKKwkJCXZpYWZiX3JlYWRfcmVnKFZJQVNSLCBTUjFFKSB8IDB4QzApOworCQlpZiAodmlhcGFyaW5mby0+Y2hpcF9pbmZvLT5nZnhfY2hpcF9uYW1lID09IFVOSUNIUk9NRV9DTEUyNjYpCisJCQl0bWRzX3JlZ2lzdGVyX3dyaXRlKDB4ODgsIDB4M2IpOworCQllbHNlCisJCQkvKmNsZWFyIENSOTFbNV0gdG8gZGlyZWN0IG9uIGRpc3BsYXkgcGVyaW9kCisJCQkgICBpbiB0aGUgc2Vjb25kYXJ5IGRpcGxheSBwYXRoICovCisJCQl2aWFmYl93cml0ZV9yZWcoQ1I5MSwgVklBQ1IsCisJCQl2aWFmYl9yZWFkX3JlZyhWSUFDUiwgQ1I5MSkgJiAweERGKTsKKwl9CisKKwlpZiAodmlhcGFyaW5mby0+Y2hpcF9pbmZvLT4KKwkJdG1kc19jaGlwX2luZm8ub3V0cHV0X2ludGVyZmFjZSA9PSBJTlRFUkZBQ0VfRFZQMSkgeworCQl2aWFmYl93cml0ZV9yZWcoU1IxRSwgVklBU1IsCisJCQl2aWFmYl9yZWFkX3JlZyhWSUFTUiwgU1IxRSkgfCAweDMwKTsKKworCQkvKmZpeCBkdmkgY2Fubid0IGJlIGVuYWJsZWQgd2l0aCBNQiBWVDU3MThDNCAtIEFsIFpoYW5nICovCisJCWlmICh2aWFwYXJpbmZvLT5jaGlwX2luZm8tPmdmeF9jaGlwX25hbWUgPT0gVU5JQ0hST01FX0NMRTI2NikgeworCQkJdG1kc19yZWdpc3Rlcl93cml0ZSgweDg4LCAweDNiKTsKKwkJfSBlbHNlIHsKKwkJCS8qY2xlYXIgQ1I5MVs1XSB0byBkaXJlY3Qgb24gZGlzcGxheSBwZXJpb2QKKwkJCSAgaW4gdGhlIHNlY29uZGFyeSBkaXBsYXkgcGF0aCAqLworCQkJdmlhZmJfd3JpdGVfcmVnKENSOTEsIFZJQUNSLAorCQkJdmlhZmJfcmVhZF9yZWcoVklBQ1IsIENSOTEpICYgMHhERik7CisJCX0KKworCQkvKmZpeCBEVkkgY2Fubm90IGVuYWJsZSBvbiBFUElBLU0gYm9hcmQgKi8KKwkJaWYgKHZpYWZiX3BsYXRmb3JtX2VwaWFfZHZpID09IDEpIHsKKwkJCXZpYWZiX3dyaXRlX3JlZ19tYXNrKENSOTEsIFZJQUNSLCAweDFmLCAweDFmKTsKKwkJCXZpYWZiX3dyaXRlX3JlZ19tYXNrKENSODgsIFZJQUNSLCAweDAwLCBCSVQ2ICsgQklUMCk7CisJCQlpZiAodmlhZmJfYnVzX3dpZHRoID09IDI0KSB7CisJCQkJaWYgKHZpYWZiX2RldmljZV9sY2RfZHVhbGVkZ2UgPT0gMSkKKwkJCQkJZGF0YSA9IDB4M0Y7CisJCQkJZWxzZQorCQkJCQlkYXRhID0gMHgzNzsKKwkJCQl2aWFmYl9pMmNfd3JpdGVieXRlKHZpYXBhcmluZm8tPmNoaXBfaW5mby0+CisJCQkJCSAgICAgdG1kc19jaGlwX2luZm8uCisJCQkJCSAgICAgdG1kc19jaGlwX3NsYXZlX2FkZHIsCisJCQkJCSAgICAgMHgwOCwgZGF0YSk7CisJCQl9CisJCX0KKwl9CisKKwlpZiAodmlhcGFyaW5mby0+Y2hpcF9pbmZvLT4KKwkJdG1kc19jaGlwX2luZm8ub3V0cHV0X2ludGVyZmFjZSA9PSBJTlRFUkZBQ0VfREZQX0hJR0gpIHsKKwkJdmlhZmJfd3JpdGVfcmVnKFNSMkEsIFZJQVNSLAorCQkJdmlhZmJfcmVhZF9yZWcoVklBU1IsIFNSMkEpIHwgMHgwQyk7CisJCXZpYWZiX3dyaXRlX3JlZyhDUjkxLCBWSUFDUiwKKwkJCXZpYWZiX3JlYWRfcmVnKFZJQUNSLCBDUjkxKSAmIDB4REYpOworCX0KKworCWlmICh2aWFwYXJpbmZvLT5jaGlwX2luZm8tPgorCQl0bWRzX2NoaXBfaW5mby5vdXRwdXRfaW50ZXJmYWNlID09IElOVEVSRkFDRV9ERlBfTE9XKSB7CisJCXZpYWZiX3dyaXRlX3JlZyhTUjJBLCBWSUFTUiwKKwkJCXZpYWZiX3JlYWRfcmVnKFZJQVNSLCBTUjJBKSB8IDB4MDMpOworCQl2aWFmYl93cml0ZV9yZWcoQ1I5MSwgVklBQ1IsCisJCQl2aWFmYl9yZWFkX3JlZyhWSUFDUiwgQ1I5MSkgJiAweERGKTsKKwl9CisJaWYgKHZpYXBhcmluZm8tPmNoaXBfaW5mby0+CisJCXRtZHNfY2hpcF9pbmZvLm91dHB1dF9pbnRlcmZhY2UgPT0gSU5URVJGQUNFX1RNRFMpIHsKKwkJLyogVHVybiBvbiBEaXNwbGF5IHBlcmlvZCBpbiB0aGUgcGFuZWwgcGF0aC4gKi8KKwkJdmlhZmJfd3JpdGVfcmVnX21hc2soQ1I5MSwgVklBQ1IsIDAsIEJJVDcpOworCisJCS8qIFR1cm4gb24gVE1EUyBwb3dlci4gKi8KKwkJdmlhZmJfd3JpdGVfcmVnX21hc2soQ1JEMiwgVklBQ1IsIDAsIEJJVDMpOworCX0KK30KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby92aWEvZHZpLmggYi9kcml2ZXJzL3ZpZGVvL3ZpYS9kdmkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMWVjMzdmCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy92aWRlby92aWEvZHZpLmgKQEAgLTAsMCArMSw2NCBAQAorLyoKKyAqIENvcHlyaWdodCAxOTk4LTIwMDggVklBIFRlY2hub2xvZ2llcywgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IDIwMDEtMjAwOCBTMyBHcmFwaGljcywgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247CisgKiBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5USUVTIE9SIFJFUFJFU0VOVEFUSU9OUzsgd2l0aG91dCBldmVuCisgKiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFLlNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGZvciBtb3JlIGRldGFpbHMuCisKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwKKyAqIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKworI2lmbmRlZiBfX0RWSV9IX18KKyNkZWZpbmUgX19EVklfSF9fCisKKy8qRGVmaW5pdGlvbiBUTURTIERldmljZSBJRCByZWdpc3RlciovCisjZGVmaW5lICAgICBWVDE2MzJfREVWSUNFX0lEX1JFRyAgICAgICAgMHgwMgorI2RlZmluZSAgICAgVlQxNjMyX0RFVklDRV9JRCAgICAgICAgICAgIDB4OTIKKworI2RlZmluZSAgICAgR0VUX0RWSV9TSVpFX0JZX1NZU1RFTV9CSU9TICAgICAweDAxCisjZGVmaW5lICAgICBHRVRfRFZJX1NJWkVfQllfVkdBX0JJT1MgICAgICAgIDB4MDIKKyNkZWZpbmUgICAgIEdFVF9EVklfU1pJRV9CWV9IV19TVFJBUFBJTkcgICAgMHgwMworCisvKiBEZWZpbml0aW9uIERWSSBQYW5lbCBJRCovCisvKiBSZXNvbHV0aW9uOiA2NDB4NDgwLCAgIENoYW5uZWw6IHNpbmdsZSwgRGl0aGVyaW5nOiBFbmFibGUgKi8KKyNkZWZpbmUgICAgIERWSV9QQU5FTF9JRDBfNjQwWDQ4MCAgICAgICAweDAwCisvKiBSZXNvbHV0aW9uOiA4MDB4NjAwLCAgIENoYW5uZWw6IHNpbmdsZSwgRGl0aGVyaW5nOiBFbmFibGUgKi8KKyNkZWZpbmUgICAgIERWSV9QQU5FTF9JRDFfODAweDYwMCAgICAgICAweDAxCisvKiBSZXNvbHV0aW9uOiAxMDI0eDc2OCwgIENoYW5uZWw6IHNpbmdsZSwgRGl0aGVyaW5nOiBFbmFibGUgKi8KKyNkZWZpbmUgICAgIERWSV9QQU5FTF9JRDFfMTAyNHg3NjggICAgICAweDAyCisvKiBSZXNvbHV0aW9uOiAxMjgweDc2OCwgIENoYW5uZWw6IHNpbmdsZSwgRGl0aGVyaW5nOiBFbmFibGUgKi8KKyNkZWZpbmUgICAgIERWSV9QQU5FTF9JRDFfMTI4MHg3NjggICAgICAweDAzCisvKiBSZXNvbHV0aW9uOiAxMjgweDEwMjQsIENoYW5uZWw6IGR1YWwsICAgRGl0aGVyaW5nOiBFbmFibGUgKi8KKyNkZWZpbmUgICAgIERWSV9QQU5FTF9JRDFfMTI4MHgxMDI0ICAgICAweDA0CisvKiBSZXNvbHV0aW9uOiAxNDAweDEwNTAsIENoYW5uZWw6IGR1YWwsICAgRGl0aGVyaW5nOiBFbmFibGUgKi8KKyNkZWZpbmUgICAgIERWSV9QQU5FTF9JRDFfMTQwMHgxMDUwICAgICAweDA1CisvKiBSZXNvbHV0aW9uOiAxNjAweDEyMDAsIENoYW5uZWw6IGR1YWwsICAgRGl0aGVyaW5nOiBFbmFibGUgKi8KKyNkZWZpbmUgICAgIERWSV9QQU5FTF9JRDFfMTYwMHgxMjAwICAgICAweDA2CisKKy8qIERlZmluZSB0aGUgdmVyc2lvbiBvZiBFRElEKi8KKyNkZWZpbmUgICAgIEVESURfVkVSU0lPTl8xICAgICAgMQorI2RlZmluZSAgICAgRURJRF9WRVJTSU9OXzIgICAgICAyCisKKyNkZWZpbmUgICAgIERFVl9DT05ORUNUX0RWSSAgICAgMHgwMQorI2RlZmluZSAgICAgREVWX0NPTk5FQ1RfSERNSSAgICAweDAyCisKK3N0cnVjdCBWaWRlb01vZGVUYWJsZSAqdmlhZmJfZ2V0X2NlYV9tb2RlX3RibF9wb2ludGVyKGludCBJbmRleCk7CitpbnQgdmlhZmJfZHZpX3NlbnNlKHZvaWQpOwordm9pZCB2aWFmYl9kdmlfZGlzYWJsZSh2b2lkKTsKK3ZvaWQgdmlhZmJfZHZpX2VuYWJsZSh2b2lkKTsKK2ludCB2aWFmYl90bWRzX3RyYXNtaXR0ZXJfaWRlbnRpZnkodm9pZCk7Cit2b2lkIHZpYWZiX2luaXRfZHZpX3NpemUodm9pZCk7Cit2b2lkIHZpYWZiX2R2aV9zZXRfbW9kZShpbnQgdmlkZW9faW5kZXgsIGludCBtb2RlX2JwcCwgaW50IHNldF9pZ2EpOworCisjZW5kaWYgLyogX19EVklfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3ZpYS9nbG9iYWwuYyBiL2RyaXZlcnMvdmlkZW8vdmlhL2dsb2JhbC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ2OGJlMjQyNQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdmlkZW8vdmlhL2dsb2JhbC5jCkBAIC0wLDAgKzEsNjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgMTk5OC0yMDA4IFZJQSBUZWNobm9sb2dpZXMsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAyMDAxLTIwMDggUzMgR3JhcGhpY3MsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKworICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOworICogZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVElFUyBPUiBSRVBSRVNFTlRBVElPTlM7IHdpdGhvdXQgZXZlbgorICogdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS5TZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sCisgKiA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICovCisjaW5jbHVkZSAiZ2xvYmFsLmgiCitpbnQgdmlhZmJfcGxhdGZvcm1fZXBpYV9kdmkgPSBTVEFURV9PRkY7CitpbnQgdmlhZmJfZGV2aWNlX2xjZF9kdWFsZWRnZSA9IFNUQVRFX09GRjsKK2ludCB2aWFmYl9idXNfd2lkdGggPSAxMjsKK2ludCB2aWFmYl9kaXNwbGF5X2hhcmR3YXJlX2xheW91dCA9IEhXX0xBWU9VVF9MQ0RfRFZJOworaW50IHZpYWZiX21lbXNpemU7CitpbnQgdmlhZmJfRGV2aWNlU3RhdHVzID0gQ1JUX0RldmljZTsKK2ludCB2aWFmYl9ob3RwbHVnOworaW50IHZpYWZiX3JlZnJlc2ggPSA2MDsKK2ludCB2aWFmYl9yZWZyZXNoMSA9IDYwOworaW50IHZpYWZiX2xjZF9kc3BfbWV0aG9kID0gTENEX0VYUEFORFNJT047CitpbnQgdmlhZmJfbGNkX21vZGUgPSBMQ0RfT1BFTkxESTsKK2ludCB2aWFmYl9icHAgPSAzMjsKK2ludCB2aWFmYl9icHAxID0gMzI7CitpbnQgdmlhZmJfYWNjZWwgPSAxOworaW50IHZpYWZiX0NSVF9PTiA9IDE7CitpbnQgdmlhZmJfRFZJX09OOworaW50IHZpYWZiX0xDRF9PTiA7CitpbnQgdmlhZmJfTENEMl9PTjsKK2ludCB2aWFmYl9TQU1NX09OOworaW50IHZpYWZiX2R1YWxfZmI7CitpbnQgdmlhZmJfaG90cGx1Z19YcmVzID0gNjQwOworaW50IHZpYWZiX2hvdHBsdWdfWXJlcyA9IDQ4MDsKK2ludCB2aWFmYl9ob3RwbHVnX2JwcCA9IDMyOworaW50IHZpYWZiX2hvdHBsdWdfcmVmcmVzaCA9IDYwOwordW5zaWduZWQgaW50IHZpYWZiX3NlY29uZF9vZmZzZXQ7CitpbnQgdmlhZmJfc2Vjb25kX3NpemU7CitpbnQgdmlhZmJfcHJpbWFyeV9kZXYgPSBOb25lX0RldmljZTsKK3ZvaWQgX19pb21lbSAqdmlhZmJfRkJfTU07Cit1bnNpZ25lZCBpbnQgdmlhZmJfc2Vjb25kX3hyZXMgPSA2NDA7Cit1bnNpZ25lZCBpbnQgdmlhZmJfc2Vjb25kX3lyZXMgPSA0ODA7Cit1bnNpZ25lZCBpbnQgdmlhZmJfc2Vjb25kX3ZpcnR1YWxfeHJlczsKK3Vuc2lnbmVkIGludCB2aWFmYl9zZWNvbmRfdmlydHVhbF95cmVzOworaW50IHZpYWZiX2xjZF9wYW5lbF9pZCA9IExDRF9QQU5FTF9JRF9NQVhJTVVNICsgMTsKK3N0cnVjdCBmYl9jdXJzb3IgdmlhY3Vyc29yOworc3RydWN0IGZiX2luZm8gKnZpYWZiaW5mbzsKK3N0cnVjdCBmYl9pbmZvICp2aWFmYmluZm8xOworc3RydWN0IHZpYWZiX3BhciAqdmlhcGFyaW5mbzsKK3N0cnVjdCB2aWFmYl9wYXIgKnZpYXBhcmluZm8xOworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3ZpYS9nbG9iYWwuaCBiL2RyaXZlcnMvdmlkZW8vdmlhL2dsb2JhbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlNTI2M2MKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3ZpZGVvL3ZpYS9nbG9iYWwuaApAQCAtMCwwICsxLDkwIEBACisvKgorICogQ29weXJpZ2h0IDE5OTgtMjAwOCBWSUEgVGVjaG5vbG9naWVzLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgMjAwMS0yMDA4IFMzIEdyYXBoaWNzLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKKyAqIGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRJRVMgT1IgUkVQUkVTRU5UQVRJT05TOyB3aXRob3V0IGV2ZW4KKyAqIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UuU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogZm9yIG1vcmUgZGV0YWlscy4KKworICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLAorICogNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisjaWZuZGVmIF9fR0xPQkFMX0hfXworI2RlZmluZSBfX0dMT0JBTF9IX18KKworI2luY2x1ZGUgPGxpbnV4L2ZiLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbnNvbGUuaD4KKyNpbmNsdWRlIDxsaW51eC90aW1lci5oPgorCisjaW5jbHVkZSAiZGVidWcuaCIKKworI2luY2x1ZGUgImlmYWNlLmgiCisjaW5jbHVkZSAidmlhZmJkZXYuaCIKKyNpbmNsdWRlICJjaGlwLmgiCisjaW5jbHVkZSAiZGVidWcuaCIKKyNpbmNsdWRlICJhY2NlbC5oIgorI2luY2x1ZGUgInNoYXJlLmgiCisjaW5jbHVkZSAiZHZpLmgiCisjaW5jbHVkZSAidmlhbW9kZS5oIgorI2luY2x1ZGUgInZpYV9pMmMuaCIKKyNpbmNsdWRlICJody5oIgorCisjaW5jbHVkZSAibGNkLmgiCisjaW5jbHVkZSAiaW9jdGwuaCIKKyNpbmNsdWRlICJ2aWFtb2RlLmgiCisjaW5jbHVkZSAidmlhX3V0aWxpdHkuaCIKKyNpbmNsdWRlICJ2dDE2MzYuaCIKKyNpbmNsdWRlICJ0YmxEUEFTZXR0aW5nLmgiCisjaW5jbHVkZSAidGJsMTYzNi5oIgorI2luY2x1ZGUgInZpYWZiZGV2LmgiCisKKy8qIEV4dGVybmFsIHN0cnVjdCovCisKK2V4dGVybiBpbnQgdmlhZmJfcGxhdGZvcm1fZXBpYV9kdmk7CitleHRlcm4gaW50IHZpYWZiX2RldmljZV9sY2RfZHVhbGVkZ2U7CitleHRlcm4gaW50IHZpYWZiX2J1c193aWR0aDsKK2V4dGVybiBpbnQgdmlhZmJfZGlzcGxheV9oYXJkd2FyZV9sYXlvdXQ7CitleHRlcm4gc3RydWN0IG9mZnNldCBvZmZzZXRfcmVnOworZXh0ZXJuIHN0cnVjdCB2aWFmYl9wYXIgKnZpYXBhcmluZm87CitleHRlcm4gc3RydWN0IHZpYWZiX3BhciAqdmlhcGFyaW5mbzE7CitleHRlcm4gc3RydWN0IGZiX2luZm8gKnZpYWZiaW5mbzsKK2V4dGVybiBzdHJ1Y3QgZmJfaW5mbyAqdmlhZmJpbmZvMTsKK2V4dGVybiBpbnQgdmlhZmJfRGV2aWNlU3RhdHVzOworZXh0ZXJuIGludCB2aWFmYl9yZWZyZXNoOworZXh0ZXJuIGludCB2aWFmYl9yZWZyZXNoMTsKK2V4dGVybiBpbnQgdmlhZmJfbGNkX2RzcF9tZXRob2Q7CitleHRlcm4gaW50IHZpYWZiX2xjZF9tb2RlOworZXh0ZXJuIGludCB2aWFmYl9icHA7CitleHRlcm4gaW50IHZpYWZiX2JwcDE7CisKK2V4dGVybiBpbnQgdmlhZmJfQ1JUX09OOworZXh0ZXJuIGludCB2aWFmYl9ob3RwbHVnX1hyZXM7CitleHRlcm4gaW50IHZpYWZiX2hvdHBsdWdfWXJlczsKK2V4dGVybiBpbnQgdmlhZmJfaG90cGx1Z19icHA7CitleHRlcm4gaW50IHZpYWZiX2hvdHBsdWdfcmVmcmVzaDsKK2V4dGVybiBpbnQgdmlhZmJfcHJpbWFyeV9kZXY7CitleHRlcm4gdm9pZCBfX2lvbWVtICp2aWFmYl9GQl9NTTsKK2V4dGVybiBzdHJ1Y3QgZmJfY3Vyc29yIHZpYWN1cnNvcjsKKworZXh0ZXJuIHVuc2lnbmVkIGludCB2aWFmYl9zZWNvbmRfeHJlczsKK2V4dGVybiB1bnNpZ25lZCBpbnQgdmlhZmJfc2Vjb25kX3lyZXM7CitleHRlcm4gaW50IHZpYWZiX2xjZF9wYW5lbF9pZDsKKworI2VuZGlmIC8qIF9fR0xPQkFMX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby92aWEvaHcuYyBiL2RyaXZlcnMvdmlkZW8vdmlhL2h3LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmNkNTNjZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdmlkZW8vdmlhL2h3LmMKQEAgLTAsMCArMSwyODY1IEBACisvKgorICogQ29weXJpZ2h0IDE5OTgtMjAwOCBWSUEgVGVjaG5vbG9naWVzLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgMjAwMS0yMDA4IFMzIEdyYXBoaWNzLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKKyAqIGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRJRVMgT1IgUkVQUkVTRU5UQVRJT05TOyB3aXRob3V0IGV2ZW4KKyAqIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UuU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogZm9yIG1vcmUgZGV0YWlscy4KKworICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLAorICogNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiZ2xvYmFsLmgiCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZF9pbmZvIHBjaWlkbGlzdFtdID0geworCXtQQ0lfVklBX1ZFTkRPUl9JRCwgVU5JQ0hST01FX0NMRTI2Nl9ESUQsIFVOSUNIUk9NRV9DTEUyNjZ9LAorCXtQQ0lfVklBX1ZFTkRPUl9JRCwgVU5JQ0hST01FX1BNODAwX0RJRCwgVU5JQ0hST01FX1BNODAwfSwKKwl7UENJX1ZJQV9WRU5ET1JfSUQsIFVOSUNIUk9NRV9LNDAwX0RJRCwgVU5JQ0hST01FX0s0MDB9LAorCXtQQ0lfVklBX1ZFTkRPUl9JRCwgVU5JQ0hST01FX0s4MDBfRElELCBVTklDSFJPTUVfSzgwMH0sCisJe1BDSV9WSUFfVkVORE9SX0lELCBVTklDSFJPTUVfQ043MDBfRElELCBVTklDSFJPTUVfQ043MDB9LAorCXtQQ0lfVklBX1ZFTkRPUl9JRCwgVU5JQ0hST01FX1A0TTg5MF9ESUQsIFVOSUNIUk9NRV9QNE04OTB9LAorCXtQQ0lfVklBX1ZFTkRPUl9JRCwgVU5JQ0hST01FX0s4TTg5MF9ESUQsIFVOSUNIUk9NRV9LOE04OTB9LAorCXtQQ0lfVklBX1ZFTkRPUl9JRCwgVU5JQ0hST01FX0NYNzAwX0RJRCwgVU5JQ0hST01FX0NYNzAwfSwKKwl7UENJX1ZJQV9WRU5ET1JfSUQsIFVOSUNIUk9NRV9QNE05MDBfRElELCBVTklDSFJPTUVfUDRNOTAwfSwKKwl7UENJX1ZJQV9WRU5ET1JfSUQsIFVOSUNIUk9NRV9DTjc1MF9ESUQsIFVOSUNIUk9NRV9DTjc1MH0sCisJe1BDSV9WSUFfVkVORE9SX0lELCBVTklDSFJPTUVfVlg4MDBfRElELCBVTklDSFJPTUVfVlg4MDB9LAorCXswLCAwLCAwfQorfTsKKworc3RydWN0IG9mZnNldCBvZmZzZXRfcmVnID0geworCS8qIElHQTEgT2Zmc2V0IFJlZ2lzdGVyICovCisJe0lHQTFfT0ZGU0VUX1JFR19OVU0sIHt7Q1IxMywgMCwgN30sIHtDUjM1LCA1LCA3fSB9IH0sCisJLyogSUdBMiBPZmZzZXQgUmVnaXN0ZXIgKi8KKwl7SUdBMl9PRkZTRVRfUkVHX05VTSwge3tDUjY2LCAwLCA3fSwge0NSNjcsIDAsIDF9IH0gfQorfTsKKworc3RhdGljIHN0cnVjdCBwbGxfbWFwIHBsbF92YWx1ZVtdID0geworCXtDTEtfMjVfMTc1TSwgQ0xFMjY2X1BMTF8yNV8xNzVNLCBLODAwX1BMTF8yNV8xNzVNLCBDWDcwMF8yNV8xNzVNfSwKKwl7Q0xLXzI5XzU4MU0sIENMRTI2Nl9QTExfMjlfNTgxTSwgSzgwMF9QTExfMjlfNTgxTSwgQ1g3MDBfMjlfNTgxTX0sCisJe0NMS18yNl84ODBNLCBDTEUyNjZfUExMXzI2Xzg4ME0sIEs4MDBfUExMXzI2Xzg4ME0sIENYNzAwXzI2Xzg4ME19LAorCXtDTEtfMzFfNDkwTSwgQ0xFMjY2X1BMTF8zMV80OTBNLCBLODAwX1BMTF8zMV80OTBNLCBDWDcwMF8zMV80OTBNfSwKKwl7Q0xLXzMxXzUwME0sIENMRTI2Nl9QTExfMzFfNTAwTSwgSzgwMF9QTExfMzFfNTAwTSwgQ1g3MDBfMzFfNTAwTX0sCisJe0NMS18zMV83MjhNLCBDTEUyNjZfUExMXzMxXzcyOE0sIEs4MDBfUExMXzMxXzcyOE0sIENYNzAwXzMxXzcyOE19LAorCXtDTEtfMzJfNjY4TSwgQ0xFMjY2X1BMTF8zMl82NjhNLCBLODAwX1BMTF8zMl82NjhNLCBDWDcwMF8zMl82NjhNfSwKKwl7Q0xLXzM2XzAwME0sIENMRTI2Nl9QTExfMzZfMDAwTSwgSzgwMF9QTExfMzZfMDAwTSwgQ1g3MDBfMzZfMDAwTX0sCisJe0NMS180MF8wMDBNLCBDTEUyNjZfUExMXzQwXzAwME0sIEs4MDBfUExMXzQwXzAwME0sIENYNzAwXzQwXzAwME19LAorCXtDTEtfNDFfMjkxTSwgQ0xFMjY2X1BMTF80MV8yOTFNLCBLODAwX1BMTF80MV8yOTFNLCBDWDcwMF80MV8yOTFNfSwKKwl7Q0xLXzQzXzE2M00sIENMRTI2Nl9QTExfNDNfMTYzTSwgSzgwMF9QTExfNDNfMTYzTSwgQ1g3MDBfNDNfMTYzTX0sCisJe0NMS180NV8yNTBNLCBDTEUyNjZfUExMXzQ1XzI1ME0sIEs4MDBfUExMXzQ1XzI1ME0sIENYNzAwXzQ1XzI1ME19LAorCXtDTEtfNDZfMDAwTSwgQ0xFMjY2X1BMTF80Nl8wMDBNLCBLODAwX1BMTF80Nl8wMDBNLCBDWDcwMF80Nl8wMDBNfSwKKwl7Q0xLXzQ2Xzk5Nk0sIENMRTI2Nl9QTExfNDZfOTk2TSwgSzgwMF9QTExfNDZfOTk2TSwgQ1g3MDBfNDZfOTk2TX0sCisJe0NMS180OF8wMDBNLCBDTEUyNjZfUExMXzQ4XzAwME0sIEs4MDBfUExMXzQ4XzAwME0sIENYNzAwXzQ4XzAwME19LAorCXtDTEtfNDhfODc1TSwgQ0xFMjY2X1BMTF80OF84NzVNLCBLODAwX1BMTF80OF84NzVNLCBDWDcwMF80OF84NzVNfSwKKwl7Q0xLXzQ5XzUwME0sIENMRTI2Nl9QTExfNDlfNTAwTSwgSzgwMF9QTExfNDlfNTAwTSwgQ1g3MDBfNDlfNTAwTX0sCisJe0NMS181Ml80MDZNLCBDTEUyNjZfUExMXzUyXzQwNk0sIEs4MDBfUExMXzUyXzQwNk0sIENYNzAwXzUyXzQwNk19LAorCXtDTEtfNTJfOTc3TSwgQ0xFMjY2X1BMTF81Ml85NzdNLCBLODAwX1BMTF81Ml85NzdNLCBDWDcwMF81Ml85NzdNfSwKKwl7Q0xLXzU2XzI1ME0sIENMRTI2Nl9QTExfNTZfMjUwTSwgSzgwMF9QTExfNTZfMjUwTSwgQ1g3MDBfNTZfMjUwTX0sCisJe0NMS182MF80NjZNLCBDTEUyNjZfUExMXzYwXzQ2Nk0sIEs4MDBfUExMXzYwXzQ2Nk0sIENYNzAwXzYwXzQ2Nk19LAorCXtDTEtfNjFfNTAwTSwgQ0xFMjY2X1BMTF82MV81MDBNLCBLODAwX1BMTF82MV81MDBNLCBDWDcwMF82MV81MDBNfSwKKwl7Q0xLXzY1XzAwME0sIENMRTI2Nl9QTExfNjVfMDAwTSwgSzgwMF9QTExfNjVfMDAwTSwgQ1g3MDBfNjVfMDAwTX0sCisJe0NMS182NV8xNzhNLCBDTEUyNjZfUExMXzY1XzE3OE0sIEs4MDBfUExMXzY1XzE3OE0sIENYNzAwXzY1XzE3OE19LAorCXtDTEtfNjZfNzUwTSwgQ0xFMjY2X1BMTF82Nl83NTBNLCBLODAwX1BMTF82Nl83NTBNLCBDWDcwMF82Nl83NTBNfSwKKwl7Q0xLXzY4XzE3OU0sIENMRTI2Nl9QTExfNjhfMTc5TSwgSzgwMF9QTExfNjhfMTc5TSwgQ1g3MDBfNjhfMTc5TX0sCisJe0NMS182OV85MjRNLCBDTEUyNjZfUExMXzY5XzkyNE0sIEs4MDBfUExMXzY5XzkyNE0sIENYNzAwXzY5XzkyNE19LAorCXtDTEtfNzBfMTU5TSwgQ0xFMjY2X1BMTF83MF8xNTlNLCBLODAwX1BMTF83MF8xNTlNLCBDWDcwMF83MF8xNTlNfSwKKwl7Q0xLXzcyXzAwME0sIENMRTI2Nl9QTExfNzJfMDAwTSwgSzgwMF9QTExfNzJfMDAwTSwgQ1g3MDBfNzJfMDAwTX0sCisJe0NMS183OF83NTBNLCBDTEUyNjZfUExMXzc4Xzc1ME0sIEs4MDBfUExMXzc4Xzc1ME0sIENYNzAwXzc4Xzc1ME19LAorCXtDTEtfODBfMTM2TSwgQ0xFMjY2X1BMTF84MF8xMzZNLCBLODAwX1BMTF84MF8xMzZNLCBDWDcwMF84MF8xMzZNfSwKKwl7Q0xLXzgzXzM3NU0sIENMRTI2Nl9QTExfODNfMzc1TSwgSzgwMF9QTExfODNfMzc1TSwgQ1g3MDBfODNfMzc1TX0sCisJe0NMS184M185NTBNLCBDTEUyNjZfUExMXzgzXzk1ME0sIEs4MDBfUExMXzgzXzk1ME0sIENYNzAwXzgzXzk1ME19LAorCXtDTEtfODRfNzUwTSwgQ0xFMjY2X1BMTF84NF83NTBNLCBLODAwX1BMTF84NF83NTBNLCBDWDcwMF84NF83NTBNfSwKKwl7Q0xLXzg1Xzg2ME0sIENMRTI2Nl9QTExfODVfODYwTSwgSzgwMF9QTExfODVfODYwTSwgQ1g3MDBfODVfODYwTX0sCisJe0NMS184OF83NTBNLCBDTEUyNjZfUExMXzg4Xzc1ME0sIEs4MDBfUExMXzg4Xzc1ME0sIENYNzAwXzg4Xzc1ME19LAorCXtDTEtfOTRfNTAwTSwgQ0xFMjY2X1BMTF85NF81MDBNLCBLODAwX1BMTF85NF81MDBNLCBDWDcwMF85NF81MDBNfSwKKwl7Q0xLXzk3Xzc1ME0sIENMRTI2Nl9QTExfOTdfNzUwTSwgSzgwMF9QTExfOTdfNzUwTSwgQ1g3MDBfOTdfNzUwTX0sCisJe0NMS18xMDFfMDAwTSwgQ0xFMjY2X1BMTF8xMDFfMDAwTSwgSzgwMF9QTExfMTAxXzAwME0sCisJIENYNzAwXzEwMV8wMDBNfSwKKwl7Q0xLXzEwNl81MDBNLCBDTEUyNjZfUExMXzEwNl81MDBNLCBLODAwX1BMTF8xMDZfNTAwTSwKKwkgQ1g3MDBfMTA2XzUwME19LAorCXtDTEtfMTA4XzAwME0sIENMRTI2Nl9QTExfMTA4XzAwME0sIEs4MDBfUExMXzEwOF8wMDBNLAorCSBDWDcwMF8xMDhfMDAwTX0sCisJe0NMS18xMTNfMzA5TSwgQ0xFMjY2X1BMTF8xMTNfMzA5TSwgSzgwMF9QTExfMTEzXzMwOU0sCisJIENYNzAwXzExM18zMDlNfSwKKwl7Q0xLXzExOF84NDBNLCBDTEUyNjZfUExMXzExOF84NDBNLCBLODAwX1BMTF8xMThfODQwTSwKKwkgQ1g3MDBfMTE4Xzg0ME19LAorCXtDTEtfMTE5XzAwME0sIENMRTI2Nl9QTExfMTE5XzAwME0sIEs4MDBfUExMXzExOV8wMDBNLAorCSBDWDcwMF8xMTlfMDAwTX0sCisJe0NMS18xMjFfNzUwTSwgQ0xFMjY2X1BMTF8xMjFfNzUwTSwgSzgwMF9QTExfMTIxXzc1ME0sCisJIENYNzAwXzEyMV83NTBNfSwKKwl7Q0xLXzEyNV8xMDRNLCBDTEUyNjZfUExMXzEyNV8xMDRNLCBLODAwX1BMTF8xMjVfMTA0TSwKKwkgQ1g3MDBfMTI1XzEwNE19LAorCXtDTEtfMTMzXzMwOE0sIENMRTI2Nl9QTExfMTMzXzMwOE0sIEs4MDBfUExMXzEzM18zMDhNLAorCSBDWDcwMF8xMzNfMzA4TX0sCisJe0NMS18xMzVfMDAwTSwgQ0xFMjY2X1BMTF8xMzVfMDAwTSwgSzgwMF9QTExfMTM1XzAwME0sCisJIENYNzAwXzEzNV8wMDBNfSwKKwl7Q0xLXzEzNl83MDBNLCBDTEUyNjZfUExMXzEzNl83MDBNLCBLODAwX1BMTF8xMzZfNzAwTSwKKwkgQ1g3MDBfMTM2XzcwME19LAorCXtDTEtfMTM4XzQwME0sIENMRTI2Nl9QTExfMTM4XzQwME0sIEs4MDBfUExMXzEzOF80MDBNLAorCSBDWDcwMF8xMzhfNDAwTX0sCisJe0NMS18xNDZfNzYwTSwgQ0xFMjY2X1BMTF8xNDZfNzYwTSwgSzgwMF9QTExfMTQ2Xzc2ME0sCisJIENYNzAwXzE0Nl83NjBNfSwKKwl7Q0xLXzE1M185MjBNLCBDTEUyNjZfUExMXzE1M185MjBNLCBLODAwX1BMTF8xNTNfOTIwTSwKKwkgQ1g3MDBfMTUzXzkyME19LAorCXtDTEtfMTU2XzAwME0sIENMRTI2Nl9QTExfMTU2XzAwME0sIEs4MDBfUExMXzE1Nl8wMDBNLAorCSBDWDcwMF8xNTZfMDAwTX0sCisJe0NMS18xNTdfNTAwTSwgQ0xFMjY2X1BMTF8xNTdfNTAwTSwgSzgwMF9QTExfMTU3XzUwME0sCisJIENYNzAwXzE1N181MDBNfSwKKwl7Q0xLXzE2Ml8wMDBNLCBDTEUyNjZfUExMXzE2Ml8wMDBNLCBLODAwX1BMTF8xNjJfMDAwTSwKKwkgQ1g3MDBfMTYyXzAwME19LAorCXtDTEtfMTg3XzAwME0sIENMRTI2Nl9QTExfMTg3XzAwME0sIEs4MDBfUExMXzE4N18wMDBNLAorCSBDWDcwMF8xODdfMDAwTX0sCisJe0NMS18xOTNfMjk1TSwgQ0xFMjY2X1BMTF8xOTNfMjk1TSwgSzgwMF9QTExfMTkzXzI5NU0sCisJIENYNzAwXzE5M18yOTVNfSwKKwl7Q0xLXzIwMl81MDBNLCBDTEUyNjZfUExMXzIwMl81MDBNLCBLODAwX1BMTF8yMDJfNTAwTSwKKwkgQ1g3MDBfMjAyXzUwME19LAorCXtDTEtfMjA0XzAwME0sIENMRTI2Nl9QTExfMjA0XzAwME0sIEs4MDBfUExMXzIwNF8wMDBNLAorCSBDWDcwMF8yMDRfMDAwTX0sCisJe0NMS18yMThfNTAwTSwgQ0xFMjY2X1BMTF8yMThfNTAwTSwgSzgwMF9QTExfMjE4XzUwME0sCisJIENYNzAwXzIxOF81MDBNfSwKKwl7Q0xLXzIzNF8wMDBNLCBDTEUyNjZfUExMXzIzNF8wMDBNLCBLODAwX1BMTF8yMzRfMDAwTSwKKwkgQ1g3MDBfMjM0XzAwME19LAorCXtDTEtfMjY3XzI1ME0sIENMRTI2Nl9QTExfMjY3XzI1ME0sIEs4MDBfUExMXzI2N18yNTBNLAorCSBDWDcwMF8yNjdfMjUwTX0sCisJe0NMS18yOTdfNTAwTSwgQ0xFMjY2X1BMTF8yOTdfNTAwTSwgSzgwMF9QTExfMjk3XzUwME0sCisJIENYNzAwXzI5N181MDBNfSwKKwl7Q0xLXzc0XzQ4MU0sIENMRTI2Nl9QTExfNzRfNDgxTSwgSzgwMF9QTExfNzRfNDgxTSwgQ1g3MDBfNzRfNDgxTX0sCisJe0NMS18xNzJfNzk4TSwgQ0xFMjY2X1BMTF8xNzJfNzk4TSwgSzgwMF9QTExfMTcyXzc5OE0sCisJIENYNzAwXzE3Ml83OThNfSwKKwl7Q0xLXzEyMl82MTRNLCBDTEUyNjZfUExMXzEyMl82MTRNLCBLODAwX1BMTF8xMjJfNjE0TSwKKwkgQ1g3MDBfMTIyXzYxNE19LAorCXtDTEtfNzRfMjcwTSwgQ0xFMjY2X1BMTF83NF8yNzBNLCBLODAwX1BMTF83NF8yNzBNLCBDWDcwMF83NF8yNzBNfSwKKwl7Q0xLXzE0OF81MDBNLCBDTEUyNjZfUExMXzE0OF81MDBNLCBLODAwX1BMTF8xNDhfNTAwTSwKKwkgQ1g3MDBfMTQ4XzUwME19Cit9OworCitzdGF0aWMgc3RydWN0IGZpZm9fZGVwdGhfc2VsZWN0IGRpc3BsYXlfZmlmb19kZXB0aF9yZWcgPSB7CisJLyogSUdBMSBGSUZPIERlcHRoX1NlbGVjdCAqLworCXtJR0ExX0ZJRk9fREVQVEhfU0VMRUNUX1JFR19OVU0sIHt7U1IxNywgMCwgN30gfSB9LAorCS8qIElHQTIgRklGTyBEZXB0aF9TZWxlY3QgKi8KKwl7SUdBMl9GSUZPX0RFUFRIX1NFTEVDVF9SRUdfTlVNLAorCSB7e0NSNjgsIDQsIDd9LCB7Q1I5NCwgNywgN30sIHtDUjk1LCA3LCA3fSB9IH0KK307CisKK3N0YXRpYyBzdHJ1Y3QgZmlmb190aHJlc2hvbGRfc2VsZWN0IGZpZm9fdGhyZXNob2xkX3NlbGVjdF9yZWcgPSB7CisJLyogSUdBMSBGSUZPIFRocmVzaG9sZCBTZWxlY3QgKi8KKwl7SUdBMV9GSUZPX1RIUkVTSE9MRF9SRUdfTlVNLCB7e1NSMTYsIDAsIDV9LCB7U1IxNiwgNywgN30gfSB9LAorCS8qIElHQTIgRklGTyBUaHJlc2hvbGQgU2VsZWN0ICovCisJe0lHQTJfRklGT19USFJFU0hPTERfUkVHX05VTSwge3tDUjY4LCAwLCAzfSwge0NSOTUsIDQsIDZ9IH0gfQorfTsKKworc3RhdGljIHN0cnVjdCBmaWZvX2hpZ2hfdGhyZXNob2xkX3NlbGVjdCBmaWZvX2hpZ2hfdGhyZXNob2xkX3NlbGVjdF9yZWcgPSB7CisJLyogSUdBMSBGSUZPIEhpZ2ggVGhyZXNob2xkIFNlbGVjdCAqLworCXtJR0ExX0ZJRk9fSElHSF9USFJFU0hPTERfUkVHX05VTSwge3tTUjE4LCAwLCA1fSwge1NSMTgsIDcsIDd9IH0gfSwKKwkvKiBJR0EyIEZJRk8gSGlnaCBUaHJlc2hvbGQgU2VsZWN0ICovCisJe0lHQTJfRklGT19ISUdIX1RIUkVTSE9MRF9SRUdfTlVNLCB7e0NSOTIsIDAsIDN9LCB7Q1I5NSwgMCwgMn0gfSB9Cit9OworCitzdGF0aWMgc3RydWN0IGRpc3BsYXlfcXVldWVfZXhwaXJlX251bSBkaXNwbGF5X3F1ZXVlX2V4cGlyZV9udW1fcmVnID0geworCS8qIElHQTEgRGlzcGxheSBRdWV1ZSBFeHBpcmUgTnVtICovCisJe0lHQTFfRElTUExBWV9RVUVVRV9FWFBJUkVfTlVNX1JFR19OVU0sIHt7U1IyMiwgMCwgNH0gfSB9LAorCS8qIElHQTIgRGlzcGxheSBRdWV1ZSBFeHBpcmUgTnVtICovCisJe0lHQTJfRElTUExBWV9RVUVVRV9FWFBJUkVfTlVNX1JFR19OVU0sIHt7Q1I5NCwgMCwgNn0gfSB9Cit9OworCisvKiBEZWZpbml0aW9uIEZldGNoIENvdW50IFJlZ2lzdGVycyovCitzdGF0aWMgc3RydWN0IGZldGNoX2NvdW50IGZldGNoX2NvdW50X3JlZyA9IHsKKwkvKiBJR0ExIEZldGNoIENvdW50IFJlZ2lzdGVyICovCisJe0lHQTFfRkVUQ0hfQ09VTlRfUkVHX05VTSwge3tTUjFDLCAwLCA3fSwge1NSMUQsIDAsIDF9IH0gfSwKKwkvKiBJR0EyIEZldGNoIENvdW50IFJlZ2lzdGVyICovCisJe0lHQTJfRkVUQ0hfQ09VTlRfUkVHX05VTSwge3tDUjY1LCAwLCA3fSwge0NSNjcsIDIsIDN9IH0gfQorfTsKKworc3RhdGljIHN0cnVjdCBpZ2ExX2NydGNfdGltaW5nIGlnYTFfY3J0Y19yZWcgPSB7CisJLyogSUdBMSBIb3Jpem9udGFsIFRvdGFsICovCisJe0lHQTFfSE9SX1RPVEFMX1JFR19OVU0sIHt7Q1IwMCwgMCwgN30sIHtDUjM2LCAzLCAzfSB9IH0sCisJLyogSUdBMSBIb3Jpem9udGFsIEFkZHJlc3NhYmxlIFZpZGVvICovCisJe0lHQTFfSE9SX0FERFJfUkVHX05VTSwge3tDUjAxLCAwLCA3fSB9IH0sCisJLyogSUdBMSBIb3Jpem9udGFsIEJsYW5rIFN0YXJ0ICovCisJe0lHQTFfSE9SX0JMQU5LX1NUQVJUX1JFR19OVU0sIHt7Q1IwMiwgMCwgN30gfSB9LAorCS8qIElHQTEgSG9yaXpvbnRhbCBCbGFuayBFbmQgKi8KKwl7SUdBMV9IT1JfQkxBTktfRU5EX1JFR19OVU0sCisJIHt7Q1IwMywgMCwgNH0sIHtDUjA1LCA3LCA3fSwge0NSMzMsIDUsIDV9IH0gfSwKKwkvKiBJR0ExIEhvcml6b250YWwgU3luYyBTdGFydCAqLworCXtJR0ExX0hPUl9TWU5DX1NUQVJUX1JFR19OVU0sIHt7Q1IwNCwgMCwgN30sIHtDUjMzLCA0LCA0fSB9IH0sCisJLyogSUdBMSBIb3Jpem9udGFsIFN5bmMgRW5kICovCisJe0lHQTFfSE9SX1NZTkNfRU5EX1JFR19OVU0sIHt7Q1IwNSwgMCwgNH0gfSB9LAorCS8qIElHQTEgVmVydGljYWwgVG90YWwgKi8KKwl7SUdBMV9WRVJfVE9UQUxfUkVHX05VTSwKKwkge3tDUjA2LCAwLCA3fSwge0NSMDcsIDAsIDB9LCB7Q1IwNywgNSwgNX0sIHtDUjM1LCAwLCAwfSB9IH0sCisJLyogSUdBMSBWZXJ0aWNhbCBBZGRyZXNzYWJsZSBWaWRlbyAqLworCXtJR0ExX1ZFUl9BRERSX1JFR19OVU0sCisJIHt7Q1IxMiwgMCwgN30sIHtDUjA3LCAxLCAxfSwge0NSMDcsIDYsIDZ9LCB7Q1IzNSwgMiwgMn0gfSB9LAorCS8qIElHQTEgVmVydGljYWwgQmxhbmsgU3RhcnQgKi8KKwl7SUdBMV9WRVJfQkxBTktfU1RBUlRfUkVHX05VTSwKKwkge3tDUjE1LCAwLCA3fSwge0NSMDcsIDMsIDN9LCB7Q1IwOSwgNSwgNX0sIHtDUjM1LCAzLCAzfSB9IH0sCisJLyogSUdBMSBWZXJ0aWNhbCBCbGFuayBFbmQgKi8KKwl7SUdBMV9WRVJfQkxBTktfRU5EX1JFR19OVU0sIHt7Q1IxNiwgMCwgN30gfSB9LAorCS8qIElHQTEgVmVydGljYWwgU3luYyBTdGFydCAqLworCXtJR0ExX1ZFUl9TWU5DX1NUQVJUX1JFR19OVU0sCisJIHt7Q1IxMCwgMCwgN30sIHtDUjA3LCAyLCAyfSwge0NSMDcsIDcsIDd9LCB7Q1IzNSwgMSwgMX0gfSB9LAorCS8qIElHQTEgVmVydGljYWwgU3luYyBFbmQgKi8KKwl7SUdBMV9WRVJfU1lOQ19FTkRfUkVHX05VTSwge3tDUjExLCAwLCAzfSB9IH0KK307CisKK3N0YXRpYyBzdHJ1Y3QgaWdhMl9jcnRjX3RpbWluZyBpZ2EyX2NydGNfcmVnID0geworCS8qIElHQTIgSG9yaXpvbnRhbCBUb3RhbCAqLworCXtJR0EyX0hPUl9UT1RBTF9SRUdfTlVNLCB7e0NSNTAsIDAsIDd9LCB7Q1I1NSwgMCwgM30gfSB9LAorCS8qIElHQTIgSG9yaXpvbnRhbCBBZGRyZXNzYWJsZSBWaWRlbyAqLworCXtJR0EyX0hPUl9BRERSX1JFR19OVU0sIHt7Q1I1MSwgMCwgN30sIHtDUjU1LCA0LCA2fSB9IH0sCisJLyogSUdBMiBIb3Jpem9udGFsIEJsYW5rIFN0YXJ0ICovCisJe0lHQTJfSE9SX0JMQU5LX1NUQVJUX1JFR19OVU0sIHt7Q1I1MiwgMCwgN30sIHtDUjU0LCAwLCAyfSB9IH0sCisJLyogSUdBMiBIb3Jpem9udGFsIEJsYW5rIEVuZCAqLworCXtJR0EyX0hPUl9CTEFOS19FTkRfUkVHX05VTSwKKwkge3tDUjUzLCAwLCA3fSwge0NSNTQsIDMsIDV9LCB7Q1I1RCwgNiwgNn0gfSB9LAorCS8qIElHQTIgSG9yaXpvbnRhbCBTeW5jIFN0YXJ0ICovCisJe0lHQTJfSE9SX1NZTkNfU1RBUlRfUkVHX05VTSwKKwkge3tDUjU2LCAwLCA3fSwge0NSNTQsIDYsIDd9LCB7Q1I1QywgNywgN30sIHtDUjVELCA3LCA3fSB9IH0sCisJLyogSUdBMiBIb3Jpem9udGFsIFN5bmMgRW5kICovCisJe0lHQTJfSE9SX1NZTkNfRU5EX1JFR19OVU0sIHt7Q1I1NywgMCwgN30sIHtDUjVDLCA2LCA2fSB9IH0sCisJLyogSUdBMiBWZXJ0aWNhbCBUb3RhbCAqLworCXtJR0EyX1ZFUl9UT1RBTF9SRUdfTlVNLCB7e0NSNTgsIDAsIDd9LCB7Q1I1RCwgMCwgMn0gfSB9LAorCS8qIElHQTIgVmVydGljYWwgQWRkcmVzc2FibGUgVmlkZW8gKi8KKwl7SUdBMl9WRVJfQUREUl9SRUdfTlVNLCB7e0NSNTksIDAsIDd9LCB7Q1I1RCwgMywgNX0gfSB9LAorCS8qIElHQTIgVmVydGljYWwgQmxhbmsgU3RhcnQgKi8KKwl7SUdBMl9WRVJfQkxBTktfU1RBUlRfUkVHX05VTSwge3tDUjVBLCAwLCA3fSwge0NSNUMsIDAsIDJ9IH0gfSwKKwkvKiBJR0EyIFZlcnRpY2FsIEJsYW5rIEVuZCAqLworCXtJR0EyX1ZFUl9CTEFOS19FTkRfUkVHX05VTSwge3tDUjVCLCAwLCA3fSwge0NSNUMsIDMsIDV9IH0gfSwKKwkvKiBJR0EyIFZlcnRpY2FsIFN5bmMgU3RhcnQgKi8KKwl7SUdBMl9WRVJfU1lOQ19TVEFSVF9SRUdfTlVNLCB7e0NSNUUsIDAsIDd9LCB7Q1I1RiwgNSwgN30gfSB9LAorCS8qIElHQTIgVmVydGljYWwgU3luYyBFbmQgKi8KKwl7SUdBMl9WRVJfU1lOQ19FTkRfUkVHX05VTSwge3tDUjVGLCAwLCA0fSB9IH0KK307CisKK3N0YXRpYyBzdHJ1Y3QgcmdiTFVUIHBhbExVVF90YWJsZVtdID0geworCS8qIHtSLEcsQn0gKi8KKwkvKiBJbmRleCAweDAwfjB4MDMgKi8KKwl7MHgwMCwgMHgwMCwgMHgwMH0sIHsweDAwLCAweDAwLCAweDJBfSwgezB4MDAsIDB4MkEsIDB4MDB9LCB7MHgwMCwKKwkJCQkJCQkJICAgICAweDJBLAorCQkJCQkJCQkgICAgIDB4MkF9LAorCS8qIEluZGV4IDB4MDR+MHgwNyAqLworCXsweDJBLCAweDAwLCAweDAwfSwgezB4MkEsIDB4MDAsIDB4MkF9LCB7MHgyQSwgMHgxNSwgMHgwMH0sIHsweDJBLAorCQkJCQkJCQkgICAgIDB4MkEsCisJCQkJCQkJCSAgICAgMHgyQX0sCisJLyogSW5kZXggMHgwOH4weDBCICovCisJezB4MTUsIDB4MTUsIDB4MTV9LCB7MHgxNSwgMHgxNSwgMHgzRn0sIHsweDE1LCAweDNGLCAweDE1fSwgezB4MTUsCisJCQkJCQkJCSAgICAgMHgzRiwKKwkJCQkJCQkJICAgICAweDNGfSwKKwkvKiBJbmRleCAweDBDfjB4MEYgKi8KKwl7MHgzRiwgMHgxNSwgMHgxNX0sIHsweDNGLCAweDE1LCAweDNGfSwgezB4M0YsIDB4M0YsIDB4MTV9LCB7MHgzRiwKKwkJCQkJCQkJICAgICAweDNGLAorCQkJCQkJCQkgICAgIDB4M0Z9LAorCS8qIEluZGV4IDB4MTB+MHgxMyAqLworCXsweDAwLCAweDAwLCAweDAwfSwgezB4MDUsIDB4MDUsIDB4MDV9LCB7MHgwOCwgMHgwOCwgMHgwOH0sIHsweDBCLAorCQkJCQkJCQkgICAgIDB4MEIsCisJCQkJCQkJCSAgICAgMHgwQn0sCisJLyogSW5kZXggMHgxNH4weDE3ICovCisJezB4MEUsIDB4MEUsIDB4MEV9LCB7MHgxMSwgMHgxMSwgMHgxMX0sIHsweDE0LCAweDE0LCAweDE0fSwgezB4MTgsCisJCQkJCQkJCSAgICAgMHgxOCwKKwkJCQkJCQkJICAgICAweDE4fSwKKwkvKiBJbmRleCAweDE4fjB4MUIgKi8KKwl7MHgxQywgMHgxQywgMHgxQ30sIHsweDIwLCAweDIwLCAweDIwfSwgezB4MjQsIDB4MjQsIDB4MjR9LCB7MHgyOCwKKwkJCQkJCQkJICAgICAweDI4LAorCQkJCQkJCQkgICAgIDB4Mjh9LAorCS8qIEluZGV4IDB4MUN+MHgxRiAqLworCXsweDJELCAweDJELCAweDJEfSwgezB4MzIsIDB4MzIsIDB4MzJ9LCB7MHgzOCwgMHgzOCwgMHgzOH0sIHsweDNGLAorCQkJCQkJCQkgICAgIDB4M0YsCisJCQkJCQkJCSAgICAgMHgzRn0sCisJLyogSW5kZXggMHgyMH4weDIzICovCisJezB4MDAsIDB4MDAsIDB4M0Z9LCB7MHgxMCwgMHgwMCwgMHgzRn0sIHsweDFGLCAweDAwLCAweDNGfSwgezB4MkYsCisJCQkJCQkJCSAgICAgMHgwMCwKKwkJCQkJCQkJICAgICAweDNGfSwKKwkvKiBJbmRleCAweDI0fjB4MjcgKi8KKwl7MHgzRiwgMHgwMCwgMHgzRn0sIHsweDNGLCAweDAwLCAweDJGfSwgezB4M0YsIDB4MDAsIDB4MUZ9LCB7MHgzRiwKKwkJCQkJCQkJICAgICAweDAwLAorCQkJCQkJCQkgICAgIDB4MTB9LAorCS8qIEluZGV4IDB4Mjh+MHgyQiAqLworCXsweDNGLCAweDAwLCAweDAwfSwgezB4M0YsIDB4MTAsIDB4MDB9LCB7MHgzRiwgMHgxRiwgMHgwMH0sIHsweDNGLAorCQkJCQkJCQkgICAgIDB4MkYsCisJCQkJCQkJCSAgICAgMHgwMH0sCisJLyogSW5kZXggMHgyQ34weDJGICovCisJezB4M0YsIDB4M0YsIDB4MDB9LCB7MHgyRiwgMHgzRiwgMHgwMH0sIHsweDFGLCAweDNGLCAweDAwfSwgezB4MTAsCisJCQkJCQkJCSAgICAgMHgzRiwKKwkJCQkJCQkJICAgICAweDAwfSwKKwkvKiBJbmRleCAweDMwfjB4MzMgKi8KKwl7MHgwMCwgMHgzRiwgMHgwMH0sIHsweDAwLCAweDNGLCAweDEwfSwgezB4MDAsIDB4M0YsIDB4MUZ9LCB7MHgwMCwKKwkJCQkJCQkJICAgICAweDNGLAorCQkJCQkJCQkgICAgIDB4MkZ9LAorCS8qIEluZGV4IDB4MzR+MHgzNyAqLworCXsweDAwLCAweDNGLCAweDNGfSwgezB4MDAsIDB4MkYsIDB4M0Z9LCB7MHgwMCwgMHgxRiwgMHgzRn0sIHsweDAwLAorCQkJCQkJCQkgICAgIDB4MTAsCisJCQkJCQkJCSAgICAgMHgzRn0sCisJLyogSW5kZXggMHgzOH4weDNCICovCisJezB4MUYsIDB4MUYsIDB4M0Z9LCB7MHgyNywgMHgxRiwgMHgzRn0sIHsweDJGLCAweDFGLCAweDNGfSwgezB4MzcsCisJCQkJCQkJCSAgICAgMHgxRiwKKwkJCQkJCQkJICAgICAweDNGfSwKKwkvKiBJbmRleCAweDNDfjB4M0YgKi8KKwl7MHgzRiwgMHgxRiwgMHgzRn0sIHsweDNGLCAweDFGLCAweDM3fSwgezB4M0YsIDB4MUYsIDB4MkZ9LCB7MHgzRiwKKwkJCQkJCQkJICAgICAweDFGLAorCQkJCQkJCQkgICAgIDB4Mjd9LAorCS8qIEluZGV4IDB4NDB+MHg0MyAqLworCXsweDNGLCAweDFGLCAweDFGfSwgezB4M0YsIDB4MjcsIDB4MUZ9LCB7MHgzRiwgMHgyRiwgMHgxRn0sIHsweDNGLAorCQkJCQkJCQkgICAgIDB4M0YsCisJCQkJCQkJCSAgICAgMHgxRn0sCisJLyogSW5kZXggMHg0NH4weDQ3ICovCisJezB4M0YsIDB4M0YsIDB4MUZ9LCB7MHgzNywgMHgzRiwgMHgxRn0sIHsweDJGLCAweDNGLCAweDFGfSwgezB4MjcsCisJCQkJCQkJCSAgICAgMHgzRiwKKwkJCQkJCQkJICAgICAweDFGfSwKKwkvKiBJbmRleCAweDQ4fjB4NEIgKi8KKwl7MHgxRiwgMHgzRiwgMHgxRn0sIHsweDFGLCAweDNGLCAweDI3fSwgezB4MUYsIDB4M0YsIDB4MkZ9LCB7MHgxRiwKKwkJCQkJCQkJICAgICAweDNGLAorCQkJCQkJCQkgICAgIDB4Mzd9LAorCS8qIEluZGV4IDB4NEN+MHg0RiAqLworCXsweDFGLCAweDNGLCAweDNGfSwgezB4MUYsIDB4MzcsIDB4M0Z9LCB7MHgxRiwgMHgyRiwgMHgzRn0sIHsweDFGLAorCQkJCQkJCQkgICAgIDB4MjcsCisJCQkJCQkJCSAgICAgMHgzRn0sCisJLyogSW5kZXggMHg1MH4weDUzICovCisJezB4MkQsIDB4MkQsIDB4M0Z9LCB7MHgzMSwgMHgyRCwgMHgzRn0sIHsweDM2LCAweDJELCAweDNGfSwgezB4M0EsCisJCQkJCQkJCSAgICAgMHgyRCwKKwkJCQkJCQkJICAgICAweDNGfSwKKwkvKiBJbmRleCAweDU0fjB4NTcgKi8KKwl7MHgzRiwgMHgyRCwgMHgzRn0sIHsweDNGLCAweDJELCAweDNBfSwgezB4M0YsIDB4MkQsIDB4MzZ9LCB7MHgzRiwKKwkJCQkJCQkJICAgICAweDJELAorCQkJCQkJCQkgICAgIDB4MzF9LAorCS8qIEluZGV4IDB4NTh+MHg1QiAqLworCXsweDNGLCAweDJELCAweDJEfSwgezB4M0YsIDB4MzEsIDB4MkR9LCB7MHgzRiwgMHgzNiwgMHgyRH0sIHsweDNGLAorCQkJCQkJCQkgICAgIDB4M0EsCisJCQkJCQkJCSAgICAgMHgyRH0sCisJLyogSW5kZXggMHg1Q34weDVGICovCisJezB4M0YsIDB4M0YsIDB4MkR9LCB7MHgzQSwgMHgzRiwgMHgyRH0sIHsweDM2LCAweDNGLCAweDJEfSwgezB4MzEsCisJCQkJCQkJCSAgICAgMHgzRiwKKwkJCQkJCQkJICAgICAweDJEfSwKKwkvKiBJbmRleCAweDYwfjB4NjMgKi8KKwl7MHgyRCwgMHgzRiwgMHgyRH0sIHsweDJELCAweDNGLCAweDMxfSwgezB4MkQsIDB4M0YsIDB4MzZ9LCB7MHgyRCwKKwkJCQkJCQkJICAgICAweDNGLAorCQkJCQkJCQkgICAgIDB4M0F9LAorCS8qIEluZGV4IDB4NjR+MHg2NyAqLworCXsweDJELCAweDNGLCAweDNGfSwgezB4MkQsIDB4M0EsIDB4M0Z9LCB7MHgyRCwgMHgzNiwgMHgzRn0sIHsweDJELAorCQkJCQkJCQkgICAgIDB4MzEsCisJCQkJCQkJCSAgICAgMHgzRn0sCisJLyogSW5kZXggMHg2OH4weDZCICovCisJezB4MDAsIDB4MDAsIDB4MUN9LCB7MHgwNywgMHgwMCwgMHgxQ30sIHsweDBFLCAweDAwLCAweDFDfSwgezB4MTUsCisJCQkJCQkJCSAgICAgMHgwMCwKKwkJCQkJCQkJICAgICAweDFDfSwKKwkvKiBJbmRleCAweDZDfjB4NkYgKi8KKwl7MHgxQywgMHgwMCwgMHgxQ30sIHsweDFDLCAweDAwLCAweDE1fSwgezB4MUMsIDB4MDAsIDB4MEV9LCB7MHgxQywKKwkJCQkJCQkJICAgICAweDAwLAorCQkJCQkJCQkgICAgIDB4MDd9LAorCS8qIEluZGV4IDB4NzB+MHg3MyAqLworCXsweDFDLCAweDAwLCAweDAwfSwgezB4MUMsIDB4MDcsIDB4MDB9LCB7MHgxQywgMHgwRSwgMHgwMH0sIHsweDFDLAorCQkJCQkJCQkgICAgIDB4MTUsCisJCQkJCQkJCSAgICAgMHgwMH0sCisJLyogSW5kZXggMHg3NH4weDc3ICovCisJezB4MUMsIDB4MUMsIDB4MDB9LCB7MHgxNSwgMHgxQywgMHgwMH0sIHsweDBFLCAweDFDLCAweDAwfSwgezB4MDcsCisJCQkJCQkJCSAgICAgMHgxQywKKwkJCQkJCQkJICAgICAweDAwfSwKKwkvKiBJbmRleCAweDc4fjB4N0IgKi8KKwl7MHgwMCwgMHgxQywgMHgwMH0sIHsweDAwLCAweDFDLCAweDA3fSwgezB4MDAsIDB4MUMsIDB4MEV9LCB7MHgwMCwKKwkJCQkJCQkJICAgICAweDFDLAorCQkJCQkJCQkgICAgIDB4MTV9LAorCS8qIEluZGV4IDB4N0N+MHg3RiAqLworCXsweDAwLCAweDFDLCAweDFDfSwgezB4MDAsIDB4MTUsIDB4MUN9LCB7MHgwMCwgMHgwRSwgMHgxQ30sIHsweDAwLAorCQkJCQkJCQkgICAgIDB4MDcsCisJCQkJCQkJCSAgICAgMHgxQ30sCisJLyogSW5kZXggMHg4MH4weDgzICovCisJezB4MEUsIDB4MEUsIDB4MUN9LCB7MHgxMSwgMHgwRSwgMHgxQ30sIHsweDE1LCAweDBFLCAweDFDfSwgezB4MTgsCisJCQkJCQkJCSAgICAgMHgwRSwKKwkJCQkJCQkJICAgICAweDFDfSwKKwkvKiBJbmRleCAweDg0fjB4ODcgKi8KKwl7MHgxQywgMHgwRSwgMHgxQ30sIHsweDFDLCAweDBFLCAweDE4fSwgezB4MUMsIDB4MEUsIDB4MTV9LCB7MHgxQywKKwkJCQkJCQkJICAgICAweDBFLAorCQkJCQkJCQkgICAgIDB4MTF9LAorCS8qIEluZGV4IDB4ODh+MHg4QiAqLworCXsweDFDLCAweDBFLCAweDBFfSwgezB4MUMsIDB4MTEsIDB4MEV9LCB7MHgxQywgMHgxNSwgMHgwRX0sIHsweDFDLAorCQkJCQkJCQkgICAgIDB4MTgsCisJCQkJCQkJCSAgICAgMHgwRX0sCisJLyogSW5kZXggMHg4Q34weDhGICovCisJezB4MUMsIDB4MUMsIDB4MEV9LCB7MHgxOCwgMHgxQywgMHgwRX0sIHsweDE1LCAweDFDLCAweDBFfSwgezB4MTEsCisJCQkJCQkJCSAgICAgMHgxQywKKwkJCQkJCQkJICAgICAweDBFfSwKKwkvKiBJbmRleCAweDkwfjB4OTMgKi8KKwl7MHgwRSwgMHgxQywgMHgwRX0sIHsweDBFLCAweDFDLCAweDExfSwgezB4MEUsIDB4MUMsIDB4MTV9LCB7MHgwRSwKKwkJCQkJCQkJICAgICAweDFDLAorCQkJCQkJCQkgICAgIDB4MTh9LAorCS8qIEluZGV4IDB4OTR+MHg5NyAqLworCXsweDBFLCAweDFDLCAweDFDfSwgezB4MEUsIDB4MTgsIDB4MUN9LCB7MHgwRSwgMHgxNSwgMHgxQ30sIHsweDBFLAorCQkJCQkJCQkgICAgIDB4MTEsCisJCQkJCQkJCSAgICAgMHgxQ30sCisJLyogSW5kZXggMHg5OH4weDlCICovCisJezB4MTQsIDB4MTQsIDB4MUN9LCB7MHgxNiwgMHgxNCwgMHgxQ30sIHsweDE4LCAweDE0LCAweDFDfSwgezB4MUEsCisJCQkJCQkJCSAgICAgMHgxNCwKKwkJCQkJCQkJICAgICAweDFDfSwKKwkvKiBJbmRleCAweDlDfjB4OUYgKi8KKwl7MHgxQywgMHgxNCwgMHgxQ30sIHsweDFDLCAweDE0LCAweDFBfSwgezB4MUMsIDB4MTQsIDB4MTh9LCB7MHgxQywKKwkJCQkJCQkJICAgICAweDE0LAorCQkJCQkJCQkgICAgIDB4MTZ9LAorCS8qIEluZGV4IDB4QTB+MHhBMyAqLworCXsweDFDLCAweDE0LCAweDE0fSwgezB4MUMsIDB4MTYsIDB4MTR9LCB7MHgxQywgMHgxOCwgMHgxNH0sIHsweDFDLAorCQkJCQkJCQkgICAgIDB4MUEsCisJCQkJCQkJCSAgICAgMHgxNH0sCisJLyogSW5kZXggMHhBNH4weEE3ICovCisJezB4MUMsIDB4MUMsIDB4MTR9LCB7MHgxQSwgMHgxQywgMHgxNH0sIHsweDE4LCAweDFDLCAweDE0fSwgezB4MTYsCisJCQkJCQkJCSAgICAgMHgxQywKKwkJCQkJCQkJICAgICAweDE0fSwKKwkvKiBJbmRleCAweEE4fjB4QUIgKi8KKwl7MHgxNCwgMHgxQywgMHgxNH0sIHsweDE0LCAweDFDLCAweDE2fSwgezB4MTQsIDB4MUMsIDB4MTh9LCB7MHgxNCwKKwkJCQkJCQkJICAgICAweDFDLAorCQkJCQkJCQkgICAgIDB4MUF9LAorCS8qIEluZGV4IDB4QUN+MHhBRiAqLworCXsweDE0LCAweDFDLCAweDFDfSwgezB4MTQsIDB4MUEsIDB4MUN9LCB7MHgxNCwgMHgxOCwgMHgxQ30sIHsweDE0LAorCQkJCQkJCQkgICAgIDB4MTYsCisJCQkJCQkJCSAgICAgMHgxQ30sCisJLyogSW5kZXggMHhCMH4weEIzICovCisJezB4MDAsIDB4MDAsIDB4MTB9LCB7MHgwNCwgMHgwMCwgMHgxMH0sIHsweDA4LCAweDAwLCAweDEwfSwgezB4MEMsCisJCQkJCQkJCSAgICAgMHgwMCwKKwkJCQkJCQkJICAgICAweDEwfSwKKwkvKiBJbmRleCAweEI0fjB4QjcgKi8KKwl7MHgxMCwgMHgwMCwgMHgxMH0sIHsweDEwLCAweDAwLCAweDBDfSwgezB4MTAsIDB4MDAsIDB4MDh9LCB7MHgxMCwKKwkJCQkJCQkJICAgICAweDAwLAorCQkJCQkJCQkgICAgIDB4MDR9LAorCS8qIEluZGV4IDB4Qjh+MHhCQiAqLworCXsweDEwLCAweDAwLCAweDAwfSwgezB4MTAsIDB4MDQsIDB4MDB9LCB7MHgxMCwgMHgwOCwgMHgwMH0sIHsweDEwLAorCQkJCQkJCQkgICAgIDB4MEMsCisJCQkJCQkJCSAgICAgMHgwMH0sCisJLyogSW5kZXggMHhCQ34weEJGICovCisJezB4MTAsIDB4MTAsIDB4MDB9LCB7MHgwQywgMHgxMCwgMHgwMH0sIHsweDA4LCAweDEwLCAweDAwfSwgezB4MDQsCisJCQkJCQkJCSAgICAgMHgxMCwKKwkJCQkJCQkJICAgICAweDAwfSwKKwkvKiBJbmRleCAweEMwfjB4QzMgKi8KKwl7MHgwMCwgMHgxMCwgMHgwMH0sIHsweDAwLCAweDEwLCAweDA0fSwgezB4MDAsIDB4MTAsIDB4MDh9LCB7MHgwMCwKKwkJCQkJCQkJICAgICAweDEwLAorCQkJCQkJCQkgICAgIDB4MEN9LAorCS8qIEluZGV4IDB4QzR+MHhDNyAqLworCXsweDAwLCAweDEwLCAweDEwfSwgezB4MDAsIDB4MEMsIDB4MTB9LCB7MHgwMCwgMHgwOCwgMHgxMH0sIHsweDAwLAorCQkJCQkJCQkgICAgIDB4MDQsCisJCQkJCQkJCSAgICAgMHgxMH0sCisJLyogSW5kZXggMHhDOH4weENCICovCisJezB4MDgsIDB4MDgsIDB4MTB9LCB7MHgwQSwgMHgwOCwgMHgxMH0sIHsweDBDLCAweDA4LCAweDEwfSwgezB4MEUsCisJCQkJCQkJCSAgICAgMHgwOCwKKwkJCQkJCQkJICAgICAweDEwfSwKKwkvKiBJbmRleCAweENDfjB4Q0YgKi8KKwl7MHgxMCwgMHgwOCwgMHgxMH0sIHsweDEwLCAweDA4LCAweDBFfSwgezB4MTAsIDB4MDgsIDB4MEN9LCB7MHgxMCwKKwkJCQkJCQkJICAgICAweDA4LAorCQkJCQkJCQkgICAgIDB4MEF9LAorCS8qIEluZGV4IDB4RDB+MHhEMyAqLworCXsweDEwLCAweDA4LCAweDA4fSwgezB4MTAsIDB4MEEsIDB4MDh9LCB7MHgxMCwgMHgwQywgMHgwOH0sIHsweDEwLAorCQkJCQkJCQkgICAgIDB4MEUsCisJCQkJCQkJCSAgICAgMHgwOH0sCisJLyogSW5kZXggMHhENH4weEQ3ICovCisJezB4MTAsIDB4MTAsIDB4MDh9LCB7MHgwRSwgMHgxMCwgMHgwOH0sIHsweDBDLCAweDEwLCAweDA4fSwgezB4MEEsCisJCQkJCQkJCSAgICAgMHgxMCwKKwkJCQkJCQkJICAgICAweDA4fSwKKwkvKiBJbmRleCAweEQ4fjB4REIgKi8KKwl7MHgwOCwgMHgxMCwgMHgwOH0sIHsweDA4LCAweDEwLCAweDBBfSwgezB4MDgsIDB4MTAsIDB4MEN9LCB7MHgwOCwKKwkJCQkJCQkJICAgICAweDEwLAorCQkJCQkJCQkgICAgIDB4MEV9LAorCS8qIEluZGV4IDB4REN+MHhERiAqLworCXsweDA4LCAweDEwLCAweDEwfSwgezB4MDgsIDB4MEUsIDB4MTB9LCB7MHgwOCwgMHgwQywgMHgxMH0sIHsweDA4LAorCQkJCQkJCQkgICAgIDB4MEEsCisJCQkJCQkJCSAgICAgMHgxMH0sCisJLyogSW5kZXggMHhFMH4weEUzICovCisJezB4MEIsIDB4MEIsIDB4MTB9LCB7MHgwQywgMHgwQiwgMHgxMH0sIHsweDBELCAweDBCLCAweDEwfSwgezB4MEYsCisJCQkJCQkJCSAgICAgMHgwQiwKKwkJCQkJCQkJICAgICAweDEwfSwKKwkvKiBJbmRleCAweEU0fjB4RTcgKi8KKwl7MHgxMCwgMHgwQiwgMHgxMH0sIHsweDEwLCAweDBCLCAweDBGfSwgezB4MTAsIDB4MEIsIDB4MER9LCB7MHgxMCwKKwkJCQkJCQkJICAgICAweDBCLAorCQkJCQkJCQkgICAgIDB4MEN9LAorCS8qIEluZGV4IDB4RTh+MHhFQiAqLworCXsweDEwLCAweDBCLCAweDBCfSwgezB4MTAsIDB4MEMsIDB4MEJ9LCB7MHgxMCwgMHgwRCwgMHgwQn0sIHsweDEwLAorCQkJCQkJCQkgICAgIDB4MEYsCisJCQkJCQkJCSAgICAgMHgwQn0sCisJLyogSW5kZXggMHhFQ34weEVGICovCisJezB4MTAsIDB4MTAsIDB4MEJ9LCB7MHgwRiwgMHgxMCwgMHgwQn0sIHsweDBELCAweDEwLCAweDBCfSwgezB4MEMsCisJCQkJCQkJCSAgICAgMHgxMCwKKwkJCQkJCQkJICAgICAweDBCfSwKKwkvKiBJbmRleCAweEYwfjB4RjMgKi8KKwl7MHgwQiwgMHgxMCwgMHgwQn0sIHsweDBCLCAweDEwLCAweDBDfSwgezB4MEIsIDB4MTAsIDB4MER9LCB7MHgwQiwKKwkJCQkJCQkJICAgICAweDEwLAorCQkJCQkJCQkgICAgIDB4MEZ9LAorCS8qIEluZGV4IDB4RjR+MHhGNyAqLworCXsweDBCLCAweDEwLCAweDEwfSwgezB4MEIsIDB4MEYsIDB4MTB9LCB7MHgwQiwgMHgwRCwgMHgxMH0sIHsweDBCLAorCQkJCQkJCQkgICAgIDB4MEMsCisJCQkJCQkJCSAgICAgMHgxMH0sCisJLyogSW5kZXggMHhGOH4weEZCICovCisJezB4MDAsIDB4MDAsIDB4MDB9LCB7MHgwMCwgMHgwMCwgMHgwMH0sIHsweDAwLCAweDAwLCAweDAwfSwgezB4MDAsCisJCQkJCQkJCSAgICAgMHgwMCwKKwkJCQkJCQkJICAgICAweDAwfSwKKwkvKiBJbmRleCAweEZDfjB4RkYgKi8KKwl7MHgwMCwgMHgwMCwgMHgwMH0sIHsweDAwLCAweDAwLCAweDAwfSwgezB4MDAsIDB4MDAsIDB4MDB9LCB7MHgwMCwKKwkJCQkJCQkJICAgICAweDAwLAorCQkJCQkJCQkgICAgIDB4MDB9Cit9OworCitzdGF0aWMgdm9pZCBzZXRfY3J0X291dHB1dF9wYXRoKGludCBzZXRfaWdhKTsKK3N0YXRpYyB2b2lkIGR2aV9wYXRjaF9za2V3X2R2cDAodm9pZCk7CitzdGF0aWMgdm9pZCBkdmlfcGF0Y2hfc2tld19kdnAxKHZvaWQpOworc3RhdGljIHZvaWQgZHZpX3BhdGNoX3NrZXdfZHZwX2xvdyh2b2lkKTsKK3N0YXRpYyB2b2lkIHNldF9kdmlfb3V0cHV0X3BhdGgoaW50IHNldF9pZ2EsIGludCBvdXRwdXRfaW50ZXJmYWNlKTsKK3N0YXRpYyB2b2lkIHNldF9sY2Rfb3V0cHV0X3BhdGgoaW50IHNldF9pZ2EsIGludCBvdXRwdXRfaW50ZXJmYWNlKTsKK3N0YXRpYyBpbnQgc2VhcmNoX21vZGVfc2V0dGluZyhpbnQgTW9kZUluZm9JbmRleCk7CitzdGF0aWMgdm9pZCBsb2FkX2ZpeF9iaXRfY3J0Y19yZWcodm9pZCk7CitzdGF0aWMgdm9pZCBpbml0X2dmeF9jaGlwX2luZm8odm9pZCk7CitzdGF0aWMgdm9pZCBpbml0X3RtZHNfY2hpcF9pbmZvKHZvaWQpOworc3RhdGljIHZvaWQgaW5pdF9sdmRzX2NoaXBfaW5mbyh2b2lkKTsKK3N0YXRpYyB2b2lkIGRldmljZV9zY3JlZW5fb2ZmKHZvaWQpOworc3RhdGljIHZvaWQgZGV2aWNlX3NjcmVlbl9vbih2b2lkKTsKK3N0YXRpYyB2b2lkIHNldF9kaXNwbGF5X2NoYW5uZWwodm9pZCk7CitzdGF0aWMgdm9pZCBkZXZpY2Vfb2ZmKHZvaWQpOworc3RhdGljIHZvaWQgZGV2aWNlX29uKHZvaWQpOworc3RhdGljIHZvaWQgZW5hYmxlX3NlY29uZF9kaXNwbGF5X2NoYW5uZWwodm9pZCk7CitzdGF0aWMgdm9pZCBkaXNhYmxlX3NlY29uZF9kaXNwbGF5X2NoYW5uZWwodm9pZCk7CitzdGF0aWMgaW50IGdldF9mYl9zaXplX2Zyb21fcGNpKHZvaWQpOworCit2b2lkIHZpYWZiX3dyaXRlX3JlZyh1OCBpbmRleCwgdTE2IGlvX3BvcnQsIHU4IGRhdGEpCit7CisJb3V0YihpbmRleCwgaW9fcG9ydCk7CisJb3V0YihkYXRhLCBpb19wb3J0ICsgMSk7CisJLypERUJVR19NU0coS0VSTl9JTkZPICJcbkluZGV4PSUyZCBWYWx1ZT0lMmQiLCBpbmRleCwgZGF0YSk7ICovCit9Cit1OCB2aWFmYl9yZWFkX3JlZyhpbnQgaW9fcG9ydCwgdTggaW5kZXgpCit7CisJb3V0YihpbmRleCwgaW9fcG9ydCk7CisJcmV0dXJuIGluYihpb19wb3J0ICsgMSk7Cit9CisKK3ZvaWQgdmlhZmJfbG9ja19jcnQodm9pZCkKK3sKKwl2aWFmYl93cml0ZV9yZWdfbWFzayhDUjExLCBWSUFDUiwgQklUNywgQklUNyk7Cit9CisKK3ZvaWQgdmlhZmJfdW5sb2NrX2NydCh2b2lkKQoreworCXZpYWZiX3dyaXRlX3JlZ19tYXNrKENSMTEsIFZJQUNSLCAwLCBCSVQ3KTsKKwl2aWFmYl93cml0ZV9yZWdfbWFzayhDUjQ3LCBWSUFDUiwgMCwgQklUMCk7Cit9CisKK3ZvaWQgdmlhZmJfd3JpdGVfcmVnX21hc2sodTggaW5kZXgsIGludCBpb19wb3J0LCB1OCBkYXRhLCB1OCBtYXNrKQoreworCXU4IHRtcDsKKworCW91dGIoaW5kZXgsIGlvX3BvcnQpOworCXRtcCA9IGluYihpb19wb3J0ICsgMSk7CisJb3V0YigoZGF0YSAmIG1hc2spIHwgKHRtcCAmICh+bWFzaykpLCBpb19wb3J0ICsgMSk7CisJLypERUJVR19NU0coS0VSTl9JTkZPICJcbkluZGV4PSUyZCBWYWx1ZT0lMmQiLCBpbmRleCwgdG1wKTsgKi8KK30KKwordm9pZCB3cml0ZV9kYWNfcmVnKHU4IGluZGV4LCB1OCByLCB1OCBnLCB1OCBiKQoreworCW91dGIoaW5kZXgsIExVVF9JTkRFWF9XUklURSk7CisJb3V0YihyLCBMVVRfREFUQSk7CisJb3V0YihnLCBMVVRfREFUQSk7CisJb3V0YihiLCBMVVRfREFUQSk7Cit9CisKKy8qU2V0IElHQSBwYXRoIGZvciBlYWNoIGRldmljZSovCit2b2lkIHZpYWZiX3NldF9pZ2FfcGF0aCh2b2lkKQoreworCisJaWYgKHZpYWZiX1NBTU1fT04gPT0gMSkgeworCQlpZiAodmlhZmJfQ1JUX09OKSB7CisJCQlpZiAodmlhZmJfcHJpbWFyeV9kZXYgPT0gQ1JUX0RldmljZSkKKwkJCQl2aWFwYXJpbmZvLT5jcnRfc2V0dGluZ19pbmZvLT5pZ2FfcGF0aCA9IElHQTE7CisJCQllbHNlCisJCQkJdmlhcGFyaW5mby0+Y3J0X3NldHRpbmdfaW5mby0+aWdhX3BhdGggPSBJR0EyOworCQl9CisKKwkJaWYgKHZpYWZiX0RWSV9PTikgeworCQkJaWYgKHZpYWZiX3ByaW1hcnlfZGV2ID09IERWSV9EZXZpY2UpCisJCQkJdmlhcGFyaW5mby0+dG1kc19zZXR0aW5nX2luZm8tPmlnYV9wYXRoID0gSUdBMTsKKwkJCWVsc2UKKwkJCQl2aWFwYXJpbmZvLT50bWRzX3NldHRpbmdfaW5mby0+aWdhX3BhdGggPSBJR0EyOworCQl9CisKKwkJaWYgKHZpYWZiX0xDRF9PTikgeworCQkJaWYgKHZpYWZiX3ByaW1hcnlfZGV2ID09IExDRF9EZXZpY2UpIHsKKwkJCQlpZiAodmlhZmJfZHVhbF9mYiAmJgorCQkJCQkodmlhcGFyaW5mby0+Y2hpcF9pbmZvLT5nZnhfY2hpcF9uYW1lID09CisJCQkJCVVOSUNIUk9NRV9DTEUyNjYpKSB7CisJCQkJCXZpYXBhcmluZm8tPgorCQkJCQlsdmRzX3NldHRpbmdfaW5mby0+aWdhX3BhdGggPSBJR0EyOworCQkJCQl2aWFwYXJpbmZvLT4KKwkJCQkJY3J0X3NldHRpbmdfaW5mby0+aWdhX3BhdGggPSBJR0ExOworCQkJCQl2aWFwYXJpbmZvLT4KKwkJCQkJdG1kc19zZXR0aW5nX2luZm8tPmlnYV9wYXRoID0gSUdBMTsKKwkJCQl9IGVsc2UKKwkJCQkJdmlhcGFyaW5mby0+CisJCQkJCWx2ZHNfc2V0dGluZ19pbmZvLT5pZ2FfcGF0aCA9IElHQTE7CisJCQl9IGVsc2UgeworCQkJCXZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvLT5pZ2FfcGF0aCA9IElHQTI7CisJCQl9CisJCX0KKwkJaWYgKHZpYWZiX0xDRDJfT04pIHsKKwkJCWlmIChMQ0QyX0RldmljZSA9PSB2aWFmYl9wcmltYXJ5X2RldikKKwkJCQl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mbzItPmlnYV9wYXRoID0gSUdBMTsKKwkJCWVsc2UKKwkJCQl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mbzItPmlnYV9wYXRoID0gSUdBMjsKKwkJfQorCX0gZWxzZSB7CisJCXZpYWZiX1NBTU1fT04gPSAwOworCisJCWlmICh2aWFmYl9DUlRfT04gJiYgdmlhZmJfTENEX09OKSB7CisJCQl2aWFwYXJpbmZvLT5jcnRfc2V0dGluZ19pbmZvLT5pZ2FfcGF0aCA9IElHQTE7CisJCQl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mby0+aWdhX3BhdGggPSBJR0EyOworCQl9IGVsc2UgaWYgKHZpYWZiX0NSVF9PTiAmJiB2aWFmYl9EVklfT04pIHsKKwkJCXZpYXBhcmluZm8tPmNydF9zZXR0aW5nX2luZm8tPmlnYV9wYXRoID0gSUdBMTsKKwkJCXZpYXBhcmluZm8tPnRtZHNfc2V0dGluZ19pbmZvLT5pZ2FfcGF0aCA9IElHQTI7CisJCX0gZWxzZSBpZiAodmlhZmJfTENEX09OICYmIHZpYWZiX0RWSV9PTikgeworCQkJdmlhcGFyaW5mby0+dG1kc19zZXR0aW5nX2luZm8tPmlnYV9wYXRoID0gSUdBMTsKKwkJCXZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvLT5pZ2FfcGF0aCA9IElHQTI7CisJCX0gZWxzZSBpZiAodmlhZmJfTENEX09OICYmIHZpYWZiX0xDRDJfT04pIHsKKwkJCXZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvLT5pZ2FfcGF0aCA9IElHQTI7CisJCQl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mbzItPmlnYV9wYXRoID0gSUdBMjsKKwkJfSBlbHNlIGlmICh2aWFmYl9DUlRfT04pIHsKKwkJCXZpYXBhcmluZm8tPmNydF9zZXR0aW5nX2luZm8tPmlnYV9wYXRoID0gSUdBMTsKKwkJfSBlbHNlIGlmICh2aWFmYl9MQ0RfT04pIHsKKwkJCXZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvLT5pZ2FfcGF0aCA9IElHQTI7CisJCX0gZWxzZSBpZiAodmlhZmJfRFZJX09OKSB7CisJCQl2aWFwYXJpbmZvLT50bWRzX3NldHRpbmdfaW5mby0+aWdhX3BhdGggPSBJR0ExOworCQl9CisJfQorfQorCit2b2lkIHZpYWZiX3NldF9zdGFydF9hZGRyKHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyBvZmZzZXQgPSAwLCB0bXAgPSAwLCBzaXplID0gMDsKKwl1bnNpZ25lZCBsb25nIGxlbmd0aDsKKworCURFQlVHX01TRyhLRVJOX0lORk8gInZpYWZiX3NldF9zdGFydF9hZGRyIVxuIik7CisJdmlhZmJfdW5sb2NrX2NydCgpOworCS8qIHVwZGF0ZSBzdGFydGluZyBhZGRyZXNzIG9mIElHQTEgKi8KKwl2aWFmYl93cml0ZV9yZWcoQ1IwQywgVklBQ1IsIDB4MDApOwkvKmluaXRpYWwgc3RhcnRpbmcgYWRkcmVzcyAqLworCXZpYWZiX3dyaXRlX3JlZyhDUjBELCBWSUFDUiwgMHgwMCk7CisJdmlhZmJfd3JpdGVfcmVnKENSMzQsIFZJQUNSLCAweDAwKTsKKwl2aWFmYl93cml0ZV9yZWdfbWFzayhDUjQ4LCBWSUFDUiwgMHgwMCwgMHgxRik7CisKKwlpZiAodmlhZmJfZHVhbF9mYikgeworCQl2aWFwYXJpbmZvLT5pZ2FfcGF0aCA9IElHQTE7CisJCXZpYXBhcmluZm8xLT5pZ2FfcGF0aCA9IElHQTI7CisJfQorCisJaWYgKHZpYWZiX1NBTU1fT04gPT0gMSkgeworCQlpZiAoIXZpYWZiX2R1YWxfZmIpIHsKKwkJCWlmICh2aWFmYl9zZWNvbmRfc2l6ZSkKKwkJCQlzaXplID0gdmlhZmJfc2Vjb25kX3NpemUgKiAxMDI0ICogMTAyNDsKKwkJCWVsc2UKKwkJCQlzaXplID0gOCAqIDEwMjQgKiAxMDI0OworCQl9IGVsc2UgeworCisJCQlzaXplID0gdmlhcGFyaW5mbzEtPm1lbXNpemU7CisJCX0KKwkJb2Zmc2V0ID0gdmlhZmJfc2Vjb25kX29mZnNldDsKKwkJREVCVUdfTVNHKEtFUk5fSU5GTworCQkJICAidmlhZmJfc2Vjb25kX3NpemU9JWx4LCBzZWNvbmQgc3RhcnRfYWRkZHJlc3M9JWx4XG4iLAorCQkJICBzaXplLCBvZmZzZXQpOworCX0KKwlpZiAodmlhZmJfU0FNTV9PTiA9PSAxKSB7CisJCW9mZnNldCA9IG9mZnNldCA+PiAzOworCisJCXRtcCA9IHZpYWZiX3JlYWRfcmVnKFZJQUNSLCAweDYyKSAmIDB4MDE7CisJCXRtcCB8PSAob2Zmc2V0ICYgMHg3RikgPDwgMTsKKwkJdmlhZmJfd3JpdGVfcmVnKENSNjIsIFZJQUNSLCB0bXApOworCQl2aWFmYl93cml0ZV9yZWcoQ1I2MywgVklBQ1IsICgob2Zmc2V0ICYgMHg3RjgwKSA+PiA3KSk7CisJCXZpYWZiX3dyaXRlX3JlZyhDUjY0LCBWSUFDUiwgKChvZmZzZXQgJiAweDdGODAwMCkgPj4gMTUpKTsKKwkJdmlhZmJfd3JpdGVfcmVnKENSQTMsIFZJQUNSLCAoKG9mZnNldCAmIDB4MzgwMDAwMCkgPj4gMjMpKTsKKwl9IGVsc2UgeworCQkvKiB1cGRhdGUgc3RhcnRpbmcgYWRkcmVzcyAqLworCQl2aWFmYl93cml0ZV9yZWcoQ1I2MiwgVklBQ1IsIDB4MDApOworCQl2aWFmYl93cml0ZV9yZWcoQ1I2MywgVklBQ1IsIDB4MDApOworCQl2aWFmYl93cml0ZV9yZWcoQ1I2NCwgVklBQ1IsIDB4MDApOworCQl2aWFmYl93cml0ZV9yZWcoQ1JBMywgVklBQ1IsIDB4MDApOworCX0KKworCWlmICh2aWFmYl9TQU1NX09OID09IDEpIHsKKwkJaWYgKHZpYWZiX2FjY2VsKSB7CisJCQlpZiAoIXZpYWZiX2R1YWxfZmIpCisJCQkJbGVuZ3RoID0gc2l6ZSAtIHZpYXBhcmluZm8tPmZibWVtX3VzZWQ7CisJCQllbHNlCisJCQkJbGVuZ3RoID0gc2l6ZSAtIHZpYXBhcmluZm8xLT5mYm1lbV91c2VkOworCQl9IGVsc2UKKwkJCWxlbmd0aCA9IHNpemU7CisJCW9mZnNldCA9ICh1bnNpZ25lZCBsb25nKSh2b2lkICopdmlhZmJfRkJfTU0gKworCQkJdmlhZmJfc2Vjb25kX29mZnNldDsKKwkJbWVtc2V0KCh2b2lkICopb2Zmc2V0LCAwLCBsZW5ndGgpOworCX0KKworCXZpYWZiX2xvY2tfY3J0KCk7Cit9CisKK3ZvaWQgdmlhZmJfc2V0X291dHB1dF9wYXRoKGludCBkZXZpY2UsIGludCBzZXRfaWdhLCBpbnQgb3V0cHV0X2ludGVyZmFjZSkKK3sKKwlzd2l0Y2ggKGRldmljZSkgeworCWNhc2UgREVWSUNFX0NSVDoKKwkJc2V0X2NydF9vdXRwdXRfcGF0aChzZXRfaWdhKTsKKwkJYnJlYWs7CisJY2FzZSBERVZJQ0VfRFZJOgorCQlzZXRfZHZpX291dHB1dF9wYXRoKHNldF9pZ2EsIG91dHB1dF9pbnRlcmZhY2UpOworCQlicmVhazsKKwljYXNlIERFVklDRV9MQ0Q6CisJCXNldF9sY2Rfb3V0cHV0X3BhdGgoc2V0X2lnYSwgb3V0cHV0X2ludGVyZmFjZSk7CisJCWJyZWFrOworCX0KK30KKworc3RhdGljIHZvaWQgc2V0X2NydF9vdXRwdXRfcGF0aChpbnQgc2V0X2lnYSkKK3sKKwl2aWFmYl93cml0ZV9yZWdfbWFzayhDUjM2LCBWSUFDUiwgMHgwMCwgQklUNCArIEJJVDUpOworCisJc3dpdGNoIChzZXRfaWdhKSB7CisJY2FzZSBJR0ExOgorCQl2aWFmYl93cml0ZV9yZWdfbWFzayhTUjE2LCBWSUFTUiwgMHgwMCwgQklUNik7CisJCWJyZWFrOworCWNhc2UgSUdBMjoKKwljYXNlIElHQTFfSUdBMjoKKwkJdmlhZmJfd3JpdGVfcmVnX21hc2soQ1I2QSwgVklBQ1IsIDB4QzAsIEJJVDYgKyBCSVQ3KTsKKwkJdmlhZmJfd3JpdGVfcmVnX21hc2soU1IxNiwgVklBU1IsIDB4NDAsIEJJVDYpOworCQlpZiAoc2V0X2lnYSA9PSBJR0ExX0lHQTIpCisJCQl2aWFmYl93cml0ZV9yZWdfbWFzayhDUjZCLCBWSUFDUiwgMHgwOCwgQklUMyk7CisJCWJyZWFrOworCX0KK30KKworc3RhdGljIHZvaWQgZHZpX3BhdGNoX3NrZXdfZHZwMCh2b2lkKQoreworCS8qIFJlc2V0IGRhdGEgZHJpdmluZyBmaXJzdDogKi8KKwl2aWFmYl93cml0ZV9yZWdfbWFzayhTUjFCLCBWSUFTUiwgMCwgQklUMSk7CisJdmlhZmJfd3JpdGVfcmVnX21hc2soU1IyQSwgVklBU1IsIDAsIEJJVDQpOworCisJc3dpdGNoICh2aWFwYXJpbmZvLT5jaGlwX2luZm8tPmdmeF9jaGlwX25hbWUpIHsKKwljYXNlIFVOSUNIUk9NRV9QNE04OTA6CisJCXsKKwkJCWlmICgodmlhcGFyaW5mby0+dG1kc19zZXR0aW5nX2luZm8tPmhfYWN0aXZlID09IDE2MDApICYmCisJCQkJKHZpYXBhcmluZm8tPnRtZHNfc2V0dGluZ19pbmZvLT52X2FjdGl2ZSA9PQorCQkJCTEyMDApKQorCQkJCXZpYWZiX3dyaXRlX3JlZ19tYXNrKENSOTYsIFZJQUNSLCAweDAzLAorCQkJCQkgICAgICAgQklUMCArIEJJVDEgKyBCSVQyKTsKKwkJCWVsc2UKKwkJCQl2aWFmYl93cml0ZV9yZWdfbWFzayhDUjk2LCBWSUFDUiwgMHgwNywKKwkJCQkJICAgICAgIEJJVDAgKyBCSVQxICsgQklUMik7CisJCQlicmVhazsKKwkJfQorCisJY2FzZSBVTklDSFJPTUVfUDRNOTAwOgorCQl7CisJCQl2aWFmYl93cml0ZV9yZWdfbWFzayhDUjk2LCBWSUFDUiwgMHgwNywKKwkJCQkgICAgICAgQklUMCArIEJJVDEgKyBCSVQyICsgQklUMyk7CisJCQl2aWFmYl93cml0ZV9yZWdfbWFzayhTUjFCLCBWSUFTUiwgMHgwMiwgQklUMSk7CisJCQl2aWFmYl93cml0ZV9yZWdfbWFzayhTUjJBLCBWSUFTUiwgMHgxMCwgQklUNCk7CisJCQlicmVhazsKKwkJfQorCisJZGVmYXVsdDoKKwkJeworCQkJYnJlYWs7CisJCX0KKwl9Cit9CisKK3N0YXRpYyB2b2lkIGR2aV9wYXRjaF9za2V3X2R2cDEodm9pZCkKK3sKKwlzd2l0Y2ggKHZpYXBhcmluZm8tPmNoaXBfaW5mby0+Z2Z4X2NoaXBfbmFtZSkgeworCWNhc2UgVU5JQ0hST01FX0NYNzAwOgorCQl7CisJCQlicmVhazsKKwkJfQorCisJZGVmYXVsdDoKKwkJeworCQkJYnJlYWs7CisJCX0KKwl9Cit9CisKK3N0YXRpYyB2b2lkIGR2aV9wYXRjaF9za2V3X2R2cF9sb3codm9pZCkKK3sKKwlzd2l0Y2ggKHZpYXBhcmluZm8tPmNoaXBfaW5mby0+Z2Z4X2NoaXBfbmFtZSkgeworCWNhc2UgVU5JQ0hST01FX0s4TTg5MDoKKwkJeworCQkJdmlhZmJfd3JpdGVfcmVnX21hc2soQ1I5OSwgVklBQ1IsIDB4MDMsIEJJVDAgKyBCSVQxKTsKKwkJCWJyZWFrOworCQl9CisKKwljYXNlIFVOSUNIUk9NRV9QNE05MDA6CisJCXsKKwkJCXZpYWZiX3dyaXRlX3JlZ19tYXNrKENSOTksIFZJQUNSLCAweDA4LAorCQkJCSAgICAgICBCSVQwICsgQklUMSArIEJJVDIgKyBCSVQzKTsKKwkJCWJyZWFrOworCQl9CisKKwljYXNlIFVOSUNIUk9NRV9QNE04OTA6CisJCXsKKwkJCXZpYWZiX3dyaXRlX3JlZ19tYXNrKENSOTksIFZJQUNSLCAweDBGLAorCQkJCSAgICAgICBCSVQwICsgQklUMSArIEJJVDIgKyBCSVQzKTsKKwkJCWJyZWFrOworCQl9CisKKwlkZWZhdWx0OgorCQl7CisJCQlicmVhazsKKwkJfQorCX0KK30KKworc3RhdGljIHZvaWQgc2V0X2R2aV9vdXRwdXRfcGF0aChpbnQgc2V0X2lnYSwgaW50IG91dHB1dF9pbnRlcmZhY2UpCit7CisJc3dpdGNoIChvdXRwdXRfaW50ZXJmYWNlKSB7CisJY2FzZSBJTlRFUkZBQ0VfRFZQMDoKKwkJdmlhZmJfd3JpdGVfcmVnX21hc2soQ1I2QiwgVklBQ1IsIDB4MDEsIEJJVDApOworCisJCWlmIChzZXRfaWdhID09IElHQTEpIHsKKwkJCXZpYWZiX3dyaXRlX3JlZ19tYXNrKENSOTYsIFZJQUNSLCAweDAwLCBCSVQ0KTsKKwkJCXZpYWZiX3dyaXRlX3JlZ19tYXNrKENSNkMsIFZJQUNSLCAweDIxLCBCSVQwICsKKwkJCQlCSVQ1ICsgQklUNyk7CisJCX0gZWxzZSB7CisJCQl2aWFmYl93cml0ZV9yZWdfbWFzayhDUjk2LCBWSUFDUiwgMHgxMCwgQklUNCk7CisJCQl2aWFmYl93cml0ZV9yZWdfbWFzayhDUjZDLCBWSUFDUiwgMHhBMSwgQklUMCArCisJCQkJQklUNSArIEJJVDcpOworCQl9CisKKwkJdmlhZmJfd3JpdGVfcmVnX21hc2soU1IxRSwgVklBU1IsIDB4QzAsIEJJVDcgKyBCSVQ2KTsKKworCQlkdmlfcGF0Y2hfc2tld19kdnAwKCk7CisJCWJyZWFrOworCisJY2FzZSBJTlRFUkZBQ0VfRFZQMToKKwkJaWYgKHZpYXBhcmluZm8tPmNoaXBfaW5mby0+Z2Z4X2NoaXBfbmFtZSA9PSBVTklDSFJPTUVfQ0xFMjY2KSB7CisJCQlpZiAoc2V0X2lnYSA9PSBJR0ExKQorCQkJCXZpYWZiX3dyaXRlX3JlZ19tYXNrKENSOTMsIFZJQUNSLCAweDIxLAorCQkJCQkgICAgICAgQklUMCArIEJJVDUgKyBCSVQ3KTsKKwkJCWVsc2UKKwkJCQl2aWFmYl93cml0ZV9yZWdfbWFzayhDUjkzLCBWSUFDUiwgMHhBMSwKKwkJCQkJICAgICAgIEJJVDAgKyBCSVQ1ICsgQklUNyk7CisJCX0gZWxzZSB7CisJCQlpZiAoc2V0X2lnYSA9PSBJR0ExKQorCQkJCXZpYWZiX3dyaXRlX3JlZ19tYXNrKENSOUIsIFZJQUNSLCAweDAwLCBCSVQ0KTsKKwkJCWVsc2UKKwkJCQl2aWFmYl93cml0ZV9yZWdfbWFzayhDUjlCLCBWSUFDUiwgMHgxMCwgQklUNCk7CisJCX0KKworCQl2aWFmYl93cml0ZV9yZWdfbWFzayhTUjFFLCBWSUFTUiwgMHgzMCwgQklUNCArIEJJVDUpOworCQlkdmlfcGF0Y2hfc2tld19kdnAxKCk7CisJCWJyZWFrOworCWNhc2UgSU5URVJGQUNFX0RGUF9ISUdIOgorCQlpZiAodmlhcGFyaW5mby0+Y2hpcF9pbmZvLT5nZnhfY2hpcF9uYW1lICE9IFVOSUNIUk9NRV9DTEUyNjYpIHsKKwkJCWlmIChzZXRfaWdhID09IElHQTEpIHsKKwkJCQl2aWFmYl93cml0ZV9yZWdfbWFzayhDUjk2LCBWSUFDUiwgMHgwMCwgQklUNCk7CisJCQkJdmlhZmJfd3JpdGVfcmVnX21hc2soQ1I5NywgVklBQ1IsIDB4MDMsCisJCQkJCSAgICAgICBCSVQwICsgQklUMSArIEJJVDQpOworCQkJfSBlbHNlIHsKKwkJCQl2aWFmYl93cml0ZV9yZWdfbWFzayhDUjk2LCBWSUFDUiwgMHgxMCwgQklUNCk7CisJCQkJdmlhZmJfd3JpdGVfcmVnX21hc2soQ1I5NywgVklBQ1IsIDB4MTMsCisJCQkJCSAgICAgICBCSVQwICsgQklUMSArIEJJVDQpOworCQkJfQorCQl9CisJCXZpYWZiX3dyaXRlX3JlZ19tYXNrKFNSMkEsIFZJQVNSLCAweDBDLCBCSVQyICsgQklUMyk7CisJCWJyZWFrOworCisJY2FzZSBJTlRFUkZBQ0VfREZQX0xPVzoKKwkJaWYgKHZpYXBhcmluZm8tPmNoaXBfaW5mby0+Z2Z4X2NoaXBfbmFtZSA9PSBVTklDSFJPTUVfQ0xFMjY2KQorCQkJYnJlYWs7CisKKwkJaWYgKHNldF9pZ2EgPT0gSUdBMSkgeworCQkJdmlhZmJfd3JpdGVfcmVnX21hc2soQ1I5OSwgVklBQ1IsIDB4MDAsIEJJVDQpOworCQkJdmlhZmJfd3JpdGVfcmVnX21hc2soQ1I5QiwgVklBQ1IsIDB4MDAsIEJJVDQpOworCQl9IGVsc2UgeworCQkJdmlhZmJfd3JpdGVfcmVnX21hc2soQ1I5OSwgVklBQ1IsIDB4MTAsIEJJVDQpOworCQkJdmlhZmJfd3JpdGVfcmVnX21hc2soQ1I5QiwgVklBQ1IsIDB4MTAsIEJJVDQpOworCQl9CisKKwkJdmlhZmJfd3JpdGVfcmVnX21hc2soU1IyQSwgVklBU1IsIDB4MDMsIEJJVDAgKyBCSVQxKTsKKwkJZHZpX3BhdGNoX3NrZXdfZHZwX2xvdygpOworCQlicmVhazsKKworCWNhc2UgSU5URVJGQUNFX1RNRFM6CisJCWlmIChzZXRfaWdhID09IElHQTEpCisJCQl2aWFmYl93cml0ZV9yZWdfbWFzayhDUjk5LCBWSUFDUiwgMHgwMCwgQklUNCk7CisJCWVsc2UKKwkJCXZpYWZiX3dyaXRlX3JlZ19tYXNrKENSOTksIFZJQUNSLCAweDEwLCBCSVQ0KTsKKwkJYnJlYWs7CisJfQorCisJaWYgKHNldF9pZ2EgPT0gSUdBMikgeworCQllbmFibGVfc2Vjb25kX2Rpc3BsYXlfY2hhbm5lbCgpOworCQkvKiBEaXNhYmxlIExDRCBTY2FsaW5nICovCisJCXZpYWZiX3dyaXRlX3JlZ19tYXNrKENSNzksIFZJQUNSLCAweDAwLCBCSVQwKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHNldF9sY2Rfb3V0cHV0X3BhdGgoaW50IHNldF9pZ2EsIGludCBvdXRwdXRfaW50ZXJmYWNlKQoreworCURFQlVHX01TRyhLRVJOX0lORk8KKwkJICAic2V0X2xjZF9vdXRwdXRfcGF0aCwgaWdhOiVkLG91dF9pbnRlcmZhY2U6JWRcbiIsCisJCSAgc2V0X2lnYSwgb3V0cHV0X2ludGVyZmFjZSk7CisJc3dpdGNoIChzZXRfaWdhKSB7CisJY2FzZSBJR0ExOgorCQl2aWFmYl93cml0ZV9yZWdfbWFzayhDUjZCLCBWSUFDUiwgMHgwMCwgQklUMyk7CisJCXZpYWZiX3dyaXRlX3JlZ19tYXNrKENSNkEsIFZJQUNSLCAweDA4LCBCSVQzKTsKKworCQlkaXNhYmxlX3NlY29uZF9kaXNwbGF5X2NoYW5uZWwoKTsKKwkJYnJlYWs7CisKKwljYXNlIElHQTI6CisJCXZpYWZiX3dyaXRlX3JlZ19tYXNrKENSNkIsIFZJQUNSLCAweDAwLCBCSVQzKTsKKwkJdmlhZmJfd3JpdGVfcmVnX21hc2soQ1I2QSwgVklBQ1IsIDB4MDgsIEJJVDMpOworCisJCWVuYWJsZV9zZWNvbmRfZGlzcGxheV9jaGFubmVsKCk7CisJCWJyZWFrOworCisJY2FzZSBJR0ExX0lHQTI6CisJCXZpYWZiX3dyaXRlX3JlZ19tYXNrKENSNkIsIFZJQUNSLCAweDA4LCBCSVQzKTsKKwkJdmlhZmJfd3JpdGVfcmVnX21hc2soQ1I2QSwgVklBQ1IsIDB4MDgsIEJJVDMpOworCisJCWRpc2FibGVfc2Vjb25kX2Rpc3BsYXlfY2hhbm5lbCgpOworCQlicmVhazsKKwl9CisKKwlzd2l0Y2ggKG91dHB1dF9pbnRlcmZhY2UpIHsKKwljYXNlIElOVEVSRkFDRV9EVlAwOgorCQlpZiAoc2V0X2lnYSA9PSBJR0ExKSB7CisJCQl2aWFmYl93cml0ZV9yZWdfbWFzayhDUjk2LCBWSUFDUiwgMHgwMCwgQklUNCk7CisJCX0gZWxzZSB7CisJCQl2aWFmYl93cml0ZV9yZWcoQ1I5MSwgVklBQ1IsIDB4MDApOworCQkJdmlhZmJfd3JpdGVfcmVnX21hc2soQ1I5NiwgVklBQ1IsIDB4MTAsIEJJVDQpOworCQl9CisJCWJyZWFrOworCisJY2FzZSBJTlRFUkZBQ0VfRFZQMToKKwkJaWYgKHNldF9pZ2EgPT0gSUdBMSkKKwkJCXZpYWZiX3dyaXRlX3JlZ19tYXNrKENSOUIsIFZJQUNSLCAweDAwLCBCSVQ0KTsKKwkJZWxzZSB7CisJCQl2aWFmYl93cml0ZV9yZWcoQ1I5MSwgVklBQ1IsIDB4MDApOworCQkJdmlhZmJfd3JpdGVfcmVnX21hc2soQ1I5QiwgVklBQ1IsIDB4MTAsIEJJVDQpOworCQl9CisJCWJyZWFrOworCisJY2FzZSBJTlRFUkZBQ0VfREZQX0hJR0g6CisJCWlmIChzZXRfaWdhID09IElHQTEpCisJCQl2aWFmYl93cml0ZV9yZWdfbWFzayhDUjk3LCBWSUFDUiwgMHgwMCwgQklUNCk7CisJCWVsc2UgeworCQkJdmlhZmJfd3JpdGVfcmVnKENSOTEsIFZJQUNSLCAweDAwKTsKKwkJCXZpYWZiX3dyaXRlX3JlZ19tYXNrKENSOTcsIFZJQUNSLCAweDEwLCBCSVQ0KTsKKwkJCXZpYWZiX3dyaXRlX3JlZ19tYXNrKENSOTYsIFZJQUNSLCAweDEwLCBCSVQ0KTsKKwkJfQorCQlicmVhazsKKworCWNhc2UgSU5URVJGQUNFX0RGUF9MT1c6CisJCWlmIChzZXRfaWdhID09IElHQTEpCisJCQl2aWFmYl93cml0ZV9yZWdfbWFzayhDUjk5LCBWSUFDUiwgMHgwMCwgQklUNCk7CisJCWVsc2UgeworCQkJdmlhZmJfd3JpdGVfcmVnKENSOTEsIFZJQUNSLCAweDAwKTsKKwkJCXZpYWZiX3dyaXRlX3JlZ19tYXNrKENSOTksIFZJQUNSLCAweDEwLCBCSVQ0KTsKKwkJCXZpYWZiX3dyaXRlX3JlZ19tYXNrKENSOUIsIFZJQUNSLCAweDEwLCBCSVQ0KTsKKwkJfQorCisJCWJyZWFrOworCisJY2FzZSBJTlRFUkZBQ0VfREZQOgorCQlpZiAoKFVOSUNIUk9NRV9LOE04OTAgPT0gdmlhcGFyaW5mby0+Y2hpcF9pbmZvLT5nZnhfY2hpcF9uYW1lKQorCQkgICAgfHwgKFVOSUNIUk9NRV9QNE04OTAgPT0KKwkJICAgIHZpYXBhcmluZm8tPmNoaXBfaW5mby0+Z2Z4X2NoaXBfbmFtZSkpCisJCQl2aWFmYl93cml0ZV9yZWdfbWFzayhDUjk3LCBWSUFDUiwgMHg4NCwKKwkJCQkgICAgICAgQklUNyArIEJJVDIgKyBCSVQxICsgQklUMCk7CisJCWlmIChzZXRfaWdhID09IElHQTEpIHsKKwkJCXZpYWZiX3dyaXRlX3JlZ19tYXNrKENSOTcsIFZJQUNSLCAweDAwLCBCSVQ0KTsKKwkJCXZpYWZiX3dyaXRlX3JlZ19tYXNrKENSOTksIFZJQUNSLCAweDAwLCBCSVQ0KTsKKwkJfSBlbHNlIHsKKwkJCXZpYWZiX3dyaXRlX3JlZyhDUjkxLCBWSUFDUiwgMHgwMCk7CisJCQl2aWFmYl93cml0ZV9yZWdfbWFzayhDUjk3LCBWSUFDUiwgMHgxMCwgQklUNCk7CisJCQl2aWFmYl93cml0ZV9yZWdfbWFzayhDUjk5LCBWSUFDUiwgMHgxMCwgQklUNCk7CisJCX0KKwkJYnJlYWs7CisKKwljYXNlIElOVEVSRkFDRV9MVkRTMDoKKwljYXNlIElOVEVSRkFDRV9MVkRTMExWRFMxOgorCQlpZiAoc2V0X2lnYSA9PSBJR0ExKQorCQkJdmlhZmJfd3JpdGVfcmVnX21hc2soQ1I5OSwgVklBQ1IsIDB4MDAsIEJJVDQpOworCQllbHNlCisJCQl2aWFmYl93cml0ZV9yZWdfbWFzayhDUjk5LCBWSUFDUiwgMHgxMCwgQklUNCk7CisKKwkJYnJlYWs7CisKKwljYXNlIElOVEVSRkFDRV9MVkRTMToKKwkJaWYgKHNldF9pZ2EgPT0gSUdBMSkKKwkJCXZpYWZiX3dyaXRlX3JlZ19tYXNrKENSOTcsIFZJQUNSLCAweDAwLCBCSVQ0KTsKKwkJZWxzZQorCQkJdmlhZmJfd3JpdGVfcmVnX21hc2soQ1I5NywgVklBQ1IsIDB4MTAsIEJJVDQpOworCQlicmVhazsKKwl9Cit9CisKKy8qIFNlYXJjaCBNb2RlIEluZGV4ICovCitzdGF0aWMgaW50IHNlYXJjaF9tb2RlX3NldHRpbmcoaW50IE1vZGVJbmZvSW5kZXgpCit7CisJaW50IGkgPSAwOworCisJd2hpbGUgKChpIDwgTlVNX1RPVEFMX01PREVUQUJMRSkgJiYKKwkJCShNb2RlSW5mb0luZGV4ICE9IENMRTI2Nk1vZGVzW2ldLk1vZGVJbmRleCkpCisJCWkrKzsKKwlpZiAoaSA+PSBOVU1fVE9UQUxfTU9ERVRBQkxFKQorCQlpID0gMDsKKwlyZXR1cm4gaTsKKworfQorCitzdHJ1Y3QgVmlkZW9Nb2RlVGFibGUgKnZpYWZiX2dldF9tb2RldGJsX3BvaW50ZXIoaW50IEluZGV4KQoreworCXN0cnVjdCBWaWRlb01vZGVUYWJsZSAqVG1wVGJsID0gTlVMTDsKKwlUbXBUYmwgPSAmQ0xFMjY2TW9kZXNbc2VhcmNoX21vZGVfc2V0dGluZyhJbmRleCldOworCXJldHVybiBUbXBUYmw7Cit9CisKK3N0cnVjdCBWaWRlb01vZGVUYWJsZSAqdmlhZmJfZ2V0X2NlYV9tb2RlX3RibF9wb2ludGVyKGludCBJbmRleCkKK3sKKwlzdHJ1Y3QgVmlkZW9Nb2RlVGFibGUgKlRtcFRibCA9IE5VTEw7CisJaW50IGkgPSAwOworCXdoaWxlICgoaSA8IE5VTV9UT1RBTF9DRUFfTU9ERVMpICYmCisJCQkoSW5kZXggIT0gQ0VBX0hETUlfTW9kZXNbaV0uTW9kZUluZGV4KSkKKwkJaSsrOworCWlmICgoaSA8IE5VTV9UT1RBTF9DRUFfTU9ERVMpKQorCQlUbXBUYmwgPSAmQ0VBX0hETUlfTW9kZXNbaV07CisJIGVsc2UgeworCQkvKlN0aWxsIHVzZSBnZW5lcmFsIHRpbWluZyBpZiBkb24ndCBmaW5kIENFQSB0aW1pbmcgKi8KKwkJaSA9IDA7CisJCXdoaWxlICgoaSA8IE5VTV9UT1RBTF9NT0RFVEFCTEUpICYmCisJCQkJKEluZGV4ICE9IENMRTI2Nk1vZGVzW2ldLk1vZGVJbmRleCkpCisJCSAgICAgICBpKys7CisJCWlmIChpID49IE5VTV9UT1RBTF9NT0RFVEFCTEUpCisJCQlpID0gMDsKKwkJVG1wVGJsID0gJkNMRTI2Nk1vZGVzW2ldOworCX0KKwlyZXR1cm4gVG1wVGJsOworfQorCitzdGF0aWMgdm9pZCBsb2FkX2ZpeF9iaXRfY3J0Y19yZWcodm9pZCkKK3sKKwkvKiBhbHdheXMgc2V0IHRvIDEgKi8KKwl2aWFmYl93cml0ZV9yZWdfbWFzayhDUjAzLCBWSUFDUiwgMHg4MCwgQklUNyk7CisJLyogbGluZSBjb21wYXJlIHNob3VsZCBzZXQgYWxsIGJpdHMgPSAxIChleHRlbmQgbW9kZXMpICovCisJdmlhZmJfd3JpdGVfcmVnKENSMTgsIFZJQUNSLCAweGZmKTsKKwkvKiBsaW5lIGNvbXBhcmUgc2hvdWxkIHNldCBhbGwgYml0cyA9IDEgKGV4dGVuZCBtb2RlcykgKi8KKwl2aWFmYl93cml0ZV9yZWdfbWFzayhDUjA3LCBWSUFDUiwgMHgxMCwgQklUNCk7CisJLyogbGluZSBjb21wYXJlIHNob3VsZCBzZXQgYWxsIGJpdHMgPSAxIChleHRlbmQgbW9kZXMpICovCisJdmlhZmJfd3JpdGVfcmVnX21hc2soQ1IwOSwgVklBQ1IsIDB4NDAsIEJJVDYpOworCS8qIGxpbmUgY29tcGFyZSBzaG91bGQgc2V0IGFsbCBiaXRzID0gMSAoZXh0ZW5kIG1vZGVzKSAqLworCXZpYWZiX3dyaXRlX3JlZ19tYXNrKENSMzUsIFZJQUNSLCAweDEwLCBCSVQ0KTsKKwkvKiBsaW5lIGNvbXBhcmUgc2hvdWxkIHNldCBhbGwgYml0cyA9IDEgKGV4dGVuZCBtb2RlcykgKi8KKwl2aWFmYl93cml0ZV9yZWdfbWFzayhDUjMzLCBWSUFDUiwgMHgwNiwgQklUMCArIEJJVDEgKyBCSVQyKTsKKwkvKnZpYWZiX3dyaXRlX3JlZ19tYXNrKENSMzIsIFZJQUNSLCAweDAxLCBCSVQwKTsgKi8KKwkvKiBleHRlbmQgbW9kZSBhbHdheXMgc2V0IHRvIGUzaCAqLworCXZpYWZiX3dyaXRlX3JlZyhDUjE3LCBWSUFDUiwgMHhlMyk7CisJLyogZXh0ZW5kIG1vZGUgYWx3YXlzIHNldCB0byAwaCAqLworCXZpYWZiX3dyaXRlX3JlZyhDUjA4LCBWSUFDUiwgMHgwMCk7CisJLyogZXh0ZW5kIG1vZGUgYWx3YXlzIHNldCB0byAwaCAqLworCXZpYWZiX3dyaXRlX3JlZyhDUjE0LCBWSUFDUiwgMHgwMCk7CisKKwkvKiBJZiBLOE04MDAsIGVuYWJsZSBQcmVmZXRjaCBNb2RlLiAqLworCWlmICgodmlhcGFyaW5mby0+Y2hpcF9pbmZvLT5nZnhfY2hpcF9uYW1lID09IFVOSUNIUk9NRV9LODAwKQorCQl8fCAodmlhcGFyaW5mby0+Y2hpcF9pbmZvLT5nZnhfY2hpcF9uYW1lID09IFVOSUNIUk9NRV9LOE04OTApKQorCQl2aWFmYl93cml0ZV9yZWdfbWFzayhDUjMzLCBWSUFDUiwgMHgwOCwgQklUMyk7CisJaWYgKCh2aWFwYXJpbmZvLT5jaGlwX2luZm8tPmdmeF9jaGlwX25hbWUgPT0gVU5JQ0hST01FX0NMRTI2NikKKwkgICAgJiYgKHZpYXBhcmluZm8tPmNoaXBfaW5mby0+Z2Z4X2NoaXBfcmV2aXNpb24gPT0gQ0xFMjY2X1JFVklTSU9OX0FYKSkKKwkJdmlhZmJfd3JpdGVfcmVnX21hc2soU1IxQSwgVklBU1IsIDB4MDIsIEJJVDEpOworCit9CisKK3ZvaWQgdmlhZmJfbG9hZF9yZWcoaW50IHRpbWluZ192YWx1ZSwgaW50IHZpYWZiX2xvYWRfcmVnX251bSwKKwlzdHJ1Y3QgaW9fcmVnaXN0ZXIgKnJlZywKKwkgICAgICBpbnQgaW9fdHlwZSkKK3sKKwlpbnQgcmVnX21hc2s7CisJaW50IGJpdF9udW0gPSAwOworCWludCBkYXRhOworCWludCBpLCBqOworCWludCBzaGlmdF9uZXh0X3JlZzsKKwlpbnQgc3RhcnRfaW5kZXgsIGVuZF9pbmRleCwgY3JfaW5kZXg7CisJdTE2IGdldF9iaXQ7CisKKwlmb3IgKGkgPSAwOyBpIDwgdmlhZmJfbG9hZF9yZWdfbnVtOyBpKyspIHsKKwkJcmVnX21hc2sgPSAwOworCQlkYXRhID0gMDsKKwkJc3RhcnRfaW5kZXggPSByZWdbaV0uc3RhcnRfYml0OworCQllbmRfaW5kZXggPSByZWdbaV0uZW5kX2JpdDsKKwkJY3JfaW5kZXggPSByZWdbaV0uaW9fYWRkcjsKKworCQlzaGlmdF9uZXh0X3JlZyA9IGJpdF9udW07CisJCWZvciAoaiA9IHN0YXJ0X2luZGV4OyBqIDw9IGVuZF9pbmRleDsgaisrKSB7CisJCQkvKmlmIChiaXRfbnVtPT04KSB0aW1pbmdfdmFsdWUgPSB0aW1pbmdfdmFsdWUgPj44OyAqLworCQkJcmVnX21hc2sgPSByZWdfbWFzayB8IChCSVQwIDw8IGopOworCQkJZ2V0X2JpdCA9ICh0aW1pbmdfdmFsdWUgJiAoQklUMCA8PCBiaXRfbnVtKSk7CisJCQlkYXRhID0KKwkJCSAgICBkYXRhIHwgKChnZXRfYml0ID4+IHNoaWZ0X25leHRfcmVnKSA8PCBzdGFydF9pbmRleCk7CisJCQliaXRfbnVtKys7CisJCX0KKwkJaWYgKGlvX3R5cGUgPT0gVklBQ1IpCisJCQl2aWFmYl93cml0ZV9yZWdfbWFzayhjcl9pbmRleCwgVklBQ1IsIGRhdGEsIHJlZ19tYXNrKTsKKwkJZWxzZQorCQkJdmlhZmJfd3JpdGVfcmVnX21hc2soY3JfaW5kZXgsIFZJQVNSLCBkYXRhLCByZWdfbWFzayk7CisJfQorCit9CisKKy8qIFdyaXRlIFJlZ2lzdGVycyAqLwordm9pZCB2aWFmYl93cml0ZV9yZWd4KHN0cnVjdCBpb19yZWcgUmVnVGFibGVbXSwgaW50IEl0ZW1OdW0pCit7CisJaW50IGk7CisJdW5zaWduZWQgY2hhciBSZWdUZW1wOworCisJLypERUJVR19NU0coS0VSTl9JTkZPICJUYWJsZSBTaXplIDogJXghIVxuIixJdGVtTnVtICk7ICovCisKKwlmb3IgKGkgPSAwOyBpIDwgSXRlbU51bTsgaSsrKSB7CisJCW91dGIoUmVnVGFibGVbaV0uaW5kZXgsIFJlZ1RhYmxlW2ldLnBvcnQpOworCQlSZWdUZW1wID0gaW5iKFJlZ1RhYmxlW2ldLnBvcnQgKyAxKTsKKwkJUmVnVGVtcCA9IChSZWdUZW1wICYgKH5SZWdUYWJsZVtpXS5tYXNrKSkgfCBSZWdUYWJsZVtpXS52YWx1ZTsKKwkJb3V0YihSZWdUZW1wLCBSZWdUYWJsZVtpXS5wb3J0ICsgMSk7CisJfQorfQorCit2b2lkIHZpYWZiX2xvYWRfb2Zmc2V0X3JlZyhpbnQgaF9hZGRyLCBpbnQgYnBwX2J5dGUsIGludCBzZXRfaWdhKQoreworCWludCByZWdfdmFsdWU7CisJaW50IHZpYWZiX2xvYWRfcmVnX251bTsKKwlzdHJ1Y3QgaW9fcmVnaXN0ZXIgKnJlZzsKKworCXN3aXRjaCAoc2V0X2lnYSkgeworCWNhc2UgSUdBMV9JR0EyOgorCWNhc2UgSUdBMToKKwkJcmVnX3ZhbHVlID0gSUdBMV9PRkZTRVRfRk9STVVMQShoX2FkZHIsIGJwcF9ieXRlKTsKKwkJdmlhZmJfbG9hZF9yZWdfbnVtID0gb2Zmc2V0X3JlZy5pZ2ExX29mZnNldF9yZWcucmVnX251bTsKKwkJcmVnID0gb2Zmc2V0X3JlZy5pZ2ExX29mZnNldF9yZWcucmVnOworCQl2aWFmYl9sb2FkX3JlZyhyZWdfdmFsdWUsIHZpYWZiX2xvYWRfcmVnX251bSwgcmVnLCBWSUFDUik7CisJCWlmIChzZXRfaWdhID09IElHQTEpCisJCQlicmVhazsKKwljYXNlIElHQTI6CisJCXJlZ192YWx1ZSA9IElHQTJfT0ZGU0VUX0ZPUk1VTEEoaF9hZGRyLCBicHBfYnl0ZSk7CisJCXZpYWZiX2xvYWRfcmVnX251bSA9IG9mZnNldF9yZWcuaWdhMl9vZmZzZXRfcmVnLnJlZ19udW07CisJCXJlZyA9IG9mZnNldF9yZWcuaWdhMl9vZmZzZXRfcmVnLnJlZzsKKwkJdmlhZmJfbG9hZF9yZWcocmVnX3ZhbHVlLCB2aWFmYl9sb2FkX3JlZ19udW0sIHJlZywgVklBQ1IpOworCQlicmVhazsKKwl9Cit9CisKK3ZvaWQgdmlhZmJfbG9hZF9mZXRjaF9jb3VudF9yZWcoaW50IGhfYWRkciwgaW50IGJwcF9ieXRlLCBpbnQgc2V0X2lnYSkKK3sKKwlpbnQgcmVnX3ZhbHVlOworCWludCB2aWFmYl9sb2FkX3JlZ19udW07CisJc3RydWN0IGlvX3JlZ2lzdGVyICpyZWcgPSBOVUxMOworCisJc3dpdGNoIChzZXRfaWdhKSB7CisJY2FzZSBJR0ExX0lHQTI6CisJY2FzZSBJR0ExOgorCQlyZWdfdmFsdWUgPSBJR0ExX0ZFVENIX0NPVU5UX0ZPUk1VTEEoaF9hZGRyLCBicHBfYnl0ZSk7CisJCXZpYWZiX2xvYWRfcmVnX251bSA9IGZldGNoX2NvdW50X3JlZy4KKwkJCWlnYTFfZmV0Y2hfY291bnRfcmVnLnJlZ19udW07CisJCXJlZyA9IGZldGNoX2NvdW50X3JlZy5pZ2ExX2ZldGNoX2NvdW50X3JlZy5yZWc7CisJCXZpYWZiX2xvYWRfcmVnKHJlZ192YWx1ZSwgdmlhZmJfbG9hZF9yZWdfbnVtLCByZWcsIFZJQVNSKTsKKwkJaWYgKHNldF9pZ2EgPT0gSUdBMSkKKwkJCWJyZWFrOworCWNhc2UgSUdBMjoKKwkJcmVnX3ZhbHVlID0gSUdBMl9GRVRDSF9DT1VOVF9GT1JNVUxBKGhfYWRkciwgYnBwX2J5dGUpOworCQl2aWFmYl9sb2FkX3JlZ19udW0gPSBmZXRjaF9jb3VudF9yZWcuCisJCQlpZ2EyX2ZldGNoX2NvdW50X3JlZy5yZWdfbnVtOworCQlyZWcgPSBmZXRjaF9jb3VudF9yZWcuaWdhMl9mZXRjaF9jb3VudF9yZWcucmVnOworCQl2aWFmYl9sb2FkX3JlZyhyZWdfdmFsdWUsIHZpYWZiX2xvYWRfcmVnX251bSwgcmVnLCBWSUFDUik7CisJCWJyZWFrOworCX0KKworfQorCit2b2lkIHZpYWZiX2xvYWRfRklGT19yZWcoaW50IHNldF9pZ2EsIGludCBob3JfYWN0aXZlLCBpbnQgdmVyX2FjdGl2ZSkKK3sKKwlpbnQgcmVnX3ZhbHVlOworCWludCB2aWFmYl9sb2FkX3JlZ19udW07CisJc3RydWN0IGlvX3JlZ2lzdGVyICpyZWcgPSBOVUxMOworCWludCBpZ2ExX2ZpZm9fbWF4X2RlcHRoID0gMCwgaWdhMV9maWZvX3RocmVzaG9sZCA9CisJICAgIDAsIGlnYTFfZmlmb19oaWdoX3RocmVzaG9sZCA9IDAsIGlnYTFfZGlzcGxheV9xdWV1ZV9leHBpcmVfbnVtID0gMDsKKwlpbnQgaWdhMl9maWZvX21heF9kZXB0aCA9IDAsIGlnYTJfZmlmb190aHJlc2hvbGQgPQorCSAgICAwLCBpZ2EyX2ZpZm9faGlnaF90aHJlc2hvbGQgPSAwLCBpZ2EyX2Rpc3BsYXlfcXVldWVfZXhwaXJlX251bSA9IDA7CisKKwlpZiAoc2V0X2lnYSA9PSBJR0ExKSB7CisJCWlmICh2aWFwYXJpbmZvLT5jaGlwX2luZm8tPmdmeF9jaGlwX25hbWUgPT0gVU5JQ0hST01FX0s4MDApIHsKKwkJCWlnYTFfZmlmb19tYXhfZGVwdGggPSBLODAwX0lHQTFfRklGT19NQVhfREVQVEg7CisJCQlpZ2ExX2ZpZm9fdGhyZXNob2xkID0gSzgwMF9JR0ExX0ZJRk9fVEhSRVNIT0xEOworCQkJaWdhMV9maWZvX2hpZ2hfdGhyZXNob2xkID0KKwkJCSAgICBLODAwX0lHQTFfRklGT19ISUdIX1RIUkVTSE9MRDsKKwkJCS8qIElmIHJlc29sdXRpb24gPiAxMjgweDEwMjQsIGV4cGlyZSBsZW5ndGggPSA2NCwgZWxzZQorCQkJICAgZXhwaXJlIGxlbmd0aCA9IDEyOCAqLworCQkJaWYgKChob3JfYWN0aXZlID4gMTI4MCkgJiYgKHZlcl9hY3RpdmUgPiAxMDI0KSkKKwkJCQlpZ2ExX2Rpc3BsYXlfcXVldWVfZXhwaXJlX251bSA9IDE2OworCQkJZWxzZQorCQkJCWlnYTFfZGlzcGxheV9xdWV1ZV9leHBpcmVfbnVtID0KKwkJCQkgICAgSzgwMF9JR0ExX0RJU1BMQVlfUVVFVUVfRVhQSVJFX05VTTsKKworCQl9CisKKwkJaWYgKHZpYXBhcmluZm8tPmNoaXBfaW5mby0+Z2Z4X2NoaXBfbmFtZSA9PSBVTklDSFJPTUVfUE04MDApIHsKKwkJCWlnYTFfZmlmb19tYXhfZGVwdGggPSBQODgwX0lHQTFfRklGT19NQVhfREVQVEg7CisJCQlpZ2ExX2ZpZm9fdGhyZXNob2xkID0gUDg4MF9JR0ExX0ZJRk9fVEhSRVNIT0xEOworCQkJaWdhMV9maWZvX2hpZ2hfdGhyZXNob2xkID0KKwkJCSAgICBQODgwX0lHQTFfRklGT19ISUdIX1RIUkVTSE9MRDsKKwkJCWlnYTFfZGlzcGxheV9xdWV1ZV9leHBpcmVfbnVtID0KKwkJCSAgICBQODgwX0lHQTFfRElTUExBWV9RVUVVRV9FWFBJUkVfTlVNOworCisJCQkvKiBJZiByZXNvbHV0aW9uID4gMTI4MHgxMDI0LCBleHBpcmUgbGVuZ3RoID0gNjQsIGVsc2UKKwkJCSAgIGV4cGlyZSBsZW5ndGggPSAxMjggKi8KKwkJCWlmICgoaG9yX2FjdGl2ZSA+IDEyODApICYmICh2ZXJfYWN0aXZlID4gMTAyNCkpCisJCQkJaWdhMV9kaXNwbGF5X3F1ZXVlX2V4cGlyZV9udW0gPSAxNjsKKwkJCWVsc2UKKwkJCQlpZ2ExX2Rpc3BsYXlfcXVldWVfZXhwaXJlX251bSA9CisJCQkJICAgIFA4ODBfSUdBMV9ESVNQTEFZX1FVRVVFX0VYUElSRV9OVU07CisJCX0KKworCQlpZiAodmlhcGFyaW5mby0+Y2hpcF9pbmZvLT5nZnhfY2hpcF9uYW1lID09IFVOSUNIUk9NRV9DTjcwMCkgeworCQkJaWdhMV9maWZvX21heF9kZXB0aCA9IENONzAwX0lHQTFfRklGT19NQVhfREVQVEg7CisJCQlpZ2ExX2ZpZm9fdGhyZXNob2xkID0gQ043MDBfSUdBMV9GSUZPX1RIUkVTSE9MRDsKKwkJCWlnYTFfZmlmb19oaWdoX3RocmVzaG9sZCA9CisJCQkgICAgQ043MDBfSUdBMV9GSUZPX0hJR0hfVEhSRVNIT0xEOworCisJCQkvKiBJZiByZXNvbHV0aW9uID4gMTI4MHgxMDI0LCBleHBpcmUgbGVuZ3RoID0gNjQsCisJCQkgICBlbHNlIGV4cGlyZSBsZW5ndGggPSAxMjggKi8KKwkJCWlmICgoaG9yX2FjdGl2ZSA+IDEyODApICYmICh2ZXJfYWN0aXZlID4gMTAyNCkpCisJCQkJaWdhMV9kaXNwbGF5X3F1ZXVlX2V4cGlyZV9udW0gPSAxNjsKKwkJCWVsc2UKKwkJCQlpZ2ExX2Rpc3BsYXlfcXVldWVfZXhwaXJlX251bSA9CisJCQkJICAgIENONzAwX0lHQTFfRElTUExBWV9RVUVVRV9FWFBJUkVfTlVNOworCQl9CisKKwkJaWYgKHZpYXBhcmluZm8tPmNoaXBfaW5mby0+Z2Z4X2NoaXBfbmFtZSA9PSBVTklDSFJPTUVfQ1g3MDApIHsKKwkJCWlnYTFfZmlmb19tYXhfZGVwdGggPSBDWDcwMF9JR0ExX0ZJRk9fTUFYX0RFUFRIOworCQkJaWdhMV9maWZvX3RocmVzaG9sZCA9IENYNzAwX0lHQTFfRklGT19USFJFU0hPTEQ7CisJCQlpZ2ExX2ZpZm9faGlnaF90aHJlc2hvbGQgPQorCQkJICAgIENYNzAwX0lHQTFfRklGT19ISUdIX1RIUkVTSE9MRDsKKwkJCWlnYTFfZGlzcGxheV9xdWV1ZV9leHBpcmVfbnVtID0KKwkJCSAgICBDWDcwMF9JR0ExX0RJU1BMQVlfUVVFVUVfRVhQSVJFX05VTTsKKwkJfQorCisJCWlmICh2aWFwYXJpbmZvLT5jaGlwX2luZm8tPmdmeF9jaGlwX25hbWUgPT0gVU5JQ0hST01FX0s4TTg5MCkgeworCQkJaWdhMV9maWZvX21heF9kZXB0aCA9IEs4TTg5MF9JR0ExX0ZJRk9fTUFYX0RFUFRIOworCQkJaWdhMV9maWZvX3RocmVzaG9sZCA9IEs4TTg5MF9JR0ExX0ZJRk9fVEhSRVNIT0xEOworCQkJaWdhMV9maWZvX2hpZ2hfdGhyZXNob2xkID0KKwkJCSAgICBLOE04OTBfSUdBMV9GSUZPX0hJR0hfVEhSRVNIT0xEOworCQkJaWdhMV9kaXNwbGF5X3F1ZXVlX2V4cGlyZV9udW0gPQorCQkJICAgIEs4TTg5MF9JR0ExX0RJU1BMQVlfUVVFVUVfRVhQSVJFX05VTTsKKwkJfQorCisJCWlmICh2aWFwYXJpbmZvLT5jaGlwX2luZm8tPmdmeF9jaGlwX25hbWUgPT0gVU5JQ0hST01FX1A0TTg5MCkgeworCQkJaWdhMV9maWZvX21heF9kZXB0aCA9IFA0TTg5MF9JR0ExX0ZJRk9fTUFYX0RFUFRIOworCQkJaWdhMV9maWZvX3RocmVzaG9sZCA9IFA0TTg5MF9JR0ExX0ZJRk9fVEhSRVNIT0xEOworCQkJaWdhMV9maWZvX2hpZ2hfdGhyZXNob2xkID0KKwkJCSAgICBQNE04OTBfSUdBMV9GSUZPX0hJR0hfVEhSRVNIT0xEOworCQkJaWdhMV9kaXNwbGF5X3F1ZXVlX2V4cGlyZV9udW0gPQorCQkJICAgIFA0TTg5MF9JR0ExX0RJU1BMQVlfUVVFVUVfRVhQSVJFX05VTTsKKwkJfQorCisJCWlmICh2aWFwYXJpbmZvLT5jaGlwX2luZm8tPmdmeF9jaGlwX25hbWUgPT0gVU5JQ0hST01FX1A0TTkwMCkgeworCQkJaWdhMV9maWZvX21heF9kZXB0aCA9IFA0TTkwMF9JR0ExX0ZJRk9fTUFYX0RFUFRIOworCQkJaWdhMV9maWZvX3RocmVzaG9sZCA9IFA0TTkwMF9JR0ExX0ZJRk9fVEhSRVNIT0xEOworCQkJaWdhMV9maWZvX2hpZ2hfdGhyZXNob2xkID0KKwkJCSAgICBQNE05MDBfSUdBMV9GSUZPX0hJR0hfVEhSRVNIT0xEOworCQkJaWdhMV9kaXNwbGF5X3F1ZXVlX2V4cGlyZV9udW0gPQorCQkJICAgIFA0TTkwMF9JR0ExX0RJU1BMQVlfUVVFVUVfRVhQSVJFX05VTTsKKwkJfQorCisJCWlmICh2aWFwYXJpbmZvLT5jaGlwX2luZm8tPmdmeF9jaGlwX25hbWUgPT0gVU5JQ0hST01FX1ZYODAwKSB7CisJCQlpZ2ExX2ZpZm9fbWF4X2RlcHRoID0gVlg4MDBfSUdBMV9GSUZPX01BWF9ERVBUSDsKKwkJCWlnYTFfZmlmb190aHJlc2hvbGQgPSBWWDgwMF9JR0ExX0ZJRk9fVEhSRVNIT0xEOworCQkJaWdhMV9maWZvX2hpZ2hfdGhyZXNob2xkID0KKwkJCSAgICBWWDgwMF9JR0ExX0ZJRk9fSElHSF9USFJFU0hPTEQ7CisJCQlpZ2ExX2Rpc3BsYXlfcXVldWVfZXhwaXJlX251bSA9CisJCQkgICAgVlg4MDBfSUdBMV9ESVNQTEFZX1FVRVVFX0VYUElSRV9OVU07CisJCX0KKworCQkvKiBTZXQgRGlzcGxheSBGSUZPIERlcGF0aCBTZWxlY3QgKi8KKwkJcmVnX3ZhbHVlID0gSUdBMV9GSUZPX0RFUFRIX1NFTEVDVF9GT1JNVUxBKGlnYTFfZmlmb19tYXhfZGVwdGgpOworCQl2aWFmYl9sb2FkX3JlZ19udW0gPQorCQkgICAgZGlzcGxheV9maWZvX2RlcHRoX3JlZy5pZ2ExX2ZpZm9fZGVwdGhfc2VsZWN0X3JlZy5yZWdfbnVtOworCQlyZWcgPSBkaXNwbGF5X2ZpZm9fZGVwdGhfcmVnLmlnYTFfZmlmb19kZXB0aF9zZWxlY3RfcmVnLnJlZzsKKwkJdmlhZmJfbG9hZF9yZWcocmVnX3ZhbHVlLCB2aWFmYl9sb2FkX3JlZ19udW0sIHJlZywgVklBU1IpOworCisJCS8qIFNldCBEaXNwbGF5IEZJRk8gVGhyZXNob2xkIFNlbGVjdCAqLworCQlyZWdfdmFsdWUgPSBJR0ExX0ZJRk9fVEhSRVNIT0xEX0ZPUk1VTEEoaWdhMV9maWZvX3RocmVzaG9sZCk7CisJCXZpYWZiX2xvYWRfcmVnX251bSA9CisJCSAgICBmaWZvX3RocmVzaG9sZF9zZWxlY3RfcmVnLgorCQkgICAgaWdhMV9maWZvX3RocmVzaG9sZF9zZWxlY3RfcmVnLnJlZ19udW07CisJCXJlZyA9CisJCSAgICBmaWZvX3RocmVzaG9sZF9zZWxlY3RfcmVnLgorCQkgICAgaWdhMV9maWZvX3RocmVzaG9sZF9zZWxlY3RfcmVnLnJlZzsKKwkJdmlhZmJfbG9hZF9yZWcocmVnX3ZhbHVlLCB2aWFmYl9sb2FkX3JlZ19udW0sIHJlZywgVklBU1IpOworCisJCS8qIFNldCBGSUZPIEhpZ2ggVGhyZXNob2xkIFNlbGVjdCAqLworCQlyZWdfdmFsdWUgPQorCQkgICAgSUdBMV9GSUZPX0hJR0hfVEhSRVNIT0xEX0ZPUk1VTEEoaWdhMV9maWZvX2hpZ2hfdGhyZXNob2xkKTsKKwkJdmlhZmJfbG9hZF9yZWdfbnVtID0KKwkJICAgIGZpZm9faGlnaF90aHJlc2hvbGRfc2VsZWN0X3JlZy4KKwkJICAgIGlnYTFfZmlmb19oaWdoX3RocmVzaG9sZF9zZWxlY3RfcmVnLnJlZ19udW07CisJCXJlZyA9CisJCSAgICBmaWZvX2hpZ2hfdGhyZXNob2xkX3NlbGVjdF9yZWcuCisJCSAgICBpZ2ExX2ZpZm9faGlnaF90aHJlc2hvbGRfc2VsZWN0X3JlZy5yZWc7CisJCXZpYWZiX2xvYWRfcmVnKHJlZ192YWx1ZSwgdmlhZmJfbG9hZF9yZWdfbnVtLCByZWcsIFZJQVNSKTsKKworCQkvKiBTZXQgRGlzcGxheSBRdWV1ZSBFeHBpcmUgTnVtICovCisJCXJlZ192YWx1ZSA9CisJCSAgICBJR0ExX0RJU1BMQVlfUVVFVUVfRVhQSVJFX05VTV9GT1JNVUxBCisJCSAgICAoaWdhMV9kaXNwbGF5X3F1ZXVlX2V4cGlyZV9udW0pOworCQl2aWFmYl9sb2FkX3JlZ19udW0gPQorCQkgICAgZGlzcGxheV9xdWV1ZV9leHBpcmVfbnVtX3JlZy4KKwkJICAgIGlnYTFfZGlzcGxheV9xdWV1ZV9leHBpcmVfbnVtX3JlZy5yZWdfbnVtOworCQlyZWcgPQorCQkgICAgZGlzcGxheV9xdWV1ZV9leHBpcmVfbnVtX3JlZy4KKwkJICAgIGlnYTFfZGlzcGxheV9xdWV1ZV9leHBpcmVfbnVtX3JlZy5yZWc7CisJCXZpYWZiX2xvYWRfcmVnKHJlZ192YWx1ZSwgdmlhZmJfbG9hZF9yZWdfbnVtLCByZWcsIFZJQVNSKTsKKworCX0gZWxzZSB7CisJCWlmICh2aWFwYXJpbmZvLT5jaGlwX2luZm8tPmdmeF9jaGlwX25hbWUgPT0gVU5JQ0hST01FX0s4MDApIHsKKwkJCWlnYTJfZmlmb19tYXhfZGVwdGggPSBLODAwX0lHQTJfRklGT19NQVhfREVQVEg7CisJCQlpZ2EyX2ZpZm9fdGhyZXNob2xkID0gSzgwMF9JR0EyX0ZJRk9fVEhSRVNIT0xEOworCQkJaWdhMl9maWZvX2hpZ2hfdGhyZXNob2xkID0KKwkJCSAgICBLODAwX0lHQTJfRklGT19ISUdIX1RIUkVTSE9MRDsKKworCQkJLyogSWYgcmVzb2x1dGlvbiA+IDEyODB4MTAyNCwgZXhwaXJlIGxlbmd0aCA9IDY0LAorCQkJICAgZWxzZSAgZXhwaXJlIGxlbmd0aCA9IDEyOCAqLworCQkJaWYgKChob3JfYWN0aXZlID4gMTI4MCkgJiYgKHZlcl9hY3RpdmUgPiAxMDI0KSkKKwkJCQlpZ2EyX2Rpc3BsYXlfcXVldWVfZXhwaXJlX251bSA9IDE2OworCQkJZWxzZQorCQkJCWlnYTJfZGlzcGxheV9xdWV1ZV9leHBpcmVfbnVtID0KKwkJCQkgICAgSzgwMF9JR0EyX0RJU1BMQVlfUVVFVUVfRVhQSVJFX05VTTsKKwkJfQorCisJCWlmICh2aWFwYXJpbmZvLT5jaGlwX2luZm8tPmdmeF9jaGlwX25hbWUgPT0gVU5JQ0hST01FX1BNODAwKSB7CisJCQlpZ2EyX2ZpZm9fbWF4X2RlcHRoID0gUDg4MF9JR0EyX0ZJRk9fTUFYX0RFUFRIOworCQkJaWdhMl9maWZvX3RocmVzaG9sZCA9IFA4ODBfSUdBMl9GSUZPX1RIUkVTSE9MRDsKKwkJCWlnYTJfZmlmb19oaWdoX3RocmVzaG9sZCA9CisJCQkgICAgUDg4MF9JR0EyX0ZJRk9fSElHSF9USFJFU0hPTEQ7CisKKwkJCS8qIElmIHJlc29sdXRpb24gPiAxMjgweDEwMjQsIGV4cGlyZSBsZW5ndGggPSA2NCwKKwkJCSAgIGVsc2UgIGV4cGlyZSBsZW5ndGggPSAxMjggKi8KKwkJCWlmICgoaG9yX2FjdGl2ZSA+IDEyODApICYmICh2ZXJfYWN0aXZlID4gMTAyNCkpCisJCQkJaWdhMl9kaXNwbGF5X3F1ZXVlX2V4cGlyZV9udW0gPSAxNjsKKwkJCWVsc2UKKwkJCQlpZ2EyX2Rpc3BsYXlfcXVldWVfZXhwaXJlX251bSA9CisJCQkJICAgIFA4ODBfSUdBMl9ESVNQTEFZX1FVRVVFX0VYUElSRV9OVU07CisJCX0KKworCQlpZiAodmlhcGFyaW5mby0+Y2hpcF9pbmZvLT5nZnhfY2hpcF9uYW1lID09IFVOSUNIUk9NRV9DTjcwMCkgeworCQkJaWdhMl9maWZvX21heF9kZXB0aCA9IENONzAwX0lHQTJfRklGT19NQVhfREVQVEg7CisJCQlpZ2EyX2ZpZm9fdGhyZXNob2xkID0gQ043MDBfSUdBMl9GSUZPX1RIUkVTSE9MRDsKKwkJCWlnYTJfZmlmb19oaWdoX3RocmVzaG9sZCA9CisJCQkgICAgQ043MDBfSUdBMl9GSUZPX0hJR0hfVEhSRVNIT0xEOworCisJCQkvKiBJZiByZXNvbHV0aW9uID4gMTI4MHgxMDI0LCBleHBpcmUgbGVuZ3RoID0gNjQsCisJCQkgICBlbHNlIGV4cGlyZSBsZW5ndGggPSAxMjggKi8KKwkJCWlmICgoaG9yX2FjdGl2ZSA+IDEyODApICYmICh2ZXJfYWN0aXZlID4gMTAyNCkpCisJCQkJaWdhMl9kaXNwbGF5X3F1ZXVlX2V4cGlyZV9udW0gPSAxNjsKKwkJCWVsc2UKKwkJCQlpZ2EyX2Rpc3BsYXlfcXVldWVfZXhwaXJlX251bSA9CisJCQkJICAgIENONzAwX0lHQTJfRElTUExBWV9RVUVVRV9FWFBJUkVfTlVNOworCQl9CisKKwkJaWYgKHZpYXBhcmluZm8tPmNoaXBfaW5mby0+Z2Z4X2NoaXBfbmFtZSA9PSBVTklDSFJPTUVfQ1g3MDApIHsKKwkJCWlnYTJfZmlmb19tYXhfZGVwdGggPSBDWDcwMF9JR0EyX0ZJRk9fTUFYX0RFUFRIOworCQkJaWdhMl9maWZvX3RocmVzaG9sZCA9IENYNzAwX0lHQTJfRklGT19USFJFU0hPTEQ7CisJCQlpZ2EyX2ZpZm9faGlnaF90aHJlc2hvbGQgPQorCQkJICAgIENYNzAwX0lHQTJfRklGT19ISUdIX1RIUkVTSE9MRDsKKwkJCWlnYTJfZGlzcGxheV9xdWV1ZV9leHBpcmVfbnVtID0KKwkJCSAgICBDWDcwMF9JR0EyX0RJU1BMQVlfUVVFVUVfRVhQSVJFX05VTTsKKwkJfQorCisJCWlmICh2aWFwYXJpbmZvLT5jaGlwX2luZm8tPmdmeF9jaGlwX25hbWUgPT0gVU5JQ0hST01FX0s4TTg5MCkgeworCQkJaWdhMl9maWZvX21heF9kZXB0aCA9IEs4TTg5MF9JR0EyX0ZJRk9fTUFYX0RFUFRIOworCQkJaWdhMl9maWZvX3RocmVzaG9sZCA9IEs4TTg5MF9JR0EyX0ZJRk9fVEhSRVNIT0xEOworCQkJaWdhMl9maWZvX2hpZ2hfdGhyZXNob2xkID0KKwkJCSAgICBLOE04OTBfSUdBMl9GSUZPX0hJR0hfVEhSRVNIT0xEOworCQkJaWdhMl9kaXNwbGF5X3F1ZXVlX2V4cGlyZV9udW0gPQorCQkJICAgIEs4TTg5MF9JR0EyX0RJU1BMQVlfUVVFVUVfRVhQSVJFX05VTTsKKwkJfQorCisJCWlmICh2aWFwYXJpbmZvLT5jaGlwX2luZm8tPmdmeF9jaGlwX25hbWUgPT0gVU5JQ0hST01FX1A0TTg5MCkgeworCQkJaWdhMl9maWZvX21heF9kZXB0aCA9IFA0TTg5MF9JR0EyX0ZJRk9fTUFYX0RFUFRIOworCQkJaWdhMl9maWZvX3RocmVzaG9sZCA9IFA0TTg5MF9JR0EyX0ZJRk9fVEhSRVNIT0xEOworCQkJaWdhMl9maWZvX2hpZ2hfdGhyZXNob2xkID0KKwkJCSAgICBQNE04OTBfSUdBMl9GSUZPX0hJR0hfVEhSRVNIT0xEOworCQkJaWdhMl9kaXNwbGF5X3F1ZXVlX2V4cGlyZV9udW0gPQorCQkJICAgIFA0TTg5MF9JR0EyX0RJU1BMQVlfUVVFVUVfRVhQSVJFX05VTTsKKwkJfQorCisJCWlmICh2aWFwYXJpbmZvLT5jaGlwX2luZm8tPmdmeF9jaGlwX25hbWUgPT0gVU5JQ0hST01FX1A0TTkwMCkgeworCQkJaWdhMl9maWZvX21heF9kZXB0aCA9IFA0TTkwMF9JR0EyX0ZJRk9fTUFYX0RFUFRIOworCQkJaWdhMl9maWZvX3RocmVzaG9sZCA9IFA0TTkwMF9JR0EyX0ZJRk9fVEhSRVNIT0xEOworCQkJaWdhMl9maWZvX2hpZ2hfdGhyZXNob2xkID0KKwkJCSAgICBQNE05MDBfSUdBMl9GSUZPX0hJR0hfVEhSRVNIT0xEOworCQkJaWdhMl9kaXNwbGF5X3F1ZXVlX2V4cGlyZV9udW0gPQorCQkJICAgIFA0TTkwMF9JR0EyX0RJU1BMQVlfUVVFVUVfRVhQSVJFX05VTTsKKwkJfQorCisJCWlmICh2aWFwYXJpbmZvLT5jaGlwX2luZm8tPmdmeF9jaGlwX25hbWUgPT0gVU5JQ0hST01FX1ZYODAwKSB7CisJCQlpZ2EyX2ZpZm9fbWF4X2RlcHRoID0gVlg4MDBfSUdBMl9GSUZPX01BWF9ERVBUSDsKKwkJCWlnYTJfZmlmb190aHJlc2hvbGQgPSBWWDgwMF9JR0EyX0ZJRk9fVEhSRVNIT0xEOworCQkJaWdhMl9maWZvX2hpZ2hfdGhyZXNob2xkID0KKwkJCSAgICBWWDgwMF9JR0EyX0ZJRk9fSElHSF9USFJFU0hPTEQ7CisJCQlpZ2EyX2Rpc3BsYXlfcXVldWVfZXhwaXJlX251bSA9CisJCQkgICAgVlg4MDBfSUdBMl9ESVNQTEFZX1FVRVVFX0VYUElSRV9OVU07CisJCX0KKworCQlpZiAodmlhcGFyaW5mby0+Y2hpcF9pbmZvLT5nZnhfY2hpcF9uYW1lID09IFVOSUNIUk9NRV9LODAwKSB7CisJCQkvKiBTZXQgRGlzcGxheSBGSUZPIERlcGF0aCBTZWxlY3QgKi8KKwkJCXJlZ192YWx1ZSA9CisJCQkgICAgSUdBMl9GSUZPX0RFUFRIX1NFTEVDVF9GT1JNVUxBKGlnYTJfZmlmb19tYXhfZGVwdGgpCisJCQkgICAgLSAxOworCQkJLyogUGF0Y2ggTENEIGluIElHQTIgY2FzZSAqLworCQkJdmlhZmJfbG9hZF9yZWdfbnVtID0KKwkJCSAgICBkaXNwbGF5X2ZpZm9fZGVwdGhfcmVnLgorCQkJICAgIGlnYTJfZmlmb19kZXB0aF9zZWxlY3RfcmVnLnJlZ19udW07CisJCQlyZWcgPQorCQkJICAgIGRpc3BsYXlfZmlmb19kZXB0aF9yZWcuCisJCQkgICAgaWdhMl9maWZvX2RlcHRoX3NlbGVjdF9yZWcucmVnOworCQkJdmlhZmJfbG9hZF9yZWcocmVnX3ZhbHVlLAorCQkJCXZpYWZiX2xvYWRfcmVnX251bSwgcmVnLCBWSUFDUik7CisJCX0gZWxzZSB7CisKKwkJCS8qIFNldCBEaXNwbGF5IEZJRk8gRGVwYXRoIFNlbGVjdCAqLworCQkJcmVnX3ZhbHVlID0KKwkJCSAgICBJR0EyX0ZJRk9fREVQVEhfU0VMRUNUX0ZPUk1VTEEoaWdhMl9maWZvX21heF9kZXB0aCk7CisJCQl2aWFmYl9sb2FkX3JlZ19udW0gPQorCQkJICAgIGRpc3BsYXlfZmlmb19kZXB0aF9yZWcuCisJCQkgICAgaWdhMl9maWZvX2RlcHRoX3NlbGVjdF9yZWcucmVnX251bTsKKwkJCXJlZyA9CisJCQkgICAgZGlzcGxheV9maWZvX2RlcHRoX3JlZy4KKwkJCSAgICBpZ2EyX2ZpZm9fZGVwdGhfc2VsZWN0X3JlZy5yZWc7CisJCQl2aWFmYl9sb2FkX3JlZyhyZWdfdmFsdWUsCisJCQkJdmlhZmJfbG9hZF9yZWdfbnVtLCByZWcsIFZJQUNSKTsKKwkJfQorCisJCS8qIFNldCBEaXNwbGF5IEZJRk8gVGhyZXNob2xkIFNlbGVjdCAqLworCQlyZWdfdmFsdWUgPSBJR0EyX0ZJRk9fVEhSRVNIT0xEX0ZPUk1VTEEoaWdhMl9maWZvX3RocmVzaG9sZCk7CisJCXZpYWZiX2xvYWRfcmVnX251bSA9CisJCSAgICBmaWZvX3RocmVzaG9sZF9zZWxlY3RfcmVnLgorCQkgICAgaWdhMl9maWZvX3RocmVzaG9sZF9zZWxlY3RfcmVnLnJlZ19udW07CisJCXJlZyA9CisJCSAgICBmaWZvX3RocmVzaG9sZF9zZWxlY3RfcmVnLgorCQkgICAgaWdhMl9maWZvX3RocmVzaG9sZF9zZWxlY3RfcmVnLnJlZzsKKwkJdmlhZmJfbG9hZF9yZWcocmVnX3ZhbHVlLCB2aWFmYl9sb2FkX3JlZ19udW0sIHJlZywgVklBQ1IpOworCisJCS8qIFNldCBGSUZPIEhpZ2ggVGhyZXNob2xkIFNlbGVjdCAqLworCQlyZWdfdmFsdWUgPQorCQkgICAgSUdBMl9GSUZPX0hJR0hfVEhSRVNIT0xEX0ZPUk1VTEEoaWdhMl9maWZvX2hpZ2hfdGhyZXNob2xkKTsKKwkJdmlhZmJfbG9hZF9yZWdfbnVtID0KKwkJICAgIGZpZm9faGlnaF90aHJlc2hvbGRfc2VsZWN0X3JlZy4KKwkJICAgIGlnYTJfZmlmb19oaWdoX3RocmVzaG9sZF9zZWxlY3RfcmVnLnJlZ19udW07CisJCXJlZyA9CisJCSAgICBmaWZvX2hpZ2hfdGhyZXNob2xkX3NlbGVjdF9yZWcuCisJCSAgICBpZ2EyX2ZpZm9faGlnaF90aHJlc2hvbGRfc2VsZWN0X3JlZy5yZWc7CisJCXZpYWZiX2xvYWRfcmVnKHJlZ192YWx1ZSwgdmlhZmJfbG9hZF9yZWdfbnVtLCByZWcsIFZJQUNSKTsKKworCQkvKiBTZXQgRGlzcGxheSBRdWV1ZSBFeHBpcmUgTnVtICovCisJCXJlZ192YWx1ZSA9CisJCSAgICBJR0EyX0RJU1BMQVlfUVVFVUVfRVhQSVJFX05VTV9GT1JNVUxBCisJCSAgICAoaWdhMl9kaXNwbGF5X3F1ZXVlX2V4cGlyZV9udW0pOworCQl2aWFmYl9sb2FkX3JlZ19udW0gPQorCQkgICAgZGlzcGxheV9xdWV1ZV9leHBpcmVfbnVtX3JlZy4KKwkJICAgIGlnYTJfZGlzcGxheV9xdWV1ZV9leHBpcmVfbnVtX3JlZy5yZWdfbnVtOworCQlyZWcgPQorCQkgICAgZGlzcGxheV9xdWV1ZV9leHBpcmVfbnVtX3JlZy4KKwkJICAgIGlnYTJfZGlzcGxheV9xdWV1ZV9leHBpcmVfbnVtX3JlZy5yZWc7CisJCXZpYWZiX2xvYWRfcmVnKHJlZ192YWx1ZSwgdmlhZmJfbG9hZF9yZWdfbnVtLCByZWcsIFZJQUNSKTsKKworCX0KKworfQorCit1MzIgdmlhZmJfZ2V0X2Nsa192YWx1ZShpbnQgY2xrKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IE5VTV9UT1RBTF9QTExfVEFCTEU7IGkrKykgeworCQlpZiAoY2xrID09IHBsbF92YWx1ZVtpXS5jbGspIHsKKwkJCXN3aXRjaCAodmlhcGFyaW5mby0+Y2hpcF9pbmZvLT5nZnhfY2hpcF9uYW1lKSB7CisJCQljYXNlIFVOSUNIUk9NRV9DTEUyNjY6CisJCQljYXNlIFVOSUNIUk9NRV9LNDAwOgorCQkJCXJldHVybiBwbGxfdmFsdWVbaV0uY2xlMjY2X3BsbDsKKworCQkJY2FzZSBVTklDSFJPTUVfSzgwMDoKKwkJCWNhc2UgVU5JQ0hST01FX1BNODAwOgorCQkJY2FzZSBVTklDSFJPTUVfQ043MDA6CisJCQkJcmV0dXJuIHBsbF92YWx1ZVtpXS5rODAwX3BsbDsKKworCQkJY2FzZSBVTklDSFJPTUVfQ1g3MDA6CisJCQljYXNlIFVOSUNIUk9NRV9LOE04OTA6CisJCQljYXNlIFVOSUNIUk9NRV9QNE04OTA6CisJCQljYXNlIFVOSUNIUk9NRV9QNE05MDA6CisJCQljYXNlIFVOSUNIUk9NRV9WWDgwMDoKKwkJCQlyZXR1cm4gcGxsX3ZhbHVlW2ldLmN4NzAwX3BsbDsKKwkJCX0KKwkJfQorCX0KKworCURFQlVHX01TRyhLRVJOX0lORk8gIkNhbid0IGZpbmQgbWF0Y2ggUExMIHZhbHVlXG5cbiIpOworCXJldHVybiAwOworfQorCisvKiBTZXQgVkNMSyovCit2b2lkIHZpYWZiX3NldF92Y2xvY2sodTMyIENMSywgaW50IHNldF9pZ2EpCit7CisJdW5zaWduZWQgY2hhciBSZWdUZW1wOworCisJLyogSC5XLiBSZXNldCA6IE9OICovCisJdmlhZmJfd3JpdGVfcmVnX21hc2soQ1IxNywgVklBQ1IsIDB4MDAsIEJJVDcpOworCisJaWYgKChzZXRfaWdhID09IElHQTEpIHx8IChzZXRfaWdhID09IElHQTFfSUdBMikpIHsKKwkJLyogQ2hhbmdlIEQsTiBGT1IgVkNMSyAqLworCQlzd2l0Y2ggKHZpYXBhcmluZm8tPmNoaXBfaW5mby0+Z2Z4X2NoaXBfbmFtZSkgeworCQljYXNlIFVOSUNIUk9NRV9DTEUyNjY6CisJCWNhc2UgVU5JQ0hST01FX0s0MDA6CisJCQl2aWFmYl93cml0ZV9yZWcoU1I0NiwgVklBU1IsIENMSyAvIDB4MTAwKTsKKwkJCXZpYWZiX3dyaXRlX3JlZyhTUjQ3LCBWSUFTUiwgQ0xLICUgMHgxMDApOworCQkJYnJlYWs7CisKKwkJY2FzZSBVTklDSFJPTUVfSzgwMDoKKwkJY2FzZSBVTklDSFJPTUVfUE04MDA6CisJCWNhc2UgVU5JQ0hST01FX0NONzAwOgorCQljYXNlIFVOSUNIUk9NRV9DWDcwMDoKKwkJY2FzZSBVTklDSFJPTUVfSzhNODkwOgorCQljYXNlIFVOSUNIUk9NRV9QNE04OTA6CisJCWNhc2UgVU5JQ0hST01FX1A0TTkwMDoKKwkJY2FzZSBVTklDSFJPTUVfVlg4MDA6CisJCQl2aWFmYl93cml0ZV9yZWcoU1I0NCwgVklBU1IsIENMSyAvIDB4MTAwMDApOworCQkJREVCVUdfTVNHKEtFUk5fSU5GTyAiXG5TUjQ0PSV4IiwgQ0xLIC8gMHgxMDAwMCk7CisJCQl2aWFmYl93cml0ZV9yZWcoU1I0NSwgVklBU1IsIChDTEsgJiAweEZGRkYpIC8gMHgxMDApOworCQkJREVCVUdfTVNHKEtFUk5fSU5GTyAiXG5TUjQ1PSV4IiwKKwkJCQkgIChDTEsgJiAweEZGRkYpIC8gMHgxMDApOworCQkJdmlhZmJfd3JpdGVfcmVnKFNSNDYsIFZJQVNSLCBDTEsgJSAweDEwMCk7CisJCQlERUJVR19NU0coS0VSTl9JTkZPICJcblNSNDY9JXgiLCBDTEsgJSAweDEwMCk7CisJCQlicmVhazsKKwkJfQorCX0KKworCWlmICgoc2V0X2lnYSA9PSBJR0EyKSB8fCAoc2V0X2lnYSA9PSBJR0ExX0lHQTIpKSB7CisJCS8qIENoYW5nZSBELE4gRk9SIExDSyAqLworCQlzd2l0Y2ggKHZpYXBhcmluZm8tPmNoaXBfaW5mby0+Z2Z4X2NoaXBfbmFtZSkgeworCQljYXNlIFVOSUNIUk9NRV9DTEUyNjY6CisJCWNhc2UgVU5JQ0hST01FX0s0MDA6CisJCQl2aWFmYl93cml0ZV9yZWcoU1I0NCwgVklBU1IsIENMSyAvIDB4MTAwKTsKKwkJCXZpYWZiX3dyaXRlX3JlZyhTUjQ1LCBWSUFTUiwgQ0xLICUgMHgxMDApOworCQkJYnJlYWs7CisKKwkJY2FzZSBVTklDSFJPTUVfSzgwMDoKKwkJY2FzZSBVTklDSFJPTUVfUE04MDA6CisJCWNhc2UgVU5JQ0hST01FX0NONzAwOgorCQljYXNlIFVOSUNIUk9NRV9DWDcwMDoKKwkJY2FzZSBVTklDSFJPTUVfSzhNODkwOgorCQljYXNlIFVOSUNIUk9NRV9QNE04OTA6CisJCWNhc2UgVU5JQ0hST01FX1A0TTkwMDoKKwkJY2FzZSBVTklDSFJPTUVfVlg4MDA6CisJCQl2aWFmYl93cml0ZV9yZWcoU1I0QSwgVklBU1IsIENMSyAvIDB4MTAwMDApOworCQkJdmlhZmJfd3JpdGVfcmVnKFNSNEIsIFZJQVNSLCAoQ0xLICYgMHhGRkZGKSAvIDB4MTAwKTsKKwkJCXZpYWZiX3dyaXRlX3JlZyhTUjRDLCBWSUFTUiwgQ0xLICUgMHgxMDApOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwkvKiBILlcuIFJlc2V0IDogT0ZGICovCisJdmlhZmJfd3JpdGVfcmVnX21hc2soQ1IxNywgVklBQ1IsIDB4ODAsIEJJVDcpOworCisJLyogUmVzZXQgUExMICovCisJaWYgKChzZXRfaWdhID09IElHQTEpIHx8IChzZXRfaWdhID09IElHQTFfSUdBMikpIHsKKwkJdmlhZmJfd3JpdGVfcmVnX21hc2soU1I0MCwgVklBU1IsIDB4MDIsIEJJVDEpOworCQl2aWFmYl93cml0ZV9yZWdfbWFzayhTUjQwLCBWSUFTUiwgMHgwMCwgQklUMSk7CisJfQorCisJaWYgKChzZXRfaWdhID09IElHQTIpIHx8IChzZXRfaWdhID09IElHQTFfSUdBMikpIHsKKwkJdmlhZmJfd3JpdGVfcmVnX21hc2soU1I0MCwgVklBU1IsIDB4MDEsIEJJVDApOworCQl2aWFmYl93cml0ZV9yZWdfbWFzayhTUjQwLCBWSUFTUiwgMHgwMCwgQklUMCk7CisJfQorCisJLyogRmlyZSEgKi8KKwlSZWdUZW1wID0gaW5iKFZJQVJNaXNjKTsKKwlvdXRiKFJlZ1RlbXAgfCAoQklUMiArIEJJVDMpLCBWSUFXTWlzYyk7Cit9CisKK3ZvaWQgdmlhZmJfbG9hZF9jcnRjX3RpbWluZyhzdHJ1Y3QgZGlzcGxheV90aW1pbmcgZGV2aWNlX3RpbWluZywKKwlpbnQgc2V0X2lnYSkKK3sKKwlpbnQgaTsKKwlpbnQgdmlhZmJfbG9hZF9yZWdfbnVtID0gMDsKKwlpbnQgcmVnX3ZhbHVlID0gMDsKKwlzdHJ1Y3QgaW9fcmVnaXN0ZXIgKnJlZyA9IE5VTEw7CisKKwl2aWFmYl91bmxvY2tfY3J0KCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgMTI7IGkrKykgeworCQlpZiAoc2V0X2lnYSA9PSBJR0ExKSB7CisJCQlzd2l0Y2ggKGkpIHsKKwkJCWNhc2UgSF9UT1RBTF9JTkRFWDoKKwkJCQlyZWdfdmFsdWUgPQorCQkJCSAgICBJR0ExX0hPUl9UT1RBTF9GT1JNVUxBKGRldmljZV90aW1pbmcuCisJCQkJCQkJICAgaG9yX3RvdGFsKTsKKwkJCQl2aWFmYl9sb2FkX3JlZ19udW0gPQorCQkJCQlpZ2ExX2NydGNfcmVnLmhvcl90b3RhbC5yZWdfbnVtOworCQkJCXJlZyA9IGlnYTFfY3J0Y19yZWcuaG9yX3RvdGFsLnJlZzsKKwkJCQlicmVhazsKKwkJCWNhc2UgSF9BRERSX0lOREVYOgorCQkJCXJlZ192YWx1ZSA9CisJCQkJICAgIElHQTFfSE9SX0FERFJfRk9STVVMQShkZXZpY2VfdGltaW5nLgorCQkJCQkJCSAgaG9yX2FkZHIpOworCQkJCXZpYWZiX2xvYWRfcmVnX251bSA9CisJCQkJCWlnYTFfY3J0Y19yZWcuaG9yX2FkZHIucmVnX251bTsKKwkJCQlyZWcgPSBpZ2ExX2NydGNfcmVnLmhvcl9hZGRyLnJlZzsKKwkJCQlicmVhazsKKwkJCWNhc2UgSF9CTEFOS19TVEFSVF9JTkRFWDoKKwkJCQlyZWdfdmFsdWUgPQorCQkJCSAgICBJR0ExX0hPUl9CTEFOS19TVEFSVF9GT1JNVUxBCisJCQkJICAgIChkZXZpY2VfdGltaW5nLmhvcl9ibGFua19zdGFydCk7CisJCQkJdmlhZmJfbG9hZF9yZWdfbnVtID0KKwkJCQkgICAgaWdhMV9jcnRjX3JlZy5ob3JfYmxhbmtfc3RhcnQucmVnX251bTsKKwkJCQlyZWcgPSBpZ2ExX2NydGNfcmVnLmhvcl9ibGFua19zdGFydC5yZWc7CisJCQkJYnJlYWs7CisJCQljYXNlIEhfQkxBTktfRU5EX0lOREVYOgorCQkJCXJlZ192YWx1ZSA9CisJCQkJICAgIElHQTFfSE9SX0JMQU5LX0VORF9GT1JNVUxBCisJCQkJICAgIChkZXZpY2VfdGltaW5nLmhvcl9ibGFua19zdGFydCwKKwkJCQkgICAgIGRldmljZV90aW1pbmcuaG9yX2JsYW5rX2VuZCk7CisJCQkJdmlhZmJfbG9hZF9yZWdfbnVtID0KKwkJCQkgICAgaWdhMV9jcnRjX3JlZy5ob3JfYmxhbmtfZW5kLnJlZ19udW07CisJCQkJcmVnID0gaWdhMV9jcnRjX3JlZy5ob3JfYmxhbmtfZW5kLnJlZzsKKwkJCQlicmVhazsKKwkJCWNhc2UgSF9TWU5DX1NUQVJUX0lOREVYOgorCQkJCXJlZ192YWx1ZSA9CisJCQkJICAgIElHQTFfSE9SX1NZTkNfU1RBUlRfRk9STVVMQQorCQkJCSAgICAoZGV2aWNlX3RpbWluZy5ob3Jfc3luY19zdGFydCk7CisJCQkJdmlhZmJfbG9hZF9yZWdfbnVtID0KKwkJCQkgICAgaWdhMV9jcnRjX3JlZy5ob3Jfc3luY19zdGFydC5yZWdfbnVtOworCQkJCXJlZyA9IGlnYTFfY3J0Y19yZWcuaG9yX3N5bmNfc3RhcnQucmVnOworCQkJCWJyZWFrOworCQkJY2FzZSBIX1NZTkNfRU5EX0lOREVYOgorCQkJCXJlZ192YWx1ZSA9CisJCQkJICAgIElHQTFfSE9SX1NZTkNfRU5EX0ZPUk1VTEEKKwkJCQkgICAgKGRldmljZV90aW1pbmcuaG9yX3N5bmNfc3RhcnQsCisJCQkJICAgICBkZXZpY2VfdGltaW5nLmhvcl9zeW5jX2VuZCk7CisJCQkJdmlhZmJfbG9hZF9yZWdfbnVtID0KKwkJCQkgICAgaWdhMV9jcnRjX3JlZy5ob3Jfc3luY19lbmQucmVnX251bTsKKwkJCQlyZWcgPSBpZ2ExX2NydGNfcmVnLmhvcl9zeW5jX2VuZC5yZWc7CisJCQkJYnJlYWs7CisJCQljYXNlIFZfVE9UQUxfSU5ERVg6CisJCQkJcmVnX3ZhbHVlID0KKwkJCQkgICAgSUdBMV9WRVJfVE9UQUxfRk9STVVMQShkZXZpY2VfdGltaW5nLgorCQkJCQkJCSAgIHZlcl90b3RhbCk7CisJCQkJdmlhZmJfbG9hZF9yZWdfbnVtID0KKwkJCQkJaWdhMV9jcnRjX3JlZy52ZXJfdG90YWwucmVnX251bTsKKwkJCQlyZWcgPSBpZ2ExX2NydGNfcmVnLnZlcl90b3RhbC5yZWc7CisJCQkJYnJlYWs7CisJCQljYXNlIFZfQUREUl9JTkRFWDoKKwkJCQlyZWdfdmFsdWUgPQorCQkJCSAgICBJR0ExX1ZFUl9BRERSX0ZPUk1VTEEoZGV2aWNlX3RpbWluZy4KKwkJCQkJCQkgIHZlcl9hZGRyKTsKKwkJCQl2aWFmYl9sb2FkX3JlZ19udW0gPQorCQkJCQlpZ2ExX2NydGNfcmVnLnZlcl9hZGRyLnJlZ19udW07CisJCQkJcmVnID0gaWdhMV9jcnRjX3JlZy52ZXJfYWRkci5yZWc7CisJCQkJYnJlYWs7CisJCQljYXNlIFZfQkxBTktfU1RBUlRfSU5ERVg6CisJCQkJcmVnX3ZhbHVlID0KKwkJCQkgICAgSUdBMV9WRVJfQkxBTktfU1RBUlRfRk9STVVMQQorCQkJCSAgICAoZGV2aWNlX3RpbWluZy52ZXJfYmxhbmtfc3RhcnQpOworCQkJCXZpYWZiX2xvYWRfcmVnX251bSA9CisJCQkJICAgIGlnYTFfY3J0Y19yZWcudmVyX2JsYW5rX3N0YXJ0LnJlZ19udW07CisJCQkJcmVnID0gaWdhMV9jcnRjX3JlZy52ZXJfYmxhbmtfc3RhcnQucmVnOworCQkJCWJyZWFrOworCQkJY2FzZSBWX0JMQU5LX0VORF9JTkRFWDoKKwkJCQlyZWdfdmFsdWUgPQorCQkJCSAgICBJR0ExX1ZFUl9CTEFOS19FTkRfRk9STVVMQQorCQkJCSAgICAoZGV2aWNlX3RpbWluZy52ZXJfYmxhbmtfc3RhcnQsCisJCQkJICAgICBkZXZpY2VfdGltaW5nLnZlcl9ibGFua19lbmQpOworCQkJCXZpYWZiX2xvYWRfcmVnX251bSA9CisJCQkJICAgIGlnYTFfY3J0Y19yZWcudmVyX2JsYW5rX2VuZC5yZWdfbnVtOworCQkJCXJlZyA9IGlnYTFfY3J0Y19yZWcudmVyX2JsYW5rX2VuZC5yZWc7CisJCQkJYnJlYWs7CisJCQljYXNlIFZfU1lOQ19TVEFSVF9JTkRFWDoKKwkJCQlyZWdfdmFsdWUgPQorCQkJCSAgICBJR0ExX1ZFUl9TWU5DX1NUQVJUX0ZPUk1VTEEKKwkJCQkgICAgKGRldmljZV90aW1pbmcudmVyX3N5bmNfc3RhcnQpOworCQkJCXZpYWZiX2xvYWRfcmVnX251bSA9CisJCQkJICAgIGlnYTFfY3J0Y19yZWcudmVyX3N5bmNfc3RhcnQucmVnX251bTsKKwkJCQlyZWcgPSBpZ2ExX2NydGNfcmVnLnZlcl9zeW5jX3N0YXJ0LnJlZzsKKwkJCQlicmVhazsKKwkJCWNhc2UgVl9TWU5DX0VORF9JTkRFWDoKKwkJCQlyZWdfdmFsdWUgPQorCQkJCSAgICBJR0ExX1ZFUl9TWU5DX0VORF9GT1JNVUxBCisJCQkJICAgIChkZXZpY2VfdGltaW5nLnZlcl9zeW5jX3N0YXJ0LAorCQkJCSAgICAgZGV2aWNlX3RpbWluZy52ZXJfc3luY19lbmQpOworCQkJCXZpYWZiX2xvYWRfcmVnX251bSA9CisJCQkJICAgIGlnYTFfY3J0Y19yZWcudmVyX3N5bmNfZW5kLnJlZ19udW07CisJCQkJcmVnID0gaWdhMV9jcnRjX3JlZy52ZXJfc3luY19lbmQucmVnOworCQkJCWJyZWFrOworCisJCQl9CisJCX0KKworCQlpZiAoc2V0X2lnYSA9PSBJR0EyKSB7CisJCQlzd2l0Y2ggKGkpIHsKKwkJCWNhc2UgSF9UT1RBTF9JTkRFWDoKKwkJCQlyZWdfdmFsdWUgPQorCQkJCSAgICBJR0EyX0hPUl9UT1RBTF9GT1JNVUxBKGRldmljZV90aW1pbmcuCisJCQkJCQkJICAgaG9yX3RvdGFsKTsKKwkJCQl2aWFmYl9sb2FkX3JlZ19udW0gPQorCQkJCQlpZ2EyX2NydGNfcmVnLmhvcl90b3RhbC5yZWdfbnVtOworCQkJCXJlZyA9IGlnYTJfY3J0Y19yZWcuaG9yX3RvdGFsLnJlZzsKKwkJCQlicmVhazsKKwkJCWNhc2UgSF9BRERSX0lOREVYOgorCQkJCXJlZ192YWx1ZSA9CisJCQkJICAgIElHQTJfSE9SX0FERFJfRk9STVVMQShkZXZpY2VfdGltaW5nLgorCQkJCQkJCSAgaG9yX2FkZHIpOworCQkJCXZpYWZiX2xvYWRfcmVnX251bSA9CisJCQkJCWlnYTJfY3J0Y19yZWcuaG9yX2FkZHIucmVnX251bTsKKwkJCQlyZWcgPSBpZ2EyX2NydGNfcmVnLmhvcl9hZGRyLnJlZzsKKwkJCQlicmVhazsKKwkJCWNhc2UgSF9CTEFOS19TVEFSVF9JTkRFWDoKKwkJCQlyZWdfdmFsdWUgPQorCQkJCSAgICBJR0EyX0hPUl9CTEFOS19TVEFSVF9GT1JNVUxBCisJCQkJICAgIChkZXZpY2VfdGltaW5nLmhvcl9ibGFua19zdGFydCk7CisJCQkJdmlhZmJfbG9hZF9yZWdfbnVtID0KKwkJCQkgICAgaWdhMl9jcnRjX3JlZy5ob3JfYmxhbmtfc3RhcnQucmVnX251bTsKKwkJCQlyZWcgPSBpZ2EyX2NydGNfcmVnLmhvcl9ibGFua19zdGFydC5yZWc7CisJCQkJYnJlYWs7CisJCQljYXNlIEhfQkxBTktfRU5EX0lOREVYOgorCQkJCXJlZ192YWx1ZSA9CisJCQkJICAgIElHQTJfSE9SX0JMQU5LX0VORF9GT1JNVUxBCisJCQkJICAgIChkZXZpY2VfdGltaW5nLmhvcl9ibGFua19zdGFydCwKKwkJCQkgICAgIGRldmljZV90aW1pbmcuaG9yX2JsYW5rX2VuZCk7CisJCQkJdmlhZmJfbG9hZF9yZWdfbnVtID0KKwkJCQkgICAgaWdhMl9jcnRjX3JlZy5ob3JfYmxhbmtfZW5kLnJlZ19udW07CisJCQkJcmVnID0gaWdhMl9jcnRjX3JlZy5ob3JfYmxhbmtfZW5kLnJlZzsKKwkJCQlicmVhazsKKwkJCWNhc2UgSF9TWU5DX1NUQVJUX0lOREVYOgorCQkJCXJlZ192YWx1ZSA9CisJCQkJICAgIElHQTJfSE9SX1NZTkNfU1RBUlRfRk9STVVMQQorCQkJCSAgICAoZGV2aWNlX3RpbWluZy5ob3Jfc3luY19zdGFydCk7CisJCQkJaWYgKFVOSUNIUk9NRV9DTjcwMCA8PQorCQkJCQl2aWFwYXJpbmZvLT5jaGlwX2luZm8tPmdmeF9jaGlwX25hbWUpCisJCQkJCXZpYWZiX2xvYWRfcmVnX251bSA9CisJCQkJCSAgICBpZ2EyX2NydGNfcmVnLmhvcl9zeW5jX3N0YXJ0LgorCQkJCQkgICAgcmVnX251bTsKKwkJCQllbHNlCisJCQkJCXZpYWZiX2xvYWRfcmVnX251bSA9IDM7CisJCQkJcmVnID0gaWdhMl9jcnRjX3JlZy5ob3Jfc3luY19zdGFydC5yZWc7CisJCQkJYnJlYWs7CisJCQljYXNlIEhfU1lOQ19FTkRfSU5ERVg6CisJCQkJcmVnX3ZhbHVlID0KKwkJCQkgICAgSUdBMl9IT1JfU1lOQ19FTkRfRk9STVVMQQorCQkJCSAgICAoZGV2aWNlX3RpbWluZy5ob3Jfc3luY19zdGFydCwKKwkJCQkgICAgIGRldmljZV90aW1pbmcuaG9yX3N5bmNfZW5kKTsKKwkJCQl2aWFmYl9sb2FkX3JlZ19udW0gPQorCQkJCSAgICBpZ2EyX2NydGNfcmVnLmhvcl9zeW5jX2VuZC5yZWdfbnVtOworCQkJCXJlZyA9IGlnYTJfY3J0Y19yZWcuaG9yX3N5bmNfZW5kLnJlZzsKKwkJCQlicmVhazsKKwkJCWNhc2UgVl9UT1RBTF9JTkRFWDoKKwkJCQlyZWdfdmFsdWUgPQorCQkJCSAgICBJR0EyX1ZFUl9UT1RBTF9GT1JNVUxBKGRldmljZV90aW1pbmcuCisJCQkJCQkJICAgdmVyX3RvdGFsKTsKKwkJCQl2aWFmYl9sb2FkX3JlZ19udW0gPQorCQkJCQlpZ2EyX2NydGNfcmVnLnZlcl90b3RhbC5yZWdfbnVtOworCQkJCXJlZyA9IGlnYTJfY3J0Y19yZWcudmVyX3RvdGFsLnJlZzsKKwkJCQlicmVhazsKKwkJCWNhc2UgVl9BRERSX0lOREVYOgorCQkJCXJlZ192YWx1ZSA9CisJCQkJICAgIElHQTJfVkVSX0FERFJfRk9STVVMQShkZXZpY2VfdGltaW5nLgorCQkJCQkJCSAgdmVyX2FkZHIpOworCQkJCXZpYWZiX2xvYWRfcmVnX251bSA9CisJCQkJCWlnYTJfY3J0Y19yZWcudmVyX2FkZHIucmVnX251bTsKKwkJCQlyZWcgPSBpZ2EyX2NydGNfcmVnLnZlcl9hZGRyLnJlZzsKKwkJCQlicmVhazsKKwkJCWNhc2UgVl9CTEFOS19TVEFSVF9JTkRFWDoKKwkJCQlyZWdfdmFsdWUgPQorCQkJCSAgICBJR0EyX1ZFUl9CTEFOS19TVEFSVF9GT1JNVUxBCisJCQkJICAgIChkZXZpY2VfdGltaW5nLnZlcl9ibGFua19zdGFydCk7CisJCQkJdmlhZmJfbG9hZF9yZWdfbnVtID0KKwkJCQkgICAgaWdhMl9jcnRjX3JlZy52ZXJfYmxhbmtfc3RhcnQucmVnX251bTsKKwkJCQlyZWcgPSBpZ2EyX2NydGNfcmVnLnZlcl9ibGFua19zdGFydC5yZWc7CisJCQkJYnJlYWs7CisJCQljYXNlIFZfQkxBTktfRU5EX0lOREVYOgorCQkJCXJlZ192YWx1ZSA9CisJCQkJICAgIElHQTJfVkVSX0JMQU5LX0VORF9GT1JNVUxBCisJCQkJICAgIChkZXZpY2VfdGltaW5nLnZlcl9ibGFua19zdGFydCwKKwkJCQkgICAgIGRldmljZV90aW1pbmcudmVyX2JsYW5rX2VuZCk7CisJCQkJdmlhZmJfbG9hZF9yZWdfbnVtID0KKwkJCQkgICAgaWdhMl9jcnRjX3JlZy52ZXJfYmxhbmtfZW5kLnJlZ19udW07CisJCQkJcmVnID0gaWdhMl9jcnRjX3JlZy52ZXJfYmxhbmtfZW5kLnJlZzsKKwkJCQlicmVhazsKKwkJCWNhc2UgVl9TWU5DX1NUQVJUX0lOREVYOgorCQkJCXJlZ192YWx1ZSA9CisJCQkJICAgIElHQTJfVkVSX1NZTkNfU1RBUlRfRk9STVVMQQorCQkJCSAgICAoZGV2aWNlX3RpbWluZy52ZXJfc3luY19zdGFydCk7CisJCQkJdmlhZmJfbG9hZF9yZWdfbnVtID0KKwkJCQkgICAgaWdhMl9jcnRjX3JlZy52ZXJfc3luY19zdGFydC5yZWdfbnVtOworCQkJCXJlZyA9IGlnYTJfY3J0Y19yZWcudmVyX3N5bmNfc3RhcnQucmVnOworCQkJCWJyZWFrOworCQkJY2FzZSBWX1NZTkNfRU5EX0lOREVYOgorCQkJCXJlZ192YWx1ZSA9CisJCQkJICAgIElHQTJfVkVSX1NZTkNfRU5EX0ZPUk1VTEEKKwkJCQkgICAgKGRldmljZV90aW1pbmcudmVyX3N5bmNfc3RhcnQsCisJCQkJICAgICBkZXZpY2VfdGltaW5nLnZlcl9zeW5jX2VuZCk7CisJCQkJdmlhZmJfbG9hZF9yZWdfbnVtID0KKwkJCQkgICAgaWdhMl9jcnRjX3JlZy52ZXJfc3luY19lbmQucmVnX251bTsKKwkJCQlyZWcgPSBpZ2EyX2NydGNfcmVnLnZlcl9zeW5jX2VuZC5yZWc7CisJCQkJYnJlYWs7CisKKwkJCX0KKwkJfQorCQl2aWFmYl9sb2FkX3JlZyhyZWdfdmFsdWUsIHZpYWZiX2xvYWRfcmVnX251bSwgcmVnLCBWSUFDUik7CisJfQorCisJdmlhZmJfbG9ja19jcnQoKTsKK30KKwordm9pZCB2aWFmYl9zZXRfY29sb3JfZGVwdGgoaW50IGJwcF9ieXRlLCBpbnQgc2V0X2lnYSkKK3sKKwlpZiAoc2V0X2lnYSA9PSBJR0ExKSB7CisJCXN3aXRjaCAoYnBwX2J5dGUpIHsKKwkJY2FzZSBNT0RFXzhCUFA6CisJCQl2aWFmYl93cml0ZV9yZWdfbWFzayhTUjE1LCBWSUFTUiwgMHgyMiwgMHg3RSk7CisJCQlicmVhazsKKwkJY2FzZSBNT0RFXzE2QlBQOgorCQkJdmlhZmJfd3JpdGVfcmVnX21hc2soU1IxNSwgVklBU1IsIDB4QjYsIDB4RkUpOworCQkJYnJlYWs7CisJCWNhc2UgTU9ERV8zMkJQUDoKKwkJCXZpYWZiX3dyaXRlX3JlZ19tYXNrKFNSMTUsIFZJQVNSLCAweEFFLCAweEZFKTsKKwkJCWJyZWFrOworCQl9CisJfSBlbHNlIHsKKwkJc3dpdGNoIChicHBfYnl0ZSkgeworCQljYXNlIE1PREVfOEJQUDoKKwkJCXZpYWZiX3dyaXRlX3JlZ19tYXNrKENSNjcsIFZJQUNSLCAweDAwLCBCSVQ2ICsgQklUNyk7CisJCQlicmVhazsKKwkJY2FzZSBNT0RFXzE2QlBQOgorCQkJdmlhZmJfd3JpdGVfcmVnX21hc2soQ1I2NywgVklBQ1IsIDB4NDAsIEJJVDYgKyBCSVQ3KTsKKwkJCWJyZWFrOworCQljYXNlIE1PREVfMzJCUFA6CisJCQl2aWFmYl93cml0ZV9yZWdfbWFzayhDUjY3LCBWSUFDUiwgMHhDMCwgQklUNiArIEJJVDcpOworCQkJYnJlYWs7CisJCX0KKwl9Cit9CisKK3ZvaWQgdmlhZmJfZmlsbF9jcnRjX3RpbWluZyhzdHJ1Y3QgY3J0X21vZGVfdGFibGUgKmNydF90YWJsZSwKKwlpbnQgbW9kZV9pbmRleCwgaW50IGJwcF9ieXRlLCBpbnQgc2V0X2lnYSkKK3sKKwlzdHJ1Y3QgVmlkZW9Nb2RlVGFibGUgKnZpZGVvX21vZGU7CisJc3RydWN0IGRpc3BsYXlfdGltaW5nIGNydF9yZWc7CisJaW50IGk7CisJaW50IGluZGV4ID0gMDsKKwlpbnQgaF9hZGRyLCB2X2FkZHI7CisJdTMyIHBsbF9EX047CisKKwl2aWRlb19tb2RlID0gJkNMRTI2Nk1vZGVzW3NlYXJjaF9tb2RlX3NldHRpbmcobW9kZV9pbmRleCldOworCisJZm9yIChpID0gMDsgaSA8IHZpZGVvX21vZGUtPm1vZGVfYXJyYXk7IGkrKykgeworCQlpbmRleCA9IGk7CisKKwkJaWYgKGNydF90YWJsZVtpXS5yZWZyZXNoX3JhdGUgPT0gdmlhcGFyaW5mby0+CisJCQljcnRfc2V0dGluZ19pbmZvLT5yZWZyZXNoX3JhdGUpCisJCQlicmVhazsKKwl9CisKKwljcnRfcmVnID0gY3J0X3RhYmxlW2luZGV4XS5jcnRjOworCisJLyogTW9kZSA2NDB4NDgwIGhhcyBib3JkZXIsIGJ1dCBMQ0QvREZQIGRpZG4ndCBoYXZlIGJvcmRlci4gKi8KKwkvKiBTbyB3ZSB3b3VsZCBkZWxldGUgYm9yZGVyLiAqLworCWlmICgodmlhZmJfTENEX09OIHwgdmlhZmJfRFZJX09OKSAmJiAobW9kZV9pbmRleCA9PSBWSUFfUkVTXzY0MFg0ODApCisJICAgICYmICh2aWFwYXJpbmZvLT5jcnRfc2V0dGluZ19pbmZvLT5yZWZyZXNoX3JhdGUgPT0gNjApKSB7CisJCS8qIFRoZSBib3JkZXIgaXMgOCBwaXhlbHMuICovCisJCWNydF9yZWcuaG9yX2JsYW5rX3N0YXJ0ID0gY3J0X3JlZy5ob3JfYmxhbmtfc3RhcnQgLSA4OworCisJCS8qIEJsYW5raW5nIHRpbWUgc2hvdWxkIGFkZCBsZWZ0IGFuZCByaWdodCBib3JkZXJzLiAqLworCQljcnRfcmVnLmhvcl9ibGFua19lbmQgPSBjcnRfcmVnLmhvcl9ibGFua19lbmQgKyAxNjsKKwl9CisKKwloX2FkZHIgPSBjcnRfcmVnLmhvcl9hZGRyOworCXZfYWRkciA9IGNydF9yZWcudmVyX2FkZHI7CisKKwkvKiB1cGRhdGUgcG9sYXJpdHkgZm9yIENSVCB0aW1pbmcgKi8KKwlpZiAoY3J0X3RhYmxlW2luZGV4XS5oX3N5bmNfcG9sYXJpdHkgPT0gTkVHQVRJVkUpIHsKKwkJaWYgKGNydF90YWJsZVtpbmRleF0udl9zeW5jX3BvbGFyaXR5ID09IE5FR0FUSVZFKQorCQkJb3V0YigoaW5iKFZJQVJNaXNjKSAmICh+KEJJVDYgKyBCSVQ3KSkpIHwKKwkJCSAgICAgKEJJVDYgKyBCSVQ3KSwgVklBV01pc2MpOworCQllbHNlCisJCQlvdXRiKChpbmIoVklBUk1pc2MpICYgKH4oQklUNiArIEJJVDcpKSkgfCAoQklUNiksCisJCQkgICAgIFZJQVdNaXNjKTsKKwl9IGVsc2UgeworCQlpZiAoY3J0X3RhYmxlW2luZGV4XS52X3N5bmNfcG9sYXJpdHkgPT0gTkVHQVRJVkUpCisJCQlvdXRiKChpbmIoVklBUk1pc2MpICYgKH4oQklUNiArIEJJVDcpKSkgfCAoQklUNyksCisJCQkgICAgIFZJQVdNaXNjKTsKKwkJZWxzZQorCQkJb3V0YigoaW5iKFZJQVJNaXNjKSAmICh+KEJJVDYgKyBCSVQ3KSkpLCBWSUFXTWlzYyk7CisJfQorCisJaWYgKHNldF9pZ2EgPT0gSUdBMSkgeworCQl2aWFmYl91bmxvY2tfY3J0KCk7CisJCXZpYWZiX3dyaXRlX3JlZyhDUjA5LCBWSUFDUiwgMHgwMCk7CS8qaW5pdGlhbCBDUjA5PTAgKi8KKwkJdmlhZmJfd3JpdGVfcmVnX21hc2soQ1IxMSwgVklBQ1IsIDB4MDAsIEJJVDQgKyBCSVQ1ICsgQklUNik7CisJCXZpYWZiX3dyaXRlX3JlZ19tYXNrKENSMTcsIFZJQUNSLCAweDAwLCBCSVQ3KTsKKwl9CisKKwlzd2l0Y2ggKHNldF9pZ2EpIHsKKwljYXNlIElHQTE6CisJCXZpYWZiX2xvYWRfY3J0Y190aW1pbmcoY3J0X3JlZywgSUdBMSk7CisJCWJyZWFrOworCWNhc2UgSUdBMjoKKwkJdmlhZmJfbG9hZF9jcnRjX3RpbWluZyhjcnRfcmVnLCBJR0EyKTsKKwkJYnJlYWs7CisJfQorCisJbG9hZF9maXhfYml0X2NydGNfcmVnKCk7CisJdmlhZmJfbG9ja19jcnQoKTsKKwl2aWFmYl93cml0ZV9yZWdfbWFzayhDUjE3LCBWSUFDUiwgMHg4MCwgQklUNyk7CisJdmlhZmJfbG9hZF9vZmZzZXRfcmVnKGhfYWRkciwgYnBwX2J5dGUsIHNldF9pZ2EpOworCXZpYWZiX2xvYWRfZmV0Y2hfY291bnRfcmVnKGhfYWRkciwgYnBwX2J5dGUsIHNldF9pZ2EpOworCisJLyogbG9hZCBGSUZPICovCisJaWYgKCh2aWFwYXJpbmZvLT5jaGlwX2luZm8tPmdmeF9jaGlwX25hbWUgIT0gVU5JQ0hST01FX0NMRTI2NikKKwkgICAgJiYgKHZpYXBhcmluZm8tPmNoaXBfaW5mby0+Z2Z4X2NoaXBfbmFtZSAhPSBVTklDSFJPTUVfSzQwMCkpCisJCXZpYWZiX2xvYWRfRklGT19yZWcoc2V0X2lnYSwgaF9hZGRyLCB2X2FkZHIpOworCisJLyogbG9hZCBTUiBSZWdpc3RlciBBYm91dCBNZW1vcnkgYW5kIENvbG9yIHBhcnQgKi8KKwl2aWFmYl9zZXRfY29sb3JfZGVwdGgoYnBwX2J5dGUsIHNldF9pZ2EpOworCisJcGxsX0RfTiA9IHZpYWZiX2dldF9jbGtfdmFsdWUoY3J0X3RhYmxlW2luZGV4XS5jbGspOworCURFQlVHX01TRyhLRVJOX0lORk8gIlBMTD0leCIsIHBsbF9EX04pOworCXZpYWZiX3NldF92Y2xvY2socGxsX0RfTiwgc2V0X2lnYSk7CisKK30KKwordm9pZCB2aWFmYl9pbml0X2NoaXBfaW5mbyh2b2lkKQoreworCWluaXRfZ2Z4X2NoaXBfaW5mbygpOworCWluaXRfdG1kc19jaGlwX2luZm8oKTsKKwlpbml0X2x2ZHNfY2hpcF9pbmZvKCk7CisKKwl2aWFwYXJpbmZvLT5jcnRfc2V0dGluZ19pbmZvLT5pZ2FfcGF0aCA9IElHQTE7CisJdmlhcGFyaW5mby0+Y3J0X3NldHRpbmdfaW5mby0+cmVmcmVzaF9yYXRlID0gdmlhZmJfcmVmcmVzaDsKKworCS8qU2V0IElHQSBwYXRoIGZvciBlYWNoIGRldmljZSAqLworCXZpYWZiX3NldF9pZ2FfcGF0aCgpOworCisJdmlhcGFyaW5mby0+bHZkc19zZXR0aW5nX2luZm8tPmRpc3BsYXlfbWV0aG9kID0gdmlhZmJfbGNkX2RzcF9tZXRob2Q7CisJdmlhcGFyaW5mby0+bHZkc19zZXR0aW5nX2luZm8tPmdldF9sY2Rfc2l6ZV9tZXRob2QgPQorCQlHRVRfTENEX1NJWkVfQllfVVNFUl9TRVRUSU5HOworCXZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvLT5sY2RfbW9kZSA9IHZpYWZiX2xjZF9tb2RlOworCXZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvMi0+ZGlzcGxheV9tZXRob2QgPQorCQl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mby0+ZGlzcGxheV9tZXRob2Q7CisJdmlhcGFyaW5mby0+bHZkc19zZXR0aW5nX2luZm8yLT5sY2RfbW9kZSA9CisJCXZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvLT5sY2RfbW9kZTsKK30KKwordm9pZCB2aWFmYl91cGRhdGVfZGV2aWNlX3NldHRpbmcoaW50IGhyZXMsIGludCB2cmVzLAorCWludCBicHAsIGludCB2bW9kZV9yZWZyZXNoLCBpbnQgZmxhZykKK3sKKwlpZiAoZmxhZyA9PSAwKSB7CisJCXZpYXBhcmluZm8tPmNydF9zZXR0aW5nX2luZm8tPmhfYWN0aXZlID0gaHJlczsKKwkJdmlhcGFyaW5mby0+Y3J0X3NldHRpbmdfaW5mby0+dl9hY3RpdmUgPSB2cmVzOworCQl2aWFwYXJpbmZvLT5jcnRfc2V0dGluZ19pbmZvLT5icHAgPSBicHA7CisJCXZpYXBhcmluZm8tPmNydF9zZXR0aW5nX2luZm8tPnJlZnJlc2hfcmF0ZSA9CisJCQl2bW9kZV9yZWZyZXNoOworCisJCXZpYXBhcmluZm8tPnRtZHNfc2V0dGluZ19pbmZvLT5oX2FjdGl2ZSA9IGhyZXM7CisJCXZpYXBhcmluZm8tPnRtZHNfc2V0dGluZ19pbmZvLT52X2FjdGl2ZSA9IHZyZXM7CisJCXZpYXBhcmluZm8tPnRtZHNfc2V0dGluZ19pbmZvLT5icHAgPSBicHA7CisJCXZpYXBhcmluZm8tPnRtZHNfc2V0dGluZ19pbmZvLT5yZWZyZXNoX3JhdGUgPQorCQkJdm1vZGVfcmVmcmVzaDsKKworCQl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mby0+aF9hY3RpdmUgPSBocmVzOworCQl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mby0+dl9hY3RpdmUgPSB2cmVzOworCQl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mby0+YnBwID0gYnBwOworCQl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mby0+cmVmcmVzaF9yYXRlID0KKwkJCXZtb2RlX3JlZnJlc2g7CisJCXZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvMi0+aF9hY3RpdmUgPSBocmVzOworCQl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mbzItPnZfYWN0aXZlID0gdnJlczsKKwkJdmlhcGFyaW5mby0+bHZkc19zZXR0aW5nX2luZm8yLT5icHAgPSBicHA7CisJCXZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvMi0+cmVmcmVzaF9yYXRlID0KKwkJCXZtb2RlX3JlZnJlc2g7CisJfSBlbHNlIHsKKworCQlpZiAodmlhcGFyaW5mby0+dG1kc19zZXR0aW5nX2luZm8tPmlnYV9wYXRoID09IElHQTIpIHsKKwkJCXZpYXBhcmluZm8tPnRtZHNfc2V0dGluZ19pbmZvLT5oX2FjdGl2ZSA9IGhyZXM7CisJCQl2aWFwYXJpbmZvLT50bWRzX3NldHRpbmdfaW5mby0+dl9hY3RpdmUgPSB2cmVzOworCQkJdmlhcGFyaW5mby0+dG1kc19zZXR0aW5nX2luZm8tPmJwcCA9IGJwcDsKKwkJCXZpYXBhcmluZm8tPnRtZHNfc2V0dGluZ19pbmZvLT5yZWZyZXNoX3JhdGUgPQorCQkJCXZtb2RlX3JlZnJlc2g7CisJCX0KKworCQlpZiAodmlhcGFyaW5mby0+bHZkc19zZXR0aW5nX2luZm8tPmlnYV9wYXRoID09IElHQTIpIHsKKwkJCXZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvLT5oX2FjdGl2ZSA9IGhyZXM7CisJCQl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mby0+dl9hY3RpdmUgPSB2cmVzOworCQkJdmlhcGFyaW5mby0+bHZkc19zZXR0aW5nX2luZm8tPmJwcCA9IGJwcDsKKwkJCXZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvLT5yZWZyZXNoX3JhdGUgPQorCQkJCXZtb2RlX3JlZnJlc2g7CisJCX0KKwkJaWYgKElHQTIgPT0gdmlhcGFyaW5mby0+bHZkc19zZXR0aW5nX2luZm8yLT5pZ2FfcGF0aCkgeworCQkJdmlhcGFyaW5mby0+bHZkc19zZXR0aW5nX2luZm8yLT5oX2FjdGl2ZSA9IGhyZXM7CisJCQl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mbzItPnZfYWN0aXZlID0gdnJlczsKKwkJCXZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvMi0+YnBwID0gYnBwOworCQkJdmlhcGFyaW5mby0+bHZkc19zZXR0aW5nX2luZm8yLT5yZWZyZXNoX3JhdGUgPQorCQkJCXZtb2RlX3JlZnJlc2g7CisJCX0KKwl9Cit9CisKK3N0YXRpYyB2b2lkIGluaXRfZ2Z4X2NoaXBfaW5mbyh2b2lkKQoreworCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gTlVMTDsKKwl1MzIgaTsKKwl1OCB0bXA7CisKKwkvKiBJbmRlbnRpZnkgR0ZYIENoaXAgTmFtZSAqLworCWZvciAoaSA9IDA7IHBjaWlkbGlzdFtpXS52ZW5kb3IgIT0gMDsgaSsrKSB7CisJCXBkZXYgPSBwY2lfZ2V0X2RldmljZShwY2lpZGxpc3RbaV0udmVuZG9yLAorCQkJcGNpaWRsaXN0W2ldLmRldmljZSwgMCk7CisJCWlmIChwZGV2KQorCQkJYnJlYWs7CisJfQorCisJaWYgKCFwY2lpZGxpc3RbaV0udmVuZG9yKQorCQlyZXR1cm4gOworCisJdmlhcGFyaW5mby0+Y2hpcF9pbmZvLT5nZnhfY2hpcF9uYW1lID0gcGNpaWRsaXN0W2ldLmNoaXBfaW5kZXg7CisKKwkvKiBDaGVjayByZXZpc2lvbiBvZiBDTEUyNjYgQ2hpcCAqLworCWlmICh2aWFwYXJpbmZvLT5jaGlwX2luZm8tPmdmeF9jaGlwX25hbWUgPT0gVU5JQ0hST01FX0NMRTI2NikgeworCQkvKiBDUjRGIG9ubHkgZGVmaW5lIGluIENMRTI2Ni5DWCBjaGlwICovCisJCXRtcCA9IHZpYWZiX3JlYWRfcmVnKFZJQUNSLCBDUjRGKTsKKwkJdmlhZmJfd3JpdGVfcmVnKENSNEYsIFZJQUNSLCAweDU1KTsKKwkJaWYgKHZpYWZiX3JlYWRfcmVnKFZJQUNSLCBDUjRGKSAhPSAweDU1KQorCQkJdmlhcGFyaW5mby0+Y2hpcF9pbmZvLT5nZnhfY2hpcF9yZXZpc2lvbiA9CisJCQlDTEUyNjZfUkVWSVNJT05fQVg7CisJCWVsc2UKKwkJCXZpYXBhcmluZm8tPmNoaXBfaW5mby0+Z2Z4X2NoaXBfcmV2aXNpb24gPQorCQkJQ0xFMjY2X1JFVklTSU9OX0NYOworCQkvKiByZXN0b3JlIG9yaWduYWwgQ1I0RiB2YWx1ZSAqLworCQl2aWFmYl93cml0ZV9yZWcoQ1I0RiwgVklBQ1IsIHRtcCk7CisJfQorCisJaWYgKHZpYXBhcmluZm8tPmNoaXBfaW5mby0+Z2Z4X2NoaXBfbmFtZSA9PSBVTklDSFJPTUVfQ1g3MDApIHsKKwkJdG1wID0gdmlhZmJfcmVhZF9yZWcoVklBU1IsIFNSNDMpOworCQlERUJVR19NU0coS0VSTl9JTkZPICJTUjQzOiVYXG4iLCB0bXApOworCQlpZiAodG1wICYgMHgwMikgeworCQkJdmlhcGFyaW5mby0+Y2hpcF9pbmZvLT5nZnhfY2hpcF9yZXZpc2lvbiA9CisJCQkJQ1g3MDBfUkVWSVNJT05fNzAwTTI7CisJCX0gZWxzZSBpZiAodG1wICYgMHg0MCkgeworCQkJdmlhcGFyaW5mby0+Y2hpcF9pbmZvLT5nZnhfY2hpcF9yZXZpc2lvbiA9CisJCQkJQ1g3MDBfUkVWSVNJT05fNzAwTTsKKwkJfSBlbHNlIHsKKwkJCXZpYXBhcmluZm8tPmNoaXBfaW5mby0+Z2Z4X2NoaXBfcmV2aXNpb24gPQorCQkJCUNYNzAwX1JFVklTSU9OXzcwMDsKKwkJfQorCX0KKworCXBjaV9kZXZfcHV0KHBkZXYpOworfQorCitzdGF0aWMgdm9pZCBpbml0X3RtZHNfY2hpcF9pbmZvKHZvaWQpCit7CisJdmlhZmJfdG1kc190cmFzbWl0dGVyX2lkZW50aWZ5KCk7CisKKwlpZiAoSU5URVJGQUNFX05PTkUgPT0gdmlhcGFyaW5mby0+Y2hpcF9pbmZvLT50bWRzX2NoaXBfaW5mby4KKwkJb3V0cHV0X2ludGVyZmFjZSkgeworCQlzd2l0Y2ggKHZpYXBhcmluZm8tPmNoaXBfaW5mby0+Z2Z4X2NoaXBfbmFtZSkgeworCQljYXNlIFVOSUNIUk9NRV9DWDcwMDoKKwkJCXsKKwkJCQkvKiB3ZSBzaG91bGQgY2hlY2sgc3VwcG9ydCBieSBoYXJkd2FyZSBsYXlvdXQuKi8KKwkJCQlpZiAoKHZpYWZiX2Rpc3BsYXlfaGFyZHdhcmVfbGF5b3V0ID09CisJCQkJICAgICBIV19MQVlPVVRfRFZJX09OTFkpCisJCQkJICAgIHx8ICh2aWFmYl9kaXNwbGF5X2hhcmR3YXJlX2xheW91dCA9PQorCQkJCQlIV19MQVlPVVRfTENEX0RWSSkpIHsKKwkJCQkJdmlhcGFyaW5mby0+Y2hpcF9pbmZvLT50bWRzX2NoaXBfaW5mby4KKwkJCQkJICAgIG91dHB1dF9pbnRlcmZhY2UgPSBJTlRFUkZBQ0VfVE1EUzsKKwkJCQl9IGVsc2UgeworCQkJCQl2aWFwYXJpbmZvLT5jaGlwX2luZm8tPnRtZHNfY2hpcF9pbmZvLgorCQkJCQkJb3V0cHV0X2ludGVyZmFjZSA9CisJCQkJCQlJTlRFUkZBQ0VfTk9ORTsKKwkJCQl9CisJCQkJYnJlYWs7CisJCQl9CisJCWNhc2UgVU5JQ0hST01FX0s4TTg5MDoKKwkJY2FzZSBVTklDSFJPTUVfUDRNOTAwOgorCQljYXNlIFVOSUNIUk9NRV9QNE04OTA6CisJCQkvKiBUTURTIG9uIFBDSUUsIHdlIHNldCBERlBMT1cgYXMgZGVmYXVsdC4gKi8KKwkJCXZpYXBhcmluZm8tPmNoaXBfaW5mby0+dG1kc19jaGlwX2luZm8ub3V0cHV0X2ludGVyZmFjZSA9CisJCQkgICAgSU5URVJGQUNFX0RGUF9MT1c7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXsKKwkJCQkvKiBzZXQgRFZQMSBkZWZhdWx0IGZvciBEVkkgKi8KKwkJCQl2aWFwYXJpbmZvLT5jaGlwX2luZm8tPnRtZHNfY2hpcF9pbmZvCisJCQkJLm91dHB1dF9pbnRlcmZhY2UgPSBJTlRFUkZBQ0VfRFZQMTsKKwkJCX0KKwkJfQorCX0KKworCURFQlVHX01TRyhLRVJOX0lORk8gIlRNRFMgQ2hpcCA9ICVkXG4iLAorCQkgIHZpYXBhcmluZm8tPmNoaXBfaW5mby0+dG1kc19jaGlwX2luZm8udG1kc19jaGlwX25hbWUpOworCXZpYXBhcmluZm8tPnRtZHNfc2V0dGluZ19pbmZvLT5nZXRfZHZpX3NpemVfbWV0aG9kID0KKwkJR0VUX0RWSV9TSVpFX0JZX1ZHQV9CSU9TOworCXZpYWZiX2luaXRfZHZpX3NpemUoKTsKK30KKworc3RhdGljIHZvaWQgaW5pdF9sdmRzX2NoaXBfaW5mbyh2b2lkKQoreworCWlmICh2aWFmYl9sY2RfcGFuZWxfaWQgPiBMQ0RfUEFORUxfSURfTUFYSU1VTSkKKwkJdmlhcGFyaW5mby0+bHZkc19zZXR0aW5nX2luZm8tPmdldF9sY2Rfc2l6ZV9tZXRob2QgPQorCQkgICAgR0VUX0xDRF9TSVpFX0JZX1ZHQV9CSU9TOworCWVsc2UKKwkJdmlhcGFyaW5mby0+bHZkc19zZXR0aW5nX2luZm8tPmdldF9sY2Rfc2l6ZV9tZXRob2QgPQorCQkgICAgR0VUX0xDRF9TSVpFX0JZX1VTRVJfU0VUVElORzsKKworCXZpYWZiX2x2ZHNfdHJhc21pdHRlcl9pZGVudGlmeSgpOworCXZpYWZiX2luaXRfbGNkX3NpemUoKTsKKwl2aWFmYl9pbml0X2x2ZHNfb3V0cHV0X2ludGVyZmFjZSgmdmlhcGFyaW5mby0+Y2hpcF9pbmZvLT5sdmRzX2NoaXBfaW5mbywKKwkJCQkgICB2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mbyk7CisJaWYgKHZpYXBhcmluZm8tPmNoaXBfaW5mby0+bHZkc19jaGlwX2luZm8yLmx2ZHNfY2hpcF9uYW1lKSB7CisJCXZpYWZiX2luaXRfbHZkc19vdXRwdXRfaW50ZXJmYWNlKCZ2aWFwYXJpbmZvLT5jaGlwX2luZm8tPgorCQkJbHZkc19jaGlwX2luZm8yLCB2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mbzIpOworCX0KKwkvKklmIENYNzAwLHR3byBzaW5nZWwgTENELCB3ZSBuZWVkIHRvIHJlYXNzaWduCisJICAgTENEIGludGVyZmFjZSB0byBkaWZmZXJlbnQgTFZEUyBwb3J0ICovCisJaWYgKChVTklDSFJPTUVfQ1g3MDAgPT0gdmlhcGFyaW5mby0+Y2hpcF9pbmZvLT5nZnhfY2hpcF9uYW1lKQorCSAgICAmJiAoSFdfTEFZT1VUX0xDRDFfTENEMiA9PSB2aWFmYl9kaXNwbGF5X2hhcmR3YXJlX2xheW91dCkpIHsKKwkJaWYgKChJTlRFR1JBVEVEX0xWRFMgPT0gdmlhcGFyaW5mby0+Y2hpcF9pbmZvLT5sdmRzX2NoaXBfaW5mby4KKwkJCWx2ZHNfY2hpcF9uYW1lKSAmJiAoSU5URUdSQVRFRF9MVkRTID09CisJCQl2aWFwYXJpbmZvLT5jaGlwX2luZm8tPgorCQkJbHZkc19jaGlwX2luZm8yLmx2ZHNfY2hpcF9uYW1lKSkgeworCQkJdmlhcGFyaW5mby0+Y2hpcF9pbmZvLT5sdmRzX2NoaXBfaW5mby5vdXRwdXRfaW50ZXJmYWNlID0KKwkJCQlJTlRFUkZBQ0VfTFZEUzA7CisJCQl2aWFwYXJpbmZvLT5jaGlwX2luZm8tPmx2ZHNfY2hpcF9pbmZvMi4KKwkJCQlvdXRwdXRfaW50ZXJmYWNlID0KKwkJCSAgICBJTlRFUkZBQ0VfTFZEUzE7CisJCX0KKwl9CisKKwlERUJVR19NU0coS0VSTl9JTkZPICJMVkRTIENoaXAgPSAlZFxuIiwKKwkJICB2aWFwYXJpbmZvLT5jaGlwX2luZm8tPmx2ZHNfY2hpcF9pbmZvLmx2ZHNfY2hpcF9uYW1lKTsKKwlERUJVR19NU0coS0VSTl9JTkZPICJMVkRTMSBvdXRwdXRfaW50ZXJmYWNlID0gJWRcbiIsCisJCSAgdmlhcGFyaW5mby0+Y2hpcF9pbmZvLT5sdmRzX2NoaXBfaW5mby5vdXRwdXRfaW50ZXJmYWNlKTsKKwlERUJVR19NU0coS0VSTl9JTkZPICJMVkRTMiBvdXRwdXRfaW50ZXJmYWNlID0gJWRcbiIsCisJCSAgdmlhcGFyaW5mby0+Y2hpcF9pbmZvLT5sdmRzX2NoaXBfaW5mby5vdXRwdXRfaW50ZXJmYWNlKTsKK30KKwordm9pZCB2aWFmYl9pbml0X2RhYyhpbnQgc2V0X2lnYSkKK3sKKwlpbnQgaTsKKwl1OCB0bXA7CisKKwlpZiAoc2V0X2lnYSA9PSBJR0ExKSB7CisJCS8qIGFjY2VzcyBQcmltYXJ5IERpc3BsYXkncyBMVVQgKi8KKwkJdmlhZmJfd3JpdGVfcmVnX21hc2soU1IxQSwgVklBU1IsIDB4MDAsIEJJVDApOworCQkvKiB0dXJuIG9mZiBMQ0sgKi8KKwkJdmlhZmJfd3JpdGVfcmVnX21hc2soU1IxQiwgVklBU1IsIDB4MDAsIEJJVDcgKyBCSVQ2KTsKKwkJZm9yIChpID0gMDsgaSA8IDI1NjsgaSsrKSB7CisJCQl3cml0ZV9kYWNfcmVnKGksIHBhbExVVF90YWJsZVtpXS5yZWQsCisJCQkJICAgICAgcGFsTFVUX3RhYmxlW2ldLmdyZWVuLAorCQkJCSAgICAgIHBhbExVVF90YWJsZVtpXS5ibHVlKTsKKwkJfQorCQkvKiB0dXJuIG9uIExDSyAqLworCQl2aWFmYl93cml0ZV9yZWdfbWFzayhTUjFCLCBWSUFTUiwgMHhDMCwgQklUNyArIEJJVDYpOworCX0gZWxzZSB7CisJCXRtcCA9IHZpYWZiX3JlYWRfcmVnKFZJQUNSLCBDUjZBKTsKKwkJLyogYWNjZXNzIFNlY29uZGFyeSBEaXNwbGF5J3MgTFVUICovCisJCXZpYWZiX3dyaXRlX3JlZ19tYXNrKENSNkEsIFZJQUNSLCAweDQwLCBCSVQ2KTsKKwkJdmlhZmJfd3JpdGVfcmVnX21hc2soU1IxQSwgVklBU1IsIDB4MDEsIEJJVDApOworCQlmb3IgKGkgPSAwOyBpIDwgMjU2OyBpKyspIHsKKwkJCXdyaXRlX2RhY19yZWcoaSwgcGFsTFVUX3RhYmxlW2ldLnJlZCwKKwkJCQkgICAgICBwYWxMVVRfdGFibGVbaV0uZ3JlZW4sCisJCQkJICAgICAgcGFsTFVUX3RhYmxlW2ldLmJsdWUpOworCQl9CisJCS8qIHNldCBJR0ExIERBQyBmb3IgZGVmYXVsdCAqLworCQl2aWFmYl93cml0ZV9yZWdfbWFzayhTUjFBLCBWSUFTUiwgMHgwMCwgQklUMCk7CisJCXZpYWZiX3dyaXRlX3JlZyhDUjZBLCBWSUFDUiwgdG1wKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGRldmljZV9zY3JlZW5fb2ZmKHZvaWQpCit7CisJLyogdHVybiBvZmYgQ1JUIHNjcmVlbiAoSUdBMSkgKi8KKwl2aWFmYl93cml0ZV9yZWdfbWFzayhTUjAxLCBWSUFTUiwgMHgyMCwgQklUNSk7Cit9CisKK3N0YXRpYyB2b2lkIGRldmljZV9zY3JlZW5fb24odm9pZCkKK3sKKwkvKiB0dXJuIG9uIENSVCBzY3JlZW4gKElHQTEpICovCisJdmlhZmJfd3JpdGVfcmVnX21hc2soU1IwMSwgVklBU1IsIDB4MDAsIEJJVDUpOworfQorCitzdGF0aWMgdm9pZCBzZXRfZGlzcGxheV9jaGFubmVsKHZvaWQpCit7CisJLypJZiB2aWFmYl9MQ0QyX09OLCBvbiBjeDcwMCwgaW50ZXJuYWwgbHZkcydzIGluZm9ybWF0aW9uCisJaXMga2VlcGVkIG9uIGx2ZHNfc2V0dGluZ19pbmZvMiAqLworCWlmICh2aWFmYl9MQ0QyX09OICYmCisJCXZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvMi0+ZGV2aWNlX2xjZF9kdWFsZWRnZSkgeworCQkvKiBGb3IgZHVhbCBjaGFubmVsIExDRDogKi8KKwkJLyogU2V0IHRvIER1YWwgTFZEUyBjaGFubmVsLiAqLworCQl2aWFmYl93cml0ZV9yZWdfbWFzayhDUkQyLCBWSUFDUiwgMHgyMCwgQklUNCArIEJJVDUpOworCX0gZWxzZSBpZiAodmlhZmJfTENEX09OICYmIHZpYWZiX0RWSV9PTikgeworCQkvKiBGb3IgTENEK0RGUDogKi8KKwkJLyogU2V0IHRvIExWRFMxICsgVE1EUyBjaGFubmVsLiAqLworCQl2aWFmYl93cml0ZV9yZWdfbWFzayhDUkQyLCBWSUFDUiwgMHgxMCwgQklUNCArIEJJVDUpOworCX0gZWxzZSBpZiAodmlhZmJfRFZJX09OKSB7CisJCS8qIFNldCB0byBzaW5nbGUgVE1EUyBjaGFubmVsLiAqLworCQl2aWFmYl93cml0ZV9yZWdfbWFzayhDUkQyLCBWSUFDUiwgMHgzMCwgQklUNCArIEJJVDUpOworCX0gZWxzZSBpZiAodmlhZmJfTENEX09OKSB7CisJCWlmICh2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mby0+ZGV2aWNlX2xjZF9kdWFsZWRnZSkgeworCQkJLyogRm9yIGR1YWwgY2hhbm5lbCBMQ0Q6ICovCisJCQkvKiBTZXQgdG8gRHVhbCBMVkRTIGNoYW5uZWwuICovCisJCQl2aWFmYl93cml0ZV9yZWdfbWFzayhDUkQyLCBWSUFDUiwgMHgyMCwgQklUNCArIEJJVDUpOworCQl9IGVsc2UgeworCQkJLyogU2V0IHRvIExWRFMwICsgTFZEUzEgY2hhbm5lbC4gKi8KKwkJCXZpYWZiX3dyaXRlX3JlZ19tYXNrKENSRDIsIFZJQUNSLCAweDAwLCBCSVQ0ICsgQklUNSk7CisJCX0KKwl9Cit9CisKK2ludCB2aWFmYl9zZXRtb2RlKGludCB2bW9kZV9pbmRleCwgaW50IGhvcl9yZXMsIGludCB2ZXJfcmVzLCBpbnQgdmlkZW9fYnBwLAorCWludCB2bW9kZV9pbmRleDEsIGludCBob3JfcmVzMSwgaW50IHZlcl9yZXMxLCBpbnQgdmlkZW9fYnBwMSkKK3sKKwlpbnQgaSwgajsKKwlpbnQgcG9ydDsKKwl1OCB2YWx1ZSwgaW5kZXgsIG1hc2s7CisJc3RydWN0IFZpZGVvTW9kZVRhYmxlICp2bW9kZV90Ymw7CisJc3RydWN0IGNydF9tb2RlX3RhYmxlICpjcnRfdGltaW5nOworCXN0cnVjdCBWaWRlb01vZGVUYWJsZSAqdm1vZGVfdGJsMSA9IE5VTEw7CisJc3RydWN0IGNydF9tb2RlX3RhYmxlICpjcnRfdGltaW5nMSA9IE5VTEw7CisKKwlERUJVR19NU0coS0VSTl9JTkZPICJTZXQgTW9kZSEhXG4iKTsKKwlERUJVR19NU0coS0VSTl9JTkZPCisJCSAgInZtb2RlX2luZGV4PSVkIGhvcl9yZXM9JWQgdmVyX3Jlcz0lZCB2aWRlb19icHA9JWRcbiIsCisJCSAgdm1vZGVfaW5kZXgsIGhvcl9yZXMsIHZlcl9yZXMsIHZpZGVvX2JwcCk7CisKKwlkZXZpY2Vfc2NyZWVuX29mZigpOworCXZtb2RlX3RibCA9ICZDTEUyNjZNb2Rlc1tzZWFyY2hfbW9kZV9zZXR0aW5nKHZtb2RlX2luZGV4KV07CisJY3J0X3RpbWluZyA9IHZtb2RlX3RibC0+Y3J0YzsKKworCWlmICh2aWFmYl9TQU1NX09OID09IDEpIHsKKwkJdm1vZGVfdGJsMSA9ICZDTEUyNjZNb2Rlc1tzZWFyY2hfbW9kZV9zZXR0aW5nKHZtb2RlX2luZGV4MSldOworCQljcnRfdGltaW5nMSA9IHZtb2RlX3RibDEtPmNydGM7CisJfQorCisJaW5iKFZJQVN0YXR1cyk7CisJb3V0YigweDAwLCBWSUFBUik7CisKKwkvKiBXcml0ZSBDb21tb24gU2V0dGluZyBmb3IgVmlkZW8gTW9kZSAqLworCXN3aXRjaCAodmlhcGFyaW5mby0+Y2hpcF9pbmZvLT5nZnhfY2hpcF9uYW1lKSB7CisJY2FzZSBVTklDSFJPTUVfQ0xFMjY2OgorCQl2aWFmYl93cml0ZV9yZWd4KENMRTI2Nl9Nb2RlWHJlZ3MsIE5VTV9UT1RBTF9DTEUyNjZfTW9kZVhyZWdzKTsKKwkJYnJlYWs7CisKKwljYXNlIFVOSUNIUk9NRV9LNDAwOgorCQl2aWFmYl93cml0ZV9yZWd4KEtNNDAwX01vZGVYcmVncywgTlVNX1RPVEFMX0tNNDAwX01vZGVYcmVncyk7CisJCWJyZWFrOworCisJY2FzZSBVTklDSFJPTUVfSzgwMDoKKwljYXNlIFVOSUNIUk9NRV9QTTgwMDoKKwkJdmlhZmJfd3JpdGVfcmVneChDTjQwMF9Nb2RlWHJlZ3MsIE5VTV9UT1RBTF9DTjQwMF9Nb2RlWHJlZ3MpOworCQlicmVhazsKKworCWNhc2UgVU5JQ0hST01FX0NONzAwOgorCWNhc2UgVU5JQ0hST01FX0s4TTg5MDoKKwljYXNlIFVOSUNIUk9NRV9QNE04OTA6CisJY2FzZSBVTklDSFJPTUVfUDRNOTAwOgorCQl2aWFmYl93cml0ZV9yZWd4KENONzAwX01vZGVYcmVncywgTlVNX1RPVEFMX0NONzAwX01vZGVYcmVncyk7CisJCWJyZWFrOworCisJY2FzZSBVTklDSFJPTUVfQ1g3MDA6CisJCXZpYWZiX3dyaXRlX3JlZ3goQ1g3MDBfTW9kZVhyZWdzLCBOVU1fVE9UQUxfQ1g3MDBfTW9kZVhyZWdzKTsKKworCWNhc2UgVU5JQ0hST01FX1ZYODAwOgorCQl2aWFmYl93cml0ZV9yZWd4KFZYODAwX01vZGVYcmVncywgTlVNX1RPVEFMX1ZYODAwX01vZGVYcmVncyk7CisKKwkJYnJlYWs7CisJfQorCisJZGV2aWNlX29mZigpOworCisJLyogRmlsbCBWUElUIFBhcmFtZXRlcnMgKi8KKwkvKiBXcml0ZSBNaXNjIFJlZ2lzdGVyICovCisJb3V0YihWUElULk1pc2MsIFZJQVdNaXNjKTsKKworCS8qIFdyaXRlIFNlcXVlbmNlciAqLworCWZvciAoaSA9IDE7IGkgPD0gU3RkU1I7IGkrKykgeworCQlvdXRiKGksIFZJQVNSKTsKKwkJb3V0YihWUElULlNSW2kgLSAxXSwgVklBU1IgKyAxKTsKKwl9CisKKwl2aWFmYl9zZXRfc3RhcnRfYWRkcigpOworCXZpYWZiX3NldF9pZ2FfcGF0aCgpOworCisJLyogV3JpdGUgQ1JUQyAqLworCXZpYWZiX2ZpbGxfY3J0Y190aW1pbmcoY3J0X3RpbWluZywgdm1vZGVfaW5kZXgsIHZpZGVvX2JwcCAvIDgsIElHQTEpOworCisJLyogV3JpdGUgR3JhcGhpYyBDb250cm9sbGVyICovCisJZm9yIChpID0gMDsgaSA8IFN0ZEdSOyBpKyspIHsKKwkJb3V0YihpLCBWSUFHUik7CisJCW91dGIoVlBJVC5HUltpXSwgVklBR1IgKyAxKTsKKwl9CisKKwkvKiBXcml0ZSBBdHRyaWJ1dGUgQ29udHJvbGxlciAqLworCWZvciAoaSA9IDA7IGkgPCBTdGRBUjsgaSsrKSB7CisJCWluYihWSUFTdGF0dXMpOworCQlvdXRiKGksIFZJQUFSKTsKKwkJb3V0YihWUElULkFSW2ldLCBWSUFBUik7CisJfQorCisJaW5iKFZJQVN0YXR1cyk7CisJb3V0YigweDIwLCBWSUFBUik7CisKKwkvKiBVcGRhdGUgUGF0Y2ggUmVnaXN0ZXIgKi8KKworCWlmICgodmlhcGFyaW5mby0+Y2hpcF9pbmZvLT5nZnhfY2hpcF9uYW1lID09IFVOSUNIUk9NRV9DTEUyNjYpCisJICAgIHx8ICh2aWFwYXJpbmZvLT5jaGlwX2luZm8tPmdmeF9jaGlwX25hbWUgPT0gVU5JQ0hST01FX0s0MDApKSB7CisJCWZvciAoaSA9IDA7IGkgPCBOVU1fVE9UQUxfUEFUQ0hfTU9ERTsgaSsrKSB7CisJCQlpZiAocmVzX3BhdGNoX3RhYmxlW2ldLm1vZGVfaW5kZXggPT0gdm1vZGVfaW5kZXgpIHsKKwkJCQlmb3IgKGogPSAwOworCQkJCSAgICAgaiA8IHJlc19wYXRjaF90YWJsZVtpXS50YWJsZV9sZW5ndGg7IGorKykgeworCQkJCQlpbmRleCA9CisJCQkJCSAgICByZXNfcGF0Y2hfdGFibGVbaV0uCisJCQkJCSAgICBpb19yZWdfdGFibGVbal0uaW5kZXg7CisJCQkJCXBvcnQgPQorCQkJCQkgICAgcmVzX3BhdGNoX3RhYmxlW2ldLgorCQkJCQkgICAgaW9fcmVnX3RhYmxlW2pdLnBvcnQ7CisJCQkJCXZhbHVlID0KKwkJCQkJICAgIHJlc19wYXRjaF90YWJsZVtpXS4KKwkJCQkJICAgIGlvX3JlZ190YWJsZVtqXS52YWx1ZTsKKwkJCQkJbWFzayA9CisJCQkJCSAgICByZXNfcGF0Y2hfdGFibGVbaV0uCisJCQkJCSAgICBpb19yZWdfdGFibGVbal0ubWFzazsKKwkJCQkJdmlhZmJfd3JpdGVfcmVnX21hc2soaW5kZXgsIHBvcnQsIHZhbHVlLAorCQkJCQkJICAgICAgIG1hc2spOworCQkJCX0KKwkJCX0KKwkJfQorCX0KKworCWlmICh2aWFmYl9TQU1NX09OID09IDEpIHsKKwkJaWYgKCh2aWFwYXJpbmZvLT5jaGlwX2luZm8tPmdmeF9jaGlwX25hbWUgPT0gVU5JQ0hST01FX0NMRTI2NikKKwkJICAgIHx8ICh2aWFwYXJpbmZvLT5jaGlwX2luZm8tPmdmeF9jaGlwX25hbWUgPT0KKwkJICAgIFVOSUNIUk9NRV9LNDAwKSkgeworCQkJZm9yIChpID0gMDsgaSA8IE5VTV9UT1RBTF9QQVRDSF9NT0RFOyBpKyspIHsKKwkJCQlpZiAocmVzX3BhdGNoX3RhYmxlW2ldLm1vZGVfaW5kZXggPT0KKwkJCQkgICAgdm1vZGVfaW5kZXgxKSB7CisJCQkJCWZvciAoaiA9IDA7CisJCQkJCSAgICAgaiA8CisJCQkJCSAgICAgcmVzX3BhdGNoX3RhYmxlW2ldLgorCQkJCQkgICAgIHRhYmxlX2xlbmd0aDsgaisrKSB7CisJCQkJCQlpbmRleCA9CisJCQkJCQkgICAgcmVzX3BhdGNoX3RhYmxlW2ldLgorCQkJCQkJICAgIGlvX3JlZ190YWJsZVtqXS5pbmRleDsKKwkJCQkJCXBvcnQgPQorCQkJCQkJICAgIHJlc19wYXRjaF90YWJsZVtpXS4KKwkJCQkJCSAgICBpb19yZWdfdGFibGVbal0ucG9ydDsKKwkJCQkJCXZhbHVlID0KKwkJCQkJCSAgICByZXNfcGF0Y2hfdGFibGVbaV0uCisJCQkJCQkgICAgaW9fcmVnX3RhYmxlW2pdLnZhbHVlOworCQkJCQkJbWFzayA9CisJCQkJCQkgICAgcmVzX3BhdGNoX3RhYmxlW2ldLgorCQkJCQkJICAgIGlvX3JlZ190YWJsZVtqXS5tYXNrOworCQkJCQkJdmlhZmJfd3JpdGVfcmVnX21hc2soaW5kZXgsCisJCQkJCQkJcG9ydCwgdmFsdWUsIG1hc2spOworCQkJCQl9CisJCQkJfQorCQkJfQorCQl9CisJfQorCisJLyogVXBkYXRlIFJlZnJlc2ggUmF0ZSBTZXR0aW5nICovCisKKwkvKiBDbGVhciBPbiBTY3JlZW4gKi8KKworCS8qIENSVCBzZXQgbW9kZSAqLworCWlmICh2aWFmYl9DUlRfT04pIHsKKwkJaWYgKHZpYWZiX1NBTU1fT04gJiYgKHZpYXBhcmluZm8tPmNydF9zZXR0aW5nX2luZm8tPmlnYV9wYXRoID09CisJCQlJR0EyKSkgeworCQkJdmlhZmJfZmlsbF9jcnRjX3RpbWluZyhjcnRfdGltaW5nMSwgdm1vZGVfaW5kZXgxLAorCQkJCXZpZGVvX2JwcDEgLyA4LAorCQkJCXZpYXBhcmluZm8tPmNydF9zZXR0aW5nX2luZm8tPmlnYV9wYXRoKTsKKwkJfSBlbHNlIHsKKwkJCXZpYWZiX2ZpbGxfY3J0Y190aW1pbmcoY3J0X3RpbWluZywgdm1vZGVfaW5kZXgsCisJCQkJdmlkZW9fYnBwIC8gOCwKKwkJCQl2aWFwYXJpbmZvLT5jcnRfc2V0dGluZ19pbmZvLT5pZ2FfcGF0aCk7CisJCX0KKworCQlzZXRfY3J0X291dHB1dF9wYXRoKHZpYXBhcmluZm8tPmNydF9zZXR0aW5nX2luZm8tPmlnYV9wYXRoKTsKKworCQkvKiBQYXRjaCBpZiBzZXRfaHJlcyBpcyBub3QgOCBhbGlnbm1lbnQgKDEzNjYpIHRvIHZpYWZiX3NldG1vZGUKKwkJdG8gOCBhbGlnbm1lbnQgKDEzNjgpLHRoZXJlIGlzIHNldmVyYWwgcGl4ZWxzICgyIHBpeGVscykKKwkJb24gcmlnaHQgc2lkZSBvZiBzY3JlZW4uICovCisJCWlmIChob3JfcmVzICUgOCkgeworCQkJdmlhZmJfdW5sb2NrX2NydCgpOworCQkJdmlhZmJfd3JpdGVfcmVnKENSMDIsIFZJQUNSLAorCQkJCXZpYWZiX3JlYWRfcmVnKFZJQUNSLCBDUjAyKSAtIDEpOworCQkJdmlhZmJfbG9ja19jcnQoKTsKKwkJfQorCX0KKworCWlmICh2aWFmYl9EVklfT04pIHsKKwkJaWYgKHZpYWZiX1NBTU1fT04gJiYKKwkJCSh2aWFwYXJpbmZvLT50bWRzX3NldHRpbmdfaW5mby0+aWdhX3BhdGggPT0gSUdBMikpIHsKKwkJCXZpYWZiX2R2aV9zZXRfbW9kZSh2aWFmYl9nZXRfbW9kZV9pbmRleAorCQkJCSAgICAgKHZpYXBhcmluZm8tPnRtZHNfc2V0dGluZ19pbmZvLT5oX2FjdGl2ZSwKKwkJCQkgICAgICB2aWFwYXJpbmZvLT50bWRzX3NldHRpbmdfaW5mby0+CisJCQkJICAgICAgdl9hY3RpdmUsIDEpLAorCQkJCSAgICAgdmlkZW9fYnBwMSwgdmlhcGFyaW5mby0+CisJCQkJICAgICB0bWRzX3NldHRpbmdfaW5mby0+aWdhX3BhdGgpOworCQl9IGVsc2UgeworCQkJdmlhZmJfZHZpX3NldF9tb2RlKHZpYWZiX2dldF9tb2RlX2luZGV4CisJCQkJICAgICAodmlhcGFyaW5mby0+dG1kc19zZXR0aW5nX2luZm8tPmhfYWN0aXZlLAorCQkJCSAgICAgIHZpYXBhcmluZm8tPgorCQkJCSAgICAgIHRtZHNfc2V0dGluZ19pbmZvLT52X2FjdGl2ZSwgMCksCisJCQkJICAgICB2aWRlb19icHAsIHZpYXBhcmluZm8tPgorCQkJCSAgICAgdG1kc19zZXR0aW5nX2luZm8tPmlnYV9wYXRoKTsKKwkJfQorCX0KKworCWlmICh2aWFmYl9MQ0RfT04pIHsKKwkJaWYgKHZpYWZiX1NBTU1fT04gJiYKKwkJCSh2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mby0+aWdhX3BhdGggPT0gSUdBMikpIHsKKwkJCXZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvLT5icHAgPSB2aWRlb19icHAxOworCQkJdmlhZmJfbGNkX3NldF9tb2RlKGNydF90aW1pbmcxLCB2aWFwYXJpbmZvLT4KKwkJCQlsdmRzX3NldHRpbmdfaW5mbywKKwkJCQkgICAgICZ2aWFwYXJpbmZvLT5jaGlwX2luZm8tPmx2ZHNfY2hpcF9pbmZvKTsKKwkJfSBlbHNlIHsKKwkJCS8qIElHQTEgZG9lc24ndCBoYXZlIExDRCBzY2FsaW5nLCBzbyBzZXQgaXQgY2VudGVyLiAqLworCQkJaWYgKHZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvLT5pZ2FfcGF0aCA9PSBJR0ExKSB7CisJCQkJdmlhcGFyaW5mby0+bHZkc19zZXR0aW5nX2luZm8tPmRpc3BsYXlfbWV0aG9kID0KKwkJCQkgICAgTENEX0NFTlRFUklORzsKKwkJCX0KKwkJCXZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvLT5icHAgPSB2aWRlb19icHA7CisJCQl2aWFmYl9sY2Rfc2V0X21vZGUoY3J0X3RpbWluZywgdmlhcGFyaW5mby0+CisJCQkJbHZkc19zZXR0aW5nX2luZm8sCisJCQkJICAgICAmdmlhcGFyaW5mby0+Y2hpcF9pbmZvLT5sdmRzX2NoaXBfaW5mbyk7CisJCX0KKwl9CisJaWYgKHZpYWZiX0xDRDJfT04pIHsKKwkJaWYgKHZpYWZiX1NBTU1fT04gJiYKKwkJCSh2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mbzItPmlnYV9wYXRoID09IElHQTIpKSB7CisJCQl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mbzItPmJwcCA9IHZpZGVvX2JwcDE7CisJCQl2aWFmYl9sY2Rfc2V0X21vZGUoY3J0X3RpbWluZzEsIHZpYXBhcmluZm8tPgorCQkJCWx2ZHNfc2V0dGluZ19pbmZvMiwKKwkJCQkgICAgICZ2aWFwYXJpbmZvLT5jaGlwX2luZm8tPmx2ZHNfY2hpcF9pbmZvMik7CisJCX0gZWxzZSB7CisJCQkvKiBJR0ExIGRvZXNuJ3QgaGF2ZSBMQ0Qgc2NhbGluZywgc28gc2V0IGl0IGNlbnRlci4gKi8KKwkJCWlmICh2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mbzItPmlnYV9wYXRoID09IElHQTEpIHsKKwkJCQl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mbzItPmRpc3BsYXlfbWV0aG9kID0KKwkJCQkgICAgTENEX0NFTlRFUklORzsKKwkJCX0KKwkJCXZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvMi0+YnBwID0gdmlkZW9fYnBwOworCQkJdmlhZmJfbGNkX3NldF9tb2RlKGNydF90aW1pbmcsIHZpYXBhcmluZm8tPgorCQkJCWx2ZHNfc2V0dGluZ19pbmZvMiwKKwkJCQkgICAgICZ2aWFwYXJpbmZvLT5jaGlwX2luZm8tPmx2ZHNfY2hpcF9pbmZvMik7CisJCX0KKwl9CisKKwlpZiAoKHZpYXBhcmluZm8tPmNoaXBfaW5mby0+Z2Z4X2NoaXBfbmFtZSA9PSBVTklDSFJPTUVfQ1g3MDApCisJICAgICYmICh2aWFmYl9MQ0RfT04gfHwgdmlhZmJfRFZJX09OKSkKKwkJc2V0X2Rpc3BsYXlfY2hhbm5lbCgpOworCisJLyogSWYgc2V0IG1vZGUgbm9ybWFsbHksIHNhdmUgcmVzb2x1dGlvbiBpbmZvcm1hdGlvbiBmb3IgaG90LXBsdWcgLiAqLworCWlmICghdmlhZmJfaG90cGx1ZykgeworCQl2aWFmYl9ob3RwbHVnX1hyZXMgPSBob3JfcmVzOworCQl2aWFmYl9ob3RwbHVnX1lyZXMgPSB2ZXJfcmVzOworCQl2aWFmYl9ob3RwbHVnX2JwcCA9IHZpZGVvX2JwcDsKKwkJdmlhZmJfaG90cGx1Z19yZWZyZXNoID0gdmlhZmJfcmVmcmVzaDsKKworCQlpZiAodmlhZmJfRFZJX09OKQorCQkJdmlhZmJfRGV2aWNlU3RhdHVzID0gRFZJX0RldmljZTsKKwkJZWxzZQorCQkJdmlhZmJfRGV2aWNlU3RhdHVzID0gQ1JUX0RldmljZTsKKwl9CisJZGV2aWNlX29uKCk7CisKKwlpZiAodmlhZmJfU0FNTV9PTiA9PSAxKQorCQl2aWFmYl93cml0ZV9yZWdfbWFzayhDUjZBLCBWSUFDUiwgMHhDMCwgQklUNiArIEJJVDcpOworCisJZGV2aWNlX3NjcmVlbl9vbigpOworCXJldHVybiAxOworfQorCitpbnQgdmlhZmJfZ2V0X3BpeGNsb2NrKGludCBocmVzLCBpbnQgdnJlcywgaW50IHZtb2RlX3JlZnJlc2gpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgTlVNX1RPVEFMX1JFU19NQVBfUkVGUkVTSDsgaSsrKSB7CisJCWlmICgoaHJlcyA9PSByZXNfbWFwX3JlZnJlc2hfdGJsW2ldLmhyZXMpCisJCSAgICAmJiAodnJlcyA9PSByZXNfbWFwX3JlZnJlc2hfdGJsW2ldLnZyZXMpCisJCSAgICAmJiAodm1vZGVfcmVmcmVzaCA9PSByZXNfbWFwX3JlZnJlc2hfdGJsW2ldLnZtb2RlX3JlZnJlc2gpKQorCQkJcmV0dXJuIHJlc19tYXBfcmVmcmVzaF90YmxbaV0ucGl4Y2xvY2s7CisJfQorCXJldHVybiBSRVNfNjQwWDQ4MF82MEhaX1BJWENMT0NLOworCit9CisKK2ludCB2aWFmYl9nZXRfcmVmcmVzaChpbnQgaHJlcywgaW50IHZyZXMsIHUzMiBsb25nX3JlZnJlc2gpCit7CisjZGVmaW5lIFJFRlJFU0hfVE9MRVJBTkNFIDMKKwlpbnQgaSwgbmVhcmVzdCA9IC0xLCBkaWZmID0gUkVGUkVTSF9UT0xFUkFOQ0U7CisJZm9yIChpID0gMDsgaSA8IE5VTV9UT1RBTF9SRVNfTUFQX1JFRlJFU0g7IGkrKykgeworCQlpZiAoKGhyZXMgPT0gcmVzX21hcF9yZWZyZXNoX3RibFtpXS5ocmVzKQorCQkgICAgJiYgKHZyZXMgPT0gcmVzX21hcF9yZWZyZXNoX3RibFtpXS52cmVzKQorCQkgICAgJiYgKGRpZmYgPiAoYWJzKGxvbmdfcmVmcmVzaCAtCisJCSAgICByZXNfbWFwX3JlZnJlc2hfdGJsW2ldLnZtb2RlX3JlZnJlc2gpKSkpIHsKKwkJCWRpZmYgPSBhYnMobG9uZ19yZWZyZXNoIC0gcmVzX21hcF9yZWZyZXNoX3RibFtpXS4KKwkJCQl2bW9kZV9yZWZyZXNoKTsKKwkJCW5lYXJlc3QgPSBpOworCQl9CisJfQorI3VuZGVmIFJFRlJFU0hfVE9MRVJBTkNFCisJaWYgKG5lYXJlc3QgPiAwKQorCQlyZXR1cm4gcmVzX21hcF9yZWZyZXNoX3RibFtuZWFyZXN0XS52bW9kZV9yZWZyZXNoOworCXJldHVybiA2MDsKK30KKworc3RhdGljIHZvaWQgZGV2aWNlX29mZih2b2lkKQoreworCXZpYWZiX2NydF9kaXNhYmxlKCk7CisJdmlhZmJfZHZpX2Rpc2FibGUoKTsKKwl2aWFmYl9sY2RfZGlzYWJsZSgpOworfQorCitzdGF0aWMgdm9pZCBkZXZpY2Vfb24odm9pZCkKK3sKKwlpZiAodmlhZmJfQ1JUX09OID09IDEpCisJCXZpYWZiX2NydF9lbmFibGUoKTsKKwlpZiAodmlhZmJfRFZJX09OID09IDEpCisJCXZpYWZiX2R2aV9lbmFibGUoKTsKKwlpZiAodmlhZmJfTENEX09OID09IDEpCisJCXZpYWZiX2xjZF9lbmFibGUoKTsKK30KKwordm9pZCB2aWFmYl9jcnRfZGlzYWJsZSh2b2lkKQoreworCXZpYWZiX3dyaXRlX3JlZ19tYXNrKENSMzYsIFZJQUNSLCBCSVQ1ICsgQklUNCwgQklUNSArIEJJVDQpOworfQorCit2b2lkIHZpYWZiX2NydF9lbmFibGUodm9pZCkKK3sKKwl2aWFmYl93cml0ZV9yZWdfbWFzayhDUjM2LCBWSUFDUiwgMHgwLCBCSVQ1ICsgQklUNCk7Cit9CisKK3ZvaWQgdmlhZmJfZ2V0X21taW9faW5mbyh1bnNpZ25lZCBsb25nICptbWlvX2Jhc2UsCisJdW5zaWduZWQgbG9uZyAqbW1pb19sZW4pCit7CisJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBOVUxMOworCXUzMiB2ZW5kb3IsIGRldmljZTsKKwl1MzIgaTsKKworCWZvciAoaSA9IDA7IHBjaWlkbGlzdFtpXS52ZW5kb3IgIT0gMDsgaSsrKQorCQlpZiAodmlhcGFyaW5mby0+Y2hpcF9pbmZvLT5nZnhfY2hpcF9uYW1lID09CisJCQlwY2lpZGxpc3RbaV0uY2hpcF9pbmRleCkKKwkJCWJyZWFrOworCisJaWYgKCFwY2lpZGxpc3RbaV0udmVuZG9yKQorCQlyZXR1cm4gOworCisJdmVuZG9yID0gcGNpaWRsaXN0W2ldLnZlbmRvcjsKKwlkZXZpY2UgPSBwY2lpZGxpc3RbaV0uZGV2aWNlOworCisJcGRldiA9IHBjaV9nZXRfZGV2aWNlKHZlbmRvciwgZGV2aWNlLCBOVUxMKTsKKworCWlmICghcGRldikgeworCQkqbW1pb19iYXNlID0gMDsKKwkJKm1taW9fbGVuID0gMDsKKwkJcmV0dXJuIDsKKwl9CisKKwkqbW1pb19iYXNlID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIDEpOworCSptbWlvX2xlbiA9IHBjaV9yZXNvdXJjZV9sZW4ocGRldiwgMSk7CisKKwlwY2lfZGV2X3B1dChwZGV2KTsKK30KKworc3RhdGljIHZvaWQgZW5hYmxlX3NlY29uZF9kaXNwbGF5X2NoYW5uZWwodm9pZCkKK3sKKwkvKiB0byBlbmFibGUgc2Vjb25kIGRpc3BsYXkgY2hhbm5lbC4gKi8KKwl2aWFmYl93cml0ZV9yZWdfbWFzayhDUjZBLCBWSUFDUiwgMHgwMCwgQklUNik7CisJdmlhZmJfd3JpdGVfcmVnX21hc2soQ1I2QSwgVklBQ1IsIEJJVDcsIEJJVDcpOworCXZpYWZiX3dyaXRlX3JlZ19tYXNrKENSNkEsIFZJQUNSLCBCSVQ2LCBCSVQ2KTsKK30KKworc3RhdGljIHZvaWQgZGlzYWJsZV9zZWNvbmRfZGlzcGxheV9jaGFubmVsKHZvaWQpCit7CisJLyogdG8gZGlzYWJsZSBzZWNvbmQgZGlzcGxheSBjaGFubmVsLiAqLworCXZpYWZiX3dyaXRlX3JlZ19tYXNrKENSNkEsIFZJQUNSLCAweDAwLCBCSVQ2KTsKKwl2aWFmYl93cml0ZV9yZWdfbWFzayhDUjZBLCBWSUFDUiwgMHgwMCwgQklUNyk7CisJdmlhZmJfd3JpdGVfcmVnX21hc2soQ1I2QSwgVklBQ1IsIEJJVDYsIEJJVDYpOworfQorCit2b2lkIHZpYWZiX2dldF9mYl9pbmZvKHVuc2lnbmVkIGludCAqZmJfYmFzZSwgdW5zaWduZWQgaW50ICpmYl9sZW4pCit7CisJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBOVUxMOworCXUzMiB2ZW5kb3IsIGRldmljZTsKKwl1MzIgaTsKKworCWZvciAoaSA9IDA7IHBjaWlkbGlzdFtpXS52ZW5kb3IgIT0gMDsgaSsrKQorCQlpZiAodmlhcGFyaW5mby0+Y2hpcF9pbmZvLT5nZnhfY2hpcF9uYW1lID09CisJCQlwY2lpZGxpc3RbaV0uY2hpcF9pbmRleCkKKwkJCWJyZWFrOworCisJaWYgKCFwY2lpZGxpc3RbaV0udmVuZG9yKQorCQlyZXR1cm4gOworCisJdmVuZG9yID0gcGNpaWRsaXN0W2ldLnZlbmRvcjsKKwlkZXZpY2UgPSBwY2lpZGxpc3RbaV0uZGV2aWNlOworCisJcGRldiA9IHBjaV9nZXRfZGV2aWNlKHZlbmRvciwgZGV2aWNlLCBOVUxMKTsKKworCWlmICghcGRldikgeworCQkqZmJfYmFzZSA9IHZpYWZiX3JlYWRfcmVnKFZJQVNSLCBTUjMwKSA8PCAyNDsKKwkJKmZiX2xlbiA9IHZpYWZiX2dldF9tZW1zaXplKCk7CisJCURFQlVHX01TRyhLRVJOX0lORk8gIkdldCBGQiBpbmZvIGZyb20gU1IzMCFcbiIpOworCQlERUJVR19NU0coS0VSTl9JTkZPICJmYl9iYXNlID0gJTA4eFxuIiwgKmZiX2Jhc2UpOworCQlERUJVR19NU0coS0VSTl9JTkZPICJmYl9sZW4gPSAlMDh4XG4iLCAqZmJfbGVuKTsKKwkJcmV0dXJuIDsKKwl9CisKKwkqZmJfYmFzZSA9ICh1bnNpZ25lZCBpbnQpcGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIDApOworCSpmYl9sZW4gPSBnZXRfZmJfc2l6ZV9mcm9tX3BjaSgpOworCURFQlVHX01TRyhLRVJOX0lORk8gIkdldCBGQiBpbmZvIGZyb20gUENJIHN5c3RlbSFcbiIpOworCURFQlVHX01TRyhLRVJOX0lORk8gImZiX2Jhc2UgPSAlMDh4XG4iLCAqZmJfYmFzZSk7CisJREVCVUdfTVNHKEtFUk5fSU5GTyAiZmJfbGVuID0gJTA4eFxuIiwgKmZiX2xlbik7CisKKwlwY2lfZGV2X3B1dChwZGV2KTsKK30KKworc3RhdGljIGludCBnZXRfZmJfc2l6ZV9mcm9tX3BjaSh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgY29uZmlnaWQsIGRldmljZWlkLCBGQlNpemUgPSAwOworCWludCBWaWRlb01lbVNpemU7CisJaW50IERldmljZUZvdW5kID0gZmFsc2U7CisKKwlmb3IgKGNvbmZpZ2lkID0gMHg4MDAwMDAwMDsgY29uZmlnaWQgPCAweDgwMDEwODAwOyBjb25maWdpZCArPSAweDEwMCkgeworCQlvdXRsKGNvbmZpZ2lkLCAodW5zaWduZWQgbG9uZykweENGOCk7CisJCWRldmljZWlkID0gKGlubCgodW5zaWduZWQgbG9uZykweENGQykgPj4gMTYpICYgMHhmZmZmOworCisJCXN3aXRjaCAoZGV2aWNlaWQpIHsKKwkJY2FzZSBDTEUyNjY6CisJCWNhc2UgS000MDA6CisJCQlvdXRsKGNvbmZpZ2lkICsgMHhFMCwgKHVuc2lnbmVkIGxvbmcpMHhDRjgpOworCQkJRkJTaXplID0gaW5sKCh1bnNpZ25lZCBsb25nKTB4Q0ZDKTsKKwkJCURldmljZUZvdW5kID0gdHJ1ZTsJLyogRm91bmQgZGV2aWNlIGlkICovCisJCQlicmVhazsKKworCQljYXNlIENONDAwX0ZVTkNUSU9OMzoKKwkJY2FzZSBDTjcwMF9GVU5DVElPTjM6CisJCWNhc2UgQ1g3MDBfRlVOQ1RJT04zOgorCQljYXNlIEtNODAwX0ZVTkNUSU9OMzoKKwkJY2FzZSBLTTg5MF9GVU5DVElPTjM6CisJCWNhc2UgUDRNODkwX0ZVTkNUSU9OMzoKKwkJY2FzZSBQNE05MDBfRlVOQ1RJT04zOgorCQljYXNlIFZYODAwX0ZVTkNUSU9OMzoKKwkJCS8qY2FzZSBDTjc1MF9GVU5DVElPTjM6ICovCisJCQlvdXRsKGNvbmZpZ2lkICsgMHhBMCwgKHVuc2lnbmVkIGxvbmcpMHhDRjgpOworCQkJRkJTaXplID0gaW5sKCh1bnNpZ25lZCBsb25nKTB4Q0ZDKTsKKwkJCURldmljZUZvdW5kID0gdHJ1ZTsJLyogRm91bmQgZGV2aWNlIGlkICovCisJCQlicmVhazsKKworCQlkZWZhdWx0OgorCQkJYnJlYWs7CisJCX0KKworCQlpZiAoRGV2aWNlRm91bmQpCisJCQlicmVhazsKKwl9CisKKwlERUJVR19NU0coS0VSTl9JTkZPICJEZXZpY2UgSUQgPSAlbHhcbiIsIGRldmljZWlkKTsKKworCUZCU2l6ZSA9IEZCU2l6ZSAmIDB4MDAwMDcwMDA7CisJREVCVUdfTVNHKEtFUk5fSU5GTyAiRkIgU2l6ZSA9ICV4XG4iLCBGQlNpemUpOworCisJaWYgKHZpYXBhcmluZm8tPmNoaXBfaW5mby0+Z2Z4X2NoaXBfbmFtZSA8IFVOSUNIUk9NRV9DWDcwMCkgeworCQlzd2l0Y2ggKEZCU2l6ZSkgeworCQljYXNlIDB4MDAwMDQwMDA6CisJCQlWaWRlb01lbVNpemUgPSAoMTYgPDwgMjApOwkvKjE2TSAqLworCQkJYnJlYWs7CisKKwkJY2FzZSAweDAwMDA1MDAwOgorCQkJVmlkZW9NZW1TaXplID0gKDMyIDw8IDIwKTsJLyozMk0gKi8KKwkJCWJyZWFrOworCisJCWNhc2UgMHgwMDAwNjAwMDoKKwkJCVZpZGVvTWVtU2l6ZSA9ICg2NCA8PCAyMCk7CS8qNjRNICovCisJCQlicmVhazsKKworCQlkZWZhdWx0OgorCQkJVmlkZW9NZW1TaXplID0gKDMyIDw8IDIwKTsJLyozMk0gKi8KKwkJCWJyZWFrOworCQl9CisJfSBlbHNlIHsKKwkJc3dpdGNoIChGQlNpemUpIHsKKwkJY2FzZSAweDAwMDAxMDAwOgorCQkJVmlkZW9NZW1TaXplID0gKDggPDwgMjApOwkvKjhNICovCisJCQlicmVhazsKKworCQljYXNlIDB4MDAwMDIwMDA6CisJCQlWaWRlb01lbVNpemUgPSAoMTYgPDwgMjApOwkvKjE2TSAqLworCQkJYnJlYWs7CisKKwkJY2FzZSAweDAwMDAzMDAwOgorCQkJVmlkZW9NZW1TaXplID0gKDMyIDw8IDIwKTsJLyozMk0gKi8KKwkJCWJyZWFrOworCisJCWNhc2UgMHgwMDAwNDAwMDoKKwkJCVZpZGVvTWVtU2l6ZSA9ICg2NCA8PCAyMCk7CS8qNjRNICovCisJCQlicmVhazsKKworCQljYXNlIDB4MDAwMDUwMDA6CisJCQlWaWRlb01lbVNpemUgPSAoMTI4IDw8IDIwKTsJLyoxMjhNICovCisJCQlicmVhazsKKworCQljYXNlIDB4MDAwMDYwMDA6CisJCQlWaWRlb01lbVNpemUgPSAoMjU2IDw8IDIwKTsJLyoyNTZNICovCisJCQlicmVhazsKKworCQlkZWZhdWx0OgorCQkJVmlkZW9NZW1TaXplID0gKDMyIDw8IDIwKTsJLyozMk0gKi8KKwkJCWJyZWFrOworCQl9CisJfQorCisJcmV0dXJuIFZpZGVvTWVtU2l6ZTsKK30KKwordm9pZCB2aWFmYl9zZXRfZHBhX2dmeChpbnQgb3V0cHV0X2ludGVyZmFjZSwgc3RydWN0IEdGWF9EUEFfU0VUVElOR1wKKwkJCQkJKnBfZ2Z4X2RwYV9zZXR0aW5nKQoreworCXN3aXRjaCAob3V0cHV0X2ludGVyZmFjZSkgeworCWNhc2UgSU5URVJGQUNFX0RWUDA6CisJCXsKKwkJCS8qIERWUDAgQ2xvY2sgUG9sYXJpdHkgYW5kIEFkanVzdDogKi8KKwkJCXZpYWZiX3dyaXRlX3JlZ19tYXNrKENSOTYsIFZJQUNSLAorCQkJCSAgICAgICBwX2dmeF9kcGFfc2V0dGluZy0+RFZQMCwgMHgwRik7CisKKwkJCS8qIERWUDAgQ2xvY2sgYW5kIERhdGEgUGFkcyBEcml2aW5nOiAqLworCQkJdmlhZmJfd3JpdGVfcmVnX21hc2soU1IxRSwgVklBU1IsCisJCQkJICAgICAgIHBfZ2Z4X2RwYV9zZXR0aW5nLT5EVlAwQ2xvY2tEcmlfUywgQklUMik7CisJCQl2aWFmYl93cml0ZV9yZWdfbWFzayhTUjJBLCBWSUFTUiwKKwkJCQkgICAgICAgcF9nZnhfZHBhX3NldHRpbmctPkRWUDBDbG9ja0RyaV9TMSwKKwkJCQkgICAgICAgQklUNCk7CisJCQl2aWFmYl93cml0ZV9yZWdfbWFzayhTUjFCLCBWSUFTUiwKKwkJCQkgICAgICAgcF9nZnhfZHBhX3NldHRpbmctPkRWUDBEYXRhRHJpX1MsIEJJVDEpOworCQkJdmlhZmJfd3JpdGVfcmVnX21hc2soU1IyQSwgVklBU1IsCisJCQkJICAgICAgIHBfZ2Z4X2RwYV9zZXR0aW5nLT5EVlAwRGF0YURyaV9TMSwgQklUNSk7CisJCQlicmVhazsKKwkJfQorCisJY2FzZSBJTlRFUkZBQ0VfRFZQMToKKwkJeworCQkJLyogRFZQMSBDbG9jayBQb2xhcml0eSBhbmQgQWRqdXN0OiAqLworCQkJdmlhZmJfd3JpdGVfcmVnX21hc2soQ1I5QiwgVklBQ1IsCisJCQkJICAgICAgIHBfZ2Z4X2RwYV9zZXR0aW5nLT5EVlAxLCAweDBGKTsKKworCQkJLyogRFZQMSBDbG9jayBhbmQgRGF0YSBQYWRzIERyaXZpbmc6ICovCisJCQl2aWFmYl93cml0ZV9yZWdfbWFzayhTUjY1LCBWSUFTUiwKKwkJCQkgICAgICAgcF9nZnhfZHBhX3NldHRpbmctPkRWUDFEcml2aW5nLCAweDBGKTsKKwkJCWJyZWFrOworCQl9CisKKwljYXNlIElOVEVSRkFDRV9ERlBfSElHSDoKKwkJeworCQkJdmlhZmJfd3JpdGVfcmVnX21hc2soQ1I5NywgVklBQ1IsCisJCQkJICAgICAgIHBfZ2Z4X2RwYV9zZXR0aW5nLT5ERlBIaWdoLCAweDBGKTsKKwkJCWJyZWFrOworCQl9CisKKwljYXNlIElOVEVSRkFDRV9ERlBfTE9XOgorCQl7CisJCQl2aWFmYl93cml0ZV9yZWdfbWFzayhDUjk5LCBWSUFDUiwKKwkJCQkgICAgICAgcF9nZnhfZHBhX3NldHRpbmctPkRGUExvdywgMHgwRik7CisJCQlicmVhazsKKwkJfQorCisJY2FzZSBJTlRFUkZBQ0VfREZQOgorCQl7CisJCQl2aWFmYl93cml0ZV9yZWdfbWFzayhDUjk3LCBWSUFDUiwKKwkJCQkgICAgICAgcF9nZnhfZHBhX3NldHRpbmctPkRGUEhpZ2gsIDB4MEYpOworCQkJdmlhZmJfd3JpdGVfcmVnX21hc2soQ1I5OSwgVklBQ1IsCisJCQkJICAgICAgIHBfZ2Z4X2RwYV9zZXR0aW5nLT5ERlBMb3csIDB4MEYpOworCQkJYnJlYWs7CisJCX0KKwl9Cit9CisKK3ZvaWQgdmlhZmJfbWVtb3J5X3BpdGNoX3BhdGNoKHN0cnVjdCBmYl9pbmZvICppbmZvKQoreworCWlmIChpbmZvLT52YXIueHJlcyAhPSBpbmZvLT52YXIueHJlc192aXJ0dWFsKSB7CisJCXZpYWZiX2xvYWRfb2Zmc2V0X3JlZyhpbmZvLT52YXIueHJlc192aXJ0dWFsLAorCQkJCWluZm8tPnZhci5iaXRzX3Blcl9waXhlbCA+PiAzLCBJR0ExKTsKKworCQlpZiAodmlhZmJfU0FNTV9PTikgeworCQkJdmlhZmJfbG9hZF9vZmZzZXRfcmVnKHZpYWZiX3NlY29uZF92aXJ0dWFsX3hyZXMsCisJCQkJdmlhZmJfYnBwMSA+PiAzLAorCQkJCQlJR0EyKTsKKwkJfSBlbHNlIHsKKwkJCXZpYWZiX2xvYWRfb2Zmc2V0X3JlZyhpbmZvLT52YXIueHJlc192aXJ0dWFsLAorCQkJCQlpbmZvLT52YXIuYml0c19wZXJfcGl4ZWwgPj4gMywgSUdBMik7CisJCX0KKworCX0KK30KKworLypBY2NvcmRpbmcgdmFyJ3MgeHJlcywgeXJlcyBmaWxsIHZhcidzIG90aGVyIHRpbWluZyBpbmZvcm1hdGlvbiovCit2b2lkIHZpYWZiX2ZpbGxfdmFyX3RpbWluZ19pbmZvKHN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyAqdmFyLCBpbnQgcmVmcmVzaCwKKwkJCSAgaW50IG1vZGVfaW5kZXgpCit7CisJc3RydWN0IFZpZGVvTW9kZVRhYmxlICp2bW9kZV90YmwgPSBOVUxMOworCXN0cnVjdCBjcnRfbW9kZV90YWJsZSAqY3J0X3RpbWluZyA9IE5VTEw7CisJc3RydWN0IGRpc3BsYXlfdGltaW5nIGNydF9yZWc7CisJaW50IGkgPSAwLCBpbmRleCA9IDA7CisJdm1vZGVfdGJsID0gJkNMRTI2Nk1vZGVzW3NlYXJjaF9tb2RlX3NldHRpbmcobW9kZV9pbmRleCldOworCWNydF90aW1pbmcgPSB2bW9kZV90YmwtPmNydGM7CisJZm9yIChpID0gMDsgaSA8IHZtb2RlX3RibC0+bW9kZV9hcnJheTsgaSsrKSB7CisJCWluZGV4ID0gaTsKKwkJaWYgKGNydF90aW1pbmdbaV0ucmVmcmVzaF9yYXRlID09IHJlZnJlc2gpCisJCQlicmVhazsKKwl9CisKKwljcnRfcmVnID0gY3J0X3RpbWluZ1tpbmRleF0uY3J0YzsKKwlzd2l0Y2ggKHZhci0+Yml0c19wZXJfcGl4ZWwpIHsKKwljYXNlIDg6CisJCXZhci0+cmVkLm9mZnNldCA9IDA7CisJCXZhci0+Z3JlZW4ub2Zmc2V0ID0gMDsKKwkJdmFyLT5ibHVlLm9mZnNldCA9IDA7CisJCXZhci0+cmVkLmxlbmd0aCA9IDY7CisJCXZhci0+Z3JlZW4ubGVuZ3RoID0gNjsKKwkJdmFyLT5ibHVlLmxlbmd0aCA9IDY7CisJCWJyZWFrOworCWNhc2UgMTY6CisJCXZhci0+cmVkLm9mZnNldCA9IDExOworCQl2YXItPmdyZWVuLm9mZnNldCA9IDU7CisJCXZhci0+Ymx1ZS5vZmZzZXQgPSAwOworCQl2YXItPnJlZC5sZW5ndGggPSA1OworCQl2YXItPmdyZWVuLmxlbmd0aCA9IDY7CisJCXZhci0+Ymx1ZS5sZW5ndGggPSA1OworCQlicmVhazsKKwljYXNlIDMyOgorCQl2YXItPnJlZC5vZmZzZXQgPSAxNjsKKwkJdmFyLT5ncmVlbi5vZmZzZXQgPSA4OworCQl2YXItPmJsdWUub2Zmc2V0ID0gMDsKKwkJdmFyLT5yZWQubGVuZ3RoID0gODsKKwkJdmFyLT5ncmVlbi5sZW5ndGggPSA4OworCQl2YXItPmJsdWUubGVuZ3RoID0gODsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJLyogbmV2ZXIgaGFwcGVkLCBwdXQgaGVyZSB0byBrZWVwIGNvbnNpc3RlbnQgKi8KKwkJYnJlYWs7CisJfQorCisJdmFyLT5waXhjbG9jayA9IHZpYWZiX2dldF9waXhjbG9jayh2YXItPnhyZXMsIHZhci0+eXJlcywgcmVmcmVzaCk7CisJdmFyLT5sZWZ0X21hcmdpbiA9CisJICAgIGNydF9yZWcuaG9yX3RvdGFsIC0gKGNydF9yZWcuaG9yX3N5bmNfc3RhcnQgKyBjcnRfcmVnLmhvcl9zeW5jX2VuZCk7CisJdmFyLT5yaWdodF9tYXJnaW4gPSBjcnRfcmVnLmhvcl9zeW5jX3N0YXJ0IC0gY3J0X3JlZy5ob3JfYWRkcjsKKwl2YXItPmhzeW5jX2xlbiA9IGNydF9yZWcuaG9yX3N5bmNfZW5kOworCXZhci0+dXBwZXJfbWFyZ2luID0KKwkgICAgY3J0X3JlZy52ZXJfdG90YWwgLSAoY3J0X3JlZy52ZXJfc3luY19zdGFydCArIGNydF9yZWcudmVyX3N5bmNfZW5kKTsKKwl2YXItPmxvd2VyX21hcmdpbiA9IGNydF9yZWcudmVyX3N5bmNfc3RhcnQgLSBjcnRfcmVnLnZlcl9hZGRyOworCXZhci0+dnN5bmNfbGVuID0gY3J0X3JlZy52ZXJfc3luY19lbmQ7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3ZpYS9ody5oIGIvZHJpdmVycy92aWRlby92aWEvaHcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZmYzOGZhCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy92aWRlby92aWEvaHcuaApAQCAtMCwwICsxLDkzMyBAQAorLyoKKyAqIENvcHlyaWdodCAxOTk4LTIwMDggVklBIFRlY2hub2xvZ2llcywgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IDIwMDEtMjAwOCBTMyBHcmFwaGljcywgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247CisgKiBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5USUVTIE9SIFJFUFJFU0VOVEFUSU9OUzsgd2l0aG91dCBldmVuCisgKiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFLlNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGZvciBtb3JlIGRldGFpbHMuCisKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwKKyAqIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKworI2lmbmRlZiBfX0hXX0hfXworI2RlZmluZSBfX0hXX0hfXworCisjaW5jbHVkZSAiZ2xvYmFsLmgiCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogRGVmaW5pdGlvbiBJR0ExIERlc2lnbiBNZXRob2Qgb2YgQ1JUQyBSZWdpc3RlcnMgKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNkZWZpbmUgSUdBMV9IT1JfVE9UQUxfRk9STVVMQSh4KSAgICAgICAgICAgKCgoeCkvOCktNSkKKyNkZWZpbmUgSUdBMV9IT1JfQUREUl9GT1JNVUxBKHgpICAgICAgICAgICAgKCgoeCkvOCktMSkKKyNkZWZpbmUgSUdBMV9IT1JfQkxBTktfU1RBUlRfRk9STVVMQSh4KSAgICAgKCgoeCkvOCktMSkKKyNkZWZpbmUgSUdBMV9IT1JfQkxBTktfRU5EX0ZPUk1VTEEoeCwgeSkgICAgICgoKHgreSkvOCktMSkKKyNkZWZpbmUgSUdBMV9IT1JfU1lOQ19TVEFSVF9GT1JNVUxBKHgpICAgICAgKCh4KS84KQorI2RlZmluZSBJR0ExX0hPUl9TWU5DX0VORF9GT1JNVUxBKHgsIHkpICAgICAgKCh4K3kpLzgpCisKKyNkZWZpbmUgSUdBMV9WRVJfVE9UQUxfRk9STVVMQSh4KSAgICAgICAgICAgKCh4KS0yKQorI2RlZmluZSBJR0ExX1ZFUl9BRERSX0ZPUk1VTEEoeCkgICAgICAgICAgICAoKHgpLTEpCisjZGVmaW5lIElHQTFfVkVSX0JMQU5LX1NUQVJUX0ZPUk1VTEEoeCkgICAgICgoeCktMSkKKyNkZWZpbmUgSUdBMV9WRVJfQkxBTktfRU5EX0ZPUk1VTEEoeCwgeSkgICAgICgoeCt5KS0xKQorI2RlZmluZSBJR0ExX1ZFUl9TWU5DX1NUQVJUX0ZPUk1VTEEoeCkgICAgICAoKHgpLTEpCisjZGVmaW5lIElHQTFfVkVSX1NZTkNfRU5EX0ZPUk1VTEEoeCwgeSkgICAgICAoKHgreSktMSkKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiogRGVmaW5pdGlvbiBJR0EyIERlc2lnbiBNZXRob2Qgb2YgQ1JUQyBSZWdpc3RlcnMgKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNkZWZpbmUgSUdBMl9IT1JfVE9UQUxfRk9STVVMQSh4KSAgICAgICAgICAgKCh4KS0xKQorI2RlZmluZSBJR0EyX0hPUl9BRERSX0ZPUk1VTEEoeCkgICAgICAgICAgICAoKHgpLTEpCisjZGVmaW5lIElHQTJfSE9SX0JMQU5LX1NUQVJUX0ZPUk1VTEEoeCkgICAgICgoeCktMSkKKyNkZWZpbmUgSUdBMl9IT1JfQkxBTktfRU5EX0ZPUk1VTEEoeCwgeSkgICAgICgoeCt5KS0xKQorI2RlZmluZSBJR0EyX0hPUl9TWU5DX1NUQVJUX0ZPUk1VTEEoeCkgICAgICAoKHgpLTEpCisjZGVmaW5lIElHQTJfSE9SX1NZTkNfRU5EX0ZPUk1VTEEoeCwgeSkgICAgICAoKHgreSktMSkKKworI2RlZmluZSBJR0EyX1ZFUl9UT1RBTF9GT1JNVUxBKHgpICAgICAgICAgICAoKHgpLTEpCisjZGVmaW5lIElHQTJfVkVSX0FERFJfRk9STVVMQSh4KSAgICAgICAgICAgICgoeCktMSkKKyNkZWZpbmUgSUdBMl9WRVJfQkxBTktfU1RBUlRfRk9STVVMQSh4KSAgICAgKCh4KS0xKQorI2RlZmluZSBJR0EyX1ZFUl9CTEFOS19FTkRfRk9STVVMQSh4LCB5KSAgICAgKCh4K3kpLTEpCisjZGVmaW5lIElHQTJfVkVSX1NZTkNfU1RBUlRfRk9STVVMQSh4KSAgICAgICgoeCktMSkKKyNkZWZpbmUgSUdBMl9WRVJfU1lOQ19FTkRfRk9STVVMQSh4LCB5KSAgICAgICgoeCt5KS0xKQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIERlZmluaXRpb24gSUdBMiBEZXNpZ24gTWV0aG9kIG9mIENSVEMgU2hhZG93IFJlZ2lzdGVycyAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjZGVmaW5lIElHQTJfSE9SX1RPVEFMX1NIQURPV19GT1JNVUxBKHgpICAgICAgICAgICAoKHgvOCktNSkKKyNkZWZpbmUgSUdBMl9IT1JfQkxBTktfRU5EX1NIQURPV19GT1JNVUxBKHgsIHkpICAgICAoKCh4K3kpLzgpLTEpCisjZGVmaW5lIElHQTJfVkVSX1RPVEFMX1NIQURPV19GT1JNVUxBKHgpICAgICAgICAgICAoKHgpLTIpCisjZGVmaW5lIElHQTJfVkVSX0FERFJfU0hBRE9XX0ZPUk1VTEEoeCkgICAgICAgICAgICAoKHgpLTEpCisjZGVmaW5lIElHQTJfVkVSX0JMQU5LX1NUQVJUX1NIQURPV19GT1JNVUxBKHgpICAgICAoKHgpLTEpCisjZGVmaW5lIElHQTJfVkVSX0JMQU5LX0VORF9TSEFET1dfRk9STVVMQSh4LCB5KSAgICAgKCh4K3kpLTEpCisjZGVmaW5lIElHQTJfVkVSX1NZTkNfU1RBUlRfU0hBRE9XX0ZPUk1VTEEoeCkgICAgICAoeCkKKyNkZWZpbmUgSUdBMl9WRVJfU1lOQ19FTkRfU0hBRE9XX0ZPUk1VTEEoeCwgeSkgICAgICAoeCt5KQorCisvKiBEZWZpbmUgUmVnaXN0ZXIgTnVtYmVyIGZvciBJR0ExIENSVEMgVGltaW5nICovCisKKy8qIGxvY2F0aW9uOiB7Q1IwMCwwLDd9LHtDUjM2LDMsM30gKi8KKyNkZWZpbmUgSUdBMV9IT1JfVE9UQUxfUkVHX05VTQkJMgorLyogbG9jYXRpb246IHtDUjAxLDAsN30gKi8KKyNkZWZpbmUgSUdBMV9IT1JfQUREUl9SRUdfTlVNCQkxCisvKiBsb2NhdGlvbjoge0NSMDIsMCw3fSAqLworI2RlZmluZSBJR0ExX0hPUl9CTEFOS19TVEFSVF9SRUdfTlVNICAgIDEKKy8qIGxvY2F0aW9uOiB7Q1IwMywwLDR9LHtDUjA1LDcsN30se0NSMzMsNSw1fSAqLworI2RlZmluZSBJR0ExX0hPUl9CTEFOS19FTkRfUkVHX05VTQkzCisvKiBsb2NhdGlvbjoge0NSMDQsMCw3fSx7Q1IzMyw0LDR9ICovCisjZGVmaW5lIElHQTFfSE9SX1NZTkNfU1RBUlRfUkVHX05VTQkyCisvKiBsb2NhdGlvbjoge0NSMDUsMCw0fSAqLworI2RlZmluZSBJR0ExX0hPUl9TWU5DX0VORF9SRUdfTlVNICAgICAgIDEKKy8qIGxvY2F0aW9uOiB7Q1IwNiwwLDd9LHtDUjA3LDAsMH0se0NSMDcsNSw1fSx7Q1IzNSwwLDB9ICovCisjZGVmaW5lIElHQTFfVkVSX1RPVEFMX1JFR19OVU0gICAgICAgICAgNAorLyogbG9jYXRpb246IHtDUjEyLDAsN30se0NSMDcsMSwxfSx7Q1IwNyw2LDZ9LHtDUjM1LDIsMn0gKi8KKyNkZWZpbmUgSUdBMV9WRVJfQUREUl9SRUdfTlVNICAgICAgICAgICA0CisvKiBsb2NhdGlvbjoge0NSMTUsMCw3fSx7Q1IwNywzLDN9LHtDUjA5LDUsNX0se0NSMzUsMywzfSAqLworI2RlZmluZSBJR0ExX1ZFUl9CTEFOS19TVEFSVF9SRUdfTlVNICAgIDQKKy8qIGxvY2F0aW9uOiB7Q1IxNiwwLDd9ICovCisjZGVmaW5lIElHQTFfVkVSX0JMQU5LX0VORF9SRUdfTlVNICAgICAgMQorLyogbG9jYXRpb246IHtDUjEwLDAsN30se0NSMDcsMiwyfSx7Q1IwNyw3LDd9LHtDUjM1LDEsMX0gKi8KKyNkZWZpbmUgSUdBMV9WRVJfU1lOQ19TVEFSVF9SRUdfTlVNICAgICA0CisvKiBsb2NhdGlvbjoge0NSMTEsMCwzfSAqLworI2RlZmluZSBJR0ExX1ZFUl9TWU5DX0VORF9SRUdfTlVNICAgICAgIDEKKworLyogRGVmaW5lIFJlZ2lzdGVyIE51bWJlciBmb3IgSUdBMiBTaGFkb3cgQ1JUQyBUaW1pbmcgKi8KKworLyogbG9jYXRpb246IHtDUjZELDAsN30se0NSNzEsMywzfSAqLworI2RlZmluZSBJR0EyX1NIQURPV19IT1JfVE9UQUxfUkVHX05VTSAgICAgICAyCisvKiBsb2NhdGlvbjoge0NSNkUsMCw3fSAqLworI2RlZmluZSBJR0EyX1NIQURPV19IT1JfQkxBTktfRU5EX1JFR19OVU0gICAxCisvKiBsb2NhdGlvbjoge0NSNkYsMCw3fSx7Q1I3MSwwLDJ9ICovCisjZGVmaW5lIElHQTJfU0hBRE9XX1ZFUl9UT1RBTF9SRUdfTlVNICAgICAgIDIKKy8qIGxvY2F0aW9uOiB7Q1I3MCwwLDd9LHtDUjcxLDQsNn0gKi8KKyNkZWZpbmUgSUdBMl9TSEFET1dfVkVSX0FERFJfUkVHX05VTSAgICAgICAgMgorLyogbG9jYXRpb246IHtDUjcyLDAsN30se0NSNzQsNCw2fSAqLworI2RlZmluZSBJR0EyX1NIQURPV19WRVJfQkxBTktfU1RBUlRfUkVHX05VTSAyCisvKiBsb2NhdGlvbjoge0NSNzMsMCw3fSx7Q1I3NCwwLDJ9ICovCisjZGVmaW5lIElHQTJfU0hBRE9XX1ZFUl9CTEFOS19FTkRfUkVHX05VTSAgIDIKKy8qIGxvY2F0aW9uOiB7Q1I3NSwwLDd9LHtDUjc2LDQsNn0gKi8KKyNkZWZpbmUgSUdBMl9TSEFET1dfVkVSX1NZTkNfU1RBUlRfUkVHX05VTSAgMgorLyogbG9jYXRpb246IHtDUjc2LDAsM30gKi8KKyNkZWZpbmUgSUdBMl9TSEFET1dfVkVSX1NZTkNfRU5EX1JFR19OVU0gICAgMQorCisvKiBEZWZpbmUgUmVnaXN0ZXIgTnVtYmVyIGZvciBJR0EyIENSVEMgVGltaW5nICovCisKKy8qIGxvY2F0aW9uOiB7Q1I1MCwwLDd9LHtDUjU1LDAsM30gKi8KKyNkZWZpbmUgSUdBMl9IT1JfVE9UQUxfUkVHX05VTSAgICAgICAgICAyCisvKiBsb2NhdGlvbjoge0NSNTEsMCw3fSx7Q1I1NSw0LDZ9ICovCisjZGVmaW5lIElHQTJfSE9SX0FERFJfUkVHX05VTSAgICAgICAgICAgMgorLyogbG9jYXRpb246IHtDUjUyLDAsN30se0NSNTQsMCwyfSAqLworI2RlZmluZSBJR0EyX0hPUl9CTEFOS19TVEFSVF9SRUdfTlVNICAgIDIKKy8qIGxvY2F0aW9uOiBDTEUyNjY6IHtDUjUzLDAsN30se0NSNTQsMyw1fSA9PiBDTEUyNjYncyBDUjVEWzZdCitpcyByZXNlcnZlZCwgc28gaXQgbWF5IGhhdmUgcHJvYmxlbSB0byBzZXQgMTYwMHgxMjAwIG9uIElHQTIuICovCisvKiAgICAgICAgIAlPdGhlcnM6IHtDUjUzLDAsN30se0NSNTQsMyw1fSx7Q1I1RCw2LDZ9ICovCisjZGVmaW5lIElHQTJfSE9SX0JMQU5LX0VORF9SRUdfTlVNICAgICAgMworLyogbG9jYXRpb246IHtDUjU2LDAsN30se0NSNTQsNiw3fSx7Q1I1Qyw3LDd9ICovCisvKiBWVDMzMTQgYW5kIExhdGVyOiB7Q1I1NiwwLDd9LHtDUjU0LDYsN30se0NSNUMsNyw3fSwge0NSNUQsNyw3fSAqLworI2RlZmluZSBJR0EyX0hPUl9TWU5DX1NUQVJUX1JFR19OVU0gICAgIDQKKworLyogbG9jYXRpb246IHtDUjU3LDAsN30se0NSNUMsNiw2fSAqLworI2RlZmluZSBJR0EyX0hPUl9TWU5DX0VORF9SRUdfTlVNICAgICAgIDIKKy8qIGxvY2F0aW9uOiB7Q1I1OCwwLDd9LHtDUjVELDAsMn0gKi8KKyNkZWZpbmUgSUdBMl9WRVJfVE9UQUxfUkVHX05VTSAgICAgICAgICAyCisvKiBsb2NhdGlvbjoge0NSNTksMCw3fSx7Q1I1RCwzLDV9ICovCisjZGVmaW5lIElHQTJfVkVSX0FERFJfUkVHX05VTSAgICAgICAgICAgMgorLyogbG9jYXRpb246IHtDUjVBLDAsN30se0NSNUMsMCwyfSAqLworI2RlZmluZSBJR0EyX1ZFUl9CTEFOS19TVEFSVF9SRUdfTlVNICAgIDIKKy8qIGxvY2F0aW9uOiB7Q1I1RSwwLDd9LHtDUjVDLDMsNX0gKi8KKyNkZWZpbmUgSUdBMl9WRVJfQkxBTktfRU5EX1JFR19OVU0gICAgICAyCisvKiBsb2NhdGlvbjoge0NSNUUsMCw3fSx7Q1I1Riw1LDd9ICovCisjZGVmaW5lIElHQTJfVkVSX1NZTkNfU1RBUlRfUkVHX05VTSAgICAgMgorLyogbG9jYXRpb246IHtDUjVGLDAsNH0gKi8KKyNkZWZpbmUgSUdBMl9WRVJfU1lOQ19FTkRfUkVHX05VTSAgICAgICAxCisKKy8qIERlZmluZSBPZmZzZXQgYW5kIEZldGNoIENvdW50IFJlZ2lzdGVyKi8KKworLyogbG9jYXRpb246IHtDUjEzLDAsN30se0NSMzUsNSw3fSAqLworI2RlZmluZSBJR0ExX09GRlNFVF9SRUdfTlVNICAgICAgICAgICAgIDIKKy8qIDggYnl0ZXMgYWxpZ25tZW50LiAqLworI2RlZmluZSBJR0ExX09GRlNFUl9BTElHTl9CWVRFICAgICAgICAgIDgKKy8qIHg6IEggcmVzb2x1dGlvbiwgeTogY29sb3IgZGVwdGggKi8KKyNkZWZpbmUgSUdBMV9PRkZTRVRfRk9STVVMQSh4LCB5KSAgICAgICAgKCh4KnkpL0lHQTFfT0ZGU0VSX0FMSUdOX0JZVEUpCisvKiBsb2NhdGlvbjoge1NSMUMsMCw3fSx7U1IxRCwwLDF9ICovCisjZGVmaW5lIElHQTFfRkVUQ0hfQ09VTlRfUkVHX05VTSAgICAgICAgMgorLyogMTYgYnl0ZXMgYWxpZ25tZW50LiAqLworI2RlZmluZSBJR0ExX0ZFVENIX0NPVU5UX0FMSUdOX0JZVEUgICAgIDE2CisvKiB4OiBIIHJlc29sdXRpb24sIHk6IGNvbG9yIGRlcHRoICovCisjZGVmaW5lIElHQTFfRkVUQ0hfQ09VTlRfUEFUQ0hfVkFMVUUgICAgNAorI2RlZmluZSBJR0ExX0ZFVENIX0NPVU5UX0ZPUk1VTEEoeCwgeSkgICBcCisJKCgoeCp5KS9JR0ExX0ZFVENIX0NPVU5UX0FMSUdOX0JZVEUpICsgSUdBMV9GRVRDSF9DT1VOVF9QQVRDSF9WQUxVRSkKKworLyogbG9jYXRpb246IHtDUjY2LDAsN30se0NSNjcsMCwxfSAqLworI2RlZmluZSBJR0EyX09GRlNFVF9SRUdfTlVNICAgICAgICAgICAgIDIKKyNkZWZpbmUgSUdBMl9PRkZTRVRfQUxJR05fQllURSAgICAgICAgICA4CisvKiB4OiBIIHJlc29sdXRpb24sIHk6IGNvbG9yIGRlcHRoICovCisjZGVmaW5lIElHQTJfT0ZGU0VUX0ZPUk1VTEEoeCwgeSkgICAgICAgICgoeCp5KS9JR0EyX09GRlNFVF9BTElHTl9CWVRFKQorLyogbG9jYXRpb246IHtDUjY1LDAsN30se0NSNjcsMiwzfSAqLworI2RlZmluZSBJR0EyX0ZFVENIX0NPVU5UX1JFR19OVU0gICAgICAgIDIKKyNkZWZpbmUgSUdBMl9GRVRDSF9DT1VOVF9BTElHTl9CWVRFICAgICAxNgorI2RlZmluZSBJR0EyX0ZFVENIX0NPVU5UX1BBVENIX1ZBTFVFICAgIDAKKyNkZWZpbmUgSUdBMl9GRVRDSF9DT1VOVF9GT1JNVUxBKHgsIHkpICAgXAorCSgoKHgqeSkvSUdBMl9GRVRDSF9DT1VOVF9BTElHTl9CWVRFKSArIElHQTJfRkVUQ0hfQ09VTlRfUEFUQ0hfVkFMVUUpCisKKy8qIFN0YXJpbmcgQWRkcmVzcyovCisKKy8qIGxvY2F0aW9uOiB7Q1IwQywwLDd9LHtDUjBELDAsN30se0NSMzQsMCw3fSx7Q1I0OCwwLDF9ICovCisjZGVmaW5lIElHQTFfU1RBUlRJTkdfQUREUl9SRUdfTlVNICAgICAgNAorLyogbG9jYXRpb246IHtDUjYyLDEsN30se0NSNjMsMCw3fSx7Q1I2NCwwLDd9ICovCisjZGVmaW5lIElHQTJfU1RBUlRJTkdfQUREUl9SRUdfTlVNICAgICAgMworCisvKiBEZWZpbmUgRGlzcGxheSBPRkZTRVQqLworLyogVGhlc2UgdmFsdWUgYXJlIGJ5IEhXIHN1Z2dlc3RlZCB2YWx1ZSovCisvKiBsb2NhdGlvbjoge1NSMTcsMCw3fSAqLworI2RlZmluZSBLODAwX0lHQTFfRklGT19NQVhfREVQVEggICAgICAgICAgICAgICAgMzg0CisvKiBsb2NhdGlvbjoge1NSMTYsMCw1fSx7U1IxNiw3LDd9ICovCisjZGVmaW5lIEs4MDBfSUdBMV9GSUZPX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAzMjgKKy8qIGxvY2F0aW9uOiB7U1IxOCwwLDV9LHtTUjE4LDcsN30gKi8KKyNkZWZpbmUgSzgwMF9JR0ExX0ZJRk9fSElHSF9USFJFU0hPTEQgICAgICAgICAgIDI5NgorLyogbG9jYXRpb246IHtTUjIyLDAsNH0uICgxMjgvNCkgPTY0LCBLODAwIG11c3QgYmUgc2V0IHplcm8sICovCisJCQkJLyogYmVjYXVzZSBIVyBvbmx5IDUgYml0cyAqLworI2RlZmluZSBLODAwX0lHQTFfRElTUExBWV9RVUVVRV9FWFBJUkVfTlVNICAgICAgMAorCisvKiBsb2NhdGlvbjoge0NSNjgsNCw3fSx7Q1I5NCw3LDd9LHtDUjk1LDcsN30gKi8KKyNkZWZpbmUgSzgwMF9JR0EyX0ZJRk9fTUFYX0RFUFRIICAgICAgICAgICAgICAgIDM4NAorLyogbG9jYXRpb246IHtDUjY4LDAsM30se0NSOTUsNCw2fSAqLworI2RlZmluZSBLODAwX0lHQTJfRklGT19USFJFU0hPTEQgICAgICAgICAgICAgICAgMzI4CisvKiBsb2NhdGlvbjoge0NSOTIsMCwzfSx7Q1I5NSwwLDJ9ICovCisjZGVmaW5lIEs4MDBfSUdBMl9GSUZPX0hJR0hfVEhSRVNIT0xEICAgICAgICAgICAyOTYKKy8qIGxvY2F0aW9uOiB7Q1I5NCwwLDZ9ICovCisjZGVmaW5lIEs4MDBfSUdBMl9ESVNQTEFZX1FVRVVFX0VYUElSRV9OVU0gICAgICAxMjgKKworLyogbG9jYXRpb246IHtTUjE3LDAsN30gKi8KKyNkZWZpbmUgUDg4MF9JR0ExX0ZJRk9fTUFYX0RFUFRIICAgICAgICAgICAgICAgIDE5MgorLyogbG9jYXRpb246IHtTUjE2LDAsNX0se1NSMTYsNyw3fSAqLworI2RlZmluZSBQODgwX0lHQTFfRklGT19USFJFU0hPTEQgICAgICAgICAgICAgICAgMTI4CisvKiBsb2NhdGlvbjoge1NSMTgsMCw1fSx7U1IxOCw3LDd9ICovCisjZGVmaW5lIFA4ODBfSUdBMV9GSUZPX0hJR0hfVEhSRVNIT0xEICAgICAgICAgICA2NAorLyogbG9jYXRpb246IHtTUjIyLDAsNH0uICgxMjgvNCkgPTY0LCBLODAwIG11c3QgYmUgc2V0IHplcm8sICovCisJCQkJLyogYmVjYXVzZSBIVyBvbmx5IDUgYml0cyAqLworI2RlZmluZSBQODgwX0lHQTFfRElTUExBWV9RVUVVRV9FWFBJUkVfTlVNICAgICAgMAorCisvKiBsb2NhdGlvbjoge0NSNjgsNCw3fSx7Q1I5NCw3LDd9LHtDUjk1LDcsN30gKi8KKyNkZWZpbmUgUDg4MF9JR0EyX0ZJRk9fTUFYX0RFUFRIICAgICAgICAgICAgICAgIDk2CisvKiBsb2NhdGlvbjoge0NSNjgsMCwzfSx7Q1I5NSw0LDZ9ICovCisjZGVmaW5lIFA4ODBfSUdBMl9GSUZPX1RIUkVTSE9MRCAgICAgICAgICAgICAgICA2NAorLyogbG9jYXRpb246IHtDUjkyLDAsM30se0NSOTUsMCwyfSAqLworI2RlZmluZSBQODgwX0lHQTJfRklGT19ISUdIX1RIUkVTSE9MRCAgICAgICAgICAgMzIKKy8qIGxvY2F0aW9uOiB7Q1I5NCwwLDZ9ICovCisjZGVmaW5lIFA4ODBfSUdBMl9ESVNQTEFZX1FVRVVFX0VYUElSRV9OVU0gICAgICAxMjgKKworLyogVlQzMzE0IGNoaXBzZXQqLworCisvKiBsb2NhdGlvbjoge1NSMTcsMCw3fSAqLworI2RlZmluZSBDTjcwMF9JR0ExX0ZJRk9fTUFYX0RFUFRIICAgICAgICAgICAgICAgOTYKKy8qIGxvY2F0aW9uOiB7U1IxNiwwLDV9LHtTUjE2LDcsN30gKi8KKyNkZWZpbmUgQ043MDBfSUdBMV9GSUZPX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDgwCisvKiBsb2NhdGlvbjoge1NSMTgsMCw1fSx7U1IxOCw3LDd9ICovCisjZGVmaW5lIENONzAwX0lHQTFfRklGT19ISUdIX1RIUkVTSE9MRCAgICAgICAgICA2NAorLyogbG9jYXRpb246IHtTUjIyLDAsNH0uICgxMjgvNCkgPTY0LCBQODAwIG11c3QgYmUgc2V0IHplcm8sCisJCQkJYmVjYXVzZSBIVyBvbmx5IDUgYml0cyAqLworI2RlZmluZSBDTjcwMF9JR0ExX0RJU1BMQVlfUVVFVUVfRVhQSVJFX05VTSAgICAgMAorLyogbG9jYXRpb246IHtDUjY4LDQsN30se0NSOTQsNyw3fSx7Q1I5NSw3LDd9ICovCisjZGVmaW5lIENONzAwX0lHQTJfRklGT19NQVhfREVQVEggICAgICAgICAgICAgICA5NgorLyogbG9jYXRpb246IHtDUjY4LDAsM30se0NSOTUsNCw2fSAqLworI2RlZmluZSBDTjcwMF9JR0EyX0ZJRk9fVEhSRVNIT0xEICAgICAgICAgICAgICAgODAKKy8qIGxvY2F0aW9uOiB7Q1I5MiwwLDN9LHtDUjk1LDAsMn0gKi8KKyNkZWZpbmUgQ043MDBfSUdBMl9GSUZPX0hJR0hfVEhSRVNIT0xEICAgICAgICAgIDMyCisvKiBsb2NhdGlvbjoge0NSOTQsMCw2fSAqLworI2RlZmluZSBDTjcwMF9JR0EyX0RJU1BMQVlfUVVFVUVfRVhQSVJFX05VTSAgICAgMTI4CisKKy8qIEZvciBWVDMzMjQsIHRoZXNlIHZhbHVlcyBhcmUgc3VnZ2VzdGVkIGJ5IEhXICovCisvKiBsb2NhdGlvbjoge1NSMTcsMCw3fSAqLworI2RlZmluZSBDWDcwMF9JR0ExX0ZJRk9fTUFYX0RFUFRIICAgICAgICAgICAgICAgMTkyCisvKiBsb2NhdGlvbjoge1NSMTYsMCw1fSx7U1IxNiw3LDd9ICovCisjZGVmaW5lIENYNzAwX0lHQTFfRklGT19USFJFU0hPTEQgICAgICAgICAgICAgICAxMjgKKy8qIGxvY2F0aW9uOiB7U1IxOCwwLDV9LHtTUjE4LDcsN30gKi8KKyNkZWZpbmUgQ1g3MDBfSUdBMV9GSUZPX0hJR0hfVEhSRVNIT0xEICAgICAgICAgIDEyOAorLyogbG9jYXRpb246IHtTUjIyLDAsNH0gKi8KKyNkZWZpbmUgQ1g3MDBfSUdBMV9ESVNQTEFZX1FVRVVFX0VYUElSRV9OVU0gICAgIDEyNAorCisvKiBsb2NhdGlvbjoge0NSNjgsNCw3fSx7Q1I5NCw3LDd9LHtDUjk1LDcsN30gKi8KKyNkZWZpbmUgQ1g3MDBfSUdBMl9GSUZPX01BWF9ERVBUSCAgICAgICAgICAgICAgIDk2CisvKiBsb2NhdGlvbjoge0NSNjgsMCwzfSx7Q1I5NSw0LDZ9ICovCisjZGVmaW5lIENYNzAwX0lHQTJfRklGT19USFJFU0hPTEQgICAgICAgICAgICAgICA2NAorLyogbG9jYXRpb246IHtDUjkyLDAsM30se0NSOTUsMCwyfSAqLworI2RlZmluZSBDWDcwMF9JR0EyX0ZJRk9fSElHSF9USFJFU0hPTEQgICAgICAgICAgMzIKKy8qIGxvY2F0aW9uOiB7Q1I5NCwwLDZ9ICovCisjZGVmaW5lIENYNzAwX0lHQTJfRElTUExBWV9RVUVVRV9FWFBJUkVfTlVNICAgICAxMjgKKworLyogVlQzMzM2IGNoaXBzZXQqLworLyogbG9jYXRpb246IHtTUjE3LDAsN30gKi8KKyNkZWZpbmUgSzhNODkwX0lHQTFfRklGT19NQVhfREVQVEggICAgICAgICAgICAgICAzNjAKKy8qIGxvY2F0aW9uOiB7U1IxNiwwLDV9LHtTUjE2LDcsN30gKi8KKyNkZWZpbmUgSzhNODkwX0lHQTFfRklGT19USFJFU0hPTEQgICAgICAgICAgICAgICAzMjgKKy8qIGxvY2F0aW9uOiB7U1IxOCwwLDV9LHtTUjE4LDcsN30gKi8KKyNkZWZpbmUgSzhNODkwX0lHQTFfRklGT19ISUdIX1RIUkVTSE9MRCAgICAgICAgICAyOTYKKy8qIGxvY2F0aW9uOiB7U1IyMiwwLDR9LiAqLworI2RlZmluZSBLOE04OTBfSUdBMV9ESVNQTEFZX1FVRVVFX0VYUElSRV9OVU0gICAgIDEyNAorCisvKiBsb2NhdGlvbjoge0NSNjgsNCw3fSx7Q1I5NCw3LDd9LHtDUjk1LDcsN30gKi8KKyNkZWZpbmUgSzhNODkwX0lHQTJfRklGT19NQVhfREVQVEggICAgICAgICAgICAgICAzNjAKKy8qIGxvY2F0aW9uOiB7Q1I2OCwwLDN9LHtDUjk1LDQsNn0gKi8KKyNkZWZpbmUgSzhNODkwX0lHQTJfRklGT19USFJFU0hPTEQgICAgICAgICAgICAgICAzMjgKKy8qIGxvY2F0aW9uOiB7Q1I5MiwwLDN9LHtDUjk1LDAsMn0gKi8KKyNkZWZpbmUgSzhNODkwX0lHQTJfRklGT19ISUdIX1RIUkVTSE9MRCAgICAgICAgICAyOTYKKy8qIGxvY2F0aW9uOiB7Q1I5NCwwLDZ9ICovCisjZGVmaW5lIEs4TTg5MF9JR0EyX0RJU1BMQVlfUVVFVUVfRVhQSVJFX05VTSAgICAgMTI0CisKKy8qIFZUMzMyNyBjaGlwc2V0Ki8KKy8qIGxvY2F0aW9uOiB7U1IxNywwLDd9ICovCisjZGVmaW5lIFA0TTg5MF9JR0ExX0ZJRk9fTUFYX0RFUFRIICAgICAgICAgICAgICAgOTYKKy8qIGxvY2F0aW9uOiB7U1IxNiwwLDV9LHtTUjE2LDcsN30gKi8KKyNkZWZpbmUgUDRNODkwX0lHQTFfRklGT19USFJFU0hPTEQgICAgICAgICAgICAgICA3NgorLyogbG9jYXRpb246IHtTUjE4LDAsNX0se1NSMTgsNyw3fSAqLworI2RlZmluZSBQNE04OTBfSUdBMV9GSUZPX0hJR0hfVEhSRVNIT0xEICAgICAgICAgIDY0CisvKiBsb2NhdGlvbjoge1NSMjIsMCw0fS4gKDMyLzQpID04ICovCisjZGVmaW5lIFA0TTg5MF9JR0ExX0RJU1BMQVlfUVVFVUVfRVhQSVJFX05VTSAgICAgMzIKKy8qIGxvY2F0aW9uOiB7Q1I2OCw0LDd9LHtDUjk0LDcsN30se0NSOTUsNyw3fSAqLworI2RlZmluZSBQNE04OTBfSUdBMl9GSUZPX01BWF9ERVBUSCAgICAgICAgICAgICAgIDk2CisvKiBsb2NhdGlvbjoge0NSNjgsMCwzfSx7Q1I5NSw0LDZ9ICovCisjZGVmaW5lIFA0TTg5MF9JR0EyX0ZJRk9fVEhSRVNIT0xEICAgICAgICAgICAgICAgNzYKKy8qIGxvY2F0aW9uOiB7Q1I5MiwwLDN9LHtDUjk1LDAsMn0gKi8KKyNkZWZpbmUgUDRNODkwX0lHQTJfRklGT19ISUdIX1RIUkVTSE9MRCAgICAgICAgICA2NAorLyogbG9jYXRpb246IHtDUjk0LDAsNn0gKi8KKyNkZWZpbmUgUDRNODkwX0lHQTJfRElTUExBWV9RVUVVRV9FWFBJUkVfTlVNICAgICAzMgorCisvKiBWVDMzNjQgY2hpcHNldCovCisvKiBsb2NhdGlvbjoge1NSMTcsMCw3fSAqLworI2RlZmluZSBQNE05MDBfSUdBMV9GSUZPX01BWF9ERVBUSCAgICAgICAgICAgICAgIDk2CisvKiBsb2NhdGlvbjoge1NSMTYsMCw1fSx7U1IxNiw3LDd9ICovCisjZGVmaW5lIFA0TTkwMF9JR0ExX0ZJRk9fVEhSRVNIT0xEICAgICAgICAgICAgICAgNzYKKy8qIGxvY2F0aW9uOiB7U1IxOCwwLDV9LHtTUjE4LDcsN30gKi8KKyNkZWZpbmUgUDRNOTAwX0lHQTFfRklGT19ISUdIX1RIUkVTSE9MRCAgICAgICAgICA3NgorLyogbG9jYXRpb246IHtTUjIyLDAsNH0uICovCisjZGVmaW5lIFA0TTkwMF9JR0ExX0RJU1BMQVlfUVVFVUVfRVhQSVJFX05VTSAgICAgMzIKKy8qIGxvY2F0aW9uOiB7Q1I2OCw0LDd9LHtDUjk0LDcsN30se0NSOTUsNyw3fSAqLworI2RlZmluZSBQNE05MDBfSUdBMl9GSUZPX01BWF9ERVBUSCAgICAgICAgICAgICAgIDk2CisvKiBsb2NhdGlvbjoge0NSNjgsMCwzfSx7Q1I5NSw0LDZ9ICovCisjZGVmaW5lIFA0TTkwMF9JR0EyX0ZJRk9fVEhSRVNIT0xEICAgICAgICAgICAgICAgNzYKKy8qIGxvY2F0aW9uOiB7Q1I5MiwwLDN9LHtDUjk1LDAsMn0gKi8KKyNkZWZpbmUgUDRNOTAwX0lHQTJfRklGT19ISUdIX1RIUkVTSE9MRCAgICAgICAgICA3NgorLyogbG9jYXRpb246IHtDUjk0LDAsNn0gKi8KKyNkZWZpbmUgUDRNOTAwX0lHQTJfRElTUExBWV9RVUVVRV9FWFBJUkVfTlVNICAgICAzMgorCisvKiBGb3IgVlQzMzUzLCB0aGVzZSB2YWx1ZXMgYXJlIHN1Z2dlc3RlZCBieSBIVyAqLworLyogbG9jYXRpb246IHtTUjE3LDAsN30gKi8KKyNkZWZpbmUgVlg4MDBfSUdBMV9GSUZPX01BWF9ERVBUSCAgICAgICAgICAgICAgIDE5MgorLyogbG9jYXRpb246IHtTUjE2LDAsNX0se1NSMTYsNyw3fSAqLworI2RlZmluZSBWWDgwMF9JR0ExX0ZJRk9fVEhSRVNIT0xEICAgICAgICAgICAgICAgMTUyCisvKiBsb2NhdGlvbjoge1NSMTgsMCw1fSx7U1IxOCw3LDd9ICovCisjZGVmaW5lIFZYODAwX0lHQTFfRklGT19ISUdIX1RIUkVTSE9MRCAgICAgICAgICAxNTIKKy8qIGxvY2F0aW9uOiB7U1IyMiwwLDR9ICovCisjZGVmaW5lIFZYODAwX0lHQTFfRElTUExBWV9RVUVVRV9FWFBJUkVfTlVNICAgICAgNjQKKy8qIGxvY2F0aW9uOiB7Q1I2OCw0LDd9LHtDUjk0LDcsN30se0NSOTUsNyw3fSAqLworI2RlZmluZSBWWDgwMF9JR0EyX0ZJRk9fTUFYX0RFUFRIICAgICAgICAgICAgICAgOTYKKy8qIGxvY2F0aW9uOiB7Q1I2OCwwLDN9LHtDUjk1LDQsNn0gKi8KKyNkZWZpbmUgVlg4MDBfSUdBMl9GSUZPX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDY0CisvKiBsb2NhdGlvbjoge0NSOTIsMCwzfSx7Q1I5NSwwLDJ9ICovCisjZGVmaW5lIFZYODAwX0lHQTJfRklGT19ISUdIX1RIUkVTSE9MRCAgICAgICAgICAzMgorLyogbG9jYXRpb246IHtDUjk0LDAsNn0gKi8KKyNkZWZpbmUgVlg4MDBfSUdBMl9ESVNQTEFZX1FVRVVFX0VYUElSRV9OVU0gICAgIDEyOAorCisjZGVmaW5lIElHQTFfRklGT19ERVBUSF9TRUxFQ1RfUkVHX05VTSAgICAgICAgICAxCisjZGVmaW5lIElHQTFfRklGT19USFJFU0hPTERfUkVHX05VTSAgICAgICAgICAgICAyCisjZGVmaW5lIElHQTFfRklGT19ISUdIX1RIUkVTSE9MRF9SRUdfTlVNICAgICAgICAyCisjZGVmaW5lIElHQTFfRElTUExBWV9RVUVVRV9FWFBJUkVfTlVNX1JFR19OVU0gICAxCisKKyNkZWZpbmUgSUdBMl9GSUZPX0RFUFRIX1NFTEVDVF9SRUdfTlVNICAgICAgICAgIDMKKyNkZWZpbmUgSUdBMl9GSUZPX1RIUkVTSE9MRF9SRUdfTlVNICAgICAgICAgICAgIDIKKyNkZWZpbmUgSUdBMl9GSUZPX0hJR0hfVEhSRVNIT0xEX1JFR19OVU0gICAgICAgIDIKKyNkZWZpbmUgSUdBMl9ESVNQTEFZX1FVRVVFX0VYUElSRV9OVU1fUkVHX05VTSAgIDEKKworI2RlZmluZSBJR0ExX0ZJRk9fREVQVEhfU0VMRUNUX0ZPUk1VTEEoeCkgICAgICAgICAgICAgICAgICAgKCh4LzIpLTEpCisjZGVmaW5lIElHQTFfRklGT19USFJFU0hPTERfRk9STVVMQSh4KSAgICAgICAgICAgICAgICAgICAgICAoeC80KQorI2RlZmluZSBJR0ExX0RJU1BMQVlfUVVFVUVfRVhQSVJFX05VTV9GT1JNVUxBKHgpICAgICAgICAgICAgKHgvNCkKKyNkZWZpbmUgSUdBMV9GSUZPX0hJR0hfVEhSRVNIT0xEX0ZPUk1VTEEoeCkgICAgICAgICAgICAgICAgICh4LzQpCisjZGVmaW5lIElHQTJfRklGT19ERVBUSF9TRUxFQ1RfRk9STVVMQSh4KSAgICAgICAgICAgICAgICAgICAoKCh4LzIpLzQpLTEpCisjZGVmaW5lIElHQTJfRklGT19USFJFU0hPTERfRk9STVVMQSh4KSAgICAgICAgICAgICAgICAgICAgICAoeC80KQorI2RlZmluZSBJR0EyX0RJU1BMQVlfUVVFVUVfRVhQSVJFX05VTV9GT1JNVUxBKHgpICAgICAgICAgICAgKHgvNCkKKyNkZWZpbmUgSUdBMl9GSUZPX0hJR0hfVEhSRVNIT0xEX0ZPUk1VTEEoeCkgICAgICAgICAgICAgICAgICh4LzQpCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgTENEIFRpbWluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogNTAwIG1zID0gNTAwMDAwIHVzICovCisjZGVmaW5lIExDRF9QT1dFUl9TRVFfVEQwICAgICAgICAgICAgICAgNTAwMDAwCisvKiA1MCBtcyA9IDUwMDAwIHVzICovCisjZGVmaW5lIExDRF9QT1dFUl9TRVFfVEQxICAgICAgICAgICAgICAgNTAwMDAKKy8qIDAgdXMgKi8KKyNkZWZpbmUgTENEX1BPV0VSX1NFUV9URDIgICAgICAgICAgICAgICAwCisvKiAyMTAgbXMgPSAyMTAwMDAgdXMgKi8KKyNkZWZpbmUgTENEX1BPV0VSX1NFUV9URDMgICAgICAgICAgICAgICAyMTAwMDAKKy8qIDJeMTAgKiAoMS8xNC4zMTgxOE0pID0gNzEuNDc1IHVzIChLNDAwLnJldkEpICovCisjZGVmaW5lIENMRTI2Nl9QT1dFUl9TRVFfVU5JVCAgICAgICAgICAgNzEKKy8qIDJeMTEgKiAoMS8xNC4zMTgxOE0pID0gMTQyLjk1IHVzIChLNDAwLnJldkIpICovCisjZGVmaW5lIEs4MDBfUE9XRVJfU0VRX1VOSVQgICAgICAgICAgICAgMTQyCisvKiAyXjEzICogKDEvMTQuMzE4MThNKSA9IDU3Mi4xIHVzICovCisjZGVmaW5lIFA4ODBfUE9XRVJfU0VRX1VOSVQgICAgICAgICAgICAgNTcyCisKKyNkZWZpbmUgQ0xFMjY2X1BPV0VSX1NFUV9GT1JNVUxBKHgpICAgICAoKHgpL0NMRTI2Nl9QT1dFUl9TRVFfVU5JVCkKKyNkZWZpbmUgSzgwMF9QT1dFUl9TRVFfRk9STVVMQSh4KSAgICAgICAoKHgpL0s4MDBfUE9XRVJfU0VRX1VOSVQpCisjZGVmaW5lIFA4ODBfUE9XRVJfU0VRX0ZPUk1VTEEoeCkgICAgICAgKCh4KS9QODgwX1BPV0VSX1NFUV9VTklUKQorCisvKiBsb2NhdGlvbjoge0NSOEIsMCw3fSx7Q1I4RiwwLDN9ICovCisjZGVmaW5lIExDRF9QT1dFUl9TRVFfVEQwX1JFR19OVU0gICAgICAgMgorLyogbG9jYXRpb246IHtDUjhDLDAsN30se0NSOEYsNCw3fSAqLworI2RlZmluZSBMQ0RfUE9XRVJfU0VRX1REMV9SRUdfTlVNICAgICAgIDIKKy8qIGxvY2F0aW9uOiB7Q1I4RCwwLDd9LHtDUjkwLDAsM30gKi8KKyNkZWZpbmUgTENEX1BPV0VSX1NFUV9URDJfUkVHX05VTSAgICAgICAyCisvKiBsb2NhdGlvbjoge0NSOEUsMCw3fSx7Q1I5MCw0LDd9ICovCisjZGVmaW5lIExDRF9QT1dFUl9TRVFfVEQzX1JFR19OVU0gICAgICAgMgorCisvKiBMQ0QgU2NhbGluZyBmYWN0b3IqLworLyogeDogaW5kaWNhdGUgc2V0dGluZyBob3Jpem9udGFsIHNpemUqLworLyogeTogaW5kaWNhdGUgcGFuZWwgaG9yaXpvbnRhbCBzaXplKi8KKworLyogSG9yaXpvbnRhbCBzY2FsaW5nIGZhY3RvciAxMCBiaXRzICgyXjEwKSAqLworI2RlZmluZSBDTEUyNjZfTENEX0hPUl9TQ0ZfRk9STVVMQSh4LCB5KSAgICgoKHgtMSkqMTAyNCkvKHktMSkpCisvKiBWZXJ0aWNhbCBzY2FsaW5nIGZhY3RvciAxMCBiaXRzICgyXjEwKSAqLworI2RlZmluZSBDTEUyNjZfTENEX1ZFUl9TQ0ZfRk9STVVMQSh4LCB5KSAgICgoKHgtMSkqMTAyNCkvKHktMSkpCisvKiBIb3Jpem9udGFsIHNjYWxpbmcgZmFjdG9yIDEwIGJpdHMgKDJeMTIpICovCisjZGVmaW5lIEs4MDBfTENEX0hPUl9TQ0ZfRk9STVVMQSh4LCB5KSAgICAgKCgoeC0xKSo0MDk2KS8oeS0xKSkKKy8qIFZlcnRpY2FsIHNjYWxpbmcgZmFjdG9yIDEwIGJpdHMgKDJeMTEpICovCisjZGVmaW5lIEs4MDBfTENEX1ZFUl9TQ0ZfRk9STVVMQSh4LCB5KSAgICAgKCgoeC0xKSoyMDQ4KS8oeS0xKSkKKworLyogbG9jYXRpb246IHtDUjlGLDAsMX0se0NSNzcsMCw3fSx7Q1I3OSw0LDV9ICovCisjZGVmaW5lIExDRF9IT1JfU0NBTElOR19GQUNUT1JfUkVHX05VTSAgMworLyogbG9jYXRpb246IHtDUjc5LDMsM30se0NSNzgsMCw3fSx7Q1I3OSw2LDd9ICovCisjZGVmaW5lIExDRF9WRVJfU0NBTElOR19GQUNUT1JfUkVHX05VTSAgMworLyogbG9jYXRpb246IHtDUjc3LDAsN30se0NSNzksNCw1fSAqLworI2RlZmluZSBMQ0RfSE9SX1NDQUxJTkdfRkFDVE9SX1JFR19OVU1fQ0xFICAyCisvKiBsb2NhdGlvbjoge0NSNzgsMCw3fSx7Q1I3OSw2LDd9ICovCisjZGVmaW5lIExDRF9WRVJfU0NBTElOR19GQUNUT1JfUkVHX05VTV9DTEUgIDIKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqICAgICBEZWZpbmUgSUdBMSBEaXNwbGF5IFRpbWluZyAgICAgICAqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0cnVjdCBpb19yZWdpc3RlciB7CisJdTggaW9fYWRkcjsKKwl1OCBzdGFydF9iaXQ7CisJdTggZW5kX2JpdDsKK307CisKKy8qIElHQTEgSG9yaXpvbnRhbCBUb3RhbCAqLworc3RydWN0IGlnYTFfaG9yX3RvdGFsIHsKKwlpbnQgcmVnX251bTsKKwlzdHJ1Y3QgaW9fcmVnaXN0ZXIgcmVnW0lHQTFfSE9SX1RPVEFMX1JFR19OVU1dOworfTsKKworLyogSUdBMSBIb3Jpem9udGFsIEFkZHJlc3NhYmxlIFZpZGVvICovCitzdHJ1Y3QgaWdhMV9ob3JfYWRkciB7CisJaW50IHJlZ19udW07CisJc3RydWN0IGlvX3JlZ2lzdGVyIHJlZ1tJR0ExX0hPUl9BRERSX1JFR19OVU1dOworfTsKKworLyogSUdBMSBIb3Jpem9udGFsIEJsYW5rIFN0YXJ0ICovCitzdHJ1Y3QgaWdhMV9ob3JfYmxhbmtfc3RhcnQgeworCWludCByZWdfbnVtOworCXN0cnVjdCBpb19yZWdpc3RlciByZWdbSUdBMV9IT1JfQkxBTktfU1RBUlRfUkVHX05VTV07Cit9OworCisvKiBJR0ExIEhvcml6b250YWwgQmxhbmsgRW5kICovCitzdHJ1Y3QgaWdhMV9ob3JfYmxhbmtfZW5kIHsKKwlpbnQgcmVnX251bTsKKwlzdHJ1Y3QgaW9fcmVnaXN0ZXIgcmVnW0lHQTFfSE9SX0JMQU5LX0VORF9SRUdfTlVNXTsKK307CisKKy8qIElHQTEgSG9yaXpvbnRhbCBTeW5jIFN0YXJ0ICovCitzdHJ1Y3QgaWdhMV9ob3Jfc3luY19zdGFydCB7CisJaW50IHJlZ19udW07CisJc3RydWN0IGlvX3JlZ2lzdGVyIHJlZ1tJR0ExX0hPUl9TWU5DX1NUQVJUX1JFR19OVU1dOworfTsKKworLyogSUdBMSBIb3Jpem9udGFsIFN5bmMgRW5kICovCitzdHJ1Y3QgaWdhMV9ob3Jfc3luY19lbmQgeworCWludCByZWdfbnVtOworCXN0cnVjdCBpb19yZWdpc3RlciByZWdbSUdBMV9IT1JfU1lOQ19FTkRfUkVHX05VTV07Cit9OworCisvKiBJR0ExIFZlcnRpY2FsIFRvdGFsICovCitzdHJ1Y3QgaWdhMV92ZXJfdG90YWwgeworCWludCByZWdfbnVtOworCXN0cnVjdCBpb19yZWdpc3RlciByZWdbSUdBMV9WRVJfVE9UQUxfUkVHX05VTV07Cit9OworCisvKiBJR0ExIFZlcnRpY2FsIEFkZHJlc3NhYmxlIFZpZGVvICovCitzdHJ1Y3QgaWdhMV92ZXJfYWRkciB7CisJaW50IHJlZ19udW07CisJc3RydWN0IGlvX3JlZ2lzdGVyIHJlZ1tJR0ExX1ZFUl9BRERSX1JFR19OVU1dOworfTsKKworLyogSUdBMSBWZXJ0aWNhbCBCbGFuayBTdGFydCAqLworc3RydWN0IGlnYTFfdmVyX2JsYW5rX3N0YXJ0IHsKKwlpbnQgcmVnX251bTsKKwlzdHJ1Y3QgaW9fcmVnaXN0ZXIgcmVnW0lHQTFfVkVSX0JMQU5LX1NUQVJUX1JFR19OVU1dOworfTsKKworLyogSUdBMSBWZXJ0aWNhbCBCbGFuayBFbmQgKi8KK3N0cnVjdCBpZ2ExX3Zlcl9ibGFua19lbmQgeworCWludCByZWdfbnVtOworCXN0cnVjdCBpb19yZWdpc3RlciByZWdbSUdBMV9WRVJfQkxBTktfRU5EX1JFR19OVU1dOworfTsKKworLyogSUdBMSBWZXJ0aWNhbCBTeW5jIFN0YXJ0ICovCitzdHJ1Y3QgaWdhMV92ZXJfc3luY19zdGFydCB7CisJaW50IHJlZ19udW07CisJc3RydWN0IGlvX3JlZ2lzdGVyIHJlZ1tJR0ExX1ZFUl9TWU5DX1NUQVJUX1JFR19OVU1dOworfTsKKworLyogSUdBMSBWZXJ0aWNhbCBTeW5jIEVuZCAqLworc3RydWN0IGlnYTFfdmVyX3N5bmNfZW5kIHsKKwlpbnQgcmVnX251bTsKKwlzdHJ1Y3QgaW9fcmVnaXN0ZXIgcmVnW0lHQTFfVkVSX1NZTkNfRU5EX1JFR19OVU1dOworfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqKiAgICAgIERlZmluZSBJR0EyIFNoYWRvdyBEaXNwbGF5IFRpbWluZyAgICAgICAgICoqKioKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBJR0EyIFNoYWRvdyBIb3Jpem9udGFsIFRvdGFsICovCitzdHJ1Y3QgaWdhMl9zaGFkb3dfaG9yX3RvdGFsIHsKKwlpbnQgcmVnX251bTsKKwlzdHJ1Y3QgaW9fcmVnaXN0ZXIgcmVnW0lHQTJfU0hBRE9XX0hPUl9UT1RBTF9SRUdfTlVNXTsKK307CisKKy8qIElHQTIgU2hhZG93IEhvcml6b250YWwgQmxhbmsgRW5kICovCitzdHJ1Y3QgaWdhMl9zaGFkb3dfaG9yX2JsYW5rX2VuZCB7CisJaW50IHJlZ19udW07CisJc3RydWN0IGlvX3JlZ2lzdGVyIHJlZ1tJR0EyX1NIQURPV19IT1JfQkxBTktfRU5EX1JFR19OVU1dOworfTsKKworLyogSUdBMiBTaGFkb3cgVmVydGljYWwgVG90YWwgKi8KK3N0cnVjdCBpZ2EyX3NoYWRvd192ZXJfdG90YWwgeworCWludCByZWdfbnVtOworCXN0cnVjdCBpb19yZWdpc3RlciByZWdbSUdBMl9TSEFET1dfVkVSX1RPVEFMX1JFR19OVU1dOworfTsKKworLyogSUdBMiBTaGFkb3cgVmVydGljYWwgQWRkcmVzc2FibGUgVmlkZW8gKi8KK3N0cnVjdCBpZ2EyX3NoYWRvd192ZXJfYWRkciB7CisJaW50IHJlZ19udW07CisJc3RydWN0IGlvX3JlZ2lzdGVyIHJlZ1tJR0EyX1NIQURPV19WRVJfQUREUl9SRUdfTlVNXTsKK307CisKKy8qIElHQTIgU2hhZG93IFZlcnRpY2FsIEJsYW5rIFN0YXJ0ICovCitzdHJ1Y3QgaWdhMl9zaGFkb3dfdmVyX2JsYW5rX3N0YXJ0IHsKKwlpbnQgcmVnX251bTsKKwlzdHJ1Y3QgaW9fcmVnaXN0ZXIgcmVnW0lHQTJfU0hBRE9XX1ZFUl9CTEFOS19TVEFSVF9SRUdfTlVNXTsKK307CisKKy8qIElHQTIgU2hhZG93IFZlcnRpY2FsIEJsYW5rIEVuZCAqLworc3RydWN0IGlnYTJfc2hhZG93X3Zlcl9ibGFua19lbmQgeworCWludCByZWdfbnVtOworCXN0cnVjdCBpb19yZWdpc3RlciByZWdbSUdBMl9TSEFET1dfVkVSX0JMQU5LX0VORF9SRUdfTlVNXTsKK307CisKKy8qIElHQTIgU2hhZG93IFZlcnRpY2FsIFN5bmMgU3RhcnQgKi8KK3N0cnVjdCBpZ2EyX3NoYWRvd192ZXJfc3luY19zdGFydCB7CisJaW50IHJlZ19udW07CisJc3RydWN0IGlvX3JlZ2lzdGVyIHJlZ1tJR0EyX1NIQURPV19WRVJfU1lOQ19TVEFSVF9SRUdfTlVNXTsKK307CisKKy8qIElHQTIgU2hhZG93IFZlcnRpY2FsIFN5bmMgRW5kICovCitzdHJ1Y3QgaWdhMl9zaGFkb3dfdmVyX3N5bmNfZW5kIHsKKwlpbnQgcmVnX251bTsKKwlzdHJ1Y3QgaW9fcmVnaXN0ZXIgcmVnW0lHQTJfU0hBRE9XX1ZFUl9TWU5DX0VORF9SRUdfTlVNXTsKK307CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiogICAgICBEZWZpbmUgSUdBMiBEaXNwbGF5IFRpbWluZyAgICAgICAgICAgICAgICAqKioqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIElHQTIgSG9yaXpvbnRhbCBUb3RhbCAqLworc3RydWN0IGlnYTJfaG9yX3RvdGFsIHsKKwlpbnQgcmVnX251bTsKKwlzdHJ1Y3QgaW9fcmVnaXN0ZXIgcmVnW0lHQTJfSE9SX1RPVEFMX1JFR19OVU1dOworfTsKKworLyogSUdBMiBIb3Jpem9udGFsIEFkZHJlc3NhYmxlIFZpZGVvICovCitzdHJ1Y3QgaWdhMl9ob3JfYWRkciB7CisJaW50IHJlZ19udW07CisJc3RydWN0IGlvX3JlZ2lzdGVyIHJlZ1tJR0EyX0hPUl9BRERSX1JFR19OVU1dOworfTsKKworLyogSUdBMiBIb3Jpem9udGFsIEJsYW5rIFN0YXJ0ICovCitzdHJ1Y3QgaWdhMl9ob3JfYmxhbmtfc3RhcnQgeworCWludCByZWdfbnVtOworCXN0cnVjdCBpb19yZWdpc3RlciByZWdbSUdBMl9IT1JfQkxBTktfU1RBUlRfUkVHX05VTV07Cit9OworCisvKiBJR0EyIEhvcml6b250YWwgQmxhbmsgRW5kICovCitzdHJ1Y3QgaWdhMl9ob3JfYmxhbmtfZW5kIHsKKwlpbnQgcmVnX251bTsKKwlzdHJ1Y3QgaW9fcmVnaXN0ZXIgcmVnW0lHQTJfSE9SX0JMQU5LX0VORF9SRUdfTlVNXTsKK307CisKKy8qIElHQTIgSG9yaXpvbnRhbCBTeW5jIFN0YXJ0ICovCitzdHJ1Y3QgaWdhMl9ob3Jfc3luY19zdGFydCB7CisJaW50IHJlZ19udW07CisJc3RydWN0IGlvX3JlZ2lzdGVyIHJlZ1tJR0EyX0hPUl9TWU5DX1NUQVJUX1JFR19OVU1dOworfTsKKworLyogSUdBMiBIb3Jpem9udGFsIFN5bmMgRW5kICovCitzdHJ1Y3QgaWdhMl9ob3Jfc3luY19lbmQgeworCWludCByZWdfbnVtOworCXN0cnVjdCBpb19yZWdpc3RlciByZWdbSUdBMl9IT1JfU1lOQ19FTkRfUkVHX05VTV07Cit9OworCisvKiBJR0EyIFZlcnRpY2FsIFRvdGFsICovCitzdHJ1Y3QgaWdhMl92ZXJfdG90YWwgeworCWludCByZWdfbnVtOworCXN0cnVjdCBpb19yZWdpc3RlciByZWdbSUdBMl9WRVJfVE9UQUxfUkVHX05VTV07Cit9OworCisvKiBJR0EyIFZlcnRpY2FsIEFkZHJlc3NhYmxlIFZpZGVvICovCitzdHJ1Y3QgaWdhMl92ZXJfYWRkciB7CisJaW50IHJlZ19udW07CisJc3RydWN0IGlvX3JlZ2lzdGVyIHJlZ1tJR0EyX1ZFUl9BRERSX1JFR19OVU1dOworfTsKKworLyogSUdBMiBWZXJ0aWNhbCBCbGFuayBTdGFydCAqLworc3RydWN0IGlnYTJfdmVyX2JsYW5rX3N0YXJ0IHsKKwlpbnQgcmVnX251bTsKKwlzdHJ1Y3QgaW9fcmVnaXN0ZXIgcmVnW0lHQTJfVkVSX0JMQU5LX1NUQVJUX1JFR19OVU1dOworfTsKKworLyogSUdBMiBWZXJ0aWNhbCBCbGFuayBFbmQgKi8KK3N0cnVjdCBpZ2EyX3Zlcl9ibGFua19lbmQgeworCWludCByZWdfbnVtOworCXN0cnVjdCBpb19yZWdpc3RlciByZWdbSUdBMl9WRVJfQkxBTktfRU5EX1JFR19OVU1dOworfTsKKworLyogSUdBMiBWZXJ0aWNhbCBTeW5jIFN0YXJ0ICovCitzdHJ1Y3QgaWdhMl92ZXJfc3luY19zdGFydCB7CisJaW50IHJlZ19udW07CisJc3RydWN0IGlvX3JlZ2lzdGVyIHJlZ1tJR0EyX1ZFUl9TWU5DX1NUQVJUX1JFR19OVU1dOworfTsKKworLyogSUdBMiBWZXJ0aWNhbCBTeW5jIEVuZCAqLworc3RydWN0IGlnYTJfdmVyX3N5bmNfZW5kIHsKKwlpbnQgcmVnX251bTsKKwlzdHJ1Y3QgaW9fcmVnaXN0ZXIgcmVnW0lHQTJfVkVSX1NZTkNfRU5EX1JFR19OVU1dOworfTsKKworLyogSUdBMSBPZmZzZXQgUmVnaXN0ZXIgKi8KK3N0cnVjdCBpZ2ExX29mZnNldCB7CisJaW50IHJlZ19udW07CisJc3RydWN0IGlvX3JlZ2lzdGVyIHJlZ1tJR0ExX09GRlNFVF9SRUdfTlVNXTsKK307CisKKy8qIElHQTIgT2Zmc2V0IFJlZ2lzdGVyICovCitzdHJ1Y3QgaWdhMl9vZmZzZXQgeworCWludCByZWdfbnVtOworCXN0cnVjdCBpb19yZWdpc3RlciByZWdbSUdBMl9PRkZTRVRfUkVHX05VTV07Cit9OworCitzdHJ1Y3Qgb2Zmc2V0IHsKKwlzdHJ1Y3QgaWdhMV9vZmZzZXQgaWdhMV9vZmZzZXRfcmVnOworCXN0cnVjdCBpZ2EyX29mZnNldCBpZ2EyX29mZnNldF9yZWc7Cit9OworCisvKiBJR0ExIEZldGNoIENvdW50IFJlZ2lzdGVyICovCitzdHJ1Y3QgaWdhMV9mZXRjaF9jb3VudCB7CisJaW50IHJlZ19udW07CisJc3RydWN0IGlvX3JlZ2lzdGVyIHJlZ1tJR0ExX0ZFVENIX0NPVU5UX1JFR19OVU1dOworfTsKKworLyogSUdBMiBGZXRjaCBDb3VudCBSZWdpc3RlciAqLworc3RydWN0IGlnYTJfZmV0Y2hfY291bnQgeworCWludCByZWdfbnVtOworCXN0cnVjdCBpb19yZWdpc3RlciByZWdbSUdBMl9GRVRDSF9DT1VOVF9SRUdfTlVNXTsKK307CisKK3N0cnVjdCBmZXRjaF9jb3VudCB7CisJc3RydWN0IGlnYTFfZmV0Y2hfY291bnQgaWdhMV9mZXRjaF9jb3VudF9yZWc7CisJc3RydWN0IGlnYTJfZmV0Y2hfY291bnQgaWdhMl9mZXRjaF9jb3VudF9yZWc7Cit9OworCisvKiBTdGFydGluZyBBZGRyZXNzIFJlZ2lzdGVyICovCitzdHJ1Y3QgaWdhMV9zdGFydGluZ19hZGRyIHsKKwlpbnQgcmVnX251bTsKKwlzdHJ1Y3QgaW9fcmVnaXN0ZXIgcmVnW0lHQTFfU1RBUlRJTkdfQUREUl9SRUdfTlVNXTsKK307CisKK3N0cnVjdCBpZ2EyX3N0YXJ0aW5nX2FkZHIgeworCWludCByZWdfbnVtOworCXN0cnVjdCBpb19yZWdpc3RlciByZWdbSUdBMl9TVEFSVElOR19BRERSX1JFR19OVU1dOworfTsKKworc3RydWN0IHN0YXJ0aW5nX2FkZHIgeworCXN0cnVjdCBpZ2ExX3N0YXJ0aW5nX2FkZHIgaWdhMV9zdGFydGluZ19hZGRyX3JlZzsKKwlzdHJ1Y3QgaWdhMl9zdGFydGluZ19hZGRyIGlnYTJfc3RhcnRpbmdfYWRkcl9yZWc7Cit9OworCisvKiBMQ0QgUG93ZXIgU2VxdWVuY2UgVGltZXIgKi8KK3N0cnVjdCBsY2RfcHdkX3NlcV90ZDAgeworCWludCByZWdfbnVtOworCXN0cnVjdCBpb19yZWdpc3RlciByZWdbTENEX1BPV0VSX1NFUV9URDBfUkVHX05VTV07Cit9OworCitzdHJ1Y3QgbGNkX3B3ZF9zZXFfdGQxIHsKKwlpbnQgcmVnX251bTsKKwlzdHJ1Y3QgaW9fcmVnaXN0ZXIgcmVnW0xDRF9QT1dFUl9TRVFfVEQxX1JFR19OVU1dOworfTsKKworc3RydWN0IGxjZF9wd2Rfc2VxX3RkMiB7CisJaW50IHJlZ19udW07CisJc3RydWN0IGlvX3JlZ2lzdGVyIHJlZ1tMQ0RfUE9XRVJfU0VRX1REMl9SRUdfTlVNXTsKK307CisKK3N0cnVjdCBsY2RfcHdkX3NlcV90ZDMgeworCWludCByZWdfbnVtOworCXN0cnVjdCBpb19yZWdpc3RlciByZWdbTENEX1BPV0VSX1NFUV9URDNfUkVHX05VTV07Cit9OworCitzdHJ1Y3QgX2xjZF9wd2Rfc2VxX3RpbWVyIHsKKwlzdHJ1Y3QgbGNkX3B3ZF9zZXFfdGQwIHRkMDsKKwlzdHJ1Y3QgbGNkX3B3ZF9zZXFfdGQxIHRkMTsKKwlzdHJ1Y3QgbGNkX3B3ZF9zZXFfdGQyIHRkMjsKKwlzdHJ1Y3QgbGNkX3B3ZF9zZXFfdGQzIHRkMzsKK307CisKKy8qIExDRCBTY2FsaW5nIEZhY3RvciAqLworc3RydWN0IF9sY2RfaG9yX3NjYWxpbmdfZmFjdG9yIHsKKwlpbnQgcmVnX251bTsKKwlzdHJ1Y3QgaW9fcmVnaXN0ZXIgcmVnW0xDRF9IT1JfU0NBTElOR19GQUNUT1JfUkVHX05VTV07Cit9OworCitzdHJ1Y3QgX2xjZF92ZXJfc2NhbGluZ19mYWN0b3IgeworCWludCByZWdfbnVtOworCXN0cnVjdCBpb19yZWdpc3RlciByZWdbTENEX1ZFUl9TQ0FMSU5HX0ZBQ1RPUl9SRUdfTlVNXTsKK307CisKK3N0cnVjdCBfbGNkX3NjYWxpbmdfZmFjdG9yIHsKKwlzdHJ1Y3QgX2xjZF9ob3Jfc2NhbGluZ19mYWN0b3IgbGNkX2hvcl9zY2FsaW5nX2ZhY3RvcjsKKwlzdHJ1Y3QgX2xjZF92ZXJfc2NhbGluZ19mYWN0b3IgbGNkX3Zlcl9zY2FsaW5nX2ZhY3RvcjsKK307CisKK3N0cnVjdCBwbGxfbWFwIHsKKwl1MzIgY2xrOworCXUzMiBjbGUyNjZfcGxsOworCXUzMiBrODAwX3BsbDsKKwl1MzIgY3g3MDBfcGxsOworfTsKKworc3RydWN0IHJnYkxVVCB7CisJdTggcmVkOworCXU4IGdyZWVuOworCXU4IGJsdWU7Cit9OworCitzdHJ1Y3QgbGNkX3B3ZF9zZXFfdGltZXIgeworCXUxNiB0ZDA7CisJdTE2IHRkMTsKKwl1MTYgdGQyOworCXUxNiB0ZDM7Cit9OworCisvKiBEaXNwbGF5IEZJRk8gUmVsYXRpb24gUmVnaXN0ZXJzKi8KK3N0cnVjdCBpZ2ExX2ZpZm9fZGVwdGhfc2VsZWN0IHsKKwlpbnQgcmVnX251bTsKKwlzdHJ1Y3QgaW9fcmVnaXN0ZXIgcmVnW0lHQTFfRklGT19ERVBUSF9TRUxFQ1RfUkVHX05VTV07Cit9OworCitzdHJ1Y3QgaWdhMV9maWZvX3RocmVzaG9sZF9zZWxlY3QgeworCWludCByZWdfbnVtOworCXN0cnVjdCBpb19yZWdpc3RlciByZWdbSUdBMV9GSUZPX1RIUkVTSE9MRF9SRUdfTlVNXTsKK307CisKK3N0cnVjdCBpZ2ExX2ZpZm9faGlnaF90aHJlc2hvbGRfc2VsZWN0IHsKKwlpbnQgcmVnX251bTsKKwlzdHJ1Y3QgaW9fcmVnaXN0ZXIgcmVnW0lHQTFfRklGT19ISUdIX1RIUkVTSE9MRF9SRUdfTlVNXTsKK307CisKK3N0cnVjdCBpZ2ExX2Rpc3BsYXlfcXVldWVfZXhwaXJlX251bSB7CisJaW50IHJlZ19udW07CisJc3RydWN0IGlvX3JlZ2lzdGVyIHJlZ1tJR0ExX0RJU1BMQVlfUVVFVUVfRVhQSVJFX05VTV9SRUdfTlVNXTsKK307CisKK3N0cnVjdCBpZ2EyX2ZpZm9fZGVwdGhfc2VsZWN0IHsKKwlpbnQgcmVnX251bTsKKwlzdHJ1Y3QgaW9fcmVnaXN0ZXIgcmVnW0lHQTJfRklGT19ERVBUSF9TRUxFQ1RfUkVHX05VTV07Cit9OworCitzdHJ1Y3QgaWdhMl9maWZvX3RocmVzaG9sZF9zZWxlY3QgeworCWludCByZWdfbnVtOworCXN0cnVjdCBpb19yZWdpc3RlciByZWdbSUdBMl9GSUZPX1RIUkVTSE9MRF9SRUdfTlVNXTsKK307CisKK3N0cnVjdCBpZ2EyX2ZpZm9faGlnaF90aHJlc2hvbGRfc2VsZWN0IHsKKwlpbnQgcmVnX251bTsKKwlzdHJ1Y3QgaW9fcmVnaXN0ZXIgcmVnW0lHQTJfRklGT19ISUdIX1RIUkVTSE9MRF9SRUdfTlVNXTsKK307CisKK3N0cnVjdCBpZ2EyX2Rpc3BsYXlfcXVldWVfZXhwaXJlX251bSB7CisJaW50IHJlZ19udW07CisJc3RydWN0IGlvX3JlZ2lzdGVyIHJlZ1tJR0EyX0RJU1BMQVlfUVVFVUVfRVhQSVJFX05VTV9SRUdfTlVNXTsKK307CisKK3N0cnVjdCBmaWZvX2RlcHRoX3NlbGVjdCB7CisJc3RydWN0IGlnYTFfZmlmb19kZXB0aF9zZWxlY3QgaWdhMV9maWZvX2RlcHRoX3NlbGVjdF9yZWc7CisJc3RydWN0IGlnYTJfZmlmb19kZXB0aF9zZWxlY3QgaWdhMl9maWZvX2RlcHRoX3NlbGVjdF9yZWc7Cit9OworCitzdHJ1Y3QgZmlmb190aHJlc2hvbGRfc2VsZWN0IHsKKwlzdHJ1Y3QgaWdhMV9maWZvX3RocmVzaG9sZF9zZWxlY3QgaWdhMV9maWZvX3RocmVzaG9sZF9zZWxlY3RfcmVnOworCXN0cnVjdCBpZ2EyX2ZpZm9fdGhyZXNob2xkX3NlbGVjdCBpZ2EyX2ZpZm9fdGhyZXNob2xkX3NlbGVjdF9yZWc7Cit9OworCitzdHJ1Y3QgZmlmb19oaWdoX3RocmVzaG9sZF9zZWxlY3QgeworCXN0cnVjdCBpZ2ExX2ZpZm9faGlnaF90aHJlc2hvbGRfc2VsZWN0CisJIGlnYTFfZmlmb19oaWdoX3RocmVzaG9sZF9zZWxlY3RfcmVnOworCXN0cnVjdCBpZ2EyX2ZpZm9faGlnaF90aHJlc2hvbGRfc2VsZWN0CisJIGlnYTJfZmlmb19oaWdoX3RocmVzaG9sZF9zZWxlY3RfcmVnOworfTsKKworc3RydWN0IGRpc3BsYXlfcXVldWVfZXhwaXJlX251bSB7CisJc3RydWN0IGlnYTFfZGlzcGxheV9xdWV1ZV9leHBpcmVfbnVtCisJIGlnYTFfZGlzcGxheV9xdWV1ZV9leHBpcmVfbnVtX3JlZzsKKwlzdHJ1Y3QgaWdhMl9kaXNwbGF5X3F1ZXVlX2V4cGlyZV9udW0KKwkgaWdhMl9kaXNwbGF5X3F1ZXVlX2V4cGlyZV9udW1fcmVnOworfTsKKworc3RydWN0IGlnYTFfY3J0Y190aW1pbmcgeworCXN0cnVjdCBpZ2ExX2hvcl90b3RhbCBob3JfdG90YWw7CisJc3RydWN0IGlnYTFfaG9yX2FkZHIgaG9yX2FkZHI7CisJc3RydWN0IGlnYTFfaG9yX2JsYW5rX3N0YXJ0IGhvcl9ibGFua19zdGFydDsKKwlzdHJ1Y3QgaWdhMV9ob3JfYmxhbmtfZW5kIGhvcl9ibGFua19lbmQ7CisJc3RydWN0IGlnYTFfaG9yX3N5bmNfc3RhcnQgaG9yX3N5bmNfc3RhcnQ7CisJc3RydWN0IGlnYTFfaG9yX3N5bmNfZW5kIGhvcl9zeW5jX2VuZDsKKwlzdHJ1Y3QgaWdhMV92ZXJfdG90YWwgdmVyX3RvdGFsOworCXN0cnVjdCBpZ2ExX3Zlcl9hZGRyIHZlcl9hZGRyOworCXN0cnVjdCBpZ2ExX3Zlcl9ibGFua19zdGFydCB2ZXJfYmxhbmtfc3RhcnQ7CisJc3RydWN0IGlnYTFfdmVyX2JsYW5rX2VuZCB2ZXJfYmxhbmtfZW5kOworCXN0cnVjdCBpZ2ExX3Zlcl9zeW5jX3N0YXJ0IHZlcl9zeW5jX3N0YXJ0OworCXN0cnVjdCBpZ2ExX3Zlcl9zeW5jX2VuZCB2ZXJfc3luY19lbmQ7Cit9OworCitzdHJ1Y3QgaWdhMl9zaGFkb3dfY3J0Y190aW1pbmcgeworCXN0cnVjdCBpZ2EyX3NoYWRvd19ob3JfdG90YWwgaG9yX3RvdGFsX3NoYWRvdzsKKwlzdHJ1Y3QgaWdhMl9zaGFkb3dfaG9yX2JsYW5rX2VuZCBob3JfYmxhbmtfZW5kX3NoYWRvdzsKKwlzdHJ1Y3QgaWdhMl9zaGFkb3dfdmVyX3RvdGFsIHZlcl90b3RhbF9zaGFkb3c7CisJc3RydWN0IGlnYTJfc2hhZG93X3Zlcl9hZGRyIHZlcl9hZGRyX3NoYWRvdzsKKwlzdHJ1Y3QgaWdhMl9zaGFkb3dfdmVyX2JsYW5rX3N0YXJ0IHZlcl9ibGFua19zdGFydF9zaGFkb3c7CisJc3RydWN0IGlnYTJfc2hhZG93X3Zlcl9ibGFua19lbmQgdmVyX2JsYW5rX2VuZF9zaGFkb3c7CisJc3RydWN0IGlnYTJfc2hhZG93X3Zlcl9zeW5jX3N0YXJ0IHZlcl9zeW5jX3N0YXJ0X3NoYWRvdzsKKwlzdHJ1Y3QgaWdhMl9zaGFkb3dfdmVyX3N5bmNfZW5kIHZlcl9zeW5jX2VuZF9zaGFkb3c7Cit9OworCitzdHJ1Y3QgaWdhMl9jcnRjX3RpbWluZyB7CisJc3RydWN0IGlnYTJfaG9yX3RvdGFsIGhvcl90b3RhbDsKKwlzdHJ1Y3QgaWdhMl9ob3JfYWRkciBob3JfYWRkcjsKKwlzdHJ1Y3QgaWdhMl9ob3JfYmxhbmtfc3RhcnQgaG9yX2JsYW5rX3N0YXJ0OworCXN0cnVjdCBpZ2EyX2hvcl9ibGFua19lbmQgaG9yX2JsYW5rX2VuZDsKKwlzdHJ1Y3QgaWdhMl9ob3Jfc3luY19zdGFydCBob3Jfc3luY19zdGFydDsKKwlzdHJ1Y3QgaWdhMl9ob3Jfc3luY19lbmQgaG9yX3N5bmNfZW5kOworCXN0cnVjdCBpZ2EyX3Zlcl90b3RhbCB2ZXJfdG90YWw7CisJc3RydWN0IGlnYTJfdmVyX2FkZHIgdmVyX2FkZHI7CisJc3RydWN0IGlnYTJfdmVyX2JsYW5rX3N0YXJ0IHZlcl9ibGFua19zdGFydDsKKwlzdHJ1Y3QgaWdhMl92ZXJfYmxhbmtfZW5kIHZlcl9ibGFua19lbmQ7CisJc3RydWN0IGlnYTJfdmVyX3N5bmNfc3RhcnQgdmVyX3N5bmNfc3RhcnQ7CisJc3RydWN0IGlnYTJfdmVyX3N5bmNfZW5kIHZlcl9zeW5jX2VuZDsKK307CisKKy8qIGRldmljZSBJRCAqLworI2RlZmluZSBDTEUyNjYgICAgICAgICAgICAgIDB4MzEyMworI2RlZmluZSBLTTQwMCAgICAgICAgICAgICAgIDB4MzIwNQorI2RlZmluZSBDTjQwMF9GVU5DVElPTjIgICAgIDB4MjI1OQorI2RlZmluZSBDTjQwMF9GVU5DVElPTjMgICAgIDB4MzI1OQorLyogc3VwcG9ydCBWVDMzMTQgY2hpcHNldCAqLworI2RlZmluZSBDTjcwMF9GVU5DVElPTjIgICAgIDB4MjMxNAorI2RlZmluZSBDTjcwMF9GVU5DVElPTjMgICAgIDB4MzIwOAorLyogVlQzMzI0IGNoaXBzZXQgKi8KKyNkZWZpbmUgQ1g3MDBfRlVOQ1RJT04yICAgICAweDIzMjQKKyNkZWZpbmUgQ1g3MDBfRlVOQ1RJT04zICAgICAweDMzMjQKKy8qIFZUMzIwNCBjaGlwc2V0Ki8KKyNkZWZpbmUgS004MDBfRlVOQ1RJT04zICAgICAgMHgzMjA0CisvKiBWVDMzMzYgY2hpcHNldCovCisjZGVmaW5lIEtNODkwX0ZVTkNUSU9OMyAgICAgIDB4MzMzNgorLyogVlQzMzI3IGNoaXBzZXQqLworI2RlZmluZSBQNE04OTBfRlVOQ1RJT04zICAgICAweDMzMjcKKy8qIFZUMzI5MyBjaGlwc2V0Ki8KKyNkZWZpbmUgQ043NTBfRlVOQ1RJT04zICAgICAweDMyMDgKKy8qIFZUMzM2NCBjaGlwc2V0Ki8KKyNkZWZpbmUgUDRNOTAwX0ZVTkNUSU9OMyAgICAweDMzNjQKKy8qIFZUMzM1MyBjaGlwc2V0Ki8KKyNkZWZpbmUgVlg4MDBfRlVOQ1RJT04zICAgICAweDMzNTMKKworI2RlZmluZSBOVU1fVE9UQUxfUExMX1RBQkxFIEFSUkFZX1NJWkUocGxsX3ZhbHVlKQorCitzdHJ1Y3QgSU9EQVRBIHsKKwl1OCBJbmRleDsKKwl1OCBNYXNrOworCXU4IERhdGE7Cit9OworCitzdHJ1Y3QgcGNpX2RldmljZV9pZF9pbmZvIHsKKwl1MzIgdmVuZG9yOworCXUzMiBkZXZpY2U7CisJdTMyIGNoaXBfaW5kZXg7Cit9OworCitleHRlcm4gdW5zaWduZWQgaW50IHZpYWZiX3NlY29uZF92aXJ0dWFsX3hyZXM7CitleHRlcm4gdW5zaWduZWQgaW50IHZpYWZiX3NlY29uZF9vZmZzZXQ7CitleHRlcm4gaW50IHZpYWZiX3NlY29uZF9zaXplOworZXh0ZXJuIGludCB2aWFmYl9TQU1NX09OOworZXh0ZXJuIGludCB2aWFmYl9kdWFsX2ZiOworZXh0ZXJuIGludCB2aWFmYl9MQ0QyX09OOworZXh0ZXJuIGludCB2aWFmYl9MQ0RfT047CitleHRlcm4gaW50IHZpYWZiX0RWSV9PTjsKK2V4dGVybiBpbnQgdmlhZmJfYWNjZWw7CitleHRlcm4gaW50IHZpYWZiX2hvdHBsdWc7CisKK3ZvaWQgdmlhZmJfd3JpdGVfcmVnX21hc2sodTggaW5kZXgsIGludCBpb19wb3J0LCB1OCBkYXRhLCB1OCBtYXNrKTsKK3ZvaWQgdmlhZmJfc2V0X291dHB1dF9wYXRoKGludCBkZXZpY2UsIGludCBzZXRfaWdhLAorCWludCBvdXRwdXRfaW50ZXJmYWNlKTsKK3ZvaWQgdmlhZmJfZmlsbF9jcnRjX3RpbWluZyhzdHJ1Y3QgY3J0X21vZGVfdGFibGUgKmNydF90YWJsZSwKKwkJICAgICAgaW50IG1vZGVfaW5kZXgsIGludCBicHBfYnl0ZSwgaW50IHNldF9pZ2EpOworCit2b2lkIHZpYWZiX3NldF92Y2xvY2sodTMyIENMSywgaW50IHNldF9pZ2EpOwordm9pZCB2aWFmYl9sb2FkX3JlZyhpbnQgdGltaW5nX3ZhbHVlLCBpbnQgdmlhZmJfbG9hZF9yZWdfbnVtLAorCXN0cnVjdCBpb19yZWdpc3RlciAqcmVnLAorCSAgICAgIGludCBpb190eXBlKTsKK3ZvaWQgdmlhZmJfY3J0X2Rpc2FibGUodm9pZCk7Cit2b2lkIHZpYWZiX2NydF9lbmFibGUodm9pZCk7Cit2b2lkIGluaXRfYWQ5Mzg5KHZvaWQpOworLyogQWNjZXNzIEkvTyBGdW5jdGlvbiAqLwordm9pZCB2aWFmYl93cml0ZV9yZWcodTggaW5kZXgsIHUxNiBpb19wb3J0LCB1OCBkYXRhKTsKK3U4IHZpYWZiX3JlYWRfcmVnKGludCBpb19wb3J0LCB1OCBpbmRleCk7Cit2b2lkIHZpYWZiX2xvY2tfY3J0KHZvaWQpOwordm9pZCB2aWFmYl91bmxvY2tfY3J0KHZvaWQpOwordm9pZCB2aWFmYl9sb2FkX29mZnNldF9yZWcoaW50IGhfYWRkciwgaW50IGJwcF9ieXRlLCBpbnQgc2V0X2lnYSk7Cit2b2lkIHZpYWZiX2xvYWRfZmV0Y2hfY291bnRfcmVnKGludCBoX2FkZHIsIGludCBicHBfYnl0ZSwgaW50IHNldF9pZ2EpOwordm9pZCB2aWFmYl93cml0ZV9yZWd4KHN0cnVjdCBpb19yZWcgUmVnVGFibGVbXSwgaW50IEl0ZW1OdW0pOworc3RydWN0IFZpZGVvTW9kZVRhYmxlICp2aWFmYl9nZXRfbW9kZXRibF9wb2ludGVyKGludCBJbmRleCk7Cit1MzIgdmlhZmJfZ2V0X2Nsa192YWx1ZShpbnQgY2xrKTsKK3ZvaWQgdmlhZmJfbG9hZF9GSUZPX3JlZyhpbnQgc2V0X2lnYSwgaW50IGhvcl9hY3RpdmUsIGludCB2ZXJfYWN0aXZlKTsKK3ZvaWQgdmlhZmJfc2V0X2NvbG9yX2RlcHRoKGludCBicHBfYnl0ZSwgaW50IHNldF9pZ2EpOwordm9pZCB2aWFmYl9zZXRfZHBhX2dmeChpbnQgb3V0cHV0X2ludGVyZmFjZSwgc3RydWN0IEdGWF9EUEFfU0VUVElOR1wKKwkJCQkJKnBfZ2Z4X2RwYV9zZXR0aW5nKTsKKworaW50IHZpYWZiX3NldG1vZGUoaW50IHZtb2RlX2luZGV4LCBpbnQgaG9yX3JlcywgaW50IHZlcl9yZXMsCisJICAgIGludCB2aWRlb19icHAsIGludCB2bW9kZV9pbmRleDEsIGludCBob3JfcmVzMSwKKwkgICAgaW50IHZlcl9yZXMxLCBpbnQgdmlkZW9fYnBwMSk7Cit2b2lkIHZpYWZiX2luaXRfY2hpcF9pbmZvKHZvaWQpOwordm9pZCB2aWFmYl9pbml0X2RhYyhpbnQgc2V0X2lnYSk7CitpbnQgdmlhZmJfZ2V0X3BpeGNsb2NrKGludCBocmVzLCBpbnQgdnJlcywgaW50IHZtb2RlX3JlZnJlc2gpOworaW50IHZpYWZiX2dldF9yZWZyZXNoKGludCBocmVzLCBpbnQgdnJlcywgdTMyIGZsb2F0X3JlZnJlc2gpOwordm9pZCB2aWFmYl91cGRhdGVfZGV2aWNlX3NldHRpbmcoaW50IGhyZXMsIGludCB2cmVzLCBpbnQgYnBwLAorCQkJICAgaW50IHZtb2RlX3JlZnJlc2gsIGludCBmbGFnKTsKK3ZvaWQgdmlhZmJfZ2V0X21taW9faW5mbyh1bnNpZ25lZCBsb25nICptbWlvX2Jhc2UsCisJdW5zaWduZWQgbG9uZyAqbW1pb19sZW4pOworCit2b2lkIHZpYWZiX3NldF9pZ2FfcGF0aCh2b2lkKTsKK3ZvaWQgdmlhZmJfc2V0X3N0YXJ0X2FkZHIodm9pZCk7Cit2b2lkIHZpYWZiX2dldF9mYl9pbmZvKHVuc2lnbmVkIGludCAqZmJfYmFzZSwgdW5zaWduZWQgaW50ICpmYl9sZW4pOworCisjZW5kaWYgLyogX19IV19IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vdmlhL2lmYWNlLmMgYi9kcml2ZXJzL3ZpZGVvL3ZpYS9pZmFjZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE1NzA2MzYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3ZpZGVvL3ZpYS9pZmFjZS5jCkBAIC0wLDAgKzEsNzggQEAKKy8qCisgKiBDb3B5cmlnaHQgMTk5OC0yMDA4IFZJQSBUZWNobm9sb2dpZXMsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAyMDAxLTIwMDggUzMgR3JhcGhpY3MsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKworICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOworICogZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVElFUyBPUiBSRVBSRVNFTlRBVElPTlM7IHdpdGhvdXQgZXZlbgorICogdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS5TZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sCisgKiA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICovCisKKyNpbmNsdWRlICJnbG9iYWwuaCIKKworLyogR2V0IGZyYW1lIGJ1ZmZlciBzaXplIGZyb20gVkdBIEJJT1MgKi8KKwordW5zaWduZWQgaW50IHZpYWZiX2dldF9tZW1zaXplKHZvaWQpCit7CisJdW5zaWduZWQgaW50IG07CisKKwkvKiBJZiBtZW1vcnkgc2l6ZSBwcm92aWRlZCBieSB1c2VyICovCisJaWYgKHZpYWZiX21lbXNpemUpCisJCW0gPSB2aWFmYl9tZW1zaXplICogTWI7CisJZWxzZSB7CisJCW0gPSAodW5zaWduZWQgaW50KXZpYWZiX3JlYWRfcmVnKFZJQVNSLCBTUjM5KTsKKwkJbSA9IG0gKiAoNCAqIE1iKTsKKworCQlpZiAoKG0gPCAoMTYgKiBNYikpIHx8IChtID4gKDY0ICogTWIpKSkKKwkJCW0gPSAxNiAqIE1iOworCX0KKwlERUJVR19NU0coS0VSTl9JTkZPICJmcmFtZWJ1ZmZlciBzaXplID0gJWQgTWJcbiIsIG0gLyBNYik7CisJcmV0dXJuIG07Cit9CisKKy8qIEdldCBWaWRlbyBCdWZmZXIgU3RhcnRpbmcgUGh5c2ljYWwgQWRkcmVzcyhiYWNrIGRvb3IpKi8KKwordW5zaWduZWQgbG9uZyB2aWFmYl9nZXRfdmlkZW9idWZfYWRkcih2b2lkKQoreworCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gTlVMTDsKKwl1bnNpZ25lZCBjaGFyIHN5c19tZW07CisJdW5zaWduZWQgY2hhciB2aWRlb19tZW07CisJdW5zaWduZWQgbG9uZyBzeXNfbWVtX3NpemU7CisJdW5zaWduZWQgbG9uZyB2aWRlb19tZW1fc2l6ZTsKKwkvKnN5c3RlbSBtZW1vcnkgPSAyNTYgTUIsIHZpZGVvIG1lbW9yeSA2NCBNQiAqLworCXVuc2lnbmVkIGxvbmcgdm1lbV9zdGFydGluZ19hZHIgPSAweDBDMDAwMDAwOworCisJcGRldiA9CisJICAgIChzdHJ1Y3QgcGNpX2RldiAqKXBjaV9nZXRfZGV2aWNlKFZJQV9LODAwX0JSSURHRV9WSUQsCisJCQkJCSAgICAgVklBX0s4MDBfQlJJREdFX0RJRCwgTlVMTCk7CisJaWYgKHBkZXYgIT0gTlVMTCkgeworCQlwY2lfcmVhZF9jb25maWdfYnl0ZShwZGV2LCBWSUFfSzgwMF9TWVNURU1fTUVNT1JZX1JFRywKKwkJCQkgICAgICZzeXNfbWVtKTsKKwkJcGNpX3JlYWRfY29uZmlnX2J5dGUocGRldiwgVklBX0s4MDBfVklERU9fTUVNT1JZX1JFRywKKwkJCQkgICAgICZ2aWRlb19tZW0pOworCQl2aWRlb19tZW0gPSAodmlkZW9fbWVtICYgMHg3MCkgPj4gNDsKKwkJc3lzX21lbV9zaXplID0gKCh1bnNpZ25lZCBsb25nKXN5c19tZW0pIDw8IDI0OworCQlpZiAodmlkZW9fbWVtICE9IDApCisJCQl2aWRlb19tZW1fc2l6ZSA9ICgxIDw8ICh2aWRlb19tZW0pKSAqIDEwMjQgKiAxMDI0OworCQllbHNlCisJCQl2aWRlb19tZW1fc2l6ZSA9IDA7CisKKwkJdm1lbV9zdGFydGluZ19hZHIgPSBzeXNfbWVtX3NpemUgLSB2aWRlb19tZW1fc2l6ZTsKKwkJcGNpX2Rldl9wdXQocGRldik7CisJfQorCisJREVCVUdfTVNHKEtFUk5fSU5GTyAiVmlkZW8gTWVtb3J5IFN0YXJ0aW5nIEFkZHJlc3MgPSAlbHggXG4iLAorCQkgIHZtZW1fc3RhcnRpbmdfYWRyKTsKKwlyZXR1cm4gdm1lbV9zdGFydGluZ19hZHI7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3ZpYS9pZmFjZS5oIGIvZHJpdmVycy92aWRlby92aWEvaWZhY2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OTBlYzNlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy92aWRlby92aWEvaWZhY2UuaApAQCAtMCwwICsxLDM4IEBACisvKgorICogQ29weXJpZ2h0IDE5OTgtMjAwOCBWSUEgVGVjaG5vbG9naWVzLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgMjAwMS0yMDA4IFMzIEdyYXBoaWNzLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKKyAqIGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRJRVMgT1IgUkVQUkVTRU5UQVRJT05TOyB3aXRob3V0IGV2ZW4KKyAqIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UuU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogZm9yIG1vcmUgZGV0YWlscy4KKworICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLAorICogNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisjaWZuZGVmIF9fSUZBQ0VfSF9fCisjZGVmaW5lIF9fSUZBQ0VfSF9fCisKKyNkZWZpbmUgS2IgICgxMDI0KQorI2RlZmluZSBNYiAgKEtiKktiKQorCisjZGVmaW5lIFZJQV9LODAwX0JSSURHRV9WSUQgICAgICAgICAweDExMDYKKyNkZWZpbmUgVklBX0s4MDBfQlJJREdFX0RJRCAgICAgICAgIDB4MzIwNAorCisjZGVmaW5lIFZJQV9LODAwX1NZU1RFTV9NRU1PUllfUkVHICAweDQ3CisjZGVmaW5lIFZJQV9LODAwX1ZJREVPX01FTU9SWV9SRUcgICAweEExCisKK2V4dGVybiBpbnQgdmlhZmJfbWVtc2l6ZTsKK3Vuc2lnbmVkIGludCB2aWFmYl9nZXRfbWVtc2l6ZSh2b2lkKTsKK3Vuc2lnbmVkIGxvbmcgdmlhZmJfZ2V0X3ZpZGVvYnVmX2FkZHIodm9pZCk7CisKKyNlbmRpZiAvKiBfX0lGQUNFX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby92aWEvaW9jdGwuYyBiL2RyaXZlcnMvdmlkZW8vdmlhL2lvY3RsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGEwM2MwNwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdmlkZW8vdmlhL2lvY3RsLmMKQEAgLTAsMCArMSwxMTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgMTk5OC0yMDA4IFZJQSBUZWNobm9sb2dpZXMsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAyMDAxLTIwMDggUzMgR3JhcGhpY3MsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKworICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOworICogZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVElFUyBPUiBSRVBSRVNFTlRBVElPTlM7IHdpdGhvdXQgZXZlbgorICogdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS5TZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sCisgKiA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICovCisKKyNpbmNsdWRlICJnbG9iYWwuaCIKKworaW50IHZpYWZiX2lvY3RsX2dldF92aWFmYl9pbmZvKHVfbG9uZyBhcmcpCit7CisJc3RydWN0IHZpYWZiX2lvY3RsX2luZm8gdmlhaW5mbzsKKworCXZpYWluZm8udmlhZmJfaWQgPSBWSUFJRDsKKwl2aWFpbmZvLnZlbmRvcl9pZCA9IFBDSV9WSUFfVkVORE9SX0lEOworCisJc3dpdGNoICh2aWFwYXJpbmZvLT5jaGlwX2luZm8tPmdmeF9jaGlwX25hbWUpIHsKKwljYXNlIFVOSUNIUk9NRV9DTEUyNjY6CisJCXZpYWluZm8uZGV2aWNlX2lkID0gVU5JQ0hST01FX0NMRTI2Nl9ESUQ7CisJCWJyZWFrOworCisJY2FzZSBVTklDSFJPTUVfSzQwMDoKKwkJdmlhaW5mby5kZXZpY2VfaWQgPSBVTklDSFJPTUVfSzQwMF9ESUQ7CisJCWJyZWFrOworCisJY2FzZSBVTklDSFJPTUVfSzgwMDoKKwkJdmlhaW5mby5kZXZpY2VfaWQgPSBVTklDSFJPTUVfSzgwMF9ESUQ7CisJCWJyZWFrOworCisJY2FzZSBVTklDSFJPTUVfUE04MDA6CisJCXZpYWluZm8uZGV2aWNlX2lkID0gVU5JQ0hST01FX1BNODAwX0RJRDsKKwkJYnJlYWs7CisKKwljYXNlIFVOSUNIUk9NRV9DTjcwMDoKKwkJdmlhaW5mby5kZXZpY2VfaWQgPSBVTklDSFJPTUVfQ043MDBfRElEOworCQlicmVhazsKKworCWNhc2UgVU5JQ0hST01FX0NYNzAwOgorCQl2aWFpbmZvLmRldmljZV9pZCA9IFVOSUNIUk9NRV9DWDcwMF9ESUQ7CisJCWJyZWFrOworCisJY2FzZSBVTklDSFJPTUVfSzhNODkwOgorCQl2aWFpbmZvLmRldmljZV9pZCA9IFVOSUNIUk9NRV9LOE04OTBfRElEOworCQlicmVhazsKKworCWNhc2UgVU5JQ0hST01FX1A0TTg5MDoKKwkJdmlhaW5mby5kZXZpY2VfaWQgPSBVTklDSFJPTUVfUDRNODkwX0RJRDsKKwkJYnJlYWs7CisKKwljYXNlIFVOSUNIUk9NRV9QNE05MDA6CisJCXZpYWluZm8uZGV2aWNlX2lkID0gVU5JQ0hST01FX1A0TTkwMF9ESUQ7CisJCWJyZWFrOworCX0KKworCXZpYWluZm8udmVyc2lvbiA9IFZFUlNJT05fTUFKT1I7CisJdmlhaW5mby5yZXZpc2lvbiA9IFZFUlNJT05fTUlOT1I7CisKKwlpZiAoY29weV90b191c2VyKCh2b2lkIF9fdXNlciAqKWFyZywgJnZpYWluZm8sIHNpemVvZih2aWFpbmZvKSkpCisJCXJldHVybiAtRUZBVUxUOworCisJcmV0dXJuIDA7Cit9CisKKy8qIEhvdC1QbHVnIFByaW9yaXR5OiBEVkkgPiBDUlQqLworaW50IHZpYWZiX2lvY3RsX2hvdHBsdWcoaW50IGhyZXMsIGludCB2cmVzLCBpbnQgYnBwKQoreworCWludCBEVklzZW5zZSwgc3RhdHVzID0gMDsKKwlERUJVR19NU0coS0VSTl9JTkZPICJ2aWFmYl9pb2N0bF9ob3RwbHVnISFcbiIpOworCisJaWYgKHZpYXBhcmluZm8tPmNoaXBfaW5mby0+dG1kc19jaGlwX2luZm8udG1kc19jaGlwX25hbWUgIT0KKwkJTk9OX1RNRFNfVFJBTlNNSVRURVIpIHsKKwkJRFZJc2Vuc2UgPSB2aWFmYl9kdmlfc2Vuc2UoKTsKKworCQlpZiAoRFZJc2Vuc2UpIHsKKwkJCURFQlVHX01TRyhLRVJOX0lORk8gIkRWSSBBdHRhY2hlZC4uLlxuIik7CisJCQlpZiAodmlhZmJfRGV2aWNlU3RhdHVzICE9IERWSV9EZXZpY2UpIHsKKwkJCQl2aWFmYl9EVklfT04gPSAxOworCQkJCXZpYWZiX0NSVF9PTiA9IDA7CisJCQkJdmlhZmJfTENEX09OID0gMDsKKwkJCQl2aWFmYl9EZXZpY2VTdGF0dXMgPSBEVklfRGV2aWNlOworCQkJCXJldHVybiB2aWFmYl9EZXZpY2VTdGF0dXM7CisJCQl9CisJCQlzdGF0dXMgPSAxOworCQl9IGVsc2UKKwkJCURFQlVHX01TRyhLRVJOX0lORk8gIkRWSSBEZS1hdHRhY2hlZC4uLlxuIik7CisJfQorCisJaWYgKCh2aWFmYl9EZXZpY2VTdGF0dXMgIT0gQ1JUX0RldmljZSkgJiYgKHN0YXR1cyA9PSAwKSkgeworCQl2aWFmYl9DUlRfT04gPSAxOworCQl2aWFmYl9EVklfT04gPSAwOworCQl2aWFmYl9MQ0RfT04gPSAwOworCisJCXZpYWZiX0RldmljZVN0YXR1cyA9IENSVF9EZXZpY2U7CisJCXJldHVybiB2aWFmYl9EZXZpY2VTdGF0dXM7CisJfQorCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3ZpYS9pb2N0bC5oIGIvZHJpdmVycy92aWRlby92aWEvaW9jdGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NDJmZTMwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy92aWRlby92aWEvaW9jdGwuaApAQCAtMCwwICsxLDIxMCBAQAorLyoKKyAqIENvcHlyaWdodCAxOTk4LTIwMDggVklBIFRlY2hub2xvZ2llcywgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IDIwMDEtMjAwOCBTMyBHcmFwaGljcywgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247CisgKiBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5USUVTIE9SIFJFUFJFU0VOVEFUSU9OUzsgd2l0aG91dCBldmVuCisgKiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFLlNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGZvciBtb3JlIGRldGFpbHMuCisKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwKKyAqIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKworI2lmbmRlZiBfX0lPQ1RMX0hfXworI2RlZmluZSBfX0lPQ1RMX0hfXworCisjaWZuZGVmIF9fdXNlcgorI2RlZmluZSBfX3VzZXIKKyNlbmRpZgorCisvKiBWSUFGQiBJT0NUTCBkZWZpbml0aW9uICovCisjZGVmaW5lIFZJQUZCX0dFVF9JTkZPX1NJWkUJCTB4NTY0OTQxMDEJLyogJ1ZJQVwwMScgKi8KKyNkZWZpbmUgVklBRkJfR0VUX0lORk8JCQkweDU2NDk0MTAyCS8qICdWSUFcMDInICovCisjZGVmaW5lIFZJQUZCX0hPVFBMVUcJCQkweDU2NDk0MTAzCS8qICdWSUFcMDMnICovCisjZGVmaW5lIFZJQUZCX1NFVF9IT1RQTFVHX0ZMQUcJCTB4NTY0OTQxMDQJLyogJ1ZJQVwwNCcgKi8KKyNkZWZpbmUgVklBRkJfR0VUX1JFU09MVVRJT04JCTB4NTY0OTQxMDUJLyogJ1ZJQVwwNScgKi8KKyNkZWZpbmUgVklBRkJfR0VUX1NBTU1fSU5GTwkJMHg1NjQ5NDEwNwkvKiAnVklBXDA3JyAqLworI2RlZmluZSBWSUFGQl9UVVJOX09OX09VVFBVVF9ERVZJQ0UgICAgIDB4NTY0OTQxMDgJLyogJ1ZJQVwwOCcgKi8KKyNkZWZpbmUgVklBRkJfVFVSTl9PRkZfT1VUUFVUX0RFVklDRSAgICAweDU2NDk0MTA5CS8qICdWSUFcMDknICovCisjZGVmaW5lIFZJQUZCX1NFVF9ERVZJQ0UJCTB4NTY0OTQxMEEKKyNkZWZpbmUgVklBRkJfR0VUX0RFVklDRQkJMHg1NjQ5NDEwQgorI2RlZmluZSBWSUFGQl9HRVRfRFJJVkVSX1ZFUlNJT04JMHg1NjQ5NDExMgkvKiAnVklBXDEyJyAqLworI2RlZmluZSBWSUFGQl9HRVRfQ0hJUF9JTkZPCQkweDU2NDk0MTEzCS8qICdWSUFcMTMnICovCisjZGVmaW5lIFZJQUZCX1NFVF9ERVZJQ0VfSU5GTyAgICAgICAgICAgMHg1NjQ5NDExNAorI2RlZmluZSBWSUFGQl9HRVRfREVWSUNFX0lORk8gICAgICAgICAgIDB4NTY0OTQxMTUKKworI2RlZmluZSBWSUFGQl9HRVRfREVWSUNFX1NVUFBPUlQJMHg1NjQ5NDExOAorI2RlZmluZSBWSUFGQl9HRVRfREVWSUNFX0NPTk5FQ1QJMHg1NjQ5NDExOQorI2RlZmluZSBWSUFGQl9HRVRfUEFORUxfU1VQUE9SVF9FWFBBTkQJMHg1NjQ5NDExQQorI2RlZmluZSBWSUFGQl9HRVRfRFJJVkVSX05BTUUJCTB4NTY0OTQxMjIKKyNkZWZpbmUgVklBRkJfR0VUX0RFVklDRV9TVVBQT1JUX1NUQVRFCTB4NTY0OTQxMjMKKyNkZWZpbmUgVklBRkJfR0VUX0dBTU1BX0xVVAkJMHg1NjQ5NDEyNAorI2RlZmluZSBWSUFGQl9TRVRfR0FNTUFfTFVUCQkweDU2NDk0MTI1CisjZGVmaW5lIFZJQUZCX0dFVF9HQU1NQV9TVVBQT1JUX1NUQVRFCTB4NTY0OTQxMjYKKyNkZWZpbmUgVklBRkJfU0VUX1ZJREVPX0RFVklDRQkJMHg1NjQ5NDEyNworI2RlZmluZSBWSUFGQl9HRVRfVklERU9fREVWSUNFCQkweDU2NDk0MTI4CisjZGVmaW5lIFZJQUZCX1NFVF9TRUNPTkRfTU9ERQkJMHg1NjQ5NDEyOQorI2RlZmluZSBWSUFGQl9TWU5DX1NVUkZBQ0UJCTB4NTY0OTQxMzAKKyNkZWZpbmUgVklBRkJfR0VUX0RSSVZFUl9DQVBTCQkweDU2NDk0MTMxCisjZGVmaW5lIFZJQUZCX0dFVF9JR0FfU0NBTElOR19JTkZPCTB4NTY0OTQxMzIKKyNkZWZpbmUgVklBRkJfR0VUX1BBTkVMX01BWF9TSVpFCTB4NTY0OTQxMzMKKyNkZWZpbmUgVklBRkJfR0VUX1BBTkVMX01BWF9QT1NJVElPTgkweDU2NDk0MTM0CisjZGVmaW5lIFZJQUZCX1NFVF9QQU5FTF9TSVpFCQkweDU2NDk0MTM1CisjZGVmaW5lIFZJQUZCX1NFVF9QQU5FTF9QT1NJVElPTiAgICAgICAgMHg1NjQ5NDEzNgorI2RlZmluZSBWSUFGQl9HRVRfUEFORUxfUE9TSVRJT04gICAgICAgIDB4NTY0OTQxMzcKKyNkZWZpbmUgVklBRkJfR0VUX1BBTkVMX1NJWkUJCTB4NTY0OTQxMzgKKworI2RlZmluZSBOb25lX0RldmljZSAweDAwCisjZGVmaW5lIENSVF9EZXZpY2UgIDB4MDEKKyNkZWZpbmUgTENEX0RldmljZSAgMHgwMgorI2RlZmluZSBEVklfRGV2aWNlICAweDA4CisjZGVmaW5lIENSVDJfRGV2aWNlIDB4MTAKKyNkZWZpbmUgTENEMl9EZXZpY2UgMHg0MAorCisjZGVmaW5lIE9QX0xDRF9DRU5URVJJTkcgICAweDAxCisjZGVmaW5lIE9QX0xDRF9QQU5FTF9JRCAgICAweDAyCisjZGVmaW5lIE9QX0xDRF9NT0RFICAgICAgICAweDAzCisKKy8qU0FNTSBvcGVyYXRpb24gZmxhZyovCisjZGVmaW5lIE9QX1NBTU0gICAgICAgICAgICAweDgwCisKKyNkZWZpbmUgTENEX1BBTkVMX0lEX01BWElNVU0JMjIKKworI2RlZmluZSBTVEFURV9PTiAgICAgICAgICAgIDB4MQorI2RlZmluZSBTVEFURV9PRkYgICAgICAgICAgIDB4MAorI2RlZmluZSBTVEFURV9ERUZBVUxUICAgICAgIDB4RkZGRgorCisjZGVmaW5lIE1BWF9BQ1RJVkVfREVWX05VTSAgMgorCitzdHJ1Y3QgZGV2aWNlX3QgeworCXVuc2lnbmVkIHNob3J0IGNydDoxOworCXVuc2lnbmVkIHNob3J0IGR2aToxOworCXVuc2lnbmVkIHNob3J0IGxjZDoxOworCXVuc2lnbmVkIHNob3J0IHNhbW06MTsKKwl1bnNpZ25lZCBzaG9ydCBsY2RfZHNwX2NlbnQ6MTsKKwl1bnNpZ25lZCBjaGFyIGxjZF9tb2RlOjE7CisJdW5zaWduZWQgc2hvcnQgZXBpYV9kdmk6MTsKKwl1bnNpZ25lZCBzaG9ydCBsY2RfZHVhbF9lZGdlOjE7CisJdW5zaWduZWQgc2hvcnQgbGNkMjoxOworCisJdW5zaWduZWQgc2hvcnQgcHJpbWFyeV9kZXY7CisJdW5zaWduZWQgY2hhciBsY2RfcGFuZWxfaWQ7CisJdW5zaWduZWQgc2hvcnQgeHJlcywgeXJlczsKKwl1bnNpZ25lZCBzaG9ydCB4cmVzMSwgeXJlczE7CisJdW5zaWduZWQgc2hvcnQgcmVmcmVzaDsKKwl1bnNpZ25lZCBzaG9ydCBicHA7CisJdW5zaWduZWQgc2hvcnQgcmVmcmVzaDE7CisJdW5zaWduZWQgc2hvcnQgYnBwMTsKKwl1bnNpZ25lZCBzaG9ydCBzZXF1ZW5jZTsKKwl1bnNpZ25lZCBzaG9ydCBidXNfd2lkdGg7Cit9OworCitzdHJ1Y3QgdmlhZmJfaW9jdGxfaW5mbyB7CisJdTMyIHZpYWZiX2lkOwkJLyogZm9yIGlkZW50aWZ5aW5nIHZpYWZiICovCisjZGVmaW5lIFZJQUlEICAgICAgIDB4NTY0OTQxNDYJLyogSWRlbnRpZnkgbXlzZWxmIHdpdGggJ1ZJQUYnICovCisJdTE2IHZlbmRvcl9pZDsKKwl1MTYgZGV2aWNlX2lkOworCXU4IHZlcnNpb247CisJdTggcmV2aXNpb247CisJdTggcmVzZXJ2ZWRbMjQ2XTsJLyogZm9yIGZ1dHVyZSB1c2UgKi8KK307CisKK3N0cnVjdCB2aWFmYl9pb2N0bF9tb2RlIHsKKwl1MzIgeHJlczsKKwl1MzIgeXJlczsKKwl1MzIgcmVmcmVzaDsKKwl1MzIgYnBwOworCXUzMiB4cmVzX3NlYzsKKwl1MzIgeXJlc19zZWM7CisJdTMyIHZpcnR1YWxfeHJlc19zZWM7CisJdTMyIHZpcnR1YWxfeXJlc19zZWM7CisJdTMyIHJlZnJlc2hfc2VjOworCXUzMiBicHBfc2VjOworfTsKK3N0cnVjdCB2aWFmYl9pb2N0bF9zYW1tIHsKKwl1MzIgc2FtbV9zdGF0dXM7CisJdTMyIHNpemVfcHJpbTsKKwl1MzIgc2l6ZV9zZWM7CisJdTMyIG1lbV9iYXNlOworCXUzMiBvZmZzZXRfc2VjOworfTsKKworc3RydWN0IHZpYWZiX2RyaXZlcl92ZXJzaW9uIHsKKwlpbnQgaU1ham9yTnVtOworCWludCBpS2VybmVsTnVtOworCWludCBpT1NOdW07CisJaW50IGlNaW5vck51bTsKK307CisKK3N0cnVjdCB2aWFmYl9pb2N0bF9sY2RfYXR0cmlidXRlIHsKKwl1bnNpZ25lZCBpbnQgcGFuZWxfaWQ7CisJdW5zaWduZWQgaW50IGRpc3BsYXlfY2VudGVyOworCXVuc2lnbmVkIGludCBsY2RfbW9kZTsKK307CisKK3N0cnVjdCB2aWFmYl9pb2N0bF9zZXR0aW5nIHsKKwkvKiBFbmFibGUgb3IgZGlzYWJsZSBhY3RpdmUgZGV2aWNlcyAqLworCXVuc2lnbmVkIHNob3J0IGRldmljZV9mbGFnOworCS8qIEluZGljYXRlIHdoaWNoIGRldmljZSBzaG91bGQgYmUgdHVybiBvbiBvciB0dXJuIG9mZi4gKi8KKwl1bnNpZ25lZCBzaG9ydCBkZXZpY2Vfc3RhdHVzOworCXVuc2lnbmVkIGludCByZXNlcnZlZDsKKwkvKiBJbmRpY2F0ZSB3aGljaCBMQ0QncyBhdHRyaWJ1dGUgY2FuIGJlIGNoYW5nZWQuICovCisJdW5zaWduZWQgc2hvcnQgbGNkX29wZXJhdGlvbl9mbGFnOworCS8qIDE6IFNBTU0gT04gIDA6IFNBTU0gT0ZGICovCisJdW5zaWduZWQgc2hvcnQgc2FtbV9zdGF0dXM7CisJLyogaG9yaXpvbnRhbCByZXNvbHV0aW9uIG9mIGZpcnN0IGRldmljZSAqLworCXVuc2lnbmVkIHNob3J0IGZpcnN0X2Rldl9ob3JfcmVzOworCS8qIHZlcnRpY2FsIHJlc29sdXRpb24gb2YgZmlyc3QgZGV2aWNlICovCisJdW5zaWduZWQgc2hvcnQgZmlyc3RfZGV2X3Zlcl9yZXM7CisJLyogaG9yaXpvbnRhbCByZXNvbHV0aW9uIG9mIHNlY29uZCBkZXZpY2UgKi8KKwl1bnNpZ25lZCBzaG9ydCBzZWNvbmRfZGV2X2hvcl9yZXM7CisJLyogdmVydGljYWwgcmVzb2x1dGlvbiBvZiBzZWNvbmQgZGV2aWNlICovCisJdW5zaWduZWQgc2hvcnQgc2Vjb25kX2Rldl92ZXJfcmVzOworCS8qIHJlZnJlc2ggcmF0ZSBvZiBmaXJzdCBkZXZpY2UgKi8KKwl1bnNpZ25lZCBzaG9ydCBmaXJzdF9kZXZfcmVmcmVzaDsKKwkvKiBicHAgb2YgZmlyc3QgZGV2aWNlICovCisJdW5zaWduZWQgc2hvcnQgZmlyc3RfZGV2X2JwcDsKKwkvKiByZWZyZXNoIHJhdGUgb2Ygc2Vjb25kIGRldmljZSAqLworCXVuc2lnbmVkIHNob3J0IHNlY29uZF9kZXZfcmVmcmVzaDsKKwkvKiBicHAgb2Ygc2Vjb25kIGRldmljZSAqLworCXVuc2lnbmVkIHNob3J0IHNlY29uZF9kZXZfYnBwOworCS8qIEluZGljYXRlIHdoaWNoIGRldmljZSBhcmUgcHJpbWFyeSBkaXNwbGF5IGRldmljZS4gKi8KKwl1bnNpZ25lZCBpbnQgcHJpbWFyeV9kZXZpY2U7CisJLyogSW5kaWNhdGUgd2hpY2ggZGV2aWNlIHdpbGwgc2hvdyB2aWRlby4gb25seSB2YWxpZCBpbiBkdW92aWV3IG1vZGUgKi8KKwl1bnNpZ25lZCBpbnQgdmlkZW9fZGV2aWNlX3N0YXR1czsKKwl1bnNpZ25lZCBpbnQgc3RydWN0X3Jlc2VydmVkWzM0XTsKKwlzdHJ1Y3QgdmlhZmJfaW9jdGxfbGNkX2F0dHJpYnV0ZSBsY2RfYXR0cmlidXRlczsKK307CisKK3N0cnVjdCBfVVRGdW5jdGlvbkNhcHMgeworCXVuc2lnbmVkIGludCBkdzNEU2NhbGluZ1N0YXRlOworCXVuc2lnbmVkIGludCByZXNlcnZlZFszMV07Cit9OworCitzdHJ1Y3QgX1BPU0lUSU9OVkFMVUUgeworCXVuc2lnbmVkIGludCBkd1g7CisJdW5zaWduZWQgaW50IGR3WTsKK307CisKK3N0cnVjdCBfcGFuZWxfc2l6ZV9wb3NfaW5mbyB7CisJdW5zaWduZWQgaW50IGRldmljZV90eXBlOworCWludCB4OworCWludCB5OworfTsKKworZXh0ZXJuIGludCB2aWFmYl9MQ0RfT047CitleHRlcm4gaW50IHZpYWZiX0RWSV9PTjsKKworaW50IHZpYWZiX2lvY3RsX2dldF92aWFmYl9pbmZvKHVfbG9uZyBhcmcpOworaW50IHZpYWZiX2lvY3RsX2hvdHBsdWcoaW50IGhyZXMsIGludCB2cmVzLCBpbnQgYnBwKTsKKworI2VuZGlmIC8qIF9fSU9DVExfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3ZpYS9sY2QuYyBiL2RyaXZlcnMvdmlkZW8vdmlhL2xjZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZjNzI5MGEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3ZpZGVvL3ZpYS9sY2QuYwpAQCAtMCwwICsxLDE4MjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgMTk5OC0yMDA4IFZJQSBUZWNobm9sb2dpZXMsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAyMDAxLTIwMDggUzMgR3JhcGhpY3MsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKworICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOworICogZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVElFUyBPUiBSRVBSRVNFTlRBVElPTlM7IHdpdGhvdXQgZXZlbgorICogdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS5TZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sCisgKiA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICovCisKKyNpbmNsdWRlICJnbG9iYWwuaCIKKyNpbmNsdWRlICJsY2R0YmwuaCIKKworc3RhdGljIHN0cnVjdCBpZ2EyX3NoYWRvd19jcnRjX3RpbWluZyBpZ2EyX3NoYWRvd19jcnRjX3JlZyA9IHsKKwkvKiBJR0EyIFNoYWRvdyBIb3Jpem9udGFsIFRvdGFsICovCisJe0lHQTJfU0hBRE9XX0hPUl9UT1RBTF9SRUdfTlVNLCB7e0NSNkQsIDAsIDd9LCB7Q1I3MSwgMywgM30gfSB9LAorCS8qIElHQTIgU2hhZG93IEhvcml6b250YWwgQmxhbmsgRW5kICovCisJe0lHQTJfU0hBRE9XX0hPUl9CTEFOS19FTkRfUkVHX05VTSwge3tDUjZFLCAwLCA3fSB9IH0sCisJLyogSUdBMiBTaGFkb3cgVmVydGljYWwgVG90YWwgKi8KKwl7SUdBMl9TSEFET1dfVkVSX1RPVEFMX1JFR19OVU0sIHt7Q1I2RiwgMCwgN30sIHtDUjcxLCAwLCAyfSB9IH0sCisJLyogSUdBMiBTaGFkb3cgVmVydGljYWwgQWRkcmVzc2FibGUgVmlkZW8gKi8KKwl7SUdBMl9TSEFET1dfVkVSX0FERFJfUkVHX05VTSwge3tDUjcwLCAwLCA3fSwge0NSNzEsIDQsIDZ9IH0gfSwKKwkvKiBJR0EyIFNoYWRvdyBWZXJ0aWNhbCBCbGFuayBTdGFydCAqLworCXtJR0EyX1NIQURPV19WRVJfQkxBTktfU1RBUlRfUkVHX05VTSwKKwkge3tDUjcyLCAwLCA3fSwge0NSNzQsIDQsIDZ9IH0gfSwKKwkvKiBJR0EyIFNoYWRvdyBWZXJ0aWNhbCBCbGFuayBFbmQgKi8KKwl7SUdBMl9TSEFET1dfVkVSX0JMQU5LX0VORF9SRUdfTlVNLCB7e0NSNzMsIDAsIDd9LCB7Q1I3NCwgMCwgMn0gfSB9LAorCS8qIElHQTIgU2hhZG93IFZlcnRpY2FsIFN5bmMgU3RhcnQgKi8KKwl7SUdBMl9TSEFET1dfVkVSX1NZTkNfU1RBUlRfUkVHX05VTSwge3tDUjc1LCAwLCA3fSwge0NSNzYsIDQsIDZ9IH0gfSwKKwkvKiBJR0EyIFNoYWRvdyBWZXJ0aWNhbCBTeW5jIEVuZCAqLworCXtJR0EyX1NIQURPV19WRVJfU1lOQ19FTkRfUkVHX05VTSwge3tDUjc2LCAwLCAzfSB9IH0KK307CisKK3N0YXRpYyBzdHJ1Y3QgX2xjZF9zY2FsaW5nX2ZhY3RvciBsY2Rfc2NhbGluZ19mYWN0b3IgPSB7CisJLyogTENEIEhvcml6b250YWwgU2NhbGluZyBGYWN0b3IgUmVnaXN0ZXIgKi8KKwl7TENEX0hPUl9TQ0FMSU5HX0ZBQ1RPUl9SRUdfTlVNLAorCSB7e0NSOUYsIDAsIDF9LCB7Q1I3NywgMCwgN30sIHtDUjc5LCA0LCA1fSB9IH0sCisJLyogTENEIFZlcnRpY2FsIFNjYWxpbmcgRmFjdG9yIFJlZ2lzdGVyICovCisJe0xDRF9WRVJfU0NBTElOR19GQUNUT1JfUkVHX05VTSwKKwkge3tDUjc5LCAzLCAzfSwge0NSNzgsIDAsIDd9LCB7Q1I3OSwgNiwgN30gfSB9Cit9Oworc3RhdGljIHN0cnVjdCBfbGNkX3NjYWxpbmdfZmFjdG9yIGxjZF9zY2FsaW5nX2ZhY3Rvcl9DTEUgPSB7CisJLyogTENEIEhvcml6b250YWwgU2NhbGluZyBGYWN0b3IgUmVnaXN0ZXIgKi8KKwl7TENEX0hPUl9TQ0FMSU5HX0ZBQ1RPUl9SRUdfTlVNX0NMRSwge3tDUjc3LCAwLCA3fSwge0NSNzksIDQsIDV9IH0gfSwKKwkvKiBMQ0QgVmVydGljYWwgU2NhbGluZyBGYWN0b3IgUmVnaXN0ZXIgKi8KKwl7TENEX1ZFUl9TQ0FMSU5HX0ZBQ1RPUl9SRUdfTlVNX0NMRSwge3tDUjc4LCAwLCA3fSwge0NSNzksIDYsIDd9IH0gfQorfTsKKworc3RhdGljIGludCBjaGVja19sdmRzX2NoaXAoaW50IGRldmljZV9pZF9zdWJhZGRyLCBpbnQgZGV2aWNlX2lkKTsKK3N0YXRpYyBib29sIGx2ZHNfaWRlbnRpZnlfaW50ZWdyYXRlZGx2ZHModm9pZCk7CitzdGF0aWMgaW50IGZwX2lkX3RvX3ZpbmRleChpbnQgcGFuZWxfaWQpOworc3RhdGljIGludCBsdmRzX3JlZ2lzdGVyX3JlYWQoaW50IGluZGV4KTsKK3N0YXRpYyB2b2lkIGxvYWRfbGNkX3NjYWxpbmcoaW50IHNldF9ocmVzLCBpbnQgc2V0X3ZyZXMsIGludCBwYW5lbF9ocmVzLAorCQkgICAgICBpbnQgcGFuZWxfdnJlcyk7CitzdGF0aWMgdm9pZCBsb2FkX2xjZF9rNDAwX3BhdGNoX3RibChpbnQgc2V0X2hyZXMsIGludCBzZXRfdnJlcywKKwlpbnQgcGFuZWxfaWQpOworc3RhdGljIHZvaWQgbG9hZF9sY2RfcDg4MF9wYXRjaF90YmwoaW50IHNldF9ocmVzLCBpbnQgc2V0X3ZyZXMsCisJaW50IHBhbmVsX2lkKTsKK3N0YXRpYyB2b2lkIGxvYWRfbGNkX3BhdGNoX3JlZ3MoaW50IHNldF9ocmVzLCBpbnQgc2V0X3ZyZXMsCisJaW50IHBhbmVsX2lkLCBpbnQgc2V0X2lnYSk7CitzdGF0aWMgdm9pZCB2aWFfcGl0Y2hfYWxpZ25tZW50X3BhdGNoX2xjZCgKKwlzdHJ1Y3QgbHZkc19zZXR0aW5nX2luZm9ybWF0aW9uICpwbHZkc19zZXR0aW5nX2luZm8sCisJCQkJICAgc3RydWN0IGx2ZHNfY2hpcF9pbmZvcm1hdGlvbgorCQkJCSAgICpwbHZkc19jaGlwX2luZm8pOworc3RhdGljIHZvaWQgbGNkX3BhdGNoX3NrZXdfZHZwMChzdHJ1Y3QgbHZkc19zZXR0aW5nX2luZm9ybWF0aW9uCisJCQkgKnBsdmRzX3NldHRpbmdfaW5mbywKKwkJCSBzdHJ1Y3QgbHZkc19jaGlwX2luZm9ybWF0aW9uICpwbHZkc19jaGlwX2luZm8pOworc3RhdGljIHZvaWQgbGNkX3BhdGNoX3NrZXdfZHZwMShzdHJ1Y3QgbHZkc19zZXR0aW5nX2luZm9ybWF0aW9uCisJCQkgKnBsdmRzX3NldHRpbmdfaW5mbywKKwkJCSBzdHJ1Y3QgbHZkc19jaGlwX2luZm9ybWF0aW9uICpwbHZkc19jaGlwX2luZm8pOworc3RhdGljIHZvaWQgbGNkX3BhdGNoX3NrZXcoc3RydWN0IGx2ZHNfc2V0dGluZ19pbmZvcm1hdGlvbgorCSpwbHZkc19zZXR0aW5nX2luZm8sIHN0cnVjdCBsdmRzX2NoaXBfaW5mb3JtYXRpb24gKnBsdmRzX2NoaXBfaW5mbyk7CisKK3N0YXRpYyB2b2lkIGludGVncmF0ZWRfbHZkc19kaXNhYmxlKHN0cnVjdCBsdmRzX3NldHRpbmdfaW5mb3JtYXRpb24KKwkJCSAgICAgKnBsdmRzX3NldHRpbmdfaW5mbywKKwkJCSAgICAgc3RydWN0IGx2ZHNfY2hpcF9pbmZvcm1hdGlvbiAqcGx2ZHNfY2hpcF9pbmZvKTsKK3N0YXRpYyB2b2lkIGludGVncmF0ZWRfbHZkc19lbmFibGUoc3RydWN0IGx2ZHNfc2V0dGluZ19pbmZvcm1hdGlvbgorCQkJICAgICpwbHZkc19zZXR0aW5nX2luZm8sCisJCQkgICAgc3RydWN0IGx2ZHNfY2hpcF9pbmZvcm1hdGlvbiAqcGx2ZHNfY2hpcF9pbmZvKTsKK3N0YXRpYyB2b2lkIGxjZF9wb3dlcnNlcXVlbmNlX29mZih2b2lkKTsKK3N0YXRpYyB2b2lkIGxjZF9wb3dlcnNlcXVlbmNlX29uKHZvaWQpOworc3RhdGljIHZvaWQgZmlsbF9sY2RfZm9ybWF0KHZvaWQpOworc3RhdGljIHZvaWQgY2hlY2tfZGlwb3J0X29mX2ludGVncmF0ZWRfbHZkcygKKwlzdHJ1Y3QgbHZkc19jaGlwX2luZm9ybWF0aW9uICpwbHZkc19jaGlwX2luZm8sCisJCQkJICAgICBzdHJ1Y3QgbHZkc19zZXR0aW5nX2luZm9ybWF0aW9uCisJCQkJICAgICAqcGx2ZHNfc2V0dGluZ19pbmZvKTsKK3N0YXRpYyBzdHJ1Y3QgZGlzcGxheV90aW1pbmcgbGNkX2NlbnRlcmluZ190aW1naW5nKHN0cnVjdCBkaXNwbGF5X3RpbWluZworCQkJCQkgICAgbW9kZV9jcnRfcmVnLAorCQkJCQkgICBzdHJ1Y3QgZGlzcGxheV90aW1pbmcgcGFuZWxfY3J0X3JlZyk7CitzdGF0aWMgdm9pZCBsb2FkX2NydGNfc2hhZG93X3RpbWluZyhzdHJ1Y3QgZGlzcGxheV90aW1pbmcgbW9kZV90aW1pbmcsCisJCQkgICAgIHN0cnVjdCBkaXNwbGF5X3RpbWluZyBwYW5lbF90aW1pbmcpOworc3RhdGljIHZvaWQgdmlhZmJfbG9hZF9zY2FsaW5nX2ZhY3Rvcl9mb3JfcDRtOTAwKGludCBzZXRfaHJlcywKKwlpbnQgc2V0X3ZyZXMsIGludCBwYW5lbF9ocmVzLCBpbnQgcGFuZWxfdnJlcyk7CisKK3N0YXRpYyBpbnQgY2hlY2tfbHZkc19jaGlwKGludCBkZXZpY2VfaWRfc3ViYWRkciwgaW50IGRldmljZV9pZCkKK3sKKwlpZiAobHZkc19yZWdpc3Rlcl9yZWFkKGRldmljZV9pZF9zdWJhZGRyKSA9PSBkZXZpY2VfaWQpCisJCXJldHVybiBPSzsKKwllbHNlCisJCXJldHVybiBGQUlMOworfQorCit2b2lkIHZpYWZiX2luaXRfbGNkX3NpemUodm9pZCkKK3sKKwlERUJVR19NU0coS0VSTl9JTkZPICJ2aWFmYl9pbml0X2xjZF9zaXplKClcbiIpOworCURFQlVHX01TRyhLRVJOX0lORk8KKwkJInZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvLT5nZXRfbGNkX3NpemVfbWV0aG9kICVkXG4iLAorCQl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mby0+Z2V0X2xjZF9zaXplX21ldGhvZCk7CisKKwlzd2l0Y2ggKHZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvLT5nZXRfbGNkX3NpemVfbWV0aG9kKSB7CisJY2FzZSBHRVRfTENEX1NJWkVfQllfU1lTVEVNX0JJT1M6CisJCWJyZWFrOworCWNhc2UgR0VUX0xDRF9TWklFX0JZX0hXX1NUUkFQUElORzoKKwkJYnJlYWs7CisJY2FzZSBHRVRfTENEX1NJWkVfQllfVkdBX0JJT1M6CisJCURFQlVHX01TRyhLRVJOX0lORk8gIkdldCBMQ0QgU2l6ZSBtZXRob2QgYnkgVkdBIEJJT1MgISFcbiIpOworCQl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mby0+bGNkX3BhbmVsX3NpemUgPQorCQkgICAgZnBfaWRfdG9fdmluZGV4KHZpYWZiX2xjZF9wYW5lbF9pZCk7CisJCURFQlVHX01TRyhLRVJOX0lORk8gIkxDRCBQYW5lbF9JRCA9ICVkXG4iLAorCQkJICB2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mby0+bGNkX3BhbmVsX2lkKTsKKwkJREVCVUdfTVNHKEtFUk5fSU5GTyAiTENEIFBhbmVsIFNpemUgPSAlZFxuIiwKKwkJCSAgdmlhcGFyaW5mby0+bHZkc19zZXR0aW5nX2luZm8tPmxjZF9wYW5lbF9zaXplKTsKKwkJYnJlYWs7CisJY2FzZSBHRVRfTENEX1NJWkVfQllfVVNFUl9TRVRUSU5HOgorCQlERUJVR19NU0coS0VSTl9JTkZPICJHZXQgTENEIFNpemUgbWV0aG9kIGJ5IHVzZXIgc2V0dGluZyAhIVxuIik7CisJCXZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvLT5sY2RfcGFuZWxfc2l6ZSA9CisJCSAgICBmcF9pZF90b192aW5kZXgodmlhZmJfbGNkX3BhbmVsX2lkKTsKKwkJREVCVUdfTVNHKEtFUk5fSU5GTyAiTENEIFBhbmVsX0lEID0gJWRcbiIsCisJCQkgIHZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvLT5sY2RfcGFuZWxfaWQpOworCQlERUJVR19NU0coS0VSTl9JTkZPICJMQ0QgUGFuZWwgU2l6ZSA9ICVkXG4iLAorCQkJICB2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mby0+bGNkX3BhbmVsX3NpemUpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlERUJVR19NU0coS0VSTl9JTkZPICJ2aWFmYl9pbml0X2xjZF9zaXplIGZhaWxcbiIpOworCQl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mby0+bGNkX3BhbmVsX2lkID0KKwkJCUxDRF9QQU5FTF9JRDFfODAwWDYwMDsKKwkJdmlhcGFyaW5mby0+bHZkc19zZXR0aW5nX2luZm8tPmxjZF9wYW5lbF9zaXplID0KKwkJICAgIGZwX2lkX3RvX3ZpbmRleChMQ0RfUEFORUxfSUQxXzgwMFg2MDApOworCX0KKwl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mbzItPmxjZF9wYW5lbF9pZCA9CisJCXZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvLT5sY2RfcGFuZWxfaWQ7CisJdmlhcGFyaW5mby0+bHZkc19zZXR0aW5nX2luZm8yLT5sY2RfcGFuZWxfc2l6ZSA9CisJCXZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvLT5sY2RfcGFuZWxfc2l6ZTsKKwl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mbzItPmxjZF9wYW5lbF9ocmVzID0KKwkJdmlhcGFyaW5mby0+bHZkc19zZXR0aW5nX2luZm8tPmxjZF9wYW5lbF9ocmVzOworCXZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvMi0+bGNkX3BhbmVsX3ZyZXMgPQorCQl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mby0+bGNkX3BhbmVsX3ZyZXM7CisJdmlhcGFyaW5mby0+bHZkc19zZXR0aW5nX2luZm8yLT5kZXZpY2VfbGNkX2R1YWxlZGdlID0KKwkgICAgdmlhcGFyaW5mby0+bHZkc19zZXR0aW5nX2luZm8tPmRldmljZV9sY2RfZHVhbGVkZ2U7CisJdmlhcGFyaW5mby0+bHZkc19zZXR0aW5nX2luZm8yLT5MQ0REaXRoZXJpbmcgPQorCQl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mby0+TENERGl0aGVyaW5nOworfQorCitzdGF0aWMgYm9vbCBsdmRzX2lkZW50aWZ5X2ludGVncmF0ZWRsdmRzKHZvaWQpCit7CisJaWYgKHZpYWZiX2Rpc3BsYXlfaGFyZHdhcmVfbGF5b3V0ID09IEhXX0xBWU9VVF9MQ0RfRVhURVJOQUxfTENEMikgeworCQkvKiBUd28gZHVhbCBjaGFubmVsIExDRCAoSW50ZXJuYWwgTFZEUyArIEV4dGVybmFsIExWRFMpOiAqLworCQkvKiBJZiB3ZSBoYXZlIGFuIGV4dGVybmFsIExWRFMsIHN1Y2ggYXMgVlQxNjM2LCB3ZSBzaG91bGQKKwkJICAgaGF2ZSBpdHMgY2hpcCBJRCBhbHJlYWR5LiAqLworCQlpZiAodmlhcGFyaW5mby0+Y2hpcF9pbmZvLT5sdmRzX2NoaXBfaW5mby5sdmRzX2NoaXBfbmFtZSkgeworCQkJdmlhcGFyaW5mby0+Y2hpcF9pbmZvLT5sdmRzX2NoaXBfaW5mbzIubHZkc19jaGlwX25hbWUgPQorCQkJICAgIElOVEVHUkFURURfTFZEUzsKKwkJCURFQlVHX01TRyhLRVJOX0lORk8gIlN1cHBvcnQgdHdvIGR1YWwgY2hhbm5lbCBMVkRTIVwKKwkJCQkgIChJbnRlcm5hbCBMVkRTICsgRXh0ZXJuYWwgTFZEUylcbiIpOworCQl9IGVsc2UgeworCQkJdmlhcGFyaW5mby0+Y2hpcF9pbmZvLT5sdmRzX2NoaXBfaW5mby5sdmRzX2NoaXBfbmFtZSA9CisJCQkgICAgSU5URUdSQVRFRF9MVkRTOworCQkJREVCVUdfTVNHKEtFUk5fSU5GTyAiTm90IGZvdW5kIGV4dGVybmFsIExWRFMsXAorCQkJCSAgc28gY2FuJ3Qgc3VwcG9ydCB0d28gZHVhbCBjaGFubmVsIExWRFMhXG4iKTsKKwkJfQorCX0gZWxzZSBpZiAodmlhZmJfZGlzcGxheV9oYXJkd2FyZV9sYXlvdXQgPT0gSFdfTEFZT1VUX0xDRDFfTENEMikgeworCQkvKiBUd28gc2luZ2xlIGNoYW5uZWwgTENEIChJbnRlcm5hbCBMVkRTICsgSW50ZXJuYWwgTFZEUyk6ICovCisJCXZpYXBhcmluZm8tPmNoaXBfaW5mby0+bHZkc19jaGlwX2luZm8ubHZkc19jaGlwX25hbWUgPQorCQlJTlRFR1JBVEVEX0xWRFM7CisJCXZpYXBhcmluZm8tPmNoaXBfaW5mby0+bHZkc19jaGlwX2luZm8yLmx2ZHNfY2hpcF9uYW1lID0KKwkJCUlOVEVHUkFURURfTFZEUzsKKwkJREVCVUdfTVNHKEtFUk5fSU5GTyAiU3VwcG9ydCB0d28gc2luZ2xlIGNoYW5uZWwgTFZEUyFcCisJCQkgIChJbnRlcm5hbCBMVkRTICsgSW50ZXJuYWwgTFZEUylcbiIpOworCX0gZWxzZSBpZiAodmlhZmJfZGlzcGxheV9oYXJkd2FyZV9sYXlvdXQgIT0gSFdfTEFZT1VUX0RWSV9PTkxZKSB7CisJCS8qIElmIHdlIGhhdmUgZm91bmQgZXh0ZXJuYWwgTFZEUywganVzdCB1c2UgaXQsCisJCSAgIG90aGVyd2lzZSwgd2Ugd2lsbCB1c2UgaW50ZXJuYWwgTFZEUyBhcyBkZWZhdWx0LiAqLworCQlpZiAoIXZpYXBhcmluZm8tPmNoaXBfaW5mby0+bHZkc19jaGlwX2luZm8ubHZkc19jaGlwX25hbWUpIHsKKwkJCXZpYXBhcmluZm8tPmNoaXBfaW5mby0+bHZkc19jaGlwX2luZm8ubHZkc19jaGlwX25hbWUgPQorCQkJICAgIElOVEVHUkFURURfTFZEUzsKKwkJCURFQlVHX01TRyhLRVJOX0lORk8gIkZvdW5kIEludGVncmF0ZWQgTFZEUyFcbiIpOworCQl9CisJfSBlbHNlIHsKKwkJdmlhcGFyaW5mby0+Y2hpcF9pbmZvLT5sdmRzX2NoaXBfaW5mby5sdmRzX2NoaXBfbmFtZSA9CisJCQlOT05fTFZEU19UUkFOU01JVFRFUjsKKwkJREVCVUdfTVNHKEtFUk5fSU5GTyAiRG8gbm90IHN1cHBvcnQgTFZEUyFcbiIpOworCQlyZXR1cm4gZmFsc2U7CisJfQorCisJcmV0dXJuIHRydWU7Cit9CisKK2ludCB2aWFmYl9sdmRzX3RyYXNtaXR0ZXJfaWRlbnRpZnkodm9pZCkKK3sKKwl2aWFwYXJpbmZvLT5pMmNfc3R1ZmYuaTJjX3BvcnQgPSBJMkNQT1JUSU5ERVg7CisJaWYgKHZpYWZiX2x2ZHNfaWRlbnRpZnlfdnQxNjM2KCkpIHsKKwkJdmlhcGFyaW5mby0+Y2hpcF9pbmZvLT5sdmRzX2NoaXBfaW5mby5pMmNfcG9ydCA9IEkyQ1BPUlRJTkRFWDsKKwkJREVCVUdfTVNHKEtFUk5fSU5GTworCQkJICAiRm91bmQgVklBIFZUMTYzNiBMVkRTIG9uIHBvcnQgaTJjIDB4MzEgXG4iKTsKKwl9IGVsc2UgeworCQl2aWFwYXJpbmZvLT5pMmNfc3R1ZmYuaTJjX3BvcnQgPSBHUElPUE9SVElOREVYOworCQlpZiAodmlhZmJfbHZkc19pZGVudGlmeV92dDE2MzYoKSkgeworCQkJdmlhcGFyaW5mby0+Y2hpcF9pbmZvLT5sdmRzX2NoaXBfaW5mby5pMmNfcG9ydCA9CisJCQkJR1BJT1BPUlRJTkRFWDsKKwkJCURFQlVHX01TRyhLRVJOX0lORk8KKwkJCQkgICJGb3VuZCBWSUEgVlQxNjM2IExWRFMgb24gcG9ydCBncGlvIDB4MmMgXG4iKTsKKwkJfQorCX0KKworCWlmICh2aWFwYXJpbmZvLT5jaGlwX2luZm8tPmdmeF9jaGlwX25hbWUgPT0gVU5JQ0hST01FX0NYNzAwKQorCQlsdmRzX2lkZW50aWZ5X2ludGVncmF0ZWRsdmRzKCk7CisKKwlpZiAodmlhcGFyaW5mby0+Y2hpcF9pbmZvLT5sdmRzX2NoaXBfaW5mby5sdmRzX2NoaXBfbmFtZSkKKwkJcmV0dXJuIHRydWU7CisJLyogQ2hlY2sgZm9yIFZUMTYzMTogKi8KKwl2aWFwYXJpbmZvLT5jaGlwX2luZm8tPmx2ZHNfY2hpcF9pbmZvLmx2ZHNfY2hpcF9uYW1lID0gVlQxNjMxX0xWRFM7CisJdmlhcGFyaW5mby0+Y2hpcF9pbmZvLT5sdmRzX2NoaXBfaW5mby5sdmRzX2NoaXBfc2xhdmVfYWRkciA9CisJCVZUMTYzMV9MVkRTX0kyQ19BRERSOworCisJaWYgKGNoZWNrX2x2ZHNfY2hpcChWVDE2MzFfREVWSUNFX0lEX1JFRywgVlQxNjMxX0RFVklDRV9JRCkgIT0gRkFJTCkgeworCQlERUJVR19NU0coS0VSTl9JTkZPICJcbiBWVDE2MzEgTFZEUyAhIFxuIik7CisJCURFQlVHX01TRyhLRVJOX0lORk8gIlxuICUyZCIsCisJCQkgIHZpYXBhcmluZm8tPmNoaXBfaW5mby0+bHZkc19jaGlwX2luZm8ubHZkc19jaGlwX25hbWUpOworCQlERUJVR19NU0coS0VSTl9JTkZPICJcbiAlMmQiLAorCQkJICB2aWFwYXJpbmZvLT5jaGlwX2luZm8tPmx2ZHNfY2hpcF9pbmZvLmx2ZHNfY2hpcF9uYW1lKTsKKwkJcmV0dXJuIE9LOworCX0KKworCXZpYXBhcmluZm8tPmNoaXBfaW5mby0+bHZkc19jaGlwX2luZm8ubHZkc19jaGlwX25hbWUgPQorCQlOT05fTFZEU19UUkFOU01JVFRFUjsKKwl2aWFwYXJpbmZvLT5jaGlwX2luZm8tPmx2ZHNfY2hpcF9pbmZvLmx2ZHNfY2hpcF9zbGF2ZV9hZGRyID0KKwkJVlQxNjMxX0xWRFNfSTJDX0FERFI7CisJcmV0dXJuIEZBSUw7Cit9CisKK3N0YXRpYyBpbnQgZnBfaWRfdG9fdmluZGV4KGludCBwYW5lbF9pZCkKK3sKKwlERUJVR19NU0coS0VSTl9JTkZPICJmcF9nZXRfcGFuZWxfaWQoKVxuIik7CisKKwlpZiAocGFuZWxfaWQgPiBMQ0RfUEFORUxfSURfTUFYSU1VTSkKKwkJdmlhZmJfbGNkX3BhbmVsX2lkID0gcGFuZWxfaWQgPQorCQl2aWFmYl9yZWFkX3JlZyhWSUFDUiwgQ1IzRikgJiAweDBGOworCisJc3dpdGNoIChwYW5lbF9pZCkgeworCWNhc2UgMHgwOgorCQl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mby0+bGNkX3BhbmVsX2hyZXMgPSA2NDA7CisJCXZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvLT5sY2RfcGFuZWxfdnJlcyA9IDQ4MDsKKwkJdmlhcGFyaW5mby0+bHZkc19zZXR0aW5nX2luZm8tPmxjZF9wYW5lbF9pZCA9CisJCQlMQ0RfUEFORUxfSUQwXzY0MFg0ODA7CisJCXZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvLT5kZXZpY2VfbGNkX2R1YWxlZGdlID0gMDsKKwkJdmlhcGFyaW5mby0+bHZkc19zZXR0aW5nX2luZm8tPkxDRERpdGhlcmluZyA9IDE7CisJCXJldHVybiBWSUFfUkVTXzY0MFg0ODA7CisJCWJyZWFrOworCWNhc2UgMHgxOgorCQl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mby0+bGNkX3BhbmVsX2hyZXMgPSA4MDA7CisJCXZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvLT5sY2RfcGFuZWxfdnJlcyA9IDYwMDsKKwkJdmlhcGFyaW5mby0+bHZkc19zZXR0aW5nX2luZm8tPmxjZF9wYW5lbF9pZCA9CisJCQlMQ0RfUEFORUxfSUQxXzgwMFg2MDA7CisJCXZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvLT5kZXZpY2VfbGNkX2R1YWxlZGdlID0gMDsKKwkJdmlhcGFyaW5mby0+bHZkc19zZXR0aW5nX2luZm8tPkxDRERpdGhlcmluZyA9IDE7CisJCXJldHVybiBWSUFfUkVTXzgwMFg2MDA7CisJCWJyZWFrOworCWNhc2UgMHgyOgorCQl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mby0+bGNkX3BhbmVsX2hyZXMgPSAxMDI0OworCQl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mby0+bGNkX3BhbmVsX3ZyZXMgPSA3Njg7CisJCXZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvLT5sY2RfcGFuZWxfaWQgPQorCQkJTENEX1BBTkVMX0lEMl8xMDI0WDc2ODsKKwkJdmlhcGFyaW5mby0+bHZkc19zZXR0aW5nX2luZm8tPmRldmljZV9sY2RfZHVhbGVkZ2UgPSAwOworCQl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mby0+TENERGl0aGVyaW5nID0gMTsKKwkJcmV0dXJuIFZJQV9SRVNfMTAyNFg3Njg7CisJCWJyZWFrOworCWNhc2UgMHgzOgorCQl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mby0+bGNkX3BhbmVsX2hyZXMgPSAxMjgwOworCQl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mby0+bGNkX3BhbmVsX3ZyZXMgPSA3Njg7CisJCXZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvLT5sY2RfcGFuZWxfaWQgPQorCQkJTENEX1BBTkVMX0lEM18xMjgwWDc2ODsKKwkJdmlhcGFyaW5mby0+bHZkc19zZXR0aW5nX2luZm8tPmRldmljZV9sY2RfZHVhbGVkZ2UgPSAwOworCQl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mby0+TENERGl0aGVyaW5nID0gMTsKKwkJcmV0dXJuIFZJQV9SRVNfMTI4MFg3Njg7CisJCWJyZWFrOworCWNhc2UgMHg0OgorCQl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mby0+bGNkX3BhbmVsX2hyZXMgPSAxMjgwOworCQl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mby0+bGNkX3BhbmVsX3ZyZXMgPSAxMDI0OworCQl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mby0+bGNkX3BhbmVsX2lkID0KKwkJCUxDRF9QQU5FTF9JRDRfMTI4MFgxMDI0OworCQl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mby0+ZGV2aWNlX2xjZF9kdWFsZWRnZSA9IDE7CisJCXZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvLT5MQ0REaXRoZXJpbmcgPSAxOworCQlyZXR1cm4gVklBX1JFU18xMjgwWDEwMjQ7CisJCWJyZWFrOworCWNhc2UgMHg1OgorCQl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mby0+bGNkX3BhbmVsX2hyZXMgPSAxNDAwOworCQl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mby0+bGNkX3BhbmVsX3ZyZXMgPSAxMDUwOworCQl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mby0+bGNkX3BhbmVsX2lkID0KKwkJCUxDRF9QQU5FTF9JRDVfMTQwMFgxMDUwOworCQl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mby0+ZGV2aWNlX2xjZF9kdWFsZWRnZSA9IDE7CisJCXZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvLT5MQ0REaXRoZXJpbmcgPSAxOworCQlyZXR1cm4gVklBX1JFU18xNDAwWDEwNTA7CisJCWJyZWFrOworCWNhc2UgMHg2OgorCQl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mby0+bGNkX3BhbmVsX2hyZXMgPSAxNjAwOworCQl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mby0+bGNkX3BhbmVsX3ZyZXMgPSAxMjAwOworCQl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mby0+bGNkX3BhbmVsX2lkID0KKwkJCUxDRF9QQU5FTF9JRDZfMTYwMFgxMjAwOworCQl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mby0+ZGV2aWNlX2xjZF9kdWFsZWRnZSA9IDE7CisJCXZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvLT5MQ0REaXRoZXJpbmcgPSAxOworCQlyZXR1cm4gVklBX1JFU18xNjAwWDEyMDA7CisJCWJyZWFrOworCWNhc2UgMHg4OgorCQl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mby0+bGNkX3BhbmVsX2hyZXMgPSA4MDA7CisJCXZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvLT5sY2RfcGFuZWxfdnJlcyA9IDQ4MDsKKwkJdmlhcGFyaW5mby0+bHZkc19zZXR0aW5nX2luZm8tPmxjZF9wYW5lbF9pZCA9CisJCQlMQ0RfUEFORUxfSURBXzgwMFg0ODA7CisJCXZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvLT5kZXZpY2VfbGNkX2R1YWxlZGdlID0gMDsKKwkJdmlhcGFyaW5mby0+bHZkc19zZXR0aW5nX2luZm8tPkxDRERpdGhlcmluZyA9IDE7CisJCXJldHVybiBWSUFfUkVTXzgwMFg0ODA7CisJCWJyZWFrOworCWNhc2UgMHg5OgorCQl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mby0+bGNkX3BhbmVsX2hyZXMgPSAxMDI0OworCQl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mby0+bGNkX3BhbmVsX3ZyZXMgPSA3Njg7CisJCXZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvLT5sY2RfcGFuZWxfaWQgPQorCQkJTENEX1BBTkVMX0lEMl8xMDI0WDc2ODsKKwkJdmlhcGFyaW5mby0+bHZkc19zZXR0aW5nX2luZm8tPmRldmljZV9sY2RfZHVhbGVkZ2UgPSAxOworCQl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mby0+TENERGl0aGVyaW5nID0gMTsKKwkJcmV0dXJuIFZJQV9SRVNfMTAyNFg3Njg7CisJCWJyZWFrOworCWNhc2UgMHhBOgorCQl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mby0+bGNkX3BhbmVsX2hyZXMgPSAxMDI0OworCQl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mby0+bGNkX3BhbmVsX3ZyZXMgPSA3Njg7CisJCXZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvLT5sY2RfcGFuZWxfaWQgPQorCQkJTENEX1BBTkVMX0lEMl8xMDI0WDc2ODsKKwkJdmlhcGFyaW5mby0+bHZkc19zZXR0aW5nX2luZm8tPmRldmljZV9sY2RfZHVhbGVkZ2UgPSAwOworCQl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mby0+TENERGl0aGVyaW5nID0gMDsKKwkJcmV0dXJuIFZJQV9SRVNfMTAyNFg3Njg7CisJCWJyZWFrOworCWNhc2UgMHhCOgorCQl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mby0+bGNkX3BhbmVsX2hyZXMgPSAxMDI0OworCQl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mby0+bGNkX3BhbmVsX3ZyZXMgPSA3Njg7CisJCXZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvLT5sY2RfcGFuZWxfaWQgPQorCQkJTENEX1BBTkVMX0lEMl8xMDI0WDc2ODsKKwkJdmlhcGFyaW5mby0+bHZkc19zZXR0aW5nX2luZm8tPmRldmljZV9sY2RfZHVhbGVkZ2UgPSAxOworCQl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mby0+TENERGl0aGVyaW5nID0gMDsKKwkJcmV0dXJuIFZJQV9SRVNfMTAyNFg3Njg7CisJCWJyZWFrOworCWNhc2UgMHhDOgorCQl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mby0+bGNkX3BhbmVsX2hyZXMgPSAxMjgwOworCQl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mby0+bGNkX3BhbmVsX3ZyZXMgPSA3Njg7CisJCXZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvLT5sY2RfcGFuZWxfaWQgPQorCQkJTENEX1BBTkVMX0lEM18xMjgwWDc2ODsKKwkJdmlhcGFyaW5mby0+bHZkc19zZXR0aW5nX2luZm8tPmRldmljZV9sY2RfZHVhbGVkZ2UgPSAwOworCQl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mby0+TENERGl0aGVyaW5nID0gMDsKKwkJcmV0dXJuIFZJQV9SRVNfMTI4MFg3Njg7CisJCWJyZWFrOworCWNhc2UgMHhEOgorCQl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mby0+bGNkX3BhbmVsX2hyZXMgPSAxMjgwOworCQl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mby0+bGNkX3BhbmVsX3ZyZXMgPSAxMDI0OworCQl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mby0+bGNkX3BhbmVsX2lkID0KKwkJCUxDRF9QQU5FTF9JRDRfMTI4MFgxMDI0OworCQl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mby0+ZGV2aWNlX2xjZF9kdWFsZWRnZSA9IDE7CisJCXZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvLT5MQ0REaXRoZXJpbmcgPSAwOworCQlyZXR1cm4gVklBX1JFU18xMjgwWDEwMjQ7CisJCWJyZWFrOworCWNhc2UgMHhFOgorCQl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mby0+bGNkX3BhbmVsX2hyZXMgPSAxNDAwOworCQl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mby0+bGNkX3BhbmVsX3ZyZXMgPSAxMDUwOworCQl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mby0+bGNkX3BhbmVsX2lkID0KKwkJCUxDRF9QQU5FTF9JRDVfMTQwMFgxMDUwOworCQl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mby0+ZGV2aWNlX2xjZF9kdWFsZWRnZSA9IDE7CisJCXZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvLT5MQ0REaXRoZXJpbmcgPSAwOworCQlyZXR1cm4gVklBX1JFU18xNDAwWDEwNTA7CisJCWJyZWFrOworCWNhc2UgMHhGOgorCQl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mby0+bGNkX3BhbmVsX2hyZXMgPSAxNjAwOworCQl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mby0+bGNkX3BhbmVsX3ZyZXMgPSAxMjAwOworCQl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mby0+bGNkX3BhbmVsX2lkID0KKwkJCUxDRF9QQU5FTF9JRDZfMTYwMFgxMjAwOworCQl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mby0+ZGV2aWNlX2xjZF9kdWFsZWRnZSA9IDE7CisJCXZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvLT5MQ0REaXRoZXJpbmcgPSAwOworCQlyZXR1cm4gVklBX1JFU18xNjAwWDEyMDA7CisJCWJyZWFrOworCWNhc2UgMHgxMDoKKwkJdmlhcGFyaW5mby0+bHZkc19zZXR0aW5nX2luZm8tPmxjZF9wYW5lbF9ocmVzID0gMTM2NjsKKwkJdmlhcGFyaW5mby0+bHZkc19zZXR0aW5nX2luZm8tPmxjZF9wYW5lbF92cmVzID0gNzY4OworCQl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mby0+bGNkX3BhbmVsX2lkID0KKwkJCUxDRF9QQU5FTF9JRDdfMTM2Nlg3Njg7CisJCXZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvLT5kZXZpY2VfbGNkX2R1YWxlZGdlID0gMDsKKwkJdmlhcGFyaW5mby0+bHZkc19zZXR0aW5nX2luZm8tPkxDRERpdGhlcmluZyA9IDA7CisJCXJldHVybiBWSUFfUkVTXzEzNjhYNzY4OworCQlicmVhazsKKwljYXNlIDB4MTE6CisJCXZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvLT5sY2RfcGFuZWxfaHJlcyA9IDEwMjQ7CisJCXZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvLT5sY2RfcGFuZWxfdnJlcyA9IDYwMDsKKwkJdmlhcGFyaW5mby0+bHZkc19zZXR0aW5nX2luZm8tPmxjZF9wYW5lbF9pZCA9CisJCQlMQ0RfUEFORUxfSUQ4XzEwMjRYNjAwOworCQl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mby0+ZGV2aWNlX2xjZF9kdWFsZWRnZSA9IDA7CisJCXZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvLT5MQ0REaXRoZXJpbmcgPSAxOworCQlyZXR1cm4gVklBX1JFU18xMDI0WDYwMDsKKwkJYnJlYWs7CisJY2FzZSAweDEyOgorCQl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mby0+bGNkX3BhbmVsX2hyZXMgPSAxMjgwOworCQl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mby0+bGNkX3BhbmVsX3ZyZXMgPSA3Njg7CisJCXZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvLT5sY2RfcGFuZWxfaWQgPQorCQkJTENEX1BBTkVMX0lEM18xMjgwWDc2ODsKKwkJdmlhcGFyaW5mby0+bHZkc19zZXR0aW5nX2luZm8tPmRldmljZV9sY2RfZHVhbGVkZ2UgPSAxOworCQl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mby0+TENERGl0aGVyaW5nID0gMTsKKwkJcmV0dXJuIFZJQV9SRVNfMTI4MFg3Njg7CisJCWJyZWFrOworCWNhc2UgMHgxMzoKKwkJdmlhcGFyaW5mby0+bHZkc19zZXR0aW5nX2luZm8tPmxjZF9wYW5lbF9ocmVzID0gMTI4MDsKKwkJdmlhcGFyaW5mby0+bHZkc19zZXR0aW5nX2luZm8tPmxjZF9wYW5lbF92cmVzID0gODAwOworCQl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mby0+bGNkX3BhbmVsX2lkID0KKwkJCUxDRF9QQU5FTF9JRDlfMTI4MFg4MDA7CisJCXZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvLT5kZXZpY2VfbGNkX2R1YWxlZGdlID0gMDsKKwkJdmlhcGFyaW5mby0+bHZkc19zZXR0aW5nX2luZm8tPkxDRERpdGhlcmluZyA9IDE7CisJCXJldHVybiBWSUFfUkVTXzEyODBYODAwOworCQlicmVhazsKKwljYXNlIDB4MTQ6CisJCXZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvLT5sY2RfcGFuZWxfaHJlcyA9IDEzNjA7CisJCXZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvLT5sY2RfcGFuZWxfdnJlcyA9IDc2ODsKKwkJdmlhcGFyaW5mby0+bHZkc19zZXR0aW5nX2luZm8tPmxjZF9wYW5lbF9pZCA9CisJCQlMQ0RfUEFORUxfSURCXzEzNjBYNzY4OworCQl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mby0+ZGV2aWNlX2xjZF9kdWFsZWRnZSA9IDA7CisJCXZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvLT5MQ0REaXRoZXJpbmcgPSAwOworCQlyZXR1cm4gVklBX1JFU18xMzYwWDc2ODsKKwkJYnJlYWs7CisJY2FzZSAweDE1OgorCQl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mby0+bGNkX3BhbmVsX2hyZXMgPSAxMjgwOworCQl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mby0+bGNkX3BhbmVsX3ZyZXMgPSA3Njg7CisJCXZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvLT5sY2RfcGFuZWxfaWQgPQorCQkJTENEX1BBTkVMX0lEM18xMjgwWDc2ODsKKwkJdmlhcGFyaW5mby0+bHZkc19zZXR0aW5nX2luZm8tPmRldmljZV9sY2RfZHVhbGVkZ2UgPSAxOworCQl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mby0+TENERGl0aGVyaW5nID0gMDsKKwkJcmV0dXJuIFZJQV9SRVNfMTI4MFg3Njg7CisJCWJyZWFrOworCWNhc2UgMHgxNjoKKwkJdmlhcGFyaW5mby0+bHZkc19zZXR0aW5nX2luZm8tPmxjZF9wYW5lbF9ocmVzID0gNDgwOworCQl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mby0+bGNkX3BhbmVsX3ZyZXMgPSA2NDA7CisJCXZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvLT5sY2RfcGFuZWxfaWQgPQorCQkJTENEX1BBTkVMX0lEQ180ODBYNjQwOworCQl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mby0+ZGV2aWNlX2xjZF9kdWFsZWRnZSA9IDA7CisJCXZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvLT5MQ0REaXRoZXJpbmcgPSAxOworCQlyZXR1cm4gVklBX1JFU180ODBYNjQwOworCQlicmVhazsKKwlkZWZhdWx0OgorCQl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mby0+bGNkX3BhbmVsX2hyZXMgPSA4MDA7CisJCXZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvLT5sY2RfcGFuZWxfdnJlcyA9IDYwMDsKKwkJdmlhcGFyaW5mby0+bHZkc19zZXR0aW5nX2luZm8tPmxjZF9wYW5lbF9pZCA9CisJCQlMQ0RfUEFORUxfSUQxXzgwMFg2MDA7CisJCXZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvLT5kZXZpY2VfbGNkX2R1YWxlZGdlID0gMDsKKwkJdmlhcGFyaW5mby0+bHZkc19zZXR0aW5nX2luZm8tPkxDRERpdGhlcmluZyA9IDE7CisJCXJldHVybiBWSUFfUkVTXzgwMFg2MDA7CisJfQorfQorCitzdGF0aWMgaW50IGx2ZHNfcmVnaXN0ZXJfcmVhZChpbnQgaW5kZXgpCit7CisJdTggZGF0YTsKKworCXZpYXBhcmluZm8tPmkyY19zdHVmZi5pMmNfcG9ydCA9IEdQSU9QT1JUSU5ERVg7CisJdmlhZmJfaTJjX3JlYWRieXRlKCh1OCkgdmlhcGFyaW5mby0+Y2hpcF9pbmZvLT4KKwkgICAgbHZkc19jaGlwX2luZm8ubHZkc19jaGlwX3NsYXZlX2FkZHIsCisJCQkodTgpIGluZGV4LCAmZGF0YSk7CisJcmV0dXJuIGRhdGE7Cit9CisKK3N0YXRpYyB2b2lkIGxvYWRfbGNkX3NjYWxpbmcoaW50IHNldF9ocmVzLCBpbnQgc2V0X3ZyZXMsIGludCBwYW5lbF9ocmVzLAorCQkgICAgICBpbnQgcGFuZWxfdnJlcykKK3sKKwlpbnQgcmVnX3ZhbHVlID0gMDsKKwlpbnQgdmlhZmJfbG9hZF9yZWdfbnVtOworCXN0cnVjdCBpb19yZWdpc3RlciAqcmVnID0gTlVMTDsKKworCURFQlVHX01TRyhLRVJOX0lORk8gImxvYWRfbGNkX3NjYWxpbmcoKSEhXG4iKTsKKworCS8qIExDRCBTY2FsaW5nIEVuYWJsZSAqLworCXZpYWZiX3dyaXRlX3JlZ19tYXNrKENSNzksIFZJQUNSLCAweDA3LCBCSVQwICsgQklUMSArIEJJVDIpOworCWlmIChVTklDSFJPTUVfUDRNOTAwID09IHZpYXBhcmluZm8tPmNoaXBfaW5mby0+Z2Z4X2NoaXBfbmFtZSkgeworCQl2aWFmYl9sb2FkX3NjYWxpbmdfZmFjdG9yX2Zvcl9wNG05MDAoc2V0X2hyZXMsIHNldF92cmVzLAorCQkJCQkgICAgICAgcGFuZWxfaHJlcywgcGFuZWxfdnJlcyk7CisJCXJldHVybjsKKwl9CisKKwkvKiBDaGVjayBpZiBleHBhbnNpb24gZm9yIGhvcml6b250YWwgKi8KKwlpZiAoc2V0X2hyZXMgIT0gcGFuZWxfaHJlcykgeworCQkvKiBMb2FkIEhvcml6b250YWwgU2NhbGluZyBGYWN0b3IgKi8KKwkJc3dpdGNoICh2aWFwYXJpbmZvLT5jaGlwX2luZm8tPmdmeF9jaGlwX25hbWUpIHsKKwkJY2FzZSBVTklDSFJPTUVfQ0xFMjY2OgorCQljYXNlIFVOSUNIUk9NRV9LNDAwOgorCQkJcmVnX3ZhbHVlID0KKwkJCSAgICBDTEUyNjZfTENEX0hPUl9TQ0ZfRk9STVVMQShzZXRfaHJlcywgcGFuZWxfaHJlcyk7CisJCQl2aWFmYl9sb2FkX3JlZ19udW0gPQorCQkJICAgIGxjZF9zY2FsaW5nX2ZhY3Rvcl9DTEUubGNkX2hvcl9zY2FsaW5nX2ZhY3Rvci4KKwkJCSAgICByZWdfbnVtOworCQkJcmVnID0gbGNkX3NjYWxpbmdfZmFjdG9yX0NMRS5sY2RfaG9yX3NjYWxpbmdfZmFjdG9yLnJlZzsKKwkJCXZpYWZiX2xvYWRfcmVnKHJlZ192YWx1ZSwKKwkJCQl2aWFmYl9sb2FkX3JlZ19udW0sIHJlZywgVklBQ1IpOworCQkJYnJlYWs7CisJCWNhc2UgVU5JQ0hST01FX0s4MDA6CisJCWNhc2UgVU5JQ0hST01FX1BNODAwOgorCQljYXNlIFVOSUNIUk9NRV9DTjcwMDoKKwkJY2FzZSBVTklDSFJPTUVfQ1g3MDA6CisJCWNhc2UgVU5JQ0hST01FX0s4TTg5MDoKKwkJY2FzZSBVTklDSFJPTUVfUDRNODkwOgorCQkJcmVnX3ZhbHVlID0KKwkJCSAgICBLODAwX0xDRF9IT1JfU0NGX0ZPUk1VTEEoc2V0X2hyZXMsIHBhbmVsX2hyZXMpOworCQkJLyogSG9yaXpvbnRhbCBzY2FsaW5nIGVuYWJsZWQgKi8KKwkJCXZpYWZiX3dyaXRlX3JlZ19tYXNrKENSQTIsIFZJQUNSLCAweEMwLCBCSVQ3ICsgQklUNik7CisJCQl2aWFmYl9sb2FkX3JlZ19udW0gPQorCQkJICAgIGxjZF9zY2FsaW5nX2ZhY3Rvci5sY2RfaG9yX3NjYWxpbmdfZmFjdG9yLnJlZ19udW07CisJCQlyZWcgPSBsY2Rfc2NhbGluZ19mYWN0b3IubGNkX2hvcl9zY2FsaW5nX2ZhY3Rvci5yZWc7CisJCQl2aWFmYl9sb2FkX3JlZyhyZWdfdmFsdWUsCisJCQkJdmlhZmJfbG9hZF9yZWdfbnVtLCByZWcsIFZJQUNSKTsKKwkJCWJyZWFrOworCQl9CisKKwkJREVCVUdfTVNHKEtFUk5fSU5GTyAiSG9yaXpvbnRhbCBTY2FsaW5nIHZhbHVlID0gJWQiLCByZWdfdmFsdWUpOworCX0gZWxzZSB7CisJCS8qIEhvcml6b250YWwgc2NhbGluZyBkaXNhYmxlZCAqLworCQl2aWFmYl93cml0ZV9yZWdfbWFzayhDUkEyLCBWSUFDUiwgMHgwMCwgQklUNyk7CisJfQorCisJLyogQ2hlY2sgaWYgZXhwYW5zaW9uIGZvciB2ZXJ0aWNhbCAqLworCWlmIChzZXRfdnJlcyAhPSBwYW5lbF92cmVzKSB7CisJCS8qIExvYWQgVmVydGljYWwgU2NhbGluZyBGYWN0b3IgKi8KKwkJc3dpdGNoICh2aWFwYXJpbmZvLT5jaGlwX2luZm8tPmdmeF9jaGlwX25hbWUpIHsKKwkJY2FzZSBVTklDSFJPTUVfQ0xFMjY2OgorCQljYXNlIFVOSUNIUk9NRV9LNDAwOgorCQkJcmVnX3ZhbHVlID0KKwkJCSAgICBDTEUyNjZfTENEX1ZFUl9TQ0ZfRk9STVVMQShzZXRfdnJlcywgcGFuZWxfdnJlcyk7CisJCQl2aWFmYl9sb2FkX3JlZ19udW0gPQorCQkJICAgIGxjZF9zY2FsaW5nX2ZhY3Rvcl9DTEUubGNkX3Zlcl9zY2FsaW5nX2ZhY3Rvci4KKwkJCSAgICByZWdfbnVtOworCQkJcmVnID0gbGNkX3NjYWxpbmdfZmFjdG9yX0NMRS5sY2RfdmVyX3NjYWxpbmdfZmFjdG9yLnJlZzsKKwkJCXZpYWZiX2xvYWRfcmVnKHJlZ192YWx1ZSwKKwkJCQl2aWFmYl9sb2FkX3JlZ19udW0sIHJlZywgVklBQ1IpOworCQkJYnJlYWs7CisJCWNhc2UgVU5JQ0hST01FX0s4MDA6CisJCWNhc2UgVU5JQ0hST01FX1BNODAwOgorCQljYXNlIFVOSUNIUk9NRV9DTjcwMDoKKwkJY2FzZSBVTklDSFJPTUVfQ1g3MDA6CisJCWNhc2UgVU5JQ0hST01FX0s4TTg5MDoKKwkJY2FzZSBVTklDSFJPTUVfUDRNODkwOgorCQkJcmVnX3ZhbHVlID0KKwkJCSAgICBLODAwX0xDRF9WRVJfU0NGX0ZPUk1VTEEoc2V0X3ZyZXMsIHBhbmVsX3ZyZXMpOworCQkJLyogVmVydGljYWwgc2NhbGluZyBlbmFibGVkICovCisJCQl2aWFmYl93cml0ZV9yZWdfbWFzayhDUkEyLCBWSUFDUiwgMHgwOCwgQklUMyk7CisJCQl2aWFmYl9sb2FkX3JlZ19udW0gPQorCQkJICAgIGxjZF9zY2FsaW5nX2ZhY3Rvci5sY2RfdmVyX3NjYWxpbmdfZmFjdG9yLnJlZ19udW07CisJCQlyZWcgPSBsY2Rfc2NhbGluZ19mYWN0b3IubGNkX3Zlcl9zY2FsaW5nX2ZhY3Rvci5yZWc7CisJCQl2aWFmYl9sb2FkX3JlZyhyZWdfdmFsdWUsCisJCQkJdmlhZmJfbG9hZF9yZWdfbnVtLCByZWcsIFZJQUNSKTsKKwkJCWJyZWFrOworCQl9CisKKwkJREVCVUdfTVNHKEtFUk5fSU5GTyAiVmVydGljYWwgU2NhbGluZyB2YWx1ZSA9ICVkIiwgcmVnX3ZhbHVlKTsKKwl9IGVsc2UgeworCQkvKiBWZXJ0aWNhbCBzY2FsaW5nIGRpc2FibGVkICovCisJCXZpYWZiX3dyaXRlX3JlZ19tYXNrKENSQTIsIFZJQUNSLCAweDAwLCBCSVQzKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGxvYWRfbGNkX2s0MDBfcGF0Y2hfdGJsKGludCBzZXRfaHJlcywgaW50IHNldF92cmVzLAorCWludCBwYW5lbF9pZCkKK3sKKwlpbnQgdm1vZGVfaW5kZXg7CisJaW50IHJlZ19udW0gPSAwOworCXN0cnVjdCBpb19yZWcgKmxjZF9wYXRjaF9yZWcgPSBOVUxMOworCisJaWYgKHZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvLT5pZ2FfcGF0aCA9PSBJR0EyKQorCQl2bW9kZV9pbmRleCA9IHZpYWZiX2dldF9tb2RlX2luZGV4KHNldF9ocmVzLCBzZXRfdnJlcywgMSk7CisJZWxzZQorCQl2bW9kZV9pbmRleCA9IHZpYWZiX2dldF9tb2RlX2luZGV4KHNldF9ocmVzLCBzZXRfdnJlcywgMCk7CisJc3dpdGNoIChwYW5lbF9pZCkgeworCQkvKiBMQ0QgODAweDYwMCAqLworCWNhc2UgTENEX1BBTkVMX0lEMV84MDBYNjAwOgorCQlzd2l0Y2ggKHZtb2RlX2luZGV4KSB7CisJCWNhc2UgVklBX1JFU182NDBYNDAwOgorCQljYXNlIFZJQV9SRVNfNjQwWDQ4MDoKKwkJCXJlZ19udW0gPSBOVU1fVE9UQUxfSzQwMF9MQ0RfUkVTXzZYNF84WDY7CisJCQlsY2RfcGF0Y2hfcmVnID0gSzQwMF9MQ0RfUkVTXzZYNF84WDY7CisJCQlicmVhazsKKwkJY2FzZSBWSUFfUkVTXzcyMFg0ODA6CisJCWNhc2UgVklBX1JFU183MjBYNTc2OgorCQkJcmVnX251bSA9IE5VTV9UT1RBTF9LNDAwX0xDRF9SRVNfN1g0XzhYNjsKKwkJCWxjZF9wYXRjaF9yZWcgPSBLNDAwX0xDRF9SRVNfN1g0XzhYNjsKKwkJCWJyZWFrOworCQl9CisJCWJyZWFrOworCisJCS8qIExDRCAxMDI0eDc2OCAqLworCWNhc2UgTENEX1BBTkVMX0lEMl8xMDI0WDc2ODoKKwkJc3dpdGNoICh2bW9kZV9pbmRleCkgeworCQljYXNlIFZJQV9SRVNfNjQwWDQwMDoKKwkJY2FzZSBWSUFfUkVTXzY0MFg0ODA6CisJCQlyZWdfbnVtID0gTlVNX1RPVEFMX0s0MDBfTENEX1JFU182WDRfMTBYNzsKKwkJCWxjZF9wYXRjaF9yZWcgPSBLNDAwX0xDRF9SRVNfNlg0XzEwWDc7CisJCQlicmVhazsKKwkJY2FzZSBWSUFfUkVTXzcyMFg0ODA6CisJCWNhc2UgVklBX1JFU183MjBYNTc2OgorCQkJcmVnX251bSA9IE5VTV9UT1RBTF9LNDAwX0xDRF9SRVNfN1g0XzEwWDc7CisJCQlsY2RfcGF0Y2hfcmVnID0gSzQwMF9MQ0RfUkVTXzdYNF8xMFg3OworCQkJYnJlYWs7CisJCWNhc2UgVklBX1JFU184MDBYNjAwOgorCQkJcmVnX251bSA9IE5VTV9UT1RBTF9LNDAwX0xDRF9SRVNfOFg2XzEwWDc7CisJCQlsY2RfcGF0Y2hfcmVnID0gSzQwMF9MQ0RfUkVTXzhYNl8xMFg3OworCQkJYnJlYWs7CisJCX0KKwkJYnJlYWs7CisKKwkJLyogTENEIDEyODB4MTAyNCAqLworCWNhc2UgTENEX1BBTkVMX0lENF8xMjgwWDEwMjQ6CisJCXN3aXRjaCAodm1vZGVfaW5kZXgpIHsKKwkJY2FzZSBWSUFfUkVTXzY0MFg0MDA6CisJCWNhc2UgVklBX1JFU182NDBYNDgwOgorCQkJcmVnX251bSA9IE5VTV9UT1RBTF9LNDAwX0xDRF9SRVNfNlg0XzEyWDEwOworCQkJbGNkX3BhdGNoX3JlZyA9IEs0MDBfTENEX1JFU182WDRfMTJYMTA7CisJCQlicmVhazsKKwkJY2FzZSBWSUFfUkVTXzcyMFg0ODA6CisJCWNhc2UgVklBX1JFU183MjBYNTc2OgorCQkJcmVnX251bSA9IE5VTV9UT1RBTF9LNDAwX0xDRF9SRVNfN1g0XzEyWDEwOworCQkJbGNkX3BhdGNoX3JlZyA9IEs0MDBfTENEX1JFU183WDRfMTJYMTA7CisJCQlicmVhazsKKwkJY2FzZSBWSUFfUkVTXzgwMFg2MDA6CisJCQlyZWdfbnVtID0gTlVNX1RPVEFMX0s0MDBfTENEX1JFU184WDZfMTJYMTA7CisJCQlsY2RfcGF0Y2hfcmVnID0gSzQwMF9MQ0RfUkVTXzhYNl8xMlgxMDsKKwkJCWJyZWFrOworCQljYXNlIFZJQV9SRVNfMTAyNFg3Njg6CisJCQlyZWdfbnVtID0gTlVNX1RPVEFMX0s0MDBfTENEX1JFU18xMFg3XzEyWDEwOworCQkJbGNkX3BhdGNoX3JlZyA9IEs0MDBfTENEX1JFU18xMFg3XzEyWDEwOworCQkJYnJlYWs7CisKKwkJfQorCQlicmVhazsKKworCQkvKiBMQ0QgMTQwMHgxMDUwICovCisJY2FzZSBMQ0RfUEFORUxfSUQ1XzE0MDBYMTA1MDoKKwkJc3dpdGNoICh2bW9kZV9pbmRleCkgeworCQljYXNlIFZJQV9SRVNfNjQwWDQ4MDoKKwkJCXJlZ19udW0gPSBOVU1fVE9UQUxfSzQwMF9MQ0RfUkVTXzZYNF8xNFgxMDsKKwkJCWxjZF9wYXRjaF9yZWcgPSBLNDAwX0xDRF9SRVNfNlg0XzE0WDEwOworCQkJYnJlYWs7CisJCWNhc2UgVklBX1JFU184MDBYNjAwOgorCQkJcmVnX251bSA9IE5VTV9UT1RBTF9LNDAwX0xDRF9SRVNfOFg2XzE0WDEwOworCQkJbGNkX3BhdGNoX3JlZyA9IEs0MDBfTENEX1JFU184WDZfMTRYMTA7CisJCQlicmVhazsKKwkJY2FzZSBWSUFfUkVTXzEwMjRYNzY4OgorCQkJcmVnX251bSA9IE5VTV9UT1RBTF9LNDAwX0xDRF9SRVNfMTBYN18xNFgxMDsKKwkJCWxjZF9wYXRjaF9yZWcgPSBLNDAwX0xDRF9SRVNfMTBYN18xNFgxMDsKKwkJCWJyZWFrOworCQljYXNlIFZJQV9SRVNfMTI4MFg3Njg6CisJCWNhc2UgVklBX1JFU18xMjgwWDgwMDoKKwkJY2FzZSBWSUFfUkVTXzEyODBYOTYwOgorCQljYXNlIFZJQV9SRVNfMTI4MFgxMDI0OgorCQkJcmVnX251bSA9IE5VTV9UT1RBTF9LNDAwX0xDRF9SRVNfMTJYMTBfMTRYMTA7CisJCQlsY2RfcGF0Y2hfcmVnID0gSzQwMF9MQ0RfUkVTXzEyWDEwXzE0WDEwOworCQkJYnJlYWs7CisJCX0KKwkJYnJlYWs7CisKKwkJLyogTENEIDE2MDB4MTIwMCAqLworCWNhc2UgTENEX1BBTkVMX0lENl8xNjAwWDEyMDA6CisJCXN3aXRjaCAodm1vZGVfaW5kZXgpIHsKKwkJY2FzZSBWSUFfUkVTXzY0MFg0MDA6CisJCWNhc2UgVklBX1JFU182NDBYNDgwOgorCQkJcmVnX251bSA9IE5VTV9UT1RBTF9LNDAwX0xDRF9SRVNfNlg0XzE2WDEyOworCQkJbGNkX3BhdGNoX3JlZyA9IEs0MDBfTENEX1JFU182WDRfMTZYMTI7CisJCQlicmVhazsKKwkJY2FzZSBWSUFfUkVTXzcyMFg0ODA6CisJCWNhc2UgVklBX1JFU183MjBYNTc2OgorCQkJcmVnX251bSA9IE5VTV9UT1RBTF9LNDAwX0xDRF9SRVNfN1g0XzE2WDEyOworCQkJbGNkX3BhdGNoX3JlZyA9IEs0MDBfTENEX1JFU183WDRfMTZYMTI7CisJCQlicmVhazsKKwkJY2FzZSBWSUFfUkVTXzgwMFg2MDA6CisJCQlyZWdfbnVtID0gTlVNX1RPVEFMX0s0MDBfTENEX1JFU184WDZfMTZYMTI7CisJCQlsY2RfcGF0Y2hfcmVnID0gSzQwMF9MQ0RfUkVTXzhYNl8xNlgxMjsKKwkJCWJyZWFrOworCQljYXNlIFZJQV9SRVNfMTAyNFg3Njg6CisJCQlyZWdfbnVtID0gTlVNX1RPVEFMX0s0MDBfTENEX1JFU18xMFg3XzE2WDEyOworCQkJbGNkX3BhdGNoX3JlZyA9IEs0MDBfTENEX1JFU18xMFg3XzE2WDEyOworCQkJYnJlYWs7CisJCWNhc2UgVklBX1JFU18xMjgwWDc2ODoKKwkJY2FzZSBWSUFfUkVTXzEyODBYODAwOgorCQljYXNlIFZJQV9SRVNfMTI4MFg5NjA6CisJCWNhc2UgVklBX1JFU18xMjgwWDEwMjQ6CisJCQlyZWdfbnVtID0gTlVNX1RPVEFMX0s0MDBfTENEX1JFU18xMlgxMF8xNlgxMjsKKwkJCWxjZF9wYXRjaF9yZWcgPSBLNDAwX0xDRF9SRVNfMTJYMTBfMTZYMTI7CisJCQlicmVhazsKKwkJfQorCQlicmVhazsKKworCQkvKiBMQ0QgMTM2Nng3NjggKi8KKwljYXNlIExDRF9QQU5FTF9JRDdfMTM2Nlg3Njg6CisJCXN3aXRjaCAodm1vZGVfaW5kZXgpIHsKKwkJY2FzZSBWSUFfUkVTXzY0MFg0ODA6CisJCQlyZWdfbnVtID0gTlVNX1RPVEFMX0s0MDBfTENEX1JFU182WDRfMTM2Nlg3OworCQkJbGNkX3BhdGNoX3JlZyA9IEs0MDBfTENEX1JFU182WDRfMTM2Nlg3OworCQkJYnJlYWs7CisJCWNhc2UgVklBX1JFU183MjBYNDgwOgorCQljYXNlIFZJQV9SRVNfNzIwWDU3NjoKKwkJCXJlZ19udW0gPSBOVU1fVE9UQUxfSzQwMF9MQ0RfUkVTXzdYNF8xMzY2WDc7CisJCQlsY2RfcGF0Y2hfcmVnID0gSzQwMF9MQ0RfUkVTXzdYNF8xMzY2WDc7CisJCQlicmVhazsKKwkJY2FzZSBWSUFfUkVTXzgwMFg2MDA6CisJCQlyZWdfbnVtID0gTlVNX1RPVEFMX0s0MDBfTENEX1JFU184WDZfMTM2Nlg3OworCQkJbGNkX3BhdGNoX3JlZyA9IEs0MDBfTENEX1JFU184WDZfMTM2Nlg3OworCQkJYnJlYWs7CisJCWNhc2UgVklBX1JFU18xMDI0WDc2ODoKKwkJCXJlZ19udW0gPSBOVU1fVE9UQUxfSzQwMF9MQ0RfUkVTXzEwWDdfMTM2Nlg3OworCQkJbGNkX3BhdGNoX3JlZyA9IEs0MDBfTENEX1JFU18xMFg3XzEzNjZYNzsKKwkJCWJyZWFrOworCQljYXNlIFZJQV9SRVNfMTI4MFg3Njg6CisJCWNhc2UgVklBX1JFU18xMjgwWDgwMDoKKwkJY2FzZSBWSUFfUkVTXzEyODBYOTYwOgorCQljYXNlIFZJQV9SRVNfMTI4MFgxMDI0OgorCQkJcmVnX251bSA9IE5VTV9UT1RBTF9LNDAwX0xDRF9SRVNfMTJYMTBfMTM2Nlg3OworCQkJbGNkX3BhdGNoX3JlZyA9IEs0MDBfTENEX1JFU18xMlgxMF8xMzY2WDc7CisJCQlicmVhazsKKwkJfQorCQlicmVhazsKKworCQkvKiBMQ0QgMTM2MHg3NjggKi8KKwljYXNlIExDRF9QQU5FTF9JREJfMTM2MFg3Njg6CisJCWJyZWFrOworCX0KKwlpZiAocmVnX251bSAhPSAwKSB7CisJCS8qIEguVy4gUmVzZXQgOiBPTiAqLworCQl2aWFmYl93cml0ZV9yZWdfbWFzayhDUjE3LCBWSUFDUiwgMHgwMCwgQklUNyk7CisKKwkJdmlhZmJfd3JpdGVfcmVneChsY2RfcGF0Y2hfcmVnLCByZWdfbnVtKTsKKworCQkvKiBILlcuIFJlc2V0IDogT0ZGICovCisJCXZpYWZiX3dyaXRlX3JlZ19tYXNrKENSMTcsIFZJQUNSLCAweDgwLCBCSVQ3KTsKKworCQkvKiBSZXNldCBQTEwgKi8KKwkJdmlhZmJfd3JpdGVfcmVnX21hc2soU1I0MCwgVklBU1IsIDB4MDIsIEJJVDEpOworCQl2aWFmYl93cml0ZV9yZWdfbWFzayhTUjQwLCBWSUFTUiwgMHgwMCwgQklUMSk7CisKKwkJLyogRmlyZSEgKi8KKwkJb3V0YihpbmIoVklBUk1pc2MpIHwgKEJJVDIgKyBCSVQzKSwgVklBV01pc2MpOworCX0KK30KKworc3RhdGljIHZvaWQgbG9hZF9sY2RfcDg4MF9wYXRjaF90YmwoaW50IHNldF9ocmVzLCBpbnQgc2V0X3ZyZXMsCisJaW50IHBhbmVsX2lkKQoreworCWludCB2bW9kZV9pbmRleDsKKwlpbnQgcmVnX251bSA9IDA7CisJc3RydWN0IGlvX3JlZyAqbGNkX3BhdGNoX3JlZyA9IE5VTEw7CisKKwlpZiAodmlhcGFyaW5mby0+bHZkc19zZXR0aW5nX2luZm8tPmlnYV9wYXRoID09IElHQTIpCisJCXZtb2RlX2luZGV4ID0gdmlhZmJfZ2V0X21vZGVfaW5kZXgoc2V0X2hyZXMsIHNldF92cmVzLCAxKTsKKwllbHNlCisJCXZtb2RlX2luZGV4ID0gdmlhZmJfZ2V0X21vZGVfaW5kZXgoc2V0X2hyZXMsIHNldF92cmVzLCAwKTsKKworCXN3aXRjaCAocGFuZWxfaWQpIHsKKwljYXNlIExDRF9QQU5FTF9JRDVfMTQwMFgxMDUwOgorCQlzd2l0Y2ggKHZtb2RlX2luZGV4KSB7CisJCWNhc2UgVklBX1JFU182NDBYNDgwOgorCQkJcmVnX251bSA9IE5VTV9UT1RBTF9QODgwX0xDRF9SRVNfNlg0XzE0WDEwOworCQkJbGNkX3BhdGNoX3JlZyA9IFA4ODBfTENEX1JFU182WDRfMTRYMTA7CisJCQlicmVhazsKKwkJY2FzZSBWSUFfUkVTXzgwMFg2MDA6CisJCQlyZWdfbnVtID0gTlVNX1RPVEFMX1A4ODBfTENEX1JFU184WDZfMTRYMTA7CisJCQlsY2RfcGF0Y2hfcmVnID0gUDg4MF9MQ0RfUkVTXzhYNl8xNFgxMDsKKwkJCWJyZWFrOworCQl9CisJCWJyZWFrOworCWNhc2UgTENEX1BBTkVMX0lENl8xNjAwWDEyMDA6CisJCXN3aXRjaCAodm1vZGVfaW5kZXgpIHsKKwkJY2FzZSBWSUFfUkVTXzY0MFg0MDA6CisJCWNhc2UgVklBX1JFU182NDBYNDgwOgorCQkJcmVnX251bSA9IE5VTV9UT1RBTF9QODgwX0xDRF9SRVNfNlg0XzE2WDEyOworCQkJbGNkX3BhdGNoX3JlZyA9IFA4ODBfTENEX1JFU182WDRfMTZYMTI7CisJCQlicmVhazsKKwkJY2FzZSBWSUFfUkVTXzcyMFg0ODA6CisJCWNhc2UgVklBX1JFU183MjBYNTc2OgorCQkJcmVnX251bSA9IE5VTV9UT1RBTF9QODgwX0xDRF9SRVNfN1g0XzE2WDEyOworCQkJbGNkX3BhdGNoX3JlZyA9IFA4ODBfTENEX1JFU183WDRfMTZYMTI7CisJCQlicmVhazsKKwkJY2FzZSBWSUFfUkVTXzgwMFg2MDA6CisJCQlyZWdfbnVtID0gTlVNX1RPVEFMX1A4ODBfTENEX1JFU184WDZfMTZYMTI7CisJCQlsY2RfcGF0Y2hfcmVnID0gUDg4MF9MQ0RfUkVTXzhYNl8xNlgxMjsKKwkJCWJyZWFrOworCQljYXNlIFZJQV9SRVNfMTAyNFg3Njg6CisJCQlyZWdfbnVtID0gTlVNX1RPVEFMX1A4ODBfTENEX1JFU18xMFg3XzE2WDEyOworCQkJbGNkX3BhdGNoX3JlZyA9IFA4ODBfTENEX1JFU18xMFg3XzE2WDEyOworCQkJYnJlYWs7CisJCWNhc2UgVklBX1JFU18xMjgwWDc2ODoKKwkJY2FzZSBWSUFfUkVTXzEyODBYOTYwOgorCQljYXNlIFZJQV9SRVNfMTI4MFgxMDI0OgorCQkJcmVnX251bSA9IE5VTV9UT1RBTF9QODgwX0xDRF9SRVNfMTJYMTBfMTZYMTI7CisJCQlsY2RfcGF0Y2hfcmVnID0gUDg4MF9MQ0RfUkVTXzEyWDEwXzE2WDEyOworCQkJYnJlYWs7CisJCX0KKwkJYnJlYWs7CisKKwl9CisJaWYgKHJlZ19udW0gIT0gMCkgeworCQkvKiBILlcuIFJlc2V0IDogT04gKi8KKwkJdmlhZmJfd3JpdGVfcmVnX21hc2soQ1IxNywgVklBQ1IsIDB4MDAsIEJJVDcpOworCisJCXZpYWZiX3dyaXRlX3JlZ3gobGNkX3BhdGNoX3JlZywgcmVnX251bSk7CisKKwkJLyogSC5XLiBSZXNldCA6IE9GRiAqLworCQl2aWFmYl93cml0ZV9yZWdfbWFzayhDUjE3LCBWSUFDUiwgMHg4MCwgQklUNyk7CisKKwkJLyogUmVzZXQgUExMICovCisJCXZpYWZiX3dyaXRlX3JlZ19tYXNrKFNSNDAsIFZJQVNSLCAweDAyLCBCSVQxKTsKKwkJdmlhZmJfd3JpdGVfcmVnX21hc2soU1I0MCwgVklBU1IsIDB4MDAsIEJJVDEpOworCisJCS8qIEZpcmUhICovCisJCW91dGIoaW5iKFZJQVJNaXNjKSB8IChCSVQyICsgQklUMyksIFZJQVdNaXNjKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGxvYWRfbGNkX3BhdGNoX3JlZ3MoaW50IHNldF9ocmVzLCBpbnQgc2V0X3ZyZXMsCisJaW50IHBhbmVsX2lkLCBpbnQgc2V0X2lnYSkKK3sKKwlpbnQgdm1vZGVfaW5kZXg7CisKKwlpZiAodmlhcGFyaW5mby0+bHZkc19zZXR0aW5nX2luZm8tPmlnYV9wYXRoID09IElHQTIpCisJCXZtb2RlX2luZGV4ID0gdmlhZmJfZ2V0X21vZGVfaW5kZXgoc2V0X2hyZXMsIHNldF92cmVzLCAxKTsKKwllbHNlCisJCXZtb2RlX2luZGV4ID0gdmlhZmJfZ2V0X21vZGVfaW5kZXgoc2V0X2hyZXMsIHNldF92cmVzLCAwKTsKKworCXZpYWZiX3VubG9ja19jcnQoKTsKKworCS8qIFBhdGNoIGZvciBzaW11bHRhbmVvdXMgJiBFeHBhbnNpb24gKi8KKwlpZiAoKHNldF9pZ2EgPT0gSUdBMV9JR0EyKSAmJgorCQkodmlhcGFyaW5mby0+bHZkc19zZXR0aW5nX2luZm8tPmRpc3BsYXlfbWV0aG9kID09CisJICAgIExDRF9FWFBBTkRTSU9OKSkgeworCQlzd2l0Y2ggKHZpYXBhcmluZm8tPmNoaXBfaW5mby0+Z2Z4X2NoaXBfbmFtZSkgeworCQljYXNlIFVOSUNIUk9NRV9DTEUyNjY6CisJCWNhc2UgVU5JQ0hST01FX0s0MDA6CisJCQlsb2FkX2xjZF9rNDAwX3BhdGNoX3RibChzZXRfaHJlcywgc2V0X3ZyZXMsIHBhbmVsX2lkKTsKKwkJCWJyZWFrOworCQljYXNlIFVOSUNIUk9NRV9LODAwOgorCQkJYnJlYWs7CisJCWNhc2UgVU5JQ0hST01FX1BNODAwOgorCQljYXNlIFVOSUNIUk9NRV9DTjcwMDoKKwkJY2FzZSBVTklDSFJPTUVfQ1g3MDA6CisJCQlsb2FkX2xjZF9wODgwX3BhdGNoX3RibChzZXRfaHJlcywgc2V0X3ZyZXMsIHBhbmVsX2lkKTsKKwkJfQorCX0KKworCXZpYWZiX2xvY2tfY3J0KCk7Cit9CisKK3N0YXRpYyB2b2lkIHZpYV9waXRjaF9hbGlnbm1lbnRfcGF0Y2hfbGNkKAorCXN0cnVjdCBsdmRzX3NldHRpbmdfaW5mb3JtYXRpb24gKnBsdmRzX3NldHRpbmdfaW5mbywKKwkJCQkgICBzdHJ1Y3QgbHZkc19jaGlwX2luZm9ybWF0aW9uCisJCQkJICAgKnBsdmRzX2NoaXBfaW5mbykKK3sKKwl1bnNpZ25lZCBjaGFyIGNyMTMsIGNyMzUsIGNyNjUsIGNyNjYsIGNyNjc7CisJdW5zaWduZWQgbG9uZyBkd1NjcmVlblBpdGNoID0gMDsKKwl1bnNpZ25lZCBsb25nIGR3UGl0Y2g7CisKKwlkd1BpdGNoID0gcGx2ZHNfc2V0dGluZ19pbmZvLT5oX2FjdGl2ZSAqIChwbHZkc19zZXR0aW5nX2luZm8tPmJwcCA+PiAzKTsKKwlpZiAoZHdQaXRjaCAmIDB4MUYpIHsKKwkJZHdTY3JlZW5QaXRjaCA9ICgoZHdQaXRjaCArIDMxKSAmIH4zMSkgPj4gMzsKKwkJaWYgKHBsdmRzX3NldHRpbmdfaW5mby0+aWdhX3BhdGggPT0gSUdBMikgeworCQkJaWYgKHBsdmRzX3NldHRpbmdfaW5mby0+YnBwID4gOCkgeworCQkJCWNyNjYgPSAodW5zaWduZWQgY2hhcikoZHdTY3JlZW5QaXRjaCAmIDB4RkYpOworCQkJCXZpYWZiX3dyaXRlX3JlZyhDUjY2LCBWSUFDUiwgY3I2Nik7CisJCQkJY3I2NyA9IHZpYWZiX3JlYWRfcmVnKFZJQUNSLCBDUjY3KSAmIDB4RkM7CisJCQkJY3I2NyB8PQorCQkJCSAgICAodW5zaWduZWQKKwkJCQkgICAgIGNoYXIpKChkd1NjcmVlblBpdGNoICYgMHgzMDApID4+IDgpOworCQkJCXZpYWZiX3dyaXRlX3JlZyhDUjY3LCBWSUFDUiwgY3I2Nyk7CisJCQl9CisKKwkJCS8qIEZldGNoIENvdW50ICovCisJCQljcjY3ID0gdmlhZmJfcmVhZF9yZWcoVklBQ1IsIENSNjcpICYgMHhGMzsKKwkJCWNyNjcgfD0gKHVuc2lnbmVkIGNoYXIpKChkd1NjcmVlblBpdGNoICYgMHg2MDApID4+IDcpOworCQkJdmlhZmJfd3JpdGVfcmVnKENSNjcsIFZJQUNSLCBjcjY3KTsKKwkJCWNyNjUgPSAodW5zaWduZWQgY2hhcikoKGR3U2NyZWVuUGl0Y2ggPj4gMSkgJiAweEZGKTsKKwkJCWNyNjUgKz0gMjsKKwkJCXZpYWZiX3dyaXRlX3JlZyhDUjY1LCBWSUFDUiwgY3I2NSk7CisJCX0gZWxzZSB7CisJCQlpZiAocGx2ZHNfc2V0dGluZ19pbmZvLT5icHAgPiA4KSB7CisJCQkJY3IxMyA9ICh1bnNpZ25lZCBjaGFyKShkd1NjcmVlblBpdGNoICYgMHhGRik7CisJCQkJdmlhZmJfd3JpdGVfcmVnKENSMTMsIFZJQUNSLCBjcjEzKTsKKwkJCQljcjM1ID0gdmlhZmJfcmVhZF9yZWcoVklBQ1IsIENSMzUpICYgMHgxRjsKKwkJCQljcjM1IHw9CisJCQkJICAgICh1bnNpZ25lZAorCQkJCSAgICAgY2hhcikoKGR3U2NyZWVuUGl0Y2ggJiAweDcwMCkgPj4gMyk7CisJCQkJdmlhZmJfd3JpdGVfcmVnKENSMzUsIFZJQUNSLCBjcjM1KTsKKwkJCX0KKwkJfQorCX0KK30KK3N0YXRpYyB2b2lkIGxjZF9wYXRjaF9za2V3X2R2cDAoc3RydWN0IGx2ZHNfc2V0dGluZ19pbmZvcm1hdGlvbgorCQkJICpwbHZkc19zZXR0aW5nX2luZm8sCisJCQkgc3RydWN0IGx2ZHNfY2hpcF9pbmZvcm1hdGlvbiAqcGx2ZHNfY2hpcF9pbmZvKQoreworCWlmIChWVDE2MzZfTFZEUyA9PSBwbHZkc19jaGlwX2luZm8tPmx2ZHNfY2hpcF9uYW1lKSB7CisJCXN3aXRjaCAodmlhcGFyaW5mby0+Y2hpcF9pbmZvLT5nZnhfY2hpcF9uYW1lKSB7CisJCWNhc2UgVU5JQ0hST01FX1A0TTkwMDoKKwkJCXZpYWZiX3Z0MTYzNl9wYXRjaF9za2V3X29uX3Z0MzM2NChwbHZkc19zZXR0aW5nX2luZm8sCisJCQkJCQkgICAgcGx2ZHNfY2hpcF9pbmZvKTsKKwkJCWJyZWFrOworCQljYXNlIFVOSUNIUk9NRV9QNE04OTA6CisJCQl2aWFmYl92dDE2MzZfcGF0Y2hfc2tld19vbl92dDMzMjcocGx2ZHNfc2V0dGluZ19pbmZvLAorCQkJCQkJICAgIHBsdmRzX2NoaXBfaW5mbyk7CisJCQlicmVhazsKKwkJfQorCX0KK30KK3N0YXRpYyB2b2lkIGxjZF9wYXRjaF9za2V3X2R2cDEoc3RydWN0IGx2ZHNfc2V0dGluZ19pbmZvcm1hdGlvbgorCQkJICpwbHZkc19zZXR0aW5nX2luZm8sCisJCQkgc3RydWN0IGx2ZHNfY2hpcF9pbmZvcm1hdGlvbiAqcGx2ZHNfY2hpcF9pbmZvKQoreworCWlmIChWVDE2MzZfTFZEUyA9PSBwbHZkc19jaGlwX2luZm8tPmx2ZHNfY2hpcF9uYW1lKSB7CisJCXN3aXRjaCAodmlhcGFyaW5mby0+Y2hpcF9pbmZvLT5nZnhfY2hpcF9uYW1lKSB7CisJCWNhc2UgVU5JQ0hST01FX0NYNzAwOgorCQkJdmlhZmJfdnQxNjM2X3BhdGNoX3NrZXdfb25fdnQzMzI0KHBsdmRzX3NldHRpbmdfaW5mbywKKwkJCQkJCSAgICBwbHZkc19jaGlwX2luZm8pOworCQkJYnJlYWs7CisJCX0KKwl9Cit9CitzdGF0aWMgdm9pZCBsY2RfcGF0Y2hfc2tldyhzdHJ1Y3QgbHZkc19zZXR0aW5nX2luZm9ybWF0aW9uCisJKnBsdmRzX3NldHRpbmdfaW5mbywgc3RydWN0IGx2ZHNfY2hpcF9pbmZvcm1hdGlvbiAqcGx2ZHNfY2hpcF9pbmZvKQoreworCURFQlVHX01TRyhLRVJOX0lORk8gImxjZF9wYXRjaF9za2V3XG4iKTsKKwlzd2l0Y2ggKHBsdmRzX2NoaXBfaW5mby0+b3V0cHV0X2ludGVyZmFjZSkgeworCWNhc2UgSU5URVJGQUNFX0RWUDA6CisJCWxjZF9wYXRjaF9za2V3X2R2cDAocGx2ZHNfc2V0dGluZ19pbmZvLCBwbHZkc19jaGlwX2luZm8pOworCQlicmVhazsKKwljYXNlIElOVEVSRkFDRV9EVlAxOgorCQlsY2RfcGF0Y2hfc2tld19kdnAxKHBsdmRzX3NldHRpbmdfaW5mbywgcGx2ZHNfY2hpcF9pbmZvKTsKKwkJYnJlYWs7CisJY2FzZSBJTlRFUkZBQ0VfREZQX0xPVzoKKwkJaWYgKFVOSUNIUk9NRV9QNE05MDAgPT0gdmlhcGFyaW5mby0+Y2hpcF9pbmZvLT5nZnhfY2hpcF9uYW1lKSB7CisJCQl2aWFmYl93cml0ZV9yZWdfbWFzayhDUjk5LCBWSUFDUiwgMHgwOCwKKwkJCQkgICAgICAgQklUMCArIEJJVDEgKyBCSVQyICsgQklUMyk7CisJCX0KKwkJYnJlYWs7CisJfQorfQorCisvKiBMQ0QgU2V0IE1vZGUgKi8KK3ZvaWQgdmlhZmJfbGNkX3NldF9tb2RlKHN0cnVjdCBjcnRfbW9kZV90YWJsZSAqbW9kZV9jcnRfdGFibGUsCisJCSAgc3RydWN0IGx2ZHNfc2V0dGluZ19pbmZvcm1hdGlvbiAqcGx2ZHNfc2V0dGluZ19pbmZvLAorCQkgIHN0cnVjdCBsdmRzX2NoaXBfaW5mb3JtYXRpb24gKnBsdmRzX2NoaXBfaW5mbykKK3sKKwlpbnQgdmlkZW9faW5kZXggPSBwbHZkc19zZXR0aW5nX2luZm8tPmxjZF9wYW5lbF9zaXplOworCWludCBzZXRfaWdhID0gcGx2ZHNfc2V0dGluZ19pbmZvLT5pZ2FfcGF0aDsKKwlpbnQgbW9kZV9icHAgPSBwbHZkc19zZXR0aW5nX2luZm8tPmJwcDsKKwlpbnQgdmlhZmJfbG9hZF9yZWdfbnVtID0gMDsKKwlpbnQgcmVnX3ZhbHVlID0gMDsKKwlpbnQgc2V0X2hyZXMsIHNldF92cmVzOworCWludCBwYW5lbF9ocmVzLCBwYW5lbF92cmVzOworCXUzMiBwbGxfRF9OOworCWludCBvZmZzZXQ7CisJc3RydWN0IGlvX3JlZ2lzdGVyICpyZWcgPSBOVUxMOworCXN0cnVjdCBkaXNwbGF5X3RpbWluZyBtb2RlX2NydF9yZWcsIHBhbmVsX2NydF9yZWc7CisJc3RydWN0IGNydF9tb2RlX3RhYmxlICpwYW5lbF9jcnRfdGFibGUgPSBOVUxMOworCXN0cnVjdCBWaWRlb01vZGVUYWJsZSAqdm1vZGVfdGJsID0gTlVMTDsKKworCURFQlVHX01TRyhLRVJOX0lORk8gInZpYWZiX2xjZF9zZXRfbW9kZSEhXG4iKTsKKwkvKiBHZXQgbW9kZSB0YWJsZSAqLworCW1vZGVfY3J0X3JlZyA9IG1vZGVfY3J0X3RhYmxlLT5jcnRjOworCS8qIEdldCBwYW5lbCB0YWJsZSBQb2ludGVyICovCisJdm1vZGVfdGJsID0gdmlhZmJfZ2V0X21vZGV0YmxfcG9pbnRlcih2aWRlb19pbmRleCk7CisJcGFuZWxfY3J0X3RhYmxlID0gdm1vZGVfdGJsLT5jcnRjOworCXBhbmVsX2NydF9yZWcgPSBwYW5lbF9jcnRfdGFibGUtPmNydGM7CisJREVCVUdfTVNHKEtFUk5fSU5GTyAiYmVsbG93IHZpYWZiX2xjZF9zZXRfbW9kZSEhXG4iKTsKKwlzZXRfaHJlcyA9IHBsdmRzX3NldHRpbmdfaW5mby0+aF9hY3RpdmU7CisJc2V0X3ZyZXMgPSBwbHZkc19zZXR0aW5nX2luZm8tPnZfYWN0aXZlOworCXBhbmVsX2hyZXMgPSBwbHZkc19zZXR0aW5nX2luZm8tPmxjZF9wYW5lbF9ocmVzOworCXBhbmVsX3ZyZXMgPSBwbHZkc19zZXR0aW5nX2luZm8tPmxjZF9wYW5lbF92cmVzOworCWlmIChWVDE2MzZfTFZEUyA9PSBwbHZkc19jaGlwX2luZm8tPmx2ZHNfY2hpcF9uYW1lKQorCQl2aWFmYl9pbml0X2x2ZHNfdnQxNjM2KHBsdmRzX3NldHRpbmdfaW5mbywgcGx2ZHNfY2hpcF9pbmZvKTsKKwlwbHZkc19zZXR0aW5nX2luZm8tPnZjbGsgPSBwYW5lbF9jcnRfdGFibGUtPmNsazsKKwlpZiAoc2V0X2lnYSA9PSBJR0ExKSB7CisJCS8qIElHQTEgZG9lc24ndCBoYXZlIExDRCBzY2FsaW5nLCBzbyBzZXQgaXQgYXMgY2VudGVyaW5nLiAqLworCQl2aWFmYl9sb2FkX2NydGNfdGltaW5nKGxjZF9jZW50ZXJpbmdfdGltZ2luZworCQkJCSAobW9kZV9jcnRfcmVnLCBwYW5lbF9jcnRfcmVnKSwgSUdBMSk7CisJfSBlbHNlIHsKKwkJLyogRXhwYW5zaW9uICovCisJCWlmICgocGx2ZHNfc2V0dGluZ19pbmZvLT5kaXNwbGF5X21ldGhvZCA9PQorCQkgICAgIExDRF9FWFBBTkRTSU9OKSAmICgoc2V0X2hyZXMgIT0gcGFuZWxfaHJlcykKKwkJCQkJfHwgKHNldF92cmVzICE9IHBhbmVsX3ZyZXMpKSkgeworCQkJLyogZXhwYW5zaW9uIHRpbWluZyBJR0EyIGxvYWRlZCBwYW5lbCBzZXQgdGltaW5nKi8KKwkJCXZpYWZiX2xvYWRfY3J0Y190aW1pbmcocGFuZWxfY3J0X3JlZywgSUdBMik7CisJCQlERUJVR19NU0coS0VSTl9JTkZPICJ2aWFmYl9sb2FkX2NydGNfdGltaW5nISFcbiIpOworCQkJbG9hZF9sY2Rfc2NhbGluZyhzZXRfaHJlcywgc2V0X3ZyZXMsIHBhbmVsX2hyZXMsCisJCQkJCSBwYW5lbF92cmVzKTsKKwkJCURFQlVHX01TRyhLRVJOX0lORk8gImxvYWRfbGNkX3NjYWxpbmchIVxuIik7CisJCX0gZWxzZSB7CS8qIENlbnRlcmluZyAqLworCQkJLyogY2VudGVyaW5nIHRpbWluZyBJR0EyIGFsd2F5cyBsb2FkZWQgcGFuZWwKKwkJCSAgIGFuZCBtb2RlIHJlbGVhdGl2ZSB0aW1pbmcgKi8KKwkJCXZpYWZiX2xvYWRfY3J0Y190aW1pbmcobGNkX2NlbnRlcmluZ190aW1naW5nCisJCQkJCSAobW9kZV9jcnRfcmVnLCBwYW5lbF9jcnRfcmVnKSwgSUdBMik7CisJCQl2aWFmYl93cml0ZV9yZWdfbWFzayhDUjc5LCBWSUFDUiwgMHgwMCwKKwkJCQlCSVQwICsgQklUMSArIEJJVDIpOworCQkJLyogTENEIHNjYWxpbmcgZGlzYWJsZWQgKi8KKwkJfQorCX0KKworCWlmIChzZXRfaWdhID09IElHQTFfSUdBMikgeworCQlsb2FkX2NydGNfc2hhZG93X3RpbWluZyhtb2RlX2NydF9yZWcsIHBhbmVsX2NydF9yZWcpOworCQkvKiBGaWxsIHNoYWRvdyByZWdpc3RlcnMgKi8KKworCQlzd2l0Y2ggKHBsdmRzX3NldHRpbmdfaW5mby0+bGNkX3BhbmVsX2lkKSB7CisJCWNhc2UgTENEX1BBTkVMX0lEMF82NDBYNDgwOgorCQkJb2Zmc2V0ID0gODA7CisJCQlicmVhazsKKwkJY2FzZSBMQ0RfUEFORUxfSUQxXzgwMFg2MDA6CisJCWNhc2UgTENEX1BBTkVMX0lEQV84MDBYNDgwOgorCQkJb2Zmc2V0ID0gMTEwOworCQkJYnJlYWs7CisJCWNhc2UgTENEX1BBTkVMX0lEMl8xMDI0WDc2ODoKKwkJCW9mZnNldCA9IDE1MDsKKwkJCWJyZWFrOworCQljYXNlIExDRF9QQU5FTF9JRDNfMTI4MFg3Njg6CisJCWNhc2UgTENEX1BBTkVMX0lENF8xMjgwWDEwMjQ6CisJCWNhc2UgTENEX1BBTkVMX0lENV8xNDAwWDEwNTA6CisJCWNhc2UgTENEX1BBTkVMX0lEOV8xMjgwWDgwMDoKKwkJCW9mZnNldCA9IDE5MDsKKwkJCWJyZWFrOworCQljYXNlIExDRF9QQU5FTF9JRDZfMTYwMFgxMjAwOgorCQkJb2Zmc2V0ID0gMjUwOworCQkJYnJlYWs7CisJCWNhc2UgTENEX1BBTkVMX0lEN18xMzY2WDc2ODoKKwkJY2FzZSBMQ0RfUEFORUxfSURCXzEzNjBYNzY4OgorCQkJb2Zmc2V0ID0gMjEyOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlvZmZzZXQgPSAxNDA7CisJCQlicmVhazsKKwkJfQorCisJCS8qIE9mZnNldCBmb3Igc2ltdWx0YW5lb3VzICovCisJCXJlZ192YWx1ZSA9IG9mZnNldDsKKwkJdmlhZmJfbG9hZF9yZWdfbnVtID0gb2Zmc2V0X3JlZy5pZ2EyX29mZnNldF9yZWcucmVnX251bTsKKwkJcmVnID0gb2Zmc2V0X3JlZy5pZ2EyX29mZnNldF9yZWcucmVnOworCQl2aWFmYl9sb2FkX3JlZyhyZWdfdmFsdWUsIHZpYWZiX2xvYWRfcmVnX251bSwgcmVnLCBWSUFDUik7CisJCURFQlVHX01TRyhLRVJOX0lORk8gInZpYWZiX2xvYWRfcmVnISFcbiIpOworCQl2aWFmYl9sb2FkX2ZldGNoX2NvdW50X3JlZyhzZXRfaHJlcywgNCwgSUdBMik7CisJCS8qIEZldGNoIGNvdW50IGZvciBzaW11bHRhbmVvdXMgKi8KKwl9IGVsc2UgewkJLyogU0FNTSAqLworCQkvKiBPZmZzZXQgZm9yIElHQTIgb25seSAqLworCQl2aWFmYl9sb2FkX29mZnNldF9yZWcoc2V0X2hyZXMsIG1vZGVfYnBwIC8gOCwgc2V0X2lnYSk7CisJCS8qIEZldGNoIGNvdW50IGZvciBJR0EyIG9ubHkgKi8KKwkJdmlhZmJfbG9hZF9mZXRjaF9jb3VudF9yZWcoc2V0X2hyZXMsIG1vZGVfYnBwIC8gOCwgc2V0X2lnYSk7CisKKwkJaWYgKCh2aWFwYXJpbmZvLT5jaGlwX2luZm8tPmdmeF9jaGlwX25hbWUgIT0gVU5JQ0hST01FX0NMRTI2NikKKwkJICAgICYmICh2aWFwYXJpbmZvLT5jaGlwX2luZm8tPmdmeF9jaGlwX25hbWUgIT0gVU5JQ0hST01FX0s0MDApKQorCQkJdmlhZmJfbG9hZF9GSUZPX3JlZyhzZXRfaWdhLCBzZXRfaHJlcywgc2V0X3ZyZXMpOworCisJCXZpYWZiX3NldF9jb2xvcl9kZXB0aChtb2RlX2JwcCAvIDgsIHNldF9pZ2EpOworCX0KKworCWZpbGxfbGNkX2Zvcm1hdCgpOworCisJcGxsX0RfTiA9IHZpYWZiX2dldF9jbGtfdmFsdWUocGFuZWxfY3J0X3RhYmxlWzBdLmNsayk7CisJREVCVUdfTVNHKEtFUk5fSU5GTyAiUExMPTB4JXgiLCBwbGxfRF9OKTsKKwl2aWFmYl9zZXRfdmNsb2NrKHBsbF9EX04sIHNldF9pZ2EpOworCisJdmlhZmJfc2V0X291dHB1dF9wYXRoKERFVklDRV9MQ0QsIHNldF9pZ2EsCisJCXBsdmRzX2NoaXBfaW5mby0+b3V0cHV0X2ludGVyZmFjZSk7CisJbGNkX3BhdGNoX3NrZXcocGx2ZHNfc2V0dGluZ19pbmZvLCBwbHZkc19jaGlwX2luZm8pOworCisJLyogSWYgSzhNODAwLCBlbmFibGUgTENEIFByZWZldGNoIE1vZGUuICovCisJaWYgKCh2aWFwYXJpbmZvLT5jaGlwX2luZm8tPmdmeF9jaGlwX25hbWUgPT0gVU5JQ0hST01FX0s4MDApCisJICAgIHx8IChVTklDSFJPTUVfSzhNODkwID09IHZpYXBhcmluZm8tPmNoaXBfaW5mby0+Z2Z4X2NoaXBfbmFtZSkpCisJCXZpYWZiX3dyaXRlX3JlZ19tYXNrKENSNkEsIFZJQUNSLCAweDAxLCBCSVQwKTsKKworCWxvYWRfbGNkX3BhdGNoX3JlZ3Moc2V0X2hyZXMsIHNldF92cmVzLAorCQkJICAgIHBsdmRzX3NldHRpbmdfaW5mby0+bGNkX3BhbmVsX2lkLCBzZXRfaWdhKTsKKworCURFQlVHX01TRyhLRVJOX0lORk8gImxvYWRfbGNkX3BhdGNoX3JlZ3MhIVxuIik7CisKKwkvKiBQYXRjaCBmb3Igbm9uIDMyYml0IGFsaWdubWVudCBtb2RlICovCisJdmlhX3BpdGNoX2FsaWdubWVudF9wYXRjaF9sY2QocGx2ZHNfc2V0dGluZ19pbmZvLCBwbHZkc19jaGlwX2luZm8pOworfQorCitzdGF0aWMgdm9pZCBpbnRlZ3JhdGVkX2x2ZHNfZGlzYWJsZShzdHJ1Y3QgbHZkc19zZXR0aW5nX2luZm9ybWF0aW9uCisJCQkgICAgICpwbHZkc19zZXR0aW5nX2luZm8sCisJCQkgICAgIHN0cnVjdCBsdmRzX2NoaXBfaW5mb3JtYXRpb24gKnBsdmRzX2NoaXBfaW5mbykKK3sKKwlib29sIHR1cm5fb2ZmX2ZpcnN0X3Bvd2Vyc2VxdWVuY2UgPSBmYWxzZTsKKwlib29sIHR1cm5fb2ZmX3NlY29uZF9wb3dlcnNlcXVlbmNlID0gZmFsc2U7CisJaWYgKElOVEVSRkFDRV9MVkRTMExWRFMxID09IHBsdmRzX2NoaXBfaW5mby0+b3V0cHV0X2ludGVyZmFjZSkKKwkJdHVybl9vZmZfZmlyc3RfcG93ZXJzZXF1ZW5jZSA9IHRydWU7CisJaWYgKElOVEVSRkFDRV9MVkRTMCA9PSBwbHZkc19jaGlwX2luZm8tPm91dHB1dF9pbnRlcmZhY2UpCisJCXR1cm5fb2ZmX2ZpcnN0X3Bvd2Vyc2VxdWVuY2UgPSB0cnVlOworCWlmIChJTlRFUkZBQ0VfTFZEUzEgPT0gcGx2ZHNfY2hpcF9pbmZvLT5vdXRwdXRfaW50ZXJmYWNlKQorCQl0dXJuX29mZl9zZWNvbmRfcG93ZXJzZXF1ZW5jZSA9IHRydWU7CisJaWYgKHR1cm5fb2ZmX3NlY29uZF9wb3dlcnNlcXVlbmNlKSB7CisJCS8qIFVzZSBzZWNvbmQgcG93ZXIgc2VxdWVuY2UgY29udHJvbDogKi8KKworCQkvKiBUdXJuIG9mZiBwb3dlciBzZXF1ZW5jZS4gKi8KKwkJdmlhZmJfd3JpdGVfcmVnX21hc2soQ1JENCwgVklBQ1IsIDAsIEJJVDEpOworCisJCS8qIFR1cm4gb2ZmIGJhY2sgbGlnaHQuICovCisJCXZpYWZiX3dyaXRlX3JlZ19tYXNrKENSRDMsIFZJQUNSLCAweEMwLCBCSVQ2ICsgQklUNyk7CisJfQorCWlmICh0dXJuX29mZl9maXJzdF9wb3dlcnNlcXVlbmNlKSB7CisJCS8qIFVzZSBmaXJzdCBwb3dlciBzZXF1ZW5jZSBjb250cm9sOiAqLworCisJCS8qIFR1cm4gb2ZmIHBvd2VyIHNlcXVlbmNlLiAqLworCQl2aWFmYl93cml0ZV9yZWdfbWFzayhDUjZBLCBWSUFDUiwgMCwgQklUMyk7CisKKwkJLyogVHVybiBvZmYgYmFjayBsaWdodC4gKi8KKwkJdmlhZmJfd3JpdGVfcmVnX21hc2soQ1I5MSwgVklBQ1IsIDB4QzAsIEJJVDYgKyBCSVQ3KTsKKwl9CisKKwkvKiBUdXJuIERGUCBIaWdoL0xvdyBQYWQgb2ZmLiAqLworCXZpYWZiX3dyaXRlX3JlZ19tYXNrKFNSMkEsIFZJQVNSLCAwLCBCSVQwICsgQklUMSArIEJJVDIgKyBCSVQzKTsKKworCS8qIFBvd2VyIG9mZiBMVkRTIGNoYW5uZWwuICovCisJc3dpdGNoIChwbHZkc19jaGlwX2luZm8tPm91dHB1dF9pbnRlcmZhY2UpIHsKKwljYXNlIElOVEVSRkFDRV9MVkRTMDoKKwkJeworCQkJdmlhZmJfd3JpdGVfcmVnX21hc2soQ1JEMiwgVklBQ1IsIDB4ODAsIEJJVDcpOworCQkJYnJlYWs7CisJCX0KKworCWNhc2UgSU5URVJGQUNFX0xWRFMxOgorCQl7CisJCQl2aWFmYl93cml0ZV9yZWdfbWFzayhDUkQyLCBWSUFDUiwgMHg0MCwgQklUNik7CisJCQlicmVhazsKKwkJfQorCisJY2FzZSBJTlRFUkZBQ0VfTFZEUzBMVkRTMToKKwkJeworCQkJdmlhZmJfd3JpdGVfcmVnX21hc2soQ1JEMiwgVklBQ1IsIDB4QzAsIEJJVDYgKyBCSVQ3KTsKKwkJCWJyZWFrOworCQl9CisJfQorfQorCitzdGF0aWMgdm9pZCBpbnRlZ3JhdGVkX2x2ZHNfZW5hYmxlKHN0cnVjdCBsdmRzX3NldHRpbmdfaW5mb3JtYXRpb24KKwkJCSAgICAqcGx2ZHNfc2V0dGluZ19pbmZvLAorCQkJICAgIHN0cnVjdCBsdmRzX2NoaXBfaW5mb3JtYXRpb24gKnBsdmRzX2NoaXBfaW5mbykKK3sKKwlib29sIHR1cm5fb25fZmlyc3RfcG93ZXJzZXF1ZW5jZSA9IGZhbHNlOworCWJvb2wgdHVybl9vbl9zZWNvbmRfcG93ZXJzZXF1ZW5jZSA9IGZhbHNlOworCisJREVCVUdfTVNHKEtFUk5fSU5GTyAiaW50ZWdyYXRlZF9sdmRzX2VuYWJsZSwgb3V0X2ludGVyZmFjZTolZFxuIiwKKwkJICBwbHZkc19jaGlwX2luZm8tPm91dHB1dF9pbnRlcmZhY2UpOworCWlmIChwbHZkc19zZXR0aW5nX2luZm8tPmxjZF9tb2RlID09IExDRF9TUFdHKQorCQl2aWFmYl93cml0ZV9yZWdfbWFzayhDUkQyLCBWSUFDUiwgMHgwMCwgQklUMCArIEJJVDEpOworCSBlbHNlCisJCXZpYWZiX3dyaXRlX3JlZ19tYXNrKENSRDIsIFZJQUNSLCAweDAzLCBCSVQwICsgQklUMSk7CisJaWYgKElOVEVSRkFDRV9MVkRTMExWRFMxID09IHBsdmRzX2NoaXBfaW5mby0+b3V0cHV0X2ludGVyZmFjZSkKKwkJdHVybl9vbl9maXJzdF9wb3dlcnNlcXVlbmNlID0gdHJ1ZTsKKwlpZiAoSU5URVJGQUNFX0xWRFMwID09IHBsdmRzX2NoaXBfaW5mby0+b3V0cHV0X2ludGVyZmFjZSkKKwkJdHVybl9vbl9maXJzdF9wb3dlcnNlcXVlbmNlID0gdHJ1ZTsKKwlpZiAoSU5URVJGQUNFX0xWRFMxID09IHBsdmRzX2NoaXBfaW5mby0+b3V0cHV0X2ludGVyZmFjZSkKKwkJdHVybl9vbl9zZWNvbmRfcG93ZXJzZXF1ZW5jZSA9IHRydWU7CisKKwlpZiAodHVybl9vbl9zZWNvbmRfcG93ZXJzZXF1ZW5jZSkgeworCQkvKiBVc2Ugc2Vjb25kIHBvd2VyIHNlcXVlbmNlIGNvbnRyb2w6ICovCisKKwkJLyogVXNlIGhhcmR3YXJlIGNvbnRyb2wgcG93ZXIgc2VxdWVuY2UuICovCisJCXZpYWZiX3dyaXRlX3JlZ19tYXNrKENSRDMsIFZJQUNSLCAwLCBCSVQwKTsKKworCQkvKiBUdXJuIG9uIGJhY2sgbGlnaHQuICovCisJCXZpYWZiX3dyaXRlX3JlZ19tYXNrKENSRDMsIFZJQUNSLCAwLCBCSVQ2ICsgQklUNyk7CisKKwkJLyogVHVybiBvbiBoYXJkd2FyZSBwb3dlciBzZXF1ZW5jZS4gKi8KKwkJdmlhZmJfd3JpdGVfcmVnX21hc2soQ1JENCwgVklBQ1IsIDB4MDIsIEJJVDEpOworCX0KKwlpZiAodHVybl9vbl9maXJzdF9wb3dlcnNlcXVlbmNlKSB7CisJCS8qIFVzZSBmaXJzdCBwb3dlciBzZXF1ZW5jZSBjb250cm9sOiAqLworCisJCS8qIFVzZSBoYXJkd2FyZSBjb250cm9sIHBvd2VyIHNlcXVlbmNlLiAqLworCQl2aWFmYl93cml0ZV9yZWdfbWFzayhDUjkxLCBWSUFDUiwgMCwgQklUMCk7CisKKwkJLyogVHVybiBvbiBiYWNrIGxpZ2h0LiAqLworCQl2aWFmYl93cml0ZV9yZWdfbWFzayhDUjkxLCBWSUFDUiwgMCwgQklUNiArIEJJVDcpOworCisJCS8qIFR1cm4gb24gaGFyZHdhcmUgcG93ZXIgc2VxdWVuY2UuICovCisJCXZpYWZiX3dyaXRlX3JlZ19tYXNrKENSNkEsIFZJQUNSLCAweDA4LCBCSVQzKTsKKwl9CisKKwkvKiBUdXJuIERGUCBIaWdoL0xvdyBwYWQgb24uICovCisJdmlhZmJfd3JpdGVfcmVnX21hc2soU1IyQSwgVklBU1IsIDB4MEYsIEJJVDAgKyBCSVQxICsgQklUMiArIEJJVDMpOworCisJLyogUG93ZXIgb24gTFZEUyBjaGFubmVsLiAqLworCXN3aXRjaCAocGx2ZHNfY2hpcF9pbmZvLT5vdXRwdXRfaW50ZXJmYWNlKSB7CisJY2FzZSBJTlRFUkZBQ0VfTFZEUzA6CisJCXsKKwkJCXZpYWZiX3dyaXRlX3JlZ19tYXNrKENSRDIsIFZJQUNSLCAwLCBCSVQ3KTsKKwkJCWJyZWFrOworCQl9CisKKwljYXNlIElOVEVSRkFDRV9MVkRTMToKKwkJeworCQkJdmlhZmJfd3JpdGVfcmVnX21hc2soQ1JEMiwgVklBQ1IsIDAsIEJJVDYpOworCQkJYnJlYWs7CisJCX0KKworCWNhc2UgSU5URVJGQUNFX0xWRFMwTFZEUzE6CisJCXsKKwkJCXZpYWZiX3dyaXRlX3JlZ19tYXNrKENSRDIsIFZJQUNSLCAwLCBCSVQ2ICsgQklUNyk7CisJCQlicmVhazsKKwkJfQorCX0KK30KKwordm9pZCB2aWFmYl9sY2RfZGlzYWJsZSh2b2lkKQoreworCisJaWYgKHZpYXBhcmluZm8tPmNoaXBfaW5mby0+Z2Z4X2NoaXBfbmFtZSA9PSBVTklDSFJPTUVfQ0xFMjY2KSB7CisJCWxjZF9wb3dlcnNlcXVlbmNlX29mZigpOworCQkvKiBESTEgcGFkIG9mZiAqLworCQl2aWFmYl93cml0ZV9yZWdfbWFzayhTUjFFLCBWSUFTUiwgMHgwMCwgMHgzMCk7CisJfSBlbHNlIGlmICh2aWFwYXJpbmZvLT5jaGlwX2luZm8tPmdmeF9jaGlwX25hbWUgPT0gVU5JQ0hST01FX0NYNzAwKSB7CisJCWlmICh2aWFmYl9MQ0QyX09OCisJCSAgICAmJiAoSU5URUdSQVRFRF9MVkRTID09CisJCQl2aWFwYXJpbmZvLT5jaGlwX2luZm8tPmx2ZHNfY2hpcF9pbmZvMi5sdmRzX2NoaXBfbmFtZSkpCisJCQlpbnRlZ3JhdGVkX2x2ZHNfZGlzYWJsZSh2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mbywKKwkJCQkmdmlhcGFyaW5mby0+Y2hpcF9pbmZvLT5sdmRzX2NoaXBfaW5mbzIpOworCQlpZiAoSU5URUdSQVRFRF9MVkRTID09CisJCQl2aWFwYXJpbmZvLT5jaGlwX2luZm8tPmx2ZHNfY2hpcF9pbmZvLmx2ZHNfY2hpcF9uYW1lKQorCQkJaW50ZWdyYXRlZF9sdmRzX2Rpc2FibGUodmlhcGFyaW5mby0+bHZkc19zZXR0aW5nX2luZm8sCisJCQkJJnZpYXBhcmluZm8tPmNoaXBfaW5mby0+bHZkc19jaGlwX2luZm8pOworCQlpZiAoVlQxNjM2X0xWRFMgPT0gdmlhcGFyaW5mby0+Y2hpcF9pbmZvLT4KKwkJCWx2ZHNfY2hpcF9pbmZvLmx2ZHNfY2hpcF9uYW1lKQorCQkJdmlhZmJfZGlzYWJsZV9sdmRzX3Z0MTYzNih2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mbywKKwkJCQkmdmlhcGFyaW5mby0+Y2hpcF9pbmZvLT5sdmRzX2NoaXBfaW5mbyk7CisJfSBlbHNlIGlmIChWVDE2MzZfTFZEUyA9PQorCXZpYXBhcmluZm8tPmNoaXBfaW5mby0+bHZkc19jaGlwX2luZm8ubHZkc19jaGlwX25hbWUpIHsKKwkJdmlhZmJfZGlzYWJsZV9sdmRzX3Z0MTYzNih2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mbywKKwkJCQkgICAgJnZpYXBhcmluZm8tPmNoaXBfaW5mby0+bHZkc19jaGlwX2luZm8pOworCX0gZWxzZSB7CisJCS8qIERGUC1ITCBwYWQgb2ZmICAgICAgICAgICovCisJCXZpYWZiX3dyaXRlX3JlZ19tYXNrKFNSMkEsIFZJQVNSLCAweDAwLCAweDBGKTsKKwkJLyogQmFja2xpZ2h0IG9mZiAgICAgICAgICAgKi8KKwkJdmlhZmJfd3JpdGVfcmVnX21hc2soU1IzRCwgVklBU1IsIDB4MDAsIDB4MjApOworCQkvKiAyNCBiaXQgREkgZGF0YSBwYWh0IG9mZiAqLworCQl2aWFmYl93cml0ZV9yZWdfbWFzayhDUjkxLCBWSUFDUiwgMHg4MCwgMHg4MCk7CisJCS8qIFNpbXVsdGFuZW91dCBkaXNhYmxlZCAgICovCisJCXZpYWZiX3dyaXRlX3JlZ19tYXNrKENSNkIsIFZJQUNSLCAweDAwLCAweDA4KTsKKwl9CisKKwkvKiBEaXNhYmxlIGV4cGFuc2lvbiBiaXQgICAqLworCXZpYWZiX3dyaXRlX3JlZ19tYXNrKENSNzksIFZJQUNSLCAweDAwLCAweDAxKTsKKwkvKiBDUlQgcGF0aCBzZXQgdG8gSUdBMSAgICAqLworCXZpYWZiX3dyaXRlX3JlZ19tYXNrKFNSMTYsIFZJQVNSLCAweDAwLCAweDQwKTsKKwkvKiBTaW11bHRhbmVvdXQgZGlzYWJsZWQgICAqLworCXZpYWZiX3dyaXRlX3JlZ19tYXNrKENSNkIsIFZJQUNSLCAweDAwLCAweDA4KTsKKwkvKiBJR0EyIHBhdGggZGlzYWJsZWQgICAgICAqLworCXZpYWZiX3dyaXRlX3JlZ19tYXNrKENSNkEsIFZJQUNSLCAweDAwLCAweDgwKTsKKworfQorCit2b2lkIHZpYWZiX2xjZF9lbmFibGUodm9pZCkKK3sKKwlpZiAodmlhcGFyaW5mby0+Y2hpcF9pbmZvLT5nZnhfY2hpcF9uYW1lID09IFVOSUNIUk9NRV9DTEUyNjYpIHsKKwkJLyogREkxIHBhZCBvbiAqLworCQl2aWFmYl93cml0ZV9yZWdfbWFzayhTUjFFLCBWSUFTUiwgMHgzMCwgMHgzMCk7CisJCWxjZF9wb3dlcnNlcXVlbmNlX29uKCk7CisJfSBlbHNlIGlmICh2aWFwYXJpbmZvLT5jaGlwX2luZm8tPmdmeF9jaGlwX25hbWUgPT0gVU5JQ0hST01FX0NYNzAwKSB7CisJCWlmICh2aWFmYl9MQ0QyX09OICYmIChJTlRFR1JBVEVEX0xWRFMgPT0KKwkJCXZpYXBhcmluZm8tPmNoaXBfaW5mby0+bHZkc19jaGlwX2luZm8yLmx2ZHNfY2hpcF9uYW1lKSkKKwkJCWludGVncmF0ZWRfbHZkc19lbmFibGUodmlhcGFyaW5mby0+bHZkc19zZXR0aW5nX2luZm8yLCBcCisJCQkJJnZpYXBhcmluZm8tPmNoaXBfaW5mby0+bHZkc19jaGlwX2luZm8yKTsKKwkJaWYgKElOVEVHUkFURURfTFZEUyA9PQorCQkJdmlhcGFyaW5mby0+Y2hpcF9pbmZvLT5sdmRzX2NoaXBfaW5mby5sdmRzX2NoaXBfbmFtZSkKKwkJCWludGVncmF0ZWRfbHZkc19lbmFibGUodmlhcGFyaW5mby0+bHZkc19zZXR0aW5nX2luZm8sCisJCQkJJnZpYXBhcmluZm8tPmNoaXBfaW5mby0+bHZkc19jaGlwX2luZm8pOworCQlpZiAoVlQxNjM2X0xWRFMgPT0gdmlhcGFyaW5mby0+Y2hpcF9pbmZvLT4KKwkJCWx2ZHNfY2hpcF9pbmZvLmx2ZHNfY2hpcF9uYW1lKQorCQkJdmlhZmJfZW5hYmxlX2x2ZHNfdnQxNjM2KHZpYXBhcmluZm8tPgorCQkJbHZkc19zZXR0aW5nX2luZm8sICZ2aWFwYXJpbmZvLT5jaGlwX2luZm8tPgorCQkJbHZkc19jaGlwX2luZm8pOworCX0gZWxzZSBpZiAoVlQxNjM2X0xWRFMgPT0KKwl2aWFwYXJpbmZvLT5jaGlwX2luZm8tPmx2ZHNfY2hpcF9pbmZvLmx2ZHNfY2hpcF9uYW1lKSB7CisJCXZpYWZiX2VuYWJsZV9sdmRzX3Z0MTYzNih2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mbywKKwkJCQkgICAmdmlhcGFyaW5mby0+Y2hpcF9pbmZvLT5sdmRzX2NoaXBfaW5mbyk7CisJfSBlbHNlIHsKKwkJLyogREZQLUhMIHBhZCBvbiAgICAgICAgICAgKi8KKwkJdmlhZmJfd3JpdGVfcmVnX21hc2soU1IyQSwgVklBU1IsIDB4MEYsIDB4MEYpOworCQkvKiBCYWNrbGlnaHQgb24gICAgICAgICAgICAqLworCQl2aWFmYl93cml0ZV9yZWdfbWFzayhTUjNELCBWSUFTUiwgMHgyMCwgMHgyMCk7CisJCS8qIDI0IGJpdCBESSBkYXRhIHBhaHQgb24gICovCisJCXZpYWZiX3dyaXRlX3JlZ19tYXNrKENSOTEsIFZJQUNSLCAweDAwLCAweDgwKTsKKworCQkvKiBTZXQgZGF0YSBzb3VyY2Ugc2VsZWN0aW9uIGJpdCBieSBpZ2EgcGF0aCAqLworCQlpZiAodmlhcGFyaW5mby0+bHZkc19zZXR0aW5nX2luZm8tPmlnYV9wYXRoID09IElHQTEpIHsKKwkJCS8qIERGUC1IIHNldCB0byBJR0ExICAgICAgICovCisJCQl2aWFmYl93cml0ZV9yZWdfbWFzayhDUjk3LCBWSUFDUiwgMHgwMCwgMHgxMCk7CisJCQkvKiBERlAtTCBzZXQgdG8gSUdBMSAgICAgICAqLworCQkJdmlhZmJfd3JpdGVfcmVnX21hc2soQ1I5OSwgVklBQ1IsIDB4MDAsIDB4MTApOworCQl9IGVsc2UgeworCQkJLyogREZQLUggc2V0IHRvIElHQTIgICAgICAgKi8KKwkJCXZpYWZiX3dyaXRlX3JlZ19tYXNrKENSOTcsIFZJQUNSLCAweDEwLCAweDEwKTsKKwkJCS8qIERGUC1MIHNldCB0byBJR0EyICAgICAgICovCisJCQl2aWFmYl93cml0ZV9yZWdfbWFzayhDUjk5LCBWSUFDUiwgMHgxMCwgMHgxMCk7CisJCX0KKwkJLyogTENEIGVuYWJsZWQgICAgICAgICAgICAgKi8KKwkJdmlhZmJfd3JpdGVfcmVnX21hc2soQ1I2QSwgVklBQ1IsIDB4NDgsIDB4NDgpOworCX0KKworCWlmICgodmlhcGFyaW5mby0+bHZkc19zZXR0aW5nX2luZm8tPmlnYV9wYXRoID09IElHQTEpCisJICAgIHx8ICh2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mby0+aWdhX3BhdGggPT0gSUdBMV9JR0EyKSkgeworCQkvKiBDUlQgcGF0aCBzZXQgdG8gSUdBMiAgICAqLworCQl2aWFmYl93cml0ZV9yZWdfbWFzayhTUjE2LCBWSUFTUiwgMHg0MCwgMHg0MCk7CisJCS8qIElHQTIgcGF0aCBkaXNhYmxlZCAgICAgICovCisJCXZpYWZiX3dyaXRlX3JlZ19tYXNrKENSNkEsIFZJQUNSLCAweDAwLCAweDgwKTsKKwkJLyogSUdBMiBwYXRoIGVuYWJsZWQgICAgICAgKi8KKwl9IGVsc2UgewkJLyogSUdBMiAqLworCQl2aWFmYl93cml0ZV9yZWdfbWFzayhDUjZBLCBWSUFDUiwgMHg4MCwgMHg4MCk7CisJfQorCit9CisKK3N0YXRpYyB2b2lkIGxjZF9wb3dlcnNlcXVlbmNlX29mZih2b2lkKQoreworCWludCBpLCBtYXNrLCBkYXRhOworCisJLyogU29mdHdhcmUgY29udHJvbCBwb3dlciBzZXF1ZW5jZSAqLworCXZpYWZiX3dyaXRlX3JlZ19tYXNrKENSOTEsIFZJQUNSLCAweDExLCAweDExKTsKKworCWZvciAoaSA9IDA7IGkgPCAzOyBpKyspIHsKKwkJbWFzayA9IFBvd2VyU2VxdWVuY2VPZmZbMF1baV07CisJCWRhdGEgPSBQb3dlclNlcXVlbmNlT2ZmWzFdW2ldICYgbWFzazsKKwkJdmlhZmJfd3JpdGVfcmVnX21hc2soQ1I5MSwgVklBQ1IsICh1OCkgZGF0YSwgKHU4KSBtYXNrKTsKKwkJdWRlbGF5KFBvd2VyU2VxdWVuY2VPZmZbMl1baV0pOworCX0KKworCS8qIERpc2FibGUgTENEICovCisJdmlhZmJfd3JpdGVfcmVnX21hc2soQ1I2QSwgVklBQ1IsIDB4MDAsIDB4MDgpOworfQorCitzdGF0aWMgdm9pZCBsY2RfcG93ZXJzZXF1ZW5jZV9vbih2b2lkKQoreworCWludCBpLCBtYXNrLCBkYXRhOworCisJLyogU29mdHdhcmUgY29udHJvbCBwb3dlciBzZXF1ZW5jZSAqLworCXZpYWZiX3dyaXRlX3JlZ19tYXNrKENSOTEsIFZJQUNSLCAweDExLCAweDExKTsKKworCS8qIEVuYWJsZSBMQ0QgKi8KKwl2aWFmYl93cml0ZV9yZWdfbWFzayhDUjZBLCBWSUFDUiwgMHgwOCwgMHgwOCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKSB7CisJCW1hc2sgPSBQb3dlclNlcXVlbmNlT25bMF1baV07CisJCWRhdGEgPSBQb3dlclNlcXVlbmNlT25bMV1baV0gJiBtYXNrOworCQl2aWFmYl93cml0ZV9yZWdfbWFzayhDUjkxLCBWSUFDUiwgKHU4KSBkYXRhLCAodTgpIG1hc2spOworCQl1ZGVsYXkoUG93ZXJTZXF1ZW5jZU9uWzJdW2ldKTsKKwl9CisKKwl1ZGVsYXkoMSk7Cit9CisKK3N0YXRpYyB2b2lkIGZpbGxfbGNkX2Zvcm1hdCh2b2lkKQoreworCXU4IGJkaXRoZXJpbmcgPSAwLCBiZHVhbCA9IDA7CisKKwlpZiAodmlhcGFyaW5mby0+bHZkc19zZXR0aW5nX2luZm8tPmRldmljZV9sY2RfZHVhbGVkZ2UpCisJCWJkdWFsID0gQklUNDsKKwlpZiAodmlhcGFyaW5mby0+bHZkc19zZXR0aW5nX2luZm8tPkxDRERpdGhlcmluZykKKwkJYmRpdGhlcmluZyA9IEJJVDA7CisJLyogRHVhbCAmIERpdGhlcmluZyAqLworCXZpYWZiX3dyaXRlX3JlZ19tYXNrKENSODgsIFZJQUNSLCAoYmRpdGhlcmluZyB8IGJkdWFsKSwgQklUNCArIEJJVDApOworfQorCitzdGF0aWMgdm9pZCBjaGVja19kaXBvcnRfb2ZfaW50ZWdyYXRlZF9sdmRzKAorCXN0cnVjdCBsdmRzX2NoaXBfaW5mb3JtYXRpb24gKnBsdmRzX2NoaXBfaW5mbywKKwkJCQkgICAgIHN0cnVjdCBsdmRzX3NldHRpbmdfaW5mb3JtYXRpb24KKwkJCQkgICAgICpwbHZkc19zZXR0aW5nX2luZm8pCit7CisJLyogRGV0ZXJtaW5lIExDRCBESSBQb3J0IGJ5IGhhcmR3YXJlIGxheW91dC4gKi8KKwlzd2l0Y2ggKHZpYWZiX2Rpc3BsYXlfaGFyZHdhcmVfbGF5b3V0KSB7CisJY2FzZSBIV19MQVlPVVRfTENEX09OTFk6CisJCXsKKwkJCWlmIChwbHZkc19zZXR0aW5nX2luZm8tPmRldmljZV9sY2RfZHVhbGVkZ2UpIHsKKwkJCQlwbHZkc19jaGlwX2luZm8tPm91dHB1dF9pbnRlcmZhY2UgPQorCQkJCSAgICBJTlRFUkZBQ0VfTFZEUzBMVkRTMTsKKwkJCX0gZWxzZSB7CisJCQkJcGx2ZHNfY2hpcF9pbmZvLT5vdXRwdXRfaW50ZXJmYWNlID0KKwkJCQkgICAgSU5URVJGQUNFX0xWRFMwOworCQkJfQorCisJCQlicmVhazsKKwkJfQorCisJY2FzZSBIV19MQVlPVVRfRFZJX09OTFk6CisJCXsKKwkJCXBsdmRzX2NoaXBfaW5mby0+b3V0cHV0X2ludGVyZmFjZSA9IElOVEVSRkFDRV9OT05FOworCQkJYnJlYWs7CisJCX0KKworCWNhc2UgSFdfTEFZT1VUX0xDRDFfTENEMjoKKwljYXNlIEhXX0xBWU9VVF9MQ0RfRVhURVJOQUxfTENEMjoKKwkJeworCQkJcGx2ZHNfY2hpcF9pbmZvLT5vdXRwdXRfaW50ZXJmYWNlID0KKwkJCSAgICBJTlRFUkZBQ0VfTFZEUzBMVkRTMTsKKwkJCWJyZWFrOworCQl9CisKKwljYXNlIEhXX0xBWU9VVF9MQ0RfRFZJOgorCQl7CisJCQlwbHZkc19jaGlwX2luZm8tPm91dHB1dF9pbnRlcmZhY2UgPSBJTlRFUkZBQ0VfTFZEUzE7CisJCQlicmVhazsKKwkJfQorCisJZGVmYXVsdDoKKwkJeworCQkJcGx2ZHNfY2hpcF9pbmZvLT5vdXRwdXRfaW50ZXJmYWNlID0gSU5URVJGQUNFX0xWRFMxOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlERUJVR19NU0coS0VSTl9JTkZPCisJCSAgIkRpc3BsYXkgSGFyZHdhcmUgTGF5b3V0OiAweCV4LCBMQ0QgREkgUG9ydDogMHgleFxuIiwKKwkJICB2aWFmYl9kaXNwbGF5X2hhcmR3YXJlX2xheW91dCwKKwkJICBwbHZkc19jaGlwX2luZm8tPm91dHB1dF9pbnRlcmZhY2UpOworfQorCit2b2lkIHZpYWZiX2luaXRfbHZkc19vdXRwdXRfaW50ZXJmYWNlKHN0cnVjdCBsdmRzX2NoaXBfaW5mb3JtYXRpb24KKwkJCQkqcGx2ZHNfY2hpcF9pbmZvLAorCQkJCXN0cnVjdCBsdmRzX3NldHRpbmdfaW5mb3JtYXRpb24KKwkJCQkqcGx2ZHNfc2V0dGluZ19pbmZvKQoreworCWlmIChJTlRFUkZBQ0VfTk9ORSAhPSBwbHZkc19jaGlwX2luZm8tPm91dHB1dF9pbnRlcmZhY2UpIHsKKwkJLypEbyBub3RoaW5nLCBsY2QgcG9ydCBpcyBzcGVjaWZpZWQgYnkgbW9kdWxlIHBhcmFtZXRlciAqLworCQlyZXR1cm47CisJfQorCisJc3dpdGNoIChwbHZkc19jaGlwX2luZm8tPmx2ZHNfY2hpcF9uYW1lKSB7CisKKwljYXNlIFZUMTYzNl9MVkRTOgorCQlzd2l0Y2ggKHZpYXBhcmluZm8tPmNoaXBfaW5mby0+Z2Z4X2NoaXBfbmFtZSkgeworCQljYXNlIFVOSUNIUk9NRV9DWDcwMDoKKwkJCXBsdmRzX2NoaXBfaW5mby0+b3V0cHV0X2ludGVyZmFjZSA9IElOVEVSRkFDRV9EVlAxOworCQkJYnJlYWs7CisJCWNhc2UgVU5JQ0hST01FX0NONzAwOgorCQkJcGx2ZHNfY2hpcF9pbmZvLT5vdXRwdXRfaW50ZXJmYWNlID0gSU5URVJGQUNFX0RGUF9MT1c7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXBsdmRzX2NoaXBfaW5mby0+b3V0cHV0X2ludGVyZmFjZSA9IElOVEVSRkFDRV9EVlAwOworCQkJYnJlYWs7CisJCX0KKwkJYnJlYWs7CisKKwljYXNlIElOVEVHUkFURURfTFZEUzoKKwkJY2hlY2tfZGlwb3J0X29mX2ludGVncmF0ZWRfbHZkcyhwbHZkc19jaGlwX2luZm8sCisJCQkJCQlwbHZkc19zZXR0aW5nX2luZm8pOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCXN3aXRjaCAodmlhcGFyaW5mby0+Y2hpcF9pbmZvLT5nZnhfY2hpcF9uYW1lKSB7CisJCWNhc2UgVU5JQ0hST01FX0s4TTg5MDoKKwkJY2FzZSBVTklDSFJPTUVfUDRNOTAwOgorCQljYXNlIFVOSUNIUk9NRV9QNE04OTA6CisJCQlwbHZkc19jaGlwX2luZm8tPm91dHB1dF9pbnRlcmZhY2UgPSBJTlRFUkZBQ0VfREZQX0xPVzsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcGx2ZHNfY2hpcF9pbmZvLT5vdXRwdXRfaW50ZXJmYWNlID0gSU5URVJGQUNFX0RGUDsKKwkJCWJyZWFrOworCQl9CisJCWJyZWFrOworCX0KK30KKworc3RhdGljIHN0cnVjdCBkaXNwbGF5X3RpbWluZyBsY2RfY2VudGVyaW5nX3RpbWdpbmcoc3RydWN0IGRpc3BsYXlfdGltaW5nCisJCQkJCSAgICBtb2RlX2NydF9yZWcsCisJCQkJCSAgICBzdHJ1Y3QgZGlzcGxheV90aW1pbmcgcGFuZWxfY3J0X3JlZykKK3sKKwlzdHJ1Y3QgZGlzcGxheV90aW1pbmcgY3J0X3JlZzsKKworCWNydF9yZWcuaG9yX3RvdGFsID0gcGFuZWxfY3J0X3JlZy5ob3JfdG90YWw7CisJY3J0X3JlZy5ob3JfYWRkciA9IG1vZGVfY3J0X3JlZy5ob3JfYWRkcjsKKwljcnRfcmVnLmhvcl9ibGFua19zdGFydCA9CisJICAgIChwYW5lbF9jcnRfcmVnLmhvcl9hZGRyIC0gbW9kZV9jcnRfcmVnLmhvcl9hZGRyKSAvIDIgKworCSAgICBjcnRfcmVnLmhvcl9hZGRyOworCWNydF9yZWcuaG9yX2JsYW5rX2VuZCA9IHBhbmVsX2NydF9yZWcuaG9yX2JsYW5rX2VuZDsKKwljcnRfcmVnLmhvcl9zeW5jX3N0YXJ0ID0KKwkgICAgKHBhbmVsX2NydF9yZWcuaG9yX3N5bmNfc3RhcnQgLQorCSAgICAgcGFuZWxfY3J0X3JlZy5ob3JfYmxhbmtfc3RhcnQpICsgY3J0X3JlZy5ob3JfYmxhbmtfc3RhcnQ7CisJY3J0X3JlZy5ob3Jfc3luY19lbmQgPSBwYW5lbF9jcnRfcmVnLmhvcl9zeW5jX2VuZDsKKworCWNydF9yZWcudmVyX3RvdGFsID0gcGFuZWxfY3J0X3JlZy52ZXJfdG90YWw7CisJY3J0X3JlZy52ZXJfYWRkciA9IG1vZGVfY3J0X3JlZy52ZXJfYWRkcjsKKwljcnRfcmVnLnZlcl9ibGFua19zdGFydCA9CisJICAgIChwYW5lbF9jcnRfcmVnLnZlcl9hZGRyIC0gbW9kZV9jcnRfcmVnLnZlcl9hZGRyKSAvIDIgKworCSAgICBjcnRfcmVnLnZlcl9hZGRyOworCWNydF9yZWcudmVyX2JsYW5rX2VuZCA9IHBhbmVsX2NydF9yZWcudmVyX2JsYW5rX2VuZDsKKwljcnRfcmVnLnZlcl9zeW5jX3N0YXJ0ID0KKwkgICAgKHBhbmVsX2NydF9yZWcudmVyX3N5bmNfc3RhcnQgLQorCSAgICAgcGFuZWxfY3J0X3JlZy52ZXJfYmxhbmtfc3RhcnQpICsgY3J0X3JlZy52ZXJfYmxhbmtfc3RhcnQ7CisJY3J0X3JlZy52ZXJfc3luY19lbmQgPSBwYW5lbF9jcnRfcmVnLnZlcl9zeW5jX2VuZDsKKworCXJldHVybiBjcnRfcmVnOworfQorCitzdGF0aWMgdm9pZCBsb2FkX2NydGNfc2hhZG93X3RpbWluZyhzdHJ1Y3QgZGlzcGxheV90aW1pbmcgbW9kZV90aW1pbmcsCisJCQkgICAgIHN0cnVjdCBkaXNwbGF5X3RpbWluZyBwYW5lbF90aW1pbmcpCit7CisJc3RydWN0IGlvX3JlZ2lzdGVyICpyZWcgPSBOVUxMOworCWludCBpOworCWludCB2aWFmYl9sb2FkX3JlZ19OdW0gPSAwOworCWludCByZWdfdmFsdWUgPSAwOworCisJaWYgKHZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvLT5kaXNwbGF5X21ldGhvZCA9PSBMQ0RfRVhQQU5EU0lPTikgeworCQkvKiBFeHBhbnNpb24gKi8KKwkJZm9yIChpID0gMTI7IGkgPCAyMDsgaSsrKSB7CisJCQlzd2l0Y2ggKGkpIHsKKwkJCWNhc2UgSF9UT1RBTF9TSEFET1dfSU5ERVg6CisJCQkJcmVnX3ZhbHVlID0KKwkJCQkgICAgSUdBMl9IT1JfVE9UQUxfU0hBRE9XX0ZPUk1VTEEKKwkJCQkgICAgKHBhbmVsX3RpbWluZy5ob3JfdG90YWwpOworCQkJCXZpYWZiX2xvYWRfcmVnX051bSA9CisJCQkJICAgIGlnYTJfc2hhZG93X2NydGNfcmVnLmhvcl90b3RhbF9zaGFkb3cuCisJCQkJICAgIHJlZ19udW07CisJCQkJcmVnID0gaWdhMl9zaGFkb3dfY3J0Y19yZWcuaG9yX3RvdGFsX3NoYWRvdy5yZWc7CisJCQkJYnJlYWs7CisJCQljYXNlIEhfQkxBTktfRU5EX1NIQURPV19JTkRFWDoKKwkJCQlyZWdfdmFsdWUgPQorCQkJCSAgICBJR0EyX0hPUl9CTEFOS19FTkRfU0hBRE9XX0ZPUk1VTEEKKwkJCQkgICAgKHBhbmVsX3RpbWluZy5ob3JfYmxhbmtfc3RhcnQsCisJCQkJICAgICBwYW5lbF90aW1pbmcuaG9yX2JsYW5rX2VuZCk7CisJCQkJdmlhZmJfbG9hZF9yZWdfTnVtID0KKwkJCQkgICAgaWdhMl9zaGFkb3dfY3J0Y19yZWcuCisJCQkJICAgIGhvcl9ibGFua19lbmRfc2hhZG93LnJlZ19udW07CisJCQkJcmVnID0KKwkJCQkgICAgaWdhMl9zaGFkb3dfY3J0Y19yZWcuCisJCQkJICAgIGhvcl9ibGFua19lbmRfc2hhZG93LnJlZzsKKwkJCQlicmVhazsKKwkJCWNhc2UgVl9UT1RBTF9TSEFET1dfSU5ERVg6CisJCQkJcmVnX3ZhbHVlID0KKwkJCQkgICAgSUdBMl9WRVJfVE9UQUxfU0hBRE9XX0ZPUk1VTEEKKwkJCQkgICAgKHBhbmVsX3RpbWluZy52ZXJfdG90YWwpOworCQkJCXZpYWZiX2xvYWRfcmVnX051bSA9CisJCQkJICAgIGlnYTJfc2hhZG93X2NydGNfcmVnLnZlcl90b3RhbF9zaGFkb3cuCisJCQkJICAgIHJlZ19udW07CisJCQkJcmVnID0gaWdhMl9zaGFkb3dfY3J0Y19yZWcudmVyX3RvdGFsX3NoYWRvdy5yZWc7CisJCQkJYnJlYWs7CisJCQljYXNlIFZfQUREUl9TSEFET1dfSU5ERVg6CisJCQkJcmVnX3ZhbHVlID0KKwkJCQkgICAgSUdBMl9WRVJfQUREUl9TSEFET1dfRk9STVVMQQorCQkJCSAgICAocGFuZWxfdGltaW5nLnZlcl9hZGRyKTsKKwkJCQl2aWFmYl9sb2FkX3JlZ19OdW0gPQorCQkJCSAgICBpZ2EyX3NoYWRvd19jcnRjX3JlZy52ZXJfYWRkcl9zaGFkb3cuCisJCQkJICAgIHJlZ19udW07CisJCQkJcmVnID0gaWdhMl9zaGFkb3dfY3J0Y19yZWcudmVyX2FkZHJfc2hhZG93LnJlZzsKKwkJCQlicmVhazsKKwkJCWNhc2UgVl9CTEFOS19TQVRSVF9TSEFET1dfSU5ERVg6CisJCQkJcmVnX3ZhbHVlID0KKwkJCQkgICAgSUdBMl9WRVJfQkxBTktfU1RBUlRfU0hBRE9XX0ZPUk1VTEEKKwkJCQkgICAgKHBhbmVsX3RpbWluZy52ZXJfYmxhbmtfc3RhcnQpOworCQkJCXZpYWZiX2xvYWRfcmVnX051bSA9CisJCQkJICAgIGlnYTJfc2hhZG93X2NydGNfcmVnLgorCQkJCSAgICB2ZXJfYmxhbmtfc3RhcnRfc2hhZG93LnJlZ19udW07CisJCQkJcmVnID0KKwkJCQkgICAgaWdhMl9zaGFkb3dfY3J0Y19yZWcuCisJCQkJICAgIHZlcl9ibGFua19zdGFydF9zaGFkb3cucmVnOworCQkJCWJyZWFrOworCQkJY2FzZSBWX0JMQU5LX0VORF9TSEFET1dfSU5ERVg6CisJCQkJcmVnX3ZhbHVlID0KKwkJCQkgICAgSUdBMl9WRVJfQkxBTktfRU5EX1NIQURPV19GT1JNVUxBCisJCQkJICAgIChwYW5lbF90aW1pbmcudmVyX2JsYW5rX3N0YXJ0LAorCQkJCSAgICAgcGFuZWxfdGltaW5nLnZlcl9ibGFua19lbmQpOworCQkJCXZpYWZiX2xvYWRfcmVnX051bSA9CisJCQkJICAgIGlnYTJfc2hhZG93X2NydGNfcmVnLgorCQkJCSAgICB2ZXJfYmxhbmtfZW5kX3NoYWRvdy5yZWdfbnVtOworCQkJCXJlZyA9CisJCQkJICAgIGlnYTJfc2hhZG93X2NydGNfcmVnLgorCQkJCSAgICB2ZXJfYmxhbmtfZW5kX3NoYWRvdy5yZWc7CisJCQkJYnJlYWs7CisJCQljYXNlIFZfU1lOQ19TQVRSVF9TSEFET1dfSU5ERVg6CisJCQkJcmVnX3ZhbHVlID0KKwkJCQkgICAgSUdBMl9WRVJfU1lOQ19TVEFSVF9TSEFET1dfRk9STVVMQQorCQkJCSAgICAocGFuZWxfdGltaW5nLnZlcl9zeW5jX3N0YXJ0KTsKKwkJCQl2aWFmYl9sb2FkX3JlZ19OdW0gPQorCQkJCSAgICBpZ2EyX3NoYWRvd19jcnRjX3JlZy4KKwkJCQkgICAgdmVyX3N5bmNfc3RhcnRfc2hhZG93LnJlZ19udW07CisJCQkJcmVnID0KKwkJCQkgICAgaWdhMl9zaGFkb3dfY3J0Y19yZWcuCisJCQkJICAgIHZlcl9zeW5jX3N0YXJ0X3NoYWRvdy5yZWc7CisJCQkJYnJlYWs7CisJCQljYXNlIFZfU1lOQ19FTkRfU0hBRE9XX0lOREVYOgorCQkJCXJlZ192YWx1ZSA9CisJCQkJICAgIElHQTJfVkVSX1NZTkNfRU5EX1NIQURPV19GT1JNVUxBCisJCQkJICAgIChwYW5lbF90aW1pbmcudmVyX3N5bmNfc3RhcnQsCisJCQkJICAgICBwYW5lbF90aW1pbmcudmVyX3N5bmNfZW5kKTsKKwkJCQl2aWFmYl9sb2FkX3JlZ19OdW0gPQorCQkJCSAgICBpZ2EyX3NoYWRvd19jcnRjX3JlZy4KKwkJCQkgICAgdmVyX3N5bmNfZW5kX3NoYWRvdy5yZWdfbnVtOworCQkJCXJlZyA9CisJCQkJICAgIGlnYTJfc2hhZG93X2NydGNfcmVnLgorCQkJCSAgICB2ZXJfc3luY19lbmRfc2hhZG93LnJlZzsKKwkJCQlicmVhazsKKwkJCX0KKwkJCXZpYWZiX2xvYWRfcmVnKHJlZ192YWx1ZSwKKwkJCQl2aWFmYl9sb2FkX3JlZ19OdW0sIHJlZywgVklBQ1IpOworCQl9CisJfSBlbHNlIHsJCS8qIENlbnRlcmluZyAqLworCQlmb3IgKGkgPSAxMjsgaSA8IDIwOyBpKyspIHsKKwkJCXN3aXRjaCAoaSkgeworCQkJY2FzZSBIX1RPVEFMX1NIQURPV19JTkRFWDoKKwkJCQlyZWdfdmFsdWUgPQorCQkJCSAgICBJR0EyX0hPUl9UT1RBTF9TSEFET1dfRk9STVVMQQorCQkJCSAgICAocGFuZWxfdGltaW5nLmhvcl90b3RhbCk7CisJCQkJdmlhZmJfbG9hZF9yZWdfTnVtID0KKwkJCQkgICAgaWdhMl9zaGFkb3dfY3J0Y19yZWcuaG9yX3RvdGFsX3NoYWRvdy4KKwkJCQkgICAgcmVnX251bTsKKwkJCQlyZWcgPSBpZ2EyX3NoYWRvd19jcnRjX3JlZy5ob3JfdG90YWxfc2hhZG93LnJlZzsKKwkJCQlicmVhazsKKwkJCWNhc2UgSF9CTEFOS19FTkRfU0hBRE9XX0lOREVYOgorCQkJCXJlZ192YWx1ZSA9CisJCQkJICAgIElHQTJfSE9SX0JMQU5LX0VORF9TSEFET1dfRk9STVVMQQorCQkJCSAgICAocGFuZWxfdGltaW5nLmhvcl9ibGFua19zdGFydCwKKwkJCQkgICAgIHBhbmVsX3RpbWluZy5ob3JfYmxhbmtfZW5kKTsKKwkJCQl2aWFmYl9sb2FkX3JlZ19OdW0gPQorCQkJCSAgICBpZ2EyX3NoYWRvd19jcnRjX3JlZy4KKwkJCQkgICAgaG9yX2JsYW5rX2VuZF9zaGFkb3cucmVnX251bTsKKwkJCQlyZWcgPQorCQkJCSAgICBpZ2EyX3NoYWRvd19jcnRjX3JlZy4KKwkJCQkgICAgaG9yX2JsYW5rX2VuZF9zaGFkb3cucmVnOworCQkJCWJyZWFrOworCQkJY2FzZSBWX1RPVEFMX1NIQURPV19JTkRFWDoKKwkJCQlyZWdfdmFsdWUgPQorCQkJCSAgICBJR0EyX1ZFUl9UT1RBTF9TSEFET1dfRk9STVVMQQorCQkJCSAgICAocGFuZWxfdGltaW5nLnZlcl90b3RhbCk7CisJCQkJdmlhZmJfbG9hZF9yZWdfTnVtID0KKwkJCQkgICAgaWdhMl9zaGFkb3dfY3J0Y19yZWcudmVyX3RvdGFsX3NoYWRvdy4KKwkJCQkgICAgcmVnX251bTsKKwkJCQlyZWcgPSBpZ2EyX3NoYWRvd19jcnRjX3JlZy52ZXJfdG90YWxfc2hhZG93LnJlZzsKKwkJCQlicmVhazsKKwkJCWNhc2UgVl9BRERSX1NIQURPV19JTkRFWDoKKwkJCQlyZWdfdmFsdWUgPQorCQkJCSAgICBJR0EyX1ZFUl9BRERSX1NIQURPV19GT1JNVUxBCisJCQkJICAgIChtb2RlX3RpbWluZy52ZXJfYWRkcik7CisJCQkJdmlhZmJfbG9hZF9yZWdfTnVtID0KKwkJCQkgICAgaWdhMl9zaGFkb3dfY3J0Y19yZWcudmVyX2FkZHJfc2hhZG93LgorCQkJCSAgICByZWdfbnVtOworCQkJCXJlZyA9IGlnYTJfc2hhZG93X2NydGNfcmVnLnZlcl9hZGRyX3NoYWRvdy5yZWc7CisJCQkJYnJlYWs7CisJCQljYXNlIFZfQkxBTktfU0FUUlRfU0hBRE9XX0lOREVYOgorCQkJCXJlZ192YWx1ZSA9CisJCQkJICAgIElHQTJfVkVSX0JMQU5LX1NUQVJUX1NIQURPV19GT1JNVUxBCisJCQkJICAgIChtb2RlX3RpbWluZy52ZXJfYmxhbmtfc3RhcnQpOworCQkJCXZpYWZiX2xvYWRfcmVnX051bSA9CisJCQkJICAgIGlnYTJfc2hhZG93X2NydGNfcmVnLgorCQkJCSAgICB2ZXJfYmxhbmtfc3RhcnRfc2hhZG93LnJlZ19udW07CisJCQkJcmVnID0KKwkJCQkgICAgaWdhMl9zaGFkb3dfY3J0Y19yZWcuCisJCQkJICAgIHZlcl9ibGFua19zdGFydF9zaGFkb3cucmVnOworCQkJCWJyZWFrOworCQkJY2FzZSBWX0JMQU5LX0VORF9TSEFET1dfSU5ERVg6CisJCQkJcmVnX3ZhbHVlID0KKwkJCQkgICAgSUdBMl9WRVJfQkxBTktfRU5EX1NIQURPV19GT1JNVUxBCisJCQkJICAgIChwYW5lbF90aW1pbmcudmVyX2JsYW5rX3N0YXJ0LAorCQkJCSAgICAgcGFuZWxfdGltaW5nLnZlcl9ibGFua19lbmQpOworCQkJCXZpYWZiX2xvYWRfcmVnX051bSA9CisJCQkJICAgIGlnYTJfc2hhZG93X2NydGNfcmVnLgorCQkJCSAgICB2ZXJfYmxhbmtfZW5kX3NoYWRvdy5yZWdfbnVtOworCQkJCXJlZyA9CisJCQkJICAgIGlnYTJfc2hhZG93X2NydGNfcmVnLgorCQkJCSAgICB2ZXJfYmxhbmtfZW5kX3NoYWRvdy5yZWc7CisJCQkJYnJlYWs7CisJCQljYXNlIFZfU1lOQ19TQVRSVF9TSEFET1dfSU5ERVg6CisJCQkJcmVnX3ZhbHVlID0KKwkJCQkgICAgSUdBMl9WRVJfU1lOQ19TVEFSVF9TSEFET1dfRk9STVVMQSgKKwkJCQkgICAgKHBhbmVsX3RpbWluZy52ZXJfc3luY19zdGFydCAtCisJCQkJICAgIHBhbmVsX3RpbWluZy52ZXJfYmxhbmtfc3RhcnQpICsKKwkJCQkgICAgKHBhbmVsX3RpbWluZy52ZXJfYWRkciAtCisJCQkJICAgIG1vZGVfdGltaW5nLnZlcl9hZGRyKSAvIDIgKworCQkJCSAgICBtb2RlX3RpbWluZy52ZXJfYWRkcik7CisJCQkJdmlhZmJfbG9hZF9yZWdfTnVtID0KKwkJCQkgICAgaWdhMl9zaGFkb3dfY3J0Y19yZWcudmVyX3N5bmNfc3RhcnRfc2hhZG93LgorCQkJCSAgICByZWdfbnVtOworCQkJCXJlZyA9CisJCQkJICAgIGlnYTJfc2hhZG93X2NydGNfcmVnLnZlcl9zeW5jX3N0YXJ0X3NoYWRvdy4KKwkJCQkgICAgcmVnOworCQkJCWJyZWFrOworCQkJY2FzZSBWX1NZTkNfRU5EX1NIQURPV19JTkRFWDoKKwkJCQlyZWdfdmFsdWUgPQorCQkJCSAgICBJR0EyX1ZFUl9TWU5DX0VORF9TSEFET1dfRk9STVVMQSgKKwkJCQkgICAgKHBhbmVsX3RpbWluZy52ZXJfc3luY19zdGFydCAtCisJCQkJICAgIHBhbmVsX3RpbWluZy52ZXJfYmxhbmtfc3RhcnQpICsKKwkJCQkgICAgKHBhbmVsX3RpbWluZy52ZXJfYWRkciAtCisJCQkJICAgIG1vZGVfdGltaW5nLnZlcl9hZGRyKSAvIDIgKworCQkJCSAgICBtb2RlX3RpbWluZy52ZXJfYWRkciwKKwkJCQkgICAgcGFuZWxfdGltaW5nLnZlcl9zeW5jX2VuZCk7CisJCQkJdmlhZmJfbG9hZF9yZWdfTnVtID0KKwkJCQkgICAgaWdhMl9zaGFkb3dfY3J0Y19yZWcudmVyX3N5bmNfZW5kX3NoYWRvdy4KKwkJCQkgICAgcmVnX251bTsKKwkJCQlyZWcgPQorCQkJCSAgICBpZ2EyX3NoYWRvd19jcnRjX3JlZy52ZXJfc3luY19lbmRfc2hhZG93LgorCQkJCSAgICByZWc7CisJCQkJYnJlYWs7CisJCQl9CisJCQl2aWFmYl9sb2FkX3JlZyhyZWdfdmFsdWUsCisJCQkJdmlhZmJfbG9hZF9yZWdfTnVtLCByZWcsIFZJQUNSKTsKKwkJfQorCX0KK30KKworYm9vbCB2aWFmYl9sY2RfZ2V0X21vYmlsZV9zdGF0ZShib29sICptb2JpbGUpCit7CisJdW5zaWduZWQgY2hhciAqcm9tcHRyLCAqdGFibGVwdHI7CisJdTggY29yZV9iYXNlOworCXVuc2lnbmVkIGNoYXIgKmJpb3NwdHI7CisJLyogUm9tIGFkZHJlc3MgKi8KKwl1MzIgcm9tYWRkciA9IDB4MDAwQzAwMDA7CisJdTE2IHN0YXJ0X3BhdHRlcm4gPSAwOworCisJYmlvc3B0ciA9IGlvcmVtYXAocm9tYWRkciwgMHgxMDAwMCk7CisKKwltZW1jcHkoJnN0YXJ0X3BhdHRlcm4sIGJpb3NwdHIsIDIpOworCS8qIENvbXBhcmUgcGF0dGVybiAqLworCWlmIChzdGFydF9wYXR0ZXJuID09IDB4QUE1NSkgeworCQkvKiBHZXQgdGhlIHN0YXJ0IG9mIFRhYmxlICovCisJCS8qIDB4MUIgbWVhbnMgQklPUyBvZmZzZXQgcG9zaXRpb24gKi8KKwkJcm9tcHRyID0gYmlvc3B0ciArIDB4MUI7CisJCXRhYmxlcHRyID0gYmlvc3B0ciArICooKHUxNiAqKSByb21wdHIpOworCisJCS8qIEdldCB0aGUgc3RhcnQgb2YgYmlvc3ZlciBzdHJ1Y3R1cmUgKi8KKwkJLyogMTggbWVhbnMgQklPUyB2ZXJzaW9uIHBvc2l0aW9uLiAqLworCQlyb21wdHIgPSB0YWJsZXB0ciArIDE4OworCQlyb21wdHIgPSBiaW9zcHRyICsgKigodTE2ICopIHJvbXB0cik7CisKKwkJLyogVGhlIG9mZnNldCBzaG91bGQgYmUgNDQsIGJ1dCB0aGUKKwkJICAgYWN0dWFsIGltYWdlIGlzIGxlc3MgdGhyZWUgY2hhci4gKi8KKwkJLyogcFJvbSArPSA0NDsgKi8KKwkJcm9tcHRyICs9IDQxOworCisJCWNvcmVfYmFzZSA9ICpyb21wdHIrKzsKKworCQlpZiAoY29yZV9iYXNlICYgMHg4KQorCQkJKm1vYmlsZSA9IGZhbHNlOworCQllbHNlCisJCQkqbW9iaWxlID0gdHJ1ZTsKKwkJLyogcmVsZWFzZSBtZW1vcnkgKi8KKwkJaW91bm1hcChiaW9zcHRyKTsKKworCQlyZXR1cm4gdHJ1ZTsKKwl9IGVsc2UgeworCQlpb3VubWFwKGJpb3NwdHIpOworCQlyZXR1cm4gZmFsc2U7CisJfQorfQorCitzdGF0aWMgdm9pZCB2aWFmYl9sb2FkX3NjYWxpbmdfZmFjdG9yX2Zvcl9wNG05MDAoaW50IHNldF9ocmVzLAorCWludCBzZXRfdnJlcywgaW50IHBhbmVsX2hyZXMsIGludCBwYW5lbF92cmVzKQoreworCWludCBoX3NjYWxpbmdfZmFjdG9yOworCWludCB2X3NjYWxpbmdfZmFjdG9yOworCXU4IGNyYTIgPSAwOworCXU4IGNyNzcgPSAwOworCXU4IGNyNzggPSAwOworCXU4IGNyNzkgPSAwOworCXU4IGNyOWYgPSAwOworCS8qIENoZWNrIGlmIGV4cGFuc2lvbiBmb3IgaG9yaXpvbnRhbCAqLworCWlmIChzZXRfaHJlcyA8IHBhbmVsX2hyZXMpIHsKKwkJLyogTG9hZCBIb3Jpem9udGFsIFNjYWxpbmcgRmFjdG9yICovCisKKwkJLyogRm9yIFZJQV9LOE04MDAgb3IgbGF0ZXIgY2hpcHNldHMuICovCisJCWhfc2NhbGluZ19mYWN0b3IgPQorCQkgICAgSzgwMF9MQ0RfSE9SX1NDRl9GT1JNVUxBKHNldF9ocmVzLCBwYW5lbF9ocmVzKTsKKwkJLyogSFNDYWxlRmFjdG9yWzE6MF0gYXQgQ1I5RlsxOjBdICovCisJCWNyOWYgPSBoX3NjYWxpbmdfZmFjdG9yICYgMHgwMDAzOworCQkvKiBIU0NhbGVGYWN0b3JbOToyXSBhdCBDUjc3Wzc6MF0gKi8KKwkJY3I3NyA9IChoX3NjYWxpbmdfZmFjdG9yICYgMHgwM0ZDKSA+PiAyOworCQkvKiBIU0NhbGVGYWN0b3JbMTE6MTBdIGF0IENSNzlbNTo0XSAqLworCQljcjc5ID0gKGhfc2NhbGluZ19mYWN0b3IgJiAweDBDMDApID4+IDEwOworCQljcjc5IDw8PSA0OworCisJCS8qIEhvcml6b250YWwgc2NhbGluZyBlbmFibGVkICovCisJCWNyYTIgPSAweEMwOworCisJCURFQlVHX01TRyhLRVJOX0lORk8gIkhvcml6b250YWwgU2NhbGluZyB2YWx1ZSA9ICVkXG4iLAorCQkJICBoX3NjYWxpbmdfZmFjdG9yKTsKKwl9IGVsc2UgeworCQkvKiBIb3Jpem9udGFsIHNjYWxpbmcgZGlzYWJsZWQgKi8KKwkJY3JhMiA9IDB4MDA7CisJfQorCisJLyogQ2hlY2sgaWYgZXhwYW5zaW9uIGZvciB2ZXJ0aWNhbCAqLworCWlmIChzZXRfdnJlcyA8IHBhbmVsX3ZyZXMpIHsKKwkJLyogTG9hZCBWZXJ0aWNhbCBTY2FsaW5nIEZhY3RvciAqLworCisJCS8qIEZvciBWSUFfSzhNODAwIG9yIGxhdGVyIGNoaXBzZXRzLiAqLworCQl2X3NjYWxpbmdfZmFjdG9yID0KKwkJICAgIEs4MDBfTENEX1ZFUl9TQ0ZfRk9STVVMQShzZXRfdnJlcywgcGFuZWxfdnJlcyk7CisKKwkJLyogVmVydGljYWwgc2NhbGluZyBlbmFibGVkICovCisJCWNyYTIgfD0gMHgwODsKKwkJLyogVlNDYWxlRmFjdG9yWzBdIGF0IENSNzlbM10gKi8KKwkJY3I3OSB8PSAoKHZfc2NhbGluZ19mYWN0b3IgJiAweDAwMDEpIDw8IDMpOworCQkvKiBWU0NhbGVGYWN0b3JbODoxXSBhdCBDUjc4Wzc6MF0gKi8KKwkJY3I3OCB8PSAodl9zY2FsaW5nX2ZhY3RvciAmIDB4MDFGRSkgPj4gMTsKKwkJLyogVlNDYWxlRmFjdG9yWzEwOjldIGF0IENSNzlbNzo2XSAqLworCQljcjc5IHw9ICgodl9zY2FsaW5nX2ZhY3RvciAmIDB4MDYwMCkgPj4gOSkgPDwgNjsKKworCQlERUJVR19NU0coS0VSTl9JTkZPICJWZXJ0aWNhbCBTY2FsaW5nIHZhbHVlID0gJWRcbiIsCisJCQkgIHZfc2NhbGluZ19mYWN0b3IpOworCX0gZWxzZSB7CisJCS8qIFZlcnRpY2FsIHNjYWxpbmcgZGlzYWJsZWQgKi8KKwkJY3JhMiB8PSAweDAwOworCX0KKworCXZpYWZiX3dyaXRlX3JlZ19tYXNrKENSQTIsIFZJQUNSLCBjcmEyLCBCSVQzICsgQklUNiArIEJJVDcpOworCXZpYWZiX3dyaXRlX3JlZ19tYXNrKENSNzcsIFZJQUNSLCBjcjc3LCAweEZGKTsKKwl2aWFmYl93cml0ZV9yZWdfbWFzayhDUjc4LCBWSUFDUiwgY3I3OCwgMHhGRik7CisJdmlhZmJfd3JpdGVfcmVnX21hc2soQ1I3OSwgVklBQ1IsIGNyNzksIDB4RjgpOworCXZpYWZiX3dyaXRlX3JlZ19tYXNrKENSOUYsIFZJQUNSLCBjcjlmLCBCSVQwICsgQklUMSk7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3ZpYS9sY2QuaCBiL2RyaXZlcnMvdmlkZW8vdmlhL2xjZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3MWY0N2MKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3ZpZGVvL3ZpYS9sY2QuaApAQCAtMCwwICsxLDk0IEBACisvKgorICogQ29weXJpZ2h0IDE5OTgtMjAwOCBWSUEgVGVjaG5vbG9naWVzLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgMjAwMS0yMDA4IFMzIEdyYXBoaWNzLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKKyAqIGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRJRVMgT1IgUkVQUkVTRU5UQVRJT05TOyB3aXRob3V0IGV2ZW4KKyAqIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UuU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogZm9yIG1vcmUgZGV0YWlscy4KKworICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLAorICogNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworI2lmbmRlZiBfX0xDRF9IX18KKyNkZWZpbmUgX19MQ0RfSF9fCisKKy8qRGVmaW5pdGlvbiBUTURTIERldmljZSBJRCByZWdpc3RlciovCisjZGVmaW5lICAgICBWVDE2MzFfREVWSUNFX0lEX1JFRyAgICAgICAgMHgwMgorI2RlZmluZSAgICAgVlQxNjMxX0RFVklDRV9JRCAgICAgICAgICAgIDB4OTIKKworI2RlZmluZSAgICAgVlQzMjcxX0RFVklDRV9JRF9SRUcgICAgICAgIDB4MDIKKyNkZWZpbmUgICAgIFZUMzI3MV9ERVZJQ0VfSUQgICAgICAgICAgICAweDcxCisKKyNkZWZpbmUgICAgIEdFVF9MQ0RfU0laRV9CWV9TWVNURU1fQklPUyAgICAgMHgwMQorI2RlZmluZSAgICAgR0VUX0xDRF9TSVpFX0JZX1ZHQV9CSU9TICAgICAgICAweDAyCisjZGVmaW5lICAgICBHRVRfTENEX1NaSUVfQllfSFdfU1RSQVBQSU5HICAgIDB4MDMKKyNkZWZpbmUgICAgIEdFVF9MQ0RfU0laRV9CWV9VU0VSX1NFVFRJTkcgICAgMHgwNAorCisvKiBEZWZpbml0aW9uIERWSSBQYW5lbCBJRCovCisvKiBSZXNvbHV0aW9uOiA2NDB4NDgwLCAgIENoYW5uZWw6IHNpbmdsZSwgRGl0aGVyaW5nOiBFbmFibGUgKi8KKyNkZWZpbmUgICAgIExDRF9QQU5FTF9JRDBfNjQwWDQ4MCAgICAgICAweDAwCisvKiBSZXNvbHV0aW9uOiA4MDB4NjAwLCAgIENoYW5uZWw6IHNpbmdsZSwgRGl0aGVyaW5nOiBFbmFibGUgKi8KKyNkZWZpbmUgICAgIExDRF9QQU5FTF9JRDFfODAwWDYwMCAgICAgICAweDAxCisvKiBSZXNvbHV0aW9uOiAxMDI0eDc2OCwgIENoYW5uZWw6IHNpbmdsZSwgRGl0aGVyaW5nOiBFbmFibGUgKi8KKyNkZWZpbmUgICAgIExDRF9QQU5FTF9JRDJfMTAyNFg3NjggICAgICAweDAyCisvKiBSZXNvbHV0aW9uOiAxMjgweDc2OCwgIENoYW5uZWw6IHNpbmdsZSwgRGl0aGVyaW5nOiBFbmFibGUgKi8KKyNkZWZpbmUgICAgIExDRF9QQU5FTF9JRDNfMTI4MFg3NjggICAgICAweDAzCisvKiBSZXNvbHV0aW9uOiAxMjgweDEwMjQsIENoYW5uZWw6IGR1YWwsICAgRGl0aGVyaW5nOiBFbmFibGUgKi8KKyNkZWZpbmUgICAgIExDRF9QQU5FTF9JRDRfMTI4MFgxMDI0ICAgICAweDA0CisvKiBSZXNvbHV0aW9uOiAxNDAweDEwNTAsIENoYW5uZWw6IGR1YWwsICAgRGl0aGVyaW5nOiBFbmFibGUgKi8KKyNkZWZpbmUgICAgIExDRF9QQU5FTF9JRDVfMTQwMFgxMDUwICAgICAweDA1CisvKiBSZXNvbHV0aW9uOiAxNjAweDEyMDAsIENoYW5uZWw6IGR1YWwsICAgRGl0aGVyaW5nOiBFbmFibGUgKi8KKyNkZWZpbmUgICAgIExDRF9QQU5FTF9JRDZfMTYwMFgxMjAwICAgICAweDA2CisvKiBSZXNvbHV0aW9uOiAxMzY2eDc2OCwgIENoYW5uZWw6IHNpbmdsZSwgRGl0aGVyaW5nOiBEaXNhYmxlICovCisjZGVmaW5lICAgICBMQ0RfUEFORUxfSUQ3XzEzNjZYNzY4ICAgICAgMHgwNworLyogUmVzb2x1dGlvbjogMTAyNHg2MDAsICBDaGFubmVsOiBzaW5nbGUsIERpdGhlcmluZzogRW5hYmxlKi8KKyNkZWZpbmUgICAgIExDRF9QQU5FTF9JRDhfMTAyNFg2MDAgICAgICAweDA4CisvKiBSZXNvbHV0aW9uOiAxMjgweDgwMCwgIENoYW5uZWw6IHNpbmdsZSwgRGl0aGVyaW5nOiBFbmFibGUqLworI2RlZmluZSAgICAgTENEX1BBTkVMX0lEOV8xMjgwWDgwMCAgICAgIDB4MDkKKy8qIFJlc29sdXRpb246IDgwMHg0ODAsICAgQ2hhbm5lbDogc2luZ2xlLCBEaXRoZXJpbmc6IEVuYWJsZSovCisjZGVmaW5lICAgICBMQ0RfUEFORUxfSURBXzgwMFg0ODAgICAgICAgMHgwQQorLyogUmVzb2x1dGlvbjogMTM2MHg3NjgsICAgQ2hhbm5lbDogc2luZ2xlLCBEaXRoZXJpbmc6IERpc2FibGUqLworI2RlZmluZSAgICAgTENEX1BBTkVMX0lEQl8xMzYwWDc2OCAgICAgMHgwQgorLyogUmVzb2x1dGlvbjogNDgweDY0MCwgIENoYW5uZWw6IHNpbmdsZSwgRGl0aGVyaW5nOiBFbmFibGUgKi8KKyNkZWZpbmUgICAgIExDRF9QQU5FTF9JRENfNDgwWDY0MCAgICAgIDB4MEMKKworCitleHRlcm4gaW50IHZpYWZiX0xDRDJfT047CitleHRlcm4gaW50IHZpYWZiX0xDRF9PTjsKK2V4dGVybiBpbnQgdmlhZmJfRFZJX09OOworCit2b2lkIHZpYWZiX2Rpc2FibGVfbHZkc192dDE2MzYoc3RydWN0IGx2ZHNfc2V0dGluZ19pbmZvcm1hdGlvbgorCQkJICpwbHZkc19zZXR0aW5nX2luZm8sCisJCQkgc3RydWN0IGx2ZHNfY2hpcF9pbmZvcm1hdGlvbiAqcGx2ZHNfY2hpcF9pbmZvKTsKK3ZvaWQgdmlhZmJfZW5hYmxlX2x2ZHNfdnQxNjM2KHN0cnVjdCBsdmRzX3NldHRpbmdfaW5mb3JtYXRpb24KKwkJCSpwbHZkc19zZXR0aW5nX2luZm8sCisJCQlzdHJ1Y3QgbHZkc19jaGlwX2luZm9ybWF0aW9uICpwbHZkc19jaGlwX2luZm8pOwordm9pZCB2aWFmYl9sY2RfZGlzYWJsZSh2b2lkKTsKK3ZvaWQgdmlhZmJfbGNkX2VuYWJsZSh2b2lkKTsKK3ZvaWQgdmlhZmJfaW5pdF9sY2Rfc2l6ZSh2b2lkKTsKK3ZvaWQgdmlhZmJfaW5pdF9sdmRzX291dHB1dF9pbnRlcmZhY2Uoc3RydWN0IGx2ZHNfY2hpcF9pbmZvcm1hdGlvbgorCQkJCSpwbHZkc19jaGlwX2luZm8sCisJCQkJc3RydWN0IGx2ZHNfc2V0dGluZ19pbmZvcm1hdGlvbgorCQkJCSpwbHZkc19zZXR0aW5nX2luZm8pOwordm9pZCB2aWFmYl9sY2Rfc2V0X21vZGUoc3RydWN0IGNydF9tb2RlX3RhYmxlICptb2RlX2NydF90YWJsZSwKKwkJICBzdHJ1Y3QgbHZkc19zZXR0aW5nX2luZm9ybWF0aW9uICpwbHZkc19zZXR0aW5nX2luZm8sCisJCSAgc3RydWN0IGx2ZHNfY2hpcF9pbmZvcm1hdGlvbiAqcGx2ZHNfY2hpcF9pbmZvKTsKK2ludCB2aWFmYl9sdmRzX3RyYXNtaXR0ZXJfaWRlbnRpZnkodm9pZCk7Cit2b2lkIHZpYWZiX2luaXRfbHZkc19vdXRwdXRfaW50ZXJmYWNlKHN0cnVjdCBsdmRzX2NoaXBfaW5mb3JtYXRpb24KKwkJCQkqcGx2ZHNfY2hpcF9pbmZvLAorCQkJCXN0cnVjdCBsdmRzX3NldHRpbmdfaW5mb3JtYXRpb24KKwkJCQkqcGx2ZHNfc2V0dGluZ19pbmZvKTsKK2Jvb2wgdmlhZmJfbGNkX2dldF9tb2JpbGVfc3RhdGUoYm9vbCAqbW9iaWxlKTsKK3ZvaWQgdmlhZmJfbG9hZF9jcnRjX3RpbWluZyhzdHJ1Y3QgZGlzcGxheV90aW1pbmcgZGV2aWNlX3RpbWluZywKKwlpbnQgc2V0X2lnYSk7CisKKyNlbmRpZiAvKiBfX0xDRF9IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vdmlhL2xjZHRibC5oIGIvZHJpdmVycy92aWRlby92aWEvbGNkdGJsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmYzZGQ4MAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdmlkZW8vdmlhL2xjZHRibC5oCkBAIC0wLDAgKzEsNTkxIEBACisvKgorICogQ29weXJpZ2h0IDE5OTgtMjAwOCBWSUEgVGVjaG5vbG9naWVzLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgMjAwMS0yMDA4IFMzIEdyYXBoaWNzLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKKyAqIGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRJRVMgT1IgUkVQUkVTRU5UQVRJT05TOyB3aXRob3V0IGV2ZW4KKyAqIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UuU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogZm9yIG1vcmUgZGV0YWlscy4KKworICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLAorICogNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworI2lmbmRlZiBfX0xDRFRCTF9IX18KKyNkZWZpbmUgX19MQ0RUQkxfSF9fCisKKyNpbmNsdWRlICJzaGFyZS5oIgorCisvKiBDTEUyNjYgU29mdHdhcmUgUG93ZXIgU2VxdWVuY2UgKi8KKy8qIHtNYXNrfSwge0RhdGF9LCB7RGVsYXl9ICovCitpbnQgUG93ZXJTZXF1ZW5jZU9uWzNdWzNdID0KKyAgICB7IHsweDEwLCAweDA4LCAweDA2fSwgezB4MTAsIDB4MDgsIDB4MDZ9LCB7MHgxOSwgMHgxRkUsIDB4MDF9IH07CitpbnQgUG93ZXJTZXF1ZW5jZU9mZlszXVszXSA9CisgICAgeyB7MHgwNiwgMHgwOCwgMHgxMH0sIHsweDAwLCAweDAwLCAweDAwfSwgezB4RDIsIDB4MTksIDB4MDF9IH07CisKKy8qICsrKysrKyBQODgwICsrKysrKyAqLworLyogICBQYW5lbCAxNjAweDEyMDAgICAqLworc3RydWN0IGlvX3JlZyBQODgwX0xDRF9SRVNfNlg0XzE2WDEyW10gPSB7CisJLypJR0EyIEhvcml6b250YWwgVG90YWwgKi8KKwl7VklBQ1IsIENSNTAsIDB4RkYsIDB4NzN9LCB7VklBQ1IsIENSNTUsIDB4MEYsIDB4MDh9LAorCS8qSUdBMiBIb3Jpem9udGFsIEJsYW5rIEVuZCAqLworCXtWSUFDUiwgQ1I1MywgMHhGRiwgMHg3M30sIHtWSUFDUiwgQ1I1NCwgMHgzOCwgMHgwMH0sCisJe1ZJQUNSLCBDUjVELCAweDQwLCAweDQwfSwKKwkvKklHQTIgSG9yaXpvbnRhbCBUb3RhbCBTaGFkb3cgKi8KKwl7VklBQ1IsIENSNkQsIDB4RkYsIDB4NUF9LCB7VklBQ1IsIENSNzEsIDB4MDgsIDB4MDB9LAorCS8qSUdBMiBIb3Jpem9udGFsIEJsYW5rIEVuZCBTaGFkb3cgKi8KKwl7VklBQ1IsIENSNkUsIDB4RkYsIDB4NUV9LAorCS8qSUdBMiBPZmZzZXQgKi8KKwl7VklBQ1IsIENSNjYsIDB4RkYsIDB4RDZ9LCB7VklBQ1IsIENSNjcsIDB4MDMsIDB4MDB9LAorCSAvKlZDTEsqLyB7VklBU1IsIFNSNDQsIDB4RkYsIDB4N0R9LCB7VklBU1IsIFNSNDUsIDB4RkYsIDB4OEN9LAorCXtWSUFTUiwgU1I0NiwgMHhGRiwgMHgwMn0KKworfTsKKworI2RlZmluZSBOVU1fVE9UQUxfUDg4MF9MQ0RfUkVTXzZYNF8xNlgxMiBBUlJBWV9TSVpFKFA4ODBfTENEX1JFU182WDRfMTZYMTIpCisKK3N0cnVjdCBpb19yZWcgUDg4MF9MQ0RfUkVTXzdYNF8xNlgxMltdID0geworCS8qSUdBMiBIb3Jpem9udGFsIFRvdGFsICovCisJe1ZJQUNSLCBDUjUwLCAweEZGLCAweDY3fSwge1ZJQUNSLCBDUjU1LCAweDBGLCAweDA4fSwKKwkvKklHQTIgSG9yaXpvbnRhbCBCbGFuayBFbmQgKi8KKwl7VklBQ1IsIENSNTMsIDB4RkYsIDB4Njd9LCB7VklBQ1IsIENSNTQsIDB4MzgsIDB4MDB9LAorCXtWSUFDUiwgQ1I1RCwgMHg0MCwgMHg0MH0sCisJLypJR0EyIEhvcml6b250YWwgVG90YWwgU2hhZG93ICovCisJe1ZJQUNSLCBDUjZELCAweEZGLCAweDc0fSwge1ZJQUNSLCBDUjcxLCAweDA4LCAweDAwfSwKKwkvKklHQTIgSG9yaXpvbnRhbCBCbGFuayBFbmQgU2hhZG93ICovCisJe1ZJQUNSLCBDUjZFLCAweEZGLCAweDc4fSwKKwkvKklHQTIgT2Zmc2V0ICovCisJe1ZJQUNSLCBDUjY2LCAweEZGLCAweEY1fSwge1ZJQUNSLCBDUjY3LCAweDAzLCAweDAwfSwKKwkgLypWQ0xLKi8ge1ZJQVNSLCBTUjQ0LCAweEZGLCAweDc4fSwge1ZJQVNSLCBTUjQ1LCAweEZGLCAweDhDfSwKKwl7VklBU1IsIFNSNDYsIDB4RkYsIDB4MDF9CisKK307CisKKyNkZWZpbmUgTlVNX1RPVEFMX1A4ODBfTENEX1JFU183WDRfMTZYMTIgQVJSQVlfU0laRShQODgwX0xDRF9SRVNfN1g0XzE2WDEyKQorCitzdHJ1Y3QgaW9fcmVnIFA4ODBfTENEX1JFU184WDZfMTZYMTJbXSA9IHsKKwkvKklHQTIgSG9yaXpvbnRhbCBUb3RhbCAqLworCXtWSUFDUiwgQ1I1MCwgMHhGRiwgMHg2NX0sIHtWSUFDUiwgQ1I1NSwgMHgwRiwgMHgwOH0sCisJLypJR0EyIEhvcml6b250YWwgQmxhbmsgRW5kICovCisJe1ZJQUNSLCBDUjUzLCAweEZGLCAweDY1fSwge1ZJQUNSLCBDUjU0LCAweDM4LCAweDAwfSwKKwl7VklBQ1IsIENSNUQsIDB4NDAsIDB4NDB9LAorCS8qSUdBMiBIb3Jpem9udGFsIFRvdGFsIFNoYWRvdyAqLworCXtWSUFDUiwgQ1I2RCwgMHhGRiwgMHg3Rn0sIHtWSUFDUiwgQ1I3MSwgMHgwOCwgMHgwMH0sCisJLypJR0EyIEhvcml6b250YWwgQmxhbmsgRW5kIFNoYWRvdyAqLworCXtWSUFDUiwgQ1I2RSwgMHhGRiwgMHg4M30sCisJLypJR0EyIE9mZnNldCAqLworCXtWSUFDUiwgQ1I2NiwgMHhGRiwgMHhFMX0sIHtWSUFDUiwgQ1I2NywgMHgwMywgMHgwMH0sCisJIC8qVkNMSyovIHtWSUFTUiwgU1I0NCwgMHhGRiwgMHg2RH0sIHtWSUFTUiwgU1I0NSwgMHhGRiwgMHg4OH0sCisJe1ZJQVNSLCBTUjQ2LCAweEZGLCAweDAzfQorCit9OworCisjZGVmaW5lIE5VTV9UT1RBTF9QODgwX0xDRF9SRVNfOFg2XzE2WDEyIEFSUkFZX1NJWkUoUDg4MF9MQ0RfUkVTXzhYNl8xNlgxMikKKworc3RydWN0IGlvX3JlZyBQODgwX0xDRF9SRVNfMTBYN18xNlgxMltdID0geworCS8qSUdBMiBIb3Jpem9udGFsIFRvdGFsICovCisJe1ZJQUNSLCBDUjUwLCAweEZGLCAweDY1fSwge1ZJQUNSLCBDUjU1LCAweDBGLCAweDA4fSwKKwkvKklHQTIgSG9yaXpvbnRhbCBCbGFuayBFbmQgKi8KKwl7VklBQ1IsIENSNTMsIDB4RkYsIDB4NjV9LCB7VklBQ1IsIENSNTQsIDB4MzgsIDB4MDB9LAorCXtWSUFDUiwgQ1I1RCwgMHg0MCwgMHg0MH0sCisJLypJR0EyIEhvcml6b250YWwgVG90YWwgU2hhZG93ICovCisJe1ZJQUNSLCBDUjZELCAweEZGLCAweEFCfSwge1ZJQUNSLCBDUjcxLCAweDA4LCAweDAwfSwKKwkvKklHQTIgSG9yaXpvbnRhbCBCbGFuayBFbmQgU2hhZG93ICovCisJe1ZJQUNSLCBDUjZFLCAweEZGLCAweEFGfSwKKwkvKklHQTIgT2Zmc2V0ICovCisJe1ZJQUNSLCBDUjY2LCAweEZGLCAweEYwfSwge1ZJQUNSLCBDUjY3LCAweDAzLCAweDAwfSwKKwkgLypWQ0xLKi8ge1ZJQVNSLCBTUjQ0LCAweEZGLCAweDkyfSwge1ZJQVNSLCBTUjQ1LCAweEZGLCAweDg4fSwKKwl7VklBU1IsIFNSNDYsIDB4RkYsIDB4MDN9CisKK307CisKKyNkZWZpbmUgTlVNX1RPVEFMX1A4ODBfTENEX1JFU18xMFg3XzE2WDEyIEFSUkFZX1NJWkUoUDg4MF9MQ0RfUkVTXzEwWDdfMTZYMTIpCisKK3N0cnVjdCBpb19yZWcgUDg4MF9MQ0RfUkVTXzEyWDEwXzE2WDEyW10gPSB7CisJLypJR0EyIEhvcml6b250YWwgVG90YWwgKi8KKwl7VklBQ1IsIENSNTAsIDB4RkYsIDB4N0R9LCB7VklBQ1IsIENSNTUsIDB4MEYsIDB4MDh9LAorCS8qSUdBMiBIb3Jpem9udGFsIEJsYW5rIEVuZCAqLworCXtWSUFDUiwgQ1I1MywgMHhGRiwgMHg3RH0sIHtWSUFDUiwgQ1I1NCwgMHgzOCwgMHgwMH0sCisJe1ZJQUNSLCBDUjVELCAweDQwLCAweDQwfSwKKwkvKklHQTIgSG9yaXpvbnRhbCBUb3RhbCBTaGFkb3cgKi8KKwl7VklBQ1IsIENSNkQsIDB4RkYsIDB4RDB9LCB7VklBQ1IsIENSNzEsIDB4MDgsIDB4MDB9LAorCS8qSUdBMiBIb3Jpem9udGFsIEJsYW5rIEVuZCBTaGFkb3cgKi8KKwl7VklBQ1IsIENSNkUsIDB4RkYsIDB4RDR9LAorCS8qSUdBMiBPZmZzZXQgKi8KKwl7VklBQ1IsIENSNjYsIDB4RkYsIDB4RkF9LCB7VklBQ1IsIENSNjcsIDB4MDMsIDB4MDB9LAorCSAvKlZDTEsqLyB7VklBU1IsIFNSNDQsIDB4RkYsIDB4RjZ9LCB7VklBU1IsIFNSNDUsIDB4RkYsIDB4ODh9LAorCXtWSUFTUiwgU1I0NiwgMHhGRiwgMHgwNX0KKworfTsKKworI2RlZmluZSBOVU1fVE9UQUxfUDg4MF9MQ0RfUkVTXzEyWDEwXzE2WDEyIEFSUkFZX1NJWkUoUDg4MF9MQ0RfUkVTXzEyWDEwXzE2WDEyKQorCisvKiAgIFBhbmVsIDE0MDB4MTA1MCAgICovCitzdHJ1Y3QgaW9fcmVnIFA4ODBfTENEX1JFU182WDRfMTRYMTBbXSA9IHsKKwkvKiA2NDB4NDgwICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCS8qIElHQTIgSG9yaXpvbnRhbCBUb3RhbCAgICAgICAgICAgICovCisJe1ZJQUNSLCBDUjUwLCAweEZGLCAweDlEfSwge1ZJQUNSLCBDUjU1LCAweDBGLCAweDU2fSwKKwkvKiBJR0EyIEhvcml6b250YWwgQmxhbmsgRW5kICAgICAgICAqLworCXtWSUFDUiwgQ1I1MywgMHhGRiwgMHg5RH0sIHtWSUFDUiwgQ1I1NCwgMHgzOCwgMHg3NX0sCisJe1ZJQUNSLCBDUjVELCAweDQwLCAweDI0fSwKKwkvKiBJR0EyIEhvcml6b250YWwgVG90YWwgU2hhZG93ICAgICAqLworCXtWSUFDUiwgQ1I2RCwgMHhGRiwgMHg1Rn0sIHtWSUFDUiwgQ1I3MSwgMHgwOCwgMHg0NH0sCisJLyogSUdBMiBIb3Jpem9udGFsIEJsYW5rIEVuZCBTaGFkb3cgKi8KKwl7VklBQ1IsIENSNkUsIDB4RkYsIDB4NjN9LAorCS8qIElHQTIgT2Zmc2V0ICAgICAgICAgICAgICAgICAgICAgICovCisJe1ZJQUNSLCBDUjY2LCAweEZGLCAweEI0fSwge1ZJQUNSLCBDUjY3LCAweDAzLCAweDAwfSwKKwkvKiBWQ0xLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCXtWSUFTUiwgU1I0NCwgMHhGRiwgMHhDNn0sIHtWSUFTUiwgU1I0NSwgMHhGRiwgMHg4Q30sCisJe1ZJQVNSLCBTUjQ2LCAweEZGLCAweDA1fQorfTsKKworI2RlZmluZSBOVU1fVE9UQUxfUDg4MF9MQ0RfUkVTXzZYNF8xNFgxMCBBUlJBWV9TSVpFKFA4ODBfTENEX1JFU182WDRfMTRYMTApCisKK3N0cnVjdCBpb19yZWcgUDg4MF9MQ0RfUkVTXzhYNl8xNFgxMFtdID0geworCS8qIDgwMHg2MDAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisJLyogSUdBMiBIb3Jpem9udGFsIFRvdGFsICAgICAgICAgICAgKi8KKwl7VklBQ1IsIENSNTAsIDB4RkYsIDB4OUR9LCB7VklBQ1IsIENSNTUsIDB4MEYsIDB4NTZ9LAorCS8qIElHQTIgSG9yaXpvbnRhbCBCbGFuayBFbmQgICAgICAgICovCisJe1ZJQUNSLCBDUjUzLCAweEZGLCAweDlEfSwge1ZJQUNSLCBDUjU0LCAweDM4LCAweDc1fSwKKwl7VklBQ1IsIENSNUQsIDB4NDAsIDB4MjR9LAorCS8qIElHQTIgSG9yaXpvbnRhbCBUb3RhbCBTaGFkb3cgICAgICovCisJe1ZJQUNSLCBDUjZELCAweEZGLCAweDdGfSwge1ZJQUNSLCBDUjcxLCAweDA4LCAweDQ0fSwKKwkvKiBJR0EyIEhvcml6b250YWwgQmxhbmsgRW5kIFNoYWRvdyAqLworCXtWSUFDUiwgQ1I2RSwgMHhGRiwgMHg4M30sCisJLyogSUdBMiBPZmZzZXQgICAgICAgICAgICAgICAgICAgICAgKi8KKwl7VklBQ1IsIENSNjYsIDB4RkYsIDB4QkV9LCB7VklBQ1IsIENSNjcsIDB4MDMsIDB4MDB9LAorCS8qIFZDTEsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisJe1ZJQVNSLCBTUjQ0LCAweEZGLCAweDA2fSwge1ZJQVNSLCBTUjQ1LCAweEZGLCAweDhEfSwKKwl7VklBU1IsIFNSNDYsIDB4RkYsIDB4MDV9Cit9OworCisjZGVmaW5lIE5VTV9UT1RBTF9QODgwX0xDRF9SRVNfOFg2XzE0WDEwIEFSUkFZX1NJWkUoUDg4MF9MQ0RfUkVTXzhYNl8xNFgxMCkKKworLyogKysrKysrIEs0MDAgKysrKysrICovCisvKiAgIFBhbmVsIDE2MDB4MTIwMCAgICovCitzdHJ1Y3QgaW9fcmVnIEs0MDBfTENEX1JFU182WDRfMTZYMTJbXSA9IHsKKwkvKklHQTIgSG9yaXpvbnRhbCBUb3RhbCAqLworCXtWSUFDUiwgQ1I1MCwgMHhGRiwgMHg3M30sIHtWSUFDUiwgQ1I1NSwgMHgwRiwgMHgwOH0sCisJLypJR0EyIEhvcml6b250YWwgQmxhbmsgRW5kICovCisJe1ZJQUNSLCBDUjUzLCAweEZGLCAweDczfSwge1ZJQUNSLCBDUjU0LCAweDM4LCAweDAwfSwKKwl7VklBQ1IsIENSNUQsIDB4NDAsIDB4NDB9LAorCS8qSUdBMiBIb3Jpem9udGFsIFRvdGFsIFNoYWRvdyAqLworCXtWSUFDUiwgQ1I2RCwgMHhGRiwgMHg1QX0sIHtWSUFDUiwgQ1I3MSwgMHgwOCwgMHgwMH0sCisJLypJR0EyIEhvcml6b250YWwgQmxhbmsgRW5kIFNoYWRvdyAqLworCXtWSUFDUiwgQ1I2RSwgMHhGRiwgMHg1RX0sCisJLypJR0EyIE9mZnNldCAqLworCXtWSUFDUiwgQ1I2NiwgMHhGRiwgMHhEQX0sIHtWSUFDUiwgQ1I2NywgMHgwMywgMHgwMH0sCisJIC8qVkNMSyovIHtWSUFTUiwgU1I0NiwgMHhGRiwgMHhDNH0sIHtWSUFTUiwgU1I0NywgMHhGRiwgMHg3Rn0KK307CisKKyNkZWZpbmUgTlVNX1RPVEFMX0s0MDBfTENEX1JFU182WDRfMTZYMTIgQVJSQVlfU0laRShLNDAwX0xDRF9SRVNfNlg0XzE2WDEyKQorCitzdHJ1Y3QgaW9fcmVnIEs0MDBfTENEX1JFU183WDRfMTZYMTJbXSA9IHsKKwkvKklHQTIgSG9yaXpvbnRhbCBUb3RhbCAqLworCXtWSUFDUiwgQ1I1MCwgMHhGRiwgMHg2N30sIHtWSUFDUiwgQ1I1NSwgMHgwRiwgMHgwOH0sCisJLypJR0EyIEhvcml6b250YWwgQmxhbmsgRW5kICovCisJe1ZJQUNSLCBDUjUzLCAweEZGLCAweDY3fSwge1ZJQUNSLCBDUjU0LCAweDM4LCAweDAwfSwKKwl7VklBQ1IsIENSNUQsIDB4NDAsIDB4NDB9LAorCS8qSUdBMiBIb3Jpem9udGFsIFRvdGFsIFNoYWRvdyAqLworCXtWSUFDUiwgQ1I2RCwgMHhGRiwgMHg3NH0sIHtWSUFDUiwgQ1I3MSwgMHgwOCwgMHgwMH0sCisJLypJR0EyIEhvcml6b250YWwgQmxhbmsgRW5kIFNoYWRvdyAqLworCXtWSUFDUiwgQ1I2RSwgMHhGRiwgMHg3OH0sCisJLypJR0EyIE9mZnNldCAqLworCXtWSUFDUiwgQ1I2NiwgMHhGRiwgMHhGNX0sIHtWSUFDUiwgQ1I2NywgMHgwMywgMHgwMH0sCisJIC8qVkNMSyovIHtWSUFTUiwgU1I0NiwgMHhGRiwgMHg0Nn0sIHtWSUFTUiwgU1I0NywgMHhGRiwgMHgzRH0KK307CisKKyNkZWZpbmUgTlVNX1RPVEFMX0s0MDBfTENEX1JFU183WDRfMTZYMTIgQVJSQVlfU0laRShLNDAwX0xDRF9SRVNfN1g0XzE2WDEyKQorCitzdHJ1Y3QgaW9fcmVnIEs0MDBfTENEX1JFU184WDZfMTZYMTJbXSA9IHsKKwkvKklHQTIgSG9yaXpvbnRhbCBUb3RhbCAqLworCXtWSUFDUiwgQ1I1MCwgMHhGRiwgMHg2NX0sIHtWSUFDUiwgQ1I1NSwgMHgwRiwgMHgwOH0sCisJLypJR0EyIEhvcml6b250YWwgQmxhbmsgRW5kICovCisJe1ZJQUNSLCBDUjUzLCAweEZGLCAweDY1fSwge1ZJQUNSLCBDUjU0LCAweDM4LCAweDAwfSwKKwl7VklBQ1IsIENSNUQsIDB4NDAsIDB4NDB9LAorCS8qSUdBMiBIb3Jpem9udGFsIFRvdGFsIFNoYWRvdyAqLworCXtWSUFDUiwgQ1I2RCwgMHhGRiwgMHg3Rn0sIHtWSUFDUiwgQ1I3MSwgMHgwOCwgMHgwMH0sCisJLypJR0EyIEhvcml6b250YWwgQmxhbmsgRW5kIFNoYWRvdyAqLworCXtWSUFDUiwgQ1I2RSwgMHhGRiwgMHg4M30sCisJLypJR0EyIE9mZnNldCAqLworCXtWSUFDUiwgQ1I2NiwgMHhGRiwgMHhFMX0sIHtWSUFDUiwgQ1I2NywgMHgwMywgMHgwMH0sCisJIC8qVkNMSyovIHtWSUFTUiwgU1I0NiwgMHhGRiwgMHg4NX0sIHtWSUFTUiwgU1I0NywgMHhGRiwgMHg2Rn0KK307CisKKyNkZWZpbmUgTlVNX1RPVEFMX0s0MDBfTENEX1JFU184WDZfMTZYMTIgQVJSQVlfU0laRShLNDAwX0xDRF9SRVNfOFg2XzE2WDEyKQorCitzdHJ1Y3QgaW9fcmVnIEs0MDBfTENEX1JFU18xMFg3XzE2WDEyW10gPSB7CisJLypJR0EyIEhvcml6b250YWwgVG90YWwgKi8KKwl7VklBQ1IsIENSNTAsIDB4RkYsIDB4NjV9LCB7VklBQ1IsIENSNTUsIDB4MEYsIDB4MDh9LAorCS8qSUdBMiBIb3Jpem9udGFsIEJsYW5rIEVuZCAqLworCXtWSUFDUiwgQ1I1MywgMHhGRiwgMHg2NX0sIHtWSUFDUiwgQ1I1NCwgMHgzOCwgMHgwMH0sCisJe1ZJQUNSLCBDUjVELCAweDQwLCAweDQwfSwKKwkvKklHQTIgSG9yaXpvbnRhbCBUb3RhbCBTaGFkb3cgKi8KKwl7VklBQ1IsIENSNkQsIDB4RkYsIDB4QUJ9LCB7VklBQ1IsIENSNzEsIDB4MDgsIDB4MDB9LAorCS8qSUdBMiBIb3Jpem9udGFsIEJsYW5rIEVuZCBTaGFkb3cgKi8KKwl7VklBQ1IsIENSNkUsIDB4RkYsIDB4QUZ9LAorCS8qSUdBMiBPZmZzZXQgKi8KKwl7VklBQ1IsIENSNjYsIDB4RkYsIDB4RjB9LCB7VklBQ1IsIENSNjcsIDB4MDMsIDB4MDB9LAorCSAvKlZDTEsqLyB7VklBU1IsIFNSNDYsIDB4RkYsIDB4NDV9LCB7VklBU1IsIFNSNDcsIDB4RkYsIDB4NEF9Cit9OworCisjZGVmaW5lIE5VTV9UT1RBTF9LNDAwX0xDRF9SRVNfMTBYN18xNlgxMiBBUlJBWV9TSVpFKEs0MDBfTENEX1JFU18xMFg3XzE2WDEyKQorCitzdHJ1Y3QgaW9fcmVnIEs0MDBfTENEX1JFU18xMlgxMF8xNlgxMltdID0geworCS8qSUdBMiBIb3Jpem9udGFsIFRvdGFsICovCisJe1ZJQUNSLCBDUjUwLCAweEZGLCAweDdEfSwge1ZJQUNSLCBDUjU1LCAweDBGLCAweDA4fSwKKwkvKklHQTIgSG9yaXpvbnRhbCBCbGFuayBFbmQgKi8KKwl7VklBQ1IsIENSNTMsIDB4RkYsIDB4N0R9LCB7VklBQ1IsIENSNTQsIDB4MzgsIDB4MDB9LAorCXtWSUFDUiwgQ1I1RCwgMHg0MCwgMHg0MH0sCisJLypJR0EyIEhvcml6b250YWwgVG90YWwgU2hhZG93ICovCisJe1ZJQUNSLCBDUjZELCAweEZGLCAweEQwfSwge1ZJQUNSLCBDUjcxLCAweDA4LCAweDAwfSwKKwkvKklHQTIgSG9yaXpvbnRhbCBCbGFuayBFbmQgU2hhZG93ICovCisJe1ZJQUNSLCBDUjZFLCAweEZGLCAweEQ0fSwKKwkvKklHQTIgT2Zmc2V0ICovCisJe1ZJQUNSLCBDUjY2LCAweEZGLCAweEZBfSwge1ZJQUNSLCBDUjY3LCAweDAzLCAweDAwfSwKKwkgLypWQ0xLKi8ge1ZJQVNSLCBTUjQ2LCAweEZGLCAweDQ3fSwge1ZJQVNSLCBTUjQ3LCAweEZGLCAweDdDfQorfTsKKworI2RlZmluZSBOVU1fVE9UQUxfSzQwMF9MQ0RfUkVTXzEyWDEwXzE2WDEyIEFSUkFZX1NJWkUoSzQwMF9MQ0RfUkVTXzEyWDEwXzE2WDEyKQorCisvKiAgIFBhbmVsIDE0MDB4MTA1MCAgICovCitzdHJ1Y3QgaW9fcmVnIEs0MDBfTENEX1JFU182WDRfMTRYMTBbXSA9IHsKKwkvKiA2NDB4NDAwICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCS8qIElHQTIgSG9yaXpvbnRhbCBUb3RhbCAgICAgICAgICAgICovCisJe1ZJQUNSLCBDUjUwLCAweEZGLCAweDlEfSwge1ZJQUNSLCBDUjU1LCAweDBGLCAweDU2fSwKKwkvKiBJR0EyIEhvcml6b250YWwgQmxhbmsgRW5kICAgICAgICAqLworCXtWSUFDUiwgQ1I1MywgMHhGRiwgMHg5RH0sIHtWSUFDUiwgQ1I1NCwgMHgzOCwgMHg3NX0sCisJe1ZJQUNSLCBDUjVELCAweDQwLCAweDI0fSwKKwkvKiBJR0EyIEhvcml6b250YWwgVG90YWwgU2hhZG93ICAgICAqLworCXtWSUFDUiwgQ1I2RCwgMHhGRiwgMHg1Rn0sIHtWSUFDUiwgQ1I3MSwgMHgwOCwgMHg0NH0sCisJLyogSUdBMiBIb3Jpem9udGFsIEJsYW5rIEVuZCBTaGFkb3cgKi8KKwl7VklBQ1IsIENSNkUsIDB4RkYsIDB4NjN9LAorCS8qIElHQTIgT2Zmc2V0ICAgICAgICAgICAgICAgICAgICAgICovCisJe1ZJQUNSLCBDUjY2LCAweEZGLCAweEI0fSwge1ZJQUNSLCBDUjY3LCAweDAzLCAweDAwfSwKKwkvKiBWQ0xLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCXtWSUFTUiwgU1I0NiwgMHhGRiwgMHgwN30sIHtWSUFTUiwgU1I0NywgMHhGRiwgMHgxOX0KK307CisKKyNkZWZpbmUgTlVNX1RPVEFMX0s0MDBfTENEX1JFU182WDRfMTRYMTAgQVJSQVlfU0laRShLNDAwX0xDRF9SRVNfNlg0XzE0WDEwKQorCitzdHJ1Y3QgaW9fcmVnIEs0MDBfTENEX1JFU184WDZfMTRYMTBbXSA9IHsKKwkvKiA4MDB4NjAwICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCS8qIElHQTIgSG9yaXpvbnRhbCBUb3RhbCAgICAgICAgICAgICovCisJe1ZJQUNSLCBDUjUwLCAweEZGLCAweDlEfSwge1ZJQUNSLCBDUjU1LCAweDBGLCAweDU2fSwKKwkvKiBJR0EyIEhvcml6b250YWwgQmxhbmsgRW5kICAgICAgICAqLworCXtWSUFDUiwgQ1I1MywgMHhGRiwgMHg5RH0sIHtWSUFDUiwgQ1I1NCwgMHgzOCwgMHg3NX0sCisJe1ZJQUNSLCBDUjVELCAweDQwLCAweDI0fSwKKwkvKiBJR0EyIEhvcml6b250YWwgVG90YWwgU2hhZG93ICAgICAqLworCXtWSUFDUiwgQ1I2RCwgMHhGRiwgMHg3Rn0sIHtWSUFDUiwgQ1I3MSwgMHgwOCwgMHg0NH0sCisJLyogSUdBMiBIb3Jpem9udGFsIEJsYW5rIEVuZCBTaGFkb3cgKi8KKwl7VklBQ1IsIENSNkUsIDB4RkYsIDB4ODN9LAorCS8qIElHQTIgT2Zmc2V0ICAgICAgICAgICAgICAgICAgICAgICovCisJe1ZJQUNSLCBDUjY2LCAweEZGLCAweEJFfSwge1ZJQUNSLCBDUjY3LCAweDAzLCAweDAwfSwKKwkvKiBWQ0xLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCXtWSUFTUiwgU1I0NiwgMHhGRiwgMHgwN30sIHtWSUFTUiwgU1I0NywgMHhGRiwgMHgyMX0KK307CisKKyNkZWZpbmUgTlVNX1RPVEFMX0s0MDBfTENEX1JFU184WDZfMTRYMTAgQVJSQVlfU0laRShLNDAwX0xDRF9SRVNfOFg2XzE0WDEwKQorCitzdHJ1Y3QgaW9fcmVnIEs0MDBfTENEX1JFU18xMFg3XzE0WDEwW10gPSB7CisJLyogMTAyNHg3NjggICAgICAgICAgICAgICAgICAgICAgICAgKi8KKwkvKiBJR0EyIEhvcml6b250YWwgVG90YWwgICAgICAgICAgICAqLworCXtWSUFDUiwgQ1I1MCwgMHhGRiwgMHg5RH0sIHtWSUFDUiwgQ1I1NSwgMHgwRiwgMHg1Nn0sCisJLyogSUdBMiBIb3Jpem9udGFsIEJsYW5rIEVuZCAgICAgICAgKi8KKwl7VklBQ1IsIENSNTMsIDB4RkYsIDB4OUR9LCB7VklBQ1IsIENSNTQsIDB4MzgsIDB4NzV9LAorCXtWSUFDUiwgQ1I1RCwgMHg0MCwgMHgyNH0sCisJLyogSUdBMiBIb3Jpem9udGFsIFRvdGFsIFNoYWRvdyAgICAgKi8KKwl7VklBQ1IsIENSNkQsIDB4RkYsIDB4QTN9LCB7VklBQ1IsIENSNzEsIDB4MDgsIDB4NDR9LAorCS8qIElHQTIgSG9yaXpvbnRhbCBCbGFuayBFbmQgU2hhZG93ICovCisJe1ZJQUNSLCBDUjZFLCAweEZGLCAweEE3fSwKKwkvKiBJR0EyIE9mZnNldCAgICAgICAgICAgICAgICAgICAgICAqLworCXtWSUFDUiwgQ1I2NiwgMHhGRiwgMHhDM30sIHtWSUFDUiwgQ1I2NywgMHgwMywgMHgwNH0sCisJLyogVkNMSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKwl7VklBU1IsIFNSNDYsIDB4RkYsIDB4MDV9LCB7VklBU1IsIFNSNDcsIDB4RkYsIDB4MUV9Cit9OworCisjZGVmaW5lIE5VTV9UT1RBTF9LNDAwX0xDRF9SRVNfMTBYN18xNFgxMCBBUlJBWV9TSVpFKEs0MDBfTENEX1JFU18xMFg3XzE0WDEwKQorCitzdHJ1Y3QgaW9fcmVnIEs0MDBfTENEX1JFU18xMlgxMF8xNFgxMFtdID0geworCS8qIDEyODB4NzY4LCAxMjgweDk2MCwgMTI4MHgxMDI0ICAgICovCisJLyogSUdBMiBIb3Jpem9udGFsIFRvdGFsICAgICAgICAgICAgKi8KKwl7VklBQ1IsIENSNTAsIDB4RkYsIDB4OTd9LCB7VklBQ1IsIENSNTUsIDB4MEYsIDB4NTZ9LAorCS8qIElHQTIgSG9yaXpvbnRhbCBCbGFuayBFbmQgICAgICAgICovCisJe1ZJQUNSLCBDUjUzLCAweEZGLCAweDk3fSwge1ZJQUNSLCBDUjU0LCAweDM4LCAweDc1fSwKKwl7VklBQ1IsIENSNUQsIDB4NDAsIDB4MjR9LAorCS8qIElHQTIgSG9yaXpvbnRhbCBUb3RhbCBTaGFkb3cgICAgICovCisJe1ZJQUNSLCBDUjZELCAweEZGLCAweENFfSwge1ZJQUNSLCBDUjcxLCAweDA4LCAweDQ0fSwKKwkvKiBJR0EyIEhvcml6b250YWwgQmxhbmsgRW5kIFNoYWRvdyAqLworCXtWSUFDUiwgQ1I2RSwgMHhGRiwgMHhEMn0sCisJLyogSUdBMiBPZmZzZXQgICAgICAgICAgICAgICAgICAgICAgKi8KKwl7VklBQ1IsIENSNjYsIDB4RkYsIDB4Qzl9LCB7VklBQ1IsIENSNjcsIDB4MDMsIDB4MDR9LAorCS8qIFZDTEsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisJe1ZJQVNSLCBTUjQ2LCAweEZGLCAweDg0fSwge1ZJQVNSLCBTUjQ3LCAweEZGLCAweDc5fQorfTsKKworI2RlZmluZSBOVU1fVE9UQUxfSzQwMF9MQ0RfUkVTXzEyWDEwXzE0WDEwIEFSUkFZX1NJWkUoSzQwMF9MQ0RfUkVTXzEyWDEwXzE0WDEwKQorCisvKiArKysrKysgSzQwMCArKysrKysgKi8KKy8qICAgUGFuZWwgMTM2Nng3NjggICAqLworc3RydWN0IGlvX3JlZyBLNDAwX0xDRF9SRVNfNlg0XzEzNjZYN1tdID0geworCS8qIDY0MHg0MDAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisJLyogSUdBMiBIb3Jpem9udGFsIFRvdGFsICAgICAgICAgICAgKi8KKwl7VklBQ1IsIENSNTAsIDB4RkYsIDB4NDd9LCB7VklBQ1IsIENSNTUsIDB4MEYsIDB4MzV9LAorCS8qIElHQTIgSG9yaXpvbnRhbCBCbGFuayBFbmQgICAgICAgICovCisJe1ZJQUNSLCBDUjUzLCAweEZGLCAweDQ3fSwge1ZJQUNSLCBDUjU0LCAweDM4LCAweDJCfSwKKwl7VklBQ1IsIENSNUQsIDB4NDAsIDB4MTN9LAorCS8qIElHQTIgSG9yaXpvbnRhbCBUb3RhbCBTaGFkb3cgICAgICovCisJe1ZJQUNSLCBDUjZELCAweEZGLCAweDYwfSwge1ZJQUNSLCBDUjcxLCAweDA4LCAweDIzfSwKKwkvKiBJR0EyIEhvcml6b250YWwgQmxhbmsgRW5kIFNoYWRvdyAqLworCXtWSUFDUiwgQ1I2RSwgMHhGRiwgMHg2NH0sCisJLyogSUdBMiBPZmZzZXQgICAgICAgICAgICAgICAgICAgICAgKi8KKwl7VklBQ1IsIENSNjYsIDB4RkYsIDB4OEN9LCB7VklBQ1IsIENSNjcsIDB4MDMsIDB4MDB9LAorCS8qIFZDTEsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisJe1ZJQVNSLCBTUjQ2LCAweEZGLCAweDg3fSwge1ZJQVNSLCBTUjQ3LCAweEZGLCAweDRDfQorfTsKKworI2RlZmluZSBOVU1fVE9UQUxfSzQwMF9MQ0RfUkVTXzZYNF8xMzY2WDcgQVJSQVlfU0laRShLNDAwX0xDRF9SRVNfNlg0XzEzNjZYNykKKworc3RydWN0IGlvX3JlZyBLNDAwX0xDRF9SRVNfN1g0XzEzNjZYN1tdID0geworCS8qIElHQTIgSG9yaXpvbnRhbCBUb3RhbCAgICAgICAgICAgICovCisJe1ZJQUNSLCBDUjUwLCAweEZGLCAweDNCfSwge1ZJQUNSLCBDUjU1LCAweDBGLCAweDM1fSwKKwkvKiBJR0EyIEhvcml6b250YWwgQmxhbmsgRW5kICAgICAgICAqLworCXtWSUFDUiwgQ1I1MywgMHhGRiwgMHgzQn0sIHtWSUFDUiwgQ1I1NCwgMHgzOCwgMHgyQn0sCisJe1ZJQUNSLCBDUjVELCAweDQwLCAweDEzfSwKKwkvKiBJR0EyIEhvcml6b250YWwgVG90YWwgU2hhZG93ICAgICAqLworCXtWSUFDUiwgQ1I2RCwgMHhGRiwgMHg3MX0sIHtWSUFDUiwgQ1I3MSwgMHgwOCwgMHgyM30sCisJLyogSUdBMiBIb3Jpem9udGFsIEJsYW5rIEVuZCBTaGFkb3cgKi8KKwl7VklBQ1IsIENSNkUsIDB4RkYsIDB4NzV9LAorCS8qIElHQTIgT2Zmc2V0ICAgICAgICAgICAgICAgICAgICAgICovCisJe1ZJQUNSLCBDUjY2LCAweEZGLCAweDk2fSwge1ZJQUNSLCBDUjY3LCAweDAzLCAweDAwfSwKKwkvKiBWQ0xLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCXtWSUFTUiwgU1I0NiwgMHhGRiwgMHgwNX0sIHtWSUFTUiwgU1I0NywgMHhGRiwgMHgxMH0KK307CisKKyNkZWZpbmUgTlVNX1RPVEFMX0s0MDBfTENEX1JFU183WDRfMTM2Nlg3IEFSUkFZX1NJWkUoSzQwMF9MQ0RfUkVTXzdYNF8xMzY2WDcpCisKK3N0cnVjdCBpb19yZWcgSzQwMF9MQ0RfUkVTXzhYNl8xMzY2WDdbXSA9IHsKKwkvKiA4MDB4NjAwICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCS8qIElHQTIgSG9yaXpvbnRhbCBUb3RhbCAgICAgICAgICAgICovCisJe1ZJQUNSLCBDUjUwLCAweEZGLCAweDM3fSwge1ZJQUNSLCBDUjU1LCAweDBGLCAweDM1fSwKKwkvKiBJR0EyIEhvcml6b250YWwgQmxhbmsgRW5kICAgICAgICAqLworCXtWSUFDUiwgQ1I1MywgMHhGRiwgMHgzN30sIHtWSUFDUiwgQ1I1NCwgMHgzOCwgMHgyQn0sCisJe1ZJQUNSLCBDUjVELCAweDQwLCAweDEzfSwKKwkvKiBJR0EyIEhvcml6b250YWwgVG90YWwgU2hhZG93ICAgICAqLworCXtWSUFDUiwgQ1I2RCwgMHhGRiwgMHg3RX0sIHtWSUFDUiwgQ1I3MSwgMHgwOCwgMHgyM30sCisJLyogSUdBMiBIb3Jpem9udGFsIEJsYW5rIEVuZCBTaGFkb3cgKi8KKwl7VklBQ1IsIENSNkUsIDB4RkYsIDB4ODJ9LAorCS8qIElHQTIgT2Zmc2V0ICAgICAgICAgICAgICAgICAgICAgICovCisJe1ZJQUNSLCBDUjY2LCAweEZGLCAweDhDfSwge1ZJQUNSLCBDUjY3LCAweDAzLCAweDAwfSwKKwkvKiBWQ0xLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCXtWSUFTUiwgU1I0NiwgMHhGRiwgMHg4NH0sIHtWSUFTUiwgU1I0NywgMHhGRiwgMHhCOX0KK307CisKKyNkZWZpbmUgTlVNX1RPVEFMX0s0MDBfTENEX1JFU184WDZfMTM2Nlg3IEFSUkFZX1NJWkUoSzQwMF9MQ0RfUkVTXzhYNl8xMzY2WDcpCisKK3N0cnVjdCBpb19yZWcgSzQwMF9MQ0RfUkVTXzEwWDdfMTM2Nlg3W10gPSB7CisJLyogMTAyNHg3NjggICAgICAgICAgICAgICAgICAgICAgICAgKi8KKwkvKiBJR0EyIEhvcml6b250YWwgVG90YWwgICAgICAgICAgICAqLworCXtWSUFDUiwgQ1I1MCwgMHhGRiwgMHg5RH0sIHtWSUFDUiwgQ1I1NSwgMHgwRiwgMHg1Nn0sCisJLyogSUdBMiBIb3Jpem9udGFsIEJsYW5rIEVuZCAgICAgICAgKi8KKwl7VklBQ1IsIENSNTMsIDB4RkYsIDB4OUR9LCB7VklBQ1IsIENSNTQsIDB4MzgsIDB4NzV9LAorCXtWSUFDUiwgQ1I1RCwgMHg0MCwgMHgyNH0sCisJLyogSUdBMiBIb3Jpem9udGFsIFRvdGFsIFNoYWRvdyAgICAgKi8KKwl7VklBQ1IsIENSNkQsIDB4RkYsIDB4QTN9LCB7VklBQ1IsIENSNzEsIDB4MDgsIDB4NDR9LAorCS8qIElHQTIgSG9yaXpvbnRhbCBCbGFuayBFbmQgU2hhZG93ICovCisJe1ZJQUNSLCBDUjZFLCAweEZGLCAweEE3fSwKKwkvKiBJR0EyIE9mZnNldCAgICAgICAgICAgICAgICAgICAgICAqLworCXtWSUFDUiwgQ1I2NiwgMHhGRiwgMHhDM30sIHtWSUFDUiwgQ1I2NywgMHgwMywgMHgwNH0sCisJLyogVkNMSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKwl7VklBU1IsIFNSNDYsIDB4RkYsIDB4MDV9LCB7VklBU1IsIFNSNDcsIDB4RkYsIDB4MUV9Cit9OworCisjZGVmaW5lIE5VTV9UT1RBTF9LNDAwX0xDRF9SRVNfMTBYN18xMzY2WDcgQVJSQVlfU0laRShLNDAwX0xDRF9SRVNfMTBYN18xMzY2WDcpCisKK3N0cnVjdCBpb19yZWcgSzQwMF9MQ0RfUkVTXzEyWDEwXzEzNjZYN1tdID0geworCS8qIDEyODB4NzY4LCAxMjgweDk2MCwgMTI4MHgxMDI0ICAgICovCisJLyogSUdBMiBIb3Jpem9udGFsIFRvdGFsICAgICAgICAgICAgKi8KKwl7VklBQ1IsIENSNTAsIDB4RkYsIDB4OTd9LCB7VklBQ1IsIENSNTUsIDB4MEYsIDB4NTZ9LAorCS8qIElHQTIgSG9yaXpvbnRhbCBCbGFuayBFbmQgICAgICAgICovCisJe1ZJQUNSLCBDUjUzLCAweEZGLCAweDk3fSwge1ZJQUNSLCBDUjU0LCAweDM4LCAweDc1fSwKKwl7VklBQ1IsIENSNUQsIDB4NDAsIDB4MjR9LAorCS8qIElHQTIgSG9yaXpvbnRhbCBUb3RhbCBTaGFkb3cgICAgICovCisJe1ZJQUNSLCBDUjZELCAweEZGLCAweENFfSwge1ZJQUNSLCBDUjcxLCAweDA4LCAweDQ0fSwKKwkvKiBJR0EyIEhvcml6b250YWwgQmxhbmsgRW5kIFNoYWRvdyAqLworCXtWSUFDUiwgQ1I2RSwgMHhGRiwgMHhEMn0sCisJLyogSUdBMiBPZmZzZXQgICAgICAgICAgICAgICAgICAgICAgKi8KKwl7VklBQ1IsIENSNjYsIDB4RkYsIDB4Qzl9LCB7VklBQ1IsIENSNjcsIDB4MDMsIDB4MDR9LAorCS8qIFZDTEsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisJe1ZJQVNSLCBTUjQ2LCAweEZGLCAweDg0fSwge1ZJQVNSLCBTUjQ3LCAweEZGLCAweDc5fQorfTsKKworI2RlZmluZSBOVU1fVE9UQUxfSzQwMF9MQ0RfUkVTXzEyWDEwXzEzNjZYN1wKKwkJCUFSUkFZX1NJWkUoSzQwMF9MQ0RfUkVTXzEyWDEwXzEzNjZYNykKKworLyogKysrKysrIEs0MDAgKysrKysrICovCisvKiAgIFBhbmVsIDEyODB4MTAyNCAgICovCitzdHJ1Y3QgaW9fcmVnIEs0MDBfTENEX1JFU182WDRfMTJYMTBbXSA9IHsKKwkvKklHQTIgSG9yaXpvbnRhbCBUb3RhbCAqLworCXtWSUFDUiwgQ1I1MCwgMHhGRiwgMHg5RH0sIHtWSUFDUiwgQ1I1NSwgMHgwRiwgMHg0Nn0sCisJLypJR0EyIEhvcml6b250YWwgQmxhbmsgRW5kICovCisJe1ZJQUNSLCBDUjUzLCAweEZGLCAweDlEfSwge1ZJQUNSLCBDUjU0LCAweDM4LCAweDc0fSwKKwl7VklBQ1IsIENSNUQsIDB4NDAsIDB4MUN9LAorCS8qSUdBMiBIb3Jpem9udGFsIFRvdGFsIFNoYWRvdyAqLworCXtWSUFDUiwgQ1I2RCwgMHhGRiwgMHg1Rn0sIHtWSUFDUiwgQ1I3MSwgMHgwOCwgMHgzNH0sCisJLypJR0EyIEhvcml6b250YWwgQmxhbmsgRW5kIFNoYWRvdyAqLworCXtWSUFDUiwgQ1I2RSwgMHhGRiwgMHg2M30sCisJLypJR0EyIE9mZnNldCAqLworCXtWSUFDUiwgQ1I2NiwgMHhGRiwgMHhBQX0sIHtWSUFDUiwgQ1I2NywgMHgwMywgMHgwMH0sCisJIC8qVkNMSyovIHtWSUFTUiwgU1I0NiwgMHhGRiwgMHgwN30sIHtWSUFTUiwgU1I0NywgMHhGRiwgMHgxOX0KK307CisKKyNkZWZpbmUgTlVNX1RPVEFMX0s0MDBfTENEX1JFU182WDRfMTJYMTAgQVJSQVlfU0laRShLNDAwX0xDRF9SRVNfNlg0XzEyWDEwKQorCitzdHJ1Y3QgaW9fcmVnIEs0MDBfTENEX1JFU183WDRfMTJYMTBbXSA9IHsKKwkvKklHQTIgSG9yaXpvbnRhbCBUb3RhbCAqLworCXtWSUFDUiwgQ1I1MCwgMHhGRiwgMHg5RH0sIHtWSUFDUiwgQ1I1NSwgMHgwRiwgMHg0Nn0sCisJLypJR0EyIEhvcml6b250YWwgQmxhbmsgRW5kICovCisJe1ZJQUNSLCBDUjUzLCAweEZGLCAweDlEfSwge1ZJQUNSLCBDUjU0LCAweDM4LCAweDc0fSwKKwl7VklBQ1IsIENSNUQsIDB4NDAsIDB4MUN9LAorCS8qSUdBMiBIb3Jpem9udGFsIFRvdGFsIFNoYWRvdyAqLworCXtWSUFDUiwgQ1I2RCwgMHhGRiwgMHg2OH0sIHtWSUFDUiwgQ1I3MSwgMHgwOCwgMHgzNH0sCisJLypJR0EyIEhvcml6b250YWwgQmxhbmsgRW5kIFNoYWRvdyAqLworCXtWSUFDUiwgQ1I2RSwgMHhGRiwgMHg2Q30sCisJLypJR0EyIE9mZnNldCAqLworCXtWSUFDUiwgQ1I2NiwgMHhGRiwgMHhBOH0sIHtWSUFDUiwgQ1I2NywgMHgwMywgMHgwMH0sCisJIC8qVkNMSyovIHtWSUFTUiwgU1I0NiwgMHhGRiwgMHg4N30sIHtWSUFTUiwgU1I0NywgMHhGRiwgMHhFRH0KK307CisKKyNkZWZpbmUgTlVNX1RPVEFMX0s0MDBfTENEX1JFU183WDRfMTJYMTAgQVJSQVlfU0laRShLNDAwX0xDRF9SRVNfN1g0XzEyWDEwKQorCitzdHJ1Y3QgaW9fcmVnIEs0MDBfTENEX1JFU184WDZfMTJYMTBbXSA9IHsKKwkvKklHQTIgSG9yaXpvbnRhbCBUb3RhbCAqLworCXtWSUFDUiwgQ1I1MCwgMHhGRiwgMHg5RH0sIHtWSUFDUiwgQ1I1NSwgMHgwRiwgMHg0Nn0sCisJLypJR0EyIEhvcml6b250YWwgQmxhbmsgRW5kICovCisJe1ZJQUNSLCBDUjUzLCAweEZGLCAweDlEfSwge1ZJQUNSLCBDUjU0LCAweDM4LCAweDc0fSwKKwl7VklBQ1IsIENSNUQsIDB4NDAsIDB4MUN9LAorCS8qSUdBMiBIb3Jpem9udGFsIFRvdGFsIFNoYWRvdyAqLworCXtWSUFDUiwgQ1I2RCwgMHhGRiwgMHg3Rn0sIHtWSUFDUiwgQ1I3MSwgMHgwOCwgMHgzNH0sCisJLypJR0EyIEhvcml6b250YWwgQmxhbmsgRW5kIFNoYWRvdyAqLworCXtWSUFDUiwgQ1I2RSwgMHhGRiwgMHg4M30sCisJLypJR0EyIE9mZnNldCAqLworCXtWSUFDUiwgQ1I2NiwgMHhGRiwgMHhCRX0sIHtWSUFDUiwgQ1I2NywgMHgwMywgMHgwMH0sCisJIC8qVkNMSyovIHtWSUFTUiwgU1I0NiwgMHhGRiwgMHgwN30sIHtWSUFTUiwgU1I0NywgMHhGRiwgMHgyMX0KK307CisKKyNkZWZpbmUgTlVNX1RPVEFMX0s0MDBfTENEX1JFU184WDZfMTJYMTAgQVJSQVlfU0laRShLNDAwX0xDRF9SRVNfOFg2XzEyWDEwKQorCitzdHJ1Y3QgaW9fcmVnIEs0MDBfTENEX1JFU18xMFg3XzEyWDEwW10gPSB7CisJLypJR0EyIEhvcml6b250YWwgVG90YWwgKi8KKwl7VklBQ1IsIENSNTAsIDB4RkYsIDB4OUR9LCB7VklBQ1IsIENSNTUsIDB4MEYsIDB4NDZ9LAorCS8qSUdBMiBIb3Jpem9udGFsIEJsYW5rIEVuZCAqLworCXtWSUFDUiwgQ1I1MywgMHhGRiwgMHg5RH0sIHtWSUFDUiwgQ1I1NCwgMHgzOCwgMHg3NH0sCisJe1ZJQUNSLCBDUjVELCAweDQwLCAweDFDfSwKKwkvKklHQTIgSG9yaXpvbnRhbCBUb3RhbCBTaGFkb3cgKi8KKwl7VklBQ1IsIENSNkQsIDB4RkYsIDB4QTN9LCB7VklBQ1IsIENSNzEsIDB4MDgsIDB4MzR9LAorCS8qSUdBMiBIb3Jpem9udGFsIEJsYW5rIEVuZCBTaGFkb3cgKi8KKwl7VklBQ1IsIENSNkUsIDB4RkYsIDB4QTd9LAorCS8qSUdBMiBPZmZzZXQgKi8KKwl7VklBQ1IsIENSNjYsIDB4RkYsIDB4QkV9LCB7VklBQ1IsIENSNjcsIDB4MDMsIDB4MDR9LAorCSAvKlZDTEsqLyB7VklBU1IsIFNSNDYsIDB4RkYsIDB4MDV9LCB7VklBU1IsIFNSNDcsIDB4RkYsIDB4MUV9Cit9OworCisjZGVmaW5lIE5VTV9UT1RBTF9LNDAwX0xDRF9SRVNfMTBYN18xMlgxMCBBUlJBWV9TSVpFKEs0MDBfTENEX1JFU18xMFg3XzEyWDEwKQorCisvKiArKysrKysgSzQwMCArKysrKysgKi8KKy8qICAgUGFuZWwgMTAyNHg3NjggICAgKi8KK3N0cnVjdCBpb19yZWcgSzQwMF9MQ0RfUkVTXzZYNF8xMFg3W10gPSB7CisJLypJR0EyIEhvcml6b250YWwgVG90YWwgKi8KKwl7VklBQ1IsIENSNTAsIDB4RkYsIDB4NDd9LCB7VklBQ1IsIENSNTUsIDB4MEYsIDB4MzV9LAorCS8qSUdBMiBIb3Jpem9udGFsIEJsYW5rIEVuZCAqLworCXtWSUFDUiwgQ1I1MywgMHhGRiwgMHg0N30sIHtWSUFDUiwgQ1I1NCwgMHgzOCwgMHgyQn0sCisJe1ZJQUNSLCBDUjVELCAweDQwLCAweDEzfSwKKwkvKklHQTIgSG9yaXpvbnRhbCBUb3RhbCBTaGFkb3cgKi8KKwl7VklBQ1IsIENSNkQsIDB4RkYsIDB4NjB9LCB7VklBQ1IsIENSNzEsIDB4MDgsIDB4MjN9LAorCS8qSUdBMiBIb3Jpem9udGFsIEJsYW5rIEVuZCBTaGFkb3cgKi8KKwl7VklBQ1IsIENSNkUsIDB4RkYsIDB4NjR9LAorCS8qSUdBMiBPZmZzZXQgKi8KKwl7VklBQ1IsIENSNjYsIDB4RkYsIDB4OEN9LCB7VklBQ1IsIENSNjcsIDB4MDMsIDB4MDB9LAorCSAvKlZDTEsqLyB7VklBU1IsIFNSNDYsIDB4RkYsIDB4ODd9LCB7VklBU1IsIFNSNDcsIDB4RkYsIDB4NEN9Cit9OworCisjZGVmaW5lIE5VTV9UT1RBTF9LNDAwX0xDRF9SRVNfNlg0XzEwWDcgQVJSQVlfU0laRShLNDAwX0xDRF9SRVNfNlg0XzEwWDcpCisKK3N0cnVjdCBpb19yZWcgSzQwMF9MQ0RfUkVTXzdYNF8xMFg3W10gPSB7CisJLypJR0EyIEhvcml6b250YWwgVG90YWwgKi8KKwl7VklBQ1IsIENSNTAsIDB4RkYsIDB4M0J9LCB7VklBQ1IsIENSNTUsIDB4MEYsIDB4MzV9LAorCS8qSUdBMiBIb3Jpem9udGFsIEJsYW5rIEVuZCAqLworCXtWSUFDUiwgQ1I1MywgMHhGRiwgMHgzQn0sIHtWSUFDUiwgQ1I1NCwgMHgzOCwgMHgyQn0sCisJe1ZJQUNSLCBDUjVELCAweDQwLCAweDEzfSwKKwkvKklHQTIgSG9yaXpvbnRhbCBUb3RhbCBTaGFkb3cgKi8KKwl7VklBQ1IsIENSNkQsIDB4RkYsIDB4NzF9LCB7VklBQ1IsIENSNzEsIDB4MDgsIDB4MjN9LAorCS8qSUdBMiBIb3Jpem9udGFsIEJsYW5rIEVuZCBTaGFkb3cgKi8KKwl7VklBQ1IsIENSNkUsIDB4RkYsIDB4NzV9LAorCS8qSUdBMiBPZmZzZXQgKi8KKwl7VklBQ1IsIENSNjYsIDB4RkYsIDB4OTZ9LCB7VklBQ1IsIENSNjcsIDB4MDMsIDB4MDB9LAorCSAvKlZDTEsqLyB7VklBU1IsIFNSNDYsIDB4RkYsIDB4MDV9LCB7VklBU1IsIFNSNDcsIDB4RkYsIDB4MTB9Cit9OworCisjZGVmaW5lIE5VTV9UT1RBTF9LNDAwX0xDRF9SRVNfN1g0XzEwWDcgQVJSQVlfU0laRShLNDAwX0xDRF9SRVNfN1g0XzEwWDcpCisKK3N0cnVjdCBpb19yZWcgSzQwMF9MQ0RfUkVTXzhYNl8xMFg3W10gPSB7CisJLypJR0EyIEhvcml6b250YWwgVG90YWwgKi8KKwl7VklBQ1IsIENSNTAsIDB4RkYsIDB4Mzd9LCB7VklBQ1IsIENSNTUsIDB4MEYsIDB4MzV9LAorCS8qSUdBMiBIb3Jpem9udGFsIEJsYW5rIEVuZCAqLworCXtWSUFDUiwgQ1I1MywgMHhGRiwgMHgzN30sIHtWSUFDUiwgQ1I1NCwgMHgzOCwgMHgyQn0sCisJe1ZJQUNSLCBDUjVELCAweDQwLCAweDEzfSwKKwkvKklHQTIgSG9yaXpvbnRhbCBUb3RhbCBTaGFkb3cgKi8KKwl7VklBQ1IsIENSNkQsIDB4RkYsIDB4N0V9LCB7VklBQ1IsIENSNzEsIDB4MDgsIDB4MjN9LAorCS8qSUdBMiBIb3Jpem9udGFsIEJsYW5rIEVuZCBTaGFkb3cgKi8KKwl7VklBQ1IsIENSNkUsIDB4RkYsIDB4ODJ9LAorCS8qSUdBMiBPZmZzZXQgKi8KKwl7VklBQ1IsIENSNjYsIDB4RkYsIDB4OEN9LCB7VklBQ1IsIENSNjcsIDB4MDMsIDB4MDB9LAorCSAvKlZDTEsqLyB7VklBU1IsIFNSNDYsIDB4RkYsIDB4ODR9LCB7VklBU1IsIFNSNDcsIDB4RkYsIDB4Qjl9Cit9OworCisjZGVmaW5lIE5VTV9UT1RBTF9LNDAwX0xDRF9SRVNfOFg2XzEwWDcgQVJSQVlfU0laRShLNDAwX0xDRF9SRVNfOFg2XzEwWDcpCisKKy8qICsrKysrKyBLNDAwICsrKysrKyAqLworLyogICBQYW5lbCA4MDB4NjAwICAgICAqLworc3RydWN0IGlvX3JlZyBLNDAwX0xDRF9SRVNfNlg0XzhYNltdID0geworCS8qSUdBMiBIb3Jpem9udGFsIFRvdGFsICovCisJe1ZJQUNSLCBDUjUwLCAweEZGLCAweDFBfSwge1ZJQUNSLCBDUjU1LCAweDBGLCAweDM0fSwKKwkvKklHQTIgSG9yaXpvbnRhbCBCbGFuayBFbmQgKi8KKwl7VklBQ1IsIENSNTMsIDB4RkYsIDB4MUF9LCB7VklBQ1IsIENSNTQsIDB4MzgsIDB4RTN9LAorCXtWSUFDUiwgQ1I1RCwgMHg0MCwgMHgxMn0sCisJLypJR0EyIEhvcml6b250YWwgVG90YWwgU2hhZG93ICovCisJe1ZJQUNSLCBDUjZELCAweEZGLCAweDVGfSwge1ZJQUNSLCBDUjcxLCAweDA4LCAweDIyfSwKKwkvKklHQTIgSG9yaXpvbnRhbCBCbGFuayBFbmQgU2hhZG93ICovCisJe1ZJQUNSLCBDUjZFLCAweEZGLCAweDYzfSwKKwkvKklHQTIgT2Zmc2V0ICovCisJe1ZJQUNSLCBDUjY2LCAweEZGLCAweDZFfSwge1ZJQUNSLCBDUjY3LCAweDAzLCAweDAwfSwKKwkgLypWQ0xLKi8ge1ZJQVNSLCBTUjQ2LCAweEZGLCAweDg2fSwge1ZJQVNSLCBTUjQ3LCAweEZGLCAweEIzfQorfTsKKworI2RlZmluZSBOVU1fVE9UQUxfSzQwMF9MQ0RfUkVTXzZYNF84WDYgQVJSQVlfU0laRShLNDAwX0xDRF9SRVNfNlg0XzhYNikKKworc3RydWN0IGlvX3JlZyBLNDAwX0xDRF9SRVNfN1g0XzhYNltdID0geworCS8qSUdBMiBIb3Jpem9udGFsIFRvdGFsICovCisJe1ZJQUNSLCBDUjUwLCAweEZGLCAweDFGfSwge1ZJQUNSLCBDUjU1LCAweDBGLCAweDM0fSwKKwkvKklHQTIgSG9yaXpvbnRhbCBCbGFuayBFbmQgKi8KKwl7VklBQ1IsIENSNTMsIDB4RkYsIDB4MUZ9LCB7VklBQ1IsIENSNTQsIDB4MzgsIDB4RTN9LAorCXtWSUFDUiwgQ1I1RCwgMHg0MCwgMHgxMn0sCisJLypJR0EyIEhvcml6b250YWwgVG90YWwgU2hhZG93ICovCisJe1ZJQUNSLCBDUjZELCAweEZGLCAweDdGfSwge1ZJQUNSLCBDUjcxLCAweDA4LCAweDIyfSwKKwkvKklHQTIgSG9yaXpvbnRhbCBCbGFuayBFbmQgU2hhZG93ICovCisJe1ZJQUNSLCBDUjZFLCAweEZGLCAweDgzfSwKKwkvKklHQTIgT2Zmc2V0ICovCisJe1ZJQUNSLCBDUjY2LCAweEZGLCAweDc4fSwge1ZJQUNSLCBDUjY3LCAweDAzLCAweDAwfSwKKwkgLypWQ0xLKi8ge1ZJQVNSLCBTUjQ2LCAweEZGLCAweEM0fSwge1ZJQVNSLCBTUjQ3LCAweEZGLCAweDU5fQorfTsKKworI2RlZmluZSBOVU1fVE9UQUxfSzQwMF9MQ0RfUkVTXzdYNF84WDYgQVJSQVlfU0laRShLNDAwX0xDRF9SRVNfN1g0XzhYNikKKworI2VuZGlmIC8qIF9fTENEVEJMX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby92aWEvc2hhcmUuaCBiL2RyaXZlcnMvdmlkZW8vdmlhL3NoYXJlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmUxMjU0ZAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdmlkZW8vdmlhL3NoYXJlLmgKQEAgLTAsMCArMSwxMTA1IEBACisvKgorICogQ29weXJpZ2h0IDE5OTgtMjAwOCBWSUEgVGVjaG5vbG9naWVzLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgMjAwMS0yMDA4IFMzIEdyYXBoaWNzLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKKyAqIGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRJRVMgT1IgUkVQUkVTRU5UQVRJT05TOyB3aXRob3V0IGV2ZW4KKyAqIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UuU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogZm9yIG1vcmUgZGV0YWlscy4KKworICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLAorICogNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisjaWZuZGVmIF9fU0hBUkVfSF9fCisjZGVmaW5lIF9fU0hBUkVfSF9fCisKKy8qIERlZmluZSBSZXR1cm4gVmFsdWUgKi8KKyNkZWZpbmUgRkFJTCAgICAgICAgLTEKKyNkZWZpbmUgT0sgICAgICAgICAgMQorCisjaWZuZGVmIE5VTEwKKyNkZWZpbmUgTlVMTCAwCisjZW5kaWYKKworLyogRGVmaW5lIEJpdCBGaWVsZCAqLworI2RlZmluZSBCSVQwICAgIDB4MDEKKyNkZWZpbmUgQklUMSAgICAweDAyCisjZGVmaW5lIEJJVDIgICAgMHgwNAorI2RlZmluZSBCSVQzICAgIDB4MDgKKyNkZWZpbmUgQklUNCAgICAweDEwCisjZGVmaW5lIEJJVDUgICAgMHgyMAorI2RlZmluZSBCSVQ2ICAgIDB4NDAKKyNkZWZpbmUgQklUNyAgICAweDgwCisKKy8qIFZpZGVvIE1lbW9yeSBTaXplICovCisjZGVmaW5lIFZJREVPX01FTU9SWV9TSVpFXzE2TSAgICAweDEwMDAwMDAKKworLyogRGVmaW5pdGlvbiBNb2RlIEluZGV4CisqLworI2RlZmluZSAgICAgVklBX1JFU182NDBYNDgwICAgICAgICAgICAgICAgICAJMAorI2RlZmluZSAgICAgVklBX1JFU184MDBYNjAwICAgICAgICAgICAgICAgICAJMQorI2RlZmluZSAgICAgVklBX1JFU18xMDI0WDc2OCAgICAgICAgICAgICAgICAJMgorI2RlZmluZSAgICAgVklBX1JFU18xMTUyWDg2NCAgICAgICAgICAgICAgICAJMworI2RlZmluZSAgICAgVklBX1JFU18xMjgwWDEwMjQgICAgICAgICAgICAgICAJNAorI2RlZmluZSAgICAgVklBX1JFU18xNjAwWDEyMDAgICAgICAgICAgICAgICAJNQorI2RlZmluZSAgICAgVklBX1JFU18xNDQwWDEwNTAgICAgICAgICAgICAgICAJNgorI2RlZmluZSAgICAgVklBX1JFU18xMjgwWDc2OCAgICAgICAgICAgICAgICAJNworI2RlZmluZSAgICAgVklBX1JFU18xMjgwWDk2MCAgICAgICAgICAgICAgICAJOAorI2RlZmluZSAgICAgVklBX1JFU18xOTIwWDE0NDAgICAgICAgICAgICAgICAJOQorI2RlZmluZSAgICAgVklBX1JFU184NDhYNDgwICAgICAgICAgICAgICAgICAJMTAKKyNkZWZpbmUgICAgIFZJQV9SRVNfMTQwMFgxMDUwICAgICAgICAgICAgICAgCTExCisjZGVmaW5lICAgICBWSUFfUkVTXzcyMFg0ODAgICAgICAgICAgICAgICAgIAkxMgorI2RlZmluZSAgICAgVklBX1JFU183MjBYNTc2ICAgICAgICAgICAgICAgICAJMTMKKyNkZWZpbmUgICAgIFZJQV9SRVNfMTAyNFg1MTIgICAgICAgICAgICAgICAgCTE0CisjZGVmaW5lICAgICBWSUFfUkVTXzg1Nlg0ODAgICAgICAgICAgICAgICAgIAkxNQorI2RlZmluZSAgICAgVklBX1JFU18xMDI0WDU3NiAgICAgICAgICAgICAgICAJMTYKKyNkZWZpbmUgICAgIFZJQV9SRVNfNjQwWDQwMCAgICAgICAgICAgICAgICAgCTE3CisjZGVmaW5lICAgICBWSUFfUkVTXzEyODBYNzIwICAgICAgICAgICAgICAgIAkxOAorI2RlZmluZSAgICAgVklBX1JFU18xOTIwWDEwODAgICAgICAgICAgICAgICAJMTkKKyNkZWZpbmUgICAgIFZJQV9SRVNfODAwWDQ4MCAgICAgICAgICAgICAgICAgCTIwCisjZGVmaW5lICAgICBWSUFfUkVTXzEzNjhYNzY4ICAgICAgICAgICAgICAgIAkyMQorI2RlZmluZSAgICAgVklBX1JFU18xMDI0WDYwMCAgICAgICAgICAgICAgICAJMjIKKyNkZWZpbmUgICAgIFZJQV9SRVNfMTI4MFg4MDAgICAgICAgICAgICAgICAgCTIzCisjZGVmaW5lICAgICBWSUFfUkVTXzE2ODBYMTA1MCAgICAgICAgICAgICAgIAkyNAorI2RlZmluZSAgICAgVklBX1JFU185NjBYNjAwCQkJMjUKKyNkZWZpbmUgICAgIFZJQV9SRVNfMTAwMFg2MDAgICAgICAgICAgICAgICAJMjYKKyNkZWZpbmUgICAgIFZJQV9SRVNfMTA4OFg2MTIgICAgICAgICAgICAgICAJMjcKKyNkZWZpbmUgICAgIFZJQV9SRVNfMTE1Mlg3MjAgICAgICAgICAgICAgICAJMjgKKyNkZWZpbmUgICAgIFZJQV9SRVNfMTIwMFg3MjAgICAgICAgICAgICAgICAJMjkKKyNkZWZpbmUgICAgIFZJQV9SRVNfMTI4MFg2MDAgICAgICAgICAgICAgICAJMzAKKyNkZWZpbmUgICAgIFZJQV9SRVNfMTM2MFg3NjggICAgICAgICAgICAgICAJMzEKKyNkZWZpbmUgICAgIFZJQV9SRVNfMTM2Nlg3NjggICAgICAgICAgICAgICAJMzIKKyNkZWZpbmUgICAgIFZJQV9SRVNfMTQ0MFg5MDAgICAgICAgICAgICAgICAJMzMKKyNkZWZpbmUgICAgIFZJQV9SRVNfMTYwMFg5MDAgICAgICAgICAgICAgICAJMzQKKyNkZWZpbmUgICAgIFZJQV9SRVNfMTYwMFgxMDI0ICAgICAgICAgICAgICAJMzUKKyNkZWZpbmUgICAgIFZJQV9SRVNfMTc5MlgxMzQ0ICAgICAgICAgICAgICAJMzYKKyNkZWZpbmUgICAgIFZJQV9SRVNfMTg1NlgxMzkyICAgICAgICAgICAgICAJMzcKKyNkZWZpbmUgICAgIFZJQV9SRVNfMTkyMFgxMjAwICAgICAgICAgICAgICAJMzgKKyNkZWZpbmUgICAgIFZJQV9SRVNfMjA0OFgxNTM2ICAgICAgICAgICAgICAJMzkKKyNkZWZpbmUgICAgIFZJQV9SRVNfNDgwWDY0MCAgICAgICAgICAgICAgICAgIAk0MAorCisvKlJlZHVjZSBCbGFua2luZyovCisjZGVmaW5lICAgICBWSUFfUkVTXzEzNjBYNzY4X1JCICAgICAgICAgIAkxMzEKKyNkZWZpbmUgICAgIFZJQV9SRVNfMTQ0MFg5MDBfUkIgICAgICAgICAgCTEzMworI2RlZmluZSAgICAgVklBX1JFU18xNDAwWDEwNTBfUkIgICAgICAgIAkxMTEKKyNkZWZpbmUgICAgIFZJQV9SRVNfMTYwMFg5MDBfUkIgICAgICAgICAgCTEzNAorI2RlZmluZSAgICAgVklBX1JFU18xNjgwWDEwNTBfUkIgICAgICAgIAkxMjQKKyNkZWZpbmUgICAgIFZJQV9SRVNfMTkyMFgxMDgwX1JCICAgICAgICAJMTE5CisjZGVmaW5lICAgICBWSUFfUkVTXzE5MjBYMTIwMF9SQiAgICAgICAgCTEzOAorCisjZGVmaW5lICAgICBWSUFfUkVTX0lOVkFMSUQgICAgICAgICAgICAgICAgIAkyNTUKKworLyogc3RhbmRhcmQgVkdBIElPIHBvcnQKKyovCisjZGVmaW5lIFZJQVJNaXNjICAgIDB4M0NDCisjZGVmaW5lIFZJQVdNaXNjICAgIDB4M0MyCisjZGVmaW5lIFZJQVN0YXR1cyAgIDB4M0RBCisjZGVmaW5lIFZJQUNSICAgICAgIDB4M0Q0CisjZGVmaW5lIFZJQVNSICAgICAgIDB4M0M0CisjZGVmaW5lIFZJQUdSICAgICAgIDB4M0NFCisjZGVmaW5lIFZJQUFSICAgICAgIDB4M0MwCisKKyNkZWZpbmUgU3RkQ1IgICAgICAgMHgxOQorI2RlZmluZSBTdGRTUiAgICAgICAweDA0CisjZGVmaW5lIFN0ZEdSICAgICAgIDB4MDkKKyNkZWZpbmUgU3RkQVIgICAgICAgMHgxNAorCisjZGVmaW5lIFBhdGNoQ1IgICAgIDExCisKKy8qIERpc3BsYXkgcGF0aCAqLworI2RlZmluZSBJR0ExICAgICAgICAxCisjZGVmaW5lIElHQTIgICAgICAgIDIKKyNkZWZpbmUgSUdBMV9JR0EyICAgMworCisvKiBEZWZpbmUgQ29sb3IgRGVwdGggICovCisjZGVmaW5lIE1PREVfOEJQUCAgICAgICAxCisjZGVmaW5lIE1PREVfMTZCUFAgICAgICAyCisjZGVmaW5lIE1PREVfMzJCUFAgICAgICA0CisKKyNkZWZpbmUgR1IyMCAgICAweDIwCisjZGVmaW5lIEdSMjEgICAgMHgyMQorI2RlZmluZSBHUjIyICAgIDB4MjIKKworLyogU2VxdWVuY2VyIFJlZ2lzdGVycyAqLworI2RlZmluZSBTUjAxICAgIDB4MDEKKyNkZWZpbmUgU1IxMCAgICAweDEwCisjZGVmaW5lIFNSMTIgICAgMHgxMgorI2RlZmluZSBTUjE1ICAgIDB4MTUKKyNkZWZpbmUgU1IxNiAgICAweDE2CisjZGVmaW5lIFNSMTcgICAgMHgxNworI2RlZmluZSBTUjE4ICAgIDB4MTgKKyNkZWZpbmUgU1IxQiAgICAweDFCCisjZGVmaW5lIFNSMUEgICAgMHgxQQorI2RlZmluZSBTUjFDICAgIDB4MUMKKyNkZWZpbmUgU1IxRCAgICAweDFECisjZGVmaW5lIFNSMUUgICAgMHgxRQorI2RlZmluZSBTUjFGICAgIDB4MUYKKyNkZWZpbmUgU1IyMCAgICAweDIwCisjZGVmaW5lIFNSMjEgICAgMHgyMQorI2RlZmluZSBTUjIyICAgIDB4MjIKKyNkZWZpbmUgU1IyQSAgICAweDJBCisjZGVmaW5lIFNSMkQgICAgMHgyRAorI2RlZmluZSBTUjJFICAgIDB4MkUKKworI2RlZmluZSBTUjMwICAgIDB4MzAKKyNkZWZpbmUgU1IzOSAgICAweDM5CisjZGVmaW5lIFNSM0QgICAgMHgzRAorI2RlZmluZSBTUjNFICAgIDB4M0UKKyNkZWZpbmUgU1IzRiAgICAweDNGCisjZGVmaW5lIFNSNDAgICAgMHg0MAorI2RlZmluZSBTUjQzICAgIDB4NDMKKyNkZWZpbmUgU1I0NCAgICAweDQ0CisjZGVmaW5lIFNSNDUgICAgMHg0NQorI2RlZmluZSBTUjQ2ICAgIDB4NDYKKyNkZWZpbmUgU1I0NyAgICAweDQ3CisjZGVmaW5lIFNSNDggICAgMHg0OAorI2RlZmluZSBTUjQ5ICAgIDB4NDkKKyNkZWZpbmUgU1I0QSAgICAweDRBCisjZGVmaW5lIFNSNEIgICAgMHg0QgorI2RlZmluZSBTUjRDICAgIDB4NEMKKyNkZWZpbmUgU1I1MiAgICAweDUyCisjZGVmaW5lIFNSNUUgICAgMHg1RQorI2RlZmluZSBTUjY1ICAgIDB4NjUKKworLyogQ1JUIENvbnRyb2xsZXIgUmVnaXN0ZXJzICovCisjZGVmaW5lIENSMDAgICAgMHgwMAorI2RlZmluZSBDUjAxICAgIDB4MDEKKyNkZWZpbmUgQ1IwMiAgICAweDAyCisjZGVmaW5lIENSMDMgICAgMHgwMworI2RlZmluZSBDUjA0ICAgIDB4MDQKKyNkZWZpbmUgQ1IwNSAgICAweDA1CisjZGVmaW5lIENSMDYgICAgMHgwNgorI2RlZmluZSBDUjA3ICAgIDB4MDcKKyNkZWZpbmUgQ1IwOCAgICAweDA4CisjZGVmaW5lIENSMDkgICAgMHgwOQorI2RlZmluZSBDUjBBICAgIDB4MEEKKyNkZWZpbmUgQ1IwQiAgICAweDBCCisjZGVmaW5lIENSMEMgICAgMHgwQworI2RlZmluZSBDUjBEICAgIDB4MEQKKyNkZWZpbmUgQ1IwRSAgICAweDBFCisjZGVmaW5lIENSMEYgICAgMHgwRgorI2RlZmluZSBDUjEwICAgIDB4MTAKKyNkZWZpbmUgQ1IxMSAgICAweDExCisjZGVmaW5lIENSMTIgICAgMHgxMgorI2RlZmluZSBDUjEzICAgIDB4MTMKKyNkZWZpbmUgQ1IxNCAgICAweDE0CisjZGVmaW5lIENSMTUgICAgMHgxNQorI2RlZmluZSBDUjE2ICAgIDB4MTYKKyNkZWZpbmUgQ1IxNyAgICAweDE3CisjZGVmaW5lIENSMTggICAgMHgxOAorCisvKiBFeHRlbmQgQ1JUIENvbnRyb2xsZXIgUmVnaXN0ZXJzICovCisjZGVmaW5lIENSMzAgICAgMHgzMAorI2RlZmluZSBDUjMxICAgIDB4MzEKKyNkZWZpbmUgQ1IzMiAgICAweDMyCisjZGVmaW5lIENSMzMgICAgMHgzMworI2RlZmluZSBDUjM0ICAgIDB4MzQKKyNkZWZpbmUgQ1IzNSAgICAweDM1CisjZGVmaW5lIENSMzYgICAgMHgzNgorI2RlZmluZSBDUjM3ICAgIDB4MzcKKyNkZWZpbmUgQ1IzOCAgICAweDM4CisjZGVmaW5lIENSMzkgICAgMHgzOQorI2RlZmluZSBDUjNBICAgIDB4M0EKKyNkZWZpbmUgQ1IzQiAgICAweDNCCisjZGVmaW5lIENSM0MgICAgMHgzQworI2RlZmluZSBDUjNEICAgIDB4M0QKKyNkZWZpbmUgQ1IzRSAgICAweDNFCisjZGVmaW5lIENSM0YgICAgMHgzRgorI2RlZmluZSBDUjQwICAgIDB4NDAKKyNkZWZpbmUgQ1I0MSAgICAweDQxCisjZGVmaW5lIENSNDIgICAgMHg0MgorI2RlZmluZSBDUjQzICAgIDB4NDMKKyNkZWZpbmUgQ1I0NCAgICAweDQ0CisjZGVmaW5lIENSNDUgICAgMHg0NQorI2RlZmluZSBDUjQ2ICAgIDB4NDYKKyNkZWZpbmUgQ1I0NyAgICAweDQ3CisjZGVmaW5lIENSNDggICAgMHg0OAorI2RlZmluZSBDUjQ5ICAgIDB4NDkKKyNkZWZpbmUgQ1I0QSAgICAweDRBCisjZGVmaW5lIENSNEIgICAgMHg0QgorI2RlZmluZSBDUjRDICAgIDB4NEMKKyNkZWZpbmUgQ1I0RCAgICAweDRECisjZGVmaW5lIENSNEUgICAgMHg0RQorI2RlZmluZSBDUjRGICAgIDB4NEYKKyNkZWZpbmUgQ1I1MCAgICAweDUwCisjZGVmaW5lIENSNTEgICAgMHg1MQorI2RlZmluZSBDUjUyICAgIDB4NTIKKyNkZWZpbmUgQ1I1MyAgICAweDUzCisjZGVmaW5lIENSNTQgICAgMHg1NAorI2RlZmluZSBDUjU1ICAgIDB4NTUKKyNkZWZpbmUgQ1I1NiAgICAweDU2CisjZGVmaW5lIENSNTcgICAgMHg1NworI2RlZmluZSBDUjU4ICAgIDB4NTgKKyNkZWZpbmUgQ1I1OSAgICAweDU5CisjZGVmaW5lIENSNUEgICAgMHg1QQorI2RlZmluZSBDUjVCICAgIDB4NUIKKyNkZWZpbmUgQ1I1QyAgICAweDVDCisjZGVmaW5lIENSNUQgICAgMHg1RAorI2RlZmluZSBDUjVFICAgIDB4NUUKKyNkZWZpbmUgQ1I1RiAgICAweDVGCisjZGVmaW5lIENSNjAgICAgMHg2MAorI2RlZmluZSBDUjYxICAgIDB4NjEKKyNkZWZpbmUgQ1I2MiAgICAweDYyCisjZGVmaW5lIENSNjMgICAgMHg2MworI2RlZmluZSBDUjY0ICAgIDB4NjQKKyNkZWZpbmUgQ1I2NSAgICAweDY1CisjZGVmaW5lIENSNjYgICAgMHg2NgorI2RlZmluZSBDUjY3ICAgIDB4NjcKKyNkZWZpbmUgQ1I2OCAgICAweDY4CisjZGVmaW5lIENSNjkgICAgMHg2OQorI2RlZmluZSBDUjZBICAgIDB4NkEKKyNkZWZpbmUgQ1I2QiAgICAweDZCCisjZGVmaW5lIENSNkMgICAgMHg2QworI2RlZmluZSBDUjZEICAgIDB4NkQKKyNkZWZpbmUgQ1I2RSAgICAweDZFCisjZGVmaW5lIENSNkYgICAgMHg2RgorI2RlZmluZSBDUjcwICAgIDB4NzAKKyNkZWZpbmUgQ1I3MSAgICAweDcxCisjZGVmaW5lIENSNzIgICAgMHg3MgorI2RlZmluZSBDUjczICAgIDB4NzMKKyNkZWZpbmUgQ1I3NCAgICAweDc0CisjZGVmaW5lIENSNzUgICAgMHg3NQorI2RlZmluZSBDUjc2ICAgIDB4NzYKKyNkZWZpbmUgQ1I3NyAgICAweDc3CisjZGVmaW5lIENSNzggICAgMHg3OAorI2RlZmluZSBDUjc5ICAgIDB4NzkKKyNkZWZpbmUgQ1I3QSAgICAweDdBCisjZGVmaW5lIENSN0IgICAgMHg3QgorI2RlZmluZSBDUjdDICAgIDB4N0MKKyNkZWZpbmUgQ1I3RCAgICAweDdECisjZGVmaW5lIENSN0UgICAgMHg3RQorI2RlZmluZSBDUjdGICAgIDB4N0YKKyNkZWZpbmUgQ1I4MCAgICAweDgwCisjZGVmaW5lIENSODEgICAgMHg4MQorI2RlZmluZSBDUjgyICAgIDB4ODIKKyNkZWZpbmUgQ1I4MyAgICAweDgzCisjZGVmaW5lIENSODQgICAgMHg4NAorI2RlZmluZSBDUjg1ICAgIDB4ODUKKyNkZWZpbmUgQ1I4NiAgICAweDg2CisjZGVmaW5lIENSODcgICAgMHg4NworI2RlZmluZSBDUjg4ICAgIDB4ODgKKyNkZWZpbmUgQ1I4OSAgICAweDg5CisjZGVmaW5lIENSOEEgICAgMHg4QQorI2RlZmluZSBDUjhCICAgIDB4OEIKKyNkZWZpbmUgQ1I4QyAgICAweDhDCisjZGVmaW5lIENSOEQgICAgMHg4RAorI2RlZmluZSBDUjhFICAgIDB4OEUKKyNkZWZpbmUgQ1I4RiAgICAweDhGCisjZGVmaW5lIENSOTAgICAgMHg5MAorI2RlZmluZSBDUjkxICAgIDB4OTEKKyNkZWZpbmUgQ1I5MiAgICAweDkyCisjZGVmaW5lIENSOTMgICAgMHg5MworI2RlZmluZSBDUjk0ICAgIDB4OTQKKyNkZWZpbmUgQ1I5NSAgICAweDk1CisjZGVmaW5lIENSOTYgICAgMHg5NgorI2RlZmluZSBDUjk3ICAgIDB4OTcKKyNkZWZpbmUgQ1I5OCAgICAweDk4CisjZGVmaW5lIENSOTkgICAgMHg5OQorI2RlZmluZSBDUjlBICAgIDB4OUEKKyNkZWZpbmUgQ1I5QiAgICAweDlCCisjZGVmaW5lIENSOUMgICAgMHg5QworI2RlZmluZSBDUjlEICAgIDB4OUQKKyNkZWZpbmUgQ1I5RSAgICAweDlFCisjZGVmaW5lIENSOUYgICAgMHg5RgorI2RlZmluZSBDUkEwICAgIDB4QTAKKyNkZWZpbmUgQ1JBMSAgICAweEExCisjZGVmaW5lIENSQTIgICAgMHhBMgorI2RlZmluZSBDUkEzICAgIDB4QTMKKyNkZWZpbmUgQ1JEMiAgICAweEQyCisjZGVmaW5lIENSRDMgICAgMHhEMworI2RlZmluZSBDUkQ0ICAgIDB4RDQKKworLyogTFVUIFRhYmxlKi8KKyNkZWZpbmUgTFVUX0RBVEEgICAgICAgICAgICAgMHgzQzkJLyogREFDREFUQSAqLworI2RlZmluZSBMVVRfSU5ERVhfUkVBRCAgICAgICAweDNDNwkvKiBEQUNSWCAqLworI2RlZmluZSBMVVRfSU5ERVhfV1JJVEUgICAgICAweDNDOAkvKiBEQUNXWCAqLworI2RlZmluZSBEQUNNQVNLICAgICAgICAgICAgICAweDNDNgorCisvKiBEZWZpbml0aW9uIERldmljZSAqLworI2RlZmluZSBERVZJQ0VfQ1JUICAweDAxCisjZGVmaW5lIERFVklDRV9EVkkgIDB4MDMKKyNkZWZpbmUgREVWSUNFX0xDRCAgMHgwNAorCisvKiBEZXZpY2Ugb3V0cHV0IGludGVyZmFjZSAqLworI2RlZmluZSBJTlRFUkZBQ0VfTk9ORSAgICAgICAgICAweDAwCisjZGVmaW5lIElOVEVSRkFDRV9BTkFMT0dfUkdCICAgIDB4MDEKKyNkZWZpbmUgSU5URVJGQUNFX0RWUDAgICAgICAgICAgMHgwMgorI2RlZmluZSBJTlRFUkZBQ0VfRFZQMSAgICAgICAgICAweDAzCisjZGVmaW5lIElOVEVSRkFDRV9ERlBfSElHSCAgICAgIDB4MDQKKyNkZWZpbmUgSU5URVJGQUNFX0RGUF9MT1cgICAgICAgMHgwNQorI2RlZmluZSBJTlRFUkZBQ0VfREZQICAgICAgICAgICAweDA2CisjZGVmaW5lIElOVEVSRkFDRV9MVkRTMCAgICAgICAgIDB4MDcKKyNkZWZpbmUgSU5URVJGQUNFX0xWRFMxICAgICAgICAgMHgwOAorI2RlZmluZSBJTlRFUkZBQ0VfTFZEUzBMVkRTMSAgICAweDA5CisjZGVmaW5lIElOVEVSRkFDRV9UTURTICAgICAgICAgIDB4MEEKKworI2RlZmluZSBIV19MQVlPVVRfTENEX09OTFkgICAgICAweDAxCisjZGVmaW5lIEhXX0xBWU9VVF9EVklfT05MWSAgICAgIDB4MDIKKyNkZWZpbmUgSFdfTEFZT1VUX0xDRF9EVkkgICAgICAgMHgwMworI2RlZmluZSBIV19MQVlPVVRfTENEMV9MQ0QyICAgICAweDA0CisjZGVmaW5lIEhXX0xBWU9VVF9MQ0RfRVhURVJOQUxfTENEMiAweDEwCisKKy8qIERlZmluaXRpb24gUmVmcmVzaCBSYXRlICovCisjZGVmaW5lIFJFRlJFU0hfNTAgICAgICA1MAorI2RlZmluZSBSRUZSRVNIXzYwICAgICAgNjAKKyNkZWZpbmUgUkVGUkVTSF83NSAgICAgIDc1CisjZGVmaW5lIFJFRlJFU0hfODUgICAgICA4NQorI2RlZmluZSBSRUZSRVNIXzEwMCAgICAgMTAwCisjZGVmaW5lIFJFRlJFU0hfMTIwICAgICAxMjAKKworLyogRGVmaW5pdGlvbiBTeW5jIFBvbGFyaXR5Ki8KKyNkZWZpbmUgTkVHQVRJVkUgICAgICAgIDEKKyNkZWZpbmUgUE9TSVRJVkUgICAgICAgIDAKKworLyo0ODB4NjQwQDYwIFN5bmMgUG9sYXJpdHkgKEdURikKKyovCisjZGVmaW5lIE00ODBYNjQwX1I2MF9IU1AgICAgICAgIE5FR0FUSVZFCisjZGVmaW5lIE00ODBYNjQwX1I2MF9WU1AgICAgICAgIFBPU0lUSVZFCisKKy8qNjQweDQ4MEA2MCBTeW5jIFBvbGFyaXR5IChWRVNBIE1vZGUpCisqLworI2RlZmluZSBNNjQwWDQ4MF9SNjBfSFNQICAgICAgICBORUdBVElWRQorI2RlZmluZSBNNjQwWDQ4MF9SNjBfVlNQICAgICAgICBORUdBVElWRQorCisvKjY0MHg0ODBANzUgU3luYyBQb2xhcml0eSAoVkVTQSBNb2RlKQorKi8KKyNkZWZpbmUgTTY0MFg0ODBfUjc1X0hTUCAgICAgICAgTkVHQVRJVkUKKyNkZWZpbmUgTTY0MFg0ODBfUjc1X1ZTUCAgICAgICAgTkVHQVRJVkUKKworLyo2NDB4NDgwQDg1IFN5bmMgUG9sYXJpdHkgKFZFU0EgTW9kZSkKKyovCisjZGVmaW5lIE02NDBYNDgwX1I4NV9IU1AgICAgICAgIE5FR0FUSVZFCisjZGVmaW5lIE02NDBYNDgwX1I4NV9WU1AgICAgICAgIE5FR0FUSVZFCisKKy8qNjQweDQ4MEAxMDAgU3luYyBQb2xhcml0eSAoR1RGIE1vZGUpCisqLworI2RlZmluZSBNNjQwWDQ4MF9SMTAwX0hTUCAgICAgICBORUdBVElWRQorI2RlZmluZSBNNjQwWDQ4MF9SMTAwX1ZTUCAgICAgICBQT1NJVElWRQorCisvKjY0MHg0ODBAMTIwIFN5bmMgUG9sYXJpdHkgKEdURiBNb2RlKQorKi8KKyNkZWZpbmUgTTY0MFg0ODBfUjEyMF9IU1AgICAgICAgTkVHQVRJVkUKKyNkZWZpbmUgTTY0MFg0ODBfUjEyMF9WU1AgICAgICAgUE9TSVRJVkUKKworLyo3MjB4NDgwQDYwIFN5bmMgUG9sYXJpdHkgIChHVEYgTW9kZSkKKyovCisjZGVmaW5lIE03MjBYNDgwX1I2MF9IU1AgICAgICAgIE5FR0FUSVZFCisjZGVmaW5lIE03MjBYNDgwX1I2MF9WU1AgICAgICAgIFBPU0lUSVZFCisKKy8qNzIweDU3NkA2MCBTeW5jIFBvbGFyaXR5ICAoR1RGIE1vZGUpCisqLworI2RlZmluZSBNNzIwWDU3Nl9SNjBfSFNQICAgICAgICBORUdBVElWRQorI2RlZmluZSBNNzIwWDU3Nl9SNjBfVlNQICAgICAgICBQT1NJVElWRQorCisvKjgwMHg2MDBANjAgU3luYyBQb2xhcml0eSAoVkVTQSBNb2RlKQorKi8KKyNkZWZpbmUgTTgwMFg2MDBfUjYwX0hTUCAgICAgICAgUE9TSVRJVkUKKyNkZWZpbmUgTTgwMFg2MDBfUjYwX1ZTUCAgICAgICAgUE9TSVRJVkUKKworLyo4MDB4NjAwQDc1IFN5bmMgUG9sYXJpdHkgKFZFU0EgTW9kZSkKKyovCisjZGVmaW5lIE04MDBYNjAwX1I3NV9IU1AgICAgICAgIFBPU0lUSVZFCisjZGVmaW5lIE04MDBYNjAwX1I3NV9WU1AgICAgICAgIFBPU0lUSVZFCisKKy8qODAweDYwMEA4NSBTeW5jIFBvbGFyaXR5IChWRVNBIE1vZGUpCisqLworI2RlZmluZSBNODAwWDYwMF9SODVfSFNQICAgICAgICBQT1NJVElWRQorI2RlZmluZSBNODAwWDYwMF9SODVfVlNQICAgICAgICBQT1NJVElWRQorCisvKjgwMHg2MDBAMTAwIFN5bmMgUG9sYXJpdHkgKEdURiBNb2RlKQorKi8KKyNkZWZpbmUgTTgwMFg2MDBfUjEwMF9IU1AgICAgICAgTkVHQVRJVkUKKyNkZWZpbmUgTTgwMFg2MDBfUjEwMF9WU1AgICAgICAgUE9TSVRJVkUKKworLyo4MDB4NjAwQDEyMCBTeW5jIFBvbGFyaXR5IChHVEYgTW9kZSkKKyovCisjZGVmaW5lIE04MDBYNjAwX1IxMjBfSFNQICAgICAgIE5FR0FUSVZFCisjZGVmaW5lIE04MDBYNjAwX1IxMjBfVlNQICAgICAgIFBPU0lUSVZFCisKKy8qODAweDQ4MEA2MCBTeW5jIFBvbGFyaXR5ICAoQ1ZUIE1vZGUpCisqLworI2RlZmluZSBNODAwWDQ4MF9SNjBfSFNQICAgICAgICBORUdBVElWRQorI2RlZmluZSBNODAwWDQ4MF9SNjBfVlNQICAgICAgICBQT1NJVElWRQorCisvKjg0OHg0ODBANjAgU3luYyBQb2xhcml0eSAgKENWVCBNb2RlKQorKi8KKyNkZWZpbmUgTTg0OFg0ODBfUjYwX0hTUCAgICAgICAgTkVHQVRJVkUKKyNkZWZpbmUgTTg0OFg0ODBfUjYwX1ZTUCAgICAgICAgUE9TSVRJVkUKKworLyo4NTJ4NDgwQDYwIFN5bmMgUG9sYXJpdHkgIChHVEYgTW9kZSkKKyovCisjZGVmaW5lIE04NTJYNDgwX1I2MF9IU1AgICAgICAgIE5FR0FUSVZFCisjZGVmaW5lIE04NTJYNDgwX1I2MF9WU1AgICAgICAgIFBPU0lUSVZFCisKKy8qMTAyNHg1MTJANjAgU3luYyBQb2xhcml0eSAoR1RGIE1vZGUpCisqLworI2RlZmluZSBNMTAyNFg1MTJfUjYwX0hTUCAgICAgICBORUdBVElWRQorI2RlZmluZSBNMTAyNFg1MTJfUjYwX1ZTUCAgICAgICBQT1NJVElWRQorCisvKjEwMjR4NjAwQDYwIFN5bmMgUG9sYXJpdHkgKEdURiBNb2RlKQorKi8KKyNkZWZpbmUgTTEwMjRYNjAwX1I2MF9IU1AgICAgICAgTkVHQVRJVkUKKyNkZWZpbmUgTTEwMjRYNjAwX1I2MF9WU1AgICAgICAgUE9TSVRJVkUKKworLyoxMDI0eDc2OEA2MCBTeW5jIFBvbGFyaXR5IChWRVNBIE1vZGUpCisqLworI2RlZmluZSBNMTAyNFg3NjhfUjYwX0hTUCAgICAgICBORUdBVElWRQorI2RlZmluZSBNMTAyNFg3NjhfUjYwX1ZTUCAgICAgICBORUdBVElWRQorCisvKjEwMjR4NzY4QDc1IFN5bmMgUG9sYXJpdHkgKFZFU0EgTW9kZSkKKyovCisjZGVmaW5lIE0xMDI0WDc2OF9SNzVfSFNQICAgICAgIFBPU0lUSVZFCisjZGVmaW5lIE0xMDI0WDc2OF9SNzVfVlNQICAgICAgIFBPU0lUSVZFCisKKy8qMTAyNHg3NjhAODUgU3luYyBQb2xhcml0eSAoVkVTQSBNb2RlKQorKi8KKyNkZWZpbmUgTTEwMjRYNzY4X1I4NV9IU1AgICAgICAgUE9TSVRJVkUKKyNkZWZpbmUgTTEwMjRYNzY4X1I4NV9WU1AgICAgICAgUE9TSVRJVkUKKworLyoxMDI0eDc2OEAxMDAgU3luYyBQb2xhcml0eSAoR1RGIE1vZGUpCisqLworI2RlZmluZSBNMTAyNFg3NjhfUjEwMF9IU1AgICAgICBORUdBVElWRQorI2RlZmluZSBNMTAyNFg3NjhfUjEwMF9WU1AgICAgICBQT1NJVElWRQorCisvKjExNTJ4ODY0QDc1IFN5bmMgUG9sYXJpdHkgKFZFU0EgTW9kZSkKKyovCisjZGVmaW5lIE0xMTUyWDg2NF9SNzVfSFNQICAgICAgIFBPU0lUSVZFCisjZGVmaW5lIE0xMTUyWDg2NF9SNzVfVlNQICAgICAgIFBPU0lUSVZFCisKKy8qMTI4MHg3MjBANjAgU3luYyBQb2xhcml0eSAgKEdURiBNb2RlKQorKi8KKyNkZWZpbmUgTTEyODBYNzIwX1I2MF9IU1AgICAgICAgTkVHQVRJVkUKKyNkZWZpbmUgTTEyODBYNzIwX1I2MF9WU1AgICAgICAgUE9TSVRJVkUKKworLyogMTI4MHg3NjhANTAgU3luYyBQb2xhcml0eSAgKEdURiBNb2RlKSAqLworI2RlZmluZSBNMTI4MFg3NjhfUjUwX0hTUCAgICAgICBORUdBVElWRQorI2RlZmluZSBNMTI4MFg3NjhfUjUwX1ZTUCAgICAgICBQT1NJVElWRQorCisvKjEyODB4NzY4QDYwIFN5bmMgUG9sYXJpdHkgIChHVEYgTW9kZSkKKyovCisjZGVmaW5lIE0xMjgwWDc2OF9SNjBfSFNQICAgICAgIE5FR0FUSVZFCisjZGVmaW5lIE0xMjgwWDc2OF9SNjBfVlNQICAgICAgIFBPU0lUSVZFCisKKy8qMTI4MHg4MDBANjAgU3luYyBQb2xhcml0eSAgKENWVCBNb2RlKQorKi8KKyNkZWZpbmUgTTEyODBYODAwX1I2MF9IU1AgICAgICAgTkVHQVRJVkUKKyNkZWZpbmUgTTEyODBYODAwX1I2MF9WU1AgICAgICAgUE9TSVRJVkUKKworLyoxMjgweDk2MEA2MCBTeW5jIFBvbGFyaXR5IChWRVNBIE1vZGUpCisqLworI2RlZmluZSBNMTI4MFg5NjBfUjYwX0hTUCAgICAgICBQT1NJVElWRQorI2RlZmluZSBNMTI4MFg5NjBfUjYwX1ZTUCAgICAgICBQT1NJVElWRQorCisvKjEyODB4MTAyNEA2MCBTeW5jIFBvbGFyaXR5IChWRVNBIE1vZGUpCisqLworI2RlZmluZSBNMTI4MFgxMDI0X1I2MF9IU1AgICAgICBQT1NJVElWRQorI2RlZmluZSBNMTI4MFgxMDI0X1I2MF9WU1AgICAgICBQT1NJVElWRQorCisvKiAxMzYweDc2OEA2MCBTeW5jIFBvbGFyaXR5IChDVlQgTW9kZSkgKi8KKyNkZWZpbmUgTTEzNjBYNzY4X1I2MF9IU1AgICAgICAgUE9TSVRJVkUKKyNkZWZpbmUgTTEzNjBYNzY4X1I2MF9WU1AgICAgICAgUE9TSVRJVkUKKworLyogMTM2MHg3NjhANjAgU3luYyBQb2xhcml0eSAoQ1ZUIFJlZHVjZSBCbGFua2luZyBNb2RlKSAqLworI2RlZmluZSBNMTM2MFg3NjhfUkJfUjYwX0hTUCAgICAgICBQT1NJVElWRQorI2RlZmluZSBNMTM2MFg3NjhfUkJfUjYwX1ZTUCAgICAgICBORUdBVElWRQorCisvKiAxMzY4eDc2OEA1MCBTeW5jIFBvbGFyaXR5IChHVEYgTW9kZSkgKi8KKyNkZWZpbmUgTTEzNjhYNzY4X1I1MF9IU1AgICAgICAgTkVHQVRJVkUKKyNkZWZpbmUgTTEzNjhYNzY4X1I1MF9WU1AgICAgICAgUE9TSVRJVkUKKworLyogMTM2OHg3NjhANjAgU3luYyBQb2xhcml0eSAoVkVTQSBNb2RlKSAqLworI2RlZmluZSBNMTM2OFg3NjhfUjYwX0hTUCAgICAgICBORUdBVElWRQorI2RlZmluZSBNMTM2OFg3NjhfUjYwX1ZTUCAgICAgICBQT1NJVElWRQorCisvKjEyODB4MTAyNEA3NSBTeW5jIFBvbGFyaXR5IChWRVNBIE1vZGUpCisqLworI2RlZmluZSBNMTI4MFgxMDI0X1I3NV9IU1AgICAgICBQT1NJVElWRQorI2RlZmluZSBNMTI4MFgxMDI0X1I3NV9WU1AgICAgICBQT1NJVElWRQorCisvKjEyODB4MTAyNEA4NSBTeW5jIFBvbGFyaXR5IChWRVNBIE1vZGUpCisqLworI2RlZmluZSBNMTI4MFgxMDI0X1I4NV9IU1AgICAgICBQT1NJVElWRQorI2RlZmluZSBNMTI4MFgxMDI0X1I4NV9WU1AgICAgICBQT1NJVElWRQorCisvKjE0NDB4MTA1MEA2MCBTeW5jIFBvbGFyaXR5IChHVEYgTW9kZSkKKyovCisjZGVmaW5lIE0xNDQwWDEwNTBfUjYwX0hTUCAgICAgIE5FR0FUSVZFCisjZGVmaW5lIE0xNDQwWDEwNTBfUjYwX1ZTUCAgICAgIFBPU0lUSVZFCisKKy8qMTYwMHgxMjAwQDYwIFN5bmMgUG9sYXJpdHkgKFZFU0EgTW9kZSkKKyovCisjZGVmaW5lIE0xNjAwWDEyMDBfUjYwX0hTUCAgICAgIFBPU0lUSVZFCisjZGVmaW5lIE0xNjAwWDEyMDBfUjYwX1ZTUCAgICAgIFBPU0lUSVZFCisKKy8qMTYwMHgxMjAwQDc1IFN5bmMgUG9sYXJpdHkgKFZFU0EgTW9kZSkKKyovCisjZGVmaW5lIE0xNjAwWDEyMDBfUjc1X0hTUCAgICAgIFBPU0lUSVZFCisjZGVmaW5lIE0xNjAwWDEyMDBfUjc1X1ZTUCAgICAgIFBPU0lUSVZFCisKKy8qIDE2ODB4MTA1MEA2MCBTeW5jIFBvbGFyaXR5IChDVlQgTW9kZSkgKi8KKyNkZWZpbmUgTTE2ODB4MTA1MF9SNjBfSFNQICAgICAgTkVHQVRJVkUKKyNkZWZpbmUgTTE2ODB4MTA1MF9SNjBfVlNQICAgICAgTkVHQVRJVkUKKworLyogMTY4MHgxMDUwQDYwIFN5bmMgUG9sYXJpdHkgKENWVCBSZWR1Y2UgQmxhbmtpbmcgTW9kZSkgKi8KKyNkZWZpbmUgTTE2ODB4MTA1MF9SQl9SNjBfSFNQICAgICAgUE9TSVRJVkUKKyNkZWZpbmUgTTE2ODB4MTA1MF9SQl9SNjBfVlNQICAgICAgTkVHQVRJVkUKKworLyogMTY4MHgxMDUwQDc1IFN5bmMgUG9sYXJpdHkgKENWVCBNb2RlKSAqLworI2RlZmluZSBNMTY4MHgxMDUwX1I3NV9IU1AgICAgICBORUdBVElWRQorI2RlZmluZSBNMTY4MHgxMDUwX1I3NV9WU1AgICAgICBQT1NJVElWRQorCisvKjE5MjB4MTA4MEA2MCBTeW5jIFBvbGFyaXR5IChDVlQgTW9kZSkKKyovCisjZGVmaW5lIE0xOTIwWDEwODBfUjYwX0hTUCAgICAgIE5FR0FUSVZFCisjZGVmaW5lIE0xOTIwWDEwODBfUjYwX1ZTUCAgICAgIFBPU0lUSVZFCisKKy8qIDE5MjB4MTA4MEA2MCBTeW5jIFBvbGFyaXR5IChDVlQgUmVkdWNlIEJsYW5raW5nIE1vZGUpICovCisjZGVmaW5lIE0xOTIwWDEwODBfUkJfUjYwX0hTUCAgUE9TSVRJVkUKKyNkZWZpbmUgTTE5MjBYMTA4MF9SQl9SNjBfVlNQICBORUdBVElWRQorCisvKjE5MjB4MTQ0MEA2MCBTeW5jIFBvbGFyaXR5IChWRVNBIE1vZGUpCisqLworI2RlZmluZSBNMTkyMFgxNDQwX1I2MF9IU1AgICAgICBORUdBVElWRQorI2RlZmluZSBNMTkyMFgxNDQwX1I2MF9WU1AgICAgICBQT1NJVElWRQorCisvKjE5MjB4MTQ0MEA3NSBTeW5jIFBvbGFyaXR5IChWRVNBIE1vZGUpCisqLworI2RlZmluZSBNMTkyMFgxNDQwX1I3NV9IU1AgICAgICBORUdBVElWRQorI2RlZmluZSBNMTkyMFgxNDQwX1I3NV9WU1AgICAgICBQT1NJVElWRQorCisjaWYgMAorLyogMTQwMHgxMDUwQDYwIFN5bmMgUG9sYXJpdHkgKFZFU0EgTW9kZSkgKi8KKyNkZWZpbmUgTTE0MDBYMTA1MF9SNjBfSFNQICAgICAgTkVHQVRJVkUKKyNkZWZpbmUgTTE0MDBYMTA1MF9SNjBfVlNQICAgICAgTkVHQVRJVkUKKyNlbmRpZgorCisvKiAxNDAweDEwNTBANjAgU3luYyBQb2xhcml0eSAoQ1ZUIE1vZGUpICovCisjZGVmaW5lIE0xNDAwWDEwNTBfUjYwX0hTUCAgICAgIE5FR0FUSVZFCisjZGVmaW5lIE0xNDAwWDEwNTBfUjYwX1ZTUCAgICAgIFBPU0lUSVZFCisKKy8qIDE0MDB4MTA1MEA2MCBTeW5jIFBvbGFyaXR5IChDVlQgUmVkdWNlIEJsYW5raW5nIE1vZGUpICovCisjZGVmaW5lIE0xNDAwWDEwNTBfUkJfUjYwX0hTUCAgICAgIFBPU0lUSVZFCisjZGVmaW5lIE0xNDAwWDEwNTBfUkJfUjYwX1ZTUCAgICAgIE5FR0FUSVZFCisKKy8qIDE0MDB4MTA1MEA3NSBTeW5jIFBvbGFyaXR5IChDVlQgTW9kZSkgKi8KKyNkZWZpbmUgTTE0MDBYMTA1MF9SNzVfSFNQICAgICAgTkVHQVRJVkUKKyNkZWZpbmUgTTE0MDBYMTA1MF9SNzVfVlNQICAgICAgUE9TSVRJVkUKKworLyogOTYweDYwMEA2MCBTeW5jIFBvbGFyaXR5IChDVlQgTW9kZSkgKi8KKyNkZWZpbmUgTTk2MFg2MDBfUjYwX0hTUCAgICAgICAgTkVHQVRJVkUKKyNkZWZpbmUgTTk2MFg2MDBfUjYwX1ZTUCAgICAgICAgUE9TSVRJVkUKKworLyogMTAwMHg2MDBANjAgU3luYyBQb2xhcml0eSAoR1RGIE1vZGUpICovCisjZGVmaW5lIE0xMDAwWDYwMF9SNjBfSFNQICAgICAgIE5FR0FUSVZFCisjZGVmaW5lIE0xMDAwWDYwMF9SNjBfVlNQICAgICAgIFBPU0lUSVZFCisKKy8qIDEwMjR4NTc2QDYwIFN5bmMgUG9sYXJpdHkgKEdURiBNb2RlKSAqLworI2RlZmluZSBNMTAyNFg1NzZfUjYwX0hTUCAgICAgICBORUdBVElWRQorI2RlZmluZSBNMTAyNFg1NzZfUjYwX1ZTUCAgICAgICBQT1NJVElWRQorCisvKjEwMjR4NjAwQDYwIFN5bmMgUG9sYXJpdHkgKEdURiBNb2RlKSovCisjZGVmaW5lIE0xMDI0WDYwMF9SNjBfSFNQICAgICAgIE5FR0FUSVZFCisjZGVmaW5lIE0xMDI0WDYwMF9SNjBfVlNQICAgICAgIFBPU0lUSVZFCisKKy8qIDEwODh4NjEyQDYwIFN5bmMgUG9sYXJpdHkgKENWVCBNb2RlKSAqLworI2RlZmluZSBNMTA4OFg2MTJfUjYwX0hTUCAgICAgICBORUdBVElWRQorI2RlZmluZSBNMTA4OFg2MTJfUjYwX1ZTUCAgICAgICBQT1NJVElWRQorCisvKiAxMTUyeDcyMEA2MCBTeW5jIFBvbGFyaXR5IChDVlQgTW9kZSkgKi8KKyNkZWZpbmUgTTExNTJYNzIwX1I2MF9IU1AgICAgICAgTkVHQVRJVkUKKyNkZWZpbmUgTTExNTJYNzIwX1I2MF9WU1AgICAgICAgUE9TSVRJVkUKKworLyogMTIwMHg3MjBANjAgU3luYyBQb2xhcml0eSAoR1RGIE1vZGUpICovCisjZGVmaW5lIE0xMjAwWDcyMF9SNjBfSFNQICAgICAgIE5FR0FUSVZFCisjZGVmaW5lIE0xMjAwWDcyMF9SNjBfVlNQICAgICAgIFBPU0lUSVZFCisKKy8qIDEyODB4NjAwQDYwIFN5bmMgUG9sYXJpdHkgKEdURiBNb2RlKSAqLworI2RlZmluZSBNMTI4MHg2MDBfUjYwX0hTUCAgICAgICBORUdBVElWRQorI2RlZmluZSBNMTI4MHg2MDBfUjYwX1ZTUCAgICAgICBQT1NJVElWRQorCisvKiAxMjgweDcyMEA1MCBTeW5jIFBvbGFyaXR5ICAoR1RGIE1vZGUpICovCisjZGVmaW5lIE0xMjgwWDcyMF9SNTBfSFNQICAgICAgIE5FR0FUSVZFCisjZGVmaW5lIE0xMjgwWDcyMF9SNTBfVlNQICAgICAgIFBPU0lUSVZFCisKKy8qIDEyODB4NzIwQDYwIFN5bmMgUG9sYXJpdHkgIChDRUEgTW9kZSkgKi8KKyNkZWZpbmUgTTEyODBYNzIwX0NFQV9SNjBfSFNQICAgICAgIFBPU0lUSVZFCisjZGVmaW5lIE0xMjgwWDcyMF9DRUFfUjYwX1ZTUCAgICAgICBQT1NJVElWRQorCisvKiAxNDQweDkwMEA2MCBTeW5jIFBvbGFyaXR5IChDVlQgTW9kZSkgKi8KKyNkZWZpbmUgTTE0NDBYOTAwX1I2MF9IU1AgICAgICAgTkVHQVRJVkUKKyNkZWZpbmUgTTE0NDBYOTAwX1I2MF9WU1AgICAgICAgUE9TSVRJVkUKKworLyogMTQ0MHg5MDBANzUgU3luYyBQb2xhcml0eSAoQ1ZUIE1vZGUpICovCisjZGVmaW5lIE0xNDQwWDkwMF9SNzVfSFNQICAgICAgIE5FR0FUSVZFCisjZGVmaW5lIE0xNDQwWDkwMF9SNzVfVlNQICAgICAgIFBPU0lUSVZFCisKKy8qIDE0NDB4OTAwQDYwIFN5bmMgUG9sYXJpdHkgKENWVCBSZWR1Y2UgQmxhbmtpbmcgTW9kZSkgKi8KKyNkZWZpbmUgTTE0NDBYOTAwX1JCX1I2MF9IU1AgICAgICAgUE9TSVRJVkUKKyNkZWZpbmUgTTE0NDBYOTAwX1JCX1I2MF9WU1AgICAgICAgTkVHQVRJVkUKKworLyogMTYwMHg5MDBANjAgU3luYyBQb2xhcml0eSAoQ1ZUIE1vZGUpICovCisjZGVmaW5lIE0xNjAwWDkwMF9SNjBfSFNQICAgICAgIE5FR0FUSVZFCisjZGVmaW5lIE0xNjAwWDkwMF9SNjBfVlNQICAgICAgIFBPU0lUSVZFCisKKy8qIDE2MDB4OTAwQDYwIFN5bmMgUG9sYXJpdHkgKENWVCBSZWR1Y2UgQmxhbmtpbmcgTW9kZSkgKi8KKyNkZWZpbmUgTTE2MDBYOTAwX1JCX1I2MF9IU1AgICAgICAgUE9TSVRJVkUKKyNkZWZpbmUgTTE2MDBYOTAwX1JCX1I2MF9WU1AgICAgICAgTkVHQVRJVkUKKworLyogMTYwMHgxMDI0QDYwIFN5bmMgUG9sYXJpdHkgKEdURiBNb2RlKSAqLworI2RlZmluZSBNMTYwMFgxMDI0X1I2MF9IU1AgICAgICBORUdBVElWRQorI2RlZmluZSBNMTYwMFgxMDI0X1I2MF9WU1AgICAgICBQT1NJVElWRQorCisvKiAxNzkyeDEzNDRANjAgU3luYyBQb2xhcml0eSAoRE1UIE1vZGUpICovCisjZGVmaW5lIE0xNzkyeDEzNDRfUjYwX0hTUCAgICAgIE5FR0FUSVZFCisjZGVmaW5lIE0xNzkyeDEzNDRfUjYwX1ZTUCAgICAgIFBPU0lUSVZFCisKKy8qIDE4NTZ4MTM5MkA2MCBTeW5jIFBvbGFyaXR5IChETVQgTW9kZSkgKi8KKyNkZWZpbmUgTTE4NTZ4MTM5Ml9SNjBfSFNQICAgICAgTkVHQVRJVkUKKyNkZWZpbmUgTTE4NTZ4MTM5Ml9SNjBfVlNQICAgICAgUE9TSVRJVkUKKworLyogMTkyMHgxMjAwQDYwIFN5bmMgUG9sYXJpdHkgKENWVCBNb2RlKSAqLworI2RlZmluZSBNMTkyMFgxMjAwX1I2MF9IU1AgICAgICBORUdBVElWRQorI2RlZmluZSBNMTkyMFgxMjAwX1I2MF9WU1AgICAgICBQT1NJVElWRQorCisvKiAxOTIweDEyMDBANjAgU3luYyBQb2xhcml0eSAoQ1ZUIFJlZHVjZSBCbGFua2luZyBNb2RlKSAqLworI2RlZmluZSBNMTkyMFgxMjAwX1JCX1I2MF9IU1AgIFBPU0lUSVZFCisjZGVmaW5lIE0xOTIwWDEyMDBfUkJfUjYwX1ZTUCAgTkVHQVRJVkUKKworLyogMTkyMHgxMDgwQDYwIFN5bmMgUG9sYXJpdHkgIChDRUEgTW9kZSkgKi8KKyNkZWZpbmUgTTE5MjBYMTA4MF9DRUFfUjYwX0hTUCAgICAgICBQT1NJVElWRQorI2RlZmluZSBNMTkyMFgxMDgwX0NFQV9SNjBfVlNQICAgICAgIFBPU0lUSVZFCisKKy8qIDIwNDh4MTUzNkA2MCBTeW5jIFBvbGFyaXR5IChDVlQgTW9kZSkgKi8KKyNkZWZpbmUgTTIwNDh4MTUzNl9SNjBfSFNQICAgICAgTkVHQVRJVkUKKyNkZWZpbmUgTTIwNDh4MTUzNl9SNjBfVlNQICAgICAgUE9TSVRJVkUKKworLyogZGVmaW5lIFBMTCBpbmRleDogKi8KKyNkZWZpbmUgQ0xLXzI1XzE3NU0gICAgIDI1MTc1MDAwCisjZGVmaW5lIENMS18yNl84ODBNICAgICAyNjg4MDAwMAorI2RlZmluZSBDTEtfMjlfNTgxTSAgICAgMjk1ODEwMDAKKyNkZWZpbmUgQ0xLXzMxXzQ5ME0gICAgIDMxNDkwMDAwCisjZGVmaW5lIENMS18zMV81MDBNICAgICAzMTUwMDAwMAorI2RlZmluZSBDTEtfMzFfNzI4TSAgICAgMzE3MjgwMDAKKyNkZWZpbmUgQ0xLXzMyXzY2OE0gICAgIDMyNjg4MDAwCisjZGVmaW5lIENMS18zNl8wMDBNICAgICAzNjAwMDAwMAorI2RlZmluZSBDTEtfNDBfMDAwTSAgICAgNDAwMDAwMDAKKyNkZWZpbmUgQ0xLXzQxXzI5MU0gICAgIDQxMjkxMDAwCisjZGVmaW5lIENMS180M18xNjNNICAgICA0MzE2MzAwMAorI2RlZmluZSBDTEtfNDVfMjUwTSAgICAgNDUyNTAwMDAJLyogNDUuNDZNSHogKi8KKyNkZWZpbmUgQ0xLXzQ2XzAwME0gICAgIDQ2MDAwMDAwCisjZGVmaW5lIENMS180Nl85OTZNICAgICA0Njk5NjAwMAorI2RlZmluZSBDTEtfNDhfMDAwTSAgICAgNDgwMDAwMDAKKyNkZWZpbmUgQ0xLXzQ4Xzg3NU0gICAgIDQ4ODc1MDAwCisjZGVmaW5lIENMS180OV81MDBNICAgICA0OTUwMDAwMAorI2RlZmluZSBDTEtfNTJfNDA2TSAgICAgNTI0MDYwMDAKKyNkZWZpbmUgQ0xLXzUyXzk3N00gICAgIDUyOTc3MDAwCisjZGVmaW5lIENMS181Nl8yNTBNICAgICA1NjI1MDAwMAorI2RlZmluZSBDTEtfNjBfNDY2TSAgICAgNjA0NjYwMDAKKyNkZWZpbmUgQ0xLXzYxXzUwME0gICAgIDYxNTAwMDAwCisjZGVmaW5lIENMS182NV8wMDBNICAgICA2NTAwMDAwMAorI2RlZmluZSBDTEtfNjVfMTc4TSAgICAgNjUxNzgwMDAKKyNkZWZpbmUgQ0xLXzY2Xzc1ME0gICAgIDY2NzUwMDAwCS8qIDY3LjExNk1IeiAqLworI2RlZmluZSBDTEtfNjhfMTc5TSAgICAgNjgxNzkwMDAKKyNkZWZpbmUgQ0xLXzY5XzkyNE0gICAgIDY5OTI0MDAwCisjZGVmaW5lIENMS183MF8xNTlNICAgICA3MDE1OTAwMAorI2RlZmluZSBDTEtfNzJfMDAwTSAgICAgNzIwMDAwMDAKKyNkZWZpbmUgQ0xLXzc0XzI3ME0gICAgIDc0MjcwMDAwCisjZGVmaW5lIENMS183OF83NTBNICAgICA3ODc1MDAwMAorI2RlZmluZSBDTEtfODBfMTM2TSAgICAgODAxMzYwMDAKKyNkZWZpbmUgQ0xLXzgzXzM3NU0gICAgIDgzMzc1MDAwCisjZGVmaW5lIENMS184M185NTBNICAgICA4Mzk1MDAwMAorI2RlZmluZSBDTEtfODRfNzUwTSAgICAgODQ3NTAwMDAJLyogODQuNTM3TWh6ICovCisjZGVmaW5lIENMS184NV84NjBNICAgICA4NTg2MDAwMAorI2RlZmluZSBDTEtfODhfNzUwTSAgICAgODg3NTAwMDAKKyNkZWZpbmUgQ0xLXzk0XzUwME0gICAgIDk0NTAwMDAwCisjZGVmaW5lIENMS185N183NTBNICAgICA5Nzc1MDAwMAorI2RlZmluZSBDTEtfMTAxXzAwME0gICAgMTAxMDAwMDAwCisjZGVmaW5lIENMS18xMDZfNTAwTSAgICAxMDY1MDAwMDAKKyNkZWZpbmUgQ0xLXzEwOF8wMDBNICAgIDEwODAwMDAwMAorI2RlZmluZSBDTEtfMTEzXzMwOU0gICAgMTEzMzA5MDAwCisjZGVmaW5lIENMS18xMThfODQwTSAgICAxMTg4NDAwMDAKKyNkZWZpbmUgQ0xLXzExOV8wMDBNICAgIDExOTAwMDAwMAorI2RlZmluZSBDTEtfMTIxXzc1ME0gICAgMTIxNzUwMDAwCS8qIDEyMS43MDRNSHogKi8KKyNkZWZpbmUgQ0xLXzEyNV8xMDRNICAgIDEyNTEwNDAwMAorI2RlZmluZSBDTEtfMTMzXzMwOE0gICAgMTMzMzA4MDAwCisjZGVmaW5lIENMS18xMzVfMDAwTSAgICAxMzUwMDAwMDAKKyNkZWZpbmUgQ0xLXzEzNl83MDBNICAgIDEzNjcwMDAwMAorI2RlZmluZSBDTEtfMTM4XzQwME0gICAgMTM4NDAwMDAwCisjZGVmaW5lIENMS18xNDZfNzYwTSAgICAxNDY3NjAwMDAKKyNkZWZpbmUgQ0xLXzE0OF81MDBNICAgIDE0ODUwMDAwMAorCisjZGVmaW5lIENMS18xNTNfOTIwTSAgICAxNTM5MjAwMDAKKyNkZWZpbmUgQ0xLXzE1Nl8wMDBNICAgIDE1NjAwMDAwMAorI2RlZmluZSBDTEtfMTU3XzUwME0gICAgMTU3NTAwMDAwCisjZGVmaW5lIENMS18xNjJfMDAwTSAgICAxNjIwMDAwMDAKKyNkZWZpbmUgQ0xLXzE4N18wMDBNICAgIDE4NzAwMDAwMAorI2RlZmluZSBDTEtfMTkzXzI5NU0gICAgMTkzMjk1MDAwCisjZGVmaW5lIENMS18yMDJfNTAwTSAgICAyMDI1MDAwMDAKKyNkZWZpbmUgQ0xLXzIwNF8wMDBNICAgIDIwNDAwMDAwMAorI2RlZmluZSBDTEtfMjE4XzUwME0gICAgMjE4NTAwMDAwCisjZGVmaW5lIENMS18yMzRfMDAwTSAgICAyMzQwMDAwMDAKKyNkZWZpbmUgQ0xLXzI2N18yNTBNICAgIDI2NzI1MDAwMAorI2RlZmluZSBDTEtfMjk3XzUwME0gICAgMjk3NTAwMDAwCisjZGVmaW5lIENMS183NF80ODFNICAgICA3NDQ4MTAwMAorI2RlZmluZSBDTEtfMTcyXzc5OE0gICAgMTcyNzk4MDAwCisjZGVmaW5lIENMS18xMjJfNjE0TSAgICAxMjI2MTQwMDAKKworLyogQ0xFMjY2IFBMTCB2YWx1ZQorKi8KKyNkZWZpbmUgQ0xFMjY2X1BMTF8yNV8xNzVNICAgICAweDAwMDBDNzYzCisjZGVmaW5lIENMRTI2Nl9QTExfMjZfODgwTSAgICAgMHgwMDAwNDQwRgorI2RlZmluZSBDTEUyNjZfUExMXzI5XzU4MU0gICAgIDB4MDAwMDg0MjEKKyNkZWZpbmUgQ0xFMjY2X1BMTF8zMV80OTBNICAgICAweDAwMDA0NzIxCisjZGVmaW5lIENMRTI2Nl9QTExfMzFfNTAwTSAgICAgMHgwMDAwQzNCNQorI2RlZmluZSBDTEUyNjZfUExMXzMxXzcyOE0gICAgIDB4MDAwMDQ3MUYKKyNkZWZpbmUgQ0xFMjY2X1BMTF8zMl82NjhNICAgICAweDAwMDBDNDQ5CisjZGVmaW5lIENMRTI2Nl9QTExfMzZfMDAwTSAgICAgMHgwMDAwQzVFNQorI2RlZmluZSBDTEUyNjZfUExMXzQwXzAwME0gICAgIDB4MDAwMEM0NTkKKyNkZWZpbmUgQ0xFMjY2X1BMTF80MV8yOTFNICAgICAweDAwMDA0NDE3CisjZGVmaW5lIENMRTI2Nl9QTExfNDNfMTYzTSAgICAgMHgwMDAwQzU3OQorI2RlZmluZSBDTEUyNjZfUExMXzQ1XzI1ME0gICAgIDB4MDAwMEM1N0YJLyogNDUuNDZNSHogKi8KKyNkZWZpbmUgQ0xFMjY2X1BMTF80Nl8wMDBNICAgICAweDAwMDA4NzVBCisjZGVmaW5lIENMRTI2Nl9QTExfNDZfOTk2TSAgICAgMHgwMDAwQzRFOQorI2RlZmluZSBDTEUyNjZfUExMXzQ4XzAwME0gICAgIDB4MDAwMDE0NDMKKyNkZWZpbmUgQ0xFMjY2X1BMTF80OF84NzVNICAgICAweDAwMDAxRDYzCisjZGVmaW5lIENMRTI2Nl9QTExfNDlfNTAwTSAgICAgMHgwMDAwODY1MworI2RlZmluZSBDTEUyNjZfUExMXzUyXzQwNk0gICAgIDB4MDAwMEM0NzUKKyNkZWZpbmUgQ0xFMjY2X1BMTF81Ml85NzdNICAgICAweDAwMDA0NTI1CisjZGVmaW5lIENMRTI2Nl9QTExfNTZfMjUwTSAgICAgMHgwMDAwNDdCNworI2RlZmluZSBDTEUyNjZfUExMXzYwXzQ2Nk0gICAgIDB4MDAwMDQ5NEMKKyNkZWZpbmUgQ0xFMjY2X1BMTF82MV81MDBNICAgICAweDAwMDAxNDU2CisjZGVmaW5lIENMRTI2Nl9QTExfNjVfMDAwTSAgICAgMHgwMDAwODZFRAorI2RlZmluZSBDTEUyNjZfUExMXzY1XzE3OE0gICAgIDB4MDAwMDg1NUIKKyNkZWZpbmUgQ0xFMjY2X1BMTF82Nl83NTBNICAgICAweDAwMDA4NDRCCS8qIDY3LjExNk1IeiAqLworI2RlZmluZSBDTEUyNjZfUExMXzY4XzE3OU0gICAgIDB4MDAwMDA0MTMKKyNkZWZpbmUgQ0xFMjY2X1BMTF82OV85MjRNICAgICAweDAwMDAxMTUzCisjZGVmaW5lIENMRTI2Nl9QTExfNzBfMTU5TSAgICAgMHgwMDAwMTQ2MgorI2RlZmluZSBDTEUyNjZfUExMXzcyXzAwME0gICAgIDB4MDAwMDE4NzkKKyNkZWZpbmUgQ0xFMjY2X1BMTF83NF8yNzBNICAgICAweDAwMDA0ODUzCisjZGVmaW5lIENMRTI2Nl9QTExfNzhfNzUwTSAgICAgMHgwMDAwNDMyMQorI2RlZmluZSBDTEUyNjZfUExMXzgwXzEzNk0gICAgIDB4MDAwMDA1MUMKKyNkZWZpbmUgQ0xFMjY2X1BMTF84M18zNzVNICAgICAweDAwMDBDMjVECisjZGVmaW5lIENMRTI2Nl9QTExfODNfOTUwTSAgICAgMHgwMDAwMDcyOQorI2RlZmluZSBDTEUyNjZfUExMXzg0Xzc1ME0gICAgIDB4MDAwMDg1NzYJLyogODQuNTM3TUh6ICovCisjZGVmaW5lIENMRTI2Nl9QTExfODVfODYwTSAgICAgMHgwMDAwNDc1NAorI2RlZmluZSBDTEUyNjZfUExMXzg4Xzc1ME0gICAgIDB4MDAwMDA1MUYKKyNkZWZpbmUgQ0xFMjY2X1BMTF85NF81MDBNICAgICAweDAwMDAwNTIxCisjZGVmaW5lIENMRTI2Nl9QTExfOTdfNzUwTSAgICAgMHgwMDAwNDY1MgorI2RlZmluZSBDTEUyNjZfUExMXzEwMV8wMDBNICAgIDB4MDAwMDQ5N0YKKyNkZWZpbmUgQ0xFMjY2X1BMTF8xMDZfNTAwTSAgICAweDAwMDA4NDc3CS8qIDEwNi40OTE0NjMgTUh6ICovCisjZGVmaW5lIENMRTI2Nl9QTExfMTA4XzAwME0gICAgMHgwMDAwODQ3OQorI2RlZmluZSBDTEUyNjZfUExMXzExM18zMDlNICAgIDB4MDAwMDBDNUYKKyNkZWZpbmUgQ0xFMjY2X1BMTF8xMThfODQwTSAgICAweDAwMDA0NTUzCisjZGVmaW5lIENMRTI2Nl9QTExfMTE5XzAwME0gICAgMHgwMDAwMEQ2QworI2RlZmluZSBDTEUyNjZfUExMXzEyMV83NTBNICAgIDB4MDAwMDQ1NTUJLyogMTIxLjcwNE1IeiAqLworI2RlZmluZSBDTEUyNjZfUExMXzEyNV8xMDRNICAgIDB4MDAwMDA2QjUKKyNkZWZpbmUgQ0xFMjY2X1BMTF8xMzNfMzA4TSAgICAweDAwMDA0NjVGCisjZGVmaW5lIENMRTI2Nl9QTExfMTM1XzAwME0gICAgMHgwMDAwNDU1RQorI2RlZmluZSBDTEUyNjZfUExMXzEzNl83MDBNICAgIDB4MDAwMDBDNzMKKyNkZWZpbmUgQ0xFMjY2X1BMTF8xMzhfNDAwTSAgICAweDAwMDAwOTU3CisjZGVmaW5lIENMRTI2Nl9QTExfMTQ2Xzc2ME0gICAgMHgwMDAwNDU2NworI2RlZmluZSBDTEUyNjZfUExMXzE0OF81MDBNICAgIDB4MDAwMDA4NTMKKyNkZWZpbmUgQ0xFMjY2X1BMTF8xNTNfOTIwTSAgICAweDAwMDAwODU2CisjZGVmaW5lIENMRTI2Nl9QTExfMTU2XzAwME0gICAgMHgwMDAwNDU2RAorI2RlZmluZSBDTEUyNjZfUExMXzE1N181MDBNICAgIDB4MDAwMDA1QjcKKyNkZWZpbmUgQ0xFMjY2X1BMTF8xNjJfMDAwTSAgICAweDAwMDA0NTcxCisjZGVmaW5lIENMRTI2Nl9QTExfMTg3XzAwME0gICAgMHgwMDAwMDk3NgorI2RlZmluZSBDTEUyNjZfUExMXzE5M18yOTVNICAgIDB4MDAwMDA4NkMKKyNkZWZpbmUgQ0xFMjY2X1BMTF8yMDJfNTAwTSAgICAweDAwMDAwNzYzCisjZGVmaW5lIENMRTI2Nl9QTExfMjA0XzAwME0gICAgMHgwMDAwMDc2NAorI2RlZmluZSBDTEUyNjZfUExMXzIxOF81MDBNICAgIDB4MDAwMDA2NUMKKyNkZWZpbmUgQ0xFMjY2X1BMTF8yMzRfMDAwTSAgICAweDAwMDAwNjYyCisjZGVmaW5lIENMRTI2Nl9QTExfMjY3XzI1ME0gICAgMHgwMDAwMDY3MAorI2RlZmluZSBDTEUyNjZfUExMXzI5N181MDBNICAgIDB4MDAwMDA1RTYKKyNkZWZpbmUgQ0xFMjY2X1BMTF83NF80ODFNICAgICAweDAwMDAwNTFBCisjZGVmaW5lIENMRTI2Nl9QTExfMTcyXzc5OE0gICAgMHgwMDAwNDU3OQorI2RlZmluZSBDTEUyNjZfUExMXzEyMl82MTRNICAgIDB4MDAwMDA3M0MKKworLyogSzgwMCBQTEwgdmFsdWUKKyovCisjZGVmaW5lIEs4MDBfUExMXzI1XzE3NU0gICAgIDB4MDA1MzkwMDEKKyNkZWZpbmUgSzgwMF9QTExfMjZfODgwTSAgICAgMHgwMDFDOEM4MAorI2RlZmluZSBLODAwX1BMTF8yOV81ODFNICAgICAweDAwNDA5MDgwCisjZGVmaW5lIEs4MDBfUExMXzMxXzQ5ME0gICAgIDB4MDA2RjkwMDEKKyNkZWZpbmUgSzgwMF9QTExfMzFfNTAwTSAgICAgMHgwMDhCOTAwMgorI2RlZmluZSBLODAwX1BMTF8zMV83MjhNICAgICAweDAwQUY5MDAzCisjZGVmaW5lIEs4MDBfUExMXzMyXzY2OE0gICAgIDB4MDA5MDkwMDIKKyNkZWZpbmUgSzgwMF9QTExfMzZfMDAwTSAgICAgMHgwMDlGOTAwMgorI2RlZmluZSBLODAwX1BMTF80MF8wMDBNICAgICAweDAwNTc4QzAyCisjZGVmaW5lIEs4MDBfUExMXzQxXzI5MU0gICAgIDB4MDA0MzhDMDEKKyNkZWZpbmUgSzgwMF9QTExfNDNfMTYzTSAgICAgMHgwMDc3OEMwMworI2RlZmluZSBLODAwX1BMTF80NV8yNTBNICAgICAweDAwN0Q4QzgzCS8qIDQ1LjQ2TUh6ICovCisjZGVmaW5lIEs4MDBfUExMXzQ2XzAwME0gICAgIDB4MDA2NThDMDIKKyNkZWZpbmUgSzgwMF9QTExfNDZfOTk2TSAgICAgMHgwMDgxOEM4MworI2RlZmluZSBLODAwX1BMTF80OF8wMDBNICAgICAweDAwODQ4QzgzCisjZGVmaW5lIEs4MDBfUExMXzQ4Xzg3NU0gICAgIDB4MDA1MDhDODEKKyNkZWZpbmUgSzgwMF9QTExfNDlfNTAwTSAgICAgMHgwMDUxOEMwMQorI2RlZmluZSBLODAwX1BMTF81Ml80MDZNICAgICAweDAwNzM4QzAyCisjZGVmaW5lIEs4MDBfUExMXzUyXzk3N00gICAgIDB4MDA5MjhDODMKKyNkZWZpbmUgSzgwMF9QTExfNTZfMjUwTSAgICAgMHgwMDdDOEMwMgorI2RlZmluZSBLODAwX1BMTF82MF80NjZNICAgICAweDAwQTc4QzgzCisjZGVmaW5lIEs4MDBfUExMXzYxXzUwME0gICAgIDB4MDBBQThDODMKKyNkZWZpbmUgSzgwMF9QTExfNjVfMDAwTSAgICAgMHgwMDZCOEMwMQorI2RlZmluZSBLODAwX1BMTF82NV8xNzhNICAgICAweDAwQjQ4QzgzCisjZGVmaW5lIEs4MDBfUExMXzY2Xzc1ME0gICAgIDB4MDA5NDhDODIJLyogNjcuMTE2TUh6ICovCisjZGVmaW5lIEs4MDBfUExMXzY4XzE3OU0gICAgIDB4MDA3MDhDMDEKKyNkZWZpbmUgSzgwMF9QTExfNjlfOTI0TSAgICAgMHgwMEMxOEM4MworI2RlZmluZSBLODAwX1BMTF83MF8xNTlNICAgICAweDAwQzI4QzgzCisjZGVmaW5lIEs4MDBfUExMXzcyXzAwME0gICAgIDB4MDA5RjhDODIKKyNkZWZpbmUgSzgwMF9QTExfNzRfMjcwTSAgICAgMHgwMGNlMGMwMworI2RlZmluZSBLODAwX1BMTF83OF83NTBNICAgICAweDAwNDA4ODAxCisjZGVmaW5lIEs4MDBfUExMXzgwXzEzNk0gICAgIDB4MDA0Mjg4MDEKKyNkZWZpbmUgSzgwMF9QTExfODNfMzc1TSAgICAgMHgwMDVCMDg4MgorI2RlZmluZSBLODAwX1BMTF84M185NTBNICAgICAweDAwNzM4ODAzCisjZGVmaW5lIEs4MDBfUExMXzg0Xzc1ME0gICAgIDB4MDA3NDg4ODMJLyogODQuNDc3TUh6ICovCisjZGVmaW5lIEs4MDBfUExMXzg1Xzg2ME0gICAgIDB4MDA3Njg4ODMKKyNkZWZpbmUgSzgwMF9QTExfODhfNzUwTSAgICAgMHgwMDdBODg4MworI2RlZmluZSBLODAwX1BMTF85NF81MDBNICAgICAweDAwODI4ODAzCisjZGVmaW5lIEs4MDBfUExMXzk3Xzc1ME0gICAgIDB4MDA4Nzg4ODMKKyNkZWZpbmUgSzgwMF9QTExfMTAxXzAwME0gICAgMHgwMDhCODg4MworI2RlZmluZSBLODAwX1BMTF8xMDZfNTAwTSAgICAweDAwNzU4ODgyCS8qIDEwNi40OTE0NjMgTUh6ICovCisjZGVmaW5lIEs4MDBfUExMXzEwOF8wMDBNICAgIDB4MDA3Nzg4ODIKKyNkZWZpbmUgSzgwMF9QTExfMTEzXzMwOU0gICAgMHgwMDVEODg4MQorI2RlZmluZSBLODAwX1BMTF8xMThfODQwTSAgICAweDAwQTQ4ODgzCisjZGVmaW5lIEs4MDBfUExMXzExOV8wMDBNICAgIDB4MDA4Mzg4ODIKKyNkZWZpbmUgSzgwMF9QTExfMTIxXzc1ME0gICAgMHgwMEE4ODg4MwkvKiAxMjEuNzA0TUh6ICovCisjZGVmaW5lIEs4MDBfUExMXzEyNV8xMDRNICAgIDB4MDA2ODg4MDEKKyNkZWZpbmUgSzgwMF9QTExfMTMzXzMwOE0gICAgMHgwMDVEODgwMQorI2RlZmluZSBLODAwX1BMTF8xMzVfMDAwTSAgICAweDAwMUE0MDgxCisjZGVmaW5lIEs4MDBfUExMXzEzNl83MDBNICAgIDB4MDBCRDg4ODMKKyNkZWZpbmUgSzgwMF9QTExfMTM4XzQwME0gICAgMHgwMDcyODg4MQorI2RlZmluZSBLODAwX1BMTF8xNDZfNzYwTSAgICAweDAwQ0M4ODgzCisjZGVmaW5lIEs4MDBfUExMXzE0OF81MDBNICAgIDB4MDBjZTA4MDMKKyNkZWZpbmUgSzgwMF9QTExfMTUzXzkyME0gICAgMHgwMDU0ODQ4MgorI2RlZmluZSBLODAwX1BMTF8xNTZfMDAwTSAgICAweDAwNkI4NDgzCisjZGVmaW5lIEs4MDBfUExMXzE1N181MDBNICAgIDB4MDAxNDIwODAKKyNkZWZpbmUgSzgwMF9QTExfMTYyXzAwME0gICAgMHgwMDZGODQ4MworI2RlZmluZSBLODAwX1BMTF8xODdfMDAwTSAgICAweDAwODE4NDgzCisjZGVmaW5lIEs4MDBfUExMXzE5M18yOTVNICAgIDB4MDA0Rjg0ODEKKyNkZWZpbmUgSzgwMF9QTExfMjAyXzUwME0gICAgMHgwMDUzODQ4MQorI2RlZmluZSBLODAwX1BMTF8yMDRfMDAwTSAgICAweDAwOEQ4NDgzCisjZGVmaW5lIEs4MDBfUExMXzIxOF81MDBNICAgIDB4MDA5Nzg0ODMKKyNkZWZpbmUgSzgwMF9QTExfMjM0XzAwME0gICAgMHgwMDYwODQwMQorI2RlZmluZSBLODAwX1BMTF8yNjdfMjUwTSAgICAweDAwNkU4NDgxCisjZGVmaW5lIEs4MDBfUExMXzI5N181MDBNICAgIDB4MDBBNDg0MDIKKyNkZWZpbmUgSzgwMF9QTExfNzRfNDgxTSAgICAgMHgwMDdCOEM4MQorI2RlZmluZSBLODAwX1BMTF8xNzJfNzk4TSAgICAweDAwNzc4NDgzCisjZGVmaW5lIEs4MDBfUExMXzEyMl82MTRNICAgIDB4MDA4Nzg4ODIKKworLyogUExMIGZvciBWVDMzMjQgKi8KKyNkZWZpbmUgQ1g3MDBfMjVfMTc1TSAgICAgMHgwMDhCMTAwMworI2RlZmluZSBDWDcwMF8yNl83MTlNICAgICAweDAwOTMxMDAzCisjZGVmaW5lIENYNzAwXzI2Xzg4ME0gICAgIDB4MDA5NDEwMDMKKyNkZWZpbmUgQ1g3MDBfMjlfNTgxTSAgICAgMHgwMEE0OTAwMworI2RlZmluZSBDWDcwMF8zMV80OTBNICAgICAweDAwQUUxMDAzCisjZGVmaW5lIENYNzAwXzMxXzUwME0gICAgIDB4MDBBRTEwMDMKKyNkZWZpbmUgQ1g3MDBfMzFfNzI4TSAgICAgMHgwMEFGMTAwMworI2RlZmluZSBDWDcwMF8zMl82NjhNICAgICAweDAwQjUxMDAzCisjZGVmaW5lIENYNzAwXzM2XzAwME0gICAgIDB4MDBDODEwMDMKKyNkZWZpbmUgQ1g3MDBfNDBfMDAwTSAgICAgMHgwMDZFMEMwMworI2RlZmluZSBDWDcwMF80MV8yOTFNICAgICAweDAwNzEwQzAzCisjZGVmaW5lIENYNzAwXzQzXzE2M00gICAgIDB4MDA3NzBDMDMKKyNkZWZpbmUgQ1g3MDBfNDVfMjUwTSAgICAgMHgwMDdEMEMwMwkvKiA0NS40Nk1IeiAqLworI2RlZmluZSBDWDcwMF80Nl8wMDBNICAgICAweDAwN0YwQzAzCisjZGVmaW5lIENYNzAwXzQ2Xzk5Nk0gICAgIDB4MDA4MThDODMKKyNkZWZpbmUgQ1g3MDBfNDhfMDAwTSAgICAgMHgwMDg0MEMwMworI2RlZmluZSBDWDcwMF80OF84NzVNICAgICAweDAwNTA4QzgxCisjZGVmaW5lIENYNzAwXzQ5XzUwME0gICAgIDB4MDA4ODBDMDMKKyNkZWZpbmUgQ1g3MDBfNTJfNDA2TSAgICAgMHgwMDczMEMwMgorI2RlZmluZSBDWDcwMF81Ml85NzdNICAgICAweDAwOTIwQzAzCisjZGVmaW5lIENYNzAwXzU2XzI1ME0gICAgIDB4MDA5QjBDMDMKKyNkZWZpbmUgQ1g3MDBfNjBfNDY2TSAgICAgMHgwMDQ2MEMwMAorI2RlZmluZSBDWDcwMF82MV81MDBNICAgICAweDAwQUEwQzAzCisjZGVmaW5lIENYNzAwXzY1XzAwME0gICAgIDB4MDA2QjBDMDEKKyNkZWZpbmUgQ1g3MDBfNjVfMTc4TSAgICAgMHgwMDZCMEMwMQorI2RlZmluZSBDWDcwMF82Nl83NTBNICAgICAweDAwOTQwQzAyCS8qNjcuMTE2TUh6ICovCisjZGVmaW5lIENYNzAwXzY4XzE3OU0gICAgIDB4MDBCQzBDMDMKKyNkZWZpbmUgQ1g3MDBfNjlfOTI0TSAgICAgMHgwMEMxMEMwMworI2RlZmluZSBDWDcwMF83MF8xNTlNICAgICAweDAwQzIwQzAzCisjZGVmaW5lIENYNzAwXzcyXzAwME0gICAgIDB4MDA5RjBDMDIKKyNkZWZpbmUgQ1g3MDBfNzRfMjcwTSAgICAgMHgwMENFMEMwMworI2RlZmluZSBDWDcwMF83NF80ODFNICAgICAweDAwQ0UwQzAzCisjZGVmaW5lIENYNzAwXzc4Xzc1ME0gICAgIDB4MDA2QzA4MDMKKyNkZWZpbmUgQ1g3MDBfODBfMTM2TSAgICAgMHgwMDZFMDgwMworI2RlZmluZSBDWDcwMF84M18zNzVNICAgICAweDAwNUIwODgyCisjZGVmaW5lIENYNzAwXzgzXzk1ME0gICAgIDB4MDA3MzA4MDMKKyNkZWZpbmUgQ1g3MDBfODRfNzUwTSAgICAgMHgwMDc0MDgwMwkvKiA4NC41MzdNaHogKi8KKyNkZWZpbmUgQ1g3MDBfODVfODYwTSAgICAgMHgwMDc2MDgwMworI2RlZmluZSBDWDcwMF84OF83NTBNICAgICAweDAwQUM4ODg1CisjZGVmaW5lIENYNzAwXzk0XzUwME0gICAgIDB4MDA4MjA4MDMKKyNkZWZpbmUgQ1g3MDBfOTdfNzUwTSAgICAgMHgwMDg3MDgwMworI2RlZmluZSBDWDcwMF8xMDFfMDAwTSAgICAweDAwOEIwODAzCisjZGVmaW5lIENYNzAwXzEwNl81MDBNICAgIDB4MDA3NTA4MDIKKyNkZWZpbmUgQ1g3MDBfMTA4XzAwME0gICAgMHgwMDk1MDgwMworI2RlZmluZSBDWDcwMF8xMTNfMzA5TSAgICAweDAwNUQwODAxCisjZGVmaW5lIENYNzAwXzExOF84NDBNICAgIDB4MDBBNDA4MDMKKyNkZWZpbmUgQ1g3MDBfMTE5XzAwME0gICAgMHgwMDgzMDgwMgorI2RlZmluZSBDWDcwMF8xMjFfNzUwTSAgICAweDAwNDIwODAwCS8qIDEyMS43MDRNSHogKi8KKyNkZWZpbmUgQ1g3MDBfMTI1XzEwNE0gICAgMHgwMEFEMDgwMworI2RlZmluZSBDWDcwMF8xMzNfMzA4TSAgICAweDAwOTMwODAyCisjZGVmaW5lIENYNzAwXzEzNV8wMDBNICAgIDB4MDA5NTA4MDIKKyNkZWZpbmUgQ1g3MDBfMTM2XzcwME0gICAgMHgwMEJEMDgwMworI2RlZmluZSBDWDcwMF8xMzhfNDAwTSAgICAweDAwNzIwODAxCisjZGVmaW5lIENYNzAwXzE0Nl83NjBNICAgIDB4MDBDQzA4MDMKKyNkZWZpbmUgQ1g3MDBfMTQ4XzUwME0gICAgMHgwMGE0MDgwMgorI2RlZmluZSBDWDcwMF8xNTNfOTIwTSAgICAweDAwNTQwNDAyCisjZGVmaW5lIENYNzAwXzE1Nl8wMDBNICAgIDB4MDA2QjA0MDMKKyNkZWZpbmUgQ1g3MDBfMTU3XzUwME0gICAgMHgwMDZDMDQwMworI2RlZmluZSBDWDcwMF8xNjJfMDAwTSAgICAweDAwNkYwNDAzCisjZGVmaW5lIENYNzAwXzE3Ml83OThNICAgIDB4MDA3NzA0MDMKKyNkZWZpbmUgQ1g3MDBfMTg3XzAwME0gICAgMHgwMDgxMDQwMworI2RlZmluZSBDWDcwMF8xOTNfMjk1TSAgICAweDAwODUwNDAzCisjZGVmaW5lIENYNzAwXzIwMl81MDBNICAgIDB4MDA4QzA0MDMKKyNkZWZpbmUgQ1g3MDBfMjA0XzAwME0gICAgMHgwMDhEMDQwMworI2RlZmluZSBDWDcwMF8yMThfNTAwTSAgICAweDAwOTcwNDAzCisjZGVmaW5lIENYNzAwXzIzNF8wMDBNICAgIDB4MDA2MDA0MDEKKyNkZWZpbmUgQ1g3MDBfMjY3XzI1ME0gICAgMHgwMEI5MDQwMworI2RlZmluZSBDWDcwMF8yOTdfNTAwTSAgICAweDAwQ0UwNDAzCisjZGVmaW5lIENYNzAwXzEyMl82MTRNICAgIDB4MDA4NzA4MDIKKworLyogRGVmaW5pdGlvbiBDUlRDIFRpbWluZyBJbmRleCAqLworI2RlZmluZSBIX1RPVEFMX0lOREVYICAgICAgICAgICAgICAgMAorI2RlZmluZSBIX0FERFJfSU5ERVggICAgICAgICAgICAgICAgMQorI2RlZmluZSBIX0JMQU5LX1NUQVJUX0lOREVYICAgICAgICAgMgorI2RlZmluZSBIX0JMQU5LX0VORF9JTkRFWCAgICAgICAgICAgMworI2RlZmluZSBIX1NZTkNfU1RBUlRfSU5ERVggICAgICAgICAgNAorI2RlZmluZSBIX1NZTkNfRU5EX0lOREVYICAgICAgICAgICAgNQorI2RlZmluZSBWX1RPVEFMX0lOREVYICAgICAgICAgICAgICAgNgorI2RlZmluZSBWX0FERFJfSU5ERVggICAgICAgICAgICAgICAgNworI2RlZmluZSBWX0JMQU5LX1NUQVJUX0lOREVYICAgICAgICAgOAorI2RlZmluZSBWX0JMQU5LX0VORF9JTkRFWCAgICAgICAgICAgOQorI2RlZmluZSBWX1NZTkNfU1RBUlRfSU5ERVggICAgICAgICAgMTAKKyNkZWZpbmUgVl9TWU5DX0VORF9JTkRFWCAgICAgICAgICAgIDExCisjZGVmaW5lIEhfVE9UQUxfU0hBRE9XX0lOREVYICAgICAgICAxMgorI2RlZmluZSBIX0JMQU5LX0VORF9TSEFET1dfSU5ERVggICAgMTMKKyNkZWZpbmUgVl9UT1RBTF9TSEFET1dfSU5ERVggICAgICAgIDE0CisjZGVmaW5lIFZfQUREUl9TSEFET1dfSU5ERVggICAgICAgICAxNQorI2RlZmluZSBWX0JMQU5LX1NBVFJUX1NIQURPV19JTkRFWCAgMTYKKyNkZWZpbmUgVl9CTEFOS19FTkRfU0hBRE9XX0lOREVYICAgIDE3CisjZGVmaW5lIFZfU1lOQ19TQVRSVF9TSEFET1dfSU5ERVggICAxOAorI2RlZmluZSBWX1NZTkNfRU5EX1NIQURPV19JTkRFWCAgICAgMTkKKworLyogRGVmaW5pdGlvbiBWaWRlbyBNb2RlIFBpeGVsIENsb2NrIChwaWNvc2Vjb25kcykKKyovCisjZGVmaW5lIFJFU180ODBYNjQwXzYwSFpfUElYQ0xPQ0sgICAgMzk3MjIKKyNkZWZpbmUgUkVTXzY0MFg0ODBfNjBIWl9QSVhDTE9DSyAgICAzOTcyMgorI2RlZmluZSBSRVNfNjQwWDQ4MF83NUhaX1BJWENMT0NLICAgIDMxNzQ3CisjZGVmaW5lIFJFU182NDBYNDgwXzg1SFpfUElYQ0xPQ0sgICAgMjc3NzcKKyNkZWZpbmUgUkVTXzY0MFg0ODBfMTAwSFpfUElYQ0xPQ0sgICAyMzE2OAorI2RlZmluZSBSRVNfNjQwWDQ4MF8xMjBIWl9QSVhDTE9DSyAgIDE5MDgxCisjZGVmaW5lIFJFU183MjBYNDgwXzYwSFpfUElYQ0xPQ0sgICAgMzcwMjAKKyNkZWZpbmUgUkVTXzcyMFg1NzZfNjBIWl9QSVhDTE9DSyAgICAzMDYxMQorI2RlZmluZSBSRVNfODAwWDYwMF82MEhaX1BJWENMT0NLICAgIDI1MDAwCisjZGVmaW5lIFJFU184MDBYNjAwXzc1SFpfUElYQ0xPQ0sgICAgMjAyMDMKKyNkZWZpbmUgUkVTXzgwMFg2MDBfODVIWl9QSVhDTE9DSyAgICAxNzc3NworI2RlZmluZSBSRVNfODAwWDYwMF8xMDBIWl9QSVhDTE9DSyAgIDE0NjY3CisjZGVmaW5lIFJFU184MDBYNjAwXzEyMEhaX1BJWENMT0NLICAgMTE5MTIKKyNkZWZpbmUgUkVTXzgwMFg0ODBfNjBIWl9QSVhDTE9DSyAgICAzMzgwNQorI2RlZmluZSBSRVNfODQ4WDQ4MF82MEhaX1BJWENMT0NLICAgIDMxNzU2CisjZGVmaW5lIFJFU184NTZYNDgwXzYwSFpfUElYQ0xPQ0sgICAgMzE1MTgKKyNkZWZpbmUgUkVTXzEwMjRYNTEyXzYwSFpfUElYQ0xPQ0sgICAyNDIxOAorI2RlZmluZSBSRVNfMTAyNFg2MDBfNjBIWl9QSVhDTE9DSyAgIDIwNDYwCisjZGVmaW5lIFJFU18xMDI0WDc2OF82MEhaX1BJWENMT0NLICAgMTUzODUKKyNkZWZpbmUgUkVTXzEwMjRYNzY4Xzc1SFpfUElYQ0xPQ0sgICAxMjY5OQorI2RlZmluZSBSRVNfMTAyNFg3NjhfODVIWl9QSVhDTE9DSyAgIDEwNTgyCisjZGVmaW5lIFJFU18xMDI0WDc2OF8xMDBIWl9QSVhDTE9DSyAgODgyNQorI2RlZmluZSBSRVNfMTE1Mlg4NjRfNzVIWl9QSVhDTE9DSyAgIDkyNTkKKyNkZWZpbmUgUkVTXzEyODBYNzY4XzYwSFpfUElYQ0xPQ0sgICAxMjQ4MAorI2RlZmluZSBSRVNfMTI4MFg4MDBfNjBIWl9QSVhDTE9DSyAgIDExOTk0CisjZGVmaW5lIFJFU18xMjgwWDk2MF82MEhaX1BJWENMT0NLICAgOTI1OQorI2RlZmluZSBSRVNfMTI4MFgxMDI0XzYwSFpfUElYQ0xPQ0sgIDkyNjAKKyNkZWZpbmUgUkVTXzEyODBYMTAyNF83NUhaX1BJWENMT0NLICA3NDA4CisjZGVmaW5lIFJFU18xMjgwWDc2OF84NUhaX1BJWENMT0NLICAgNjM0OQorI2RlZmluZSBSRVNfMTQ0MFgxMDUwXzYwSFpfUElYQ0xPQ0sgIDc5OTMKKyNkZWZpbmUgUkVTXzE2MDBYMTIwMF82MEhaX1BJWENMT0NLICA2MTcyCisjZGVmaW5lIFJFU18xNjAwWDEyMDBfNzVIWl9QSVhDTE9DSyAgNDkzOAorI2RlZmluZSBSRVNfMTI4MFg3MjBfNjBIWl9QSVhDTE9DSyAgIDEzNDI2CisjZGVmaW5lIFJFU18xOTIwWDEwODBfNjBIWl9QSVhDTE9DSyAgNTc4NworI2RlZmluZSBSRVNfMTQwMFgxMDUwXzYwSFpfUElYQ0xPQ0sgIDgyMTQKKyNkZWZpbmUgUkVTXzE0MDBYMTA1MF83NUhaX1BJWENMT0NLICA2NDEwCisjZGVmaW5lIFJFU18xMzY4WDc2OF82MEhaX1BJWENMT0NLICAgMTE2NDcKKyNkZWZpbmUgUkVTXzk2MFg2MDBfNjBIWl9QSVhDTE9DSyAgICAgIDIyMDk5CisjZGVmaW5lIFJFU18xMDAwWDYwMF82MEhaX1BJWENMT0NLICAgIDIwODM0CisjZGVmaW5lIFJFU18xMDI0WDU3Nl82MEhaX1BJWENMT0NLICAgIDIxMjc4CisjZGVmaW5lIFJFU18xMDg4WDYxMl82MEhaX1BJWENMT0NLICAgIDE4ODc3CisjZGVmaW5lIFJFU18xMTUyWDcyMF82MEhaX1BJWENMT0NLICAgIDE0OTgxCisjZGVmaW5lIFJFU18xMjAwWDcyMF82MEhaX1BJWENMT0NLICAgIDE0MjUzCisjZGVmaW5lIFJFU18xMjgwWDYwMF82MEhaX1BJWENMT0NLICAgIDE2MjYwCisjZGVmaW5lIFJFU18xMjgwWDcyMF81MEhaX1BJWENMT0NLICAgIDE2NTM4CisjZGVmaW5lIFJFU18xMjgwWDc2OF81MEhaX1BJWENMT0NLICAgIDE1MzQyCisjZGVmaW5lIFJFU18xMzY2WDc2OF81MEhaX1BJWENMT0NLICAgIDE0MzAxCisjZGVmaW5lIFJFU18xMzY2WDc2OF82MEhaX1BJWENMT0NLICAgIDExNjQ2CisjZGVmaW5lIFJFU18xMzYwWDc2OF82MEhaX1BJWENMT0NLICAgIDExNzk5CisjZGVmaW5lIFJFU18xNDQwWDkwMF82MEhaX1BJWENMT0NLICAgIDkzOTAKKyNkZWZpbmUgUkVTXzE0NDBYOTAwXzc1SFpfUElYQ0xPQ0sgICAgNzMxNQorI2RlZmluZSBSRVNfMTYwMFg5MDBfNjBIWl9QSVhDTE9DSyAgICA4NDE1CisjZGVmaW5lIFJFU18xNjAwWDEwMjRfNjBIWl9QSVhDTE9DSyAgIDczMTUKKyNkZWZpbmUgUkVTXzE2ODBYMTA1MF82MEhaX1BJWENMT0NLICAgNjgxNAorI2RlZmluZSBSRVNfMTY4MFgxMDUwXzc1SFpfUElYQ0xPQ0sgICA1MzQ4CisjZGVmaW5lIFJFU18xNzkyWDEzNDRfNjBIWl9QSVhDTE9DSyAgIDQ5MDIKKyNkZWZpbmUgUkVTXzE4NTZYMTM5Ml82MEhaX1BJWENMT0NLICAgNDU3NworI2RlZmluZSBSRVNfMTkyMFgxMjAwXzYwSFpfUElYQ0xPQ0sgICA1MTczCisjZGVmaW5lIFJFU18xOTIwWDE0NDBfNjBIWl9QSVhDTE9DSyAgIDQyNzQKKyNkZWZpbmUgUkVTXzE5MjBYMTQ0MF83NUhaX1BJWENMT0NLICAgMzM2NworI2RlZmluZSBSRVNfMjA0OFgxNTM2XzYwSFpfUElYQ0xPQ0sgICAzNzQyCisKKyNkZWZpbmUgUkVTXzEzNjBYNzY4X1JCXzYwSFpfUElYQ0xPQ0sgMTM4ODkKKyNkZWZpbmUgUkVTXzE0MDBYMTA1MF9SQl82MEhaX1BJWENMT0NLIDk5MDEKKyNkZWZpbmUgUkVTXzE0NDBYOTAwX1JCXzYwSFpfUElYQ0xPQ0sgICAxMTI2OAorI2RlZmluZSBSRVNfMTYwMFg5MDBfUkJfNjBIWl9QSVhDTE9DSyAgIDEwMjMwCisjZGVmaW5lIFJFU18xNjgwWDEwNTBfUkJfNjBIWl9QSVhDTE9DSyA4NDAzCisjZGVmaW5lIFJFU18xOTIwWDEwODBfUkJfNjBIWl9QSVhDTE9DSyA3MjI1CisjZGVmaW5lIFJFU18xOTIwWDEyMDBfUkJfNjBIWl9QSVhDTE9DSyA2NDk3CisKKy8qIExDRCBkaXNwbGF5IG1ldGhvZAorKi8KKyNkZWZpbmUgICAgIExDRF9FWFBBTkRTSU9OICAgICAgICAgICAgICAweDAwCisjZGVmaW5lICAgICBMQ0RfQ0VOVEVSSU5HICAgICAgICAgICAgICAgMHgwMQorCisvKiBMQ0QgbW9kZQorKi8KKyNkZWZpbmUgICAgIExDRF9PUEVOTERJICAgICAgICAgICAgICAgMHgwMAorI2RlZmluZSAgICAgTENEX1NQV0cgICAgICAgICAgICAgICAgICAweDAxCisKKy8qIERlZmluZSBkaXNwbGF5IHRpbWluZworKi8KK3N0cnVjdCBkaXNwbGF5X3RpbWluZyB7CisJdTE2IGhvcl90b3RhbDsKKwl1MTYgaG9yX2FkZHI7CisJdTE2IGhvcl9ibGFua19zdGFydDsKKwl1MTYgaG9yX2JsYW5rX2VuZDsKKwl1MTYgaG9yX3N5bmNfc3RhcnQ7CisJdTE2IGhvcl9zeW5jX2VuZDsKKwl1MTYgdmVyX3RvdGFsOworCXUxNiB2ZXJfYWRkcjsKKwl1MTYgdmVyX2JsYW5rX3N0YXJ0OworCXUxNiB2ZXJfYmxhbmtfZW5kOworCXUxNiB2ZXJfc3luY19zdGFydDsKKwl1MTYgdmVyX3N5bmNfZW5kOworfTsKKworc3RydWN0IGNydF9tb2RlX3RhYmxlIHsKKwlpbnQgcmVmcmVzaF9yYXRlOworCXVuc2lnbmVkIGxvbmcgY2xrOworCWludCBoX3N5bmNfcG9sYXJpdHk7CisJaW50IHZfc3luY19wb2xhcml0eTsKKwlzdHJ1Y3QgZGlzcGxheV90aW1pbmcgY3J0YzsKK307CisKK3N0cnVjdCBpb19yZWcgeworCWludCBwb3J0OworCXU4IGluZGV4OworCXU4IG1hc2s7CisJdTggdmFsdWU7Cit9OworCisjZW5kaWYgLyogX19TSEFSRV9IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vdmlhL3RibDE2MzYuYyBiL2RyaXZlcnMvdmlkZW8vdmlhL3RibDE2MzYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZDg0NTM0Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy92aWRlby92aWEvdGJsMTYzNi5jCkBAIC0wLDAgKzEsNzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgMTk5OC0yMDA4IFZJQSBUZWNobm9sb2dpZXMsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAyMDAxLTIwMDggUzMgR3JhcGhpY3MsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKworICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOworICogZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVElFUyBPUiBSRVBSRVNFTlRBVElPTlM7IHdpdGhvdXQgZXZlbgorICogdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS5TZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sCisgKiA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICovCisKKyNpbmNsdWRlICJnbG9iYWwuaCIKK3N0cnVjdCBJT0RBVEEgQ09NTU9OX0lOSVRfVEJMX1ZUMTYzNltdID0geworLyogIEluZGV4LCBNYXNrLCBWYWx1ZSAqLworCS8qIFNldCBwYW5lbCBwb3dlciBzZXF1ZW5jZSB0aW1pbmcgKi8KKwl7MHgxMCwgMHhDMCwgMHgwMH0sCisJLyogVDE6IFZERCBvbiAtIERhdGEgb24uIEVhY2ggaW5jcmVtZW50IGlzIDEgbXMuICg1MG1zID0gMDMxaCkgKi8KKwl7MHgwQiwgMHhGRiwgMHg0MH0sCisJLyogVDI6IERhdGEgb24gLSBCYWNrbGlnaHQgb24uIEVhY2ggaW5jcmVtZW50IGlzIDIgbXMuICgyMTBtcyA9IDA2OGgpICovCisJezB4MEMsIDB4RkYsIDB4MzF9LAorCS8qIFQzOiBCYWNrbGlnaHQgb2ZmIC1EYXRhIG9mZi4gRWFjaCBpbmNyZW1lbnQgaXMgMiBtcy4gKDIxMG1zID0gMDY4aCkqLworCXsweDBELCAweEZGLCAweDMxfSwKKwkvKiBUNDogRGF0YSBvZmYgLSBWREQgb2ZmLiBFYWNoIGluY3JlbWVudCBpcyAxIG1zLiAoNTBtcyA9IDAzMWgpICovCisJezB4MEUsIDB4RkYsIDB4Njh9LAorCS8qIFQ1OiBWREQgb2ZmIC0gVkREIG9uLiBFYWNoIGluY3JlbWVudCBpcyAxMDAgbXMuICg1MDBtcyA9IDA0aCkgKi8KKwl7MHgwRiwgMHhGRiwgMHg2OH0sCisJLyogTFZEUyBvdXRwdXQgcG93ZXIgdXAgKi8KKwl7MHgwOSwgMHhBMCwgMHhBMH0sCisJLyogdHVybiBvbiBiYWNrIGxpZ2h0ICovCisJezB4MTAsIDB4MzMsIDB4MTN9Cit9OworCitzdHJ1Y3QgSU9EQVRBIERVQUxfQ0hBTk5FTF9FTkFCTEVfVEJMX1ZUMTYzNltdID0geworLyogIEluZGV4LCBNYXNrLCBWYWx1ZSAqLworCXsweDA4LCAweEYwLCAweEUwfQkvKiBJbnB1dCBEYXRhIE1vZGUgU2VsZWN0ICovCit9OworCitzdHJ1Y3QgSU9EQVRBIFNJTkdMRV9DSEFOTkVMX0VOQUJMRV9UQkxfVlQxNjM2W10gPSB7CisvKiAgSW5kZXgsIE1hc2ssIFZhbHVlICovCisJezB4MDgsIDB4RjAsIDB4MDB9CS8qIElucHV0IERhdGEgTW9kZSBTZWxlY3QgKi8KK307CisKK3N0cnVjdCBJT0RBVEEgRElUSEVSSU5HX0VOQUJMRV9UQkxfVlQxNjM2W10gPSB7CisvKiAgSW5kZXgsIE1hc2ssIFZhbHVlICovCisJezB4MEEsIDB4NzAsIDB4NTB9Cit9OworCitzdHJ1Y3QgSU9EQVRBIERJVEhFUklOR19ESVNBQkxFX1RCTF9WVDE2MzZbXSA9IHsKKy8qICBJbmRleCwgTWFzaywgVmFsdWUgKi8KKwl7MHgwQSwgMHg3MCwgMHgwMH0KK307CisKK3N0cnVjdCBJT0RBVEEgVkREX09OX1RCTF9WVDE2MzZbXSA9IHsKKy8qICBJbmRleCwgTWFzaywgVmFsdWUgKi8KKwl7MHgxMCwgMHgyMCwgMHgyMH0KK307CisKK3N0cnVjdCBJT0RBVEEgVkREX09GRl9UQkxfVlQxNjM2W10gPSB7CisvKiAgSW5kZXgsIE1hc2ssIFZhbHVlICovCisJezB4MTAsIDB4MjAsIDB4MDB9Cit9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby92aWEvdGJsMTYzNi5oIGIvZHJpdmVycy92aWRlby92aWEvdGJsMTYzNi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ5MDYwNTUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3ZpZGVvL3ZpYS90YmwxNjM2LmgKQEAgLTAsMCArMSwzNCBAQAorLyoKKyAqIENvcHlyaWdodCAxOTk4LTIwMDggVklBIFRlY2hub2xvZ2llcywgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IDIwMDEtMjAwOCBTMyBHcmFwaGljcywgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247CisgKiBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5USUVTIE9SIFJFUFJFU0VOVEFUSU9OUzsgd2l0aG91dCBldmVuCisgKiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFLlNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGZvciBtb3JlIGRldGFpbHMuCisKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwKKyAqIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKworI2lmbmRlZiBfVEJMMTYzNl9IXworI2RlZmluZSBfVEJMMTYzNl9IXworI2luY2x1ZGUgImh3LmgiCisKK2V4dGVybiBzdHJ1Y3QgSU9EQVRBIENPTU1PTl9JTklUX1RCTF9WVDE2MzZbOF07CitleHRlcm4gc3RydWN0IElPREFUQSBEVUFMX0NIQU5ORUxfRU5BQkxFX1RCTF9WVDE2MzZbMV07CitleHRlcm4gc3RydWN0IElPREFUQSBTSU5HTEVfQ0hBTk5FTF9FTkFCTEVfVEJMX1ZUMTYzNlsxXTsKK2V4dGVybiBzdHJ1Y3QgSU9EQVRBIERJVEhFUklOR19FTkFCTEVfVEJMX1ZUMTYzNlsxXTsKK2V4dGVybiBzdHJ1Y3QgSU9EQVRBIERJVEhFUklOR19ESVNBQkxFX1RCTF9WVDE2MzZbMV07CitleHRlcm4gc3RydWN0IElPREFUQSBWRERfT05fVEJMX1ZUMTYzNlsxXTsKK2V4dGVybiBzdHJ1Y3QgSU9EQVRBIFZERF9PRkZfVEJMX1ZUMTYzNlsxXTsKKworI2VuZGlmIC8qIF9WSUFfVEJMMTYzNl9IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby92aWEvdGJsRFBBU2V0dGluZy5jIGIvZHJpdmVycy92aWRlby92aWEvdGJsRFBBU2V0dGluZy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBjNGM4Y2MKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3ZpZGVvL3ZpYS90YmxEUEFTZXR0aW5nLmMKQEAgLTAsMCArMSwxMDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgMTk5OC0yMDA4IFZJQSBUZWNobm9sb2dpZXMsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAyMDAxLTIwMDggUzMgR3JhcGhpY3MsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKworICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOworICogZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVElFUyBPUiBSRVBSRVNFTlRBVElPTlM7IHdpdGhvdXQgZXZlbgorICogdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS5TZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sCisgKiA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICovCisKKyNpbmNsdWRlICJnbG9iYWwuaCIKKy8qIEZvciBWVDMzMjQ6ICovCitzdHJ1Y3QgVlQxNjM2X0RQQV9TRVRUSU5HIFZUMTYzNl9EUEFfU0VUVElOR19UQkxfVlQzMzI0W10gPSB7CisJLyogUGFuZWwgSUQsICAgICAgIENMS19TRUxfU1QxWzA5XSwgICAgQ0xLX1NFTF9TVDJbMDhdICovCisJe0xDRF9QQU5FTF9JRDBfNjQwWDQ4MCwgMHgwMCwgMHgwMH0sCS8qIEZvciA2NDB4NDgwICAgKi8KKwl7TENEX1BBTkVMX0lEMV84MDBYNjAwLCAweDAwLCAweDAwfSwJLyogRm9yIDgwMHg2MDAgICAqLworCXtMQ0RfUEFORUxfSUQyXzEwMjRYNzY4LCAweDAwLCAweDAwfSwJLyogRm9yIDEwMjR4NzY4ICAqLworCXtMQ0RfUEFORUxfSUQzXzEyODBYNzY4LCAweDAwLCAweDAwfSwJLyogRm9yIDEyODB4NzY4ICAqLworCXtMQ0RfUEFORUxfSUQ0XzEyODBYMTAyNCwgMHgwMCwgMHgwMH0sCS8qIEZvciAxMjgweDEwMjQgKi8KKwl7TENEX1BBTkVMX0lENV8xNDAwWDEwNTAsIDB4MDAsIDB4MDB9LAkvKiBGb3IgMTQwMHgxMDUwICovCisJe0xDRF9QQU5FTF9JRDZfMTYwMFgxMjAwLCAweDBCLCAweDAzfQkvKiBGb3IgMTYwMHgxMjAwICovCit9OworCitzdHJ1Y3QgR0ZYX0RQQV9TRVRUSU5HIEdGWF9EUEFfU0VUVElOR19UQkxfVlQzMzI0W10gPSB7CisvKiAgQ2xrUmFuZ2UsIERWUDAsIERWUDBEYXRhRHJpdmluZywgIERWUDBDbG9ja0RyaXZpbmcsIERWUDEsCisJCQkJCURWUDFEcml2aW5nLCBERlBIaWdoLCBERlBMb3cgKi8KKy8qICBDUjk2LCBTUjJBWzVdLCBTUjFCWzFdLCBTUjJBWzRdLCBTUjFFWzJdLCBDUjlCLAorCQkJCQlTUjY1LCAgICAgICAgQ1I5NywgICAgQ1I5OSAgICovCisJLyogTENLL1ZDSyA8IDMwMDAwMDAwIHdpbGwgdXNlIHRoaXMgdmFsdWUgKi8KKwl7RFBBX0NMS19SQU5HRV8zME0sIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4MDAsIDB4MDAsCisJIDB4MDB9LAorCS8qIDMwMDAwMDAwIDwgTENLL1ZDSyA8IDUwMDAwMDAwIHdpbGwgdXNlIHRoaXMgdmFsdWUgKi8KKwl7RFBBX0NMS19SQU5HRV8zMF81ME0sIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4MDAsIDB4MDAsCisJIDB4MDB9LAorCS8qIDUwMDAwMDAwIDwgTENLL1ZDSyA8IDcwMDAwMDAwIHdpbGwgdXNlIHRoaXMgdmFsdWUgKi8KKwl7RFBBX0NMS19SQU5HRV81MF83ME0sIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsCisJIDB4MDB9LAorCS8qIDcwMDAwMDAwIDwgTENLL1ZDSyA8IDEwMDAwMDAwMCB3aWxsIHVzZSB0aGlzIHZhbHVlICovCisJe0RQQV9DTEtfUkFOR0VfNzBfMTAwTSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwKKwkgMHgwMH0sCisJLyogMTAwMDAwMDAwIDwgTENLL1ZDSyA8IDE1MDAwMDAwIHdpbGwgdXNlIHRoaXMgdmFsdWUgKi8KKwl7RFBBX0NMS19SQU5HRV8xMDBfMTUwTSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwKKwkgMHgwMH0sCisJLyogMTUwMDAwMDAgPCBMQ0svVkNLIHdpbGwgdXNlIHRoaXMgdmFsdWUgKi8KKwl7RFBBX0NMS19SQU5HRV8xNTBNLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDBFLCAweDAwLAorCSAweDAwfSwKK307CisKKy8qIEZvciBWVDMzMjc6ICovCitzdHJ1Y3QgVlQxNjM2X0RQQV9TRVRUSU5HIFZUMTYzNl9EUEFfU0VUVElOR19UQkxfVlQzMzI3W10gPSB7CisJLyogUGFuZWwgSUQsICAgICAgIENMS19TRUxfU1QxWzA5XSwgICAgQ0xLX1NFTF9TVDJbMDhdICovCisJe0xDRF9QQU5FTF9JRDBfNjQwWDQ4MCwgMHgwMCwgMHgwMH0sCS8qIEZvciA2NDB4NDgwICAgKi8KKwl7TENEX1BBTkVMX0lEMV84MDBYNjAwLCAweDAwLCAweDAwfSwJLyogRm9yIDgwMHg2MDAgICAqLworCXtMQ0RfUEFORUxfSUQyXzEwMjRYNzY4LCAweDAwLCAweDAwfSwJLyogRm9yIDEwMjR4NzY4ICAqLworCXtMQ0RfUEFORUxfSUQzXzEyODBYNzY4LCAweDAwLCAweDAwfSwJLyogRm9yIDEyODB4NzY4ICAqLworCXtMQ0RfUEFORUxfSUQ0XzEyODBYMTAyNCwgMHgwMCwgMHgwMH0sCS8qIEZvciAxMjgweDEwMjQgKi8KKwl7TENEX1BBTkVMX0lENV8xNDAwWDEwNTAsIDB4MDAsIDB4MDB9LAkvKiBGb3IgMTQwMHgxMDUwICovCisJe0xDRF9QQU5FTF9JRDZfMTYwMFgxMjAwLCAweDAwLCAweDAwfQkvKiBGb3IgMTYwMHgxMjAwICovCit9OworCitzdHJ1Y3QgR0ZYX0RQQV9TRVRUSU5HIEdGWF9EUEFfU0VUVElOR19UQkxfVlQzMzI3W10gPSB7CisvKiAgQ2xrUmFuZ2UsRFZQMCwgRFZQMERhdGFEcml2aW5nLCAgRFZQMENsb2NrRHJpdmluZywgRFZQMSwKKwkJCQkJRFZQMURyaXZpbmcsIERGUEhpZ2gsICAgREZQTG93ICovCisvKiAgIENSOTYsIFNSMkFbNV0sIFNSMUJbMV0sIFNSMkFbNF0sIFNSMUVbMl0sIENSOUIsCisJCQkJCVNSNjUsICAgICAgICBDUjk3LCAgICAgIENSOTkgICAqLworLyogTENLL1ZDSyA8IDMwMDAwMDAwIHdpbGwgdXNlIHRoaXMgdmFsdWUgKi8KK3tEUEFfQ0xLX1JBTkdFXzMwTSwgMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHgwMCwgMHgwOCwgMHgwMX0sCisvKiAzMDAwMDAwMCA8IExDSy9WQ0sgPCA1MDAwMDAwMCB3aWxsIHVzZSB0aGlzIHZhbHVlICovCit7RFBBX0NMS19SQU5HRV8zMF81ME0sIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4MDAsIDB4MDgsIDB4MDF9LAorLyogNTAwMDAwMDAgPCBMQ0svVkNLIDwgNzAwMDAwMDAgd2lsbCB1c2UgdGhpcyB2YWx1ZSAqLwore0RQQV9DTEtfUkFOR0VfNTBfNzBNLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweDAwLCAweDA4LCAweDAxfSwKKy8qIDcwMDAwMDAwIDwgTENLL1ZDSyA8IDEwMDAwMDAwMCB3aWxsIHVzZSB0aGlzIHZhbHVlICovCit7RFBBX0NMS19SQU5HRV83MF8xMDBNLCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweDAwLCAweDA4LCAweDAzfSwKKy8qIDEwMDAwMDAwMCA8IExDSy9WQ0sgPCAxNTAwMDAwMCB3aWxsIHVzZSB0aGlzIHZhbHVlICovCit7RFBBX0NMS19SQU5HRV8xMDBfMTUwTSwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHgwMCwgMHgwMSwgMHgwMn0sCisvKiAxNTAwMDAwMCA8IExDSy9WQ0sgd2lsbCB1c2UgdGhpcyB2YWx1ZSAqLwore0RQQV9DTEtfUkFOR0VfMTUwTSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMywgMHgwMCwgMHgwRCwgMHgwM30sCit9OworCisvKiBGb3IgVlQzMzY0OiAqLworc3RydWN0IEdGWF9EUEFfU0VUVElORyBHRlhfRFBBX1NFVFRJTkdfVEJMX1ZUMzM2NFtdID0geworLyogIENsa1JhbmdlLERWUDAsIERWUDBEYXRhRHJpdmluZywgIERWUDBDbG9ja0RyaXZpbmcsIERWUDEsCisJCQkJCURWUDFEcml2aW5nLCBERlBIaWdoLCAgIERGUExvdyAqLworLyogICBDUjk2LCBTUjJBWzVdLCBTUjFCWzFdLCBTUjJBWzRdLCBTUjFFWzJdLCBDUjlCLAorCQkJCQlTUjY1LCAgICAgICAgQ1I5NywgICAgICBDUjk5ICAgKi8KKy8qIExDSy9WQ0sgPCAzMDAwMDAwMCB3aWxsIHVzZSB0aGlzIHZhbHVlICovCit7RFBBX0NMS19SQU5HRV8zME0sIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDh9LAorLyogMzAwMDAwMDAgPCBMQ0svVkNLIDwgNTAwMDAwMDAgd2lsbCB1c2UgdGhpcyB2YWx1ZSAqLwore0RQQV9DTEtfUkFOR0VfMzBfNTBNLCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweDAwLCAweDAwLCAweDA4fSwKKy8qIDUwMDAwMDAwIDwgTENLL1ZDSyA8IDcwMDAwMDAwIHdpbGwgdXNlIHRoaXMgdmFsdWUgKi8KK3tEUEFfQ0xLX1JBTkdFXzUwXzcwTSwgMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHgwMCwgMHgwMCwgMHgwOH0sCisvKiA3MDAwMDAwMCA8IExDSy9WQ0sgPCAxMDAwMDAwMDAgd2lsbCB1c2UgdGhpcyB2YWx1ZSAqLwore0RQQV9DTEtfUkFOR0VfNzBfMTAwTSwgMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHgwMCwgMHgwMCwgMHgwOH0sCisvKiAxMDAwMDAwMDAgPCBMQ0svVkNLIDwgMTUwMDAwMDAgd2lsbCB1c2UgdGhpcyB2YWx1ZSAqLwore0RQQV9DTEtfUkFOR0VfMTAwXzE1ME0sIDB4MDMsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDh9LAorLyogMTUwMDAwMDAgPCBMQ0svVkNLIHdpbGwgdXNlIHRoaXMgdmFsdWUgKi8KK3tEUEFfQ0xLX1JBTkdFXzE1ME0sIDB4MDEsIDB4MDAsIDB4MDIsIDB4MTAsIDB4MDAsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDh9LAorfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vdmlhL3RibERQQVNldHRpbmcuaCBiL2RyaXZlcnMvdmlkZW8vdmlhL3RibERQQVNldHRpbmcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMDY1YTgzCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy92aWRlby92aWEvdGJsRFBBU2V0dGluZy5oCkBAIC0wLDAgKzEsNDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgMTk5OC0yMDA4IFZJQSBUZWNobm9sb2dpZXMsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAyMDAxLTIwMDggUzMgR3JhcGhpY3MsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKworICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOworICogZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVElFUyBPUiBSRVBSRVNFTlRBVElPTlM7IHdpdGhvdXQgZXZlbgorICogdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS5TZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sCisgKiA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICovCisKKyNpZm5kZWYgX1RCTERQQVNFVFRJTkdfSF8KKyNkZWZpbmUgX1RCTERQQVNFVFRJTkdfSF8KKyNpbmNsdWRlICJnbG9iYWwuaCIKKworI2RlZmluZSBEUEFfQ0xLXzMwTSAgICAgICAzMDAwMDAwMAorI2RlZmluZSBEUEFfQ0xLXzUwTSAgICAgICA1MDAwMDAwMAorI2RlZmluZSBEUEFfQ0xLXzcwTSAgICAgICA3MDAwMDAwMAorI2RlZmluZSBEUEFfQ0xLXzEwME0gICAgICAxMDAwMDAwMDAKKyNkZWZpbmUgRFBBX0NMS18xNTBNICAgICAgMTUwMDAwMDAwCisKK2VudW0gRFBBX1JBTkdFIHsKKwlEUEFfQ0xLX1JBTkdFXzMwTSwKKwlEUEFfQ0xLX1JBTkdFXzMwXzUwTSwKKwlEUEFfQ0xLX1JBTkdFXzUwXzcwTSwKKwlEUEFfQ0xLX1JBTkdFXzcwXzEwME0sCisJRFBBX0NMS19SQU5HRV8xMDBfMTUwTSwKKwlEUEFfQ0xLX1JBTkdFXzE1ME0KK307CisKK2V4dGVybiBzdHJ1Y3QgVlQxNjM2X0RQQV9TRVRUSU5HIFZUMTYzNl9EUEFfU0VUVElOR19UQkxfVlQzMzI0WzddOworZXh0ZXJuIHN0cnVjdCBHRlhfRFBBX1NFVFRJTkcgR0ZYX0RQQV9TRVRUSU5HX1RCTF9WVDMzMjRbNl07CitleHRlcm4gc3RydWN0IFZUMTYzNl9EUEFfU0VUVElORyBWVDE2MzZfRFBBX1NFVFRJTkdfVEJMX1ZUMzMyN1s3XTsKK2V4dGVybiBzdHJ1Y3QgR0ZYX0RQQV9TRVRUSU5HIEdGWF9EUEFfU0VUVElOR19UQkxfVlQzMzI3W107CitleHRlcm4gc3RydWN0IEdGWF9EUEFfU0VUVElORyBHRlhfRFBBX1NFVFRJTkdfVEJMX1ZUMzM2NFs2XTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3ZpYS92aWFfaTJjLmMgYi9kcml2ZXJzL3ZpZGVvL3ZpYS92aWFfaTJjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGYzZWQ0ZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdmlkZW8vdmlhL3ZpYV9pMmMuYwpAQCAtMCwwICsxLDE3NyBAQAorLyoKKyAqIENvcHlyaWdodCAxOTk4LTIwMDggVklBIFRlY2hub2xvZ2llcywgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IDIwMDEtMjAwOCBTMyBHcmFwaGljcywgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247CisgKiBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5USUVTIE9SIFJFUFJFU0VOVEFUSU9OUzsgd2l0aG91dCBldmVuCisgKiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFLlNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGZvciBtb3JlIGRldGFpbHMuCisKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwKKyAqIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKworI2luY2x1ZGUgImdsb2JhbC5oIgorCitzdGF0aWMgdm9pZCB2aWFfaTJjX3NldHNjbCh2b2lkICpkYXRhLCBpbnQgc3RhdGUpCit7CisJdTggdmFsOworCXN0cnVjdCB2aWFfaTJjX3N0dWZmICp2aWFfaTJjX2NoYW4gPSAoc3RydWN0IHZpYV9pMmNfc3R1ZmYgKilkYXRhOworCisJdmFsID0gdmlhZmJfcmVhZF9yZWcoVklBU1IsIHZpYV9pMmNfY2hhbi0+aTJjX3BvcnQpICYgMHhGMDsKKwlpZiAoc3RhdGUpCisJCXZhbCB8PSAweDIwOworCWVsc2UKKwkJdmFsICY9IH4weDIwOworCXN3aXRjaCAodmlhX2kyY19jaGFuLT5pMmNfcG9ydCkgeworCWNhc2UgSTJDUE9SVElOREVYOgorCQl2YWwgfD0gMHgwMTsKKwkJYnJlYWs7CisJY2FzZSBHUElPUE9SVElOREVYOgorCQl2YWwgfD0gMHg4MDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJREVCVUdfTVNHKCJ2aWFfaTJjOiBzcGVjaWZ5IHdyb25nIGkyYyBwb3J0LlxuIik7CisJfQorCXZpYWZiX3dyaXRlX3JlZyh2aWFfaTJjX2NoYW4tPmkyY19wb3J0LCBWSUFTUiwgdmFsKTsKK30KKworc3RhdGljIGludCB2aWFfaTJjX2dldHNjbCh2b2lkICpkYXRhKQoreworCXN0cnVjdCB2aWFfaTJjX3N0dWZmICp2aWFfaTJjX2NoYW4gPSAoc3RydWN0IHZpYV9pMmNfc3R1ZmYgKilkYXRhOworCisJaWYgKHZpYWZiX3JlYWRfcmVnKFZJQVNSLCB2aWFfaTJjX2NoYW4tPmkyY19wb3J0KSAmIDB4MDgpCisJCXJldHVybiAxOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZpYV9pMmNfZ2V0c2RhKHZvaWQgKmRhdGEpCit7CisJc3RydWN0IHZpYV9pMmNfc3R1ZmYgKnZpYV9pMmNfY2hhbiA9IChzdHJ1Y3QgdmlhX2kyY19zdHVmZiAqKWRhdGE7CisKKwlpZiAodmlhZmJfcmVhZF9yZWcoVklBU1IsIHZpYV9pMmNfY2hhbi0+aTJjX3BvcnQpICYgMHgwNCkKKwkJcmV0dXJuIDE7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHZpYV9pMmNfc2V0c2RhKHZvaWQgKmRhdGEsIGludCBzdGF0ZSkKK3sKKwl1OCB2YWw7CisJc3RydWN0IHZpYV9pMmNfc3R1ZmYgKnZpYV9pMmNfY2hhbiA9IChzdHJ1Y3QgdmlhX2kyY19zdHVmZiAqKWRhdGE7CisKKwl2YWwgPSB2aWFmYl9yZWFkX3JlZyhWSUFTUiwgdmlhX2kyY19jaGFuLT5pMmNfcG9ydCkgJiAweEYwOworCWlmIChzdGF0ZSkKKwkJdmFsIHw9IDB4MTA7CisJZWxzZQorCQl2YWwgJj0gfjB4MTA7CisJc3dpdGNoICh2aWFfaTJjX2NoYW4tPmkyY19wb3J0KSB7CisJY2FzZSBJMkNQT1JUSU5ERVg6CisJCXZhbCB8PSAweDAxOworCQlicmVhazsKKwljYXNlIEdQSU9QT1JUSU5ERVg6CisJCXZhbCB8PSAweDQwOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlERUJVR19NU0coInZpYV9pMmM6IHNwZWNpZnkgd3JvbmcgaTJjIHBvcnQuXG4iKTsKKwl9CisJdmlhZmJfd3JpdGVfcmVnKHZpYV9pMmNfY2hhbi0+aTJjX3BvcnQsIFZJQVNSLCB2YWwpOworfQorCitpbnQgdmlhZmJfaTJjX3JlYWRieXRlKHU4IHNsYXZlX2FkZHIsIHU4IGluZGV4LCB1OCAqcGRhdGEpCit7CisJdTggbW0xW10gPSB7MHgwMH07CisJc3RydWN0IGkyY19tc2cgbXNnc1syXTsKKworCSpwZGF0YSA9IDA7CisJbXNnc1swXS5mbGFncyA9IDA7CisJbXNnc1sxXS5mbGFncyA9IEkyQ19NX1JEOworCW1zZ3NbMF0uYWRkciA9IG1zZ3NbMV0uYWRkciA9IHNsYXZlX2FkZHIgLyAyOworCW1tMVswXSA9IGluZGV4OworCW1zZ3NbMF0ubGVuID0gMTsgbXNnc1sxXS5sZW4gPSAxOworCW1zZ3NbMF0uYnVmID0gbW0xOyBtc2dzWzFdLmJ1ZiA9IHBkYXRhOworCWkyY190cmFuc2ZlcigmdmlhcGFyaW5mby0+aTJjX3N0dWZmLmFkYXB0ZXIsIG1zZ3MsIDIpOworCisJcmV0dXJuIDA7Cit9CisKK2ludCB2aWFmYl9pMmNfd3JpdGVieXRlKHU4IHNsYXZlX2FkZHIsIHU4IGluZGV4LCB1OCBkYXRhKQoreworCXU4IG1zZ1syXSA9IHsgaW5kZXgsIGRhdGEgfTsKKwlzdHJ1Y3QgaTJjX21zZyBtc2dzOworCisJbXNncy5mbGFncyA9IDA7CisJbXNncy5hZGRyID0gc2xhdmVfYWRkciAvIDI7CisJbXNncy5sZW4gPSAyOworCW1zZ3MuYnVmID0gbXNnOworCXJldHVybiBpMmNfdHJhbnNmZXIoJnZpYXBhcmluZm8tPmkyY19zdHVmZi5hZGFwdGVyLCAmbXNncywgMSk7Cit9CisKK2ludCB2aWFmYl9pMmNfcmVhZGJ5dGVzKHU4IHNsYXZlX2FkZHIsIHU4IGluZGV4LCB1OCAqYnVmZiwgaW50IGJ1ZmZfbGVuKQoreworCXU4IG1tMVtdID0gezB4MDB9OworCXN0cnVjdCBpMmNfbXNnIG1zZ3NbMl07CisKKwltc2dzWzBdLmZsYWdzID0gMDsKKwltc2dzWzFdLmZsYWdzID0gSTJDX01fUkQ7CisJbXNnc1swXS5hZGRyID0gbXNnc1sxXS5hZGRyID0gc2xhdmVfYWRkciAvIDI7CisJbW0xWzBdID0gaW5kZXg7CisJbXNnc1swXS5sZW4gPSAxOyBtc2dzWzFdLmxlbiA9IGJ1ZmZfbGVuOworCW1zZ3NbMF0uYnVmID0gbW0xOyBtc2dzWzFdLmJ1ZiA9IGJ1ZmY7CisJaTJjX3RyYW5zZmVyKCZ2aWFwYXJpbmZvLT5pMmNfc3R1ZmYuYWRhcHRlciwgbXNncywgMik7CisJcmV0dXJuIDA7Cit9CisKK2ludCB2aWFmYl9jcmVhdGVfaTJjX2J1cyh2b2lkICp2aWFwYXIpCit7CisJaW50IHJldDsKKwlzdHJ1Y3QgdmlhZmJfcGFyICpwYXIgPSAoc3RydWN0IHZpYWZiX3BhciAqKXZpYXBhcjsKKworCXN0cmNweShwYXItPmkyY19zdHVmZi5hZGFwdGVyLm5hbWUsICJ2aWFfaTJjIik7CisJcGFyLT5pMmNfc3R1ZmYuaTJjX3BvcnQgPSAweDA7CisJcGFyLT5pMmNfc3R1ZmYuYWRhcHRlci5vd25lciA9IFRISVNfTU9EVUxFOworCXBhci0+aTJjX3N0dWZmLmFkYXB0ZXIuaWQgPSAweDAxRkZGRjsKKwlwYXItPmkyY19zdHVmZi5hZGFwdGVyLmNsYXNzID0gMDsKKwlwYXItPmkyY19zdHVmZi5hZGFwdGVyLmFsZ29fZGF0YSA9ICZwYXItPmkyY19zdHVmZi5hbGdvOworCXBhci0+aTJjX3N0dWZmLmFkYXB0ZXIuZGV2LnBhcmVudCA9IE5VTEw7CisJcGFyLT5pMmNfc3R1ZmYuYWxnby5zZXRzZGEgPSB2aWFfaTJjX3NldHNkYTsKKwlwYXItPmkyY19zdHVmZi5hbGdvLnNldHNjbCA9IHZpYV9pMmNfc2V0c2NsOworCXBhci0+aTJjX3N0dWZmLmFsZ28uZ2V0c2RhID0gdmlhX2kyY19nZXRzZGE7CisJcGFyLT5pMmNfc3R1ZmYuYWxnby5nZXRzY2wgPSB2aWFfaTJjX2dldHNjbDsKKwlwYXItPmkyY19zdHVmZi5hbGdvLnVkZWxheSA9IDQwOworCXBhci0+aTJjX3N0dWZmLmFsZ28udGltZW91dCA9IDIwOworCXBhci0+aTJjX3N0dWZmLmFsZ28uZGF0YSA9ICZwYXItPmkyY19zdHVmZjsKKworCWkyY19zZXRfYWRhcGRhdGEoJnBhci0+aTJjX3N0dWZmLmFkYXB0ZXIsICZwYXItPmkyY19zdHVmZik7CisKKwkvKiBSYWlzZSBTQ0wgYW5kIFNEQSAqLworCXBhci0+aTJjX3N0dWZmLmkyY19wb3J0ID0gSTJDUE9SVElOREVYOworCXZpYV9pMmNfc2V0c2RhKCZwYXItPmkyY19zdHVmZiwgMSk7CisJdmlhX2kyY19zZXRzY2woJnBhci0+aTJjX3N0dWZmLCAxKTsKKworCXBhci0+aTJjX3N0dWZmLmkyY19wb3J0ID0gR1BJT1BPUlRJTkRFWDsKKwl2aWFfaTJjX3NldHNkYSgmcGFyLT5pMmNfc3R1ZmYsIDEpOworCXZpYV9pMmNfc2V0c2NsKCZwYXItPmkyY19zdHVmZiwgMSk7CisJdWRlbGF5KDIwKTsKKworCXJldCA9IGkyY19iaXRfYWRkX2J1cygmcGFyLT5pMmNfc3R1ZmYuYWRhcHRlcik7CisJaWYgKHJldCA9PSAwKQorCQlERUJVR19NU0coIkkyQyBidXMgJXMgcmVnaXN0ZXJlZC5cbiIsCisJCXBhci0+aTJjX3N0dWZmLmFkYXB0ZXIubmFtZSk7CisJZWxzZQorCQlERUJVR19NU0coIkZhaWxlZCB0byByZWdpc3RlciBJMkMgYnVzICVzLlxuIiwKKwkJCXBhci0+aTJjX3N0dWZmLmFkYXB0ZXIubmFtZSk7CisJcmV0dXJuIHJldDsKK30KKwordm9pZCB2aWFmYl9kZWxldGVfaTJjX2J1c3Modm9pZCAqcGFyKQoreworCWkyY19kZWxfYWRhcHRlcigmKChzdHJ1Y3QgdmlhZmJfcGFyICopcGFyKS0+aTJjX3N0dWZmLmFkYXB0ZXIpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby92aWEvdmlhX2kyYy5oIGIvZHJpdmVycy92aWRlby92aWEvdmlhX2kyYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNhMTMyNDIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3ZpZGVvL3ZpYS92aWFfaTJjLmgKQEAgLTAsMCArMSw0NiBAQAorLyoKKyAqIENvcHlyaWdodCAxOTk4LTIwMDggVklBIFRlY2hub2xvZ2llcywgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IDIwMDEtMjAwOCBTMyBHcmFwaGljcywgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247CisgKiBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5USUVTIE9SIFJFUFJFU0VOVEFUSU9OUzsgd2l0aG91dCBldmVuCisgKiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFLlNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGZvciBtb3JlIGRldGFpbHMuCisKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwKKyAqIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKyNpZm5kZWYgX19WSUFfSTJDX0hfXworI2RlZmluZSBfX1ZJQV9JMkNfSF9fCisKKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMtYWxnby1iaXQuaD4KKworc3RydWN0IHZpYV9pMmNfc3R1ZmYgeworCXUxNiBpMmNfcG9ydDsJCQkvKiBHUElPIG9yIEkyQyBwb3J0ICovCisJc3RydWN0IGkyY19hZGFwdGVyIGFkYXB0ZXI7CisJc3RydWN0IGkyY19hbGdvX2JpdF9kYXRhIGFsZ287Cit9OworCisjZGVmaW5lIEkyQ1BPUlQgICAgICAgICAgIDB4M2M0CisjZGVmaW5lIEkyQ1BPUlRJTkRFWCAgICAgIDB4MzEKKyNkZWZpbmUgR1BJT1BPUlQgICAgICAgICAgMHgzQzQKKyNkZWZpbmUgR1BJT1BPUlRJTkRFWCAgICAgMHgyQworI2RlZmluZSBJMkNfQlVTICAgICAgICAgICAgIDEKKyNkZWZpbmUgR1BJT19CVVMgICAgICAgICAgICAyCisjZGVmaW5lIERFTEFZUE9SVCAgICAgICAgICAgMHgzQzMKKworaW50IHZpYWZiX2kyY19yZWFkYnl0ZSh1OCBzbGF2ZV9hZGRyLCB1OCBpbmRleCwgdTggKnBkYXRhKTsKK2ludCB2aWFmYl9pMmNfd3JpdGVieXRlKHU4IHNsYXZlX2FkZHIsIHU4IGluZGV4LCB1OCBkYXRhKTsKK2ludCB2aWFmYl9pMmNfcmVhZGJ5dGVzKHU4IHNsYXZlX2FkZHIsIHU4IGluZGV4LCB1OCAqYnVmZiwgaW50IGJ1ZmZfbGVuKTsKK2ludCB2aWFmYl9jcmVhdGVfaTJjX2J1cyh2b2lkICpwYXIpOwordm9pZCB2aWFmYl9kZWxldGVfaTJjX2J1c3Modm9pZCAqcGFyKTsKKyNlbmRpZiAvKiBfX1ZJQV9JMkNfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3ZpYS92aWFfdXRpbGl0eS5jIGIvZHJpdmVycy92aWRlby92aWEvdmlhX3V0aWxpdHkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNTNjM2Q1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy92aWRlby92aWEvdmlhX3V0aWxpdHkuYwpAQCAtMCwwICsxLDI1MyBAQAorLyoKKyAqIENvcHlyaWdodCAxOTk4LTIwMDggVklBIFRlY2hub2xvZ2llcywgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IDIwMDEtMjAwOCBTMyBHcmFwaGljcywgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247CisgKiBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5USUVTIE9SIFJFUFJFU0VOVEFUSU9OUzsgd2l0aG91dCBldmVuCisgKiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFLlNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGZvciBtb3JlIGRldGFpbHMuCisKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwKKyAqIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKworI2luY2x1ZGUgImdsb2JhbC5oIgorCit2b2lkIHZpYWZiX2dldF9kZXZpY2Vfc3VwcG9ydF9zdGF0ZSh1MzIgKnN1cHBvcnRfc3RhdGUpCit7CisJKnN1cHBvcnRfc3RhdGUgPSBDUlRfRGV2aWNlOworCisJaWYgKHZpYXBhcmluZm8tPmNoaXBfaW5mby0+dG1kc19jaGlwX2luZm8udG1kc19jaGlwX25hbWUgPT0gVlQxNjMyX1RNRFMpCisJCSpzdXBwb3J0X3N0YXRlIHw9IERWSV9EZXZpY2U7CisKKwlpZiAodmlhcGFyaW5mby0+Y2hpcF9pbmZvLT5sdmRzX2NoaXBfaW5mby5sdmRzX2NoaXBfbmFtZSA9PSBWVDE2MzFfTFZEUykKKwkJKnN1cHBvcnRfc3RhdGUgfD0gTENEX0RldmljZTsKK30KKwordm9pZCB2aWFmYl9nZXRfZGV2aWNlX2Nvbm5lY3Rfc3RhdGUodTMyICpjb25uZWN0X3N0YXRlKQoreworCWJvb2wgbW9iaWxlID0gZmFsc2U7CisKKwkqY29ubmVjdF9zdGF0ZSA9IENSVF9EZXZpY2U7CisKKwlpZiAodmlhZmJfZHZpX3NlbnNlKCkpCisJCSpjb25uZWN0X3N0YXRlIHw9IERWSV9EZXZpY2U7CisKKwl2aWFmYl9sY2RfZ2V0X21vYmlsZV9zdGF0ZSgmbW9iaWxlKTsKKwlpZiAobW9iaWxlKQorCQkqY29ubmVjdF9zdGF0ZSB8PSBMQ0RfRGV2aWNlOworfQorCitib29sIHZpYWZiX2xjZF9nZXRfc3VwcG9ydF9leHBhbmRfc3RhdGUodTMyIHhyZXMsIHUzMiB5cmVzKQoreworCXVuc2lnbmVkIGludCBzdXBwb3J0X3N0YXRlID0gMDsKKworCXN3aXRjaCAodmlhZmJfbGNkX3BhbmVsX2lkKSB7CisJY2FzZSBMQ0RfUEFORUxfSUQwXzY0MFg0ODA6CisJCWlmICgoeHJlcyA8IDY0MCkgJiYgKHlyZXMgPCA0ODApKQorCQkJc3VwcG9ydF9zdGF0ZSA9IHRydWU7CisJCWJyZWFrOworCisJY2FzZSBMQ0RfUEFORUxfSUQxXzgwMFg2MDA6CisJCWlmICgoeHJlcyA8IDgwMCkgJiYgKHlyZXMgPCA2MDApKQorCQkJc3VwcG9ydF9zdGF0ZSA9IHRydWU7CisJCWJyZWFrOworCisJY2FzZSBMQ0RfUEFORUxfSUQyXzEwMjRYNzY4OgorCQlpZiAoKHhyZXMgPCAxMDI0KSAmJiAoeXJlcyA8IDc2OCkpCisJCQlzdXBwb3J0X3N0YXRlID0gdHJ1ZTsKKwkJYnJlYWs7CisKKwljYXNlIExDRF9QQU5FTF9JRDNfMTI4MFg3Njg6CisJCWlmICgoeHJlcyA8IDEyODApICYmICh5cmVzIDwgNzY4KSkKKwkJCXN1cHBvcnRfc3RhdGUgPSB0cnVlOworCQlicmVhazsKKworCWNhc2UgTENEX1BBTkVMX0lENF8xMjgwWDEwMjQ6CisJCWlmICgoeHJlcyA8IDEyODApICYmICh5cmVzIDwgMTAyNCkpCisJCQlzdXBwb3J0X3N0YXRlID0gdHJ1ZTsKKwkJYnJlYWs7CisKKwljYXNlIExDRF9QQU5FTF9JRDVfMTQwMFgxMDUwOgorCQlpZiAoKHhyZXMgPCAxNDAwKSAmJiAoeXJlcyA8IDEwNTApKQorCQkJc3VwcG9ydF9zdGF0ZSA9IHRydWU7CisJCWJyZWFrOworCisJY2FzZSBMQ0RfUEFORUxfSUQ2XzE2MDBYMTIwMDoKKwkJaWYgKCh4cmVzIDwgMTYwMCkgJiYgKHlyZXMgPCAxMjAwKSkKKwkJCXN1cHBvcnRfc3RhdGUgPSB0cnVlOworCQlicmVhazsKKworCWNhc2UgTENEX1BBTkVMX0lEN18xMzY2WDc2ODoKKwkJaWYgKCh4cmVzIDwgMTM2NikgJiYgKHlyZXMgPCA3NjgpKQorCQkJc3VwcG9ydF9zdGF0ZSA9IHRydWU7CisJCWJyZWFrOworCisJY2FzZSBMQ0RfUEFORUxfSUQ4XzEwMjRYNjAwOgorCQlpZiAoKHhyZXMgPCAxMDI0KSAmJiAoeXJlcyA8IDYwMCkpCisJCQlzdXBwb3J0X3N0YXRlID0gdHJ1ZTsKKwkJYnJlYWs7CisKKwljYXNlIExDRF9QQU5FTF9JRDlfMTI4MFg4MDA6CisJCWlmICgoeHJlcyA8IDEyODApICYmICh5cmVzIDwgODAwKSkKKwkJCXN1cHBvcnRfc3RhdGUgPSB0cnVlOworCQlicmVhazsKKworCWNhc2UgTENEX1BBTkVMX0lEQV84MDBYNDgwOgorCQlpZiAoKHhyZXMgPCA4MDApICYmICh5cmVzIDwgNDgwKSkKKwkJCXN1cHBvcnRfc3RhdGUgPSB0cnVlOworCQlicmVhazsKKworCWNhc2UgTENEX1BBTkVMX0lEQl8xMzYwWDc2ODoKKwkJaWYgKCh4cmVzIDwgMTM2MCkgJiYgKHlyZXMgPCA3NjgpKQorCQkJc3VwcG9ydF9zdGF0ZSA9IHRydWU7CisJCWJyZWFrOworCisJY2FzZSBMQ0RfUEFORUxfSURDXzQ4MFg2NDA6CisJCWlmICgoeHJlcyA8IDQ4MCkgJiYgKHlyZXMgPCA2NDApKQorCQkJc3VwcG9ydF9zdGF0ZSA9IHRydWU7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJc3VwcG9ydF9zdGF0ZSA9IGZhbHNlOworCQlicmVhazsKKwl9CisKKwlyZXR1cm4gc3VwcG9ydF9zdGF0ZTsKK30KKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKiAgICAgICAgICAgICAgICAgICAgICBHYW1tYSBGdW5jdGlvbiBJbXBsZW1lbnRhdGlvbiovCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKwordm9pZCB2aWFmYl9zZXRfZ2FtbWFfdGFibGUoaW50IGJwcCwgdW5zaWduZWQgaW50ICpnYW1tYV90YWJsZSkKK3sKKwlpbnQgaSwgc3IxYTsKKwlpbnQgYWN0aXZlX2RldmljZV9hbW91bnQgPSAwOworCWludCBkZXZpY2Vfc3RhdHVzID0gdmlhZmJfRGV2aWNlU3RhdHVzOworCisJZm9yIChpID0gMDsgaSA8IHNpemVvZih2aWFmYl9EZXZpY2VTdGF0dXMpICogODsgaSsrKSB7CisJCWlmIChkZXZpY2Vfc3RhdHVzICYgMSkKKwkJCWFjdGl2ZV9kZXZpY2VfYW1vdW50Kys7CisJCWRldmljZV9zdGF0dXMgPj49IDE7CisJfQorCisJLyogOCBicHAgbW9kZSBjYW4ndCBhZGp1c3QgZ2FtbWEgKi8KKwlpZiAoYnBwID09IDgpCisJCXJldHVybiA7CisKKwkvKiBFbmFibGUgR2FtbWEgKi8KKwlzd2l0Y2ggKHZpYXBhcmluZm8tPmNoaXBfaW5mby0+Z2Z4X2NoaXBfbmFtZSkgeworCWNhc2UgVU5JQ0hST01FX0NMRTI2NjoKKwljYXNlIFVOSUNIUk9NRV9LNDAwOgorCQl2aWFmYl93cml0ZV9yZWdfbWFzayhTUjE2LCBWSUFTUiwgMHg4MCwgQklUNyk7CisJCWJyZWFrOworCisJY2FzZSBVTklDSFJPTUVfSzgwMDoKKwljYXNlIFVOSUNIUk9NRV9QTTgwMDoKKwljYXNlIFVOSUNIUk9NRV9DTjcwMDoKKwljYXNlIFVOSUNIUk9NRV9DWDcwMDoKKwljYXNlIFVOSUNIUk9NRV9LOE04OTA6CisJY2FzZSBVTklDSFJPTUVfUDRNODkwOgorCWNhc2UgVU5JQ0hST01FX1A0TTkwMDoKKwkJdmlhZmJfd3JpdGVfcmVnX21hc2soQ1IzMywgVklBQ1IsIDB4ODAsIEJJVDcpOworCQlicmVhazsKKwl9CisJc3IxYSA9ICh1bnNpZ25lZCBpbnQpdmlhZmJfcmVhZF9yZWcoVklBU1IsIFNSMUEpOworCXZpYWZiX3dyaXRlX3JlZ19tYXNrKFNSMUEsIFZJQVNSLCAweDAsIEJJVDApOworCisJLyogRmlsbCBJR0ExIEdhbW1hIFRhYmxlICovCisJb3V0YigwLCBMVVRfSU5ERVhfV1JJVEUpOworCWZvciAoaSA9IDA7IGkgPCAyNTY7IGkrKykgeworCQlvdXRiKGdhbW1hX3RhYmxlW2ldID4+IDE2LCBMVVRfREFUQSk7CisJCW91dGIoZ2FtbWFfdGFibGVbaV0gPj4gOCAmIDB4RkYsIExVVF9EQVRBKTsKKwkJb3V0YihnYW1tYV90YWJsZVtpXSAmIDB4RkYsIExVVF9EQVRBKTsKKwl9CisKKwkvKiBJZiBhZGp1c3QgR2FtbWEgdmFsdWUgaW4gU0FNTSwgZmlsbCBJR0ExLAorCSAgIElHQTIgR2FtbWEgdGFibGUgc2ltdWx0YW5vdXMuICovCisJLyogU3dpdGNoIHRvIElHQTIgR2FtbWEgVGFibGUgKi8KKwlpZiAoKGFjdGl2ZV9kZXZpY2VfYW1vdW50ID4gMSkgJiYKKwkJISgodmlhcGFyaW5mby0+Y2hpcF9pbmZvLT5nZnhfY2hpcF9uYW1lID09CisJCVVOSUNIUk9NRV9DTEUyNjYpICYmCisJCSh2aWFwYXJpbmZvLT5jaGlwX2luZm8tPmdmeF9jaGlwX3JldmlzaW9uIDwgMTUpKSkgeworCQl2aWFmYl93cml0ZV9yZWdfbWFzayhTUjFBLCBWSUFTUiwgMHgwMSwgQklUMCk7CisJCXZpYWZiX3dyaXRlX3JlZ19tYXNrKENSNkEsIFZJQUNSLCAweDAyLCBCSVQxKTsKKworCQkvKiBGaWxsIElHQTIgR2FtbWEgVGFibGUgKi8KKwkJb3V0YigwLCBMVVRfSU5ERVhfV1JJVEUpOworCQlmb3IgKGkgPSAwOyBpIDwgMjU2OyBpKyspIHsKKwkJCW91dGIoZ2FtbWFfdGFibGVbaV0gPj4gMTYsIExVVF9EQVRBKTsKKwkJCW91dGIoZ2FtbWFfdGFibGVbaV0gPj4gOCAmIDB4RkYsIExVVF9EQVRBKTsKKwkJCW91dGIoZ2FtbWFfdGFibGVbaV0gJiAweEZGLCBMVVRfREFUQSk7CisJCX0KKwl9CisJdmlhZmJfd3JpdGVfcmVnKFNSMUEsIFZJQVNSLCBzcjFhKTsKK30KKwordm9pZCB2aWFmYl9nZXRfZ2FtbWFfdGFibGUodW5zaWduZWQgaW50ICpnYW1tYV90YWJsZSkKK3sKKwl1bnNpZ25lZCBjaGFyIGNvbG9yX3IsIGNvbG9yX2csIGNvbG9yX2I7CisJdW5zaWduZWQgY2hhciBzcjFhID0gMDsKKwlpbnQgaTsKKworCS8qIEVuYWJsZSBHYW1tYSAqLworCXN3aXRjaCAodmlhcGFyaW5mby0+Y2hpcF9pbmZvLT5nZnhfY2hpcF9uYW1lKSB7CisJY2FzZSBVTklDSFJPTUVfQ0xFMjY2OgorCWNhc2UgVU5JQ0hST01FX0s0MDA6CisJCXZpYWZiX3dyaXRlX3JlZ19tYXNrKFNSMTYsIFZJQVNSLCAweDgwLCBCSVQ3KTsKKwkJYnJlYWs7CisKKwljYXNlIFVOSUNIUk9NRV9LODAwOgorCWNhc2UgVU5JQ0hST01FX1BNODAwOgorCWNhc2UgVU5JQ0hST01FX0NONzAwOgorCWNhc2UgVU5JQ0hST01FX0NYNzAwOgorCWNhc2UgVU5JQ0hST01FX0s4TTg5MDoKKwljYXNlIFVOSUNIUk9NRV9QNE04OTA6CisJY2FzZSBVTklDSFJPTUVfUDRNOTAwOgorCQl2aWFmYl93cml0ZV9yZWdfbWFzayhDUjMzLCBWSUFDUiwgMHg4MCwgQklUNyk7CisJCWJyZWFrOworCX0KKwlzcjFhID0gdmlhZmJfcmVhZF9yZWcoVklBU1IsIFNSMUEpOworCXZpYWZiX3dyaXRlX3JlZ19tYXNrKFNSMUEsIFZJQVNSLCAweDAsIEJJVDApOworCisJLyogUmVhZGluZyBnYW1tYSB0YWJsZSB0byBnZXQgY29sb3IgdmFsdWUgKi8KKwlvdXRiKDAsIExVVF9JTkRFWF9SRUFEKTsKKwlmb3IgKGkgPSAwOyBpIDwgMjU2OyBpKyspIHsKKwkJY29sb3JfciA9IGluYihMVVRfREFUQSk7CisJCWNvbG9yX2cgPSBpbmIoTFVUX0RBVEEpOworCQljb2xvcl9iID0gaW5iKExVVF9EQVRBKTsKKwkJZ2FtbWFfdGFibGVbaV0gPQorCQkgICAgKCgoKHUzMikgY29sb3JfcikgPDwgMTYpIHwKKwkJICAgICAoKCh1MTYpIGNvbG9yX2cpIDw8IDgpKSB8IGNvbG9yX2I7CisJfQorCXZpYWZiX3dyaXRlX3JlZyhTUjFBLCBWSUFTUiwgc3IxYSk7Cit9CisKK3ZvaWQgdmlhZmJfZ2V0X2dhbW1hX3N1cHBvcnRfc3RhdGUoaW50IGJwcCwgdW5zaWduZWQgaW50ICpzdXBwb3J0X3N0YXRlKQoreworCWlmIChicHAgPT0gOCkKKwkJKnN1cHBvcnRfc3RhdGUgPSBOb25lX0RldmljZTsKKwllbHNlCisJCSpzdXBwb3J0X3N0YXRlID0gQ1JUX0RldmljZSB8IERWSV9EZXZpY2UgfCBMQ0RfRGV2aWNlOworfQorCitpbnQgdmlhZmJfaW5wdXRfcGFyYW1ldGVyX2NvbnZlcnRlcihpbnQgcGFyYW1ldGVyX3ZhbHVlKQoreworCWludCByZXN1bHQ7CisKKwlpZiAocGFyYW1ldGVyX3ZhbHVlID49IDEgJiYgcGFyYW1ldGVyX3ZhbHVlIDw9IDkpCisJCXJlc3VsdCA9IDEgPDwgKHBhcmFtZXRlcl92YWx1ZSAtIDEpOworCWVsc2UKKwkJcmVzdWx0ID0gMTsKKworCXJldHVybiByZXN1bHQ7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3ZpYS92aWFfdXRpbGl0eS5oIGIvZHJpdmVycy92aWRlby92aWEvdmlhX3V0aWxpdHkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZmQ0NTUyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy92aWRlby92aWEvdmlhX3V0aWxpdHkuaApAQCAtMCwwICsxLDM1IEBACisvKgorICogQ29weXJpZ2h0IDE5OTgtMjAwOCBWSUEgVGVjaG5vbG9naWVzLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgMjAwMS0yMDA4IFMzIEdyYXBoaWNzLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKKyAqIGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRJRVMgT1IgUkVQUkVTRU5UQVRJT05TOyB3aXRob3V0IGV2ZW4KKyAqIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UuU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogZm9yIG1vcmUgZGV0YWlscy4KKworICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLAorICogNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworI2lmbmRlZiBfX1ZJQVVUSUxJVFlfSF9fCisjZGVmaW5lIF9fVklBVVRJTElUWV9IX18KKworLyogVGhlc2UgZnVuY3Rpb25zIGFyZSB1c2VkIHRvIGdldCBpbmZvbWF0aW9uIGFib3V0IGRldmljZSdzIHN0YXRlICovCit2b2lkIHZpYWZiX2dldF9kZXZpY2Vfc3VwcG9ydF9zdGF0ZSh1MzIgKnN1cHBvcnRfc3RhdGUpOwordm9pZCB2aWFmYl9nZXRfZGV2aWNlX2Nvbm5lY3Rfc3RhdGUodTMyICpjb25uZWN0X3N0YXRlKTsKK2Jvb2wgdmlhZmJfbGNkX2dldF9zdXBwb3J0X2V4cGFuZF9zdGF0ZSh1MzIgeHJlcywgdTMyIHlyZXMpOworCisvKiBUaGVzZSBmdW5jdGlvbiBhcmUgdXNlZCB0byBhY2Nlc3MgZ2FtbWEgdGFibGUgKi8KK3ZvaWQgdmlhZmJfc2V0X2dhbW1hX3RhYmxlKGludCBicHAsIHVuc2lnbmVkIGludCAqZ2FtbWFfdGFibGUpOwordm9pZCB2aWFmYl9nZXRfZ2FtbWFfdGFibGUodW5zaWduZWQgaW50ICpnYW1tYV90YWJsZSk7Cit2b2lkIHZpYWZiX2dldF9nYW1tYV9zdXBwb3J0X3N0YXRlKGludCBicHAsIHVuc2lnbmVkIGludCAqc3VwcG9ydF9zdGF0ZSk7CitpbnQgdmlhZmJfaW5wdXRfcGFyYW1ldGVyX2NvbnZlcnRlcihpbnQgcGFyYW1ldGVyX3ZhbHVlKTsKKworI2VuZGlmIC8qIF9fVklBVVRJTElUWV9IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vdmlhL3ZpYWZiZGV2LmMgYi9kcml2ZXJzL3ZpZGVvL3ZpYS92aWFmYmRldi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAxMzJlYWUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3ZpZGVvL3ZpYS92aWFmYmRldi5jCkBAIC0wLDAgKzEsMjU3MSBAQAorLyoKKyAqIENvcHlyaWdodCAxOTk4LTIwMDggVklBIFRlY2hub2xvZ2llcywgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IDIwMDEtMjAwOCBTMyBHcmFwaGljcywgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247CisgKiBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5USUVTIE9SIFJFUFJFU0VOVEFUSU9OUzsgd2l0aG91dCBldmVuCisgKiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFLlNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGZvciBtb3JlIGRldGFpbHMuCisKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwKKyAqIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2RlZmluZSBfTUFTVEVSX0ZJTEUKKworI2luY2x1ZGUgImdsb2JhbC5oIgorCitzdGF0aWMgaW50IE1BWF9DVVJTID0gMzI7CitzdGF0aWMgc3RydWN0IGZiX3Zhcl9zY3JlZW5pbmZvIGRlZmF1bHRfdmFyOworc3RhdGljIGNoYXIgKnZpYWZiX25hbWUgPSAiVmlhIjsKK3N0YXRpYyB1MzIgcHNldWRvX3BhbFsxN107CisKKy8qIHZpZGVvIG1vZGUgKi8KK3N0YXRpYyBjaGFyICp2aWFmYl9tb2RlID0gIjY0MHg0ODAiOworc3RhdGljIGNoYXIgKnZpYWZiX21vZGUxID0gIjY0MHg0ODAiOworc3RhdGljIGludCB2aWFmYl9yZXNNb2RlID0gVklBX1JFU182NDBYNDgwOworCisvKiBBZGRlZCBmb3Igc3BlY2lmeWluZyBhY3RpdmUgZGV2aWNlcy4qLworY2hhciAqdmlhZmJfYWN0aXZlX2RldiA9ICIiOworCisvKiBBZGRlZCBmb3Igc3BlY2lmeWluZyB2aWRlbyBvbiBkZXZpY2VzLiovCitjaGFyICp2aWFmYl92aWRlb19kZXYgPSAiIjsKKworLypBZGRlZCBmb3Igc3BlY2lmeSBsY2Qgb3V0cHV0IHBvcnQqLworY2hhciAqdmlhZmJfbGNkX3BvcnQgPSAiIjsKK2NoYXIgKnZpYWZiX2R2aV9wb3J0ID0gIiI7CisKK3N0YXRpYyB2b2lkIHZpYWZiX3NldF9kZXZpY2Uoc3RydWN0IGRldmljZV90IGFjdGl2ZV9kZXYpOworc3RhdGljIGludCBhcHBseV9kZXZpY2Vfc2V0dGluZyhzdHJ1Y3QgdmlhZmJfaW9jdGxfc2V0dGluZyBzZXR0aW5nX2luZm8sCisJCQkgc3RydWN0IGZiX2luZm8gKmluZm8pOworc3RhdGljIHZvaWQgYXBwbHlfc2Vjb25kX21vZGVfc2V0dGluZyhzdHJ1Y3QgZmJfdmFyX3NjcmVlbmluZm8KKwkqc2VjX3Zhcik7CitzdGF0aWMgdm9pZCByZXRyaWV2ZV9kZXZpY2Vfc2V0dGluZyhzdHJ1Y3QgdmlhZmJfaW9jdGxfc2V0dGluZworCSpzZXR0aW5nX2luZm8pOworc3RhdGljIHZvaWQgdmlhZmJfc2V0X3ZpZGVvX2RldmljZSh1MzIgdmlkZW9fZGV2X2luZm8pOworc3RhdGljIHZvaWQgdmlhZmJfZ2V0X3ZpZGVvX2RldmljZSh1MzIgKnZpZGVvX2Rldl9pbmZvKTsKKworLyogTW9kZSBpbmZvcm1hdGlvbiAqLworc3RhdGljIGNvbnN0IHN0cnVjdCB2aWFmYl9tb2RlaW5mbyB2aWFmYl9tb2RlbnRyeVtdID0geworCXs0ODAsIDY0MCwgVklBX1JFU180ODBYNjQwLCAiNDgweDY0MCJ9LAorCXs2NDAsIDQ4MCwgVklBX1JFU182NDBYNDgwLCAiNjQweDQ4MCJ9LAorCXs4MDAsIDQ4MCwgVklBX1JFU184MDBYNDgwLCAiODAweDQ4MCJ9LAorCXs4MDAsIDYwMCwgVklBX1JFU184MDBYNjAwLCAiODAweDYwMCJ9LAorCXsxMDI0LCA3NjgsIFZJQV9SRVNfMTAyNFg3NjgsICIxMDI0eDc2OCJ9LAorCXsxMTUyLCA4NjQsIFZJQV9SRVNfMTE1Mlg4NjQsICIxMTUyeDg2NCJ9LAorCXsxMjgwLCAxMDI0LCBWSUFfUkVTXzEyODBYMTAyNCwgIjEyODB4MTAyNCJ9LAorCXsxNjAwLCAxMjAwLCBWSUFfUkVTXzE2MDBYMTIwMCwgIjE2MDB4MTIwMCJ9LAorCXsxNDQwLCAxMDUwLCBWSUFfUkVTXzE0NDBYMTA1MCwgIjE0NDB4MTA1MCJ9LAorCXsxMjgwLCA3NjgsIFZJQV9SRVNfMTI4MFg3NjgsICIxMjgweDc2OCJ9LAorCXsxMjgwLCA4MDAsIFZJQV9SRVNfMTI4MFg4MDAsICIxMjgweDgwMCJ9LAorCXsxMjgwLCA5NjAsIFZJQV9SRVNfMTI4MFg5NjAsICIxMjgweDk2MCJ9LAorCXsxOTIwLCAxNDQwLCBWSUFfUkVTXzE5MjBYMTQ0MCwgIjE5MjB4MTQ0MCJ9LAorCXs4NDgsIDQ4MCwgVklBX1JFU184NDhYNDgwLCAiODQ4eDQ4MCJ9LAorCXsxNDAwLCAxMDUwLCBWSUFfUkVTXzE0MDBYMTA1MCwgIjE0MDB4MTA1MCJ9LAorCXs3MjAsIDQ4MCwgVklBX1JFU183MjBYNDgwLCAiNzIweDQ4MCJ9LAorCXs3MjAsIDU3NiwgVklBX1JFU183MjBYNTc2LCAiNzIweDU3NiJ9LAorCXsxMDI0LCA1MTIsIFZJQV9SRVNfMTAyNFg1MTIsICIxMDI0eDUxMiJ9LAorCXsxMDI0LCA1NzYsIFZJQV9SRVNfMTAyNFg1NzYsICIxMDI0eDU3NiJ9LAorCXsxMDI0LCA2MDAsIFZJQV9SRVNfMTAyNFg2MDAsICIxMDI0eDYwMCJ9LAorCXsxMjgwLCA3MjAsIFZJQV9SRVNfMTI4MFg3MjAsICIxMjgweDcyMCJ9LAorCXsxOTIwLCAxMDgwLCBWSUFfUkVTXzE5MjBYMTA4MCwgIjE5MjB4MTA4MCJ9LAorCXsxMzY2LCA3NjgsIFZJQV9SRVNfMTM2OFg3NjgsICIxMzY4eDc2OCJ9LAorCXsxNjgwLCAxMDUwLCBWSUFfUkVTXzE2ODBYMTA1MCwgIjE2ODB4MTA1MCJ9LAorCXs5NjAsIDYwMCwgVklBX1JFU185NjBYNjAwLCAiOTYweDYwMCJ9LAorCXsxMDAwLCA2MDAsIFZJQV9SRVNfMTAwMFg2MDAsICIxMDAweDYwMCJ9LAorCXsxMDI0LCA1NzYsIFZJQV9SRVNfMTAyNFg1NzYsICIxMDI0eDU3NiJ9LAorCXsxMDI0LCA2MDAsIFZJQV9SRVNfMTAyNFg2MDAsICIxMDI0eDYwMCJ9LAorCXsxMDg4LCA2MTIsIFZJQV9SRVNfMTA4OFg2MTIsICIxMDg4eDYxMiJ9LAorCXsxMTUyLCA3MjAsIFZJQV9SRVNfMTE1Mlg3MjAsICIxMTUyeDcyMCJ9LAorCXsxMjAwLCA3MjAsIFZJQV9SRVNfMTIwMFg3MjAsICIxMjAweDcyMCJ9LAorCXsxMjgwLCA2MDAsIFZJQV9SRVNfMTI4MFg2MDAsICIxMjgweDYwMCJ9LAorCXsxMzYwLCA3NjgsIFZJQV9SRVNfMTM2MFg3NjgsICIxMzYweDc2OCJ9LAorCXsxNDQwLCA5MDAsIFZJQV9SRVNfMTQ0MFg5MDAsICIxNDQweDkwMCJ9LAorCXsxNjAwLCA5MDAsIFZJQV9SRVNfMTYwMFg5MDAsICIxNjAweDkwMCJ9LAorCXsxNjAwLCAxMDI0LCBWSUFfUkVTXzE2MDBYMTAyNCwgIjE2MDB4MTAyNCJ9LAorCXsxNzkyLCAxMzQ0LCBWSUFfUkVTXzE3OTJYMTM0NCwgIjE3OTJ4MTM0NCJ9LAorCXsxODU2LCAxMzkyLCBWSUFfUkVTXzE4NTZYMTM5MiwgIjE4NTZ4MTM5MiJ9LAorCXsxOTIwLCAxMjAwLCBWSUFfUkVTXzE5MjBYMTIwMCwgIjE5MjB4MTIwMCJ9LAorCXsyMDQ4LCAxNTM2LCBWSUFfUkVTXzIwNDhYMTUzNiwgIjIwNDh4MTUzNiJ9LAorCXswLCAwLCBWSUFfUkVTX0lOVkFMSUQsICI2NDB4NDgwIn0KK307CisKK3N0YXRpYyBzdHJ1Y3QgZmJfb3BzIHZpYWZiX29wczsKKworc3RhdGljIGludCB2aWFmYl91cGRhdGVfZml4KHN0cnVjdCBmYl9maXhfc2NyZWVuaW5mbyAqZml4LCBzdHJ1Y3QgZmJfaW5mbyAqaW5mbykKK3sKKwlzdHJ1Y3QgdmlhZmJfcGFyICpwcGFyOworCXBwYXIgPSBpbmZvLT5wYXI7CisKKwlERUJVR19NU0coS0VSTl9JTkZPICJ2aWFmYl91cGRhdGVfZml4IVxuIik7CisKKwlmaXgtPnZpc3VhbCA9CisJICAgIHBwYXItPmJwcCA9PSA4ID8gRkJfVklTVUFMX1BTRVVET0NPTE9SIDogRkJfVklTVUFMX1RSVUVDT0xPUjsKKwlmaXgtPmxpbmVfbGVuZ3RoID0gcHBhci0+bGluZWxlbmd0aDsKKworCXJldHVybiAwOworfQorCisKK3N0YXRpYyB2b2lkIHZpYWZiX3NldHVwX2ZpeGluZm8oc3RydWN0IGZiX2ZpeF9zY3JlZW5pbmZvICpmaXgsCisJc3RydWN0IHZpYWZiX3BhciAqdmlhcGFyaW5mbykKK3sKKwltZW1zZXQoZml4LCAwLCBzaXplb2Yoc3RydWN0IGZiX2ZpeF9zY3JlZW5pbmZvKSk7CisJc3RyY3B5KGZpeC0+aWQsIHZpYWZiX25hbWUpOworCisJZml4LT5zbWVtX3N0YXJ0ID0gdmlhcGFyaW5mby0+ZmJtZW07CisJZml4LT5zbWVtX2xlbiA9IHZpYXBhcmluZm8tPmZibWVtX2ZyZWU7CisJZml4LT5tbWlvX3N0YXJ0ID0gdmlhcGFyaW5mby0+bW1pb19iYXNlOworCWZpeC0+bW1pb19sZW4gPSB2aWFwYXJpbmZvLT5tbWlvX2xlbjsKKworCWZpeC0+dHlwZSA9IEZCX1RZUEVfUEFDS0VEX1BJWEVMUzsKKwlmaXgtPnR5cGVfYXV4ID0gMDsKKworCWZpeC0+eHBhbnN0ZXAgPSBmaXgtPnl3cmFwc3RlcCA9IDA7CisJZml4LT55cGFuc3RlcCA9IDE7CisKKwkvKiBKdXN0IHRlbGwgdGhlIGFjY2VsIG5hbWUgKi8KKwl2aWFmYmluZm8tPmZpeC5hY2NlbCA9IEZCX0FDQ0VMX1ZJQV9VTklDSFJPTUU7Cit9CitzdGF0aWMgaW50IHZpYWZiX29wZW4oc3RydWN0IGZiX2luZm8gKmluZm8sIGludCB1c2VyKQoreworCURFQlVHX01TRyhLRVJOX0lORk8gInZpYWZiX29wZW4hXG4iKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2aWFmYl9yZWxlYXNlKHN0cnVjdCBmYl9pbmZvICppbmZvLCBpbnQgdXNlcikKK3sKKwlERUJVR19NU0coS0VSTl9JTkZPICJ2aWFmYl9yZWxlYXNlIVxuIik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHZpYWZiX3VwZGF0ZV92aWFmYl9wYXIoc3RydWN0IGZiX2luZm8gKmluZm8pCit7CisJc3RydWN0IHZpYWZiX3BhciAqcHBhcjsKKworCXBwYXIgPSBpbmZvLT5wYXI7CisJcHBhci0+YnBwID0gaW5mby0+dmFyLmJpdHNfcGVyX3BpeGVsOworCXBwYXItPmxpbmVsZW5ndGggPSAoKGluZm8tPnZhci54cmVzX3ZpcnR1YWwgKyA3KSAmIH43KSAqIHBwYXItPmJwcCAvIDg7CisJcHBhci0+aHJlcyA9IGluZm8tPnZhci54cmVzOworCXBwYXItPnZyZXMgPSBpbmZvLT52YXIueXJlczsKKwlwcGFyLT54b2Zmc2V0ID0gaW5mby0+dmFyLnhvZmZzZXQ7CisJcHBhci0+eW9mZnNldCA9IGluZm8tPnZhci55b2Zmc2V0OworfQorCitzdGF0aWMgaW50IHZpYWZiX2NoZWNrX3ZhcihzdHJ1Y3QgZmJfdmFyX3NjcmVlbmluZm8gKnZhciwKKwlzdHJ1Y3QgZmJfaW5mbyAqaW5mbykKK3sKKwlpbnQgdm1vZGVfaW5kZXgsIGh0b3RhbCwgdnRvdGFsOworCXN0cnVjdCB2aWFmYl9wYXIgKnBwYXI7CisJdTMyIGxvbmdfcmVmcmVzaDsKKwlzdHJ1Y3QgdmlhZmJfcGFyICpwX3ZpYWZiX3BhcjsKKwlwcGFyID0gaW5mby0+cGFyOworCisKKwlERUJVR19NU0coS0VSTl9JTkZPICJ2aWFmYl9jaGVja192YXIhXG4iKTsKKwkvKiBTYW5pdHkgY2hlY2sgKi8KKwkvKiBIVyBuZWl0aGVyIHN1cHBvcnQgaW50ZXJsYWN0ZSBub3IgZG91YmxlLXNjYW5lZCBtb2RlICovCisJaWYgKHZhci0+dm1vZGUgJiBGQl9WTU9ERV9JTlRFUkxBQ0VEIHx8IHZhci0+dm1vZGUgJiBGQl9WTU9ERV9ET1VCTEUpCisJCXJldHVybiAtRUlOVkFMOworCisJdm1vZGVfaW5kZXggPSB2aWFmYl9nZXRfbW9kZV9pbmRleCh2YXItPnhyZXMsIHZhci0+eXJlcywgMCk7CisJaWYgKHZtb2RlX2luZGV4ID09IFZJQV9SRVNfSU5WQUxJRCkgeworCQlERUJVR19NU0coS0VSTl9JTkZPCisJCQkgICJ2aWFmYjogTW9kZSAlZHglZHglZCBub3Qgc3VwcG9ydGVkISFcbiIsCisJCQkgIHZhci0+eHJlcywgdmFyLT55cmVzLCB2YXItPmJpdHNfcGVyX3BpeGVsKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKDI0ID09IHZhci0+Yml0c19wZXJfcGl4ZWwpCisJCXZhci0+Yml0c19wZXJfcGl4ZWwgPSAzMjsKKworCWlmICh2YXItPmJpdHNfcGVyX3BpeGVsICE9IDggJiYgdmFyLT5iaXRzX3Blcl9waXhlbCAhPSAxNiAmJgorCQl2YXItPmJpdHNfcGVyX3BpeGVsICE9IDMyKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmICgodmFyLT54cmVzX3ZpcnR1YWwgKiAodmFyLT5iaXRzX3Blcl9waXhlbCA+PiAzKSkgJiAweDFGKQorCQkvKjMyIHBpeGVsIGFsaWdubWVudCAqLworCQl2YXItPnhyZXNfdmlydHVhbCA9ICh2YXItPnhyZXNfdmlydHVhbCArIDMxKSAmIH4zMTsKKwlpZiAodmFyLT54cmVzX3ZpcnR1YWwgKiB2YXItPnlyZXNfdmlydHVhbCAqIHZhci0+Yml0c19wZXJfcGl4ZWwgLyA4ID4KKwkJcHBhci0+bWVtc2l6ZSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKiBCYXNlZCBvbiB2YXIgcGFzc2VkIGluIHRvIGNhbGN1bGF0ZSB0aGUgcmVmcmVzaCwKKwkgKiBiZWNhdXNlIG91ciBkcml2ZXIgdXNlIHNvbWUgbW9kZXMgc3BlY2lhbC4KKwkgKi8KKwlodG90YWwgPSB2YXItPnhyZXMgKyB2YXItPmxlZnRfbWFyZ2luICsKKwl2YXItPnJpZ2h0X21hcmdpbiArIHZhci0+aHN5bmNfbGVuOworCXZ0b3RhbCA9IHZhci0+eXJlcyArIHZhci0+dXBwZXJfbWFyZ2luICsKKwkJdmFyLT5sb3dlcl9tYXJnaW4gKyB2YXItPnZzeW5jX2xlbjsKKwlsb25nX3JlZnJlc2ggPSAxMDAwMDAwMDAwVUwgLyB2YXItPnBpeGNsb2NrICogMTAwMDsKKwlsb25nX3JlZnJlc2ggLz0gKGh0b3RhbCAqIHZ0b3RhbCk7CisKKwl2aWFmYl9yZWZyZXNoID0gdmlhZmJfZ2V0X3JlZnJlc2godmFyLT54cmVzLCB2YXItPnlyZXMsIGxvbmdfcmVmcmVzaCk7CisKKwkvKiBBZGp1c3QgdmFyIGFjY29yZGluZyB0byBvdXIgZHJpdmVyJ3Mgb3duIHRhYmxlICovCisJdmlhZmJfZmlsbF92YXJfdGltaW5nX2luZm8odmFyLCB2aWFmYl9yZWZyZXNoLCB2bW9kZV9pbmRleCk7CisKKwkvKiBUaGlzIGlzIGluZGVlZCBhIHBhdGNoIGZvciBWVDMzNTMgKi8KKwlpZiAoIWluZm8tPnBhcikKKwkJcmV0dXJuIC0xOworCXBfdmlhZmJfcGFyID0gKHN0cnVjdCB2aWFmYl9wYXIgKilpbmZvLT5wYXI7CisJaWYgKHBfdmlhZmJfcGFyLT5jaGlwX2luZm8tPmdmeF9jaGlwX25hbWUgPT0gVU5JQ0hST01FX1ZYODAwKQorCQl2YXItPmFjY2VsX2ZsYWdzID0gMDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZpYWZiX3NldF9wYXIoc3RydWN0IGZiX2luZm8gKmluZm8pCit7CisJaW50IHZtb2RlX2luZGV4OworCWludCB2bW9kZV9pbmRleDEgPSAwOworCURFQlVHX01TRyhLRVJOX0lORk8gInZpYWZiX3NldF9wYXIhXG4iKTsKKworCXZpYWZiX3VwZGF0ZV9kZXZpY2Vfc2V0dGluZyhpbmZvLT52YXIueHJlcywgaW5mby0+dmFyLnlyZXMsCisJCQkgICAgICBpbmZvLT52YXIuYml0c19wZXJfcGl4ZWwsIHZpYWZiX3JlZnJlc2gsIDApOworCisJdm1vZGVfaW5kZXggPSB2aWFmYl9nZXRfbW9kZV9pbmRleChpbmZvLT52YXIueHJlcywgaW5mby0+dmFyLnlyZXMsIDApOworCisJaWYgKHZpYWZiX1NBTU1fT04gPT0gMSkgeworCQlERUJVR19NU0coS0VSTl9JTkZPCisJCSJ2aWFmYl9zZWNvbmRfeHJlcyA9ICVkLCB2aWFmYl9zZWNvbmRfeXJlcyA9ICVkLCBicHAgPSAlZFxuIiwKKwkJCSAgdmlhZmJfc2Vjb25kX3hyZXMsIHZpYWZiX3NlY29uZF95cmVzLCB2aWFmYl9icHAxKTsKKwkJdm1vZGVfaW5kZXgxID0gdmlhZmJfZ2V0X21vZGVfaW5kZXgodmlhZmJfc2Vjb25kX3hyZXMsCisJCQl2aWFmYl9zZWNvbmRfeXJlcywgMSk7CisJCURFQlVHX01TRyhLRVJOX0lORk8gIi0+dmlhZmJfU0FNTV9PTjogaW5kZXg9JWRcbiIsCisJCQl2bW9kZV9pbmRleDEpOworCisJCXZpYWZiX3VwZGF0ZV9kZXZpY2Vfc2V0dGluZyh2aWFmYl9zZWNvbmRfeHJlcywKKwkJCXZpYWZiX3NlY29uZF95cmVzLCB2aWFmYl9icHAxLCB2aWFmYl9yZWZyZXNoMSwgMSk7CisJfQorCisJaWYgKHZtb2RlX2luZGV4ICE9IFZJQV9SRVNfSU5WQUxJRCkgeworCQl2aWFmYl9zZXRtb2RlKHZtb2RlX2luZGV4LCBpbmZvLT52YXIueHJlcywgaW5mby0+dmFyLnlyZXMsCisJCQlpbmZvLT52YXIuYml0c19wZXJfcGl4ZWwsIHZtb2RlX2luZGV4MSwKKwkJCXZpYWZiX3NlY29uZF94cmVzLCB2aWFmYl9zZWNvbmRfeXJlcywgdmlhZmJfYnBwMSk7CisKKwkJLypXZSBzaG91bGQgc2V0IG1lbW9yeSBvZmZzZXQgYWNjb3JkaW5nIHZpcnR1YWxfeCAqLworCQkvKkZpeCBtZTpwdXQgdGhpcyBmdW5jdGlvbiBpbnRvIHZpYWZiX3NldG1vZGUgKi8KKwkJdmlhZmJfbWVtb3J5X3BpdGNoX3BhdGNoKGluZm8pOworCisJCS8qIFVwZGF0ZSAqKipmYl9wYXIgaW5mb3JtYXRpb24gKi8KKwkJdmlhZmJfdXBkYXRlX3ZpYWZiX3BhcihpbmZvKTsKKworCQkvKiBVcGRhdGUgb3RoZXIgZml4ZWQgaW5mb3JtYXRpb24gKi8KKwkJdmlhZmJfdXBkYXRlX2ZpeCgmaW5mby0+Zml4LCBpbmZvKTsKKwkJdmlhZmJfYnBwID0gaW5mby0+dmFyLmJpdHNfcGVyX3BpeGVsOworCQkvKiBVcGRhdGUgdmlhZmJfYWNjZWwsIGl0IGlzIG5lY2Vzc2FyeSB0byBvdXIgMkQgYWNjZWxlcmF0ZSAqLworCQl2aWFmYl9hY2NlbCA9IGluZm8tPnZhci5hY2NlbF9mbGFnczsKKworCQlpZiAodmlhZmJfYWNjZWwpCisJCQl2aWFmYl9zZXRfMmRfY29sb3JfZGVwdGgoaW5mby0+dmFyLmJpdHNfcGVyX3BpeGVsKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyogU2V0IG9uZSBjb2xvciByZWdpc3RlciAqLworc3RhdGljIGludCB2aWFmYl9zZXRjb2xyZWcodW5zaWduZWQgcmVnbm8sIHVuc2lnbmVkIHJlZCwgdW5zaWduZWQgZ3JlZW4sCit1bnNpZ25lZCBibHVlLCB1bnNpZ25lZCB0cmFuc3AsIHN0cnVjdCBmYl9pbmZvICppbmZvKQoreworCXU4IHNyMWEsIHNyMWIsIGNyNjcsIGNyNmEsIHJldiA9IDAsIHNoaWZ0ID0gMTA7CisJdW5zaWduZWQgY21hcF9lbnRyaWVzID0gKGluZm8tPnZhci5iaXRzX3Blcl9waXhlbCA9PSA4KSA/IDI1NiA6IDE2OworCURFQlVHX01TRyhLRVJOX0lORk8gInZpYWZiX3NldGNvbHJlZyFcbiIpOworCWlmIChyZWdubyA+PSBjbWFwX2VudHJpZXMpCisJCXJldHVybiAxOworCWlmIChVTklDSFJPTUVfQ0xFMjY2ID09IHZpYXBhcmluZm8tPmNoaXBfaW5mby0+Z2Z4X2NoaXBfbmFtZSkgeworCQkvKgorCQkgKiBSZWFkIFBDSSBidXMgMCxkZXYgMCxmdW5jdGlvbiAwLGluZGV4IDB4RjYgdG8gZ2V0IGNoaXAgcmV2LgorCQkgKi8KKwkJb3V0bCgweDgwMDAwMDAwIHwgKDB4ZjYgJiB+MyksICh1bnNpZ25lZCBsb25nKTB4Q0Y4KTsKKwkJcmV2ID0gKGlubCgodW5zaWduZWQgbG9uZykweENGQykgPj4gKCgweGY2ICYgMykgKiA4KSkgJiAweGZmOworCX0KKwlzd2l0Y2ggKGluZm8tPnZhci5iaXRzX3Blcl9waXhlbCkgeworCWNhc2UgODoKKwkJb3V0YigweDFBLCAweDNDNCk7CisJCXNyMWEgPSBpbmIoMHgzQzUpOworCQlvdXRiKDB4MUIsIDB4M0M0KTsKKwkJc3IxYiA9IGluYigweDNDNSk7CisJCW91dGIoMHg2NywgMHgzRDQpOworCQljcjY3ID0gaW5iKDB4M0Q1KTsKKwkJb3V0YigweDZBLCAweDNENCk7CisJCWNyNmEgPSBpbmIoMHgzRDUpOworCisJCS8qIE1hcCB0aGUgM0M2LzcvOC85IHRvIHRoZSBJR0EyICovCisJCW91dGIoMHgxQSwgMHgzQzQpOworCQlvdXRiKHNyMWEgfCAweDAxLCAweDNDNSk7CisJCS8qIFNlY29uZCBEaXNwbGF5IEVuZ2luZSBjb2xjayBhbHdheXMgb24gKi8KKwkJb3V0YigweDFCLCAweDNDNCk7CisJCW91dGIoc3IxYiB8IDB4ODAsIDB4M0M1KTsKKwkJLyogU2Vjb25kIERpc3BsYXkgQ29sb3IgRGVwdGggOCAqLworCQlvdXRiKDB4NjcsIDB4M0Q0KTsKKwkJb3V0YihjcjY3ICYgMHgzRiwgMHgzRDUpOworCQlvdXRiKDB4NkEsIDB4M0Q0KTsKKwkJLyogU2Vjb25kIERpc3BsYXkgQ2hhbm5lbCBSZXNldCBDUjZBWzZdKSAqLworCQlvdXRiKGNyNmEgJiAweEJGLCAweDNENSk7CisJCS8qIFNlY29uZCBEaXNwbGF5IENoYW5uZWwgRW5hYmxlIENSNkFbN10gKi8KKwkJb3V0YihjcjZhIHwgMHg4MCwgMHgzRDUpOworCQkvKiBTZWNvbmQgRGlzcGxheSBDaGFubmVsIHN0b3AgcmVzZXQpICovCisJCW91dGIoY3I2YSB8IDB4NDAsIDB4M0Q1KTsKKworCQkvKiBCaXQgbWFzayBvZiBwYWxldHRlICovCisJCW91dGIoMHhGRiwgMHgzYzYpOworCQkvKiBXcml0ZSBvbmUgcmVnaXN0ZXIgb2YgSUdBMiAqLworCQlvdXRiKHJlZ25vLCAweDNDOCk7CisJCWlmIChVTklDSFJPTUVfQ0xFMjY2ID09IHZpYXBhcmluZm8tPmNoaXBfaW5mby0+Z2Z4X2NoaXBfbmFtZSAmJgorCQkJcmV2ID49IDE1KSB7CisJCQlzaGlmdCA9IDg7CisJCQl2aWFmYl93cml0ZV9yZWdfbWFzayhDUjZBLCBWSUFDUiwgQklUNSwgQklUNSk7CisJCQl2aWFmYl93cml0ZV9yZWdfbWFzayhTUjE1LCBWSUFTUiwgQklUNywgQklUNyk7CisJCX0gZWxzZSB7CisJCQlzaGlmdCA9IDEwOworCQkJdmlhZmJfd3JpdGVfcmVnX21hc2soQ1I2QSwgVklBQ1IsIDAsIEJJVDUpOworCQkJdmlhZmJfd3JpdGVfcmVnX21hc2soU1IxNSwgVklBU1IsIDAsIEJJVDcpOworCQl9CisJCW91dGIocmVkID4+IHNoaWZ0LCAweDNDOSk7CisJCW91dGIoZ3JlZW4gPj4gc2hpZnQsIDB4M0M5KTsKKwkJb3V0YihibHVlID4+IHNoaWZ0LCAweDNDOSk7CisKKwkJLyogTWFwIHRoZSAzQzYvNy84LzkgdG8gdGhlIElHQTEgKi8KKwkJb3V0YigweDFBLCAweDNDNCk7CisJCW91dGIoc3IxYSAmIDB4RkUsIDB4M0M1KTsKKwkJLyogQml0IG1hc2sgb2YgcGFsZXR0ZSAqLworCQlvdXRiKDB4RkYsIDB4M2M2KTsKKwkJLyogV3JpdGUgb25lIHJlZ2lzdGVyIG9mIElHQTEgKi8KKwkJb3V0YihyZWdubywgMHgzQzgpOworCQlvdXRiKHJlZCA+PiBzaGlmdCwgMHgzQzkpOworCQlvdXRiKGdyZWVuID4+IHNoaWZ0LCAweDNDOSk7CisJCW91dGIoYmx1ZSA+PiBzaGlmdCwgMHgzQzkpOworCisJCW91dGIoMHgxQSwgMHgzQzQpOworCQlvdXRiKHNyMWEsIDB4M0M1KTsKKwkJb3V0YigweDFCLCAweDNDNCk7CisJCW91dGIoc3IxYiwgMHgzQzUpOworCQlvdXRiKDB4NjcsIDB4M0Q0KTsKKwkJb3V0YihjcjY3LCAweDNENSk7CisJCW91dGIoMHg2QSwgMHgzRDQpOworCQlvdXRiKGNyNmEsIDB4M0Q1KTsKKwkJYnJlYWs7CisJY2FzZSAxNjoKKwkJKCh1MzIgKikgaW5mby0+cHNldWRvX3BhbGV0dGUpW3JlZ25vXSA9IChyZWQgJiAweEY4MDApIHwKKwkJICAgICgoZ3JlZW4gJiAweEZDMDApID4+IDUpIHwgKChibHVlICYgMHhGODAwKSA+PiAxMSk7CisJCWJyZWFrOworCWNhc2UgMzI6CisJCSgodTMyICopIGluZm8tPnBzZXVkb19wYWxldHRlKVtyZWdub10gPQorCQkgICAgKCh0cmFuc3AgJiAweEZGMDApIDw8IDE2KSB8CisJCSAgICAoKHJlZCAmIDB4RkYwMCkgPDwgOCkgfAorCQkgICAgKChncmVlbiAmIDB4RkYwMCkpIHwgKChibHVlICYgMHhGRjAwKSA+PiA4KTsKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIDA7CisKK30KKworLypDQUxMRUQgQlk6IGZiX3NldF9jbWFwICovCisvKiAgICAgICAgICAgZmJfc2V0X3ZhciwgcGFzcyAyNTYgY29sb3JzICovCisvKkNBTExFRCBCWTogZmJfc2V0X2NtYXAgKi8KKy8qICAgICAgICAgICBmYmNvbl9zZXRfcGFsZXR0ZSwgcGFzcyAxNiBjb2xvcnMgKi8KK3N0YXRpYyBpbnQgdmlhZmJfc2V0Y21hcChzdHJ1Y3QgZmJfY21hcCAqY21hcCwgc3RydWN0IGZiX2luZm8gKmluZm8pCit7CisJdTMyIGxlbiA9IGNtYXAtPmxlbjsKKwl1MzIgaTsKKwl1MTYgKnByZWQgPSBjbWFwLT5yZWQ7CisJdTE2ICpwZ3JlZW4gPSBjbWFwLT5ncmVlbjsKKwl1MTYgKnBibHVlID0gY21hcC0+Ymx1ZTsKKwl1MTYgKnB0cmFuc3AgPSBjbWFwLT50cmFuc3A7CisJdTggc3IxYSwgc3IxYiwgY3I2NywgY3I2YSwgcmV2ID0gMCwgc2hpZnQgPSAxMDsKKwlpZiAobGVuID4gMjU2KQorCQlyZXR1cm4gMTsKKwlpZiAoVU5JQ0hST01FX0NMRTI2NiA9PSB2aWFwYXJpbmZvLT5jaGlwX2luZm8tPmdmeF9jaGlwX25hbWUpIHsKKwkJLyoKKwkJICogUmVhZCBQQ0kgYnVzIDAsIGRldiAwLCBmdW5jdGlvbiAwLCBpbmRleCAweEY2IHRvIGdldCBjaGlwCisJCSAqIHJldi4KKwkJICovCisJCW91dGwoMHg4MDAwMDAwMCB8ICgweGY2ICYgfjMpLCAodW5zaWduZWQgbG9uZykweENGOCk7CisJCXJldiA9IChpbmwoKHVuc2lnbmVkIGxvbmcpMHhDRkMpID4+ICgoMHhmNiAmIDMpICogOCkpICYgMHhmZjsKKwl9CisJc3dpdGNoIChpbmZvLT52YXIuYml0c19wZXJfcGl4ZWwpIHsKKwljYXNlIDg6CisJCW91dGIoMHgxQSwgMHgzQzQpOworCQlzcjFhID0gaW5iKDB4M0M1KTsKKwkJb3V0YigweDFCLCAweDNDNCk7CisJCXNyMWIgPSBpbmIoMHgzQzUpOworCQlvdXRiKDB4NjcsIDB4M0Q0KTsKKwkJY3I2NyA9IGluYigweDNENSk7CisJCW91dGIoMHg2QSwgMHgzRDQpOworCQljcjZhID0gaW5iKDB4M0Q1KTsKKwkJLyogTWFwIHRoZSAzQzYvNy84LzkgdG8gdGhlIElHQTIgKi8KKwkJb3V0YigweDFBLCAweDNDNCk7CisJCW91dGIoc3IxYSB8IDB4MDEsIDB4M0M1KTsKKwkJb3V0YigweDFCLCAweDNDNCk7CisJCS8qIFNlY29uZCBEaXNwbGF5IEVuZ2luZSBjb2xjayBhbHdheXMgb24gKi8KKwkJb3V0YihzcjFiIHwgMHg4MCwgMHgzQzUpOworCQlvdXRiKDB4NjcsIDB4M0Q0KTsKKwkJLyogU2Vjb25kIERpc3BsYXkgQ29sb3IgRGVwdGggOCAqLworCQlvdXRiKGNyNjcgJiAweDNGLCAweDNENSk7CisJCW91dGIoMHg2QSwgMHgzRDQpOworCQkvKiBTZWNvbmQgRGlzcGxheSBDaGFubmVsIFJlc2V0IENSNkFbNl0pICovCisJCW91dGIoY3I2YSAmIDB4QkYsIDB4M0Q1KTsKKwkJLyogU2Vjb25kIERpc3BsYXkgQ2hhbm5lbCBFbmFibGUgQ1I2QVs3XSAqLworCQlvdXRiKGNyNmEgfCAweDgwLCAweDNENSk7CisJCS8qIFNlY29uZCBEaXNwbGF5IENoYW5uZWwgc3RvcCByZXNldCkgKi8KKwkJb3V0YihjcjZhIHwgMHhDMCwgMHgzRDUpOworCisJCS8qIEJpdCBtYXNrIG9mIHBhbGV0dGUgKi8KKwkJb3V0YigweEZGLCAweDNjNik7CisJCW91dGIoMHgwMCwgMHgzQzgpOworCQlpZiAoVU5JQ0hST01FX0NMRTI2NiA9PSB2aWFwYXJpbmZvLT5jaGlwX2luZm8tPmdmeF9jaGlwX25hbWUgJiYKKwkJCXJldiA+PSAxNSkgeworCQkJc2hpZnQgPSA4OworCQkJdmlhZmJfd3JpdGVfcmVnX21hc2soQ1I2QSwgVklBQ1IsIEJJVDUsIEJJVDUpOworCQkJdmlhZmJfd3JpdGVfcmVnX21hc2soU1IxNSwgVklBU1IsIEJJVDcsIEJJVDcpOworCQl9IGVsc2UgeworCQkJc2hpZnQgPSAxMDsKKwkJCXZpYWZiX3dyaXRlX3JlZ19tYXNrKENSNkEsIFZJQUNSLCAwLCBCSVQ1KTsKKwkJCXZpYWZiX3dyaXRlX3JlZ19tYXNrKFNSMTUsIFZJQVNSLCAwLCBCSVQ3KTsKKwkJfQorCQlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKKwkJCW91dGIoKCoocHJlZCArIGkpKSA+PiBzaGlmdCwgMHgzQzkpOworCQkJb3V0YigoKihwZ3JlZW4gKyBpKSkgPj4gc2hpZnQsIDB4M0M5KTsKKwkJCW91dGIoKCoocGJsdWUgKyBpKSkgPj4gc2hpZnQsIDB4M0M5KTsKKwkJfQorCisJCW91dGIoMHgxQSwgMHgzQzQpOworCQkvKiBNYXAgdGhlIDNDNi83LzgvOSB0byB0aGUgSUdBMSAqLworCQlvdXRiKHNyMWEgJiAweEZFLCAweDNDNSk7CisJCS8qIEJpdCBtYXNrIG9mIHBhbGV0dGUgKi8KKwkJb3V0YigweEZGLCAweDNjNik7CisJCW91dGIoMHgwMCwgMHgzQzgpOworCQlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKKwkJCW91dGIoKCoocHJlZCArIGkpKSA+PiBzaGlmdCwgMHgzQzkpOworCQkJb3V0YigoKihwZ3JlZW4gKyBpKSkgPj4gc2hpZnQsIDB4M0M5KTsKKwkJCW91dGIoKCoocGJsdWUgKyBpKSkgPj4gc2hpZnQsIDB4M0M5KTsKKwkJfQorCisJCW91dGIoMHgxQSwgMHgzQzQpOworCQlvdXRiKHNyMWEsIDB4M0M1KTsKKwkJb3V0YigweDFCLCAweDNDNCk7CisJCW91dGIoc3IxYiwgMHgzQzUpOworCQlvdXRiKDB4NjcsIDB4M0Q0KTsKKwkJb3V0YihjcjY3LCAweDNENSk7CisJCW91dGIoMHg2QSwgMHgzRDQpOworCQlvdXRiKGNyNmEsIDB4M0Q1KTsKKwkJYnJlYWs7CisJY2FzZSAxNjoKKwkJaWYgKGxlbiA+IDE3KQorCQkJcmV0dXJuIDA7CS8qIEJlY2F1c2Ugc3RhdGljIHUzMiBwc2V1ZG9fcGFsWzE3XTsgKi8KKwkJZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKQorCQkJKCh1MzIgKikgaW5mby0+cHNldWRvX3BhbGV0dGUpW2ldID0KKwkJCSAgICAoKihwcmVkICsgaSkgJiAweEY4MDApIHwKKwkJCSAgICAoKCoocGdyZWVuICsgaSkgJiAweEZDMDApID4+IDUpIHwKKwkJCSAgICAoKCoocGJsdWUgKyBpKSAmIDB4RjgwMCkgPj4gMTEpOworCQlicmVhazsKKwljYXNlIDMyOgorCQlpZiAobGVuID4gMTcpCisJCQlyZXR1cm4gMDsKKwkJaWYgKHB0cmFuc3ApIHsKKwkJCWZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykKKwkJCQkoKHUzMiAqKSBpbmZvLT5wc2V1ZG9fcGFsZXR0ZSlbaV0gPQorCQkJCSAgICAoKCoocHRyYW5zcCArIGkpICYgMHhGRjAwKSA8PCAxNikgfAorCQkJCSAgICAoKCoocHJlZCArIGkpICYgMHhGRjAwKSA8PCA4KSB8CisJCQkJICAgICgoKihwZ3JlZW4gKyBpKSAmIDB4RkYwMCkpIHwKKwkJCQkgICAgKCgqKHBibHVlICsgaSkgJiAweEZGMDApID4+IDgpOworCQl9IGVsc2UgeworCQkJZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKQorCQkJCSgodTMyICopIGluZm8tPnBzZXVkb19wYWxldHRlKVtpXSA9CisJCQkJICAgIDB4MDAwMDAwMDAgfAorCQkJCSAgICAoKCoocHJlZCArIGkpICYgMHhGRjAwKSA8PCA4KSB8CisJCQkJICAgICgoKihwZ3JlZW4gKyBpKSAmIDB4RkYwMCkpIHwKKwkJCQkgICAgKCgqKHBibHVlICsgaSkgJiAweEZGMDApID4+IDgpOworCQl9CisJCWJyZWFrOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2aWFmYl9wYW5fZGlzcGxheShzdHJ1Y3QgZmJfdmFyX3NjcmVlbmluZm8gKnZhciwKKwlzdHJ1Y3QgZmJfaW5mbyAqaW5mbykKK3sKKwl1bnNpZ25lZCBpbnQgb2Zmc2V0OworCisJREVCVUdfTVNHKEtFUk5fSU5GTyAidmlhZmJfcGFuX2Rpc3BsYXkhXG4iKTsKKworCW9mZnNldCA9ICh2YXItPnhvZmZzZXQgKyAodmFyLT55b2Zmc2V0ICogdmFyLT54cmVzX3ZpcnR1YWwpKSAqCisJICAgIHZhci0+Yml0c19wZXJfcGl4ZWwgLyAxNjsKKworCURFQlVHX01TRyhLRVJOX0lORk8gIlxudmlhZmJfcGFuX2Rpc3BsYXksb2Zmc2V0ID0lZCAiLCBvZmZzZXQpOworCisJdmlhZmJfd3JpdGVfcmVnX21hc2soMHg0OCwgMHgzZDQsICgob2Zmc2V0ID4+IDI0KSAmIDB4MyksIDB4Myk7CisJdmlhZmJfd3JpdGVfcmVnX21hc2soMHgzNCwgMHgzZDQsICgob2Zmc2V0ID4+IDE2KSAmIDB4ZmYpLCAweGZmKTsKKwl2aWFmYl93cml0ZV9yZWdfbWFzaygweDBjLCAweDNkNCwgKChvZmZzZXQgPj4gOCkgJiAweGZmKSwgMHhmZik7CisJdmlhZmJfd3JpdGVfcmVnX21hc2soMHgwZCwgMHgzZDQsIChvZmZzZXQgJiAweGZmKSwgMHhmZik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2aWFmYl9ibGFuayhpbnQgYmxhbmtfbW9kZSwgc3RydWN0IGZiX2luZm8gKmluZm8pCit7CisJREVCVUdfTVNHKEtFUk5fSU5GTyAidmlhZmJfYmxhbmshXG4iKTsKKwkvKiBjbGVhciBEUE1TIHNldHRpbmcgKi8KKworCXN3aXRjaCAoYmxhbmtfbW9kZSkgeworCWNhc2UgRkJfQkxBTktfVU5CTEFOSzoKKwkJLyogU2NyZWVuOiBPbiwgSFN5bmM6IE9uLCBWU3luYzogT24gKi8KKwkJLyogY29udHJvbCBDUlQgbW9uaXRvciBwb3dlciBtYW5hZ2VtZW50ICovCisJCXZpYWZiX3dyaXRlX3JlZ19tYXNrKENSMzYsIFZJQUNSLCAweDAwLCBCSVQ0ICsgQklUNSk7CisJCWJyZWFrOworCWNhc2UgRkJfQkxBTktfSFNZTkNfU1VTUEVORDoKKwkJLyogU2NyZWVuOiBPZmYsIEhTeW5jOiBPZmYsIFZTeW5jOiBPbiAqLworCQkvKiBjb250cm9sIENSVCBtb25pdG9yIHBvd2VyIG1hbmFnZW1lbnQgKi8KKwkJdmlhZmJfd3JpdGVfcmVnX21hc2soQ1IzNiwgVklBQ1IsIDB4MTAsIEJJVDQgKyBCSVQ1KTsKKwkJYnJlYWs7CisJY2FzZSBGQl9CTEFOS19WU1lOQ19TVVNQRU5EOgorCQkvKiBTY3JlZW46IE9mZiwgSFN5bmM6IE9uLCBWU3luYzogT2ZmICovCisJCS8qIGNvbnRyb2wgQ1JUIG1vbml0b3IgcG93ZXIgbWFuYWdlbWVudCAqLworCQl2aWFmYl93cml0ZV9yZWdfbWFzayhDUjM2LCBWSUFDUiwgMHgyMCwgQklUNCArIEJJVDUpOworCQlicmVhazsKKwljYXNlIEZCX0JMQU5LX1BPV0VSRE9XTjoKKwkJLyogU2NyZWVuOiBPZmYsIEhTeW5jOiBPZmYsIFZTeW5jOiBPZmYgKi8KKwkJLyogY29udHJvbCBDUlQgbW9uaXRvciBwb3dlciBtYW5hZ2VtZW50ICovCisJCXZpYWZiX3dyaXRlX3JlZ19tYXNrKENSMzYsIFZJQUNSLCAweDMwLCBCSVQ0ICsgQklUNSk7CisJCWJyZWFrOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZpYWZiX2lvY3RsKHN0cnVjdCBmYl9pbmZvICppbmZvLCB1X2ludCBjbWQsIHVfbG9uZyBhcmcpCit7CisJc3RydWN0IHZpYWZiX2lvY3RsX21vZGUgdmlhbW9kZTsKKwlzdHJ1Y3QgdmlhZmJfaW9jdGxfc2FtbSB2aWFzYW1tOworCXN0cnVjdCB2aWFmYl9kcml2ZXJfdmVyc2lvbiBkcml2ZXJfdmVyc2lvbjsKKwlzdHJ1Y3QgZmJfdmFyX3NjcmVlbmluZm8gc2VjX3ZhcjsKKwlzdHJ1Y3QgX3BhbmVsX3NpemVfcG9zX2luZm8gcGFuZWxfcG9zX3NpemVfcGFyYTsKKwl1MzIgc3RhdGVfaW5mbyA9IDA7CisJdTMyIHZpYWluZm9fc2l6ZSA9IHNpemVvZihzdHJ1Y3QgdmlhZmJfaW9jdGxfaW5mbyk7CisJdTMyICp2aWFmYl9nYW1tYV90YWJsZTsKKwljaGFyIGRyaXZlcl9uYW1lW10gPSAidmlhZmIiOworCisJdTMyIF9fdXNlciAqYXJncCA9ICh1MzIgX191c2VyICopIGFyZzsKKwl1MzIgZ3B1MzI7CisJdTMyIHZpZGVvX2Rldl9pbmZvID0gMDsKKwlzdHJ1Y3QgdmlhZmJfaW9jdGxfc2V0dGluZyB2aWFmYl9zZXR0aW5nID0ge307CisJc3RydWN0IGRldmljZV90IGFjdGl2ZV9kZXYgPSB7fTsKKworCURFQlVHX01TRyhLRVJOX0lORk8gInZpYWZiX2lvY3RsOiAweCVYICEhXG4iLCBjbWQpOworCisJc3dpdGNoIChjbWQpIHsKKwljYXNlIFZJQUZCX0dFVF9DSElQX0lORk86CisJCWlmIChjb3B5X3RvX3VzZXIoYXJncCwgdmlhcGFyaW5mby0+Y2hpcF9pbmZvLAorCQkJCXNpemVvZihzdHJ1Y3QgY2hpcF9pbmZvcm1hdGlvbikpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisJCWJyZWFrOworCWNhc2UgVklBRkJfR0VUX0lORk9fU0laRToKKwkJcmV0dXJuIHB1dF91c2VyKHZpYWluZm9fc2l6ZSwgYXJncCk7CisJY2FzZSBWSUFGQl9HRVRfSU5GTzoKKwkJcmV0dXJuIHZpYWZiX2lvY3RsX2dldF92aWFmYl9pbmZvKGFyZyk7CisJY2FzZSBWSUFGQl9IT1RQTFVHOgorCQlyZXR1cm4gcHV0X3VzZXIodmlhZmJfaW9jdGxfaG90cGx1ZyhpbmZvLT52YXIueHJlcywKKwkJCQkJICAgICAgaW5mby0+dmFyLnlyZXMsCisJCQkJCSAgICAgIGluZm8tPnZhci5iaXRzX3Blcl9waXhlbCksIGFyZ3ApOworCWNhc2UgVklBRkJfU0VUX0hPVFBMVUdfRkxBRzoKKwkJaWYgKGNvcHlfZnJvbV91c2VyKCZncHUzMiwgYXJncCwgc2l6ZW9mKGdwdTMyKSkpCisJCQlyZXR1cm4gLUVGQVVMVDsKKwkJdmlhZmJfaG90cGx1ZyA9IChncHUzMikgPyAxIDogMDsKKwkJYnJlYWs7CisJY2FzZSBWSUFGQl9HRVRfUkVTT0xVVElPTjoKKwkJdmlhbW9kZS54cmVzID0gKHUzMikgdmlhZmJfaG90cGx1Z19YcmVzOworCQl2aWFtb2RlLnlyZXMgPSAodTMyKSB2aWFmYl9ob3RwbHVnX1lyZXM7CisJCXZpYW1vZGUucmVmcmVzaCA9ICh1MzIpIHZpYWZiX2hvdHBsdWdfcmVmcmVzaDsKKwkJdmlhbW9kZS5icHAgPSAodTMyKSB2aWFmYl9ob3RwbHVnX2JwcDsKKwkJaWYgKHZpYWZiX1NBTU1fT04gPT0gMSkgeworCQkJdmlhbW9kZS54cmVzX3NlYyA9IHZpYWZiX3NlY29uZF94cmVzOworCQkJdmlhbW9kZS55cmVzX3NlYyA9IHZpYWZiX3NlY29uZF95cmVzOworCQkJdmlhbW9kZS52aXJ0dWFsX3hyZXNfc2VjID0gdmlhZmJfc2Vjb25kX3ZpcnR1YWxfeHJlczsKKwkJCXZpYW1vZGUudmlydHVhbF95cmVzX3NlYyA9IHZpYWZiX3NlY29uZF92aXJ0dWFsX3lyZXM7CisJCQl2aWFtb2RlLnJlZnJlc2hfc2VjID0gdmlhZmJfcmVmcmVzaDE7CisJCQl2aWFtb2RlLmJwcF9zZWMgPSB2aWFmYl9icHAxOworCQl9IGVsc2UgeworCQkJdmlhbW9kZS54cmVzX3NlYyA9IDA7CisJCQl2aWFtb2RlLnlyZXNfc2VjID0gMDsKKwkJCXZpYW1vZGUudmlydHVhbF94cmVzX3NlYyA9IDA7CisJCQl2aWFtb2RlLnZpcnR1YWxfeXJlc19zZWMgPSAwOworCQkJdmlhbW9kZS5yZWZyZXNoX3NlYyA9IDA7CisJCQl2aWFtb2RlLmJwcF9zZWMgPSAwOworCQl9CisJCWlmIChjb3B5X3RvX3VzZXIoYXJncCwgJnZpYW1vZGUsIHNpemVvZih2aWFtb2RlKSkpCisJCQlyZXR1cm4gLUVGQVVMVDsKKwkJYnJlYWs7CisJY2FzZSBWSUFGQl9HRVRfU0FNTV9JTkZPOgorCQl2aWFzYW1tLnNhbW1fc3RhdHVzID0gdmlhZmJfU0FNTV9PTjsKKworCQlpZiAodmlhZmJfU0FNTV9PTiA9PSAxKSB7CisJCQlpZiAodmlhZmJfZHVhbF9mYikgeworCQkJCXZpYXNhbW0uc2l6ZV9wcmltID0gdmlhcGFyaW5mby0+ZmJtZW1fZnJlZTsKKwkJCQl2aWFzYW1tLnNpemVfc2VjID0gdmlhcGFyaW5mbzEtPmZibWVtX2ZyZWU7CisJCQl9IGVsc2UgeworCQkJCWlmICh2aWFmYl9zZWNvbmRfc2l6ZSkgeworCQkJCQl2aWFzYW1tLnNpemVfcHJpbSA9CisJCQkJCSAgICB2aWFwYXJpbmZvLT5mYm1lbV9mcmVlIC0KKwkJCQkJICAgIHZpYWZiX3NlY29uZF9zaXplICogMTAyNCAqIDEwMjQ7CisJCQkJCXZpYXNhbW0uc2l6ZV9zZWMgPQorCQkJCQkgICAgdmlhZmJfc2Vjb25kX3NpemUgKiAxMDI0ICogMTAyNDsKKwkJCQl9IGVsc2UgeworCQkJCQl2aWFzYW1tLnNpemVfcHJpbSA9CisJCQkJCSAgICB2aWFwYXJpbmZvLT5mYm1lbV9mcmVlID4+IDE7CisJCQkJCXZpYXNhbW0uc2l6ZV9zZWMgPQorCQkJCQkgICAgKHZpYXBhcmluZm8tPmZibWVtX2ZyZWUgPj4gMSk7CisJCQkJfQorCQkJfQorCQkJdmlhc2FtbS5tZW1fYmFzZSA9IHZpYXBhcmluZm8tPmZibWVtOworCQkJdmlhc2FtbS5vZmZzZXRfc2VjID0gdmlhZmJfc2Vjb25kX29mZnNldDsKKwkJfSBlbHNlIHsKKwkJCXZpYXNhbW0uc2l6ZV9wcmltID0KKwkJCSAgICB2aWFwYXJpbmZvLT5tZW1zaXplIC0gdmlhcGFyaW5mby0+ZmJtZW1fdXNlZDsKKwkJCXZpYXNhbW0uc2l6ZV9zZWMgPSAwOworCQkJdmlhc2FtbS5tZW1fYmFzZSA9IHZpYXBhcmluZm8tPmZibWVtOworCQkJdmlhc2FtbS5vZmZzZXRfc2VjID0gMDsKKwkJfQorCisJCWlmIChjb3B5X3RvX3VzZXIoYXJncCwgJnZpYXNhbW0sIHNpemVvZih2aWFzYW1tKSkpCisJCQlyZXR1cm4gLUVGQVVMVDsKKworCQlicmVhazsKKwljYXNlIFZJQUZCX1RVUk5fT05fT1VUUFVUX0RFVklDRToKKwkJaWYgKGNvcHlfZnJvbV91c2VyKCZncHUzMiwgYXJncCwgc2l6ZW9mKGdwdTMyKSkpCisJCQlyZXR1cm4gLUVGQVVMVDsKKwkJaWYgKGdwdTMyICYgQ1JUX0RldmljZSkKKwkJCXZpYWZiX2NydF9lbmFibGUoKTsKKwkJaWYgKGdwdTMyICYgRFZJX0RldmljZSkKKwkJCXZpYWZiX2R2aV9lbmFibGUoKTsKKwkJaWYgKGdwdTMyICYgTENEX0RldmljZSkKKwkJCXZpYWZiX2xjZF9lbmFibGUoKTsKKwkJYnJlYWs7CisJY2FzZSBWSUFGQl9UVVJOX09GRl9PVVRQVVRfREVWSUNFOgorCQlpZiAoY29weV9mcm9tX3VzZXIoJmdwdTMyLCBhcmdwLCBzaXplb2YoZ3B1MzIpKSkKKwkJCXJldHVybiAtRUZBVUxUOworCQlpZiAoZ3B1MzIgJiBDUlRfRGV2aWNlKQorCQkJdmlhZmJfY3J0X2Rpc2FibGUoKTsKKwkJaWYgKGdwdTMyICYgRFZJX0RldmljZSkKKwkJCXZpYWZiX2R2aV9kaXNhYmxlKCk7CisJCWlmIChncHUzMiAmIExDRF9EZXZpY2UpCisJCQl2aWFmYl9sY2RfZGlzYWJsZSgpOworCQlicmVhazsKKwljYXNlIFZJQUZCX1NFVF9ERVZJQ0U6CisJCWlmIChjb3B5X2Zyb21fdXNlcigmYWN0aXZlX2RldiwgKHZvaWQgKilhcmdwLAorCQkJc2l6ZW9mKGFjdGl2ZV9kZXYpKSkKKwkJCXJldHVybiAtRUZBVUxUOworCQl2aWFmYl9zZXRfZGV2aWNlKGFjdGl2ZV9kZXYpOworCQl2aWFmYl9zZXRfcGFyKGluZm8pOworCQlicmVhazsKKwljYXNlIFZJQUZCX0dFVF9ERVZJQ0U6CisJCWFjdGl2ZV9kZXYuY3J0ID0gdmlhZmJfQ1JUX09OOworCQlhY3RpdmVfZGV2LmR2aSA9IHZpYWZiX0RWSV9PTjsKKwkJYWN0aXZlX2Rldi5sY2QgPSB2aWFmYl9MQ0RfT047CisJCWFjdGl2ZV9kZXYuc2FtbSA9IHZpYWZiX1NBTU1fT047CisJCWFjdGl2ZV9kZXYucHJpbWFyeV9kZXYgPSB2aWFmYl9wcmltYXJ5X2RldjsKKworCQlhY3RpdmVfZGV2LmxjZF9kc3BfY2VudCA9IHZpYWZiX2xjZF9kc3BfbWV0aG9kOworCQlhY3RpdmVfZGV2LmxjZF9wYW5lbF9pZCA9IHZpYWZiX2xjZF9wYW5lbF9pZDsKKwkJYWN0aXZlX2Rldi5sY2RfbW9kZSA9IHZpYWZiX2xjZF9tb2RlOworCisJCWFjdGl2ZV9kZXYueHJlcyA9IHZpYWZiX2hvdHBsdWdfWHJlczsKKwkJYWN0aXZlX2Rldi55cmVzID0gdmlhZmJfaG90cGx1Z19ZcmVzOworCisJCWFjdGl2ZV9kZXYueHJlczEgPSB2aWFmYl9zZWNvbmRfeHJlczsKKwkJYWN0aXZlX2Rldi55cmVzMSA9IHZpYWZiX3NlY29uZF95cmVzOworCisJCWFjdGl2ZV9kZXYuYnBwID0gdmlhZmJfYnBwOworCQlhY3RpdmVfZGV2LmJwcDEgPSB2aWFmYl9icHAxOworCQlhY3RpdmVfZGV2LnJlZnJlc2ggPSB2aWFmYl9yZWZyZXNoOworCQlhY3RpdmVfZGV2LnJlZnJlc2gxID0gdmlhZmJfcmVmcmVzaDE7CisKKwkJYWN0aXZlX2Rldi5lcGlhX2R2aSA9IHZpYWZiX3BsYXRmb3JtX2VwaWFfZHZpOworCQlhY3RpdmVfZGV2LmxjZF9kdWFsX2VkZ2UgPSB2aWFmYl9kZXZpY2VfbGNkX2R1YWxlZGdlOworCQlhY3RpdmVfZGV2LmJ1c193aWR0aCA9IHZpYWZiX2J1c193aWR0aDsKKworCQlpZiAoY29weV90b191c2VyKGFyZ3AsICZhY3RpdmVfZGV2LCBzaXplb2YoYWN0aXZlX2RldikpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisJCWJyZWFrOworCisJY2FzZSBWSUFGQl9HRVRfRFJJVkVSX1ZFUlNJT046CisJCWRyaXZlcl92ZXJzaW9uLmlNYWpvck51bSA9IFZFUlNJT05fTUFKT1I7CisJCWRyaXZlcl92ZXJzaW9uLmlLZXJuZWxOdW0gPSBWRVJTSU9OX0tFUk5FTDsKKwkJZHJpdmVyX3ZlcnNpb24uaU9TTnVtID0gVkVSU0lPTl9PUzsKKwkJZHJpdmVyX3ZlcnNpb24uaU1pbm9yTnVtID0gVkVSU0lPTl9NSU5PUjsKKworCQlpZiAoY29weV90b191c2VyKGFyZ3AsICZkcml2ZXJfdmVyc2lvbiwKKwkJCXNpemVvZihkcml2ZXJfdmVyc2lvbikpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisKKwkJYnJlYWs7CisKKwljYXNlIFZJQUZCX1NFVF9ERVZJQ0VfSU5GTzoKKwkJaWYgKGNvcHlfZnJvbV91c2VyKCZ2aWFmYl9zZXR0aW5nLAorCQkJYXJncCwgc2l6ZW9mKHZpYWZiX3NldHRpbmcpKSkKKwkJCXJldHVybiAtRUZBVUxUOworCQlpZiAoYXBwbHlfZGV2aWNlX3NldHRpbmcodmlhZmJfc2V0dGluZywgaW5mbykgPCAwKQorCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJYnJlYWs7CisKKwljYXNlIFZJQUZCX1NFVF9TRUNPTkRfTU9ERToKKwkJaWYgKGNvcHlfZnJvbV91c2VyKCZzZWNfdmFyLCBhcmdwLCBzaXplb2Yoc2VjX3ZhcikpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisJCWFwcGx5X3NlY29uZF9tb2RlX3NldHRpbmcoJnNlY192YXIpOworCQlicmVhazsKKworCWNhc2UgVklBRkJfR0VUX0RFVklDRV9JTkZPOgorCisJCXJldHJpZXZlX2RldmljZV9zZXR0aW5nKCZ2aWFmYl9zZXR0aW5nKTsKKworCQlpZiAoY29weV90b191c2VyKGFyZ3AsICZ2aWFmYl9zZXR0aW5nLCBzaXplb2YodmlhZmJfc2V0dGluZykpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisKKwkJYnJlYWs7CisKKwljYXNlIFZJQUZCX0dFVF9ERVZJQ0VfU1VQUE9SVDoKKwkJdmlhZmJfZ2V0X2RldmljZV9zdXBwb3J0X3N0YXRlKCZzdGF0ZV9pbmZvKTsKKwkJaWYgKHB1dF91c2VyKHN0YXRlX2luZm8sIGFyZ3ApKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisJCWJyZWFrOworCisJY2FzZSBWSUFGQl9HRVRfREVWSUNFX0NPTk5FQ1Q6CisJCXZpYWZiX2dldF9kZXZpY2VfY29ubmVjdF9zdGF0ZSgmc3RhdGVfaW5mbyk7CisJCWlmIChwdXRfdXNlcihzdGF0ZV9pbmZvLCBhcmdwKSkKKwkJCXJldHVybiAtRUZBVUxUOworCQlicmVhazsKKworCWNhc2UgVklBRkJfR0VUX1BBTkVMX1NVUFBPUlRfRVhQQU5EOgorCQlzdGF0ZV9pbmZvID0KKwkJICAgIHZpYWZiX2xjZF9nZXRfc3VwcG9ydF9leHBhbmRfc3RhdGUoaW5mby0+dmFyLnhyZXMsCisJCQkJCQkgaW5mby0+dmFyLnlyZXMpOworCQlpZiAocHV0X3VzZXIoc3RhdGVfaW5mbywgYXJncCkpCisJCQlyZXR1cm4gLUVGQVVMVDsKKwkJYnJlYWs7CisKKwljYXNlIFZJQUZCX0dFVF9EUklWRVJfTkFNRToKKwkJaWYgKGNvcHlfdG9fdXNlcihhcmdwLCBkcml2ZXJfbmFtZSwgc2l6ZW9mKGRyaXZlcl9uYW1lKSkpCisJCQlyZXR1cm4gLUVGQVVMVDsKKwkJYnJlYWs7CisKKwljYXNlIFZJQUZCX1NFVF9HQU1NQV9MVVQ6CisJCXZpYWZiX2dhbW1hX3RhYmxlID0ga21hbGxvYygyNTYgKiBzaXplb2YodTMyKSwgR0ZQX0tFUk5FTCk7CisJCWlmICghdmlhZmJfZ2FtbWFfdGFibGUpCisJCQlyZXR1cm4gLUVOT01FTTsKKwkJaWYgKGNvcHlfZnJvbV91c2VyKHZpYWZiX2dhbW1hX3RhYmxlLCBhcmdwLAorCQkJCXNpemVvZih2aWFmYl9nYW1tYV90YWJsZSkpKSB7CisJCQlrZnJlZSh2aWFmYl9nYW1tYV90YWJsZSk7CisJCQlyZXR1cm4gLUVGQVVMVDsKKwkJfQorCQl2aWFmYl9zZXRfZ2FtbWFfdGFibGUodmlhZmJfYnBwLCB2aWFmYl9nYW1tYV90YWJsZSk7CisJCWtmcmVlKHZpYWZiX2dhbW1hX3RhYmxlKTsKKwkJYnJlYWs7CisKKwljYXNlIFZJQUZCX0dFVF9HQU1NQV9MVVQ6CisJCXZpYWZiX2dhbW1hX3RhYmxlID0ga21hbGxvYygyNTYgKiBzaXplb2YodTMyKSwgR0ZQX0tFUk5FTCk7CisJCWlmICghdmlhZmJfZ2FtbWFfdGFibGUpCisJCQlyZXR1cm4gLUVOT01FTTsKKwkJdmlhZmJfZ2V0X2dhbW1hX3RhYmxlKHZpYWZiX2dhbW1hX3RhYmxlKTsKKwkJaWYgKGNvcHlfdG9fdXNlcihhcmdwLCB2aWFmYl9nYW1tYV90YWJsZSwKKwkJCXNpemVvZih2aWFmYl9nYW1tYV90YWJsZSkpKSB7CisJCQlrZnJlZSh2aWFmYl9nYW1tYV90YWJsZSk7CisJCQlyZXR1cm4gLUVGQVVMVDsKKwkJfQorCQlrZnJlZSh2aWFmYl9nYW1tYV90YWJsZSk7CisJCWJyZWFrOworCisJY2FzZSBWSUFGQl9HRVRfR0FNTUFfU1VQUE9SVF9TVEFURToKKwkJdmlhZmJfZ2V0X2dhbW1hX3N1cHBvcnRfc3RhdGUodmlhZmJfYnBwLCAmc3RhdGVfaW5mbyk7CisJCWlmIChwdXRfdXNlcihzdGF0ZV9pbmZvLCBhcmdwKSkKKwkJCXJldHVybiAtRUZBVUxUOworCQlicmVhazsKKwljYXNlIFZJQUZCX1NFVF9WSURFT19ERVZJQ0U6CisJCWdldF91c2VyKHZpZGVvX2Rldl9pbmZvLCBhcmdwKTsKKwkJdmlhZmJfc2V0X3ZpZGVvX2RldmljZSh2aWRlb19kZXZfaW5mbyk7CisJCWJyZWFrOworCWNhc2UgVklBRkJfR0VUX1ZJREVPX0RFVklDRToKKwkJdmlhZmJfZ2V0X3ZpZGVvX2RldmljZSgmdmlkZW9fZGV2X2luZm8pOworCQlpZiAocHV0X3VzZXIodmlkZW9fZGV2X2luZm8sIGFyZ3ApKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisJCWJyZWFrOworCWNhc2UgVklBRkJfU1lOQ19TVVJGQUNFOgorCQlERUJVR19NU0coS0VSTl9JTkZPICJsb2JvIFZJQUZCX1NZTkNfU1VSRkFDRVxuIik7CisJCWJyZWFrOworCWNhc2UgVklBRkJfR0VUX0RSSVZFUl9DQVBTOgorCQlicmVhazsKKworCWNhc2UgVklBRkJfR0VUX1BBTkVMX01BWF9TSVpFOgorCQlpZiAoY29weV9mcm9tX3VzZXIKKwkJICAgICgmcGFuZWxfcG9zX3NpemVfcGFyYSwgYXJncCwgc2l6ZW9mKHBhbmVsX3Bvc19zaXplX3BhcmEpKSkKKwkJCXJldHVybiAtRUZBVUxUOworCQlwYW5lbF9wb3Nfc2l6ZV9wYXJhLnggPSBwYW5lbF9wb3Nfc2l6ZV9wYXJhLnkgPSAwOworCQlpZiAoY29weV90b191c2VyKGFyZ3AsICZwYW5lbF9wb3Nfc2l6ZV9wYXJhLAorCQkgICAgIHNpemVvZihwYW5lbF9wb3Nfc2l6ZV9wYXJhKSkpCisJCQlyZXR1cm4gLUVGQVVMVDsKKwkJYnJlYWs7CisJY2FzZSBWSUFGQl9HRVRfUEFORUxfTUFYX1BPU0lUSU9OOgorCQlpZiAoY29weV9mcm9tX3VzZXIKKwkJICAgICgmcGFuZWxfcG9zX3NpemVfcGFyYSwgYXJncCwgc2l6ZW9mKHBhbmVsX3Bvc19zaXplX3BhcmEpKSkKKwkJCXJldHVybiAtRUZBVUxUOworCQlwYW5lbF9wb3Nfc2l6ZV9wYXJhLnggPSBwYW5lbF9wb3Nfc2l6ZV9wYXJhLnkgPSAwOworCQlpZiAoY29weV90b191c2VyKGFyZ3AsICZwYW5lbF9wb3Nfc2l6ZV9wYXJhLAorCQkgICAgIHNpemVvZihwYW5lbF9wb3Nfc2l6ZV9wYXJhKSkpCisJCQlyZXR1cm4gLUVGQVVMVDsKKwkJYnJlYWs7CisKKwljYXNlIFZJQUZCX0dFVF9QQU5FTF9QT1NJVElPTjoKKwkJaWYgKGNvcHlfZnJvbV91c2VyCisJCSAgICAoJnBhbmVsX3Bvc19zaXplX3BhcmEsIGFyZ3AsIHNpemVvZihwYW5lbF9wb3Nfc2l6ZV9wYXJhKSkpCisJCQlyZXR1cm4gLUVGQVVMVDsKKwkJcGFuZWxfcG9zX3NpemVfcGFyYS54ID0gcGFuZWxfcG9zX3NpemVfcGFyYS55ID0gMDsKKwkJaWYgKGNvcHlfdG9fdXNlcihhcmdwLCAmcGFuZWxfcG9zX3NpemVfcGFyYSwKKwkJICAgICBzaXplb2YocGFuZWxfcG9zX3NpemVfcGFyYSkpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisJCWJyZWFrOworCWNhc2UgVklBRkJfR0VUX1BBTkVMX1NJWkU6CisJCWlmIChjb3B5X2Zyb21fdXNlcgorCQkgICAgKCZwYW5lbF9wb3Nfc2l6ZV9wYXJhLCBhcmdwLCBzaXplb2YocGFuZWxfcG9zX3NpemVfcGFyYSkpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisJCXBhbmVsX3Bvc19zaXplX3BhcmEueCA9IHBhbmVsX3Bvc19zaXplX3BhcmEueSA9IDA7CisJCWlmIChjb3B5X3RvX3VzZXIoYXJncCwgJnBhbmVsX3Bvc19zaXplX3BhcmEsCisJCSAgICAgc2l6ZW9mKHBhbmVsX3Bvc19zaXplX3BhcmEpKSkKKwkJCXJldHVybiAtRUZBVUxUOworCQlicmVhazsKKworCWNhc2UgVklBRkJfU0VUX1BBTkVMX1BPU0lUSU9OOgorCQlpZiAoY29weV9mcm9tX3VzZXIKKwkJICAgICgmcGFuZWxfcG9zX3NpemVfcGFyYSwgYXJncCwgc2l6ZW9mKHBhbmVsX3Bvc19zaXplX3BhcmEpKSkKKwkJCXJldHVybiAtRUZBVUxUOworCQlicmVhazsKKwljYXNlIFZJQUZCX1NFVF9QQU5FTF9TSVpFOgorCQlpZiAoY29weV9mcm9tX3VzZXIKKwkJICAgICgmcGFuZWxfcG9zX3NpemVfcGFyYSwgYXJncCwgc2l6ZW9mKHBhbmVsX3Bvc19zaXplX3BhcmEpKSkKKwkJCXJldHVybiAtRUZBVUxUOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCB2aWFmYl9maWxscmVjdChzdHJ1Y3QgZmJfaW5mbyAqaW5mbywKKwljb25zdCBzdHJ1Y3QgZmJfZmlsbHJlY3QgKnJlY3QpCit7CisJdTMyIGNvbCA9IDAsIHJvcCA9IDA7CisJaW50IHBpdGNoOworCisJaWYgKCF2aWFmYl9hY2NlbCkKKwkJcmV0dXJuIGNmYl9maWxscmVjdChpbmZvLCByZWN0KTsKKworCWlmICghcmVjdC0+d2lkdGggfHwgIXJlY3QtPmhlaWdodCkKKwkJcmV0dXJuOworCisJc3dpdGNoIChyZWN0LT5yb3ApIHsKKwljYXNlIFJPUF9YT1I6CisJCXJvcCA9IDB4NUE7CisJCWJyZWFrOworCWNhc2UgUk9QX0NPUFk6CisJZGVmYXVsdDoKKwkJcm9wID0gMHhGMDsKKwkJYnJlYWs7CisJfQorCisJc3dpdGNoIChpbmZvLT52YXIuYml0c19wZXJfcGl4ZWwpIHsKKwljYXNlIDg6CisJCWNvbCA9IHJlY3QtPmNvbG9yOworCQlicmVhazsKKwljYXNlIDE2OgorCQljb2wgPSAoKHUzMiAqKSAoaW5mby0+cHNldWRvX3BhbGV0dGUpKVtyZWN0LT5jb2xvcl07CisJCWJyZWFrOworCWNhc2UgMzI6CisJCWNvbCA9ICgodTMyICopIChpbmZvLT5wc2V1ZG9fcGFsZXR0ZSkpW3JlY3QtPmNvbG9yXTsKKwkJYnJlYWs7CisJfQorCisJLyogQml0Qmx0IFNvdXJjZSBBZGRyZXNzICovCisJd3JpdGVsKDB4MCwgdmlhcGFyaW5mby0+aW9fdmlydCArIFZJQV9SRUdfU1JDUE9TKTsKKwkvKiBTb3VyY2UgQmFzZSBBZGRyZXNzICovCisJd3JpdGVsKDB4MCwgdmlhcGFyaW5mby0+aW9fdmlydCArIFZJQV9SRUdfU1JDQkFTRSk7CisJLyogRGVzdGluYXRpb24gQmFzZSBBZGRyZXNzICovCisJd3JpdGVsKCgodW5zaWduZWQgbG9uZykgKGluZm8tPnNjcmVlbl9iYXNlKSAtCisJCSAgICh1bnNpZ25lZCBsb25nKSB2aWFmYl9GQl9NTSkgPj4gMywKKwkJICAgdmlhcGFyaW5mby0+aW9fdmlydCArIFZJQV9SRUdfRFNUQkFTRSk7CisJLyogUGl0Y2ggKi8KKwlwaXRjaCA9IChpbmZvLT52YXIueHJlc192aXJ0dWFsICsgNykgJiB+NzsKKwl3cml0ZWwoVklBX1BJVENIX0VOQUJMRSB8CisJCSAgICgoKHBpdGNoICoKKwkJICAgICAgaW5mby0+dmFyLmJpdHNfcGVyX3BpeGVsID4+IDMpID4+IDMpIHwKKwkJICAgICAgKCgocGl0Y2ggKiBpbmZvLT4KKwkJICAgICAgdmFyLmJpdHNfcGVyX3BpeGVsID4+IDMpID4+IDMpIDw8IDE2KSksCisJCSAgICAgIHZpYXBhcmluZm8tPmlvX3ZpcnQgKyBWSUFfUkVHX1BJVENIKTsKKwkvKiBCaXRCbHQgRGVzdGluYXRpb24gQWRkcmVzcyAqLworCXdyaXRlbCgoKHJlY3QtPmR5IDw8IDE2KSB8IHJlY3QtPmR4KSwKKwkJdmlhcGFyaW5mby0+aW9fdmlydCArIFZJQV9SRUdfRFNUUE9TKTsKKwkvKiBEaW1lbnNpb246IHdpZHRoICYgaGVpZ2h0ICovCisJd3JpdGVsKCgoKHJlY3QtPmhlaWdodCAtIDEpIDw8IDE2KSB8IChyZWN0LT53aWR0aCAtIDEpKSwKKwkJdmlhcGFyaW5mby0+aW9fdmlydCArIFZJQV9SRUdfRElNRU5TSU9OKTsKKwkvKiBGb3Jncm91bmQgY29sb3Igb3IgRGVzdGluYXRpb24gY29sb3IgKi8KKwl3cml0ZWwoY29sLCB2aWFwYXJpbmZvLT5pb192aXJ0ICsgVklBX1JFR19GR0NPTE9SKTsKKwkvKiBHRSBDb21tYW5kICovCisJd3JpdGVsKCgweDAxIHwgMHgyMDAwIHwgKHJvcCA8PCAyNCkpLAorCQl2aWFwYXJpbmZvLT5pb192aXJ0ICsgVklBX1JFR19HRUNNRCk7CisKK30KKworc3RhdGljIHZvaWQgdmlhZmJfY29weWFyZWEoc3RydWN0IGZiX2luZm8gKmluZm8sCisJY29uc3Qgc3RydWN0IGZiX2NvcHlhcmVhICphcmVhKQoreworCXUzMiBkeSA9IGFyZWEtPmR5LCBzeSA9IGFyZWEtPnN5LCBkaXJlY3Rpb24gPSAweDA7CisJdTMyIHN4ID0gYXJlYS0+c3gsIGR4ID0gYXJlYS0+ZHgsIHdpZHRoID0gYXJlYS0+d2lkdGg7CisJaW50IHBpdGNoOworCisJREVCVUdfTVNHKEtFUk5fSU5GTyAidmlhZmJfY29weWFyZWEhIVxuIik7CisKKwlpZiAoIXZpYWZiX2FjY2VsKQorCQlyZXR1cm4gY2ZiX2NvcHlhcmVhKGluZm8sIGFyZWEpOworCisJaWYgKCFhcmVhLT53aWR0aCB8fCAhYXJlYS0+aGVpZ2h0KQorCQlyZXR1cm47CisKKwlpZiAoc3kgPCBkeSkgeworCQlkeSArPSBhcmVhLT5oZWlnaHQgLSAxOworCQlzeSArPSBhcmVhLT5oZWlnaHQgLSAxOworCQlkaXJlY3Rpb24gfD0gMHg0MDAwOworCX0KKworCWlmIChzeCA8IGR4KSB7CisJCWR4ICs9IHdpZHRoIC0gMTsKKwkJc3ggKz0gd2lkdGggLSAxOworCQlkaXJlY3Rpb24gfD0gMHg4MDAwOworCX0KKworCS8qIFNvdXJjZSBCYXNlIEFkZHJlc3MgKi8KKwl3cml0ZWwoKCh1bnNpZ25lZCBsb25nKSAoaW5mby0+c2NyZWVuX2Jhc2UpIC0KKwkJICAgKHVuc2lnbmVkIGxvbmcpIHZpYWZiX0ZCX01NKSA+PiAzLAorCQkgICB2aWFwYXJpbmZvLT5pb192aXJ0ICsgVklBX1JFR19TUkNCQVNFKTsKKwkvKiBEZXN0aW5hdGlvbiBCYXNlIEFkZHJlc3MgKi8KKwl3cml0ZWwoKCh1bnNpZ25lZCBsb25nKSAoaW5mby0+c2NyZWVuX2Jhc2UpIC0KKwkJICAgKHVuc2lnbmVkIGxvbmcpIHZpYWZiX0ZCX01NKSA+PiAzLAorCQkgICB2aWFwYXJpbmZvLT5pb192aXJ0ICsgVklBX1JFR19EU1RCQVNFKTsKKwkvKiBQaXRjaCAqLworCXBpdGNoID0gKGluZm8tPnZhci54cmVzX3ZpcnR1YWwgKyA3KSAmIH43OworCS8qIFZJQV9QSVRDSF9FTkFCTEUgY2FuIGJlIG9taXR0ZWQgbm93LiAqLworCXdyaXRlbChWSUFfUElUQ0hfRU5BQkxFIHwKKwkJICAgKCgocGl0Y2ggKgorCQkgICAgICBpbmZvLT52YXIuYml0c19wZXJfcGl4ZWwgPj4gMykgPj4gMykgfCAoKChwaXRjaCAqCisJCQkJCQkJCWluZm8tPnZhci4KKwkJCQkJCQkJYml0c19wZXJfcGl4ZWwKKwkJCQkJCQkJPj4gMykgPj4gMykKKwkJCQkJCQkgICAgICA8PCAxNikpLAorCQkJCXZpYXBhcmluZm8tPmlvX3ZpcnQgKyBWSUFfUkVHX1BJVENIKTsKKwkvKiBCaXRCbHQgU291cmNlIEFkZHJlc3MgKi8KKwl3cml0ZWwoKChzeSA8PCAxNikgfCBzeCksIHZpYXBhcmluZm8tPmlvX3ZpcnQgKyBWSUFfUkVHX1NSQ1BPUyk7CisJLyogQml0Qmx0IERlc3RpbmF0aW9uIEFkZHJlc3MgKi8KKwl3cml0ZWwoKChkeSA8PCAxNikgfCBkeCksIHZpYXBhcmluZm8tPmlvX3ZpcnQgKyBWSUFfUkVHX0RTVFBPUyk7CisJLyogRGltZW5zaW9uOiB3aWR0aCAmIGhlaWdodCAqLworCXdyaXRlbCgoKChhcmVhLT5oZWlnaHQgLSAxKSA8PCAxNikgfCAoYXJlYS0+d2lkdGggLSAxKSksCisJCSAgIHZpYXBhcmluZm8tPmlvX3ZpcnQgKyBWSUFfUkVHX0RJTUVOU0lPTik7CisJLyogR0UgQ29tbWFuZCAqLworCXdyaXRlbCgoMHgwMSB8IGRpcmVjdGlvbiB8ICgweENDIDw8IDI0KSksCisJCXZpYXBhcmluZm8tPmlvX3ZpcnQgKyBWSUFfUkVHX0dFQ01EKTsKKworfQorCitzdGF0aWMgdm9pZCB2aWFmYl9pbWFnZWJsaXQoc3RydWN0IGZiX2luZm8gKmluZm8sCisJY29uc3Qgc3RydWN0IGZiX2ltYWdlICppbWFnZSkKK3sKKwl1MzIgc2l6ZSwgYmdfY29sID0gMCwgZmdfY29sID0gMCwgKnVkYXRhOworCWludCBpOworCWludCBwaXRjaDsKKworCWlmICghdmlhZmJfYWNjZWwpCisJCXJldHVybiBjZmJfaW1hZ2VibGl0KGluZm8sIGltYWdlKTsKKworCXVkYXRhID0gKHUzMiAqKSBpbWFnZS0+ZGF0YTsKKworCXN3aXRjaCAoaW5mby0+dmFyLmJpdHNfcGVyX3BpeGVsKSB7CisJY2FzZSA4OgorCQliZ19jb2wgPSBpbWFnZS0+YmdfY29sb3I7CisJCWZnX2NvbCA9IGltYWdlLT5mZ19jb2xvcjsKKwkJYnJlYWs7CisJY2FzZSAxNjoKKwkJYmdfY29sID0gKCh1MzIgKikgKGluZm8tPnBzZXVkb19wYWxldHRlKSlbaW1hZ2UtPmJnX2NvbG9yXTsKKwkJZmdfY29sID0gKCh1MzIgKikgKGluZm8tPnBzZXVkb19wYWxldHRlKSlbaW1hZ2UtPmZnX2NvbG9yXTsKKwkJYnJlYWs7CisJY2FzZSAzMjoKKwkJYmdfY29sID0gKCh1MzIgKikgKGluZm8tPnBzZXVkb19wYWxldHRlKSlbaW1hZ2UtPmJnX2NvbG9yXTsKKwkJZmdfY29sID0gKCh1MzIgKikgKGluZm8tPnBzZXVkb19wYWxldHRlKSlbaW1hZ2UtPmZnX2NvbG9yXTsKKwkJYnJlYWs7CisJfQorCXNpemUgPSBpbWFnZS0+d2lkdGggKiBpbWFnZS0+aGVpZ2h0OworCisJLyogU291cmNlIEJhc2UgQWRkcmVzcyAqLworCXdyaXRlbCgweDAsIHZpYXBhcmluZm8tPmlvX3ZpcnQgKyBWSUFfUkVHX1NSQ0JBU0UpOworCS8qIERlc3RpbmF0aW9uIEJhc2UgQWRkcmVzcyAqLworCXdyaXRlbCgoKHVuc2lnbmVkIGxvbmcpIChpbmZvLT5zY3JlZW5fYmFzZSkgLQorCQkgICAodW5zaWduZWQgbG9uZykgdmlhZmJfRkJfTU0pID4+IDMsCisJCSAgIHZpYXBhcmluZm8tPmlvX3ZpcnQgKyBWSUFfUkVHX0RTVEJBU0UpOworCS8qIFBpdGNoICovCisJcGl0Y2ggPSAoaW5mby0+dmFyLnhyZXNfdmlydHVhbCArIDcpICYgfjc7CisJd3JpdGVsKFZJQV9QSVRDSF9FTkFCTEUgfAorCQkgICAoKChwaXRjaCAqCisJCSAgICAgIGluZm8tPnZhci5iaXRzX3Blcl9waXhlbCA+PiAzKSA+PiAzKSB8ICgoKHBpdGNoICoKKwkJCQkJCQkJaW5mby0+dmFyLgorCQkJCQkJCQliaXRzX3Blcl9waXhlbAorCQkJCQkJCQk+PiAzKSA+PiAzKQorCQkJCQkJCSAgICAgIDw8IDE2KSksCisJCQkJdmlhcGFyaW5mby0+aW9fdmlydCArIFZJQV9SRUdfUElUQ0gpOworCS8qIEJpdEJsdCBTb3VyY2UgQWRkcmVzcyAqLworCXdyaXRlbCgweDAsIHZpYXBhcmluZm8tPmlvX3ZpcnQgKyBWSUFfUkVHX1NSQ1BPUyk7CisJLyogQml0Qmx0IERlc3RpbmF0aW9uIEFkZHJlc3MgKi8KKwl3cml0ZWwoKChpbWFnZS0+ZHkgPDwgMTYpIHwgaW1hZ2UtPmR4KSwKKwkJdmlhcGFyaW5mby0+aW9fdmlydCArIFZJQV9SRUdfRFNUUE9TKTsKKwkvKiBEaW1lbnNpb246IHdpZHRoICYgaGVpZ2h0ICovCisJd3JpdGVsKCgoKGltYWdlLT5oZWlnaHQgLSAxKSA8PCAxNikgfCAoaW1hZ2UtPndpZHRoIC0gMSkpLAorCQkgICB2aWFwYXJpbmZvLT5pb192aXJ0ICsgVklBX1JFR19ESU1FTlNJT04pOworCS8qIGZiIGNvbG9yICovCisJd3JpdGVsKGZnX2NvbCwgdmlhcGFyaW5mby0+aW9fdmlydCArIFZJQV9SRUdfRkdDT0xPUik7CisJLyogYmcgY29sb3IgKi8KKwl3cml0ZWwoYmdfY29sLCB2aWFwYXJpbmZvLT5pb192aXJ0ICsgVklBX1JFR19CR0NPTE9SKTsKKwkvKiBHRSBDb21tYW5kICovCisJd3JpdGVsKDB4Q0MwMjAxNDIsIHZpYXBhcmluZm8tPmlvX3ZpcnQgKyBWSUFfUkVHX0dFQ01EKTsKKworCWZvciAoaSA9IDA7IGkgPCBzaXplIC8gNDsgaSsrKSB7CisJCXdyaXRlbCgqdWRhdGEsIHZpYXBhcmluZm8tPmlvX3ZpcnQgKyBWSUFfTU1JT19CTFRCQVNFKTsKKwkJdWRhdGErKzsKKwl9CisKK30KKworc3RhdGljIGludCB2aWFmYl9jdXJzb3Ioc3RydWN0IGZiX2luZm8gKmluZm8sIHN0cnVjdCBmYl9jdXJzb3IgKmN1cnNvcikKK3sKKwl1OCBkYXRhW0NVUlNPUl9TSVpFIC8gOF07CisJdTMyIGRhdGFfYmFrW0NVUlNPUl9TSVpFIC8gMzJdOworCXUzMiB0ZW1wLCB4eCwgeXksIGJnX2NvbCA9IDAsIGZnX2NvbCA9IDA7CisJaW50IHNpemUsIGksIGogPSAwOworCXN0YXRpYyBpbnQgaHdfY3Vyc29yOworCXN0cnVjdCB2aWFmYl9wYXIgKnBfdmlhZmJfcGFyOworCisJaWYgKHZpYWZiX2FjY2VsKQorCQlod19jdXJzb3IgPSAxOworCisJaWYgKCF2aWFmYl9hY2NlbCkgeworCQlpZiAoaHdfY3Vyc29yKSB7CisJCQl2aWFmYl9zaG93X2h3X2N1cnNvcihpbmZvLCBIV19DdXJzb3JfT0ZGKTsKKwkJCWh3X2N1cnNvciA9IDA7CisJCX0KKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJaWYgKCgoKHN0cnVjdCB2aWFmYl9wYXIgKikoaW5mby0+cGFyKSktPmlnYV9wYXRoID09IElHQTIpCisJICAgICYmICh2aWFwYXJpbmZvLT5jaGlwX2luZm8tPmdmeF9jaGlwX25hbWUgPT0gVU5JQ0hST01FX0NMRTI2NikpCisJCXJldHVybiAtRU5PREVWOworCisJLyogV2hlbiBkdW92aWV3IGFuZCB1c2luZyBsY2QgLCB1c2Ugc29mdCBjdXJzb3IgKi8KKwlpZiAodmlhZmJfTENEX09OIHx8ICgoc3RydWN0IHZpYWZiX3BhciAqKShpbmZvLT5wYXIpKS0+ZHVvdmlldykKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwl2aWFmYl9zaG93X2h3X2N1cnNvcihpbmZvLCBIV19DdXJzb3JfT0ZGKTsKKwl2aWFjdXJzb3IgPSAqY3Vyc29yOworCisJaWYgKGN1cnNvci0+c2V0ICYgRkJfQ1VSX1NFVEhPVCkgeworCQl2aWFjdXJzb3IuaG90ID0gY3Vyc29yLT5ob3Q7CisJCXRlbXAgPSAoKHZpYWN1cnNvci5ob3QueCkgPDwgMTYpICsgdmlhY3Vyc29yLmhvdC55OworCQl3cml0ZWwodGVtcCwgdmlhcGFyaW5mby0+aW9fdmlydCArIFZJQV9SRUdfQ1VSU09SX09SRyk7CisJfQorCisJaWYgKGN1cnNvci0+c2V0ICYgRkJfQ1VSX1NFVFBPUykgeworCQl2aWFjdXJzb3IuaW1hZ2UuZHggPSBjdXJzb3ItPmltYWdlLmR4OworCQl2aWFjdXJzb3IuaW1hZ2UuZHkgPSBjdXJzb3ItPmltYWdlLmR5OworCQl5eSA9IGN1cnNvci0+aW1hZ2UuZHkgLSBpbmZvLT52YXIueW9mZnNldDsKKwkJeHggPSBjdXJzb3ItPmltYWdlLmR4IC0gaW5mby0+dmFyLnhvZmZzZXQ7CisJCXRlbXAgPSB5eSAmIDB4RkZGRjsKKwkJdGVtcCB8PSAoeHggPDwgMTYpOworCQl3cml0ZWwodGVtcCwgdmlhcGFyaW5mby0+aW9fdmlydCArIFZJQV9SRUdfQ1VSU09SX1BPUyk7CisJfQorCisJaWYgKGN1cnNvci0+c2V0ICYgRkJfQ1VSX1NFVFNJWkUpIHsKKwkJdGVtcCA9IHJlYWRsKHZpYXBhcmluZm8tPmlvX3ZpcnQgKyBWSUFfUkVHX0NVUlNPUl9NT0RFKTsKKworCQlpZiAoKGN1cnNvci0+aW1hZ2Uud2lkdGggPD0gMzIpCisJCSAgICAmJiAoY3Vyc29yLT5pbWFnZS5oZWlnaHQgPD0gMzIpKSB7CisJCQlNQVhfQ1VSUyA9IDMyOworCQkJdGVtcCB8PSAweDI7CisJCX0gZWxzZSBpZiAoKGN1cnNvci0+aW1hZ2Uud2lkdGggPD0gNjQpCisJCQkgICAmJiAoY3Vyc29yLT5pbWFnZS5oZWlnaHQgPD0gNjQpKSB7CisJCQlNQVhfQ1VSUyA9IDY0OworCQkJdGVtcCAmPSAweEZGRkZGRkZEOworCQl9IGVsc2UgeworCQkJREVCVUdfTVNHKEtFUk5fSU5GTworCQkJIlRoZSBjdXJzb3IgaW1hZ2UgaXMgYmlnZXIgdGhhbiA2NHg2NCBiaXRzLi4uXG4iKTsKKwkJCXJldHVybiAtRU5YSU87CisJCX0KKwkJd3JpdGVsKHRlbXAsIHZpYXBhcmluZm8tPmlvX3ZpcnQgKyBWSUFfUkVHX0NVUlNPUl9NT0RFKTsKKworCQl2aWFjdXJzb3IuaW1hZ2UuaGVpZ2h0ID0gY3Vyc29yLT5pbWFnZS5oZWlnaHQ7CisJCXZpYWN1cnNvci5pbWFnZS53aWR0aCA9IGN1cnNvci0+aW1hZ2Uud2lkdGg7CisJfQorCisJaWYgKGN1cnNvci0+c2V0ICYgRkJfQ1VSX1NFVENNQVApIHsKKwkJdmlhY3Vyc29yLmltYWdlLmZnX2NvbG9yID0gY3Vyc29yLT5pbWFnZS5mZ19jb2xvcjsKKwkJdmlhY3Vyc29yLmltYWdlLmJnX2NvbG9yID0gY3Vyc29yLT5pbWFnZS5iZ19jb2xvcjsKKworCQlzd2l0Y2ggKGluZm8tPnZhci5iaXRzX3Blcl9waXhlbCkgeworCQljYXNlIDg6CisJCWNhc2UgMTY6CisJCWNhc2UgMzI6CisJCQliZ19jb2wgPQorCQkJICAgICgweEZGIDw8IDI0KSB8CisJCQkgICAgKCgoaW5mby0+Y21hcC5yZWQpW3ZpYWN1cnNvci5pbWFnZS5iZ19jb2xvcl0gJgorCQkJICAgIDB4RkYwMCkgPDwgOCkgfAorCQkJICAgICgoaW5mby0+Y21hcC5ncmVlbilbdmlhY3Vyc29yLmltYWdlLmJnX2NvbG9yXSAmCisJCQkgICAgMHhGRjAwKSB8CisJCQkgICAgKCgoaW5mby0+Y21hcC5ibHVlKVt2aWFjdXJzb3IuaW1hZ2UuYmdfY29sb3JdICYKKwkJCSAgICAweEZGMDApID4+IDgpOworCQkJZmdfY29sID0KKwkJCSAgICAoMHhGRiA8PCAyNCkgfAorCQkJICAgICgoKGluZm8tPmNtYXAucmVkKVt2aWFjdXJzb3IuaW1hZ2UuZmdfY29sb3JdICYKKwkJCSAgICAweEZGMDApIDw8IDgpIHwKKwkJCSAgICAoKGluZm8tPmNtYXAuZ3JlZW4pW3ZpYWN1cnNvci5pbWFnZS5mZ19jb2xvcl0gJgorCQkJICAgIDB4RkYwMCkgfAorCQkJICAgICgoKGluZm8tPmNtYXAuYmx1ZSlbdmlhY3Vyc29yLmltYWdlLmZnX2NvbG9yXSAmCisJCQkgICAgMHhGRjAwKSA+PiA4KTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcmV0dXJuIDA7CisJCX0KKworCQkvKiBUaGlzIGlzIGluZGVlZCBhIHBhdGNoIGZvciBWVDMzMjQvVlQzMzUzICovCisJCWlmICghaW5mby0+cGFyKQorCQkJcmV0dXJuIDA7CisJCXBfdmlhZmJfcGFyID0gKHN0cnVjdCB2aWFmYl9wYXIgKilpbmZvLT5wYXI7CisKKwkJaWYgKChwX3ZpYWZiX3Bhci0+Y2hpcF9pbmZvLT5nZnhfY2hpcF9uYW1lID09CisJCQlVTklDSFJPTUVfQ1g3MDApIHx8CisJCQkoKHBfdmlhZmJfcGFyLT5jaGlwX2luZm8tPmdmeF9jaGlwX25hbWUgPT0KKwkJCVVOSUNIUk9NRV9WWDgwMCkpKSB7CisJCQliZ19jb2wgPQorCQkJICAgICgoKGluZm8tPmNtYXAucmVkKVt2aWFjdXJzb3IuaW1hZ2UuYmdfY29sb3JdICYKKwkJCSAgICAweEZGQzApIDw8IDE0KSB8CisJCQkgICAgKCgoaW5mby0+Y21hcC5ncmVlbilbdmlhY3Vyc29yLmltYWdlLmJnX2NvbG9yXSAmCisJCQkgICAgMHhGRkMwKSA8PCA0KSB8CisJCQkgICAgKCgoaW5mby0+Y21hcC5ibHVlKVt2aWFjdXJzb3IuaW1hZ2UuYmdfY29sb3JdICYKKwkJCSAgICAweEZGQzApID4+IDYpOworCQkJZmdfY29sID0KKwkJCSAgICAoKChpbmZvLT5jbWFwLnJlZClbdmlhY3Vyc29yLmltYWdlLmZnX2NvbG9yXSAmCisJCQkgICAgMHhGRkMwKSA8PCAxNCkgfAorCQkJICAgICgoKGluZm8tPmNtYXAuZ3JlZW4pW3ZpYWN1cnNvci5pbWFnZS5mZ19jb2xvcl0gJgorCQkJICAgIDB4RkZDMCkgPDwgNCkgfAorCQkJICAgICgoKGluZm8tPmNtYXAuYmx1ZSlbdmlhY3Vyc29yLmltYWdlLmZnX2NvbG9yXSAmCisJCQkgICAgMHhGRkMwKSA+PiA2KTsKKwkJfQorCisJCXdyaXRlbChiZ19jb2wsIHZpYXBhcmluZm8tPmlvX3ZpcnQgKyBWSUFfUkVHX0NVUlNPUl9CRyk7CisJCXdyaXRlbChmZ19jb2wsIHZpYXBhcmluZm8tPmlvX3ZpcnQgKyBWSUFfUkVHX0NVUlNPUl9GRyk7CisJfQorCisJaWYgKGN1cnNvci0+c2V0ICYgRkJfQ1VSX1NFVFNIQVBFKSB7CisJCXNpemUgPQorCQkgICAgKCh2aWFjdXJzb3IuaW1hZ2Uud2lkdGggKyA3KSA+PiAzKSAqCisJCSAgICB2aWFjdXJzb3IuaW1hZ2UuaGVpZ2h0OworCisJCWlmIChNQVhfQ1VSUyA9PSAzMikgeworCQkJZm9yIChpID0gMDsgaSA8IChDVVJTT1JfU0laRSAvIDMyKTsgaSsrKSB7CisJCQkJZGF0YV9iYWtbaV0gPSAweDA7CisJCQkJZGF0YV9iYWtbaSArIDFdID0gMHhGRkZGRkZGRjsKKwkJCQlpICs9IDE7CisJCQl9CisJCX0gZWxzZSBpZiAoTUFYX0NVUlMgPT0gNjQpIHsKKwkJCWZvciAoaSA9IDA7IGkgPCAoQ1VSU09SX1NJWkUgLyAzMik7IGkrKykgeworCQkJCWRhdGFfYmFrW2ldID0gMHgwOworCQkJCWRhdGFfYmFrW2kgKyAxXSA9IDB4MDsKKwkJCQlkYXRhX2Jha1tpICsgMl0gPSAweEZGRkZGRkZGOworCQkJCWRhdGFfYmFrW2kgKyAzXSA9IDB4RkZGRkZGRkY7CisJCQkJaSArPSAzOworCQkJfQorCQl9CisKKwkJc3dpdGNoICh2aWFjdXJzb3Iucm9wKSB7CisJCWNhc2UgUk9QX1hPUjoKKwkJCWZvciAoaSA9IDA7IGkgPCBzaXplOyBpKyspCisJCQkJZGF0YVtpXSA9IHZpYWN1cnNvci5tYXNrW2ldOworCQkJYnJlYWs7CisJCWNhc2UgUk9QX0NPUFk6CisKKwkJCWZvciAoaSA9IDA7IGkgPCBzaXplOyBpKyspCisJCQkJZGF0YVtpXSA9IHZpYWN1cnNvci5tYXNrW2ldOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlicmVhazsKKwkJfQorCisJCWlmIChNQVhfQ1VSUyA9PSAzMikgeworCQkJZm9yIChpID0gMDsgaSA8IHNpemU7IGkrKykgeworCQkJCWRhdGFfYmFrW2pdID0gKHUzMikgZGF0YVtpXTsKKwkJCQlkYXRhX2Jha1tqICsgMV0gPSB+ZGF0YV9iYWtbal07CisJCQkJaiArPSAyOworCQkJfQorCQl9IGVsc2UgaWYgKE1BWF9DVVJTID09IDY0KSB7CisJCQlmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7CisJCQkJZGF0YV9iYWtbal0gPSAodTMyKSBkYXRhW2ldOworCQkJCWRhdGFfYmFrW2ogKyAxXSA9IDB4MDsKKwkJCQlkYXRhX2Jha1tqICsgMl0gPSB+ZGF0YV9iYWtbal07CisJCQkJZGF0YV9iYWtbaiArIDNdID0gfmRhdGFfYmFrW2ogKyAxXTsKKwkJCQlqICs9IDQ7CisJCQl9CisJCX0KKworCQltZW1jcHkoKChzdHJ1Y3QgdmlhZmJfcGFyICopKGluZm8tPnBhcikpLT5mYm1lbV92aXJ0ICsKKwkJICAgICAgICgoc3RydWN0IHZpYWZiX3BhciAqKShpbmZvLT5wYXIpKS0+Y3Vyc29yX3N0YXJ0LAorCQkgICAgICAgZGF0YV9iYWssIENVUlNPUl9TSVpFKTsKKwl9CisKKwlpZiAodmlhY3Vyc29yLmVuYWJsZSkKKwkJdmlhZmJfc2hvd19od19jdXJzb3IoaW5mbywgSFdfQ3Vyc29yX09OKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZpYWZiX3N5bmMoc3RydWN0IGZiX2luZm8gKmluZm8pCit7CisJaWYgKHZpYWZiX2FjY2VsKQorCQl2aWFmYl93YWl0X2VuZ2luZV9pZGxlKCk7CisJcmV0dXJuIDA7Cit9CisKK2ludCB2aWFmYl9nZXRfbW9kZV9pbmRleChpbnQgaHJlcywgaW50IHZyZXMsIGludCBmbGFnKQoreworCXUzMiBpOworCURFQlVHX01TRyhLRVJOX0lORk8gInZpYWZiX2dldF9tb2RlX2luZGV4IVxuIik7CisKKwlmb3IgKGkgPSAwOyB2aWFmYl9tb2RlbnRyeVtpXS5tb2RlX2luZGV4ICE9IFZJQV9SRVNfSU5WQUxJRDsgaSsrKQorCQlpZiAodmlhZmJfbW9kZW50cnlbaV0ueHJlcyA9PSBocmVzICYmCisJCQl2aWFmYl9tb2RlbnRyeVtpXS55cmVzID09IHZyZXMpCisJCQlicmVhazsKKworCXZpYWZiX3Jlc01vZGUgPSB2aWFmYl9tb2RlbnRyeVtpXS5tb2RlX2luZGV4OworCWlmIChmbGFnKQorCQl2aWFmYl9tb2RlMSA9IHZpYWZiX21vZGVudHJ5W2ldLm1vZGVfcmVzOworCWVsc2UKKwkJdmlhZmJfbW9kZSA9IHZpYWZiX21vZGVudHJ5W2ldLm1vZGVfcmVzOworCisJcmV0dXJuIHZpYWZiX3Jlc01vZGU7Cit9CisKK3N0YXRpYyB2b2lkIGNoZWNrX2F2YWlsYWJsZV9kZXZpY2VfdG9fZW5hYmxlKGludCBkZXZpY2VfaWQpCit7CisJaW50IGRldmljZV9udW0gPSAwOworCisJLyogSW5pdGlhbGl6ZTogKi8KKwl2aWFmYl9DUlRfT04gPSBTVEFURV9PRkY7CisJdmlhZmJfRFZJX09OID0gU1RBVEVfT0ZGOworCXZpYWZiX0xDRF9PTiA9IFNUQVRFX09GRjsKKwl2aWFmYl9MQ0QyX09OID0gU1RBVEVfT0ZGOworCXZpYWZiX0RldmljZVN0YXR1cyA9IE5vbmVfRGV2aWNlOworCisJaWYgKChkZXZpY2VfaWQgJiBDUlRfRGV2aWNlKSAmJiAoZGV2aWNlX251bSA8IE1BWF9BQ1RJVkVfREVWX05VTSkpIHsKKwkJdmlhZmJfQ1JUX09OID0gU1RBVEVfT047CisJCWRldmljZV9udW0rKzsKKwkJdmlhZmJfRGV2aWNlU3RhdHVzIHw9IENSVF9EZXZpY2U7CisJfQorCisJaWYgKChkZXZpY2VfaWQgJiBEVklfRGV2aWNlKSAmJiAoZGV2aWNlX251bSA8IE1BWF9BQ1RJVkVfREVWX05VTSkpIHsKKwkJdmlhZmJfRFZJX09OID0gU1RBVEVfT047CisJCWRldmljZV9udW0rKzsKKwkJdmlhZmJfRGV2aWNlU3RhdHVzIHw9IERWSV9EZXZpY2U7CisJfQorCisJaWYgKChkZXZpY2VfaWQgJiBMQ0RfRGV2aWNlKSAmJiAoZGV2aWNlX251bSA8IE1BWF9BQ1RJVkVfREVWX05VTSkpIHsKKwkJdmlhZmJfTENEX09OID0gU1RBVEVfT047CisJCWRldmljZV9udW0rKzsKKwkJdmlhZmJfRGV2aWNlU3RhdHVzIHw9IExDRF9EZXZpY2U7CisJfQorCisJaWYgKChkZXZpY2VfaWQgJiBMQ0QyX0RldmljZSkgJiYgKGRldmljZV9udW0gPCBNQVhfQUNUSVZFX0RFVl9OVU0pKSB7CisJCXZpYWZiX0xDRDJfT04gPSBTVEFURV9PTjsKKwkJZGV2aWNlX251bSsrOworCQl2aWFmYl9EZXZpY2VTdGF0dXMgfD0gTENEMl9EZXZpY2U7CisJfQorCisJaWYgKHZpYWZiX0RldmljZVN0YXR1cyA9PSBOb25lX0RldmljZSkgeworCQkvKiBVc2UgQ1JUIGFzIGRlZmF1bHQgYWN0aXZlIGRldmljZTogKi8KKwkJdmlhZmJfQ1JUX09OID0gU1RBVEVfT047CisJCXZpYWZiX0RldmljZVN0YXR1cyA9IENSVF9EZXZpY2U7CisJfQorCURFQlVHX01TRyhLRVJOX0lORk8gIkRldmljZSBTdGF0dXM6JXgiLCB2aWFmYl9EZXZpY2VTdGF0dXMpOworfQorCitzdGF0aWMgdm9pZCB2aWFmYl9zZXRfZGV2aWNlKHN0cnVjdCBkZXZpY2VfdCBhY3RpdmVfZGV2KQoreworCS8qIENoZWNrIGF2YWlsYWJsZSBkZXZpY2UgdG8gZW5hYmxlOiAqLworCWludCBkZXZpY2VfaWQgPSBOb25lX0RldmljZTsKKwlpZiAoYWN0aXZlX2Rldi5jcnQpCisJCWRldmljZV9pZCB8PSBDUlRfRGV2aWNlOworCWlmIChhY3RpdmVfZGV2LmR2aSkKKwkJZGV2aWNlX2lkIHw9IERWSV9EZXZpY2U7CisJaWYgKGFjdGl2ZV9kZXYubGNkKQorCQlkZXZpY2VfaWQgfD0gTENEX0RldmljZTsKKworCWNoZWNrX2F2YWlsYWJsZV9kZXZpY2VfdG9fZW5hYmxlKGRldmljZV9pZCk7CisKKwkvKiBDaGVjayBwcm9wZXJ0eSBvZiBMQ0Q6ICovCisJaWYgKHZpYWZiX0xDRF9PTikgeworCQlpZiAoYWN0aXZlX2Rldi5sY2RfZHNwX2NlbnQpIHsKKwkJCXZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvLT5kaXNwbGF5X21ldGhvZCA9CisJCQkJdmlhZmJfbGNkX2RzcF9tZXRob2QgPSBMQ0RfQ0VOVEVSSU5HOworCQl9IGVsc2UgeworCQkJdmlhcGFyaW5mby0+bHZkc19zZXR0aW5nX2luZm8tPmRpc3BsYXlfbWV0aG9kID0KKwkJCQl2aWFmYl9sY2RfZHNwX21ldGhvZCA9IExDRF9FWFBBTkRTSU9OOworCQl9CisKKwkJaWYgKGFjdGl2ZV9kZXYubGNkX21vZGUgPT0gTENEX1NQV0cpIHsKKwkJCXZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvLT5sY2RfbW9kZSA9CisJCQkJdmlhZmJfbGNkX21vZGUgPSBMQ0RfU1BXRzsKKwkJfSBlbHNlIHsKKwkJCXZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvLT5sY2RfbW9kZSA9CisJCQkJdmlhZmJfbGNkX21vZGUgPSBMQ0RfT1BFTkxESTsKKwkJfQorCisJCWlmIChhY3RpdmVfZGV2LmxjZF9wYW5lbF9pZCA8PSBMQ0RfUEFORUxfSURfTUFYSU1VTSkgeworCQkJdmlhZmJfbGNkX3BhbmVsX2lkID0gYWN0aXZlX2Rldi5sY2RfcGFuZWxfaWQ7CisJCQl2aWFmYl9pbml0X2xjZF9zaXplKCk7CisJCX0KKwl9CisKKwkvKiBDaGVjayBwcm9wZXJ0eSBvZiBtb2RlOiAqLworCWlmICghYWN0aXZlX2Rldi54cmVzMSkKKwkJdmlhZmJfc2Vjb25kX3hyZXMgPSA2NDA7CisJZWxzZQorCQl2aWFmYl9zZWNvbmRfeHJlcyA9IGFjdGl2ZV9kZXYueHJlczE7CisJaWYgKCFhY3RpdmVfZGV2LnlyZXMxKQorCQl2aWFmYl9zZWNvbmRfeXJlcyA9IDQ4MDsKKwllbHNlCisJCXZpYWZiX3NlY29uZF95cmVzID0gYWN0aXZlX2Rldi55cmVzMTsKKwlpZiAoYWN0aXZlX2Rldi5icHAgIT0gMCkKKwkJdmlhZmJfYnBwID0gYWN0aXZlX2Rldi5icHA7CisJaWYgKGFjdGl2ZV9kZXYuYnBwMSAhPSAwKQorCQl2aWFmYl9icHAxID0gYWN0aXZlX2Rldi5icHAxOworCWlmIChhY3RpdmVfZGV2LnJlZnJlc2ggIT0gMCkKKwkJdmlhZmJfcmVmcmVzaCA9IGFjdGl2ZV9kZXYucmVmcmVzaDsKKwlpZiAoYWN0aXZlX2Rldi5yZWZyZXNoMSAhPSAwKQorCQl2aWFmYl9yZWZyZXNoMSA9IGFjdGl2ZV9kZXYucmVmcmVzaDE7CisJaWYgKChhY3RpdmVfZGV2LnNhbW0gPT0gU1RBVEVfT0ZGKSB8fCAoYWN0aXZlX2Rldi5zYW1tID09IFNUQVRFX09OKSkKKwkJdmlhZmJfU0FNTV9PTiA9IGFjdGl2ZV9kZXYuc2FtbTsKKwl2aWFmYl9wcmltYXJ5X2RldiA9IGFjdGl2ZV9kZXYucHJpbWFyeV9kZXY7CisKKwl2aWFmYl9zZXRfc3RhcnRfYWRkcigpOworCXZpYWZiX3NldF9pZ2FfcGF0aCgpOworfQorCitzdGF0aWMgdm9pZCB2aWFmYl9zZXRfdmlkZW9fZGV2aWNlKHUzMiB2aWRlb19kZXZfaW5mbykKK3sKKwl2aWFwYXJpbmZvLT52aWRlb19vbl9jcnQgPSBTVEFURV9PRkY7CisJdmlhcGFyaW5mby0+dmlkZW9fb25fZHZpID0gU1RBVEVfT0ZGOworCXZpYXBhcmluZm8tPnZpZGVvX29uX2xjZCA9IFNUQVRFX09GRjsKKworCS8qIENoZWNrIGF2YWlsYWJsZSBkZXZpY2UgdG8gZW5hYmxlOiAqLworCWlmICgodmlkZW9fZGV2X2luZm8gJiBDUlRfRGV2aWNlKSA9PSBDUlRfRGV2aWNlKQorCQl2aWFwYXJpbmZvLT52aWRlb19vbl9jcnQgPSBTVEFURV9PTjsKKwllbHNlIGlmICgodmlkZW9fZGV2X2luZm8gJiBEVklfRGV2aWNlKSA9PSBEVklfRGV2aWNlKQorCQl2aWFwYXJpbmZvLT52aWRlb19vbl9kdmkgPSBTVEFURV9PTjsKKwllbHNlIGlmICgodmlkZW9fZGV2X2luZm8gJiBMQ0RfRGV2aWNlKSA9PSBMQ0RfRGV2aWNlKQorCQl2aWFwYXJpbmZvLT52aWRlb19vbl9sY2QgPSBTVEFURV9PTjsKK30KKworc3RhdGljIHZvaWQgdmlhZmJfZ2V0X3ZpZGVvX2RldmljZSh1MzIgKnZpZGVvX2Rldl9pbmZvKQoreworCSp2aWRlb19kZXZfaW5mbyA9IE5vbmVfRGV2aWNlOworCWlmICh2aWFwYXJpbmZvLT52aWRlb19vbl9jcnQgPT0gU1RBVEVfT04pCisJCSp2aWRlb19kZXZfaW5mbyB8PSBDUlRfRGV2aWNlOworCWVsc2UgaWYgKHZpYXBhcmluZm8tPnZpZGVvX29uX2R2aSA9PSBTVEFURV9PTikKKwkJKnZpZGVvX2Rldl9pbmZvIHw9IERWSV9EZXZpY2U7CisJZWxzZSBpZiAodmlhcGFyaW5mby0+dmlkZW9fb25fbGNkID09IFNUQVRFX09OKQorCQkqdmlkZW9fZGV2X2luZm8gfD0gTENEX0RldmljZTsKK30KKworc3RhdGljIGludCBnZXRfcHJpbWFyeV9kZXZpY2Uodm9pZCkKK3sKKwlpbnQgcHJpbWFyeV9kZXZpY2UgPSAwOworCS8qIFJ1bGU6IGRldmljZSBvbiBpZ2ExIHBhdGggYXJlIHRoZSBwcmltYXJ5IGRldmljZS4gKi8KKwlpZiAodmlhZmJfU0FNTV9PTikgeworCQlpZiAodmlhZmJfQ1JUX09OKSB7CisJCQlpZiAodmlhcGFyaW5mby0+Y3J0X3NldHRpbmdfaW5mby0+aWdhX3BhdGggPT0gSUdBMSkgeworCQkJCURFQlVHX01TRyhLRVJOX0lORk8gIkNSVCBJR0EgUGF0aDolZFxuIiwKKwkJCQkJdmlhcGFyaW5mby0+CisJCQkJCWNydF9zZXR0aW5nX2luZm8tPmlnYV9wYXRoKTsKKwkJCQlwcmltYXJ5X2RldmljZSA9IENSVF9EZXZpY2U7CisJCQl9CisJCX0KKwkJaWYgKHZpYWZiX0RWSV9PTikgeworCQkJaWYgKHZpYXBhcmluZm8tPnRtZHNfc2V0dGluZ19pbmZvLT5pZ2FfcGF0aCA9PSBJR0ExKSB7CisJCQkJREVCVUdfTVNHKEtFUk5fSU5GTyAiRFZJIElHQSBQYXRoOiVkXG4iLAorCQkJCQl2aWFwYXJpbmZvLT4KKwkJCQkJdG1kc19zZXR0aW5nX2luZm8tPmlnYV9wYXRoKTsKKwkJCQlwcmltYXJ5X2RldmljZSA9IERWSV9EZXZpY2U7CisJCQl9CisJCX0KKwkJaWYgKHZpYWZiX0xDRF9PTikgeworCQkJaWYgKHZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvLT5pZ2FfcGF0aCA9PSBJR0ExKSB7CisJCQkJREVCVUdfTVNHKEtFUk5fSU5GTyAiTENEIElHQSBQYXRoOiVkXG4iLAorCQkJCQl2aWFwYXJpbmZvLT4KKwkJCQkJbHZkc19zZXR0aW5nX2luZm8tPmlnYV9wYXRoKTsKKwkJCQlwcmltYXJ5X2RldmljZSA9IExDRF9EZXZpY2U7CisJCQl9CisJCX0KKwkJaWYgKHZpYWZiX0xDRDJfT04pIHsKKwkJCWlmICh2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mbzItPmlnYV9wYXRoID09IElHQTEpIHsKKwkJCQlERUJVR19NU0coS0VSTl9JTkZPICJMQ0QyIElHQSBQYXRoOiVkXG4iLAorCQkJCQl2aWFwYXJpbmZvLT4KKwkJCQkJbHZkc19zZXR0aW5nX2luZm8yLT5pZ2FfcGF0aCk7CisJCQkJcHJpbWFyeV9kZXZpY2UgPSBMQ0QyX0RldmljZTsKKwkJCX0KKwkJfQorCX0KKwlyZXR1cm4gcHJpbWFyeV9kZXZpY2U7Cit9CisKK3N0YXRpYyB1OCBpc19kdW92aWV3KHZvaWQpCit7CisJaWYgKDAgPT0gdmlhZmJfU0FNTV9PTikgeworCQlpZiAodmlhZmJfTENEX09OICsgdmlhZmJfTENEMl9PTiArCisJCQl2aWFmYl9EVklfT04gKyB2aWFmYl9DUlRfT04gPT0gMikKKwkJCXJldHVybiB0cnVlOworCQlyZXR1cm4gZmFsc2U7CisJfSBlbHNlIHsKKwkJcmV0dXJuIGZhbHNlOworCX0KK30KKworc3RhdGljIHZvaWQgYXBwbHlfc2Vjb25kX21vZGVfc2V0dGluZyhzdHJ1Y3QgZmJfdmFyX3NjcmVlbmluZm8KKwkqc2VjX3ZhcikKK3sKKwl1MzIgaHRvdGFsLCB2dG90YWwsIGxvbmdfcmVmcmVzaDsKKworCWh0b3RhbCA9IHNlY192YXItPnhyZXMgKyBzZWNfdmFyLT5sZWZ0X21hcmdpbiArCisJCXNlY192YXItPnJpZ2h0X21hcmdpbiArIHNlY192YXItPmhzeW5jX2xlbjsKKwl2dG90YWwgPSBzZWNfdmFyLT55cmVzICsgc2VjX3Zhci0+dXBwZXJfbWFyZ2luICsKKwkJc2VjX3Zhci0+bG93ZXJfbWFyZ2luICsgc2VjX3Zhci0+dnN5bmNfbGVuOworCWlmICgoc2VjX3Zhci0+eHJlc192aXJ0dWFsICogKHNlY192YXItPmJpdHNfcGVyX3BpeGVsID4+IDMpKSAmIDB4MUYpIHsKKwkJLypJcyAzMiBieXRlcyBhbGlnbm1lbnQ/ICovCisJCS8qMzIgcGl4ZWwgYWxpZ25tZW50ICovCisJCXNlY192YXItPnhyZXNfdmlydHVhbCA9IChzZWNfdmFyLT54cmVzX3ZpcnR1YWwgKyAzMSkgJiB+MzE7CisJfQorCisJaHRvdGFsID0gc2VjX3Zhci0+eHJlcyArIHNlY192YXItPmxlZnRfbWFyZ2luICsKKwkJc2VjX3Zhci0+cmlnaHRfbWFyZ2luICsgc2VjX3Zhci0+aHN5bmNfbGVuOworCXZ0b3RhbCA9IHNlY192YXItPnlyZXMgKyBzZWNfdmFyLT51cHBlcl9tYXJnaW4gKworCQlzZWNfdmFyLT5sb3dlcl9tYXJnaW4gKyBzZWNfdmFyLT52c3luY19sZW47CisJbG9uZ19yZWZyZXNoID0gMTAwMDAwMDAwMFVMIC8gc2VjX3Zhci0+cGl4Y2xvY2sgKiAxMDAwOworCWxvbmdfcmVmcmVzaCAvPSAoaHRvdGFsICogdnRvdGFsKTsKKworCXZpYWZiX3NlY29uZF94cmVzID0gc2VjX3Zhci0+eHJlczsKKwl2aWFmYl9zZWNvbmRfeXJlcyA9IHNlY192YXItPnlyZXM7CisJdmlhZmJfc2Vjb25kX3ZpcnR1YWxfeHJlcyA9IHNlY192YXItPnhyZXNfdmlydHVhbDsKKwl2aWFmYl9zZWNvbmRfdmlydHVhbF95cmVzID0gc2VjX3Zhci0+eXJlc192aXJ0dWFsOworCXZpYWZiX2JwcDEgPSBzZWNfdmFyLT5iaXRzX3Blcl9waXhlbDsKKwl2aWFmYl9yZWZyZXNoMSA9IHZpYWZiX2dldF9yZWZyZXNoKHNlY192YXItPnhyZXMsIHNlY192YXItPnlyZXMsCisJCWxvbmdfcmVmcmVzaCk7Cit9CisKK3N0YXRpYyBpbnQgYXBwbHlfZGV2aWNlX3NldHRpbmcoc3RydWN0IHZpYWZiX2lvY3RsX3NldHRpbmcgc2V0dGluZ19pbmZvLAorCXN0cnVjdCBmYl9pbmZvICppbmZvKQoreworCWludCBuZWVkX3NldF9tb2RlID0gMDsKKwlERUJVR19NU0coS0VSTl9JTkZPICJhcHBseV9kZXZpY2Vfc2V0dGluZ1xuIik7CisKKwlpZiAoc2V0dGluZ19pbmZvLmRldmljZV9mbGFnKSB7CisJCW5lZWRfc2V0X21vZGUgPSAxOworCQljaGVja19hdmFpbGFibGVfZGV2aWNlX3RvX2VuYWJsZShzZXR0aW5nX2luZm8uZGV2aWNlX3N0YXR1cyk7CisJfQorCisJLyogVW5sb2NrIExDRCdzIG9wZXJhdGlvbiBhY2NvcmRpbmcgdG8gTENEIGZsYWcKKwkgICBhbmQgY2hlY2sgaWYgdGhlIHNldHRpbmcgdmFsdWUgaXMgdmFsaWQuICovCisJLyogSWYgdGhlIHZhbHVlIGlzIHZhbGlkLCBhcHBseSB0aGUgbmV3IHNldHRpbmcgdmFsdWUgdG8gdGhlIGRldmljZS4gKi8KKwlpZiAodmlhZmJfTENEX09OKSB7CisJCWlmIChzZXR0aW5nX2luZm8ubGNkX29wZXJhdGlvbl9mbGFnICYgT1BfTENEX0NFTlRFUklORykgeworCQkJbmVlZF9zZXRfbW9kZSA9IDE7CisJCQlpZiAoc2V0dGluZ19pbmZvLmxjZF9hdHRyaWJ1dGVzLmRpc3BsYXlfY2VudGVyKSB7CisJCQkJLyogQ2VudGVyaW5nICovCisJCQkJdmlhcGFyaW5mby0+bHZkc19zZXR0aW5nX2luZm8tPmRpc3BsYXlfbWV0aG9kID0KKwkJCQkgICAgTENEX0NFTlRFUklORzsKKwkJCQl2aWFmYl9sY2RfZHNwX21ldGhvZCA9IExDRF9DRU5URVJJTkc7CisJCQkJdmlhcGFyaW5mby0+bHZkc19zZXR0aW5nX2luZm8yLT5kaXNwbGF5X21ldGhvZCA9CisJCQkJICAgIHZpYWZiX2xjZF9kc3BfbWV0aG9kID0gTENEX0NFTlRFUklORzsKKwkJCX0gZWxzZSB7CisJCQkJLyogZXhwYW5kc2lvbiAqLworCQkJCXZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvLT5kaXNwbGF5X21ldGhvZCA9CisJCQkJICAgIExDRF9FWFBBTkRTSU9OOworCQkJCXZpYWZiX2xjZF9kc3BfbWV0aG9kID0gTENEX0VYUEFORFNJT047CisJCQkJdmlhcGFyaW5mby0+bHZkc19zZXR0aW5nX2luZm8yLT5kaXNwbGF5X21ldGhvZCA9CisJCQkJICAgIExDRF9FWFBBTkRTSU9OOworCQkJCXZpYWZiX2xjZF9kc3BfbWV0aG9kID0gTENEX0VYUEFORFNJT047CisJCQl9CisJCX0KKworCQlpZiAoc2V0dGluZ19pbmZvLmxjZF9vcGVyYXRpb25fZmxhZyAmIE9QX0xDRF9NT0RFKSB7CisJCQluZWVkX3NldF9tb2RlID0gMTsKKwkJCWlmIChzZXR0aW5nX2luZm8ubGNkX2F0dHJpYnV0ZXMubGNkX21vZGUgPT0KKwkJCQlMQ0RfU1BXRykgeworCQkJCXZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvLT5sY2RfbW9kZSA9CisJCQkJCXZpYWZiX2xjZF9tb2RlID0gTENEX1NQV0c7CisJCQl9IGVsc2UgeworCQkJCXZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvLT5sY2RfbW9kZSA9CisJCQkJCXZpYWZiX2xjZF9tb2RlID0gTENEX09QRU5MREk7CisJCQl9CisJCQl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mbzItPmxjZF9tb2RlID0KKwkJCSAgICB2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mby0+bGNkX21vZGU7CisJCX0KKworCQlpZiAoc2V0dGluZ19pbmZvLmxjZF9vcGVyYXRpb25fZmxhZyAmIE9QX0xDRF9QQU5FTF9JRCkgeworCQkJbmVlZF9zZXRfbW9kZSA9IDE7CisJCQlpZiAoc2V0dGluZ19pbmZvLmxjZF9hdHRyaWJ1dGVzLnBhbmVsX2lkIDw9CisJCQkgICAgTENEX1BBTkVMX0lEX01BWElNVU0pIHsKKwkJCQl2aWFmYl9sY2RfcGFuZWxfaWQgPQorCQkJCSAgICBzZXR0aW5nX2luZm8ubGNkX2F0dHJpYnV0ZXMucGFuZWxfaWQ7CisJCQkJdmlhZmJfaW5pdF9sY2Rfc2l6ZSgpOworCQkJfQorCQl9CisJfQorCisJaWYgKDAgIT0gKHNldHRpbmdfaW5mby5zYW1tX3N0YXR1cyAmIE9QX1NBTU0pKSB7CisJCXNldHRpbmdfaW5mby5zYW1tX3N0YXR1cyA9CisJCSAgICBzZXR0aW5nX2luZm8uc2FtbV9zdGF0dXMgJiAofk9QX1NBTU0pOworCQlpZiAoc2V0dGluZ19pbmZvLnNhbW1fc3RhdHVzID09IDAKKwkJICAgIHx8IHNldHRpbmdfaW5mby5zYW1tX3N0YXR1cyA9PSAxKSB7CisJCQl2aWFmYl9TQU1NX09OID0gc2V0dGluZ19pbmZvLnNhbW1fc3RhdHVzOworCisJCQlpZiAodmlhZmJfU0FNTV9PTikKKwkJCQl2aWFmYl9wcmltYXJ5X2RldiA9IHNldHRpbmdfaW5mby5wcmltYXJ5X2RldmljZTsKKworCQkJdmlhZmJfc2V0X3N0YXJ0X2FkZHIoKTsKKwkJCXZpYWZiX3NldF9pZ2FfcGF0aCgpOworCQl9CisJCW5lZWRfc2V0X21vZGUgPSAxOworCX0KKworCXZpYXBhcmluZm8tPmR1b3ZpZXcgPSBpc19kdW92aWV3KCk7CisKKwlpZiAoIW5lZWRfc2V0X21vZGUpIHsKKwkJOworCX0gZWxzZSB7CisJCXZpYWZiX3NldF9pZ2FfcGF0aCgpOworCQl2aWFmYl9zZXRfcGFyKGluZm8pOworCX0KKwlyZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIHZvaWQgcmV0cmlldmVfZGV2aWNlX3NldHRpbmcoc3RydWN0IHZpYWZiX2lvY3RsX3NldHRpbmcKKwkqc2V0dGluZ19pbmZvKQoreworCisJLyogZ2V0IGRldmljZSBzdGF0dXMgKi8KKwlpZiAodmlhZmJfQ1JUX09OID09IDEpCisJCXNldHRpbmdfaW5mby0+ZGV2aWNlX3N0YXR1cyA9IENSVF9EZXZpY2U7CisJaWYgKHZpYWZiX0RWSV9PTiA9PSAxKQorCQlzZXR0aW5nX2luZm8tPmRldmljZV9zdGF0dXMgfD0gRFZJX0RldmljZTsKKwlpZiAodmlhZmJfTENEX09OID09IDEpCisJCXNldHRpbmdfaW5mby0+ZGV2aWNlX3N0YXR1cyB8PSBMQ0RfRGV2aWNlOworCWlmICh2aWFmYl9MQ0QyX09OID09IDEpCisJCXNldHRpbmdfaW5mby0+ZGV2aWNlX3N0YXR1cyB8PSBMQ0QyX0RldmljZTsKKwlpZiAoKHZpYXBhcmluZm8tPnZpZGVvX29uX2NydCA9PSAxKSAmJiAodmlhZmJfQ1JUX09OID09IDEpKSB7CisJCXNldHRpbmdfaW5mby0+dmlkZW9fZGV2aWNlX3N0YXR1cyA9CisJCQl2aWFwYXJpbmZvLT5jcnRfc2V0dGluZ19pbmZvLT5pZ2FfcGF0aDsKKwl9IGVsc2UgaWYgKCh2aWFwYXJpbmZvLT52aWRlb19vbl9kdmkgPT0gMSkgJiYgKHZpYWZiX0RWSV9PTiA9PSAxKSkgeworCQlzZXR0aW5nX2luZm8tPnZpZGVvX2RldmljZV9zdGF0dXMgPQorCQkJdmlhcGFyaW5mby0+dG1kc19zZXR0aW5nX2luZm8tPmlnYV9wYXRoOworCX0gZWxzZSBpZiAoKHZpYXBhcmluZm8tPnZpZGVvX29uX2xjZCA9PSAxKSAmJiAodmlhZmJfTENEX09OID09IDEpKSB7CisJCXNldHRpbmdfaW5mby0+dmlkZW9fZGV2aWNlX3N0YXR1cyA9CisJCQl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mby0+aWdhX3BhdGg7CisJfSBlbHNlIHsKKwkJc2V0dGluZ19pbmZvLT52aWRlb19kZXZpY2Vfc3RhdHVzID0gMDsKKwl9CisKKwlzZXR0aW5nX2luZm8tPnNhbW1fc3RhdHVzID0gdmlhZmJfU0FNTV9PTjsKKwlzZXR0aW5nX2luZm8tPnByaW1hcnlfZGV2aWNlID0gZ2V0X3ByaW1hcnlfZGV2aWNlKCk7CisKKwlzZXR0aW5nX2luZm8tPmZpcnN0X2Rldl9icHAgPSB2aWFmYl9icHA7CisJc2V0dGluZ19pbmZvLT5zZWNvbmRfZGV2X2JwcCA9IHZpYWZiX2JwcDE7CisKKwlzZXR0aW5nX2luZm8tPmZpcnN0X2Rldl9yZWZyZXNoID0gdmlhZmJfcmVmcmVzaDsKKwlzZXR0aW5nX2luZm8tPnNlY29uZF9kZXZfcmVmcmVzaCA9IHZpYWZiX3JlZnJlc2gxOworCisJc2V0dGluZ19pbmZvLT5maXJzdF9kZXZfaG9yX3JlcyA9IHZpYWZiX2hvdHBsdWdfWHJlczsKKwlzZXR0aW5nX2luZm8tPmZpcnN0X2Rldl92ZXJfcmVzID0gdmlhZmJfaG90cGx1Z19ZcmVzOworCXNldHRpbmdfaW5mby0+c2Vjb25kX2Rldl9ob3JfcmVzID0gdmlhZmJfc2Vjb25kX3hyZXM7CisJc2V0dGluZ19pbmZvLT5zZWNvbmRfZGV2X3Zlcl9yZXMgPSB2aWFmYl9zZWNvbmRfeXJlczsKKworCS8qIEdldCBsY2QgYXR0cmlidXRlcyAqLworCXNldHRpbmdfaW5mby0+bGNkX2F0dHJpYnV0ZXMuZGlzcGxheV9jZW50ZXIgPSB2aWFmYl9sY2RfZHNwX21ldGhvZDsKKwlzZXR0aW5nX2luZm8tPmxjZF9hdHRyaWJ1dGVzLnBhbmVsX2lkID0gdmlhZmJfbGNkX3BhbmVsX2lkOworCXNldHRpbmdfaW5mby0+bGNkX2F0dHJpYnV0ZXMubGNkX21vZGUgPSB2aWFmYl9sY2RfbW9kZTsKK30KKworc3RhdGljIHZvaWQgcGFyc2VfYWN0aXZlX2Rldih2b2lkKQoreworCXZpYWZiX0NSVF9PTiA9IFNUQVRFX09GRjsKKwl2aWFmYl9EVklfT04gPSBTVEFURV9PRkY7CisJdmlhZmJfTENEX09OID0gU1RBVEVfT0ZGOworCXZpYWZiX0xDRDJfT04gPSBTVEFURV9PRkY7CisJLyogMS4gTW9kaWZ5IHRoZSBhY3RpdmUgc3RhdHVzIG9mIGRldmljZXMuICovCisJLyogMi4gS2VlcCB0aGUgb3JkZXIgb2YgZGV2aWNlcywgc28gd2UgY2FuIHNldCBjb3JyZXNwb25kaW5nCisJICAgSUdBIHBhdGggdG8gZGV2aWNlcyBpbiBTQU1NIGNhc2UuICovCisJLyogICAgTm90ZTogVGhlIHByZXZpb3VzIG9mIGFjdGl2ZV9kZXYgaXMgcHJpbWFyeSBkZXZpY2UsCisJICAgYW5kIHRoZSBmb2xsb3dpbmcgaXMgc2Vjb25kYXJ5IGRldmljZS4gKi8KKwlpZiAoIXN0cm5jbXAodmlhZmJfYWN0aXZlX2RldiwgIkNSVCtEVkkiLCA3KSkgeworCQkvKiBDUlQrRFZJICovCisJCXZpYWZiX0NSVF9PTiA9IFNUQVRFX09OOworCQl2aWFmYl9EVklfT04gPSBTVEFURV9PTjsKKwkJdmlhZmJfcHJpbWFyeV9kZXYgPSBDUlRfRGV2aWNlOworCX0gZWxzZSBpZiAoIXN0cm5jbXAodmlhZmJfYWN0aXZlX2RldiwgIkRWSStDUlQiLCA3KSkgeworCQkvKiBEVkkrQ1JUICovCisJCXZpYWZiX0NSVF9PTiA9IFNUQVRFX09OOworCQl2aWFmYl9EVklfT04gPSBTVEFURV9PTjsKKwkJdmlhZmJfcHJpbWFyeV9kZXYgPSBEVklfRGV2aWNlOworCX0gZWxzZSBpZiAoIXN0cm5jbXAodmlhZmJfYWN0aXZlX2RldiwgIkNSVCtMQ0QiLCA3KSkgeworCQkvKiBDUlQrTENEICovCisJCXZpYWZiX0NSVF9PTiA9IFNUQVRFX09OOworCQl2aWFmYl9MQ0RfT04gPSBTVEFURV9PTjsKKwkJdmlhZmJfcHJpbWFyeV9kZXYgPSBDUlRfRGV2aWNlOworCX0gZWxzZSBpZiAoIXN0cm5jbXAodmlhZmJfYWN0aXZlX2RldiwgIkxDRCtDUlQiLCA3KSkgeworCQkvKiBMQ0QrQ1JUICovCisJCXZpYWZiX0NSVF9PTiA9IFNUQVRFX09OOworCQl2aWFmYl9MQ0RfT04gPSBTVEFURV9PTjsKKwkJdmlhZmJfcHJpbWFyeV9kZXYgPSBMQ0RfRGV2aWNlOworCX0gZWxzZSBpZiAoIXN0cm5jbXAodmlhZmJfYWN0aXZlX2RldiwgIkRWSStMQ0QiLCA3KSkgeworCQkvKiBEVkkrTENEICovCisJCXZpYWZiX0RWSV9PTiA9IFNUQVRFX09OOworCQl2aWFmYl9MQ0RfT04gPSBTVEFURV9PTjsKKwkJdmlhZmJfcHJpbWFyeV9kZXYgPSBEVklfRGV2aWNlOworCX0gZWxzZSBpZiAoIXN0cm5jbXAodmlhZmJfYWN0aXZlX2RldiwgIkxDRCtEVkkiLCA3KSkgeworCQkvKiBMQ0QrRFZJICovCisJCXZpYWZiX0RWSV9PTiA9IFNUQVRFX09OOworCQl2aWFmYl9MQ0RfT04gPSBTVEFURV9PTjsKKwkJdmlhZmJfcHJpbWFyeV9kZXYgPSBMQ0RfRGV2aWNlOworCX0gZWxzZSBpZiAoIXN0cm5jbXAodmlhZmJfYWN0aXZlX2RldiwgIkxDRCtMQ0QyIiwgOCkpIHsKKwkJdmlhZmJfTENEX09OID0gU1RBVEVfT047CisJCXZpYWZiX0xDRDJfT04gPSBTVEFURV9PTjsKKwkJdmlhZmJfcHJpbWFyeV9kZXYgPSBMQ0RfRGV2aWNlOworCX0gZWxzZSBpZiAoIXN0cm5jbXAodmlhZmJfYWN0aXZlX2RldiwgIkxDRDIrTENEIiwgOCkpIHsKKwkJdmlhZmJfTENEX09OID0gU1RBVEVfT047CisJCXZpYWZiX0xDRDJfT04gPSBTVEFURV9PTjsKKwkJdmlhZmJfcHJpbWFyeV9kZXYgPSBMQ0QyX0RldmljZTsKKwl9IGVsc2UgaWYgKCFzdHJuY21wKHZpYWZiX2FjdGl2ZV9kZXYsICJDUlQiLCAzKSkgeworCQkvKiBDUlQgb25seSAqLworCQl2aWFmYl9DUlRfT04gPSBTVEFURV9PTjsKKwkJdmlhZmJfU0FNTV9PTiA9IFNUQVRFX09GRjsKKwl9IGVsc2UgaWYgKCFzdHJuY21wKHZpYWZiX2FjdGl2ZV9kZXYsICJEVkkiLCAzKSkgeworCQkvKiBEVkkgb25seSAqLworCQl2aWFmYl9EVklfT04gPSBTVEFURV9PTjsKKwkJdmlhZmJfU0FNTV9PTiA9IFNUQVRFX09GRjsKKwl9IGVsc2UgaWYgKCFzdHJuY21wKHZpYWZiX2FjdGl2ZV9kZXYsICJMQ0QiLCAzKSkgeworCQkvKiBMQ0Qgb25seSAqLworCQl2aWFmYl9MQ0RfT04gPSBTVEFURV9PTjsKKwkJdmlhZmJfU0FNTV9PTiA9IFNUQVRFX09GRjsKKwl9IGVsc2UgeworCQl2aWFmYl9DUlRfT04gPSBTVEFURV9PTjsKKwkJdmlhZmJfU0FNTV9PTiA9IFNUQVRFX09GRjsKKwl9CisJdmlhcGFyaW5mby0+ZHVvdmlldyA9IGlzX2R1b3ZpZXcoKTsKK30KKworc3RhdGljIHZvaWQgcGFyc2VfdmlkZW9fZGV2KHZvaWQpCit7CisJdmlhcGFyaW5mby0+dmlkZW9fb25fY3J0ID0gU1RBVEVfT0ZGOworCXZpYXBhcmluZm8tPnZpZGVvX29uX2R2aSA9IFNUQVRFX09GRjsKKwl2aWFwYXJpbmZvLT52aWRlb19vbl9sY2QgPSBTVEFURV9PRkY7CisKKwlpZiAoIXN0cm5jbXAodmlhZmJfdmlkZW9fZGV2LCAiQ1JUIiwgMykpIHsKKwkJLyogVmlkZW8gb24gQ1JUICovCisJCXZpYXBhcmluZm8tPnZpZGVvX29uX2NydCA9IFNUQVRFX09OOworCX0gZWxzZSBpZiAoIXN0cm5jbXAodmlhZmJfdmlkZW9fZGV2LCAiRFZJIiwgMykpIHsKKwkJLyogVmlkZW8gb24gRFZJICovCisJCXZpYXBhcmluZm8tPnZpZGVvX29uX2R2aSA9IFNUQVRFX09OOworCX0gZWxzZSBpZiAoIXN0cm5jbXAodmlhZmJfdmlkZW9fZGV2LCAiTENEIiwgMykpIHsKKwkJLyogVmlkZW8gb24gTENEICovCisJCXZpYXBhcmluZm8tPnZpZGVvX29uX2xjZCA9IFNUQVRFX09OOworCX0KK30KKworc3RhdGljIGludCBwYXJzZV9wb3J0KGNoYXIgKm9wdF9zdHIsIGludCAqb3V0cHV0X2ludGVyZmFjZSkKK3sKKwlpZiAoIXN0cm5jbXAob3B0X3N0ciwgIkRWUDAiLCA0KSkKKwkJKm91dHB1dF9pbnRlcmZhY2UgPSBJTlRFUkZBQ0VfRFZQMDsKKwllbHNlIGlmICghc3RybmNtcChvcHRfc3RyLCAiRFZQMSIsIDQpKQorCQkqb3V0cHV0X2ludGVyZmFjZSA9IElOVEVSRkFDRV9EVlAxOworCWVsc2UgaWYgKCFzdHJuY21wKG9wdF9zdHIsICJERlBfSElHSExPVyIsIDExKSkKKwkJKm91dHB1dF9pbnRlcmZhY2UgPSBJTlRFUkZBQ0VfREZQOworCWVsc2UgaWYgKCFzdHJuY21wKG9wdF9zdHIsICJERlBfSElHSCIsIDgpKQorCQkqb3V0cHV0X2ludGVyZmFjZSA9IElOVEVSRkFDRV9ERlBfSElHSDsKKwllbHNlIGlmICghc3RybmNtcChvcHRfc3RyLCAiREZQX0xPVyIsIDcpKQorCQkqb3V0cHV0X2ludGVyZmFjZSA9IElOVEVSRkFDRV9ERlBfTE9XOworCWVsc2UKKwkJKm91dHB1dF9pbnRlcmZhY2UgPSBJTlRFUkZBQ0VfTk9ORTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgcGFyc2VfbGNkX3BvcnQodm9pZCkKK3sKKwlwYXJzZV9wb3J0KHZpYWZiX2xjZF9wb3J0LCAmdmlhcGFyaW5mby0+Y2hpcF9pbmZvLT5sdmRzX2NoaXBfaW5mby4KKwkJb3V0cHV0X2ludGVyZmFjZSk7CisJLypJbml0aWFsaXplIHRvIGF2b2lkIHVuZXhwZWN0ZWQgYmVoYXZpb3IgKi8KKwl2aWFwYXJpbmZvLT5jaGlwX2luZm8tPmx2ZHNfY2hpcF9pbmZvMi5vdXRwdXRfaW50ZXJmYWNlID0KKwlJTlRFUkZBQ0VfTk9ORTsKKworCURFQlVHX01TRyhLRVJOX0lORk8gInBhcnNlX2xjZF9wb3J0OiB2aWFmYl9sY2RfcG9ydDolcyxpbnRlcmZhY2U6JWRcbiIsCisJCSAgdmlhZmJfbGNkX3BvcnQsIHZpYXBhcmluZm8tPmNoaXBfaW5mby0+bHZkc19jaGlwX2luZm8uCisJCSAgb3V0cHV0X2ludGVyZmFjZSk7Cit9CisKK3N0YXRpYyB2b2lkIHBhcnNlX2R2aV9wb3J0KHZvaWQpCit7CisJcGFyc2VfcG9ydCh2aWFmYl9kdmlfcG9ydCwgJnZpYXBhcmluZm8tPmNoaXBfaW5mby0+dG1kc19jaGlwX2luZm8uCisJCW91dHB1dF9pbnRlcmZhY2UpOworCisJREVCVUdfTVNHKEtFUk5fSU5GTyAicGFyc2VfZHZpX3BvcnQ6IHZpYWZiX2R2aV9wb3J0OiVzLGludGVyZmFjZTolZFxuIiwKKwkJICB2aWFmYl9kdmlfcG9ydCwgdmlhcGFyaW5mby0+Y2hpcF9pbmZvLT50bWRzX2NoaXBfaW5mby4KKwkJICBvdXRwdXRfaW50ZXJmYWNlKTsKK30KKworLyoKKyAqIFRoZSBwcm9jIGZpbGVzeXN0ZW0gcmVhZC93cml0ZSBmdW5jdGlvbiwgYSBzaW1wbGUgcHJvYyBpbXBsZW1lbnQgdG8KKyAqIGdldC9zZXQgdGhlIHZhbHVlIG9mIERQQSAgRFZQMCwgICBEVlAwRGF0YURyaXZpbmcsICBEVlAwQ2xvY2tEcml2aW5nLCBEVlAxLAorICogRFZQMURyaXZpbmcsIERGUEhpZ2gsIERGUExvdyBDUjk2LCAgIFNSMkFbNV0sIFNSMUJbMV0sIFNSMkFbNF0sIFNSMUVbMl0sCisgKiBDUjlCLCAgICBTUjY1LCAgICBDUjk3LCAgICBDUjk5CisgKi8KK3N0YXRpYyBpbnQgdmlhZmJfZHZwMF9wcm9jX3JlYWQoY2hhciAqYnVmLCBjaGFyICoqc3RhcnQsIG9mZl90IG9mZnNldCwKK2ludCBjb3VudCwgaW50ICplb2YsIHZvaWQgKmRhdGEpCit7CisJaW50IGxlbiA9IDA7CisJdTggZHZwMF9kYXRhX2RyaSA9IDAsIGR2cDBfY2xrX2RyaSA9IDAsIGR2cDAgPSAwOworCWR2cDBfZGF0YV9kcmkgPQorCSAgICAodmlhZmJfcmVhZF9yZWcoVklBU1IsIFNSMkEpICYgQklUNSkgPj4gNCB8CisJICAgICh2aWFmYl9yZWFkX3JlZyhWSUFTUiwgU1IxQikgJiBCSVQxKSA+PiAxOworCWR2cDBfY2xrX2RyaSA9CisJICAgICh2aWFmYl9yZWFkX3JlZyhWSUFTUiwgU1IyQSkgJiBCSVQ0KSA+PiAzIHwKKwkgICAgKHZpYWZiX3JlYWRfcmVnKFZJQVNSLCBTUjFFKSAmIEJJVDIpID4+IDI7CisJZHZwMCA9IHZpYWZiX3JlYWRfcmVnKFZJQUNSLCBDUjk2KSAmIDB4MGY7CisJbGVuICs9CisJICAgIHNwcmludGYoYnVmICsgbGVuLCAiJXggJXggJXhcbiIsIGR2cDAsIGR2cDBfZGF0YV9kcmksIGR2cDBfY2xrX2RyaSk7CisJKmVvZiA9IDE7CQkvKkluZm9ybSBrZXJuZWwgZW5kIG9mIGRhdGEgKi8KKwlyZXR1cm4gbGVuOworfQorc3RhdGljIGludCB2aWFmYl9kdnAwX3Byb2Nfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsCisJY29uc3QgY2hhciBfX3VzZXIgKmJ1ZmZlciwgdW5zaWduZWQgbG9uZyBjb3VudCwgdm9pZCAqZGF0YSkKK3sKKwljaGFyIGJ1ZlsyMF0sICp2YWx1ZSwgKnBidWY7CisJdTggcmVnX3ZhbCA9IDA7CisJdW5zaWduZWQgbG9uZyBsZW5ndGgsIGk7CisJaWYgKGNvdW50IDwgMSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJbGVuZ3RoID0gY291bnQgPiAyMCA/IDIwIDogY291bnQ7CisJaWYgKGNvcHlfZnJvbV91c2VyKCZidWZbMF0sIGJ1ZmZlciwgbGVuZ3RoKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisJYnVmW2xlbmd0aCAtIDFdID0gJ1wwJzsJLypFbnN1cmUgZW5kIHN0cmluZyAqLworCXBidWYgPSAmYnVmWzBdOworCWZvciAoaSA9IDA7IGkgPCAzOyBpKyspIHsKKwkJdmFsdWUgPSBzdHJzZXAoJnBidWYsICIgIik7CisJCWlmICh2YWx1ZSAhPSBOVUxMKSB7CisJCQlzdHJpY3Rfc3RydG91bCh2YWx1ZSwgMCwgKHVuc2lnbmVkIGxvbmcgKikmcmVnX3ZhbCk7CisJCQlERUJVR19NU0coS0VSTl9JTkZPICJEVlAwOnJlZ192YWxbJWxdPToleFxuIiwgaSwKKwkJCQkgIHJlZ192YWwpOworCQkJc3dpdGNoIChpKSB7CisJCQljYXNlIDA6CisJCQkJdmlhZmJfd3JpdGVfcmVnX21hc2soQ1I5NiwgVklBQ1IsCisJCQkJCXJlZ192YWwsIDB4MGYpOworCQkJCWJyZWFrOworCQkJY2FzZSAxOgorCQkJCXZpYWZiX3dyaXRlX3JlZ19tYXNrKFNSMkEsIFZJQVNSLAorCQkJCQlyZWdfdmFsIDw8IDQsIEJJVDUpOworCQkJCXZpYWZiX3dyaXRlX3JlZ19tYXNrKFNSMUIsIFZJQVNSLAorCQkJCQlyZWdfdmFsIDw8IDEsIEJJVDEpOworCQkJCWJyZWFrOworCQkJY2FzZSAyOgorCQkJCXZpYWZiX3dyaXRlX3JlZ19tYXNrKFNSMkEsIFZJQVNSLAorCQkJCQlyZWdfdmFsIDw8IDMsIEJJVDQpOworCQkJCXZpYWZiX3dyaXRlX3JlZ19tYXNrKFNSMUUsIFZJQVNSLAorCQkJCQlyZWdfdmFsIDw8IDIsIEJJVDIpOworCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQlicmVhazsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCWJyZWFrOworCQl9CisJfQorCXJldHVybiBjb3VudDsKK30KK3N0YXRpYyBpbnQgdmlhZmJfZHZwMV9wcm9jX3JlYWQoY2hhciAqYnVmLCBjaGFyICoqc3RhcnQsIG9mZl90IG9mZnNldCwKKwlpbnQgY291bnQsIGludCAqZW9mLCB2b2lkICpkYXRhKQoreworCWludCBsZW4gPSAwOworCXU4IGR2cDEgPSAwLCBkdnAxX2RhdGFfZHJpID0gMCwgZHZwMV9jbGtfZHJpID0gMDsKKwlkdnAxID0gdmlhZmJfcmVhZF9yZWcoVklBQ1IsIENSOUIpICYgMHgwZjsKKwlkdnAxX2RhdGFfZHJpID0gKHZpYWZiX3JlYWRfcmVnKFZJQVNSLCBTUjY1KSAmIDB4MGMpID4+IDI7CisJZHZwMV9jbGtfZHJpID0gdmlhZmJfcmVhZF9yZWcoVklBU1IsIFNSNjUpICYgMHgwMzsKKwlsZW4gKz0KKwkgICAgc3ByaW50ZihidWYgKyBsZW4sICIleCAleCAleFxuIiwgZHZwMSwgZHZwMV9kYXRhX2RyaSwgZHZwMV9jbGtfZHJpKTsKKwkqZW9mID0gMTsJCS8qSW5mb3JtIGtlcm5lbCBlbmQgb2YgZGF0YSAqLworCXJldHVybiBsZW47Cit9CitzdGF0aWMgaW50IHZpYWZiX2R2cDFfcHJvY193cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwKKwljb25zdCBjaGFyIF9fdXNlciAqYnVmZmVyLCB1bnNpZ25lZCBsb25nIGNvdW50LCB2b2lkICpkYXRhKQoreworCWNoYXIgYnVmWzIwXSwgKnZhbHVlLCAqcGJ1ZjsKKwl1OCByZWdfdmFsID0gMDsKKwl1bnNpZ25lZCBsb25nIGxlbmd0aCwgaTsKKwlpZiAoY291bnQgPCAxKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlsZW5ndGggPSBjb3VudCA+IDIwID8gMjAgOiBjb3VudDsKKwlpZiAoY29weV9mcm9tX3VzZXIoJmJ1ZlswXSwgYnVmZmVyLCBsZW5ndGgpKQorCQlyZXR1cm4gLUVGQVVMVDsKKwlidWZbbGVuZ3RoIC0gMV0gPSAnXDAnOwkvKkVuc3VyZSBlbmQgc3RyaW5nICovCisJcGJ1ZiA9ICZidWZbMF07CisJZm9yIChpID0gMDsgaSA8IDM7IGkrKykgeworCQl2YWx1ZSA9IHN0cnNlcCgmcGJ1ZiwgIiAiKTsKKwkJaWYgKHZhbHVlICE9IE5VTEwpIHsKKwkJCXN0cmljdF9zdHJ0b3VsKHZhbHVlLCAwLCAodW5zaWduZWQgbG9uZyAqKSZyZWdfdmFsKTsKKwkJCXN3aXRjaCAoaSkgeworCQkJY2FzZSAwOgorCQkJCXZpYWZiX3dyaXRlX3JlZ19tYXNrKENSOUIsIFZJQUNSLAorCQkJCQlyZWdfdmFsLCAweDBmKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgMToKKwkJCQl2aWFmYl93cml0ZV9yZWdfbWFzayhTUjY1LCBWSUFTUiwKKwkJCQkJcmVnX3ZhbCA8PCAyLCAweDBjKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgMjoKKwkJCQl2aWFmYl93cml0ZV9yZWdfbWFzayhTUjY1LCBWSUFTUiwKKwkJCQkJcmVnX3ZhbCwgMHgwMyk7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCWJyZWFrOworCQkJfQorCQl9IGVsc2UgeworCQkJYnJlYWs7CisJCX0KKwl9CisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgaW50IHZpYWZiX2RmcGhfcHJvY19yZWFkKGNoYXIgKmJ1ZiwgY2hhciAqKnN0YXJ0LCBvZmZfdCBvZmZzZXQsCisJaW50IGNvdW50LCBpbnQgKmVvZiwgdm9pZCAqZGF0YSkKK3sKKwlpbnQgbGVuID0gMDsKKwl1OCBkZnBfaGlnaCA9IDA7CisJZGZwX2hpZ2ggPSB2aWFmYl9yZWFkX3JlZyhWSUFDUiwgQ1I5NykgJiAweDBmOworCWxlbiArPSBzcHJpbnRmKGJ1ZiArIGxlbiwgIiV4XG4iLCBkZnBfaGlnaCk7CisJKmVvZiA9IDE7CQkvKkluZm9ybSBrZXJuZWwgZW5kIG9mIGRhdGEgKi8KKwlyZXR1cm4gbGVuOworfQorc3RhdGljIGludCB2aWFmYl9kZnBoX3Byb2Nfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsCisJY29uc3QgY2hhciBfX3VzZXIgKmJ1ZmZlciwgdW5zaWduZWQgbG9uZyBjb3VudCwgdm9pZCAqZGF0YSkKK3sKKwljaGFyIGJ1ZlsyMF07CisJdTggcmVnX3ZhbCA9IDA7CisJdW5zaWduZWQgbG9uZyBsZW5ndGg7CisJaWYgKGNvdW50IDwgMSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJbGVuZ3RoID0gY291bnQgPiAyMCA/IDIwIDogY291bnQ7CisJaWYgKGNvcHlfZnJvbV91c2VyKCZidWZbMF0sIGJ1ZmZlciwgbGVuZ3RoKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisJYnVmW2xlbmd0aCAtIDFdID0gJ1wwJzsJLypFbnN1cmUgZW5kIHN0cmluZyAqLworCXN0cmljdF9zdHJ0b3VsKCZidWZbMF0sIDAsICh1bnNpZ25lZCBsb25nICopJnJlZ192YWwpOworCXZpYWZiX3dyaXRlX3JlZ19tYXNrKENSOTcsIFZJQUNSLCByZWdfdmFsLCAweDBmKTsKKwlyZXR1cm4gY291bnQ7Cit9CitzdGF0aWMgaW50IHZpYWZiX2RmcGxfcHJvY19yZWFkKGNoYXIgKmJ1ZiwgY2hhciAqKnN0YXJ0LCBvZmZfdCBvZmZzZXQsCisJaW50IGNvdW50LCBpbnQgKmVvZiwgdm9pZCAqZGF0YSkKK3sKKwlpbnQgbGVuID0gMDsKKwl1OCBkZnBfbG93ID0gMDsKKwlkZnBfbG93ID0gdmlhZmJfcmVhZF9yZWcoVklBQ1IsIENSOTkpICYgMHgwZjsKKwlsZW4gKz0gc3ByaW50ZihidWYgKyBsZW4sICIleFxuIiwgZGZwX2xvdyk7CisJKmVvZiA9IDE7CQkvKkluZm9ybSBrZXJuZWwgZW5kIG9mIGRhdGEgKi8KKwlyZXR1cm4gbGVuOworfQorc3RhdGljIGludCB2aWFmYl9kZnBsX3Byb2Nfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsCisJY29uc3QgY2hhciBfX3VzZXIgKmJ1ZmZlciwgdW5zaWduZWQgbG9uZyBjb3VudCwgdm9pZCAqZGF0YSkKK3sKKwljaGFyIGJ1ZlsyMF07CisJdTggcmVnX3ZhbCA9IDA7CisJdW5zaWduZWQgbG9uZyBsZW5ndGg7CisJaWYgKGNvdW50IDwgMSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJbGVuZ3RoID0gY291bnQgPiAyMCA/IDIwIDogY291bnQ7CisJaWYgKGNvcHlfZnJvbV91c2VyKCZidWZbMF0sIGJ1ZmZlciwgbGVuZ3RoKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisJYnVmW2xlbmd0aCAtIDFdID0gJ1wwJzsJLypFbnN1cmUgZW5kIHN0cmluZyAqLworCXN0cmljdF9zdHJ0b3VsKCZidWZbMF0sIDAsICh1bnNpZ25lZCBsb25nICopJnJlZ192YWwpOworCXZpYWZiX3dyaXRlX3JlZ19tYXNrKENSOTksIFZJQUNSLCByZWdfdmFsLCAweDBmKTsKKwlyZXR1cm4gY291bnQ7Cit9CitzdGF0aWMgaW50IHZpYWZiX3Z0MTYzNl9wcm9jX3JlYWQoY2hhciAqYnVmLCBjaGFyICoqc3RhcnQsCisJb2ZmX3Qgb2Zmc2V0LCBpbnQgY291bnQsIGludCAqZW9mLCB2b2lkICpkYXRhKQoreworCWludCBsZW4gPSAwOworCXU4IHZ0MTYzNl8wOCA9IDAsIHZ0MTYzNl8wOSA9IDA7CisJc3dpdGNoICh2aWFwYXJpbmZvLT5jaGlwX2luZm8tPmx2ZHNfY2hpcF9pbmZvLmx2ZHNfY2hpcF9uYW1lKSB7CisJY2FzZSBWVDE2MzZfTFZEUzoKKwkJdnQxNjM2XzA4ID0KKwkJICAgIHZpYWZiX2dwaW9faTJjX3JlYWRfbHZkcyh2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mbywKKwkJICAgICZ2aWFwYXJpbmZvLT5jaGlwX2luZm8tPmx2ZHNfY2hpcF9pbmZvLCAweDA4KSAmIDB4MGY7CisJCXZ0MTYzNl8wOSA9CisJCSAgICB2aWFmYl9ncGlvX2kyY19yZWFkX2x2ZHModmlhcGFyaW5mby0+bHZkc19zZXR0aW5nX2luZm8sCisJCSAgICAmdmlhcGFyaW5mby0+Y2hpcF9pbmZvLT5sdmRzX2NoaXBfaW5mbywgMHgwOSkgJiAweDFmOworCQlsZW4gKz0gc3ByaW50ZihidWYgKyBsZW4sICIleCAleFxuIiwgdnQxNjM2XzA4LCB2dDE2MzZfMDkpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisJc3dpdGNoICh2aWFwYXJpbmZvLT5jaGlwX2luZm8tPmx2ZHNfY2hpcF9pbmZvMi5sdmRzX2NoaXBfbmFtZSkgeworCWNhc2UgVlQxNjM2X0xWRFM6CisJCXZ0MTYzNl8wOCA9CisJCSAgICB2aWFmYl9ncGlvX2kyY19yZWFkX2x2ZHModmlhcGFyaW5mby0+bHZkc19zZXR0aW5nX2luZm8yLAorCQkJJnZpYXBhcmluZm8tPmNoaXBfaW5mby0+bHZkc19jaGlwX2luZm8yLCAweDA4KSAmIDB4MGY7CisJCXZ0MTYzNl8wOSA9CisJCSAgICB2aWFmYl9ncGlvX2kyY19yZWFkX2x2ZHModmlhcGFyaW5mby0+bHZkc19zZXR0aW5nX2luZm8yLAorCQkJJnZpYXBhcmluZm8tPmNoaXBfaW5mby0+bHZkc19jaGlwX2luZm8yLCAweDA5KSAmIDB4MWY7CisJCWxlbiArPSBzcHJpbnRmKGJ1ZiArIGxlbiwgIiAleCAleFxuIiwgdnQxNjM2XzA4LCB2dDE2MzZfMDkpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisJKmVvZiA9IDE7CQkvKkluZm9ybSBrZXJuZWwgZW5kIG9mIGRhdGEgKi8KKwlyZXR1cm4gbGVuOworfQorc3RhdGljIGludCB2aWFmYl92dDE2MzZfcHJvY193cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwKKwljb25zdCBjaGFyIF9fdXNlciAqYnVmZmVyLCB1bnNpZ25lZCBsb25nIGNvdW50LCB2b2lkICpkYXRhKQoreworCWNoYXIgYnVmWzMwXSwgKnZhbHVlLCAqcGJ1ZjsKKwlzdHJ1Y3QgSU9EQVRBIHJlZ192YWw7CisJdW5zaWduZWQgbG9uZyBsZW5ndGgsIGk7CisJaWYgKGNvdW50IDwgMSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJbGVuZ3RoID0gY291bnQgPiAzMCA/IDMwIDogY291bnQ7CisJaWYgKGNvcHlfZnJvbV91c2VyKCZidWZbMF0sIGJ1ZmZlciwgbGVuZ3RoKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisJYnVmW2xlbmd0aCAtIDFdID0gJ1wwJzsJLypFbnN1cmUgZW5kIHN0cmluZyAqLworCXBidWYgPSAmYnVmWzBdOworCXN3aXRjaCAodmlhcGFyaW5mby0+Y2hpcF9pbmZvLT5sdmRzX2NoaXBfaW5mby5sdmRzX2NoaXBfbmFtZSkgeworCWNhc2UgVlQxNjM2X0xWRFM6CisJCWZvciAoaSA9IDA7IGkgPCAyOyBpKyspIHsKKwkJCXZhbHVlID0gc3Ryc2VwKCZwYnVmLCAiICIpOworCQkJaWYgKHZhbHVlICE9IE5VTEwpIHsKKwkJCQlzdHJpY3Rfc3RydG91bCh2YWx1ZSwgMCwKKwkJCQkJKHVuc2lnbmVkIGxvbmcgKikmcmVnX3ZhbC5EYXRhKTsKKwkJCQlzd2l0Y2ggKGkpIHsKKwkJCQljYXNlIDA6CisJCQkJCXJlZ192YWwuSW5kZXggPSAweDA4OworCQkJCQlyZWdfdmFsLk1hc2sgPSAweDBmOworCQkJCQl2aWFmYl9ncGlvX2kyY193cml0ZV9tYXNrX2x2ZHMKKwkJCQkJICAgICh2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mbywKKwkJCQkJICAgICZ2aWFwYXJpbmZvLT4KKwkJCQkJICAgIGNoaXBfaW5mby0+bHZkc19jaGlwX2luZm8sCisJCQkJCSAgICAgcmVnX3ZhbCk7CisJCQkJCWJyZWFrOworCQkJCWNhc2UgMToKKwkJCQkJcmVnX3ZhbC5JbmRleCA9IDB4MDk7CisJCQkJCXJlZ192YWwuTWFzayA9IDB4MWY7CisJCQkJCXZpYWZiX2dwaW9faTJjX3dyaXRlX21hc2tfbHZkcworCQkJCQkgICAgKHZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvLAorCQkJCQkgICAgJnZpYXBhcmluZm8tPgorCQkJCQkgICAgY2hpcF9pbmZvLT5sdmRzX2NoaXBfaW5mbywKKwkJCQkJICAgICByZWdfdmFsKTsKKwkJCQkJYnJlYWs7CisJCQkJZGVmYXVsdDoKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfSBlbHNlIHsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisJc3dpdGNoICh2aWFwYXJpbmZvLT5jaGlwX2luZm8tPmx2ZHNfY2hpcF9pbmZvMi5sdmRzX2NoaXBfbmFtZSkgeworCWNhc2UgVlQxNjM2X0xWRFM6CisJCWZvciAoaSA9IDA7IGkgPCAyOyBpKyspIHsKKwkJCXZhbHVlID0gc3Ryc2VwKCZwYnVmLCAiICIpOworCQkJaWYgKHZhbHVlICE9IE5VTEwpIHsKKwkJCQlzdHJpY3Rfc3RydG91bCh2YWx1ZSwgMCwKKwkJCQkJKHVuc2lnbmVkIGxvbmcgKikmcmVnX3ZhbC5EYXRhKTsKKwkJCQlzd2l0Y2ggKGkpIHsKKwkJCQljYXNlIDA6CisJCQkJCXJlZ192YWwuSW5kZXggPSAweDA4OworCQkJCQlyZWdfdmFsLk1hc2sgPSAweDBmOworCQkJCQl2aWFmYl9ncGlvX2kyY193cml0ZV9tYXNrX2x2ZHMKKwkJCQkJICAgICh2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mbzIsCisJCQkJCSAgICAmdmlhcGFyaW5mby0+CisJCQkJCSAgICBjaGlwX2luZm8tPmx2ZHNfY2hpcF9pbmZvMiwKKwkJCQkJICAgICByZWdfdmFsKTsKKwkJCQkJYnJlYWs7CisJCQkJY2FzZSAxOgorCQkJCQlyZWdfdmFsLkluZGV4ID0gMHgwOTsKKwkJCQkJcmVnX3ZhbC5NYXNrID0gMHgxZjsKKwkJCQkJdmlhZmJfZ3Bpb19pMmNfd3JpdGVfbWFza19sdmRzCisJCQkJCSAgICAodmlhcGFyaW5mby0+bHZkc19zZXR0aW5nX2luZm8yLAorCQkJCQkgICAgJnZpYXBhcmluZm8tPgorCQkJCQkgICAgY2hpcF9pbmZvLT5sdmRzX2NoaXBfaW5mbzIsCisJCQkJCSAgICAgcmVnX3ZhbCk7CisJCQkJCWJyZWFrOworCQkJCWRlZmF1bHQ6CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0gZWxzZSB7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCXJldHVybiBjb3VudDsKK30KKworc3RhdGljIHZvaWQgdmlhZmJfaW5pdF9wcm9jKHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqdmlhZmJfZW50cnkpCit7CisJc3RydWN0IHByb2NfZGlyX2VudHJ5ICplbnRyeTsKKwl2aWFmYl9lbnRyeSA9IHByb2NfbWtkaXIoInZpYWZiIiwgTlVMTCk7CisJaWYgKHZpYWZiX2VudHJ5KSB7CisJCWVudHJ5ID0gY3JlYXRlX3Byb2NfZW50cnkoImR2cDAiLCAwLCB2aWFmYl9lbnRyeSk7CisJCWlmIChlbnRyeSkgeworCQkJZW50cnktPm93bmVyID0gVEhJU19NT0RVTEU7CisJCQllbnRyeS0+cmVhZF9wcm9jID0gdmlhZmJfZHZwMF9wcm9jX3JlYWQ7CisJCQllbnRyeS0+d3JpdGVfcHJvYyA9IHZpYWZiX2R2cDBfcHJvY193cml0ZTsKKwkJfQorCQllbnRyeSA9IGNyZWF0ZV9wcm9jX2VudHJ5KCJkdnAxIiwgMCwgdmlhZmJfZW50cnkpOworCQlpZiAoZW50cnkpIHsKKwkJCWVudHJ5LT5vd25lciA9IFRISVNfTU9EVUxFOworCQkJZW50cnktPnJlYWRfcHJvYyA9IHZpYWZiX2R2cDFfcHJvY19yZWFkOworCQkJZW50cnktPndyaXRlX3Byb2MgPSB2aWFmYl9kdnAxX3Byb2Nfd3JpdGU7CisJCX0KKwkJZW50cnkgPSBjcmVhdGVfcHJvY19lbnRyeSgiZGZwaCIsIDAsIHZpYWZiX2VudHJ5KTsKKwkJaWYgKGVudHJ5KSB7CisJCQllbnRyeS0+b3duZXIgPSBUSElTX01PRFVMRTsKKwkJCWVudHJ5LT5yZWFkX3Byb2MgPSB2aWFmYl9kZnBoX3Byb2NfcmVhZDsKKwkJCWVudHJ5LT53cml0ZV9wcm9jID0gdmlhZmJfZGZwaF9wcm9jX3dyaXRlOworCQl9CisJCWVudHJ5ID0gY3JlYXRlX3Byb2NfZW50cnkoImRmcGwiLCAwLCB2aWFmYl9lbnRyeSk7CisJCWlmIChlbnRyeSkgeworCQkJZW50cnktPm93bmVyID0gVEhJU19NT0RVTEU7CisJCQllbnRyeS0+cmVhZF9wcm9jID0gdmlhZmJfZGZwbF9wcm9jX3JlYWQ7CisJCQllbnRyeS0+d3JpdGVfcHJvYyA9IHZpYWZiX2RmcGxfcHJvY193cml0ZTsKKwkJfQorCQlpZiAoVlQxNjM2X0xWRFMgPT0gdmlhcGFyaW5mby0+Y2hpcF9pbmZvLT5sdmRzX2NoaXBfaW5mby4KKwkJCWx2ZHNfY2hpcF9uYW1lIHx8IFZUMTYzNl9MVkRTID09CisJCSAgICB2aWFwYXJpbmZvLT5jaGlwX2luZm8tPmx2ZHNfY2hpcF9pbmZvMi5sdmRzX2NoaXBfbmFtZSkgeworCQkJZW50cnkgPSBjcmVhdGVfcHJvY19lbnRyeSgidnQxNjM2IiwgMCwgdmlhZmJfZW50cnkpOworCQkJaWYgKGVudHJ5KSB7CisJCQkJZW50cnktPm93bmVyID0gVEhJU19NT0RVTEU7CisJCQkJZW50cnktPnJlYWRfcHJvYyA9IHZpYWZiX3Z0MTYzNl9wcm9jX3JlYWQ7CisJCQkJZW50cnktPndyaXRlX3Byb2MgPSB2aWFmYl92dDE2MzZfcHJvY193cml0ZTsKKwkJCX0KKwkJfQorCisJfQorfQorc3RhdGljIHZvaWQgdmlhZmJfcmVtb3ZlX3Byb2Moc3RydWN0IHByb2NfZGlyX2VudHJ5ICp2aWFmYl9lbnRyeSkKK3sKKwkvKiBubyBwcm9ibGVtIGlmIGl0IHdhcyBub3QgcmVnaXN0ZXJlZCAqLworCXJlbW92ZV9wcm9jX2VudHJ5KCJkdnAwIiwgdmlhZmJfZW50cnkpOy8qIHBhcmVudCBkaXIgKi8KKwlyZW1vdmVfcHJvY19lbnRyeSgiZHZwMSIsIHZpYWZiX2VudHJ5KTsKKwlyZW1vdmVfcHJvY19lbnRyeSgiZGZwaCIsIHZpYWZiX2VudHJ5KTsKKwlyZW1vdmVfcHJvY19lbnRyeSgiZGZwbCIsIHZpYWZiX2VudHJ5KTsKKwlyZW1vdmVfcHJvY19lbnRyeSgidnQxNjM2IiwgdmlhZmJfZW50cnkpOworCXJlbW92ZV9wcm9jX2VudHJ5KCJ2dDE2MjUiLCB2aWFmYl9lbnRyeSk7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IHZpYV9wY2lfcHJvYmUodm9pZCkKK3sKKwl1bnNpZ25lZCBpbnQgZGVmYXVsdF94cmVzLCBkZWZhdWx0X3lyZXM7CisJY2hhciAqdG1wYywgKnRtcG07CisJY2hhciAqdG1wY19zZWMsICp0bXBtX3NlYzsKKwlpbnQgdm1vZGVfaW5kZXg7CisJdTMyIHRtZHNfbGVuZ3RoLCBsdmRzX2xlbmd0aCwgY3J0X2xlbmd0aCwgY2hpcF9sZW5ndGgsIHZpYWZiX3Bhcl9sZW5ndGg7CisKKwlERUJVR19NU0coS0VSTl9JTkZPICJWSUFGQiBQQ0kgUHJvYmUhIVxuIik7CisKKwl2aWFmYl9wYXJfbGVuZ3RoID0gQUxJR04oc2l6ZW9mKHN0cnVjdCB2aWFmYl9wYXIpLCBCSVRTX1BFUl9MT05HLzgpOworCXRtZHNfbGVuZ3RoID0gQUxJR04oc2l6ZW9mKHN0cnVjdCB0bWRzX3NldHRpbmdfaW5mb3JtYXRpb24pLAorCQlCSVRTX1BFUl9MT05HLzgpOworCWx2ZHNfbGVuZ3RoID0gQUxJR04oc2l6ZW9mKHN0cnVjdCBsdmRzX3NldHRpbmdfaW5mb3JtYXRpb24pLAorCQlCSVRTX1BFUl9MT05HLzgpOworCWNydF9sZW5ndGggPSBBTElHTihzaXplb2Yoc3RydWN0IGx2ZHNfc2V0dGluZ19pbmZvcm1hdGlvbiksCisJCUJJVFNfUEVSX0xPTkcvOCk7CisJY2hpcF9sZW5ndGggPSBBTElHTihzaXplb2Yoc3RydWN0IGNoaXBfaW5mb3JtYXRpb24pLCBCSVRTX1BFUl9MT05HLzgpOworCisJLyogQWxsb2NhdGUgZmJfaW5mbyBhbmQgKioqX3BhciBoZXJlLCBhbHNvIGluY2x1ZGluZyBzb21lIG90aGVyIG5lZWRlZAorCSAqIHZhcmlhYmxlcworCSovCisJdmlhZmJpbmZvID0gZnJhbWVidWZmZXJfYWxsb2ModmlhZmJfcGFyX2xlbmd0aCArIDIgKiBsdmRzX2xlbmd0aCArCisJdG1kc19sZW5ndGggKyBjcnRfbGVuZ3RoICsgY2hpcF9sZW5ndGgsIE5VTEwpOworCWlmICghdmlhZmJpbmZvKSB7CisJCXByaW50ayhLRVJOX0VSUiJDb3VsZCBub3QgYWxsb2NhdGUgbWVtb3J5IGZvciB2aWFmYl9pbmZvLlxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCXZpYXBhcmluZm8gPSAoc3RydWN0IHZpYWZiX3BhciAqKXZpYWZiaW5mby0+cGFyOworCXZpYXBhcmluZm8tPnRtZHNfc2V0dGluZ19pbmZvID0gKHN0cnVjdCB0bWRzX3NldHRpbmdfaW5mb3JtYXRpb24gKikKKwkJKCh1bnNpZ25lZCBsb25nKXZpYXBhcmluZm8gKyB2aWFmYl9wYXJfbGVuZ3RoKTsKKwl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mbyA9IChzdHJ1Y3QgbHZkc19zZXR0aW5nX2luZm9ybWF0aW9uICopCisJCSgodW5zaWduZWQgbG9uZyl2aWFwYXJpbmZvLT50bWRzX3NldHRpbmdfaW5mbyArIHRtZHNfbGVuZ3RoKTsKKwl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mbzIgPSAoc3RydWN0IGx2ZHNfc2V0dGluZ19pbmZvcm1hdGlvbiAqKQorCQkoKHVuc2lnbmVkIGxvbmcpdmlhcGFyaW5mby0+bHZkc19zZXR0aW5nX2luZm8gKyBsdmRzX2xlbmd0aCk7CisJdmlhcGFyaW5mby0+Y3J0X3NldHRpbmdfaW5mbyA9IChzdHJ1Y3QgY3J0X3NldHRpbmdfaW5mb3JtYXRpb24gKikKKwkJKCh1bnNpZ25lZCBsb25nKXZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvMiArIGx2ZHNfbGVuZ3RoKTsKKwl2aWFwYXJpbmZvLT5jaGlwX2luZm8gPSAoc3RydWN0IGNoaXBfaW5mb3JtYXRpb24gKikKKwkJKCh1bnNpZ25lZCBsb25nKXZpYXBhcmluZm8tPmNydF9zZXR0aW5nX2luZm8gKyBjcnRfbGVuZ3RoKTsKKworCWlmICh2aWFmYl9kdWFsX2ZiKQorCQl2aWFmYl9TQU1NX09OID0gMTsKKwlwYXJzZV9hY3RpdmVfZGV2KCk7CisJcGFyc2VfdmlkZW9fZGV2KCk7CisJcGFyc2VfbGNkX3BvcnQoKTsKKwlwYXJzZV9kdmlfcG9ydCgpOworCisJLyogZm9yIGR1YWwtZmIgbXVzdCB2aWFmYl9TQU1NX09OPTEgYW5kIHZpYWZiX2R1YWxfZmI9MSAqLworCWlmICghdmlhZmJfU0FNTV9PTikKKwkJdmlhZmJfZHVhbF9mYiA9IDA7CisKKwkvKiBTZXQgdXAgSTJDIGJ1cyBzdHVmZiAqLworCXZpYWZiX2NyZWF0ZV9pMmNfYnVzKHZpYXBhcmluZm8pOworCisJdmlhZmJfaW5pdF9jaGlwX2luZm8oKTsKKwl2aWFmYl9nZXRfZmJfaW5mbygmdmlhcGFyaW5mby0+ZmJtZW0sICZ2aWFwYXJpbmZvLT5tZW1zaXplKTsKKwl2aWFwYXJpbmZvLT5mYm1lbV9mcmVlID0gdmlhcGFyaW5mby0+bWVtc2l6ZTsKKwl2aWFwYXJpbmZvLT5mYm1lbV91c2VkID0gMDsKKwl2aWFwYXJpbmZvLT5mYm1lbV92aXJ0ID0gaW9yZW1hcF9ub2NhY2hlKHZpYXBhcmluZm8tPmZibWVtLAorCQl2aWFwYXJpbmZvLT5tZW1zaXplKTsKKwl2aWFmYmluZm8tPnNjcmVlbl9iYXNlID0gKGNoYXIgKil2aWFwYXJpbmZvLT5mYm1lbV92aXJ0OworCisJaWYgKCF2aWFwYXJpbmZvLT5mYm1lbV92aXJ0KSB7CisJCXByaW50ayhLRVJOX0lORk8gImlvcmVtYXAgZmFpbGVkXG4iKTsKKwkJcmV0dXJuIC0xOworCX0KKworCXZpYWZiX2dldF9tbWlvX2luZm8oJnZpYXBhcmluZm8tPm1taW9fYmFzZSwgJnZpYXBhcmluZm8tPm1taW9fbGVuKTsKKwl2aWFwYXJpbmZvLT5pb192aXJ0ID0gaW9yZW1hcF9ub2NhY2hlKHZpYXBhcmluZm8tPm1taW9fYmFzZSwKKwkJdmlhcGFyaW5mby0+bW1pb19sZW4pOworCisJdmlhZmJpbmZvLT5ub2RlID0gMDsKKwl2aWFmYmluZm8tPmZib3BzID0gJnZpYWZiX29wczsKKwl2aWFmYmluZm8tPmZsYWdzID0gRkJJTkZPX0RFRkFVTFQgfCBGQklORk9fSFdBQ0NFTF9ZUEFOOworCisJdmlhZmJpbmZvLT5wc2V1ZG9fcGFsZXR0ZSA9IHBzZXVkb19wYWw7CisJaWYgKHZpYWZiX2FjY2VsKSB7CisJCXZpYWZiX2luaXRfYWNjZWwoKTsKKwkJdmlhZmJfaW5pdF8yZF9lbmdpbmUoKTsKKwkJdmlhZmJfaHdfY3Vyc29yX2luaXQoKTsKKwl9CisKKwlpZiAodmlhZmJfc2Vjb25kX3NpemUgJiYgKHZpYWZiX3NlY29uZF9zaXplIDwgOCkpIHsKKwkJdmlhZmJfc2Vjb25kX29mZnNldCA9IHZpYXBhcmluZm8tPmZibWVtX2ZyZWUgLQorCQkJdmlhZmJfc2Vjb25kX3NpemUgKiAxMDI0ICogMTAyNDsKKwl9IGVsc2UgeworCQl2aWFmYl9zZWNvbmRfc2l6ZSA9IDg7CisJCXZpYWZiX3NlY29uZF9vZmZzZXQgPSB2aWFwYXJpbmZvLT5mYm1lbV9mcmVlIC0KKwkJCXZpYWZiX3NlY29uZF9zaXplICogMTAyNCAqIDEwMjQ7CisJfQorCisJdmlhZmJfRkJfTU0gPSB2aWFwYXJpbmZvLT5mYm1lbV92aXJ0OworCXRtcG0gPSB2aWFmYl9tb2RlOworCXRtcGMgPSBzdHJzZXAoJnRtcG0sICJ4Iik7CisJc3RyaWN0X3N0cnRvdWwodG1wYywgMCwgKHVuc2lnbmVkIGxvbmcgKikmZGVmYXVsdF94cmVzKTsKKwlzdHJpY3Rfc3RydG91bCh0bXBtLCAwLCAodW5zaWduZWQgbG9uZyAqKSZkZWZhdWx0X3lyZXMpOworCisJdm1vZGVfaW5kZXggPSB2aWFmYl9nZXRfbW9kZV9pbmRleChkZWZhdWx0X3hyZXMsIGRlZmF1bHRfeXJlcywgMCk7CisJREVCVUdfTVNHKEtFUk5fSU5GTyAiMC0+aW5kZXg9JWRcbiIsIHZtb2RlX2luZGV4KTsKKworCWlmICh2aWFmYl9TQU1NX09OID09IDEpIHsKKwkJaWYgKHN0cmNtcCh2aWFmYl9tb2RlLCB2aWFmYl9tb2RlMSkpIHsKKwkJCXRtcG1fc2VjID0gdmlhZmJfbW9kZTE7CisJCQl0bXBjX3NlYyA9IHN0cnNlcCgmdG1wbV9zZWMsICJ4Iik7CisJCQlzdHJpY3Rfc3RydG91bCh0bXBjX3NlYywgMCwKKwkJCQkodW5zaWduZWQgbG9uZyAqKSZ2aWFmYl9zZWNvbmRfeHJlcyk7CisJCQlzdHJpY3Rfc3RydG91bCh0bXBtX3NlYywgMCwKKwkJCQkodW5zaWduZWQgbG9uZyAqKSZ2aWFmYl9zZWNvbmRfeXJlcyk7CisJCX0gZWxzZSB7CisJCQl2aWFmYl9zZWNvbmRfeHJlcyA9IGRlZmF1bHRfeHJlczsKKwkJCXZpYWZiX3NlY29uZF95cmVzID0gZGVmYXVsdF95cmVzOworCQl9CisJCWlmICgwID09IHZpYWZiX3NlY29uZF92aXJ0dWFsX3hyZXMpIHsKKwkJCXN3aXRjaCAodmlhZmJfc2Vjb25kX3hyZXMpIHsKKwkJCWNhc2UgMTQwMDoKKwkJCQl2aWFmYl9zZWNvbmRfdmlydHVhbF94cmVzID0gMTQwODsKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJdmlhZmJfc2Vjb25kX3ZpcnR1YWxfeHJlcyA9IHZpYWZiX3NlY29uZF94cmVzOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJCWlmICgwID09IHZpYWZiX3NlY29uZF92aXJ0dWFsX3lyZXMpCisJCQl2aWFmYl9zZWNvbmRfdmlydHVhbF95cmVzID0gdmlhZmJfc2Vjb25kX3lyZXM7CisJfQorCisJc3dpdGNoICh2aWFmYl9icHApIHsKKwljYXNlIDAgLi4uIDg6CisJCXZpYWZiX2JwcCA9IDg7CisJCWJyZWFrOworCWNhc2UgOSAuLi4gMTY6CisJCXZpYWZiX2JwcCA9IDE2OworCQlicmVhazsKKwljYXNlIDE3IC4uLiAzMjoKKwkJdmlhZmJfYnBwID0gMzI7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXZpYWZiX2JwcCA9IDg7CisJfQorCWRlZmF1bHRfdmFyLnhyZXMgPSBkZWZhdWx0X3hyZXM7CisJZGVmYXVsdF92YXIueXJlcyA9IGRlZmF1bHRfeXJlczsKKwlzd2l0Y2ggKGRlZmF1bHRfeHJlcykgeworCWNhc2UgMTQwMDoKKwkJZGVmYXVsdF92YXIueHJlc192aXJ0dWFsID0gMTQwODsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZGVmYXVsdF92YXIueHJlc192aXJ0dWFsID0gZGVmYXVsdF94cmVzOworCQlicmVhazsKKwl9CisJZGVmYXVsdF92YXIueXJlc192aXJ0dWFsID0gZGVmYXVsdF95cmVzOworCWRlZmF1bHRfdmFyLmJpdHNfcGVyX3BpeGVsID0gdmlhZmJfYnBwOworCWlmIChkZWZhdWx0X3Zhci5iaXRzX3Blcl9waXhlbCA9PSAxNSkKKwkJZGVmYXVsdF92YXIuYml0c19wZXJfcGl4ZWwgPSAxNjsKKwlkZWZhdWx0X3Zhci5waXhjbG9jayA9CisJICAgIHZpYWZiX2dldF9waXhjbG9jayhkZWZhdWx0X3hyZXMsIGRlZmF1bHRfeXJlcywgdmlhZmJfcmVmcmVzaCk7CisJZGVmYXVsdF92YXIubGVmdF9tYXJnaW4gPSAoZGVmYXVsdF94cmVzID4+IDMpICYgMHhmODsKKwlkZWZhdWx0X3Zhci5yaWdodF9tYXJnaW4gPSAzMjsKKwlkZWZhdWx0X3Zhci51cHBlcl9tYXJnaW4gPSAxNjsKKwlkZWZhdWx0X3Zhci5sb3dlcl9tYXJnaW4gPSA0OworCWRlZmF1bHRfdmFyLmhzeW5jX2xlbiA9IGRlZmF1bHRfdmFyLmxlZnRfbWFyZ2luOworCWRlZmF1bHRfdmFyLnZzeW5jX2xlbiA9IDQ7CisJZGVmYXVsdF92YXIuYWNjZWxfZmxhZ3MgPSAwOworCisJaWYgKHZpYWZiX2FjY2VsKSB7CisJCXZpYWZiaW5mby0+ZmxhZ3MgfD0KKwkJICAgIChGQklORk9fSFdBQ0NFTF9DT1BZQVJFQSB8IEZCSU5GT19IV0FDQ0VMX0ZJTExSRUNUIHwKKwkJICAgICBGQklORk9fSFdBQ0NFTF9JTUFHRUJMSVQpOworCQlkZWZhdWx0X3Zhci5hY2NlbF9mbGFncyB8PSBGQl9BQ0NFTEZfVEVYVDsKKwl9IGVsc2UKKwkJdmlhZmJpbmZvLT5mbGFncyB8PSBGQklORk9fSFdBQ0NFTF9ESVNBQkxFRDsKKworCWlmICh2aWFmYl9kdWFsX2ZiKSB7CisJCXZpYWZiaW5mbzEgPSBmcmFtZWJ1ZmZlcl9hbGxvYyh2aWFmYl9wYXJfbGVuZ3RoLCBOVUxMKTsKKwkJaWYgKCF2aWFmYmluZm8xKSB7CisJCQlwcmludGsoS0VSTl9FUlIKKwkJCSJhbGxvY2F0ZSB0aGUgc2Vjb25kIGZyYW1lYnVmZmVyIHN0cnVjdCBlcnJvclxuIik7CisJCQlmcmFtZWJ1ZmZlcl9yZWxlYXNlKHZpYWZiaW5mbyk7CisJCQlyZXR1cm4gLUVOT01FTTsKKwkJfQorCQl2aWFwYXJpbmZvMSA9IHZpYWZiaW5mbzEtPnBhcjsKKwkJbWVtY3B5KHZpYXBhcmluZm8xLCB2aWFwYXJpbmZvLCB2aWFmYl9wYXJfbGVuZ3RoKTsKKwkJdmlhcGFyaW5mbzEtPm1lbXNpemUgPSB2aWFwYXJpbmZvLT5tZW1zaXplIC0KKwkJCXZpYWZiX3NlY29uZF9vZmZzZXQ7CisJCXZpYXBhcmluZm8tPm1lbXNpemUgPSB2aWFmYl9zZWNvbmRfb2Zmc2V0OworCQl2aWFwYXJpbmZvMS0+ZmJtZW1fdmlydCA9IHZpYXBhcmluZm8tPmZibWVtX3ZpcnQgKworCQkJdmlhZmJfc2Vjb25kX29mZnNldDsKKwkJdmlhcGFyaW5mbzEtPmZibWVtID0gdmlhcGFyaW5mby0+ZmJtZW0gKyB2aWFmYl9zZWNvbmRfb2Zmc2V0OworCisJCXZpYXBhcmluZm8xLT5mYm1lbV91c2VkID0gdmlhcGFyaW5mby0+ZmJtZW1fdXNlZDsKKwkJdmlhcGFyaW5mbzEtPmZibWVtX2ZyZWUgPSB2aWFwYXJpbmZvMS0+bWVtc2l6ZSAtCisJCQl2aWFwYXJpbmZvMS0+ZmJtZW1fdXNlZDsKKwkJdmlhcGFyaW5mby0+ZmJtZW1fZnJlZSA9IHZpYXBhcmluZm8tPm1lbXNpemU7CisJCXZpYXBhcmluZm8tPmZibWVtX3VzZWQgPSAwOworCQlpZiAodmlhZmJfYWNjZWwpIHsKKwkJCXZpYXBhcmluZm8xLT5jdXJzb3Jfc3RhcnQgPQorCQkJICAgIHZpYXBhcmluZm8tPmN1cnNvcl9zdGFydCAtIHZpYWZiX3NlY29uZF9vZmZzZXQ7CisJCQl2aWFwYXJpbmZvMS0+VlFfc3RhcnQgPSB2aWFwYXJpbmZvLT5WUV9zdGFydCAtCisJCQkJdmlhZmJfc2Vjb25kX29mZnNldDsKKwkJCXZpYXBhcmluZm8xLT5WUV9lbmQgPSB2aWFwYXJpbmZvLT5WUV9lbmQgLQorCQkJCXZpYWZiX3NlY29uZF9vZmZzZXQ7CisJCX0KKworCQltZW1jcHkodmlhZmJpbmZvMSwgdmlhZmJpbmZvLCBzaXplb2Yoc3RydWN0IGZiX2luZm8pKTsKKwkJdmlhZmJpbmZvMS0+c2NyZWVuX2Jhc2UgPSB2aWFmYmluZm8tPnNjcmVlbl9iYXNlICsKKwkJCXZpYWZiX3NlY29uZF9vZmZzZXQ7CisJCXZpYWZiaW5mbzEtPmZpeC5zbWVtX3N0YXJ0ID0gdmlhcGFyaW5mbzEtPmZibWVtOworCQl2aWFmYmluZm8xLT5maXguc21lbV9sZW4gPSB2aWFwYXJpbmZvMS0+ZmJtZW1fZnJlZTsKKworCQlkZWZhdWx0X3Zhci54cmVzID0gdmlhZmJfc2Vjb25kX3hyZXM7CisJCWRlZmF1bHRfdmFyLnlyZXMgPSB2aWFmYl9zZWNvbmRfeXJlczsKKwkJZGVmYXVsdF92YXIueHJlc192aXJ0dWFsID0gdmlhZmJfc2Vjb25kX3ZpcnR1YWxfeHJlczsKKwkJZGVmYXVsdF92YXIueXJlc192aXJ0dWFsID0gdmlhZmJfc2Vjb25kX3ZpcnR1YWxfeXJlczsKKwkJaWYgKHZpYWZiX2JwcDEgIT0gdmlhZmJfYnBwKQorCQkJdmlhZmJfYnBwMSA9IHZpYWZiX2JwcDsKKwkJZGVmYXVsdF92YXIuYml0c19wZXJfcGl4ZWwgPSB2aWFmYl9icHAxOworCQlkZWZhdWx0X3Zhci5waXhjbG9jayA9CisJCSAgICB2aWFmYl9nZXRfcGl4Y2xvY2sodmlhZmJfc2Vjb25kX3hyZXMsIHZpYWZiX3NlY29uZF95cmVzLAorCQkgICAgdmlhZmJfcmVmcmVzaCk7CisJCWRlZmF1bHRfdmFyLmxlZnRfbWFyZ2luID0gKHZpYWZiX3NlY29uZF94cmVzID4+IDMpICYgMHhmODsKKwkJZGVmYXVsdF92YXIucmlnaHRfbWFyZ2luID0gMzI7CisJCWRlZmF1bHRfdmFyLnVwcGVyX21hcmdpbiA9IDE2OworCQlkZWZhdWx0X3Zhci5sb3dlcl9tYXJnaW4gPSA0OworCQlkZWZhdWx0X3Zhci5oc3luY19sZW4gPSBkZWZhdWx0X3Zhci5sZWZ0X21hcmdpbjsKKwkJZGVmYXVsdF92YXIudnN5bmNfbGVuID0gNDsKKworCQl2aWFmYl9zZXR1cF9maXhpbmZvKCZ2aWFmYmluZm8xLT5maXgsIHZpYXBhcmluZm8xKTsKKwkJdmlhZmJfY2hlY2tfdmFyKCZkZWZhdWx0X3ZhciwgdmlhZmJpbmZvMSk7CisJCXZpYWZiaW5mbzEtPnZhciA9IGRlZmF1bHRfdmFyOworCQl2aWFmYl91cGRhdGVfdmlhZmJfcGFyKHZpYWZiaW5mbyk7CisJCXZpYWZiX3VwZGF0ZV9maXgoJnZpYWZiaW5mbzEtPmZpeCwgdmlhZmJpbmZvMSk7CisJfQorCisJdmlhZmJfc2V0dXBfZml4aW5mbygmdmlhZmJpbmZvLT5maXgsIHZpYXBhcmluZm8pOworCXZpYWZiX2NoZWNrX3ZhcigmZGVmYXVsdF92YXIsIHZpYWZiaW5mbyk7CisJdmlhZmJpbmZvLT52YXIgPSBkZWZhdWx0X3ZhcjsKKwl2aWFmYl91cGRhdGVfdmlhZmJfcGFyKHZpYWZiaW5mbyk7CisJdmlhZmJfdXBkYXRlX2ZpeCgmdmlhZmJpbmZvLT5maXgsIHZpYWZiaW5mbyk7CisJZGVmYXVsdF92YXIuYWN0aXZhdGUgPSBGQl9BQ1RJVkFURV9OT1c7CisJZmJfYWxsb2NfY21hcCgmdmlhZmJpbmZvLT5jbWFwLCAyNTYsIDApOworCisJaWYgKHZpYWZiX2R1YWxfZmIgJiYgKHZpYWZiX3ByaW1hcnlfZGV2ID09IExDRF9EZXZpY2UpCisJICAgICYmICh2aWFwYXJpbmZvLT5jaGlwX2luZm8tPmdmeF9jaGlwX25hbWUgPT0gVU5JQ0hST01FX0NMRTI2NikpIHsKKwkJaWYgKHJlZ2lzdGVyX2ZyYW1lYnVmZmVyKHZpYWZiaW5mbzEpIDwgMCkKKwkJCXJldHVybiAtRUlOVkFMOworCX0KKwlpZiAocmVnaXN0ZXJfZnJhbWVidWZmZXIodmlhZmJpbmZvKSA8IDApCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKHZpYWZiX2R1YWxfZmIgJiYgKCh2aWFmYl9wcmltYXJ5X2RldiAhPSBMQ0RfRGV2aWNlKQorCQkJfHwgKHZpYXBhcmluZm8tPmNoaXBfaW5mby0+Z2Z4X2NoaXBfbmFtZSAhPQorCQkJVU5JQ0hST01FX0NMRTI2NikpKSB7CisJCWlmIChyZWdpc3Rlcl9mcmFtZWJ1ZmZlcih2aWFmYmluZm8xKSA8IDApCisJCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJREVCVUdfTVNHKEtFUk5fSU5GTyAiZmIlZDogJXMgZnJhbWUgYnVmZmVyIGRldmljZSAlZHglZC0lZGJwcFxuIiwKKwkJICB2aWFmYmluZm8tPm5vZGUsIHZpYWZiaW5mby0+Zml4LmlkLCBkZWZhdWx0X3Zhci54cmVzLAorCQkgIGRlZmF1bHRfdmFyLnlyZXMsIGRlZmF1bHRfdmFyLmJpdHNfcGVyX3BpeGVsKTsKKworCXZpYWZiX2luaXRfcHJvYyh2aWFwYXJpbmZvLT5wcm9jX2VudHJ5KTsKKwl2aWFmYl9pbml0X2RhYyhJR0EyKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgX19kZXZleGl0IHZpYV9wY2lfcmVtb3ZlKHZvaWQpCit7CisJREVCVUdfTVNHKEtFUk5fSU5GTyAidmlhX3BjaV9yZW1vdmUhXG4iKTsKKwlmYl9kZWFsbG9jX2NtYXAoJnZpYWZiaW5mby0+Y21hcCk7CisJdW5yZWdpc3Rlcl9mcmFtZWJ1ZmZlcih2aWFmYmluZm8pOworCWlmICh2aWFmYl9kdWFsX2ZiKQorCQl1bnJlZ2lzdGVyX2ZyYW1lYnVmZmVyKHZpYWZiaW5mbzEpOworCWlvdW5tYXAoKHZvaWQgKil2aWFwYXJpbmZvLT5mYm1lbV92aXJ0KTsKKwlpb3VubWFwKHZpYXBhcmluZm8tPmlvX3ZpcnQpOworCisJdmlhZmJfZGVsZXRlX2kyY19idXNzKHZpYXBhcmluZm8pOworCisJZnJhbWVidWZmZXJfcmVsZWFzZSh2aWFmYmluZm8pOworCWlmICh2aWFmYl9kdWFsX2ZiKQorCQlmcmFtZWJ1ZmZlcl9yZWxlYXNlKHZpYWZiaW5mbzEpOworCisJdmlhZmJfcmVtb3ZlX3Byb2ModmlhcGFyaW5mby0+cHJvY19lbnRyeSk7Cit9CisKKyNpZm5kZWYgTU9EVUxFCitzdGF0aWMgaW50IF9faW5pdCB2aWFmYl9zZXR1cChjaGFyICpvcHRpb25zKQoreworCWNoYXIgKnRoaXNfb3B0OworCURFQlVHX01TRyhLRVJOX0lORk8gInZpYWZiX3NldHVwIVxuIik7CisKKwlpZiAoIW9wdGlvbnMgfHwgISpvcHRpb25zKQorCQlyZXR1cm4gMDsKKworCXdoaWxlICgodGhpc19vcHQgPSBzdHJzZXAoJm9wdGlvbnMsICIsIikpICE9IE5VTEwpIHsKKwkJaWYgKCEqdGhpc19vcHQpCisJCQljb250aW51ZTsKKworCQlpZiAoIXN0cm5jbXAodGhpc19vcHQsICJ2aWFmYl9tb2RlMT0iLCAxMikpCisJCQl2aWFmYl9tb2RlMSA9IGtzdHJkdXAodGhpc19vcHQgKyAxMiwgR0ZQX0tFUk5FTCk7CisJCWVsc2UgaWYgKCFzdHJuY21wKHRoaXNfb3B0LCAidmlhZmJfbW9kZT0iLCAxMSkpCisJCQl2aWFmYl9tb2RlID0ga3N0cmR1cCh0aGlzX29wdCArIDExLCBHRlBfS0VSTkVMKTsKKwkJZWxzZSBpZiAoIXN0cm5jbXAodGhpc19vcHQsICJ2aWFmYl9icHAxPSIsIDExKSkKKwkJCXN0cmljdF9zdHJ0b3VsKHRoaXNfb3B0ICsgMTEsIDAsCisJCQkJKHVuc2lnbmVkIGxvbmcgKikmdmlhZmJfYnBwMSk7CisJCWVsc2UgaWYgKCFzdHJuY21wKHRoaXNfb3B0LCAidmlhZmJfYnBwPSIsIDEwKSkKKwkJCXN0cmljdF9zdHJ0b3VsKHRoaXNfb3B0ICsgMTAsIDAsCisJCQkJKHVuc2lnbmVkIGxvbmcgKikmdmlhZmJfYnBwKTsKKwkJZWxzZSBpZiAoIXN0cm5jbXAodGhpc19vcHQsICJ2aWFmYl9yZWZyZXNoMT0iLCAxNSkpCisJCQlzdHJpY3Rfc3RydG91bCh0aGlzX29wdCArIDE1LCAwLAorCQkJCSh1bnNpZ25lZCBsb25nICopJnZpYWZiX3JlZnJlc2gxKTsKKwkJZWxzZSBpZiAoIXN0cm5jbXAodGhpc19vcHQsICJ2aWFmYl9yZWZyZXNoPSIsIDE0KSkKKwkJCXN0cmljdF9zdHJ0b3VsKHRoaXNfb3B0ICsgMTQsIDAsCisJCQkJKHVuc2lnbmVkIGxvbmcgKikmdmlhZmJfcmVmcmVzaCk7CisJCWVsc2UgaWYgKCFzdHJuY21wKHRoaXNfb3B0LCAidmlhZmJfbGNkX2RzcF9tZXRob2Q9IiwgMjEpKQorCQkJc3RyaWN0X3N0cnRvdWwodGhpc19vcHQgKyAyMSwgMCwKKwkJCQkodW5zaWduZWQgbG9uZyAqKSZ2aWFmYl9sY2RfZHNwX21ldGhvZCk7CisJCWVsc2UgaWYgKCFzdHJuY21wKHRoaXNfb3B0LCAidmlhZmJfbGNkX3BhbmVsX2lkPSIsIDE5KSkKKwkJCXN0cmljdF9zdHJ0b3VsKHRoaXNfb3B0ICsgMTksIDAsCisJCQkJKHVuc2lnbmVkIGxvbmcgKikmdmlhZmJfbGNkX3BhbmVsX2lkKTsKKwkJZWxzZSBpZiAoIXN0cm5jbXAodGhpc19vcHQsICJ2aWFmYl9hY2NlbD0iLCAxMikpCisJCQlzdHJpY3Rfc3RydG91bCh0aGlzX29wdCArIDEyLCAwLAorCQkJCSh1bnNpZ25lZCBsb25nICopJnZpYWZiX2FjY2VsKTsKKwkJZWxzZSBpZiAoIXN0cm5jbXAodGhpc19vcHQsICJ2aWFmYl9TQU1NX09OPSIsIDE0KSkKKwkJCXN0cmljdF9zdHJ0b3VsKHRoaXNfb3B0ICsgMTQsIDAsCisJCQkJKHVuc2lnbmVkIGxvbmcgKikmdmlhZmJfU0FNTV9PTik7CisJCWVsc2UgaWYgKCFzdHJuY21wKHRoaXNfb3B0LCAidmlhZmJfYWN0aXZlX2Rldj0iLCAxNykpCisJCQl2aWFmYl9hY3RpdmVfZGV2ID0ga3N0cmR1cCh0aGlzX29wdCArIDE3LCBHRlBfS0VSTkVMKTsKKwkJZWxzZSBpZiAoIXN0cm5jbXAodGhpc19vcHQsCisJCQkidmlhZmJfZGlzcGxheV9oYXJkd2FyZV9sYXlvdXQ9IiwgMzApKQorCQkJc3RyaWN0X3N0cnRvdWwodGhpc19vcHQgKyAzMCwgMCwKKwkJCSh1bnNpZ25lZCBsb25nICopJnZpYWZiX2Rpc3BsYXlfaGFyZHdhcmVfbGF5b3V0KTsKKwkJZWxzZSBpZiAoIXN0cm5jbXAodGhpc19vcHQsICJ2aWFmYl9zZWNvbmRfc2l6ZT0iLCAxOCkpCisJCQlzdHJpY3Rfc3RydG91bCh0aGlzX29wdCArIDE4LCAwLAorCQkJCSh1bnNpZ25lZCBsb25nICopJnZpYWZiX3NlY29uZF9zaXplKTsKKwkJZWxzZSBpZiAoIXN0cm5jbXAodGhpc19vcHQsCisJCQkidmlhZmJfcGxhdGZvcm1fZXBpYV9kdmk9IiwgMjQpKQorCQkJc3RyaWN0X3N0cnRvdWwodGhpc19vcHQgKyAyNCwgMCwKKwkJCQkodW5zaWduZWQgbG9uZyAqKSZ2aWFmYl9wbGF0Zm9ybV9lcGlhX2R2aSk7CisJCWVsc2UgaWYgKCFzdHJuY21wKHRoaXNfb3B0LAorCQkJInZpYWZiX2RldmljZV9sY2RfZHVhbGVkZ2U9IiwgMjYpKQorCQkJc3RyaWN0X3N0cnRvdWwodGhpc19vcHQgKyAyNiwgMCwKKwkJCQkodW5zaWduZWQgbG9uZyAqKSZ2aWFmYl9kZXZpY2VfbGNkX2R1YWxlZGdlKTsKKwkJZWxzZSBpZiAoIXN0cm5jbXAodGhpc19vcHQsICJ2aWFmYl9idXNfd2lkdGg9IiwgMTYpKQorCQkJc3RyaWN0X3N0cnRvdWwodGhpc19vcHQgKyAxNiwgMCwKKwkJCQkodW5zaWduZWQgbG9uZyAqKSZ2aWFmYl9idXNfd2lkdGgpOworCQllbHNlIGlmICghc3RybmNtcCh0aGlzX29wdCwgInZpYWZiX2xjZF9tb2RlPSIsIDE1KSkKKwkJCXN0cmljdF9zdHJ0b3VsKHRoaXNfb3B0ICsgMTUsIDAsCisJCQkJKHVuc2lnbmVkIGxvbmcgKikmdmlhZmJfbGNkX21vZGUpOworCQllbHNlIGlmICghc3RybmNtcCh0aGlzX29wdCwgInZpYWZiX3ZpZGVvX2Rldj0iLCAxNikpCisJCQl2aWFmYl92aWRlb19kZXYgPSBrc3RyZHVwKHRoaXNfb3B0ICsgMTYsIEdGUF9LRVJORUwpOworCQllbHNlIGlmICghc3RybmNtcCh0aGlzX29wdCwgInZpYWZiX2xjZF9wb3J0PSIsIDE1KSkKKwkJCXZpYWZiX2xjZF9wb3J0ID0ga3N0cmR1cCh0aGlzX29wdCArIDE1LCBHRlBfS0VSTkVMKTsKKwkJZWxzZSBpZiAoIXN0cm5jbXAodGhpc19vcHQsICJ2aWFmYl9kdmlfcG9ydD0iLCAxNSkpCisJCQl2aWFmYl9kdmlfcG9ydCA9IGtzdHJkdXAodGhpc19vcHQgKyAxNSwgR0ZQX0tFUk5FTCk7CisJfQorCXJldHVybiAwOworfQorI2VuZGlmCisKK3N0YXRpYyBpbnQgX19pbml0IHZpYWZiX2luaXQodm9pZCkKK3sKKyNpZm5kZWYgTU9EVUxFCisJY2hhciAqb3B0aW9uID0gTlVMTDsKKwlpZiAoZmJfZ2V0X29wdGlvbnMoInZpYWZiIiwgJm9wdGlvbikpCisJCXJldHVybiAtRU5PREVWOworCXZpYWZiX3NldHVwKG9wdGlvbik7CisjZW5kaWYKKwlwcmludGsoS0VSTl9JTkZPCisgICAgICAgIlZJQSBHcmFwaGljcyBJbnRlcmdyYXRpb24gQ2hpcHNldCBmcmFtZWJ1ZmZlciAlZC4lZCBpbml0aWFsaXppbmdcbiIsCisJICAgICAgIFZFUlNJT05fTUFKT1IsIFZFUlNJT05fTUlOT1IpOworCXJldHVybiB2aWFfcGNpX3Byb2JlKCk7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCB2aWFmYl9leGl0KHZvaWQpCit7CisJREVCVUdfTVNHKEtFUk5fSU5GTyAidmlhZmJfZXhpdCFcbiIpOworCXZpYV9wY2lfcmVtb3ZlKCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZmJfb3BzIHZpYWZiX29wcyA9IHsKKwkub3duZXIgPSBUSElTX01PRFVMRSwKKwkuZmJfb3BlbiA9IHZpYWZiX29wZW4sCisJLmZiX3JlbGVhc2UgPSB2aWFmYl9yZWxlYXNlLAorCS5mYl9jaGVja192YXIgPSB2aWFmYl9jaGVja192YXIsCisJLmZiX3NldF9wYXIgPSB2aWFmYl9zZXRfcGFyLAorCS5mYl9zZXRjb2xyZWcgPSB2aWFmYl9zZXRjb2xyZWcsCisJLmZiX3Bhbl9kaXNwbGF5ID0gdmlhZmJfcGFuX2Rpc3BsYXksCisJLmZiX2JsYW5rID0gdmlhZmJfYmxhbmssCisJLmZiX2ZpbGxyZWN0ID0gdmlhZmJfZmlsbHJlY3QsCisJLmZiX2NvcHlhcmVhID0gdmlhZmJfY29weWFyZWEsCisJLmZiX2ltYWdlYmxpdCA9IHZpYWZiX2ltYWdlYmxpdCwKKwkuZmJfY3Vyc29yID0gdmlhZmJfY3Vyc29yLAorCS5mYl9pb2N0bCA9IHZpYWZiX2lvY3RsLAorCS5mYl9zeW5jID0gdmlhZmJfc3luYywKKwkuZmJfc2V0Y21hcCA9IHZpYWZiX3NldGNtYXAsCit9OworCittb2R1bGVfaW5pdCh2aWFmYl9pbml0KTsKK21vZHVsZV9leGl0KHZpYWZiX2V4aXQpOworCisjaWZkZWYgTU9EVUxFCittb2R1bGVfcGFyYW0odmlhZmJfbWVtc2l6ZSwgaW50LCAwKTsKKworbW9kdWxlX3BhcmFtKHZpYWZiX21vZGUsIGNoYXJwLCAwKTsKK01PRFVMRV9QQVJNX0RFU0ModmlhZmJfbW9kZSwgIlNldCByZXNvbHV0aW9uIChkZWZhdWx0PTY0MHg0ODApIik7CisKK21vZHVsZV9wYXJhbSh2aWFmYl9tb2RlMSwgY2hhcnAsIDApOworTU9EVUxFX1BBUk1fREVTQyh2aWFmYl9tb2RlMSwgIlNldCByZXNvbHV0aW9uIChkZWZhdWx0PTY0MHg0ODApIik7CisKK21vZHVsZV9wYXJhbSh2aWFmYl9icHAsIGludCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKHZpYWZiX2JwcCwgIlNldCBjb2xvciBkZXB0aCAoZGVmYXVsdD0zMmJwcCkiKTsKKworbW9kdWxlX3BhcmFtKHZpYWZiX2JwcDEsIGludCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKHZpYWZiX2JwcDEsICJTZXQgY29sb3IgZGVwdGggKGRlZmF1bHQ9MzJicHApIik7CisKK21vZHVsZV9wYXJhbSh2aWFmYl9yZWZyZXNoLCBpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyh2aWFmYl9yZWZyZXNoLAorCSJTZXQgQ1JUIHZpYWZiX3JlZnJlc2ggcmF0ZSAoZGVmYXVsdCA9IDYwKSIpOworCittb2R1bGVfcGFyYW0odmlhZmJfcmVmcmVzaDEsIGludCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKHZpYWZiX3JlZnJlc2gxLAorCSJTZXQgQ1JUIHJlZnJlc2ggcmF0ZSAoZGVmYXVsdCA9IDYwKSIpOworCittb2R1bGVfcGFyYW0odmlhZmJfbGNkX3BhbmVsX2lkLCBpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyh2aWFmYl9sY2RfcGFuZWxfaWQsCisJIlNldCBGbGF0IFBhbmVsIHR5cGUoRGVmYXVsdD0xMDI0eDc2OCkiKTsKKworbW9kdWxlX3BhcmFtKHZpYWZiX2xjZF9kc3BfbWV0aG9kLCBpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyh2aWFmYl9sY2RfZHNwX21ldGhvZCwKKwkiU2V0IEZsYXQgUGFuZWwgZGlzcGxheSBzY2FsaW5nIG1ldGhvZC4oRGVmYXVsdD1FeHBhbmRzaW9uKSIpOworCittb2R1bGVfcGFyYW0odmlhZmJfU0FNTV9PTiwgaW50LCAwKTsKK01PRFVMRV9QQVJNX0RFU0ModmlhZmJfU0FNTV9PTiwKKwkiVHVybiBvbi9vZmYgZmxhZyBvZiBTQU1NKERlZmF1bHQ9T0ZGKSIpOworCittb2R1bGVfcGFyYW0odmlhZmJfYWNjZWwsIGludCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKHZpYWZiX2FjY2VsLAorCSJTZXQgMkQgSGFyZHdhcmUgQWNjZWxlcmF0aW9uLihEZWZhdWx0ID0gT0ZGKSIpOworCittb2R1bGVfcGFyYW0odmlhZmJfYWN0aXZlX2RldiwgY2hhcnAsIDApOworTU9EVUxFX1BBUk1fREVTQyh2aWFmYl9hY3RpdmVfZGV2LCAiU3BlY2lmeSBhY3RpdmUgZGV2aWNlcy4iKTsKKworbW9kdWxlX3BhcmFtKHZpYWZiX2Rpc3BsYXlfaGFyZHdhcmVfbGF5b3V0LCBpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyh2aWFmYl9kaXNwbGF5X2hhcmR3YXJlX2xheW91dCwKKwkiRGlzcGxheSBIYXJkd2FyZSBMYXlvdXQgKExDRCBPbmx5LCBEVkkgT25seS4uLixldGMpIik7CisKK21vZHVsZV9wYXJhbSh2aWFmYl9zZWNvbmRfc2l6ZSwgaW50LCAwKTsKK01PRFVMRV9QQVJNX0RFU0ModmlhZmJfc2Vjb25kX3NpemUsCisJIlNldCBzZWNvbmRhcnkgZGV2aWNlIG1lbW9yeSBzaXplIik7CisKK21vZHVsZV9wYXJhbSh2aWFmYl9kdWFsX2ZiLCBpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyh2aWFmYl9kdWFsX2ZiLAorCSJUdXJuIG9uL29mZiBmbGFnIG9mIGR1YWwgZnJhbWVidWZmZXIgZGV2aWNlcy4oRGVmYXVsdCA9IE9GRikiKTsKKworbW9kdWxlX3BhcmFtKHZpYWZiX3BsYXRmb3JtX2VwaWFfZHZpLCBpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyh2aWFmYl9wbGF0Zm9ybV9lcGlhX2R2aSwKKwkiVHVybiBvbi9vZmYgZmxhZyBvZiBEVkkgZGV2aWNlcyBvbiBFUElBIGJvYXJkLihEZWZhdWx0ID0gT0ZGKSIpOworCittb2R1bGVfcGFyYW0odmlhZmJfZGV2aWNlX2xjZF9kdWFsZWRnZSwgaW50LCAwKTsKK01PRFVMRV9QQVJNX0RFU0ModmlhZmJfZGV2aWNlX2xjZF9kdWFsZWRnZSwKKwkiVHVybiBvbi9vZmYgZmxhZyBvZiBkdWFsIGVkZ2UgcGFuZWwuKERlZmF1bHQgPSBPRkYpIik7CisKK21vZHVsZV9wYXJhbSh2aWFmYl9idXNfd2lkdGgsIGludCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKHZpYWZiX2J1c193aWR0aCwKKwkiU2V0IGJ1cyB3aWR0aCBvZiBwYW5lbC4oRGVmYXVsdCA9IDEyKSIpOworCittb2R1bGVfcGFyYW0odmlhZmJfbGNkX21vZGUsIGludCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKHZpYWZiX2xjZF9tb2RlLAorCSJTZXQgRmxhdCBQYW5lbCBtb2RlKERlZmF1bHQ9T1BFTkxESSkiKTsKKworbW9kdWxlX3BhcmFtKHZpYWZiX3ZpZGVvX2RldiwgY2hhcnAsIDApOworTU9EVUxFX1BBUk1fREVTQyh2aWFmYl92aWRlb19kZXYsICJTcGVjaWZ5IHZpZGVvIGRldmljZXMuIik7CisKK21vZHVsZV9wYXJhbSh2aWFmYl9sY2RfcG9ydCwgY2hhcnAsIDApOworTU9EVUxFX1BBUk1fREVTQyh2aWFmYl9sY2RfcG9ydCwgIlNwZWNpZnkgTENEIG91dHB1dCBwb3J0LiIpOworCittb2R1bGVfcGFyYW0odmlhZmJfZHZpX3BvcnQsIGNoYXJwLCAwKTsKK01PRFVMRV9QQVJNX0RFU0ModmlhZmJfZHZpX3BvcnQsICJTcGVjaWZ5IERWSSBvdXRwdXQgcG9ydC4iKTsKKworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3ZpYS92aWFmYmRldi5oIGIvZHJpdmVycy92aWRlby92aWEvdmlhZmJkZXYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNDE1OGU4Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy92aWRlby92aWEvdmlhZmJkZXYuaApAQCAtMCwwICsxLDExMiBAQAorLyoKKyAqIENvcHlyaWdodCAxOTk4LTIwMDggVklBIFRlY2hub2xvZ2llcywgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IDIwMDEtMjAwOCBTMyBHcmFwaGljcywgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247CisgKiBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5USUVTIE9SIFJFUFJFU0VOVEFUSU9OUzsgd2l0aG91dCBldmVuCisgKiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFLlNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGZvciBtb3JlIGRldGFpbHMuCisKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwKKyAqIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKworI2lmbmRlZiBfX1ZJQUZCREVWX0hfXworI2RlZmluZSBfX1ZJQUZCREVWX0hfXworCisjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgorI2luY2x1ZGUgPGxpbnV4L2ZiLmg+CisKKyNpbmNsdWRlICJpb2N0bC5oIgorI2luY2x1ZGUgInNoYXJlLmgiCisjaW5jbHVkZSAiY2hpcC5oIgorI2luY2x1ZGUgImh3LmgiCisjaW5jbHVkZSAidmlhX2kyYy5oIgorCisjZGVmaW5lIFZFUlNJT05fTUFKT1IgICAgICAgMgorI2RlZmluZSBWRVJTSU9OX0tFUk5FTCAgICAgIDYJLyogRm9yIGtlcm5lbCAyLjYgKi8KKworI2RlZmluZSBWRVJTSU9OX09TICAgICAgICAgIDAJLyogMDogZm9yIDMyIGJpdHMgT1MsIDE6IGZvciA2NCBiaXRzIE9TICovCisjZGVmaW5lIFZFUlNJT05fTUlOT1IgICAgICAgNAorCitzdHJ1Y3QgdmlhZmJfcGFyIHsKKwlpbnQgYnBwOworCWludCBocmVzOworCWludCB2cmVzOworCWludCBsaW5lbGVuZ3RoOworCXUzMiB4b2Zmc2V0OworCXUzMiB5b2Zmc2V0OworCisJdm9pZCBfX2lvbWVtICpmYm1lbV92aXJ0OwkvKmZyYW1lYnVmZmVyIHZpcnR1YWwgbWVtb3J5IGFkZHJlc3MgKi8KKwl2b2lkIF9faW9tZW0gKmlvX3ZpcnQ7CS8qaW9zcGFjZSB2aXJ0dWFsIG1lbW9yeSBhZGRyZXNzICovCisJdW5zaWduZWQgaW50IGZibWVtOwkvKmZyYW1lYnVmZmVyIHBoeXNpY2FsIG1lbW9yeSBhZGRyZXNzICovCisJdW5zaWduZWQgaW50IG1lbXNpemU7CS8qc2l6ZSBvZiBmYm1lbSAqLworCXVuc2lnbmVkIGludCBpbzsJLyppbyBzcGFjZSBhZGRyZXNzICovCisJdW5zaWduZWQgbG9uZyBtbWlvX2Jhc2U7CS8qbW1pbyBiYXNlIGFkZHJlc3MgKi8KKwl1bnNpZ25lZCBsb25nIG1taW9fbGVuOwkvKm1taW8gYmFzZSBsZW5ndGggKi8KKwl1MzIgZmJtZW1fZnJlZTsJCS8qIEZyZWUgRkIgbWVtb3J5ICovCisJdTMyIGZibWVtX3VzZWQ7CQkvKiBVc2UgRkIgbWVtb3J5IHNpemUgKi8KKwl1MzIgY3Vyc29yX3N0YXJ0OwkvKiBDdXJzb3IgU3RhcnQgQWRkcmVzcyAqLworCXUzMiBWUV9zdGFydDsJCS8qIFZpcnR1YWwgUXVldWUgU3RhcnQgQWRkcmVzcyAqLworCXUzMiBWUV9lbmQ7CQkvKiBWaXJ0dWFsIFF1ZXVlIEVuZCBBZGRyZXNzICovCisJdTMyIGlnYV9wYXRoOworCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcHJvY19lbnRyeTsJLyp2aWFmYiBwcm9jIGVudHJ5ICovCisJdTggZHVvdmlldzsJCS8qSXMgd29ya2luZyBpbiBkdW92aWV3IG1vZGU/ICovCisKKwkvKiBJMkMgc3R1ZmYgKi8KKwlzdHJ1Y3QgdmlhX2kyY19zdHVmZiBpMmNfc3R1ZmY7CisKKwkvKiBBbGwgdGhlIGluZm9ybWF0aW9uIHdpbGwgYmUgbmVlZGVkIHRvIHNldCBlbmdpbmUgKi8KKwlzdHJ1Y3QgdG1kc19zZXR0aW5nX2luZm9ybWF0aW9uICp0bWRzX3NldHRpbmdfaW5mbzsKKwlzdHJ1Y3QgY3J0X3NldHRpbmdfaW5mb3JtYXRpb24gKmNydF9zZXR0aW5nX2luZm87CisJc3RydWN0IGx2ZHNfc2V0dGluZ19pbmZvcm1hdGlvbiAqbHZkc19zZXR0aW5nX2luZm87CisJc3RydWN0IGx2ZHNfc2V0dGluZ19pbmZvcm1hdGlvbiAqbHZkc19zZXR0aW5nX2luZm8yOworCXN0cnVjdCBjaGlwX2luZm9ybWF0aW9uICpjaGlwX2luZm87CisKKwkvKiBzb21lIGluZm9ybWF0aW9uIHJlbGF0ZWQgdG8gdmlkZW8gcGxheWluZyAqLworCWludCB2aWRlb19vbl9jcnQ7CisJaW50IHZpZGVvX29uX2R2aTsKKwlpbnQgdmlkZW9fb25fbGNkOworCit9Oworc3RydWN0IHZpYWZiX21vZGVpbmZvIHsKKwl1MzIgeHJlczsKKwl1MzIgeXJlczsKKwlpbnQgbW9kZV9pbmRleDsKKwljaGFyICptb2RlX3JlczsKK307CitleHRlcm4gdW5zaWduZWQgaW50IHZpYWZiX3NlY29uZF92aXJ0dWFsX3lyZXM7CitleHRlcm4gdW5zaWduZWQgaW50IHZpYWZiX3NlY29uZF92aXJ0dWFsX3hyZXM7CitleHRlcm4gdW5zaWduZWQgaW50IHZpYWZiX3NlY29uZF9vZmZzZXQ7CitleHRlcm4gaW50IHZpYWZiX3NlY29uZF9zaXplOworZXh0ZXJuIGludCB2aWFmYl9TQU1NX09OOworZXh0ZXJuIGludCB2aWFmYl9kdWFsX2ZiOworZXh0ZXJuIGludCB2aWFmYl9MQ0QyX09OOworZXh0ZXJuIGludCB2aWFmYl9MQ0RfT047CitleHRlcm4gaW50IHZpYWZiX0RWSV9PTjsKK2V4dGVybiBpbnQgdmlhZmJfYWNjZWw7CitleHRlcm4gaW50IHZpYWZiX2hvdHBsdWc7CitleHRlcm4gaW50IHZpYWZiX21lbXNpemU7CisKK2V4dGVybiBpbnQgc3RyaWN0X3N0cnRvdWwoY29uc3QgY2hhciAqY3AsIHVuc2lnbmVkIGludCBiYXNlLAorCXVuc2lnbmVkIGxvbmcgKnJlcyk7CisKK3ZvaWQgdmlhZmJfbWVtb3J5X3BpdGNoX3BhdGNoKHN0cnVjdCBmYl9pbmZvICppbmZvKTsKK3ZvaWQgdmlhZmJfZmlsbF92YXJfdGltaW5nX2luZm8oc3RydWN0IGZiX3Zhcl9zY3JlZW5pbmZvICp2YXIsIGludCByZWZyZXNoLAorCQkJICBpbnQgbW9kZV9pbmRleCk7CitpbnQgdmlhZmJfZ2V0X21vZGVfaW5kZXgoaW50IGhyZXMsIGludCB2cmVzLCBpbnQgZmxhZyk7Cit1OCB2aWFmYl9ncGlvX2kyY19yZWFkX2x2ZHMoc3RydWN0IGx2ZHNfc2V0dGluZ19pbmZvcm1hdGlvbgorCSpwbHZkc19zZXR0aW5nX2luZm8sIHN0cnVjdCBsdmRzX2NoaXBfaW5mb3JtYXRpb24KKwkqcGx2ZHNfY2hpcF9pbmZvLCB1OCBpbmRleCk7Cit2b2lkIHZpYWZiX2dwaW9faTJjX3dyaXRlX21hc2tfbHZkcyhzdHJ1Y3QgbHZkc19zZXR0aW5nX2luZm9ybWF0aW9uCisJCQkgICAgICAqcGx2ZHNfc2V0dGluZ19pbmZvLCBzdHJ1Y3QgbHZkc19jaGlwX2luZm9ybWF0aW9uCisJCQkgICAgICAqcGx2ZHNfY2hpcF9pbmZvLCBzdHJ1Y3QgSU9EQVRBIGlvX2RhdGEpOworI2VuZGlmIC8qIF9fVklBRkJERVZfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3ZpYS92aWFtb2RlLmMgYi9kcml2ZXJzL3ZpZGVvL3ZpYS92aWFtb2RlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmRjZjU4MwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdmlkZW8vdmlhL3ZpYW1vZGUuYwpAQCAtMCwwICsxLDEwODYgQEAKKy8qCisgKiBDb3B5cmlnaHQgMTk5OC0yMDA4IFZJQSBUZWNobm9sb2dpZXMsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAyMDAxLTIwMDggUzMgR3JhcGhpY3MsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKworICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOworICogZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVElFUyBPUiBSRVBSRVNFTlRBVElPTlM7IHdpdGhvdXQgZXZlbgorICogdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS5TZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sCisgKiA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICovCisKKyNpbmNsdWRlICJnbG9iYWwuaCIKK3N0cnVjdCByZXNfbWFwX3JlZnJlc2ggcmVzX21hcF9yZWZyZXNoX3RibFtdID0geworLypocmVzLCB2cmVzLCB2Y2xvY2ssIHZtb2RlX3JlZnJlc2gqLworCXs0ODAsIDY0MCwgUkVTXzQ4MFg2NDBfNjBIWl9QSVhDTE9DSywgNjB9LAorCXs2NDAsIDQ4MCwgUkVTXzY0MFg0ODBfNjBIWl9QSVhDTE9DSywgNjB9LAorCXs2NDAsIDQ4MCwgUkVTXzY0MFg0ODBfNzVIWl9QSVhDTE9DSywgNzV9LAorCXs2NDAsIDQ4MCwgUkVTXzY0MFg0ODBfODVIWl9QSVhDTE9DSywgODV9LAorCXs2NDAsIDQ4MCwgUkVTXzY0MFg0ODBfMTAwSFpfUElYQ0xPQ0ssIDEwMH0sCisJezY0MCwgNDgwLCBSRVNfNjQwWDQ4MF8xMjBIWl9QSVhDTE9DSywgMTIwfSwKKwl7NzIwLCA0ODAsIFJFU183MjBYNDgwXzYwSFpfUElYQ0xPQ0ssIDYwfSwKKwl7NzIwLCA1NzYsIFJFU183MjBYNTc2XzYwSFpfUElYQ0xPQ0ssIDYwfSwKKwl7ODAwLCA0ODAsIFJFU184MDBYNDgwXzYwSFpfUElYQ0xPQ0ssIDYwfSwKKwl7ODAwLCA2MDAsIFJFU184MDBYNjAwXzYwSFpfUElYQ0xPQ0ssIDYwfSwKKwl7ODAwLCA2MDAsIFJFU184MDBYNjAwXzc1SFpfUElYQ0xPQ0ssIDc1fSwKKwl7ODAwLCA2MDAsIFJFU184MDBYNjAwXzg1SFpfUElYQ0xPQ0ssIDg1fSwKKwl7ODAwLCA2MDAsIFJFU184MDBYNjAwXzEwMEhaX1BJWENMT0NLLCAxMDB9LAorCXs4MDAsIDYwMCwgUkVTXzgwMFg2MDBfMTIwSFpfUElYQ0xPQ0ssIDEyMH0sCisJezg0OCwgNDgwLCBSRVNfODQ4WDQ4MF82MEhaX1BJWENMT0NLLCA2MH0sCisJezg1NiwgNDgwLCBSRVNfODU2WDQ4MF82MEhaX1BJWENMT0NLLCA2MH0sCisJezEwMjQsIDUxMiwgUkVTXzEwMjRYNTEyXzYwSFpfUElYQ0xPQ0ssIDYwfSwKKwl7MTAyNCwgNjAwLCBSRVNfMTAyNFg2MDBfNjBIWl9QSVhDTE9DSywgNjB9LAorCXsxMDI0LCA3NjgsIFJFU18xMDI0WDc2OF82MEhaX1BJWENMT0NLLCA2MH0sCisJezEwMjQsIDc2OCwgUkVTXzEwMjRYNzY4Xzc1SFpfUElYQ0xPQ0ssIDc1fSwKKwl7MTAyNCwgNzY4LCBSRVNfMTAyNFg3NjhfODVIWl9QSVhDTE9DSywgODV9LAorCXsxMDI0LCA3NjgsIFJFU18xMDI0WDc2OF8xMDBIWl9QSVhDTE9DSywgMTAwfSwKKy8qICB7MTE1Miw4NjQsIFJFU18xMTUyWDg2NF83MEhaX1BJWENMT0NLLCAgNzB9LCovCisJezExNTIsIDg2NCwgUkVTXzExNTJYODY0Xzc1SFpfUElYQ0xPQ0ssIDc1fSwKKwl7MTI4MCwgNzY4LCBSRVNfMTI4MFg3NjhfNjBIWl9QSVhDTE9DSywgNjB9LAorCXsxMjgwLCA4MDAsIFJFU18xMjgwWDgwMF82MEhaX1BJWENMT0NLLCA2MH0sCisJezEyODAsIDk2MCwgUkVTXzEyODBYOTYwXzYwSFpfUElYQ0xPQ0ssIDYwfSwKKwl7MTI4MCwgMTAyNCwgUkVTXzEyODBYMTAyNF82MEhaX1BJWENMT0NLLCA2MH0sCisJezEyODAsIDEwMjQsIFJFU18xMjgwWDEwMjRfNzVIWl9QSVhDTE9DSywgNzV9LAorCXsxMjgwLCAxMDI0LCBSRVNfMTI4MFg3NjhfODVIWl9QSVhDTE9DSywgODV9LAorCXsxNDQwLCAxMDUwLCBSRVNfMTQ0MFgxMDUwXzYwSFpfUElYQ0xPQ0ssIDYwfSwKKwl7MTYwMCwgMTIwMCwgUkVTXzE2MDBYMTIwMF82MEhaX1BJWENMT0NLLCA2MH0sCisJezE2MDAsIDEyMDAsIFJFU18xNjAwWDEyMDBfNzVIWl9QSVhDTE9DSywgNzV9LAorCXsxMjgwLCA3MjAsIFJFU18xMjgwWDcyMF82MEhaX1BJWENMT0NLLCA2MH0sCisJezE5MjAsIDEwODAsIFJFU18xOTIwWDEwODBfNjBIWl9QSVhDTE9DSywgNjB9LAorCXsxNDAwLCAxMDUwLCBSRVNfMTQwMFgxMDUwXzYwSFpfUElYQ0xPQ0ssIDYwfSwKKwl7MTQwMCwgMTA1MCwgUkVTXzE0MDBYMTA1MF83NUhaX1BJWENMT0NLLCA3NX0sCisJezEzNjgsIDc2OCwgUkVTXzEzNjhYNzY4XzYwSFpfUElYQ0xPQ0ssIDYwfSwKKwl7OTYwLCA2MDAsIFJFU185NjBYNjAwXzYwSFpfUElYQ0xPQ0ssIDYwfSwKKwl7MTAwMCwgNjAwLCBSRVNfMTAwMFg2MDBfNjBIWl9QSVhDTE9DSywgNjB9LAorCXsxMDI0LCA1NzYsIFJFU18xMDI0WDU3Nl82MEhaX1BJWENMT0NLLCA2MH0sCisJezEwODgsIDYxMiwgUkVTXzEwODhYNjEyXzYwSFpfUElYQ0xPQ0ssIDYwfSwKKwl7MTE1MiwgNzIwLCBSRVNfMTE1Mlg3MjBfNjBIWl9QSVhDTE9DSywgNjB9LAorCXsxMjAwLCA3MjAsIFJFU18xMjAwWDcyMF82MEhaX1BJWENMT0NLLCA2MH0sCisJezEyODAsIDYwMCwgUkVTXzEyODBYNjAwXzYwSFpfUElYQ0xPQ0ssIDYwfSwKKwl7MTI4MCwgNzIwLCBSRVNfMTI4MFg3MjBfNTBIWl9QSVhDTE9DSywgNTB9LAorCXsxMjgwLCA3NjgsIFJFU18xMjgwWDc2OF81MEhaX1BJWENMT0NLLCA1MH0sCisJezEzNjAsIDc2OCwgUkVTXzEzNjBYNzY4XzYwSFpfUElYQ0xPQ0ssIDYwfSwKKwl7MTM2NiwgNzY4LCBSRVNfMTM2Nlg3NjhfNTBIWl9QSVhDTE9DSywgNTB9LAorCXsxMzY2LCA3NjgsIFJFU18xMzY2WDc2OF82MEhaX1BJWENMT0NLLCA2MH0sCisJezE0NDAsIDkwMCwgUkVTXzE0NDBYOTAwXzYwSFpfUElYQ0xPQ0ssIDYwfSwKKwl7MTQ0MCwgOTAwLCBSRVNfMTQ0MFg5MDBfNzVIWl9QSVhDTE9DSywgNzV9LAorCXsxNjAwLCA5MDAsIFJFU18xNjAwWDkwMF82MEhaX1BJWENMT0NLLCA2MH0sCisJezE2MDAsIDEwMjQsIFJFU18xNjAwWDEwMjRfNjBIWl9QSVhDTE9DSywgNjB9LAorCXsxNjgwLCAxMDUwLCBSRVNfMTY4MFgxMDUwXzYwSFpfUElYQ0xPQ0ssIDYwfSwKKwl7MTY4MCwgMTA1MCwgUkVTXzE2ODBYMTA1MF83NUhaX1BJWENMT0NLLCA3NX0sCisJezE3OTIsIDEzNDQsIFJFU18xNzkyWDEzNDRfNjBIWl9QSVhDTE9DSywgNjB9LAorCXsxODU2LCAxMzkyLCBSRVNfMTg1NlgxMzkyXzYwSFpfUElYQ0xPQ0ssIDYwfSwKKwl7MTkyMCwgMTIwMCwgUkVTXzE5MjBYMTIwMF82MEhaX1BJWENMT0NLLCA2MH0sCisJezE5MjAsIDE0NDAsIFJFU18xOTIwWDE0NDBfNjBIWl9QSVhDTE9DSywgNjB9LAorCXsxOTIwLCAxNDQwLCBSRVNfMTkyMFgxNDQwXzc1SFpfUElYQ0xPQ0ssIDc1fSwKKwl7MjA0OCwgMTUzNiwgUkVTXzIwNDhYMTUzNl82MEhaX1BJWENMT0NLLCA2MH0KK307CisKK3N0cnVjdCBpb19yZWcgQ040MDBfTW9kZVhyZWdzW10gPSB7IHtWSUFTUiwgU1IxMCwgMHhGRiwgMHgwMX0sCit7VklBU1IsIFNSMTUsIDB4MDIsIDB4MDJ9LAore1ZJQVNSLCBTUjE2LCAweEJGLCAweDA4fSwKK3tWSUFTUiwgU1IxNywgMHhGRiwgMHgxRn0sCit7VklBU1IsIFNSMTgsIDB4RkYsIDB4NEV9LAore1ZJQVNSLCBTUjFBLCAweEZCLCAweDA4fSwKK3tWSUFTUiwgU1IxRSwgMHgwRiwgMHgwMX0sCit7VklBU1IsIFNSMkEsIDB4RkYsIDB4MDB9LAore1ZJQUNSLCBDUjBBLCAweEZGLCAweDFFfSwJLyogQ3Vyc29yIFN0YXJ0ICAgICAgICAgICAgICAgICAgICAgICAgKi8KK3tWSUFDUiwgQ1IwQiwgMHhGRiwgMHgwMH0sCS8qIEN1cnNvciBFbmQgICAgICAgICAgICAgICAgICAgICAgICAgICovCit7VklBQ1IsIENSMEUsIDB4RkYsIDB4MDB9LAkvKiBDdXJzb3IgTG9jYXRpb24gSGlnaCAgICAgICAgICAgICAgICAqLwore1ZJQUNSLCBDUjBGLCAweEZGLCAweDAwfSwJLyogQ3Vyc29yIExvY2FsdGlvbiBMb3cgICAgICAgICAgICAgICAgKi8KK3tWSUFDUiwgQ1IzMiwgMHhGRiwgMHgwMH0sCit7VklBQ1IsIENSMzMsIDB4RkYsIDB4MDB9LAore1ZJQUNSLCBDUjM0LCAweEZGLCAweDAwfSwKK3tWSUFDUiwgQ1IzNSwgMHhGRiwgMHgwMH0sCit7VklBQ1IsIENSMzYsIDB4MDgsIDB4MDB9LAore1ZJQUNSLCBDUjYyLCAweEZGLCAweDAwfSwJLyogU2Vjb25kYXJ5IERpc3BsYXkgU3RhcnRpbmcgQWRkcmVzcyAgKi8KK3tWSUFDUiwgQ1I2MywgMHhGRiwgMHgwMH0sCS8qIFNlY29uZGFyeSBEaXNwbGF5IFN0YXJ0aW5nIEFkZHJlc3MgICovCit7VklBQ1IsIENSNjQsIDB4RkYsIDB4MDB9LAkvKiBTZWNvbmRhcnkgRGlzcGxheSBTdGFydGluZyBBZGRyZXNzICAqLwore1ZJQUNSLCBDUjY5LCAweEZGLCAweDAwfSwKK3tWSUFDUiwgQ1I2QSwgMHhGRiwgMHg0MH0sCit7VklBQ1IsIENSNkIsIDB4RkYsIDB4MDB9LAore1ZJQUNSLCBDUjZDLCAweEZGLCAweDAwfSwKK3tWSUFDUiwgQ1I3QSwgMHhGRiwgMHgwMX0sCS8qIExDRCBTY2FsaW5nIFBhcmFtZXRlciAxICAgICAgICAgICAgICovCit7VklBQ1IsIENSN0IsIDB4RkYsIDB4MDJ9LAkvKiBMQ0QgU2NhbGluZyBQYXJhbWV0ZXIgMiAgICAgICAgICAgICAqLwore1ZJQUNSLCBDUjdDLCAweEZGLCAweDAzfSwJLyogTENEIFNjYWxpbmcgUGFyYW1ldGVyIDMgICAgICAgICAgICAgKi8KK3tWSUFDUiwgQ1I3RCwgMHhGRiwgMHgwNH0sCS8qIExDRCBTY2FsaW5nIFBhcmFtZXRlciA0ICAgICAgICAgICAgICovCit7VklBQ1IsIENSN0UsIDB4RkYsIDB4MDd9LAkvKiBMQ0QgU2NhbGluZyBQYXJhbWV0ZXIgNSAgICAgICAgICAgICAqLwore1ZJQUNSLCBDUjdGLCAweEZGLCAweDBBfSwJLyogTENEIFNjYWxpbmcgUGFyYW1ldGVyIDYgICAgICAgICAgICAgKi8KK3tWSUFDUiwgQ1I4MCwgMHhGRiwgMHgwRH0sCS8qIExDRCBTY2FsaW5nIFBhcmFtZXRlciA3ICAgICAgICAgICAgICovCit7VklBQ1IsIENSODEsIDB4RkYsIDB4MTN9LAkvKiBMQ0QgU2NhbGluZyBQYXJhbWV0ZXIgOCAgICAgICAgICAgICAqLwore1ZJQUNSLCBDUjgyLCAweEZGLCAweDE2fSwJLyogTENEIFNjYWxpbmcgUGFyYW1ldGVyIDkgICAgICAgICAgICAgKi8KK3tWSUFDUiwgQ1I4MywgMHhGRiwgMHgxOX0sCS8qIExDRCBTY2FsaW5nIFBhcmFtZXRlciAxMCAgICAgICAgICAgICovCit7VklBQ1IsIENSODQsIDB4RkYsIDB4MUN9LAkvKiBMQ0QgU2NhbGluZyBQYXJhbWV0ZXIgMTEgICAgICAgICAgICAqLwore1ZJQUNSLCBDUjg1LCAweEZGLCAweDFEfSwJLyogTENEIFNjYWxpbmcgUGFyYW1ldGVyIDEyICAgICAgICAgICAgKi8KK3tWSUFDUiwgQ1I4NiwgMHhGRiwgMHgxRX0sCS8qIExDRCBTY2FsaW5nIFBhcmFtZXRlciAxMyAgICAgICAgICAgICovCit7VklBQ1IsIENSODcsIDB4RkYsIDB4MUZ9LAkvKiBMQ0QgU2NhbGluZyBQYXJhbWV0ZXIgMTQgICAgICAgICAgICAqLwore1ZJQUNSLCBDUjg4LCAweEZGLCAweDQwfSwJLyogTENEIFBhbmVsIFR5cGUgICAgICAgICAgICAgICAgICAgICAgKi8KK3tWSUFDUiwgQ1I4OSwgMHhGRiwgMHgwMH0sCS8qIExDRCBUaW1pbmcgQ29udHJvbCAwICAgICAgICAgICAgICAgICovCit7VklBQ1IsIENSOEEsIDB4RkYsIDB4ODh9LAkvKiBMQ0QgVGltaW5nIENvbnRyb2wgMSAgICAgICAgICAgICAgICAqLwore1ZJQUNSLCBDUjhCLCAweEZGLCAweDY5fSwJLyogTENEIFBvd2VyIFNlcXVlbmNlIENvbnRyb2wgMCAgICAgICAgKi8KK3tWSUFDUiwgQ1I4QywgMHhGRiwgMHg1N30sCS8qIExDRCBQb3dlciBTZXF1ZW5jZSBDb250cm9sIDEgICAgICAgICovCit7VklBQ1IsIENSOEQsIDB4RkYsIDB4MDB9LAkvKiBMQ0QgUG93ZXIgU2VxdWVuY2UgQ29udHJvbCAyICAgICAgICAqLwore1ZJQUNSLCBDUjhFLCAweEZGLCAweDdCfSwJLyogTENEIFBvd2VyIFNlcXVlbmNlIENvbnRyb2wgMyAgICAgICAgKi8KK3tWSUFDUiwgQ1I4RiwgMHhGRiwgMHgwM30sCS8qIExDRCBQb3dlciBTZXF1ZW5jZSBDb250cm9sIDQgICAgICAgICovCit7VklBQ1IsIENSOTAsIDB4RkYsIDB4MzB9LAkvKiBMQ0QgUG93ZXIgU2VxdWVuY2UgQ29udHJvbCA1ICAgICAgICAqLwore1ZJQUNSLCBDUjkxLCAweEZGLCAweEEwfSwJLyogMjQvMTIgYml0IExWRFMgRGF0YSBvZmYgICAgICAgICAgICAgKi8KK3tWSUFDUiwgQ1I5NiwgMHhGRiwgMHgwMH0sCit7VklBQ1IsIENSOTcsIDB4RkYsIDB4MDB9LAore1ZJQUNSLCBDUjk5LCAweEZGLCAweDAwfSwKK3tWSUFDUiwgQ1I5QiwgMHhGRiwgMHgwMH0KK307CisKKy8qIFZpZGVvIE1vZGUgVGFibGUgZm9yIFZUMzMxNCBjaGlwc2V0Ki8KKy8qIENvbW1vbiBTZXR0aW5nIGZvciBWaWRlbyBNb2RlICovCitzdHJ1Y3QgaW9fcmVnIENONzAwX01vZGVYcmVnc1tdID0geyB7VklBU1IsIFNSMTAsIDB4RkYsIDB4MDF9LAore1ZJQVNSLCBTUjE1LCAweDAyLCAweDAyfSwKK3tWSUFTUiwgU1IxNiwgMHhCRiwgMHgwOH0sCit7VklBU1IsIFNSMTcsIDB4RkYsIDB4MUZ9LAore1ZJQVNSLCBTUjE4LCAweEZGLCAweDRFfSwKK3tWSUFTUiwgU1IxQSwgMHhGQiwgMHg4Mn0sCit7VklBU1IsIFNSMUIsIDB4RkYsIDB4RjB9LAore1ZJQVNSLCBTUjFGLCAweEZGLCAweDAwfSwKK3tWSUFTUiwgU1IxRSwgMHhGRiwgMHgwMX0sCit7VklBU1IsIFNSMjIsIDB4RkYsIDB4MUZ9LAore1ZJQVNSLCBTUjJBLCAweDBGLCAweDAwfSwKK3tWSUFTUiwgU1IyRSwgMHhGRiwgMHhGRn0sCit7VklBU1IsIFNSM0YsIDB4RkYsIDB4RkZ9LAore1ZJQVNSLCBTUjQwLCAweEY3LCAweDAwfSwKK3tWSUFTUiwgQ1IzMCwgMHhGRiwgMHgwNH0sCit7VklBQ1IsIENSMzIsIDB4RkYsIDB4MDB9LAore1ZJQUNSLCBDUjMzLCAweDdGLCAweDAwfSwKK3tWSUFDUiwgQ1IzNCwgMHhGRiwgMHgwMH0sCit7VklBQ1IsIENSMzUsIDB4RkYsIDB4MDB9LAore1ZJQUNSLCBDUjM2LCAweEZGLCAweDMxfSwKK3tWSUFDUiwgQ1I0MSwgMHhGRiwgMHg4MH0sCit7VklBQ1IsIENSNDIsIDB4RkYsIDB4MDB9LAore1ZJQUNSLCBDUjU1LCAweDgwLCAweDAwfSwKK3tWSUFDUiwgQ1I1RCwgMHg4MCwgMHgwMH0sCS8qSG9yaXpvbnRhbCBSZXRyYWNlIFN0YXJ0IGJpdFsxMV0gc2hvdWxkIGJlIDAqLwore1ZJQUNSLCBDUjYyLCAweEZGLCAweDAwfSwJLyogU2Vjb25kYXJ5IERpc3BsYXkgU3RhcnRpbmcgQWRkcmVzcyAqLwore1ZJQUNSLCBDUjYzLCAweEZGLCAweDAwfSwJLyogU2Vjb25kYXJ5IERpc3BsYXkgU3RhcnRpbmcgQWRkcmVzcyAqLwore1ZJQUNSLCBDUjY0LCAweEZGLCAweDAwfSwJLyogU2Vjb25kYXJ5IERpc3BsYXkgU3RhcnRpbmcgQWRkcmVzcyAqLwore1ZJQUNSLCBDUjY4LCAweEZGLCAweDY3fSwJLyogRGVmYXVsdCBGSUZPIEZvciBJR0EyICovCit7VklBQ1IsIENSNjksIDB4RkYsIDB4MDB9LAore1ZJQUNSLCBDUjZBLCAweEZELCAweDQwfSwKK3tWSUFDUiwgQ1I2QiwgMHhGRiwgMHgwMH0sCit7VklBQ1IsIENSNkMsIDB4RkYsIDB4MDB9LAore1ZJQUNSLCBDUjc3LCAweEZGLCAweDAwfSwJLyogTENEIHNjYWxpbmcgRmFjdG9yICovCit7VklBQ1IsIENSNzgsIDB4RkYsIDB4MDB9LAkvKiBMQ0Qgc2NhbGluZyBGYWN0b3IgKi8KK3tWSUFDUiwgQ1I3OSwgMHhGRiwgMHgwMH0sCS8qIExDRCBzY2FsaW5nIEZhY3RvciAqLwore1ZJQUNSLCBDUjlGLCAweDAzLCAweDAwfSwJLyogTENEIHNjYWxpbmcgRmFjdG9yICovCit7VklBQ1IsIENSN0EsIDB4RkYsIDB4MDF9LAkvKiBMQ0QgU2NhbGluZyBQYXJhbWV0ZXIgMSAqLwore1ZJQUNSLCBDUjdCLCAweEZGLCAweDAyfSwJLyogTENEIFNjYWxpbmcgUGFyYW1ldGVyIDIgKi8KK3tWSUFDUiwgQ1I3QywgMHhGRiwgMHgwM30sCS8qIExDRCBTY2FsaW5nIFBhcmFtZXRlciAzICovCit7VklBQ1IsIENSN0QsIDB4RkYsIDB4MDR9LAkvKiBMQ0QgU2NhbGluZyBQYXJhbWV0ZXIgNCAqLwore1ZJQUNSLCBDUjdFLCAweEZGLCAweDA3fSwJLyogTENEIFNjYWxpbmcgUGFyYW1ldGVyIDUgKi8KK3tWSUFDUiwgQ1I3RiwgMHhGRiwgMHgwQX0sCS8qIExDRCBTY2FsaW5nIFBhcmFtZXRlciA2ICovCit7VklBQ1IsIENSODAsIDB4RkYsIDB4MER9LAkvKiBMQ0QgU2NhbGluZyBQYXJhbWV0ZXIgNyAqLwore1ZJQUNSLCBDUjgxLCAweEZGLCAweDEzfSwJLyogTENEIFNjYWxpbmcgUGFyYW1ldGVyIDggKi8KK3tWSUFDUiwgQ1I4MiwgMHhGRiwgMHgxNn0sCS8qIExDRCBTY2FsaW5nIFBhcmFtZXRlciA5ICovCit7VklBQ1IsIENSODMsIDB4RkYsIDB4MTl9LAkvKiBMQ0QgU2NhbGluZyBQYXJhbWV0ZXIgMTAgKi8KK3tWSUFDUiwgQ1I4NCwgMHhGRiwgMHgxQ30sCS8qIExDRCBTY2FsaW5nIFBhcmFtZXRlciAxMSAqLwore1ZJQUNSLCBDUjg1LCAweEZGLCAweDFEfSwJLyogTENEIFNjYWxpbmcgUGFyYW1ldGVyIDEyICovCit7VklBQ1IsIENSODYsIDB4RkYsIDB4MUV9LAkvKiBMQ0QgU2NhbGluZyBQYXJhbWV0ZXIgMTMgKi8KK3tWSUFDUiwgQ1I4NywgMHhGRiwgMHgxRn0sCS8qIExDRCBTY2FsaW5nIFBhcmFtZXRlciAxNCAqLwore1ZJQUNSLCBDUjg4LCAweEZGLCAweDQwfSwJLyogTENEIFBhbmVsIFR5cGUgKi8KK3tWSUFDUiwgQ1I4OSwgMHhGRiwgMHgwMH0sCS8qIExDRCBUaW1pbmcgQ29udHJvbCAwICovCit7VklBQ1IsIENSOEEsIDB4RkYsIDB4ODh9LAkvKiBMQ0QgVGltaW5nIENvbnRyb2wgMSAqLwore1ZJQUNSLCBDUjhCLCAweEZGLCAweDVEfSwJLyogTENEIFBvd2VyIFNlcXVlbmNlIENvbnRyb2wgMCAqLwore1ZJQUNSLCBDUjhDLCAweEZGLCAweDJCfSwJLyogTENEIFBvd2VyIFNlcXVlbmNlIENvbnRyb2wgMSAqLwore1ZJQUNSLCBDUjhELCAweEZGLCAweDZGfSwJLyogTENEIFBvd2VyIFNlcXVlbmNlIENvbnRyb2wgMiAqLwore1ZJQUNSLCBDUjhFLCAweEZGLCAweDJCfSwJLyogTENEIFBvd2VyIFNlcXVlbmNlIENvbnRyb2wgMyAqLwore1ZJQUNSLCBDUjhGLCAweEZGLCAweDAxfSwJLyogTENEIFBvd2VyIFNlcXVlbmNlIENvbnRyb2wgNCAqLwore1ZJQUNSLCBDUjkwLCAweEZGLCAweDAxfSwJLyogTENEIFBvd2VyIFNlcXVlbmNlIENvbnRyb2wgNSAqLwore1ZJQUNSLCBDUjkxLCAweEZGLCAweEEwfSwJLyogMjQvMTIgYml0IExWRFMgRGF0YSBvZmYgKi8KK3tWSUFDUiwgQ1I5NiwgMHhGRiwgMHgwMH0sCit7VklBQ1IsIENSOTcsIDB4RkYsIDB4MDB9LAore1ZJQUNSLCBDUjk5LCAweEZGLCAweDAwfSwKK3tWSUFDUiwgQ1I5QiwgMHhGRiwgMHgwMH0sCit7VklBQ1IsIENSOUQsIDB4RkYsIDB4ODB9LAore1ZJQUNSLCBDUjlFLCAweEZGLCAweDgwfQorfTsKKworc3RydWN0IGlvX3JlZyBLTTQwMF9Nb2RlWHJlZ3NbXSA9IHsKKwl7VklBU1IsIFNSMTAsIDB4RkYsIDB4MDF9LAkvKiBVbmxvY2sgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICovCisJe1ZJQVNSLCBTUjE2LCAweEZGLCAweDA4fSwJLyogRGlzcGxheSBGSUZPIHRocmVzaG9sZCBDb250cm9sICAqLworCXtWSUFTUiwgU1IxNywgMHhGRiwgMHgxRn0sCS8qIERpc3BsYXkgRklGTyBDb250cm9sICAgICAgICAgICAgKi8KKwl7VklBU1IsIFNSMTgsIDB4RkYsIDB4NEV9LAkvKiBHRlggUFJFUSB0aHJlc2hvbGQgICAgICAgICAgICAgICovCisJe1ZJQVNSLCBTUjFBLCAweEZGLCAweDBhfSwJLyogR0ZYIFBSRVEgdGhyZXNob2xkICAgICAgICAgICAgICAqLworCXtWSUFTUiwgU1IxRiwgMHhGRiwgMHgwMH0sCS8qIE1lbW9yeSBDb250cm9sIDAgICAgICAgICAgICAgICAgKi8KKwl7VklBU1IsIFNSMUIsIDB4RkYsIDB4RjB9LAkvKiBQb3dlciBNYW5hZ2VtZW50IENvbnRyb2wgMCAgICAgICovCisJe1ZJQVNSLCBTUjFFLCAweEZGLCAweDAxfSwJLyogUG93ZXIgTWFuYWdlbWVudCBDb250cm9sICAgICAgICAqLworCXtWSUFTUiwgU1IyMCwgMHhGRiwgMHgwMH0sCS8qIFNlcXVlbmNlciBBcmJpdGVyIENvbnRyb2wgMCAgICAgKi8KKwl7VklBU1IsIFNSMjEsIDB4RkYsIDB4MDB9LAkvKiBTZXF1ZW5jZXIgQXJiaXRlciBDb250cm9sIDEgICAgICovCisJe1ZJQVNSLCBTUjIyLCAweEZGLCAweDFGfSwJLyogRGlzcGxheSBBcmJpdGVyIENvbnRyb2wgMSAgICAgICAqLworCXtWSUFTUiwgU1IyQSwgMHhGRiwgMHgwMH0sCS8qIFBvd2VyIE1hbmFnZW1lbnQgQ29udHJvbCA1ICAgICAgKi8KKwl7VklBU1IsIFNSMkQsIDB4RkYsIDB4RkZ9LAkvKiBQb3dlciBNYW5hZ2VtZW50IENvbnRyb2wgMSAgICAgICovCisJe1ZJQVNSLCBTUjJFLCAweEZGLCAweEZGfSwJLyogUG93ZXIgTWFuYWdlbWVudCBDb250cm9sIDIgICAgICAqLworCXtWSUFDUiwgQ1IwQSwgMHhGRiwgMHgxRX0sCS8qIEN1cnNvciBTdGFydCAgICAgICAgICAgICAgICAgICAgKi8KKwl7VklBQ1IsIENSMEIsIDB4RkYsIDB4MDB9LAkvKiBDdXJzb3IgRW5kICAgICAgICAgICAgICAgICAgICAgICovCisJe1ZJQUNSLCBDUjBFLCAweEZGLCAweDAwfSwJLyogQ3Vyc29yIExvY2F0aW9uIEhpZ2ggICAgICAgICAgICAqLworCXtWSUFDUiwgQ1IwRiwgMHhGRiwgMHgwMH0sCS8qIEN1cnNvciBMb2NhbHRpb24gTG93ICAgICAgICAgICAgKi8KKwl7VklBQ1IsIENSMzMsIDB4RkYsIDB4MDB9LAorCXtWSUFDUiwgQ1I1NSwgMHg4MCwgMHgwMH0sCisJe1ZJQUNSLCBDUjVELCAweDgwLCAweDAwfSwKKwl7VklBQ1IsIENSMzYsIDB4RkYsIDB4MDF9LAkvKiBQb3dlciBNYW5nZW1lbnQgMyAgICAgICAgICAgICAgICAgICovCisJe1ZJQUNSLCBDUjYyLCAweEZGLCAweDAwfSwJLyogU2Vjb25kYXJ5IERpc3BsYXkgU3RhcnRpbmcgQWRkcmVzcyAqLworCXtWSUFDUiwgQ1I2MywgMHhGRiwgMHgwMH0sCS8qIFNlY29uZGFyeSBEaXNwbGF5IFN0YXJ0aW5nIEFkZHJlc3MgKi8KKwl7VklBQ1IsIENSNjQsIDB4RkYsIDB4MDB9LAkvKiBTZWNvbmRhcnkgRGlzcGxheSBTdGFydGluZyBBZGRyZXNzICovCisJe1ZJQUNSLCBDUjY4LCAweEZGLCAweDY3fSwJLyogRGVmYXVsdCBGSUZPIEZvciBJR0EyICAgICAgICAgICAgICAqLworCXtWSUFDUiwgQ1I2QSwgMHgyMCwgMHgyMH0sCS8qIEV4dGVuZGVkIEZJRk8gT24gICAgICAgICAgICAgICAgICAgKi8KKwl7VklBQ1IsIENSN0EsIDB4RkYsIDB4MDF9LAkvKiBMQ0QgU2NhbGluZyBQYXJhbWV0ZXIgMSAgICAgICAgICAgICovCisJe1ZJQUNSLCBDUjdCLCAweEZGLCAweDAyfSwJLyogTENEIFNjYWxpbmcgUGFyYW1ldGVyIDIgICAgICAgICAgICAqLworCXtWSUFDUiwgQ1I3QywgMHhGRiwgMHgwM30sCS8qIExDRCBTY2FsaW5nIFBhcmFtZXRlciAzICAgICAgICAgICAgKi8KKwl7VklBQ1IsIENSN0QsIDB4RkYsIDB4MDR9LAkvKiBMQ0QgU2NhbGluZyBQYXJhbWV0ZXIgNCAgICAgICAgICAgICovCisJe1ZJQUNSLCBDUjdFLCAweEZGLCAweDA3fSwJLyogTENEIFNjYWxpbmcgUGFyYW1ldGVyIDUgICAgICAgICAgICAqLworCXtWSUFDUiwgQ1I3RiwgMHhGRiwgMHgwQX0sCS8qIExDRCBTY2FsaW5nIFBhcmFtZXRlciA2ICAgICAgICAgICAgKi8KKwl7VklBQ1IsIENSODAsIDB4RkYsIDB4MER9LAkvKiBMQ0QgU2NhbGluZyBQYXJhbWV0ZXIgNyAgICAgICAgICAgICovCisJe1ZJQUNSLCBDUjgxLCAweEZGLCAweDEzfSwJLyogTENEIFNjYWxpbmcgUGFyYW1ldGVyIDggICAgICAgICAgICAqLworCXtWSUFDUiwgQ1I4MiwgMHhGRiwgMHgxNn0sCS8qIExDRCBTY2FsaW5nIFBhcmFtZXRlciA5ICAgICAgICAgICAgKi8KKwl7VklBQ1IsIENSODMsIDB4RkYsIDB4MTl9LAkvKiBMQ0QgU2NhbGluZyBQYXJhbWV0ZXIgMTAgICAgICAgICAgICovCisJe1ZJQUNSLCBDUjg0LCAweEZGLCAweDFDfSwJLyogTENEIFNjYWxpbmcgUGFyYW1ldGVyIDExICAgICAgICAgICAqLworCXtWSUFDUiwgQ1I4NSwgMHhGRiwgMHgxRH0sCS8qIExDRCBTY2FsaW5nIFBhcmFtZXRlciAxMiAgICAgICAgICAgKi8KKwl7VklBQ1IsIENSODYsIDB4RkYsIDB4MUV9LAkvKiBMQ0QgU2NhbGluZyBQYXJhbWV0ZXIgMTMgICAgICAgICAgICovCisJe1ZJQUNSLCBDUjg3LCAweEZGLCAweDFGfSwJLyogTENEIFNjYWxpbmcgUGFyYW1ldGVyIDE0ICAgICAgICAgICAqLworCXtWSUFDUiwgQ1I4OCwgMHhGRiwgMHg0MH0sCS8qIExDRCBQYW5lbCBUeXBlICAgICAgICAgICAgICAgICAgICAgKi8KKwl7VklBQ1IsIENSODksIDB4RkYsIDB4MDB9LAkvKiBMQ0QgVGltaW5nIENvbnRyb2wgMCAgICAgICAgICAgICAgICovCisJe1ZJQUNSLCBDUjhBLCAweEZGLCAweDg4fSwJLyogTENEIFRpbWluZyBDb250cm9sIDEgICAgICAgICAgICAgICAqLworCXtWSUFDUiwgQ1I4QiwgMHhGRiwgMHgyRH0sCS8qIExDRCBQb3dlciBTZXF1ZW5jZSBDb250cm9sIDAgICAgICAgKi8KKwl7VklBQ1IsIENSOEMsIDB4RkYsIDB4MkR9LAkvKiBMQ0QgUG93ZXIgU2VxdWVuY2UgQ29udHJvbCAxICAgICAgICovCisJe1ZJQUNSLCBDUjhELCAweEZGLCAweEM4fSwJLyogTENEIFBvd2VyIFNlcXVlbmNlIENvbnRyb2wgMiAgICAgICAqLworCXtWSUFDUiwgQ1I4RSwgMHhGRiwgMHgzNn0sCS8qIExDRCBQb3dlciBTZXF1ZW5jZSBDb250cm9sIDMgICAgICAgKi8KKwl7VklBQ1IsIENSOEYsIDB4RkYsIDB4MDB9LAkvKiBMQ0QgUG93ZXIgU2VxdWVuY2UgQ29udHJvbCA0ICAgICAgICovCisJe1ZJQUNSLCBDUjkwLCAweEZGLCAweDEwfSwJLyogTENEIFBvd2VyIFNlcXVlbmNlIENvbnRyb2wgNSAgICAgICAqLworCXtWSUFDUiwgQ1I5MSwgMHhGRiwgMHhBMH0sCS8qIDI0LzEyIGJpdCBMVkRTIERhdGEgb2ZmICAgICAgICAgICAgKi8KKwl7VklBQ1IsIENSOTYsIDB4RkYsIDB4MDN9LAkvKiBEVlAwICAgICAgICA7IERWUDAgQ2xvY2sgU2tldyAqLworCXtWSUFDUiwgQ1I5NywgMHhGRiwgMHgwM30sCS8qIERGUCBoaWdoICAgIDsgREZQSCBDbG9jayBTa2V3ICovCisJe1ZJQUNSLCBDUjk5LCAweEZGLCAweDAzfSwJLyogREZQIGxvdyAgICAgICAgICAgOyBERlBMIENsb2NrIFNrZXcqLworCXtWSUFDUiwgQ1I5QiwgMHhGRiwgMHgwN30JLyogRFZJIG9uIERWUDEgICAgICAgOyBEVlAxIENsb2NrIFNrZXcqLworfTsKKworLyogRm9yIFZUMzMyNDogQ29tbW9uIFNldHRpbmcgZm9yIFZpZGVvIE1vZGUgKi8KK3N0cnVjdCBpb19yZWcgQ1g3MDBfTW9kZVhyZWdzW10gPSB7IHtWSUFTUiwgU1IxMCwgMHhGRiwgMHgwMX0sCit7VklBU1IsIFNSMTUsIDB4MDIsIDB4MDJ9LAore1ZJQVNSLCBTUjE2LCAweEJGLCAweDA4fSwKK3tWSUFTUiwgU1IxNywgMHhGRiwgMHgxRn0sCit7VklBU1IsIFNSMTgsIDB4RkYsIDB4NEV9LAore1ZJQVNSLCBTUjFBLCAweEZCLCAweDA4fSwKK3tWSUFTUiwgU1IxQiwgMHhGRiwgMHhGMH0sCit7VklBU1IsIFNSMUUsIDB4RkYsIDB4MDF9LAore1ZJQVNSLCBTUjJBLCAweEZGLCAweDAwfSwKK3tWSUFTUiwgU1IyRCwgMHhGRiwgMHhGRn0sCS8qIFZDSyBhbmQgTENLIFBMTCBwb3dlciBvbi4gICAgICAgICAgICovCit7VklBQ1IsIENSMEEsIDB4RkYsIDB4MUV9LAkvKiBDdXJzb3IgU3RhcnQgICAgICAgICAgICAgICAgICAgICAgICAqLwore1ZJQUNSLCBDUjBCLCAweEZGLCAweDAwfSwJLyogQ3Vyc29yIEVuZCAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KK3tWSUFDUiwgQ1IwRSwgMHhGRiwgMHgwMH0sCS8qIEN1cnNvciBMb2NhdGlvbiBIaWdoICAgICAgICAgICAgICAgICovCit7VklBQ1IsIENSMEYsIDB4RkYsIDB4MDB9LAkvKiBDdXJzb3IgTG9jYWx0aW9uIExvdyAgICAgICAgICAgICAgICAqLwore1ZJQUNSLCBDUjMyLCAweEZGLCAweDAwfSwKK3tWSUFDUiwgQ1IzMywgMHhGRiwgMHgwMH0sCit7VklBQ1IsIENSMzQsIDB4RkYsIDB4MDB9LAore1ZJQUNSLCBDUjM1LCAweEZGLCAweDAwfSwKK3tWSUFDUiwgQ1IzNiwgMHgwOCwgMHgwMH0sCit7VklBQ1IsIENSNDcsIDB4QzgsIDB4MDB9LAkvKiBDbGVhciBWQ0sgUGx1cy4gKi8KK3tWSUFDUiwgQ1I2MiwgMHhGRiwgMHgwMH0sCS8qIFNlY29uZGFyeSBEaXNwbGF5IFN0YXJ0aW5nIEFkZHJlc3MgICovCit7VklBQ1IsIENSNjMsIDB4RkYsIDB4MDB9LAkvKiBTZWNvbmRhcnkgRGlzcGxheSBTdGFydGluZyBBZGRyZXNzICAqLwore1ZJQUNSLCBDUjY0LCAweEZGLCAweDAwfSwJLyogU2Vjb25kYXJ5IERpc3BsYXkgU3RhcnRpbmcgQWRkcmVzcyAgKi8KK3tWSUFDUiwgQ1JBMywgMHhGRiwgMHgwMH0sCS8qIFNlY29uZGFyeSBEaXNwbGF5IFN0YXJ0aW5nIEFkZHJlc3MgICovCit7VklBQ1IsIENSNjksIDB4RkYsIDB4MDB9LAore1ZJQUNSLCBDUjZBLCAweEZGLCAweDQwfSwKK3tWSUFDUiwgQ1I2QiwgMHhGRiwgMHgwMH0sCit7VklBQ1IsIENSNkMsIDB4RkYsIDB4MDB9LAore1ZJQUNSLCBDUjdBLCAweEZGLCAweDAxfSwJLyogTENEIFNjYWxpbmcgUGFyYW1ldGVyIDEgICAgICAgICAgICAgKi8KK3tWSUFDUiwgQ1I3QiwgMHhGRiwgMHgwMn0sCS8qIExDRCBTY2FsaW5nIFBhcmFtZXRlciAyICAgICAgICAgICAgICovCit7VklBQ1IsIENSN0MsIDB4RkYsIDB4MDN9LAkvKiBMQ0QgU2NhbGluZyBQYXJhbWV0ZXIgMyAgICAgICAgICAgICAqLwore1ZJQUNSLCBDUjdELCAweEZGLCAweDA0fSwJLyogTENEIFNjYWxpbmcgUGFyYW1ldGVyIDQgICAgICAgICAgICAgKi8KK3tWSUFDUiwgQ1I3RSwgMHhGRiwgMHgwN30sCS8qIExDRCBTY2FsaW5nIFBhcmFtZXRlciA1ICAgICAgICAgICAgICovCit7VklBQ1IsIENSN0YsIDB4RkYsIDB4MEF9LAkvKiBMQ0QgU2NhbGluZyBQYXJhbWV0ZXIgNiAgICAgICAgICAgICAqLwore1ZJQUNSLCBDUjgwLCAweEZGLCAweDBEfSwJLyogTENEIFNjYWxpbmcgUGFyYW1ldGVyIDcgICAgICAgICAgICAgKi8KK3tWSUFDUiwgQ1I4MSwgMHhGRiwgMHgxM30sCS8qIExDRCBTY2FsaW5nIFBhcmFtZXRlciA4ICAgICAgICAgICAgICovCit7VklBQ1IsIENSODIsIDB4RkYsIDB4MTZ9LAkvKiBMQ0QgU2NhbGluZyBQYXJhbWV0ZXIgOSAgICAgICAgICAgICAqLwore1ZJQUNSLCBDUjgzLCAweEZGLCAweDE5fSwJLyogTENEIFNjYWxpbmcgUGFyYW1ldGVyIDEwICAgICAgICAgICAgKi8KK3tWSUFDUiwgQ1I4NCwgMHhGRiwgMHgxQ30sCS8qIExDRCBTY2FsaW5nIFBhcmFtZXRlciAxMSAgICAgICAgICAgICovCit7VklBQ1IsIENSODUsIDB4RkYsIDB4MUR9LAkvKiBMQ0QgU2NhbGluZyBQYXJhbWV0ZXIgMTIgICAgICAgICAgICAqLwore1ZJQUNSLCBDUjg2LCAweEZGLCAweDFFfSwJLyogTENEIFNjYWxpbmcgUGFyYW1ldGVyIDEzICAgICAgICAgICAgKi8KK3tWSUFDUiwgQ1I4NywgMHhGRiwgMHgxRn0sCS8qIExDRCBTY2FsaW5nIFBhcmFtZXRlciAxNCAgICAgICAgICAgICovCit7VklBQ1IsIENSODgsIDB4RkYsIDB4NDB9LAkvKiBMQ0QgUGFuZWwgVHlwZSAgICAgICAgICAgICAgICAgICAgICAqLwore1ZJQUNSLCBDUjg5LCAweEZGLCAweDAwfSwJLyogTENEIFRpbWluZyBDb250cm9sIDAgICAgICAgICAgICAgICAgKi8KK3tWSUFDUiwgQ1I4QSwgMHhGRiwgMHg4OH0sCS8qIExDRCBUaW1pbmcgQ29udHJvbCAxICAgICAgICAgICAgICAgICovCit7VklBQ1IsIENSRDQsIDB4RkYsIDB4ODF9LAkvKiBTZWNvbmQgcG93ZXIgc2VxdWVuY2UgY29udHJvbCAgICAgICAqLwore1ZJQUNSLCBDUjhCLCAweEZGLCAweDVEfSwJLyogTENEIFBvd2VyIFNlcXVlbmNlIENvbnRyb2wgMCAgICAgICAgKi8KK3tWSUFDUiwgQ1I4QywgMHhGRiwgMHgyQn0sCS8qIExDRCBQb3dlciBTZXF1ZW5jZSBDb250cm9sIDEgICAgICAgICovCit7VklBQ1IsIENSOEQsIDB4RkYsIDB4NkZ9LAkvKiBMQ0QgUG93ZXIgU2VxdWVuY2UgQ29udHJvbCAyICAgICAgICAqLwore1ZJQUNSLCBDUjhFLCAweEZGLCAweDJCfSwJLyogTENEIFBvd2VyIFNlcXVlbmNlIENvbnRyb2wgMyAgICAgICAgKi8KK3tWSUFDUiwgQ1I4RiwgMHhGRiwgMHgwMX0sCS8qIExDRCBQb3dlciBTZXF1ZW5jZSBDb250cm9sIDQgICAgICAgICovCit7VklBQ1IsIENSOTAsIDB4RkYsIDB4MDF9LAkvKiBMQ0QgUG93ZXIgU2VxdWVuY2UgQ29udHJvbCA1ICAgICAgICAqLwore1ZJQUNSLCBDUjkxLCAweEZGLCAweDgwfSwJLyogMjQvMTIgYml0IExWRFMgRGF0YSBvZmYgICAgICAgICAgICAgKi8KK3tWSUFDUiwgQ1I5NiwgMHhGRiwgMHgwMH0sCit7VklBQ1IsIENSOTcsIDB4RkYsIDB4MDB9LAore1ZJQUNSLCBDUjk5LCAweEZGLCAweDAwfSwKK3tWSUFDUiwgQ1I5QiwgMHhGRiwgMHgwMH0sCit7VklBQ1IsIENSRDIsIDB4RkYsIDB4RkZ9CS8qIFRNRFMvTFZEUyBjb250cm9sIHJlZ2lzdGVyLiAgICAgICAgICovCit9OworCisvKiBGb3IgVlQzMzUzOiBDb21tb24gU2V0dGluZyBmb3IgVmlkZW8gTW9kZSAqLworc3RydWN0IGlvX3JlZyBWWDgwMF9Nb2RlWHJlZ3NbXSA9IHsge1ZJQVNSLCBTUjEwLCAweEZGLCAweDAxfSwKK3tWSUFTUiwgU1IxNSwgMHgwMiwgMHgwMn0sCit7VklBU1IsIFNSMTYsIDB4QkYsIDB4MDh9LAore1ZJQVNSLCBTUjE3LCAweEZGLCAweDFGfSwKK3tWSUFTUiwgU1IxOCwgMHhGRiwgMHg0RX0sCit7VklBU1IsIFNSMUEsIDB4RkIsIDB4MDh9LAore1ZJQVNSLCBTUjFCLCAweEZGLCAweEYwfSwKK3tWSUFTUiwgU1IxRSwgMHhGRiwgMHgwMX0sCit7VklBU1IsIFNSMkEsIDB4RkYsIDB4MDB9LAore1ZJQVNSLCBTUjJELCAweEZGLCAweEZGfSwJLyogVkNLIGFuZCBMQ0sgUExMIHBvd2VyIG9uLiAgICAgICAgICAgKi8KK3tWSUFDUiwgQ1IwQSwgMHhGRiwgMHgxRX0sCS8qIEN1cnNvciBTdGFydCAgICAgICAgICAgICAgICAgICAgICAgICovCit7VklBQ1IsIENSMEIsIDB4RkYsIDB4MDB9LAkvKiBDdXJzb3IgRW5kICAgICAgICAgICAgICAgICAgICAgICAgICAqLwore1ZJQUNSLCBDUjBFLCAweEZGLCAweDAwfSwJLyogQ3Vyc29yIExvY2F0aW9uIEhpZ2ggICAgICAgICAgICAgICAgKi8KK3tWSUFDUiwgQ1IwRiwgMHhGRiwgMHgwMH0sCS8qIEN1cnNvciBMb2NhbHRpb24gTG93ICAgICAgICAgICAgICAgICovCit7VklBQ1IsIENSMzIsIDB4RkYsIDB4MDB9LAore1ZJQUNSLCBDUjMzLCAweEZGLCAweDAwfSwKK3tWSUFDUiwgQ1IzNCwgMHhGRiwgMHgwMH0sCit7VklBQ1IsIENSMzUsIDB4RkYsIDB4MDB9LAore1ZJQUNSLCBDUjM2LCAweDA4LCAweDAwfSwKK3tWSUFDUiwgQ1I0NywgMHhDOCwgMHgwMH0sCS8qIENsZWFyIFZDSyBQbHVzLiAqLwore1ZJQUNSLCBDUjYyLCAweEZGLCAweDAwfSwJLyogU2Vjb25kYXJ5IERpc3BsYXkgU3RhcnRpbmcgQWRkcmVzcyAgKi8KK3tWSUFDUiwgQ1I2MywgMHhGRiwgMHgwMH0sCS8qIFNlY29uZGFyeSBEaXNwbGF5IFN0YXJ0aW5nIEFkZHJlc3MgICovCit7VklBQ1IsIENSNjQsIDB4RkYsIDB4MDB9LAkvKiBTZWNvbmRhcnkgRGlzcGxheSBTdGFydGluZyBBZGRyZXNzICAqLwore1ZJQUNSLCBDUkEzLCAweEZGLCAweDAwfSwJLyogU2Vjb25kYXJ5IERpc3BsYXkgU3RhcnRpbmcgQWRkcmVzcyAgKi8KK3tWSUFDUiwgQ1I2OSwgMHhGRiwgMHgwMH0sCit7VklBQ1IsIENSNkEsIDB4RkYsIDB4NDB9LAore1ZJQUNSLCBDUjZCLCAweEZGLCAweDAwfSwKK3tWSUFDUiwgQ1I2QywgMHhGRiwgMHgwMH0sCit7VklBQ1IsIENSN0EsIDB4RkYsIDB4MDF9LAkvKiBMQ0QgU2NhbGluZyBQYXJhbWV0ZXIgMSAgICAgICAgICAgICAqLwore1ZJQUNSLCBDUjdCLCAweEZGLCAweDAyfSwJLyogTENEIFNjYWxpbmcgUGFyYW1ldGVyIDIgICAgICAgICAgICAgKi8KK3tWSUFDUiwgQ1I3QywgMHhGRiwgMHgwM30sCS8qIExDRCBTY2FsaW5nIFBhcmFtZXRlciAzICAgICAgICAgICAgICovCit7VklBQ1IsIENSN0QsIDB4RkYsIDB4MDR9LAkvKiBMQ0QgU2NhbGluZyBQYXJhbWV0ZXIgNCAgICAgICAgICAgICAqLwore1ZJQUNSLCBDUjdFLCAweEZGLCAweDA3fSwJLyogTENEIFNjYWxpbmcgUGFyYW1ldGVyIDUgICAgICAgICAgICAgKi8KK3tWSUFDUiwgQ1I3RiwgMHhGRiwgMHgwQX0sCS8qIExDRCBTY2FsaW5nIFBhcmFtZXRlciA2ICAgICAgICAgICAgICovCit7VklBQ1IsIENSODAsIDB4RkYsIDB4MER9LAkvKiBMQ0QgU2NhbGluZyBQYXJhbWV0ZXIgNyAgICAgICAgICAgICAqLwore1ZJQUNSLCBDUjgxLCAweEZGLCAweDEzfSwJLyogTENEIFNjYWxpbmcgUGFyYW1ldGVyIDggICAgICAgICAgICAgKi8KK3tWSUFDUiwgQ1I4MiwgMHhGRiwgMHgxNn0sCS8qIExDRCBTY2FsaW5nIFBhcmFtZXRlciA5ICAgICAgICAgICAgICovCit7VklBQ1IsIENSODMsIDB4RkYsIDB4MTl9LAkvKiBMQ0QgU2NhbGluZyBQYXJhbWV0ZXIgMTAgICAgICAgICAgICAqLwore1ZJQUNSLCBDUjg0LCAweEZGLCAweDFDfSwJLyogTENEIFNjYWxpbmcgUGFyYW1ldGVyIDExICAgICAgICAgICAgKi8KK3tWSUFDUiwgQ1I4NSwgMHhGRiwgMHgxRH0sCS8qIExDRCBTY2FsaW5nIFBhcmFtZXRlciAxMiAgICAgICAgICAgICovCit7VklBQ1IsIENSODYsIDB4RkYsIDB4MUV9LAkvKiBMQ0QgU2NhbGluZyBQYXJhbWV0ZXIgMTMgICAgICAgICAgICAqLwore1ZJQUNSLCBDUjg3LCAweEZGLCAweDFGfSwJLyogTENEIFNjYWxpbmcgUGFyYW1ldGVyIDE0ICAgICAgICAgICAgKi8KK3tWSUFDUiwgQ1I4OCwgMHhGRiwgMHg0MH0sCS8qIExDRCBQYW5lbCBUeXBlICAgICAgICAgICAgICAgICAgICAgICovCit7VklBQ1IsIENSODksIDB4RkYsIDB4MDB9LAkvKiBMQ0QgVGltaW5nIENvbnRyb2wgMCAgICAgICAgICAgICAgICAqLwore1ZJQUNSLCBDUjhBLCAweEZGLCAweDg4fSwJLyogTENEIFRpbWluZyBDb250cm9sIDEgICAgICAgICAgICAgICAgKi8KK3tWSUFDUiwgQ1JENCwgMHhGRiwgMHg4MX0sCS8qIFNlY29uZCBwb3dlciBzZXF1ZW5jZSBjb250cm9sICAgICAgICovCit7VklBQ1IsIENSOEIsIDB4RkYsIDB4NUR9LAkvKiBMQ0QgUG93ZXIgU2VxdWVuY2UgQ29udHJvbCAwICAgICAgICAqLwore1ZJQUNSLCBDUjhDLCAweEZGLCAweDJCfSwJLyogTENEIFBvd2VyIFNlcXVlbmNlIENvbnRyb2wgMSAgICAgICAgKi8KK3tWSUFDUiwgQ1I4RCwgMHhGRiwgMHg2Rn0sCS8qIExDRCBQb3dlciBTZXF1ZW5jZSBDb250cm9sIDIgICAgICAgICovCit7VklBQ1IsIENSOEUsIDB4RkYsIDB4MkJ9LAkvKiBMQ0QgUG93ZXIgU2VxdWVuY2UgQ29udHJvbCAzICAgICAgICAqLwore1ZJQUNSLCBDUjhGLCAweEZGLCAweDAxfSwJLyogTENEIFBvd2VyIFNlcXVlbmNlIENvbnRyb2wgNCAgICAgICAgKi8KK3tWSUFDUiwgQ1I5MCwgMHhGRiwgMHgwMX0sCS8qIExDRCBQb3dlciBTZXF1ZW5jZSBDb250cm9sIDUgICAgICAgICovCit7VklBQ1IsIENSOTEsIDB4RkYsIDB4ODB9LAkvKiAyNC8xMiBiaXQgTFZEUyBEYXRhIG9mZiAgICAgICAgICAgICAqLwore1ZJQUNSLCBDUjk2LCAweEZGLCAweDAwfSwKK3tWSUFDUiwgQ1I5NywgMHhGRiwgMHgwMH0sCit7VklBQ1IsIENSOTksIDB4RkYsIDB4MDB9LAore1ZJQUNSLCBDUjlCLCAweEZGLCAweDAwfSwKK3tWSUFDUiwgQ1JEMiwgMHhGRiwgMHhGRn0JLyogVE1EUy9MVkRTIGNvbnRyb2wgcmVnaXN0ZXIuICAgICAgICAgKi8KK307CisKKy8qIFZpZGVvIE1vZGUgVGFibGUgKi8KKy8qIENvbW1vbiBTZXR0aW5nIGZvciBWaWRlbyBNb2RlICovCitzdHJ1Y3QgaW9fcmVnIENMRTI2Nl9Nb2RlWHJlZ3NbXSA9IHsge1ZJQVNSLCBTUjFFLCAweEYwLCAweDAwfSwKK3tWSUFTUiwgU1IyQSwgMHgwRiwgMHgwMH0sCit7VklBU1IsIFNSMTUsIDB4MDIsIDB4MDJ9LAore1ZJQVNSLCBTUjE2LCAweEJGLCAweDA4fSwKK3tWSUFTUiwgU1IxNywgMHhGRiwgMHgxRn0sCit7VklBU1IsIFNSMTgsIDB4RkYsIDB4NEV9LAore1ZJQVNSLCBTUjFBLCAweEZCLCAweDA4fSwKKwore1ZJQUNSLCBDUjMyLCAweEZGLCAweDAwfSwKK3tWSUFDUiwgQ1IzNCwgMHhGRiwgMHgwMH0sCit7VklBQ1IsIENSMzUsIDB4RkYsIDB4MDB9LAore1ZJQUNSLCBDUjM2LCAweDA4LCAweDAwfSwKK3tWSUFDUiwgQ1I2QSwgMHhGRiwgMHg4MH0sCit7VklBQ1IsIENSNkEsIDB4RkYsIDB4QzB9LAorCit7VklBQ1IsIENSNTUsIDB4ODAsIDB4MDB9LAore1ZJQUNSLCBDUjVELCAweDgwLCAweDAwfSwKKwore1ZJQUdSLCBHUjIwLCAweEZGLCAweDAwfSwKK3tWSUFHUiwgR1IyMSwgMHhGRiwgMHgwMH0sCit7VklBR1IsIEdSMjIsIDB4RkYsIDB4MDB9LAorCS8qIExDRCBQYXJhbWV0ZXJzICovCit7VklBQ1IsIENSN0EsIDB4RkYsIDB4MDF9LAkvKiBMQ0QgUGFyYW1ldGVyIDEgKi8KK3tWSUFDUiwgQ1I3QiwgMHhGRiwgMHgwMn0sCS8qIExDRCBQYXJhbWV0ZXIgMiAqLwore1ZJQUNSLCBDUjdDLCAweEZGLCAweDAzfSwJLyogTENEIFBhcmFtZXRlciAzICovCit7VklBQ1IsIENSN0QsIDB4RkYsIDB4MDR9LAkvKiBMQ0QgUGFyYW1ldGVyIDQgKi8KK3tWSUFDUiwgQ1I3RSwgMHhGRiwgMHgwN30sCS8qIExDRCBQYXJhbWV0ZXIgNSAqLwore1ZJQUNSLCBDUjdGLCAweEZGLCAweDBBfSwJLyogTENEIFBhcmFtZXRlciA2ICovCit7VklBQ1IsIENSODAsIDB4RkYsIDB4MER9LAkvKiBMQ0QgUGFyYW1ldGVyIDcgKi8KK3tWSUFDUiwgQ1I4MSwgMHhGRiwgMHgxM30sCS8qIExDRCBQYXJhbWV0ZXIgOCAqLwore1ZJQUNSLCBDUjgyLCAweEZGLCAweDE2fSwJLyogTENEIFBhcmFtZXRlciA5ICovCit7VklBQ1IsIENSODMsIDB4RkYsIDB4MTl9LAkvKiBMQ0QgUGFyYW1ldGVyIDEwICovCit7VklBQ1IsIENSODQsIDB4RkYsIDB4MUN9LAkvKiBMQ0QgUGFyYW1ldGVyIDExICovCit7VklBQ1IsIENSODUsIDB4RkYsIDB4MUR9LAkvKiBMQ0QgUGFyYW1ldGVyIDEyICovCit7VklBQ1IsIENSODYsIDB4RkYsIDB4MUV9LAkvKiBMQ0QgUGFyYW1ldGVyIDEzICovCit7VklBQ1IsIENSODcsIDB4RkYsIDB4MUZ9LAkvKiBMQ0QgUGFyYW1ldGVyIDE0ICovCisKK307CisKKy8qIE1vZGU6MTAyNFg3NjggKi8KK3N0cnVjdCBpb19yZWcgUE0xMDI0eDc2OFtdID0geyB7VklBU1IsIDB4MTYsIDB4QkYsIDB4MEN9LAore1ZJQVNSLCAweDE4LCAweEZGLCAweDRDfQorfTsKKworc3RydWN0IHBhdGNoX3RhYmxlIHJlc19wYXRjaF90YWJsZVtdID0geworCXtWSUFfUkVTXzEwMjRYNzY4LCBBUlJBWV9TSVpFKFBNMTAyNHg3NjgpLCBQTTEwMjR4NzY4fQorfTsKKworLyogc3RydWN0IFZQSVRUYWJsZSB7CisJdW5zaWduZWQgY2hhciAgTWlzYzsKKwl1bnNpZ25lZCBjaGFyICBTUltTdGRTUl07CisJdW5zaWduZWQgY2hhciAgQ1JbU3RkQ1JdOworCXVuc2lnbmVkIGNoYXIgIEdSW1N0ZEdSXTsKKwl1bnNpZ25lZCBjaGFyICBBUltTdGRBUl07CisgfTsqLworCitzdHJ1Y3QgVlBJVFRhYmxlIFZQSVQgPSB7CisJLyogTXNpYyAqLworCTB4QzcsCisJLyogU2VxdWVuY2VyICovCisJezB4MDEsIDB4MEYsIDB4MDAsIDB4MEV9LAorCS8qIEdyYXBoaWMgQ29udHJvbGxlciAqLworCXsweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDBGLCAweEZGfSwKKwkvKiBBdHRyaWJ1dGUgQ29udHJvbGxlciAqLworCXsweDAwLCAweDAxLCAweDAyLCAweDAzLCAweDA0LCAweDA1LCAweDA2LCAweDA3LAorCSAweDA4LCAweDA5LCAweDBBLCAweDBCLCAweDBDLCAweDBELCAweDBFLCAweDBGLAorCSAweDAxLCAweDAwLCAweDBGLCAweDAwfQorfTsKKworLyoqKioqKioqKioqKioqKioqKioqLworLyogTW9kZSBUYWJsZSAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqLworCisvKiA0ODB4NjQwICovCitzdHJ1Y3QgY3J0X21vZGVfdGFibGUgQ1JUTTQ4MHg2NDBbXSA9IHsKKwkvKiByX3JhdGUsICAgICAgICAgIHZjbGssICAgICAgICAgICAgICBoc3AsICAgICAgICAgICAgIHZzcCAgICovCisJLyogSFQsICBIQSwgIEhCUywgSEJFLCBIU1MsIEhTRSwgVlQsICBWQSwgIFZCUywgVkJFLCBWU1MsIFZTRSAqLworCXtSRUZSRVNIXzYwLCBDTEtfMjVfMTc1TSwgTTQ4MFg2NDBfUjYwX0hTUCwgTTQ4MFg2NDBfUjYwX1ZTUCwKKwkgezYyNCwgNDgwLCA0ODAsIDE0NCwgNTA0LCA0OCwgNjYzLCA2NDAsIDY0MCwgMjMsIDY0MSwgM30gfQkvKiBHVEYqLworfTsKKworLyogNjQweDQ4MCovCitzdHJ1Y3QgY3J0X21vZGVfdGFibGUgQ1JUTTY0MHg0ODBbXSA9IHsKKwkvKnJfcmF0ZSx2Y2xrLGhzcCx2c3AgKi8KKwkvKkhULCAgSEEsICBIQlMsIEhCRSwgSFNTLCBIU0UsIFZULCAgVkEsICBWQlMsIFZCRSwgVlNTLCBWU0UgKi8KKwl7UkVGUkVTSF82MCwgQ0xLXzI1XzE3NU0sIE02NDBYNDgwX1I2MF9IU1AsIE02NDBYNDgwX1I2MF9WU1AsCisJIHs4MDAsIDY0MCwgNjQ4LCAxNDQsIDY1NiwgOTYsIDUyNSwgNDgwLCA0ODAsIDQ1LCA0OTAsIDJ9IH0sCisJe1JFRlJFU0hfNzUsIENMS18zMV81MDBNLCBNNjQwWDQ4MF9SNzVfSFNQLCBNNjQwWDQ4MF9SNzVfVlNQLAorCSB7ODQwLCA2NDAsIDY0MCwgMjAwLCA2NTYsIDY0LCA1MDAsIDQ4MCwgNDgwLCAyMCwgNDgxLCAzfSB9LAorCXtSRUZSRVNIXzg1LCBDTEtfMzZfMDAwTSwgTTY0MFg0ODBfUjg1X0hTUCwgTTY0MFg0ODBfUjg1X1ZTUCwKKwkgezgzMiwgNjQwLCA2NDAsIDE5MiwgNjk2LCA1NiwgNTA5LCA0ODAsIDQ4MCwgMjksIDQ4MSwgM30gfSwKKwl7UkVGUkVTSF8xMDAsIENMS180M18xNjNNLCBNNjQwWDQ4MF9SMTAwX0hTUCwgTTY0MFg0ODBfUjEwMF9WU1AsCisJIHs4NDgsIDY0MCwgNjQwLCAyMDgsIDY4MCwgNjQsIDUwOSwgNDgwLCA0ODAsIDI5LCA0ODEsIDN9IH0sIC8qR1RGKi8KKwkgICAge1JFRlJFU0hfMTIwLCBDTEtfNTJfNDA2TSwgTTY0MFg0ODBfUjEyMF9IU1AsCisJICAgICBNNjQwWDQ4MF9SMTIwX1ZTUCwKKwkgICAgIHs4NDgsIDY0MCwgNjQwLCAyMDgsIDY4MCwgNjQsIDUxNSwgNDgwLCA0ODAsIDM1LCA0ODEsCisJICAgICAgM30gfSAvKkdURiovCit9OworCisvKjcyMHg0ODAgKEdURikqLworc3RydWN0IGNydF9tb2RlX3RhYmxlIENSVE03MjB4NDgwW10gPSB7CisJLypyX3JhdGUsdmNsayxoc3AsdnNwICAgICAgKi8KKwkvKkhULCBIQSwgIEhCUywgSEJFLCBIU1MsIEhTRSwgVlQsICBWQSwgIFZCUywgVkJFLCBWU1MsIFZTRSAqLworCXtSRUZSRVNIXzYwLCBDTEtfMjZfODgwTSwgTTcyMFg0ODBfUjYwX0hTUCwgTTcyMFg0ODBfUjYwX1ZTUCwKKwkgezg5NiwgNzIwLCA3MjAsIDE3NiwgNzM2LCA3MiwgNDk3LCA0ODAsIDQ4MCwgMTcsIDQ4MSwgM30gfQorCit9OworCisvKjcyMHg1NzYgKEdURikqLworc3RydWN0IGNydF9tb2RlX3RhYmxlIENSVE03MjB4NTc2W10gPSB7CisJLypyX3JhdGUsdmNsayxoc3AsdnNwICovCisJLypIVCwgIEhBLCAgSEJTLCBIQkUsIEhTUywgSFNFLCBWVCwgIFZBLCAgVkJTLCBWQkUsIFZTUywgVlNFICovCisJe1JFRlJFU0hfNjAsIENMS18zMl82NjhNLCBNNzIwWDU3Nl9SNjBfSFNQLCBNNzIwWDU3Nl9SNjBfVlNQLAorCSB7OTEyLCA3MjAsIDcyMCwgMTkyLCA3NDQsIDcyLCA1OTcsIDU3NiwgNTc2LCAyMSwgNTc3LCAzfSB9Cit9OworCisvKiA4MDB4NDgwIChDVlQpICovCitzdHJ1Y3QgY3J0X21vZGVfdGFibGUgQ1JUTTgwMHg0ODBbXSA9IHsKKwkvKiByX3JhdGUsICAgICAgICAgIHZjbGssICAgICAgICAgICAgICBoc3AsICAgICAgICAgICAgIHZzcCAgICovCisJLyogSFQsICBIQSwgIEhCUywgSEJFLCBIU1MsIEhTRSwgVlQsICBWQSwgIFZCUywgVkJFLCBWU1MsIFZTRSAqLworCXtSRUZSRVNIXzYwLCBDTEtfMjlfNTgxTSwgTTgwMFg0ODBfUjYwX0hTUCwgTTgwMFg0ODBfUjYwX1ZTUCwKKwkgezk5MiwgODAwLCA4MDAsIDE5MiwgODI0LCA3MiwgNTAwLCA0ODAsIDQ4MCwgMjAsIDQ4MywgN30gfQorfTsKKworLyogODAweDYwMCovCitzdHJ1Y3QgY3J0X21vZGVfdGFibGUgQ1JUTTgwMHg2MDBbXSA9IHsKKwkvKnJfcmF0ZSx2Y2xrLGhzcCx2c3AgICAgICovCisJLypIVCwgICBIQSwgIEhCUywgSEJFLCBIU1MsIEhTRSwgVlQsICBWQSwgIFZCUywgVkJFLCBWU1MsIFZTRSAqLworCXtSRUZSRVNIXzYwLCBDTEtfNDBfMDAwTSwgTTgwMFg2MDBfUjYwX0hTUCwgTTgwMFg2MDBfUjYwX1ZTUCwKKwkgezEwNTYsIDgwMCwgODAwLCAyNTYsIDg0MCwgMTI4LCA2MjgsIDYwMCwgNjAwLCAyOCwgNjAxLCA0fSB9LAorCXtSRUZSRVNIXzc1LCBDTEtfNDlfNTAwTSwgTTgwMFg2MDBfUjc1X0hTUCwgTTgwMFg2MDBfUjc1X1ZTUCwKKwkgezEwNTYsIDgwMCwgODAwLCAyNTYsIDgxNiwgODAsIDYyNSwgNjAwLCA2MDAsIDI1LCA2MDEsIDN9IH0sCisJe1JFRlJFU0hfODUsIENMS181Nl8yNTBNLCBNODAwWDYwMF9SODVfSFNQLCBNODAwWDYwMF9SODVfVlNQLAorCSB7MTA0OCwgODAwLCA4MDAsIDI0OCwgODMyLCA2NCwgNjMxLCA2MDAsIDYwMCwgMzEsIDYwMSwgM30gfSwKKwl7UkVGUkVTSF8xMDAsIENMS182OF8xNzlNLCBNODAwWDYwMF9SMTAwX0hTUCwgTTgwMFg2MDBfUjEwMF9WU1AsCisJIHsxMDcyLCA4MDAsIDgwMCwgMjcyLCA4NDgsIDg4LCA2MzYsIDYwMCwgNjAwLCAzNiwgNjAxLCAzfSB9LAorCXtSRUZSRVNIXzEyMCwgQ0xLXzgzXzk1ME0sIE04MDBYNjAwX1IxMjBfSFNQLAorCQkgIE04MDBYNjAwX1IxMjBfVlNQLAorCQkgIHsxMDg4LCA4MDAsIDgwMCwgMjg4LCA4NTYsIDg4LCA2NDMsIDYwMCwgNjAwLCA0MywgNjAxLAorCQkgICAzfSB9Cit9OworCisvKiA4NDh4NDgwIChDVlQpICovCitzdHJ1Y3QgY3J0X21vZGVfdGFibGUgQ1JUTTg0OHg0ODBbXSA9IHsKKwkvKiByX3JhdGUsICAgICAgICAgIHZjbGssICAgICAgICAgICAgICBoc3AsICAgICAgICAgICAgIHZzcCAgICovCisJLyogSFQsICBIQSwgIEhCUywgSEJFLCBIU1MsIEhTRSwgVlQsICBWQSwgIFZCUywgVkJFLCBWU1MsIFZTRSAqLworCXtSRUZSRVNIXzYwLCBDTEtfMzFfNTAwTSwgTTg0OFg0ODBfUjYwX0hTUCwgTTg0OFg0ODBfUjYwX1ZTUCwKKwkgezEwNTYsIDg0OCwgODQ4LCAyMDgsIDg3MiwgODAsIDUwMCwgNDgwLCA0ODAsIDIwLCA0ODMsIDV9IH0KK307CisKKy8qODU2eDQ4MCAoR1RGKSBjb252ZXJ0IHRvIDg1Mng0ODAqLworc3RydWN0IGNydF9tb2RlX3RhYmxlIENSVE04NTJ4NDgwW10gPSB7CisJLypyX3JhdGUsdmNsayxoc3AsdnNwICAgICAqLworCS8qSFQsICAgSEEsICBIQlMsIEhCRSwgSFNTLCBIU0UsIFZULCAgVkEsICBWQlMsIFZCRSwgVlNTLCBWU0UgKi8KKwl7UkVGUkVTSF82MCwgQ0xLXzMxXzcyOE0sIE04NTJYNDgwX1I2MF9IU1AsIE04NTJYNDgwX1I2MF9WU1AsCisJezEwNjQsIDg1NiwgODU2LCAyMDgsIDg3MiwgODgsIDQ5NywgNDgwLCA0ODAsIDE3LCA0ODEsIDN9IH0KK307CisKKy8qMTAyNHg1MTIgKEdURikqLworc3RydWN0IGNydF9tb2RlX3RhYmxlIENSVE0xMDI0eDUxMltdID0geworCS8qcl9yYXRlLHZjbGssaHNwLHZzcCAgICAgKi8KKwkvKkhULCAgIEhBLCAgSEJTLCBIQkUsIEhTUywgSFNFLCBWVCwgIFZBLCAgVkJTLCBWQkUsIFZTUywgVlNFICovCisJe1JFRlJFU0hfNjAsIENMS180MV8yOTFNLCBNMTAyNFg1MTJfUjYwX0hTUCwgTTEwMjRYNTEyX1I2MF9WU1AsCisJIHsxMjk2LCAxMDI0LCAxMDI0LCAyNzIsIDEwNTYsIDEwNCwgNTMxLCA1MTIsIDUxMiwgMTksIDUxMywgM30gfQorCit9OworCisvKiAxMDI0eDYwMCovCitzdHJ1Y3QgY3J0X21vZGVfdGFibGUgQ1JUTTEwMjR4NjAwW10gPSB7CisJLypyX3JhdGUsdmNsayxoc3AsdnNwICovCisJLypIVCwgIEhBLCAgIEhCUywgIEhCRSwgSFNTLCAgSFNFLCBWVCwgIFZBLCAgVkJTLCBWQkUsIFZTUywgVlNFICovCisJe1JFRlJFU0hfNjAsIENMS180OF84NzVNLCBNMTAyNFg2MDBfUjYwX0hTUCwgTTEwMjRYNjAwX1I2MF9WU1AsCisJIHsxMzEyLCAxMDI0LCAxMDI0LCAyODgsIDEwNjQsIDEwNCwgNjIyLCA2MDAsIDYwMCwgMjIsIDYwMSwgM30gfSwKK307CisKKy8qIDEwMjR4NzY4Ki8KK3N0cnVjdCBjcnRfbW9kZV90YWJsZSBDUlRNMTAyNHg3NjhbXSA9IHsKKwkvKnJfcmF0ZSx2Y2xrLGhzcCx2c3AgKi8KKwkvKkhULCAgSEEsICAgSEJTLCAgSEJFLCBIU1MsICBIU0UsIFZULCAgVkEsICBWQlMsIFZCRSwgVlNTLCBWU0UgKi8KKwl7UkVGUkVTSF82MCwgQ0xLXzY1XzAwME0sIE0xMDI0WDc2OF9SNjBfSFNQLCBNMTAyNFg3NjhfUjYwX1ZTUCwKKwl7MTM0NCwgMTAyNCwgMTAyNCwgMzIwLCAxMDQ4LCAxMzYsIDgwNiwgNzY4LCA3NjgsIDM4LCA3NzEsIDZ9IH0sCisJe1JFRlJFU0hfNzUsIENMS183OF83NTBNLCBNMTAyNFg3NjhfUjc1X0hTUCwgTTEwMjRYNzY4X1I3NV9WU1AsCisJezEzMTIsIDEwMjQsIDEwMjQsIDI4OCwgMTA0MCwgOTYsIDgwMCwgNzY4LCA3NjgsIDMyLCA3NjksIDN9IH0sCisJe1JFRlJFU0hfODUsIENMS185NF81MDBNLCBNMTAyNFg3NjhfUjg1X0hTUCwgTTEwMjRYNzY4X1I4NV9WU1AsCisJezEzNzYsIDEwMjQsIDEwMjQsIDM1MiwgMTA3MiwgOTYsIDgwOCwgNzY4LCA3NjgsIDQwLCA3NjksIDN9IH0sCisJe1JFRlJFU0hfMTAwLCBDTEtfMTEzXzMwOU0sIE0xMDI0WDc2OF9SMTAwX0hTUCwgTTEwMjRYNzY4X1IxMDBfVlNQLAorCXsxMzkyLCAxMDI0LCAxMDI0LCAzNjgsIDEwOTYsIDExMiwgODE0LCA3NjgsIDc2OCwgNDYsIDc2OSwgM30gfQorfTsKKworLyogMTE1Mng4NjQqLworc3RydWN0IGNydF9tb2RlX3RhYmxlIENSVE0xMTUyeDg2NFtdID0geworCS8qcl9yYXRlLHZjbGssaHNwLHZzcCAgICAgICovCisJLypIVCwgIEhBLCAgIEhCUywgIEhCRSwgSFNTLCAgSFNFLCBWVCwgIFZBLCAgVkJTLCBWQkUsIFZTUywgVlNFICovCisJe1JFRlJFU0hfNzUsIENMS18xMDhfMDAwTSwgTTExNTJYODY0X1I3NV9IU1AsIE0xMTUyWDg2NF9SNzVfVlNQLAorCSB7MTYwMCwgMTE1MiwgMTE1MiwgNDQ4LCAxMjE2LCAxMjgsIDkwMCwgODY0LCA4NjQsIDM2LCA4NjUsIDN9IH0KKworfTsKKworLyogMTI4MHg3MjAgKEhETUkgNzIwUCkqLworc3RydWN0IGNydF9tb2RlX3RhYmxlIENSVE0xMjgweDcyMFtdID0geworCS8qcl9yYXRlLHZjbGssaHNwLHZzcCAqLworCS8qSFQsICBIQSwgICBIQlMsICBIQkUsIEhTUywgIEhTRSwgVlQsICBWQSwgIFZCUywgVkJFLCBWU1MsIFZTRSAgICAgICovCisJe1JFRlJFU0hfNjAsIENMS183NF80ODFNLCBNMTI4MFg3MjBfUjYwX0hTUCwgTTEyODBYNzIwX1I2MF9WU1AsCisJIHsxNjQ4LCAxMjgwLCAxMjgwLCAzNjgsIDEzOTIsIDQwLCA3NTAsIDcyMCwgNzIwLCAzMCwgNzI1LCA1fSB9LAorCXtSRUZSRVNIXzUwLCBDTEtfNjBfNDY2TSwgTTEyODBYNzIwX1I1MF9IU1AsIE0xMjgwWDcyMF9SNTBfVlNQLAorCSB7MTYzMiwgMTI4MCwgMTI4MCwgMzUyLCAxMzI4LCAxMjgsIDc0MSwgNzIwLCA3MjAsIDIxLCA3MjEsIDN9IH0KK307CisKKy8qMTI4MHg3NjggKEdURikqLworc3RydWN0IGNydF9tb2RlX3RhYmxlIENSVE0xMjgweDc2OFtdID0geworCS8qcl9yYXRlLHZjbGssaHNwLHZzcCAgICAgKi8KKwkvKkhULCAgSEEsICAgSEJTLCAgSEJFLCBIU1MsICBIU0UsIFZULCAgVkEsICBWQlMsIFZCRSwgVlNTLCBWU0UgKi8KKwl7UkVGUkVTSF82MCwgQ0xLXzgwXzEzNk0sIE0xMjgwWDc2OF9SNjBfSFNQLCBNMTI4MFg3NjhfUjYwX1ZTUCwKKwkgezE2ODAsIDEyODAsIDEyODAsIDQwMCwgMTM0NCwgMTM2LCA3OTUsIDc2OCwgNzY4LCAyNywgNzY5LCAzfSB9LAorCXtSRUZSRVNIXzUwLCBDTEtfNjVfMTc4TSwgTTEyODBYNzY4X1I1MF9IU1AsIE0xMjgwWDc2OF9SNTBfVlNQLAorCSB7MTY0OCwgMTI4MCwgMTI4MCwgMzY4LCAxMzM2LCAxMjgsIDc5MSwgNzY4LCA3NjgsIDIzLCA3NjksIDN9IH0KK307CisKKy8qIDEyODB4ODAwIChDVlQpICovCitzdHJ1Y3QgY3J0X21vZGVfdGFibGUgQ1JUTTEyODB4ODAwW10gPSB7CisJLyogcl9yYXRlLCAgICAgICAgICB2Y2xrLCAgICAgICAgICAgICAgaHNwLCAgICAgICAgICAgICB2c3AgICAqLworCS8qIEhULCAgSEEsICBIQlMsIEhCRSwgSFNTLCBIU0UsIFZULCAgVkEsICBWQlMsIFZCRSwgVlNTLCBWU0UgKi8KKwl7UkVGUkVTSF82MCwgQ0xLXzgzXzM3NU0sIE0xMjgwWDgwMF9SNjBfSFNQLCBNMTI4MFg4MDBfUjYwX1ZTUCwKKwkgezE2ODAsIDEyODAsIDEyODAsIDQwMCwgMTM1MiwgMTI4LCA4MzEsIDgwMCwgODAwLCAzMSwgODAzLCA2fSB9Cit9OworCisvKjEyODB4OTYwKi8KK3N0cnVjdCBjcnRfbW9kZV90YWJsZSBDUlRNMTI4MHg5NjBbXSA9IHsKKwkvKnJfcmF0ZSx2Y2xrLGhzcCx2c3AgKi8KKwkvKkhULCAgSEEsICAgSEJTLCAgSEJFLCBIU1MsICBIU0UsIFZULCAgVkEsICBWQlMsIFZCRSwgVlNTLCBWU0UgKi8KKwl7UkVGUkVTSF82MCwgQ0xLXzEwOF8wMDBNLCBNMTI4MFg5NjBfUjYwX0hTUCwgTTEyODBYOTYwX1I2MF9WU1AsCisJIHsxODAwLCAxMjgwLCAxMjgwLCA1MjAsIDEzNzYsIDExMiwgMTAwMCwgOTYwLCA5NjAsIDQwLCA5NjEsIDN9IH0KK307CisKKy8qIDEyODB4MTAyNCovCitzdHJ1Y3QgY3J0X21vZGVfdGFibGUgQ1JUTTEyODB4MTAyNFtdID0geworCS8qcl9yYXRlLHZjbGssLGhzcCx2c3AgKi8KKwkvKkhULCAgSEEsICAgSEJTLCAgSEJFLCBIU1MsICBIU0UsIFZULCAgVkEsICBWQlMsIFZCRSwgVlNTLCBWU0UgKi8KKwl7UkVGUkVTSF82MCwgQ0xLXzEwOF8wMDBNLCBNMTI4MFgxMDI0X1I2MF9IU1AsIE0xMjgwWDEwMjRfUjYwX1ZTUCwKKwkgezE2ODgsIDEyODAsIDEyODAsIDQwOCwgMTMyOCwgMTEyLCAxMDY2LCAxMDI0LCAxMDI0LCA0MiwgMTAyNSwKKwkgIDN9IH0sCisJe1JFRlJFU0hfNzUsIENMS18xMzVfMDAwTSwgTTEyODBYMTAyNF9SNzVfSFNQLCBNMTI4MFgxMDI0X1I3NV9WU1AsCisJIHsxNjg4LCAxMjgwLCAxMjgwLCA0MDgsIDEyOTYsIDE0NCwgMTA2NiwgMTAyNCwgMTAyNCwgNDIsIDEwMjUsCisJICAzfSB9LAorCXtSRUZSRVNIXzg1LCBDTEtfMTU3XzUwME0sIE0xMjgwWDEwMjRfUjg1X0hTUCwgTTEyODBYMTAyNF9SODVfVlNQLAorCSB7MTcyOCwgMTI4MCwgMTI4MCwgNDQ4LCAxMzQ0LCAxNjAsIDEwNzIsIDEwMjQsIDEwMjQsIDQ4LCAxMDI1LCAzfSB9Cit9OworCisvKiAxMzY4eDc2OCAoR1RGKSAqLworc3RydWN0IGNydF9tb2RlX3RhYmxlIENSVE0xMzY4eDc2OFtdID0geworCS8qIHJfcmF0ZSwgIHZjbGssIGhzcCwgdnNwICovCisJLyogSFQsICBIQSwgIEhCUywgSEJFLCBIU1MsIEhTRSwgVlQsICBWQSwgIFZCUywgVkJFLCBWU1MsIFZTRSAqLworCXtSRUZSRVNIXzYwLCBDTEtfODVfODYwTSwgTTEzNjhYNzY4X1I2MF9IU1AsIE0xMzY4WDc2OF9SNjBfVlNQLAorCSB7MTgwMCwgMTM2OCwgMTM2OCwgNDMyLCAxNDQwLCAxNDQsIDc5NSwgNzY4LCA3NjgsIDI3LCA3NjksIDN9IH0KK307CisKKy8qMTQ0MHgxMDUwIChHVEYpKi8KK3N0cnVjdCBjcnRfbW9kZV90YWJsZSBDUlRNMTQ0MHgxMDUwW10gPSB7CisJLypyX3JhdGUsdmNsayxoc3AsdnNwICAgICAgKi8KKwkvKkhULCAgSEEsICAgSEJTLCAgSEJFLCBIU1MsICBIU0UsIFZULCAgVkEsICBWQlMsIFZCRSwgVlNTLCBWU0UgKi8KKwl7UkVGUkVTSF82MCwgQ0xLXzEyNV8xMDRNLCBNMTQ0MFgxMDUwX1I2MF9IU1AsIE0xNDQwWDEwNTBfUjYwX1ZTUCwKKwkgezE5MzYsIDE0NDAsIDE0NDAsIDQ5NiwgMTUzNiwgMTUyLCAxMDc3LCAxMDQwLCAxMDQwLCAzNywgMTA0MSwgM30gfQorfTsKKworLyogMTYwMHgxMjAwKi8KK3N0cnVjdCBjcnRfbW9kZV90YWJsZSBDUlRNMTYwMHgxMjAwW10gPSB7CisJLypyX3JhdGUsdmNsayxoc3AsdnNwICovCisJLypIVCwgIEhBLCAgIEhCUywgIEhCRSwgSFNTLCAgSFNFLCBWVCwgIFZBLCAgVkJTLCBWQkUsIFZTUywgVlNFICovCisJe1JFRlJFU0hfNjAsIENMS18xNjJfMDAwTSwgTTE2MDBYMTIwMF9SNjBfSFNQLCBNMTYwMFgxMjAwX1I2MF9WU1AsCisJIHsyMTYwLCAxNjAwLCAxNjAwLCA1NjAsIDE2NjQsIDE5MiwgMTI1MCwgMTIwMCwgMTIwMCwgNTAsIDEyMDEsCisJICAzfSB9LAorCXtSRUZSRVNIXzc1LCBDTEtfMjAyXzUwME0sIE0xNjAwWDEyMDBfUjc1X0hTUCwgTTE2MDBYMTIwMF9SNzVfVlNQLAorCSB7MjE2MCwgMTYwMCwgMTYwMCwgNTYwLCAxNjY0LCAxOTIsIDEyNTAsIDEyMDAsIDEyMDAsIDUwLCAxMjAxLCAzfSB9CisKK307CisKKy8qIDE2ODB4MTA1MCAoQ1ZUKSAqLworc3RydWN0IGNydF9tb2RlX3RhYmxlIENSVE0xNjgweDEwNTBbXSA9IHsKKwkvKiByX3JhdGUsICAgICAgICAgIHZjbGssICAgICAgICAgICAgICBoc3AsICAgICAgICAgICAgIHZzcCAgKi8KKwkvKiBIVCwgIEhBLCAgSEJTLCBIQkUsIEhTUywgSFNFLCAgICBWVCwgIFZBLCAgVkJTLCBWQkUsICBWU1MsIFZTRSAqLworCXtSRUZSRVNIXzYwLCBDTEtfMTQ2Xzc2ME0sIE0xNjgweDEwNTBfUjYwX0hTUCwgTTE2ODB4MTA1MF9SNjBfVlNQLAorCSB7MjI0MCwgMTY4MCwgMTY4MCwgNTYwLCAxNzg0LCAxNzYsIDEwODksIDEwNTAsIDEwNTAsIDM5LCAxMDUzLAorCSAgNn0gfSwKKwl7UkVGUkVTSF83NSwgQ0xLXzE4N18wMDBNLCBNMTY4MHgxMDUwX1I3NV9IU1AsIE0xNjgweDEwNTBfUjc1X1ZTUCwKKwkgezIyNzIsIDE2ODAsIDE2ODAsIDU5MiwgMTgwMCwgMTc2LCAxMDk5LCAxMDUwLCAxMDUwLCA0OSwgMTA1MywgNn0gfQorfTsKKworLyogMTY4MHgxMDUwIChDVlQgUmVkdWNlIEJsYW5raW5nKSAqLworc3RydWN0IGNydF9tb2RlX3RhYmxlIENSVE0xNjgweDEwNTBfUkJbXSA9IHsKKwkvKiByX3JhdGUsICAgICAgICAgIHZjbGssICAgICAgICAgICAgICBoc3AsICAgICAgICAgICAgIHZzcCAgICovCisJLyogSFQsICBIQSwgIEhCUywgSEJFLCBIU1MsIEhTRSwgICAgVlQsICBWQSwgIFZCUywgVkJFLCAgVlNTLCBWU0UgKi8KKwl7UkVGUkVTSF82MCwgQ0xLXzExOV8wMDBNLCBNMTY4MHgxMDUwX1JCX1I2MF9IU1AsCisJIE0xNjgweDEwNTBfUkJfUjYwX1ZTUCwKKwkgezE4NDAsIDE2ODAsIDE2ODAsIDE2MCwgMTcyOCwgMzIsIDEwODAsIDEwNTAsIDEwNTAsIDMwLCAxMDUzLCA2fSB9Cit9OworCisvKiAxOTIweDEwODAgKENWVCkqLworc3RydWN0IGNydF9tb2RlX3RhYmxlIENSVE0xOTIweDEwODBbXSA9IHsKKwkvKnJfcmF0ZSx2Y2xrLGhzcCx2c3AgKi8KKwkvKkhULCAgSEEsICAgSEJTLCAgSEJFLCBIU1MsICBIU0UsIFZULCAgVkEsICBWQlMsIFZCRSwgVlNTLCBWU0UgKi8KKwl7UkVGUkVTSF82MCwgQ0xLXzE3Ml83OThNLCBNMTkyMFgxMDgwX1I2MF9IU1AsIE0xOTIwWDEwODBfUjYwX1ZTUCwKKwkgezI1NzYsIDE5MjAsIDE5MjAsIDY1NiwgMjA0OCwgMjAwLCAxMTIwLCAxMDgwLCAxMDgwLCA0MCwgMTA4MywgNX0gfQorfTsKKworLyogMTkyMHgxMDgwIChDVlQgd2l0aCBSZWR1Y2UgQmxhbmtpbmcpICovCitzdHJ1Y3QgY3J0X21vZGVfdGFibGUgQ1JUTTE5MjB4MTA4MF9SQltdID0geworCS8qIHJfcmF0ZSwgICAgICAgICAgdmNsaywgICAgICAgICAgICAgIGhzcCwgICAgICAgICAgICAgdnNwICAgKi8KKwkvKiBIVCwgIEhBLCAgSEJTLCBIQkUsIEhTUywgSFNFLCBWVCwgIFZBLCAgVkJTLCBWQkUsIFZTUywgVlNFICovCisJe1JFRlJFU0hfNjAsIENMS18xMzhfNDAwTSwgTTE5MjBYMTA4MF9SQl9SNjBfSFNQLAorCSBNMTkyMFgxMDgwX1JCX1I2MF9WU1AsCisJIHsyMDgwLCAxOTIwLCAxOTIwLCAxNjAsIDE5NjgsIDMyLCAxMTExLCAxMDgwLCAxMDgwLCAzMSwgMTA4MywgNX0gfQorfTsKKworLyogMTkyMHgxNDQwKi8KK3N0cnVjdCBjcnRfbW9kZV90YWJsZSBDUlRNMTkyMHgxNDQwW10gPSB7CisJLypyX3JhdGUsdmNsayxoc3AsdnNwICovCisJLypIVCwgIEhBLCAgIEhCUywgIEhCRSwgSFNTLCAgSFNFLCBWVCwgIFZBLCAgVkJTLCBWQkUsIFZTUywgVlNFICovCisJe1JFRlJFU0hfNjAsIENMS18yMzRfMDAwTSwgTTE5MjBYMTQ0MF9SNjBfSFNQLCBNMTkyMFgxNDQwX1I2MF9WU1AsCisJIHsyNjAwLCAxOTIwLCAxOTIwLCA2ODAsIDIwNDgsIDIwOCwgMTUwMCwgMTQ0MCwgMTQ0MCwgNjAsIDE0NDEsCisJICAzfSB9LAorCXtSRUZSRVNIXzc1LCBDTEtfMjk3XzUwME0sIE0xOTIwWDE0NDBfUjc1X0hTUCwgTTE5MjBYMTQ0MF9SNzVfVlNQLAorCSB7MjY0MCwgMTkyMCwgMTkyMCwgNzIwLCAyMDY0LCAyMjQsIDE1MDAsIDE0NDAsIDE0NDAsIDYwLCAxNDQxLCAzfSB9Cit9OworCisvKiAxNDAweDEwNTAgKENWVCkgKi8KK3N0cnVjdCBjcnRfbW9kZV90YWJsZSBDUlRNMTQwMHgxMDUwW10gPSB7CisJLyogcl9yYXRlLCAgICAgICAgICB2Y2xrLCAgICAgICAgICAgICAgaHNwLCAgICAgICAgICAgICB2c3AgICAqLworCS8qIEhULCAgSEEsICBIQlMsIEhCRSwgIEhTUywgSFNFLCAgIFZULCAgVkEsICBWQlMsIFZCRSwgIFZTUywgVlNFICovCisJe1JFRlJFU0hfNjAsIENMS18xMjFfNzUwTSwgTTE0MDBYMTA1MF9SNjBfSFNQLCBNMTQwMFgxMDUwX1I2MF9WU1AsCisJIHsxODY0LCAxNDAwLCAxNDAwLCA0NjQsIDE0ODgsIDE0NCwgMTA4OSwgMTA1MCwgMTA1MCwgMzksIDEwNTMsCisJICA0fSB9LAorCXtSRUZSRVNIXzc1LCBDTEtfMTU2XzAwME0sIE0xNDAwWDEwNTBfUjc1X0hTUCwgTTE0MDBYMTA1MF9SNzVfVlNQLAorCSB7MTg5NiwgMTQwMCwgMTQwMCwgNDk2LCAxNTA0LCAxNDQsIDEwOTksIDEwNTAsIDEwNTAsIDQ5LCAxMDUzLCA0fSB9Cit9OworCisvKiAxNDAweDEwNTAgKENWVCBSZWR1Y2UgQmxhbmtpbmcpICovCitzdHJ1Y3QgY3J0X21vZGVfdGFibGUgQ1JUTTE0MDB4MTA1MF9SQltdID0geworCS8qIHJfcmF0ZSwgICAgICAgICAgdmNsaywgICAgICAgICAgICAgIGhzcCwgICAgICAgICAgICAgdnNwICAgKi8KKwkvKiBIVCwgIEhBLCAgSEJTLCBIQkUsICBIU1MsIEhTRSwgICBWVCwgIFZBLCAgVkJTLCBWQkUsICBWU1MsIFZTRSAqLworCXtSRUZSRVNIXzYwLCBDTEtfMTAxXzAwME0sIE0xNDAwWDEwNTBfUkJfUjYwX0hTUCwKKwkgTTE0MDBYMTA1MF9SQl9SNjBfVlNQLAorCSB7MTU2MCwgMTQwMCwgMTQwMCwgMTYwLCAxNDQ4LCAzMiwgMTA4MCwgMTA1MCwgMTA1MCwgMzAsIDEwNTMsIDR9IH0KK307CisKKy8qIDk2MHg2MDAgKENWVCkgKi8KK3N0cnVjdCBjcnRfbW9kZV90YWJsZSBDUlRNOTYweDYwMFtdID0geworCS8qIHJfcmF0ZSwgICAgICAgICAgdmNsaywgICAgICAgICAgICAgIGhzcCwgICAgICAgICAgICAgdnNwICAgKi8KKwkvKiBIVCwgIEhBLCAgSEJTLCBIQkUsIEhTUywgSFNFLCBWVCwgIFZBLCAgVkJTLCBWQkUsIFZTUywgVlNFICovCisJe1JFRlJFU0hfNjAsIENMS180NV8yNTBNLCBNOTYwWDYwMF9SNjBfSFNQLCBNOTYwWDYwMF9SNjBfVlNQLAorCSB7MTIxNiwgOTYwLCA5NjAsIDI1NiwgOTkyLCA5NiwgNjI0LCA2MDAsIDYwMCwgMjQsIDYwMywgNn0gfQorfTsKKworLyogMTAwMHg2MDAgKEdURikgKi8KK3N0cnVjdCBjcnRfbW9kZV90YWJsZSBDUlRNMTAwMHg2MDBbXSA9IHsKKwkvKiByX3JhdGUsICAgICAgICAgIHZjbGssICAgICAgICAgICAgICBoc3AsICAgICAgICAgICAgIHZzcCAgICovCisJLyogSFQsICBIQSwgIEhCUywgSEJFLCBIU1MsIEhTRSwgVlQsICBWQSwgIFZCUywgVkJFLCBWU1MsIFZTRSAqLworCXtSRUZSRVNIXzYwLCBDTEtfNDhfMDAwTSwgTTEwMDBYNjAwX1I2MF9IU1AsIE0xMDAwWDYwMF9SNjBfVlNQLAorCSB7MTI4OCwgMTAwMCwgMTAwMCwgMjg4LCAxMDQwLCAxMDQsIDYyMiwgNjAwLCA2MDAsIDIyLCA2MDEsIDN9IH0KK307CisKKy8qIDEwMjR4NTc2IChHVEYpICovCitzdHJ1Y3QgY3J0X21vZGVfdGFibGUgQ1JUTTEwMjR4NTc2W10gPSB7CisJLyogcl9yYXRlLCAgICAgICAgICB2Y2xrLCAgICAgICAgICAgICAgaHNwLCAgICAgICAgICAgICB2c3AgICAqLworCS8qIEhULCAgSEEsICBIQlMsIEhCRSwgSFNTLCBIU0UsIFZULCAgVkEsICBWQlMsIFZCRSwgVlNTLCBWU0UgKi8KKwl7UkVGUkVTSF82MCwgQ0xLXzQ2Xzk5Nk0sIE0xMDI0WDU3Nl9SNjBfSFNQLCBNMTAyNFg1NzZfUjYwX1ZTUCwKKwkgezEzMTIsIDEwMjQsIDEwMjQsIDI4OCwgMTA2NCwgMTA0LCA1OTcsIDU3NiwgNTc2LCAyMSwgNTc3LCAzfSB9Cit9OworCisvKiAxMDg4eDYxMiAoQ1ZUKSAqLworc3RydWN0IGNydF9tb2RlX3RhYmxlIENSVE0xMDg4eDYxMltdID0geworCS8qIHJfcmF0ZSwgICAgICAgICAgdmNsaywgICAgICAgICAgICAgIGhzcCwgICAgICAgICAgICAgdnNwICAgKi8KKwkvKiBIVCwgIEhBLCAgSEJTLCBIQkUsIEhTUywgSFNFLCBWVCwgIFZBLCAgVkJTLCBWQkUsIFZTUywgVlNFICovCisJe1JFRlJFU0hfNjAsIENMS181Ml85NzdNLCBNMTA4OFg2MTJfUjYwX0hTUCwgTTEwODhYNjEyX1I2MF9WU1AsCisJIHsxMzkyLCAxMDg4LCAxMDg4LCAzMDQsIDExMzYsIDEwNCwgNjM2LCA2MTIsIDYxMiwgMjQsIDYxNSwgNX0gfQorfTsKKworLyogMTE1Mng3MjAgKENWVCkgKi8KK3N0cnVjdCBjcnRfbW9kZV90YWJsZSBDUlRNMTE1Mng3MjBbXSA9IHsKKwkvKiByX3JhdGUsICAgICAgICAgIHZjbGssICAgICAgICAgICAgICBoc3AsICAgICAgICAgICAgIHZzcCAgICovCisJLyogSFQsICBIQSwgIEhCUywgSEJFLCBIU1MsIEhTRSwgVlQsICBWQSwgIFZCUywgVkJFLCBWU1MsIFZTRSAqLworCXtSRUZSRVNIXzYwLCBDTEtfNjZfNzUwTSwgTTExNTJYNzIwX1I2MF9IU1AsIE0xMTUyWDcyMF9SNjBfVlNQLAorCSB7MTQ4OCwgMTE1MiwgMTE1MiwgMzM2LCAxMjA4LCAxMTIsIDc0OCwgNzIwLCA3MjAsIDI4LCA3MjMsIDZ9IH0KK307CisKKy8qIDEyMDB4NzIwIChHVEYpICovCitzdHJ1Y3QgY3J0X21vZGVfdGFibGUgQ1JUTTEyMDB4NzIwW10gPSB7CisJLyogcl9yYXRlLCAgICAgICAgICB2Y2xrLCAgICAgICAgICAgICAgaHNwLCAgICAgICAgICAgICB2c3AgICAqLworCS8qIEhULCAgSEEsICBIQlMsIEhCRSwgSFNTLCBIU0UsIFZULCAgVkEsICBWQlMsIFZCRSwgVlNTLCBWU0UgKi8KKwl7UkVGUkVTSF82MCwgQ0xLXzcwXzE1OU0sIE0xMjAwWDcyMF9SNjBfSFNQLCBNMTIwMFg3MjBfUjYwX1ZTUCwKKwkgezE1NjgsIDEyMDAsIDEyMDAsIDM2OCwgMTI1NiwgMTI4LCA3NDYsIDcyMCwgNzIwLCAyNiwgNzIxLCAzfSB9Cit9OworCisvKiAxMjgweDYwMCAoR1RGKSAqLworc3RydWN0IGNydF9tb2RlX3RhYmxlIENSVE0xMjgweDYwMFtdID0geworCS8qIHJfcmF0ZSwgICAgICAgICAgdmNsaywgICAgICAgICAgICAgIGhzcCwgICAgICAgICAgICAgdnNwICAgKi8KKwkvKiBIVCwgIEhBLCAgSEJTLCBIQkUsICBIU1MsIEhTRSwgVlQsICBWQSwgIFZCUywgVkJFLCAgVlNTLCBWU0UgKi8KKwl7UkVGUkVTSF82MCwgQ0xLXzYxXzUwME0sIE0xMjgweDYwMF9SNjBfSFNQLCBNMTI4MHg2MDBfUjYwX1ZTUCwKKwkgezE2NDgsIDEyODAsIDEyODAsIDM2OCwgMTMzNiwgMTI4LCA2MjIsIDYwMCwgNjAwLCAyMiwgNjAxLCAzfSB9Cit9OworCisvKiAxMzYweDc2OCAoQ1ZUKSAqLworc3RydWN0IGNydF9tb2RlX3RhYmxlIENSVE0xMzYweDc2OFtdID0geworCS8qIHJfcmF0ZSwgICAgICAgICAgdmNsaywgICAgICAgICAgICAgIGhzcCwgICAgICAgICAgICAgdnNwICAgKi8KKwkvKiBIVCwgIEhBLCAgSEJTLCBIQkUsIEhTUywgSFNFLCBWVCwgIFZBLCAgVkJTLCBWQkUsIFZTUywgVlNFICovCisJe1JFRlJFU0hfNjAsIENMS184NF83NTBNLCBNMTM2MFg3NjhfUjYwX0hTUCwgTTEzNjBYNzY4X1I2MF9WU1AsCisJIHsxNzc2LCAxMzYwLCAxMzYwLCA0MTYsIDE0MzIsIDEzNiwgNzk4LCA3NjgsIDc2OCwgMzAsIDc3MSwgNX0gfQorfTsKKworLyogMTM2MHg3NjggKENWVCBSZWR1Y2UgQmxhbmtpbmcpICovCitzdHJ1Y3QgY3J0X21vZGVfdGFibGUgQ1JUTTEzNjB4NzY4X1JCW10gPSB7CisJLyogcl9yYXRlLCAgICAgICAgICB2Y2xrLCAgICAgICAgICAgICAgaHNwLCAgICAgICAgICAgICB2c3AgICAqLworCS8qIEhULCAgSEEsICBIQlMsIEhCRSwgSFNTLCBIU0UsIFZULCAgVkEsICBWQlMsIFZCRSwgVlNTLCBWU0UgKi8KKwl7UkVGUkVTSF82MCwgQ0xLXzcyXzAwME0sIE0xMzYwWDc2OF9SQl9SNjBfSFNQLAorCSBNMTM2MFg3NjhfUkJfUjYwX1ZTUCwKKwkgezE1MjAsIDEzNjAsIDEzNjAsIDE2MCwgMTQwOCwgMzIsIDc5MCwgNzY4LCA3NjgsIDIyLCA3NzEsIDV9IH0KK307CisKKy8qIDEzNjZ4NzY4IChHVEYpICovCitzdHJ1Y3QgY3J0X21vZGVfdGFibGUgQ1JUTTEzNjZ4NzY4W10gPSB7CisJLyogcl9yYXRlLCAgICAgICAgICB2Y2xrLCAgICAgICAgICAgICAgaHNwLCAgICAgICAgICAgICB2c3AgICAqLworCS8qIEhULCAgSEEsICBIQlMsIEhCRSwgSFNTLCBIU0UsIFZULCAgVkEsICBWQlMsIFZCRSwgVlNTLCBWU0UgKi8KKwl7UkVGUkVTSF82MCwgQ0xLXzg1Xzg2ME0sIE0xMzY4WDc2OF9SNjBfSFNQLCBNMTM2OFg3NjhfUjYwX1ZTUCwKKwkgezE4MDAsIDEzNjgsIDEzNjgsIDQzMiwgMTQ0MCwgMTQ0LCA3OTUsIDc2OCwgNzY4LCAyNywgNzY5LCAzfSB9LAorCXtSRUZSRVNIXzUwLCBDTEtfNjlfOTI0TSwgTTEzNjhYNzY4X1I1MF9IU1AsIE0xMzY4WDc2OF9SNTBfVlNQLAorCSB7MTc2OCwgMTM2OCwgMTM2OCwgNDAwLCAxNDI0LCAxNDQsIDc5MSwgNzY4LCA3NjgsIDIzLCA3NjksIDN9IH0KK307CisKKy8qIDE0NDB4OTAwIChDVlQpICovCitzdHJ1Y3QgY3J0X21vZGVfdGFibGUgQ1JUTTE0NDB4OTAwW10gPSB7CisJLyogcl9yYXRlLCAgICAgICAgICB2Y2xrLCAgICAgICAgICAgICAgaHNwLCAgICAgICAgICAgICB2c3AgICAqLworCS8qIEhULCAgSEEsICBIQlMsIEhCRSwgSFNTLCBIU0UsIFZULCAgVkEsICBWQlMsIFZCRSwgVlNTLCBWU0UgKi8KKwl7UkVGUkVTSF82MCwgQ0xLXzEwNl81MDBNLCBNMTQ0MFg5MDBfUjYwX0hTUCwgTTE0NDBYOTAwX1I2MF9WU1AsCisJIHsxOTA0LCAxNDQwLCAxNDQwLCA0NjQsIDE1MjAsIDE1MiwgOTM0LCA5MDAsIDkwMCwgMzQsIDkwMywgNn0gfSwKKwl7UkVGUkVTSF83NSwgQ0xLXzEzNl83MDBNLCBNMTQ0MFg5MDBfUjc1X0hTUCwgTTE0NDBYOTAwX1I3NV9WU1AsCisJIHsxOTM2LCAxNDQwLCAxNDQwLCA0OTYsIDE1MzYsIDE1MiwgOTQyLCA5MDAsIDkwMCwgNDIsIDkwMywgNn0gfQorfTsKKworLyogMTQ0MHg5MDAgKENWVCBSZWR1Y2UgQmxhbmtpbmcpICovCitzdHJ1Y3QgY3J0X21vZGVfdGFibGUgQ1JUTTE0NDB4OTAwX1JCW10gPSB7CisJLyogcl9yYXRlLCAgICAgICAgICB2Y2xrLCAgICAgICAgICAgICAgaHNwLCAgICAgICAgICAgICB2c3AgICAqLworCS8qIEhULCAgSEEsICBIQlMsIEhCRSwgSFNTLCBIU0UsIFZULCAgVkEsICBWQlMsIFZCRSwgVlNTLCBWU0UgKi8KKwl7UkVGUkVTSF82MCwgQ0xLXzg4Xzc1ME0sIE0xNDQwWDkwMF9SQl9SNjBfSFNQLAorCSBNMTQ0MFg5MDBfUkJfUjYwX1ZTUCwKKwkgezE2MDAsIDE0NDAsIDE0NDAsIDE2MCwgMTQ4OCwgMzIsIDkyNiwgOTAwLCA5MDAsIDI2LCA5MDMsIDZ9IH0KK307CisKKy8qIDE2MDB4OTAwIChDVlQpICovCitzdHJ1Y3QgY3J0X21vZGVfdGFibGUgQ1JUTTE2MDB4OTAwW10gPSB7CisJLyogcl9yYXRlLCAgICAgICAgICB2Y2xrLCAgICAgICAgICAgICAgaHNwLCAgICAgICAgICAgICB2c3AgICAqLworCS8qIEhULCAgSEEsICBIQlMsIEhCRSwgSFNTLCBIU0UsIFZULCAgVkEsICBWQlMsIFZCRSwgVlNTLCBWU0UgKi8KKwl7UkVGUkVTSF82MCwgQ0xLXzExOF84NDBNLCBNMTYwMFg5MDBfUjYwX0hTUCwgTTE2MDBYOTAwX1I2MF9WU1AsCisJIHsyMTEyLCAxNjAwLCAxNjAwLCA1MTIsIDE2ODgsIDE2OCwgOTM0LCA5MDAsIDkwMCwgMzQsIDkwMywgNX0gfQorfTsKKworLyogMTYwMHg5MDAgKENWVCBSZWR1Y2UgQmxhbmtpbmcpICovCitzdHJ1Y3QgY3J0X21vZGVfdGFibGUgQ1JUTTE2MDB4OTAwX1JCW10gPSB7CisJLyogcl9yYXRlLCAgICAgICAgdmNsaywgICAgICAgICAgIGhzcCwgICAgICAgIHZzcCAgICovCisJLyogSFQsICBIQSwgIEhCUywgSEJFLCBIU1MsIEhTRSwgVlQsICBWQSwgIFZCUywgVkJFLCBWU1MsIFZTRSAqLworCXtSRUZSRVNIXzYwLCBDTEtfOTdfNzUwTSwgTTE2MDBYOTAwX1JCX1I2MF9IU1AsCisJIE0xNjAwWDkwMF9SQl9SNjBfVlNQLAorCSB7MTc2MCwgMTYwMCwgMTYwMCwgMTYwLCAxNjQ4LCAzMiwgOTI2LCA5MDAsIDkwMCwgMjYsIDkwMywgNX0gfQorfTsKKworLyogMTYwMHgxMDI0IChHVEYpICovCitzdHJ1Y3QgY3J0X21vZGVfdGFibGUgQ1JUTTE2MDB4MTAyNFtdID0geworCS8qIHJfcmF0ZSwgICAgICAgICAgdmNsaywgICAgICAgICAgICAgIGhzcCwgICAgICAgICAgICAgdnNwICAgKi8KKwkvKiBIVCwgIEhBLCAgSEJTLCBIQkUsICBIU1MsIEhTRSwgICBWVCwgIFZBLCAgVkJTLCBWQkUsICBWU1MsIFZTRSAqLworCXtSRUZSRVNIXzYwLCBDTEtfMTM2XzcwME0sIE0xNjAwWDEwMjRfUjYwX0hTUCwgTTE2MDBYMTAyNF9SNjBfVlNQLAorCSB7MjE0NCwgMTYwMCwgMTYwMCwgNTQ0LCAxNzA0LCAxNjgsIDEwNjAsIDEwMjQsIDEwMjQsIDM2LCAxMDI1LCAzfSB9Cit9OworCisvKiAxNzkyeDEzNDQgKERNVCkgKi8KK3N0cnVjdCBjcnRfbW9kZV90YWJsZSBDUlRNMTc5MngxMzQ0W10gPSB7CisJLyogcl9yYXRlLCAgICAgICAgICB2Y2xrLCAgICAgICAgICAgICAgaHNwLCAgICAgICAgICAgICB2c3AgICAqLworCS8qIEhULCAgSEEsICBIQlMsIEhCRSwgIEhTUywgSFNFLCAgIFZULCAgVkEsICBWQlMsIFZCRSwgIFZTUywgVlNFICovCisJe1JFRlJFU0hfNjAsIENMS18yMDRfMDAwTSwgTTE3OTJ4MTM0NF9SNjBfSFNQLCBNMTc5MngxMzQ0X1I2MF9WU1AsCisJIHsyNDQ4LCAxNzkyLCAxNzkyLCA2NTYsIDE5MjAsIDIwMCwgMTM5NCwgMTM0NCwgMTM0NCwgNTAsIDEzNDUsIDN9IH0KK307CisKKy8qIDE4NTZ4MTM5MiAoRE1UKSAqLworc3RydWN0IGNydF9tb2RlX3RhYmxlIENSVE0xODU2eDEzOTJbXSA9IHsKKwkvKiByX3JhdGUsICAgICAgICAgIHZjbGssICAgICAgICAgICAgICBoc3AsICAgICAgICAgICAgIHZzcCAgICovCisJLyogSFQsICBIQSwgIEhCUywgSEJFLCAgSFNTLCBIU0UsICAgVlQsICBWQSwgIFZCUywgVkJFLCAgVlNTLCBWU0UgKi8KKwl7UkVGUkVTSF82MCwgQ0xLXzIxOF81MDBNLCBNMTg1NngxMzkyX1I2MF9IU1AsIE0xODU2eDEzOTJfUjYwX1ZTUCwKKwkgezI1MjgsIDE4NTYsIDE4NTYsIDY3MiwgMTk1MiwgMjI0LCAxNDM5LCAxMzkyLCAxMzkyLCA0NywgMTM5MywgM30gfQorfTsKKworLyogMTkyMHgxMjAwIChDVlQpICovCitzdHJ1Y3QgY3J0X21vZGVfdGFibGUgQ1JUTTE5MjB4MTIwMFtdID0geworCS8qIHJfcmF0ZSwgICAgICAgICAgdmNsaywgICAgICAgICAgICAgIGhzcCwgICAgICAgICAgICAgdnNwICAgKi8KKwkvKiBIVCwgIEhBLCAgSEJTLCBIQkUsIEhTUywgSFNFLCBWVCwgIFZBLCAgVkJTLCBWQkUsIFZTUywgVlNFICovCisJe1JFRlJFU0hfNjAsIENMS18xOTNfMjk1TSwgTTE5MjBYMTIwMF9SNjBfSFNQLCBNMTkyMFgxMjAwX1I2MF9WU1AsCisJIHsyNTkyLCAxOTIwLCAxOTIwLCA2NzIsIDIwNTYsIDIwMCwgMTI0NSwgMTIwMCwgMTIwMCwgNDUsIDEyMDMsIDZ9IH0KK307CisKKy8qIDE5MjB4MTIwMCAoQ1ZUIHdpdGggUmVkdWNlIEJsYW5raW5nKSAqLworc3RydWN0IGNydF9tb2RlX3RhYmxlIENSVE0xOTIweDEyMDBfUkJbXSA9IHsKKwkvKiByX3JhdGUsICAgICAgICAgIHZjbGssICAgICAgICAgICAgICBoc3AsICAgICAgICAgICAgIHZzcCAgICovCisJLyogSFQsICBIQSwgIEhCUywgSEJFLCBIU1MsIEhTRSwgVlQsICBWQSwgIFZCUywgVkJFLCBWU1MsIFZTRSAqLworCXtSRUZSRVNIXzYwLCBDTEtfMTUzXzkyME0sIE0xOTIwWDEyMDBfUkJfUjYwX0hTUCwKKwkgTTE5MjBYMTIwMF9SQl9SNjBfVlNQLAorCSB7MjA4MCwgMTkyMCwgMTkyMCwgMTYwLCAxOTY4LCAzMiwgMTIzNSwgMTIwMCwgMTIwMCwgMzUsIDEyMDMsIDZ9IH0KK307CisKKy8qIDIwNDh4MTUzNiAoQ1ZUKSAqLworc3RydWN0IGNydF9tb2RlX3RhYmxlIENSVE0yMDQ4eDE1MzZbXSA9IHsKKwkvKiByX3JhdGUsICAgICAgICAgIHZjbGssICAgICAgICAgICAgICBoc3AsICAgICAgICAgICAgIHZzcCAgICovCisJLyogSFQsICBIQSwgIEhCUywgSEJFLCAgSFNTLCBIU0UsICAgVlQsICBWQSwgIFZCUywgVkJFLCAgVlNTLCBWU0UgKi8KKwl7UkVGUkVTSF82MCwgQ0xLXzI2N18yNTBNLCBNMjA0OHgxNTM2X1I2MF9IU1AsIE0yMDQ4eDE1MzZfUjYwX1ZTUCwKKwkgezI4MDAsIDIwNDgsIDIwNDgsIDc1MiwgMjIwMCwgMjI0LCAxNTkyLCAxNTM2LCAxNTM2LCA1NiwgMTUzOSwgNH0gfQorfTsKKworLyogVmlkZW8gTW9kZSBUYWJsZSAqLworLyogc3RydWN0IFZpZGVvTW9kZVRhYmxlIHsqLworLyogIGludCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNb2RlSW5kZXg7Ki8KKy8qICBzdHJ1Y3QgY3J0X21vZGVfdGFibGUgICAgICAgICAgICAgKmNydGM7Ki8KKy8qICBpbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kZV9hcnJheTsqLworLyogfTsqLworc3RydWN0IFZpZGVvTW9kZVRhYmxlIENMRTI2Nk1vZGVzW10gPSB7CisJLyogRGlzcGxheSA6IDQ4MHg2NDAgKEdURikgKi8KKwl7VklBX1JFU180ODBYNjQwLCBDUlRNNDgweDY0MCwgQVJSQVlfU0laRShDUlRNNDgweDY0MCl9LAorCisJLyogRGlzcGxheSA6IDY0MHg0ODAgKi8KKwl7VklBX1JFU182NDBYNDgwLCBDUlRNNjQweDQ4MCwgQVJSQVlfU0laRShDUlRNNjQweDQ4MCl9LAorCisJLyogRGlzcGxheSA6IDcyMHg0ODAgKEdURikgKi8KKwl7VklBX1JFU183MjBYNDgwLCBDUlRNNzIweDQ4MCwgQVJSQVlfU0laRShDUlRNNzIweDQ4MCl9LAorCisJLyogRGlzcGxheSA6IDcyMHg1NzYgKEdURikgKi8KKwl7VklBX1JFU183MjBYNTc2LCBDUlRNNzIweDU3NiwgQVJSQVlfU0laRShDUlRNNzIweDU3Nil9LAorCisJLyogRGlzcGxheSA6IDgwMHg2MDAgKi8KKwl7VklBX1JFU184MDBYNjAwLCBDUlRNODAweDYwMCwgQVJSQVlfU0laRShDUlRNODAweDYwMCl9LAorCisJLyogRGlzcGxheSA6IDgwMHg0ODAgKENWVCkgKi8KKwl7VklBX1JFU184MDBYNDgwLCBDUlRNODAweDQ4MCwgQVJSQVlfU0laRShDUlRNODAweDQ4MCl9LAorCisJLyogRGlzcGxheSA6IDg0OHg0ODAgKENWVCkgKi8KKwl7VklBX1JFU184NDhYNDgwLCBDUlRNODQ4eDQ4MCwgQVJSQVlfU0laRShDUlRNODQ4eDQ4MCl9LAorCisJLyogRGlzcGxheSA6IDg1Mng0ODAgKEdURikgKi8KKwl7VklBX1JFU184NTZYNDgwLCBDUlRNODUyeDQ4MCwgQVJSQVlfU0laRShDUlRNODUyeDQ4MCl9LAorCisJLyogRGlzcGxheSA6IDEwMjR4NTEyIChHVEYpICovCisJe1ZJQV9SRVNfMTAyNFg1MTIsIENSVE0xMDI0eDUxMiwgQVJSQVlfU0laRShDUlRNMTAyNHg1MTIpfSwKKworCS8qIERpc3BsYXkgOiAxMDI0eDYwMCAqLworCXtWSUFfUkVTXzEwMjRYNjAwLCBDUlRNMTAyNHg2MDAsIEFSUkFZX1NJWkUoQ1JUTTEwMjR4NjAwKX0sCisKKwkvKiBEaXNwbGF5IDogMTAyNHg1NzYgKEdURikgKi8KKwkvKnsgVklBX1JFU18xMDI0WDU3NiwgQ1JUTTEwMjR4NTc2LCBBUlJBWV9TSVpFKENSVE0xMDI0eDU3Nil9LCAqLworCisJLyogRGlzcGxheSA6IDEwMjR4NzY4ICovCisJe1ZJQV9SRVNfMTAyNFg3NjgsIENSVE0xMDI0eDc2OCwgQVJSQVlfU0laRShDUlRNMTAyNHg3NjgpfSwKKworCS8qIERpc3BsYXkgOiAxMTUyeDg2NCAqLworCXtWSUFfUkVTXzExNTJYODY0LCBDUlRNMTE1Mng4NjQsIEFSUkFZX1NJWkUoQ1JUTTExNTJ4ODY0KX0sCisKKwkvKiBEaXNwbGF5IDogMTI4MHg3NjggKEdURikgKi8KKwl7VklBX1JFU18xMjgwWDc2OCwgQ1JUTTEyODB4NzY4LCBBUlJBWV9TSVpFKENSVE0xMjgweDc2OCl9LAorCisJLyogRGlzcGxheSA6IDk2MHg2MDAgKENWVCkgKi8KKwl7VklBX1JFU185NjBYNjAwLCBDUlRNOTYweDYwMCwgQVJSQVlfU0laRShDUlRNOTYweDYwMCl9LAorCisJLyogRGlzcGxheSA6IDEwMDB4NjAwIChHVEYpICovCisJe1ZJQV9SRVNfMTAwMFg2MDAsIENSVE0xMDAweDYwMCwgQVJSQVlfU0laRShDUlRNMTAwMHg2MDApfSwKKworCS8qIERpc3BsYXkgOiAxMDI0eDU3NiAoR1RGKSAqLworCXtWSUFfUkVTXzEwMjRYNTc2LCBDUlRNMTAyNHg1NzYsIEFSUkFZX1NJWkUoQ1JUTTEwMjR4NTc2KX0sCisKKwkvKiBEaXNwbGF5IDogMTA4OHg2MTIgKEdURikgKi8KKwl7VklBX1JFU18xMDg4WDYxMiwgQ1JUTTEwODh4NjEyLCBBUlJBWV9TSVpFKENSVE0xMDg4eDYxMil9LAorCisJLyogRGlzcGxheSA6IDExNTJ4NzIwIChDVlQpICovCisJe1ZJQV9SRVNfMTE1Mlg3MjAsIENSVE0xMTUyeDcyMCwgQVJSQVlfU0laRShDUlRNMTE1Mng3MjApfSwKKworCS8qIERpc3BsYXkgOiAxMjAweDcyMCAoR1RGKSAqLworCXtWSUFfUkVTXzEyMDBYNzIwLCBDUlRNMTIwMHg3MjAsIEFSUkFZX1NJWkUoQ1JUTTEyMDB4NzIwKX0sCisKKwkvKiBEaXNwbGF5IDogMTI4MHg2MDAgKEdURikgKi8KKwl7VklBX1JFU18xMjgwWDYwMCwgQ1JUTTEyODB4NjAwLCBBUlJBWV9TSVpFKENSVE0xMjgweDYwMCl9LAorCisJLyogRGlzcGxheSA6IDEyODB4ODAwIChDVlQpICovCisJe1ZJQV9SRVNfMTI4MFg4MDAsIENSVE0xMjgweDgwMCwgQVJSQVlfU0laRShDUlRNMTI4MHg4MDApfSwKKworCS8qIERpc3BsYXkgOiAxMjgweDgwMCAoR1RGKSAqLworCS8qeyBNMTI4MHg4MDAsIENSVE0xMjgweDgwMCwgQVJSQVlfU0laRShDUlRNMTI4MHg4MDApfSwgKi8KKworCS8qIERpc3BsYXkgOiAxMjgweDk2MCAqLworCXtWSUFfUkVTXzEyODBYOTYwLCBDUlRNMTI4MHg5NjAsIEFSUkFZX1NJWkUoQ1JUTTEyODB4OTYwKX0sCisKKwkvKiBEaXNwbGF5IDogMTI4MHgxMDI0ICovCisJe1ZJQV9SRVNfMTI4MFgxMDI0LCBDUlRNMTI4MHgxMDI0LCBBUlJBWV9TSVpFKENSVE0xMjgweDEwMjQpfSwKKworCS8qIERpc3BsYXkgOiAxMzYweDc2OCAoQ1ZUKSAqLworCXtWSUFfUkVTXzEzNjBYNzY4LCBDUlRNMTM2MHg3NjgsIEFSUkFZX1NJWkUoQ1JUTTEzNjB4NzY4KX0sCisKKwkvKiBEaXNwbGF5IDogMTM2MHg3NjggKENWVCBSZWR1Y2UgQmxhbmtpbmcpICovCisJe1ZJQV9SRVNfMTM2MFg3NjhfUkIsIENSVE0xMzYweDc2OF9SQiwKKwkgQVJSQVlfU0laRShDUlRNMTM2MHg3NjhfUkIpfSwKKworCS8qIERpc3BsYXkgOiAxMzY2eDc2OCAqLworCXtWSUFfUkVTXzEzNjZYNzY4LCBDUlRNMTM2Nng3NjgsIEFSUkFZX1NJWkUoQ1JUTTEzNjZ4NzY4KX0sCisKKwkvKiBEaXNwbGF5IDogMTM2OHg3NjggKEdURikgKi8KKwkvKnsgTTEzNjh4NzY4LENSVE0xMzY4eDc2OCxBUlJBWV9TSVpFKENSVE0xMzY4eDc2OCl9LCAqLworCS8qIERpc3BsYXkgOiAxMzY4eDc2OCAoR1RGKSAqLworCXtWSUFfUkVTXzEzNjhYNzY4LCBDUlRNMTM2OHg3NjgsIEFSUkFZX1NJWkUoQ1JUTTEzNjh4NzY4KX0sCisKKwkvKiBEaXNwbGF5IDogMTQ0MHg5MDAgKENWVCkgKi8KKwl7VklBX1JFU18xNDQwWDkwMCwgQ1JUTTE0NDB4OTAwLCBBUlJBWV9TSVpFKENSVE0xNDQweDkwMCl9LAorCisJLyogRGlzcGxheSA6IDE0NDB4OTAwIChDVlQgUmVkdWNlIEJsYW5raW5nKSAqLworCXtWSUFfUkVTXzE0NDBYOTAwX1JCLCBDUlRNMTQ0MHg5MDBfUkIsCisJIEFSUkFZX1NJWkUoQ1JUTTE0NDB4OTAwX1JCKX0sCisKKwkvKiBEaXNwbGF5IDogMTQ0MHgxMDUwIChHVEYpICovCisJe1ZJQV9SRVNfMTQ0MFgxMDUwLCBDUlRNMTQ0MHgxMDUwLCBBUlJBWV9TSVpFKENSVE0xNDQweDEwNTApfSwKKworCS8qIERpc3BsYXkgOiAxNDAweDEwNTAgKENWVCBSZWR1Y2UgQmxhbmtpbmcpICovCisJe1ZJQV9SRVNfMTQwMFgxMDUwX1JCLCBDUlRNMTQwMHgxMDUwX1JCLAorCSBBUlJBWV9TSVpFKENSVE0xNDAweDEwNTBfUkIpfSwKKworCS8qIERpc3BsYXkgOiAxNjAweDkwMCAoQ1ZUKSAqLworCXtWSUFfUkVTXzE2MDBYOTAwLCBDUlRNMTYwMHg5MDAsIEFSUkFZX1NJWkUoQ1JUTTE2MDB4OTAwKX0sCisKKwkvKiBEaXNwbGF5IDogMTYwMHg5MDAgKENWVCBSZWR1Y2UgQmxhbmtpbmcpICovCisJe1ZJQV9SRVNfMTYwMFg5MDBfUkIsIENSVE0xNjAweDkwMF9SQiwKKwkgQVJSQVlfU0laRShDUlRNMTYwMHg5MDBfUkIpfSwKKworCS8qIERpc3BsYXkgOiAxNjAweDEwMjQgKEdURikgKi8KKwl7VklBX1JFU18xNjAwWDEwMjQsIENSVE0xNjAweDEwMjQsIEFSUkFZX1NJWkUoQ1JUTTE2MDB4MTAyNCl9LAorCisJLyogRGlzcGxheSA6IDE2MDB4MTIwMCAqLworCXtWSUFfUkVTXzE2MDBYMTIwMCwgQ1JUTTE2MDB4MTIwMCwgQVJSQVlfU0laRShDUlRNMTYwMHgxMjAwKX0sCisKKwkvKiBEaXNwbGF5IDogMTY4MHgxMDUwIChDVlQpICovCisJe1ZJQV9SRVNfMTY4MFgxMDUwLCBDUlRNMTY4MHgxMDUwLCBBUlJBWV9TSVpFKENSVE0xNjgweDEwNTApfSwKKworCS8qIERpc3BsYXkgOiAxNjgweDEwNTAgKENWVCBSZWR1Y2UgQmxhbmtpbmcpICovCisJe1ZJQV9SRVNfMTY4MFgxMDUwX1JCLCBDUlRNMTY4MHgxMDUwX1JCLAorCSBBUlJBWV9TSVpFKENSVE0xNjgweDEwNTBfUkIpfSwKKworCS8qIERpc3BsYXkgOiAxNzkyeDEzNDQgKERNVCkgKi8KKwl7VklBX1JFU18xNzkyWDEzNDQsIENSVE0xNzkyeDEzNDQsIEFSUkFZX1NJWkUoQ1JUTTE3OTJ4MTM0NCl9LAorCisJLyogRGlzcGxheSA6IDE4NTZ4MTM5MiAoRE1UKSAqLworCXtWSUFfUkVTXzE4NTZYMTM5MiwgQ1JUTTE4NTZ4MTM5MiwgQVJSQVlfU0laRShDUlRNMTg1NngxMzkyKX0sCisKKwkvKiBEaXNwbGF5IDogMTkyMHgxNDQwICovCisJe1ZJQV9SRVNfMTkyMFgxNDQwLCBDUlRNMTkyMHgxNDQwLCBBUlJBWV9TSVpFKENSVE0xOTIweDE0NDApfSwKKworCS8qIERpc3BsYXkgOiAyMDQ4eDE1MzYgKi8KKwl7VklBX1JFU18yMDQ4WDE1MzYsIENSVE0yMDQ4eDE1MzYsIEFSUkFZX1NJWkUoQ1JUTTIwNDh4MTUzNil9LAorCisJLyogRGlzcGxheSA6IDEyODB4NzIwICovCisJe1ZJQV9SRVNfMTI4MFg3MjAsIENSVE0xMjgweDcyMCwgQVJSQVlfU0laRShDUlRNMTI4MHg3MjApfSwKKworCS8qIERpc3BsYXkgOiAxOTIweDEwODAgKENWVCkgKi8KKwl7VklBX1JFU18xOTIwWDEwODAsIENSVE0xOTIweDEwODAsIEFSUkFZX1NJWkUoQ1JUTTE5MjB4MTA4MCl9LAorCisJLyogRGlzcGxheSA6IDE5MjB4MTA4MCAoQ1ZUIFJlZHVjZSBCbGFua2luZykgKi8KKwl7VklBX1JFU18xOTIwWDEwODBfUkIsIENSVE0xOTIweDEwODBfUkIsCisJIEFSUkFZX1NJWkUoQ1JUTTE5MjB4MTA4MF9SQil9LAorCisJLyogRGlzcGxheSA6IDE5MjB4MTIwMCAoQ1ZUKSAqLworCXtWSUFfUkVTXzE5MjBYMTIwMCwgQ1JUTTE5MjB4MTIwMCwgQVJSQVlfU0laRShDUlRNMTkyMHgxMjAwKX0sCisKKwkvKiBEaXNwbGF5IDogMTkyMHgxMjAwIChDVlQgUmVkdWNlIEJsYW5raW5nKSAqLworCXtWSUFfUkVTXzE5MjBYMTIwMF9SQiwgQ1JUTTE5MjB4MTIwMF9SQiwKKwkgQVJSQVlfU0laRShDUlRNMTkyMHgxMjAwX1JCKX0sCisKKwkvKiBEaXNwbGF5IDogMTQwMHgxMDUwIChDVlQpICovCisJe1ZJQV9SRVNfMTQwMFgxMDUwLCBDUlRNMTQwMHgxMDUwLCBBUlJBWV9TSVpFKENSVE0xNDAweDEwNTApfQorfTsKK3N0cnVjdCBjcnRfbW9kZV90YWJsZSBDRUFNMTI4MHg3MjBbXSA9IHsKKwl7UkVGUkVTSF82MCwgQ0xLXzc0XzI3ME0sIE0xMjgwWDcyMF9DRUFfUjYwX0hTUCwKKwkgTTEyODBYNzIwX0NFQV9SNjBfVlNQLAorCSAvKiBIVCwgICAgSEEsICAgSEJTLCAgSEJFLCAgSFNTLCBIU0UsICBWVCwgICBWQSwgIFZCUywgVkJFLCBWU1MsIFZTRSAqLworCSB7MTY1MCwgMTI4MCwgMTI4MCwgMzcwLCAxMzkwLCA0MCwgNzUwLCA3MjAsIDcyMCwgMzAsIDcyNSwgNX0gfQorfTsKK3N0cnVjdCBjcnRfbW9kZV90YWJsZSBDRUFNMTkyMHgxMDgwW10gPSB7CisJe1JFRlJFU0hfNjAsIENMS18xNDhfNTAwTSwgTTE5MjBYMTA4MF9DRUFfUjYwX0hTUCwKKwkgTTE5MjBYMTA4MF9DRUFfUjYwX1ZTUCwKKwkgLyogSFQsICAgIEhBLCAgIEhCUywgIEhCRSwgIEhTUywgSFNFLCAgVlQsICBWQSwgVkJTLCBWQkUsICBWU1MsIFZTRSAqLworCSB7MjIwMCwgMTkyMCwgMTkyMCwgMzAwLCAyMDA4LCA0NCwgMTEyNSwgMTA4MCwgMTA4MCwgNDUsIDEwODQsIDV9IH0KK307CitzdHJ1Y3QgVmlkZW9Nb2RlVGFibGUgQ0VBX0hETUlfTW9kZXNbXSA9IHsKKwkvKiBEaXNwbGF5IDogMTI4MHg3MjAgKi8KKwl7VklBX1JFU18xMjgwWDcyMCwgQ0VBTTEyODB4NzIwLCBBUlJBWV9TSVpFKENFQU0xMjgweDcyMCl9LAorCXtWSUFfUkVTXzE5MjBYMTA4MCwgQ0VBTTE5MjB4MTA4MCwgQVJSQVlfU0laRShDRUFNMTkyMHgxMDgwKX0KK307CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3ZpYS92aWFtb2RlLmggYi9kcml2ZXJzL3ZpZGVvL3ZpYS92aWFtb2RlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWE1ZGU1MAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdmlkZW8vdmlhL3ZpYW1vZGUuaApAQCAtMCwwICsxLDE3NyBAQAorLyoKKyAqIENvcHlyaWdodCAxOTk4LTIwMDggVklBIFRlY2hub2xvZ2llcywgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IDIwMDEtMjAwOCBTMyBHcmFwaGljcywgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247CisgKiBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5USUVTIE9SIFJFUFJFU0VOVEFUSU9OUzsgd2l0aG91dCBldmVuCisgKiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFLlNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGZvciBtb3JlIGRldGFpbHMuCisKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwKKyAqIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKworI2lmbmRlZiBfX1ZJQU1PREVfSF9fCisjZGVmaW5lIF9fVklBTU9ERV9IX18KKworI2luY2x1ZGUgImdsb2JhbC5oIgorCitzdHJ1Y3QgVlBJVFRhYmxlIHsKKwl1bnNpZ25lZCBjaGFyIE1pc2M7CisJdW5zaWduZWQgY2hhciBTUltTdGRTUl07CisJdW5zaWduZWQgY2hhciBHUltTdGRHUl07CisJdW5zaWduZWQgY2hhciBBUltTdGRBUl07Cit9OworCitzdHJ1Y3QgVmlkZW9Nb2RlVGFibGUgeworCWludCBNb2RlSW5kZXg7CisJc3RydWN0IGNydF9tb2RlX3RhYmxlICpjcnRjOworCWludCBtb2RlX2FycmF5OworfTsKKworc3RydWN0IHBhdGNoX3RhYmxlIHsKKwlpbnQgbW9kZV9pbmRleDsKKwlpbnQgdGFibGVfbGVuZ3RoOworCXN0cnVjdCBpb19yZWcgKmlvX3JlZ190YWJsZTsKK307CisKK3N0cnVjdCByZXNfbWFwX3JlZnJlc2ggeworCWludCBocmVzOworCWludCB2cmVzOworCWludCBwaXhjbG9jazsKKwlpbnQgdm1vZGVfcmVmcmVzaDsKK307CisKKyNkZWZpbmUgTlVNX1RPVEFMX1JFU19NQVBfUkVGUkVTSCBBUlJBWV9TSVpFKHJlc19tYXBfcmVmcmVzaF90YmwpCisjZGVmaW5lIE5VTV9UT1RBTF9DRUFfTU9ERVMgIEFSUkFZX1NJWkUoQ0VBX0hETUlfTW9kZXMpCisjZGVmaW5lIE5VTV9UT1RBTF9DTjQwMF9Nb2RlWHJlZ3MgQVJSQVlfU0laRShDTjQwMF9Nb2RlWHJlZ3MpCisjZGVmaW5lIE5VTV9UT1RBTF9DTjcwMF9Nb2RlWHJlZ3MgQVJSQVlfU0laRShDTjcwMF9Nb2RlWHJlZ3MpCisjZGVmaW5lIE5VTV9UT1RBTF9LTTQwMF9Nb2RlWHJlZ3MgQVJSQVlfU0laRShLTTQwMF9Nb2RlWHJlZ3MpCisjZGVmaW5lIE5VTV9UT1RBTF9DWDcwMF9Nb2RlWHJlZ3MgQVJSQVlfU0laRShDWDcwMF9Nb2RlWHJlZ3MpCisjZGVmaW5lIE5VTV9UT1RBTF9WWDgwMF9Nb2RlWHJlZ3MgQVJSQVlfU0laRShWWDgwMF9Nb2RlWHJlZ3MpCisjZGVmaW5lIE5VTV9UT1RBTF9DTEUyNjZfTW9kZVhyZWdzIEFSUkFZX1NJWkUoQ0xFMjY2X01vZGVYcmVncykKKyNkZWZpbmUgTlVNX1RPVEFMX1BBVENIX01PREUgQVJSQVlfU0laRShyZXNfcGF0Y2hfdGFibGUpCisjZGVmaW5lIE5VTV9UT1RBTF9NT0RFVEFCTEUgQVJSQVlfU0laRShDTEUyNjZNb2RlcykKKworLyoqKioqKioqKioqKioqKioqKioqLworLyogTW9kZSBUYWJsZSAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqLworCisvKiA0ODB4NjQwICovCitleHRlcm4gc3RydWN0IGNydF9tb2RlX3RhYmxlIENSVE00ODB4NjQwWzFdOworLyogNjQweDQ4MCovCitleHRlcm4gc3RydWN0IGNydF9tb2RlX3RhYmxlIENSVE02NDB4NDgwWzVdOworLyo3MjB4NDgwIChHVEYpKi8KK2V4dGVybiBzdHJ1Y3QgY3J0X21vZGVfdGFibGUgQ1JUTTcyMHg0ODBbMV07CisvKjcyMHg1NzYgKEdURikqLworZXh0ZXJuIHN0cnVjdCBjcnRfbW9kZV90YWJsZSBDUlRNNzIweDU3NlsxXTsKKy8qIDgwMHg0ODAgKENWVCkgKi8KK2V4dGVybiBzdHJ1Y3QgY3J0X21vZGVfdGFibGUgQ1JUTTgwMHg0ODBbMV07CisvKiA4MDB4NjAwKi8KK2V4dGVybiBzdHJ1Y3QgY3J0X21vZGVfdGFibGUgQ1JUTTgwMHg2MDBbNV07CisvKiA4NDh4NDgwIChDVlQpICovCitleHRlcm4gc3RydWN0IGNydF9tb2RlX3RhYmxlIENSVE04NDh4NDgwWzFdOworLyo4NTZ4NDgwIChHVEYpIGNvbnZlcnQgdG8gODUyeDQ4MCovCitleHRlcm4gc3RydWN0IGNydF9tb2RlX3RhYmxlIENSVE04NTJ4NDgwWzFdOworLyoxMDI0eDUxMiAoR1RGKSovCitleHRlcm4gc3RydWN0IGNydF9tb2RlX3RhYmxlIENSVE0xMDI0eDUxMlsxXTsKKy8qIDEwMjR4NjAwKi8KK2V4dGVybiBzdHJ1Y3QgY3J0X21vZGVfdGFibGUgQ1JUTTEwMjR4NjAwWzFdOworLyogMTAyNHg3NjgqLworZXh0ZXJuIHN0cnVjdCBjcnRfbW9kZV90YWJsZSBDUlRNMTAyNHg3NjhbNF07CisvKiAxMTUyeDg2NCovCitleHRlcm4gc3RydWN0IGNydF9tb2RlX3RhYmxlIENSVE0xMTUyeDg2NFsxXTsKKy8qIDEyODB4NzIwIChIRE1JIDcyMFApKi8KK2V4dGVybiBzdHJ1Y3QgY3J0X21vZGVfdGFibGUgQ1JUTTEyODB4NzIwWzJdOworLyoxMjgweDc2OCAoR1RGKSovCitleHRlcm4gc3RydWN0IGNydF9tb2RlX3RhYmxlIENSVE0xMjgweDc2OFsyXTsKKy8qIDEyODB4ODAwIChDVlQpICovCitleHRlcm4gc3RydWN0IGNydF9tb2RlX3RhYmxlIENSVE0xMjgweDgwMFsxXTsKKy8qMTI4MHg5NjAqLworZXh0ZXJuIHN0cnVjdCBjcnRfbW9kZV90YWJsZSBDUlRNMTI4MHg5NjBbMV07CisvKiAxMjgweDEwMjQqLworZXh0ZXJuIHN0cnVjdCBjcnRfbW9kZV90YWJsZSBDUlRNMTI4MHgxMDI0WzNdOworLyogMTM2OHg3NjggKEdURikgKi8KK2V4dGVybiBzdHJ1Y3QgY3J0X21vZGVfdGFibGUgQ1JUTTEzNjh4NzY4WzFdOworLyoxNDQweDEwNTAgKEdURikqLworZXh0ZXJuIHN0cnVjdCBjcnRfbW9kZV90YWJsZSBDUlRNMTQ0MHgxMDUwWzFdOworLyogMTYwMHgxMjAwKi8KK2V4dGVybiBzdHJ1Y3QgY3J0X21vZGVfdGFibGUgQ1JUTTE2MDB4MTIwMFsyXTsKKy8qIDE2ODB4MTA1MCAoQ1ZUKSAqLworZXh0ZXJuIHN0cnVjdCBjcnRfbW9kZV90YWJsZSBDUlRNMTY4MHgxMDUwWzJdOworLyogMTY4MHgxMDUwIChDVlQgUmVkdWNlIEJsYW5raW5nKSAqLworZXh0ZXJuIHN0cnVjdCBjcnRfbW9kZV90YWJsZSBDUlRNMTY4MHgxMDUwX1JCWzFdOworLyogMTkyMHgxMDgwIChDVlQpKi8KK2V4dGVybiBzdHJ1Y3QgY3J0X21vZGVfdGFibGUgQ1JUTTE5MjB4MTA4MFsxXTsKKy8qIDE5MjB4MTA4MCAoQ1ZUIHdpdGggUmVkdWNlIEJsYW5raW5nKSAqLworZXh0ZXJuIHN0cnVjdCBjcnRfbW9kZV90YWJsZSBDUlRNMTkyMHgxMDgwX1JCWzFdOworLyogMTkyMHgxNDQwKi8KK2V4dGVybiBzdHJ1Y3QgY3J0X21vZGVfdGFibGUgQ1JUTTE5MjB4MTQ0MFsyXTsKKy8qIDE0MDB4MTA1MCAoQ1ZUKSAqLworZXh0ZXJuIHN0cnVjdCBjcnRfbW9kZV90YWJsZSBDUlRNMTQwMHgxMDUwWzJdOworLyogMTQwMHgxMDUwIChDVlQgUmVkdWNlIEJsYW5raW5nKSAqLworZXh0ZXJuIHN0cnVjdCBjcnRfbW9kZV90YWJsZSBDUlRNMTQwMHgxMDUwX1JCWzFdOworLyogOTYweDYwMCAoQ1ZUKSAqLworZXh0ZXJuIHN0cnVjdCBjcnRfbW9kZV90YWJsZSBDUlRNOTYweDYwMFsxXTsKKy8qIDEwMDB4NjAwIChHVEYpICovCitleHRlcm4gc3RydWN0IGNydF9tb2RlX3RhYmxlIENSVE0xMDAweDYwMFsxXTsKKy8qIDEwMjR4NTc2IChHVEYpICovCitleHRlcm4gc3RydWN0IGNydF9tb2RlX3RhYmxlIENSVE0xMDI0eDU3NlsxXTsKKy8qIDEwODh4NjEyIChDVlQpICovCitleHRlcm4gc3RydWN0IGNydF9tb2RlX3RhYmxlIENSVE0xMDg4eDYxMlsxXTsKKy8qIDExNTJ4NzIwIChDVlQpICovCitleHRlcm4gc3RydWN0IGNydF9tb2RlX3RhYmxlIENSVE0xMTUyeDcyMFsxXTsKKy8qIDEyMDB4NzIwIChHVEYpICovCitleHRlcm4gc3RydWN0IGNydF9tb2RlX3RhYmxlIENSVE0xMjAweDcyMFsxXTsKKy8qIDEyODB4NjAwIChHVEYpICovCitleHRlcm4gc3RydWN0IGNydF9tb2RlX3RhYmxlIENSVE0xMjgweDYwMFsxXTsKKy8qIDEzNjB4NzY4IChDVlQpICovCitleHRlcm4gc3RydWN0IGNydF9tb2RlX3RhYmxlIENSVE0xMzYweDc2OFsxXTsKKy8qIDEzNjB4NzY4IChDVlQgUmVkdWNlIEJsYW5raW5nKSAqLworZXh0ZXJuIHN0cnVjdCBjcnRfbW9kZV90YWJsZSBDUlRNMTM2MHg3NjhfUkJbMV07CisvKiAxMzY2eDc2OCAoR1RGKSAqLworZXh0ZXJuIHN0cnVjdCBjcnRfbW9kZV90YWJsZSBDUlRNMTM2Nng3NjhbMl07CisvKiAxNDQweDkwMCAoQ1ZUKSAqLworZXh0ZXJuIHN0cnVjdCBjcnRfbW9kZV90YWJsZSBDUlRNMTQ0MHg5MDBbMl07CisvKiAxNDQweDkwMCAoQ1ZUIFJlZHVjZSBCbGFua2luZykgKi8KK2V4dGVybiBzdHJ1Y3QgY3J0X21vZGVfdGFibGUgQ1JUTTE0NDB4OTAwX1JCWzFdOworLyogMTYwMHg5MDAgKENWVCkgKi8KK2V4dGVybiBzdHJ1Y3QgY3J0X21vZGVfdGFibGUgQ1JUTTE2MDB4OTAwWzFdOworLyogMTYwMHg5MDAgKENWVCBSZWR1Y2UgQmxhbmtpbmcpICovCitleHRlcm4gc3RydWN0IGNydF9tb2RlX3RhYmxlIENSVE0xNjAweDkwMF9SQlsxXTsKKy8qIDE2MDB4MTAyNCAoR1RGKSAqLworZXh0ZXJuIHN0cnVjdCBjcnRfbW9kZV90YWJsZSBDUlRNMTYwMHgxMDI0WzFdOworLyogMTc5MngxMzQ0IChETVQpICovCitleHRlcm4gc3RydWN0IGNydF9tb2RlX3RhYmxlIENSVE0xNzkyeDEzNDRbMV07CisvKiAxODU2eDEzOTIgKERNVCkgKi8KK2V4dGVybiBzdHJ1Y3QgY3J0X21vZGVfdGFibGUgQ1JUTTE4NTZ4MTM5MlsxXTsKKy8qIDE5MjB4MTIwMCAoQ1ZUKSAqLworZXh0ZXJuIHN0cnVjdCBjcnRfbW9kZV90YWJsZSBDUlRNMTkyMHgxMjAwWzFdOworLyogMTkyMHgxMjAwIChDVlQgd2l0aCBSZWR1Y2UgQmxhbmtpbmcpICovCitleHRlcm4gc3RydWN0IGNydF9tb2RlX3RhYmxlIENSVE0xOTIweDEyMDBfUkJbMV07CisvKiAyMDQ4eDE1MzYgKENWVCkgKi8KK2V4dGVybiBzdHJ1Y3QgY3J0X21vZGVfdGFibGUgQ1JUTTIwNDh4MTUzNlsxXTsKK2V4dGVybiBzdHJ1Y3QgVmlkZW9Nb2RlVGFibGUgQ0xFMjY2TW9kZXNbNDddOworZXh0ZXJuIHN0cnVjdCBjcnRfbW9kZV90YWJsZSBDRUFNMTI4MHg3MjBbMV07CitleHRlcm4gc3RydWN0IGNydF9tb2RlX3RhYmxlIENFQU0xOTIweDEwODBbMV07CitleHRlcm4gc3RydWN0IFZpZGVvTW9kZVRhYmxlIENFQV9IRE1JX01vZGVzWzJdOworCitleHRlcm4gc3RydWN0IHJlc19tYXBfcmVmcmVzaCByZXNfbWFwX3JlZnJlc2hfdGJsWzYxXTsKK2V4dGVybiBzdHJ1Y3QgaW9fcmVnIENONDAwX01vZGVYcmVnc1s1Ml07CitleHRlcm4gc3RydWN0IGlvX3JlZyBDTjcwMF9Nb2RlWHJlZ3NbNjZdOworZXh0ZXJuIHN0cnVjdCBpb19yZWcgS000MDBfTW9kZVhyZWdzWzU1XTsKK2V4dGVybiBzdHJ1Y3QgaW9fcmVnIENYNzAwX01vZGVYcmVnc1s1OF07CitleHRlcm4gc3RydWN0IGlvX3JlZyBWWDgwMF9Nb2RlWHJlZ3NbNThdOworZXh0ZXJuIHN0cnVjdCBpb19yZWcgQ0xFMjY2X01vZGVYcmVnc1szMl07CitleHRlcm4gc3RydWN0IGlvX3JlZyBQTTEwMjR4NzY4WzJdOworZXh0ZXJuIHN0cnVjdCBwYXRjaF90YWJsZSByZXNfcGF0Y2hfdGFibGVbMV07CitleHRlcm4gc3RydWN0IFZQSVRUYWJsZSBWUElUOworI2VuZGlmIC8qIF9fVklBTU9ERV9IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vdmlhL3Z0MTYzNi5jIGIvZHJpdmVycy92aWRlby92aWEvdnQxNjM2LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzIyYTlmOQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdmlkZW8vdmlhL3Z0MTYzNi5jCkBAIC0wLDAgKzEsMzA2IEBACisvKgorICogQ29weXJpZ2h0IDE5OTgtMjAwOCBWSUEgVGVjaG5vbG9naWVzLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgMjAwMS0yMDA4IFMzIEdyYXBoaWNzLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKKyAqIGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRJRVMgT1IgUkVQUkVTRU5UQVRJT05TOyB3aXRob3V0IGV2ZW4KKyAqIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UuU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogZm9yIG1vcmUgZGV0YWlscy4KKworICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLAorICogNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiZ2xvYmFsLmgiCisKK3U4IHZpYWZiX2dwaW9faTJjX3JlYWRfbHZkcyhzdHJ1Y3QgbHZkc19zZXR0aW5nX2luZm9ybWF0aW9uCisJKnBsdmRzX3NldHRpbmdfaW5mbywgc3RydWN0IGx2ZHNfY2hpcF9pbmZvcm1hdGlvbiAqcGx2ZHNfY2hpcF9pbmZvLAorCXU4IGluZGV4KQoreworCXU4IGRhdGE7CisKKwl2aWFwYXJpbmZvLT5pMmNfc3R1ZmYuaTJjX3BvcnQgPSBwbHZkc19jaGlwX2luZm8tPmkyY19wb3J0OworCXZpYWZiX2kyY19yZWFkYnl0ZShwbHZkc19jaGlwX2luZm8tPmx2ZHNfY2hpcF9zbGF2ZV9hZGRyLCBpbmRleCwgJmRhdGEpOworCisJcmV0dXJuIGRhdGE7Cit9CisKK3ZvaWQgdmlhZmJfZ3Bpb19pMmNfd3JpdGVfbWFza19sdmRzKHN0cnVjdCBsdmRzX3NldHRpbmdfaW5mb3JtYXRpb24KKwkJCSAgICAgICpwbHZkc19zZXR0aW5nX2luZm8sIHN0cnVjdCBsdmRzX2NoaXBfaW5mb3JtYXRpb24KKwkJCSAgICAgICpwbHZkc19jaGlwX2luZm8sIHN0cnVjdCBJT0RBVEEgaW9fZGF0YSkKK3sKKwlpbnQgaW5kZXgsIGRhdGE7CisKKwl2aWFwYXJpbmZvLT5pMmNfc3R1ZmYuaTJjX3BvcnQgPSBwbHZkc19jaGlwX2luZm8tPmkyY19wb3J0OworCisJaW5kZXggPSBpb19kYXRhLkluZGV4OworCWRhdGEgPSB2aWFmYl9ncGlvX2kyY19yZWFkX2x2ZHMocGx2ZHNfc2V0dGluZ19pbmZvLCBwbHZkc19jaGlwX2luZm8sCisJCWluZGV4KTsKKwlkYXRhID0gKGRhdGEgJiAofmlvX2RhdGEuTWFzaykpIHwgaW9fZGF0YS5EYXRhOworCisJdmlhZmJfaTJjX3dyaXRlYnl0ZShwbHZkc19jaGlwX2luZm8tPmx2ZHNfY2hpcF9zbGF2ZV9hZGRyLCBpbmRleCwgZGF0YSk7Cit9CisKK3ZvaWQgdmlhZmJfaW5pdF9sdmRzX3Z0MTYzNihzdHJ1Y3QgbHZkc19zZXR0aW5nX2luZm9ybWF0aW9uCisJKnBsdmRzX3NldHRpbmdfaW5mbywgc3RydWN0IGx2ZHNfY2hpcF9pbmZvcm1hdGlvbiAqcGx2ZHNfY2hpcF9pbmZvKQoreworCWludCByZWdfbnVtLCBpOworCisJLyogQ29tbW9uIHNldHRpbmdzOiAqLworCXJlZ19udW0gPSBBUlJBWV9TSVpFKENPTU1PTl9JTklUX1RCTF9WVDE2MzYpOworCisJZm9yIChpID0gMDsgaSA8IHJlZ19udW07IGkrKykgeworCQl2aWFmYl9ncGlvX2kyY193cml0ZV9tYXNrX2x2ZHMocGx2ZHNfc2V0dGluZ19pbmZvLAorCQkJCQkgcGx2ZHNfY2hpcF9pbmZvLAorCQkJCQkgQ09NTU9OX0lOSVRfVEJMX1ZUMTYzNltpXSk7CisJfQorCisJLyogSW5wdXQgRGF0YSBNb2RlIFNlbGVjdCAqLworCWlmIChwbHZkc19zZXR0aW5nX2luZm8tPmRldmljZV9sY2RfZHVhbGVkZ2UpIHsKKwkJdmlhZmJfZ3Bpb19pMmNfd3JpdGVfbWFza19sdmRzKHBsdmRzX3NldHRpbmdfaW5mbywKKwkJCQkJIHBsdmRzX2NoaXBfaW5mbywKKwkJCQkJIERVQUxfQ0hBTk5FTF9FTkFCTEVfVEJMX1ZUMTYzNlswXSk7CisJfSBlbHNlIHsKKwkJdmlhZmJfZ3Bpb19pMmNfd3JpdGVfbWFza19sdmRzKHBsdmRzX3NldHRpbmdfaW5mbywKKwkJCQkJIHBsdmRzX2NoaXBfaW5mbywKKwkJCQkJIFNJTkdMRV9DSEFOTkVMX0VOQUJMRV9UQkxfVlQxNjM2WzBdKTsKKwl9CisKKwlpZiAocGx2ZHNfc2V0dGluZ19pbmZvLT5MQ0REaXRoZXJpbmcpIHsKKwkJdmlhZmJfZ3Bpb19pMmNfd3JpdGVfbWFza19sdmRzKHBsdmRzX3NldHRpbmdfaW5mbywKKwkJCQkJIHBsdmRzX2NoaXBfaW5mbywKKwkJCQkJIERJVEhFUklOR19FTkFCTEVfVEJMX1ZUMTYzNlswXSk7CisJfSBlbHNlIHsKKwkJdmlhZmJfZ3Bpb19pMmNfd3JpdGVfbWFza19sdmRzKHBsdmRzX3NldHRpbmdfaW5mbywKKwkJCQkJIHBsdmRzX2NoaXBfaW5mbywKKwkJCQkJIERJVEhFUklOR19ESVNBQkxFX1RCTF9WVDE2MzZbMF0pOworCX0KK30KKwordm9pZCB2aWFmYl9lbmFibGVfbHZkc192dDE2MzYoc3RydWN0IGx2ZHNfc2V0dGluZ19pbmZvcm1hdGlvbgorCQkJKnBsdmRzX3NldHRpbmdfaW5mbywKKwkJCXN0cnVjdCBsdmRzX2NoaXBfaW5mb3JtYXRpb24gKnBsdmRzX2NoaXBfaW5mbykKK3sKKworCXZpYWZiX2dwaW9faTJjX3dyaXRlX21hc2tfbHZkcyhwbHZkc19zZXR0aW5nX2luZm8sIHBsdmRzX2NoaXBfaW5mbywKKwkJCQkgVkREX09OX1RCTF9WVDE2MzZbMF0pOworCisJLyogUGFkIG9uOiAqLworCXN3aXRjaCAocGx2ZHNfY2hpcF9pbmZvLT5vdXRwdXRfaW50ZXJmYWNlKSB7CisJY2FzZSBJTlRFUkZBQ0VfRFZQMDoKKwkJeworCQkJdmlhZmJfd3JpdGVfcmVnX21hc2soU1IxRSwgVklBU1IsIDB4QzAsIDB4QzApOworCQkJYnJlYWs7CisJCX0KKworCWNhc2UgSU5URVJGQUNFX0RWUDE6CisJCXsKKwkJCXZpYWZiX3dyaXRlX3JlZ19tYXNrKFNSMUUsIFZJQVNSLCAweDMwLCAweDMwKTsKKwkJCWJyZWFrOworCQl9CisKKwljYXNlIElOVEVSRkFDRV9ERlBfTE9XOgorCQl7CisJCQl2aWFmYl93cml0ZV9yZWdfbWFzayhTUjJBLCBWSUFTUiwgMHgwMywgMHgwMyk7CisJCQlicmVhazsKKwkJfQorCisJY2FzZSBJTlRFUkZBQ0VfREZQX0hJR0g6CisJCXsKKwkJCXZpYWZiX3dyaXRlX3JlZ19tYXNrKFNSMkEsIFZJQVNSLCAweDAzLCAweDBDKTsKKwkJCWJyZWFrOworCQl9CisKKwl9Cit9CisKK3ZvaWQgdmlhZmJfZGlzYWJsZV9sdmRzX3Z0MTYzNihzdHJ1Y3QgbHZkc19zZXR0aW5nX2luZm9ybWF0aW9uCisJCQkgKnBsdmRzX3NldHRpbmdfaW5mbywKKwkJCSBzdHJ1Y3QgbHZkc19jaGlwX2luZm9ybWF0aW9uICpwbHZkc19jaGlwX2luZm8pCit7CisKKwl2aWFmYl9ncGlvX2kyY193cml0ZV9tYXNrX2x2ZHMocGx2ZHNfc2V0dGluZ19pbmZvLCBwbHZkc19jaGlwX2luZm8sCisJCQkJIFZERF9PRkZfVEJMX1ZUMTYzNlswXSk7CisKKwkvKiBQYWQgb2ZmOiAqLworCXN3aXRjaCAocGx2ZHNfY2hpcF9pbmZvLT5vdXRwdXRfaW50ZXJmYWNlKSB7CisJY2FzZSBJTlRFUkZBQ0VfRFZQMDoKKwkJeworCQkJdmlhZmJfd3JpdGVfcmVnX21hc2soU1IxRSwgVklBU1IsIDB4MDAsIDB4QzApOworCQkJYnJlYWs7CisJCX0KKworCWNhc2UgSU5URVJGQUNFX0RWUDE6CisJCXsKKwkJCXZpYWZiX3dyaXRlX3JlZ19tYXNrKFNSMUUsIFZJQVNSLCAweDAwLCAweDMwKTsKKwkJCWJyZWFrOworCQl9CisKKwljYXNlIElOVEVSRkFDRV9ERlBfTE9XOgorCQl7CisJCQl2aWFmYl93cml0ZV9yZWdfbWFzayhTUjJBLCBWSUFTUiwgMHgwMCwgMHgwMyk7CisJCQlicmVhazsKKwkJfQorCisJY2FzZSBJTlRFUkZBQ0VfREZQX0hJR0g6CisJCXsKKwkJCXZpYWZiX3dyaXRlX3JlZ19tYXNrKFNSMkEsIFZJQVNSLCAweDAwLCAweDBDKTsKKwkJCWJyZWFrOworCQl9CisKKwl9Cit9CisKK2Jvb2wgdmlhZmJfbHZkc19pZGVudGlmeV92dDE2MzYodm9pZCkKK3sKKwl1OCBCdWZmZXJbMl07CisKKwlERUJVR19NU0coS0VSTl9JTkZPICJ2aWFmYl9sdmRzX2lkZW50aWZ5X3Z0MTYzNi5cbiIpOworCisJLyogU2Vuc2UgVlQxNjM2IExWRFMgVHJhbnNtaXRlciAqLworCXZpYXBhcmluZm8tPmNoaXBfaW5mby0+bHZkc19jaGlwX2luZm8ubHZkc19jaGlwX3NsYXZlX2FkZHIgPQorCVZUMTYzNl9MVkRTX0kyQ19BRERSOworCisJLyogQ2hlY2sgdmVuZG9yIElEIGZpcnN0OiAqLworCXZpYWZiX2kyY19yZWFkYnl0ZSgodTgpIHZpYXBhcmluZm8tPmNoaXBfaW5mby0+bHZkc19jaGlwX2luZm8uCisJbHZkc19jaGlwX3NsYXZlX2FkZHIsCisJCSAgICAweDAwLCAmQnVmZmVyWzBdKTsKKwl2aWFmYl9pMmNfcmVhZGJ5dGUoKHU4KSB2aWFwYXJpbmZvLT5jaGlwX2luZm8tPmx2ZHNfY2hpcF9pbmZvLgorCQlsdmRzX2NoaXBfc2xhdmVfYWRkciwKKwkJICAgIDB4MDEsICZCdWZmZXJbMV0pOworCisJaWYgKCEoKEJ1ZmZlclswXSA9PSAweDA2KSAmJiAoQnVmZmVyWzFdID09IDB4MTEpKSkKKwkJcmV0dXJuIGZhbHNlOworCisJLyogQ2hlY2sgQ2hpcCBJRDogKi8KKwl2aWFmYl9pMmNfcmVhZGJ5dGUoKHU4KSB2aWFwYXJpbmZvLT5jaGlwX2luZm8tPmx2ZHNfY2hpcF9pbmZvLgorCWx2ZHNfY2hpcF9zbGF2ZV9hZGRyLAorCQkgICAgMHgwMiwgJkJ1ZmZlclswXSk7CisJdmlhZmJfaTJjX3JlYWRieXRlKCh1OCkgdmlhcGFyaW5mby0+Y2hpcF9pbmZvLT5sdmRzX2NoaXBfaW5mby4KKwkJbHZkc19jaGlwX3NsYXZlX2FkZHIsCisJCSAgICAweDAzLCAmQnVmZmVyWzFdKTsKKwlpZiAoKEJ1ZmZlclswXSA9PSAweDQ1KSAmJiAoQnVmZmVyWzFdID09IDB4MzMpKSB7CisJCXZpYXBhcmluZm8tPmNoaXBfaW5mby0+bHZkc19jaGlwX2luZm8ubHZkc19jaGlwX25hbWUgPQorCQkJVlQxNjM2X0xWRFM7CisJCXJldHVybiB0cnVlOworCX0KKworCXJldHVybiBmYWxzZTsKK30KKworc3RhdGljIGludCBnZXRfY2xrX3JhbmdlX2luZGV4KHUzMiBDbGspCit7CisJaWYgKENsayA8IERQQV9DTEtfMzBNKQorCQlyZXR1cm4gRFBBX0NMS19SQU5HRV8zME07CisJZWxzZSBpZiAoQ2xrIDwgRFBBX0NMS181ME0pCisJCXJldHVybiBEUEFfQ0xLX1JBTkdFXzMwXzUwTTsKKwllbHNlIGlmIChDbGsgPCBEUEFfQ0xLXzcwTSkKKwkJcmV0dXJuIERQQV9DTEtfUkFOR0VfNTBfNzBNOworCWVsc2UgaWYgKENsayA8IERQQV9DTEtfMTAwTSkKKwkJcmV0dXJuIERQQV9DTEtfUkFOR0VfNzBfMTAwTTsKKwllbHNlIGlmIChDbGsgPCBEUEFfQ0xLXzE1ME0pCisJCXJldHVybiBEUEFfQ0xLX1JBTkdFXzEwMF8xNTBNOworCWVsc2UKKwkJcmV0dXJuIERQQV9DTEtfUkFOR0VfMTUwTTsKK30KKworc3RhdGljIGludCBnZXRfbHZkc19kcGFfc2V0dGluZ19pbmRleChpbnQgcGFuZWxfc2l6ZV9pZCwKKwkJCSAgICAgc3RydWN0IFZUMTYzNl9EUEFfU0VUVElORyAqcF92dDE2MzZfZHBhc2V0dGluZ190YmwsCisJCQkgICAgICAgaW50IHRibF9zaXplKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IHRibF9zaXplOyBpKyspIHsKKwkJaWYgKHBhbmVsX3NpemVfaWQgPT0gcF92dDE2MzZfZHBhc2V0dGluZ190YmwtPlBhbmVsU2l6ZUlEKQorCQkJcmV0dXJuIGk7CisKKwkJcF92dDE2MzZfZHBhc2V0dGluZ190YmwrKzsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgc2V0X2RwYV92dDE2MzYoc3RydWN0IGx2ZHNfc2V0dGluZ19pbmZvcm1hdGlvbgorCSpwbHZkc19zZXR0aW5nX2luZm8sIHN0cnVjdCBsdmRzX2NoaXBfaW5mb3JtYXRpb24gKnBsdmRzX2NoaXBfaW5mbywKKwkJICAgIHN0cnVjdCBWVDE2MzZfRFBBX1NFVFRJTkcgKnBfdnQxNjM2X2RwYV9zZXR0aW5nKQoreworCXN0cnVjdCBJT0RBVEEgaW9fZGF0YTsKKworCWlvX2RhdGEuSW5kZXggPSAweDA5OworCWlvX2RhdGEuTWFzayA9IDB4MUY7CisJaW9fZGF0YS5EYXRhID0gcF92dDE2MzZfZHBhX3NldHRpbmctPkNMS19TRUxfU1QxOworCXZpYWZiX2dwaW9faTJjX3dyaXRlX21hc2tfbHZkcyhwbHZkc19zZXR0aW5nX2luZm8sCisJCXBsdmRzX2NoaXBfaW5mbywgaW9fZGF0YSk7CisKKwlpb19kYXRhLkluZGV4ID0gMHgwODsKKwlpb19kYXRhLk1hc2sgPSAweDBGOworCWlvX2RhdGEuRGF0YSA9IHBfdnQxNjM2X2RwYV9zZXR0aW5nLT5DTEtfU0VMX1NUMjsKKwl2aWFmYl9ncGlvX2kyY193cml0ZV9tYXNrX2x2ZHMocGx2ZHNfc2V0dGluZ19pbmZvLCBwbHZkc19jaGlwX2luZm8sCisJCWlvX2RhdGEpOworfQorCit2b2lkIHZpYWZiX3Z0MTYzNl9wYXRjaF9za2V3X29uX3Z0MzMyNCgKKwlzdHJ1Y3QgbHZkc19zZXR0aW5nX2luZm9ybWF0aW9uICpwbHZkc19zZXR0aW5nX2luZm8sCisJc3RydWN0IGx2ZHNfY2hpcF9pbmZvcm1hdGlvbiAqcGx2ZHNfY2hpcF9pbmZvKQoreworCWludCBpbmRleCwgc2l6ZTsKKworCURFQlVHX01TRyhLRVJOX0lORk8gInZpYWZiX3Z0MTYzNl9wYXRjaF9za2V3X29uX3Z0MzMyNC5cbiIpOworCisJLyogR3JhcGhpY3MgRFBBIHNldHRpbmdzOiAqLworCWluZGV4ID0gZ2V0X2Nsa19yYW5nZV9pbmRleChwbHZkc19zZXR0aW5nX2luZm8tPnZjbGspOworCXZpYWZiX3NldF9kcGFfZ2Z4KHBsdmRzX2NoaXBfaW5mby0+b3V0cHV0X2ludGVyZmFjZSwKKwkJICAgICZHRlhfRFBBX1NFVFRJTkdfVEJMX1ZUMzMyNFtpbmRleF0pOworCisJLyogTFZEUyBUcmFuc21pdHRlciBEUEEgc2V0dGluZ3M6ICovCisJc2l6ZSA9IEFSUkFZX1NJWkUoVlQxNjM2X0RQQV9TRVRUSU5HX1RCTF9WVDMzMjQpOworCWluZGV4ID0KKwkgICAgZ2V0X2x2ZHNfZHBhX3NldHRpbmdfaW5kZXgocGx2ZHNfc2V0dGluZ19pbmZvLT5sY2RfcGFuZWxfaWQsCisJCQkJICAgICAgIFZUMTYzNl9EUEFfU0VUVElOR19UQkxfVlQzMzI0LCBzaXplKTsKKwlzZXRfZHBhX3Z0MTYzNihwbHZkc19zZXR0aW5nX2luZm8sIHBsdmRzX2NoaXBfaW5mbywKKwkJICAgICAgICZWVDE2MzZfRFBBX1NFVFRJTkdfVEJMX1ZUMzMyNFtpbmRleF0pOworfQorCit2b2lkIHZpYWZiX3Z0MTYzNl9wYXRjaF9za2V3X29uX3Z0MzMyNygKKwlzdHJ1Y3QgbHZkc19zZXR0aW5nX2luZm9ybWF0aW9uICpwbHZkc19zZXR0aW5nX2luZm8sCisJc3RydWN0IGx2ZHNfY2hpcF9pbmZvcm1hdGlvbiAqcGx2ZHNfY2hpcF9pbmZvKQoreworCWludCBpbmRleCwgc2l6ZTsKKworCURFQlVHX01TRyhLRVJOX0lORk8gInZpYWZiX3Z0MTYzNl9wYXRjaF9za2V3X29uX3Z0MzMyNy5cbiIpOworCisJLyogR3JhcGhpY3MgRFBBIHNldHRpbmdzOiAqLworCWluZGV4ID0gZ2V0X2Nsa19yYW5nZV9pbmRleChwbHZkc19zZXR0aW5nX2luZm8tPnZjbGspOworCXZpYWZiX3NldF9kcGFfZ2Z4KHBsdmRzX2NoaXBfaW5mby0+b3V0cHV0X2ludGVyZmFjZSwKKwkJICAgICZHRlhfRFBBX1NFVFRJTkdfVEJMX1ZUMzMyN1tpbmRleF0pOworCisJLyogTFZEUyBUcmFuc21pdHRlciBEUEEgc2V0dGluZ3M6ICovCisJc2l6ZSA9IEFSUkFZX1NJWkUoVlQxNjM2X0RQQV9TRVRUSU5HX1RCTF9WVDMzMjcpOworCWluZGV4ID0KKwkgICAgZ2V0X2x2ZHNfZHBhX3NldHRpbmdfaW5kZXgocGx2ZHNfc2V0dGluZ19pbmZvLT5sY2RfcGFuZWxfaWQsCisJCQkJICAgICAgIFZUMTYzNl9EUEFfU0VUVElOR19UQkxfVlQzMzI3LCBzaXplKTsKKwlzZXRfZHBhX3Z0MTYzNihwbHZkc19zZXR0aW5nX2luZm8sIHBsdmRzX2NoaXBfaW5mbywKKwkJICAgICAgICZWVDE2MzZfRFBBX1NFVFRJTkdfVEJMX1ZUMzMyN1tpbmRleF0pOworfQorCit2b2lkIHZpYWZiX3Z0MTYzNl9wYXRjaF9za2V3X29uX3Z0MzM2NCgKKwlzdHJ1Y3QgbHZkc19zZXR0aW5nX2luZm9ybWF0aW9uICpwbHZkc19zZXR0aW5nX2luZm8sCisJc3RydWN0IGx2ZHNfY2hpcF9pbmZvcm1hdGlvbiAqcGx2ZHNfY2hpcF9pbmZvKQoreworCWludCBpbmRleDsKKworCURFQlVHX01TRyhLRVJOX0lORk8gInZpYWZiX3Z0MTYzNl9wYXRjaF9za2V3X29uX3Z0MzM2NC5cbiIpOworCisJLyogR3JhcGhpY3MgRFBBIHNldHRpbmdzOiAqLworCWluZGV4ID0gZ2V0X2Nsa19yYW5nZV9pbmRleChwbHZkc19zZXR0aW5nX2luZm8tPnZjbGspOworCXZpYWZiX3NldF9kcGFfZ2Z4KHBsdmRzX2NoaXBfaW5mby0+b3V0cHV0X2ludGVyZmFjZSwKKwkJICAgICZHRlhfRFBBX1NFVFRJTkdfVEJMX1ZUMzM2NFtpbmRleF0pOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby92aWEvdnQxNjM2LmggYi9kcml2ZXJzL3ZpZGVvL3ZpYS92dDE2MzYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYTE1MGM1OAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdmlkZW8vdmlhL3Z0MTYzNi5oCkBAIC0wLDAgKzEsNDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgMTk5OC0yMDA4IFZJQSBUZWNobm9sb2dpZXMsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAyMDAxLTIwMDggUzMgR3JhcGhpY3MsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKworICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOworICogZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVElFUyBPUiBSRVBSRVNFTlRBVElPTlM7IHdpdGhvdXQgZXZlbgorICogdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS5TZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sCisgKiA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICovCisKKyNpZm5kZWYgX1ZUMTYzNl9IXworI2RlZmluZSBfVlQxNjM2X0hfCisjaW5jbHVkZSAiY2hpcC5oIgorYm9vbCB2aWFmYl9sdmRzX2lkZW50aWZ5X3Z0MTYzNih2b2lkKTsKK3ZvaWQgdmlhZmJfaW5pdF9sdmRzX3Z0MTYzNihzdHJ1Y3QgbHZkc19zZXR0aW5nX2luZm9ybWF0aW9uCisJKnBsdmRzX3NldHRpbmdfaW5mbywgc3RydWN0IGx2ZHNfY2hpcF9pbmZvcm1hdGlvbiAqcGx2ZHNfY2hpcF9pbmZvKTsKK3ZvaWQgdmlhZmJfZW5hYmxlX2x2ZHNfdnQxNjM2KHN0cnVjdCBsdmRzX3NldHRpbmdfaW5mb3JtYXRpb24KKwkJCSpwbHZkc19zZXR0aW5nX2luZm8sCisJCQlzdHJ1Y3QgbHZkc19jaGlwX2luZm9ybWF0aW9uICpwbHZkc19jaGlwX2luZm8pOwordm9pZCB2aWFmYl9kaXNhYmxlX2x2ZHNfdnQxNjM2KHN0cnVjdCBsdmRzX3NldHRpbmdfaW5mb3JtYXRpb24KKwkJCSAqcGx2ZHNfc2V0dGluZ19pbmZvLAorCQkJIHN0cnVjdCBsdmRzX2NoaXBfaW5mb3JtYXRpb24gKnBsdmRzX2NoaXBfaW5mbyk7Cit2b2lkIHZpYWZiX3Z0MTYzNl9wYXRjaF9za2V3X29uX3Z0MzMyNCgKKwlzdHJ1Y3QgbHZkc19zZXR0aW5nX2luZm9ybWF0aW9uICpwbHZkc19zZXR0aW5nX2luZm8sCisJc3RydWN0IGx2ZHNfY2hpcF9pbmZvcm1hdGlvbiAqcGx2ZHNfY2hpcF9pbmZvKTsKK3ZvaWQgdmlhZmJfdnQxNjM2X3BhdGNoX3NrZXdfb25fdnQzMzI3KAorCXN0cnVjdCBsdmRzX3NldHRpbmdfaW5mb3JtYXRpb24gKnBsdmRzX3NldHRpbmdfaW5mbywKKwlzdHJ1Y3QgbHZkc19jaGlwX2luZm9ybWF0aW9uICpwbHZkc19jaGlwX2luZm8pOwordm9pZCB2aWFmYl92dDE2MzZfcGF0Y2hfc2tld19vbl92dDMzNjQoCisJc3RydWN0IGx2ZHNfc2V0dGluZ19pbmZvcm1hdGlvbiAqcGx2ZHNfc2V0dGluZ19pbmZvLAorCXN0cnVjdCBsdmRzX2NoaXBfaW5mb3JtYXRpb24gKnBsdmRzX2NoaXBfaW5mbyk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy93MS9tYXN0ZXJzL2RzMXdtLmMgYi9kcml2ZXJzL3cxL21hc3RlcnMvZHMxd20uYwppbmRleCAxMDIxMWU0Li4yOWUxNDRmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3cxL21hc3RlcnMvZHMxd20uYworKysgYi9kcml2ZXJzL3cxL21hc3RlcnMvZHMxd20uYwpAQCAtMTYwLDggKzE2MCwxMCBAQAogCSAqICAgICA2MjUgdXMgLSA2MCB1cyAtIDI0MCB1cyAtIDEwMCBucyA9IDMyNC45IHVzCiAJICoKIAkgKiBXZSdsbCB3YWl0IGEgYml0IGxvbmdlciBqdXN0IHRvIGJlIHN1cmUuCisJICogV2FzIHVkZWxheSg1MDApLCBidXQgaWYgaXQgaXMgZ29pbmcgdG8gYnVzeXdhaXQgdGhlIGNwdSB0aGF0IGxvbmcsCisJICogbWlnaHQgYXMgd2VsbCBjb21lIGJhY2sgbGF0ZXIuCiAJICovCi0JdWRlbGF5KDUwMCk7CisJbXNsZWVwKDEpOwogCiAJZHMxd21fd3JpdGVfcmVnaXN0ZXIoZHMxd21fZGF0YSwgRFMxV01fSU5UX0VOLAogCQlEUzFXTV9JTlRFTl9FUkJGIHwgRFMxV01fSU5URU5fRVRNVCB8IERTMVdNX0lOVEVOX0VQRCB8CkBAIC0yNzQsOCArMjc2LDggQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgZHMxd21fc2VhcmNoKHZvaWQgKmRhdGEsIHU4IHNlYXJjaF90eXBlLAotCQkJIHcxX3NsYXZlX2ZvdW5kX2NhbGxiYWNrIHNsYXZlX2ZvdW5kKQorc3RhdGljIHZvaWQgZHMxd21fc2VhcmNoKHZvaWQgKmRhdGEsIHN0cnVjdCB3MV9tYXN0ZXIgKm1hc3Rlcl9kZXYsCisJCQl1OCBzZWFyY2hfdHlwZSwgdzFfc2xhdmVfZm91bmRfY2FsbGJhY2sgc2xhdmVfZm91bmQpCiB7CiAJc3RydWN0IGRzMXdtX2RhdGEgKmRzMXdtX2RhdGEgPSBkYXRhOwogCWludCBpOwpAQCAtMzEzLDcgKzMxNSw3IEBACiAJZHMxd21fd3JpdGVfcmVnaXN0ZXIoZHMxd21fZGF0YSwgRFMxV01fQ01ELCB+RFMxV01fQ01EX1NSQSk7CiAJZHMxd21fcmVzZXQoZHMxd21fZGF0YSk7CiAKLQlzbGF2ZV9mb3VuZChkczF3bV9kYXRhLCByb21faWQpOworCXNsYXZlX2ZvdW5kKG1hc3Rlcl9kZXYsIHJvbV9pZCk7CiB9CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy93MS9tYXN0ZXJzL2RzMjQ5MC5jIGIvZHJpdmVycy93MS9tYXN0ZXJzL2RzMjQ5MC5jCmluZGV4IGI2M2I1ZTA0Li41OWFkNmU5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3cxL21hc3RlcnMvZHMyNDkwLmMKKysrIGIvZHJpdmVycy93MS9tYXN0ZXJzL2RzMjQ5MC5jCkBAIC04OCw3ICs4OCw3IEBACiAjZGVmaW5lIENPTU1fRFQJCQkJMHgyMDAwCiAjZGVmaW5lIENPTU1fU1BVCQkJMHgxMDAwCiAjZGVmaW5lIENPTU1fRgkJCQkweDA4MDAKLSNkZWZpbmUgQ09NTV9OVFAJCQkweDA0MDAKKyNkZWZpbmUgQ09NTV9OVEYJCQkweDA0MDAKICNkZWZpbmUgQ09NTV9JQ1AJCQkweDAyMDAKICNkZWZpbmUgQ09NTV9SU1QJCQkweDAxMDAKIApAQCAtOTgsMTEgKzk4LDYgQEAKICNkZWZpbmUgQlJBTkNIX01BSU4JCQkweENDCiAjZGVmaW5lIEJSQU5DSF9BVVgJCQkweDMzCiAKLS8qCi0gKiBEdXJhdGlvbiBvZiB0aGUgc3Ryb25nIHB1bGwtdXAgcHVsc2UgaW4gbWlsbGlzZWNvbmRzLgotICovCi0jZGVmaW5lIFBVTExVUF9QVUxTRV9EVVJBVElPTgkJNzUwCi0KIC8qIFN0YXR1cyBmbGFncyAqLwogI2RlZmluZSBTVF9TUFVBCQkJCTB4MDEgIC8qIFN0cm9uZyBQdWxsLXVwIGlzIGFjdGl2ZSAqLwogI2RlZmluZSBTVF9QUkdBCQkJCTB4MDIgIC8qIDEyViBwcm9ncmFtbWluZyBwdWxzZSBpcyBiZWluZyBnZW5lcmF0ZWQgKi8KQEAgLTExMiw2ICsxMDcsMTcgQEAKICNkZWZpbmUgU1RfSURMRQkJCQkweDIwICAvKiBEUzI0OTAgaXMgY3VycmVudGx5IGlkbGUgKi8KICNkZWZpbmUgU1RfRVBPRgkJCQkweDgwCiAKKy8qIFJlc3VsdCBSZWdpc3RlciBmbGFncyAqLworI2RlZmluZSBSUl9ERVRFQ1QJCQkweEE1IC8qIE5ldyBkZXZpY2UgZGV0ZWN0ZWQgKi8KKyNkZWZpbmUgUlJfTlJTCQkJCTB4MDEgLyogUmVzZXQgbm8gcHJlc2VuY2Ugb3IgLi4uICovCisjZGVmaW5lIFJSX1NICQkJCTB4MDIgLyogc2hvcnQgb24gcmVzZXQgb3Igc2V0IHBhdGggKi8KKyNkZWZpbmUgUlJfQVBQCQkJCTB4MDQgLyogYWxhcm1pbmcgcHJlc2VuY2Ugb24gcmVzZXQgKi8KKyNkZWZpbmUgUlJfVlBQCQkJCTB4MDggLyogMTJWIGV4cGVjdGVkIG5vdCBzZWVuICovCisjZGVmaW5lIFJSX0NNUAkJCQkweDEwIC8qIGNvbXBhcmUgZXJyb3IgKi8KKyNkZWZpbmUgUlJfQ1JDCQkJCTB4MjAgLyogQ1JDIGVycm9yIGRldGVjdGVkICovCisjZGVmaW5lIFJSX1JEUAkJCQkweDQwIC8qIHJlZGlyZWN0ZWQgcGFnZSAqLworI2RlZmluZSBSUl9FT1MJCQkJMHg4MCAvKiBlbmQgb2Ygc2VhcmNoIGVycm9yICovCisKICNkZWZpbmUgU1BFRURfTk9STUFMCQkJMHgwMAogI2RlZmluZSBTUEVFRF9GTEVYSUJMRQkJCTB4MDEKICNkZWZpbmUgU1BFRURfT1ZFUkRSSVZFCQkJMHgwMgpAQCAtMTMxLDYgKzEzNywxNSBAQAogCiAJaW50CQkJZXBbTlVNX0VQXTsKIAorCS8qIFN0cm9uZyBQdWxsVXAKKwkgKiAwOiBwdWxsdXAgbm90IGFjdGl2ZSwgZWxzZSBkdXJhdGlvbiBpbiBtaWxsaXNlY29uZHMKKwkgKi8KKwlpbnQJCQlzcHVfc2xlZXA7CisJLyogc3B1X2JpdCBjb250YWlucyBDT01NX1NQVSBvciAwIGRlcGVuZGluZyBvbiBpZiB0aGUgc3Ryb25nIHB1bGx1cAorCSAqIHNob3VsZCBiZSBhY3RpdmUgb3Igbm90IGZvciB3cml0ZXMuCisJICovCisJdTE2CQkJc3B1X2JpdDsKKwogCXN0cnVjdCB3MV9idXNfbWFzdGVyCW1hc3RlcjsKIH07CiAKQEAgLTE2NCw3ICsxNzksNiBAQAogc3RhdGljIGludCBkc19wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqLCBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqKTsKIHN0YXRpYyB2b2lkIGRzX2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKik7CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBkc19kdW1wX3N0YXR1cyh1bnNpZ25lZCBjaGFyICosIHVuc2lnbmVkIGNoYXIgKiwgaW50KTsKIHN0YXRpYyBpbnQgZHNfc2VuZF9jb250cm9sKHN0cnVjdCBkc19kZXZpY2UgKiwgdTE2LCB1MTYpOwogc3RhdGljIGludCBkc19zZW5kX2NvbnRyb2xfY21kKHN0cnVjdCBkc19kZXZpY2UgKiwgdTE2LCB1MTYpOwogCkBAIC0xOTIsNyArMjA2LDcgQEAKIAogCXJldHVybiBlcnI7CiB9Ci0jaWYgMAorCiBzdGF0aWMgaW50IGRzX3NlbmRfY29udHJvbF9tb2RlKHN0cnVjdCBkc19kZXZpY2UgKmRldiwgdTE2IHZhbHVlLCB1MTYgaW5kZXgpCiB7CiAJaW50IGVycjsKQEAgLTIwNyw3ICsyMjEsNyBAQAogCiAJcmV0dXJuIGVycjsKIH0KLSNlbmRpZgorCiBzdGF0aWMgaW50IGRzX3NlbmRfY29udHJvbChzdHJ1Y3QgZHNfZGV2aWNlICpkZXYsIHUxNiB2YWx1ZSwgdTE2IGluZGV4KQogewogCWludCBlcnI7CkBAIC0yMjMsMTEgKzIzNyw2IEBACiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGRzX2R1bXBfc3RhdHVzKHVuc2lnbmVkIGNoYXIgKmJ1ZiwgdW5zaWduZWQgY2hhciAqc3RyLCBpbnQgb2ZmKQotewotCXByaW50aygiJTQ1czogJTh4XG4iLCBzdHIsIGJ1ZltvZmZdKTsKLX0KLQogc3RhdGljIGludCBkc19yZWN2X3N0YXR1c19ub2R1bXAoc3RydWN0IGRzX2RldmljZSAqZGV2LCBzdHJ1Y3QgZHNfc3RhdHVzICpzdCwKIAkJCQkgdW5zaWduZWQgY2hhciAqYnVmLCBpbnQgc2l6ZSkKIHsKQEAgLTI0OCw2MiArMjU3LDgxIEBACiAJcmV0dXJuIGNvdW50OwogfQogCi1zdGF0aWMgaW50IGRzX3JlY3Zfc3RhdHVzKHN0cnVjdCBkc19kZXZpY2UgKmRldiwgc3RydWN0IGRzX3N0YXR1cyAqc3QpCitzdGF0aWMgaW5saW5lIHZvaWQgZHNfcHJpbnRfbXNnKHVuc2lnbmVkIGNoYXIgKmJ1ZiwgdW5zaWduZWQgY2hhciAqc3RyLCBpbnQgb2ZmKQogewotCXVuc2lnbmVkIGNoYXIgYnVmWzY0XTsKLQlpbnQgY291bnQsIGVyciA9IDAsIGk7CisJcHJpbnRrKEtFUk5fSU5GTyAiJTQ1czogJTh4XG4iLCBzdHIsIGJ1ZltvZmZdKTsKK30KIAotCW1lbWNweShzdCwgYnVmLCBzaXplb2YoKnN0KSk7CitzdGF0aWMgdm9pZCBkc19kdW1wX3N0YXR1cyhzdHJ1Y3QgZHNfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGNoYXIgKmJ1ZiwgaW50IGNvdW50KQoreworCWludCBpOwogCi0JY291bnQgPSBkc19yZWN2X3N0YXR1c19ub2R1bXAoZGV2LCBzdCwgYnVmLCBzaXplb2YoYnVmKSk7Ci0JaWYgKGNvdW50IDwgMCkKLQkJcmV0dXJuIGVycjsKLQotCXByaW50aygiMHgleDogY291bnQ9JWQsIHN0YXR1czogIiwgZGV2LT5lcFtFUF9TVEFUVVNdLCBjb3VudCk7CisJcHJpbnRrKEtFUk5fSU5GTyAiMHgleDogY291bnQ9JWQsIHN0YXR1czogIiwgZGV2LT5lcFtFUF9TVEFUVVNdLCBjb3VudCk7CiAJZm9yIChpPTA7IGk8Y291bnQ7ICsraSkKIAkJcHJpbnRrKCIlMDJ4ICIsIGJ1ZltpXSk7Ci0JcHJpbnRrKCJcbiIpOworCXByaW50ayhLRVJOX0lORk8gIlxuIik7CiAKIAlpZiAoY291bnQgPj0gMTYpIHsKLQkJZHNfZHVtcF9zdGF0dXMoYnVmLCAiZW5hYmxlIGZsYWciLCAwKTsKLQkJZHNfZHVtcF9zdGF0dXMoYnVmLCAiMS13aXJlIHNwZWVkIiwgMSk7Ci0JCWRzX2R1bXBfc3RhdHVzKGJ1ZiwgInN0cm9uZyBwdWxsdXAgZHVyYXRpb24iLCAyKTsKLQkJZHNfZHVtcF9zdGF0dXMoYnVmLCAicHJvZ3JhbW1pbmcgcHVsc2UgZHVyYXRpb24iLCAzKTsKLQkJZHNfZHVtcF9zdGF0dXMoYnVmLCAicHVsbGRvd24gc2xldyByYXRlIGNvbnRyb2wiLCA0KTsKLQkJZHNfZHVtcF9zdGF0dXMoYnVmLCAid3JpdGUtMSBsb3cgdGltZSIsIDUpOwotCQlkc19kdW1wX3N0YXR1cyhidWYsICJkYXRhIHNhbXBsZSBvZmZzZXQvd3JpdGUtMCByZWNvdmVyeSB0aW1lIiwgNik7Ci0JCWRzX2R1bXBfc3RhdHVzKGJ1ZiwgInJlc2VydmVkICh0ZXN0IHJlZ2lzdGVyKSIsIDcpOwotCQlkc19kdW1wX3N0YXR1cyhidWYsICJkZXZpY2Ugc3RhdHVzIGZsYWdzIiwgOCk7Ci0JCWRzX2R1bXBfc3RhdHVzKGJ1ZiwgImNvbW11bmljYXRpb24gY29tbWFuZCBieXRlIDEiLCA5KTsKLQkJZHNfZHVtcF9zdGF0dXMoYnVmLCAiY29tbXVuaWNhdGlvbiBjb21tYW5kIGJ5dGUgMiIsIDEwKTsKLQkJZHNfZHVtcF9zdGF0dXMoYnVmLCAiY29tbXVuaWNhdGlvbiBjb21tYW5kIGJ1ZmZlciBzdGF0dXMiLCAxMSk7Ci0JCWRzX2R1bXBfc3RhdHVzKGJ1ZiwgIjEtd2lyZSBkYXRhIG91dHB1dCBidWZmZXIgc3RhdHVzIiwgMTIpOwotCQlkc19kdW1wX3N0YXR1cyhidWYsICIxLXdpcmUgZGF0YSBpbnB1dCBidWZmZXIgc3RhdHVzIiwgMTMpOwotCQlkc19kdW1wX3N0YXR1cyhidWYsICJyZXNlcnZlZCIsIDE0KTsKLQkJZHNfZHVtcF9zdGF0dXMoYnVmLCAicmVzZXJ2ZWQiLCAxNSk7CisJCWRzX3ByaW50X21zZyhidWYsICJlbmFibGUgZmxhZyIsIDApOworCQlkc19wcmludF9tc2coYnVmLCAiMS13aXJlIHNwZWVkIiwgMSk7CisJCWRzX3ByaW50X21zZyhidWYsICJzdHJvbmcgcHVsbHVwIGR1cmF0aW9uIiwgMik7CisJCWRzX3ByaW50X21zZyhidWYsICJwcm9ncmFtbWluZyBwdWxzZSBkdXJhdGlvbiIsIDMpOworCQlkc19wcmludF9tc2coYnVmLCAicHVsbGRvd24gc2xldyByYXRlIGNvbnRyb2wiLCA0KTsKKwkJZHNfcHJpbnRfbXNnKGJ1ZiwgIndyaXRlLTEgbG93IHRpbWUiLCA1KTsKKwkJZHNfcHJpbnRfbXNnKGJ1ZiwgImRhdGEgc2FtcGxlIG9mZnNldC93cml0ZS0wIHJlY292ZXJ5IHRpbWUiLAorCQkJNik7CisJCWRzX3ByaW50X21zZyhidWYsICJyZXNlcnZlZCAodGVzdCByZWdpc3RlcikiLCA3KTsKKwkJZHNfcHJpbnRfbXNnKGJ1ZiwgImRldmljZSBzdGF0dXMgZmxhZ3MiLCA4KTsKKwkJZHNfcHJpbnRfbXNnKGJ1ZiwgImNvbW11bmljYXRpb24gY29tbWFuZCBieXRlIDEiLCA5KTsKKwkJZHNfcHJpbnRfbXNnKGJ1ZiwgImNvbW11bmljYXRpb24gY29tbWFuZCBieXRlIDIiLCAxMCk7CisJCWRzX3ByaW50X21zZyhidWYsICJjb21tdW5pY2F0aW9uIGNvbW1hbmQgYnVmZmVyIHN0YXR1cyIsIDExKTsKKwkJZHNfcHJpbnRfbXNnKGJ1ZiwgIjEtd2lyZSBkYXRhIG91dHB1dCBidWZmZXIgc3RhdHVzIiwgMTIpOworCQlkc19wcmludF9tc2coYnVmLCAiMS13aXJlIGRhdGEgaW5wdXQgYnVmZmVyIHN0YXR1cyIsIDEzKTsKKwkJZHNfcHJpbnRfbXNnKGJ1ZiwgInJlc2VydmVkIiwgMTQpOworCQlkc19wcmludF9tc2coYnVmLCAicmVzZXJ2ZWQiLCAxNSk7CiAJfQotCi0JbWVtY3B5KHN0LCBidWYsIHNpemVvZigqc3QpKTsKLQotCWlmIChzdC0+c3RhdHVzICYgU1RfRVBPRikgewotCQlwcmludGsoS0VSTl9JTkZPICJSZXNldHRpbmcgZGV2aWNlIGFmdGVyIFNUX0VQT0YuXG4iKTsKLQkJZXJyID0gZHNfc2VuZF9jb250cm9sX2NtZChkZXYsIENUTF9SRVNFVF9ERVZJQ0UsIDApOwotCQlpZiAoZXJyKQotCQkJcmV0dXJuIGVycjsKLQkJY291bnQgPSBkc19yZWN2X3N0YXR1c19ub2R1bXAoZGV2LCBzdCwgYnVmLCBzaXplb2YoYnVmKSk7Ci0JCWlmIChjb3VudCA8IDApCi0JCQlyZXR1cm4gZXJyOworCWZvciAoaSA9IDE2OyBpIDwgY291bnQ7ICsraSkgeworCQlpZiAoYnVmW2ldID09IFJSX0RFVEVDVCkgeworCQkJZHNfcHJpbnRfbXNnKGJ1ZiwgIm5ldyBkZXZpY2UgZGV0ZWN0IiwgaSk7CisJCQljb250aW51ZTsKKwkJfQorCQlkc19wcmludF9tc2coYnVmLCAiUmVzdWx0IFJlZ2lzdGVyIFZhbHVlOiAiLCBpKTsKKwkJaWYgKGJ1ZltpXSAmIFJSX05SUykKKwkJCXByaW50ayhLRVJOX0lORk8gIk5SUzogUmVzZXQgbm8gcHJlc2VuY2Ugb3IgLi4uXG4iKTsKKwkJaWYgKGJ1ZltpXSAmIFJSX1NIKQorCQkJcHJpbnRrKEtFUk5fSU5GTyAiU0g6IHNob3J0IG9uIHJlc2V0IG9yIHNldCBwYXRoXG4iKTsKKwkJaWYgKGJ1ZltpXSAmIFJSX0FQUCkKKwkJCXByaW50ayhLRVJOX0lORk8gIkFQUDogYWxhcm1pbmcgcHJlc2VuY2Ugb24gcmVzZXRcbiIpOworCQlpZiAoYnVmW2ldICYgUlJfVlBQKQorCQkJcHJpbnRrKEtFUk5fSU5GTyAiVlBQOiAxMlYgZXhwZWN0ZWQgbm90IHNlZW5cbiIpOworCQlpZiAoYnVmW2ldICYgUlJfQ01QKQorCQkJcHJpbnRrKEtFUk5fSU5GTyAiQ01QOiBjb21wYXJlIGVycm9yXG4iKTsKKwkJaWYgKGJ1ZltpXSAmIFJSX0NSQykKKwkJCXByaW50ayhLRVJOX0lORk8gIkNSQzogQ1JDIGVycm9yIGRldGVjdGVkXG4iKTsKKwkJaWYgKGJ1ZltpXSAmIFJSX1JEUCkKKwkJCXByaW50ayhLRVJOX0lORk8gIlJEUDogcmVkaXJlY3RlZCBwYWdlXG4iKTsKKwkJaWYgKGJ1ZltpXSAmIFJSX0VPUykKKwkJCXByaW50ayhLRVJOX0lORk8gIkVPUzogZW5kIG9mIHNlYXJjaCBlcnJvclxuIik7CiAJfQotI2lmIDAKLQlpZiAoc3QtPnN0YXR1cyAmIFNUX0lETEUpIHsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiUmVzZXR0aW5nIHB1bHNlIGFmdGVyIFNUX0lETEUuXG4iKTsKLQkJZXJyID0gZHNfc3RhcnRfcHVsc2UoZGV2LCBQVUxMVVBfUFVMU0VfRFVSQVRJT04pOwotCQlpZiAoZXJyKQotCQkJcmV0dXJuIGVycjsKLQl9Ci0jZW5kaWYKK30KIAotCXJldHVybiBlcnI7CitzdGF0aWMgdm9pZCBkc19yZXNldF9kZXZpY2Uoc3RydWN0IGRzX2RldmljZSAqZGV2KQoreworCWRzX3NlbmRfY29udHJvbF9jbWQoZGV2LCBDVExfUkVTRVRfREVWSUNFLCAwKTsKKwkvKiBBbHdheXMgYWxsb3cgc3Ryb25nIHB1bGx1cCB3aGljaCBhbGxvdyBpbmRpdmlkdWFsIHdyaXRlcyB0byB1c2UKKwkgKiB0aGUgc3Ryb25nIHB1bGx1cC4KKwkgKi8KKwlpZiAoZHNfc2VuZF9jb250cm9sX21vZGUoZGV2LCBNT0RfUFVMU0VfRU4sIFBVTFNFX1NQVUUpKQorCQlwcmludGsoS0VSTl9FUlIgImRzX3Jlc2V0X2RldmljZTogIgorCQkJIkVycm9yIGFsbG93aW5nIHN0cm9uZyBwdWxsdXBcbiIpOworCS8qIENoaXAgc3Ryb25nIHB1bGx1cCB0aW1lIHdhcyBjbGVhcmVkLiAqLworCWlmIChkZXYtPnNwdV9zbGVlcCkgeworCQkvKiBsb3dlciA0IGJpdHMgYXJlIDAsIHNlZSBkc19zZXRfcHVsbHVwICovCisJCXU4IGRlbCA9IGRldi0+c3B1X3NsZWVwPj40OworCQlpZiAoZHNfc2VuZF9jb250cm9sKGRldiwgQ09NTV9TRVRfRFVSQVRJT04gfCBDT01NX0lNLCBkZWwpKQorCQkJcHJpbnRrKEtFUk5fRVJSICJkc19yZXNldF9kZXZpY2U6ICIKKwkJCQkiRXJyb3Igc2V0dGluZyBkdXJhdGlvblxuIik7CisJfQogfQogCiBzdGF0aWMgaW50IGRzX3JlY3ZfZGF0YShzdHJ1Y3QgZHNfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGNoYXIgKmJ1ZiwgaW50IHNpemUpCkBAIC0zMTEsMTMgKzMzOSwyNyBAQAogCWludCBjb3VudCwgZXJyOwogCXN0cnVjdCBkc19zdGF0dXMgc3Q7CiAKKwkvKiBDYXJlZnVsIG9uIHNpemUuICBJZiBzaXplIGlzIGxlc3MgdGhhbiB3aGF0IGlzIGF2YWlsYWJsZSBpbgorCSAqIHRoZSBpbnB1dCBidWZmZXIsIHRoZSBkZXZpY2UgZmFpbHMgdGhlIGJ1bGsgdHJhbnNmZXIgYW5kCisJICogY2xlYXJzIHRoZSBpbnB1dCBidWZmZXIuICBJdCBjb3VsZCByZWFkIHRoZSBtYXhpbXVtIHNpemUgb2YKKwkgKiB0aGUgZGF0YSBidWZmZXIsIGJ1dCB0aGVuIGRvIHlvdSByZXR1cm4gdGhlIGZpcnN0LCBsYXN0LCBvcgorCSAqIHNvbWUgc2V0IG9mIHRoZSBtaWRkbGUgc2l6ZSBieXRlcz8gIEFzIGxvbmcgYXMgdGhlIHJlc3Qgb2YKKwkgKiB0aGUgY29kZSBpcyBjb3JyZWN0IHRoZXJlIHdpbGwgYmUgc2l6ZSBieXRlcyB3YWl0aW5nLiAgQQorCSAqIGNhbGwgdG8gZHNfd2FpdF9zdGF0dXMgd2lsbCB3YWl0IHVudGlsIHRoZSBkZXZpY2UgaXMgaWRsZQorCSAqIGFuZCBhbnkgZGF0YSB0byBiZSByZWNlaXZlZCB3b3VsZCBoYXZlIGJlZW4gYXZhaWxhYmxlLgorCSAqLwogCWNvdW50ID0gMDsKIAllcnIgPSB1c2JfYnVsa19tc2coZGV2LT51ZGV2LCB1c2JfcmN2YnVsa3BpcGUoZGV2LT51ZGV2LCBkZXYtPmVwW0VQX0RBVEFfSU5dKSwKIAkJCQlidWYsIHNpemUsICZjb3VudCwgMTAwMCk7CiAJaWYgKGVyciA8IDApIHsKKwkJdTggYnVmWzB4MjBdOworCQlpbnQgY291bnQ7CisKIAkJcHJpbnRrKEtFUk5fSU5GTyAiQ2xlYXJpbmcgZXAweCV4LlxuIiwgZGV2LT5lcFtFUF9EQVRBX0lOXSk7CiAJCXVzYl9jbGVhcl9oYWx0KGRldi0+dWRldiwgdXNiX3JjdmJ1bGtwaXBlKGRldi0+dWRldiwgZGV2LT5lcFtFUF9EQVRBX0lOXSkpOwotCQlkc19yZWN2X3N0YXR1cyhkZXYsICZzdCk7CisKKwkJY291bnQgPSBkc19yZWN2X3N0YXR1c19ub2R1bXAoZGV2LCAmc3QsIGJ1Ziwgc2l6ZW9mKGJ1ZikpOworCQlkc19kdW1wX3N0YXR1cyhkZXYsIGJ1ZiwgY291bnQpOwogCQlyZXR1cm4gZXJyOwogCX0KIApAQCAtMzQxLDcgKzM4Myw4IEBACiAJY291bnQgPSAwOwogCWVyciA9IHVzYl9idWxrX21zZyhkZXYtPnVkZXYsIHVzYl9zbmRidWxrcGlwZShkZXYtPnVkZXYsIGRldi0+ZXBbRVBfREFUQV9PVVRdKSwgYnVmLCBsZW4sICZjb3VudCwgMTAwMCk7CiAJaWYgKGVyciA8IDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJGYWlsZWQgdG8gcmVhZCAxLXdpcmUgZGF0YSBmcm9tIDB4MDI6IGVycj0lZC5cbiIsIGVycik7CisJCXByaW50ayhLRVJOX0VSUiAiRmFpbGVkIHRvIHdyaXRlIDEtd2lyZSBkYXRhIHRvIGVwMHgleDogIgorCQkJImVycj0lZC5cbiIsIGRldi0+ZXBbRVBfREFUQV9PVVRdLCBlcnIpOwogCQlyZXR1cm4gZXJyOwogCX0KIApAQCAtMzk3LDcgKzQ0MCw3IEBACiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIAotCWVyciA9IGRzX3JlY3Zfc3RhdHVzKGRldiwgc3QpOworCWVyciA9IGRzX2R1bXBfc3RhdHVzKGRldiwgc3QpOwogCiAJcmV0dXJuIGVycjsKIH0KQEAgLTQyMCwzMyArNDYzLDQ5IEBACiAJCQlwcmludGsoIlxuIik7CiAJCX0KICNlbmRpZgotCX0gd2hpbGUoIShidWZbMHgwOF0gJiAweDIwKSAmJiAhKGVyciA8IDApICYmICsrY291bnQgPCAxMDApOworCX0gd2hpbGUgKCEoYnVmWzB4MDhdICYgU1RfSURMRSkgJiYgIShlcnIgPCAwKSAmJiArK2NvdW50IDwgMTAwKTsKIAorCWlmIChlcnIgPj0gMTYgJiYgc3QtPnN0YXR1cyAmIFNUX0VQT0YpIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiUmVzZXR0aW5nIGRldmljZSBhZnRlciBTVF9FUE9GLlxuIik7CisJCWRzX3Jlc2V0X2RldmljZShkZXYpOworCQkvKiBBbHdheXMgZHVtcCB0aGUgZGV2aWNlIHN0YXR1cy4gKi8KKwkJY291bnQgPSAxMDE7CisJfQogCi0JaWYgKCgoZXJyID4gMTYpICYmIChidWZbMHgxMF0gJiAweDAxKSkgfHwgY291bnQgPj0gMTAwIHx8IGVyciA8IDApIHsKLQkJZHNfcmVjdl9zdGF0dXMoZGV2LCBzdCk7CisJLyogRHVtcCB0aGUgc3RhdHVzIGZvciBlcnJvcnMgb3IgaWYgdGhlcmUgaXMgZXh0ZW5kZWQgcmV0dXJuIGRhdGEuCisJICogVGhlIGV4dGVuZGVkIHN0YXR1cyBpbmNsdWRlcyBuZXcgZGV2aWNlIGRldGVjdGlvbiAobWF5YmUgc29tZW9uZQorCSAqIGNhbiBkbyBzb21ldGhpbmcgd2l0aCBpdCkuCisJICovCisJaWYgKGVyciA+IDE2IHx8IGNvdW50ID49IDEwMCB8fCBlcnIgPCAwKQorCQlkc19kdW1wX3N0YXR1cyhkZXYsIGJ1ZiwgZXJyKTsKKworCS8qIEV4dGVuZGVkIGRhdGEgaXNuJ3QgYW4gZXJyb3IuICBXZWxsLCBhIHNob3J0IGlzLCBidXQgdGhlIGR1bXAKKwkgKiB3b3VsZCBoYXZlIGFscmVhZHkgdG9sZCB0aGUgdXNlciB0aGF0IGFuZCB3ZSBjYW4ndCBkbyBhbnl0aGluZworCSAqIGFib3V0IGl0IGluIHNvZnR3YXJlIGFueXdheS4KKwkgKi8KKwlpZiAoY291bnQgPj0gMTAwIHx8IGVyciA8IDApCiAJCXJldHVybiAtMTsKLQl9IGVsc2UKKwllbHNlCiAJCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGRzX3Jlc2V0KHN0cnVjdCBkc19kZXZpY2UgKmRldiwgc3RydWN0IGRzX3N0YXR1cyAqc3QpCitzdGF0aWMgaW50IGRzX3Jlc2V0KHN0cnVjdCBkc19kZXZpY2UgKmRldikKIHsKIAlpbnQgZXJyOwogCi0JLy9lcnIgPSBkc19zZW5kX2NvbnRyb2woZGV2LCBDT01NXzFfV0lSRV9SRVNFVCB8IENPTU1fRiB8IENPTU1fSU0gfCBDT01NX1NFLCBTUEVFRF9GTEVYSUJMRSk7Ci0JZXJyID0gZHNfc2VuZF9jb250cm9sKGRldiwgMHg0MywgU1BFRURfTk9STUFMKTsKKwkvKiBPdGhlciBwb3RlbnRpb25hbGx5IGludGVyZXN0aW5nIGZsYWdzIGZvciByZXNldC4KKwkgKgorCSAqIENPTU1fTlRGOiBSZXR1cm4gcmVzdWx0IHJlZ2lzdGVyIGZlZWRiYWNrLiAgVGhpcyBjb3VsZCBiZSB1c2VkIHRvCisJICogZGV0ZWN0IHNvbWUgY29uZGl0aW9ucyBzdWNoIGFzIHNob3J0LCBhbGFybWluZyBwcmVzZW5jZSwgb3IKKwkgKiBkZXRlY3QgaWYgYSBuZXcgZGV2aWNlIHdhcyBkZXRlY3RlZC4KKwkgKgorCSAqIENPTU1fU0Ugd2hpY2ggYWxsb3dzIFNQRUVEX05PUk1BTCwgU1BFRURfRkxFWElCTEUsIFNQRUVEX09WRVJEUklWRToKKwkgKiBTZWxlY3QgdGhlIGRhdGEgdHJhbnNmZXIgcmF0ZS4KKwkgKi8KKwllcnIgPSBkc19zZW5kX2NvbnRyb2woZGV2LCBDT01NXzFfV0lSRV9SRVNFVCB8IENPTU1fSU0sIFNQRUVEX05PUk1BTCk7CiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIAotCWRzX3dhaXRfc3RhdHVzKGRldiwgc3QpOwotI2lmIDAKLQlpZiAoc3QtPmNvbW1hbmRfYnVmZmVyX3N0YXR1cykgewotCQlwcmludGsoS0VSTl9JTkZPICJTaG9ydCBjaXJjdWl0LlxuIik7Ci0JCXJldHVybiAtRUlPOwotCX0KLSNlbmRpZgotCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTQ3MSw2MCArNTMwLDQzIEBACiB9CiAjZW5kaWYgIC8qICAwICAqLwogCi1zdGF0aWMgaW50IGRzX3N0YXJ0X3B1bHNlKHN0cnVjdCBkc19kZXZpY2UgKmRldiwgaW50IGRlbGF5KQorc3RhdGljIGludCBkc19zZXRfcHVsbHVwKHN0cnVjdCBkc19kZXZpY2UgKmRldiwgaW50IGRlbGF5KQogewotCWludCBlcnI7CisJaW50IGVyciA9IDA7CiAJdTggZGVsID0gMSArICh1OCkoZGVsYXkgPj4gNCk7Ci0Jc3RydWN0IGRzX3N0YXR1cyBzdDsKKwkvKiBKdXN0IHN0b3JpbmcgZGVsYXkgd291bGQgbm90IGdldCB0aGUgdHJ1bmljYXRpb24gYW5kIHJvdW5kdXAuICovCisJaW50IG1zID0gZGVsPDw0OwogCi0jaWYgMAotCWVyciA9IGRzX3N0b3BfcHVsc2UoZGV2LCAxMCk7Ci0JaWYgKGVycikKKwkvKiBFbmFibGUgc3B1X2JpdCBpZiBhIGRlbGF5IGlzIHNldC4gKi8KKwlkZXYtPnNwdV9iaXQgPSBkZWxheSA/IENPTU1fU1BVIDogMDsKKwkvKiBJZiBkZWxheSBpcyB6ZXJvLCBpdCBoYXMgYWxyZWFkeSBiZWVuIGRpc2FibGVkLCBpZiB0aGUgdGltZSBpcworCSAqIHRoZSBzYW1lIGFzIHRoZSBoYXJkd2FyZSB3YXMgbGFzdCBwcm9ncmFtbWVkIHRvLCB0aGVyZSBpcyBhbHNvCisJICogbm90aGluZyBtb3JlIHRvIGRvLiAgQ29tcGFyZSB3aXRoIHRoZSByZWNhbGN1bGF0ZWQgdmFsdWUgbXMKKwkgKiByYXRoZXIgdGhhbiBkZWwgb3IgZGVsYXkgd2hpY2ggY2FuIGhhdmUgYSBkaWZmZXJlbnQgdmFsdWUuCisJICovCisJaWYgKGRlbGF5ID09IDAgfHwgbXMgPT0gZGV2LT5zcHVfc2xlZXApCiAJCXJldHVybiBlcnI7CiAKLQllcnIgPSBkc19zZW5kX2NvbnRyb2xfbW9kZShkZXYsIE1PRF9QVUxTRV9FTiwgUFVMU0VfU1BVRSk7Ci0JaWYgKGVycikKLQkJcmV0dXJuIGVycjsKLSNlbmRpZgogCWVyciA9IGRzX3NlbmRfY29udHJvbChkZXYsIENPTU1fU0VUX0RVUkFUSU9OIHwgQ09NTV9JTSwgZGVsKTsKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwogCi0JZXJyID0gZHNfc2VuZF9jb250cm9sKGRldiwgQ09NTV9QVUxTRSB8IENPTU1fSU0gfCBDT01NX0YsIDApOwotCWlmIChlcnIpCi0JCXJldHVybiBlcnI7Ci0KLQltZGVsYXkoZGVsYXkpOwotCi0JZHNfd2FpdF9zdGF0dXMoZGV2LCAmc3QpOworCWRldi0+c3B1X3NsZWVwID0gbXM7CiAKIAlyZXR1cm4gZXJyOwogfQogCiBzdGF0aWMgaW50IGRzX3RvdWNoX2JpdChzdHJ1Y3QgZHNfZGV2aWNlICpkZXYsIHU4IGJpdCwgdTggKnRiaXQpCiB7Ci0JaW50IGVyciwgY291bnQ7CisJaW50IGVycjsKIAlzdHJ1Y3QgZHNfc3RhdHVzIHN0OwotCXUxNiB2YWx1ZSA9IChDT01NX0JJVF9JTyB8IENPTU1fSU0pIHwgKChiaXQpID8gQ09NTV9EIDogMCk7Ci0JdTE2IGNtZDsKIAotCWVyciA9IGRzX3NlbmRfY29udHJvbChkZXYsIHZhbHVlLCAwKTsKKwllcnIgPSBkc19zZW5kX2NvbnRyb2woZGV2LCBDT01NX0JJVF9JTyB8IENPTU1fSU0gfCAoYml0ID8gQ09NTV9EIDogMCksCisJCTApOwogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CiAKLQljb3VudCA9IDA7Ci0JZG8gewotCQllcnIgPSBkc193YWl0X3N0YXR1cyhkZXYsICZzdCk7Ci0JCWlmIChlcnIpCi0JCQlyZXR1cm4gZXJyOwotCi0JCWNtZCA9IHN0LmNvbW1hbmQwIHwgKHN0LmNvbW1hbmQxIDw8IDgpOwotCX0gd2hpbGUgKGNtZCAhPSB2YWx1ZSAmJiArK2NvdW50IDwgMTApOwotCi0JaWYgKGVyciA8IDAgfHwgY291bnQgPj0gMTApIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJGYWlsZWQgdG8gb2J0YWluIHN0YXR1cy5cbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9CisJZHNfd2FpdF9zdGF0dXMoZGV2LCAmc3QpOwogCiAJZXJyID0gZHNfcmVjdl9kYXRhKGRldiwgdGJpdCwgc2l6ZW9mKCp0Yml0KSk7CiAJaWYgKGVyciA8IDApCkBAIC01MzMsMTIgKzU3NSwxOCBAQAogCXJldHVybiAwOwogfQogCisjaWYgMAogc3RhdGljIGludCBkc193cml0ZV9iaXQoc3RydWN0IGRzX2RldmljZSAqZGV2LCB1OCBiaXQpCiB7CiAJaW50IGVycjsKIAlzdHJ1Y3QgZHNfc3RhdHVzIHN0OwogCi0JZXJyID0gZHNfc2VuZF9jb250cm9sKGRldiwgQ09NTV9CSVRfSU8gfCBDT01NX0lNIHwgKGJpdCkgPyBDT01NX0QgOiAwLCAwKTsKKwkvKiBTZXQgQ09NTV9JQ1AgdG8gd3JpdGUgd2l0aG91dCBhIHJlYWRiYWNrLiAgTm90ZSwgdGhpcyB3aWxsCisJICogcHJvZHVjZSBvbmUgdGltZSBzbG90LCBhIGRvd24gZm9sbG93ZWQgYnkgYW4gdXAgd2l0aCBDT01NX0QKKwkgKiBvbmx5IGRldGVybWluZyB0aGUgdGltaW5nLgorCSAqLworCWVyciA9IGRzX3NlbmRfY29udHJvbChkZXYsIENPTU1fQklUX0lPIHwgQ09NTV9JTSB8IENPTU1fSUNQIHwKKwkJKGJpdCA/IENPTU1fRCA6IDApLCAwKTsKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwogCkBAIC01NDYsNiArNTk0LDcgQEAKIAogCXJldHVybiAwOwogfQorI2VuZGlmCiAKIHN0YXRpYyBpbnQgZHNfd3JpdGVfYnl0ZShzdHJ1Y3QgZHNfZGV2aWNlICpkZXYsIHU4IGJ5dGUpCiB7CkBAIC01NTMsMTAgKzYwMiwxMyBAQAogCXN0cnVjdCBkc19zdGF0dXMgc3Q7CiAJdTggcmJ5dGU7CiAKLQllcnIgPSBkc19zZW5kX2NvbnRyb2woZGV2LCBDT01NX0JZVEVfSU8gfCBDT01NX0lNIHwgQ09NTV9TUFUsIGJ5dGUpOworCWVyciA9IGRzX3NlbmRfY29udHJvbChkZXYsIENPTU1fQllURV9JTyB8IENPTU1fSU0gfCBkZXYtPnNwdV9iaXQsIGJ5dGUpOwogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CiAKKwlpZiAoZGV2LT5zcHVfYml0KQorCQltc2xlZXAoZGV2LT5zcHVfc2xlZXApOworCiAJZXJyID0gZHNfd2FpdF9zdGF0dXMoZGV2LCAmc3QpOwogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CkBAIC01NjUsOCArNjE3LDYgQEAKIAlpZiAoZXJyIDwgMCkKIAkJcmV0dXJuIGVycjsKIAotCWRzX3N0YXJ0X3B1bHNlKGRldiwgUFVMTFVQX1BVTFNFX0RVUkFUSU9OKTsKLQogCXJldHVybiAhKGJ5dGUgPT0gcmJ5dGUpOwogfQogCkBAIC02MDIsNyArNjUyLDcgQEAKIAlpZiAoZXJyIDwgMCkKIAkJcmV0dXJuIGVycjsKIAotCWVyciA9IGRzX3NlbmRfY29udHJvbChkZXYsIENPTU1fQkxPQ0tfSU8gfCBDT01NX0lNIHwgQ09NTV9TUFUsIGxlbik7CisJZXJyID0gZHNfc2VuZF9jb250cm9sKGRldiwgQ09NTV9CTE9DS19JTyB8IENPTU1fSU0sIGxlbik7CiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIApAQCAtNjIzLDIwICs2NzMsMTkgQEAKIAlpZiAoZXJyIDwgMCkKIAkJcmV0dXJuIGVycjsKIAotCWRzX3dhaXRfc3RhdHVzKGRldiwgJnN0KTsKLQotCWVyciA9IGRzX3NlbmRfY29udHJvbChkZXYsIENPTU1fQkxPQ0tfSU8gfCBDT01NX0lNIHwgQ09NTV9TUFUsIGxlbik7CisJZXJyID0gZHNfc2VuZF9jb250cm9sKGRldiwgQ09NTV9CTE9DS19JTyB8IENPTU1fSU0gfCBkZXYtPnNwdV9iaXQsIGxlbik7CiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIAorCWlmIChkZXYtPnNwdV9iaXQpCisJCW1zbGVlcChkZXYtPnNwdV9zbGVlcCk7CisKIAlkc193YWl0X3N0YXR1cyhkZXYsICZzdCk7CiAKIAllcnIgPSBkc19yZWN2X2RhdGEoZGV2LCBidWYsIGxlbik7CiAJaWYgKGVyciA8IDApCiAJCXJldHVybiBlcnI7CiAKLQlkc19zdGFydF9wdWxzZShkZXYsIFBVTExVUF9QVUxTRV9EVVJBVElPTik7Ci0KIAlyZXR1cm4gIShlcnIgPT0gbGVuKTsKIH0KIApAQCAtNzI4LDYgKzc3Nyw3IEBACiAJcmV0dXJuIHJldDsKIH0KIAorI2lmIDAKIHN0YXRpYyB2b2lkIGRzOTQ5MHJfd3JpdGVfYml0KHZvaWQgKmRhdGEsIHU4IGJpdCkKIHsKIAlzdHJ1Y3QgZHNfZGV2aWNlICpkZXYgPSBkYXRhOwpAQCAtNzM1LDEzICs3ODUsNiBAQAogCWRzX3dyaXRlX2JpdChkZXYsIGJpdCk7CiB9CiAKLXN0YXRpYyB2b2lkIGRzOTQ5MHJfd3JpdGVfYnl0ZSh2b2lkICpkYXRhLCB1OCBieXRlKQotewotCXN0cnVjdCBkc19kZXZpY2UgKmRldiA9IGRhdGE7Ci0KLQlkc193cml0ZV9ieXRlKGRldiwgYnl0ZSk7Ci19Ci0KIHN0YXRpYyB1OCBkczk0OTByX3JlYWRfYml0KHZvaWQgKmRhdGEpCiB7CiAJc3RydWN0IGRzX2RldmljZSAqZGV2ID0gZGF0YTsKQEAgLTc1NCw2ICs3OTcsMTQgQEAKIAogCXJldHVybiBiaXQgJiAxOwogfQorI2VuZGlmCisKK3N0YXRpYyB2b2lkIGRzOTQ5MHJfd3JpdGVfYnl0ZSh2b2lkICpkYXRhLCB1OCBieXRlKQoreworCXN0cnVjdCBkc19kZXZpY2UgKmRldiA9IGRhdGE7CisKKwlkc193cml0ZV9ieXRlKGRldiwgYnl0ZSk7Cit9CiAKIHN0YXRpYyB1OCBkczk0OTByX3JlYWRfYnl0ZSh2b2lkICpkYXRhKQogewpAQCAtNzkwLDMxICs4NDEsNTggQEAKIHN0YXRpYyB1OCBkczk0OTByX3Jlc2V0KHZvaWQgKmRhdGEpCiB7CiAJc3RydWN0IGRzX2RldmljZSAqZGV2ID0gZGF0YTsKLQlzdHJ1Y3QgZHNfc3RhdHVzIHN0OwogCWludCBlcnI7CiAKLQltZW1zZXQoJnN0LCAwLCBzaXplb2Yoc3QpKTsKLQotCWVyciA9IGRzX3Jlc2V0KGRldiwgJnN0KTsKKwllcnIgPSBkc19yZXNldChkZXYpOwogCWlmIChlcnIpCiAJCXJldHVybiAxOwogCiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyB1OCBkczk0OTByX3NldF9wdWxsdXAodm9pZCAqZGF0YSwgaW50IGRlbGF5KQoreworCXN0cnVjdCBkc19kZXZpY2UgKmRldiA9IGRhdGE7CisKKwlpZiAoZHNfc2V0X3B1bGx1cChkZXYsIGRlbGF5KSkKKwkJcmV0dXJuIDE7CisKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGludCBkc193MV9pbml0KHN0cnVjdCBkc19kZXZpY2UgKmRldikKIHsKIAltZW1zZXQoJmRldi0+bWFzdGVyLCAwLCBzaXplb2Yoc3RydWN0IHcxX2J1c19tYXN0ZXIpKTsKIAorCS8qIFJlc2V0IHRoZSBkZXZpY2UgYXMgaXQgY2FuIGJlIGluIGEgYmFkIHN0YXRlLgorCSAqIFRoaXMgaXMgbmVjZXNzYXJ5IGJlY2F1c2UgYSBibG9jayB3cml0ZSB3aWxsIHdhaXQgZm9yIGRhdGEKKwkgKiB0byBiZSBwbGFjZWQgaW4gdGhlIG91dHB1dCBidWZmZXIgYW5kIGJsb2NrIGFueSBsYXRlcgorCSAqIGNvbW1hbmRzIHdoaWNoIHdpbGwga2VlcCBhY2N1bXVsYXRpbmcgYW5kIHRoZSBkZXZpY2Ugd2lsbAorCSAqIG5vdCBiZSBpZGxlLiAgQW5vdGhlciBjYXNlIGlzIHJlbW92aW5nIHRoZSBkczI0OTAgbW9kdWxlCisJICogd2hpbGUgYSBidXMgc2VhcmNoIGlzIGluIHByb2dyZXNzLCBzb21laG93IGEgZmV3IGNvbW1hbmRzCisJICogZ2V0IHRocm91Z2gsIGJ1dCB0aGUgaW5wdXQgdHJhbnNmZXJzIGZhaWwgbGVhdmluZyBkYXRhIGluCisJICogdGhlIGlucHV0IGJ1ZmZlci4gIFRoaXMgd2lsbCBjYXVzZSB0aGUgbmV4dCByZWFkIHRvIGZhaWwKKwkgKiBzZWUgdGhlIG5vdGUgaW4gZHNfcmVjdl9kYXRhLgorCSAqLworCWRzX3Jlc2V0X2RldmljZShkZXYpOworCiAJZGV2LT5tYXN0ZXIuZGF0YQk9IGRldjsKIAlkZXYtPm1hc3Rlci50b3VjaF9iaXQJPSAmZHM5NDkwcl90b3VjaF9iaXQ7CisJLyogcmVhZF9iaXQgYW5kIHdyaXRlX2JpdCBpbiB3MV9idXNfbWFzdGVyIGFyZSBleHBlY3RlZCB0byBzZXQgYW5kCisJICogc2FtcGxlIHRoZSBsaW5lIGxldmVsLiAgRm9yIHdyaXRlX2JpdCB0aGF0IG1lYW5zIGl0IGlzIGV4cGVjdGVkIHRvCisJICogc2V0IGl0IHRvIHRoYXQgdmFsdWUgYW5kIGxlYXZlIGl0IHRoZXJlLiAgZHMyNDkwIG9ubHkgc3VwcG9ydHMgYW4KKwkgKiBpbmRpdmlkdWFsIHRpbWUgc2xvdCBhdCB0aGUgbG93ZXN0IGxldmVsLiAgVGhlIHJlcXVpcmVtZW50IGZyb20KKwkgKiBwdWxsaW5nIHRoZSBidXMgc3RhdGUgZG93biB0byByZWFkaW5nIHRoZSBzdGF0ZSBpcyAxNXVzLCBzb21ldGhpbmcKKwkgKiB0aGF0IGlzbid0IHJlYWxpc3RpYyBvbiB0aGUgVVNCIGJ1cyBhbnl3YXkuCiAJZGV2LT5tYXN0ZXIucmVhZF9iaXQJPSAmZHM5NDkwcl9yZWFkX2JpdDsKIAlkZXYtPm1hc3Rlci53cml0ZV9iaXQJPSAmZHM5NDkwcl93cml0ZV9iaXQ7CisJKi8KIAlkZXYtPm1hc3Rlci5yZWFkX2J5dGUJPSAmZHM5NDkwcl9yZWFkX2J5dGU7CiAJZGV2LT5tYXN0ZXIud3JpdGVfYnl0ZQk9ICZkczk0OTByX3dyaXRlX2J5dGU7CiAJZGV2LT5tYXN0ZXIucmVhZF9ibG9jawk9ICZkczk0OTByX3JlYWRfYmxvY2s7CiAJZGV2LT5tYXN0ZXIud3JpdGVfYmxvY2sJPSAmZHM5NDkwcl93cml0ZV9ibG9jazsKIAlkZXYtPm1hc3Rlci5yZXNldF9idXMJPSAmZHM5NDkwcl9yZXNldDsKKwlkZXYtPm1hc3Rlci5zZXRfcHVsbHVwCT0gJmRzOTQ5MHJfc2V0X3B1bGx1cDsKIAogCXJldHVybiB3MV9hZGRfbWFzdGVyX2RldmljZSgmZGV2LT5tYXN0ZXIpOwogfQpAQCAtODM4LDYgKzkxNiw4IEBACiAJCXByaW50ayhLRVJOX0lORk8gIkZhaWxlZCB0byBhbGxvY2F0ZSBuZXcgRFM5NDkwUiBzdHJ1Y3R1cmUuXG4iKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQorCWRldi0+c3B1X3NsZWVwID0gMDsKKwlkZXYtPnNwdV9iaXQgPSAwOwogCWRldi0+dWRldiA9IHVzYl9nZXRfZGV2KHVkZXYpOwogCWlmICghZGV2LT51ZGV2KSB7CiAJCWVyciA9IC1FTk9NRU07CmRpZmYgLS1naXQgYS9kcml2ZXJzL3cxL3NsYXZlcy93MV9kczI0MzEuYyBiL2RyaXZlcnMvdzEvc2xhdmVzL3cxX2RzMjQzMS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjNmMwY2YKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3cxL3NsYXZlcy93MV9kczI0MzEuYwpAQCAtMCwwICsxLDMxMiBAQAorLyoKKyAqIHcxX2RzMjQzMS5jIC0gdzEgZmFtaWx5IDJkIChEUzI0MzEpIGRyaXZlcgorICoKKyAqIENvcHlyaWdodCAoYykgMjAwOCBCZXJuaGFyZCBXZWlyaWNoIDxiZXJuaGFyZC53ZWlyaWNoQHJpZWRlbC5uZXQ+CisgKgorICogSGVhdmlseSBpbnNwaXJlZCBieSB3MV9EUzI0MzMgZHJpdmVyIGZyb20gQmVuIEdhcmRuZXIgPGJnYXJkbmVyQHdhYnRlYy5jb20+CisgKgorICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCisgKiBWZXJzaW9uIDIuIFNlZSB0aGUgZmlsZSBDT1BZSU5HIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorCisjaW5jbHVkZSAiLi4vdzEuaCIKKyNpbmNsdWRlICIuLi93MV9pbnQuaCIKKyNpbmNsdWRlICIuLi93MV9mYW1pbHkuaCIKKworI2RlZmluZSBXMV9GMkRfRUVQUk9NX1NJWkUJCTEyOAorI2RlZmluZSBXMV9GMkRfUEFHRV9DT1VOVAkJNAorI2RlZmluZSBXMV9GMkRfUEFHRV9CSVRTCQk1CisjZGVmaW5lIFcxX0YyRF9QQUdFX1NJWkUJCSgxPDxXMV9GMkRfUEFHRV9CSVRTKQorI2RlZmluZSBXMV9GMkRfUEFHRV9NQVNLCQkweDFGCisKKyNkZWZpbmUgVzFfRjJEX1NDUkFUQ0hfQklUUyAgMworI2RlZmluZSBXMV9GMkRfU0NSQVRDSF9TSVpFICAoMTw8VzFfRjJEX1NDUkFUQ0hfQklUUykKKyNkZWZpbmUgVzFfRjJEX1NDUkFUQ0hfTUFTSyAgKFcxX0YyRF9TQ1JBVENIX1NJWkUtMSkKKworI2RlZmluZSBXMV9GMkRfUkVBRF9FRVBST00JMHhGMAorI2RlZmluZSBXMV9GMkRfV1JJVEVfU0NSQVRDSAkweDBGCisjZGVmaW5lIFcxX0YyRF9SRUFEX1NDUkFUQ0gJMHhBQQorI2RlZmluZSBXMV9GMkRfQ09QWV9TQ1JBVENICTB4NTUKKworCisjZGVmaW5lIFcxX0YyRF9UUFJPR19NUwkJMTEKKworI2RlZmluZSBXMV9GMkRfUkVBRF9SRVRSSUVTCQkxMAorI2RlZmluZSBXMV9GMkRfUkVBRF9NQVhMRU4JCTgKKworLyoKKyAqIENoZWNrIHRoZSBmaWxlIHNpemUgYm91bmRzIGFuZCBhZGp1c3RzIGNvdW50IGFzIG5lZWRlZC4KKyAqIFRoaXMgd291bGQgbm90IGJlIG5lZWRlZCBpZiB0aGUgZmlsZSBzaXplIGRpZG4ndCByZXNldCB0byAwIGFmdGVyIGEgd3JpdGUuCisgKi8KK3N0YXRpYyBpbmxpbmUgc2l6ZV90IHcxX2YyZF9maXhfY291bnQobG9mZl90IG9mZiwgc2l6ZV90IGNvdW50LCBzaXplX3Qgc2l6ZSkKK3sKKwlpZiAob2ZmID4gc2l6ZSkKKwkJcmV0dXJuIDA7CisKKwlpZiAoKG9mZiArIGNvdW50KSA+IHNpemUpCisJCXJldHVybiBzaXplIC0gb2ZmOworCisJcmV0dXJuIGNvdW50OworfQorCisvKgorICogUmVhZCBhIGJsb2NrIGZyb20gVzEgUk9NIHR3byB0aW1lcyBhbmQgY29tcGFyZXMgdGhlIHJlc3VsdHMuCisgKiBJZiB0aGV5IGFyZSBlcXVhbCB0aGV5IGFyZSByZXR1cm5lZCwgb3RoZXJ3aXNlIHRoZSByZWFkCisgKiBpcyByZXBlYXRlZCBXMV9GMkRfUkVBRF9SRVRSSUVTIHRpbWVzLgorICoKKyAqIGNvdW50IG11c3Qgbm90IGV4Y2VlZCBXMV9GMkRfUkVBRF9NQVhMRU4uCisgKi8KK3N0YXRpYyBpbnQgdzFfZjJkX3JlYWRibG9jayhzdHJ1Y3QgdzFfc2xhdmUgKnNsLCBpbnQgb2ZmLCBpbnQgY291bnQsIGNoYXIgKmJ1ZikKK3sKKwl1OCB3cmJ1ZlszXTsKKwl1OCBjbXBbVzFfRjJEX1JFQURfTUFYTEVOXTsKKwlpbnQgdHJpZXMgPSBXMV9GMkRfUkVBRF9SRVRSSUVTOworCisJZG8geworCQl3cmJ1ZlswXSA9IFcxX0YyRF9SRUFEX0VFUFJPTTsKKwkJd3JidWZbMV0gPSBvZmYgJiAweGZmOworCQl3cmJ1ZlsyXSA9IG9mZiA+PiA4OworCisJCWlmICh3MV9yZXNldF9zZWxlY3Rfc2xhdmUoc2wpKQorCQkJcmV0dXJuIC0xOworCisJCXcxX3dyaXRlX2Jsb2NrKHNsLT5tYXN0ZXIsIHdyYnVmLCAzKTsKKwkJdzFfcmVhZF9ibG9jayhzbC0+bWFzdGVyLCBidWYsIGNvdW50KTsKKworCQlpZiAodzFfcmVzZXRfc2VsZWN0X3NsYXZlKHNsKSkKKwkJCXJldHVybiAtMTsKKworCQl3MV93cml0ZV9ibG9jayhzbC0+bWFzdGVyLCB3cmJ1ZiwgMyk7CisJCXcxX3JlYWRfYmxvY2soc2wtPm1hc3RlciwgY21wLCBjb3VudCk7CisKKwkJaWYgKCFtZW1jbXAoY21wLCBidWYsIGNvdW50KSkKKwkJCXJldHVybiAwOworCX0gd2hpbGUgKC0tdHJpZXMpOworCisJZGV2X2Vycigmc2wtPmRldiwgInByb29mIHJlYWRpbmcgZmFpbGVkICVkIHRpbWVzXG4iLAorCQkJVzFfRjJEX1JFQURfUkVUUklFUyk7CisKKwlyZXR1cm4gLTE7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHcxX2YyZF9yZWFkX2JpbihzdHJ1Y3Qga29iamVjdCAqa29iaiwKKwkJCSAgICAgICBzdHJ1Y3QgYmluX2F0dHJpYnV0ZSAqYmluX2F0dHIsCisJCQkgICAgICAgY2hhciAqYnVmLCBsb2ZmX3Qgb2ZmLCBzaXplX3QgY291bnQpCit7CisJc3RydWN0IHcxX3NsYXZlICpzbCA9IGtvYmpfdG9fdzFfc2xhdmUoa29iaik7CisJaW50IHRvZG8gPSBjb3VudDsKKworCWNvdW50ID0gdzFfZjJkX2ZpeF9jb3VudChvZmYsIGNvdW50LCBXMV9GMkRfRUVQUk9NX1NJWkUpOworCWlmIChjb3VudCA9PSAwKQorCQlyZXR1cm4gMDsKKworCW11dGV4X2xvY2soJnNsLT5tYXN0ZXItPm11dGV4KTsKKworCS8qIHJlYWQgZGlyZWN0bHkgZnJvbSB0aGUgRUVQUk9NIGluIGNodW5rcyBvZiBXMV9GMkRfUkVBRF9NQVhMRU4gKi8KKwl3aGlsZSAodG9kbyA+IDApIHsKKwkJaW50IGJsb2NrX3JlYWQ7CisKKwkJaWYgKHRvZG8gPj0gVzFfRjJEX1JFQURfTUFYTEVOKQorCQkJYmxvY2tfcmVhZCA9IFcxX0YyRF9SRUFEX01BWExFTjsKKwkJZWxzZQorCQkJYmxvY2tfcmVhZCA9IHRvZG87CisKKwkJaWYgKHcxX2YyZF9yZWFkYmxvY2soc2wsIG9mZiwgYmxvY2tfcmVhZCwgYnVmKSA8IDApCisJCQljb3VudCA9IC1FSU87CisKKwkJdG9kbyAtPSBXMV9GMkRfUkVBRF9NQVhMRU47CisJCWJ1ZiArPSBXMV9GMkRfUkVBRF9NQVhMRU47CisJCW9mZiArPSBXMV9GMkRfUkVBRF9NQVhMRU47CisJfQorCisJbXV0ZXhfdW5sb2NrKCZzbC0+bWFzdGVyLT5tdXRleCk7CisKKwlyZXR1cm4gY291bnQ7Cit9CisKKy8qCisgKiBXcml0ZXMgdG8gdGhlIHNjcmF0Y2hwYWQgYW5kIHJlYWRzIGl0IGJhY2sgZm9yIHZlcmlmaWNhdGlvbi4KKyAqIFRoZW4gY29waWVzIHRoZSBzY3JhdGNocGFkIHRvIEVFUFJPTS4KKyAqIFRoZSBkYXRhIG11c3QgYmUgYWxpZ25lZCBhdCBXMV9GMkRfU0NSQVRDSF9TSVpFIGJ5dGVzIGFuZAorICogbXVzdCBiZSBXMV9GMkRfU0NSQVRDSF9TSVpFIGJ5dGVzIGxvbmcuCisgKiBUaGUgbWFzdGVyIG11c3QgYmUgbG9ja2VkLgorICoKKyAqIEBwYXJhbSBzbAlUaGUgc2xhdmUgc3RydWN0dXJlCisgKiBAcGFyYW0gYWRkcglBZGRyZXNzIGZvciB0aGUgd3JpdGUKKyAqIEBwYXJhbSBsZW4gICBsZW5ndGggbXVzdCBiZSA8PSAoVzFfRjJEX1BBR0VfU0laRSAtIChhZGRyICYgVzFfRjJEX1BBR0VfTUFTSykpCisgKiBAcGFyYW0gZGF0YQlUaGUgZGF0YSB0byB3cml0ZQorICogQHJldHVybgkwPVN1Y2Nlc3MgLTE9ZmFpbHVyZQorICovCitzdGF0aWMgaW50IHcxX2YyZF93cml0ZShzdHJ1Y3QgdzFfc2xhdmUgKnNsLCBpbnQgYWRkciwgaW50IGxlbiwgY29uc3QgdTggKmRhdGEpCit7CisJaW50IHRyaWVzID0gVzFfRjJEX1JFQURfUkVUUklFUzsKKwl1OCB3cmJ1Zls0XTsKKwl1OCByZGJ1ZltXMV9GMkRfU0NSQVRDSF9TSVpFICsgM107CisJdTggZXMgPSAoYWRkciArIGxlbiAtIDEpICUgVzFfRjJEX1NDUkFUQ0hfU0laRTsKKworcmV0cnk6CisKKwkvKiBXcml0ZSB0aGUgZGF0YSB0byB0aGUgc2NyYXRjaHBhZCAqLworCWlmICh3MV9yZXNldF9zZWxlY3Rfc2xhdmUoc2wpKQorCQlyZXR1cm4gLTE7CisKKwl3cmJ1ZlswXSA9IFcxX0YyRF9XUklURV9TQ1JBVENIOworCXdyYnVmWzFdID0gYWRkciAmIDB4ZmY7CisJd3JidWZbMl0gPSBhZGRyID4+IDg7CisKKwl3MV93cml0ZV9ibG9jayhzbC0+bWFzdGVyLCB3cmJ1ZiwgMyk7CisJdzFfd3JpdGVfYmxvY2soc2wtPm1hc3RlciwgZGF0YSwgbGVuKTsKKworCS8qIFJlYWQgdGhlIHNjcmF0Y2hwYWQgYW5kIHZlcmlmeSAqLworCWlmICh3MV9yZXNldF9zZWxlY3Rfc2xhdmUoc2wpKQorCQlyZXR1cm4gLTE7CisKKwl3MV93cml0ZV84KHNsLT5tYXN0ZXIsIFcxX0YyRF9SRUFEX1NDUkFUQ0gpOworCXcxX3JlYWRfYmxvY2soc2wtPm1hc3RlciwgcmRidWYsIGxlbiArIDMpOworCisJLyogQ29tcGFyZSB3aGF0IHdhcyByZWFkIGFnYWluc3QgdGhlIGRhdGEgd3JpdHRlbiAqLworCWlmICgocmRidWZbMF0gIT0gd3JidWZbMV0pIHx8IChyZGJ1ZlsxXSAhPSB3cmJ1ZlsyXSkgfHwKKwkgICAgKHJkYnVmWzJdICE9IGVzKSB8fCAobWVtY21wKGRhdGEsICZyZGJ1ZlszXSwgbGVuKSAhPSAwKSkgeworCisJCWlmICgtLXRyaWVzKQorCQkJZ290byByZXRyeTsKKworCQlkZXZfZXJyKCZzbC0+ZGV2LAorCQkJImNvdWxkIG5vdCB3cml0ZSB0byBlZXByb20sIHNjcmF0Y2hwYWQgY29tcGFyZSBmYWlsZWQgJWQgdGltZXNcbiIsCisJCQlXMV9GMkRfUkVBRF9SRVRSSUVTKTsKKworCQlyZXR1cm4gLTE7CisJfQorCisJLyogQ29weSB0aGUgc2NyYXRjaHBhZCB0byBFRVBST00gKi8KKwlpZiAodzFfcmVzZXRfc2VsZWN0X3NsYXZlKHNsKSkKKwkJcmV0dXJuIC0xOworCisJd3JidWZbMF0gPSBXMV9GMkRfQ09QWV9TQ1JBVENIOworCXdyYnVmWzNdID0gZXM7CisJdzFfd3JpdGVfYmxvY2soc2wtPm1hc3Rlciwgd3JidWYsIDQpOworCisJLyogU2xlZXAgZm9yIHRwcm9nIG1zIHRvIHdhaXQgZm9yIHRoZSB3cml0ZSB0byBjb21wbGV0ZSAqLworCW1zbGVlcChXMV9GMkRfVFBST0dfTVMpOworCisJLyogUmVzZXQgdGhlIGJ1cyB0byB3YWtlIHVwIHRoZSBFRVBST00gICovCisJdzFfcmVzZXRfYnVzKHNsLT5tYXN0ZXIpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHcxX2YyZF93cml0ZV9iaW4oc3RydWN0IGtvYmplY3QgKmtvYmosCisJCQkJc3RydWN0IGJpbl9hdHRyaWJ1dGUgKmJpbl9hdHRyLAorCQkJCWNoYXIgKmJ1ZiwgbG9mZl90IG9mZiwgc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCB3MV9zbGF2ZSAqc2wgPSBrb2JqX3RvX3cxX3NsYXZlKGtvYmopOworCWludCBhZGRyLCBsZW47CisJaW50IGNvcHk7CisKKwljb3VudCA9IHcxX2YyZF9maXhfY291bnQob2ZmLCBjb3VudCwgVzFfRjJEX0VFUFJPTV9TSVpFKTsKKwlpZiAoY291bnQgPT0gMCkKKwkJcmV0dXJuIDA7CisKKwltdXRleF9sb2NrKCZzbC0+bWFzdGVyLT5tdXRleCk7CisKKwkvKiBDYW4gb25seSB3cml0ZSBkYXRhIGluIGJsb2NrcyBvZiB0aGUgc2l6ZSBvZiB0aGUgc2NyYXRjaHBhZCAqLworCWFkZHIgPSBvZmY7CisJbGVuID0gY291bnQ7CisJd2hpbGUgKGxlbiA+IDApIHsKKworCQkvKiBpZiBsZW4gdG9vIHNob3J0IG9yIGFkZHIgbm90IGFsaWduZWQgKi8KKwkJaWYgKGxlbiA8IFcxX0YyRF9TQ1JBVENIX1NJWkUgfHwgYWRkciAmIFcxX0YyRF9TQ1JBVENIX01BU0spIHsKKwkJCWNoYXIgdG1wW1cxX0YyRF9TQ1JBVENIX1NJWkVdOworCisJCQkvKiByZWFkIHRoZSBibG9jayBhbmQgdXBkYXRlIHRoZSBwYXJ0cyB0byBiZSB3cml0dGVuICovCisJCQlpZiAodzFfZjJkX3JlYWRibG9jayhzbCwgYWRkciAmIH5XMV9GMkRfU0NSQVRDSF9NQVNLLAorCQkJCQlXMV9GMkRfU0NSQVRDSF9TSVpFLCB0bXApKSB7CisJCQkJY291bnQgPSAtRUlPOworCQkJCWdvdG8gb3V0X3VwOworCQkJfQorCisJCQkvKiBjb3B5IGF0IG1vc3QgdG8gdGhlIGJvdW5kYXJ5IG9mIHRoZSBQQUdFIG9yIGxlbiAqLworCQkJY29weSA9IFcxX0YyRF9TQ1JBVENIX1NJWkUgLQorCQkJCShhZGRyICYgVzFfRjJEX1NDUkFUQ0hfTUFTSyk7CisKKwkJCWlmIChjb3B5ID4gbGVuKQorCQkJCWNvcHkgPSBsZW47CisKKwkJCW1lbWNweSgmdG1wW2FkZHIgJiBXMV9GMkRfU0NSQVRDSF9NQVNLXSwgYnVmLCBjb3B5KTsKKwkJCWlmICh3MV9mMmRfd3JpdGUoc2wsIGFkZHIgJiB+VzFfRjJEX1NDUkFUQ0hfTUFTSywKKwkJCQkJVzFfRjJEX1NDUkFUQ0hfU0laRSwgdG1wKSA8IDApIHsKKwkJCQljb3VudCA9IC1FSU87CisJCQkJZ290byBvdXRfdXA7CisJCQl9CisJCX0gZWxzZSB7CisKKwkJCWNvcHkgPSBXMV9GMkRfU0NSQVRDSF9TSVpFOworCQkJaWYgKHcxX2YyZF93cml0ZShzbCwgYWRkciwgY29weSwgYnVmKSA8IDApIHsKKwkJCQljb3VudCA9IC1FSU87CisJCQkJZ290byBvdXRfdXA7CisJCQl9CisJCX0KKwkJYnVmICs9IGNvcHk7CisJCWFkZHIgKz0gY29weTsKKwkJbGVuIC09IGNvcHk7CisJfQorCitvdXRfdXA6CisJbXV0ZXhfdW5sb2NrKCZzbC0+bWFzdGVyLT5tdXRleCk7CisKKwlyZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgYmluX2F0dHJpYnV0ZSB3MV9mMmRfYmluX2F0dHIgPSB7CisJLmF0dHIgPSB7CisJCS5uYW1lID0gImVlcHJvbSIsCisJCS5tb2RlID0gU19JUlVHTyB8IFNfSVdVU1IsCisJfSwKKwkuc2l6ZSA9IFcxX0YyRF9FRVBST01fU0laRSwKKwkucmVhZCA9IHcxX2YyZF9yZWFkX2JpbiwKKwkud3JpdGUgPSB3MV9mMmRfd3JpdGVfYmluLAorfTsKKworc3RhdGljIGludCB3MV9mMmRfYWRkX3NsYXZlKHN0cnVjdCB3MV9zbGF2ZSAqc2wpCit7CisJcmV0dXJuIHN5c2ZzX2NyZWF0ZV9iaW5fZmlsZSgmc2wtPmRldi5rb2JqLCAmdzFfZjJkX2Jpbl9hdHRyKTsKK30KKworc3RhdGljIHZvaWQgdzFfZjJkX3JlbW92ZV9zbGF2ZShzdHJ1Y3QgdzFfc2xhdmUgKnNsKQoreworCXN5c2ZzX3JlbW92ZV9iaW5fZmlsZSgmc2wtPmRldi5rb2JqLCAmdzFfZjJkX2Jpbl9hdHRyKTsKK30KKworc3RhdGljIHN0cnVjdCB3MV9mYW1pbHlfb3BzIHcxX2YyZF9mb3BzID0geworCS5hZGRfc2xhdmUgICAgICA9IHcxX2YyZF9hZGRfc2xhdmUsCisJLnJlbW92ZV9zbGF2ZSAgID0gdzFfZjJkX3JlbW92ZV9zbGF2ZSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgdzFfZmFtaWx5IHcxX2ZhbWlseV8yZCA9IHsKKwkuZmlkID0gVzFfRUVQUk9NX0RTMjQzMSwKKwkuZm9wcyA9ICZ3MV9mMmRfZm9wcywKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHcxX2YyZF9pbml0KHZvaWQpCit7CisJcmV0dXJuIHcxX3JlZ2lzdGVyX2ZhbWlseSgmdzFfZmFtaWx5XzJkKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IHcxX2YyZF9maW5pKHZvaWQpCit7CisJdzFfdW5yZWdpc3Rlcl9mYW1pbHkoJncxX2ZhbWlseV8yZCk7Cit9CisKK21vZHVsZV9pbml0KHcxX2YyZF9pbml0KTsKK21vZHVsZV9leGl0KHcxX2YyZF9maW5pKTsKKworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0FVVEhPUigiQmVybmhhcmQgV2VpcmljaCA8YmVybmhhcmQud2VpcmljaEByaWVkZWwubmV0PiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJ3MSBmYW1pbHkgMmQgZHJpdmVyIGZvciBEUzI0MzEsIDFrYiBFRVBST00iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdzEvc2xhdmVzL3cxX2RzMjc2MC5jIGIvZHJpdmVycy93MS9zbGF2ZXMvdzFfZHMyNzYwLmMKaW5kZXggZWQ2YjA1Ny4uMWYwOWQ0ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy93MS9zbGF2ZXMvdzFfZHMyNzYwLmMKKysrIGIvZHJpdmVycy93MS9zbGF2ZXMvdzFfZHMyNzYwLmMKQEAgLTgwLDcgKzgwLDYgQEAKIAkuYXR0ciA9IHsKIAkJLm5hbWUgPSAidzFfc2xhdmUiLAogCQkubW9kZSA9IFNfSVJVR08sCi0JCS5vd25lciA9IFRISVNfTU9EVUxFLAogCX0sCiAJLnNpemUgPSBEUzI3NjBfREFUQV9TSVpFLAogCS5yZWFkID0gdzFfZHMyNzYwX3JlYWRfYmluLApkaWZmIC0tZ2l0IGEvZHJpdmVycy93MS9zbGF2ZXMvdzFfdGhlcm0uYyBiL2RyaXZlcnMvdzEvc2xhdmVzL3cxX3RoZXJtLmMKaW5kZXggZmIyOGFjYS4uMmM4ZGZmOSAxMDA2NDQKLS0tIGEvZHJpdmVycy93MS9zbGF2ZXMvdzFfdGhlcm0uYworKysgYi9kcml2ZXJzL3cxL3NsYXZlcy93MV90aGVybS5jCkBAIC0zNywzMSArMzcsMzMgQEAKIE1PRFVMRV9BVVRIT1IoIkV2Z2VuaXkgUG9seWFrb3YgPGpvaG5wb2xAMmthLm1pcHQucnU+Iik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIkRyaXZlciBmb3IgMS13aXJlIERhbGxhcyBuZXR3b3JrIHByb3RvY29sLCB0ZW1wZXJhdHVyZSBmYW1pbHkuIik7CiAKKy8qIEFsbG93IHRoZSBzdHJvbmcgcHVsbHVwIHRvIGJlIGRpc2FibGVkLCBidXQgZGVmYXVsdCB0byBlbmFibGVkLgorICogSWYgaXQgd2FzIGRpc2FibGVkIGEgcGFyYXNpdGUgcG93ZXJlZCBkZXZpY2UgbWlnaHQgbm90IGdldCB0aGUgcmVxdWlyZQorICogY3VycmVudCB0byBkbyBhIHRlbXBlcmF0dXJlIGNvbnZlcnNpb24uICBJZiBpdCBpcyBlbmFibGVkIHBhcmFzaXRlIHBvd2VyZWQKKyAqIGRldmljZXMgaGF2ZSBhIGJldHRlciBjaGFuY2Ugb2YgZ2V0dGluZyB0aGUgY3VycmVudCByZXF1aXJlZC4KKyAqLworc3RhdGljIGludCB3MV9zdHJvbmdfcHVsbHVwID0gMTsKK21vZHVsZV9wYXJhbV9uYW1lZChzdHJvbmdfcHVsbHVwLCB3MV9zdHJvbmdfcHVsbHVwLCBpbnQsIDApOworCiBzdGF0aWMgdTggYmFkX3JvbXNbXVs5XSA9IHsKIAkJCQl7MHhhYSwgMHgwMCwgMHg0YiwgMHg0NiwgMHhmZiwgMHhmZiwgMHgwYywgMHgxMCwgMHg4N30sCiAJCQkJe30KIAkJCX07CiAKLXN0YXRpYyBzc2l6ZV90IHcxX3RoZXJtX3JlYWRfYmluKHN0cnVjdCBrb2JqZWN0ICosIHN0cnVjdCBiaW5fYXR0cmlidXRlICosCi0JCQkJIGNoYXIgKiwgbG9mZl90LCBzaXplX3QpOworc3RhdGljIHNzaXplX3QgdzFfdGhlcm1fcmVhZChzdHJ1Y3QgZGV2aWNlICpkZXZpY2UsCisJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1Zik7CiAKLXN0YXRpYyBzdHJ1Y3QgYmluX2F0dHJpYnV0ZSB3MV90aGVybV9iaW5fYXR0ciA9IHsKLQkuYXR0ciA9IHsKLQkJLm5hbWUgPSAidzFfc2xhdmUiLAotCQkubW9kZSA9IFNfSVJVR08sCi0JfSwKLQkuc2l6ZSA9IFcxX1NMQVZFX0RBVEFfU0laRSwKLQkucmVhZCA9IHcxX3RoZXJtX3JlYWRfYmluLAotfTsKK3N0YXRpYyBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSB3MV90aGVybV9hdHRyID0KKwlfX0FUVFIodzFfc2xhdmUsIFNfSVJVR08sIHcxX3RoZXJtX3JlYWQsIE5VTEwpOwogCiBzdGF0aWMgaW50IHcxX3RoZXJtX2FkZF9zbGF2ZShzdHJ1Y3QgdzFfc2xhdmUgKnNsKQogewotCXJldHVybiBzeXNmc19jcmVhdGVfYmluX2ZpbGUoJnNsLT5kZXYua29iaiwgJncxX3RoZXJtX2Jpbl9hdHRyKTsKKwlyZXR1cm4gZGV2aWNlX2NyZWF0ZV9maWxlKCZzbC0+ZGV2LCAmdzFfdGhlcm1fYXR0cik7CiB9CiAKIHN0YXRpYyB2b2lkIHcxX3RoZXJtX3JlbW92ZV9zbGF2ZShzdHJ1Y3QgdzFfc2xhdmUgKnNsKQogewotCXN5c2ZzX3JlbW92ZV9iaW5fZmlsZSgmc2wtPmRldi5rb2JqLCAmdzFfdGhlcm1fYmluX2F0dHIpOworCWRldmljZV9yZW1vdmVfZmlsZSgmc2wtPmRldiwgJncxX3RoZXJtX2F0dHIpOwogfQogCiBzdGF0aWMgc3RydWN0IHcxX2ZhbWlseV9vcHMgdzFfdGhlcm1fZm9wcyA9IHsKQEAgLTE2MCwzMCArMTYyLDE5IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzc2l6ZV90IHcxX3RoZXJtX3JlYWRfYmluKHN0cnVjdCBrb2JqZWN0ICprb2JqLAotCQkJCSBzdHJ1Y3QgYmluX2F0dHJpYnV0ZSAqYmluX2F0dHIsCi0JCQkJIGNoYXIgKmJ1ZiwgbG9mZl90IG9mZiwgc2l6ZV90IGNvdW50KQorc3RhdGljIHNzaXplX3QgdzFfdGhlcm1fcmVhZChzdHJ1Y3QgZGV2aWNlICpkZXZpY2UsCisJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKIHsKLQlzdHJ1Y3QgdzFfc2xhdmUgKnNsID0ga29ial90b193MV9zbGF2ZShrb2JqKTsKKwlzdHJ1Y3QgdzFfc2xhdmUgKnNsID0gZGV2X3RvX3cxX3NsYXZlKGRldmljZSk7CiAJc3RydWN0IHcxX21hc3RlciAqZGV2ID0gc2wtPm1hc3RlcjsKIAl1OCByb21bOV0sIGNyYywgdmVyZGljdDsKIAlpbnQgaSwgbWF4X3RyeWluZyA9IDEwOworCXNzaXplX3QgYyA9IFBBR0VfU0laRTsKIAotCW11dGV4X2xvY2soJnNsLT5tYXN0ZXItPm11dGV4KTsKKwltdXRleF9sb2NrKCZkZXYtPm11dGV4KTsKIAotCWlmIChvZmYgPiBXMV9TTEFWRV9EQVRBX1NJWkUpIHsKLQkJY291bnQgPSAwOwotCQlnb3RvIG91dDsKLQl9Ci0JaWYgKG9mZiArIGNvdW50ID4gVzFfU0xBVkVfREFUQV9TSVpFKSB7Ci0JCWNvdW50ID0gMDsKLQkJZ290byBvdXQ7Ci0JfQotCi0JbWVtc2V0KGJ1ZiwgMCwgY291bnQpOwogCW1lbXNldChyb20sIDAsIHNpemVvZihyb20pKTsKIAotCWNvdW50ID0gMDsKIAl2ZXJkaWN0ID0gMDsKIAljcmMgPSAwOwogCkBAIC0xOTIsMTUgKzE4MywyMCBAQAogCQkJaW50IGNvdW50ID0gMDsKIAkJCXVuc2lnbmVkIGludCB0bSA9IDc1MDsKIAorCQkJLyogNzUwbXMgc3Ryb25nIHB1bGx1cCAob3IgZGVsYXkpIGFmdGVyIHRoZSBjb252ZXJ0ICovCisJCQlpZiAodzFfc3Ryb25nX3B1bGx1cCkKKwkJCQl3MV9uZXh0X3B1bGx1cChkZXYsIHRtKTsKIAkJCXcxX3dyaXRlXzgoZGV2LCBXMV9DT05WRVJUX1RFTVApOwotCi0JCQltc2xlZXAodG0pOworCQkJaWYgKCF3MV9zdHJvbmdfcHVsbHVwKQorCQkJCW1zbGVlcCh0bSk7CiAKIAkJCWlmICghdzFfcmVzZXRfc2VsZWN0X3NsYXZlKHNsKSkgewogCiAJCQkJdzFfd3JpdGVfOChkZXYsIFcxX1JFQURfU0NSQVRDSFBBRCk7CiAJCQkJaWYgKChjb3VudCA9IHcxX3JlYWRfYmxvY2soZGV2LCByb20sIDkpKSAhPSA5KSB7Ci0JCQkJCWRldl93YXJuKCZkZXYtPmRldiwgIncxX3JlYWRfYmxvY2soKSByZXR1cm5lZCAlZCBpbnN0ZWFkIG9mIDkuXG4iLCBjb3VudCk7CisJCQkJCWRldl93YXJuKGRldmljZSwgIncxX3JlYWRfYmxvY2soKSAiCisJCQkJCQkicmV0dXJuZWQgJXUgaW5zdGVhZCBvZiA5LlxuIiwKKwkJCQkJCWNvdW50KTsKIAkJCQl9CiAKIAkJCQljcmMgPSB3MV9jYWxjX2NyYzgocm9tLCA4KTsKQEAgLTIxNSwyMiArMjExLDIyIEBACiAJfQogCiAJZm9yIChpID0gMDsgaSA8IDk7ICsraSkKLQkJY291bnQgKz0gc3ByaW50ZihidWYgKyBjb3VudCwgIiUwMnggIiwgcm9tW2ldKTsKLQljb3VudCArPSBzcHJpbnRmKGJ1ZiArIGNvdW50LCAiOiBjcmM9JTAyeCAlc1xuIiwKKwkJYyAtPSBzbnByaW50ZihidWYgKyBQQUdFX1NJWkUgLSBjLCBjLCAiJTAyeCAiLCByb21baV0pOworCWMgLT0gc25wcmludGYoYnVmICsgUEFHRV9TSVpFIC0gYywgYywgIjogY3JjPSUwMnggJXNcbiIsCiAJCQkgICBjcmMsICh2ZXJkaWN0KSA/ICJZRVMiIDogIk5PIik7CiAJaWYgKHZlcmRpY3QpCiAJCW1lbWNweShzbC0+cm9tLCByb20sIHNpemVvZihzbC0+cm9tKSk7CiAJZWxzZQotCQlkZXZfd2FybigmZGV2LT5kZXYsICIxOFMyMCBkb2Vzbid0IHJlc3BvbmQgdG8gQ09OVkVSVF9URU1QLlxuIik7CisJCWRldl93YXJuKGRldmljZSwgIjE4UzIwIGRvZXNuJ3QgcmVzcG9uZCB0byBDT05WRVJUX1RFTVAuXG4iKTsKIAogCWZvciAoaSA9IDA7IGkgPCA5OyArK2kpCi0JCWNvdW50ICs9IHNwcmludGYoYnVmICsgY291bnQsICIlMDJ4ICIsIHNsLT5yb21baV0pOworCQljIC09IHNucHJpbnRmKGJ1ZiArIFBBR0VfU0laRSAtIGMsIGMsICIlMDJ4ICIsIHNsLT5yb21baV0pOwogCi0JY291bnQgKz0gc3ByaW50ZihidWYgKyBjb3VudCwgInQ9JWRcbiIsIHcxX2NvbnZlcnRfdGVtcChyb20sIHNsLT5mYW1pbHktPmZpZCkpOwotb3V0OgorCWMgLT0gc25wcmludGYoYnVmICsgUEFHRV9TSVpFIC0gYywgYywgInQ9JWRcbiIsCisJCXcxX2NvbnZlcnRfdGVtcChyb20sIHNsLT5mYW1pbHktPmZpZCkpOwogCW11dGV4X3VubG9jaygmZGV2LT5tdXRleCk7CiAKLQlyZXR1cm4gY291bnQ7CisJcmV0dXJuIFBBR0VfU0laRSAtIGM7CiB9CiAKIHN0YXRpYyBpbnQgX19pbml0IHcxX3RoZXJtX2luaXQodm9pZCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdzEvdzEuYyBiL2RyaXZlcnMvdzEvdzEuYwppbmRleCA3MjkzYzliLi4zYjYxNWQ0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3cxL3cxLmMKKysrIGIvZHJpdmVycy93MS93MS5jCkBAIC00NiwxOSArNDYsMTcgQEAKIE1PRFVMRV9ERVNDUklQVElPTigiRHJpdmVyIGZvciAxLXdpcmUgRGFsbGFzIG5ldHdvcmsgcHJvdG9jb2wuIik7CiAKIHN0YXRpYyBpbnQgdzFfdGltZW91dCA9IDEwOwotc3RhdGljIGludCB3MV9jb250cm9sX3RpbWVvdXQgPSAxOwogaW50IHcxX21heF9zbGF2ZV9jb3VudCA9IDEwOwogaW50IHcxX21heF9zbGF2ZV90dGwgPSAxMDsKIAogbW9kdWxlX3BhcmFtX25hbWVkKHRpbWVvdXQsIHcxX3RpbWVvdXQsIGludCwgMCk7Ci1tb2R1bGVfcGFyYW1fbmFtZWQoY29udHJvbF90aW1lb3V0LCB3MV9jb250cm9sX3RpbWVvdXQsIGludCwgMCk7CiBtb2R1bGVfcGFyYW1fbmFtZWQobWF4X3NsYXZlX2NvdW50LCB3MV9tYXhfc2xhdmVfY291bnQsIGludCwgMCk7CiBtb2R1bGVfcGFyYW1fbmFtZWQoc2xhdmVfdHRsLCB3MV9tYXhfc2xhdmVfdHRsLCBpbnQsIDApOwogCiBERUZJTkVfTVVURVgodzFfbWxvY2spOwogTElTVF9IRUFEKHcxX21hc3RlcnMpOwogCi1zdGF0aWMgc3RydWN0IHRhc2tfc3RydWN0ICp3MV9jb250cm9sX3RocmVhZDsKK3N0YXRpYyBpbnQgdzFfYXR0YWNoX3NsYXZlX2RldmljZShzdHJ1Y3QgdzFfbWFzdGVyICpkZXYsIHN0cnVjdCB3MV9yZWdfbnVtICpybik7CiAKIHN0YXRpYyBpbnQgdzFfbWFzdGVyX21hdGNoKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9kcml2ZXIgKmRydikKIHsKQEAgLTgzLDEwICs4MSwxMCBAQAogewogCXN0cnVjdCB3MV9zbGF2ZSAqc2wgPSBkZXZfdG9fdzFfc2xhdmUoZGV2KTsKIAotCXByaW50aygiJXM6IFJlbGVhc2luZyAlcy5cbiIsIF9fZnVuY19fLCBzbC0+bmFtZSk7CisJZGV2X2RiZyhkZXYsICIlczogUmVsZWFzaW5nICVzLlxuIiwgX19mdW5jX18sIHNsLT5uYW1lKTsKIAogCXdoaWxlIChhdG9taWNfcmVhZCgmc2wtPnJlZmNudCkpIHsKLQkJcHJpbnRrKCJXYWl0aW5nIGZvciAlcyB0byBiZWNvbWUgZnJlZTogcmVmY250PSVkLlxuIiwKKwkJZGV2X2RiZyhkZXYsICJXYWl0aW5nIGZvciAlcyB0byBiZWNvbWUgZnJlZTogcmVmY250PSVkLlxuIiwKIAkJCQlzbC0+bmFtZSwgYXRvbWljX3JlYWQoJnNsLT5yZWZjbnQpKTsKIAkJaWYgKG1zbGVlcF9pbnRlcnJ1cHRpYmxlKDEwMDApKQogCQkJZmx1c2hfc2lnbmFscyhjdXJyZW50KTsKQEAgLTEwNSwzNSArMTAzLDIwIEBACiAJcmV0dXJuIHNwcmludGYoYnVmLCAiJXNcbiIsIHNsLT5uYW1lKTsKIH0KIAotc3RhdGljIHNzaXplX3QgdzFfc2xhdmVfcmVhZF9pZChzdHJ1Y3Qga29iamVjdCAqa29iaiwKLQkJCQlzdHJ1Y3QgYmluX2F0dHJpYnV0ZSAqYmluX2F0dHIsCi0JCQkJY2hhciAqYnVmLCBsb2ZmX3Qgb2ZmLCBzaXplX3QgY291bnQpCitzdGF0aWMgc3NpemVfdCB3MV9zbGF2ZV9yZWFkX2lkKHN0cnVjdCBkZXZpY2UgKmRldiwKKwlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQogewotCXN0cnVjdCB3MV9zbGF2ZSAqc2wgPSBrb2JqX3RvX3cxX3NsYXZlKGtvYmopOworCXN0cnVjdCB3MV9zbGF2ZSAqc2wgPSBkZXZfdG9fdzFfc2xhdmUoZGV2KTsKKwlzc2l6ZV90IGNvdW50ID0gc2l6ZW9mKHNsLT5yZWdfbnVtKTsKIAotCWlmIChvZmYgPiA4KSB7Ci0JCWNvdW50ID0gMDsKLQl9IGVsc2UgewotCQlpZiAob2ZmICsgY291bnQgPiA4KQotCQkJY291bnQgPSA4IC0gb2ZmOwotCi0JCW1lbWNweShidWYsICh1OCAqKSZzbC0+cmVnX251bSwgY291bnQpOwotCX0KLQorCW1lbWNweShidWYsICh1OCAqKSZzbC0+cmVnX251bSwgY291bnQpOwogCXJldHVybiBjb3VudDsKIH0KIAogc3RhdGljIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlIHcxX3NsYXZlX2F0dHJfbmFtZSA9CiAJX19BVFRSKG5hbWUsIFNfSVJVR08sIHcxX3NsYXZlX3JlYWRfbmFtZSwgTlVMTCk7Ci0KLXN0YXRpYyBzdHJ1Y3QgYmluX2F0dHJpYnV0ZSB3MV9zbGF2ZV9hdHRyX2Jpbl9pZCA9IHsKLSAgICAgIC5hdHRyID0gewotICAgICAgICAgICAgICAubmFtZSA9ICJpZCIsCi0gICAgICAgICAgICAgIC5tb2RlID0gU19JUlVHTywKLSAgICAgIH0sCi0gICAgICAuc2l6ZSA9IDgsCi0gICAgICAucmVhZCA9IHcxX3NsYXZlX3JlYWRfaWQsCi19Oworc3RhdGljIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlIHcxX3NsYXZlX2F0dHJfaWQgPQorCV9fQVRUUihpZCwgU19JUlVHTywgdzFfc2xhdmVfcmVhZF9pZCwgTlVMTCk7CiAKIC8qIERlZmF1bHQgZmFtaWx5ICovCiAKQEAgLTI1MCwxMSArMjMzLDE2IEBACiAJCQkJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKIAkJCQkJCWNvbnN0IGNoYXIgKiBidWYsIHNpemVfdCBjb3VudCkKIHsKKwlsb25nIHRtcDsKIAlzdHJ1Y3QgdzFfbWFzdGVyICptZCA9IGRldl90b193MV9tYXN0ZXIoZGV2KTsKIAorCWlmIChzdHJpY3Rfc3RydG9sKGJ1ZiwgMCwgJnRtcCkgPT0gLUVJTlZBTCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKIAltdXRleF9sb2NrKCZtZC0+bXV0ZXgpOwotCW1kLT5zZWFyY2hfY291bnQgPSBzaW1wbGVfc3RydG9sKGJ1ZiwgTlVMTCwgMCk7CisJbWQtPnNlYXJjaF9jb3VudCA9IHRtcDsKIAltdXRleF91bmxvY2soJm1kLT5tdXRleCk7CisJd2FrZV91cF9wcm9jZXNzKG1kLT50aHJlYWQpOwogCiAJcmV0dXJuIGNvdW50OwogfQpAQCAtMjczLDYgKzI2MSwzOCBAQAogCXJldHVybiBjb3VudDsKIH0KIAorc3RhdGljIHNzaXplX3QgdzFfbWFzdGVyX2F0dHJpYnV0ZV9zdG9yZV9wdWxsdXAoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkJCQljb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlsb25nIHRtcDsKKwlzdHJ1Y3QgdzFfbWFzdGVyICptZCA9IGRldl90b193MV9tYXN0ZXIoZGV2KTsKKworCWlmIChzdHJpY3Rfc3RydG9sKGJ1ZiwgMCwgJnRtcCkgPT0gLUVJTlZBTCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwltdXRleF9sb2NrKCZtZC0+bXV0ZXgpOworCW1kLT5lbmFibGVfcHVsbHVwID0gdG1wOworCW11dGV4X3VubG9jaygmbWQtPm11dGV4KTsKKwl3YWtlX3VwX3Byb2Nlc3MobWQtPnRocmVhZCk7CisKKwlyZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHcxX21hc3Rlcl9hdHRyaWJ1dGVfc2hvd19wdWxsdXAoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCQkgICAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkJCSAgICAgICBjaGFyICpidWYpCit7CisJc3RydWN0IHcxX21hc3RlciAqbWQgPSBkZXZfdG9fdzFfbWFzdGVyKGRldik7CisJc3NpemVfdCBjb3VudDsKKworCW11dGV4X2xvY2soJm1kLT5tdXRleCk7CisJY291bnQgPSBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBtZC0+ZW5hYmxlX3B1bGx1cCk7CisJbXV0ZXhfdW5sb2NrKCZtZC0+bXV0ZXgpOworCisJcmV0dXJuIGNvdW50OworfQorCiBzdGF0aWMgc3NpemVfdCB3MV9tYXN0ZXJfYXR0cmlidXRlX3Nob3dfcG9pbnRlcihzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCiB7CiAJc3RydWN0IHcxX21hc3RlciAqbWQgPSBkZXZfdG9fdzFfbWFzdGVyKGRldik7CkBAIC0zMjQsNyArMzQ0LDggQEAKIAlyZXR1cm4gY291bnQ7CiB9CiAKLXN0YXRpYyBzc2l6ZV90IHcxX21hc3Rlcl9hdHRyaWJ1dGVfc2hvd19zbGF2ZXMoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQorc3RhdGljIHNzaXplX3QgdzFfbWFzdGVyX2F0dHJpYnV0ZV9zaG93X3NsYXZlcyhzdHJ1Y3QgZGV2aWNlICpkZXYsCisJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKIHsKIAlzdHJ1Y3QgdzFfbWFzdGVyICptZCA9IGRldl90b193MV9tYXN0ZXIoZGV2KTsKIAlpbnQgYyA9IFBBR0VfU0laRTsKQEAgLTM0OSw2ICszNzAsMTM1IEBACiAJcmV0dXJuIFBBR0VfU0laRSAtIGM7CiB9CiAKK3N0YXRpYyBzc2l6ZV90IHcxX21hc3Rlcl9hdHRyaWJ1dGVfc2hvd19hZGQoc3RydWN0IGRldmljZSAqZGV2LAorCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJaW50IGMgPSBQQUdFX1NJWkU7CisJYyAtPSBzbnByaW50ZihidWYrUEFHRV9TSVpFIC0gYywgYywKKwkJIndyaXRlIGRldmljZSBpZCB4eC14eHh4eHh4eHh4eHggdG8gYWRkIHNsYXZlXG4iKTsKKwlyZXR1cm4gUEFHRV9TSVpFIC0gYzsKK30KKworc3RhdGljIGludCB3MV9hdG9yZWdfbnVtKHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQsCisJc3RydWN0IHcxX3JlZ19udW0gKnJuKQoreworCXVuc2lnbmVkIGludCBmYW1pbHk7CisJdW5zaWduZWQgbG9uZyBsb25nIGlkOworCWludCBpOworCXU2NCBybjY0X2xlOworCisJLyogVGhlIENSQyB2YWx1ZSBpc24ndCByZWFkIGZyb20gdGhlIHVzZXIgYmVjYXVzZSB0aGUgc3lzZnMgZGlyZWN0b3J5CisJICogZG9lc24ndCBpbmNsdWRlIGl0IGFuZCBtb3N0IG1lc3NhZ2VzIGZyb20gdGhlIGJ1cyBzZWFyY2ggZG9uJ3QKKwkgKiBwcmludCBpdCBlaXRoZXIuICBJdCB3b3VsZCBiZSB1bnJlYXNvbmFibGUgZm9yIHRoZSB1c2VyIHRvIHRoZW4KKwkgKiBwcm92aWRlIGl0LgorCSAqLworCWNvbnN0IGNoYXIgKmVycm9yX21zZyA9ICJiYWQgc2xhdmUgc3RyaW5nIGZvcm1hdCwgZXhwZWN0aW5nICIKKwkJImZmLWRkZGRkZGRkZGRkZFxuIjsKKworCWlmIChidWZbMl0gIT0gJy0nKSB7CisJCWRldl9lcnIoZGV2LCAiJXMiLCBlcnJvcl9tc2cpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJaSA9IHNzY2FuZihidWYsICIlMDJ4LSUwMTJsbHgiLCAmZmFtaWx5LCAmaWQpOworCWlmIChpICE9IDIpIHsKKwkJZGV2X2VycihkZXYsICIlcyIsIGVycm9yX21zZyk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlybi0+ZmFtaWx5ID0gZmFtaWx5OworCXJuLT5pZCA9IGlkOworCisJcm42NF9sZSA9IGNwdV90b19sZTY0KCoodTY0ICopcm4pOworCXJuLT5jcmMgPSB3MV9jYWxjX2NyYzgoKHU4ICopJnJuNjRfbGUsIDcpOworCisjaWYgMAorCWRldl9pbmZvKGRldiwgIldpdGggQ1JDIGRldmljZSBpcyAlMDJ4LiUwMTJsbHguJTAyeC5cbiIsCisJCSAgcm4tPmZhbWlseSwgKHVuc2lnbmVkIGxvbmcgbG9uZylybi0+aWQsIHJuLT5jcmMpOworI2VuZGlmCisKKwlyZXR1cm4gMDsKK30KKworLyogU2VhcmNoZXMgdGhlIHNsYXZlcyBpbiB0aGUgdzFfbWFzdGVyIGFuZCByZXR1cm5zIGEgcG9pbnRlciBvciBOVUxMLgorICogTm90ZTogbXVzdCBob2xkIHRoZSBtdXRleAorICovCitzdGF0aWMgc3RydWN0IHcxX3NsYXZlICp3MV9zbGF2ZV9zZWFyY2hfZGV2aWNlKHN0cnVjdCB3MV9tYXN0ZXIgKmRldiwKKwlzdHJ1Y3QgdzFfcmVnX251bSAqcm4pCit7CisJc3RydWN0IHcxX3NsYXZlICpzbDsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHNsLCAmZGV2LT5zbGlzdCwgdzFfc2xhdmVfZW50cnkpIHsKKwkJaWYgKHNsLT5yZWdfbnVtLmZhbWlseSA9PSBybi0+ZmFtaWx5ICYmCisJCQkJc2wtPnJlZ19udW0uaWQgPT0gcm4tPmlkICYmCisJCQkJc2wtPnJlZ19udW0uY3JjID09IHJuLT5jcmMpIHsKKwkJCXJldHVybiBzbDsKKwkJfQorCX0KKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIHNzaXplX3QgdzFfbWFzdGVyX2F0dHJpYnV0ZV9zdG9yZV9hZGQoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkJCQljb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlzdHJ1Y3QgdzFfbWFzdGVyICptZCA9IGRldl90b193MV9tYXN0ZXIoZGV2KTsKKwlzdHJ1Y3QgdzFfcmVnX251bSBybjsKKwlzdHJ1Y3QgdzFfc2xhdmUgKnNsOworCXNzaXplX3QgcmVzdWx0ID0gY291bnQ7CisKKwlpZiAodzFfYXRvcmVnX251bShkZXYsIGJ1ZiwgY291bnQsICZybikpCisJCXJldHVybiAtRUlOVkFMOworCisJbXV0ZXhfbG9jaygmbWQtPm11dGV4KTsKKwlzbCA9IHcxX3NsYXZlX3NlYXJjaF9kZXZpY2UobWQsICZybik7CisJLyogSXQgd291bGQgYmUgbmljZSB0byBkbyBhIHRhcmdldGVkIHNlYXJjaCBvbmUgdGhlIG9uZS13aXJlIGJ1cworCSAqIGZvciB0aGUgbmV3IGRldmljZSB0byBzZWUgaWYgaXQgaXMgb3V0IHRoZXJlIG9yIG5vdC4gIEJ1dCB0aGUKKwkgKiBjdXJyZW50IHNlYXJjaCBkb2Vzbid0IHN1cHBvcnQgdGhhdC4KKwkgKi8KKwlpZiAoc2wpIHsKKwkJZGV2X2luZm8oZGV2LCAiRGV2aWNlICVzIGFscmVhZHkgZXhpc3RzXG4iLCBzbC0+bmFtZSk7CisJCXJlc3VsdCA9IC1FSU5WQUw7CisJfSBlbHNlIHsKKwkJdzFfYXR0YWNoX3NsYXZlX2RldmljZShtZCwgJnJuKTsKKwl9CisJbXV0ZXhfdW5sb2NrKCZtZC0+bXV0ZXgpOworCisJcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIHNzaXplX3QgdzFfbWFzdGVyX2F0dHJpYnV0ZV9zaG93X3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlpbnQgYyA9IFBBR0VfU0laRTsKKwljIC09IHNucHJpbnRmKGJ1ZitQQUdFX1NJWkUgLSBjLCBjLAorCQkid3JpdGUgZGV2aWNlIGlkIHh4LXh4eHh4eHh4eHh4eCB0byByZW1vdmUgc2xhdmVcbiIpOworCXJldHVybiBQQUdFX1NJWkUgLSBjOworfQorCitzdGF0aWMgc3NpemVfdCB3MV9tYXN0ZXJfYXR0cmlidXRlX3N0b3JlX3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCQkJCWNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCB3MV9tYXN0ZXIgKm1kID0gZGV2X3RvX3cxX21hc3RlcihkZXYpOworCXN0cnVjdCB3MV9yZWdfbnVtIHJuOworCXN0cnVjdCB3MV9zbGF2ZSAqc2w7CisJc3NpemVfdCByZXN1bHQgPSBjb3VudDsKKworCWlmICh3MV9hdG9yZWdfbnVtKGRldiwgYnVmLCBjb3VudCwgJnJuKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwltdXRleF9sb2NrKCZtZC0+bXV0ZXgpOworCXNsID0gdzFfc2xhdmVfc2VhcmNoX2RldmljZShtZCwgJnJuKTsKKwlpZiAoc2wpIHsKKwkJdzFfc2xhdmVfZGV0YWNoKHNsKTsKKwl9IGVsc2UgeworCQlkZXZfaW5mbyhkZXYsICJEZXZpY2UgJTAyeC0lMDEybGx4IGRvZXNuJ3QgZXhpc3RzXG4iLCBybi5mYW1pbHksCisJCQkodW5zaWduZWQgbG9uZyBsb25nKXJuLmlkKTsKKwkJcmVzdWx0ID0gLUVJTlZBTDsKKwl9CisJbXV0ZXhfdW5sb2NrKCZtZC0+bXV0ZXgpOworCisJcmV0dXJuIHJlc3VsdDsKK30KKwogI2RlZmluZSBXMV9NQVNURVJfQVRUUl9STyhfbmFtZSwgX21vZGUpCQkJCVwKIAlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSB3MV9tYXN0ZXJfYXR0cmlidXRlXyMjX25hbWUgPQlcCiAJCV9fQVRUUih3MV9tYXN0ZXJfIyNfbmFtZSwgX21vZGUsCQlcCkBAIC0zNjgsNiArNTE4LDkgQEAKIHN0YXRpYyBXMV9NQVNURVJfQVRUUl9STyh0aW1lb3V0LCBTX0lSVUdPKTsKIHN0YXRpYyBXMV9NQVNURVJfQVRUUl9STyhwb2ludGVyLCBTX0lSVUdPKTsKIHN0YXRpYyBXMV9NQVNURVJfQVRUUl9SVyhzZWFyY2gsIFNfSVJVR08gfCBTX0lXVUdPKTsKK3N0YXRpYyBXMV9NQVNURVJfQVRUUl9SVyhwdWxsdXAsIFNfSVJVR08gfCBTX0lXVUdPKTsKK3N0YXRpYyBXMV9NQVNURVJfQVRUUl9SVyhhZGQsIFNfSVJVR08gfCBTX0lXVUdPKTsKK3N0YXRpYyBXMV9NQVNURVJfQVRUUl9SVyhyZW1vdmUsIFNfSVJVR08gfCBTX0lXVUdPKTsKIAogc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKncxX21hc3Rlcl9kZWZhdWx0X2F0dHJzW10gPSB7CiAJJncxX21hc3Rlcl9hdHRyaWJ1dGVfbmFtZS5hdHRyLApAQCAtMzc4LDYgKzUzMSw5IEBACiAJJncxX21hc3Rlcl9hdHRyaWJ1dGVfdGltZW91dC5hdHRyLAogCSZ3MV9tYXN0ZXJfYXR0cmlidXRlX3BvaW50ZXIuYXR0ciwKIAkmdzFfbWFzdGVyX2F0dHJpYnV0ZV9zZWFyY2guYXR0ciwKKwkmdzFfbWFzdGVyX2F0dHJpYnV0ZV9wdWxsdXAuYXR0ciwKKwkmdzFfbWFzdGVyX2F0dHJpYnV0ZV9hZGQuYXR0ciwKKwkmdzFfbWFzdGVyX2F0dHJpYnV0ZV9yZW1vdmUuYXR0ciwKIAlOVUxMCiB9OwogCkBAIC0zOTAsNyArNTQ2LDcgQEAKIAlyZXR1cm4gc3lzZnNfY3JlYXRlX2dyb3VwKCZtYXN0ZXItPmRldi5rb2JqLCAmdzFfbWFzdGVyX2RlZmF0dHJfZ3JvdXApOwogfQogCi1zdGF0aWMgdm9pZCB3MV9kZXN0cm95X21hc3Rlcl9hdHRyaWJ1dGVzKHN0cnVjdCB3MV9tYXN0ZXIgKm1hc3RlcikKK3ZvaWQgdzFfZGVzdHJveV9tYXN0ZXJfYXR0cmlidXRlcyhzdHJ1Y3QgdzFfbWFzdGVyICptYXN0ZXIpCiB7CiAJc3lzZnNfcmVtb3ZlX2dyb3VwKCZtYXN0ZXItPmRldi5rb2JqLCAmdzFfbWFzdGVyX2RlZmF0dHJfZ3JvdXApOwogfQpAQCAtNDc5LDcgKzYzNSw3IEBACiAJfQogCiAJLyogQ3JlYXRlICJpZCIgZW50cnkgKi8KLQllcnIgPSBzeXNmc19jcmVhdGVfYmluX2ZpbGUoJnNsLT5kZXYua29iaiwgJncxX3NsYXZlX2F0dHJfYmluX2lkKTsKKwllcnIgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoJnNsLT5kZXYsICZ3MV9zbGF2ZV9hdHRyX2lkKTsKIAlpZiAoZXJyIDwgMCkgewogCQlkZXZfZXJyKCZzbC0+ZGV2LAogCQkJInN5c2ZzIGZpbGUgY3JlYXRpb24gZm9yIFslc10gZmFpbGVkLiBlcnI9JWRcbiIsCkBAIC01MDEsNyArNjU3LDcgQEAKIAlyZXR1cm4gMDsKIAogb3V0X3JlbTI6Ci0Jc3lzZnNfcmVtb3ZlX2Jpbl9maWxlKCZzbC0+ZGV2LmtvYmosICZ3MV9zbGF2ZV9hdHRyX2Jpbl9pZCk7CisJZGV2aWNlX3JlbW92ZV9maWxlKCZzbC0+ZGV2LCAmdzFfc2xhdmVfYXR0cl9pZCk7CiBvdXRfcmVtMToKIAlkZXZpY2VfcmVtb3ZlX2ZpbGUoJnNsLT5kZXYsICZ3MV9zbGF2ZV9hdHRyX25hbWUpOwogb3V0X3VucmVnOgpAQCAtNTY3LDcgKzcyMyw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIHcxX3NsYXZlX2RldGFjaChzdHJ1Y3QgdzFfc2xhdmUgKnNsKQordm9pZCB3MV9zbGF2ZV9kZXRhY2goc3RydWN0IHcxX3NsYXZlICpzbCkKIHsKIAlzdHJ1Y3QgdzFfbmV0bGlua19tc2cgbXNnOwogCkBAIC01ODMsNyArNzM5LDcgQEAKIAltc2cudHlwZSA9IFcxX1NMQVZFX1JFTU9WRTsKIAl3MV9uZXRsaW5rX3NlbmQoc2wtPm1hc3RlciwgJm1zZyk7CiAKLQlzeXNmc19yZW1vdmVfYmluX2ZpbGUoJnNsLT5kZXYua29iaiwgJncxX3NsYXZlX2F0dHJfYmluX2lkKTsKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUoJnNsLT5kZXYsICZ3MV9zbGF2ZV9hdHRyX2lkKTsKIAlkZXZpY2VfcmVtb3ZlX2ZpbGUoJnNsLT5kZXYsICZ3MV9zbGF2ZV9hdHRyX25hbWUpOwogCWRldmljZV91bnJlZ2lzdGVyKCZzbC0+ZGV2KTsKIApAQCAtNTkxLDI0ICs3NDcsNiBAQAogCWtmcmVlKHNsKTsKIH0KIAotc3RhdGljIHN0cnVjdCB3MV9tYXN0ZXIgKncxX3NlYXJjaF9tYXN0ZXIodm9pZCAqZGF0YSkKLXsKLQlzdHJ1Y3QgdzFfbWFzdGVyICpkZXY7Ci0JaW50IGZvdW5kID0gMDsKLQotCW11dGV4X2xvY2soJncxX21sb2NrKTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRldiwgJncxX21hc3RlcnMsIHcxX21hc3Rlcl9lbnRyeSkgewotCQlpZiAoZGV2LT5idXNfbWFzdGVyLT5kYXRhID09IGRhdGEpIHsKLQkJCWZvdW5kID0gMTsKLQkJCWF0b21pY19pbmMoJmRldi0+cmVmY250KTsKLQkJCWJyZWFrOwotCQl9Ci0JfQotCW11dGV4X3VubG9jaygmdzFfbWxvY2spOwotCi0JcmV0dXJuIChmb3VuZCk/ZGV2Ok5VTEw7Ci19Ci0KIHN0cnVjdCB3MV9tYXN0ZXIgKncxX3NlYXJjaF9tYXN0ZXJfaWQodTMyIGlkKQogewogCXN0cnVjdCB3MV9tYXN0ZXIgKmRldjsKQEAgLTY1Niw1NSArNzk0LDU2IEBACiAJcmV0dXJuIChmb3VuZCk/c2w6TlVMTDsKIH0KIAotdm9pZCB3MV9yZWNvbm5lY3Rfc2xhdmVzKHN0cnVjdCB3MV9mYW1pbHkgKmYpCit2b2lkIHcxX3JlY29ubmVjdF9zbGF2ZXMoc3RydWN0IHcxX2ZhbWlseSAqZiwgaW50IGF0dGFjaCkKIHsKKwlzdHJ1Y3QgdzFfc2xhdmUgKnNsLCAqc2xuOwogCXN0cnVjdCB3MV9tYXN0ZXIgKmRldjsKIAogCW11dGV4X2xvY2soJncxX21sb2NrKTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRldiwgJncxX21hc3RlcnMsIHcxX21hc3Rlcl9lbnRyeSkgewotCQlkZXZfZGJnKCZkZXYtPmRldiwgIlJlY29ubmVjdGluZyBzbGF2ZXMgaW4gJXMgaW50byBuZXcgZmFtaWx5ICUwMnguXG4iLAotCQkJCWRldi0+bmFtZSwgZi0+ZmlkKTsKLQkJc2V0X2JpdChXMV9NQVNURVJfTkVFRF9SRUNPTk5FQ1QsICZkZXYtPmZsYWdzKTsKKwkJZGV2X2RiZygmZGV2LT5kZXYsICJSZWNvbm5lY3Rpbmcgc2xhdmVzIGluIGRldmljZSAlcyAiCisJCQkiZm9yIGZhbWlseSAlMDJ4LlxuIiwgZGV2LT5uYW1lLCBmLT5maWQpOworCQltdXRleF9sb2NrKCZkZXYtPm11dGV4KTsKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHNsLCBzbG4sICZkZXYtPnNsaXN0LCB3MV9zbGF2ZV9lbnRyeSkgeworCQkJLyogSWYgaXQgaXMgYSBuZXcgZmFtaWx5LCBzbGF2ZXMgd2l0aCB0aGUgZGVmYXVsdAorCQkJICogZmFtaWx5IGRyaXZlciBhbmQgYXJlIHRoYXQgZmFtaWx5IHdpbGwgYmUKKwkJCSAqIGNvbm5lY3RlZC4gIElmIHRoZSBmYW1pbHkgaXMgZ29pbmcgYXdheSwgZGV2aWNlcworCQkJICogbWF0Y2hpbmcgdGhhdCBmYW1pbHkgYXJlIHJlY29ubmVjZWQuCisJCQkgKi8KKwkJCWlmICgoYXR0YWNoICYmIHNsLT5mYW1pbHktPmZpZCA9PSBXMV9GQU1JTFlfREVGQVVMVAorCQkJCSYmIHNsLT5yZWdfbnVtLmZhbWlseSA9PSBmLT5maWQpIHx8CisJCQkJKCFhdHRhY2ggJiYgc2wtPmZhbWlseS0+ZmlkID09IGYtPmZpZCkpIHsKKwkJCQlzdHJ1Y3QgdzFfcmVnX251bSBybjsKKworCQkJCW1lbWNweSgmcm4sICZzbC0+cmVnX251bSwgc2l6ZW9mKHJuKSk7CisJCQkJdzFfc2xhdmVfZGV0YWNoKHNsKTsKKworCQkJCXcxX2F0dGFjaF9zbGF2ZV9kZXZpY2UoZGV2LCAmcm4pOworCQkJfQorCQl9CisJCWRldl9kYmcoJmRldi0+ZGV2LCAiUmVjb25uZWN0aW5nIHNsYXZlcyBpbiBkZXZpY2UgJXMgIgorCQkJImhhcyBiZWVuIGZpbmlzaGVkLlxuIiwgZGV2LT5uYW1lKTsKKwkJbXV0ZXhfdW5sb2NrKCZkZXYtPm11dGV4KTsKIAl9CiAJbXV0ZXhfdW5sb2NrKCZ3MV9tbG9jayk7CiB9CiAKLXN0YXRpYyB2b2lkIHcxX3NsYXZlX2ZvdW5kKHZvaWQgKmRhdGEsIHU2NCBybikKK3N0YXRpYyB2b2lkIHcxX3NsYXZlX2ZvdW5kKHN0cnVjdCB3MV9tYXN0ZXIgKmRldiwgdTY0IHJuKQogewotCWludCBzbGF2ZV9jb3VudDsKIAlzdHJ1Y3QgdzFfc2xhdmUgKnNsOwotCXN0cnVjdCBsaXN0X2hlYWQgKmVudDsKIAlzdHJ1Y3QgdzFfcmVnX251bSAqdG1wOwotCXN0cnVjdCB3MV9tYXN0ZXIgKmRldjsKIAl1NjQgcm5fbGUgPSBjcHVfdG9fbGU2NChybik7CiAKLQlkZXYgPSB3MV9zZWFyY2hfbWFzdGVyKGRhdGEpOwotCWlmICghZGV2KSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiRmFpbGVkIHRvIGZpbmQgdzEgbWFzdGVyIGRldmljZSBmb3IgZGF0YSAlcCwgIgotCQkgICAgICAgIml0IGlzIGltcG9zc2libGUuXG4iLCBkYXRhKTsKLQkJcmV0dXJuOwotCX0KKwlhdG9taWNfaW5jKCZkZXYtPnJlZmNudCk7CiAKIAl0bXAgPSAoc3RydWN0IHcxX3JlZ19udW0gKikgJnJuOwogCi0Jc2xhdmVfY291bnQgPSAwOwotCWxpc3RfZm9yX2VhY2goZW50LCAmZGV2LT5zbGlzdCkgewotCi0JCXNsID0gbGlzdF9lbnRyeShlbnQsIHN0cnVjdCB3MV9zbGF2ZSwgdzFfc2xhdmVfZW50cnkpOwotCi0JCWlmIChzbC0+cmVnX251bS5mYW1pbHkgPT0gdG1wLT5mYW1pbHkgJiYKLQkJICAgIHNsLT5yZWdfbnVtLmlkID09IHRtcC0+aWQgJiYKLQkJICAgIHNsLT5yZWdfbnVtLmNyYyA9PSB0bXAtPmNyYykgewotCQkJc2V0X2JpdChXMV9TTEFWRV9BQ1RJVkUsIChsb25nICopJnNsLT5mbGFncyk7Ci0JCQlicmVhazsKLQkJfQotCi0JCXNsYXZlX2NvdW50Kys7Ci0JfQotCi0JaWYgKHNsYXZlX2NvdW50ID09IGRldi0+c2xhdmVfY291bnQgJiYKLQkJcm4gJiYgKChybiA+PiA1NikgJiAweGZmKSA9PSB3MV9jYWxjX2NyYzgoKHU4ICopJnJuX2xlLCA3KSkgewotCQl3MV9hdHRhY2hfc2xhdmVfZGV2aWNlKGRldiwgdG1wKTsKKwlzbCA9IHcxX3NsYXZlX3NlYXJjaF9kZXZpY2UoZGV2LCB0bXApOworCWlmIChzbCkgeworCQlzZXRfYml0KFcxX1NMQVZFX0FDVElWRSwgKGxvbmcgKikmc2wtPmZsYWdzKTsKKwl9IGVsc2UgeworCQlpZiAocm4gJiYgdG1wLT5jcmMgPT0gdzFfY2FsY19jcmM4KCh1OCAqKSZybl9sZSwgNykpCisJCQl3MV9hdHRhY2hfc2xhdmVfZGV2aWNlKGRldiwgdG1wKTsKIAl9CiAKIAlhdG9taWNfZGVjKCZkZXYtPnJlZmNudCk7CkBAIC03NzksODIgKzkxOCwyMiBAQAogCQkJLyogZXh0cmFjdCB0aGUgZGlyZWN0aW9uIHRha2VuICYgdXBkYXRlIHRoZSBkZXZpY2UgbnVtYmVyICovCiAJCQl0bXA2NCA9ICh0cmlwbGV0X3JldCA+PiAyKTsKIAkJCXJuIHw9ICh0bXA2NCA8PCBpKTsKKworCQkJaWYgKGt0aHJlYWRfc2hvdWxkX3N0b3AoKSkgeworCQkJCWRldl9kYmcoJmRldi0+ZGV2LCAiQWJvcnQgdzFfc2VhcmNoXG4iKTsKKwkJCQlyZXR1cm47CisJCQl9CiAJCX0KIAogCQlpZiAoICh0cmlwbGV0X3JldCAmIDB4MDMpICE9IDB4MDMgKSB7CiAJCQlpZiAoIChkZXNjX2JpdCA9PSBsYXN0X3plcm8pIHx8IChsYXN0X3plcm8gPCAwKSkKIAkJCQlsYXN0X2RldmljZSA9IDE7CiAJCQlkZXNjX2JpdCA9IGxhc3RfemVybzsKLQkJCWNiKGRldi0+YnVzX21hc3Rlci0+ZGF0YSwgcm4pOworCQkJY2IoZGV2LCBybik7CiAJCX0KIAl9CiB9CiAKLXN0YXRpYyBpbnQgdzFfY29udHJvbCh2b2lkICpkYXRhKQotewotCXN0cnVjdCB3MV9zbGF2ZSAqc2wsICpzbG47Ci0Jc3RydWN0IHcxX21hc3RlciAqZGV2LCAqbjsKLQlpbnQgaGF2ZV90b193YWl0ID0gMDsKLQotCXNldF9mcmVlemFibGUoKTsKLQl3aGlsZSAoIWt0aHJlYWRfc2hvdWxkX3N0b3AoKSB8fCBoYXZlX3RvX3dhaXQpIHsKLQkJaGF2ZV90b193YWl0ID0gMDsKLQotCQl0cnlfdG9fZnJlZXplKCk7Ci0JCW1zbGVlcF9pbnRlcnJ1cHRpYmxlKHcxX2NvbnRyb2xfdGltZW91dCAqIDEwMDApOwotCi0JCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShkZXYsIG4sICZ3MV9tYXN0ZXJzLCB3MV9tYXN0ZXJfZW50cnkpIHsKLQkJCWlmICgha3RocmVhZF9zaG91bGRfc3RvcCgpICYmICFkZXYtPmZsYWdzKQotCQkJCWNvbnRpbnVlOwotCQkJLyoKLQkJCSAqIExpdHRsZSByYWNlOiB3ZSBjYW4gY3JlYXRlIHRocmVhZCBidXQgbm90IHNldCB0aGUgZmxhZy4KLQkJCSAqIEdldCBhIGNoYW5jZSBmb3IgZXh0ZXJuYWwgcHJvY2VzcyB0byBzZXQgZmxhZyB1cC4KLQkJCSAqLwotCQkJaWYgKCFkZXYtPmluaXRpYWxpemVkKSB7Ci0JCQkJaGF2ZV90b193YWl0ID0gMTsKLQkJCQljb250aW51ZTsKLQkJCX0KLQotCQkJaWYgKGt0aHJlYWRfc2hvdWxkX3N0b3AoKSB8fCB0ZXN0X2JpdChXMV9NQVNURVJfTkVFRF9FWElULCAmZGV2LT5mbGFncykpIHsKLQkJCQlzZXRfYml0KFcxX01BU1RFUl9ORUVEX0VYSVQsICZkZXYtPmZsYWdzKTsKLQotCQkJCW11dGV4X2xvY2soJncxX21sb2NrKTsKLQkJCQlsaXN0X2RlbCgmZGV2LT53MV9tYXN0ZXJfZW50cnkpOwotCQkJCW11dGV4X3VubG9jaygmdzFfbWxvY2spOwotCi0JCQkJbXV0ZXhfbG9jaygmZGV2LT5tdXRleCk7Ci0JCQkJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHNsLCBzbG4sICZkZXYtPnNsaXN0LCB3MV9zbGF2ZV9lbnRyeSkgewotCQkJCQl3MV9zbGF2ZV9kZXRhY2goc2wpOwotCQkJCX0KLQkJCQl3MV9kZXN0cm95X21hc3Rlcl9hdHRyaWJ1dGVzKGRldik7Ci0JCQkJbXV0ZXhfdW5sb2NrKCZkZXYtPm11dGV4KTsKLQkJCQlhdG9taWNfZGVjKCZkZXYtPnJlZmNudCk7Ci0JCQkJY29udGludWU7Ci0JCQl9Ci0KLQkJCWlmICh0ZXN0X2JpdChXMV9NQVNURVJfTkVFRF9SRUNPTk5FQ1QsICZkZXYtPmZsYWdzKSkgewotCQkJCWRldl9kYmcoJmRldi0+ZGV2LCAiUmVjb25uZWN0aW5nIHNsYXZlcyBpbiBkZXZpY2UgJXMuXG4iLCBkZXYtPm5hbWUpOwotCQkJCW11dGV4X2xvY2soJmRldi0+bXV0ZXgpOwotCQkJCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShzbCwgc2xuLCAmZGV2LT5zbGlzdCwgdzFfc2xhdmVfZW50cnkpIHsKLQkJCQkJaWYgKHNsLT5mYW1pbHktPmZpZCA9PSBXMV9GQU1JTFlfREVGQVVMVCkgewotCQkJCQkJc3RydWN0IHcxX3JlZ19udW0gcm47Ci0KLQkJCQkJCW1lbWNweSgmcm4sICZzbC0+cmVnX251bSwgc2l6ZW9mKHJuKSk7Ci0JCQkJCQl3MV9zbGF2ZV9kZXRhY2goc2wpOwotCi0JCQkJCQl3MV9hdHRhY2hfc2xhdmVfZGV2aWNlKGRldiwgJnJuKTsKLQkJCQkJfQotCQkJCX0KLQkJCQlkZXZfZGJnKCZkZXYtPmRldiwgIlJlY29ubmVjdGluZyBzbGF2ZXMgaW4gZGV2aWNlICVzIGhhcyBiZWVuIGZpbmlzaGVkLlxuIiwgZGV2LT5uYW1lKTsKLQkJCQljbGVhcl9iaXQoVzFfTUFTVEVSX05FRURfUkVDT05ORUNULCAmZGV2LT5mbGFncyk7Ci0JCQkJbXV0ZXhfdW5sb2NrKCZkZXYtPm11dGV4KTsKLQkJCX0KLQkJfQotCX0KLQotCXJldHVybiAwOwotfQotCiB2b2lkIHcxX3NlYXJjaF9wcm9jZXNzKHN0cnVjdCB3MV9tYXN0ZXIgKmRldiwgdTggc2VhcmNoX3R5cGUpCiB7CiAJc3RydWN0IHcxX3NsYXZlICpzbCwgKnNsbjsKQEAgLTg3OCwyMyArOTU3LDI5IEBACiBpbnQgdzFfcHJvY2Vzcyh2b2lkICpkYXRhKQogewogCXN0cnVjdCB3MV9tYXN0ZXIgKmRldiA9IChzdHJ1Y3QgdzFfbWFzdGVyICopIGRhdGE7CisJLyogQXMgbG9uZyBhcyB3MV90aW1lb3V0IGlzIG9ubHkgc2V0IGJ5IGEgbW9kdWxlIHBhcmFtZXRlciB0aGUgc2xlZXAKKwkgKiB0aW1lIGNhbiBiZSBjYWxjdWxhdGVkIGluIGppZmZpZXMgb25jZS4KKwkgKi8KKwljb25zdCB1bnNpZ25lZCBsb25nIGp0aW1lID0gbXNlY3NfdG9famlmZmllcyh3MV90aW1lb3V0ICogMTAwMCk7CiAKLQl3aGlsZSAoIWt0aHJlYWRfc2hvdWxkX3N0b3AoKSAmJiAhdGVzdF9iaXQoVzFfTUFTVEVSX05FRURfRVhJVCwgJmRldi0+ZmxhZ3MpKSB7CisJd2hpbGUgKCFrdGhyZWFkX3Nob3VsZF9zdG9wKCkpIHsKKwkJaWYgKGRldi0+c2VhcmNoX2NvdW50KSB7CisJCQltdXRleF9sb2NrKCZkZXYtPm11dGV4KTsKKwkJCXcxX3NlYXJjaF9wcm9jZXNzKGRldiwgVzFfU0VBUkNIKTsKKwkJCW11dGV4X3VubG9jaygmZGV2LT5tdXRleCk7CisJCX0KKwogCQl0cnlfdG9fZnJlZXplKCk7Ci0JCW1zbGVlcF9pbnRlcnJ1cHRpYmxlKHcxX3RpbWVvdXQgKiAxMDAwKTsKKwkJX19zZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOwogCi0JCWlmIChrdGhyZWFkX3Nob3VsZF9zdG9wKCkgfHwgdGVzdF9iaXQoVzFfTUFTVEVSX05FRURfRVhJVCwgJmRldi0+ZmxhZ3MpKQorCQlpZiAoa3RocmVhZF9zaG91bGRfc3RvcCgpKQogCQkJYnJlYWs7CiAKLQkJaWYgKCFkZXYtPmluaXRpYWxpemVkKQotCQkJY29udGludWU7Ci0KLQkJaWYgKGRldi0+c2VhcmNoX2NvdW50ID09IDApCi0JCQljb250aW51ZTsKLQotCQltdXRleF9sb2NrKCZkZXYtPm11dGV4KTsKLQkJdzFfc2VhcmNoX3Byb2Nlc3MoZGV2LCBXMV9TRUFSQ0gpOwotCQltdXRleF91bmxvY2soJmRldi0+bXV0ZXgpOworCQkvKiBPbmx5IHNsZWVwIHdoZW4gdGhlIHNlYXJjaCBpcyBhY3RpdmUuICovCisJCWlmIChkZXYtPnNlYXJjaF9jb3VudCkKKwkJCXNjaGVkdWxlX3RpbWVvdXQoanRpbWUpOworCQllbHNlCisJCQlzY2hlZHVsZSgpOwogCX0KIAogCWF0b21pY19kZWMoJmRldi0+cmVmY250KTsKQEAgLTkzMiwxOCArMTAxNywxMyBAQAogCQlnb3RvIGVycl9vdXRfbWFzdGVyX3VucmVnaXN0ZXI7CiAJfQogCi0JdzFfY29udHJvbF90aHJlYWQgPSBrdGhyZWFkX3J1bih3MV9jb250cm9sLCBOVUxMLCAidzFfY29udHJvbCIpOwotCWlmIChJU19FUlIodzFfY29udHJvbF90aHJlYWQpKSB7Ci0JCXJldHZhbCA9IFBUUl9FUlIodzFfY29udHJvbF90aHJlYWQpOwotCQlwcmludGsoS0VSTl9FUlIgIkZhaWxlZCB0byBjcmVhdGUgY29udHJvbCB0aHJlYWQuIGVycj0lZFxuIiwKLQkJCXJldHZhbCk7Ci0JCWdvdG8gZXJyX291dF9zbGF2ZV91bnJlZ2lzdGVyOwotCX0KLQogCXJldHVybiAwOwogCisjaWYgMAorLyogRm9yIHVuZG9pbmcgdGhlIHNsYXZlIHJlZ2lzdGVyIGlmIHRoZXJlIHdhcyBhIHN0ZXAgYWZ0ZXIgaXQuICovCiBlcnJfb3V0X3NsYXZlX3VucmVnaXN0ZXI6CiAJZHJpdmVyX3VucmVnaXN0ZXIoJncxX3NsYXZlX2RyaXZlcik7CisjZW5kaWYKIAogZXJyX291dF9tYXN0ZXJfdW5yZWdpc3RlcjoKIAlkcml2ZXJfdW5yZWdpc3RlcigmdzFfbWFzdGVyX2RyaXZlcik7CkBAIC05NTksMTMgKzEwMzksMTIgQEAKIHsKIAlzdHJ1Y3QgdzFfbWFzdGVyICpkZXY7CiAKKwkvKiBTZXQgbmV0bGluayByZW1vdmFsIG1lc3NhZ2VzIGFuZCBzb21lIGNsZWFudXAgKi8KIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRldiwgJncxX21hc3RlcnMsIHcxX21hc3Rlcl9lbnRyeSkKIAkJX193MV9yZW1vdmVfbWFzdGVyX2RldmljZShkZXYpOwogCiAJdzFfZmluaV9uZXRsaW5rKCk7CiAKLQlrdGhyZWFkX3N0b3AodzFfY29udHJvbF90aHJlYWQpOwotCiAJZHJpdmVyX3VucmVnaXN0ZXIoJncxX3NsYXZlX2RyaXZlcik7CiAJZHJpdmVyX3VucmVnaXN0ZXIoJncxX21hc3Rlcl9kcml2ZXIpOwogCWJ1c191bnJlZ2lzdGVyKCZ3MV9idXNfdHlwZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3cxL3cxLmggYi9kcml2ZXJzL3cxL3cxLmgKaW5kZXggZjFkZjUzNC4uY2RhYTZmZiAxMDA2NDQKLS0tIGEvZHJpdmVycy93MS93MS5oCisrKyBiL2RyaXZlcnMvdzEvdzEuaApAQCAtNDYsNyArNDYsNiBAQAogI2luY2x1ZGUgIncxX2ZhbWlseS5oIgogCiAjZGVmaW5lIFcxX01BWE5BTUVMRU4JCTMyCi0jZGVmaW5lIFcxX1NMQVZFX0RBVEFfU0laRQkxMjgKIAogI2RlZmluZSBXMV9TRUFSQ0gJCTB4RjAKICNkZWZpbmUgVzFfQUxBUk1fU0VBUkNICQkweEVDCkBAIC03Nyw3ICs3Niw3IEBACiAJc3RydWN0IGNvbXBsZXRpb24JcmVsZWFzZWQ7CiB9OwogCi10eXBlZGVmIHZvaWQgKCogdzFfc2xhdmVfZm91bmRfY2FsbGJhY2spKHZvaWQgKiwgdTY0KTsKK3R5cGVkZWYgdm9pZCAoKncxX3NsYXZlX2ZvdW5kX2NhbGxiYWNrKShzdHJ1Y3QgdzFfbWFzdGVyICosIHU2NCk7CiAKIAogLyoqCkBAIC0xNDIsMTIgKzE0MSwxOCBAQAogCSAqLwogCXU4CQkoKnJlc2V0X2J1cykodm9pZCAqKTsKIAotCS8qKiBSZWFsbHkgbmljZSBoYXJkd2FyZSBjYW4gaGFuZGxlcyB0aGUgZGlmZmVyZW50IHR5cGVzIG9mIFJPTSBzZWFyY2ggKi8KLQl2b2lkCQkoKnNlYXJjaCkodm9pZCAqLCB1OCwgdzFfc2xhdmVfZm91bmRfY2FsbGJhY2spOwotfTsKKwkvKioKKwkgKiBQdXQgb3V0IGEgc3Ryb25nIHB1bGwtdXAgcHVsc2Ugb2YgdGhlIHNwZWNpZmllZCBkdXJhdGlvbi4KKwkgKiBAcmV0dXJuIC0xPUVycm9yLCAwPWNvbXBsZXRlZAorCSAqLworCXU4CQkoKnNldF9wdWxsdXApKHZvaWQgKiwgaW50KTsKIAotI2RlZmluZSBXMV9NQVNURVJfTkVFRF9FWElUCQkwCi0jZGVmaW5lIFcxX01BU1RFUl9ORUVEX1JFQ09OTkVDVAkxCisJLyoqIFJlYWxseSBuaWNlIGhhcmR3YXJlIGNhbiBoYW5kbGVzIHRoZSBkaWZmZXJlbnQgdHlwZXMgb2YgUk9NIHNlYXJjaAorCSAqICB3MV9tYXN0ZXIqIGlzIHBhc3NlZCB0byB0aGUgc2xhdmUgZm91bmQgY2FsbGJhY2suCisJICovCisJdm9pZAkJKCpzZWFyY2gpKHZvaWQgKiwgc3RydWN0IHcxX21hc3RlciAqLAorCQl1OCwgdzFfc2xhdmVfZm91bmRfY2FsbGJhY2spOworfTsKIAogc3RydWN0IHcxX21hc3RlcgogewpAQCAtMTY3LDcgKzE3MiwxMCBAQAogCXZvaWQJCQkqcHJpdjsKIAlpbnQJCQlwcml2X3NpemU7CiAKLQlsb25nCQkJZmxhZ3M7CisJLyoqIDVWIHN0cm9uZyBwdWxsdXAgZW5hYmxlZCBmbGFnLCAxIGVuYWJsZWQsIHplcm8gZGlzYWJsZWQuICovCisJaW50CQkJZW5hYmxlX3B1bGx1cDsKKwkvKiogNVYgc3Ryb25nIHB1bGx1cCBkdXJhdGlvbiBpbiBtaWxsaXNlY29uZHMsIHplcm8gZGlzYWJsZWQuICovCisJaW50CQkJcHVsbHVwX2R1cmF0aW9uOwogCiAJc3RydWN0IHRhc2tfc3RydWN0CSp0aHJlYWQ7CiAJc3RydWN0IG11dGV4CQltdXRleDsKQEAgLTE4MSwxMiArMTg5LDIxIEBACiB9OwogCiBpbnQgdzFfY3JlYXRlX21hc3Rlcl9hdHRyaWJ1dGVzKHN0cnVjdCB3MV9tYXN0ZXIgKik7Cit2b2lkIHcxX2Rlc3Ryb3lfbWFzdGVyX2F0dHJpYnV0ZXMoc3RydWN0IHcxX21hc3RlciAqbWFzdGVyKTsKIHZvaWQgdzFfc2VhcmNoKHN0cnVjdCB3MV9tYXN0ZXIgKmRldiwgdTggc2VhcmNoX3R5cGUsIHcxX3NsYXZlX2ZvdW5kX2NhbGxiYWNrIGNiKTsKIHZvaWQgdzFfc2VhcmNoX2RldmljZXMoc3RydWN0IHcxX21hc3RlciAqZGV2LCB1OCBzZWFyY2hfdHlwZSwgdzFfc2xhdmVfZm91bmRfY2FsbGJhY2sgY2IpOwogc3RydWN0IHcxX3NsYXZlICp3MV9zZWFyY2hfc2xhdmUoc3RydWN0IHcxX3JlZ19udW0gKmlkKTsKIHZvaWQgdzFfc2VhcmNoX3Byb2Nlc3Moc3RydWN0IHcxX21hc3RlciAqZGV2LCB1OCBzZWFyY2hfdHlwZSk7CiBzdHJ1Y3QgdzFfbWFzdGVyICp3MV9zZWFyY2hfbWFzdGVyX2lkKHUzMiBpZCk7CiAKKy8qIERpc2Nvbm5lY3QgYW5kIHJlY29ubmVjdCBkZXZpY2VzIGluIHRoZSBnaXZlbiBmYW1pbHkuICBVc2VkIGZvciBmaW5kaW5nCisgKiB1bmNsYWltZWQgZGV2aWNlcyBhZnRlciBhIGZhbWlseSBoYXMgYmVlbiByZWdpc3RlcmVkIG9yIHJlbGVhc2luZyBkZXZpY2VzCisgKiBhZnRlciBhIGZhbWlseSBoYXMgYmVlbiB1bnJlZ2lzdGVyZWQuICBTZXQgYXR0YWNoIHRvIDEgd2hlbiBhIG5ldyBmYW1pbHkKKyAqIGhhcyBqdXN0IGJlZW4gcmVnaXN0ZXJlZCwgdG8gMCB3aGVuIGl0IGhhcyBiZWVuIHVucmVnaXN0ZXJlZC4KKyAqLwordm9pZCB3MV9yZWNvbm5lY3Rfc2xhdmVzKHN0cnVjdCB3MV9mYW1pbHkgKmYsIGludCBhdHRhY2gpOwordm9pZCB3MV9zbGF2ZV9kZXRhY2goc3RydWN0IHcxX3NsYXZlICpzbCk7CisKIHU4IHcxX3RyaXBsZXQoc3RydWN0IHcxX21hc3RlciAqZGV2LCBpbnQgYmRpcik7CiB2b2lkIHcxX3dyaXRlXzgoc3RydWN0IHcxX21hc3RlciAqLCB1OCk7CiBpbnQgdzFfcmVzZXRfYnVzKHN0cnVjdCB3MV9tYXN0ZXIgKik7CkBAIC0xOTQsNiArMjExLDcgQEAKIHZvaWQgdzFfd3JpdGVfYmxvY2soc3RydWN0IHcxX21hc3RlciAqLCBjb25zdCB1OCAqLCBpbnQpOwogdTggdzFfcmVhZF9ibG9jayhzdHJ1Y3QgdzFfbWFzdGVyICosIHU4ICosIGludCk7CiBpbnQgdzFfcmVzZXRfc2VsZWN0X3NsYXZlKHN0cnVjdCB3MV9zbGF2ZSAqc2wpOwordm9pZCB3MV9uZXh0X3B1bGx1cChzdHJ1Y3QgdzFfbWFzdGVyICosIGludCk7CiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IHcxX3NsYXZlKiBkZXZfdG9fdzFfc2xhdmUoc3RydWN0IGRldmljZSAqZGV2KQogewpkaWZmIC0tZ2l0IGEvZHJpdmVycy93MS93MV9mYW1pbHkuYyBiL2RyaXZlcnMvdzEvdzFfZmFtaWx5LmMKaW5kZXggYTNjOTViZC4uNGEwOTkwNCAxMDA2NDQKLS0tIGEvZHJpdmVycy93MS93MV9mYW1pbHkuYworKysgYi9kcml2ZXJzL3cxL3cxX2ZhbWlseS5jCkBAIC00OCwxMiArNDgsMTIgQEAKIAogCWlmICghcmV0KSB7CiAJCWF0b21pY19zZXQoJm5ld2YtPnJlZmNudCwgMCk7Ci0JCW5ld2YtPm5lZWRfZXhpdCA9IDA7CiAJCWxpc3RfYWRkX3RhaWwoJm5ld2YtPmZhbWlseV9lbnRyeSwgJncxX2ZhbWlsaWVzKTsKIAl9CiAJc3Bpbl91bmxvY2soJncxX2Zsb2NrKTsKIAotCXcxX3JlY29ubmVjdF9zbGF2ZXMobmV3Zik7CisJLyogY2hlY2sgZGVmYXVsdCBkZXZpY2VzIGFnYWluc3QgdGhlIG5ldyBzZXQgb2YgZHJpdmVycyAqLworCXcxX3JlY29ubmVjdF9zbGF2ZXMobmV3ZiwgMSk7CiAKIAlyZXR1cm4gcmV0OwogfQpAQCAtNzIsMTEgKzcyLDExIEBACiAJCQlicmVhazsKIAkJfQogCX0KLQotCWZlbnQtPm5lZWRfZXhpdCA9IDE7Ci0KIAlzcGluX3VubG9jaygmdzFfZmxvY2spOwogCisJLyogZGVhdGNoIGRldmljZXMgdXNpbmcgdGhpcyBmYW1pbHkgY29kZSAqLworCXcxX3JlY29ubmVjdF9zbGF2ZXMoZmVudCwgMCk7CisKIAl3aGlsZSAoYXRvbWljX3JlYWQoJmZlbnQtPnJlZmNudCkpIHsKIAkJcHJpbnRrKEtFUk5fSU5GTyAiV2FpdGluZyBmb3IgZmFtaWx5ICV1IHRvIGJlY29tZSBmcmVlOiByZWZjbnQ9JWQuXG4iLAogCQkJCWZlbnQtPmZpZCwgYXRvbWljX3JlYWQoJmZlbnQtPnJlZmNudCkpOwpAQCAtMTA5LDggKzEwOSw3IEBACiAKIHN0YXRpYyB2b2lkIF9fdzFfZmFtaWx5X3B1dChzdHJ1Y3QgdzFfZmFtaWx5ICpmKQogewotCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZmLT5yZWZjbnQpKQotCQlmLT5uZWVkX2V4aXQgPSAxOworCWF0b21pY19kZWMoJmYtPnJlZmNudCk7CiB9CiAKIHZvaWQgdzFfZmFtaWx5X3B1dChzdHJ1Y3QgdzFfZmFtaWx5ICpmKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy93MS93MV9mYW1pbHkuaCBiL2RyaXZlcnMvdzEvdzFfZmFtaWx5LmgKaW5kZXggZWYxZTFkYS4uM2NhMWI5MiAxMDA2NDQKLS0tIGEvZHJpdmVycy93MS93MV9mYW1pbHkuaAorKysgYi9kcml2ZXJzL3cxL3cxX2ZhbWlseS5oCkBAIC0zMyw2ICszMyw3IEBACiAjZGVmaW5lIFcxX1RIRVJNX0RTMTgyMiAgCTB4MjIKICNkZWZpbmUgVzFfRUVQUk9NX0RTMjQzMyAgCTB4MjMKICNkZWZpbmUgVzFfVEhFUk1fRFMxOEIyMCAJMHgyOAorI2RlZmluZSBXMV9FRVBST01fRFMyNDMxCTB4MkQKICNkZWZpbmUgVzFfRkFNSUxZX0RTMjc2MAkweDMwCiAKICNkZWZpbmUgTUFYTkFNRUxFTgkJMzIKQEAgLTUzLDcgKzU0LDYgQEAKIAlzdHJ1Y3QgdzFfZmFtaWx5X29wcwkqZm9wczsKIAogCWF0b21pY190CQlyZWZjbnQ7Ci0JdTgJCQluZWVkX2V4aXQ7CiB9OwogCiBleHRlcm4gc3BpbmxvY2tfdCB3MV9mbG9jazsKQEAgLTYzLDYgKzYzLDUgQEAKIHN0cnVjdCB3MV9mYW1pbHkgKiB3MV9mYW1pbHlfcmVnaXN0ZXJlZCh1OCk7CiB2b2lkIHcxX3VucmVnaXN0ZXJfZmFtaWx5KHN0cnVjdCB3MV9mYW1pbHkgKik7CiBpbnQgdzFfcmVnaXN0ZXJfZmFtaWx5KHN0cnVjdCB3MV9mYW1pbHkgKik7Ci12b2lkIHcxX3JlY29ubmVjdF9zbGF2ZXMoc3RydWN0IHcxX2ZhbWlseSAqZik7CiAKICNlbmRpZiAvKiBfX1cxX0ZBTUlMWV9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3cxL3cxX2ludC5jIGIvZHJpdmVycy93MS93MV9pbnQuYwppbmRleCA2ODQwZGZlLi5hM2E1NDU2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3cxL3cxX2ludC5jCisrKyBiL2RyaXZlcnMvdzEvdzFfaW50LmMKQEAgLTI5LDcgKzI5LDExIEBACiAjaW5jbHVkZSAidzFfbmV0bGluay5oIgogI2luY2x1ZGUgIncxX2ludC5oIgogCi1zdGF0aWMgdTMyIHcxX2lkcyA9IDE7CitzdGF0aWMgaW50IHcxX3NlYXJjaF9jb3VudCA9IC0xOyAvKiBEZWZhdWx0IGlzIGNvbnRpbnVhbCBzY2FuICovCittb2R1bGVfcGFyYW1fbmFtZWQoc2VhcmNoX2NvdW50LCB3MV9zZWFyY2hfY291bnQsIGludCwgMCk7CisKK3N0YXRpYyBpbnQgdzFfZW5hYmxlX3B1bGx1cCA9IDE7Cittb2R1bGVfcGFyYW1fbmFtZWQoZW5hYmxlX3B1bGx1cCwgdzFfZW5hYmxlX3B1bGx1cCwgaW50LCAwKTsKIAogc3RhdGljIHN0cnVjdCB3MV9tYXN0ZXIgKiB3MV9hbGxvY19kZXYodTMyIGlkLCBpbnQgc2xhdmVfY291bnQsIGludCBzbGF2ZV90dGwsCiAJCQkJICAgICAgIHN0cnVjdCBkZXZpY2VfZHJpdmVyICpkcml2ZXIsCkBAIC01OSw4ICs2MywxMiBAQAogCWRldi0+aW5pdGlhbGl6ZWQJPSAwOwogCWRldi0+aWQJCQk9IGlkOwogCWRldi0+c2xhdmVfdHRsCQk9IHNsYXZlX3R0bDsKLSAgICAgICAgZGV2LT5zZWFyY2hfY291bnQJPSAtMTsgLyogY29udGludWFsIHNjYW4gKi8KKwlkZXYtPnNlYXJjaF9jb3VudAk9IHcxX3NlYXJjaF9jb3VudDsKKwlkZXYtPmVuYWJsZV9wdWxsdXAJPSB3MV9lbmFibGVfcHVsbHVwOwogCisJLyogMSBmb3IgdzFfcHJvY2VzcyB0byBkZWNyZW1lbnQKKwkgKiAxIGZvciBfX3cxX3JlbW92ZV9tYXN0ZXJfZGV2aWNlIHRvIGRlY3JlbWVudAorCSAqLwogCWF0b21pY19zZXQoJmRldi0+cmVmY250LCAyKTsKIAogCUlOSVRfTElTVF9IRUFEKCZkZXYtPnNsaXN0KTsKQEAgLTkzLDkgKzEwMSwxMCBAQAogCiBpbnQgdzFfYWRkX21hc3Rlcl9kZXZpY2Uoc3RydWN0IHcxX2J1c19tYXN0ZXIgKm1hc3RlcikKIHsKLQlzdHJ1Y3QgdzFfbWFzdGVyICpkZXY7CisJc3RydWN0IHcxX21hc3RlciAqZGV2LCAqZW50cnk7CiAJaW50IHJldHZhbCA9IDA7CiAJc3RydWN0IHcxX25ldGxpbmtfbXNnIG1zZzsKKwlpbnQgaWQsIGZvdW5kOwogCiAgICAgICAgIC8qIHZhbGlkYXRlIG1pbmltdW0gZnVuY3Rpb25hbGl0eSAqLwogICAgICAgICBpZiAoIShtYXN0ZXItPnRvdWNoX2JpdCAmJiBtYXN0ZXItPnJlc2V0X2J1cykgJiYKQEAgLTEwNCwxMCArMTEzLDUwIEBACiAJCXByaW50ayhLRVJOX0VSUiAidzFfYWRkX21hc3Rlcl9kZXZpY2U6IGludmFsaWQgZnVuY3Rpb24gc2V0XG4iKTsKIAkJcmV0dXJuKC1FSU5WQUwpOwogICAgICAgICB9CisJLyogV2hpbGUgaXQgd291bGQgYmUgZWxlY3RyaWNhbGx5IHBvc3NpYmxlIHRvIG1ha2UgYSBkZXZpY2UgdGhhdAorCSAqIGdlbmVyYXRlZCBhIHN0cm9uZyBwdWxsdXAgaW4gYml0IGJhbmcgbW9kZSwgb25seSBoYXJkYXJlIHRoYXQKKwkgKiBjb250cm9scyAxLXdpcmUgdGltZSBmcmFtZXMgYXJlIGV2ZW4gZXhwZWN0ZWQgdG8gc3VwcG9ydCBhIHN0cm9uZworCSAqIHB1bGx1cC4gIHcxX2lvLmMgd291bGQgbmVlZCB0byBzdXBwb3J0IGNhbGxpbmcgc2V0X3B1bGx1cCBiZWZvcmUKKwkgKiB0aGUgbGFzdCB3cml0ZV9iaXQgb3BlcmF0aW9uIG9mIGEgdzFfd3JpdGVfOCB3aGljaCBpdCBjdXJyZW50bHkKKwkgKiBkb2Vzbid0LgorCSAqLworCWlmICghbWFzdGVyLT53cml0ZV9ieXRlICYmICFtYXN0ZXItPnRvdWNoX2JpdCAmJiBtYXN0ZXItPnNldF9wdWxsdXApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJ3MV9hZGRfbWFzdGVyX2RldmljZTogc2V0X3B1bGx1cCByZXF1aXJlcyAiCisJCQkid3JpdGVfYnl0ZSBvciB0b3VjaF9iaXQsIGRpc2FibGluZ1xuIik7CisJCW1hc3Rlci0+c2V0X3B1bGx1cCA9IE5VTEw7CisJfQogCi0JZGV2ID0gdzFfYWxsb2NfZGV2KHcxX2lkcysrLCB3MV9tYXhfc2xhdmVfY291bnQsIHcxX21heF9zbGF2ZV90dGwsICZ3MV9tYXN0ZXJfZHJpdmVyLCAmdzFfbWFzdGVyX2RldmljZSk7Ci0JaWYgKCFkZXYpCisJLyogTG9jayB1bnRpbCB0aGUgZGV2aWNlIGlzIGFkZGVkIChvciBub3QpIHRvIHcxX21hc3RlcnMuICovCisJbXV0ZXhfbG9jaygmdzFfbWxvY2spOworCS8qIFNlYXJjaCBmb3IgdGhlIGZpcnN0IGF2YWlsYWJsZSBpZCAoc3RhcnRpbmcgYXQgMSkuICovCisJaWQgPSAwOworCWRvIHsKKwkJKytpZDsKKwkJZm91bmQgPSAwOworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGVudHJ5LCAmdzFfbWFzdGVycywgdzFfbWFzdGVyX2VudHJ5KSB7CisJCQlpZiAoZW50cnktPmlkID09IGlkKSB7CisJCQkJZm91bmQgPSAxOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJfSB3aGlsZSAoZm91bmQpOworCisJZGV2ID0gdzFfYWxsb2NfZGV2KGlkLCB3MV9tYXhfc2xhdmVfY291bnQsIHcxX21heF9zbGF2ZV90dGwsCisJCSZ3MV9tYXN0ZXJfZHJpdmVyLCAmdzFfbWFzdGVyX2RldmljZSk7CisJaWYgKCFkZXYpIHsKKwkJbXV0ZXhfdW5sb2NrKCZ3MV9tbG9jayk7CiAJCXJldHVybiAtRU5PTUVNOworCX0KKworCXJldHZhbCA9ICB3MV9jcmVhdGVfbWFzdGVyX2F0dHJpYnV0ZXMoZGV2KTsKKwlpZiAocmV0dmFsKSB7CisJCW11dGV4X3VubG9jaygmdzFfbWxvY2spOworCQlnb3RvIGVycl9vdXRfZnJlZV9kZXY7CisJfQorCisJbWVtY3B5KGRldi0+YnVzX21hc3RlciwgbWFzdGVyLCBzaXplb2Yoc3RydWN0IHcxX2J1c19tYXN0ZXIpKTsKKworCWRldi0+aW5pdGlhbGl6ZWQgPSAxOwogCiAJZGV2LT50aHJlYWQgPSBrdGhyZWFkX3J1bigmdzFfcHJvY2VzcywgZGV2LCAiJXMiLCBkZXYtPm5hbWUpOwogCWlmIChJU19FUlIoZGV2LT50aHJlYWQpKSB7CkBAIC0xMTUsMTggKzE2NCwxMCBAQAogCQlkZXZfZXJyKCZkZXYtPmRldiwKIAkJCSAiRmFpbGVkIHRvIGNyZWF0ZSBuZXcga2VybmVsIHRocmVhZC4gZXJyPSVkXG4iLAogCQkJIHJldHZhbCk7Ci0JCWdvdG8gZXJyX291dF9mcmVlX2RldjsKKwkJbXV0ZXhfdW5sb2NrKCZ3MV9tbG9jayk7CisJCWdvdG8gZXJyX291dF9ybV9hdHRyOwogCX0KIAotCXJldHZhbCA9ICB3MV9jcmVhdGVfbWFzdGVyX2F0dHJpYnV0ZXMoZGV2KTsKLQlpZiAocmV0dmFsKQotCQlnb3RvIGVycl9vdXRfa2lsbF90aHJlYWQ7Ci0KLQltZW1jcHkoZGV2LT5idXNfbWFzdGVyLCBtYXN0ZXIsIHNpemVvZihzdHJ1Y3QgdzFfYnVzX21hc3RlcikpOwotCi0JZGV2LT5pbml0aWFsaXplZCA9IDE7Ci0KLQltdXRleF9sb2NrKCZ3MV9tbG9jayk7CiAJbGlzdF9hZGQoJmRldi0+dzFfbWFzdGVyX2VudHJ5LCAmdzFfbWFzdGVycyk7CiAJbXV0ZXhfdW5sb2NrKCZ3MV9tbG9jayk7CiAKQEAgLTEzNyw4ICsxNzgsMTIgQEAKIAogCXJldHVybiAwOwogCisjaWYgMCAvKiBUaHJlYWQgY2xlYW51cCBjb2RlLCBub3QgcmVxdWlyZWQgY3VycmVudGx5LiAqLwogZXJyX291dF9raWxsX3RocmVhZDoKIAlrdGhyZWFkX3N0b3AoZGV2LT50aHJlYWQpOworI2VuZGlmCitlcnJfb3V0X3JtX2F0dHI6CisJdzFfZGVzdHJveV9tYXN0ZXJfYXR0cmlidXRlcyhkZXYpOwogZXJyX291dF9mcmVlX2RldjoKIAl3MV9mcmVlX2RldihkZXYpOwogCkBAIC0xNDgsMTAgKzE5MywyMSBAQAogdm9pZCBfX3cxX3JlbW92ZV9tYXN0ZXJfZGV2aWNlKHN0cnVjdCB3MV9tYXN0ZXIgKmRldikKIHsKIAlzdHJ1Y3QgdzFfbmV0bGlua19tc2cgbXNnOworCXN0cnVjdCB3MV9zbGF2ZSAqc2wsICpzbG47CiAKLQlzZXRfYml0KFcxX01BU1RFUl9ORUVEX0VYSVQsICZkZXYtPmZsYWdzKTsKIAlrdGhyZWFkX3N0b3AoZGV2LT50aHJlYWQpOwogCisJbXV0ZXhfbG9jaygmdzFfbWxvY2spOworCWxpc3RfZGVsKCZkZXYtPncxX21hc3Rlcl9lbnRyeSk7CisJbXV0ZXhfdW5sb2NrKCZ3MV9tbG9jayk7CisKKwltdXRleF9sb2NrKCZkZXYtPm11dGV4KTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoc2wsIHNsbiwgJmRldi0+c2xpc3QsIHcxX3NsYXZlX2VudHJ5KQorCQl3MV9zbGF2ZV9kZXRhY2goc2wpOworCXcxX2Rlc3Ryb3lfbWFzdGVyX2F0dHJpYnV0ZXMoZGV2KTsKKwltdXRleF91bmxvY2soJmRldi0+bXV0ZXgpOworCWF0b21pY19kZWMoJmRldi0+cmVmY250KTsKKwogCXdoaWxlIChhdG9taWNfcmVhZCgmZGV2LT5yZWZjbnQpKSB7CiAJCWRldl9pbmZvKCZkZXYtPmRldiwgIldhaXRpbmcgZm9yICVzIHRvIGJlY29tZSBmcmVlOiByZWZjbnQ9JWQuXG4iLAogCQkJCWRldi0+bmFtZSwgYXRvbWljX3JlYWQoJmRldi0+cmVmY250KSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3cxL3cxX2lvLmMgYi9kcml2ZXJzL3cxL3cxX2lvLmMKaW5kZXggMzBiNmZiZi4uZjRmODJmMSAxMDA2NDQKLS0tIGEvZHJpdmVycy93MS93MV9pby5jCisrKyBiL2RyaXZlcnMvdzEvdzFfaW8uYwpAQCAtOTMsNiArOTMsNDAgQEAKIH0KIAogLyoqCisgKiBQcmUtd3JpdGUgb3BlcmF0aW9uLCBjdXJyZW50bHkgb25seSBzdXBwb3J0aW5nIHN0cm9uZyBwdWxsdXBzLgorICogUHJvZ3JhbSB0aGUgaGFyZHdhcmUgZm9yIGEgc3Ryb25nIHB1bGx1cCwgaWYgb25lIGhhcyBiZWVuIHJlcXVlc3RlZCBhbmQKKyAqIHRoZSBoYXJkd2FyZSBzdXBwb3J0cyBpdC4KKyAqCisgKiBAcGFyYW0gZGV2ICAgICB0aGUgbWFzdGVyIGRldmljZQorICovCitzdGF0aWMgdm9pZCB3MV9wcmVfd3JpdGUoc3RydWN0IHcxX21hc3RlciAqZGV2KQoreworCWlmIChkZXYtPnB1bGx1cF9kdXJhdGlvbiAmJgorCQlkZXYtPmVuYWJsZV9wdWxsdXAgJiYgZGV2LT5idXNfbWFzdGVyLT5zZXRfcHVsbHVwKSB7CisJCWRldi0+YnVzX21hc3Rlci0+c2V0X3B1bGx1cChkZXYtPmJ1c19tYXN0ZXItPmRhdGEsCisJCQlkZXYtPnB1bGx1cF9kdXJhdGlvbik7CisJfQorfQorCisvKioKKyAqIFBvc3Qtd3JpdGUgb3BlcmF0aW9uLCBjdXJyZW50bHkgb25seSBzdXBwb3J0aW5nIHN0cm9uZyBwdWxsdXBzLgorICogSWYgYSBzdHJvbmcgcHVsbHVwIHdhcyByZXF1ZXN0ZWQsIGNsZWFyIGl0IGlmIHRoZSBoYXJkd2FyZSBzdXBwb3J0cworICogdGhlbSwgb3IgZXhlY3V0ZSB0aGUgZGVsYXkgb3RoZXJ3aXNlLCBpbiBlaXRoZXIgY2FzZSBjbGVhciB0aGUgcmVxdWVzdC4KKyAqCisgKiBAcGFyYW0gZGV2ICAgICB0aGUgbWFzdGVyIGRldmljZQorICovCitzdGF0aWMgdm9pZCB3MV9wb3N0X3dyaXRlKHN0cnVjdCB3MV9tYXN0ZXIgKmRldikKK3sKKwlpZiAoZGV2LT5wdWxsdXBfZHVyYXRpb24pIHsKKwkJaWYgKGRldi0+ZW5hYmxlX3B1bGx1cCAmJiBkZXYtPmJ1c19tYXN0ZXItPnNldF9wdWxsdXApCisJCQlkZXYtPmJ1c19tYXN0ZXItPnNldF9wdWxsdXAoZGV2LT5idXNfbWFzdGVyLT5kYXRhLCAwKTsKKwkJZWxzZQorCQkJbXNsZWVwKGRldi0+cHVsbHVwX2R1cmF0aW9uKTsKKwkJZGV2LT5wdWxsdXBfZHVyYXRpb24gPSAwOworCX0KK30KKworLyoqCiAgKiBXcml0ZXMgOCBiaXRzLgogICoKICAqIEBwYXJhbSBkZXYgICAgIHRoZSBtYXN0ZXIgZGV2aWNlCkBAIC0xMDIsMTEgKzEzNiwxNyBAQAogewogCWludCBpOwogCi0JaWYgKGRldi0+YnVzX21hc3Rlci0+d3JpdGVfYnl0ZSkKKwlpZiAoZGV2LT5idXNfbWFzdGVyLT53cml0ZV9ieXRlKSB7CisJCXcxX3ByZV93cml0ZShkZXYpOwogCQlkZXYtPmJ1c19tYXN0ZXItPndyaXRlX2J5dGUoZGV2LT5idXNfbWFzdGVyLT5kYXRhLCBieXRlKTsKKwl9CiAJZWxzZQotCQlmb3IgKGkgPSAwOyBpIDwgODsgKytpKQorCQlmb3IgKGkgPSAwOyBpIDwgODsgKytpKSB7CisJCQlpZiAoaSA9PSA3KQorCQkJCXcxX3ByZV93cml0ZShkZXYpOwogCQkJdzFfdG91Y2hfYml0KGRldiwgKGJ5dGUgPj4gaSkgJiAweDEpOworCQl9CisJdzFfcG9zdF93cml0ZShkZXYpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwodzFfd3JpdGVfOCk7CiAKQEAgLTIwMywxMSArMjQzLDE0IEBACiB7CiAJaW50IGk7CiAKLQlpZiAoZGV2LT5idXNfbWFzdGVyLT53cml0ZV9ibG9jaykKKwlpZiAoZGV2LT5idXNfbWFzdGVyLT53cml0ZV9ibG9jaykgeworCQl3MV9wcmVfd3JpdGUoZGV2KTsKIAkJZGV2LT5idXNfbWFzdGVyLT53cml0ZV9ibG9jayhkZXYtPmJ1c19tYXN0ZXItPmRhdGEsIGJ1ZiwgbGVuKTsKKwl9CiAJZWxzZQogCQlmb3IgKGkgPSAwOyBpIDwgbGVuOyArK2kpCi0JCQl3MV93cml0ZV84KGRldiwgYnVmW2ldKTsKKwkJCXcxX3dyaXRlXzgoZGV2LCBidWZbaV0pOyAvKiBjYWxscyB3MV9wcmVfd3JpdGUgKi8KKwl3MV9wb3N0X3dyaXRlKGRldik7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTCh3MV93cml0ZV9ibG9jayk7CiAKQEAgLTI1MCwxMiArMjkzLDI0IEBACiAJCXJlc3VsdCA9IGRldi0+YnVzX21hc3Rlci0+cmVzZXRfYnVzKGRldi0+YnVzX21hc3Rlci0+ZGF0YSkgJiAweDE7CiAJZWxzZSB7CiAJCWRldi0+YnVzX21hc3Rlci0+d3JpdGVfYml0KGRldi0+YnVzX21hc3Rlci0+ZGF0YSwgMCk7CisJCS8qIG1pbmltdW0gNDgwLCBtYXggPyB1cworCQkgKiBiZSBuaWNlIGFuZCBzbGVlcCwgZXhjZXB0IDE4YjIwIHNwZWMgbGlzdHMgOTYwdXMgbWF4aW11bSwKKwkJICogc28gdW50aWwgd2UgY2FuIHNsZWVwIHdpdGggbWljcm9zZWNvbmQgYWNjdXJhY3ksIHNwaW4uCisJCSAqIEZlZWwgZnJlZSB0byBjb21lIHVwIHdpdGggc29tZSBvdGhlciB3YXkgdG8gZ2l2ZSB1cCB0aGUKKwkJICogY3B1IGZvciBzdWNoIGEgc2hvcnQgYW1vdW50IG9mIHRpbWUgQU5EIGdldCBpdCBiYWNrIGluCisJCSAqIHRoZSBtYXhpbXVtIGFtb3VudCBvZiB0aW1lLgorCQkgKi8KIAkJdzFfZGVsYXkoNDgwKTsKIAkJZGV2LT5idXNfbWFzdGVyLT53cml0ZV9iaXQoZGV2LT5idXNfbWFzdGVyLT5kYXRhLCAxKTsKIAkJdzFfZGVsYXkoNzApOwogCiAJCXJlc3VsdCA9IGRldi0+YnVzX21hc3Rlci0+cmVhZF9iaXQoZGV2LT5idXNfbWFzdGVyLT5kYXRhKSAmIDB4MTsKLQkJdzFfZGVsYXkoNDEwKTsKKwkJLyogbWlubXVtIDcwIChhYm92ZSkgKyA0MTAgPSA0ODAgdXMKKwkJICogVGhlcmUgYXJlbid0IGFueSB0aW1pbmcgcmVxdWlyZW1lbnRzIGJldHdlZW4gYSByZXNldCBhbmQKKwkJICogdGhlIGZvbGxvd2luZyB0cmFuc2FjdGlvbnMuICBTbGVlcGluZyBpcyBzYWZlIGhlcmUuCisJCSAqLworCQkvKiB3MV9kZWxheSg0MTApOyBtaW4gcmVxdWlyZWQgdGltZSAqLworCQltc2xlZXAoMSk7CiAJfQogCiAJcmV0dXJuIHJlc3VsdDsKQEAgLTI3Nyw3ICszMzIsOCBAQAogewogCWRldi0+YXR0ZW1wdHMrKzsKIAlpZiAoZGV2LT5idXNfbWFzdGVyLT5zZWFyY2gpCi0JCWRldi0+YnVzX21hc3Rlci0+c2VhcmNoKGRldi0+YnVzX21hc3Rlci0+ZGF0YSwgc2VhcmNoX3R5cGUsIGNiKTsKKwkJZGV2LT5idXNfbWFzdGVyLT5zZWFyY2goZGV2LT5idXNfbWFzdGVyLT5kYXRhLCBkZXYsCisJCQlzZWFyY2hfdHlwZSwgY2IpOwogCWVsc2UKIAkJdzFfc2VhcmNoKGRldiwgc2VhcmNoX3R5cGUsIGNiKTsKIH0KQEAgLTMwNSwzICszNjEsMjAgQEAKIAlyZXR1cm4gMDsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHcxX3Jlc2V0X3NlbGVjdF9zbGF2ZSk7CisKKy8qKgorICogUHV0IG91dCBhIHN0cm9uZyBwdWxsLXVwIG9mIHRoZSBzcGVjaWZpZWQgZHVyYXRpb24gYWZ0ZXIgdGhlIG5leHQgd3JpdGUKKyAqIG9wZXJhdGlvbi4gIE5vdCBhbGwgaGFyZHdhcmUgc3VwcG9ydHMgc3Ryb25nIHB1bGx1cHMuICBIYXJkd2FyZSB0aGF0CisgKiBkb2Vzbid0IHN1cHBvcnQgc3Ryb25nIHB1bGx1cHMgd2lsbCBzbGVlcCBmb3IgdGhlIGdpdmVuIHRpbWUgYWZ0ZXIgdGhlCisgKiB3cml0ZSBvcGVyYXRpb24gd2l0aG91dCBhIHN0cm9uZyBwdWxsdXAuICBUaGlzIGlzIGEgb25lIHNob3QgcmVxdWVzdCBmb3IKKyAqIHRoZSBuZXh0IHdyaXRlLCBzcGVjaWZ5aW5nIHplcm8gd2lsbCBjbGVhciBhIHByZXZpb3VzIHJlcXVlc3QuCisgKiBUaGUgdzEgbWFzdGVyIGxvY2sgbXVzdCBiZSBoZWxkLgorICoKKyAqIEBwYXJhbSBkZWxheQl0aW1lIGluIG1pbGxpc2Vjb25kcworICogQHJldHVybgkwPXN1Y2Nlc3MsIGFueXRoaW5nIGVsc2U9ZXJyb3IKKyAqLwordm9pZCB3MV9uZXh0X3B1bGx1cChzdHJ1Y3QgdzFfbWFzdGVyICpkZXYsIGludCBkZWxheSkKK3sKKwlkZXYtPnB1bGx1cF9kdXJhdGlvbiA9IGRlbGF5OworfQorRVhQT1JUX1NZTUJPTF9HUEwodzFfbmV4dF9wdWxsdXApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy93YXRjaGRvZy9pYjcwMHdkdC5jIGIvZHJpdmVycy93YXRjaGRvZy9pYjcwMHdkdC5jCmluZGV4IDA1YTI4MTAuLjg3ODJlYzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvd2F0Y2hkb2cvaWI3MDB3ZHQuYworKysgYi9kcml2ZXJzL3dhdGNoZG9nL2liNzAwd2R0LmMKQEAgLTE1NCw3ICsxNTQsNyBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWZvciAoaSA9IDB4MEY7IGkgPiAtMTsgaS0tKQotCQlpZiAod2RfdGltZXNbaV0gPiB0KQorCQlpZiAod2RfdGltZXNbaV0gPj0gdCkKIAkJCWJyZWFrOwogCXdkX21hcmdpbiA9IGk7CiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3hlbi9ldmVudHMuYyBiL2RyaXZlcnMveGVuL2V2ZW50cy5jCmluZGV4IGMzMjkwYmMuLjljZTFhYjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMveGVuL2V2ZW50cy5jCisrKyBiL2RyaXZlcnMveGVuL2V2ZW50cy5jCkBAIC0xMjUsNyArMTI1LDcgQEAKIAogCUJVR19PTihpcnEgPT0gLTEpOwogI2lmZGVmIENPTkZJR19TTVAKLQlpcnFfZGVzY1tpcnFdLmFmZmluaXR5ID0gY3B1bWFza19vZl9jcHUoY3B1KTsKKwlpcnFfdG9fZGVzYyhpcnEpLT5hZmZpbml0eSA9IGNwdW1hc2tfb2ZfY3B1KGNwdSk7CiAjZW5kaWYKIAogCV9fY2xlYXJfYml0KGNobiwgY3B1X2V2dGNobl9tYXNrW2NwdV9ldnRjaG5bY2huXV0pOwpAQCAtMTM3LDEwICsxMzcsMTIgQEAKIHN0YXRpYyB2b2lkIGluaXRfZXZ0Y2huX2NwdV9iaW5kaW5ncyh2b2lkKQogewogI2lmZGVmIENPTkZJR19TTVAKKwlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2M7CiAJaW50IGk7CisKIAkvKiBCeSBkZWZhdWx0IGFsbCBldmVudCBjaGFubmVscyBub3RpZnkgQ1BVIzAuICovCi0JZm9yIChpID0gMDsgaSA8IE5SX0lSUVM7IGkrKykKLQkJaXJxX2Rlc2NbaV0uYWZmaW5pdHkgPSBjcHVtYXNrX29mX2NwdSgwKTsKKwlmb3JfZWFjaF9pcnFfZGVzYyhpLCBkZXNjKQorCQlkZXNjLT5hZmZpbml0eSA9IGNwdW1hc2tfb2ZfY3B1KDApOwogI2VuZGlmCiAKIAltZW1zZXQoY3B1X2V2dGNobiwgMCwgc2l6ZW9mKGNwdV9ldnRjaG4pKTsKQEAgLTIyOSwxMiArMjMxLDEyIEBACiAJaW50IGlycTsKIAogCS8qIE9ubHkgYWxsb2NhdGUgZnJvbSBkeW5pcnEgcmFuZ2UgKi8KLQlmb3IgKGlycSA9IDA7IGlycSA8IE5SX0lSUVM7IGlycSsrKQorCWZvcl9lYWNoX2lycV9ucihpcnEpCiAJCWlmIChpcnFfYmluZGNvdW50W2lycV0gPT0gMCkKIAkJCWJyZWFrOwogCi0JaWYgKGlycSA9PSBOUl9JUlFTKQotCQlwYW5pYygiTm8gYXZhaWxhYmxlIElSUSB0byBiaW5kIHRvOiBpbmNyZWFzZSBOUl9JUlFTIVxuIik7CisJaWYgKGlycSA9PSBucl9pcnFzKQorCQlwYW5pYygiTm8gYXZhaWxhYmxlIElSUSB0byBiaW5kIHRvOiBpbmNyZWFzZSBucl9pcnFzIVxuIik7CiAKIAlyZXR1cm4gaXJxOwogfQpAQCAtNzkwLDcgKzc5Miw3IEBACiAJCW1hc2tfZXZ0Y2huKGV2dGNobik7CiAKIAkvKiBObyBJUlEgPC0+IGV2ZW50LWNoYW5uZWwgbWFwcGluZ3MuICovCi0JZm9yIChpcnEgPSAwOyBpcnEgPCBOUl9JUlFTOyBpcnErKykKKwlmb3JfZWFjaF9pcnFfbnIoaXJxKQogCQlpcnFfaW5mb1tpcnFdLmV2dGNobiA9IDA7IC8qIHphcCBldmVudC1jaGFubmVsIGJpbmRpbmcgKi8KIAogCWZvciAoZXZ0Y2huID0gMDsgZXZ0Y2huIDwgTlJfRVZFTlRfQ0hBTk5FTFM7IGV2dGNobisrKQpAQCAtODIyLDcgKzgyNCw3IEBACiAJCW1hc2tfZXZ0Y2huKGkpOwogCiAJLyogRHluYW1pYyBJUlEgc3BhY2UgaXMgY3VycmVudGx5IHVuYm91bmQuIFplcm8gdGhlIHJlZmNudHMuICovCi0JZm9yIChpID0gMDsgaSA8IE5SX0lSUVM7IGkrKykKKwlmb3JfZWFjaF9pcnFfbnIoaSkKIAkJaXJxX2JpbmRjb3VudFtpXSA9IDA7CiAKIAlpcnFfY3R4X2luaXQoc21wX3Byb2Nlc3Nvcl9pZCgpKTsKZGlmZiAtLWdpdCBhL2ZzLzlwL3Y5ZnMuYyBiL2ZzLzlwL3Y5ZnMuYwppbmRleCAwNDdjNzkxLi4yNGViMDEwIDEwMDY0NAotLS0gYS9mcy85cC92OWZzLmMKKysrIGIvZnMvOXAvdjlmcy5jCkBAIC0zMCw4ICszMCw4IEBACiAjaW5jbHVkZSA8bGludXgvcGFyc2VyLmg+CiAjaW5jbHVkZSA8bGludXgvaWRyLmg+CiAjaW5jbHVkZSA8bmV0LzlwLzlwLmg+Ci0jaW5jbHVkZSA8bmV0LzlwL3RyYW5zcG9ydC5oPgogI2luY2x1ZGUgPG5ldC85cC9jbGllbnQuaD4KKyNpbmNsdWRlIDxuZXQvOXAvdHJhbnNwb3J0Lmg+CiAjaW5jbHVkZSAidjlmcy5oIgogI2luY2x1ZGUgInY5ZnNfdmZzLmgiCiAKQEAgLTU1LDcgKzU1LDcgQEAKIAlPcHRfZXJyCiB9OwogCi1zdGF0aWMgbWF0Y2hfdGFibGVfdCB0b2tlbnMgPSB7CitzdGF0aWMgY29uc3QgbWF0Y2hfdGFibGVfdCB0b2tlbnMgPSB7CiAJe09wdF9kZWJ1ZywgImRlYnVnPSV4In0sCiAJe09wdF9kZmx0dWlkLCAiZGZsdHVpZD0ldSJ9LAogCXtPcHRfZGZsdGdpZCwgImRmbHRnaWQ9JXUifSwKQEAgLTIzNCw3ICsyMzQsNyBAQAogCWlmICghdjlzZXMtPmNsbnQtPmRvdHUpCiAJCXY5c2VzLT5mbGFncyAmPSB+VjlGU19FWFRFTkRFRDsKIAotCXY5c2VzLT5tYXhkYXRhID0gdjlzZXMtPmNsbnQtPm1zaXplOworCXY5c2VzLT5tYXhkYXRhID0gdjlzZXMtPmNsbnQtPm1zaXplIC0gUDlfSU9IRFJTWjsKIAogCS8qIGZvciBsZWdhY3kgbW9kZSwgZmFsbCBiYWNrIHRvIFY5RlNfQUNDRVNTX0FOWSAqLwogCWlmICghdjlmc19leHRlbmRlZCh2OXNlcykgJiYKZGlmZiAtLWdpdCBhL2ZzLzlwL3Y5ZnNfdmZzLmggYi9mcy85cC92OWZzX3Zmcy5oCmluZGV4IDU3OTk3ZmEuLmMyOTViYTcgMTAwNjQ0Ci0tLSBhL2ZzLzlwL3Y5ZnNfdmZzLmgKKysrIGIvZnMvOXAvdjlmc192ZnMuaApAQCAtNDYsOSArNDYsMTEgQEAKIAogc3RydWN0IGlub2RlICp2OWZzX2dldF9pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgbW9kZSk7CiBpbm9fdCB2OWZzX3FpZDJpbm8oc3RydWN0IHA5X3FpZCAqcWlkKTsKLXZvaWQgdjlmc19zdGF0Mmlub2RlKHN0cnVjdCBwOV9zdGF0ICosIHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKik7Cit2b2lkIHY5ZnNfc3RhdDJpbm9kZShzdHJ1Y3QgcDlfd3N0YXQgKiwgc3RydWN0IGlub2RlICosIHN0cnVjdCBzdXBlcl9ibG9jayAqKTsKIGludCB2OWZzX2Rpcl9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwKTsKIGludCB2OWZzX2ZpbGVfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSk7Ci12b2lkIHY5ZnNfaW5vZGUyc3RhdChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgcDlfc3RhdCAqc3RhdCk7Cit2b2lkIHY5ZnNfaW5vZGUyc3RhdChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgcDlfd3N0YXQgKnN0YXQpOwogdm9pZCB2OWZzX2RlbnRyeV9yZWxlYXNlKHN0cnVjdCBkZW50cnkgKik7CiBpbnQgdjlmc191ZmxhZ3Myb21vZGUoaW50IHVmbGFncywgaW50IGV4dGVuZGVkKTsKKworc3NpemVfdCB2OWZzX2ZpbGVfcmVhZG4oc3RydWN0IGZpbGUgKiwgY2hhciAqLCBjaGFyIF9fdXNlciAqLCB1MzIsIHU2NCk7CmRpZmYgLS1naXQgYS9mcy85cC92ZnNfYWRkci5jIGIvZnMvOXAvdmZzX2FkZHIuYwppbmRleCA5N2QzYWVkLi42ZmNiMWU3IDEwMDY0NAotLS0gYS9mcy85cC92ZnNfYWRkci5jCisrKyBiL2ZzLzlwL3Zmc19hZGRyLmMKQEAgLTM4LDcgKzM4LDYgQEAKIAogI2luY2x1ZGUgInY5ZnMuaCIKICNpbmNsdWRlICJ2OWZzX3Zmcy5oIgotI2luY2x1ZGUgImZpZC5oIgogCiAvKioKICAqIHY5ZnNfdmZzX3JlYWRwYWdlIC0gcmVhZCBhbiBlbnRpcmUgcGFnZSBpbiBmcm9tIDlQCkBAIC01MywxNCArNTIsMTIgQEAKIAlpbnQgcmV0dmFsOwogCWxvZmZfdCBvZmZzZXQ7CiAJY2hhciAqYnVmZmVyOwotCXN0cnVjdCBwOV9maWQgKmZpZDsKIAogCVA5X0RQUklOVEsoUDlfREVCVUdfVkZTLCAiXG4iKTsKLQlmaWQgPSBmaWxwLT5wcml2YXRlX2RhdGE7CiAJYnVmZmVyID0ga21hcChwYWdlKTsKIAlvZmZzZXQgPSBwYWdlX29mZnNldChwYWdlKTsKIAotCXJldHZhbCA9IHA5X2NsaWVudF9yZWFkbihmaWQsIGJ1ZmZlciwgb2Zmc2V0LCBQQUdFX0NBQ0hFX1NJWkUpOworCXJldHZhbCA9IHY5ZnNfZmlsZV9yZWFkbihmaWxwLCBidWZmZXIsIE5VTEwsIG9mZnNldCwgUEFHRV9DQUNIRV9TSVpFKTsKIAlpZiAocmV0dmFsIDwgMCkKIAkJZ290byBkb25lOwogCmRpZmYgLS1naXQgYS9mcy85cC92ZnNfZGlyLmMgYi9mcy85cC92ZnNfZGlyLmMKaW5kZXggZTI5OGZlMS4uODczY2QzMSAxMDA2NDQKLS0tIGEvZnMvOXAvdmZzX2Rpci5jCisrKyBiL2ZzLzlwL3Zmc19kaXIuYwpAQCAtNDUsNyArNDUsNyBAQAogICoKICAqLwogCi1zdGF0aWMgaW5saW5lIGludCBkdF90eXBlKHN0cnVjdCBwOV9zdGF0ICptaXN0YXQpCitzdGF0aWMgaW5saW5lIGludCBkdF90eXBlKHN0cnVjdCBwOV93c3RhdCAqbWlzdGF0KQogewogCXVuc2lnbmVkIGxvbmcgcGVybSA9IG1pc3RhdC0+bW9kZTsKIAlpbnQgcmV0dHlwZSA9IERUX1JFRzsKQEAgLTY5LDMyICs2OSw1OCBAQAogc3RhdGljIGludCB2OWZzX2Rpcl9yZWFkZGlyKHN0cnVjdCBmaWxlICpmaWxwLCB2b2lkICpkaXJlbnQsIGZpbGxkaXJfdCBmaWxsZGlyKQogewogCWludCBvdmVyOworCXN0cnVjdCBwOV93c3RhdCBzdDsKKwlpbnQgZXJyOwogCXN0cnVjdCBwOV9maWQgKmZpZDsKLQlzdHJ1Y3Qgdjlmc19zZXNzaW9uX2luZm8gKnY5c2VzOwotCXN0cnVjdCBpbm9kZSAqaW5vZGU7Ci0Jc3RydWN0IHA5X3N0YXQgKnN0OworCWludCBidWZsZW47CisJY2hhciAqc3RhdGJ1ZjsKKwlpbnQgbiwgaSA9IDA7CiAKIAlQOV9EUFJJTlRLKFA5X0RFQlVHX1ZGUywgIm5hbWUgJXNcbiIsIGZpbHAtPmZfcGF0aC5kZW50cnktPmRfbmFtZS5uYW1lKTsKLQlpbm9kZSA9IGZpbHAtPmZfcGF0aC5kZW50cnktPmRfaW5vZGU7Ci0JdjlzZXMgPSB2OWZzX2lub2RlMnY5c2VzKGlub2RlKTsKIAlmaWQgPSBmaWxwLT5wcml2YXRlX2RhdGE7Ci0Jd2hpbGUgKChzdCA9IHA5X2NsaWVudF9kaXJyZWFkKGZpZCwgZmlscC0+Zl9wb3MpKSAhPSBOVUxMKSB7Ci0JCWlmIChJU19FUlIoc3QpKQotCQkJcmV0dXJuIFBUUl9FUlIoc3QpOwogCi0JCW92ZXIgPSBmaWxsZGlyKGRpcmVudCwgc3QtPm5hbWUuc3RyLCBzdC0+bmFtZS5sZW4sIGZpbHAtPmZfcG9zLAotCQkJdjlmc19xaWQyaW5vKCZzdC0+cWlkKSwgZHRfdHlwZShzdCkpOworCWJ1ZmxlbiA9IGZpZC0+Y2xudC0+bXNpemUgLSBQOV9JT0hEUlNaOworCXN0YXRidWYgPSBrbWFsbG9jKGJ1ZmxlbiwgR0ZQX0tFUk5FTCk7CisJaWYgKCFzdGF0YnVmKQorCQlyZXR1cm4gLUVOT01FTTsKIAotCQlpZiAob3ZlcikKKwl3aGlsZSAoMSkgeworCQllcnIgPSB2OWZzX2ZpbGVfcmVhZG4oZmlscCwgc3RhdGJ1ZiwgTlVMTCwgYnVmbGVuLAorCQkJCQkJCQlmaWQtPnJkaXJfZnBvcyk7CisJCWlmIChlcnIgPD0gMCkKIAkJCWJyZWFrOwogCi0JCWZpbHAtPmZfcG9zICs9IHN0LT5zaXplOwotCQlrZnJlZShzdCk7Ci0JCXN0ID0gTlVMTDsKKwkJbiA9IGVycjsKKwkJd2hpbGUgKGkgPCBuKSB7CisJCQllcnIgPSBwOXN0YXRfcmVhZChzdGF0YnVmICsgaSwgYnVmbGVuLWksICZzdCwKKwkJCQkJCQlmaWQtPmNsbnQtPmRvdHUpOworCQkJaWYgKGVycikgeworCQkJCVA5X0RQUklOVEsoUDlfREVCVUdfVkZTLCAicmV0dXJuZWQgJWRcbiIsIGVycik7CisJCQkJZXJyID0gLUVJTzsKKwkJCQlwOXN0YXRfZnJlZSgmc3QpOworCQkJCWdvdG8gZnJlZV9hbmRfZXhpdDsKKwkJCX0KKworCQkJaSArPSBzdC5zaXplKzI7CisJCQlmaWQtPnJkaXJfZnBvcyArPSBzdC5zaXplKzI7CisKKwkJCW92ZXIgPSBmaWxsZGlyKGRpcmVudCwgc3QubmFtZSwgc3RybGVuKHN0Lm5hbWUpLAorCQkJICAgIGZpbHAtPmZfcG9zLCB2OWZzX3FpZDJpbm8oJnN0LnFpZCksIGR0X3R5cGUoJnN0KSk7CisKKwkJCWZpbHAtPmZfcG9zICs9IHN0LnNpemUrMjsKKworCQkJcDlzdGF0X2ZyZWUoJnN0KTsKKworCQkJaWYgKG92ZXIpIHsKKwkJCQllcnIgPSAwOworCQkJCWdvdG8gZnJlZV9hbmRfZXhpdDsKKwkJCX0KKwkJfQogCX0KIAotCWtmcmVlKHN0KTsKLQlyZXR1cm4gMDsKK2ZyZWVfYW5kX2V4aXQ6CisJa2ZyZWUoc3RhdGJ1Zik7CisJcmV0dXJuIGVycjsKIH0KIAogCmRpZmYgLS1naXQgYS9mcy85cC92ZnNfZmlsZS5jIGIvZnMvOXAvdmZzX2ZpbGUuYwppbmRleCA1Mjk0NGQyLi4wNDFjNTI2IDEwMDY0NAotLS0gYS9mcy85cC92ZnNfZmlsZS5jCisrKyBiL2ZzLzlwL3Zmc19maWxlLmMKQEAgLTEyMCwyMyArMTIwLDcyIEBACiB9CiAKIC8qKgotICogdjlmc19maWxlX3JlYWQgLSByZWFkIGZyb20gYSBmaWxlCisgKiB2OWZzX2ZpbGVfcmVhZG4gLSByZWFkIGZyb20gYSBmaWxlCiAgKiBAZmlscDogZmlsZSBwb2ludGVyIHRvIHJlYWQKICAqIEBkYXRhOiBkYXRhIGJ1ZmZlciB0byByZWFkIGRhdGEgaW50bworICogQHVkYXRhOiB1c2VyIGRhdGEgYnVmZmVyIHRvIHJlYWQgZGF0YSBpbnRvCiAgKiBAY291bnQ6IHNpemUgb2YgYnVmZmVyCiAgKiBAb2Zmc2V0OiBvZmZzZXQgYXQgd2hpY2ggdG8gcmVhZCBkYXRhCiAgKgogICovCisKK3NzaXplX3QKK3Y5ZnNfZmlsZV9yZWFkbihzdHJ1Y3QgZmlsZSAqZmlscCwgY2hhciAqZGF0YSwgY2hhciBfX3VzZXIgKnVkYXRhLCB1MzIgY291bnQsCisJICAgICAgIHU2NCBvZmZzZXQpCit7CisJaW50IG4sIHRvdGFsOworCXN0cnVjdCBwOV9maWQgKmZpZCA9IGZpbHAtPnByaXZhdGVfZGF0YTsKKworCVA5X0RQUklOVEsoUDlfREVCVUdfVkZTLCAiZmlkICVkIG9mZnNldCAlbGx1IGNvdW50ICVkXG4iLCBmaWQtPmZpZCwKKwkJCQkJKGxvbmcgbG9uZyB1bnNpZ25lZCkgb2Zmc2V0LCBjb3VudCk7CisKKwluID0gMDsKKwl0b3RhbCA9IDA7CisJZG8geworCQluID0gcDlfY2xpZW50X3JlYWQoZmlkLCBkYXRhLCB1ZGF0YSwgb2Zmc2V0LCBjb3VudCk7CisJCWlmIChuIDw9IDApCisJCQlicmVhazsKKworCQlpZiAoZGF0YSkKKwkJCWRhdGEgKz0gbjsKKwkJaWYgKHVkYXRhKQorCQkJdWRhdGEgKz0gbjsKKworCQlvZmZzZXQgKz0gbjsKKwkJY291bnQgLT0gbjsKKwkJdG90YWwgKz0gbjsKKwl9IHdoaWxlIChjb3VudCA+IDAgJiYgbiA9PSAoZmlkLT5jbG50LT5tc2l6ZSAtIFA5X0lPSERSU1opKTsKKworCWlmIChuIDwgMCkKKwkJdG90YWwgPSBuOworCisJcmV0dXJuIHRvdGFsOworfQorCisvKioKKyAqIHY5ZnNfZmlsZV9yZWFkIC0gcmVhZCBmcm9tIGEgZmlsZQorICogQGZpbHA6IGZpbGUgcG9pbnRlciB0byByZWFkCisgKiBAdWRhdGE6IHVzZXIgZGF0YSBidWZmZXIgdG8gcmVhZCBkYXRhIGludG8KKyAqIEBjb3VudDogc2l6ZSBvZiBidWZmZXIKKyAqIEBvZmZzZXQ6IG9mZnNldCBhdCB3aGljaCB0byByZWFkIGRhdGEKKyAqCisgKi8KKwogc3RhdGljIHNzaXplX3QKLXY5ZnNfZmlsZV9yZWFkKHN0cnVjdCBmaWxlICpmaWxwLCBjaGFyIF9fdXNlciAqIGRhdGEsIHNpemVfdCBjb3VudCwKK3Y5ZnNfZmlsZV9yZWFkKHN0cnVjdCBmaWxlICpmaWxwLCBjaGFyIF9fdXNlciAqdWRhdGEsIHNpemVfdCBjb3VudCwKIAkgICAgICAgbG9mZl90ICogb2Zmc2V0KQogewogCWludCByZXQ7CiAJc3RydWN0IHA5X2ZpZCAqZmlkOwogCi0JUDlfRFBSSU5USyhQOV9ERUJVR19WRlMsICJcbiIpOworCVA5X0RQUklOVEsoUDlfREVCVUdfVkZTLCAiY291bnQgJWQgb2Zmc2V0ICVsbGRcbiIsIGNvdW50LCAqb2Zmc2V0KTsKIAlmaWQgPSBmaWxwLT5wcml2YXRlX2RhdGE7Ci0JcmV0ID0gcDlfY2xpZW50X3VyZWFkKGZpZCwgZGF0YSwgKm9mZnNldCwgY291bnQpOworCisJaWYgKGNvdW50ID4gKGZpZC0+Y2xudC0+bXNpemUgLSBQOV9JT0hEUlNaKSkKKwkJcmV0ID0gdjlmc19maWxlX3JlYWRuKGZpbHAsIE5VTEwsIHVkYXRhLCBjb3VudCwgKm9mZnNldCk7CisJZWxzZQorCQlyZXQgPSBwOV9jbGllbnRfcmVhZChmaWQsIE5VTEwsIHVkYXRhLCAqb2Zmc2V0LCBjb3VudCk7CisKIAlpZiAocmV0ID4gMCkKIAkJKm9mZnNldCArPSByZXQ7CiAKQEAgLTE1NiwxOSArMjA1LDM4IEBACiB2OWZzX2ZpbGVfd3JpdGUoc3RydWN0IGZpbGUgKmZpbHAsIGNvbnN0IGNoYXIgX191c2VyICogZGF0YSwKIAkJc2l6ZV90IGNvdW50LCBsb2ZmX3QgKiBvZmZzZXQpCiB7Ci0JaW50IHJldDsKKwlpbnQgbiwgcnNpemUsIHRvdGFsID0gMDsKIAlzdHJ1Y3QgcDlfZmlkICpmaWQ7CisJc3RydWN0IHA5X2NsaWVudCAqY2xudDsKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlscC0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZTsKKwlpbnQgb3JpZ2luID0gKm9mZnNldDsKIAogCVA5X0RQUklOVEsoUDlfREVCVUdfVkZTLCAiZGF0YSAlcCBjb3VudCAlZCBvZmZzZXQgJXhcbiIsIGRhdGEsCiAJCShpbnQpY291bnQsIChpbnQpKm9mZnNldCk7CiAKIAlmaWQgPSBmaWxwLT5wcml2YXRlX2RhdGE7Ci0JcmV0ID0gcDlfY2xpZW50X3V3cml0ZShmaWQsIGRhdGEsICpvZmZzZXQsIGNvdW50KTsKLQlpZiAocmV0ID4gMCkgewotCQlpbnZhbGlkYXRlX2lub2RlX3BhZ2VzMl9yYW5nZShpbm9kZS0+aV9tYXBwaW5nLCAqb2Zmc2V0LAotCQkJCQkJCQkqb2Zmc2V0K3JldCk7Ci0JCSpvZmZzZXQgKz0gcmV0OworCWNsbnQgPSBmaWQtPmNsbnQ7CisKKwlyc2l6ZSA9IGZpZC0+aW91bml0OworCWlmICghcnNpemUgfHwgcnNpemUgPiBjbG50LT5tc2l6ZS1QOV9JT0hEUlNaKQorCQlyc2l6ZSA9IGNsbnQtPm1zaXplIC0gUDlfSU9IRFJTWjsKKworCWRvIHsKKwkJaWYgKGNvdW50IDwgcnNpemUpCisJCQlyc2l6ZSA9IGNvdW50OworCisJCW4gPSBwOV9jbGllbnRfd3JpdGUoZmlkLCBOVUxMLCBkYXRhK3RvdGFsLCAqb2Zmc2V0K3RvdGFsLAorCQkJCQkJCQkJcnNpemUpOworCQlpZiAobiA8PSAwKQorCQkJYnJlYWs7CisJCWNvdW50IC09IG47CisJCXRvdGFsICs9IG47CisJfSB3aGlsZSAoY291bnQgPiAwKTsKKworCWlmICh0b3RhbCA+IDApIHsKKwkJaW52YWxpZGF0ZV9pbm9kZV9wYWdlczJfcmFuZ2UoaW5vZGUtPmlfbWFwcGluZywgb3JpZ2luLAorCQkJCQkJCQlvcmlnaW4rdG90YWwpOworCQkqb2Zmc2V0ICs9IHRvdGFsOwogCX0KIAogCWlmICgqb2Zmc2V0ID4gaW5vZGUtPmlfc2l6ZSkgewpAQCAtMTc2LDcgKzI0NCwxMCBAQAogCQlpbm9kZS0+aV9ibG9ja3MgPSAoaW5vZGUtPmlfc2l6ZSArIDUxMiAtIDEpID4+IDk7CiAJfQogCi0JcmV0dXJuIHJldDsKKwlpZiAobiA8IDApCisJCXJldHVybiBuOworCisJcmV0dXJuIHRvdGFsOwogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB2OWZzX2NhY2hlZF9maWxlX29wZXJhdGlvbnMgPSB7CmRpZmYgLS1naXQgYS9mcy85cC92ZnNfaW5vZGUuYyBiL2ZzLzlwL3Zmc19pbm9kZS5jCmluZGV4IGU4M2FhNWUuLjgzMTRkM2Y0IDEwMDY0NAotLS0gYS9mcy85cC92ZnNfaW5vZGUuYworKysgYi9mcy85cC92ZnNfaW5vZGUuYwpAQCAtMzM0LDcgKzMzNCw3IEBACiB7CiAJaW50IGVyciwgdW1vZGU7CiAJc3RydWN0IGlub2RlICpyZXQ7Ci0Jc3RydWN0IHA5X3N0YXQgKnN0OworCXN0cnVjdCBwOV93c3RhdCAqc3Q7CiAKIAlyZXQgPSBOVUxMOwogCXN0ID0gcDlfY2xpZW50X3N0YXQoZmlkKTsKQEAgLTQxNyw2ICs0MTcsOCBAQAogCXN0cnVjdCBwOV9maWQgKmRmaWQsICpvZmlkLCAqZmlkOwogCXN0cnVjdCBpbm9kZSAqaW5vZGU7CiAKKwlQOV9EUFJJTlRLKFA5X0RFQlVHX1ZGUywgIm5hbWUgJXNcbiIsIGRlbnRyeS0+ZF9uYW1lLm5hbWUpOworCiAJZXJyID0gMDsKIAlvZmlkID0gTlVMTDsKIAlmaWQgPSBOVUxMOwpAQCAtNDI0LDYgKzQyNiw3IEBACiAJZGZpZCA9IHY5ZnNfZmlkX2Nsb25lKGRlbnRyeS0+ZF9wYXJlbnQpOwogCWlmIChJU19FUlIoZGZpZCkpIHsKIAkJZXJyID0gUFRSX0VSUihkZmlkKTsKKwkJUDlfRFBSSU5USyhQOV9ERUJVR19WRlMsICJmaWQgY2xvbmUgZmFpbGVkICVkXG4iLCBlcnIpOwogCQlkZmlkID0gTlVMTDsKIAkJZ290byBlcnJvcjsKIAl9CkBAIC00MzIsMTggKzQzNSwyMiBAQAogCW9maWQgPSBwOV9jbGllbnRfd2FsayhkZmlkLCAwLCBOVUxMLCAxKTsKIAlpZiAoSVNfRVJSKG9maWQpKSB7CiAJCWVyciA9IFBUUl9FUlIob2ZpZCk7CisJCVA5X0RQUklOVEsoUDlfREVCVUdfVkZTLCAicDlfY2xpZW50X3dhbGsgZmFpbGVkICVkXG4iLCBlcnIpOwogCQlvZmlkID0gTlVMTDsKIAkJZ290byBlcnJvcjsKIAl9CiAKIAllcnIgPSBwOV9jbGllbnRfZmNyZWF0ZShvZmlkLCBuYW1lLCBwZXJtLCBtb2RlLCBleHRlbnNpb24pOwotCWlmIChlcnIgPCAwKQorCWlmIChlcnIgPCAwKSB7CisJCVA5X0RQUklOVEsoUDlfREVCVUdfVkZTLCAicDlfY2xpZW50X2ZjcmVhdGUgZmFpbGVkICVkXG4iLCBlcnIpOwogCQlnb3RvIGVycm9yOworCX0KIAogCS8qIG5vdyB3YWxrIGZyb20gdGhlIHBhcmVudCBzbyB3ZSBjYW4gZ2V0IHVub3BlbmVkIGZpZCAqLwogCWZpZCA9IHA5X2NsaWVudF93YWxrKGRmaWQsIDEsICZuYW1lLCAwKTsKIAlpZiAoSVNfRVJSKGZpZCkpIHsKIAkJZXJyID0gUFRSX0VSUihmaWQpOworCQlQOV9EUFJJTlRLKFA5X0RFQlVHX1ZGUywgInA5X2NsaWVudF93YWxrIGZhaWxlZCAlZFxuIiwgZXJyKTsKIAkJZmlkID0gTlVMTDsKIAkJZ290byBlcnJvcjsKIAl9IGVsc2UKQEAgLTQ1Myw2ICs0NjAsNyBAQAogCWlub2RlID0gdjlmc19pbm9kZV9mcm9tX2ZpZCh2OXNlcywgZmlkLCBkaXItPmlfc2IpOwogCWlmIChJU19FUlIoaW5vZGUpKSB7CiAJCWVyciA9IFBUUl9FUlIoaW5vZGUpOworCQlQOV9EUFJJTlRLKFA5X0RFQlVHX1ZGUywgImlub2RlIGNyZWF0aW9uIGZhaWxlZCAlZFxuIiwgZXJyKTsKIAkJZ290byBlcnJvcjsKIAl9CiAKQEAgLTczNCw3ICs3NDIsNyBAQAogCWludCBlcnI7CiAJc3RydWN0IHY5ZnNfc2Vzc2lvbl9pbmZvICp2OXNlczsKIAlzdHJ1Y3QgcDlfZmlkICpmaWQ7Ci0Jc3RydWN0IHA5X3N0YXQgKnN0OworCXN0cnVjdCBwOV93c3RhdCAqc3Q7CiAKIAlQOV9EUFJJTlRLKFA5X0RFQlVHX1ZGUywgImRlbnRyeTogJXBcbiIsIGRlbnRyeSk7CiAJZXJyID0gLUVQRVJNOwpAQCAtODE1LDEwICs4MjMsOSBAQAogICovCiAKIHZvaWQKLXY5ZnNfc3RhdDJpbm9kZShzdHJ1Y3QgcDlfc3RhdCAqc3RhdCwgc3RydWN0IGlub2RlICppbm9kZSwKK3Y5ZnNfc3RhdDJpbm9kZShzdHJ1Y3QgcDlfd3N0YXQgKnN0YXQsIHN0cnVjdCBpbm9kZSAqaW5vZGUsCiAJc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKIHsKLQlpbnQgbjsKIAljaGFyIGV4dFszMl07CiAJc3RydWN0IHY5ZnNfc2Vzc2lvbl9pbmZvICp2OXNlcyA9IHNiLT5zX2ZzX2luZm87CiAKQEAgLTg0MiwxMSArODQ5LDcgQEAKIAkJaW50IG1ham9yID0gLTE7CiAJCWludCBtaW5vciA9IC0xOwogCi0JCW4gPSBzdGF0LT5leHRlbnNpb24ubGVuOwotCQlpZiAobiA+IHNpemVvZihleHQpLTEpCi0JCQluID0gc2l6ZW9mKGV4dCktMTsKLQkJbWVtbW92ZShleHQsIHN0YXQtPmV4dGVuc2lvbi5zdHIsIG4pOwotCQlleHRbbl0gPSAwOworCQlzdHJuY3B5KGV4dCwgc3RhdC0+ZXh0ZW5zaW9uLCBzaXplb2YoZXh0KSk7CiAJCXNzY2FuZihleHQsICIlYyAldSAldSIsICZ0eXBlLCAmbWFqb3IsICZtaW5vcik7CiAJCXN3aXRjaCAodHlwZSkgewogCQljYXNlICdjJzoKQEAgLTg1NywxMCArODYwLDExIEBACiAJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCVA5X0RQUklOVEsoUDlfREVCVUdfRVJST1IsCi0JCQkJIlVua25vd24gc3BlY2lhbCB0eXBlICVjICglLipzKVxuIiwgdHlwZSwKLQkJCQlzdGF0LT5leHRlbnNpb24ubGVuLCBzdGF0LT5leHRlbnNpb24uc3RyKTsKKwkJCQkiVW5rbm93biBzcGVjaWFsIHR5cGUgJWMgJXNcbiIsIHR5cGUsCisJCQkJc3RhdC0+ZXh0ZW5zaW9uKTsKIAkJfTsKIAkJaW5vZGUtPmlfcmRldiA9IE1LREVWKG1ham9yLCBtaW5vcik7CisJCWluaXRfc3BlY2lhbF9pbm9kZShpbm9kZSwgaW5vZGUtPmlfbW9kZSwgaW5vZGUtPmlfcmRldik7CiAJfSBlbHNlCiAJCWlub2RlLT5pX3JkZXYgPSAwOwogCkBAIC05MDQsNyArOTA4LDcgQEAKIAogCXN0cnVjdCB2OWZzX3Nlc3Npb25faW5mbyAqdjlzZXM7CiAJc3RydWN0IHA5X2ZpZCAqZmlkOwotCXN0cnVjdCBwOV9zdGF0ICpzdDsKKwlzdHJ1Y3QgcDlfd3N0YXQgKnN0OwogCiAJUDlfRFBSSU5USyhQOV9ERUJVR19WRlMsICIgJXNcbiIsIGRlbnRyeS0+ZF9uYW1lLm5hbWUpOwogCXJldHZhbCA9IC1FUEVSTTsKQEAgLTkyNiwxNSArOTMwLDEwIEBACiAJfQogCiAJLyogY29weSBleHRlbnNpb24gYnVmZmVyIGludG8gYnVmZmVyICovCi0JaWYgKHN0LT5leHRlbnNpb24ubGVuIDwgYnVmbGVuKQotCQlidWZsZW4gPSBzdC0+ZXh0ZW5zaW9uLmxlbiArIDE7Ci0KLQltZW1tb3ZlKGJ1ZmZlciwgc3QtPmV4dGVuc2lvbi5zdHIsIGJ1ZmxlbiAtIDEpOwotCWJ1ZmZlcltidWZsZW4tMV0gPSAwOworCXN0cm5jcHkoYnVmZmVyLCBzdC0+ZXh0ZW5zaW9uLCBidWZsZW4pOwogCiAJUDlfRFBSSU5USyhQOV9ERUJVR19WRlMsCi0JCSIlcyAtPiAlLipzICglcylcbiIsIGRlbnRyeS0+ZF9uYW1lLm5hbWUsIHN0LT5leHRlbnNpb24ubGVuLAotCQlzdC0+ZXh0ZW5zaW9uLnN0ciwgYnVmZmVyKTsKKwkJIiVzIC0+ICVzICglcylcbiIsIGRlbnRyeS0+ZF9uYW1lLm5hbWUsIHN0LT5leHRlbnNpb24sIGJ1ZmZlcik7CiAKIAlyZXR2YWwgPSBidWZsZW47CiAKZGlmZiAtLWdpdCBhL2ZzLzlwL3Zmc19zdXBlci5jIGIvZnMvOXAvdmZzX3N1cGVyLmMKaW5kZXggYmY1OWMzOS4uZDZjYjFhMCAxMDA2NDQKLS0tIGEvZnMvOXAvdmZzX3N1cGVyLmMKKysrIGIvZnMvOXAvdmZzX3N1cGVyLmMKQEAgLTExMSw3ICsxMTEsNyBAQAogCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBOVUxMOwogCXN0cnVjdCBkZW50cnkgKnJvb3QgPSBOVUxMOwogCXN0cnVjdCB2OWZzX3Nlc3Npb25faW5mbyAqdjlzZXMgPSBOVUxMOwotCXN0cnVjdCBwOV9zdGF0ICpzdCA9IE5VTEw7CisJc3RydWN0IHA5X3dzdGF0ICpzdCA9IE5VTEw7CiAJaW50IG1vZGUgPSBTX0lSV1hVR08gfCBTX0lTVlRYOwogCXVpZF90IHVpZCA9IGN1cnJlbnQtPmZzdWlkOwogCWdpZF90IGdpZCA9IGN1cnJlbnQtPmZzZ2lkOwpAQCAtMTYxLDEwICsxNjEsMTQgQEAKIAogCXNiLT5zX3Jvb3QgPSByb290OwogCXJvb3QtPmRfaW5vZGUtPmlfaW5vID0gdjlmc19xaWQyaW5vKCZzdC0+cWlkKTsKKwogCXY5ZnNfc3RhdDJpbm9kZShzdCwgcm9vdC0+ZF9pbm9kZSwgc2IpOworCiAJdjlmc19maWRfYWRkKHJvb3QsIGZpZCk7CisJcDlzdGF0X2ZyZWUoc3QpOwogCWtmcmVlKHN0KTsKIAorUDlfRFBSSU5USyhQOV9ERUJVR19WRlMsICIgcmV0dXJuIHNpbXBsZSBzZXQgbW91bnRcbiIpOwogCXJldHVybiBzaW1wbGVfc2V0X21udChtbnQsIHNiKTsKIAogcmVsZWFzZV9zYjoKZGlmZiAtLWdpdCBhL2ZzL0tjb25maWcgYi9mcy9LY29uZmlnCmluZGV4IGY1NGExNTcuLmU0NjI5N2YgMTAwNjQ0Ci0tLSBhL2ZzL0tjb25maWcKKysrIGIvZnMvS2NvbmZpZwpAQCAtNiw2MSArNiw5IEBACiAKIGlmIEJMT0NLCiAKLWNvbmZpZyBFWFQyX0ZTCi0JdHJpc3RhdGUgIlNlY29uZCBleHRlbmRlZCBmcyBzdXBwb3J0IgotCWhlbHAKLQkgIEV4dDIgaXMgYSBzdGFuZGFyZCBMaW51eCBmaWxlIHN5c3RlbSBmb3IgaGFyZCBkaXNrcy4KLQotCSAgVG8gY29tcGlsZSB0aGlzIGZpbGUgc3lzdGVtIHN1cHBvcnQgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQotCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGV4dDIuCi0KLQkgIElmIHVuc3VyZSwgc2F5IFkuCi0KLWNvbmZpZyBFWFQyX0ZTX1hBVFRSCi0JYm9vbCAiRXh0MiBleHRlbmRlZCBhdHRyaWJ1dGVzIgotCWRlcGVuZHMgb24gRVhUMl9GUwotCWhlbHAKLQkgIEV4dGVuZGVkIGF0dHJpYnV0ZXMgYXJlIG5hbWU6dmFsdWUgcGFpcnMgYXNzb2NpYXRlZCB3aXRoIGlub2RlcyBieQotCSAgdGhlIGtlcm5lbCBvciBieSB1c2VycyAoc2VlIHRoZSBhdHRyKDUpIG1hbnVhbCBwYWdlLCBvciB2aXNpdAotCSAgPGh0dHA6Ly9hY2wuYmVzdGJpdHMuYXQvPiBmb3IgZGV0YWlscykuCi0KLQkgIElmIHVuc3VyZSwgc2F5IE4uCi0KLWNvbmZpZyBFWFQyX0ZTX1BPU0lYX0FDTAotCWJvb2wgIkV4dDIgUE9TSVggQWNjZXNzIENvbnRyb2wgTGlzdHMiCi0JZGVwZW5kcyBvbiBFWFQyX0ZTX1hBVFRSCi0Jc2VsZWN0IEZTX1BPU0lYX0FDTAotCWhlbHAKLQkgIFBvc2l4IEFjY2VzcyBDb250cm9sIExpc3RzIChBQ0xzKSBzdXBwb3J0IHBlcm1pc3Npb25zIGZvciB1c2VycyBhbmQKLQkgIGdyb3VwcyBiZXlvbmQgdGhlIG93bmVyL2dyb3VwL3dvcmxkIHNjaGVtZS4KLQotCSAgVG8gbGVhcm4gbW9yZSBhYm91dCBBY2Nlc3MgQ29udHJvbCBMaXN0cywgdmlzaXQgdGhlIFBvc2l4IEFDTHMgZm9yCi0JICBMaW51eCB3ZWJzaXRlIDxodHRwOi8vYWNsLmJlc3RiaXRzLmF0Lz4uCi0KLQkgIElmIHlvdSBkb24ndCBrbm93IHdoYXQgQWNjZXNzIENvbnRyb2wgTGlzdHMgYXJlLCBzYXkgTgotCi1jb25maWcgRVhUMl9GU19TRUNVUklUWQotCWJvb2wgIkV4dDIgU2VjdXJpdHkgTGFiZWxzIgotCWRlcGVuZHMgb24gRVhUMl9GU19YQVRUUgotCWhlbHAKLQkgIFNlY3VyaXR5IGxhYmVscyBzdXBwb3J0IGFsdGVybmF0aXZlIGFjY2VzcyBjb250cm9sIG1vZGVscwotCSAgaW1wbGVtZW50ZWQgYnkgc2VjdXJpdHkgbW9kdWxlcyBsaWtlIFNFTGludXguICBUaGlzIG9wdGlvbgotCSAgZW5hYmxlcyBhbiBleHRlbmRlZCBhdHRyaWJ1dGUgaGFuZGxlciBmb3IgZmlsZSBzZWN1cml0eQotCSAgbGFiZWxzIGluIHRoZSBleHQyIGZpbGVzeXN0ZW0uCi0KLQkgIElmIHlvdSBhcmUgbm90IHVzaW5nIGEgc2VjdXJpdHkgbW9kdWxlIHRoYXQgcmVxdWlyZXMgdXNpbmcKLQkgIGV4dGVuZGVkIGF0dHJpYnV0ZXMgZm9yIGZpbGUgc2VjdXJpdHkgbGFiZWxzLCBzYXkgTi4KLQotY29uZmlnIEVYVDJfRlNfWElQCi0JYm9vbCAiRXh0MiBleGVjdXRlIGluIHBsYWNlIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBFWFQyX0ZTICYmIE1NVQotCWhlbHAKLQkgIEV4ZWN1dGUgaW4gcGxhY2UgY2FuIGJlIHVzZWQgb24gbWVtb3J5LWJhY2tlZCBibG9jayBkZXZpY2VzLiBJZiB5b3UKLQkgIGVuYWJsZSB0aGlzIG9wdGlvbiwgeW91IGNhbiBzZWxlY3QgdG8gbW91bnQgYmxvY2sgZGV2aWNlcyB3aGljaCBhcmUKLQkgIGNhcGFibGUgb2YgdGhpcyBmZWF0dXJlIHdpdGhvdXQgdXNpbmcgdGhlIHBhZ2UgY2FjaGUuCi0KLQkgIElmIHlvdSBkbyBub3QgdXNlIGEgYmxvY2sgZGV2aWNlIHRoYXQgaXMgY2FwYWJsZSBvZiB1c2luZyB0aGlzLAotCSAgb3IgaWYgdW5zdXJlLCBzYXkgTi4KK3NvdXJjZSAiZnMvZXh0Mi9LY29uZmlnIgorc291cmNlICJmcy9leHQzL0tjb25maWciCitzb3VyY2UgImZzL2V4dDQvS2NvbmZpZyIKIAogY29uZmlnIEZTX1hJUAogIyBleGVjdXRlIGluIHBsYWNlCkBAIC02OCwyMTggKzE2LDggQEAKIAlkZXBlbmRzIG9uIEVYVDJfRlNfWElQCiAJZGVmYXVsdCB5CiAKLWNvbmZpZyBFWFQzX0ZTCi0JdHJpc3RhdGUgIkV4dDMgam91cm5hbGxpbmcgZmlsZSBzeXN0ZW0gc3VwcG9ydCIKLQlzZWxlY3QgSkJECi0JaGVscAotCSAgVGhpcyBpcyB0aGUgam91cm5hbGxpbmcgdmVyc2lvbiBvZiB0aGUgU2Vjb25kIGV4dGVuZGVkIGZpbGUgc3lzdGVtCi0JICAob2Z0ZW4gY2FsbGVkIGV4dDMpLCB0aGUgZGUgZmFjdG8gc3RhbmRhcmQgTGludXggZmlsZSBzeXN0ZW0KLQkgIChtZXRob2QgdG8gb3JnYW5pemUgZmlsZXMgb24gYSBzdG9yYWdlIGRldmljZSkgZm9yIGhhcmQgZGlza3MuCi0KLQkgIFRoZSBqb3VybmFsbGluZyBjb2RlIGluY2x1ZGVkIGluIHRoaXMgZHJpdmVyIG1lYW5zIHlvdSBkbyBub3QgaGF2ZQotCSAgdG8gcnVuIGUyZnNjayAoZmlsZSBzeXN0ZW0gY2hlY2tlcikgb24geW91ciBmaWxlIHN5c3RlbXMgYWZ0ZXIgYQotCSAgY3Jhc2guICBUaGUgam91cm5hbCBrZWVwcyB0cmFjayBvZiBhbnkgY2hhbmdlcyB0aGF0IHdlcmUgYmVpbmcgbWFkZQotCSAgYXQgdGhlIHRpbWUgdGhlIHN5c3RlbSBjcmFzaGVkLCBhbmQgY2FuIGVuc3VyZSB0aGF0IHlvdXIgZmlsZSBzeXN0ZW0KLQkgIGlzIGNvbnNpc3RlbnQgd2l0aG91dCB0aGUgbmVlZCBmb3IgYSBsZW5ndGh5IGNoZWNrLgotCi0JICBPdGhlciB0aGFuIGFkZGluZyB0aGUgam91cm5hbCB0byB0aGUgZmlsZSBzeXN0ZW0sIHRoZSBvbi1kaXNrIGZvcm1hdAotCSAgb2YgZXh0MyBpcyBpZGVudGljYWwgdG8gZXh0Mi4gIEl0IGlzIHBvc3NpYmxlIHRvIGZyZWVseSBzd2l0Y2gKLQkgIGJldHdlZW4gdXNpbmcgdGhlIGV4dDMgZHJpdmVyIGFuZCB0aGUgZXh0MiBkcml2ZXIsIGFzIGxvbmcgYXMgdGhlCi0JICBmaWxlIHN5c3RlbSBoYXMgYmVlbiBjbGVhbmx5IHVubW91bnRlZCwgb3IgZTJmc2NrIGlzIHJ1biBvbiB0aGUgZmlsZQotCSAgc3lzdGVtLgotCi0JICBUbyBhZGQgYSBqb3VybmFsIG9uIGFuIGV4aXN0aW5nIGV4dDIgZmlsZSBzeXN0ZW0gb3IgY2hhbmdlIHRoZQotCSAgYmVoYXZpb3Igb2YgZXh0MyBmaWxlIHN5c3RlbXMsIHlvdSBjYW4gdXNlIHRoZSB0dW5lMmZzIHV0aWxpdHkgKCJtYW4KLQkgIHR1bmUyZnMiKS4gIFRvIG1vZGlmeSBhdHRyaWJ1dGVzIG9mIGZpbGVzIGFuZCBkaXJlY3RvcmllcyBvbiBleHQzCi0JICBmaWxlIHN5c3RlbXMsIHVzZSBjaGF0dHIgKCJtYW4gY2hhdHRyIikuICBZb3UgbmVlZCB0byBiZSB1c2luZwotCSAgZTJmc3Byb2dzIHZlcnNpb24gMS4yMCBvciBsYXRlciBpbiBvcmRlciB0byBjcmVhdGUgZXh0MyBqb3VybmFscwotCSAgKGF2YWlsYWJsZSBhdCA8aHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0cy9lMmZzcHJvZ3MvPikuCi0KLQkgIFRvIGNvbXBpbGUgdGhpcyBmaWxlIHN5c3RlbSBzdXBwb3J0IGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKLQkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBleHQzLgotCi1jb25maWcgRVhUM19GU19YQVRUUgotCWJvb2wgIkV4dDMgZXh0ZW5kZWQgYXR0cmlidXRlcyIKLQlkZXBlbmRzIG9uIEVYVDNfRlMKLQlkZWZhdWx0IHkKLQloZWxwCi0JICBFeHRlbmRlZCBhdHRyaWJ1dGVzIGFyZSBuYW1lOnZhbHVlIHBhaXJzIGFzc29jaWF0ZWQgd2l0aCBpbm9kZXMgYnkKLQkgIHRoZSBrZXJuZWwgb3IgYnkgdXNlcnMgKHNlZSB0aGUgYXR0cig1KSBtYW51YWwgcGFnZSwgb3IgdmlzaXQKLQkgIDxodHRwOi8vYWNsLmJlc3RiaXRzLmF0Lz4gZm9yIGRldGFpbHMpLgotCi0JICBJZiB1bnN1cmUsIHNheSBOLgotCi0JICBZb3UgbmVlZCB0aGlzIGZvciBQT1NJWCBBQ0wgc3VwcG9ydCBvbiBleHQzLgotCi1jb25maWcgRVhUM19GU19QT1NJWF9BQ0wKLQlib29sICJFeHQzIFBPU0lYIEFjY2VzcyBDb250cm9sIExpc3RzIgotCWRlcGVuZHMgb24gRVhUM19GU19YQVRUUgotCXNlbGVjdCBGU19QT1NJWF9BQ0wKLQloZWxwCi0JICBQb3NpeCBBY2Nlc3MgQ29udHJvbCBMaXN0cyAoQUNMcykgc3VwcG9ydCBwZXJtaXNzaW9ucyBmb3IgdXNlcnMgYW5kCi0JICBncm91cHMgYmV5b25kIHRoZSBvd25lci9ncm91cC93b3JsZCBzY2hlbWUuCi0KLQkgIFRvIGxlYXJuIG1vcmUgYWJvdXQgQWNjZXNzIENvbnRyb2wgTGlzdHMsIHZpc2l0IHRoZSBQb3NpeCBBQ0xzIGZvcgotCSAgTGludXggd2Vic2l0ZSA8aHR0cDovL2FjbC5iZXN0Yml0cy5hdC8+LgotCi0JICBJZiB5b3UgZG9uJ3Qga25vdyB3aGF0IEFjY2VzcyBDb250cm9sIExpc3RzIGFyZSwgc2F5IE4KLQotY29uZmlnIEVYVDNfRlNfU0VDVVJJVFkKLQlib29sICJFeHQzIFNlY3VyaXR5IExhYmVscyIKLQlkZXBlbmRzIG9uIEVYVDNfRlNfWEFUVFIKLQloZWxwCi0JICBTZWN1cml0eSBsYWJlbHMgc3VwcG9ydCBhbHRlcm5hdGl2ZSBhY2Nlc3MgY29udHJvbCBtb2RlbHMKLQkgIGltcGxlbWVudGVkIGJ5IHNlY3VyaXR5IG1vZHVsZXMgbGlrZSBTRUxpbnV4LiAgVGhpcyBvcHRpb24KLQkgIGVuYWJsZXMgYW4gZXh0ZW5kZWQgYXR0cmlidXRlIGhhbmRsZXIgZm9yIGZpbGUgc2VjdXJpdHkKLQkgIGxhYmVscyBpbiB0aGUgZXh0MyBmaWxlc3lzdGVtLgotCi0JICBJZiB5b3UgYXJlIG5vdCB1c2luZyBhIHNlY3VyaXR5IG1vZHVsZSB0aGF0IHJlcXVpcmVzIHVzaW5nCi0JICBleHRlbmRlZCBhdHRyaWJ1dGVzIGZvciBmaWxlIHNlY3VyaXR5IGxhYmVscywgc2F5IE4uCi0KLWNvbmZpZyBFWFQ0X0ZTCi0JdHJpc3RhdGUgIlRoZSBFeHRlbmRlZCA0IChleHQ0KSBmaWxlc3lzdGVtIgotCXNlbGVjdCBKQkQyCi0Jc2VsZWN0IENSQzE2Ci0JaGVscAotCSAgVGhpcyBpcyB0aGUgbmV4dCBnZW5lcmF0aW9uIG9mIHRoZSBleHQzIGZpbGVzeXN0ZW0uCi0KLQkgIFVubGlrZSB0aGUgY2hhbmdlIGZyb20gZXh0MiBmaWxlc3lzdGVtIHRvIGV4dDMgZmlsZXN5c3RlbSwKLQkgIHRoZSBvbi1kaXNrIGZvcm1hdCBvZiBleHQ0IGlzIG5vdCBmb3J3YXJkcyBjb21wYXRpYmxlIHdpdGgKLQkgIGV4dDM7IGl0IGlzIGJhc2VkIG9uIGV4dGVudCBtYXBzIGFuZCBpdCBzdXBwb3J0cyA0OC1iaXQKLQkgIHBoeXNpY2FsIGJsb2NrIG51bWJlcnMuICBUaGUgZXh0NCBmaWxlc3lzdGVtIGFsc28gc3VwcG9ydHMgZGVsYXllZAotCSAgYWxsb2NhdGlvbiwgcGVyc2lzdGVudCBwcmVhbGxvY2F0aW9uLCBoaWdoIHJlc29sdXRpb24gdGltZSBzdGFtcHMsCi0JICBhbmQgYSBudW1iZXIgb2Ygb3RoZXIgZmVhdHVyZXMgdG8gaW1wcm92ZSBwZXJmb3JtYW5jZSBhbmQgc3BlZWQKLQkgIHVwIGZzY2sgdGltZS4gIEZvciBtb3JlIGluZm9ybWF0aW9uLCBwbGVhc2Ugc2VlIHRoZSB3ZWIgcGFnZXMgYXQKLQkgIGh0dHA6Ly9leHQ0Lndpa2kua2VybmVsLm9yZy4KLQotCSAgVGhlIGV4dDQgZmlsZXN5c3RlbSB3aWxsIHN1cHBvcnQgbW91bnRpbmcgYW4gZXh0MwotCSAgZmlsZXN5c3RlbTsgd2hpbGUgdGhlcmUgd2lsbCBiZSBzb21lIHBlcmZvcm1hbmNlIGdhaW5zIGZyb20KLQkgIHRoZSBkZWxheWVkIGFsbG9jYXRpb24gYW5kIGlub2RlIHRhYmxlIHJlYWRhaGVhZCwgdGhlIGJlc3QKLQkgIHBlcmZvcm1hbmNlIGdhaW5zIHdpbGwgcmVxdWlyZSBlbmFibGluZyBleHQ0IGZlYXR1cmVzIGluIHRoZQotCSAgZmlsZXN5c3RlbSwgb3IgZm9ybWF0aW5nIGEgbmV3IGZpbGVzeXN0ZW0gYXMgYW4gZXh0NAotCSAgZmlsZXN5c3RlbSBpbml0aWFsbHkuCi0KLQkgIFRvIGNvbXBpbGUgdGhpcyBmaWxlIHN5c3RlbSBzdXBwb3J0IGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiBUaGUKLQkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBleHQ0ZGV2LgotCi0JICBJZiB1bnN1cmUsIHNheSBOLgotCi1jb25maWcgRVhUNERFVl9DT01QQVQKLQlib29sICJFbmFibGUgZXh0NGRldiBjb21wYXRpYmlsaXR5IgotCWRlcGVuZHMgb24gRVhUNF9GUwotCWhlbHAKLQkgIFN0YXJ0aW5nIHdpdGggMi42LjI4LCB0aGUgbmFtZSBvZiB0aGUgZXh0NCBmaWxlc3lzdGVtIHdhcwotCSAgcmVuYW1lZCBmcm9tIGV4dDRkZXYgdG8gZXh0NC4gIFVuZm9ydHVuYXRlbHkgdGhlcmUgYXJlIHNvbWUKLQkgIGxlZ2FjeSB1c2Vyc3BhY2UgcHJvZ3JhbXMgKHN1Y2ggYXMga2xpYmMncyBmc3R5cGUpIGhhdmUKLQkgICJleHQ0ZGV2IiBoYXJkY29kZWQuCi0KLQkgIFRvIGVuYWJsZSBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSBzbyB0aGF0IHN5c3RlbXMgdGhhdCBhcmUKLQkgIHN0aWxsIGV4cGVjdGluZyB0byBtb3VudCBleHQ0IGZpbGVzeXN0ZW1zIHVzaW5nIGV4dDRkZXYsCi0JICBjaG9zZSBZIGhlcmUuICAgVGhpcyBmZWF0dXJlIHdpbGwgZ28gYXdheSBieSAyLjYuMzEsIHNvCi0JICBwbGVhc2UgYXJyYW5nZSB0byBnZXQgeW91ciB1c2Vyc3BhY2UgcHJvZ3JhbXMgZml4ZWQhCi0KLWNvbmZpZyBFWFQ0X0ZTX1hBVFRSCi0JYm9vbCAiRXh0NCBleHRlbmRlZCBhdHRyaWJ1dGVzIgotCWRlcGVuZHMgb24gRVhUNF9GUwotCWRlZmF1bHQgeQotCWhlbHAKLQkgIEV4dGVuZGVkIGF0dHJpYnV0ZXMgYXJlIG5hbWU6dmFsdWUgcGFpcnMgYXNzb2NpYXRlZCB3aXRoIGlub2RlcyBieQotCSAgdGhlIGtlcm5lbCBvciBieSB1c2VycyAoc2VlIHRoZSBhdHRyKDUpIG1hbnVhbCBwYWdlLCBvciB2aXNpdAotCSAgPGh0dHA6Ly9hY2wuYmVzdGJpdHMuYXQvPiBmb3IgZGV0YWlscykuCi0KLQkgIElmIHVuc3VyZSwgc2F5IE4uCi0KLQkgIFlvdSBuZWVkIHRoaXMgZm9yIFBPU0lYIEFDTCBzdXBwb3J0IG9uIGV4dDQuCi0KLWNvbmZpZyBFWFQ0X0ZTX1BPU0lYX0FDTAotCWJvb2wgIkV4dDQgUE9TSVggQWNjZXNzIENvbnRyb2wgTGlzdHMiCi0JZGVwZW5kcyBvbiBFWFQ0X0ZTX1hBVFRSCi0Jc2VsZWN0IEZTX1BPU0lYX0FDTAotCWhlbHAKLQkgIFBPU0lYIEFjY2VzcyBDb250cm9sIExpc3RzIChBQ0xzKSBzdXBwb3J0IHBlcm1pc3Npb25zIGZvciB1c2VycyBhbmQKLQkgIGdyb3VwcyBiZXlvbmQgdGhlIG93bmVyL2dyb3VwL3dvcmxkIHNjaGVtZS4KLQotCSAgVG8gbGVhcm4gbW9yZSBhYm91dCBBY2Nlc3MgQ29udHJvbCBMaXN0cywgdmlzaXQgdGhlIFBPU0lYIEFDTHMgZm9yCi0JICBMaW51eCB3ZWJzaXRlIDxodHRwOi8vYWNsLmJlc3RiaXRzLmF0Lz4uCi0KLQkgIElmIHlvdSBkb24ndCBrbm93IHdoYXQgQWNjZXNzIENvbnRyb2wgTGlzdHMgYXJlLCBzYXkgTgotCi1jb25maWcgRVhUNF9GU19TRUNVUklUWQotCWJvb2wgIkV4dDQgU2VjdXJpdHkgTGFiZWxzIgotCWRlcGVuZHMgb24gRVhUNF9GU19YQVRUUgotCWhlbHAKLQkgIFNlY3VyaXR5IGxhYmVscyBzdXBwb3J0IGFsdGVybmF0aXZlIGFjY2VzcyBjb250cm9sIG1vZGVscwotCSAgaW1wbGVtZW50ZWQgYnkgc2VjdXJpdHkgbW9kdWxlcyBsaWtlIFNFTGludXguICBUaGlzIG9wdGlvbgotCSAgZW5hYmxlcyBhbiBleHRlbmRlZCBhdHRyaWJ1dGUgaGFuZGxlciBmb3IgZmlsZSBzZWN1cml0eQotCSAgbGFiZWxzIGluIHRoZSBleHQ0IGZpbGVzeXN0ZW0uCi0KLQkgIElmIHlvdSBhcmUgbm90IHVzaW5nIGEgc2VjdXJpdHkgbW9kdWxlIHRoYXQgcmVxdWlyZXMgdXNpbmcKLQkgIGV4dGVuZGVkIGF0dHJpYnV0ZXMgZm9yIGZpbGUgc2VjdXJpdHkgbGFiZWxzLCBzYXkgTi4KLQotY29uZmlnIEpCRAotCXRyaXN0YXRlCi0JaGVscAotCSAgVGhpcyBpcyBhIGdlbmVyaWMgam91cm5hbGxpbmcgbGF5ZXIgZm9yIGJsb2NrIGRldmljZXMuICBJdCBpcwotCSAgY3VycmVudGx5IHVzZWQgYnkgdGhlIGV4dDMgYW5kIE9DRlMyIGZpbGUgc3lzdGVtcywgYnV0IGl0IGNvdWxkCi0JICBhbHNvIGJlIHVzZWQgdG8gYWRkIGpvdXJuYWwgc3VwcG9ydCB0byBvdGhlciBmaWxlIHN5c3RlbXMgb3IgYmxvY2sKLQkgIGRldmljZXMgc3VjaCBhcyBSQUlEIG9yIExWTS4KLQotCSAgSWYgeW91IGFyZSB1c2luZyB0aGUgZXh0MyBvciBPQ0ZTMiBmaWxlIHN5c3RlbXMsIHlvdSBuZWVkIHRvCi0JICBzYXkgWSBoZXJlLiBJZiB5b3UgYXJlIG5vdCB1c2luZyBleHQzIE9DRlMyIHRoZW4geW91IHdpbGwgcHJvYmFibHkKLQkgIHdhbnQgdG8gc2F5IE4uCi0KLQkgIFRvIGNvbXBpbGUgdGhpcyBkZXZpY2UgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUgd2lsbCBiZQotCSAgY2FsbGVkIGpiZC4gIElmIHlvdSBhcmUgY29tcGlsaW5nIGV4dDMgb3IgT0NGUzIgaW50byB0aGUga2VybmVsLAotCSAgeW91IGNhbm5vdCBjb21waWxlIHRoaXMgY29kZSBhcyBhIG1vZHVsZS4KLQotY29uZmlnIEpCRF9ERUJVRwotCWJvb2wgIkpCRCAoZXh0MykgZGVidWdnaW5nIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBKQkQgJiYgREVCVUdfRlMKLQloZWxwCi0JICBJZiB5b3UgYXJlIHVzaW5nIHRoZSBleHQzIGpvdXJuYWxlZCBmaWxlIHN5c3RlbSAob3IgcG90ZW50aWFsbHkgYW55Ci0JICBvdGhlciBmaWxlIHN5c3RlbS9kZXZpY2UgdXNpbmcgSkJEKSwgdGhpcyBvcHRpb24gYWxsb3dzIHlvdSB0bwotCSAgZW5hYmxlIGRlYnVnZ2luZyBvdXRwdXQgd2hpbGUgdGhlIHN5c3RlbSBpcyBydW5uaW5nLCBpbiBvcmRlciB0bwotCSAgaGVscCB0cmFjayBkb3duIGFueSBwcm9ibGVtcyB5b3UgYXJlIGhhdmluZy4gIEJ5IGRlZmF1bHQgdGhlCi0JICBkZWJ1Z2dpbmcgb3V0cHV0IHdpbGwgYmUgdHVybmVkIG9mZi4KLQotCSAgSWYgeW91IHNlbGVjdCBZIGhlcmUsIHRoZW4geW91IHdpbGwgYmUgYWJsZSB0byB0dXJuIG9uIGRlYnVnZ2luZwotCSAgd2l0aCAiZWNobyBOID4gL3N5cy9rZXJuZWwvZGVidWcvamJkL2piZC1kZWJ1ZyIsIHdoZXJlIE4gaXMgYQotCSAgbnVtYmVyIGJldHdlZW4gMSBhbmQgNSwgdGhlIGhpZ2hlciB0aGUgbnVtYmVyLCB0aGUgbW9yZSBkZWJ1Z2dpbmcKLQkgIG91dHB1dCBpcyBnZW5lcmF0ZWQuICBUbyB0dXJuIGRlYnVnZ2luZyBvZmYgYWdhaW4sIGRvCi0JICAiZWNobyAwID4gL3N5cy9rZXJuZWwvZGVidWcvamJkL2piZC1kZWJ1ZyIuCi0KLWNvbmZpZyBKQkQyCi0JdHJpc3RhdGUKLQlzZWxlY3QgQ1JDMzIKLQloZWxwCi0JICBUaGlzIGlzIGEgZ2VuZXJpYyBqb3VybmFsaW5nIGxheWVyIGZvciBibG9jayBkZXZpY2VzIHRoYXQgc3VwcG9ydAotCSAgYm90aCAzMi1iaXQgYW5kIDY0LWJpdCBibG9jayBudW1iZXJzLiAgSXQgaXMgY3VycmVudGx5IHVzZWQgYnkKLQkgIHRoZSBleHQ0IGZpbGVzeXN0ZW0sIGJ1dCBpdCBjb3VsZCBhbHNvIGJlIHVzZWQgdG8gYWRkCi0JICBqb3VybmFsIHN1cHBvcnQgdG8gb3RoZXIgZmlsZSBzeXN0ZW1zIG9yIGJsb2NrIGRldmljZXMgc3VjaAotCSAgYXMgUkFJRCBvciBMVk0uCi0KLQkgIElmIHlvdSBhcmUgdXNpbmcgZXh0NCwgeW91IG5lZWQgdG8gc2F5IFkgaGVyZS4gSWYgeW91IGFyZSBub3QKLQkgIHVzaW5nIGV4dDQgdGhlbiB5b3Ugd2lsbCBwcm9iYWJseSB3YW50IHRvIHNheSBOLgotCi0JICBUbyBjb21waWxlIHRoaXMgZGV2aWNlIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiBUaGUgbW9kdWxlIHdpbGwgYmUKLQkgIGNhbGxlZCBqYmQyLiAgSWYgeW91IGFyZSBjb21waWxpbmcgZXh0NCBpbnRvIHRoZSBrZXJuZWwsCi0JICB5b3UgY2Fubm90IGNvbXBpbGUgdGhpcyBjb2RlIGFzIGEgbW9kdWxlLgotCi1jb25maWcgSkJEMl9ERUJVRwotCWJvb2wgIkpCRDIgKGV4dDQpIGRlYnVnZ2luZyBzdXBwb3J0IgotCWRlcGVuZHMgb24gSkJEMiAmJiBERUJVR19GUwotCWhlbHAKLQkgIElmIHlvdSBhcmUgdXNpbmcgdGhlIGV4dDQgam91cm5hbGVkIGZpbGUgc3lzdGVtIChvcgotCSAgcG90ZW50aWFsbHkgYW55IG90aGVyIGZpbGVzeXN0ZW0vZGV2aWNlIHVzaW5nIEpCRDIpLCB0aGlzIG9wdGlvbgotCSAgYWxsb3dzIHlvdSB0byBlbmFibGUgZGVidWdnaW5nIG91dHB1dCB3aGlsZSB0aGUgc3lzdGVtIGlzIHJ1bm5pbmcsCi0JICBpbiBvcmRlciB0byBoZWxwIHRyYWNrIGRvd24gYW55IHByb2JsZW1zIHlvdSBhcmUgaGF2aW5nLgotCSAgQnkgZGVmYXVsdCwgdGhlIGRlYnVnZ2luZyBvdXRwdXQgd2lsbCBiZSB0dXJuZWQgb2ZmLgotCi0JICBJZiB5b3Ugc2VsZWN0IFkgaGVyZSwgdGhlbiB5b3Ugd2lsbCBiZSBhYmxlIHRvIHR1cm4gb24gZGVidWdnaW5nCi0JICB3aXRoICJlY2hvIE4gPiAvc3lzL2tlcm5lbC9kZWJ1Zy9qYmQyL2piZDItZGVidWciLCB3aGVyZSBOIGlzIGEKLQkgIG51bWJlciBiZXR3ZWVuIDEgYW5kIDUuIFRoZSBoaWdoZXIgdGhlIG51bWJlciwgdGhlIG1vcmUgZGVidWdnaW5nCi0JICBvdXRwdXQgaXMgZ2VuZXJhdGVkLiAgVG8gdHVybiBkZWJ1Z2dpbmcgb2ZmIGFnYWluLCBkbwotCSAgImVjaG8gMCA+IC9zeXMva2VybmVsL2RlYnVnL2piZDIvamJkMi1kZWJ1ZyIuCitzb3VyY2UgImZzL2piZC9LY29uZmlnIgorc291cmNlICJmcy9qYmQyL0tjb25maWciCiAKIGNvbmZpZyBGU19NQkNBQ0hFCiAjIE1ldGEgYmxvY2sgY2FjaGUgZm9yIEV4dGVuZGVkIEF0dHJpYnV0ZXMgKGV4dDIvZXh0My9leHQ0KQpAQCAtNDMzLDYgKzE3MSwxNCBAQAogCWJvb2wKIAlkZWZhdWx0IG4KIAorY29uZmlnIEZJTEVfTE9DS0lORworCWJvb2wgIkVuYWJsZSBQT1NJWCBmaWxlIGxvY2tpbmcgQVBJIiBpZiBFTUJFRERFRAorCWRlZmF1bHQgeQorCWhlbHAKKwkgIFRoaXMgb3B0aW9uIGVuYWJsZXMgc3RhbmRhcmQgZmlsZSBsb2NraW5nIHN1cHBvcnQsIHJlcXVpcmVkCisgICAgICAgICAgZm9yIGZpbGVzeXN0ZW1zIGxpa2UgTkZTIGFuZCBmb3IgdGhlIGZsb2NrKCkgc3lzdGVtCisgICAgICAgICAgY2FsbC4gRGlzYWJsaW5nIHRoaXMgb3B0aW9uIHNhdmVzIGFib3V0IDExay4KKwogc291cmNlICJmcy94ZnMvS2NvbmZpZyIKIHNvdXJjZSAiZnMvZ2ZzMi9LY29uZmlnIgogCkBAIC00NDAsNyArMTg2LDcgQEAKIAl0cmlzdGF0ZSAiT0NGUzIgZmlsZSBzeXN0ZW0gc3VwcG9ydCIKIAlkZXBlbmRzIG9uIE5FVCAmJiBTWVNGUwogCXNlbGVjdCBDT05GSUdGU19GUwotCXNlbGVjdCBKQkQKKwlzZWxlY3QgSkJEMgogCXNlbGVjdCBDUkMzMgogCWhlbHAKIAkgIE9DRlMyIGlzIGEgZ2VuZXJhbCBwdXJwb3NlIGV4dGVudCBiYXNlZCBzaGFyZWQgZGlzayBjbHVzdGVyIGZpbGUKQEAgLTUxMSw2ICsyNTcsMTYgQEAKIAkgIHRoaXMgb3B0aW9uIGZvciBkZWJ1Z2dpbmcgb25seSBhcyBpdCBpcyBsaWtlbHkgdG8gZGVjcmVhc2UKIAkgIHBlcmZvcm1hbmNlIG9mIHRoZSBmaWxlc3lzdGVtLgogCitjb25maWcgT0NGUzJfQ09NUEFUX0pCRAorCWJvb2wgIlVzZSBKQkQgZm9yIGNvbXBhdGliaWxpdHkiCisJZGVwZW5kcyBvbiBPQ0ZTMl9GUworCWRlZmF1bHQgbgorCXNlbGVjdCBKQkQKKwloZWxwCisJICBUaGUgb2NmczIgZmlsZXN5c3RlbSBub3cgdXNlcyBKQkQyIGZvciBpdHMgam91cm5hbGxpbmcuICBKQkQyCisJICBpcyBiYWNrd2FyZHMgY29tcGF0aWJsZSB3aXRoIEpCRC4gIEl0IGlzIHNhZmUgdG8gc2F5IE4gaGVyZS4KKwkgIEhvd2V2ZXIsIGlmIHlvdSByZWFsbHkgd2FudCB0byB1c2UgdGhlIG9yaWdpbmFsIEpCRCwgc2F5IFkgaGVyZS4KKwogZW5kaWYgIyBCTE9DSwogCiBjb25maWcgRE5PVElGWQpAQCAtNjQ3LDcgKzQwMyw3IEBACiAJICBOIGhlcmUuCiAKIGNvbmZpZyBGVVNFX0ZTCi0JdHJpc3RhdGUgIkZpbGVzeXN0ZW0gaW4gVXNlcnNwYWNlIHN1cHBvcnQiCisJdHJpc3RhdGUgIkZVU0UgKEZpbGVzeXN0ZW0gaW4gVXNlcnNwYWNlKSBzdXBwb3J0IgogCWhlbHAKIAkgIFdpdGggRlVTRSBpdCBpcyBwb3NzaWJsZSB0byBpbXBsZW1lbnQgYSBmdWxseSBmdW5jdGlvbmFsIGZpbGVzeXN0ZW0KIAkgIGluIGEgdXNlcnNwYWNlIHByb2dyYW0uCkBAIC0xMTUwLDE5NSArOTA2LDcgQEAKIAkgIFRvIGNvbXBpbGUgdGhlIEVGUyBmaWxlIHN5c3RlbSBzdXBwb3J0IGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKIAkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBlZnMuCiAKLWNvbmZpZyBKRkZTMl9GUwotCXRyaXN0YXRlICJKb3VybmFsbGluZyBGbGFzaCBGaWxlIFN5c3RlbSB2MiAoSkZGUzIpIHN1cHBvcnQiCi0Jc2VsZWN0IENSQzMyCi0JZGVwZW5kcyBvbiBNVEQKLQloZWxwCi0JICBKRkZTMiBpcyB0aGUgc2Vjb25kIGdlbmVyYXRpb24gb2YgdGhlIEpvdXJuYWxsaW5nIEZsYXNoIEZpbGUgU3lzdGVtCi0JICBmb3IgdXNlIG9uIGRpc2tsZXNzIGVtYmVkZGVkIGRldmljZXMuIEl0IHByb3ZpZGVzIGltcHJvdmVkIHdlYXIKLQkgIGxldmVsbGluZywgY29tcHJlc3Npb24gYW5kIHN1cHBvcnQgZm9yIGhhcmQgbGlua3MuIFlvdSBjYW5ub3QgdXNlCi0JICB0aGlzIG9uIG5vcm1hbCBibG9jayBkZXZpY2VzLCBvbmx5IG9uICdNVEQnIGRldmljZXMuCi0KLQkgIEZ1cnRoZXIgaW5mb3JtYXRpb24gb24gdGhlIGRlc2lnbiBhbmQgaW1wbGVtZW50YXRpb24gb2YgSkZGUzIgaXMKLQkgIGF2YWlsYWJsZSBhdCA8aHR0cDovL3NvdXJjZXMucmVkaGF0LmNvbS9qZmZzMi8+LgotCi1jb25maWcgSkZGUzJfRlNfREVCVUcKLQlpbnQgIkpGRlMyIGRlYnVnZ2luZyB2ZXJib3NpdHkgKDAgPSBxdWlldCwgMiA9IG5vaXN5KSIKLQlkZXBlbmRzIG9uIEpGRlMyX0ZTCi0JZGVmYXVsdCAiMCIKLQloZWxwCi0JICBUaGlzIGNvbnRyb2xzIHRoZSBhbW91bnQgb2YgZGVidWdnaW5nIG1lc3NhZ2VzIHByb2R1Y2VkIGJ5IHRoZSBKRkZTMgotCSAgY29kZS4gU2V0IGl0IHRvIHplcm8gZm9yIHVzZSBpbiBwcm9kdWN0aW9uIHN5c3RlbXMuIEZvciBldmFsdWF0aW9uLAotCSAgdGVzdGluZyBhbmQgZGVidWdnaW5nLCBpdCdzIGFkdmlzYWJsZSB0byBzZXQgaXQgdG8gb25lLiBUaGlzIHdpbGwKLQkgIGVuYWJsZSBhIGZldyBhc3NlcnRpb25zIGFuZCB3aWxsIHByaW50IGRlYnVnZ2luZyBtZXNzYWdlcyBhdCB0aGUKLQkgIEtFUk5fREVCVUcgbG9nbGV2ZWwsIHdoZXJlIHRoZXkgd29uJ3Qgbm9ybWFsbHkgYmUgdmlzaWJsZS4gTGV2ZWwgMgotCSAgaXMgdW5saWtlbHkgdG8gYmUgdXNlZnVsIC0gaXQgZW5hYmxlcyBleHRyYSBkZWJ1Z2dpbmcgaW4gY2VydGFpbgotCSAgYXJlYXMgd2hpY2ggYXQgb25lIHBvaW50IG5lZWRlZCBkZWJ1Z2dpbmcsIGJ1dCB3aGVuIHRoZSBidWdzIHdlcmUKLQkgIGxvY2F0ZWQgYW5kIGZpeGVkLCB0aGUgZGV0YWlsZWQgbWVzc2FnZXMgd2VyZSByZWxlZ2F0ZWQgdG8gbGV2ZWwgMi4KLQotCSAgSWYgcmVwb3J0aW5nIGJ1Z3MsIHBsZWFzZSB0cnkgdG8gaGF2ZSBhdmFpbGFibGUgYSBmdWxsIGR1bXAgb2YgdGhlCi0JICBtZXNzYWdlcyBhdCBkZWJ1ZyBsZXZlbCAxIHdoaWxlIHRoZSBtaXNiZWhhdmlvdXIgd2FzIG9jY3VycmluZy4KLQotY29uZmlnIEpGRlMyX0ZTX1dSSVRFQlVGRkVSCi0JYm9vbCAiSkZGUzIgd3JpdGUtYnVmZmVyaW5nIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBKRkZTMl9GUwotCWRlZmF1bHQgeQotCWhlbHAKLQkgIFRoaXMgZW5hYmxlcyB0aGUgd3JpdGUtYnVmZmVyaW5nIHN1cHBvcnQgaW4gSkZGUzIuCi0KLQkgIFRoaXMgZnVuY3Rpb25hbGl0eSBpcyByZXF1aXJlZCB0byBzdXBwb3J0IEpGRlMyIG9uIHRoZSBmb2xsb3dpbmcKLQkgIHR5cGVzIG9mIGZsYXNoIGRldmljZXM6Ci0JICAgIC0gTkFORCBmbGFzaAotCSAgICAtIE5PUiBmbGFzaCB3aXRoIHRyYW5zcGFyZW50IEVDQwotCSAgICAtIERhdGFGbGFzaAotCi1jb25maWcgSkZGUzJfRlNfV0JVRl9WRVJJRlkKLQlib29sICJWZXJpZnkgSkZGUzIgd3JpdGUtYnVmZmVyIHJlYWRzIgotCWRlcGVuZHMgb24gSkZGUzJfRlNfV1JJVEVCVUZGRVIKLQlkZWZhdWx0IG4KLQloZWxwCi0JICBUaGlzIGNhdXNlcyBKRkZTMiB0byByZWFkIGJhY2sgZXZlcnkgcGFnZSB3cml0dGVuIHRocm91Z2ggdGhlCi0JICB3cml0ZS1idWZmZXIsIGFuZCBjaGVjayBmb3IgZXJyb3JzLgotCi1jb25maWcgSkZGUzJfU1VNTUFSWQotCWJvb2wgIkpGRlMyIHN1bW1hcnkgc3VwcG9ydCAoRVhQRVJJTUVOVEFMKSIKLQlkZXBlbmRzIG9uIEpGRlMyX0ZTICYmIEVYUEVSSU1FTlRBTAotCWRlZmF1bHQgbgotCWhlbHAKLQkgIFRoaXMgZmVhdHVyZSBtYWtlcyBpdCBwb3NzaWJsZSB0byB1c2Ugc3VtbWFyeSBpbmZvcm1hdGlvbgotCSAgZm9yIGZhc3RlciBmaWxlc3lzdGVtIG1vdW50LgotCi0JICBUaGUgc3VtbWFyeSBpbmZvcm1hdGlvbiBjYW4gYmUgaW5zZXJ0ZWQgaW50byBhIGZpbGVzeXN0ZW0gaW1hZ2UKLQkgIGJ5IHRoZSB1dGlsaXR5ICdzdW10b29sJy4KLQotCSAgSWYgdW5zdXJlLCBzYXkgJ04nLgotCi1jb25maWcgSkZGUzJfRlNfWEFUVFIKLQlib29sICJKRkZTMiBYQVRUUiBzdXBwb3J0IChFWFBFUklNRU5UQUwpIgotCWRlcGVuZHMgb24gSkZGUzJfRlMgJiYgRVhQRVJJTUVOVEFMCi0JZGVmYXVsdCBuCi0JaGVscAotCSAgRXh0ZW5kZWQgYXR0cmlidXRlcyBhcmUgbmFtZTp2YWx1ZSBwYWlycyBhc3NvY2lhdGVkIHdpdGggaW5vZGVzIGJ5Ci0JICB0aGUga2VybmVsIG9yIGJ5IHVzZXJzIChzZWUgdGhlIGF0dHIoNSkgbWFudWFsIHBhZ2UsIG9yIHZpc2l0Ci0JICA8aHR0cDovL2FjbC5iZXN0Yml0cy5hdC8+IGZvciBkZXRhaWxzKS4KLQotCSAgSWYgdW5zdXJlLCBzYXkgTi4KLQotY29uZmlnIEpGRlMyX0ZTX1BPU0lYX0FDTAotCWJvb2wgIkpGRlMyIFBPU0lYIEFjY2VzcyBDb250cm9sIExpc3RzIgotCWRlcGVuZHMgb24gSkZGUzJfRlNfWEFUVFIKLQlkZWZhdWx0IHkKLQlzZWxlY3QgRlNfUE9TSVhfQUNMCi0JaGVscAotCSAgUG9zaXggQWNjZXNzIENvbnRyb2wgTGlzdHMgKEFDTHMpIHN1cHBvcnQgcGVybWlzc2lvbnMgZm9yIHVzZXJzIGFuZAotCSAgZ3JvdXBzIGJleW9uZCB0aGUgb3duZXIvZ3JvdXAvd29ybGQgc2NoZW1lLgotCi0JICBUbyBsZWFybiBtb3JlIGFib3V0IEFjY2VzcyBDb250cm9sIExpc3RzLCB2aXNpdCB0aGUgUG9zaXggQUNMcyBmb3IKLQkgIExpbnV4IHdlYnNpdGUgPGh0dHA6Ly9hY2wuYmVzdGJpdHMuYXQvPi4KLQotCSAgSWYgeW91IGRvbid0IGtub3cgd2hhdCBBY2Nlc3MgQ29udHJvbCBMaXN0cyBhcmUsIHNheSBOCi0KLWNvbmZpZyBKRkZTMl9GU19TRUNVUklUWQotCWJvb2wgIkpGRlMyIFNlY3VyaXR5IExhYmVscyIKLQlkZXBlbmRzIG9uIEpGRlMyX0ZTX1hBVFRSCi0JZGVmYXVsdCB5Ci0JaGVscAotCSAgU2VjdXJpdHkgbGFiZWxzIHN1cHBvcnQgYWx0ZXJuYXRpdmUgYWNjZXNzIGNvbnRyb2wgbW9kZWxzCi0JICBpbXBsZW1lbnRlZCBieSBzZWN1cml0eSBtb2R1bGVzIGxpa2UgU0VMaW51eC4gIFRoaXMgb3B0aW9uCi0JICBlbmFibGVzIGFuIGV4dGVuZGVkIGF0dHJpYnV0ZSBoYW5kbGVyIGZvciBmaWxlIHNlY3VyaXR5Ci0JICBsYWJlbHMgaW4gdGhlIGpmZnMyIGZpbGVzeXN0ZW0uCi0KLQkgIElmIHlvdSBhcmUgbm90IHVzaW5nIGEgc2VjdXJpdHkgbW9kdWxlIHRoYXQgcmVxdWlyZXMgdXNpbmcKLQkgIGV4dGVuZGVkIGF0dHJpYnV0ZXMgZm9yIGZpbGUgc2VjdXJpdHkgbGFiZWxzLCBzYXkgTi4KLQotY29uZmlnIEpGRlMyX0NPTVBSRVNTSU9OX09QVElPTlMKLQlib29sICJBZHZhbmNlZCBjb21wcmVzc2lvbiBvcHRpb25zIGZvciBKRkZTMiIKLQlkZXBlbmRzIG9uIEpGRlMyX0ZTCi0JZGVmYXVsdCBuCi0JaGVscAotCSAgRW5hYmxpbmcgdGhpcyBvcHRpb24gYWxsb3dzIHlvdSB0byBleHBsaWNpdGx5IGNob29zZSB3aGljaAotCSAgY29tcHJlc3Npb24gbW9kdWxlcywgaWYgYW55LCBhcmUgZW5hYmxlZCBpbiBKRkZTMi4gUmVtb3ZpbmcKLQkgIGNvbXByZXNzb3JzIGNhbiBtZWFuIHlvdSBjYW5ub3QgcmVhZCBleGlzdGluZyBmaWxlIHN5c3RlbXMsCi0JICBhbmQgZW5hYmxpbmcgZXhwZXJpbWVudGFsIGNvbXByZXNzb3JzIGNhbiBtZWFuIHRoYXQgeW91Ci0JICB3cml0ZSBhIGZpbGUgc3lzdGVtIHdoaWNoIGNhbm5vdCBiZSByZWFkIGJ5IGEgc3RhbmRhcmQga2VybmVsLgotCi0JICBJZiB1bnN1cmUsIHlvdSBzaG91bGQgX2RlZmluaXRlbHlfIHNheSAnTicuCi0KLWNvbmZpZyBKRkZTMl9aTElCCi0JYm9vbCAiSkZGUzIgWkxJQiBjb21wcmVzc2lvbiBzdXBwb3J0IiBpZiBKRkZTMl9DT01QUkVTU0lPTl9PUFRJT05TCi0Jc2VsZWN0IFpMSUJfSU5GTEFURQotCXNlbGVjdCBaTElCX0RFRkxBVEUKLQlkZXBlbmRzIG9uIEpGRlMyX0ZTCi0JZGVmYXVsdCB5Ci0JaGVscAotCSAgWmxpYiBpcyBkZXNpZ25lZCB0byBiZSBhIGZyZWUsIGdlbmVyYWwtcHVycG9zZSwgbGVnYWxseSB1bmVuY3VtYmVyZWQsCi0JICBsb3NzbGVzcyBkYXRhLWNvbXByZXNzaW9uIGxpYnJhcnkgZm9yIHVzZSBvbiB2aXJ0dWFsbHkgYW55IGNvbXB1dGVyCi0JICBoYXJkd2FyZSBhbmQgb3BlcmF0aW5nIHN5c3RlbS4gU2VlIDxodHRwOi8vd3d3Lmd6aXAub3JnL3psaWIvPiBmb3IKLQkgIGZ1cnRoZXIgaW5mb3JtYXRpb24uCi0KLQkgIFNheSAnWScgaWYgdW5zdXJlLgotCi1jb25maWcgSkZGUzJfTFpPCi0JYm9vbCAiSkZGUzIgTFpPIGNvbXByZXNzaW9uIHN1cHBvcnQiIGlmIEpGRlMyX0NPTVBSRVNTSU9OX09QVElPTlMKLQlzZWxlY3QgTFpPX0NPTVBSRVNTCi0Jc2VsZWN0IExaT19ERUNPTVBSRVNTCi0JZGVwZW5kcyBvbiBKRkZTMl9GUwotCWRlZmF1bHQgbgotCWhlbHAKLQkgIG1pbmlsem8tYmFzZWQgY29tcHJlc3Npb24uIEdlbmVyYWxseSB3b3JrcyBiZXR0ZXIgdGhhbiBabGliLgotCi0JICBUaGlzIGZlYXR1cmUgd2FzIGFkZGVkIGluIEp1bHksIDIwMDcuIFNheSAnTicgaWYgeW91IG5lZWQKLQkgIGNvbXBhdGliaWxpdHkgd2l0aCBvbGRlciBib290bG9hZGVycyBvciBrZXJuZWxzLgotCi1jb25maWcgSkZGUzJfUlRJTUUKLQlib29sICJKRkZTMiBSVElNRSBjb21wcmVzc2lvbiBzdXBwb3J0IiBpZiBKRkZTMl9DT01QUkVTU0lPTl9PUFRJT05TCi0JZGVwZW5kcyBvbiBKRkZTMl9GUwotCWRlZmF1bHQgeQotCWhlbHAKLQkgIFJ0aW1lIGRvZXMgbWFuYWdlIHRvIHJlY29tcHJlc3MgYWxyZWFkeS1jb21wcmVzc2VkIGRhdGEuIFNheSAnWScgaWYgdW5zdXJlLgotCi1jb25maWcgSkZGUzJfUlVCSU4KLQlib29sICJKRkZTMiBSVUJJTiBjb21wcmVzc2lvbiBzdXBwb3J0IiBpZiBKRkZTMl9DT01QUkVTU0lPTl9PUFRJT05TCi0JZGVwZW5kcyBvbiBKRkZTMl9GUwotCWRlZmF1bHQgbgotCWhlbHAKLQkgIFJVQklOTUlQUyBhbmQgRFlOUlVCSU4gY29tcHJlc3NvcnMuIFNheSAnTicgaWYgdW5zdXJlLgotCi1jaG9pY2UKLQlwcm9tcHQgIkpGRlMyIGRlZmF1bHQgY29tcHJlc3Npb24gbW9kZSIgaWYgSkZGUzJfQ09NUFJFU1NJT05fT1BUSU9OUwotCWRlZmF1bHQgSkZGUzJfQ01PREVfUFJJT1JJVFkKLQlkZXBlbmRzIG9uIEpGRlMyX0ZTCi0JaGVscAotCSAgWW91IGNhbiBzZXQgaGVyZSB0aGUgZGVmYXVsdCBjb21wcmVzc2lvbiBtb2RlIG9mIEpGRlMyIGZyb20KLQkgIHRoZSBhdmFpbGFibGUgY29tcHJlc3Npb24gbW9kZXMuIERvbid0IHRvdWNoIGlmIHVuc3VyZS4KLQotY29uZmlnIEpGRlMyX0NNT0RFX05PTkUKLQlib29sICJubyBjb21wcmVzc2lvbiIKLQloZWxwCi0JICBVc2VzIG5vIGNvbXByZXNzaW9uLgotCi1jb25maWcgSkZGUzJfQ01PREVfUFJJT1JJVFkKLQlib29sICJwcmlvcml0eSIKLQloZWxwCi0JICBUcmllcyB0aGUgY29tcHJlc3NvcnMgaW4gYSBwcmVkZWZpbmVkIG9yZGVyIGFuZCBjaG9vc2VzIHRoZSBmaXJzdAotCSAgc3VjY2Vzc2Z1bCBvbmUuCi0KLWNvbmZpZyBKRkZTMl9DTU9ERV9TSVpFCi0JYm9vbCAic2l6ZSAoRVhQRVJJTUVOVEFMKSIKLQloZWxwCi0JICBUcmllcyBhbGwgY29tcHJlc3NvcnMgYW5kIGNob29zZXMgdGhlIG9uZSB3aGljaCBoYXMgdGhlIHNtYWxsZXN0Ci0JICByZXN1bHQuCi0KLWNvbmZpZyBKRkZTMl9DTU9ERV9GQVZPVVJMWk8KLQlib29sICJGYXZvdXIgTFpPIgotCWhlbHAKLQkgIFRyaWVzIGFsbCBjb21wcmVzc29ycyBhbmQgY2hvb3NlcyB0aGUgb25lIHdoaWNoIGhhcyB0aGUgc21hbGxlc3QKLQkgIHJlc3VsdCBidXQgZ2l2ZXMgc29tZSBwcmVmZXJlbmNlIHRvIExaTyAod2hpY2ggaGFzIGZhc3RlcgotCSAgZGVjb21wcmVzc2lvbikgYXQgdGhlIGV4cGVuc2Ugb2Ygc2l6ZS4KLQotZW5kY2hvaWNlCi0KK3NvdXJjZSAiZnMvamZmczIvS2NvbmZpZyIKICMgVUJJRlMgRmlsZSBzeXN0ZW0gY29uZmlndXJhdGlvbgogc291cmNlICJmcy91Ymlmcy9LY29uZmlnIgogCkBAIC0xNzc5LDYgKzEzNDcsMjggQEAKIAogCSAgSWYgdW5zdXJlLCBzYXkgTi4KIAorY29uZmlnIFNVTlJQQ19SRUdJU1RFUl9WNAorCWJvb2wgIlJlZ2lzdGVyIGxvY2FsIFJQQyBzZXJ2aWNlcyB2aWEgcnBjYmluZCB2NCAoRVhQRVJJTUVOVEFMKSIKKwlkZXBlbmRzIG9uIFNVTlJQQyAmJiBFWFBFUklNRU5UQUwKKwlkZWZhdWx0IG4KKwloZWxwCisJICBTdW4gYWRkZWQgc3VwcG9ydCBmb3IgcmVnaXN0ZXJpbmcgUlBDIHNlcnZpY2VzIGF0IGFuIElQdjYKKwkgIGFkZHJlc3MgYnkgY3JlYXRpbmcgdHdvIG5ldyB2ZXJzaW9ucyBvZiB0aGUgcnBjYmluZCBwcm90b2NvbAorCSAgKFJGQyAxODMzKS4KKworCSAgVGhpcyBvcHRpb24gZW5hYmxlcyBzdXBwb3J0IGluIHRoZSBrZXJuZWwgUlBDIHNlcnZlciBmb3IKKwkgIHJlZ2lzdGVyaW5nIGtlcm5lbCBSUEMgc2VydmljZXMgdmlhIHZlcnNpb24gNCBvZiB0aGUgcnBjYmluZAorCSAgcHJvdG9jb2wuICBJZiB5b3UgZW5hYmxlIHRoaXMgb3B0aW9uLCB5b3UgbXVzdCBydW4gYSBwb3J0bWFwcGVyCisJICBkYWVtb24gdGhhdCBzdXBwb3J0cyBycGNiaW5kIHByb3RvY29sIHZlcnNpb24gNC4KKworCSAgU2VydmluZyBORlMgb3ZlciBJUHY2IGZyb20ga25mc2QgKHRoZSBrZXJuZWwncyBORlMgc2VydmVyKQorCSAgcmVxdWlyZXMgdGhhdCB5b3UgZW5hYmxlIHRoaXMgb3B0aW9uIGFuZCB1c2UgYSBwb3J0bWFwcGVyIHRoYXQKKwkgIHN1cHBvcnRzIHJwY2JpbmQgdmVyc2lvbiA0LgorCisJICBJZiB1bnN1cmUsIHNheSBOIHRvIGdldCB0cmFkaXRpb25hbCBiZWhhdmlvciAocmVnaXN0ZXIga2VybmVsCisJICBSUEMgc2VydmljZXMgdXNpbmcgb25seSBycGNiaW5kIHZlcnNpb24gMikuICBEaXN0cmlidXRpb25zCisJICB1c2luZyB0aGUgbGVnYWN5IExpbnV4IHBvcnRtYXBwZXIgZGFlbW9uIG11c3Qgc2F5IE4gaGVyZS4KKwogY29uZmlnIFJQQ1NFQ19HU1NfS1JCNQogCXRyaXN0YXRlICJTZWN1cmUgUlBDOiBLZXJiZXJvcyBWIG1lY2hhbmlzbSAoRVhQRVJJTUVOVEFMKSIKIAlkZXBlbmRzIG9uIFNVTlJQQyAmJiBFWFBFUklNRU5UQUwKQEAgLTE4NzMsMTQ4ICsxNDYzLDcgQEAKIAogCSAgc21ibW91bnQgZnJvbSBzYW1iYSAyLjIuMCBvciBsYXRlciBzdXBwb3J0cyB0aGlzLgogCi1jb25maWcgQ0lGUwotCXRyaXN0YXRlICJDSUZTIHN1cHBvcnQgKGFkdmFuY2VkIG5ldHdvcmsgZmlsZXN5c3RlbSwgU01CRlMgc3VjY2Vzc29yKSIKLQlkZXBlbmRzIG9uIElORVQKLQlzZWxlY3QgTkxTCi0JaGVscAotCSAgVGhpcyBpcyB0aGUgY2xpZW50IFZGUyBtb2R1bGUgZm9yIHRoZSBDb21tb24gSW50ZXJuZXQgRmlsZSBTeXN0ZW0KLQkgIChDSUZTKSBwcm90b2NvbCB3aGljaCBpcyB0aGUgc3VjY2Vzc29yIHRvIHRoZSBTZXJ2ZXIgTWVzc2FnZSBCbG9jayAKLQkgIChTTUIpIHByb3RvY29sLCB0aGUgbmF0aXZlIGZpbGUgc2hhcmluZyBtZWNoYW5pc20gZm9yIG1vc3QgZWFybHkKLQkgIFBDIG9wZXJhdGluZyBzeXN0ZW1zLiAgVGhlIENJRlMgcHJvdG9jb2wgaXMgZnVsbHkgc3VwcG9ydGVkIGJ5IAotCSAgZmlsZSBzZXJ2ZXJzIHN1Y2ggYXMgV2luZG93cyAyMDAwIChpbmNsdWRpbmcgV2luZG93cyAyMDAzLCBOVCA0ICAKLQkgIGFuZCBXaW5kb3dzIFhQKSBhcyB3ZWxsIGJ5IFNhbWJhICh3aGljaCBwcm92aWRlcyBleGNlbGxlbnQgQ0lGUwotCSAgc2VydmVyIHN1cHBvcnQgZm9yIExpbnV4IGFuZCBtYW55IG90aGVyIG9wZXJhdGluZyBzeXN0ZW1zKS4gTGltaXRlZAotCSAgc3VwcG9ydCBmb3IgT1MvMiBhbmQgV2luZG93cyBNRSBhbmQgc2ltaWxhciBzZXJ2ZXJzIGlzIHByb3ZpZGVkIGFzCi0JICB3ZWxsLgotCi0JICBUaGUgY2lmcyBtb2R1bGUgcHJvdmlkZXMgYW4gYWR2YW5jZWQgbmV0d29yayBmaWxlIHN5c3RlbQotCSAgY2xpZW50IGZvciBtb3VudGluZyB0byBDSUZTIGNvbXBsaWFudCBzZXJ2ZXJzLiAgSXQgaW5jbHVkZXMKLQkgIHN1cHBvcnQgZm9yIERGUyAoaGllcmFyY2hpY2FsIG5hbWUgc3BhY2UpLCBzZWN1cmUgcGVyLXVzZXIKLQkgIHNlc3Npb24gZXN0YWJsaXNobWVudCB2aWEgS2VyYmVyb3Mgb3IgTlRMTSBvciBOVExNdjIsCi0JICBzYWZlIGRpc3RyaWJ1dGVkIGNhY2hpbmcgKG9wbG9jayksIG9wdGlvbmFsIHBhY2tldAotCSAgc2lnbmluZywgVW5pY29kZSBhbmQgb3RoZXIgaW50ZXJuYXRpb25hbGl6YXRpb24gaW1wcm92ZW1lbnRzLgotCSAgSWYgeW91IG5lZWQgdG8gbW91bnQgdG8gU2FtYmEgb3IgV2luZG93cyBmcm9tIHRoaXMgbWFjaGluZSwgc2F5IFkuCi0KLWNvbmZpZyBDSUZTX1NUQVRTCi0gICAgICAgIGJvb2wgIkNJRlMgc3RhdGlzdGljcyIKLSAgICAgICAgZGVwZW5kcyBvbiBDSUZTCi0gICAgICAgIGhlbHAKLSAgICAgICAgICBFbmFibGluZyB0aGlzIG9wdGlvbiB3aWxsIGNhdXNlIHN0YXRpc3RpY3MgZm9yIGVhY2ggc2VydmVyIHNoYXJlCi0JICBtb3VudGVkIGJ5IHRoZSBjaWZzIGNsaWVudCB0byBiZSBkaXNwbGF5ZWQgaW4gL3Byb2MvZnMvY2lmcy9TdGF0cwotCi1jb25maWcgQ0lGU19TVEFUUzIKLQlib29sICJFeHRlbmRlZCBzdGF0aXN0aWNzIgotCWRlcGVuZHMgb24gQ0lGU19TVEFUUwotCWhlbHAKLQkgIEVuYWJsaW5nIHRoaXMgb3B0aW9uIHdpbGwgYWxsb3cgbW9yZSBkZXRhaWxlZCBzdGF0aXN0aWNzIG9uIFNNQgotCSAgcmVxdWVzdCB0aW1pbmcgdG8gYmUgZGlzcGxheWVkIGluIC9wcm9jL2ZzL2NpZnMvRGVidWdEYXRhIGFuZCBhbHNvCi0JICBhbGxvdyBvcHRpb25hbCBsb2dnaW5nIG9mIHNsb3cgcmVzcG9uc2VzIHRvIGRtZXNnIChkZXBlbmRpbmcgb24gdGhlCi0JICB2YWx1ZSBvZiAvcHJvYy9mcy9jaWZzL2NpZnNGWUksIHNlZSBmcy9jaWZzL1JFQURNRSBmb3IgbW9yZSBkZXRhaWxzKS4KLQkgIFRoZXNlIGFkZGl0aW9uYWwgc3RhdGlzdGljcyBtYXkgaGF2ZSBhIG1pbm9yIGVmZmVjdCBvbiBwZXJmb3JtYW5jZQotCSAgYW5kIG1lbW9yeSB1dGlsaXphdGlvbi4KLQotCSAgVW5sZXNzIHlvdSBhcmUgYSBkZXZlbG9wZXIgb3IgYXJlIGRvaW5nIG5ldHdvcmsgcGVyZm9ybWFuY2UgYW5hbHlzaXMKLQkgIG9yIHR1bmluZywgc2F5IE4uCi0KLWNvbmZpZyBDSUZTX1dFQUtfUFdfSEFTSAotCWJvb2wgIlN1cHBvcnQgbGVnYWN5IHNlcnZlcnMgd2hpY2ggdXNlIHdlYWtlciBMQU5NQU4gc2VjdXJpdHkiCi0JZGVwZW5kcyBvbiBDSUZTCi0JaGVscAotCSAgTW9kZXJuIENJRlMgc2VydmVycyBpbmNsdWRpbmcgU2FtYmEgYW5kIG1vc3QgV2luZG93cyB2ZXJzaW9ucwotCSAgKHNpbmNlIDE5OTcpIHN1cHBvcnQgc3Ryb25nZXIgTlRMTSAoYW5kIGV2ZW4gTlRMTXYyIGFuZCBLZXJiZXJvcykKLQkgIHNlY3VyaXR5IG1lY2hhbmlzbXMuIFRoZXNlIGhhc2ggdGhlIHBhc3N3b3JkIG1vcmUgc2VjdXJlbHkKLQkgIHRoYW4gdGhlIG1lY2hhbmlzbXMgdXNlZCBpbiB0aGUgb2xkZXIgTEFOTUFOIHZlcnNpb24gb2YgdGhlCi0JICBTTUIgcHJvdG9jb2wgYnV0IExBTk1BTiBiYXNlZCBhdXRoZW50aWNhdGlvbiBpcyBuZWVkZWQgdG8KLQkgIGVzdGFibGlzaCBzZXNzaW9ucyB3aXRoIHNvbWUgb2xkIFNNQiBzZXJ2ZXJzLgotCi0JICBFbmFibGluZyB0aGlzIG9wdGlvbiBhbGxvd3MgdGhlIGNpZnMgbW9kdWxlIHRvIG1vdW50IHRvIG9sZGVyCi0JICBMQU5NQU4gYmFzZWQgc2VydmVycyBzdWNoIGFzIE9TLzIgYW5kIFdpbmRvd3MgOTUsIGJ1dCBzdWNoCi0JICBtb3VudHMgbWF5IGJlIGxlc3Mgc2VjdXJlIHRoYW4gbW91bnRzIHVzaW5nIE5UTE0gb3IgbW9yZSByZWNlbnQKLQkgIHNlY3VyaXR5IG1lY2hhbmlzbXMgaWYgeW91IGFyZSBvbiBhIHB1YmxpYyBuZXR3b3JrLiAgVW5sZXNzIHlvdQotCSAgaGF2ZSBhIG5lZWQgdG8gYWNjZXNzIG9sZCBTTUIgc2VydmVycyAoYW5kIGFyZSBvbiBhIHByaXZhdGUKLQkgIG5ldHdvcmspIHlvdSBwcm9iYWJseSB3YW50IHRvIHNheSBOLiAgRXZlbiBpZiB0aGlzIHN1cHBvcnQKLQkgIGlzIGVuYWJsZWQgaW4gdGhlIGtlcm5lbCBidWlsZCwgTEFOTUFOIGF1dGhlbnRpY2F0aW9uIHdpbGwgbm90IGJlCi0JICB1c2VkIGF1dG9tYXRpY2FsbHkuIEF0IHJ1bnRpbWUgTEFOTUFOIG1vdW50cyBhcmUgZGlzYWJsZWQgYnV0Ci0JICBjYW4gYmUgc2V0IHRvIHJlcXVpcmVkIChvciBvcHRpb25hbCkgZWl0aGVyIGluCi0JICAvcHJvYy9mcy9jaWZzIChzZWUgZnMvY2lmcy9SRUFETUUgZm9yIG1vcmUgZGV0YWlsKSBvciB2aWEgYW4KLQkgIG9wdGlvbiBvbiB0aGUgbW91bnQgY29tbWFuZC4gVGhpcyBzdXBwb3J0IGlzIGRpc2FibGVkIGJ5Ci0JICBkZWZhdWx0IGluIG9yZGVyIHRvIHJlZHVjZSB0aGUgcG9zc2liaWxpdHkgb2YgYSBkb3duZ3JhZGUKLQkgIGF0dGFjay4KLQotCSAgSWYgdW5zdXJlLCBzYXkgTi4KLQotY29uZmlnIENJRlNfVVBDQUxMCi0JICBib29sICJLZXJiZXJvcy9TUE5FR08gYWR2YW5jZWQgc2Vzc2lvbiBzZXR1cCIKLQkgIGRlcGVuZHMgb24gQ0lGUyAmJiBLRVlTCi0JICBoZWxwCi0JICAgIEVuYWJsZXMgYW4gdXBjYWxsIG1lY2hhbmlzbSBmb3IgQ0lGUyB3aGljaCBhY2Nlc3NlcwotCSAgICB1c2Vyc3BhY2UgaGVscGVyIHV0aWxpdGllcyB0byBwcm92aWRlIFNQTkVHTyBwYWNrYWdlZCAoUkZDIDQxNzgpCi0JICAgIEtlcmJlcm9zIHRpY2tldHMgd2hpY2ggYXJlIG5lZWRlZCB0byBtb3VudCB0byBjZXJ0YWluIHNlY3VyZSBzZXJ2ZXJzCi0JICAgIChmb3Igd2hpY2ggbW9yZSBzZWN1cmUgS2VyYmVyb3MgYXV0aGVudGljYXRpb24gaXMgcmVxdWlyZWQpLiBJZgotCSAgICB1bnN1cmUsIHNheSBOLgotCi1jb25maWcgQ0lGU19YQVRUUgotICAgICAgICBib29sICJDSUZTIGV4dGVuZGVkIGF0dHJpYnV0ZXMiCi0gICAgICAgIGRlcGVuZHMgb24gQ0lGUwotICAgICAgICBoZWxwCi0gICAgICAgICAgRXh0ZW5kZWQgYXR0cmlidXRlcyBhcmUgbmFtZTp2YWx1ZSBwYWlycyBhc3NvY2lhdGVkIHdpdGggaW5vZGVzIGJ5Ci0gICAgICAgICAgdGhlIGtlcm5lbCBvciBieSB1c2VycyAoc2VlIHRoZSBhdHRyKDUpIG1hbnVhbCBwYWdlLCBvciB2aXNpdAotICAgICAgICAgIDxodHRwOi8vYWNsLmJlc3RiaXRzLmF0Lz4gZm9yIGRldGFpbHMpLiAgQ0lGUyBtYXBzIHRoZSBuYW1lIG9mCi0gICAgICAgICAgZXh0ZW5kZWQgYXR0cmlidXRlcyBiZWdpbm5pbmcgd2l0aCB0aGUgdXNlciBuYW1lc3BhY2UgcHJlZml4Ci0gICAgICAgICAgdG8gU01CL0NJRlMgRUFzLiBFQXMgYXJlIHN0b3JlZCBvbiBXaW5kb3dzIHNlcnZlcnMgd2l0aG91dCB0aGUKLSAgICAgICAgICB1c2VyIG5hbWVzcGFjZSBwcmVmaXgsIGJ1dCB0aGVpciBuYW1lcyBhcmUgc2VlbiBieSBMaW51eCBjaWZzIGNsaWVudHMKLSAgICAgICAgICBwcmVmYWNlZCBieSB0aGUgdXNlciBuYW1lc3BhY2UgcHJlZml4LiBUaGUgc3lzdGVtIG5hbWVzcGFjZQotICAgICAgICAgICh1c2VkIGJ5IHNvbWUgZmlsZXN5c3RlbXMgdG8gc3RvcmUgQUNMcykgaXMgbm90IHN1cHBvcnRlZCBhdAotICAgICAgICAgIHRoaXMgdGltZS4KLQotICAgICAgICAgIElmIHVuc3VyZSwgc2F5IE4uCi0KLWNvbmZpZyBDSUZTX1BPU0lYCi0gICAgICAgIGJvb2wgIkNJRlMgUE9TSVggRXh0ZW5zaW9ucyIKLSAgICAgICAgZGVwZW5kcyBvbiBDSUZTX1hBVFRSCi0gICAgICAgIGhlbHAKLSAgICAgICAgICBFbmFibGluZyB0aGlzIG9wdGlvbiB3aWxsIGNhdXNlIHRoZSBjaWZzIGNsaWVudCB0byBhdHRlbXB0IHRvCi0JICBuZWdvdGlhdGUgYSBuZXdlciBkaWFsZWN0IHdpdGggc2VydmVycywgc3VjaCBhcyBTYW1iYSAzLjAuNQotCSAgb3IgbGF0ZXIsIHRoYXQgb3B0aW9uYWxseSBjYW4gaGFuZGxlIG1vcmUgUE9TSVggbGlrZSAocmF0aGVyCi0JICB0aGFuIFdpbmRvd3MgbGlrZSkgZmlsZSBiZWhhdmlvci4gIEl0IGFsc28gZW5hYmxlcwotCSAgc3VwcG9ydCBmb3IgUE9TSVggQUNMcyAoZ2V0ZmFjbCBhbmQgc2V0ZmFjbCkgdG8gc2VydmVycwotCSAgKHN1Y2ggYXMgU2FtYmEgMy4xMCBhbmQgbGF0ZXIpIHdoaWNoIGNhbiBuZWdvdGlhdGUKLQkgIENJRlMgUE9TSVggQUNMIHN1cHBvcnQuICBJZiB1bnN1cmUsIHNheSBOLgotCi1jb25maWcgQ0lGU19ERUJVRzIKLQlib29sICJFbmFibGUgYWRkaXRpb25hbCBDSUZTIGRlYnVnZ2luZyByb3V0aW5lcyIKLQlkZXBlbmRzIG9uIENJRlMKLQloZWxwCi0JICAgRW5hYmxpbmcgdGhpcyBvcHRpb24gYWRkcyBhIGZldyBtb3JlIGRlYnVnZ2luZyByb3V0aW5lcwotCSAgIHRvIHRoZSBjaWZzIGNvZGUgd2hpY2ggc2xpZ2h0bHkgaW5jcmVhc2VzIHRoZSBzaXplIG9mCi0JICAgdGhlIGNpZnMgbW9kdWxlIGFuZCBjYW4gY2F1c2UgYWRkaXRpb25hbCBsb2dnaW5nIG9mIGRlYnVnCi0JICAgbWVzc2FnZXMgaW4gc29tZSBlcnJvciBwYXRocywgc2xvd2luZyBwZXJmb3JtYW5jZS4gVGhpcwotCSAgIG9wdGlvbiBjYW4gYmUgdHVybmVkIG9mZiB1bmxlc3MgeW91IGFyZSBkZWJ1Z2dpbmcKLQkgICBjaWZzIHByb2JsZW1zLiAgSWYgdW5zdXJlLCBzYXkgTi4KLQotY29uZmlnIENJRlNfRVhQRVJJTUVOVEFMCi0JICBib29sICJDSUZTIEV4cGVyaW1lbnRhbCBGZWF0dXJlcyAoRVhQRVJJTUVOVEFMKSIKLQkgIGRlcGVuZHMgb24gQ0lGUyAmJiBFWFBFUklNRU5UQUwKLQkgIGhlbHAKLQkgICAgRW5hYmxlcyBjaWZzIGZlYXR1cmVzIHVuZGVyIHRlc3RpbmcuIFRoZXNlIGZlYXR1cmVzIGFyZQotCSAgICBleHBlcmltZW50YWwgYW5kIGN1cnJlbnRseSBpbmNsdWRlIERGUyBzdXBwb3J0IGFuZCBkaXJlY3RvcnkgCi0JICAgIGNoYW5nZSBub3RpZmljYXRpb24gaWUgZmNudGwoRl9ETk9USUZZKSwgYXMgd2VsbCBhcyB0aGUgdXBjYWxsCi0JICAgIG1lY2hhbmlzbSB3aGljaCB3aWxsIGJlIHVzZWQgZm9yIEtlcmJlcm9zIHNlc3Npb24gbmVnb3RpYXRpb24KLQkgICAgYW5kIHVpZCByZW1hcHBpbmcuICBTb21lIG9mIHRoZXNlIGZlYXR1cmVzIGFsc28gbWF5IGRlcGVuZCBvbiAKLQkgICAgc2V0dGluZyBhIHZhbHVlIG9mIDEgdG8gdGhlIHBzZXVkby1maWxlIC9wcm9jL2ZzL2NpZnMvRXhwZXJpbWVudGFsCi0JICAgICh3aGljaCBpcyBkaXNhYmxlZCBieSBkZWZhdWx0KS4gU2VlIHRoZSBmaWxlIGZzL2NpZnMvUkVBRE1FIAotCSAgICBmb3IgbW9yZSBkZXRhaWxzLiAgSWYgdW5zdXJlLCBzYXkgTi4KLQotY29uZmlnIENJRlNfREZTX1VQQ0FMTAotCSAgYm9vbCAiREZTIGZlYXR1cmUgc3VwcG9ydCAoRVhQRVJJTUVOVEFMKSIKLQkgIGRlcGVuZHMgb24gQ0lGU19FWFBFUklNRU5UQUwKLQkgIGRlcGVuZHMgb24gS0VZUwotCSAgaGVscAotCSAgICBFbmFibGVzIGFuIHVwY2FsbCBtZWNoYW5pc20gZm9yIENJRlMgd2hpY2ggY29udGFjdHMgdXNlcnNwYWNlCi0JICAgIGhlbHBlciB1dGlsaXRpZXMgdG8gcHJvdmlkZSBzZXJ2ZXIgbmFtZSByZXNvbHV0aW9uIChob3N0IG5hbWVzIHRvCi0JICAgIElQIGFkZHJlc3Nlcykgd2hpY2ggaXMgbmVlZGVkIGZvciBpbXBsaWNpdCBtb3VudHMgb2YgREZTIGp1bmN0aW9uCi0JICAgIHBvaW50cy4gSWYgdW5zdXJlLCBzYXkgTi4KK3NvdXJjZSAiZnMvY2lmcy9LY29uZmlnIgogCiBjb25maWcgTkNQX0ZTCiAJdHJpc3RhdGUgIk5DUCBmaWxlIHN5c3RlbSBzdXBwb3J0ICh0byBtb3VudCBOZXRXYXJlIHZvbHVtZXMpIgpkaWZmIC0tZ2l0IGEvZnMvS2NvbmZpZy5iaW5mbXQgYi9mcy9LY29uZmlnLmJpbmZtdAppbmRleCA0YTU1MWFmLi5jZTlmYjNmIDEwMDY0NAotLS0gYS9mcy9LY29uZmlnLmJpbmZtdAorKysgYi9mcy9LY29uZmlnLmJpbmZtdApAQCAtMjUsNyArMjUsNyBAQAogCiBjb25maWcgQ09NUEFUX0JJTkZNVF9FTEYKIAlib29sCi0JZGVwZW5kcyBvbiBDT01QQVQgJiYgTU1VCisJZGVwZW5kcyBvbiBDT01QQVQgJiYgQklORk1UX0VMRgogCiBjb25maWcgQklORk1UX0VMRl9GRFBJQwogCWJvb2wgIktlcm5lbCBzdXBwb3J0IGZvciBGRFBJQyBFTEYgYmluYXJpZXMiCkBAIC00MCw2ICs0MCwyOCBAQAogCiAJICBJdCBpcyBhbHNvIHBvc3NpYmxlIHRvIHJ1biBGRFBJQyBFTEYgYmluYXJpZXMgb24gTU1VIGxpbnV4IGFsc28uCiAKK2NvbmZpZyBDT1JFX0RVTVBfREVGQVVMVF9FTEZfSEVBREVSUworCWJvb2wgIldyaXRlIEVMRiBjb3JlIGR1bXBzIHdpdGggcGFydGlhbCBzZWdtZW50cyIKKwlkZWZhdWx0IG4KKwlkZXBlbmRzIG9uIEJJTkZNVF9FTEYKKwloZWxwCisJICBFTEYgY29yZSBkdW1wIGZpbGVzIGRlc2NyaWJlIGVhY2ggbWVtb3J5IG1hcHBpbmcgb2YgdGhlIGNyYXNoZWQKKwkgIHByb2Nlc3MsIGFuZCBjYW4gY29udGFpbiBvciBvbWl0IHRoZSBtZW1vcnkgY29udGVudHMgb2YgZWFjaCBvbmUuCisJICBUaGUgY29udGVudHMgb2YgYW4gdW5tb2RpZmllZCB0ZXh0IG1hcHBpbmcgYXJlIG9taXR0ZWQgYnkgZGVmYXVsdC4KKworCSAgRm9yIGFuIHVubW9kaWZpZWQgdGV4dCBtYXBwaW5nIG9mIGFuIEVMRiBvYmplY3QsIGluY2x1ZGluZyBqdXN0CisJICB0aGUgZmlyc3QgcGFnZSBvZiB0aGUgZmlsZSBpbiBhIGNvcmUgZHVtcCBtYWtlcyBpdCBwb3NzaWJsZSB0bworCSAgaWRlbnRpZnkgdGhlIGJ1aWxkIElEIGJpdHMgaW4gdGhlIGZpbGUsIHdpdGhvdXQgcGF5aW5nIHRoZSBpL28KKwkgIGNvc3QgYW5kIGRpc2sgc3BhY2UgdG8gZHVtcCBhbGwgdGhlIHRleHQuICBIb3dldmVyLCB2ZXJzaW9ucyBvZgorCSAgR0RCIGJlZm9yZSA2LjcgYXJlIGNvbmZ1c2VkIGJ5IEVMRiBjb3JlIGR1bXAgZmlsZXMgaW4gdGhpcyBmb3JtYXQuCisKKwkgIFRoZSBjb3JlIGR1bXAgYmVoYXZpb3IgY2FuIGJlIGNvbnRyb2xsZWQgcGVyIHByb2Nlc3MgdXNpbmcKKwkgIHRoZSAvcHJvYy9QSUQvY29yZWR1bXBfZmlsdGVyIHBzZXVkby1maWxlOyB0aGlzIHNldHRpbmcgaXMKKwkgIGluaGVyaXRlZC4gIFNlZSBEb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3Byb2MudHh0IGZvciBkZXRhaWxzLgorCisJICBUaGlzIGNvbmZpZyBvcHRpb24gY2hhbmdlcyB0aGUgZGVmYXVsdCBzZXR0aW5nIG9mIGNvcmVkdW1wX2ZpbHRlcgorCSAgc2VlbiBhdCBib290IHRpbWUuICBJZiB1bnN1cmUsIHNheSBOLgorCiBjb25maWcgQklORk1UX0ZMQVQKIAlib29sICJLZXJuZWwgc3VwcG9ydCBmb3IgZmxhdCBiaW5hcmllcyIKIAlkZXBlbmRzIG9uICFNTVUgJiYgKCFGUlYgfHwgQlJPS0VOKQpAQCAtNTksMTAgKzgxLDEyIEBACiAJaGVscAogCSAgU3VwcG9ydCBGTEFUIHNoYXJlZCBsaWJyYXJpZXMKIAorY29uZmlnIEhBVkVfQU9VVAorICAgICAgIGRlZl9ib29sIG4KKwogY29uZmlnIEJJTkZNVF9BT1VUCiAJdHJpc3RhdGUgIktlcm5lbCBzdXBwb3J0IGZvciBhLm91dCBhbmQgRUNPRkYgYmluYXJpZXMiCi0JZGVwZW5kcyBvbiBBUkNIX1NVUFBPUlRTX0FPVVQgJiYgXAotCQkoWDg2XzMyIHx8IEFMUEhBIHx8IEFSTSB8fCBNNjhLKQorCWRlcGVuZHMgb24gSEFWRV9BT1VUCiAJLS0taGVscC0tLQogCSAgQS5vdXQgKEFzc2VtYmxlci5PVVRwdXQpIGlzIGEgc2V0IG9mIGZvcm1hdHMgZm9yIGxpYnJhcmllcyBhbmQKIAkgIGV4ZWN1dGFibGVzIHVzZWQgaW4gdGhlIGVhcmxpZXN0IHZlcnNpb25zIG9mIFVOSVguICBMaW51eCB1c2VkCmRpZmYgLS1naXQgYS9mcy9NYWtlZmlsZSBiL2ZzL01ha2VmaWxlCmluZGV4IGRlNDA0YjAuLjIxNjhjOTAgMTAwNjQ0Ci0tLSBhL2ZzL01ha2VmaWxlCisrKyBiL2ZzL01ha2VmaWxlCkBAIC03LDggKzcsOCBAQAogCiBvYmoteSA6PQlvcGVuLm8gcmVhZF93cml0ZS5vIGZpbGVfdGFibGUubyBzdXBlci5vIFwKIAkJY2hhcl9kZXYubyBzdGF0Lm8gZXhlYy5vIHBpcGUubyBuYW1laS5vIGZjbnRsLm8gXAotCQlpb2N0bC5vIHJlYWRkaXIubyBzZWxlY3QubyBmaWZvLm8gbG9ja3MubyBkY2FjaGUubyBpbm9kZS5vIFwKLQkJYXR0ci5vIGJhZF9pbm9kZS5vIGZpbGUubyBmaWxlc3lzdGVtcy5vIG5hbWVzcGFjZS5vIGFpby5vIFwKKwkJaW9jdGwubyByZWFkZGlyLm8gc2VsZWN0Lm8gZmlmby5vIGRjYWNoZS5vIGlub2RlLm8gXAorCQlhdHRyLm8gYmFkX2lub2RlLm8gZmlsZS5vIGZpbGVzeXN0ZW1zLm8gbmFtZXNwYWNlLm8gXAogCQlzZXFfZmlsZS5vIHhhdHRyLm8gbGliZnMubyBmcy13cml0ZWJhY2subyBcCiAJCXBub2RlLm8gZHJvcF9jYWNoZXMubyBzcGxpY2UubyBzeW5jLm8gdXRpbWVzLm8gXAogCQlzdGFjay5vCkBAIC0yNyw2ICsyNyw4IEBACiBvYmotJChDT05GSUdfU0lHTkFMRkQpCQkrPSBzaWduYWxmZC5vCiBvYmotJChDT05GSUdfVElNRVJGRCkJCSs9IHRpbWVyZmQubwogb2JqLSQoQ09ORklHX0VWRU5URkQpCQkrPSBldmVudGZkLm8KK29iai0kKENPTkZJR19BSU8pICAgICAgICAgICAgICAgKz0gYWlvLm8KK29iai0kKENPTkZJR19GSUxFX0xPQ0tJTkcpICAgICAgKz0gbG9ja3Mubwogb2JqLSQoQ09ORklHX0NPTVBBVCkJCSs9IGNvbXBhdC5vIGNvbXBhdF9pb2N0bC5vCiAKIG5mc2QtJChDT05GSUdfTkZTRCkJCTo9IG5mc2N0bC5vCkBAIC02OSw3ICs3MSw3IEBACiAjIERvIG5vdCBhZGQgYW55IGZpbGVzeXN0ZW1zIGJlZm9yZSB0aGlzIGxpbmUKIG9iai0kKENPTkZJR19SRUlTRVJGU19GUykJKz0gcmVpc2VyZnMvCiBvYmotJChDT05GSUdfRVhUM19GUykJCSs9IGV4dDMvICMgQmVmb3JlIGV4dDIgc28gcm9vdCBmcyBjYW4gYmUgZXh0Mwotb2JqLSQoQ09ORklHX0VYVDRfRlMpCQkrPSBleHQ0LyAjIEJlZm9yZSBleHQyIHNvIHJvb3QgZnMgY2FuIGJlIGV4dDRkZXYKK29iai0kKENPTkZJR19FWFQ0X0ZTKQkJKz0gZXh0NC8gIyBCZWZvcmUgZXh0MiBzbyByb290IGZzIGNhbiBiZSBleHQ0CiBvYmotJChDT05GSUdfSkJEKQkJKz0gamJkLwogb2JqLSQoQ09ORklHX0pCRDIpCQkrPSBqYmQyLwogb2JqLSQoQ09ORklHX0VYVDJfRlMpCQkrPSBleHQyLwpkaWZmIC0tZ2l0IGEvZnMvYWRmcy9zdXBlci5jIGIvZnMvYWRmcy9zdXBlci5jCmluZGV4IDI2ZjNiNDMuLjdmODNhNDYgMTAwNjQ0Ci0tLSBhL2ZzL2FkZnMvc3VwZXIuYworKysgYi9mcy9hZGZzL3N1cGVyLmMKQEAgLTE1Nyw3ICsxNTcsNyBAQAogCiBlbnVtIHtPcHRfdWlkLCBPcHRfZ2lkLCBPcHRfb3dubWFzaywgT3B0X290aG1hc2ssIE9wdF9lcnJ9OwogCi1zdGF0aWMgbWF0Y2hfdGFibGVfdCB0b2tlbnMgPSB7CitzdGF0aWMgY29uc3QgbWF0Y2hfdGFibGVfdCB0b2tlbnMgPSB7CiAJe09wdF91aWQsICJ1aWQ9JXUifSwKIAl7T3B0X2dpZCwgImdpZD0ldSJ9LAogCXtPcHRfb3dubWFzaywgIm93bm1hc2s9JW8ifSwKZGlmZiAtLWdpdCBhL2ZzL2FmZnMvc3VwZXIuYyBiL2ZzL2FmZnMvc3VwZXIuYwppbmRleCAzYTg5MDk0Li44OTg5YzkzIDEwMDY0NAotLS0gYS9mcy9hZmZzL3N1cGVyLmMKKysrIGIvZnMvYWZmcy9zdXBlci5jCkBAIC0xMzUsNyArMTM1LDcgQEAKIAlPcHRfdmVyYm9zZSwgT3B0X3ZvbHVtZSwgT3B0X2lnbm9yZSwgT3B0X2VyciwKIH07CiAKLXN0YXRpYyBtYXRjaF90YWJsZV90IHRva2VucyA9IHsKK3N0YXRpYyBjb25zdCBtYXRjaF90YWJsZV90IHRva2VucyA9IHsKIAl7T3B0X2JzLCAiYnM9JXUifSwKIAl7T3B0X21vZGUsICJtb2RlPSVvIn0sCiAJe09wdF9tdWZzLCAibXVmcyJ9LApkaWZmIC0tZ2l0IGEvZnMvYWZzL2ZpbGUuYyBiL2ZzL2Fmcy9maWxlLmMKaW5kZXggNTI1ZjdjNS4uYTM5MDE3NiAxMDA2NDQKLS0tIGEvZnMvYWZzL2ZpbGUuYworKysgYi9mcy9hZnMvZmlsZS5jCkBAIC01MCw4ICs1MCw4IEBACiAJLmxhdW5kZXJfcGFnZQk9IGFmc19sYXVuZGVyX3BhZ2UsCiAJLnJlbGVhc2VwYWdlCT0gYWZzX3JlbGVhc2VwYWdlLAogCS5pbnZhbGlkYXRlcGFnZQk9IGFmc19pbnZhbGlkYXRlcGFnZSwKLQkucHJlcGFyZV93cml0ZQk9IGFmc19wcmVwYXJlX3dyaXRlLAotCS5jb21taXRfd3JpdGUJPSBhZnNfY29tbWl0X3dyaXRlLAorCS53cml0ZV9iZWdpbgk9IGFmc193cml0ZV9iZWdpbiwKKwkud3JpdGVfZW5kCT0gYWZzX3dyaXRlX2VuZCwKIAkud3JpdGVwYWdlCT0gYWZzX3dyaXRlcGFnZSwKIAkud3JpdGVwYWdlcwk9IGFmc193cml0ZXBhZ2VzLAogfTsKZGlmZiAtLWdpdCBhL2ZzL2Fmcy9pbnRlcm5hbC5oIGIvZnMvYWZzL2ludGVybmFsLmgKaW5kZXggM2NiNjkyMC4uNjdmMjU5ZCAxMDA2NDQKLS0tIGEvZnMvYWZzL2ludGVybmFsLmgKKysrIGIvZnMvYWZzL2ludGVybmFsLmgKQEAgLTcyOCw4ICs3MjgsMTIgQEAKICAqLwogZXh0ZXJuIGludCBhZnNfc2V0X3BhZ2VfZGlydHkoc3RydWN0IHBhZ2UgKik7CiBleHRlcm4gdm9pZCBhZnNfcHV0X3dyaXRlYmFjayhzdHJ1Y3QgYWZzX3dyaXRlYmFjayAqKTsKLWV4dGVybiBpbnQgYWZzX3ByZXBhcmVfd3JpdGUoc3RydWN0IGZpbGUgKiwgc3RydWN0IHBhZ2UgKiwgdW5zaWduZWQsIHVuc2lnbmVkKTsKLWV4dGVybiBpbnQgYWZzX2NvbW1pdF93cml0ZShzdHJ1Y3QgZmlsZSAqLCBzdHJ1Y3QgcGFnZSAqLCB1bnNpZ25lZCwgdW5zaWduZWQpOworZXh0ZXJuIGludCBhZnNfd3JpdGVfYmVnaW4oc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLAorCQkJbG9mZl90IHBvcywgdW5zaWduZWQgbGVuLCB1bnNpZ25lZCBmbGFncywKKwkJCXN0cnVjdCBwYWdlICoqcGFnZXAsIHZvaWQgKipmc2RhdGEpOworZXh0ZXJuIGludCBhZnNfd3JpdGVfZW5kKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywKKwkJCWxvZmZfdCBwb3MsIHVuc2lnbmVkIGxlbiwgdW5zaWduZWQgY29waWVkLAorCQkJc3RydWN0IHBhZ2UgKnBhZ2UsIHZvaWQgKmZzZGF0YSk7CiBleHRlcm4gaW50IGFmc193cml0ZXBhZ2Uoc3RydWN0IHBhZ2UgKiwgc3RydWN0IHdyaXRlYmFja19jb250cm9sICopOwogZXh0ZXJuIGludCBhZnNfd3JpdGVwYWdlcyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqLCBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKik7CiBleHRlcm4gaW50IGFmc193cml0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKiwgaW50KTsKZGlmZiAtLWdpdCBhL2ZzL2Fmcy9zdXBlci5jIGIvZnMvYWZzL3N1cGVyLmMKaW5kZXggMjUwZDhjNC4uYWVlMjM5YSAxMDA2NDQKLS0tIGEvZnMvYWZzL3N1cGVyLmMKKysrIGIvZnMvYWZzL3N1cGVyLmMKQEAgLTY0LDcgKzY0LDcgQEAKIAlhZnNfb3B0X3ZvbCwKIH07CiAKLXN0YXRpYyBtYXRjaF90YWJsZV90IGFmc19vcHRpb25zX2xpc3QgPSB7CitzdGF0aWMgY29uc3QgbWF0Y2hfdGFibGVfdCBhZnNfb3B0aW9uc19saXN0ID0gewogCXsgYWZzX29wdF9jZWxsLAkJImNlbGw9JXMiCX0sCiAJeyBhZnNfb3B0X3J3cGF0aCwJInJ3cGF0aCIJfSwKIAl7IGFmc19vcHRfdm9sLAkJInZvbD0lcyIJfSwKZGlmZiAtLWdpdCBhL2ZzL2Fmcy93cml0ZS5jIGIvZnMvYWZzL3dyaXRlLmMKaW5kZXggMDY1YjRlMS4uZDZiODVkYSAxMDA2NDQKLS0tIGEvZnMvYWZzL3dyaXRlLmMKKysrIGIvZnMvYWZzL3dyaXRlLmMKQEAgLTg0LDE1ICs4NCwyMyBAQAogICogcGFydGx5IG9yIHdob2xseSBmaWxsIGEgcGFnZSB0aGF0J3MgdW5kZXIgcHJlcGFyYXRpb24gZm9yIHdyaXRpbmcKICAqLwogc3RhdGljIGludCBhZnNfZmlsbF9wYWdlKHN0cnVjdCBhZnNfdm5vZGUgKnZub2RlLCBzdHJ1Y3Qga2V5ICprZXksCi0JCQkgdW5zaWduZWQgc3RhcnQsIHVuc2lnbmVkIGxlbiwgc3RydWN0IHBhZ2UgKnBhZ2UpCisJCQkgbG9mZl90IHBvcywgdW5zaWduZWQgbGVuLCBzdHJ1Y3QgcGFnZSAqcGFnZSkKIHsKKwlsb2ZmX3QgaV9zaXplOworCXVuc2lnbmVkIGVvZjsKIAlpbnQgcmV0OwogCi0JX2VudGVyKCIsLCV1LCV1Iiwgc3RhcnQsIGxlbik7CisJX2VudGVyKCIsLCVsbHUsJXUiLCAodW5zaWduZWQgbG9uZyBsb25nKXBvcywgbGVuKTsKIAotCUFTU0VSVENNUChzdGFydCArIGxlbiwgPD0sIFBBR0VfU0laRSk7CisJQVNTRVJUQ01QKGxlbiwgPD0sIFBBR0VfQ0FDSEVfU0laRSk7CiAKLQlyZXQgPSBhZnNfdm5vZGVfZmV0Y2hfZGF0YSh2bm9kZSwga2V5LCBzdGFydCwgbGVuLCBwYWdlKTsKKwlpX3NpemUgPSBpX3NpemVfcmVhZCgmdm5vZGUtPnZmc19pbm9kZSk7CisJaWYgKHBvcyArIGxlbiA+IGlfc2l6ZSkKKwkJZW9mID0gaV9zaXplOworCWVsc2UKKwkJZW9mID0gUEFHRV9DQUNIRV9TSVpFOworCisJcmV0ID0gYWZzX3Zub2RlX2ZldGNoX2RhdGEodm5vZGUsIGtleSwgMCwgZW9mLCBwYWdlKTsKIAlpZiAocmV0IDwgMCkgewogCQlpZiAocmV0ID09IC1FTk9FTlQpIHsKIAkJCV9kZWJ1ZygiZ290IE5PRU5UIGZyb20gc2VydmVyIgpAQCAtMTA3LDEwOSArMTE1LDU1IEBACiB9CiAKIC8qCi0gKiBwcmVwYXJlIGEgcGFnZSBmb3IgYmVpbmcgd3JpdHRlbiB0bwotICovCi1zdGF0aWMgaW50IGFmc19wcmVwYXJlX3BhZ2Uoc3RydWN0IGFmc192bm9kZSAqdm5vZGUsIHN0cnVjdCBwYWdlICpwYWdlLAotCQkJICAgIHN0cnVjdCBrZXkgKmtleSwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCB0bykKLXsKLQl1bnNpZ25lZCBlb2YsIHRhaWwsIHN0YXJ0LCBzdG9wLCBsZW47Ci0JbG9mZl90IGlfc2l6ZSwgcG9zOwotCXZvaWQgKnA7Ci0JaW50IHJldDsKLQotCV9lbnRlcigiIik7Ci0KLQlpZiAob2Zmc2V0ID09IDAgJiYgdG8gPT0gUEFHRV9TSVpFKQotCQlyZXR1cm4gMDsKLQotCXAgPSBrbWFwX2F0b21pYyhwYWdlLCBLTV9VU0VSMCk7Ci0KLQlpX3NpemUgPSBpX3NpemVfcmVhZCgmdm5vZGUtPnZmc19pbm9kZSk7Ci0JcG9zID0gKGxvZmZfdCkgcGFnZS0+aW5kZXggPDwgUEFHRV9TSElGVDsKLQlpZiAocG9zID49IGlfc2l6ZSkgewotCQkvKiBwYXJ0aWFsIHdyaXRlLCBwYWdlIGJleW9uZCBFT0YgKi8KLQkJX2RlYnVnKCJiZXlvbmQiKTsKLQkJaWYgKG9mZnNldCA+IDApCi0JCQltZW1zZXQocCwgMCwgb2Zmc2V0KTsKLQkJaWYgKHRvIDwgUEFHRV9TSVpFKQotCQkJbWVtc2V0KHAgKyB0bywgMCwgUEFHRV9TSVpFIC0gdG8pOwotCQlrdW5tYXBfYXRvbWljKHAsIEtNX1VTRVIwKTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JaWYgKGlfc2l6ZSAtIHBvcyA+PSBQQUdFX1NJWkUpIHsKLQkJLyogcGFydGlhbCB3cml0ZSwgcGFnZSBlbnRpcmVseSBiZWZvcmUgRU9GICovCi0JCV9kZWJ1ZygiYmVmb3JlIik7Ci0JCXRhaWwgPSBlb2YgPSBQQUdFX1NJWkU7Ci0JfSBlbHNlIHsKLQkJLyogcGFydGlhbCB3cml0ZSwgcGFnZSBvdmVybGFwcyBFT0YgKi8KLQkJZW9mID0gaV9zaXplIC0gcG9zOwotCQlfZGVidWcoIm92ZXJsYXAgJXUiLCBlb2YpOwotCQl0YWlsID0gbWF4KGVvZiwgdG8pOwotCQlpZiAodGFpbCA8IFBBR0VfU0laRSkKLQkJCW1lbXNldChwICsgdGFpbCwgMCwgUEFHRV9TSVpFIC0gdGFpbCk7Ci0JCWlmIChvZmZzZXQgPiBlb2YpCi0JCQltZW1zZXQocCArIGVvZiwgMCwgUEFHRV9TSVpFIC0gZW9mKTsKLQl9Ci0KLQlrdW5tYXBfYXRvbWljKHAsIEtNX1VTRVIwKTsKLQotCXJldCA9IDA7Ci0JaWYgKG9mZnNldCA+IDAgfHwgZW9mID4gdG8pIHsKLQkJLyogbmVlZCB0byBmaWxsIG9uZSBvciB0d28gYml0cyB0aGF0IGFyZW4ndCBnb2luZyB0byBiZSB3cml0dGVuCi0JCSAqIChjb3ZlciBib3RoIGZpbGxlcnMgaW4gb25lIHJlYWQgaWYgdGhlcmUgYXJlIHR3bykgKi8KLQkJc3RhcnQgPSAob2Zmc2V0ID4gMCkgPyAwIDogdG87Ci0JCXN0b3AgPSAoZW9mID4gdG8pID8gZW9mIDogb2Zmc2V0OwotCQlsZW4gPSBzdG9wIC0gc3RhcnQ7Ci0JCV9kZWJ1Zygid3I9JXUtJXUgYXY9MC0ldSByZD0ldUAldSIsCi0JCSAgICAgICBvZmZzZXQsIHRvLCBlb2YsIHN0YXJ0LCBsZW4pOwotCQlyZXQgPSBhZnNfZmlsbF9wYWdlKHZub2RlLCBrZXksIHN0YXJ0LCBsZW4sIHBhZ2UpOwotCX0KLQotCV9sZWF2ZSgiID0gJWQiLCByZXQpOwotCXJldHVybiByZXQ7Ci19Ci0KLS8qCiAgKiBwcmVwYXJlIHRvIHBlcmZvcm0gcGFydCBvZiBhIHdyaXRlIHRvIGEgcGFnZQotICogLSB0aGUgY2FsbGVyIGhvbGRzIHRoZSBwYWdlIGxvY2tlZCwgcHJldmVudGluZyBpdCBmcm9tIGJlaW5nIHdyaXR0ZW4gb3V0IG9yCi0gKiAgIG1vZGlmaWVkIGJ5IGFueW9uZSBlbHNlCiAgKi8KLWludCBhZnNfcHJlcGFyZV93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHBhZ2UgKnBhZ2UsCi0JCSAgICAgIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgdG8pCitpbnQgYWZzX3dyaXRlX2JlZ2luKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywKKwkJICAgIGxvZmZfdCBwb3MsIHVuc2lnbmVkIGxlbiwgdW5zaWduZWQgZmxhZ3MsCisJCSAgICBzdHJ1Y3QgcGFnZSAqKnBhZ2VwLCB2b2lkICoqZnNkYXRhKQogewogCXN0cnVjdCBhZnNfd3JpdGViYWNrICpjYW5kaWRhdGUsICp3YjsKIAlzdHJ1Y3QgYWZzX3Zub2RlICp2bm9kZSA9IEFGU19GU19JKGZpbGUtPmZfZGVudHJ5LT5kX2lub2RlKTsKKwlzdHJ1Y3QgcGFnZSAqcGFnZTsKIAlzdHJ1Y3Qga2V5ICprZXkgPSBmaWxlLT5wcml2YXRlX2RhdGE7Ci0JcGdvZmZfdCBpbmRleDsKKwl1bnNpZ25lZCBmcm9tID0gcG9zICYgKFBBR0VfQ0FDSEVfU0laRSAtIDEpOworCXVuc2lnbmVkIHRvID0gZnJvbSArIGxlbjsKKwlwZ29mZl90IGluZGV4ID0gcG9zID4+IFBBR0VfQ0FDSEVfU0hJRlQ7CiAJaW50IHJldDsKIAogCV9lbnRlcigieyV4OiV1fSx7JWx4fSwldSwldSIsCi0JICAgICAgIHZub2RlLT5maWQudmlkLCB2bm9kZS0+ZmlkLnZub2RlLCBwYWdlLT5pbmRleCwgb2Zmc2V0LCB0byk7CisJICAgICAgIHZub2RlLT5maWQudmlkLCB2bm9kZS0+ZmlkLnZub2RlLCBpbmRleCwgZnJvbSwgdG8pOwogCiAJY2FuZGlkYXRlID0ga3phbGxvYyhzaXplb2YoKmNhbmRpZGF0ZSksIEdGUF9LRVJORUwpOwogCWlmICghY2FuZGlkYXRlKQogCQlyZXR1cm4gLUVOT01FTTsKIAljYW5kaWRhdGUtPnZub2RlID0gdm5vZGU7Ci0JY2FuZGlkYXRlLT5maXJzdCA9IGNhbmRpZGF0ZS0+bGFzdCA9IHBhZ2UtPmluZGV4OwotCWNhbmRpZGF0ZS0+b2Zmc2V0X2ZpcnN0ID0gb2Zmc2V0OworCWNhbmRpZGF0ZS0+Zmlyc3QgPSBjYW5kaWRhdGUtPmxhc3QgPSBpbmRleDsKKwljYW5kaWRhdGUtPm9mZnNldF9maXJzdCA9IGZyb207CiAJY2FuZGlkYXRlLT50b19sYXN0ID0gdG87CiAJY2FuZGlkYXRlLT51c2FnZSA9IDE7CiAJY2FuZGlkYXRlLT5zdGF0ZSA9IEFGU19XQkFDS19QRU5ESU5HOwogCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmNhbmRpZGF0ZS0+d2FpdHEpOwogCisJcGFnZSA9IF9fZ3JhYl9jYWNoZV9wYWdlKG1hcHBpbmcsIGluZGV4KTsKKwlpZiAoIXBhZ2UpIHsKKwkJa2ZyZWUoY2FuZGlkYXRlKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCSpwYWdlcCA9IHBhZ2U7CisJLyogcGFnZSB3b24ndCBsZWFrIGluIGVycm9yIGNhc2U6IGl0IGV2ZW50dWFsbHkgZ2V0cyBjbGVhbmVkIG9mZiBMUlUgKi8KKwogCWlmICghUGFnZVVwdG9kYXRlKHBhZ2UpKSB7CiAJCV9kZWJ1Zygibm90IHVwIHRvIGRhdGUiKTsKLQkJcmV0ID0gYWZzX3ByZXBhcmVfcGFnZSh2bm9kZSwgcGFnZSwga2V5LCBvZmZzZXQsIHRvKTsKKwkJcmV0ID0gYWZzX2ZpbGxfcGFnZSh2bm9kZSwga2V5LCBwb3MsIGxlbiwgcGFnZSk7CiAJCWlmIChyZXQgPCAwKSB7CiAJCQlrZnJlZShjYW5kaWRhdGUpOwogCQkJX2xlYXZlKCIgPSAlZCBbcHJlcF0iLCByZXQpOwogCQkJcmV0dXJuIHJldDsKIAkJfQorCQlTZXRQYWdlVXB0b2RhdGUocGFnZSk7CiAJfQogCiB0cnlfYWdhaW46Ci0JaW5kZXggPSBwYWdlLT5pbmRleDsKIAlzcGluX2xvY2soJnZub2RlLT53cml0ZWJhY2tfbG9jayk7CiAKIAkvKiBzZWUgaWYgdGhpcyBwYWdlIGlzIGFscmVhZHkgcGVuZGluZyBhIHdyaXRlYmFjayB1bmRlciBhIHN1aXRhYmxlIGtleQpAQCAtMjQyLDggKzE5Niw4IEBACiBzdWJzdW1lX2luX2N1cnJlbnRfd2I6CiAJX2RlYnVnKCJzdWJzdW1lIik7CiAJQVNTRVJUUkFOR0Uod2ItPmZpcnN0LCA8PSwgaW5kZXgsIDw9LCB3Yi0+bGFzdCk7Ci0JaWYgKGluZGV4ID09IHdiLT5maXJzdCAmJiBvZmZzZXQgPCB3Yi0+b2Zmc2V0X2ZpcnN0KQotCQl3Yi0+b2Zmc2V0X2ZpcnN0ID0gb2Zmc2V0OworCWlmIChpbmRleCA9PSB3Yi0+Zmlyc3QgJiYgZnJvbSA8IHdiLT5vZmZzZXRfZmlyc3QpCisJCXdiLT5vZmZzZXRfZmlyc3QgPSBmcm9tOwogCWlmIChpbmRleCA9PSB3Yi0+bGFzdCAmJiB0byA+IHdiLT50b19sYXN0KQogCQl3Yi0+dG9fbGFzdCA9IHRvOwogCXNwaW5fdW5sb2NrKCZ2bm9kZS0+d3JpdGViYWNrX2xvY2spOwpAQCAtMjg5LDE3ICsyNDMsMTcgQEAKIC8qCiAgKiBmaW5hbGlzZSBwYXJ0IG9mIGEgd3JpdGUgdG8gYSBwYWdlCiAgKi8KLWludCBhZnNfY29tbWl0X3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgcGFnZSAqcGFnZSwKLQkJICAgICB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIHRvKQoraW50IGFmc193cml0ZV9lbmQoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLAorCQkgIGxvZmZfdCBwb3MsIHVuc2lnbmVkIGxlbiwgdW5zaWduZWQgY29waWVkLAorCQkgIHN0cnVjdCBwYWdlICpwYWdlLCB2b2lkICpmc2RhdGEpCiB7CiAJc3RydWN0IGFmc192bm9kZSAqdm5vZGUgPSBBRlNfRlNfSShmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZSk7CiAJbG9mZl90IGlfc2l6ZSwgbWF5YmVfaV9zaXplOwogCi0JX2VudGVyKCJ7JXg6JXV9LHslbHh9LCV1LCV1IiwKLQkgICAgICAgdm5vZGUtPmZpZC52aWQsIHZub2RlLT5maWQudm5vZGUsIHBhZ2UtPmluZGV4LCBvZmZzZXQsIHRvKTsKKwlfZW50ZXIoInsleDoldX0seyVseH0iLAorCSAgICAgICB2bm9kZS0+ZmlkLnZpZCwgdm5vZGUtPmZpZC52bm9kZSwgcGFnZS0+aW5kZXgpOwogCi0JbWF5YmVfaV9zaXplID0gKGxvZmZfdCkgcGFnZS0+aW5kZXggPDwgUEFHRV9TSElGVDsKLQltYXliZV9pX3NpemUgKz0gdG87CisJbWF5YmVfaV9zaXplID0gcG9zICsgY29waWVkOwogCiAJaV9zaXplID0gaV9zaXplX3JlYWQoJnZub2RlLT52ZnNfaW5vZGUpOwogCWlmIChtYXliZV9pX3NpemUgPiBpX3NpemUpIHsKQEAgLTMxMCwxMiArMjY0LDEzIEBACiAJCXNwaW5fdW5sb2NrKCZ2bm9kZS0+d3JpdGViYWNrX2xvY2spOwogCX0KIAotCVNldFBhZ2VVcHRvZGF0ZShwYWdlKTsKIAlzZXRfcGFnZV9kaXJ0eShwYWdlKTsKIAlpZiAoUGFnZURpcnR5KHBhZ2UpKQogCQlfZGVidWcoImRpcnRpZWQiKTsKKwl1bmxvY2tfcGFnZShwYWdlKTsKKwlwYWdlX2NhY2hlX3JlbGVhc2UocGFnZSk7CiAKLQlyZXR1cm4gMDsKKwlyZXR1cm4gY29waWVkOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvZnMvYXV0b2ZzL2lub2RlLmMgYi9mcy9hdXRvZnMvaW5vZGUuYwppbmRleCBkZGE1MTBkLi5iNzBlZWExIDEwMDY0NAotLS0gYS9mcy9hdXRvZnMvaW5vZGUuYworKysgYi9mcy9hdXRvZnMvaW5vZGUuYwpAQCAtNTksNyArNTksNyBAQAogCiBlbnVtIHtPcHRfZXJyLCBPcHRfZmQsIE9wdF91aWQsIE9wdF9naWQsIE9wdF9wZ3JwLCBPcHRfbWlucHJvdG8sIE9wdF9tYXhwcm90b307CiAKLXN0YXRpYyBtYXRjaF90YWJsZV90IGF1dG9mc190b2tlbnMgPSB7CitzdGF0aWMgY29uc3QgbWF0Y2hfdGFibGVfdCBhdXRvZnNfdG9rZW5zID0gewogCXtPcHRfZmQsICJmZD0ldSJ9LAogCXtPcHRfdWlkLCAidWlkPSV1In0sCiAJe09wdF9naWQsICJnaWQ9JXUifSwKZGlmZiAtLWdpdCBhL2ZzL2F1dG9mczQvTWFrZWZpbGUgYi9mcy9hdXRvZnM0L01ha2VmaWxlCmluZGV4IGYyYzNiNzkuLmE4MTFjMWYgMTAwNjQ0Ci0tLSBhL2ZzL2F1dG9mczQvTWFrZWZpbGUKKysrIGIvZnMvYXV0b2ZzNC9NYWtlZmlsZQpAQCAtNCw0ICs0LDQgQEAKIAogb2JqLSQoQ09ORklHX0FVVE9GUzRfRlMpICs9IGF1dG9mczQubwogCi1hdXRvZnM0LW9ianMgOj0gaW5pdC5vIGlub2RlLm8gcm9vdC5vIHN5bWxpbmsubyB3YWl0cS5vIGV4cGlyZS5vCithdXRvZnM0LW9ianMgOj0gaW5pdC5vIGlub2RlLm8gcm9vdC5vIHN5bWxpbmsubyB3YWl0cS5vIGV4cGlyZS5vIGRldi1pb2N0bC5vCmRpZmYgLS1naXQgYS9mcy9hdXRvZnM0L2F1dG9mc19pLmggYi9mcy9hdXRvZnM0L2F1dG9mc19pLmgKaW5kZXggNjlhMmY1Yy4uZTBmMTZkYSAxMDA2NDQKLS0tIGEvZnMvYXV0b2ZzNC9hdXRvZnNfaS5oCisrKyBiL2ZzL2F1dG9mczQvYXV0b2ZzX2kuaApAQCAtMTQsNiArMTQsNyBAQAogLyogSW50ZXJuYWwgaGVhZGVyIGZpbGUgZm9yIGF1dG9mcyAqLwogCiAjaW5jbHVkZSA8bGludXgvYXV0b19mczQuaD4KKyNpbmNsdWRlIDxsaW51eC9hdXRvX2Rldi1pb2N0bC5oPgogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgogCkBAIC0yMSw2ICsyMiwxMSBAQAogI2RlZmluZSBBVVRPRlNfSU9DX0ZJUlNUICAgICBBVVRPRlNfSU9DX1JFQURZCiAjZGVmaW5lIEFVVE9GU19JT0NfQ09VTlQgICAgIDMyCiAKKyNkZWZpbmUgQVVUT0ZTX0RFVl9JT0NUTF9JT0NfRklSU1QJKEFVVE9GU19ERVZfSU9DVExfVkVSU0lPTikKKyNkZWZpbmUgQVVUT0ZTX0RFVl9JT0NUTF9JT0NfQ09VTlQJKEFVVE9GU19JT0NfQ09VTlQgLSAxMSkKKworI2RlZmluZSBBVVRPRlNfVFlQRV9UUklHR0VSCShBVVRPRlNfVFlQRV9ESVJFQ1R8QVVUT0ZTX1RZUEVfT0ZGU0VUKQorCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KQEAgLTM1LDExICs0MSwyNyBAQAogLyogI2RlZmluZSBERUJVRyAqLwogCiAjaWZkZWYgREVCVUcKLSNkZWZpbmUgRFBSSU5USyhmbXQsYXJncy4uLikgZG8geyBwcmludGsoS0VSTl9ERUJVRyAicGlkICVkOiAlczogIiBmbXQgIlxuIiAsIGN1cnJlbnQtPnBpZCAsIF9fZnVuY19fICwgIyNhcmdzKTsgfSB3aGlsZSgwKQorI2RlZmluZSBEUFJJTlRLKGZtdCwgYXJncy4uLikJCQkJXAorZG8gewkJCQkJCQlcCisJcHJpbnRrKEtFUk5fREVCVUcgInBpZCAlZDogJXM6ICIgZm10ICJcbiIsCVwKKwkJY3VycmVudC0+cGlkLCBfX2Z1bmNfXywgIyNhcmdzKTsJXAorfSB3aGlsZSAoMCkKICNlbHNlCi0jZGVmaW5lIERQUklOVEsoZm10LGFyZ3MuLi4pIGRvIHt9IHdoaWxlKDApCisjZGVmaW5lIERQUklOVEsoZm10LCBhcmdzLi4uKSBkbyB7fSB3aGlsZSAoMCkKICNlbmRpZgogCisjZGVmaW5lIEFVVE9GU19XQVJOKGZtdCwgYXJncy4uLikJCQlcCitkbyB7CQkJCQkJCVwKKwlwcmludGsoS0VSTl9XQVJOSU5HICJwaWQgJWQ6ICVzOiAiIGZtdCAiXG4iLAlcCisJCWN1cnJlbnQtPnBpZCwgX19mdW5jX18sICMjYXJncyk7CVwKK30gd2hpbGUgKDApCisKKyNkZWZpbmUgQVVUT0ZTX0VSUk9SKGZtdCwgYXJncy4uLikJCQlcCitkbyB7CQkJCQkJCVwKKwlwcmludGsoS0VSTl9FUlIgInBpZCAlZDogJXM6ICIgZm10ICJcbiIsCVwKKwkJY3VycmVudC0+cGlkLCBfX2Z1bmNfXywgIyNhcmdzKTsJXAorfSB3aGlsZSAoMCkKKwogLyogVW5pZmllZCBpbmZvIHN0cnVjdHVyZS4gIFRoaXMgaXMgcG9pbnRlZCB0byBieSBib3RoIHRoZSBkZW50cnkgYW5kCiAgICBpbm9kZSBzdHJ1Y3R1cmVzLiAgRWFjaCBmaWxlIGluIHRoZSBmaWxlc3lzdGVtIGhhcyBhbiBpbnN0YW5jZSBvZiB0aGlzCiAgICBzdHJ1Y3R1cmUuICBJdCBob2xkcyBhIHJlZmVyZW5jZSB0byB0aGUgZGVudHJ5LCBzbyBkZW50cmllcyBhcmUgbmV2ZXIKQEAgLTYxLDYgKzgzLDkgQEAKIAl1bnNpZ25lZCBsb25nIGxhc3RfdXNlZDsKIAlhdG9taWNfdCBjb3VudDsKIAorCXVpZF90IHVpZDsKKwlnaWRfdCBnaWQ7CisKIAltb2RlX3QJbW9kZTsKIAlzaXplX3QJc2l6ZTsKIApAQCAtOTIsMTAgKzExNyw2IEBACiAKICNkZWZpbmUgQVVUT0ZTX1NCSV9NQUdJQyAweDZkNGE1NTZkCiAKLSNkZWZpbmUgQVVUT0ZTX1RZUEVfSU5ESVJFQ1QgICAgIDB4MDAwMQotI2RlZmluZSBBVVRPRlNfVFlQRV9ESVJFQ1QgICAgICAgMHgwMDAyCi0jZGVmaW5lIEFVVE9GU19UWVBFX09GRlNFVCAgICAgICAweDAwMDQKLQogc3RydWN0IGF1dG9mc19zYl9pbmZvIHsKIAl1MzIgbWFnaWM7CiAJaW50IHBpcGVmZDsKQEAgLTE2OSw2ICsxOTAsMTcgQEAKIAkJCXN0cnVjdCBhdXRvZnNfcGFja2V0X2V4cGlyZSBfX3VzZXIgKik7CiBpbnQgYXV0b2ZzNF9leHBpcmVfbXVsdGkoc3RydWN0IHN1cGVyX2Jsb2NrICosIHN0cnVjdCB2ZnNtb3VudCAqLAogCQkJc3RydWN0IGF1dG9mc19zYl9pbmZvICosIGludCBfX3VzZXIgKik7CitzdHJ1Y3QgZGVudHJ5ICphdXRvZnM0X2V4cGlyZV9kaXJlY3Qoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwKKwkJCQkgICAgIHN0cnVjdCB2ZnNtb3VudCAqbW50LAorCQkJCSAgICAgc3RydWN0IGF1dG9mc19zYl9pbmZvICpzYmksIGludCBob3cpOworc3RydWN0IGRlbnRyeSAqYXV0b2ZzNF9leHBpcmVfaW5kaXJlY3Qoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwKKwkJCQkgICAgICAgc3RydWN0IHZmc21vdW50ICptbnQsCisJCQkJICAgICAgIHN0cnVjdCBhdXRvZnNfc2JfaW5mbyAqc2JpLCBpbnQgaG93KTsKKworLyogRGV2aWNlIG5vZGUgaW5pdGlhbGl6YXRpb24gKi8KKworaW50IGF1dG9mc19kZXZfaW9jdGxfaW5pdCh2b2lkKTsKK3ZvaWQgYXV0b2ZzX2Rldl9pb2N0bF9leGl0KHZvaWQpOwogCiAvKiBPcGVyYXRpb25zIHN0cnVjdHVyZXMgKi8KIApkaWZmIC0tZ2l0IGEvZnMvYXV0b2ZzNC9kZXYtaW9jdGwuYyBiL2ZzL2F1dG9mczQvZGV2LWlvY3RsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjI1YWJmNQotLS0gL2Rldi9udWxsCisrKyBiL2ZzL2F1dG9mczQvZGV2LWlvY3RsLmMKQEAgLTAsMCArMSw4NjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwOCBSZWQgSGF0LCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgMjAwOCBJYW4gS2VudCA8cmF2ZW5AdGhlbWF3Lm5ldD4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgTGludXgga2VybmVsIGFuZCBpcyBtYWRlIGF2YWlsYWJsZSB1bmRlcgorICogdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgdmVyc2lvbiAyLCBvciBhdCB5b3VyCisgKiBvcHRpb24sIGFueSBsYXRlciB2ZXJzaW9uLCBpbmNvcnBvcmF0ZWQgaGVyZWluIGJ5IHJlZmVyZW5jZS4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgorI2luY2x1ZGUgPGxpbnV4L21pc2NkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvd2FpdC5oPgorI2luY2x1ZGUgPGxpbnV4L25hbWVpLmg+CisjaW5jbHVkZSA8bGludXgvZmNudGwuaD4KKyNpbmNsdWRlIDxsaW51eC9maWxlLmg+CisjaW5jbHVkZSA8bGludXgvZmR0YWJsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvY29tcGF0Lmg+CisjaW5jbHVkZSA8bGludXgvc3lzY2FsbHMuaD4KKyNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L21hZ2ljLmg+CisjaW5jbHVkZSA8bGludXgvZGNhY2hlLmg+CisjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgorCisjaW5jbHVkZSAiYXV0b2ZzX2kuaCIKKworLyoKKyAqIFRoaXMgbW9kdWxlIGltcGxlbWVudHMgYW4gaW50ZXJmYWNlIGZvciByb3V0aW5nIGF1dG9mcyBpb2N0bCBjb250cm9sCisgKiBjb21tYW5kcyB2aWEgYSBtaXNjZWxsYW5lb3VzIGRldmljZSBmaWxlLgorICoKKyAqIFRoZSBhbHRlcm5hdGUgaW50ZXJmYWNlIGlzIG5lZWRlZCBiZWNhdXNlIHdlIG5lZWQgdG8gYmUgYWJsZSBvcGVuCisgKiBhbiBpb2N0bCBmaWxlIGRlc2NyaXB0b3Igb24gYW4gYXV0b2ZzIG1vdW50IHRoYXQgbWF5IGJlIGNvdmVyZWQgYnkKKyAqIGFub3RoZXIgbW91bnQuIFRoaXMgc2l0dWF0aW9uIGFyaXNlcyB3aGVuIHN0YXJ0aW5nIGF1dG9tb3VudCg4KQorICogb3Igb3RoZXIgdXNlciBzcGFjZSBkYWVtb24gd2hpY2ggdXNlcyBkaXJlY3QgbW91bnRzIG9yIG9mZnNldAorICogbW91bnRzICh1c2VkIGZvciBhdXRvZnMgbGF6eSBtb3VudC91bW91bnQgb2YgbmVzdGVkIG1vdW50IHRyZWVzKSwKKyAqIHdoaWNoIGhhdmUgYmVlbiBsZWZ0IGJ1c3kgYXQgYXQgc2VydmljZSBzaHV0ZG93bi4KKyAqLworCisjZGVmaW5lIEFVVE9GU19ERVZfSU9DVExfU0laRQlzaXplb2Yoc3RydWN0IGF1dG9mc19kZXZfaW9jdGwpCisKK3R5cGVkZWYgaW50ICgqaW9jdGxfZm4pKHN0cnVjdCBmaWxlICosIHN0cnVjdCBhdXRvZnNfc2JfaW5mbyAqLAorCQkJc3RydWN0IGF1dG9mc19kZXZfaW9jdGwgKik7CisKK3N0YXRpYyBpbnQgY2hlY2tfbmFtZShjb25zdCBjaGFyICpuYW1lKQoreworCWlmICghc3RyY2hyKG5hbWUsICcvJykpCisJCXJldHVybiAtRUlOVkFMOworCXJldHVybiAwOworfQorCisvKgorICogQ2hlY2sgYSBzdHJpbmcgZG9lc24ndCBvdmVycnVuIHRoZSBjaHVuayBvZgorICogbWVtb3J5IHdlIGNvcGllZCBmcm9tIHVzZXIgbGFuZC4KKyAqLworc3RhdGljIGludCBpbnZhbGlkX3N0cihjaGFyICpzdHIsIHZvaWQgKmVuZCkKK3sKKwl3aGlsZSAoKHZvaWQgKikgc3RyIDw9IGVuZCkKKwkJaWYgKCEqc3RyKyspCisJCQlyZXR1cm4gMDsKKwlyZXR1cm4gLUVJTlZBTDsKK30KKworLyoKKyAqIENoZWNrIHRoYXQgdGhlIHVzZXIgY29tcGlsZWQgYWdhaW5zdCBjb3JyZWN0IHZlcnNpb24gb2YgYXV0b2ZzCisgKiBtaXNjIGRldmljZSBjb2RlLgorICoKKyAqIEFzIHdlbGwgYXMgY2hlY2tpbmcgdGhlIHZlcnNpb24gY29tcGF0aWJpbGl0eSB0aGlzIGFsd2F5cyBjb3BpZXMKKyAqIHRoZSBrZXJuZWwgaW50ZXJmYWNlIHZlcnNpb24gb3V0LgorICovCitzdGF0aWMgaW50IGNoZWNrX2Rldl9pb2N0bF92ZXJzaW9uKGludCBjbWQsIHN0cnVjdCBhdXRvZnNfZGV2X2lvY3RsICpwYXJhbSkKK3sKKwlpbnQgZXJyID0gMDsKKworCWlmICgoQVVUT0ZTX0RFVl9JT0NUTF9WRVJTSU9OX01BSk9SICE9IHBhcmFtLT52ZXJfbWFqb3IpIHx8CisJICAgIChBVVRPRlNfREVWX0lPQ1RMX1ZFUlNJT05fTUlOT1IgPCBwYXJhbS0+dmVyX21pbm9yKSkgeworCQlBVVRPRlNfV0FSTigiaW9jdGwgY29udHJvbCBpbnRlcmZhY2UgdmVyc2lvbiBtaXNtYXRjaDogIgorCQkgICAgICJrZXJuZWwoJXUuJXUpLCB1c2VyKCV1LiV1KSwgY21kKCVkKSIsCisJCSAgICAgQVVUT0ZTX0RFVl9JT0NUTF9WRVJTSU9OX01BSk9SLAorCQkgICAgIEFVVE9GU19ERVZfSU9DVExfVkVSU0lPTl9NSU5PUiwKKwkJICAgICBwYXJhbS0+dmVyX21ham9yLCBwYXJhbS0+dmVyX21pbm9yLCBjbWQpOworCQllcnIgPSAtRUlOVkFMOworCX0KKworCS8qIEZpbGwgaW4gdGhlIGtlcm5lbCB2ZXJzaW9uLiAqLworCXBhcmFtLT52ZXJfbWFqb3IgPSBBVVRPRlNfREVWX0lPQ1RMX1ZFUlNJT05fTUFKT1I7CisJcGFyYW0tPnZlcl9taW5vciA9IEFVVE9GU19ERVZfSU9DVExfVkVSU0lPTl9NSU5PUjsKKworCXJldHVybiBlcnI7Cit9CisKKy8qCisgKiBDb3B5IHBhcmFtZXRlciBjb250cm9sIHN0cnVjdCwgaW5jbHVkaW5nIGEgcG9zc2libGUgcGF0aCBhbGxvY2F0ZWQKKyAqIGF0IHRoZSBlbmQgb2YgdGhlIHN0cnVjdC4KKyAqLworc3RhdGljIHN0cnVjdCBhdXRvZnNfZGV2X2lvY3RsICpjb3B5X2Rldl9pb2N0bChzdHJ1Y3QgYXV0b2ZzX2Rldl9pb2N0bCBfX3VzZXIgKmluKQoreworCXN0cnVjdCBhdXRvZnNfZGV2X2lvY3RsIHRtcCwgKmFkczsKKworCWlmIChjb3B5X2Zyb21fdXNlcigmdG1wLCBpbiwgc2l6ZW9mKHRtcCkpKQorCQlyZXR1cm4gRVJSX1BUUigtRUZBVUxUKTsKKworCWlmICh0bXAuc2l6ZSA8IHNpemVvZih0bXApKQorCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKKworCWFkcyA9IGttYWxsb2ModG1wLnNpemUsIEdGUF9LRVJORUwpOworCWlmICghYWRzKQorCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKKworCWlmIChjb3B5X2Zyb21fdXNlcihhZHMsIGluLCB0bXAuc2l6ZSkpIHsKKwkJa2ZyZWUoYWRzKTsKKwkJcmV0dXJuIEVSUl9QVFIoLUVGQVVMVCk7CisJfQorCisJcmV0dXJuIGFkczsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGZyZWVfZGV2X2lvY3RsKHN0cnVjdCBhdXRvZnNfZGV2X2lvY3RsICpwYXJhbSkKK3sKKwlrZnJlZShwYXJhbSk7CisJcmV0dXJuOworfQorCisvKgorICogQ2hlY2sgc2FuaXR5IG9mIHBhcmFtZXRlciBjb250cm9sIGZpZWxkcyBhbmQgaWYgYSBwYXRoIGlzIHByZXNlbnQKKyAqIGNoZWNrIHRoYXQgaXQgaGFzIGEgIi8iIGFuZCBpcyB0ZXJtaW5hdGVkLgorICovCitzdGF0aWMgaW50IHZhbGlkYXRlX2Rldl9pb2N0bChpbnQgY21kLCBzdHJ1Y3QgYXV0b2ZzX2Rldl9pb2N0bCAqcGFyYW0pCit7CisJaW50IGVyciA9IC1FSU5WQUw7CisKKwlpZiAoY2hlY2tfZGV2X2lvY3RsX3ZlcnNpb24oY21kLCBwYXJhbSkpIHsKKwkJQVVUT0ZTX1dBUk4oImludmFsaWQgZGV2aWNlIGNvbnRyb2wgbW9kdWxlIHZlcnNpb24gIgorCQkgICAgICJzdXBwbGllZCBmb3IgY21kKDB4JTA4eCkiLCBjbWQpOworCQlnb3RvIG91dDsKKwl9CisKKwlpZiAocGFyYW0tPnNpemUgPiBzaXplb2YoKnBhcmFtKSkgeworCQllcnIgPSBjaGVja19uYW1lKHBhcmFtLT5wYXRoKTsKKwkJaWYgKGVycikgeworCQkJQVVUT0ZTX1dBUk4oImludmFsaWQgcGF0aCBzdXBwbGllZCBmb3IgY21kKDB4JTA4eCkiLAorCQkJCSAgICBjbWQpOworCQkJZ290byBvdXQ7CisJCX0KKworCQllcnIgPSBpbnZhbGlkX3N0cihwYXJhbS0+cGF0aCwKKwkJCQkgKHZvaWQgKikgKChzaXplX3QpIHBhcmFtICsgcGFyYW0tPnNpemUpKTsKKwkJaWYgKGVycikgeworCQkJQVVUT0ZTX1dBUk4oImludmFsaWQgcGF0aCBzdXBwbGllZCBmb3IgY21kKDB4JTA4eCkiLAorCQkJCSAgICBjbWQpOworCQkJZ290byBvdXQ7CisJCX0KKwl9CisKKwllcnIgPSAwOworb3V0OgorCXJldHVybiBlcnI7Cit9CisKKy8qCisgKiBHZXQgdGhlIGF1dG9mcyBzdXBlciBibG9jayBpbmZvIHN0cnVjdCBmcm9tIHRoZSBmaWxlIG9wZW5lZCBvbgorICogdGhlIGF1dG9mcyBtb3VudCBwb2ludC4KKyAqLworc3RhdGljIHN0cnVjdCBhdXRvZnNfc2JfaW5mbyAqYXV0b2ZzX2Rldl9pb2N0bF9zYmkoc3RydWN0IGZpbGUgKmYpCit7CisJc3RydWN0IGF1dG9mc19zYl9pbmZvICpzYmkgPSBOVUxMOworCXN0cnVjdCBpbm9kZSAqaW5vZGU7CisKKwlpZiAoZikgeworCQlpbm9kZSA9IGYtPmZfcGF0aC5kZW50cnktPmRfaW5vZGU7CisJCXNiaSA9IGF1dG9mczRfc2JpKGlub2RlLT5pX3NiKTsKKwl9CisJcmV0dXJuIHNiaTsKK30KKworLyogUmV0dXJuIGF1dG9mcyBtb2R1bGUgcHJvdG9jb2wgdmVyc2lvbiAqLworc3RhdGljIGludCBhdXRvZnNfZGV2X2lvY3RsX3Byb3RvdmVyKHN0cnVjdCBmaWxlICpmcCwKKwkJCQkgICAgIHN0cnVjdCBhdXRvZnNfc2JfaW5mbyAqc2JpLAorCQkJCSAgICAgc3RydWN0IGF1dG9mc19kZXZfaW9jdGwgKnBhcmFtKQoreworCXBhcmFtLT5hcmcxID0gc2JpLT52ZXJzaW9uOworCXJldHVybiAwOworfQorCisvKiBSZXR1cm4gYXV0b2ZzIG1vZHVsZSBwcm90b2NvbCBzdWIgdmVyc2lvbiAqLworc3RhdGljIGludCBhdXRvZnNfZGV2X2lvY3RsX3Byb3Rvc3VidmVyKHN0cnVjdCBmaWxlICpmcCwKKwkJCQkJc3RydWN0IGF1dG9mc19zYl9pbmZvICpzYmksCisJCQkJCXN0cnVjdCBhdXRvZnNfZGV2X2lvY3RsICpwYXJhbSkKK3sKKwlwYXJhbS0+YXJnMSA9IHNiaS0+c3ViX3ZlcnNpb247CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBXYWxrIGRvd24gdGhlIG1vdW50IHN0YWNrIGxvb2tpbmcgZm9yIGFuIGF1dG9mcyBtb3VudCB0aGF0CisgKiBoYXMgdGhlIHJlcXVlc3RlZCBkZXZpY2UgbnVtYmVyIChha2EuIG5ld19lbmNvZGVfZGV2KHNiLT5zX2RldikuCisgKi8KK3N0YXRpYyBpbnQgYXV0b2ZzX2Rldl9pb2N0bF9maW5kX3N1cGVyKHN0cnVjdCBuYW1laWRhdGEgKm5kLCBkZXZfdCBkZXZubykKK3sKKwlzdHJ1Y3QgZGVudHJ5ICpkZW50cnk7CisJc3RydWN0IGlub2RlICppbm9kZTsKKwlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiOworCWRldl90IHNfZGV2OworCXVuc2lnbmVkIGludCBlcnI7CisKKwllcnIgPSAtRU5PRU5UOworCisJLyogTG9va3VwIHRoZSBkZW50cnkgbmFtZSBhdCB0aGUgYmFzZSBvZiBvdXIgbW91bnQgcG9pbnQgKi8KKwlkZW50cnkgPSBkX2xvb2t1cChuZC0+cGF0aC5kZW50cnksICZuZC0+bGFzdCk7CisJaWYgKCFkZW50cnkpCisJCWdvdG8gb3V0OworCisJZHB1dChuZC0+cGF0aC5kZW50cnkpOworCW5kLT5wYXRoLmRlbnRyeSA9IGRlbnRyeTsKKworCS8qIEFuZCBmb2xsb3cgdGhlIG1vdW50IHN0YWNrIGxvb2tpbmcgZm9yIG91ciBhdXRvZnMgbW91bnQgKi8KKwl3aGlsZSAoZm9sbG93X2Rvd24oJm5kLT5wYXRoLm1udCwgJm5kLT5wYXRoLmRlbnRyeSkpIHsKKwkJaW5vZGUgPSBuZC0+cGF0aC5kZW50cnktPmRfaW5vZGU7CisJCWlmICghaW5vZGUpCisJCQlicmVhazsKKworCQlzYiA9IGlub2RlLT5pX3NiOworCQlzX2RldiA9IG5ld19lbmNvZGVfZGV2KHNiLT5zX2Rldik7CisJCWlmIChkZXZubyA9PSBzX2RldikgeworCQkJaWYgKHNiLT5zX21hZ2ljID09IEFVVE9GU19TVVBFUl9NQUdJQykgeworCQkJCWVyciA9IDA7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwl9CitvdXQ6CisJcmV0dXJuIGVycjsKK30KKworLyoKKyAqIFdhbGsgZG93biB0aGUgbW91bnQgc3RhY2sgbG9va2luZyBmb3IgYW4gYXV0b2ZzIG1vdW50IHRoYXQKKyAqIGhhcyB0aGUgcmVxdWVzdGVkIG1vdW50IHR5cGUgKGllLiBpbmRpcmVjdCwgZGlyZWN0IG9yIG9mZnNldCkuCisgKi8KK3N0YXRpYyBpbnQgYXV0b2ZzX2Rldl9pb2N0bF9maW5kX3NiaV90eXBlKHN0cnVjdCBuYW1laWRhdGEgKm5kLCB1bnNpZ25lZCBpbnQgdHlwZSkKK3sKKwlzdHJ1Y3QgZGVudHJ5ICpkZW50cnk7CisJc3RydWN0IGF1dG9mc19pbmZvICppbm87CisJdW5zaWduZWQgaW50IGVycjsKKworCWVyciA9IC1FTk9FTlQ7CisKKwkvKiBMb29rdXAgdGhlIGRlbnRyeSBuYW1lIGF0IHRoZSBiYXNlIG9mIG91ciBtb3VudCBwb2ludCAqLworCWRlbnRyeSA9IGRfbG9va3VwKG5kLT5wYXRoLmRlbnRyeSwgJm5kLT5sYXN0KTsKKwlpZiAoIWRlbnRyeSkKKwkJZ290byBvdXQ7CisKKwlkcHV0KG5kLT5wYXRoLmRlbnRyeSk7CisJbmQtPnBhdGguZGVudHJ5ID0gZGVudHJ5OworCisJLyogQW5kIGZvbGxvdyB0aGUgbW91bnQgc3RhY2sgbG9va2luZyBmb3Igb3VyIGF1dG9mcyBtb3VudCAqLworCXdoaWxlIChmb2xsb3dfZG93bigmbmQtPnBhdGgubW50LCAmbmQtPnBhdGguZGVudHJ5KSkgeworCQlpbm8gPSBhdXRvZnM0X2RlbnRyeV9pbm8obmQtPnBhdGguZGVudHJ5KTsKKwkJaWYgKGlubyAmJiBpbm8tPnNiaS0+dHlwZSAmIHR5cGUpIHsKKwkJCWVyciA9IDA7CisJCQlicmVhazsKKwkJfQorCX0KK291dDoKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgdm9pZCBhdXRvZnNfZGV2X2lvY3RsX2ZkX2luc3RhbGwodW5zaWduZWQgaW50IGZkLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlzdHJ1Y3QgZmlsZXNfc3RydWN0ICpmaWxlcyA9IGN1cnJlbnQtPmZpbGVzOworCXN0cnVjdCBmZHRhYmxlICpmZHQ7CisKKwlzcGluX2xvY2soJmZpbGVzLT5maWxlX2xvY2spOworCWZkdCA9IGZpbGVzX2ZkdGFibGUoZmlsZXMpOworCUJVR19PTihmZHQtPmZkW2ZkXSAhPSBOVUxMKTsKKwlyY3VfYXNzaWduX3BvaW50ZXIoZmR0LT5mZFtmZF0sIGZpbGUpOworCUZEX1NFVChmZCwgZmR0LT5jbG9zZV9vbl9leGVjKTsKKwlzcGluX3VubG9jaygmZmlsZXMtPmZpbGVfbG9jayk7Cit9CisKKworLyoKKyAqIE9wZW4gYSBmaWxlIGRlc2NyaXB0b3Igb24gdGhlIGF1dG9mcyBtb3VudCBwb2ludCBjb3JyZXNwb25kaW5nCisgKiB0byB0aGUgZ2l2ZW4gcGF0aCBhbmQgZGV2aWNlIG51bWJlciAoYWthLiBuZXdfZW5jb2RlX2RldihzYi0+c19kZXYpKS4KKyAqLworc3RhdGljIGludCBhdXRvZnNfZGV2X2lvY3RsX29wZW5fbW91bnRwb2ludChjb25zdCBjaGFyICpwYXRoLCBkZXZfdCBkZXZpZCkKK3sKKwlzdHJ1Y3QgZmlsZSAqZmlscDsKKwlzdHJ1Y3QgbmFtZWlkYXRhIG5kOworCWludCBlcnIsIGZkOworCisJZmQgPSBnZXRfdW51c2VkX2ZkKCk7CisJaWYgKGxpa2VseShmZCA+PSAwKSkgeworCQkvKiBHZXQgbmFtZWlkYXRhIG9mIHRoZSBwYXJlbnQgZGlyZWN0b3J5ICovCisJCWVyciA9IHBhdGhfbG9va3VwKHBhdGgsIExPT0tVUF9QQVJFTlQsICZuZCk7CisJCWlmIChlcnIpCisJCQlnb3RvIG91dDsKKworCQkvKgorCQkgKiBTZWFyY2ggZG93biwgd2l0aGluIHRoZSBwYXJlbnQsIGxvb2tpbmcgZm9yIGFuCisJCSAqIGF1dG9mcyBzdXBlciBibG9jayB0aGF0IGhhcyB0aGUgZGV2aWNlIG51bWJlcgorCQkgKiBjb3JyZXNwb25kaW5nIHRvIHRoZSBhdXRvZnMgZnMgd2Ugd2FudCB0byBvcGVuLgorCQkgKi8KKwkJZXJyID0gYXV0b2ZzX2Rldl9pb2N0bF9maW5kX3N1cGVyKCZuZCwgZGV2aWQpOworCQlpZiAoZXJyKSB7CisJCQlwYXRoX3B1dCgmbmQucGF0aCk7CisJCQlnb3RvIG91dDsKKwkJfQorCisJCWZpbHAgPSBkZW50cnlfb3BlbihuZC5wYXRoLmRlbnRyeSwgbmQucGF0aC5tbnQsIE9fUkRPTkxZKTsKKwkJaWYgKElTX0VSUihmaWxwKSkgeworCQkJZXJyID0gUFRSX0VSUihmaWxwKTsKKwkJCWdvdG8gb3V0OworCQl9CisKKwkJYXV0b2ZzX2Rldl9pb2N0bF9mZF9pbnN0YWxsKGZkLCBmaWxwKTsKKwl9CisKKwlyZXR1cm4gZmQ7CisKK291dDoKKwlwdXRfdW51c2VkX2ZkKGZkKTsKKwlyZXR1cm4gZXJyOworfQorCisvKiBPcGVuIGEgZmlsZSBkZXNjcmlwdG9yIG9uIGFuIGF1dG9mcyBtb3VudCBwb2ludCAqLworc3RhdGljIGludCBhdXRvZnNfZGV2X2lvY3RsX29wZW5tb3VudChzdHJ1Y3QgZmlsZSAqZnAsCisJCQkJICAgICAgc3RydWN0IGF1dG9mc19zYl9pbmZvICpzYmksCisJCQkJICAgICAgc3RydWN0IGF1dG9mc19kZXZfaW9jdGwgKnBhcmFtKQoreworCWNvbnN0IGNoYXIgKnBhdGg7CisJZGV2X3QgZGV2aWQ7CisJaW50IGVyciwgZmQ7CisKKwkvKiBwYXJhbS0+cGF0aCBoYXMgYWxyZWFkeSBiZWVuIGNoZWNrZWQgKi8KKwlpZiAoIXBhcmFtLT5hcmcxKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXBhcmFtLT5pb2N0bGZkID0gLTE7CisKKwlwYXRoID0gcGFyYW0tPnBhdGg7CisJZGV2aWQgPSBwYXJhbS0+YXJnMTsKKworCWVyciA9IDA7CisJZmQgPSBhdXRvZnNfZGV2X2lvY3RsX29wZW5fbW91bnRwb2ludChwYXRoLCBkZXZpZCk7CisJaWYgKHVubGlrZWx5KGZkIDwgMCkpIHsKKwkJZXJyID0gZmQ7CisJCWdvdG8gb3V0OworCX0KKworCXBhcmFtLT5pb2N0bGZkID0gZmQ7CitvdXQ6CisJcmV0dXJuIGVycjsKK30KKworLyogQ2xvc2UgZmlsZSBkZXNjcmlwdG9yIGFsbG9jYXRlZCBhYm92ZSAodXNlciBjYW4gYWxzbyB1c2UgY2xvc2UoMikpLiAqLworc3RhdGljIGludCBhdXRvZnNfZGV2X2lvY3RsX2Nsb3NlbW91bnQoc3RydWN0IGZpbGUgKmZwLAorCQkJCSAgICAgICBzdHJ1Y3QgYXV0b2ZzX3NiX2luZm8gKnNiaSwKKwkJCQkgICAgICAgc3RydWN0IGF1dG9mc19kZXZfaW9jdGwgKnBhcmFtKQoreworCXJldHVybiBzeXNfY2xvc2UocGFyYW0tPmlvY3RsZmQpOworfQorCisvKgorICogU2VuZCAicmVhZHkiIHN0YXR1cyBmb3IgYW4gZXhpc3Rpbmcgd2FpdCAoZWl0aGVyIGEgbW91bnQgb3IgYW4gZXhwaXJlCisgKiByZXF1ZXN0KS4KKyAqLworc3RhdGljIGludCBhdXRvZnNfZGV2X2lvY3RsX3JlYWR5KHN0cnVjdCBmaWxlICpmcCwKKwkJCQkgIHN0cnVjdCBhdXRvZnNfc2JfaW5mbyAqc2JpLAorCQkJCSAgc3RydWN0IGF1dG9mc19kZXZfaW9jdGwgKnBhcmFtKQoreworCWF1dG9mc193cXRfdCB0b2tlbjsKKworCXRva2VuID0gKGF1dG9mc193cXRfdCkgcGFyYW0tPmFyZzE7CisJcmV0dXJuIGF1dG9mczRfd2FpdF9yZWxlYXNlKHNiaSwgdG9rZW4sIDApOworfQorCisvKgorICogU2VuZCAiZmFpbCIgc3RhdHVzIGZvciBhbiBleGlzdGluZyB3YWl0IChlaXRoZXIgYSBtb3VudCBvciBhbiBleHBpcmUKKyAqIHJlcXVlc3QpLgorICovCitzdGF0aWMgaW50IGF1dG9mc19kZXZfaW9jdGxfZmFpbChzdHJ1Y3QgZmlsZSAqZnAsCisJCQkJIHN0cnVjdCBhdXRvZnNfc2JfaW5mbyAqc2JpLAorCQkJCSBzdHJ1Y3QgYXV0b2ZzX2Rldl9pb2N0bCAqcGFyYW0pCit7CisJYXV0b2ZzX3dxdF90IHRva2VuOworCWludCBzdGF0dXM7CisKKwl0b2tlbiA9IChhdXRvZnNfd3F0X3QpIHBhcmFtLT5hcmcxOworCXN0YXR1cyA9IHBhcmFtLT5hcmcyID8gcGFyYW0tPmFyZzIgOiAtRU5PRU5UOworCXJldHVybiBhdXRvZnM0X3dhaXRfcmVsZWFzZShzYmksIHRva2VuLCBzdGF0dXMpOworfQorCisvKgorICogU2V0IHRoZSBwaXBlIGZkIGZvciBrZXJuZWwgY29tbXVuaWNhdGlvbiB0byB0aGUgZGFlbW9uLgorICoKKyAqIE5vcm1hbGx5IHRoaXMgaXMgc2V0IGF0IG1vdW50IHVzaW5nIGFuIG9wdGlvbiBidXQgaWYgd2UKKyAqIGFyZSByZWNvbm5lY3RpbmcgdG8gYSBidXN5IG1vdW50IHRoZW4gd2UgbmVlZCB0byB1c2UgdGhpcworICogdG8gdGVsbCB0aGUgYXV0b2ZzIG1vdW50IGFib3V0IHRoZSBuZXcga2VybmVsIHBpcGUgZmQuIEluCisgKiBvcmRlciB0byBwcm90ZWN0IG1vdW50cyBhZ2FpbnN0IGluY29ycmVjdGx5IHNldHRpbmcgdGhlCisgKiBwaXBlZmQgd2UgYWxzbyByZXF1aXJlIHRoYXQgdGhlIGF1dG9mcyBtb3VudCBiZSBjYXRhdG9uaWMuCisgKgorICogVGhpcyBhbHNvIHNldHMgdGhlIHByb2Nlc3MgZ3JvdXAgaWQgdXNlZCB0byBpZGVudGlmeSB0aGUKKyAqIGNvbnRyb2xsaW5nIHByb2Nlc3MgKGVnLiB0aGUgb3duaW5nIGF1dG9tb3VudCg4KSBkYWVtb24pLgorICovCitzdGF0aWMgaW50IGF1dG9mc19kZXZfaW9jdGxfc2V0cGlwZWZkKHN0cnVjdCBmaWxlICpmcCwKKwkJCQkgICAgICBzdHJ1Y3QgYXV0b2ZzX3NiX2luZm8gKnNiaSwKKwkJCQkgICAgICBzdHJ1Y3QgYXV0b2ZzX2Rldl9pb2N0bCAqcGFyYW0pCit7CisJaW50IHBpcGVmZDsKKwlpbnQgZXJyID0gMDsKKworCWlmIChwYXJhbS0+YXJnMSA9PSAtMSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlwaXBlZmQgPSBwYXJhbS0+YXJnMTsKKworCW11dGV4X2xvY2soJnNiaS0+d3FfbXV0ZXgpOworCWlmICghc2JpLT5jYXRhdG9uaWMpIHsKKwkJbXV0ZXhfdW5sb2NrKCZzYmktPndxX211dGV4KTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9IGVsc2UgeworCQlzdHJ1Y3QgZmlsZSAqcGlwZSA9IGZnZXQocGlwZWZkKTsKKwkJaWYgKCFwaXBlLT5mX29wIHx8ICFwaXBlLT5mX29wLT53cml0ZSkgeworCQkJZXJyID0gLUVQSVBFOworCQkJZnB1dChwaXBlKTsKKwkJCWdvdG8gb3V0OworCQl9CisJCXNiaS0+b3pfcGdycCA9IHRhc2tfcGdycF9ucihjdXJyZW50KTsKKwkJc2JpLT5waXBlZmQgPSBwaXBlZmQ7CisJCXNiaS0+cGlwZSA9IHBpcGU7CisJCXNiaS0+Y2F0YXRvbmljID0gMDsKKwl9CitvdXQ6CisJbXV0ZXhfdW5sb2NrKCZzYmktPndxX211dGV4KTsKKwlyZXR1cm4gZXJyOworfQorCisvKgorICogTWFrZSB0aGUgYXV0b2ZzIG1vdW50IHBvaW50IGNhdGF0b25pYywgbm8gbG9uZ2VyIHJlc3BvbnNpdmUgdG8KKyAqIG1vdW50IHJlcXVlc3RzLiBBbHNvIGNsb3NlcyB0aGUga2VybmVsIHBpcGUgZmlsZSBkZXNjcmlwdG9yLgorICovCitzdGF0aWMgaW50IGF1dG9mc19kZXZfaW9jdGxfY2F0YXRvbmljKHN0cnVjdCBmaWxlICpmcCwKKwkJCQkgICAgICBzdHJ1Y3QgYXV0b2ZzX3NiX2luZm8gKnNiaSwKKwkJCQkgICAgICBzdHJ1Y3QgYXV0b2ZzX2Rldl9pb2N0bCAqcGFyYW0pCit7CisJYXV0b2ZzNF9jYXRhdG9uaWNfbW9kZShzYmkpOworCXJldHVybiAwOworfQorCisvKiBTZXQgdGhlIGF1dG9mcyBtb3VudCB0aW1lb3V0ICovCitzdGF0aWMgaW50IGF1dG9mc19kZXZfaW9jdGxfdGltZW91dChzdHJ1Y3QgZmlsZSAqZnAsCisJCQkJICAgIHN0cnVjdCBhdXRvZnNfc2JfaW5mbyAqc2JpLAorCQkJCSAgICBzdHJ1Y3QgYXV0b2ZzX2Rldl9pb2N0bCAqcGFyYW0pCit7CisJdW5zaWduZWQgbG9uZyB0aW1lb3V0OworCisJdGltZW91dCA9IHBhcmFtLT5hcmcxOworCXBhcmFtLT5hcmcxID0gc2JpLT5leHBfdGltZW91dCAvIEhaOworCXNiaS0+ZXhwX3RpbWVvdXQgPSB0aW1lb3V0ICogSFo7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBSZXR1cm4gdGhlIHVpZCBhbmQgZ2lkIG9mIHRoZSBsYXN0IHJlcXVlc3QgZm9yIHRoZSBtb3VudAorICoKKyAqIFdoZW4gcmVjb25zdHJ1Y3RpbmcgYW4gYXV0b2ZzIG1vdW50IHRyZWUgd2l0aCBhY3RpdmUgbW91bnRzCisgKiB3ZSBuZWVkIHRvIHJlLWNvbm5lY3QgdG8gbW91bnRzIHRoYXQgbWF5IGhhdmUgdXNlZCB0aGUgb3JpZ2luYWwKKyAqIHByb2Nlc3MgdWlkIGFuZCBnaWQgKG9yIHN0cmluZyB2YXJpYXRpb25zIG9mIHRoZW0pIGZvciBtb3VudAorICogbG9va3VwcyB3aXRoaW4gdGhlIG1hcCBlbnRyeS4KKyAqLworc3RhdGljIGludCBhdXRvZnNfZGV2X2lvY3RsX3JlcXVlc3RlcihzdHJ1Y3QgZmlsZSAqZnAsCisJCQkJICAgICAgc3RydWN0IGF1dG9mc19zYl9pbmZvICpzYmksCisJCQkJICAgICAgc3RydWN0IGF1dG9mc19kZXZfaW9jdGwgKnBhcmFtKQoreworCXN0cnVjdCBhdXRvZnNfaW5mbyAqaW5vOworCXN0cnVjdCBuYW1laWRhdGEgbmQ7CisJY29uc3QgY2hhciAqcGF0aDsKKwlkZXZfdCBkZXZpZDsKKwlpbnQgZXJyID0gLUVOT0VOVDsKKworCWlmIChwYXJhbS0+c2l6ZSA8PSBzaXplb2YoKnBhcmFtKSkgeworCQllcnIgPSAtRUlOVkFMOworCQlnb3RvIG91dDsKKwl9CisKKwlwYXRoID0gcGFyYW0tPnBhdGg7CisJZGV2aWQgPSBzYmktPnNiLT5zX2RldjsKKworCXBhcmFtLT5hcmcxID0gcGFyYW0tPmFyZzIgPSAtMTsKKworCS8qIEdldCBuYW1laWRhdGEgb2YgdGhlIHBhcmVudCBkaXJlY3RvcnkgKi8KKwllcnIgPSBwYXRoX2xvb2t1cChwYXRoLCBMT09LVVBfUEFSRU5ULCAmbmQpOworCWlmIChlcnIpCisJCWdvdG8gb3V0OworCisJZXJyID0gYXV0b2ZzX2Rldl9pb2N0bF9maW5kX3N1cGVyKCZuZCwgZGV2aWQpOworCWlmIChlcnIpCisJCWdvdG8gb3V0X3JlbGVhc2U7CisKKwlpbm8gPSBhdXRvZnM0X2RlbnRyeV9pbm8obmQucGF0aC5kZW50cnkpOworCWlmIChpbm8pIHsKKwkJZXJyID0gMDsKKwkJYXV0b2ZzNF9leHBpcmVfd2FpdChuZC5wYXRoLmRlbnRyeSk7CisJCXNwaW5fbG9jaygmc2JpLT5mc19sb2NrKTsKKwkJcGFyYW0tPmFyZzEgPSBpbm8tPnVpZDsKKwkJcGFyYW0tPmFyZzIgPSBpbm8tPmdpZDsKKwkJc3Bpbl91bmxvY2soJnNiaS0+ZnNfbG9jayk7CisJfQorCitvdXRfcmVsZWFzZToKKwlwYXRoX3B1dCgmbmQucGF0aCk7CitvdXQ6CisJcmV0dXJuIGVycjsKK30KKworLyoKKyAqIENhbGwgcmVwZWF0ZWRseSB1bnRpbCBpdCByZXR1cm5zIC1FQUdBSU4sIG1lYW5pbmcgdGhlcmUncyBub3RoaW5nCisgKiBtb3JlIHRoYXQgY2FuIGJlIGRvbmUuCisgKi8KK3N0YXRpYyBpbnQgYXV0b2ZzX2Rldl9pb2N0bF9leHBpcmUoc3RydWN0IGZpbGUgKmZwLAorCQkJCSAgIHN0cnVjdCBhdXRvZnNfc2JfaW5mbyAqc2JpLAorCQkJCSAgIHN0cnVjdCBhdXRvZnNfZGV2X2lvY3RsICpwYXJhbSkKK3sKKwlzdHJ1Y3QgZGVudHJ5ICpkZW50cnk7CisJc3RydWN0IHZmc21vdW50ICptbnQ7CisJaW50IGVyciA9IC1FQUdBSU47CisJaW50IGhvdzsKKworCWhvdyA9IHBhcmFtLT5hcmcxOworCW1udCA9IGZwLT5mX3BhdGgubW50OworCisJaWYgKHNiaS0+dHlwZSAmIEFVVE9GU19UWVBFX1RSSUdHRVIpCisJCWRlbnRyeSA9IGF1dG9mczRfZXhwaXJlX2RpcmVjdChzYmktPnNiLCBtbnQsIHNiaSwgaG93KTsKKwllbHNlCisJCWRlbnRyeSA9IGF1dG9mczRfZXhwaXJlX2luZGlyZWN0KHNiaS0+c2IsIG1udCwgc2JpLCBob3cpOworCisJaWYgKGRlbnRyeSkgeworCQlzdHJ1Y3QgYXV0b2ZzX2luZm8gKmlubyA9IGF1dG9mczRfZGVudHJ5X2lubyhkZW50cnkpOworCisJCS8qCisJCSAqIFRoaXMgaXMgc3luY2hyb25vdXMgYmVjYXVzZSBpdCBtYWtlcyB0aGUgZGFlbW9uIGEKKwkJICogbGl0dGxlIGVhc2llcgorCQkqLworCQllcnIgPSBhdXRvZnM0X3dhaXQoc2JpLCBkZW50cnksIE5GWV9FWFBJUkUpOworCisJCXNwaW5fbG9jaygmc2JpLT5mc19sb2NrKTsKKwkJaWYgKGluby0+ZmxhZ3MgJiBBVVRPRlNfSU5GX01PVU5UUE9JTlQpIHsKKwkJCWluby0+ZmxhZ3MgJj0gfkFVVE9GU19JTkZfTU9VTlRQT0lOVDsKKwkJCXNiaS0+c2ItPnNfcm9vdC0+ZF9tb3VudGVkKys7CisJCX0KKwkJaW5vLT5mbGFncyAmPSB+QVVUT0ZTX0lORl9FWFBJUklORzsKKwkJY29tcGxldGVfYWxsKCZpbm8tPmV4cGlyZV9jb21wbGV0ZSk7CisJCXNwaW5fdW5sb2NrKCZzYmktPmZzX2xvY2spOworCQlkcHV0KGRlbnRyeSk7CisJfQorCisJcmV0dXJuIGVycjsKK30KKworLyogQ2hlY2sgaWYgYXV0b2ZzIG1vdW50IHBvaW50IGlzIGluIHVzZSAqLworc3RhdGljIGludCBhdXRvZnNfZGV2X2lvY3RsX2Fza3Vtb3VudChzdHJ1Y3QgZmlsZSAqZnAsCisJCQkJICAgICAgc3RydWN0IGF1dG9mc19zYl9pbmZvICpzYmksCisJCQkJICAgICAgc3RydWN0IGF1dG9mc19kZXZfaW9jdGwgKnBhcmFtKQoreworCXBhcmFtLT5hcmcxID0gMDsKKwlpZiAobWF5X3Vtb3VudChmcC0+Zl9wYXRoLm1udCkpCisJCXBhcmFtLT5hcmcxID0gMTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIENoZWNrIGlmIHRoZSBnaXZlbiBwYXRoIGlzIGEgbW91bnRwb2ludC4KKyAqCisgKiBJZiB3ZSBhcmUgc3VwcGxpZWQgd2l0aCB0aGUgZmlsZSBkZXNjcmlwdG9yIG9mIGFuIGF1dG9mcworICogbW91bnQgd2UncmUgbG9va2luZyBmb3IgYSBzcGVjaWZpYyBtb3VudC4gSW4gdGhpcyBjYXNlCisgKiB0aGUgcGF0aCBpcyBjb25zaWRlcmVkIGEgbW91bnRwb2ludCBpZiBpdCBpcyBpdHNlbGYgYQorICogbW91bnRwb2ludCBvciBjb250YWlucyBhIG1vdW50LCBzdWNoIGFzIGEgbXVsdGktbW91bnQKKyAqIHdpdGhvdXQgYSByb290IG1vdW50LiBJbiB0aGlzIGNhc2Ugd2UgcmV0dXJuIDEgaWYgdGhlCisgKiBwYXRoIGlzIGEgbW91bnQgcG9pbnQgYW5kIHRoZSBzdXBlciBtYWdpYyBvZiB0aGUgY292ZXJpbmcKKyAqIG1vdW50IGlmIHRoZXJlIGlzIG9uZSBvciAwIGlmIGl0IGlzbid0IGEgbW91bnRwb2ludC4KKyAqCisgKiBJZiB3ZSBhcmVuJ3Qgc3VwcGxpZWQgd2l0aCBhIGZpbGUgZGVzY3JpcHRvciB0aGVuIHdlCisgKiBsb29rdXAgdGhlIG5hbWVpZGF0YSBvZiB0aGUgcGF0aCBhbmQgY2hlY2sgaWYgaXQgaXMgdGhlCisgKiByb290IG9mIGEgbW91bnQuIElmIGEgdHlwZSBpcyBnaXZlbiB3ZSBhcmUgbG9va2luZyBmb3IKKyAqIGEgcGFydGljdWxhciBhdXRvZnMgbW91bnQgYW5kIGlmIHdlIGRvbid0IGZpbmQgYSBtYXRjaAorICogd2UgcmV0dXJuIGZhaWwuIElmIHRoZSBsb2NhdGVkIG5hbWVpZGF0YSBwYXRoIGlzIHRoZQorICogcm9vdCBvZiBhIG1vdW50IHdlIHJldHVybiAxIGFsb25nIHdpdGggdGhlIHN1cGVyIG1hZ2ljCisgKiBvZiB0aGUgbW91bnQgb3IgMCBvdGhlcndpc2UuCisgKgorICogSW4gYm90aCBjYXNlcyB0aGUgdGhlIGRldmljZSBudW1iZXIgKGFzIHJldHVybmVkIGJ5CisgKiBuZXdfZW5jb2RlX2RldigpKSBpcyBhbHNvIHJldHVybmVkLgorICovCitzdGF0aWMgaW50IGF1dG9mc19kZXZfaW9jdGxfaXNtb3VudHBvaW50KHN0cnVjdCBmaWxlICpmcCwKKwkJCQkJIHN0cnVjdCBhdXRvZnNfc2JfaW5mbyAqc2JpLAorCQkJCQkgc3RydWN0IGF1dG9mc19kZXZfaW9jdGwgKnBhcmFtKQoreworCXN0cnVjdCBuYW1laWRhdGEgbmQ7CisJY29uc3QgY2hhciAqcGF0aDsKKwl1bnNpZ25lZCBpbnQgdHlwZTsKKwlpbnQgZXJyID0gLUVOT0VOVDsKKworCWlmIChwYXJhbS0+c2l6ZSA8PSBzaXplb2YoKnBhcmFtKSkgeworCQllcnIgPSAtRUlOVkFMOworCQlnb3RvIG91dDsKKwl9CisKKwlwYXRoID0gcGFyYW0tPnBhdGg7CisJdHlwZSA9IHBhcmFtLT5hcmcxOworCisJcGFyYW0tPmFyZzEgPSAwOworCXBhcmFtLT5hcmcyID0gMDsKKworCWlmICghZnAgfHwgcGFyYW0tPmlvY3RsZmQgPT0gLTEpIHsKKwkJaWYgKHR5cGUgPT0gQVVUT0ZTX1RZUEVfQU5ZKSB7CisJCQlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiOworCisJCQllcnIgPSBwYXRoX2xvb2t1cChwYXRoLCBMT09LVVBfRk9MTE9XLCAmbmQpOworCQkJaWYgKGVycikKKwkJCQlnb3RvIG91dDsKKworCQkJc2IgPSBuZC5wYXRoLmRlbnRyeS0+ZF9zYjsKKwkJCXBhcmFtLT5hcmcxID0gbmV3X2VuY29kZV9kZXYoc2ItPnNfZGV2KTsKKwkJfSBlbHNlIHsKKwkJCXN0cnVjdCBhdXRvZnNfaW5mbyAqaW5vOworCisJCQllcnIgPSBwYXRoX2xvb2t1cChwYXRoLCBMT09LVVBfUEFSRU5ULCAmbmQpOworCQkJaWYgKGVycikKKwkJCQlnb3RvIG91dDsKKworCQkJZXJyID0gYXV0b2ZzX2Rldl9pb2N0bF9maW5kX3NiaV90eXBlKCZuZCwgdHlwZSk7CisJCQlpZiAoZXJyKQorCQkJCWdvdG8gb3V0X3JlbGVhc2U7CisKKwkJCWlubyA9IGF1dG9mczRfZGVudHJ5X2lubyhuZC5wYXRoLmRlbnRyeSk7CisJCQlwYXJhbS0+YXJnMSA9IGF1dG9mczRfZ2V0X2Rldihpbm8tPnNiaSk7CisJCX0KKworCQllcnIgPSAwOworCQlpZiAobmQucGF0aC5kZW50cnktPmRfaW5vZGUgJiYKKwkJICAgIG5kLnBhdGgubW50LT5tbnRfcm9vdCA9PSBuZC5wYXRoLmRlbnRyeSkgeworCQkJZXJyID0gMTsKKwkJCXBhcmFtLT5hcmcyID0gbmQucGF0aC5kZW50cnktPmRfaW5vZGUtPmlfc2ItPnNfbWFnaWM7CisJCX0KKwl9IGVsc2UgeworCQlkZXZfdCBkZXZpZCA9IG5ld19lbmNvZGVfZGV2KHNiaS0+c2ItPnNfZGV2KTsKKworCQllcnIgPSBwYXRoX2xvb2t1cChwYXRoLCBMT09LVVBfUEFSRU5ULCAmbmQpOworCQlpZiAoZXJyKQorCQkJZ290byBvdXQ7CisKKwkJZXJyID0gYXV0b2ZzX2Rldl9pb2N0bF9maW5kX3N1cGVyKCZuZCwgZGV2aWQpOworCQlpZiAoZXJyKQorCQkJZ290byBvdXRfcmVsZWFzZTsKKworCQlwYXJhbS0+YXJnMSA9IGF1dG9mczRfZ2V0X2RldihzYmkpOworCisJCWVyciA9IGhhdmVfc3VibW91bnRzKG5kLnBhdGguZGVudHJ5KTsKKworCQlpZiAobmQucGF0aC5tbnQtPm1udF9tb3VudHBvaW50ICE9IG5kLnBhdGgubW50LT5tbnRfcm9vdCkgeworCQkJaWYgKGZvbGxvd19kb3duKCZuZC5wYXRoLm1udCwgJm5kLnBhdGguZGVudHJ5KSkgeworCQkJCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBuZC5wYXRoLmRlbnRyeS0+ZF9pbm9kZTsKKwkJCQlwYXJhbS0+YXJnMiA9IGlub2RlLT5pX3NiLT5zX21hZ2ljOworCQkJfQorCQl9CisJfQorCitvdXRfcmVsZWFzZToKKwlwYXRoX3B1dCgmbmQucGF0aCk7CitvdXQ6CisJcmV0dXJuIGVycjsKK30KKworLyoKKyAqIE91ciByYW5nZSBvZiBpb2N0bCBudW1iZXJzIGlzbid0IDAgYmFzZWQgc28gd2UgbmVlZCB0byBzaGlmdAorICogdGhlIGFycmF5IGluZGV4IGJ5IF9JT0NfTlIoQVVUT0ZTX0NUTF9JT0NfRklSU1QpIGZvciB0aGUgdGFibGUKKyAqIGxvb2t1cC4KKyAqLworI2RlZmluZSBjbWRfaWR4KGNtZCkJKGNtZCAtIF9JT0NfTlIoQVVUT0ZTX0RFVl9JT0NUTF9JT0NfRklSU1QpKQorCitzdGF0aWMgaW9jdGxfZm4gbG9va3VwX2Rldl9pb2N0bCh1bnNpZ25lZCBpbnQgY21kKQoreworCXN0YXRpYyBzdHJ1Y3QgeworCQlpbnQgY21kOworCQlpb2N0bF9mbiBmbjsKKwl9IF9pb2N0bHNbXSA9IHsKKwkJe2NtZF9pZHgoQVVUT0ZTX0RFVl9JT0NUTF9WRVJTSU9OX0NNRCksIE5VTEx9LAorCQl7Y21kX2lkeChBVVRPRlNfREVWX0lPQ1RMX1BST1RPVkVSX0NNRCksCisJCQkgYXV0b2ZzX2Rldl9pb2N0bF9wcm90b3Zlcn0sCisJCXtjbWRfaWR4KEFVVE9GU19ERVZfSU9DVExfUFJPVE9TVUJWRVJfQ01EKSwKKwkJCSBhdXRvZnNfZGV2X2lvY3RsX3Byb3Rvc3VidmVyfSwKKwkJe2NtZF9pZHgoQVVUT0ZTX0RFVl9JT0NUTF9PUEVOTU9VTlRfQ01EKSwKKwkJCSBhdXRvZnNfZGV2X2lvY3RsX29wZW5tb3VudH0sCisJCXtjbWRfaWR4KEFVVE9GU19ERVZfSU9DVExfQ0xPU0VNT1VOVF9DTUQpLAorCQkJIGF1dG9mc19kZXZfaW9jdGxfY2xvc2Vtb3VudH0sCisJCXtjbWRfaWR4KEFVVE9GU19ERVZfSU9DVExfUkVBRFlfQ01EKSwKKwkJCSBhdXRvZnNfZGV2X2lvY3RsX3JlYWR5fSwKKwkJe2NtZF9pZHgoQVVUT0ZTX0RFVl9JT0NUTF9GQUlMX0NNRCksCisJCQkgYXV0b2ZzX2Rldl9pb2N0bF9mYWlsfSwKKwkJe2NtZF9pZHgoQVVUT0ZTX0RFVl9JT0NUTF9TRVRQSVBFRkRfQ01EKSwKKwkJCSBhdXRvZnNfZGV2X2lvY3RsX3NldHBpcGVmZH0sCisJCXtjbWRfaWR4KEFVVE9GU19ERVZfSU9DVExfQ0FUQVRPTklDX0NNRCksCisJCQkgYXV0b2ZzX2Rldl9pb2N0bF9jYXRhdG9uaWN9LAorCQl7Y21kX2lkeChBVVRPRlNfREVWX0lPQ1RMX1RJTUVPVVRfQ01EKSwKKwkJCSBhdXRvZnNfZGV2X2lvY3RsX3RpbWVvdXR9LAorCQl7Y21kX2lkeChBVVRPRlNfREVWX0lPQ1RMX1JFUVVFU1RFUl9DTUQpLAorCQkJIGF1dG9mc19kZXZfaW9jdGxfcmVxdWVzdGVyfSwKKwkJe2NtZF9pZHgoQVVUT0ZTX0RFVl9JT0NUTF9FWFBJUkVfQ01EKSwKKwkJCSBhdXRvZnNfZGV2X2lvY3RsX2V4cGlyZX0sCisJCXtjbWRfaWR4KEFVVE9GU19ERVZfSU9DVExfQVNLVU1PVU5UX0NNRCksCisJCQkgYXV0b2ZzX2Rldl9pb2N0bF9hc2t1bW91bnR9LAorCQl7Y21kX2lkeChBVVRPRlNfREVWX0lPQ1RMX0lTTU9VTlRQT0lOVF9DTUQpLAorCQkJIGF1dG9mc19kZXZfaW9jdGxfaXNtb3VudHBvaW50fQorCX07CisJdW5zaWduZWQgaW50IGlkeCA9IGNtZF9pZHgoY21kKTsKKworCXJldHVybiAoaWR4ID49IEFSUkFZX1NJWkUoX2lvY3RscykpID8gTlVMTCA6IF9pb2N0bHNbaWR4XS5mbjsKK30KKworLyogaW9jdGwgZGlzcGF0Y2hlciAqLworc3RhdGljIGludCBfYXV0b2ZzX2Rldl9pb2N0bCh1bnNpZ25lZCBpbnQgY29tbWFuZCwgc3RydWN0IGF1dG9mc19kZXZfaW9jdGwgX191c2VyICp1c2VyKQoreworCXN0cnVjdCBhdXRvZnNfZGV2X2lvY3RsICpwYXJhbTsKKwlzdHJ1Y3QgZmlsZSAqZnA7CisJc3RydWN0IGF1dG9mc19zYl9pbmZvICpzYmk7CisJdW5zaWduZWQgaW50IGNtZF9maXJzdCwgY21kOworCWlvY3RsX2ZuIGZuID0gTlVMTDsKKwlpbnQgZXJyID0gMDsKKworCS8qIG9ubHkgcm9vdCBjYW4gcGxheSB3aXRoIHRoaXMgKi8KKwlpZiAoIWNhcGFibGUoQ0FQX1NZU19BRE1JTikpCisJCXJldHVybiAtRVBFUk07CisKKwljbWRfZmlyc3QgPSBfSU9DX05SKEFVVE9GU19ERVZfSU9DVExfSU9DX0ZJUlNUKTsKKwljbWQgPSBfSU9DX05SKGNvbW1hbmQpOworCisJaWYgKF9JT0NfVFlQRShjb21tYW5kKSAhPSBfSU9DX1RZUEUoQVVUT0ZTX0RFVl9JT0NUTF9JT0NfRklSU1QpIHx8CisJICAgIGNtZCAtIGNtZF9maXJzdCA+PSBBVVRPRlNfREVWX0lPQ1RMX0lPQ19DT1VOVCkgeworCQlyZXR1cm4gLUVOT1RUWTsKKwl9CisKKwkvKiBDb3B5IHRoZSBwYXJhbWV0ZXJzIGludG8ga2VybmVsIHNwYWNlLiAqLworCXBhcmFtID0gY29weV9kZXZfaW9jdGwodXNlcik7CisJaWYgKElTX0VSUihwYXJhbSkpCisJCXJldHVybiBQVFJfRVJSKHBhcmFtKTsKKworCWVyciA9IHZhbGlkYXRlX2Rldl9pb2N0bChjb21tYW5kLCBwYXJhbSk7CisJaWYgKGVycikKKwkJZ290byBvdXQ7CisKKwkvKiBUaGUgdmFsaWRhdGUgcm91dGluZSBhYm92ZSBhbHdheXMgc2V0cyB0aGUgdmVyc2lvbiAqLworCWlmIChjbWQgPT0gQVVUT0ZTX0RFVl9JT0NUTF9WRVJTSU9OX0NNRCkKKwkJZ290byBkb25lOworCisJZm4gPSBsb29rdXBfZGV2X2lvY3RsKGNtZCk7CisJaWYgKCFmbikgeworCQlBVVRPRlNfV0FSTigidW5rbm93biBjb21tYW5kIDB4JTA4eCIsIGNvbW1hbmQpOworCQlyZXR1cm4gLUVOT1RUWTsKKwl9CisKKwlmcCA9IE5VTEw7CisJc2JpID0gTlVMTDsKKworCS8qCisJICogRm9yIG9idmlvdXMgcmVhc29ucyB0aGUgb3Blbm1vdW50IGNhbid0IGhhdmUgYSBmaWxlCisJICogZGVzY3JpcHRvciB5ZXQuIFdlIGRvbid0IHRha2UgYSByZWZlcmVuY2UgdG8gdGhlCisJICogZmlsZSBkdXJpbmcgY2xvc2UgdG8gYWxsb3cgZm9yIGltbWVkaWF0ZSByZWxlYXNlLgorCSAqLworCWlmIChjbWQgIT0gQVVUT0ZTX0RFVl9JT0NUTF9PUEVOTU9VTlRfQ01EICYmCisJICAgIGNtZCAhPSBBVVRPRlNfREVWX0lPQ1RMX0NMT1NFTU9VTlRfQ01EKSB7CisJCWZwID0gZmdldChwYXJhbS0+aW9jdGxmZCk7CisJCWlmICghZnApIHsKKwkJCWlmIChjbWQgPT0gQVVUT0ZTX0RFVl9JT0NUTF9JU01PVU5UUE9JTlRfQ01EKQorCQkJCWdvdG8gY29udDsKKwkJCWVyciA9IC1FQkFERjsKKwkJCWdvdG8gb3V0OworCQl9CisKKwkJaWYgKCFmcC0+Zl9vcCkgeworCQkJZXJyID0gLUVOT1RUWTsKKwkJCWZwdXQoZnApOworCQkJZ290byBvdXQ7CisJCX0KKworCQlzYmkgPSBhdXRvZnNfZGV2X2lvY3RsX3NiaShmcCk7CisJCWlmICghc2JpIHx8IHNiaS0+bWFnaWMgIT0gQVVUT0ZTX1NCSV9NQUdJQykgeworCQkJZXJyID0gLUVJTlZBTDsKKwkJCWZwdXQoZnApOworCQkJZ290byBvdXQ7CisJCX0KKworCQkvKgorCQkgKiBBZG1pbiBuZWVkcyB0byBiZSBhYmxlIHRvIHNldCB0aGUgbW91bnQgY2F0YXRvbmljIGluCisJCSAqIG9yZGVyIHRvIGJlIGFibGUgdG8gcGVyZm9ybSB0aGUgcmUtb3Blbi4KKwkJICovCisJCWlmICghYXV0b2ZzNF9vel9tb2RlKHNiaSkgJiYKKwkJICAgIGNtZCAhPSBBVVRPRlNfREVWX0lPQ1RMX0NBVEFUT05JQ19DTUQpIHsKKwkJCWVyciA9IC1FQUNDRVM7CisJCQlmcHV0KGZwKTsKKwkJCWdvdG8gb3V0OworCQl9CisJfQorY29udDoKKwllcnIgPSBmbihmcCwgc2JpLCBwYXJhbSk7CisKKwlpZiAoZnApCisJCWZwdXQoZnApOworZG9uZToKKwlpZiAoZXJyID49IDAgJiYgY29weV90b191c2VyKHVzZXIsIHBhcmFtLCBBVVRPRlNfREVWX0lPQ1RMX1NJWkUpKQorCQllcnIgPSAtRUZBVUxUOworb3V0OgorCWZyZWVfZGV2X2lvY3RsKHBhcmFtKTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgbG9uZyBhdXRvZnNfZGV2X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1aW50IGNvbW1hbmQsIHVsb25nIHUpCit7CisJaW50IGVycjsKKwllcnIgPSBfYXV0b2ZzX2Rldl9pb2N0bChjb21tYW5kLCAoc3RydWN0IGF1dG9mc19kZXZfaW9jdGwgX191c2VyICopIHUpOworCXJldHVybiAobG9uZykgZXJyOworfQorCisjaWZkZWYgQ09ORklHX0NPTVBBVAorc3RhdGljIGxvbmcgYXV0b2ZzX2Rldl9pb2N0bF9jb21wYXQoc3RydWN0IGZpbGUgKmZpbGUsIHVpbnQgY29tbWFuZCwgdWxvbmcgdSkKK3sKKwlyZXR1cm4gKGxvbmcpIGF1dG9mc19kZXZfaW9jdGwoZmlsZSwgY29tbWFuZCwgKHVsb25nKSBjb21wYXRfcHRyKHUpKTsKK30KKyNlbHNlCisjZGVmaW5lIGF1dG9mc19kZXZfaW9jdGxfY29tcGF0IE5VTEwKKyNlbmRpZgorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBfZGV2X2lvY3RsX2ZvcHMgPSB7CisJLnVubG9ja2VkX2lvY3RsCSA9IGF1dG9mc19kZXZfaW9jdGwsCisJLmNvbXBhdF9pb2N0bCA9IGF1dG9mc19kZXZfaW9jdGxfY29tcGF0LAorCS5vd25lcgkgPSBUSElTX01PRFVMRSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgbWlzY2RldmljZSBfYXV0b2ZzX2Rldl9pb2N0bF9taXNjID0geworCS5taW5vciAJCT0gTUlTQ19EWU5BTUlDX01JTk9SLAorCS5uYW1lICAJCT0gQVVUT0ZTX0RFVklDRV9OQU1FLAorCS5mb3BzICAJCT0gJl9kZXZfaW9jdGxfZm9wcworfTsKKworLyogUmVnaXN0ZXIvZGVyZWdpc3RlciBtaXNjIGNoYXJhY3RlciBkZXZpY2UgKi8KK2ludCBhdXRvZnNfZGV2X2lvY3RsX2luaXQodm9pZCkKK3sKKwlpbnQgcjsKKworCXIgPSBtaXNjX3JlZ2lzdGVyKCZfYXV0b2ZzX2Rldl9pb2N0bF9taXNjKTsKKwlpZiAocikgeworCQlBVVRPRlNfRVJST1IoIm1pc2NfcmVnaXN0ZXIgZmFpbGVkIGZvciBjb250cm9sIGRldmljZSIpOworCQlyZXR1cm4gcjsKKwl9CisKKwlyZXR1cm4gMDsKK30KKwordm9pZCBhdXRvZnNfZGV2X2lvY3RsX2V4aXQodm9pZCkKK3sKKwltaXNjX2RlcmVnaXN0ZXIoJl9hdXRvZnNfZGV2X2lvY3RsX21pc2MpOworCXJldHVybjsKK30KKwpkaWZmIC0tZ2l0IGEvZnMvYXV0b2ZzNC9leHBpcmUuYyBiL2ZzL2F1dG9mczQvZXhwaXJlLmMKaW5kZXggY2RhYmI3OS4uY2RlMmY4ZSAxMDA2NDQKLS0tIGEvZnMvYXV0b2ZzNC9leHBpcmUuYworKysgYi9mcy9hdXRvZnM0L2V4cGlyZS5jCkBAIC0yNDQsMTAgKzI0NCwxMCBAQAogfQogCiAvKiBDaGVjayBpZiB3ZSBjYW4gZXhwaXJlIGEgZGlyZWN0IG1vdW50IChwb3NzaWJseSBhIHRyZWUpICovCi1zdGF0aWMgc3RydWN0IGRlbnRyeSAqYXV0b2ZzNF9leHBpcmVfZGlyZWN0KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsCi0JCQkJCSAgICBzdHJ1Y3QgdmZzbW91bnQgKm1udCwKLQkJCQkJICAgIHN0cnVjdCBhdXRvZnNfc2JfaW5mbyAqc2JpLAotCQkJCQkgICAgaW50IGhvdykKK3N0cnVjdCBkZW50cnkgKmF1dG9mczRfZXhwaXJlX2RpcmVjdChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLAorCQkJCSAgICAgc3RydWN0IHZmc21vdW50ICptbnQsCisJCQkJICAgICBzdHJ1Y3QgYXV0b2ZzX3NiX2luZm8gKnNiaSwKKwkJCQkgICAgIGludCBob3cpCiB7CiAJdW5zaWduZWQgbG9uZyB0aW1lb3V0OwogCXN0cnVjdCBkZW50cnkgKnJvb3QgPSBkZ2V0KHNiLT5zX3Jvb3QpOwpAQCAtMjgzLDEwICsyODMsMTAgQEAKICAqICAtIGl0IGlzIHVudXNlZCBieSBhbnkgdXNlciBwcm9jZXNzCiAgKiAgLSBpdCBoYXMgYmVlbiB1bnVzZWQgZm9yIGV4cF90aW1lb3V0IHRpbWUKICAqLwotc3RhdGljIHN0cnVjdCBkZW50cnkgKmF1dG9mczRfZXhwaXJlX2luZGlyZWN0KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsCi0JCQkJCSAgICAgIHN0cnVjdCB2ZnNtb3VudCAqbW50LAotCQkJCQkgICAgICBzdHJ1Y3QgYXV0b2ZzX3NiX2luZm8gKnNiaSwKLQkJCQkJICAgICAgaW50IGhvdykKK3N0cnVjdCBkZW50cnkgKmF1dG9mczRfZXhwaXJlX2luZGlyZWN0KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsCisJCQkJICAgICAgIHN0cnVjdCB2ZnNtb3VudCAqbW50LAorCQkJCSAgICAgICBzdHJ1Y3QgYXV0b2ZzX3NiX2luZm8gKnNiaSwKKwkJCQkgICAgICAgaW50IGhvdykKIHsKIAl1bnNpZ25lZCBsb25nIHRpbWVvdXQ7CiAJc3RydWN0IGRlbnRyeSAqcm9vdCA9IHNiLT5zX3Jvb3Q7CkBAIC00NzksNyArNDc5LDcgQEAKIAlpZiAoYXJnICYmIGdldF91c2VyKGRvX25vdywgYXJnKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKLQlpZiAoc2JpLT50eXBlICYgQVVUT0ZTX1RZUEVfRElSRUNUKQorCWlmIChzYmktPnR5cGUgJiBBVVRPRlNfVFlQRV9UUklHR0VSKQogCQlkZW50cnkgPSBhdXRvZnM0X2V4cGlyZV9kaXJlY3Qoc2IsIG1udCwgc2JpLCBkb19ub3cpOwogCWVsc2UKIAkJZGVudHJ5ID0gYXV0b2ZzNF9leHBpcmVfaW5kaXJlY3Qoc2IsIG1udCwgc2JpLCBkb19ub3cpOwpkaWZmIC0tZ2l0IGEvZnMvYXV0b2ZzNC9pbml0LmMgYi9mcy9hdXRvZnM0L2luaXQuYwppbmRleCA3MjNhMWM1ZS4uOTcyMmU0YiAxMDA2NDQKLS0tIGEvZnMvYXV0b2ZzNC9pbml0LmMKKysrIGIvZnMvYXV0b2ZzNC9pbml0LmMKQEAgLTI5LDExICsyOSwyMCBAQAogCiBzdGF0aWMgaW50IF9faW5pdCBpbml0X2F1dG9mczRfZnModm9pZCkKIHsKLQlyZXR1cm4gcmVnaXN0ZXJfZmlsZXN5c3RlbSgmYXV0b2ZzX2ZzX3R5cGUpOworCWludCBlcnI7CisKKwllcnIgPSByZWdpc3Rlcl9maWxlc3lzdGVtKCZhdXRvZnNfZnNfdHlwZSk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCWF1dG9mc19kZXZfaW9jdGxfaW5pdCgpOworCisJcmV0dXJuIGVycjsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IGV4aXRfYXV0b2ZzNF9mcyh2b2lkKQogeworCWF1dG9mc19kZXZfaW9jdGxfZXhpdCgpOwogCXVucmVnaXN0ZXJfZmlsZXN5c3RlbSgmYXV0b2ZzX2ZzX3R5cGUpOwogfQogCmRpZmYgLS1naXQgYS9mcy9hdXRvZnM0L2lub2RlLmMgYi9mcy9hdXRvZnM0L2lub2RlLmMKaW5kZXggN2JiM2U1Yi4uYzdlNjViYiAxMDA2NDQKLS0tIGEvZnMvYXV0b2ZzNC9pbm9kZS5jCisrKyBiL2ZzL2F1dG9mczQvaW5vZGUuYwpAQCAtNTMsNiArNTMsOCBAQAogCQlhdG9taWNfc2V0KCZpbm8tPmNvdW50LCAwKTsKIAl9CiAKKwlpbm8tPnVpZCA9IDA7CisJaW5vLT5naWQgPSAwOwogCWluby0+bW9kZSA9IG1vZGU7CiAJaW5vLT5sYXN0X3VzZWQgPSBqaWZmaWVzOwogCkBAIC0yMTMsNyArMjE1LDcgQEAKIGVudW0ge09wdF9lcnIsIE9wdF9mZCwgT3B0X3VpZCwgT3B0X2dpZCwgT3B0X3BncnAsIE9wdF9taW5wcm90bywgT3B0X21heHByb3RvLAogCU9wdF9pbmRpcmVjdCwgT3B0X2RpcmVjdCwgT3B0X29mZnNldH07CiAKLXN0YXRpYyBtYXRjaF90YWJsZV90IHRva2VucyA9IHsKK3N0YXRpYyBjb25zdCBtYXRjaF90YWJsZV90IHRva2VucyA9IHsKIAl7T3B0X2ZkLCAiZmQ9JXUifSwKIAl7T3B0X3VpZCwgInVpZD0ldSJ9LAogCXtPcHRfZ2lkLCAiZ2lkPSV1In0sCkBAIC0yODgsNyArMjkwLDcgQEAKIAkJCSp0eXBlID0gQVVUT0ZTX1RZUEVfRElSRUNUOwogCQkJYnJlYWs7CiAJCWNhc2UgT3B0X29mZnNldDoKLQkJCSp0eXBlID0gQVVUT0ZTX1RZUEVfRElSRUNUIHwgQVVUT0ZTX1RZUEVfT0ZGU0VUOworCQkJKnR5cGUgPSBBVVRPRlNfVFlQRV9PRkZTRVQ7CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCXJldHVybiAxOwpAQCAtMzM2LDcgKzMzOCw3IEBACiAJc2JpLT5zYiA9IHM7CiAJc2JpLT52ZXJzaW9uID0gMDsKIAlzYmktPnN1Yl92ZXJzaW9uID0gMDsKLQlzYmktPnR5cGUgPSAwOworCXNiaS0+dHlwZSA9IEFVVE9GU19UWVBFX0lORElSRUNUOwogCXNiaS0+bWluX3Byb3RvID0gMDsKIAlzYmktPm1heF9wcm90byA9IDA7CiAJbXV0ZXhfaW5pdCgmc2JpLT53cV9tdXRleCk7CkBAIC0zNzgsNyArMzgwLDcgQEAKIAl9CiAKIAlyb290X2lub2RlLT5pX2ZvcCA9ICZhdXRvZnM0X3Jvb3Rfb3BlcmF0aW9uczsKLQlyb290X2lub2RlLT5pX29wID0gc2JpLT50eXBlICYgQVVUT0ZTX1RZUEVfRElSRUNUID8KKwlyb290X2lub2RlLT5pX29wID0gc2JpLT50eXBlICYgQVVUT0ZTX1RZUEVfVFJJR0dFUiA/CiAJCQkmYXV0b2ZzNF9kaXJlY3Rfcm9vdF9pbm9kZV9vcGVyYXRpb25zIDoKIAkJCSZhdXRvZnM0X2luZGlyZWN0X3Jvb3RfaW5vZGVfb3BlcmF0aW9uczsKIApkaWZmIC0tZ2l0IGEvZnMvYXV0b2ZzNC93YWl0cS5jIGIvZnMvYXV0b2ZzNC93YWl0cS5jCmluZGV4IDM1MjE2ZDEuLjRiNjdjMmEgMTAwNjQ0Ci0tLSBhL2ZzL2F1dG9mczQvd2FpdHEuYworKysgYi9mcy9hdXRvZnM0L3dhaXRxLmMKQEAgLTMzNyw3ICszMzcsNyBAQAogCQkgKiBpcyB2ZXJ5IHNpbWlsYXIgZm9yIGluZGlyZWN0IG1vdW50cyBleGNlcHQgb25seSBkZW50cnlzCiAJCSAqIGluIHRoZSByb290IG9mIHRoZSBhdXRvZnMgZmlsZSBzeXN0ZW0gbWF5IGJlIG5lZ2F0aXZlLgogCQkgKi8KLQkJaWYgKHNiaS0+dHlwZSAmIChBVVRPRlNfVFlQRV9ESVJFQ1R8QVVUT0ZTX1RZUEVfT0ZGU0VUKSkKKwkJaWYgKHNiaS0+dHlwZSAmIEFVVE9GU19UWVBFX1RSSUdHRVIpCiAJCQlyZXR1cm4gLUVOT0VOVDsKIAkJZWxzZSBpZiAoIUlTX1JPT1QoZGVudHJ5LT5kX3BhcmVudCkpCiAJCQlyZXR1cm4gLUVOT0VOVDsKQEAgLTM0OCw3ICszNDgsNyBAQAogCQlyZXR1cm4gLUVOT01FTTsKIAogCS8qIElmIHRoaXMgaXMgYSBkaXJlY3QgbW91bnQgcmVxdWVzdCBjcmVhdGUgYSBkdW1teSBuYW1lICovCi0JaWYgKElTX1JPT1QoZGVudHJ5KSAmJiAoc2JpLT50eXBlICYgQVVUT0ZTX1RZUEVfRElSRUNUKSkKKwlpZiAoSVNfUk9PVChkZW50cnkpICYmIHNiaS0+dHlwZSAmIEFVVE9GU19UWVBFX1RSSUdHRVIpCiAJCXFzdHIubGVuID0gc3ByaW50ZihuYW1lLCAiJXAiLCBkZW50cnkpOwogCWVsc2UgewogCQlxc3RyLmxlbiA9IGF1dG9mczRfZ2V0cGF0aChzYmksIGRlbnRyeSwgJm5hbWUpOwpAQCAtNDA2LDExICs0MDYsMTEgQEAKIAkJCQl0eXBlID0gYXV0b2ZzX3B0eXBlX2V4cGlyZV9tdWx0aTsKIAkJfSBlbHNlIHsKIAkJCWlmIChub3RpZnkgPT0gTkZZX01PVU5UKQotCQkJCXR5cGUgPSAoc2JpLT50eXBlICYgQVVUT0ZTX1RZUEVfRElSRUNUKSA/CisJCQkJdHlwZSA9IChzYmktPnR5cGUgJiBBVVRPRlNfVFlQRV9UUklHR0VSKSA/CiAJCQkJCWF1dG9mc19wdHlwZV9taXNzaW5nX2RpcmVjdCA6CiAJCQkJCSBhdXRvZnNfcHR5cGVfbWlzc2luZ19pbmRpcmVjdDsKIAkJCWVsc2UKLQkJCQl0eXBlID0gKHNiaS0+dHlwZSAmIEFVVE9GU19UWVBFX0RJUkVDVCkgPworCQkJCXR5cGUgPSAoc2JpLT50eXBlICYgQVVUT0ZTX1RZUEVfVFJJR0dFUikgPwogCQkJCQlhdXRvZnNfcHR5cGVfZXhwaXJlX2RpcmVjdCA6CiAJCQkJCWF1dG9mc19wdHlwZV9leHBpcmVfaW5kaXJlY3Q7CiAJCX0KQEAgLTQ1Nyw2ICs0NTcsNDAgQEAKIAogCXN0YXR1cyA9IHdxLT5zdGF0dXM7CiAKKwkvKgorCSAqIEZvciBkaXJlY3QgYW5kIG9mZnNldCBtb3VudHMgd2UgbmVlZCB0byB0cmFjayB0aGUgcmVxdWVzdGVyJ3MKKwkgKiB1aWQgYW5kIGdpZCBpbiB0aGUgZGVudHJ5IGluZm8gc3RydWN0LiBUaGlzIGlzIHNvIGl0IGNhbiBiZQorCSAqIHN1cHBsaWVkLCBvbiByZXF1ZXN0LCBieSB0aGUgbWlzYyBkZXZpY2UgaW9jdGwgaW50ZXJmYWNlLgorCSAqIFRoaXMgaXMgbmVlZGVkIGR1cmluZyBkYWVtb24gcmVzYXRhcnQgd2hlbiByZWNvbm5lY3RpbmcKKwkgKiB0byBleGlzdGluZywgYWN0aXZlLCBhdXRvZnMgbW91bnRzLiBUaGUgdWlkIGFuZCBnaWQgKGFuZAorCSAqIHJlbGF0ZWQgc3RyaW5nIHZhbHVlcykgbWF5IGJlIHVzZWQgZm9yIG1hY3JvIHN1YnN0aXR1dGlvbgorCSAqIGluIGF1dG9mcyBtb3VudCBtYXBzLgorCSAqLworCWlmICghc3RhdHVzKSB7CisJCXN0cnVjdCBhdXRvZnNfaW5mbyAqaW5vOworCQlzdHJ1Y3QgZGVudHJ5ICpkZSA9IE5VTEw7CisKKwkJLyogZGlyZWN0IG1vdW50IG9yIGJyb3dzYWJsZSBtYXAgKi8KKwkJaW5vID0gYXV0b2ZzNF9kZW50cnlfaW5vKGRlbnRyeSk7CisJCWlmICghaW5vKSB7CisJCQkvKiBJZiBub3QgbG9va3VwIGFjdHVhbCBkZW50cnkgdXNlZCAqLworCQkJZGUgPSBkX2xvb2t1cChkZW50cnktPmRfcGFyZW50LCAmZGVudHJ5LT5kX25hbWUpOworCQkJaWYgKGRlKQorCQkJCWlubyA9IGF1dG9mczRfZGVudHJ5X2lubyhkZSk7CisJCX0KKworCQkvKiBTZXQgbW91bnQgcmVxdWVzdGVyICovCisJCWlmIChpbm8pIHsKKwkJCXNwaW5fbG9jaygmc2JpLT5mc19sb2NrKTsKKwkJCWluby0+dWlkID0gd3EtPnVpZDsKKwkJCWluby0+Z2lkID0gd3EtPmdpZDsKKwkJCXNwaW5fdW5sb2NrKCZzYmktPmZzX2xvY2spOworCQl9CisKKwkJaWYgKGRlKQorCQkJZHB1dChkZSk7CisJfQorCiAJLyogQXJlIHdlIHRoZSBsYXN0IHByb2Nlc3MgdG8gbmVlZCBzdGF0dXM/ICovCiAJbXV0ZXhfbG9jaygmc2JpLT53cV9tdXRleCk7CiAJaWYgKCEtLXdxLT53YWl0X2N0cikKZGlmZiAtLWdpdCBhL2ZzL2JlZnMvYmVmc19mc190eXBlcy5oIGIvZnMvYmVmcy9iZWZzX2ZzX3R5cGVzLmgKaW5kZXggZTI1OTVjMi4uNzg5M2VhYSAxMDA2NDQKLS0tIGEvZnMvYmVmcy9iZWZzX2ZzX3R5cGVzLmgKKysrIGIvZnMvYmVmcy9iZWZzX2ZzX3R5cGVzLmgKQEAgLTU1LDggKzU1LDEyIEBACiB9OwogCiAjZGVmaW5lIEJFRlNfQllURU9SREVSX05BVElWRSAweDQyNDk0NzQ1CisjZGVmaW5lIEJFRlNfQllURU9SREVSX05BVElWRV9MRSAoX19mb3JjZSBmczMyKWNwdV90b19sZTMyKEJFRlNfQllURU9SREVSX05BVElWRSkKKyNkZWZpbmUgQkVGU19CWVRFT1JERVJfTkFUSVZFX0JFIChfX2ZvcmNlIGZzMzIpY3B1X3RvX2JlMzIoQkVGU19CWVRFT1JERVJfTkFUSVZFKQogCiAjZGVmaW5lIEJFRlNfU1VQRVJfTUFHSUMgQkVGU19TVVBFUl9NQUdJQzEKKyNkZWZpbmUgQkVGU19TVVBFUl9NQUdJQzFfTEUgKF9fZm9yY2UgZnMzMiljcHVfdG9fbGUzMihCRUZTX1NVUEVSX01BR0lDMSkKKyNkZWZpbmUgQkVGU19TVVBFUl9NQUdJQzFfQkUgKF9fZm9yY2UgZnMzMiljcHVfdG9fYmUzMihCRUZTX1NVUEVSX01BR0lDMSkKIAogLyoKICAqIEZsYWdzIG9mIGlub2RlCmRpZmYgLS1naXQgYS9mcy9iZWZzL2xpbnV4dmZzLmMgYi9mcy9iZWZzL2xpbnV4dmZzLmMKaW5kZXggNzQwZjUzNi4uYjZkZmVlMyAxMDA2NDQKLS0tIGEvZnMvYmVmcy9saW51eHZmcy5jCisrKyBiL2ZzL2JlZnMvbGludXh2ZnMuYwpAQCAtNjUwLDcgKzY1MCw3IEBACiAJT3B0X3VpZCwgT3B0X2dpZCwgT3B0X2NoYXJzZXQsIE9wdF9kZWJ1ZywgT3B0X2VyciwKIH07CiAKLXN0YXRpYyBtYXRjaF90YWJsZV90IGJlZnNfdG9rZW5zID0geworc3RhdGljIGNvbnN0IG1hdGNoX3RhYmxlX3QgYmVmc190b2tlbnMgPSB7CiAJe09wdF91aWQsICJ1aWQ9JWQifSwKIAl7T3B0X2dpZCwgImdpZD0lZCJ9LAogCXtPcHRfY2hhcnNldCwgImlvY2hhcnNldD0lcyJ9LApAQCAtODA5LDggKzgwOSw4IEBACiAKIAkvKiBhY2NvdW50IGZvciBvZmZzZXQgb2Ygc3VwZXIgYmxvY2sgb24geDg2ICovCiAJZGlza19zYiA9IChiZWZzX3N1cGVyX2Jsb2NrICopIGJoLT5iX2RhdGE7Ci0JaWYgKChsZTMyX3RvX2NwdShkaXNrX3NiLT5tYWdpYzEpID09IEJFRlNfU1VQRVJfTUFHSUMxKSB8fAotCSAgICAoYmUzMl90b19jcHUoZGlza19zYi0+bWFnaWMxKSA9PSBCRUZTX1NVUEVSX01BR0lDMSkpIHsKKwlpZiAoKGRpc2tfc2ItPm1hZ2ljMSA9PSBCRUZTX1NVUEVSX01BR0lDMV9MRSkgfHwKKwkgICAgKGRpc2tfc2ItPm1hZ2ljMSA9PSBCRUZTX1NVUEVSX01BR0lDMV9CRSkpIHsKIAkJYmVmc19kZWJ1ZyhzYiwgIlVzaW5nIFBQQyBzdXBlcmJsb2NrIGxvY2F0aW9uIik7CiAJfSBlbHNlIHsKIAkJYmVmc19kZWJ1ZyhzYiwgIlVzaW5nIHg4NiBzdXBlcmJsb2NrIGxvY2F0aW9uIik7CmRpZmYgLS1naXQgYS9mcy9iZWZzL3N1cGVyLmMgYi9mcy9iZWZzL3N1cGVyLmMKaW5kZXggOGMzNDAxZi4uNDFmMmI0ZCAxMDA2NDQKLS0tIGEvZnMvYmVmcy9zdXBlci5jCisrKyBiL2ZzL2JlZnMvc3VwZXIuYwpAQCAtMjYsMTAgKzI2LDEwIEBACiAJYmVmc19zYl9pbmZvICpiZWZzX3NiID0gQkVGU19TQihzYik7CiAKIAkvKiBDaGVjayB0aGUgYnl0ZSBvcmRlciBvZiB0aGUgZmlsZXN5c3RlbSAqLwotCWlmIChsZTMyX3RvX2NwdShkaXNrX3NiLT5mc19ieXRlX29yZGVyKSA9PSBCRUZTX0JZVEVPUkRFUl9OQVRJVkUpCisJaWYgKGRpc2tfc2ItPmZzX2J5dGVfb3JkZXIgPT0gQkVGU19CWVRFT1JERVJfTkFUSVZFX0xFKQogCSAgICBiZWZzX3NiLT5ieXRlX29yZGVyID0gQkVGU19CWVRFU0VYX0xFOwotCWVsc2UgaWYgKGJlMzJfdG9fY3B1KGRpc2tfc2ItPmZzX2J5dGVfb3JkZXIpID09IEJFRlNfQllURU9SREVSX05BVElWRSkKLQkgICAgYmVmc19zYi0+Ynl0ZV9vcmRlciA9IEJFRlNfQllURVNFWF9CRTsJCisJZWxzZSBpZiAoZGlza19zYi0+ZnNfYnl0ZV9vcmRlciA9PSBCRUZTX0JZVEVPUkRFUl9OQVRJVkVfQkUpCisJICAgIGJlZnNfc2ItPmJ5dGVfb3JkZXIgPSBCRUZTX0JZVEVTRVhfQkU7CiAKIAliZWZzX3NiLT5tYWdpYzEgPSBmczMyX3RvX2NwdShzYiwgZGlza19zYi0+bWFnaWMxKTsKIAliZWZzX3NiLT5tYWdpYzIgPSBmczMyX3RvX2NwdShzYiwgZGlza19zYi0+bWFnaWMyKTsKZGlmZiAtLWdpdCBhL2ZzL2JpbmZtdF9lbGYuYyBiL2ZzL2JpbmZtdF9lbGYuYwppbmRleCA2NTVlZDhkLi44ZmNmYTM5IDEwMDY0NAotLS0gYS9mcy9iaW5mbXRfZWxmLmMKKysrIGIvZnMvYmluZm10X2VsZi5jCkBAIC02ODMsNyArNjgzLDcgQEAKIAkJCSAqIHN3aXRjaCByZWFsbHkgaXMgZ29pbmcgdG8gaGFwcGVuIC0gZG8gdGhpcyBpbgogCQkJICogZmx1c2hfdGhyZWFkKCkuCS0gYWtwbQogCQkJICovCi0JCQlTRVRfUEVSU09OQUxJVFkobG9jLT5lbGZfZXgsIDApOworCQkJU0VUX1BFUlNPTkFMSVRZKGxvYy0+ZWxmX2V4KTsKIAogCQkJaW50ZXJwcmV0ZXIgPSBvcGVuX2V4ZWMoZWxmX2ludGVycHJldGVyKTsKIAkJCXJldHZhbCA9IFBUUl9FUlIoaW50ZXJwcmV0ZXIpOwpAQCAtNzM0LDcgKzczNCw3IEBACiAJCQlnb3RvIG91dF9mcmVlX2RlbnRyeTsKIAl9IGVsc2UgewogCQkvKiBFeGVjdXRhYmxlcyB3aXRob3V0IGFuIGludGVycHJldGVyIGFsc28gbmVlZCBhIHBlcnNvbmFsaXR5ICAqLwotCQlTRVRfUEVSU09OQUxJVFkobG9jLT5lbGZfZXgsIDApOworCQlTRVRfUEVSU09OQUxJVFkobG9jLT5lbGZfZXgpOwogCX0KIAogCS8qIEZsdXNoIGFsbCB0cmFjZXMgb2YgdGhlIGN1cnJlbnRseSBydW5uaW5nIGV4ZWN1dGFibGUgKi8KQEAgLTc0OCw3ICs3NDgsNyBAQAogCiAJLyogRG8gdGhpcyBpbW1lZGlhdGVseSwgc2luY2UgU1RBQ0tfVE9QIGFzIHVzZWQgaW4gc2V0dXBfYXJnX3BhZ2VzCiAJICAgbWF5IGRlcGVuZCBvbiB0aGUgcGVyc29uYWxpdHkuICAqLwotCVNFVF9QRVJTT05BTElUWShsb2MtPmVsZl9leCwgMCk7CisJU0VUX1BFUlNPTkFMSVRZKGxvYy0+ZWxmX2V4KTsKIAlpZiAoZWxmX3JlYWRfaW1wbGllc19leGVjKGxvYy0+ZWxmX2V4LCBleGVjdXRhYmxlX3N0YWNrKSkKIAkJY3VycmVudC0+cGVyc29uYWxpdHkgfD0gUkVBRF9JTVBMSUVTX0VYRUM7CiAKQEAgLTExNTYsMTYgKzExNTYsMjQgQEAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIHZtYV9kdW1wX3NpemUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCiAJCQkJICAgdW5zaWduZWQgbG9uZyBtbV9mbGFncykKIHsKKyNkZWZpbmUgRklMVEVSKHR5cGUpCShtbV9mbGFncyAmICgxVUwgPDwgTU1GX0RVTVBfIyN0eXBlKSkKKwogCS8qIFRoZSB2bWEgY2FuIGJlIHNldCB1cCB0byB0ZWxsIHVzIHRoZSBhbnN3ZXIgZGlyZWN0bHkuICAqLwogCWlmICh2bWEtPnZtX2ZsYWdzICYgVk1fQUxXQVlTRFVNUCkKIAkJZ290byB3aG9sZTsKIAorCS8qIEh1Z2V0bGIgbWVtb3J5IGNoZWNrICovCisJaWYgKHZtYS0+dm1fZmxhZ3MgJiBWTV9IVUdFVExCKSB7CisJCWlmICgodm1hLT52bV9mbGFncyAmIFZNX1NIQVJFRCkgJiYgRklMVEVSKEhVR0VUTEJfU0hBUkVEKSkKKwkJCWdvdG8gd2hvbGU7CisJCWlmICghKHZtYS0+dm1fZmxhZ3MgJiBWTV9TSEFSRUQpICYmIEZJTFRFUihIVUdFVExCX1BSSVZBVEUpKQorCQkJZ290byB3aG9sZTsKKwl9CisKIAkvKiBEbyBub3QgZHVtcCBJL08gbWFwcGVkIGRldmljZXMgb3Igc3BlY2lhbCBtYXBwaW5ncyAqLwogCWlmICh2bWEtPnZtX2ZsYWdzICYgKFZNX0lPIHwgVk1fUkVTRVJWRUQpKQogCQlyZXR1cm4gMDsKIAotI2RlZmluZSBGSUxURVIodHlwZSkJKG1tX2ZsYWdzICYgKDFVTCA8PCBNTUZfRFVNUF8jI3R5cGUpKQotCiAJLyogQnkgZGVmYXVsdCwgZHVtcCBzaGFyZWQgbWVtb3J5IGlmIG1hcHBlZCBmcm9tIGFuIGFub255bW91cyBmaWxlLiAqLwogCWlmICh2bWEtPnZtX2ZsYWdzICYgVk1fU0hBUkVEKSB7CiAJCWlmICh2bWEtPnZtX2ZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUtPmlfbmxpbmsgPT0gMCA/CkBAIC0xMzMzLDIwICsxMzQxLDE1IEBACiAJcHJzdGF0dXMtPnByX3BncnAgPSB0YXNrX3BncnBfdm5yKHApOwogCXByc3RhdHVzLT5wcl9zaWQgPSB0YXNrX3Nlc3Npb25fdm5yKHApOwogCWlmICh0aHJlYWRfZ3JvdXBfbGVhZGVyKHApKSB7CisJCXN0cnVjdCB0YXNrX2NwdXRpbWUgY3B1dGltZTsKKwogCQkvKgotCQkgKiBUaGlzIGlzIHRoZSByZWNvcmQgZm9yIHRoZSBncm91cCBsZWFkZXIuICBBZGQgaW4gdGhlCi0JCSAqIGN1bXVsYXRpdmUgdGltZXMgb2YgcHJldmlvdXMgZGVhZCB0aHJlYWRzLiAgVGhpcyB0b3RhbAotCQkgKiB3b24ndCBpbmNsdWRlIHRoZSB0aW1lIG9mIGVhY2ggbGl2ZSB0aHJlYWQgd2hvc2Ugc3RhdGUKLQkJICogaXMgaW5jbHVkZWQgaW4gdGhlIGNvcmUgZHVtcC4gIFRoZSBmaW5hbCB0b3RhbCByZXBvcnRlZAotCQkgKiB0byBvdXIgcGFyZW50IHByb2Nlc3Mgd2hlbiBpdCBjYWxscyB3YWl0NCB3aWxsIGluY2x1ZGUKLQkJICogdGhvc2Ugc3VtcyBhcyB3ZWxsIGFzIHRoZSBsaXR0bGUgYml0IG1vcmUgdGltZSBpdCB0YWtlcwotCQkgKiB0aGlzIGFuZCBlYWNoIG90aGVyIHRocmVhZCB0byBmaW5pc2ggZHlpbmcgYWZ0ZXIgdGhlCi0JCSAqIGNvcmUgZHVtcCBzeW5jaHJvbml6YXRpb24gcGhhc2UuCisJCSAqIFRoaXMgaXMgdGhlIHJlY29yZCBmb3IgdGhlIGdyb3VwIGxlYWRlci4gIEl0IHNob3dzIHRoZQorCQkgKiBncm91cC13aWRlIHRvdGFsLCBub3QgaXRzIGluZGl2aWR1YWwgdGhyZWFkIHRvdGFsLgogCQkgKi8KLQkJY3B1dGltZV90b190aW1ldmFsKGNwdXRpbWVfYWRkKHAtPnV0aW1lLCBwLT5zaWduYWwtPnV0aW1lKSwKLQkJCQkgICAmcHJzdGF0dXMtPnByX3V0aW1lKTsKLQkJY3B1dGltZV90b190aW1ldmFsKGNwdXRpbWVfYWRkKHAtPnN0aW1lLCBwLT5zaWduYWwtPnN0aW1lKSwKLQkJCQkgICAmcHJzdGF0dXMtPnByX3N0aW1lKTsKKwkJdGhyZWFkX2dyb3VwX2NwdXRpbWUocCwgJmNwdXRpbWUpOworCQljcHV0aW1lX3RvX3RpbWV2YWwoY3B1dGltZS51dGltZSwgJnByc3RhdHVzLT5wcl91dGltZSk7CisJCWNwdXRpbWVfdG9fdGltZXZhbChjcHV0aW1lLnN0aW1lLCAmcHJzdGF0dXMtPnByX3N0aW1lKTsKIAl9IGVsc2UgewogCQljcHV0aW1lX3RvX3RpbWV2YWwocC0+dXRpbWUsICZwcnN0YXR1cy0+cHJfdXRpbWUpOwogCQljcHV0aW1lX3RvX3RpbWV2YWwocC0+c3RpbWUsICZwcnN0YXR1cy0+cHJfc3RpbWUpOwpkaWZmIC0tZ2l0IGEvZnMvYmluZm10X2VsZl9mZHBpYy5jIGIvZnMvYmluZm10X2VsZl9mZHBpYy5jCmluZGV4IDgwYzFmOTUuLjBlODM2N2MgMTAwNjQ0Ci0tLSBhL2ZzL2JpbmZtdF9lbGZfZmRwaWMuYworKysgYi9mcy9iaW5mbXRfZWxmX2ZkcGljLmMKQEAgLTI1LDYgKzI1LDcgQEAKICNpbmNsdWRlIDxsaW51eC9mY250bC5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9wYWdlbWFwLmg+CisjaW5jbHVkZSA8bGludXgvc2VjdXJpdHkuaD4KICNpbmNsdWRlIDxsaW51eC9oaWdobWVtLmg+CiAjaW5jbHVkZSA8bGludXgvaGlnaHVpZC5oPgogI2luY2x1ZGUgPGxpbnV4L3BlcnNvbmFsaXR5Lmg+CkBAIC00NTUsOCArNDU2LDE5IEBACiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmbmRlZiBFTEZfQkFTRV9QTEFURk9STQogLyoKLSAqIHByZXNlbnQgdXNlZnVsIGluZm9ybWF0aW9uIHRvIHRoZSBwcm9ncmFtCisgKiBBVF9CQVNFX1BMQVRGT1JNIGluZGljYXRlcyB0aGUgInJlYWwiIGhhcmR3YXJlL21pY3JvYXJjaGl0ZWN0dXJlLgorICogSWYgdGhlIGFyY2ggZGVmaW5lcyBFTEZfQkFTRV9QTEFURk9STSAoaW4gYXNtL2VsZi5oKSwgdGhlIHZhbHVlCisgKiB3aWxsIGJlIGNvcGllZCB0byB0aGUgdXNlciBzdGFjayBpbiB0aGUgc2FtZSBtYW5uZXIgYXMgQVRfUExBVEZPUk0uCisgKi8KKyNkZWZpbmUgRUxGX0JBU0VfUExBVEZPUk0gTlVMTAorI2VuZGlmCisKKy8qCisgKiBwcmVzZW50IHVzZWZ1bCBpbmZvcm1hdGlvbiB0byB0aGUgcHJvZ3JhbSBieSBzaG92ZWxsaW5nIGl0IG9udG8gdGhlIG5ldworICogcHJvY2VzcydzIHN0YWNrCiAgKi8KIHN0YXRpYyBpbnQgY3JlYXRlX2VsZl9mZHBpY190YWJsZXMoc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSwKIAkJCQkgICBzdHJ1Y3QgbW1fc3RydWN0ICptbSwKQEAgLTQ2NiwxNSArNDc4LDE5IEBACiAJdW5zaWduZWQgbG9uZyBzcCwgY3NwLCBuaXRlbXM7CiAJZWxmX2NhZGRyX3QgX191c2VyICphcmd2LCAqZW52cDsKIAlzaXplX3QgcGxhdGZvcm1fbGVuID0gMCwgbGVuOwotCWNoYXIgKmtfcGxhdGZvcm07Ci0JY2hhciBfX3VzZXIgKnVfcGxhdGZvcm0sICpwOworCWNoYXIgKmtfcGxhdGZvcm0sICprX2Jhc2VfcGxhdGZvcm07CisJY2hhciBfX3VzZXIgKnVfcGxhdGZvcm0sICp1X2Jhc2VfcGxhdGZvcm0sICpwOwogCWxvbmcgaHdjYXA7CiAJaW50IGxvb3A7CiAJaW50IG5yOwkvKiByZXNldCBmb3IgZWFjaCBjc3AgYWRqdXN0bWVudCAqLwogCi0JLyogd2UncmUgZ29pbmcgdG8gc2hvdmVsIGEgd2hvbGUgbG9hZCBvZiBzdHVmZiBvbnRvIHRoZSBzdGFjayAqLwogI2lmZGVmIENPTkZJR19NTVUKLQlzcCA9IGJwcm0tPnA7CisJLyogSW4gc29tZSBjYXNlcyAoZS5nLiBIeXBlci1UaHJlYWRpbmcpLCB3ZSB3YW50IHRvIGF2b2lkIEwxIGV2aWN0aW9ucworCSAqIGJ5IHRoZSBwcm9jZXNzZXMgcnVubmluZyBvbiB0aGUgc2FtZSBwYWNrYWdlLiBPbmUgdGhpbmcgd2UgY2FuIGRvIGlzCisJICogdG8gc2h1ZmZsZSB0aGUgaW5pdGlhbCBzdGFjayBmb3IgdGhlbSwgc28gd2UgZ2l2ZSB0aGUgYXJjaGl0ZWN0dXJlCisJICogYW4gb3Bwb3J0dW5pdHkgdG8gZG8gc28gaGVyZS4KKwkgKi8KKwlzcCA9IGFyY2hfYWxpZ25fc3RhY2soYnBybS0+cCk7CiAjZWxzZQogCXNwID0gbW0tPnN0YXJ0X3N0YWNrOwogCkBAIC00ODMsMTEgKzQ5OSwxNCBAQAogCQlyZXR1cm4gLUVGQVVMVDsKICNlbmRpZgogCi0JLyogZ2V0IGhvbGQgb2YgcGxhdGZvcm0gYW5kIGhhcmR3YXJlIGNhcGFiaWxpdGllcyBtYXNrcyBmb3IgdGhlIG1hY2hpbmUKLQkgKiB3ZSBhcmUgcnVubmluZyBvbi4gIEluIHNvbWUgY2FzZXMgKFNwYXJjKSwgdGhpcyBpbmZvIGlzIGltcG9zc2libGUKLQkgKiB0byBnZXQsIGluIG90aGVycyAoaTM4NikgaXQgaXMgbWVyZWx5IGRpZmZpY3VsdC4KLQkgKi8KIAlod2NhcCA9IEVMRl9IV0NBUDsKKworCS8qCisJICogSWYgdGhpcyBhcmNoaXRlY3R1cmUgaGFzIGEgcGxhdGZvcm0gY2FwYWJpbGl0eSBzdHJpbmcsIGNvcHkgaXQKKwkgKiB0byB1c2Vyc3BhY2UuICBJbiBzb21lIGNhc2VzIChTcGFyYyksIHRoaXMgaW5mbyBpcyBpbXBvc3NpYmxlCisJICogZm9yIHVzZXJzcGFjZSB0byBnZXQgYW55IG90aGVyIHdheSwgaW4gb3RoZXJzIChpMzg2KSBpdCBpcworCSAqIG1lcmVseSBkaWZmaWN1bHQuCisJICovCiAJa19wbGF0Zm9ybSA9IEVMRl9QTEFURk9STTsKIAl1X3BsYXRmb3JtID0gTlVMTDsKIApAQCAtNDk5LDE5ICs1MTgsMjAgQEAKIAkJCXJldHVybiAtRUZBVUxUOwogCX0KIAotI2lmIGRlZmluZWQoX19pMzg2X18pICYmIGRlZmluZWQoQ09ORklHX1NNUCkKLQkvKiBpbiBzb21lIGNhc2VzIChlLmcuIEh5cGVyLVRocmVhZGluZyksIHdlIHdhbnQgdG8gYXZvaWQgTDEgZXZpY3Rpb25zCi0JICogYnkgdGhlIHByb2Nlc3NlcyBydW5uaW5nIG9uIHRoZSBzYW1lIHBhY2thZ2UuIE9uZSB0aGluZyB3ZSBjYW4gZG8gaXMKLQkgKiB0byBzaHVmZmxlIHRoZSBpbml0aWFsIHN0YWNrIGZvciB0aGVtLgotCSAqCi0JICogdGhlIGNvbmRpdGlvbmFscyBoZXJlIGFyZSB1bm5lZWRlZCwgYnV0IGtlcHQgaW4gdG8gbWFrZSB0aGUgY29kZQotCSAqIGJlaGF2aW91ciB0aGUgc2FtZSBhcyBwcmUgY2hhbmdlIHVubGVzcyB3ZSBoYXZlIGh5cGVydGhyZWFkZWQKLQkgKiBwcm9jZXNzb3JzLiBUaGlzIGtlZXBzIE1yIE1hcmNlbG8gUGVyc29uIGhhcHBpZXIgYnV0IHNob3VsZCBiZQotCSAqIHJlbW92ZWQgZm9yIDIuNQorCS8qCisJICogSWYgdGhpcyBhcmNoaXRlY3R1cmUgaGFzIGEgImJhc2UiIHBsYXRmb3JtIGNhcGFiaWxpdHkKKwkgKiBzdHJpbmcsIGNvcHkgaXQgdG8gdXNlcnNwYWNlLgogCSAqLwotCWlmIChzbXBfbnVtX3NpYmxpbmdzID4gMSkKLQkJc3AgPSBzcCAtICgoY3VycmVudC0+cGlkICUgNjQpIDw8IDcpOwotI2VuZGlmCisJa19iYXNlX3BsYXRmb3JtID0gRUxGX0JBU0VfUExBVEZPUk07CisJdV9iYXNlX3BsYXRmb3JtID0gTlVMTDsKKworCWlmIChrX2Jhc2VfcGxhdGZvcm0pIHsKKwkJcGxhdGZvcm1fbGVuID0gc3RybGVuKGtfYmFzZV9wbGF0Zm9ybSkgKyAxOworCQlzcCAtPSBwbGF0Zm9ybV9sZW47CisJCXVfYmFzZV9wbGF0Zm9ybSA9IChjaGFyIF9fdXNlciAqKSBzcDsKKwkJaWYgKF9fY29weV90b191c2VyKHVfYmFzZV9wbGF0Zm9ybSwga19iYXNlX3BsYXRmb3JtLCBwbGF0Zm9ybV9sZW4pICE9IDApCisJCQlyZXR1cm4gLUVGQVVMVDsKKwl9CiAKIAlzcCAmPSB+N1VMOwogCkBAIC01NDEsOSArNTYxLDEzIEBACiAJfQogCiAJLyogZm9yY2UgMTYgYnl0ZSBfZmluYWxfIGFsaWdubWVudCBoZXJlIGZvciBnZW5lcmFsaXR5ICovCi0jZGVmaW5lIERMSU5GT19JVEVNUyAxMworI2RlZmluZSBETElORk9fSVRFTVMgMTUKIAotCW5pdGVtcyA9IDEgKyBETElORk9fSVRFTVMgKyAoa19wbGF0Zm9ybSA/IDEgOiAwKSArIEFUX1ZFQ1RPUl9TSVpFX0FSQ0g7CisJbml0ZW1zID0gMSArIERMSU5GT19JVEVNUyArIChrX3BsYXRmb3JtID8gMSA6IDApICsKKwkJKGtfYmFzZV9wbGF0Zm9ybSA/IDEgOiAwKSArIEFUX1ZFQ1RPUl9TSVpFX0FSQ0g7CisKKwlpZiAoYnBybS0+aW50ZXJwX2ZsYWdzICYgQklOUFJNX0ZMQUdTX0VYRUNGRCkKKwkJbml0ZW1zKys7CiAKIAljc3AgPSBzcDsKIAlzcCAtPSBuaXRlbXMgKiAyICogc2l6ZW9mKHVuc2lnbmVkIGxvbmcpOwpAQCAtNTc1LDYgKzU5OSwxOSBAQAogCQkJICAgIChlbGZfYWRkcl90KSAodW5zaWduZWQgbG9uZykgdV9wbGF0Zm9ybSk7CiAJfQogCisJaWYgKGtfYmFzZV9wbGF0Zm9ybSkgeworCQluciA9IDA7CisJCWNzcCAtPSAyICogc2l6ZW9mKHVuc2lnbmVkIGxvbmcpOworCQlORVdfQVVYX0VOVChBVF9CQVNFX1BMQVRGT1JNLAorCQkJICAgIChlbGZfYWRkcl90KSAodW5zaWduZWQgbG9uZykgdV9iYXNlX3BsYXRmb3JtKTsKKwl9CisKKwlpZiAoYnBybS0+aW50ZXJwX2ZsYWdzICYgQklOUFJNX0ZMQUdTX0VYRUNGRCkgeworCQluciA9IDA7CisJCWNzcCAtPSAyICogc2l6ZW9mKHVuc2lnbmVkIGxvbmcpOworCQlORVdfQVVYX0VOVChBVF9FWEVDRkQsIGJwcm0tPmludGVycF9kYXRhKTsKKwl9CisKIAluciA9IDA7CiAJY3NwIC09IERMSU5GT19JVEVNUyAqIDIgKiBzaXplb2YodW5zaWduZWQgbG9uZyk7CiAJTkVXX0FVWF9FTlQoQVRfSFdDQVAsCWh3Y2FwKTsKQEAgLTU5MCw2ICs2MjcsOCBAQAogCU5FV19BVVhfRU5UKEFUX0VVSUQsCShlbGZfYWRkcl90KSBjdXJyZW50LT5ldWlkKTsKIAlORVdfQVVYX0VOVChBVF9HSUQsCShlbGZfYWRkcl90KSBjdXJyZW50LT5naWQpOwogCU5FV19BVVhfRU5UKEFUX0VHSUQsCShlbGZfYWRkcl90KSBjdXJyZW50LT5lZ2lkKTsKKwlORVdfQVVYX0VOVChBVF9TRUNVUkUsCXNlY3VyaXR5X2Jwcm1fc2VjdXJlZXhlYyhicHJtKSk7CisJTkVXX0FVWF9FTlQoQVRfRVhFQ0ZOLAlicHJtLT5leGVjKTsKIAogI2lmZGVmIEFSQ0hfRExJTkZPCiAJbnIgPSAwOwpkaWZmIC0tZ2l0IGEvZnMvYmluZm10X2VtODYuYyBiL2ZzL2JpbmZtdF9lbTg2LmMKaW5kZXggZjljODhkMC4uMzJmYjAwYiAxMDA2NDQKLS0tIGEvZnMvYmluZm10X2VtODYuYworKysgYi9mcy9iaW5mbXRfZW04Ni5jCkBAIC00Myw3ICs0Myw3IEBACiAJCQlyZXR1cm4gLUVOT0VYRUM7CiAJfQogCi0JYnBybS0+c2hfYmFuZyA9IDE7CS8qIFdlbGwsIHRoZSBiYW5nLXNoZWxsIGlzIGltcGxpY2l0Li4uICovCisJYnBybS0+cmVjdXJzaW9uX2RlcHRoKys7IC8qIFdlbGwsIHRoZSBiYW5nLXNoZWxsIGlzIGltcGxpY2l0Li4uICovCiAJYWxsb3dfd3JpdGVfYWNjZXNzKGJwcm0tPmZpbGUpOwogCWZwdXQoYnBybS0+ZmlsZSk7CiAJYnBybS0+ZmlsZSA9IE5VTEw7CmRpZmYgLS1naXQgYS9mcy9iaW5mbXRfZmxhdC5jIGIvZnMvYmluZm10X2ZsYXQuYwppbmRleCBkZmMwMTk3Li5jY2I3ODFhIDEwMDY0NAotLS0gYS9mcy9iaW5mbXRfZmxhdC5jCisrKyBiL2ZzL2JpbmZtdF9mbGF0LmMKQEAgLTIyOSwxMyArMjI5LDEzIEBACiAJcmV0ID0gMTA7CiAJaWYgKGJ1ZlszXSAmIEVYVFJBX0ZJRUxEKSB7CiAJCXJldCArPSAyICsgYnVmWzEwXSArIChidWZbMTFdIDw8IDgpOwotCQlpZiAodW5saWtlbHkoTEJVRlNJWkUgPT0gcmV0KSkgeworCQlpZiAodW5saWtlbHkoTEJVRlNJWkUgPD0gcmV0KSkgewogCQkJREJHX0ZMVCgiYmluZm10X2ZsYXQ6IGJ1ZmZlciBvdmVyZmxvdyAoRVhUUkEpP1xuIik7CiAJCQlnb3RvIG91dF9mcmVlX2J1ZjsKIAkJfQogCX0KIAlpZiAoYnVmWzNdICYgT1JJR19OQU1FKSB7Ci0JCWZvciAoOyByZXQgPCBMQlVGU0laRSAmJiAoYnVmW3JldF0gIT0gMCk7IHJldCsrKQorCQl3aGlsZSAocmV0IDwgTEJVRlNJWkUgJiYgYnVmW3JldCsrXSAhPSAwKQogCQkJOwogCQlpZiAodW5saWtlbHkoTEJVRlNJWkUgPT0gcmV0KSkgewogCQkJREJHX0ZMVCgiYmluZm10X2ZsYXQ6IGJ1ZmZlciBvdmVyZmxvdyAoT1JJR19OQU1FKT9cbiIpOwpAQCAtMjQzLDcgKzI0Myw3IEBACiAJCX0KIAl9CiAJaWYgKGJ1ZlszXSAmIENPTU1FTlQpIHsKLQkJZm9yICg7ICByZXQgPCBMQlVGU0laRSAmJiAoYnVmW3JldF0gIT0gMCk7IHJldCsrKQorCQl3aGlsZSAocmV0IDwgTEJVRlNJWkUgJiYgYnVmW3JldCsrXSAhPSAwKQogCQkJOwogCQlpZiAodW5saWtlbHkoTEJVRlNJWkUgPT0gcmV0KSkgewogCQkJREJHX0ZMVCgiYmluZm10X2ZsYXQ6IGJ1ZmZlciBvdmVyZmxvdyAoQ09NTUVOVCk/XG4iKTsKZGlmZiAtLWdpdCBhL2ZzL2JpbmZtdF9taXNjLmMgYi9mcy9iaW5mbXRfbWlzYy5jCmluZGV4IDhkN2U4OGUuLmYyNzQ0YWIgMTAwNjQ0Ci0tLSBhL2ZzL2JpbmZtdF9taXNjLmMKKysrIGIvZnMvYmluZm10X21pc2MuYwpAQCAtMTE3LDcgKzExNyw3IEBACiAJCWdvdG8gX3JldDsKIAogCXJldHZhbCA9IC1FTk9FWEVDOwotCWlmIChicHJtLT5taXNjX2JhbmcpCisJaWYgKGJwcm0tPnJlY3Vyc2lvbl9kZXB0aCA+IEJJTlBSTV9NQVhfUkVDVVJTSU9OKQogCQlnb3RvIF9yZXQ7CiAKIAkvKiB0byBrZWVwIGxvY2tpbmcgdGltZSBsb3csIHdlIGNvcHkgdGhlIGludGVycHJldGVyIHN0cmluZyAqLwpAQCAtMTk3LDcgKzE5Nyw3IEBACiAJaWYgKHJldHZhbCA8IDApCiAJCWdvdG8gX2Vycm9yOwogCi0JYnBybS0+bWlzY19iYW5nID0gMTsKKwlicHJtLT5yZWN1cnNpb25fZGVwdGgrKzsKIAogCXJldHZhbCA9IHNlYXJjaF9iaW5hcnlfaGFuZGxlciAoYnBybSwgcmVncyk7CiAJaWYgKHJldHZhbCA8IDApCmRpZmYgLS1naXQgYS9mcy9iaW5mbXRfc2NyaXB0LmMgYi9mcy9iaW5mbXRfc2NyaXB0LmMKaW5kZXggOWUzOTYzZjcuLjA4MzQzNTAgMTAwNjQ0Ci0tLSBhL2ZzL2JpbmZtdF9zY3JpcHQuYworKysgYi9mcy9iaW5mbXRfc2NyaXB0LmMKQEAgLTIyLDE0ICsyMiwxNSBAQAogCWNoYXIgaW50ZXJwW0JJTlBSTV9CVUZfU0laRV07CiAJaW50IHJldHZhbDsKIAotCWlmICgoYnBybS0+YnVmWzBdICE9ICcjJykgfHwgKGJwcm0tPmJ1ZlsxXSAhPSAnIScpIHx8IChicHJtLT5zaF9iYW5nKSkgCisJaWYgKChicHJtLT5idWZbMF0gIT0gJyMnKSB8fCAoYnBybS0+YnVmWzFdICE9ICchJykgfHwKKwkgICAgKGJwcm0tPnJlY3Vyc2lvbl9kZXB0aCA+IEJJTlBSTV9NQVhfUkVDVVJTSU9OKSkKIAkJcmV0dXJuIC1FTk9FWEVDOwogCS8qCiAJICogVGhpcyBzZWN0aW9uIGRvZXMgdGhlICMhIGludGVycHJldGF0aW9uLgogCSAqIFNvcnRhIGNvbXBsaWNhdGVkLCBidXQgaG9wZWZ1bGx5IGl0IHdpbGwgd29yay4gIC1UWVQKIAkgKi8KIAotCWJwcm0tPnNoX2JhbmcgPSAxOworCWJwcm0tPnJlY3Vyc2lvbl9kZXB0aCsrOwogCWFsbG93X3dyaXRlX2FjY2VzcyhicHJtLT5maWxlKTsKIAlmcHV0KGJwcm0tPmZpbGUpOwogCWJwcm0tPmZpbGUgPSBOVUxMOwpkaWZmIC0tZ2l0IGEvZnMvYmluZm10X3NvbS5jIGIvZnMvYmluZm10X3NvbS5jCmluZGV4IDY4YmU1ODAuLjc0ZTU4N2EgMTAwNjQ0Ci0tLSBhL2ZzL2JpbmZtdF9zb20uYworKysgYi9mcy9iaW5mbXRfc29tLmMKQEAgLTMwNiwzICszMDYsNSBAQAogCiBjb3JlX2luaXRjYWxsKGluaXRfc29tX2JpbmZtdCk7CiBtb2R1bGVfZXhpdChleGl0X3NvbV9iaW5mbXQpOworCitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9mcy9ibG9ja19kZXYuYyBiL2ZzL2Jsb2NrX2Rldi5jCmluZGV4IGQ4NGYwNDY5Li4yMTg0MDhlIDEwMDY0NAotLS0gYS9mcy9ibG9ja19kZXYuYworKysgYi9mcy9ibG9ja19kZXYuYwpAQCAtMTI2Miw3ICsxMjYyLDcgQEAKIAogLyoqCiAgKiBsb29rdXBfYmRldiAgLSBsb29rdXAgYSBzdHJ1Y3QgYmxvY2tfZGV2aWNlIGJ5IG5hbWUKLSAqIEBwYXRobmFtZToJc3BlY2lhbCBmaWxlIHJlcHJlc2VudGluZyB0aGUgYmxvY2sgZGV2aWNlCisgKiBAcGF0aDoJc3BlY2lhbCBmaWxlIHJlcHJlc2VudGluZyB0aGUgYmxvY2sgZGV2aWNlCiAgKgogICogR2V0IGEgcmVmZXJlbmNlIHRvIHRoZSBibG9ja2RldmljZSBhdCBAcGF0aG5hbWUgaW4gdGhlIGN1cnJlbnQKICAqIG5hbWVzcGFjZSBpZiBwb3NzaWJsZSBhbmQgcmV0dXJuIGl0LiAgUmV0dXJuIEVSUl9QVFIoZXJyb3IpCmRpZmYgLS1naXQgYS9mcy9idWZmZXIuYyBiL2ZzL2J1ZmZlci5jCmluZGV4IGFjNzhkNGMuLjY1NjlmZGEgMTAwNjQ0Ci0tLSBhL2ZzL2J1ZmZlci5jCisrKyBiL2ZzL2J1ZmZlci5jCkBAIC03Niw4ICs3Niw3IEBACiAKIHZvaWQgdW5sb2NrX2J1ZmZlcihzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoKQogewotCXNtcF9tYl9fYmVmb3JlX2NsZWFyX2JpdCgpOwotCWNsZWFyX2J1ZmZlcl9sb2NrZWQoYmgpOworCWNsZWFyX2JpdF91bmxvY2soQkhfTG9jaywgJmJoLT5iX3N0YXRlKTsKIAlzbXBfbWJfX2FmdGVyX2NsZWFyX2JpdCgpOwogCXdha2VfdXBfYml0KCZiaC0+Yl9zdGF0ZSwgQkhfTG9jayk7CiB9CmRpZmYgLS1naXQgYS9mcy9jaGFyX2Rldi5jIGIvZnMvY2hhcl9kZXYuYwppbmRleCAzY2I3Y2RhLi4yNjJmYTEwIDEwMDY0NAotLS0gYS9mcy9jaGFyX2Rldi5jCisrKyBiL2ZzL2NoYXJfZGV2LmMKQEAgLTIyLDkgKzIyLDYgQEAKICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogI2luY2x1ZGUgPGxpbnV4L2JhY2tpbmctZGV2Lmg+CiAKLSNpZmRlZiBDT05GSUdfS01PRAotI2luY2x1ZGUgPGxpbnV4L2ttb2QuaD4KLSNlbmRpZgogI2luY2x1ZGUgImludGVybmFsLmgiCiAKIC8qCmRpZmYgLS1naXQgYS9mcy9jaWZzL0tjb25maWcgYi9mcy9jaWZzL0tjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzQxYTk4OQotLS0gL2Rldi9udWxsCisrKyBiL2ZzL2NpZnMvS2NvbmZpZwpAQCAtMCwwICsxLDE0MiBAQAorY29uZmlnIENJRlMKKwl0cmlzdGF0ZSAiQ0lGUyBzdXBwb3J0IChhZHZhbmNlZCBuZXR3b3JrIGZpbGVzeXN0ZW0sIFNNQkZTIHN1Y2Nlc3NvcikiCisJZGVwZW5kcyBvbiBJTkVUCisJc2VsZWN0IE5MUworCWhlbHAKKwkgIFRoaXMgaXMgdGhlIGNsaWVudCBWRlMgbW9kdWxlIGZvciB0aGUgQ29tbW9uIEludGVybmV0IEZpbGUgU3lzdGVtCisJICAoQ0lGUykgcHJvdG9jb2wgd2hpY2ggaXMgdGhlIHN1Y2Nlc3NvciB0byB0aGUgU2VydmVyIE1lc3NhZ2UgQmxvY2sKKwkgIChTTUIpIHByb3RvY29sLCB0aGUgbmF0aXZlIGZpbGUgc2hhcmluZyBtZWNoYW5pc20gZm9yIG1vc3QgZWFybHkKKwkgIFBDIG9wZXJhdGluZyBzeXN0ZW1zLiAgVGhlIENJRlMgcHJvdG9jb2wgaXMgZnVsbHkgc3VwcG9ydGVkIGJ5CisJICBmaWxlIHNlcnZlcnMgc3VjaCBhcyBXaW5kb3dzIDIwMDAgKGluY2x1ZGluZyBXaW5kb3dzIDIwMDMsIE5UIDQKKwkgIGFuZCBXaW5kb3dzIFhQKSBhcyB3ZWxsIGJ5IFNhbWJhICh3aGljaCBwcm92aWRlcyBleGNlbGxlbnQgQ0lGUworCSAgc2VydmVyIHN1cHBvcnQgZm9yIExpbnV4IGFuZCBtYW55IG90aGVyIG9wZXJhdGluZyBzeXN0ZW1zKS4gTGltaXRlZAorCSAgc3VwcG9ydCBmb3IgT1MvMiBhbmQgV2luZG93cyBNRSBhbmQgc2ltaWxhciBzZXJ2ZXJzIGlzIHByb3ZpZGVkIGFzCisJICB3ZWxsLgorCisJICBUaGUgY2lmcyBtb2R1bGUgcHJvdmlkZXMgYW4gYWR2YW5jZWQgbmV0d29yayBmaWxlIHN5c3RlbQorCSAgY2xpZW50IGZvciBtb3VudGluZyB0byBDSUZTIGNvbXBsaWFudCBzZXJ2ZXJzLiAgSXQgaW5jbHVkZXMKKwkgIHN1cHBvcnQgZm9yIERGUyAoaGllcmFyY2hpY2FsIG5hbWUgc3BhY2UpLCBzZWN1cmUgcGVyLXVzZXIKKwkgIHNlc3Npb24gZXN0YWJsaXNobWVudCB2aWEgS2VyYmVyb3Mgb3IgTlRMTSBvciBOVExNdjIsCisJICBzYWZlIGRpc3RyaWJ1dGVkIGNhY2hpbmcgKG9wbG9jayksIG9wdGlvbmFsIHBhY2tldAorCSAgc2lnbmluZywgVW5pY29kZSBhbmQgb3RoZXIgaW50ZXJuYXRpb25hbGl6YXRpb24gaW1wcm92ZW1lbnRzLgorCSAgSWYgeW91IG5lZWQgdG8gbW91bnQgdG8gU2FtYmEgb3IgV2luZG93cyBmcm9tIHRoaXMgbWFjaGluZSwgc2F5IFkuCisKK2NvbmZpZyBDSUZTX1NUQVRTCisgICAgICAgIGJvb2wgIkNJRlMgc3RhdGlzdGljcyIKKyAgICAgICAgZGVwZW5kcyBvbiBDSUZTCisgICAgICAgIGhlbHAKKyAgICAgICAgICBFbmFibGluZyB0aGlzIG9wdGlvbiB3aWxsIGNhdXNlIHN0YXRpc3RpY3MgZm9yIGVhY2ggc2VydmVyIHNoYXJlCisJICBtb3VudGVkIGJ5IHRoZSBjaWZzIGNsaWVudCB0byBiZSBkaXNwbGF5ZWQgaW4gL3Byb2MvZnMvY2lmcy9TdGF0cworCitjb25maWcgQ0lGU19TVEFUUzIKKwlib29sICJFeHRlbmRlZCBzdGF0aXN0aWNzIgorCWRlcGVuZHMgb24gQ0lGU19TVEFUUworCWhlbHAKKwkgIEVuYWJsaW5nIHRoaXMgb3B0aW9uIHdpbGwgYWxsb3cgbW9yZSBkZXRhaWxlZCBzdGF0aXN0aWNzIG9uIFNNQgorCSAgcmVxdWVzdCB0aW1pbmcgdG8gYmUgZGlzcGxheWVkIGluIC9wcm9jL2ZzL2NpZnMvRGVidWdEYXRhIGFuZCBhbHNvCisJICBhbGxvdyBvcHRpb25hbCBsb2dnaW5nIG9mIHNsb3cgcmVzcG9uc2VzIHRvIGRtZXNnIChkZXBlbmRpbmcgb24gdGhlCisJICB2YWx1ZSBvZiAvcHJvYy9mcy9jaWZzL2NpZnNGWUksIHNlZSBmcy9jaWZzL1JFQURNRSBmb3IgbW9yZSBkZXRhaWxzKS4KKwkgIFRoZXNlIGFkZGl0aW9uYWwgc3RhdGlzdGljcyBtYXkgaGF2ZSBhIG1pbm9yIGVmZmVjdCBvbiBwZXJmb3JtYW5jZQorCSAgYW5kIG1lbW9yeSB1dGlsaXphdGlvbi4KKworCSAgVW5sZXNzIHlvdSBhcmUgYSBkZXZlbG9wZXIgb3IgYXJlIGRvaW5nIG5ldHdvcmsgcGVyZm9ybWFuY2UgYW5hbHlzaXMKKwkgIG9yIHR1bmluZywgc2F5IE4uCisKK2NvbmZpZyBDSUZTX1dFQUtfUFdfSEFTSAorCWJvb2wgIlN1cHBvcnQgbGVnYWN5IHNlcnZlcnMgd2hpY2ggdXNlIHdlYWtlciBMQU5NQU4gc2VjdXJpdHkiCisJZGVwZW5kcyBvbiBDSUZTCisJaGVscAorCSAgTW9kZXJuIENJRlMgc2VydmVycyBpbmNsdWRpbmcgU2FtYmEgYW5kIG1vc3QgV2luZG93cyB2ZXJzaW9ucworCSAgKHNpbmNlIDE5OTcpIHN1cHBvcnQgc3Ryb25nZXIgTlRMTSAoYW5kIGV2ZW4gTlRMTXYyIGFuZCBLZXJiZXJvcykKKwkgIHNlY3VyaXR5IG1lY2hhbmlzbXMuIFRoZXNlIGhhc2ggdGhlIHBhc3N3b3JkIG1vcmUgc2VjdXJlbHkKKwkgIHRoYW4gdGhlIG1lY2hhbmlzbXMgdXNlZCBpbiB0aGUgb2xkZXIgTEFOTUFOIHZlcnNpb24gb2YgdGhlCisJICBTTUIgcHJvdG9jb2wgYnV0IExBTk1BTiBiYXNlZCBhdXRoZW50aWNhdGlvbiBpcyBuZWVkZWQgdG8KKwkgIGVzdGFibGlzaCBzZXNzaW9ucyB3aXRoIHNvbWUgb2xkIFNNQiBzZXJ2ZXJzLgorCisJICBFbmFibGluZyB0aGlzIG9wdGlvbiBhbGxvd3MgdGhlIGNpZnMgbW9kdWxlIHRvIG1vdW50IHRvIG9sZGVyCisJICBMQU5NQU4gYmFzZWQgc2VydmVycyBzdWNoIGFzIE9TLzIgYW5kIFdpbmRvd3MgOTUsIGJ1dCBzdWNoCisJICBtb3VudHMgbWF5IGJlIGxlc3Mgc2VjdXJlIHRoYW4gbW91bnRzIHVzaW5nIE5UTE0gb3IgbW9yZSByZWNlbnQKKwkgIHNlY3VyaXR5IG1lY2hhbmlzbXMgaWYgeW91IGFyZSBvbiBhIHB1YmxpYyBuZXR3b3JrLiAgVW5sZXNzIHlvdQorCSAgaGF2ZSBhIG5lZWQgdG8gYWNjZXNzIG9sZCBTTUIgc2VydmVycyAoYW5kIGFyZSBvbiBhIHByaXZhdGUKKwkgIG5ldHdvcmspIHlvdSBwcm9iYWJseSB3YW50IHRvIHNheSBOLiAgRXZlbiBpZiB0aGlzIHN1cHBvcnQKKwkgIGlzIGVuYWJsZWQgaW4gdGhlIGtlcm5lbCBidWlsZCwgTEFOTUFOIGF1dGhlbnRpY2F0aW9uIHdpbGwgbm90IGJlCisJICB1c2VkIGF1dG9tYXRpY2FsbHkuIEF0IHJ1bnRpbWUgTEFOTUFOIG1vdW50cyBhcmUgZGlzYWJsZWQgYnV0CisJICBjYW4gYmUgc2V0IHRvIHJlcXVpcmVkIChvciBvcHRpb25hbCkgZWl0aGVyIGluCisJICAvcHJvYy9mcy9jaWZzIChzZWUgZnMvY2lmcy9SRUFETUUgZm9yIG1vcmUgZGV0YWlsKSBvciB2aWEgYW4KKwkgIG9wdGlvbiBvbiB0aGUgbW91bnQgY29tbWFuZC4gVGhpcyBzdXBwb3J0IGlzIGRpc2FibGVkIGJ5CisJICBkZWZhdWx0IGluIG9yZGVyIHRvIHJlZHVjZSB0aGUgcG9zc2liaWxpdHkgb2YgYSBkb3duZ3JhZGUKKwkgIGF0dGFjay4KKworCSAgSWYgdW5zdXJlLCBzYXkgTi4KKworY29uZmlnIENJRlNfVVBDQUxMCisJICBib29sICJLZXJiZXJvcy9TUE5FR08gYWR2YW5jZWQgc2Vzc2lvbiBzZXR1cCIKKwkgIGRlcGVuZHMgb24gQ0lGUyAmJiBLRVlTCisJICBoZWxwCisJICAgIEVuYWJsZXMgYW4gdXBjYWxsIG1lY2hhbmlzbSBmb3IgQ0lGUyB3aGljaCBhY2Nlc3NlcworCSAgICB1c2Vyc3BhY2UgaGVscGVyIHV0aWxpdGllcyB0byBwcm92aWRlIFNQTkVHTyBwYWNrYWdlZCAoUkZDIDQxNzgpCisJICAgIEtlcmJlcm9zIHRpY2tldHMgd2hpY2ggYXJlIG5lZWRlZCB0byBtb3VudCB0byBjZXJ0YWluIHNlY3VyZSBzZXJ2ZXJzCisJICAgIChmb3Igd2hpY2ggbW9yZSBzZWN1cmUgS2VyYmVyb3MgYXV0aGVudGljYXRpb24gaXMgcmVxdWlyZWQpLiBJZgorCSAgICB1bnN1cmUsIHNheSBOLgorCitjb25maWcgQ0lGU19YQVRUUgorICAgICAgICBib29sICJDSUZTIGV4dGVuZGVkIGF0dHJpYnV0ZXMiCisgICAgICAgIGRlcGVuZHMgb24gQ0lGUworICAgICAgICBoZWxwCisgICAgICAgICAgRXh0ZW5kZWQgYXR0cmlidXRlcyBhcmUgbmFtZTp2YWx1ZSBwYWlycyBhc3NvY2lhdGVkIHdpdGggaW5vZGVzIGJ5CisgICAgICAgICAgdGhlIGtlcm5lbCBvciBieSB1c2VycyAoc2VlIHRoZSBhdHRyKDUpIG1hbnVhbCBwYWdlLCBvciB2aXNpdAorICAgICAgICAgIDxodHRwOi8vYWNsLmJlc3RiaXRzLmF0Lz4gZm9yIGRldGFpbHMpLiAgQ0lGUyBtYXBzIHRoZSBuYW1lIG9mCisgICAgICAgICAgZXh0ZW5kZWQgYXR0cmlidXRlcyBiZWdpbm5pbmcgd2l0aCB0aGUgdXNlciBuYW1lc3BhY2UgcHJlZml4CisgICAgICAgICAgdG8gU01CL0NJRlMgRUFzLiBFQXMgYXJlIHN0b3JlZCBvbiBXaW5kb3dzIHNlcnZlcnMgd2l0aG91dCB0aGUKKyAgICAgICAgICB1c2VyIG5hbWVzcGFjZSBwcmVmaXgsIGJ1dCB0aGVpciBuYW1lcyBhcmUgc2VlbiBieSBMaW51eCBjaWZzIGNsaWVudHMKKyAgICAgICAgICBwcmVmYWNlZCBieSB0aGUgdXNlciBuYW1lc3BhY2UgcHJlZml4LiBUaGUgc3lzdGVtIG5hbWVzcGFjZQorICAgICAgICAgICh1c2VkIGJ5IHNvbWUgZmlsZXN5c3RlbXMgdG8gc3RvcmUgQUNMcykgaXMgbm90IHN1cHBvcnRlZCBhdAorICAgICAgICAgIHRoaXMgdGltZS4KKworICAgICAgICAgIElmIHVuc3VyZSwgc2F5IE4uCisKK2NvbmZpZyBDSUZTX1BPU0lYCisgICAgICAgIGJvb2wgIkNJRlMgUE9TSVggRXh0ZW5zaW9ucyIKKyAgICAgICAgZGVwZW5kcyBvbiBDSUZTX1hBVFRSCisgICAgICAgIGhlbHAKKyAgICAgICAgICBFbmFibGluZyB0aGlzIG9wdGlvbiB3aWxsIGNhdXNlIHRoZSBjaWZzIGNsaWVudCB0byBhdHRlbXB0IHRvCisJICBuZWdvdGlhdGUgYSBuZXdlciBkaWFsZWN0IHdpdGggc2VydmVycywgc3VjaCBhcyBTYW1iYSAzLjAuNQorCSAgb3IgbGF0ZXIsIHRoYXQgb3B0aW9uYWxseSBjYW4gaGFuZGxlIG1vcmUgUE9TSVggbGlrZSAocmF0aGVyCisJICB0aGFuIFdpbmRvd3MgbGlrZSkgZmlsZSBiZWhhdmlvci4gIEl0IGFsc28gZW5hYmxlcworCSAgc3VwcG9ydCBmb3IgUE9TSVggQUNMcyAoZ2V0ZmFjbCBhbmQgc2V0ZmFjbCkgdG8gc2VydmVycworCSAgKHN1Y2ggYXMgU2FtYmEgMy4xMCBhbmQgbGF0ZXIpIHdoaWNoIGNhbiBuZWdvdGlhdGUKKwkgIENJRlMgUE9TSVggQUNMIHN1cHBvcnQuICBJZiB1bnN1cmUsIHNheSBOLgorCitjb25maWcgQ0lGU19ERUJVRzIKKwlib29sICJFbmFibGUgYWRkaXRpb25hbCBDSUZTIGRlYnVnZ2luZyByb3V0aW5lcyIKKwlkZXBlbmRzIG9uIENJRlMKKwloZWxwCisJICAgRW5hYmxpbmcgdGhpcyBvcHRpb24gYWRkcyBhIGZldyBtb3JlIGRlYnVnZ2luZyByb3V0aW5lcworCSAgIHRvIHRoZSBjaWZzIGNvZGUgd2hpY2ggc2xpZ2h0bHkgaW5jcmVhc2VzIHRoZSBzaXplIG9mCisJICAgdGhlIGNpZnMgbW9kdWxlIGFuZCBjYW4gY2F1c2UgYWRkaXRpb25hbCBsb2dnaW5nIG9mIGRlYnVnCisJICAgbWVzc2FnZXMgaW4gc29tZSBlcnJvciBwYXRocywgc2xvd2luZyBwZXJmb3JtYW5jZS4gVGhpcworCSAgIG9wdGlvbiBjYW4gYmUgdHVybmVkIG9mZiB1bmxlc3MgeW91IGFyZSBkZWJ1Z2dpbmcKKwkgICBjaWZzIHByb2JsZW1zLiAgSWYgdW5zdXJlLCBzYXkgTi4KKworY29uZmlnIENJRlNfRVhQRVJJTUVOVEFMCisJICBib29sICJDSUZTIEV4cGVyaW1lbnRhbCBGZWF0dXJlcyAoRVhQRVJJTUVOVEFMKSIKKwkgIGRlcGVuZHMgb24gQ0lGUyAmJiBFWFBFUklNRU5UQUwKKwkgIGhlbHAKKwkgICAgRW5hYmxlcyBjaWZzIGZlYXR1cmVzIHVuZGVyIHRlc3RpbmcuIFRoZXNlIGZlYXR1cmVzIGFyZQorCSAgICBleHBlcmltZW50YWwgYW5kIGN1cnJlbnRseSBpbmNsdWRlIERGUyBzdXBwb3J0IGFuZCBkaXJlY3RvcnkKKwkgICAgY2hhbmdlIG5vdGlmaWNhdGlvbiBpZSBmY250bChGX0ROT1RJRlkpLCBhcyB3ZWxsIGFzIHRoZSB1cGNhbGwKKwkgICAgbWVjaGFuaXNtIHdoaWNoIHdpbGwgYmUgdXNlZCBmb3IgS2VyYmVyb3Mgc2Vzc2lvbiBuZWdvdGlhdGlvbgorCSAgICBhbmQgdWlkIHJlbWFwcGluZy4gIFNvbWUgb2YgdGhlc2UgZmVhdHVyZXMgYWxzbyBtYXkgZGVwZW5kIG9uCisJICAgIHNldHRpbmcgYSB2YWx1ZSBvZiAxIHRvIHRoZSBwc2V1ZG8tZmlsZSAvcHJvYy9mcy9jaWZzL0V4cGVyaW1lbnRhbAorCSAgICAod2hpY2ggaXMgZGlzYWJsZWQgYnkgZGVmYXVsdCkuIFNlZSB0aGUgZmlsZSBmcy9jaWZzL1JFQURNRQorCSAgICBmb3IgbW9yZSBkZXRhaWxzLiAgSWYgdW5zdXJlLCBzYXkgTi4KKworY29uZmlnIENJRlNfREZTX1VQQ0FMTAorCSAgYm9vbCAiREZTIGZlYXR1cmUgc3VwcG9ydCAoRVhQRVJJTUVOVEFMKSIKKwkgIGRlcGVuZHMgb24gQ0lGU19FWFBFUklNRU5UQUwKKwkgIGRlcGVuZHMgb24gS0VZUworCSAgaGVscAorCSAgICBFbmFibGVzIGFuIHVwY2FsbCBtZWNoYW5pc20gZm9yIENJRlMgd2hpY2ggY29udGFjdHMgdXNlcnNwYWNlCisJICAgIGhlbHBlciB1dGlsaXRpZXMgdG8gcHJvdmlkZSBzZXJ2ZXIgbmFtZSByZXNvbHV0aW9uIChob3N0IG5hbWVzIHRvCisJICAgIElQIGFkZHJlc3Nlcykgd2hpY2ggaXMgbmVlZGVkIGZvciBpbXBsaWNpdCBtb3VudHMgb2YgREZTIGp1bmN0aW9uCisJICAgIHBvaW50cy4gSWYgdW5zdXJlLCBzYXkgTi4KZGlmZiAtLWdpdCBhL2ZzL2NpZnMvZmlsZS5jIGIvZnMvY2lmcy9maWxlLmMKaW5kZXggYzRhOGEwNi4uNjJkOGJkOCAxMDA2NDQKLS0tIGEvZnMvY2lmcy9maWxlLmMKKysrIGIvZnMvY2lmcy9maWxlLmMKQEAgLTE3OTEsNyArMTc5MSw3IEBACiAJCVNldFBhZ2VVcHRvZGF0ZShwYWdlKTsKIAkJdW5sb2NrX3BhZ2UocGFnZSk7CiAJCWlmICghcGFnZXZlY19hZGQocGxydV9wdmVjLCBwYWdlKSkKLQkJCV9fcGFnZXZlY19scnVfYWRkKHBscnVfcHZlYyk7CisJCQlfX3BhZ2V2ZWNfbHJ1X2FkZF9maWxlKHBscnVfcHZlYyk7CiAJCWRhdGEgKz0gUEFHRV9DQUNIRV9TSVpFOwogCX0KIAlyZXR1cm47CkBAIC0xOTI1LDcgKzE5MjUsNyBAQAogCQlieXRlc19yZWFkID0gMDsKIAl9CiAKLQlwYWdldmVjX2xydV9hZGQoJmxydV9wdmVjKTsKKwlwYWdldmVjX2xydV9hZGRfZmlsZSgmbHJ1X3B2ZWMpOwogCiAvKiBuZWVkIHRvIGZyZWUgc21iX3JlYWRfZGF0YSBidWYgYmVmb3JlIGV4aXQgKi8KIAlpZiAoc21iX3JlYWRfZGF0YSkgewpkaWZmIC0tZ2l0IGEvZnMvY29kYS9wc2Rldi5jIGIvZnMvY29kYS9wc2Rldi5jCmluZGV4IDBkOWI4MGUuLmNmZDI5ZGEgMTAwNjQ0Ci0tLSBhL2ZzL2NvZGEvcHNkZXYuYworKysgYi9mcy9jb2RhL3BzZGV2LmMKQEAgLTM2Miw5ICszNjIsOCBAQAogCQlnb3RvIG91dF9jaHJkZXY7CiAJfQkJCiAJZm9yIChpID0gMDsgaSA8IE1BWF9DT0RBREVWUzsgaSsrKQotCQlkZXZpY2VfY3JlYXRlX2RydmRhdGEoY29kYV9wc2Rldl9jbGFzcywgTlVMTCwKLQkJCQkgICAgICBNS0RFVihDT0RBX1BTREVWX01BSk9SLCBpKSwKLQkJCQkgICAgICBOVUxMLCAiY2ZzJWQiLCBpKTsKKwkJZGV2aWNlX2NyZWF0ZShjb2RhX3BzZGV2X2NsYXNzLCBOVUxMLAorCQkJICAgICAgTUtERVYoQ09EQV9QU0RFVl9NQUpPUiwgaSksIE5VTEwsICJjZnMlZCIsIGkpOwogCWNvZGFfc3lzY3RsX2luaXQoKTsKIAlnb3RvIG91dDsKIApkaWZmIC0tZ2l0IGEvZnMvY29tcGF0LmMgYi9mcy9jb21wYXQuYwppbmRleCAwNzVkMDUwLi41ZjllYzQ0IDEwMDY0NAotLS0gYS9mcy9jb21wYXQuYworKysgYi9mcy9jb21wYXQuYwpAQCAtMTM3LDYgKzEzNyw0NSBAQAogCXJldHVybiBjb21wYXRfc3lzX2Z1dGltZXNhdChBVF9GRENXRCwgZmlsZW5hbWUsIHQpOwogfQogCitzdGF0aWMgaW50IGNwX2NvbXBhdF9zdGF0KHN0cnVjdCBrc3RhdCAqc3RhdCwgc3RydWN0IGNvbXBhdF9zdGF0IF9fdXNlciAqdWJ1ZikKK3sKKwljb21wYXRfaW5vX3QgaW5vID0gc3RhdC0+aW5vOworCXR5cGVvZih1YnVmLT5zdF91aWQpIHVpZCA9IDA7CisJdHlwZW9mKHVidWYtPnN0X2dpZCkgZ2lkID0gMDsKKwlpbnQgZXJyOworCisJU0VUX1VJRCh1aWQsIHN0YXQtPnVpZCk7CisJU0VUX0dJRChnaWQsIHN0YXQtPmdpZCk7CisKKwlpZiAoKHU2NCkgc3RhdC0+c2l6ZSA+IE1BWF9OT05fTEZTIHx8CisJICAgICFvbGRfdmFsaWRfZGV2KHN0YXQtPmRldikgfHwKKwkgICAgIW9sZF92YWxpZF9kZXYoc3RhdC0+cmRldikpCisJCXJldHVybiAtRU9WRVJGTE9XOworCWlmIChzaXplb2YoaW5vKSA8IHNpemVvZihzdGF0LT5pbm8pICYmIGlubyAhPSBzdGF0LT5pbm8pCisJCXJldHVybiAtRU9WRVJGTE9XOworCisJaWYgKGNsZWFyX3VzZXIodWJ1Ziwgc2l6ZW9mKCp1YnVmKSkpCisJCXJldHVybiAtRUZBVUxUOworCisJZXJyICA9IF9fcHV0X3VzZXIob2xkX2VuY29kZV9kZXYoc3RhdC0+ZGV2KSwgJnVidWYtPnN0X2Rldik7CisJZXJyIHw9IF9fcHV0X3VzZXIoaW5vLCAmdWJ1Zi0+c3RfaW5vKTsKKwllcnIgfD0gX19wdXRfdXNlcihzdGF0LT5tb2RlLCAmdWJ1Zi0+c3RfbW9kZSk7CisJZXJyIHw9IF9fcHV0X3VzZXIoc3RhdC0+bmxpbmssICZ1YnVmLT5zdF9ubGluayk7CisJZXJyIHw9IF9fcHV0X3VzZXIodWlkLCAmdWJ1Zi0+c3RfdWlkKTsKKwllcnIgfD0gX19wdXRfdXNlcihnaWQsICZ1YnVmLT5zdF9naWQpOworCWVyciB8PSBfX3B1dF91c2VyKG9sZF9lbmNvZGVfZGV2KHN0YXQtPnJkZXYpLCAmdWJ1Zi0+c3RfcmRldik7CisJZXJyIHw9IF9fcHV0X3VzZXIoc3RhdC0+c2l6ZSwgJnVidWYtPnN0X3NpemUpOworCWVyciB8PSBfX3B1dF91c2VyKHN0YXQtPmF0aW1lLnR2X3NlYywgJnVidWYtPnN0X2F0aW1lKTsKKwllcnIgfD0gX19wdXRfdXNlcihzdGF0LT5hdGltZS50dl9uc2VjLCAmdWJ1Zi0+c3RfYXRpbWVfbnNlYyk7CisJZXJyIHw9IF9fcHV0X3VzZXIoc3RhdC0+bXRpbWUudHZfc2VjLCAmdWJ1Zi0+c3RfbXRpbWUpOworCWVyciB8PSBfX3B1dF91c2VyKHN0YXQtPm10aW1lLnR2X25zZWMsICZ1YnVmLT5zdF9tdGltZV9uc2VjKTsKKwllcnIgfD0gX19wdXRfdXNlcihzdGF0LT5jdGltZS50dl9zZWMsICZ1YnVmLT5zdF9jdGltZSk7CisJZXJyIHw9IF9fcHV0X3VzZXIoc3RhdC0+Y3RpbWUudHZfbnNlYywgJnVidWYtPnN0X2N0aW1lX25zZWMpOworCWVyciB8PSBfX3B1dF91c2VyKHN0YXQtPmJsa3NpemUsICZ1YnVmLT5zdF9ibGtzaXplKTsKKwllcnIgfD0gX19wdXRfdXNlcihzdGF0LT5ibG9ja3MsICZ1YnVmLT5zdF9ibG9ja3MpOworCXJldHVybiBlcnI7Cit9CisKIGFzbWxpbmthZ2UgbG9uZyBjb21wYXRfc3lzX25ld3N0YXQoY2hhciBfX3VzZXIgKiBmaWxlbmFtZSwKIAkJc3RydWN0IGNvbXBhdF9zdGF0IF9fdXNlciAqc3RhdGJ1ZikKIHsKQEAgLTEyMzksNyArMTI3OCw3IEBACiAJCQlpZiAoIXApCiAJCQkJYnJlYWs7CiAJCQlhcmd2Kys7Ci0JCQlpZigrK2kgPiBtYXgpCisJCQlpZiAoaSsrID49IG1heCkKIAkJCQlyZXR1cm4gLUUyQklHOwogCQl9CiAJfQpkaWZmIC0tZ2l0IGEvZnMvZGVidWdmcy9pbm9kZS5jIGIvZnMvZGVidWdmcy9pbm9kZS5jCmluZGV4IDA4ZTI4YzkuLjNkYmUyMTYgMTAwNjQ0Ci0tLSBhL2ZzL2RlYnVnZnMvaW5vZGUuYworKysgYi9mcy9kZWJ1Z2ZzL2lub2RlLmMKQEAgLTI2LDggKzI2LDcgQEAKICNpbmNsdWRlIDxsaW51eC9kZWJ1Z2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvZnNub3RpZnkuaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KLQotI2RlZmluZSBERUJVR0ZTX01BR0lDCTB4NjQ2MjY3MjAKKyNpbmNsdWRlIDxsaW51eC9tYWdpYy5oPgogCiBzdGF0aWMgc3RydWN0IHZmc21vdW50ICpkZWJ1Z2ZzX21vdW50Owogc3RhdGljIGludCBkZWJ1Z2ZzX21vdW50X2NvdW50OwpkaWZmIC0tZ2l0IGEvZnMvZGV2cHRzL2lub2RlLmMgYi9mcy9kZXZwdHMvaW5vZGUuYwppbmRleCA0ODhlYjQyLi40YTcxNGY2YyAxMDA2NDQKLS0tIGEvZnMvZGV2cHRzL2lub2RlLmMKKysrIGIvZnMvZGV2cHRzL2lub2RlLmMKQEAgLTI3LDYgKzI3LDcgQEAKICNkZWZpbmUgREVWUFRTX1NVUEVSX01BR0lDIDB4MWNkMQogCiAjZGVmaW5lIERFVlBUU19ERUZBVUxUX01PREUgMDYwMAorI2RlZmluZSBQVE1YX01JTk9SCTIKIAogZXh0ZXJuIGludCBwdHlfbGltaXQ7CQkJLyogQ29uZmlnIGxpbWl0IG9uIFVuaXg5OCBwdHlzICovCiBzdGF0aWMgREVGSU5FX0lEQShhbGxvY2F0ZWRfcHR5cyk7CkBAIC00OCw3ICs0OSw3IEBACiAJT3B0X2VycgogfTsKIAotc3RhdGljIG1hdGNoX3RhYmxlX3QgdG9rZW5zID0geworc3RhdGljIGNvbnN0IG1hdGNoX3RhYmxlX3QgdG9rZW5zID0gewogCXtPcHRfdWlkLCAidWlkPSV1In0sCiAJe09wdF9naWQsICJnaWQ9JXUifSwKIAl7T3B0X21vZGUsICJtb2RlPSVvIn0sCkBAIC0xNjksMTUgKzE3MCw3IEBACiAgKiB0byB0aGUgU3lzdGVtIFYgbmFtaW5nIGNvbnZlbnRpb24KICAqLwogCi1zdGF0aWMgc3RydWN0IGRlbnRyeSAqZ2V0X25vZGUoaW50IG51bSkKLXsKLQljaGFyIHNbMTJdOwotCXN0cnVjdCBkZW50cnkgKnJvb3QgPSBkZXZwdHNfcm9vdDsKLQltdXRleF9sb2NrKCZyb290LT5kX2lub2RlLT5pX211dGV4KTsKLQlyZXR1cm4gbG9va3VwX29uZV9sZW4ocywgcm9vdCwgc3ByaW50ZihzLCAiJWQiLCBudW0pKTsKLX0KLQotaW50IGRldnB0c19uZXdfaW5kZXgodm9pZCkKK2ludCBkZXZwdHNfbmV3X2luZGV4KHN0cnVjdCBpbm9kZSAqcHRteF9pbm9kZSkKIHsKIAlpbnQgaW5kZXg7CiAJaW50IGlkYV9yZXQ7CkBAIC0yMDUsMjAgKzE5OCwyMSBAQAogCXJldHVybiBpbmRleDsKIH0KIAotdm9pZCBkZXZwdHNfa2lsbF9pbmRleChpbnQgaWR4KQordm9pZCBkZXZwdHNfa2lsbF9pbmRleChzdHJ1Y3QgaW5vZGUgKnB0bXhfaW5vZGUsIGludCBpZHgpCiB7CiAJbXV0ZXhfbG9jaygmYWxsb2NhdGVkX3B0eXNfbG9jayk7CiAJaWRhX3JlbW92ZSgmYWxsb2NhdGVkX3B0eXMsIGlkeCk7CiAJbXV0ZXhfdW5sb2NrKCZhbGxvY2F0ZWRfcHR5c19sb2NrKTsKIH0KIAotaW50IGRldnB0c19wdHlfbmV3KHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCitpbnQgZGV2cHRzX3B0eV9uZXcoc3RydWN0IGlub2RlICpwdG14X2lub2RlLCBzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQogewogCWludCBudW1iZXIgPSB0dHktPmluZGV4OyAvKiB0dHkgbGF5ZXIgcHV0cyBpbmRleCBmcm9tIGRldnB0c19uZXdfaW5kZXgoKSBpbiBoZXJlICovCiAJc3RydWN0IHR0eV9kcml2ZXIgKmRyaXZlciA9IHR0eS0+ZHJpdmVyOwogCWRldl90IGRldmljZSA9IE1LREVWKGRyaXZlci0+bWFqb3IsIGRyaXZlci0+bWlub3Jfc3RhcnQrbnVtYmVyKTsKIAlzdHJ1Y3QgZGVudHJ5ICpkZW50cnk7CiAJc3RydWN0IGlub2RlICppbm9kZSA9IG5ld19pbm9kZShkZXZwdHNfbW50LT5tbnRfc2IpOworCWNoYXIgc1sxMl07CiAKIAkvKiBXZSdyZSBzdXBwb3NlZCB0byBiZSBnaXZlbiB0aGUgc2xhdmUgZW5kIG9mIGEgcHR5ICovCiAJQlVHX09OKGRyaXZlci0+dHlwZSAhPSBUVFlfRFJJVkVSX1RZUEVfUFRZKTsKQEAgLTIzMywxMCArMjI3LDE1IEBACiAJaW5vZGUtPmlfbXRpbWUgPSBpbm9kZS0+aV9hdGltZSA9IGlub2RlLT5pX2N0aW1lID0gQ1VSUkVOVF9USU1FOwogCWluaXRfc3BlY2lhbF9pbm9kZShpbm9kZSwgU19JRkNIUnxjb25maWcubW9kZSwgZGV2aWNlKTsKIAlpbm9kZS0+aV9wcml2YXRlID0gdHR5OworCXR0eS0+ZHJpdmVyX2RhdGEgPSBpbm9kZTsKIAotCWRlbnRyeSA9IGdldF9ub2RlKG51bWJlcik7Ci0JaWYgKCFJU19FUlIoZGVudHJ5KSAmJiAhZGVudHJ5LT5kX2lub2RlKSB7Ci0JCWRfaW5zdGFudGlhdGUoZGVudHJ5LCBpbm9kZSk7CisJc3ByaW50ZihzLCAiJWQiLCBudW1iZXIpOworCisJbXV0ZXhfbG9jaygmZGV2cHRzX3Jvb3QtPmRfaW5vZGUtPmlfbXV0ZXgpOworCisJZGVudHJ5ID0gZF9hbGxvY19uYW1lKGRldnB0c19yb290LCBzKTsKKwlpZiAoIUlTX0VSUihkZW50cnkpKSB7CisJCWRfYWRkKGRlbnRyeSwgaW5vZGUpOwogCQlmc25vdGlmeV9jcmVhdGUoZGV2cHRzX3Jvb3QtPmRfaW5vZGUsIGRlbnRyeSk7CiAJfQogCkBAIC0yNDUsMzYgKzI0NCwzMSBAQAogCXJldHVybiAwOwogfQogCi1zdHJ1Y3QgdHR5X3N0cnVjdCAqZGV2cHRzX2dldF90dHkoaW50IG51bWJlcikKK3N0cnVjdCB0dHlfc3RydWN0ICpkZXZwdHNfZ2V0X3R0eShzdHJ1Y3QgaW5vZGUgKnB0c19pbm9kZSwgaW50IG51bWJlcikKIHsKLQlzdHJ1Y3QgZGVudHJ5ICpkZW50cnkgPSBnZXRfbm9kZShudW1iZXIpOwotCXN0cnVjdCB0dHlfc3RydWN0ICp0dHk7CisJQlVHX09OKHB0c19pbm9kZS0+aV9yZGV2ID09IE1LREVWKFRUWUFVWF9NQUpPUiwgUFRNWF9NSU5PUikpOwogCi0JdHR5ID0gTlVMTDsKLQlpZiAoIUlTX0VSUihkZW50cnkpKSB7Ci0JCWlmIChkZW50cnktPmRfaW5vZGUpCi0JCQl0dHkgPSBkZW50cnktPmRfaW5vZGUtPmlfcHJpdmF0ZTsKLQkJZHB1dChkZW50cnkpOwotCX0KLQotCW11dGV4X3VubG9jaygmZGV2cHRzX3Jvb3QtPmRfaW5vZGUtPmlfbXV0ZXgpOwotCi0JcmV0dXJuIHR0eTsKKwlpZiAocHRzX2lub2RlLT5pX3NiLT5zX21hZ2ljID09IERFVlBUU19TVVBFUl9NQUdJQykKKwkJcmV0dXJuIChzdHJ1Y3QgdHR5X3N0cnVjdCAqKXB0c19pbm9kZS0+aV9wcml2YXRlOworCXJldHVybiBOVUxMOwogfQogCi12b2lkIGRldnB0c19wdHlfa2lsbChpbnQgbnVtYmVyKQordm9pZCBkZXZwdHNfcHR5X2tpbGwoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKIHsKLQlzdHJ1Y3QgZGVudHJ5ICpkZW50cnkgPSBnZXRfbm9kZShudW1iZXIpOworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSB0dHktPmRyaXZlcl9kYXRhOworCXN0cnVjdCBkZW50cnkgKmRlbnRyeTsKIAotCWlmICghSVNfRVJSKGRlbnRyeSkpIHsKLQkJc3RydWN0IGlub2RlICppbm9kZSA9IGRlbnRyeS0+ZF9pbm9kZTsKLQkJaWYgKGlub2RlKSB7Ci0JCQlpbm9kZS0+aV9ubGluay0tOwotCQkJZF9kZWxldGUoZGVudHJ5KTsKLQkJCWRwdXQoZGVudHJ5KTsKLQkJfQorCUJVR19PTihpbm9kZS0+aV9yZGV2ID09IE1LREVWKFRUWUFVWF9NQUpPUiwgUFRNWF9NSU5PUikpOworCisJbXV0ZXhfbG9jaygmZGV2cHRzX3Jvb3QtPmRfaW5vZGUtPmlfbXV0ZXgpOworCisJZGVudHJ5ID0gZF9maW5kX2FsaWFzKGlub2RlKTsKKwlpZiAoZGVudHJ5ICYmICFJU19FUlIoZGVudHJ5KSkgeworCQlpbm9kZS0+aV9ubGluay0tOworCQlkX2RlbGV0ZShkZW50cnkpOwogCQlkcHV0KGRlbnRyeSk7CiAJfQorCiAJbXV0ZXhfdW5sb2NrKCZkZXZwdHNfcm9vdC0+ZF9pbm9kZS0+aV9tdXRleCk7CiB9CiAKZGlmZiAtLWdpdCBhL2ZzL2RpcmVjdC1pby5jIGIvZnMvZGlyZWN0LWlvLmMKaW5kZXggOTYwNmVlOC4uYWYwNTU4ZCAxMDA2NDQKLS0tIGEvZnMvZGlyZWN0LWlvLmMKKysrIGIvZnMvZGlyZWN0LWlvLmMKQEAgLTUsMTEgKzUsMTEgQEAKICAqCiAgKiBPX0RJUkVDVAogICoKLSAqIDA0SnVsMjAwMglha3BtQHppcC5jb20uYXUKKyAqIDA0SnVsMjAwMglBbmRyZXcgTW9ydG9uCiAgKgkJSW5pdGlhbCB2ZXJzaW9uCiAgKiAxMVNlcDIwMDIJamFuZXRpbmNAdXMuaWJtLmNvbQogICogCQlhZGRlZCByZWFkdi93cml0ZXYgc3VwcG9ydC4KLSAqIDI5T2N0MjAwMglha3BtQHppcC5jb20uYXUKKyAqIDI5T2N0MjAwMglBbmRyZXcgTW9ydG9uCiAgKgkJcmV3cm90ZSBiaW9fYWRkX3BhZ2UoKSBzdXBwb3J0LgogICogMzBPY3QyMDAyCXBiYWRhcmlAdXMuaWJtLmNvbQogICoJCWFkZGVkIHN1cHBvcnQgZm9yIG5vbi1hbGlnbmVkIElPLgpkaWZmIC0tZ2l0IGEvZnMvZHF1b3QuYyBiL2ZzL2RxdW90LmMKaW5kZXggOGVjNGQ2Yy4uZGEzMGEyNyAxMDA2NDQKLS0tIGEvZnMvZHF1b3QuYworKysgYi9mcy9kcXVvdC5jCkBAIC05LDggKzksNiBAQAogICogaW1wbGVtZW50YXRpb24gaXMgYmFzZWQgb24gb25lIG9mIHRoZSBzZXZlcmFsIHZhcmlhbnRzIG9mIHRoZSBMSU5VWAogICogaW5vZGUtc3Vic3lzdGVtIHdpdGggYWRkZWQgY29tcGxleGl0eSBvZiB0aGUgZGlza3F1b3RhIHN5c3RlbS4KICAqIAotICogVmVyc2lvbjogJElkOiBkcXVvdC5jLHYgNi4zIDE5OTYvMTEvMTcgMTg6MzU6MzQgbXZ3IEV4cCBtdncgJAotICogCiAgKiBBdXRob3I6CU1hcmNvIHZhbiBXaWVyaW5nZW4gPG12d0BwbGFuZXRzLmVsbS5uZXQ+CiAgKgogICogRml4ZXM6ICAgRG1pdHJ5IEdvcm9kY2hhbmluIDxwZ21kc2dAaWJpLmNvbT4sIDExIEZlYiA5NgpAQCAtODk1LDEwICs4OTMsOSBAQAogCSAgICB3YXJudHlwZSA9PSBRVU9UQV9OTF9CU09GVEJFTE9XIHx8ICFuZWVkX3ByaW50X3dhcm5pbmcoZHF1b3QpKQogCQlyZXR1cm47CiAKLQltdXRleF9sb2NrKCZ0dHlfbXV0ZXgpOwogCXR0eSA9IGdldF9jdXJyZW50X3R0eSgpOwogCWlmICghdHR5KQotCQlnb3RvIG91dF9sb2NrOworCQlyZXR1cm47CiAJdHR5X3dyaXRlX21lc3NhZ2UodHR5LCBkcXVvdC0+ZHFfc2ItPnNfaWQpOwogCWlmICh3YXJudHlwZSA9PSBRVU9UQV9OTF9JU09GVFdBUk4gfHwgd2FybnR5cGUgPT0gUVVPVEFfTkxfQlNPRlRXQVJOKQogCQl0dHlfd3JpdGVfbWVzc2FnZSh0dHksICI6IHdhcm5pbmcsICIpOwpAQCAtOTI2LDggKzkyMyw3IEBACiAJCQlicmVhazsKIAl9CiAJdHR5X3dyaXRlX21lc3NhZ2UodHR5LCBtc2cpOwotb3V0X2xvY2s6Ci0JbXV0ZXhfdW5sb2NrKCZ0dHlfbXV0ZXgpOworCXR0eV9rcmVmX3B1dCh0dHkpOwogfQogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2ZzL2VjcnlwdGZzL01ha2VmaWxlIGIvZnMvZWNyeXB0ZnMvTWFrZWZpbGUKaW5kZXggYjQ3NTVhOC4uMmNjOWVlNCAxMDA2NDQKLS0tIGEvZnMvZWNyeXB0ZnMvTWFrZWZpbGUKKysrIGIvZnMvZWNyeXB0ZnMvTWFrZWZpbGUKQEAgLTQsNCArNCw0IEBACiAKIG9iai0kKENPTkZJR19FQ1JZUFRfRlMpICs9IGVjcnlwdGZzLm8KIAotZWNyeXB0ZnMtb2JqcyA6PSBkZW50cnkubyBmaWxlLm8gaW5vZGUubyBtYWluLm8gc3VwZXIubyBtbWFwLm8gcmVhZF93cml0ZS5vIGNyeXB0by5vIGtleXN0b3JlLm8gbWVzc2FnaW5nLm8gbmV0bGluay5vIG1pc2NkZXYubyBrdGhyZWFkLm8gZGVidWcubworZWNyeXB0ZnMtb2JqcyA6PSBkZW50cnkubyBmaWxlLm8gaW5vZGUubyBtYWluLm8gc3VwZXIubyBtbWFwLm8gcmVhZF93cml0ZS5vIGNyeXB0by5vIGtleXN0b3JlLm8gbWVzc2FnaW5nLm8gbWlzY2Rldi5vIGt0aHJlYWQubyBkZWJ1Zy5vCmRpZmYgLS1naXQgYS9mcy9lY3J5cHRmcy9lY3J5cHRmc19rZXJuZWwuaCBiL2ZzL2VjcnlwdGZzL2VjcnlwdGZzX2tlcm5lbC5oCmluZGV4IGI3M2ZiNzUuLjM1MDRjZjkgMTAwNjQ0Ci0tLSBhL2ZzL2VjcnlwdGZzL2VjcnlwdGZzX2tlcm5lbC5oCisrKyBiL2ZzL2VjcnlwdGZzL2VjcnlwdGZzX2tlcm5lbC5oCkBAIC03OSwxMSArNzksNiBAQAogI2RlZmluZSBFQ1JZUFRGU19NQVhfUEtJX05BTUVfQllURVMgMTYKICNkZWZpbmUgRUNSWVBURlNfREVGQVVMVF9OVU1fVVNFUlMgNAogI2RlZmluZSBFQ1JZUFRGU19NQVhfTlVNX1VTRVJTIDMyNzY4Ci0jZGVmaW5lIEVDUllQVEZTX1RSQU5TUE9SVF9ORVRMSU5LIDAKLSNkZWZpbmUgRUNSWVBURlNfVFJBTlNQT1JUX0NPTk5FQ1RPUiAxCi0jZGVmaW5lIEVDUllQVEZTX1RSQU5TUE9SVF9SRUxBWUZTIDIKLSNkZWZpbmUgRUNSWVBURlNfVFJBTlNQT1JUX01JU0NERVYgMwotI2RlZmluZSBFQ1JZUFRGU19ERUZBVUxUX1RSQU5TUE9SVCBFQ1JZUFRGU19UUkFOU1BPUlRfTUlTQ0RFVgogI2RlZmluZSBFQ1JZUFRGU19YQVRUUl9OQU1FICJ1c2VyLmVjcnlwdGZzIgogCiAjZGVmaW5lIFJGQzI0NDBfQ0lQSEVSX0RFUzNfRURFIDB4MDIKQEAgLTQwMCw4ICszOTUsNiBAQAogCXN0cnVjdCBtdXRleCBtdXg7CiB9OwogCi1leHRlcm4gdW5zaWduZWQgaW50IGVjcnlwdGZzX3RyYW5zcG9ydDsKLQogc3RydWN0IGVjcnlwdGZzX2RhZW1vbjsKIAogc3RydWN0IGVjcnlwdGZzX2RhZW1vbiB7CkBAIC02MjcsMzEgKzYyMCwyMCBAQAogZWNyeXB0ZnNfc2V0eGF0dHIoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjb25zdCBjaGFyICpuYW1lLCBjb25zdCB2b2lkICp2YWx1ZSwKIAkJICBzaXplX3Qgc2l6ZSwgaW50IGZsYWdzKTsKIGludCBlY3J5cHRmc19yZWFkX3hhdHRyX3JlZ2lvbihjaGFyICpwYWdlX3ZpcnQsIHN0cnVjdCBpbm9kZSAqZWNyeXB0ZnNfaW5vZGUpOwotaW50IGVjcnlwdGZzX3Byb2Nlc3NfaGVsbyh1bnNpZ25lZCBpbnQgdHJhbnNwb3J0LCB1aWRfdCBldWlkLAotCQkJICBzdHJ1Y3QgdXNlcl9uYW1lc3BhY2UgKnVzZXJfbnMsIHN0cnVjdCBwaWQgKnBpZCk7CitpbnQgZWNyeXB0ZnNfcHJvY2Vzc19oZWxvKHVpZF90IGV1aWQsIHN0cnVjdCB1c2VyX25hbWVzcGFjZSAqdXNlcl9ucywKKwkJCSAgc3RydWN0IHBpZCAqcGlkKTsKIGludCBlY3J5cHRmc19wcm9jZXNzX3F1aXQodWlkX3QgZXVpZCwgc3RydWN0IHVzZXJfbmFtZXNwYWNlICp1c2VyX25zLAogCQkJICBzdHJ1Y3QgcGlkICpwaWQpOwogaW50IGVjcnlwdGZzX3Byb2Nlc3NfcmVzcG9uc2Uoc3RydWN0IGVjcnlwdGZzX21lc3NhZ2UgKm1zZywgdWlkX3QgZXVpZCwKIAkJCSAgICAgIHN0cnVjdCB1c2VyX25hbWVzcGFjZSAqdXNlcl9ucywgc3RydWN0IHBpZCAqcGlkLAogCQkJICAgICAgdTMyIHNlcSk7Ci1pbnQgZWNyeXB0ZnNfc2VuZF9tZXNzYWdlKHVuc2lnbmVkIGludCB0cmFuc3BvcnQsIGNoYXIgKmRhdGEsIGludCBkYXRhX2xlbiwKK2ludCBlY3J5cHRmc19zZW5kX21lc3NhZ2UoY2hhciAqZGF0YSwgaW50IGRhdGFfbGVuLAogCQkJICBzdHJ1Y3QgZWNyeXB0ZnNfbXNnX2N0eCAqKm1zZ19jdHgpOwogaW50IGVjcnlwdGZzX3dhaXRfZm9yX3Jlc3BvbnNlKHN0cnVjdCBlY3J5cHRmc19tc2dfY3R4ICptc2dfY3R4LAogCQkJICAgICAgIHN0cnVjdCBlY3J5cHRmc19tZXNzYWdlICoqZW1zZyk7Ci1pbnQgZWNyeXB0ZnNfaW5pdF9tZXNzYWdpbmcodW5zaWduZWQgaW50IHRyYW5zcG9ydCk7Ci12b2lkIGVjcnlwdGZzX3JlbGVhc2VfbWVzc2FnaW5nKHVuc2lnbmVkIGludCB0cmFuc3BvcnQpOworaW50IGVjcnlwdGZzX2luaXRfbWVzc2FnaW5nKHZvaWQpOwordm9pZCBlY3J5cHRmc19yZWxlYXNlX21lc3NhZ2luZyh2b2lkKTsKIAotaW50IGVjcnlwdGZzX3NlbmRfbmV0bGluayhjaGFyICpkYXRhLCBpbnQgZGF0YV9sZW4sCi0JCQkgIHN0cnVjdCBlY3J5cHRmc19tc2dfY3R4ICptc2dfY3R4LCB1OCBtc2dfdHlwZSwKLQkJCSAgdTE2IG1zZ19mbGFncywgc3RydWN0IHBpZCAqZGFlbW9uX3BpZCk7Ci1pbnQgZWNyeXB0ZnNfaW5pdF9uZXRsaW5rKHZvaWQpOwotdm9pZCBlY3J5cHRmc19yZWxlYXNlX25ldGxpbmsodm9pZCk7Ci0KLWludCBlY3J5cHRmc19zZW5kX2Nvbm5lY3RvcihjaGFyICpkYXRhLCBpbnQgZGF0YV9sZW4sCi0JCQkgICAgc3RydWN0IGVjcnlwdGZzX21zZ19jdHggKm1zZ19jdHgsIHU4IG1zZ190eXBlLAotCQkJICAgIHUxNiBtc2dfZmxhZ3MsIHN0cnVjdCBwaWQgKmRhZW1vbl9waWQpOwotaW50IGVjcnlwdGZzX2luaXRfY29ubmVjdG9yKHZvaWQpOwotdm9pZCBlY3J5cHRmc19yZWxlYXNlX2Nvbm5lY3Rvcih2b2lkKTsKIHZvaWQKIGVjcnlwdGZzX3dyaXRlX2hlYWRlcl9tZXRhZGF0YShjaGFyICp2aXJ0LAogCQkJICAgICAgIHN0cnVjdCBlY3J5cHRmc19jcnlwdF9zdGF0ICpjcnlwdF9zdGF0LApkaWZmIC0tZ2l0IGEvZnMvZWNyeXB0ZnMvZmlsZS5jIGIvZnMvZWNyeXB0ZnMvZmlsZS5jCmluZGV4IDkyNDRkNjUuLmViM2RjNGMgMTAwNjQ0Ci0tLSBhL2ZzL2VjcnlwdGZzL2ZpbGUuYworKysgYi9mcy9lY3J5cHRmcy9maWxlLmMKQEAgLTcxLDEyICs3MSwxMSBAQAogCXZvaWQgKmRpcmVudDsKIAlzdHJ1Y3QgZGVudHJ5ICpkZW50cnk7CiAJZmlsbGRpcl90IGZpbGxkaXI7Ci0JaW50IGVycjsKIAlpbnQgZmlsbGRpcl9jYWxsZWQ7CiAJaW50IGVudHJpZXNfd3JpdHRlbjsKIH07CiAKLS8qIEluc3BpcmVkIGJ5IGdlbmVyaWMgZmlsbGRpciBpbiBmcy9yZWFkaXIuYyAqLworLyogSW5zcGlyZWQgYnkgZ2VuZXJpYyBmaWxsZGlyIGluIGZzL3JlYWRkaXIuYyAqLwogc3RhdGljIGludAogZWNyeXB0ZnNfZmlsbGRpcih2b2lkICpkaXJlbnQsIGNvbnN0IGNoYXIgKm5hbWUsIGludCBuYW1lbGVuLCBsb2ZmX3Qgb2Zmc2V0LAogCQkgdTY0IGlubywgdW5zaWduZWQgaW50IGRfdHlwZSkKQEAgLTEyNSwxOCArMTI0LDE4IEBACiAJYnVmLmRpcmVudCA9IGRpcmVudDsKIAlidWYuZGVudHJ5ID0gZmlsZS0+Zl9wYXRoLmRlbnRyeTsKIAlidWYuZmlsbGRpciA9IGZpbGxkaXI7Ci1yZXRyeToKIAlidWYuZmlsbGRpcl9jYWxsZWQgPSAwOwogCWJ1Zi5lbnRyaWVzX3dyaXR0ZW4gPSAwOwotCWJ1Zi5lcnIgPSAwOwogCXJjID0gdmZzX3JlYWRkaXIobG93ZXJfZmlsZSwgZWNyeXB0ZnNfZmlsbGRpciwgKHZvaWQgKikmYnVmKTsKLQlpZiAoYnVmLmVycikKLQkJcmMgPSBidWYuZXJyOwotCWlmIChidWYuZmlsbGRpcl9jYWxsZWQgJiYgIWJ1Zi5lbnRyaWVzX3dyaXR0ZW4pCi0JCWdvdG8gcmV0cnk7CiAJZmlsZS0+Zl9wb3MgPSBsb3dlcl9maWxlLT5mX3BvczsKKwlpZiAocmMgPCAwKQorCQlnb3RvIG91dDsKKwlpZiAoYnVmLmZpbGxkaXJfY2FsbGVkICYmICFidWYuZW50cmllc193cml0dGVuKQorCQlnb3RvIG91dDsKIAlpZiAocmMgPj0gMCkKLQkJZnNzdGFja19jb3B5X2F0dHJfYXRpbWUoaW5vZGUsIGxvd2VyX2ZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUpOworCQlmc3N0YWNrX2NvcHlfYXR0cl9hdGltZShpbm9kZSwKKwkJCQkJbG93ZXJfZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSk7CitvdXQ6CiAJcmV0dXJuIHJjOwogfQogCmRpZmYgLS1naXQgYS9mcy9lY3J5cHRmcy9rZXlzdG9yZS5jIGIvZnMvZWNyeXB0ZnMva2V5c3RvcmUuYwppbmRleCBmNWI3NmEzLi5lMjJiYzM5IDEwMDY0NAotLS0gYS9mcy9lY3J5cHRmcy9rZXlzdG9yZS5jCisrKyBiL2ZzL2VjcnlwdGZzL2tleXN0b3JlLmMKQEAgLTIzNCw4ICsyMzQsOCBAQAogCX0KIAlpICs9IGRhdGFfbGVuOwogCWlmIChtZXNzYWdlX2xlbiA8IChpICsgbV9zaXplKSkgewotCQllY3J5cHRmc19wcmludGsoS0VSTl9FUlIsICJUaGUgcmVjZWl2ZWQgbmV0bGluayBtZXNzYWdlIGlzICIKLQkJCQkic2hvcnRlciB0aGFuIGV4cGVjdGVkXG4iKTsKKwkJZWNyeXB0ZnNfcHJpbnRrKEtFUk5fRVJSLCAiVGhlIG1lc3NhZ2UgcmVjZWl2ZWQgZnJvbSBlY3J5cHRmc2QgIgorCQkJCSJpcyBzaG9ydGVyIHRoYW4gZXhwZWN0ZWRcbiIpOwogCQlyYyA9IC1FSU87CiAJCWdvdG8gb3V0OwogCX0KQEAgLTQzOCw4ICs0MzgsOCBAQAogCXN0cnVjdCBlY3J5cHRmc19tc2dfY3R4ICptc2dfY3R4OwogCXN0cnVjdCBlY3J5cHRmc19tZXNzYWdlICptc2cgPSBOVUxMOwogCWNoYXIgKmF1dGhfdG9rX3NpZzsKLQljaGFyICpuZXRsaW5rX21lc3NhZ2U7Ci0Jc2l6ZV90IG5ldGxpbmtfbWVzc2FnZV9sZW5ndGg7CisJY2hhciAqcGF5bG9hZDsKKwlzaXplX3QgcGF5bG9hZF9sZW47CiAJaW50IHJjOwogCiAJcmMgPSBlY3J5cHRmc19nZXRfYXV0aF90b2tfc2lnKCZhdXRoX3Rva19zaWcsIGF1dGhfdG9rKTsKQEAgLTQ0OSwxNSArNDQ5LDE1IEBACiAJCWdvdG8gb3V0OwogCX0KIAlyYyA9IHdyaXRlX3RhZ182NF9wYWNrZXQoYXV0aF90b2tfc2lnLCAmKGF1dGhfdG9rLT5zZXNzaW9uX2tleSksCi0JCQkJICZuZXRsaW5rX21lc3NhZ2UsICZuZXRsaW5rX21lc3NhZ2VfbGVuZ3RoKTsKKwkJCQkgJnBheWxvYWQsICZwYXlsb2FkX2xlbik7CiAJaWYgKHJjKSB7CiAJCWVjcnlwdGZzX3ByaW50ayhLRVJOX0VSUiwgIkZhaWxlZCB0byB3cml0ZSB0YWcgNjQgcGFja2V0XG4iKTsKIAkJZ290byBvdXQ7CiAJfQotCXJjID0gZWNyeXB0ZnNfc2VuZF9tZXNzYWdlKGVjcnlwdGZzX3RyYW5zcG9ydCwgbmV0bGlua19tZXNzYWdlLAotCQkJCSAgIG5ldGxpbmtfbWVzc2FnZV9sZW5ndGgsICZtc2dfY3R4KTsKKwlyYyA9IGVjcnlwdGZzX3NlbmRfbWVzc2FnZShwYXlsb2FkLCBwYXlsb2FkX2xlbiwgJm1zZ19jdHgpOwogCWlmIChyYykgewotCQllY3J5cHRmc19wcmludGsoS0VSTl9FUlIsICJFcnJvciBzZW5kaW5nIG5ldGxpbmsgbWVzc2FnZVxuIik7CisJCWVjcnlwdGZzX3ByaW50ayhLRVJOX0VSUiwgIkVycm9yIHNlbmRpbmcgbWVzc2FnZSB0byAiCisJCQkJImVjcnlwdGZzZFxuIik7CiAJCWdvdG8gb3V0OwogCX0KIAlyYyA9IGVjcnlwdGZzX3dhaXRfZm9yX3Jlc3BvbnNlKG1zZ19jdHgsICZtc2cpOwpAQCAtMTMzMywyMyArMTMzMywyMiBAQAogCQkJc3RydWN0IGVjcnlwdGZzX2tleV9yZWNvcmQgKmtleV9yZWMpCiB7CiAJc3RydWN0IGVjcnlwdGZzX21zZ19jdHggKm1zZ19jdHggPSBOVUxMOwotCWNoYXIgKm5ldGxpbmtfcGF5bG9hZDsKLQlzaXplX3QgbmV0bGlua19wYXlsb2FkX2xlbmd0aDsKKwljaGFyICpwYXlsb2FkID0gTlVMTDsKKwlzaXplX3QgcGF5bG9hZF9sZW47CiAJc3RydWN0IGVjcnlwdGZzX21lc3NhZ2UgKm1zZzsKIAlpbnQgcmM7CiAKIAlyYyA9IHdyaXRlX3RhZ182Nl9wYWNrZXQoYXV0aF90b2stPnRva2VuLnByaXZhdGVfa2V5LnNpZ25hdHVyZSwKIAkJCQkgZWNyeXB0ZnNfY29kZV9mb3JfY2lwaGVyX3N0cmluZyhjcnlwdF9zdGF0KSwKLQkJCQkgY3J5cHRfc3RhdCwgJm5ldGxpbmtfcGF5bG9hZCwKLQkJCQkgJm5ldGxpbmtfcGF5bG9hZF9sZW5ndGgpOworCQkJCSBjcnlwdF9zdGF0LCAmcGF5bG9hZCwgJnBheWxvYWRfbGVuKTsKIAlpZiAocmMpIHsKIAkJZWNyeXB0ZnNfcHJpbnRrKEtFUk5fRVJSLCAiRXJyb3IgZ2VuZXJhdGluZyB0YWcgNjYgcGFja2V0XG4iKTsKIAkJZ290byBvdXQ7CiAJfQotCXJjID0gZWNyeXB0ZnNfc2VuZF9tZXNzYWdlKGVjcnlwdGZzX3RyYW5zcG9ydCwgbmV0bGlua19wYXlsb2FkLAotCQkJCSAgIG5ldGxpbmtfcGF5bG9hZF9sZW5ndGgsICZtc2dfY3R4KTsKKwlyYyA9IGVjcnlwdGZzX3NlbmRfbWVzc2FnZShwYXlsb2FkLCBwYXlsb2FkX2xlbiwgJm1zZ19jdHgpOwogCWlmIChyYykgewotCQllY3J5cHRmc19wcmludGsoS0VSTl9FUlIsICJFcnJvciBzZW5kaW5nIG5ldGxpbmsgbWVzc2FnZVxuIik7CisJCWVjcnlwdGZzX3ByaW50ayhLRVJOX0VSUiwgIkVycm9yIHNlbmRpbmcgbWVzc2FnZSB0byAiCisJCQkJImVjcnlwdGZzZFxuIik7CiAJCWdvdG8gb3V0OwogCX0KIAlyYyA9IGVjcnlwdGZzX3dhaXRfZm9yX3Jlc3BvbnNlKG1zZ19jdHgsICZtc2cpOwpAQCAtMTM2NCw4ICsxMzYzLDcgQEAKIAkJZWNyeXB0ZnNfcHJpbnRrKEtFUk5fRVJSLCAiRXJyb3IgcGFyc2luZyB0YWcgNjcgcGFja2V0XG4iKTsKIAlrZnJlZShtc2cpOwogb3V0OgotCWlmIChuZXRsaW5rX3BheWxvYWQpCi0JCWtmcmVlKG5ldGxpbmtfcGF5bG9hZCk7CisJa2ZyZWUocGF5bG9hZCk7CiAJcmV0dXJuIHJjOwogfQogLyoqCmRpZmYgLS1naXQgYS9mcy9lY3J5cHRmcy9tYWluLmMgYi9mcy9lY3J5cHRmcy9tYWluLmMKaW5kZXggNDQ4ZGZkNS4uMDQ2ZTAyNyAxMDA2NDQKLS0tIGEvZnMvZWNyeXB0ZnMvbWFpbi5jCisrKyBiL2ZzL2VjcnlwdGZzL21haW4uYwpAQCAtMzAsNyArMzAsNiBAQAogI2luY2x1ZGUgPGxpbnV4L25hbWVpLmg+CiAjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CiAjaW5jbHVkZSA8bGludXgvY3J5cHRvLmg+Ci0jaW5jbHVkZSA8bGludXgvbmV0bGluay5oPgogI2luY2x1ZGUgPGxpbnV4L21vdW50Lmg+CiAjaW5jbHVkZSA8bGludXgvcGFnZW1hcC5oPgogI2luY2x1ZGUgPGxpbnV4L2tleS5oPgpAQCAtNDksOCArNDgsNyBAQAogCQkgIjAsIHdoaWNoIGlzIFF1aWV0KSIpOwogCiAvKioKLSAqIE1vZHVsZSBwYXJhbWV0ZXIgdGhhdCBkZWZpbmVzIHRoZSBudW1iZXIgb2YgbmV0bGluayBtZXNzYWdlIGJ1ZmZlcgotICogZWxlbWVudHMKKyAqIE1vZHVsZSBwYXJhbWV0ZXIgdGhhdCBkZWZpbmVzIHRoZSBudW1iZXIgb2YgbWVzc2FnZSBidWZmZXIgZWxlbWVudHMKICAqLwogdW5zaWduZWQgaW50IGVjcnlwdGZzX21lc3NhZ2VfYnVmX2xlbiA9IEVDUllQVEZTX0RFRkFVTFRfTVNHX0NUWF9FTEVNUzsKIApAQCAtNjAsOSArNTgsOSBAQAogCiAvKioKICAqIE1vZHVsZSBwYXJhbWV0ZXIgdGhhdCBkZWZpbmVzIHRoZSBtYXhpbXVtIGd1YXJhbnRlZWQgYW1vdW50IG9mIHRpbWUgdG8gd2FpdAotICogZm9yIGEgcmVzcG9uc2UgdGhyb3VnaCBuZXRsaW5rLiAgVGhlIGFjdHVhbCBzbGVlcCB0aW1lIHdpbGwgYmUsIG1vcmUgdGhhbgorICogZm9yIGEgcmVzcG9uc2UgZnJvbSBlY3J5cHRmc2QuICBUaGUgYWN0dWFsIHNsZWVwIHRpbWUgd2lsbCBiZSwgbW9yZSB0aGFuCiAgKiBsaWtlbHksIGEgc21hbGwgYW1vdW50IGdyZWF0ZXIgdGhhbiB0aGlzIHNwZWNpZmllZCB2YWx1ZSwgYnV0IG9ubHkgbGVzcyBpZgotICogdGhlIG5ldGxpbmsgbWVzc2FnZSBzdWNjZXNzZnVsbHkgYXJyaXZlcy4KKyAqIHRoZSBtZXNzYWdlIHN1Y2Nlc3NmdWxseSBhcnJpdmVzLgogICovCiBzaWduZWQgbG9uZyBlY3J5cHRmc19tZXNzYWdlX3dhaXRfdGltZW91dCA9IEVDUllQVEZTX01BWF9NU0dfQ1RYX1RUTCAvIEhaOwogCkBAIC04Myw4ICs4MSw2IEBACiBNT0RVTEVfUEFSTV9ERVNDKGVjcnlwdGZzX251bWJlcl9vZl91c2VycywgIkFuIGVzdGltYXRlIG9mIHRoZSBudW1iZXIgb2YgIgogCQkgImNvbmN1cnJlbnQgdXNlcnMgb2YgZUNyeXB0ZnMiKTsKIAotdW5zaWduZWQgaW50IGVjcnlwdGZzX3RyYW5zcG9ydCA9IEVDUllQVEZTX0RFRkFVTFRfVFJBTlNQT1JUOwotCiB2b2lkIF9fZWNyeXB0ZnNfcHJpbnRrKGNvbnN0IGNoYXIgKmZtdCwgLi4uKQogewogCXZhX2xpc3QgYXJnczsKQEAgLTIxMSw3ICsyMDcsNyBAQAogICAgICAgIGVjcnlwdGZzX29wdF9wYXNzdGhyb3VnaCwgZWNyeXB0ZnNfb3B0X3hhdHRyX21ldGFkYXRhLAogICAgICAgIGVjcnlwdGZzX29wdF9lbmNyeXB0ZWRfdmlldywgZWNyeXB0ZnNfb3B0X2VyciB9OwogCi1zdGF0aWMgbWF0Y2hfdGFibGVfdCB0b2tlbnMgPSB7CitzdGF0aWMgY29uc3QgbWF0Y2hfdGFibGVfdCB0b2tlbnMgPSB7CiAJe2VjcnlwdGZzX29wdF9zaWcsICJzaWc9JXMifSwKIAl7ZWNyeXB0ZnNfb3B0X2VjcnlwdGZzX3NpZywgImVjcnlwdGZzX3NpZz0lcyJ9LAogCXtlY3J5cHRmc19vcHRfY2lwaGVyLCAiY2lwaGVyPSVzIn0sCkBAIC03NzksMTAgKzc3NSwxMSBAQAogCQkgICAgICAgInJjID0gWyVkXVxuIiwgX19mdW5jX18sIHJjKTsKIAkJZ290byBvdXRfZG9fc3lzZnNfdW5yZWdpc3RyYXRpb247CiAJfQotCXJjID0gZWNyeXB0ZnNfaW5pdF9tZXNzYWdpbmcoZWNyeXB0ZnNfdHJhbnNwb3J0KTsKKwlyYyA9IGVjcnlwdGZzX2luaXRfbWVzc2FnaW5nKCk7CiAJaWYgKHJjKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiRmFpbHVyZSBvY2N1cmVkIHdoaWxlIGF0dGVtcHRpbmcgdG8gIgotCQkJCSJpbml0aWFsaXplIHRoZSBlQ3J5cHRmcyBuZXRsaW5rIHNvY2tldFxuIik7CisJCQkJImluaXRpYWxpemUgdGhlIGNvbW11bmljYXRpb25zIGNoYW5uZWwgdG8gIgorCQkJCSJlY3J5cHRmc2RcbiIpOwogCQlnb3RvIG91dF9kZXN0cm95X2t0aHJlYWQ7CiAJfQogCXJjID0gZWNyeXB0ZnNfaW5pdF9jcnlwdG8oKTsKQEAgLTc5Nyw3ICs3OTQsNyBAQAogCiAJZ290byBvdXQ7CiBvdXRfcmVsZWFzZV9tZXNzYWdpbmc6Ci0JZWNyeXB0ZnNfcmVsZWFzZV9tZXNzYWdpbmcoZWNyeXB0ZnNfdHJhbnNwb3J0KTsKKwllY3J5cHRmc19yZWxlYXNlX21lc3NhZ2luZygpOwogb3V0X2Rlc3Ryb3lfa3RocmVhZDoKIAllY3J5cHRmc19kZXN0cm95X2t0aHJlYWQoKTsKIG91dF9kb19zeXNmc191bnJlZ2lzdHJhdGlvbjoKQEAgLTgxOCw3ICs4MTUsNyBAQAogCWlmIChyYykKIAkJcHJpbnRrKEtFUk5fRVJSICJGYWlsdXJlIHdoaWxzdCBhdHRlbXB0aW5nIHRvIGRlc3Ryb3kgY3J5cHRvOyAiCiAJCSAgICAgICAicmMgPSBbJWRdXG4iLCByYyk7Ci0JZWNyeXB0ZnNfcmVsZWFzZV9tZXNzYWdpbmcoZWNyeXB0ZnNfdHJhbnNwb3J0KTsKKwllY3J5cHRmc19yZWxlYXNlX21lc3NhZ2luZygpOwogCWVjcnlwdGZzX2Rlc3Ryb3lfa3RocmVhZCgpOwogCWRvX3N5c2ZzX3VucmVnaXN0cmF0aW9uKCk7CiAJdW5yZWdpc3Rlcl9maWxlc3lzdGVtKCZlY3J5cHRmc19mc190eXBlKTsKZGlmZiAtLWdpdCBhL2ZzL2VjcnlwdGZzL21lc3NhZ2luZy5jIGIvZnMvZWNyeXB0ZnMvbWVzc2FnaW5nLmMKaW5kZXggMWI1YzIwMC4uYzY5ODM5NyAxMDA2NDQKLS0tIGEvZnMvZWNyeXB0ZnMvbWVzc2FnaW5nLmMKKysrIGIvZnMvZWNyeXB0ZnMvbWVzc2FnaW5nLmMKQEAgLTEzNCwxMiArMTM0LDExIEBACiB9CiAKIHN0YXRpYyBpbnQKLWVjcnlwdGZzX3NlbmRfbWVzc2FnZV9sb2NrZWQodW5zaWduZWQgaW50IHRyYW5zcG9ydCwgY2hhciAqZGF0YSwgaW50IGRhdGFfbGVuLAotCQkJICAgICB1OCBtc2dfdHlwZSwgc3RydWN0IGVjcnlwdGZzX21zZ19jdHggKiptc2dfY3R4KTsKK2VjcnlwdGZzX3NlbmRfbWVzc2FnZV9sb2NrZWQoY2hhciAqZGF0YSwgaW50IGRhdGFfbGVuLCB1OCBtc2dfdHlwZSwKKwkJCSAgICAgc3RydWN0IGVjcnlwdGZzX21zZ19jdHggKiptc2dfY3R4KTsKIAogLyoqCiAgKiBlY3J5cHRmc19zZW5kX3Jhd19tZXNzYWdlCi0gKiBAdHJhbnNwb3J0OiBUcmFuc3BvcnQgdHlwZQogICogQG1zZ190eXBlOiBNZXNzYWdlIHR5cGUKICAqIEBkYWVtb246IERhZW1vbiBzdHJ1Y3QgZm9yIHJlY2lwaWVudCBvZiBtZXNzYWdlCiAgKgpAQCAtMTUwLDM4ICsxNDksMjUgQEAKICAqCiAgKiBSZXR1cm5zIHplcm8gb24gc3VjY2Vzczsgbm9uLXplcm8gb3RoZXJ3aXNlCiAgKi8KLXN0YXRpYyBpbnQgZWNyeXB0ZnNfc2VuZF9yYXdfbWVzc2FnZSh1bnNpZ25lZCBpbnQgdHJhbnNwb3J0LCB1OCBtc2dfdHlwZSwKK3N0YXRpYyBpbnQgZWNyeXB0ZnNfc2VuZF9yYXdfbWVzc2FnZSh1OCBtc2dfdHlwZSwKIAkJCQkgICAgIHN0cnVjdCBlY3J5cHRmc19kYWVtb24gKmRhZW1vbikKIHsKIAlzdHJ1Y3QgZWNyeXB0ZnNfbXNnX2N0eCAqbXNnX2N0eDsKIAlpbnQgcmM7CiAKLQlzd2l0Y2godHJhbnNwb3J0KSB7Ci0JY2FzZSBFQ1JZUFRGU19UUkFOU1BPUlRfTkVUTElOSzoKLQkJcmMgPSBlY3J5cHRmc19zZW5kX25ldGxpbmsoTlVMTCwgMCwgTlVMTCwgbXNnX3R5cGUsIDAsCi0JCQkJCSAgIGRhZW1vbi0+cGlkKTsKLQkJYnJlYWs7Ci0JY2FzZSBFQ1JZUFRGU19UUkFOU1BPUlRfTUlTQ0RFVjoKLQkJcmMgPSBlY3J5cHRmc19zZW5kX21lc3NhZ2VfbG9ja2VkKHRyYW5zcG9ydCwgTlVMTCwgMCwgbXNnX3R5cGUsCi0JCQkJCQkgICZtc2dfY3R4KTsKLQkJaWYgKHJjKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgIiVzOiBFcnJvciB3aGlsc3QgYXR0ZW1wdGluZyB0byBzZW5kICIKLQkJCSAgICAgICAibWVzc2FnZSB2aWEgcHJvY2ZzOyByYyA9IFslZF1cbiIsIF9fZnVuY19fLCByYyk7Ci0JCQlnb3RvIG91dDsKLQkJfQotCQkvKiBSYXcgbWVzc2FnZXMgYXJlIGxvZ2ljYWxseSBjb250ZXh0LWZyZWUgKGUuZy4sIG5vCi0JCSAqIHJlcGx5IGlzIGV4cGVjdGVkKSwgc28gd2Ugc2V0IHRoZSBzdGF0ZSBvZiB0aGUKLQkJICogZWNyeXB0ZnNfbXNnX2N0eCBvYmplY3QgdG8gaW5kaWNhdGUgdGhhdCBpdCBzaG91bGQKLQkJICogYmUgZnJlZWQgYXMgc29vbiBhcyB0aGUgdHJhbnNwb3J0IHNlbmRzIG91dCB0aGUgbWVzc2FnZS4gKi8KLQkJbXV0ZXhfbG9jaygmbXNnX2N0eC0+bXV4KTsKLQkJbXNnX2N0eC0+c3RhdGUgPSBFQ1JZUFRGU19NU0dfQ1RYX1NUQVRFX05PX1JFUExZOwotCQltdXRleF91bmxvY2soJm1zZ19jdHgtPm11eCk7Ci0JCWJyZWFrOwotCWNhc2UgRUNSWVBURlNfVFJBTlNQT1JUX0NPTk5FQ1RPUjoKLQljYXNlIEVDUllQVEZTX1RSQU5TUE9SVF9SRUxBWUZTOgotCWRlZmF1bHQ6Ci0JCXJjID0gLUVOT1NZUzsKKwlyYyA9IGVjcnlwdGZzX3NlbmRfbWVzc2FnZV9sb2NrZWQoTlVMTCwgMCwgbXNnX3R5cGUsICZtc2dfY3R4KTsKKwlpZiAocmMpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogRXJyb3Igd2hpbHN0IGF0dGVtcHRpbmcgdG8gc2VuZCAiCisJCSAgICAgICAibWVzc2FnZSB0byBlY3J5cHRmc2Q7IHJjID0gWyVkXVxuIiwgX19mdW5jX18sIHJjKTsKKwkJZ290byBvdXQ7CiAJfQorCS8qIFJhdyBtZXNzYWdlcyBhcmUgbG9naWNhbGx5IGNvbnRleHQtZnJlZSAoZS5nLiwgbm8KKwkgKiByZXBseSBpcyBleHBlY3RlZCksIHNvIHdlIHNldCB0aGUgc3RhdGUgb2YgdGhlCisJICogZWNyeXB0ZnNfbXNnX2N0eCBvYmplY3QgdG8gaW5kaWNhdGUgdGhhdCBpdCBzaG91bGQKKwkgKiBiZSBmcmVlZCBhcyBzb29uIGFzIHRoZSBtZXNzYWdlIGlzIHNlbnQuICovCisJbXV0ZXhfbG9jaygmbXNnX2N0eC0+bXV4KTsKKwltc2dfY3R4LT5zdGF0ZSA9IEVDUllQVEZTX01TR19DVFhfU1RBVEVfTk9fUkVQTFk7CisJbXV0ZXhfdW5sb2NrKCZtc2dfY3R4LT5tdXgpOwogb3V0OgogCXJldHVybiByYzsKIH0KQEAgLTIyNyw3ICsyMTMsNiBAQAogCiAvKioKICAqIGVjcnlwdGZzX3Byb2Nlc3NfaGVsbwotICogQHRyYW5zcG9ydDogVGhlIHVuZGVybHlpbmcgdHJhbnNwb3J0IChuZXRsaW5rLCBldGMuKQogICogQGV1aWQ6IFRoZSB1c2VyIElEIG93bmVyIG9mIHRoZSBtZXNzYWdlCiAgKiBAdXNlcl9uczogVGhlIG5hbWVzcGFjZSBpbiB3aGljaCBAZXVpZCBhcHBsaWVzCiAgKiBAcGlkOiBUaGUgcHJvY2VzcyBJRCBmb3IgdGhlIHVzZXJzcGFjZSBwcm9ncmFtIHRoYXQgc2VudCB0aGUKQEAgLTIzOSw4ICsyMjQsOCBAQAogICogUmV0dXJucyB6ZXJvIGFmdGVyIGFkZGluZyBhIG5ldyBkYWVtb24gdG8gdGhlIGhhc2ggbGlzdDsKICAqIG5vbi16ZXJvIG90aGVyd2lzZS4KICAqLwotaW50IGVjcnlwdGZzX3Byb2Nlc3NfaGVsbyh1bnNpZ25lZCBpbnQgdHJhbnNwb3J0LCB1aWRfdCBldWlkLAotCQkJICBzdHJ1Y3QgdXNlcl9uYW1lc3BhY2UgKnVzZXJfbnMsIHN0cnVjdCBwaWQgKnBpZCkKK2ludCBlY3J5cHRmc19wcm9jZXNzX2hlbG8odWlkX3QgZXVpZCwgc3RydWN0IHVzZXJfbmFtZXNwYWNlICp1c2VyX25zLAorCQkJICBzdHJ1Y3QgcGlkICpwaWQpCiB7CiAJc3RydWN0IGVjcnlwdGZzX2RhZW1vbiAqbmV3X2RhZW1vbjsKIAlzdHJ1Y3QgZWNyeXB0ZnNfZGFlbW9uICpvbGRfZGFlbW9uOwpAQCAtMjUyLDggKzIzNyw3IEBACiAJCXByaW50ayhLRVJOX1dBUk5JTkcgIlJlY2VpdmVkIHJlcXVlc3QgZnJvbSB1c2VyIFslZF0gIgogCQkgICAgICAgInRvIHJlZ2lzdGVyIGRhZW1vbiBbMHglcF07IHVucmVnaXN0ZXJpbmcgZGFlbW9uICIKIAkJICAgICAgICJbMHglcF1cbiIsIGV1aWQsIHBpZCwgb2xkX2RhZW1vbi0+cGlkKTsKLQkJcmMgPSBlY3J5cHRmc19zZW5kX3Jhd19tZXNzYWdlKHRyYW5zcG9ydCwgRUNSWVBURlNfTVNHX1FVSVQsCi0JCQkJCSAgICAgICBvbGRfZGFlbW9uKTsKKwkJcmMgPSBlY3J5cHRmc19zZW5kX3Jhd19tZXNzYWdlKEVDUllQVEZTX01TR19RVUlULCBvbGRfZGFlbW9uKTsKIAkJaWYgKHJjKQogCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiRmFpbGVkIHRvIHNlbmQgUVVJVCAiCiAJCQkgICAgICAgIm1lc3NhZ2UgdG8gZGFlbW9uIFsweCVwXTsgcmMgPSBbJWRdXG4iLApAQCAtNDY3LDggKzQ1MSw2IEBACiAKIC8qKgogICogZWNyeXB0ZnNfc2VuZF9tZXNzYWdlX2xvY2tlZAotICogQHRyYW5zcG9ydDogVGhlIHRyYW5zcG9ydCBvdmVyIHdoaWNoIHRvIHNlbmQgdGhlIG1lc3NhZ2UgKGkuZS4sCi0gKiAgICAgICAgICAgICBuZXRsaW5rKQogICogQGRhdGE6IFRoZSBkYXRhIHRvIHNlbmQKICAqIEBkYXRhX2xlbjogVGhlIGxlbmd0aCBvZiBkYXRhCiAgKiBAbXNnX2N0eDogVGhlIG1lc3NhZ2UgY29udGV4dCBhbGxvY2F0ZWQgZm9yIHRoZSBzZW5kCkBAIC00NzgsOCArNDYwLDggQEAKICAqIFJldHVybnMgemVybyBvbiBzdWNjZXNzOyBub24temVybyBvdGhlcndpc2UKICAqLwogc3RhdGljIGludAotZWNyeXB0ZnNfc2VuZF9tZXNzYWdlX2xvY2tlZCh1bnNpZ25lZCBpbnQgdHJhbnNwb3J0LCBjaGFyICpkYXRhLCBpbnQgZGF0YV9sZW4sCi0JCQkgICAgIHU4IG1zZ190eXBlLCBzdHJ1Y3QgZWNyeXB0ZnNfbXNnX2N0eCAqKm1zZ19jdHgpCitlY3J5cHRmc19zZW5kX21lc3NhZ2VfbG9ja2VkKGNoYXIgKmRhdGEsIGludCBkYXRhX2xlbiwgdTggbXNnX3R5cGUsCisJCQkgICAgIHN0cnVjdCBlY3J5cHRmc19tc2dfY3R4ICoqbXNnX2N0eCkKIHsKIAlzdHJ1Y3QgZWNyeXB0ZnNfZGFlbW9uICpkYWVtb247CiAJaW50IHJjOwpAQCAtNTAzLDIwICs0ODUsOCBAQAogCWVjcnlwdGZzX21zZ19jdHhfZnJlZV90b19hbGxvYygqbXNnX2N0eCk7CiAJbXV0ZXhfdW5sb2NrKCYoKm1zZ19jdHgpLT5tdXgpOwogCW11dGV4X3VubG9jaygmZWNyeXB0ZnNfbXNnX2N0eF9saXN0c19tdXgpOwotCXN3aXRjaCAodHJhbnNwb3J0KSB7Ci0JY2FzZSBFQ1JZUFRGU19UUkFOU1BPUlRfTkVUTElOSzoKLQkJcmMgPSBlY3J5cHRmc19zZW5kX25ldGxpbmsoZGF0YSwgZGF0YV9sZW4sICptc2dfY3R4LCBtc2dfdHlwZSwKLQkJCQkJICAgMCwgZGFlbW9uLT5waWQpOwotCQlicmVhazsKLQljYXNlIEVDUllQVEZTX1RSQU5TUE9SVF9NSVNDREVWOgotCQlyYyA9IGVjcnlwdGZzX3NlbmRfbWlzY2RldihkYXRhLCBkYXRhX2xlbiwgKm1zZ19jdHgsIG1zZ190eXBlLAotCQkJCQkgICAwLCBkYWVtb24pOwotCQlicmVhazsKLQljYXNlIEVDUllQVEZTX1RSQU5TUE9SVF9DT05ORUNUT1I6Ci0JY2FzZSBFQ1JZUFRGU19UUkFOU1BPUlRfUkVMQVlGUzoKLQlkZWZhdWx0OgotCQlyYyA9IC1FTk9TWVM7Ci0JfQorCXJjID0gZWNyeXB0ZnNfc2VuZF9taXNjZGV2KGRhdGEsIGRhdGFfbGVuLCAqbXNnX2N0eCwgbXNnX3R5cGUsIDAsCisJCQkJICAgZGFlbW9uKTsKIAlpZiAocmMpCiAJCXByaW50ayhLRVJOX0VSUiAiJXM6IEVycm9yIGF0dGVtcHRpbmcgdG8gc2VuZCBtZXNzYWdlIHRvICIKIAkJICAgICAgICJ1c2Vyc3BhY2UgZGFlbW9uOyByYyA9IFslZF1cbiIsIF9fZnVuY19fLCByYyk7CkBAIC01MjYsOCArNDk2LDYgQEAKIAogLyoqCiAgKiBlY3J5cHRmc19zZW5kX21lc3NhZ2UKLSAqIEB0cmFuc3BvcnQ6IFRoZSB0cmFuc3BvcnQgb3ZlciB3aGljaCB0byBzZW5kIHRoZSBtZXNzYWdlIChpLmUuLAotICogICAgICAgICAgICAgbmV0bGluaykKICAqIEBkYXRhOiBUaGUgZGF0YSB0byBzZW5kCiAgKiBAZGF0YV9sZW46IFRoZSBsZW5ndGggb2YgZGF0YQogICogQG1zZ19jdHg6IFRoZSBtZXNzYWdlIGNvbnRleHQgYWxsb2NhdGVkIGZvciB0aGUgc2VuZApAQCAtNTM2LDE0ICs1MDQsMTQgQEAKICAqCiAgKiBSZXR1cm5zIHplcm8gb24gc3VjY2Vzczsgbm9uLXplcm8gb3RoZXJ3aXNlCiAgKi8KLWludCBlY3J5cHRmc19zZW5kX21lc3NhZ2UodW5zaWduZWQgaW50IHRyYW5zcG9ydCwgY2hhciAqZGF0YSwgaW50IGRhdGFfbGVuLAoraW50IGVjcnlwdGZzX3NlbmRfbWVzc2FnZShjaGFyICpkYXRhLCBpbnQgZGF0YV9sZW4sCiAJCQkgIHN0cnVjdCBlY3J5cHRmc19tc2dfY3R4ICoqbXNnX2N0eCkKIHsKIAlpbnQgcmM7CiAKIAltdXRleF9sb2NrKCZlY3J5cHRmc19kYWVtb25faGFzaF9tdXgpOwotCXJjID0gZWNyeXB0ZnNfc2VuZF9tZXNzYWdlX2xvY2tlZCh0cmFuc3BvcnQsIGRhdGEsIGRhdGFfbGVuLAotCQkJCQkgIEVDUllQVEZTX01TR19SRVFVRVNULCBtc2dfY3R4KTsKKwlyYyA9IGVjcnlwdGZzX3NlbmRfbWVzc2FnZV9sb2NrZWQoZGF0YSwgZGF0YV9sZW4sIEVDUllQVEZTX01TR19SRVFVRVNULAorCQkJCQkgIG1zZ19jdHgpOwogCW11dGV4X3VubG9jaygmZWNyeXB0ZnNfZGFlbW9uX2hhc2hfbXV4KTsKIAlyZXR1cm4gcmM7CiB9CkBAIC01ODYsNyArNTU0LDcgQEAKIAlyZXR1cm4gcmM7CiB9CiAKLWludCBlY3J5cHRmc19pbml0X21lc3NhZ2luZyh1bnNpZ25lZCBpbnQgdHJhbnNwb3J0KQoraW50IGVjcnlwdGZzX2luaXRfbWVzc2FnaW5nKHZvaWQpCiB7CiAJaW50IGk7CiAJaW50IHJjID0gMDsKQEAgLTYzOSwyNyArNjA3LDE0IEBACiAJCW11dGV4X3VubG9jaygmZWNyeXB0ZnNfbXNnX2N0eF9hcnJbaV0ubXV4KTsKIAl9CiAJbXV0ZXhfdW5sb2NrKCZlY3J5cHRmc19tc2dfY3R4X2xpc3RzX211eCk7Ci0Jc3dpdGNoKHRyYW5zcG9ydCkgewotCWNhc2UgRUNSWVBURlNfVFJBTlNQT1JUX05FVExJTks6Ci0JCXJjID0gZWNyeXB0ZnNfaW5pdF9uZXRsaW5rKCk7Ci0JCWlmIChyYykKLQkJCWVjcnlwdGZzX3JlbGVhc2VfbWVzc2FnaW5nKHRyYW5zcG9ydCk7Ci0JCWJyZWFrOwotCWNhc2UgRUNSWVBURlNfVFJBTlNQT1JUX01JU0NERVY6Ci0JCXJjID0gZWNyeXB0ZnNfaW5pdF9lY3J5cHRmc19taXNjZGV2KCk7Ci0JCWlmIChyYykKLQkJCWVjcnlwdGZzX3JlbGVhc2VfbWVzc2FnaW5nKHRyYW5zcG9ydCk7Ci0JCWJyZWFrOwotCWNhc2UgRUNSWVBURlNfVFJBTlNQT1JUX0NPTk5FQ1RPUjoKLQljYXNlIEVDUllQVEZTX1RSQU5TUE9SVF9SRUxBWUZTOgotCWRlZmF1bHQ6Ci0JCXJjID0gLUVOT1NZUzsKLQl9CisJcmMgPSBlY3J5cHRmc19pbml0X2VjcnlwdGZzX21pc2NkZXYoKTsKKwlpZiAocmMpCisJCWVjcnlwdGZzX3JlbGVhc2VfbWVzc2FnaW5nKCk7CiBvdXQ6CiAJcmV0dXJuIHJjOwogfQogCi12b2lkIGVjcnlwdGZzX3JlbGVhc2VfbWVzc2FnaW5nKHVuc2lnbmVkIGludCB0cmFuc3BvcnQpCit2b2lkIGVjcnlwdGZzX3JlbGVhc2VfbWVzc2FnaW5nKHZvaWQpCiB7CiAJaWYgKGVjcnlwdGZzX21zZ19jdHhfYXJyKSB7CiAJCWludCBpOwpAQCAtNjk4LDE3ICs2NTMsNiBAQAogCQlrZnJlZShlY3J5cHRmc19kYWVtb25faGFzaCk7CiAJCW11dGV4X3VubG9jaygmZWNyeXB0ZnNfZGFlbW9uX2hhc2hfbXV4KTsKIAl9Ci0Jc3dpdGNoKHRyYW5zcG9ydCkgewotCWNhc2UgRUNSWVBURlNfVFJBTlNQT1JUX05FVExJTks6Ci0JCWVjcnlwdGZzX3JlbGVhc2VfbmV0bGluaygpOwotCQlicmVhazsKLQljYXNlIEVDUllQVEZTX1RSQU5TUE9SVF9NSVNDREVWOgotCQllY3J5cHRmc19kZXN0cm95X2VjcnlwdGZzX21pc2NkZXYoKTsKLQkJYnJlYWs7Ci0JY2FzZSBFQ1JZUFRGU19UUkFOU1BPUlRfQ09OTkVDVE9SOgotCWNhc2UgRUNSWVBURlNfVFJBTlNQT1JUX1JFTEFZRlM6Ci0JZGVmYXVsdDoKLQkJYnJlYWs7Ci0JfQorCWVjcnlwdGZzX2Rlc3Ryb3lfZWNyeXB0ZnNfbWlzY2RldigpOwogCXJldHVybjsKIH0KZGlmZiAtLWdpdCBhL2ZzL2VjcnlwdGZzL21tYXAuYyBiL2ZzL2VjcnlwdGZzL21tYXAuYwppbmRleCAyNDVjMmRjLi4wNGQ3YjNmIDEwMDY0NAotLS0gYS9mcy9lY3J5cHRmcy9tbWFwLmMKKysrIGIvZnMvZWNyeXB0ZnMvbW1hcC5jCkBAIC0yNjUsMjIgKzI2NSwzNCBAQAogfQogCiAvKioKLSAqIGVjcnlwdGZzX3ByZXBhcmVfd3JpdGUKKyAqIGVjcnlwdGZzX3dyaXRlX2JlZ2luCiAgKiBAZmlsZTogVGhlIGVDcnlwdGZzIGZpbGUKLSAqIEBwYWdlOiBUaGUgZUNyeXB0ZnMgcGFnZQotICogQGZyb206IFRoZSBzdGFydCBieXRlIGZyb20gd2hpY2ggd2Ugd2lsbCB3cml0ZQotICogQHRvOiBUaGUgZW5kIGJ5dGUgdG8gd2hpY2ggd2Ugd2lsbCB3cml0ZQorICogQG1hcHBpbmc6IFRoZSBlQ3J5cHRmcyBvYmplY3QKKyAqIEBwb3M6IFRoZSBmaWxlIG9mZnNldCBhdCB3aGljaCB0byBzdGFydCB3cml0aW5nCisgKiBAbGVuOiBMZW5ndGggb2YgdGhlIHdyaXRlCisgKiBAZmxhZ3M6IFZhcmlvdXMgZmxhZ3MKKyAqIEBwYWdlcDogUG9pbnRlciB0byByZXR1cm4gdGhlIHBhZ2UKKyAqIEBmc2RhdGE6IFBvaW50ZXIgdG8gcmV0dXJuIGZzIGRhdGEgKHVudXNlZCkKICAqCiAgKiBUaGlzIGZ1bmN0aW9uIG11c3QgemVybyBhbnkgaG9sZSB3ZSBjcmVhdGUKICAqCiAgKiBSZXR1cm5zIHplcm8gb24gc3VjY2Vzczsgbm9uLXplcm8gb3RoZXJ3aXNlCiAgKi8KLXN0YXRpYyBpbnQgZWNyeXB0ZnNfcHJlcGFyZV93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHBhZ2UgKnBhZ2UsCi0JCQkJICB1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCB0bykKK3N0YXRpYyBpbnQgZWNyeXB0ZnNfd3JpdGVfYmVnaW4oc3RydWN0IGZpbGUgKmZpbGUsCisJCQlzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywKKwkJCWxvZmZfdCBwb3MsIHVuc2lnbmVkIGxlbiwgdW5zaWduZWQgZmxhZ3MsCisJCQlzdHJ1Y3QgcGFnZSAqKnBhZ2VwLCB2b2lkICoqZnNkYXRhKQogeworCXBnb2ZmX3QgaW5kZXggPSBwb3MgPj4gUEFHRV9DQUNIRV9TSElGVDsKKwlzdHJ1Y3QgcGFnZSAqcGFnZTsKIAlsb2ZmX3QgcHJldl9wYWdlX2VuZF9zaXplOwogCWludCByYyA9IDA7CiAKKwlwYWdlID0gX19ncmFiX2NhY2hlX3BhZ2UobWFwcGluZywgaW5kZXgpOworCWlmICghcGFnZSkKKwkJcmV0dXJuIC1FTk9NRU07CisJKnBhZ2VwID0gcGFnZTsKKwogCWlmICghUGFnZVVwdG9kYXRlKHBhZ2UpKSB7CiAJCXN0cnVjdCBlY3J5cHRmc19jcnlwdF9zdGF0ICpjcnlwdF9zdGF0ID0KIAkJCSZlY3J5cHRmc19pbm9kZV90b19wcml2YXRlKApAQCAtMjg5LDggKzMwMSw3IEBACiAJCWlmICghKGNyeXB0X3N0YXQtPmZsYWdzICYgRUNSWVBURlNfRU5DUllQVEVEKQogCQkgICAgfHwgKGNyeXB0X3N0YXQtPmZsYWdzICYgRUNSWVBURlNfTkVXX0ZJTEUpKSB7CiAJCQlyYyA9IGVjcnlwdGZzX3JlYWRfbG93ZXJfcGFnZV9zZWdtZW50KAotCQkJCXBhZ2UsIHBhZ2UtPmluZGV4LCAwLCBQQUdFX0NBQ0hFX1NJWkUsCi0JCQkJcGFnZS0+bWFwcGluZy0+aG9zdCk7CisJCQkJcGFnZSwgaW5kZXgsIDAsIFBBR0VfQ0FDSEVfU0laRSwgbWFwcGluZy0+aG9zdCk7CiAJCQlpZiAocmMpIHsKIAkJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBFcnJvciBhdHRlbXBpbmcgdG8gcmVhZCAiCiAJCQkJICAgICAgICJsb3dlciBwYWdlIHNlZ21lbnQ7IHJjID0gWyVkXVxuIiwKQEAgLTMxNiw4ICszMjcsOCBAQAogCQkJCVNldFBhZ2VVcHRvZGF0ZShwYWdlKTsKIAkJCX0gZWxzZSB7CiAJCQkJcmMgPSBlY3J5cHRmc19yZWFkX2xvd2VyX3BhZ2Vfc2VnbWVudCgKLQkJCQkJcGFnZSwgcGFnZS0+aW5kZXgsIDAsIFBBR0VfQ0FDSEVfU0laRSwKLQkJCQkJcGFnZS0+bWFwcGluZy0+aG9zdCk7CisJCQkJCXBhZ2UsIGluZGV4LCAwLCBQQUdFX0NBQ0hFX1NJWkUsCisJCQkJCW1hcHBpbmctPmhvc3QpOwogCQkJCWlmIChyYykgewogCQkJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBFcnJvciByZWFkaW5nICIKIAkJCQkJICAgICAgICJwYWdlOyByYyA9IFslZF1cbiIsCkBAIC0zMzksMTAgKzM1MCwxMCBAQAogCQkJU2V0UGFnZVVwdG9kYXRlKHBhZ2UpOwogCQl9CiAJfQotCXByZXZfcGFnZV9lbmRfc2l6ZSA9ICgobG9mZl90KXBhZ2UtPmluZGV4IDw8IFBBR0VfQ0FDSEVfU0hJRlQpOworCXByZXZfcGFnZV9lbmRfc2l6ZSA9ICgobG9mZl90KWluZGV4IDw8IFBBR0VfQ0FDSEVfU0hJRlQpOwogCS8qIElmIGNyZWF0aW5nIGEgcGFnZSBvciBtb3JlIG9mIGhvbGVzLCB6ZXJvIHRoZW0gb3V0IHZpYSB0cnVuY2F0ZS4KIAkgKiBOb3RlLCB0aGlzIHdpbGwgaW5jcmVhc2UgaV9zaXplLiAqLwotCWlmIChwYWdlLT5pbmRleCAhPSAwKSB7CisJaWYgKGluZGV4ICE9IDApIHsKIAkJaWYgKHByZXZfcGFnZV9lbmRfc2l6ZSA+IGlfc2l6ZV9yZWFkKHBhZ2UtPm1hcHBpbmctPmhvc3QpKSB7CiAJCQlyYyA9IGVjcnlwdGZzX3RydW5jYXRlKGZpbGUtPmZfcGF0aC5kZW50cnksCiAJCQkJCSAgICAgICBwcmV2X3BhZ2VfZW5kX3NpemUpOwpAQCAtMzU3LDggKzM2OCw4IEBACiAJfQogCS8qIFdyaXRpbmcgdG8gYSBuZXcgcGFnZSwgYW5kIGNyZWF0aW5nIGEgc21hbGwgaG9sZSBmcm9tIHN0YXJ0CiAJICogb2YgcGFnZT8gIFplcm8gaXQgb3V0LiAqLwotCWlmICgoaV9zaXplX3JlYWQocGFnZS0+bWFwcGluZy0+aG9zdCkgPT0gcHJldl9wYWdlX2VuZF9zaXplKQotCSAgICAmJiAoZnJvbSAhPSAwKSkKKwlpZiAoKGlfc2l6ZV9yZWFkKG1hcHBpbmctPmhvc3QpID09IHByZXZfcGFnZV9lbmRfc2l6ZSkKKwkgICAgJiYgKHBvcyAhPSAwKSkKIAkJemVyb191c2VyKHBhZ2UsIDAsIFBBR0VfQ0FDSEVfU0laRSk7CiBvdXQ6CiAJcmV0dXJuIHJjOwpAQCAtNDQ1LDIxICs0NTYsMjggQEAKIH0KIAogLyoqCi0gKiBlY3J5cHRmc19jb21taXRfd3JpdGUKKyAqIGVjcnlwdGZzX3dyaXRlX2VuZAogICogQGZpbGU6IFRoZSBlQ3J5cHRmcyBmaWxlIG9iamVjdAorICogQG1hcHBpbmc6IFRoZSBlQ3J5cHRmcyBvYmplY3QKKyAqIEBwb3M6IFRoZSBmaWxlIHBvc2l0aW9uCisgKiBAbGVuOiBUaGUgbGVuZ3RoIG9mIHRoZSBkYXRhICh1bnVzZWQpCisgKiBAY29waWVkOiBUaGUgYW1vdW50IG9mIGRhdGEgY29waWVkCiAgKiBAcGFnZTogVGhlIGVDcnlwdGZzIHBhZ2UKLSAqIEBmcm9tOiBJZ25vcmVkICh3ZSByb3RhdGUgdGhlIHBhZ2UgSVYgb24gZWFjaCB3cml0ZSkKLSAqIEB0bzogSWdub3JlZAorICogQGZzZGF0YTogVGhlIGZzZGF0YSAodW51c2VkKQogICoKICAqIFRoaXMgaXMgd2hlcmUgd2UgZW5jcnlwdCB0aGUgZGF0YSBhbmQgcGFzcyB0aGUgZW5jcnlwdGVkIGRhdGEgdG8KICAqIHRoZSBsb3dlciBmaWxlc3lzdGVtLiAgSW4gT3BlblBHUC1jb21wYXRpYmxlIG1vZGUsIHdlIG9wZXJhdGUgb24KICAqIGVudGlyZSB1bmRlcmx5aW5nIHBhY2tldHMuCiAgKi8KLXN0YXRpYyBpbnQgZWNyeXB0ZnNfY29tbWl0X3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgcGFnZSAqcGFnZSwKLQkJCQkgdW5zaWduZWQgZnJvbSwgdW5zaWduZWQgdG8pCitzdGF0aWMgaW50IGVjcnlwdGZzX3dyaXRlX2VuZChzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJCXN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLAorCQkJbG9mZl90IHBvcywgdW5zaWduZWQgbGVuLCB1bnNpZ25lZCBjb3BpZWQsCisJCQlzdHJ1Y3QgcGFnZSAqcGFnZSwgdm9pZCAqZnNkYXRhKQogewotCWxvZmZfdCBwb3M7Ci0Jc3RydWN0IGlub2RlICplY3J5cHRmc19pbm9kZSA9IHBhZ2UtPm1hcHBpbmctPmhvc3Q7CisJcGdvZmZfdCBpbmRleCA9IHBvcyA+PiBQQUdFX0NBQ0hFX1NISUZUOworCXVuc2lnbmVkIGZyb20gPSBwb3MgJiAoUEFHRV9DQUNIRV9TSVpFIC0gMSk7CisJdW5zaWduZWQgdG8gPSBmcm9tICsgY29waWVkOworCXN0cnVjdCBpbm9kZSAqZWNyeXB0ZnNfaW5vZGUgPSBtYXBwaW5nLT5ob3N0OwogCXN0cnVjdCBlY3J5cHRmc19jcnlwdF9zdGF0ICpjcnlwdF9zdGF0ID0KIAkJJmVjcnlwdGZzX2lub2RlX3RvX3ByaXZhdGUoZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSktPmNyeXB0X3N0YXQ7CiAJaW50IHJjOwpAQCAtNDcxLDI1ICs0ODksMjIgQEAKIAl9IGVsc2UKIAkJZWNyeXB0ZnNfcHJpbnRrKEtFUk5fREVCVUcsICJOb3QgYSBuZXcgZmlsZVxuIik7CiAJZWNyeXB0ZnNfcHJpbnRrKEtFUk5fREVCVUcsICJDYWxsaW5nIGZpbGxfemVyb3NfdG9fZW5kX29mX3BhZ2UiCi0JCQkiKHBhZ2Ugdy8gaW5kZXggPSBbMHglLjE2eF0sIHRvID0gWyVkXSlcbiIsIHBhZ2UtPmluZGV4LAotCQkJdG8pOworCQkJIihwYWdlIHcvIGluZGV4ID0gWzB4JS4xNnhdLCB0byA9IFslZF0pXG4iLCBpbmRleCwgdG8pOwogCS8qIEZpbGxzIGluIHplcm9zIGlmICd0bycgZ29lcyBiZXlvbmQgaW5vZGUgc2l6ZSAqLwogCXJjID0gZmlsbF96ZXJvc190b19lbmRfb2ZfcGFnZShwYWdlLCB0byk7CiAJaWYgKHJjKSB7CiAJCWVjcnlwdGZzX3ByaW50ayhLRVJOX1dBUk5JTkcsICJFcnJvciBhdHRlbXB0aW5nIHRvIGZpbGwgIgotCQkJCSJ6ZXJvcyBpbiBwYWdlIHdpdGggaW5kZXggPSBbMHglLjE2eF1cbiIsCi0JCQkJcGFnZS0+aW5kZXgpOworCQkJInplcm9zIGluIHBhZ2Ugd2l0aCBpbmRleCA9IFsweCUuMTZ4XVxuIiwgaW5kZXgpOwogCQlnb3RvIG91dDsKIAl9CiAJcmMgPSBlY3J5cHRmc19lbmNyeXB0X3BhZ2UocGFnZSk7CiAJaWYgKHJjKSB7CiAJCWVjcnlwdGZzX3ByaW50ayhLRVJOX1dBUk5JTkcsICJFcnJvciBlbmNyeXB0aW5nIHBhZ2UgKHVwcGVyICIKLQkJCQkiaW5kZXggWzB4JS4xNnhdKVxuIiwgcGFnZS0+aW5kZXgpOworCQkJCSJpbmRleCBbMHglLjE2eF0pXG4iLCBpbmRleCk7CiAJCWdvdG8gb3V0OwogCX0KLQlwb3MgPSAoKChsb2ZmX3QpcGFnZS0+aW5kZXgpIDw8IFBBR0VfQ0FDSEVfU0hJRlQpICsgdG87Ci0JaWYgKHBvcyA+IGlfc2l6ZV9yZWFkKGVjcnlwdGZzX2lub2RlKSkgewotCQlpX3NpemVfd3JpdGUoZWNyeXB0ZnNfaW5vZGUsIHBvcyk7CisJaWYgKHBvcyArIGNvcGllZCA+IGlfc2l6ZV9yZWFkKGVjcnlwdGZzX2lub2RlKSkgeworCQlpX3NpemVfd3JpdGUoZWNyeXB0ZnNfaW5vZGUsIHBvcyArIGNvcGllZCk7CiAJCWVjcnlwdGZzX3ByaW50ayhLRVJOX0RFQlVHLCAiRXhwYW5kZWQgZmlsZSBzaXplIHRvICIKIAkJCQkiWzB4JS4xNnhdXG4iLCBpX3NpemVfcmVhZChlY3J5cHRmc19pbm9kZSkpOwogCX0KQEAgLTQ5Nyw3ICs1MTIsMTEgQEAKIAlpZiAocmMpCiAJCXByaW50ayhLRVJOX0VSUiAiRXJyb3Igd3JpdGluZyBpbm9kZSBzaXplIHRvIG1ldGFkYXRhOyAiCiAJCSAgICAgICAicmMgPSBbJWRdXG4iLCByYyk7CisJZWxzZQorCQlyYyA9IGNvcGllZDsKIG91dDoKKwl1bmxvY2tfcGFnZShwYWdlKTsKKwlwYWdlX2NhY2hlX3JlbGVhc2UocGFnZSk7CiAJcmV0dXJuIHJjOwogfQogCkBAIC01MTgsNyArNTM3LDcgQEAKIHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgZWNyeXB0ZnNfYW9wcyA9IHsKIAkud3JpdGVwYWdlID0gZWNyeXB0ZnNfd3JpdGVwYWdlLAogCS5yZWFkcGFnZSA9IGVjcnlwdGZzX3JlYWRwYWdlLAotCS5wcmVwYXJlX3dyaXRlID0gZWNyeXB0ZnNfcHJlcGFyZV93cml0ZSwKLQkuY29tbWl0X3dyaXRlID0gZWNyeXB0ZnNfY29tbWl0X3dyaXRlLAorCS53cml0ZV9iZWdpbiA9IGVjcnlwdGZzX3dyaXRlX2JlZ2luLAorCS53cml0ZV9lbmQgPSBlY3J5cHRmc193cml0ZV9lbmQsCiAJLmJtYXAgPSBlY3J5cHRmc19ibWFwLAogfTsKZGlmZiAtLWdpdCBhL2ZzL2VjcnlwdGZzL25ldGxpbmsuYyBiL2ZzL2VjcnlwdGZzL25ldGxpbmsuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTBhYmFkNi4uMDAwMDAwMAotLS0gYS9mcy9lY3J5cHRmcy9uZXRsaW5rLmMKKysrIC9kZXYvbnVsbApAQCAtMSwyNDkgKzAsMCBAQAotLyoqCi0gKiBlQ3J5cHRmczogTGludXggZmlsZXN5c3RlbSBlbmNyeXB0aW9uIGxheWVyCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMDYgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyBDb3JwLgotICogICBBdXRob3Iocyk6IE1pY2hhZWwgQS4gSGFsY3JvdyA8bWhhbGNyb3dAdXMuaWJtLmNvbT4KLSAqCQlUeWxlciBIaWNrcyA8dHloaWNrc0BvdS5lZHU+Ci0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbgotICogMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0Ci0gKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BCi0gKiAwMjExMS0xMzA3LCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgPG5ldC9zb2NrLmg+Ci0jaW5jbHVkZSA8bGludXgvaGFzaC5oPgotI2luY2x1ZGUgPGxpbnV4L3JhbmRvbS5oPgotI2luY2x1ZGUgImVjcnlwdGZzX2tlcm5lbC5oIgotCi1zdGF0aWMgc3RydWN0IHNvY2sgKmVjcnlwdGZzX25sX3NvY2s7Ci0KLS8qKgotICogZWNyeXB0ZnNfc2VuZF9uZXRsaW5rCi0gKiBAZGF0YTogVGhlIGRhdGEgdG8gaW5jbHVkZSBhcyB0aGUgcGF5bG9hZAotICogQGRhdGFfbGVuOiBUaGUgYnl0ZSBjb3VudCBvZiB0aGUgZGF0YQotICogQG1zZ19jdHg6IFRoZSBuZXRsaW5rIGNvbnRleHQgdGhhdCB3aWxsIGJlIHVzZWQgdG8gaGFuZGxlIHRoZQotICogICAgICAgICAgcmVzcG9uc2UgbWVzc2FnZQotICogQG1zZ190eXBlOiBUaGUgdHlwZSBvZiBuZXRsaW5rIG1lc3NhZ2UgdG8gc2VuZAotICogQG1zZ19mbGFnczogVGhlIGZsYWdzIHRvIGluY2x1ZGUgaW4gdGhlIG5ldGxpbmsgaGVhZGVyCi0gKiBAZGFlbW9uX3BpZDogVGhlIHByb2Nlc3MgaWQgb2YgdGhlIGRhZW1vbiB0byBzZW5kIHRoZSBtZXNzYWdlIHRvCi0gKgotICogU2VuZHMgdGhlIGRhdGEgdG8gdGhlIHNwZWNpZmllZCBkYWVtb24gcGlkIGFuZCB1c2VzIHRoZSBuZXRsaW5rCi0gKiBjb250ZXh0IGVsZW1lbnQgdG8gc3RvcmUgdGhlIGRhdGEgbmVlZGVkIGZvciB2YWxpZGF0aW9uIHVwb24KLSAqIHJlY2VpdmluZyB0aGUgcmVzcG9uc2UuICBUaGUgZGF0YSBhbmQgdGhlIG5ldGxpbmsgY29udGV4dCBjYW4gYmUKLSAqIG51bGwgaWYganVzdCBzZW5kaW5nIGEgbmV0bGluayBoZWFkZXIgaXMgc3VmZmljaWVudC4gIFJldHVybnMgemVybwotICogdXBvbiBzZW5kaW5nIHRoZSBtZXNzYWdlOyBub24temVybyB1cG9uIGVycm9yLgotICovCi1pbnQgZWNyeXB0ZnNfc2VuZF9uZXRsaW5rKGNoYXIgKmRhdGEsIGludCBkYXRhX2xlbiwKLQkJCSAgc3RydWN0IGVjcnlwdGZzX21zZ19jdHggKm1zZ19jdHgsIHU4IG1zZ190eXBlLAotCQkJICB1MTYgbXNnX2ZsYWdzLCBzdHJ1Y3QgcGlkICpkYWVtb25fcGlkKQotewotCXN0cnVjdCBza19idWZmICpza2I7Ci0Jc3RydWN0IG5sbXNnaGRyICpubGg7Ci0Jc3RydWN0IGVjcnlwdGZzX21lc3NhZ2UgKm1zZzsKLQlzaXplX3QgcGF5bG9hZF9sZW47Ci0JaW50IHJjOwotCi0JcGF5bG9hZF9sZW4gPSAoKGRhdGEgJiYgZGF0YV9sZW4pID8gKHNpemVvZigqbXNnKSArIGRhdGFfbGVuKSA6IDApOwotCXNrYiA9IGFsbG9jX3NrYihOTE1TR19TUEFDRShwYXlsb2FkX2xlbiksIEdGUF9LRVJORUwpOwotCWlmICghc2tiKSB7Ci0JCXJjID0gLUVOT01FTTsKLQkJZWNyeXB0ZnNfcHJpbnRrKEtFUk5fRVJSLCAiRmFpbGVkIHRvIGFsbG9jYXRlIHNvY2tldCBidWZmZXJcbiIpOwotCQlnb3RvIG91dDsKLQl9Ci0JbmxoID0gTkxNU0dfUFVUKHNrYiwgcGlkX25yKGRhZW1vbl9waWQpLCBtc2dfY3R4ID8gbXNnX2N0eC0+Y291bnRlciA6IDAsCi0JCQltc2dfdHlwZSwgcGF5bG9hZF9sZW4pOwotCW5saC0+bmxtc2dfZmxhZ3MgPSBtc2dfZmxhZ3M7Ci0JaWYgKG1zZ19jdHggJiYgcGF5bG9hZF9sZW4pIHsKLQkJbXNnID0gKHN0cnVjdCBlY3J5cHRmc19tZXNzYWdlICopTkxNU0dfREFUQShubGgpOwotCQltc2ctPmluZGV4ID0gbXNnX2N0eC0+aW5kZXg7Ci0JCW1zZy0+ZGF0YV9sZW4gPSBkYXRhX2xlbjsKLQkJbWVtY3B5KG1zZy0+ZGF0YSwgZGF0YSwgZGF0YV9sZW4pOwotCX0KLQlyYyA9IG5ldGxpbmtfdW5pY2FzdChlY3J5cHRmc19ubF9zb2NrLCBza2IsIHBpZF9ucihkYWVtb25fcGlkKSwgMCk7Ci0JaWYgKHJjIDwgMCkgewotCQllY3J5cHRmc19wcmludGsoS0VSTl9FUlIsICJGYWlsZWQgdG8gc2VuZCBlQ3J5cHRmcyBuZXRsaW5rICIKLQkJCQkibWVzc2FnZTsgcmMgPSBbJWRdXG4iLCByYyk7Ci0JCWdvdG8gb3V0OwotCX0KLQlyYyA9IDA7Ci0JZ290byBvdXQ7Ci1ubG1zZ19mYWlsdXJlOgotCXJjID0gLUVNU0dTSVpFOwotCWtmcmVlX3NrYihza2IpOwotb3V0OgotCXJldHVybiByYzsKLX0KLQotLyoqCi0gKiBlY3J5cHRmc19wcm9jZXNzX25sX3JlcG9uc2UKLSAqIEBza2I6IFRoZSBzb2NrZXQgYnVmZmVyIGNvbnRhaW5pbmcgdGhlIG5ldGxpbmsgbWVzc2FnZSBvZiBzdGF0ZQotICogICAgICAgUkVTUE9OU0UKLSAqCi0gKiBQcm9jZXNzZXMgYSByZXNwb25zZSBtZXNzYWdlIGFmdGVyIHNlbmRpbmcgYSBvcGVyYXRpb24gcmVxdWVzdCB0bwotICogdXNlcnNwYWNlLiAgQXR0ZW1wdHMgdG8gYXNzaWduIHRoZSBtc2cgdG8gYSBuZXRsaW5rIGNvbnRleHQgZWxlbWVudAotICogYXQgdGhlIGluZGV4IHNwZWNpZmllZCBpbiB0aGUgbXNnLiAgVGhlIHNrX2J1ZmYgYW5kIG5sbXNnaGRyIG11c3QKLSAqIGJlIHZhbGlkYXRlZCBiZWZvcmUgdGhpcyBmdW5jdGlvbi4gUmV0dXJucyB6ZXJvIHVwb24gZGVsaXZlcnkgdG8KLSAqIGRlc2lyZWQgY29udGV4dCBlbGVtZW50OyBub24temVybyB1cG9uIGRlbGl2ZXJ5IGZhaWx1cmUgb3IgZXJyb3IuCi0gKi8KLXN0YXRpYyBpbnQgZWNyeXB0ZnNfcHJvY2Vzc19ubF9yZXNwb25zZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQotewotCXN0cnVjdCBubG1zZ2hkciAqbmxoID0gbmxtc2dfaGRyKHNrYik7Ci0Jc3RydWN0IGVjcnlwdGZzX21lc3NhZ2UgKm1zZyA9IE5MTVNHX0RBVEEobmxoKTsKLQlzdHJ1Y3QgcGlkICpwaWQ7Ci0JaW50IHJjOwotCi0JaWYgKHNrYi0+bGVuIC0gTkxNU0dfSERSTEVOIC0gc2l6ZW9mKCptc2cpICE9IG1zZy0+ZGF0YV9sZW4pIHsKLQkJcmMgPSAtRUlOVkFMOwotCQllY3J5cHRmc19wcmludGsoS0VSTl9FUlIsICJSZWNlaXZlZCBuZXRsaW5rIG1lc3NhZ2Ugd2l0aCAiCi0JCQkJImluY29ycmVjdGx5IHNwZWNpZmllZCBkYXRhIGxlbmd0aFxuIik7Ci0JCWdvdG8gb3V0OwotCX0KLQlwaWQgPSBmaW5kX2dldF9waWQoTkVUTElOS19DUkVEUyhza2IpLT5waWQpOwotCXJjID0gZWNyeXB0ZnNfcHJvY2Vzc19yZXNwb25zZShtc2csIE5FVExJTktfQ1JFRFMoc2tiKS0+dWlkLCBOVUxMLAotCQkJCSAgICAgICBwaWQsIG5saC0+bmxtc2dfc2VxKTsKLQlwdXRfcGlkKHBpZCk7Ci0JaWYgKHJjKQotCQlwcmludGsoS0VSTl9FUlIKLQkJICAgICAgICJFcnJvciBwcm9jZXNzaW5nIHJlc3BvbnNlIG1lc3NhZ2U7IHJjID0gWyVkXVxuIiwgcmMpOwotb3V0OgotCXJldHVybiByYzsKLX0KLQotLyoqCi0gKiBlY3J5cHRmc19wcm9jZXNzX25sX2hlbG8KLSAqIEBza2I6IFRoZSBzb2NrZXQgYnVmZmVyIGNvbnRhaW5pbmcgdGhlIG5sbXNnaGRyIGluIEhFTE8gc3RhdGUKLSAqCi0gKiBHZXRzIHVpZCBhbmQgcGlkIG9mIHRoZSBza2IgYW5kIGFkZHMgdGhlIHZhbHVlcyB0byB0aGUgZGFlbW9uIGlkCi0gKiBoYXNoLiBSZXR1cm5zIHplcm8gYWZ0ZXIgYWRkaW5nIGEgbmV3IGRhZW1vbiBpZCB0byB0aGUgaGFzaCBsaXN0OwotICogbm9uLXplcm8gb3RoZXJ3aXNlLgotICovCi1zdGF0aWMgaW50IGVjcnlwdGZzX3Byb2Nlc3NfbmxfaGVsbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQotewotCXN0cnVjdCBwaWQgKnBpZDsKLQlpbnQgcmM7Ci0KLQlwaWQgPSBmaW5kX2dldF9waWQoTkVUTElOS19DUkVEUyhza2IpLT5waWQpOwotCXJjID0gZWNyeXB0ZnNfcHJvY2Vzc19oZWxvKEVDUllQVEZTX1RSQU5TUE9SVF9ORVRMSU5LLAotCQkJCSAgIE5FVExJTktfQ1JFRFMoc2tiKS0+dWlkLCBOVUxMLCBwaWQpOwotCXB1dF9waWQocGlkKTsKLQlpZiAocmMpCi0JCXByaW50ayhLRVJOX1dBUk5JTkcgIkVycm9yIHByb2Nlc3NpbmcgSEVMTzsgcmMgPSBbJWRdXG4iLCByYyk7Ci0JcmV0dXJuIHJjOwotfQotCi0vKioKLSAqIGVjcnlwdGZzX3Byb2Nlc3NfbmxfcXVpdAotICogQHNrYjogVGhlIHNvY2tldCBidWZmZXIgY29udGFpbmluZyB0aGUgbmxtc2doZHIgaW4gUVVJVCBzdGF0ZQotICoKLSAqIEdldHMgdWlkIGFuZCBwaWQgb2YgdGhlIHNrYiBhbmQgZGVsZXRlcyB0aGUgY29ycmVzcG9uZGluZyBkYWVtb24KLSAqIGlkLCBpZiBpdCBpcyB0aGUgcmVnaXN0ZXJlZCB0aGF0IGlzIHJlcXVlc3RpbmcgdGhlCi0gKiBkZWxldGlvbi4gUmV0dXJucyB6ZXJvIGFmdGVyIGRlbGV0aW5nIHRoZSBkZXNpcmVkIGRhZW1vbiBpZDsKLSAqIG5vbi16ZXJvIG90aGVyd2lzZS4KLSAqLwotc3RhdGljIGludCBlY3J5cHRmc19wcm9jZXNzX25sX3F1aXQoc3RydWN0IHNrX2J1ZmYgKnNrYikKLXsKLQlzdHJ1Y3QgcGlkICpwaWQ7Ci0JaW50IHJjOwotCi0JcGlkID0gZmluZF9nZXRfcGlkKE5FVExJTktfQ1JFRFMoc2tiKS0+cGlkKTsKLQlyYyA9IGVjcnlwdGZzX3Byb2Nlc3NfcXVpdChORVRMSU5LX0NSRURTKHNrYiktPnVpZCwgTlVMTCwgcGlkKTsKLQlwdXRfcGlkKHBpZCk7Ci0JaWYgKHJjKQotCQlwcmludGsoS0VSTl9XQVJOSU5HCi0JCSAgICAgICAiRXJyb3IgcHJvY2Vzc2luZyBRVUlUIG1lc3NhZ2U7IHJjID0gWyVkXVxuIiwgcmMpOwotCXJldHVybiByYzsKLX0KLQotLyoqCi0gKiBlY3J5cHRmc19yZWNlaXZlX25sX21lc3NhZ2UKLSAqCi0gKiBDYWxsYmFjayBmdW5jdGlvbiBjYWxsZWQgYnkgbmV0bGluayBzeXN0ZW0gd2hlbiBhIG1lc3NhZ2UgYXJyaXZlcy4KLSAqIElmIHRoZSBtZXNzYWdlIGxvb2tzIHRvIGJlIHZhbGlkLCB0aGVuIGFuIGF0dGVtcHQgaXMgbWFkZSB0byBhc3NpZ24KLSAqIGl0IHRvIGl0cyBkZXNpcmVkIG5ldGxpbmsgY29udGV4dCBlbGVtZW50IGFuZCB3YWtlIHVwIHRoZSBwcm9jZXNzCi0gKiB0aGF0IGlzIHdhaXRpbmcgZm9yIGEgcmVzcG9uc2UuCi0gKi8KLXN0YXRpYyB2b2lkIGVjcnlwdGZzX3JlY2VpdmVfbmxfbWVzc2FnZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQotewotCXN0cnVjdCBubG1zZ2hkciAqbmxoOwotCi0JbmxoID0gbmxtc2dfaGRyKHNrYik7Ci0JaWYgKCFOTE1TR19PSyhubGgsIHNrYi0+bGVuKSkgewotCQllY3J5cHRmc19wcmludGsoS0VSTl9FUlIsICJSZWNlaXZlZCBjb3JydXB0IG5ldGxpbmsgIgotCQkJCSJtZXNzYWdlXG4iKTsKLQkJZ290byBmcmVlOwotCX0KLQlzd2l0Y2ggKG5saC0+bmxtc2dfdHlwZSkgewotCQljYXNlIEVDUllQVEZTX01TR19SRVNQT05TRToKLQkJCWlmIChlY3J5cHRmc19wcm9jZXNzX25sX3Jlc3BvbnNlKHNrYikpIHsKLQkJCQllY3J5cHRmc19wcmludGsoS0VSTl9XQVJOSU5HLCAiRmFpbGVkIHRvICIKLQkJCQkJCSJkZWxpdmVyIG5ldGxpbmsgcmVzcG9uc2UgdG8gIgotCQkJCQkJInJlcXVlc3Rpbmcgb3BlcmF0aW9uXG4iKTsKLQkJCX0KLQkJCWJyZWFrOwotCQljYXNlIEVDUllQVEZTX01TR19IRUxPOgotCQkJaWYgKGVjcnlwdGZzX3Byb2Nlc3NfbmxfaGVsbyhza2IpKSB7Ci0JCQkJZWNyeXB0ZnNfcHJpbnRrKEtFUk5fV0FSTklORywgIkZhaWxlZCB0byAiCi0JCQkJCQkiZnVsZmlsbCBIRUxPIHJlcXVlc3RcbiIpOwotCQkJfQotCQkJYnJlYWs7Ci0JCWNhc2UgRUNSWVBURlNfTVNHX1FVSVQ6Ci0JCQlpZiAoZWNyeXB0ZnNfcHJvY2Vzc19ubF9xdWl0KHNrYikpIHsKLQkJCQllY3J5cHRmc19wcmludGsoS0VSTl9XQVJOSU5HLCAiRmFpbGVkIHRvICIKLQkJCQkJCSJmdWxmaWxsIFFVSVQgcmVxdWVzdFxuIik7Ci0JCQl9Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCWVjcnlwdGZzX3ByaW50ayhLRVJOX1dBUk5JTkcsICJEcm9wcGluZyBuZXRsaW5rICIKLQkJCQkJIm1lc3NhZ2Ugb2YgdW5yZWNvZ25pemVkIHR5cGUgWyVkXVxuIiwKLQkJCQkJbmxoLT5ubG1zZ190eXBlKTsKLQkJCWJyZWFrOwotCX0KLWZyZWU6Ci0Ja2ZyZWVfc2tiKHNrYik7Ci19Ci0KLS8qKgotICogZWNyeXB0ZnNfaW5pdF9uZXRsaW5rCi0gKgotICogSW5pdGlhbGl6ZXMgdGhlIGRhZW1vbiBpZCBoYXNoIGxpc3QsIG5ldGxpbmsgY29udGV4dCBhcnJheSwgYW5kCi0gKiBuZWNlc3NhcnkgbG9ja3MuICBSZXR1cm5zIHplcm8gdXBvbiBzdWNjZXNzOyBub24temVybyB1cG9uIGVycm9yLgotICovCi1pbnQgZWNyeXB0ZnNfaW5pdF9uZXRsaW5rKHZvaWQpCi17Ci0JaW50IHJjOwotCi0JZWNyeXB0ZnNfbmxfc29jayA9IG5ldGxpbmtfa2VybmVsX2NyZWF0ZSgmaW5pdF9uZXQsIE5FVExJTktfRUNSWVBURlMsIDAsCi0JCQkJCQkgZWNyeXB0ZnNfcmVjZWl2ZV9ubF9tZXNzYWdlLAotCQkJCQkJIE5VTEwsIFRISVNfTU9EVUxFKTsKLQlpZiAoIWVjcnlwdGZzX25sX3NvY2spIHsKLQkJcmMgPSAtRUlPOwotCQllY3J5cHRmc19wcmludGsoS0VSTl9FUlIsICJGYWlsZWQgdG8gY3JlYXRlIG5ldGxpbmsgc29ja2V0XG4iKTsKLQkJZ290byBvdXQ7Ci0JfQotCWVjcnlwdGZzX25sX3NvY2stPnNrX3NuZHRpbWVvID0gRUNSWVBURlNfREVGQVVMVF9TRU5EX1RJTUVPVVQ7Ci0JcmMgPSAwOwotb3V0OgotCXJldHVybiByYzsKLX0KLQotLyoqCi0gKiBlY3J5cHRmc19yZWxlYXNlX25ldGxpbmsKLSAqCi0gKiBGcmVlcyBhbGwgbWVtb3J5IHVzZWQgYnkgdGhlIG5ldGxpbmsgY29udGV4dCBhcnJheSBhbmQgcmVsZWFzZXMgdGhlCi0gKiBuZXRsaW5rIHNvY2tldC4KLSAqLwotdm9pZCBlY3J5cHRmc19yZWxlYXNlX25ldGxpbmsodm9pZCkKLXsKLQluZXRsaW5rX2tlcm5lbF9yZWxlYXNlKGVjcnlwdGZzX25sX3NvY2spOwotCWVjcnlwdGZzX25sX3NvY2sgPSBOVUxMOwotfQpkaWZmIC0tZ2l0IGEvZnMvZWZzL3N1cGVyLmMgYi9mcy9lZnMvc3VwZXIuYwppbmRleCA1NjdiMTM0Li43M2IxOWNmIDEwMDY0NAotLS0gYS9mcy9lZnMvc3VwZXIuYworKysgYi9mcy9lZnMvc3VwZXIuYwpAQCAtMzQxLDggKzM0MSw2IEBACiAJCQlzYi0+aW5vZGVfYmxvY2tzICoKIAkJCShFRlNfQkxPQ0tTSVpFIC8gc2l6ZW9mKHN0cnVjdCBlZnNfZGlub2RlKSk7CiAJYnVmLT5mX2ZmcmVlICAgPSBzYi0+aW5vZGVfZnJlZTsJLyogZnJlZSBpbm9kZXMgKi8KLQlidWYtPmZfZnNpZC52YWxbMF0gPSAoc2ItPmZzX21hZ2ljID4+IDE2KSAmIDB4ZmZmZjsgLyogZnMgSUQgKi8KLQlidWYtPmZfZnNpZC52YWxbMV0gPSAgc2ItPmZzX21hZ2ljICAgICAgICAmIDB4ZmZmZjsgLyogZnMgSUQgKi8KIAlidWYtPmZfbmFtZWxlbiA9IEVGU19NQVhOQU1FTEVOOwkvKiBtYXggZmlsZW5hbWUgbGVuZ3RoICovCiAKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2ZzL2V2ZW50cG9sbC5jIGIvZnMvZXZlbnRwb2xsLmMKaW5kZXggN2NjMGViNy4uOTkzNjhiZCAxMDA2NDQKLS0tIGEvZnMvZXZlbnRwb2xsLmMKKysrIGIvZnMvZXZlbnRwb2xsLmMKQEAgLTkyNywxNCArOTI3LDExIEBACiAJLyoKIAkgKiBEdXJpbmcgdGhlIHRpbWUgd2Ugc3BlbnQgaW4gdGhlIGxvb3AgYWJvdmUsIHNvbWUgb3RoZXIgZXZlbnRzCiAJICogbWlnaHQgaGF2ZSBiZWVuIHF1ZXVlZCBieSB0aGUgcG9sbCBjYWxsYmFjay4gV2UgcmUtaW5zZXJ0IHRoZW0KLQkgKiBoZXJlIChpbiBjYXNlIHRoZXkgYXJlIG5vdCBhbHJlYWR5IHF1ZXVlZCwgb3IgdGhleSdyZSBvbmUtc2hvdCkuCisJICogaW5zaWRlIHRoZSBtYWluIHJlYWR5LWxpc3QgaGVyZS4KIAkgKi8KIAlmb3IgKG5lcGkgPSBlcC0+b3ZmbGlzdDsgKGVwaSA9IG5lcGkpICE9IE5VTEw7Ci0JICAgICBuZXBpID0gZXBpLT5uZXh0LCBlcGktPm5leHQgPSBFUF9VTkFDVElWRV9QVFIpIHsKLQkJaWYgKCFlcF9pc19saW5rZWQoJmVwaS0+cmRsbGluaykgJiYKLQkJICAgIChlcGktPmV2ZW50LmV2ZW50cyAmIH5FUF9QUklWQVRFX0JJVFMpKQotCQkJbGlzdF9hZGRfdGFpbCgmZXBpLT5yZGxsaW5rLCAmZXAtPnJkbGxpc3QpOwotCX0KKwkgICAgIG5lcGkgPSBlcGktPm5leHQsIGVwaS0+bmV4dCA9IEVQX1VOQUNUSVZFX1BUUikKKwkJbGlzdF9hZGRfdGFpbCgmZXBpLT5yZGxsaW5rLCAmZXAtPnJkbGxpc3QpOwogCS8qCiAJICogV2UgbmVlZCB0byBzZXQgYmFjayBlcC0+b3ZmbGlzdCB0byBFUF9VTkFDVElWRV9QVFIsIHNvIHRoYXQgYWZ0ZXIKIAkgKiByZWxlYXNpbmcgdGhlIGxvY2ssIGV2ZW50cyB3aWxsIGJlIHF1ZXVlZCBpbiB0aGUgbm9ybWFsIHdheSBpbnNpZGUKZGlmZiAtLWdpdCBhL2ZzL2V4ZWMuYyBiL2ZzL2V4ZWMuYwppbmRleCBjZWNlZTUwLi40ZTgzNGYxIDEwMDY0NAotLS0gYS9mcy9leGVjLmMKKysrIGIvZnMvZXhlYy5jCkBAIC01MCwxNSArNTAsMTIgQEAKICNpbmNsdWRlIDxsaW51eC9jbl9wcm9jLmg+CiAjaW5jbHVkZSA8bGludXgvYXVkaXQuaD4KICNpbmNsdWRlIDxsaW51eC90cmFjZWhvb2suaD4KKyNpbmNsdWRlIDxsaW51eC9rbW9kLmg+CiAKICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGFzbS9tbXVfY29udGV4dC5oPgogI2luY2x1ZGUgPGFzbS90bGIuaD4KIAotI2lmZGVmIENPTkZJR19LTU9ECi0jaW5jbHVkZSA8bGludXgva21vZC5oPgotI2VuZGlmCi0KICNpZmRlZiBfX2FscGhhX18KIC8qIGZvciAvc2Jpbi9sb2FkZXIgaGFuZGxpbmcgaW4gc2VhcmNoX2JpbmFyeV9oYW5kbGVyKCkgKi8KICNpbmNsdWRlIDxsaW51eC9hLm91dC5oPgpAQCAtMzkxLDcgKzM4OCw3IEBACiAJCQlpZiAoIXApCiAJCQkJYnJlYWs7CiAJCQlhcmd2Kys7Ci0JCQlpZigrK2kgPiBtYXgpCisJCQlpZiAoaSsrID49IG1heCkKIAkJCQlyZXR1cm4gLUUyQklHOwogCQkJY29uZF9yZXNjaGVkKCk7CiAJCX0KQEAgLTgyNSw4ICs4MjIsNiBAQAogCQkJc2NoZWR1bGUoKTsKIAkJfQogCi0JCWlmICh1bmxpa2VseSh0YXNrX2NoaWxkX3JlYXBlcih0c2spID09IGxlYWRlcikpCi0JCQl0YXNrX2FjdGl2ZV9waWRfbnModHNrKS0+Y2hpbGRfcmVhcGVyID0gdHNrOwogCQkvKgogCQkgKiBUaGUgb25seSByZWNvcmQgd2UgaGF2ZSBvZiB0aGUgcmVhbC10aW1lIGFnZSBvZiBhCiAJCSAqIHByb2Nlc3MsIHJlZ2FyZGxlc3Mgb2YgZXhlY3MgaXQncyBkb25lLCBpcyBzdGFydF90aW1lLgpAQCAtMTE4OSw3ICsxMTg0LDcgQEAKIAkJCXJldHVybiByZXR2YWw7CiAKIAkJLyogUmVtZW1iZXIgaWYgdGhlIGFwcGxpY2F0aW9uIGlzIFRBU08uICAqLwotCQlicHJtLT5zaF9iYW5nID0gZWgtPmFoLmVudHJ5IDwgMHgxMDAwMDAwMDBVTDsKKwkJYnBybS0+dGFzbyA9IGVoLT5haC5lbnRyeSA8IDB4MTAwMDAwMDAwVUw7CiAKIAkJYnBybS0+ZmlsZSA9IGZpbGU7CiAJCWJwcm0tPmxvYWRlciA9IGxvYWRlcjsKQEAgLTEyNDcsOCArMTI0Miw4IEBACiAJCXJlYWRfdW5sb2NrKCZiaW5mbXRfbG9jayk7CiAJCWlmIChyZXR2YWwgIT0gLUVOT0VYRUMgfHwgYnBybS0+bW0gPT0gTlVMTCkgewogCQkJYnJlYWs7Ci0jaWZkZWYgQ09ORklHX0tNT0QKLQkJfWVsc2V7CisjaWZkZWYgQ09ORklHX01PRFVMRVMKKwkJfSBlbHNlIHsKICNkZWZpbmUgcHJpbnRhYmxlKGMpICgoKGMpPT0nXHQnKSB8fCAoKGMpPT0nXG4nKSB8fCAoMHgyMDw9KGMpICYmIChjKTw9MHg3ZSkpCiAJCQlpZiAocHJpbnRhYmxlKGJwcm0tPmJ1ZlswXSkgJiYKIAkJCSAgICBwcmludGFibGUoYnBybS0+YnVmWzFdKSAmJgpAQCAtMTM5MSw3ICsxMzg2LDcgQEAKICAqIG5hbWUgaW50byBjb3JlbmFtZSwgd2hpY2ggbXVzdCBoYXZlIHNwYWNlIGZvciBhdCBsZWFzdAogICogQ09SRU5BTUVfTUFYX1NJWkUgYnl0ZXMgcGx1cyBvbmUgYnl0ZSBmb3IgdGhlIHplcm8gdGVybWluYXRvci4KICAqLwotc3RhdGljIGludCBmb3JtYXRfY29yZW5hbWUoY2hhciAqY29yZW5hbWUsIGludCBucl90aHJlYWRzLCBsb25nIHNpZ25yKQorc3RhdGljIGludCBmb3JtYXRfY29yZW5hbWUoY2hhciAqY29yZW5hbWUsIGxvbmcgc2lnbnIpCiB7CiAJY29uc3QgY2hhciAqcGF0X3B0ciA9IGNvcmVfcGF0dGVybjsKIAlpbnQgaXNwaXBlID0gKCpwYXRfcHRyID09ICd8Jyk7CkBAIC0xNDk4LDggKzE0OTMsNyBAQAogCSAqIElmIGNvcmVfcGF0dGVybiBkb2VzIG5vdCBpbmNsdWRlIGEgJXAgKGFzIGlzIHRoZSBkZWZhdWx0KQogCSAqIGFuZCBjb3JlX3VzZXNfcGlkIGlzIHNldCwgdGhlbiAuJXBpZCB3aWxsIGJlIGFwcGVuZGVkIHRvCiAJICogdGhlIGZpbGVuYW1lLiBEbyBub3QgZG8gdGhpcyBmb3IgcGlwZWQgY29tbWFuZHMuICovCi0JaWYgKCFpc3BpcGUgJiYgIXBpZF9pbl9wYXR0ZXJuCi0JICAgICYmIChjb3JlX3VzZXNfcGlkIHx8IG5yX3RocmVhZHMpKSB7CisJaWYgKCFpc3BpcGUgJiYgIXBpZF9pbl9wYXR0ZXJuICYmIGNvcmVfdXNlc19waWQpIHsKIAkJcmMgPSBzbnByaW50ZihvdXRfcHRyLCBvdXRfZW5kIC0gb3V0X3B0ciwKIAkJCSAgICAgICIuJWQiLCB0YXNrX3RnaWRfdm5yKGN1cnJlbnQpKTsKIAkJaWYgKHJjID4gb3V0X2VuZCAtIG91dF9wdHIpCkBAIC0xNzYyLDcgKzE3NTYsNyBAQAogCSAqIHVzZXMgbG9ja19rZXJuZWwoKQogCSAqLwogIAlsb2NrX2tlcm5lbCgpOwotCWlzcGlwZSA9IGZvcm1hdF9jb3JlbmFtZShjb3JlbmFtZSwgcmV0dmFsLCBzaWducik7CisJaXNwaXBlID0gZm9ybWF0X2NvcmVuYW1lKGNvcmVuYW1lLCBzaWducik7CiAJdW5sb2NrX2tlcm5lbCgpOwogCS8qCiAJICogRG9uJ3QgYm90aGVyIHRvIGNoZWNrIHRoZSBSTElNSVRfQ09SRSB2YWx1ZSBpZiBjb3JlX3BhdHRlcm4gcG9pbnRzCmRpZmYgLS1naXQgYS9mcy9leHQyL0tjb25maWcgYi9mcy9leHQyL0tjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTRhNjc4MAotLS0gL2Rldi9udWxsCisrKyBiL2ZzL2V4dDIvS2NvbmZpZwpAQCAtMCwwICsxLDU1IEBACitjb25maWcgRVhUMl9GUworCXRyaXN0YXRlICJTZWNvbmQgZXh0ZW5kZWQgZnMgc3VwcG9ydCIKKwloZWxwCisJICBFeHQyIGlzIGEgc3RhbmRhcmQgTGludXggZmlsZSBzeXN0ZW0gZm9yIGhhcmQgZGlza3MuCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBmaWxlIHN5c3RlbSBzdXBwb3J0IGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBleHQyLgorCisJICBJZiB1bnN1cmUsIHNheSBZLgorCitjb25maWcgRVhUMl9GU19YQVRUUgorCWJvb2wgIkV4dDIgZXh0ZW5kZWQgYXR0cmlidXRlcyIKKwlkZXBlbmRzIG9uIEVYVDJfRlMKKwloZWxwCisJICBFeHRlbmRlZCBhdHRyaWJ1dGVzIGFyZSBuYW1lOnZhbHVlIHBhaXJzIGFzc29jaWF0ZWQgd2l0aCBpbm9kZXMgYnkKKwkgIHRoZSBrZXJuZWwgb3IgYnkgdXNlcnMgKHNlZSB0aGUgYXR0cig1KSBtYW51YWwgcGFnZSwgb3IgdmlzaXQKKwkgIDxodHRwOi8vYWNsLmJlc3RiaXRzLmF0Lz4gZm9yIGRldGFpbHMpLgorCisJICBJZiB1bnN1cmUsIHNheSBOLgorCitjb25maWcgRVhUMl9GU19QT1NJWF9BQ0wKKwlib29sICJFeHQyIFBPU0lYIEFjY2VzcyBDb250cm9sIExpc3RzIgorCWRlcGVuZHMgb24gRVhUMl9GU19YQVRUUgorCXNlbGVjdCBGU19QT1NJWF9BQ0wKKwloZWxwCisJICBQb3NpeCBBY2Nlc3MgQ29udHJvbCBMaXN0cyAoQUNMcykgc3VwcG9ydCBwZXJtaXNzaW9ucyBmb3IgdXNlcnMgYW5kCisJICBncm91cHMgYmV5b25kIHRoZSBvd25lci9ncm91cC93b3JsZCBzY2hlbWUuCisKKwkgIFRvIGxlYXJuIG1vcmUgYWJvdXQgQWNjZXNzIENvbnRyb2wgTGlzdHMsIHZpc2l0IHRoZSBQb3NpeCBBQ0xzIGZvcgorCSAgTGludXggd2Vic2l0ZSA8aHR0cDovL2FjbC5iZXN0Yml0cy5hdC8+LgorCisJICBJZiB5b3UgZG9uJ3Qga25vdyB3aGF0IEFjY2VzcyBDb250cm9sIExpc3RzIGFyZSwgc2F5IE4KKworY29uZmlnIEVYVDJfRlNfU0VDVVJJVFkKKwlib29sICJFeHQyIFNlY3VyaXR5IExhYmVscyIKKwlkZXBlbmRzIG9uIEVYVDJfRlNfWEFUVFIKKwloZWxwCisJICBTZWN1cml0eSBsYWJlbHMgc3VwcG9ydCBhbHRlcm5hdGl2ZSBhY2Nlc3MgY29udHJvbCBtb2RlbHMKKwkgIGltcGxlbWVudGVkIGJ5IHNlY3VyaXR5IG1vZHVsZXMgbGlrZSBTRUxpbnV4LiAgVGhpcyBvcHRpb24KKwkgIGVuYWJsZXMgYW4gZXh0ZW5kZWQgYXR0cmlidXRlIGhhbmRsZXIgZm9yIGZpbGUgc2VjdXJpdHkKKwkgIGxhYmVscyBpbiB0aGUgZXh0MiBmaWxlc3lzdGVtLgorCisJICBJZiB5b3UgYXJlIG5vdCB1c2luZyBhIHNlY3VyaXR5IG1vZHVsZSB0aGF0IHJlcXVpcmVzIHVzaW5nCisJICBleHRlbmRlZCBhdHRyaWJ1dGVzIGZvciBmaWxlIHNlY3VyaXR5IGxhYmVscywgc2F5IE4uCisKK2NvbmZpZyBFWFQyX0ZTX1hJUAorCWJvb2wgIkV4dDIgZXhlY3V0ZSBpbiBwbGFjZSBzdXBwb3J0IgorCWRlcGVuZHMgb24gRVhUMl9GUyAmJiBNTVUKKwloZWxwCisJICBFeGVjdXRlIGluIHBsYWNlIGNhbiBiZSB1c2VkIG9uIG1lbW9yeS1iYWNrZWQgYmxvY2sgZGV2aWNlcy4gSWYgeW91CisJICBlbmFibGUgdGhpcyBvcHRpb24sIHlvdSBjYW4gc2VsZWN0IHRvIG1vdW50IGJsb2NrIGRldmljZXMgd2hpY2ggYXJlCisJICBjYXBhYmxlIG9mIHRoaXMgZmVhdHVyZSB3aXRob3V0IHVzaW5nIHRoZSBwYWdlIGNhY2hlLgorCisJICBJZiB5b3UgZG8gbm90IHVzZSBhIGJsb2NrIGRldmljZSB0aGF0IGlzIGNhcGFibGUgb2YgdXNpbmcgdGhpcywKKwkgIG9yIGlmIHVuc3VyZSwgc2F5IE4uCmRpZmYgLS1naXQgYS9mcy9leHQyL2JhbGxvYy5jIGIvZnMvZXh0Mi9iYWxsb2MuYwppbmRleCAxMGJiMDJjLi42ZGFjN2JhIDEwMDY0NAotLS0gYS9mcy9leHQyL2JhbGxvYy5jCisrKyBiL2ZzL2V4dDIvYmFsbG9jLmMKQEAgLTEyOTUsNiArMTI5NSw3IEBACiAJICogdHVybiBvZmYgcmVzZXJ2YXRpb24gZm9yIHRoaXMgYWxsb2NhdGlvbgogCSAqLwogCWlmIChteV9yc3YgJiYgKGZyZWVfYmxvY2tzIDwgd2luZG93c3opCisJCSYmIChmcmVlX2Jsb2NrcyA+IDApCiAJCSYmIChyc3ZfaXNfZW1wdHkoJm15X3Jzdi0+cnN2X3dpbmRvdykpKQogCQlteV9yc3YgPSBOVUxMOwogCkBAIC0xMzMyLDcgKzEzMzMsNyBAQAogCQkgKiBmcmVlIGJsb2NrcyBpcyBsZXNzIHRoYW4gaGFsZiBvZiB0aGUgcmVzZXJ2YXRpb24KIAkJICogd2luZG93IHNpemUuCiAJCSAqLwotCQlpZiAoZnJlZV9ibG9ja3MgPD0gKHdpbmRvd3N6LzIpKQorCQlpZiAobXlfcnN2ICYmIChmcmVlX2Jsb2NrcyA8PSAod2luZG93c3ovMikpKQogCQkJY29udGludWU7CiAKIAkJYnJlbHNlKGJpdG1hcF9iaCk7CmRpZmYgLS1naXQgYS9mcy9leHQyL2Rpci5jIGIvZnMvZXh0Mi9kaXIuYwppbmRleCBhNzhjNmI0Li4xMWE0OWNlIDEwMDY0NAotLS0gYS9mcy9leHQyL2Rpci5jCisrKyBiL2ZzL2V4dDIvZGlyLmMKQEAgLTEwMyw3ICsxMDMsNyBAQAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyB2b2lkIGV4dDJfY2hlY2tfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSkKK3N0YXRpYyB2b2lkIGV4dDJfY2hlY2tfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgaW50IHF1aWV0KQogewogCXN0cnVjdCBpbm9kZSAqZGlyID0gcGFnZS0+bWFwcGluZy0+aG9zdDsKIAlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gZGlyLT5pX3NiOwpAQCAtMTQ2LDEwICsxNDYsMTAgQEAKIAkvKiBUb28gYmFkLCB3ZSBoYWQgYW4gZXJyb3IgKi8KIAogRWJhZHNpemU6Ci0JZXh0Ml9lcnJvcihzYiwgImV4dDJfY2hlY2tfcGFnZSIsCi0JCSJzaXplIG9mIGRpcmVjdG9yeSAjJWx1IGlzIG5vdCBhIG11bHRpcGxlIG9mIGNodW5rIHNpemUiLAotCQlkaXItPmlfaW5vCi0JKTsKKwlpZiAoIXF1aWV0KQorCQlleHQyX2Vycm9yKHNiLCBfX2Z1bmNfXywKKwkJCSJzaXplIG9mIGRpcmVjdG9yeSAjJWx1IGlzIG5vdCBhIG11bHRpcGxlICIKKwkJCSJvZiBjaHVuayBzaXplIiwgZGlyLT5pX2lubyk7CiAJZ290byBmYWlsOwogRXNob3J0OgogCWVycm9yID0gInJlY19sZW4gaXMgc21hbGxlciB0aGFuIG1pbmltYWwiOwpAQCAtMTY2LDMyICsxNjYsMzYgQEAKIEVpbnVtYmVyOgogCWVycm9yID0gImlub2RlIG91dCBvZiBib3VuZHMiOwogYmFkX2VudHJ5OgotCWV4dDJfZXJyb3IgKHNiLCAiZXh0Ml9jaGVja19wYWdlIiwgImJhZCBlbnRyeSBpbiBkaXJlY3RvcnkgIyVsdTogJXMgLSAiCi0JCSJvZmZzZXQ9JWx1LCBpbm9kZT0lbHUsIHJlY19sZW49JWQsIG5hbWVfbGVuPSVkIiwKLQkJZGlyLT5pX2lubywgZXJyb3IsIChwYWdlLT5pbmRleDw8UEFHRV9DQUNIRV9TSElGVCkrb2ZmcywKLQkJKHVuc2lnbmVkIGxvbmcpIGxlMzJfdG9fY3B1KHAtPmlub2RlKSwKLQkJcmVjX2xlbiwgcC0+bmFtZV9sZW4pOworCWlmICghcXVpZXQpCisJCWV4dDJfZXJyb3Ioc2IsIF9fZnVuY19fLCAiYmFkIGVudHJ5IGluIGRpcmVjdG9yeSAjJWx1OiA6ICVzIC0gIgorCQkJIm9mZnNldD0lbHUsIGlub2RlPSVsdSwgcmVjX2xlbj0lZCwgbmFtZV9sZW49JWQiLAorCQkJZGlyLT5pX2lubywgZXJyb3IsIChwYWdlLT5pbmRleDw8UEFHRV9DQUNIRV9TSElGVCkrb2ZmcywKKwkJCSh1bnNpZ25lZCBsb25nKSBsZTMyX3RvX2NwdShwLT5pbm9kZSksCisJCQlyZWNfbGVuLCBwLT5uYW1lX2xlbik7CiAJZ290byBmYWlsOwogRWVuZDoKLQlwID0gKGV4dDJfZGlyZW50ICopKGthZGRyICsgb2Zmcyk7Ci0JZXh0Ml9lcnJvciAoc2IsICJleHQyX2NoZWNrX3BhZ2UiLAotCQkiZW50cnkgaW4gZGlyZWN0b3J5ICMlbHUgc3BhbnMgdGhlIHBhZ2UgYm91bmRhcnkiCi0JCSJvZmZzZXQ9JWx1LCBpbm9kZT0lbHUiLAotCQlkaXItPmlfaW5vLCAocGFnZS0+aW5kZXg8PFBBR0VfQ0FDSEVfU0hJRlQpK29mZnMsCi0JCSh1bnNpZ25lZCBsb25nKSBsZTMyX3RvX2NwdShwLT5pbm9kZSkpOworCWlmICghcXVpZXQpIHsKKwkJcCA9IChleHQyX2RpcmVudCAqKShrYWRkciArIG9mZnMpOworCQlleHQyX2Vycm9yKHNiLCAiZXh0Ml9jaGVja19wYWdlIiwKKwkJCSJlbnRyeSBpbiBkaXJlY3RvcnkgIyVsdSBzcGFucyB0aGUgcGFnZSBib3VuZGFyeSIKKwkJCSJvZmZzZXQ9JWx1LCBpbm9kZT0lbHUiLAorCQkJZGlyLT5pX2lubywgKHBhZ2UtPmluZGV4PDxQQUdFX0NBQ0hFX1NISUZUKStvZmZzLAorCQkJKHVuc2lnbmVkIGxvbmcpIGxlMzJfdG9fY3B1KHAtPmlub2RlKSk7CisJfQogZmFpbDoKIAlTZXRQYWdlQ2hlY2tlZChwYWdlKTsKIAlTZXRQYWdlRXJyb3IocGFnZSk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgcGFnZSAqIGV4dDJfZ2V0X3BhZ2Uoc3RydWN0IGlub2RlICpkaXIsIHVuc2lnbmVkIGxvbmcgbikKK3N0YXRpYyBzdHJ1Y3QgcGFnZSAqIGV4dDJfZ2V0X3BhZ2Uoc3RydWN0IGlub2RlICpkaXIsIHVuc2lnbmVkIGxvbmcgbiwKKwkJCQkgICBpbnQgcXVpZXQpCiB7CiAJc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcgPSBkaXItPmlfbWFwcGluZzsKIAlzdHJ1Y3QgcGFnZSAqcGFnZSA9IHJlYWRfbWFwcGluZ19wYWdlKG1hcHBpbmcsIG4sIE5VTEwpOwogCWlmICghSVNfRVJSKHBhZ2UpKSB7CiAJCWttYXAocGFnZSk7CiAJCWlmICghUGFnZUNoZWNrZWQocGFnZSkpCi0JCQlleHQyX2NoZWNrX3BhZ2UocGFnZSk7CisJCQlleHQyX2NoZWNrX3BhZ2UocGFnZSwgcXVpZXQpOwogCQlpZiAoUGFnZUVycm9yKHBhZ2UpKQogCQkJZ290byBmYWlsOwogCX0KQEAgLTI5Miw3ICsyOTYsNyBAQAogCWZvciAoIDsgbiA8IG5wYWdlczsgbisrLCBvZmZzZXQgPSAwKSB7CiAJCWNoYXIgKmthZGRyLCAqbGltaXQ7CiAJCWV4dDJfZGlyZW50ICpkZTsKLQkJc3RydWN0IHBhZ2UgKnBhZ2UgPSBleHQyX2dldF9wYWdlKGlub2RlLCBuKTsKKwkJc3RydWN0IHBhZ2UgKnBhZ2UgPSBleHQyX2dldF9wYWdlKGlub2RlLCBuLCAwKTsKIAogCQlpZiAoSVNfRVJSKHBhZ2UpKSB7CiAJCQlleHQyX2Vycm9yKHNiLCBfX2Z1bmNfXywKQEAgLTM2MSw2ICszNjUsNyBAQAogCXN0cnVjdCBwYWdlICpwYWdlID0gTlVMTDsKIAlzdHJ1Y3QgZXh0Ml9pbm9kZV9pbmZvICplaSA9IEVYVDJfSShkaXIpOwogCWV4dDJfZGlyZW50ICogZGU7CisJaW50IGRpcl9oYXNfZXJyb3IgPSAwOwogCiAJaWYgKG5wYWdlcyA9PSAwKQogCQlnb3RvIG91dDsKQEAgLTM3NCw3ICszNzksNyBAQAogCW4gPSBzdGFydDsKIAlkbyB7CiAJCWNoYXIgKmthZGRyOwotCQlwYWdlID0gZXh0Ml9nZXRfcGFnZShkaXIsIG4pOworCQlwYWdlID0gZXh0Ml9nZXRfcGFnZShkaXIsIG4sIGRpcl9oYXNfZXJyb3IpOwogCQlpZiAoIUlTX0VSUihwYWdlKSkgewogCQkJa2FkZHIgPSBwYWdlX2FkZHJlc3MocGFnZSk7CiAJCQlkZSA9IChleHQyX2RpcmVudCAqKSBrYWRkcjsKQEAgLTM5MSw3ICszOTYsOSBAQAogCQkJCWRlID0gZXh0Ml9uZXh0X2VudHJ5KGRlKTsKIAkJCX0KIAkJCWV4dDJfcHV0X3BhZ2UocGFnZSk7Ci0JCX0KKwkJfSBlbHNlCisJCQlkaXJfaGFzX2Vycm9yID0gMTsKKwogCQlpZiAoKytuID49IG5wYWdlcykKIAkJCW4gPSAwOwogCQkvKiBuZXh0IHBhZ2UgaXMgcGFzdCB0aGUgYmxvY2tzIHdlJ3ZlIGdvdCAqLwpAQCAtNDE0LDcgKzQyMSw3IEBACiAKIHN0cnVjdCBleHQyX2Rpcl9lbnRyeV8yICogZXh0Ml9kb3Rkb3QgKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgcGFnZSAqKnApCiB7Ci0Jc3RydWN0IHBhZ2UgKnBhZ2UgPSBleHQyX2dldF9wYWdlKGRpciwgMCk7CisJc3RydWN0IHBhZ2UgKnBhZ2UgPSBleHQyX2dldF9wYWdlKGRpciwgMCwgMCk7CiAJZXh0Ml9kaXJlbnQgKmRlID0gTlVMTDsKIAogCWlmICghSVNfRVJSKHBhZ2UpKSB7CkBAIC00ODcsNyArNDk0LDcgQEAKIAlmb3IgKG4gPSAwOyBuIDw9IG5wYWdlczsgbisrKSB7CiAJCWNoYXIgKmRpcl9lbmQ7CiAKLQkJcGFnZSA9IGV4dDJfZ2V0X3BhZ2UoZGlyLCBuKTsKKwkJcGFnZSA9IGV4dDJfZ2V0X3BhZ2UoZGlyLCBuLCAwKTsKIAkJZXJyID0gUFRSX0VSUihwYWdlKTsKIAkJaWYgKElTX0VSUihwYWdlKSkKIAkJCWdvdG8gb3V0OwpAQCAtNjU1LDE0ICs2NjIsMTcgQEAKIHsKIAlzdHJ1Y3QgcGFnZSAqcGFnZSA9IE5VTEw7CiAJdW5zaWduZWQgbG9uZyBpLCBucGFnZXMgPSBkaXJfcGFnZXMoaW5vZGUpOworCWludCBkaXJfaGFzX2Vycm9yID0gMDsKIAogCWZvciAoaSA9IDA7IGkgPCBucGFnZXM7IGkrKykgewogCQljaGFyICprYWRkcjsKIAkJZXh0Ml9kaXJlbnQgKiBkZTsKLQkJcGFnZSA9IGV4dDJfZ2V0X3BhZ2UoaW5vZGUsIGkpOworCQlwYWdlID0gZXh0Ml9nZXRfcGFnZShpbm9kZSwgaSwgZGlyX2hhc19lcnJvcik7CiAKLQkJaWYgKElTX0VSUihwYWdlKSkKKwkJaWYgKElTX0VSUihwYWdlKSkgeworCQkJZGlyX2hhc19lcnJvciA9IDE7CiAJCQljb250aW51ZTsKKwkJfQogCiAJCWthZGRyID0gcGFnZV9hZGRyZXNzKHBhZ2UpOwogCQlkZSA9IChleHQyX2RpcmVudCAqKWthZGRyOwpkaWZmIC0tZ2l0IGEvZnMvZXh0Mi9zdXBlci5jIGIvZnMvZXh0Mi9zdXBlci5jCmluZGV4IGZkODhjN2I0Li42NDdjZDg4IDEwMDY0NAotLS0gYS9mcy9leHQyL3N1cGVyLmMKKysrIGIvZnMvZXh0Mi9zdXBlci5jCkBAIC0zOTMsNyArMzkzLDcgQEAKIAlPcHRfdXNycXVvdGEsIE9wdF9ncnBxdW90YSwgT3B0X3Jlc2VydmF0aW9uLCBPcHRfbm9yZXNlcnZhdGlvbgogfTsKIAotc3RhdGljIG1hdGNoX3RhYmxlX3QgdG9rZW5zID0geworc3RhdGljIGNvbnN0IG1hdGNoX3RhYmxlX3QgdG9rZW5zID0gewogCXtPcHRfYnNkX2RmLCAiYnNkZGYifSwKIAl7T3B0X21pbml4X2RmLCAibWluaXhkZiJ9LAogCXtPcHRfZ3JwaWQsICJncnBpZCJ9LApkaWZmIC0tZ2l0IGEvZnMvZXh0My9LY29uZmlnIGIvZnMvZXh0My9LY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlMGNmZTQKLS0tIC9kZXYvbnVsbAorKysgYi9mcy9leHQzL0tjb25maWcKQEAgLTAsMCArMSw2NyBAQAorY29uZmlnIEVYVDNfRlMKKwl0cmlzdGF0ZSAiRXh0MyBqb3VybmFsbGluZyBmaWxlIHN5c3RlbSBzdXBwb3J0IgorCXNlbGVjdCBKQkQKKwloZWxwCisJICBUaGlzIGlzIHRoZSBqb3VybmFsbGluZyB2ZXJzaW9uIG9mIHRoZSBTZWNvbmQgZXh0ZW5kZWQgZmlsZSBzeXN0ZW0KKwkgIChvZnRlbiBjYWxsZWQgZXh0MyksIHRoZSBkZSBmYWN0byBzdGFuZGFyZCBMaW51eCBmaWxlIHN5c3RlbQorCSAgKG1ldGhvZCB0byBvcmdhbml6ZSBmaWxlcyBvbiBhIHN0b3JhZ2UgZGV2aWNlKSBmb3IgaGFyZCBkaXNrcy4KKworCSAgVGhlIGpvdXJuYWxsaW5nIGNvZGUgaW5jbHVkZWQgaW4gdGhpcyBkcml2ZXIgbWVhbnMgeW91IGRvIG5vdCBoYXZlCisJICB0byBydW4gZTJmc2NrIChmaWxlIHN5c3RlbSBjaGVja2VyKSBvbiB5b3VyIGZpbGUgc3lzdGVtcyBhZnRlciBhCisJICBjcmFzaC4gIFRoZSBqb3VybmFsIGtlZXBzIHRyYWNrIG9mIGFueSBjaGFuZ2VzIHRoYXQgd2VyZSBiZWluZyBtYWRlCisJICBhdCB0aGUgdGltZSB0aGUgc3lzdGVtIGNyYXNoZWQsIGFuZCBjYW4gZW5zdXJlIHRoYXQgeW91ciBmaWxlIHN5c3RlbQorCSAgaXMgY29uc2lzdGVudCB3aXRob3V0IHRoZSBuZWVkIGZvciBhIGxlbmd0aHkgY2hlY2suCisKKwkgIE90aGVyIHRoYW4gYWRkaW5nIHRoZSBqb3VybmFsIHRvIHRoZSBmaWxlIHN5c3RlbSwgdGhlIG9uLWRpc2sgZm9ybWF0CisJICBvZiBleHQzIGlzIGlkZW50aWNhbCB0byBleHQyLiAgSXQgaXMgcG9zc2libGUgdG8gZnJlZWx5IHN3aXRjaAorCSAgYmV0d2VlbiB1c2luZyB0aGUgZXh0MyBkcml2ZXIgYW5kIHRoZSBleHQyIGRyaXZlciwgYXMgbG9uZyBhcyB0aGUKKwkgIGZpbGUgc3lzdGVtIGhhcyBiZWVuIGNsZWFubHkgdW5tb3VudGVkLCBvciBlMmZzY2sgaXMgcnVuIG9uIHRoZSBmaWxlCisJICBzeXN0ZW0uCisKKwkgIFRvIGFkZCBhIGpvdXJuYWwgb24gYW4gZXhpc3RpbmcgZXh0MiBmaWxlIHN5c3RlbSBvciBjaGFuZ2UgdGhlCisJICBiZWhhdmlvciBvZiBleHQzIGZpbGUgc3lzdGVtcywgeW91IGNhbiB1c2UgdGhlIHR1bmUyZnMgdXRpbGl0eSAoIm1hbgorCSAgdHVuZTJmcyIpLiAgVG8gbW9kaWZ5IGF0dHJpYnV0ZXMgb2YgZmlsZXMgYW5kIGRpcmVjdG9yaWVzIG9uIGV4dDMKKwkgIGZpbGUgc3lzdGVtcywgdXNlIGNoYXR0ciAoIm1hbiBjaGF0dHIiKS4gIFlvdSBuZWVkIHRvIGJlIHVzaW5nCisJICBlMmZzcHJvZ3MgdmVyc2lvbiAxLjIwIG9yIGxhdGVyIGluIG9yZGVyIHRvIGNyZWF0ZSBleHQzIGpvdXJuYWxzCisJICAoYXZhaWxhYmxlIGF0IDxodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL2UyZnNwcm9ncy8+KS4KKworCSAgVG8gY29tcGlsZSB0aGlzIGZpbGUgc3lzdGVtIHN1cHBvcnQgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQorCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGV4dDMuCisKK2NvbmZpZyBFWFQzX0ZTX1hBVFRSCisJYm9vbCAiRXh0MyBleHRlbmRlZCBhdHRyaWJ1dGVzIgorCWRlcGVuZHMgb24gRVhUM19GUworCWRlZmF1bHQgeQorCWhlbHAKKwkgIEV4dGVuZGVkIGF0dHJpYnV0ZXMgYXJlIG5hbWU6dmFsdWUgcGFpcnMgYXNzb2NpYXRlZCB3aXRoIGlub2RlcyBieQorCSAgdGhlIGtlcm5lbCBvciBieSB1c2VycyAoc2VlIHRoZSBhdHRyKDUpIG1hbnVhbCBwYWdlLCBvciB2aXNpdAorCSAgPGh0dHA6Ly9hY2wuYmVzdGJpdHMuYXQvPiBmb3IgZGV0YWlscykuCisKKwkgIElmIHVuc3VyZSwgc2F5IE4uCisKKwkgIFlvdSBuZWVkIHRoaXMgZm9yIFBPU0lYIEFDTCBzdXBwb3J0IG9uIGV4dDMuCisKK2NvbmZpZyBFWFQzX0ZTX1BPU0lYX0FDTAorCWJvb2wgIkV4dDMgUE9TSVggQWNjZXNzIENvbnRyb2wgTGlzdHMiCisJZGVwZW5kcyBvbiBFWFQzX0ZTX1hBVFRSCisJc2VsZWN0IEZTX1BPU0lYX0FDTAorCWhlbHAKKwkgIFBvc2l4IEFjY2VzcyBDb250cm9sIExpc3RzIChBQ0xzKSBzdXBwb3J0IHBlcm1pc3Npb25zIGZvciB1c2VycyBhbmQKKwkgIGdyb3VwcyBiZXlvbmQgdGhlIG93bmVyL2dyb3VwL3dvcmxkIHNjaGVtZS4KKworCSAgVG8gbGVhcm4gbW9yZSBhYm91dCBBY2Nlc3MgQ29udHJvbCBMaXN0cywgdmlzaXQgdGhlIFBvc2l4IEFDTHMgZm9yCisJICBMaW51eCB3ZWJzaXRlIDxodHRwOi8vYWNsLmJlc3RiaXRzLmF0Lz4uCisKKwkgIElmIHlvdSBkb24ndCBrbm93IHdoYXQgQWNjZXNzIENvbnRyb2wgTGlzdHMgYXJlLCBzYXkgTgorCitjb25maWcgRVhUM19GU19TRUNVUklUWQorCWJvb2wgIkV4dDMgU2VjdXJpdHkgTGFiZWxzIgorCWRlcGVuZHMgb24gRVhUM19GU19YQVRUUgorCWhlbHAKKwkgIFNlY3VyaXR5IGxhYmVscyBzdXBwb3J0IGFsdGVybmF0aXZlIGFjY2VzcyBjb250cm9sIG1vZGVscworCSAgaW1wbGVtZW50ZWQgYnkgc2VjdXJpdHkgbW9kdWxlcyBsaWtlIFNFTGludXguICBUaGlzIG9wdGlvbgorCSAgZW5hYmxlcyBhbiBleHRlbmRlZCBhdHRyaWJ1dGUgaGFuZGxlciBmb3IgZmlsZSBzZWN1cml0eQorCSAgbGFiZWxzIGluIHRoZSBleHQzIGZpbGVzeXN0ZW0uCisKKwkgIElmIHlvdSBhcmUgbm90IHVzaW5nIGEgc2VjdXJpdHkgbW9kdWxlIHRoYXQgcmVxdWlyZXMgdXNpbmcKKwkgIGV4dGVuZGVkIGF0dHJpYnV0ZXMgZm9yIGZpbGUgc2VjdXJpdHkgbGFiZWxzLCBzYXkgTi4KZGlmZiAtLWdpdCBhL2ZzL2V4dDMvYmFsbG9jLmMgYi9mcy9leHQzL2JhbGxvYy5jCmluZGV4IDkyZmQwMzMuLmY1YjU3YTIgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDMvYmFsbG9jLmMKKysrIGIvZnMvZXh0My9iYWxsb2MuYwpAQCAtMTU0Nyw2ICsxNTQ3LDcgQEAKIAkgKiB0dXJuIG9mZiByZXNlcnZhdGlvbiBmb3IgdGhpcyBhbGxvY2F0aW9uCiAJICovCiAJaWYgKG15X3JzdiAmJiAoZnJlZV9ibG9ja3MgPCB3aW5kb3dzeikKKwkJJiYgKGZyZWVfYmxvY2tzID4gMCkKIAkJJiYgKHJzdl9pc19lbXB0eSgmbXlfcnN2LT5yc3Zfd2luZG93KSkpCiAJCW15X3JzdiA9IE5VTEw7CiAKQEAgLTE1ODUsNyArMTU4Niw3IEBACiAJCSAqIGZyZWUgYmxvY2tzIGlzIGxlc3MgdGhhbiBoYWxmIG9mIHRoZSByZXNlcnZhdGlvbgogCQkgKiB3aW5kb3cgc2l6ZS4KIAkJICovCi0JCWlmIChmcmVlX2Jsb2NrcyA8PSAod2luZG93c3ovMikpCisJCWlmIChteV9yc3YgJiYgKGZyZWVfYmxvY2tzIDw9ICh3aW5kb3dzei8yKSkpCiAJCQljb250aW51ZTsKIAogCQlicmVsc2UoYml0bWFwX2JoKTsKZGlmZiAtLWdpdCBhL2ZzL2V4dDMvZGlyLmMgYi9mcy9leHQzL2Rpci5jCmluZGV4IDJlZWE5NmUuLjRjODI1MzEgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDMvZGlyLmMKKysrIGIvZnMvZXh0My9kaXIuYwpAQCAtMTAyLDYgKzEwMiw3IEBACiAJaW50IGVycjsKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlscC0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZTsKIAlpbnQgcmV0ID0gMDsKKwlpbnQgZGlyX2hhc19lcnJvciA9IDA7CiAKIAlzYiA9IGlub2RlLT5pX3NiOwogCkBAIC0xNDgsOSArMTQ5LDEyIEBACiAJCSAqIG9mIHJlY292ZXJpbmcgZGF0YSB3aGVuIHRoZXJlJ3MgYSBiYWQgc2VjdG9yCiAJCSAqLwogCQlpZiAoIWJoKSB7Ci0JCQlleHQzX2Vycm9yIChzYiwgImV4dDNfcmVhZGRpciIsCi0JCQkJImRpcmVjdG9yeSAjJWx1IGNvbnRhaW5zIGEgaG9sZSBhdCBvZmZzZXQgJWx1IiwKLQkJCQlpbm9kZS0+aV9pbm8sICh1bnNpZ25lZCBsb25nKWZpbHAtPmZfcG9zKTsKKwkJCWlmICghZGlyX2hhc19lcnJvcikgeworCQkJCWV4dDNfZXJyb3Ioc2IsIF9fZnVuY19fLCAiZGlyZWN0b3J5ICMlbHUgIgorCQkJCQkiY29udGFpbnMgYSBob2xlIGF0IG9mZnNldCAlbGxkIiwKKwkJCQkJaW5vZGUtPmlfaW5vLCBmaWxwLT5mX3Bvcyk7CisJCQkJZGlyX2hhc19lcnJvciA9IDE7CisJCQl9CiAJCQkvKiBjb3JydXB0IHNpemU/ICBNYXliZSBubyBtb3JlIGJsb2NrcyB0byByZWFkICovCiAJCQlpZiAoZmlscC0+Zl9wb3MgPiBpbm9kZS0+aV9ibG9ja3MgPDwgOSkKIAkJCQlicmVhazsKQEAgLTQxMCw3ICs0MTQsNyBAQAogCQkJCWdldF9kdHlwZShzYiwgZm5hbWUtPmZpbGVfdHlwZSkpOwogCQlpZiAoZXJyb3IpIHsKIAkJCWZpbHAtPmZfcG9zID0gY3Vycl9wb3M7Ci0JCQlpbmZvLT5leHRyYV9mbmFtZSA9IGZuYW1lLT5uZXh0OworCQkJaW5mby0+ZXh0cmFfZm5hbWUgPSBmbmFtZTsKIAkJCXJldHVybiBlcnJvcjsKIAkJfQogCQlmbmFtZSA9IGZuYW1lLT5uZXh0OwpAQCAtNDQ5LDExICs0NTMsMjEgQEAKIAkgKiBJZiB0aGVyZSBhcmUgYW55IGxlZnRvdmVyIG5hbWVzIG9uIHRoZSBoYXNoIGNvbGxpc2lvbgogCSAqIGNoYWluLCByZXR1cm4gdGhlbSBmaXJzdC4KIAkgKi8KLQlpZiAoaW5mby0+ZXh0cmFfZm5hbWUgJiYKLQkgICAgY2FsbF9maWxsZGlyKGZpbHAsIGRpcmVudCwgZmlsbGRpciwgaW5mby0+ZXh0cmFfZm5hbWUpKQotCQlnb3RvIGZpbmlzaGVkOworCWlmIChpbmZvLT5leHRyYV9mbmFtZSkgeworCQlpZiAoY2FsbF9maWxsZGlyKGZpbHAsIGRpcmVudCwgZmlsbGRpciwgaW5mby0+ZXh0cmFfZm5hbWUpKQorCQkJZ290byBmaW5pc2hlZDsKIAotCWlmICghaW5mby0+Y3Vycl9ub2RlKQorCQlpbmZvLT5leHRyYV9mbmFtZSA9IE5VTEw7CisJCWluZm8tPmN1cnJfbm9kZSA9IHJiX25leHQoaW5mby0+Y3Vycl9ub2RlKTsKKwkJaWYgKCFpbmZvLT5jdXJyX25vZGUpIHsKKwkJCWlmIChpbmZvLT5uZXh0X2hhc2ggPT0gfjApIHsKKwkJCQlmaWxwLT5mX3BvcyA9IEVYVDNfSFRSRUVfRU9GOworCQkJCWdvdG8gZmluaXNoZWQ7CisJCQl9CisJCQlpbmZvLT5jdXJyX2hhc2ggPSBpbmZvLT5uZXh0X2hhc2g7CisJCQlpbmZvLT5jdXJyX21pbm9yX2hhc2ggPSAwOworCQl9CisJfSBlbHNlIGlmICghaW5mby0+Y3Vycl9ub2RlKQogCQlpbmZvLT5jdXJyX25vZGUgPSByYl9maXJzdCgmaW5mby0+cm9vdCk7CiAKIAl3aGlsZSAoMSkgewpkaWZmIC0tZ2l0IGEvZnMvZXh0My9pbm9kZS5jIGIvZnMvZXh0My9pbm9kZS5jCmluZGV4IGViZmVjNGQuLmY4NDI0YWQgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDMvaW5vZGUuYworKysgYi9mcy9leHQzL2lub2RlLmMKQEAgLTExODYsNiArMTE4NiwxMyBAQAogCQlleHQzX2pvdXJuYWxfc3RvcChoYW5kbGUpOwogCQl1bmxvY2tfcGFnZShwYWdlKTsKIAkJcGFnZV9jYWNoZV9yZWxlYXNlKHBhZ2UpOworCQkvKgorCQkgKiBibG9ja193cml0ZV9iZWdpbiBtYXkgaGF2ZSBpbnN0YW50aWF0ZWQgYSBmZXcgYmxvY2tzCisJCSAqIG91dHNpZGUgaV9zaXplLiAgVHJpbSB0aGVzZSBvZmYgYWdhaW4uIERvbid0IG5lZWQKKwkJICogaV9zaXplX3JlYWQgYmVjYXVzZSB3ZSBob2xkIGlfbXV0ZXguCisJCSAqLworCQlpZiAocG9zICsgbGVuID4gaW5vZGUtPmlfc2l6ZSkKKwkJCXZtdHJ1bmNhdGUoaW5vZGUsIGlub2RlLT5pX3NpemUpOwogCX0KIAlpZiAocmV0ID09IC1FTk9TUEMgJiYgZXh0M19zaG91bGRfcmV0cnlfYWxsb2MoaW5vZGUtPmlfc2IsICZyZXRyaWVzKSkKIAkJZ290byByZXRyeTsKZGlmZiAtLWdpdCBhL2ZzL2V4dDMvcmVzaXplLmMgYi9mcy9leHQzL3Jlc2l6ZS5jCmluZGV4IDc3Mjc4ZTkuLjc4ZmRmMzggMTAwNjQ0Ci0tLSBhL2ZzL2V4dDMvcmVzaXplLmMKKysrIGIvZnMvZXh0My9yZXNpemUuYwpAQCAtNzkwLDcgKzc5MCw4IEBACiAKIAlpZiAocmVzZXJ2ZWRfZ2RiIHx8IGdkYl9vZmYgPT0gMCkgewogCQlpZiAoIUVYVDNfSEFTX0NPTVBBVF9GRUFUVVJFKHNiLAotCQkJCQkgICAgIEVYVDNfRkVBVFVSRV9DT01QQVRfUkVTSVpFX0lOT0RFKSl7CisJCQkJCSAgICAgRVhUM19GRUFUVVJFX0NPTVBBVF9SRVNJWkVfSU5PREUpCisJCSAgICB8fCAhbGUxNl90b19jcHUoZXMtPnNfcmVzZXJ2ZWRfZ2R0X2Jsb2NrcykpIHsKIAkJCWV4dDNfd2FybmluZyhzYiwgX19mdW5jX18sCiAJCQkJICAgICAiTm8gcmVzZXJ2ZWQgR0RUIGJsb2NrcywgY2FuJ3QgcmVzaXplIik7CiAJCQlyZXR1cm4gLUVQRVJNOwpkaWZmIC0tZ2l0IGEvZnMvZXh0My9zdXBlci5jIGIvZnMvZXh0My9zdXBlci5jCmluZGV4IGYzOGE1YWYuLjNhMjYwYWYgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDMvc3VwZXIuYworKysgYi9mcy9leHQzL3N1cGVyLmMKQEAgLTYyNSw2ICs2MjUsOSBAQAogCWVsc2UgaWYgKHRlc3Rfb3B0KHNiLCBEQVRBX0ZMQUdTKSA9PSBFWFQzX01PVU5UX1dSSVRFQkFDS19EQVRBKQogCQlzZXFfcHV0cyhzZXEsICIsZGF0YT13cml0ZWJhY2siKTsKIAorCWlmICh0ZXN0X29wdChzYiwgREFUQV9FUlJfQUJPUlQpKQorCQlzZXFfcHV0cyhzZXEsICIsZGF0YV9lcnI9YWJvcnQiKTsKKwogCWV4dDNfc2hvd19xdW90YV9vcHRpb25zKHNlcSwgc2IpOwogCiAJcmV0dXJuIDA7CkBAIC03NTQsMTMgKzc1NywxNCBAQAogCU9wdF9yZXNlcnZhdGlvbiwgT3B0X25vcmVzZXJ2YXRpb24sIE9wdF9ub2xvYWQsIE9wdF9ub2JoLCBPcHRfYmgsCiAJT3B0X2NvbW1pdCwgT3B0X2pvdXJuYWxfdXBkYXRlLCBPcHRfam91cm5hbF9pbnVtLCBPcHRfam91cm5hbF9kZXYsCiAJT3B0X2Fib3J0LCBPcHRfZGF0YV9qb3VybmFsLCBPcHRfZGF0YV9vcmRlcmVkLCBPcHRfZGF0YV93cml0ZWJhY2ssCisJT3B0X2RhdGFfZXJyX2Fib3J0LCBPcHRfZGF0YV9lcnJfaWdub3JlLAogCU9wdF91c3JqcXVvdGEsIE9wdF9ncnBqcXVvdGEsIE9wdF9vZmZ1c3JqcXVvdGEsIE9wdF9vZmZncnBqcXVvdGEsCiAJT3B0X2pxZm10X3Zmc29sZCwgT3B0X2pxZm10X3Zmc3YwLCBPcHRfcXVvdGEsIE9wdF9ub3F1b3RhLAogCU9wdF9pZ25vcmUsIE9wdF9iYXJyaWVyLCBPcHRfZXJyLCBPcHRfcmVzaXplLCBPcHRfdXNycXVvdGEsCiAJT3B0X2dycHF1b3RhCiB9OwogCi1zdGF0aWMgbWF0Y2hfdGFibGVfdCB0b2tlbnMgPSB7CitzdGF0aWMgY29uc3QgbWF0Y2hfdGFibGVfdCB0b2tlbnMgPSB7CiAJe09wdF9ic2RfZGYsICJic2RkZiJ9LAogCXtPcHRfbWluaXhfZGYsICJtaW5peGRmIn0sCiAJe09wdF9ncnBpZCwgImdycGlkIn0sCkBAIC03OTYsNiArODAwLDggQEAKIAl7T3B0X2RhdGFfam91cm5hbCwgImRhdGE9am91cm5hbCJ9LAogCXtPcHRfZGF0YV9vcmRlcmVkLCAiZGF0YT1vcmRlcmVkIn0sCiAJe09wdF9kYXRhX3dyaXRlYmFjaywgImRhdGE9d3JpdGViYWNrIn0sCisJe09wdF9kYXRhX2Vycl9hYm9ydCwgImRhdGFfZXJyPWFib3J0In0sCisJe09wdF9kYXRhX2Vycl9pZ25vcmUsICJkYXRhX2Vycj1pZ25vcmUifSwKIAl7T3B0X29mZnVzcmpxdW90YSwgInVzcmpxdW90YT0ifSwKIAl7T3B0X3VzcmpxdW90YSwgInVzcmpxdW90YT0lcyJ9LAogCXtPcHRfb2ZmZ3JwanF1b3RhLCAiZ3JwanF1b3RhPSJ9LApAQCAtMTAxMSw2ICsxMDE3LDEyIEBACiAJCQkJc2JpLT5zX21vdW50X29wdCB8PSBkYXRhX29wdDsKIAkJCX0KIAkJCWJyZWFrOworCQljYXNlIE9wdF9kYXRhX2Vycl9hYm9ydDoKKwkJCXNldF9vcHQoc2JpLT5zX21vdW50X29wdCwgREFUQV9FUlJfQUJPUlQpOworCQkJYnJlYWs7CisJCWNhc2UgT3B0X2RhdGFfZXJyX2lnbm9yZToKKwkJCWNsZWFyX29wdChzYmktPnNfbW91bnRfb3B0LCBEQVRBX0VSUl9BQk9SVCk7CisJCQlicmVhazsKICNpZmRlZiBDT05GSUdfUVVPVEEKIAkJY2FzZSBPcHRfdXNyanF1b3RhOgogCQkJcXR5cGUgPSBVU1JRVU9UQTsKQEAgLTE5ODYsNiArMTk5OCwxMCBAQAogCQlqb3VybmFsLT5qX2ZsYWdzIHw9IEpGU19CQVJSSUVSOwogCWVsc2UKIAkJam91cm5hbC0+al9mbGFncyAmPSB+SkZTX0JBUlJJRVI7CisJaWYgKHRlc3Rfb3B0KHNiLCBEQVRBX0VSUl9BQk9SVCkpCisJCWpvdXJuYWwtPmpfZmxhZ3MgfD0gSkZTX0FCT1JUX09OX1NZTkNEQVRBX0VSUjsKKwllbHNlCisJCWpvdXJuYWwtPmpfZmxhZ3MgJj0gfkpGU19BQk9SVF9PTl9TWU5DREFUQV9FUlI7CiAJc3Bpbl91bmxvY2soJmpvdXJuYWwtPmpfc3RhdGVfbG9jayk7CiB9CiAKZGlmZiAtLWdpdCBhL2ZzL2V4dDQvS2NvbmZpZyBiL2ZzL2V4dDQvS2NvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NTA1NDgyCi0tLSAvZGV2L251bGwKKysrIGIvZnMvZXh0NC9LY29uZmlnCkBAIC0wLDAgKzEsNzkgQEAKK2NvbmZpZyBFWFQ0X0ZTCisJdHJpc3RhdGUgIlRoZSBFeHRlbmRlZCA0IChleHQ0KSBmaWxlc3lzdGVtIgorCXNlbGVjdCBKQkQyCisJc2VsZWN0IENSQzE2CisJaGVscAorCSAgVGhpcyBpcyB0aGUgbmV4dCBnZW5lcmF0aW9uIG9mIHRoZSBleHQzIGZpbGVzeXN0ZW0uCisKKwkgIFVubGlrZSB0aGUgY2hhbmdlIGZyb20gZXh0MiBmaWxlc3lzdGVtIHRvIGV4dDMgZmlsZXN5c3RlbSwKKwkgIHRoZSBvbi1kaXNrIGZvcm1hdCBvZiBleHQ0IGlzIG5vdCBmb3J3YXJkcyBjb21wYXRpYmxlIHdpdGgKKwkgIGV4dDM7IGl0IGlzIGJhc2VkIG9uIGV4dGVudCBtYXBzIGFuZCBpdCBzdXBwb3J0cyA0OC1iaXQKKwkgIHBoeXNpY2FsIGJsb2NrIG51bWJlcnMuICBUaGUgZXh0NCBmaWxlc3lzdGVtIGFsc28gc3VwcG9ydHMgZGVsYXllZAorCSAgYWxsb2NhdGlvbiwgcGVyc2lzdGVudCBwcmVhbGxvY2F0aW9uLCBoaWdoIHJlc29sdXRpb24gdGltZSBzdGFtcHMsCisJICBhbmQgYSBudW1iZXIgb2Ygb3RoZXIgZmVhdHVyZXMgdG8gaW1wcm92ZSBwZXJmb3JtYW5jZSBhbmQgc3BlZWQKKwkgIHVwIGZzY2sgdGltZS4gIEZvciBtb3JlIGluZm9ybWF0aW9uLCBwbGVhc2Ugc2VlIHRoZSB3ZWIgcGFnZXMgYXQKKwkgIGh0dHA6Ly9leHQ0Lndpa2kua2VybmVsLm9yZy4KKworCSAgVGhlIGV4dDQgZmlsZXN5c3RlbSB3aWxsIHN1cHBvcnQgbW91bnRpbmcgYW4gZXh0MworCSAgZmlsZXN5c3RlbTsgd2hpbGUgdGhlcmUgd2lsbCBiZSBzb21lIHBlcmZvcm1hbmNlIGdhaW5zIGZyb20KKwkgIHRoZSBkZWxheWVkIGFsbG9jYXRpb24gYW5kIGlub2RlIHRhYmxlIHJlYWRhaGVhZCwgdGhlIGJlc3QKKwkgIHBlcmZvcm1hbmNlIGdhaW5zIHdpbGwgcmVxdWlyZSBlbmFibGluZyBleHQ0IGZlYXR1cmVzIGluIHRoZQorCSAgZmlsZXN5c3RlbSwgb3IgZm9ybWF0aW5nIGEgbmV3IGZpbGVzeXN0ZW0gYXMgYW4gZXh0NAorCSAgZmlsZXN5c3RlbSBpbml0aWFsbHkuCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBmaWxlIHN5c3RlbSBzdXBwb3J0IGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiBUaGUKKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBleHQ0LgorCisJICBJZiB1bnN1cmUsIHNheSBOLgorCitjb25maWcgRVhUNERFVl9DT01QQVQKKwlib29sICJFbmFibGUgZXh0NGRldiBjb21wYXRpYmlsaXR5IgorCWRlcGVuZHMgb24gRVhUNF9GUworCWhlbHAKKwkgIFN0YXJ0aW5nIHdpdGggMi42LjI4LCB0aGUgbmFtZSBvZiB0aGUgZXh0NCBmaWxlc3lzdGVtIHdhcworCSAgcmVuYW1lZCBmcm9tIGV4dDRkZXYgdG8gZXh0NC4gIFVuZm9ydHVuYXRlbHkgdGhlcmUgYXJlIHNvbWUKKwkgIGxlZ2FjeSB1c2Vyc3BhY2UgcHJvZ3JhbXMgKHN1Y2ggYXMga2xpYmMncyBmc3R5cGUpIGhhdmUKKwkgICJleHQ0ZGV2IiBoYXJkY29kZWQuCisKKwkgIFRvIGVuYWJsZSBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSBzbyB0aGF0IHN5c3RlbXMgdGhhdCBhcmUKKwkgIHN0aWxsIGV4cGVjdGluZyB0byBtb3VudCBleHQ0IGZpbGVzeXN0ZW1zIHVzaW5nIGV4dDRkZXYsCisJICBjaG9zZSBZIGhlcmUuICAgVGhpcyBmZWF0dXJlIHdpbGwgZ28gYXdheSBieSAyLjYuMzEsIHNvCisJICBwbGVhc2UgYXJyYW5nZSB0byBnZXQgeW91ciB1c2Vyc3BhY2UgcHJvZ3JhbXMgZml4ZWQhCisKK2NvbmZpZyBFWFQ0X0ZTX1hBVFRSCisJYm9vbCAiRXh0NCBleHRlbmRlZCBhdHRyaWJ1dGVzIgorCWRlcGVuZHMgb24gRVhUNF9GUworCWRlZmF1bHQgeQorCWhlbHAKKwkgIEV4dGVuZGVkIGF0dHJpYnV0ZXMgYXJlIG5hbWU6dmFsdWUgcGFpcnMgYXNzb2NpYXRlZCB3aXRoIGlub2RlcyBieQorCSAgdGhlIGtlcm5lbCBvciBieSB1c2VycyAoc2VlIHRoZSBhdHRyKDUpIG1hbnVhbCBwYWdlLCBvciB2aXNpdAorCSAgPGh0dHA6Ly9hY2wuYmVzdGJpdHMuYXQvPiBmb3IgZGV0YWlscykuCisKKwkgIElmIHVuc3VyZSwgc2F5IE4uCisKKwkgIFlvdSBuZWVkIHRoaXMgZm9yIFBPU0lYIEFDTCBzdXBwb3J0IG9uIGV4dDQuCisKK2NvbmZpZyBFWFQ0X0ZTX1BPU0lYX0FDTAorCWJvb2wgIkV4dDQgUE9TSVggQWNjZXNzIENvbnRyb2wgTGlzdHMiCisJZGVwZW5kcyBvbiBFWFQ0X0ZTX1hBVFRSCisJc2VsZWN0IEZTX1BPU0lYX0FDTAorCWhlbHAKKwkgIFBPU0lYIEFjY2VzcyBDb250cm9sIExpc3RzIChBQ0xzKSBzdXBwb3J0IHBlcm1pc3Npb25zIGZvciB1c2VycyBhbmQKKwkgIGdyb3VwcyBiZXlvbmQgdGhlIG93bmVyL2dyb3VwL3dvcmxkIHNjaGVtZS4KKworCSAgVG8gbGVhcm4gbW9yZSBhYm91dCBBY2Nlc3MgQ29udHJvbCBMaXN0cywgdmlzaXQgdGhlIFBPU0lYIEFDTHMgZm9yCisJICBMaW51eCB3ZWJzaXRlIDxodHRwOi8vYWNsLmJlc3RiaXRzLmF0Lz4uCisKKwkgIElmIHlvdSBkb24ndCBrbm93IHdoYXQgQWNjZXNzIENvbnRyb2wgTGlzdHMgYXJlLCBzYXkgTgorCitjb25maWcgRVhUNF9GU19TRUNVUklUWQorCWJvb2wgIkV4dDQgU2VjdXJpdHkgTGFiZWxzIgorCWRlcGVuZHMgb24gRVhUNF9GU19YQVRUUgorCWhlbHAKKwkgIFNlY3VyaXR5IGxhYmVscyBzdXBwb3J0IGFsdGVybmF0aXZlIGFjY2VzcyBjb250cm9sIG1vZGVscworCSAgaW1wbGVtZW50ZWQgYnkgc2VjdXJpdHkgbW9kdWxlcyBsaWtlIFNFTGludXguICBUaGlzIG9wdGlvbgorCSAgZW5hYmxlcyBhbiBleHRlbmRlZCBhdHRyaWJ1dGUgaGFuZGxlciBmb3IgZmlsZSBzZWN1cml0eQorCSAgbGFiZWxzIGluIHRoZSBleHQ0IGZpbGVzeXN0ZW0uCisKKwkgIElmIHlvdSBhcmUgbm90IHVzaW5nIGEgc2VjdXJpdHkgbW9kdWxlIHRoYXQgcmVxdWlyZXMgdXNpbmcKKwkgIGV4dGVuZGVkIGF0dHJpYnV0ZXMgZm9yIGZpbGUgc2VjdXJpdHkgbGFiZWxzLCBzYXkgTi4KZGlmZiAtLWdpdCBhL2ZzL2V4dDQvYmFsbG9jLmMgYi9mcy9leHQ0L2JhbGxvYy5jCmluZGV4IGJkMmVjZTIuLmI5ODIxYmUgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDQvYmFsbG9jLmMKKysrIGIvZnMvZXh0NC9iYWxsb2MuYwpAQCAtNTY4LDggKzU2OCwxNiBAQAogCiAJLyogdGhpcyBpc24ndCB0aGUgcmlnaHQgcGxhY2UgdG8gZGVjaWRlIHdoZXRoZXIgYmxvY2sgaXMgbWV0YWRhdGEKIAkgKiBpbm9kZS5jL2V4dGVudHMuYyBrbm93cyBiZXR0ZXIsIGJ1dCBmb3Igc2FmZXR5IC4uLiAqLwotCWlmIChTX0lTRElSKGlub2RlLT5pX21vZGUpIHx8IFNfSVNMTksoaW5vZGUtPmlfbW9kZSkgfHwKLQkJCWV4dDRfc2hvdWxkX2pvdXJuYWxfZGF0YShpbm9kZSkpCisJaWYgKFNfSVNESVIoaW5vZGUtPmlfbW9kZSkgfHwgU19JU0xOSyhpbm9kZS0+aV9tb2RlKSkKKwkJbWV0YWRhdGEgPSAxOworCisJLyogV2UgbmVlZCB0byBtYWtlIHN1cmUgd2UgZG9uJ3QgcmV1c2UKKwkgKiBibG9jayByZWxlYXNlZCB1bnRpbGwgdGhlIHRyYW5zYWN0aW9uIGNvbW1pdC4KKwkgKiB3cml0ZWJhY2sgbW9kZSBoYXZlIHdlYWsgZGF0YSBjb25zaXN0ZW5jeSBzbworCSAqIGRvbid0IGZvcmNlIGRhdGEgYXMgbWV0YWRhdGEgd2hlbiBmcmVlaW5nIGJsb2NrCisJICogZm9yIHdyaXRlYmFjayBtb2RlLgorCSAqLworCWlmIChtZXRhZGF0YSA9PSAwICYmICFleHQ0X3Nob3VsZF93cml0ZWJhY2tfZGF0YShpbm9kZSkpCiAJCW1ldGFkYXRhID0gMTsKIAogCXNiID0gaW5vZGUtPmlfc2I7CmRpZmYgLS1naXQgYS9mcy9leHQ0L2V4dDQuaCBiL2ZzL2V4dDQvZXh0NC5oCmluZGV4IDY2OTBhNDEuLjQ4ODBjYzMgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDQvZXh0NC5oCisrKyBiL2ZzL2V4dDQvZXh0NC5oCkBAIC01MTEsNyArNTExLDYgQEAKIC8qCiAgKiBNb3VudCBmbGFncwogICovCi0jZGVmaW5lIEVYVDRfTU9VTlRfQ0hFQ0sJCTB4MDAwMDEJLyogRG8gbW91bnQtdGltZSBjaGVja3MgKi8KICNkZWZpbmUgRVhUNF9NT1VOVF9PTERBTExPQwkJMHgwMDAwMiAgLyogRG9uJ3QgdXNlIHRoZSBuZXcgT3Jsb3YgYWxsb2NhdG9yICovCiAjZGVmaW5lIEVYVDRfTU9VTlRfR1JQSUQJCTB4MDAwMDQJLyogQ3JlYXRlIGZpbGVzIHdpdGggZGlyZWN0b3J5J3MgZ3JvdXAgKi8KICNkZWZpbmUgRVhUNF9NT1VOVF9ERUJVRwkJMHgwMDAwOAkvKiBTb21lIGRlYnVnZ2luZyBtZXNzYWdlcyAqLwpkaWZmIC0tZ2l0IGEvZnMvZXh0NC9leHQ0X3NiLmggYi9mcy9leHQ0L2V4dDRfc2IuaAppbmRleCA2YTBiNDBkLi40NDVmZGU2IDEwMDY0NAotLS0gYS9mcy9leHQ0L2V4dDRfc2IuaAorKysgYi9mcy9leHQ0L2V4dDRfc2IuaApAQCAtOTksOSArOTksNiBAQAogCXN0cnVjdCBpbm9kZSAqc19idWRkeV9jYWNoZTsKIAlsb25nIHNfYmxvY2tzX3Jlc2VydmVkOwogCXNwaW5sb2NrX3Qgc19yZXNlcnZlX2xvY2s7Ci0Jc3RydWN0IGxpc3RfaGVhZCBzX2FjdGl2ZV90cmFuc2FjdGlvbjsKLQlzdHJ1Y3QgbGlzdF9oZWFkIHNfY2xvc2VkX3RyYW5zYWN0aW9uOwotCXN0cnVjdCBsaXN0X2hlYWQgc19jb21taXR0ZWRfdHJhbnNhY3Rpb247CiAJc3BpbmxvY2tfdCBzX21kX2xvY2s7CiAJdGlkX3Qgc19sYXN0X3RyYW5zYWN0aW9uOwogCXVuc2lnbmVkIHNob3J0ICpzX21iX29mZnNldHMsICpzX21iX21heHM7CmRpZmYgLS1naXQgYS9mcy9leHQ0L2lub2RlLmMgYi9mcy9leHQ0L2lub2RlLmMKaW5kZXggOWI0ZWM5ZC4uOGRiZjY5NSAxMDA2NDQKLS0tIGEvZnMvZXh0NC9pbm9kZS5jCisrKyBiL2ZzL2V4dDQvaW5vZGUuYwpAQCAtMTY0OCw2ICsxNjQ4LDcgQEAKIAlpbnQgcmV0ID0gMCwgZXJyLCBucl9wYWdlcywgaTsKIAl1bnNpZ25lZCBsb25nIGluZGV4LCBlbmQ7CiAJc3RydWN0IHBhZ2V2ZWMgcHZlYzsKKwlsb25nIHBhZ2VzX3NraXBwZWQ7CiAKIAlCVUdfT04obXBkLT5uZXh0X3BhZ2UgPD0gbXBkLT5maXJzdF9wYWdlKTsKIAlwYWdldmVjX2luaXQoJnB2ZWMsIDApOwpAQCAtMTY1NSwyMCArMTY1NiwzMCBAQAogCWVuZCA9IG1wZC0+bmV4dF9wYWdlIC0gMTsKIAogCXdoaWxlIChpbmRleCA8PSBlbmQpIHsKLQkJLyogWFhYOiBvcHRpbWl6ZSB0YWlsICovCi0JCW5yX3BhZ2VzID0gcGFnZXZlY19sb29rdXAoJnB2ZWMsIG1hcHBpbmcsIGluZGV4LCBQQUdFVkVDX1NJWkUpOworCQkvKgorCQkgKiBXZSBjYW4gdXNlIFBBR0VDQUNIRV9UQUdfRElSVFkgbG9va3VwIGhlcmUgYmVjYXVzZQorCQkgKiBldmVuIHRob3VnaCB3ZSBoYXZlIGNsZWFyZWQgdGhlIGRpcnR5IGZsYWcgb24gdGhlIHBhZ2UKKwkJICogV2Ugc3RpbGwga2VlcCB0aGUgcGFnZSBpbiB0aGUgcmFkaXggdHJlZSB3aXRoIHRhZworCQkgKiBQQUdFQ0FDSEVfVEFHX0RJUlRZLiBTZWUgY2xlYXJfcGFnZV9kaXJ0eV9mb3JfaW8uCisJCSAqIFRoZSBQQUdFQ0FDSEVfVEFHX0RJUlRZIGlzIGNsZWFyZWQgaW4gc2V0X3BhZ2Vfd3JpdGViYWNrCisJCSAqIHdoaWNoIGlzIGNhbGxlZCB2aWEgdGhlIGJlbG93IHdyaXRlcGFnZSBjYWxsYmFjay4KKwkJICovCisJCW5yX3BhZ2VzID0gcGFnZXZlY19sb29rdXBfdGFnKCZwdmVjLCBtYXBwaW5nLCAmaW5kZXgsCisJCQkJCVBBR0VDQUNIRV9UQUdfRElSVFksCisJCQkJCW1pbihlbmQgLSBpbmRleCwKKwkJCQkJKHBnb2ZmX3QpUEFHRVZFQ19TSVpFLTEpICsgMSk7CiAJCWlmIChucl9wYWdlcyA9PSAwKQogCQkJYnJlYWs7CiAJCWZvciAoaSA9IDA7IGkgPCBucl9wYWdlczsgaSsrKSB7CiAJCQlzdHJ1Y3QgcGFnZSAqcGFnZSA9IHB2ZWMucGFnZXNbaV07CiAKLQkJCWluZGV4ID0gcGFnZS0+aW5kZXg7Ci0JCQlpZiAoaW5kZXggPiBlbmQpCi0JCQkJYnJlYWs7Ci0JCQlpbmRleCsrOwotCisJCQlwYWdlc19za2lwcGVkID0gbXBkLT53YmMtPnBhZ2VzX3NraXBwZWQ7CiAJCQllcnIgPSBtYXBwaW5nLT5hX29wcy0+d3JpdGVwYWdlKHBhZ2UsIG1wZC0+d2JjKTsKLQkJCWlmICghZXJyKQorCQkJaWYgKCFlcnIgJiYgKHBhZ2VzX3NraXBwZWQgPT0gbXBkLT53YmMtPnBhZ2VzX3NraXBwZWQpKQorCQkJCS8qCisJCQkJICogaGF2ZSBzdWNjZXNzZnVsbHkgd3JpdHRlbiB0aGUgcGFnZQorCQkJCSAqIHdpdGhvdXQgc2tpcHBpbmcgdGhlIHNhbWUKKwkJCQkgKi8KIAkJCQltcGQtPnBhZ2VzX3dyaXR0ZW4rKzsKIAkJCS8qCiAJCQkgKiBJbiBlcnJvciBjYXNlLCB3ZSBoYXZlIHRvIGNvbnRpbnVlIGJlY2F1c2UKQEAgLTIxMDQsNyArMjExNSw2IEBACiAJCQkgICAgICAgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMsCiAJCQkgICAgICAgc3RydWN0IG1wYWdlX2RhX2RhdGEgKm1wZCkKIHsKLQlsb25nIHRvX3dyaXRlOwogCWludCByZXQ7CiAKIAlpZiAoIW1wZC0+Z2V0X2Jsb2NrKQpAQCAtMjExOSwxOSArMjEyOSwxOCBAQAogCW1wZC0+cGFnZXNfd3JpdHRlbiA9IDA7CiAJbXBkLT5yZXR2YWwgPSAwOwogCi0JdG9fd3JpdGUgPSB3YmMtPm5yX3RvX3dyaXRlOwotCiAJcmV0ID0gd3JpdGVfY2FjaGVfcGFnZXMobWFwcGluZywgd2JjLCBfX21wYWdlX2RhX3dyaXRlcGFnZSwgbXBkKTsKLQogCS8qCiAJICogSGFuZGxlIGxhc3QgZXh0ZW50IG9mIHBhZ2VzCiAJICovCiAJaWYgKCFtcGQtPmlvX2RvbmUgJiYgbXBkLT5uZXh0X3BhZ2UgIT0gbXBkLT5maXJzdF9wYWdlKSB7CiAJCWlmIChtcGFnZV9kYV9tYXBfYmxvY2tzKG1wZCkgPT0gMCkKIAkJCW1wYWdlX2RhX3N1Ym1pdF9pbyhtcGQpOwotCX0KIAotCXdiYy0+bnJfdG9fd3JpdGUgPSB0b193cml0ZSAtIG1wZC0+cGFnZXNfd3JpdHRlbjsKKwkJbXBkLT5pb19kb25lID0gMTsKKwkJcmV0ID0gTVBBR0VfREFfRVhURU5UX1RBSUw7CisJfQorCXdiYy0+bnJfdG9fd3JpdGUgLT0gbXBkLT5wYWdlc193cml0dGVuOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTIzNjAsMTIgKzIzNjksMTQgQEAKIHN0YXRpYyBpbnQgZXh0NF9kYV93cml0ZXBhZ2VzKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLAogCQkJICAgICAgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpCiB7CisJcGdvZmZfdAlpbmRleDsKKwlpbnQgcmFuZ2Vfd2hvbGUgPSAwOwogCWhhbmRsZV90ICpoYW5kbGUgPSBOVUxMOwotCWxvZmZfdCByYW5nZV9zdGFydCA9IDA7CiAJc3RydWN0IG1wYWdlX2RhX2RhdGEgbXBkOwogCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBtYXBwaW5nLT5ob3N0OworCWludCBub19ucndyaXRlX2luZGV4X3VwZGF0ZTsKKwlsb25nIHBhZ2VzX3dyaXR0ZW4gPSAwLCBwYWdlc19za2lwcGVkOwogCWludCBuZWVkZWRfYmxvY2tzLCByZXQgPSAwLCBucl90b193cml0ZWJ1bXAgPSAwOwotCWxvbmcgdG9fd3JpdGUsIHBhZ2VzX3NraXBwZWQgPSAwOwogCXN0cnVjdCBleHQ0X3NiX2luZm8gKnNiaSA9IEVYVDRfU0IobWFwcGluZy0+aG9zdC0+aV9zYik7CiAKIAkvKgpAQCAtMjM4NSwyMyArMjM5NiwyNiBAQAogCQlucl90b193cml0ZWJ1bXAgPSBzYmktPnNfbWJfc3RyZWFtX3JlcXVlc3QgLSB3YmMtPm5yX3RvX3dyaXRlOwogCQl3YmMtPm5yX3RvX3dyaXRlID0gc2JpLT5zX21iX3N0cmVhbV9yZXF1ZXN0OwogCX0KKwlpZiAod2JjLT5yYW5nZV9zdGFydCA9PSAwICYmIHdiYy0+cmFuZ2VfZW5kID09IExMT05HX01BWCkKKwkJcmFuZ2Vfd2hvbGUgPSAxOwogCi0JaWYgKCF3YmMtPnJhbmdlX2N5Y2xpYykKLQkJLyoKLQkJICogSWYgcmFuZ2VfY3ljbGljIGlzIG5vdCBzZXQgZm9yY2UgcmFuZ2VfY29udAotCQkgKiBhbmQgc2F2ZSB0aGUgb2xkIHdyaXRlYmFja19pbmRleAotCQkgKi8KLQkJd2JjLT5yYW5nZV9jb250ID0gMTsKLQotCXJhbmdlX3N0YXJ0ID0gIHdiYy0+cmFuZ2Vfc3RhcnQ7Ci0JcGFnZXNfc2tpcHBlZCA9IHdiYy0+cGFnZXNfc2tpcHBlZDsKKwlpZiAod2JjLT5yYW5nZV9jeWNsaWMpCisJCWluZGV4ID0gbWFwcGluZy0+d3JpdGViYWNrX2luZGV4OworCWVsc2UKKwkJaW5kZXggPSB3YmMtPnJhbmdlX3N0YXJ0ID4+IFBBR0VfQ0FDSEVfU0hJRlQ7CiAKIAltcGQud2JjID0gd2JjOwogCW1wZC5pbm9kZSA9IG1hcHBpbmctPmhvc3Q7CiAKLXJlc3RhcnRfbG9vcDoKLQl0b193cml0ZSA9IHdiYy0+bnJfdG9fd3JpdGU7Ci0Jd2hpbGUgKCFyZXQgJiYgdG9fd3JpdGUgPiAwKSB7CisJLyoKKwkgKiB3ZSBkb24ndCB3YW50IHdyaXRlX2NhY2hlX3BhZ2VzIHRvIHVwZGF0ZQorCSAqIG5yX3RvX3dyaXRlIGFuZCB3cml0ZWJhY2tfaW5kZXgKKwkgKi8KKwlub19ucndyaXRlX2luZGV4X3VwZGF0ZSA9IHdiYy0+bm9fbnJ3cml0ZV9pbmRleF91cGRhdGU7CisJd2JjLT5ub19ucndyaXRlX2luZGV4X3VwZGF0ZSA9IDE7CisJcGFnZXNfc2tpcHBlZCA9IHdiYy0+cGFnZXNfc2tpcHBlZDsKKworCXdoaWxlICghcmV0ICYmIHdiYy0+bnJfdG9fd3JpdGUgPiAwKSB7CiAKIAkJLyoKIAkJICogd2UgIGluc2VydCBvbmUgZXh0ZW50IGF0IGEgdGltZS4gU28gd2UgbmVlZApAQCAtMjQyMiw0OCArMjQzNiw1MyBAQAogCQkJZHVtcF9zdGFjaygpOwogCQkJZ290byBvdXRfd3JpdGVwYWdlczsKIAkJfQotCQl0b193cml0ZSAtPSB3YmMtPm5yX3RvX3dyaXRlOwotCiAJCW1wZC5nZXRfYmxvY2sgPSBleHQ0X2RhX2dldF9ibG9ja193cml0ZTsKIAkJcmV0ID0gbXBhZ2VfZGFfd3JpdGVwYWdlcyhtYXBwaW5nLCB3YmMsICZtcGQpOwogCiAJCWV4dDRfam91cm5hbF9zdG9wKGhhbmRsZSk7CiAKLQkJaWYgKG1wZC5yZXR2YWwgPT0gLUVOT1NQQykKKwkJaWYgKG1wZC5yZXR2YWwgPT0gLUVOT1NQQykgeworCQkJLyogY29tbWl0IHRoZSB0cmFuc2FjdGlvbiB3aGljaCB3b3VsZAorCQkJICogZnJlZSBibG9ja3MgcmVsZWFzZWQgaW4gdGhlIHRyYW5zYWN0aW9uCisJCQkgKiBhbmQgdHJ5IGFnYWluCisJCQkgKi8KIAkJCWpiZDJfam91cm5hbF9mb3JjZV9jb21taXRfbmVzdGVkKHNiaS0+c19qb3VybmFsKTsKLQotCQkvKiByZXNldCB0aGUgcmV0cnkgY291bnQgKi8KLQkJaWYgKHJldCA9PSBNUEFHRV9EQV9FWFRFTlRfVEFJTCkgeworCQkJd2JjLT5wYWdlc19za2lwcGVkID0gcGFnZXNfc2tpcHBlZDsKKwkJCXJldCA9IDA7CisJCX0gZWxzZSBpZiAocmV0ID09IE1QQUdFX0RBX0VYVEVOVF9UQUlMKSB7CiAJCQkvKgogCQkJICogZ290IG9uZSBleHRlbnQgbm93IHRyeSB3aXRoCiAJCQkgKiByZXN0IG9mIHRoZSBwYWdlcwogCQkJICovCi0JCQl0b193cml0ZSArPSB3YmMtPm5yX3RvX3dyaXRlOworCQkJcGFnZXNfd3JpdHRlbiArPSBtcGQucGFnZXNfd3JpdHRlbjsKKwkJCXdiYy0+cGFnZXNfc2tpcHBlZCA9IHBhZ2VzX3NraXBwZWQ7CiAJCQlyZXQgPSAwOwotCQl9IGVsc2UgaWYgKHdiYy0+bnJfdG9fd3JpdGUpIHsKKwkJfSBlbHNlIGlmICh3YmMtPm5yX3RvX3dyaXRlKQogCQkJLyoKIAkJCSAqIFRoZXJlIGlzIG5vIG1vcmUgd3JpdGVvdXQgbmVlZGVkCiAJCQkgKiBvciB3ZSByZXF1ZXN0ZWQgZm9yIGEgbm9ibG9ja2luZyB3cml0ZW91dAogCQkJICogYW5kIHdlIGZvdW5kIHRoZSBkZXZpY2UgY29uZ2VzdGVkCiAJCQkgKi8KLQkJCXRvX3dyaXRlICs9IHdiYy0+bnJfdG9fd3JpdGU7CiAJCQlicmVhazsKLQkJfQotCQl3YmMtPm5yX3RvX3dyaXRlID0gdG9fd3JpdGU7CiAJfQorCWlmIChwYWdlc19za2lwcGVkICE9IHdiYy0+cGFnZXNfc2tpcHBlZCkKKwkJcHJpbnRrKEtFUk5fRU1FUkcgIlRoaXMgc2hvdWxkIG5vdCBoYXBwZW4gbGVhdmluZyAlcyAiCisJCQkJIndpdGggbnJfdG9fd3JpdGUgPSAlbGQgcmV0ID0gJWRcbiIsCisJCQkJX19mdW5jX18sIHdiYy0+bnJfdG9fd3JpdGUsIHJldCk7CiAKLQlpZiAod2JjLT5yYW5nZV9jb250ICYmIChwYWdlc19za2lwcGVkICE9IHdiYy0+cGFnZXNfc2tpcHBlZCkpIHsKLQkJLyogV2Ugc2tpcHBlZCBwYWdlcyBpbiB0aGlzIGxvb3AgKi8KLQkJd2JjLT5yYW5nZV9zdGFydCA9IHJhbmdlX3N0YXJ0OwotCQl3YmMtPm5yX3RvX3dyaXRlID0gdG9fd3JpdGUgKwotCQkJCXdiYy0+cGFnZXNfc2tpcHBlZCAtIHBhZ2VzX3NraXBwZWQ7Ci0JCXdiYy0+cGFnZXNfc2tpcHBlZCA9IHBhZ2VzX3NraXBwZWQ7Ci0JCWdvdG8gcmVzdGFydF9sb29wOwotCX0KKwkvKiBVcGRhdGUgaW5kZXggKi8KKwlpbmRleCArPSBwYWdlc193cml0dGVuOworCWlmICh3YmMtPnJhbmdlX2N5Y2xpYyB8fCAocmFuZ2Vfd2hvbGUgJiYgd2JjLT5ucl90b193cml0ZSA+IDApKQorCQkvKgorCQkgKiBzZXQgdGhlIHdyaXRlYmFja19pbmRleCBzbyB0aGF0IHJhbmdlX2N5Y2xpYworCQkgKiBtb2RlIHdpbGwgd3JpdGUgaXQgYmFjayBsYXRlcgorCQkgKi8KKwkJbWFwcGluZy0+d3JpdGViYWNrX2luZGV4ID0gaW5kZXg7CiAKIG91dF93cml0ZXBhZ2VzOgotCXdiYy0+bnJfdG9fd3JpdGUgPSB0b193cml0ZSAtIG5yX3RvX3dyaXRlYnVtcDsKLQl3YmMtPnJhbmdlX3N0YXJ0ID0gcmFuZ2Vfc3RhcnQ7CisJaWYgKCFub19ucndyaXRlX2luZGV4X3VwZGF0ZSkKKwkJd2JjLT5ub19ucndyaXRlX2luZGV4X3VwZGF0ZSA9IDA7CisJd2JjLT5ucl90b193cml0ZSAtPSBucl90b193cml0ZWJ1bXA7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtNDE3NSw3ICs0MTk0LDYgQEAKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gJihlaS0+dmZzX2lub2RlKTsKIAl1NjQgaV9ibG9ja3MgPSBpbm9kZS0+aV9ibG9ja3M7CiAJc3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGlub2RlLT5pX3NiOwotCWludCBlcnIgPSAwOwogCiAJaWYgKGlfYmxvY2tzIDw9IH4wVSkgewogCQkvKgpAQCAtNDE4NSwzNiArNDIwMywyNyBAQAogCQlyYXdfaW5vZGUtPmlfYmxvY2tzX2xvICAgPSBjcHVfdG9fbGUzMihpX2Jsb2Nrcyk7CiAJCXJhd19pbm9kZS0+aV9ibG9ja3NfaGlnaCA9IDA7CiAJCWVpLT5pX2ZsYWdzICY9IH5FWFQ0X0hVR0VfRklMRV9GTDsKLQl9IGVsc2UgaWYgKGlfYmxvY2tzIDw9IDB4ZmZmZmZmZmZmZmZmVUxMKSB7CisJCXJldHVybiAwOworCX0KKwlpZiAoIUVYVDRfSEFTX1JPX0NPTVBBVF9GRUFUVVJFKHNiLCBFWFQ0X0ZFQVRVUkVfUk9fQ09NUEFUX0hVR0VfRklMRSkpCisJCXJldHVybiAtRUZCSUc7CisKKwlpZiAoaV9ibG9ja3MgPD0gMHhmZmZmZmZmZmZmZmZVTEwpIHsKIAkJLyoKIAkJICogaV9ibG9ja3MgY2FuIGJlIHJlcHJlc2VudGVkIGluIGEgNDggYml0IHZhcmlhYmxlCiAJCSAqIGFzIG11bHRpcGxlIG9mIDUxMiBieXRlcwogCQkgKi8KLQkJZXJyID0gZXh0NF91cGRhdGVfcm9jb21wYXRfZmVhdHVyZShoYW5kbGUsIHNiLAotCQkJCQkgICAgRVhUNF9GRUFUVVJFX1JPX0NPTVBBVF9IVUdFX0ZJTEUpOwotCQlpZiAoZXJyKQotCQkJZ290byAgZXJyX291dDsKLQkJLyogaV9ibG9jayBpcyBzdG9yZWQgaW4gdGhlIHNwbGl0ICA0OCBiaXQgZmllbGRzICovCiAJCXJhd19pbm9kZS0+aV9ibG9ja3NfbG8gICA9IGNwdV90b19sZTMyKGlfYmxvY2tzKTsKIAkJcmF3X2lub2RlLT5pX2Jsb2Nrc19oaWdoID0gY3B1X3RvX2xlMTYoaV9ibG9ja3MgPj4gMzIpOwogCQllaS0+aV9mbGFncyAmPSB+RVhUNF9IVUdFX0ZJTEVfRkw7CiAJfSBlbHNlIHsKLQkJLyoKLQkJICogaV9ibG9ja3Mgc2hvdWxkIGJlIHJlcHJlc2VudGVkIGluIGEgNDggYml0IHZhcmlhYmxlCi0JCSAqIGFzIG11bHRpcGxlIG9mICBmaWxlIHN5c3RlbSBibG9jayBzaXplCi0JCSAqLwotCQllcnIgPSBleHQ0X3VwZGF0ZV9yb2NvbXBhdF9mZWF0dXJlKGhhbmRsZSwgc2IsCi0JCQkJCSAgICBFWFQ0X0ZFQVRVUkVfUk9fQ09NUEFUX0hVR0VfRklMRSk7Ci0JCWlmIChlcnIpCi0JCQlnb3RvICBlcnJfb3V0OwogCQllaS0+aV9mbGFncyB8PSBFWFQ0X0hVR0VfRklMRV9GTDsKIAkJLyogaV9ibG9jayBpcyBzdG9yZWQgaW4gZmlsZSBzeXN0ZW0gYmxvY2sgc2l6ZSAqLwogCQlpX2Jsb2NrcyA9IGlfYmxvY2tzID4+IChpbm9kZS0+aV9ibGtiaXRzIC0gOSk7CiAJCXJhd19pbm9kZS0+aV9ibG9ja3NfbG8gICA9IGNwdV90b19sZTMyKGlfYmxvY2tzKTsKIAkJcmF3X2lub2RlLT5pX2Jsb2Nrc19oaWdoID0gY3B1X3RvX2xlMTYoaV9ibG9ja3MgPj4gMzIpOwogCX0KLWVycl9vdXQ6Ci0JcmV0dXJuIGVycjsKKwlyZXR1cm4gMDsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL2ZzL2V4dDQvbWJhbGxvYy5jIGIvZnMvZXh0NC9tYmFsbG9jLmMKaW5kZXggYjU4MDcxNC4uZGZlMTdhMSAxMDA2NDQKLS0tIGEvZnMvZXh0NC9tYmFsbG9jLmMKKysrIGIvZnMvZXh0NC9tYmFsbG9jLmMKQEAgLTIzMDAsNiArMjMwMCw3IEBACiAJfQogCiAJSU5JVF9MSVNUX0hFQUQoJm1ldGFfZ3JvdXBfaW5mb1tpXS0+YmJfcHJlYWxsb2NfbGlzdCk7CisJbWV0YV9ncm91cF9pbmZvW2ldLT5iYl9mcmVlX3Jvb3QucmJfbm9kZSA9IE5VTEw7OwogCiAjaWZkZWYgRE9VQkxFX0NIRUNLCiAJewpAQCAtMjUyMiw5ICsyNTIzLDYgQEAKIAl9CiAKIAlzcGluX2xvY2tfaW5pdCgmc2JpLT5zX21kX2xvY2spOwotCUlOSVRfTElTVF9IRUFEKCZzYmktPnNfYWN0aXZlX3RyYW5zYWN0aW9uKTsKLQlJTklUX0xJU1RfSEVBRCgmc2JpLT5zX2Nsb3NlZF90cmFuc2FjdGlvbik7Ci0JSU5JVF9MSVNUX0hFQUQoJnNiaS0+c19jb21taXR0ZWRfdHJhbnNhY3Rpb24pOwogCXNwaW5fbG9ja19pbml0KCZzYmktPnNfYmFsX2xvY2spOwogCiAJc2JpLT5zX21iX21heF90b19zY2FuID0gTUJfREVGQVVMVF9NQVhfVE9fU0NBTjsKQEAgLTI1NTMsNiArMjU1MSw4IEBACiAJZXh0NF9tYl9pbml0X3Blcl9kZXZfcHJvYyhzYik7CiAJZXh0NF9tYl9oaXN0b3J5X2luaXQoc2IpOwogCisJc2JpLT5zX2pvdXJuYWwtPmpfY29tbWl0X2NhbGxiYWNrID0gcmVsZWFzZV9ibG9ja3Nfb25fY29tbWl0OworCiAJcHJpbnRrKEtFUk5fSU5GTyAiRVhUNC1mczogbWJhbGxvYyBlbmFibGVkXG4iKTsKIAlyZXR1cm4gMDsKIH0KQEAgLTI1NjgsNyArMjU2OCw3IEBACiAJCXBhID0gbGlzdF9lbnRyeShjdXIsIHN0cnVjdCBleHQ0X3ByZWFsbG9jX3NwYWNlLCBwYV9ncm91cF9saXN0KTsKIAkJbGlzdF9kZWwoJnBhLT5wYV9ncm91cF9saXN0KTsKIAkJY291bnQrKzsKLQkJa2ZyZWUocGEpOworCQlrbWVtX2NhY2hlX2ZyZWUoZXh0NF9wc3BhY2VfY2FjaGVwLCBwYSk7CiAJfQogCWlmIChjb3VudCkKIAkJbWJfZGVidWcoIm1iYWxsb2M6ICV1IFBBcyBsZWZ0XG4iLCBjb3VudCk7CkBAIC0yNTgyLDE1ICsyNTgyLDYgQEAKIAlzdHJ1Y3QgZXh0NF9ncm91cF9pbmZvICpncmluZm87CiAJc3RydWN0IGV4dDRfc2JfaW5mbyAqc2JpID0gRVhUNF9TQihzYik7CiAKLQkvKiByZWxlYXNlIGZyZWVkLCBub24tY29tbWl0dGVkIGJsb2NrcyAqLwotCXNwaW5fbG9jaygmc2JpLT5zX21kX2xvY2spOwotCWxpc3Rfc3BsaWNlX2luaXQoJnNiaS0+c19jbG9zZWRfdHJhbnNhY3Rpb24sCi0JCQkmc2JpLT5zX2NvbW1pdHRlZF90cmFuc2FjdGlvbik7Ci0JbGlzdF9zcGxpY2VfaW5pdCgmc2JpLT5zX2FjdGl2ZV90cmFuc2FjdGlvbiwKLQkJCSZzYmktPnNfY29tbWl0dGVkX3RyYW5zYWN0aW9uKTsKLQlzcGluX3VubG9jaygmc2JpLT5zX21kX2xvY2spOwotCWV4dDRfbWJfZnJlZV9jb21taXR0ZWRfYmxvY2tzKHNiKTsKLQogCWlmIChzYmktPnNfZ3JvdXBfaW5mbykgewogCQlmb3IgKGkgPSAwOyBpIDwgc2JpLT5zX2dyb3Vwc19jb3VudDsgaSsrKSB7CiAJCQlncmluZm8gPSBleHQ0X2dldF9ncm91cF9pbmZvKHNiLCBpKTsKQEAgLTI2NDQsNjEgKzI2MzUsNTcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIG5vaW5saW5lX2Zvcl9zdGFjayB2b2lkCi1leHQ0X21iX2ZyZWVfY29tbWl0dGVkX2Jsb2NrcyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQorLyoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGJ5IHRoZSBqYmQyIGxheWVyIG9uY2UgdGhlIGNvbW1pdCBoYXMgZmluaXNoZWQsCisgKiBzbyB3ZSBrbm93IHdlIGNhbiBmcmVlIHRoZSBibG9ja3MgdGhhdCB3ZXJlIHJlbGVhc2VkIHdpdGggdGhhdCBjb21taXQuCisgKi8KK3N0YXRpYyB2b2lkIHJlbGVhc2VfYmxvY2tzX29uX2NvbW1pdChqb3VybmFsX3QgKmpvdXJuYWwsIHRyYW5zYWN0aW9uX3QgKnR4bikKIHsKLQlzdHJ1Y3QgZXh0NF9zYl9pbmZvICpzYmkgPSBFWFQ0X1NCKHNiKTsKLQlpbnQgZXJyOwotCWludCBpOwotCWludCBjb3VudCA9IDA7Ci0JaW50IGNvdW50MiA9IDA7Ci0Jc3RydWN0IGV4dDRfZnJlZV9tZXRhZGF0YSAqbWQ7CisJc3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGpvdXJuYWwtPmpfcHJpdmF0ZTsKIAlzdHJ1Y3QgZXh0NF9idWRkeSBlNGI7CisJc3RydWN0IGV4dDRfZ3JvdXBfaW5mbyAqZGI7CisJaW50IGVyciwgY291bnQgPSAwLCBjb3VudDIgPSAwOworCXN0cnVjdCBleHQ0X2ZyZWVfZGF0YSAqZW50cnk7CisJZXh0NF9mc2Jsa190IGRpc2NhcmRfYmxvY2s7CisJc3RydWN0IGxpc3RfaGVhZCAqbCwgKmx0bXA7CiAKLQlpZiAobGlzdF9lbXB0eSgmc2JpLT5zX2NvbW1pdHRlZF90cmFuc2FjdGlvbikpCi0JCXJldHVybjsKLQotCS8qIHRoZXJlIGlzIGNvbW1pdHRlZCBibG9ja3MgdG8gYmUgZnJlZWQgeWV0ICovCi0JZG8gewotCQkvKiBnZXQgbmV4dCBhcnJheSBvZiBibG9ja3MgKi8KLQkJbWQgPSBOVUxMOwotCQlzcGluX2xvY2soJnNiaS0+c19tZF9sb2NrKTsKLQkJaWYgKCFsaXN0X2VtcHR5KCZzYmktPnNfY29tbWl0dGVkX3RyYW5zYWN0aW9uKSkgewotCQkJbWQgPSBsaXN0X2VudHJ5KHNiaS0+c19jb21taXR0ZWRfdHJhbnNhY3Rpb24ubmV4dCwKLQkJCQkJc3RydWN0IGV4dDRfZnJlZV9tZXRhZGF0YSwgbGlzdCk7Ci0JCQlsaXN0X2RlbCgmbWQtPmxpc3QpOwotCQl9Ci0JCXNwaW5fdW5sb2NrKCZzYmktPnNfbWRfbG9jayk7Ci0KLQkJaWYgKG1kID09IE5VTEwpCi0JCQlicmVhazsKKwlsaXN0X2Zvcl9lYWNoX3NhZmUobCwgbHRtcCwgJnR4bi0+dF9wcml2YXRlX2xpc3QpIHsKKwkJZW50cnkgPSBsaXN0X2VudHJ5KGwsIHN0cnVjdCBleHQ0X2ZyZWVfZGF0YSwgbGlzdCk7CiAKIAkJbWJfZGVidWcoImdvbm5hIGZyZWUgJXUgYmxvY2tzIGluIGdyb3VwICVsdSAoMHglcCk6IiwKLQkJCQltZC0+bnVtLCBtZC0+Z3JvdXAsIG1kKTsKKwkJCSBlbnRyeS0+Y291bnQsIGVudHJ5LT5ncm91cCwgZW50cnkpOwogCi0JCWVyciA9IGV4dDRfbWJfbG9hZF9idWRkeShzYiwgbWQtPmdyb3VwLCAmZTRiKTsKKwkJZXJyID0gZXh0NF9tYl9sb2FkX2J1ZGR5KHNiLCBlbnRyeS0+Z3JvdXAsICZlNGIpOwogCQkvKiB3ZSBleHBlY3QgdG8gZmluZCBleGlzdGluZyBidWRkeSBiZWNhdXNlIGl0J3MgcGlubmVkICovCiAJCUJVR19PTihlcnIgIT0gMCk7CiAKKwkJZGIgPSBlNGIuYmRfaW5mbzsKIAkJLyogdGhlcmUgYXJlIGJsb2NrcyB0byBwdXQgaW4gYnVkZHkgdG8gbWFrZSB0aGVtIHJlYWxseSBmcmVlICovCi0JCWNvdW50ICs9IG1kLT5udW07CisJCWNvdW50ICs9IGVudHJ5LT5jb3VudDsKIAkJY291bnQyKys7Ci0JCWV4dDRfbG9ja19ncm91cChzYiwgbWQtPmdyb3VwKTsKLQkJZm9yIChpID0gMDsgaSA8IG1kLT5udW07IGkrKykgewotCQkJbWJfZGVidWcoIiAldSIsIG1kLT5ibG9ja3NbaV0pOwotCQkJbWJfZnJlZV9ibG9ja3MoTlVMTCwgJmU0YiwgbWQtPmJsb2Nrc1tpXSwgMSk7CisJCWV4dDRfbG9ja19ncm91cChzYiwgZW50cnktPmdyb3VwKTsKKwkJLyogVGFrZSBpdCBvdXQgb2YgcGVyIGdyb3VwIHJiIHRyZWUgKi8KKwkJcmJfZXJhc2UoJmVudHJ5LT5ub2RlLCAmKGRiLT5iYl9mcmVlX3Jvb3QpKTsKKwkJbWJfZnJlZV9ibG9ja3MoTlVMTCwgJmU0YiwgZW50cnktPnN0YXJ0X2JsaywgZW50cnktPmNvdW50KTsKKworCQlpZiAoIWRiLT5iYl9mcmVlX3Jvb3QucmJfbm9kZSkgeworCQkJLyogTm8gbW9yZSBpdGVtcyBpbiB0aGUgcGVyIGdyb3VwIHJiIHRyZWUKKwkJCSAqIGJhbGFuY2UgcmVmY291bnRzIGZyb20gZXh0NF9tYl9mcmVlX21ldGFkYXRhKCkKKwkJCSAqLworCQkJcGFnZV9jYWNoZV9yZWxlYXNlKGU0Yi5iZF9idWRkeV9wYWdlKTsKKwkJCXBhZ2VfY2FjaGVfcmVsZWFzZShlNGIuYmRfYml0bWFwX3BhZ2UpOwogCQl9Ci0JCW1iX2RlYnVnKCJcbiIpOwotCQlleHQ0X3VubG9ja19ncm91cChzYiwgbWQtPmdyb3VwKTsKKwkJZXh0NF91bmxvY2tfZ3JvdXAoc2IsIGVudHJ5LT5ncm91cCk7CisJCWRpc2NhcmRfYmxvY2sgPSAoZXh0NF9mc2Jsa190KSBlbnRyeS0+Z3JvdXAgKiBFWFQ0X0JMT0NLU19QRVJfR1JPVVAoc2IpCisJCQkrIGVudHJ5LT5zdGFydF9ibGsKKwkJCSsgbGUzMl90b19jcHUoRVhUNF9TQihzYiktPnNfZXMtPnNfZmlyc3RfZGF0YV9ibG9jayk7CisJCXRyYWNlX21hcmsoZXh0NF9kaXNjYXJkX2Jsb2NrcywgImRldiAlcyBibGsgJWxsdSBjb3VudCAldSIsIHNiLT5zX2lkLAorCQkJICAgKHVuc2lnbmVkIGxvbmcgbG9uZykgZGlzY2FyZF9ibG9jaywgZW50cnktPmNvdW50KTsKKwkJc2JfaXNzdWVfZGlzY2FyZChzYiwgZGlzY2FyZF9ibG9jaywgZW50cnktPmNvdW50KTsKIAotCQkvKiBiYWxhbmNlIHJlZmNvdW50cyBmcm9tIGV4dDRfbWJfZnJlZV9tZXRhZGF0YSgpICovCi0JCXBhZ2VfY2FjaGVfcmVsZWFzZShlNGIuYmRfYnVkZHlfcGFnZSk7Ci0JCXBhZ2VfY2FjaGVfcmVsZWFzZShlNGIuYmRfYml0bWFwX3BhZ2UpOwotCi0JCWtmcmVlKG1kKTsKKwkJa21lbV9jYWNoZV9mcmVlKGV4dDRfZnJlZV9leHRfY2FjaGVwLCBlbnRyeSk7CiAJCWV4dDRfbWJfcmVsZWFzZV9kZXNjKCZlNGIpOwotCi0JfSB3aGlsZSAobWQpOworCX0KIAogCW1iX2RlYnVnKCJmcmVlZCAldSBibG9ja3MgaW4gJXUgc3RydWN0dXJlc1xuIiwgY291bnQsIGNvdW50Mik7CiB9CkBAIC0yNzEyLDYgKzI2OTksNyBAQAogCiBzdGF0aWMgaW50IGV4dDRfbWJfaW5pdF9wZXJfZGV2X3Byb2Moc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKIHsKKyNpZmRlZiBDT05GSUdfUFJPQ19GUwogCW1vZGVfdCBtb2RlID0gU19JRlJFRyB8IFNfSVJVR08gfCBTX0lXVVNSOwogCXN0cnVjdCBleHQ0X3NiX2luZm8gKnNiaSA9IEVYVDRfU0Ioc2IpOwogCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcHJvYzsKQEAgLTI3MzUsMTAgKzI3MjMsMTQgQEAKIAlyZW1vdmVfcHJvY19lbnRyeShFWFQ0X01CX01BWF9UT19TQ0FOX05BTUUsIHNiaS0+c19wcm9jKTsKIAlyZW1vdmVfcHJvY19lbnRyeShFWFQ0X01CX1NUQVRTX05BTUUsIHNiaS0+c19wcm9jKTsKIAlyZXR1cm4gLUVOT01FTTsKKyNlbHNlCisJcmV0dXJuIDA7CisjZW5kaWYKIH0KIAogc3RhdGljIGludCBleHQ0X21iX2Rlc3Ryb3lfcGVyX2Rldl9wcm9jKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCiB7CisjaWZkZWYgQ09ORklHX1BST0NfRlMKIAlzdHJ1Y3QgZXh0NF9zYl9pbmZvICpzYmkgPSBFWFQ0X1NCKHNiKTsKIAogCWlmIChzYmktPnNfcHJvYyA9PSBOVUxMKQpAQCAtMjc1MCw3ICsyNzQyLDcgQEAKIAlyZW1vdmVfcHJvY19lbnRyeShFWFQ0X01CX01JTl9UT19TQ0FOX05BTUUsIHNiaS0+c19wcm9jKTsKIAlyZW1vdmVfcHJvY19lbnRyeShFWFQ0X01CX01BWF9UT19TQ0FOX05BTUUsIHNiaS0+c19wcm9jKTsKIAlyZW1vdmVfcHJvY19lbnRyeShFWFQ0X01CX1NUQVRTX05BTUUsIHNiaS0+c19wcm9jKTsKLQorI2VuZGlmCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTI3NzEsNiArMjc2MywxNiBAQAogCQlrbWVtX2NhY2hlX2Rlc3Ryb3koZXh0NF9wc3BhY2VfY2FjaGVwKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQorCisJZXh0NF9mcmVlX2V4dF9jYWNoZXAgPQorCQlrbWVtX2NhY2hlX2NyZWF0ZSgiZXh0NF9mcmVlX2Jsb2NrX2V4dGVudHMiLAorCQkJCSAgICAgc2l6ZW9mKHN0cnVjdCBleHQ0X2ZyZWVfZGF0YSksCisJCQkJICAgICAwLCBTTEFCX1JFQ0xBSU1fQUNDT1VOVCwgTlVMTCk7CisJaWYgKGV4dDRfZnJlZV9leHRfY2FjaGVwID09IE5VTEwpIHsKKwkJa21lbV9jYWNoZV9kZXN0cm95KGV4dDRfcHNwYWNlX2NhY2hlcCk7CisJCWttZW1fY2FjaGVfZGVzdHJveShleHQ0X2FjX2NhY2hlcCk7CisJCXJldHVybiAtRU5PTUVNOworCX0KIAlyZXR1cm4gMDsKIH0KIApAQCAtMjc3OSw2ICsyNzgxLDcgQEAKIAkvKiBYWFg6IHN5bmNocm9uaXplX3JjdSgpOyAqLwogCWttZW1fY2FjaGVfZGVzdHJveShleHQ0X3BzcGFjZV9jYWNoZXApOwogCWttZW1fY2FjaGVfZGVzdHJveShleHQ0X2FjX2NhY2hlcCk7CisJa21lbV9jYWNoZV9kZXN0cm95KGV4dDRfZnJlZV9leHRfY2FjaGVwKTsKIH0KIAogCkBAIC00MzI0LDggKzQzMjcsNiBAQAogCQlnb3RvIG91dDE7CiAJfQogCi0JZXh0NF9tYl9wb2xsX25ld190cmFuc2FjdGlvbihzYiwgaGFuZGxlKTsKLQogCSplcnJwID0gZXh0NF9tYl9pbml0aWFsaXplX2NvbnRleHQoYWMsIGFyKTsKIAlpZiAoKmVycnApIHsKIAkJYXItPmxlbiA9IDA7CkBAIC00Mzg0LDM1ICs0Mzg1LDIwIEBACiAKIAlyZXR1cm4gYmxvY2s7CiB9Ci1zdGF0aWMgdm9pZCBleHQ0X21iX3BvbGxfbmV3X3RyYW5zYWN0aW9uKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsCi0JCQkJCQloYW5kbGVfdCAqaGFuZGxlKQorCisvKgorICogV2UgY2FuIG1lcmdlIHR3byBmcmVlIGRhdGEgZXh0ZW50cyBvbmx5IGlmIHRoZSBwaHlzaWNhbCBibG9ja3MKKyAqIGFyZSBjb250aWd1b3VzLCBBTkQgdGhlIGV4dGVudHMgd2VyZSBmcmVlZCBieSB0aGUgc2FtZSB0cmFuc2FjdGlvbiwKKyAqIEFORCB0aGUgYmxvY2tzIGFyZSBhc3NvY2lhdGVkIHdpdGggdGhlIHNhbWUgZ3JvdXAuCisgKi8KK3N0YXRpYyBpbnQgY2FuX21lcmdlKHN0cnVjdCBleHQ0X2ZyZWVfZGF0YSAqZW50cnkxLAorCQkJc3RydWN0IGV4dDRfZnJlZV9kYXRhICplbnRyeTIpCiB7Ci0Jc3RydWN0IGV4dDRfc2JfaW5mbyAqc2JpID0gRVhUNF9TQihzYik7Ci0KLQlpZiAoc2JpLT5zX2xhc3RfdHJhbnNhY3Rpb24gPT0gaGFuZGxlLT5oX3RyYW5zYWN0aW9uLT50X3RpZCkKLQkJcmV0dXJuOwotCi0JLyogbmV3IHRyYW5zYWN0aW9uISB0aW1lIHRvIGNsb3NlIGxhc3Qgb25lIGFuZCBmcmVlIGJsb2NrcyBmb3IKLQkgKiBjb21taXR0ZWQgdHJhbnNhY3Rpb24uIHdlIGtub3cgdGhhdCBvbmx5IHRyYW5zYWN0aW9uIGNhbiBiZQotCSAqIGFjdGl2ZSwgc28gcHJldmlvcyB0cmFuc2FjdGlvbiBjYW4gYmUgYmVpbmcgbG9nZ2VkIGFuZCB3ZQotCSAqIGtub3cgdGhhdCB0cmFuc2FjdGlvbiBiZWZvcmUgcHJldmlvdXMgaXMga25vd24gdG8gYmUgYWxyZWFkeQotCSAqIGxvZ2dlZC4gdGhpcyBtZWFucyB0aGF0IG5vdyB3ZSBtYXkgZnJlZSBibG9ja3MgZnJlZWQgaW4gYWxsCi0JICogdHJhbnNhY3Rpb25zIGJlZm9yZSBwcmV2aW91cyBvbmUuIGhvcGUgSSdtIGNsZWFyIGVub3VnaCAuLi4gKi8KLQotCXNwaW5fbG9jaygmc2JpLT5zX21kX2xvY2spOwotCWlmIChzYmktPnNfbGFzdF90cmFuc2FjdGlvbiAhPSBoYW5kbGUtPmhfdHJhbnNhY3Rpb24tPnRfdGlkKSB7Ci0JCW1iX2RlYnVnKCJuZXcgdHJhbnNhY3Rpb24gJWx1LCBvbGQgJWx1XG4iLAotCQkJCSh1bnNpZ25lZCBsb25nKSBoYW5kbGUtPmhfdHJhbnNhY3Rpb24tPnRfdGlkLAotCQkJCSh1bnNpZ25lZCBsb25nKSBzYmktPnNfbGFzdF90cmFuc2FjdGlvbik7Ci0JCWxpc3Rfc3BsaWNlX2luaXQoJnNiaS0+c19jbG9zZWRfdHJhbnNhY3Rpb24sCi0JCQkJJnNiaS0+c19jb21taXR0ZWRfdHJhbnNhY3Rpb24pOwotCQlsaXN0X3NwbGljZV9pbml0KCZzYmktPnNfYWN0aXZlX3RyYW5zYWN0aW9uLAotCQkJCSZzYmktPnNfY2xvc2VkX3RyYW5zYWN0aW9uKTsKLQkJc2JpLT5zX2xhc3RfdHJhbnNhY3Rpb24gPSBoYW5kbGUtPmhfdHJhbnNhY3Rpb24tPnRfdGlkOwotCX0KLQlzcGluX3VubG9jaygmc2JpLT5zX21kX2xvY2spOwotCi0JZXh0NF9tYl9mcmVlX2NvbW1pdHRlZF9ibG9ja3Moc2IpOworCWlmICgoZW50cnkxLT50X3RpZCA9PSBlbnRyeTItPnRfdGlkKSAmJgorCSAgICAoZW50cnkxLT5ncm91cCA9PSBlbnRyeTItPmdyb3VwKSAmJgorCSAgICAoKGVudHJ5MS0+c3RhcnRfYmxrICsgZW50cnkxLT5jb3VudCkgPT0gZW50cnkyLT5zdGFydF9ibGspKQorCQlyZXR1cm4gMTsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIG5vaW5saW5lX2Zvcl9zdGFjayBpbnQKQEAgLTQ0MjIsNTcgKzQ0MDgsODAgQEAKIAlzdHJ1Y3QgZXh0NF9ncm91cF9pbmZvICpkYiA9IGU0Yi0+YmRfaW5mbzsKIAlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gZTRiLT5iZF9zYjsKIAlzdHJ1Y3QgZXh0NF9zYl9pbmZvICpzYmkgPSBFWFQ0X1NCKHNiKTsKLQlzdHJ1Y3QgZXh0NF9mcmVlX21ldGFkYXRhICptZDsKLQlpbnQgaTsKKwlzdHJ1Y3QgZXh0NF9mcmVlX2RhdGEgKmVudHJ5LCAqbmV3X2VudHJ5OworCXN0cnVjdCByYl9ub2RlICoqbiA9ICZkYi0+YmJfZnJlZV9yb290LnJiX25vZGUsICpub2RlOworCXN0cnVjdCByYl9ub2RlICpwYXJlbnQgPSBOVUxMLCAqbmV3X25vZGU7CisKIAogCUJVR19PTihlNGItPmJkX2JpdG1hcF9wYWdlID09IE5VTEwpOwogCUJVR19PTihlNGItPmJkX2J1ZGR5X3BhZ2UgPT0gTlVMTCk7CiAKKwluZXdfZW50cnkgID0ga21lbV9jYWNoZV9hbGxvYyhleHQ0X2ZyZWVfZXh0X2NhY2hlcCwgR0ZQX05PRlMpOworCW5ld19lbnRyeS0+c3RhcnRfYmxrID0gYmxvY2s7CisJbmV3X2VudHJ5LT5ncm91cCAgPSBncm91cDsKKwluZXdfZW50cnktPmNvdW50ID0gY291bnQ7CisJbmV3X2VudHJ5LT50X3RpZCA9IGhhbmRsZS0+aF90cmFuc2FjdGlvbi0+dF90aWQ7CisJbmV3X25vZGUgPSAmbmV3X2VudHJ5LT5ub2RlOworCiAJZXh0NF9sb2NrX2dyb3VwKHNiLCBncm91cCk7Ci0JZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKLQkJbWQgPSBkYi0+YmJfbWRfY3VyOwotCQlpZiAobWQgJiYgZGItPmJiX3RpZCAhPSBoYW5kbGUtPmhfdHJhbnNhY3Rpb24tPnRfdGlkKSB7Ci0JCQlkYi0+YmJfbWRfY3VyID0gTlVMTDsKLQkJCW1kID0gTlVMTDsKLQkJfQotCi0JCWlmIChtZCA9PSBOVUxMKSB7Ci0JCQlleHQ0X3VubG9ja19ncm91cChzYiwgZ3JvdXApOwotCQkJbWQgPSBrbWFsbG9jKHNpemVvZigqbWQpLCBHRlBfTk9GUyk7Ci0JCQlpZiAobWQgPT0gTlVMTCkKLQkJCQlyZXR1cm4gLUVOT01FTTsKLQkJCW1kLT5udW0gPSAwOwotCQkJbWQtPmdyb3VwID0gZ3JvdXA7Ci0KLQkJCWV4dDRfbG9ja19ncm91cChzYiwgZ3JvdXApOwotCQkJaWYgKGRiLT5iYl9tZF9jdXIgPT0gTlVMTCkgewotCQkJCXNwaW5fbG9jaygmc2JpLT5zX21kX2xvY2spOwotCQkJCWxpc3RfYWRkKCZtZC0+bGlzdCwgJnNiaS0+c19hY3RpdmVfdHJhbnNhY3Rpb24pOwotCQkJCXNwaW5fdW5sb2NrKCZzYmktPnNfbWRfbG9jayk7Ci0JCQkJLyogcHJvdGVjdCBidWRkeSBjYWNoZSBmcm9tIGJlaW5nIGZyZWVkLAotCQkJCSAqIG90aGVyd2lzZSB3ZSdsbCByZWZyZXNoIGl0IGZyb20KLQkJCQkgKiBvbi1kaXNrIGJpdG1hcCBhbmQgbG9zZSBub3QteWV0LWF2YWlsYWJsZQotCQkJCSAqIGJsb2NrcyAqLwotCQkJCXBhZ2VfY2FjaGVfZ2V0KGU0Yi0+YmRfYnVkZHlfcGFnZSk7Ci0JCQkJcGFnZV9jYWNoZV9nZXQoZTRiLT5iZF9iaXRtYXBfcGFnZSk7Ci0JCQkJZGItPmJiX21kX2N1ciA9IG1kOwotCQkJCWRiLT5iYl90aWQgPSBoYW5kbGUtPmhfdHJhbnNhY3Rpb24tPnRfdGlkOwotCQkJCW1iX2RlYnVnKCJuZXcgbWQgMHglcCBmb3IgZ3JvdXAgJWx1XG4iLAotCQkJCQkJbWQsIG1kLT5ncm91cCk7Ci0JCQl9IGVsc2UgewotCQkJCWtmcmVlKG1kKTsKLQkJCQltZCA9IGRiLT5iYl9tZF9jdXI7Ci0JCQl9Ci0JCX0KLQotCQlCVUdfT04obWQtPm51bSA+PSBFWFQ0X0JCX01BWF9CTE9DS1MpOwotCQltZC0+YmxvY2tzW21kLT5udW1dID0gYmxvY2sgKyBpOwotCQltZC0+bnVtKys7Ci0JCWlmIChtZC0+bnVtID09IEVYVDRfQkJfTUFYX0JMT0NLUykgewotCQkJLyogbm8gbW9yZSBzcGFjZSwgcHV0IGZ1bGwgY29udGFpbmVyIG9uIGEgc2IncyBsaXN0ICovCi0JCQlkYi0+YmJfbWRfY3VyID0gTlVMTDsKKwlpZiAoISpuKSB7CisJCS8qIGZpcnN0IGZyZWUgYmxvY2sgZXhlbnQuIFdlIG5lZWQgdG8KKwkJICAgcHJvdGVjdCBidWRkeSBjYWNoZSBmcm9tIGJlaW5nIGZyZWVkLAorCQkgKiBvdGhlcndpc2Ugd2UnbGwgcmVmcmVzaCBpdCBmcm9tCisJCSAqIG9uLWRpc2sgYml0bWFwIGFuZCBsb3NlIG5vdC15ZXQtYXZhaWxhYmxlCisJCSAqIGJsb2NrcyAqLworCQlwYWdlX2NhY2hlX2dldChlNGItPmJkX2J1ZGR5X3BhZ2UpOworCQlwYWdlX2NhY2hlX2dldChlNGItPmJkX2JpdG1hcF9wYWdlKTsKKwl9CisJd2hpbGUgKCpuKSB7CisJCXBhcmVudCA9ICpuOworCQllbnRyeSA9IHJiX2VudHJ5KHBhcmVudCwgc3RydWN0IGV4dDRfZnJlZV9kYXRhLCBub2RlKTsKKwkJaWYgKGJsb2NrIDwgZW50cnktPnN0YXJ0X2JsaykKKwkJCW4gPSAmKCpuKS0+cmJfbGVmdDsKKwkJZWxzZSBpZiAoYmxvY2sgPj0gKGVudHJ5LT5zdGFydF9ibGsgKyBlbnRyeS0+Y291bnQpKQorCQkJbiA9ICYoKm4pLT5yYl9yaWdodDsKKwkJZWxzZSB7CisJCQlleHQ0X2Vycm9yKHNiLCBfX2Z1bmNfXywKKwkJCSAgICAiRG91YmxlIGZyZWUgb2YgYmxvY2tzICVkICglZCAlZClcbiIsCisJCQkgICAgYmxvY2ssIGVudHJ5LT5zdGFydF9ibGssIGVudHJ5LT5jb3VudCk7CisJCQlyZXR1cm4gMDsKIAkJfQogCX0KKworCXJiX2xpbmtfbm9kZShuZXdfbm9kZSwgcGFyZW50LCBuKTsKKwlyYl9pbnNlcnRfY29sb3IobmV3X25vZGUsICZkYi0+YmJfZnJlZV9yb290KTsKKworCS8qIE5vdyB0cnkgdG8gc2VlIHRoZSBleHRlbnQgY2FuIGJlIG1lcmdlZCB0byBsZWZ0IGFuZCByaWdodCAqLworCW5vZGUgPSByYl9wcmV2KG5ld19ub2RlKTsKKwlpZiAobm9kZSkgeworCQllbnRyeSA9IHJiX2VudHJ5KG5vZGUsIHN0cnVjdCBleHQ0X2ZyZWVfZGF0YSwgbm9kZSk7CisJCWlmIChjYW5fbWVyZ2UoZW50cnksIG5ld19lbnRyeSkpIHsKKwkJCW5ld19lbnRyeS0+c3RhcnRfYmxrID0gZW50cnktPnN0YXJ0X2JsazsKKwkJCW5ld19lbnRyeS0+Y291bnQgKz0gZW50cnktPmNvdW50OworCQkJcmJfZXJhc2Uobm9kZSwgJihkYi0+YmJfZnJlZV9yb290KSk7CisJCQlzcGluX2xvY2soJnNiaS0+c19tZF9sb2NrKTsKKwkJCWxpc3RfZGVsKCZlbnRyeS0+bGlzdCk7CisJCQlzcGluX3VubG9jaygmc2JpLT5zX21kX2xvY2spOworCQkJa21lbV9jYWNoZV9mcmVlKGV4dDRfZnJlZV9leHRfY2FjaGVwLCBlbnRyeSk7CisJCX0KKwl9CisKKwlub2RlID0gcmJfbmV4dChuZXdfbm9kZSk7CisJaWYgKG5vZGUpIHsKKwkJZW50cnkgPSByYl9lbnRyeShub2RlLCBzdHJ1Y3QgZXh0NF9mcmVlX2RhdGEsIG5vZGUpOworCQlpZiAoY2FuX21lcmdlKG5ld19lbnRyeSwgZW50cnkpKSB7CisJCQluZXdfZW50cnktPmNvdW50ICs9IGVudHJ5LT5jb3VudDsKKwkJCXJiX2VyYXNlKG5vZGUsICYoZGItPmJiX2ZyZWVfcm9vdCkpOworCQkJc3Bpbl9sb2NrKCZzYmktPnNfbWRfbG9jayk7CisJCQlsaXN0X2RlbCgmZW50cnktPmxpc3QpOworCQkJc3Bpbl91bmxvY2soJnNiaS0+c19tZF9sb2NrKTsKKwkJCWttZW1fY2FjaGVfZnJlZShleHQ0X2ZyZWVfZXh0X2NhY2hlcCwgZW50cnkpOworCQl9CisJfQorCS8qIEFkZCB0aGUgZXh0ZW50IHRvIHRyYW5zYWN0aW9uJ3MgcHJpdmF0ZSBsaXN0ICovCisJc3Bpbl9sb2NrKCZzYmktPnNfbWRfbG9jayk7CisJbGlzdF9hZGQoJm5ld19lbnRyeS0+bGlzdCwgJmhhbmRsZS0+aF90cmFuc2FjdGlvbi0+dF9wcml2YXRlX2xpc3QpOworCXNwaW5fdW5sb2NrKCZzYmktPnNfbWRfbG9jayk7CiAJZXh0NF91bmxvY2tfZ3JvdXAoc2IsIGdyb3VwKTsKIAlyZXR1cm4gMDsKIH0KQEAgLTQ1MDAsOCArNDUwOSw2IEBACiAKIAkqZnJlZWQgPSAwOwogCi0JZXh0NF9tYl9wb2xsX25ld190cmFuc2FjdGlvbihzYiwgaGFuZGxlKTsKLQogCXNiaSA9IEVYVDRfU0Ioc2IpOwogCWVzID0gRVhUNF9TQihzYiktPnNfZXM7CiAJaWYgKGJsb2NrIDwgbGUzMl90b19jcHUoZXMtPnNfZmlyc3RfZGF0YV9ibG9jaykgfHwKZGlmZiAtLWdpdCBhL2ZzL2V4dDQvbWJhbGxvYy5oIGIvZnMvZXh0NC9tYmFsbG9jLmgKaW5kZXggYjNiNDgyOC4uYjVkZmYxZiAxMDA2NDQKLS0tIGEvZnMvZXh0NC9tYmFsbG9jLmgKKysrIGIvZnMvZXh0NC9tYmFsbG9jLmgKQEAgLTE4LDYgKzE4LDggQEAKICNpbmNsdWRlIDxsaW51eC9wYWdlbWFwLmg+CiAjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KICNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CisjaW5jbHVkZSA8bGludXgvYmxrZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvbWFya2VyLmg+CiAjaW5jbHVkZSAiZXh0NF9qYmQyLmgiCiAjaW5jbHVkZSAiZXh0NC5oIgogI2luY2x1ZGUgImdyb3VwLmgiCkBAIC05OCwyMyArMTAwLDI5IEBACiAKIHN0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqZXh0NF9wc3BhY2VfY2FjaGVwOwogc3RhdGljIHN0cnVjdCBrbWVtX2NhY2hlICpleHQ0X2FjX2NhY2hlcDsKK3N0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqZXh0NF9mcmVlX2V4dF9jYWNoZXA7CiAKLSNpZmRlZiBFWFQ0X0JCX01BWF9CTE9DS1MKLSN1bmRlZiBFWFQ0X0JCX01BWF9CTE9DS1MKLSNlbmRpZgotI2RlZmluZSBFWFQ0X0JCX01BWF9CTE9DS1MJMzAKK3N0cnVjdCBleHQ0X2ZyZWVfZGF0YSB7CisJLyogdGhpcyBsaW5rcyB0aGUgZnJlZSBibG9jayBpbmZvcm1hdGlvbiBmcm9tIGdyb3VwX2luZm8gKi8KKwlzdHJ1Y3QgcmJfbm9kZSBub2RlOwogCi1zdHJ1Y3QgZXh0NF9mcmVlX21ldGFkYXRhIHsKLQlleHQ0X2dyb3VwX3QgZ3JvdXA7Ci0JdW5zaWduZWQgc2hvcnQgbnVtOwotCWV4dDRfZ3JwYmxrX3QgIGJsb2Nrc1tFWFQ0X0JCX01BWF9CTE9DS1NdOworCS8qIHRoaXMgbGlua3MgdGhlIGZyZWUgYmxvY2sgaW5mb3JtYXRpb24gZnJvbSBleHQ0X3NiX2luZm8gKi8KIAlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CisKKwkvKiBncm91cCB3aGljaCBmcmVlIGJsb2NrIGV4dGVudCBiZWxvbmdzICovCisJZXh0NF9ncm91cF90IGdyb3VwOworCisJLyogZnJlZSBibG9jayBleHRlbnQgKi8KKwlleHQ0X2dycGJsa190IHN0YXJ0X2JsazsKKwlleHQ0X2dycGJsa190IGNvdW50OworCisJLyogdHJhbnNhY3Rpb24gd2hpY2ggZnJlZWQgdGhpcyBleHRlbnQgKi8KKwl0aWRfdAl0X3RpZDsKIH07CiAKIHN0cnVjdCBleHQ0X2dyb3VwX2luZm8gewogCXVuc2lnbmVkIGxvbmcJYmJfc3RhdGU7Ci0JdW5zaWduZWQgbG9uZwliYl90aWQ7Ci0Jc3RydWN0IGV4dDRfZnJlZV9tZXRhZGF0YSAqYmJfbWRfY3VyOworCXN0cnVjdCByYl9yb290ICBiYl9mcmVlX3Jvb3Q7CiAJdW5zaWduZWQgc2hvcnQJYmJfZmlyc3RfZnJlZTsKIAl1bnNpZ25lZCBzaG9ydAliYl9mcmVlOwogCXVuc2lnbmVkIHNob3J0CWJiX2ZyYWdtZW50czsKQEAgLTI2MSw4ICsyNjksNiBAQAogCiBzdGF0aWMgdm9pZCBleHQ0X21iX2dlbmVyYXRlX2Zyb21fcGEoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdm9pZCAqYml0bWFwLAogCQkJCQlleHQ0X2dyb3VwX3QgZ3JvdXApOwotc3RhdGljIHZvaWQgZXh0NF9tYl9wb2xsX25ld190cmFuc2FjdGlvbihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgaGFuZGxlX3QgKik7Ci1zdGF0aWMgdm9pZCBleHQ0X21iX2ZyZWVfY29tbWl0dGVkX2Jsb2NrcyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKik7CiBzdGF0aWMgdm9pZCBleHQ0X21iX3JldHVybl90b19wcmVhbGxvY2F0aW9uKHN0cnVjdCBpbm9kZSAqaW5vZGUsCiAJCQkJCXN0cnVjdCBleHQ0X2J1ZGR5ICplNGIsIHNlY3Rvcl90IGJsb2NrLAogCQkJCQlpbnQgY291bnQpOwpAQCAtMjcwLDYgKzI3Niw3IEBACiAJCQlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgc3RydWN0IGV4dDRfcHJlYWxsb2Nfc3BhY2UgKnBhKTsKIHN0YXRpYyBpbnQgZXh0NF9tYl9pbml0X3Blcl9kZXZfcHJvYyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKTsKIHN0YXRpYyBpbnQgZXh0NF9tYl9kZXN0cm95X3Blcl9kZXZfcHJvYyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKTsKK3N0YXRpYyB2b2lkIHJlbGVhc2VfYmxvY2tzX29uX2NvbW1pdChqb3VybmFsX3QgKmpvdXJuYWwsIHRyYW5zYWN0aW9uX3QgKnR4bik7CiAKIAogc3RhdGljIGlubGluZSB2b2lkIGV4dDRfbG9ja19ncm91cChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBleHQ0X2dyb3VwX3QgZ3JvdXApCmRpZmYgLS1naXQgYS9mcy9leHQ0L3N1cGVyLmMgYi9mcy9leHQ0L3N1cGVyLmMKaW5kZXggZmI5NDBjMi4uOWIyYjJiYyAxMDA2NDQKLS0tIGEvZnMvZXh0NC9zdXBlci5jCisrKyBiL2ZzL2V4dDQvc3VwZXIuYwpAQCAtMzc0LDY2ICszNzQsNiBAQAogCSAqLwogfQogCi1pbnQgZXh0NF91cGRhdGVfY29tcGF0X2ZlYXR1cmUoaGFuZGxlX3QgKmhhbmRsZSwKLQkJCQkJc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgX191MzIgY29tcGF0KQotewotCWludCBlcnIgPSAwOwotCWlmICghRVhUNF9IQVNfQ09NUEFUX0ZFQVRVUkUoc2IsIGNvbXBhdCkpIHsKLQkJZXJyID0gZXh0NF9qb3VybmFsX2dldF93cml0ZV9hY2Nlc3MoaGFuZGxlLAotCQkJCUVYVDRfU0Ioc2IpLT5zX3NiaCk7Ci0JCWlmIChlcnIpCi0JCQlyZXR1cm4gZXJyOwotCQlFWFQ0X1NFVF9DT01QQVRfRkVBVFVSRShzYiwgY29tcGF0KTsKLQkJc2ItPnNfZGlydCA9IDE7Ci0JCWhhbmRsZS0+aF9zeW5jID0gMTsKLQkJQlVGRkVSX1RSQUNFKEVYVDRfU0Ioc2IpLT5zX3NiaCwKLQkJCQkJImNhbGwgZXh0NF9qb3VybmFsX2RpcnR5X21ldCBhZGF0YSIpOwotCQllcnIgPSBleHQ0X2pvdXJuYWxfZGlydHlfbWV0YWRhdGEoaGFuZGxlLAotCQkJCUVYVDRfU0Ioc2IpLT5zX3NiaCk7Ci0JfQotCXJldHVybiBlcnI7Ci19Ci0KLWludCBleHQ0X3VwZGF0ZV9yb2NvbXBhdF9mZWF0dXJlKGhhbmRsZV90ICpoYW5kbGUsCi0JCQkJCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIF9fdTMyIHJvY29tcGF0KQotewotCWludCBlcnIgPSAwOwotCWlmICghRVhUNF9IQVNfUk9fQ09NUEFUX0ZFQVRVUkUoc2IsIHJvY29tcGF0KSkgewotCQllcnIgPSBleHQ0X2pvdXJuYWxfZ2V0X3dyaXRlX2FjY2VzcyhoYW5kbGUsCi0JCQkJRVhUNF9TQihzYiktPnNfc2JoKTsKLQkJaWYgKGVycikKLQkJCXJldHVybiBlcnI7Ci0JCUVYVDRfU0VUX1JPX0NPTVBBVF9GRUFUVVJFKHNiLCByb2NvbXBhdCk7Ci0JCXNiLT5zX2RpcnQgPSAxOwotCQloYW5kbGUtPmhfc3luYyA9IDE7Ci0JCUJVRkZFUl9UUkFDRShFWFQ0X1NCKHNiKS0+c19zYmgsCi0JCQkJCSJjYWxsIGV4dDRfam91cm5hbF9kaXJ0eV9tZXQgYWRhdGEiKTsKLQkJZXJyID0gZXh0NF9qb3VybmFsX2RpcnR5X21ldGFkYXRhKGhhbmRsZSwKLQkJCQlFWFQ0X1NCKHNiKS0+c19zYmgpOwotCX0KLQlyZXR1cm4gZXJyOwotfQotCi1pbnQgZXh0NF91cGRhdGVfaW5jb21wYXRfZmVhdHVyZShoYW5kbGVfdCAqaGFuZGxlLAotCQkJCQlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBfX3UzMiBpbmNvbXBhdCkKLXsKLQlpbnQgZXJyID0gMDsKLQlpZiAoIUVYVDRfSEFTX0lOQ09NUEFUX0ZFQVRVUkUoc2IsIGluY29tcGF0KSkgewotCQllcnIgPSBleHQ0X2pvdXJuYWxfZ2V0X3dyaXRlX2FjY2VzcyhoYW5kbGUsCi0JCQkJRVhUNF9TQihzYiktPnNfc2JoKTsKLQkJaWYgKGVycikKLQkJCXJldHVybiBlcnI7Ci0JCUVYVDRfU0VUX0lOQ09NUEFUX0ZFQVRVUkUoc2IsIGluY29tcGF0KTsKLQkJc2ItPnNfZGlydCA9IDE7Ci0JCWhhbmRsZS0+aF9zeW5jID0gMTsKLQkJQlVGRkVSX1RSQUNFKEVYVDRfU0Ioc2IpLT5zX3NiaCwKLQkJCQkJImNhbGwgZXh0NF9qb3VybmFsX2RpcnR5X21ldCBhZGF0YSIpOwotCQllcnIgPSBleHQ0X2pvdXJuYWxfZGlydHlfbWV0YWRhdGEoaGFuZGxlLAotCQkJCUVYVDRfU0Ioc2IpLT5zX3NiaCk7Ci0JfQotCXJldHVybiBlcnI7Ci19Ci0KIC8qCiAgKiBPcGVuIHRoZSBleHRlcm5hbCBqb3VybmFsIGRldmljZQogICovCkBAIC05MDQsNyArODQ0LDcgQEAKIGVudW0gewogCU9wdF9ic2RfZGYsIE9wdF9taW5peF9kZiwgT3B0X2dycGlkLCBPcHRfbm9ncnBpZCwKIAlPcHRfcmVzZ2lkLCBPcHRfcmVzdWlkLCBPcHRfc2IsIE9wdF9lcnJfY29udCwgT3B0X2Vycl9wYW5pYywgT3B0X2Vycl9ybywKLQlPcHRfbm91aWQzMiwgT3B0X25vY2hlY2ssIE9wdF9kZWJ1ZywgT3B0X29sZGFsbG9jLCBPcHRfb3Jsb3YsCisJT3B0X25vdWlkMzIsIE9wdF9kZWJ1ZywgT3B0X29sZGFsbG9jLCBPcHRfb3Jsb3YsCiAJT3B0X3VzZXJfeGF0dHIsIE9wdF9ub3VzZXJfeGF0dHIsIE9wdF9hY2wsIE9wdF9ub2FjbCwKIAlPcHRfcmVzZXJ2YXRpb24sIE9wdF9ub3Jlc2VydmF0aW9uLCBPcHRfbm9sb2FkLCBPcHRfbm9iaCwgT3B0X2JoLAogCU9wdF9jb21taXQsIE9wdF9qb3VybmFsX3VwZGF0ZSwgT3B0X2pvdXJuYWxfaW51bSwgT3B0X2pvdXJuYWxfZGV2LApAQCAtOTE1LDExICs4NTUsMTEgQEAKIAlPcHRfanFmbXRfdmZzb2xkLCBPcHRfanFmbXRfdmZzdjAsIE9wdF9xdW90YSwgT3B0X25vcXVvdGEsCiAJT3B0X2lnbm9yZSwgT3B0X2JhcnJpZXIsIE9wdF9lcnIsIE9wdF9yZXNpemUsIE9wdF91c3JxdW90YSwKIAlPcHRfZ3JwcXVvdGEsIE9wdF9leHRlbnRzLCBPcHRfbm9leHRlbnRzLCBPcHRfaV92ZXJzaW9uLAotCU9wdF9tYmFsbG9jLCBPcHRfbm9tYmFsbG9jLCBPcHRfc3RyaXBlLCBPcHRfZGVsYWxsb2MsIE9wdF9ub2RlbGFsbG9jLAorCU9wdF9zdHJpcGUsIE9wdF9kZWxhbGxvYywgT3B0X25vZGVsYWxsb2MsCiAJT3B0X2lub2RlX3JlYWRhaGVhZF9ibGtzCiB9OwogCi1zdGF0aWMgbWF0Y2hfdGFibGVfdCB0b2tlbnMgPSB7CitzdGF0aWMgY29uc3QgbWF0Y2hfdGFibGVfdCB0b2tlbnMgPSB7CiAJe09wdF9ic2RfZGYsICJic2RkZiJ9LAogCXtPcHRfbWluaXhfZGYsICJtaW5peGRmIn0sCiAJe09wdF9ncnBpZCwgImdycGlkIn0sCkBAIC05MzMsOCArODczLDYgQEAKIAl7T3B0X2Vycl9wYW5pYywgImVycm9ycz1wYW5pYyJ9LAogCXtPcHRfZXJyX3JvLCAiZXJyb3JzPXJlbW91bnQtcm8ifSwKIAl7T3B0X25vdWlkMzIsICJub3VpZDMyIn0sCi0Je09wdF9ub2NoZWNrLCAibm9jaGVjayJ9LAotCXtPcHRfbm9jaGVjaywgImNoZWNrPW5vbmUifSwKIAl7T3B0X2RlYnVnLCAiZGVidWcifSwKIAl7T3B0X29sZGFsbG9jLCAib2xkYWxsb2MifSwKIAl7T3B0X29ybG92LCAib3Jsb3YifSwKQEAgLTk3Myw4ICs5MTEsNiBAQAogCXtPcHRfZXh0ZW50cywgImV4dGVudHMifSwKIAl7T3B0X25vZXh0ZW50cywgIm5vZXh0ZW50cyJ9LAogCXtPcHRfaV92ZXJzaW9uLCAiaV92ZXJzaW9uIn0sCi0Je09wdF9tYmFsbG9jLCAibWJhbGxvYyJ9LAotCXtPcHRfbm9tYmFsbG9jLCAibm9tYmFsbG9jIn0sCiAJe09wdF9zdHJpcGUsICJzdHJpcGU9JXUifSwKIAl7T3B0X3Jlc2l6ZSwgInJlc2l6ZSJ9LAogCXtPcHRfZGVsYWxsb2MsICJkZWxhbGxvYyJ9LApAQCAtMTA3Myw5ICsxMDA5LDYgQEAKIAkJY2FzZSBPcHRfbm91aWQzMjoKIAkJCXNldF9vcHQoc2JpLT5zX21vdW50X29wdCwgTk9fVUlEMzIpOwogCQkJYnJlYWs7Ci0JCWNhc2UgT3B0X25vY2hlY2s6Ci0JCQljbGVhcl9vcHQoc2JpLT5zX21vdW50X29wdCwgQ0hFQ0spOwotCQkJYnJlYWs7CiAJCWNhc2UgT3B0X2RlYnVnOgogCQkJc2V0X29wdChzYmktPnNfbW91bnRfb3B0LCBERUJVRyk7CiAJCQlicmVhazsKQEAgLTE2MTgsMTQgKzE1NTEsMTQgQEAKIAkJaWYgKGJsb2NrX2JpdG1hcCA8IGZpcnN0X2Jsb2NrIHx8IGJsb2NrX2JpdG1hcCA+IGxhc3RfYmxvY2spIHsKIAkJCXByaW50ayhLRVJOX0VSUiAiRVhUNC1mczogZXh0NF9jaGVja19kZXNjcmlwdG9yczogIgogCQkJICAgICAgICJCbG9jayBiaXRtYXAgZm9yIGdyb3VwICVsdSBub3QgaW4gZ3JvdXAgIgotCQkJICAgICAgICIoYmxvY2sgJWxsdSkhIiwgaSwgYmxvY2tfYml0bWFwKTsKKwkJCSAgICAgICAiKGJsb2NrICVsbHUpIVxuIiwgaSwgYmxvY2tfYml0bWFwKTsKIAkJCXJldHVybiAwOwogCQl9CiAJCWlub2RlX2JpdG1hcCA9IGV4dDRfaW5vZGVfYml0bWFwKHNiLCBnZHApOwogCQlpZiAoaW5vZGVfYml0bWFwIDwgZmlyc3RfYmxvY2sgfHwgaW5vZGVfYml0bWFwID4gbGFzdF9ibG9jaykgewogCQkJcHJpbnRrKEtFUk5fRVJSICJFWFQ0LWZzOiBleHQ0X2NoZWNrX2Rlc2NyaXB0b3JzOiAiCiAJCQkgICAgICAgIklub2RlIGJpdG1hcCBmb3IgZ3JvdXAgJWx1IG5vdCBpbiBncm91cCAiCi0JCQkgICAgICAgIihibG9jayAlbGx1KSEiLCBpLCBpbm9kZV9iaXRtYXApOworCQkJICAgICAgICIoYmxvY2sgJWxsdSkhXG4iLCBpLCBpbm9kZV9iaXRtYXApOwogCQkJcmV0dXJuIDA7CiAJCX0KIAkJaW5vZGVfdGFibGUgPSBleHQ0X2lub2RlX3RhYmxlKHNiLCBnZHApOwpAQCAtMTYzMyw3ICsxNTY2LDcgQEAKIAkJICAgIGlub2RlX3RhYmxlICsgc2JpLT5zX2l0Yl9wZXJfZ3JvdXAgLSAxID4gbGFzdF9ibG9jaykgewogCQkJcHJpbnRrKEtFUk5fRVJSICJFWFQ0LWZzOiBleHQ0X2NoZWNrX2Rlc2NyaXB0b3JzOiAiCiAJCQkgICAgICAgIklub2RlIHRhYmxlIGZvciBncm91cCAlbHUgbm90IGluIGdyb3VwICIKLQkJCSAgICAgICAiKGJsb2NrICVsbHUpISIsIGksIGlub2RlX3RhYmxlKTsKKwkJCSAgICAgICAiKGJsb2NrICVsbHUpIVxuIiwgaSwgaW5vZGVfdGFibGUpOwogCQkJcmV0dXJuIDA7CiAJCX0KIAkJc3Bpbl9sb2NrKHNiX2JnbF9sb2NrKHNiaSwgaSkpOwpAQCAtMTc3OCwxMyArMTcxMSwxMyBAQAogICoKICAqIE5vdGUsIHRoaXMgZG9lcyAqbm90KiBjb25zaWRlciBhbnkgbWV0YWRhdGEgb3ZlcmhlYWQgZm9yIHZmcyBpX2Jsb2Nrcy4KICAqLwotc3RhdGljIGxvZmZfdCBleHQ0X21heF9zaXplKGludCBibGtiaXRzKQorc3RhdGljIGxvZmZfdCBleHQ0X21heF9zaXplKGludCBibGtiaXRzLCBpbnQgaGFzX2h1Z2VfZmlsZXMpCiB7CiAJbG9mZl90IHJlczsKIAlsb2ZmX3QgdXBwZXJfbGltaXQgPSBNQVhfTEZTX0ZJTEVTSVpFOwogCiAJLyogc21hbGwgaV9ibG9ja3MgaW4gdmZzIGlub2RlPyAqLwotCWlmIChzaXplb2YoYmxrY250X3QpIDwgc2l6ZW9mKHU2NCkpIHsKKwlpZiAoIWhhc19odWdlX2ZpbGVzIHx8IHNpemVvZihibGtjbnRfdCkgPCBzaXplb2YodTY0KSkgewogCQkvKgogCQkgKiBDT05GSUdfTFNGIGlzIG5vdCBlbmFibGVkIGltcGxpZXMgdGhlIGlub2RlCiAJCSAqIGlfYmxvY2sgcmVwcmVzZW50IHRvdGFsIGJsb2NrcyBpbiA1MTIgYnl0ZXMKQEAgLTE4MTQsNyArMTc0Nyw3IEBACiAgKiBibG9jayBsaW1pdCwgYW5kIGFsc28gYSBsaW1pdCBvZiAoMl40OCAtIDEpIDUxMi1ieXRlIHNlY3RvcnMgaW4gaV9ibG9ja3MuCiAgKiBXZSBuZWVkIHRvIGJlIDEgZmlsZXN5c3RlbSBibG9jayBsZXNzIHRoYW4gdGhlIDJeNDggc2VjdG9yIGxpbWl0LgogICovCi1zdGF0aWMgbG9mZl90IGV4dDRfbWF4X2JpdG1hcF9zaXplKGludCBiaXRzKQorc3RhdGljIGxvZmZfdCBleHQ0X21heF9iaXRtYXBfc2l6ZShpbnQgYml0cywgaW50IGhhc19odWdlX2ZpbGVzKQogewogCWxvZmZfdCByZXMgPSBFWFQ0X05ESVJfQkxPQ0tTOwogCWludCBtZXRhX2Jsb2NrczsKQEAgLTE4MjcsMTEgKzE3NjAsMTEgQEAKIAkgKiB0b3RhbCBudW1iZXIgb2YgIDUxMiBieXRlcyBibG9ja3Mgb2YgdGhlIGZpbGUKIAkgKi8KIAotCWlmIChzaXplb2YoYmxrY250X3QpIDwgc2l6ZW9mKHU2NCkpIHsKKwlpZiAoIWhhc19odWdlX2ZpbGVzIHx8IHNpemVvZihibGtjbnRfdCkgPCBzaXplb2YodTY0KSkgewogCQkvKgotCQkgKiBDT05GSUdfTFNGIGlzIG5vdCBlbmFibGVkIGltcGxpZXMgdGhlIGlub2RlCi0JCSAqIGlfYmxvY2sgcmVwcmVzZW50IHRvdGFsIGJsb2NrcyBpbiA1MTIgYnl0ZXMKLQkJICogMzIgPT0gc2l6ZSBvZiB2ZnMgaW5vZGUgaV9ibG9ja3MgKiA4CisJCSAqICFoYXNfaHVnZV9maWxlcyBvciBDT05GSUdfTFNGIGlzIG5vdCBlbmFibGVkCisJCSAqIGltcGxpZXMgdGhlIGlub2RlIGlfYmxvY2sgcmVwcmVzZW50IHRvdGFsIGJsb2NrcyBpbgorCQkgKiA1MTIgYnl0ZXMgMzIgPT0gc2l6ZSBvZiB2ZnMgaW5vZGUgaV9ibG9ja3MgKiA4CiAJCSAqLwogCQl1cHBlcl9saW1pdCA9ICgxTEwgPDwgMzIpIC0gMTsKIApAQCAtMTk0MCw3ICsxODczLDcgQEAKIAlpbnQgYmxvY2tzaXplOwogCWludCBkYl9jb3VudDsKIAlpbnQgaTsKLQlpbnQgbmVlZHNfcmVjb3Zlcnk7CisJaW50IG5lZWRzX3JlY292ZXJ5LCBoYXNfaHVnZV9maWxlczsKIAlfX2xlMzIgZmVhdHVyZXM7CiAJX191NjQgYmxvY2tzX2NvdW50OwogCWludCBlcnI7CkBAIC0yMDgxLDcgKzIwMTQsOSBAQAogCQkgICAgICAgc2ItPnNfaWQsIGxlMzJfdG9fY3B1KGZlYXR1cmVzKSk7CiAJCWdvdG8gZmFpbGVkX21vdW50OwogCX0KLQlpZiAoRVhUNF9IQVNfUk9fQ09NUEFUX0ZFQVRVUkUoc2IsIEVYVDRfRkVBVFVSRV9ST19DT01QQVRfSFVHRV9GSUxFKSkgeworCWhhc19odWdlX2ZpbGVzID0gRVhUNF9IQVNfUk9fQ09NUEFUX0ZFQVRVUkUoc2IsCisJCQkJICAgIEVYVDRfRkVBVFVSRV9ST19DT01QQVRfSFVHRV9GSUxFKTsKKwlpZiAoaGFzX2h1Z2VfZmlsZXMpIHsKIAkJLyoKIAkJICogTGFyZ2UgZmlsZSBzaXplIGVuYWJsZWQgZmlsZSBzeXN0ZW0gY2FuIG9ubHkgYmUKIAkJICogbW91bnQgaWYga2VybmVsIGlzIGJ1aWxkIHdpdGggQ09ORklHX0xTRgpAQCAtMjEzMSw4ICsyMDY2LDkgQEAKIAkJfQogCX0KIAotCXNiaS0+c19iaXRtYXBfbWF4Ynl0ZXMgPSBleHQ0X21heF9iaXRtYXBfc2l6ZShzYi0+c19ibG9ja3NpemVfYml0cyk7Ci0Jc2ItPnNfbWF4Ynl0ZXMgPSBleHQ0X21heF9zaXplKHNiLT5zX2Jsb2Nrc2l6ZV9iaXRzKTsKKwlzYmktPnNfYml0bWFwX21heGJ5dGVzID0gZXh0NF9tYXhfYml0bWFwX3NpemUoc2ItPnNfYmxvY2tzaXplX2JpdHMsCisJCQkJCQkgICAgICBoYXNfaHVnZV9maWxlcyk7CisJc2ItPnNfbWF4Ynl0ZXMgPSBleHQ0X21heF9zaXplKHNiLT5zX2Jsb2Nrc2l6ZV9iaXRzLCBoYXNfaHVnZV9maWxlcyk7CiAKIAlpZiAobGUzMl90b19jcHUoZXMtPnNfcmV2X2xldmVsKSA9PSBFWFQ0X0dPT0RfT0xEX1JFVikgewogCQlzYmktPnNfaW5vZGVfc2l6ZSA9IEVYVDRfR09PRF9PTERfSU5PREVfU0laRTsKQEAgLTI0NTYsNiArMjM5MiwyMSBAQAogCQkJImF2YWlsYWJsZS5cbiIpOwogCX0KIAorCWlmICh0ZXN0X29wdChzYiwgREFUQV9GTEFHUykgPT0gRVhUNF9NT1VOVF9KT1VSTkFMX0RBVEEpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiRVhUNC1mczogSWdub3JpbmcgZGVsYWxsb2Mgb3B0aW9uIC0gIgorCQkJCSJyZXF1ZXN0ZWQgZGF0YSBqb3VybmFsaW5nIG1vZGVcbiIpOworCQljbGVhcl9vcHQoc2JpLT5zX21vdW50X29wdCwgREVMQUxMT0MpOworCX0gZWxzZSBpZiAodGVzdF9vcHQoc2IsIERFTEFMTE9DKSkKKwkJcHJpbnRrKEtFUk5fSU5GTyAiRVhUNC1mczogZGVsYXllZCBhbGxvY2F0aW9uIGVuYWJsZWRcbiIpOworCisJZXh0NF9leHRfaW5pdChzYik7CisJZXJyID0gZXh0NF9tYl9pbml0KHNiLCBuZWVkc19yZWNvdmVyeSk7CisJaWYgKGVycikgeworCQlwcmludGsoS0VSTl9FUlIgIkVYVDQtZnM6IGZhaWxlZCB0byBpbml0YWxpemUgbWJhbGxvYyAoJWQpXG4iLAorCQkgICAgICAgZXJyKTsKKwkJZ290byBmYWlsZWRfbW91bnQ0OworCX0KKwogCS8qCiAJICogYWtwbTogY29yZSByZWFkX3N1cGVyKCkgY2FsbHMgaW4gaGVyZSB3aXRoIHRoZSBzdXBlcmJsb2NrIGxvY2tlZC4KIAkgKiBUaGF0IGRlYWRsb2NrcywgYmVjYXVzZSBvcnBoYW4gY2xlYW51cCBuZWVkcyB0byBsb2NrIHRoZSBzdXBlcmJsb2NrCkBAIC0yNDc1LDIxICsyNDI2LDYgQEAKIAkgICAgICAgdGVzdF9vcHQoc2IsIERBVEFfRkxBR1MpID09IEVYVDRfTU9VTlRfT1JERVJFRF9EQVRBID8gIm9yZGVyZWQiOgogCSAgICAgICAid3JpdGViYWNrIik7CiAKLQlpZiAodGVzdF9vcHQoc2IsIERBVEFfRkxBR1MpID09IEVYVDRfTU9VTlRfSk9VUk5BTF9EQVRBKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIkVYVDQtZnM6IElnbm9yaW5nIGRlbGFsbG9jIG9wdGlvbiAtICIKLQkJCQkicmVxdWVzdGVkIGRhdGEgam91cm5hbGluZyBtb2RlXG4iKTsKLQkJY2xlYXJfb3B0KHNiaS0+c19tb3VudF9vcHQsIERFTEFMTE9DKTsKLQl9IGVsc2UgaWYgKHRlc3Rfb3B0KHNiLCBERUxBTExPQykpCi0JCXByaW50ayhLRVJOX0lORk8gIkVYVDQtZnM6IGRlbGF5ZWQgYWxsb2NhdGlvbiBlbmFibGVkXG4iKTsKLQotCWV4dDRfZXh0X2luaXQoc2IpOwotCWVyciA9IGV4dDRfbWJfaW5pdChzYiwgbmVlZHNfcmVjb3ZlcnkpOwotCWlmIChlcnIpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJFWFQ0LWZzOiBmYWlsZWQgdG8gaW5pdGFsaXplIG1iYWxsb2MgKCVkKVxuIiwKLQkJICAgICAgIGVycik7Ci0JCWdvdG8gZmFpbGVkX21vdW50NDsKLQl9Ci0KIAlsb2NrX2tlcm5lbCgpOwogCXJldHVybiAwOwogCmRpZmYgLS1naXQgYS9mcy9mYXQvaW5vZGUuYyBiL2ZzL2ZhdC9pbm9kZS5jCmluZGV4IDgwZmYzMzguLmQxMmNkZjIgMTAwNjQ0Ci0tLSBhL2ZzL2ZhdC9pbm9kZS5jCisrKyBiL2ZzL2ZhdC9pbm9kZS5jCkBAIC04NTUsNyArODU1LDcgQEAKIAlPcHRfb2Jzb2xhdGUsIE9wdF9mbHVzaCwgT3B0X3R6X3V0YywgT3B0X2VyciwKIH07CiAKLXN0YXRpYyBtYXRjaF90YWJsZV90IGZhdF90b2tlbnMgPSB7CitzdGF0aWMgY29uc3QgbWF0Y2hfdGFibGVfdCBmYXRfdG9rZW5zID0gewogCXtPcHRfY2hlY2tfciwgImNoZWNrPXJlbGF4ZWQifSwKIAl7T3B0X2NoZWNrX3MsICJjaGVjaz1zdHJpY3QifSwKIAl7T3B0X2NoZWNrX24sICJjaGVjaz1ub3JtYWwifSwKQEAgLTg5MCwxNCArODkwLDE0IEBACiAJe09wdF90el91dGMsICJ0ej1VVEMifSwKIAl7T3B0X2VyciwgTlVMTH0sCiB9Owotc3RhdGljIG1hdGNoX3RhYmxlX3QgbXNkb3NfdG9rZW5zID0geworc3RhdGljIGNvbnN0IG1hdGNoX3RhYmxlX3QgbXNkb3NfdG9rZW5zID0gewogCXtPcHRfbm9kb3RzLCAibm9kb3RzIn0sCiAJe09wdF9ub2RvdHMsICJkb3RzT0s9bm8ifSwKIAl7T3B0X2RvdHMsICJkb3RzIn0sCiAJe09wdF9kb3RzLCAiZG90c09LPXllcyJ9LAogCXtPcHRfZXJyLCBOVUxMfQogfTsKLXN0YXRpYyBtYXRjaF90YWJsZV90IHZmYXRfdG9rZW5zID0geworc3RhdGljIGNvbnN0IG1hdGNoX3RhYmxlX3QgdmZhdF90b2tlbnMgPSB7CiAJe09wdF9jaGFyc2V0LCAiaW9jaGFyc2V0PSVzIn0sCiAJe09wdF9zaG9ydG5hbWVfbG93ZXIsICJzaG9ydG5hbWU9bG93ZXIifSwKIAl7T3B0X3Nob3J0bmFtZV93aW45NSwgInNob3J0bmFtZT13aW45NSJ9LApkaWZmIC0tZ2l0IGEvZnMvZnMtd3JpdGViYWNrLmMgYi9mcy9mcy13cml0ZWJhY2suYwppbmRleCAyNWFkZmMzLi5kMGZmMGI4IDEwMDY0NAotLS0gYS9mcy9mcy13cml0ZWJhY2suYworKysgYi9mcy9mcy13cml0ZWJhY2suYwpAQCAtOCw3ICs4LDcgQEAKICAqIHBhZ2VzIGFnYWluc3QgaW5vZGVzLiAgaWU6IGRhdGEgd3JpdGViYWNrLiAgV3JpdGVvdXQgb2YgdGhlCiAgKiBpbm9kZSBpdHNlbGYgaXMgbm90IGhhbmRsZWQgaGVyZS4KICAqCi0gKiAxMEFwcjIwMDIJYWtwbUB6aXAuY29tLmF1CisgKiAxMEFwcjIwMDIJQW5kcmV3IE1vcnRvbgogICoJCVNwbGl0IG91dCBvZiBmcy9pbm9kZS5jCiAgKgkJQWRkaXRpb25zIGZvciBhZGRyZXNzX3NwYWNlLWJhc2VkIHdyaXRlYmFjawogICovCmRpZmYgLS1naXQgYS9mcy9mdXNlL2ZpbGUuYyBiL2ZzL2Z1c2UvZmlsZS5jCmluZGV4IDJiYWRhNmIuLjM0OTMwYTkgMTAwNjQ0Ci0tLSBhL2ZzL2Z1c2UvZmlsZS5jCisrKyBiL2ZzL2Z1c2UvZmlsZS5jCkBAIC0xMDEsNiArMTAxLDggQEAKIAkJZmlsZS0+Zl9vcCA9ICZmdXNlX2RpcmVjdF9pb19maWxlX29wZXJhdGlvbnM7CiAJaWYgKCEob3V0YXJnLT5vcGVuX2ZsYWdzICYgRk9QRU5fS0VFUF9DQUNIRSkpCiAJCWludmFsaWRhdGVfaW5vZGVfcGFnZXMyKGlub2RlLT5pX21hcHBpbmcpOworCWlmIChvdXRhcmctPm9wZW5fZmxhZ3MgJiBGT1BFTl9OT05TRUVLQUJMRSkKKwkJbm9uc2Vla2FibGVfb3Blbihpbm9kZSwgZmlsZSk7CiAJZmYtPmZoID0gb3V0YXJnLT5maDsKIAlmaWxlLT5wcml2YXRlX2RhdGEgPSBmdXNlX2ZpbGVfZ2V0KGZmKTsKIH0KQEAgLTE0NDgsNiArMTQ1MCw5IEBACiAJbXV0ZXhfbG9jaygmaW5vZGUtPmlfbXV0ZXgpOwogCXN3aXRjaCAob3JpZ2luKSB7CiAJY2FzZSBTRUVLX0VORDoKKwkJcmV0dmFsID0gZnVzZV91cGRhdGVfYXR0cmlidXRlcyhpbm9kZSwgTlVMTCwgZmlsZSwgTlVMTCk7CisJCWlmIChyZXR2YWwpCisJCQlyZXR1cm4gcmV0dmFsOwogCQlvZmZzZXQgKz0gaV9zaXplX3JlYWQoaW5vZGUpOwogCQlicmVhazsKIAljYXNlIFNFRUtfQ1VSOgpkaWZmIC0tZ2l0IGEvZnMvZnVzZS9mdXNlX2kuaCBiL2ZzL2Z1c2UvZnVzZV9pLmgKaW5kZXggM2E4NzYwNy4uMzVhY2NmZCAxMDA2NDQKLS0tIGEvZnMvZnVzZS9mdXNlX2kuaAorKysgYi9mcy9mdXNlL2Z1c2VfaS5oCkBAIC02LDYgKzYsOSBAQAogICBTZWUgdGhlIGZpbGUgQ09QWUlORy4KICovCiAKKyNpZm5kZWYgX0ZTX0ZVU0VfSV9ICisjZGVmaW5lIF9GU19GVVNFX0lfSAorCiAjaW5jbHVkZSA8bGludXgvZnVzZS5oPgogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvbW91bnQuaD4KQEAgLTY1NSwzICs2NTgsNSBAQAogdm9pZCBmdXNlX3JlbGVhc2Vfbm93cml0ZShzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKIAogdTY0IGZ1c2VfZ2V0X2F0dHJfdmVyc2lvbihzdHJ1Y3QgZnVzZV9jb25uICpmYyk7CisKKyNlbmRpZiAvKiBfRlNfRlVTRV9JX0ggKi8KZGlmZiAtLWdpdCBhL2ZzL2Z1c2UvaW5vZGUuYyBiL2ZzL2Z1c2UvaW5vZGUuYwppbmRleCBkMjI0OWYxLi41NGIxZjBlIDEwMDY0NAotLS0gYS9mcy9mdXNlL2lub2RlLmMKKysrIGIvZnMvZnVzZS9pbm9kZS5jCkBAIC0zNTQsNyArMzU0LDcgQEAKIAlPUFRfRVJSCiB9OwogCi1zdGF0aWMgbWF0Y2hfdGFibGVfdCB0b2tlbnMgPSB7CitzdGF0aWMgY29uc3QgbWF0Y2hfdGFibGVfdCB0b2tlbnMgPSB7CiAJe09QVF9GRCwJCQkiZmQ9JXUifSwKIAl7T1BUX1JPT1RNT0RFLAkJCSJyb290bW9kZT0lbyJ9LAogCXtPUFRfVVNFUl9JRCwJCQkidXNlcl9pZD0ldSJ9LApAQCAtODY1LDcgKzg2NSw3IEBACiAJaWYgKGlzX2JkZXYpIHsKIAkJZmMtPmRlc3Ryb3lfcmVxID0gZnVzZV9yZXF1ZXN0X2FsbG9jKCk7CiAJCWlmICghZmMtPmRlc3Ryb3lfcmVxKQotCQkJZ290byBlcnJfcHV0X3Jvb3Q7CisJCQlnb3RvIGVycl9mcmVlX2luaXRfcmVxOwogCX0KIAogCW11dGV4X2xvY2soJmZ1c2VfbXV0ZXgpOwpAQCAtODk1LDYgKzg5NSw3IEBACiAKICBlcnJfdW5sb2NrOgogCW11dGV4X3VubG9jaygmZnVzZV9tdXRleCk7CisgZXJyX2ZyZWVfaW5pdF9yZXE6CiAJZnVzZV9yZXF1ZXN0X2ZyZWUoaW5pdF9yZXEpOwogIGVycl9wdXRfcm9vdDoKIAlkcHV0KHJvb3RfZGVudHJ5KTsKZGlmZiAtLWdpdCBhL2ZzL2dmczIvbW91bnQuYyBiL2ZzL2dmczIvbW91bnQuYwppbmRleCBkZjQ4MzMzLi5mOTZlYjkwIDEwMDY0NAotLS0gYS9mcy9nZnMyL21vdW50LmMKKysrIGIvZnMvZ2ZzMi9tb3VudC5jCkBAIC00Niw3ICs0Niw3IEBACiAJT3B0X2VyciwKIH07CiAKLXN0YXRpYyBtYXRjaF90YWJsZV90IHRva2VucyA9IHsKK3N0YXRpYyBjb25zdCBtYXRjaF90YWJsZV90IHRva2VucyA9IHsKIAl7T3B0X2xvY2twcm90bywgImxvY2twcm90bz0lcyJ9LAogCXtPcHRfbG9ja3RhYmxlLCAibG9ja3RhYmxlPSVzIn0sCiAJe09wdF9ob3N0ZGF0YSwgImhvc3RkYXRhPSVzIn0sCmRpZmYgLS1naXQgYS9mcy9oZnMvY2F0YWxvZy5jIGIvZnMvaGZzL2NhdGFsb2cuYwppbmRleCBiYTg1MTU3Li42ZDk4ZjExIDEwMDY0NAotLS0gYS9mcy9oZnMvY2F0YWxvZy5jCisrKyBiL2ZzL2hmcy9jYXRhbG9nLmMKQEAgLTE5MCw2ICsxOTAsMTAgQEAKIAogCWZkLT5zZWFyY2hfa2V5LT5jYXQuUGFySUQgPSByZWMudGhyZWFkLlBhcklEOwogCWxlbiA9IGZkLT5zZWFyY2hfa2V5LT5jYXQuQ05hbWUubGVuID0gcmVjLnRocmVhZC5DTmFtZS5sZW47CisJaWYgKGxlbiA+IEhGU19OQU1FTEVOKSB7CisJCXByaW50ayhLRVJOX0VSUiAiaGZzOiBiYWQgY2F0YWxvZyBuYW1lbGVuZ3RoXG4iKTsKKwkJcmV0dXJuIC1FSU87CisJfQogCW1lbWNweShmZC0+c2VhcmNoX2tleS0+Y2F0LkNOYW1lLm5hbWUsIHJlYy50aHJlYWQuQ05hbWUubmFtZSwgbGVuKTsKIAlyZXR1cm4gaGZzX2JyZWNfZmluZChmZCk7CiB9CmRpZmYgLS1naXQgYS9mcy9oZnMvc3VwZXIuYyBiL2ZzL2hmcy9zdXBlci5jCmluZGV4IDRhYmIxMDQuLjNjN2M3NjMgMTAwNjQ0Ci0tLSBhL2ZzL2hmcy9zdXBlci5jCisrKyBiL2ZzL2hmcy9zdXBlci5jCkBAIC0xNzMsNyArMTczLDcgQEAKIAlvcHRfZXJyCiB9OwogCi1zdGF0aWMgbWF0Y2hfdGFibGVfdCB0b2tlbnMgPSB7CitzdGF0aWMgY29uc3QgbWF0Y2hfdGFibGVfdCB0b2tlbnMgPSB7CiAJeyBvcHRfdWlkLCAidWlkPSV1IiB9LAogCXsgb3B0X2dpZCwgImdpZD0ldSIgfSwKIAl7IG9wdF91bWFzaywgInVtYXNrPSVvIiB9LApkaWZmIC0tZ2l0IGEvZnMvaGZzcGx1cy9iaXRtYXAuYyBiL2ZzL2hmc3BsdXMvYml0bWFwLmMKaW5kZXggZDEyOGEyNWIuLmVhMzBhZmMgMTAwNjQ0Ci0tLSBhL2ZzL2hmc3BsdXMvYml0bWFwLmMKKysrIGIvZnMvaGZzcGx1cy9iaXRtYXAuYwpAQCAtMzIsNiArMzIsMTAgQEAKIAltdXRleF9sb2NrKCZIRlNQTFVTX1NCKHNiKS5hbGxvY19maWxlLT5pX211dGV4KTsKIAltYXBwaW5nID0gSEZTUExVU19TQihzYikuYWxsb2NfZmlsZS0+aV9tYXBwaW5nOwogCXBhZ2UgPSByZWFkX21hcHBpbmdfcGFnZShtYXBwaW5nLCBvZmZzZXQgLyBQQUdFX0NBQ0hFX0JJVFMsIE5VTEwpOworCWlmIChJU19FUlIocGFnZSkpIHsKKwkJc3RhcnQgPSBzaXplOworCQlnb3RvIG91dDsKKwl9CiAJcHB0ciA9IGttYXAocGFnZSk7CiAJY3VyciA9IHBwdHIgKyAob2Zmc2V0ICYgKFBBR0VfQ0FDSEVfQklUUyAtIDEpKSAvIDMyOwogCWkgPSBvZmZzZXQgJSAzMjsKQEAgLTczLDYgKzc3LDEwIEBACiAJCQlicmVhazsKIAkJcGFnZSA9IHJlYWRfbWFwcGluZ19wYWdlKG1hcHBpbmcsIG9mZnNldCAvIFBBR0VfQ0FDSEVfQklUUywKIAkJCQkJIE5VTEwpOworCQlpZiAoSVNfRVJSKHBhZ2UpKSB7CisJCQlzdGFydCA9IHNpemU7CisJCQlnb3RvIG91dDsKKwkJfQogCQljdXJyID0gcHB0ciA9IGttYXAocGFnZSk7CiAJCWlmICgoc2l6ZSBeIG9mZnNldCkgLyBQQUdFX0NBQ0hFX0JJVFMpCiAJCQllbmQgPSBwcHRyICsgUEFHRV9DQUNIRV9CSVRTIC8gMzI7CkBAIC0xMjAsNiArMTI4LDEwIEBACiAJCW9mZnNldCArPSBQQUdFX0NBQ0hFX0JJVFM7CiAJCXBhZ2UgPSByZWFkX21hcHBpbmdfcGFnZShtYXBwaW5nLCBvZmZzZXQgLyBQQUdFX0NBQ0hFX0JJVFMsCiAJCQkJCSBOVUxMKTsKKwkJaWYgKElTX0VSUihwYWdlKSkgeworCQkJc3RhcnQgPSBzaXplOworCQkJZ290byBvdXQ7CisJCX0KIAkJcHB0ciA9IGttYXAocGFnZSk7CiAJCWN1cnIgPSBwcHRyOwogCQllbmQgPSBwcHRyICsgUEFHRV9DQUNIRV9CSVRTIC8gMzI7CmRpZmYgLS1naXQgYS9mcy9oZnNwbHVzL2NhdGFsb2cuYyBiL2ZzL2hmc3BsdXMvY2F0YWxvZy5jCmluZGV4IGJhMTE3YzQ0Li5mNjg3NGFjIDEwMDY0NAotLS0gYS9mcy9oZnNwbHVzL2NhdGFsb2cuYworKysgYi9mcy9oZnNwbHVzL2NhdGFsb2cuYwpAQCAtMTY4LDYgKzE2OCwxMSBAQAogCQlyZXR1cm4gLUVJTzsKIAl9CiAKKwlpZiAoYmUxNl90b19jcHUodG1wLnRocmVhZC5ub2RlTmFtZS5sZW5ndGgpID4gMjU1KSB7CisJCXByaW50ayhLRVJOX0VSUiAiaGZzOiBjYXRhbG9nIG5hbWUgbGVuZ3RoIGNvcnJ1cHRlZFxuIik7CisJCXJldHVybiAtRUlPOworCX0KKwogCWhmc3BsdXNfY2F0X2J1aWxkX2tleV91bmkoZmQtPnNlYXJjaF9rZXksIGJlMzJfdG9fY3B1KHRtcC50aHJlYWQucGFyZW50SUQpLAogCQkJCSAmdG1wLnRocmVhZC5ub2RlTmFtZSk7CiAJcmV0dXJuIGhmc19icmVjX2ZpbmQoZmQpOwpkaWZmIC0tZ2l0IGEvZnMvaGZzcGx1cy9leHRlbnRzLmMgYi9mcy9oZnNwbHVzL2V4dGVudHMuYwppbmRleCBmZWM4ZjYxLi4wMDIyZWVjIDEwMDY0NAotLS0gYS9mcy9oZnNwbHVzL2V4dGVudHMuYworKysgYi9mcy9oZnNwbHVzL2V4dGVudHMuYwpAQCAtMTk5LDYgKzE5OSw5IEBACiAJCWdvdG8gZG9uZTsKIAl9CiAKKwlpZiAoaW5vZGUtPmlfaW5vID09IEhGU1BMVVNfRVhUX0NOSUQpCisJCXJldHVybiAtRUlPOworCiAJbXV0ZXhfbG9jaygmSEZTUExVU19JKGlub2RlKS5leHRlbnRzX2xvY2spOwogCXJlcyA9IGhmc3BsdXNfZXh0X3JlYWRfZXh0ZW50KGlub2RlLCBhYmxvY2spOwogCWlmICghcmVzKSB7CmRpZmYgLS1naXQgYS9mcy9oZnNwbHVzL2lub2RlLmMgYi9mcy9oZnNwbHVzL2lub2RlLmMKaW5kZXggYjA4NWQ2NC4uOTYzYmU2NCAxMDA2NDQKLS0tIGEvZnMvaGZzcGx1cy9pbm9kZS5jCisrKyBiL2ZzL2hmc3BsdXMvaW5vZGUuYwpAQCAtMjU0LDYgKzI1NCw4IEBACiB7CiAJaWYgKEhGU1BMVVNfSVNfUlNSQyhpbm9kZSkpCiAJCWlub2RlID0gSEZTUExVU19JKGlub2RlKS5yc3JjX2lub2RlOworCWlmICghKGZpbGUtPmZfZmxhZ3MgJiBPX0xBUkdFRklMRSkgJiYgaV9zaXplX3JlYWQoaW5vZGUpID4gTUFYX05PTl9MRlMpCisJCXJldHVybiAtRU9WRVJGTE9XOwogCWF0b21pY19pbmMoJkhGU1BMVVNfSShpbm9kZSkub3BlbmNudCk7CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9mcy9oZnNwbHVzL29wdGlvbnMuYyBiL2ZzL2hmc3BsdXMvb3B0aW9ucy5jCmluZGV4IDk5OTdjYmYuLjk2OTljNTYgMTAwNjQ0Ci0tLSBhL2ZzL2hmc3BsdXMvb3B0aW9ucy5jCisrKyBiL2ZzL2hmc3BsdXMvb3B0aW9ucy5jCkBAIC0yNSw3ICsyNSw3IEBACiAJb3B0X2ZvcmNlLCBvcHRfZXJyCiB9OwogCi1zdGF0aWMgbWF0Y2hfdGFibGVfdCB0b2tlbnMgPSB7CitzdGF0aWMgY29uc3QgbWF0Y2hfdGFibGVfdCB0b2tlbnMgPSB7CiAJeyBvcHRfY3JlYXRvciwgImNyZWF0b3I9JXMiIH0sCiAJeyBvcHRfdHlwZSwgInR5cGU9JXMiIH0sCiAJeyBvcHRfdW1hc2ssICJ1bWFzaz0lbyIgfSwKZGlmZiAtLWdpdCBhL2ZzL2hmc3BsdXMvc3VwZXIuYyBiL2ZzL2hmc3BsdXMvc3VwZXIuYwppbmRleCBlODM0ZTU3Li5lYjc0NTMxIDEwMDY0NAotLS0gYS9mcy9oZnNwbHVzL3N1cGVyLmMKKysrIGIvZnMvaGZzcGx1cy9zdXBlci5jCkBAIC0zNTYsNyArMzU2LDcgQEAKIAl9IGVsc2UgaWYgKHZoZHItPmF0dHJpYnV0ZXMgJiBjcHVfdG9fYmUzMihIRlNQTFVTX1ZPTF9TT0ZUTE9DSykpIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiaGZzOiBGaWxlc3lzdGVtIGlzIG1hcmtlZCBsb2NrZWQsIG1vdW50aW5nIHJlYWQtb25seS5cbiIpOwogCQlzYi0+c19mbGFncyB8PSBNU19SRE9OTFk7Ci0JfSBlbHNlIGlmICh2aGRyLT5hdHRyaWJ1dGVzICYgY3B1X3RvX2JlMzIoSEZTUExVU19WT0xfSk9VUk5BTEVEKSkgeworCX0gZWxzZSBpZiAoKHZoZHItPmF0dHJpYnV0ZXMgJiBjcHVfdG9fYmUzMihIRlNQTFVTX1ZPTF9KT1VSTkFMRUQpKSAmJiAhKHNiLT5zX2ZsYWdzICYgTVNfUkRPTkxZKSkgewogCQlwcmludGsoS0VSTl9XQVJOSU5HICJoZnM6IHdyaXRlIGFjY2VzcyB0byBhIGpvdXJuYWxlZCBmaWxlc3lzdGVtIGlzIG5vdCBzdXBwb3J0ZWQsICIKIAkJICAgICAgICJ1c2UgdGhlIGZvcmNlIG9wdGlvbiBhdCB5b3VyIG93biByaXNrLCBtb3VudGluZyByZWFkLW9ubHkuXG4iKTsKIAkJc2ItPnNfZmxhZ3MgfD0gTVNfUkRPTkxZOwpkaWZmIC0tZ2l0IGEvZnMvaHBmcy9zdXBlci5jIGIvZnMvaHBmcy9zdXBlci5jCmluZGV4IGI4YWU5YzkuLjI5YWQ0NjEgMTAwNjQ0Ci0tLSBhL2ZzL2hwZnMvc3VwZXIuYworKysgYi9mcy9ocGZzL3N1cGVyLmMKQEAgLTIxNSw3ICsyMTUsNyBAQAogCU9wdF90aW1lc2hpZnQsIE9wdF9lcnIsCiB9OwogCi1zdGF0aWMgbWF0Y2hfdGFibGVfdCB0b2tlbnMgPSB7CitzdGF0aWMgY29uc3QgbWF0Y2hfdGFibGVfdCB0b2tlbnMgPSB7CiAJe09wdF9oZWxwLCAiaGVscCJ9LAogCXtPcHRfdWlkLCAidWlkPSV1In0sCiAJe09wdF9naWQsICJnaWQ9JXUifSwKZGlmZiAtLWdpdCBhL2ZzL2h1Z2V0bGJmcy9pbm9kZS5jIGIvZnMvaHVnZXRsYmZzL2lub2RlLmMKaW5kZXggM2Y1ODkyMy4uNjFlZGM3MCAxMDA2NDQKLS0tIGEvZnMvaHVnZXRsYmZzL2lub2RlLmMKKysrIGIvZnMvaHVnZXRsYmZzL2lub2RlLmMKQEAgLTU3LDcgKzU3LDcgQEAKIAlPcHRfZXJyLAogfTsKIAotc3RhdGljIG1hdGNoX3RhYmxlX3QgdG9rZW5zID0geworc3RhdGljIGNvbnN0IG1hdGNoX3RhYmxlX3QgdG9rZW5zID0gewogCXtPcHRfc2l6ZSwJInNpemU9JXMifSwKIAl7T3B0X25yX2lub2RlcywJIm5yX2lub2Rlcz0lcyJ9LAogCXtPcHRfbW9kZSwJIm1vZGU9JW8ifSwKZGlmZiAtLWdpdCBhL2ZzL2lzb2ZzL2lub2RlLmMgYi9mcy9pc29mcy9pbm9kZS5jCmluZGV4IDI2OTQ4YTYuLjNmOGFmMGYgMTAwNjQ0Ci0tLSBhL2ZzL2lzb2ZzL2lub2RlLmMKKysrIGIvZnMvaXNvZnMvaW5vZGUuYwpAQCAtMzEwLDcgKzMxMCw3IEBACiAJT3B0X25vY29tcHJlc3MsIE9wdF9oaWRlLCBPcHRfc2hvd2Fzc29jLCBPcHRfZG1vZGUsCiB9OwogCi1zdGF0aWMgbWF0Y2hfdGFibGVfdCB0b2tlbnMgPSB7CitzdGF0aWMgY29uc3QgbWF0Y2hfdGFibGVfdCB0b2tlbnMgPSB7CiAJe09wdF9ub3JvY2ssICJub3JvY2sifSwKIAl7T3B0X25vam9saWV0LCAibm9qb2xpZXQifSwKIAl7T3B0X3VuaGlkZSwgInVuaGlkZSJ9LApkaWZmIC0tZ2l0IGEvZnMvamJkL0tjb25maWcgYi9mcy9qYmQvS2NvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZTI4YmVlCi0tLSAvZGV2L251bGwKKysrIGIvZnMvamJkL0tjb25maWcKQEAgLTAsMCArMSwzMCBAQAorY29uZmlnIEpCRAorCXRyaXN0YXRlCisJaGVscAorCSAgVGhpcyBpcyBhIGdlbmVyaWMgam91cm5hbGxpbmcgbGF5ZXIgZm9yIGJsb2NrIGRldmljZXMuICBJdCBpcworCSAgY3VycmVudGx5IHVzZWQgYnkgdGhlIGV4dDMgZmlsZSBzeXN0ZW0sIGJ1dCBpdCBjb3VsZCBhbHNvIGJlCisJICB1c2VkIHRvIGFkZCBqb3VybmFsIHN1cHBvcnQgdG8gb3RoZXIgZmlsZSBzeXN0ZW1zIG9yIGJsb2NrCisJICBkZXZpY2VzIHN1Y2ggYXMgUkFJRCBvciBMVk0uCisKKwkgIElmIHlvdSBhcmUgdXNpbmcgdGhlIGV4dDMgZmlsZSBzeXN0ZW0sIHlvdSBuZWVkIHRvIHNheSBZIGhlcmUuCisJICBJZiB5b3UgYXJlIG5vdCB1c2luZyBleHQzIHRoZW4geW91IHdpbGwgcHJvYmFibHkgd2FudCB0byBzYXkgTi4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRldmljZSBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZSB3aWxsIGJlCisJICBjYWxsZWQgamJkLiAgSWYgeW91IGFyZSBjb21waWxpbmcgZXh0MyBpbnRvIHRoZSBrZXJuZWwsIHlvdQorCSAgY2Fubm90IGNvbXBpbGUgdGhpcyBjb2RlIGFzIGEgbW9kdWxlLgorCitjb25maWcgSkJEX0RFQlVHCisJYm9vbCAiSkJEIChleHQzKSBkZWJ1Z2dpbmcgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIEpCRCAmJiBERUJVR19GUworCWhlbHAKKwkgIElmIHlvdSBhcmUgdXNpbmcgdGhlIGV4dDMgam91cm5hbGVkIGZpbGUgc3lzdGVtIChvciBwb3RlbnRpYWxseSBhbnkKKwkgIG90aGVyIGZpbGUgc3lzdGVtL2RldmljZSB1c2luZyBKQkQpLCB0aGlzIG9wdGlvbiBhbGxvd3MgeW91IHRvCisJICBlbmFibGUgZGVidWdnaW5nIG91dHB1dCB3aGlsZSB0aGUgc3lzdGVtIGlzIHJ1bm5pbmcsIGluIG9yZGVyIHRvCisJICBoZWxwIHRyYWNrIGRvd24gYW55IHByb2JsZW1zIHlvdSBhcmUgaGF2aW5nLiAgQnkgZGVmYXVsdCB0aGUKKwkgIGRlYnVnZ2luZyBvdXRwdXQgd2lsbCBiZSB0dXJuZWQgb2ZmLgorCisJICBJZiB5b3Ugc2VsZWN0IFkgaGVyZSwgdGhlbiB5b3Ugd2lsbCBiZSBhYmxlIHRvIHR1cm4gb24gZGVidWdnaW5nCisJICB3aXRoICJlY2hvIE4gPiAvc3lzL2tlcm5lbC9kZWJ1Zy9qYmQvamJkLWRlYnVnIiwgd2hlcmUgTiBpcyBhCisJICBudW1iZXIgYmV0d2VlbiAxIGFuZCA1LCB0aGUgaGlnaGVyIHRoZSBudW1iZXIsIHRoZSBtb3JlIGRlYnVnZ2luZworCSAgb3V0cHV0IGlzIGdlbmVyYXRlZC4gIFRvIHR1cm4gZGVidWdnaW5nIG9mZiBhZ2FpbiwgZG8KKwkgICJlY2hvIDAgPiAvc3lzL2tlcm5lbC9kZWJ1Zy9qYmQvamJkLWRlYnVnIi4KZGlmZiAtLWdpdCBhL2ZzL2piZC9jb21taXQuYyBiL2ZzL2piZC9jb21taXQuYwppbmRleCBhZTA4YzA1Li4yNTcxOWQ5IDEwMDY0NAotLS0gYS9mcy9qYmQvY29tbWl0LmMKKysrIGIvZnMvamJkL2NvbW1pdC5jCkBAIC00ODIsNiArNDgyLDggQEAKIAkJcHJpbnRrKEtFUk5fV0FSTklORwogCQkJIkpCRDogRGV0ZWN0ZWQgSU8gZXJyb3JzIHdoaWxlIGZsdXNoaW5nIGZpbGUgZGF0YSAiCiAJCQkib24gJXNcbiIsIGJkZXZuYW1lKGpvdXJuYWwtPmpfZnNfZGV2LCBiKSk7CisJCWlmIChqb3VybmFsLT5qX2ZsYWdzICYgSkZTX0FCT1JUX09OX1NZTkNEQVRBX0VSUikKKwkJCWpvdXJuYWxfYWJvcnQoam91cm5hbCwgZXJyKTsKIAkJZXJyID0gMDsKIAl9CiAKQEAgLTUxOCw5ICs1MjAsMTAgQEAKIAkJamggPSBjb21taXRfdHJhbnNhY3Rpb24tPnRfYnVmZmVyczsKIAogCQkvKiBJZiB3ZSdyZSBpbiBhYm9ydCBtb2RlLCB3ZSBqdXN0IHVuLWpvdXJuYWwgdGhlIGJ1ZmZlciBhbmQKLQkJICAgcmVsZWFzZSBpdCBmb3IgYmFja2dyb3VuZCB3cml0aW5nLiAqLworCQkgICByZWxlYXNlIGl0LiAqLwogCiAJCWlmIChpc19qb3VybmFsX2Fib3J0ZWQoam91cm5hbCkpIHsKKwkJCWNsZWFyX2J1ZmZlcl9qYmRkaXJ0eShqaDJiaChqaCkpOwogCQkJSkJVRkZFUl9UUkFDRShqaCwgImpvdXJuYWwgaXMgYWJvcnRpbmc6IHJlZmlsZSIpOwogCQkJam91cm5hbF9yZWZpbGVfYnVmZmVyKGpvdXJuYWwsIGpoKTsKIAkJCS8qIElmIHRoYXQgd2FzIHRoZSBsYXN0IG9uZSwgd2UgbmVlZCB0byBjbGVhbiB1cApAQCAtNzYyLDYgKzc2NSw5IEBACiAJCS8qIEFLUE06IGJmb3JnZXQgaGVyZSAqLwogCX0KIAorCWlmIChlcnIpCisJCWpvdXJuYWxfYWJvcnQoam91cm5hbCwgZXJyKTsKKwogCWpiZF9kZWJ1ZygzLCAiSkJEOiBjb21taXQgcGhhc2UgNlxuIik7CiAKIAlpZiAoam91cm5hbF93cml0ZV9jb21taXRfcmVjb3JkKGpvdXJuYWwsIGNvbW1pdF90cmFuc2FjdGlvbikpCkBAIC04NTIsNiArODU4LDggQEAKIAkJaWYgKGJ1ZmZlcl9qYmRkaXJ0eShiaCkpIHsKIAkJCUpCVUZGRVJfVFJBQ0UoamgsICJhZGQgdG8gbmV3IGNoZWNrcG9pbnRpbmcgdHJhbnMiKTsKIAkJCV9fam91cm5hbF9pbnNlcnRfY2hlY2twb2ludChqaCwgY29tbWl0X3RyYW5zYWN0aW9uKTsKKwkJCWlmIChpc19qb3VybmFsX2Fib3J0ZWQoam91cm5hbCkpCisJCQkJY2xlYXJfYnVmZmVyX2piZGRpcnR5KGJoKTsKIAkJCUpCVUZGRVJfVFJBQ0UoamgsICJyZWZpbGUgZm9yIGNoZWNrcG9pbnQgd3JpdGViYWNrIik7CiAJCQlfX2pvdXJuYWxfcmVmaWxlX2J1ZmZlcihqaCk7CiAJCQlqYmRfdW5sb2NrX2JoX3N0YXRlKGJoKTsKZGlmZiAtLWdpdCBhL2ZzL2piZC90cmFuc2FjdGlvbi5jIGIvZnMvamJkL3RyYW5zYWN0aW9uLmMKaW5kZXggMDU0MGNhMi4uZDE1Y2Q2ZSAxMDA2NDQKLS0tIGEvZnMvamJkL3RyYW5zYWN0aW9uLmMKKysrIGIvZnMvamJkL3RyYW5zYWN0aW9uLmMKQEAgLTk1NCw5ICs5NTQsMTAgQEAKIAlqb3VybmFsX3QgKmpvdXJuYWwgPSBoYW5kbGUtPmhfdHJhbnNhY3Rpb24tPnRfam91cm5hbDsKIAlpbnQgbmVlZF9icmVsc2UgPSAwOwogCXN0cnVjdCBqb3VybmFsX2hlYWQgKmpoOworCWludCByZXQgPSAwOwogCiAJaWYgKGlzX2hhbmRsZV9hYm9ydGVkKGhhbmRsZSkpCi0JCXJldHVybiAwOworCQlyZXR1cm4gcmV0OwogCiAJamggPSBqb3VybmFsX2FkZF9qb3VybmFsX2hlYWQoYmgpOwogCUpCVUZGRVJfVFJBQ0UoamgsICJlbnRyeSIpOwpAQCAtMTA2Nyw3ICsxMDY4LDE2IEBACiAJCQkJICAgdGltZSBpZiBpdCBpcyByZWRpcnRpZWQgKi8KIAkJCX0KIAotCQkJLyogam91cm5hbF9jbGVhbl9kYXRhX2xpc3QoKSBtYXkgaGF2ZSBnb3QgdGhlcmUgZmlyc3QgKi8KKwkJCS8qCisJCQkgKiBXZSBjYW5ub3QgcmVtb3ZlIHRoZSBidWZmZXIgd2l0aCBpbyBlcnJvciBmcm9tIHRoZQorCQkJICogY29tbWl0dGluZyB0cmFuc2FjdGlvbiwgYmVjYXVzZSBvdGhlcndpc2UgaXQgd291bGQKKwkJCSAqIG1pc3MgdGhlIGVycm9yIGFuZCB0aGUgY29tbWl0IHdvdWxkIG5vdCBhYm9ydC4KKwkJCSAqLworCQkJaWYgKHVubGlrZWx5KCFidWZmZXJfdXB0b2RhdGUoYmgpKSkgeworCQkJCXJldCA9IC1FSU87CisJCQkJZ290byBub19qb3VybmFsOworCQkJfQorCiAJCQlpZiAoamgtPmJfdHJhbnNhY3Rpb24gIT0gTlVMTCkgewogCQkJCUpCVUZGRVJfVFJBQ0UoamgsICJ1bmZpbGUgZnJvbSBjb21taXQiKTsKIAkJCQlfX2pvdXJuYWxfdGVtcF91bmxpbmtfYnVmZmVyKGpoKTsKQEAgLTExMDgsNyArMTExOCw3IEBACiAJfQogCUpCVUZGRVJfVFJBQ0UoamgsICJleGl0Iik7CiAJam91cm5hbF9wdXRfam91cm5hbF9oZWFkKGpoKTsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gcmV0OwogfQogCiAvKioKZGlmZiAtLWdpdCBhL2ZzL2piZDIvS2NvbmZpZyBiL2ZzL2piZDIvS2NvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMzJmMzQ2Ci0tLSAvZGV2L251bGwKKysrIGIvZnMvamJkMi9LY29uZmlnCkBAIC0wLDAgKzEsMzMgQEAKK2NvbmZpZyBKQkQyCisJdHJpc3RhdGUKKwlzZWxlY3QgQ1JDMzIKKwloZWxwCisJICBUaGlzIGlzIGEgZ2VuZXJpYyBqb3VybmFsaW5nIGxheWVyIGZvciBibG9jayBkZXZpY2VzIHRoYXQgc3VwcG9ydAorCSAgYm90aCAzMi1iaXQgYW5kIDY0LWJpdCBibG9jayBudW1iZXJzLiAgSXQgaXMgY3VycmVudGx5IHVzZWQgYnkKKwkgIHRoZSBleHQ0IGFuZCBPQ0ZTMiBmaWxlc3lzdGVtcywgYnV0IGl0IGNvdWxkIGFsc28gYmUgdXNlZCB0byBhZGQKKwkgIGpvdXJuYWwgc3VwcG9ydCB0byBvdGhlciBmaWxlIHN5c3RlbXMgb3IgYmxvY2sgZGV2aWNlcyBzdWNoCisJICBhcyBSQUlEIG9yIExWTS4KKworCSAgSWYgeW91IGFyZSB1c2luZyBleHQ0IG9yIE9DRlMyLCB5b3UgbmVlZCB0byBzYXkgWSBoZXJlLgorCSAgSWYgeW91IGFyZSBub3QgdXNpbmcgZXh0NCBvciBPQ0ZTMiB0aGVuIHlvdSB3aWxsCisJICBwcm9iYWJseSB3YW50IHRvIHNheSBOLgorCisJICBUbyBjb21waWxlIHRoaXMgZGV2aWNlIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiBUaGUgbW9kdWxlIHdpbGwgYmUKKwkgIGNhbGxlZCBqYmQyLiAgSWYgeW91IGFyZSBjb21waWxpbmcgZXh0NCBvciBPQ0ZTMiBpbnRvIHRoZSBrZXJuZWwsCisJICB5b3UgY2Fubm90IGNvbXBpbGUgdGhpcyBjb2RlIGFzIGEgbW9kdWxlLgorCitjb25maWcgSkJEMl9ERUJVRworCWJvb2wgIkpCRDIgKGV4dDQpIGRlYnVnZ2luZyBzdXBwb3J0IgorCWRlcGVuZHMgb24gSkJEMiAmJiBERUJVR19GUworCWhlbHAKKwkgIElmIHlvdSBhcmUgdXNpbmcgdGhlIGV4dDQgam91cm5hbGVkIGZpbGUgc3lzdGVtIChvcgorCSAgcG90ZW50aWFsbHkgYW55IG90aGVyIGZpbGVzeXN0ZW0vZGV2aWNlIHVzaW5nIEpCRDIpLCB0aGlzIG9wdGlvbgorCSAgYWxsb3dzIHlvdSB0byBlbmFibGUgZGVidWdnaW5nIG91dHB1dCB3aGlsZSB0aGUgc3lzdGVtIGlzIHJ1bm5pbmcsCisJICBpbiBvcmRlciB0byBoZWxwIHRyYWNrIGRvd24gYW55IHByb2JsZW1zIHlvdSBhcmUgaGF2aW5nLgorCSAgQnkgZGVmYXVsdCwgdGhlIGRlYnVnZ2luZyBvdXRwdXQgd2lsbCBiZSB0dXJuZWQgb2ZmLgorCisJICBJZiB5b3Ugc2VsZWN0IFkgaGVyZSwgdGhlbiB5b3Ugd2lsbCBiZSBhYmxlIHRvIHR1cm4gb24gZGVidWdnaW5nCisJICB3aXRoICJlY2hvIE4gPiAvc3lzL2tlcm5lbC9kZWJ1Zy9qYmQyL2piZDItZGVidWciLCB3aGVyZSBOIGlzIGEKKwkgIG51bWJlciBiZXR3ZWVuIDEgYW5kIDUuIFRoZSBoaWdoZXIgdGhlIG51bWJlciwgdGhlIG1vcmUgZGVidWdnaW5nCisJICBvdXRwdXQgaXMgZ2VuZXJhdGVkLiAgVG8gdHVybiBkZWJ1Z2dpbmcgb2ZmIGFnYWluLCBkbworCSAgImVjaG8gMCA+IC9zeXMva2VybmVsL2RlYnVnL2piZDIvamJkMi1kZWJ1ZyIuCmRpZmYgLS1naXQgYS9mcy9qYmQyL2NvbW1pdC5jIGIvZnMvamJkMi9jb21taXQuYwppbmRleCAwYWJlMDJjLi44YjExOWUxIDEwMDY0NAotLS0gYS9mcy9qYmQyL2NvbW1pdC5jCisrKyBiL2ZzL2piZDIvY29tbWl0LmMKQEAgLTk5NSw2ICs5OTUsOSBAQAogCX0KIAlzcGluX3VubG9jaygmam91cm5hbC0+al9saXN0X2xvY2spOwogCisJaWYgKGpvdXJuYWwtPmpfY29tbWl0X2NhbGxiYWNrKQorCQlqb3VybmFsLT5qX2NvbW1pdF9jYWxsYmFjayhqb3VybmFsLCBjb21taXRfdHJhbnNhY3Rpb24pOworCiAJdHJhY2VfbWFyayhqYmQyX2VuZF9jb21taXQsICJkZXYgJXMgdHJhbnNhY3Rpb24gJWQgaGVhZCAlZCIsCiAJCSAgIGpvdXJuYWwtPmpfZGV2bmFtZSwgY29tbWl0X3RyYW5zYWN0aW9uLT50X3RpZCwKIAkJICAgam91cm5hbC0+al90YWlsX3NlcXVlbmNlKTsKZGlmZiAtLWdpdCBhL2ZzL2piZDIvdHJhbnNhY3Rpb24uYyBiL2ZzL2piZDIvdHJhbnNhY3Rpb24uYwppbmRleCBlNWQ1NDA1Li4zOWI3ODA1IDEwMDY0NAotLS0gYS9mcy9qYmQyL3RyYW5zYWN0aW9uLmMKKysrIGIvZnMvamJkMi90cmFuc2FjdGlvbi5jCkBAIC01Miw2ICs1Miw3IEBACiAJdHJhbnNhY3Rpb24tPnRfZXhwaXJlcyA9IGppZmZpZXMgKyBqb3VybmFsLT5qX2NvbW1pdF9pbnRlcnZhbDsKIAlzcGluX2xvY2tfaW5pdCgmdHJhbnNhY3Rpb24tPnRfaGFuZGxlX2xvY2spOwogCUlOSVRfTElTVF9IRUFEKCZ0cmFuc2FjdGlvbi0+dF9pbm9kZV9saXN0KTsKKwlJTklUX0xJU1RfSEVBRCgmdHJhbnNhY3Rpb24tPnRfcHJpdmF0ZV9saXN0KTsKIAogCS8qIFNldCB1cCB0aGUgY29tbWl0IHRpbWVyIGZvciB0aGUgbmV3IHRyYW5zYWN0aW9uLiAqLwogCWpvdXJuYWwtPmpfY29tbWl0X3RpbWVyLmV4cGlyZXMgPSByb3VuZF9qaWZmaWVzKHRyYW5zYWN0aW9uLT50X2V4cGlyZXMpOwpkaWZmIC0tZ2l0IGEvZnMvamZmczIvS2NvbmZpZyBiL2ZzL2pmZnMyL0tjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmFlMTY5YwotLS0gL2Rldi9udWxsCisrKyBiL2ZzL2pmZnMyL0tjb25maWcKQEAgLTAsMCArMSwxODggQEAKK2NvbmZpZyBKRkZTMl9GUworCXRyaXN0YXRlICJKb3VybmFsbGluZyBGbGFzaCBGaWxlIFN5c3RlbSB2MiAoSkZGUzIpIHN1cHBvcnQiCisJc2VsZWN0IENSQzMyCisJZGVwZW5kcyBvbiBNVEQKKwloZWxwCisJICBKRkZTMiBpcyB0aGUgc2Vjb25kIGdlbmVyYXRpb24gb2YgdGhlIEpvdXJuYWxsaW5nIEZsYXNoIEZpbGUgU3lzdGVtCisJICBmb3IgdXNlIG9uIGRpc2tsZXNzIGVtYmVkZGVkIGRldmljZXMuIEl0IHByb3ZpZGVzIGltcHJvdmVkIHdlYXIKKwkgIGxldmVsbGluZywgY29tcHJlc3Npb24gYW5kIHN1cHBvcnQgZm9yIGhhcmQgbGlua3MuIFlvdSBjYW5ub3QgdXNlCisJICB0aGlzIG9uIG5vcm1hbCBibG9jayBkZXZpY2VzLCBvbmx5IG9uICdNVEQnIGRldmljZXMuCisKKwkgIEZ1cnRoZXIgaW5mb3JtYXRpb24gb24gdGhlIGRlc2lnbiBhbmQgaW1wbGVtZW50YXRpb24gb2YgSkZGUzIgaXMKKwkgIGF2YWlsYWJsZSBhdCA8aHR0cDovL3NvdXJjZXMucmVkaGF0LmNvbS9qZmZzMi8+LgorCitjb25maWcgSkZGUzJfRlNfREVCVUcKKwlpbnQgIkpGRlMyIGRlYnVnZ2luZyB2ZXJib3NpdHkgKDAgPSBxdWlldCwgMiA9IG5vaXN5KSIKKwlkZXBlbmRzIG9uIEpGRlMyX0ZTCisJZGVmYXVsdCAiMCIKKwloZWxwCisJICBUaGlzIGNvbnRyb2xzIHRoZSBhbW91bnQgb2YgZGVidWdnaW5nIG1lc3NhZ2VzIHByb2R1Y2VkIGJ5IHRoZSBKRkZTMgorCSAgY29kZS4gU2V0IGl0IHRvIHplcm8gZm9yIHVzZSBpbiBwcm9kdWN0aW9uIHN5c3RlbXMuIEZvciBldmFsdWF0aW9uLAorCSAgdGVzdGluZyBhbmQgZGVidWdnaW5nLCBpdCdzIGFkdmlzYWJsZSB0byBzZXQgaXQgdG8gb25lLiBUaGlzIHdpbGwKKwkgIGVuYWJsZSBhIGZldyBhc3NlcnRpb25zIGFuZCB3aWxsIHByaW50IGRlYnVnZ2luZyBtZXNzYWdlcyBhdCB0aGUKKwkgIEtFUk5fREVCVUcgbG9nbGV2ZWwsIHdoZXJlIHRoZXkgd29uJ3Qgbm9ybWFsbHkgYmUgdmlzaWJsZS4gTGV2ZWwgMgorCSAgaXMgdW5saWtlbHkgdG8gYmUgdXNlZnVsIC0gaXQgZW5hYmxlcyBleHRyYSBkZWJ1Z2dpbmcgaW4gY2VydGFpbgorCSAgYXJlYXMgd2hpY2ggYXQgb25lIHBvaW50IG5lZWRlZCBkZWJ1Z2dpbmcsIGJ1dCB3aGVuIHRoZSBidWdzIHdlcmUKKwkgIGxvY2F0ZWQgYW5kIGZpeGVkLCB0aGUgZGV0YWlsZWQgbWVzc2FnZXMgd2VyZSByZWxlZ2F0ZWQgdG8gbGV2ZWwgMi4KKworCSAgSWYgcmVwb3J0aW5nIGJ1Z3MsIHBsZWFzZSB0cnkgdG8gaGF2ZSBhdmFpbGFibGUgYSBmdWxsIGR1bXAgb2YgdGhlCisJICBtZXNzYWdlcyBhdCBkZWJ1ZyBsZXZlbCAxIHdoaWxlIHRoZSBtaXNiZWhhdmlvdXIgd2FzIG9jY3VycmluZy4KKworY29uZmlnIEpGRlMyX0ZTX1dSSVRFQlVGRkVSCisJYm9vbCAiSkZGUzIgd3JpdGUtYnVmZmVyaW5nIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBKRkZTMl9GUworCWRlZmF1bHQgeQorCWhlbHAKKwkgIFRoaXMgZW5hYmxlcyB0aGUgd3JpdGUtYnVmZmVyaW5nIHN1cHBvcnQgaW4gSkZGUzIuCisKKwkgIFRoaXMgZnVuY3Rpb25hbGl0eSBpcyByZXF1aXJlZCB0byBzdXBwb3J0IEpGRlMyIG9uIHRoZSBmb2xsb3dpbmcKKwkgIHR5cGVzIG9mIGZsYXNoIGRldmljZXM6CisJICAgIC0gTkFORCBmbGFzaAorCSAgICAtIE5PUiBmbGFzaCB3aXRoIHRyYW5zcGFyZW50IEVDQworCSAgICAtIERhdGFGbGFzaAorCitjb25maWcgSkZGUzJfRlNfV0JVRl9WRVJJRlkKKwlib29sICJWZXJpZnkgSkZGUzIgd3JpdGUtYnVmZmVyIHJlYWRzIgorCWRlcGVuZHMgb24gSkZGUzJfRlNfV1JJVEVCVUZGRVIKKwlkZWZhdWx0IG4KKwloZWxwCisJICBUaGlzIGNhdXNlcyBKRkZTMiB0byByZWFkIGJhY2sgZXZlcnkgcGFnZSB3cml0dGVuIHRocm91Z2ggdGhlCisJICB3cml0ZS1idWZmZXIsIGFuZCBjaGVjayBmb3IgZXJyb3JzLgorCitjb25maWcgSkZGUzJfU1VNTUFSWQorCWJvb2wgIkpGRlMyIHN1bW1hcnkgc3VwcG9ydCAoRVhQRVJJTUVOVEFMKSIKKwlkZXBlbmRzIG9uIEpGRlMyX0ZTICYmIEVYUEVSSU1FTlRBTAorCWRlZmF1bHQgbgorCWhlbHAKKwkgIFRoaXMgZmVhdHVyZSBtYWtlcyBpdCBwb3NzaWJsZSB0byB1c2Ugc3VtbWFyeSBpbmZvcm1hdGlvbgorCSAgZm9yIGZhc3RlciBmaWxlc3lzdGVtIG1vdW50LgorCisJICBUaGUgc3VtbWFyeSBpbmZvcm1hdGlvbiBjYW4gYmUgaW5zZXJ0ZWQgaW50byBhIGZpbGVzeXN0ZW0gaW1hZ2UKKwkgIGJ5IHRoZSB1dGlsaXR5ICdzdW10b29sJy4KKworCSAgSWYgdW5zdXJlLCBzYXkgJ04nLgorCitjb25maWcgSkZGUzJfRlNfWEFUVFIKKwlib29sICJKRkZTMiBYQVRUUiBzdXBwb3J0IChFWFBFUklNRU5UQUwpIgorCWRlcGVuZHMgb24gSkZGUzJfRlMgJiYgRVhQRVJJTUVOVEFMCisJZGVmYXVsdCBuCisJaGVscAorCSAgRXh0ZW5kZWQgYXR0cmlidXRlcyBhcmUgbmFtZTp2YWx1ZSBwYWlycyBhc3NvY2lhdGVkIHdpdGggaW5vZGVzIGJ5CisJICB0aGUga2VybmVsIG9yIGJ5IHVzZXJzIChzZWUgdGhlIGF0dHIoNSkgbWFudWFsIHBhZ2UsIG9yIHZpc2l0CisJICA8aHR0cDovL2FjbC5iZXN0Yml0cy5hdC8+IGZvciBkZXRhaWxzKS4KKworCSAgSWYgdW5zdXJlLCBzYXkgTi4KKworY29uZmlnIEpGRlMyX0ZTX1BPU0lYX0FDTAorCWJvb2wgIkpGRlMyIFBPU0lYIEFjY2VzcyBDb250cm9sIExpc3RzIgorCWRlcGVuZHMgb24gSkZGUzJfRlNfWEFUVFIKKwlkZWZhdWx0IHkKKwlzZWxlY3QgRlNfUE9TSVhfQUNMCisJaGVscAorCSAgUG9zaXggQWNjZXNzIENvbnRyb2wgTGlzdHMgKEFDTHMpIHN1cHBvcnQgcGVybWlzc2lvbnMgZm9yIHVzZXJzIGFuZAorCSAgZ3JvdXBzIGJleW9uZCB0aGUgb3duZXIvZ3JvdXAvd29ybGQgc2NoZW1lLgorCisJICBUbyBsZWFybiBtb3JlIGFib3V0IEFjY2VzcyBDb250cm9sIExpc3RzLCB2aXNpdCB0aGUgUG9zaXggQUNMcyBmb3IKKwkgIExpbnV4IHdlYnNpdGUgPGh0dHA6Ly9hY2wuYmVzdGJpdHMuYXQvPi4KKworCSAgSWYgeW91IGRvbid0IGtub3cgd2hhdCBBY2Nlc3MgQ29udHJvbCBMaXN0cyBhcmUsIHNheSBOCisKK2NvbmZpZyBKRkZTMl9GU19TRUNVUklUWQorCWJvb2wgIkpGRlMyIFNlY3VyaXR5IExhYmVscyIKKwlkZXBlbmRzIG9uIEpGRlMyX0ZTX1hBVFRSCisJZGVmYXVsdCB5CisJaGVscAorCSAgU2VjdXJpdHkgbGFiZWxzIHN1cHBvcnQgYWx0ZXJuYXRpdmUgYWNjZXNzIGNvbnRyb2wgbW9kZWxzCisJICBpbXBsZW1lbnRlZCBieSBzZWN1cml0eSBtb2R1bGVzIGxpa2UgU0VMaW51eC4gIFRoaXMgb3B0aW9uCisJICBlbmFibGVzIGFuIGV4dGVuZGVkIGF0dHJpYnV0ZSBoYW5kbGVyIGZvciBmaWxlIHNlY3VyaXR5CisJICBsYWJlbHMgaW4gdGhlIGpmZnMyIGZpbGVzeXN0ZW0uCisKKwkgIElmIHlvdSBhcmUgbm90IHVzaW5nIGEgc2VjdXJpdHkgbW9kdWxlIHRoYXQgcmVxdWlyZXMgdXNpbmcKKwkgIGV4dGVuZGVkIGF0dHJpYnV0ZXMgZm9yIGZpbGUgc2VjdXJpdHkgbGFiZWxzLCBzYXkgTi4KKworY29uZmlnIEpGRlMyX0NPTVBSRVNTSU9OX09QVElPTlMKKwlib29sICJBZHZhbmNlZCBjb21wcmVzc2lvbiBvcHRpb25zIGZvciBKRkZTMiIKKwlkZXBlbmRzIG9uIEpGRlMyX0ZTCisJZGVmYXVsdCBuCisJaGVscAorCSAgRW5hYmxpbmcgdGhpcyBvcHRpb24gYWxsb3dzIHlvdSB0byBleHBsaWNpdGx5IGNob29zZSB3aGljaAorCSAgY29tcHJlc3Npb24gbW9kdWxlcywgaWYgYW55LCBhcmUgZW5hYmxlZCBpbiBKRkZTMi4gUmVtb3ZpbmcKKwkgIGNvbXByZXNzb3JzIGNhbiBtZWFuIHlvdSBjYW5ub3QgcmVhZCBleGlzdGluZyBmaWxlIHN5c3RlbXMsCisJICBhbmQgZW5hYmxpbmcgZXhwZXJpbWVudGFsIGNvbXByZXNzb3JzIGNhbiBtZWFuIHRoYXQgeW91CisJICB3cml0ZSBhIGZpbGUgc3lzdGVtIHdoaWNoIGNhbm5vdCBiZSByZWFkIGJ5IGEgc3RhbmRhcmQga2VybmVsLgorCisJICBJZiB1bnN1cmUsIHlvdSBzaG91bGQgX2RlZmluaXRlbHlfIHNheSAnTicuCisKK2NvbmZpZyBKRkZTMl9aTElCCisJYm9vbCAiSkZGUzIgWkxJQiBjb21wcmVzc2lvbiBzdXBwb3J0IiBpZiBKRkZTMl9DT01QUkVTU0lPTl9PUFRJT05TCisJc2VsZWN0IFpMSUJfSU5GTEFURQorCXNlbGVjdCBaTElCX0RFRkxBVEUKKwlkZXBlbmRzIG9uIEpGRlMyX0ZTCisJZGVmYXVsdCB5CisJaGVscAorCSAgWmxpYiBpcyBkZXNpZ25lZCB0byBiZSBhIGZyZWUsIGdlbmVyYWwtcHVycG9zZSwgbGVnYWxseSB1bmVuY3VtYmVyZWQsCisJICBsb3NzbGVzcyBkYXRhLWNvbXByZXNzaW9uIGxpYnJhcnkgZm9yIHVzZSBvbiB2aXJ0dWFsbHkgYW55IGNvbXB1dGVyCisJICBoYXJkd2FyZSBhbmQgb3BlcmF0aW5nIHN5c3RlbS4gU2VlIDxodHRwOi8vd3d3Lmd6aXAub3JnL3psaWIvPiBmb3IKKwkgIGZ1cnRoZXIgaW5mb3JtYXRpb24uCisKKwkgIFNheSAnWScgaWYgdW5zdXJlLgorCitjb25maWcgSkZGUzJfTFpPCisJYm9vbCAiSkZGUzIgTFpPIGNvbXByZXNzaW9uIHN1cHBvcnQiIGlmIEpGRlMyX0NPTVBSRVNTSU9OX09QVElPTlMKKwlzZWxlY3QgTFpPX0NPTVBSRVNTCisJc2VsZWN0IExaT19ERUNPTVBSRVNTCisJZGVwZW5kcyBvbiBKRkZTMl9GUworCWRlZmF1bHQgbgorCWhlbHAKKwkgIG1pbmlsem8tYmFzZWQgY29tcHJlc3Npb24uIEdlbmVyYWxseSB3b3JrcyBiZXR0ZXIgdGhhbiBabGliLgorCisJICBUaGlzIGZlYXR1cmUgd2FzIGFkZGVkIGluIEp1bHksIDIwMDcuIFNheSAnTicgaWYgeW91IG5lZWQKKwkgIGNvbXBhdGliaWxpdHkgd2l0aCBvbGRlciBib290bG9hZGVycyBvciBrZXJuZWxzLgorCitjb25maWcgSkZGUzJfUlRJTUUKKwlib29sICJKRkZTMiBSVElNRSBjb21wcmVzc2lvbiBzdXBwb3J0IiBpZiBKRkZTMl9DT01QUkVTU0lPTl9PUFRJT05TCisJZGVwZW5kcyBvbiBKRkZTMl9GUworCWRlZmF1bHQgeQorCWhlbHAKKwkgIFJ0aW1lIGRvZXMgbWFuYWdlIHRvIHJlY29tcHJlc3MgYWxyZWFkeS1jb21wcmVzc2VkIGRhdGEuIFNheSAnWScgaWYgdW5zdXJlLgorCitjb25maWcgSkZGUzJfUlVCSU4KKwlib29sICJKRkZTMiBSVUJJTiBjb21wcmVzc2lvbiBzdXBwb3J0IiBpZiBKRkZTMl9DT01QUkVTU0lPTl9PUFRJT05TCisJZGVwZW5kcyBvbiBKRkZTMl9GUworCWRlZmF1bHQgbgorCWhlbHAKKwkgIFJVQklOTUlQUyBhbmQgRFlOUlVCSU4gY29tcHJlc3NvcnMuIFNheSAnTicgaWYgdW5zdXJlLgorCitjaG9pY2UKKwlwcm9tcHQgIkpGRlMyIGRlZmF1bHQgY29tcHJlc3Npb24gbW9kZSIgaWYgSkZGUzJfQ09NUFJFU1NJT05fT1BUSU9OUworCWRlZmF1bHQgSkZGUzJfQ01PREVfUFJJT1JJVFkKKwlkZXBlbmRzIG9uIEpGRlMyX0ZTCisJaGVscAorCSAgWW91IGNhbiBzZXQgaGVyZSB0aGUgZGVmYXVsdCBjb21wcmVzc2lvbiBtb2RlIG9mIEpGRlMyIGZyb20KKwkgIHRoZSBhdmFpbGFibGUgY29tcHJlc3Npb24gbW9kZXMuIERvbid0IHRvdWNoIGlmIHVuc3VyZS4KKworY29uZmlnIEpGRlMyX0NNT0RFX05PTkUKKwlib29sICJubyBjb21wcmVzc2lvbiIKKwloZWxwCisJICBVc2VzIG5vIGNvbXByZXNzaW9uLgorCitjb25maWcgSkZGUzJfQ01PREVfUFJJT1JJVFkKKwlib29sICJwcmlvcml0eSIKKwloZWxwCisJICBUcmllcyB0aGUgY29tcHJlc3NvcnMgaW4gYSBwcmVkZWZpbmVkIG9yZGVyIGFuZCBjaG9vc2VzIHRoZSBmaXJzdAorCSAgc3VjY2Vzc2Z1bCBvbmUuCisKK2NvbmZpZyBKRkZTMl9DTU9ERV9TSVpFCisJYm9vbCAic2l6ZSAoRVhQRVJJTUVOVEFMKSIKKwloZWxwCisJICBUcmllcyBhbGwgY29tcHJlc3NvcnMgYW5kIGNob29zZXMgdGhlIG9uZSB3aGljaCBoYXMgdGhlIHNtYWxsZXN0CisJICByZXN1bHQuCisKK2NvbmZpZyBKRkZTMl9DTU9ERV9GQVZPVVJMWk8KKwlib29sICJGYXZvdXIgTFpPIgorCWhlbHAKKwkgIFRyaWVzIGFsbCBjb21wcmVzc29ycyBhbmQgY2hvb3NlcyB0aGUgb25lIHdoaWNoIGhhcyB0aGUgc21hbGxlc3QKKwkgIHJlc3VsdCBidXQgZ2l2ZXMgc29tZSBwcmVmZXJlbmNlIHRvIExaTyAod2hpY2ggaGFzIGZhc3RlcgorCSAgZGVjb21wcmVzc2lvbikgYXQgdGhlIGV4cGVuc2Ugb2Ygc2l6ZS4KKworZW5kY2hvaWNlCmRpZmYgLS1naXQgYS9mcy9qZmZzMi9jb21wci5jIGIvZnMvamZmczIvY29tcHIuYwppbmRleCA4NjczOWVlLi5mMjVlNzBjIDEwMDY0NAotLS0gYS9mcy9qZmZzMi9jb21wci5jCisrKyBiL2ZzL2pmZnMyL2NvbXByLmMKQEAgLTUzLDggKzUzLDggQEAKIH0KIAogLyogamZmczJfY29tcHJlc3M6Ci0gKiBAZGF0YTogUG9pbnRlciB0byB1bmNvbXByZXNzZWQgZGF0YQotICogQGNkYXRhOiBQb2ludGVyIHRvIHJldHVybmVkIHBvaW50ZXIgdG8gYnVmZmVyIGZvciBjb21wcmVzc2VkIGRhdGEKKyAqIEBkYXRhX2luOiBQb2ludGVyIHRvIHVuY29tcHJlc3NlZCBkYXRhCisgKiBAY3BhZ2Vfb3V0OiBQb2ludGVyIHRvIHJldHVybmVkIHBvaW50ZXIgdG8gYnVmZmVyIGZvciBjb21wcmVzc2VkIGRhdGEKICAqIEBkYXRhbGVuOiBPbiBlbnRyeSwgaG9sZHMgdGhlIGFtb3VudCBvZiBkYXRhIGF2YWlsYWJsZSBmb3IgY29tcHJlc3Npb24uCiAgKglPbiBleGl0LCBleHBlY3RlZCB0byBob2xkIHRoZSBhbW91bnQgb2YgZGF0YSBhY3R1YWxseSBjb21wcmVzc2VkLgogICogQGNkYXRhbGVuOiBPbiBlbnRyeSwgaG9sZHMgdGhlIGFtb3VudCBvZiBzcGFjZSBhdmFpbGFibGUgZm9yIGNvbXByZXNzZWQKZGlmZiAtLWdpdCBhL2ZzL2pmZnMyL2Rpci5jIGIvZnMvamZmczIvZGlyLmMKaW5kZXggY2QyMTllZi4uYjFhYWFlOCAxMDA2NDQKLS0tIGEvZnMvamZmczIvZGlyLmMKKysrIGIvZnMvamZmczIvZGlyLmMKQEAgLTMxMSw3ICszMTEsNyBAQAogCS8qIEZJWE1FOiBJZiB5b3UgY2FyZS4gV2UnZCBuZWVkIHRvIHVzZSBmcmFncyBmb3IgdGhlIHRhcmdldAogCSAgIGlmIGl0IGdyb3dzIG11Y2ggbW9yZSB0aGFuIHRoaXMgKi8KIAlpZiAodGFyZ2V0bGVuID4gMjU0KQotCQlyZXR1cm4gLUVJTlZBTDsKKwkJcmV0dXJuIC1FTkFNRVRPT0xPTkc7CiAKIAlyaSA9IGpmZnMyX2FsbG9jX3Jhd19pbm9kZSgpOwogCmRpZmYgLS1naXQgYS9mcy9qZmZzMi9lcmFzZS5jIGIvZnMvamZmczIvZXJhc2UuYwppbmRleCBkZGRiMmE2Li4yNTk0NjFiIDEwMDY0NAotLS0gYS9mcy9qZmZzMi9lcmFzZS5jCisrKyBiL2ZzL2pmZnMyL2VyYXNlLmMKQEAgLTY4LDcgKzY4LDcgQEAKIAlpbnN0ci0+bGVuID0gYy0+c2VjdG9yX3NpemU7CiAJaW5zdHItPmNhbGxiYWNrID0gamZmczJfZXJhc2VfY2FsbGJhY2s7CiAJaW5zdHItPnByaXYgPSAodW5zaWduZWQgbG9uZykoJmluc3RyWzFdKTsKLQlpbnN0ci0+ZmFpbF9hZGRyID0gMHhmZmZmZmZmZjsKKwlpbnN0ci0+ZmFpbF9hZGRyID0gTVREX0ZBSUxfQUREUl9VTktOT1dOOwogCiAJKChzdHJ1Y3QgZXJhc2VfcHJpdl9zdHJ1Y3QgKilpbnN0ci0+cHJpdiktPmplYiA9IGplYjsKIAkoKHN0cnVjdCBlcmFzZV9wcml2X3N0cnVjdCAqKWluc3RyLT5wcml2KS0+YyA9IGM7CkBAIC0xNzUsNyArMTc1LDcgQEAKIHsKIAkvKiBGb3IgTkFORCwgaWYgdGhlIGZhaWx1cmUgZGlkIG5vdCBvY2N1ciBhdCB0aGUgZGV2aWNlIGxldmVsIGZvciBhCiAJICAgc3BlY2lmaWMgcGh5c2ljYWwgcGFnZSwgZG9uJ3QgYm90aGVyIHVwZGF0aW5nIHRoZSBiYWQgYmxvY2sgdGFibGUuICovCi0JaWYgKGpmZnMyX2NsZWFubWFya2VyX29vYihjKSAmJiAoYmFkX29mZnNldCAhPSAweGZmZmZmZmZmKSkgeworCWlmIChqZmZzMl9jbGVhbm1hcmtlcl9vb2IoYykgJiYgKGJhZF9vZmZzZXQgIT0gTVREX0ZBSUxfQUREUl9VTktOT1dOKSkgewogCQkvKiBXZSBoYWQgYSBkZXZpY2UtbGV2ZWwgZmFpbHVyZSB0byBlcmFzZS4gIExldCdzIHNlZSBpZiB3ZSd2ZQogCQkgICBmYWlsZWQgdG9vIG1hbnkgdGltZXMuICovCiAJCWlmICghamZmczJfd3JpdGVfbmFuZF9iYWRibG9jayhjLCBqZWIsIGJhZF9vZmZzZXQpKSB7CmRpZmYgLS1naXQgYS9mcy9qZmZzMi9mcy5jIGIvZnMvamZmczIvZnMuYwppbmRleCAwODZjNDM4Li4yNDkzMDVkIDEwMDY0NAotLS0gYS9mcy9qZmZzMi9mcy5jCisrKyBiL2ZzL2pmZnMyL2ZzLmMKQEAgLTIwNyw2ICsyMDcsOCBAQAogCWJ1Zi0+Zl9maWxlcyA9IDA7CiAJYnVmLT5mX2ZmcmVlID0gMDsKIAlidWYtPmZfbmFtZWxlbiA9IEpGRlMyX01BWF9OQU1FX0xFTjsKKwlidWYtPmZfZnNpZC52YWxbMF0gPSBKRkZTMl9TVVBFUl9NQUdJQzsKKwlidWYtPmZfZnNpZC52YWxbMV0gPSBjLT5tdGQtPmluZGV4OwogCiAJc3Bpbl9sb2NrKCZjLT5lcmFzZV9jb21wbGV0aW9uX2xvY2spOwogCWF2YWlsID0gYy0+ZGlydHlfc2l6ZSArIGMtPmZyZWVfc2l6ZTsKQEAgLTQ0MCwxNCArNDQyLDE0IEBACiAKIAltZW1zZXQocmksIDAsIHNpemVvZigqcmkpKTsKIAkvKiBTZXQgT1Mtc3BlY2lmaWMgZGVmYXVsdHMgZm9yIG5ldyBpbm9kZXMgKi8KLQlyaS0+dWlkID0gY3B1X3RvX2plMTYoY3VycmVudC0+ZnN1aWQpOworCXJpLT51aWQgPSBjcHVfdG9famUxNihjdXJyZW50X2ZzdWlkKCkpOwogCiAJaWYgKGRpcl9pLT5pX21vZGUgJiBTX0lTR0lEKSB7CiAJCXJpLT5naWQgPSBjcHVfdG9famUxNihkaXJfaS0+aV9naWQpOwogCQlpZiAoU19JU0RJUihtb2RlKSkKIAkJCW1vZGUgfD0gU19JU0dJRDsKIAl9IGVsc2UgewotCQlyaS0+Z2lkID0gY3B1X3RvX2plMTYoY3VycmVudC0+ZnNnaWQpOworCQlyaS0+Z2lkID0gY3B1X3RvX2plMTYoY3VycmVudF9mc2dpZCgpKTsKIAl9CiAKIAkvKiBQT1NJWCBBQ0xzIGhhdmUgdG8gYmUgcHJvY2Vzc2VkIG5vdywgYXQgbGVhc3QgcGFydGx5LgpkaWZmIC0tZ2l0IGEvZnMvamZmczIvbm9kZW1nbXQuYyBiL2ZzL2pmZnMyL25vZGVtZ210LmMKaW5kZXggYTliZjk2MC4uMDg3NWI2MCAxMDA2NDQKLS0tIGEvZnMvamZmczIvbm9kZW1nbXQuYworKysgYi9mcy9qZmZzMi9ub2RlbWdtdC5jCkBAIC0yNjEsNiArMjYxLDEwIEBACiAKIAlqZmZzMl9zdW1fcmVzZXRfY29sbGVjdGVkKGMtPnN1bW1hcnkpOyAvKiByZXNldCBjb2xsZWN0ZWQgc3VtbWFyeSAqLwogCisJLyogYWRqdXN0IHdyaXRlIGJ1ZmZlciBvZmZzZXQsIGVsc2Ugd2UgZ2V0IGEgbm9uIGNvbnRpZ3VvdXMgd3JpdGUgYnVnICovCisJaWYgKCEoYy0+d2J1Zl9vZnMgJSBjLT5zZWN0b3Jfc2l6ZSkgJiYgIWMtPndidWZfbGVuKQorCQljLT53YnVmX29mcyA9IDB4ZmZmZmZmZmY7CisKIAlEMShwcmludGsoS0VSTl9ERUJVRyAiamZmczJfZmluZF9uZXh0YmxvY2soKTogbmV3IG5leHRibG9jayA9IDB4JTA4eFxuIiwgYy0+bmV4dGJsb2NrLT5vZmZzZXQpKTsKIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZnMvamZmczIvd2J1Zi5jIGIvZnMvamZmczIvd2J1Zi5jCmluZGV4IDBlNzhiMDAuLmQ5YTcyMWUgMTAwNjQ0Ci0tLSBhL2ZzL2pmZnMyL3didWYuYworKysgYi9mcy9qZmZzMi93YnVmLmMKQEAgLTY3OSwxMCArNjc5LDcgQEAKIAogCW1lbXNldChjLT53YnVmLDB4ZmYsYy0+d2J1Zl9wYWdlc2l6ZSk7CiAJLyogYWRqdXN0IHdyaXRlIGJ1ZmZlciBvZmZzZXQsIGVsc2Ugd2UgZ2V0IGEgbm9uIGNvbnRpZ3VvdXMgd3JpdGUgYnVnICovCi0JaWYgKFNFQ1RPUl9BRERSKGMtPndidWZfb2ZzKSA9PSBTRUNUT1JfQUREUihjLT53YnVmX29mcytjLT53YnVmX3BhZ2VzaXplKSkKLQkJYy0+d2J1Zl9vZnMgKz0gYy0+d2J1Zl9wYWdlc2l6ZTsKLQllbHNlCi0JCWMtPndidWZfb2ZzID0gMHhmZmZmZmZmZjsKKwljLT53YnVmX29mcyArPSBjLT53YnVmX3BhZ2VzaXplOwogCWMtPndidWZfbGVuID0gMDsKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2ZzL2pmcy9zdXBlci5jIGIvZnMvamZzL3N1cGVyLmMKaW5kZXggMzYzMDcxOC4uMGRhZTM0NSAxMDA2NDQKLS0tIGEvZnMvamZzL3N1cGVyLmMKKysrIGIvZnMvamZzL3N1cGVyLmMKQEAgLTE5OSw3ICsxOTksNyBAQAogCU9wdF91c3JxdW90YSwgT3B0X2dycHF1b3RhLCBPcHRfdWlkLCBPcHRfZ2lkLCBPcHRfdW1hc2sKIH07CiAKLXN0YXRpYyBtYXRjaF90YWJsZV90IHRva2VucyA9IHsKK3N0YXRpYyBjb25zdCBtYXRjaF90YWJsZV90IHRva2VucyA9IHsKIAl7T3B0X2ludGVncml0eSwgImludGVncml0eSJ9LAogCXtPcHRfbm9pbnRlZ3JpdHksICJub2ludGVncml0eSJ9LAogCXtPcHRfaW9jaGFyc2V0LCAiaW9jaGFyc2V0PSVzIn0sCmRpZmYgLS1naXQgYS9mcy9sb2NrZC9NYWtlZmlsZSBiL2ZzL2xvY2tkL01ha2VmaWxlCmluZGV4IDc3MjVhMGEuLjk3ZjYwNzMgMTAwNjQ0Ci0tLSBhL2ZzL2xvY2tkL01ha2VmaWxlCisrKyBiL2ZzL2xvY2tkL01ha2VmaWxlCkBAIC01LDYgKzUsNiBAQAogb2JqLSQoQ09ORklHX0xPQ0tEKSArPSBsb2NrZC5vCiAKIGxvY2tkLW9ianMteSA6PSBjbG50bG9jay5vIGNsbnRwcm9jLm8gaG9zdC5vIHN2Yy5vIHN2Y2xvY2subyBzdmNzaGFyZS5vIFwKLQkgICAgICAgIHN2Y3Byb2MubyBzdmNzdWJzLm8gbW9uLm8geGRyLm8KKwkgICAgICAgIHN2Y3Byb2MubyBzdmNzdWJzLm8gbW9uLm8geGRyLm8gZ3JhY2UubwogbG9ja2Qtb2Jqcy0kKENPTkZJR19MT0NLRF9WNCkgKz0geGRyNC5vIHN2YzRwcm9jLm8KIGxvY2tkLW9ianMJCSAgICAgIDo9ICQobG9ja2Qtb2Jqcy15KQpkaWZmIC0tZ2l0IGEvZnMvbG9ja2QvY2xudGxvY2suYyBiL2ZzL2xvY2tkL2NsbnRsb2NrLmMKaW5kZXggMGI0NWZkMy4uODMwN2RkNiAxMDA2NDQKLS0tIGEvZnMvbG9ja2QvY2xudGxvY2suYworKysgYi9mcy9sb2NrZC9jbG50bG9jay5jCkBAIC01NCwxNCArNTQsMTMgQEAKIAl1MzIgbmxtX3ZlcnNpb24gPSAobmxtX2luaXQtPm5mc192ZXJzaW9uID09IDIpID8gMSA6IDQ7CiAJaW50IHN0YXR1czsKIAotCXN0YXR1cyA9IGxvY2tkX3VwKG5sbV9pbml0LT5wcm90b2NvbCk7CisJc3RhdHVzID0gbG9ja2RfdXAoKTsKIAlpZiAoc3RhdHVzIDwgMCkKIAkJcmV0dXJuIEVSUl9QVFIoc3RhdHVzKTsKIAotCWhvc3QgPSBubG1jbG50X2xvb2t1cF9ob3N0KChzdHJ1Y3Qgc29ja2FkZHJfaW4gKilubG1faW5pdC0+YWRkcmVzcywKKwlob3N0ID0gbmxtY2xudF9sb29rdXBfaG9zdChubG1faW5pdC0+YWRkcmVzcywgbmxtX2luaXQtPmFkZHJsZW4sCiAJCQkJICAgbmxtX2luaXQtPnByb3RvY29sLCBubG1fdmVyc2lvbiwKLQkJCQkgICBubG1faW5pdC0+aG9zdG5hbWUsCi0JCQkJICAgc3RybGVuKG5sbV9pbml0LT5ob3N0bmFtZSkpOworCQkJCSAgIG5sbV9pbml0LT5ob3N0bmFtZSk7CiAJaWYgKGhvc3QgPT0gTlVMTCkgewogCQlsb2NrZF9kb3duKCk7CiAJCXJldHVybiBFUlJfUFRSKC1FTk9MQ0spOwpAQCAtMTQyLDcgKzE0MSw3IEBACiAvKgogICogVGhlIHNlcnZlciBsb2NrZCBoYXMgY2FsbGVkIHVzIGJhY2sgdG8gdGVsbCB1cyB0aGUgbG9jayB3YXMgZ3JhbnRlZAogICovCi1fX2JlMzIgbmxtY2xudF9ncmFudChjb25zdCBzdHJ1Y3Qgc29ja2FkZHJfaW4gKmFkZHIsIGNvbnN0IHN0cnVjdCBubG1fbG9jayAqbG9jaykKK19fYmUzMiBubG1jbG50X2dyYW50KGNvbnN0IHN0cnVjdCBzb2NrYWRkciAqYWRkciwgY29uc3Qgc3RydWN0IG5sbV9sb2NrICpsb2NrKQogewogCWNvbnN0IHN0cnVjdCBmaWxlX2xvY2sgKmZsID0gJmxvY2stPmZsOwogCWNvbnN0IHN0cnVjdCBuZnNfZmggKmZoID0gJmxvY2stPmZoOwpAQCAtMTY2LDcgKzE2NSw3IEBACiAJCSAqLwogCQlpZiAoZmxfYmxvY2tlZC0+ZmxfdS5uZnNfZmwub3duZXItPnBpZCAhPSBsb2NrLT5zdmlkKQogCQkJY29udGludWU7Ci0JCWlmICghbmxtX2NtcF9hZGRyKCZibG9jay0+Yl9ob3N0LT5oX2FkZHIsIGFkZHIpKQorCQlpZiAoIW5sbV9jbXBfYWRkcihubG1fYWRkcihibG9jay0+Yl9ob3N0KSwgYWRkcikpCiAJCQljb250aW51ZTsKIAkJaWYgKG5mc19jb21wYXJlX2ZoKE5GU19GSChmbF9ibG9ja2VkLT5mbF9maWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlKSAsZmgpICE9IDApCiAJCQljb250aW51ZTsKQEAgLTIxNiw3ICsyMTUsNyBAQAogCS8qIFRoaXMgb25lIGVuc3VyZXMgdGhhdCBvdXIgcGFyZW50IGRvZXNuJ3QgdGVybWluYXRlIHdoaWxlIHRoZQogCSAqIHJlY2xhaW0gaXMgaW4gcHJvZ3Jlc3MgKi8KIAlsb2NrX2tlcm5lbCgpOwotCWxvY2tkX3VwKDApOyAvKiBub3RlOiB0aGlzIGNhbm5vdCBmYWlsIGFzIGxvY2tkIGlzIGFscmVhZHkgcnVubmluZyAqLworCWxvY2tkX3VwKCk7CS8qIG5vdGU6IHRoaXMgY2Fubm90IGZhaWwgYXMgbG9ja2QgaXMgYWxyZWFkeSBydW5uaW5nICovCiAKIAlkcHJpbnRrKCJsb2NrZDogcmVjbGFpbWluZyBsb2NrcyBmb3IgaG9zdCAlc1xuIiwgaG9zdC0+aF9uYW1lKTsKIApkaWZmIC0tZ2l0IGEvZnMvbG9ja2QvZ3JhY2UuYyBiL2ZzL2xvY2tkL2dyYWNlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTgzY2MxZgotLS0gL2Rldi9udWxsCisrKyBiL2ZzL2xvY2tkL2dyYWNlLmMKQEAgLTAsMCArMSw1OSBAQAorLyoKKyAqIENvbW1vbiBjb2RlIGZvciBjb250cm9sIG9mIGxvY2tkIGFuZCBuZnN2NCBncmFjZSBwZXJpb2RzLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9sb2NrZC9iaW5kLmg+CisKK3N0YXRpYyBMSVNUX0hFQUQoZ3JhY2VfbGlzdCk7CitzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGdyYWNlX2xvY2spOworCisvKioKKyAqIGxvY2tzX3N0YXJ0X2dyYWNlCisgKiBAbG06IHdobyB0aGlzIGdyYWNlIHBlcmlvZCBpcyBmb3IKKyAqCisgKiBBIGdyYWNlIHBlcmlvZCBpcyBhIHBlcmlvZCBkdXJpbmcgd2hpY2ggbG9ja3Mgc2hvdWxkIG5vdCBiZSBnaXZlbgorICogb3V0LiAgQ3VycmVudGx5IGdyYWNlIHBlcmlvZHMgYXJlIG9ubHkgZW5mb3JjZWQgYnkgdGhlIHR3byBsb2NrCisgKiBtYW5hZ2VycyAobG9ja2QgYW5kIG5mc2QpLCB1c2luZyB0aGUgbG9ja3NfaW5fZ3JhY2UoKSBmdW5jdGlvbiB0bworICogY2hlY2sgd2hlbiB0aGV5IGFyZSBpbiBhIGdyYWNlIHBlcmlvZC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB0byBzdGFydCBhIGdyYWNlIHBlcmlvZC4KKyAqLwordm9pZCBsb2Nrc19zdGFydF9ncmFjZShzdHJ1Y3QgbG9ja19tYW5hZ2VyICpsbSkKK3sKKwlzcGluX2xvY2soJmdyYWNlX2xvY2spOworCWxpc3RfYWRkKCZsbS0+bGlzdCwgJmdyYWNlX2xpc3QpOworCXNwaW5fdW5sb2NrKCZncmFjZV9sb2NrKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGxvY2tzX3N0YXJ0X2dyYWNlKTsKKworLyoqCisgKiBsb2Nrc19lbmRfZ3JhY2UKKyAqIEBsbTogd2hvIHRoaXMgZ3JhY2UgcGVyaW9kIGlzIGZvcgorICoKKyAqIENhbGwgdGhpcyBmdW5jdGlvbiB0byBzdGF0ZSB0aGF0IHRoZSBnaXZlbiBsb2NrIG1hbmFnZXIgaXMgcmVhZHkgdG8KKyAqIHJlc3VtZSByZWd1bGFyIGxvY2tpbmcuICBUaGUgZ3JhY2UgcGVyaW9kIHdpbGwgbm90IGVuZCB1bnRpbCBhbGwgbG9jaworICogbWFuYWdlcnMgdGhhdCBjYWxsZWQgbG9ja3Nfc3RhcnRfZ3JhY2UoKSBhbHNvIGNhbGwgbG9ja3NfZW5kX2dyYWNlKCkuCisgKiBOb3RlIHRoYXQgY2FsbGVycyBjb3VudCBvbiBpdCBiZWluZyBzYWZlIHRvIGNhbGwgdGhpcyBtb3JlIHRoYW4gb25jZSwKKyAqIGFuZCB0aGUgc2Vjb25kIGNhbGwgc2hvdWxkIGJlIGEgbm8tb3AuCisgKi8KK3ZvaWQgbG9ja3NfZW5kX2dyYWNlKHN0cnVjdCBsb2NrX21hbmFnZXIgKmxtKQoreworCXNwaW5fbG9jaygmZ3JhY2VfbG9jayk7CisJbGlzdF9kZWxfaW5pdCgmbG0tPmxpc3QpOworCXNwaW5fdW5sb2NrKCZncmFjZV9sb2NrKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGxvY2tzX2VuZF9ncmFjZSk7CisKKy8qKgorICogbG9ja3NfaW5fZ3JhY2UKKyAqCisgKiBMb2NrIG1hbmFnZXJzIGNhbGwgdGhpcyBmdW5jdGlvbiB0byBkZXRlcm1pbmUgd2hlbiBpdCBpcyBPSyBmb3IgdGhlbQorICogdG8gYW5zd2VyIG9yZGluYXJ5IGxvY2sgcmVxdWVzdHMsIGFuZCB3aGVuIHRoZXkgc2hvdWxkIGFjY2VwdCBvbmx5CisgKiBsb2NrIHJlY2xhaW1zLgorICovCitpbnQgbG9ja3NfaW5fZ3JhY2Uodm9pZCkKK3sKKwlyZXR1cm4gIWxpc3RfZW1wdHkoJmdyYWNlX2xpc3QpOworfQorRVhQT1JUX1NZTUJPTF9HUEwobG9ja3NfaW5fZ3JhY2UpOwpkaWZmIC0tZ2l0IGEvZnMvbG9ja2QvaG9zdC5jIGIvZnMvbG9ja2QvaG9zdC5jCmluZGV4IGExNzY2NGMuLjlmZDg4ODkgMTAwNjQ0Ci0tLSBhL2ZzL2xvY2tkL2hvc3QuYworKysgYi9mcy9sb2NrZC9ob3N0LmMKQEAgLTExLDE2ICsxMSwxNyBAQAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L2luLmg+CisjaW5jbHVkZSA8bGludXgvaW42Lmg+CiAjaW5jbHVkZSA8bGludXgvc3VucnBjL2NsbnQuaD4KICNpbmNsdWRlIDxsaW51eC9zdW5ycGMvc3ZjLmg+CiAjaW5jbHVkZSA8bGludXgvbG9ja2QvbG9ja2QuaD4KICNpbmNsdWRlIDxsaW51eC9sb2NrZC9zbV9pbnRlci5oPgogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAKKyNpbmNsdWRlIDxuZXQvaXB2Ni5oPgogCiAjZGVmaW5lIE5MTURCR19GQUNJTElUWQkJTkxNREJHX0hPU1RDQUNIRQogI2RlZmluZSBOTE1fSE9TVF9OUkhBU0gJCTMyCi0jZGVmaW5lIE5MTV9BRERSSEFTSChhZGRyKQkobnRvaGwoYWRkcikgJiAoTkxNX0hPU1RfTlJIQVNILTEpKQogI2RlZmluZSBOTE1fSE9TVF9SRUJJTkQJCSg2MCAqIEhaKQogI2RlZmluZSBOTE1fSE9TVF9FWFBJUkUJCSgzMDAgKiBIWikKICNkZWZpbmUgTkxNX0hPU1RfQ09MTEVDVAkoMTIwICogSFopCkBAIC0zMCw0MiArMzEsMTE1IEBACiBzdGF0aWMgaW50CQkJbnJob3N0czsKIHN0YXRpYyBERUZJTkVfTVVURVgobmxtX2hvc3RfbXV0ZXgpOwogCi0KIHN0YXRpYyB2b2lkCQkJbmxtX2djX2hvc3RzKHZvaWQpOwotc3RhdGljIHN0cnVjdCBuc21faGFuZGxlICoJX19uc21fZmluZChjb25zdCBzdHJ1Y3Qgc29ja2FkZHJfaW4gKiwKLQkJCQkJY29uc3QgY2hhciAqLCB1bnNpZ25lZCBpbnQsIGludCk7Ci1zdGF0aWMgc3RydWN0IG5zbV9oYW5kbGUgKgluc21fZmluZChjb25zdCBzdHJ1Y3Qgc29ja2FkZHJfaW4gKnNpbiwKLQkJCQkJIGNvbnN0IGNoYXIgKmhvc3RuYW1lLAotCQkJCQkgdW5zaWduZWQgaW50IGhvc3RuYW1lX2xlbik7CitzdGF0aWMgc3RydWN0IG5zbV9oYW5kbGUJKm5zbV9maW5kKGNvbnN0IHN0cnVjdCBzb2NrYWRkciAqc2FwLAorCQkJCQkJY29uc3Qgc2l6ZV90IHNhbGVuLAorCQkJCQkJY29uc3QgY2hhciAqaG9zdG5hbWUsCisJCQkJCQljb25zdCBzaXplX3QgaG9zdG5hbWVfbGVuLAorCQkJCQkJY29uc3QgaW50IGNyZWF0ZSk7CisKK3N0cnVjdCBubG1fbG9va3VwX2hvc3RfaW5mbyB7CisJY29uc3QgaW50CQlzZXJ2ZXI7CQkvKiBzZWFyY2ggZm9yIHNlcnZlcnxjbGllbnQgKi8KKwljb25zdCBzdHJ1Y3Qgc29ja2FkZHIJKnNhcDsJCS8qIGFkZHJlc3MgdG8gc2VhcmNoIGZvciAqLworCWNvbnN0IHNpemVfdAkJc2FsZW47CQkvKiBpdCdzIGxlbmd0aCAqLworCWNvbnN0IHVuc2lnbmVkIHNob3J0CXByb3RvY29sOwkvKiB0cmFuc3BvcnQgdG8gc2VhcmNoIGZvciovCisJY29uc3QgdTMyCQl2ZXJzaW9uOwkvKiBOTE0gdmVyc2lvbiB0byBzZWFyY2ggZm9yICovCisJY29uc3QgY2hhcgkJKmhvc3RuYW1lOwkvKiByZW1vdGUncyBob3N0bmFtZSAqLworCWNvbnN0IHNpemVfdAkJaG9zdG5hbWVfbGVuOwkvKiBpdCdzIGxlbmd0aCAqLworCWNvbnN0IHN0cnVjdCBzb2NrYWRkcgkqc3JjX3NhcDsJLyogb3VyIGFkZHJlc3MgKG9wdGlvbmFsKSAqLworCWNvbnN0IHNpemVfdAkJc3JjX2xlbjsJLyogaXQncyBsZW5ndGggKi8KK307CisKKy8qCisgKiBIYXNoIGZ1bmN0aW9uIG11c3Qgd29yayB3ZWxsIG9uIGJpZy0gYW5kIGxpdHRsZS1lbmRpYW4gcGxhdGZvcm1zCisgKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQgX19ubG1faGFzaDMyKGNvbnN0IF9fYmUzMiBuKQoreworCXVuc2lnbmVkIGludCBoYXNoID0gKF9fZm9yY2UgdTMyKW4gXiAoKF9fZm9yY2UgdTMyKW4gPj4gMTYpOworCXJldHVybiBoYXNoIF4gKGhhc2ggPj4gOCk7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgX19ubG1faGFzaF9hZGRyNChjb25zdCBzdHJ1Y3Qgc29ja2FkZHIgKnNhcCkKK3sKKwljb25zdCBzdHJ1Y3Qgc29ja2FkZHJfaW4gKnNpbiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKilzYXA7CisJcmV0dXJuIF9fbmxtX2hhc2gzMihzaW4tPnNpbl9hZGRyLnNfYWRkcik7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgX19ubG1faGFzaF9hZGRyNihjb25zdCBzdHJ1Y3Qgc29ja2FkZHIgKnNhcCkKK3sKKwljb25zdCBzdHJ1Y3Qgc29ja2FkZHJfaW42ICpzaW42ID0gKHN0cnVjdCBzb2NrYWRkcl9pbjYgKilzYXA7CisJY29uc3Qgc3RydWN0IGluNl9hZGRyIGFkZHIgPSBzaW42LT5zaW42X2FkZHI7CisJcmV0dXJuIF9fbmxtX2hhc2gzMihhZGRyLnM2X2FkZHIzMlswXSkgXgorCSAgICAgICBfX25sbV9oYXNoMzIoYWRkci5zNl9hZGRyMzJbMV0pIF4KKwkgICAgICAgX19ubG1faGFzaDMyKGFkZHIuczZfYWRkcjMyWzJdKSBeCisJICAgICAgIF9fbmxtX2hhc2gzMihhZGRyLnM2X2FkZHIzMlszXSk7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgbmxtX2hhc2hfYWRkcmVzcyhjb25zdCBzdHJ1Y3Qgc29ja2FkZHIgKnNhcCkKK3sKKwl1bnNpZ25lZCBpbnQgaGFzaDsKKworCXN3aXRjaCAoc2FwLT5zYV9mYW1pbHkpIHsKKwljYXNlIEFGX0lORVQ6CisJCWhhc2ggPSBfX25sbV9oYXNoX2FkZHI0KHNhcCk7CisJCWJyZWFrOworCWNhc2UgQUZfSU5FVDY6CisJCWhhc2ggPSBfX25sbV9oYXNoX2FkZHI2KHNhcCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWhhc2ggPSAwOworCX0KKwlyZXR1cm4gaGFzaCAmIChOTE1fSE9TVF9OUkhBU0ggLSAxKTsKK30KKworc3RhdGljIHZvaWQgbmxtX2NsZWFyX3BvcnQoc3RydWN0IHNvY2thZGRyICpzYXApCit7CisJc3dpdGNoIChzYXAtPnNhX2ZhbWlseSkgeworCWNhc2UgQUZfSU5FVDoKKwkJKChzdHJ1Y3Qgc29ja2FkZHJfaW4gKilzYXApLT5zaW5fcG9ydCA9IDA7CisJCWJyZWFrOworCWNhc2UgQUZfSU5FVDY6CisJCSgoc3RydWN0IHNvY2thZGRyX2luNiAqKXNhcCktPnNpbjZfcG9ydCA9IDA7CisJCWJyZWFrOworCX0KK30KKworc3RhdGljIHZvaWQgbmxtX2Rpc3BsYXlfYWRkcmVzcyhjb25zdCBzdHJ1Y3Qgc29ja2FkZHIgKnNhcCwKKwkJCQljaGFyICpidWYsIGNvbnN0IHNpemVfdCBsZW4pCit7CisJY29uc3Qgc3RydWN0IHNvY2thZGRyX2luICpzaW4gPSAoc3RydWN0IHNvY2thZGRyX2luICopc2FwOworCWNvbnN0IHN0cnVjdCBzb2NrYWRkcl9pbjYgKnNpbjYgPSAoc3RydWN0IHNvY2thZGRyX2luNiAqKXNhcDsKKworCXN3aXRjaCAoc2FwLT5zYV9mYW1pbHkpIHsKKwljYXNlIEFGX1VOU1BFQzoKKwkJc25wcmludGYoYnVmLCBsZW4sICJ1bnNwZWNpZmllZCIpOworCQlicmVhazsKKwljYXNlIEFGX0lORVQ6CisJCXNucHJpbnRmKGJ1ZiwgbGVuLCBOSVBRVUFEX0ZNVCwgTklQUVVBRChzaW4tPnNpbl9hZGRyLnNfYWRkcikpOworCQlicmVhazsKKwljYXNlIEFGX0lORVQ2OgorCQlpZiAoaXB2Nl9hZGRyX3Y0bWFwcGVkKCZzaW42LT5zaW42X2FkZHIpKQorCQkJc25wcmludGYoYnVmLCBsZW4sIE5JUFFVQURfRk1ULAorCQkJCSBOSVBRVUFEKHNpbjYtPnNpbjZfYWRkci5zNl9hZGRyMzJbM10pKTsKKwkJZWxzZQorCQkJc25wcmludGYoYnVmLCBsZW4sIE5JUDZfRk1ULCBOSVA2KHNpbjYtPnNpbjZfYWRkcikpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlzbnByaW50ZihidWYsIGxlbiwgInVuc3VwcG9ydGVkIGFkZHJlc3MgZmFtaWx5Iik7CisJCWJyZWFrOworCX0KK30KIAogLyoKICAqIENvbW1vbiBob3N0IGxvb2t1cCByb3V0aW5lIGZvciBzZXJ2ZXIgJiBjbGllbnQKICAqLwotc3RhdGljIHN0cnVjdCBubG1faG9zdCAqbmxtX2xvb2t1cF9ob3N0KGludCBzZXJ2ZXIsCi0JCQkJCWNvbnN0IHN0cnVjdCBzb2NrYWRkcl9pbiAqc2luLAotCQkJCQlpbnQgcHJvdG8sIHUzMiB2ZXJzaW9uLAotCQkJCQljb25zdCBjaGFyICpob3N0bmFtZSwKLQkJCQkJdW5zaWduZWQgaW50IGhvc3RuYW1lX2xlbiwKLQkJCQkJY29uc3Qgc3RydWN0IHNvY2thZGRyX2luICpzc2luKQorc3RhdGljIHN0cnVjdCBubG1faG9zdCAqbmxtX2xvb2t1cF9ob3N0KHN0cnVjdCBubG1fbG9va3VwX2hvc3RfaW5mbyAqbmkpCiB7CiAJc3RydWN0IGhsaXN0X2hlYWQgKmNoYWluOwogCXN0cnVjdCBobGlzdF9ub2RlICpwb3M7CiAJc3RydWN0IG5sbV9ob3N0CSpob3N0OwogCXN0cnVjdCBuc21faGFuZGxlICpuc20gPSBOVUxMOwotCWludAkJaGFzaDsKIAotCWRwcmludGsoImxvY2tkOiBubG1fbG9va3VwX2hvc3QoIk5JUFFVQURfRk1UIi0+Ik5JUFFVQURfRk1UCi0JCQkiLCBwPSVkLCB2PSV1LCBteSByb2xlPSVzLCBuYW1lPSUuKnMpXG4iLAotCQkJTklQUVVBRChzc2luLT5zaW5fYWRkci5zX2FkZHIpLAotCQkJTklQUVVBRChzaW4tPnNpbl9hZGRyLnNfYWRkciksIHByb3RvLCB2ZXJzaW9uLAotCQkJc2VydmVyPyAic2VydmVyIiA6ICJjbGllbnQiLAotCQkJaG9zdG5hbWVfbGVuLAotCQkJaG9zdG5hbWU/IGhvc3RuYW1lIDogIjxub25lPiIpOwotCi0KLQloYXNoID0gTkxNX0FERFJIQVNIKHNpbi0+c2luX2FkZHIuc19hZGRyKTsKLQotCS8qIExvY2sgaGFzaCB0YWJsZSAqLwogCW11dGV4X2xvY2soJm5sbV9ob3N0X211dGV4KTsKIAogCWlmICh0aW1lX2FmdGVyX2VxKGppZmZpZXMsIG5leHRfZ2MpKQpAQCAtNzgsMjIgKzE1MiwyMiBAQAogCSAqIGRpZmZlcmVudCBOTE0gcnBjX2NsaWVudHMgaW50byBvbmUgc2luZ2xlIG5sbV9ob3N0IG9iamVjdC4KIAkgKiBUaGlzIHdvdWxkIGFsbG93IHVzIHRvIGhhdmUgb25lIG5sbV9ob3N0IHBlciBhZGRyZXNzLgogCSAqLwotCWNoYWluID0gJm5sbV9ob3N0c1toYXNoXTsKKwljaGFpbiA9ICZubG1faG9zdHNbbmxtX2hhc2hfYWRkcmVzcyhuaS0+c2FwKV07CiAJaGxpc3RfZm9yX2VhY2hfZW50cnkoaG9zdCwgcG9zLCBjaGFpbiwgaF9oYXNoKSB7Ci0JCWlmICghbmxtX2NtcF9hZGRyKCZob3N0LT5oX2FkZHIsIHNpbikpCisJCWlmICghbmxtX2NtcF9hZGRyKG5sbV9hZGRyKGhvc3QpLCBuaS0+c2FwKSkKIAkJCWNvbnRpbnVlOwogCiAJCS8qIFNlZSBpZiB3ZSBoYXZlIGFuIE5TTSBoYW5kbGUgZm9yIHRoaXMgY2xpZW50ICovCiAJCWlmICghbnNtKQogCQkJbnNtID0gaG9zdC0+aF9uc21oYW5kbGU7CiAKLQkJaWYgKGhvc3QtPmhfcHJvdG8gIT0gcHJvdG8pCisJCWlmIChob3N0LT5oX3Byb3RvICE9IG5pLT5wcm90b2NvbCkKIAkJCWNvbnRpbnVlOwotCQlpZiAoaG9zdC0+aF92ZXJzaW9uICE9IHZlcnNpb24pCisJCWlmIChob3N0LT5oX3ZlcnNpb24gIT0gbmktPnZlcnNpb24pCiAJCQljb250aW51ZTsKLQkJaWYgKGhvc3QtPmhfc2VydmVyICE9IHNlcnZlcikKKwkJaWYgKGhvc3QtPmhfc2VydmVyICE9IG5pLT5zZXJ2ZXIpCiAJCQljb250aW51ZTsKLQkJaWYgKCFubG1fY21wX2FkZHIoJmhvc3QtPmhfc2FkZHIsIHNzaW4pKQorCQlpZiAoIW5sbV9jbXBfYWRkcihubG1fc3JjYWRkcihob3N0KSwgbmktPnNyY19zYXApKQogCQkJY29udGludWU7CiAKIAkJLyogTW92ZSB0byBoZWFkIG9mIGhhc2ggY2hhaW4uICovCkBAIC0xMDEsMzAgKzE3NSw0MSBAQAogCQlobGlzdF9hZGRfaGVhZCgmaG9zdC0+aF9oYXNoLCBjaGFpbik7CiAKIAkJbmxtX2dldF9ob3N0KGhvc3QpOworCQlkcHJpbnRrKCJsb2NrZDogbmxtX2xvb2t1cF9ob3N0IGZvdW5kIGhvc3QgJXMgKCVzKVxuIiwKKwkJCQlob3N0LT5oX25hbWUsIGhvc3QtPmhfYWRkcmJ1Zik7CiAJCWdvdG8gb3V0OwogCX0KKworCS8qCisJICogVGhlIGhvc3Qgd2Fzbid0IGluIG91ciBoYXNoIHRhYmxlLiAgSWYgd2UgZG9uJ3QKKwkgKiBoYXZlIGFuIE5TTSBoYW5kbGUgZm9yIGl0IHlldCwgY3JlYXRlIG9uZS4KKwkgKi8KIAlpZiAobnNtKQogCQlhdG9taWNfaW5jKCZuc20tPnNtX2NvdW50KTsKLQotCWhvc3QgPSBOVUxMOwotCi0JLyogU2FkbHksIHRoZSBob3N0IGlzbid0IGluIG91ciBoYXNoIHRhYmxlIHlldC4gU2VlIGlmCi0JICogd2UgaGF2ZSBhbiBOU00gaGFuZGxlIGZvciBpdC4gSWYgbm90LCBjcmVhdGUgb25lLgotCSAqLwotCWlmICghbnNtICYmICEobnNtID0gbnNtX2ZpbmQoc2luLCBob3N0bmFtZSwgaG9zdG5hbWVfbGVuKSkpCi0JCWdvdG8gb3V0OworCWVsc2UgeworCQlob3N0ID0gTlVMTDsKKwkJbnNtID0gbnNtX2ZpbmQobmktPnNhcCwgbmktPnNhbGVuLAorCQkJCW5pLT5ob3N0bmFtZSwgbmktPmhvc3RuYW1lX2xlbiwgMSk7CisJCWlmICghbnNtKSB7CisJCQlkcHJpbnRrKCJsb2NrZDogbmxtX2xvb2t1cF9ob3N0IGZhaWxlZDsgIgorCQkJCSJubyBuc20gaGFuZGxlXG4iKTsKKwkJCWdvdG8gb3V0OworCQl9CisJfQogCiAJaG9zdCA9IGt6YWxsb2Moc2l6ZW9mKCpob3N0KSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFob3N0KSB7CiAJCW5zbV9yZWxlYXNlKG5zbSk7CisJCWRwcmludGsoImxvY2tkOiBubG1fbG9va3VwX2hvc3QgZmFpbGVkOyBubyBtZW1vcnlcbiIpOwogCQlnb3RvIG91dDsKIAl9CiAJaG9zdC0+aF9uYW1lCSAgID0gbnNtLT5zbV9uYW1lOwotCWhvc3QtPmhfYWRkciAgICAgICA9ICpzaW47Ci0JaG9zdC0+aF9hZGRyLnNpbl9wb3J0ID0gMDsJLyogb3VjaCEgKi8KLQlob3N0LT5oX3NhZGRyCSAgID0gKnNzaW47Ci0JaG9zdC0+aF92ZXJzaW9uICAgID0gdmVyc2lvbjsKLQlob3N0LT5oX3Byb3RvICAgICAgPSBwcm90bzsKKwltZW1jcHkobmxtX2FkZHIoaG9zdCksIG5pLT5zYXAsIG5pLT5zYWxlbik7CisJaG9zdC0+aF9hZGRybGVuID0gbmktPnNhbGVuOworCW5sbV9jbGVhcl9wb3J0KG5sbV9hZGRyKGhvc3QpKTsKKwltZW1jcHkobmxtX3NyY2FkZHIoaG9zdCksIG5pLT5zcmNfc2FwLCBuaS0+c3JjX2xlbik7CisJaG9zdC0+aF92ZXJzaW9uICAgID0gbmktPnZlcnNpb247CisJaG9zdC0+aF9wcm90byAgICAgID0gbmktPnByb3RvY29sOwogCWhvc3QtPmhfcnBjY2xudCAgICA9IE5VTEw7CiAJbXV0ZXhfaW5pdCgmaG9zdC0+aF9tdXRleCk7CiAJaG9zdC0+aF9uZXh0cmViaW5kID0gamlmZmllcyArIE5MTV9IT1NUX1JFQklORDsKQEAgLTEzNSw3ICsyMjAsNyBAQAogCWhvc3QtPmhfc3RhdGUgICAgICA9IDA7CQkJLyogcHNldWRvIE5TTSBzdGF0ZSAqLwogCWhvc3QtPmhfbnNtc3RhdGUgICA9IDA7CQkJLyogcmVhbCBOU00gc3RhdGUgKi8KIAlob3N0LT5oX25zbWhhbmRsZSAgPSBuc207Ci0JaG9zdC0+aF9zZXJ2ZXIJICAgPSBzZXJ2ZXI7CisJaG9zdC0+aF9zZXJ2ZXIJICAgPSBuaS0+c2VydmVyOwogCWhsaXN0X2FkZF9oZWFkKCZob3N0LT5oX2hhc2gsIGNoYWluKTsKIAlJTklUX0xJU1RfSEVBRCgmaG9zdC0+aF9sb2Nrb3duZXJzKTsKIAlzcGluX2xvY2tfaW5pdCgmaG9zdC0+aF9sb2NrKTsKQEAgLTE0Myw2ICsyMjgsMTUgQEAKIAlJTklUX0xJU1RfSEVBRCgmaG9zdC0+aF9yZWNsYWltKTsKIAogCW5yaG9zdHMrKzsKKworCW5sbV9kaXNwbGF5X2FkZHJlc3MoKHN0cnVjdCBzb2NrYWRkciAqKSZob3N0LT5oX2FkZHIsCisJCQkJaG9zdC0+aF9hZGRyYnVmLCBzaXplb2YoaG9zdC0+aF9hZGRyYnVmKSk7CisJbmxtX2Rpc3BsYXlfYWRkcmVzcygoc3RydWN0IHNvY2thZGRyICopJmhvc3QtPmhfc3JjYWRkciwKKwkJCQlob3N0LT5oX3NyY2FkZHJidWYsIHNpemVvZihob3N0LT5oX3NyY2FkZHJidWYpKTsKKworCWRwcmludGsoImxvY2tkOiBubG1fbG9va3VwX2hvc3QgY3JlYXRlZCBob3N0ICVzXG4iLAorCQkJaG9zdC0+aF9uYW1lKTsKKwogb3V0OgogCW11dGV4X3VubG9jaygmbmxtX2hvc3RfbXV0ZXgpOwogCXJldHVybiBob3N0OwpAQCAtMTcwLDMzICsyNjQsMTAzIEBACiAJa2ZyZWUoaG9zdCk7CiB9CiAKLS8qCi0gKiBGaW5kIGFuIE5MTSBzZXJ2ZXIgaGFuZGxlIGluIHRoZSBjYWNoZS4gSWYgdGhlcmUgaXMgbm9uZSwgY3JlYXRlIGl0LgorLyoqCisgKiBubG1jbG50X2xvb2t1cF9ob3N0IC0gRmluZCBhbiBOTE0gaG9zdCBoYW5kbGUgbWF0Y2hpbmcgYSByZW1vdGUgc2VydmVyCisgKiBAc2FwOiBuZXR3b3JrIGFkZHJlc3Mgb2Ygc2VydmVyCisgKiBAc2FsZW46IGxlbmd0aCBvZiBzZXJ2ZXIgYWRkcmVzcworICogQHByb3RvY29sOiB0cmFuc3BvcnQgcHJvdG9jb2wgdG8gdXNlCisgKiBAdmVyc2lvbjogTkxNIHByb3RvY29sIHZlcnNpb24KKyAqIEBob3N0bmFtZTogJ1wwJy10ZXJtaW5hdGVkIGhvc3RuYW1lIG9mIHNlcnZlcgorICoKKyAqIFJldHVybnMgYW4gbmxtX2hvc3Qgc3RydWN0dXJlIHRoYXQgbWF0Y2hlcyB0aGUgcGFzc2VkLWluCisgKiBbc2VydmVyIGFkZHJlc3MsIHRyYW5zcG9ydCBwcm90b2NvbCwgTkxNIHZlcnNpb24sIHNlcnZlciBob3N0bmFtZV0uCisgKiBJZiBvbmUgZG9lc24ndCBhbHJlYWR5IGV4aXN0IGluIHRoZSBob3N0IGNhY2hlLCBhIG5ldyBoYW5kbGUgaXMKKyAqIGNyZWF0ZWQgYW5kIHJldHVybmVkLgogICovCi1zdHJ1Y3QgbmxtX2hvc3QgKm5sbWNsbnRfbG9va3VwX2hvc3QoY29uc3Qgc3RydWN0IHNvY2thZGRyX2luICpzaW4sCi0JCQkJICAgICBpbnQgcHJvdG8sIHUzMiB2ZXJzaW9uLAotCQkJCSAgICAgY29uc3QgY2hhciAqaG9zdG5hbWUsCi0JCQkJICAgICB1bnNpZ25lZCBpbnQgaG9zdG5hbWVfbGVuKQorc3RydWN0IG5sbV9ob3N0ICpubG1jbG50X2xvb2t1cF9ob3N0KGNvbnN0IHN0cnVjdCBzb2NrYWRkciAqc2FwLAorCQkJCSAgICAgY29uc3Qgc2l6ZV90IHNhbGVuLAorCQkJCSAgICAgY29uc3QgdW5zaWduZWQgc2hvcnQgcHJvdG9jb2wsCisJCQkJICAgICBjb25zdCB1MzIgdmVyc2lvbiwgY29uc3QgY2hhciAqaG9zdG5hbWUpCiB7Ci0Jc3RydWN0IHNvY2thZGRyX2luIHNzaW4gPSB7MH07CisJY29uc3Qgc3RydWN0IHNvY2thZGRyIHNvdXJjZSA9IHsKKwkJLnNhX2ZhbWlseQk9IEFGX1VOU1BFQywKKwl9OworCXN0cnVjdCBubG1fbG9va3VwX2hvc3RfaW5mbyBuaSA9IHsKKwkJLnNlcnZlcgkJPSAwLAorCQkuc2FwCQk9IHNhcCwKKwkJLnNhbGVuCQk9IHNhbGVuLAorCQkucHJvdG9jb2wJPSBwcm90b2NvbCwKKwkJLnZlcnNpb24JPSB2ZXJzaW9uLAorCQkuaG9zdG5hbWUJPSBob3N0bmFtZSwKKwkJLmhvc3RuYW1lX2xlbgk9IHN0cmxlbihob3N0bmFtZSksCisJCS5zcmNfc2FwCT0gJnNvdXJjZSwKKwkJLnNyY19sZW4JPSBzaXplb2Yoc291cmNlKSwKKwl9OwogCi0JcmV0dXJuIG5sbV9sb29rdXBfaG9zdCgwLCBzaW4sIHByb3RvLCB2ZXJzaW9uLAotCQkJICAgICAgIGhvc3RuYW1lLCBob3N0bmFtZV9sZW4sICZzc2luKTsKKwlkcHJpbnRrKCJsb2NrZDogJXMoaG9zdD0nJXMnLCB2ZXJzPSV1LCBwcm90bz0lcylcbiIsIF9fZnVuY19fLAorCQkJKGhvc3RuYW1lID8gaG9zdG5hbWUgOiAiPG5vbmU+IiksIHZlcnNpb24sCisJCQkocHJvdG9jb2wgPT0gSVBQUk9UT19VRFAgPyAidWRwIiA6ICJ0Y3AiKSk7CisKKwlyZXR1cm4gbmxtX2xvb2t1cF9ob3N0KCZuaSk7CiB9CiAKLS8qCi0gKiBGaW5kIGFuIE5MTSBjbGllbnQgaGFuZGxlIGluIHRoZSBjYWNoZS4gSWYgdGhlcmUgaXMgbm9uZSwgY3JlYXRlIGl0LgorLyoqCisgKiBubG1zdmNfbG9va3VwX2hvc3QgLSBGaW5kIGFuIE5MTSBob3N0IGhhbmRsZSBtYXRjaGluZyBhIHJlbW90ZSBjbGllbnQKKyAqIEBycXN0cDogaW5jb21pbmcgTkxNIHJlcXVlc3QKKyAqIEBob3N0bmFtZTogbmFtZSBvZiBjbGllbnQgaG9zdAorICogQGhvc3RuYW1lX2xlbjogbGVuZ3RoIG9mIGNsaWVudCBob3N0bmFtZQorICoKKyAqIFJldHVybnMgYW4gbmxtX2hvc3Qgc3RydWN0dXJlIHRoYXQgbWF0Y2hlcyB0aGUgW2NsaWVudCBhZGRyZXNzLAorICogdHJhbnNwb3J0IHByb3RvY29sLCBOTE0gdmVyc2lvbiwgY2xpZW50IGhvc3RuYW1lXSBvZiB0aGUgcGFzc2VkLWluCisgKiBOTE0gcmVxdWVzdC4gIElmIG9uZSBkb2Vzbid0IGFscmVhZHkgZXhpc3QgaW4gdGhlIGhvc3QgY2FjaGUsIGEKKyAqIG5ldyBoYW5kbGUgaXMgY3JlYXRlZCBhbmQgcmV0dXJuZWQuCisgKgorICogQmVmb3JlIHBvc3NpYmx5IGNyZWF0aW5nIGEgbmV3IG5sbV9ob3N0LCBjb25zdHJ1Y3QgYSBzb2NrYWRkcgorICogZm9yIGEgc3BlY2lmaWMgc291cmNlIGFkZHJlc3MgaW4gY2FzZSB0aGUgbG9jYWwgc3lzdGVtIGhhcworICogbXVsdGlwbGUgbmV0d29yayBhZGRyZXNzZXMuICBUaGUgZmFtaWx5IG9mIHRoZSBhZGRyZXNzIGluCisgKiBycV9kYWRkciBpcyBndWFyYW50ZWVkIHRvIGJlIHRoZSBzYW1lIGFzIHRoZSBmYW1pbHkgb2YgdGhlCisgKiBhZGRyZXNzIGluIHJxX2FkZHIsIHNvIGl0J3Mgc2FmZSB0byB1c2UgdGhlIHNhbWUgZmFtaWx5IGZvcgorICogdGhlIHNvdXJjZSBhZGRyZXNzLgogICovCi1zdHJ1Y3QgbmxtX2hvc3QgKgotbmxtc3ZjX2xvb2t1cF9ob3N0KHN0cnVjdCBzdmNfcnFzdCAqcnFzdHAsCi0JCQljb25zdCBjaGFyICpob3N0bmFtZSwgdW5zaWduZWQgaW50IGhvc3RuYW1lX2xlbikKK3N0cnVjdCBubG1faG9zdCAqbmxtc3ZjX2xvb2t1cF9ob3N0KGNvbnN0IHN0cnVjdCBzdmNfcnFzdCAqcnFzdHAsCisJCQkJICAgIGNvbnN0IGNoYXIgKmhvc3RuYW1lLAorCQkJCSAgICBjb25zdCBzaXplX3QgaG9zdG5hbWVfbGVuKQogewotCXN0cnVjdCBzb2NrYWRkcl9pbiBzc2luID0gezB9OworCXN0cnVjdCBzb2NrYWRkcl9pbiBzaW4gPSB7CisJCS5zaW5fZmFtaWx5CT0gQUZfSU5FVCwKKwl9OworCXN0cnVjdCBzb2NrYWRkcl9pbjYgc2luNiA9IHsKKwkJLnNpbjZfZmFtaWx5CT0gQUZfSU5FVDYsCisJfTsKKwlzdHJ1Y3QgbmxtX2xvb2t1cF9ob3N0X2luZm8gbmkgPSB7CisJCS5zZXJ2ZXIJCT0gMSwKKwkJLnNhcAkJPSBzdmNfYWRkcihycXN0cCksCisJCS5zYWxlbgkJPSBycXN0cC0+cnFfYWRkcmxlbiwKKwkJLnByb3RvY29sCT0gcnFzdHAtPnJxX3Byb3QsCisJCS52ZXJzaW9uCT0gcnFzdHAtPnJxX3ZlcnMsCisJCS5ob3N0bmFtZQk9IGhvc3RuYW1lLAorCQkuaG9zdG5hbWVfbGVuCT0gaG9zdG5hbWVfbGVuLAorCQkuc3JjX2xlbgk9IHJxc3RwLT5ycV9hZGRybGVuLAorCX07CiAKLQlzc2luLnNpbl9hZGRyID0gcnFzdHAtPnJxX2RhZGRyLmFkZHI7Ci0JcmV0dXJuIG5sbV9sb29rdXBfaG9zdCgxLCBzdmNfYWRkcl9pbihycXN0cCksCi0JCQkgICAgICAgcnFzdHAtPnJxX3Byb3QsIHJxc3RwLT5ycV92ZXJzLAotCQkJICAgICAgIGhvc3RuYW1lLCBob3N0bmFtZV9sZW4sICZzc2luKTsKKwlkcHJpbnRrKCJsb2NrZDogJXMoaG9zdD0nJSpzJywgdmVycz0ldSwgcHJvdG89JXMpXG4iLCBfX2Z1bmNfXywKKwkJCShpbnQpaG9zdG5hbWVfbGVuLCBob3N0bmFtZSwgcnFzdHAtPnJxX3ZlcnMsCisJCQkocnFzdHAtPnJxX3Byb3QgPT0gSVBQUk9UT19VRFAgPyAidWRwIiA6ICJ0Y3AiKSk7CisKKwlzd2l0Y2ggKG5pLnNhcC0+c2FfZmFtaWx5KSB7CisJY2FzZSBBRl9JTkVUOgorCQlzaW4uc2luX2FkZHIuc19hZGRyID0gcnFzdHAtPnJxX2RhZGRyLmFkZHIuc19hZGRyOworCQluaS5zcmNfc2FwID0gKHN0cnVjdCBzb2NrYWRkciAqKSZzaW47CisJCWJyZWFrOworCWNhc2UgQUZfSU5FVDY6CisJCWlwdjZfYWRkcl9jb3B5KCZzaW42LnNpbjZfYWRkciwgJnJxc3RwLT5ycV9kYWRkci5hZGRyNik7CisJCW5pLnNyY19zYXAgPSAoc3RydWN0IHNvY2thZGRyICopJnNpbjY7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiBOVUxMOworCX0KKworCXJldHVybiBubG1fbG9va3VwX2hvc3QoJm5pKTsKIH0KIAogLyoKQEAgLTIwNyw5ICszNzEsOCBAQAogewogCXN0cnVjdCBycGNfY2xudAkqY2xudDsKIAotCWRwcmludGsoImxvY2tkOiBubG1fYmluZF9ob3N0KCJOSVBRVUFEX0ZNVCItPiJOSVBRVUFEX0ZNVCIpXG4iLAotCQkJTklQUVVBRChob3N0LT5oX3NhZGRyLnNpbl9hZGRyKSwKLQkJCU5JUFFVQUQoaG9zdC0+aF9hZGRyLnNpbl9hZGRyKSk7CisJZHByaW50aygibG9ja2Q6IG5sbV9iaW5kX2hvc3QgJXMgKCVzKSwgbXkgYWRkcj0lc1xuIiwKKwkJCWhvc3QtPmhfbmFtZSwgaG9zdC0+aF9hZGRyYnVmLCBob3N0LT5oX3NyY2FkZHJidWYpOwogCiAJLyogTG9jayBob3N0IGhhbmRsZSAqLwogCW11dGV4X2xvY2soJmhvc3QtPmhfbXV0ZXgpOwpAQCAtMjIxLDcgKzM4NCw3IEBACiAJCWlmICh0aW1lX2FmdGVyX2VxKGppZmZpZXMsIGhvc3QtPmhfbmV4dHJlYmluZCkpIHsKIAkJCXJwY19mb3JjZV9yZWJpbmQoY2xudCk7CiAJCQlob3N0LT5oX25leHRyZWJpbmQgPSBqaWZmaWVzICsgTkxNX0hPU1RfUkVCSU5EOwotCQkJZHByaW50aygibG9ja2Q6IG5leHQgcmViaW5kIGluICVsZCBqaWZmaWVzXG4iLAorCQkJZHByaW50aygibG9ja2Q6IG5leHQgcmViaW5kIGluICVsdSBqaWZmaWVzXG4iLAogCQkJCQlob3N0LT5oX25leHRyZWJpbmQgLSBqaWZmaWVzKTsKIAkJfQogCX0gZWxzZSB7CkBAIC0yMzQsOSArMzk3LDkgQEAKIAkJfTsKIAkJc3RydWN0IHJwY19jcmVhdGVfYXJncyBhcmdzID0gewogCQkJLnByb3RvY29sCT0gaG9zdC0+aF9wcm90bywKLQkJCS5hZGRyZXNzCT0gKHN0cnVjdCBzb2NrYWRkciAqKSZob3N0LT5oX2FkZHIsCi0JCQkuYWRkcnNpemUJPSBzaXplb2YoaG9zdC0+aF9hZGRyKSwKLQkJCS5zYWRkcmVzcwk9IChzdHJ1Y3Qgc29ja2FkZHIgKikmaG9zdC0+aF9zYWRkciwKKwkJCS5hZGRyZXNzCT0gbmxtX2FkZHIoaG9zdCksCisJCQkuYWRkcnNpemUJPSBob3N0LT5oX2FkZHJsZW4sCisJCQkuc2FkZHJlc3MJPSBubG1fc3JjYWRkcihob3N0KSwKIAkJCS50aW1lb3V0CT0gJnRpbWVwYXJtcywKIAkJCS5zZXJ2ZXJuYW1lCT0gaG9zdC0+aF9uYW1lLAogCQkJLnByb2dyYW0JPSAmbmxtX3Byb2dyYW0sCkBAIC0zMjQsMTIgKzQ4NywxNiBAQAogCXN0cnVjdCBuc21faGFuZGxlICpuc207CiAJc3RydWN0IG5sbV9ob3N0CSpob3N0OwogCi0JZHByaW50aygibG9ja2Q6IG5sbV9ob3N0X3JlYm9vdGVkKCVzLCAldS4ldS4ldS4ldSlcbiIsCi0JCQlob3N0bmFtZSwgTklQUVVBRChzaW4tPnNpbl9hZGRyKSk7Ci0KLQkvKiBGaW5kIHRoZSBOU00gaGFuZGxlIGZvciB0aGlzIHBlZXIgKi8KLQlpZiAoIShuc20gPSBfX25zbV9maW5kKHNpbiwgaG9zdG5hbWUsIGhvc3RuYW1lX2xlbiwgMCkpKQorCW5zbSA9IG5zbV9maW5kKChzdHJ1Y3Qgc29ja2FkZHIgKilzaW4sIHNpemVvZigqc2luKSwKKwkJCWhvc3RuYW1lLCBob3N0bmFtZV9sZW4sIDApOworCWlmIChuc20gPT0gTlVMTCkgeworCQlkcHJpbnRrKCJsb2NrZDogbmV2ZXIgc2F3IHJlYm9vdGVkIHBlZXIgJyUuKnMnIGJlZm9yZVxuIiwKKwkJCQlob3N0bmFtZV9sZW4sIGhvc3RuYW1lKTsKIAkJcmV0dXJuOworCX0KKworCWRwcmludGsoImxvY2tkOiBubG1faG9zdF9yZWJvb3RlZCglLipzLCAlcylcbiIsCisJCQlob3N0bmFtZV9sZW4sIGhvc3RuYW1lLCBuc20tPnNtX2FkZHJidWYpOwogCiAJLyogV2hlbiByZWNsYWltaW5nIGxvY2tzIG9uIHRoaXMgcGVlciwgbWFrZSBzdXJlIHRoYXQKIAkgKiB3ZSBzZXQgdXAgYSBuZXcgbm90aWZpY2F0aW9uICovCkBAIC00NjEsMjIgKzYyOCwyMyBAQAogc3RhdGljIExJU1RfSEVBRChuc21faGFuZGxlcyk7CiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKG5zbV9sb2NrKTsKIAotc3RhdGljIHN0cnVjdCBuc21faGFuZGxlICoKLV9fbnNtX2ZpbmQoY29uc3Qgc3RydWN0IHNvY2thZGRyX2luICpzaW4sCi0JCWNvbnN0IGNoYXIgKmhvc3RuYW1lLCB1bnNpZ25lZCBpbnQgaG9zdG5hbWVfbGVuLAotCQlpbnQgY3JlYXRlKQorc3RhdGljIHN0cnVjdCBuc21faGFuZGxlICpuc21fZmluZChjb25zdCBzdHJ1Y3Qgc29ja2FkZHIgKnNhcCwKKwkJCQkgICBjb25zdCBzaXplX3Qgc2FsZW4sCisJCQkJICAgY29uc3QgY2hhciAqaG9zdG5hbWUsCisJCQkJICAgY29uc3Qgc2l6ZV90IGhvc3RuYW1lX2xlbiwKKwkJCQkgICBjb25zdCBpbnQgY3JlYXRlKQogewogCXN0cnVjdCBuc21faGFuZGxlICpuc20gPSBOVUxMOwogCXN0cnVjdCBuc21faGFuZGxlICpwb3M7CiAKLQlpZiAoIXNpbikKKwlpZiAoIXNhcCkKIAkJcmV0dXJuIE5VTEw7CiAKIAlpZiAoaG9zdG5hbWUgJiYgbWVtY2hyKGhvc3RuYW1lLCAnLycsIGhvc3RuYW1lX2xlbikgIT0gTlVMTCkgewogCQlpZiAocHJpbnRrX3JhdGVsaW1pdCgpKSB7CiAJCQlwcmludGsoS0VSTl9XQVJOSU5HICJJbnZhbGlkIGhvc3RuYW1lIFwiJS4qc1wiICIKIAkJCQkJICAgICJpbiBORlMgbG9jayByZXF1ZXN0XG4iLAotCQkJCWhvc3RuYW1lX2xlbiwgaG9zdG5hbWUpOworCQkJCShpbnQpaG9zdG5hbWVfbGVuLCBob3N0bmFtZSk7CiAJCX0KIAkJcmV0dXJuIE5VTEw7CiAJfQpAQCAtNDg5LDcgKzY1Nyw3IEBACiAJCQlpZiAoc3RybGVuKHBvcy0+c21fbmFtZSkgIT0gaG9zdG5hbWVfbGVuCiAJCQkgfHwgbWVtY21wKHBvcy0+c21fbmFtZSwgaG9zdG5hbWUsIGhvc3RuYW1lX2xlbikpCiAJCQkJY29udGludWU7Ci0JCX0gZWxzZSBpZiAoIW5sbV9jbXBfYWRkcigmcG9zLT5zbV9hZGRyLCBzaW4pKQorCQl9IGVsc2UgaWYgKCFubG1fY21wX2FkZHIobnNtX2FkZHIocG9zKSwgc2FwKSkKIAkJCWNvbnRpbnVlOwogCQlhdG9taWNfaW5jKCZwb3MtPnNtX2NvdW50KTsKIAkJa2ZyZWUobnNtKTsKQEAgLTUwOSwxMCArNjc3LDEzIEBACiAJaWYgKG5zbSA9PSBOVUxMKQogCQlyZXR1cm4gTlVMTDsKIAotCW5zbS0+c21fYWRkciA9ICpzaW47CisJbWVtY3B5KG5zbV9hZGRyKG5zbSksIHNhcCwgc2FsZW4pOworCW5zbS0+c21fYWRkcmxlbiA9IHNhbGVuOwogCW5zbS0+c21fbmFtZSA9IChjaGFyICopIChuc20gKyAxKTsKIAltZW1jcHkobnNtLT5zbV9uYW1lLCBob3N0bmFtZSwgaG9zdG5hbWVfbGVuKTsKIAluc20tPnNtX25hbWVbaG9zdG5hbWVfbGVuXSA9ICdcMCc7CisJbmxtX2Rpc3BsYXlfYWRkcmVzcygoc3RydWN0IHNvY2thZGRyICopJm5zbS0+c21fYWRkciwKKwkJCQluc20tPnNtX2FkZHJidWYsIHNpemVvZihuc20tPnNtX2FkZHJidWYpKTsKIAlhdG9taWNfc2V0KCZuc20tPnNtX2NvdW50LCAxKTsKIAlnb3RvIHJldHJ5OwogCkBAIC01MjEsMTMgKzY5Miw2IEBACiAJcmV0dXJuIG5zbTsKIH0KIAotc3RhdGljIHN0cnVjdCBuc21faGFuZGxlICoKLW5zbV9maW5kKGNvbnN0IHN0cnVjdCBzb2NrYWRkcl9pbiAqc2luLCBjb25zdCBjaGFyICpob3N0bmFtZSwKLQkgdW5zaWduZWQgaW50IGhvc3RuYW1lX2xlbikKLXsKLQlyZXR1cm4gX19uc21fZmluZChzaW4sIGhvc3RuYW1lLCBob3N0bmFtZV9sZW4sIDEpOwotfQotCiAvKgogICogUmVsZWFzZSBhbiBOU00gaGFuZGxlCiAgKi8KZGlmZiAtLWdpdCBhL2ZzL2xvY2tkL21vbi5jIGIvZnMvbG9ja2QvbW9uLmMKaW5kZXggZTRkNTYzNS4uNGU3ZTk1OCAxMDA2NDQKLS0tIGEvZnMvbG9ja2QvbW9uLmMKKysrIGIvZnMvbG9ja2QvbW9uLmMKQEAgLTUxLDcgKzUxLDcgQEAKIAogCW1lbXNldCgmYXJncywgMCwgc2l6ZW9mKGFyZ3MpKTsKIAlhcmdzLm1vbl9uYW1lID0gbnNtLT5zbV9uYW1lOwotCWFyZ3MuYWRkciA9IG5zbS0+c21fYWRkci5zaW5fYWRkci5zX2FkZHI7CisJYXJncy5hZGRyID0gbnNtX2FkZHJfaW4obnNtKS0+c2luX2FkZHIuc19hZGRyOwogCWFyZ3MucHJvZyA9IE5MTV9QUk9HUkFNOwogCWFyZ3MudmVycyA9IDM7CiAJYXJncy5wcm9jID0gTkxNUFJPQ19OU01fTk9USUZZOwpkaWZmIC0tZ2l0IGEvZnMvbG9ja2Qvc3ZjLmMgYi9mcy9sb2NrZC9zdmMuYwppbmRleCA1YmQ5YmYwLi5jNjMxYTgzIDEwMDY0NAotLS0gYS9mcy9sb2NrZC9zdmMuYworKysgYi9mcy9sb2NrZC9zdmMuYwpAQCAtNTEsNyArNTEsNiBAQAogc3RhdGljIHVuc2lnbmVkIGludAkJbmxtc3ZjX3VzZXJzOwogc3RhdGljIHN0cnVjdCB0YXNrX3N0cnVjdAkqbmxtc3ZjX3Rhc2s7CiBzdGF0aWMgc3RydWN0IHN2Y19ycXN0CQkqbmxtc3ZjX3Jxc3Q7Ci1pbnQJCQkJbmxtc3ZjX2dyYWNlX3BlcmlvZDsKIHVuc2lnbmVkIGxvbmcJCQlubG1zdmNfdGltZW91dDsKIAogLyoKQEAgLTg1LDI3ICs4NCwyMyBAQAogCQlyZXR1cm4gbmxtX3RpbWVvdXQgKiA1ICogSFo7CiB9CiAKLXVuc2lnbmVkIGxvbmcgZ2V0X25mc19ncmFjZV9wZXJpb2Qodm9pZCkKK3N0YXRpYyBzdHJ1Y3QgbG9ja19tYW5hZ2VyIGxvY2tkX21hbmFnZXIgPSB7Cit9OworCitzdGF0aWMgdm9pZCBncmFjZV9lbmRlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKm5vdF91c2VkKQogewotCXVuc2lnbmVkIGxvbmcgbG9ja2RncmFjZSA9IGdldF9sb2NrZF9ncmFjZV9wZXJpb2QoKTsKLQl1bnNpZ25lZCBsb25nIG5mc2RncmFjZSA9IDA7Ci0KLQlpZiAobmxtc3ZjX29wcykKLQkJbmZzZGdyYWNlID0gbmxtc3ZjX29wcy0+Z2V0X2dyYWNlX3BlcmlvZCgpOwotCi0JcmV0dXJuIG1heChsb2NrZGdyYWNlLCBuZnNkZ3JhY2UpOwotfQotRVhQT1JUX1NZTUJPTChnZXRfbmZzX2dyYWNlX3BlcmlvZCk7Ci0KLXN0YXRpYyB1bnNpZ25lZCBsb25nIHNldF9ncmFjZV9wZXJpb2Qodm9pZCkKLXsKLQlubG1zdmNfZ3JhY2VfcGVyaW9kID0gMTsKLQlyZXR1cm4gZ2V0X25mc19ncmFjZV9wZXJpb2QoKSArIGppZmZpZXM7CisJbG9ja3NfZW5kX2dyYWNlKCZsb2NrZF9tYW5hZ2VyKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGNsZWFyX2dyYWNlX3BlcmlvZCh2b2lkKQorc3RhdGljIERFQ0xBUkVfREVMQVlFRF9XT1JLKGdyYWNlX3BlcmlvZF9lbmQsIGdyYWNlX2VuZGVyKTsKKworc3RhdGljIHZvaWQgc2V0X2dyYWNlX3BlcmlvZCh2b2lkKQogewotCW5sbXN2Y19ncmFjZV9wZXJpb2QgPSAwOworCXVuc2lnbmVkIGxvbmcgZ3JhY2VfcGVyaW9kID0gZ2V0X2xvY2tkX2dyYWNlX3BlcmlvZCgpOworCisJbG9ja3Nfc3RhcnRfZ3JhY2UoJmxvY2tkX21hbmFnZXIpOworCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmZ3JhY2VfcGVyaW9kX2VuZCk7CisJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZncmFjZV9wZXJpb2RfZW5kLCBncmFjZV9wZXJpb2QpOwogfQogCiAvKgpAQCAtMTE2LDcgKzExMSw2IEBACiB7CiAJaW50CQllcnIgPSAwLCBwcmV2ZXJyID0gMDsKIAlzdHJ1Y3Qgc3ZjX3Jxc3QgKnJxc3RwID0gdnJxc3RwOwotCXVuc2lnbmVkIGxvbmcgZ3JhY2VfcGVyaW9kX2V4cGlyZTsKIAogCS8qIHRyeV90b19mcmVlemUoKSBpcyBjYWxsZWQgZnJvbSBzdmNfcmVjdigpICovCiAJc2V0X2ZyZWV6YWJsZSgpOwpAQCAtMTM5LDcgKzEzMyw3IEBACiAJCW5sbV90aW1lb3V0ID0gTE9DS0RfREZMVF9USU1FTzsKIAlubG1zdmNfdGltZW91dCA9IG5sbV90aW1lb3V0ICogSFo7CiAKLQlncmFjZV9wZXJpb2RfZXhwaXJlID0gc2V0X2dyYWNlX3BlcmlvZCgpOworCXNldF9ncmFjZV9wZXJpb2QoKTsKIAogCS8qCiAJICogVGhlIG1haW4gcmVxdWVzdCBsb29wLiBXZSBkb24ndCB0ZXJtaW5hdGUgdW50aWwgdGhlIGxhc3QKQEAgLTE1MywyMSArMTQ3LDEyIEBACiAJCQlmbHVzaF9zaWduYWxzKGN1cnJlbnQpOwogCQkJaWYgKG5sbXN2Y19vcHMpIHsKIAkJCQlubG1zdmNfaW52YWxpZGF0ZV9hbGwoKTsKLQkJCQlncmFjZV9wZXJpb2RfZXhwaXJlID0gc2V0X2dyYWNlX3BlcmlvZCgpOworCQkJCXNldF9ncmFjZV9wZXJpb2QoKTsKIAkJCX0KIAkJCWNvbnRpbnVlOwogCQl9CiAKLQkJLyoKLQkJICogUmV0cnkgYW55IGJsb2NrZWQgbG9ja3MgdGhhdCBoYXZlIGJlZW4gbm90aWZpZWQgYnkKLQkJICogdGhlIFZGUy4gRG9uJ3QgZG8gdGhpcyBkdXJpbmcgZ3JhY2UgcGVyaW9kLgotCQkgKiAoVGhlb3JldGljYWxseSwgdGhlcmUgc2hvdWxkbid0IGV2ZW4gYmUgYmxvY2tlZCBsb2NrcwotCQkgKiBkdXJpbmcgZ3JhY2UgcGVyaW9kKS4KLQkJICovCi0JCWlmICghbmxtc3ZjX2dyYWNlX3BlcmlvZCkgewotCQkJdGltZW91dCA9IG5sbXN2Y19yZXRyeV9ibG9ja2VkKCk7Ci0JCX0gZWxzZSBpZiAodGltZV9iZWZvcmUoZ3JhY2VfcGVyaW9kX2V4cGlyZSwgamlmZmllcykpCi0JCQljbGVhcl9ncmFjZV9wZXJpb2QoKTsKKwkJdGltZW91dCA9IG5sbXN2Y19yZXRyeV9ibG9ja2VkKCk7CiAKIAkJLyoKIAkJICogRmluZCBhIHNvY2tldCB3aXRoIGRhdGEgYXZhaWxhYmxlIGFuZCBjYWxsIGl0cwpAQCAtMTk1LDYgKzE4MCw3IEBACiAJCXN2Y19wcm9jZXNzKHJxc3RwKTsKIAl9CiAJZmx1c2hfc2lnbmFscyhjdXJyZW50KTsKKwljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJmdyYWNlX3BlcmlvZF9lbmQpOwogCWlmIChubG1zdmNfb3BzKQogCQlubG1zdmNfaW52YWxpZGF0ZV9hbGwoKTsKIAlubG1fc2h1dGRvd25faG9zdHMoKTsKQEAgLTIwMywyNSArMTg5LDI4IEBACiB9CiAKIC8qCi0gKiBNYWtlIGFueSBzb2NrZXRzIHRoYXQgYXJlIG5lZWRlZCBidXQgbm90IHByZXNlbnQuCi0gKiBJZiBubG1fdWRwcG9ydCBvciBubG1fdGNwcG9ydCB3ZXJlIHNldCBhcyBtb2R1bGUKLSAqIG9wdGlvbnMsIG1ha2UgdGhvc2Ugc29ja2V0cyB1bmNvbmRpdGlvbmFsbHkKKyAqIEVuc3VyZSB0aGVyZSBhcmUgYWN0aXZlIFVEUCBhbmQgVENQIGxpc3RlbmVycyBmb3IgbG9ja2QuCisgKgorICogRXZlbiBpZiB3ZSBoYXZlIG9ubHkgVENQIE5GUyBtb3VudHMgYW5kL29yIFRDUCBORlNEcywgc29tZQorICogbG9jYWwgc2VydmljZXMgKHN1Y2ggYXMgcnBjLnN0YXRkKSBzdGlsbCByZXF1aXJlIFVEUCwgYW5kCisgKiBzb21lIE5GUyBzZXJ2ZXJzIGRvIG5vdCB5ZXQgc3VwcG9ydCBOTE0gb3ZlciBUQ1AuCisgKgorICogUmV0dXJucyB6ZXJvIGlmIGFsbCBsaXN0ZW5lcnMgYXJlIGF2YWlsYWJsZTsgb3RoZXJ3aXNlIGEKKyAqIG5lZ2F0aXZlIGVycm5vIHZhbHVlIGlzIHJldHVybmVkLgogICovCi1zdGF0aWMgaW50IG1ha2Vfc29ja3Moc3RydWN0IHN2Y19zZXJ2ICpzZXJ2LCBpbnQgcHJvdG8pCitzdGF0aWMgaW50IG1ha2Vfc29ja3Moc3RydWN0IHN2Y19zZXJ2ICpzZXJ2KQogewogCXN0YXRpYyBpbnQgd2FybmVkOwogCXN0cnVjdCBzdmNfeHBydCAqeHBydDsKIAlpbnQgZXJyID0gMDsKIAotCWlmIChwcm90byA9PSBJUFBST1RPX1VEUCB8fCBubG1fdWRwcG9ydCkgewotCQl4cHJ0ID0gc3ZjX2ZpbmRfeHBydChzZXJ2LCAidWRwIiwgMCwgMCk7Ci0JCWlmICgheHBydCkKLQkJCWVyciA9IHN2Y19jcmVhdGVfeHBydChzZXJ2LCAidWRwIiwgbmxtX3VkcHBvcnQsCi0JCQkJCSAgICAgIFNWQ19TT0NLX0RFRkFVTFRTKTsKLQkJZWxzZQotCQkJc3ZjX3hwcnRfcHV0KHhwcnQpOwotCX0KLQlpZiAoZXJyID49IDAgJiYgKHByb3RvID09IElQUFJPVE9fVENQIHx8IG5sbV90Y3Bwb3J0KSkgeworCXhwcnQgPSBzdmNfZmluZF94cHJ0KHNlcnYsICJ1ZHAiLCAwLCAwKTsKKwlpZiAoIXhwcnQpCisJCWVyciA9IHN2Y19jcmVhdGVfeHBydChzZXJ2LCAidWRwIiwgbmxtX3VkcHBvcnQsCisJCQkJICAgICAgU1ZDX1NPQ0tfREVGQVVMVFMpOworCWVsc2UKKwkJc3ZjX3hwcnRfcHV0KHhwcnQpOworCWlmIChlcnIgPj0gMCkgewogCQl4cHJ0ID0gc3ZjX2ZpbmRfeHBydChzZXJ2LCAidGNwIiwgMCwgMCk7CiAJCWlmICgheHBydCkKIAkJCWVyciA9IHN2Y19jcmVhdGVfeHBydChzZXJ2LCAidGNwIiwgbmxtX3RjcHBvcnQsCkBAIC0yNDEsOCArMjMwLDcgQEAKIC8qCiAgKiBCcmluZyB1cCB0aGUgbG9ja2QgcHJvY2VzcyBpZiBpdCdzIG5vdCBhbHJlYWR5IHVwLgogICovCi1pbnQKLWxvY2tkX3VwKGludCBwcm90bykgLyogTWF5YmUgYWRkIGEgJ2ZhbWlseScgb3B0aW9uIHdoZW4gSVB2NiBpcyBzdXBwb3J0ZWQgPz8gKi8KK2ludCBsb2NrZF91cCh2b2lkKQogewogCXN0cnVjdCBzdmNfc2VydiAqc2VydjsKIAlpbnQJCWVycm9yID0gMDsKQEAgLTI1MSwxMSArMjM5LDggQEAKIAkvKgogCSAqIENoZWNrIHdoZXRoZXIgd2UncmUgYWxyZWFkeSB1cCBhbmQgcnVubmluZy4KIAkgKi8KLQlpZiAobmxtc3ZjX3Jxc3QpIHsKLQkJaWYgKHByb3RvKQotCQkJZXJyb3IgPSBtYWtlX3NvY2tzKG5sbXN2Y19ycXN0LT5ycV9zZXJ2ZXIsIHByb3RvKTsKKwlpZiAobmxtc3ZjX3Jxc3QpCiAJCWdvdG8gb3V0OwotCX0KIAogCS8qCiAJICogU2FuaXR5IGNoZWNrOiBpZiB0aGVyZSdzIG5vIHBpZCwKQEAgLTI2NiwxMyArMjUxLDE0IEBACiAJCQkibG9ja2RfdXA6IG5vIHBpZCwgJWQgdXNlcnM/P1xuIiwgbmxtc3ZjX3VzZXJzKTsKIAogCWVycm9yID0gLUVOT01FTTsKLQlzZXJ2ID0gc3ZjX2NyZWF0ZSgmbmxtc3ZjX3Byb2dyYW0sIExPQ0tEX0JVRlNJWkUsIE5VTEwpOworCXNlcnYgPSBzdmNfY3JlYXRlKCZubG1zdmNfcHJvZ3JhbSwgTE9DS0RfQlVGU0laRSwgQUZfSU5FVCwgTlVMTCk7CiAJaWYgKCFzZXJ2KSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgImxvY2tkX3VwOiBjcmVhdGUgc2VydmljZSBmYWlsZWRcbiIpOwogCQlnb3RvIG91dDsKIAl9CiAKLQlpZiAoKGVycm9yID0gbWFrZV9zb2NrcyhzZXJ2LCBwcm90bykpIDwgMCkKKwllcnJvciA9IG1ha2Vfc29ja3Moc2Vydik7CisJaWYgKGVycm9yIDwgMCkKIAkJZ290byBkZXN0cm95X2FuZF9vdXQ7CiAKIAkvKgpkaWZmIC0tZ2l0IGEvZnMvbG9ja2Qvc3ZjNHByb2MuYyBiL2ZzL2xvY2tkL3N2YzRwcm9jLmMKaW5kZXggNGE3MTRmNjQuLjAxNGY2Y2UgMTAwNjQ0Ci0tLSBhL2ZzL2xvY2tkL3N2YzRwcm9jLmMKKysrIGIvZnMvbG9ja2Qvc3ZjNHByb2MuYwpAQCAtODgsMTIgKzg4LDYgQEAKIAlkcHJpbnRrKCJsb2NrZDogVEVTVDQgICAgICAgIGNhbGxlZFxuIik7CiAJcmVzcC0+Y29va2llID0gYXJncC0+Y29va2llOwogCi0JLyogRG9uJ3QgYWNjZXB0IHRlc3QgcmVxdWVzdHMgZHVyaW5nIGdyYWNlIHBlcmlvZCAqLwotCWlmIChubG1zdmNfZ3JhY2VfcGVyaW9kKSB7Ci0JCXJlc3AtPnN0YXR1cyA9IG5sbV9sY2tfZGVuaWVkX2dyYWNlX3BlcmlvZDsKLQkJcmV0dXJuIHJjOwotCX0KLQogCS8qIE9idGFpbiBjbGllbnQgYW5kIGZpbGUgKi8KIAlpZiAoKHJlc3AtPnN0YXR1cyA9IG5sbTRzdmNfcmV0cmlldmVfYXJncyhycXN0cCwgYXJncCwgJmhvc3QsICZmaWxlKSkpCiAJCXJldHVybiByZXNwLT5zdGF0dXMgPT0gbmxtX2Ryb3BfcmVwbHkgPyBycGNfZHJvcF9yZXBseSA6cnBjX3N1Y2Nlc3M7CkBAIC0xMjIsMTIgKzExNiw2IEBACiAKIAlyZXNwLT5jb29raWUgPSBhcmdwLT5jb29raWU7CiAKLQkvKiBEb24ndCBhY2NlcHQgbmV3IGxvY2sgcmVxdWVzdHMgZHVyaW5nIGdyYWNlIHBlcmlvZCAqLwotCWlmIChubG1zdmNfZ3JhY2VfcGVyaW9kICYmICFhcmdwLT5yZWNsYWltKSB7Ci0JCXJlc3AtPnN0YXR1cyA9IG5sbV9sY2tfZGVuaWVkX2dyYWNlX3BlcmlvZDsKLQkJcmV0dXJuIHJjOwotCX0KLQogCS8qIE9idGFpbiBjbGllbnQgYW5kIGZpbGUgKi8KIAlpZiAoKHJlc3AtPnN0YXR1cyA9IG5sbTRzdmNfcmV0cmlldmVfYXJncyhycXN0cCwgYXJncCwgJmhvc3QsICZmaWxlKSkpCiAJCXJldHVybiByZXNwLT5zdGF0dXMgPT0gbmxtX2Ryb3BfcmVwbHkgPyBycGNfZHJvcF9yZXBseSA6cnBjX3N1Y2Nlc3M7CkBAIC0xNDYsNyArMTM0LDggQEAKIAogCS8qIE5vdyB0cnkgdG8gbG9jayB0aGUgZmlsZSAqLwogCXJlc3AtPnN0YXR1cyA9IG5sbXN2Y19sb2NrKHJxc3RwLCBmaWxlLCBob3N0LCAmYXJncC0+bG9jaywKLQkJCQkJYXJncC0+YmxvY2ssICZhcmdwLT5jb29raWUpOworCQkJCQlhcmdwLT5ibG9jaywgJmFyZ3AtPmNvb2tpZSwKKwkJCQkJYXJncC0+cmVjbGFpbSk7CiAJaWYgKHJlc3AtPnN0YXR1cyA9PSBubG1fZHJvcF9yZXBseSkKIAkJcmMgPSBycGNfZHJvcF9yZXBseTsKIAllbHNlCkBAIC0xNjksNyArMTU4LDcgQEAKIAlyZXNwLT5jb29raWUgPSBhcmdwLT5jb29raWU7CiAKIAkvKiBEb24ndCBhY2NlcHQgcmVxdWVzdHMgZHVyaW5nIGdyYWNlIHBlcmlvZCAqLwotCWlmIChubG1zdmNfZ3JhY2VfcGVyaW9kKSB7CisJaWYgKGxvY2tzX2luX2dyYWNlKCkpIHsKIAkJcmVzcC0+c3RhdHVzID0gbmxtX2xja19kZW5pZWRfZ3JhY2VfcGVyaW9kOwogCQlyZXR1cm4gcnBjX3N1Y2Nlc3M7CiAJfQpAQCAtMjAyLDcgKzE5MSw3IEBACiAJcmVzcC0+Y29va2llID0gYXJncC0+Y29va2llOwogCiAJLyogRG9uJ3QgYWNjZXB0IG5ldyBsb2NrIHJlcXVlc3RzIGR1cmluZyBncmFjZSBwZXJpb2QgKi8KLQlpZiAobmxtc3ZjX2dyYWNlX3BlcmlvZCkgeworCWlmIChsb2Nrc19pbl9ncmFjZSgpKSB7CiAJCXJlc3AtPnN0YXR1cyA9IG5sbV9sY2tfZGVuaWVkX2dyYWNlX3BlcmlvZDsKIAkJcmV0dXJuIHJwY19zdWNjZXNzOwogCX0KQEAgLTIzMSw3ICsyMjAsNyBAQAogCXJlc3AtPmNvb2tpZSA9IGFyZ3AtPmNvb2tpZTsKIAogCWRwcmludGsoImxvY2tkOiBHUkFOVEVEICAgICAgIGNhbGxlZFxuIik7Ci0JcmVzcC0+c3RhdHVzID0gbmxtY2xudF9ncmFudChzdmNfYWRkcl9pbihycXN0cCksICZhcmdwLT5sb2NrKTsKKwlyZXNwLT5zdGF0dXMgPSBubG1jbG50X2dyYW50KHN2Y19hZGRyKHJxc3RwKSwgJmFyZ3AtPmxvY2spOwogCWRwcmludGsoImxvY2tkOiBHUkFOVEVEICAgICAgIHN0YXR1cyAlZFxuIiwgbnRvaGwocmVzcC0+c3RhdHVzKSk7CiAJcmV0dXJuIHJwY19zdWNjZXNzOwogfQpAQCAtMzQxLDcgKzMzMCw3IEBACiAJcmVzcC0+Y29va2llID0gYXJncC0+Y29va2llOwogCiAJLyogRG9uJ3QgYWNjZXB0IG5ldyBsb2NrIHJlcXVlc3RzIGR1cmluZyBncmFjZSBwZXJpb2QgKi8KLQlpZiAobmxtc3ZjX2dyYWNlX3BlcmlvZCAmJiAhYXJncC0+cmVjbGFpbSkgeworCWlmIChsb2Nrc19pbl9ncmFjZSgpICYmICFhcmdwLT5yZWNsYWltKSB7CiAJCXJlc3AtPnN0YXR1cyA9IG5sbV9sY2tfZGVuaWVkX2dyYWNlX3BlcmlvZDsKIAkJcmV0dXJuIHJwY19zdWNjZXNzOwogCX0KQEAgLTM3NCw3ICszNjMsNyBAQAogCXJlc3AtPmNvb2tpZSA9IGFyZ3AtPmNvb2tpZTsKIAogCS8qIERvbid0IGFjY2VwdCByZXF1ZXN0cyBkdXJpbmcgZ3JhY2UgcGVyaW9kICovCi0JaWYgKG5sbXN2Y19ncmFjZV9wZXJpb2QpIHsKKwlpZiAobG9ja3NfaW5fZ3JhY2UoKSkgewogCQlyZXNwLT5zdGF0dXMgPSBubG1fbGNrX2RlbmllZF9ncmFjZV9wZXJpb2Q7CiAJCXJldHVybiBycGNfc3VjY2VzczsKIAl9CkBAIC00MzIsMTEgKzQyMSw5IEBACiB7CiAJc3RydWN0IHNvY2thZGRyX2luCXNhZGRyOwogCi0JbWVtY3B5KCZzYWRkciwgc3ZjX2FkZHJfaW4ocnFzdHApLCBzaXplb2Yoc2FkZHIpKTsKLQogCWRwcmludGsoImxvY2tkOiBTTV9OT1RJRlkgICAgIGNhbGxlZFxuIik7Ci0JaWYgKHNhZGRyLnNpbl9hZGRyLnNfYWRkciAhPSBodG9ubChJTkFERFJfTE9PUEJBQ0spCi0JIHx8IG50b2hzKHNhZGRyLnNpbl9wb3J0KSA+PSAxMDI0KSB7CisKKwlpZiAoIW5sbV9wcml2aWxlZ2VkX3JlcXVlc3RlcihycXN0cCkpIHsKIAkJY2hhciBidWZbUlBDX01BWF9BRERSQlVGTEVOXTsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAibG9ja2Q6IHJlamVjdGVkIE5TTSBjYWxsYmFjayBmcm9tICVzXG4iLAogCQkJCXN2Y19wcmludF9hZGRyKHJxc3RwLCBidWYsIHNpemVvZihidWYpKSk7CmRpZmYgLS1naXQgYS9mcy9sb2NrZC9zdmNsb2NrLmMgYi9mcy9sb2NrZC9zdmNsb2NrLmMKaW5kZXggY2YwZDVjMi4uNjA2M2E4ZSAxMDA2NDQKLS0tIGEvZnMvbG9ja2Qvc3ZjbG9jay5jCisrKyBiL2ZzL2xvY2tkL3N2Y2xvY2suYwpAQCAtMzYwLDcgKzM2MCw3IEBACiBfX2JlMzIKIG5sbXN2Y19sb2NrKHN0cnVjdCBzdmNfcnFzdCAqcnFzdHAsIHN0cnVjdCBubG1fZmlsZSAqZmlsZSwKIAkgICAgc3RydWN0IG5sbV9ob3N0ICpob3N0LCBzdHJ1Y3QgbmxtX2xvY2sgKmxvY2ssIGludCB3YWl0LAotCSAgICBzdHJ1Y3QgbmxtX2Nvb2tpZSAqY29va2llKQorCSAgICBzdHJ1Y3QgbmxtX2Nvb2tpZSAqY29va2llLCBpbnQgcmVjbGFpbSkKIHsKIAlzdHJ1Y3QgbmxtX2Jsb2NrCSpibG9jayA9IE5VTEw7CiAJaW50CQkJZXJyb3I7CkBAIC00MDYsNiArNDA2LDE1IEBACiAJCWdvdG8gb3V0OwogCX0KIAorCWlmIChsb2Nrc19pbl9ncmFjZSgpICYmICFyZWNsYWltKSB7CisJCXJldCA9IG5sbV9sY2tfZGVuaWVkX2dyYWNlX3BlcmlvZDsKKwkJZ290byBvdXQ7CisJfQorCWlmIChyZWNsYWltICYmICFsb2Nrc19pbl9ncmFjZSgpKSB7CisJCXJldCA9IG5sbV9sY2tfZGVuaWVkX2dyYWNlX3BlcmlvZDsKKwkJZ290byBvdXQ7CisJfQorCiAJaWYgKCF3YWl0KQogCQlsb2NrLT5mbC5mbF9mbGFncyAmPSB+RkxfU0xFRVA7CiAJZXJyb3IgPSB2ZnNfbG9ja19maWxlKGZpbGUtPmZfZmlsZSwgRl9TRVRMSywgJmxvY2stPmZsLCBOVUxMKTsKQEAgLTUwMiw2ICs1MTEsMTAgQEAKIAkJZ290byBvdXQ7CiAJfQogCisJaWYgKGxvY2tzX2luX2dyYWNlKCkpIHsKKwkJcmV0ID0gbmxtX2xja19kZW5pZWRfZ3JhY2VfcGVyaW9kOworCQlnb3RvIG91dDsKKwl9CiAJZXJyb3IgPSB2ZnNfdGVzdF9sb2NrKGZpbGUtPmZfZmlsZSwgJmxvY2stPmZsKTsKIAlpZiAoZXJyb3IgPT0gRklMRV9MT0NLX0RFRkVSUkVEKSB7CiAJCXJldCA9IG5sbXN2Y19kZWZlcl9sb2NrX3Jxc3QocnFzdHAsIGJsb2NrKTsKQEAgLTU4Miw2ICs1OTUsOSBAQAogCQkJCShsb25nIGxvbmcpbG9jay0+ZmwuZmxfc3RhcnQsCiAJCQkJKGxvbmcgbG9uZylsb2NrLT5mbC5mbF9lbmQpOwogCisJaWYgKGxvY2tzX2luX2dyYWNlKCkpCisJCXJldHVybiBubG1fbGNrX2RlbmllZF9ncmFjZV9wZXJpb2Q7CisKIAltdXRleF9sb2NrKCZmaWxlLT5mX211dGV4KTsKIAlibG9jayA9IG5sbXN2Y19sb29rdXBfYmxvY2soZmlsZSwgbG9jayk7CiAJbXV0ZXhfdW5sb2NrKCZmaWxlLT5mX211dGV4KTsKZGlmZiAtLWdpdCBhL2ZzL2xvY2tkL3N2Y3Byb2MuYyBiL2ZzL2xvY2tkL3N2Y3Byb2MuYwppbmRleCA3NjI2MmMxLi41NDhiMGJiIDEwMDY0NAotLS0gYS9mcy9sb2NrZC9zdmNwcm9jLmMKKysrIGIvZnMvbG9ja2Qvc3ZjcHJvYy5jCkBAIC0xMTcsMTIgKzExNyw2IEBACiAJZHByaW50aygibG9ja2Q6IFRFU1QgICAgICAgICAgY2FsbGVkXG4iKTsKIAlyZXNwLT5jb29raWUgPSBhcmdwLT5jb29raWU7CiAKLQkvKiBEb24ndCBhY2NlcHQgdGVzdCByZXF1ZXN0cyBkdXJpbmcgZ3JhY2UgcGVyaW9kICovCi0JaWYgKG5sbXN2Y19ncmFjZV9wZXJpb2QpIHsKLQkJcmVzcC0+c3RhdHVzID0gbmxtX2xja19kZW5pZWRfZ3JhY2VfcGVyaW9kOwotCQlyZXR1cm4gcmM7Ci0JfQotCiAJLyogT2J0YWluIGNsaWVudCBhbmQgZmlsZSAqLwogCWlmICgocmVzcC0+c3RhdHVzID0gbmxtc3ZjX3JldHJpZXZlX2FyZ3MocnFzdHAsIGFyZ3AsICZob3N0LCAmZmlsZSkpKQogCQlyZXR1cm4gcmVzcC0+c3RhdHVzID09IG5sbV9kcm9wX3JlcGx5ID8gcnBjX2Ryb3BfcmVwbHkgOnJwY19zdWNjZXNzOwpAQCAtMTUyLDEyICsxNDYsNiBAQAogCiAJcmVzcC0+Y29va2llID0gYXJncC0+Y29va2llOwogCi0JLyogRG9uJ3QgYWNjZXB0IG5ldyBsb2NrIHJlcXVlc3RzIGR1cmluZyBncmFjZSBwZXJpb2QgKi8KLQlpZiAobmxtc3ZjX2dyYWNlX3BlcmlvZCAmJiAhYXJncC0+cmVjbGFpbSkgewotCQlyZXNwLT5zdGF0dXMgPSBubG1fbGNrX2RlbmllZF9ncmFjZV9wZXJpb2Q7Ci0JCXJldHVybiByYzsKLQl9Ci0KIAkvKiBPYnRhaW4gY2xpZW50IGFuZCBmaWxlICovCiAJaWYgKChyZXNwLT5zdGF0dXMgPSBubG1zdmNfcmV0cmlldmVfYXJncyhycXN0cCwgYXJncCwgJmhvc3QsICZmaWxlKSkpCiAJCXJldHVybiByZXNwLT5zdGF0dXMgPT0gbmxtX2Ryb3BfcmVwbHkgPyBycGNfZHJvcF9yZXBseSA6cnBjX3N1Y2Nlc3M7CkBAIC0xNzYsNyArMTY0LDggQEAKIAogCS8qIE5vdyB0cnkgdG8gbG9jayB0aGUgZmlsZSAqLwogCXJlc3AtPnN0YXR1cyA9IGNhc3Rfc3RhdHVzKG5sbXN2Y19sb2NrKHJxc3RwLCBmaWxlLCBob3N0LCAmYXJncC0+bG9jaywKLQkJCQkJICAgICAgIGFyZ3AtPmJsb2NrLCAmYXJncC0+Y29va2llKSk7CisJCQkJCSAgICAgICBhcmdwLT5ibG9jaywgJmFyZ3AtPmNvb2tpZSwKKwkJCQkJICAgICAgIGFyZ3AtPnJlY2xhaW0pKTsKIAlpZiAocmVzcC0+c3RhdHVzID09IG5sbV9kcm9wX3JlcGx5KQogCQlyYyA9IHJwY19kcm9wX3JlcGx5OwogCWVsc2UKQEAgLTE5OSw3ICsxODgsNyBAQAogCXJlc3AtPmNvb2tpZSA9IGFyZ3AtPmNvb2tpZTsKIAogCS8qIERvbid0IGFjY2VwdCByZXF1ZXN0cyBkdXJpbmcgZ3JhY2UgcGVyaW9kICovCi0JaWYgKG5sbXN2Y19ncmFjZV9wZXJpb2QpIHsKKwlpZiAobG9ja3NfaW5fZ3JhY2UoKSkgewogCQlyZXNwLT5zdGF0dXMgPSBubG1fbGNrX2RlbmllZF9ncmFjZV9wZXJpb2Q7CiAJCXJldHVybiBycGNfc3VjY2VzczsKIAl9CkBAIC0yMzIsNyArMjIxLDcgQEAKIAlyZXNwLT5jb29raWUgPSBhcmdwLT5jb29raWU7CiAKIAkvKiBEb24ndCBhY2NlcHQgbmV3IGxvY2sgcmVxdWVzdHMgZHVyaW5nIGdyYWNlIHBlcmlvZCAqLwotCWlmIChubG1zdmNfZ3JhY2VfcGVyaW9kKSB7CisJaWYgKGxvY2tzX2luX2dyYWNlKCkpIHsKIAkJcmVzcC0+c3RhdHVzID0gbmxtX2xja19kZW5pZWRfZ3JhY2VfcGVyaW9kOwogCQlyZXR1cm4gcnBjX3N1Y2Nlc3M7CiAJfQpAQCAtMjYxLDcgKzI1MCw3IEBACiAJcmVzcC0+Y29va2llID0gYXJncC0+Y29va2llOwogCiAJZHByaW50aygibG9ja2Q6IEdSQU5URUQgICAgICAgY2FsbGVkXG4iKTsKLQlyZXNwLT5zdGF0dXMgPSBubG1jbG50X2dyYW50KHN2Y19hZGRyX2luKHJxc3RwKSwgJmFyZ3AtPmxvY2spOworCXJlc3AtPnN0YXR1cyA9IG5sbWNsbnRfZ3JhbnQoc3ZjX2FkZHIocnFzdHApLCAmYXJncC0+bG9jayk7CiAJZHByaW50aygibG9ja2Q6IEdSQU5URUQgICAgICAgc3RhdHVzICVkXG4iLCBudG9obChyZXNwLT5zdGF0dXMpKTsKIAlyZXR1cm4gcnBjX3N1Y2Nlc3M7CiB9CkBAIC0zNzMsNyArMzYyLDcgQEAKIAlyZXNwLT5jb29raWUgPSBhcmdwLT5jb29raWU7CiAKIAkvKiBEb24ndCBhY2NlcHQgbmV3IGxvY2sgcmVxdWVzdHMgZHVyaW5nIGdyYWNlIHBlcmlvZCAqLwotCWlmIChubG1zdmNfZ3JhY2VfcGVyaW9kICYmICFhcmdwLT5yZWNsYWltKSB7CisJaWYgKGxvY2tzX2luX2dyYWNlKCkgJiYgIWFyZ3AtPnJlY2xhaW0pIHsKIAkJcmVzcC0+c3RhdHVzID0gbmxtX2xja19kZW5pZWRfZ3JhY2VfcGVyaW9kOwogCQlyZXR1cm4gcnBjX3N1Y2Nlc3M7CiAJfQpAQCAtNDA2LDcgKzM5NSw3IEBACiAJcmVzcC0+Y29va2llID0gYXJncC0+Y29va2llOwogCiAJLyogRG9uJ3QgYWNjZXB0IHJlcXVlc3RzIGR1cmluZyBncmFjZSBwZXJpb2QgKi8KLQlpZiAobmxtc3ZjX2dyYWNlX3BlcmlvZCkgeworCWlmIChsb2Nrc19pbl9ncmFjZSgpKSB7CiAJCXJlc3AtPnN0YXR1cyA9IG5sbV9sY2tfZGVuaWVkX2dyYWNlX3BlcmlvZDsKIAkJcmV0dXJuIHJwY19zdWNjZXNzOwogCX0KQEAgLTQ2NCwxMSArNDUzLDkgQEAKIHsKIAlzdHJ1Y3Qgc29ja2FkZHJfaW4Jc2FkZHI7CiAKLQltZW1jcHkoJnNhZGRyLCBzdmNfYWRkcl9pbihycXN0cCksIHNpemVvZihzYWRkcikpOwotCiAJZHByaW50aygibG9ja2Q6IFNNX05PVElGWSAgICAgY2FsbGVkXG4iKTsKLQlpZiAoc2FkZHIuc2luX2FkZHIuc19hZGRyICE9IGh0b25sKElOQUREUl9MT09QQkFDSykKLQkgfHwgbnRvaHMoc2FkZHIuc2luX3BvcnQpID49IDEwMjQpIHsKKworCWlmICghbmxtX3ByaXZpbGVnZWRfcmVxdWVzdGVyKHJxc3RwKSkgewogCQljaGFyIGJ1ZltSUENfTUFYX0FERFJCVUZMRU5dOwogCQlwcmludGsoS0VSTl9XQVJOSU5HICJsb2NrZDogcmVqZWN0ZWQgTlNNIGNhbGxiYWNrIGZyb20gJXNcbiIsCiAJCQkJc3ZjX3ByaW50X2FkZHIocnFzdHAsIGJ1Ziwgc2l6ZW9mKGJ1ZikpKTsKZGlmZiAtLWdpdCBhL2ZzL2xvY2tkL3N2Y3N1YnMuYyBiL2ZzL2xvY2tkL3N2Y3N1YnMuYwppbmRleCAxOThiNGU1Li4zNGMyNzY2IDEwMDY0NAotLS0gYS9mcy9sb2NrZC9zdmNzdWJzLmMKKysrIGIvZnMvbG9ja2Qvc3Zjc3Vicy5jCkBAIC00MTgsNyArNDE4LDcgQEAKIHN0YXRpYyBpbnQKIG5sbXN2Y19tYXRjaF9pcCh2b2lkICpkYXRhcCwgc3RydWN0IG5sbV9ob3N0ICpob3N0KQogewotCXJldHVybiBubG1fY21wX2FkZHIoJmhvc3QtPmhfc2FkZHIsIGRhdGFwKTsKKwlyZXR1cm4gbmxtX2NtcF9hZGRyKG5sbV9zcmNhZGRyKGhvc3QpLCBkYXRhcCk7CiB9CiAKIC8qKgpkaWZmIC0tZ2l0IGEvZnMvbG9ja2QveGRyLmMgYi9mcy9sb2NrZC94ZHIuYwppbmRleCAzZTQ1OWUxLi4xZjIyNjI5IDEwMDY0NAotLS0gYS9mcy9sb2NrZC94ZHIuYworKysgYi9mcy9sb2NrZC94ZHIuYwpAQCAtMzUxLDggKzM1MSw2IEBACiAJYXJncC0+c3RhdGUgPSBudG9obCgqcCsrKTsKIAkvKiBQcmVzZXJ2ZSB0aGUgYWRkcmVzcyBpbiBuZXR3b3JrIGJ5dGUgb3JkZXIgKi8KIAlhcmdwLT5hZGRyID0gKnArKzsKLQlhcmdwLT52ZXJzID0gKnArKzsKLQlhcmdwLT5wcm90byA9ICpwKys7CiAJcmV0dXJuIHhkcl9hcmdzaXplX2NoZWNrKHJxc3RwLCBwKTsKIH0KIApkaWZmIC0tZ2l0IGEvZnMvbG9ja2QveGRyNC5jIGIvZnMvbG9ja2QveGRyNC5jCmluZGV4IDQzZmY5MzkuLjUwYzQ5M2EgMTAwNjQ0Ci0tLSBhL2ZzL2xvY2tkL3hkcjQuYworKysgYi9mcy9sb2NrZC94ZHI0LmMKQEAgLTM1OCw4ICszNTgsNiBAQAogCWFyZ3AtPnN0YXRlID0gbnRvaGwoKnArKyk7CiAJLyogUHJlc2VydmUgdGhlIGFkZHJlc3MgaW4gbmV0d29yayBieXRlIG9yZGVyICovCiAJYXJncC0+YWRkciAgPSAqcCsrOwotCWFyZ3AtPnZlcnMgID0gKnArKzsKLQlhcmdwLT5wcm90byA9ICpwKys7CiAJcmV0dXJuIHhkcl9hcmdzaXplX2NoZWNrKHJxc3RwLCBwKTsKIH0KIApkaWZmIC0tZ2l0IGEvZnMvbXBhZ2UuYyBiL2ZzL21wYWdlLmMKaW5kZXggZGJjYzdhZi4uNTUyYjgwYiAxMDA2NDQKLS0tIGEvZnMvbXBhZ2UuYworKysgYi9mcy9tcGFnZS5jCkBAIC02LDcgKzYsNyBAQAogICogQ29udGFpbnMgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gcHJlcGFyaW5nIGFuZCBzdWJtaXR0aW5nIEJJT3Mgd2hpY2ggY29udGFpbgogICogbXVsdGlwbGUgcGFnZWNhY2hlIHBhZ2VzLgogICoKLSAqIDE1TWF5MjAwMglha3BtQHppcC5jb20uYXUKKyAqIDE1TWF5MjAwMglBbmRyZXcgTW9ydG9uCiAgKgkJSW5pdGlhbCB2ZXJzaW9uCiAgKiAyN0p1bjIwMDIJYXhib2VAc3VzZS5kZQogICoJCXVzZSBiaW9fYWRkX3BhZ2UoKSB0byBidWlsZCBiaW8ncyBqdXN0IHRoZSByaWdodCBzaXplCmRpZmYgLS1naXQgYS9mcy9uZnMvY2FsbGJhY2suYyBiL2ZzL25mcy9jYWxsYmFjay5jCmluZGV4IGY0NDdmNGIuLmMyZTljZmQgMTAwNjQ0Ci0tLSBhL2ZzL25mcy9jYWxsYmFjay5jCisrKyBiL2ZzL25mcy9jYWxsYmFjay5jCkBAIC00MCw2ICs0MCwxNiBAQAogc3RhdGljIGNvbnN0IGludCBuZnNfc2V0X3BvcnRfbWluID0gMDsKIHN0YXRpYyBjb25zdCBpbnQgbmZzX3NldF9wb3J0X21heCA9IDY1NTM1OwogCisvKgorICogSWYgdGhlIGtlcm5lbCBoYXMgSVB2NiBzdXBwb3J0IGF2YWlsYWJsZSwgYWx3YXlzIGxpc3RlbiBmb3IKKyAqIGJvdGggQUZfSU5FVCBhbmQgQUZfSU5FVDYgcmVxdWVzdHMuCisgKi8KKyNpZiBkZWZpbmVkKENPTkZJR19JUFY2KSB8fCBkZWZpbmVkKENPTkZJR19JUFY2X01PRFVMRSkKK3N0YXRpYyBjb25zdCBzYV9mYW1pbHlfdAluZnNfY2FsbGJhY2tfZmFtaWx5ID0gQUZfSU5FVDY7CisjZWxzZQorc3RhdGljIGNvbnN0IHNhX2ZhbWlseV90CW5mc19jYWxsYmFja19mYW1pbHkgPSBBRl9JTkVUOworI2VuZGlmCisKIHN0YXRpYyBpbnQgcGFyYW1fc2V0X3BvcnQoY29uc3QgY2hhciAqdmFsLCBzdHJ1Y3Qga2VybmVsX3BhcmFtICprcCkKIHsKIAljaGFyICplbmRwOwpAQCAtMTA1LDcgKzExNSw4IEBACiAJbXV0ZXhfbG9jaygmbmZzX2NhbGxiYWNrX211dGV4KTsKIAlpZiAobmZzX2NhbGxiYWNrX2luZm8udXNlcnMrKyB8fCBuZnNfY2FsbGJhY2tfaW5mby50YXNrICE9IE5VTEwpCiAJCWdvdG8gb3V0OwotCXNlcnYgPSBzdmNfY3JlYXRlKCZuZnM0X2NhbGxiYWNrX3Byb2dyYW0sIE5GUzRfQ0FMTEJBQ0tfQlVGU0laRSwgTlVMTCk7CisJc2VydiA9IHN2Y19jcmVhdGUoJm5mczRfY2FsbGJhY2tfcHJvZ3JhbSwgTkZTNF9DQUxMQkFDS19CVUZTSVpFLAorCQkJCW5mc19jYWxsYmFja19mYW1pbHksIE5VTEwpOwogCXJldCA9IC1FTk9NRU07CiAJaWYgKCFzZXJ2KQogCQlnb3RvIG91dF9lcnI7CkBAIC0xMTUsNyArMTI2LDggQEAKIAlpZiAocmV0IDw9IDApCiAJCWdvdG8gb3V0X2VycjsKIAluZnNfY2FsbGJhY2tfdGNwcG9ydCA9IHJldDsKLQlkcHJpbnRrKCJDYWxsYmFjayBwb3J0ID0gMHgleFxuIiwgbmZzX2NhbGxiYWNrX3RjcHBvcnQpOworCWRwcmludGsoIk5GUzogQ2FsbGJhY2sgbGlzdGVuZXIgcG9ydCA9ICV1IChhZiAldSlcbiIsCisJCQluZnNfY2FsbGJhY2tfdGNwcG9ydCwgbmZzX2NhbGxiYWNrX2ZhbWlseSk7CiAKIAluZnNfY2FsbGJhY2tfaW5mby5ycXN0ID0gc3ZjX3ByZXBhcmVfdGhyZWFkKHNlcnYsICZzZXJ2LT5zdl9wb29sc1swXSk7CiAJaWYgKElTX0VSUihuZnNfY2FsbGJhY2tfaW5mby5ycXN0KSkgewpAQCAtMTQ4LDggKzE2MCw4IEBACiAJbXV0ZXhfdW5sb2NrKCZuZnNfY2FsbGJhY2tfbXV0ZXgpOwogCXJldHVybiByZXQ7CiBvdXRfZXJyOgotCWRwcmludGsoIkNvdWxkbid0IGNyZWF0ZSBjYWxsYmFjayBzb2NrZXQgb3Igc2VydmVyIHRocmVhZDsgZXJyID0gJWRcbiIsCi0JCXJldCk7CisJZHByaW50aygiTkZTOiBDb3VsZG4ndCBjcmVhdGUgY2FsbGJhY2sgc29ja2V0IG9yIHNlcnZlciB0aHJlYWQ7ICIKKwkJImVyciA9ICVkXG4iLCByZXQpOwogCW5mc19jYWxsYmFja19pbmZvLnVzZXJzLS07CiAJZ290byBvdXQ7CiB9CmRpZmYgLS1naXQgYS9mcy9uZnMvY2xpZW50LmMgYi9mcy9uZnMvY2xpZW50LmMKaW5kZXggNWVlMjNlNy4uNzU0NzYwMCAxMDA2NDQKLS0tIGEvZnMvbmZzL2NsaWVudC5jCisrKyBiL2ZzL25mcy9jbGllbnQuYwpAQCAtNjc1LDcgKzY3NSw3IEBACiAJc2VydmVyLT5uZnNfY2xpZW50ID0gY2xwOwogCiAJLyogSW5pdGlhbGlzZSB0aGUgY2xpZW50IHJlcHJlc2VudGF0aW9uIGZyb20gdGhlIG1vdW50IGRhdGEgKi8KLQlzZXJ2ZXItPmZsYWdzID0gZGF0YS0+ZmxhZ3MgJiBORlNfTU9VTlRfRkxBR01BU0s7CisJc2VydmVyLT5mbGFncyA9IGRhdGEtPmZsYWdzOwogCiAJaWYgKGRhdGEtPnJzaXplKQogCQlzZXJ2ZXItPnJzaXplID0gbmZzX2Jsb2NrX3NpemUoZGF0YS0+cnNpemUsIE5VTEwpOwpAQCAtODUwLDcgKzg1MCw2IEBACiAJSU5JVF9MSVNUX0hFQUQoJnNlcnZlci0+Y2xpZW50X2xpbmspOwogCUlOSVRfTElTVF9IRUFEKCZzZXJ2ZXItPm1hc3Rlcl9saW5rKTsKIAotCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnNlcnZlci0+YWN0aXZlX3dxKTsKIAlhdG9taWNfc2V0KCZzZXJ2ZXItPmFjdGl2ZSwgMCk7CiAKIAlzZXJ2ZXItPmlvX3N0YXRzID0gbmZzX2FsbG9jX2lvc3RhdHMoKTsKQEAgLTEwNzMsNyArMTA3Miw3IEBACiAJCWdvdG8gZXJyb3I7CiAKIAkvKiBJbml0aWFsaXNlIHRoZSBjbGllbnQgcmVwcmVzZW50YXRpb24gZnJvbSB0aGUgbW91bnQgZGF0YSAqLwotCXNlcnZlci0+ZmxhZ3MgPSBkYXRhLT5mbGFncyAmIE5GU19NT1VOVF9GTEFHTUFTSzsKKwlzZXJ2ZXItPmZsYWdzID0gZGF0YS0+ZmxhZ3M7CiAJc2VydmVyLT5jYXBzIHw9IE5GU19DQVBfQVRPTUlDX09QRU47CiAKIAlpZiAoZGF0YS0+cnNpemUpCmRpZmYgLS1naXQgYS9mcy9uZnMvZGlyLmMgYi9mcy9uZnMvZGlyLmMKaW5kZXggNzRmOTJiNy4uZWZkYmEyZSAxMDA2NDQKLS0tIGEvZnMvbmZzL2Rpci5jCisrKyBiL2ZzL25mcy9kaXIuYwpAQCAtMTU2LDYgKzE1Niw3IEBACiAJZGVjb2RlX2RpcmVudF90CWRlY29kZTsKIAlpbnQJCXBsdXM7CiAJdW5zaWduZWQgbG9uZwl0aW1lc3RhbXA7CisJdW5zaWduZWQgbG9uZwlnZW5jb3VudDsKIAlpbnQJCXRpbWVzdGFtcF92YWxpZDsKIH0gbmZzX3JlYWRkaXJfZGVzY3JpcHRvcl90OwogCkBAIC0xNzcsNyArMTc4LDcgQEAKIAlzdHJ1Y3QgZmlsZQkqZmlsZSA9IGRlc2MtPmZpbGU7CiAJc3RydWN0IGlub2RlCSppbm9kZSA9IGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGU7CiAJc3RydWN0IHJwY19jcmVkCSpjcmVkID0gbmZzX2ZpbGVfY3JlZChmaWxlKTsKLQl1bnNpZ25lZCBsb25nCXRpbWVzdGFtcDsKKwl1bnNpZ25lZCBsb25nCXRpbWVzdGFtcCwgZ2VuY291bnQ7CiAJaW50CQllcnJvcjsKIAogCWRmcHJpbnRrKERJUkNBQ0hFLCAiTkZTOiAlczogcmVhZGluZyBjb29raWUgJUx1IGludG8gcGFnZSAlbHVcbiIsCkBAIC0xODYsNiArMTg3LDcgQEAKIAogIGFnYWluOgogCXRpbWVzdGFtcCA9IGppZmZpZXM7CisJZ2VuY291bnQgPSBuZnNfaW5jX2F0dHJfZ2VuZXJhdGlvbl9jb3VudGVyKCk7CiAJZXJyb3IgPSBORlNfUFJPVE8oaW5vZGUpLT5yZWFkZGlyKGZpbGUtPmZfcGF0aC5kZW50cnksIGNyZWQsIGRlc2MtPmVudHJ5LT5jb29raWUsIHBhZ2UsCiAJCQkJCSAgTkZTX1NFUlZFUihpbm9kZSktPmR0c2l6ZSwgZGVzYy0+cGx1cyk7CiAJaWYgKGVycm9yIDwgMCkgewpAQCAtMTk5LDYgKzIwMSw3IEBACiAJCWdvdG8gZXJyb3I7CiAJfQogCWRlc2MtPnRpbWVzdGFtcCA9IHRpbWVzdGFtcDsKKwlkZXNjLT5nZW5jb3VudCA9IGdlbmNvdW50OwogCWRlc2MtPnRpbWVzdGFtcF92YWxpZCA9IDE7CiAJU2V0UGFnZVVwdG9kYXRlKHBhZ2UpOwogCS8qIEVuc3VyZSBjb25zaXN0ZW50IHBhZ2UgYWxpZ25tZW50IG9mIHRoZSBkYXRhLgpAQCAtMjI0LDkgKzIyNywxMCBAQAogCWlmIChJU19FUlIocCkpCiAJCXJldHVybiBQVFJfRVJSKHApOwogCWRlc2MtPnB0ciA9IHA7Ci0JaWYgKGRlc2MtPnRpbWVzdGFtcF92YWxpZCkKKwlpZiAoZGVzYy0+dGltZXN0YW1wX3ZhbGlkKSB7CiAJCWRlc2MtPmVudHJ5LT5mYXR0ci0+dGltZV9zdGFydCA9IGRlc2MtPnRpbWVzdGFtcDsKLQllbHNlCisJCWRlc2MtPmVudHJ5LT5mYXR0ci0+Z2VuY291bnQgPSBkZXNjLT5nZW5jb3VudDsKKwl9IGVsc2UKIAkJZGVzYy0+ZW50cnktPmZhdHRyLT52YWxpZCAmPSB+TkZTX0FUVFJfRkFUVFI7CiAJcmV0dXJuIDA7CiB9CkBAIC00NzEsNyArNDc1LDcgQEAKIAlzdHJ1Y3QgcnBjX2NyZWQJKmNyZWQgPSBuZnNfZmlsZV9jcmVkKGZpbGUpOwogCXN0cnVjdCBwYWdlCSpwYWdlID0gTlVMTDsKIAlpbnQJCXN0YXR1czsKLQl1bnNpZ25lZCBsb25nCXRpbWVzdGFtcDsKKwl1bnNpZ25lZCBsb25nCXRpbWVzdGFtcCwgZ2VuY291bnQ7CiAKIAlkZnByaW50ayhESVJDQUNIRSwgIk5GUzogdW5jYWNoZWRfcmVhZGRpcigpIHNlYXJjaGluZyBmb3IgY29va2llICVMdVxuIiwKIAkJCSh1bnNpZ25lZCBsb25nIGxvbmcpKmRlc2MtPmRpcl9jb29raWUpOwpAQCAtNDgyLDYgKzQ4Niw3IEBACiAJCWdvdG8gb3V0OwogCX0KIAl0aW1lc3RhbXAgPSBqaWZmaWVzOworCWdlbmNvdW50ID0gbmZzX2luY19hdHRyX2dlbmVyYXRpb25fY291bnRlcigpOwogCXN0YXR1cyA9IE5GU19QUk9UTyhpbm9kZSktPnJlYWRkaXIoZmlsZS0+Zl9wYXRoLmRlbnRyeSwgY3JlZCwKIAkJCQkJCSpkZXNjLT5kaXJfY29va2llLCBwYWdlLAogCQkJCQkJTkZTX1NFUlZFUihpbm9kZSktPmR0c2l6ZSwKQEAgLTQ5MCw2ICs0OTUsNyBAQAogCWRlc2MtPnB0ciA9IGttYXAocGFnZSk7CQkvKiBtYXRjaGluZyBrdW5tYXAgaW4gbmZzX2RvX2ZpbGxkaXIgKi8KIAlpZiAoc3RhdHVzID49IDApIHsKIAkJZGVzYy0+dGltZXN0YW1wID0gdGltZXN0YW1wOworCQlkZXNjLT5nZW5jb3VudCA9IGdlbmNvdW50OwogCQlkZXNjLT50aW1lc3RhbXBfdmFsaWQgPSAxOwogCQlpZiAoKHN0YXR1cyA9IGRpcl9kZWNvZGUoZGVzYykpID09IDApCiAJCQlkZXNjLT5lbnRyeS0+cHJldl9jb29raWUgPSAqZGVzYy0+ZGlyX2Nvb2tpZTsKQEAgLTY1NSw3ICs2NjEsNyBAQAogICovCiB2b2lkIG5mc19mb3JjZV9sb29rdXBfcmV2YWxpZGF0ZShzdHJ1Y3QgaW5vZGUgKmRpcikKIHsKLQlORlNfSShkaXIpLT5jYWNoZV9jaGFuZ2VfYXR0cmlidXRlID0gamlmZmllczsKKwlORlNfSShkaXIpLT5jYWNoZV9jaGFuZ2VfYXR0cmlidXRlKys7CiB9CiAKIC8qCkBAIC02NjcsNiArNjczLDggQEAKIHsKIAlpZiAoSVNfUk9PVChkZW50cnkpKQogCQlyZXR1cm4gMTsKKwlpZiAoTkZTX1NFUlZFUihkaXIpLT5mbGFncyAmIE5GU19NT1VOVF9MT09LVVBfQ0FDSEVfTk9ORSkKKwkJcmV0dXJuIDA7CiAJaWYgKCFuZnNfdmVyaWZ5X2NoYW5nZV9hdHRyaWJ1dGUoZGlyLCBkZW50cnktPmRfdGltZSkpCiAJCXJldHVybiAwOwogCS8qIFJldmFsaWRhdGUgbmZzaS0+Y2FjaGVfY2hhbmdlX2F0dHJpYnV0ZSBiZWZvcmUgd2UgZGVjbGFyZSBhIG1hdGNoICovCkBAIC03NTAsNiArNzU4LDggQEAKIAkvKiBEb24ndCByZXZhbGlkYXRlIGEgbmVnYXRpdmUgZGVudHJ5IGlmIHdlJ3JlIGNyZWF0aW5nIGEgbmV3IGZpbGUgKi8KIAlpZiAobmQgIT0gTlVMTCAmJiBuZnNfbG9va3VwX2NoZWNrX2ludGVudChuZCwgTE9PS1VQX0NSRUFURSkgIT0gMCkKIAkJcmV0dXJuIDA7CisJaWYgKE5GU19TRVJWRVIoZGlyKS0+ZmxhZ3MgJiBORlNfTU9VTlRfTE9PS1VQX0NBQ0hFX05PTkVHKQorCQlyZXR1cm4gMTsKIAlyZXR1cm4gIW5mc19jaGVja192ZXJpZmllcihkaXIsIGRlbnRyeSk7CiB9CiAKQEAgLTE1MDcsNyArMTUxNyw3IEBACiAJaWYgKCFhZGRfdG9fcGFnZV9jYWNoZShwYWdlLCBkZW50cnktPmRfaW5vZGUtPmlfbWFwcGluZywgMCwKIAkJCQkJCQlHRlBfS0VSTkVMKSkgewogCQlwYWdldmVjX2FkZCgmbHJ1X3B2ZWMsIHBhZ2UpOwotCQlwYWdldmVjX2xydV9hZGQoJmxydV9wdmVjKTsKKwkJcGFnZXZlY19scnVfYWRkX2ZpbGUoJmxydV9wdmVjKTsKIAkJU2V0UGFnZVVwdG9kYXRlKHBhZ2UpOwogCQl1bmxvY2tfcGFnZShwYWdlKTsKIAl9IGVsc2UKZGlmZiAtLWdpdCBhL2ZzL25mcy9maWxlLmMgYi9mcy9uZnMvZmlsZS5jCmluZGV4IDc4NDYwNjUuLmQzMTliNDkgMTAwNjQ0Ci0tLSBhL2ZzL25mcy9maWxlLmMKKysrIGIvZnMvbmZzL2ZpbGUuYwpAQCAtMTg4LDEzICsxODgsMTYgQEAKIAkvKiBvcmlnaW4gPT0gU0VFS19FTkQgPT4gd2UgbXVzdCByZXZhbGlkYXRlIHRoZSBjYWNoZWQgZmlsZSBsZW5ndGggKi8KIAlpZiAob3JpZ2luID09IFNFRUtfRU5EKSB7CiAJCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxwLT5mX21hcHBpbmctPmhvc3Q7CisKIAkJaW50IHJldHZhbCA9IG5mc19yZXZhbGlkYXRlX2ZpbGVfc2l6ZShpbm9kZSwgZmlscCk7CiAJCWlmIChyZXR2YWwgPCAwKQogCQkJcmV0dXJuIChsb2ZmX3QpcmV0dmFsOwotCX0KLQlsb2NrX2tlcm5lbCgpOwkvKiBCS0wgbmVlZGVkPyAqLwotCWxvZmYgPSBnZW5lcmljX2ZpbGVfbGxzZWVrX3VubG9ja2VkKGZpbHAsIG9mZnNldCwgb3JpZ2luKTsKLQl1bmxvY2tfa2VybmVsKCk7CisKKwkJc3Bpbl9sb2NrKCZpbm9kZS0+aV9sb2NrKTsKKwkJbG9mZiA9IGdlbmVyaWNfZmlsZV9sbHNlZWtfdW5sb2NrZWQoZmlscCwgb2Zmc2V0LCBvcmlnaW4pOworCQlzcGluX3VubG9jaygmaW5vZGUtPmlfbG9jayk7CisJfSBlbHNlCisJCWxvZmYgPSBnZW5lcmljX2ZpbGVfbGxzZWVrX3VubG9ja2VkKGZpbHAsIG9mZnNldCwgb3JpZ2luKTsKIAlyZXR1cm4gbG9mZjsKIH0KIApAQCAtNjk5LDEzICs3MDIsNiBAQAogCQkJZmlscC0+Zl9wYXRoLmRlbnRyeS0+ZF9uYW1lLm5hbWUsCiAJCQlmbC0+ZmxfdHlwZSwgZmwtPmZsX2ZsYWdzKTsKIAotCS8qCi0JICogTm8gQlNEIGZsb2NrcyBvdmVyIE5GUyBhbGxvd2VkLgotCSAqIE5vdGU6IHdlIGNvdWxkIHRyeSB0byBmYWtlIGEgUE9TSVggbG9jayByZXF1ZXN0IGhlcmUgYnkKLQkgKiB1c2luZyAoKHUzMikgZmlscCB8IDB4ODAwMDAwMDApIG9yIHNvbWUgc3VjaCBhcyB0aGUgcGlkLgotCSAqIE5vdCBzdXJlIHdoZXRoZXIgdGhhdCB3b3VsZCBiZSB1bmlxdWUsIHRob3VnaCwgb3Igd2hldGhlcgotCSAqIHRoYXQgd291bGQgYnJlYWsgaW4gb3RoZXIgcGxhY2VzLgotCSAqLwogCWlmICghKGZsLT5mbF9mbGFncyAmIEZMX0ZMT0NLKSkKIAkJcmV0dXJuIC1FTk9MQ0s7CiAKZGlmZiAtLWdpdCBhL2ZzL25mcy9pbm9kZS5jIGIvZnMvbmZzL2lub2RlLmMKaW5kZXggNTJkYWVmYS4uYjkxOTVjMCAxMDA2NDQKLS0tIGEvZnMvbmZzL2lub2RlLmMKKysrIGIvZnMvbmZzL2lub2RlLmMKQEAgLTMwNSw4ICszMDUsNyBAQAogCQkJaW5pdF9zcGVjaWFsX2lub2RlKGlub2RlLCBpbm9kZS0+aV9tb2RlLCBmYXR0ci0+cmRldik7CiAKIAkJbmZzaS0+cmVhZF9jYWNoZV9qaWZmaWVzID0gZmF0dHItPnRpbWVfc3RhcnQ7Ci0JCW5mc2ktPmxhc3RfdXBkYXRlZCA9IG5vdzsKLQkJbmZzaS0+Y2FjaGVfY2hhbmdlX2F0dHJpYnV0ZSA9IG5vdzsKKwkJbmZzaS0+YXR0cl9nZW5jb3VudCA9IGZhdHRyLT5nZW5jb3VudDsKIAkJaW5vZGUtPmlfYXRpbWUgPSBmYXR0ci0+YXRpbWU7CiAJCWlub2RlLT5pX210aW1lID0gZmF0dHItPm10aW1lOwogCQlpbm9kZS0+aV9jdGltZSA9IGZhdHRyLT5jdGltZTsKQEAgLTQ1Myw2ICs0NTIsNyBAQAogdm9pZCBuZnNfc2V0YXR0cl91cGRhdGVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlhdHRyICphdHRyKQogewogCWlmICgoYXR0ci0+aWFfdmFsaWQgJiAoQVRUUl9NT0RFfEFUVFJfVUlEfEFUVFJfR0lEKSkgIT0gMCkgeworCQlzcGluX2xvY2soJmlub2RlLT5pX2xvY2spOwogCQlpZiAoKGF0dHItPmlhX3ZhbGlkICYgQVRUUl9NT0RFKSAhPSAwKSB7CiAJCQlpbnQgbW9kZSA9IGF0dHItPmlhX21vZGUgJiBTX0lBTExVR087CiAJCQltb2RlIHw9IGlub2RlLT5pX21vZGUgJiB+U19JQUxMVUdPOwpAQCAtNDYyLDcgKzQ2Miw2IEBACiAJCQlpbm9kZS0+aV91aWQgPSBhdHRyLT5pYV91aWQ7CiAJCWlmICgoYXR0ci0+aWFfdmFsaWQgJiBBVFRSX0dJRCkgIT0gMCkKIAkJCWlub2RlLT5pX2dpZCA9IGF0dHItPmlhX2dpZDsKLQkJc3Bpbl9sb2NrKCZpbm9kZS0+aV9sb2NrKTsKIAkJTkZTX0koaW5vZGUpLT5jYWNoZV92YWxpZGl0eSB8PSBORlNfSU5PX0lOVkFMSURfQUNDRVNTfE5GU19JTk9fSU5WQUxJRF9BQ0w7CiAJCXNwaW5fdW5sb2NrKCZpbm9kZS0+aV9sb2NrKTsKIAl9CkBAIC00NzIsMzcgKzQ3MSw2IEBACiAJfQogfQogCi1zdGF0aWMgaW50IG5mc193YWl0X3NjaGVkdWxlKHZvaWQgKndvcmQpCi17Ci0JaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKQotCQlyZXR1cm4gLUVSRVNUQVJUU1lTOwotCXNjaGVkdWxlKCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qCi0gKiBXYWl0IGZvciB0aGUgaW5vZGUgdG8gZ2V0IHVubG9ja2VkLgotICovCi1zdGF0aWMgaW50IG5mc193YWl0X29uX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpCi17Ci0Jc3RydWN0IG5mc19pbm9kZSAqbmZzaSA9IE5GU19JKGlub2RlKTsKLQlpbnQgZXJyb3I7Ci0KLQllcnJvciA9IHdhaXRfb25fYml0X2xvY2soJm5mc2ktPmZsYWdzLCBORlNfSU5PX1JFVkFMSURBVElORywKLQkJCQkJbmZzX3dhaXRfc2NoZWR1bGUsIFRBU0tfS0lMTEFCTEUpOwotCi0JcmV0dXJuIGVycm9yOwotfQotCi1zdGF0aWMgdm9pZCBuZnNfd2FrZV91cF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKQotewotCXN0cnVjdCBuZnNfaW5vZGUgKm5mc2kgPSBORlNfSShpbm9kZSk7Ci0KLQljbGVhcl9iaXQoTkZTX0lOT19SRVZBTElEQVRJTkcsICZuZnNpLT5mbGFncyk7Ci0Jc21wX21iX19hZnRlcl9jbGVhcl9iaXQoKTsKLQl3YWtlX3VwX2JpdCgmbmZzaS0+ZmxhZ3MsIE5GU19JTk9fUkVWQUxJREFUSU5HKTsKLX0KLQogaW50IG5mc19nZXRhdHRyKHN0cnVjdCB2ZnNtb3VudCAqbW50LCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBrc3RhdCAqc3RhdCkKIHsKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZGVudHJ5LT5kX2lub2RlOwpAQCAtNjk3LDIwICs2NjUsMTUgQEAKIAlkZnByaW50ayhQQUdFQ0FDSEUsICJORlM6IHJldmFsaWRhdGluZyAoJXMvJUxkKVxuIiwKIAkJaW5vZGUtPmlfc2ItPnNfaWQsIChsb25nIGxvbmcpTkZTX0ZJTEVJRChpbm9kZSkpOwogCi0JbmZzX2luY19zdGF0cyhpbm9kZSwgTkZTSU9TX0lOT0RFUkVWQUxJREFURSk7CiAJaWYgKGlzX2JhZF9pbm9kZShpbm9kZSkpCi0gCQlnb3RvIG91dF9ub3dhaXQ7Ci0JaWYgKE5GU19TVEFMRShpbm9kZSkpCi0gCQlnb3RvIG91dF9ub3dhaXQ7Ci0KLQlzdGF0dXMgPSBuZnNfd2FpdF9vbl9pbm9kZShpbm9kZSk7Ci0JaWYgKHN0YXR1cyA8IDApCiAJCWdvdG8gb3V0OwotCi0Jc3RhdHVzID0gLUVTVEFMRTsKIAlpZiAoTkZTX1NUQUxFKGlub2RlKSkKIAkJZ290byBvdXQ7CiAKKwlpZiAoTkZTX1NUQUxFKGlub2RlKSkKKwkJZ290byBvdXQ7CisKKwluZnNfaW5jX3N0YXRzKGlub2RlLCBORlNJT1NfSU5PREVSRVZBTElEQVRFKTsKIAlzdGF0dXMgPSBORlNfUFJPVE8oaW5vZGUpLT5nZXRhdHRyKHNlcnZlciwgTkZTX0ZIKGlub2RlKSwgJmZhdHRyKTsKIAlpZiAoc3RhdHVzICE9IDApIHsKIAkJZGZwcmludGsoUEFHRUNBQ0hFLCAibmZzX3JldmFsaWRhdGVfaW5vZGU6ICglcy8lTGQpIGdldGF0dHIgZmFpbGVkLCBlcnJvcj0lZFxuIiwKQEAgLTcyNCwxNiArNjg3LDEzIEBACiAJCWdvdG8gb3V0OwogCX0KIAotCXNwaW5fbG9jaygmaW5vZGUtPmlfbG9jayk7Ci0Jc3RhdHVzID0gbmZzX3VwZGF0ZV9pbm9kZShpbm9kZSwgJmZhdHRyKTsKKwlzdGF0dXMgPSBuZnNfcmVmcmVzaF9pbm9kZShpbm9kZSwgJmZhdHRyKTsKIAlpZiAoc3RhdHVzKSB7Ci0JCXNwaW5fdW5sb2NrKCZpbm9kZS0+aV9sb2NrKTsKIAkJZGZwcmludGsoUEFHRUNBQ0hFLCAibmZzX3JldmFsaWRhdGVfaW5vZGU6ICglcy8lTGQpIHJlZnJlc2ggZmFpbGVkLCBlcnJvcj0lZFxuIiwKIAkJCSBpbm9kZS0+aV9zYi0+c19pZCwKIAkJCSAobG9uZyBsb25nKU5GU19GSUxFSUQoaW5vZGUpLCBzdGF0dXMpOwogCQlnb3RvIG91dDsKIAl9Ci0Jc3Bpbl91bmxvY2soJmlub2RlLT5pX2xvY2spOwogCiAJaWYgKG5mc2ktPmNhY2hlX3ZhbGlkaXR5ICYgTkZTX0lOT19JTlZBTElEX0FDTCkKIAkJbmZzX3phcF9hY2xfY2FjaGUoaW5vZGUpOwpAQCAtNzQzLDkgKzcwMyw2IEBACiAJCShsb25nIGxvbmcpTkZTX0ZJTEVJRChpbm9kZSkpOwogCiAgb3V0OgotCW5mc193YWtlX3VwX2lub2RlKGlub2RlKTsKLQotIG91dF9ub3dhaXQ6CiAJcmV0dXJuIHN0YXR1czsKIH0KIApAQCAtOTA4LDkgKzg2NSw2IEBACiAJCXJldHVybiAtRUlPOwogCX0KIAotCS8qIERvIGF0b21pYyB3ZWFrIGNhY2hlIGNvbnNpc3RlbmN5IHVwZGF0ZXMgKi8KLQluZnNfd2NjX3VwZGF0ZV9pbm9kZShpbm9kZSwgZmF0dHIpOwotCiAJaWYgKChmYXR0ci0+dmFsaWQgJiBORlNfQVRUUl9GQVRUUl9WNCkgIT0gMCAmJgogCQkJbmZzaS0+Y2hhbmdlX2F0dHIgIT0gZmF0dHItPmNoYW5nZV9hdHRyKQogCQlpbnZhbGlkIHw9IE5GU19JTk9fSU5WQUxJRF9BVFRSfE5GU19JTk9fUkVWQUxfUEFHRUNBQ0hFOwpAQCAtOTM5LDE1ICs4OTMsODEgQEAKIAogCWlmIChpbnZhbGlkICE9IDApCiAJCW5mc2ktPmNhY2hlX3ZhbGlkaXR5IHw9IGludmFsaWQ7Ci0JZWxzZQotCQluZnNpLT5jYWNoZV92YWxpZGl0eSAmPSB+KE5GU19JTk9fSU5WQUxJRF9BVFRSCi0JCQkJfCBORlNfSU5PX0lOVkFMSURfQVRJTUUKLQkJCQl8IE5GU19JTk9fUkVWQUxfUEFHRUNBQ0hFKTsKIAogCW5mc2ktPnJlYWRfY2FjaGVfamlmZmllcyA9IGZhdHRyLT50aW1lX3N0YXJ0OwogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IG5mc19jdGltZV9uZWVkX3VwZGF0ZShjb25zdCBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjb25zdCBzdHJ1Y3QgbmZzX2ZhdHRyICpmYXR0cikKK3sKKwlyZXR1cm4gdGltZXNwZWNfY29tcGFyZSgmZmF0dHItPmN0aW1lLCAmaW5vZGUtPmlfY3RpbWUpID4gMDsKK30KKworc3RhdGljIGludCBuZnNfc2l6ZV9uZWVkX3VwZGF0ZShjb25zdCBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjb25zdCBzdHJ1Y3QgbmZzX2ZhdHRyICpmYXR0cikKK3sKKwlyZXR1cm4gbmZzX3NpemVfdG9fbG9mZl90KGZhdHRyLT5zaXplKSA+IGlfc2l6ZV9yZWFkKGlub2RlKTsKK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgbmZzX2F0dHJfZ2VuZXJhdGlvbl9jb3VudGVyOworCitzdGF0aWMgdW5zaWduZWQgbG9uZyBuZnNfcmVhZF9hdHRyX2dlbmVyYXRpb25fY291bnRlcih2b2lkKQoreworCXNtcF9ybWIoKTsKKwlyZXR1cm4gbmZzX2F0dHJfZ2VuZXJhdGlvbl9jb3VudGVyOworfQorCit1bnNpZ25lZCBsb25nIG5mc19pbmNfYXR0cl9nZW5lcmF0aW9uX2NvdW50ZXIodm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIHJldDsKKwlzbXBfcm1iKCk7CisJcmV0ID0gKytuZnNfYXR0cl9nZW5lcmF0aW9uX2NvdW50ZXI7CisJc21wX3dtYigpOworCXJldHVybiByZXQ7Cit9CisKK3ZvaWQgbmZzX2ZhdHRyX2luaXQoc3RydWN0IG5mc19mYXR0ciAqZmF0dHIpCit7CisJZmF0dHItPnZhbGlkID0gMDsKKwlmYXR0ci0+dGltZV9zdGFydCA9IGppZmZpZXM7CisJZmF0dHItPmdlbmNvdW50ID0gbmZzX2luY19hdHRyX2dlbmVyYXRpb25fY291bnRlcigpOworfQorCisvKioKKyAqIG5mc19pbm9kZV9hdHRyc19uZWVkX3VwZGF0ZSAtIGNoZWNrIGlmIHRoZSBpbm9kZSBhdHRyaWJ1dGVzIG5lZWQgdXBkYXRpbmcKKyAqIEBpbm9kZSAtIHBvaW50ZXIgdG8gaW5vZGUKKyAqIEBmYXR0ciAtIGF0dHJpYnV0ZXMKKyAqCisgKiBBdHRlbXB0IHRvIGRpdmluZSB3aGV0aGVyIG9yIG5vdCBhbiBSUEMgY2FsbCByZXBseSBjYXJyeWluZyBzdGFsZQorICogYXR0cmlidXRlcyBnb3Qgc2NoZWR1bGVkIGFmdGVyIGFub3RoZXIgY2FsbCBjYXJyeWluZyB1cGRhdGVkIG9uZXMuCisgKgorICogVG8gZG8gc28sIHRoZSBmdW5jdGlvbiBmaXJzdCBhc3N1bWVzIHRoYXQgYSBtb3JlIHJlY2VudCBjdGltZSBtZWFucworICogdGhhdCB0aGUgYXR0cmlidXRlcyBpbiBmYXR0ciBhcmUgbmV3ZXIsIGhvd2V2ZXIgaXQgYWxzbyBhdHRlbXB0IHRvCisgKiBjYXRjaCB0aGUgY2FzZSB3aGVyZSBjdGltZSBlaXRoZXIgZGlkbid0IGNoYW5nZSwgb3Igd2VudCBiYWNrd2FyZHMKKyAqIChpZiBzb21lb25lIHJlc2V0IHRoZSBjbG9jayBvbiB0aGUgc2VydmVyKSBieSBsb29raW5nIGF0IHdoZXRoZXIKKyAqIG9yIG5vdCB0aGlzIFJQQyBjYWxsIHdhcyBzdGFydGVkIGFmdGVyIHRoZSBpbm9kZSB3YXMgbGFzdCB1cGRhdGVkLgorICogTm90ZSBhbHNvIHRoZSBjaGVjayBmb3Igd3JhcGFyb3VuZCBvZiAnYXR0cl9nZW5jb3VudCcKKyAqCisgKiBUaGUgZnVuY3Rpb24gcmV0dXJucyAndHJ1ZScgaWYgaXQgdGhpbmtzIHRoZSBhdHRyaWJ1dGVzIGluICdmYXR0cicgYXJlCisgKiBtb3JlIHJlY2VudCB0aGFuIHRoZSBvbmVzIGNhY2hlZCBpbiB0aGUgaW5vZGUuCisgKgorICovCitzdGF0aWMgaW50IG5mc19pbm9kZV9hdHRyc19uZWVkX3VwZGF0ZShjb25zdCBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjb25zdCBzdHJ1Y3QgbmZzX2ZhdHRyICpmYXR0cikKK3sKKwljb25zdCBzdHJ1Y3QgbmZzX2lub2RlICpuZnNpID0gTkZTX0koaW5vZGUpOworCisJcmV0dXJuICgobG9uZylmYXR0ci0+Z2VuY291bnQgLSAobG9uZyluZnNpLT5hdHRyX2dlbmNvdW50KSA+IDAgfHwKKwkJbmZzX2N0aW1lX25lZWRfdXBkYXRlKGlub2RlLCBmYXR0cikgfHwKKwkJbmZzX3NpemVfbmVlZF91cGRhdGUoaW5vZGUsIGZhdHRyKSB8fAorCQkoKGxvbmcpbmZzaS0+YXR0cl9nZW5jb3VudCAtIChsb25nKW5mc19yZWFkX2F0dHJfZ2VuZXJhdGlvbl9jb3VudGVyKCkgPiAwKTsKK30KKworc3RhdGljIGludCBuZnNfcmVmcmVzaF9pbm9kZV9sb2NrZWQoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IG5mc19mYXR0ciAqZmF0dHIpCit7CisJaWYgKG5mc19pbm9kZV9hdHRyc19uZWVkX3VwZGF0ZShpbm9kZSwgZmF0dHIpKQorCQlyZXR1cm4gbmZzX3VwZGF0ZV9pbm9kZShpbm9kZSwgZmF0dHIpOworCXJldHVybiBuZnNfY2hlY2tfaW5vZGVfYXR0cmlidXRlcyhpbm9kZSwgZmF0dHIpOworfQorCiAvKioKICAqIG5mc19yZWZyZXNoX2lub2RlIC0gdHJ5IHRvIHVwZGF0ZSB0aGUgaW5vZGUgYXR0cmlidXRlIGNhY2hlCiAgKiBAaW5vZGUgLSBwb2ludGVyIHRvIGlub2RlCkBAIC05NjAsMjEgKzk4MCwyOCBAQAogICovCiBpbnQgbmZzX3JlZnJlc2hfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IG5mc19mYXR0ciAqZmF0dHIpCiB7Ci0Jc3RydWN0IG5mc19pbm9kZSAqbmZzaSA9IE5GU19JKGlub2RlKTsKIAlpbnQgc3RhdHVzOwogCiAJaWYgKChmYXR0ci0+dmFsaWQgJiBORlNfQVRUUl9GQVRUUikgPT0gMCkKIAkJcmV0dXJuIDA7CiAJc3Bpbl9sb2NrKCZpbm9kZS0+aV9sb2NrKTsKLQlpZiAodGltZV9hZnRlcihmYXR0ci0+dGltZV9zdGFydCwgbmZzaS0+bGFzdF91cGRhdGVkKSkKLQkJc3RhdHVzID0gbmZzX3VwZGF0ZV9pbm9kZShpbm9kZSwgZmF0dHIpOwotCWVsc2UKLQkJc3RhdHVzID0gbmZzX2NoZWNrX2lub2RlX2F0dHJpYnV0ZXMoaW5vZGUsIGZhdHRyKTsKLQorCXN0YXR1cyA9IG5mc19yZWZyZXNoX2lub2RlX2xvY2tlZChpbm9kZSwgZmF0dHIpOwogCXNwaW5fdW5sb2NrKCZpbm9kZS0+aV9sb2NrKTsKIAlyZXR1cm4gc3RhdHVzOwogfQogCitzdGF0aWMgaW50IG5mc19wb3N0X29wX3VwZGF0ZV9pbm9kZV9sb2NrZWQoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IG5mc19mYXR0ciAqZmF0dHIpCit7CisJc3RydWN0IG5mc19pbm9kZSAqbmZzaSA9IE5GU19JKGlub2RlKTsKKworCW5mc2ktPmNhY2hlX3ZhbGlkaXR5IHw9IE5GU19JTk9fSU5WQUxJRF9BVFRSfE5GU19JTk9fUkVWQUxfUEFHRUNBQ0hFOworCWlmIChTX0lTRElSKGlub2RlLT5pX21vZGUpKQorCQluZnNpLT5jYWNoZV92YWxpZGl0eSB8PSBORlNfSU5PX0lOVkFMSURfREFUQTsKKwlpZiAoKGZhdHRyLT52YWxpZCAmIE5GU19BVFRSX0ZBVFRSKSA9PSAwKQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gbmZzX3JlZnJlc2hfaW5vZGVfbG9ja2VkKGlub2RlLCBmYXR0cik7Cit9CisKIC8qKgogICogbmZzX3Bvc3Rfb3BfdXBkYXRlX2lub2RlIC0gdHJ5IHRvIHVwZGF0ZSB0aGUgaW5vZGUgYXR0cmlidXRlIGNhY2hlCiAgKiBAaW5vZGUgLSBwb2ludGVyIHRvIGlub2RlCkBAIC05OTEsMTQgKzEwMTgsMTIgQEAKICAqLwogaW50IG5mc19wb3N0X29wX3VwZGF0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgbmZzX2ZhdHRyICpmYXR0cikKIHsKLQlzdHJ1Y3QgbmZzX2lub2RlICpuZnNpID0gTkZTX0koaW5vZGUpOworCWludCBzdGF0dXM7CiAKIAlzcGluX2xvY2soJmlub2RlLT5pX2xvY2spOwotCW5mc2ktPmNhY2hlX3ZhbGlkaXR5IHw9IE5GU19JTk9fSU5WQUxJRF9BVFRSfE5GU19JTk9fUkVWQUxfUEFHRUNBQ0hFOwotCWlmIChTX0lTRElSKGlub2RlLT5pX21vZGUpKQotCQluZnNpLT5jYWNoZV92YWxpZGl0eSB8PSBORlNfSU5PX0lOVkFMSURfREFUQTsKKwlzdGF0dXMgPSBuZnNfcG9zdF9vcF91cGRhdGVfaW5vZGVfbG9ja2VkKGlub2RlLCBmYXR0cik7CiAJc3Bpbl91bmxvY2soJmlub2RlLT5pX2xvY2spOwotCXJldHVybiBuZnNfcmVmcmVzaF9pbm9kZShpbm9kZSwgZmF0dHIpOworCXJldHVybiBzdGF0dXM7CiB9CiAKIC8qKgpAQCAtMTAxNCw2ICsxMDM5LDE1IEBACiAgKi8KIGludCBuZnNfcG9zdF9vcF91cGRhdGVfaW5vZGVfZm9yY2Vfd2NjKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBuZnNfZmF0dHIgKmZhdHRyKQogeworCWludCBzdGF0dXM7CisKKwlzcGluX2xvY2soJmlub2RlLT5pX2xvY2spOworCS8qIERvbid0IGRvIGEgV0NDIHVwZGF0ZSBpZiB0aGVzZSBhdHRyaWJ1dGVzIGFyZSBhbHJlYWR5IHN0YWxlICovCisJaWYgKChmYXR0ci0+dmFsaWQgJiBORlNfQVRUUl9GQVRUUikgPT0gMCB8fAorCQkJIW5mc19pbm9kZV9hdHRyc19uZWVkX3VwZGF0ZShpbm9kZSwgZmF0dHIpKSB7CisJCWZhdHRyLT52YWxpZCAmPSB+KE5GU19BVFRSX1dDQ19WNHxORlNfQVRUUl9XQ0MpOworCQlnb3RvIG91dF9ub2ZvcmNlOworCX0KIAlpZiAoKGZhdHRyLT52YWxpZCAmIE5GU19BVFRSX0ZBVFRSX1Y0KSAhPSAwICYmCiAJCQkoZmF0dHItPnZhbGlkICYgTkZTX0FUVFJfV0NDX1Y0KSA9PSAwKSB7CiAJCWZhdHRyLT5wcmVfY2hhbmdlX2F0dHIgPSBORlNfSShpbm9kZSktPmNoYW5nZV9hdHRyOwpAQCAtMTAyNiw3ICsxMDYwLDEwIEBACiAJCWZhdHRyLT5wcmVfc2l6ZSA9IGlfc2l6ZV9yZWFkKGlub2RlKTsKIAkJZmF0dHItPnZhbGlkIHw9IE5GU19BVFRSX1dDQzsKIAl9Ci0JcmV0dXJuIG5mc19wb3N0X29wX3VwZGF0ZV9pbm9kZShpbm9kZSwgZmF0dHIpOworb3V0X25vZm9yY2U6CisJc3RhdHVzID0gbmZzX3Bvc3Rfb3BfdXBkYXRlX2lub2RlX2xvY2tlZChpbm9kZSwgZmF0dHIpOworCXNwaW5fdW5sb2NrKCZpbm9kZS0+aV9sb2NrKTsKKwlyZXR1cm4gc3RhdHVzOwogfQogCiAvKgpAQCAtMTA5Miw3ICsxMTI5LDcgQEAKIAkJfQogCQkvKiBJZiBjdGltZSBoYXMgY2hhbmdlZCB3ZSBzaG91bGQgZGVmaW5pdGVseSBjbGVhciBhY2Nlc3MrYWNsIGNhY2hlcyAqLwogCQlpZiAoIXRpbWVzcGVjX2VxdWFsKCZpbm9kZS0+aV9jdGltZSwgJmZhdHRyLT5jdGltZSkpCi0JCQlpbnZhbGlkIHw9IE5GU19JTk9fSU5WQUxJRF9BQ0NFU1N8TkZTX0lOT19JTlZBTElEX0FDTDsKKwkJCWludmFsaWQgfD0gTkZTX0lOT19JTlZBTElEX0FUVFJ8TkZTX0lOT19JTlZBTElEX0FDQ0VTU3xORlNfSU5PX0lOVkFMSURfQUNMOwogCX0gZWxzZSBpZiAobmZzaS0+Y2hhbmdlX2F0dHIgIT0gZmF0dHItPmNoYW5nZV9hdHRyKSB7CiAJCWRwcmludGsoIk5GUzogY2hhbmdlX2F0dHIgY2hhbmdlIG9uIHNlcnZlciBmb3IgZmlsZSAlcy8lbGRcbiIsCiAJCQkJaW5vZGUtPmlfc2ItPnNfaWQsIGlub2RlLT5pX2lubyk7CkBAIC0xMTI2LDYgKzExNjMsOSBAQAogCSAgICBpbm9kZS0+aV9naWQgIT0gZmF0dHItPmdpZCkKIAkJaW52YWxpZCB8PSBORlNfSU5PX0lOVkFMSURfQVRUUnxORlNfSU5PX0lOVkFMSURfQUNDRVNTfE5GU19JTk9fSU5WQUxJRF9BQ0w7CiAKKwlpZiAoaW5vZGUtPmlfbmxpbmsgIT0gZmF0dHItPm5saW5rKQorCQlpbnZhbGlkIHw9IE5GU19JTk9fSU5WQUxJRF9BVFRSOworCiAJaW5vZGUtPmlfbW9kZSA9IGZhdHRyLT5tb2RlOwogCWlub2RlLT5pX25saW5rID0gZmF0dHItPm5saW5rOwogCWlub2RlLT5pX3VpZCA9IGZhdHRyLT51aWQ7CkBAIC0xMTQ1LDE4ICsxMTg1LDEzIEBACiAJCW5mc19pbmNfc3RhdHMoaW5vZGUsIE5GU0lPU19BVFRSSU5WQUxJREFURSk7CiAJCW5mc2ktPmF0dHJ0aW1lbyA9IE5GU19NSU5BVFRSVElNRU8oaW5vZGUpOwogCQluZnNpLT5hdHRydGltZW9fdGltZXN0YW1wID0gbm93OwotCQluZnNpLT5sYXN0X3VwZGF0ZWQgPSBub3c7CisJCW5mc2ktPmF0dHJfZ2VuY291bnQgPSBuZnNfaW5jX2F0dHJfZ2VuZXJhdGlvbl9jb3VudGVyKCk7CiAJfSBlbHNlIHsKIAkJaWYgKCF0aW1lX2luX3JhbmdlKG5vdywgbmZzaS0+YXR0cnRpbWVvX3RpbWVzdGFtcCwgbmZzaS0+YXR0cnRpbWVvX3RpbWVzdGFtcCArIG5mc2ktPmF0dHJ0aW1lbykpIHsKIAkJCWlmICgobmZzaS0+YXR0cnRpbWVvIDw8PSAxKSA+IE5GU19NQVhBVFRSVElNRU8oaW5vZGUpKQogCQkJCW5mc2ktPmF0dHJ0aW1lbyA9IE5GU19NQVhBVFRSVElNRU8oaW5vZGUpOwogCQkJbmZzaS0+YXR0cnRpbWVvX3RpbWVzdGFtcCA9IG5vdzsKIAkJfQotCQkvKgotCQkgKiBBdm9pZCBqaWZmeSB3cmFwYXJvdW5kIGlzc3VlcyB3aXRoIG5mc2ktPmxhc3RfdXBkYXRlZAotCQkgKi8KLQkJaWYgKCF0aW1lX2luX3JhbmdlKG5mc2ktPmxhc3RfdXBkYXRlZCwgbmZzaS0+cmVhZF9jYWNoZV9qaWZmaWVzLCBub3cpKQotCQkJbmZzaS0+bGFzdF91cGRhdGVkID0gbmZzaS0+cmVhZF9jYWNoZV9qaWZmaWVzOwogCX0KIAlpbnZhbGlkICY9IH5ORlNfSU5PX0lOVkFMSURfQVRUUjsKIAkvKiBEb24ndCBpbnZhbGlkYXRlIHRoZSBkYXRhIGlmIHdlIHdlcmUgdG8gYmxhbWUgKi8KZGlmZiAtLWdpdCBhL2ZzL25mcy9pbnRlcm5hbC5oIGIvZnMvbmZzL2ludGVybmFsLmgKaW5kZXggMjQyNDFmYy4uZDIxMmVlNCAxMDA2NDQKLS0tIGEvZnMvbmZzL2ludGVybmFsLmgKKysrIGIvZnMvbmZzL2ludGVybmFsLmgKQEAgLTE1Myw2ICsxNTMsNyBAQAogdm9pZCBuZnNfemFwX2FjbF9jYWNoZShzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKIAogLyogc3VwZXIuYyAqLwordm9pZCBuZnNfcGFyc2VfaXBfYWRkcmVzcyhjaGFyICosIHNpemVfdCwgc3RydWN0IHNvY2thZGRyICosIHNpemVfdCAqKTsKIGV4dGVybiBzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZSBuZnNfeGRldl9mc190eXBlOwogI2lmZGVmIENPTkZJR19ORlNfVjQKIGV4dGVybiBzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZSBuZnM0X3hkZXZfZnNfdHlwZTsKQEAgLTE2Myw4ICsxNjQsOCBAQAogCiBleHRlcm4gaW50IF9faW5pdCByZWdpc3Rlcl9uZnNfZnModm9pZCk7CiBleHRlcm4gdm9pZCBfX2V4aXQgdW5yZWdpc3Rlcl9uZnNfZnModm9pZCk7Ci1leHRlcm4gdm9pZCBuZnNfc2JfYWN0aXZlKHN0cnVjdCBuZnNfc2VydmVyICpzZXJ2ZXIpOwotZXh0ZXJuIHZvaWQgbmZzX3NiX2RlYWN0aXZlKHN0cnVjdCBuZnNfc2VydmVyICpzZXJ2ZXIpOworZXh0ZXJuIHZvaWQgbmZzX3NiX2FjdGl2ZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKTsKK2V4dGVybiB2b2lkIG5mc19zYl9kZWFjdGl2ZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKTsKIAogLyogbmFtZXNwYWNlLmMgKi8KIGV4dGVybiBjaGFyICpuZnNfcGF0aChjb25zdCBjaGFyICpiYXNlLApAQCAtMjc2LDMgKzI3NywyMyBAQAogCQlQQUdFX1NJWkUgLSAxKSA+PiBQQUdFX1NISUZUOwogfQogCisjZGVmaW5lIElQVjZfU0NPUEVfREVMSU1JVEVSCSclJworCisvKgorICogU2V0IHRoZSBwb3J0IG51bWJlciBpbiBhbiBhZGRyZXNzLiAgQmUgYWdub3N0aWMgYWJvdXQgdGhlIGFkZHJlc3MKKyAqIGZhbWlseS4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIG5mc19zZXRfcG9ydChzdHJ1Y3Qgc29ja2FkZHIgKnNhcCwgdW5zaWduZWQgc2hvcnQgcG9ydCkKK3sKKwlzdHJ1Y3Qgc29ja2FkZHJfaW4gKmFwID0gKHN0cnVjdCBzb2NrYWRkcl9pbiAqKXNhcDsKKwlzdHJ1Y3Qgc29ja2FkZHJfaW42ICphcDYgPSAoc3RydWN0IHNvY2thZGRyX2luNiAqKXNhcDsKKworCXN3aXRjaCAoc2FwLT5zYV9mYW1pbHkpIHsKKwljYXNlIEFGX0lORVQ6CisJCWFwLT5zaW5fcG9ydCA9IGh0b25zKHBvcnQpOworCQlicmVhazsKKwljYXNlIEFGX0lORVQ2OgorCQlhcDYtPnNpbjZfcG9ydCA9IGh0b25zKHBvcnQpOworCQlicmVhazsKKwl9Cit9CmRpZmYgLS1naXQgYS9mcy9uZnMvbW91bnRfY2xudC5jIGIvZnMvbmZzL21vdW50X2NsbnQuYwppbmRleCA3NzlkMmViLi4wODZhNjgzIDEwMDY0NAotLS0gYS9mcy9uZnMvbW91bnRfY2xudC5jCisrKyBiL2ZzL25mcy9tb3VudF9jbG50LmMKQEAgLTE0LDYgKzE0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9zdW5ycGMvY2xudC5oPgogI2luY2x1ZGUgPGxpbnV4L3N1bnJwYy9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L25mc19mcy5oPgorI2luY2x1ZGUgImludGVybmFsLmgiCiAKICNpZmRlZiBSUENfREVCVUcKICMgZGVmaW5lIE5GU0RCR19GQUNJTElUWQlORlNEQkdfTU9VTlQKQEAgLTk4LDcgKzk5LDcgQEAKIAogb3V0X21udF9lcnI6CiAJZHByaW50aygiTkZTOiBNTlQgc2VydmVyIHJldHVybmVkIHJlc3VsdCAlZFxuIiwgcmVzdWx0LnN0YXR1cyk7Ci0Jc3RhdHVzID0gLUVBQ0NFUzsKKwlzdGF0dXMgPSBuZnNfc3RhdF90b19lcnJubyhyZXN1bHQuc3RhdHVzKTsKIAlnb3RvIG91dDsKIH0KIApkaWZmIC0tZ2l0IGEvZnMvbmZzL25hbWVzcGFjZS5jIGIvZnMvbmZzL25hbWVzcGFjZS5jCmluZGV4IDY2ZGYwOGQuLjY0YTI4OGUgMTAwNjQ0Ci0tLSBhL2ZzL25mcy9uYW1lc3BhY2UuYworKysgYi9mcy9uZnMvbmFtZXNwYWNlLmMKQEAgLTEwNSw3ICsxMDUsMTAgQEAKIAogCWRwcmludGsoIi0tPiBuZnNfZm9sbG93X21vdW50cG9pbnQoKVxuIik7CiAKLQlCVUdfT04oSVNfUk9PVChkZW50cnkpKTsKKwllcnIgPSAtRVNUQUxFOworCWlmIChJU19ST09UKGRlbnRyeSkpCisJCWdvdG8gb3V0X2VycjsKKwogCWRwcmludGsoIiVzOiBlbnRlclxuIiwgX19mdW5jX18pOwogCWRwdXQobmQtPnBhdGguZGVudHJ5KTsKIAluZC0+cGF0aC5kZW50cnkgPSBkZ2V0KGRlbnRyeSk7CkBAIC0xODksNyArMTkyLDcgQEAKIAkJCQkJICAgc3RydWN0IG5mc19jbG9uZV9tb3VudCAqbW91bnRkYXRhKQogewogI2lmZGVmIENPTkZJR19ORlNfVjQKLQlzdHJ1Y3QgdmZzbW91bnQgKm1udCA9IE5VTEw7CisJc3RydWN0IHZmc21vdW50ICptbnQgPSBFUlJfUFRSKC1FSU5WQUwpOwogCXN3aXRjaCAoc2VydmVyLT5uZnNfY2xpZW50LT5ycGNfb3BzLT52ZXJzaW9uKSB7CiAJCWNhc2UgMjoKIAkJY2FzZSAzOgpkaWZmIC0tZ2l0IGEvZnMvbmZzL25mczNhY2wuYyBiL2ZzL25mcy9uZnMzYWNsLmMKaW5kZXggNDIzODQyZi4uY2VmNjI1NSAxMDA2NDQKLS0tIGEvZnMvbmZzL25mczNhY2wuYworKysgYi9mcy9uZnMvbmZzM2FjbC5jCkBAIC0yMjksNiArMjI5LDcgQEAKIAogCWRwcmludGsoIk5GUyBjYWxsIGdldGFjbFxuIik7CiAJbXNnLnJwY19wcm9jID0gJnNlcnZlci0+Y2xpZW50X2FjbC0+Y2xfcHJvY2luZm9bQUNMUFJPQzNfR0VUQUNMXTsKKwluZnNfZmF0dHJfaW5pdCgmZmF0dHIpOwogCXN0YXR1cyA9IHJwY19jYWxsX3N5bmMoc2VydmVyLT5jbGllbnRfYWNsLCAmbXNnLCAwKTsKIAlkcHJpbnRrKCJORlMgcmVwbHkgZ2V0YWNsOiAlZFxuIiwgc3RhdHVzKTsKIApAQCAtMzIyLDYgKzMyMyw3IEBACiAKIAlkcHJpbnRrKCJORlMgY2FsbCBzZXRhY2xcbiIpOwogCW1zZy5ycGNfcHJvYyA9ICZzZXJ2ZXItPmNsaWVudF9hY2wtPmNsX3Byb2NpbmZvW0FDTFBST0MzX1NFVEFDTF07CisJbmZzX2ZhdHRyX2luaXQoJmZhdHRyKTsKIAlzdGF0dXMgPSBycGNfY2FsbF9zeW5jKHNlcnZlci0+Y2xpZW50X2FjbCwgJm1zZywgMCk7CiAJbmZzX2FjY2Vzc196YXBfY2FjaGUoaW5vZGUpOwogCW5mc196YXBfYWNsX2NhY2hlKGlub2RlKTsKZGlmZiAtLWdpdCBhL2ZzL25mcy9uZnMzcHJvYy5jIGIvZnMvbmZzL25mczNwcm9jLmMKaW5kZXggMWU3NTBlNDUuLmM1NWJlN2EgMTAwNjQ0Ci0tLSBhL2ZzL25mcy9uZnMzcHJvYy5jCisrKyBiL2ZzL25mcy9uZnMzcHJvYy5jCkBAIC02OTksNyArNjk5LDcgQEAKIH0KIAogc3RhdGljIGludAotbmZzM19wcm9jX2ZzaW5mbyhzdHJ1Y3QgbmZzX3NlcnZlciAqc2VydmVyLCBzdHJ1Y3QgbmZzX2ZoICpmaGFuZGxlLAorZG9fcHJvY19mc2luZm8oc3RydWN0IHJwY19jbG50ICpjbGllbnQsIHN0cnVjdCBuZnNfZmggKmZoYW5kbGUsCiAJCSBzdHJ1Y3QgbmZzX2ZzaW5mbyAqaW5mbykKIHsKIAlzdHJ1Y3QgcnBjX21lc3NhZ2UgbXNnID0gewpAQCAtNzExLDExICs3MTEsMjcgQEAKIAogCWRwcmludGsoIk5GUyBjYWxsICBmc2luZm9cbiIpOwogCW5mc19mYXR0cl9pbml0KGluZm8tPmZhdHRyKTsKLQlzdGF0dXMgPSBycGNfY2FsbF9zeW5jKHNlcnZlci0+bmZzX2NsaWVudC0+Y2xfcnBjY2xpZW50LCAmbXNnLCAwKTsKKwlzdGF0dXMgPSBycGNfY2FsbF9zeW5jKGNsaWVudCwgJm1zZywgMCk7CiAJZHByaW50aygiTkZTIHJlcGx5IGZzaW5mbzogJWRcbiIsIHN0YXR1cyk7CiAJcmV0dXJuIHN0YXR1czsKIH0KIAorLyoKKyAqIEJhcmUtYm9uZXMgYWNjZXNzIHRvIGZzaW5mbzogdGhpcyBpcyBmb3IgbmZzX2dldF9yb290L25mc19nZXRfc2IgdmlhCisgKiBuZnNfY3JlYXRlX3NlcnZlcgorICovCitzdGF0aWMgaW50CituZnMzX3Byb2NfZnNpbmZvKHN0cnVjdCBuZnNfc2VydmVyICpzZXJ2ZXIsIHN0cnVjdCBuZnNfZmggKmZoYW5kbGUsCisJCSAgIHN0cnVjdCBuZnNfZnNpbmZvICppbmZvKQoreworCWludAlzdGF0dXM7CisKKwlzdGF0dXMgPSBkb19wcm9jX2ZzaW5mbyhzZXJ2ZXItPmNsaWVudCwgZmhhbmRsZSwgaW5mbyk7CisJaWYgKHN0YXR1cyAmJiBzZXJ2ZXItPm5mc19jbGllbnQtPmNsX3JwY2NsaWVudCAhPSBzZXJ2ZXItPmNsaWVudCkKKwkJc3RhdHVzID0gZG9fcHJvY19mc2luZm8oc2VydmVyLT5uZnNfY2xpZW50LT5jbF9ycGNjbGllbnQsIGZoYW5kbGUsIGluZm8pOworCXJldHVybiBzdGF0dXM7Cit9CisKIHN0YXRpYyBpbnQKIG5mczNfcHJvY19wYXRoY29uZihzdHJ1Y3QgbmZzX3NlcnZlciAqc2VydmVyLCBzdHJ1Y3QgbmZzX2ZoICpmaGFuZGxlLAogCQkgICBzdHJ1Y3QgbmZzX3BhdGhjb25mICppbmZvKQpkaWZmIC0tZ2l0IGEvZnMvbmZzL25mczRuYW1lc3BhY2UuYyBiL2ZzL25mcy9uZnM0bmFtZXNwYWNlLmMKaW5kZXggYjExMjg1Ny4uMzBiZWZjMyAxMDA2NDQKLS0tIGEvZnMvbmZzL25mczRuYW1lc3BhY2UuYworKysgYi9mcy9uZnMvbmZzNG5hbWVzcGFjZS5jCkBAIC05MywyMSArOTMsNTIgQEAKIAlyZXR1cm4gMDsKIH0KIAotLyoKLSAqIENoZWNrIGlmIHRoZSBzdHJpbmcgcmVwcmVzZW50cyBhICJ2YWxpZCIgSVB2NCBhZGRyZXNzCi0gKi8KLXN0YXRpYyBpbmxpbmUgaW50IHZhbGlkX2lwYWRkcjQoY29uc3QgY2hhciAqYnVmKQorc3RhdGljIHN0cnVjdCB2ZnNtb3VudCAqdHJ5X2xvY2F0aW9uKHN0cnVjdCBuZnNfY2xvbmVfbW91bnQgKm1vdW50ZGF0YSwKKwkJCQkgICAgIGNoYXIgKnBhZ2UsIGNoYXIgKnBhZ2UyLAorCQkJCSAgICAgY29uc3Qgc3RydWN0IG5mczRfZnNfbG9jYXRpb24gKmxvY2F0aW9uKQogewotCWludCByYywgY291bnQsIGluWzRdOworCXN0cnVjdCB2ZnNtb3VudCAqbW50ID0gRVJSX1BUUigtRU5PRU5UKTsKKwljaGFyICptbnRfcGF0aDsKKwlpbnQgcGFnZTJsZW47CisJdW5zaWduZWQgaW50IHM7CiAKLQlyYyA9IHNzY2FuZihidWYsICIlZC4lZC4lZC4lZCIsICZpblswXSwgJmluWzFdLCAmaW5bMl0sICZpblszXSk7Ci0JaWYgKHJjICE9IDQpCi0JCXJldHVybiAtRUlOVkFMOwotCWZvciAoY291bnQgPSAwOyBjb3VudCA8IDQ7IGNvdW50KyspIHsKLQkJaWYgKGluW2NvdW50XSA+IDI1NSkKLQkJCXJldHVybiAtRUlOVkFMOworCW1udF9wYXRoID0gbmZzNF9wYXRobmFtZV9zdHJpbmcoJmxvY2F0aW9uLT5yb290cGF0aCwgcGFnZTIsIFBBR0VfU0laRSk7CisJaWYgKElTX0VSUihtbnRfcGF0aCkpCisJCXJldHVybiBtbnQ7CisJbW91bnRkYXRhLT5tbnRfcGF0aCA9IG1udF9wYXRoOworCXBhZ2UyICs9IHN0cmxlbihtbnRfcGF0aCkgKyAxOworCXBhZ2UybGVuID0gUEFHRV9TSVpFIC0gc3RybGVuKG1udF9wYXRoKSAtIDE7CisKKwlmb3IgKHMgPSAwOyBzIDwgbG9jYXRpb24tPm5zZXJ2ZXJzOyBzKyspIHsKKwkJY29uc3Qgc3RydWN0IG5mczRfc3RyaW5nICpidWYgPSAmbG9jYXRpb24tPnNlcnZlcnNbc107CisJCXN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlIGFkZHI7CisKKwkJaWYgKGJ1Zi0+bGVuIDw9IDAgfHwgYnVmLT5sZW4gPj0gUEFHRV9TSVpFKQorCQkJY29udGludWU7CisKKwkJbW91bnRkYXRhLT5hZGRyID0gKHN0cnVjdCBzb2NrYWRkciAqKSZhZGRyOworCisJCWlmIChtZW1jaHIoYnVmLT5kYXRhLCBJUFY2X1NDT1BFX0RFTElNSVRFUiwgYnVmLT5sZW4pKQorCQkJY29udGludWU7CisJCW5mc19wYXJzZV9pcF9hZGRyZXNzKGJ1Zi0+ZGF0YSwgYnVmLT5sZW4sCisJCQkJbW91bnRkYXRhLT5hZGRyLCAmbW91bnRkYXRhLT5hZGRybGVuKTsKKwkJaWYgKG1vdW50ZGF0YS0+YWRkci0+c2FfZmFtaWx5ID09IEFGX1VOU1BFQykKKwkJCWNvbnRpbnVlOworCQluZnNfc2V0X3BvcnQobW91bnRkYXRhLT5hZGRyLCBORlNfUE9SVCk7CisKKwkJc3RybmNweShwYWdlMiwgYnVmLT5kYXRhLCBwYWdlMmxlbik7CisJCXBhZ2UyW3BhZ2UybGVuXSA9ICdcMCc7CisJCW1vdW50ZGF0YS0+aG9zdG5hbWUgPSBwYWdlMjsKKworCQlzbnByaW50ZihwYWdlLCBQQUdFX1NJWkUsICIlczolcyIsCisJCQkJbW91bnRkYXRhLT5ob3N0bmFtZSwKKwkJCQltb3VudGRhdGEtPm1udF9wYXRoKTsKKworCQltbnQgPSB2ZnNfa2Vybl9tb3VudCgmbmZzNF9yZWZlcnJhbF9mc190eXBlLCAwLCBwYWdlLCBtb3VudGRhdGEpOworCQlpZiAoIUlTX0VSUihtbnQpKQorCQkJYnJlYWs7CiAJfQotCXJldHVybiAwOworCXJldHVybiBtbnQ7CiB9CiAKIC8qKgpAQCAtMTI4LDcgKzE1OSw2IEBACiAJCS5hdXRoZmxhdm9yID0gTkZTX1NCKG1udF9wYXJlbnQtPm1udF9zYiktPmNsaWVudC0+Y2xfYXV0aC0+YXVfZmxhdm9yLAogCX07CiAJY2hhciAqcGFnZSA9IE5VTEwsICpwYWdlMiA9IE5VTEw7Ci0JdW5zaWduZWQgaW50IHM7CiAJaW50IGxvYywgZXJyb3I7CiAKIAlpZiAobG9jYXRpb25zID09IE5VTEwgfHwgbG9jYXRpb25zLT5ubG9jYXRpb25zIDw9IDApCkBAIC0xNTIsNTMgKzE4MiwxNiBAQAogCQlnb3RvIG91dDsKIAl9CiAKLQlsb2MgPSAwOwotCXdoaWxlIChsb2MgPCBsb2NhdGlvbnMtPm5sb2NhdGlvbnMgJiYgSVNfRVJSKG1udCkpIHsKKwlmb3IgKGxvYyA9IDA7IGxvYyA8IGxvY2F0aW9ucy0+bmxvY2F0aW9uczsgbG9jKyspIHsKIAkJY29uc3Qgc3RydWN0IG5mczRfZnNfbG9jYXRpb24gKmxvY2F0aW9uID0gJmxvY2F0aW9ucy0+bG9jYXRpb25zW2xvY107Ci0JCWNoYXIgKm1udF9wYXRoOwogCiAJCWlmIChsb2NhdGlvbiA9PSBOVUxMIHx8IGxvY2F0aW9uLT5uc2VydmVycyA8PSAwIHx8Ci0JCSAgICBsb2NhdGlvbi0+cm9vdHBhdGgubmNvbXBvbmVudHMgPT0gMCkgewotCQkJbG9jKys7CisJCSAgICBsb2NhdGlvbi0+cm9vdHBhdGgubmNvbXBvbmVudHMgPT0gMCkKIAkJCWNvbnRpbnVlOwotCQl9CiAKLQkJbW50X3BhdGggPSBuZnM0X3BhdGhuYW1lX3N0cmluZygmbG9jYXRpb24tPnJvb3RwYXRoLCBwYWdlMiwgUEFHRV9TSVpFKTsKLQkJaWYgKElTX0VSUihtbnRfcGF0aCkpIHsKLQkJCWxvYysrOwotCQkJY29udGludWU7Ci0JCX0KLQkJbW91bnRkYXRhLm1udF9wYXRoID0gbW50X3BhdGg7Ci0KLQkJcyA9IDA7Ci0JCXdoaWxlIChzIDwgbG9jYXRpb24tPm5zZXJ2ZXJzKSB7Ci0JCQlzdHJ1Y3Qgc29ja2FkZHJfaW4gYWRkciA9IHsKLQkJCQkuc2luX2ZhbWlseQk9IEFGX0lORVQsCi0JCQkJLnNpbl9wb3J0CT0gaHRvbnMoTkZTX1BPUlQpLAotCQkJfTsKLQotCQkJaWYgKGxvY2F0aW9uLT5zZXJ2ZXJzW3NdLmxlbiA8PSAwIHx8Ci0JCQkgICAgdmFsaWRfaXBhZGRyNChsb2NhdGlvbi0+c2VydmVyc1tzXS5kYXRhKSA8IDApIHsKLQkJCQlzKys7Ci0JCQkJY29udGludWU7Ci0JCQl9Ci0KLQkJCW1vdW50ZGF0YS5ob3N0bmFtZSA9IGxvY2F0aW9uLT5zZXJ2ZXJzW3NdLmRhdGE7Ci0JCQlhZGRyLnNpbl9hZGRyLnNfYWRkciA9IGluX2F0b24obW91bnRkYXRhLmhvc3RuYW1lKSwKLQkJCW1vdW50ZGF0YS5hZGRyID0gKHN0cnVjdCBzb2NrYWRkciAqKSZhZGRyOwotCQkJbW91bnRkYXRhLmFkZHJsZW4gPSBzaXplb2YoYWRkcik7Ci0KLQkJCXNucHJpbnRmKHBhZ2UsIFBBR0VfU0laRSwgIiVzOiVzIiwKLQkJCQkJbW91bnRkYXRhLmhvc3RuYW1lLAotCQkJCQltb3VudGRhdGEubW50X3BhdGgpOwotCi0JCQltbnQgPSB2ZnNfa2Vybl9tb3VudCgmbmZzNF9yZWZlcnJhbF9mc190eXBlLCAwLCBwYWdlLCAmbW91bnRkYXRhKTsKLQkJCWlmICghSVNfRVJSKG1udCkpIHsKLQkJCQlicmVhazsKLQkJCX0KLQkJCXMrKzsKLQkJfQotCQlsb2MrKzsKKwkJbW50ID0gdHJ5X2xvY2F0aW9uKCZtb3VudGRhdGEsIHBhZ2UsIHBhZ2UyLCBsb2NhdGlvbik7CisJCWlmICghSVNfRVJSKG1udCkpCisJCQlicmVhazsKIAl9CiAKIG91dDoKZGlmZiAtLWdpdCBhL2ZzL25mcy9uZnM0cHJvYy5jIGIvZnMvbmZzL25mczRwcm9jLmMKaW5kZXggYzkxMDQxMy4uODNlNzAwYSAxMDA2NDQKLS0tIGEvZnMvbmZzL25mczRwcm9jLmMKKysrIGIvZnMvbmZzL25mczRwcm9jLmMKQEAgLTE2NTksOCArMTY1OSwxMCBAQAogCQlzdHJ1Y3QgbmZzX29wZW5fY29udGV4dCAqY3R4OwogCiAJCWN0eCA9IG5mc19maWxlX29wZW5fY29udGV4dChzYXR0ci0+aWFfZmlsZSk7Ci0JCWNyZWQgPSBjdHgtPmNyZWQ7Ci0JCXN0YXRlID0gY3R4LT5zdGF0ZTsKKwkJaWYgKGN0eCkgeworCQkJY3JlZCA9IGN0eC0+Y3JlZDsKKwkJCXN0YXRlID0gY3R4LT5zdGF0ZTsKKwkJfQogCX0KIAogCXN0YXR1cyA9IG5mczRfZG9fc2V0YXR0cihpbm9kZSwgY3JlZCwgZmF0dHIsIHNhdHRyLCBzdGF0ZSk7CmRpZmYgLS1naXQgYS9mcy9uZnMvbmZzcm9vdC5jIGIvZnMvbmZzL25mc3Jvb3QuYwppbmRleCA0Njc2M2QxYy4uODQ3OGZjMiAxMDA2NDQKLS0tIGEvZnMvbmZzL25mc3Jvb3QuYworKysgYi9mcy9uZnMvbmZzcm9vdC5jCkBAIC0xMjcsNyArMTI3LDcgQEAKIAlPcHRfZXJyCiB9OwogCi1zdGF0aWMgbWF0Y2hfdGFibGVfdCBfX2luaXRkYXRhIHRva2VucyA9IHsKK3N0YXRpYyBtYXRjaF90YWJsZV90IF9faW5pdGNvbnN0IHRva2VucyA9IHsKIAl7T3B0X3BvcnQsICJwb3J0PSV1In0sCiAJe09wdF9yc2l6ZSwgInJzaXplPSV1In0sCiAJe09wdF93c2l6ZSwgIndzaXplPSV1In0sCmRpZmYgLS1naXQgYS9mcy9uZnMvcHJvYy5jIGIvZnMvbmZzL3Byb2MuYwppbmRleCA0ZGJiODRkLi4xOTM0NjUyIDEwMDY0NAotLS0gYS9mcy9uZnMvcHJvYy5jCisrKyBiL2ZzL25mcy9wcm9jLmMKQEAgLTY1LDE0ICs2NSwyMCBAQAogCiAJZHByaW50aygiJXM6IGNhbGwgZ2V0YXR0clxuIiwgX19mdW5jX18pOwogCW5mc19mYXR0cl9pbml0KGZhdHRyKTsKLQlzdGF0dXMgPSBycGNfY2FsbF9zeW5jKHNlcnZlci0+bmZzX2NsaWVudC0+Y2xfcnBjY2xpZW50LCAmbXNnLCAwKTsKKwlzdGF0dXMgPSBycGNfY2FsbF9zeW5jKHNlcnZlci0+Y2xpZW50LCAmbXNnLCAwKTsKKwkvKiBSZXRyeSB3aXRoIGRlZmF1bHQgYXV0aGVudGljYXRpb24gaWYgZGlmZmVyZW50ICovCisJaWYgKHN0YXR1cyAmJiBzZXJ2ZXItPm5mc19jbGllbnQtPmNsX3JwY2NsaWVudCAhPSBzZXJ2ZXItPmNsaWVudCkKKwkJc3RhdHVzID0gcnBjX2NhbGxfc3luYyhzZXJ2ZXItPm5mc19jbGllbnQtPmNsX3JwY2NsaWVudCwgJm1zZywgMCk7CiAJZHByaW50aygiJXM6IHJlcGx5IGdldGF0dHI6ICVkXG4iLCBfX2Z1bmNfXywgc3RhdHVzKTsKIAlpZiAoc3RhdHVzKQogCQlyZXR1cm4gc3RhdHVzOwogCWRwcmludGsoIiVzOiBjYWxsIHN0YXRmc1xuIiwgX19mdW5jX18pOwogCW1zZy5ycGNfcHJvYyA9ICZuZnNfcHJvY2VkdXJlc1tORlNQUk9DX1NUQVRGU107CiAJbXNnLnJwY19yZXNwID0gJmZzaW5mbzsKLQlzdGF0dXMgPSBycGNfY2FsbF9zeW5jKHNlcnZlci0+bmZzX2NsaWVudC0+Y2xfcnBjY2xpZW50LCAmbXNnLCAwKTsKKwlzdGF0dXMgPSBycGNfY2FsbF9zeW5jKHNlcnZlci0+Y2xpZW50LCAmbXNnLCAwKTsKKwkvKiBSZXRyeSB3aXRoIGRlZmF1bHQgYXV0aGVudGljYXRpb24gaWYgZGlmZmVyZW50ICovCisJaWYgKHN0YXR1cyAmJiBzZXJ2ZXItPm5mc19jbGllbnQtPmNsX3JwY2NsaWVudCAhPSBzZXJ2ZXItPmNsaWVudCkKKwkJc3RhdHVzID0gcnBjX2NhbGxfc3luYyhzZXJ2ZXItPm5mc19jbGllbnQtPmNsX3JwY2NsaWVudCwgJm1zZywgMCk7CiAJZHByaW50aygiJXM6IHJlcGx5IHN0YXRmczogJWRcbiIsIF9fZnVuY19fLCBzdGF0dXMpOwogCWlmIChzdGF0dXMpCiAJCXJldHVybiBzdGF0dXM7CmRpZmYgLS1naXQgYS9mcy9uZnMvc3VwZXIuYyBiL2ZzL25mcy9zdXBlci5jCmluZGV4IGU5YjIwMTcuLmEzYjAwNjEgMTAwNjQ0Ci0tLSBhL2ZzL25mcy9zdXBlci5jCisrKyBiL2ZzL25mcy9zdXBlci5jCkBAIC05MSw2ICs5MSw3IEBACiAJLyogTW91bnQgb3B0aW9ucyB0aGF0IHRha2Ugc3RyaW5nIGFyZ3VtZW50cyAqLwogCU9wdF9zZWMsIE9wdF9wcm90bywgT3B0X21vdW50cHJvdG8sIE9wdF9tb3VudGhvc3QsCiAJT3B0X2FkZHIsIE9wdF9tb3VudGFkZHIsIE9wdF9jbGllbnRhZGRyLAorCU9wdF9sb29rdXBjYWNoZSwKIAogCS8qIFNwZWNpYWwgbW91bnQgb3B0aW9ucyAqLwogCU9wdF91c2Vyc3BhY2UsIE9wdF9kZXByZWNhdGVkLCBPcHRfc2xvcHB5LApAQCAtOTgsNyArOTksNyBAQAogCU9wdF9lcnIKIH07CiAKLXN0YXRpYyBtYXRjaF90YWJsZV90IG5mc19tb3VudF9vcHRpb25fdG9rZW5zID0geworc3RhdGljIGNvbnN0IG1hdGNoX3RhYmxlX3QgbmZzX21vdW50X29wdGlvbl90b2tlbnMgPSB7CiAJeyBPcHRfdXNlcnNwYWNlLCAiYmciIH0sCiAJeyBPcHRfdXNlcnNwYWNlLCAiZmciIH0sCiAJeyBPcHRfdXNlcnNwYWNlLCAicmV0cnk9JXMiIH0sCkBAIC0xNTQsNiArMTU1LDggQEAKIAl7IE9wdF9tb3VudGhvc3QsICJtb3VudGhvc3Q9JXMiIH0sCiAJeyBPcHRfbW91bnRhZGRyLCAibW91bnRhZGRyPSVzIiB9LAogCisJeyBPcHRfbG9va3VwY2FjaGUsICJsb29rdXBjYWNoZT0lcyIgfSwKKwogCXsgT3B0X2VyciwgTlVMTCB9CiB9OwogCkBAIC0xNjMsNyArMTY2LDcgQEAKIAlPcHRfeHBydF9lcnIKIH07CiAKLXN0YXRpYyBtYXRjaF90YWJsZV90IG5mc194cHJ0X3Byb3RvY29sX3Rva2VucyA9IHsKK3N0YXRpYyBjb25zdCBtYXRjaF90YWJsZV90IG5mc194cHJ0X3Byb3RvY29sX3Rva2VucyA9IHsKIAl7IE9wdF94cHJ0X3VkcCwgInVkcCIgfSwKIAl7IE9wdF94cHJ0X3RjcCwgInRjcCIgfSwKIAl7IE9wdF94cHJ0X3JkbWEsICJyZG1hIiB9LApAQCAtMTgwLDcgKzE4Myw3IEBACiAJT3B0X3NlY19lcnIKIH07CiAKLXN0YXRpYyBtYXRjaF90YWJsZV90IG5mc19zZWNmbGF2b3JfdG9rZW5zID0geworc3RhdGljIGNvbnN0IG1hdGNoX3RhYmxlX3QgbmZzX3NlY2ZsYXZvcl90b2tlbnMgPSB7CiAJeyBPcHRfc2VjX25vbmUsICJub25lIiB9LAogCXsgT3B0X3NlY19ub25lLCAibnVsbCIgfSwKIAl7IE9wdF9zZWNfc3lzLCAic3lzIiB9LApAQCAtMjAwLDYgKzIwMywyMiBAQAogCXsgT3B0X3NlY19lcnIsIE5VTEwgfQogfTsKIAorZW51bSB7CisJT3B0X2xvb2t1cGNhY2hlX2FsbCwgT3B0X2xvb2t1cGNhY2hlX3Bvc2l0aXZlLAorCU9wdF9sb29rdXBjYWNoZV9ub25lLAorCisJT3B0X2xvb2t1cGNhY2hlX2VycgorfTsKKworc3RhdGljIG1hdGNoX3RhYmxlX3QgbmZzX2xvb2t1cGNhY2hlX3Rva2VucyA9IHsKKwl7IE9wdF9sb29rdXBjYWNoZV9hbGwsICJhbGwiIH0sCisJeyBPcHRfbG9va3VwY2FjaGVfcG9zaXRpdmUsICJwb3MiIH0sCisJeyBPcHRfbG9va3VwY2FjaGVfcG9zaXRpdmUsICJwb3NpdGl2ZSIgfSwKKwl7IE9wdF9sb29rdXBjYWNoZV9ub25lLCAibm9uZSIgfSwKKworCXsgT3B0X2xvb2t1cGNhY2hlX2VyciwgTlVMTCB9Cit9OworCiAKIHN0YXRpYyB2b2lkIG5mc191bW91bnRfYmVnaW4oc3RydWN0IHN1cGVyX2Jsb2NrICopOwogc3RhdGljIGludCAgbmZzX3N0YXRmcyhzdHJ1Y3QgZGVudHJ5ICosIHN0cnVjdCBrc3RhdGZzICopOwpAQCAtMjA5LDcgKzIyOCw2IEBACiBzdGF0aWMgaW50IG5mc194ZGV2X2dldF9zYihzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZSAqZnNfdHlwZSwKIAkJaW50IGZsYWdzLCBjb25zdCBjaGFyICpkZXZfbmFtZSwgdm9pZCAqcmF3X2RhdGEsIHN0cnVjdCB2ZnNtb3VudCAqbW50KTsKIHN0YXRpYyB2b2lkIG5mc19raWxsX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqKTsKLXN0YXRpYyB2b2lkIG5mc19wdXRfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICopOwogc3RhdGljIGludCBuZnNfcmVtb3VudChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgKmZsYWdzLCBjaGFyICpyYXdfZGF0YSk7CiAKIHN0YXRpYyBzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZSBuZnNfZnNfdHlwZSA9IHsKQEAgLTIzMiw3ICsyNTAsNiBAQAogCS5hbGxvY19pbm9kZQk9IG5mc19hbGxvY19pbm9kZSwKIAkuZGVzdHJveV9pbm9kZQk9IG5mc19kZXN0cm95X2lub2RlLAogCS53cml0ZV9pbm9kZQk9IG5mc193cml0ZV9pbm9kZSwKLQkucHV0X3N1cGVyCT0gbmZzX3B1dF9zdXBlciwKIAkuc3RhdGZzCQk9IG5mc19zdGF0ZnMsCiAJLmNsZWFyX2lub2RlCT0gbmZzX2NsZWFyX2lub2RlLAogCS51bW91bnRfYmVnaW4JPSBuZnNfdW1vdW50X2JlZ2luLApAQCAtMzM3LDI2ICszNTQsMjAgQEAKIAl1bnJlZ2lzdGVyX2ZpbGVzeXN0ZW0oJm5mc19mc190eXBlKTsKIH0KIAotdm9pZCBuZnNfc2JfYWN0aXZlKHN0cnVjdCBuZnNfc2VydmVyICpzZXJ2ZXIpCi17Ci0JYXRvbWljX2luYygmc2VydmVyLT5hY3RpdmUpOwotfQotCi12b2lkIG5mc19zYl9kZWFjdGl2ZShzdHJ1Y3QgbmZzX3NlcnZlciAqc2VydmVyKQotewotCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZzZXJ2ZXItPmFjdGl2ZSkpCi0JCXdha2VfdXAoJnNlcnZlci0+YWN0aXZlX3dxKTsKLX0KLQotc3RhdGljIHZvaWQgbmZzX3B1dF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQordm9pZCBuZnNfc2JfYWN0aXZlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCiB7CiAJc3RydWN0IG5mc19zZXJ2ZXIgKnNlcnZlciA9IE5GU19TQihzYik7Ci0JLyoKLQkgKiBNYWtlIHN1cmUgdGhlcmUgYXJlIG5vIG91dHN0YW5kaW5nIG9wcyB0byB0aGlzIHNlcnZlci4KLQkgKiBJZiBzbywgd2FpdCBmb3IgdGhlbSB0byBmaW5pc2ggYmVmb3JlIGFsbG93aW5nIHRoZQotCSAqIHVubW91bnQgdG8gY29udGludWUuCi0JICovCi0Jd2FpdF9ldmVudChzZXJ2ZXItPmFjdGl2ZV93cSwgYXRvbWljX3JlYWQoJnNlcnZlci0+YWN0aXZlKSA9PSAwKTsKKworCWlmIChhdG9taWNfaW5jX3JldHVybigmc2VydmVyLT5hY3RpdmUpID09IDEpCisJCWF0b21pY19pbmMoJnNiLT5zX2FjdGl2ZSk7Cit9CisKK3ZvaWQgbmZzX3NiX2RlYWN0aXZlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCit7CisJc3RydWN0IG5mc19zZXJ2ZXIgKnNlcnZlciA9IE5GU19TQihzYik7CisKKwlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmc2VydmVyLT5hY3RpdmUpKQorCQlkZWFjdGl2YXRlX3N1cGVyKHNiKTsKIH0KIAogLyoKQEAgLTY2NCwyNSArNjc1LDYgQEAKIH0KIAogLyoKLSAqIFNldCB0aGUgcG9ydCBudW1iZXIgaW4gYW4gYWRkcmVzcy4gIEJlIGFnbm9zdGljIGFib3V0IHRoZSBhZGRyZXNzIGZhbWlseS4KLSAqLwotc3RhdGljIHZvaWQgbmZzX3NldF9wb3J0KHN0cnVjdCBzb2NrYWRkciAqc2FwLCB1bnNpZ25lZCBzaG9ydCBwb3J0KQotewotCXN3aXRjaCAoc2FwLT5zYV9mYW1pbHkpIHsKLQljYXNlIEFGX0lORVQ6IHsKLQkJc3RydWN0IHNvY2thZGRyX2luICphcCA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKilzYXA7Ci0JCWFwLT5zaW5fcG9ydCA9IGh0b25zKHBvcnQpOwotCQlicmVhazsKLQl9Ci0JY2FzZSBBRl9JTkVUNjogewotCQlzdHJ1Y3Qgc29ja2FkZHJfaW42ICphcCA9IChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopc2FwOwotCQlhcC0+c2luNl9wb3J0ID0gaHRvbnMocG9ydCk7Ci0JCWJyZWFrOwotCX0KLQl9Ci19Ci0KLS8qCiAgKiBTYW5pdHktY2hlY2sgYSBzZXJ2ZXIgYWRkcmVzcyBwcm92aWRlZCBieSB0aGUgbW91bnQgY29tbWFuZC4KICAqCiAgKiBBZGRyZXNzIGZhbWlseSBtdXN0IGJlIGluaXRpYWxpemVkLCBhbmQgYWRkcmVzcyBtdXN0IG5vdCBiZQpAQCAtNzI0LDIwICs3MTYsMjIgQEAKIAkqYWRkcl9sZW4gPSAwOwogfQogCi0jZGVmaW5lIElQVjZfU0NPUEVfREVMSU1JVEVSCSclJwotCiAjaWYgZGVmaW5lZChDT05GSUdfSVBWNikgfHwgZGVmaW5lZChDT05GSUdfSVBWNl9NT0RVTEUpCi1zdGF0aWMgdm9pZCBuZnNfcGFyc2VfaXB2Nl9zY29wZV9pZChjb25zdCBjaGFyICpzdHJpbmcsIGNvbnN0IHNpemVfdCBzdHJfbGVuLAotCQkJCSAgICBjb25zdCBjaGFyICpkZWxpbSwKLQkJCQkgICAgc3RydWN0IHNvY2thZGRyX2luNiAqc2luNikKK3N0YXRpYyBpbnQgbmZzX3BhcnNlX2lwdjZfc2NvcGVfaWQoY29uc3QgY2hhciAqc3RyaW5nLCBjb25zdCBzaXplX3Qgc3RyX2xlbiwKKwkJCQkgICBjb25zdCBjaGFyICpkZWxpbSwKKwkJCQkgICBzdHJ1Y3Qgc29ja2FkZHJfaW42ICpzaW42KQogewogCWNoYXIgKnA7CiAJc2l6ZV90IGxlbjsKIAotCWlmICghKGlwdjZfYWRkcl90eXBlKCZzaW42LT5zaW42X2FkZHIpICYgSVBWNl9BRERSX0xJTktMT0NBTCkpCi0JCXJldHVybiA7CisJaWYgKChzdHJpbmcgKyBzdHJfbGVuKSA9PSBkZWxpbSkKKwkJcmV0dXJuIDE7CisKIAlpZiAoKmRlbGltICE9IElQVjZfU0NPUEVfREVMSU1JVEVSKQotCQlyZXR1cm47CisJCXJldHVybiAwOworCisJaWYgKCEoaXB2Nl9hZGRyX3R5cGUoJnNpbjYtPnNpbjZfYWRkcikgJiBJUFY2X0FERFJfTElOS0xPQ0FMKSkKKwkJcmV0dXJuIDA7CiAKIAlsZW4gPSAoc3RyaW5nICsgc3RyX2xlbikgLSBkZWxpbSAtIDE7CiAJcCA9IGtzdHJuZHVwKGRlbGltICsgMSwgbGVuLCBHRlBfS0VSTkVMKTsKQEAgLTc1MCwxNCArNzQ0LDIwIEBACiAJCQlzY29wZV9pZCA9IGRldi0+aWZpbmRleDsKIAkJCWRldl9wdXQoZGV2KTsKIAkJfSBlbHNlIHsKLQkJCS8qIHNjb3BlX2lkIGlzIHNldCB0byB6ZXJvIG9uIGVycm9yICovCi0JCQlzdHJpY3Rfc3RydG91bChwLCAxMCwgJnNjb3BlX2lkKTsKKwkJCWlmIChzdHJpY3Rfc3RydG91bChwLCAxMCwgJnNjb3BlX2lkKSA9PSAwKSB7CisJCQkJa2ZyZWUocCk7CisJCQkJcmV0dXJuIDA7CisJCQl9CiAJCX0KIAogCQlrZnJlZShwKTsKKwogCQlzaW42LT5zaW42X3Njb3BlX2lkID0gc2NvcGVfaWQ7CiAJCWRmcHJpbnRrKE1PVU5ULCAiTkZTOiBJUHY2IHNjb3BlIElEID0gJWx1XG4iLCBzY29wZV9pZCk7CisJCXJldHVybiAxOwogCX0KKworCXJldHVybiAwOwogfQogCiBzdGF0aWMgdm9pZCBuZnNfcGFyc2VfaXB2Nl9hZGRyZXNzKGNoYXIgKnN0cmluZywgc2l6ZV90IHN0cl9sZW4sCkBAIC03NzMsOSArNzczLDExIEBACiAKIAkJc2luNi0+c2luNl9mYW1pbHkgPSBBRl9JTkVUNjsKIAkJKmFkZHJfbGVuID0gc2l6ZW9mKCpzaW42KTsKLQkJaWYgKGluNl9wdG9uKHN0cmluZywgc3RyX2xlbiwgYWRkciwgSVBWNl9TQ09QRV9ERUxJTUlURVIsICZkZWxpbSkpIHsKLQkJCW5mc19wYXJzZV9pcHY2X3Njb3BlX2lkKHN0cmluZywgc3RyX2xlbiwgZGVsaW0sIHNpbjYpOwotCQkJcmV0dXJuOworCQlpZiAoaW42X3B0b24oc3RyaW5nLCBzdHJfbGVuLCBhZGRyLAorCQkJCQlJUFY2X1NDT1BFX0RFTElNSVRFUiwgJmRlbGltKSAhPSAwKSB7CisJCQlpZiAobmZzX3BhcnNlX2lwdjZfc2NvcGVfaWQoc3RyaW5nLCBzdHJfbGVuLAorCQkJCQkJCWRlbGltLCBzaW42KSAhPSAwKQorCQkJCXJldHVybjsKIAkJfQogCX0KIApAQCAtNzk4LDcgKzgwMCw3IEBACiAgKiBJZiB0aGVyZSBpcyBhIHByb2JsZW0gY29uc3RydWN0aW5nIHRoZSBuZXcgc29ja2FkZHIsIHNldCB0aGUgYWRkcmVzcwogICogZmFtaWx5IHRvIEFGX1VOU1BFQy4KICAqLwotc3RhdGljIHZvaWQgbmZzX3BhcnNlX2lwX2FkZHJlc3MoY2hhciAqc3RyaW5nLCBzaXplX3Qgc3RyX2xlbiwKK3ZvaWQgbmZzX3BhcnNlX2lwX2FkZHJlc3MoY2hhciAqc3RyaW5nLCBzaXplX3Qgc3RyX2xlbiwKIAkJCQkgc3RydWN0IHNvY2thZGRyICpzYXAsIHNpemVfdCAqYWRkcl9sZW4pCiB7CiAJdW5zaWduZWQgaW50IGksIGNvbG9uczsKQEAgLTEyNTgsNiArMTI2MCwzMCBAQAogCQkJCQkgICAgICZtbnQtPm1vdW50X3NlcnZlci5hZGRybGVuKTsKIAkJCWtmcmVlKHN0cmluZyk7CiAJCQlicmVhazsKKwkJY2FzZSBPcHRfbG9va3VwY2FjaGU6CisJCQlzdHJpbmcgPSBtYXRjaF9zdHJkdXAoYXJncyk7CisJCQlpZiAoc3RyaW5nID09IE5VTEwpCisJCQkJZ290byBvdXRfbm9tZW07CisJCQl0b2tlbiA9IG1hdGNoX3Rva2VuKHN0cmluZywKKwkJCQkJbmZzX2xvb2t1cGNhY2hlX3Rva2VucywgYXJncyk7CisJCQlrZnJlZShzdHJpbmcpOworCQkJc3dpdGNoICh0b2tlbikgeworCQkJCWNhc2UgT3B0X2xvb2t1cGNhY2hlX2FsbDoKKwkJCQkJbW50LT5mbGFncyAmPSB+KE5GU19NT1VOVF9MT09LVVBfQ0FDSEVfTk9ORUd8TkZTX01PVU5UX0xPT0tVUF9DQUNIRV9OT05FKTsKKwkJCQkJYnJlYWs7CisJCQkJY2FzZSBPcHRfbG9va3VwY2FjaGVfcG9zaXRpdmU6CisJCQkJCW1udC0+ZmxhZ3MgJj0gfk5GU19NT1VOVF9MT09LVVBfQ0FDSEVfTk9ORTsKKwkJCQkJbW50LT5mbGFncyB8PSBORlNfTU9VTlRfTE9PS1VQX0NBQ0hFX05PTkVHOworCQkJCQlicmVhazsKKwkJCQljYXNlIE9wdF9sb29rdXBjYWNoZV9ub25lOgorCQkJCQltbnQtPmZsYWdzIHw9IE5GU19NT1VOVF9MT09LVVBfQ0FDSEVfTk9ORUd8TkZTX01PVU5UX0xPT0tVUF9DQUNIRV9OT05FOworCQkJCQlicmVhazsKKwkJCQlkZWZhdWx0OgorCQkJCQllcnJvcnMrKzsKKwkJCQkJZGZwcmludGsoTU9VTlQsICJORlM6ICAgaW52YWxpZCAiCisJCQkJCQkJImxvb2t1cGNhY2hlIGFyZ3VtZW50XG4iKTsKKwkJCX07CisJCQlicmVhazsKIAogCQkvKgogCQkgKiBTcGVjaWFsIG9wdGlvbnMKQEAgLTE1NTgsNyArMTU4NCw3IEBACiAJCSAqIFRyYW5zbGF0ZSB0byBuZnNfcGFyc2VkX21vdW50X2RhdGEsIHdoaWNoIG5mc19maWxsX3N1cGVyCiAJCSAqIGNhbiBkZWFsIHdpdGguCiAJCSAqLwotCQlhcmdzLT5mbGFncwkJPSBkYXRhLT5mbGFnczsKKwkJYXJncy0+ZmxhZ3MJCT0gZGF0YS0+ZmxhZ3MgJiBORlNfTU9VTlRfRkxBR01BU0s7CiAJCWFyZ3MtPnJzaXplCQk9IGRhdGEtPnJzaXplOwogCQlhcmdzLT53c2l6ZQkJPSBkYXRhLT53c2l6ZTsKIAkJYXJncy0+dGltZW8JCT0gZGF0YS0+dGltZW87CkBAIC0yNDMzLDcgKzI0NTksNyBAQAogCQljb21wYXJlX3N1cGVyID0gTlVMTDsKIAogCS8qIEdldCBhIHN1cGVyYmxvY2sgLSBub3RlIHRoYXQgd2UgbWF5IGVuZCB1cCBzaGFyaW5nIG9uZSB0aGF0IGFscmVhZHkgZXhpc3RzICovCi0JcyA9IHNnZXQoJm5mc19mc190eXBlLCBjb21wYXJlX3N1cGVyLCBuZnNfc2V0X3N1cGVyLCAmc2JfbW50ZGF0YSk7CisJcyA9IHNnZXQoJm5mczRfZnNfdHlwZSwgY29tcGFyZV9zdXBlciwgbmZzX3NldF9zdXBlciwgJnNiX21udGRhdGEpOwogCWlmIChJU19FUlIocykpIHsKIAkJZXJyb3IgPSBQVFJfRVJSKHMpOwogCQlnb3RvIG91dF9lcnJfbm9zYjsKQEAgLTI1MTgsNyArMjU0NCw3IEBACiAJCWNvbXBhcmVfc3VwZXIgPSBOVUxMOwogCiAJLyogR2V0IGEgc3VwZXJibG9jayAtIG5vdGUgdGhhdCB3ZSBtYXkgZW5kIHVwIHNoYXJpbmcgb25lIHRoYXQgYWxyZWFkeSBleGlzdHMgKi8KLQlzID0gc2dldCgmbmZzX2ZzX3R5cGUsIGNvbXBhcmVfc3VwZXIsIG5mc19zZXRfc3VwZXIsICZzYl9tbnRkYXRhKTsKKwlzID0gc2dldCgmbmZzNF9mc190eXBlLCBjb21wYXJlX3N1cGVyLCBuZnNfc2V0X3N1cGVyLCAmc2JfbW50ZGF0YSk7CiAJaWYgKElTX0VSUihzKSkgewogCQllcnJvciA9IFBUUl9FUlIocyk7CiAJCWdvdG8gb3V0X2Vycl9ub3NiOwpkaWZmIC0tZ2l0IGEvZnMvbmZzL3VubGluay5jIGIvZnMvbmZzL3VubGluay5jCmluZGV4IGYwODllNTguLmVjYzI5NTMgMTAwNjQ0Ci0tLSBhL2ZzL25mcy91bmxpbmsuYworKysgYi9mcy9uZnMvdW5saW5rLmMKQEAgLTk5LDcgKzk5LDcgQEAKIAogCW5mc19kZWNfc2lsbHljb3VudChkYXRhLT5kaXIpOwogCW5mc19mcmVlX3VubGlua2RhdGEoZGF0YSk7Ci0JbmZzX3NiX2RlYWN0aXZlKE5GU19TQihzYikpOworCW5mc19zYl9kZWFjdGl2ZShzYik7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcnBjX2NhbGxfb3BzIG5mc191bmxpbmtfb3BzID0gewpAQCAtMTE4LDYgKzExOCw3IEBACiAJCS5ycGNfbWVzc2FnZSA9ICZtc2csCiAJCS5jYWxsYmFja19vcHMgPSAmbmZzX3VubGlua19vcHMsCiAJCS5jYWxsYmFja19kYXRhID0gZGF0YSwKKwkJLndvcmtxdWV1ZSA9IG5mc2lvZF93b3JrcXVldWUsCiAJCS5mbGFncyA9IFJQQ19UQVNLX0FTWU5DLAogCX07CiAJc3RydWN0IHJwY190YXNrICp0YXNrOwpAQCAtMTQ5LDcgKzE1MCw3IEBACiAJCW5mc19kZWNfc2lsbHljb3VudChkaXIpOwogCQlyZXR1cm4gMDsKIAl9Ci0JbmZzX3NiX2FjdGl2ZShORlNfU0VSVkVSKGRpcikpOworCW5mc19zYl9hY3RpdmUoZGlyLT5pX3NiKTsKIAlkYXRhLT5hcmdzLmZoID0gTkZTX0ZIKGRpcik7CiAJbmZzX2ZhdHRyX2luaXQoJmRhdGEtPnJlcy5kaXJfYXR0cik7CiAKZGlmZiAtLWdpdCBhL2ZzL25mcy93cml0ZS5jIGIvZnMvbmZzL3dyaXRlLmMKaW5kZXggMzIyOWUyMS4uOWY5ODQ1OCAxMDA2NDQKLS0tIGEvZnMvbmZzL3dyaXRlLmMKKysrIGIvZnMvbmZzL3dyaXRlLmMKQEAgLTE0MjcsOCArMTQyNyw5IEBACiAJCS5iZGkgPSBtYXBwaW5nLT5iYWNraW5nX2Rldl9pbmZvLAogCQkuc3luY19tb2RlID0gV0JfU1lOQ19OT05FLAogCQkubnJfdG9fd3JpdGUgPSBMT05HX01BWCwKKwkJLnJhbmdlX3N0YXJ0ID0gMCwKKwkJLnJhbmdlX2VuZCA9IExMT05HX01BWCwKIAkJLmZvcl93cml0ZXBhZ2VzID0gMSwKLQkJLnJhbmdlX2N5Y2xpYyA9IDEsCiAJfTsKIAlpbnQgcmV0OwogCmRpZmYgLS1naXQgYS9mcy9uZnNkL2xvY2tkLmMgYi9mcy9uZnNkL2xvY2tkLmMKaW5kZXggMTVjNmZhZS4uYjI3ODZhNSAxMDA2NDQKLS0tIGEvZnMvbmZzZC9sb2NrZC5jCisrKyBiL2ZzL25mc2QvbG9ja2QuYwpAQCAtNzAsNyArNzAsNiBAQAogc3RhdGljIHN0cnVjdCBubG1zdmNfYmluZGluZwluZnNkX25sbV9vcHMgPSB7CiAJLmZvcGVuCQk9IG5sbV9mb3BlbiwJCS8qIG9wZW4gZmlsZSBmb3IgbG9ja2luZyAqLwogCS5mY2xvc2UJCT0gbmxtX2ZjbG9zZSwJCS8qIGNsb3NlIGZpbGUgKi8KLQkuZ2V0X2dyYWNlX3BlcmlvZCA9IGdldF9uZnM0X2dyYWNlX3BlcmlvZCwKIH07CiAKIHZvaWQKZGlmZiAtLWdpdCBhL2ZzL25mc2QvbmZzM3Byb2MuYyBiL2ZzL25mc2QvbmZzM3Byb2MuYwppbmRleCA0ZDYxN2VhLi45ZGJkMmViIDEwMDY0NAotLS0gYS9mcy9uZnNkL25mczNwcm9jLmMKKysrIGIvZnMvbmZzZC9uZnMzcHJvYy5jCkBAIC02Myw3ICs2Myw4IEBACiAJCVNWQ0ZIX2ZtdCgmYXJncC0+ZmgpKTsKIAogCWZoX2NvcHkoJnJlc3AtPmZoLCAmYXJncC0+ZmgpOwotCW5mc2VyciA9IGZoX3ZlcmlmeShycXN0cCwgJnJlc3AtPmZoLCAwLCBORlNEX01BWV9OT1ApOworCW5mc2VyciA9IGZoX3ZlcmlmeShycXN0cCwgJnJlc3AtPmZoLCAwLAorCQkJTkZTRF9NQVlfTk9QIHwgTkZTRF9NQVlfQllQQVNTX0dTU19PTl9ST09UKTsKIAlpZiAobmZzZXJyKQogCQlSRVRVUk5fU1RBVFVTKG5mc2Vycik7CiAKQEAgLTUzMCw3ICs1MzEsNyBAQAogCWRwcmludGsoIm5mc2Q6IEZTU1RBVCgzKSAgICVzXG4iLAogCQkJCVNWQ0ZIX2ZtdCgmYXJncC0+ZmgpKTsKIAotCW5mc2VyciA9IG5mc2Rfc3RhdGZzKHJxc3RwLCAmYXJncC0+ZmgsICZyZXNwLT5zdGF0cyk7CisJbmZzZXJyID0gbmZzZF9zdGF0ZnMocnFzdHAsICZhcmdwLT5maCwgJnJlc3AtPnN0YXRzLCAwKTsKIAlmaF9wdXQoJmFyZ3AtPmZoKTsKIAlSRVRVUk5fU1RBVFVTKG5mc2Vycik7CiB9CkBAIC01NTgsNyArNTU5LDggQEAKIAlyZXNwLT5mX21heGZpbGVzaXplID0gfih1MzIpIDA7CiAJcmVzcC0+Zl9wcm9wZXJ0aWVzID0gTkZTM19GU0ZfREVGQVVMVDsKIAotCW5mc2VyciA9IGZoX3ZlcmlmeShycXN0cCwgJmFyZ3AtPmZoLCAwLCBORlNEX01BWV9OT1ApOworCW5mc2VyciA9IGZoX3ZlcmlmeShycXN0cCwgJmFyZ3AtPmZoLCAwLAorCQkJTkZTRF9NQVlfTk9QIHwgTkZTRF9NQVlfQllQQVNTX0dTU19PTl9ST09UKTsKIAogCS8qIENoZWNrIHNwZWNpYWwgZmVhdHVyZXMgb2YgdGhlIGZpbGUgc3lzdGVtLiBNYXkgcmVxdWVzdAogCSAqIGRpZmZlcmVudCByZWFkL3dyaXRlIHNpemVzIGZvciBmaWxlIHN5c3RlbXMga25vd24gdG8gaGF2ZQpkaWZmIC0tZ2l0IGEvZnMvbmZzZC9uZnM0Y2FsbGJhY2suYyBiL2ZzL25mc2QvbmZzNGNhbGxiYWNrLmMKaW5kZXggNzAyZmE1Ny4uMDk0NzQ3YSAxMDA2NDQKLS0tIGEvZnMvbmZzZC9uZnM0Y2FsbGJhY2suYworKysgYi9mcy9uZnNkL25mczRjYWxsYmFjay5jCkBAIC0yMjUsNyArMjI1LDggQEAKIAogCVJFU0VSVkVfU1BBQ0UoMTIrc2l6ZW9mKGNiX3JlYy0+Y2JyX3N0YXRlaWQpICsgbGVuKTsKIAlXUklURTMyKE9QX0NCX1JFQ0FMTCk7Ci0JV1JJVEVNRU0oJmNiX3JlYy0+Y2JyX3N0YXRlaWQsIHNpemVvZihzdGF0ZWlkX3QpKTsKKwlXUklURTMyKGNiX3JlYy0+Y2JyX3N0YXRlaWQuc2lfZ2VuZXJhdGlvbik7CisJV1JJVEVNRU0oJmNiX3JlYy0+Y2JyX3N0YXRlaWQuc2lfb3BhcXVlLCBzaXplb2Yoc3RhdGVpZF9vcGFxdWVfdCkpOwogCVdSSVRFMzIoY2JfcmVjLT5jYnJfdHJ1bmMpOwogCVdSSVRFMzIobGVuKTsKIAlXUklURU1FTShjYl9yZWMtPmNicl9maHZhbCwgbGVuKTsKQEAgLTM3OSw2ICszODAsNyBAQAogCQkuYWRkcnNpemUJPSBzaXplb2YoYWRkciksCiAJCS50aW1lb3V0CT0gJnRpbWVwYXJtcywKIAkJLnByb2dyYW0JPSAmY2JfcHJvZ3JhbSwKKwkJLnByb2dudW1iZXIJPSBjYi0+Y2JfcHJvZywKIAkJLnZlcnNpb24JPSBuZnNfY2JfdmVyc2lvblsxXS0+bnVtYmVyLAogCQkuYXV0aGZsYXZvcgk9IFJQQ19BVVRIX1VOSVgsIC8qIFhYWDogbmVlZCBBVVRIX0dTUy4uLiAqLwogCQkuZmxhZ3MJCT0gKFJQQ19DTE5UX0NSRUFURV9OT1BJTkcgfCBSUENfQ0xOVF9DUkVBVEVfUVVJRVQpLApAQCAtMzk2LDkgKzM5OCw2IEBACiAJYWRkci5zaW5fcG9ydCA9IGh0b25zKGNiLT5jYl9wb3J0KTsKIAlhZGRyLnNpbl9hZGRyLnNfYWRkciA9IGh0b25sKGNiLT5jYl9hZGRyKTsKIAotCS8qIEluaXRpYWxpemUgcnBjX3N0YXQgKi8KLQltZW1zZXQoYXJncy5wcm9ncmFtLT5zdGF0cywgMCwgc2l6ZW9mKHN0cnVjdCBycGNfc3RhdCkpOwotCiAJLyogQ3JlYXRlIFJQQyBjbGllbnQgKi8KIAljbGllbnQgPSBycGNfY3JlYXRlKCZhcmdzKTsKIAlpZiAoSVNfRVJSKGNsaWVudCkpIHsKZGlmZiAtLWdpdCBhL2ZzL25mc2QvbmZzNHByb2MuYyBiL2ZzL25mc2QvbmZzNHByb2MuYwppbmRleCBlNWI1MWZmLi42Njk0NjFlIDEwMDY0NAotLS0gYS9mcy9uZnNkL25mczRwcm9jLmMKKysrIGIvZnMvbmZzZC9uZnM0cHJvYy5jCkBAIC0yMDEsMTAgKzIwMSwxMCBAQAogCS8qIE9wZW5vd25lciBpcyBub3cgc2V0LCBzbyBzZXF1ZW5jZSBpZCB3aWxsIGdldCBidW1wZWQuICBOb3cgd2UgbmVlZAogCSAqIHRoZXNlIGNoZWNrcyBiZWZvcmUgd2UgZG8gYW55IGNyZWF0ZXM6ICovCiAJc3RhdHVzID0gbmZzZXJyX2dyYWNlOwotCWlmIChuZnM0X2luX2dyYWNlKCkgJiYgb3Blbi0+b3BfY2xhaW1fdHlwZSAhPSBORlM0X09QRU5fQ0xBSU1fUFJFVklPVVMpCisJaWYgKGxvY2tzX2luX2dyYWNlKCkgJiYgb3Blbi0+b3BfY2xhaW1fdHlwZSAhPSBORlM0X09QRU5fQ0xBSU1fUFJFVklPVVMpCiAJCWdvdG8gb3V0OwogCXN0YXR1cyA9IG5mc2Vycl9ub19ncmFjZTsKLQlpZiAoIW5mczRfaW5fZ3JhY2UoKSAmJiBvcGVuLT5vcF9jbGFpbV90eXBlID09IE5GUzRfT1BFTl9DTEFJTV9QUkVWSU9VUykKKwlpZiAoIWxvY2tzX2luX2dyYWNlKCkgJiYgb3Blbi0+b3BfY2xhaW1fdHlwZSA9PSBORlM0X09QRU5fQ0xBSU1fUFJFVklPVVMpCiAJCWdvdG8gb3V0OwogCiAJc3dpdGNoIChvcGVuLT5vcF9jbGFpbV90eXBlKSB7CkBAIC01NzUsNyArNTc1LDcgQEAKIHsKIAlfX2JlMzIgc3RhdHVzOwogCi0JaWYgKG5mczRfaW5fZ3JhY2UoKSkKKwlpZiAobG9ja3NfaW5fZ3JhY2UoKSkKIAkJcmV0dXJuIG5mc2Vycl9ncmFjZTsKIAlzdGF0dXMgPSBuZnNkX3VubGluayhycXN0cCwgJmNzdGF0ZS0+Y3VycmVudF9maCwgMCwKIAkJCSAgICAgcmVtb3ZlLT5ybV9uYW1lLCByZW1vdmUtPnJtX25hbWVsZW4pOwpAQCAtNTk2LDcgKzU5Niw3IEBACiAKIAlpZiAoIWNzdGF0ZS0+c2F2ZV9maC5maF9kZW50cnkpCiAJCXJldHVybiBzdGF0dXM7Ci0JaWYgKG5mczRfaW5fZ3JhY2UoKSAmJiAhKGNzdGF0ZS0+c2F2ZV9maC5maF9leHBvcnQtPmV4X2ZsYWdzCisJaWYgKGxvY2tzX2luX2dyYWNlKCkgJiYgIShjc3RhdGUtPnNhdmVfZmguZmhfZXhwb3J0LT5leF9mbGFncwogCQkJCQkmIE5GU0VYUF9OT1NVQlRSRUVDSEVDSykpCiAJCXJldHVybiBuZnNlcnJfZ3JhY2U7CiAJc3RhdHVzID0gbmZzZF9yZW5hbWUocnFzdHAsICZjc3RhdGUtPnNhdmVfZmgsIHJlbmFtZS0+cm5fc25hbWUsCmRpZmYgLS1naXQgYS9mcy9uZnNkL25mczRzdGF0ZS5jIGIvZnMvbmZzZC9uZnM0c3RhdGUuYwppbmRleCAxNTc4ZDdhLi4wY2M3ZmY1IDEwMDY0NAotLS0gYS9mcy9uZnNkL25mczRzdGF0ZS5jCisrKyBiL2ZzL25mc2QvbmZzNHN0YXRlLmMKQEAgLTYxLDcgKzYxLDYgQEAKIHN0YXRpYyB0aW1lX3QgbGVhc2VfdGltZSA9IDkwOyAgICAgLyogZGVmYXVsdCBsZWFzZSB0aW1lICovCiBzdGF0aWMgdGltZV90IHVzZXJfbGVhc2VfdGltZSA9IDkwOwogc3RhdGljIHRpbWVfdCBib290X3RpbWU7Ci1zdGF0aWMgaW50IGluX2dyYWNlID0gMTsKIHN0YXRpYyB1MzIgY3VycmVudF9vd25lcmlkID0gMTsKIHN0YXRpYyB1MzIgY3VycmVudF9maWxlaWQgPSAxOwogc3RhdGljIHUzMiBjdXJyZW50X2RlbGVnaWQgPSAxOwpAQCAtMTY0MCw3ICsxNjM5LDcgQEAKIAkJY2FzZSBORlM0X09QRU5fQ0xBSU1fTlVMTDoKIAkJCS8qIExldCdzIG5vdCBnaXZlIG91dCBhbnkgZGVsZWdhdGlvbnMgdGlsbCBldmVyeW9uZSdzCiAJCQkgKiBoYWQgdGhlIGNoYW5jZSB0byByZWNsYWltIHRoZWlycy4uLi4gKi8KLQkJCWlmIChuZnM0X2luX2dyYWNlKCkpCisJCQlpZiAobG9ja3NfaW5fZ3JhY2UoKSkKIAkJCQlnb3RvIG91dDsKIAkJCWlmICghYXRvbWljX3JlYWQoJmNiLT5jYl9zZXQpIHx8ICFzb3AtPnNvX2NvbmZpcm1lZCkKIAkJCQlnb3RvIG91dDsKQEAgLTE4MTYsMTIgKzE4MTUsMTUgQEAKIAlyZXR1cm4gc3RhdHVzOwogfQogCitzdHJ1Y3QgbG9ja19tYW5hZ2VyIG5mc2Q0X21hbmFnZXIgPSB7Cit9OworCiBzdGF0aWMgdm9pZAotZW5kX2dyYWNlKHZvaWQpCituZnNkNF9lbmRfZ3JhY2Uodm9pZCkKIHsKIAlkcHJpbnRrKCJORlNEOiBlbmQgb2YgZ3JhY2UgcGVyaW9kXG4iKTsKIAluZnNkNF9yZWNkaXJfcHVyZ2Vfb2xkKCk7Ci0JaW5fZ3JhY2UgPSAwOworCWxvY2tzX2VuZF9ncmFjZSgmbmZzZDRfbWFuYWdlcik7CiB9CiAKIHN0YXRpYyB0aW1lX3QKQEAgLTE4MzgsOCArMTg0MCw4IEBACiAJbmZzNF9sb2NrX3N0YXRlKCk7CiAKIAlkcHJpbnRrKCJORlNEOiBsYXVuZHJvbWF0IHNlcnZpY2UgLSBzdGFydGluZ1xuIik7Ci0JaWYgKGluX2dyYWNlKQotCQllbmRfZ3JhY2UoKTsKKwlpZiAobG9ja3NfaW5fZ3JhY2UoKSkKKwkJbmZzZDRfZW5kX2dyYWNlKCk7CiAJbGlzdF9mb3JfZWFjaF9zYWZlKHBvcywgbmV4dCwgJmNsaWVudF9scnUpIHsKIAkJY2xwID0gbGlzdF9lbnRyeShwb3MsIHN0cnVjdCBuZnM0X2NsaWVudCwgY2xfbHJ1KTsKIAkJaWYgKHRpbWVfYWZ0ZXIoKHVuc2lnbmVkIGxvbmcpY2xwLT5jbF90aW1lLCAodW5zaWduZWQgbG9uZyljdXRvZmYpKSB7CkBAIC0xOTc0LDcgKzE5NzYsNyBAQAogCQlyZXR1cm4gbmZzZXJyX2JhZF9zdGF0ZWlkOwogCWVsc2UgaWYgKE9ORV9TVEFURUlEKHN0YXRlaWQpICYmIChmbGFncyAmIFJEX1NUQVRFKSkKIAkJcmV0dXJuIG5mc19vazsKLQllbHNlIGlmIChuZnM0X2luX2dyYWNlKCkpIHsKKwllbHNlIGlmIChsb2Nrc19pbl9ncmFjZSgpKSB7CiAJCS8qIEFuc3dlciBpbiByZW1haW5pbmcgY2FzZXMgZGVwZW5kcyBvbiBleGlzdGFuY2Ugb2YKIAkJICogY29uZmxpY3Rpbmcgc3RhdGU7IHNvIHdlIG11c3Qgd2FpdCBvdXQgdGhlIGdyYWNlIHBlcmlvZC4gKi8KIAkJcmV0dXJuIG5mc2Vycl9ncmFjZTsKQEAgLTE5OTMsNyArMTk5NSw3IEBACiBzdGF0aWMgaW5saW5lIGludAogaW9fZHVyaW5nX2dyYWNlX2Rpc2FsbG93ZWQoc3RydWN0IGlub2RlICppbm9kZSwgaW50IGZsYWdzKQogewotCXJldHVybiBuZnM0X2luX2dyYWNlKCkgJiYgKGZsYWdzICYgKFJEX1NUQVRFIHwgV1JfU1RBVEUpKQorCXJldHVybiBsb2Nrc19pbl9ncmFjZSgpICYmIChmbGFncyAmIChSRF9TVEFURSB8IFdSX1NUQVRFKSkKIAkJJiYgbWFuZGF0b3J5X2xvY2soaW5vZGUpOwogfQogCkBAIC0yNjkzLDEwICsyNjk1LDEwIEBACiAJZmlscCA9IGxvY2tfc3RwLT5zdF92ZnNfZmlsZTsKIAogCXN0YXR1cyA9IG5mc2Vycl9ncmFjZTsKLQlpZiAobmZzNF9pbl9ncmFjZSgpICYmICFsb2NrLT5sa19yZWNsYWltKQorCWlmIChsb2Nrc19pbl9ncmFjZSgpICYmICFsb2NrLT5sa19yZWNsYWltKQogCQlnb3RvIG91dDsKIAlzdGF0dXMgPSBuZnNlcnJfbm9fZ3JhY2U7Ci0JaWYgKCFuZnM0X2luX2dyYWNlKCkgJiYgbG9jay0+bGtfcmVjbGFpbSkKKwlpZiAoIWxvY2tzX2luX2dyYWNlKCkgJiYgbG9jay0+bGtfcmVjbGFpbSkKIAkJZ290byBvdXQ7CiAKIAlsb2Nrc19pbml0X2xvY2soJmZpbGVfbG9jayk7CkBAIC0yNzc5LDcgKzI3ODEsNyBAQAogCWludCBlcnJvcjsKIAlfX2JlMzIgc3RhdHVzOwogCi0JaWYgKG5mczRfaW5fZ3JhY2UoKSkKKwlpZiAobG9ja3NfaW5fZ3JhY2UoKSkKIAkJcmV0dXJuIG5mc2Vycl9ncmFjZTsKIAogCWlmIChjaGVja19sb2NrX2xlbmd0aChsb2NrdC0+bHRfb2Zmc2V0LCBsb2NrdC0+bHRfbGVuZ3RoKSkKQEAgLTMxOTIsOSArMzE5NCw5IEBACiAJdW5zaWduZWQgbG9uZyBncmFjZV90aW1lOwogCiAJYm9vdF90aW1lID0gZ2V0X3NlY29uZHMoKTsKLQlncmFjZV90aW1lID0gZ2V0X25mc19ncmFjZV9wZXJpb2QoKTsKKwlncmFjZV90aW1lID0gZ2V0X25mczRfZ3JhY2VfcGVyaW9kKCk7CiAJbGVhc2VfdGltZSA9IHVzZXJfbGVhc2VfdGltZTsKLQlpbl9ncmFjZSA9IDE7CisJbG9ja3Nfc3RhcnRfZ3JhY2UoJm5mc2Q0X21hbmFnZXIpOwogCXByaW50ayhLRVJOX0lORk8gIk5GU0Q6IHN0YXJ0aW5nICVsZC1zZWNvbmQgZ3JhY2UgcGVyaW9kXG4iLAogCSAgICAgICBncmFjZV90aW1lL0haKTsKIAlsYXVuZHJ5X3dxID0gY3JlYXRlX3NpbmdsZXRocmVhZF93b3JrcXVldWUoIm5mc2Q0Iik7CkBAIC0zMjEzLDEyICszMjE1LDYgQEAKIAlyZXR1cm47CiB9CiAKLWludAotbmZzNF9pbl9ncmFjZSh2b2lkKQotewotCXJldHVybiBpbl9ncmFjZTsKLX0KLQogdGltZV90CiBuZnM0X2xlYXNlX3RpbWUodm9pZCkKIHsKZGlmZiAtLWdpdCBhL2ZzL25mc2QvbmZzNHhkci5jIGIvZnMvbmZzZC9uZnM0eGRyLmMKaW5kZXggMTRiYTRkOS4uYWZjZGY0YiAxMDA2NDQKLS0tIGEvZnMvbmZzZC9uZnM0eGRyLmMKKysrIGIvZnMvbmZzZC9uZnM0eGRyLmMKQEAgLTQxMyw2ICs0MTMsMTggQEAKIH0KIAogc3RhdGljIF9fYmUzMgorbmZzZDRfZGVjb2RlX3N0YXRlaWQoc3RydWN0IG5mc2Q0X2NvbXBvdW5kYXJncyAqYXJncCwgc3RhdGVpZF90ICpzaWQpCit7CisJREVDT0RFX0hFQUQ7CisKKwlSRUFEX0JVRihzaXplb2Yoc3RhdGVpZF90KSk7CisJUkVBRDMyKHNpZC0+c2lfZ2VuZXJhdGlvbik7CisJQ09QWU1FTSgmc2lkLT5zaV9vcGFxdWUsIHNpemVvZihzdGF0ZWlkX29wYXF1ZV90KSk7CisKKwlERUNPREVfVEFJTDsKK30KKworc3RhdGljIF9fYmUzMgogbmZzZDRfZGVjb2RlX2FjY2VzcyhzdHJ1Y3QgbmZzZDRfY29tcG91bmRhcmdzICphcmdwLCBzdHJ1Y3QgbmZzZDRfYWNjZXNzICphY2Nlc3MpCiB7CiAJREVDT0RFX0hFQUQ7CkBAIC00MjksMTAgKzQ0MSw5IEBACiAJREVDT0RFX0hFQUQ7CiAKIAljbG9zZS0+Y2xfc3RhdGVvd25lciA9IE5VTEw7Ci0JUkVBRF9CVUYoNCArIHNpemVvZihzdGF0ZWlkX3QpKTsKKwlSRUFEX0JVRig0KTsKIAlSRUFEMzIoY2xvc2UtPmNsX3NlcWlkKTsKLQlSRUFEMzIoY2xvc2UtPmNsX3N0YXRlaWQuc2lfZ2VuZXJhdGlvbik7Ci0JQ09QWU1FTSgmY2xvc2UtPmNsX3N0YXRlaWQuc2lfb3BhcXVlLCBzaXplb2Yoc3RhdGVpZF9vcGFxdWVfdCkpOworCXJldHVybiBuZnNkNF9kZWNvZGVfc3RhdGVpZChhcmdwLCAmY2xvc2UtPmNsX3N0YXRlaWQpOwogCiAJREVDT0RFX1RBSUw7CiB9CkBAIC00OTMsMTMgKzUwNCw3IEBACiBzdGF0aWMgaW5saW5lIF9fYmUzMgogbmZzZDRfZGVjb2RlX2RlbGVncmV0dXJuKHN0cnVjdCBuZnNkNF9jb21wb3VuZGFyZ3MgKmFyZ3AsIHN0cnVjdCBuZnNkNF9kZWxlZ3JldHVybiAqZHIpCiB7Ci0JREVDT0RFX0hFQUQ7Ci0KLQlSRUFEX0JVRihzaXplb2Yoc3RhdGVpZF90KSk7Ci0JUkVBRDMyKGRyLT5kcl9zdGF0ZWlkLnNpX2dlbmVyYXRpb24pOwotCUNPUFlNRU0oJmRyLT5kcl9zdGF0ZWlkLnNpX29wYXF1ZSwgc2l6ZW9mKHN0YXRlaWRfb3BhcXVlX3QpKTsKLQotCURFQ09ERV9UQUlMOworCXJldHVybiBuZnNkNF9kZWNvZGVfc3RhdGVpZChhcmdwLCAmZHItPmRyX3N0YXRlaWQpOwogfQogCiBzdGF0aWMgaW5saW5lIF9fYmUzMgpAQCAtNTQyLDIwICs1NDcsMjIgQEAKIAlSRUFEMzIobG9jay0+bGtfaXNfbmV3KTsKIAogCWlmIChsb2NrLT5sa19pc19uZXcpIHsKLQkJUkVBRF9CVUYoMzYpOworCQlSRUFEX0JVRig0KTsKIAkJUkVBRDMyKGxvY2stPmxrX25ld19vcGVuX3NlcWlkKTsKLQkJUkVBRDMyKGxvY2stPmxrX25ld19vcGVuX3N0YXRlaWQuc2lfZ2VuZXJhdGlvbik7Ci0KLQkJQ09QWU1FTSgmbG9jay0+bGtfbmV3X29wZW5fc3RhdGVpZC5zaV9vcGFxdWUsIHNpemVvZihzdGF0ZWlkX29wYXF1ZV90KSk7CisJCXN0YXR1cyA9IG5mc2Q0X2RlY29kZV9zdGF0ZWlkKGFyZ3AsICZsb2NrLT5sa19uZXdfb3Blbl9zdGF0ZWlkKTsKKwkJaWYgKHN0YXR1cykKKwkJCXJldHVybiBzdGF0dXM7CisJCVJFQURfQlVGKDggKyBzaXplb2YoY2xpZW50aWRfdCkpOwogCQlSRUFEMzIobG9jay0+bGtfbmV3X2xvY2tfc2VxaWQpOwogCQlDT1BZTUVNKCZsb2NrLT5sa19uZXdfY2xpZW50aWQsIHNpemVvZihjbGllbnRpZF90KSk7CiAJCVJFQUQzMihsb2NrLT5sa19uZXdfb3duZXIubGVuKTsKIAkJUkVBRF9CVUYobG9jay0+bGtfbmV3X293bmVyLmxlbik7CiAJCVJFQURNRU0obG9jay0+bGtfbmV3X293bmVyLmRhdGEsIGxvY2stPmxrX25ld19vd25lci5sZW4pOwogCX0gZWxzZSB7Ci0JCVJFQURfQlVGKDIwKTsKLQkJUkVBRDMyKGxvY2stPmxrX29sZF9sb2NrX3N0YXRlaWQuc2lfZ2VuZXJhdGlvbik7Ci0JCUNPUFlNRU0oJmxvY2stPmxrX29sZF9sb2NrX3N0YXRlaWQuc2lfb3BhcXVlLCBzaXplb2Yoc3RhdGVpZF9vcGFxdWVfdCkpOworCQlzdGF0dXMgPSBuZnNkNF9kZWNvZGVfc3RhdGVpZChhcmdwLCAmbG9jay0+bGtfb2xkX2xvY2tfc3RhdGVpZCk7CisJCWlmIChzdGF0dXMpCisJCQlyZXR1cm4gc3RhdHVzOworCQlSRUFEX0JVRig0KTsKIAkJUkVBRDMyKGxvY2stPmxrX29sZF9sb2NrX3NlcWlkKTsKIAl9CiAKQEAgLTU4NywxMyArNTk0LDE1IEBACiAJREVDT0RFX0hFQUQ7CiAKIAlsb2NrdS0+bHVfc3RhdGVvd25lciA9IE5VTEw7Ci0JUkVBRF9CVUYoMjQgKyBzaXplb2Yoc3RhdGVpZF90KSk7CisJUkVBRF9CVUYoOCk7CiAJUkVBRDMyKGxvY2t1LT5sdV90eXBlKTsKIAlpZiAoKGxvY2t1LT5sdV90eXBlIDwgTkZTNF9SRUFEX0xUKSB8fCAobG9ja3UtPmx1X3R5cGUgPiBORlM0X1dSSVRFV19MVCkpCiAJCWdvdG8geGRyX2Vycm9yOwogCVJFQUQzMihsb2NrdS0+bHVfc2VxaWQpOwotCVJFQUQzMihsb2NrdS0+bHVfc3RhdGVpZC5zaV9nZW5lcmF0aW9uKTsKLQlDT1BZTUVNKCZsb2NrdS0+bHVfc3RhdGVpZC5zaV9vcGFxdWUsIHNpemVvZihzdGF0ZWlkX29wYXF1ZV90KSk7CisJc3RhdHVzID0gbmZzZDRfZGVjb2RlX3N0YXRlaWQoYXJncCwgJmxvY2t1LT5sdV9zdGF0ZWlkKTsKKwlpZiAoc3RhdHVzKQorCQlyZXR1cm4gc3RhdHVzOworCVJFQURfQlVGKDE2KTsKIAlSRUFENjQobG9ja3UtPmx1X29mZnNldCk7CiAJUkVBRDY0KGxvY2t1LT5sdV9sZW5ndGgpOwogCkBAIC02NzgsOCArNjg3LDEwIEBACiAJCVJFQUQzMihvcGVuLT5vcF9kZWxlZ2F0ZV90eXBlKTsKIAkJYnJlYWs7CiAJY2FzZSBORlM0X09QRU5fQ0xBSU1fREVMRUdBVEVfQ1VSOgotCQlSRUFEX0JVRihzaXplb2Yoc3RhdGVpZF90KSArIDQpOwotCQlDT1BZTUVNKCZvcGVuLT5vcF9kZWxlZ2F0ZV9zdGF0ZWlkLCBzaXplb2Yoc3RhdGVpZF90KSk7CisJCXN0YXR1cyA9IG5mc2Q0X2RlY29kZV9zdGF0ZWlkKGFyZ3AsICZvcGVuLT5vcF9kZWxlZ2F0ZV9zdGF0ZWlkKTsKKwkJaWYgKHN0YXR1cykKKwkJCXJldHVybiBzdGF0dXM7CisJCVJFQURfQlVGKDQpOwogCQlSRUFEMzIob3Blbi0+b3BfZm5hbWUubGVuKTsKIAkJUkVBRF9CVUYob3Blbi0+b3BfZm5hbWUubGVuKTsKIAkJU0FWRU1FTShvcGVuLT5vcF9mbmFtZS5kYXRhLCBvcGVuLT5vcF9mbmFtZS5sZW4pOwpAQCAtNjk5LDkgKzcxMCwxMCBAQAogCURFQ09ERV9IRUFEOwogCQkgICAgCiAJb3Blbl9jb25mLT5vY19zdGF0ZW93bmVyID0gTlVMTDsKLQlSRUFEX0JVRig0ICsgc2l6ZW9mKHN0YXRlaWRfdCkpOwotCVJFQUQzMihvcGVuX2NvbmYtPm9jX3JlcV9zdGF0ZWlkLnNpX2dlbmVyYXRpb24pOwotCUNPUFlNRU0oJm9wZW5fY29uZi0+b2NfcmVxX3N0YXRlaWQuc2lfb3BhcXVlLCBzaXplb2Yoc3RhdGVpZF9vcGFxdWVfdCkpOworCXN0YXR1cyA9IG5mc2Q0X2RlY29kZV9zdGF0ZWlkKGFyZ3AsICZvcGVuX2NvbmYtPm9jX3JlcV9zdGF0ZWlkKTsKKwlpZiAoc3RhdHVzKQorCQlyZXR1cm4gc3RhdHVzOworCVJFQURfQlVGKDQpOwogCVJFQUQzMihvcGVuX2NvbmYtPm9jX3NlcWlkKTsKIAkJCQkJCSAgICAgICAgCiAJREVDT0RFX1RBSUw7CkBAIC03MTMsOSArNzI1LDEwIEBACiAJREVDT0RFX0hFQUQ7CiAJCSAgICAKIAlvcGVuX2Rvd24tPm9kX3N0YXRlb3duZXIgPSBOVUxMOwotCVJFQURfQlVGKDEyICsgc2l6ZW9mKHN0YXRlaWRfdCkpOwotCVJFQUQzMihvcGVuX2Rvd24tPm9kX3N0YXRlaWQuc2lfZ2VuZXJhdGlvbik7Ci0JQ09QWU1FTSgmb3Blbl9kb3duLT5vZF9zdGF0ZWlkLnNpX29wYXF1ZSwgc2l6ZW9mKHN0YXRlaWRfb3BhcXVlX3QpKTsKKwlzdGF0dXMgPSBuZnNkNF9kZWNvZGVfc3RhdGVpZChhcmdwLCAmb3Blbl9kb3duLT5vZF9zdGF0ZWlkKTsKKwlpZiAoc3RhdHVzKQorCQlyZXR1cm4gc3RhdHVzOworCVJFQURfQlVGKDEyKTsKIAlSRUFEMzIob3Blbl9kb3duLT5vZF9zZXFpZCk7CiAJUkVBRDMyKG9wZW5fZG93bi0+b2Rfc2hhcmVfYWNjZXNzKTsKIAlSRUFEMzIob3Blbl9kb3duLT5vZF9zaGFyZV9kZW55KTsKQEAgLTc0Myw5ICs3NTYsMTAgQEAKIHsKIAlERUNPREVfSEVBRDsKIAotCVJFQURfQlVGKHNpemVvZihzdGF0ZWlkX3QpICsgMTIpOwotCVJFQUQzMihyZWFkLT5yZF9zdGF0ZWlkLnNpX2dlbmVyYXRpb24pOwotCUNPUFlNRU0oJnJlYWQtPnJkX3N0YXRlaWQuc2lfb3BhcXVlLCBzaXplb2Yoc3RhdGVpZF9vcGFxdWVfdCkpOworCXN0YXR1cyA9IG5mc2Q0X2RlY29kZV9zdGF0ZWlkKGFyZ3AsICZyZWFkLT5yZF9zdGF0ZWlkKTsKKwlpZiAoc3RhdHVzKQorCQlyZXR1cm4gc3RhdHVzOworCVJFQURfQlVGKDEyKTsKIAlSRUFENjQocmVhZC0+cmRfb2Zmc2V0KTsKIAlSRUFEMzIocmVhZC0+cmRfbGVuZ3RoKTsKIApAQCAtODM0LDE1ICs4NDgsMTMgQEAKIHN0YXRpYyBfX2JlMzIKIG5mc2Q0X2RlY29kZV9zZXRhdHRyKHN0cnVjdCBuZnNkNF9jb21wb3VuZGFyZ3MgKmFyZ3AsIHN0cnVjdCBuZnNkNF9zZXRhdHRyICpzZXRhdHRyKQogewotCURFQ09ERV9IRUFEOworCV9fYmUzMiBzdGF0dXM7CiAKLQlSRUFEX0JVRihzaXplb2Yoc3RhdGVpZF90KSk7Ci0JUkVBRDMyKHNldGF0dHItPnNhX3N0YXRlaWQuc2lfZ2VuZXJhdGlvbik7Ci0JQ09QWU1FTSgmc2V0YXR0ci0+c2Ffc3RhdGVpZC5zaV9vcGFxdWUsIHNpemVvZihzdGF0ZWlkX29wYXF1ZV90KSk7Ci0JaWYgKChzdGF0dXMgPSBuZnNkNF9kZWNvZGVfZmF0dHIoYXJncCwgc2V0YXR0ci0+c2FfYm12YWwsICZzZXRhdHRyLT5zYV9pYXR0ciwgJnNldGF0dHItPnNhX2FjbCkpKQotCQlnb3RvIG91dDsKLQotCURFQ09ERV9UQUlMOworCXN0YXR1cyA9IG5mc2Q0X2RlY29kZV9zdGF0ZWlkKGFyZ3AsICZzZXRhdHRyLT5zYV9zdGF0ZWlkKTsKKwlpZiAoc3RhdHVzKQorCQlyZXR1cm4gc3RhdHVzOworCXJldHVybiBuZnNkNF9kZWNvZGVfZmF0dHIoYXJncCwgc2V0YXR0ci0+c2FfYm12YWwsCisJCQkJICAmc2V0YXR0ci0+c2FfaWF0dHIsICZzZXRhdHRyLT5zYV9hY2wpOwogfQogCiBzdGF0aWMgX19iZTMyCkBAIC05MjcsOSArOTM5LDEwIEBACiAJaW50IGxlbjsKIAlERUNPREVfSEVBRDsKIAotCVJFQURfQlVGKHNpemVvZihzdGF0ZWlkX29wYXF1ZV90KSArIDIwKTsKLQlSRUFEMzIod3JpdGUtPndyX3N0YXRlaWQuc2lfZ2VuZXJhdGlvbik7Ci0JQ09QWU1FTSgmd3JpdGUtPndyX3N0YXRlaWQuc2lfb3BhcXVlLCBzaXplb2Yoc3RhdGVpZF9vcGFxdWVfdCkpOworCXN0YXR1cyA9IG5mc2Q0X2RlY29kZV9zdGF0ZWlkKGFyZ3AsICZ3cml0ZS0+d3Jfc3RhdGVpZCk7CisJaWYgKHN0YXR1cykKKwkJcmV0dXJuIHN0YXR1czsKKwlSRUFEX0JVRigxNik7CiAJUkVBRDY0KHdyaXRlLT53cl9vZmZzZXQpOwogCVJFQUQzMih3cml0ZS0+d3Jfc3RhYmxlX2hvdyk7CiAJaWYgKHdyaXRlLT53cl9zdGFibGVfaG93ID4gMikKQEAgLTExODMsNyArMTE5Niw2IEBACiAgKiBIZWFkZXIgcm91dGluZSB0byBzZXR1cCBzZXFpZCBvcGVyYXRpb24gcmVwbGF5IGNhY2hlCiAgKi8KICNkZWZpbmUgRU5DT0RFX1NFUUlEX09QX0hFQUQJCQkJCVwKLQlfX2JlMzIgKnA7CQkJCQkJXAogCV9fYmUzMiAqc2F2ZTsJCQkJCQlcCiAJCQkJCQkJCVwKIAlzYXZlID0gcmVzcC0+cDsKQEAgLTE5NTAsNiArMTk2MiwxNyBAQAogCXJldHVybiAtRUlOVkFMOwogfQogCitzdGF0aWMgdm9pZAorbmZzZDRfZW5jb2RlX3N0YXRlaWQoc3RydWN0IG5mc2Q0X2NvbXBvdW5kcmVzICpyZXNwLCBzdGF0ZWlkX3QgKnNpZCkKK3sKKwlFTkNPREVfSEVBRDsKKworCVJFU0VSVkVfU1BBQ0Uoc2l6ZW9mKHN0YXRlaWRfdCkpOworCVdSSVRFMzIoc2lkLT5zaV9nZW5lcmF0aW9uKTsKKwlXUklURU1FTSgmc2lkLT5zaV9vcGFxdWUsIHNpemVvZihzdGF0ZWlkX29wYXF1ZV90KSk7CisJQURKVVNUX0FSR1MoKTsKK30KKwogc3RhdGljIF9fYmUzMgogbmZzZDRfZW5jb2RlX2FjY2VzcyhzdHJ1Y3QgbmZzZDRfY29tcG91bmRyZXMgKnJlc3AsIF9fYmUzMiBuZnNlcnIsIHN0cnVjdCBuZnNkNF9hY2Nlc3MgKmFjY2VzcykKIHsKQEAgLTE5NjksMTIgKzE5OTIsOSBAQAogewogCUVOQ09ERV9TRVFJRF9PUF9IRUFEOwogCi0JaWYgKCFuZnNlcnIpIHsKLQkJUkVTRVJWRV9TUEFDRShzaXplb2Yoc3RhdGVpZF90KSk7Ci0JCVdSSVRFMzIoY2xvc2UtPmNsX3N0YXRlaWQuc2lfZ2VuZXJhdGlvbik7Ci0JCVdSSVRFTUVNKCZjbG9zZS0+Y2xfc3RhdGVpZC5zaV9vcGFxdWUsIHNpemVvZihzdGF0ZWlkX29wYXF1ZV90KSk7Ci0JCUFESlVTVF9BUkdTKCk7Ci0JfQorCWlmICghbmZzZXJyKQorCQluZnNkNF9lbmNvZGVfc3RhdGVpZChyZXNwLCAmY2xvc2UtPmNsX3N0YXRlaWQpOworCiAJRU5DT0RFX1NFUUlEX09QX1RBSUwoY2xvc2UtPmNsX3N0YXRlb3duZXIpOwogCXJldHVybiBuZnNlcnI7CiB9CkBAIC0yMDc0LDEyICsyMDk0LDkgQEAKIHsKIAlFTkNPREVfU0VRSURfT1BfSEVBRDsKIAotCWlmICghbmZzZXJyKSB7Ci0JCVJFU0VSVkVfU1BBQ0UoNCArIHNpemVvZihzdGF0ZWlkX3QpKTsKLQkJV1JJVEUzMihsb2NrLT5sa19yZXNwX3N0YXRlaWQuc2lfZ2VuZXJhdGlvbik7Ci0JCVdSSVRFTUVNKCZsb2NrLT5sa19yZXNwX3N0YXRlaWQuc2lfb3BhcXVlLCBzaXplb2Yoc3RhdGVpZF9vcGFxdWVfdCkpOwotCQlBREpVU1RfQVJHUygpOwotCX0gZWxzZSBpZiAobmZzZXJyID09IG5mc2Vycl9kZW5pZWQpCisJaWYgKCFuZnNlcnIpCisJCW5mc2Q0X2VuY29kZV9zdGF0ZWlkKHJlc3AsICZsb2NrLT5sa19yZXNwX3N0YXRlaWQpOworCWVsc2UgaWYgKG5mc2VyciA9PSBuZnNlcnJfZGVuaWVkKQogCQluZnNkNF9lbmNvZGVfbG9ja19kZW5pZWQocmVzcCwgJmxvY2stPmxrX2RlbmllZCk7CiAKIAlFTkNPREVfU0VRSURfT1BfVEFJTChsb2NrLT5sa19yZXBsYXlfb3duZXIpOwpAQCAtMjA5OSwxMyArMjExNiw5IEBACiB7CiAJRU5DT0RFX1NFUUlEX09QX0hFQUQ7CiAKLQlpZiAoIW5mc2VycikgewotCQlSRVNFUlZFX1NQQUNFKHNpemVvZihzdGF0ZWlkX3QpKTsKLQkJV1JJVEUzMihsb2NrdS0+bHVfc3RhdGVpZC5zaV9nZW5lcmF0aW9uKTsKLQkJV1JJVEVNRU0oJmxvY2t1LT5sdV9zdGF0ZWlkLnNpX29wYXF1ZSwgc2l6ZW9mKHN0YXRlaWRfb3BhcXVlX3QpKTsKLQkJQURKVVNUX0FSR1MoKTsKLQl9Ci0JCQkJICAgICAgICAKKwlpZiAoIW5mc2VycikKKwkJbmZzZDRfZW5jb2RlX3N0YXRlaWQocmVzcCwgJmxvY2t1LT5sdV9zdGF0ZWlkKTsKKwogCUVOQ09ERV9TRVFJRF9PUF9UQUlMKGxvY2t1LT5sdV9zdGF0ZW93bmVyKTsKIAlyZXR1cm4gbmZzZXJyOwogfQpAQCAtMjEyOCwxNCArMjE0MSwxNCBAQAogc3RhdGljIF9fYmUzMgogbmZzZDRfZW5jb2RlX29wZW4oc3RydWN0IG5mc2Q0X2NvbXBvdW5kcmVzICpyZXNwLCBfX2JlMzIgbmZzZXJyLCBzdHJ1Y3QgbmZzZDRfb3BlbiAqb3BlbikKIHsKKwlFTkNPREVfSEVBRDsKIAlFTkNPREVfU0VRSURfT1BfSEVBRDsKIAogCWlmIChuZnNlcnIpCiAJCWdvdG8gb3V0OwogCi0JUkVTRVJWRV9TUEFDRSgzNiArIHNpemVvZihzdGF0ZWlkX3QpKTsKLQlXUklURTMyKG9wZW4tPm9wX3N0YXRlaWQuc2lfZ2VuZXJhdGlvbik7Ci0JV1JJVEVNRU0oJm9wZW4tPm9wX3N0YXRlaWQuc2lfb3BhcXVlLCBzaXplb2Yoc3RhdGVpZF9vcGFxdWVfdCkpOworCW5mc2Q0X2VuY29kZV9zdGF0ZWlkKHJlc3AsICZvcGVuLT5vcF9zdGF0ZWlkKTsKKwlSRVNFUlZFX1NQQUNFKDQwKTsKIAlXUklURUNJTkZPKG9wZW4tPm9wX2NpbmZvKTsKIAlXUklURTMyKG9wZW4tPm9wX3JmbGFncyk7CiAJV1JJVEUzMigyKTsKQEAgLTIxNDgsOCArMjE2MSw4IEBACiAJY2FzZSBORlM0X09QRU5fREVMRUdBVEVfTk9ORToKIAkJYnJlYWs7CiAJY2FzZSBORlM0X09QRU5fREVMRUdBVEVfUkVBRDoKLQkJUkVTRVJWRV9TUEFDRSgyMCArIHNpemVvZihzdGF0ZWlkX3QpKTsKLQkJV1JJVEVNRU0oJm9wZW4tPm9wX2RlbGVnYXRlX3N0YXRlaWQsIHNpemVvZihzdGF0ZWlkX3QpKTsKKwkJbmZzZDRfZW5jb2RlX3N0YXRlaWQocmVzcCwgJm9wZW4tPm9wX2RlbGVnYXRlX3N0YXRlaWQpOworCQlSRVNFUlZFX1NQQUNFKDIwKTsKIAkJV1JJVEUzMihvcGVuLT5vcF9yZWNhbGwpOwogCiAJCS8qCkBAIC0yMTYyLDggKzIxNzUsOCBAQAogCQlBREpVU1RfQVJHUygpOwogCQlicmVhazsKIAljYXNlIE5GUzRfT1BFTl9ERUxFR0FURV9XUklURToKLQkJUkVTRVJWRV9TUEFDRSgzMiArIHNpemVvZihzdGF0ZWlkX3QpKTsKLQkJV1JJVEVNRU0oJm9wZW4tPm9wX2RlbGVnYXRlX3N0YXRlaWQsIHNpemVvZihzdGF0ZWlkX3QpKTsKKwkJbmZzZDRfZW5jb2RlX3N0YXRlaWQocmVzcCwgJm9wZW4tPm9wX2RlbGVnYXRlX3N0YXRlaWQpOworCQlSRVNFUlZFX1NQQUNFKDMyKTsKIAkJV1JJVEUzMigwKTsKIAogCQkvKgpAQCAtMjE5NSwxMyArMjIwOCw5IEBACiBuZnNkNF9lbmNvZGVfb3Blbl9jb25maXJtKHN0cnVjdCBuZnNkNF9jb21wb3VuZHJlcyAqcmVzcCwgX19iZTMyIG5mc2Vyciwgc3RydWN0IG5mc2Q0X29wZW5fY29uZmlybSAqb2MpCiB7CiAJRU5DT0RFX1NFUUlEX09QX0hFQUQ7Ci0JCQkJICAgICAgICAKLQlpZiAoIW5mc2VycikgewotCQlSRVNFUlZFX1NQQUNFKHNpemVvZihzdGF0ZWlkX3QpKTsKLQkJV1JJVEUzMihvYy0+b2NfcmVzcF9zdGF0ZWlkLnNpX2dlbmVyYXRpb24pOwotCQlXUklURU1FTSgmb2MtPm9jX3Jlc3Bfc3RhdGVpZC5zaV9vcGFxdWUsIHNpemVvZihzdGF0ZWlkX29wYXF1ZV90KSk7Ci0JCUFESlVTVF9BUkdTKCk7Ci0JfQorCisJaWYgKCFuZnNlcnIpCisJCW5mc2Q0X2VuY29kZV9zdGF0ZWlkKHJlc3AsICZvYy0+b2NfcmVzcF9zdGF0ZWlkKTsKIAogCUVOQ09ERV9TRVFJRF9PUF9UQUlMKG9jLT5vY19zdGF0ZW93bmVyKTsKIAlyZXR1cm4gbmZzZXJyOwpAQCAtMjIxMSwxMyArMjIyMCw5IEBACiBuZnNkNF9lbmNvZGVfb3Blbl9kb3duZ3JhZGUoc3RydWN0IG5mc2Q0X2NvbXBvdW5kcmVzICpyZXNwLCBfX2JlMzIgbmZzZXJyLCBzdHJ1Y3QgbmZzZDRfb3Blbl9kb3duZ3JhZGUgKm9kKQogewogCUVOQ09ERV9TRVFJRF9PUF9IRUFEOwotCQkJCSAgICAgICAgCi0JaWYgKCFuZnNlcnIpIHsKLQkJUkVTRVJWRV9TUEFDRShzaXplb2Yoc3RhdGVpZF90KSk7Ci0JCVdSSVRFMzIob2QtPm9kX3N0YXRlaWQuc2lfZ2VuZXJhdGlvbik7Ci0JCVdSSVRFTUVNKCZvZC0+b2Rfc3RhdGVpZC5zaV9vcGFxdWUsIHNpemVvZihzdGF0ZWlkX29wYXF1ZV90KSk7Ci0JCUFESlVTVF9BUkdTKCk7Ci0JfQorCisJaWYgKCFuZnNlcnIpCisJCW5mc2Q0X2VuY29kZV9zdGF0ZWlkKHJlc3AsICZvZC0+b2Rfc3RhdGVpZCk7CiAKIAlFTkNPREVfU0VRSURfT1BfVEFJTChvZC0+b2Rfc3RhdGVvd25lcik7CiAJcmV0dXJuIG5mc2VycjsKZGlmZiAtLWdpdCBhL2ZzL25mc2QvbmZzY3RsLmMgYi9mcy9uZnNkL25mc2N0bC5jCmluZGV4IGM1M2U2NWYuLjk3NTQzZGYgMTAwNjQ0Ci0tLSBhL2ZzL25mc2QvbmZzY3RsLmMKKysrIGIvZnMvbmZzZC9uZnNjdGwuYwpAQCAtNjE0LDEwICs2MTQsOSBAQAogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCWVyciA9IG5mc2RfY3JlYXRlX3NlcnYoKTsKIAkJaWYgKCFlcnIpIHsKLQkJCWludCBwcm90byA9IDA7Ci0JCQllcnIgPSBzdmNfYWRkc29jayhuZnNkX3NlcnYsIGZkLCBidWYsICZwcm90byk7CisJCQllcnIgPSBzdmNfYWRkc29jayhuZnNkX3NlcnYsIGZkLCBidWYpOwogCQkJaWYgKGVyciA+PSAwKSB7Ci0JCQkJZXJyID0gbG9ja2RfdXAocHJvdG8pOworCQkJCWVyciA9IGxvY2tkX3VwKCk7CiAJCQkJaWYgKGVyciA8IDApCiAJCQkJCXN2Y19zb2NrX25hbWVzKGJ1ZitzdHJsZW4oYnVmKSsxLCBuZnNkX3NlcnYsIGJ1Zik7CiAJCQl9CmRpZmYgLS1naXQgYS9mcy9uZnNkL25mc2ZoLmMgYi9mcy9uZnNkL25mc2ZoLmMKaW5kZXggZWEzN2M5Ni4uY2QyNWQ5MSAxMDA2NDQKLS0tIGEvZnMvbmZzZC9uZnNmaC5jCisrKyBiL2ZzL25mc2QvbmZzZmguYwpAQCAtMzAyLDE3ICszMDIsMjcgQEAKIAlpZiAoZXJyb3IpCiAJCWdvdG8gb3V0OwogCi0JaWYgKCEoYWNjZXNzICYgTkZTRF9NQVlfTE9DSykpIHsKLQkJLyoKLQkJICogcHNldWRvZmxhdm9yIHJlc3RyaWN0aW9ucyBhcmUgbm90IGVuZm9yY2VkIG9uIE5MTSwKLQkJICogd2hpY2ggY2xpZW50cyB2aXJ0dWFsbHkgYWx3YXlzIHVzZSBhdXRoX3N5cyBmb3IsCi0JCSAqIGV2ZW4gd2hpbGUgdXNpbmcgUlBDU0VDX0dTUyBmb3IgTkZTLgotCQkgKi8KLQkJZXJyb3IgPSBjaGVja19uZnNkX2FjY2VzcyhleHAsIHJxc3RwKTsKLQkJaWYgKGVycm9yKQotCQkJZ290byBvdXQ7Ci0JfQorCS8qCisJICogcHNldWRvZmxhdm9yIHJlc3RyaWN0aW9ucyBhcmUgbm90IGVuZm9yY2VkIG9uIE5MTSwKKwkgKiB3aGljaCBjbGllbnRzIHZpcnR1YWxseSBhbHdheXMgdXNlIGF1dGhfc3lzIGZvciwKKwkgKiBldmVuIHdoaWxlIHVzaW5nIFJQQ1NFQ19HU1MgZm9yIE5GUy4KKwkgKi8KKwlpZiAoYWNjZXNzICYgTkZTRF9NQVlfTE9DSykKKwkJZ290byBza2lwX3BzZXVkb2ZsYXZvcl9jaGVjazsKKwkvKgorCSAqIENsaWVudHMgbWF5IGV4cGVjdCB0byBiZSBhYmxlIHRvIHVzZSBhdXRoX3N5cyBkdXJpbmcgbW91bnQsCisJICogZXZlbiBpZiB0aGV5IHVzZSBnc3MgZm9yIGV2ZXJ5dGhpbmcgZWxzZTsgc2VlIHNlY3Rpb24gMi4zLjIKKwkgKiBvZiByZmMgMjYyMy4KKwkgKi8KKwlpZiAoYWNjZXNzICYgTkZTRF9NQVlfQllQQVNTX0dTU19PTl9ST09UCisJCQkmJiBleHAtPmV4X3BhdGguZGVudHJ5ID09IGRlbnRyeSkKKwkJZ290byBza2lwX3BzZXVkb2ZsYXZvcl9jaGVjazsKIAorCWVycm9yID0gY2hlY2tfbmZzZF9hY2Nlc3MoZXhwLCBycXN0cCk7CisJaWYgKGVycm9yKQorCQlnb3RvIG91dDsKKworc2tpcF9wc2V1ZG9mbGF2b3JfY2hlY2s6CiAJLyogRmluYWxseSwgY2hlY2sgYWNjZXNzIHBlcm1pc3Npb25zLiAqLwogCWVycm9yID0gbmZzZF9wZXJtaXNzaW9uKHJxc3RwLCBleHAsIGRlbnRyeSwgYWNjZXNzKTsKIApkaWZmIC0tZ2l0IGEvZnMvbmZzZC9uZnNwcm9jLmMgYi9mcy9uZnNkL25mc3Byb2MuYwppbmRleCAwNzY2Zjk1Li41Y2ZmZWNhIDEwMDY0NAotLS0gYS9mcy9uZnNkL25mc3Byb2MuYworKysgYi9mcy9uZnNkL25mc3Byb2MuYwpAQCAtNjUsNyArNjUsOCBAQAogCWRwcmludGsoIm5mc2Q6IEdFVEFUVFIgICVzXG4iLCBTVkNGSF9mbXQoJmFyZ3AtPmZoKSk7CiAKIAlmaF9jb3B5KCZyZXNwLT5maCwgJmFyZ3AtPmZoKTsKLQluZnNlcnIgPSBmaF92ZXJpZnkocnFzdHAsICZyZXNwLT5maCwgMCwgTkZTRF9NQVlfTk9QKTsKKwluZnNlcnIgPSBmaF92ZXJpZnkocnFzdHAsICZyZXNwLT5maCwgMCwKKwkJCU5GU0RfTUFZX05PUCB8IE5GU0RfTUFZX0JZUEFTU19HU1NfT05fUk9PVCk7CiAJcmV0dXJuIG5mc2RfcmV0dXJuX2F0dHJzKG5mc2VyciwgcmVzcCk7CiB9CiAKQEAgLTUyMSw3ICs1MjIsOCBAQAogCiAJZHByaW50aygibmZzZDogU1RBVEZTICAgJXNcbiIsIFNWQ0ZIX2ZtdCgmYXJncC0+ZmgpKTsKIAotCW5mc2VyciA9IG5mc2Rfc3RhdGZzKHJxc3RwLCAmYXJncC0+ZmgsICZyZXNwLT5zdGF0cyk7CisJbmZzZXJyID0gbmZzZF9zdGF0ZnMocnFzdHAsICZhcmdwLT5maCwgJnJlc3AtPnN0YXRzLAorCQkJTkZTRF9NQVlfQllQQVNTX0dTU19PTl9ST09UKTsKIAlmaF9wdXQoJmFyZ3AtPmZoKTsKIAlyZXR1cm4gbmZzZXJyOwogfQpkaWZmIC0tZ2l0IGEvZnMvbmZzZC9uZnNzdmMuYyBiL2ZzL25mc2QvbmZzc3ZjLmMKaW5kZXggODAyOTJmZi4uNTllZWI0NiAxMDA2NDQKLS0tIGEvZnMvbmZzZC9uZnNzdmMuYworKysgYi9mcy9uZnNkL25mc3N2Yy5jCkBAIC0yMjksNiArMjI5LDcgQEAKIAogCWF0b21pY19zZXQoJm5mc2RfYnVzeSwgMCk7CiAJbmZzZF9zZXJ2ID0gc3ZjX2NyZWF0ZV9wb29sZWQoJm5mc2RfcHJvZ3JhbSwgbmZzZF9tYXhfYmxrc2l6ZSwKKwkJCQkgICAgICBBRl9JTkVULAogCQkJCSAgICAgIG5mc2RfbGFzdF90aHJlYWQsIG5mc2QsIFRISVNfTU9EVUxFKTsKIAlpZiAobmZzZF9zZXJ2ID09IE5VTEwpCiAJCWVyciA9IC1FTk9NRU07CkBAIC0yNDMsMjUgKzI0NCwyMCBAQAogCWlmICghbGlzdF9lbXB0eSgmbmZzZF9zZXJ2LT5zdl9wZXJtc29ja3MpKQogCQlyZXR1cm4gMDsKIAotCWVycm9yID0gbG9ja2RfdXAoSVBQUk9UT19VRFApOwotCWlmIChlcnJvciA+PSAwKSB7Ci0JCWVycm9yID0gc3ZjX2NyZWF0ZV94cHJ0KG5mc2Rfc2VydiwgInVkcCIsIHBvcnQsCisJZXJyb3IgPSBzdmNfY3JlYXRlX3hwcnQobmZzZF9zZXJ2LCAidWRwIiwgcG9ydCwKIAkJCQkJU1ZDX1NPQ0tfREVGQVVMVFMpOwotCQlpZiAoZXJyb3IgPCAwKQotCQkJbG9ja2RfZG93bigpOwotCX0KIAlpZiAoZXJyb3IgPCAwKQogCQlyZXR1cm4gZXJyb3I7CiAKLQllcnJvciA9IGxvY2tkX3VwKElQUFJPVE9fVENQKTsKLQlpZiAoZXJyb3IgPj0gMCkgewotCQllcnJvciA9IHN2Y19jcmVhdGVfeHBydChuZnNkX3NlcnYsICJ0Y3AiLCBwb3J0LAorCWVycm9yID0gc3ZjX2NyZWF0ZV94cHJ0KG5mc2Rfc2VydiwgInRjcCIsIHBvcnQsCiAJCQkJCVNWQ19TT0NLX0RFRkFVTFRTKTsKLQkJaWYgKGVycm9yIDwgMCkKLQkJCWxvY2tkX2Rvd24oKTsKLQl9CiAJaWYgKGVycm9yIDwgMCkKIAkJcmV0dXJuIGVycm9yOworCisJZXJyb3IgPSBsb2NrZF91cCgpOworCWlmIChlcnJvciA8IDApCisJCXJldHVybiBlcnJvcjsKKwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9mcy9uZnNkL3Zmcy5jIGIvZnMvbmZzZC92ZnMuYwppbmRleCAxODA2MGJlLi5hYTFkMGQ2IDEwMDY0NAotLS0gYS9mcy9uZnNkL3Zmcy5jCisrKyBiL2ZzL25mc2QvdmZzLmMKQEAgLTgzLDcgKzgzLDYgQEAKIAlzcGlubG9ja190CQlwYl9sb2NrOwogfSBfX19fY2FjaGVsaW5lX2FsaWduZWRfaW5fc21wOwogCi1zdGF0aWMgc3RydWN0IHJhcGFybXMgKgkJcmFwYXJtbDsKICNkZWZpbmUgUkFQQVJNX0hBU0hfQklUUwk0CiAjZGVmaW5lIFJBUEFSTV9IQVNIX1NJWkUJKDE8PFJBUEFSTV9IQVNIX0JJVFMpCiAjZGVmaW5lIFJBUEFSTV9IQVNIX01BU0sJKFJBUEFSTV9IQVNIX1NJWkUtMSkKQEAgLTE4NjYsOSArMTg2NSw5IEBACiAgKiBOLkIuIEFmdGVyIHRoaXMgY2FsbCBmaHAgbmVlZHMgYW4gZmhfcHV0CiAgKi8KIF9fYmUzMgotbmZzZF9zdGF0ZnMoc3RydWN0IHN2Y19ycXN0ICpycXN0cCwgc3RydWN0IHN2Y19maCAqZmhwLCBzdHJ1Y3Qga3N0YXRmcyAqc3RhdCkKK25mc2Rfc3RhdGZzKHN0cnVjdCBzdmNfcnFzdCAqcnFzdHAsIHN0cnVjdCBzdmNfZmggKmZocCwgc3RydWN0IGtzdGF0ZnMgKnN0YXQsIGludCBhY2Nlc3MpCiB7Ci0JX19iZTMyIGVyciA9IGZoX3ZlcmlmeShycXN0cCwgZmhwLCAwLCBORlNEX01BWV9OT1ApOworCV9fYmUzMiBlcnIgPSBmaF92ZXJpZnkocnFzdHAsIGZocCwgMCwgTkZTRF9NQVlfTk9QIHwgYWNjZXNzKTsKIAlpZiAoIWVyciAmJiB2ZnNfc3RhdGZzKGZocC0+ZmhfZGVudHJ5LHN0YXQpKQogCQllcnIgPSBuZnNlcnJfaW87CiAJcmV0dXJuIGVycjsKQEAgLTE5NjYsMTEgKzE5NjUsMjAgQEAKIHZvaWQKIG5mc2RfcmFjYWNoZV9zaHV0ZG93bih2b2lkKQogewotCWlmICghcmFwYXJtbCkKLQkJcmV0dXJuOworCXN0cnVjdCByYXBhcm1zICpyYXBhcm0sICpsYXN0X3JhcGFybTsKKwl1bnNpZ25lZCBpbnQgaTsKKwogCWRwcmludGsoIm5mc2Q6IGZyZWVpbmcgcmVhZGFoZWFkIGJ1ZmZlcnMuXG4iKTsKLQlrZnJlZShyYXBhcm1sKTsKLQlyYXBhcm1sID0gTlVMTDsKKworCWZvciAoaSA9IDA7IGkgPCBSQVBBUk1fSEFTSF9TSVpFOyBpKyspIHsKKwkJcmFwYXJtID0gcmFwYXJtX2hhc2hbaV0ucGJfaGVhZDsKKwkJd2hpbGUocmFwYXJtKSB7CisJCQlsYXN0X3JhcGFybSA9IHJhcGFybTsKKwkJCXJhcGFybSA9IHJhcGFybS0+cF9uZXh0OworCQkJa2ZyZWUobGFzdF9yYXBhcm0pOworCQl9CisJCXJhcGFybV9oYXNoW2ldLnBiX2hlYWQgPSBOVUxMOworCX0KIH0KIC8qCiAgKiBJbml0aWFsaXplIHJlYWRhaGVhZCBwYXJhbSBjYWNoZQpAQCAtMTk4MSwzNSArMTk4OSwzOCBAQAogCWludAlpOwogCWludAlqID0gMDsKIAlpbnQJbnBlcmJ1Y2tldDsKKwlzdHJ1Y3QgcmFwYXJtcyAqKnJhcGFybSA9IE5VTEw7CiAKIAotCWlmIChyYXBhcm1sKQorCWlmIChyYXBhcm1faGFzaFswXS5wYl9oZWFkKQogCQlyZXR1cm4gMDsKLQlpZiAoY2FjaGVfc2l6ZSA8IDIqUkFQQVJNX0hBU0hfU0laRSkKLQkJY2FjaGVfc2l6ZSA9IDIqUkFQQVJNX0hBU0hfU0laRTsKLQlyYXBhcm1sID0ga2NhbGxvYyhjYWNoZV9zaXplLCBzaXplb2Yoc3RydWN0IHJhcGFybXMpLCBHRlBfS0VSTkVMKTsKLQotCWlmICghcmFwYXJtbCkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HCi0JCQkibmZzZDogQ291bGQgbm90IGFsbG9jYXRlIG1lbW9yeSByZWFkLWFoZWFkIGNhY2hlLlxuIik7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KKwlucGVyYnVja2V0ID0gRElWX1JPVU5EX1VQKGNhY2hlX3NpemUsIFJBUEFSTV9IQVNIX1NJWkUpOworCWlmIChucGVyYnVja2V0IDwgMikKKwkJbnBlcmJ1Y2tldCA9IDI7CisJY2FjaGVfc2l6ZSA9IG5wZXJidWNrZXQgKiBSQVBBUk1fSEFTSF9TSVpFOwogCiAJZHByaW50aygibmZzZDogYWxsb2NhdGluZyAlZCByZWFkYWhlYWQgYnVmZmVycy5cbiIsIGNhY2hlX3NpemUpOwotCWZvciAoaSA9IDAgOyBpIDwgUkFQQVJNX0hBU0hfU0laRSA7IGkrKykgewotCQlyYXBhcm1faGFzaFtpXS5wYl9oZWFkID0gTlVMTDsKKworCWZvciAoaSA9IDA7IGkgPCBSQVBBUk1fSEFTSF9TSVpFOyBpKyspIHsKIAkJc3Bpbl9sb2NrX2luaXQoJnJhcGFybV9oYXNoW2ldLnBiX2xvY2spOwotCX0KLQlucGVyYnVja2V0ID0gRElWX1JPVU5EX1VQKGNhY2hlX3NpemUsIFJBUEFSTV9IQVNIX1NJWkUpOwotCWZvciAoaSA9IDA7IGkgPCBjYWNoZV9zaXplIC0gMTsgaSsrKSB7Ci0JCWlmIChpICUgbnBlcmJ1Y2tldCA9PSAwKQotCQkJcmFwYXJtX2hhc2hbaisrXS5wYl9oZWFkID0gcmFwYXJtbCArIGk7Ci0JCWlmIChpICUgbnBlcmJ1Y2tldCA8IG5wZXJidWNrZXQtMSkKLQkJCXJhcGFybWxbaV0ucF9uZXh0ID0gcmFwYXJtbCArIGkgKyAxOworCisJCXJhcGFybSA9ICZyYXBhcm1faGFzaFtpXS5wYl9oZWFkOworCQlmb3IgKGogPSAwOyBqIDwgbnBlcmJ1Y2tldDsgaisrKSB7CisJCQkqcmFwYXJtID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHJhcGFybXMpLCBHRlBfS0VSTkVMKTsKKwkJCWlmICghKnJhcGFybSkKKwkJCQlnb3RvIG91dF9ub21lbTsKKwkJCXJhcGFybSA9ICYoKnJhcGFybSktPnBfbmV4dDsKKwkJfQorCQkqcmFwYXJtID0gTlVMTDsKIAl9CiAKIAluZnNkc3RhdHMucmFfc2l6ZSA9IGNhY2hlX3NpemU7CiAJcmV0dXJuIDA7CisKK291dF9ub21lbToKKwlkcHJpbnRrKCJuZnNkOiBrbWFsbG9jIGZhaWxlZCwgZnJlZWluZyByZWFkYWhlYWQgYnVmZmVyc1xuIik7CisJbmZzZF9yYWNhY2hlX3NodXRkb3duKCk7CisJcmV0dXJuIC1FTk9NRU07CiB9CiAKICNpZiBkZWZpbmVkKENPTkZJR19ORlNEX1YyX0FDTCkgfHwgZGVmaW5lZChDT05GSUdfTkZTRF9WM19BQ0wpCmRpZmYgLS1naXQgYS9mcy9ubHMvbmxzX2Jhc2UuYyBiL2ZzL25scy9ubHNfYmFzZS5jCmluZGV4IDY0OTY1ZTEuLjliMGVmZGEgMTAwNjQ0Ci0tLSBhL2ZzL25scy9ubHNfYmFzZS5jCisrKyBiL2ZzL25scy9ubHNfYmFzZS5jCkBAIC0xMyw5ICsxMyw3IEBACiAjaW5jbHVkZSA8bGludXgvbmxzLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KLSNpZmRlZiBDT05GSUdfS01PRAogI2luY2x1ZGUgPGxpbnV4L2ttb2QuaD4KLSNlbmRpZgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAKIHN0YXRpYyBzdHJ1Y3QgbmxzX3RhYmxlIGRlZmF1bHRfdGFibGU7CkBAIC0yMTUsMjQgKzIxMyw3IEBACiAKIHN0cnVjdCBubHNfdGFibGUgKmxvYWRfbmxzKGNoYXIgKmNoYXJzZXQpCiB7Ci0Jc3RydWN0IG5sc190YWJsZSAqbmxzOwotI2lmZGVmIENPTkZJR19LTU9ECi0JaW50IHJldDsKLSNlbmRpZgotCi0JbmxzID0gZmluZF9ubHMoY2hhcnNldCk7Ci0JaWYgKG5scykKLQkJcmV0dXJuIG5sczsKLQotI2lmZGVmIENPTkZJR19LTU9ECi0JcmV0ID0gcmVxdWVzdF9tb2R1bGUoIm5sc18lcyIsIGNoYXJzZXQpOwotCWlmIChyZXQgIT0gMCkgewotCQlwcmludGsoIlVuYWJsZSB0byBsb2FkIE5MUyBjaGFyc2V0ICVzXG4iLCBjaGFyc2V0KTsKLQkJcmV0dXJuIE5VTEw7Ci0JfQotCW5scyA9IGZpbmRfbmxzKGNoYXJzZXQpOwotI2VuZGlmCi0JcmV0dXJuIG5sczsKKwlyZXR1cm4gdHJ5X3RoZW5fcmVxdWVzdF9tb2R1bGUoZmluZF9ubHMoY2hhcnNldCksICJubHNfJXMiLCBjaGFyc2V0KTsKIH0KIAogdm9pZCB1bmxvYWRfbmxzKHN0cnVjdCBubHNfdGFibGUgKm5scykKZGlmZiAtLWdpdCBhL2ZzL250ZnMvZmlsZS5jIGIvZnMvbnRmcy9maWxlLmMKaW5kZXggZDAyMDg2Ni4uMzE0MGE0NCAxMDA2NDQKLS0tIGEvZnMvbnRmcy9maWxlLmMKKysrIGIvZnMvbnRmcy9maWxlLmMKQEAgLTQzOSw3ICs0MzksNyBAQAogCQkJcGFnZXNbbnJdID0gKmNhY2hlZF9wYWdlOwogCQkJcGFnZV9jYWNoZV9nZXQoKmNhY2hlZF9wYWdlKTsKIAkJCWlmICh1bmxpa2VseSghcGFnZXZlY19hZGQobHJ1X3B2ZWMsICpjYWNoZWRfcGFnZSkpKQotCQkJCV9fcGFnZXZlY19scnVfYWRkKGxydV9wdmVjKTsKKwkJCQlfX3BhZ2V2ZWNfbHJ1X2FkZF9maWxlKGxydV9wdmVjKTsKIAkJCSpjYWNoZWRfcGFnZSA9IE5VTEw7CiAJCX0KIAkJaW5kZXgrKzsKQEAgLTIwODQsNyArMjA4NCw3IEBACiAJCQkJCQlPU1lOQ19NRVRBREFUQXxPU1lOQ19EQVRBKTsKIAkJfQogICAJfQotCXBhZ2V2ZWNfbHJ1X2FkZCgmbHJ1X3B2ZWMpOworCXBhZ2V2ZWNfbHJ1X2FkZF9maWxlKCZscnVfcHZlYyk7CiAJbnRmc19kZWJ1ZygiRG9uZS4gIFJldHVybmluZyAlcyAod3JpdHRlbiAweCVseCwgc3RhdHVzICVsaSkuIiwKIAkJCXdyaXR0ZW4gPyAid3JpdHRlbiIgOiAic3RhdHVzIiwgKHVuc2lnbmVkIGxvbmcpd3JpdHRlbiwKIAkJCShsb25nKXN0YXR1cyk7CmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9NYWtlZmlsZSBiL2ZzL29jZnMyL01ha2VmaWxlCmluZGV4IGY2OTU2ZGUuLjU4OWRjZGYgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL01ha2VmaWxlCisrKyBiL2ZzL29jZnMyL01ha2VmaWxlCkBAIC0zNCw3ICszNCw4IEBACiAJc3ltbGluay5vIAkJXAogCXN5c2ZpbGUubyAJCVwKIAl1cHRvZGF0ZS5vCQlcCi0JdmVyLm8KKwl2ZXIubwkJCVwKKwl4YXR0ci5vCiAKIG9jZnMyX3N0YWNrZ2x1ZS1vYmpzIDo9IHN0YWNrZ2x1ZS5vCiBvY2ZzMl9zdGFja19vMmNiLW9ianMgOj0gc3RhY2tfbzJjYi5vCmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9hbGxvYy5jIGIvZnMvb2NmczIvYWxsb2MuYwppbmRleCAyOWZmNTdlLi4wY2MyZGViIDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9hbGxvYy5jCisrKyBiL2ZzL29jZnMyL2FsbG9jLmMKQEAgLTQ5LDYgKzQ5LDM0MCBAQAogCiAjaW5jbHVkZSAiYnVmZmVyX2hlYWRfaW8uaCIKIAorCisvKgorICogT3BlcmF0aW9ucyBmb3IgYSBzcGVjaWZpYyBleHRlbnQgdHJlZSB0eXBlLgorICoKKyAqIFRvIGltcGxlbWVudCBhbiBvbi1kaXNrIGJ0cmVlIChleHRlbnQgdHJlZSkgdHlwZSBpbiBvY2ZzMiwgYWRkCisgKiBhbiBvY2ZzMl9leHRlbnRfdHJlZV9vcGVyYXRpb25zIHN0cnVjdHVyZSBhbmQgdGhlIG1hdGNoaW5nCisgKiBvY2ZzMl9pbml0Xzx0aGluZ3k+X2V4dGVudF90cmVlKCkgZnVuY3Rpb24uICBUaGF0J3MgcHJldHR5IG11Y2ggaXQKKyAqIGZvciB0aGUgYWxsb2NhdGlvbiBwb3J0aW9uIG9mIHRoZSBleHRlbnQgdHJlZS4KKyAqLworc3RydWN0IG9jZnMyX2V4dGVudF90cmVlX29wZXJhdGlvbnMgeworCS8qCisJICogbGFzdF9lYl9ibGsgaXMgdGhlIGJsb2NrIG51bWJlciBvZiB0aGUgcmlnaHQgbW9zdCBsZWFmIGV4dGVudAorCSAqIGJsb2NrLiAgTW9zdCBvbi1kaXNrIHN0cnVjdHVyZXMgY29udGFpbmluZyBhbiBleHRlbnQgdHJlZSBzdG9yZQorCSAqIHRoaXMgdmFsdWUgZm9yIGZhc3QgYWNjZXNzLiAgVGhlIC0+ZW9fc2V0X2xhc3RfZWJfYmxrKCkgYW5kCisJICogLT5lb19nZXRfbGFzdF9lYl9ibGsoKSBvcGVyYXRpb25zIGFjY2VzcyB0aGlzIHZhbHVlLiAgVGhleSBhcmUKKwkgKiAgYm90aCByZXF1aXJlZC4KKwkgKi8KKwl2b2lkICgqZW9fc2V0X2xhc3RfZWJfYmxrKShzdHJ1Y3Qgb2NmczJfZXh0ZW50X3RyZWUgKmV0LAorCQkJCSAgIHU2NCBibGtubyk7CisJdTY0ICgqZW9fZ2V0X2xhc3RfZWJfYmxrKShzdHJ1Y3Qgb2NmczJfZXh0ZW50X3RyZWUgKmV0KTsKKworCS8qCisJICogVGhlIG9uLWRpc2sgc3RydWN0dXJlIHVzdWFsbHkga2VlcHMgdHJhY2sgb2YgaG93IG1hbnkgdG90YWwKKwkgKiBjbHVzdGVycyBhcmUgc3RvcmVkIGluIHRoaXMgZXh0ZW50IHRyZWUuICBUaGlzIGZ1bmN0aW9uIHVwZGF0ZXMKKwkgKiB0aGF0IHZhbHVlLiAgbmV3X2NsdXN0ZXJzIGlzIHRoZSBkZWx0YSwgYW5kIG11c3QgYmUKKwkgKiBhZGRlZCB0byB0aGUgdG90YWwuICBSZXF1aXJlZC4KKwkgKi8KKwl2b2lkICgqZW9fdXBkYXRlX2NsdXN0ZXJzKShzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkJCSAgIHN0cnVjdCBvY2ZzMl9leHRlbnRfdHJlZSAqZXQsCisJCQkJICAgdTMyIG5ld19jbHVzdGVycyk7CisKKwkvKgorCSAqIElmIC0+ZW9faW5zZXJ0X2NoZWNrKCkgZXhpc3RzLCBpdCBpcyBjYWxsZWQgYmVmb3JlIHJlYyBpcworCSAqIGluc2VydGVkIGludG8gdGhlIGV4dGVudCB0cmVlLiAgSXQgaXMgb3B0aW9uYWwuCisJICovCisJaW50ICgqZW9faW5zZXJ0X2NoZWNrKShzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkJICAgICAgIHN0cnVjdCBvY2ZzMl9leHRlbnRfdHJlZSAqZXQsCisJCQkgICAgICAgc3RydWN0IG9jZnMyX2V4dGVudF9yZWMgKnJlYyk7CisJaW50ICgqZW9fc2FuaXR5X2NoZWNrKShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3Qgb2NmczJfZXh0ZW50X3RyZWUgKmV0KTsKKworCS8qCisJICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkgKiBUaGUgcmVtYWluaW5nIGFyZSBpbnRlcm5hbCB0byBvY2ZzMl9leHRlbnRfdHJlZSBhbmQgZG9uJ3QgaGF2ZQorCSAqIGFjY2Vzc29yIGZ1bmN0aW9ucworCSAqLworCisJLyoKKwkgKiAtPmVvX2ZpbGxfcm9vdF9lbCgpIHRha2VzIGV0LT5ldF9vYmplY3QgYW5kIHNldHMgZXQtPmV0X3Jvb3RfZWwuCisJICogSXQgaXMgcmVxdWlyZWQuCisJICovCisJdm9pZCAoKmVvX2ZpbGxfcm9vdF9lbCkoc3RydWN0IG9jZnMyX2V4dGVudF90cmVlICpldCk7CisKKwkvKgorCSAqIC0+ZW9fZmlsbF9tYXhfbGVhZl9jbHVzdGVycyBzZXRzIGV0LT5ldF9tYXhfbGVhZl9jbHVzdGVycyBpZgorCSAqIGl0IGV4aXN0cy4gIElmIGl0IGRvZXMgbm90LCBldC0+ZXRfbWF4X2xlYWZfY2x1c3RlcnMgaXMgc2V0CisJICogdG8gMCAodW5saW1pdGVkKS4gIE9wdGlvbmFsLgorCSAqLworCXZvaWQgKCplb19maWxsX21heF9sZWFmX2NsdXN0ZXJzKShzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkJCQkgIHN0cnVjdCBvY2ZzMl9leHRlbnRfdHJlZSAqZXQpOworfTsKKworCisvKgorICogUHJlLWRlY2xhcmUgb2NmczJfZGlub2RlX2V0X29wcyBzbyB3ZSBjYW4gdXNlIGl0IGFzIGEgc2FuaXR5IGNoZWNrCisgKiBpbiB0aGUgbWV0aG9kcy4KKyAqLworc3RhdGljIHU2NCBvY2ZzMl9kaW5vZGVfZ2V0X2xhc3RfZWJfYmxrKHN0cnVjdCBvY2ZzMl9leHRlbnRfdHJlZSAqZXQpOworc3RhdGljIHZvaWQgb2NmczJfZGlub2RlX3NldF9sYXN0X2ViX2JsayhzdHJ1Y3Qgb2NmczJfZXh0ZW50X3RyZWUgKmV0LAorCQkJCQkgdTY0IGJsa25vKTsKK3N0YXRpYyB2b2lkIG9jZnMyX2Rpbm9kZV91cGRhdGVfY2x1c3RlcnMoc3RydWN0IGlub2RlICppbm9kZSwKKwkJCQkJIHN0cnVjdCBvY2ZzMl9leHRlbnRfdHJlZSAqZXQsCisJCQkJCSB1MzIgY2x1c3RlcnMpOworc3RhdGljIGludCBvY2ZzMl9kaW5vZGVfaW5zZXJ0X2NoZWNrKHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCQkJICAgICBzdHJ1Y3Qgb2NmczJfZXh0ZW50X3RyZWUgKmV0LAorCQkJCSAgICAgc3RydWN0IG9jZnMyX2V4dGVudF9yZWMgKnJlYyk7CitzdGF0aWMgaW50IG9jZnMyX2Rpbm9kZV9zYW5pdHlfY2hlY2soc3RydWN0IGlub2RlICppbm9kZSwKKwkJCQkgICAgIHN0cnVjdCBvY2ZzMl9leHRlbnRfdHJlZSAqZXQpOworc3RhdGljIHZvaWQgb2NmczJfZGlub2RlX2ZpbGxfcm9vdF9lbChzdHJ1Y3Qgb2NmczJfZXh0ZW50X3RyZWUgKmV0KTsKK3N0YXRpYyBzdHJ1Y3Qgb2NmczJfZXh0ZW50X3RyZWVfb3BlcmF0aW9ucyBvY2ZzMl9kaW5vZGVfZXRfb3BzID0geworCS5lb19zZXRfbGFzdF9lYl9ibGsJPSBvY2ZzMl9kaW5vZGVfc2V0X2xhc3RfZWJfYmxrLAorCS5lb19nZXRfbGFzdF9lYl9ibGsJPSBvY2ZzMl9kaW5vZGVfZ2V0X2xhc3RfZWJfYmxrLAorCS5lb191cGRhdGVfY2x1c3RlcnMJPSBvY2ZzMl9kaW5vZGVfdXBkYXRlX2NsdXN0ZXJzLAorCS5lb19pbnNlcnRfY2hlY2sJPSBvY2ZzMl9kaW5vZGVfaW5zZXJ0X2NoZWNrLAorCS5lb19zYW5pdHlfY2hlY2sJPSBvY2ZzMl9kaW5vZGVfc2FuaXR5X2NoZWNrLAorCS5lb19maWxsX3Jvb3RfZWwJPSBvY2ZzMl9kaW5vZGVfZmlsbF9yb290X2VsLAorfTsKKworc3RhdGljIHZvaWQgb2NmczJfZGlub2RlX3NldF9sYXN0X2ViX2JsayhzdHJ1Y3Qgb2NmczJfZXh0ZW50X3RyZWUgKmV0LAorCQkJCQkgdTY0IGJsa25vKQoreworCXN0cnVjdCBvY2ZzMl9kaW5vZGUgKmRpID0gZXQtPmV0X29iamVjdDsKKworCUJVR19PTihldC0+ZXRfb3BzICE9ICZvY2ZzMl9kaW5vZGVfZXRfb3BzKTsKKwlkaS0+aV9sYXN0X2ViX2JsayA9IGNwdV90b19sZTY0KGJsa25vKTsKK30KKworc3RhdGljIHU2NCBvY2ZzMl9kaW5vZGVfZ2V0X2xhc3RfZWJfYmxrKHN0cnVjdCBvY2ZzMl9leHRlbnRfdHJlZSAqZXQpCit7CisJc3RydWN0IG9jZnMyX2Rpbm9kZSAqZGkgPSBldC0+ZXRfb2JqZWN0OworCisJQlVHX09OKGV0LT5ldF9vcHMgIT0gJm9jZnMyX2Rpbm9kZV9ldF9vcHMpOworCXJldHVybiBsZTY0X3RvX2NwdShkaS0+aV9sYXN0X2ViX2Jsayk7Cit9CisKK3N0YXRpYyB2b2lkIG9jZnMyX2Rpbm9kZV91cGRhdGVfY2x1c3RlcnMoc3RydWN0IGlub2RlICppbm9kZSwKKwkJCQkJIHN0cnVjdCBvY2ZzMl9leHRlbnRfdHJlZSAqZXQsCisJCQkJCSB1MzIgY2x1c3RlcnMpCit7CisJc3RydWN0IG9jZnMyX2Rpbm9kZSAqZGkgPSBldC0+ZXRfb2JqZWN0OworCisJbGUzMl9hZGRfY3B1KCZkaS0+aV9jbHVzdGVycywgY2x1c3RlcnMpOworCXNwaW5fbG9jaygmT0NGUzJfSShpbm9kZSktPmlwX2xvY2spOworCU9DRlMyX0koaW5vZGUpLT5pcF9jbHVzdGVycyA9IGxlMzJfdG9fY3B1KGRpLT5pX2NsdXN0ZXJzKTsKKwlzcGluX3VubG9jaygmT0NGUzJfSShpbm9kZSktPmlwX2xvY2spOworfQorCitzdGF0aWMgaW50IG9jZnMyX2Rpbm9kZV9pbnNlcnRfY2hlY2soc3RydWN0IGlub2RlICppbm9kZSwKKwkJCQkgICAgIHN0cnVjdCBvY2ZzMl9leHRlbnRfdHJlZSAqZXQsCisJCQkJICAgICBzdHJ1Y3Qgb2NmczJfZXh0ZW50X3JlYyAqcmVjKQoreworCXN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiID0gT0NGUzJfU0IoaW5vZGUtPmlfc2IpOworCisJQlVHX09OKE9DRlMyX0koaW5vZGUpLT5pcF9keW5fZmVhdHVyZXMgJiBPQ0ZTMl9JTkxJTkVfREFUQV9GTCk7CisJbWxvZ19idWdfb25fbXNnKCFvY2ZzMl9zcGFyc2VfYWxsb2Mob3NiKSAmJgorCQkJKE9DRlMyX0koaW5vZGUpLT5pcF9jbHVzdGVycyAhPSByZWMtPmVfY3BvcyksCisJCQkiRGV2aWNlICVzLCBhc2tpbmcgZm9yIHNwYXJzZSBhbGxvY2F0aW9uOiBpbm9kZSAlbGx1LCAiCisJCQkiY3BvcyAldSwgY2x1c3RlcnMgJXVcbiIsCisJCQlvc2ItPmRldl9zdHIsCisJCQkodW5zaWduZWQgbG9uZyBsb25nKU9DRlMyX0koaW5vZGUpLT5pcF9ibGtubywKKwkJCXJlYy0+ZV9jcG9zLAorCQkJT0NGUzJfSShpbm9kZSktPmlwX2NsdXN0ZXJzKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG9jZnMyX2Rpbm9kZV9zYW5pdHlfY2hlY2soc3RydWN0IGlub2RlICppbm9kZSwKKwkJCQkgICAgIHN0cnVjdCBvY2ZzMl9leHRlbnRfdHJlZSAqZXQpCit7CisJaW50IHJldCA9IDA7CisJc3RydWN0IG9jZnMyX2Rpbm9kZSAqZGk7CisKKwlCVUdfT04oZXQtPmV0X29wcyAhPSAmb2NmczJfZGlub2RlX2V0X29wcyk7CisKKwlkaSA9IGV0LT5ldF9vYmplY3Q7CisJaWYgKCFPQ0ZTMl9JU19WQUxJRF9ESU5PREUoZGkpKSB7CisJCXJldCA9IC1FSU87CisJCW9jZnMyX2Vycm9yKGlub2RlLT5pX3NiLAorCQkJIklub2RlICVsbHUgaGFzIGludmFsaWQgcGF0aCByb290IiwKKwkJCSh1bnNpZ25lZCBsb25nIGxvbmcpT0NGUzJfSShpbm9kZSktPmlwX2Jsa25vKTsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBvY2ZzMl9kaW5vZGVfZmlsbF9yb290X2VsKHN0cnVjdCBvY2ZzMl9leHRlbnRfdHJlZSAqZXQpCit7CisJc3RydWN0IG9jZnMyX2Rpbm9kZSAqZGkgPSBldC0+ZXRfb2JqZWN0OworCisJZXQtPmV0X3Jvb3RfZWwgPSAmZGktPmlkMi5pX2xpc3Q7Cit9CisKKworc3RhdGljIHZvaWQgb2NmczJfeGF0dHJfdmFsdWVfZmlsbF9yb290X2VsKHN0cnVjdCBvY2ZzMl9leHRlbnRfdHJlZSAqZXQpCit7CisJc3RydWN0IG9jZnMyX3hhdHRyX3ZhbHVlX3Jvb3QgKnh2ID0gZXQtPmV0X29iamVjdDsKKworCWV0LT5ldF9yb290X2VsID0gJnh2LT54cl9saXN0OworfQorCitzdGF0aWMgdm9pZCBvY2ZzMl94YXR0cl92YWx1ZV9zZXRfbGFzdF9lYl9ibGsoc3RydWN0IG9jZnMyX2V4dGVudF90cmVlICpldCwKKwkJCQkJICAgICAgdTY0IGJsa25vKQoreworCXN0cnVjdCBvY2ZzMl94YXR0cl92YWx1ZV9yb290ICp4diA9CisJCShzdHJ1Y3Qgb2NmczJfeGF0dHJfdmFsdWVfcm9vdCAqKWV0LT5ldF9vYmplY3Q7CisKKwl4di0+eHJfbGFzdF9lYl9ibGsgPSBjcHVfdG9fbGU2NChibGtubyk7Cit9CisKK3N0YXRpYyB1NjQgb2NmczJfeGF0dHJfdmFsdWVfZ2V0X2xhc3RfZWJfYmxrKHN0cnVjdCBvY2ZzMl9leHRlbnRfdHJlZSAqZXQpCit7CisJc3RydWN0IG9jZnMyX3hhdHRyX3ZhbHVlX3Jvb3QgKnh2ID0KKwkJKHN0cnVjdCBvY2ZzMl94YXR0cl92YWx1ZV9yb290ICopIGV0LT5ldF9vYmplY3Q7CisKKwlyZXR1cm4gbGU2NF90b19jcHUoeHYtPnhyX2xhc3RfZWJfYmxrKTsKK30KKworc3RhdGljIHZvaWQgb2NmczJfeGF0dHJfdmFsdWVfdXBkYXRlX2NsdXN0ZXJzKHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCQkJCSAgICAgIHN0cnVjdCBvY2ZzMl9leHRlbnRfdHJlZSAqZXQsCisJCQkJCSAgICAgIHUzMiBjbHVzdGVycykKK3sKKwlzdHJ1Y3Qgb2NmczJfeGF0dHJfdmFsdWVfcm9vdCAqeHYgPQorCQkoc3RydWN0IG9jZnMyX3hhdHRyX3ZhbHVlX3Jvb3QgKilldC0+ZXRfb2JqZWN0OworCisJbGUzMl9hZGRfY3B1KCZ4di0+eHJfY2x1c3RlcnMsIGNsdXN0ZXJzKTsKK30KKworc3RhdGljIHN0cnVjdCBvY2ZzMl9leHRlbnRfdHJlZV9vcGVyYXRpb25zIG9jZnMyX3hhdHRyX3ZhbHVlX2V0X29wcyA9IHsKKwkuZW9fc2V0X2xhc3RfZWJfYmxrCT0gb2NmczJfeGF0dHJfdmFsdWVfc2V0X2xhc3RfZWJfYmxrLAorCS5lb19nZXRfbGFzdF9lYl9ibGsJPSBvY2ZzMl94YXR0cl92YWx1ZV9nZXRfbGFzdF9lYl9ibGssCisJLmVvX3VwZGF0ZV9jbHVzdGVycwk9IG9jZnMyX3hhdHRyX3ZhbHVlX3VwZGF0ZV9jbHVzdGVycywKKwkuZW9fZmlsbF9yb290X2VsCT0gb2NmczJfeGF0dHJfdmFsdWVfZmlsbF9yb290X2VsLAorfTsKKworc3RhdGljIHZvaWQgb2NmczJfeGF0dHJfdHJlZV9maWxsX3Jvb3RfZWwoc3RydWN0IG9jZnMyX2V4dGVudF90cmVlICpldCkKK3sKKwlzdHJ1Y3Qgb2NmczJfeGF0dHJfYmxvY2sgKnhiID0gZXQtPmV0X29iamVjdDsKKworCWV0LT5ldF9yb290X2VsID0gJnhiLT54Yl9hdHRycy54Yl9yb290Lnh0X2xpc3Q7Cit9CisKK3N0YXRpYyB2b2lkIG9jZnMyX3hhdHRyX3RyZWVfZmlsbF9tYXhfbGVhZl9jbHVzdGVycyhzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkJCQkJICAgIHN0cnVjdCBvY2ZzMl9leHRlbnRfdHJlZSAqZXQpCit7CisJZXQtPmV0X21heF9sZWFmX2NsdXN0ZXJzID0KKwkJb2NmczJfY2x1c3RlcnNfZm9yX2J5dGVzKGlub2RlLT5pX3NiLAorCQkJCQkgT0NGUzJfTUFYX1hBVFRSX1RSRUVfTEVBRl9TSVpFKTsKK30KKworc3RhdGljIHZvaWQgb2NmczJfeGF0dHJfdHJlZV9zZXRfbGFzdF9lYl9ibGsoc3RydWN0IG9jZnMyX2V4dGVudF90cmVlICpldCwKKwkJCQkJICAgICB1NjQgYmxrbm8pCit7CisJc3RydWN0IG9jZnMyX3hhdHRyX2Jsb2NrICp4YiA9IGV0LT5ldF9vYmplY3Q7CisJc3RydWN0IG9jZnMyX3hhdHRyX3RyZWVfcm9vdCAqeHQgPSAmeGItPnhiX2F0dHJzLnhiX3Jvb3Q7CisKKwl4dC0+eHRfbGFzdF9lYl9ibGsgPSBjcHVfdG9fbGU2NChibGtubyk7Cit9CisKK3N0YXRpYyB1NjQgb2NmczJfeGF0dHJfdHJlZV9nZXRfbGFzdF9lYl9ibGsoc3RydWN0IG9jZnMyX2V4dGVudF90cmVlICpldCkKK3sKKwlzdHJ1Y3Qgb2NmczJfeGF0dHJfYmxvY2sgKnhiID0gZXQtPmV0X29iamVjdDsKKwlzdHJ1Y3Qgb2NmczJfeGF0dHJfdHJlZV9yb290ICp4dCA9ICZ4Yi0+eGJfYXR0cnMueGJfcm9vdDsKKworCXJldHVybiBsZTY0X3RvX2NwdSh4dC0+eHRfbGFzdF9lYl9ibGspOworfQorCitzdGF0aWMgdm9pZCBvY2ZzMl94YXR0cl90cmVlX3VwZGF0ZV9jbHVzdGVycyhzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkJCQkgICAgIHN0cnVjdCBvY2ZzMl9leHRlbnRfdHJlZSAqZXQsCisJCQkJCSAgICAgdTMyIGNsdXN0ZXJzKQoreworCXN0cnVjdCBvY2ZzMl94YXR0cl9ibG9jayAqeGIgPSBldC0+ZXRfb2JqZWN0OworCisJbGUzMl9hZGRfY3B1KCZ4Yi0+eGJfYXR0cnMueGJfcm9vdC54dF9jbHVzdGVycywgY2x1c3RlcnMpOworfQorCitzdGF0aWMgc3RydWN0IG9jZnMyX2V4dGVudF90cmVlX29wZXJhdGlvbnMgb2NmczJfeGF0dHJfdHJlZV9ldF9vcHMgPSB7CisJLmVvX3NldF9sYXN0X2ViX2Jsawk9IG9jZnMyX3hhdHRyX3RyZWVfc2V0X2xhc3RfZWJfYmxrLAorCS5lb19nZXRfbGFzdF9lYl9ibGsJPSBvY2ZzMl94YXR0cl90cmVlX2dldF9sYXN0X2ViX2JsaywKKwkuZW9fdXBkYXRlX2NsdXN0ZXJzCT0gb2NmczJfeGF0dHJfdHJlZV91cGRhdGVfY2x1c3RlcnMsCisJLmVvX2ZpbGxfcm9vdF9lbAk9IG9jZnMyX3hhdHRyX3RyZWVfZmlsbF9yb290X2VsLAorCS5lb19maWxsX21heF9sZWFmX2NsdXN0ZXJzID0gb2NmczJfeGF0dHJfdHJlZV9maWxsX21heF9sZWFmX2NsdXN0ZXJzLAorfTsKKworc3RhdGljIHZvaWQgX19vY2ZzMl9pbml0X2V4dGVudF90cmVlKHN0cnVjdCBvY2ZzMl9leHRlbnRfdHJlZSAqZXQsCisJCQkJICAgICBzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkJCSAgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCwKKwkJCQkgICAgIHZvaWQgKm9iaiwKKwkJCQkgICAgIHN0cnVjdCBvY2ZzMl9leHRlbnRfdHJlZV9vcGVyYXRpb25zICpvcHMpCit7CisJZXQtPmV0X29wcyA9IG9wczsKKwlldC0+ZXRfcm9vdF9iaCA9IGJoOworCWlmICghb2JqKQorCQlvYmogPSAodm9pZCAqKWJoLT5iX2RhdGE7CisJZXQtPmV0X29iamVjdCA9IG9iajsKKworCWV0LT5ldF9vcHMtPmVvX2ZpbGxfcm9vdF9lbChldCk7CisJaWYgKCFldC0+ZXRfb3BzLT5lb19maWxsX21heF9sZWFmX2NsdXN0ZXJzKQorCQlldC0+ZXRfbWF4X2xlYWZfY2x1c3RlcnMgPSAwOworCWVsc2UKKwkJZXQtPmV0X29wcy0+ZW9fZmlsbF9tYXhfbGVhZl9jbHVzdGVycyhpbm9kZSwgZXQpOworfQorCit2b2lkIG9jZnMyX2luaXRfZGlub2RlX2V4dGVudF90cmVlKHN0cnVjdCBvY2ZzMl9leHRlbnRfdHJlZSAqZXQsCisJCQkJICAgc3RydWN0IGlub2RlICppbm9kZSwKKwkJCQkgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoKQoreworCV9fb2NmczJfaW5pdF9leHRlbnRfdHJlZShldCwgaW5vZGUsIGJoLCBOVUxMLCAmb2NmczJfZGlub2RlX2V0X29wcyk7Cit9CisKK3ZvaWQgb2NmczJfaW5pdF94YXR0cl90cmVlX2V4dGVudF90cmVlKHN0cnVjdCBvY2ZzMl9leHRlbnRfdHJlZSAqZXQsCisJCQkJICAgICAgIHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCQkJICAgICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgpCit7CisJX19vY2ZzMl9pbml0X2V4dGVudF90cmVlKGV0LCBpbm9kZSwgYmgsIE5VTEwsCisJCQkJICZvY2ZzMl94YXR0cl90cmVlX2V0X29wcyk7Cit9CisKK3ZvaWQgb2NmczJfaW5pdF94YXR0cl92YWx1ZV9leHRlbnRfdHJlZShzdHJ1Y3Qgb2NmczJfZXh0ZW50X3RyZWUgKmV0LAorCQkJCQlzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkJCQlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLAorCQkJCQlzdHJ1Y3Qgb2NmczJfeGF0dHJfdmFsdWVfcm9vdCAqeHYpCit7CisJX19vY2ZzMl9pbml0X2V4dGVudF90cmVlKGV0LCBpbm9kZSwgYmgsIHh2LAorCQkJCSAmb2NmczJfeGF0dHJfdmFsdWVfZXRfb3BzKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIG9jZnMyX2V0X3NldF9sYXN0X2ViX2JsayhzdHJ1Y3Qgb2NmczJfZXh0ZW50X3RyZWUgKmV0LAorCQkJCQkgICAgdTY0IG5ld19sYXN0X2ViX2JsaykKK3sKKwlldC0+ZXRfb3BzLT5lb19zZXRfbGFzdF9lYl9ibGsoZXQsIG5ld19sYXN0X2ViX2Jsayk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTY0IG9jZnMyX2V0X2dldF9sYXN0X2ViX2JsayhzdHJ1Y3Qgb2NmczJfZXh0ZW50X3RyZWUgKmV0KQoreworCXJldHVybiBldC0+ZXRfb3BzLT5lb19nZXRfbGFzdF9lYl9ibGsoZXQpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgb2NmczJfZXRfdXBkYXRlX2NsdXN0ZXJzKHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCQkJCSAgICBzdHJ1Y3Qgb2NmczJfZXh0ZW50X3RyZWUgKmV0LAorCQkJCQkgICAgdTMyIGNsdXN0ZXJzKQoreworCWV0LT5ldF9vcHMtPmVvX3VwZGF0ZV9jbHVzdGVycyhpbm9kZSwgZXQsIGNsdXN0ZXJzKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgb2NmczJfZXRfaW5zZXJ0X2NoZWNrKHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCQkJCXN0cnVjdCBvY2ZzMl9leHRlbnRfdHJlZSAqZXQsCisJCQkJCXN0cnVjdCBvY2ZzMl9leHRlbnRfcmVjICpyZWMpCit7CisJaW50IHJldCA9IDA7CisKKwlpZiAoZXQtPmV0X29wcy0+ZW9faW5zZXJ0X2NoZWNrKQorCQlyZXQgPSBldC0+ZXRfb3BzLT5lb19pbnNlcnRfY2hlY2soaW5vZGUsIGV0LCByZWMpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IG9jZnMyX2V0X3Nhbml0eV9jaGVjayhzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkJCQlzdHJ1Y3Qgb2NmczJfZXh0ZW50X3RyZWUgKmV0KQoreworCWludCByZXQgPSAwOworCisJaWYgKGV0LT5ldF9vcHMtPmVvX3Nhbml0eV9jaGVjaykKKwkJcmV0ID0gZXQtPmV0X29wcy0+ZW9fc2FuaXR5X2NoZWNrKGlub2RlLCBldCk7CisJcmV0dXJuIHJldDsKK30KKwogc3RhdGljIHZvaWQgb2NmczJfZnJlZV90cnVuY2F0ZV9jb250ZXh0KHN0cnVjdCBvY2ZzMl90cnVuY2F0ZV9jb250ZXh0ICp0Yyk7CiBzdGF0aWMgaW50IG9jZnMyX2NhY2hlX2V4dGVudF9ibG9ja19mcmVlKHN0cnVjdCBvY2ZzMl9jYWNoZWRfZGVhbGxvY19jdHh0ICpjdHh0LAogCQkJCQkgc3RydWN0IG9jZnMyX2V4dGVudF9ibG9jayAqZWIpOwpAQCAtMjA1LDE3ICs1MzksNiBAQAogfQogCiAvKgotICogQWxsb2NhdGUgYW5kIGluaXRpYWxpemUgYSBuZXcgcGF0aCBiYXNlZCBvbiBhIGRpc2sgaW5vZGUgdHJlZS4KLSAqLwotc3RhdGljIHN0cnVjdCBvY2ZzMl9wYXRoICpvY2ZzMl9uZXdfaW5vZGVfcGF0aChzdHJ1Y3QgYnVmZmVyX2hlYWQgKmRpX2JoKQotewotCXN0cnVjdCBvY2ZzMl9kaW5vZGUgKmRpID0gKHN0cnVjdCBvY2ZzMl9kaW5vZGUgKilkaV9iaC0+Yl9kYXRhOwotCXN0cnVjdCBvY2ZzMl9leHRlbnRfbGlzdCAqZWwgPSAmZGktPmlkMi5pX2xpc3Q7Ci0KLQlyZXR1cm4gb2NmczJfbmV3X3BhdGgoZGlfYmgsIGVsKTsKLX0KLQotLyoKICAqIENvbnZlbmllbmNlIGZ1bmN0aW9uIHRvIGpvdXJuYWwgYWxsIGNvbXBvbmVudHMgaW4gYSBwYXRoLgogICovCiBzdGF0aWMgaW50IG9jZnMyX2pvdXJuYWxfYWNjZXNzX3BhdGgoc3RydWN0IGlub2RlICppbm9kZSwgaGFuZGxlX3QgKmhhbmRsZSwKQEAgLTM2OCwzOSArNjkxLDM1IEBACiAgKi8KIGludCBvY2ZzMl9udW1fZnJlZV9leHRlbnRzKHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiLAogCQkJICAgc3RydWN0IGlub2RlICppbm9kZSwKLQkJCSAgIHN0cnVjdCBvY2ZzMl9kaW5vZGUgKmZlKQorCQkJICAgc3RydWN0IG9jZnMyX2V4dGVudF90cmVlICpldCkKIHsKIAlpbnQgcmV0dmFsOwotCXN0cnVjdCBvY2ZzMl9leHRlbnRfbGlzdCAqZWw7CisJc3RydWN0IG9jZnMyX2V4dGVudF9saXN0ICplbCA9IE5VTEw7CiAJc3RydWN0IG9jZnMyX2V4dGVudF9ibG9jayAqZWI7CiAJc3RydWN0IGJ1ZmZlcl9oZWFkICplYl9iaCA9IE5VTEw7CisJdTY0IGxhc3RfZWJfYmxrID0gMDsKIAogCW1sb2dfZW50cnlfdm9pZCgpOwogCi0JaWYgKCFPQ0ZTMl9JU19WQUxJRF9ESU5PREUoZmUpKSB7Ci0JCU9DRlMyX1JPX09OX0lOVkFMSURfRElOT0RFKGlub2RlLT5pX3NiLCBmZSk7Ci0JCXJldHZhbCA9IC1FSU87Ci0JCWdvdG8gYmFpbDsKLQl9CisJZWwgPSBldC0+ZXRfcm9vdF9lbDsKKwlsYXN0X2ViX2JsayA9IG9jZnMyX2V0X2dldF9sYXN0X2ViX2JsayhldCk7CiAKLQlpZiAoZmUtPmlfbGFzdF9lYl9ibGspIHsKLQkJcmV0dmFsID0gb2NmczJfcmVhZF9ibG9jayhvc2IsIGxlNjRfdG9fY3B1KGZlLT5pX2xhc3RfZWJfYmxrKSwKLQkJCQkJICAmZWJfYmgsIE9DRlMyX0JIX0NBQ0hFRCwgaW5vZGUpOworCWlmIChsYXN0X2ViX2JsaykgeworCQlyZXR2YWwgPSBvY2ZzMl9yZWFkX2Jsb2NrKGlub2RlLCBsYXN0X2ViX2JsaywKKwkJCQkJICAmZWJfYmgpOwogCQlpZiAocmV0dmFsIDwgMCkgewogCQkJbWxvZ19lcnJubyhyZXR2YWwpOwogCQkJZ290byBiYWlsOwogCQl9CiAJCWViID0gKHN0cnVjdCBvY2ZzMl9leHRlbnRfYmxvY2sgKikgZWJfYmgtPmJfZGF0YTsKIAkJZWwgPSAmZWItPmhfbGlzdDsKLQl9IGVsc2UKLQkJZWwgPSAmZmUtPmlkMi5pX2xpc3Q7CisJfQogCiAJQlVHX09OKGVsLT5sX3RyZWVfZGVwdGggIT0gMCk7CiAKIAlyZXR2YWwgPSBsZTE2X3RvX2NwdShlbC0+bF9jb3VudCkgLSBsZTE2X3RvX2NwdShlbC0+bF9uZXh0X2ZyZWVfcmVjKTsKIGJhaWw6Ci0JaWYgKGViX2JoKQotCQlicmVsc2UoZWJfYmgpOworCWJyZWxzZShlYl9iaCk7CiAKIAltbG9nX2V4aXQocmV0dmFsKTsKIAlyZXR1cm4gcmV0dmFsOwpAQCAtNDg2LDggKzgwNSw3IEBACiBiYWlsOgogCWlmIChzdGF0dXMgPCAwKSB7CiAJCWZvcihpID0gMDsgaSA8IHdhbnRlZDsgaSsrKSB7Ci0JCQlpZiAoYmhzW2ldKQotCQkJCWJyZWxzZShiaHNbaV0pOworCQkJYnJlbHNlKGJoc1tpXSk7CiAJCQliaHNbaV0gPSBOVUxMOwogCQl9CiAJfQpAQCAtNTMxLDcgKzg0OSw3IEBACiBzdGF0aWMgaW50IG9jZnMyX2FkZF9icmFuY2goc3RydWN0IG9jZnMyX3N1cGVyICpvc2IsCiAJCQkgICAgaGFuZGxlX3QgKmhhbmRsZSwKIAkJCSAgICBzdHJ1Y3QgaW5vZGUgKmlub2RlLAotCQkJICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqZmVfYmgsCisJCQkgICAgc3RydWN0IG9jZnMyX2V4dGVudF90cmVlICpldCwKIAkJCSAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmViX2JoLAogCQkJICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqKmxhc3RfZWJfYmgsCiAJCQkgICAgc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKm1ldGFfYWMpCkBAIC01NDAsNyArODU4LDYgQEAKIAl1NjQgbmV4dF9ibGtubywgbmV3X2xhc3RfZWJfYmxrOwogCXN0cnVjdCBidWZmZXJfaGVhZCAqYmg7CiAJc3RydWN0IGJ1ZmZlcl9oZWFkICoqbmV3X2ViX2JocyA9IE5VTEw7Ci0Jc3RydWN0IG9jZnMyX2Rpbm9kZSAqZmU7CiAJc3RydWN0IG9jZnMyX2V4dGVudF9ibG9jayAqZWI7CiAJc3RydWN0IG9jZnMyX2V4dGVudF9saXN0ICAqZWJfZWw7CiAJc3RydWN0IG9jZnMyX2V4dGVudF9saXN0ICAqZWw7CkBAIC01NTAsMTMgKzg2NywxMSBAQAogCiAJQlVHX09OKCFsYXN0X2ViX2JoIHx8ICEqbGFzdF9lYl9iaCk7CiAKLQlmZSA9IChzdHJ1Y3Qgb2NmczJfZGlub2RlICopIGZlX2JoLT5iX2RhdGE7Ci0KIAlpZiAoZWJfYmgpIHsKIAkJZWIgPSAoc3RydWN0IG9jZnMyX2V4dGVudF9ibG9jayAqKSBlYl9iaC0+Yl9kYXRhOwogCQllbCA9ICZlYi0+aF9saXN0OwogCX0gZWxzZQotCQllbCA9ICZmZS0+aWQyLmlfbGlzdDsKKwkJZWwgPSBldC0+ZXRfcm9vdF9lbDsKIAogCS8qIHdlIG5ldmVyIGFkZCBhIGJyYW5jaCB0byBhIGxlYWYuICovCiAJQlVHX09OKCFlbC0+bF90cmVlX2RlcHRoKTsKQEAgLTY0Niw3ICs5NjEsNyBAQAogCQltbG9nX2Vycm5vKHN0YXR1cyk7CiAJCWdvdG8gYmFpbDsKIAl9Ci0Jc3RhdHVzID0gb2NmczJfam91cm5hbF9hY2Nlc3MoaGFuZGxlLCBpbm9kZSwgZmVfYmgsCisJc3RhdHVzID0gb2NmczJfam91cm5hbF9hY2Nlc3MoaGFuZGxlLCBpbm9kZSwgZXQtPmV0X3Jvb3RfYmgsCiAJCQkJICAgICAgT0NGUzJfSk9VUk5BTF9BQ0NFU1NfV1JJVEUpOwogCWlmIChzdGF0dXMgPCAwKSB7CiAJCW1sb2dfZXJybm8oc3RhdHVzKTsKQEAgLTY2Miw3ICs5NzcsNyBAQAogCX0KIAogCS8qIExpbmsgdGhlIG5ldyBicmFuY2ggaW50byB0aGUgcmVzdCBvZiB0aGUgdHJlZSAoZWwgd2lsbAotCSAqIGVpdGhlciBiZSBvbiB0aGUgZmUsIG9yIHRoZSBleHRlbnQgYmxvY2sgcGFzc2VkIGluLiAqLworCSAqIGVpdGhlciBiZSBvbiB0aGUgcm9vdF9iaCwgb3IgdGhlIGV4dGVudCBibG9jayBwYXNzZWQgaW4uICovCiAJaSA9IGxlMTZfdG9fY3B1KGVsLT5sX25leHRfZnJlZV9yZWMpOwogCWVsLT5sX3JlY3NbaV0uZV9ibGtubyA9IGNwdV90b19sZTY0KG5leHRfYmxrbm8pOwogCWVsLT5sX3JlY3NbaV0uZV9jcG9zID0gY3B1X3RvX2xlMzIobmV3X2Nwb3MpOwpAQCAtNjcxLDcgKzk4Niw3IEBACiAKIAkvKiBmZSBuZWVkcyBhIG5ldyBsYXN0IGV4dGVudCBibG9jayBwb2ludGVyLCBhcyBkb2VzIHRoZQogCSAqIG5leHRfbGVhZiBvbiB0aGUgcHJldmlvdXNseSBsYXN0LWV4dGVudC1ibG9jay4gKi8KLQlmZS0+aV9sYXN0X2ViX2JsayA9IGNwdV90b19sZTY0KG5ld19sYXN0X2ViX2Jsayk7CisJb2NmczJfZXRfc2V0X2xhc3RfZWJfYmxrKGV0LCBuZXdfbGFzdF9lYl9ibGspOwogCiAJZWIgPSAoc3RydWN0IG9jZnMyX2V4dGVudF9ibG9jayAqKSAoKmxhc3RfZWJfYmgpLT5iX2RhdGE7CiAJZWItPmhfbmV4dF9sZWFmX2JsayA9IGNwdV90b19sZTY0KG5ld19sYXN0X2ViX2Jsayk7CkBAIC02NzksNyArOTk0LDcgQEAKIAlzdGF0dXMgPSBvY2ZzMl9qb3VybmFsX2RpcnR5KGhhbmRsZSwgKmxhc3RfZWJfYmgpOwogCWlmIChzdGF0dXMgPCAwKQogCQltbG9nX2Vycm5vKHN0YXR1cyk7Ci0Jc3RhdHVzID0gb2NmczJfam91cm5hbF9kaXJ0eShoYW5kbGUsIGZlX2JoKTsKKwlzdGF0dXMgPSBvY2ZzMl9qb3VybmFsX2RpcnR5KGhhbmRsZSwgZXQtPmV0X3Jvb3RfYmgpOwogCWlmIChzdGF0dXMgPCAwKQogCQltbG9nX2Vycm5vKHN0YXR1cyk7CiAJaWYgKGViX2JoKSB7CkBAIC03MDAsOCArMTAxNSw3IEBACiBiYWlsOgogCWlmIChuZXdfZWJfYmhzKSB7CiAJCWZvciAoaSA9IDA7IGkgPCBuZXdfYmxvY2tzOyBpKyspCi0JCQlpZiAobmV3X2ViX2Joc1tpXSkKLQkJCQlicmVsc2UobmV3X2ViX2Joc1tpXSk7CisJCQlicmVsc2UobmV3X2ViX2Joc1tpXSk7CiAJCWtmcmVlKG5ld19lYl9iaHMpOwogCX0KIApAQCAtNzE3LDE2ICsxMDMxLDE1IEBACiBzdGF0aWMgaW50IG9jZnMyX3NoaWZ0X3RyZWVfZGVwdGgoc3RydWN0IG9jZnMyX3N1cGVyICpvc2IsCiAJCQkJICBoYW5kbGVfdCAqaGFuZGxlLAogCQkJCSAgc3RydWN0IGlub2RlICppbm9kZSwKLQkJCQkgIHN0cnVjdCBidWZmZXJfaGVhZCAqZmVfYmgsCisJCQkJICBzdHJ1Y3Qgb2NmczJfZXh0ZW50X3RyZWUgKmV0LAogCQkJCSAgc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKm1ldGFfYWMsCiAJCQkJICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKipyZXRfbmV3X2ViX2JoKQogewogCWludCBzdGF0dXMsIGk7CiAJdTMyIG5ld19jbHVzdGVyczsKIAlzdHJ1Y3QgYnVmZmVyX2hlYWQgKm5ld19lYl9iaCA9IE5VTEw7Ci0Jc3RydWN0IG9jZnMyX2Rpbm9kZSAqZmU7CiAJc3RydWN0IG9jZnMyX2V4dGVudF9ibG9jayAqZWI7Ci0Jc3RydWN0IG9jZnMyX2V4dGVudF9saXN0ICAqZmVfZWw7CisJc3RydWN0IG9jZnMyX2V4dGVudF9saXN0ICAqcm9vdF9lbDsKIAlzdHJ1Y3Qgb2NmczJfZXh0ZW50X2xpc3QgICplYl9lbDsKIAogCW1sb2dfZW50cnlfdm9pZCgpOwpAQCAtNzQ2LDggKzEwNTksNyBAQAogCX0KIAogCWViX2VsID0gJmViLT5oX2xpc3Q7Ci0JZmUgPSAoc3RydWN0IG9jZnMyX2Rpbm9kZSAqKSBmZV9iaC0+Yl9kYXRhOwotCWZlX2VsID0gJmZlLT5pZDIuaV9saXN0OworCXJvb3RfZWwgPSBldC0+ZXRfcm9vdF9lbDsKIAogCXN0YXR1cyA9IG9jZnMyX2pvdXJuYWxfYWNjZXNzKGhhbmRsZSwgaW5vZGUsIG5ld19lYl9iaCwKIAkJCQkgICAgICBPQ0ZTMl9KT1VSTkFMX0FDQ0VTU19DUkVBVEUpOwpAQCAtNzU2LDExICsxMDY4LDExIEBACiAJCWdvdG8gYmFpbDsKIAl9CiAKLQkvKiBjb3B5IHRoZSBmZSBkYXRhIGludG8gdGhlIG5ldyBleHRlbnQgYmxvY2sgKi8KLQllYl9lbC0+bF90cmVlX2RlcHRoID0gZmVfZWwtPmxfdHJlZV9kZXB0aDsKLQllYl9lbC0+bF9uZXh0X2ZyZWVfcmVjID0gZmVfZWwtPmxfbmV4dF9mcmVlX3JlYzsKLQlmb3IoaSA9IDA7IGkgPCBsZTE2X3RvX2NwdShmZV9lbC0+bF9uZXh0X2ZyZWVfcmVjKTsgaSsrKQotCQllYl9lbC0+bF9yZWNzW2ldID0gZmVfZWwtPmxfcmVjc1tpXTsKKwkvKiBjb3B5IHRoZSByb290IGV4dGVudCBsaXN0IGRhdGEgaW50byB0aGUgbmV3IGV4dGVudCBibG9jayAqLworCWViX2VsLT5sX3RyZWVfZGVwdGggPSByb290X2VsLT5sX3RyZWVfZGVwdGg7CisJZWJfZWwtPmxfbmV4dF9mcmVlX3JlYyA9IHJvb3RfZWwtPmxfbmV4dF9mcmVlX3JlYzsKKwlmb3IgKGkgPSAwOyBpIDwgbGUxNl90b19jcHUocm9vdF9lbC0+bF9uZXh0X2ZyZWVfcmVjKTsgaSsrKQorCQllYl9lbC0+bF9yZWNzW2ldID0gcm9vdF9lbC0+bF9yZWNzW2ldOwogCiAJc3RhdHVzID0gb2NmczJfam91cm5hbF9kaXJ0eShoYW5kbGUsIG5ld19lYl9iaCk7CiAJaWYgKHN0YXR1cyA8IDApIHsKQEAgLTc2OCw3ICsxMDgwLDcgQEAKIAkJZ290byBiYWlsOwogCX0KIAotCXN0YXR1cyA9IG9jZnMyX2pvdXJuYWxfYWNjZXNzKGhhbmRsZSwgaW5vZGUsIGZlX2JoLAorCXN0YXR1cyA9IG9jZnMyX2pvdXJuYWxfYWNjZXNzKGhhbmRsZSwgaW5vZGUsIGV0LT5ldF9yb290X2JoLAogCQkJCSAgICAgIE9DRlMyX0pPVVJOQUxfQUNDRVNTX1dSSVRFKTsKIAlpZiAoc3RhdHVzIDwgMCkgewogCQltbG9nX2Vycm5vKHN0YXR1cyk7CkBAIC03NzcsMjEgKzEwODksMjEgQEAKIAogCW5ld19jbHVzdGVycyA9IG9jZnMyX3N1bV9yaWdodG1vc3RfcmVjKGViX2VsKTsKIAotCS8qIHVwZGF0ZSBmZSBub3cgKi8KLQlsZTE2X2FkZF9jcHUoJmZlX2VsLT5sX3RyZWVfZGVwdGgsIDEpOwotCWZlX2VsLT5sX3JlY3NbMF0uZV9jcG9zID0gMDsKLQlmZV9lbC0+bF9yZWNzWzBdLmVfYmxrbm8gPSBlYi0+aF9ibGtubzsKLQlmZV9lbC0+bF9yZWNzWzBdLmVfaW50X2NsdXN0ZXJzID0gY3B1X3RvX2xlMzIobmV3X2NsdXN0ZXJzKTsKLQlmb3IoaSA9IDE7IGkgPCBsZTE2X3RvX2NwdShmZV9lbC0+bF9uZXh0X2ZyZWVfcmVjKTsgaSsrKQotCQltZW1zZXQoJmZlX2VsLT5sX3JlY3NbaV0sIDAsIHNpemVvZihzdHJ1Y3Qgb2NmczJfZXh0ZW50X3JlYykpOwotCWZlX2VsLT5sX25leHRfZnJlZV9yZWMgPSBjcHVfdG9fbGUxNigxKTsKKwkvKiB1cGRhdGUgcm9vdF9iaCBub3cgKi8KKwlsZTE2X2FkZF9jcHUoJnJvb3RfZWwtPmxfdHJlZV9kZXB0aCwgMSk7CisJcm9vdF9lbC0+bF9yZWNzWzBdLmVfY3BvcyA9IDA7CisJcm9vdF9lbC0+bF9yZWNzWzBdLmVfYmxrbm8gPSBlYi0+aF9ibGtubzsKKwlyb290X2VsLT5sX3JlY3NbMF0uZV9pbnRfY2x1c3RlcnMgPSBjcHVfdG9fbGUzMihuZXdfY2x1c3RlcnMpOworCWZvciAoaSA9IDE7IGkgPCBsZTE2X3RvX2NwdShyb290X2VsLT5sX25leHRfZnJlZV9yZWMpOyBpKyspCisJCW1lbXNldCgmcm9vdF9lbC0+bF9yZWNzW2ldLCAwLCBzaXplb2Yoc3RydWN0IG9jZnMyX2V4dGVudF9yZWMpKTsKKwlyb290X2VsLT5sX25leHRfZnJlZV9yZWMgPSBjcHVfdG9fbGUxNigxKTsKIAogCS8qIElmIHRoaXMgaXMgb3VyIDFzdCB0cmVlIGRlcHRoIHNoaWZ0LCB0aGVuIGxhc3RfZWJfYmxrCiAJICogYmVjb21lcyB0aGUgYWxsb2NhdGVkIGV4dGVudCBibG9jayAqLwotCWlmIChmZV9lbC0+bF90cmVlX2RlcHRoID09IGNwdV90b19sZTE2KDEpKQotCQlmZS0+aV9sYXN0X2ViX2JsayA9IGViLT5oX2Jsa25vOworCWlmIChyb290X2VsLT5sX3RyZWVfZGVwdGggPT0gY3B1X3RvX2xlMTYoMSkpCisJCW9jZnMyX2V0X3NldF9sYXN0X2ViX2JsayhldCwgbGU2NF90b19jcHUoZWItPmhfYmxrbm8pKTsKIAotCXN0YXR1cyA9IG9jZnMyX2pvdXJuYWxfZGlydHkoaGFuZGxlLCBmZV9iaCk7CisJc3RhdHVzID0gb2NmczJfam91cm5hbF9kaXJ0eShoYW5kbGUsIGV0LT5ldF9yb290X2JoKTsKIAlpZiAoc3RhdHVzIDwgMCkgewogCQltbG9nX2Vycm5vKHN0YXR1cyk7CiAJCWdvdG8gYmFpbDsKQEAgLTgwMSw4ICsxMTEzLDcgQEAKIAluZXdfZWJfYmggPSBOVUxMOwogCXN0YXR1cyA9IDA7CiBiYWlsOgotCWlmIChuZXdfZWJfYmgpCi0JCWJyZWxzZShuZXdfZWJfYmgpOworCWJyZWxzZShuZXdfZWJfYmgpOwogCiAJbWxvZ19leGl0KHN0YXR1cyk7CiAJcmV0dXJuIHN0YXR1czsKQEAgLTgxNywyMiArMTEyOCwyMSBAQAogICogMSkgYSBsb3dlc3QgZXh0ZW50IGJsb2NrIGlzIGZvdW5kLCB0aGVuIHdlIHBhc3MgaXQgYmFjayBpbgogICogICAgKmxvd2VzdF9lYl9iaCBhbmQgcmV0dXJuICcwJwogICoKLSAqIDIpIHRoZSBzZWFyY2ggZmFpbHMgdG8gZmluZCBhbnl0aGluZywgYnV0IHRoZSBkaW5vZGUgaGFzIHJvb20uIFdlCisgKiAyKSB0aGUgc2VhcmNoIGZhaWxzIHRvIGZpbmQgYW55dGhpbmcsIGJ1dCB0aGUgcm9vdF9lbCBoYXMgcm9vbS4gV2UKICAqICAgIHBhc3MgTlVMTCBiYWNrIGluICpsb3dlc3RfZWJfYmgsIGJ1dCBzdGlsbCByZXR1cm4gJzAnCiAgKgotICogMykgdGhlIHNlYXJjaCBmYWlscyB0byBmaW5kIGFueXRoaW5nIEFORCB0aGUgZGlub2RlIGlzIGZ1bGwsIGluCisgKiAzKSB0aGUgc2VhcmNoIGZhaWxzIHRvIGZpbmQgYW55dGhpbmcgQU5EIHRoZSByb290X2VsIGlzIGZ1bGwsIGluCiAgKiAgICB3aGljaCBjYXNlIHdlIHJldHVybiA+IDAKICAqCiAgKiByZXR1cm4gc3RhdHVzIDwgMCBpbmRpY2F0ZXMgYW4gZXJyb3IuCiAgKi8KIHN0YXRpYyBpbnQgb2NmczJfZmluZF9icmFuY2hfdGFyZ2V0KHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiLAogCQkJCSAgICBzdHJ1Y3QgaW5vZGUgKmlub2RlLAotCQkJCSAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmZlX2JoLAorCQkJCSAgICBzdHJ1Y3Qgb2NmczJfZXh0ZW50X3RyZWUgKmV0LAogCQkJCSAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKip0YXJnZXRfYmgpCiB7CiAJaW50IHN0YXR1cyA9IDAsIGk7CiAJdTY0IGJsa25vOwotCXN0cnVjdCBvY2ZzMl9kaW5vZGUgKmZlOwogCXN0cnVjdCBvY2ZzMl9leHRlbnRfYmxvY2sgKmViOwogCXN0cnVjdCBvY2ZzMl9leHRlbnRfbGlzdCAgKmVsOwogCXN0cnVjdCBidWZmZXJfaGVhZCAqYmggPSBOVUxMOwpAQCAtODQyLDggKzExNTIsNyBAQAogCiAJKnRhcmdldF9iaCA9IE5VTEw7CiAKLQlmZSA9IChzdHJ1Y3Qgb2NmczJfZGlub2RlICopIGZlX2JoLT5iX2RhdGE7Ci0JZWwgPSAmZmUtPmlkMi5pX2xpc3Q7CisJZWwgPSBldC0+ZXRfcm9vdF9lbDsKIAogCXdoaWxlKGxlMTZfdG9fY3B1KGVsLT5sX3RyZWVfZGVwdGgpID4gMSkgewogCQlpZiAobGUxNl90b19jcHUoZWwtPmxfbmV4dF9mcmVlX3JlYykgPT0gMCkgewpAQCAtODY0LDEzICsxMTczLDEwIEBACiAJCQlnb3RvIGJhaWw7CiAJCX0KIAotCQlpZiAoYmgpIHsKLQkJCWJyZWxzZShiaCk7Ci0JCQliaCA9IE5VTEw7Ci0JCX0KKwkJYnJlbHNlKGJoKTsKKwkJYmggPSBOVUxMOwogCi0JCXN0YXR1cyA9IG9jZnMyX3JlYWRfYmxvY2sob3NiLCBibGtubywgJmJoLCBPQ0ZTMl9CSF9DQUNIRUQsCi0JCQkJCSAgaW5vZGUpOworCQlzdGF0dXMgPSBvY2ZzMl9yZWFkX2Jsb2NrKGlub2RlLCBibGtubywgJmJoKTsKIAkJaWYgKHN0YXR1cyA8IDApIHsKIAkJCW1sb2dfZXJybm8oc3RhdHVzKTsKIAkJCWdvdG8gYmFpbDsKQEAgLTg4Niw4ICsxMTkyLDcgQEAKIAogCQlpZiAobGUxNl90b19jcHUoZWwtPmxfbmV4dF9mcmVlX3JlYykgPAogCQkgICAgbGUxNl90b19jcHUoZWwtPmxfY291bnQpKSB7Ci0JCQlpZiAobG93ZXN0X2JoKQotCQkJCWJyZWxzZShsb3dlc3RfYmgpOworCQkJYnJlbHNlKGxvd2VzdF9iaCk7CiAJCQlsb3dlc3RfYmggPSBiaDsKIAkJCWdldF9iaChsb3dlc3RfYmgpOwogCQl9CkBAIC04OTUsMTQgKzEyMDAsMTMgQEAKIAogCS8qIElmIHdlIGRpZG4ndCBmaW5kIG9uZSBhbmQgdGhlIGZlIGRvZXNuJ3QgaGF2ZSBhbnkgcm9vbSwKIAkgKiB0aGVuIHJldHVybiAnMScgKi8KLQlpZiAoIWxvd2VzdF9iaAotCSAgICAmJiAoZmUtPmlkMi5pX2xpc3QubF9uZXh0X2ZyZWVfcmVjID09IGZlLT5pZDIuaV9saXN0LmxfY291bnQpKQorCWVsID0gZXQtPmV0X3Jvb3RfZWw7CisJaWYgKCFsb3dlc3RfYmggJiYgKGVsLT5sX25leHRfZnJlZV9yZWMgPT0gZWwtPmxfY291bnQpKQogCQlzdGF0dXMgPSAxOwogCiAJKnRhcmdldF9iaCA9IGxvd2VzdF9iaDsKIGJhaWw6Ci0JaWYgKGJoKQotCQlicmVsc2UoYmgpOworCWJyZWxzZShiaCk7CiAKIAltbG9nX2V4aXQoc3RhdHVzKTsKIAlyZXR1cm4gc3RhdHVzOwpAQCAtOTE5LDE5ICsxMjIzLDE5IEBACiAgKiAqbGFzdF9lYl9iaCB3aWxsIGJlIHVwZGF0ZWQgYnkgb2NmczJfYWRkX2JyYW5jaCgpLgogICovCiBzdGF0aWMgaW50IG9jZnMyX2dyb3dfdHJlZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBoYW5kbGVfdCAqaGFuZGxlLAotCQkJICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpkaV9iaCwgaW50ICpmaW5hbF9kZXB0aCwKKwkJCSAgIHN0cnVjdCBvY2ZzMl9leHRlbnRfdHJlZSAqZXQsIGludCAqZmluYWxfZGVwdGgsCiAJCQkgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKipsYXN0X2ViX2JoLAogCQkJICAgc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKm1ldGFfYWMpCiB7CiAJaW50IHJldCwgc2hpZnQ7Ci0Jc3RydWN0IG9jZnMyX2Rpbm9kZSAqZGkgPSAoc3RydWN0IG9jZnMyX2Rpbm9kZSAqKWRpX2JoLT5iX2RhdGE7Ci0JaW50IGRlcHRoID0gbGUxNl90b19jcHUoZGktPmlkMi5pX2xpc3QubF90cmVlX2RlcHRoKTsKKwlzdHJ1Y3Qgb2NmczJfZXh0ZW50X2xpc3QgKmVsID0gZXQtPmV0X3Jvb3RfZWw7CisJaW50IGRlcHRoID0gbGUxNl90b19jcHUoZWwtPmxfdHJlZV9kZXB0aCk7CiAJc3RydWN0IG9jZnMyX3N1cGVyICpvc2IgPSBPQ0ZTMl9TQihpbm9kZS0+aV9zYik7CiAJc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCA9IE5VTEw7CiAKIAlCVUdfT04obWV0YV9hYyA9PSBOVUxMKTsKIAotCXNoaWZ0ID0gb2NmczJfZmluZF9icmFuY2hfdGFyZ2V0KG9zYiwgaW5vZGUsIGRpX2JoLCAmYmgpOworCXNoaWZ0ID0gb2NmczJfZmluZF9icmFuY2hfdGFyZ2V0KG9zYiwgaW5vZGUsIGV0LCAmYmgpOwogCWlmIChzaGlmdCA8IDApIHsKIAkJcmV0ID0gc2hpZnQ7CiAJCW1sb2dfZXJybm8ocmV0KTsKQEAgLTk0OCw3ICsxMjUyLDcgQEAKIAkJLyogb2NmczJfc2hpZnRfdHJlZV9kZXB0aCB3aWxsIHJldHVybiB1cyBhIGJ1ZmZlciB3aXRoCiAJCSAqIHRoZSBuZXcgZXh0ZW50IGJsb2NrIChzbyB3ZSBjYW4gcGFzcyB0aGF0IHRvCiAJCSAqIG9jZnMyX2FkZF9icmFuY2gpLiAqLwotCQlyZXQgPSBvY2ZzMl9zaGlmdF90cmVlX2RlcHRoKG9zYiwgaGFuZGxlLCBpbm9kZSwgZGlfYmgsCisJCXJldCA9IG9jZnMyX3NoaWZ0X3RyZWVfZGVwdGgob3NiLCBoYW5kbGUsIGlub2RlLCBldCwKIAkJCQkJICAgICBtZXRhX2FjLCAmYmgpOwogCQlpZiAocmV0IDwgMCkgewogCQkJbWxvZ19lcnJubyhyZXQpOwpAQCAtOTc1LDcgKzEyNzksNyBAQAogCS8qIGNhbGwgb2NmczJfYWRkX2JyYW5jaCB0byBhZGQgdGhlIGZpbmFsIHBhcnQgb2YgdGhlIHRyZWUgd2l0aAogCSAqIHRoZSBuZXcgZGF0YS4gKi8KIAltbG9nKDAsICJhZGQgYnJhbmNoLiBiaCA9ICVwXG4iLCBiaCk7Ci0JcmV0ID0gb2NmczJfYWRkX2JyYW5jaChvc2IsIGhhbmRsZSwgaW5vZGUsIGRpX2JoLCBiaCwgbGFzdF9lYl9iaCwKKwlyZXQgPSBvY2ZzMl9hZGRfYnJhbmNoKG9zYiwgaGFuZGxlLCBpbm9kZSwgZXQsIGJoLCBsYXN0X2ViX2JoLAogCQkJICAgICAgIG1ldGFfYWMpOwogCWlmIChyZXQgPCAwKSB7CiAJCW1sb2dfZXJybm8ocmV0KTsKQEAgLTEyMzYsOCArMTU0MCw3IEBACiAKIAkJYnJlbHNlKGJoKTsKIAkJYmggPSBOVUxMOwotCQlyZXQgPSBvY2ZzMl9yZWFkX2Jsb2NrKE9DRlMyX1NCKGlub2RlLT5pX3NiKSwgYmxrbm8sCi0JCQkJICAgICAgICZiaCwgT0NGUzJfQkhfQ0FDSEVELCBpbm9kZSk7CisJCXJldCA9IG9jZnMyX3JlYWRfYmxvY2soaW5vZGUsIGJsa25vLCAmYmgpOwogCQlpZiAocmV0KSB7CiAJCQltbG9nX2Vycm5vKHJldCk7CiAJCQlnb3RvIG91dDsKQEAgLTIwNTgsMTEgKzIzNjEsMTEgQEAKIAkJCQkgICAgIHN0cnVjdCBvY2ZzMl9wYXRoICpyaWdodF9wYXRoLAogCQkJCSAgICAgaW50IHN1YnRyZWVfaW5kZXgsCiAJCQkJICAgICBzdHJ1Y3Qgb2NmczJfY2FjaGVkX2RlYWxsb2NfY3R4dCAqZGVhbGxvYywKLQkJCQkgICAgIGludCAqZGVsZXRlZCkKKwkJCQkgICAgIGludCAqZGVsZXRlZCwKKwkJCQkgICAgIHN0cnVjdCBvY2ZzMl9leHRlbnRfdHJlZSAqZXQpCiB7CiAJaW50IHJldCwgaSwgZGVsX3JpZ2h0X3N1YnRyZWUgPSAwLCByaWdodF9oYXNfZW1wdHkgPSAwOwotCXN0cnVjdCBidWZmZXJfaGVhZCAqcm9vdF9iaCwgKmRpX2JoID0gcGF0aF9yb290X2JoKHJpZ2h0X3BhdGgpOwotCXN0cnVjdCBvY2ZzMl9kaW5vZGUgKmRpID0gKHN0cnVjdCBvY2ZzMl9kaW5vZGUgKilkaV9iaC0+Yl9kYXRhOworCXN0cnVjdCBidWZmZXJfaGVhZCAqcm9vdF9iaCwgKmV0X3Jvb3RfYmggPSBwYXRoX3Jvb3RfYmgocmlnaHRfcGF0aCk7CiAJc3RydWN0IG9jZnMyX2V4dGVudF9saXN0ICpyaWdodF9sZWFmX2VsLCAqbGVmdF9sZWFmX2VsOwogCXN0cnVjdCBvY2ZzMl9leHRlbnRfYmxvY2sgKmViOwogCkBAIC0yMTE0LDcgKzI0MTcsNyBAQAogCQkgKiBXZSBoYXZlIHRvIHVwZGF0ZSBpX2xhc3RfZWJfYmxrIGR1cmluZyB0aGUgbWV0YQogCQkgKiBkYXRhIGRlbGV0ZS4KIAkJICovCi0JCXJldCA9IG9jZnMyX2pvdXJuYWxfYWNjZXNzKGhhbmRsZSwgaW5vZGUsIGRpX2JoLAorCQlyZXQgPSBvY2ZzMl9qb3VybmFsX2FjY2VzcyhoYW5kbGUsIGlub2RlLCBldF9yb290X2JoLAogCQkJCQkgICBPQ0ZTMl9KT1VSTkFMX0FDQ0VTU19XUklURSk7CiAJCWlmIChyZXQpIHsKIAkJCW1sb2dfZXJybm8ocmV0KTsKQEAgLTIxODksNyArMjQ5Miw3IEBACiAJCW9jZnMyX3VwZGF0ZV9lZGdlX2xlbmd0aHMoaW5vZGUsIGhhbmRsZSwgbGVmdF9wYXRoKTsKIAogCQllYiA9IChzdHJ1Y3Qgb2NmczJfZXh0ZW50X2Jsb2NrICopcGF0aF9sZWFmX2JoKGxlZnRfcGF0aCktPmJfZGF0YTsKLQkJZGktPmlfbGFzdF9lYl9ibGsgPSBlYi0+aF9ibGtubzsKKwkJb2NmczJfZXRfc2V0X2xhc3RfZWJfYmxrKGV0LCBsZTY0X3RvX2NwdShlYi0+aF9ibGtubykpOwogCiAJCS8qCiAJCSAqIFJlbW92YWwgb2YgdGhlIGV4dGVudCBpbiB0aGUgbGVmdCBsZWFmIHdhcyBza2lwcGVkCkBAIC0yMTk5LDcgKzI1MDIsNyBAQAogCQlpZiAocmlnaHRfaGFzX2VtcHR5KQogCQkJb2NmczJfcmVtb3ZlX2VtcHR5X2V4dGVudChsZWZ0X2xlYWZfZWwpOwogCi0JCXJldCA9IG9jZnMyX2pvdXJuYWxfZGlydHkoaGFuZGxlLCBkaV9iaCk7CisJCXJldCA9IG9jZnMyX2pvdXJuYWxfZGlydHkoaGFuZGxlLCBldF9yb290X2JoKTsKIAkJaWYgKHJldCkKIAkJCW1sb2dfZXJybm8ocmV0KTsKIApAQCAtMjMyMiw3ICsyNjI1LDggQEAKIAkJCQkgICAgaGFuZGxlX3QgKmhhbmRsZSwgaW50IG9yaWdfY3JlZGl0cywKIAkJCQkgICAgc3RydWN0IG9jZnMyX3BhdGggKnBhdGgsCiAJCQkJICAgIHN0cnVjdCBvY2ZzMl9jYWNoZWRfZGVhbGxvY19jdHh0ICpkZWFsbG9jLAotCQkJCSAgICBzdHJ1Y3Qgb2NmczJfcGF0aCAqKmVtcHR5X2V4dGVudF9wYXRoKQorCQkJCSAgICBzdHJ1Y3Qgb2NmczJfcGF0aCAqKmVtcHR5X2V4dGVudF9wYXRoLAorCQkJCSAgICBzdHJ1Y3Qgb2NmczJfZXh0ZW50X3RyZWUgKmV0KQogewogCWludCByZXQsIHN1YnRyZWVfcm9vdCwgZGVsZXRlZDsKIAl1MzIgcmlnaHRfY3BvczsKQEAgLTIzOTUsNyArMjY5OSw3IEBACiAKIAkJcmV0ID0gb2NmczJfcm90YXRlX3N1YnRyZWVfbGVmdChpbm9kZSwgaGFuZGxlLCBsZWZ0X3BhdGgsCiAJCQkJCQlyaWdodF9wYXRoLCBzdWJ0cmVlX3Jvb3QsCi0JCQkJCQlkZWFsbG9jLCAmZGVsZXRlZCk7CisJCQkJCQlkZWFsbG9jLCAmZGVsZXRlZCwgZXQpOwogCQlpZiAocmV0ID09IC1FQUdBSU4pIHsKIAkJCS8qCiAJCQkgKiBUaGUgcm90YXRpb24gaGFzIHRvIHRlbXBvcmFyaWx5IHN0b3AgZHVlIHRvCkBAIC0yNDM4LDI5ICsyNzQyLDIwIEBACiB9CiAKIHN0YXRpYyBpbnQgb2NmczJfcmVtb3ZlX3JpZ2h0bW9zdF9wYXRoKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGhhbmRsZV90ICpoYW5kbGUsCi0JCQkJICAgICAgIHN0cnVjdCBvY2ZzMl9wYXRoICpwYXRoLAotCQkJCSAgICAgICBzdHJ1Y3Qgb2NmczJfY2FjaGVkX2RlYWxsb2NfY3R4dCAqZGVhbGxvYykKKwkJCQlzdHJ1Y3Qgb2NmczJfcGF0aCAqcGF0aCwKKwkJCQlzdHJ1Y3Qgb2NmczJfY2FjaGVkX2RlYWxsb2NfY3R4dCAqZGVhbGxvYywKKwkJCQlzdHJ1Y3Qgb2NmczJfZXh0ZW50X3RyZWUgKmV0KQogewogCWludCByZXQsIHN1YnRyZWVfaW5kZXg7CiAJdTMyIGNwb3M7CiAJc3RydWN0IG9jZnMyX3BhdGggKmxlZnRfcGF0aCA9IE5VTEw7Ci0Jc3RydWN0IG9jZnMyX2Rpbm9kZSAqZGk7CiAJc3RydWN0IG9jZnMyX2V4dGVudF9ibG9jayAqZWI7CiAJc3RydWN0IG9jZnMyX2V4dGVudF9saXN0ICplbDsKIAotCS8qCi0JICogWFhYOiBUaGlzIGNvZGUgYXNzdW1lcyB0aGF0IHRoZSByb290IGlzIGFuIGlub2RlLCB3aGljaCBpcwotCSAqIHRydWUgZm9yIG5vdyBidXQgbWF5IGNoYW5nZSBhcyB0cmVlIGNvZGUgZ2V0cyBnZW5lcmljLgotCSAqLwotCWRpID0gKHN0cnVjdCBvY2ZzMl9kaW5vZGUgKilwYXRoX3Jvb3RfYmgocGF0aCktPmJfZGF0YTsKLQlpZiAoIU9DRlMyX0lTX1ZBTElEX0RJTk9ERShkaSkpIHsKLQkJcmV0ID0gLUVJTzsKLQkJb2NmczJfZXJyb3IoaW5vZGUtPmlfc2IsCi0JCQkgICAgIklub2RlICVsbHUgaGFzIGludmFsaWQgcGF0aCByb290IiwKLQkJCSAgICAodW5zaWduZWQgbG9uZyBsb25nKU9DRlMyX0koaW5vZGUpLT5pcF9ibGtubyk7Ci0JCWdvdG8gb3V0OwotCX0KIAorCXJldCA9IG9jZnMyX2V0X3Nhbml0eV9jaGVjayhpbm9kZSwgZXQpOworCWlmIChyZXQpCisJCWdvdG8gb3V0OwogCS8qCiAJICogVGhlcmUncyB0d28gd2F5cyB3ZSBoYW5kbGUgdGhpcyBkZXBlbmRpbmcgb24KIAkgKiB3aGV0aGVyIHBhdGggaXMgdGhlIG9ubHkgZXhpc3Rpbmcgb25lLgpAQCAtMjUxNyw3ICsyODEyLDcgQEAKIAkJb2NmczJfdXBkYXRlX2VkZ2VfbGVuZ3Rocyhpbm9kZSwgaGFuZGxlLCBsZWZ0X3BhdGgpOwogCiAJCWViID0gKHN0cnVjdCBvY2ZzMl9leHRlbnRfYmxvY2sgKilwYXRoX2xlYWZfYmgobGVmdF9wYXRoKS0+Yl9kYXRhOwotCQlkaS0+aV9sYXN0X2ViX2JsayA9IGViLT5oX2Jsa25vOworCQlvY2ZzMl9ldF9zZXRfbGFzdF9lYl9ibGsoZXQsIGxlNjRfdG9fY3B1KGViLT5oX2Jsa25vKSk7CiAJfSBlbHNlIHsKIAkJLyoKIAkJICogJ3BhdGgnIGlzIGFsc28gdGhlIGxlZnRtb3N0IHBhdGggd2hpY2gKQEAgLTI1MjgsMTIgKzI4MjMsMTIgQEAKIAkJICovCiAJCW9jZnMyX3VubGlua19wYXRoKGlub2RlLCBoYW5kbGUsIGRlYWxsb2MsIHBhdGgsIDEpOwogCi0JCWVsID0gJmRpLT5pZDIuaV9saXN0OworCQllbCA9IGV0LT5ldF9yb290X2VsOwogCQllbC0+bF90cmVlX2RlcHRoID0gMDsKIAkJZWwtPmxfbmV4dF9mcmVlX3JlYyA9IDA7CiAJCW1lbXNldCgmZWwtPmxfcmVjc1swXSwgMCwgc2l6ZW9mKHN0cnVjdCBvY2ZzMl9leHRlbnRfcmVjKSk7CiAKLQkJZGktPmlfbGFzdF9lYl9ibGsgPSAwOworCQlvY2ZzMl9ldF9zZXRfbGFzdF9lYl9ibGsoZXQsIDApOwogCX0KIAogCW9jZnMyX2pvdXJuYWxfZGlydHkoaGFuZGxlLCBwYXRoX3Jvb3RfYmgocGF0aCkpOwpAQCAtMjU2MSw3ICsyODU2LDggQEAKICAqLwogc3RhdGljIGludCBvY2ZzMl9yb3RhdGVfdHJlZV9sZWZ0KHN0cnVjdCBpbm9kZSAqaW5vZGUsIGhhbmRsZV90ICpoYW5kbGUsCiAJCQkJICBzdHJ1Y3Qgb2NmczJfcGF0aCAqcGF0aCwKLQkJCQkgIHN0cnVjdCBvY2ZzMl9jYWNoZWRfZGVhbGxvY19jdHh0ICpkZWFsbG9jKQorCQkJCSAgc3RydWN0IG9jZnMyX2NhY2hlZF9kZWFsbG9jX2N0eHQgKmRlYWxsb2MsCisJCQkJICBzdHJ1Y3Qgb2NmczJfZXh0ZW50X3RyZWUgKmV0KQogewogCWludCByZXQsIG9yaWdfY3JlZGl0cyA9IGhhbmRsZS0+aF9idWZmZXJfY3JlZGl0czsKIAlzdHJ1Y3Qgb2NmczJfcGF0aCAqdG1wX3BhdGggPSBOVUxMLCAqcmVzdGFydF9wYXRoID0gTlVMTDsKQEAgLTI1NzUsNyArMjg3MSw3IEBACiAJaWYgKHBhdGgtPnBfdHJlZV9kZXB0aCA9PSAwKSB7CiByaWdodG1vc3Rfbm9fZGVsZXRlOgogCQkvKgotCQkgKiBJbi1pbm9kZSBleHRlbnRzLiBUaGlzIGlzIHRyaXZpYWxseSBoYW5kbGVkLCBzbyBkbworCQkgKiBJbmxpbmUgZXh0ZW50cy4gVGhpcyBpcyB0cml2aWFsbHkgaGFuZGxlZCwgc28gZG8KIAkJICogaXQgdXAgZnJvbnQuCiAJCSAqLwogCQlyZXQgPSBvY2ZzMl9yb3RhdGVfcmlnaHRtb3N0X2xlYWZfbGVmdChpbm9kZSwgaGFuZGxlLApAQCAtMjYyOSw3ICsyOTI1LDcgQEAKIAkJICovCiAKIAkJcmV0ID0gb2NmczJfcmVtb3ZlX3JpZ2h0bW9zdF9wYXRoKGlub2RlLCBoYW5kbGUsIHBhdGgsCi0JCQkJCQkgIGRlYWxsb2MpOworCQkJCQkJICBkZWFsbG9jLCBldCk7CiAJCWlmIChyZXQpCiAJCQltbG9nX2Vycm5vKHJldCk7CiAJCWdvdG8gb3V0OwpAQCAtMjY0MSw3ICsyOTM3LDcgQEAKIAkgKi8KIHRyeV9yb3RhdGU6CiAJcmV0ID0gX19vY2ZzMl9yb3RhdGVfdHJlZV9sZWZ0KGlub2RlLCBoYW5kbGUsIG9yaWdfY3JlZGl0cywgcGF0aCwKLQkJCQkgICAgICAgZGVhbGxvYywgJnJlc3RhcnRfcGF0aCk7CisJCQkJICAgICAgIGRlYWxsb2MsICZyZXN0YXJ0X3BhdGgsIGV0KTsKIAlpZiAocmV0ICYmIHJldCAhPSAtRUFHQUlOKSB7CiAJCW1sb2dfZXJybm8ocmV0KTsKIAkJZ290byBvdXQ7CkBAIC0yNjUzLDcgKzI5NDksNyBAQAogCiAJCXJldCA9IF9fb2NmczJfcm90YXRlX3RyZWVfbGVmdChpbm9kZSwgaGFuZGxlLCBvcmlnX2NyZWRpdHMsCiAJCQkJCSAgICAgICB0bXBfcGF0aCwgZGVhbGxvYywKLQkJCQkJICAgICAgICZyZXN0YXJ0X3BhdGgpOworCQkJCQkgICAgICAgJnJlc3RhcnRfcGF0aCwgZXQpOwogCQlpZiAocmV0ICYmIHJldCAhPSAtRUFHQUlOKSB7CiAJCQltbG9nX2Vycm5vKHJldCk7CiAJCQlnb3RvIG91dDsKQEAgLTI5MzksNiArMzIzNSw3IEBACiAJCQkJaGFuZGxlX3QgKmhhbmRsZSwKIAkJCQlzdHJ1Y3Qgb2NmczJfZXh0ZW50X3JlYyAqc3BsaXRfcmVjLAogCQkJCXN0cnVjdCBvY2ZzMl9jYWNoZWRfZGVhbGxvY19jdHh0ICpkZWFsbG9jLAorCQkJCXN0cnVjdCBvY2ZzMl9leHRlbnRfdHJlZSAqZXQsCiAJCQkJaW50IGluZGV4KQogewogCWludCByZXQsIGksIHN1YnRyZWVfaW5kZXggPSAwLCBoYXNfZW1wdHlfZXh0ZW50ID0gMDsKQEAgLTMwNTksNyArMzM1Niw4IEBACiAJCSAgICBsZTE2X3RvX2NwdShlbC0+bF9uZXh0X2ZyZWVfcmVjKSA9PSAxKSB7CiAKIAkJCXJldCA9IG9jZnMyX3JlbW92ZV9yaWdodG1vc3RfcGF0aChpbm9kZSwgaGFuZGxlLAotCQkJCQkJCSAgcmlnaHRfcGF0aCwgZGVhbGxvYyk7CisJCQkJCQkJICByaWdodF9wYXRoLAorCQkJCQkJCSAgZGVhbGxvYywgZXQpOwogCQkJaWYgKHJldCkgewogCQkJCW1sb2dfZXJybm8ocmV0KTsKIAkJCQlnb3RvIG91dDsKQEAgLTMwODYsNyArMzM4NCw4IEBACiAJCQkJICAgICBpbnQgc3BsaXRfaW5kZXgsCiAJCQkJICAgICBzdHJ1Y3Qgb2NmczJfZXh0ZW50X3JlYyAqc3BsaXRfcmVjLAogCQkJCSAgICAgc3RydWN0IG9jZnMyX2NhY2hlZF9kZWFsbG9jX2N0eHQgKmRlYWxsb2MsCi0JCQkJICAgICBzdHJ1Y3Qgb2NmczJfbWVyZ2VfY3R4dCAqY3R4dCkKKwkJCQkgICAgIHN0cnVjdCBvY2ZzMl9tZXJnZV9jdHh0ICpjdHh0LAorCQkJCSAgICAgc3RydWN0IG9jZnMyX2V4dGVudF90cmVlICpldCkKIAogewogCWludCByZXQgPSAwOwpAQCAtMzEwNCw3ICszNDAzLDcgQEAKIAkJICogaWxsZWdhbC4KIAkJICovCiAJCXJldCA9IG9jZnMyX3JvdGF0ZV90cmVlX2xlZnQoaW5vZGUsIGhhbmRsZSwgcGF0aCwKLQkJCQkJICAgICBkZWFsbG9jKTsKKwkJCQkJICAgICBkZWFsbG9jLCBldCk7CiAJCWlmIChyZXQpIHsKIAkJCW1sb2dfZXJybm8ocmV0KTsKIAkJCWdvdG8gb3V0OwpAQCAtMzE0Nyw3ICszNDQ2LDggQEAKIAkJQlVHX09OKCFvY2ZzMl9pc19lbXB0eV9leHRlbnQoJmVsLT5sX3JlY3NbMF0pKTsKIAogCQkvKiBUaGUgbWVyZ2UgbGVmdCB1cyB3aXRoIGFuIGVtcHR5IGV4dGVudCwgcmVtb3ZlIGl0LiAqLwotCQlyZXQgPSBvY2ZzMl9yb3RhdGVfdHJlZV9sZWZ0KGlub2RlLCBoYW5kbGUsIHBhdGgsIGRlYWxsb2MpOworCQlyZXQgPSBvY2ZzMl9yb3RhdGVfdHJlZV9sZWZ0KGlub2RlLCBoYW5kbGUsIHBhdGgsCisJCQkJCSAgICAgZGVhbGxvYywgZXQpOwogCQlpZiAocmV0KSB7CiAJCQltbG9nX2Vycm5vKHJldCk7CiAJCQlnb3RvIG91dDsKQEAgLTMxNjEsNyArMzQ2MSw3IEBACiAJCSAqLwogCQlyZXQgPSBvY2ZzMl9tZXJnZV9yZWNfbGVmdChpbm9kZSwgcGF0aCwKIAkJCQkJICAgaGFuZGxlLCByZWMsCi0JCQkJCSAgIGRlYWxsb2MsCisJCQkJCSAgIGRlYWxsb2MsIGV0LAogCQkJCQkgICBzcGxpdF9pbmRleCk7CiAKIAkJaWYgKHJldCkgewpAQCAtMzE3MCw3ICszNDcwLDcgQEAKIAkJfQogCiAJCXJldCA9IG9jZnMyX3JvdGF0ZV90cmVlX2xlZnQoaW5vZGUsIGhhbmRsZSwgcGF0aCwKLQkJCQkJICAgICBkZWFsbG9jKTsKKwkJCQkJICAgICBkZWFsbG9jLCBldCk7CiAJCS8qCiAJCSAqIEVycm9yIGZyb20gdGhpcyBsYXN0IHJvdGF0ZSBpcyBub3QgY3JpdGljYWwsIHNvCiAJCSAqIHByaW50IGJ1dCBkb24ndCBidWJibGUgaXQgdXAuCkBAIC0zMTkwLDcgKzM0OTAsNyBAQAogCQkJcmV0ID0gb2NmczJfbWVyZ2VfcmVjX2xlZnQoaW5vZGUsCiAJCQkJCQkgICBwYXRoLAogCQkJCQkJICAgaGFuZGxlLCBzcGxpdF9yZWMsCi0JCQkJCQkgICBkZWFsbG9jLAorCQkJCQkJICAgZGVhbGxvYywgZXQsCiAJCQkJCQkgICBzcGxpdF9pbmRleCk7CiAJCQlpZiAocmV0KSB7CiAJCQkJbWxvZ19lcnJubyhyZXQpOwpAQCAtMzIxMyw3ICszNTEzLDcgQEAKIAkJCSAqIG91ciBsZWFmLiBUcnkgdG8gcm90YXRlIGl0IGF3YXkuCiAJCQkgKi8KIAkJCXJldCA9IG9jZnMyX3JvdGF0ZV90cmVlX2xlZnQoaW5vZGUsIGhhbmRsZSwgcGF0aCwKLQkJCQkJCSAgICAgZGVhbGxvYyk7CisJCQkJCQkgICAgIGRlYWxsb2MsIGV0KTsKIAkJCWlmIChyZXQpCiAJCQkJbWxvZ19lcnJubyhyZXQpOwogCQkJcmV0ID0gMDsKQEAgLTMzNDcsMTYgKzM2NDcsNiBAQAogCW9jZnMyX3JvdGF0ZV9sZWFmKGVsLCBpbnNlcnRfcmVjKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIG9jZnMyX3VwZGF0ZV9kaW5vZGVfY2x1c3RlcnMoc3RydWN0IGlub2RlICppbm9kZSwKLQkJCQkJCXN0cnVjdCBvY2ZzMl9kaW5vZGUgKmRpLAotCQkJCQkJdTMyIGNsdXN0ZXJzKQotewotCWxlMzJfYWRkX2NwdSgmZGktPmlfY2x1c3RlcnMsIGNsdXN0ZXJzKTsKLQlzcGluX2xvY2soJk9DRlMyX0koaW5vZGUpLT5pcF9sb2NrKTsKLQlPQ0ZTMl9JKGlub2RlKS0+aXBfY2x1c3RlcnMgPSBsZTMyX3RvX2NwdShkaS0+aV9jbHVzdGVycyk7Ci0Jc3Bpbl91bmxvY2soJk9DRlMyX0koaW5vZGUpLT5pcF9sb2NrKTsKLX0KLQogc3RhdGljIHZvaWQgb2NmczJfYWRqdXN0X3JpZ2h0bW9zdF9yZWNvcmRzKHN0cnVjdCBpbm9kZSAqaW5vZGUsCiAJCQkJCSAgIGhhbmRsZV90ICpoYW5kbGUsCiAJCQkJCSAgIHN0cnVjdCBvY2ZzMl9wYXRoICpwYXRoLApAQCAtMzU1OCw4ICszODQ4LDggQEAKIH0KIAogLyoKLSAqIFRoaXMgZnVuY3Rpb24gb25seSBkb2VzIGluc2VydHMgb24gYW4gYWxsb2NhdGlvbiBiLXRyZWUuIEZvciBkaW5vZGUKLSAqIGxpc3RzLCBvY2ZzMl9pbnNlcnRfYXRfbGVhZigpIGlzIGNhbGxlZCBkaXJlY3RseS4KKyAqIFRoaXMgZnVuY3Rpb24gb25seSBkb2VzIGluc2VydHMgb24gYW4gYWxsb2NhdGlvbiBiLXRyZWUuIEZvciB0cmVlCisgKiBkZXB0aCA9IDAsIG9jZnMyX2luc2VydF9hdF9sZWFmKCkgaXMgY2FsbGVkIGRpcmVjdGx5LgogICoKICAqIHJpZ2h0X3BhdGggaXMgdGhlIHBhdGggd2Ugd2FudCB0byBkbyB0aGUgYWN0dWFsIGluc2VydAogICogaW4uIGxlZnRfcGF0aCBzaG91bGQgb25seSBiZSBwYXNzZWQgaW4gaWYgd2UgbmVlZCB0byB1cGRhdGUgdGhhdApAQCAtMzY1Niw3ICszOTQ2LDcgQEAKIAogc3RhdGljIGludCBvY2ZzMl9kb19pbnNlcnRfZXh0ZW50KHN0cnVjdCBpbm9kZSAqaW5vZGUsCiAJCQkJICBoYW5kbGVfdCAqaGFuZGxlLAotCQkJCSAgc3RydWN0IGJ1ZmZlcl9oZWFkICpkaV9iaCwKKwkJCQkgIHN0cnVjdCBvY2ZzMl9leHRlbnRfdHJlZSAqZXQsCiAJCQkJICBzdHJ1Y3Qgb2NmczJfZXh0ZW50X3JlYyAqaW5zZXJ0X3JlYywKIAkJCQkgIHN0cnVjdCBvY2ZzMl9pbnNlcnRfdHlwZSAqdHlwZSkKIHsKQEAgLTM2NjQsMTMgKzM5NTQsMTEgQEAKIAl1MzIgY3BvczsKIAlzdHJ1Y3Qgb2NmczJfcGF0aCAqcmlnaHRfcGF0aCA9IE5VTEw7CiAJc3RydWN0IG9jZnMyX3BhdGggKmxlZnRfcGF0aCA9IE5VTEw7Ci0Jc3RydWN0IG9jZnMyX2Rpbm9kZSAqZGk7CiAJc3RydWN0IG9jZnMyX2V4dGVudF9saXN0ICplbDsKIAotCWRpID0gKHN0cnVjdCBvY2ZzMl9kaW5vZGUgKikgZGlfYmgtPmJfZGF0YTsKLQllbCA9ICZkaS0+aWQyLmlfbGlzdDsKKwllbCA9IGV0LT5ldF9yb290X2VsOwogCi0JcmV0ID0gb2NmczJfam91cm5hbF9hY2Nlc3MoaGFuZGxlLCBpbm9kZSwgZGlfYmgsCisJcmV0ID0gb2NmczJfam91cm5hbF9hY2Nlc3MoaGFuZGxlLCBpbm9kZSwgZXQtPmV0X3Jvb3RfYmgsCiAJCQkJICAgT0NGUzJfSk9VUk5BTF9BQ0NFU1NfV1JJVEUpOwogCWlmIChyZXQpIHsKIAkJbWxvZ19lcnJubyhyZXQpOwpAQCAtMzY4Miw3ICszOTcwLDcgQEAKIAkJZ290byBvdXRfdXBkYXRlX2NsdXN0ZXJzOwogCX0KIAotCXJpZ2h0X3BhdGggPSBvY2ZzMl9uZXdfaW5vZGVfcGF0aChkaV9iaCk7CisJcmlnaHRfcGF0aCA9IG9jZnMyX25ld19wYXRoKGV0LT5ldF9yb290X2JoLCBldC0+ZXRfcm9vdF9lbCk7CiAJaWYgKCFyaWdodF9wYXRoKSB7CiAJCXJldCA9IC1FTk9NRU07CiAJCW1sb2dfZXJybm8ocmV0KTsKQEAgLTM3MzIsNyArNDAyMCw3IEBACiAJCSAqIG9jZnMyX3JvdGF0ZV90cmVlX3JpZ2h0KCkgbWlnaHQgaGF2ZSBleHRlbmRlZCB0aGUKIAkJICogdHJhbnNhY3Rpb24gd2l0aG91dCByZS1qb3VybmFsaW5nIG91ciB0cmVlIHJvb3QuCiAJCSAqLwotCQlyZXQgPSBvY2ZzMl9qb3VybmFsX2FjY2VzcyhoYW5kbGUsIGlub2RlLCBkaV9iaCwKKwkJcmV0ID0gb2NmczJfam91cm5hbF9hY2Nlc3MoaGFuZGxlLCBpbm9kZSwgZXQtPmV0X3Jvb3RfYmgsCiAJCQkJCSAgIE9DRlMyX0pPVVJOQUxfQUNDRVNTX1dSSVRFKTsKIAkJaWYgKHJldCkgewogCQkJbWxvZ19lcnJubyhyZXQpOwpAQCAtMzc1NywxMCArNDA0NSwxMCBAQAogCiBvdXRfdXBkYXRlX2NsdXN0ZXJzOgogCWlmICh0eXBlLT5pbnNfc3BsaXQgPT0gU1BMSVRfTk9ORSkKLQkJb2NmczJfdXBkYXRlX2Rpbm9kZV9jbHVzdGVycyhpbm9kZSwgZGksCi0JCQkJCSAgICAgbGUxNl90b19jcHUoaW5zZXJ0X3JlYy0+ZV9sZWFmX2NsdXN0ZXJzKSk7CisJCW9jZnMyX2V0X3VwZGF0ZV9jbHVzdGVycyhpbm9kZSwgZXQsCisJCQkJCSBsZTE2X3RvX2NwdShpbnNlcnRfcmVjLT5lX2xlYWZfY2x1c3RlcnMpKTsKIAotCXJldCA9IG9jZnMyX2pvdXJuYWxfZGlydHkoaGFuZGxlLCBkaV9iaCk7CisJcmV0ID0gb2NmczJfam91cm5hbF9kaXJ0eShoYW5kbGUsIGV0LT5ldF9yb290X2JoKTsKIAlpZiAocmV0KQogCQltbG9nX2Vycm5vKHJldCk7CiAKQEAgLTM4OTAsNyArNDE3OCw4IEBACiBzdGF0aWMgdm9pZCBvY2ZzMl9maWd1cmVfY29udGlnX3R5cGUoc3RydWN0IGlub2RlICppbm9kZSwKIAkJCQkgICAgIHN0cnVjdCBvY2ZzMl9pbnNlcnRfdHlwZSAqaW5zZXJ0LAogCQkJCSAgICAgc3RydWN0IG9jZnMyX2V4dGVudF9saXN0ICplbCwKLQkJCQkgICAgIHN0cnVjdCBvY2ZzMl9leHRlbnRfcmVjICppbnNlcnRfcmVjKQorCQkJCSAgICAgc3RydWN0IG9jZnMyX2V4dGVudF9yZWMgKmluc2VydF9yZWMsCisJCQkJICAgICBzdHJ1Y3Qgb2NmczJfZXh0ZW50X3RyZWUgKmV0KQogewogCWludCBpOwogCWVudW0gb2NmczJfY29udGlnX3R5cGUgY29udGlnX3R5cGUgPSBDT05USUdfTk9ORTsKQEAgLTM5MDYsNiArNDE5NSwyMSBAQAogCQl9CiAJfQogCWluc2VydC0+aW5zX2NvbnRpZyA9IGNvbnRpZ190eXBlOworCisJaWYgKGluc2VydC0+aW5zX2NvbnRpZyAhPSBDT05USUdfTk9ORSkgeworCQlzdHJ1Y3Qgb2NmczJfZXh0ZW50X3JlYyAqcmVjID0KKwkJCQkmZWwtPmxfcmVjc1tpbnNlcnQtPmluc19jb250aWdfaW5kZXhdOworCQl1bnNpZ25lZCBpbnQgbGVuID0gbGUxNl90b19jcHUocmVjLT5lX2xlYWZfY2x1c3RlcnMpICsKKwkJCQkgICBsZTE2X3RvX2NwdShpbnNlcnRfcmVjLT5lX2xlYWZfY2x1c3RlcnMpOworCisJCS8qCisJCSAqIENhbGxlciBtaWdodCB3YW50IHVzIHRvIGxpbWl0IHRoZSBzaXplIG9mIGV4dGVudHMsIGRvbid0CisJCSAqIGNhbGN1bGF0ZSBjb250aWd1b3VzbmVzcyBpZiB3ZSBtaWdodCBleGNlZWQgdGhhdCBsaW1pdC4KKwkJICovCisJCWlmIChldC0+ZXRfbWF4X2xlYWZfY2x1c3RlcnMgJiYKKwkJICAgIChsZW4gPiBldC0+ZXRfbWF4X2xlYWZfY2x1c3RlcnMpKQorCQkJaW5zZXJ0LT5pbnNfY29udGlnID0gQ09OVElHX05PTkU7CisJfQogfQogCiAvKgpAQCAtMzkxNCw4ICs0MjE4LDggQEAKICAqIG9jZnMyX2ZpZ3VyZV9hcHBlbmRpbmdfdHlwZSgpIHdpbGwgZmlndXJlIG91dCB3aGV0aGVyIHdlJ2xsIGhhdmUgdG8KICAqIGluc2VydCBhdCB0aGUgdGFpbCBvZiB0aGUgcmlnaHRtb3N0IGxlYWYuCiAgKgotICogVGhpcyBzaG91bGQgYWxzbyB3b3JrIGFnYWluc3QgdGhlIGRpbm9kZSBsaXN0IGZvciB0cmVlJ3Mgd2l0aCAwCi0gKiBkZXB0aC4gSWYgd2UgY29uc2lkZXIgdGhlIGRpbm9kZSBsaXN0IHRvIGJlIHRoZSByaWdodG1vc3QgbGVhZiBub2RlCisgKiBUaGlzIHNob3VsZCBhbHNvIHdvcmsgYWdhaW5zdCB0aGUgcm9vdCBleHRlbnQgbGlzdCBmb3IgdHJlZSdzIHdpdGggMAorICogZGVwdGguIElmIHdlIGNvbnNpZGVyIHRoZSByb290IGV4dGVudCBsaXN0IHRvIGJlIHRoZSByaWdodG1vc3QgbGVhZiBub2RlCiAgKiB0aGVuIHRoZSBsb2dpYyBoZXJlIG1ha2VzIHNlbnNlLgogICovCiBzdGF0aWMgdm9pZCBvY2ZzMl9maWd1cmVfYXBwZW5kaW5nX3R5cGUoc3RydWN0IG9jZnMyX2luc2VydF90eXBlICppbnNlcnQsCkBAIC0zOTY2LDE0ICs0MjcwLDEzIEBACiAgKiBzdHJ1Y3R1cmUuCiAgKi8KIHN0YXRpYyBpbnQgb2NmczJfZmlndXJlX2luc2VydF90eXBlKHN0cnVjdCBpbm9kZSAqaW5vZGUsCi0JCQkJICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqZGlfYmgsCisJCQkJICAgIHN0cnVjdCBvY2ZzMl9leHRlbnRfdHJlZSAqZXQsCiAJCQkJICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqKmxhc3RfZWJfYmgsCiAJCQkJICAgIHN0cnVjdCBvY2ZzMl9leHRlbnRfcmVjICppbnNlcnRfcmVjLAogCQkJCSAgICBpbnQgKmZyZWVfcmVjb3JkcywKIAkJCQkgICAgc3RydWN0IG9jZnMyX2luc2VydF90eXBlICppbnNlcnQpCiB7CiAJaW50IHJldDsKLQlzdHJ1Y3Qgb2NmczJfZGlub2RlICpkaSA9IChzdHJ1Y3Qgb2NmczJfZGlub2RlICopZGlfYmgtPmJfZGF0YTsKIAlzdHJ1Y3Qgb2NmczJfZXh0ZW50X2Jsb2NrICplYjsKIAlzdHJ1Y3Qgb2NmczJfZXh0ZW50X2xpc3QgKmVsOwogCXN0cnVjdCBvY2ZzMl9wYXRoICpwYXRoID0gTlVMTDsKQEAgLTM5ODEsNyArNDI4NCw3IEBACiAKIAlpbnNlcnQtPmluc19zcGxpdCA9IFNQTElUX05PTkU7CiAKLQllbCA9ICZkaS0+aWQyLmlfbGlzdDsKKwllbCA9IGV0LT5ldF9yb290X2VsOwogCWluc2VydC0+aW5zX3RyZWVfZGVwdGggPSBsZTE2X3RvX2NwdShlbC0+bF90cmVlX2RlcHRoKTsKIAogCWlmIChlbC0+bF90cmVlX2RlcHRoKSB7CkBAIC0zOTkxLDkgKzQyOTQsNyBAQAogCQkgKiBvY2ZzMl9maWd1cmVfaW5zZXJ0X3R5cGUoKSBhbmQgb2NmczJfYWRkX2JyYW5jaCgpCiAJCSAqIG1heSB3YW50IGl0IGxhdGVyLgogCQkgKi8KLQkJcmV0ID0gb2NmczJfcmVhZF9ibG9jayhPQ0ZTMl9TQihpbm9kZS0+aV9zYiksCi0JCQkJICAgICAgIGxlNjRfdG9fY3B1KGRpLT5pX2xhc3RfZWJfYmxrKSwgJmJoLAotCQkJCSAgICAgICBPQ0ZTMl9CSF9DQUNIRUQsIGlub2RlKTsKKwkJcmV0ID0gb2NmczJfcmVhZF9ibG9jayhpbm9kZSwgb2NmczJfZXRfZ2V0X2xhc3RfZWJfYmxrKGV0KSwgJmJoKTsKIAkJaWYgKHJldCkgewogCQkJbWxvZ19leGl0KHJldCk7CiAJCQlnb3RvIG91dDsKQEAgLTQwMTQsMTIgKzQzMTUsMTIgQEAKIAkJbGUxNl90b19jcHUoZWwtPmxfbmV4dF9mcmVlX3JlYyk7CiAKIAlpZiAoIWluc2VydC0+aW5zX3RyZWVfZGVwdGgpIHsKLQkJb2NmczJfZmlndXJlX2NvbnRpZ190eXBlKGlub2RlLCBpbnNlcnQsIGVsLCBpbnNlcnRfcmVjKTsKKwkJb2NmczJfZmlndXJlX2NvbnRpZ190eXBlKGlub2RlLCBpbnNlcnQsIGVsLCBpbnNlcnRfcmVjLCBldCk7CiAJCW9jZnMyX2ZpZ3VyZV9hcHBlbmRpbmdfdHlwZShpbnNlcnQsIGVsLCBpbnNlcnRfcmVjKTsKIAkJcmV0dXJuIDA7CiAJfQogCi0JcGF0aCA9IG9jZnMyX25ld19pbm9kZV9wYXRoKGRpX2JoKTsKKwlwYXRoID0gb2NmczJfbmV3X3BhdGgoZXQtPmV0X3Jvb3RfYmgsIGV0LT5ldF9yb290X2VsKTsKIAlpZiAoIXBhdGgpIHsKIAkJcmV0ID0gLUVOT01FTTsKIAkJbWxvZ19lcnJubyhyZXQpOwpAQCAtNDA0OCw3ICs0MzQ5LDcgQEAKICAgICAgICAgICogICAgIGludG8gdHdvIHR5cGVzIG9mIGFwcGVuZHM6IHNpbXBsZSByZWNvcmQgYXBwZW5kLCBvciBhCiAgICAgICAgICAqICAgICByb3RhdGUgaW5zaWRlIHRoZSB0YWlsIGxlYWYuCiAJICovCi0Jb2NmczJfZmlndXJlX2NvbnRpZ190eXBlKGlub2RlLCBpbnNlcnQsIGVsLCBpbnNlcnRfcmVjKTsKKwlvY2ZzMl9maWd1cmVfY29udGlnX3R5cGUoaW5vZGUsIGluc2VydCwgZWwsIGluc2VydF9yZWMsIGV0KTsKIAogCS8qCiAJICogVGhlIGluc2VydCBjb2RlIGlzbid0IHF1aXRlIHJlYWR5IHRvIGRlYWwgd2l0aCBhbGwgY2FzZXMgb2YKQEAgLTQwNjksNyArNDM3MCw4IEBACiAJICogdGhlIGNhc2UgdGhhdCB3ZSdyZSBkb2luZyBhIHRhaWwgYXBwZW5kLCBzbyBtYXliZSB3ZSBjYW4KIAkgKiB0YWtlIGFkdmFudGFnZSBvZiB0aGF0IGluZm9ybWF0aW9uIHNvbWVob3cuCiAJICovCi0JaWYgKGxlNjRfdG9fY3B1KGRpLT5pX2xhc3RfZWJfYmxrKSA9PSBwYXRoX2xlYWZfYmgocGF0aCktPmJfYmxvY2tucikgeworCWlmIChvY2ZzMl9ldF9nZXRfbGFzdF9lYl9ibGsoZXQpID09CisJICAgIHBhdGhfbGVhZl9iaChwYXRoKS0+Yl9ibG9ja25yKSB7CiAJCS8qCiAJCSAqIE9rLCBvY2ZzMl9maW5kX3BhdGgoKSByZXR1cm5lZCB1cyB0aGUgcmlnaHRtb3N0CiAJCSAqIHRyZWUgcGF0aC4gVGhpcyBtaWdodCBiZSBhbiBhcHBlbmRpbmcgaW5zZXJ0LiBUaGVyZSBhcmUKQEAgLTQwOTksNyArNDQwMSw3IEBACiBpbnQgb2NmczJfaW5zZXJ0X2V4dGVudChzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiwKIAkJCWhhbmRsZV90ICpoYW5kbGUsCiAJCQlzdHJ1Y3QgaW5vZGUgKmlub2RlLAotCQkJc3RydWN0IGJ1ZmZlcl9oZWFkICpmZV9iaCwKKwkJCXN0cnVjdCBvY2ZzMl9leHRlbnRfdHJlZSAqZXQsCiAJCQl1MzIgY3BvcywKIAkJCXU2NCBzdGFydF9ibGssCiAJCQl1MzIgbmV3X2NsdXN0ZXJzLApAQCAtNDExMiwyNiArNDQxNCwyMSBAQAogCXN0cnVjdCBvY2ZzMl9pbnNlcnRfdHlwZSBpbnNlcnQgPSB7MCwgfTsKIAlzdHJ1Y3Qgb2NmczJfZXh0ZW50X3JlYyByZWM7CiAKLQlCVUdfT04oT0NGUzJfSShpbm9kZSktPmlwX2R5bl9mZWF0dXJlcyAmIE9DRlMyX0lOTElORV9EQVRBX0ZMKTsKLQogCW1sb2coMCwgImFkZCAldSBjbHVzdGVycyBhdCBwb3NpdGlvbiAldSB0byBpbm9kZSAlbGx1XG4iLAogCSAgICAgbmV3X2NsdXN0ZXJzLCBjcG9zLCAodW5zaWduZWQgbG9uZyBsb25nKU9DRlMyX0koaW5vZGUpLT5pcF9ibGtubyk7CiAKLQltbG9nX2J1Z19vbl9tc2coIW9jZnMyX3NwYXJzZV9hbGxvYyhvc2IpICYmCi0JCQkoT0NGUzJfSShpbm9kZSktPmlwX2NsdXN0ZXJzICE9IGNwb3MpLAotCQkJIkRldmljZSAlcywgYXNraW5nIGZvciBzcGFyc2UgYWxsb2NhdGlvbjogaW5vZGUgJWxsdSwgIgotCQkJImNwb3MgJXUsIGNsdXN0ZXJzICV1XG4iLAotCQkJb3NiLT5kZXZfc3RyLAotCQkJKHVuc2lnbmVkIGxvbmcgbG9uZylPQ0ZTMl9JKGlub2RlKS0+aXBfYmxrbm8sIGNwb3MsCi0JCQlPQ0ZTMl9JKGlub2RlKS0+aXBfY2x1c3RlcnMpOwotCiAJbWVtc2V0KCZyZWMsIDAsIHNpemVvZihyZWMpKTsKIAlyZWMuZV9jcG9zID0gY3B1X3RvX2xlMzIoY3Bvcyk7CiAJcmVjLmVfYmxrbm8gPSBjcHVfdG9fbGU2NChzdGFydF9ibGspOwogCXJlYy5lX2xlYWZfY2x1c3RlcnMgPSBjcHVfdG9fbGUxNihuZXdfY2x1c3RlcnMpOwogCXJlYy5lX2ZsYWdzID0gZmxhZ3M7CisJc3RhdHVzID0gb2NmczJfZXRfaW5zZXJ0X2NoZWNrKGlub2RlLCBldCwgJnJlYyk7CisJaWYgKHN0YXR1cykgeworCQltbG9nX2Vycm5vKHN0YXR1cyk7CisJCWdvdG8gYmFpbDsKKwl9CiAKLQlzdGF0dXMgPSBvY2ZzMl9maWd1cmVfaW5zZXJ0X3R5cGUoaW5vZGUsIGZlX2JoLCAmbGFzdF9lYl9iaCwgJnJlYywKKwlzdGF0dXMgPSBvY2ZzMl9maWd1cmVfaW5zZXJ0X3R5cGUoaW5vZGUsIGV0LCAmbGFzdF9lYl9iaCwgJnJlYywKIAkJCQkJICAmZnJlZV9yZWNvcmRzLCAmaW5zZXJ0KTsKIAlpZiAoc3RhdHVzIDwgMCkgewogCQltbG9nX2Vycm5vKHN0YXR1cyk7CkBAIC00MTQ1LDcgKzQ0NDIsNyBAQAogCSAgICAgZnJlZV9yZWNvcmRzLCBpbnNlcnQuaW5zX3RyZWVfZGVwdGgpOwogCiAJaWYgKGluc2VydC5pbnNfY29udGlnID09IENPTlRJR19OT05FICYmIGZyZWVfcmVjb3JkcyA9PSAwKSB7Ci0JCXN0YXR1cyA9IG9jZnMyX2dyb3dfdHJlZShpbm9kZSwgaGFuZGxlLCBmZV9iaCwKKwkJc3RhdHVzID0gb2NmczJfZ3Jvd190cmVlKGlub2RlLCBoYW5kbGUsIGV0LAogCQkJCQkgJmluc2VydC5pbnNfdHJlZV9kZXB0aCwgJmxhc3RfZWJfYmgsCiAJCQkJCSBtZXRhX2FjKTsKIAkJaWYgKHN0YXR1cykgewpAQCAtNDE1NSwyMCArNDQ1MiwxMjcgQEAKIAl9CiAKIAkvKiBGaW5hbGx5LCB3ZSBjYW4gYWRkIGNsdXN0ZXJzLiBUaGlzIG1pZ2h0IHJvdGF0ZSB0aGUgdHJlZSBmb3IgdXMuICovCi0Jc3RhdHVzID0gb2NmczJfZG9faW5zZXJ0X2V4dGVudChpbm9kZSwgaGFuZGxlLCBmZV9iaCwgJnJlYywgJmluc2VydCk7CisJc3RhdHVzID0gb2NmczJfZG9faW5zZXJ0X2V4dGVudChpbm9kZSwgaGFuZGxlLCBldCwgJnJlYywgJmluc2VydCk7CiAJaWYgKHN0YXR1cyA8IDApCiAJCW1sb2dfZXJybm8oc3RhdHVzKTsKLQllbHNlCisJZWxzZSBpZiAoZXQtPmV0X29wcyA9PSAmb2NmczJfZGlub2RlX2V0X29wcykKIAkJb2NmczJfZXh0ZW50X21hcF9pbnNlcnRfcmVjKGlub2RlLCAmcmVjKTsKIAogYmFpbDoKLQlpZiAobGFzdF9lYl9iaCkKLQkJYnJlbHNlKGxhc3RfZWJfYmgpOworCWJyZWxzZShsYXN0X2ViX2JoKTsKIAogCW1sb2dfZXhpdChzdGF0dXMpOwogCXJldHVybiBzdGF0dXM7CiB9CiAKKy8qCisgKiBBbGxjYXRlIGFuZCBhZGQgY2x1c3RlcnMgaW50byB0aGUgZXh0ZW50IGItdHJlZS4KKyAqIFRoZSBuZXcgY2x1c3RlcnMoY2x1c3RlcnNfdG9fYWRkKSB3aWxsIGJlIGluc2VydGVkIGF0IGxvZ2ljYWxfb2Zmc2V0LgorICogVGhlIGV4dGVudCBiLXRyZWUncyByb290IGlzIHNwZWNpZmllZCBieSBldCwgYW5kCisgKiBpdCBpcyBub3QgbGltaXRlZCB0byB0aGUgZmlsZSBzdG9yYWdlLiBBbnkgZXh0ZW50IHRyZWUgY2FuIHVzZSB0aGlzCisgKiBmdW5jdGlvbiBpZiBpdCBpbXBsZW1lbnRzIHRoZSBwcm9wZXIgb2NmczJfZXh0ZW50X3RyZWUuCisgKi8KK2ludCBvY2ZzMl9hZGRfY2x1c3RlcnNfaW5fYnRyZWUoc3RydWN0IG9jZnMyX3N1cGVyICpvc2IsCisJCQkJc3RydWN0IGlub2RlICppbm9kZSwKKwkJCQl1MzIgKmxvZ2ljYWxfb2Zmc2V0LAorCQkJCXUzMiBjbHVzdGVyc190b19hZGQsCisJCQkJaW50IG1hcmtfdW53cml0dGVuLAorCQkJCXN0cnVjdCBvY2ZzMl9leHRlbnRfdHJlZSAqZXQsCisJCQkJaGFuZGxlX3QgKmhhbmRsZSwKKwkJCQlzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqZGF0YV9hYywKKwkJCQlzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqbWV0YV9hYywKKwkJCQllbnVtIG9jZnMyX2FsbG9jX3Jlc3RhcnRlZCAqcmVhc29uX3JldCkKK3sKKwlpbnQgc3RhdHVzID0gMDsKKwlpbnQgZnJlZV9leHRlbnRzOworCWVudW0gb2NmczJfYWxsb2NfcmVzdGFydGVkIHJlYXNvbiA9IFJFU1RBUlRfTk9ORTsKKwl1MzIgYml0X29mZiwgbnVtX2JpdHM7CisJdTY0IGJsb2NrOworCXU4IGZsYWdzID0gMDsKKworCUJVR19PTighY2x1c3RlcnNfdG9fYWRkKTsKKworCWlmIChtYXJrX3Vud3JpdHRlbikKKwkJZmxhZ3MgPSBPQ0ZTMl9FWFRfVU5XUklUVEVOOworCisJZnJlZV9leHRlbnRzID0gb2NmczJfbnVtX2ZyZWVfZXh0ZW50cyhvc2IsIGlub2RlLCBldCk7CisJaWYgKGZyZWVfZXh0ZW50cyA8IDApIHsKKwkJc3RhdHVzID0gZnJlZV9leHRlbnRzOworCQltbG9nX2Vycm5vKHN0YXR1cyk7CisJCWdvdG8gbGVhdmU7CisJfQorCisJLyogdGhlcmUgYXJlIHR3byBjYXNlcyB3aGljaCBjb3VsZCBjYXVzZSB1cyB0byBFQUdBSU4gaW4gdGhlCisJICogd2UtbmVlZC1tb3JlLW1ldGFkYXRhIGNhc2U6CisJICogMSkgd2UgaGF2ZW4ndCByZXNlcnZlZCAqYW55KgorCSAqIDIpIHdlIGFyZSBzbyBmcmFnbWVudGVkLCB3ZSd2ZSBuZWVkZWQgdG8gYWRkIG1ldGFkYXRhIHRvbworCSAqICAgIG1hbnkgdGltZXMuICovCisJaWYgKCFmcmVlX2V4dGVudHMgJiYgIW1ldGFfYWMpIHsKKwkJbWxvZygwLCAid2UgaGF2ZW4ndCByZXNlcnZlZCBhbnkgbWV0YWRhdGEhXG4iKTsKKwkJc3RhdHVzID0gLUVBR0FJTjsKKwkJcmVhc29uID0gUkVTVEFSVF9NRVRBOworCQlnb3RvIGxlYXZlOworCX0gZWxzZSBpZiAoKCFmcmVlX2V4dGVudHMpCisJCSAgICYmIChvY2ZzMl9hbGxvY19jb250ZXh0X2JpdHNfbGVmdChtZXRhX2FjKQorCQkgICAgICAgPCBvY2ZzMl9leHRlbmRfbWV0YV9uZWVkZWQoZXQtPmV0X3Jvb3RfZWwpKSkgeworCQltbG9nKDAsICJmaWxlc3lzdGVtIGlzIHJlYWxseSBmcmFnbWVudGVkLi4uXG4iKTsKKwkJc3RhdHVzID0gLUVBR0FJTjsKKwkJcmVhc29uID0gUkVTVEFSVF9NRVRBOworCQlnb3RvIGxlYXZlOworCX0KKworCXN0YXR1cyA9IF9fb2NmczJfY2xhaW1fY2x1c3RlcnMob3NiLCBoYW5kbGUsIGRhdGFfYWMsIDEsCisJCQkJCWNsdXN0ZXJzX3RvX2FkZCwgJmJpdF9vZmYsICZudW1fYml0cyk7CisJaWYgKHN0YXR1cyA8IDApIHsKKwkJaWYgKHN0YXR1cyAhPSAtRU5PU1BDKQorCQkJbWxvZ19lcnJubyhzdGF0dXMpOworCQlnb3RvIGxlYXZlOworCX0KKworCUJVR19PTihudW1fYml0cyA+IGNsdXN0ZXJzX3RvX2FkZCk7CisKKwkvKiByZXNlcnZlIG91ciB3cml0ZSBlYXJseSAtLSBpbnNlcnRfZXh0ZW50IG1heSB1cGRhdGUgdGhlIGlub2RlICovCisJc3RhdHVzID0gb2NmczJfam91cm5hbF9hY2Nlc3MoaGFuZGxlLCBpbm9kZSwgZXQtPmV0X3Jvb3RfYmgsCisJCQkJICAgICAgT0NGUzJfSk9VUk5BTF9BQ0NFU1NfV1JJVEUpOworCWlmIChzdGF0dXMgPCAwKSB7CisJCW1sb2dfZXJybm8oc3RhdHVzKTsKKwkJZ290byBsZWF2ZTsKKwl9CisKKwlibG9jayA9IG9jZnMyX2NsdXN0ZXJzX3RvX2Jsb2Nrcyhvc2ItPnNiLCBiaXRfb2ZmKTsKKwltbG9nKDAsICJBbGxvY2F0aW5nICV1IGNsdXN0ZXJzIGF0IGJsb2NrICV1IGZvciBpbm9kZSAlbGx1XG4iLAorCSAgICAgbnVtX2JpdHMsIGJpdF9vZmYsICh1bnNpZ25lZCBsb25nIGxvbmcpT0NGUzJfSShpbm9kZSktPmlwX2Jsa25vKTsKKwlzdGF0dXMgPSBvY2ZzMl9pbnNlcnRfZXh0ZW50KG9zYiwgaGFuZGxlLCBpbm9kZSwgZXQsCisJCQkJICAgICAqbG9naWNhbF9vZmZzZXQsIGJsb2NrLAorCQkJCSAgICAgbnVtX2JpdHMsIGZsYWdzLCBtZXRhX2FjKTsKKwlpZiAoc3RhdHVzIDwgMCkgeworCQltbG9nX2Vycm5vKHN0YXR1cyk7CisJCWdvdG8gbGVhdmU7CisJfQorCisJc3RhdHVzID0gb2NmczJfam91cm5hbF9kaXJ0eShoYW5kbGUsIGV0LT5ldF9yb290X2JoKTsKKwlpZiAoc3RhdHVzIDwgMCkgeworCQltbG9nX2Vycm5vKHN0YXR1cyk7CisJCWdvdG8gbGVhdmU7CisJfQorCisJY2x1c3RlcnNfdG9fYWRkIC09IG51bV9iaXRzOworCSpsb2dpY2FsX29mZnNldCArPSBudW1fYml0czsKKworCWlmIChjbHVzdGVyc190b19hZGQpIHsKKwkJbWxvZygwLCAibmVlZCB0byBhbGxvYyBvbmNlIG1vcmUsIHdhbnRlZCA9ICV1XG4iLAorCQkgICAgIGNsdXN0ZXJzX3RvX2FkZCk7CisJCXN0YXR1cyA9IC1FQUdBSU47CisJCXJlYXNvbiA9IFJFU1RBUlRfVFJBTlM7CisJfQorCitsZWF2ZToKKwltbG9nX2V4aXQoc3RhdHVzKTsKKwlpZiAocmVhc29uX3JldCkKKwkJKnJlYXNvbl9yZXQgPSByZWFzb247CisJcmV0dXJuIHN0YXR1czsKK30KKwogc3RhdGljIHZvaWQgb2NmczJfbWFrZV9yaWdodF9zcGxpdF9yZWMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwKIAkJCQkgICAgICAgc3RydWN0IG9jZnMyX2V4dGVudF9yZWMgKnNwbGl0X3JlYywKIAkJCQkgICAgICAgdTMyIGNwb3MsCkBAIC00MTkyLDcgKzQ1OTYsNyBAQAogc3RhdGljIGludCBvY2ZzMl9zcGxpdF9hbmRfaW5zZXJ0KHN0cnVjdCBpbm9kZSAqaW5vZGUsCiAJCQkJICBoYW5kbGVfdCAqaGFuZGxlLAogCQkJCSAgc3RydWN0IG9jZnMyX3BhdGggKnBhdGgsCi0JCQkJICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmRpX2JoLAorCQkJCSAgc3RydWN0IG9jZnMyX2V4dGVudF90cmVlICpldCwKIAkJCQkgIHN0cnVjdCBidWZmZXJfaGVhZCAqKmxhc3RfZWJfYmgsCiAJCQkJICBpbnQgc3BsaXRfaW5kZXgsCiAJCQkJICBzdHJ1Y3Qgb2NmczJfZXh0ZW50X3JlYyAqb3JpZ19zcGxpdF9yZWMsCkBAIC00MjA2LDcgKzQ2MTAsNiBAQAogCXN0cnVjdCBvY2ZzMl9leHRlbnRfcmVjIHNwbGl0X3JlYyA9ICpvcmlnX3NwbGl0X3JlYzsKIAlzdHJ1Y3Qgb2NmczJfaW5zZXJ0X3R5cGUgaW5zZXJ0OwogCXN0cnVjdCBvY2ZzMl9leHRlbnRfYmxvY2sgKmViOwotCXN0cnVjdCBvY2ZzMl9kaW5vZGUgKmRpOwogCiBsZWZ0cmlnaHQ6CiAJLyoKQEAgLTQyMTUsOCArNDYxOCw3IEBACiAJICovCiAJcmVjID0gcGF0aF9sZWFmX2VsKHBhdGgpLT5sX3JlY3Nbc3BsaXRfaW5kZXhdOwogCi0JZGkgPSAoc3RydWN0IG9jZnMyX2Rpbm9kZSAqKWRpX2JoLT5iX2RhdGE7Ci0JcmlnaHRtb3N0X2VsID0gJmRpLT5pZDIuaV9saXN0OworCXJpZ2h0bW9zdF9lbCA9IGV0LT5ldF9yb290X2VsOwogCiAJZGVwdGggPSBsZTE2X3RvX2NwdShyaWdodG1vc3RfZWwtPmxfdHJlZV9kZXB0aCk7CiAJaWYgKGRlcHRoKSB7CkBAIC00MjI3LDggKzQ2MjksOCBAQAogCiAJaWYgKGxlMTZfdG9fY3B1KHJpZ2h0bW9zdF9lbC0+bF9uZXh0X2ZyZWVfcmVjKSA9PQogCSAgICBsZTE2X3RvX2NwdShyaWdodG1vc3RfZWwtPmxfY291bnQpKSB7Ci0JCXJldCA9IG9jZnMyX2dyb3dfdHJlZShpbm9kZSwgaGFuZGxlLCBkaV9iaCwgJmRlcHRoLCBsYXN0X2ViX2JoLAotCQkJCSAgICAgIG1ldGFfYWMpOworCQlyZXQgPSBvY2ZzMl9ncm93X3RyZWUoaW5vZGUsIGhhbmRsZSwgZXQsCisJCQkJICAgICAgJmRlcHRoLCBsYXN0X2ViX2JoLCBtZXRhX2FjKTsKIAkJaWYgKHJldCkgewogCQkJbWxvZ19lcnJubyhyZXQpOwogCQkJZ290byBvdXQ7CkBAIC00MjY1LDggKzQ2NjcsNyBAQAogCQlkb19sZWZ0cmlnaHQgPSAxOwogCX0KIAotCXJldCA9IG9jZnMyX2RvX2luc2VydF9leHRlbnQoaW5vZGUsIGhhbmRsZSwgZGlfYmgsICZzcGxpdF9yZWMsCi0JCQkJICAgICAmaW5zZXJ0KTsKKwlyZXQgPSBvY2ZzMl9kb19pbnNlcnRfZXh0ZW50KGlub2RlLCBoYW5kbGUsIGV0LCAmc3BsaXRfcmVjLCAmaW5zZXJ0KTsKIAlpZiAocmV0KSB7CiAJCW1sb2dfZXJybm8ocmV0KTsKIAkJZ290byBvdXQ7CkBAIC00MzA4LDggKzQ3MDksOSBAQAogICogb2YgdGhlIHRyZWUgaXMgcmVxdWlyZWQuIEFsbCBvdGhlciBjYXNlcyB3aWxsIGRlZ3JhZGUgaW50byBhIGxlc3MKICAqIG9wdGltYWwgdHJlZSBsYXlvdXQuCiAgKgotICogbGFzdF9lYl9iaCBzaG91bGQgYmUgdGhlIHJpZ2h0bW9zdCBsZWFmIGJsb2NrIGZvciBhbnkgaW5vZGUgd2l0aCBhCi0gKiBidHJlZS4gU2luY2UgYSBzcGxpdCBtYXkgZ3JvdyB0aGUgdHJlZSBvciBhIG1lcmdlIG1pZ2h0IHNocmluayBpdCwgdGhlIGNhbGxlciBjYW5ub3QgdHJ1c3QgdGhlIGNvbnRlbnRzIG9mIHRoYXQgYnVmZmVyIGFmdGVyIHRoaXMgY2FsbC4KKyAqIGxhc3RfZWJfYmggc2hvdWxkIGJlIHRoZSByaWdodG1vc3QgbGVhZiBibG9jayBmb3IgYW55IGV4dGVudAorICogYnRyZWUuIFNpbmNlIGEgc3BsaXQgbWF5IGdyb3cgdGhlIHRyZWUgb3IgYSBtZXJnZSBtaWdodCBzaHJpbmsgaXQsCisgKiB0aGUgY2FsbGVyIGNhbm5vdCB0cnVzdCB0aGUgY29udGVudHMgb2YgdGhhdCBidWZmZXIgYWZ0ZXIgdGhpcyBjYWxsLgogICoKICAqIFRoaXMgY29kZSBpcyBvcHRpbWl6ZWQgZm9yIHJlYWRhYmlsaXR5IC0gc2V2ZXJhbCBwYXNzZXMgbWlnaHQgYmUKICAqIG1hZGUgb3ZlciBjZXJ0YWluIHBvcnRpb25zIG9mIHRoZSB0cmVlLiBBbGwgb2YgdGhvc2UgYmxvY2tzIHdpbGwKQEAgLTQzMTcsNyArNDcxOSw3IEBACiAgKiBleHRyYSBvdmVyaGVhZCBpcyBub3QgZXhwcmVzc2VkIGluIHRlcm1zIG9mIGRpc2sgcmVhZHMuCiAgKi8KIHN0YXRpYyBpbnQgX19vY2ZzMl9tYXJrX2V4dGVudF93cml0dGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsCi0JCQkJICAgICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqZGlfYmgsCisJCQkJICAgICAgIHN0cnVjdCBvY2ZzMl9leHRlbnRfdHJlZSAqZXQsCiAJCQkJICAgICAgIGhhbmRsZV90ICpoYW5kbGUsCiAJCQkJICAgICAgIHN0cnVjdCBvY2ZzMl9wYXRoICpwYXRoLAogCQkJCSAgICAgICBpbnQgc3BsaXRfaW5kZXgsCkBAIC00MzU3LDExICs0NzU5LDkgQEAKIAkgKi8KIAlpZiAocGF0aC0+cF90cmVlX2RlcHRoKSB7CiAJCXN0cnVjdCBvY2ZzMl9leHRlbnRfYmxvY2sgKmViOwotCQlzdHJ1Y3Qgb2NmczJfZGlub2RlICpkaSA9IChzdHJ1Y3Qgb2NmczJfZGlub2RlICopZGlfYmgtPmJfZGF0YTsKIAotCQlyZXQgPSBvY2ZzMl9yZWFkX2Jsb2NrKE9DRlMyX1NCKGlub2RlLT5pX3NiKSwKLQkJCQkgICAgICAgbGU2NF90b19jcHUoZGktPmlfbGFzdF9lYl9ibGspLAotCQkJCSAgICAgICAmbGFzdF9lYl9iaCwgT0NGUzJfQkhfQ0FDSEVELCBpbm9kZSk7CisJCXJldCA9IG9jZnMyX3JlYWRfYmxvY2soaW5vZGUsIG9jZnMyX2V0X2dldF9sYXN0X2ViX2JsayhldCksCisJCQkJICAgICAgICZsYXN0X2ViX2JoKTsKIAkJaWYgKHJldCkgewogCQkJbWxvZ19leGl0KHJldCk7CiAJCQlnb3RvIG91dDsKQEAgLTQzOTQsNyArNDc5NCw3IEBACiAJCWlmIChjdHh0LmNfc3BsaXRfY292ZXJzX3JlYykKIAkJCWVsLT5sX3JlY3Nbc3BsaXRfaW5kZXhdID0gKnNwbGl0X3JlYzsKIAkJZWxzZQotCQkJcmV0ID0gb2NmczJfc3BsaXRfYW5kX2luc2VydChpbm9kZSwgaGFuZGxlLCBwYXRoLCBkaV9iaCwKKwkJCXJldCA9IG9jZnMyX3NwbGl0X2FuZF9pbnNlcnQoaW5vZGUsIGhhbmRsZSwgcGF0aCwgZXQsCiAJCQkJCQkgICAgICZsYXN0X2ViX2JoLCBzcGxpdF9pbmRleCwKIAkJCQkJCSAgICAgc3BsaXRfcmVjLCBtZXRhX2FjKTsKIAkJaWYgKHJldCkKQEAgLTQ0MDIsNyArNDgwMiw3IEBACiAJfSBlbHNlIHsKIAkJcmV0ID0gb2NmczJfdHJ5X3RvX21lcmdlX2V4dGVudChpbm9kZSwgaGFuZGxlLCBwYXRoLAogCQkJCQkJc3BsaXRfaW5kZXgsIHNwbGl0X3JlYywKLQkJCQkJCWRlYWxsb2MsICZjdHh0KTsKKwkJCQkJCWRlYWxsb2MsICZjdHh0LCBldCk7CiAJCWlmIChyZXQpCiAJCQltbG9nX2Vycm5vKHJldCk7CiAJfQpAQCAtNDQyMCw3ICs0ODIwLDggQEAKICAqCiAgKiBUaGUgY2FsbGVyIGlzIHJlc3BvbnNpYmxlIGZvciBwYXNzaW5nIGRvd24gbWV0YV9hYyBpZiB3ZSdsbCBuZWVkIGl0LgogICovCi1pbnQgb2NmczJfbWFya19leHRlbnRfd3JpdHRlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmRpX2JoLAoraW50IG9jZnMyX21hcmtfZXh0ZW50X3dyaXR0ZW4oc3RydWN0IGlub2RlICppbm9kZSwKKwkJCSAgICAgIHN0cnVjdCBvY2ZzMl9leHRlbnRfdHJlZSAqZXQsCiAJCQkgICAgICBoYW5kbGVfdCAqaGFuZGxlLCB1MzIgY3BvcywgdTMyIGxlbiwgdTMyIHBoeXMsCiAJCQkgICAgICBzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqbWV0YV9hYywKIAkJCSAgICAgIHN0cnVjdCBvY2ZzMl9jYWNoZWRfZGVhbGxvY19jdHh0ICpkZWFsbG9jKQpAQCAtNDQ0NiwxMCArNDg0NywxNCBAQAogCS8qCiAJICogWFhYOiBUaGlzIHNob3VsZCBiZSBmaXhlZCB1cCBzbyB0aGF0IHdlIGp1c3QgcmUtaW5zZXJ0IHRoZQogCSAqIG5leHQgZXh0ZW50IHJlY29yZHMuCisJICoKKwkgKiBYWFg6IFRoaXMgaXMgYSBoYWNrIG9uIHRoZSBleHRlbnQgdHJlZSwgbWF5YmUgaXQgc2hvdWxkIGJlCisJICogYW4gb3A/CiAJICovCi0Jb2NmczJfZXh0ZW50X21hcF90cnVuYyhpbm9kZSwgMCk7CisJaWYgKGV0LT5ldF9vcHMgPT0gJm9jZnMyX2Rpbm9kZV9ldF9vcHMpCisJCW9jZnMyX2V4dGVudF9tYXBfdHJ1bmMoaW5vZGUsIDApOwogCi0JbGVmdF9wYXRoID0gb2NmczJfbmV3X2lub2RlX3BhdGgoZGlfYmgpOworCWxlZnRfcGF0aCA9IG9jZnMyX25ld19wYXRoKGV0LT5ldF9yb290X2JoLCBldC0+ZXRfcm9vdF9lbCk7CiAJaWYgKCFsZWZ0X3BhdGgpIHsKIAkJcmV0ID0gLUVOT01FTTsKIAkJbWxvZ19lcnJubyhyZXQpOwpAQCAtNDQ4MCw4ICs0ODg1LDkgQEAKIAlzcGxpdF9yZWMuZV9mbGFncyA9IHBhdGhfbGVhZl9lbChsZWZ0X3BhdGgpLT5sX3JlY3NbaW5kZXhdLmVfZmxhZ3M7CiAJc3BsaXRfcmVjLmVfZmxhZ3MgJj0gfk9DRlMyX0VYVF9VTldSSVRURU47CiAKLQlyZXQgPSBfX29jZnMyX21hcmtfZXh0ZW50X3dyaXR0ZW4oaW5vZGUsIGRpX2JoLCBoYW5kbGUsIGxlZnRfcGF0aCwKLQkJCQkJICBpbmRleCwgJnNwbGl0X3JlYywgbWV0YV9hYywgZGVhbGxvYyk7CisJcmV0ID0gX19vY2ZzMl9tYXJrX2V4dGVudF93cml0dGVuKGlub2RlLCBldCwgaGFuZGxlLCBsZWZ0X3BhdGgsCisJCQkJCSAgaW5kZXgsICZzcGxpdF9yZWMsIG1ldGFfYWMsCisJCQkJCSAgZGVhbGxvYyk7CiAJaWYgKHJldCkKIAkJbWxvZ19lcnJubyhyZXQpOwogCkBAIC00NDkwLDEzICs0ODk2LDEyIEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBvY2ZzMl9zcGxpdF90cmVlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBidWZmZXJfaGVhZCAqZGlfYmgsCitzdGF0aWMgaW50IG9jZnMyX3NwbGl0X3RyZWUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IG9jZnMyX2V4dGVudF90cmVlICpldCwKIAkJCSAgICBoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3Qgb2NmczJfcGF0aCAqcGF0aCwKIAkJCSAgICBpbnQgaW5kZXgsIHUzMiBuZXdfcmFuZ2UsCiAJCQkgICAgc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKm1ldGFfYWMpCiB7CiAJaW50IHJldCwgZGVwdGgsIGNyZWRpdHMgPSBoYW5kbGUtPmhfYnVmZmVyX2NyZWRpdHM7Ci0Jc3RydWN0IG9jZnMyX2Rpbm9kZSAqZGkgPSAoc3RydWN0IG9jZnMyX2Rpbm9kZSAqKWRpX2JoLT5iX2RhdGE7CiAJc3RydWN0IGJ1ZmZlcl9oZWFkICpsYXN0X2ViX2JoID0gTlVMTDsKIAlzdHJ1Y3Qgb2NmczJfZXh0ZW50X2Jsb2NrICplYjsKIAlzdHJ1Y3Qgb2NmczJfZXh0ZW50X2xpc3QgKnJpZ2h0bW9zdF9lbCwgKmVsOwpAQCAtNDUxMyw5ICs0OTE4LDggQEAKIAogCWRlcHRoID0gcGF0aC0+cF90cmVlX2RlcHRoOwogCWlmIChkZXB0aCA+IDApIHsKLQkJcmV0ID0gb2NmczJfcmVhZF9ibG9jayhPQ0ZTMl9TQihpbm9kZS0+aV9zYiksCi0JCQkJICAgICAgIGxlNjRfdG9fY3B1KGRpLT5pX2xhc3RfZWJfYmxrKSwKLQkJCQkgICAgICAgJmxhc3RfZWJfYmgsIE9DRlMyX0JIX0NBQ0hFRCwgaW5vZGUpOworCQlyZXQgPSBvY2ZzMl9yZWFkX2Jsb2NrKGlub2RlLCBvY2ZzMl9ldF9nZXRfbGFzdF9lYl9ibGsoZXQpLAorCQkJCSAgICAgICAmbGFzdF9lYl9iaCk7CiAJCWlmIChyZXQgPCAwKSB7CiAJCQltbG9nX2Vycm5vKHJldCk7CiAJCQlnb3RvIG91dDsKQEAgLTQ1MjYsNyArNDkzMCw4IEBACiAJfSBlbHNlCiAJCXJpZ2h0bW9zdF9lbCA9IHBhdGhfbGVhZl9lbChwYXRoKTsKIAotCWNyZWRpdHMgKz0gcGF0aC0+cF90cmVlX2RlcHRoICsgb2NmczJfZXh0ZW5kX21ldGFfbmVlZGVkKGRpKTsKKwljcmVkaXRzICs9IHBhdGgtPnBfdHJlZV9kZXB0aCArCisJCSAgIG9jZnMyX2V4dGVuZF9tZXRhX25lZWRlZChldC0+ZXRfcm9vdF9lbCk7CiAJcmV0ID0gb2NmczJfZXh0ZW5kX3RyYW5zKGhhbmRsZSwgY3JlZGl0cyk7CiAJaWYgKHJldCkgewogCQltbG9nX2Vycm5vKHJldCk7CkBAIC00NTM1LDcgKzQ5NDAsNyBAQAogCiAJaWYgKGxlMTZfdG9fY3B1KHJpZ2h0bW9zdF9lbC0+bF9uZXh0X2ZyZWVfcmVjKSA9PQogCSAgICBsZTE2X3RvX2NwdShyaWdodG1vc3RfZWwtPmxfY291bnQpKSB7Ci0JCXJldCA9IG9jZnMyX2dyb3dfdHJlZShpbm9kZSwgaGFuZGxlLCBkaV9iaCwgJmRlcHRoLCAmbGFzdF9lYl9iaCwKKwkJcmV0ID0gb2NmczJfZ3Jvd190cmVlKGlub2RlLCBoYW5kbGUsIGV0LCAmZGVwdGgsICZsYXN0X2ViX2JoLAogCQkJCSAgICAgIG1ldGFfYWMpOwogCQlpZiAocmV0KSB7CiAJCQltbG9nX2Vycm5vKHJldCk7CkBAIC00NTQ5LDcgKzQ5NTQsNyBAQAogCWluc2VydC5pbnNfc3BsaXQgPSBTUExJVF9SSUdIVDsKIAlpbnNlcnQuaW5zX3RyZWVfZGVwdGggPSBkZXB0aDsKIAotCXJldCA9IG9jZnMyX2RvX2luc2VydF9leHRlbnQoaW5vZGUsIGhhbmRsZSwgZGlfYmgsICZzcGxpdF9yZWMsICZpbnNlcnQpOworCXJldCA9IG9jZnMyX2RvX2luc2VydF9leHRlbnQoaW5vZGUsIGhhbmRsZSwgZXQsICZzcGxpdF9yZWMsICZpbnNlcnQpOwogCWlmIChyZXQpCiAJCW1sb2dfZXJybm8ocmV0KTsKIApAQCAtNDU2MSw3ICs0OTY2LDggQEAKIHN0YXRpYyBpbnQgb2NmczJfdHJ1bmNhdGVfcmVjKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGhhbmRsZV90ICpoYW5kbGUsCiAJCQkgICAgICBzdHJ1Y3Qgb2NmczJfcGF0aCAqcGF0aCwgaW50IGluZGV4LAogCQkJICAgICAgc3RydWN0IG9jZnMyX2NhY2hlZF9kZWFsbG9jX2N0eHQgKmRlYWxsb2MsCi0JCQkgICAgICB1MzIgY3BvcywgdTMyIGxlbikKKwkJCSAgICAgIHUzMiBjcG9zLCB1MzIgbGVuLAorCQkJICAgICAgc3RydWN0IG9jZnMyX2V4dGVudF90cmVlICpldCkKIHsKIAlpbnQgcmV0OwogCXUzMiBsZWZ0X2Nwb3MsIHJlY19yYW5nZSwgdHJ1bmNfcmFuZ2U7CkBAIC00NTczLDcgKzQ5NzksNyBAQAogCXN0cnVjdCBvY2ZzMl9leHRlbnRfYmxvY2sgKmViOwogCiAJaWYgKG9jZnMyX2lzX2VtcHR5X2V4dGVudCgmZWwtPmxfcmVjc1swXSkgJiYgaW5kZXggPiAwKSB7Ci0JCXJldCA9IG9jZnMyX3JvdGF0ZV90cmVlX2xlZnQoaW5vZGUsIGhhbmRsZSwgcGF0aCwgZGVhbGxvYyk7CisJCXJldCA9IG9jZnMyX3JvdGF0ZV90cmVlX2xlZnQoaW5vZGUsIGhhbmRsZSwgcGF0aCwgZGVhbGxvYywgZXQpOwogCQlpZiAocmV0KSB7CiAJCQltbG9nX2Vycm5vKHJldCk7CiAJCQlnb3RvIG91dDsKQEAgLTQ3MDQsNyArNTExMCw3IEBACiAKIAlvY2ZzMl9qb3VybmFsX2RpcnR5KGhhbmRsZSwgcGF0aF9sZWFmX2JoKHBhdGgpKTsKIAotCXJldCA9IG9jZnMyX3JvdGF0ZV90cmVlX2xlZnQoaW5vZGUsIGhhbmRsZSwgcGF0aCwgZGVhbGxvYyk7CisJcmV0ID0gb2NmczJfcm90YXRlX3RyZWVfbGVmdChpbm9kZSwgaGFuZGxlLCBwYXRoLCBkZWFsbG9jLCBldCk7CiAJaWYgKHJldCkgewogCQltbG9nX2Vycm5vKHJldCk7CiAJCWdvdG8gb3V0OwpAQCAtNDcxNSw3ICs1MTIxLDggQEAKIAlyZXR1cm4gcmV0OwogfQogCi1pbnQgb2NmczJfcmVtb3ZlX2V4dGVudChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmRpX2JoLAoraW50IG9jZnMyX3JlbW92ZV9leHRlbnQoc3RydWN0IGlub2RlICppbm9kZSwKKwkJCXN0cnVjdCBvY2ZzMl9leHRlbnRfdHJlZSAqZXQsCiAJCQl1MzIgY3BvcywgdTMyIGxlbiwgaGFuZGxlX3QgKmhhbmRsZSwKIAkJCXN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICptZXRhX2FjLAogCQkJc3RydWN0IG9jZnMyX2NhY2hlZF9kZWFsbG9jX2N0eHQgKmRlYWxsb2MpCkBAIC00NzI0LDExICs1MTMxLDExIEBACiAJdTMyIHJlY19yYW5nZSwgdHJ1bmNfcmFuZ2U7CiAJc3RydWN0IG9jZnMyX2V4dGVudF9yZWMgKnJlYzsKIAlzdHJ1Y3Qgb2NmczJfZXh0ZW50X2xpc3QgKmVsOwotCXN0cnVjdCBvY2ZzMl9wYXRoICpwYXRoOworCXN0cnVjdCBvY2ZzMl9wYXRoICpwYXRoID0gTlVMTDsKIAogCW9jZnMyX2V4dGVudF9tYXBfdHJ1bmMoaW5vZGUsIDApOwogCi0JcGF0aCA9IG9jZnMyX25ld19pbm9kZV9wYXRoKGRpX2JoKTsKKwlwYXRoID0gb2NmczJfbmV3X3BhdGgoZXQtPmV0X3Jvb3RfYmgsIGV0LT5ldF9yb290X2VsKTsKIAlpZiAoIXBhdGgpIHsKIAkJcmV0ID0gLUVOT01FTTsKIAkJbWxvZ19lcnJubyhyZXQpOwpAQCAtNDc4MSwxMyArNTE4OCwxMyBAQAogCiAJaWYgKGxlMzJfdG9fY3B1KHJlYy0+ZV9jcG9zKSA9PSBjcG9zIHx8IHJlY19yYW5nZSA9PSB0cnVuY19yYW5nZSkgewogCQlyZXQgPSBvY2ZzMl90cnVuY2F0ZV9yZWMoaW5vZGUsIGhhbmRsZSwgcGF0aCwgaW5kZXgsIGRlYWxsb2MsCi0JCQkJCSBjcG9zLCBsZW4pOworCQkJCQkgY3BvcywgbGVuLCBldCk7CiAJCWlmIChyZXQpIHsKIAkJCW1sb2dfZXJybm8ocmV0KTsKIAkJCWdvdG8gb3V0OwogCQl9CiAJfSBlbHNlIHsKLQkJcmV0ID0gb2NmczJfc3BsaXRfdHJlZShpbm9kZSwgZGlfYmgsIGhhbmRsZSwgcGF0aCwgaW5kZXgsCisJCXJldCA9IG9jZnMyX3NwbGl0X3RyZWUoaW5vZGUsIGV0LCBoYW5kbGUsIHBhdGgsIGluZGV4LAogCQkJCSAgICAgICB0cnVuY19yYW5nZSwgbWV0YV9hYyk7CiAJCWlmIChyZXQpIHsKIAkJCW1sb2dfZXJybm8ocmV0KTsKQEAgLTQ4MzYsNyArNTI0Myw3IEBACiAJCX0KIAogCQlyZXQgPSBvY2ZzMl90cnVuY2F0ZV9yZWMoaW5vZGUsIGhhbmRsZSwgcGF0aCwgaW5kZXgsIGRlYWxsb2MsCi0JCQkJCSBjcG9zLCBsZW4pOworCQkJCQkgY3BvcywgbGVuLCBldCk7CiAJCWlmIChyZXQpIHsKIAkJCW1sb2dfZXJybm8ocmV0KTsKIAkJCWdvdG8gb3V0OwpAQCAtNTE3OSw4ICs1NTg2LDcgQEAKIAkJZ290byBiYWlsOwogCX0KIAotCXN0YXR1cyA9IG9jZnMyX3JlYWRfYmxvY2sob3NiLCBPQ0ZTMl9JKGlub2RlKS0+aXBfYmxrbm8sICZiaCwKLQkJCQkgIE9DRlMyX0JIX0NBQ0hFRCwgaW5vZGUpOworCXN0YXR1cyA9IG9jZnMyX3JlYWRfYmxvY2soaW5vZGUsIE9DRlMyX0koaW5vZGUpLT5pcF9ibGtubywgJmJoKTsKIAlpZiAoc3RhdHVzIDwgMCkgewogCQlpcHV0KGlub2RlKTsKIAkJbWxvZ19lcnJubyhzdGF0dXMpOwpAQCAtNTI1NSw4ICs1NjYxLDcgQEAKIGJhaWw6CiAJaWYgKHRsX2lub2RlKQogCQlpcHV0KHRsX2lub2RlKTsKLQlpZiAodGxfYmgpCi0JCWJyZWxzZSh0bF9iaCk7CisJYnJlbHNlKHRsX2JoKTsKIAogCWlmIChzdGF0dXMgPCAwICYmICgqdGxfY29weSkpIHsKIAkJa2ZyZWUoKnRsX2NvcHkpOwpAQCAtNTk5OSwyMCArNjQwNCwxMyBAQAogCXJldHVybiBzdGF0dXM7CiB9CiAKLXN0YXRpYyBpbnQgb2NmczJfd3JpdGViYWNrX3plcm9fZnVuYyhoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoKQorc3RhdGljIGludCBvY2ZzMl96ZXJvX2Z1bmMoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCkKIHsKIAlzZXRfYnVmZmVyX3VwdG9kYXRlKGJoKTsKIAltYXJrX2J1ZmZlcl9kaXJ0eShiaCk7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgb2NmczJfb3JkZXJlZF96ZXJvX2Z1bmMoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCkKLXsKLQlzZXRfYnVmZmVyX3VwdG9kYXRlKGJoKTsKLQltYXJrX2J1ZmZlcl9kaXJ0eShiaCk7Ci0JcmV0dXJuIG9jZnMyX2pvdXJuYWxfZGlydHlfZGF0YShoYW5kbGUsIGJoKTsKLX0KLQogc3RhdGljIHZvaWQgb2NmczJfbWFwX2FuZF9kaXJ0eV9wYWdlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGhhbmRsZV90ICpoYW5kbGUsCiAJCQkJICAgICB1bnNpZ25lZCBpbnQgZnJvbSwgdW5zaWduZWQgaW50IHRvLAogCQkJCSAgICAgc3RydWN0IHBhZ2UgKnBhZ2UsIGludCB6ZXJvLCB1NjQgKnBoeXMpCkBAIC02MDMxLDE3ICs2NDI5LDE4IEBACiAJICogaGVyZSBpZiB0aGV5IGFyZW4ndCAtIG9jZnMyX21hcF9wYWdlX2Jsb2NrcygpCiAJICogbWlnaHQndmUgc2tpcHBlZCBzb21lCiAJICovCi0JaWYgKG9jZnMyX3Nob3VsZF9vcmRlcl9kYXRhKGlub2RlKSkgewotCQlyZXQgPSB3YWxrX3BhZ2VfYnVmZmVycyhoYW5kbGUsCi0JCQkJCXBhZ2VfYnVmZmVycyhwYWdlKSwKLQkJCQkJZnJvbSwgdG8sICZwYXJ0aWFsLAotCQkJCQlvY2ZzMl9vcmRlcmVkX3plcm9fZnVuYyk7Ci0JCWlmIChyZXQgPCAwKQotCQkJbWxvZ19lcnJubyhyZXQpOwotCX0gZWxzZSB7CisJcmV0ID0gd2Fsa19wYWdlX2J1ZmZlcnMoaGFuZGxlLCBwYWdlX2J1ZmZlcnMocGFnZSksCisJCQkJZnJvbSwgdG8sICZwYXJ0aWFsLAorCQkJCW9jZnMyX3plcm9fZnVuYyk7CisJaWYgKHJldCA8IDApCisJCW1sb2dfZXJybm8ocmV0KTsKKwllbHNlIGlmIChvY2ZzMl9zaG91bGRfb3JkZXJfZGF0YShpbm9kZSkpIHsKKwkJcmV0ID0gb2NmczJfamJkMl9maWxlX2lub2RlKGhhbmRsZSwgaW5vZGUpOworI2lmZGVmIENPTkZJR19PQ0ZTMl9DT01QQVRfSkJECiAJCXJldCA9IHdhbGtfcGFnZV9idWZmZXJzKGhhbmRsZSwgcGFnZV9idWZmZXJzKHBhZ2UpLAogCQkJCQlmcm9tLCB0bywgJnBhcnRpYWwsCi0JCQkJCW9jZnMyX3dyaXRlYmFja196ZXJvX2Z1bmMpOworCQkJCQlvY2ZzMl9qb3VybmFsX2RpcnR5X2RhdGEpOworI2VuZGlmCiAJCWlmIChyZXQgPCAwKQogCQkJbWxvZ19lcnJubyhyZXQpOwogCX0KQEAgLTYyMDYsMjAgKzY2MDUsMjkgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgdm9pZCBvY2ZzMl96ZXJvX2Rpbm9kZV9pZDIoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IG9jZnMyX2Rpbm9kZSAqZGkpCitzdGF0aWMgdm9pZCBvY2ZzMl96ZXJvX2Rpbm9kZV9pZDJfd2l0aF94YXR0cihzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkJCQkgICAgIHN0cnVjdCBvY2ZzMl9kaW5vZGUgKmRpKQogewogCXVuc2lnbmVkIGludCBibG9ja3NpemUgPSAxIDw8IGlub2RlLT5pX3NiLT5zX2Jsb2Nrc2l6ZV9iaXRzOworCXVuc2lnbmVkIGludCB4YXR0cnNpemUgPSBsZTE2X3RvX2NwdShkaS0+aV94YXR0cl9pbmxpbmVfc2l6ZSk7CiAKLQltZW1zZXQoJmRpLT5pZDIsIDAsIGJsb2Nrc2l6ZSAtIG9mZnNldG9mKHN0cnVjdCBvY2ZzMl9kaW5vZGUsIGlkMikpOworCWlmIChsZTE2X3RvX2NwdShkaS0+aV9keW5fZmVhdHVyZXMpICYgT0NGUzJfSU5MSU5FX1hBVFRSX0ZMKQorCQltZW1zZXQoJmRpLT5pZDIsIDAsIGJsb2Nrc2l6ZSAtCisJCQkJICAgIG9mZnNldG9mKHN0cnVjdCBvY2ZzMl9kaW5vZGUsIGlkMikgLQorCQkJCSAgICB4YXR0cnNpemUpOworCWVsc2UKKwkJbWVtc2V0KCZkaS0+aWQyLCAwLCBibG9ja3NpemUgLQorCQkJCSAgICBvZmZzZXRvZihzdHJ1Y3Qgb2NmczJfZGlub2RlLCBpZDIpKTsKIH0KIAogdm9pZCBvY2ZzMl9kaW5vZGVfbmV3X2V4dGVudF9saXN0KHN0cnVjdCBpbm9kZSAqaW5vZGUsCiAJCQkJICBzdHJ1Y3Qgb2NmczJfZGlub2RlICpkaSkKIHsKLQlvY2ZzMl96ZXJvX2Rpbm9kZV9pZDIoaW5vZGUsIGRpKTsKKwlvY2ZzMl96ZXJvX2Rpbm9kZV9pZDJfd2l0aF94YXR0cihpbm9kZSwgZGkpOwogCWRpLT5pZDIuaV9saXN0LmxfdHJlZV9kZXB0aCA9IDA7CiAJZGktPmlkMi5pX2xpc3QubF9uZXh0X2ZyZWVfcmVjID0gMDsKLQlkaS0+aWQyLmlfbGlzdC5sX2NvdW50ID0gY3B1X3RvX2xlMTYob2NmczJfZXh0ZW50X3JlY3NfcGVyX2lub2RlKGlub2RlLT5pX3NiKSk7CisJZGktPmlkMi5pX2xpc3QubF9jb3VudCA9IGNwdV90b19sZTE2KAorCQlvY2ZzMl9leHRlbnRfcmVjc19wZXJfaW5vZGVfd2l0aF94YXR0cihpbm9kZS0+aV9zYiwgZGkpKTsKIH0KIAogdm9pZCBvY2ZzMl9zZXRfaW5vZGVfZGF0YV9pbmxpbmUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IG9jZnMyX2Rpbm9kZSAqZGkpCkBAIC02MjM2LDkgKzY2NDQsMTAgQEAKIAkgKiBXZSBjbGVhciB0aGUgZW50aXJlIGlfZGF0YSBzdHJ1Y3R1cmUgaGVyZSBzbyB0aGF0IGFsbAogCSAqIGZpZWxkcyBjYW4gYmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQuCiAJICovCi0Jb2NmczJfemVyb19kaW5vZGVfaWQyKGlub2RlLCBkaSk7CisJb2NmczJfemVyb19kaW5vZGVfaWQyX3dpdGhfeGF0dHIoaW5vZGUsIGRpKTsKIAotCWlkYXRhLT5pZF9jb3VudCA9IGNwdV90b19sZTE2KG9jZnMyX21heF9pbmxpbmVfZGF0YShpbm9kZS0+aV9zYikpOworCWlkYXRhLT5pZF9jb3VudCA9IGNwdV90b19sZTE2KAorCQkJb2NmczJfbWF4X2lubGluZV9kYXRhX3dpdGhfeGF0dHIoaW5vZGUtPmlfc2IsIGRpKSk7CiB9CiAKIGludCBvY2ZzMl9jb252ZXJ0X2lubGluZV9kYXRhX3RvX2V4dGVudHMoc3RydWN0IGlub2RlICppbm9kZSwKQEAgLTYyNTMsNiArNjY2Miw3IEBACiAJc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKmRhdGFfYWMgPSBOVUxMOwogCXN0cnVjdCBwYWdlICoqcGFnZXMgPSBOVUxMOwogCWxvZmZfdCBlbmQgPSBvc2ItPnNfY2x1c3RlcnNpemU7CisJc3RydWN0IG9jZnMyX2V4dGVudF90cmVlIGV0OwogCiAJaGFzX2RhdGEgPSBpX3NpemVfcmVhZChpbm9kZSkgPyAxIDogMDsKIApAQCAtNjM1Miw3ICs2NzYyLDggQEAKIAkJICogdGhpcyBwcm92ZXMgdG8gYmUgZmFsc2UsIHdlIGNvdWxkIGFsd2F5cyByZS1idWlsZAogCQkgKiB0aGUgaW4taW5vZGUgZGF0YSBmcm9tIG91ciBwYWdlcy4KIAkJICovCi0JCXJldCA9IG9jZnMyX2luc2VydF9leHRlbnQob3NiLCBoYW5kbGUsIGlub2RlLCBkaV9iaCwKKwkJb2NmczJfaW5pdF9kaW5vZGVfZXh0ZW50X3RyZWUoJmV0LCBpbm9kZSwgZGlfYmgpOworCQlyZXQgPSBvY2ZzMl9pbnNlcnRfZXh0ZW50KG9zYiwgaGFuZGxlLCBpbm9kZSwgJmV0LAogCQkJCQkgIDAsIGJsb2NrLCAxLCAwLCBOVUxMKTsKIAkJaWYgKHJldCkgewogCQkJbWxvZ19lcnJubyhyZXQpOwpAQCAtNjM5NSwxMyArNjgwNiwxNCBAQAogCWhhbmRsZV90ICpoYW5kbGUgPSBOVUxMOwogCXN0cnVjdCBpbm9kZSAqdGxfaW5vZGUgPSBvc2ItPm9zYl90bF9pbm9kZTsKIAlzdHJ1Y3Qgb2NmczJfcGF0aCAqcGF0aCA9IE5VTEw7CisJc3RydWN0IG9jZnMyX2Rpbm9kZSAqZGkgPSAoc3RydWN0IG9jZnMyX2Rpbm9kZSAqKWZlX2JoLT5iX2RhdGE7CiAKIAltbG9nX2VudHJ5X3ZvaWQoKTsKIAogCW5ld19oaWdoZXN0X2Nwb3MgPSBvY2ZzMl9jbHVzdGVyc19mb3JfYnl0ZXMob3NiLT5zYiwKIAkJCQkJCSAgICAgaV9zaXplX3JlYWQoaW5vZGUpKTsKIAotCXBhdGggPSBvY2ZzMl9uZXdfaW5vZGVfcGF0aChmZV9iaCk7CisJcGF0aCA9IG9jZnMyX25ld19wYXRoKGZlX2JoLCAmZGktPmlkMi5pX2xpc3QpOwogCWlmICghcGF0aCkgewogCQlzdGF0dXMgPSAtRU5PTUVNOwogCQltbG9nX2Vycm5vKHN0YXR1cyk7CkBAIC02NTcyLDggKzY5ODQsOCBAQAogCW9jZnMyX2luaXRfZGVhbGxvY19jdHh0KCYoKnRjKS0+dGNfZGVhbGxvYyk7CiAKIAlpZiAoZmUtPmlkMi5pX2xpc3QubF90cmVlX2RlcHRoKSB7Ci0JCXN0YXR1cyA9IG9jZnMyX3JlYWRfYmxvY2sob3NiLCBsZTY0X3RvX2NwdShmZS0+aV9sYXN0X2ViX2JsayksCi0JCQkJCSAgJmxhc3RfZWJfYmgsIE9DRlMyX0JIX0NBQ0hFRCwgaW5vZGUpOworCQlzdGF0dXMgPSBvY2ZzMl9yZWFkX2Jsb2NrKGlub2RlLCBsZTY0X3RvX2NwdShmZS0+aV9sYXN0X2ViX2JsayksCisJCQkJCSAgJmxhc3RfZWJfYmgpOwogCQlpZiAoc3RhdHVzIDwgMCkgewogCQkJbWxvZ19lcnJubyhzdGF0dXMpOwogCQkJZ290byBiYWlsOwpAQCAtNjY4Niw4ICs3MDk4LDcgQEAKIAkJbWxvZyhNTF9OT1RJQ0UsCiAJCSAgICAgIlRydW5jYXRlIGNvbXBsZXRpb24gaGFzIG5vbi1lbXB0eSBkZWFsbG9jIGNvbnRleHRcbiIpOwogCi0JaWYgKHRjLT50Y19sYXN0X2ViX2JoKQotCQlicmVsc2UodGMtPnRjX2xhc3RfZWJfYmgpOworCWJyZWxzZSh0Yy0+dGNfbGFzdF9lYl9iaCk7CiAKIAlrZnJlZSh0Yyk7CiB9CmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9hbGxvYy5oIGIvZnMvb2NmczIvYWxsb2MuaAppbmRleCA2MGNkM2Q1Li43MDI1N2M4IDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9hbGxvYy5oCisrKyBiL2ZzL29jZnMyL2FsbG9jLmgKQEAgLTI2LDMwICsyNiwxMDIgQEAKICNpZm5kZWYgT0NGUzJfQUxMT0NfSAogI2RlZmluZSBPQ0ZTMl9BTExPQ19ICiAKKworLyoKKyAqIEZvciB4YXR0ciB0cmVlIGxlYWYsIHdlIGxpbWl0IHRoZSBsZWFmIGJ5dGUgc2l6ZSB0byBiZSA2NEsuCisgKi8KKyNkZWZpbmUgT0NGUzJfTUFYX1hBVFRSX1RSRUVfTEVBRl9TSVpFIDY1NTM2CisKKy8qCisgKiBvY2ZzMl9leHRlbnRfdHJlZSBhbmQgb2NmczJfZXh0ZW50X3RyZWVfb3BlcmF0aW9ucyBhcmUgdXNlZCB0byBhYnN0cmFjdAorICogdGhlIGItdHJlZSBvcGVyYXRpb25zIGluIG9jZnMyLiBOb3cgYWxsIHRoZSBiLXRyZWUgb3BlcmF0aW9ucyBhcmUgbm90CisgKiBsaW1pdGVkIHRvIG9jZnMyX2Rpbm9kZSBvbmx5LiBBbnkgZGF0YSB3aGljaCBuZWVkIHRvIGFsbG9jYXRlIGNsdXN0ZXJzCisgKiB0byBzdG9yZSBjYW4gdXNlIGItdHJlZS4gQW5kIGl0IG9ubHkgbmVlZHMgdG8gaW1wbGVtZW50IGl0cyBvY2ZzMl9leHRlbnRfdHJlZQorICogYW5kIG9wZXJhdGlvbi4KKyAqCisgKiBvY2ZzMl9leHRlbnRfdHJlZSBiZWNvbWVzIHRoZSBmaXJzdC1jbGFzcyBvYmplY3QgZm9yIGV4dGVudCB0cmVlCisgKiBtYW5pcHVsYXRpb24uICBDYWxsZXJzIG9mIHRoZSBhbGxvYy5jIGNvZGUgbmVlZCB0byBmaWxsIGl0IHZpYSBvbmUgb2YKKyAqIHRoZSBvY2ZzMl9pbml0XypfZXh0ZW50X3RyZWUoKSBvcGVyYXRpb25zIGJlbG93LgorICoKKyAqIG9jZnMyX2V4dGVudF90cmVlIGNvbnRhaW5zIGluZm8gZm9yIHRoZSByb290IG9mIHRoZSBiLXRyZWUsIGl0IG11c3QgaGF2ZSBhCisgKiByb290IG9jZnMyX2V4dGVudF9saXN0IGFuZCBhIHJvb3RfYmggc28gdGhhdCB0aGV5IGNhbiBiZSB1c2VkIGluIHRoZSBiLXRyZWUKKyAqIGZ1bmN0aW9ucy4KKyAqIG9jZnMyX2V4dGVudF90cmVlX29wZXJhdGlvbnMgYWJzdHJhY3QgdGhlIG5vcm1hbCBvcGVyYXRpb25zIHdlIGRvIGZvcgorICogdGhlIHJvb3Qgb2YgZXh0ZW50IGItdHJlZS4KKyAqLworc3RydWN0IG9jZnMyX2V4dGVudF90cmVlX29wZXJhdGlvbnM7CitzdHJ1Y3Qgb2NmczJfZXh0ZW50X3RyZWUgeworCXN0cnVjdCBvY2ZzMl9leHRlbnRfdHJlZV9vcGVyYXRpb25zCSpldF9vcHM7CisJc3RydWN0IGJ1ZmZlcl9oZWFkCQkJKmV0X3Jvb3RfYmg7CisJc3RydWN0IG9jZnMyX2V4dGVudF9saXN0CQkqZXRfcm9vdF9lbDsKKwl2b2lkCQkJCQkqZXRfb2JqZWN0OworCXVuc2lnbmVkIGludAkJCQlldF9tYXhfbGVhZl9jbHVzdGVyczsKK307CisKKy8qCisgKiBvY2ZzMl9pbml0XypfZXh0ZW50X3RyZWUoKSB3aWxsIGZpbGwgYW4gb2NmczJfZXh0ZW50X3RyZWUgZnJvbSB0aGUKKyAqIHNwZWNpZmllZCBvYmplY3QgYnVmZmVyLgorICovCit2b2lkIG9jZnMyX2luaXRfZGlub2RlX2V4dGVudF90cmVlKHN0cnVjdCBvY2ZzMl9leHRlbnRfdHJlZSAqZXQsCisJCQkJICAgc3RydWN0IGlub2RlICppbm9kZSwKKwkJCQkgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoKTsKK3ZvaWQgb2NmczJfaW5pdF94YXR0cl90cmVlX2V4dGVudF90cmVlKHN0cnVjdCBvY2ZzMl9leHRlbnRfdHJlZSAqZXQsCisJCQkJICAgICAgIHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCQkJICAgICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgpOwordm9pZCBvY2ZzMl9pbml0X3hhdHRyX3ZhbHVlX2V4dGVudF90cmVlKHN0cnVjdCBvY2ZzMl9leHRlbnRfdHJlZSAqZXQsCisJCQkJCXN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCQkJCXN0cnVjdCBidWZmZXJfaGVhZCAqYmgsCisJCQkJCXN0cnVjdCBvY2ZzMl94YXR0cl92YWx1ZV9yb290ICp4dik7CisKIHN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0OwogaW50IG9jZnMyX2luc2VydF9leHRlbnQoc3RydWN0IG9jZnMyX3N1cGVyICpvc2IsCiAJCQloYW5kbGVfdCAqaGFuZGxlLAogCQkJc3RydWN0IGlub2RlICppbm9kZSwKLQkJCXN0cnVjdCBidWZmZXJfaGVhZCAqZmVfYmgsCisJCQlzdHJ1Y3Qgb2NmczJfZXh0ZW50X3RyZWUgKmV0LAogCQkJdTMyIGNwb3MsCiAJCQl1NjQgc3RhcnRfYmxrLAogCQkJdTMyIG5ld19jbHVzdGVycywKIAkJCXU4IGZsYWdzLAogCQkJc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKm1ldGFfYWMpOworCitlbnVtIG9jZnMyX2FsbG9jX3Jlc3RhcnRlZCB7CisJUkVTVEFSVF9OT05FID0gMCwKKwlSRVNUQVJUX1RSQU5TLAorCVJFU1RBUlRfTUVUQQorfTsKK2ludCBvY2ZzMl9hZGRfY2x1c3RlcnNfaW5fYnRyZWUoc3RydWN0IG9jZnMyX3N1cGVyICpvc2IsCisJCQkJc3RydWN0IGlub2RlICppbm9kZSwKKwkJCQl1MzIgKmxvZ2ljYWxfb2Zmc2V0LAorCQkJCXUzMiBjbHVzdGVyc190b19hZGQsCisJCQkJaW50IG1hcmtfdW53cml0dGVuLAorCQkJCXN0cnVjdCBvY2ZzMl9leHRlbnRfdHJlZSAqZXQsCisJCQkJaGFuZGxlX3QgKmhhbmRsZSwKKwkJCQlzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqZGF0YV9hYywKKwkJCQlzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqbWV0YV9hYywKKwkJCQllbnVtIG9jZnMyX2FsbG9jX3Jlc3RhcnRlZCAqcmVhc29uX3JldCk7CiBzdHJ1Y3Qgb2NmczJfY2FjaGVkX2RlYWxsb2NfY3R4dDsKLWludCBvY2ZzMl9tYXJrX2V4dGVudF93cml0dGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBidWZmZXJfaGVhZCAqZGlfYmgsCitpbnQgb2NmczJfbWFya19leHRlbnRfd3JpdHRlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkJICAgICAgc3RydWN0IG9jZnMyX2V4dGVudF90cmVlICpldCwKIAkJCSAgICAgIGhhbmRsZV90ICpoYW5kbGUsIHUzMiBjcG9zLCB1MzIgbGVuLCB1MzIgcGh5cywKIAkJCSAgICAgIHN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICptZXRhX2FjLAogCQkJICAgICAgc3RydWN0IG9jZnMyX2NhY2hlZF9kZWFsbG9jX2N0eHQgKmRlYWxsb2MpOwotaW50IG9jZnMyX3JlbW92ZV9leHRlbnQoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGJ1ZmZlcl9oZWFkICpkaV9iaCwKK2ludCBvY2ZzMl9yZW1vdmVfZXh0ZW50KHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCQlzdHJ1Y3Qgb2NmczJfZXh0ZW50X3RyZWUgKmV0LAogCQkJdTMyIGNwb3MsIHUzMiBsZW4sIGhhbmRsZV90ICpoYW5kbGUsCiAJCQlzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqbWV0YV9hYywKIAkJCXN0cnVjdCBvY2ZzMl9jYWNoZWRfZGVhbGxvY19jdHh0ICpkZWFsbG9jKTsKIGludCBvY2ZzMl9udW1fZnJlZV9leHRlbnRzKHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiLAogCQkJICAgc3RydWN0IGlub2RlICppbm9kZSwKLQkJCSAgIHN0cnVjdCBvY2ZzMl9kaW5vZGUgKmZlKTsKLS8qIGhvdyBtYW55IG5ldyBtZXRhZGF0YSBjaHVua3Mgd291bGQgYW4gYWxsb2NhdGlvbiBuZWVkIGF0IG1heGltdW0/ICovCi1zdGF0aWMgaW5saW5lIGludCBvY2ZzMl9leHRlbmRfbWV0YV9uZWVkZWQoc3RydWN0IG9jZnMyX2Rpbm9kZSAqZmUpCisJCQkgICBzdHJ1Y3Qgb2NmczJfZXh0ZW50X3RyZWUgKmV0KTsKKworLyoKKyAqIGhvdyBtYW55IG5ldyBtZXRhZGF0YSBjaHVua3Mgd291bGQgYW4gYWxsb2NhdGlvbiBuZWVkIGF0IG1heGltdW0/CisgKgorICogUGxlYXNlIG5vdGUgdGhhdCB0aGUgY2FsbGVyIG11c3QgbWFrZSBzdXJlIHRoYXQgcm9vdF9lbCBpcyB0aGUgcm9vdAorICogb2YgZXh0ZW50IHRyZWUuIFNvIGZvciBhbiBpbm9kZSwgaXQgc2hvdWxkIGJlICZmZS0+aWQyLmlfbGlzdC4gT3RoZXJ3aXNlCisgKiB0aGUgcmVzdWx0IG1heSBiZSB3cm9uZy4KKyAqLworc3RhdGljIGlubGluZSBpbnQgb2NmczJfZXh0ZW5kX21ldGFfbmVlZGVkKHN0cnVjdCBvY2ZzMl9leHRlbnRfbGlzdCAqcm9vdF9lbCkKIHsKIAkvKgogCSAqIFJhdGhlciB0aGFuIGRvIGFsbCB0aGUgd29yayBvZiBkZXRlcm1pbmluZyBob3cgbXVjaCB3ZSBuZWVkCkBAIC01OSw3ICsxMzEsNyBAQAogCSAqIG5ldyB0cmVlX2RlcHRoPT0wIGV4dGVudF9ibG9jaywgYW5kIG9uZSBibG9jayBhdCB0aGUgbmV3CiAJICogdG9wLW9mLXRoZSB0cmVlLgogCSAqLwotCXJldHVybiBsZTE2X3RvX2NwdShmZS0+aWQyLmlfbGlzdC5sX3RyZWVfZGVwdGgpICsgMjsKKwlyZXR1cm4gbGUxNl90b19jcHUocm9vdF9lbC0+bF90cmVlX2RlcHRoKSArIDI7CiB9CiAKIHZvaWQgb2NmczJfZGlub2RlX25ld19leHRlbnRfbGlzdChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3Qgb2NmczJfZGlub2RlICpkaSk7CmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9hb3BzLmMgYi9mcy9vY2ZzMi9hb3BzLmMKaW5kZXggYTUzZGExNC4uYzIyNTQzYiAxMDA2NDQKLS0tIGEvZnMvb2NmczIvYW9wcy5jCisrKyBiL2ZzL29jZnMyL2FvcHMuYwpAQCAtNjgsOSArNjgsNyBAQAogCQlnb3RvIGJhaWw7CiAJfQogCi0Jc3RhdHVzID0gb2NmczJfcmVhZF9ibG9jayhPQ0ZTMl9TQihpbm9kZS0+aV9zYiksCi0JCQkJICBPQ0ZTMl9JKGlub2RlKS0+aXBfYmxrbm8sCi0JCQkJICAmYmgsIE9DRlMyX0JIX0NBQ0hFRCwgaW5vZGUpOworCXN0YXR1cyA9IG9jZnMyX3JlYWRfYmxvY2soaW5vZGUsIE9DRlMyX0koaW5vZGUpLT5pcF9ibGtubywgJmJoKTsKIAlpZiAoc3RhdHVzIDwgMCkgewogCQltbG9nX2Vycm5vKHN0YXR1cyk7CiAJCWdvdG8gYmFpbDsKQEAgLTEyOCw4ICsxMjYsNyBAQAogCWVyciA9IDA7CiAKIGJhaWw6Ci0JaWYgKGJoKQotCQlicmVsc2UoYmgpOworCWJyZWxzZShiaCk7CiAKIAltbG9nX2V4aXQoZXJyKTsKIAlyZXR1cm4gZXJyOwpAQCAtMjYxLDEzICsyNTgsMTEgQEAKIHsKIAlpbnQgcmV0OwogCXN0cnVjdCBidWZmZXJfaGVhZCAqZGlfYmggPSBOVUxMOwotCXN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiID0gT0NGUzJfU0IoaW5vZGUtPmlfc2IpOwogCiAJQlVHX09OKCFQYWdlTG9ja2VkKHBhZ2UpKTsKIAlCVUdfT04oIShPQ0ZTMl9JKGlub2RlKS0+aXBfZHluX2ZlYXR1cmVzICYgT0NGUzJfSU5MSU5FX0RBVEFfRkwpKTsKIAotCXJldCA9IG9jZnMyX3JlYWRfYmxvY2sob3NiLCBPQ0ZTMl9JKGlub2RlKS0+aXBfYmxrbm8sICZkaV9iaCwKLQkJCSAgICAgICBPQ0ZTMl9CSF9DQUNIRUQsIGlub2RlKTsKKwlyZXQgPSBvY2ZzMl9yZWFkX2Jsb2NrKGlub2RlLCBPQ0ZTMl9JKGlub2RlKS0+aXBfYmxrbm8sICZkaV9iaCk7CiAJaWYgKHJldCkgewogCQltbG9nX2Vycm5vKHJldCk7CiAJCWdvdG8gb3V0OwpAQCAtNDg1LDExICs0ODAsMTQgQEAKIAl9CiAKIAlpZiAob2NmczJfc2hvdWxkX29yZGVyX2RhdGEoaW5vZGUpKSB7CisJCXJldCA9IG9jZnMyX2piZDJfZmlsZV9pbm9kZShoYW5kbGUsIGlub2RlKTsKKyNpZmRlZiBDT05GSUdfT0NGUzJfQ09NUEFUX0pCRAogCQlyZXQgPSB3YWxrX3BhZ2VfYnVmZmVycyhoYW5kbGUsCiAJCQkJCXBhZ2VfYnVmZmVycyhwYWdlKSwKIAkJCQkJZnJvbSwgdG8sIE5VTEwsCiAJCQkJCW9jZnMyX2pvdXJuYWxfZGlydHlfZGF0YSk7Ci0JCWlmIChyZXQgPCAwKSAKKyNlbmRpZgorCQlpZiAocmV0IDwgMCkKIAkJCW1sb2dfZXJybm8ocmV0KTsKIAl9CiBvdXQ6CkBAIC02NjksNyArNjY3LDcgQEAKIHsKIAlqb3VybmFsX3QgKmpvdXJuYWwgPSBPQ0ZTMl9TQihwYWdlLT5tYXBwaW5nLT5ob3N0LT5pX3NiKS0+am91cm5hbC0+al9qb3VybmFsOwogCi0Jam91cm5hbF9pbnZhbGlkYXRlcGFnZShqb3VybmFsLCBwYWdlLCBvZmZzZXQpOworCWpiZDJfam91cm5hbF9pbnZhbGlkYXRlcGFnZShqb3VybmFsLCBwYWdlLCBvZmZzZXQpOwogfQogCiBzdGF0aWMgaW50IG9jZnMyX3JlbGVhc2VwYWdlKHN0cnVjdCBwYWdlICpwYWdlLCBnZnBfdCB3YWl0KQpAQCAtNjc4LDcgKzY3Niw3IEBACiAKIAlpZiAoIXBhZ2VfaGFzX2J1ZmZlcnMocGFnZSkpCiAJCXJldHVybiAwOwotCXJldHVybiBqb3VybmFsX3RyeV90b19mcmVlX2J1ZmZlcnMoam91cm5hbCwgcGFnZSwgd2FpdCk7CisJcmV0dXJuIGpiZDJfam91cm5hbF90cnlfdG9fZnJlZV9idWZmZXJzKGpvdXJuYWwsIHBhZ2UsIHdhaXQpOwogfQogCiBzdGF0aWMgc3NpemVfdCBvY2ZzMl9kaXJlY3RfSU8oaW50IHJ3LApAQCAtMTA3NCwxMSArMTA3MiwxNSBAQAogCQl0bXBwYWdlID0gd2MtPndfcGFnZXNbaV07CiAKIAkJaWYgKHBhZ2VfaGFzX2J1ZmZlcnModG1wcGFnZSkpIHsKLQkJCWlmIChvY2ZzMl9zaG91bGRfb3JkZXJfZGF0YShpbm9kZSkpCisJCQlpZiAob2NmczJfc2hvdWxkX29yZGVyX2RhdGEoaW5vZGUpKSB7CisJCQkJb2NmczJfamJkMl9maWxlX2lub2RlKHdjLT53X2hhbmRsZSwgaW5vZGUpOworI2lmZGVmIENPTkZJR19PQ0ZTMl9DT01QQVRfSkJECiAJCQkJd2Fsa19wYWdlX2J1ZmZlcnMod2MtPndfaGFuZGxlLAogCQkJCQkJICBwYWdlX2J1ZmZlcnModG1wcGFnZSksCiAJCQkJCQkgIGZyb20sIHRvLCBOVUxMLAogCQkJCQkJICBvY2ZzMl9qb3VybmFsX2RpcnR5X2RhdGEpOworI2VuZGlmCisJCQl9CiAKIAkJCWJsb2NrX2NvbW1pdF93cml0ZSh0bXBwYWdlLCBmcm9tLCB0byk7CiAJCX0KQEAgLTEyNDIsNiArMTI0NCw3IEBACiAJaW50IHJldCwgaSwgbmV3LCBzaG91bGRfemVybyA9IDA7CiAJdTY0IHZfYmxrbm8sIHBfYmxrbm87CiAJc3RydWN0IGlub2RlICppbm9kZSA9IG1hcHBpbmctPmhvc3Q7CisJc3RydWN0IG9jZnMyX2V4dGVudF90cmVlIGV0OwogCiAJbmV3ID0gcGh5cyA9PSAwID8gMSA6IDA7CiAJaWYgKG5ldyB8fCB1bndyaXR0ZW4pCkBAIC0xMjU1LDEwICsxMjU4LDEwIEBACiAJCSAqIGFueSBhZGRpdGlvbmFsIHNlbWFwaG9yZXMgb3IgY2x1c3RlciBsb2Nrcy4KIAkJICovCiAJCXRtcF9wb3MgPSBjcG9zOwotCQlyZXQgPSBvY2ZzMl9kb19leHRlbmRfYWxsb2NhdGlvbihPQ0ZTMl9TQihpbm9kZS0+aV9zYiksIGlub2RlLAotCQkJCQkJICZ0bXBfcG9zLCAxLCAwLCB3Yy0+d19kaV9iaCwKLQkJCQkJCSB3Yy0+d19oYW5kbGUsIGRhdGFfYWMsCi0JCQkJCQkgbWV0YV9hYywgTlVMTCk7CisJCXJldCA9IG9jZnMyX2FkZF9pbm9kZV9kYXRhKE9DRlMyX1NCKGlub2RlLT5pX3NiKSwgaW5vZGUsCisJCQkJCSAgICZ0bXBfcG9zLCAxLCAwLCB3Yy0+d19kaV9iaCwKKwkJCQkJICAgd2MtPndfaGFuZGxlLCBkYXRhX2FjLAorCQkJCQkgICBtZXRhX2FjLCBOVUxMKTsKIAkJLyoKIAkJICogVGhpcyBzaG91bGRuJ3QgaGFwcGVuIGJlY2F1c2Ugd2UgbXVzdCBoYXZlIGFscmVhZHkKIAkJICogY2FsY3VsYXRlZCB0aGUgY29ycmVjdCBtZXRhIGRhdGEgYWxsb2NhdGlvbiByZXF1aXJlZC4gVGhlCkBAIC0xMjc2LDcgKzEyNzksOCBAQAogCQkJZ290byBvdXQ7CiAJCX0KIAl9IGVsc2UgaWYgKHVud3JpdHRlbikgewotCQlyZXQgPSBvY2ZzMl9tYXJrX2V4dGVudF93cml0dGVuKGlub2RlLCB3Yy0+d19kaV9iaCwKKwkJb2NmczJfaW5pdF9kaW5vZGVfZXh0ZW50X3RyZWUoJmV0LCBpbm9kZSwgd2MtPndfZGlfYmgpOworCQlyZXQgPSBvY2ZzMl9tYXJrX2V4dGVudF93cml0dGVuKGlub2RlLCAmZXQsCiAJCQkJCQl3Yy0+d19oYW5kbGUsIGNwb3MsIDEsIHBoeXMsCiAJCQkJCQltZXRhX2FjLCAmd2MtPndfZGVhbGxvYyk7CiAJCWlmIChyZXQgPCAwKSB7CkBAIC0xNjY1LDYgKzE2NjksNyBAQAogCXN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICpkYXRhX2FjID0gTlVMTDsKIAlzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqbWV0YV9hYyA9IE5VTEw7CiAJaGFuZGxlX3QgKmhhbmRsZTsKKwlzdHJ1Y3Qgb2NmczJfZXh0ZW50X3RyZWUgZXQ7CiAKIAlyZXQgPSBvY2ZzMl9hbGxvY193cml0ZV9jdHh0KCZ3Yywgb3NiLCBwb3MsIGxlbiwgZGlfYmgpOwogCWlmIChyZXQpIHsKQEAgLTE3MTIsMTQgKzE3MTcsMjMgQEAKIAkJICogb2NmczJfbG9ja19hbGxvY2F0b3JzKCkuIEl0IGdyZWF0bHkgb3Zlci1lc3RpbWF0ZXMKIAkJICogdGhlIHdvcmsgdG8gYmUgZG9uZS4KIAkJICovCi0JCXJldCA9IG9jZnMyX2xvY2tfYWxsb2NhdG9ycyhpbm9kZSwgZGksIGNsdXN0ZXJzX3RvX2FsbG9jLAotCQkJCQkgICAgZXh0ZW50c190b19zcGxpdCwgJmRhdGFfYWMsICZtZXRhX2FjKTsKKwkJbWxvZygwLCAiZXh0ZW5kIGlub2RlICVsbHUsIGlfc2l6ZSA9ICVsbGQsIGRpLT5pX2NsdXN0ZXJzID0gJXUsIgorCQkgICAgICIgY2x1c3RlcnNfdG9fYWRkID0gJXUsIGV4dGVudHNfdG9fc3BsaXQgPSAldVxuIiwKKwkJICAgICAodW5zaWduZWQgbG9uZyBsb25nKU9DRlMyX0koaW5vZGUpLT5pcF9ibGtubywKKwkJICAgICAobG9uZyBsb25nKWlfc2l6ZV9yZWFkKGlub2RlKSwgbGUzMl90b19jcHUoZGktPmlfY2x1c3RlcnMpLAorCQkgICAgIGNsdXN0ZXJzX3RvX2FsbG9jLCBleHRlbnRzX3RvX3NwbGl0KTsKKworCQlvY2ZzMl9pbml0X2Rpbm9kZV9leHRlbnRfdHJlZSgmZXQsIGlub2RlLCB3Yy0+d19kaV9iaCk7CisJCXJldCA9IG9jZnMyX2xvY2tfYWxsb2NhdG9ycyhpbm9kZSwgJmV0LAorCQkJCQkgICAgY2x1c3RlcnNfdG9fYWxsb2MsIGV4dGVudHNfdG9fc3BsaXQsCisJCQkJCSAgICAmZGF0YV9hYywgJm1ldGFfYWMpOwogCQlpZiAocmV0KSB7CiAJCQltbG9nX2Vycm5vKHJldCk7CiAJCQlnb3RvIG91dDsKIAkJfQogCi0JCWNyZWRpdHMgPSBvY2ZzMl9jYWxjX2V4dGVuZF9jcmVkaXRzKGlub2RlLT5pX3NiLCBkaSwKKwkJY3JlZGl0cyA9IG9jZnMyX2NhbGNfZXh0ZW5kX2NyZWRpdHMoaW5vZGUtPmlfc2IsCisJCQkJCQkgICAgJmRpLT5pZDIuaV9saXN0LAogCQkJCQkJICAgIGNsdXN0ZXJzX3RvX2FsbG9jKTsKIAogCX0KQEAgLTE5MDUsMTEgKzE5MTksMTUgQEAKIAkJfQogCiAJCWlmIChwYWdlX2hhc19idWZmZXJzKHRtcHBhZ2UpKSB7Ci0JCQlpZiAob2NmczJfc2hvdWxkX29yZGVyX2RhdGEoaW5vZGUpKQorCQkJaWYgKG9jZnMyX3Nob3VsZF9vcmRlcl9kYXRhKGlub2RlKSkgeworCQkJCW9jZnMyX2piZDJfZmlsZV9pbm9kZSh3Yy0+d19oYW5kbGUsIGlub2RlKTsKKyNpZmRlZiBDT05GSUdfT0NGUzJfQ09NUEFUX0pCRAogCQkJCXdhbGtfcGFnZV9idWZmZXJzKHdjLT53X2hhbmRsZSwKIAkJCQkJCSAgcGFnZV9idWZmZXJzKHRtcHBhZ2UpLAogCQkJCQkJICBmcm9tLCB0bywgTlVMTCwKIAkJCQkJCSAgb2NmczJfam91cm5hbF9kaXJ0eV9kYXRhKTsKKyNlbmRpZgorCQkJfQogCQkJYmxvY2tfY29tbWl0X3dyaXRlKHRtcHBhZ2UsIGZyb20sIHRvKTsKIAkJfQogCX0KZGlmZiAtLWdpdCBhL2ZzL29jZnMyL2J1ZmZlcl9oZWFkX2lvLmMgYi9mcy9vY2ZzMi9idWZmZXJfaGVhZF9pby5jCmluZGV4IGYxMzY2MzkuLjdlOTQ3YzYgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL2J1ZmZlcl9oZWFkX2lvLmMKKysrIGIvZnMvb2NmczIvYnVmZmVyX2hlYWRfaW8uYwpAQCAtNjYsNyArNjYsNyBAQAogCS8qIHJlbW92ZSBmcm9tIGRpcnR5IGxpc3QgYmVmb3JlIEkvTy4gKi8KIAljbGVhcl9idWZmZXJfZGlydHkoYmgpOwogCi0JZ2V0X2JoKGJoKTsgLyogZm9yIGVuZF9idWZmZXJfd3JpdGVfc3luYygpICovICAgICAgICAgICAgICAgICAgIAorCWdldF9iaChiaCk7IC8qIGZvciBlbmRfYnVmZmVyX3dyaXRlX3N5bmMoKSAqLwogCWJoLT5iX2VuZF9pbyA9IGVuZF9idWZmZXJfd3JpdGVfc3luYzsKIAlzdWJtaXRfYmgoV1JJVEUsIGJoKTsKIApAQCAtODgsMjIgKzg4LDEwMyBAQAogCXJldHVybiByZXQ7CiB9CiAKLWludCBvY2ZzMl9yZWFkX2Jsb2NrcyhzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiwgdTY0IGJsb2NrLCBpbnQgbnIsCi0JCSAgICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqYmhzW10sIGludCBmbGFncywKLQkJICAgICAgc3RydWN0IGlub2RlICppbm9kZSkKK2ludCBvY2ZzMl9yZWFkX2Jsb2Nrc19zeW5jKHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiLCB1NjQgYmxvY2ssCisJCQkgICB1bnNpZ25lZCBpbnQgbnIsIHN0cnVjdCBidWZmZXJfaGVhZCAqYmhzW10pCiB7CiAJaW50IHN0YXR1cyA9IDA7Ci0Jc3RydWN0IHN1cGVyX2Jsb2NrICpzYjsKKwl1bnNpZ25lZCBpbnQgaTsKKwlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoOworCisJaWYgKCFucikgeworCQltbG9nKE1MX0JIX0lPLCAiTm8gYnVmZmVycyB3aWxsIGJlIHJlYWQhXG4iKTsKKwkJZ290byBiYWlsOworCX0KKworCWZvciAoaSA9IDAgOyBpIDwgbnIgOyBpKyspIHsKKwkJaWYgKGJoc1tpXSA9PSBOVUxMKSB7CisJCQliaHNbaV0gPSBzYl9nZXRibGsob3NiLT5zYiwgYmxvY2srKyk7CisJCQlpZiAoYmhzW2ldID09IE5VTEwpIHsKKwkJCQlzdGF0dXMgPSAtRUlPOworCQkJCW1sb2dfZXJybm8oc3RhdHVzKTsKKwkJCQlnb3RvIGJhaWw7CisJCQl9CisJCX0KKwkJYmggPSBiaHNbaV07CisKKwkJaWYgKGJ1ZmZlcl9qYmQoYmgpKSB7CisJCQltbG9nKE1MX0VSUk9SLAorCQkJICAgICAidHJ5aW5nIHRvIHN5bmMgcmVhZCBhIGpiZCAiCisJCQkgICAgICJtYW5hZ2VkIGJoIChibG9ja25yID0gJWxsdSksIHNraXBwaW5nXG4iLAorCQkJICAgICAodW5zaWduZWQgbG9uZyBsb25nKWJoLT5iX2Jsb2NrbnIpOworCQkJY29udGludWU7CisJCX0KKworCQlpZiAoYnVmZmVyX2RpcnR5KGJoKSkgeworCQkJLyogVGhpcyBzaG91bGQgcHJvYmFibHkgYmUgYSBCVUcsIG9yCisJCQkgKiBhdCBsZWFzdCByZXR1cm4gYW4gZXJyb3IuICovCisJCQltbG9nKE1MX0VSUk9SLAorCQkJICAgICAidHJ5aW5nIHRvIHN5bmMgcmVhZCBhIGRpcnR5ICIKKwkJCSAgICAgImJ1ZmZlciEgKGJsb2NrbnIgPSAlbGx1KSwgc2tpcHBpbmdcbiIsCisJCQkgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpYmgtPmJfYmxvY2tucik7CisJCQljb250aW51ZTsKKwkJfQorCisJCWxvY2tfYnVmZmVyKGJoKTsKKwkJaWYgKGJ1ZmZlcl9qYmQoYmgpKSB7CisJCQltbG9nKE1MX0VSUk9SLAorCQkJICAgICAiYmxvY2sgJWxsdSBoYWQgdGhlIEpCRCBiaXQgc2V0ICIKKwkJCSAgICAgIndoaWxlIEkgd2FzIGluIGxvY2tfYnVmZmVyISIsCisJCQkgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpYmgtPmJfYmxvY2tucik7CisJCQlCVUcoKTsKKwkJfQorCisJCWNsZWFyX2J1ZmZlcl91cHRvZGF0ZShiaCk7CisJCWdldF9iaChiaCk7IC8qIGZvciBlbmRfYnVmZmVyX3JlYWRfc3luYygpICovCisJCWJoLT5iX2VuZF9pbyA9IGVuZF9idWZmZXJfcmVhZF9zeW5jOworCQlzdWJtaXRfYmgoUkVBRCwgYmgpOworCX0KKworCWZvciAoaSA9IG5yOyBpID4gMDsgaS0tKSB7CisJCWJoID0gYmhzW2kgLSAxXTsKKworCQlpZiAoYnVmZmVyX2piZChiaCkpIHsKKwkJCW1sb2coTUxfRVJST1IsCisJCQkgICAgICJ0aGUgam91cm5hbCBnb3QgdGhlIGJ1ZmZlciB3aGlsZSBpdCB3YXMgIgorCQkJICAgICAibG9ja2VkIGZvciBpbyEgKGJsb2NrbnIgPSAlbGx1KVxuIiwKKwkJCSAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZyliaC0+Yl9ibG9ja25yKTsKKwkJCUJVRygpOworCQl9CisKKwkJd2FpdF9vbl9idWZmZXIoYmgpOworCQlpZiAoIWJ1ZmZlcl91cHRvZGF0ZShiaCkpIHsKKwkJCS8qIFN0YXR1cyB3b24ndCBiZSBjbGVhcmVkIGZyb20gaGVyZSBvbiBvdXQsCisJCQkgKiBzbyB3ZSBjYW4gc2FmZWx5IHJlY29yZCB0aGlzIGFuZCBsb29wIGJhY2sKKwkJCSAqIHRvIGNsZWFudXAgdGhlIG90aGVyIGJ1ZmZlcnMuICovCisJCQlzdGF0dXMgPSAtRUlPOworCQkJcHV0X2JoKGJoKTsKKwkJCWJoc1tpIC0gMV0gPSBOVUxMOworCQl9CisJfQorCitiYWlsOgorCXJldHVybiBzdGF0dXM7Cit9CisKK2ludCBvY2ZzMl9yZWFkX2Jsb2NrcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1NjQgYmxvY2ssIGludCBuciwKKwkJICAgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaHNbXSwgaW50IGZsYWdzKQoreworCWludCBzdGF0dXMgPSAwOwogCWludCBpLCBpZ25vcmVfY2FjaGUgPSAwOwogCXN0cnVjdCBidWZmZXJfaGVhZCAqYmg7CiAKLQltbG9nX2VudHJ5KCIoYmxvY2s9KCVsbHUpLCBucj0oJWQpLCBmbGFncz0lZCwgaW5vZGU9JXApXG4iLAotCQkgICAodW5zaWduZWQgbG9uZyBsb25nKWJsb2NrLCBuciwgZmxhZ3MsIGlub2RlKTsKKwltbG9nX2VudHJ5KCIoaW5vZGU9JXAsIGJsb2NrPSglbGx1KSwgbnI9KCVkKSwgZmxhZ3M9JWQpXG4iLAorCQkgICBpbm9kZSwgKHVuc2lnbmVkIGxvbmcgbG9uZylibG9jaywgbnIsIGZsYWdzKTsKIAorCUJVR19PTighaW5vZGUpOwogCUJVR19PTigoZmxhZ3MgJiBPQ0ZTMl9CSF9SRUFEQUhFQUQpICYmCi0JICAgICAgICghaW5vZGUgfHwgIShmbGFncyAmIE9DRlMyX0JIX0NBQ0hFRCkpKTsKKwkgICAgICAgKGZsYWdzICYgT0NGUzJfQkhfSUdOT1JFX0NBQ0hFKSk7CiAKLQlpZiAob3NiID09IE5VTEwgfHwgb3NiLT5zYiA9PSBOVUxMIHx8IGJocyA9PSBOVUxMKSB7CisJaWYgKGJocyA9PSBOVUxMKSB7CiAJCXN0YXR1cyA9IC1FSU5WQUw7CiAJCW1sb2dfZXJybm8oc3RhdHVzKTsKIAkJZ290byBiYWlsOwpAQCAtMTIyLDI2ICsyMDMsMTkgQEAKIAkJZ290byBiYWlsOwogCX0KIAotCXNiID0gb3NiLT5zYjsKLQotCWlmIChmbGFncyAmIE9DRlMyX0JIX0NBQ0hFRCAmJiAhaW5vZGUpCi0JCWZsYWdzICY9IH5PQ0ZTMl9CSF9DQUNIRUQ7Ci0KLQlpZiAoaW5vZGUpCi0JCW11dGV4X2xvY2soJk9DRlMyX0koaW5vZGUpLT5pcF9pb19tdXRleCk7CisJbXV0ZXhfbG9jaygmT0NGUzJfSShpbm9kZSktPmlwX2lvX211dGV4KTsKIAlmb3IgKGkgPSAwIDsgaSA8IG5yIDsgaSsrKSB7CiAJCWlmIChiaHNbaV0gPT0gTlVMTCkgewotCQkJYmhzW2ldID0gc2JfZ2V0YmxrKHNiLCBibG9jaysrKTsKKwkJCWJoc1tpXSA9IHNiX2dldGJsayhpbm9kZS0+aV9zYiwgYmxvY2srKyk7CiAJCQlpZiAoYmhzW2ldID09IE5VTEwpIHsKLQkJCQlpZiAoaW5vZGUpCi0JCQkJCW11dGV4X3VubG9jaygmT0NGUzJfSShpbm9kZSktPmlwX2lvX211dGV4KTsKKwkJCQltdXRleF91bmxvY2soJk9DRlMyX0koaW5vZGUpLT5pcF9pb19tdXRleCk7CiAJCQkJc3RhdHVzID0gLUVJTzsKIAkJCQltbG9nX2Vycm5vKHN0YXR1cyk7CiAJCQkJZ290byBiYWlsOwogCQkJfQogCQl9CiAJCWJoID0gYmhzW2ldOwotCQlpZ25vcmVfY2FjaGUgPSAwOworCQlpZ25vcmVfY2FjaGUgPSAoZmxhZ3MgJiBPQ0ZTMl9CSF9JR05PUkVfQ0FDSEUpOwogCiAJCS8qIFRoZXJlIGFyZSB0aHJlZSByZWFkLWFoZWFkIGNhc2VzIGhlcmUgd2hpY2ggd2UgbmVlZCB0bwogCQkgKiBiZSBjb25jZXJuZWQgd2l0aC4gQWxsIHRocmVlIGFzc3VtZSBhIGJ1ZmZlciBoYXMKQEAgLTE2NywyNiArMjQxLDI3IEBACiAJCSAqICAgIGJlZm9yZSBvdXIgaXMtaXQtaW4tZmxpZ2h0IGNoZWNrLgogCQkgKi8KIAotCQlpZiAoZmxhZ3MgJiBPQ0ZTMl9CSF9DQUNIRUQgJiYKLQkJICAgICFvY2ZzMl9idWZmZXJfdXB0b2RhdGUoaW5vZGUsIGJoKSkgeworCQlpZiAoIWlnbm9yZV9jYWNoZSAmJiAhb2NmczJfYnVmZmVyX3VwdG9kYXRlKGlub2RlLCBiaCkpIHsKIAkJCW1sb2coTUxfVVBUT0RBVEUsCiAJCQkgICAgICJiaCAoJWxsdSksIGlub2RlICVsbHUgbm90IHVwdG9kYXRlXG4iLAogCQkJICAgICAodW5zaWduZWQgbG9uZyBsb25nKWJoLT5iX2Jsb2NrbnIsCiAJCQkgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpT0NGUzJfSShpbm9kZSktPmlwX2Jsa25vKTsKKwkJCS8qIFdlJ3JlIHVzaW5nIGlnbm9yZV9jYWNoZSBoZXJlIHRvIHNheQorCQkJICogImdvIHRvIGRpc2siICovCiAJCQlpZ25vcmVfY2FjaGUgPSAxOwogCQl9CiAKIAkJLyogWFhYOiBDYW4gd2UgZXZlciBnZXQgdGhpcyBhbmQgKm5vdCogaGF2ZSB0aGUgY2FjaGVkCiAJCSAqIGZsYWcgc2V0PyAqLwogCQlpZiAoYnVmZmVyX2piZChiaCkpIHsKLQkJCWlmICghKGZsYWdzICYgT0NGUzJfQkhfQ0FDSEVEKSB8fCBpZ25vcmVfY2FjaGUpCisJCQlpZiAoaWdub3JlX2NhY2hlKQogCQkJCW1sb2coTUxfQkhfSU8sICJ0cnlpbmcgdG8gc3luYyByZWFkIGEgamJkICIKIAkJCQkJICAgICAgICJtYW5hZ2VkIGJoIChibG9ja25yID0gJWxsdSlcbiIsCiAJCQkJICAgICAodW5zaWduZWQgbG9uZyBsb25nKWJoLT5iX2Jsb2NrbnIpOwogCQkJY29udGludWU7CiAJCX0KIAotCQlpZiAoIShmbGFncyAmIE9DRlMyX0JIX0NBQ0hFRCkgfHwgaWdub3JlX2NhY2hlKSB7CisJCWlmIChpZ25vcmVfY2FjaGUpIHsKIAkJCWlmIChidWZmZXJfZGlydHkoYmgpKSB7CiAJCQkJLyogVGhpcyBzaG91bGQgcHJvYmFibHkgYmUgYSBCVUcsIG9yCiAJCQkJICogYXQgbGVhc3QgcmV0dXJuIGFuIGVycm9yLiAqLwpAQCAtMjIxLDcgKzI5Niw3IEBACiAJCQkgKiBwcmV2aW91c2x5IHJlYWQtYWhlYWQgYnVmZmVyIG1heSBoYXZlCiAJCQkgKiBjb21wbGV0ZWQgSS9PIHdoaWxlIHdlIHdlcmUgd2FpdGluZyBmb3IgdGhlCiAJCQkgKiBidWZmZXIgbG9jay4gKi8KLQkJCWlmICgoZmxhZ3MgJiBPQ0ZTMl9CSF9DQUNIRUQpCisJCQlpZiAoIShmbGFncyAmIE9DRlMyX0JIX0lHTk9SRV9DQUNIRSkKIAkJCSAgICAmJiAhKGZsYWdzICYgT0NGUzJfQkhfUkVBREFIRUFEKQogCQkJICAgICYmIG9jZnMyX2J1ZmZlcl91cHRvZGF0ZShpbm9kZSwgYmgpKSB7CiAJCQkJdW5sb2NrX2J1ZmZlcihiaCk7CkBAIC0yNjUsMTUgKzM0MCwxNCBAQAogCQkvKiBBbHdheXMgc2V0IHRoZSBidWZmZXIgaW4gdGhlIGNhY2hlLCBldmVuIGlmIGl0IHdhcwogCQkgKiBhIGZvcmNlZCByZWFkLCBvciByZWFkLWFoZWFkIHdoaWNoIGhhc24ndCB5ZXQKIAkJICogY29tcGxldGVkLiAqLwotCQlpZiAoaW5vZGUpCi0JCQlvY2ZzMl9zZXRfYnVmZmVyX3VwdG9kYXRlKGlub2RlLCBiaCk7CisJCW9jZnMyX3NldF9idWZmZXJfdXB0b2RhdGUoaW5vZGUsIGJoKTsKIAl9Ci0JaWYgKGlub2RlKQotCQltdXRleF91bmxvY2soJk9DRlMyX0koaW5vZGUpLT5pcF9pb19tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZPQ0ZTMl9JKGlub2RlKS0+aXBfaW9fbXV0ZXgpOwogCiAJbWxvZyhNTF9CSF9JTywgImJsb2NrPSglbGx1KSwgbnI9KCVkKSwgY2FjaGVkPSVzLCBmbGFncz0weCV4XG4iLCAKIAkgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpYmxvY2ssIG5yLAotCSAgICAgKCEoZmxhZ3MgJiBPQ0ZTMl9CSF9DQUNIRUQpIHx8IGlnbm9yZV9jYWNoZSkgPyAibm8iIDogInllcyIsIGZsYWdzKTsKKwkgICAgICgoZmxhZ3MgJiBPQ0ZTMl9CSF9JR05PUkVfQ0FDSEUpIHx8IGlnbm9yZV9jYWNoZSkgPyAibm8iIDogInllcyIsCisJICAgICBmbGFncyk7CiAKIGJhaWw6CiAKZGlmZiAtLWdpdCBhL2ZzL29jZnMyL2J1ZmZlcl9oZWFkX2lvLmggYi9mcy9vY2ZzMi9idWZmZXJfaGVhZF9pby5oCmluZGV4IGMyZTc4NjEuLjc1ZTFkY2IgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL2J1ZmZlcl9oZWFkX2lvLmgKKysrIGIvZnMvb2NmczIvYnVmZmVyX2hlYWRfaW8uaApAQCAtMzEsMzEgKzMxLDI5IEBACiB2b2lkIG9jZnMyX2VuZF9idWZmZXJfaW9fc3luYyhzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLAogCQkJICAgICBpbnQgdXB0b2RhdGUpOwogCi1zdGF0aWMgaW5saW5lIGludCBvY2ZzMl9yZWFkX2Jsb2NrKHN0cnVjdCBvY2ZzMl9zdXBlciAgICAgICAgICAqb3NiLAorc3RhdGljIGlubGluZSBpbnQgb2NmczJfcmVhZF9ibG9jayhzdHJ1Y3QgaW5vZGUJICAgICAgICppbm9kZSwKIAkJCQkgICB1NjQgICAgICAgICAgICAgICAgICBvZmYsCi0JCQkJICAgc3RydWN0IGJ1ZmZlcl9oZWFkICoqYmgsCi0JCQkJICAgaW50ICAgICAgICAgICAgICAgICAgZmxhZ3MsCi0JCQkJICAgc3RydWN0IGlub2RlICAgICAgICAqaW5vZGUpOworCQkJCSAgIHN0cnVjdCBidWZmZXJfaGVhZCAqKmJoKTsKIAogaW50IG9jZnMyX3dyaXRlX2Jsb2NrKHN0cnVjdCBvY2ZzMl9zdXBlciAgICAgICAgICAqb3NiLAogCQkgICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgICpiaCwKIAkJICAgICAgc3RydWN0IGlub2RlICAgICAgICAqaW5vZGUpOwotaW50IG9jZnMyX3JlYWRfYmxvY2tzKHN0cnVjdCBvY2ZzMl9zdXBlciAgICAgICAgICAqb3NiLAoraW50IG9jZnMyX3JlYWRfYmxvY2tzKHN0cnVjdCBpbm9kZQkgICppbm9kZSwKIAkJICAgICAgdTY0ICAgICAgICAgICAgICAgICAgYmxvY2ssCiAJCSAgICAgIGludCAgICAgICAgICAgICAgICAgIG5yLAogCQkgICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgICpiaHNbXSwKLQkJICAgICAgaW50ICAgICAgICAgICAgICAgICAgZmxhZ3MsCi0JCSAgICAgIHN0cnVjdCBpbm9kZSAgICAgICAgKmlub2RlKTsKKwkJICAgICAgaW50ICAgICAgICAgICAgICAgICAgZmxhZ3MpOworaW50IG9jZnMyX3JlYWRfYmxvY2tzX3N5bmMoc3RydWN0IG9jZnMyX3N1cGVyICpvc2IsIHU2NCBibG9jaywKKwkJCSAgIHVuc2lnbmVkIGludCBuciwgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaHNbXSk7CiAKIGludCBvY2ZzMl93cml0ZV9zdXBlcl9vcl9iYWNrdXAoc3RydWN0IG9jZnMyX3N1cGVyICpvc2IsCiAJCQkJc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCk7CiAKLSNkZWZpbmUgT0NGUzJfQkhfQ0FDSEVEICAgICAgICAgICAgMQorI2RlZmluZSBPQ0ZTMl9CSF9JR05PUkVfQ0FDSEUgICAgICAxCiAjZGVmaW5lIE9DRlMyX0JIX1JFQURBSEVBRCAgICAgICAgIDgKIAotc3RhdGljIGlubGluZSBpbnQgb2NmczJfcmVhZF9ibG9jayhzdHJ1Y3Qgb2NmczJfc3VwZXIgKiBvc2IsIHU2NCBvZmYsCi0JCQkJICAgc3RydWN0IGJ1ZmZlcl9oZWFkICoqYmgsIGludCBmbGFncywKLQkJCQkgICBzdHJ1Y3QgaW5vZGUgKmlub2RlKQorc3RhdGljIGlubGluZSBpbnQgb2NmczJfcmVhZF9ibG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1NjQgb2ZmLAorCQkJCSAgIHN0cnVjdCBidWZmZXJfaGVhZCAqKmJoKQogewogCWludCBzdGF0dXMgPSAwOwogCkBAIC02NSw4ICs2Myw3IEBACiAJCWdvdG8gYmFpbDsKIAl9CiAKLQlzdGF0dXMgPSBvY2ZzMl9yZWFkX2Jsb2Nrcyhvc2IsIG9mZiwgMSwgYmgsCi0JCQkJICAgZmxhZ3MsIGlub2RlKTsKKwlzdGF0dXMgPSBvY2ZzMl9yZWFkX2Jsb2Nrcyhpbm9kZSwgb2ZmLCAxLCBiaCwgMCk7CiAKIGJhaWw6CiAJcmV0dXJuIHN0YXR1czsKZGlmZiAtLWdpdCBhL2ZzL29jZnMyL2NsdXN0ZXIvbWFza2xvZy5jIGIvZnMvb2NmczIvY2x1c3Rlci9tYXNrbG9nLmMKaW5kZXggMjNjNzMyZi4uZDhhMGNiOSAxMDA2NDQKLS0tIGEvZnMvb2NmczIvY2x1c3Rlci9tYXNrbG9nLmMKKysrIGIvZnMvb2NmczIvY2x1c3Rlci9tYXNrbG9nLmMKQEAgLTEwOSw2ICsxMDksNyBAQAogCWRlZmluZV9tYXNrKENPTk4pLAogCWRlZmluZV9tYXNrKFFVT1JVTSksCiAJZGVmaW5lX21hc2soRVhQT1JUKSwKKwlkZWZpbmVfbWFzayhYQVRUUiksCiAJZGVmaW5lX21hc2soRVJST1IpLAogCWRlZmluZV9tYXNrKE5PVElDRSksCiAJZGVmaW5lX21hc2soS1RIUkVBRCksCmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9jbHVzdGVyL21hc2tsb2cuaCBiL2ZzL29jZnMyL2NsdXN0ZXIvbWFza2xvZy5oCmluZGV4IDU5N2UwNjQuLjU3NjcwYzYgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL2NsdXN0ZXIvbWFza2xvZy5oCisrKyBiL2ZzL29jZnMyL2NsdXN0ZXIvbWFza2xvZy5oCkBAIC0xMTIsNiArMTEyLDcgQEAKICNkZWZpbmUgTUxfQ09OTgkJMHgwMDAwMDAwMDA0MDAwMDAwVUxMIC8qIG5ldCBjb25uZWN0aW9uIG1hbmFnZW1lbnQgKi8KICNkZWZpbmUgTUxfUVVPUlVNCTB4MDAwMDAwMDAwODAwMDAwMFVMTCAvKiBuZXQgY29ubmVjdGlvbiBxdW9ydW0gKi8KICNkZWZpbmUgTUxfRVhQT1JUCTB4MDAwMDAwMDAxMDAwMDAwMFVMTCAvKiBvY2ZzMiBleHBvcnQgb3BlcmF0aW9ucyAqLworI2RlZmluZSBNTF9YQVRUUgkweDAwMDAwMDAwMjAwMDAwMDBVTEwgLyogb2NmczIgZXh0ZW5kZWQgYXR0cmlidXRlcyAqLwogLyogYml0cyB0aGF0IGFyZSBpbmZyZXF1ZW50bHkgZ2l2ZW4gYW5kIGZyZXF1ZW50bHkgbWF0Y2hlZCBpbiB0aGUgaGlnaCB3b3JkICovCiAjZGVmaW5lIE1MX0VSUk9SCTB4MDAwMDAwMDEwMDAwMDAwMFVMTCAvKiBzZW50IHRvIEtFUk5fRVJSICovCiAjZGVmaW5lIE1MX05PVElDRQkweDAwMDAwMDAyMDAwMDAwMDBVTEwgLyogc2V0biB0byBLRVJOX05PVElDRSAqLwpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvZGlyLmMgYi9mcy9vY2ZzMi9kaXIuYwppbmRleCA5Y2NlNTYzLi4wMjZlNmViIDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9kaXIuYworKysgYi9mcy9vY2ZzMi9kaXIuYwpAQCAtODIsNiArODIsNDkgQEAKIAkJCSAgICAgICBzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqbWV0YV9hYywKIAkJCSAgICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKipuZXdfYmgpOwogCitzdGF0aWMgc3RydWN0IGJ1ZmZlcl9oZWFkICpvY2ZzMl9icmVhZChzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkJCSAgICAgICBpbnQgYmxvY2ssIGludCAqZXJyLCBpbnQgcmVhZGEpCit7CisJc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCA9IE5VTEw7CisJaW50IHRtcGVycjsKKwl1NjQgcF9ibGtubzsKKwlpbnQgcmVhZGZsYWdzID0gMDsKKworCWlmIChyZWFkYSkKKwkJcmVhZGZsYWdzIHw9IE9DRlMyX0JIX1JFQURBSEVBRDsKKworCWlmICgoKHU2NClibG9jayA8PCBpbm9kZS0+aV9zYi0+c19ibG9ja3NpemVfYml0cykgPj0KKwkgICAgaV9zaXplX3JlYWQoaW5vZGUpKSB7CisJCUJVR19PTighcmVhZGEpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlkb3duX3JlYWQoJk9DRlMyX0koaW5vZGUpLT5pcF9hbGxvY19zZW0pOworCXRtcGVyciA9IG9jZnMyX2V4dGVudF9tYXBfZ2V0X2Jsb2Nrcyhpbm9kZSwgYmxvY2ssICZwX2Jsa25vLCBOVUxMLAorCQkJCQkgICAgIE5VTEwpOworCXVwX3JlYWQoJk9DRlMyX0koaW5vZGUpLT5pcF9hbGxvY19zZW0pOworCWlmICh0bXBlcnIgPCAwKSB7CisJCW1sb2dfZXJybm8odG1wZXJyKTsKKwkJZ290byBmYWlsOworCX0KKworCXRtcGVyciA9IG9jZnMyX3JlYWRfYmxvY2tzKGlub2RlLCBwX2Jsa25vLCAxLCAmYmgsIHJlYWRmbGFncyk7CisJaWYgKHRtcGVyciA8IDApCisJCWdvdG8gZmFpbDsKKworCXRtcGVyciA9IDA7CisKKwkqZXJyID0gMDsKKwlyZXR1cm4gYmg7CisKK2ZhaWw6CisJYnJlbHNlKGJoKTsKKwliaCA9IE5VTEw7CisKKwkqZXJyID0gLUVJTzsKKwlyZXR1cm4gTlVMTDsKK30KKwogLyoKICAqIGJoIHBhc3NlZCBoZXJlIGNhbiBiZSBhbiBpbm9kZSBibG9jayBvciBhIGRpciBkYXRhIGJsb2NrLCBkZXBlbmRpbmcKICAqIG9uIHRoZSBpbm9kZSBpbmxpbmUgZGF0YSBmbGFnLgpAQCAtMTg4LDggKzIzMSw3IEBACiAJc3RydWN0IG9jZnMyX2Rpbm9kZSAqZGk7CiAJc3RydWN0IG9jZnMyX2lubGluZV9kYXRhICpkYXRhOwogCi0JcmV0ID0gb2NmczJfcmVhZF9ibG9jayhPQ0ZTMl9TQihkaXItPmlfc2IpLCBPQ0ZTMl9JKGRpciktPmlwX2Jsa25vLAotCQkJICAgICAgICZkaV9iaCwgT0NGUzJfQkhfQ0FDSEVELCBkaXIpOworCXJldCA9IG9jZnMyX3JlYWRfYmxvY2soZGlyLCBPQ0ZTMl9JKGRpciktPmlwX2Jsa25vLCAmZGlfYmgpOwogCWlmIChyZXQpIHsKIAkJbWxvZ19lcnJubyhyZXQpOwogCQlnb3RvIG91dDsKQEAgLTI2MCwxNCArMzAyLDEzIEBACiAJCX0KIAkJaWYgKChiaCA9IGJoX3VzZVtyYV9wdHIrK10pID09IE5VTEwpCiAJCQlnb3RvIG5leHQ7Ci0JCXdhaXRfb25fYnVmZmVyKGJoKTsKLQkJaWYgKCFidWZmZXJfdXB0b2RhdGUoYmgpKSB7Ci0JCQkvKiByZWFkIGVycm9yLCBza2lwIGJsb2NrICYgaG9wZSBmb3IgdGhlIGJlc3QgKi8KKwkJaWYgKG9jZnMyX3JlYWRfYmxvY2soZGlyLCBibG9jaywgJmJoKSkgeworCQkJLyogcmVhZCBlcnJvciwgc2tpcCBibG9jayAmIGhvcGUgZm9yIHRoZSBiZXN0LgorCQkJICogb2NmczJfcmVhZF9ibG9jaygpIGhhcyByZWxlYXNlZCB0aGUgYmguICovCiAJCQlvY2ZzMl9lcnJvcihkaXItPmlfc2IsICJyZWFkaW5nIGRpcmVjdG9yeSAlbGx1LCAiCiAJCQkJICAgICJvZmZzZXQgJWx1XG4iLAogCQkJCSAgICAodW5zaWduZWQgbG9uZyBsb25nKU9DRlMyX0koZGlyKS0+aXBfYmxrbm8sCiAJCQkJICAgIGJsb2NrKTsKLQkJCWJyZWxzZShiaCk7CiAJCQlnb3RvIG5leHQ7CiAJCX0KIAkJaSA9IG9jZnMyX3NlYXJjaF9kaXJibG9jayhiaCwgZGlyLCBuYW1lLCBuYW1lbGVuLApAQCAtNDE3LDggKzQ1OCw3IEBACiAJc3RydWN0IG9jZnMyX2Rpbm9kZSAqZGk7CiAJc3RydWN0IG9jZnMyX2lubGluZV9kYXRhICpkYXRhOwogCi0JcmV0ID0gb2NmczJfcmVhZF9ibG9jayhPQ0ZTMl9TQihkaXItPmlfc2IpLCBPQ0ZTMl9JKGRpciktPmlwX2Jsa25vLAotCQkJICAgICAgICZkaV9iaCwgT0NGUzJfQkhfQ0FDSEVELCBkaXIpOworCXJldCA9IG9jZnMyX3JlYWRfYmxvY2soZGlyLCBPQ0ZTMl9JKGRpciktPmlwX2Jsa25vLCAmZGlfYmgpOwogCWlmIChyZXQpIHsKIAkJbWxvZ19lcnJubyhyZXQpOwogCQlnb3RvIG91dDsKQEAgLTU5Niw4ICs2MzYsNyBAQAogCXN0cnVjdCBvY2ZzMl9pbmxpbmVfZGF0YSAqZGF0YTsKIAlzdHJ1Y3Qgb2NmczJfZGlyX2VudHJ5ICpkZTsKIAotCXJldCA9IG9jZnMyX3JlYWRfYmxvY2soT0NGUzJfU0IoaW5vZGUtPmlfc2IpLCBPQ0ZTMl9JKGlub2RlKS0+aXBfYmxrbm8sCi0JCQkgICAgICAgJmRpX2JoLCBPQ0ZTMl9CSF9DQUNIRUQsIGlub2RlKTsKKwlyZXQgPSBvY2ZzMl9yZWFkX2Jsb2NrKGlub2RlLCBPQ0ZTMl9JKGlub2RlKS0+aXBfYmxrbm8sICZkaV9iaCk7CiAJaWYgKHJldCkgewogCQltbG9nKE1MX0VSUk9SLCAiVW5hYmxlIHRvIHJlYWQgaW5vZGUgYmxvY2sgZm9yIGRpciAlbGx1XG4iLAogCQkgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpT0NGUzJfSShpbm9kZSktPmlwX2Jsa25vKTsKQEAgLTcxNiw4ICs3NTUsNyBAQAogCQkJZm9yIChpID0gcmFfc2VjdG9ycyA+PiAoc2ItPnNfYmxvY2tzaXplX2JpdHMgLSA5KTsKIAkJCSAgICAgaSA+IDA7IGktLSkgewogCQkJCXRtcCA9IG9jZnMyX2JyZWFkKGlub2RlLCArK2JsaywgJmVyciwgMSk7Ci0JCQkJaWYgKHRtcCkKLQkJCQkJYnJlbHNlKHRtcCk7CisJCQkJYnJlbHNlKHRtcCk7CiAJCQl9CiAJCQlsYXN0X3JhX2JsayA9IGJsazsKIAkJCXJhX3NlY3RvcnMgPSA4OwpAQCAtODk5LDEwICs5MzcsOCBAQAogbGVhdmU6CiAJaWYgKHN0YXR1cyA8IDApIHsKIAkJKmRpcmVudCA9IE5VTEw7Ci0JCWlmICgqZGlyZW50X2JoKSB7Ci0JCQlicmVsc2UoKmRpcmVudF9iaCk7Ci0JCQkqZGlyZW50X2JoID0gTlVMTDsKLQkJfQorCQlicmVsc2UoKmRpcmVudF9iaCk7CisJCSpkaXJlbnRfYmggPSBOVUxMOwogCX0KIAogCW1sb2dfZXhpdChzdGF0dXMpOwpAQCAtOTUxLDggKzk4Nyw3IEBACiAKIAlyZXQgPSAwOwogYmFpbDoKLQlpZiAoZGlyZW50X2JoKQotCQlicmVsc2UoZGlyZW50X2JoKTsKKwlicmVsc2UoZGlyZW50X2JoKTsKIAogCW1sb2dfZXhpdChyZXQpOwogCXJldHVybiByZXQ7CkBAIC0xMTI3LDggKzExNjIsNyBAQAogCiAJc3RhdHVzID0gMDsKIGJhaWw6Ci0JaWYgKG5ld19iaCkKLQkJYnJlbHNlKG5ld19iaCk7CisJYnJlbHNlKG5ld19iaCk7CiAKIAltbG9nX2V4aXQoc3RhdHVzKTsKIAlyZXR1cm4gc3RhdHVzOwpAQCAtMTE5Miw2ICsxMjI2LDkgQEAKIAlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmRpcmRhdGFfYmggPSBOVUxMOwogCXN0cnVjdCBvY2ZzMl9kaW5vZGUgKmRpID0gKHN0cnVjdCBvY2ZzMl9kaW5vZGUgKilkaV9iaC0+Yl9kYXRhOwogCWhhbmRsZV90ICpoYW5kbGU7CisJc3RydWN0IG9jZnMyX2V4dGVudF90cmVlIGV0OworCisJb2NmczJfaW5pdF9kaW5vZGVfZXh0ZW50X3RyZWUoJmV0LCBkaXIsIGRpX2JoKTsKIAogCWFsbG9jID0gb2NmczJfY2x1c3RlcnNfZm9yX2J5dGVzKHNiLCBieXRlcyk7CiAKQEAgLTEzMDUsOCArMTM0Miw4IEBACiAJICogVGhpcyBzaG91bGQgbmV2ZXIgZmFpbCBhcyBvdXIgZXh0ZW50IGxpc3QgaXMgZW1wdHkgYW5kIGFsbAogCSAqIHJlbGF0ZWQgYmxvY2tzIGhhdmUgYmVlbiBqb3VybmFsZWQgYWxyZWFkeS4KIAkgKi8KLQlyZXQgPSBvY2ZzMl9pbnNlcnRfZXh0ZW50KG9zYiwgaGFuZGxlLCBkaXIsIGRpX2JoLCAwLCBibGtubywgbGVuLCAwLAotCQkJCSAgTlVMTCk7CisJcmV0ID0gb2NmczJfaW5zZXJ0X2V4dGVudChvc2IsIGhhbmRsZSwgZGlyLCAmZXQsIDAsIGJsa25vLCBsZW4sCisJCQkJICAwLCBOVUxMKTsKIAlpZiAocmV0KSB7CiAJCW1sb2dfZXJybm8ocmV0KTsKIAkJZ290byBvdXRfY29tbWl0OwpAQCAtMTMzNyw4ICsxMzc0LDggQEAKIAkJfQogCQlibGtubyA9IG9jZnMyX2NsdXN0ZXJzX3RvX2Jsb2NrcyhkaXItPmlfc2IsIGJpdF9vZmYpOwogCi0JCXJldCA9IG9jZnMyX2luc2VydF9leHRlbnQob3NiLCBoYW5kbGUsIGRpciwgZGlfYmgsIDEsIGJsa25vLAotCQkJCQkgIGxlbiwgMCwgTlVMTCk7CisJCXJldCA9IG9jZnMyX2luc2VydF9leHRlbnQob3NiLCBoYW5kbGUsIGRpciwgJmV0LCAxLAorCQkJCQkgIGJsa25vLCBsZW4sIDAsIE5VTEwpOwogCQlpZiAocmV0KSB7CiAJCQltbG9nX2Vycm5vKHJldCk7CiAJCQlnb3RvIG91dF9jb21taXQ7CkBAIC0xMzgzLDkgKzE0MjAsOSBAQAogCWlmIChleHRlbmQpIHsKIAkJdTMyIG9mZnNldCA9IE9DRlMyX0koZGlyKS0+aXBfY2x1c3RlcnM7CiAKLQkJc3RhdHVzID0gb2NmczJfZG9fZXh0ZW5kX2FsbG9jYXRpb24oT0NGUzJfU0Ioc2IpLCBkaXIsICZvZmZzZXQsCi0JCQkJCQkgICAgMSwgMCwgcGFyZW50X2ZlX2JoLCBoYW5kbGUsCi0JCQkJCQkgICAgZGF0YV9hYywgbWV0YV9hYywgTlVMTCk7CisJCXN0YXR1cyA9IG9jZnMyX2FkZF9pbm9kZV9kYXRhKE9DRlMyX1NCKHNiKSwgZGlyLCAmb2Zmc2V0LAorCQkJCQkgICAgICAxLCAwLCBwYXJlbnRfZmVfYmgsIGhhbmRsZSwKKwkJCQkJICAgICAgZGF0YV9hYywgbWV0YV9hYywgTlVMTCk7CiAJCUJVR19PTihzdGF0dXMgPT0gLUVBR0FJTik7CiAJCWlmIChzdGF0dXMgPCAwKSB7CiAJCQltbG9nX2Vycm5vKHN0YXR1cyk7CkBAIC0xNDMwLDEyICsxNDY3LDE0IEBACiAJaW50IGNyZWRpdHMsIG51bV9mcmVlX2V4dGVudHMsIGRyb3BfYWxsb2Nfc2VtID0gMDsKIAlsb2ZmX3QgZGlyX2lfc2l6ZTsKIAlzdHJ1Y3Qgb2NmczJfZGlub2RlICpmZSA9IChzdHJ1Y3Qgb2NmczJfZGlub2RlICopIHBhcmVudF9mZV9iaC0+Yl9kYXRhOworCXN0cnVjdCBvY2ZzMl9leHRlbnRfbGlzdCAqZWwgPSAmZmUtPmlkMi5pX2xpc3Q7CiAJc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKmRhdGFfYWMgPSBOVUxMOwogCXN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICptZXRhX2FjID0gTlVMTDsKIAloYW5kbGVfdCAqaGFuZGxlID0gTlVMTDsKIAlzdHJ1Y3QgYnVmZmVyX2hlYWQgKm5ld19iaCA9IE5VTEw7CiAJc3RydWN0IG9jZnMyX2Rpcl9lbnRyeSAqIGRlOwogCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBvc2ItPnNiOworCXN0cnVjdCBvY2ZzMl9leHRlbnRfdHJlZSBldDsKIAogCW1sb2dfZW50cnlfdm9pZCgpOwogCkBAIC0xNDc5LDcgKzE1MTgsOCBAQAogCXNwaW5fbG9jaygmT0NGUzJfSShkaXIpLT5pcF9sb2NrKTsKIAlpZiAoZGlyX2lfc2l6ZSA9PSBvY2ZzMl9jbHVzdGVyc190b19ieXRlcyhzYiwgT0NGUzJfSShkaXIpLT5pcF9jbHVzdGVycykpIHsKIAkJc3Bpbl91bmxvY2soJk9DRlMyX0koZGlyKS0+aXBfbG9jayk7Ci0JCW51bV9mcmVlX2V4dGVudHMgPSBvY2ZzMl9udW1fZnJlZV9leHRlbnRzKG9zYiwgZGlyLCBmZSk7CisJCW9jZnMyX2luaXRfZGlub2RlX2V4dGVudF90cmVlKCZldCwgZGlyLCBwYXJlbnRfZmVfYmgpOworCQludW1fZnJlZV9leHRlbnRzID0gb2NmczJfbnVtX2ZyZWVfZXh0ZW50cyhvc2IsIGRpciwgJmV0KTsKIAkJaWYgKG51bV9mcmVlX2V4dGVudHMgPCAwKSB7CiAJCQlzdGF0dXMgPSBudW1fZnJlZV9leHRlbnRzOwogCQkJbWxvZ19lcnJubyhzdGF0dXMpOwpAQCAtMTQ4Nyw3ICsxNTI3LDcgQEAKIAkJfQogCiAJCWlmICghbnVtX2ZyZWVfZXh0ZW50cykgewotCQkJc3RhdHVzID0gb2NmczJfcmVzZXJ2ZV9uZXdfbWV0YWRhdGEob3NiLCBmZSwgJm1ldGFfYWMpOworCQkJc3RhdHVzID0gb2NmczJfcmVzZXJ2ZV9uZXdfbWV0YWRhdGEob3NiLCBlbCwgJm1ldGFfYWMpOwogCQkJaWYgKHN0YXR1cyA8IDApIHsKIAkJCQlpZiAoc3RhdHVzICE9IC1FTk9TUEMpCiAJCQkJCW1sb2dfZXJybm8oc3RhdHVzKTsKQEAgLTE1MDIsNyArMTU0Miw3IEBACiAJCQlnb3RvIGJhaWw7CiAJCX0KIAotCQljcmVkaXRzID0gb2NmczJfY2FsY19leHRlbmRfY3JlZGl0cyhzYiwgZmUsIDEpOworCQljcmVkaXRzID0gb2NmczJfY2FsY19leHRlbmRfY3JlZGl0cyhzYiwgZWwsIDEpOwogCX0gZWxzZSB7CiAJCXNwaW5fdW5sb2NrKCZPQ0ZTMl9JKGRpciktPmlwX2xvY2spOwogCQljcmVkaXRzID0gT0NGUzJfU0lNUExFX0RJUl9FWFRFTkRfQ1JFRElUUzsKQEAgLTE1NjgsOCArMTYwOCw3IEBACiAJaWYgKG1ldGFfYWMpCiAJCW9jZnMyX2ZyZWVfYWxsb2NfY29udGV4dChtZXRhX2FjKTsKIAotCWlmIChuZXdfYmgpCi0JCWJyZWxzZShuZXdfYmgpOworCWJyZWxzZShuZXdfYmgpOwogCiAJbWxvZ19leGl0KHN0YXR1cyk7CiAJcmV0dXJuIHN0YXR1czsKQEAgLTE2OTYsOCArMTczNSw3IEBACiAKIAlzdGF0dXMgPSAwOwogYmFpbDoKLQlpZiAoYmgpCi0JCWJyZWxzZShiaCk7CisJYnJlbHNlKGJoKTsKIAogCW1sb2dfZXhpdChzdGF0dXMpOwogCXJldHVybiBzdGF0dXM7CkBAIC0xNzU2LDcgKzE3OTQsNiBAQAogCSpyZXRfZGVfYmggPSBiaDsKIAliaCA9IE5VTEw7CiBvdXQ6Ci0JaWYgKGJoKQotCQlicmVsc2UoYmgpOworCWJyZWxzZShiaCk7CiAJcmV0dXJuIHJldDsKIH0KZGlmZiAtLWdpdCBhL2ZzL29jZnMyL2RsbWdsdWUuYyBiL2ZzL29jZnMyL2RsbWdsdWUuYwppbmRleCBlYWUzZDY0Li5lYzY4NDQyIDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9kbG1nbHVlLmMKKysrIGIvZnMvb2NmczIvZGxtZ2x1ZS5jCkBAIC0yMDI0LDggKzIwMjQsNyBAQAogCX0gZWxzZSB7CiAJCS8qIEJvbywgd2UgaGF2ZSB0byBnbyB0byBkaXNrLiAqLwogCQkvKiByZWFkIGJoLCBjYXN0LCBvY2ZzMl9yZWZyZXNoX2lub2RlICovCi0JCXN0YXR1cyA9IG9jZnMyX3JlYWRfYmxvY2soT0NGUzJfU0IoaW5vZGUtPmlfc2IpLCBvaS0+aXBfYmxrbm8sCi0JCQkJCSAgYmgsIE9DRlMyX0JIX0NBQ0hFRCwgaW5vZGUpOworCQlzdGF0dXMgPSBvY2ZzMl9yZWFkX2Jsb2NrKGlub2RlLCBvaS0+aXBfYmxrbm8sIGJoKTsKIAkJaWYgKHN0YXR1cyA8IDApIHsKIAkJCW1sb2dfZXJybm8oc3RhdHVzKTsKIAkJCWdvdG8gYmFpbF9yZWZyZXNoOwpAQCAtMjA4NiwxMSArMjA4NSw3IEBACiAJCXJldHVybiAwOwogCX0KIAotCXN0YXR1cyA9IG9jZnMyX3JlYWRfYmxvY2soT0NGUzJfU0IoaW5vZGUtPmlfc2IpLAotCQkJCSAgT0NGUzJfSShpbm9kZSktPmlwX2Jsa25vLAotCQkJCSAgcmV0X2JoLAotCQkJCSAgT0NGUzJfQkhfQ0FDSEVELAotCQkJCSAgaW5vZGUpOworCXN0YXR1cyA9IG9jZnMyX3JlYWRfYmxvY2soaW5vZGUsIE9DRlMyX0koaW5vZGUpLT5pcF9ibGtubywgcmV0X2JoKTsKIAlpZiAoc3RhdHVzIDwgMCkKIAkJbWxvZ19lcnJubyhzdGF0dXMpOwogCmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9leHRlbnRfbWFwLmMgYi9mcy9vY2ZzMi9leHRlbnRfbWFwLmMKaW5kZXggYWVkMjY4ZS4uMmJhZWRhYyAxMDA2NDQKLS0tIGEvZnMvb2NmczIvZXh0ZW50X21hcC5jCisrKyBiL2ZzL29jZnMyL2V4dGVudF9tYXAuYwpAQCAtMjkzLDggKzI5Myw3IEBACiAJc3RydWN0IG9jZnMyX2V4dGVudF9ibG9jayAqZWI7CiAJc3RydWN0IG9jZnMyX2V4dGVudF9saXN0ICplbDsKIAotCXJldCA9IG9jZnMyX3JlYWRfYmxvY2soT0NGUzJfU0IoaW5vZGUtPmlfc2IpLCBsYXN0X2ViX2JsaywKLQkJCSAgICAgICAmZWJfYmgsIE9DRlMyX0JIX0NBQ0hFRCwgaW5vZGUpOworCXJldCA9IG9jZnMyX3JlYWRfYmxvY2soaW5vZGUsIGxhc3RfZWJfYmxrLCAmZWJfYmgpOwogCWlmIChyZXQpIHsKIAkJbWxvZ19lcnJubyhyZXQpOwogCQlnb3RvIG91dDsKQEAgLTM4Miw5ICszODEsOSBAQAogCQlpZiAobGU2NF90b19jcHUoZWItPmhfbmV4dF9sZWFmX2JsaykgPT0gMFVMTCkKIAkJCWdvdG8gbm9fbW9yZV9leHRlbnRzOwogCi0JCXJldCA9IG9jZnMyX3JlYWRfYmxvY2soT0NGUzJfU0IoaW5vZGUtPmlfc2IpLAorCQlyZXQgPSBvY2ZzMl9yZWFkX2Jsb2NrKGlub2RlLAogCQkJCSAgICAgICBsZTY0X3RvX2NwdShlYi0+aF9uZXh0X2xlYWZfYmxrKSwKLQkJCQkgICAgICAgJm5leHRfZWJfYmgsIE9DRlMyX0JIX0NBQ0hFRCwgaW5vZGUpOworCQkJCSAgICAgICAmbmV4dF9lYl9iaCk7CiAJCWlmIChyZXQpIHsKIAkJCW1sb2dfZXJybm8ocmV0KTsKIAkJCWdvdG8gb3V0OwpAQCAtNTUxLDYgKzU1MCw2NiBAQAogCQkqbnVtX2NsdXN0ZXJzID0gbGUxNl90b19jcHUocmVjLT5lX2xlYWZfY2x1c3RlcnMpIC0gY29mZjsKIH0KIAoraW50IG9jZnMyX3hhdHRyX2dldF9jbHVzdGVycyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1MzIgdl9jbHVzdGVyLAorCQkJICAgICB1MzIgKnBfY2x1c3RlciwgdTMyICpudW1fY2x1c3RlcnMsCisJCQkgICAgIHN0cnVjdCBvY2ZzMl9leHRlbnRfbGlzdCAqZWwpCit7CisJaW50IHJldCA9IDAsIGk7CisJc3RydWN0IGJ1ZmZlcl9oZWFkICplYl9iaCA9IE5VTEw7CisJc3RydWN0IG9jZnMyX2V4dGVudF9ibG9jayAqZWI7CisJc3RydWN0IG9jZnMyX2V4dGVudF9yZWMgKnJlYzsKKwl1MzIgY29mZjsKKworCWlmIChlbC0+bF90cmVlX2RlcHRoKSB7CisJCXJldCA9IG9jZnMyX2ZpbmRfbGVhZihpbm9kZSwgZWwsIHZfY2x1c3RlciwgJmViX2JoKTsKKwkJaWYgKHJldCkgeworCQkJbWxvZ19lcnJubyhyZXQpOworCQkJZ290byBvdXQ7CisJCX0KKworCQllYiA9IChzdHJ1Y3Qgb2NmczJfZXh0ZW50X2Jsb2NrICopIGViX2JoLT5iX2RhdGE7CisJCWVsID0gJmViLT5oX2xpc3Q7CisKKwkJaWYgKGVsLT5sX3RyZWVfZGVwdGgpIHsKKwkJCW9jZnMyX2Vycm9yKGlub2RlLT5pX3NiLAorCQkJCSAgICAiSW5vZGUgJWx1IGhhcyBub24gemVybyB0cmVlIGRlcHRoIGluICIKKwkJCQkgICAgInhhdHRyIGxlYWYgYmxvY2sgJWxsdVxuIiwgaW5vZGUtPmlfaW5vLAorCQkJCSAgICAodW5zaWduZWQgbG9uZyBsb25nKWViX2JoLT5iX2Jsb2NrbnIpOworCQkJcmV0ID0gLUVST0ZTOworCQkJZ290byBvdXQ7CisJCX0KKwl9CisKKwlpID0gb2NmczJfc2VhcmNoX2V4dGVudF9saXN0KGVsLCB2X2NsdXN0ZXIpOworCWlmIChpID09IC0xKSB7CisJCXJldCA9IC1FUk9GUzsKKwkJbWxvZ19lcnJubyhyZXQpOworCQlnb3RvIG91dDsKKwl9IGVsc2UgeworCQlyZWMgPSAmZWwtPmxfcmVjc1tpXTsKKwkJQlVHX09OKHZfY2x1c3RlciA8IGxlMzJfdG9fY3B1KHJlYy0+ZV9jcG9zKSk7CisKKwkJaWYgKCFyZWMtPmVfYmxrbm8pIHsKKwkJCW9jZnMyX2Vycm9yKGlub2RlLT5pX3NiLCAiSW5vZGUgJWx1IGhhcyBiYWQgZXh0ZW50ICIKKwkJCQkgICAgInJlY29yZCAoJXUsICV1LCAwKSBpbiB4YXR0ciIsIGlub2RlLT5pX2lubywKKwkJCQkgICAgbGUzMl90b19jcHUocmVjLT5lX2Nwb3MpLAorCQkJCSAgICBvY2ZzMl9yZWNfY2x1c3RlcnMoZWwsIHJlYykpOworCQkJcmV0ID0gLUVST0ZTOworCQkJZ290byBvdXQ7CisJCX0KKwkJY29mZiA9IHZfY2x1c3RlciAtIGxlMzJfdG9fY3B1KHJlYy0+ZV9jcG9zKTsKKwkJKnBfY2x1c3RlciA9IG9jZnMyX2Jsb2Nrc190b19jbHVzdGVycyhpbm9kZS0+aV9zYiwKKwkJCQkJCSAgICBsZTY0X3RvX2NwdShyZWMtPmVfYmxrbm8pKTsKKwkJKnBfY2x1c3RlciA9ICpwX2NsdXN0ZXIgKyBjb2ZmOworCQlpZiAobnVtX2NsdXN0ZXJzKQorCQkJKm51bV9jbHVzdGVycyA9IG9jZnMyX3JlY19jbHVzdGVycyhlbCwgcmVjKSAtIGNvZmY7CisJfQorb3V0OgorCWlmIChlYl9iaCkKKwkJYnJlbHNlKGViX2JoKTsKKwlyZXR1cm4gcmV0OworfQorCiBpbnQgb2NmczJfZ2V0X2NsdXN0ZXJzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHUzMiB2X2NsdXN0ZXIsCiAJCSAgICAgICB1MzIgKnBfY2x1c3RlciwgdTMyICpudW1fY2x1c3RlcnMsCiAJCSAgICAgICB1bnNpZ25lZCBpbnQgKmV4dGVudF9mbGFncykKQEAgLTU3MSw4ICs2MzAsNyBAQAogCWlmIChyZXQgPT0gMCkKIAkJZ290byBvdXQ7CiAKLQlyZXQgPSBvY2ZzMl9yZWFkX2Jsb2NrKE9DRlMyX1NCKGlub2RlLT5pX3NiKSwgT0NGUzJfSShpbm9kZSktPmlwX2Jsa25vLAotCQkJICAgICAgICZkaV9iaCwgT0NGUzJfQkhfQ0FDSEVELCBpbm9kZSk7CisJcmV0ID0gb2NmczJfcmVhZF9ibG9jayhpbm9kZSwgT0NGUzJfSShpbm9kZSktPmlwX2Jsa25vLCAmZGlfYmgpOwogCWlmIChyZXQpIHsKIAkJbWxvZ19lcnJubyhyZXQpOwogCQlnb3RvIG91dDsKZGlmZiAtLWdpdCBhL2ZzL29jZnMyL2V4dGVudF9tYXAuaCBiL2ZzL29jZnMyL2V4dGVudF9tYXAuaAppbmRleCAxYjk3NDkwLi4xYzRhYThiIDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9leHRlbnRfbWFwLmgKKysrIGIvZnMvb2NmczIvZXh0ZW50X21hcC5oCkBAIC01Myw0ICs1Myw4IEBACiBpbnQgb2NmczJfZmllbWFwKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWVtYXBfZXh0ZW50X2luZm8gKmZpZWluZm8sCiAJCSB1NjQgbWFwX3N0YXJ0LCB1NjQgbWFwX2xlbik7CiAKK2ludCBvY2ZzMl94YXR0cl9nZXRfY2x1c3RlcnMoc3RydWN0IGlub2RlICppbm9kZSwgdTMyIHZfY2x1c3RlciwKKwkJCSAgICAgdTMyICpwX2NsdXN0ZXIsIHUzMiAqbnVtX2NsdXN0ZXJzLAorCQkJICAgICBzdHJ1Y3Qgb2NmczJfZXh0ZW50X2xpc3QgKmVsKTsKKwogI2VuZGlmICAvKiBfRVhURU5UX01BUF9IICovCmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9maWxlLmMgYi9mcy9vY2ZzMi9maWxlLmMKaW5kZXggZWQzODc5Ni4uOGQzMjI1YSAxMDA2NDQKLS0tIGEvZnMvb2NmczIvZmlsZS5jCisrKyBiL2ZzL29jZnMyL2ZpbGUuYwpAQCAtNTUsNiArNTUsNyBAQAogI2luY2x1ZGUgIm1tYXAuaCIKICNpbmNsdWRlICJzdWJhbGxvYy5oIgogI2luY2x1ZGUgInN1cGVyLmgiCisjaW5jbHVkZSAieGF0dHIuaCIKIAogI2luY2x1ZGUgImJ1ZmZlcl9oZWFkX2lvLmgiCiAKQEAgLTE4NCw3ICsxODUsNyBAQAogCQlnb3RvIGJhaWw7CiAKIAlqb3VybmFsID0gb3NiLT5qb3VybmFsLT5qX2pvdXJuYWw7Ci0JZXJyID0gam91cm5hbF9mb3JjZV9jb21taXQoam91cm5hbCk7CisJZXJyID0gamJkMl9qb3VybmFsX2ZvcmNlX2NvbW1pdChqb3VybmFsKTsKIAogYmFpbDoKIAltbG9nX2V4aXQoZXJyKTsKQEAgLTQ4OCw3ICs0ODksNyBAQAogfQogCiAvKgotICogZXh0ZW5kIGFsbG9jYXRpb24gb25seSBoZXJlLgorICogZXh0ZW5kIGZpbGUgYWxsb2NhdGlvbiBvbmx5IGhlcmUuCiAgKiB3ZSdsbCB1cGRhdGUgYWxsIHRoZSBkaXNrIHN0dWZmLCBhbmQgb2lwLT5hbGxvY19zaXplCiAgKgogICogZXhwZWN0IHN0dWZmIHRvIGJlIGxvY2tlZCwgYSB0cmFuc2FjdGlvbiBzdGFydGVkIGFuZCBlbm91Z2ggZGF0YSAvCkBAIC00OTcsMTg5ICs0OTgsMjUgQEAKICAqIFdpbGwgcmV0dXJuIC1FQUdBSU4sIGFuZCBhIHJlYXNvbiBpZiBhIHJlc3RhcnQgaXMgbmVlZGVkLgogICogSWYgcGFzc2VkIGluLCAqcmVhc29uIHdpbGwgYWx3YXlzIGJlIHNldCwgZXZlbiBpbiBlcnJvci4KICAqLwotaW50IG9jZnMyX2RvX2V4dGVuZF9hbGxvY2F0aW9uKHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiLAotCQkJICAgICAgIHN0cnVjdCBpbm9kZSAqaW5vZGUsCi0JCQkgICAgICAgdTMyICpsb2dpY2FsX29mZnNldCwKLQkJCSAgICAgICB1MzIgY2x1c3RlcnNfdG9fYWRkLAotCQkJICAgICAgIGludCBtYXJrX3Vud3JpdHRlbiwKLQkJCSAgICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmZlX2JoLAotCQkJICAgICAgIGhhbmRsZV90ICpoYW5kbGUsCi0JCQkgICAgICAgc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKmRhdGFfYWMsCi0JCQkgICAgICAgc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKm1ldGFfYWMsCi0JCQkgICAgICAgZW51bSBvY2ZzMl9hbGxvY19yZXN0YXJ0ZWQgKnJlYXNvbl9yZXQpCitpbnQgb2NmczJfYWRkX2lub2RlX2RhdGEoc3RydWN0IG9jZnMyX3N1cGVyICpvc2IsCisJCQkgc3RydWN0IGlub2RlICppbm9kZSwKKwkJCSB1MzIgKmxvZ2ljYWxfb2Zmc2V0LAorCQkJIHUzMiBjbHVzdGVyc190b19hZGQsCisJCQkgaW50IG1hcmtfdW53cml0dGVuLAorCQkJIHN0cnVjdCBidWZmZXJfaGVhZCAqZmVfYmgsCisJCQkgaGFuZGxlX3QgKmhhbmRsZSwKKwkJCSBzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqZGF0YV9hYywKKwkJCSBzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqbWV0YV9hYywKKwkJCSBlbnVtIG9jZnMyX2FsbG9jX3Jlc3RhcnRlZCAqcmVhc29uX3JldCkKIHsKLQlpbnQgc3RhdHVzID0gMDsKLQlpbnQgZnJlZV9leHRlbnRzOwotCXN0cnVjdCBvY2ZzMl9kaW5vZGUgKmZlID0gKHN0cnVjdCBvY2ZzMl9kaW5vZGUgKikgZmVfYmgtPmJfZGF0YTsKLQllbnVtIG9jZnMyX2FsbG9jX3Jlc3RhcnRlZCByZWFzb24gPSBSRVNUQVJUX05PTkU7Ci0JdTMyIGJpdF9vZmYsIG51bV9iaXRzOwotCXU2NCBibG9jazsKLQl1OCBmbGFncyA9IDA7CisJaW50IHJldDsKKwlzdHJ1Y3Qgb2NmczJfZXh0ZW50X3RyZWUgZXQ7CiAKLQlCVUdfT04oIWNsdXN0ZXJzX3RvX2FkZCk7Ci0KLQlpZiAobWFya191bndyaXR0ZW4pCi0JCWZsYWdzID0gT0NGUzJfRVhUX1VOV1JJVFRFTjsKLQotCWZyZWVfZXh0ZW50cyA9IG9jZnMyX251bV9mcmVlX2V4dGVudHMob3NiLCBpbm9kZSwgZmUpOwotCWlmIChmcmVlX2V4dGVudHMgPCAwKSB7Ci0JCXN0YXR1cyA9IGZyZWVfZXh0ZW50czsKLQkJbWxvZ19lcnJubyhzdGF0dXMpOwotCQlnb3RvIGxlYXZlOwotCX0KLQotCS8qIHRoZXJlIGFyZSB0d28gY2FzZXMgd2hpY2ggY291bGQgY2F1c2UgdXMgdG8gRUFHQUlOIGluIHRoZQotCSAqIHdlLW5lZWQtbW9yZS1tZXRhZGF0YSBjYXNlOgotCSAqIDEpIHdlIGhhdmVuJ3QgcmVzZXJ2ZWQgKmFueSoKLQkgKiAyKSB3ZSBhcmUgc28gZnJhZ21lbnRlZCwgd2UndmUgbmVlZGVkIHRvIGFkZCBtZXRhZGF0YSB0b28KLQkgKiAgICBtYW55IHRpbWVzLiAqLwotCWlmICghZnJlZV9leHRlbnRzICYmICFtZXRhX2FjKSB7Ci0JCW1sb2coMCwgIndlIGhhdmVuJ3QgcmVzZXJ2ZWQgYW55IG1ldGFkYXRhIVxuIik7Ci0JCXN0YXR1cyA9IC1FQUdBSU47Ci0JCXJlYXNvbiA9IFJFU1RBUlRfTUVUQTsKLQkJZ290byBsZWF2ZTsKLQl9IGVsc2UgaWYgKCghZnJlZV9leHRlbnRzKQotCQkgICAmJiAob2NmczJfYWxsb2NfY29udGV4dF9iaXRzX2xlZnQobWV0YV9hYykKLQkJICAgICAgIDwgb2NmczJfZXh0ZW5kX21ldGFfbmVlZGVkKGZlKSkpIHsKLQkJbWxvZygwLCAiZmlsZXN5c3RlbSBpcyByZWFsbHkgZnJhZ21lbnRlZC4uLlxuIik7Ci0JCXN0YXR1cyA9IC1FQUdBSU47Ci0JCXJlYXNvbiA9IFJFU1RBUlRfTUVUQTsKLQkJZ290byBsZWF2ZTsKLQl9Ci0KLQlzdGF0dXMgPSBfX29jZnMyX2NsYWltX2NsdXN0ZXJzKG9zYiwgaGFuZGxlLCBkYXRhX2FjLCAxLAotCQkJCQljbHVzdGVyc190b19hZGQsICZiaXRfb2ZmLCAmbnVtX2JpdHMpOwotCWlmIChzdGF0dXMgPCAwKSB7Ci0JCWlmIChzdGF0dXMgIT0gLUVOT1NQQykKLQkJCW1sb2dfZXJybm8oc3RhdHVzKTsKLQkJZ290byBsZWF2ZTsKLQl9Ci0KLQlCVUdfT04obnVtX2JpdHMgPiBjbHVzdGVyc190b19hZGQpOwotCi0JLyogcmVzZXJ2ZSBvdXIgd3JpdGUgZWFybHkgLS0gaW5zZXJ0X2V4dGVudCBtYXkgdXBkYXRlIHRoZSBpbm9kZSAqLwotCXN0YXR1cyA9IG9jZnMyX2pvdXJuYWxfYWNjZXNzKGhhbmRsZSwgaW5vZGUsIGZlX2JoLAotCQkJCSAgICAgIE9DRlMyX0pPVVJOQUxfQUNDRVNTX1dSSVRFKTsKLQlpZiAoc3RhdHVzIDwgMCkgewotCQltbG9nX2Vycm5vKHN0YXR1cyk7Ci0JCWdvdG8gbGVhdmU7Ci0JfQotCi0JYmxvY2sgPSBvY2ZzMl9jbHVzdGVyc190b19ibG9ja3Mob3NiLT5zYiwgYml0X29mZik7Ci0JbWxvZygwLCAiQWxsb2NhdGluZyAldSBjbHVzdGVycyBhdCBibG9jayAldSBmb3IgaW5vZGUgJWxsdVxuIiwKLQkgICAgIG51bV9iaXRzLCBiaXRfb2ZmLCAodW5zaWduZWQgbG9uZyBsb25nKU9DRlMyX0koaW5vZGUpLT5pcF9ibGtubyk7Ci0Jc3RhdHVzID0gb2NmczJfaW5zZXJ0X2V4dGVudChvc2IsIGhhbmRsZSwgaW5vZGUsIGZlX2JoLAotCQkJCSAgICAgKmxvZ2ljYWxfb2Zmc2V0LCBibG9jaywgbnVtX2JpdHMsCi0JCQkJICAgICBmbGFncywgbWV0YV9hYyk7Ci0JaWYgKHN0YXR1cyA8IDApIHsKLQkJbWxvZ19lcnJubyhzdGF0dXMpOwotCQlnb3RvIGxlYXZlOwotCX0KLQotCXN0YXR1cyA9IG9jZnMyX2pvdXJuYWxfZGlydHkoaGFuZGxlLCBmZV9iaCk7Ci0JaWYgKHN0YXR1cyA8IDApIHsKLQkJbWxvZ19lcnJubyhzdGF0dXMpOwotCQlnb3RvIGxlYXZlOwotCX0KLQotCWNsdXN0ZXJzX3RvX2FkZCAtPSBudW1fYml0czsKLQkqbG9naWNhbF9vZmZzZXQgKz0gbnVtX2JpdHM7Ci0KLQlpZiAoY2x1c3RlcnNfdG9fYWRkKSB7Ci0JCW1sb2coMCwgIm5lZWQgdG8gYWxsb2Mgb25jZSBtb3JlLCBjbHVzdGVycyA9ICV1LCB3YW50ZWQgPSAiCi0JCSAgICAgIiV1XG4iLCBmZS0+aV9jbHVzdGVycywgY2x1c3RlcnNfdG9fYWRkKTsKLQkJc3RhdHVzID0gLUVBR0FJTjsKLQkJcmVhc29uID0gUkVTVEFSVF9UUkFOUzsKLQl9Ci0KLWxlYXZlOgotCW1sb2dfZXhpdChzdGF0dXMpOwotCWlmIChyZWFzb25fcmV0KQotCQkqcmVhc29uX3JldCA9IHJlYXNvbjsKLQlyZXR1cm4gc3RhdHVzOwotfQotCi0vKgotICogRm9yIGEgZ2l2ZW4gYWxsb2NhdGlvbiwgZGV0ZXJtaW5lIHdoaWNoIGFsbG9jYXRvcnMgd2lsbCBuZWVkIHRvIGJlCi0gKiBhY2Nlc3NlZCwgYW5kIGxvY2sgdGhlbSwgcmVzZXJ2aW5nIHRoZSBhcHByb3ByaWF0ZSBudW1iZXIgb2YgYml0cy4KLSAqCi0gKiBTcGFyc2UgZmlsZSBzeXN0ZW1zIGNhbGwgdGhpcyBmcm9tIG9jZnMyX3dyaXRlX2JlZ2luX25vbG9jaygpCi0gKiBhbmQgb2NmczJfYWxsb2NhdGVfdW53cml0dGVuX2V4dGVudHMoKS4KLSAqCi0gKiBGaWxlIHN5c3RlbXMgd2hpY2ggZG9uJ3Qgc3VwcG9ydCBob2xlcyBjYWxsIHRoaXMgZnJvbQotICogb2NmczJfZXh0ZW5kX2FsbG9jYXRpb24oKS4KLSAqLwotaW50IG9jZnMyX2xvY2tfYWxsb2NhdG9ycyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3Qgb2NmczJfZGlub2RlICpkaSwKLQkJCSAgdTMyIGNsdXN0ZXJzX3RvX2FkZCwgdTMyIGV4dGVudHNfdG9fc3BsaXQsCi0JCQkgIHN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICoqZGF0YV9hYywKLQkJCSAgc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKiptZXRhX2FjKQotewotCWludCByZXQgPSAwLCBudW1fZnJlZV9leHRlbnRzOwotCXVuc2lnbmVkIGludCBtYXhfcmVjc19uZWVkZWQgPSBjbHVzdGVyc190b19hZGQgKyAyICogZXh0ZW50c190b19zcGxpdDsKLQlzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiA9IE9DRlMyX1NCKGlub2RlLT5pX3NiKTsKLQotCSptZXRhX2FjID0gTlVMTDsKLQlpZiAoZGF0YV9hYykKLQkJKmRhdGFfYWMgPSBOVUxMOwotCi0JQlVHX09OKGNsdXN0ZXJzX3RvX2FkZCAhPSAwICYmIGRhdGFfYWMgPT0gTlVMTCk7Ci0KLQltbG9nKDAsICJleHRlbmQgaW5vZGUgJWxsdSwgaV9zaXplID0gJWxsZCwgZGktPmlfY2x1c3RlcnMgPSAldSwgIgotCSAgICAgImNsdXN0ZXJzX3RvX2FkZCA9ICV1LCBleHRlbnRzX3RvX3NwbGl0ID0gJXVcbiIsCi0JICAgICAodW5zaWduZWQgbG9uZyBsb25nKU9DRlMyX0koaW5vZGUpLT5pcF9ibGtubywgKGxvbmcgbG9uZylpX3NpemVfcmVhZChpbm9kZSksCi0JICAgICBsZTMyX3RvX2NwdShkaS0+aV9jbHVzdGVycyksIGNsdXN0ZXJzX3RvX2FkZCwgZXh0ZW50c190b19zcGxpdCk7Ci0KLQludW1fZnJlZV9leHRlbnRzID0gb2NmczJfbnVtX2ZyZWVfZXh0ZW50cyhvc2IsIGlub2RlLCBkaSk7Ci0JaWYgKG51bV9mcmVlX2V4dGVudHMgPCAwKSB7Ci0JCXJldCA9IG51bV9mcmVlX2V4dGVudHM7Ci0JCW1sb2dfZXJybm8ocmV0KTsKLQkJZ290byBvdXQ7Ci0JfQotCi0JLyoKLQkgKiBTcGFyc2UgYWxsb2NhdGlvbiBmaWxlIHN5c3RlbXMgbmVlZCB0byBiZSBtb3JlIGNvbnNlcnZhdGl2ZQotCSAqIHdpdGggcmVzZXJ2aW5nIHJvb20gZm9yIGV4cGFuc2lvbiAtIHRoZSBhY3R1YWwgYWxsb2NhdGlvbgotCSAqIGhhcHBlbnMgd2hpbGUgd2UndmUgZ290IGEgam91cm5hbCBoYW5kbGUgb3BlbiBzbyByZS10YWtpbmcKLQkgKiBhIGNsdXN0ZXIgbG9jayAoYmVjYXVzZSB3ZSByYW4gb3V0IG9mIHJvb20gZm9yIGFub3RoZXIKLQkgKiBleHRlbnQpIHdpbGwgdmlvbGF0ZSBvcmRlcmluZyBydWxlcy4KLQkgKgotCSAqIE1vc3Qgb2YgdGhlIHRpbWUgd2UnbGwgb25seSBiZSBzZWVpbmcgdGhpcyAxIGNsdXN0ZXIgYXQgYSB0aW1lCi0JICogYW55d2F5LgotCSAqCi0JICogQWx3YXlzIGxvY2sgZm9yIGFueSB1bndyaXR0ZW4gZXh0ZW50cyAtIHdlIG1pZ2h0IHdhbnQgdG8KLQkgKiBhZGQgYmxvY2tzIGR1cmluZyBhIHNwbGl0LgotCSAqLwotCWlmICghbnVtX2ZyZWVfZXh0ZW50cyB8fAotCSAgICAob2NmczJfc3BhcnNlX2FsbG9jKG9zYikgJiYgbnVtX2ZyZWVfZXh0ZW50cyA8IG1heF9yZWNzX25lZWRlZCkpIHsKLQkJcmV0ID0gb2NmczJfcmVzZXJ2ZV9uZXdfbWV0YWRhdGEob3NiLCBkaSwgbWV0YV9hYyk7Ci0JCWlmIChyZXQgPCAwKSB7Ci0JCQlpZiAocmV0ICE9IC1FTk9TUEMpCi0JCQkJbWxvZ19lcnJubyhyZXQpOwotCQkJZ290byBvdXQ7Ci0JCX0KLQl9Ci0KLQlpZiAoY2x1c3RlcnNfdG9fYWRkID09IDApCi0JCWdvdG8gb3V0OwotCi0JcmV0ID0gb2NmczJfcmVzZXJ2ZV9jbHVzdGVycyhvc2IsIGNsdXN0ZXJzX3RvX2FkZCwgZGF0YV9hYyk7Ci0JaWYgKHJldCA8IDApIHsKLQkJaWYgKHJldCAhPSAtRU5PU1BDKQotCQkJbWxvZ19lcnJubyhyZXQpOwotCQlnb3RvIG91dDsKLQl9Ci0KLW91dDoKLQlpZiAocmV0KSB7Ci0JCWlmICgqbWV0YV9hYykgewotCQkJb2NmczJfZnJlZV9hbGxvY19jb250ZXh0KCptZXRhX2FjKTsKLQkJCSptZXRhX2FjID0gTlVMTDsKLQkJfQotCi0JCS8qCi0JCSAqIFdlIGNhbm5vdCBoYXZlIGFuIGVycm9yIGFuZCBhIG5vbiBudWxsICpkYXRhX2FjLgotCQkgKi8KLQl9CisJb2NmczJfaW5pdF9kaW5vZGVfZXh0ZW50X3RyZWUoJmV0LCBpbm9kZSwgZmVfYmgpOworCXJldCA9IG9jZnMyX2FkZF9jbHVzdGVyc19pbl9idHJlZShvc2IsIGlub2RlLCBsb2dpY2FsX29mZnNldCwKKwkJCQkJICAgY2x1c3RlcnNfdG9fYWRkLCBtYXJrX3Vud3JpdHRlbiwKKwkJCQkJICAgJmV0LCBoYW5kbGUsCisJCQkJCSAgIGRhdGFfYWMsIG1ldGFfYWMsIHJlYXNvbl9yZXQpOwogCiAJcmV0dXJuIHJldDsKIH0KQEAgLTY5OCw2ICs1MzUsNyBAQAogCXN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICptZXRhX2FjID0gTlVMTDsKIAllbnVtIG9jZnMyX2FsbG9jX3Jlc3RhcnRlZCB3aHk7CiAJc3RydWN0IG9jZnMyX3N1cGVyICpvc2IgPSBPQ0ZTMl9TQihpbm9kZS0+aV9zYik7CisJc3RydWN0IG9jZnMyX2V4dGVudF90cmVlIGV0OwogCiAJbWxvZ19lbnRyeSgiKGNsdXN0ZXJzX3RvX2FkZCA9ICV1KVxuIiwgY2x1c3RlcnNfdG9fYWRkKTsKIApAQCAtNzA3LDggKzU0NSw3IEBACiAJICovCiAJQlVHX09OKG1hcmtfdW53cml0dGVuICYmICFvY2ZzMl9zcGFyc2VfYWxsb2Mob3NiKSk7CiAKLQlzdGF0dXMgPSBvY2ZzMl9yZWFkX2Jsb2NrKG9zYiwgT0NGUzJfSShpbm9kZSktPmlwX2Jsa25vLCAmYmgsCi0JCQkJICBPQ0ZTMl9CSF9DQUNIRUQsIGlub2RlKTsKKwlzdGF0dXMgPSBvY2ZzMl9yZWFkX2Jsb2NrKGlub2RlLCBPQ0ZTMl9JKGlub2RlKS0+aXBfYmxrbm8sICZiaCk7CiAJaWYgKHN0YXR1cyA8IDApIHsKIAkJbWxvZ19lcnJubyhzdGF0dXMpOwogCQlnb3RvIGxlYXZlOwpAQCAtNzI0LDE0ICs1NjEsMjEgQEAKIHJlc3RhcnRfYWxsOgogCUJVR19PTihsZTMyX3RvX2NwdShmZS0+aV9jbHVzdGVycykgIT0gT0NGUzJfSShpbm9kZSktPmlwX2NsdXN0ZXJzKTsKIAotCXN0YXR1cyA9IG9jZnMyX2xvY2tfYWxsb2NhdG9ycyhpbm9kZSwgZmUsIGNsdXN0ZXJzX3RvX2FkZCwgMCwgJmRhdGFfYWMsCi0JCQkJICAgICAgICZtZXRhX2FjKTsKKwltbG9nKDAsICJleHRlbmQgaW5vZGUgJWxsdSwgaV9zaXplID0gJWxsZCwgZGktPmlfY2x1c3RlcnMgPSAldSwgIgorCSAgICAgImNsdXN0ZXJzX3RvX2FkZCA9ICV1XG4iLAorCSAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylPQ0ZTMl9JKGlub2RlKS0+aXBfYmxrbm8sCisJICAgICAobG9uZyBsb25nKWlfc2l6ZV9yZWFkKGlub2RlKSwgbGUzMl90b19jcHUoZmUtPmlfY2x1c3RlcnMpLAorCSAgICAgY2x1c3RlcnNfdG9fYWRkKTsKKwlvY2ZzMl9pbml0X2Rpbm9kZV9leHRlbnRfdHJlZSgmZXQsIGlub2RlLCBiaCk7CisJc3RhdHVzID0gb2NmczJfbG9ja19hbGxvY2F0b3JzKGlub2RlLCAmZXQsIGNsdXN0ZXJzX3RvX2FkZCwgMCwKKwkJCQkgICAgICAgJmRhdGFfYWMsICZtZXRhX2FjKTsKIAlpZiAoc3RhdHVzKSB7CiAJCW1sb2dfZXJybm8oc3RhdHVzKTsKIAkJZ290byBsZWF2ZTsKIAl9CiAKLQljcmVkaXRzID0gb2NmczJfY2FsY19leHRlbmRfY3JlZGl0cyhvc2ItPnNiLCBmZSwgY2x1c3RlcnNfdG9fYWRkKTsKKwljcmVkaXRzID0gb2NmczJfY2FsY19leHRlbmRfY3JlZGl0cyhvc2ItPnNiLCAmZmUtPmlkMi5pX2xpc3QsCisJCQkJCSAgICBjbHVzdGVyc190b19hZGQpOwogCWhhbmRsZSA9IG9jZnMyX3N0YXJ0X3RyYW5zKG9zYiwgY3JlZGl0cyk7CiAJaWYgKElTX0VSUihoYW5kbGUpKSB7CiAJCXN0YXR1cyA9IFBUUl9FUlIoaGFuZGxlKTsKQEAgLTc1MywxNiArNTk3LDE2IEBACiAKIAlwcmV2X2NsdXN0ZXJzID0gT0NGUzJfSShpbm9kZSktPmlwX2NsdXN0ZXJzOwogCi0Jc3RhdHVzID0gb2NmczJfZG9fZXh0ZW5kX2FsbG9jYXRpb24ob3NiLAotCQkJCQkgICAgaW5vZGUsCi0JCQkJCSAgICAmbG9naWNhbF9zdGFydCwKLQkJCQkJICAgIGNsdXN0ZXJzX3RvX2FkZCwKLQkJCQkJICAgIG1hcmtfdW53cml0dGVuLAotCQkJCQkgICAgYmgsCi0JCQkJCSAgICBoYW5kbGUsCi0JCQkJCSAgICBkYXRhX2FjLAotCQkJCQkgICAgbWV0YV9hYywKLQkJCQkJICAgICZ3aHkpOworCXN0YXR1cyA9IG9jZnMyX2FkZF9pbm9kZV9kYXRhKG9zYiwKKwkJCQkgICAgICBpbm9kZSwKKwkJCQkgICAgICAmbG9naWNhbF9zdGFydCwKKwkJCQkgICAgICBjbHVzdGVyc190b19hZGQsCisJCQkJICAgICAgbWFya191bndyaXR0ZW4sCisJCQkJICAgICAgYmgsCisJCQkJICAgICAgaGFuZGxlLAorCQkJCSAgICAgIGRhdGFfYWMsCisJCQkJICAgICAgbWV0YV9hYywKKwkJCQkgICAgICAmd2h5KTsKIAlpZiAoKHN0YXR1cyA8IDApICYmIChzdGF0dXMgIT0gLUVBR0FJTikpIHsKIAkJaWYgKHN0YXR1cyAhPSAtRU5PU1BDKQogCQkJbWxvZ19lcnJubyhzdGF0dXMpOwpAQCAtNzg5LDcgKzYzMyw3IEBACiAJCQltbG9nKDAsICJyZXN0YXJ0aW5nIHRyYW5zYWN0aW9uLlxuIik7CiAJCQkvKiBUT0RPOiBUaGlzIGNhbiBiZSBtb3JlIGludGVsbGlnZW50LiAqLwogCQkJY3JlZGl0cyA9IG9jZnMyX2NhbGNfZXh0ZW5kX2NyZWRpdHMob3NiLT5zYiwKLQkJCQkJCQkgICAgZmUsCisJCQkJCQkJICAgICZmZS0+aWQyLmlfbGlzdCwKIAkJCQkJCQkgICAgY2x1c3RlcnNfdG9fYWRkKTsKIAkJCXN0YXR1cyA9IG9jZnMyX2V4dGVuZF90cmFucyhoYW5kbGUsIGNyZWRpdHMpOwogCQkJaWYgKHN0YXR1cyA8IDApIHsKQEAgLTgyNiwxMCArNjcwLDggQEAKIAkJcmVzdGFydF9mdW5jID0gMDsKIAkJZ290byByZXN0YXJ0X2FsbDsKIAl9Ci0JaWYgKGJoKSB7Ci0JCWJyZWxzZShiaCk7Ci0JCWJoID0gTlVMTDsKLQl9CisJYnJlbHNlKGJoKTsKKwliaCA9IE5VTEw7CiAKIAltbG9nX2V4aXQoc3RhdHVzKTsKIAlyZXR1cm4gc3RhdHVzOwpAQCAtMTA5Niw5ICs5MzgsMTUgQEAKIAkJCWdvdG8gYmFpbF91bmxvY2s7CiAJCX0KIAotCQlpZiAoaV9zaXplX3JlYWQoaW5vZGUpID4gYXR0ci0+aWFfc2l6ZSkKKwkJaWYgKGlfc2l6ZV9yZWFkKGlub2RlKSA+IGF0dHItPmlhX3NpemUpIHsKKwkJCWlmIChvY2ZzMl9zaG91bGRfb3JkZXJfZGF0YShpbm9kZSkpIHsKKwkJCQlzdGF0dXMgPSBvY2ZzMl9iZWdpbl9vcmRlcmVkX3RydW5jYXRlKGlub2RlLAorCQkJCQkJCQkgICAgICBhdHRyLT5pYV9zaXplKTsKKwkJCQlpZiAoc3RhdHVzKQorCQkJCQlnb3RvIGJhaWxfdW5sb2NrOworCQkJfQogCQkJc3RhdHVzID0gb2NmczJfdHJ1bmNhdGVfZmlsZShpbm9kZSwgYmgsIGF0dHItPmlhX3NpemUpOwotCQllbHNlCisJCX0gZWxzZQogCQkJc3RhdHVzID0gb2NmczJfZXh0ZW5kX2ZpbGUoaW5vZGUsIGJoLCBhdHRyLT5pYV9zaXplKTsKIAkJaWYgKHN0YXR1cyA8IDApIHsKIAkJCWlmIChzdGF0dXMgIT0gLUVOT1NQQykKQEAgLTExNDAsOCArOTg4LDcgQEAKIAlpZiAoc2l6ZV9jaGFuZ2UpCiAJCW9jZnMyX3J3X3VubG9jayhpbm9kZSwgMSk7CiBiYWlsOgotCWlmIChiaCkKLQkJYnJlbHNlKGJoKTsKKwlicmVsc2UoYmgpOwogCiAJbWxvZ19leGl0KHN0YXR1cyk7CiAJcmV0dXJuIHN0YXR1czsKQEAgLTEyODQsOCArMTEzMSw3IEBACiAJc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCA9IE5VTEw7CiAJc3RydWN0IG9jZnMyX2lub2RlX2luZm8gKm9pID0gT0NGUzJfSShpbm9kZSk7CiAKLQlyZXQgPSBvY2ZzMl9yZWFkX2Jsb2NrKE9DRlMyX1NCKGlub2RlLT5pX3NiKSwKLQkJCSAgICAgICBvaS0+aXBfYmxrbm8sICZiaCwgT0NGUzJfQkhfQ0FDSEVELCBpbm9kZSk7CisJcmV0ID0gb2NmczJfcmVhZF9ibG9jayhpbm9kZSwgb2ktPmlwX2Jsa25vLCAmYmgpOwogCWlmIChyZXQgPCAwKSB7CiAJCW1sb2dfZXJybm8ocmV0KTsKIAkJZ290byBvdXQ7CkBAIC0xMzExLDkgKzExNTcsOCBAQAogCXN0cnVjdCBidWZmZXJfaGVhZCAqZGlfYmggPSBOVUxMOwogCiAJaWYgKE9DRlMyX0koaW5vZGUpLT5pcF9keW5fZmVhdHVyZXMgJiBPQ0ZTMl9JTkxJTkVfREFUQV9GTCkgewotCQlyZXQgPSBvY2ZzMl9yZWFkX2Jsb2NrKE9DRlMyX1NCKGlub2RlLT5pX3NiKSwKLQkJCQkgICAgICAgT0NGUzJfSShpbm9kZSktPmlwX2Jsa25vLCAmZGlfYmgsCi0JCQkJICAgICAgIE9DRlMyX0JIX0NBQ0hFRCwgaW5vZGUpOworCQlyZXQgPSBvY2ZzMl9yZWFkX2Jsb2NrKGlub2RlLCBPQ0ZTMl9JKGlub2RlKS0+aXBfYmxrbm8sCisJCQkJICAgICAgICZkaV9iaCk7CiAJCWlmIChyZXQpIHsKIAkJCW1sb2dfZXJybm8ocmV0KTsKIAkJCWdvdG8gb3V0OwpAQCAtMTM5NCw4ICsxMjM5LDExIEBACiAJaGFuZGxlX3QgKmhhbmRsZTsKIAlzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqbWV0YV9hYyA9IE5VTEw7CiAJc3RydWN0IG9jZnMyX2Rpbm9kZSAqZGkgPSAoc3RydWN0IG9jZnMyX2Rpbm9kZSAqKWRpX2JoLT5iX2RhdGE7CisJc3RydWN0IG9jZnMyX2V4dGVudF90cmVlIGV0OwogCi0JcmV0ID0gb2NmczJfbG9ja19hbGxvY2F0b3JzKGlub2RlLCBkaSwgMCwgMSwgTlVMTCwgJm1ldGFfYWMpOworCW9jZnMyX2luaXRfZGlub2RlX2V4dGVudF90cmVlKCZldCwgaW5vZGUsIGRpX2JoKTsKKworCXJldCA9IG9jZnMyX2xvY2tfYWxsb2NhdG9ycyhpbm9kZSwgJmV0LCAwLCAxLCBOVUxMLCAmbWV0YV9hYyk7CiAJaWYgKHJldCkgewogCQltbG9nX2Vycm5vKHJldCk7CiAJCXJldHVybiByZXQ7CkBAIC0xNDI1LDcgKzEyNzMsNyBAQAogCQlnb3RvIG91dDsKIAl9CiAKLQlyZXQgPSBvY2ZzMl9yZW1vdmVfZXh0ZW50KGlub2RlLCBkaV9iaCwgY3BvcywgbGVuLCBoYW5kbGUsIG1ldGFfYWMsCisJcmV0ID0gb2NmczJfcmVtb3ZlX2V4dGVudChpbm9kZSwgJmV0LCBjcG9zLCBsZW4sIGhhbmRsZSwgbWV0YV9hYywKIAkJCQkgIGRlYWxsb2MpOwogCWlmIChyZXQpIHsKIAkJbWxvZ19lcnJubyhyZXQpOwpAQCAtMjA0MCw3ICsxODg4LDcgQEAKIAkJICovCiAJCWlmIChvbGRfc2l6ZSAhPSBpX3NpemVfcmVhZChpbm9kZSkgfHwKIAkJICAgIG9sZF9jbHVzdGVycyAhPSBPQ0ZTMl9JKGlub2RlKS0+aXBfY2x1c3RlcnMpIHsKLQkJCXJldCA9IGpvdXJuYWxfZm9yY2VfY29tbWl0KG9zYi0+am91cm5hbC0+al9qb3VybmFsKTsKKwkJCXJldCA9IGpiZDJfam91cm5hbF9mb3JjZV9jb21taXQob3NiLT5qb3VybmFsLT5qX2pvdXJuYWwpOwogCQkJaWYgKHJldCA8IDApCiAJCQkJd3JpdHRlbiA9IHJldDsKIAkJfQpAQCAtMjIyNyw2ICsyMDc1LDEwIEBACiAJLnNldGF0dHIJPSBvY2ZzMl9zZXRhdHRyLAogCS5nZXRhdHRyCT0gb2NmczJfZ2V0YXR0ciwKIAkucGVybWlzc2lvbgk9IG9jZnMyX3Blcm1pc3Npb24sCisJLnNldHhhdHRyCT0gZ2VuZXJpY19zZXR4YXR0ciwKKwkuZ2V0eGF0dHIJPSBnZW5lcmljX2dldHhhdHRyLAorCS5saXN0eGF0dHIJPSBvY2ZzMl9saXN0eGF0dHIsCisJLnJlbW92ZXhhdHRyCT0gZ2VuZXJpY19yZW1vdmV4YXR0ciwKIAkuZmFsbG9jYXRlCT0gb2NmczJfZmFsbG9jYXRlLAogCS5maWVtYXAJCT0gb2NmczJfZmllbWFwLAogfTsKQEAgLTIyMzcsNiArMjA4OSwxMCBAQAogCS5wZXJtaXNzaW9uCT0gb2NmczJfcGVybWlzc2lvbiwKIH07CiAKKy8qCisgKiBPdGhlciB0aGFuIC0+bG9jaywga2VlcCBvY2ZzMl9mb3BzIGFuZCBvY2ZzMl9kb3BzIGluIHN5bmMgd2l0aAorICogb2NmczJfZm9wc19ub19wbG9ja3MgYW5kIG9jZnMyX2RvcHNfbm9fcGxvY2tzIQorICovCiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG9jZnMyX2ZvcHMgPSB7CiAJLmxsc2VlawkJPSBnZW5lcmljX2ZpbGVfbGxzZWVrLAogCS5yZWFkCQk9IGRvX3N5bmNfcmVhZCwKQEAgLTIyNTEsMTIgKzIxMDcsNTkgQEAKICNpZmRlZiBDT05GSUdfQ09NUEFUCiAJLmNvbXBhdF9pb2N0bCAgID0gb2NmczJfY29tcGF0X2lvY3RsLAogI2VuZGlmCisJLmxvY2sJCT0gb2NmczJfbG9jaywKKwkuZmxvY2sJCT0gb2NmczJfZmxvY2ssCisJLnNwbGljZV9yZWFkCT0gb2NmczJfZmlsZV9zcGxpY2VfcmVhZCwKKwkuc3BsaWNlX3dyaXRlCT0gb2NmczJfZmlsZV9zcGxpY2Vfd3JpdGUsCit9OworCitjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG9jZnMyX2RvcHMgPSB7CisJLmxsc2VlawkJPSBnZW5lcmljX2ZpbGVfbGxzZWVrLAorCS5yZWFkCQk9IGdlbmVyaWNfcmVhZF9kaXIsCisJLnJlYWRkaXIJPSBvY2ZzMl9yZWFkZGlyLAorCS5mc3luYwkJPSBvY2ZzMl9zeW5jX2ZpbGUsCisJLnJlbGVhc2UJPSBvY2ZzMl9kaXJfcmVsZWFzZSwKKwkub3BlbgkJPSBvY2ZzMl9kaXJfb3BlbiwKKwkudW5sb2NrZWRfaW9jdGwJPSBvY2ZzMl9pb2N0bCwKKyNpZmRlZiBDT05GSUdfQ09NUEFUCisJLmNvbXBhdF9pb2N0bCAgID0gb2NmczJfY29tcGF0X2lvY3RsLAorI2VuZGlmCisJLmxvY2sJCT0gb2NmczJfbG9jaywKKwkuZmxvY2sJCT0gb2NmczJfZmxvY2ssCit9OworCisvKgorICogUE9TSVgtbG9ja2xlc3MgdmFyaWFudHMgb2Ygb3VyIGZpbGVfb3BlcmF0aW9ucy4KKyAqCisgKiBUaGVzZSB3aWxsIGJlIHVzZWQgaWYgdGhlIHVuZGVybHlpbmcgY2x1c3RlciBzdGFjayBkb2VzIG5vdCBzdXBwb3J0CisgKiBwb3NpeCBmaWxlIGxvY2tpbmcsIGlmIHRoZSB1c2VyIHBhc3NlcyB0aGUgImxvY2FsZmxvY2tzIiBtb3VudAorICogb3B0aW9uLCBvciBpZiB3ZSBoYXZlIGEgbG9jYWwtb25seSBmcy4KKyAqCisgKiBvY2ZzMl9mbG9jayBpcyBpbiBoZXJlIGJlY2F1c2UgYWxsIHN0YWNrcyBoYW5kbGUgVU5JWCBmaWxlIGxvY2tzLAorICogc28gd2Ugc3RpbGwgd2FudCBpdCBpbiB0aGUgY2FzZSBvZiBubyBzdGFjayBzdXBwb3J0IGZvcgorICogcGxvY2tzLiBJbnRlcm5hbGx5LCBpdCB3aWxsIGRvIHRoZSByaWdodCB0aGluZyB3aGVuIGFza2VkIHRvIGlnbm9yZQorICogdGhlIGNsdXN0ZXIuCisgKi8KK2NvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgb2NmczJfZm9wc19ub19wbG9ja3MgPSB7CisJLmxsc2VlawkJPSBnZW5lcmljX2ZpbGVfbGxzZWVrLAorCS5yZWFkCQk9IGRvX3N5bmNfcmVhZCwKKwkud3JpdGUJCT0gZG9fc3luY193cml0ZSwKKwkubW1hcAkJPSBvY2ZzMl9tbWFwLAorCS5mc3luYwkJPSBvY2ZzMl9zeW5jX2ZpbGUsCisJLnJlbGVhc2UJPSBvY2ZzMl9maWxlX3JlbGVhc2UsCisJLm9wZW4JCT0gb2NmczJfZmlsZV9vcGVuLAorCS5haW9fcmVhZAk9IG9jZnMyX2ZpbGVfYWlvX3JlYWQsCisJLmFpb193cml0ZQk9IG9jZnMyX2ZpbGVfYWlvX3dyaXRlLAorCS51bmxvY2tlZF9pb2N0bAk9IG9jZnMyX2lvY3RsLAorI2lmZGVmIENPTkZJR19DT01QQVQKKwkuY29tcGF0X2lvY3RsICAgPSBvY2ZzMl9jb21wYXRfaW9jdGwsCisjZW5kaWYKIAkuZmxvY2sJCT0gb2NmczJfZmxvY2ssCiAJLnNwbGljZV9yZWFkCT0gb2NmczJfZmlsZV9zcGxpY2VfcmVhZCwKIAkuc3BsaWNlX3dyaXRlCT0gb2NmczJfZmlsZV9zcGxpY2Vfd3JpdGUsCiB9OwogCi1jb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG9jZnMyX2RvcHMgPSB7Citjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG9jZnMyX2RvcHNfbm9fcGxvY2tzID0gewogCS5sbHNlZWsJCT0gZ2VuZXJpY19maWxlX2xsc2VlaywKIAkucmVhZAkJPSBnZW5lcmljX3JlYWRfZGlyLAogCS5yZWFkZGlyCT0gb2NmczJfcmVhZGRpciwKZGlmZiAtLWdpdCBhL2ZzL29jZnMyL2ZpbGUuaCBiL2ZzL29jZnMyL2ZpbGUuaAppbmRleCAxZTI3YjRkLi5lOTIzODJjIDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9maWxlLmgKKysrIGIvZnMvb2NmczIvZmlsZS5oCkBAIC0yOCw5ICsyOCwxMiBAQAogCiBleHRlcm4gY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBvY2ZzMl9mb3BzOwogZXh0ZXJuIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgb2NmczJfZG9wczsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG9jZnMyX2ZvcHNfbm9fcGxvY2tzOworZXh0ZXJuIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgb2NmczJfZG9wc19ub19wbG9ja3M7CiBleHRlcm4gY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgb2NmczJfZmlsZV9pb3BzOwogZXh0ZXJuIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIG9jZnMyX3NwZWNpYWxfZmlsZV9pb3BzOwogc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQ7CitlbnVtIG9jZnMyX2FsbG9jX3Jlc3RhcnRlZDsKIAogc3RydWN0IG9jZnMyX2ZpbGVfcHJpdmF0ZSB7CiAJc3RydWN0IGZpbGUJCSpmcF9maWxlOwpAQCAtMzgsMjcgKzQxLDE4IEBACiAJc3RydWN0IG9jZnMyX2xvY2tfcmVzCWZwX2Zsb2NrOwogfTsKIAotZW51bSBvY2ZzMl9hbGxvY19yZXN0YXJ0ZWQgewotCVJFU1RBUlRfTk9ORSA9IDAsCi0JUkVTVEFSVF9UUkFOUywKLQlSRVNUQVJUX01FVEEKLX07Ci1pbnQgb2NmczJfZG9fZXh0ZW5kX2FsbG9jYXRpb24oc3RydWN0IG9jZnMyX3N1cGVyICpvc2IsCi0JCQkgICAgICAgc3RydWN0IGlub2RlICppbm9kZSwKLQkJCSAgICAgICB1MzIgKmxvZ2ljYWxfb2Zmc2V0LAotCQkJICAgICAgIHUzMiBjbHVzdGVyc190b19hZGQsCi0JCQkgICAgICAgaW50IG1hcmtfdW53cml0dGVuLAotCQkJICAgICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqZmVfYmgsCi0JCQkgICAgICAgaGFuZGxlX3QgKmhhbmRsZSwKLQkJCSAgICAgICBzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqZGF0YV9hYywKLQkJCSAgICAgICBzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqbWV0YV9hYywKLQkJCSAgICAgICBlbnVtIG9jZnMyX2FsbG9jX3Jlc3RhcnRlZCAqcmVhc29uX3JldCk7CitpbnQgb2NmczJfYWRkX2lub2RlX2RhdGEoc3RydWN0IG9jZnMyX3N1cGVyICpvc2IsCisJCQkgc3RydWN0IGlub2RlICppbm9kZSwKKwkJCSB1MzIgKmxvZ2ljYWxfb2Zmc2V0LAorCQkJIHUzMiBjbHVzdGVyc190b19hZGQsCisJCQkgaW50IG1hcmtfdW53cml0dGVuLAorCQkJIHN0cnVjdCBidWZmZXJfaGVhZCAqZmVfYmgsCisJCQkgaGFuZGxlX3QgKmhhbmRsZSwKKwkJCSBzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqZGF0YV9hYywKKwkJCSBzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqbWV0YV9hYywKKwkJCSBlbnVtIG9jZnMyX2FsbG9jX3Jlc3RhcnRlZCAqcmVhc29uX3JldCk7CiBpbnQgb2NmczJfZXh0ZW5kX25vX2hvbGVzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHU2NCBuZXdfaV9zaXplLAogCQkJICB1NjQgemVyb190byk7Ci1pbnQgb2NmczJfbG9ja19hbGxvY2F0b3JzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBvY2ZzMl9kaW5vZGUgKmRpLAotCQkJICB1MzIgY2x1c3RlcnNfdG9fYWRkLCB1MzIgZXh0ZW50c190b19zcGxpdCwKLQkJCSAgc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKipkYXRhX2FjLAotCQkJICBzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqKm1ldGFfYWMpOwogaW50IG9jZnMyX3NldGF0dHIoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgaWF0dHIgKmF0dHIpOwogaW50IG9jZnMyX2dldGF0dHIoc3RydWN0IHZmc21vdW50ICptbnQsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKIAkJICBzdHJ1Y3Qga3N0YXQgKnN0YXQpOwpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvaW5vZGUuYyBiL2ZzL29jZnMyL2lub2RlLmMKaW5kZXggN2U5ZTRjNy4uNDkwMzY4OCAxMDA2NDQKLS0tIGEvZnMvb2NmczIvaW5vZGUuYworKysgYi9mcy9vY2ZzMi9pbm9kZS5jCkBAIC00OSw2ICs0OSw3IEBACiAjaW5jbHVkZSAic3ltbGluay5oIgogI2luY2x1ZGUgInN5c2ZpbGUuaCIKICNpbmNsdWRlICJ1cHRvZGF0ZS5oIgorI2luY2x1ZGUgInhhdHRyLmgiCiAKICNpbmNsdWRlICJidWZmZXJfaGVhZF9pby5oIgogCkBAIC0yMTksNiArMjIwLDcgQEAKIAlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiOwogCXN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiOwogCWludCBzdGF0dXMgPSAtRUlOVkFMOworCWludCB1c2VfcGxvY2tzID0gMTsKIAogCW1sb2dfZW50cnkoIigweCVwLCBzaXplOiVsbHUpXG4iLCBpbm9kZSwKIAkJICAgKHVuc2lnbmVkIGxvbmcgbG9uZylsZTY0X3RvX2NwdShmZS0+aV9zaXplKSk7CkBAIC0yMjYsNiArMjI4LDEwIEBACiAJc2IgPSBpbm9kZS0+aV9zYjsKIAlvc2IgPSBPQ0ZTMl9TQihzYik7CiAKKwlpZiAoKG9zYi0+c19tb3VudF9vcHQgJiBPQ0ZTMl9NT1VOVF9MT0NBTEZMT0NLUykgfHwKKwkgICAgb2NmczJfbW91bnRfbG9jYWwob3NiKSB8fCAhb2NmczJfc3RhY2tfc3VwcG9ydHNfcGxvY2tzKCkpCisJCXVzZV9wbG9ja3MgPSAwOworCiAJLyogdGhpcyBtZWFucyB0aGF0IHJlYWRfaW5vZGUgY2Fubm90IGNyZWF0ZSBhIHN1cGVyYmxvY2sgaW5vZGUKIAkgKiB0b2RheS4gIGNoYW5nZSBpZiBuZWVkZWQuICovCiAJaWYgKCFPQ0ZTMl9JU19WQUxJRF9ESU5PREUoZmUpIHx8CkBAIC0yOTUsMTMgKzMwMSwxOSBAQAogCiAJc3dpdGNoIChpbm9kZS0+aV9tb2RlICYgU19JRk1UKSB7CiAJICAgIGNhc2UgU19JRlJFRzoKLQkJICAgIGlub2RlLT5pX2ZvcCA9ICZvY2ZzMl9mb3BzOworCQkgICAgaWYgKHVzZV9wbG9ja3MpCisJCQkgICAgaW5vZGUtPmlfZm9wID0gJm9jZnMyX2ZvcHM7CisJCSAgICBlbHNlCisJCQkgICAgaW5vZGUtPmlfZm9wID0gJm9jZnMyX2ZvcHNfbm9fcGxvY2tzOwogCQkgICAgaW5vZGUtPmlfb3AgPSAmb2NmczJfZmlsZV9pb3BzOwogCQkgICAgaV9zaXplX3dyaXRlKGlub2RlLCBsZTY0X3RvX2NwdShmZS0+aV9zaXplKSk7CiAJCSAgICBicmVhazsKIAkgICAgY2FzZSBTX0lGRElSOgogCQkgICAgaW5vZGUtPmlfb3AgPSAmb2NmczJfZGlyX2lvcHM7Ci0JCSAgICBpbm9kZS0+aV9mb3AgPSAmb2NmczJfZG9wczsKKwkJICAgIGlmICh1c2VfcGxvY2tzKQorCQkJICAgIGlub2RlLT5pX2ZvcCA9ICZvY2ZzMl9kb3BzOworCQkgICAgZWxzZQorCQkJICAgIGlub2RlLT5pX2ZvcCA9ICZvY2ZzMl9kb3BzX25vX3Bsb2NrczsKIAkJICAgIGlfc2l6ZV93cml0ZShpbm9kZSwgbGU2NF90b19jcHUoZmUtPmlfc2l6ZSkpOwogCQkgICAgYnJlYWs7CiAJICAgIGNhc2UgU19JRkxOSzoKQEAgLTQ0OCw4ICs0NjAsMTEgQEAKIAkJfQogCX0KIAotCXN0YXR1cyA9IG9jZnMyX3JlYWRfYmxvY2sob3NiLCBhcmdzLT5maV9ibGtubywgJmJoLCAwLAotCQkJCSAgY2FuX2xvY2sgPyBpbm9kZSA6IE5VTEwpOworCWlmIChjYW5fbG9jaykKKwkJc3RhdHVzID0gb2NmczJfcmVhZF9ibG9ja3MoaW5vZGUsIGFyZ3MtPmZpX2Jsa25vLCAxLCAmYmgsCisJCQkJCSAgIE9DRlMyX0JIX0lHTk9SRV9DQUNIRSk7CisJZWxzZQorCQlzdGF0dXMgPSBvY2ZzMl9yZWFkX2Jsb2Nrc19zeW5jKG9zYiwgYXJncy0+ZmlfYmxrbm8sIDEsICZiaCk7CiAJaWYgKHN0YXR1cyA8IDApIHsKIAkJbWxvZ19lcnJubyhzdGF0dXMpOwogCQlnb3RvIGJhaWw7CkBAIC01MjIsNiArNTM3LDkgQEAKIAkgKiBkYXRhIGFuZCBmYXN0IHN5bWxpbmtzLgogCSAqLwogCWlmIChmZS0+aV9jbHVzdGVycykgeworCQlpZiAob2NmczJfc2hvdWxkX29yZGVyX2RhdGEoaW5vZGUpKQorCQkJb2NmczJfYmVnaW5fb3JkZXJlZF90cnVuY2F0ZShpbm9kZSwgMCk7CisKIAkJaGFuZGxlID0gb2NmczJfc3RhcnRfdHJhbnMob3NiLCBPQ0ZTMl9JTk9ERV9VUERBVEVfQ1JFRElUUyk7CiAJCWlmIChJU19FUlIoaGFuZGxlKSkgewogCQkJc3RhdHVzID0gUFRSX0VSUihoYW5kbGUpOwpAQCAtNzMwLDYgKzc0OCwxMyBAQAogCQlnb3RvIGJhaWxfdW5sb2NrX2RpcjsKIAl9CiAKKwkvKkZyZWUgZXh0ZW5kZWQgYXR0cmlidXRlIHJlc291cmNlcyBhc3NvY2lhdGVkIHdpdGggdGhpcyBpbm9kZS4qLworCXN0YXR1cyA9IG9jZnMyX3hhdHRyX3JlbW92ZShpbm9kZSwgZGlfYmgpOworCWlmIChzdGF0dXMgPCAwKSB7CisJCW1sb2dfZXJybm8oc3RhdHVzKTsKKwkJZ290byBiYWlsX3VubG9ja19kaXI7CisJfQorCiAJc3RhdHVzID0gb2NmczJfcmVtb3ZlX2lub2RlKGlub2RlLCBkaV9iaCwgb3JwaGFuX2Rpcl9pbm9kZSwKIAkJCQkgICAgb3JwaGFuX2Rpcl9iaCk7CiAJaWYgKHN0YXR1cyA8IDApCkBAIC0xMDgxLDYgKzExMDYsOCBAQAogCW9pLT5pcF9sYXN0X3RyYW5zID0gMDsKIAlvaS0+aXBfZGlyX3N0YXJ0X2xvb2t1cCA9IDA7CiAJb2ktPmlwX2Jsa25vID0gMFVMTDsKKwlqYmQyX2pvdXJuYWxfcmVsZWFzZV9qYmRfaW5vZGUoT0NGUzJfU0IoaW5vZGUtPmlfc2IpLT5qb3VybmFsLT5qX2pvdXJuYWwsCisJCQkJICAgICAgICZvaS0+aXBfamlub2RlKTsKIAogYmFpbDoKIAltbG9nX2V4aXRfdm9pZCgpOwpAQCAtMTEwNyw1OCArMTEzNCw2IEBACiB9CiAKIC8qCi0gKiBUT0RPOiB0aGlzIHNob3VsZCBwcm9iYWJseSBiZSBtZXJnZWQgaW50byBvY2ZzMl9nZXRfYmxvY2sKLSAqCi0gKiBIb3dldmVyLCB5b3Ugbm93IG5lZWQgdG8gcGF5IGF0dGVudGlvbiB0byB0aGUgY29udF9wcmVwYXJlX3dyaXRlKCkKLSAqIHN0dWZmIGluIG9jZnMyX2dldF9ibG9jayAodGhhdCBpcywgb2NmczJfZ2V0X2Jsb2NrIHByZXR0eSBtdWNoCi0gKiBleHBlY3RzIG5ldmVyIHRvIGV4dGVuZCkuCi0gKi8KLXN0cnVjdCBidWZmZXJfaGVhZCAqb2NmczJfYnJlYWQoc3RydWN0IGlub2RlICppbm9kZSwKLQkJCQlpbnQgYmxvY2ssIGludCAqZXJyLCBpbnQgcmVhZGEpCi17Ci0Jc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCA9IE5VTEw7Ci0JaW50IHRtcGVycjsKLQl1NjQgcF9ibGtubzsKLQlpbnQgcmVhZGZsYWdzID0gT0NGUzJfQkhfQ0FDSEVEOwotCi0JaWYgKHJlYWRhKQotCQlyZWFkZmxhZ3MgfD0gT0NGUzJfQkhfUkVBREFIRUFEOwotCi0JaWYgKCgodTY0KWJsb2NrIDw8IGlub2RlLT5pX3NiLT5zX2Jsb2Nrc2l6ZV9iaXRzKSA+PQotCSAgICBpX3NpemVfcmVhZChpbm9kZSkpIHsKLQkJQlVHX09OKCFyZWFkYSk7Ci0JCXJldHVybiBOVUxMOwotCX0KLQotCWRvd25fcmVhZCgmT0NGUzJfSShpbm9kZSktPmlwX2FsbG9jX3NlbSk7Ci0JdG1wZXJyID0gb2NmczJfZXh0ZW50X21hcF9nZXRfYmxvY2tzKGlub2RlLCBibG9jaywgJnBfYmxrbm8sIE5VTEwsCi0JCQkJCSAgICAgTlVMTCk7Ci0JdXBfcmVhZCgmT0NGUzJfSShpbm9kZSktPmlwX2FsbG9jX3NlbSk7Ci0JaWYgKHRtcGVyciA8IDApIHsKLQkJbWxvZ19lcnJubyh0bXBlcnIpOwotCQlnb3RvIGZhaWw7Ci0JfQotCi0JdG1wZXJyID0gb2NmczJfcmVhZF9ibG9jayhPQ0ZTMl9TQihpbm9kZS0+aV9zYiksIHBfYmxrbm8sICZiaCwKLQkJCQkgIHJlYWRmbGFncywgaW5vZGUpOwotCWlmICh0bXBlcnIgPCAwKQotCQlnb3RvIGZhaWw7Ci0KLQl0bXBlcnIgPSAwOwotCi0JKmVyciA9IDA7Ci0JcmV0dXJuIGJoOwotCi1mYWlsOgotCWlmIChiaCkgewotCQlicmVsc2UoYmgpOwotCQliaCA9IE5VTEw7Ci0JfQotCSplcnIgPSAtRUlPOwotCXJldHVybiBOVUxMOwotfQotCi0vKgogICogVGhpcyBpcyBjYWxsZWQgZnJvbSBvdXIgZ2V0YXR0ci4KICAqLwogaW50IG9jZnMyX2lub2RlX3JldmFsaWRhdGUoc3RydWN0IGRlbnRyeSAqZGVudHJ5KQpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvaW5vZGUuaCBiL2ZzL29jZnMyL2lub2RlLmgKaW5kZXggMzkwYTg1NS4uMmYzN2FmOSAxMDA2NDQKLS0tIGEvZnMvb2NmczIvaW5vZGUuaAorKysgYi9mcy9vY2ZzMi9pbm9kZS5oCkBAIC00MCw2ICs0MCw5IEBACiAJLyogcHJvdGVjdHMgYWxsb2NhdGlvbiBjaGFuZ2VzIG9uIHRoaXMgaW5vZGUuICovCiAJc3RydWN0IHJ3X3NlbWFwaG9yZQkJaXBfYWxsb2Nfc2VtOwogCisJLyogcHJvdGVjdHMgZXh0ZW5kZWQgYXR0cmlidXRlIGNoYW5nZXMgb24gdGhpcyBpbm9kZSAqLworCXN0cnVjdCByd19zZW1hcGhvcmUJCWlwX3hhdHRyX3NlbTsKKwogCS8qIFRoZXNlIGZpZWxkcyBhcmUgcHJvdGVjdGVkIGJ5IGlwX2xvY2sgKi8KIAlzcGlubG9ja190CQkJaXBfbG9jazsKIAl1MzIJCQkJaXBfb3Blbl9jb3VudDsKQEAgLTY4LDYgKzcxLDcgQEAKIAlzdHJ1Y3Qgb2NmczJfZXh0ZW50X21hcAkJaXBfZXh0ZW50X21hcDsKIAogCXN0cnVjdCBpbm9kZQkJCXZmc19pbm9kZTsKKwlzdHJ1Y3QgamJkMl9pbm9kZQkJaXBfamlub2RlOwogfTsKIAogLyoKQEAgLTExMyw4ICsxMTcsNiBAQAogCiBleHRlcm4gY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBvY2ZzMl9hb3BzOwogCi1zdHJ1Y3QgYnVmZmVyX2hlYWQgKm9jZnMyX2JyZWFkKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBibG9jaywKLQkJCQlpbnQgKmVyciwgaW50IHJlYWRhKTsKIHZvaWQgb2NmczJfY2xlYXJfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSk7CiB2b2lkIG9jZnMyX2RlbGV0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKIHZvaWQgb2NmczJfZHJvcF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKZGlmZiAtLWdpdCBhL2ZzL29jZnMyL2lvY3RsLmMgYi9mcy9vY2ZzMi9pb2N0bC5jCmluZGV4IDdiMTQyZjAuLjlmY2QzNmQgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL2lvY3RsLmMKKysrIGIvZnMvb2NmczIvaW9jdGwuYwpAQCAtMTAyLDggKzEwMiw3IEBACiBiYWlsOgogCW11dGV4X3VubG9jaygmaW5vZGUtPmlfbXV0ZXgpOwogCi0JaWYgKGJoKQotCQlicmVsc2UoYmgpOworCWJyZWxzZShiaCk7CiAKIAltbG9nX2V4aXQoc3RhdHVzKTsKIAlyZXR1cm4gc3RhdHVzOwpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvam91cm5hbC5jIGIvZnMvb2NmczIvam91cm5hbC5jCmluZGV4IGM0N2JjMmEuLjgxZTQwNjcgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL2pvdXJuYWwuYworKysgYi9mcy9vY2ZzMi9qb3VybmFsLmMKQEAgLTIxNSw5ICsyMTUsOSBAQAogCQlnb3RvIGZpbmFsbHk7CiAJfQogCi0Jam91cm5hbF9sb2NrX3VwZGF0ZXMoam91cm5hbC0+al9qb3VybmFsKTsKLQlzdGF0dXMgPSBqb3VybmFsX2ZsdXNoKGpvdXJuYWwtPmpfam91cm5hbCk7Ci0Jam91cm5hbF91bmxvY2tfdXBkYXRlcyhqb3VybmFsLT5qX2pvdXJuYWwpOworCWpiZDJfam91cm5hbF9sb2NrX3VwZGF0ZXMoam91cm5hbC0+al9qb3VybmFsKTsKKwlzdGF0dXMgPSBqYmQyX2pvdXJuYWxfZmx1c2goam91cm5hbC0+al9qb3VybmFsKTsKKwlqYmQyX2pvdXJuYWxfdW5sb2NrX3VwZGF0ZXMoam91cm5hbC0+al9qb3VybmFsKTsKIAlpZiAoc3RhdHVzIDwgMCkgewogCQl1cF93cml0ZSgmam91cm5hbC0+al90cmFuc19iYXJyaWVyKTsKIAkJbWxvZ19lcnJubyhzdGF0dXMpOwpAQCAtMjY0LDcgKzI2NCw3IEBACiAKIAlkb3duX3JlYWQoJm9zYi0+am91cm5hbC0+al90cmFuc19iYXJyaWVyKTsKIAotCWhhbmRsZSA9IGpvdXJuYWxfc3RhcnQoam91cm5hbCwgbWF4X2J1ZmZzKTsKKwloYW5kbGUgPSBqYmQyX2pvdXJuYWxfc3RhcnQoam91cm5hbCwgbWF4X2J1ZmZzKTsKIAlpZiAoSVNfRVJSKGhhbmRsZSkpIHsKIAkJdXBfcmVhZCgmb3NiLT5qb3VybmFsLT5qX3RyYW5zX2JhcnJpZXIpOwogCkBAIC0yOTAsNyArMjkwLDcgQEAKIAogCUJVR19PTighaGFuZGxlKTsKIAotCXJldCA9IGpvdXJuYWxfc3RvcChoYW5kbGUpOworCXJldCA9IGpiZDJfam91cm5hbF9zdG9wKGhhbmRsZSk7CiAJaWYgKHJldCA8IDApCiAJCW1sb2dfZXJybm8ocmV0KTsKIApAQCAtMzA0LDcgKzMwNCw3IEBACiAgKiB0cmFuc2FjdGlvbi4gZXh0ZW5kX3RyYW5zIHdpbGwgZWl0aGVyIGV4dGVuZCB0aGUgY3VycmVudCBoYW5kbGUgYnkKICAqIG5ibG9ja3MsIG9yIGNvbW1pdCBpdCBhbmQgc3RhcnQgYSBuZXcgb25lIHdpdGggbmJsb2NrcyBjcmVkaXRzLgogICoKLSAqIFRoaXMgbWlnaHQgY2FsbCBqb3VybmFsX3Jlc3RhcnQoKSB3aGljaCB3aWxsIGNvbW1pdCBkaXJ0eSBidWZmZXJzCisgKiBUaGlzIG1pZ2h0IGNhbGwgamJkMl9qb3VybmFsX3Jlc3RhcnQoKSB3aGljaCB3aWxsIGNvbW1pdCBkaXJ0eSBidWZmZXJzCiAgKiBhbmQgdGhlbiByZXN0YXJ0IHRoZSB0cmFuc2FjdGlvbi4gQmVmb3JlIGNhbGxpbmcKICAqIG9jZnMyX2V4dGVuZF90cmFucygpLCBhbnkgY2hhbmdlZCBibG9ja3Mgc2hvdWxkIGhhdmUgYmVlbgogICogZGlydGllZC4gQWZ0ZXIgY2FsbGluZyBpdCwgYWxsIGJsb2NrcyB3aGljaCBuZWVkIHRvIGJlIGNoYW5nZWQgbXVzdApAQCAtMzMyLDcgKzMzMiw3IEBACiAjaWZkZWYgQ09ORklHX09DRlMyX0RFQlVHX0ZTCiAJc3RhdHVzID0gMTsKICNlbHNlCi0Jc3RhdHVzID0gam91cm5hbF9leHRlbmQoaGFuZGxlLCBuYmxvY2tzKTsKKwlzdGF0dXMgPSBqYmQyX2pvdXJuYWxfZXh0ZW5kKGhhbmRsZSwgbmJsb2Nrcyk7CiAJaWYgKHN0YXR1cyA8IDApIHsKIAkJbWxvZ19lcnJubyhzdGF0dXMpOwogCQlnb3RvIGJhaWw7CkBAIC0zNDAsOCArMzQwLDEwIEBACiAjZW5kaWYKIAogCWlmIChzdGF0dXMgPiAwKSB7Ci0JCW1sb2coMCwgImpvdXJuYWxfZXh0ZW5kIGZhaWxlZCwgdHJ5aW5nIGpvdXJuYWxfcmVzdGFydFxuIik7Ci0JCXN0YXR1cyA9IGpvdXJuYWxfcmVzdGFydChoYW5kbGUsIG5ibG9ja3MpOworCQltbG9nKDAsCisJCSAgICAgImpiZDJfam91cm5hbF9leHRlbmQgZmFpbGVkLCB0cnlpbmcgIgorCQkgICAgICJqYmQyX2pvdXJuYWxfcmVzdGFydFxuIik7CisJCXN0YXR1cyA9IGpiZDJfam91cm5hbF9yZXN0YXJ0KGhhbmRsZSwgbmJsb2Nrcyk7CiAJCWlmIChzdGF0dXMgPCAwKSB7CiAJCQltbG9nX2Vycm5vKHN0YXR1cyk7CiAJCQlnb3RvIGJhaWw7CkBAIC0zOTMsMTEgKzM5NSwxMSBAQAogCXN3aXRjaCAodHlwZSkgewogCWNhc2UgT0NGUzJfSk9VUk5BTF9BQ0NFU1NfQ1JFQVRFOgogCWNhc2UgT0NGUzJfSk9VUk5BTF9BQ0NFU1NfV1JJVEU6Ci0JCXN0YXR1cyA9IGpvdXJuYWxfZ2V0X3dyaXRlX2FjY2VzcyhoYW5kbGUsIGJoKTsKKwkJc3RhdHVzID0gamJkMl9qb3VybmFsX2dldF93cml0ZV9hY2Nlc3MoaGFuZGxlLCBiaCk7CiAJCWJyZWFrOwogCiAJY2FzZSBPQ0ZTMl9KT1VSTkFMX0FDQ0VTU19VTkRPOgotCQlzdGF0dXMgPSBqb3VybmFsX2dldF91bmRvX2FjY2VzcyhoYW5kbGUsIGJoKTsKKwkJc3RhdHVzID0gamJkMl9qb3VybmFsX2dldF91bmRvX2FjY2VzcyhoYW5kbGUsIGJoKTsKIAkJYnJlYWs7CiAKIAlkZWZhdWx0OgpAQCAtNDIyLDcgKzQyNCw3IEBACiAJbWxvZ19lbnRyeSgiKGJoLT5iX2Jsb2NrbnI9JWxsdSlcbiIsCiAJCSAgICh1bnNpZ25lZCBsb25nIGxvbmcpYmgtPmJfYmxvY2tucik7CiAKLQlzdGF0dXMgPSBqb3VybmFsX2RpcnR5X21ldGFkYXRhKGhhbmRsZSwgYmgpOworCXN0YXR1cyA9IGpiZDJfam91cm5hbF9kaXJ0eV9tZXRhZGF0YShoYW5kbGUsIGJoKTsKIAlpZiAoc3RhdHVzIDwgMCkKIAkJbWxvZyhNTF9FUlJPUiwgIkNvdWxkIG5vdCBkaXJ0eSBtZXRhZGF0YSBidWZmZXIuICIKIAkJICAgICAiKGJoLT5iX2Jsb2NrbnI9JWxsdSlcbiIsCkBAIC00MzIsNiArNDM0LDcgQEAKIAlyZXR1cm4gc3RhdHVzOwogfQogCisjaWZkZWYgQ09ORklHX09DRlMyX0NPTVBBVF9KQkQKIGludCBvY2ZzMl9qb3VybmFsX2RpcnR5X2RhdGEoaGFuZGxlX3QgKmhhbmRsZSwKIAkJCSAgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCkKIHsKQEAgLTQ0Myw4ICs0NDYsOSBAQAogCiAJcmV0dXJuIGVycjsKIH0KKyNlbmRpZgogCi0jZGVmaW5lIE9DRlMyX0RFRkFVTFRfQ09NTUlUX0lOVEVSVkFMIAkoSFogKiBKQkRfREVGQVVMVF9NQVhfQ09NTUlUX0FHRSkKKyNkZWZpbmUgT0NGUzJfREVGQVVMVF9DT01NSVRfSU5URVJWQUwJKEhaICogSkJEMl9ERUZBVUxUX01BWF9DT01NSVRfQUdFKQogCiB2b2lkIG9jZnMyX3NldF9qb3VybmFsX3BhcmFtcyhzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYikKIHsKQEAgLTQ1Nyw5ICs0NjEsOSBAQAogCXNwaW5fbG9jaygmam91cm5hbC0+al9zdGF0ZV9sb2NrKTsKIAlqb3VybmFsLT5qX2NvbW1pdF9pbnRlcnZhbCA9IGNvbW1pdF9pbnRlcnZhbDsKIAlpZiAob3NiLT5zX21vdW50X29wdCAmIE9DRlMyX01PVU5UX0JBUlJJRVIpCi0JCWpvdXJuYWwtPmpfZmxhZ3MgfD0gSkZTX0JBUlJJRVI7CisJCWpvdXJuYWwtPmpfZmxhZ3MgfD0gSkJEMl9CQVJSSUVSOwogCWVsc2UKLQkJam91cm5hbC0+al9mbGFncyAmPSB+SkZTX0JBUlJJRVI7CisJCWpvdXJuYWwtPmpfZmxhZ3MgJj0gfkpCRDJfQkFSUklFUjsKIAlzcGluX3VubG9jaygmam91cm5hbC0+al9zdGF0ZV9sb2NrKTsKIH0KIApAQCAtNTI0LDE0ICs1MjgsMTQgQEAKIAltbG9nKDAsICJpbm9kZS0+aXBfY2x1c3RlcnMgPSAldVxuIiwgT0NGUzJfSShpbm9kZSktPmlwX2NsdXN0ZXJzKTsKIAogCS8qIGNhbGwgdGhlIGtlcm5lbHMgam91cm5hbCBpbml0IGZ1bmN0aW9uIG5vdyAqLwotCWpfam91cm5hbCA9IGpvdXJuYWxfaW5pdF9pbm9kZShpbm9kZSk7CisJal9qb3VybmFsID0gamJkMl9qb3VybmFsX2luaXRfaW5vZGUoaW5vZGUpOwogCWlmIChqX2pvdXJuYWwgPT0gTlVMTCkgewogCQltbG9nKE1MX0VSUk9SLCAiTGludXggam91cm5hbCBsYXllciBlcnJvclxuIik7CiAJCXN0YXR1cyA9IC1FSU5WQUw7CiAJCWdvdG8gZG9uZTsKIAl9CiAKLQltbG9nKDAsICJSZXR1cm5lZCBmcm9tIGpvdXJuYWxfaW5pdF9pbm9kZVxuIik7CisJbWxvZygwLCAiUmV0dXJuZWQgZnJvbSBqYmQyX2pvdXJuYWxfaW5pdF9pbm9kZVxuIik7CiAJbWxvZygwLCAial9qb3VybmFsLT5qX21heGxlbiA9ICV1XG4iLCBqX2pvdXJuYWwtPmpfbWF4bGVuKTsKIAogCSpkaXJ0eSA9IChsZTMyX3RvX2NwdShkaS0+aWQxLmpvdXJuYWwxLmlqX2ZsYWdzKSAmCkBAIC01NTAsOCArNTU0LDcgQEAKIAlpZiAoc3RhdHVzIDwgMCkgewogCQlpZiAoaW5vZGVfbG9jaykKIAkJCW9jZnMyX2lub2RlX3VubG9jayhpbm9kZSwgMSk7Ci0JCWlmIChiaCAhPSBOVUxMKQotCQkJYnJlbHNlKGJoKTsKKwkJYnJlbHNlKGJoKTsKIAkJaWYgKGlub2RlKSB7CiAJCQlPQ0ZTMl9JKGlub2RlKS0+aXBfb3Blbl9jb3VudC0tOwogCQkJaXB1dChpbm9kZSk7CkBAIC02MzksNyArNjQyLDcgQEAKIAlpZiAoam91cm5hbC0+al9zdGF0ZSAhPSBPQ0ZTMl9KT1VSTkFMX0xPQURFRCkKIAkJZ290byBkb25lOwogCi0JLyogbmVlZCB0byBpbmMgaW5vZGUgdXNlIGNvdW50IGFzIGpvdXJuYWxfZGVzdHJveSB3aWxsIGlwdXQuICovCisJLyogbmVlZCB0byBpbmMgaW5vZGUgdXNlIGNvdW50IC0gamJkMl9qb3VybmFsX2Rlc3Ryb3kgd2lsbCBpcHV0LiAqLwogCWlmICghaWdyYWIoaW5vZGUpKQogCQlCVUcoKTsKIApAQCAtNjY4LDkgKzY3MSw5IEBACiAJQlVHX09OKGF0b21pY19yZWFkKCYob3NiLT5qb3VybmFsLT5qX251bV90cmFucykpICE9IDApOwogCiAJaWYgKG9jZnMyX21vdW50X2xvY2FsKG9zYikpIHsKLQkJam91cm5hbF9sb2NrX3VwZGF0ZXMoam91cm5hbC0+al9qb3VybmFsKTsKLQkJc3RhdHVzID0gam91cm5hbF9mbHVzaChqb3VybmFsLT5qX2pvdXJuYWwpOwotCQlqb3VybmFsX3VubG9ja191cGRhdGVzKGpvdXJuYWwtPmpfam91cm5hbCk7CisJCWpiZDJfam91cm5hbF9sb2NrX3VwZGF0ZXMoam91cm5hbC0+al9qb3VybmFsKTsKKwkJc3RhdHVzID0gamJkMl9qb3VybmFsX2ZsdXNoKGpvdXJuYWwtPmpfam91cm5hbCk7CisJCWpiZDJfam91cm5hbF91bmxvY2tfdXBkYXRlcyhqb3VybmFsLT5qX2pvdXJuYWwpOwogCQlpZiAoc3RhdHVzIDwgMCkKIAkJCW1sb2dfZXJybm8oc3RhdHVzKTsKIAl9CkBAIC02ODYsNyArNjg5LDcgQEAKIAl9CiAKIAkvKiBTaHV0ZG93biB0aGUga2VybmVsIGpvdXJuYWwgc3lzdGVtICovCi0Jam91cm5hbF9kZXN0cm95KGpvdXJuYWwtPmpfam91cm5hbCk7CisJamJkMl9qb3VybmFsX2Rlc3Ryb3koam91cm5hbC0+al9qb3VybmFsKTsKIAogCU9DRlMyX0koaW5vZGUpLT5pcF9vcGVuX2NvdW50LS07CiAKQEAgLTcxMSwxNSArNzE0LDE1IEBACiB7CiAJaW50IG9sZGVycjsKIAotCW9sZGVyciA9IGpvdXJuYWxfZXJybm8oam91cm5hbCk7CisJb2xkZXJyID0gamJkMl9qb3VybmFsX2Vycm5vKGpvdXJuYWwpOwogCWlmIChvbGRlcnIpIHsKIAkJbWxvZyhNTF9FUlJPUiwgIkZpbGUgc3lzdGVtIGVycm9yICVkIHJlY29yZGVkIGluICIKIAkJICAgICAiam91cm5hbCAldS5cbiIsIG9sZGVyciwgc2xvdCk7CiAJCW1sb2coTUxfRVJST1IsICJGaWxlIHN5c3RlbSBvbiBkZXZpY2UgJXMgbmVlZHMgY2hlY2tpbmcuXG4iLAogCQkgICAgIHNiLT5zX2lkKTsKIAotCQlqb3VybmFsX2Fja19lcnIoam91cm5hbCk7Ci0JCWpvdXJuYWxfY2xlYXJfZXJyKGpvdXJuYWwpOworCQlqYmQyX2pvdXJuYWxfYWNrX2Vycihqb3VybmFsKTsKKwkJamJkMl9qb3VybmFsX2NsZWFyX2Vycihqb3VybmFsKTsKIAl9CiB9CiAKQEAgLTczNCw3ICs3MzcsNyBAQAogCiAJb3NiID0gam91cm5hbC0+al9vc2I7CiAKLQlzdGF0dXMgPSBqb3VybmFsX2xvYWQoam91cm5hbC0+al9qb3VybmFsKTsKKwlzdGF0dXMgPSBqYmQyX2pvdXJuYWxfbG9hZChqb3VybmFsLT5qX2pvdXJuYWwpOwogCWlmIChzdGF0dXMgPCAwKSB7CiAJCW1sb2coTUxfRVJST1IsICJGYWlsZWQgdG8gbG9hZCBqb3VybmFsIVxuIik7CiAJCWdvdG8gZG9uZTsKQEAgLTc3OCw3ICs3ODEsNyBAQAogCiAJQlVHX09OKCFqb3VybmFsKTsKIAotCXN0YXR1cyA9IGpvdXJuYWxfd2lwZShqb3VybmFsLT5qX2pvdXJuYWwsIGZ1bGwpOworCXN0YXR1cyA9IGpiZDJfam91cm5hbF93aXBlKGpvdXJuYWwtPmpfam91cm5hbCwgZnVsbCk7CiAJaWYgKHN0YXR1cyA8IDApIHsKIAkJbWxvZ19lcnJubyhzdGF0dXMpOwogCQlnb3RvIGJhaWw7CkBAIC04NDcsOSArODUwLDggQEAKIAogCQkvKiBXZSBhcmUgcmVhZGluZyBqb3VybmFsIGRhdGEgd2hpY2ggc2hvdWxkIG5vdAogCQkgKiBiZSBwdXQgaW4gdGhlIHVwdG9kYXRlIGNhY2hlICovCi0JCXN0YXR1cyA9IG9jZnMyX3JlYWRfYmxvY2tzKE9DRlMyX1NCKGlub2RlLT5pX3NiKSwKLQkJCQkJICAgcF9ibGtubywgcF9ibG9ja3MsIGJocywgMCwKLQkJCQkJICAgTlVMTCk7CisJCXN0YXR1cyA9IG9jZnMyX3JlYWRfYmxvY2tzX3N5bmMoT0NGUzJfU0IoaW5vZGUtPmlfc2IpLAorCQkJCQkJcF9ibGtubywgcF9ibG9ja3MsIGJocyk7CiAJCWlmIChzdGF0dXMgPCAwKSB7CiAJCQltbG9nX2Vycm5vKHN0YXR1cyk7CiAJCQlnb3RvIGJhaWw7CkBAIC04NjUsOCArODY3LDcgQEAKIAogYmFpbDoKIAlmb3IoaSA9IDA7IGkgPCBDT05DVVJSRU5UX0pPVVJOQUxfRklMTDsgaSsrKQotCQlpZiAoYmhzW2ldKQotCQkJYnJlbHNlKGJoc1tpXSk7CisJCWJyZWxzZShiaHNbaV0pOwogCW1sb2dfZXhpdChzdGF0dXMpOwogCXJldHVybiBzdGF0dXM7CiB9CkBAIC0xMTMzLDcgKzExMzQsOCBAQAogCX0KIAlTRVRfSU5PREVfSk9VUk5BTChpbm9kZSk7CiAKLQlzdGF0dXMgPSBvY2ZzMl9yZWFkX2Jsb2NrKG9zYiwgT0NGUzJfSShpbm9kZSktPmlwX2Jsa25vLCBiaCwgMCwgaW5vZGUpOworCXN0YXR1cyA9IG9jZnMyX3JlYWRfYmxvY2tzKGlub2RlLCBPQ0ZTMl9JKGlub2RlKS0+aXBfYmxrbm8sIDEsIGJoLAorCQkJCSAgIE9DRlMyX0JIX0lHTk9SRV9DQUNIRSk7CiAJaWYgKHN0YXR1cyA8IDApIHsKIAkJbWxvZ19lcnJubyhzdGF0dXMpOwogCQlnb3RvIGJhaWw7CkBAIC0xMjI5LDE5ICsxMjMxLDE5IEBACiAJfQogCiAJbWxvZygwLCAiY2FsbGluZyBqb3VybmFsX2luaXRfaW5vZGVcbiIpOwotCWpvdXJuYWwgPSBqb3VybmFsX2luaXRfaW5vZGUoaW5vZGUpOworCWpvdXJuYWwgPSBqYmQyX2pvdXJuYWxfaW5pdF9pbm9kZShpbm9kZSk7CiAJaWYgKGpvdXJuYWwgPT0gTlVMTCkgewogCQltbG9nKE1MX0VSUk9SLCAiTGludXggam91cm5hbCBsYXllciBlcnJvclxuIik7CiAJCXN0YXR1cyA9IC1FSU87CiAJCWdvdG8gZG9uZTsKIAl9CiAKLQlzdGF0dXMgPSBqb3VybmFsX2xvYWQoam91cm5hbCk7CisJc3RhdHVzID0gamJkMl9qb3VybmFsX2xvYWQoam91cm5hbCk7CiAJaWYgKHN0YXR1cyA8IDApIHsKIAkJbWxvZ19lcnJubyhzdGF0dXMpOwogCQlpZiAoIWlncmFiKGlub2RlKSkKIAkJCUJVRygpOwotCQlqb3VybmFsX2Rlc3Ryb3koam91cm5hbCk7CisJCWpiZDJfam91cm5hbF9kZXN0cm95KGpvdXJuYWwpOwogCQlnb3RvIGRvbmU7CiAJfQogCkBAIC0xMjQ5LDkgKzEyNTEsOSBAQAogCiAJLyogd2lwZSB0aGUgam91cm5hbCAqLwogCW1sb2coMCwgImZsdXNoaW5nIHRoZSBqb3VybmFsLlxuIik7Ci0Jam91cm5hbF9sb2NrX3VwZGF0ZXMoam91cm5hbCk7Ci0Jc3RhdHVzID0gam91cm5hbF9mbHVzaChqb3VybmFsKTsKLQlqb3VybmFsX3VubG9ja191cGRhdGVzKGpvdXJuYWwpOworCWpiZDJfam91cm5hbF9sb2NrX3VwZGF0ZXMoam91cm5hbCk7CisJc3RhdHVzID0gamJkMl9qb3VybmFsX2ZsdXNoKGpvdXJuYWwpOworCWpiZDJfam91cm5hbF91bmxvY2tfdXBkYXRlcyhqb3VybmFsKTsKIAlpZiAoc3RhdHVzIDwgMCkKIAkJbWxvZ19lcnJubyhzdGF0dXMpOwogCkBAIC0xMjcyLDcgKzEyNzQsNyBAQAogCWlmICghaWdyYWIoaW5vZGUpKQogCQlCVUcoKTsKIAotCWpvdXJuYWxfZGVzdHJveShqb3VybmFsKTsKKwlqYmQyX2pvdXJuYWxfZGVzdHJveShqb3VybmFsKTsKIAogZG9uZToKIAkvKiBkcm9wIHRoZSBsb2NrIG9uIHRoaXMgbm9kZXMgam91cm5hbCAqLwpAQCAtMTI4Miw4ICsxMjg0LDcgQEAKIAlpZiAoaW5vZGUpCiAJCWlwdXQoaW5vZGUpOwogCi0JaWYgKGJoKQotCQlicmVsc2UoYmgpOworCWJyZWxzZShiaCk7CiAKIAltbG9nX2V4aXQoc3RhdHVzKTsKIAlyZXR1cm4gc3RhdHVzOwpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvam91cm5hbC5oIGIvZnMvb2NmczIvam91cm5hbC5oCmluZGV4IDIxNzhlYmYuLmQ0ZDE0ZTkgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL2pvdXJuYWwuaAorKysgYi9mcy9vY2ZzMi9qb3VybmFsLmgKQEAgLTI3LDcgKzI3LDEyIEBACiAjZGVmaW5lIE9DRlMyX0pPVVJOQUxfSAogCiAjaW5jbHVkZSA8bGludXgvZnMuaD4KLSNpbmNsdWRlIDxsaW51eC9qYmQuaD4KKyNpZm5kZWYgQ09ORklHX09DRlMyX0NPTVBBVF9KQkQKKyMgaW5jbHVkZSA8bGludXgvamJkMi5oPgorI2Vsc2UKKyMgaW5jbHVkZSA8bGludXgvamJkLmg+CisjIGluY2x1ZGUgIm9jZnMyX2piZF9jb21wYXQuaCIKKyNlbmRpZgogCiBlbnVtIG9jZnMyX2pvdXJuYWxfc3RhdGUgewogCU9DRlMyX0pPVVJOQUxfRlJFRSA9IDAsCkBAIC0yMTUsOCArMjIwLDggQEAKICAqICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXIuIFdpbGwgaGF2ZSB0byBjYWxsIG9jZnMyX2pvdXJuYWxfZGlydHkgb25jZQogICogICAgICAgICAgICAgICAgICAgICAgICAgIHdlJ3ZlIGFjdHVhbGx5IGRpcnRpZWQgaXQuIFR5cGUgaXMgb25lIG9mIC4gb3IgLgogICogIG9jZnMyX2pvdXJuYWxfZGlydHkgICAgLSBNYXJrIGEgam91cm5hbGxlZCBidWZmZXIgYXMgaGF2aW5nIGRpcnR5IGRhdGEuCi0gKiAgb2NmczJfam91cm5hbF9kaXJ0eV9kYXRhIC0gSW5kaWNhdGUgdGhhdCBhIGRhdGEgYnVmZmVyIHNob3VsZCBnbyBvdXQgYmVmb3JlCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGN1cnJlbnQgaGFuZGxlIGNvbW1pdHMuCisgKiAgb2NmczJfamJkMl9maWxlX2lub2RlICAtIE1hcmsgYW4gaW5vZGUgc28gdGhhdCBpdHMgZGF0YSBnb2VzIG91dCBiZWZvcmUKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGN1cnJlbnQgaGFuZGxlIGNvbW1pdHMuCiAgKi8KIAogLyogWW91IG11c3QgYWx3YXlzIHN0YXJ0X3RyYW5zIHdpdGggYSBudW1iZXIgb2YgYnVmZnMgPiAwLCBidXQgaXQncwpAQCAtMjY4LDggKzI3MywxMCBAQAogICovCiBpbnQgICAgICAgICAgICAgICAgICBvY2ZzMl9qb3VybmFsX2RpcnR5KGhhbmRsZV90ICpoYW5kbGUsCiAJCQkJCSBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoKTsKKyNpZmRlZiBDT05GSUdfT0NGUzJfQ09NUEFUX0pCRAogaW50ICAgICAgICAgICAgICAgICAgb2NmczJfam91cm5hbF9kaXJ0eV9kYXRhKGhhbmRsZV90ICpoYW5kbGUsCiAJCQkJCSAgICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgpOworI2VuZGlmCiAKIC8qCiAgKiAgQ3JlZGl0IE1hY3JvczoKQEAgLTI4Myw2ICsyOTAsOSBAQAogLyogc2ltcGxlIGZpbGUgdXBkYXRlcyBsaWtlIGNobW9kLCBldGMuICovCiAjZGVmaW5lIE9DRlMyX0lOT0RFX1VQREFURV9DUkVESVRTIDEKIAorLyogZXh0ZW5kZWQgYXR0cmlidXRlIGJsb2NrIHVwZGF0ZSAqLworI2RlZmluZSBPQ0ZTMl9YQVRUUl9CTE9DS19VUERBVEVfQ1JFRElUUyAxCisKIC8qIGdyb3VwIGV4dGVuZC4gaW5vZGUgdXBkYXRlIGFuZCBsYXN0IGdyb3VwIHVwZGF0ZS4gKi8KICNkZWZpbmUgT0NGUzJfR1JPVVBfRVhURU5EX0NSRURJVFMJKE9DRlMyX0lOT0RFX1VQREFURV9DUkVESVRTICsgMSkKIApAQCAtMzQwLDExICszNTAsMjMgQEAKICNkZWZpbmUgT0NGUzJfUkVOQU1FX0NSRURJVFMgKDMgKiBPQ0ZTMl9JTk9ERV9VUERBVEVfQ1JFRElUUyArIDMgICAgICAgICAgICAgIFwKIAkJCSAgICAgKyBPQ0ZTMl9VTkxJTktfQ1JFRElUUykKIAorLyogZ2xvYmFsIGJpdG1hcCBkaW5vZGUsIGdyb3VwIGRlc2MuLCByZWxpbmtlZCBncm91cCwKKyAqIHN1YmFsbG9jYXRvciBkaW5vZGUsIGdyb3VwIGRlc2MuLCByZWxpbmtlZCBncm91cCwKKyAqIGRpbm9kZSwgeGF0dHIgYmxvY2sgKi8KKyNkZWZpbmUgT0NGUzJfWEFUVFJfQkxPQ0tfQ1JFQVRFX0NSRURJVFMgKE9DRlMyX1NVQkFMTE9DX0FMTE9DICogMiArIFwKKwkJCQkJICArIE9DRlMyX0lOT0RFX1VQREFURV9DUkVESVRTIFwKKwkJCQkJICArIE9DRlMyX1hBVFRSX0JMT0NLX1VQREFURV9DUkVESVRTKQorCisvKgorICogUGxlYXNlIG5vdGUgdGhhdCB0aGUgY2FsbGVyIG11c3QgbWFrZSBzdXJlIHRoYXQgcm9vdF9lbCBpcyB0aGUgcm9vdAorICogb2YgZXh0ZW50IHRyZWUuIFNvIGZvciBhbiBpbm9kZSwgaXQgc2hvdWxkIGJlICZmZS0+aWQyLmlfbGlzdC4gT3RoZXJ3aXNlCisgKiB0aGUgcmVzdWx0IG1heSBiZSB3cm9uZy4KKyAqLwogc3RhdGljIGlubGluZSBpbnQgb2NmczJfY2FsY19leHRlbmRfY3JlZGl0cyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLAotCQkJCQkgICAgc3RydWN0IG9jZnMyX2Rpbm9kZSAqZmUsCisJCQkJCSAgICBzdHJ1Y3Qgb2NmczJfZXh0ZW50X2xpc3QgKnJvb3RfZWwsCiAJCQkJCSAgICB1MzIgYml0c193YW50ZWQpCiB7Ci0JaW50IGJpdG1hcF9ibG9ja3MsIHN5c2ZpbGVfYml0bWFwX2Jsb2NrcywgZGlub2RlX2Jsb2NrczsKKwlpbnQgYml0bWFwX2Jsb2Nrcywgc3lzZmlsZV9iaXRtYXBfYmxvY2tzLCBleHRlbnRfYmxvY2tzOwogCiAJLyogYml0bWFwIGRpbm9kZSwgZ3JvdXAgZGVzYy4gKyByZWxpbmtlZCBncm91cC4gKi8KIAliaXRtYXBfYmxvY2tzID0gT0NGUzJfU1VCQUxMT0NfQUxMT0M7CkBAIC0zNTUsMTYgKzM3NywxNiBAQAogCSAqIGhvd2V2ZXIgbWFueSBtZXRhZGF0YSBjaHVua3MgbmVlZGVkICogYSByZW1haW5pbmcgc3ViYWxsb2MKIAkgKiBhbGxvYy4gKi8KIAlzeXNmaWxlX2JpdG1hcF9ibG9ja3MgPSAxICsKLQkJKE9DRlMyX1NVQkFMTE9DX0FMTE9DIC0gMSkgKiBvY2ZzMl9leHRlbmRfbWV0YV9uZWVkZWQoZmUpOworCQkoT0NGUzJfU1VCQUxMT0NfQUxMT0MgLSAxKSAqIG9jZnMyX2V4dGVuZF9tZXRhX25lZWRlZChyb290X2VsKTsKIAogCS8qIHRoaXMgZG9lcyBub3QgaW5jbHVkZSAqbmV3KiBtZXRhZGF0YSBibG9ja3MsIHdoaWNoIGFyZQotCSAqIGFjY291bnRlZCBmb3IgaW4gc3lzZmlsZV9iaXRtYXBfYmxvY2tzLiBmZSArCisJICogYWNjb3VudGVkIGZvciBpbiBzeXNmaWxlX2JpdG1hcF9ibG9ja3MuIHJvb3RfZWwgKwogCSAqIHByZXYuIGxhc3RfZWJfYmxrICsgYmxvY2tzIGFsb25nIGVkZ2Ugb2YgdHJlZS4KIAkgKiBjYWxjX3N5bWxpbmtfY3JlZGl0cyBwYXNzZXMgYmVjYXVzZSB3ZSBqdXN0IG5lZWQgMQogCSAqIGNyZWRpdCBmb3IgdGhlIGRpbm9kZSB0aGVyZS4gKi8KLQlkaW5vZGVfYmxvY2tzID0gMSArIDEgKyBsZTE2X3RvX2NwdShmZS0+aWQyLmlfbGlzdC5sX3RyZWVfZGVwdGgpOworCWV4dGVudF9ibG9ja3MgPSAxICsgMSArIGxlMTZfdG9fY3B1KHJvb3RfZWwtPmxfdHJlZV9kZXB0aCk7CiAKLQlyZXR1cm4gYml0bWFwX2Jsb2NrcyArIHN5c2ZpbGVfYml0bWFwX2Jsb2NrcyArIGRpbm9kZV9ibG9ja3M7CisJcmV0dXJuIGJpdG1hcF9ibG9ja3MgKyBzeXNmaWxlX2JpdG1hcF9ibG9ja3MgKyBleHRlbnRfYmxvY2tzOwogfQogCiBzdGF0aWMgaW5saW5lIGludCBvY2ZzMl9jYWxjX3N5bWxpbmtfY3JlZGl0cyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQpAQCAtNDE1LDQgKzQzNywxNiBAQAogCXJldHVybiBjcmVkaXRzOwogfQogCitzdGF0aWMgaW5saW5lIGludCBvY2ZzMl9qYmQyX2ZpbGVfaW5vZGUoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSkKK3sKKwlyZXR1cm4gamJkMl9qb3VybmFsX2ZpbGVfaW5vZGUoaGFuZGxlLCAmT0NGUzJfSShpbm9kZSktPmlwX2ppbm9kZSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IG9jZnMyX2JlZ2luX29yZGVyZWRfdHJ1bmNhdGUoc3RydWN0IGlub2RlICppbm9kZSwKKwkJCQkJICAgICAgIGxvZmZfdCBuZXdfc2l6ZSkKK3sKKwlyZXR1cm4gamJkMl9qb3VybmFsX2JlZ2luX29yZGVyZWRfdHJ1bmNhdGUoJk9DRlMyX0koaW5vZGUpLT5pcF9qaW5vZGUsCisJCQkJCQkgICBuZXdfc2l6ZSk7Cit9CisKICNlbmRpZiAvKiBPQ0ZTMl9KT1VSTkFMX0ggKi8KZGlmZiAtLWdpdCBhL2ZzL29jZnMyL2xvY2FsYWxsb2MuYyBiL2ZzL29jZnMyL2xvY2FsYWxsb2MuYwppbmRleCAyOGU0OTJlLi42ODdiMjg3IDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9sb2NhbGFsbG9jLmMKKysrIGIvZnMvb2NmczIvbG9jYWxhbGxvYy5jCkBAIC0yOCw2ICsyOCw3IEBACiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L2hpZ2htZW0uaD4KICNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWJ1Z2ZzLmg+CiAKICNkZWZpbmUgTUxPR19NQVNLX1BSRUZJWCBNTF9ESVNLX0FMTE9DCiAjaW5jbHVkZSA8Y2x1c3Rlci9tYXNrbG9nLmg+CkBAIC00Nyw4ICs0OCw2IEBACiAKICNkZWZpbmUgT0NGUzJfTE9DQUxfQUxMT0MoZGlub2RlKQkoJigoZGlub2RlKS0+aWQyLmlfbGFiKSkKIAotc3RhdGljIGlubGluZSBpbnQgb2NmczJfbG9jYWxfYWxsb2Nfd2luZG93X2JpdHMoc3RydWN0IG9jZnMyX3N1cGVyICpvc2IpOwotCiBzdGF0aWMgdTMyIG9jZnMyX2xvY2FsX2FsbG9jX2NvdW50X2JpdHMoc3RydWN0IG9jZnMyX2Rpbm9kZSAqYWxsb2MpOwogCiBzdGF0aWMgaW50IG9jZnMyX2xvY2FsX2FsbG9jX2ZpbmRfY2xlYXJfYml0cyhzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiwKQEAgLTc1LDI0ICs3NCwxMjkgQEAKIHN0YXRpYyBpbnQgb2NmczJfbG9jYWxfYWxsb2Nfc2xpZGVfd2luZG93KHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiLAogCQkJCQkgIHN0cnVjdCBpbm9kZSAqbG9jYWxfYWxsb2NfaW5vZGUpOwogCi1zdGF0aWMgaW5saW5lIGludCBvY2ZzMl9sb2NhbF9hbGxvY193aW5kb3dfYml0cyhzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYikKLXsKLQlCVUdfT04ob3NiLT5zX2NsdXN0ZXJzaXplX2JpdHMgPiAyMCk7CisjaWZkZWYgQ09ORklHX09DRlMyX0ZTX1NUQVRTCiAKLQkvKiBTaXplIGxvY2FsIGFsbG9jIHdpbmRvd3MgYnkgdGhlIG1lZ2FieXRlICovCi0JcmV0dXJuIG9zYi0+bG9jYWxfYWxsb2Nfc2l6ZSA8PCAoMjAgLSBvc2ItPnNfY2x1c3RlcnNpemVfYml0cyk7CitzdGF0aWMgaW50IG9jZnMyX2xhX2RlYnVnX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJZmlsZS0+cHJpdmF0ZV9kYXRhID0gaW5vZGUtPmlfcHJpdmF0ZTsKKwlyZXR1cm4gMDsKK30KKworI2RlZmluZSBMQV9ERUJVR19CVUZfU1oJUEFHRV9DQUNIRV9TSVpFCisjZGVmaW5lIExBX0RFQlVHX1ZFUgkxCitzdGF0aWMgc3NpemVfdCBvY2ZzMl9sYV9kZWJ1Z19yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqdXNlcmJ1ZiwKKwkJCQkgICBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKK3sKKwlzdGF0aWMgREVGSU5FX01VVEVYKGxhX2RlYnVnX211dGV4KTsKKwlzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlpbnQgd3JpdHRlbiwgcmV0OworCWNoYXIgKmJ1ZiA9IG9zYi0+bG9jYWxfYWxsb2NfZGVidWdfYnVmOworCisJbXV0ZXhfbG9jaygmbGFfZGVidWdfbXV0ZXgpOworCW1lbXNldChidWYsIDAsIExBX0RFQlVHX0JVRl9TWik7CisKKwl3cml0dGVuID0gc25wcmludGYoYnVmLCBMQV9ERUJVR19CVUZfU1osCisJCQkgICAiMHgleFx0MHglbGx4XHQldVx0JXVcdDB4JXhcbiIsCisJCQkgICBMQV9ERUJVR19WRVIsCisJCQkgICAodW5zaWduZWQgbG9uZyBsb25nKW9zYi0+bGFfbGFzdF9nZCwKKwkJCSAgIG9zYi0+bG9jYWxfYWxsb2NfZGVmYXVsdF9iaXRzLAorCQkJICAgb3NiLT5sb2NhbF9hbGxvY19iaXRzLCBvc2ItPmxvY2FsX2FsbG9jX3N0YXRlKTsKKworCXJldCA9IHNpbXBsZV9yZWFkX2Zyb21fYnVmZmVyKHVzZXJidWYsIGNvdW50LCBwcG9zLCBidWYsIHdyaXR0ZW4pOworCisJbXV0ZXhfdW5sb2NrKCZsYV9kZWJ1Z19tdXRleCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgb2NmczJfbGFfZGVidWdfZm9wcyA9IHsKKwkub3BlbiA9CQlvY2ZzMl9sYV9kZWJ1Z19vcGVuLAorCS5yZWFkID0JCW9jZnMyX2xhX2RlYnVnX3JlYWQsCit9OworCitzdGF0aWMgdm9pZCBvY2ZzMl9pbml0X2xhX2RlYnVnKHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiKQoreworCW9zYi0+bG9jYWxfYWxsb2NfZGVidWdfYnVmID0ga21hbGxvYyhMQV9ERUJVR19CVUZfU1osIEdGUF9OT0ZTKTsKKwlpZiAoIW9zYi0+bG9jYWxfYWxsb2NfZGVidWdfYnVmKQorCQlyZXR1cm47CisKKwlvc2ItPmxvY2FsX2FsbG9jX2RlYnVnID0gZGVidWdmc19jcmVhdGVfZmlsZSgibG9jYWxfYWxsb2Nfc3RhdHMiLAorCQkJCQkJICAgICBTX0lGUkVHfFNfSVJVU1IsCisJCQkJCQkgICAgIG9zYi0+b3NiX2RlYnVnX3Jvb3QsCisJCQkJCQkgICAgIG9zYiwKKwkJCQkJCSAgICAgJm9jZnMyX2xhX2RlYnVnX2ZvcHMpOworCWlmICghb3NiLT5sb2NhbF9hbGxvY19kZWJ1ZykgeworCQlrZnJlZShvc2ItPmxvY2FsX2FsbG9jX2RlYnVnX2J1Zik7CisJCW9zYi0+bG9jYWxfYWxsb2NfZGVidWdfYnVmID0gTlVMTDsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIG9jZnMyX3NodXRkb3duX2xhX2RlYnVnKHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiKQoreworCWlmIChvc2ItPmxvY2FsX2FsbG9jX2RlYnVnKQorCQlkZWJ1Z2ZzX3JlbW92ZShvc2ItPmxvY2FsX2FsbG9jX2RlYnVnKTsKKworCWlmIChvc2ItPmxvY2FsX2FsbG9jX2RlYnVnX2J1ZikKKwkJa2ZyZWUob3NiLT5sb2NhbF9hbGxvY19kZWJ1Z19idWYpOworCisJb3NiLT5sb2NhbF9hbGxvY19kZWJ1Z19idWYgPSBOVUxMOworCW9zYi0+bG9jYWxfYWxsb2NfZGVidWcgPSBOVUxMOworfQorI2Vsc2UJLyogQ09ORklHX09DRlMyX0ZTX1NUQVRTICovCitzdGF0aWMgdm9pZCBvY2ZzMl9pbml0X2xhX2RlYnVnKHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiKQoreworCXJldHVybjsKK30KK3N0YXRpYyB2b2lkIG9jZnMyX3NodXRkb3duX2xhX2RlYnVnKHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiKQoreworCXJldHVybjsKK30KKyNlbmRpZgorCitzdGF0aWMgaW5saW5lIGludCBvY2ZzMl9sYV9zdGF0ZV9lbmFibGVkKHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiKQoreworCXJldHVybiAob3NiLT5sb2NhbF9hbGxvY19zdGF0ZSA9PSBPQ0ZTMl9MQV9USFJPVFRMRUQgfHwKKwkJb3NiLT5sb2NhbF9hbGxvY19zdGF0ZSA9PSBPQ0ZTMl9MQV9FTkFCTEVEKTsKK30KKwordm9pZCBvY2ZzMl9sb2NhbF9hbGxvY19zZWVuX2ZyZWVfYml0cyhzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiwKKwkJCQkgICAgICB1bnNpZ25lZCBpbnQgbnVtX2NsdXN0ZXJzKQoreworCXNwaW5fbG9jaygmb3NiLT5vc2JfbG9jayk7CisJaWYgKG9zYi0+bG9jYWxfYWxsb2Nfc3RhdGUgPT0gT0NGUzJfTEFfRElTQUJMRUQgfHwKKwkgICAgb3NiLT5sb2NhbF9hbGxvY19zdGF0ZSA9PSBPQ0ZTMl9MQV9USFJPVFRMRUQpCisJCWlmIChudW1fY2x1c3RlcnMgPj0gb3NiLT5sb2NhbF9hbGxvY19kZWZhdWx0X2JpdHMpIHsKKwkJCWNhbmNlbF9kZWxheWVkX3dvcmsoJm9zYi0+bGFfZW5hYmxlX3dxKTsKKwkJCW9zYi0+bG9jYWxfYWxsb2Nfc3RhdGUgPSBPQ0ZTMl9MQV9FTkFCTEVEOworCQl9CisJc3Bpbl91bmxvY2soJm9zYi0+b3NiX2xvY2spOworfQorCit2b2lkIG9jZnMyX2xhX2VuYWJsZV93b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiID0KKwkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBvY2ZzMl9zdXBlciwKKwkJCSAgICAgbGFfZW5hYmxlX3dxLndvcmspOworCXNwaW5fbG9jaygmb3NiLT5vc2JfbG9jayk7CisJb3NiLT5sb2NhbF9hbGxvY19zdGF0ZSA9IE9DRlMyX0xBX0VOQUJMRUQ7CisJc3Bpbl91bmxvY2soJm9zYi0+b3NiX2xvY2spOwogfQogCiAvKgogICogVGVsbCB1cyB3aGV0aGVyIGEgZ2l2ZW4gYWxsb2NhdGlvbiBzaG91bGQgdXNlIHRoZSBsb2NhbCBhbGxvYwogICogZmlsZS4gT3RoZXJ3aXNlLCBpdCBoYXMgdG8gZ28gdG8gdGhlIG1haW4gYml0bWFwLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gZG9lcyBzZW1pLWRpcnR5IHJlYWRzIG9mIGxvY2FsIGFsbG9jIHNpemUgYW5kIHN0YXRlIQorICogVGhpcyBpcyBvayBob3dldmVyLCBhcyB0aGUgdmFsdWVzIGFyZSByZS1jaGVja2VkIG9uY2UgdW5kZXIgbXV0ZXguCiAgKi8KIGludCBvY2ZzMl9hbGxvY19zaG91bGRfdXNlX2xvY2FsKHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiLCB1NjQgYml0cykKIHsKLQlpbnQgbGFfYml0cyA9IG9jZnMyX2xvY2FsX2FsbG9jX3dpbmRvd19iaXRzKG9zYik7CiAJaW50IHJldCA9IDA7CisJaW50IGxhX2JpdHM7CiAKLQlpZiAob3NiLT5sb2NhbF9hbGxvY19zdGF0ZSAhPSBPQ0ZTMl9MQV9FTkFCTEVEKQorCXNwaW5fbG9jaygmb3NiLT5vc2JfbG9jayk7CisJbGFfYml0cyA9IG9zYi0+bG9jYWxfYWxsb2NfYml0czsKKworCWlmICghb2NmczJfbGFfc3RhdGVfZW5hYmxlZChvc2IpKQogCQlnb3RvIGJhaWw7CiAKIAkvKiBsYV9iaXRzIHNob3VsZCBiZSBhdCBsZWFzdCB0d2ljZSB0aGUgc2l6ZSAoaW4gY2x1c3RlcnMpIG9mCkBAIC0xMDYsNiArMjEwLDcgQEAKIGJhaWw6CiAJbWxvZygwLCAic3RhdGU9JWQsIGJpdHM9JWxsdSwgbGFfYml0cz0lZCwgcmV0PSVkXG4iLAogCSAgICAgb3NiLT5sb2NhbF9hbGxvY19zdGF0ZSwgKHVuc2lnbmVkIGxvbmcgbG9uZyliaXRzLCBsYV9iaXRzLCByZXQpOworCXNwaW5fdW5sb2NrKCZvc2ItPm9zYl9sb2NrKTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0xMjAsMTQgKzIyNSwxOCBAQAogCiAJbWxvZ19lbnRyeV92b2lkKCk7CiAKLQlpZiAob3NiLT5sb2NhbF9hbGxvY19zaXplID09IDApCisJb2NmczJfaW5pdF9sYV9kZWJ1Zyhvc2IpOworCisJaWYgKG9zYi0+bG9jYWxfYWxsb2NfYml0cyA9PSAwKQogCQlnb3RvIGJhaWw7CiAKLQlpZiAob2NmczJfbG9jYWxfYWxsb2Nfd2luZG93X2JpdHMob3NiKSA+PSBvc2ItPmJpdG1hcF9jcGcpIHsKKwlpZiAob3NiLT5sb2NhbF9hbGxvY19iaXRzID49IG9zYi0+Yml0bWFwX2NwZykgewogCQltbG9nKE1MX05PVElDRSwgIlJlcXVlc3RlZCBsb2NhbCBhbGxvYyB3aW5kb3cgJWQgaXMgbGFyZ2VyICIKIAkJICAgICAidGhhbiBtYXggcG9zc2libGUgJXUuIFVzaW5nIGRlZmF1bHRzLlxuIiwKLQkJICAgICBvY2ZzMl9sb2NhbF9hbGxvY193aW5kb3dfYml0cyhvc2IpLCAob3NiLT5iaXRtYXBfY3BnIC0gMSkpOwotCQlvc2ItPmxvY2FsX2FsbG9jX3NpemUgPSBPQ0ZTMl9ERUZBVUxUX0xPQ0FMX0FMTE9DX1NJWkU7CisJCSAgICAgb3NiLT5sb2NhbF9hbGxvY19iaXRzLCAob3NiLT5iaXRtYXBfY3BnIC0gMSkpOworCQlvc2ItPmxvY2FsX2FsbG9jX2JpdHMgPQorCQkJb2NmczJfbWVnYWJ5dGVzX3RvX2NsdXN0ZXJzKG9zYi0+c2IsCisJCQkJCQkgICAgT0NGUzJfREVGQVVMVF9MT0NBTF9BTExPQ19TSVpFKTsKIAl9CiAKIAkvKiByZWFkIHRoZSBhbGxvYyBvZmYgZGlzayAqLwpAQCAtMTM5LDggKzI0OCw4IEBACiAJCWdvdG8gYmFpbDsKIAl9CiAKLQlzdGF0dXMgPSBvY2ZzMl9yZWFkX2Jsb2NrKG9zYiwgT0NGUzJfSShpbm9kZSktPmlwX2Jsa25vLAotCQkJCSAgJmFsbG9jX2JoLCAwLCBpbm9kZSk7CisJc3RhdHVzID0gb2NmczJfcmVhZF9ibG9ja3MoaW5vZGUsIE9DRlMyX0koaW5vZGUpLT5pcF9ibGtubywgMSwKKwkJCQkgICAmYWxsb2NfYmgsIE9DRlMyX0JIX0lHTk9SRV9DQUNIRSk7CiAJaWYgKHN0YXR1cyA8IDApIHsKIAkJbWxvZ19lcnJubyhzdGF0dXMpOwogCQlnb3RvIGJhaWw7CkBAIC0xODUsMTMgKzI5NCwxNCBAQAogCiBiYWlsOgogCWlmIChzdGF0dXMgPCAwKQotCQlpZiAoYWxsb2NfYmgpCi0JCQlicmVsc2UoYWxsb2NfYmgpOworCQlicmVsc2UoYWxsb2NfYmgpOwogCWlmIChpbm9kZSkKIAkJaXB1dChpbm9kZSk7CiAKLQltbG9nKDAsICJMb2NhbCBhbGxvYyB3aW5kb3cgYml0cyA9ICVkXG4iLAotCSAgICAgb2NmczJfbG9jYWxfYWxsb2Nfd2luZG93X2JpdHMob3NiKSk7CisJaWYgKHN0YXR1cyA8IDApCisJCW9jZnMyX3NodXRkb3duX2xhX2RlYnVnKG9zYik7CisKKwltbG9nKDAsICJMb2NhbCBhbGxvYyB3aW5kb3cgYml0cyA9ICVkXG4iLCBvc2ItPmxvY2FsX2FsbG9jX2JpdHMpOwogCiAJbWxvZ19leGl0KHN0YXR1cyk7CiAJcmV0dXJuIHN0YXR1czsKQEAgLTIxNyw2ICszMjcsMTEgQEAKIAogCW1sb2dfZW50cnlfdm9pZCgpOwogCisJY2FuY2VsX2RlbGF5ZWRfd29yaygmb3NiLT5sYV9lbmFibGVfd3EpOworCWZsdXNoX3dvcmtxdWV1ZShvY2ZzMl93cSk7CisKKwlvY2ZzMl9zaHV0ZG93bl9sYV9kZWJ1Zyhvc2IpOworCiAJaWYgKG9zYi0+bG9jYWxfYWxsb2Nfc3RhdGUgPT0gT0NGUzJfTEFfVU5VU0VEKQogCQlnb3RvIG91dDsKIApAQCAtMjk1LDggKzQxMCw3IEBACiAJb2NmczJfY29tbWl0X3RyYW5zKG9zYiwgaGFuZGxlKTsKIAogb3V0X3VubG9jazoKLQlpZiAobWFpbl9ibV9iaCkKLQkJYnJlbHNlKG1haW5fYm1fYmgpOworCWJyZWxzZShtYWluX2JtX2JoKTsKIAogCW9jZnMyX2lub2RlX3VubG9jayhtYWluX2JtX2lub2RlLCAxKTsKIApAQCAtMzQ1LDggKzQ1OSw4IEBACiAKIAltdXRleF9sb2NrKCZpbm9kZS0+aV9tdXRleCk7CiAKLQlzdGF0dXMgPSBvY2ZzMl9yZWFkX2Jsb2NrKG9zYiwgT0NGUzJfSShpbm9kZSktPmlwX2Jsa25vLAotCQkJCSAgJmFsbG9jX2JoLCAwLCBpbm9kZSk7CisJc3RhdHVzID0gb2NmczJfcmVhZF9ibG9ja3MoaW5vZGUsIE9DRlMyX0koaW5vZGUpLT5pcF9ibGtubywgMSwKKwkJCQkgICAmYWxsb2NfYmgsIE9DRlMyX0JIX0lHTk9SRV9DQUNIRSk7CiAJaWYgKHN0YXR1cyA8IDApIHsKIAkJbWxvZ19lcnJubyhzdGF0dXMpOwogCQlnb3RvIGJhaWw7CkBAIC0zNzIsOCArNDg2LDcgQEAKIAkJKmFsbG9jX2NvcHkgPSBOVUxMOwogCX0KIAotCWlmIChhbGxvY19iaCkKLQkJYnJlbHNlKGFsbG9jX2JoKTsKKwlicmVsc2UoYWxsb2NfYmgpOwogCiAJaWYgKGlub2RlKSB7CiAJCW11dGV4X3VubG9jaygmaW5vZGUtPmlfbXV0ZXgpOwpAQCAtNDQxLDggKzU1NCw3IEBACiBvdXRfbXV0ZXg6CiAJbXV0ZXhfdW5sb2NrKCZtYWluX2JtX2lub2RlLT5pX211dGV4KTsKIAotCWlmIChtYWluX2JtX2JoKQotCQlicmVsc2UobWFpbl9ibV9iaCk7CisJYnJlbHNlKG1haW5fYm1fYmgpOwogCiAJaXB1dChtYWluX2JtX2lub2RlKTsKIApAQCAtNDUzLDggKzU2NSw0OCBAQAogCXJldHVybiBzdGF0dXM7CiB9CiAKKy8qIENoZWNrIHRvIHNlZSBpZiB0aGUgbG9jYWwgYWxsb2Mgd2luZG93IGlzIHdpdGhpbiBhYy0+YWNfbWF4X2Jsb2NrICovCitzdGF0aWMgaW50IG9jZnMyX2xvY2FsX2FsbG9jX2luX3JhbmdlKHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCQkJICAgICAgc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKmFjLAorCQkJCSAgICAgIHUzMiBiaXRzX3dhbnRlZCkKK3sKKwlzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiA9IE9DRlMyX1NCKGlub2RlLT5pX3NiKTsKKwlzdHJ1Y3Qgb2NmczJfZGlub2RlICphbGxvYzsKKwlzdHJ1Y3Qgb2NmczJfbG9jYWxfYWxsb2MgKmxhOworCWludCBzdGFydDsKKwl1NjQgYmxvY2tfb2ZmOworCisJaWYgKCFhYy0+YWNfbWF4X2Jsb2NrKQorCQlyZXR1cm4gMTsKKworCWFsbG9jID0gKHN0cnVjdCBvY2ZzMl9kaW5vZGUgKikgb3NiLT5sb2NhbF9hbGxvY19iaC0+Yl9kYXRhOworCWxhID0gT0NGUzJfTE9DQUxfQUxMT0MoYWxsb2MpOworCisJc3RhcnQgPSBvY2ZzMl9sb2NhbF9hbGxvY19maW5kX2NsZWFyX2JpdHMob3NiLCBhbGxvYywgYml0c193YW50ZWQpOworCWlmIChzdGFydCA9PSAtMSkgeworCQltbG9nX2Vycm5vKC1FTk9TUEMpOworCQlyZXR1cm4gMDsKKwl9CisKKwkvKgorCSAqIENvbnZlcnRpbmcgKGJtX29mZiArIHN0YXJ0ICsgYml0c193YW50ZWQpIHRvIGJsb2NrcyBnaXZlcyB1cworCSAqIHRoZSBibGtubyBqdXN0IHBhc3Qgb3VyIGFjdHVhbCBhbGxvY2F0aW9uLiAgVGhpcyBpcyBwZXJmZWN0CisJICogdG8gY29tcGFyZSB3aXRoIGFjX21heF9ibG9jay4KKwkgKi8KKwlibG9ja19vZmYgPSBvY2ZzMl9jbHVzdGVyc190b19ibG9ja3MoaW5vZGUtPmlfc2IsCisJCQkJCSAgICAgbGUzMl90b19jcHUobGEtPmxhX2JtX29mZikgKworCQkJCQkgICAgIHN0YXJ0ICsgYml0c193YW50ZWQpOworCW1sb2coMCwgIkNoZWNraW5nICVsbHUgYWdhaW5zdCAlbGx1XG4iLAorCSAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylibG9ja19vZmYsCisJICAgICAodW5zaWduZWQgbG9uZyBsb25nKWFjLT5hY19tYXhfYmxvY2spOworCWlmIChibG9ja19vZmYgPiBhYy0+YWNfbWF4X2Jsb2NrKQorCQlyZXR1cm4gMDsKKworCXJldHVybiAxOworfQorCiAvKgotICogbWFrZSBzdXJlIHdlJ3ZlIGdvdCBhdCBsZWFzdCBiaXRzd2FudGVkIGNvbnRpZ3VvdXMgYml0cyBpbiB0aGUKKyAqIG1ha2Ugc3VyZSB3ZSd2ZSBnb3QgYXQgbGVhc3QgYml0c193YW50ZWQgY29udGlndW91cyBiaXRzIGluIHRoZQogICogbG9jYWwgYWxsb2MuIFlvdSBsb3NlIHRoZW0gd2hlbiB5b3UgZHJvcCBpX211dGV4LgogICoKICAqIFdlIHdpbGwgYWRkIG91cnNlbHZlcyB0byB0aGUgdHJhbnNhY3Rpb24gcGFzc2VkIGluLCBidXQgbWF5IHN0YXJ0CkBAIC00ODUsMTYgKzYzNywxOCBAQAogCiAJbXV0ZXhfbG9jaygmbG9jYWxfYWxsb2NfaW5vZGUtPmlfbXV0ZXgpOwogCi0JaWYgKG9zYi0+bG9jYWxfYWxsb2Nfc3RhdGUgIT0gT0NGUzJfTEFfRU5BQkxFRCkgeworCS8qCisJICogV2UgbXVzdCBkb3VibGUgY2hlY2sgc3RhdGUgYW5kIGFsbG9jYXRvciBiaXRzIGJlY2F1c2UKKwkgKiBhbm90aGVyIHByb2Nlc3MgbWF5IGhhdmUgY2hhbmdlZCB0aGVtIHdoaWxlIGhvbGRpbmcgaV9tdXRleC4KKwkgKi8KKwlzcGluX2xvY2soJm9zYi0+b3NiX2xvY2spOworCWlmICghb2NmczJfbGFfc3RhdGVfZW5hYmxlZChvc2IpIHx8CisJICAgIChiaXRzX3dhbnRlZCA+IG9zYi0+bG9jYWxfYWxsb2NfYml0cykpIHsKKwkJc3Bpbl91bmxvY2soJm9zYi0+b3NiX2xvY2spOwogCQlzdGF0dXMgPSAtRU5PU1BDOwogCQlnb3RvIGJhaWw7CiAJfQotCi0JaWYgKGJpdHNfd2FudGVkID4gb2NmczJfbG9jYWxfYWxsb2Nfd2luZG93X2JpdHMob3NiKSkgewotCQltbG9nKDAsICJBc2tpbmcgZm9yIG1vcmUgdGhhbiBteSBtYXggd2luZG93IHNpemUhXG4iKTsKLQkJc3RhdHVzID0gLUVOT1NQQzsKLQkJZ290byBiYWlsOwotCX0KKwlzcGluX3VubG9jaygmb3NiLT5vc2JfbG9jayk7CiAKIAlhbGxvYyA9IChzdHJ1Y3Qgb2NmczJfZGlub2RlICopIG9zYi0+bG9jYWxfYWxsb2NfYmgtPmJfZGF0YTsKIApAQCAtNTIyLDYgKzY3NiwzNiBAQAogCQkJCW1sb2dfZXJybm8oc3RhdHVzKTsKIAkJCWdvdG8gYmFpbDsKIAkJfQorCisJCS8qCisJCSAqIFVuZGVyIGNlcnRhaW4gY29uZGl0aW9ucywgdGhlIHdpbmRvdyBzbGlkZSBjb2RlCisJCSAqIG1pZ2h0IGhhdmUgcmVkdWNlZCB0aGUgbnVtYmVyIG9mIGJpdHMgYXZhaWxhYmxlIG9yCisJCSAqIGRpc2FibGVkIHRoZSB0aGUgbG9jYWwgYWxsb2MgZW50aXJlbHkuIFJlLWNoZWNrCisJCSAqIGhlcmUgYW5kIHJldHVybiAtRU5PU1BDIGlmIG5lY2Vzc2FyeS4KKwkJICovCisJCXN0YXR1cyA9IC1FTk9TUEM7CisJCWlmICghb2NmczJfbGFfc3RhdGVfZW5hYmxlZChvc2IpKQorCQkJZ290byBiYWlsOworCisJCWZyZWVfYml0cyA9IGxlMzJfdG9fY3B1KGFsbG9jLT5pZDEuYml0bWFwMS5pX3RvdGFsKSAtCisJCQlsZTMyX3RvX2NwdShhbGxvYy0+aWQxLmJpdG1hcDEuaV91c2VkKTsKKwkJaWYgKGJpdHNfd2FudGVkID4gZnJlZV9iaXRzKQorCQkJZ290byBiYWlsOworCX0KKworCWlmIChhYy0+YWNfbWF4X2Jsb2NrKQorCQltbG9nKDAsICJDYWxsaW5nIGluX3JhbmdlIGZvciBtYXggYmxvY2sgJWxsdVxuIiwKKwkJICAgICAodW5zaWduZWQgbG9uZyBsb25nKWFjLT5hY19tYXhfYmxvY2spOworCisJaWYgKCFvY2ZzMl9sb2NhbF9hbGxvY19pbl9yYW5nZShsb2NhbF9hbGxvY19pbm9kZSwgYWMsCisJCQkJCWJpdHNfd2FudGVkKSkgeworCQkvKgorCQkgKiBUaGUgd2luZG93IGlzIG91dHNpZGUgYWMtPmFjX21heF9ibG9jay4KKwkJICogVGhpcyBlcnJubyB0ZWxscyB0aGUgY2FsbGVyIHRvIGtlZXAgbG9jYWxhbGxvYyBlbmFibGVkCisJCSAqIGJ1dCB0byBnZXQgdGhlIGFsbG9jYXRpb24gZnJvbSB0aGUgbWFpbiBiaXRtYXAuCisJCSAqLworCQlzdGF0dXMgPSAtRUZCSUc7CisJCWdvdG8gYmFpbDsKIAl9CiAKIAlhYy0+YWNfaW5vZGUgPSBsb2NhbF9hbGxvY19pbm9kZTsKQEAgLTc4OSw2ICs5NzMsODUgQEAKIAlyZXR1cm4gc3RhdHVzOwogfQogCitlbnVtIG9jZnMyX2xhX2V2ZW50IHsKKwlPQ0ZTMl9MQV9FVkVOVF9TTElERSwJCS8qIE5vcm1hbCB3aW5kb3cgc2xpZGUuICovCisJT0NGUzJfTEFfRVZFTlRfRlJBR01FTlRFRCwJLyogVGhlIGdsb2JhbCBiaXRtYXAgaGFzCisJCQkJCSAqIGVub3VnaCBiaXRzIHRoZW9yZXRpY2FsbHkKKwkJCQkJICogZnJlZSwgYnV0IGEgY29udGlndW91cworCQkJCQkgKiBhbGxvY2F0aW9uIGNvdWxkIG5vdCBiZQorCQkJCQkgKiBmb3VuZC4gKi8KKwlPQ0ZTMl9MQV9FVkVOVF9FTk9TUEMsCQkvKiBHbG9iYWwgYml0bWFwIGRvZXNuJ3QgaGF2ZQorCQkJCQkgKiBlbm91Z2ggYml0cyBmcmVlIHRvIHNhdGlzZnkKKwkJCQkJICogb3VyIHJlcXVlc3QuICovCit9OworI2RlZmluZSBPQ0ZTMl9MQV9FTkFCTEVfSU5URVJWQUwgKDMwICogSFopCisvKgorICogR2l2ZW4gYW4gZXZlbnQsIGNhbGN1bGF0ZSB0aGUgc2l6ZSBvZiBvdXIgbmV4dCBsb2NhbCBhbGxvYyB3aW5kb3cuCisgKgorICogVGhpcyBzaG91bGQgYWx3YXlzIGJlIGNhbGxlZCB1bmRlciBpX211dGV4IG9mIHRoZSBsb2NhbCBhbGxvYyBpbm9kZQorICogc28gdGhhdCBsb2NhbCBhbGxvYyBkaXNhYmxpbmcgZG9lc24ndCByYWNlIHdpdGggcHJvY2Vzc2VzIHRyeWluZyB0bworICogdXNlIHRoZSBhbGxvY2F0b3IuCisgKgorICogUmV0dXJucyB0aGUgc3RhdGUgd2hpY2ggdGhlIGxvY2FsIGFsbG9jIHdhcyBsZWZ0IGluLiBUaGlzIHZhbHVlIGNhbgorICogYmUgaWdub3JlZCBieSBzb21lIHBhdGhzLgorICovCitzdGF0aWMgaW50IG9jZnMyX3JlY2FsY19sYV93aW5kb3coc3RydWN0IG9jZnMyX3N1cGVyICpvc2IsCisJCQkJICBlbnVtIG9jZnMyX2xhX2V2ZW50IGV2ZW50KQoreworCXVuc2lnbmVkIGludCBiaXRzOworCWludCBzdGF0ZTsKKworCXNwaW5fbG9jaygmb3NiLT5vc2JfbG9jayk7CisJaWYgKG9zYi0+bG9jYWxfYWxsb2Nfc3RhdGUgPT0gT0NGUzJfTEFfRElTQUJMRUQpIHsKKwkJV0FSTl9PTl9PTkNFKG9zYi0+bG9jYWxfYWxsb2Nfc3RhdGUgPT0gT0NGUzJfTEFfRElTQUJMRUQpOworCQlnb3RvIG91dF91bmxvY2s7CisJfQorCisJLyoKKwkgKiBFTk9TUEMgYW5kIGZyYWdtZW50YXRpb24gYXJlIHRyZWF0ZWQgc2ltaWxhcmx5IGZvciBub3cuCisJICovCisJaWYgKGV2ZW50ID09IE9DRlMyX0xBX0VWRU5UX0VOT1NQQyB8fAorCSAgICBldmVudCA9PSBPQ0ZTMl9MQV9FVkVOVF9GUkFHTUVOVEVEKSB7CisJCS8qCisJCSAqIFdlIHJhbiBvdXQgb2YgY29udGlndW91cyBzcGFjZSBpbiB0aGUgcHJpbWFyeQorCQkgKiBiaXRtYXAuIERyYXN0aWNhbGx5IHJlZHVjZSB0aGUgbnVtYmVyIG9mIGJpdHMgdXNlZAorCQkgKiBieSBsb2NhbCBhbGxvYyB1bnRpbCB3ZSBoYXZlIHRvIGRpc2FibGUgaXQuCisJCSAqLworCQliaXRzID0gb3NiLT5sb2NhbF9hbGxvY19iaXRzID4+IDE7CisJCWlmIChiaXRzID4gb2NmczJfbWVnYWJ5dGVzX3RvX2NsdXN0ZXJzKG9zYi0+c2IsIDEpKSB7CisJCQkvKgorCQkJICogQnkgc2V0dGluZyBzdGF0ZSB0byBUSFJPVFRMRUQsIHdlJ2xsIGtlZXAKKwkJCSAqIHRoZSBudW1iZXIgb2YgbG9jYWwgYWxsb2MgYml0cyB1c2VkIGRvd24KKwkJCSAqIHVudGlsIGFuIGV2ZW50IG9jY3VycyB3aGljaCB3b3VsZCBnaXZlIHVzCisJCQkgKiByZWFzb24gdG8gYXNzdW1lIHRoZSBiaXRtYXAgc2l0dWF0aW9uIG1pZ2h0CisJCQkgKiBoYXZlIGNoYW5nZWQuCisJCQkgKi8KKwkJCW9zYi0+bG9jYWxfYWxsb2Nfc3RhdGUgPSBPQ0ZTMl9MQV9USFJPVFRMRUQ7CisJCQlvc2ItPmxvY2FsX2FsbG9jX2JpdHMgPSBiaXRzOworCQl9IGVsc2UgeworCQkJb3NiLT5sb2NhbF9hbGxvY19zdGF0ZSA9IE9DRlMyX0xBX0RJU0FCTEVEOworCQl9CisJCXF1ZXVlX2RlbGF5ZWRfd29yayhvY2ZzMl93cSwgJm9zYi0+bGFfZW5hYmxlX3dxLAorCQkJCSAgIE9DRlMyX0xBX0VOQUJMRV9JTlRFUlZBTCk7CisJCWdvdG8gb3V0X3VubG9jazsKKwl9CisKKwkvKgorCSAqIERvbid0IGluY3JlYXNlIHRoZSBzaXplIG9mIHRoZSBsb2NhbCBhbGxvYyB3aW5kb3cgdW50aWwgd2UKKwkgKiBrbm93IHdlIG1pZ2h0IGJlIGFibGUgdG8gZnVsZmlsbCB0aGUgcmVxdWVzdC4gT3RoZXJ3aXNlLCB3ZQorCSAqIHJpc2sgYm91bmNpbmcgYXJvdW5kIHRoZSBnbG9iYWwgYml0bWFwIGR1cmluZyBwZXJpb2RzIG9mCisJICogbG93IHNwYWNlLgorCSAqLworCWlmIChvc2ItPmxvY2FsX2FsbG9jX3N0YXRlICE9IE9DRlMyX0xBX1RIUk9UVExFRCkKKwkJb3NiLT5sb2NhbF9hbGxvY19iaXRzID0gb3NiLT5sb2NhbF9hbGxvY19kZWZhdWx0X2JpdHM7CisKK291dF91bmxvY2s6CisJc3RhdGUgPSBvc2ItPmxvY2FsX2FsbG9jX3N0YXRlOworCXNwaW5fdW5sb2NrKCZvc2ItPm9zYl9sb2NrKTsKKworCXJldHVybiBzdGF0ZTsKK30KKwogc3RhdGljIGludCBvY2ZzMl9sb2NhbF9hbGxvY19yZXNlcnZlX2Zvcl93aW5kb3coc3RydWN0IG9jZnMyX3N1cGVyICpvc2IsCiAJCQkJCQlzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqKmFjLAogCQkJCQkJc3RydWN0IGlub2RlICoqYml0bWFwX2lub2RlLApAQCAtODAzLDEyICsxMDY2LDIxIEBACiAJCWdvdG8gYmFpbDsKIAl9CiAKLQkoKmFjKS0+YWNfYml0c193YW50ZWQgPSBvY2ZzMl9sb2NhbF9hbGxvY193aW5kb3dfYml0cyhvc2IpOworcmV0cnlfZW5vc3BjOgorCSgqYWMpLT5hY19iaXRzX3dhbnRlZCA9IG9zYi0+bG9jYWxfYWxsb2NfYml0czsKIAogCXN0YXR1cyA9IG9jZnMyX3Jlc2VydmVfY2x1c3Rlcl9iaXRtYXBfYml0cyhvc2IsICphYyk7CisJaWYgKHN0YXR1cyA9PSAtRU5PU1BDKSB7CisJCWlmIChvY2ZzMl9yZWNhbGNfbGFfd2luZG93KG9zYiwgT0NGUzJfTEFfRVZFTlRfRU5PU1BDKSA9PQorCQkgICAgT0NGUzJfTEFfRElTQUJMRUQpCisJCQlnb3RvIGJhaWw7CisKKwkJb2NmczJfZnJlZV9hY19yZXNvdXJjZSgqYWMpOworCQltZW1zZXQoKmFjLCAwLCBzaXplb2Yoc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQpKTsKKwkJZ290byByZXRyeV9lbm9zcGM7CisJfQogCWlmIChzdGF0dXMgPCAwKSB7Ci0JCWlmIChzdGF0dXMgIT0gLUVOT1NQQykKLQkJCW1sb2dfZXJybm8oc3RhdHVzKTsKKwkJbWxvZ19lcnJubyhzdGF0dXMpOwogCQlnb3RvIGJhaWw7CiAJfQogCkBAIC04NDksNyArMTEyMSw3IEBACiAJCSAgICAgIm9uZVxuIik7CiAKIAltbG9nKDAsICJBbGxvY2F0aW5nICV1IGNsdXN0ZXJzIGZvciBhIG5ldyB3aW5kb3cuXG4iLAotCSAgICAgb2NmczJfbG9jYWxfYWxsb2Nfd2luZG93X2JpdHMob3NiKSk7CisJICAgICBvc2ItPmxvY2FsX2FsbG9jX2JpdHMpOwogCiAJLyogSW5zdHJ1Y3QgdGhlIGFsbG9jYXRpb24gY29kZSB0byB0cnkgdGhlIG1vc3QgcmVjZW50bHkgdXNlZAogCSAqIGNsdXN0ZXIgZ3JvdXAuIFdlJ2xsIHJlLXJlY29yZCB0aGUgZ3JvdXAgdXNlZCB0aGlzIHBhc3MKQEAgLTg1OSw5ICsxMTMxLDM2IEBACiAJLyogd2UgdXNlZCB0aGUgZ2VuZXJpYyBzdWJhbGxvYyByZXNlcnZlIGZ1bmN0aW9uLCBidXQgd2Ugc2V0CiAJICogZXZlcnl0aGluZyB1cCBuaWNlbHksIHNvIHRoZXJlJ3Mgbm8gcmVhc29uIHdoeSB3ZSBjYW4ndCB1c2UKIAkgKiB0aGUgbW9yZSBzcGVjaWZpYyBjbHVzdGVyIGFwaSB0byBjbGFpbSBiaXRzLiAqLwotCXN0YXR1cyA9IG9jZnMyX2NsYWltX2NsdXN0ZXJzKG9zYiwgaGFuZGxlLCBhYywKLQkJCQkgICAgICBvY2ZzMl9sb2NhbF9hbGxvY193aW5kb3dfYml0cyhvc2IpLAorCXN0YXR1cyA9IG9jZnMyX2NsYWltX2NsdXN0ZXJzKG9zYiwgaGFuZGxlLCBhYywgb3NiLT5sb2NhbF9hbGxvY19iaXRzLAogCQkJCSAgICAgICZjbHVzdGVyX29mZiwgJmNsdXN0ZXJfY291bnQpOworCWlmIChzdGF0dXMgPT0gLUVOT1NQQykgeworcmV0cnlfZW5vc3BjOgorCQkvKgorCQkgKiBOb3RlOiBXZSBjb3VsZCBhbHNvIHRyeSBzeW5jaW5nIHRoZSBqb3VybmFsIGhlcmUgdG8KKwkJICogYWxsb3cgdXNlIG9mIGFueSBmcmVlIGJpdHMgd2hpY2ggdGhlIGN1cnJlbnQKKwkJICogdHJhbnNhY3Rpb24gY2FuJ3QgZ2l2ZSB1cyBhY2Nlc3MgdG8uIC0tTWFyaworCQkgKi8KKwkJaWYgKG9jZnMyX3JlY2FsY19sYV93aW5kb3cob3NiLCBPQ0ZTMl9MQV9FVkVOVF9GUkFHTUVOVEVEKSA9PQorCQkgICAgT0NGUzJfTEFfRElTQUJMRUQpCisJCQlnb3RvIGJhaWw7CisKKwkJc3RhdHVzID0gb2NmczJfY2xhaW1fY2x1c3RlcnMob3NiLCBoYW5kbGUsIGFjLAorCQkJCQkgICAgICBvc2ItPmxvY2FsX2FsbG9jX2JpdHMsCisJCQkJCSAgICAgICZjbHVzdGVyX29mZiwKKwkJCQkJICAgICAgJmNsdXN0ZXJfY291bnQpOworCQlpZiAoc3RhdHVzID09IC1FTk9TUEMpCisJCQlnb3RvIHJldHJ5X2Vub3NwYzsKKwkJLyoKKwkJICogV2Ugb25seSBzaHJ1bmsgdGhlICptaW5pbXVtKiBudW1iZXIgb2YgaW4gb3VyCisJCSAqIHJlcXVlc3QgLSBpdCdzIGVudGlyZWx5IHBvc3NpYmxlIHRoYXQgdGhlIGFsbG9jYXRvcgorCQkgKiBtaWdodCBnaXZlIHVzIG1vcmUgdGhhbiB3ZSBhc2tlZCBmb3IuCisJCSAqLworCQlpZiAoc3RhdHVzID09IDApIHsKKwkJCXNwaW5fbG9jaygmb3NiLT5vc2JfbG9jayk7CisJCQlvc2ItPmxvY2FsX2FsbG9jX2JpdHMgPSBjbHVzdGVyX2NvdW50OworCQkJc3Bpbl91bmxvY2soJm9zYi0+b3NiX2xvY2spOworCQl9CisJfQogCWlmIChzdGF0dXMgPCAwKSB7CiAJCWlmIChzdGF0dXMgIT0gLUVOT1NQQykKIAkJCW1sb2dfZXJybm8oc3RhdHVzKTsKQEAgLTkwNSw2ICsxMjA0LDggQEAKIAogCW1sb2dfZW50cnlfdm9pZCgpOwogCisJb2NmczJfcmVjYWxjX2xhX3dpbmRvdyhvc2IsIE9DRlMyX0xBX0VWRU5UX1NMSURFKTsKKwogCS8qIFRoaXMgd2lsbCBsb2NrIHRoZSBtYWluIGJpdG1hcCBmb3IgdXMuICovCiAJc3RhdHVzID0gb2NmczJfbG9jYWxfYWxsb2NfcmVzZXJ2ZV9mb3Jfd2luZG93KG9zYiwKIAkJCQkJCSAgICAgICZhYywKQEAgLTk3Niw4ICsxMjc3LDcgQEAKIAlpZiAoaGFuZGxlKQogCQlvY2ZzMl9jb21taXRfdHJhbnMob3NiLCBoYW5kbGUpOwogCi0JaWYgKG1haW5fYm1fYmgpCi0JCWJyZWxzZShtYWluX2JtX2JoKTsKKwlicmVsc2UobWFpbl9ibV9iaCk7CiAKIAlpZiAobWFpbl9ibV9pbm9kZSkKIAkJaXB1dChtYWluX2JtX2lub2RlKTsKZGlmZiAtLWdpdCBhL2ZzL29jZnMyL2xvY2FsYWxsb2MuaCBiL2ZzL29jZnMyL2xvY2FsYWxsb2MuaAppbmRleCAzZjc2NjMxLi5hYzVlYTlmOCAxMDA2NDQKLS0tIGEvZnMvb2NmczIvbG9jYWxhbGxvYy5oCisrKyBiL2ZzL29jZnMyL2xvY2FsYWxsb2MuaApAQCAtNTIsNCArNTIsOCBAQAogCQkJCSB1MzIgKmJpdF9vZmYsCiAJCQkJIHUzMiAqbnVtX2JpdHMpOwogCit2b2lkIG9jZnMyX2xvY2FsX2FsbG9jX3NlZW5fZnJlZV9iaXRzKHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiLAorCQkJCSAgICAgIHVuc2lnbmVkIGludCBudW1fY2x1c3RlcnMpOwordm9pZCBvY2ZzMl9sYV9lbmFibGVfd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7CisKICNlbmRpZiAvKiBPQ0ZTMl9MT0NBTEFMTE9DX0ggKi8KZGlmZiAtLWdpdCBhL2ZzL29jZnMyL2xvY2tzLmMgYi9mcy9vY2ZzMi9sb2Nrcy5jCmluZGV4IDIwM2Y4NzEuLjU0NGFjNjIgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL2xvY2tzLmMKKysrIGIvZnMvb2NmczIvbG9ja3MuYwpAQCAtMjQsNiArMjQsNyBAQAogICovCiAKICNpbmNsdWRlIDxsaW51eC9mcy5oPgorI2luY2x1ZGUgPGxpbnV4L2ZjbnRsLmg+CiAKICNkZWZpbmUgTUxPR19NQVNLX1BSRUZJWCBNTF9JTk9ERQogI2luY2x1ZGUgPGNsdXN0ZXIvbWFza2xvZy5oPgpAQCAtMzIsNiArMzMsNyBAQAogCiAjaW5jbHVkZSAiZGxtZ2x1ZS5oIgogI2luY2x1ZGUgImZpbGUuaCIKKyNpbmNsdWRlICJpbm9kZS5oIgogI2luY2x1ZGUgImxvY2tzLmgiCiAKIHN0YXRpYyBpbnQgb2NmczJfZG9fZmxvY2soc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsCkBAIC0xMjMsMyArMTI1LDE2IEBACiAJZWxzZQogCQlyZXR1cm4gb2NmczJfZG9fZmxvY2soZmlsZSwgaW5vZGUsIGNtZCwgZmwpOwogfQorCitpbnQgb2NmczJfbG9jayhzdHJ1Y3QgZmlsZSAqZmlsZSwgaW50IGNtZCwgc3RydWN0IGZpbGVfbG9jayAqZmwpCit7CisJc3RydWN0IGlub2RlICppbm9kZSA9IGZpbGUtPmZfbWFwcGluZy0+aG9zdDsKKwlzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiA9IE9DRlMyX1NCKGlub2RlLT5pX3NiKTsKKworCWlmICghKGZsLT5mbF9mbGFncyAmIEZMX1BPU0lYKSkKKwkJcmV0dXJuIC1FTk9MQ0s7CisJaWYgKF9fbWFuZGF0b3J5X2xvY2soaW5vZGUpKQorCQlyZXR1cm4gLUVOT0xDSzsKKworCXJldHVybiBvY2ZzMl9wbG9jayhvc2ItPmNjb25uLCBPQ0ZTMl9JKGlub2RlKS0+aXBfYmxrbm8sIGZpbGUsIGNtZCwgZmwpOworfQpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvbG9ja3MuaCBiL2ZzL29jZnMyL2xvY2tzLmgKaW5kZXggOTc0M2VmMi4uNDk2ZDQ4OCAxMDA2NDQKLS0tIGEvZnMvb2NmczIvbG9ja3MuaAorKysgYi9mcy9vY2ZzMi9sb2Nrcy5oCkBAIC0yNyw1ICsyNyw2IEBACiAjZGVmaW5lIE9DRlMyX0xPQ0tTX0gKIAogaW50IG9jZnMyX2Zsb2NrKHN0cnVjdCBmaWxlICpmaWxlLCBpbnQgY21kLCBzdHJ1Y3QgZmlsZV9sb2NrICpmbCk7CitpbnQgb2NmczJfbG9jayhzdHJ1Y3QgZmlsZSAqZmlsZSwgaW50IGNtZCwgc3RydWN0IGZpbGVfbG9jayAqZmwpOwogCiAjZW5kaWYgLyogT0NGUzJfTE9DS1NfSCAqLwpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvbmFtZWkuYyBiL2ZzL29jZnMyL25hbWVpLmMKaW5kZXggZDVkODA4Zi4uNDg1YTZhYSAxMDA2NDQKLS0tIGEvZnMvb2NmczIvbmFtZWkuYworKysgYi9mcy9vY2ZzMi9uYW1laS5jCkBAIC02MCw2ICs2MCw3IEBACiAjaW5jbHVkZSAic3ltbGluay5oIgogI2luY2x1ZGUgInN5c2ZpbGUuaCIKICNpbmNsdWRlICJ1cHRvZGF0ZS5oIgorI2luY2x1ZGUgInhhdHRyLmgiCiAKICNpbmNsdWRlICJidWZmZXJfaGVhZF9pby5oIgogCkBAIC0zMjcsMTQgKzMyOCw5IEBACiAJaWYgKHN0YXR1cyA9PSAtRU5PU1BDKQogCQltbG9nKDAsICJEaXNrIGlzIGZ1bGxcbiIpOwogCi0JaWYgKG5ld19mZV9iaCkKLQkJYnJlbHNlKG5ld19mZV9iaCk7Ci0KLQlpZiAoZGVfYmgpCi0JCWJyZWxzZShkZV9iaCk7Ci0KLQlpZiAocGFyZW50X2ZlX2JoKQotCQlicmVsc2UocGFyZW50X2ZlX2JoKTsKKwlicmVsc2UobmV3X2ZlX2JoKTsKKwlicmVsc2UoZGVfYmgpOworCWJyZWxzZShwYXJlbnRfZmVfYmgpOwogCiAJaWYgKChzdGF0dXMgPCAwKSAmJiBpbm9kZSkKIAkJaXB1dChpbm9kZSk7CkBAIC02NDcsMTIgKzY0Myw5IEBACiBvdXQ6CiAJb2NmczJfaW5vZGVfdW5sb2NrKGRpciwgMSk7CiAKLQlpZiAoZGVfYmgpCi0JCWJyZWxzZShkZV9iaCk7Ci0JaWYgKGZlX2JoKQotCQlicmVsc2UoZmVfYmgpOwotCWlmIChwYXJlbnRfZmVfYmgpCi0JCWJyZWxzZShwYXJlbnRfZmVfYmgpOworCWJyZWxzZShkZV9iaCk7CisJYnJlbHNlKGZlX2JoKTsKKwlicmVsc2UocGFyZW50X2ZlX2JoKTsKIAogCW1sb2dfZXhpdChlcnIpOwogCkBAIC04NTEsMTcgKzg0NCwxMCBAQAogCQlpcHV0KG9ycGhhbl9kaXIpOwogCX0KIAotCWlmIChmZV9iaCkKLQkJYnJlbHNlKGZlX2JoKTsKLQotCWlmIChkaXJlbnRfYmgpCi0JCWJyZWxzZShkaXJlbnRfYmgpOwotCi0JaWYgKHBhcmVudF9ub2RlX2JoKQotCQlicmVsc2UocGFyZW50X25vZGVfYmgpOwotCi0JaWYgKG9ycGhhbl9lbnRyeV9iaCkKLQkJYnJlbHNlKG9ycGhhbl9lbnRyeV9iaCk7CisJYnJlbHNlKGZlX2JoKTsKKwlicmVsc2UoZGlyZW50X2JoKTsKKwlicmVsc2UocGFyZW50X25vZGVfYmgpOworCWJyZWxzZShvcnBoYW5fZW50cnlfYmgpOwogCiAJbWxvZ19leGl0KHN0YXR1cyk7CiAKQEAgLTEzNzIsMjQgKzEzNTgsMTUgQEAKIAogCWlmIChuZXdfaW5vZGUpCiAJCWlwdXQobmV3X2lub2RlKTsKLQlpZiAobmV3ZmVfYmgpCi0JCWJyZWxzZShuZXdmZV9iaCk7Ci0JaWYgKG9sZF9pbm9kZV9iaCkKLQkJYnJlbHNlKG9sZF9pbm9kZV9iaCk7Ci0JaWYgKG9sZF9kaXJfYmgpCi0JCWJyZWxzZShvbGRfZGlyX2JoKTsKLQlpZiAobmV3X2Rpcl9iaCkKLQkJYnJlbHNlKG5ld19kaXJfYmgpOwotCWlmIChuZXdfZGVfYmgpCi0JCWJyZWxzZShuZXdfZGVfYmgpOwotCWlmIChvbGRfZGVfYmgpCi0JCWJyZWxzZShvbGRfZGVfYmgpOwotCWlmIChvbGRfaW5vZGVfZGVfYmgpCi0JCWJyZWxzZShvbGRfaW5vZGVfZGVfYmgpOwotCWlmIChvcnBoYW5fZW50cnlfYmgpCi0JCWJyZWxzZShvcnBoYW5fZW50cnlfYmgpOwotCWlmIChpbnNlcnRfZW50cnlfYmgpCi0JCWJyZWxzZShpbnNlcnRfZW50cnlfYmgpOworCWJyZWxzZShuZXdmZV9iaCk7CisJYnJlbHNlKG9sZF9pbm9kZV9iaCk7CisJYnJlbHNlKG9sZF9kaXJfYmgpOworCWJyZWxzZShuZXdfZGlyX2JoKTsKKwlicmVsc2UobmV3X2RlX2JoKTsKKwlicmVsc2Uob2xkX2RlX2JoKTsKKwlicmVsc2Uob2xkX2lub2RlX2RlX2JoKTsKKwlicmVsc2Uob3JwaGFuX2VudHJ5X2JoKTsKKwlicmVsc2UoaW5zZXJ0X2VudHJ5X2JoKTsKIAogCW1sb2dfZXhpdChzdGF0dXMpOwogCkBAIC0xNDkyLDggKzE0NjksNyBAQAogCiAJaWYgKGJocykgewogCQlmb3IoaSA9IDA7IGkgPCBibG9ja3M7IGkrKykKLQkJCWlmIChiaHNbaV0pCi0JCQkJYnJlbHNlKGJoc1tpXSk7CisJCQlicmVsc2UoYmhzW2ldKTsKIAkJa2ZyZWUoYmhzKTsKIAl9CiAKQEAgLTE1OTgsMTAgKzE1NzQsMTAgQEAKIAkJdTMyIG9mZnNldCA9IDA7CiAKIAkJaW5vZGUtPmlfb3AgPSAmb2NmczJfc3ltbGlua19pbm9kZV9vcGVyYXRpb25zOwotCQlzdGF0dXMgPSBvY2ZzMl9kb19leHRlbmRfYWxsb2NhdGlvbihvc2IsIGlub2RlLCAmb2Zmc2V0LCAxLCAwLAotCQkJCQkJICAgIG5ld19mZV9iaCwKLQkJCQkJCSAgICBoYW5kbGUsIGRhdGFfYWMsIE5VTEwsCi0JCQkJCQkgICAgTlVMTCk7CisJCXN0YXR1cyA9IG9jZnMyX2FkZF9pbm9kZV9kYXRhKG9zYiwgaW5vZGUsICZvZmZzZXQsIDEsIDAsCisJCQkJCSAgICAgIG5ld19mZV9iaCwKKwkJCQkJICAgICAgaGFuZGxlLCBkYXRhX2FjLCBOVUxMLAorCQkJCQkgICAgICBOVUxMKTsKIAkJaWYgKHN0YXR1cyA8IDApIHsKIAkJCWlmIChzdGF0dXMgIT0gLUVOT1NQQyAmJiBzdGF0dXMgIT0gLUVJTlRSKSB7CiAJCQkJbWxvZyhNTF9FUlJPUiwKQEAgLTE2NTksMTIgKzE2MzUsOSBAQAogCiAJb2NmczJfaW5vZGVfdW5sb2NrKGRpciwgMSk7CiAKLQlpZiAobmV3X2ZlX2JoKQotCQlicmVsc2UobmV3X2ZlX2JoKTsKLQlpZiAocGFyZW50X2ZlX2JoKQotCQlicmVsc2UocGFyZW50X2ZlX2JoKTsKLQlpZiAoZGVfYmgpCi0JCWJyZWxzZShkZV9iaCk7CisJYnJlbHNlKG5ld19mZV9iaCk7CisJYnJlbHNlKHBhcmVudF9mZV9iaCk7CisJYnJlbHNlKGRlX2JoKTsKIAlpZiAoaW5vZGVfYWMpCiAJCW9jZnMyX2ZyZWVfYWxsb2NfY29udGV4dChpbm9kZV9hYyk7CiAJaWYgKGRhdGFfYWMpCkBAIC0xNzU5LDggKzE3MzIsNyBAQAogCQlpcHV0KG9ycGhhbl9kaXJfaW5vZGUpOwogCX0KIAotCWlmIChvcnBoYW5fZGlyX2JoKQotCQlicmVsc2Uob3JwaGFuX2Rpcl9iaCk7CisJYnJlbHNlKG9ycGhhbl9kaXJfYmgpOwogCiAJbWxvZ19leGl0KHN0YXR1cyk7CiAJcmV0dXJuIHN0YXR1czsKQEAgLTE3ODAsMTAgKzE3NTIsOSBAQAogCiAJbWxvZ19lbnRyeSgiKGlub2RlLT5pX2lubyA9ICVsdSlcbiIsIGlub2RlLT5pX2lubyk7CiAKLQlzdGF0dXMgPSBvY2ZzMl9yZWFkX2Jsb2NrKG9zYiwKKwlzdGF0dXMgPSBvY2ZzMl9yZWFkX2Jsb2NrKG9ycGhhbl9kaXJfaW5vZGUsCiAJCQkJICBPQ0ZTMl9JKG9ycGhhbl9kaXJfaW5vZGUpLT5pcF9ibGtubywKLQkJCQkgICZvcnBoYW5fZGlyX2JoLCBPQ0ZTMl9CSF9DQUNIRUQsCi0JCQkJICBvcnBoYW5fZGlyX2lub2RlKTsKKwkJCQkgICZvcnBoYW5fZGlyX2JoKTsKIAlpZiAoc3RhdHVzIDwgMCkgewogCQltbG9nX2Vycm5vKHN0YXR1cyk7CiAJCWdvdG8gbGVhdmU7CkBAIC0xODI5LDggKzE4MDAsNyBAQAogCSAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylPQ0ZTMl9JKGlub2RlKS0+aXBfYmxrbm8sIG9zYi0+c2xvdF9udW0pOwogCiBsZWF2ZToKLQlpZiAob3JwaGFuX2Rpcl9iaCkKLQkJYnJlbHNlKG9ycGhhbl9kaXJfYmgpOworCWJyZWxzZShvcnBoYW5fZGlyX2JoKTsKIAogCW1sb2dfZXhpdChzdGF0dXMpOwogCXJldHVybiBzdGF0dXM7CkBAIC0xODk4LDggKzE4NjgsNyBAQAogCX0KIAogbGVhdmU6Ci0JaWYgKHRhcmdldF9kZV9iaCkKLQkJYnJlbHNlKHRhcmdldF9kZV9iaCk7CisJYnJlbHNlKHRhcmdldF9kZV9iaCk7CiAKIAltbG9nX2V4aXQoc3RhdHVzKTsKIAlyZXR1cm4gc3RhdHVzOwpAQCAtMTkxOCw0ICsxODg3LDggQEAKIAkuc2V0YXR0cgk9IG9jZnMyX3NldGF0dHIsCiAJLmdldGF0dHIJPSBvY2ZzMl9nZXRhdHRyLAogCS5wZXJtaXNzaW9uCT0gb2NmczJfcGVybWlzc2lvbiwKKwkuc2V0eGF0dHIJPSBnZW5lcmljX3NldHhhdHRyLAorCS5nZXR4YXR0cgk9IGdlbmVyaWNfZ2V0eGF0dHIsCisJLmxpc3R4YXR0cgk9IG9jZnMyX2xpc3R4YXR0ciwKKwkucmVtb3ZleGF0dHIJPSBnZW5lcmljX3JlbW92ZXhhdHRyLAogfTsKZGlmZiAtLWdpdCBhL2ZzL29jZnMyL29jZnMyLmggYi9mcy9vY2ZzMi9vY2ZzMi5oCmluZGV4IDdmNjI1ZjIuLmEyMWE0NjUgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL29jZnMyLmgKKysrIGIvZnMvb2NmczIvb2NmczIuaApAQCAtMzQsNyArMzQsMTIgQEAKICNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KICNpbmNsdWRlIDxsaW51eC9rcmVmLmg+CiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KLSNpbmNsdWRlIDxsaW51eC9qYmQuaD4KKyNpZm5kZWYgQ09ORklHX09DRlMyX0NPTVBBVF9KQkQKKyMgaW5jbHVkZSA8bGludXgvamJkMi5oPgorI2Vsc2UKKyMgaW5jbHVkZSA8bGludXgvamJkLmg+CisjIGluY2x1ZGUgIm9jZnMyX2piZF9jb21wYXQuaCIKKyNlbmRpZgogCiAvKiBGb3IgdW5pb24gb2NmczJfZGxtX2xrc2IgKi8KICNpbmNsdWRlICJzdGFja2dsdWUuaCIKQEAgLTE3MSw5ICsxNzYsMTMgQEAKIAogZW51bSBvY2ZzMl9sb2NhbF9hbGxvY19zdGF0ZQogewotCU9DRlMyX0xBX1VOVVNFRCA9IDAsCi0JT0NGUzJfTEFfRU5BQkxFRCwKLQlPQ0ZTMl9MQV9ESVNBQkxFRAorCU9DRlMyX0xBX1VOVVNFRCA9IDAsCS8qIExvY2FsIGFsbG9jIHdpbGwgbmV2ZXIgYmUgdXNlZCBmb3IKKwkJCQkgKiB0aGlzIG1vdW50cG9pbnQuICovCisJT0NGUzJfTEFfRU5BQkxFRCwJLyogTG9jYWwgYWxsb2MgaXMgaW4gdXNlLiAqLworCU9DRlMyX0xBX1RIUk9UVExFRCwJLyogTG9jYWwgYWxsb2MgaXMgaW4gdXNlLCBidXQgbnVtYmVyCisJCQkJICogb2YgYml0cyBoYXMgYmVlbiByZWR1Y2VkLiAqLworCU9DRlMyX0xBX0RJU0FCTEVECS8qIExvY2FsIGFsbG9jIGhhcyB0ZW1wb3JhcmlseSBiZWVuCisJCQkJICogZGlzYWJsZWQuICovCiB9OwogCiBlbnVtIG9jZnMyX21vdW50X29wdGlvbnMKQEAgLTE4NCw2ICsxOTMsOCBAQAogCU9DRlMyX01PVU5UX0VSUk9SU19QQU5JQyA9IDEgPDwgMywgLyogUGFuaWMgb24gZXJyb3JzICovCiAJT0NGUzJfTU9VTlRfREFUQV9XUklURUJBQ0sgPSAxIDw8IDQsIC8qIE5vIGRhdGEgb3JkZXJpbmcgKi8KIAlPQ0ZTMl9NT1VOVF9MT0NBTEZMT0NLUyA9IDEgPDwgNSwgLyogTm8gY2x1c3RlciBhd2FyZSB1c2VyIGZpbGUgbG9ja3MgKi8KKwlPQ0ZTMl9NT1VOVF9OT1VTRVJYQVRUUiA9IDEgPDwgNiwgLyogTm8gdXNlciB4YXR0ciAqLworCU9DRlMyX01PVU5UX0lOT0RFNjQgPSAxIDw8IDcsCS8qIEFsbG93IGlub2RlIG51bWJlcnMgPiAyXjMyICovCiB9OwogCiAjZGVmaW5lIE9DRlMyX09TQl9TT0ZUX1JPCTB4MDAwMQpAQCAtMjE0LDYgKzIyNSw3IEBACiAJdTMyIGJpdG1hcF9jcGc7CiAJdTggKnV1aWQ7CiAJY2hhciAqdXVpZF9zdHI7CisJdTMyIHV1aWRfaGFzaDsKIAl1OCAqdm9sX2xhYmVsOwogCXU2NCBmaXJzdF9jbHVzdGVyX2dyb3VwX2Jsa25vOwogCXUzMiBmc19nZW5lcmF0aW9uOwpAQCAtMjQxLDYgKzI1Myw3IEBACiAJaW50IHNfc2VjdHNpemVfYml0czsKIAlpbnQgc19jbHVzdGVyc2l6ZTsKIAlpbnQgc19jbHVzdGVyc2l6ZV9iaXRzOworCXVuc2lnbmVkIGludCBzX3hhdHRyX2lubGluZV9zaXplOwogCiAJYXRvbWljX3Qgdm9sX3N0YXRlOwogCXN0cnVjdCBtdXRleCByZWNvdmVyeV9sb2NrOwpAQCAtMjUyLDExICsyNjUsMjcgQEAKIAlzdHJ1Y3Qgb2NmczJfam91cm5hbCAqam91cm5hbDsKIAl1bnNpZ25lZCBsb25nIG9zYl9jb21taXRfaW50ZXJ2YWw7CiAKLQlpbnQgbG9jYWxfYWxsb2Nfc2l6ZTsKLQllbnVtIG9jZnMyX2xvY2FsX2FsbG9jX3N0YXRlIGxvY2FsX2FsbG9jX3N0YXRlOworCXN0cnVjdCBkZWxheWVkX3dvcmsJCWxhX2VuYWJsZV93cTsKKworCS8qCisJICogTXVzdCBob2xkIGxvY2FsIGFsbG9jIGlfbXV0ZXggYW5kIG9zYi0+b3NiX2xvY2sgdG8gY2hhbmdlCisJICogbG9jYWxfYWxsb2NfYml0cy4gUmVhZHMgY2FuIGJlIGRvbmUgdW5kZXIgZWl0aGVyIGxvY2suCisJICovCisJdW5zaWduZWQgaW50IGxvY2FsX2FsbG9jX2JpdHM7CisJdW5zaWduZWQgaW50IGxvY2FsX2FsbG9jX2RlZmF1bHRfYml0czsKKworCWVudW0gb2NmczJfbG9jYWxfYWxsb2Nfc3RhdGUgbG9jYWxfYWxsb2Nfc3RhdGU7IC8qIHByb3RlY3RlZAorCQkJCQkJCSAqIGJ5IG9zYl9sb2NrICovCisKIAlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmxvY2FsX2FsbG9jX2JoOworCiAJdTY0IGxhX2xhc3RfZ2Q7CiAKKyNpZmRlZiBDT05GSUdfT0NGUzJfRlNfU1RBVFMKKwlzdHJ1Y3QgZGVudHJ5ICpsb2NhbF9hbGxvY19kZWJ1ZzsKKwljaGFyICpsb2NhbF9hbGxvY19kZWJ1Z19idWY7CisjZW5kaWYKKwogCS8qIE5leHQgdHdvIGZpZWxkcyBhcmUgZm9yIGxvY2FsIG5vZGUgc2xvdCByZWNvdmVyeSBkdXJpbmcKIAkgKiBtb3VudC4gKi8KIAlpbnQgZGlydHk7CkBAIC0zNDAsNiArMzY5LDEzIEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbmxpbmUgaW50IG9jZnMyX3N1cHBvcnRzX3hhdHRyKHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiKQoreworCWlmIChvc2ItPnNfZmVhdHVyZV9pbmNvbXBhdCAmIE9DRlMyX0ZFQVRVUkVfSU5DT01QQVRfWEFUVFIpCisJCXJldHVybiAxOworCXJldHVybiAwOworfQorCiAvKiBzZXQgLyBjbGVhciBmdW5jdGlvbnMgYmVjYXVzZSBjbHVzdGVyIGV2ZW50cyBjYW4gbWFrZSB0aGVzZSBoYXBwZW4KICAqIGluIHBhcmFsbGVsIHNvIHdlIHdhbnQgdGhlIHRyYW5zaXRpb25zIHRvIGJlIGF0b21pYy4gdGhpcyBhbHNvCiAgKiBtZWFucyB0aGF0IGFueSBmdXR1cmUgZmxhZ3Mgb3NiX2ZsYWdzIG11c3QgYmUgcHJvdGVjdGVkIGJ5IHNwaW5sb2NrCkBAIC01NTQsNiArNTkwLDE0IEBACiAJcmV0dXJuIHBhZ2VzX3Blcl9jbHVzdGVyOwogfQogCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBvY2ZzMl9tZWdhYnl0ZXNfdG9fY2x1c3RlcnMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwKKwkJCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgbWVncykKK3sKKwlCVUlMRF9CVUdfT04oT0NGUzJfTUFYX0NMVVNURVJTSVpFID4gMTA0ODU3Nik7CisKKwlyZXR1cm4gbWVncyA8PCAoMjAgLSBPQ0ZTMl9TQihzYiktPnNfY2x1c3RlcnNpemVfYml0cyk7Cit9CisKIHN0YXRpYyBpbmxpbmUgdm9pZCBvY2ZzMl9pbml0X2lub2RlX3N0ZWFsX3Nsb3Qoc3RydWN0IG9jZnMyX3N1cGVyICpvc2IpCiB7CiAJc3Bpbl9sb2NrKCZvc2ItPm9zYl9sb2NrKTsKZGlmZiAtLWdpdCBhL2ZzL29jZnMyL29jZnMyX2ZzLmggYi9mcy9vY2ZzMi9vY2ZzMl9mcy5oCmluZGV4IDRmNjE5ODUuLmYyNGNlM2QgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL29jZnMyX2ZzLmgKKysrIGIvZnMvb2NmczIvb2NmczJfZnMuaApAQCAtNjQsNiArNjQsNyBAQAogI2RlZmluZSBPQ0ZTMl9JTk9ERV9TSUdOQVRVUkUJCSJJTk9ERTAxIgogI2RlZmluZSBPQ0ZTMl9FWFRFTlRfQkxPQ0tfU0lHTkFUVVJFCSJFWEJMSzAxIgogI2RlZmluZSBPQ0ZTMl9HUk9VUF9ERVNDX1NJR05BVFVSRSAgICAgICJHUk9VUDAxIgorI2RlZmluZSBPQ0ZTMl9YQVRUUl9CTE9DS19TSUdOQVRVUkUJIlhBVFRSMDEiCiAKIC8qIENvbXBhdGliaWxpdHkgZmxhZ3MgKi8KICNkZWZpbmUgT0NGUzJfSEFTX0NPTVBBVF9GRUFUVVJFKHNiLG1hc2spCQkJXApAQCAtOTAsNyArOTEsOCBAQAogCQkJCQkgfCBPQ0ZTMl9GRUFUVVJFX0lOQ09NUEFUX1NQQVJTRV9BTExPQyBcCiAJCQkJCSB8IE9DRlMyX0ZFQVRVUkVfSU5DT01QQVRfSU5MSU5FX0RBVEEgXAogCQkJCQkgfCBPQ0ZTMl9GRUFUVVJFX0lOQ09NUEFUX0VYVEVOREVEX1NMT1RfTUFQIFwKLQkJCQkJIHwgT0NGUzJfRkVBVFVSRV9JTkNPTVBBVF9VU0VSU1BBQ0VfU1RBQ0spCisJCQkJCSB8IE9DRlMyX0ZFQVRVUkVfSU5DT01QQVRfVVNFUlNQQUNFX1NUQUNLIFwKKwkJCQkJIHwgT0NGUzJfRkVBVFVSRV9JTkNPTVBBVF9YQVRUUikKICNkZWZpbmUgT0NGUzJfRkVBVFVSRV9ST19DT01QQVRfU1VQUAlPQ0ZTMl9GRUFUVVJFX1JPX0NPTVBBVF9VTldSSVRURU4KIAogLyoKQEAgLTEyNywxMCArMTI5LDYgQEAKIC8qIFN1cHBvcnQgZm9yIGRhdGEgcGFja2VkIGludG8gaW5vZGUgYmxvY2tzICovCiAjZGVmaW5lIE9DRlMyX0ZFQVRVUkVfSU5DT01QQVRfSU5MSU5FX0RBVEEJMHgwMDQwCiAKLS8qIFN1cHBvcnQgZm9yIHRoZSBleHRlbmRlZCBzbG90IG1hcCAqLwotI2RlZmluZSBPQ0ZTMl9GRUFUVVJFX0lOQ09NUEFUX0VYVEVOREVEX1NMT1RfTUFQIDB4MTAwCi0KLQogLyoKICAqIFN1cHBvcnQgZm9yIGFsdGVybmF0ZSwgdXNlcnNwYWNlIGNsdXN0ZXIgc3RhY2tzLiAgSWYgc2V0LCB0aGUgc3VwZXJibG9jawogICogZmllbGQgc19jbHVzdGVyX2luZm8gY29udGFpbnMgYSB0YWcgZm9yIHRoZSBhbHRlcm5hdGUgc3RhY2sgaW4gdXNlIGFzCkBAIC0xNDIsNiArMTQwLDEyIEBACiAgKi8KICNkZWZpbmUgT0NGUzJfRkVBVFVSRV9JTkNPTVBBVF9VU0VSU1BBQ0VfU1RBQ0sJMHgwMDgwCiAKKy8qIFN1cHBvcnQgZm9yIHRoZSBleHRlbmRlZCBzbG90IG1hcCAqLworI2RlZmluZSBPQ0ZTMl9GRUFUVVJFX0lOQ09NUEFUX0VYVEVOREVEX1NMT1RfTUFQIDB4MTAwCisKKy8qIFN1cHBvcnQgZm9yIGV4dGVuZGVkIGF0dHJpYnV0ZXMgKi8KKyNkZWZpbmUgT0NGUzJfRkVBVFVSRV9JTkNPTVBBVF9YQVRUUgkJMHgwMjAwCisKIC8qCiAgKiBiYWNrdXAgc3VwZXJibG9jayBmbGFnIGlzIHVzZWQgdG8gaW5kaWNhdGUgdGhhdCB0aGlzIHZvbHVtZQogICogaGFzIGJhY2t1cCBzdXBlcmJsb2Nrcy4KQEAgLTI5OSw2ICszMDMsMTIgQEAKICAqLwogI2RlZmluZSBPQ0ZTMl9ERUZBVUxUX0xPQ0FMX0FMTE9DX1NJWkUJOAogCisvKgorICogSW5saW5lIGV4dGVuZGVkIGF0dHJpYnV0ZSBzaXplIChpbiBieXRlcykKKyAqIFRoZSB2YWx1ZSBjaG9zZW4gc2hvdWxkIGJlIGFsaWduZWQgdG8gMTYgYnl0ZSBib3VuZGFyaWVzLgorICovCisjZGVmaW5lIE9DRlMyX01JTl9YQVRUUl9JTkxJTkVfU0laRSAgICAgMjU2CisKIHN0cnVjdCBvY2ZzMl9zeXN0ZW1faW5vZGVfaW5mbyB7CiAJY2hhcgkqc2lfbmFtZTsKIAlpbnQJc2lfaWZsYWdzOwpAQCAtNTYzLDcgKzU3Myw3IEBACiAvKjQwKi8JX19sZTE2IHNfbWF4X3Nsb3RzOwkJLyogTWF4IG51bWJlciBvZiBzaW11bHRhbmVvdXMgbW91bnRzCiAJCQkJCSAgIGJlZm9yZSB0dW5lZnMgcmVxdWlyZWQgKi8KIAlfX2xlMTYgc190dW5lZnNfZmxhZzsKLQlfX2xlMzIgc19yZXNlcnZlZDE7CisJX19sZTMyIHNfdXVpZF9oYXNoOwkJLyogaGFzaCB2YWx1ZSBvZiB1dWlkICovCiAJX19sZTY0IHNfZmlyc3RfY2x1c3Rlcl9ncm91cDsJLyogQmxvY2sgb2Zmc2V0IG9mIDFzdCBjbHVzdGVyCiAJCQkJCSAqIGdyb3VwIGhlYWRlciAqLwogLyo1MCovCV9fdTggIHNfbGFiZWxbT0NGUzJfTUFYX1ZPTF9MQUJFTF9MRU5dOwkvKiBMYWJlbCBmb3IgbW91bnRpbmcsIGV0Yy4gKi8KQEAgLTU3MSw3ICs1ODEsMTEgQEAKIC8qQTAqLyAgc3RydWN0IG9jZnMyX2NsdXN0ZXJfaW5mbyBzX2NsdXN0ZXJfaW5mbzsgLyogU2VsZWN0ZWQgdXNlcnNwYWNlCiAJCQkJCQkgICAgIHN0YWNrLiAgT25seSB2YWxpZAogCQkJCQkJICAgICB3aXRoIElOQ09NUEFUIGZsYWcuICovCi0vKkI4Ki8gIF9fbGU2NCBzX3Jlc2VydmVkMlsxN107CQkvKiBGaWxsIG91dCBzdXBlcmJsb2NrICovCisvKkI4Ki8JX19sZTE2IHNfeGF0dHJfaW5saW5lX3NpemU7CS8qIGV4dGVuZGVkIGF0dHJpYnV0ZSBpbmxpbmUgc2l6ZQorCQkJCQkgICBmb3IgdGhpcyBmcyovCisJX19sZTE2IHNfcmVzZXJ2ZWQwOworCV9fbGUzMiBzX3Jlc2VydmVkMTsKKy8qQzAqLyAgX19sZTY0IHNfcmVzZXJ2ZWQyWzE2XTsJCS8qIEZpbGwgb3V0IHN1cGVyYmxvY2sgKi8KIC8qMTQwKi8KIAogCS8qCkBAIC02MjEsNyArNjM1LDggQEAKIAkJCQkJICAgYmVsb25ncyB0byAqLwogCV9fbGUxNiBpX3N1YmFsbG9jX2JpdDsJCS8qIEJpdCBvZmZzZXQgaW4gc3ViYWxsb2NhdG9yCiAJCQkJCSAgIGJsb2NrIGdyb3VwICovCi0vKjEwKi8JX19sZTMyIGlfcmVzZXJ2ZWQwOworLyoxMCovCV9fbGUxNiBpX3Jlc2VydmVkMDsKKwlfX2xlMTYgaV94YXR0cl9pbmxpbmVfc2l6ZTsKIAlfX2xlMzIgaV9jbHVzdGVyczsJCS8qIENsdXN0ZXIgY291bnQgKi8KIAlfX2xlMzIgaV91aWQ7CQkJLyogT3duZXIgVUlEICovCiAJX19sZTMyIGlfZ2lkOwkJCS8qIE93bmluZyBHSUQgKi8KQEAgLTY0MCwxMSArNjU1LDEyIEBACiAJX19sZTMyIGlfYXRpbWVfbnNlYzsKIAlfX2xlMzIgaV9jdGltZV9uc2VjOwogCV9fbGUzMiBpX210aW1lX25zZWM7Ci0JX19sZTMyIGlfYXR0cjsKKy8qNzAqLwlfX2xlMzIgaV9hdHRyOwogCV9fbGUxNiBpX29ycGhhbmVkX3Nsb3Q7CQkvKiBPbmx5IHZhbGlkIHdoZW4gT0NGUzJfT1JQSEFORURfRkwKIAkJCQkJICAgd2FzIHNldCBpbiBpX2ZsYWdzICovCiAJX19sZTE2IGlfZHluX2ZlYXR1cmVzOwotLyo3MCovCV9fbGU2NCBpX3Jlc2VydmVkMls4XTsKKwlfX2xlNjQgaV94YXR0cl9sb2M7CisvKjgwKi8JX19sZTY0IGlfcmVzZXJ2ZWQyWzddOwogLypCOCovCXVuaW9uIHsKIAkJX19sZTY0IGlfcGFkMTsJCS8qIEdlbmVyaWMgd2F5IHRvIHJlZmVyIHRvIHRoaXMKIAkJCQkJICAgNjRiaXQgdW5pb24gKi8KQEAgLTcxNSw2ICs3MzEsMTM2IEBACiAvKjQwKi8JX191OCAgICBiZ19iaXRtYXBbMF07CiB9OwogCisvKgorICogT24gZGlzayBleHRlbmRlZCBhdHRyaWJ1dGUgc3RydWN0dXJlIGZvciBPQ0ZTMi4KKyAqLworCisvKgorICogb2NmczJfeGF0dHJfZW50cnkgaW5kaWNhdGVzIG9uZSBleHRlbmQgYXR0cmlidXRlLgorICoKKyAqIE5vdGUgdGhhdCBpdCBjYW4gYmUgc3RvcmVkIGluIGlub2RlLCBvbmUgYmxvY2sgb3Igb25lIHhhdHRyIGJ1Y2tldC4KKyAqLworc3RydWN0IG9jZnMyX3hhdHRyX2VudHJ5IHsKKwlfX2xlMzIJeGVfbmFtZV9oYXNoOyAgICAvKiBoYXNoIHZhbHVlIG9mIHhhdHRyIHByZWZpeCtzdWZmaXguICovCisJX19sZTE2CXhlX25hbWVfb2Zmc2V0OyAgLyogYnl0ZSBvZmZzZXQgZnJvbSB0aGUgMXN0IGV0bnJ5IGluIHRoZSBsb2NhbAorCQkJCSAgICBsb2NhbCB4YXR0ciBzdG9yYWdlKGlub2RlLCB4YXR0ciBibG9jayBvcgorCQkJCSAgICB4YXR0ciBidWNrZXQpLiAqLworCV9fdTgJeGVfbmFtZV9sZW47CSAvKiB4YXR0ciBuYW1lIGxlbiwgZG9lcyd0IGluY2x1ZGUgcHJlZml4LiAqLworCV9fdTgJeGVfdHlwZTsgICAgICAgICAvKiB0aGUgbG93IDcgYml0cyBpbmRpY2F0ZXMgdGhlIG5hbWUgcHJlZml4J3MKKwkJCQkgICogdHlwZSBhbmQgdGhlIGhpZ2hlc3QgMSBiaXRzIGluZGljYXRlIHdoZXRoZXIKKwkJCQkgICogdGhlIEVBIGlzIHN0b3JlZCBpbiB0aGUgbG9jYWwgc3RvcmFnZS4gKi8KKwlfX2xlNjQJeGVfdmFsdWVfc2l6ZTsJIC8qIHJlYWwgeGF0dHIgdmFsdWUgbGVuZ3RoLiAqLworfTsKKworLyoKKyAqIE9uIGRpc2sgc3RydWN0dXJlIGZvciB4YXR0ciBoZWFkZXIuCisgKgorICogT25lIG9jZnMyX3hhdHRyX2hlYWRlciBkZXNjcmliZXMgaG93IG1hbnkgb2NmczJfeGF0dHJfZW50cnkgcmVjb3JkcyBpbgorICogdGhlIGxvY2FsIHhhdHRyIHN0b3JhZ2UuCisgKi8KK3N0cnVjdCBvY2ZzMl94YXR0cl9oZWFkZXIgeworCV9fbGUxNgl4aF9jb3VudDsgICAgICAgICAgICAgICAgICAgICAgIC8qIGNvbnRhaW5zIHRoZSBjb3VudCBvZiBob3cKKwkJCQkJCSAgIG1hbnkgcmVjb3JkcyBhcmUgaW4gdGhlCisJCQkJCQkgICBsb2NhbCB4YXR0ciBzdG9yYWdlLiAqLworCV9fbGUxNgl4aF9mcmVlX3N0YXJ0OyAgICAgICAgICAgICAgICAgIC8qIGN1cnJlbnQgb2Zmc2V0IGZvciBzdG9yaW5nCisJCQkJCQkgICB4YXR0ci4gKi8KKwlfX2xlMTYJeGhfbmFtZV92YWx1ZV9sZW47ICAgICAgICAgICAgICAvKiB0b3RhbCBsZW5ndGggb2YgbmFtZS92YWx1ZQorCQkJCQkJICAgbGVuZ3RoIGluIHRoaXMgYnVja2V0LiAqLworCV9fbGUxNgl4aF9udW1fYnVja2V0czsgICAgICAgICAgICAgICAgIC8qIGJ1Y2tldCBudW1zIGluIG9uZSBleHRlbnQKKwkJCQkJCSAgIHJlY29yZCwgb25seSB2YWxpZCBpbiB0aGUKKwkJCQkJCSAgIGZpcnN0IGJ1Y2tldC4gKi8KKwlfX2xlNjQgIHhoX2NzdW07CisJc3RydWN0IG9jZnMyX3hhdHRyX2VudHJ5IHhoX2VudHJpZXNbMF07IC8qIHhhdHRyIGVudHJ5IGxpc3QuICovCit9OworCisvKgorICogT24gZGlzayBzdHJ1Y3R1cmUgZm9yIHhhdHRyIHZhbHVlIHJvb3QuCisgKgorICogSXQgaXMgdXNlZCB3aGVuIG9uZSBleHRlbmRlZCBhdHRyaWJ1dGUncyBzaXplIGlzIGxhcmdlciwgYW5kIHdlIHdpbGwgc2F2ZSBpdAorICogaW4gYW4gb3V0c2lkZSBjbHVzdGVyLiBJdCB3aWxsIHN0b3JlZCBpbiBhIGItdHJlZSBsaWtlIGZpbGUgY29udGVudC4KKyAqLworc3RydWN0IG9jZnMyX3hhdHRyX3ZhbHVlX3Jvb3QgeworLyowMCovCV9fbGUzMgl4cl9jbHVzdGVyczsgICAgICAgICAgICAgIC8qIGNsdXN0ZXJzIGNvdmVyZWQgYnkgeGF0dHIgdmFsdWUuICovCisJX19sZTMyCXhyX3Jlc2VydmVkMDsKKwlfX2xlNjQJeHJfbGFzdF9lYl9ibGs7ICAgICAgICAgICAvKiBQb2ludGVyIHRvIGxhc3QgZXh0ZW50IGJsb2NrICovCisvKjEwKi8Jc3RydWN0IG9jZnMyX2V4dGVudF9saXN0IHhyX2xpc3Q7IC8qIEV4dGVudCByZWNvcmQgbGlzdCAqLworfTsKKworLyoKKyAqIE9uIGRpc2sgc3RydWN0dXJlIGZvciB4YXR0ciB0cmVlIHJvb3QuCisgKgorICogSXQgaXMgdXNlZCB3aGVuIHRoZXJlIGFyZSB0b28gbWFueSBleHRlbmRlZCBhdHRyaWJ1dGVzIGZvciBvbmUgZmlsZS4gVGhlc2UKKyAqIGF0dHJpYnV0ZXMgd2lsbCBiZSBvcmdhbml6ZWQgYW5kIHN0b3JlZCBpbiBhbiBpbmRleGVkLWJ0cmVlLgorICovCitzdHJ1Y3Qgb2NmczJfeGF0dHJfdHJlZV9yb290IHsKKy8qMDAqLwlfX2xlMzIJeHRfY2x1c3RlcnM7ICAgICAgICAgICAgICAvKiBjbHVzdGVycyBjb3ZlcmVkIGJ5IHhhdHRyLiAqLworCV9fbGUzMgl4dF9yZXNlcnZlZDA7CisJX19sZTY0CXh0X2xhc3RfZWJfYmxrOyAgICAgICAgICAgLyogUG9pbnRlciB0byBsYXN0IGV4dGVudCBibG9jayAqLworLyoxMCovCXN0cnVjdCBvY2ZzMl9leHRlbnRfbGlzdCB4dF9saXN0OyAvKiBFeHRlbnQgcmVjb3JkIGxpc3QgKi8KK307CisKKyNkZWZpbmUgT0NGUzJfWEFUVFJfSU5ERVhFRAkweDEKKyNkZWZpbmUgT0NGUzJfSEFTSF9TSElGVAk1CisjZGVmaW5lIE9DRlMyX1hBVFRSX1JPVU5ECTMKKyNkZWZpbmUgT0NGUzJfWEFUVFJfU0laRShzaXplKQkoKChzaXplKSArIE9DRlMyX1hBVFRSX1JPVU5EKSAmIFwKKwkJCQl+KE9DRlMyX1hBVFRSX1JPVU5EKSkKKworI2RlZmluZSBPQ0ZTMl9YQVRUUl9CVUNLRVRfU0laRQkJCTQwOTYKKyNkZWZpbmUgT0NGUzJfWEFUVFJfTUFYX0JMT0NLU19QRVJfQlVDS0VUIAkoT0NGUzJfWEFUVFJfQlVDS0VUX1NJWkUgXAorCQkJCQkJIC8gT0NGUzJfTUlOX0JMT0NLU0laRSkKKworLyoKKyAqIE9uIGRpc2sgc3RydWN0dXJlIGZvciB4YXR0ciBibG9jay4KKyAqLworc3RydWN0IG9jZnMyX3hhdHRyX2Jsb2NrIHsKKy8qMDAqLwlfX3U4CXhiX3NpZ25hdHVyZVs4XTsgICAgIC8qIFNpZ25hdHVyZSBmb3IgdmVyaWZpY2F0aW9uICovCisJX19sZTE2CXhiX3N1YmFsbG9jX3Nsb3Q7ICAgIC8qIFNsb3Qgc3ViYWxsb2NhdG9yIHRoaXMKKwkJCQkJYmxvY2sgYmVsb25ncyB0by4gKi8KKwlfX2xlMTYJeGJfc3ViYWxsb2NfYml0OyAgICAgLyogQml0IG9mZnNldCBpbiBzdWJhbGxvY2F0b3IKKwkJCQkJYmxvY2sgZ3JvdXAgKi8KKwlfX2xlMzIJeGJfZnNfZ2VuZXJhdGlvbjsgICAgLyogTXVzdCBtYXRjaCBzdXBlciBibG9jayAqLworLyoxMCovCV9fbGU2NAl4Yl9ibGtubzsgICAgICAgICAgICAvKiBPZmZzZXQgb24gZGlzaywgaW4gYmxvY2tzICovCisJX19sZTY0CXhiX2NzdW07CisvKjIwKi8JX19sZTE2CXhiX2ZsYWdzOyAgICAgICAgICAgIC8qIEluZGljYXRlcyB3aGV0aGVyIHRoaXMgYmxvY2sgY29udGFpbnMKKwkJCQkJcmVhbCB4YXR0ciBvciBhIHhhdHRyIHRyZWUuICovCisJX19sZTE2CXhiX3Jlc2VydmVkMDsKKwlfX2xlMzIgIHhiX3Jlc2VydmVkMTsKKwlfX2xlNjQJeGJfcmVzZXJ2ZWQyOworLyozMCovCXVuaW9uIHsKKwkJc3RydWN0IG9jZnMyX3hhdHRyX2hlYWRlciB4Yl9oZWFkZXI7IC8qIHhhdHRyIGhlYWRlciBpZiB0aGlzCisJCQkJCQkJYmxvY2sgY29udGFpbnMgeGF0dHIgKi8KKwkJc3RydWN0IG9jZnMyX3hhdHRyX3RyZWVfcm9vdCB4Yl9yb290Oy8qIHhhdHRyIHRyZWUgcm9vdCBpZiB0aGlzCisJCQkJCQkJYmxvY2sgY290YWlucyB4YXR0cgorCQkJCQkJCXRyZWUuICovCisJfSB4Yl9hdHRyczsKK307CisKKyNkZWZpbmUgT0NGUzJfWEFUVFJfRU5UUllfTE9DQUwJCTB4ODAKKyNkZWZpbmUgT0NGUzJfWEFUVFJfVFlQRV9NQVNLCQkweDdGCitzdGF0aWMgaW5saW5lIHZvaWQgb2NmczJfeGF0dHJfc2V0X2xvY2FsKHN0cnVjdCBvY2ZzMl94YXR0cl9lbnRyeSAqeGUsCisJCQkJCSBpbnQgbG9jYWwpCit7CisJaWYgKGxvY2FsKQorCQl4ZS0+eGVfdHlwZSB8PSBPQ0ZTMl9YQVRUUl9FTlRSWV9MT0NBTDsKKwllbHNlCisJCXhlLT54ZV90eXBlICY9IH5PQ0ZTMl9YQVRUUl9FTlRSWV9MT0NBTDsKK30KKworc3RhdGljIGlubGluZSBpbnQgb2NmczJfeGF0dHJfaXNfbG9jYWwoc3RydWN0IG9jZnMyX3hhdHRyX2VudHJ5ICp4ZSkKK3sKKwlyZXR1cm4geGUtPnhlX3R5cGUgJiBPQ0ZTMl9YQVRUUl9FTlRSWV9MT0NBTDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIG9jZnMyX3hhdHRyX3NldF90eXBlKHN0cnVjdCBvY2ZzMl94YXR0cl9lbnRyeSAqeGUsIGludCB0eXBlKQoreworCXhlLT54ZV90eXBlIHw9IHR5cGUgJiBPQ0ZTMl9YQVRUUl9UWVBFX01BU0s7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IG9jZnMyX3hhdHRyX2dldF90eXBlKHN0cnVjdCBvY2ZzMl94YXR0cl9lbnRyeSAqeGUpCit7CisJcmV0dXJuIHhlLT54ZV90eXBlICYgT0NGUzJfWEFUVFJfVFlQRV9NQVNLOworfQorCiAjaWZkZWYgX19LRVJORUxfXwogc3RhdGljIGlubGluZSBpbnQgb2NmczJfZmFzdF9zeW1saW5rX2NoYXJzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCiB7CkBAIC03MjgsNiArODc0LDIwIEBACiAJCW9mZnNldG9mKHN0cnVjdCBvY2ZzMl9kaW5vZGUsIGlkMi5pX2RhdGEuaWRfZGF0YSk7CiB9CiAKK3N0YXRpYyBpbmxpbmUgaW50IG9jZnMyX21heF9pbmxpbmVfZGF0YV93aXRoX3hhdHRyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsCisJCQkJCQkgICBzdHJ1Y3Qgb2NmczJfZGlub2RlICpkaSkKK3sKKwl1bnNpZ25lZCBpbnQgeGF0dHJzaXplID0gbGUxNl90b19jcHUoZGktPmlfeGF0dHJfaW5saW5lX3NpemUpOworCisJaWYgKGxlMTZfdG9fY3B1KGRpLT5pX2R5bl9mZWF0dXJlcykgJiBPQ0ZTMl9JTkxJTkVfWEFUVFJfRkwpCisJCXJldHVybiBzYi0+c19ibG9ja3NpemUgLQorCQkJb2Zmc2V0b2Yoc3RydWN0IG9jZnMyX2Rpbm9kZSwgaWQyLmlfZGF0YS5pZF9kYXRhKSAtCisJCQl4YXR0cnNpemU7CisJZWxzZQorCQlyZXR1cm4gc2ItPnNfYmxvY2tzaXplIC0KKwkJCW9mZnNldG9mKHN0cnVjdCBvY2ZzMl9kaW5vZGUsIGlkMi5pX2RhdGEuaWRfZGF0YSk7Cit9CisKIHN0YXRpYyBpbmxpbmUgaW50IG9jZnMyX2V4dGVudF9yZWNzX3Blcl9pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQogewogCWludCBzaXplOwpAQCAtNzM4LDYgKzg5OCwyNCBAQAogCXJldHVybiBzaXplIC8gc2l6ZW9mKHN0cnVjdCBvY2ZzMl9leHRlbnRfcmVjKTsKIH0KIAorc3RhdGljIGlubGluZSBpbnQgb2NmczJfZXh0ZW50X3JlY3NfcGVyX2lub2RlX3dpdGhfeGF0dHIoCisJCQkJCQlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLAorCQkJCQkJc3RydWN0IG9jZnMyX2Rpbm9kZSAqZGkpCit7CisJaW50IHNpemU7CisJdW5zaWduZWQgaW50IHhhdHRyc2l6ZSA9IGxlMTZfdG9fY3B1KGRpLT5pX3hhdHRyX2lubGluZV9zaXplKTsKKworCWlmIChsZTE2X3RvX2NwdShkaS0+aV9keW5fZmVhdHVyZXMpICYgT0NGUzJfSU5MSU5FX1hBVFRSX0ZMKQorCQlzaXplID0gc2ItPnNfYmxvY2tzaXplIC0KKwkJCW9mZnNldG9mKHN0cnVjdCBvY2ZzMl9kaW5vZGUsIGlkMi5pX2xpc3QubF9yZWNzKSAtCisJCQl4YXR0cnNpemU7CisJZWxzZQorCQlzaXplID0gc2ItPnNfYmxvY2tzaXplIC0KKwkJCW9mZnNldG9mKHN0cnVjdCBvY2ZzMl9kaW5vZGUsIGlkMi5pX2xpc3QubF9yZWNzKTsKKworCXJldHVybiBzaXplIC8gc2l6ZW9mKHN0cnVjdCBvY2ZzMl9leHRlbnRfcmVjKTsKK30KKwogc3RhdGljIGlubGluZSBpbnQgb2NmczJfY2hhaW5fcmVjc19wZXJfaW5vZGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKIHsKIAlpbnQgc2l6ZTsKQEAgLTgwMSw2ICs5NzksMTcgQEAKIAlyZXR1cm4gMDsKIAogfQorCitzdGF0aWMgaW5saW5lIHUxNiBvY2ZzMl94YXR0cl9yZWNzX3Blcl94YihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQoreworCWludCBzaXplOworCisJc2l6ZSA9IHNiLT5zX2Jsb2Nrc2l6ZSAtCisJCW9mZnNldG9mKHN0cnVjdCBvY2ZzMl94YXR0cl9ibG9jaywKKwkJCSB4Yl9hdHRycy54Yl9yb290Lnh0X2xpc3QubF9yZWNzKTsKKworCXJldHVybiBzaXplIC8gc2l6ZW9mKHN0cnVjdCBvY2ZzMl9leHRlbnRfcmVjKTsKK30KICNlbHNlCiBzdGF0aWMgaW5saW5lIGludCBvY2ZzMl9mYXN0X3N5bWxpbmtfY2hhcnMoaW50IGJsb2Nrc2l6ZSkKIHsKQEAgLTg4NCw2ICsxMDczLDE3IEBACiAKIAlyZXR1cm4gMDsKIH0KKworc3RhdGljIGlubGluZSBpbnQgb2NmczJfeGF0dHJfcmVjc19wZXJfeGIoaW50IGJsb2Nrc2l6ZSkKK3sKKwlpbnQgc2l6ZTsKKworCXNpemUgPSBibG9ja3NpemUgLQorCQlvZmZzZXRvZihzdHJ1Y3Qgb2NmczJfeGF0dHJfYmxvY2ssCisJCQkgeGJfYXR0cnMueGJfcm9vdC54dF9saXN0LmxfcmVjcyk7CisKKwlyZXR1cm4gc2l6ZSAvIHNpemVvZihzdHJ1Y3Qgb2NmczJfZXh0ZW50X3JlYyk7Cit9CiAjZW5kaWYgIC8qIF9fS0VSTkVMX18gKi8KIAogCmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9vY2ZzMl9qYmRfY29tcGF0LmggYi9mcy9vY2ZzMi9vY2ZzMl9qYmRfY29tcGF0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjkxYzc4ZgotLS0gL2Rldi9udWxsCisrKyBiL2ZzL29jZnMyL29jZnMyX2piZF9jb21wYXQuaApAQCAtMCwwICsxLDgyIEBACisvKiAtKi0gbW9kZTogYzsgYy1iYXNpYy1vZmZzZXQ6IDg7IC0qLQorICogdmltOiBub2V4cGFuZHRhYiBzdz04IHRzPTggc3RzPTA6CisgKgorICogb2NmczJfamJkX2NvbXBhdC5oCisgKgorICogQ29tcGF0aWJpbGl0eSBkZWZpbmVzIGZvciBKQkQuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA4IE9yYWNsZS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpZm5kZWYgT0NGUzJfSkJEX0NPTVBBVF9ICisjZGVmaW5lIE9DRlMyX0pCRF9DT01QQVRfSAorCisjaWZuZGVmIENPTkZJR19PQ0ZTMl9DT01QQVRfSkJECisjIGVycm9yIFNob3VsZCBub3QgaGF2ZSBiZWVuIGluY2x1ZGVkCisjZW5kaWYKKworc3RydWN0IGpiZDJfaW5vZGUgeworCXVuc2lnbmVkIGludCBkdW1teTsKK307CisKKyNkZWZpbmUgSkJEMl9CQVJSSUVSCQkJSkZTX0JBUlJJRVIKKyNkZWZpbmUgSkJEMl9ERUZBVUxUX01BWF9DT01NSVRfQUdFCUpCRF9ERUZBVUxUX01BWF9DT01NSVRfQUdFCisKKyNkZWZpbmUgamJkMl9qb3VybmFsX2Fja19lcnIJCQlqb3VybmFsX2Fja19lcnIKKyNkZWZpbmUgamJkMl9qb3VybmFsX2NsZWFyX2VycgkJCWpvdXJuYWxfY2xlYXJfZXJyCisjZGVmaW5lIGpiZDJfam91cm5hbF9kZXN0cm95CQkJam91cm5hbF9kZXN0cm95CisjZGVmaW5lIGpiZDJfam91cm5hbF9kaXJ0eV9tZXRhZGF0YQkJam91cm5hbF9kaXJ0eV9tZXRhZGF0YQorI2RlZmluZSBqYmQyX2pvdXJuYWxfZXJybm8JCQlqb3VybmFsX2Vycm5vCisjZGVmaW5lIGpiZDJfam91cm5hbF9leHRlbmQJCQlqb3VybmFsX2V4dGVuZAorI2RlZmluZSBqYmQyX2pvdXJuYWxfZmx1c2gJCQlqb3VybmFsX2ZsdXNoCisjZGVmaW5lIGpiZDJfam91cm5hbF9mb3JjZV9jb21taXQJCWpvdXJuYWxfZm9yY2VfY29tbWl0CisjZGVmaW5lIGpiZDJfam91cm5hbF9nZXRfd3JpdGVfYWNjZXNzCQlqb3VybmFsX2dldF93cml0ZV9hY2Nlc3MKKyNkZWZpbmUgamJkMl9qb3VybmFsX2dldF91bmRvX2FjY2VzcwkJam91cm5hbF9nZXRfdW5kb19hY2Nlc3MKKyNkZWZpbmUgamJkMl9qb3VybmFsX2luaXRfaW5vZGUJCQlqb3VybmFsX2luaXRfaW5vZGUKKyNkZWZpbmUgamJkMl9qb3VybmFsX2ludmFsaWRhdGVwYWdlCQlqb3VybmFsX2ludmFsaWRhdGVwYWdlCisjZGVmaW5lIGpiZDJfam91cm5hbF9sb2FkCQkJam91cm5hbF9sb2FkCisjZGVmaW5lIGpiZDJfam91cm5hbF9sb2NrX3VwZGF0ZXMJCWpvdXJuYWxfbG9ja191cGRhdGVzCisjZGVmaW5lIGpiZDJfam91cm5hbF9yZXN0YXJ0CQkJam91cm5hbF9yZXN0YXJ0CisjZGVmaW5lIGpiZDJfam91cm5hbF9zdGFydAkJCWpvdXJuYWxfc3RhcnQKKyNkZWZpbmUgamJkMl9qb3VybmFsX3N0YXJ0X2NvbW1pdAkJam91cm5hbF9zdGFydF9jb21taXQKKyNkZWZpbmUgamJkMl9qb3VybmFsX3N0b3AJCQlqb3VybmFsX3N0b3AKKyNkZWZpbmUgamJkMl9qb3VybmFsX3RyeV90b19mcmVlX2J1ZmZlcnMJam91cm5hbF90cnlfdG9fZnJlZV9idWZmZXJzCisjZGVmaW5lIGpiZDJfam91cm5hbF91bmxvY2tfdXBkYXRlcwkJam91cm5hbF91bmxvY2tfdXBkYXRlcworI2RlZmluZSBqYmQyX2pvdXJuYWxfd2lwZQkJCWpvdXJuYWxfd2lwZQorI2RlZmluZSBqYmQyX2xvZ193YWl0X2NvbW1pdAkJCWxvZ193YWl0X2NvbW1pdAorCitzdGF0aWMgaW5saW5lIGludCBqYmQyX2pvdXJuYWxfZmlsZV9pbm9kZShoYW5kbGVfdCAqaGFuZGxlLAorCQkJCQkgIHN0cnVjdCBqYmQyX2lub2RlICppbm9kZSkKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBpbnQgamJkMl9qb3VybmFsX2JlZ2luX29yZGVyZWRfdHJ1bmNhdGUoc3RydWN0IGpiZDJfaW5vZGUgKmlub2RlLAorCQkJCQkJICAgICAgbG9mZl90IG5ld19zaXplKQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgamJkMl9qb3VybmFsX2luaXRfamJkX2lub2RlKHN0cnVjdCBqYmQyX2lub2RlICpqaW5vZGUsCisJCQkJCSAgICAgICBzdHJ1Y3QgaW5vZGUgKmlub2RlKQoreworCXJldHVybjsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGpiZDJfam91cm5hbF9yZWxlYXNlX2piZF9pbm9kZShqb3VybmFsX3QgKmpvdXJuYWwsCisJCQkJCQkgIHN0cnVjdCBqYmQyX2lub2RlICpqaW5vZGUpCit7CisJcmV0dXJuOworfQorCisKKyNlbmRpZiAgLyogT0NGUzJfSkJEX0NPTVBBVF9IICovCmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9yZXNpemUuYyBiL2ZzL29jZnMyL3Jlc2l6ZS5jCmluZGV4IDgxNjY5NjguLmZmZDQ4ZGIgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL3Jlc2l6ZS5jCisrKyBiL2ZzL29jZnMyL3Jlc2l6ZS5jCkBAIC0yMDAsNyArMjAwLDcgQEAKIAkJaWYgKGNsdXN0ZXIgPiBjbHVzdGVycykKIAkJCWJyZWFrOwogCi0JCXJldCA9IG9jZnMyX3JlYWRfYmxvY2sob3NiLCBibGtubywgJmJhY2t1cCwgMCwgTlVMTCk7CisJCXJldCA9IG9jZnMyX3JlYWRfYmxvY2tzX3N5bmMob3NiLCBibGtubywgMSwgJmJhY2t1cCk7CiAJCWlmIChyZXQgPCAwKSB7CiAJCQltbG9nX2Vycm5vKHJldCk7CiAJCQlicmVhazsKQEAgLTIzNiw4ICsyMzYsOCBAQAogCSAqIHVwZGF0ZSB0aGUgc3VwZXJibG9jayBsYXN0LgogCSAqIEl0IGRvZXNuJ3QgbWF0dGVyIGlmIHRoZSB3cml0ZSBmYWlsZWQuCiAJICovCi0JcmV0ID0gb2NmczJfcmVhZF9ibG9jayhvc2IsIE9DRlMyX1NVUEVSX0JMT0NLX0JMS05PLAotCQkJICAgICAgICZzdXBlcl9iaCwgMCwgTlVMTCk7CisJcmV0ID0gb2NmczJfcmVhZF9ibG9ja3Nfc3luYyhvc2IsIE9DRlMyX1NVUEVSX0JMT0NLX0JMS05PLCAxLAorCQkJCSAgICAgJnN1cGVyX2JoKTsKIAlpZiAocmV0IDwgMCkgewogCQltbG9nX2Vycm5vKHJldCk7CiAJCWdvdG8gb3V0OwpAQCAtMzMyLDggKzMzMiw3IEBACiAJbGdkX2Jsa25vID0gb2NmczJfd2hpY2hfY2x1c3Rlcl9ncm91cChtYWluX2JtX2lub2RlLAogCQkJCQkgICAgICBmaXJzdF9uZXdfY2x1c3RlciAtIDEpOwogCi0JcmV0ID0gb2NmczJfcmVhZF9ibG9jayhvc2IsIGxnZF9ibGtubywgJmdyb3VwX2JoLCBPQ0ZTMl9CSF9DQUNIRUQsCi0JCQkgICAgICAgbWFpbl9ibV9pbm9kZSk7CisJcmV0ID0gb2NmczJfcmVhZF9ibG9jayhtYWluX2JtX2lub2RlLCBsZ2RfYmxrbm8sICZncm91cF9iaCk7CiAJaWYgKHJldCA8IDApIHsKIAkJbWxvZ19lcnJubyhyZXQpOwogCQlnb3RvIG91dF91bmxvY2s7CkBAIC01NDAsNyArNTM5LDcgQEAKIAkJZ290byBvdXRfdW5sb2NrOwogCX0KIAotCXJldCA9IG9jZnMyX3JlYWRfYmxvY2sob3NiLCBpbnB1dC0+Z3JvdXAsICZncm91cF9iaCwgMCwgTlVMTCk7CisJcmV0ID0gb2NmczJfcmVhZF9ibG9ja3Nfc3luYyhvc2IsIGlucHV0LT5ncm91cCwgMSwgJmdyb3VwX2JoKTsKIAlpZiAocmV0IDwgMCkgewogCQltbG9nKE1MX0VSUk9SLCAiQ2FuJ3QgcmVhZCB0aGUgZ3JvdXAgZGVzY3JpcHRvciAjICVsbHUgIgogCQkgICAgICJmcm9tIHRoZSBkZXZpY2UuIiwgKHVuc2lnbmVkIGxvbmcgbG9uZylpbnB1dC0+Z3JvdXApOwpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvc2xvdF9tYXAuYyBiL2ZzL29jZnMyL3Nsb3RfbWFwLmMKaW5kZXggYmI1ZmY4OS4uYmRkYTJkOCAxMDA2NDQKLS0tIGEvZnMvb2NmczIvc2xvdF9tYXAuYworKysgYi9mcy9vY2ZzMi9zbG90X21hcC5jCkBAIC0xNTAsOCArMTUwLDggQEAKIAkgKiBiZSAhTlVMTC4gIFRodXMsIG9jZnMyX3JlYWRfYmxvY2tzKCkgd2lsbCBpZ25vcmUgYmxvY2tuci4gIElmCiAJICogdGhpcyBpcyBub3QgdHJ1ZSwgdGhlIHJlYWQgb2YgLTEgKFVJTlQ2NF9NQVgpIHdpbGwgZmFpbC4KIAkgKi8KLQlyZXQgPSBvY2ZzMl9yZWFkX2Jsb2Nrcyhvc2IsIC0xLCBzaS0+c2lfYmxvY2tzLCBzaS0+c2lfYmgsIDAsCi0JCQkJc2ktPnNpX2lub2RlKTsKKwlyZXQgPSBvY2ZzMl9yZWFkX2Jsb2NrcyhzaS0+c2lfaW5vZGUsIC0xLCBzaS0+c2lfYmxvY2tzLCBzaS0+c2lfYmgsCisJCQkJT0NGUzJfQkhfSUdOT1JFX0NBQ0hFKTsKIAlpZiAocmV0ID09IDApIHsKIAkJc3Bpbl9sb2NrKCZvc2ItPm9zYl9sb2NrKTsKIAkJb2NmczJfdXBkYXRlX3Nsb3RfaW5mbyhzaSk7CkBAIC00MDQsNyArNDA0LDggQEAKIAkJICAgICAodW5zaWduZWQgbG9uZyBsb25nKWJsa25vKTsKIAogCQliaCA9IE5VTEw7ICAvKiBBY3F1aXJlIGEgZnJlc2ggYmggKi8KLQkJc3RhdHVzID0gb2NmczJfcmVhZF9ibG9jayhvc2IsIGJsa25vLCAmYmgsIDAsIHNpLT5zaV9pbm9kZSk7CisJCXN0YXR1cyA9IG9jZnMyX3JlYWRfYmxvY2tzKHNpLT5zaV9pbm9kZSwgYmxrbm8sIDEsICZiaCwKKwkJCQkJICAgT0NGUzJfQkhfSUdOT1JFX0NBQ0hFKTsKIAkJaWYgKHN0YXR1cyA8IDApIHsKIAkJCW1sb2dfZXJybm8oc3RhdHVzKTsKIAkJCWdvdG8gYmFpbDsKZGlmZiAtLWdpdCBhL2ZzL29jZnMyL3N0YWNrX3VzZXIuYyBiL2ZzL29jZnMyL3N0YWNrX3VzZXIuYwppbmRleCAzNTNmYzM1Li5mYWVjMmQ4IDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9zdGFja191c2VyLmMKKysrIGIvZnMvb2NmczIvc3RhY2tfdXNlci5jCkBAIC0yOCw2ICsyOCw3IEBACiAjaW5jbHVkZSAib2NmczIuaCIgIC8qIEZvciBzdHJ1Y3Qgb2NmczJfbG9ja19yZXMgKi8KICNpbmNsdWRlICJzdGFja2dsdWUuaCIKIAorI2luY2x1ZGUgPGxpbnV4L2RsbV9wbG9jay5oPgogCiAvKgogICogVGhlIGNvbnRyb2wgcHJvdG9jb2wgc3RhcnRzIHdpdGggYSBoYW5kc2hha2UuICBVbnRpbCB0aGUgaGFuZHNoYWtlCkBAIC03NDYsNiArNzQ3LDM3IEBACiB7CiB9CiAKK3N0YXRpYyBpbnQgdXNlcl9wbG9jayhzdHJ1Y3Qgb2NmczJfY2x1c3Rlcl9jb25uZWN0aW9uICpjb25uLAorCQkgICAgICB1NjQgaW5vLAorCQkgICAgICBzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJICAgICAgaW50IGNtZCwKKwkJICAgICAgc3RydWN0IGZpbGVfbG9jayAqZmwpCit7CisJLyoKKwkgKiBUaGlzIG1vcmUgb3IgbGVzcyBqdXN0IGRlbXV4ZXMgdGhlIHBsb2NrIHJlcXVlc3QgaW50byBhbnkKKwkgKiBvbmUgb2YgdGhyZWUgZGxtIGNhbGxzLgorCSAqCisJICogSW50ZXJuYWxseSwgZnMvZGxtIHdpbGwgcGFzcyB0aGVzZSB0byBhIG1pc2MgZGV2aWNlLCB3aGljaAorCSAqIGEgdXNlcnNwYWNlIGRhZW1vbiB3aWxsIHJlYWQgYW5kIHdyaXRlIHRvLgorCSAqCisJICogRm9yIG5vdywgY2FuY2VsIHJlcXVlc3RzICh3aGljaCBoYXBwZW4gaW50ZXJuYWxseSBvbmx5KSwKKwkgKiBhcmUgdHVybmVkIGludG8gdW5sb2Nrcy4gTW9zdCBvZiB0aGlzIGZ1bmN0aW9uIHRha2VuIGZyb20KKwkgKiBnZnMyX2xvY2suCisJICovCisKKwlpZiAoY21kID09IEZfQ0FOQ0VMTEspIHsKKwkJY21kID0gRl9TRVRMSzsKKwkJZmwtPmZsX3R5cGUgPSBGX1VOTENLOworCX0KKworCWlmIChJU19HRVRMSyhjbWQpKQorCQlyZXR1cm4gZGxtX3Bvc2l4X2dldChjb25uLT5jY19sb2Nrc3BhY2UsIGlubywgZmlsZSwgZmwpOworCWVsc2UgaWYgKGZsLT5mbF90eXBlID09IEZfVU5MQ0spCisJCXJldHVybiBkbG1fcG9zaXhfdW5sb2NrKGNvbm4tPmNjX2xvY2tzcGFjZSwgaW5vLCBmaWxlLCBmbCk7CisJZWxzZQorCQlyZXR1cm4gZGxtX3Bvc2l4X2xvY2soY29ubi0+Y2NfbG9ja3NwYWNlLCBpbm8sIGZpbGUsIGNtZCwgZmwpOworfQorCiAvKgogICogQ29tcGFyZSBhIHJlcXVlc3RlZCBsb2NraW5nIHByb3RvY29sIHZlcnNpb24gYWdhaW5zdCB0aGUgY3VycmVudCBvbmUuCiAgKgpAQCAtODM5LDYgKzg3MSw3IEBACiAJLmRsbV91bmxvY2sJPSB1c2VyX2RsbV91bmxvY2ssCiAJLmxvY2tfc3RhdHVzCT0gdXNlcl9kbG1fbG9ja19zdGF0dXMsCiAJLmxvY2tfbHZiCT0gdXNlcl9kbG1fbHZiLAorCS5wbG9jawkJPSB1c2VyX3Bsb2NrLAogCS5kdW1wX2xrc2IJPSB1c2VyX2RsbV9kdW1wX2xrc2IsCiB9OwogCmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9zdGFja2dsdWUuYyBiL2ZzL29jZnMyL3N0YWNrZ2x1ZS5jCmluZGV4IDA3ZjM0OGIuLjY4YjY2OGIgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL3N0YWNrZ2x1ZS5jCisrKyBiL2ZzL29jZnMyL3N0YWNrZ2x1ZS5jCkBAIC0yODgsNiArMjg4LDI2IEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTChvY2ZzMl9kbG1fZHVtcF9sa3NiKTsKIAoraW50IG9jZnMyX3N0YWNrX3N1cHBvcnRzX3Bsb2Nrcyh2b2lkKQoreworCXJldHVybiBhY3RpdmVfc3RhY2sgJiYgYWN0aXZlX3N0YWNrLT5zcF9vcHMtPnBsb2NrOworfQorRVhQT1JUX1NZTUJPTF9HUEwob2NmczJfc3RhY2tfc3VwcG9ydHNfcGxvY2tzKTsKKworLyoKKyAqIG9jZnMyX3Bsb2NrKCkgY2FuIG9ubHkgYmUgc2FmZWx5IGNhbGxlZCBpZgorICogb2NmczJfc3RhY2tfc3VwcG9ydHNfcGxvY2tzKCkgcmV0dXJuZWQgdHJ1ZQorICovCitpbnQgb2NmczJfcGxvY2soc3RydWN0IG9jZnMyX2NsdXN0ZXJfY29ubmVjdGlvbiAqY29ubiwgdTY0IGlubywKKwkJc3RydWN0IGZpbGUgKmZpbGUsIGludCBjbWQsIHN0cnVjdCBmaWxlX2xvY2sgKmZsKQoreworCVdBUk5fT05fT05DRShhY3RpdmVfc3RhY2stPnNwX29wcy0+cGxvY2sgPT0gTlVMTCk7CisJaWYgKGFjdGl2ZV9zdGFjay0+c3Bfb3BzLT5wbG9jaykKKwkJcmV0dXJuIGFjdGl2ZV9zdGFjay0+c3Bfb3BzLT5wbG9jayhjb25uLCBpbm8sIGZpbGUsIGNtZCwgZmwpOworCXJldHVybiAtRU9QTk9UU1VQUDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKG9jZnMyX3Bsb2NrKTsKKwogaW50IG9jZnMyX2NsdXN0ZXJfY29ubmVjdChjb25zdCBjaGFyICpzdGFja19uYW1lLAogCQkJICBjb25zdCBjaGFyICpncm91cCwKIAkJCSAgaW50IGdyb3VwbGVuLApkaWZmIC0tZ2l0IGEvZnMvb2NmczIvc3RhY2tnbHVlLmggYi9mcy9vY2ZzMi9zdGFja2dsdWUuaAppbmRleCBkYjU2MjgxLi5jNTcxYWYzIDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9zdGFja2dsdWUuaAorKysgYi9mcy9vY2ZzMi9zdGFja2dsdWUuaApAQCAtMjgsNiArMjgsMTAgQEAKICNpbmNsdWRlICJkbG0vZGxtYXBpLmgiCiAjaW5jbHVkZSA8bGludXgvZGxtLmg+CiAKKy8qIE5lZWRlZCBmb3IgcGxvY2stcmVsYXRlZCBwcm90b3R5cGVzICovCitzdHJ1Y3QgZmlsZTsKK3N0cnVjdCBmaWxlX2xvY2s7CisKIC8qCiAgKiBkbG1jb25zdGFudHMuaCBkb2VzIG5vdCBoYXZlIGEgTE9DQUwgZmxhZy4gIFdlIGhvcGUgdG8gcmVtb3ZlIGl0CiAgKiBzb21lIGRheSwgYnV0IHJpZ2h0IG5vdyB3ZSBuZWVkIGl0LiAgTGV0J3MgZmFrZSBpdC4gIFRoaXMgdmFsdWUgaXMgbGFyZ2VyCkBAIC0xODcsNiArMTkxLDE3IEBACiAJdm9pZCAqKCpsb2NrX2x2YikodW5pb24gb2NmczJfZGxtX2xrc2IgKmxrc2IpOwogCiAJLyoKKwkgKiBDbHVzdGVyLWF3YXJlIHBvc2l4IGxvY2tzCisJICoKKwkgKiBUaGlzIGlzIE5VTEwgZm9yIHN0YWNrcyB3aGljaCBkbyBub3Qgc3VwcG9ydCBwb3NpeCBsb2Nrcy4KKwkgKi8KKwlpbnQgKCpwbG9jaykoc3RydWN0IG9jZnMyX2NsdXN0ZXJfY29ubmVjdGlvbiAqY29ubiwKKwkJICAgICB1NjQgaW5vLAorCQkgICAgIHN0cnVjdCBmaWxlICpmaWxlLAorCQkgICAgIGludCBjbWQsCisJCSAgICAgc3RydWN0IGZpbGVfbG9jayAqZmwpOworCisJLyoKIAkgKiBUaGlzIGlzIGFuIG9wdG9pbmFsIGRlYnVnZ2luZyBob29rLiAgSWYgcHJvdmlkZWQsIHRoZQogCSAqIHN0YWNrIGNhbiBkdW1wIGRlYnVnZ2luZyBpbmZvcm1hdGlvbiBhYm91dCB0aGlzIGxvY2suCiAJICovCkBAIC0yNDAsNiArMjU1LDEwIEBACiB2b2lkICpvY2ZzMl9kbG1fbHZiKHVuaW9uIG9jZnMyX2RsbV9sa3NiICpsa3NiKTsKIHZvaWQgb2NmczJfZGxtX2R1bXBfbGtzYih1bmlvbiBvY2ZzMl9kbG1fbGtzYiAqbGtzYik7CiAKK2ludCBvY2ZzMl9zdGFja19zdXBwb3J0c19wbG9ja3Modm9pZCk7CitpbnQgb2NmczJfcGxvY2soc3RydWN0IG9jZnMyX2NsdXN0ZXJfY29ubmVjdGlvbiAqY29ubiwgdTY0IGlubywKKwkJc3RydWN0IGZpbGUgKmZpbGUsIGludCBjbWQsIHN0cnVjdCBmaWxlX2xvY2sgKmZsKTsKKwogdm9pZCBvY2ZzMl9zdGFja19nbHVlX3NldF9sb2NraW5nX3Byb3RvY29sKHN0cnVjdCBvY2ZzMl9sb2NraW5nX3Byb3RvY29sICpwcm90byk7CiAKIApkaWZmIC0tZ2l0IGEvZnMvb2NmczIvc3ViYWxsb2MuYyBiL2ZzL29jZnMyL3N1YmFsbG9jLmMKaW5kZXggZDJkMjc4Zi4uYzVmZjE4YiAxMDA2NDQKLS0tIGEvZnMvb2NmczIvc3ViYWxsb2MuYworKysgYi9mcy9vY2ZzMi9zdWJhbGxvYy5jCkBAIC02MiwxNSArNjIsMTggQEAKIAkJCQkgIHN0cnVjdCBvY2ZzMl9jaGFpbl9saXN0ICpjbCk7CiBzdGF0aWMgaW50IG9jZnMyX2Jsb2NrX2dyb3VwX2FsbG9jKHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiLAogCQkJCSAgIHN0cnVjdCBpbm9kZSAqYWxsb2NfaW5vZGUsCi0JCQkJICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCk7CisJCQkJICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCwKKwkJCQkgICB1NjQgbWF4X2Jsb2NrKTsKIAogc3RhdGljIGludCBvY2ZzMl9jbHVzdGVyX2dyb3VwX3NlYXJjaChzdHJ1Y3QgaW5vZGUgKmlub2RlLAogCQkJCSAgICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqZ3JvdXBfYmgsCiAJCQkJICAgICAgdTMyIGJpdHNfd2FudGVkLCB1MzIgbWluX2JpdHMsCisJCQkJICAgICAgdTY0IG1heF9ibG9jaywKIAkJCQkgICAgICB1MTYgKmJpdF9vZmYsIHUxNiAqYml0c19mb3VuZCk7CiBzdGF0aWMgaW50IG9jZnMyX2Jsb2NrX2dyb3VwX3NlYXJjaChzdHJ1Y3QgaW5vZGUgKmlub2RlLAogCQkJCSAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmdyb3VwX2JoLAogCQkJCSAgICB1MzIgYml0c193YW50ZWQsIHUzMiBtaW5fYml0cywKKwkJCQkgICAgdTY0IG1heF9ibG9jaywKIAkJCQkgICAgdTE2ICpiaXRfb2ZmLCB1MTYgKmJpdHNfZm91bmQpOwogc3RhdGljIGludCBvY2ZzMl9jbGFpbV9zdWJhbGxvY19iaXRzKHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiLAogCQkJCSAgICAgc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKmFjLApAQCAtMTEwLDggKzExMywxMSBAQAogCQkJCQkJdTY0IGRhdGFfYmxrbm8sCiAJCQkJCQl1NjQgKmJnX2Jsa25vLAogCQkJCQkJdTE2ICpiZ19iaXRfb2ZmKTsKK3N0YXRpYyBpbnQgb2NmczJfcmVzZXJ2ZV9jbHVzdGVyc193aXRoX2xpbWl0KHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiLAorCQkJCQkgICAgIHUzMiBiaXRzX3dhbnRlZCwgdTY0IG1heF9ibG9jaywKKwkJCQkJICAgICBzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqKmFjKTsKIAotc3RhdGljIHZvaWQgb2NmczJfZnJlZV9hY19yZXNvdXJjZShzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqYWMpCit2b2lkIG9jZnMyX2ZyZWVfYWNfcmVzb3VyY2Uoc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKmFjKQogewogCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBhYy0+YWNfaW5vZGU7CiAKQEAgLTEyNCwxMCArMTMwLDggQEAKIAkJaXB1dChpbm9kZSk7CiAJCWFjLT5hY19pbm9kZSA9IE5VTEw7CiAJfQotCWlmIChhYy0+YWNfYmgpIHsKLQkJYnJlbHNlKGFjLT5hY19iaCk7Ci0JCWFjLT5hY19iaCA9IE5VTEw7Ci0JfQorCWJyZWxzZShhYy0+YWNfYmgpOworCWFjLT5hY19iaCA9IE5VTEw7CiB9CiAKIHZvaWQgb2NmczJfZnJlZV9hbGxvY19jb250ZXh0KHN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICphYykKQEAgLTI3Niw3ICsyODAsOCBAQAogICovCiBzdGF0aWMgaW50IG9jZnMyX2Jsb2NrX2dyb3VwX2FsbG9jKHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiLAogCQkJCSAgIHN0cnVjdCBpbm9kZSAqYWxsb2NfaW5vZGUsCi0JCQkJICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCkKKwkJCQkgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLAorCQkJCSAgIHU2NCBtYXhfYmxvY2spCiB7CiAJaW50IHN0YXR1cywgY3JlZGl0czsKIAlzdHJ1Y3Qgb2NmczJfZGlub2RlICpmZSA9IChzdHJ1Y3Qgb2NmczJfZGlub2RlICopIGJoLT5iX2RhdGE7CkBAIC0yOTQsOSArMjk5LDkgQEAKIAltbG9nX2VudHJ5X3ZvaWQoKTsKIAogCWNsID0gJmZlLT5pZDIuaV9jaGFpbjsKLQlzdGF0dXMgPSBvY2ZzMl9yZXNlcnZlX2NsdXN0ZXJzKG9zYiwKLQkJCQkJbGUxNl90b19jcHUoY2wtPmNsX2NwZyksCi0JCQkJCSZhYyk7CisJc3RhdHVzID0gb2NmczJfcmVzZXJ2ZV9jbHVzdGVyc193aXRoX2xpbWl0KG9zYiwKKwkJCQkJCSAgIGxlMTZfdG9fY3B1KGNsLT5jbF9jcGcpLAorCQkJCQkJICAgbWF4X2Jsb2NrLCAmYWMpOwogCWlmIChzdGF0dXMgPCAwKSB7CiAJCWlmIChzdGF0dXMgIT0gLUVOT1NQQykKIAkJCW1sb2dfZXJybm8oc3RhdHVzKTsKQEAgLTM5NCw4ICszOTksNyBAQAogCWlmIChhYykKIAkJb2NmczJfZnJlZV9hbGxvY19jb250ZXh0KGFjKTsKIAotCWlmIChiZ19iaCkKLQkJYnJlbHNlKGJnX2JoKTsKKwlicmVsc2UoYmdfYmgpOwogCiAJbWxvZ19leGl0KHN0YXR1cyk7CiAJcmV0dXJuIHN0YXR1czsKQEAgLTQ2OSw3ICs0NzMsOCBAQAogCQkJZ290byBiYWlsOwogCQl9CiAKLQkJc3RhdHVzID0gb2NmczJfYmxvY2tfZ3JvdXBfYWxsb2Mob3NiLCBhbGxvY19pbm9kZSwgYmgpOworCQlzdGF0dXMgPSBvY2ZzMl9ibG9ja19ncm91cF9hbGxvYyhvc2IsIGFsbG9jX2lub2RlLCBiaCwKKwkJCQkJCSBhYy0+YWNfbWF4X2Jsb2NrKTsKIAkJaWYgKHN0YXR1cyA8IDApIHsKIAkJCWlmIChzdGF0dXMgIT0gLUVOT1NQQykKIAkJCQltbG9nX2Vycm5vKHN0YXR1cyk7CkBAIC00ODYsMTYgKzQ5MSwxNSBAQAogCWdldF9iaChiaCk7CiAJYWMtPmFjX2JoID0gYmg7CiBiYWlsOgotCWlmIChiaCkKLQkJYnJlbHNlKGJoKTsKKwlicmVsc2UoYmgpOwogCiAJbWxvZ19leGl0KHN0YXR1cyk7CiAJcmV0dXJuIHN0YXR1czsKIH0KIAotaW50IG9jZnMyX3Jlc2VydmVfbmV3X21ldGFkYXRhKHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiLAotCQkJICAgICAgIHN0cnVjdCBvY2ZzMl9kaW5vZGUgKmZlLAotCQkJICAgICAgIHN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICoqYWMpCitpbnQgb2NmczJfcmVzZXJ2ZV9uZXdfbWV0YWRhdGFfYmxvY2tzKHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiLAorCQkJCSAgICAgIGludCBibG9ja3MsCisJCQkJICAgICAgc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKiphYykKIHsKIAlpbnQgc3RhdHVzOwogCXUzMiBzbG90OwpAQCAtNTA3LDcgKzUxMSw3IEBACiAJCWdvdG8gYmFpbDsKIAl9CiAKLQkoKmFjKS0+YWNfYml0c193YW50ZWQgPSBvY2ZzMl9leHRlbmRfbWV0YV9uZWVkZWQoZmUpOworCSgqYWMpLT5hY19iaXRzX3dhbnRlZCA9IGJsb2NrczsKIAkoKmFjKS0+YWNfd2hpY2ggPSBPQ0ZTMl9BQ19VU0VfTUVUQTsKIAlzbG90ID0gb3NiLT5zbG90X251bTsKIAkoKmFjKS0+YWNfZ3JvdXBfc2VhcmNoID0gb2NmczJfYmxvY2tfZ3JvdXBfc2VhcmNoOwpAQCAtNTMyLDYgKzUzNiwxNSBAQAogCXJldHVybiBzdGF0dXM7CiB9CiAKK2ludCBvY2ZzMl9yZXNlcnZlX25ld19tZXRhZGF0YShzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiwKKwkJCSAgICAgICBzdHJ1Y3Qgb2NmczJfZXh0ZW50X2xpc3QgKnJvb3RfZWwsCisJCQkgICAgICAgc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKiphYykKK3sKKwlyZXR1cm4gb2NmczJfcmVzZXJ2ZV9uZXdfbWV0YWRhdGFfYmxvY2tzKG9zYiwKKwkJCQkJb2NmczJfZXh0ZW5kX21ldGFfbmVlZGVkKHJvb3RfZWwpLAorCQkJCQlhYyk7Cit9CisKIHN0YXRpYyBpbnQgb2NmczJfc3RlYWxfaW5vZGVfZnJvbV9vdGhlcl9ub2RlcyhzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiwKIAkJCQkJICAgICAgc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKmFjKQogewpAQCAtNTgyLDYgKzU5NSwxNCBAQAogCSgqYWMpLT5hY19ncm91cF9zZWFyY2ggPSBvY2ZzMl9ibG9ja19ncm91cF9zZWFyY2g7CiAKIAkvKgorCSAqIHN0YXQoMikgY2FuJ3QgaGFuZGxlIGlfaW5vID4gMzJiaXRzLCBzbyB3ZSB0ZWxsIHRoZQorCSAqIGxvd2VyIGxldmVscyBub3QgdG8gYWxsb2NhdGUgdXMgYSBibG9jayBncm91cCBwYXN0IHRoYXQKKwkgKiBsaW1pdC4gIFRoZSAnaW5vZGU2NCcgbW91bnQgb3B0aW9uIGF2b2lkcyB0aGlzIGJlaGF2aW9yLgorCSAqLworCWlmICghKG9zYi0+c19tb3VudF9vcHQgJiBPQ0ZTMl9NT1VOVF9JTk9ERTY0KSkKKwkJKCphYyktPmFjX21heF9ibG9jayA9ICh1MzIpfjBVOworCisJLyoKIAkgKiBzbG90IGlzIHNldCB3aGVuIHdlIHN1Y2Nlc3NmdWxseSBzdGVhbCBpbm9kZSBmcm9tIG90aGVyIG5vZGVzLgogCSAqIEl0IGlzIHJlc2V0IGluIDMgcGxhY2VzOgogCSAqIDEuIHdoZW4gd2UgZmx1c2ggdGhlIHRydW5jYXRlIGxvZwpAQCAtNjYxLDkgKzY4Miw5IEBACiAvKiBDYWxsZXJzIGRvbid0IG5lZWQgdG8gY2FyZSB3aGljaCBiaXRtYXAgKGxvY2FsIGFsbG9jIG9yIG1haW4pIHRvCiAgKiB1c2Ugc28gd2UgZmlndXJlIGl0IG91dCBmb3IgdGhlbSwgYnV0IHVuZm9ydHVuYXRlbHkgdGhpcyBjbHV0dGVycwogICogdGhpbmdzIGEgYml0LiAqLwotaW50IG9jZnMyX3Jlc2VydmVfY2x1c3RlcnMoc3RydWN0IG9jZnMyX3N1cGVyICpvc2IsCi0JCQkgICB1MzIgYml0c193YW50ZWQsCi0JCQkgICBzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqKmFjKQorc3RhdGljIGludCBvY2ZzMl9yZXNlcnZlX2NsdXN0ZXJzX3dpdGhfbGltaXQoc3RydWN0IG9jZnMyX3N1cGVyICpvc2IsCisJCQkJCSAgICAgdTMyIGJpdHNfd2FudGVkLCB1NjQgbWF4X2Jsb2NrLAorCQkJCQkgICAgIHN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICoqYWMpCiB7CiAJaW50IHN0YXR1czsKIApAQCAtNjc3LDI0ICs2OTgsMjAgQEAKIAl9CiAKIAkoKmFjKS0+YWNfYml0c193YW50ZWQgPSBiaXRzX3dhbnRlZDsKKwkoKmFjKS0+YWNfbWF4X2Jsb2NrID0gbWF4X2Jsb2NrOwogCiAJc3RhdHVzID0gLUVOT1NQQzsKIAlpZiAob2NmczJfYWxsb2Nfc2hvdWxkX3VzZV9sb2NhbChvc2IsIGJpdHNfd2FudGVkKSkgewogCQlzdGF0dXMgPSBvY2ZzMl9yZXNlcnZlX2xvY2FsX2FsbG9jX2JpdHMob3NiLAogCQkJCQkJCWJpdHNfd2FudGVkLAogCQkJCQkJCSphYyk7Ci0JCWlmICgoc3RhdHVzIDwgMCkgJiYgKHN0YXR1cyAhPSAtRU5PU1BDKSkgeworCQlpZiAoc3RhdHVzID09IC1FRkJJRykgeworCQkJLyogVGhlIGxvY2FsIGFsbG9jIHdpbmRvdyBpcyBvdXRzaWRlIGFjX21heF9ibG9jay4KKwkJCSAqIHVzZSB0aGUgbWFpbiBiaXRtYXAuICovCisJCQlzdGF0dXMgPSAtRU5PU1BDOworCQl9IGVsc2UgaWYgKChzdGF0dXMgPCAwKSAmJiAoc3RhdHVzICE9IC1FTk9TUEMpKSB7CiAJCQltbG9nX2Vycm5vKHN0YXR1cyk7CiAJCQlnb3RvIGJhaWw7Ci0JCX0gZWxzZSBpZiAoc3RhdHVzID09IC1FTk9TUEMpIHsKLQkJCS8qIHJlc2VydmVfbG9jYWxfYml0cyB3aWxsIHJldHVybiBlbm9zcGMgd2l0aAotCQkJICogdGhlIGxvY2FsIGFsbG9jIGlub2RlIHN0aWxsIGxvY2tlZCwgc28gd2UKLQkJCSAqIGNhbiBjaGFuZ2UgdGhpcyBzYWZlbHkgaGVyZS4gKi8KLQkJCW1sb2coMCwgIkRpc2FibGluZyBsb2NhbCBhbGxvY1xuIik7Ci0JCQkvKiBXZSBzZXQgdG8gT0NGUzJfTEFfRElTQUJMRUQgc28gdGhhdCB1bW91bnQKLQkJCSAqIGNhbiBjbGVhbiB1cCB3aGF0J3MgbGVmdCBvZiB0aGUgbG9jYWwKLQkJCSAqIGFsbG9jYXRpb24gKi8KLQkJCW9zYi0+bG9jYWxfYWxsb2Nfc3RhdGUgPSBPQ0ZTMl9MQV9ESVNBQkxFRDsKIAkJfQogCX0KIApAQCAtNzE4LDYgKzczNSwxMyBAQAogCXJldHVybiBzdGF0dXM7CiB9CiAKK2ludCBvY2ZzMl9yZXNlcnZlX2NsdXN0ZXJzKHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiLAorCQkJICAgdTMyIGJpdHNfd2FudGVkLAorCQkJICAgc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKiphYykKK3sKKwlyZXR1cm4gb2NmczJfcmVzZXJ2ZV9jbHVzdGVyc193aXRoX2xpbWl0KG9zYiwgYml0c193YW50ZWQsIDAsIGFjKTsKK30KKwogLyoKICAqIE1vcmUgb3IgbGVzcyBsaWZ0ZWQgZnJvbSBleHQzLiBJJ2xsIGxlYXZlIHRoZWlyIGRlc2NyaXB0aW9uIGJlbG93OgogICoKQEAgLTEwMDAsMTEgKzEwMjQsMTQgQEAKIHN0YXRpYyBpbnQgb2NmczJfY2x1c3Rlcl9ncm91cF9zZWFyY2goc3RydWN0IGlub2RlICppbm9kZSwKIAkJCQkgICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmdyb3VwX2JoLAogCQkJCSAgICAgIHUzMiBiaXRzX3dhbnRlZCwgdTMyIG1pbl9iaXRzLAorCQkJCSAgICAgIHU2NCBtYXhfYmxvY2ssCiAJCQkJICAgICAgdTE2ICpiaXRfb2ZmLCB1MTYgKmJpdHNfZm91bmQpCiB7CiAJaW50IHNlYXJjaCA9IC1FTk9TUEM7CiAJaW50IHJldDsKKwl1NjQgYmxrb2ZmOwogCXN0cnVjdCBvY2ZzMl9ncm91cF9kZXNjICpnZCA9IChzdHJ1Y3Qgb2NmczJfZ3JvdXBfZGVzYyAqKSBncm91cF9iaC0+Yl9kYXRhOworCXN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiID0gT0NGUzJfU0IoaW5vZGUtPmlfc2IpOwogCXUxNiB0bXBfb2ZmLCB0bXBfZm91bmQ7CiAJdW5zaWduZWQgaW50IG1heF9iaXRzLCBnZF9jbHVzdGVyX29mZjsKIApAQCAtMTAzNyw2ICsxMDY0LDE3IEBACiAJCWlmIChyZXQpCiAJCQlyZXR1cm4gcmV0OwogCisJCWlmIChtYXhfYmxvY2spIHsKKwkJCWJsa29mZiA9IG9jZnMyX2NsdXN0ZXJzX3RvX2Jsb2Nrcyhpbm9kZS0+aV9zYiwKKwkJCQkJCQkgIGdkX2NsdXN0ZXJfb2ZmICsKKwkJCQkJCQkgIHRtcF9vZmYgKyB0bXBfZm91bmQpOworCQkJbWxvZygwLCAiQ2hlY2tpbmcgJWxsdSBhZ2FpbnN0ICVsbHVcbiIsCisJCQkgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpYmxrb2ZmLAorCQkJICAgICAodW5zaWduZWQgbG9uZyBsb25nKW1heF9ibG9jayk7CisJCQlpZiAoYmxrb2ZmID4gbWF4X2Jsb2NrKQorCQkJCXJldHVybiAtRU5PU1BDOworCQl9CisKIAkJLyogb2NmczJfYmxvY2tfZ3JvdXBfZmluZF9jbGVhcl9iaXRzKCkgbWlnaHQKIAkJICogcmV0dXJuIHN1Y2Nlc3MsIGJ1dCB3ZSBzdGlsbCB3YW50IHRvIHJldHVybgogCQkgKiAtRU5PU1BDIHVubGVzcyBpdCBmb3VuZCB0aGUgbWluaW11bSBudW1iZXIKQEAgLTEwNDUsNiArMTA4MywxMiBAQAogCQkJKmJpdF9vZmYgPSB0bXBfb2ZmOwogCQkJKmJpdHNfZm91bmQgPSB0bXBfZm91bmQ7CiAJCQlzZWFyY2ggPSAwOyAvKiBzdWNjZXNzICovCisJCX0gZWxzZSBpZiAodG1wX2ZvdW5kKSB7CisJCQkvKgorCQkJICogRG9uJ3Qgc2hvdyBiaXRzIHdoaWNoIHdlJ2xsIGJlIHJldHVybmluZworCQkJICogZm9yIGFsbG9jYXRpb24gdG8gdGhlIGxvY2FsIGFsbG9jIGJpdG1hcC4KKwkJCSAqLworCQkJb2NmczJfbG9jYWxfYWxsb2Nfc2Vlbl9mcmVlX2JpdHMob3NiLCB0bXBfZm91bmQpOwogCQl9CiAJfQogCkBAIC0xMDU0LDE5ICsxMDk4LDMxIEBACiBzdGF0aWMgaW50IG9jZnMyX2Jsb2NrX2dyb3VwX3NlYXJjaChzdHJ1Y3QgaW5vZGUgKmlub2RlLAogCQkJCSAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmdyb3VwX2JoLAogCQkJCSAgICB1MzIgYml0c193YW50ZWQsIHUzMiBtaW5fYml0cywKKwkJCQkgICAgdTY0IG1heF9ibG9jaywKIAkJCQkgICAgdTE2ICpiaXRfb2ZmLCB1MTYgKmJpdHNfZm91bmQpCiB7CiAJaW50IHJldCA9IC1FTk9TUEM7CisJdTY0IGJsa29mZjsKIAlzdHJ1Y3Qgb2NmczJfZ3JvdXBfZGVzYyAqYmcgPSAoc3RydWN0IG9jZnMyX2dyb3VwX2Rlc2MgKikgZ3JvdXBfYmgtPmJfZGF0YTsKIAogCUJVR19PTihtaW5fYml0cyAhPSAxKTsKIAlCVUdfT04ob2NmczJfaXNfY2x1c3Rlcl9iaXRtYXAoaW5vZGUpKTsKIAotCWlmIChiZy0+YmdfZnJlZV9iaXRzX2NvdW50KQorCWlmIChiZy0+YmdfZnJlZV9iaXRzX2NvdW50KSB7CiAJCXJldCA9IG9jZnMyX2Jsb2NrX2dyb3VwX2ZpbmRfY2xlYXJfYml0cyhPQ0ZTMl9TQihpbm9kZS0+aV9zYiksCiAJCQkJCQkJZ3JvdXBfYmgsIGJpdHNfd2FudGVkLAogCQkJCQkJCWxlMTZfdG9fY3B1KGJnLT5iZ19iaXRzKSwKIAkJCQkJCQliaXRfb2ZmLCBiaXRzX2ZvdW5kKTsKKwkJaWYgKCFyZXQgJiYgbWF4X2Jsb2NrKSB7CisJCQlibGtvZmYgPSBsZTY0X3RvX2NwdShiZy0+YmdfYmxrbm8pICsgKmJpdF9vZmYgKworCQkJCSpiaXRzX2ZvdW5kOworCQkJbWxvZygwLCAiQ2hlY2tpbmcgJWxsdSBhZ2FpbnN0ICVsbHVcbiIsCisJCQkgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpYmxrb2ZmLAorCQkJICAgICAodW5zaWduZWQgbG9uZyBsb25nKW1heF9ibG9jayk7CisJCQlpZiAoYmxrb2ZmID4gbWF4X2Jsb2NrKQorCQkJCXJldCA9IC1FTk9TUEM7CisJCX0KKwl9CiAKIAlyZXR1cm4gcmV0OwogfQpAQCAtMTExNiw4ICsxMTcyLDcgQEAKIAlzdHJ1Y3Qgb2NmczJfZ3JvdXBfZGVzYyAqZ2Q7CiAJc3RydWN0IGlub2RlICphbGxvY19pbm9kZSA9IGFjLT5hY19pbm9kZTsKIAotCXJldCA9IG9jZnMyX3JlYWRfYmxvY2soT0NGUzJfU0IoYWxsb2NfaW5vZGUtPmlfc2IpLCBnZF9ibGtubywKLQkJCSAgICAgICAmZ3JvdXBfYmgsIE9DRlMyX0JIX0NBQ0hFRCwgYWxsb2NfaW5vZGUpOworCXJldCA9IG9jZnMyX3JlYWRfYmxvY2soYWxsb2NfaW5vZGUsIGdkX2Jsa25vLCAmZ3JvdXBfYmgpOwogCWlmIChyZXQgPCAwKSB7CiAJCW1sb2dfZXJybm8ocmV0KTsKIAkJcmV0dXJuIHJldDsKQEAgLTExMzEsNyArMTE4Niw3IEBACiAJfQogCiAJcmV0ID0gYWMtPmFjX2dyb3VwX3NlYXJjaChhbGxvY19pbm9kZSwgZ3JvdXBfYmgsIGJpdHNfd2FudGVkLCBtaW5fYml0cywKLQkJCQkgIGJpdF9vZmYsICZmb3VuZCk7CisJCQkJICBhYy0+YWNfbWF4X2Jsb2NrLCBiaXRfb2ZmLCAmZm91bmQpOwogCWlmIChyZXQgPCAwKSB7CiAJCWlmIChyZXQgIT0gLUVOT1NQQykKIAkJCW1sb2dfZXJybm8ocmV0KTsKQEAgLTExODYsOSArMTI0MSw5IEBACiAJICAgICBiaXRzX3dhbnRlZCwgY2hhaW4sCiAJICAgICAodW5zaWduZWQgbG9uZyBsb25nKU9DRlMyX0koYWxsb2NfaW5vZGUpLT5pcF9ibGtubyk7CiAKLQlzdGF0dXMgPSBvY2ZzMl9yZWFkX2Jsb2NrKE9DRlMyX1NCKGFsbG9jX2lub2RlLT5pX3NiKSwKKwlzdGF0dXMgPSBvY2ZzMl9yZWFkX2Jsb2NrKGFsbG9jX2lub2RlLAogCQkJCSAgbGU2NF90b19jcHUoY2wtPmNsX3JlY3NbY2hhaW5dLmNfYmxrbm8pLAotCQkJCSAgJmdyb3VwX2JoLCBPQ0ZTMl9CSF9DQUNIRUQsIGFsbG9jX2lub2RlKTsKKwkJCQkgICZncm91cF9iaCk7CiAJaWYgKHN0YXR1cyA8IDApIHsKIAkJbWxvZ19lcnJubyhzdGF0dXMpOwogCQlnb3RvIGJhaWw7CkBAIC0xMjA0LDIxICsxMjU5LDIwIEBACiAJLyogZm9yIG5vdywgdGhlIGNoYWluIHNlYXJjaCBpcyBhIGJpdCBzaW1wbGlzdGljLiBXZSBqdXN0IHVzZQogCSAqIHRoZSAxc3QgZ3JvdXAgd2l0aCBhbnkgZW1wdHkgYml0cy4gKi8KIAl3aGlsZSAoKHN0YXR1cyA9IGFjLT5hY19ncm91cF9zZWFyY2goYWxsb2NfaW5vZGUsIGdyb3VwX2JoLAotCQkJCQkgICAgIGJpdHNfd2FudGVkLCBtaW5fYml0cywgYml0X29mZiwKKwkJCQkJICAgICBiaXRzX3dhbnRlZCwgbWluX2JpdHMsCisJCQkJCSAgICAgYWMtPmFjX21heF9ibG9jaywgYml0X29mZiwKIAkJCQkJICAgICAmdG1wX2JpdHMpKSA9PSAtRU5PU1BDKSB7CiAJCWlmICghYmctPmJnX25leHRfZ3JvdXApCiAJCQlicmVhazsKIAotCQlpZiAocHJldl9ncm91cF9iaCkgewotCQkJYnJlbHNlKHByZXZfZ3JvdXBfYmgpOwotCQkJcHJldl9ncm91cF9iaCA9IE5VTEw7Ci0JCX0KKwkJYnJlbHNlKHByZXZfZ3JvdXBfYmgpOworCQlwcmV2X2dyb3VwX2JoID0gTlVMTDsKKwogCQluZXh0X2dyb3VwID0gbGU2NF90b19jcHUoYmctPmJnX25leHRfZ3JvdXApOwogCQlwcmV2X2dyb3VwX2JoID0gZ3JvdXBfYmg7CiAJCWdyb3VwX2JoID0gTlVMTDsKLQkJc3RhdHVzID0gb2NmczJfcmVhZF9ibG9jayhPQ0ZTMl9TQihhbGxvY19pbm9kZS0+aV9zYiksCi0JCQkJCSAgbmV4dF9ncm91cCwgJmdyb3VwX2JoLAotCQkJCQkgIE9DRlMyX0JIX0NBQ0hFRCwgYWxsb2NfaW5vZGUpOworCQlzdGF0dXMgPSBvY2ZzMl9yZWFkX2Jsb2NrKGFsbG9jX2lub2RlLAorCQkJCQkgIG5leHRfZ3JvdXAsICZncm91cF9iaCk7CiAJCWlmIChzdGF0dXMgPCAwKSB7CiAJCQltbG9nX2Vycm5vKHN0YXR1cyk7CiAJCQlnb3RvIGJhaWw7CkBAIC0xMzA3LDEwICsxMzYxLDggQEAKIAkqYmdfYmxrbm8gPSBsZTY0X3RvX2NwdShiZy0+YmdfYmxrbm8pOwogCSpiaXRzX2xlZnQgPSBsZTE2X3RvX2NwdShiZy0+YmdfZnJlZV9iaXRzX2NvdW50KTsKIGJhaWw6Ci0JaWYgKGdyb3VwX2JoKQotCQlicmVsc2UoZ3JvdXBfYmgpOwotCWlmIChwcmV2X2dyb3VwX2JoKQotCQlicmVsc2UocHJldl9ncm91cF9iaCk7CisJYnJlbHNlKGdyb3VwX2JoKTsKKwlicmVsc2UocHJldl9ncm91cF9iaCk7CiAKIAltbG9nX2V4aXQoc3RhdHVzKTsKIAlyZXR1cm4gc3RhdHVzOwpAQCAtMTcyMyw3ICsxNzc1LDYgQEAKIHsKIAlpbnQgc3RhdHVzID0gMDsKIAl1MzIgdG1wX3VzZWQ7Ci0Jc3RydWN0IG9jZnMyX3N1cGVyICpvc2IgPSBPQ0ZTMl9TQihhbGxvY19pbm9kZS0+aV9zYik7CiAJc3RydWN0IG9jZnMyX2Rpbm9kZSAqZmUgPSAoc3RydWN0IG9jZnMyX2Rpbm9kZSAqKSBhbGxvY19iaC0+Yl9kYXRhOwogCXN0cnVjdCBvY2ZzMl9jaGFpbl9saXN0ICpjbCA9ICZmZS0+aWQyLmlfY2hhaW47CiAJc3RydWN0IGJ1ZmZlcl9oZWFkICpncm91cF9iaCA9IE5VTEw7CkBAIC0xNzQyLDggKzE3OTMsNyBAQAogCSAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylPQ0ZTMl9JKGFsbG9jX2lub2RlKS0+aXBfYmxrbm8sIGNvdW50LAogCSAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZyliZ19ibGtubywgc3RhcnRfYml0KTsKIAotCXN0YXR1cyA9IG9jZnMyX3JlYWRfYmxvY2sob3NiLCBiZ19ibGtubywgJmdyb3VwX2JoLCBPQ0ZTMl9CSF9DQUNIRUQsCi0JCQkJICBhbGxvY19pbm9kZSk7CisJc3RhdHVzID0gb2NmczJfcmVhZF9ibG9jayhhbGxvY19pbm9kZSwgYmdfYmxrbm8sICZncm91cF9iaCk7CiAJaWYgKHN0YXR1cyA8IDApIHsKIAkJbWxvZ19lcnJubyhzdGF0dXMpOwogCQlnb3RvIGJhaWw7CkBAIC0xNzg0LDggKzE4MzQsNyBAQAogCX0KIAogYmFpbDoKLQlpZiAoZ3JvdXBfYmgpCi0JCWJyZWxzZShncm91cF9iaCk7CisJYnJlbHNlKGdyb3VwX2JoKTsKIAogCW1sb2dfZXhpdChzdGF0dXMpOwogCXJldHVybiBzdGF0dXM7CkBAIC0xODM4LDkgKzE4ODcsMTUgQEAKIAlzdGF0dXMgPSBvY2ZzMl9mcmVlX3N1YmFsbG9jX2JpdHMoaGFuZGxlLCBiaXRtYXBfaW5vZGUsIGJpdG1hcF9iaCwKIAkJCQkJICBiZ19zdGFydF9iaXQsIGJnX2Jsa25vLAogCQkJCQkgIG51bV9jbHVzdGVycyk7Ci0JaWYgKHN0YXR1cyA8IDApCisJaWYgKHN0YXR1cyA8IDApIHsKIAkJbWxvZ19lcnJubyhzdGF0dXMpOworCQlnb3RvIG91dDsKKwl9CiAKKwlvY2ZzMl9sb2NhbF9hbGxvY19zZWVuX2ZyZWVfYml0cyhPQ0ZTMl9TQihiaXRtYXBfaW5vZGUtPmlfc2IpLAorCQkJCQkgbnVtX2NsdXN0ZXJzKTsKKworb3V0OgogCW1sb2dfZXhpdChzdGF0dXMpOwogCXJldHVybiBzdGF0dXM7CiB9CkBAIC0xODkxLDMgKzE5NDYsODQgQEAKIAkJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpZmUtPmlkMi5pX2NoYWluLmNsX3JlY3NbaV0uY19ibGtubyk7CiAJfQogfQorCisvKgorICogRm9yIGEgZ2l2ZW4gYWxsb2NhdGlvbiwgZGV0ZXJtaW5lIHdoaWNoIGFsbG9jYXRvcnMgd2lsbCBuZWVkIHRvIGJlCisgKiBhY2Nlc3NlZCwgYW5kIGxvY2sgdGhlbSwgcmVzZXJ2aW5nIHRoZSBhcHByb3ByaWF0ZSBudW1iZXIgb2YgYml0cy4KKyAqCisgKiBTcGFyc2UgZmlsZSBzeXN0ZW1zIGNhbGwgdGhpcyBmcm9tIG9jZnMyX3dyaXRlX2JlZ2luX25vbG9jaygpCisgKiBhbmQgb2NmczJfYWxsb2NhdGVfdW53cml0dGVuX2V4dGVudHMoKS4KKyAqCisgKiBGaWxlIHN5c3RlbXMgd2hpY2ggZG9uJ3Qgc3VwcG9ydCBob2xlcyBjYWxsIHRoaXMgZnJvbQorICogb2NmczJfZXh0ZW5kX2FsbG9jYXRpb24oKS4KKyAqLworaW50IG9jZnMyX2xvY2tfYWxsb2NhdG9ycyhzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkJICBzdHJ1Y3Qgb2NmczJfZXh0ZW50X3RyZWUgKmV0LAorCQkJICB1MzIgY2x1c3RlcnNfdG9fYWRkLCB1MzIgZXh0ZW50c190b19zcGxpdCwKKwkJCSAgc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKipkYXRhX2FjLAorCQkJICBzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqKm1ldGFfYWMpCit7CisJaW50IHJldCA9IDAsIG51bV9mcmVlX2V4dGVudHM7CisJdW5zaWduZWQgaW50IG1heF9yZWNzX25lZWRlZCA9IGNsdXN0ZXJzX3RvX2FkZCArIDIgKiBleHRlbnRzX3RvX3NwbGl0OworCXN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiID0gT0NGUzJfU0IoaW5vZGUtPmlfc2IpOworCisJKm1ldGFfYWMgPSBOVUxMOworCWlmIChkYXRhX2FjKQorCQkqZGF0YV9hYyA9IE5VTEw7CisKKwlCVUdfT04oY2x1c3RlcnNfdG9fYWRkICE9IDAgJiYgZGF0YV9hYyA9PSBOVUxMKTsKKworCW51bV9mcmVlX2V4dGVudHMgPSBvY2ZzMl9udW1fZnJlZV9leHRlbnRzKG9zYiwgaW5vZGUsIGV0KTsKKwlpZiAobnVtX2ZyZWVfZXh0ZW50cyA8IDApIHsKKwkJcmV0ID0gbnVtX2ZyZWVfZXh0ZW50czsKKwkJbWxvZ19lcnJubyhyZXQpOworCQlnb3RvIG91dDsKKwl9CisKKwkvKgorCSAqIFNwYXJzZSBhbGxvY2F0aW9uIGZpbGUgc3lzdGVtcyBuZWVkIHRvIGJlIG1vcmUgY29uc2VydmF0aXZlCisJICogd2l0aCByZXNlcnZpbmcgcm9vbSBmb3IgZXhwYW5zaW9uIC0gdGhlIGFjdHVhbCBhbGxvY2F0aW9uCisJICogaGFwcGVucyB3aGlsZSB3ZSd2ZSBnb3QgYSBqb3VybmFsIGhhbmRsZSBvcGVuIHNvIHJlLXRha2luZworCSAqIGEgY2x1c3RlciBsb2NrIChiZWNhdXNlIHdlIHJhbiBvdXQgb2Ygcm9vbSBmb3IgYW5vdGhlcgorCSAqIGV4dGVudCkgd2lsbCB2aW9sYXRlIG9yZGVyaW5nIHJ1bGVzLgorCSAqCisJICogTW9zdCBvZiB0aGUgdGltZSB3ZSdsbCBvbmx5IGJlIHNlZWluZyB0aGlzIDEgY2x1c3RlciBhdCBhIHRpbWUKKwkgKiBhbnl3YXkuCisJICoKKwkgKiBBbHdheXMgbG9jayBmb3IgYW55IHVud3JpdHRlbiBleHRlbnRzIC0gd2UgbWlnaHQgd2FudCB0bworCSAqIGFkZCBibG9ja3MgZHVyaW5nIGEgc3BsaXQuCisJICovCisJaWYgKCFudW1fZnJlZV9leHRlbnRzIHx8CisJICAgIChvY2ZzMl9zcGFyc2VfYWxsb2Mob3NiKSAmJiBudW1fZnJlZV9leHRlbnRzIDwgbWF4X3JlY3NfbmVlZGVkKSkgeworCQlyZXQgPSBvY2ZzMl9yZXNlcnZlX25ld19tZXRhZGF0YShvc2IsIGV0LT5ldF9yb290X2VsLCBtZXRhX2FjKTsKKwkJaWYgKHJldCA8IDApIHsKKwkJCWlmIChyZXQgIT0gLUVOT1NQQykKKwkJCQltbG9nX2Vycm5vKHJldCk7CisJCQlnb3RvIG91dDsKKwkJfQorCX0KKworCWlmIChjbHVzdGVyc190b19hZGQgPT0gMCkKKwkJZ290byBvdXQ7CisKKwlyZXQgPSBvY2ZzMl9yZXNlcnZlX2NsdXN0ZXJzKG9zYiwgY2x1c3RlcnNfdG9fYWRkLCBkYXRhX2FjKTsKKwlpZiAocmV0IDwgMCkgeworCQlpZiAocmV0ICE9IC1FTk9TUEMpCisJCQltbG9nX2Vycm5vKHJldCk7CisJCWdvdG8gb3V0OworCX0KKworb3V0OgorCWlmIChyZXQpIHsKKwkJaWYgKCptZXRhX2FjKSB7CisJCQlvY2ZzMl9mcmVlX2FsbG9jX2NvbnRleHQoKm1ldGFfYWMpOworCQkJKm1ldGFfYWMgPSBOVUxMOworCQl9CisKKwkJLyoKKwkJICogV2UgY2Fubm90IGhhdmUgYW4gZXJyb3IgYW5kIGEgbm9uIG51bGwgKmRhdGFfYWMuCisJCSAqLworCX0KKworCXJldHVybiByZXQ7Cit9CmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9zdWJhbGxvYy5oIGIvZnMvb2NmczIvc3ViYWxsb2MuaAppbmRleCA1NDRjNjAwLi40ZGYxNTlkIDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9zdWJhbGxvYy5oCisrKyBiL2ZzL29jZnMyL3N1YmFsbG9jLmgKQEAgLTI4LDEwICsyOCwxMSBAQAogCiB0eXBlZGVmIGludCAoZ3JvdXBfc2VhcmNoX3QpKHN0cnVjdCBpbm9kZSAqLAogCQkJICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKiwKLQkJCSAgICAgdTMyLAotCQkJICAgICB1MzIsCi0JCQkgICAgIHUxNiAqLAotCQkJICAgICB1MTYgKik7CisJCQkgICAgIHUzMiwJCQkvKiBiaXRzX3dhbnRlZCAqLworCQkJICAgICB1MzIsCQkJLyogbWluX2JpdHMgKi8KKwkJCSAgICAgdTY0LAkJCS8qIG1heF9ibG9jayAqLworCQkJICAgICB1MTYgKiwJCQkvKiAqYml0X29mZiAqLworCQkJICAgICB1MTYgKik7CQkJLyogKmJpdHNfZm91bmQgKi8KIAogc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgewogCXN0cnVjdCBpbm9kZSAqYWNfaW5vZGU7ICAgIC8qIHdoaWNoIGJpdG1hcCBhcmUgd2UgYWxsb2NhdGluZyBmcm9tPyAqLwpAQCAtNTEsNiArNTIsOCBAQAogCWdyb3VwX3NlYXJjaF90ICphY19ncm91cF9zZWFyY2g7CiAKIAl1NjQgICAgYWNfbGFzdF9ncm91cDsKKwl1NjQgICAgYWNfbWF4X2Jsb2NrOyAgLyogSGlnaGVzdCBibG9jayBudW1iZXIgdG8gYWxsb2NhdGUuIDAgaXMKKwkJCQkgaXMgdGhlIHNhbWUgYXMgfjAgLSB1bmxpbWl0ZWQgKi8KIH07CiAKIHZvaWQgb2NmczJfZnJlZV9hbGxvY19jb250ZXh0KHN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICphYyk7CkBAIC01OSw5ICs2MiwxNyBAQAogCXJldHVybiBhYy0+YWNfYml0c193YW50ZWQgLSBhYy0+YWNfYml0c19naXZlbjsKIH0KIAorLyoKKyAqIFBsZWFzZSBub3RlIHRoYXQgdGhlIGNhbGxlciBtdXN0IG1ha2Ugc3VyZSB0aGF0IHJvb3RfZWwgaXMgdGhlIHJvb3QKKyAqIG9mIGV4dGVudCB0cmVlLiBTbyBmb3IgYW4gaW5vZGUsIGl0IHNob3VsZCBiZSAmZmUtPmlkMi5pX2xpc3QuIE90aGVyd2lzZQorICogdGhlIHJlc3VsdCBtYXkgYmUgd3JvbmcuCisgKi8KIGludCBvY2ZzMl9yZXNlcnZlX25ld19tZXRhZGF0YShzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiwKLQkJCSAgICAgICBzdHJ1Y3Qgb2NmczJfZGlub2RlICpmZSwKKwkJCSAgICAgICBzdHJ1Y3Qgb2NmczJfZXh0ZW50X2xpc3QgKnJvb3RfZWwsCiAJCQkgICAgICAgc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKiphYyk7CitpbnQgb2NmczJfcmVzZXJ2ZV9uZXdfbWV0YWRhdGFfYmxvY2tzKHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiLAorCQkJCSAgICAgIGludCBibG9ja3MsCisJCQkJICAgICAgc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKiphYyk7CiBpbnQgb2NmczJfcmVzZXJ2ZV9uZXdfaW5vZGUoc3RydWN0IG9jZnMyX3N1cGVyICpvc2IsCiAJCQkgICAgc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKiphYyk7CiBpbnQgb2NmczJfcmVzZXJ2ZV9jbHVzdGVycyhzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiwKQEAgLTE0Nyw2ICsxNTgsNyBAQAogICogYXBpcyBhYm92ZS4gKi8KIGludCBvY2ZzMl9yZXNlcnZlX2NsdXN0ZXJfYml0bWFwX2JpdHMoc3RydWN0IG9jZnMyX3N1cGVyICpvc2IsCiAJCQkJICAgICAgc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKmFjKTsKK3ZvaWQgb2NmczJfZnJlZV9hY19yZXNvdXJjZShzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqYWMpOwogCiAvKiBnaXZlbiBhIGNsdXN0ZXIgb2Zmc2V0LCBjYWxjdWxhdGUgd2hpY2ggYmxvY2sgZ3JvdXAgaXQgYmVsb25ncyB0bwogICogYW5kIHJldHVybiB0aGF0IGJsb2NrIG9mZnNldC4gKi8KQEAgLTE1Niw0ICsxNjgsOCBAQAogaW50IG9jZnMyX2NoZWNrX2dyb3VwX2Rlc2NyaXB0b3Ioc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwKIAkJCQkgc3RydWN0IG9jZnMyX2Rpbm9kZSAqZGksCiAJCQkJIHN0cnVjdCBvY2ZzMl9ncm91cF9kZXNjICpnZCk7CitpbnQgb2NmczJfbG9ja19hbGxvY2F0b3JzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBvY2ZzMl9leHRlbnRfdHJlZSAqZXQsCisJCQkgIHUzMiBjbHVzdGVyc190b19hZGQsIHUzMiBleHRlbnRzX3RvX3NwbGl0LAorCQkJICBzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqKmRhdGFfYWMsCisJCQkgIHN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICoqbWV0YV9hYyk7CiAjZW5kaWYgLyogX0NIQUlOQUxMT0NfSF8gKi8KZGlmZiAtLWdpdCBhL2ZzL29jZnMyL3N1cGVyLmMgYi9mcy9vY2ZzMi9zdXBlci5jCmluZGV4IDg4MjU1ZDNmLi4zMDRiNjNhIDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9zdXBlci5jCisrKyBiL2ZzL29jZnMyL3N1cGVyLmMKQEAgLTY0LDYgKzY0LDcgQEAKICNpbmNsdWRlICJzeXNmaWxlLmgiCiAjaW5jbHVkZSAidXB0b2RhdGUuaCIKICNpbmNsdWRlICJ2ZXIuaCIKKyNpbmNsdWRlICJ4YXR0ci5oIgogCiAjaW5jbHVkZSAiYnVmZmVyX2hlYWRfaW8uaCIKIApAQCAtMTU0LDEwICsxNTUsMTMgQEAKIAlPcHRfbG9jYWxhbGxvYywKIAlPcHRfbG9jYWxmbG9ja3MsCiAJT3B0X3N0YWNrLAorCU9wdF91c2VyX3hhdHRyLAorCU9wdF9ub3VzZXJfeGF0dHIsCisJT3B0X2lub2RlNjQsCiAJT3B0X2VyciwKIH07CiAKLXN0YXRpYyBtYXRjaF90YWJsZV90IHRva2VucyA9IHsKK3N0YXRpYyBjb25zdCBtYXRjaF90YWJsZV90IHRva2VucyA9IHsKIAl7T3B0X2JhcnJpZXIsICJiYXJyaWVyPSV1In0sCiAJe09wdF9lcnJfcGFuaWMsICJlcnJvcnM9cGFuaWMifSwKIAl7T3B0X2Vycl9ybywgImVycm9ycz1yZW1vdW50LXJvIn0sCkBAIC0xNzMsNiArMTc3LDkgQEAKIAl7T3B0X2xvY2FsYWxsb2MsICJsb2NhbGFsbG9jPSVkIn0sCiAJe09wdF9sb2NhbGZsb2NrcywgImxvY2FsZmxvY2tzIn0sCiAJe09wdF9zdGFjaywgImNsdXN0ZXJfc3RhY2s9JXMifSwKKwl7T3B0X3VzZXJfeGF0dHIsICJ1c2VyX3hhdHRyIn0sCisJe09wdF9ub3VzZXJfeGF0dHIsICJub3VzZXJfeGF0dHIifSwKKwl7T3B0X2lub2RlNjQsICJpbm9kZTY0In0sCiAJe09wdF9lcnIsIE5VTEx9CiB9OwogCkBAIC0yMDUsMTAgKzIxMiwxMSBAQAogCQlvY2ZzMl9zY2hlZHVsZV90cnVuY2F0ZV9sb2dfZmx1c2gob3NiLCAwKTsKIAl9CiAKLQlpZiAoam91cm5hbF9zdGFydF9jb21taXQoT0NGUzJfU0Ioc2IpLT5qb3VybmFsLT5qX2pvdXJuYWwsICZ0YXJnZXQpKSB7CisJaWYgKGpiZDJfam91cm5hbF9zdGFydF9jb21taXQoT0NGUzJfU0Ioc2IpLT5qb3VybmFsLT5qX2pvdXJuYWwsCisJCQkJICAgICAgJnRhcmdldCkpIHsKIAkJaWYgKHdhaXQpCi0JCQlsb2dfd2FpdF9jb21taXQoT0NGUzJfU0Ioc2IpLT5qb3VybmFsLT5qX2pvdXJuYWwsCi0JCQkJCXRhcmdldCk7CisJCQlqYmQyX2xvZ193YWl0X2NvbW1pdChPQ0ZTMl9TQihzYiktPmpvdXJuYWwtPmpfam91cm5hbCwKKwkJCQkJICAgICB0YXJnZXQpOwogCX0KIAlyZXR1cm4gMDsKIH0KQEAgLTMyNSw2ICszMzMsNyBAQAogCWlmICghb2kpCiAJCXJldHVybiBOVUxMOwogCisJamJkMl9qb3VybmFsX2luaXRfamJkX2lub2RlKCZvaS0+aXBfamlub2RlLCAmb2ktPnZmc19pbm9kZSk7CiAJcmV0dXJuICZvaS0+dmZzX2lub2RlOwogfQogCkBAIC00MDYsNiArNDE1LDE1IEBACiAJCWdvdG8gb3V0OwogCX0KIAorCS8qIFByb2JhYmx5IGRvbid0IHdhbnQgdGhpcyBvbiByZW1vdW50OyBpdCBtaWdodAorCSAqIG1lc3Mgd2l0aCBvdGhlciBub2RlcyAqLworCWlmICghKG9zYi0+c19tb3VudF9vcHQgJiBPQ0ZTMl9NT1VOVF9JTk9ERTY0KSAmJgorCSAgICAocGFyc2VkX29wdGlvbnMubW91bnRfb3B0ICYgT0NGUzJfTU9VTlRfSU5PREU2NCkpIHsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJbWxvZyhNTF9FUlJPUiwgIkNhbm5vdCBlbmFibGUgaW5vZGU2NCBvbiByZW1vdW50XG4iKTsKKwkJZ290byBvdXQ7CisJfQorCiAJLyogV2UncmUgZ29pbmcgdG8vZnJvbSByZWFkb25seSBtb2RlLiAqLwogCWlmICgoKmZsYWdzICYgTVNfUkRPTkxZKSAhPSAoc2ItPnNfZmxhZ3MgJiBNU19SRE9OTFkpKSB7CiAJCS8qIExvY2sgaGVyZSBzbyB0aGUgY2hlY2sgb2YgSEFSRF9STyBhbmQgdGhlIHBvdGVudGlhbApAQCAtNjM3LDcgKzY1NSw4IEBACiAJb3NiLT5zX2F0aW1lX3F1YW50dW0gPSBwYXJzZWRfb3B0aW9ucy5hdGltZV9xdWFudHVtOwogCW9zYi0+cHJlZmVycmVkX3Nsb3QgPSBwYXJzZWRfb3B0aW9ucy5zbG90OwogCW9zYi0+b3NiX2NvbW1pdF9pbnRlcnZhbCA9IHBhcnNlZF9vcHRpb25zLmNvbW1pdF9pbnRlcnZhbDsKLQlvc2ItPmxvY2FsX2FsbG9jX3NpemUgPSBwYXJzZWRfb3B0aW9ucy5sb2NhbGFsbG9jX29wdDsKKwlvc2ItPmxvY2FsX2FsbG9jX2RlZmF1bHRfYml0cyA9IG9jZnMyX21lZ2FieXRlc190b19jbHVzdGVycyhzYiwgcGFyc2VkX29wdGlvbnMubG9jYWxhbGxvY19vcHQpOworCW9zYi0+bG9jYWxfYWxsb2NfYml0cyA9IG9zYi0+bG9jYWxfYWxsb2NfZGVmYXVsdF9iaXRzOwogCiAJc3RhdHVzID0gb2NmczJfdmVyaWZ5X3VzZXJzcGFjZV9zdGFjayhvc2IsICZwYXJzZWRfb3B0aW9ucyk7CiAJaWYgKHN0YXR1cykKQEAgLTc0Myw4ICs3NjIsNyBAQAogCXJldHVybiBzdGF0dXM7CiAKIHJlYWRfc3VwZXJfZXJyb3I6Ci0JaWYgKGJoICE9IE5VTEwpCi0JCWJyZWxzZShiaCk7CisJYnJlbHNlKGJoKTsKIAogCWlmIChpbm9kZSkKIAkJaXB1dChpbm9kZSk7CkBAIC04NDcsNiArODY1LDEyIEBACiAJCWNhc2UgT3B0X2RhdGFfd3JpdGViYWNrOgogCQkJbW9wdC0+bW91bnRfb3B0IHw9IE9DRlMyX01PVU5UX0RBVEFfV1JJVEVCQUNLOwogCQkJYnJlYWs7CisJCWNhc2UgT3B0X3VzZXJfeGF0dHI6CisJCQltb3B0LT5tb3VudF9vcHQgJj0gfk9DRlMyX01PVU5UX05PVVNFUlhBVFRSOworCQkJYnJlYWs7CisJCWNhc2UgT3B0X25vdXNlcl94YXR0cjoKKwkJCW1vcHQtPm1vdW50X29wdCB8PSBPQ0ZTMl9NT1VOVF9OT1VTRVJYQVRUUjsKKwkJCWJyZWFrOwogCQljYXNlIE9wdF9hdGltZV9xdWFudHVtOgogCQkJaWYgKG1hdGNoX2ludCgmYXJnc1swXSwgJm9wdGlvbikpIHsKIAkJCQlzdGF0dXMgPSAwOwpAQCAtODczLDcgKzg5Nyw3IEBACiAJCQlpZiAob3B0aW9uIDwgMCkKIAkJCQlyZXR1cm4gMDsKIAkJCWlmIChvcHRpb24gPT0gMCkKLQkJCQlvcHRpb24gPSBKQkRfREVGQVVMVF9NQVhfQ09NTUlUX0FHRTsKKwkJCQlvcHRpb24gPSBKQkQyX0RFRkFVTFRfTUFYX0NPTU1JVF9BR0U7CiAJCQltb3B0LT5jb21taXRfaW50ZXJ2YWwgPSBIWiAqIG9wdGlvbjsKIAkJCWJyZWFrOwogCQljYXNlIE9wdF9sb2NhbGFsbG9jOgpAQCAtOTE4LDYgKzk0Miw5IEBACiAJCQkgICAgICAgT0NGUzJfU1RBQ0tfTEFCRUxfTEVOKTsKIAkJCW1vcHQtPmNsdXN0ZXJfc3RhY2tbT0NGUzJfU1RBQ0tfTEFCRUxfTEVOXSA9ICdcMCc7CiAJCQlicmVhazsKKwkJY2FzZSBPcHRfaW5vZGU2NDoKKwkJCW1vcHQtPm1vdW50X29wdCB8PSBPQ0ZTMl9NT1VOVF9JTk9ERTY0OworCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQltbG9nKE1MX0VSUk9SLAogCQkJICAgICAiVW5yZWNvZ25pemVkIG1vdW50IG9wdGlvbiBcIiVzXCIgIgpAQCAtOTM4LDYgKzk2NSw3IEBACiB7CiAJc3RydWN0IG9jZnMyX3N1cGVyICpvc2IgPSBPQ0ZTMl9TQihtbnQtPm1udF9zYik7CiAJdW5zaWduZWQgbG9uZyBvcHRzID0gb3NiLT5zX21vdW50X29wdDsKKwl1bnNpZ25lZCBpbnQgbG9jYWxfYWxsb2NfbWVnczsKIAogCWlmIChvcHRzICYgT0NGUzJfTU9VTlRfSEJfTE9DQUwpCiAJCXNlcV9wcmludGYocywgIixfbmV0ZGV2LGhlYXJ0YmVhdD1sb2NhbCIpOwpAQCAtOTcwLDggKzk5OCw5IEBACiAJCXNlcV9wcmludGYocywgIixjb21taXQ9JXUiLAogCQkJICAgKHVuc2lnbmVkKSAob3NiLT5vc2JfY29tbWl0X2ludGVydmFsIC8gSFopKTsKIAotCWlmIChvc2ItPmxvY2FsX2FsbG9jX3NpemUgIT0gT0NGUzJfREVGQVVMVF9MT0NBTF9BTExPQ19TSVpFKQotCQlzZXFfcHJpbnRmKHMsICIsbG9jYWxhbGxvYz0lZCIsIG9zYi0+bG9jYWxfYWxsb2Nfc2l6ZSk7CisJbG9jYWxfYWxsb2NfbWVncyA9IG9zYi0+bG9jYWxfYWxsb2NfYml0cyA+PiAoMjAgLSBvc2ItPnNfY2x1c3RlcnNpemVfYml0cyk7CisJaWYgKGxvY2FsX2FsbG9jX21lZ3MgIT0gT0NGUzJfREVGQVVMVF9MT0NBTF9BTExPQ19TSVpFKQorCQlzZXFfcHJpbnRmKHMsICIsbG9jYWxhbGxvYz0lZCIsIGxvY2FsX2FsbG9jX21lZ3MpOwogCiAJaWYgKG9wdHMgJiBPQ0ZTMl9NT1VOVF9MT0NBTEZMT0NLUykKIAkJc2VxX3ByaW50ZihzLCAiLGxvY2FsZmxvY2tzLCIpOwpAQCAtOTgwLDYgKzEwMDksMTQgQEAKIAkJc2VxX3ByaW50ZihzLCAiLGNsdXN0ZXJfc3RhY2s9JS4qcyIsIE9DRlMyX1NUQUNLX0xBQkVMX0xFTiwKIAkJCSAgIG9zYi0+b3NiX2NsdXN0ZXJfc3RhY2spOwogCisJaWYgKG9wdHMgJiBPQ0ZTMl9NT1VOVF9OT1VTRVJYQVRUUikKKwkJc2VxX3ByaW50ZihzLCAiLG5vdXNlcl94YXR0ciIpOworCWVsc2UKKwkJc2VxX3ByaW50ZihzLCAiLHVzZXJfeGF0dHIiKTsKKworCWlmIChvcHRzICYgT0NGUzJfTU9VTlRfSU5PREU2NCkKKwkJc2VxX3ByaW50ZihzLCAiLGlub2RlNjQiKTsKKwogCXJldHVybiAwOwogfQogCkBAIC0xMTMyLDYgKzExNjksNyBAQAogCW9pLT5pcF9kaXJfc3RhcnRfbG9va3VwID0gMDsKIAogCWluaXRfcndzZW0oJm9pLT5pcF9hbGxvY19zZW0pOworCWluaXRfcndzZW0oJm9pLT5pcF94YXR0cl9zZW0pOwogCW11dGV4X2luaXQoJm9pLT5pcF9pb19tdXRleCk7CiAKIAlvaS0+aXBfYmxrbm8gPSAwVUxMOwpAQCAtMTM3NSw2ICsxNDEzLDcgQEAKIAlzYi0+c19mc19pbmZvID0gb3NiOwogCXNiLT5zX29wID0gJm9jZnMyX3NvcHM7CiAJc2ItPnNfZXhwb3J0X29wID0gJm9jZnMyX2V4cG9ydF9vcHM7CisJc2ItPnNfeGF0dHIgPSBvY2ZzMl94YXR0cl9oYW5kbGVyczsKIAlzYi0+c190aW1lX2dyYW4gPSAxOwogCXNiLT5zX2ZsYWdzIHw9IE1TX05PQVRJTUU7CiAJLyogdGhpcyBpcyBuZWVkZWQgdG8gc3VwcG9ydCBPX0xBUkdFRklMRSAqLwpAQCAtMTQyMSw4ICsxNDYwLDEyIEBACiAKIAlvc2ItPnNsb3RfbnVtID0gT0NGUzJfSU5WQUxJRF9TTE9UOwogCisJb3NiLT5zX3hhdHRyX2lubGluZV9zaXplID0gbGUxNl90b19jcHUoCisJCQkJCWRpLT5pZDIuaV9zdXBlci5zX3hhdHRyX2lubGluZV9zaXplKTsKKwogCW9zYi0+bG9jYWxfYWxsb2Nfc3RhdGUgPSBPQ0ZTMl9MQV9VTlVTRUQ7CiAJb3NiLT5sb2NhbF9hbGxvY19iaCA9IE5VTEw7CisJSU5JVF9ERUxBWUVEX1dPUksoJm9zYi0+bGFfZW5hYmxlX3dxLCBvY2ZzMl9sYV9lbmFibGVfd29ya2VyKTsKIAogCWluaXRfd2FpdHF1ZXVlX2hlYWQoJm9zYi0+b3NiX21vdW50X2V2ZW50KTsKIApAQCAtMTU2OCw2ICsxNjExLDcgQEAKIAlvc2ItPmZpcnN0X2NsdXN0ZXJfZ3JvdXBfYmxrbm8gPQogCQlsZTY0X3RvX2NwdShkaS0+aWQyLmlfc3VwZXIuc19maXJzdF9jbHVzdGVyX2dyb3VwKTsKIAlvc2ItPmZzX2dlbmVyYXRpb24gPSBsZTMyX3RvX2NwdShkaS0+aV9mc19nZW5lcmF0aW9uKTsKKwlvc2ItPnV1aWRfaGFzaCA9IGxlMzJfdG9fY3B1KGRpLT5pZDIuaV9zdXBlci5zX3V1aWRfaGFzaCk7CiAJbWxvZygwLCAidm9sX2xhYmVsOiAlc1xuIiwgb3NiLT52b2xfbGFiZWwpOwogCW1sb2coMCwgInV1aWQ6ICVzXG4iLCBvc2ItPnV1aWRfc3RyKTsKIAltbG9nKDAsICJyb290X2Jsa25vPSVsbHUsIHN5c3RlbV9kaXJfYmxrbm89JWxsdVxuIiwKZGlmZiAtLWdpdCBhL2ZzL29jZnMyL3N5bWxpbmsuYyBiL2ZzL29jZnMyL3N5bWxpbmsuYwppbmRleCBiYTlkYmI1Li5jYmQwM2RmIDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9zeW1saW5rLmMKKysrIGIvZnMvb2NmczIvc3ltbGluay5jCkBAIC01MCw2ICs1MCw3IEBACiAjaW5jbHVkZSAiaW5vZGUuaCIKICNpbmNsdWRlICJqb3VybmFsLmgiCiAjaW5jbHVkZSAic3ltbGluay5oIgorI2luY2x1ZGUgInhhdHRyLmgiCiAKICNpbmNsdWRlICJidWZmZXJfaGVhZF9pby5oIgogCkBAIC04MywxMSArODQsNyBAQAogCiAJbWxvZ19lbnRyeV92b2lkKCk7CiAKLQlzdGF0dXMgPSBvY2ZzMl9yZWFkX2Jsb2NrKE9DRlMyX1NCKGlub2RlLT5pX3NiKSwKLQkJCQkgIE9DRlMyX0koaW5vZGUpLT5pcF9ibGtubywKLQkJCQkgIGJoLAotCQkJCSAgT0NGUzJfQkhfQ0FDSEVELAotCQkJCSAgaW5vZGUpOworCXN0YXR1cyA9IG9jZnMyX3JlYWRfYmxvY2soaW5vZGUsIE9DRlMyX0koaW5vZGUpLT5pcF9ibGtubywgYmgpOwogCWlmIChzdGF0dXMgPCAwKSB7CiAJCW1sb2dfZXJybm8oc3RhdHVzKTsKIAkJbGluayA9IEVSUl9QVFIoc3RhdHVzKTsKQEAgLTE1Nyw4ICsxNTQsNyBAQAogCQlrdW5tYXAocGFnZSk7CiAJCXBhZ2VfY2FjaGVfcmVsZWFzZShwYWdlKTsKIAl9Ci0JaWYgKGJoKQotCQlicmVsc2UoYmgpOworCWJyZWxzZShiaCk7CiAKIAlyZXR1cm4gRVJSX1BUUihzdGF0dXMpOwogfQpAQCAtMTY4LDEwICsxNjQsMTggQEAKIAkuZm9sbG93X2xpbmsJPSBvY2ZzMl9mb2xsb3dfbGluaywKIAkuZ2V0YXR0cgk9IG9jZnMyX2dldGF0dHIsCiAJLnNldGF0dHIJPSBvY2ZzMl9zZXRhdHRyLAorCS5zZXR4YXR0cgk9IGdlbmVyaWNfc2V0eGF0dHIsCisJLmdldHhhdHRyCT0gZ2VuZXJpY19nZXR4YXR0ciwKKwkubGlzdHhhdHRyCT0gb2NmczJfbGlzdHhhdHRyLAorCS5yZW1vdmV4YXR0cgk9IGdlbmVyaWNfcmVtb3ZleGF0dHIsCiB9OwogY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgb2NmczJfZmFzdF9zeW1saW5rX2lub2RlX29wZXJhdGlvbnMgPSB7CiAJLnJlYWRsaW5rCT0gb2NmczJfcmVhZGxpbmssCiAJLmZvbGxvd19saW5rCT0gb2NmczJfZm9sbG93X2xpbmssCiAJLmdldGF0dHIJPSBvY2ZzMl9nZXRhdHRyLAogCS5zZXRhdHRyCT0gb2NmczJfc2V0YXR0ciwKKwkuc2V0eGF0dHIJPSBnZW5lcmljX3NldHhhdHRyLAorCS5nZXR4YXR0cgk9IGdlbmVyaWNfZ2V0eGF0dHIsCisJLmxpc3R4YXR0cgk9IG9jZnMyX2xpc3R4YXR0ciwKKwkucmVtb3ZleGF0dHIJPSBnZW5lcmljX3JlbW92ZXhhdHRyLAogfTsKZGlmZiAtLWdpdCBhL2ZzL29jZnMyL3VwdG9kYXRlLmMgYi9mcy9vY2ZzMi91cHRvZGF0ZS5jCmluZGV4IDRkYTg4NTEuLjE4N2I5OWYgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL3VwdG9kYXRlLmMKKysrIGIvZnMvb2NmczIvdXB0b2RhdGUuYwpAQCAtNTMsNyArNTMsMTEgQEAKICNpbmNsdWRlIDxsaW51eC9oaWdobWVtLmg+CiAjaW5jbHVkZSA8bGludXgvYnVmZmVyX2hlYWQuaD4KICNpbmNsdWRlIDxsaW51eC9yYnRyZWUuaD4KLSNpbmNsdWRlIDxsaW51eC9qYmQuaD4KKyNpZm5kZWYgQ09ORklHX09DRlMyX0NPTVBBVF9KQkQKKyMgaW5jbHVkZSA8bGludXgvamJkMi5oPgorI2Vsc2UKKyMgaW5jbHVkZSA8bGludXgvamJkLmg+CisjZW5kaWYKIAogI2RlZmluZSBNTE9HX01BU0tfUFJFRklYIE1MX1VQVE9EQVRFCiAKQEAgLTUxMSwxNCArNTE1LDEwIEBACiAJY2ktPmNpX251bV9jYWNoZWQtLTsKIH0KIAotLyogQ2FsbGVkIHdoZW4gd2UgcmVtb3ZlIGEgY2h1bmsgb2YgbWV0YWRhdGEgZnJvbSBhbiBpbm9kZS4gV2UgZG9uJ3QKLSAqIGJvdGhlciByZXZlcnRpbmcgdGhpbmdzIHRvIGFuIGlubGluZWQgYXJyYXkgaW4gdGhlIGNhc2Ugb2YgYSByZW1vdmUKLSAqIHdoaWNoIG1vdmVzIHVzIGJhY2sgdW5kZXIgdGhlIGxpbWl0LiAqLwotdm9pZCBvY2ZzMl9yZW1vdmVfZnJvbV9jYWNoZShzdHJ1Y3QgaW5vZGUgKmlub2RlLAotCQkJICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoKQorc3RhdGljIHZvaWQgb2NmczJfcmVtb3ZlX2Jsb2NrX2Zyb21fY2FjaGUoc3RydWN0IGlub2RlICppbm9kZSwKKwkJCQkJICBzZWN0b3JfdCBibG9jaykKIHsKIAlpbnQgaW5kZXg7Ci0Jc2VjdG9yX3QgYmxvY2sgPSBiaC0+Yl9ibG9ja25yOwogCXN0cnVjdCBvY2ZzMl9tZXRhX2NhY2hlX2l0ZW0gKml0ZW0gPSBOVUxMOwogCXN0cnVjdCBvY2ZzMl9pbm9kZV9pbmZvICpvaSA9IE9DRlMyX0koaW5vZGUpOwogCXN0cnVjdCBvY2ZzMl9jYWNoaW5nX2luZm8gKmNpID0gJm9pLT5pcF9tZXRhZGF0YV9jYWNoZTsKQEAgLTU0NCw2ICs1NDQsMzAgQEAKIAkJa21lbV9jYWNoZV9mcmVlKG9jZnMyX3VwdG9kYXRlX2NhY2hlcCwgaXRlbSk7CiB9CiAKKy8qCisgKiBDYWxsZWQgd2hlbiB3ZSByZW1vdmUgYSBjaHVuayBvZiBtZXRhZGF0YSBmcm9tIGFuIGlub2RlLiBXZSBkb24ndAorICogYm90aGVyIHJldmVydGluZyB0aGluZ3MgdG8gYW4gaW5saW5lZCBhcnJheSBpbiB0aGUgY2FzZSBvZiBhIHJlbW92ZQorICogd2hpY2ggbW92ZXMgdXMgYmFjayB1bmRlciB0aGUgbGltaXQuCisgKi8KK3ZvaWQgb2NmczJfcmVtb3ZlX2Zyb21fY2FjaGUoc3RydWN0IGlub2RlICppbm9kZSwKKwkJCSAgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCkKK3sKKwlzZWN0b3JfdCBibG9jayA9IGJoLT5iX2Jsb2NrbnI7CisKKwlvY2ZzMl9yZW1vdmVfYmxvY2tfZnJvbV9jYWNoZShpbm9kZSwgYmxvY2spOworfQorCisvKiBDYWxsZWQgd2hlbiB3ZSByZW1vdmUgeGF0dHIgY2x1c3RlcnMgZnJvbSBhbiBpbm9kZS4gKi8KK3ZvaWQgb2NmczJfcmVtb3ZlX3hhdHRyX2NsdXN0ZXJzX2Zyb21fY2FjaGUoc3RydWN0IGlub2RlICppbm9kZSwKKwkJCQkJICAgIHNlY3Rvcl90IGJsb2NrLAorCQkJCQkgICAgdTMyIGNfbGVuKQoreworCXVuc2lnbmVkIGludCBpLCBiX2xlbiA9IG9jZnMyX2NsdXN0ZXJzX3RvX2Jsb2Nrcyhpbm9kZS0+aV9zYiwgMSkgKiBjX2xlbjsKKworCWZvciAoaSA9IDA7IGkgPCBiX2xlbjsgaSsrLCBibG9jaysrKQorCQlvY2ZzMl9yZW1vdmVfYmxvY2tfZnJvbV9jYWNoZShpbm9kZSwgYmxvY2spOworfQorCiBpbnQgX19pbml0IGluaXRfb2NmczJfdXB0b2RhdGVfY2FjaGUodm9pZCkKIHsKIAlvY2ZzMl91cHRvZGF0ZV9jYWNoZXAgPSBrbWVtX2NhY2hlX2NyZWF0ZSgib2NmczJfdXB0b2RhdGUiLApkaWZmIC0tZ2l0IGEvZnMvb2NmczIvdXB0b2RhdGUuaCBiL2ZzL29jZnMyL3VwdG9kYXRlLmgKaW5kZXggMmU3MzIwNi4uNTMxYjRiMyAxMDA2NDQKLS0tIGEvZnMvb2NmczIvdXB0b2RhdGUuaAorKysgYi9mcy9vY2ZzMi91cHRvZGF0ZS5oCkBAIC00MCw2ICs0MCw5IEBACiAJCQkJICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCk7CiB2b2lkIG9jZnMyX3JlbW92ZV9mcm9tX2NhY2hlKHN0cnVjdCBpbm9kZSAqaW5vZGUsCiAJCQkgICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgpOwordm9pZCBvY2ZzMl9yZW1vdmVfeGF0dHJfY2x1c3RlcnNfZnJvbV9jYWNoZShzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkJCQkgICAgc2VjdG9yX3QgYmxvY2ssCisJCQkJCSAgICB1MzIgY19sZW4pOwogaW50IG9jZnMyX2J1ZmZlcl9yZWFkX2FoZWFkKHN0cnVjdCBpbm9kZSAqaW5vZGUsCiAJCQkgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCk7CiAKZGlmZiAtLWdpdCBhL2ZzL29jZnMyL3hhdHRyLmMgYi9mcy9vY2ZzMi94YXR0ci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgwMmM0MTQKLS0tIC9kZXYvbnVsbAorKysgYi9mcy9vY2ZzMi94YXR0ci5jCkBAIC0wLDAgKzEsNDgzMiBAQAorLyogLSotIG1vZGU6IGM7IGMtYmFzaWMtb2Zmc2V0OiA4OyAtKi0KKyAqIHZpbTogbm9leHBhbmR0YWIgc3c9OCB0cz04IHN0cz0wOgorICoKKyAqIHhhdHRyLmMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggT3JhY2xlLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBDUkVESVRTOgorICogTG90cyBvZiBjb2RlIGluIHRoaXMgZmlsZSBpcyB0YWtlbiBmcm9tIGV4dDMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorICogQm9zdG9uLCBNQSAwMjExMTAtMTMwNywgVVNBLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9jYXBhYmlsaXR5Lmg+CisjaW5jbHVkZSA8bGludXgvZnMuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9oaWdobWVtLmg+CisjaW5jbHVkZSA8bGludXgvcGFnZW1hcC5oPgorI2luY2x1ZGUgPGxpbnV4L3Vpby5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvc3BsaWNlLmg+CisjaW5jbHVkZSA8bGludXgvbW91bnQuaD4KKyNpbmNsdWRlIDxsaW51eC93cml0ZWJhY2suaD4KKyNpbmNsdWRlIDxsaW51eC9mYWxsb2MuaD4KKyNpbmNsdWRlIDxsaW51eC9zb3J0Lmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorCisjZGVmaW5lIE1MT0dfTUFTS19QUkVGSVggTUxfWEFUVFIKKyNpbmNsdWRlIDxjbHVzdGVyL21hc2tsb2cuaD4KKworI2luY2x1ZGUgIm9jZnMyLmgiCisjaW5jbHVkZSAiYWxsb2MuaCIKKyNpbmNsdWRlICJkbG1nbHVlLmgiCisjaW5jbHVkZSAiZmlsZS5oIgorI2luY2x1ZGUgInN5bWxpbmsuaCIKKyNpbmNsdWRlICJzeXNmaWxlLmgiCisjaW5jbHVkZSAiaW5vZGUuaCIKKyNpbmNsdWRlICJqb3VybmFsLmgiCisjaW5jbHVkZSAib2NmczJfZnMuaCIKKyNpbmNsdWRlICJzdWJhbGxvYy5oIgorI2luY2x1ZGUgInVwdG9kYXRlLmgiCisjaW5jbHVkZSAiYnVmZmVyX2hlYWRfaW8uaCIKKyNpbmNsdWRlICJzdXBlci5oIgorI2luY2x1ZGUgInhhdHRyLmgiCisKKworc3RydWN0IG9jZnMyX3hhdHRyX2RlZl92YWx1ZV9yb290IHsKKwlzdHJ1Y3Qgb2NmczJfeGF0dHJfdmFsdWVfcm9vdAl4djsKKwlzdHJ1Y3Qgb2NmczJfZXh0ZW50X3JlYwkJZXI7Cit9OworCitzdHJ1Y3Qgb2NmczJfeGF0dHJfYnVja2V0IHsKKwlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoc1tPQ0ZTMl9YQVRUUl9NQVhfQkxPQ0tTX1BFUl9CVUNLRVRdOworCXN0cnVjdCBvY2ZzMl94YXR0cl9oZWFkZXIgKnhoOworfTsKKworI2RlZmluZSBPQ0ZTMl9YQVRUUl9ST09UX1NJWkUJKHNpemVvZihzdHJ1Y3Qgb2NmczJfeGF0dHJfZGVmX3ZhbHVlX3Jvb3QpKQorI2RlZmluZSBPQ0ZTMl9YQVRUUl9JTkxJTkVfU0laRQk4MAorCitzdGF0aWMgc3RydWN0IG9jZnMyX3hhdHRyX2RlZl92YWx1ZV9yb290IGRlZl94diA9IHsKKwkueHYueHJfbGlzdC5sX2NvdW50ID0gY3B1X3RvX2xlMTYoMSksCit9OworCitzdHJ1Y3QgeGF0dHJfaGFuZGxlciAqb2NmczJfeGF0dHJfaGFuZGxlcnNbXSA9IHsKKwkmb2NmczJfeGF0dHJfdXNlcl9oYW5kbGVyLAorCSZvY2ZzMl94YXR0cl90cnVzdGVkX2hhbmRsZXIsCisJTlVMTAorfTsKKworc3RhdGljIHN0cnVjdCB4YXR0cl9oYW5kbGVyICpvY2ZzMl94YXR0cl9oYW5kbGVyX21hcFtdID0geworCVtPQ0ZTMl9YQVRUUl9JTkRFWF9VU0VSXQk9ICZvY2ZzMl94YXR0cl91c2VyX2hhbmRsZXIsCisJW09DRlMyX1hBVFRSX0lOREVYX1RSVVNURURdCT0gJm9jZnMyX3hhdHRyX3RydXN0ZWRfaGFuZGxlciwKK307CisKK3N0cnVjdCBvY2ZzMl94YXR0cl9pbmZvIHsKKwlpbnQgbmFtZV9pbmRleDsKKwljb25zdCBjaGFyICpuYW1lOworCWNvbnN0IHZvaWQgKnZhbHVlOworCXNpemVfdCB2YWx1ZV9sZW47Cit9OworCitzdHJ1Y3Qgb2NmczJfeGF0dHJfc2VhcmNoIHsKKwlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmlub2RlX2JoOworCS8qCisJICogeGF0dHJfYmggcG9pbnQgdG8gdGhlIGJsb2NrIGJ1ZmZlciBoZWFkIHdoaWNoIGhhcyBleHRlbmRlZCBhdHRyaWJ1dGUKKwkgKiB3aGVuIGV4dGVuZGVkIGF0dHJpYnV0ZSBpbiBpbm9kZSwgeGF0dHJfYmggaXMgZXF1YWwgdG8gaW5vZGVfYmguCisJICovCisJc3RydWN0IGJ1ZmZlcl9oZWFkICp4YXR0cl9iaDsKKwlzdHJ1Y3Qgb2NmczJfeGF0dHJfaGVhZGVyICpoZWFkZXI7CisJc3RydWN0IG9jZnMyX3hhdHRyX2J1Y2tldCBidWNrZXQ7CisJdm9pZCAqYmFzZTsKKwl2b2lkICplbmQ7CisJc3RydWN0IG9jZnMyX3hhdHRyX2VudHJ5ICpoZXJlOworCWludCBub3RfZm91bmQ7Cit9OworCitzdGF0aWMgaW50IG9jZnMyX3hhdHRyX2J1Y2tldF9nZXRfbmFtZV92YWx1ZShzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkJCQkgICAgIHN0cnVjdCBvY2ZzMl94YXR0cl9oZWFkZXIgKnhoLAorCQkJCQkgICAgIGludCBpbmRleCwKKwkJCQkJICAgICBpbnQgKmJsb2NrX29mZiwKKwkJCQkJICAgICBpbnQgKm5ld19vZmZzZXQpOworCitzdGF0aWMgaW50IG9jZnMyX3hhdHRyX2luZGV4X2Jsb2NrX2ZpbmQoc3RydWN0IGlub2RlICppbm9kZSwKKwkJCQkJc3RydWN0IGJ1ZmZlcl9oZWFkICpyb290X2JoLAorCQkJCQlpbnQgbmFtZV9pbmRleCwKKwkJCQkJY29uc3QgY2hhciAqbmFtZSwKKwkJCQkJc3RydWN0IG9jZnMyX3hhdHRyX3NlYXJjaCAqeHMpOworCitzdGF0aWMgaW50IG9jZnMyX3hhdHRyX3RyZWVfbGlzdF9pbmRleF9ibG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkJCQlzdHJ1Y3Qgb2NmczJfeGF0dHJfdHJlZV9yb290ICp4dCwKKwkJCQkJY2hhciAqYnVmZmVyLAorCQkJCQlzaXplX3QgYnVmZmVyX3NpemUpOworCitzdGF0aWMgaW50IG9jZnMyX3hhdHRyX2NyZWF0ZV9pbmRleF9ibG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkJCQkgIHN0cnVjdCBvY2ZzMl94YXR0cl9zZWFyY2ggKnhzKTsKKworc3RhdGljIGludCBvY2ZzMl94YXR0cl9zZXRfZW50cnlfaW5kZXhfYmxvY2soc3RydWN0IGlub2RlICppbm9kZSwKKwkJCQkJICAgICBzdHJ1Y3Qgb2NmczJfeGF0dHJfaW5mbyAqeGksCisJCQkJCSAgICAgc3RydWN0IG9jZnMyX3hhdHRyX3NlYXJjaCAqeHMpOworCitzdGF0aWMgaW50IG9jZnMyX2RlbGV0ZV94YXR0cl9pbmRleF9ibG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkJCQkgIHN0cnVjdCBidWZmZXJfaGVhZCAqeGJfYmgpOworCitzdGF0aWMgaW5saW5lIGNvbnN0IGNoYXIgKm9jZnMyX3hhdHRyX3ByZWZpeChpbnQgbmFtZV9pbmRleCkKK3sKKwlzdHJ1Y3QgeGF0dHJfaGFuZGxlciAqaGFuZGxlciA9IE5VTEw7CisKKwlpZiAobmFtZV9pbmRleCA+IDAgJiYgbmFtZV9pbmRleCA8IE9DRlMyX1hBVFRSX01BWCkKKwkJaGFuZGxlciA9IG9jZnMyX3hhdHRyX2hhbmRsZXJfbWFwW25hbWVfaW5kZXhdOworCisJcmV0dXJuIGhhbmRsZXIgPyBoYW5kbGVyLT5wcmVmaXggOiBOVUxMOworfQorCitzdGF0aWMgdTMyIG9jZnMyX3hhdHRyX25hbWVfaGFzaChzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkJCSBjb25zdCBjaGFyICpuYW1lLAorCQkJCSBpbnQgbmFtZV9sZW4pCit7CisJLyogR2V0IGhhc2ggdmFsdWUgb2YgdXVpZCBmcm9tIHN1cGVyIGJsb2NrICovCisJdTMyIGhhc2ggPSBPQ0ZTMl9TQihpbm9kZS0+aV9zYiktPnV1aWRfaGFzaDsKKwlpbnQgaTsKKworCS8qIGhhc2ggZXh0ZW5kZWQgYXR0cmlidXRlIG5hbWUgKi8KKwlmb3IgKGkgPSAwOyBpIDwgbmFtZV9sZW47IGkrKykgeworCQloYXNoID0gKGhhc2ggPDwgT0NGUzJfSEFTSF9TSElGVCkgXgorCQkgICAgICAgKGhhc2ggPj4gKDgqc2l6ZW9mKGhhc2gpIC0gT0NGUzJfSEFTSF9TSElGVCkpIF4KKwkJICAgICAgICpuYW1lKys7CisJfQorCisJcmV0dXJuIGhhc2g7Cit9CisKKy8qCisgKiBvY2ZzMl94YXR0cl9oYXNoX2VudHJ5KCkKKyAqCisgKiBDb21wdXRlIHRoZSBoYXNoIG9mIGFuIGV4dGVuZGVkIGF0dHJpYnV0ZS4KKyAqLworc3RhdGljIHZvaWQgb2NmczJfeGF0dHJfaGFzaF9lbnRyeShzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkJCSAgIHN0cnVjdCBvY2ZzMl94YXR0cl9oZWFkZXIgKmhlYWRlciwKKwkJCQkgICBzdHJ1Y3Qgb2NmczJfeGF0dHJfZW50cnkgKmVudHJ5KQoreworCXUzMiBoYXNoID0gMDsKKwljaGFyICpuYW1lID0gKGNoYXIgKiloZWFkZXIgKyBsZTE2X3RvX2NwdShlbnRyeS0+eGVfbmFtZV9vZmZzZXQpOworCisJaGFzaCA9IG9jZnMyX3hhdHRyX25hbWVfaGFzaChpbm9kZSwgbmFtZSwgZW50cnktPnhlX25hbWVfbGVuKTsKKwllbnRyeS0+eGVfbmFtZV9oYXNoID0gY3B1X3RvX2xlMzIoaGFzaCk7CisKKwlyZXR1cm47Cit9CisKK3N0YXRpYyBpbnQgb2NmczJfeGF0dHJfZXh0ZW5kX2FsbG9jYXRpb24oc3RydWN0IGlub2RlICppbm9kZSwKKwkJCQkJIHUzMiBjbHVzdGVyc190b19hZGQsCisJCQkJCSBzdHJ1Y3QgYnVmZmVyX2hlYWQgKnhhdHRyX2JoLAorCQkJCQkgc3RydWN0IG9jZnMyX3hhdHRyX3ZhbHVlX3Jvb3QgKnh2KQoreworCWludCBzdGF0dXMgPSAwOworCWludCByZXN0YXJ0X2Z1bmMgPSAwOworCWludCBjcmVkaXRzID0gMDsKKwloYW5kbGVfdCAqaGFuZGxlID0gTlVMTDsKKwlzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqZGF0YV9hYyA9IE5VTEw7CisJc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKm1ldGFfYWMgPSBOVUxMOworCWVudW0gb2NmczJfYWxsb2NfcmVzdGFydGVkIHdoeTsKKwlzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiA9IE9DRlMyX1NCKGlub2RlLT5pX3NiKTsKKwl1MzIgcHJldl9jbHVzdGVycywgbG9naWNhbF9zdGFydCA9IGxlMzJfdG9fY3B1KHh2LT54cl9jbHVzdGVycyk7CisJc3RydWN0IG9jZnMyX2V4dGVudF90cmVlIGV0OworCisJbWxvZygwLCAiKGNsdXN0ZXJzX3RvX2FkZCBmb3IgeGF0dHI9ICV1KVxuIiwgY2x1c3RlcnNfdG9fYWRkKTsKKworCW9jZnMyX2luaXRfeGF0dHJfdmFsdWVfZXh0ZW50X3RyZWUoJmV0LCBpbm9kZSwgeGF0dHJfYmgsIHh2KTsKKworcmVzdGFydF9hbGw6CisKKwlzdGF0dXMgPSBvY2ZzMl9sb2NrX2FsbG9jYXRvcnMoaW5vZGUsICZldCwgY2x1c3RlcnNfdG9fYWRkLCAwLAorCQkJCSAgICAgICAmZGF0YV9hYywgJm1ldGFfYWMpOworCWlmIChzdGF0dXMpIHsKKwkJbWxvZ19lcnJubyhzdGF0dXMpOworCQlnb3RvIGxlYXZlOworCX0KKworCWNyZWRpdHMgPSBvY2ZzMl9jYWxjX2V4dGVuZF9jcmVkaXRzKG9zYi0+c2IsIGV0LmV0X3Jvb3RfZWwsCisJCQkJCSAgICBjbHVzdGVyc190b19hZGQpOworCWhhbmRsZSA9IG9jZnMyX3N0YXJ0X3RyYW5zKG9zYiwgY3JlZGl0cyk7CisJaWYgKElTX0VSUihoYW5kbGUpKSB7CisJCXN0YXR1cyA9IFBUUl9FUlIoaGFuZGxlKTsKKwkJaGFuZGxlID0gTlVMTDsKKwkJbWxvZ19lcnJubyhzdGF0dXMpOworCQlnb3RvIGxlYXZlOworCX0KKworcmVzdGFydGVkX3RyYW5zYWN0aW9uOgorCXN0YXR1cyA9IG9jZnMyX2pvdXJuYWxfYWNjZXNzKGhhbmRsZSwgaW5vZGUsIHhhdHRyX2JoLAorCQkJCSAgICAgIE9DRlMyX0pPVVJOQUxfQUNDRVNTX1dSSVRFKTsKKwlpZiAoc3RhdHVzIDwgMCkgeworCQltbG9nX2Vycm5vKHN0YXR1cyk7CisJCWdvdG8gbGVhdmU7CisJfQorCisJcHJldl9jbHVzdGVycyA9IGxlMzJfdG9fY3B1KHh2LT54cl9jbHVzdGVycyk7CisJc3RhdHVzID0gb2NmczJfYWRkX2NsdXN0ZXJzX2luX2J0cmVlKG9zYiwKKwkJCQkJICAgICBpbm9kZSwKKwkJCQkJICAgICAmbG9naWNhbF9zdGFydCwKKwkJCQkJICAgICBjbHVzdGVyc190b19hZGQsCisJCQkJCSAgICAgMCwKKwkJCQkJICAgICAmZXQsCisJCQkJCSAgICAgaGFuZGxlLAorCQkJCQkgICAgIGRhdGFfYWMsCisJCQkJCSAgICAgbWV0YV9hYywKKwkJCQkJICAgICAmd2h5KTsKKwlpZiAoKHN0YXR1cyA8IDApICYmIChzdGF0dXMgIT0gLUVBR0FJTikpIHsKKwkJaWYgKHN0YXR1cyAhPSAtRU5PU1BDKQorCQkJbWxvZ19lcnJubyhzdGF0dXMpOworCQlnb3RvIGxlYXZlOworCX0KKworCXN0YXR1cyA9IG9jZnMyX2pvdXJuYWxfZGlydHkoaGFuZGxlLCB4YXR0cl9iaCk7CisJaWYgKHN0YXR1cyA8IDApIHsKKwkJbWxvZ19lcnJubyhzdGF0dXMpOworCQlnb3RvIGxlYXZlOworCX0KKworCWNsdXN0ZXJzX3RvX2FkZCAtPSBsZTMyX3RvX2NwdSh4di0+eHJfY2x1c3RlcnMpIC0gcHJldl9jbHVzdGVyczsKKworCWlmICh3aHkgIT0gUkVTVEFSVF9OT05FICYmIGNsdXN0ZXJzX3RvX2FkZCkgeworCQlpZiAod2h5ID09IFJFU1RBUlRfTUVUQSkgeworCQkJbWxvZygwLCAicmVzdGFydGluZyBmdW5jdGlvbi5cbiIpOworCQkJcmVzdGFydF9mdW5jID0gMTsKKwkJfSBlbHNlIHsKKwkJCUJVR19PTih3aHkgIT0gUkVTVEFSVF9UUkFOUyk7CisKKwkJCW1sb2coMCwgInJlc3RhcnRpbmcgdHJhbnNhY3Rpb24uXG4iKTsKKwkJCS8qIFRPRE86IFRoaXMgY2FuIGJlIG1vcmUgaW50ZWxsaWdlbnQuICovCisJCQljcmVkaXRzID0gb2NmczJfY2FsY19leHRlbmRfY3JlZGl0cyhvc2ItPnNiLAorCQkJCQkJCSAgICBldC5ldF9yb290X2VsLAorCQkJCQkJCSAgICBjbHVzdGVyc190b19hZGQpOworCQkJc3RhdHVzID0gb2NmczJfZXh0ZW5kX3RyYW5zKGhhbmRsZSwgY3JlZGl0cyk7CisJCQlpZiAoc3RhdHVzIDwgMCkgeworCQkJCS8qIGhhbmRsZSBzdGlsbCBoYXMgdG8gYmUgY29tbWl0dGVkIGF0CisJCQkJICogdGhpcyBwb2ludC4gKi8KKwkJCQlzdGF0dXMgPSAtRU5PTUVNOworCQkJCW1sb2dfZXJybm8oc3RhdHVzKTsKKwkJCQlnb3RvIGxlYXZlOworCQkJfQorCQkJZ290byByZXN0YXJ0ZWRfdHJhbnNhY3Rpb247CisJCX0KKwl9CisKK2xlYXZlOgorCWlmIChoYW5kbGUpIHsKKwkJb2NmczJfY29tbWl0X3RyYW5zKG9zYiwgaGFuZGxlKTsKKwkJaGFuZGxlID0gTlVMTDsKKwl9CisJaWYgKGRhdGFfYWMpIHsKKwkJb2NmczJfZnJlZV9hbGxvY19jb250ZXh0KGRhdGFfYWMpOworCQlkYXRhX2FjID0gTlVMTDsKKwl9CisJaWYgKG1ldGFfYWMpIHsKKwkJb2NmczJfZnJlZV9hbGxvY19jb250ZXh0KG1ldGFfYWMpOworCQltZXRhX2FjID0gTlVMTDsKKwl9CisJaWYgKCghc3RhdHVzKSAmJiByZXN0YXJ0X2Z1bmMpIHsKKwkJcmVzdGFydF9mdW5jID0gMDsKKwkJZ290byByZXN0YXJ0X2FsbDsKKwl9CisKKwlyZXR1cm4gc3RhdHVzOworfQorCitzdGF0aWMgaW50IF9fb2NmczJfcmVtb3ZlX3hhdHRyX3JhbmdlKHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCQkJICAgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpyb290X2JoLAorCQkJCSAgICAgIHN0cnVjdCBvY2ZzMl94YXR0cl92YWx1ZV9yb290ICp4diwKKwkJCQkgICAgICB1MzIgY3BvcywgdTMyIHBoeXNfY3BvcywgdTMyIGxlbiwKKwkJCQkgICAgICBzdHJ1Y3Qgb2NmczJfY2FjaGVkX2RlYWxsb2NfY3R4dCAqZGVhbGxvYykKK3sKKwlpbnQgcmV0OworCXU2NCBwaHlzX2Jsa25vID0gb2NmczJfY2x1c3RlcnNfdG9fYmxvY2tzKGlub2RlLT5pX3NiLCBwaHlzX2Nwb3MpOworCXN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiID0gT0NGUzJfU0IoaW5vZGUtPmlfc2IpOworCXN0cnVjdCBpbm9kZSAqdGxfaW5vZGUgPSBvc2ItPm9zYl90bF9pbm9kZTsKKwloYW5kbGVfdCAqaGFuZGxlOworCXN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICptZXRhX2FjID0gTlVMTDsKKwlzdHJ1Y3Qgb2NmczJfZXh0ZW50X3RyZWUgZXQ7CisKKwlvY2ZzMl9pbml0X3hhdHRyX3ZhbHVlX2V4dGVudF90cmVlKCZldCwgaW5vZGUsIHJvb3RfYmgsIHh2KTsKKworCXJldCA9IG9jZnMyX2xvY2tfYWxsb2NhdG9ycyhpbm9kZSwgJmV0LCAwLCAxLCBOVUxMLCAmbWV0YV9hYyk7CisJaWYgKHJldCkgeworCQltbG9nX2Vycm5vKHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJbXV0ZXhfbG9jaygmdGxfaW5vZGUtPmlfbXV0ZXgpOworCisJaWYgKG9jZnMyX3RydW5jYXRlX2xvZ19uZWVkc19mbHVzaChvc2IpKSB7CisJCXJldCA9IF9fb2NmczJfZmx1c2hfdHJ1bmNhdGVfbG9nKG9zYik7CisJCWlmIChyZXQgPCAwKSB7CisJCQltbG9nX2Vycm5vKHJldCk7CisJCQlnb3RvIG91dDsKKwkJfQorCX0KKworCWhhbmRsZSA9IG9jZnMyX3N0YXJ0X3RyYW5zKG9zYiwgT0NGUzJfUkVNT1ZFX0VYVEVOVF9DUkVESVRTKTsKKwlpZiAoSVNfRVJSKGhhbmRsZSkpIHsKKwkJcmV0ID0gUFRSX0VSUihoYW5kbGUpOworCQltbG9nX2Vycm5vKHJldCk7CisJCWdvdG8gb3V0OworCX0KKworCXJldCA9IG9jZnMyX2pvdXJuYWxfYWNjZXNzKGhhbmRsZSwgaW5vZGUsIHJvb3RfYmgsCisJCQkJICAgT0NGUzJfSk9VUk5BTF9BQ0NFU1NfV1JJVEUpOworCWlmIChyZXQpIHsKKwkJbWxvZ19lcnJubyhyZXQpOworCQlnb3RvIG91dF9jb21taXQ7CisJfQorCisJcmV0ID0gb2NmczJfcmVtb3ZlX2V4dGVudChpbm9kZSwgJmV0LCBjcG9zLCBsZW4sIGhhbmRsZSwgbWV0YV9hYywKKwkJCQkgIGRlYWxsb2MpOworCWlmIChyZXQpIHsKKwkJbWxvZ19lcnJubyhyZXQpOworCQlnb3RvIG91dF9jb21taXQ7CisJfQorCisJbGUzMl9hZGRfY3B1KCZ4di0+eHJfY2x1c3RlcnMsIC1sZW4pOworCisJcmV0ID0gb2NmczJfam91cm5hbF9kaXJ0eShoYW5kbGUsIHJvb3RfYmgpOworCWlmIChyZXQpIHsKKwkJbWxvZ19lcnJubyhyZXQpOworCQlnb3RvIG91dF9jb21taXQ7CisJfQorCisJcmV0ID0gb2NmczJfdHJ1bmNhdGVfbG9nX2FwcGVuZChvc2IsIGhhbmRsZSwgcGh5c19ibGtubywgbGVuKTsKKwlpZiAocmV0KQorCQltbG9nX2Vycm5vKHJldCk7CisKK291dF9jb21taXQ6CisJb2NmczJfY29tbWl0X3RyYW5zKG9zYiwgaGFuZGxlKTsKK291dDoKKwltdXRleF91bmxvY2soJnRsX2lub2RlLT5pX211dGV4KTsKKworCWlmIChtZXRhX2FjKQorCQlvY2ZzMl9mcmVlX2FsbG9jX2NvbnRleHQobWV0YV9hYyk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IG9jZnMyX3hhdHRyX3Nocmlua19zaXplKHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCQkJICAgdTMyIG9sZF9jbHVzdGVycywKKwkJCQkgICB1MzIgbmV3X2NsdXN0ZXJzLAorCQkJCSAgIHN0cnVjdCBidWZmZXJfaGVhZCAqcm9vdF9iaCwKKwkJCQkgICBzdHJ1Y3Qgb2NmczJfeGF0dHJfdmFsdWVfcm9vdCAqeHYpCit7CisJaW50IHJldCA9IDA7CisJdTMyIHRydW5jX2xlbiwgY3BvcywgcGh5c19jcG9zLCBhbGxvY19zaXplOworCXU2NCBibG9jazsKKwlzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiA9IE9DRlMyX1NCKGlub2RlLT5pX3NiKTsKKwlzdHJ1Y3Qgb2NmczJfY2FjaGVkX2RlYWxsb2NfY3R4dCBkZWFsbG9jOworCisJb2NmczJfaW5pdF9kZWFsbG9jX2N0eHQoJmRlYWxsb2MpOworCisJaWYgKG9sZF9jbHVzdGVycyA8PSBuZXdfY2x1c3RlcnMpCisJCXJldHVybiAwOworCisJY3BvcyA9IG5ld19jbHVzdGVyczsKKwl0cnVuY19sZW4gPSBvbGRfY2x1c3RlcnMgLSBuZXdfY2x1c3RlcnM7CisJd2hpbGUgKHRydW5jX2xlbikgeworCQlyZXQgPSBvY2ZzMl94YXR0cl9nZXRfY2x1c3RlcnMoaW5vZGUsIGNwb3MsICZwaHlzX2Nwb3MsCisJCQkJCSAgICAgICAmYWxsb2Nfc2l6ZSwgJnh2LT54cl9saXN0KTsKKwkJaWYgKHJldCkgeworCQkJbWxvZ19lcnJubyhyZXQpOworCQkJZ290byBvdXQ7CisJCX0KKworCQlpZiAoYWxsb2Nfc2l6ZSA+IHRydW5jX2xlbikKKwkJCWFsbG9jX3NpemUgPSB0cnVuY19sZW47CisKKwkJcmV0ID0gX19vY2ZzMl9yZW1vdmVfeGF0dHJfcmFuZ2UoaW5vZGUsIHJvb3RfYmgsIHh2LCBjcG9zLAorCQkJCQkJIHBoeXNfY3BvcywgYWxsb2Nfc2l6ZSwKKwkJCQkJCSAmZGVhbGxvYyk7CisJCWlmIChyZXQpIHsKKwkJCW1sb2dfZXJybm8ocmV0KTsKKwkJCWdvdG8gb3V0OworCQl9CisKKwkJYmxvY2sgPSBvY2ZzMl9jbHVzdGVyc190b19ibG9ja3MoaW5vZGUtPmlfc2IsIHBoeXNfY3Bvcyk7CisJCW9jZnMyX3JlbW92ZV94YXR0cl9jbHVzdGVyc19mcm9tX2NhY2hlKGlub2RlLCBibG9jaywKKwkJCQkJCSAgICAgICBhbGxvY19zaXplKTsKKwkJY3BvcyArPSBhbGxvY19zaXplOworCQl0cnVuY19sZW4gLT0gYWxsb2Nfc2l6ZTsKKwl9CisKK291dDoKKwlvY2ZzMl9zY2hlZHVsZV90cnVuY2F0ZV9sb2dfZmx1c2gob3NiLCAxKTsKKwlvY2ZzMl9ydW5fZGVhbGxvY3Mob3NiLCAmZGVhbGxvYyk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IG9jZnMyX3hhdHRyX3ZhbHVlX3RydW5jYXRlKHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCQkJICAgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpyb290X2JoLAorCQkJCSAgICAgIHN0cnVjdCBvY2ZzMl94YXR0cl92YWx1ZV9yb290ICp4diwKKwkJCQkgICAgICBpbnQgbGVuKQoreworCWludCByZXQ7CisJdTMyIG5ld19jbHVzdGVycyA9IG9jZnMyX2NsdXN0ZXJzX2Zvcl9ieXRlcyhpbm9kZS0+aV9zYiwgbGVuKTsKKwl1MzIgb2xkX2NsdXN0ZXJzID0gbGUzMl90b19jcHUoeHYtPnhyX2NsdXN0ZXJzKTsKKworCWlmIChuZXdfY2x1c3RlcnMgPT0gb2xkX2NsdXN0ZXJzKQorCQlyZXR1cm4gMDsKKworCWlmIChuZXdfY2x1c3RlcnMgPiBvbGRfY2x1c3RlcnMpCisJCXJldCA9IG9jZnMyX3hhdHRyX2V4dGVuZF9hbGxvY2F0aW9uKGlub2RlLAorCQkJCQkJICAgIG5ld19jbHVzdGVycyAtIG9sZF9jbHVzdGVycywKKwkJCQkJCSAgICByb290X2JoLCB4dik7CisJZWxzZQorCQlyZXQgPSBvY2ZzMl94YXR0cl9zaHJpbmtfc2l6ZShpbm9kZSwKKwkJCQkJICAgICAgb2xkX2NsdXN0ZXJzLCBuZXdfY2x1c3RlcnMsCisJCQkJCSAgICAgIHJvb3RfYmgsIHh2KTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgb2NmczJfeGF0dHJfbGlzdF9lbnRyeShjaGFyICpidWZmZXIsIHNpemVfdCBzaXplLAorCQkJCSAgc2l6ZV90ICpyZXN1bHQsIGNvbnN0IGNoYXIgKnByZWZpeCwKKwkJCQkgIGNvbnN0IGNoYXIgKm5hbWUsIGludCBuYW1lX2xlbikKK3sKKwljaGFyICpwID0gYnVmZmVyICsgKnJlc3VsdDsKKwlpbnQgcHJlZml4X2xlbiA9IHN0cmxlbihwcmVmaXgpOworCWludCB0b3RhbF9sZW4gPSBwcmVmaXhfbGVuICsgbmFtZV9sZW4gKyAxOworCisJKnJlc3VsdCArPSB0b3RhbF9sZW47CisKKwkvKiB3ZSBhcmUganVzdCBsb29raW5nIGZvciBob3cgYmlnIG91ciBidWZmZXIgbmVlZHMgdG8gYmUgKi8KKwlpZiAoIXNpemUpCisJCXJldHVybiAwOworCisJaWYgKCpyZXN1bHQgPiBzaXplKQorCQlyZXR1cm4gLUVSQU5HRTsKKworCW1lbWNweShwLCBwcmVmaXgsIHByZWZpeF9sZW4pOworCW1lbWNweShwICsgcHJlZml4X2xlbiwgbmFtZSwgbmFtZV9sZW4pOworCXBbcHJlZml4X2xlbiArIG5hbWVfbGVuXSA9ICdcMCc7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBvY2ZzMl94YXR0cl9saXN0X2VudHJpZXMoc3RydWN0IGlub2RlICppbm9kZSwKKwkJCQkgICAgc3RydWN0IG9jZnMyX3hhdHRyX2hlYWRlciAqaGVhZGVyLAorCQkJCSAgICBjaGFyICpidWZmZXIsIHNpemVfdCBidWZmZXJfc2l6ZSkKK3sKKwlzaXplX3QgcmVzdWx0ID0gMDsKKwlpbnQgaSwgdHlwZSwgcmV0OworCWNvbnN0IGNoYXIgKnByZWZpeCwgKm5hbWU7CisKKwlmb3IgKGkgPSAwIDsgaSA8IGxlMTZfdG9fY3B1KGhlYWRlci0+eGhfY291bnQpOyBpKyspIHsKKwkJc3RydWN0IG9jZnMyX3hhdHRyX2VudHJ5ICplbnRyeSA9ICZoZWFkZXItPnhoX2VudHJpZXNbaV07CisJCXR5cGUgPSBvY2ZzMl94YXR0cl9nZXRfdHlwZShlbnRyeSk7CisJCXByZWZpeCA9IG9jZnMyX3hhdHRyX3ByZWZpeCh0eXBlKTsKKworCQlpZiAocHJlZml4KSB7CisJCQluYW1lID0gKGNvbnN0IGNoYXIgKiloZWFkZXIgKworCQkJCWxlMTZfdG9fY3B1KGVudHJ5LT54ZV9uYW1lX29mZnNldCk7CisKKwkJCXJldCA9IG9jZnMyX3hhdHRyX2xpc3RfZW50cnkoYnVmZmVyLCBidWZmZXJfc2l6ZSwKKwkJCQkJCSAgICAgJnJlc3VsdCwgcHJlZml4LCBuYW1lLAorCQkJCQkJICAgICBlbnRyeS0+eGVfbmFtZV9sZW4pOworCQkJaWYgKHJldCkKKwkJCQlyZXR1cm4gcmV0OworCQl9CisJfQorCisJcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIGludCBvY2ZzMl94YXR0cl9pYm9keV9saXN0KHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCQkJICBzdHJ1Y3Qgb2NmczJfZGlub2RlICpkaSwKKwkJCQkgIGNoYXIgKmJ1ZmZlciwKKwkJCQkgIHNpemVfdCBidWZmZXJfc2l6ZSkKK3sKKwlzdHJ1Y3Qgb2NmczJfeGF0dHJfaGVhZGVyICpoZWFkZXIgPSBOVUxMOworCXN0cnVjdCBvY2ZzMl9pbm9kZV9pbmZvICpvaSA9IE9DRlMyX0koaW5vZGUpOworCWludCByZXQgPSAwOworCisJaWYgKCEob2ktPmlwX2R5bl9mZWF0dXJlcyAmIE9DRlMyX0lOTElORV9YQVRUUl9GTCkpCisJCXJldHVybiByZXQ7CisKKwloZWFkZXIgPSAoc3RydWN0IG9jZnMyX3hhdHRyX2hlYWRlciAqKQorCQkgKCh2b2lkICopZGkgKyBpbm9kZS0+aV9zYi0+c19ibG9ja3NpemUgLQorCQkgbGUxNl90b19jcHUoZGktPmlfeGF0dHJfaW5saW5lX3NpemUpKTsKKworCXJldCA9IG9jZnMyX3hhdHRyX2xpc3RfZW50cmllcyhpbm9kZSwgaGVhZGVyLCBidWZmZXIsIGJ1ZmZlcl9zaXplKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgb2NmczJfeGF0dHJfYmxvY2tfbGlzdChzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkJCSAgc3RydWN0IG9jZnMyX2Rpbm9kZSAqZGksCisJCQkJICBjaGFyICpidWZmZXIsCisJCQkJICBzaXplX3QgYnVmZmVyX3NpemUpCit7CisJc3RydWN0IGJ1ZmZlcl9oZWFkICpibGtfYmggPSBOVUxMOworCXN0cnVjdCBvY2ZzMl94YXR0cl9ibG9jayAqeGI7CisJaW50IHJldCA9IDA7CisKKwlpZiAoIWRpLT5pX3hhdHRyX2xvYykKKwkJcmV0dXJuIHJldDsKKworCXJldCA9IG9jZnMyX3JlYWRfYmxvY2soaW5vZGUsIGxlNjRfdG9fY3B1KGRpLT5pX3hhdHRyX2xvYyksICZibGtfYmgpOworCWlmIChyZXQgPCAwKSB7CisJCW1sb2dfZXJybm8ocmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisJLypWZXJpZnkgdGhlIHNpZ25hdHVyZSBvZiB4YXR0ciBibG9jayovCisJaWYgKG1lbWNtcCgodm9pZCAqKWJsa19iaC0+Yl9kYXRhLCBPQ0ZTMl9YQVRUUl9CTE9DS19TSUdOQVRVUkUsCisJCSAgIHN0cmxlbihPQ0ZTMl9YQVRUUl9CTE9DS19TSUdOQVRVUkUpKSkgeworCQlyZXQgPSAtRUZBVUxUOworCQlnb3RvIGNsZWFudXA7CisJfQorCisJeGIgPSAoc3RydWN0IG9jZnMyX3hhdHRyX2Jsb2NrICopYmxrX2JoLT5iX2RhdGE7CisKKwlpZiAoIShsZTE2X3RvX2NwdSh4Yi0+eGJfZmxhZ3MpICYgT0NGUzJfWEFUVFJfSU5ERVhFRCkpIHsKKwkJc3RydWN0IG9jZnMyX3hhdHRyX2hlYWRlciAqaGVhZGVyID0gJnhiLT54Yl9hdHRycy54Yl9oZWFkZXI7CisJCXJldCA9IG9jZnMyX3hhdHRyX2xpc3RfZW50cmllcyhpbm9kZSwgaGVhZGVyLAorCQkJCQkgICAgICAgYnVmZmVyLCBidWZmZXJfc2l6ZSk7CisJfSBlbHNlIHsKKwkJc3RydWN0IG9jZnMyX3hhdHRyX3RyZWVfcm9vdCAqeHQgPSAmeGItPnhiX2F0dHJzLnhiX3Jvb3Q7CisJCXJldCA9IG9jZnMyX3hhdHRyX3RyZWVfbGlzdF9pbmRleF9ibG9jayhpbm9kZSwgeHQsCisJCQkJCQkgICBidWZmZXIsIGJ1ZmZlcl9zaXplKTsKKwl9CitjbGVhbnVwOgorCWJyZWxzZShibGtfYmgpOworCisJcmV0dXJuIHJldDsKK30KKworc3NpemVfdCBvY2ZzMl9saXN0eGF0dHIoc3RydWN0IGRlbnRyeSAqZGVudHJ5LAorCQkJY2hhciAqYnVmZmVyLAorCQkJc2l6ZV90IHNpemUpCit7CisJaW50IHJldCA9IDAsIGlfcmV0ID0gMCwgYl9yZXQgPSAwOworCXN0cnVjdCBidWZmZXJfaGVhZCAqZGlfYmggPSBOVUxMOworCXN0cnVjdCBvY2ZzMl9kaW5vZGUgKmRpID0gTlVMTDsKKwlzdHJ1Y3Qgb2NmczJfaW5vZGVfaW5mbyAqb2kgPSBPQ0ZTMl9JKGRlbnRyeS0+ZF9pbm9kZSk7CisKKwlpZiAoIW9jZnMyX3N1cHBvcnRzX3hhdHRyKE9DRlMyX1NCKGRlbnRyeS0+ZF9zYikpKQorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisKKwlpZiAoIShvaS0+aXBfZHluX2ZlYXR1cmVzICYgT0NGUzJfSEFTX1hBVFRSX0ZMKSkKKwkJcmV0dXJuIHJldDsKKworCXJldCA9IG9jZnMyX2lub2RlX2xvY2soZGVudHJ5LT5kX2lub2RlLCAmZGlfYmgsIDApOworCWlmIChyZXQgPCAwKSB7CisJCW1sb2dfZXJybm8ocmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlkaSA9IChzdHJ1Y3Qgb2NmczJfZGlub2RlICopZGlfYmgtPmJfZGF0YTsKKworCWRvd25fcmVhZCgmb2ktPmlwX3hhdHRyX3NlbSk7CisJaV9yZXQgPSBvY2ZzMl94YXR0cl9pYm9keV9saXN0KGRlbnRyeS0+ZF9pbm9kZSwgZGksIGJ1ZmZlciwgc2l6ZSk7CisJaWYgKGlfcmV0IDwgMCkKKwkJYl9yZXQgPSAwOworCWVsc2UgeworCQlpZiAoYnVmZmVyKSB7CisJCQlidWZmZXIgKz0gaV9yZXQ7CisJCQlzaXplIC09IGlfcmV0OworCQl9CisJCWJfcmV0ID0gb2NmczJfeGF0dHJfYmxvY2tfbGlzdChkZW50cnktPmRfaW5vZGUsIGRpLAorCQkJCQkgICAgICAgYnVmZmVyLCBzaXplKTsKKwkJaWYgKGJfcmV0IDwgMCkKKwkJCWlfcmV0ID0gMDsKKwl9CisJdXBfcmVhZCgmb2ktPmlwX3hhdHRyX3NlbSk7CisJb2NmczJfaW5vZGVfdW5sb2NrKGRlbnRyeS0+ZF9pbm9kZSwgMCk7CisKKwlicmVsc2UoZGlfYmgpOworCisJcmV0dXJuIGlfcmV0ICsgYl9yZXQ7Cit9CisKK3N0YXRpYyBpbnQgb2NmczJfeGF0dHJfZmluZF9lbnRyeShpbnQgbmFtZV9pbmRleCwKKwkJCQkgIGNvbnN0IGNoYXIgKm5hbWUsCisJCQkJICBzdHJ1Y3Qgb2NmczJfeGF0dHJfc2VhcmNoICp4cykKK3sKKwlzdHJ1Y3Qgb2NmczJfeGF0dHJfZW50cnkgKmVudHJ5OworCXNpemVfdCBuYW1lX2xlbjsKKwlpbnQgaSwgY21wID0gMTsKKworCWlmIChuYW1lID09IE5VTEwpCisJCXJldHVybiAtRUlOVkFMOworCisJbmFtZV9sZW4gPSBzdHJsZW4obmFtZSk7CisJZW50cnkgPSB4cy0+aGVyZTsKKwlmb3IgKGkgPSAwOyBpIDwgbGUxNl90b19jcHUoeHMtPmhlYWRlci0+eGhfY291bnQpOyBpKyspIHsKKwkJY21wID0gbmFtZV9pbmRleCAtIG9jZnMyX3hhdHRyX2dldF90eXBlKGVudHJ5KTsKKwkJaWYgKCFjbXApCisJCQljbXAgPSBuYW1lX2xlbiAtIGVudHJ5LT54ZV9uYW1lX2xlbjsKKwkJaWYgKCFjbXApCisJCQljbXAgPSBtZW1jbXAobmFtZSwgKHhzLT5iYXNlICsKKwkJCQkgICAgIGxlMTZfdG9fY3B1KGVudHJ5LT54ZV9uYW1lX29mZnNldCkpLAorCQkJCSAgICAgbmFtZV9sZW4pOworCQlpZiAoY21wID09IDApCisJCQlicmVhazsKKwkJZW50cnkgKz0gMTsKKwl9CisJeHMtPmhlcmUgPSBlbnRyeTsKKworCXJldHVybiBjbXAgPyAtRU5PREFUQSA6IDA7Cit9CisKK3N0YXRpYyBpbnQgb2NmczJfeGF0dHJfZ2V0X3ZhbHVlX291dHNpZGUoc3RydWN0IGlub2RlICppbm9kZSwKKwkJCQkJIHN0cnVjdCBvY2ZzMl94YXR0cl92YWx1ZV9yb290ICp4diwKKwkJCQkJIHZvaWQgKmJ1ZmZlciwKKwkJCQkJIHNpemVfdCBsZW4pCit7CisJdTMyIGNwb3MsIHBfY2x1c3RlciwgbnVtX2NsdXN0ZXJzLCBicGMsIGNsdXN0ZXJzOworCXU2NCBibGtubzsKKwlpbnQgaSwgcmV0ID0gMDsKKwlzaXplX3QgY3BsZW4sIGJsb2Nrc2l6ZTsKKwlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoID0gTlVMTDsKKwlzdHJ1Y3Qgb2NmczJfZXh0ZW50X2xpc3QgKmVsOworCisJZWwgPSAmeHYtPnhyX2xpc3Q7CisJY2x1c3RlcnMgPSBsZTMyX3RvX2NwdSh4di0+eHJfY2x1c3RlcnMpOworCWJwYyA9IG9jZnMyX2NsdXN0ZXJzX3RvX2Jsb2Nrcyhpbm9kZS0+aV9zYiwgMSk7CisJYmxvY2tzaXplID0gaW5vZGUtPmlfc2ItPnNfYmxvY2tzaXplOworCisJY3BvcyA9IDA7CisJd2hpbGUgKGNwb3MgPCBjbHVzdGVycykgeworCQlyZXQgPSBvY2ZzMl94YXR0cl9nZXRfY2x1c3RlcnMoaW5vZGUsIGNwb3MsICZwX2NsdXN0ZXIsCisJCQkJCSAgICAgICAmbnVtX2NsdXN0ZXJzLCBlbCk7CisJCWlmIChyZXQpIHsKKwkJCW1sb2dfZXJybm8ocmV0KTsKKwkJCWdvdG8gb3V0OworCQl9CisKKwkJYmxrbm8gPSBvY2ZzMl9jbHVzdGVyc190b19ibG9ja3MoaW5vZGUtPmlfc2IsIHBfY2x1c3Rlcik7CisJCS8qIENvcHkgb2NmczJfeGF0dHJfdmFsdWUgKi8KKwkJZm9yIChpID0gMDsgaSA8IG51bV9jbHVzdGVycyAqIGJwYzsgaSsrLCBibGtubysrKSB7CisJCQlyZXQgPSBvY2ZzMl9yZWFkX2Jsb2NrKGlub2RlLCBibGtubywgJmJoKTsKKwkJCWlmIChyZXQpIHsKKwkJCQltbG9nX2Vycm5vKHJldCk7CisJCQkJZ290byBvdXQ7CisJCQl9CisKKwkJCWNwbGVuID0gbGVuID49IGJsb2Nrc2l6ZSA/IGJsb2Nrc2l6ZSA6IGxlbjsKKwkJCW1lbWNweShidWZmZXIsIGJoLT5iX2RhdGEsIGNwbGVuKTsKKwkJCWxlbiAtPSBjcGxlbjsKKwkJCWJ1ZmZlciArPSBjcGxlbjsKKworCQkJYnJlbHNlKGJoKTsKKwkJCWJoID0gTlVMTDsKKwkJCWlmIChsZW4gPT0gMCkKKwkJCQlicmVhazsKKwkJfQorCQljcG9zICs9IG51bV9jbHVzdGVyczsKKwl9CitvdXQ6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBvY2ZzMl94YXR0cl9pYm9keV9nZXQoc3RydWN0IGlub2RlICppbm9kZSwKKwkJCQkgaW50IG5hbWVfaW5kZXgsCisJCQkJIGNvbnN0IGNoYXIgKm5hbWUsCisJCQkJIHZvaWQgKmJ1ZmZlciwKKwkJCQkgc2l6ZV90IGJ1ZmZlcl9zaXplLAorCQkJCSBzdHJ1Y3Qgb2NmczJfeGF0dHJfc2VhcmNoICp4cykKK3sKKwlzdHJ1Y3Qgb2NmczJfaW5vZGVfaW5mbyAqb2kgPSBPQ0ZTMl9JKGlub2RlKTsKKwlzdHJ1Y3Qgb2NmczJfZGlub2RlICpkaSA9IChzdHJ1Y3Qgb2NmczJfZGlub2RlICopeHMtPmlub2RlX2JoLT5iX2RhdGE7CisJc3RydWN0IG9jZnMyX3hhdHRyX3ZhbHVlX3Jvb3QgKnh2OworCXNpemVfdCBzaXplOworCWludCByZXQgPSAwOworCisJaWYgKCEob2ktPmlwX2R5bl9mZWF0dXJlcyAmIE9DRlMyX0lOTElORV9YQVRUUl9GTCkpCisJCXJldHVybiAtRU5PREFUQTsKKworCXhzLT5lbmQgPSAodm9pZCAqKWRpICsgaW5vZGUtPmlfc2ItPnNfYmxvY2tzaXplOworCXhzLT5oZWFkZXIgPSAoc3RydWN0IG9jZnMyX3hhdHRyX2hlYWRlciAqKQorCQkJKHhzLT5lbmQgLSBsZTE2X3RvX2NwdShkaS0+aV94YXR0cl9pbmxpbmVfc2l6ZSkpOworCXhzLT5iYXNlID0gKHZvaWQgKil4cy0+aGVhZGVyOworCXhzLT5oZXJlID0geHMtPmhlYWRlci0+eGhfZW50cmllczsKKworCXJldCA9IG9jZnMyX3hhdHRyX2ZpbmRfZW50cnkobmFtZV9pbmRleCwgbmFtZSwgeHMpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisJc2l6ZSA9IGxlNjRfdG9fY3B1KHhzLT5oZXJlLT54ZV92YWx1ZV9zaXplKTsKKwlpZiAoYnVmZmVyKSB7CisJCWlmIChzaXplID4gYnVmZmVyX3NpemUpCisJCQlyZXR1cm4gLUVSQU5HRTsKKwkJaWYgKG9jZnMyX3hhdHRyX2lzX2xvY2FsKHhzLT5oZXJlKSkgeworCQkJbWVtY3B5KGJ1ZmZlciwgKHZvaWQgKil4cy0+YmFzZSArCisJCQkgICAgICAgbGUxNl90b19jcHUoeHMtPmhlcmUtPnhlX25hbWVfb2Zmc2V0KSArCisJCQkgICAgICAgT0NGUzJfWEFUVFJfU0laRSh4cy0+aGVyZS0+eGVfbmFtZV9sZW4pLCBzaXplKTsKKwkJfSBlbHNlIHsKKwkJCXh2ID0gKHN0cnVjdCBvY2ZzMl94YXR0cl92YWx1ZV9yb290ICopCisJCQkJKHhzLT5iYXNlICsgbGUxNl90b19jcHUoCisJCQkJIHhzLT5oZXJlLT54ZV9uYW1lX29mZnNldCkgKworCQkJCU9DRlMyX1hBVFRSX1NJWkUoeHMtPmhlcmUtPnhlX25hbWVfbGVuKSk7CisJCQlyZXQgPSBvY2ZzMl94YXR0cl9nZXRfdmFsdWVfb3V0c2lkZShpbm9kZSwgeHYsCisJCQkJCQkJICAgIGJ1ZmZlciwgc2l6ZSk7CisJCQlpZiAocmV0IDwgMCkgeworCQkJCW1sb2dfZXJybm8ocmV0KTsKKwkJCQlyZXR1cm4gcmV0OworCQkJfQorCQl9CisJfQorCisJcmV0dXJuIHNpemU7Cit9CisKK3N0YXRpYyBpbnQgb2NmczJfeGF0dHJfYmxvY2tfZ2V0KHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCQkJIGludCBuYW1lX2luZGV4LAorCQkJCSBjb25zdCBjaGFyICpuYW1lLAorCQkJCSB2b2lkICpidWZmZXIsCisJCQkJIHNpemVfdCBidWZmZXJfc2l6ZSwKKwkJCQkgc3RydWN0IG9jZnMyX3hhdHRyX3NlYXJjaCAqeHMpCit7CisJc3RydWN0IG9jZnMyX2Rpbm9kZSAqZGkgPSAoc3RydWN0IG9jZnMyX2Rpbm9kZSAqKXhzLT5pbm9kZV9iaC0+Yl9kYXRhOworCXN0cnVjdCBidWZmZXJfaGVhZCAqYmxrX2JoID0gTlVMTDsKKwlzdHJ1Y3Qgb2NmczJfeGF0dHJfYmxvY2sgKnhiOworCXN0cnVjdCBvY2ZzMl94YXR0cl92YWx1ZV9yb290ICp4djsKKwlzaXplX3Qgc2l6ZTsKKwlpbnQgcmV0ID0gLUVOT0RBVEEsIG5hbWVfb2Zmc2V0LCBuYW1lX2xlbiwgYmxvY2tfb2ZmLCBpOworCisJaWYgKCFkaS0+aV94YXR0cl9sb2MpCisJCXJldHVybiByZXQ7CisKKwltZW1zZXQoJnhzLT5idWNrZXQsIDAsIHNpemVvZih4cy0+YnVja2V0KSk7CisKKwlyZXQgPSBvY2ZzMl9yZWFkX2Jsb2NrKGlub2RlLCBsZTY0X3RvX2NwdShkaS0+aV94YXR0cl9sb2MpLCAmYmxrX2JoKTsKKwlpZiAocmV0IDwgMCkgeworCQltbG9nX2Vycm5vKHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCS8qVmVyaWZ5IHRoZSBzaWduYXR1cmUgb2YgeGF0dHIgYmxvY2sqLworCWlmIChtZW1jbXAoKHZvaWQgKilibGtfYmgtPmJfZGF0YSwgT0NGUzJfWEFUVFJfQkxPQ0tfU0lHTkFUVVJFLAorCQkgICBzdHJsZW4oT0NGUzJfWEFUVFJfQkxPQ0tfU0lHTkFUVVJFKSkpIHsKKwkJcmV0ID0gLUVGQVVMVDsKKwkJZ290byBjbGVhbnVwOworCX0KKworCXhzLT54YXR0cl9iaCA9IGJsa19iaDsKKwl4YiA9IChzdHJ1Y3Qgb2NmczJfeGF0dHJfYmxvY2sgKilibGtfYmgtPmJfZGF0YTsKKworCWlmICghKGxlMTZfdG9fY3B1KHhiLT54Yl9mbGFncykgJiBPQ0ZTMl9YQVRUUl9JTkRFWEVEKSkgeworCQl4cy0+aGVhZGVyID0gJnhiLT54Yl9hdHRycy54Yl9oZWFkZXI7CisJCXhzLT5iYXNlID0gKHZvaWQgKil4cy0+aGVhZGVyOworCQl4cy0+ZW5kID0gKHZvaWQgKikoYmxrX2JoLT5iX2RhdGEpICsgYmxrX2JoLT5iX3NpemU7CisJCXhzLT5oZXJlID0geHMtPmhlYWRlci0+eGhfZW50cmllczsKKworCQlyZXQgPSBvY2ZzMl94YXR0cl9maW5kX2VudHJ5KG5hbWVfaW5kZXgsIG5hbWUsIHhzKTsKKwl9IGVsc2UKKwkJcmV0ID0gb2NmczJfeGF0dHJfaW5kZXhfYmxvY2tfZmluZChpbm9kZSwgYmxrX2JoLAorCQkJCQkJICAgbmFtZV9pbmRleCwKKwkJCQkJCSAgIG5hbWUsIHhzKTsKKworCWlmIChyZXQpCisJCWdvdG8gY2xlYW51cDsKKwlzaXplID0gbGU2NF90b19jcHUoeHMtPmhlcmUtPnhlX3ZhbHVlX3NpemUpOworCWlmIChidWZmZXIpIHsKKwkJcmV0ID0gLUVSQU5HRTsKKwkJaWYgKHNpemUgPiBidWZmZXJfc2l6ZSkKKwkJCWdvdG8gY2xlYW51cDsKKworCQluYW1lX29mZnNldCA9IGxlMTZfdG9fY3B1KHhzLT5oZXJlLT54ZV9uYW1lX29mZnNldCk7CisJCW5hbWVfbGVuID0gT0NGUzJfWEFUVFJfU0laRSh4cy0+aGVyZS0+eGVfbmFtZV9sZW4pOworCQlpID0geHMtPmhlcmUgLSB4cy0+aGVhZGVyLT54aF9lbnRyaWVzOworCisJCWlmIChsZTE2X3RvX2NwdSh4Yi0+eGJfZmxhZ3MpICYgT0NGUzJfWEFUVFJfSU5ERVhFRCkgeworCQkJcmV0ID0gb2NmczJfeGF0dHJfYnVja2V0X2dldF9uYW1lX3ZhbHVlKGlub2RlLAorCQkJCQkJCQl4cy0+YnVja2V0LnhoLAorCQkJCQkJCQlpLAorCQkJCQkJCQkmYmxvY2tfb2ZmLAorCQkJCQkJCQkmbmFtZV9vZmZzZXQpOworCQkJeHMtPmJhc2UgPSB4cy0+YnVja2V0LmJoc1tibG9ja19vZmZdLT5iX2RhdGE7CisJCX0KKwkJaWYgKG9jZnMyX3hhdHRyX2lzX2xvY2FsKHhzLT5oZXJlKSkgeworCQkJbWVtY3B5KGJ1ZmZlciwgKHZvaWQgKil4cy0+YmFzZSArCisJCQkgICAgICAgbmFtZV9vZmZzZXQgKyBuYW1lX2xlbiwgc2l6ZSk7CisJCX0gZWxzZSB7CisJCQl4diA9IChzdHJ1Y3Qgb2NmczJfeGF0dHJfdmFsdWVfcm9vdCAqKQorCQkJCSh4cy0+YmFzZSArIG5hbWVfb2Zmc2V0ICsgbmFtZV9sZW4pOworCQkJcmV0ID0gb2NmczJfeGF0dHJfZ2V0X3ZhbHVlX291dHNpZGUoaW5vZGUsIHh2LAorCQkJCQkJCSAgICBidWZmZXIsIHNpemUpOworCQkJaWYgKHJldCA8IDApIHsKKwkJCQltbG9nX2Vycm5vKHJldCk7CisJCQkJZ290byBjbGVhbnVwOworCQkJfQorCQl9CisJfQorCXJldCA9IHNpemU7CitjbGVhbnVwOgorCWZvciAoaSA9IDA7IGkgPCBPQ0ZTMl9YQVRUUl9NQVhfQkxPQ0tTX1BFUl9CVUNLRVQ7IGkrKykKKwkJYnJlbHNlKHhzLT5idWNrZXQuYmhzW2ldKTsKKwltZW1zZXQoJnhzLT5idWNrZXQsIDAsIHNpemVvZih4cy0+YnVja2V0KSk7CisKKwlicmVsc2UoYmxrX2JoKTsKKwlyZXR1cm4gcmV0OworfQorCisvKiBvY2ZzMl94YXR0cl9nZXQoKQorICoKKyAqIENvcHkgYW4gZXh0ZW5kZWQgYXR0cmlidXRlIGludG8gdGhlIGJ1ZmZlciBwcm92aWRlZC4KKyAqIEJ1ZmZlciBpcyBOVUxMIHRvIGNvbXB1dGUgdGhlIHNpemUgb2YgYnVmZmVyIHJlcXVpcmVkLgorICovCitpbnQgb2NmczJfeGF0dHJfZ2V0KHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCSAgICBpbnQgbmFtZV9pbmRleCwKKwkJICAgIGNvbnN0IGNoYXIgKm5hbWUsCisJCSAgICB2b2lkICpidWZmZXIsCisJCSAgICBzaXplX3QgYnVmZmVyX3NpemUpCit7CisJaW50IHJldDsKKwlzdHJ1Y3Qgb2NmczJfZGlub2RlICpkaSA9IE5VTEw7CisJc3RydWN0IGJ1ZmZlcl9oZWFkICpkaV9iaCA9IE5VTEw7CisJc3RydWN0IG9jZnMyX2lub2RlX2luZm8gKm9pID0gT0NGUzJfSShpbm9kZSk7CisJc3RydWN0IG9jZnMyX3hhdHRyX3NlYXJjaCB4aXMgPSB7CisJCS5ub3RfZm91bmQgPSAtRU5PREFUQSwKKwl9OworCXN0cnVjdCBvY2ZzMl94YXR0cl9zZWFyY2ggeGJzID0geworCQkubm90X2ZvdW5kID0gLUVOT0RBVEEsCisJfTsKKworCWlmICghb2NmczJfc3VwcG9ydHNfeGF0dHIoT0NGUzJfU0IoaW5vZGUtPmlfc2IpKSkKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCisJaWYgKCEob2ktPmlwX2R5bl9mZWF0dXJlcyAmIE9DRlMyX0hBU19YQVRUUl9GTCkpCisJCXJldCA9IC1FTk9EQVRBOworCisJcmV0ID0gb2NmczJfaW5vZGVfbG9jayhpbm9kZSwgJmRpX2JoLCAwKTsKKwlpZiAocmV0IDwgMCkgeworCQltbG9nX2Vycm5vKHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCXhpcy5pbm9kZV9iaCA9IHhicy5pbm9kZV9iaCA9IGRpX2JoOworCWRpID0gKHN0cnVjdCBvY2ZzMl9kaW5vZGUgKilkaV9iaC0+Yl9kYXRhOworCisJZG93bl9yZWFkKCZvaS0+aXBfeGF0dHJfc2VtKTsKKwlyZXQgPSBvY2ZzMl94YXR0cl9pYm9keV9nZXQoaW5vZGUsIG5hbWVfaW5kZXgsIG5hbWUsIGJ1ZmZlciwKKwkJCQkgICAgYnVmZmVyX3NpemUsICZ4aXMpOworCWlmIChyZXQgPT0gLUVOT0RBVEEpCisJCXJldCA9IG9jZnMyX3hhdHRyX2Jsb2NrX2dldChpbm9kZSwgbmFtZV9pbmRleCwgbmFtZSwgYnVmZmVyLAorCQkJCQkgICAgYnVmZmVyX3NpemUsICZ4YnMpOworCXVwX3JlYWQoJm9pLT5pcF94YXR0cl9zZW0pOworCW9jZnMyX2lub2RlX3VubG9jayhpbm9kZSwgMCk7CisKKwlicmVsc2UoZGlfYmgpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBfX29jZnMyX3hhdHRyX3NldF92YWx1ZV9vdXRzaWRlKHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCQkJCSAgIHN0cnVjdCBvY2ZzMl94YXR0cl92YWx1ZV9yb290ICp4diwKKwkJCQkJICAgY29uc3Qgdm9pZCAqdmFsdWUsCisJCQkJCSAgIGludCB2YWx1ZV9sZW4pCit7CisJaW50IHJldCA9IDAsIGksIGNwX2xlbiwgY3JlZGl0czsKKwl1MTYgYmxvY2tzaXplID0gaW5vZGUtPmlfc2ItPnNfYmxvY2tzaXplOworCXUzMiBwX2NsdXN0ZXIsIG51bV9jbHVzdGVyczsKKwl1MzIgY3BvcyA9IDAsIGJwYyA9IG9jZnMyX2NsdXN0ZXJzX3RvX2Jsb2Nrcyhpbm9kZS0+aV9zYiwgMSk7CisJdTMyIGNsdXN0ZXJzID0gb2NmczJfY2x1c3RlcnNfZm9yX2J5dGVzKGlub2RlLT5pX3NiLCB2YWx1ZV9sZW4pOworCXU2NCBibGtubzsKKwlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoID0gTlVMTDsKKwloYW5kbGVfdCAqaGFuZGxlOworCisJQlVHX09OKGNsdXN0ZXJzID4gbGUzMl90b19jcHUoeHYtPnhyX2NsdXN0ZXJzKSk7CisKKwljcmVkaXRzID0gY2x1c3RlcnMgKiBicGM7CisJaGFuZGxlID0gb2NmczJfc3RhcnRfdHJhbnMoT0NGUzJfU0IoaW5vZGUtPmlfc2IpLCBjcmVkaXRzKTsKKwlpZiAoSVNfRVJSKGhhbmRsZSkpIHsKKwkJcmV0ID0gUFRSX0VSUihoYW5kbGUpOworCQltbG9nX2Vycm5vKHJldCk7CisJCWdvdG8gb3V0OworCX0KKworCXdoaWxlIChjcG9zIDwgY2x1c3RlcnMpIHsKKwkJcmV0ID0gb2NmczJfeGF0dHJfZ2V0X2NsdXN0ZXJzKGlub2RlLCBjcG9zLCAmcF9jbHVzdGVyLAorCQkJCQkgICAgICAgJm51bV9jbHVzdGVycywgJnh2LT54cl9saXN0KTsKKwkJaWYgKHJldCkgeworCQkJbWxvZ19lcnJubyhyZXQpOworCQkJZ290byBvdXRfY29tbWl0OworCQl9CisKKwkJYmxrbm8gPSBvY2ZzMl9jbHVzdGVyc190b19ibG9ja3MoaW5vZGUtPmlfc2IsIHBfY2x1c3Rlcik7CisKKwkJZm9yIChpID0gMDsgaSA8IG51bV9jbHVzdGVycyAqIGJwYzsgaSsrLCBibGtubysrKSB7CisJCQlyZXQgPSBvY2ZzMl9yZWFkX2Jsb2NrKGlub2RlLCBibGtubywgJmJoKTsKKwkJCWlmIChyZXQpIHsKKwkJCQltbG9nX2Vycm5vKHJldCk7CisJCQkJZ290byBvdXRfY29tbWl0OworCQkJfQorCisJCQlyZXQgPSBvY2ZzMl9qb3VybmFsX2FjY2VzcyhoYW5kbGUsCisJCQkJCQkgICBpbm9kZSwKKwkJCQkJCSAgIGJoLAorCQkJCQkJICAgT0NGUzJfSk9VUk5BTF9BQ0NFU1NfV1JJVEUpOworCQkJaWYgKHJldCA8IDApIHsKKwkJCQltbG9nX2Vycm5vKHJldCk7CisJCQkJZ290byBvdXRfY29tbWl0OworCQkJfQorCisJCQljcF9sZW4gPSB2YWx1ZV9sZW4gPiBibG9ja3NpemUgPyBibG9ja3NpemUgOiB2YWx1ZV9sZW47CisJCQltZW1jcHkoYmgtPmJfZGF0YSwgdmFsdWUsIGNwX2xlbik7CisJCQl2YWx1ZV9sZW4gLT0gY3BfbGVuOworCQkJdmFsdWUgKz0gY3BfbGVuOworCQkJaWYgKGNwX2xlbiA8IGJsb2Nrc2l6ZSkKKwkJCQltZW1zZXQoYmgtPmJfZGF0YSArIGNwX2xlbiwgMCwKKwkJCQkgICAgICAgYmxvY2tzaXplIC0gY3BfbGVuKTsKKworCQkJcmV0ID0gb2NmczJfam91cm5hbF9kaXJ0eShoYW5kbGUsIGJoKTsKKwkJCWlmIChyZXQgPCAwKSB7CisJCQkJbWxvZ19lcnJubyhyZXQpOworCQkJCWdvdG8gb3V0X2NvbW1pdDsKKwkJCX0KKwkJCWJyZWxzZShiaCk7CisJCQliaCA9IE5VTEw7CisKKwkJCS8qCisJCQkgKiBYWFg6IGRvIHdlIG5lZWQgdG8gZW1wdHkgYWxsIHRoZSBmb2xsb3dpbmcKKwkJCSAqIGJsb2NrcyBpbiB0aGlzIGNsdXN0ZXI/CisJCQkgKi8KKwkJCWlmICghdmFsdWVfbGVuKQorCQkJCWJyZWFrOworCQl9CisJCWNwb3MgKz0gbnVtX2NsdXN0ZXJzOworCX0KK291dF9jb21taXQ6CisJb2NmczJfY29tbWl0X3RyYW5zKE9DRlMyX1NCKGlub2RlLT5pX3NiKSwgaGFuZGxlKTsKK291dDoKKwlicmVsc2UoYmgpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBvY2ZzMl94YXR0cl9jbGVhbnVwKHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCQkgICAgICAgc3RydWN0IG9jZnMyX3hhdHRyX2luZm8gKnhpLAorCQkJICAgICAgIHN0cnVjdCBvY2ZzMl94YXR0cl9zZWFyY2ggKnhzLAorCQkJICAgICAgIHNpemVfdCBvZmZzKQoreworCWhhbmRsZV90ICpoYW5kbGUgPSBOVUxMOworCWludCByZXQgPSAwOworCXNpemVfdCBuYW1lX2xlbiA9IHN0cmxlbih4aS0+bmFtZSk7CisJdm9pZCAqdmFsID0geHMtPmJhc2UgKyBvZmZzOworCXNpemVfdCBzaXplID0gT0NGUzJfWEFUVFJfU0laRShuYW1lX2xlbikgKyBPQ0ZTMl9YQVRUUl9ST09UX1NJWkU7CisKKwloYW5kbGUgPSBvY2ZzMl9zdGFydF90cmFucygoT0NGUzJfU0IoaW5vZGUtPmlfc2IpKSwKKwkJCQkgICBPQ0ZTMl9YQVRUUl9CTE9DS19VUERBVEVfQ1JFRElUUyk7CisJaWYgKElTX0VSUihoYW5kbGUpKSB7CisJCXJldCA9IFBUUl9FUlIoaGFuZGxlKTsKKwkJbWxvZ19lcnJubyhyZXQpOworCQlnb3RvIG91dDsKKwl9CisJcmV0ID0gb2NmczJfam91cm5hbF9hY2Nlc3MoaGFuZGxlLCBpbm9kZSwgeHMtPnhhdHRyX2JoLAorCQkJCSAgIE9DRlMyX0pPVVJOQUxfQUNDRVNTX1dSSVRFKTsKKwlpZiAocmV0KSB7CisJCW1sb2dfZXJybm8ocmV0KTsKKwkJZ290byBvdXRfY29tbWl0OworCX0KKwkvKiBEZWNyZWFzZSB4YXR0ciBjb3VudCAqLworCWxlMTZfYWRkX2NwdSgmeHMtPmhlYWRlci0+eGhfY291bnQsIC0xKTsKKwkvKiBSZW1vdmUgdGhlIHhhdHRyIGVudHJ5IGFuZCB0cmVlIHJvb3Qgd2hpY2ggaGFzIGFscmVhZHkgYmUgc2V0Ki8KKwltZW1zZXQoKHZvaWQgKil4cy0+aGVyZSwgMCwgc2l6ZW9mKHN0cnVjdCBvY2ZzMl94YXR0cl9lbnRyeSkpOworCW1lbXNldCh2YWwsIDAsIHNpemUpOworCisJcmV0ID0gb2NmczJfam91cm5hbF9kaXJ0eShoYW5kbGUsIHhzLT54YXR0cl9iaCk7CisJaWYgKHJldCA8IDApCisJCW1sb2dfZXJybm8ocmV0KTsKK291dF9jb21taXQ6CisJb2NmczJfY29tbWl0X3RyYW5zKE9DRlMyX1NCKGlub2RlLT5pX3NiKSwgaGFuZGxlKTsKK291dDoKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IG9jZnMyX3hhdHRyX3VwZGF0ZV9lbnRyeShzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkJCSAgICBzdHJ1Y3Qgb2NmczJfeGF0dHJfaW5mbyAqeGksCisJCQkJICAgIHN0cnVjdCBvY2ZzMl94YXR0cl9zZWFyY2ggKnhzLAorCQkJCSAgICBzaXplX3Qgb2ZmcykKK3sKKwloYW5kbGVfdCAqaGFuZGxlID0gTlVMTDsKKwlpbnQgcmV0ID0gMDsKKworCWhhbmRsZSA9IG9jZnMyX3N0YXJ0X3RyYW5zKChPQ0ZTMl9TQihpbm9kZS0+aV9zYikpLAorCQkJCSAgIE9DRlMyX1hBVFRSX0JMT0NLX1VQREFURV9DUkVESVRTKTsKKwlpZiAoSVNfRVJSKGhhbmRsZSkpIHsKKwkJcmV0ID0gUFRSX0VSUihoYW5kbGUpOworCQltbG9nX2Vycm5vKHJldCk7CisJCWdvdG8gb3V0OworCX0KKwlyZXQgPSBvY2ZzMl9qb3VybmFsX2FjY2VzcyhoYW5kbGUsIGlub2RlLCB4cy0+eGF0dHJfYmgsCisJCQkJICAgT0NGUzJfSk9VUk5BTF9BQ0NFU1NfV1JJVEUpOworCWlmIChyZXQpIHsKKwkJbWxvZ19lcnJubyhyZXQpOworCQlnb3RvIG91dF9jb21taXQ7CisJfQorCisJeHMtPmhlcmUtPnhlX25hbWVfb2Zmc2V0ID0gY3B1X3RvX2xlMTYob2Zmcyk7CisJeHMtPmhlcmUtPnhlX3ZhbHVlX3NpemUgPSBjcHVfdG9fbGU2NCh4aS0+dmFsdWVfbGVuKTsKKwlpZiAoeGktPnZhbHVlX2xlbiA8PSBPQ0ZTMl9YQVRUUl9JTkxJTkVfU0laRSkKKwkJb2NmczJfeGF0dHJfc2V0X2xvY2FsKHhzLT5oZXJlLCAxKTsKKwllbHNlCisJCW9jZnMyX3hhdHRyX3NldF9sb2NhbCh4cy0+aGVyZSwgMCk7CisJb2NmczJfeGF0dHJfaGFzaF9lbnRyeShpbm9kZSwgeHMtPmhlYWRlciwgeHMtPmhlcmUpOworCisJcmV0ID0gb2NmczJfam91cm5hbF9kaXJ0eShoYW5kbGUsIHhzLT54YXR0cl9iaCk7CisJaWYgKHJldCA8IDApCisJCW1sb2dfZXJybm8ocmV0KTsKK291dF9jb21taXQ6CisJb2NmczJfY29tbWl0X3RyYW5zKE9DRlMyX1NCKGlub2RlLT5pX3NiKSwgaGFuZGxlKTsKK291dDoKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogb2NmczJfeGF0dHJfc2V0X3ZhbHVlX291dHNpZGUoKQorICoKKyAqIFNldCBsYXJnZSBzaXplIHZhbHVlIGluIEIgdHJlZS4KKyAqLworc3RhdGljIGludCBvY2ZzMl94YXR0cl9zZXRfdmFsdWVfb3V0c2lkZShzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkJCQkgc3RydWN0IG9jZnMyX3hhdHRyX2luZm8gKnhpLAorCQkJCQkgc3RydWN0IG9jZnMyX3hhdHRyX3NlYXJjaCAqeHMsCisJCQkJCSBzaXplX3Qgb2ZmcykKK3sKKwlzaXplX3QgbmFtZV9sZW4gPSBzdHJsZW4oeGktPm5hbWUpOworCXZvaWQgKnZhbCA9IHhzLT5iYXNlICsgb2ZmczsKKwlzdHJ1Y3Qgb2NmczJfeGF0dHJfdmFsdWVfcm9vdCAqeHYgPSBOVUxMOworCXNpemVfdCBzaXplID0gT0NGUzJfWEFUVFJfU0laRShuYW1lX2xlbikgKyBPQ0ZTMl9YQVRUUl9ST09UX1NJWkU7CisJaW50IHJldCA9IDA7CisKKwltZW1zZXQodmFsLCAwLCBzaXplKTsKKwltZW1jcHkodmFsLCB4aS0+bmFtZSwgbmFtZV9sZW4pOworCXh2ID0gKHN0cnVjdCBvY2ZzMl94YXR0cl92YWx1ZV9yb290ICopCisJCSh2YWwgKyBPQ0ZTMl9YQVRUUl9TSVpFKG5hbWVfbGVuKSk7CisJeHYtPnhyX2NsdXN0ZXJzID0gMDsKKwl4di0+eHJfbGFzdF9lYl9ibGsgPSAwOworCXh2LT54cl9saXN0LmxfdHJlZV9kZXB0aCA9IDA7CisJeHYtPnhyX2xpc3QubF9jb3VudCA9IGNwdV90b19sZTE2KDEpOworCXh2LT54cl9saXN0LmxfbmV4dF9mcmVlX3JlYyA9IDA7CisKKwlyZXQgPSBvY2ZzMl94YXR0cl92YWx1ZV90cnVuY2F0ZShpbm9kZSwgeHMtPnhhdHRyX2JoLCB4diwKKwkJCQkJIHhpLT52YWx1ZV9sZW4pOworCWlmIChyZXQgPCAwKSB7CisJCW1sb2dfZXJybm8ocmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisJcmV0ID0gX19vY2ZzMl94YXR0cl9zZXRfdmFsdWVfb3V0c2lkZShpbm9kZSwgeHYsIHhpLT52YWx1ZSwKKwkJCQkJICAgICAgeGktPnZhbHVlX2xlbik7CisJaWYgKHJldCA8IDApIHsKKwkJbWxvZ19lcnJubyhyZXQpOworCQlyZXR1cm4gcmV0OworCX0KKwlyZXQgPSBvY2ZzMl94YXR0cl91cGRhdGVfZW50cnkoaW5vZGUsIHhpLCB4cywgb2Zmcyk7CisJaWYgKHJldCA8IDApCisJCW1sb2dfZXJybm8ocmV0KTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBvY2ZzMl94YXR0cl9zZXRfZW50cnlfbG9jYWwoKQorICoKKyAqIFNldCwgcmVwbGFjZSBvciByZW1vdmUgZXh0ZW5kZWQgYXR0cmlidXRlIGluIGxvY2FsLgorICovCitzdGF0aWMgdm9pZCBvY2ZzMl94YXR0cl9zZXRfZW50cnlfbG9jYWwoc3RydWN0IGlub2RlICppbm9kZSwKKwkJCQkJc3RydWN0IG9jZnMyX3hhdHRyX2luZm8gKnhpLAorCQkJCQlzdHJ1Y3Qgb2NmczJfeGF0dHJfc2VhcmNoICp4cywKKwkJCQkJc3RydWN0IG9jZnMyX3hhdHRyX2VudHJ5ICpsYXN0LAorCQkJCQlzaXplX3QgbWluX29mZnMpCit7CisJc2l6ZV90IG5hbWVfbGVuID0gc3RybGVuKHhpLT5uYW1lKTsKKwlpbnQgaTsKKworCWlmICh4aS0+dmFsdWUgJiYgeHMtPm5vdF9mb3VuZCkgeworCQkvKiBJbnNlcnQgdGhlIG5ldyB4YXR0ciBlbnRyeS4gKi8KKwkJbGUxNl9hZGRfY3B1KCZ4cy0+aGVhZGVyLT54aF9jb3VudCwgMSk7CisJCW9jZnMyX3hhdHRyX3NldF90eXBlKGxhc3QsIHhpLT5uYW1lX2luZGV4KTsKKwkJb2NmczJfeGF0dHJfc2V0X2xvY2FsKGxhc3QsIDEpOworCQlsYXN0LT54ZV9uYW1lX2xlbiA9IG5hbWVfbGVuOworCX0gZWxzZSB7CisJCXZvaWQgKmZpcnN0X3ZhbDsKKwkJdm9pZCAqdmFsOworCQlzaXplX3Qgb2Zmcywgc2l6ZTsKKworCQlmaXJzdF92YWwgPSB4cy0+YmFzZSArIG1pbl9vZmZzOworCQlvZmZzID0gbGUxNl90b19jcHUoeHMtPmhlcmUtPnhlX25hbWVfb2Zmc2V0KTsKKwkJdmFsID0geHMtPmJhc2UgKyBvZmZzOworCisJCWlmIChsZTY0X3RvX2NwdSh4cy0+aGVyZS0+eGVfdmFsdWVfc2l6ZSkgPgorCQkgICAgT0NGUzJfWEFUVFJfSU5MSU5FX1NJWkUpCisJCQlzaXplID0gT0NGUzJfWEFUVFJfU0laRShuYW1lX2xlbikgKworCQkJCU9DRlMyX1hBVFRSX1JPT1RfU0laRTsKKwkJZWxzZQorCQkJc2l6ZSA9IE9DRlMyX1hBVFRSX1NJWkUobmFtZV9sZW4pICsKKwkJCU9DRlMyX1hBVFRSX1NJWkUobGU2NF90b19jcHUoeHMtPmhlcmUtPnhlX3ZhbHVlX3NpemUpKTsKKworCQlpZiAoeGktPnZhbHVlICYmIHNpemUgPT0gT0NGUzJfWEFUVFJfU0laRShuYW1lX2xlbikgKworCQkJCU9DRlMyX1hBVFRSX1NJWkUoeGktPnZhbHVlX2xlbikpIHsKKwkJCS8qIFRoZSBvbGQgYW5kIHRoZSBuZXcgdmFsdWUgaGF2ZSB0aGUKKwkJCSAgIHNhbWUgc2l6ZS4gSnVzdCByZXBsYWNlIHRoZSB2YWx1ZS4gKi8KKwkJCW9jZnMyX3hhdHRyX3NldF9sb2NhbCh4cy0+aGVyZSwgMSk7CisJCQl4cy0+aGVyZS0+eGVfdmFsdWVfc2l6ZSA9IGNwdV90b19sZTY0KHhpLT52YWx1ZV9sZW4pOworCQkJLyogQ2xlYXIgdmFsdWUgYnl0ZXMuICovCisJCQltZW1zZXQodmFsICsgT0NGUzJfWEFUVFJfU0laRShuYW1lX2xlbiksCisJCQkgICAgICAgMCwKKwkJCSAgICAgICBPQ0ZTMl9YQVRUUl9TSVpFKHhpLT52YWx1ZV9sZW4pKTsKKwkJCW1lbWNweSh2YWwgKyBPQ0ZTMl9YQVRUUl9TSVpFKG5hbWVfbGVuKSwKKwkJCSAgICAgICB4aS0+dmFsdWUsCisJCQkgICAgICAgeGktPnZhbHVlX2xlbik7CisJCQlyZXR1cm47CisJCX0KKwkJLyogUmVtb3ZlIHRoZSBvbGQgbmFtZSt2YWx1ZS4gKi8KKwkJbWVtbW92ZShmaXJzdF92YWwgKyBzaXplLCBmaXJzdF92YWwsIHZhbCAtIGZpcnN0X3ZhbCk7CisJCW1lbXNldChmaXJzdF92YWwsIDAsIHNpemUpOworCQl4cy0+aGVyZS0+eGVfbmFtZV9oYXNoID0gMDsKKwkJeHMtPmhlcmUtPnhlX25hbWVfb2Zmc2V0ID0gMDsKKwkJb2NmczJfeGF0dHJfc2V0X2xvY2FsKHhzLT5oZXJlLCAxKTsKKwkJeHMtPmhlcmUtPnhlX3ZhbHVlX3NpemUgPSAwOworCisJCW1pbl9vZmZzICs9IHNpemU7CisKKwkJLyogQWRqdXN0IGFsbCB2YWx1ZSBvZmZzZXRzLiAqLworCQlsYXN0ID0geHMtPmhlYWRlci0+eGhfZW50cmllczsKKwkJZm9yIChpID0gMCA7IGkgPCBsZTE2X3RvX2NwdSh4cy0+aGVhZGVyLT54aF9jb3VudCk7IGkrKykgeworCQkJc2l6ZV90IG8gPSBsZTE2X3RvX2NwdShsYXN0LT54ZV9uYW1lX29mZnNldCk7CisKKwkJCWlmIChvIDwgb2ZmcykKKwkJCQlsYXN0LT54ZV9uYW1lX29mZnNldCA9IGNwdV90b19sZTE2KG8gKyBzaXplKTsKKwkJCWxhc3QgKz0gMTsKKwkJfQorCisJCWlmICgheGktPnZhbHVlKSB7CisJCQkvKiBSZW1vdmUgdGhlIG9sZCBlbnRyeS4gKi8KKwkJCWxhc3QgLT0gMTsKKwkJCW1lbW1vdmUoeHMtPmhlcmUsIHhzLT5oZXJlICsgMSwKKwkJCQkodm9pZCAqKWxhc3QgLSAodm9pZCAqKXhzLT5oZXJlKTsKKwkJCW1lbXNldChsYXN0LCAwLCBzaXplb2Yoc3RydWN0IG9jZnMyX3hhdHRyX2VudHJ5KSk7CisJCQlsZTE2X2FkZF9jcHUoJnhzLT5oZWFkZXItPnhoX2NvdW50LCAtMSk7CisJCX0KKwl9CisJaWYgKHhpLT52YWx1ZSkgeworCQkvKiBJbnNlcnQgdGhlIG5ldyBuYW1lK3ZhbHVlLiAqLworCQlzaXplX3Qgc2l6ZSA9IE9DRlMyX1hBVFRSX1NJWkUobmFtZV9sZW4pICsKKwkJCQlPQ0ZTMl9YQVRUUl9TSVpFKHhpLT52YWx1ZV9sZW4pOworCQl2b2lkICp2YWwgPSB4cy0+YmFzZSArIG1pbl9vZmZzIC0gc2l6ZTsKKworCQl4cy0+aGVyZS0+eGVfbmFtZV9vZmZzZXQgPSBjcHVfdG9fbGUxNihtaW5fb2ZmcyAtIHNpemUpOworCQltZW1zZXQodmFsLCAwLCBzaXplKTsKKwkJbWVtY3B5KHZhbCwgeGktPm5hbWUsIG5hbWVfbGVuKTsKKwkJbWVtY3B5KHZhbCArIE9DRlMyX1hBVFRSX1NJWkUobmFtZV9sZW4pLAorCQkgICAgICAgeGktPnZhbHVlLAorCQkgICAgICAgeGktPnZhbHVlX2xlbik7CisJCXhzLT5oZXJlLT54ZV92YWx1ZV9zaXplID0gY3B1X3RvX2xlNjQoeGktPnZhbHVlX2xlbik7CisJCW9jZnMyX3hhdHRyX3NldF9sb2NhbCh4cy0+aGVyZSwgMSk7CisJCW9jZnMyX3hhdHRyX2hhc2hfZW50cnkoaW5vZGUsIHhzLT5oZWFkZXIsIHhzLT5oZXJlKTsKKwl9CisKKwlyZXR1cm47Cit9CisKKy8qCisgKiBvY2ZzMl94YXR0cl9zZXRfZW50cnkoKQorICoKKyAqIFNldCBleHRlbmRlZCBhdHRyaWJ1dGUgZW50cnkgaW50byBpbm9kZSBvciBibG9jay4KKyAqCisgKiBJZiBleHRlbmRlZCBhdHRyaWJ1dGUgdmFsdWUgc2l6ZSA+IE9DRlMyX1hBVFRSX0lOTElORV9TSVpFLAorICogV2UgZmlyc3QgaW5zZXJ0IHRyZWUgcm9vdChvY2ZzMl94YXR0cl92YWx1ZV9yb290KSB3aXRoIHNldF9lbnRyeV9sb2NhbCgpLAorICogdGhlbiBzZXQgdmFsdWUgaW4gQiB0cmVlIHdpdGggc2V0X3ZhbHVlX291dHNpZGUoKS4KKyAqLworc3RhdGljIGludCBvY2ZzMl94YXR0cl9zZXRfZW50cnkoc3RydWN0IGlub2RlICppbm9kZSwKKwkJCQkgc3RydWN0IG9jZnMyX3hhdHRyX2luZm8gKnhpLAorCQkJCSBzdHJ1Y3Qgb2NmczJfeGF0dHJfc2VhcmNoICp4cywKKwkJCQkgaW50IGZsYWcpCit7CisJc3RydWN0IG9jZnMyX3hhdHRyX2VudHJ5ICpsYXN0OworCXN0cnVjdCBvY2ZzMl9pbm9kZV9pbmZvICpvaSA9IE9DRlMyX0koaW5vZGUpOworCXN0cnVjdCBvY2ZzMl9kaW5vZGUgKmRpID0gKHN0cnVjdCBvY2ZzMl9kaW5vZGUgKil4cy0+aW5vZGVfYmgtPmJfZGF0YTsKKwlzaXplX3QgbWluX29mZnMgPSB4cy0+ZW5kIC0geHMtPmJhc2UsIG5hbWVfbGVuID0gc3RybGVuKHhpLT5uYW1lKTsKKwlzaXplX3Qgc2l6ZV9sID0gMDsKKwloYW5kbGVfdCAqaGFuZGxlID0gTlVMTDsKKwlpbnQgZnJlZSwgaSwgcmV0OworCXN0cnVjdCBvY2ZzMl94YXR0cl9pbmZvIHhpX2wgPSB7CisJCS5uYW1lX2luZGV4ID0geGktPm5hbWVfaW5kZXgsCisJCS5uYW1lID0geGktPm5hbWUsCisJCS52YWx1ZSA9IHhpLT52YWx1ZSwKKwkJLnZhbHVlX2xlbiA9IHhpLT52YWx1ZV9sZW4sCisJfTsKKworCS8qIENvbXB1dGUgbWluX29mZnMsIGxhc3QgYW5kIGZyZWUgc3BhY2UuICovCisJbGFzdCA9IHhzLT5oZWFkZXItPnhoX2VudHJpZXM7CisKKwlmb3IgKGkgPSAwIDsgaSA8IGxlMTZfdG9fY3B1KHhzLT5oZWFkZXItPnhoX2NvdW50KTsgaSsrKSB7CisJCXNpemVfdCBvZmZzID0gbGUxNl90b19jcHUobGFzdC0+eGVfbmFtZV9vZmZzZXQpOworCQlpZiAob2ZmcyA8IG1pbl9vZmZzKQorCQkJbWluX29mZnMgPSBvZmZzOworCQlsYXN0ICs9IDE7CisJfQorCisJZnJlZSA9IG1pbl9vZmZzIC0gKCh2b2lkICopbGFzdCAtIHhzLT5iYXNlKSAtIHNpemVvZihfX3UzMik7CisJaWYgKGZyZWUgPCAwKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCWlmICgheHMtPm5vdF9mb3VuZCkgeworCQlzaXplX3Qgc2l6ZSA9IDA7CisJCWlmIChvY2ZzMl94YXR0cl9pc19sb2NhbCh4cy0+aGVyZSkpCisJCQlzaXplID0gT0NGUzJfWEFUVFJfU0laRShuYW1lX2xlbikgKworCQkJT0NGUzJfWEFUVFJfU0laRShsZTY0X3RvX2NwdSh4cy0+aGVyZS0+eGVfdmFsdWVfc2l6ZSkpOworCQllbHNlCisJCQlzaXplID0gT0NGUzJfWEFUVFJfU0laRShuYW1lX2xlbikgKworCQkJCU9DRlMyX1hBVFRSX1JPT1RfU0laRTsKKwkJZnJlZSArPSAoc2l6ZSArIHNpemVvZihzdHJ1Y3Qgb2NmczJfeGF0dHJfZW50cnkpKTsKKwl9CisJLyogQ2hlY2sgZnJlZSBzcGFjZSBpbiBpbm9kZSBvciBibG9jayAqLworCWlmICh4aS0+dmFsdWUgJiYgeGktPnZhbHVlX2xlbiA+IE9DRlMyX1hBVFRSX0lOTElORV9TSVpFKSB7CisJCWlmIChmcmVlIDwgc2l6ZW9mKHN0cnVjdCBvY2ZzMl94YXR0cl9lbnRyeSkgKworCQkJICAgT0NGUzJfWEFUVFJfU0laRShuYW1lX2xlbikgKworCQkJICAgT0NGUzJfWEFUVFJfUk9PVF9TSVpFKSB7CisJCQlyZXQgPSAtRU5PU1BDOworCQkJZ290byBvdXQ7CisJCX0KKwkJc2l6ZV9sID0gT0NGUzJfWEFUVFJfU0laRShuYW1lX2xlbikgKyBPQ0ZTMl9YQVRUUl9ST09UX1NJWkU7CisJCXhpX2wudmFsdWUgPSAodm9pZCAqKSZkZWZfeHY7CisJCXhpX2wudmFsdWVfbGVuID0gT0NGUzJfWEFUVFJfUk9PVF9TSVpFOworCX0gZWxzZSBpZiAoeGktPnZhbHVlKSB7CisJCWlmIChmcmVlIDwgc2l6ZW9mKHN0cnVjdCBvY2ZzMl94YXR0cl9lbnRyeSkgKworCQkJICAgT0NGUzJfWEFUVFJfU0laRShuYW1lX2xlbikgKworCQkJICAgT0NGUzJfWEFUVFJfU0laRSh4aS0+dmFsdWVfbGVuKSkgeworCQkJcmV0ID0gLUVOT1NQQzsKKwkJCWdvdG8gb3V0OworCQl9CisJfQorCisJaWYgKCF4cy0+bm90X2ZvdW5kKSB7CisJCS8qIEZvciBleGlzdGluZyBleHRlbmRlZCBhdHRyaWJ1dGUgKi8KKwkJc2l6ZV90IHNpemUgPSBPQ0ZTMl9YQVRUUl9TSVpFKG5hbWVfbGVuKSArCisJCQlPQ0ZTMl9YQVRUUl9TSVpFKGxlNjRfdG9fY3B1KHhzLT5oZXJlLT54ZV92YWx1ZV9zaXplKSk7CisJCXNpemVfdCBvZmZzID0gbGUxNl90b19jcHUoeHMtPmhlcmUtPnhlX25hbWVfb2Zmc2V0KTsKKwkJdm9pZCAqdmFsID0geHMtPmJhc2UgKyBvZmZzOworCisJCWlmIChvY2ZzMl94YXR0cl9pc19sb2NhbCh4cy0+aGVyZSkgJiYgc2l6ZSA9PSBzaXplX2wpIHsKKwkJCS8qIFJlcGxhY2UgZXhpc3RpbmcgbG9jYWwgeGF0dHIgd2l0aCB0cmVlIHJvb3QgKi8KKwkJCXJldCA9IG9jZnMyX3hhdHRyX3NldF92YWx1ZV9vdXRzaWRlKGlub2RlLCB4aSwgeHMsCisJCQkJCQkJICAgIG9mZnMpOworCQkJaWYgKHJldCA8IDApCisJCQkJbWxvZ19lcnJubyhyZXQpOworCQkJZ290byBvdXQ7CisJCX0gZWxzZSBpZiAoIW9jZnMyX3hhdHRyX2lzX2xvY2FsKHhzLT5oZXJlKSkgeworCQkJLyogRm9yIGV4aXN0aW5nIHhhdHRyIHdoaWNoIGhhcyB2YWx1ZSBvdXRzaWRlICovCisJCQlzdHJ1Y3Qgb2NmczJfeGF0dHJfdmFsdWVfcm9vdCAqeHYgPSBOVUxMOworCQkJeHYgPSAoc3RydWN0IG9jZnMyX3hhdHRyX3ZhbHVlX3Jvb3QgKikodmFsICsKKwkJCQlPQ0ZTMl9YQVRUUl9TSVpFKG5hbWVfbGVuKSk7CisKKwkJCWlmICh4aS0+dmFsdWVfbGVuID4gT0NGUzJfWEFUVFJfSU5MSU5FX1NJWkUpIHsKKwkJCQkvKgorCQkJCSAqIElmIG5ldyB2YWx1ZSBuZWVkIHNldCBvdXRzaWRlIGFsc28sCisJCQkJICogZmlyc3QgdHJ1bmNhdGUgb2xkIHZhbHVlIHRvIG5ldyB2YWx1ZSwKKwkJCQkgKiB0aGVuIHNldCBuZXcgdmFsdWUgd2l0aCBzZXRfdmFsdWVfb3V0c2lkZSgpLgorCQkJCSAqLworCQkJCXJldCA9IG9jZnMyX3hhdHRyX3ZhbHVlX3RydW5jYXRlKGlub2RlLAorCQkJCQkJCQkgeHMtPnhhdHRyX2JoLAorCQkJCQkJCQkgeHYsCisJCQkJCQkJCSB4aS0+dmFsdWVfbGVuKTsKKwkJCQlpZiAocmV0IDwgMCkgeworCQkJCQltbG9nX2Vycm5vKHJldCk7CisJCQkJCWdvdG8gb3V0OworCQkJCX0KKworCQkJCXJldCA9IF9fb2NmczJfeGF0dHJfc2V0X3ZhbHVlX291dHNpZGUoaW5vZGUsCisJCQkJCQkJCXh2LAorCQkJCQkJCQl4aS0+dmFsdWUsCisJCQkJCQkJCXhpLT52YWx1ZV9sZW4pOworCQkJCWlmIChyZXQgPCAwKSB7CisJCQkJCW1sb2dfZXJybm8ocmV0KTsKKwkJCQkJZ290byBvdXQ7CisJCQkJfQorCisJCQkJcmV0ID0gb2NmczJfeGF0dHJfdXBkYXRlX2VudHJ5KGlub2RlLAorCQkJCQkJCSAgICAgICB4aSwKKwkJCQkJCQkgICAgICAgeHMsCisJCQkJCQkJICAgICAgIG9mZnMpOworCQkJCWlmIChyZXQgPCAwKQorCQkJCQltbG9nX2Vycm5vKHJldCk7CisJCQkJZ290byBvdXQ7CisJCQl9IGVsc2UgeworCQkJCS8qCisJCQkJICogSWYgbmV3IHZhbHVlIG5lZWQgc2V0IGluIGxvY2FsLAorCQkJCSAqIGp1c3QgdHJ1Y2F0ZSBvbGQgdmFsdWUgdG8gemVyby4KKwkJCQkgKi8KKwkJCQkgcmV0ID0gb2NmczJfeGF0dHJfdmFsdWVfdHJ1bmNhdGUoaW5vZGUsCisJCQkJCQkJCSB4cy0+eGF0dHJfYmgsCisJCQkJCQkJCSB4diwKKwkJCQkJCQkJIDApOworCQkJCWlmIChyZXQgPCAwKQorCQkJCQltbG9nX2Vycm5vKHJldCk7CisJCQl9CisJCX0KKwl9CisKKwloYW5kbGUgPSBvY2ZzMl9zdGFydF90cmFucygoT0NGUzJfU0IoaW5vZGUtPmlfc2IpKSwKKwkJCQkgICBPQ0ZTMl9JTk9ERV9VUERBVEVfQ1JFRElUUyk7CisJaWYgKElTX0VSUihoYW5kbGUpKSB7CisJCXJldCA9IFBUUl9FUlIoaGFuZGxlKTsKKwkJbWxvZ19lcnJubyhyZXQpOworCQlnb3RvIG91dDsKKwl9CisKKwlyZXQgPSBvY2ZzMl9qb3VybmFsX2FjY2VzcyhoYW5kbGUsIGlub2RlLCB4cy0+aW5vZGVfYmgsCisJCQkJICAgT0NGUzJfSk9VUk5BTF9BQ0NFU1NfV1JJVEUpOworCWlmIChyZXQpIHsKKwkJbWxvZ19lcnJubyhyZXQpOworCQlnb3RvIG91dF9jb21taXQ7CisJfQorCisJaWYgKCEoZmxhZyAmIE9DRlMyX0lOTElORV9YQVRUUl9GTCkpIHsKKwkJLyogc2V0IGV4dGVuZGVkIGF0dHJpYnV0ZSBpbiBleHRlcm5hbCBibG9jay4gKi8KKwkJcmV0ID0gb2NmczJfZXh0ZW5kX3RyYW5zKGhhbmRsZSwKKwkJCQkJIE9DRlMyX0lOT0RFX1VQREFURV9DUkVESVRTICsKKwkJCQkJIE9DRlMyX1hBVFRSX0JMT0NLX1VQREFURV9DUkVESVRTKTsKKwkJaWYgKHJldCkgeworCQkJbWxvZ19lcnJubyhyZXQpOworCQkJZ290byBvdXRfY29tbWl0OworCQl9CisJCXJldCA9IG9jZnMyX2pvdXJuYWxfYWNjZXNzKGhhbmRsZSwgaW5vZGUsIHhzLT54YXR0cl9iaCwKKwkJCQkJICAgT0NGUzJfSk9VUk5BTF9BQ0NFU1NfV1JJVEUpOworCQlpZiAocmV0KSB7CisJCQltbG9nX2Vycm5vKHJldCk7CisJCQlnb3RvIG91dF9jb21taXQ7CisJCX0KKwl9CisKKwkvKgorCSAqIFNldCB2YWx1ZSBpbiBsb2NhbCwgaW5jbHVkZSBzZXQgdHJlZSByb290IGluIGxvY2FsLgorCSAqIFRoaXMgaXMgdGhlIGZpcnN0IHN0ZXAgZm9yIHZhbHVlIHNpemUgPklOTElORV9TSVpFLgorCSAqLworCW9jZnMyX3hhdHRyX3NldF9lbnRyeV9sb2NhbChpbm9kZSwgJnhpX2wsIHhzLCBsYXN0LCBtaW5fb2Zmcyk7CisKKwlpZiAoIShmbGFnICYgT0NGUzJfSU5MSU5FX1hBVFRSX0ZMKSkgeworCQlyZXQgPSBvY2ZzMl9qb3VybmFsX2RpcnR5KGhhbmRsZSwgeHMtPnhhdHRyX2JoKTsKKwkJaWYgKHJldCA8IDApIHsKKwkJCW1sb2dfZXJybm8ocmV0KTsKKwkJCWdvdG8gb3V0X2NvbW1pdDsKKwkJfQorCX0KKworCWlmICghKG9pLT5pcF9keW5fZmVhdHVyZXMgJiBPQ0ZTMl9JTkxJTkVfWEFUVFJfRkwpICYmCisJICAgIChmbGFnICYgT0NGUzJfSU5MSU5FX1hBVFRSX0ZMKSkgeworCQlzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiA9IE9DRlMyX1NCKGlub2RlLT5pX3NiKTsKKwkJdW5zaWduZWQgaW50IHhhdHRyc2l6ZSA9IG9zYi0+c194YXR0cl9pbmxpbmVfc2l6ZTsKKworCQkvKgorCQkgKiBBZGp1c3QgZXh0ZW50IHJlY29yZCBjb3VudCBvciBpbmxpbmUgZGF0YSBzaXplCisJCSAqIHRvIHJlc2VydmUgc3BhY2UgZm9yIGV4dGVuZGVkIGF0dHJpYnV0ZS4KKwkJICovCisJCWlmIChvaS0+aXBfZHluX2ZlYXR1cmVzICYgT0NGUzJfSU5MSU5FX0RBVEFfRkwpIHsKKwkJCXN0cnVjdCBvY2ZzMl9pbmxpbmVfZGF0YSAqaWRhdGEgPSAmZGktPmlkMi5pX2RhdGE7CisJCQlsZTE2X2FkZF9jcHUoJmlkYXRhLT5pZF9jb3VudCwgLXhhdHRyc2l6ZSk7CisJCX0gZWxzZSBpZiAoIShvY2ZzMl9pbm9kZV9pc19mYXN0X3N5bWxpbmsoaW5vZGUpKSkgeworCQkJc3RydWN0IG9jZnMyX2V4dGVudF9saXN0ICplbCA9ICZkaS0+aWQyLmlfbGlzdDsKKwkJCWxlMTZfYWRkX2NwdSgmZWwtPmxfY291bnQsIC0oeGF0dHJzaXplIC8KKwkJCQkJc2l6ZW9mKHN0cnVjdCBvY2ZzMl9leHRlbnRfcmVjKSkpOworCQl9CisJCWRpLT5pX3hhdHRyX2lubGluZV9zaXplID0gY3B1X3RvX2xlMTYoeGF0dHJzaXplKTsKKwl9CisJLyogVXBkYXRlIHhhdHRyIGZsYWcgKi8KKwlzcGluX2xvY2soJm9pLT5pcF9sb2NrKTsKKwlvaS0+aXBfZHluX2ZlYXR1cmVzIHw9IGZsYWc7CisJZGktPmlfZHluX2ZlYXR1cmVzID0gY3B1X3RvX2xlMTYob2ktPmlwX2R5bl9mZWF0dXJlcyk7CisJc3Bpbl91bmxvY2soJm9pLT5pcF9sb2NrKTsKKwkvKiBVcGRhdGUgaW5vZGUgY3RpbWUgKi8KKwlpbm9kZS0+aV9jdGltZSA9IENVUlJFTlRfVElNRTsKKwlkaS0+aV9jdGltZSA9IGNwdV90b19sZTY0KGlub2RlLT5pX2N0aW1lLnR2X3NlYyk7CisJZGktPmlfY3RpbWVfbnNlYyA9IGNwdV90b19sZTMyKGlub2RlLT5pX2N0aW1lLnR2X25zZWMpOworCisJcmV0ID0gb2NmczJfam91cm5hbF9kaXJ0eShoYW5kbGUsIHhzLT5pbm9kZV9iaCk7CisJaWYgKHJldCA8IDApCisJCW1sb2dfZXJybm8ocmV0KTsKKworb3V0X2NvbW1pdDoKKwlvY2ZzMl9jb21taXRfdHJhbnMoT0NGUzJfU0IoaW5vZGUtPmlfc2IpLCBoYW5kbGUpOworCisJaWYgKCFyZXQgJiYgeGktPnZhbHVlX2xlbiA+IE9DRlMyX1hBVFRSX0lOTElORV9TSVpFKSB7CisJCS8qCisJCSAqIFNldCB2YWx1ZSBvdXRzaWRlIGluIEIgdHJlZS4KKwkJICogVGhpcyBpcyB0aGUgc2Vjb25kIHN0ZXAgZm9yIHZhbHVlIHNpemUgPiBJTkxJTkVfU0laRS4KKwkJICovCisJCXNpemVfdCBvZmZzID0gbGUxNl90b19jcHUoeHMtPmhlcmUtPnhlX25hbWVfb2Zmc2V0KTsKKwkJcmV0ID0gb2NmczJfeGF0dHJfc2V0X3ZhbHVlX291dHNpZGUoaW5vZGUsIHhpLCB4cywgb2Zmcyk7CisJCWlmIChyZXQgPCAwKSB7CisJCQlpbnQgcmV0MjsKKworCQkJbWxvZ19lcnJubyhyZXQpOworCQkJLyoKKwkJCSAqIElmIHNldCB2YWx1ZSBvdXRzaWRlIGZhaWxlZCwgd2UgaGF2ZSB0byBjbGVhbgorCQkJICogdGhlIGp1bmsgdHJlZSByb290IHdlIGhhdmUgYWxyZWFkeSBzZXQgaW4gbG9jYWwuCisJCQkgKi8KKwkJCXJldDIgPSBvY2ZzMl94YXR0cl9jbGVhbnVwKGlub2RlLCB4aSwgeHMsIG9mZnMpOworCQkJaWYgKHJldDIgPCAwKQorCQkJCW1sb2dfZXJybm8ocmV0Mik7CisJCX0KKwl9CitvdXQ6CisJcmV0dXJuIHJldDsKKworfQorCitzdGF0aWMgaW50IG9jZnMyX3JlbW92ZV92YWx1ZV9vdXRzaWRlKHN0cnVjdCBpbm9kZSppbm9kZSwKKwkJCQkgICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLAorCQkJCSAgICAgIHN0cnVjdCBvY2ZzMl94YXR0cl9oZWFkZXIgKmhlYWRlcikKK3sKKwlpbnQgcmV0ID0gMCwgaTsKKworCWZvciAoaSA9IDA7IGkgPCBsZTE2X3RvX2NwdShoZWFkZXItPnhoX2NvdW50KTsgaSsrKSB7CisJCXN0cnVjdCBvY2ZzMl94YXR0cl9lbnRyeSAqZW50cnkgPSAmaGVhZGVyLT54aF9lbnRyaWVzW2ldOworCisJCWlmICghb2NmczJfeGF0dHJfaXNfbG9jYWwoZW50cnkpKSB7CisJCQlzdHJ1Y3Qgb2NmczJfeGF0dHJfdmFsdWVfcm9vdCAqeHY7CisJCQl2b2lkICp2YWw7CisKKwkJCXZhbCA9ICh2b2lkICopaGVhZGVyICsKKwkJCQlsZTE2X3RvX2NwdShlbnRyeS0+eGVfbmFtZV9vZmZzZXQpOworCQkJeHYgPSAoc3RydWN0IG9jZnMyX3hhdHRyX3ZhbHVlX3Jvb3QgKikKKwkJCQkodmFsICsgT0NGUzJfWEFUVFJfU0laRShlbnRyeS0+eGVfbmFtZV9sZW4pKTsKKwkJCXJldCA9IG9jZnMyX3hhdHRyX3ZhbHVlX3RydW5jYXRlKGlub2RlLCBiaCwgeHYsIDApOworCQkJaWYgKHJldCA8IDApIHsKKwkJCQltbG9nX2Vycm5vKHJldCk7CisJCQkJcmV0dXJuIHJldDsKKwkJCX0KKwkJfQorCX0KKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgb2NmczJfeGF0dHJfaWJvZHlfcmVtb3ZlKHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCQkJICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqZGlfYmgpCit7CisKKwlzdHJ1Y3Qgb2NmczJfZGlub2RlICpkaSA9IChzdHJ1Y3Qgb2NmczJfZGlub2RlICopZGlfYmgtPmJfZGF0YTsKKwlzdHJ1Y3Qgb2NmczJfeGF0dHJfaGVhZGVyICpoZWFkZXI7CisJaW50IHJldDsKKworCWhlYWRlciA9IChzdHJ1Y3Qgb2NmczJfeGF0dHJfaGVhZGVyICopCisJCSAoKHZvaWQgKilkaSArIGlub2RlLT5pX3NiLT5zX2Jsb2Nrc2l6ZSAtCisJCSBsZTE2X3RvX2NwdShkaS0+aV94YXR0cl9pbmxpbmVfc2l6ZSkpOworCisJcmV0ID0gb2NmczJfcmVtb3ZlX3ZhbHVlX291dHNpZGUoaW5vZGUsIGRpX2JoLCBoZWFkZXIpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBvY2ZzMl94YXR0cl9ibG9ja19yZW1vdmUoc3RydWN0IGlub2RlICppbm9kZSwKKwkJCQkgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpibGtfYmgpCit7CisJc3RydWN0IG9jZnMyX3hhdHRyX2Jsb2NrICp4YjsKKwlpbnQgcmV0ID0gMDsKKworCXhiID0gKHN0cnVjdCBvY2ZzMl94YXR0cl9ibG9jayAqKWJsa19iaC0+Yl9kYXRhOworCWlmICghKGxlMTZfdG9fY3B1KHhiLT54Yl9mbGFncykgJiBPQ0ZTMl9YQVRUUl9JTkRFWEVEKSkgeworCQlzdHJ1Y3Qgb2NmczJfeGF0dHJfaGVhZGVyICpoZWFkZXIgPSAmKHhiLT54Yl9hdHRycy54Yl9oZWFkZXIpOworCQlyZXQgPSBvY2ZzMl9yZW1vdmVfdmFsdWVfb3V0c2lkZShpbm9kZSwgYmxrX2JoLCBoZWFkZXIpOworCX0gZWxzZQorCQlyZXQgPSBvY2ZzMl9kZWxldGVfeGF0dHJfaW5kZXhfYmxvY2soaW5vZGUsIGJsa19iaCk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IG9jZnMyX3hhdHRyX2ZyZWVfYmxvY2soc3RydWN0IGlub2RlICppbm9kZSwKKwkJCQkgIHU2NCBibG9jaykKK3sKKwlzdHJ1Y3QgaW5vZGUgKnhiX2FsbG9jX2lub2RlOworCXN0cnVjdCBidWZmZXJfaGVhZCAqeGJfYWxsb2NfYmggPSBOVUxMOworCXN0cnVjdCBidWZmZXJfaGVhZCAqYmxrX2JoID0gTlVMTDsKKwlzdHJ1Y3Qgb2NmczJfeGF0dHJfYmxvY2sgKnhiOworCXN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiID0gT0NGUzJfU0IoaW5vZGUtPmlfc2IpOworCWhhbmRsZV90ICpoYW5kbGU7CisJaW50IHJldCA9IDA7CisJdTY0IGJsaywgYmdfYmxrbm87CisJdTE2IGJpdDsKKworCXJldCA9IG9jZnMyX3JlYWRfYmxvY2soaW5vZGUsIGJsb2NrLCAmYmxrX2JoKTsKKwlpZiAocmV0IDwgMCkgeworCQltbG9nX2Vycm5vKHJldCk7CisJCWdvdG8gb3V0OworCX0KKworCS8qVmVyaWZ5IHRoZSBzaWduYXR1cmUgb2YgeGF0dHIgYmxvY2sqLworCWlmIChtZW1jbXAoKHZvaWQgKilibGtfYmgtPmJfZGF0YSwgT0NGUzJfWEFUVFJfQkxPQ0tfU0lHTkFUVVJFLAorCQkgICBzdHJsZW4oT0NGUzJfWEFUVFJfQkxPQ0tfU0lHTkFUVVJFKSkpIHsKKwkJcmV0ID0gLUVGQVVMVDsKKwkJZ290byBvdXQ7CisJfQorCisJcmV0ID0gb2NmczJfeGF0dHJfYmxvY2tfcmVtb3ZlKGlub2RlLCBibGtfYmgpOworCWlmIChyZXQgPCAwKSB7CisJCW1sb2dfZXJybm8ocmV0KTsKKwkJZ290byBvdXQ7CisJfQorCisJeGIgPSAoc3RydWN0IG9jZnMyX3hhdHRyX2Jsb2NrICopYmxrX2JoLT5iX2RhdGE7CisJYmxrID0gbGU2NF90b19jcHUoeGItPnhiX2Jsa25vKTsKKwliaXQgPSBsZTE2X3RvX2NwdSh4Yi0+eGJfc3ViYWxsb2NfYml0KTsKKwliZ19ibGtubyA9IG9jZnMyX3doaWNoX3N1YmFsbG9jX2dyb3VwKGJsaywgYml0KTsKKworCXhiX2FsbG9jX2lub2RlID0gb2NmczJfZ2V0X3N5c3RlbV9maWxlX2lub2RlKG9zYiwKKwkJCQlFWFRFTlRfQUxMT0NfU1lTVEVNX0lOT0RFLAorCQkJCWxlMTZfdG9fY3B1KHhiLT54Yl9zdWJhbGxvY19zbG90KSk7CisJaWYgKCF4Yl9hbGxvY19pbm9kZSkgeworCQlyZXQgPSAtRU5PTUVNOworCQltbG9nX2Vycm5vKHJldCk7CisJCWdvdG8gb3V0OworCX0KKwltdXRleF9sb2NrKCZ4Yl9hbGxvY19pbm9kZS0+aV9tdXRleCk7CisKKwlyZXQgPSBvY2ZzMl9pbm9kZV9sb2NrKHhiX2FsbG9jX2lub2RlLCAmeGJfYWxsb2NfYmgsIDEpOworCWlmIChyZXQgPCAwKSB7CisJCW1sb2dfZXJybm8ocmV0KTsKKwkJZ290byBvdXRfbXV0ZXg7CisJfQorCisJaGFuZGxlID0gb2NmczJfc3RhcnRfdHJhbnMob3NiLCBPQ0ZTMl9TVUJBTExPQ19GUkVFKTsKKwlpZiAoSVNfRVJSKGhhbmRsZSkpIHsKKwkJcmV0ID0gUFRSX0VSUihoYW5kbGUpOworCQltbG9nX2Vycm5vKHJldCk7CisJCWdvdG8gb3V0X3VubG9jazsKKwl9CisKKwlyZXQgPSBvY2ZzMl9mcmVlX3N1YmFsbG9jX2JpdHMoaGFuZGxlLCB4Yl9hbGxvY19pbm9kZSwgeGJfYWxsb2NfYmgsCisJCQkJICAgICAgIGJpdCwgYmdfYmxrbm8sIDEpOworCWlmIChyZXQgPCAwKQorCQltbG9nX2Vycm5vKHJldCk7CisKKwlvY2ZzMl9jb21taXRfdHJhbnMob3NiLCBoYW5kbGUpOworb3V0X3VubG9jazoKKwlvY2ZzMl9pbm9kZV91bmxvY2soeGJfYWxsb2NfaW5vZGUsIDEpOworCWJyZWxzZSh4Yl9hbGxvY19iaCk7CitvdXRfbXV0ZXg6CisJbXV0ZXhfdW5sb2NrKCZ4Yl9hbGxvY19pbm9kZS0+aV9tdXRleCk7CisJaXB1dCh4Yl9hbGxvY19pbm9kZSk7CitvdXQ6CisJYnJlbHNlKGJsa19iaCk7CisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIG9jZnMyX3hhdHRyX3JlbW92ZSgpCisgKgorICogRnJlZSBleHRlbmRlZCBhdHRyaWJ1dGUgcmVzb3VyY2VzIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGlub2RlLgorICovCitpbnQgb2NmczJfeGF0dHJfcmVtb3ZlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBidWZmZXJfaGVhZCAqZGlfYmgpCit7CisJc3RydWN0IG9jZnMyX2lub2RlX2luZm8gKm9pID0gT0NGUzJfSShpbm9kZSk7CisJc3RydWN0IG9jZnMyX2Rpbm9kZSAqZGkgPSAoc3RydWN0IG9jZnMyX2Rpbm9kZSAqKWRpX2JoLT5iX2RhdGE7CisJaGFuZGxlX3QgKmhhbmRsZTsKKwlpbnQgcmV0OworCisJaWYgKCFvY2ZzMl9zdXBwb3J0c194YXR0cihPQ0ZTMl9TQihpbm9kZS0+aV9zYikpKQorCQlyZXR1cm4gMDsKKworCWlmICghKG9pLT5pcF9keW5fZmVhdHVyZXMgJiBPQ0ZTMl9IQVNfWEFUVFJfRkwpKQorCQlyZXR1cm4gMDsKKworCWlmIChvaS0+aXBfZHluX2ZlYXR1cmVzICYgT0NGUzJfSU5MSU5FX1hBVFRSX0ZMKSB7CisJCXJldCA9IG9jZnMyX3hhdHRyX2lib2R5X3JlbW92ZShpbm9kZSwgZGlfYmgpOworCQlpZiAocmV0IDwgMCkgeworCQkJbWxvZ19lcnJubyhyZXQpOworCQkJZ290byBvdXQ7CisJCX0KKwl9CisKKwlpZiAoZGktPmlfeGF0dHJfbG9jKSB7CisJCXJldCA9IG9jZnMyX3hhdHRyX2ZyZWVfYmxvY2soaW5vZGUsCisJCQkJCSAgICAgbGU2NF90b19jcHUoZGktPmlfeGF0dHJfbG9jKSk7CisJCWlmIChyZXQgPCAwKSB7CisJCQltbG9nX2Vycm5vKHJldCk7CisJCQlnb3RvIG91dDsKKwkJfQorCX0KKworCWhhbmRsZSA9IG9jZnMyX3N0YXJ0X3RyYW5zKChPQ0ZTMl9TQihpbm9kZS0+aV9zYikpLAorCQkJCSAgIE9DRlMyX0lOT0RFX1VQREFURV9DUkVESVRTKTsKKwlpZiAoSVNfRVJSKGhhbmRsZSkpIHsKKwkJcmV0ID0gUFRSX0VSUihoYW5kbGUpOworCQltbG9nX2Vycm5vKHJldCk7CisJCWdvdG8gb3V0OworCX0KKwlyZXQgPSBvY2ZzMl9qb3VybmFsX2FjY2VzcyhoYW5kbGUsIGlub2RlLCBkaV9iaCwKKwkJCQkgICBPQ0ZTMl9KT1VSTkFMX0FDQ0VTU19XUklURSk7CisJaWYgKHJldCkgeworCQltbG9nX2Vycm5vKHJldCk7CisJCWdvdG8gb3V0X2NvbW1pdDsKKwl9CisKKwlkaS0+aV94YXR0cl9sb2MgPSAwOworCisJc3Bpbl9sb2NrKCZvaS0+aXBfbG9jayk7CisJb2ktPmlwX2R5bl9mZWF0dXJlcyAmPSB+KE9DRlMyX0lOTElORV9YQVRUUl9GTCB8IE9DRlMyX0hBU19YQVRUUl9GTCk7CisJZGktPmlfZHluX2ZlYXR1cmVzID0gY3B1X3RvX2xlMTYob2ktPmlwX2R5bl9mZWF0dXJlcyk7CisJc3Bpbl91bmxvY2soJm9pLT5pcF9sb2NrKTsKKworCXJldCA9IG9jZnMyX2pvdXJuYWxfZGlydHkoaGFuZGxlLCBkaV9iaCk7CisJaWYgKHJldCA8IDApCisJCW1sb2dfZXJybm8ocmV0KTsKK291dF9jb21taXQ6CisJb2NmczJfY29tbWl0X3RyYW5zKE9DRlMyX1NCKGlub2RlLT5pX3NiKSwgaGFuZGxlKTsKK291dDoKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IG9jZnMyX3hhdHRyX2hhc19zcGFjZV9pbmxpbmUoc3RydWN0IGlub2RlICppbm9kZSwKKwkJCQkJc3RydWN0IG9jZnMyX2Rpbm9kZSAqZGkpCit7CisJc3RydWN0IG9jZnMyX2lub2RlX2luZm8gKm9pID0gT0NGUzJfSShpbm9kZSk7CisJdW5zaWduZWQgaW50IHhhdHRyc2l6ZSA9IE9DRlMyX1NCKGlub2RlLT5pX3NiKS0+c194YXR0cl9pbmxpbmVfc2l6ZTsKKwlpbnQgZnJlZTsKKworCWlmICh4YXR0cnNpemUgPCBPQ0ZTMl9NSU5fWEFUVFJfSU5MSU5FX1NJWkUpCisJCXJldHVybiAwOworCisJaWYgKG9pLT5pcF9keW5fZmVhdHVyZXMgJiBPQ0ZTMl9JTkxJTkVfREFUQV9GTCkgeworCQlzdHJ1Y3Qgb2NmczJfaW5saW5lX2RhdGEgKmlkYXRhID0gJmRpLT5pZDIuaV9kYXRhOworCQlmcmVlID0gbGUxNl90b19jcHUoaWRhdGEtPmlkX2NvdW50KSAtIGxlNjRfdG9fY3B1KGRpLT5pX3NpemUpOworCX0gZWxzZSBpZiAob2NmczJfaW5vZGVfaXNfZmFzdF9zeW1saW5rKGlub2RlKSkgeworCQlmcmVlID0gb2NmczJfZmFzdF9zeW1saW5rX2NoYXJzKGlub2RlLT5pX3NiKSAtCisJCQlsZTY0X3RvX2NwdShkaS0+aV9zaXplKTsKKwl9IGVsc2UgeworCQlzdHJ1Y3Qgb2NmczJfZXh0ZW50X2xpc3QgKmVsID0gJmRpLT5pZDIuaV9saXN0OworCQlmcmVlID0gKGxlMTZfdG9fY3B1KGVsLT5sX2NvdW50KSAtCisJCQlsZTE2X3RvX2NwdShlbC0+bF9uZXh0X2ZyZWVfcmVjKSkgKgorCQkJc2l6ZW9mKHN0cnVjdCBvY2ZzMl9leHRlbnRfcmVjKTsKKwl9CisJaWYgKGZyZWUgPj0geGF0dHJzaXplKQorCQlyZXR1cm4gMTsKKworCXJldHVybiAwOworfQorCisvKgorICogb2NmczJfeGF0dHJfaWJvZHlfZmluZCgpCisgKgorICogRmluZCBleHRlbmRlZCBhdHRyaWJ1dGUgaW4gaW5vZGUgYmxvY2sgYW5kCisgKiBmaWxsIHNlYXJjaCBpbmZvIGludG8gc3RydWN0IG9jZnMyX3hhdHRyX3NlYXJjaC4KKyAqLworc3RhdGljIGludCBvY2ZzMl94YXR0cl9pYm9keV9maW5kKHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCQkJICBpbnQgbmFtZV9pbmRleCwKKwkJCQkgIGNvbnN0IGNoYXIgKm5hbWUsCisJCQkJICBzdHJ1Y3Qgb2NmczJfeGF0dHJfc2VhcmNoICp4cykKK3sKKwlzdHJ1Y3Qgb2NmczJfaW5vZGVfaW5mbyAqb2kgPSBPQ0ZTMl9JKGlub2RlKTsKKwlzdHJ1Y3Qgb2NmczJfZGlub2RlICpkaSA9IChzdHJ1Y3Qgb2NmczJfZGlub2RlICopeHMtPmlub2RlX2JoLT5iX2RhdGE7CisJaW50IHJldDsKKwlpbnQgaGFzX3NwYWNlID0gMDsKKworCWlmIChpbm9kZS0+aV9zYi0+c19ibG9ja3NpemUgPT0gT0NGUzJfTUlOX0JMT0NLU0laRSkKKwkJcmV0dXJuIDA7CisKKwlpZiAoIShvaS0+aXBfZHluX2ZlYXR1cmVzICYgT0NGUzJfSU5MSU5FX1hBVFRSX0ZMKSkgeworCQlkb3duX3JlYWQoJm9pLT5pcF9hbGxvY19zZW0pOworCQloYXNfc3BhY2UgPSBvY2ZzMl94YXR0cl9oYXNfc3BhY2VfaW5saW5lKGlub2RlLCBkaSk7CisJCXVwX3JlYWQoJm9pLT5pcF9hbGxvY19zZW0pOworCQlpZiAoIWhhc19zcGFjZSkKKwkJCXJldHVybiAwOworCX0KKworCXhzLT54YXR0cl9iaCA9IHhzLT5pbm9kZV9iaDsKKwl4cy0+ZW5kID0gKHZvaWQgKilkaSArIGlub2RlLT5pX3NiLT5zX2Jsb2Nrc2l6ZTsKKwlpZiAob2ktPmlwX2R5bl9mZWF0dXJlcyAmIE9DRlMyX0lOTElORV9YQVRUUl9GTCkKKwkJeHMtPmhlYWRlciA9IChzdHJ1Y3Qgb2NmczJfeGF0dHJfaGVhZGVyICopCisJCQkoeHMtPmVuZCAtIGxlMTZfdG9fY3B1KGRpLT5pX3hhdHRyX2lubGluZV9zaXplKSk7CisJZWxzZQorCQl4cy0+aGVhZGVyID0gKHN0cnVjdCBvY2ZzMl94YXR0cl9oZWFkZXIgKikKKwkJCSh4cy0+ZW5kIC0gT0NGUzJfU0IoaW5vZGUtPmlfc2IpLT5zX3hhdHRyX2lubGluZV9zaXplKTsKKwl4cy0+YmFzZSA9ICh2b2lkICopeHMtPmhlYWRlcjsKKwl4cy0+aGVyZSA9IHhzLT5oZWFkZXItPnhoX2VudHJpZXM7CisKKwkvKiBGaW5kIHRoZSBuYW1lZCBhdHRyaWJ1dGUuICovCisJaWYgKG9pLT5pcF9keW5fZmVhdHVyZXMgJiBPQ0ZTMl9JTkxJTkVfWEFUVFJfRkwpIHsKKwkJcmV0ID0gb2NmczJfeGF0dHJfZmluZF9lbnRyeShuYW1lX2luZGV4LCBuYW1lLCB4cyk7CisJCWlmIChyZXQgJiYgcmV0ICE9IC1FTk9EQVRBKQorCQkJcmV0dXJuIHJldDsKKwkJeHMtPm5vdF9mb3VuZCA9IHJldDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIG9jZnMyX3hhdHRyX2lib2R5X3NldCgpCisgKgorICogU2V0LCByZXBsYWNlIG9yIHJlbW92ZSBhbiBleHRlbmRlZCBhdHRyaWJ1dGUgaW50byBpbm9kZSBibG9jay4KKyAqCisgKi8KK3N0YXRpYyBpbnQgb2NmczJfeGF0dHJfaWJvZHlfc2V0KHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCQkJIHN0cnVjdCBvY2ZzMl94YXR0cl9pbmZvICp4aSwKKwkJCQkgc3RydWN0IG9jZnMyX3hhdHRyX3NlYXJjaCAqeHMpCit7CisJc3RydWN0IG9jZnMyX2lub2RlX2luZm8gKm9pID0gT0NGUzJfSShpbm9kZSk7CisJc3RydWN0IG9jZnMyX2Rpbm9kZSAqZGkgPSAoc3RydWN0IG9jZnMyX2Rpbm9kZSAqKXhzLT5pbm9kZV9iaC0+Yl9kYXRhOworCWludCByZXQ7CisKKwlpZiAoaW5vZGUtPmlfc2ItPnNfYmxvY2tzaXplID09IE9DRlMyX01JTl9CTE9DS1NJWkUpCisJCXJldHVybiAtRU5PU1BDOworCisJZG93bl93cml0ZSgmb2ktPmlwX2FsbG9jX3NlbSk7CisJaWYgKCEob2ktPmlwX2R5bl9mZWF0dXJlcyAmIE9DRlMyX0lOTElORV9YQVRUUl9GTCkpIHsKKwkJaWYgKCFvY2ZzMl94YXR0cl9oYXNfc3BhY2VfaW5saW5lKGlub2RlLCBkaSkpIHsKKwkJCXJldCA9IC1FTk9TUEM7CisJCQlnb3RvIG91dDsKKwkJfQorCX0KKworCXJldCA9IG9jZnMyX3hhdHRyX3NldF9lbnRyeShpbm9kZSwgeGksIHhzLAorCQkJCShPQ0ZTMl9JTkxJTkVfWEFUVFJfRkwgfCBPQ0ZTMl9IQVNfWEFUVFJfRkwpKTsKK291dDoKKwl1cF93cml0ZSgmb2ktPmlwX2FsbG9jX3NlbSk7CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogb2NmczJfeGF0dHJfYmxvY2tfZmluZCgpCisgKgorICogRmluZCBleHRlbmRlZCBhdHRyaWJ1dGUgaW4gZXh0ZXJuYWwgYmxvY2sgYW5kCisgKiBmaWxsIHNlYXJjaCBpbmZvIGludG8gc3RydWN0IG9jZnMyX3hhdHRyX3NlYXJjaC4KKyAqLworc3RhdGljIGludCBvY2ZzMl94YXR0cl9ibG9ja19maW5kKHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCQkJICBpbnQgbmFtZV9pbmRleCwKKwkJCQkgIGNvbnN0IGNoYXIgKm5hbWUsCisJCQkJICBzdHJ1Y3Qgb2NmczJfeGF0dHJfc2VhcmNoICp4cykKK3sKKwlzdHJ1Y3Qgb2NmczJfZGlub2RlICpkaSA9IChzdHJ1Y3Qgb2NmczJfZGlub2RlICopeHMtPmlub2RlX2JoLT5iX2RhdGE7CisJc3RydWN0IGJ1ZmZlcl9oZWFkICpibGtfYmggPSBOVUxMOworCXN0cnVjdCBvY2ZzMl94YXR0cl9ibG9jayAqeGI7CisJaW50IHJldCA9IDA7CisKKwlpZiAoIWRpLT5pX3hhdHRyX2xvYykKKwkJcmV0dXJuIHJldDsKKworCXJldCA9IG9jZnMyX3JlYWRfYmxvY2soaW5vZGUsIGxlNjRfdG9fY3B1KGRpLT5pX3hhdHRyX2xvYyksICZibGtfYmgpOworCWlmIChyZXQgPCAwKSB7CisJCW1sb2dfZXJybm8ocmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisJLypWZXJpZnkgdGhlIHNpZ25hdHVyZSBvZiB4YXR0ciBibG9jayovCisJaWYgKG1lbWNtcCgodm9pZCAqKWJsa19iaC0+Yl9kYXRhLCBPQ0ZTMl9YQVRUUl9CTE9DS19TSUdOQVRVUkUsCisJCSAgIHN0cmxlbihPQ0ZTMl9YQVRUUl9CTE9DS19TSUdOQVRVUkUpKSkgeworCQkJcmV0ID0gLUVGQVVMVDsKKwkJCWdvdG8gY2xlYW51cDsKKwl9CisKKwl4cy0+eGF0dHJfYmggPSBibGtfYmg7CisJeGIgPSAoc3RydWN0IG9jZnMyX3hhdHRyX2Jsb2NrICopYmxrX2JoLT5iX2RhdGE7CisKKwlpZiAoIShsZTE2X3RvX2NwdSh4Yi0+eGJfZmxhZ3MpICYgT0NGUzJfWEFUVFJfSU5ERVhFRCkpIHsKKwkJeHMtPmhlYWRlciA9ICZ4Yi0+eGJfYXR0cnMueGJfaGVhZGVyOworCQl4cy0+YmFzZSA9ICh2b2lkICopeHMtPmhlYWRlcjsKKwkJeHMtPmVuZCA9ICh2b2lkICopKGJsa19iaC0+Yl9kYXRhKSArIGJsa19iaC0+Yl9zaXplOworCQl4cy0+aGVyZSA9IHhzLT5oZWFkZXItPnhoX2VudHJpZXM7CisKKwkJcmV0ID0gb2NmczJfeGF0dHJfZmluZF9lbnRyeShuYW1lX2luZGV4LCBuYW1lLCB4cyk7CisJfSBlbHNlCisJCXJldCA9IG9jZnMyX3hhdHRyX2luZGV4X2Jsb2NrX2ZpbmQoaW5vZGUsIGJsa19iaCwKKwkJCQkJCSAgIG5hbWVfaW5kZXgsCisJCQkJCQkgICBuYW1lLCB4cyk7CisKKwlpZiAocmV0ICYmIHJldCAhPSAtRU5PREFUQSkgeworCQl4cy0+eGF0dHJfYmggPSBOVUxMOworCQlnb3RvIGNsZWFudXA7CisJfQorCXhzLT5ub3RfZm91bmQgPSByZXQ7CisJcmV0dXJuIDA7CitjbGVhbnVwOgorCWJyZWxzZShibGtfYmgpOworCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIFdoZW4gYWxsIHRoZSB4YXR0cnMgYXJlIGRlbGV0ZWQgZnJvbSBpbmRleCBidHJlZSwgdGhlIG9jZnMyX3hhdHRyX3RyZWUKKyAqIHdpbGwgYmUgZXJhc2VkIGFuZCBvY2ZzMl94YXR0cl9ibG9jayB3aWxsIGhhdmUgaXRzIG9jZnMyX3hhdHRyX2hlYWRlcgorICogcmUtaW5pdGlhbGl6ZWQuCisgKi8KK3N0YXRpYyBpbnQgb2NmczJfcmVzdG9yZV94YXR0cl9ibG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkJCSAgICAgc3RydWN0IG9jZnMyX3hhdHRyX3NlYXJjaCAqeHMpCit7CisJaW50IHJldDsKKwloYW5kbGVfdCAqaGFuZGxlOworCXN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiID0gT0NGUzJfU0IoaW5vZGUtPmlfc2IpOworCXN0cnVjdCBvY2ZzMl94YXR0cl9ibG9jayAqeGIgPQorCQkoc3RydWN0IG9jZnMyX3hhdHRyX2Jsb2NrICopeHMtPnhhdHRyX2JoLT5iX2RhdGE7CisJc3RydWN0IG9jZnMyX2V4dGVudF9saXN0ICplbCA9ICZ4Yi0+eGJfYXR0cnMueGJfcm9vdC54dF9saXN0OworCXUxNiB4Yl9mbGFncyA9IGxlMTZfdG9fY3B1KHhiLT54Yl9mbGFncyk7CisKKwlCVUdfT04oISh4Yl9mbGFncyAmIE9DRlMyX1hBVFRSX0lOREVYRUQpIHx8CisJCWxlMTZfdG9fY3B1KGVsLT5sX25leHRfZnJlZV9yZWMpICE9IDApOworCisJaGFuZGxlID0gb2NmczJfc3RhcnRfdHJhbnMob3NiLCBPQ0ZTMl9YQVRUUl9CTE9DS19VUERBVEVfQ1JFRElUUyk7CisJaWYgKElTX0VSUihoYW5kbGUpKSB7CisJCXJldCA9IFBUUl9FUlIoaGFuZGxlKTsKKwkJaGFuZGxlID0gTlVMTDsKKwkJZ290byBvdXQ7CisJfQorCisJcmV0ID0gb2NmczJfam91cm5hbF9hY2Nlc3MoaGFuZGxlLCBpbm9kZSwgeHMtPnhhdHRyX2JoLAorCQkJCSAgIE9DRlMyX0pPVVJOQUxfQUNDRVNTX1dSSVRFKTsKKwlpZiAocmV0IDwgMCkgeworCQltbG9nX2Vycm5vKHJldCk7CisJCWdvdG8gb3V0X2NvbW1pdDsKKwl9CisKKwltZW1zZXQoJnhiLT54Yl9hdHRycywgMCwgaW5vZGUtPmlfc2ItPnNfYmxvY2tzaXplIC0KKwkgICAgICAgb2Zmc2V0b2Yoc3RydWN0IG9jZnMyX3hhdHRyX2Jsb2NrLCB4Yl9hdHRycykpOworCisJeGItPnhiX2ZsYWdzID0gY3B1X3RvX2xlMTYoeGJfZmxhZ3MgJiB+T0NGUzJfWEFUVFJfSU5ERVhFRCk7CisKKwlvY2ZzMl9qb3VybmFsX2RpcnR5KGhhbmRsZSwgeHMtPnhhdHRyX2JoKTsKKworb3V0X2NvbW1pdDoKKwlvY2ZzMl9jb21taXRfdHJhbnMob3NiLCBoYW5kbGUpOworb3V0OgorCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBvY2ZzMl94YXR0cl9ibG9ja19zZXQoKQorICoKKyAqIFNldCwgcmVwbGFjZSBvciByZW1vdmUgYW4gZXh0ZW5kZWQgYXR0cmlidXRlIGludG8gZXh0ZXJuYWwgYmxvY2suCisgKgorICovCitzdGF0aWMgaW50IG9jZnMyX3hhdHRyX2Jsb2NrX3NldChzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkJCSBzdHJ1Y3Qgb2NmczJfeGF0dHJfaW5mbyAqeGksCisJCQkJIHN0cnVjdCBvY2ZzMl94YXR0cl9zZWFyY2ggKnhzKQoreworCXN0cnVjdCBidWZmZXJfaGVhZCAqbmV3X2JoID0gTlVMTDsKKwlzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiA9IE9DRlMyX1NCKGlub2RlLT5pX3NiKTsKKwlzdHJ1Y3Qgb2NmczJfZGlub2RlICpkaSA9ICAoc3RydWN0IG9jZnMyX2Rpbm9kZSAqKXhzLT5pbm9kZV9iaC0+Yl9kYXRhOworCXN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICptZXRhX2FjID0gTlVMTDsKKwloYW5kbGVfdCAqaGFuZGxlID0gTlVMTDsKKwlzdHJ1Y3Qgb2NmczJfeGF0dHJfYmxvY2sgKnhibGsgPSBOVUxMOworCXUxNiBzdWJhbGxvY19iaXRfc3RhcnQ7CisJdTMyIG51bV9nb3Q7CisJdTY0IGZpcnN0X2Jsa25vOworCWludCByZXQ7CisKKwlpZiAoIXhzLT54YXR0cl9iaCkgeworCQkvKgorCQkgKiBBbGxvYyBvbmUgZXh0ZXJuYWwgYmxvY2sgZm9yIGV4dGVuZGVkIGF0dHJpYnV0ZQorCQkgKiBvdXRzaWRlIG9mIGlub2RlLgorCQkgKi8KKwkJcmV0ID0gb2NmczJfcmVzZXJ2ZV9uZXdfbWV0YWRhdGFfYmxvY2tzKG9zYiwgMSwgJm1ldGFfYWMpOworCQlpZiAocmV0IDwgMCkgeworCQkJbWxvZ19lcnJubyhyZXQpOworCQkJZ290byBvdXQ7CisJCX0KKwkJaGFuZGxlID0gb2NmczJfc3RhcnRfdHJhbnMob3NiLAorCQkJCQkgICBPQ0ZTMl9YQVRUUl9CTE9DS19DUkVBVEVfQ1JFRElUUyk7CisJCWlmIChJU19FUlIoaGFuZGxlKSkgeworCQkJcmV0ID0gUFRSX0VSUihoYW5kbGUpOworCQkJbWxvZ19lcnJubyhyZXQpOworCQkJZ290byBvdXQ7CisJCX0KKwkJcmV0ID0gb2NmczJfam91cm5hbF9hY2Nlc3MoaGFuZGxlLCBpbm9kZSwgeHMtPmlub2RlX2JoLAorCQkJCQkgICBPQ0ZTMl9KT1VSTkFMX0FDQ0VTU19DUkVBVEUpOworCQlpZiAocmV0IDwgMCkgeworCQkJbWxvZ19lcnJubyhyZXQpOworCQkJZ290byBvdXRfY29tbWl0OworCQl9CisKKwkJcmV0ID0gb2NmczJfY2xhaW1fbWV0YWRhdGEob3NiLCBoYW5kbGUsIG1ldGFfYWMsIDEsCisJCQkJCSAgICZzdWJhbGxvY19iaXRfc3RhcnQsICZudW1fZ290LAorCQkJCQkgICAmZmlyc3RfYmxrbm8pOworCQlpZiAocmV0IDwgMCkgeworCQkJbWxvZ19lcnJubyhyZXQpOworCQkJZ290byBvdXRfY29tbWl0OworCQl9CisKKwkJbmV3X2JoID0gc2JfZ2V0YmxrKGlub2RlLT5pX3NiLCBmaXJzdF9ibGtubyk7CisJCW9jZnMyX3NldF9uZXdfYnVmZmVyX3VwdG9kYXRlKGlub2RlLCBuZXdfYmgpOworCisJCXJldCA9IG9jZnMyX2pvdXJuYWxfYWNjZXNzKGhhbmRsZSwgaW5vZGUsIG5ld19iaCwKKwkJCQkJICAgT0NGUzJfSk9VUk5BTF9BQ0NFU1NfQ1JFQVRFKTsKKwkJaWYgKHJldCA8IDApIHsKKwkJCW1sb2dfZXJybm8ocmV0KTsKKwkJCWdvdG8gb3V0X2NvbW1pdDsKKwkJfQorCisJCS8qIEluaXRpYWxpemUgb2NmczJfeGF0dHJfYmxvY2sgKi8KKwkJeHMtPnhhdHRyX2JoID0gbmV3X2JoOworCQl4YmxrID0gKHN0cnVjdCBvY2ZzMl94YXR0cl9ibG9jayAqKW5ld19iaC0+Yl9kYXRhOworCQltZW1zZXQoeGJsaywgMCwgaW5vZGUtPmlfc2ItPnNfYmxvY2tzaXplKTsKKwkJc3RyY3B5KCh2b2lkICopeGJsaywgT0NGUzJfWEFUVFJfQkxPQ0tfU0lHTkFUVVJFKTsKKwkJeGJsay0+eGJfc3ViYWxsb2Nfc2xvdCA9IGNwdV90b19sZTE2KG9zYi0+c2xvdF9udW0pOworCQl4YmxrLT54Yl9zdWJhbGxvY19iaXQgPSBjcHVfdG9fbGUxNihzdWJhbGxvY19iaXRfc3RhcnQpOworCQl4YmxrLT54Yl9mc19nZW5lcmF0aW9uID0gY3B1X3RvX2xlMzIob3NiLT5mc19nZW5lcmF0aW9uKTsKKwkJeGJsay0+eGJfYmxrbm8gPSBjcHVfdG9fbGU2NChmaXJzdF9ibGtubyk7CisKKwkJeHMtPmhlYWRlciA9ICZ4YmxrLT54Yl9hdHRycy54Yl9oZWFkZXI7CisJCXhzLT5iYXNlID0gKHZvaWQgKil4cy0+aGVhZGVyOworCQl4cy0+ZW5kID0gKHZvaWQgKil4YmxrICsgaW5vZGUtPmlfc2ItPnNfYmxvY2tzaXplOworCQl4cy0+aGVyZSA9IHhzLT5oZWFkZXItPnhoX2VudHJpZXM7CisKKworCQlyZXQgPSBvY2ZzMl9qb3VybmFsX2RpcnR5KGhhbmRsZSwgbmV3X2JoKTsKKwkJaWYgKHJldCA8IDApIHsKKwkJCW1sb2dfZXJybm8ocmV0KTsKKwkJCWdvdG8gb3V0X2NvbW1pdDsKKwkJfQorCQlkaS0+aV94YXR0cl9sb2MgPSBjcHVfdG9fbGU2NChmaXJzdF9ibGtubyk7CisJCXJldCA9IG9jZnMyX2pvdXJuYWxfZGlydHkoaGFuZGxlLCB4cy0+aW5vZGVfYmgpOworCQlpZiAocmV0IDwgMCkKKwkJCW1sb2dfZXJybm8ocmV0KTsKK291dF9jb21taXQ6CisJCW9jZnMyX2NvbW1pdF90cmFucyhvc2IsIGhhbmRsZSk7CitvdXQ6CisJCWlmIChtZXRhX2FjKQorCQkJb2NmczJfZnJlZV9hbGxvY19jb250ZXh0KG1ldGFfYWMpOworCQlpZiAocmV0IDwgMCkKKwkJCXJldHVybiByZXQ7CisJfSBlbHNlCisJCXhibGsgPSAoc3RydWN0IG9jZnMyX3hhdHRyX2Jsb2NrICopeHMtPnhhdHRyX2JoLT5iX2RhdGE7CisKKwlpZiAoIShsZTE2X3RvX2NwdSh4YmxrLT54Yl9mbGFncykgJiBPQ0ZTMl9YQVRUUl9JTkRFWEVEKSkgeworCQkvKiBTZXQgZXh0ZW5kZWQgYXR0cmlidXRlIGludG8gZXh0ZXJuYWwgYmxvY2sgKi8KKwkJcmV0ID0gb2NmczJfeGF0dHJfc2V0X2VudHJ5KGlub2RlLCB4aSwgeHMsIE9DRlMyX0hBU19YQVRUUl9GTCk7CisJCWlmICghcmV0IHx8IHJldCAhPSAtRU5PU1BDKQorCQkJZ290byBlbmQ7CisKKwkJcmV0ID0gb2NmczJfeGF0dHJfY3JlYXRlX2luZGV4X2Jsb2NrKGlub2RlLCB4cyk7CisJCWlmIChyZXQpCisJCQlnb3RvIGVuZDsKKwl9CisKKwlyZXQgPSBvY2ZzMl94YXR0cl9zZXRfZW50cnlfaW5kZXhfYmxvY2soaW5vZGUsIHhpLCB4cyk7CisJaWYgKCFyZXQgJiYgeGJsay0+eGJfYXR0cnMueGJfcm9vdC54dF9saXN0LmxfbmV4dF9mcmVlX3JlYyA9PSAwKQorCQlyZXQgPSBvY2ZzMl9yZXN0b3JlX3hhdHRyX2Jsb2NrKGlub2RlLCB4cyk7CisKK2VuZDoKKworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBvY2ZzMl94YXR0cl9zZXQoKQorICoKKyAqIFNldCwgcmVwbGFjZSBvciByZW1vdmUgYW4gZXh0ZW5kZWQgYXR0cmlidXRlIGZvciB0aGlzIGlub2RlLgorICogdmFsdWUgaXMgTlVMTCB0byByZW1vdmUgYW4gZXhpc3RpbmcgZXh0ZW5kZWQgYXR0cmlidXRlLCBlbHNlIGVpdGhlcgorICogY3JlYXRlIG9yIHJlcGxhY2UgYW4gZXh0ZW5kZWQgYXR0cmlidXRlLgorICovCitpbnQgb2NmczJfeGF0dHJfc2V0KHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCSAgICBpbnQgbmFtZV9pbmRleCwKKwkJICAgIGNvbnN0IGNoYXIgKm5hbWUsCisJCSAgICBjb25zdCB2b2lkICp2YWx1ZSwKKwkJICAgIHNpemVfdCB2YWx1ZV9sZW4sCisJCSAgICBpbnQgZmxhZ3MpCit7CisJc3RydWN0IGJ1ZmZlcl9oZWFkICpkaV9iaCA9IE5VTEw7CisJc3RydWN0IG9jZnMyX2Rpbm9kZSAqZGk7CisJaW50IHJldDsKKwl1MTYgaSwgYmxrX3Blcl9idWNrZXQgPSBvY2ZzMl9ibG9ja3NfcGVyX3hhdHRyX2J1Y2tldChpbm9kZS0+aV9zYik7CisKKwlzdHJ1Y3Qgb2NmczJfeGF0dHJfaW5mbyB4aSA9IHsKKwkJLm5hbWVfaW5kZXggPSBuYW1lX2luZGV4LAorCQkubmFtZSA9IG5hbWUsCisJCS52YWx1ZSA9IHZhbHVlLAorCQkudmFsdWVfbGVuID0gdmFsdWVfbGVuLAorCX07CisKKwlzdHJ1Y3Qgb2NmczJfeGF0dHJfc2VhcmNoIHhpcyA9IHsKKwkJLm5vdF9mb3VuZCA9IC1FTk9EQVRBLAorCX07CisKKwlzdHJ1Y3Qgb2NmczJfeGF0dHJfc2VhcmNoIHhicyA9IHsKKwkJLm5vdF9mb3VuZCA9IC1FTk9EQVRBLAorCX07CisKKwlpZiAoIW9jZnMyX3N1cHBvcnRzX3hhdHRyKE9DRlMyX1NCKGlub2RlLT5pX3NiKSkpCisJCXJldHVybiAtRU9QTk9UU1VQUDsKKworCXJldCA9IG9jZnMyX2lub2RlX2xvY2soaW5vZGUsICZkaV9iaCwgMSk7CisJaWYgKHJldCA8IDApIHsKKwkJbWxvZ19lcnJubyhyZXQpOworCQlyZXR1cm4gcmV0OworCX0KKwl4aXMuaW5vZGVfYmggPSB4YnMuaW5vZGVfYmggPSBkaV9iaDsKKwlkaSA9IChzdHJ1Y3Qgb2NmczJfZGlub2RlICopZGlfYmgtPmJfZGF0YTsKKworCWRvd25fd3JpdGUoJk9DRlMyX0koaW5vZGUpLT5pcF94YXR0cl9zZW0pOworCS8qCisJICogU2NhbiBpbm9kZSBhbmQgZXh0ZXJuYWwgYmxvY2sgdG8gZmluZCB0aGUgc2FtZSBuYW1lCisJICogZXh0ZW5kZWQgYXR0cmlidXRlIGFuZCBjb2xsZWN0IHNlYXJjaCBpbmZvbWF0aW9uLgorCSAqLworCXJldCA9IG9jZnMyX3hhdHRyX2lib2R5X2ZpbmQoaW5vZGUsIG5hbWVfaW5kZXgsIG5hbWUsICZ4aXMpOworCWlmIChyZXQpCisJCWdvdG8gY2xlYW51cDsKKwlpZiAoeGlzLm5vdF9mb3VuZCkgeworCQlyZXQgPSBvY2ZzMl94YXR0cl9ibG9ja19maW5kKGlub2RlLCBuYW1lX2luZGV4LCBuYW1lLCAmeGJzKTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gY2xlYW51cDsKKwl9CisKKwlpZiAoeGlzLm5vdF9mb3VuZCAmJiB4YnMubm90X2ZvdW5kKSB7CisJCXJldCA9IC1FTk9EQVRBOworCQlpZiAoZmxhZ3MgJiBYQVRUUl9SRVBMQUNFKQorCQkJZ290byBjbGVhbnVwOworCQlyZXQgPSAwOworCQlpZiAoIXZhbHVlKQorCQkJZ290byBjbGVhbnVwOworCX0gZWxzZSB7CisJCXJldCA9IC1FRVhJU1Q7CisJCWlmIChmbGFncyAmIFhBVFRSX0NSRUFURSkKKwkJCWdvdG8gY2xlYW51cDsKKwl9CisKKwlpZiAoIXZhbHVlKSB7CisJCS8qIFJlbW92ZSBleGlzdGluZyBleHRlbmRlZCBhdHRyaWJ1dGUgKi8KKwkJaWYgKCF4aXMubm90X2ZvdW5kKQorCQkJcmV0ID0gb2NmczJfeGF0dHJfaWJvZHlfc2V0KGlub2RlLCAmeGksICZ4aXMpOworCQllbHNlIGlmICgheGJzLm5vdF9mb3VuZCkKKwkJCXJldCA9IG9jZnMyX3hhdHRyX2Jsb2NrX3NldChpbm9kZSwgJnhpLCAmeGJzKTsKKwl9IGVsc2UgeworCQkvKiBXZSBhbHdheXMgdHJ5IHRvIHNldCBleHRlbmRlZCBhdHRyaWJ1dGUgaW50byBpbm9kZSBmaXJzdCovCisJCXJldCA9IG9jZnMyX3hhdHRyX2lib2R5X3NldChpbm9kZSwgJnhpLCAmeGlzKTsKKwkJaWYgKCFyZXQgJiYgIXhicy5ub3RfZm91bmQpIHsKKwkJCS8qCisJCQkgKiBJZiBzdWNjZWVkIGFuZCB0aGF0IGV4dGVuZGVkIGF0dHJpYnV0ZSBleGlzdGluZyBpbgorCQkJICogZXh0ZXJuYWwgYmxvY2ssIHRoZW4gd2Ugd2lsbCByZW1vdmUgaXQuCisJCQkgKi8KKwkJCXhpLnZhbHVlID0gTlVMTDsKKwkJCXhpLnZhbHVlX2xlbiA9IDA7CisJCQlyZXQgPSBvY2ZzMl94YXR0cl9ibG9ja19zZXQoaW5vZGUsICZ4aSwgJnhicyk7CisJCX0gZWxzZSBpZiAocmV0ID09IC1FTk9TUEMpIHsKKwkJCWlmIChkaS0+aV94YXR0cl9sb2MgJiYgIXhicy54YXR0cl9iaCkgeworCQkJCXJldCA9IG9jZnMyX3hhdHRyX2Jsb2NrX2ZpbmQoaW5vZGUsIG5hbWVfaW5kZXgsCisJCQkJCQkJICAgICBuYW1lLCAmeGJzKTsKKwkJCQlpZiAocmV0KQorCQkJCQlnb3RvIGNsZWFudXA7CisJCQl9CisJCQkvKgorCQkJICogSWYgbm8gc3BhY2UgaW4gaW5vZGUsIHdlIHdpbGwgc2V0IGV4dGVuZGVkIGF0dHJpYnV0ZQorCQkJICogaW50byBleHRlcm5hbCBibG9jay4KKwkJCSAqLworCQkJcmV0ID0gb2NmczJfeGF0dHJfYmxvY2tfc2V0KGlub2RlLCAmeGksICZ4YnMpOworCQkJaWYgKHJldCkKKwkJCQlnb3RvIGNsZWFudXA7CisJCQlpZiAoIXhpcy5ub3RfZm91bmQpIHsKKwkJCQkvKgorCQkJCSAqIElmIHN1Y2NlZWQgYW5kIHRoYXQgZXh0ZW5kZWQgYXR0cmlidXRlCisJCQkJICogZXhpc3RpbmcgaW4gaW5vZGUsIHdlIHdpbGwgcmVtb3ZlIGl0LgorCQkJCSAqLworCQkJCXhpLnZhbHVlID0gTlVMTDsKKwkJCQl4aS52YWx1ZV9sZW4gPSAwOworCQkJCXJldCA9IG9jZnMyX3hhdHRyX2lib2R5X3NldChpbm9kZSwgJnhpLCAmeGlzKTsKKwkJCX0KKwkJfQorCX0KK2NsZWFudXA6CisJdXBfd3JpdGUoJk9DRlMyX0koaW5vZGUpLT5pcF94YXR0cl9zZW0pOworCW9jZnMyX2lub2RlX3VubG9jayhpbm9kZSwgMSk7CisJYnJlbHNlKGRpX2JoKTsKKwlicmVsc2UoeGJzLnhhdHRyX2JoKTsKKwlmb3IgKGkgPSAwOyBpIDwgYmxrX3Blcl9idWNrZXQ7IGkrKykKKwkJYnJlbHNlKHhicy5idWNrZXQuYmhzW2ldKTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBGaW5kIHRoZSB4YXR0ciBleHRlbnQgcmVjIHdoaWNoIG1heSBjb250YWlucyBuYW1lX2hhc2guCisgKiBlX2Nwb3Mgd2lsbCBiZSB0aGUgZmlyc3QgbmFtZSBoYXNoIG9mIHRoZSB4YXR0ciByZWMuCisgKiBlbCBtdXN0IGJlIHRoZSBvY2ZzMl94YXR0cl9oZWFkZXIueGJfYXR0cnMueGJfcm9vdC54dF9saXN0LgorICovCitzdGF0aWMgaW50IG9jZnMyX3hhdHRyX2dldF9yZWMoc3RydWN0IGlub2RlICppbm9kZSwKKwkJCSAgICAgICB1MzIgbmFtZV9oYXNoLAorCQkJICAgICAgIHU2NCAqcF9ibGtubywKKwkJCSAgICAgICB1MzIgKmVfY3BvcywKKwkJCSAgICAgICB1MzIgKm51bV9jbHVzdGVycywKKwkJCSAgICAgICBzdHJ1Y3Qgb2NmczJfZXh0ZW50X2xpc3QgKmVsKQoreworCWludCByZXQgPSAwLCBpOworCXN0cnVjdCBidWZmZXJfaGVhZCAqZWJfYmggPSBOVUxMOworCXN0cnVjdCBvY2ZzMl9leHRlbnRfYmxvY2sgKmViOworCXN0cnVjdCBvY2ZzMl9leHRlbnRfcmVjICpyZWMgPSBOVUxMOworCXU2NCBlX2Jsa25vID0gMDsKKworCWlmIChlbC0+bF90cmVlX2RlcHRoKSB7CisJCXJldCA9IG9jZnMyX2ZpbmRfbGVhZihpbm9kZSwgZWwsIG5hbWVfaGFzaCwgJmViX2JoKTsKKwkJaWYgKHJldCkgeworCQkJbWxvZ19lcnJubyhyZXQpOworCQkJZ290byBvdXQ7CisJCX0KKworCQllYiA9IChzdHJ1Y3Qgb2NmczJfZXh0ZW50X2Jsb2NrICopIGViX2JoLT5iX2RhdGE7CisJCWVsID0gJmViLT5oX2xpc3Q7CisKKwkJaWYgKGVsLT5sX3RyZWVfZGVwdGgpIHsKKwkJCW9jZnMyX2Vycm9yKGlub2RlLT5pX3NiLAorCQkJCSAgICAiSW5vZGUgJWx1IGhhcyBub24gemVybyB0cmVlIGRlcHRoIGluICIKKwkJCQkgICAgInhhdHRyIHRyZWUgYmxvY2sgJWxsdVxuIiwgaW5vZGUtPmlfaW5vLAorCQkJCSAgICAodW5zaWduZWQgbG9uZyBsb25nKWViX2JoLT5iX2Jsb2NrbnIpOworCQkJcmV0ID0gLUVST0ZTOworCQkJZ290byBvdXQ7CisJCX0KKwl9CisKKwlmb3IgKGkgPSBsZTE2X3RvX2NwdShlbC0+bF9uZXh0X2ZyZWVfcmVjKSAtIDE7IGkgPj0gMDsgaS0tKSB7CisJCXJlYyA9ICZlbC0+bF9yZWNzW2ldOworCisJCWlmIChsZTMyX3RvX2NwdShyZWMtPmVfY3BvcykgPD0gbmFtZV9oYXNoKSB7CisJCQllX2Jsa25vID0gbGU2NF90b19jcHUocmVjLT5lX2Jsa25vKTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJaWYgKCFlX2Jsa25vKSB7CisJCW9jZnMyX2Vycm9yKGlub2RlLT5pX3NiLCAiSW5vZGUgJWx1IGhhcyBiYWQgZXh0ZW50ICIKKwkJCSAgICAicmVjb3JkICgldSwgJXUsIDApIGluIHhhdHRyIiwgaW5vZGUtPmlfaW5vLAorCQkJICAgIGxlMzJfdG9fY3B1KHJlYy0+ZV9jcG9zKSwKKwkJCSAgICBvY2ZzMl9yZWNfY2x1c3RlcnMoZWwsIHJlYykpOworCQlyZXQgPSAtRVJPRlM7CisJCWdvdG8gb3V0OworCX0KKworCSpwX2Jsa25vID0gbGU2NF90b19jcHUocmVjLT5lX2Jsa25vKTsKKwkqbnVtX2NsdXN0ZXJzID0gbGUxNl90b19jcHUocmVjLT5lX2xlYWZfY2x1c3RlcnMpOworCWlmIChlX2Nwb3MpCisJCSplX2Nwb3MgPSBsZTMyX3RvX2NwdShyZWMtPmVfY3Bvcyk7CitvdXQ6CisJYnJlbHNlKGViX2JoKTsKKwlyZXR1cm4gcmV0OworfQorCit0eXBlZGVmIGludCAoeGF0dHJfYnVja2V0X2Z1bmMpKHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCQkJc3RydWN0IG9jZnMyX3hhdHRyX2J1Y2tldCAqYnVja2V0LAorCQkJCXZvaWQgKnBhcmEpOworCitzdGF0aWMgaW50IG9jZnMyX2ZpbmRfeGVfaW5fYnVja2V0KHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCQkJICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpoZWFkZXJfYmgsCisJCQkJICAgaW50IG5hbWVfaW5kZXgsCisJCQkJICAgY29uc3QgY2hhciAqbmFtZSwKKwkJCQkgICB1MzIgbmFtZV9oYXNoLAorCQkJCSAgIHUxNiAqeGVfaW5kZXgsCisJCQkJICAgaW50ICpmb3VuZCkKK3sKKwlpbnQgaSwgcmV0ID0gMCwgY21wID0gMSwgYmxvY2tfb2ZmLCBuZXdfb2Zmc2V0OworCXN0cnVjdCBvY2ZzMl94YXR0cl9oZWFkZXIgKnhoID0KKwkJCShzdHJ1Y3Qgb2NmczJfeGF0dHJfaGVhZGVyICopaGVhZGVyX2JoLT5iX2RhdGE7CisJc2l6ZV90IG5hbWVfbGVuID0gc3RybGVuKG5hbWUpOworCXN0cnVjdCBvY2ZzMl94YXR0cl9lbnRyeSAqeGUgPSBOVUxMOworCXN0cnVjdCBidWZmZXJfaGVhZCAqbmFtZV9iaCA9IE5VTEw7CisJY2hhciAqeGVfbmFtZTsKKworCS8qCisJICogV2UgZG9uJ3QgdXNlIGJpbmFyeSBzZWFyY2ggaW4gdGhlIGJ1Y2tldCBiZWNhdXNlIHRoZXJlCisJICogbWF5IGJlIG11bHRpcGxlIGVudHJpZXMgd2l0aCB0aGUgc2FtZSBuYW1lIGhhc2guCisJICovCisJZm9yIChpID0gMDsgaSA8IGxlMTZfdG9fY3B1KHhoLT54aF9jb3VudCk7IGkrKykgeworCQl4ZSA9ICZ4aC0+eGhfZW50cmllc1tpXTsKKworCQlpZiAobmFtZV9oYXNoID4gbGUzMl90b19jcHUoeGUtPnhlX25hbWVfaGFzaCkpCisJCQljb250aW51ZTsKKwkJZWxzZSBpZiAobmFtZV9oYXNoIDwgbGUzMl90b19jcHUoeGUtPnhlX25hbWVfaGFzaCkpCisJCQlicmVhazsKKworCQljbXAgPSBuYW1lX2luZGV4IC0gb2NmczJfeGF0dHJfZ2V0X3R5cGUoeGUpOworCQlpZiAoIWNtcCkKKwkJCWNtcCA9IG5hbWVfbGVuIC0geGUtPnhlX25hbWVfbGVuOworCQlpZiAoY21wKQorCQkJY29udGludWU7CisKKwkJcmV0ID0gb2NmczJfeGF0dHJfYnVja2V0X2dldF9uYW1lX3ZhbHVlKGlub2RlLAorCQkJCQkJCXhoLAorCQkJCQkJCWksCisJCQkJCQkJJmJsb2NrX29mZiwKKwkJCQkJCQkmbmV3X29mZnNldCk7CisJCWlmIChyZXQpIHsKKwkJCW1sb2dfZXJybm8ocmV0KTsKKwkJCWJyZWFrOworCQl9CisKKwkJcmV0ID0gb2NmczJfcmVhZF9ibG9jayhpbm9kZSwgaGVhZGVyX2JoLT5iX2Jsb2NrbnIgKyBibG9ja19vZmYsCisJCQkJICAgICAgICZuYW1lX2JoKTsKKwkJaWYgKHJldCkgeworCQkJbWxvZ19lcnJubyhyZXQpOworCQkJYnJlYWs7CisJCX0KKwkJeGVfbmFtZSA9IG5hbWVfYmgtPmJfZGF0YSArIG5ld19vZmZzZXQ7CisKKwkJY21wID0gbWVtY21wKG5hbWUsIHhlX25hbWUsIG5hbWVfbGVuKTsKKwkJYnJlbHNlKG5hbWVfYmgpOworCQluYW1lX2JoID0gTlVMTDsKKworCQlpZiAoY21wID09IDApIHsKKwkJCSp4ZV9pbmRleCA9IGk7CisJCQkqZm91bmQgPSAxOworCQkJcmV0ID0gMDsKKwkJCWJyZWFrOworCQl9CisJfQorCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIEZpbmQgdGhlIHNwZWNpZmllZCB4YXR0ciBlbnRyeSBpbiBhIHNlcmllcyBvZiBidWNrZXRzLgorICogVGhpcyBzZXJpZXMgc3RhcnQgZnJvbSBwX2Jsa25vIGFuZCBsYXN0IGZvciBudW1fY2x1c3RlcnMuCisgKiBUaGUgb2NmczJfeGF0dHJfaGVhZGVyLnhoX251bV9idWNrZXRzIG9mIHRoZSBmaXJzdCBidWNrZXQgY29udGFpbnMKKyAqIHRoZSBudW0gb2YgdGhlIHZhbGlkIGJ1Y2tldHMuCisgKgorICogUmV0dXJuIHRoZSBidWZmZXJfaGVhZCB0aGlzIHhhdHRyIHNob3VsZCByZXNpZGUgaW4uIEFuZCBpZiB0aGUgeGF0dHIncworICogaGFzaCBpcyBpbiB0aGUgZ2FwIG9mIDIgYnVja2V0cywgcmV0dXJuIHRoZSBsb3dlciBidWNrZXQuCisgKi8KK3N0YXRpYyBpbnQgb2NmczJfeGF0dHJfYnVja2V0X2ZpbmQoc3RydWN0IGlub2RlICppbm9kZSwKKwkJCQkgICBpbnQgbmFtZV9pbmRleCwKKwkJCQkgICBjb25zdCBjaGFyICpuYW1lLAorCQkJCSAgIHUzMiBuYW1lX2hhc2gsCisJCQkJICAgdTY0IHBfYmxrbm8sCisJCQkJICAgdTMyIGZpcnN0X2hhc2gsCisJCQkJICAgdTMyIG51bV9jbHVzdGVycywKKwkJCQkgICBzdHJ1Y3Qgb2NmczJfeGF0dHJfc2VhcmNoICp4cykKK3sKKwlpbnQgcmV0LCBmb3VuZCA9IDA7CisJc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCA9IE5VTEw7CisJc3RydWN0IGJ1ZmZlcl9oZWFkICpsb3dlcl9iaCA9IE5VTEw7CisJc3RydWN0IG9jZnMyX3hhdHRyX2hlYWRlciAqeGggPSBOVUxMOworCXN0cnVjdCBvY2ZzMl94YXR0cl9lbnRyeSAqeGUgPSBOVUxMOworCXUxNiBpbmRleCA9IDA7CisJdTE2IGJsa19wZXJfYnVja2V0ID0gb2NmczJfYmxvY2tzX3Blcl94YXR0cl9idWNrZXQoaW5vZGUtPmlfc2IpOworCWludCBsb3dfYnVja2V0ID0gMCwgYnVja2V0LCBoaWdoX2J1Y2tldDsKKwl1MzIgbGFzdF9oYXNoOworCXU2NCBibGtubzsKKworCXJldCA9IG9jZnMyX3JlYWRfYmxvY2soaW5vZGUsIHBfYmxrbm8sICZiaCk7CisJaWYgKHJldCkgeworCQltbG9nX2Vycm5vKHJldCk7CisJCWdvdG8gb3V0OworCX0KKworCXhoID0gKHN0cnVjdCBvY2ZzMl94YXR0cl9oZWFkZXIgKiliaC0+Yl9kYXRhOworCWhpZ2hfYnVja2V0ID0gbGUxNl90b19jcHUoeGgtPnhoX251bV9idWNrZXRzKSAtIDE7CisKKwl3aGlsZSAobG93X2J1Y2tldCA8PSBoaWdoX2J1Y2tldCkgeworCQlicmVsc2UoYmgpOworCQliaCA9IE5VTEw7CisJCWJ1Y2tldCA9IChsb3dfYnVja2V0ICsgaGlnaF9idWNrZXQpIC8gMjsKKworCQlibGtubyA9IHBfYmxrbm8gKyBidWNrZXQgKiBibGtfcGVyX2J1Y2tldDsKKworCQlyZXQgPSBvY2ZzMl9yZWFkX2Jsb2NrKGlub2RlLCBibGtubywgJmJoKTsKKwkJaWYgKHJldCkgeworCQkJbWxvZ19lcnJubyhyZXQpOworCQkJZ290byBvdXQ7CisJCX0KKworCQl4aCA9IChzdHJ1Y3Qgb2NmczJfeGF0dHJfaGVhZGVyICopYmgtPmJfZGF0YTsKKwkJeGUgPSAmeGgtPnhoX2VudHJpZXNbMF07CisJCWlmIChuYW1lX2hhc2ggPCBsZTMyX3RvX2NwdSh4ZS0+eGVfbmFtZV9oYXNoKSkgeworCQkJaGlnaF9idWNrZXQgPSBidWNrZXQgLSAxOworCQkJY29udGludWU7CisJCX0KKworCQkvKgorCQkgKiBDaGVjayB3aGV0aGVyIHRoZSBoYXNoIG9mIHRoZSBsYXN0IGVudHJ5IGluIG91cgorCQkgKiBidWNrZXQgaXMgbGFyZ2VyIHRoYW4gdGhlIHNlYXJjaCBvbmUuIGZvciBhbiBlbXB0eQorCQkgKiBidWNrZXQsIHRoZSBsYXN0IG9uZSBpcyBhbHNvIHRoZSBmaXJzdCBvbmUuCisJCSAqLworCQlpZiAoeGgtPnhoX2NvdW50KQorCQkJeGUgPSAmeGgtPnhoX2VudHJpZXNbbGUxNl90b19jcHUoeGgtPnhoX2NvdW50KSAtIDFdOworCisJCWxhc3RfaGFzaCA9IGxlMzJfdG9fY3B1KHhlLT54ZV9uYW1lX2hhc2gpOworCisJCS8qIHJlY29yZCBsb3dlcl9iaCB3aGljaCBtYXkgYmUgdGhlIGluc2VydCBwbGFjZS4gKi8KKwkJYnJlbHNlKGxvd2VyX2JoKTsKKwkJbG93ZXJfYmggPSBiaDsKKwkJYmggPSBOVUxMOworCisJCWlmIChuYW1lX2hhc2ggPiBsZTMyX3RvX2NwdSh4ZS0+eGVfbmFtZV9oYXNoKSkgeworCQkJbG93X2J1Y2tldCA9IGJ1Y2tldCArIDE7CisJCQljb250aW51ZTsKKwkJfQorCisJCS8qIHRoZSBzZWFyY2hlZCB4YXR0ciBzaG91bGQgcmVzaWRlIGluIHRoaXMgYnVja2V0IGlmIGV4aXN0cy4gKi8KKwkJcmV0ID0gb2NmczJfZmluZF94ZV9pbl9idWNrZXQoaW5vZGUsIGxvd2VyX2JoLAorCQkJCQkgICAgICBuYW1lX2luZGV4LCBuYW1lLCBuYW1lX2hhc2gsCisJCQkJCSAgICAgICZpbmRleCwgJmZvdW5kKTsKKwkJaWYgKHJldCkgeworCQkJbWxvZ19lcnJubyhyZXQpOworCQkJZ290byBvdXQ7CisJCX0KKwkJYnJlYWs7CisJfQorCisJLyoKKwkgKiBSZWNvcmQgdGhlIGJ1Y2tldCB3ZSBoYXZlIGZvdW5kLgorCSAqIFdoZW4gdGhlIHhhdHRyJ3MgaGFzaCB2YWx1ZSBpcyBpbiB0aGUgZ2FwIG9mIDIgYnVja2V0cywgd2Ugd2lsbAorCSAqIGFsd2F5cyBzZXQgaXQgdG8gdGhlIHByZXZpb3VzIGJ1Y2tldC4KKwkgKi8KKwlpZiAoIWxvd2VyX2JoKSB7CisJCS8qCisJCSAqIFdlIGNhbid0IGZpbmQgYW55IGJ1Y2tldCB3aG9zZSBmaXJzdCBuYW1lX2hhc2ggaXMgbGVzcworCQkgKiB0aGFuIHRoZSBmaW5kIG5hbWVfaGFzaC4KKwkJICovCisJCUJVR19PTihiaC0+Yl9ibG9ja25yICE9IHBfYmxrbm8pOworCQlsb3dlcl9iaCA9IGJoOworCQliaCA9IE5VTEw7CisJfQorCXhzLT5idWNrZXQuYmhzWzBdID0gbG93ZXJfYmg7CisJeHMtPmJ1Y2tldC54aCA9IChzdHJ1Y3Qgb2NmczJfeGF0dHJfaGVhZGVyICopCisJCQkJCXhzLT5idWNrZXQuYmhzWzBdLT5iX2RhdGE7CisJbG93ZXJfYmggPSBOVUxMOworCisJeHMtPmhlYWRlciA9IHhzLT5idWNrZXQueGg7CisJeHMtPmJhc2UgPSB4cy0+YnVja2V0LmJoc1swXS0+Yl9kYXRhOworCXhzLT5lbmQgPSB4cy0+YmFzZSArIGlub2RlLT5pX3NiLT5zX2Jsb2Nrc2l6ZTsKKworCWlmIChmb3VuZCkgeworCQkvKgorCQkgKiBJZiB3ZSBoYXZlIGZvdW5kIHRoZSB4YXR0ciBlbnR5LCByZWFkIGFsbCB0aGUgYmxvY2tzIGluCisJCSAqIHRoaXMgYnVja2V0LgorCQkgKi8KKwkJcmV0ID0gb2NmczJfcmVhZF9ibG9ja3MoaW5vZGUsIHhzLT5idWNrZXQuYmhzWzBdLT5iX2Jsb2NrbnIgKyAxLAorCQkJCQlibGtfcGVyX2J1Y2tldCAtIDEsICZ4cy0+YnVja2V0LmJoc1sxXSwKKwkJCQkJMCk7CisJCWlmIChyZXQpIHsKKwkJCW1sb2dfZXJybm8ocmV0KTsKKwkJCWdvdG8gb3V0OworCQl9CisKKwkJeHMtPmhlcmUgPSAmeHMtPmhlYWRlci0+eGhfZW50cmllc1tpbmRleF07CisJCW1sb2coMCwgImZpbmQgeGF0dHIgJXMgaW4gYnVja2V0ICVsbHUsIGVudHJ5ID0gJXVcbiIsIG5hbWUsCisJCSAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZyl4cy0+YnVja2V0LmJoc1swXS0+Yl9ibG9ja25yLCBpbmRleCk7CisJfSBlbHNlCisJCXJldCA9IC1FTk9EQVRBOworCitvdXQ6CisJYnJlbHNlKGJoKTsKKwlicmVsc2UobG93ZXJfYmgpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgb2NmczJfeGF0dHJfaW5kZXhfYmxvY2tfZmluZChzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkJCQlzdHJ1Y3QgYnVmZmVyX2hlYWQgKnJvb3RfYmgsCisJCQkJCWludCBuYW1lX2luZGV4LAorCQkJCQljb25zdCBjaGFyICpuYW1lLAorCQkJCQlzdHJ1Y3Qgb2NmczJfeGF0dHJfc2VhcmNoICp4cykKK3sKKwlpbnQgcmV0OworCXN0cnVjdCBvY2ZzMl94YXR0cl9ibG9jayAqeGIgPQorCQkJKHN0cnVjdCBvY2ZzMl94YXR0cl9ibG9jayAqKXJvb3RfYmgtPmJfZGF0YTsKKwlzdHJ1Y3Qgb2NmczJfeGF0dHJfdHJlZV9yb290ICp4Yl9yb290ID0gJnhiLT54Yl9hdHRycy54Yl9yb290OworCXN0cnVjdCBvY2ZzMl9leHRlbnRfbGlzdCAqZWwgPSAmeGJfcm9vdC0+eHRfbGlzdDsKKwl1NjQgcF9ibGtubyA9IDA7CisJdTMyIGZpcnN0X2hhc2gsIG51bV9jbHVzdGVycyA9IDA7CisJdTMyIG5hbWVfaGFzaCA9IG9jZnMyX3hhdHRyX25hbWVfaGFzaChpbm9kZSwgbmFtZSwgc3RybGVuKG5hbWUpKTsKKworCWlmIChsZTE2X3RvX2NwdShlbC0+bF9uZXh0X2ZyZWVfcmVjKSA9PSAwKQorCQlyZXR1cm4gLUVOT0RBVEE7CisKKwltbG9nKDAsICJmaW5kIHhhdHRyICVzLCBoYXNoID0gJXUsIGluZGV4ID0gJWQgaW4geGF0dHIgdHJlZVxuIiwKKwkgICAgIG5hbWUsIG5hbWVfaGFzaCwgbmFtZV9pbmRleCk7CisKKwlyZXQgPSBvY2ZzMl94YXR0cl9nZXRfcmVjKGlub2RlLCBuYW1lX2hhc2gsICZwX2Jsa25vLCAmZmlyc3RfaGFzaCwKKwkJCQkgICZudW1fY2x1c3RlcnMsIGVsKTsKKwlpZiAocmV0KSB7CisJCW1sb2dfZXJybm8ocmV0KTsKKwkJZ290byBvdXQ7CisJfQorCisJQlVHX09OKHBfYmxrbm8gPT0gMCB8fCBudW1fY2x1c3RlcnMgPT0gMCB8fCBmaXJzdF9oYXNoID4gbmFtZV9oYXNoKTsKKworCW1sb2coMCwgImZpbmQgeGF0dHIgZXh0ZW50IHJlYyAldSBjbHVzdGVycyBmcm9tICVsbHUsIHRoZSBmaXJzdCBoYXNoICIKKwkgICAgICJpbiB0aGUgcmVjIGlzICV1XG4iLCBudW1fY2x1c3RlcnMsIHBfYmxrbm8sIGZpcnN0X2hhc2gpOworCisJcmV0ID0gb2NmczJfeGF0dHJfYnVja2V0X2ZpbmQoaW5vZGUsIG5hbWVfaW5kZXgsIG5hbWUsIG5hbWVfaGFzaCwKKwkJCQkgICAgICBwX2Jsa25vLCBmaXJzdF9oYXNoLCBudW1fY2x1c3RlcnMsIHhzKTsKKworb3V0OgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgb2NmczJfaXRlcmF0ZV94YXR0cl9idWNrZXRzKHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCQkJICAgICAgIHU2NCBibGtubywKKwkJCQkgICAgICAgdTMyIGNsdXN0ZXJzLAorCQkJCSAgICAgICB4YXR0cl9idWNrZXRfZnVuYyAqZnVuYywKKwkJCQkgICAgICAgdm9pZCAqcGFyYSkKK3sKKwlpbnQgaSwgaiwgcmV0ID0gMDsKKwlpbnQgYmxrX3Blcl9idWNrZXQgPSBvY2ZzMl9ibG9ja3NfcGVyX3hhdHRyX2J1Y2tldChpbm9kZS0+aV9zYik7CisJdTMyIGJwYyA9IG9jZnMyX3hhdHRyX2J1Y2tldHNfcGVyX2NsdXN0ZXIoT0NGUzJfU0IoaW5vZGUtPmlfc2IpKTsKKwl1MzIgbnVtX2J1Y2tldHMgPSBjbHVzdGVycyAqIGJwYzsKKwlzdHJ1Y3Qgb2NmczJfeGF0dHJfYnVja2V0IGJ1Y2tldDsKKworCW1lbXNldCgmYnVja2V0LCAwLCBzaXplb2YoYnVja2V0KSk7CisKKwltbG9nKDAsICJpdGVyYXRpbmcgeGF0dHIgYnVja2V0cyBpbiAldSBjbHVzdGVycyBzdGFydGluZyBmcm9tICVsbHVcbiIsCisJICAgICBjbHVzdGVycywgYmxrbm8pOworCisJZm9yIChpID0gMDsgaSA8IG51bV9idWNrZXRzOyBpKyssIGJsa25vICs9IGJsa19wZXJfYnVja2V0KSB7CisJCXJldCA9IG9jZnMyX3JlYWRfYmxvY2tzKGlub2RlLCBibGtubywgYmxrX3Blcl9idWNrZXQsCisJCQkJCWJ1Y2tldC5iaHMsIDApOworCQlpZiAocmV0KSB7CisJCQltbG9nX2Vycm5vKHJldCk7CisJCQlnb3RvIG91dDsKKwkJfQorCisJCWJ1Y2tldC54aCA9IChzdHJ1Y3Qgb2NmczJfeGF0dHJfaGVhZGVyICopYnVja2V0LmJoc1swXS0+Yl9kYXRhOworCQkvKgorCQkgKiBUaGUgcmVhbCBidWNrZXQgbnVtIGluIHRoaXMgc2VyaWVzIG9mIGJsb2NrcyBpcyBzdG9yZWQKKwkJICogaW4gdGhlIDFzdCBidWNrZXQuCisJCSAqLworCQlpZiAoaSA9PSAwKQorCQkJbnVtX2J1Y2tldHMgPSBsZTE2X3RvX2NwdShidWNrZXQueGgtPnhoX251bV9idWNrZXRzKTsKKworCQltbG9nKDAsICJpdGVyYXRpbmcgeGF0dHIgYnVja2V0ICVsbHUsIGZpcnN0IGhhc2ggJXVcbiIsIGJsa25vLAorCQkgICAgIGxlMzJfdG9fY3B1KGJ1Y2tldC54aC0+eGhfZW50cmllc1swXS54ZV9uYW1lX2hhc2gpKTsKKwkJaWYgKGZ1bmMpIHsKKwkJCXJldCA9IGZ1bmMoaW5vZGUsICZidWNrZXQsIHBhcmEpOworCQkJaWYgKHJldCkgeworCQkJCW1sb2dfZXJybm8ocmV0KTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCisJCWZvciAoaiA9IDA7IGogPCBibGtfcGVyX2J1Y2tldDsgaisrKQorCQkJYnJlbHNlKGJ1Y2tldC5iaHNbal0pOworCQltZW1zZXQoJmJ1Y2tldCwgMCwgc2l6ZW9mKGJ1Y2tldCkpOworCX0KKworb3V0OgorCWZvciAoaiA9IDA7IGogPCBibGtfcGVyX2J1Y2tldDsgaisrKQorCQlicmVsc2UoYnVja2V0LmJoc1tqXSk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdHJ1Y3Qgb2NmczJfeGF0dHJfdHJlZV9saXN0IHsKKwljaGFyICpidWZmZXI7CisJc2l6ZV90IGJ1ZmZlcl9zaXplOworCXNpemVfdCByZXN1bHQ7Cit9OworCitzdGF0aWMgaW50IG9jZnMyX3hhdHRyX2J1Y2tldF9nZXRfbmFtZV92YWx1ZShzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkJCQkgICAgIHN0cnVjdCBvY2ZzMl94YXR0cl9oZWFkZXIgKnhoLAorCQkJCQkgICAgIGludCBpbmRleCwKKwkJCQkJICAgICBpbnQgKmJsb2NrX29mZiwKKwkJCQkJICAgICBpbnQgKm5ld19vZmZzZXQpCit7CisJdTE2IG5hbWVfb2Zmc2V0OworCisJaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSBsZTE2X3RvX2NwdSh4aC0+eGhfY291bnQpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCW5hbWVfb2Zmc2V0ID0gbGUxNl90b19jcHUoeGgtPnhoX2VudHJpZXNbaW5kZXhdLnhlX25hbWVfb2Zmc2V0KTsKKworCSpibG9ja19vZmYgPSBuYW1lX29mZnNldCA+PiBpbm9kZS0+aV9zYi0+c19ibG9ja3NpemVfYml0czsKKwkqbmV3X29mZnNldCA9IG5hbWVfb2Zmc2V0ICUgaW5vZGUtPmlfc2ItPnNfYmxvY2tzaXplOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgb2NmczJfbGlzdF94YXR0cl9idWNrZXQoc3RydWN0IGlub2RlICppbm9kZSwKKwkJCQkgICBzdHJ1Y3Qgb2NmczJfeGF0dHJfYnVja2V0ICpidWNrZXQsCisJCQkJICAgdm9pZCAqcGFyYSkKK3sKKwlpbnQgcmV0ID0gMCwgdHlwZTsKKwlzdHJ1Y3Qgb2NmczJfeGF0dHJfdHJlZV9saXN0ICp4bCA9IChzdHJ1Y3Qgb2NmczJfeGF0dHJfdHJlZV9saXN0ICopcGFyYTsKKwlpbnQgaSwgYmxvY2tfb2ZmLCBuZXdfb2Zmc2V0OworCWNvbnN0IGNoYXIgKnByZWZpeCwgKm5hbWU7CisKKwlmb3IgKGkgPSAwIDsgaSA8IGxlMTZfdG9fY3B1KGJ1Y2tldC0+eGgtPnhoX2NvdW50KTsgaSsrKSB7CisJCXN0cnVjdCBvY2ZzMl94YXR0cl9lbnRyeSAqZW50cnkgPSAmYnVja2V0LT54aC0+eGhfZW50cmllc1tpXTsKKwkJdHlwZSA9IG9jZnMyX3hhdHRyX2dldF90eXBlKGVudHJ5KTsKKwkJcHJlZml4ID0gb2NmczJfeGF0dHJfcHJlZml4KHR5cGUpOworCisJCWlmIChwcmVmaXgpIHsKKwkJCXJldCA9IG9jZnMyX3hhdHRyX2J1Y2tldF9nZXRfbmFtZV92YWx1ZShpbm9kZSwKKwkJCQkJCQkJYnVja2V0LT54aCwKKwkJCQkJCQkJaSwKKwkJCQkJCQkJJmJsb2NrX29mZiwKKwkJCQkJCQkJJm5ld19vZmZzZXQpOworCQkJaWYgKHJldCkKKwkJCQlicmVhazsKKworCQkJbmFtZSA9IChjb25zdCBjaGFyICopYnVja2V0LT5iaHNbYmxvY2tfb2ZmXS0+Yl9kYXRhICsKKwkJCQluZXdfb2Zmc2V0OworCQkJcmV0ID0gb2NmczJfeGF0dHJfbGlzdF9lbnRyeSh4bC0+YnVmZmVyLAorCQkJCQkJICAgICB4bC0+YnVmZmVyX3NpemUsCisJCQkJCQkgICAgICZ4bC0+cmVzdWx0LAorCQkJCQkJICAgICBwcmVmaXgsIG5hbWUsCisJCQkJCQkgICAgIGVudHJ5LT54ZV9uYW1lX2xlbik7CisJCQlpZiAocmV0KQorCQkJCWJyZWFrOworCQl9CisJfQorCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBvY2ZzMl94YXR0cl90cmVlX2xpc3RfaW5kZXhfYmxvY2soc3RydWN0IGlub2RlICppbm9kZSwKKwkJCQkJICAgICBzdHJ1Y3Qgb2NmczJfeGF0dHJfdHJlZV9yb290ICp4dCwKKwkJCQkJICAgICBjaGFyICpidWZmZXIsCisJCQkJCSAgICAgc2l6ZV90IGJ1ZmZlcl9zaXplKQoreworCXN0cnVjdCBvY2ZzMl9leHRlbnRfbGlzdCAqZWwgPSAmeHQtPnh0X2xpc3Q7CisJaW50IHJldCA9IDA7CisJdTMyIG5hbWVfaGFzaCA9IFVJTlRfTUFYLCBlX2Nwb3MgPSAwLCBudW1fY2x1c3RlcnMgPSAwOworCXU2NCBwX2Jsa25vID0gMDsKKwlzdHJ1Y3Qgb2NmczJfeGF0dHJfdHJlZV9saXN0IHhsID0geworCQkuYnVmZmVyID0gYnVmZmVyLAorCQkuYnVmZmVyX3NpemUgPSBidWZmZXJfc2l6ZSwKKwkJLnJlc3VsdCA9IDAsCisJfTsKKworCWlmIChsZTE2X3RvX2NwdShlbC0+bF9uZXh0X2ZyZWVfcmVjKSA9PSAwKQorCQlyZXR1cm4gMDsKKworCXdoaWxlIChuYW1lX2hhc2ggPiAwKSB7CisJCXJldCA9IG9jZnMyX3hhdHRyX2dldF9yZWMoaW5vZGUsIG5hbWVfaGFzaCwgJnBfYmxrbm8sCisJCQkJCSAgJmVfY3BvcywgJm51bV9jbHVzdGVycywgZWwpOworCQlpZiAocmV0KSB7CisJCQltbG9nX2Vycm5vKHJldCk7CisJCQlnb3RvIG91dDsKKwkJfQorCisJCXJldCA9IG9jZnMyX2l0ZXJhdGVfeGF0dHJfYnVja2V0cyhpbm9kZSwgcF9ibGtubywgbnVtX2NsdXN0ZXJzLAorCQkJCQkJICBvY2ZzMl9saXN0X3hhdHRyX2J1Y2tldCwKKwkJCQkJCSAgJnhsKTsKKwkJaWYgKHJldCkgeworCQkJbWxvZ19lcnJubyhyZXQpOworCQkJZ290byBvdXQ7CisJCX0KKworCQlpZiAoZV9jcG9zID09IDApCisJCQlicmVhazsKKworCQluYW1lX2hhc2ggPSBlX2Nwb3MgLSAxOworCX0KKworCXJldCA9IHhsLnJlc3VsdDsKK291dDoKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGNtcF94ZShjb25zdCB2b2lkICphLCBjb25zdCB2b2lkICpiKQoreworCWNvbnN0IHN0cnVjdCBvY2ZzMl94YXR0cl9lbnRyeSAqbCA9IGEsICpyID0gYjsKKwl1MzIgbF9oYXNoID0gbGUzMl90b19jcHUobC0+eGVfbmFtZV9oYXNoKTsKKwl1MzIgcl9oYXNoID0gbGUzMl90b19jcHUoci0+eGVfbmFtZV9oYXNoKTsKKworCWlmIChsX2hhc2ggPiByX2hhc2gpCisJCXJldHVybiAxOworCWlmIChsX2hhc2ggPCByX2hhc2gpCisJCXJldHVybiAtMTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgc3dhcF94ZSh2b2lkICphLCB2b2lkICpiLCBpbnQgc2l6ZSkKK3sKKwlzdHJ1Y3Qgb2NmczJfeGF0dHJfZW50cnkgKmwgPSBhLCAqciA9IGIsIHRtcDsKKworCXRtcCA9ICpsOworCW1lbWNweShsLCByLCBzaXplb2Yoc3RydWN0IG9jZnMyX3hhdHRyX2VudHJ5KSk7CisJbWVtY3B5KHIsICZ0bXAsIHNpemVvZihzdHJ1Y3Qgb2NmczJfeGF0dHJfZW50cnkpKTsKK30KKworLyoKKyAqIFdoZW4gdGhlIG9jZnMyX3hhdHRyX2Jsb2NrIGlzIGZpbGxlZCB1cCwgbmV3IGJ1Y2tldCB3aWxsIGJlIGNyZWF0ZWQKKyAqIGFuZCBhbGwgdGhlIHhhdHRyIGVudHJpZXMgd2lsbCBiZSBtb3ZlZCB0byB0aGUgbmV3IGJ1Y2tldC4KKyAqIE5vdGU6IHdlIG5lZWQgdG8gc29ydCB0aGUgZW50cmllcyBzaW5jZSB0aGV5IGFyZSBub3Qgc2F2ZWQgaW4gb3JkZXIKKyAqIGluIHRoZSBvY2ZzMl94YXR0cl9ibG9jay4KKyAqLworc3RhdGljIHZvaWQgb2NmczJfY3BfeGF0dHJfYmxvY2tfdG9fYnVja2V0KHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCQkJCSAgIHN0cnVjdCBidWZmZXJfaGVhZCAqeGJfYmgsCisJCQkJCSAgIHN0cnVjdCBidWZmZXJfaGVhZCAqeGhfYmgsCisJCQkJCSAgIHN0cnVjdCBidWZmZXJfaGVhZCAqZGF0YV9iaCkKK3sKKwlpbnQgaSwgYmxvY2tzaXplID0gaW5vZGUtPmlfc2ItPnNfYmxvY2tzaXplOworCXUxNiBvZmZzZXQsIHNpemUsIG9mZl9jaGFuZ2U7CisJc3RydWN0IG9jZnMyX3hhdHRyX2VudHJ5ICp4ZTsKKwlzdHJ1Y3Qgb2NmczJfeGF0dHJfYmxvY2sgKnhiID0KKwkJCQkoc3RydWN0IG9jZnMyX3hhdHRyX2Jsb2NrICopeGJfYmgtPmJfZGF0YTsKKwlzdHJ1Y3Qgb2NmczJfeGF0dHJfaGVhZGVyICp4Yl94aCA9ICZ4Yi0+eGJfYXR0cnMueGJfaGVhZGVyOworCXN0cnVjdCBvY2ZzMl94YXR0cl9oZWFkZXIgKnhoID0KKwkJCQkoc3RydWN0IG9jZnMyX3hhdHRyX2hlYWRlciAqKXhoX2JoLT5iX2RhdGE7CisJdTE2IGNvdW50ID0gbGUxNl90b19jcHUoeGJfeGgtPnhoX2NvdW50KTsKKwljaGFyICp0YXJnZXQgPSB4aF9iaC0+Yl9kYXRhLCAqc3JjID0geGJfYmgtPmJfZGF0YTsKKworCW1sb2coMCwgImNwIHhhdHRyIGZyb20gYmxvY2sgJWxsdSB0byBidWNrZXQgJWxsdVxuIiwKKwkgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpeGJfYmgtPmJfYmxvY2tuciwKKwkgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpeGhfYmgtPmJfYmxvY2tucik7CisKKwltZW1zZXQoeGhfYmgtPmJfZGF0YSwgMCwgYmxvY2tzaXplKTsKKwlpZiAoZGF0YV9iaCkKKwkJbWVtc2V0KGRhdGFfYmgtPmJfZGF0YSwgMCwgYmxvY2tzaXplKTsKKwkvKgorCSAqIFNpbmNlIHRoZSB4ZV9uYW1lX29mZnNldCBpcyBiYXNlZCBvbiBvY2ZzMl94YXR0cl9oZWFkZXIsCisJICogdGhlcmUgaXMgYSBvZmZzZXQgY2hhbmdlIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGNoYW5nZSBvZgorCSAqIG9jZnMyX3hhdHRyX2hlYWRlcidzIHBvc2l0aW9uLgorCSAqLworCW9mZl9jaGFuZ2UgPSBvZmZzZXRvZihzdHJ1Y3Qgb2NmczJfeGF0dHJfYmxvY2ssIHhiX2F0dHJzLnhiX2hlYWRlcik7CisJeGUgPSAmeGJfeGgtPnhoX2VudHJpZXNbY291bnQgLSAxXTsKKwlvZmZzZXQgPSBsZTE2X3RvX2NwdSh4ZS0+eGVfbmFtZV9vZmZzZXQpICsgb2ZmX2NoYW5nZTsKKwlzaXplID0gYmxvY2tzaXplIC0gb2Zmc2V0OworCisJLyogY29weSBhbGwgdGhlIG5hbWVzIGFuZCB2YWx1ZXMuICovCisJaWYgKGRhdGFfYmgpCisJCXRhcmdldCA9IGRhdGFfYmgtPmJfZGF0YTsKKwltZW1jcHkodGFyZ2V0ICsgb2Zmc2V0LCBzcmMgKyBvZmZzZXQsIHNpemUpOworCisJLyogSW5pdCBuZXcgaGVhZGVyIG5vdy4gKi8KKwl4aC0+eGhfY291bnQgPSB4Yl94aC0+eGhfY291bnQ7CisJeGgtPnhoX251bV9idWNrZXRzID0gY3B1X3RvX2xlMTYoMSk7CisJeGgtPnhoX25hbWVfdmFsdWVfbGVuID0gY3B1X3RvX2xlMTYoc2l6ZSk7CisJeGgtPnhoX2ZyZWVfc3RhcnQgPSBjcHVfdG9fbGUxNihPQ0ZTMl9YQVRUUl9CVUNLRVRfU0laRSAtIHNpemUpOworCisJLyogY29weSBhbGwgdGhlIGVudHJpZXMuICovCisJdGFyZ2V0ID0geGhfYmgtPmJfZGF0YTsKKwlvZmZzZXQgPSBvZmZzZXRvZihzdHJ1Y3Qgb2NmczJfeGF0dHJfaGVhZGVyLCB4aF9lbnRyaWVzKTsKKwlzaXplID0gY291bnQgKiBzaXplb2Yoc3RydWN0IG9jZnMyX3hhdHRyX2VudHJ5KTsKKwltZW1jcHkodGFyZ2V0ICsgb2Zmc2V0LCAoY2hhciAqKXhiX3hoICsgb2Zmc2V0LCBzaXplKTsKKworCS8qIENoYW5nZSB0aGUgeGUgb2Zmc2V0IGZvciBhbGwgdGhlIHhlIGJlY2F1c2Ugb2YgdGhlIG1vdmUuICovCisJb2ZmX2NoYW5nZSA9IE9DRlMyX1hBVFRSX0JVQ0tFVF9TSVpFIC0gYmxvY2tzaXplICsKKwkJIG9mZnNldG9mKHN0cnVjdCBvY2ZzMl94YXR0cl9ibG9jaywgeGJfYXR0cnMueGJfaGVhZGVyKTsKKwlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykKKwkJbGUxNl9hZGRfY3B1KCZ4aC0+eGhfZW50cmllc1tpXS54ZV9uYW1lX29mZnNldCwgb2ZmX2NoYW5nZSk7CisKKwltbG9nKDAsICJjb3B5IGVudHJ5OiBzdGFydCA9ICV1LCBzaXplID0gJXUsIG9mZnNldF9jaGFuZ2UgPSAldVxuIiwKKwkgICAgIG9mZnNldCwgc2l6ZSwgb2ZmX2NoYW5nZSk7CisKKwlzb3J0KHRhcmdldCArIG9mZnNldCwgY291bnQsIHNpemVvZihzdHJ1Y3Qgb2NmczJfeGF0dHJfZW50cnkpLAorCSAgICAgY21wX3hlLCBzd2FwX3hlKTsKK30KKworLyoKKyAqIEFmdGVyIHdlIG1vdmUgeGF0dHIgZnJvbSBibG9jayB0byBpbmRleCBidHJlZSwgd2UgaGF2ZSB0bworICogdXBkYXRlIG9jZnMyX3hhdHRyX3NlYXJjaCB0byB0aGUgbmV3IHhlIGFuZCBiYXNlLgorICoKKyAqIFdoZW4gdGhlIGVudHJ5IGlzIGluIHhhdHRyIGJsb2NrLCB4YXR0cl9iaCBpbmRpY2F0ZXMgdGhlIHN0b3JhZ2UgcGxhY2UuCisgKiBXaGlsZSBpZiB0aGUgZW50cnkgaXMgaW4gaW5kZXggYi10cmVlLCAiYnVja2V0IiBpbmRpY2F0ZXMgdGhlCisgKiByZWFsIHBsYWNlIG9mIHRoZSB4YXR0ci4KKyAqLworc3RhdGljIGludCBvY2ZzMl94YXR0cl91cGRhdGVfeGF0dHJfc2VhcmNoKHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCQkJCSAgIHN0cnVjdCBvY2ZzMl94YXR0cl9zZWFyY2ggKnhzLAorCQkJCQkgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKm9sZF9iaCwKKwkJCQkJICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpuZXdfYmgpCit7CisJaW50IHJldCA9IDA7CisJY2hhciAqYnVmID0gb2xkX2JoLT5iX2RhdGE7CisJc3RydWN0IG9jZnMyX3hhdHRyX2Jsb2NrICpvbGRfeGIgPSAoc3RydWN0IG9jZnMyX3hhdHRyX2Jsb2NrICopYnVmOworCXN0cnVjdCBvY2ZzMl94YXR0cl9oZWFkZXIgKm9sZF94aCA9ICZvbGRfeGItPnhiX2F0dHJzLnhiX2hlYWRlcjsKKwlpbnQgaSwgYmxvY2tzaXplID0gaW5vZGUtPmlfc2ItPnNfYmxvY2tzaXplOworCXUxNiBibGtfcGVyX2J1Y2tldCA9IG9jZnMyX2Jsb2Nrc19wZXJfeGF0dHJfYnVja2V0KGlub2RlLT5pX3NiKTsKKworCXhzLT5idWNrZXQuYmhzWzBdID0gbmV3X2JoOworCWdldF9iaChuZXdfYmgpOworCXhzLT5idWNrZXQueGggPSAoc3RydWN0IG9jZnMyX3hhdHRyX2hlYWRlciAqKXhzLT5idWNrZXQuYmhzWzBdLT5iX2RhdGE7CisJeHMtPmhlYWRlciA9IHhzLT5idWNrZXQueGg7CisKKwl4cy0+YmFzZSA9IG5ld19iaC0+Yl9kYXRhOworCXhzLT5lbmQgPSB4cy0+YmFzZSArIGlub2RlLT5pX3NiLT5zX2Jsb2Nrc2l6ZTsKKworCWlmICgheHMtPm5vdF9mb3VuZCkgeworCQlpZiAoT0NGUzJfWEFUVFJfQlVDS0VUX1NJWkUgIT0gYmxvY2tzaXplKSB7CisJCQlyZXQgPSBvY2ZzMl9yZWFkX2Jsb2Nrcyhpbm9kZSwKKwkJCQkJeHMtPmJ1Y2tldC5iaHNbMF0tPmJfYmxvY2tuciArIDEsCisJCQkJCWJsa19wZXJfYnVja2V0IC0gMSwgJnhzLT5idWNrZXQuYmhzWzFdLAorCQkJCQkwKTsKKwkJCWlmIChyZXQpIHsKKwkJCQltbG9nX2Vycm5vKHJldCk7CisJCQkJcmV0dXJuIHJldDsKKwkJCX0KKworCQkJaSA9IHhzLT5oZXJlIC0gb2xkX3hoLT54aF9lbnRyaWVzOworCQkJeHMtPmhlcmUgPSAmeHMtPmhlYWRlci0+eGhfZW50cmllc1tpXTsKKwkJfQorCX0KKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgb2NmczJfeGF0dHJfY3JlYXRlX2luZGV4X2Jsb2NrKHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCQkJCSAgc3RydWN0IG9jZnMyX3hhdHRyX3NlYXJjaCAqeHMpCit7CisJaW50IHJldCwgY3JlZGl0cyA9IE9DRlMyX1NVQkFMTE9DX0FMTE9DOworCXUzMiBiaXRfb2ZmLCBsZW47CisJdTY0IGJsa25vOworCWhhbmRsZV90ICpoYW5kbGU7CisJc3RydWN0IG9jZnMyX3N1cGVyICpvc2IgPSBPQ0ZTMl9TQihpbm9kZS0+aV9zYik7CisJc3RydWN0IG9jZnMyX2lub2RlX2luZm8gKm9pID0gT0NGUzJfSShpbm9kZSk7CisJc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKmRhdGFfYWM7CisJc3RydWN0IGJ1ZmZlcl9oZWFkICp4aF9iaCA9IE5VTEwsICpkYXRhX2JoID0gTlVMTDsKKwlzdHJ1Y3QgYnVmZmVyX2hlYWQgKnhiX2JoID0geHMtPnhhdHRyX2JoOworCXN0cnVjdCBvY2ZzMl94YXR0cl9ibG9jayAqeGIgPQorCQkJKHN0cnVjdCBvY2ZzMl94YXR0cl9ibG9jayAqKXhiX2JoLT5iX2RhdGE7CisJc3RydWN0IG9jZnMyX3hhdHRyX3RyZWVfcm9vdCAqeHI7CisJdTE2IHhiX2ZsYWdzID0gbGUxNl90b19jcHUoeGItPnhiX2ZsYWdzKTsKKwl1MTYgYnBiID0gb2NmczJfYmxvY2tzX3Blcl94YXR0cl9idWNrZXQoaW5vZGUtPmlfc2IpOworCisJbWxvZygwLCAiY3JlYXRlIHhhdHRyIGluZGV4IGJsb2NrIGZvciAlbGx1XG4iLAorCSAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZyl4Yl9iaC0+Yl9ibG9ja25yKTsKKworCUJVR19PTih4Yl9mbGFncyAmIE9DRlMyX1hBVFRSX0lOREVYRUQpOworCisJcmV0ID0gb2NmczJfcmVzZXJ2ZV9jbHVzdGVycyhvc2IsIDEsICZkYXRhX2FjKTsKKwlpZiAocmV0KSB7CisJCW1sb2dfZXJybm8ocmV0KTsKKwkJZ290byBvdXQ7CisJfQorCisJLyoKKwkgKiBYWFg6CisJICogV2UgY2FuIHVzZSB0aGlzIGxvY2sgZm9yIG5vdywgYW5kIG1heWJlIG1vdmUgdG8gYSBkZWRpY2F0ZWQgbXV0ZXgKKwkgKiBpZiBwZXJmb3JtYW5jZSBiZWNvbWVzIGEgcHJvYmxlbSBsYXRlci4KKwkgKi8KKwlkb3duX3dyaXRlKCZvaS0+aXBfYWxsb2Nfc2VtKTsKKworCS8qCisJICogMyBtb3JlIGNyZWRpdHMsIG9uZSBmb3IgeGF0dHIgYmxvY2sgdXBkYXRlLCBvbmUgZm9yIHRoZSAxc3QgYmxvY2sKKwkgKiBvZiB0aGUgbmV3IHhhdHRyIGJ1Y2tldCBhbmQgb25lIGZvciB0aGUgdmFsdWUvZGF0YS4KKwkgKi8KKwljcmVkaXRzICs9IDM7CisJaGFuZGxlID0gb2NmczJfc3RhcnRfdHJhbnMob3NiLCBjcmVkaXRzKTsKKwlpZiAoSVNfRVJSKGhhbmRsZSkpIHsKKwkJcmV0ID0gUFRSX0VSUihoYW5kbGUpOworCQltbG9nX2Vycm5vKHJldCk7CisJCWdvdG8gb3V0X3NlbTsKKwl9CisKKwlyZXQgPSBvY2ZzMl9qb3VybmFsX2FjY2VzcyhoYW5kbGUsIGlub2RlLCB4Yl9iaCwKKwkJCQkgICBPQ0ZTMl9KT1VSTkFMX0FDQ0VTU19XUklURSk7CisJaWYgKHJldCkgeworCQltbG9nX2Vycm5vKHJldCk7CisJCWdvdG8gb3V0X2NvbW1pdDsKKwl9CisKKwlyZXQgPSBvY2ZzMl9jbGFpbV9jbHVzdGVycyhvc2IsIGhhbmRsZSwgZGF0YV9hYywgMSwgJmJpdF9vZmYsICZsZW4pOworCWlmIChyZXQpIHsKKwkJbWxvZ19lcnJubyhyZXQpOworCQlnb3RvIG91dF9jb21taXQ7CisJfQorCisJLyoKKwkgKiBUaGUgYnVja2V0IG1heSBzcHJlYWQgaW4gbWFueSBibG9ja3MsIGFuZAorCSAqIHdlIHdpbGwgb25seSB0b3VjaCB0aGUgMXN0IGJsb2NrIGFuZCB0aGUgbGFzdCBibG9jaworCSAqIGluIHRoZSB3aG9sZSBidWNrZXQob25lIGZvciBlbnRyeSBhbmQgb25lIGZvciBkYXRhKS4KKwkgKi8KKwlibGtubyA9IG9jZnMyX2NsdXN0ZXJzX3RvX2Jsb2Nrcyhpbm9kZS0+aV9zYiwgYml0X29mZik7CisKKwltbG9nKDAsICJhbGxvY2F0ZSAxIGNsdXN0ZXIgZnJvbSAlbGx1IHRvIHhhdHRyIGJsb2NrXG4iLCBibGtubyk7CisKKwl4aF9iaCA9IHNiX2dldGJsayhpbm9kZS0+aV9zYiwgYmxrbm8pOworCWlmICgheGhfYmgpIHsKKwkJcmV0ID0gLUVJTzsKKwkJbWxvZ19lcnJubyhyZXQpOworCQlnb3RvIG91dF9jb21taXQ7CisJfQorCisJb2NmczJfc2V0X25ld19idWZmZXJfdXB0b2RhdGUoaW5vZGUsIHhoX2JoKTsKKworCXJldCA9IG9jZnMyX2pvdXJuYWxfYWNjZXNzKGhhbmRsZSwgaW5vZGUsIHhoX2JoLAorCQkJCSAgIE9DRlMyX0pPVVJOQUxfQUNDRVNTX0NSRUFURSk7CisJaWYgKHJldCkgeworCQltbG9nX2Vycm5vKHJldCk7CisJCWdvdG8gb3V0X2NvbW1pdDsKKwl9CisKKwlpZiAoYnBiID4gMSkgeworCQlkYXRhX2JoID0gc2JfZ2V0YmxrKGlub2RlLT5pX3NiLCBibGtubyArIGJwYiAtIDEpOworCQlpZiAoIWRhdGFfYmgpIHsKKwkJCXJldCA9IC1FSU87CisJCQltbG9nX2Vycm5vKHJldCk7CisJCQlnb3RvIG91dF9jb21taXQ7CisJCX0KKworCQlvY2ZzMl9zZXRfbmV3X2J1ZmZlcl91cHRvZGF0ZShpbm9kZSwgZGF0YV9iaCk7CisKKwkJcmV0ID0gb2NmczJfam91cm5hbF9hY2Nlc3MoaGFuZGxlLCBpbm9kZSwgZGF0YV9iaCwKKwkJCQkJICAgT0NGUzJfSk9VUk5BTF9BQ0NFU1NfQ1JFQVRFKTsKKwkJaWYgKHJldCkgeworCQkJbWxvZ19lcnJubyhyZXQpOworCQkJZ290byBvdXRfY29tbWl0OworCQl9CisJfQorCisJb2NmczJfY3BfeGF0dHJfYmxvY2tfdG9fYnVja2V0KGlub2RlLCB4Yl9iaCwgeGhfYmgsIGRhdGFfYmgpOworCisJb2NmczJfam91cm5hbF9kaXJ0eShoYW5kbGUsIHhoX2JoKTsKKwlpZiAoZGF0YV9iaCkKKwkJb2NmczJfam91cm5hbF9kaXJ0eShoYW5kbGUsIGRhdGFfYmgpOworCisJb2NmczJfeGF0dHJfdXBkYXRlX3hhdHRyX3NlYXJjaChpbm9kZSwgeHMsIHhiX2JoLCB4aF9iaCk7CisKKwkvKiBDaGFuZ2UgZnJvbSBvY2ZzMl94YXR0cl9oZWFkZXIgdG8gb2NmczJfeGF0dHJfdHJlZV9yb290ICovCisJbWVtc2V0KCZ4Yi0+eGJfYXR0cnMsIDAsIGlub2RlLT5pX3NiLT5zX2Jsb2Nrc2l6ZSAtCisJICAgICAgIG9mZnNldG9mKHN0cnVjdCBvY2ZzMl94YXR0cl9ibG9jaywgeGJfYXR0cnMpKTsKKworCXhyID0gJnhiLT54Yl9hdHRycy54Yl9yb290OworCXhyLT54dF9jbHVzdGVycyA9IGNwdV90b19sZTMyKDEpOworCXhyLT54dF9sYXN0X2ViX2JsayA9IDA7CisJeHItPnh0X2xpc3QubF90cmVlX2RlcHRoID0gMDsKKwl4ci0+eHRfbGlzdC5sX2NvdW50ID0gY3B1X3RvX2xlMTYob2NmczJfeGF0dHJfcmVjc19wZXJfeGIoaW5vZGUtPmlfc2IpKTsKKwl4ci0+eHRfbGlzdC5sX25leHRfZnJlZV9yZWMgPSBjcHVfdG9fbGUxNigxKTsKKworCXhyLT54dF9saXN0LmxfcmVjc1swXS5lX2Nwb3MgPSAwOworCXhyLT54dF9saXN0LmxfcmVjc1swXS5lX2Jsa25vID0gY3B1X3RvX2xlNjQoYmxrbm8pOworCXhyLT54dF9saXN0LmxfcmVjc1swXS5lX2xlYWZfY2x1c3RlcnMgPSBjcHVfdG9fbGUxNigxKTsKKworCXhiLT54Yl9mbGFncyA9IGNwdV90b19sZTE2KHhiX2ZsYWdzIHwgT0NGUzJfWEFUVFJfSU5ERVhFRCk7CisKKwlyZXQgPSBvY2ZzMl9qb3VybmFsX2RpcnR5KGhhbmRsZSwgeGJfYmgpOworCWlmIChyZXQpIHsKKwkJbWxvZ19lcnJubyhyZXQpOworCQlnb3RvIG91dF9jb21taXQ7CisJfQorCitvdXRfY29tbWl0OgorCW9jZnMyX2NvbW1pdF90cmFucyhvc2IsIGhhbmRsZSk7CisKK291dF9zZW06CisJdXBfd3JpdGUoJm9pLT5pcF9hbGxvY19zZW0pOworCitvdXQ6CisJaWYgKGRhdGFfYWMpCisJCW9jZnMyX2ZyZWVfYWxsb2NfY29udGV4dChkYXRhX2FjKTsKKworCWJyZWxzZSh4aF9iaCk7CisJYnJlbHNlKGRhdGFfYmgpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBjbXBfeGVfb2Zmc2V0KGNvbnN0IHZvaWQgKmEsIGNvbnN0IHZvaWQgKmIpCit7CisJY29uc3Qgc3RydWN0IG9jZnMyX3hhdHRyX2VudHJ5ICpsID0gYSwgKnIgPSBiOworCXUzMiBsX25hbWVfb2Zmc2V0ID0gbGUxNl90b19jcHUobC0+eGVfbmFtZV9vZmZzZXQpOworCXUzMiByX25hbWVfb2Zmc2V0ID0gbGUxNl90b19jcHUoci0+eGVfbmFtZV9vZmZzZXQpOworCisJaWYgKGxfbmFtZV9vZmZzZXQgPCByX25hbWVfb2Zmc2V0KQorCQlyZXR1cm4gMTsKKwlpZiAobF9uYW1lX29mZnNldCA+IHJfbmFtZV9vZmZzZXQpCisJCXJldHVybiAtMTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIGRlZnJhZyBhIHhhdHRyIGJ1Y2tldCBpZiB3ZSBmaW5kIHRoYXQgdGhlIGJ1Y2tldCBoYXMgc29tZQorICogaG9sZXMgYmV0ZWVuIG5hbWUvdmFsdWUgcGFpcnMuCisgKiBXZSB3aWxsIG1vdmUgYWxsIHRoZSBuYW1lL3ZhbHVlIHBhaXJzIHRvIHRoZSBlbmQgb2YgdGhlIGJ1Y2tldAorICogc28gdGhhdCB3ZSBjYW4gc3BhcmUgc29tZSBzcGFjZSBmb3IgaW5zZXJ0aW9uLgorICovCitzdGF0aWMgaW50IG9jZnMyX2RlZnJhZ194YXR0cl9idWNrZXQoc3RydWN0IGlub2RlICppbm9kZSwKKwkJCQkgICAgIHN0cnVjdCBvY2ZzMl94YXR0cl9idWNrZXQgKmJ1Y2tldCkKK3sKKwlpbnQgcmV0LCBpOworCXNpemVfdCBlbmQsIG9mZnNldCwgbGVuLCB2YWx1ZV9sZW47CisJc3RydWN0IG9jZnMyX3hhdHRyX2hlYWRlciAqeGg7CisJY2hhciAqZW50cmllcywgKmJ1ZiwgKmJ1Y2tldF9idWYgPSBOVUxMOworCXU2NCBibGtubyA9IGJ1Y2tldC0+YmhzWzBdLT5iX2Jsb2NrbnI7CisJdTE2IGJsa19wZXJfYnVja2V0ID0gb2NmczJfYmxvY2tzX3Blcl94YXR0cl9idWNrZXQoaW5vZGUtPmlfc2IpOworCXUxNiB4aF9mcmVlX3N0YXJ0OworCXNpemVfdCBibG9ja3NpemUgPSBpbm9kZS0+aV9zYi0+c19ibG9ja3NpemU7CisJaGFuZGxlX3QgKmhhbmRsZTsKKwlzdHJ1Y3QgYnVmZmVyX2hlYWQgKipiaHM7CisJc3RydWN0IG9jZnMyX3hhdHRyX2VudHJ5ICp4ZTsKKworCWJocyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBidWZmZXJfaGVhZCAqKSAqIGJsa19wZXJfYnVja2V0LAorCQkJR0ZQX05PRlMpOworCWlmICghYmhzKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXJldCA9IG9jZnMyX3JlYWRfYmxvY2tzKGlub2RlLCBibGtubywgYmxrX3Blcl9idWNrZXQsIGJocywgMCk7CisJaWYgKHJldCkKKwkJZ290byBvdXQ7CisKKwkvKgorCSAqIEluIG9yZGVyIHRvIG1ha2UgdGhlIG9wZXJhdGlvbiBtb3JlIGVmZmljaWVudCBhbmQgZ2VuZXJpYywKKwkgKiB3ZSBjb3B5IGFsbCB0aGUgYmxvY2tzIGludG8gYSBjb250aWd1b3VzIG1lbW9yeSBhbmQgZG8gdGhlCisJICogZGVmcmFnbWVudCB0aGVyZSwgc28gaWYgYW55dGhpbmcgaXMgZXJyb3IsIHdlIHdpbGwgbm90IHRvdWNoCisJICogdGhlIHJlYWwgYmxvY2suCisJICovCisJYnVja2V0X2J1ZiA9IGttYWxsb2MoT0NGUzJfWEFUVFJfQlVDS0VUX1NJWkUsIEdGUF9OT0ZTKTsKKwlpZiAoIWJ1Y2tldF9idWYpIHsKKwkJcmV0ID0gLUVJTzsKKwkJZ290byBvdXQ7CisJfQorCisJYnVmID0gYnVja2V0X2J1ZjsKKwlmb3IgKGkgPSAwOyBpIDwgYmxrX3Blcl9idWNrZXQ7IGkrKywgYnVmICs9IGJsb2Nrc2l6ZSkKKwkJbWVtY3B5KGJ1ZiwgYmhzW2ldLT5iX2RhdGEsIGJsb2Nrc2l6ZSk7CisKKwloYW5kbGUgPSBvY2ZzMl9zdGFydF90cmFucygoT0NGUzJfU0IoaW5vZGUtPmlfc2IpKSwgYmxrX3Blcl9idWNrZXQpOworCWlmIChJU19FUlIoaGFuZGxlKSkgeworCQlyZXQgPSBQVFJfRVJSKGhhbmRsZSk7CisJCWhhbmRsZSA9IE5VTEw7CisJCW1sb2dfZXJybm8ocmV0KTsKKwkJZ290byBvdXQ7CisJfQorCisJZm9yIChpID0gMDsgaSA8IGJsa19wZXJfYnVja2V0OyBpKyspIHsKKwkJcmV0ID0gb2NmczJfam91cm5hbF9hY2Nlc3MoaGFuZGxlLCBpbm9kZSwgYmhzW2ldLAorCQkJCQkgICBPQ0ZTMl9KT1VSTkFMX0FDQ0VTU19XUklURSk7CisJCWlmIChyZXQgPCAwKSB7CisJCQltbG9nX2Vycm5vKHJldCk7CisJCQlnb3RvIGNvbW1pdDsKKwkJfQorCX0KKworCXhoID0gKHN0cnVjdCBvY2ZzMl94YXR0cl9oZWFkZXIgKilidWNrZXRfYnVmOworCWVudHJpZXMgPSAoY2hhciAqKXhoLT54aF9lbnRyaWVzOworCXhoX2ZyZWVfc3RhcnQgPSBsZTE2X3RvX2NwdSh4aC0+eGhfZnJlZV9zdGFydCk7CisKKwltbG9nKDAsICJhZGp1c3QgeGF0dHIgYnVja2V0IGluICVsbHUsIGNvdW50ID0gJXUsICIKKwkgICAgICJ4aF9mcmVlX3N0YXJ0ID0gJXUsIHhoX25hbWVfdmFsdWVfbGVuID0gJXUuXG4iLAorCSAgICAgYmxrbm8sIGxlMTZfdG9fY3B1KHhoLT54aF9jb3VudCksIHhoX2ZyZWVfc3RhcnQsCisJICAgICBsZTE2X3RvX2NwdSh4aC0+eGhfbmFtZV92YWx1ZV9sZW4pKTsKKworCS8qCisJICogc29ydCBhbGwgdGhlIGVudHJpZXMgYnkgdGhlaXIgb2Zmc2V0LgorCSAqIHRoZSBsYXJnZXN0IHdpbGwgYmUgdGhlIGZpcnN0LCBzbyB0aGF0IHdlIGNhbgorCSAqIG1vdmUgdGhlbSB0byB0aGUgZW5kIG9uZSBieSBvbmUuCisJICovCisJc29ydChlbnRyaWVzLCBsZTE2X3RvX2NwdSh4aC0+eGhfY291bnQpLAorCSAgICAgc2l6ZW9mKHN0cnVjdCBvY2ZzMl94YXR0cl9lbnRyeSksCisJICAgICBjbXBfeGVfb2Zmc2V0LCBzd2FwX3hlKTsKKworCS8qIE1vdmUgYWxsIG5hbWUvdmFsdWVzIHRvIHRoZSBlbmQgb2YgdGhlIGJ1Y2tldC4gKi8KKwl4ZSA9IHhoLT54aF9lbnRyaWVzOworCWVuZCA9IE9DRlMyX1hBVFRSX0JVQ0tFVF9TSVpFOworCWZvciAoaSA9IDA7IGkgPCBsZTE2X3RvX2NwdSh4aC0+eGhfY291bnQpOyBpKyssIHhlKyspIHsKKwkJb2Zmc2V0ID0gbGUxNl90b19jcHUoeGUtPnhlX25hbWVfb2Zmc2V0KTsKKwkJaWYgKG9jZnMyX3hhdHRyX2lzX2xvY2FsKHhlKSkKKwkJCXZhbHVlX2xlbiA9IE9DRlMyX1hBVFRSX1NJWkUoCisJCQkJCWxlNjRfdG9fY3B1KHhlLT54ZV92YWx1ZV9zaXplKSk7CisJCWVsc2UKKwkJCXZhbHVlX2xlbiA9IE9DRlMyX1hBVFRSX1JPT1RfU0laRTsKKwkJbGVuID0gT0NGUzJfWEFUVFJfU0laRSh4ZS0+eGVfbmFtZV9sZW4pICsgdmFsdWVfbGVuOworCisJCS8qCisJCSAqIFdlIG11c3QgbWFrZSBzdXJlIHRoYXQgdGhlIG5hbWUvdmFsdWUgcGFpcgorCQkgKiBleGlzdCBpbiB0aGUgc2FtZSBibG9jay4gU28gYWRqdXN0IGVuZCB0bworCQkgKiB0aGUgcHJldmlvdXMgYmxvY2sgZW5kIGlmIG5lZWRlZC4KKwkJICovCisJCWlmICgoKGVuZCAtIGxlbikgLyBibG9ja3NpemUgIT0KKwkJCShlbmQgLSAxKSAvIGJsb2Nrc2l6ZSkpCisJCQllbmQgPSBlbmQgLSBlbmQgJSBibG9ja3NpemU7CisKKwkJaWYgKGVuZCA+IG9mZnNldCArIGxlbikgeworCQkJbWVtbW92ZShidWNrZXRfYnVmICsgZW5kIC0gbGVuLAorCQkJCWJ1Y2tldF9idWYgKyBvZmZzZXQsIGxlbik7CisJCQl4ZS0+eGVfbmFtZV9vZmZzZXQgPSBjcHVfdG9fbGUxNihlbmQgLSBsZW4pOworCQl9CisKKwkJbWxvZ19idWdfb25fbXNnKGVuZCA8IG9mZnNldCArIGxlbiwgIkRlZnJhZyBjaGVjayBmYWlsZWQgZm9yICIKKwkJCQkiYnVja2V0ICVsbHVcbiIsICh1bnNpZ25lZCBsb25nIGxvbmcpYmxrbm8pOworCisJCWVuZCAtPSBsZW47CisJfQorCisJbWxvZ19idWdfb25fbXNnKHhoX2ZyZWVfc3RhcnQgPiBlbmQsICJEZWZyYWcgY2hlY2sgZmFpbGVkIGZvciAiCisJCQkiYnVja2V0ICVsbHVcbiIsICh1bnNpZ25lZCBsb25nIGxvbmcpYmxrbm8pOworCisJaWYgKHhoX2ZyZWVfc3RhcnQgPT0gZW5kKQorCQlnb3RvIGNvbW1pdDsKKworCW1lbXNldChidWNrZXRfYnVmICsgeGhfZnJlZV9zdGFydCwgMCwgZW5kIC0geGhfZnJlZV9zdGFydCk7CisJeGgtPnhoX2ZyZWVfc3RhcnQgPSBjcHVfdG9fbGUxNihlbmQpOworCisJLyogc29ydCB0aGUgZW50cmllcyBieSB0aGVpciBuYW1lX2hhc2guICovCisJc29ydChlbnRyaWVzLCBsZTE2X3RvX2NwdSh4aC0+eGhfY291bnQpLAorCSAgICAgc2l6ZW9mKHN0cnVjdCBvY2ZzMl94YXR0cl9lbnRyeSksCisJICAgICBjbXBfeGUsIHN3YXBfeGUpOworCisJYnVmID0gYnVja2V0X2J1ZjsKKwlmb3IgKGkgPSAwOyBpIDwgYmxrX3Blcl9idWNrZXQ7IGkrKywgYnVmICs9IGJsb2Nrc2l6ZSkgeworCQltZW1jcHkoYmhzW2ldLT5iX2RhdGEsIGJ1ZiwgYmxvY2tzaXplKTsKKwkJb2NmczJfam91cm5hbF9kaXJ0eShoYW5kbGUsIGJoc1tpXSk7CisJfQorCitjb21taXQ6CisJb2NmczJfY29tbWl0X3RyYW5zKE9DRlMyX1NCKGlub2RlLT5pX3NiKSwgaGFuZGxlKTsKK291dDoKKworCWlmIChiaHMpIHsKKwkJZm9yIChpID0gMDsgaSA8IGJsa19wZXJfYnVja2V0OyBpKyspCisJCQlicmVsc2UoYmhzW2ldKTsKKwl9CisJa2ZyZWUoYmhzKTsKKworCWtmcmVlKGJ1Y2tldF9idWYpOworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBNb3ZlIGhhbGYgbnVtcyBvZiB0aGUgeGF0dHIgYnVja2V0IGluIHRoZSBwcmV2aW91cyBjbHVzdGVyIHRvIHRoaXMgbmV3CisgKiBjbHVzdGVyLiBXZSBvbmx5IHRvdWNoIHRoZSBsYXN0IGNsdXN0ZXIgb2YgdGhlIHByZXZpb3VzIGV4dGVuZCByZWNvcmQuCisgKgorICogZmlyc3RfYmggaXMgdGhlIGZpcnN0IGJ1ZmZlcl9oZWFkIG9mIGEgc2VyaWVzIG9mIGJ1Y2tldCBpbiB0aGUgc2FtZQorICogZXh0ZW50IHJlYyBhbmQgaGVhZGVyX2JoIGlzIHRoZSBoZWFkZXIgb2Ygb25lIGJ1Y2tldCBpbiB0aGlzIGNsdXN0ZXIuCisgKiBUaGV5IHdpbGwgYmUgdXBkYXRlZCBpZiB3ZSBtb3ZlIHRoZSBkYXRhIGhlYWRlcl9iaCBjb250YWlucyB0byB0aGUgbmV3CisgKiBjbHVzdGVyLiBmaXJzdF9oYXNoIHdpbGwgYmUgc2V0IGFzIHRoZSAxc3QgeGUncyBuYW1lX2hhc2ggb2YgdGhlIG5ldyBjbHVzdGVyLgorICovCitzdGF0aWMgaW50IG9jZnMyX212X3hhdHRyX2J1Y2tldF9jcm9zc19jbHVzdGVyKHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCQkJCSAgICAgICBoYW5kbGVfdCAqaGFuZGxlLAorCQkJCQkgICAgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICoqZmlyc3RfYmgsCisJCQkJCSAgICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKipoZWFkZXJfYmgsCisJCQkJCSAgICAgICB1NjQgbmV3X2Jsa25vLAorCQkJCQkgICAgICAgdTY0IHByZXZfYmxrbm8sCisJCQkJCSAgICAgICB1MzIgbnVtX2NsdXN0ZXJzLAorCQkJCQkgICAgICAgdTMyICpmaXJzdF9oYXNoKQoreworCWludCBpLCByZXQsIGNyZWRpdHM7CisJc3RydWN0IG9jZnMyX3N1cGVyICpvc2IgPSBPQ0ZTMl9TQihpbm9kZS0+aV9zYik7CisJaW50IGJwYyA9IG9jZnMyX2NsdXN0ZXJzX3RvX2Jsb2Nrcyhpbm9kZS0+aV9zYiwgMSk7CisJaW50IG51bV9idWNrZXRzID0gb2NmczJfeGF0dHJfYnVja2V0c19wZXJfY2x1c3Rlcihvc2IpOworCWludCBibG9ja3NpemUgPSBpbm9kZS0+aV9zYi0+c19ibG9ja3NpemU7CisJc3RydWN0IGJ1ZmZlcl9oZWFkICpvbGRfYmgsICpuZXdfYmgsICpwcmV2X2JoLCAqbmV3X2ZpcnN0X2JoID0gTlVMTDsKKwlzdHJ1Y3Qgb2NmczJfeGF0dHJfaGVhZGVyICpuZXdfeGg7CisJc3RydWN0IG9jZnMyX3hhdHRyX2hlYWRlciAqeGggPQorCQkJKHN0cnVjdCBvY2ZzMl94YXR0cl9oZWFkZXIgKikoKCpmaXJzdF9iaCktPmJfZGF0YSk7CisKKwlCVUdfT04obGUxNl90b19jcHUoeGgtPnhoX251bV9idWNrZXRzKSA8IG51bV9idWNrZXRzKTsKKwlCVUdfT04oT0NGUzJfWEFUVFJfQlVDS0VUX1NJWkUgPT0gb3NiLT5zX2NsdXN0ZXJzaXplKTsKKworCXByZXZfYmggPSAqZmlyc3RfYmg7CisJZ2V0X2JoKHByZXZfYmgpOworCXhoID0gKHN0cnVjdCBvY2ZzMl94YXR0cl9oZWFkZXIgKilwcmV2X2JoLT5iX2RhdGE7CisKKwlwcmV2X2Jsa25vICs9IChudW1fY2x1c3RlcnMgLSAxKSAqIGJwYyArIGJwYyAvIDI7CisKKwltbG9nKDAsICJtb3ZlIGhhbGYgb2YgeGF0dHJzIGluIGNsdXN0ZXIgJWxsdSB0byAlbGx1XG4iLAorCSAgICAgcHJldl9ibGtubywgbmV3X2Jsa25vKTsKKworCS8qCisJICogV2UgbmVlZCB0byB1cGRhdGUgdGhlIDFzdCBoYWxmIG9mIHRoZSBuZXcgY2x1c3RlciBhbmQKKwkgKiAxIG1vcmUgZm9yIHRoZSB1cGRhdGUgb2YgdGhlIDFzdCBidWNrZXQgb2YgdGhlIHByZXZpb3VzCisJICogZXh0ZW50IHJlY29yZC4KKwkgKi8KKwljcmVkaXRzID0gYnBjIC8gMiArIDE7CisJcmV0ID0gb2NmczJfZXh0ZW5kX3RyYW5zKGhhbmRsZSwgY3JlZGl0cyk7CisJaWYgKHJldCkgeworCQltbG9nX2Vycm5vKHJldCk7CisJCWdvdG8gb3V0OworCX0KKworCXJldCA9IG9jZnMyX2pvdXJuYWxfYWNjZXNzKGhhbmRsZSwgaW5vZGUsIHByZXZfYmgsCisJCQkJICAgT0NGUzJfSk9VUk5BTF9BQ0NFU1NfV1JJVEUpOworCWlmIChyZXQpIHsKKwkJbWxvZ19lcnJubyhyZXQpOworCQlnb3RvIG91dDsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgYnBjIC8gMjsgaSsrLCBwcmV2X2Jsa25vKyssIG5ld19ibGtubysrKSB7CisJCW9sZF9iaCA9IG5ld19iaCA9IE5VTEw7CisJCW5ld19iaCA9IHNiX2dldGJsayhpbm9kZS0+aV9zYiwgbmV3X2Jsa25vKTsKKwkJaWYgKCFuZXdfYmgpIHsKKwkJCXJldCA9IC1FSU87CisJCQltbG9nX2Vycm5vKHJldCk7CisJCQlnb3RvIG91dDsKKwkJfQorCisJCW9jZnMyX3NldF9uZXdfYnVmZmVyX3VwdG9kYXRlKGlub2RlLCBuZXdfYmgpOworCisJCXJldCA9IG9jZnMyX2pvdXJuYWxfYWNjZXNzKGhhbmRsZSwgaW5vZGUsIG5ld19iaCwKKwkJCQkJICAgT0NGUzJfSk9VUk5BTF9BQ0NFU1NfQ1JFQVRFKTsKKwkJaWYgKHJldCA8IDApIHsKKwkJCW1sb2dfZXJybm8ocmV0KTsKKwkJCWJyZWxzZShuZXdfYmgpOworCQkJZ290byBvdXQ7CisJCX0KKworCQlyZXQgPSBvY2ZzMl9yZWFkX2Jsb2NrKGlub2RlLCBwcmV2X2Jsa25vLCAmb2xkX2JoKTsKKwkJaWYgKHJldCA8IDApIHsKKwkJCW1sb2dfZXJybm8ocmV0KTsKKwkJCWJyZWxzZShuZXdfYmgpOworCQkJZ290byBvdXQ7CisJCX0KKworCQltZW1jcHkobmV3X2JoLT5iX2RhdGEsIG9sZF9iaC0+Yl9kYXRhLCBibG9ja3NpemUpOworCisJCWlmIChpID09IDApIHsKKwkJCW5ld194aCA9IChzdHJ1Y3Qgb2NmczJfeGF0dHJfaGVhZGVyICopbmV3X2JoLT5iX2RhdGE7CisJCQluZXdfeGgtPnhoX251bV9idWNrZXRzID0gY3B1X3RvX2xlMTYobnVtX2J1Y2tldHMgLyAyKTsKKworCQkJaWYgKGZpcnN0X2hhc2gpCisJCQkJKmZpcnN0X2hhc2ggPSBsZTMyX3RvX2NwdSgKKwkJCQkJbmV3X3hoLT54aF9lbnRyaWVzWzBdLnhlX25hbWVfaGFzaCk7CisJCQluZXdfZmlyc3RfYmggPSBuZXdfYmg7CisJCQlnZXRfYmgobmV3X2ZpcnN0X2JoKTsKKwkJfQorCisJCW9jZnMyX2pvdXJuYWxfZGlydHkoaGFuZGxlLCBuZXdfYmgpOworCisJCWlmICgqaGVhZGVyX2JoID09IG9sZF9iaCkgeworCQkJYnJlbHNlKCpoZWFkZXJfYmgpOworCQkJKmhlYWRlcl9iaCA9IG5ld19iaDsKKwkJCWdldF9iaCgqaGVhZGVyX2JoKTsKKworCQkJYnJlbHNlKCpmaXJzdF9iaCk7CisJCQkqZmlyc3RfYmggPSBuZXdfZmlyc3RfYmg7CisJCQlnZXRfYmgoKmZpcnN0X2JoKTsKKwkJfQorCQlicmVsc2UobmV3X2JoKTsKKwkJYnJlbHNlKG9sZF9iaCk7CisJfQorCisJbGUxNl9hZGRfY3B1KCZ4aC0+eGhfbnVtX2J1Y2tldHMsIC0obnVtX2J1Y2tldHMgLyAyKSk7CisKKwlvY2ZzMl9qb3VybmFsX2RpcnR5KGhhbmRsZSwgcHJldl9iaCk7CitvdXQ6CisJYnJlbHNlKHByZXZfYmgpOworCWJyZWxzZShuZXdfZmlyc3RfYmgpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgb2NmczJfcmVhZF94YXR0cl9idWNrZXQoc3RydWN0IGlub2RlICppbm9kZSwKKwkJCQkgICB1NjQgYmxrbm8sCisJCQkJICAgc3RydWN0IGJ1ZmZlcl9oZWFkICoqYmhzLAorCQkJCSAgIGludCBuZXcpCit7CisJaW50IHJldCA9IDA7CisJdTE2IGksIGJsa19wZXJfYnVja2V0ID0gb2NmczJfYmxvY2tzX3Blcl94YXR0cl9idWNrZXQoaW5vZGUtPmlfc2IpOworCisJaWYgKCFuZXcpCisJCXJldHVybiBvY2ZzMl9yZWFkX2Jsb2Nrcyhpbm9kZSwgYmxrbm8sCisJCQkJCSBibGtfcGVyX2J1Y2tldCwgYmhzLCAwKTsKKworCWZvciAoaSA9IDA7IGkgPCBibGtfcGVyX2J1Y2tldDsgaSsrKSB7CisJCWJoc1tpXSA9IHNiX2dldGJsayhpbm9kZS0+aV9zYiwgYmxrbm8gKyBpKTsKKwkJaWYgKGJoc1tpXSA9PSBOVUxMKSB7CisJCQlyZXQgPSAtRUlPOworCQkJbWxvZ19lcnJubyhyZXQpOworCQkJYnJlYWs7CisJCX0KKwkJb2NmczJfc2V0X25ld19idWZmZXJfdXB0b2RhdGUoaW5vZGUsIGJoc1tpXSk7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIE1vdmUgaGFsZiBudW0gb2YgdGhlIHhhdHRycyBpbiBvbGQgYnVja2V0KGJsaykgdG8gbmV3IGJ1Y2tldChuZXdfYmxrKS4KKyAqIGZpcnN0X2hhc2ggd2lsbCByZWNvcmQgdGhlIDFzdCBoYXNoIG9mIHRoZSBuZXcgYnVja2V0LgorICovCitzdGF0aWMgaW50IG9jZnMyX2hhbGZfeGF0dHJfYnVja2V0KHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCQkJICAgaGFuZGxlX3QgKmhhbmRsZSwKKwkJCQkgICB1NjQgYmxrLAorCQkJCSAgIHU2NCBuZXdfYmxrLAorCQkJCSAgIHUzMiAqZmlyc3RfaGFzaCwKKwkJCQkgICBpbnQgbmV3X2J1Y2tldF9oZWFkKQoreworCWludCByZXQsIGk7CisJdTE2IGNvdW50LCBzdGFydCwgbGVuLCBuYW1lX3ZhbHVlX2xlbiwgeGVfbGVuLCBuYW1lX29mZnNldDsKKwl1MTYgYmxrX3Blcl9idWNrZXQgPSBvY2ZzMl9ibG9ja3NfcGVyX3hhdHRyX2J1Y2tldChpbm9kZS0+aV9zYik7CisJc3RydWN0IGJ1ZmZlcl9oZWFkICoqc19iaHMsICoqdF9iaHMgPSBOVUxMOworCXN0cnVjdCBvY2ZzMl94YXR0cl9oZWFkZXIgKnhoOworCXN0cnVjdCBvY2ZzMl94YXR0cl9lbnRyeSAqeGU7CisJaW50IGJsb2Nrc2l6ZSA9IGlub2RlLT5pX3NiLT5zX2Jsb2Nrc2l6ZTsKKworCW1sb2coMCwgIm1vdmUgaGFsZiBvZiB4YXR0cnMgZnJvbSBidWNrZXQgJWxsdSB0byAlbGx1XG4iLAorCSAgICAgYmxrLCBuZXdfYmxrKTsKKworCXNfYmhzID0ga2NhbGxvYyhibGtfcGVyX2J1Y2tldCwgc2l6ZW9mKHN0cnVjdCBidWZmZXJfaGVhZCAqKSwgR0ZQX05PRlMpOworCWlmICghc19iaHMpCisJCXJldHVybiAtRU5PTUVNOworCisJcmV0ID0gb2NmczJfcmVhZF94YXR0cl9idWNrZXQoaW5vZGUsIGJsaywgc19iaHMsIDApOworCWlmIChyZXQpIHsKKwkJbWxvZ19lcnJubyhyZXQpOworCQlnb3RvIG91dDsKKwl9CisKKwlyZXQgPSBvY2ZzMl9qb3VybmFsX2FjY2VzcyhoYW5kbGUsIGlub2RlLCBzX2Joc1swXSwKKwkJCQkgICBPQ0ZTMl9KT1VSTkFMX0FDQ0VTU19XUklURSk7CisJaWYgKHJldCkgeworCQltbG9nX2Vycm5vKHJldCk7CisJCWdvdG8gb3V0OworCX0KKworCXRfYmhzID0ga2NhbGxvYyhibGtfcGVyX2J1Y2tldCwgc2l6ZW9mKHN0cnVjdCBidWZmZXJfaGVhZCAqKSwgR0ZQX05PRlMpOworCWlmICghdF9iaHMpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CisJfQorCisJcmV0ID0gb2NmczJfcmVhZF94YXR0cl9idWNrZXQoaW5vZGUsIG5ld19ibGssIHRfYmhzLCBuZXdfYnVja2V0X2hlYWQpOworCWlmIChyZXQpIHsKKwkJbWxvZ19lcnJubyhyZXQpOworCQlnb3RvIG91dDsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgYmxrX3Blcl9idWNrZXQ7IGkrKykgeworCQlyZXQgPSBvY2ZzMl9qb3VybmFsX2FjY2VzcyhoYW5kbGUsIGlub2RlLCB0X2Joc1tpXSwKKwkJCQkJICAgT0NGUzJfSk9VUk5BTF9BQ0NFU1NfQ1JFQVRFKTsKKwkJaWYgKHJldCkgeworCQkJbWxvZ19lcnJubyhyZXQpOworCQkJZ290byBvdXQ7CisJCX0KKwl9CisKKwkvKiBjb3B5IHRoZSB3aG9sZSBidWNrZXQgdG8gdGhlIG5ldyBmaXJzdC4gKi8KKwlmb3IgKGkgPSAwOyBpIDwgYmxrX3Blcl9idWNrZXQ7IGkrKykKKwkJbWVtY3B5KHRfYmhzW2ldLT5iX2RhdGEsIHNfYmhzW2ldLT5iX2RhdGEsIGJsb2Nrc2l6ZSk7CisKKwkvKiB1cGRhdGUgdGhlIG5ldyBidWNrZXQuICovCisJeGggPSAoc3RydWN0IG9jZnMyX3hhdHRyX2hlYWRlciAqKXRfYmhzWzBdLT5iX2RhdGE7CisJY291bnQgPSBsZTE2X3RvX2NwdSh4aC0+eGhfY291bnQpOworCXN0YXJ0ID0gY291bnQgLyAyOworCisJLyoKKwkgKiBDYWxjdWxhdGUgdGhlIHRvdGFsIG5hbWUvdmFsdWUgbGVuIGFuZCB4aF9mcmVlX3N0YXJ0IGZvcgorCSAqIHRoZSBvbGQgYnVja2V0IGZpcnN0LgorCSAqLworCW5hbWVfb2Zmc2V0ID0gT0NGUzJfWEFUVFJfQlVDS0VUX1NJWkU7CisJbmFtZV92YWx1ZV9sZW4gPSAwOworCWZvciAoaSA9IDA7IGkgPCBzdGFydDsgaSsrKSB7CisJCXhlID0gJnhoLT54aF9lbnRyaWVzW2ldOworCQl4ZV9sZW4gPSBPQ0ZTMl9YQVRUUl9TSVpFKHhlLT54ZV9uYW1lX2xlbik7CisJCWlmIChvY2ZzMl94YXR0cl9pc19sb2NhbCh4ZSkpCisJCQl4ZV9sZW4gKz0KKwkJCSAgIE9DRlMyX1hBVFRSX1NJWkUobGU2NF90b19jcHUoeGUtPnhlX3ZhbHVlX3NpemUpKTsKKwkJZWxzZQorCQkJeGVfbGVuICs9IE9DRlMyX1hBVFRSX1JPT1RfU0laRTsKKwkJbmFtZV92YWx1ZV9sZW4gKz0geGVfbGVuOworCQlpZiAobGUxNl90b19jcHUoeGUtPnhlX25hbWVfb2Zmc2V0KSA8IG5hbWVfb2Zmc2V0KQorCQkJbmFtZV9vZmZzZXQgPSBsZTE2X3RvX2NwdSh4ZS0+eGVfbmFtZV9vZmZzZXQpOworCX0KKworCS8qCisJICogTm93IGJlZ2luIHRoZSBtb2RpZmljYXRpb24gdG8gdGhlIG5ldyBidWNrZXQuCisJICoKKwkgKiBJbiB0aGUgbmV3IGJ1Y2tldCwgV2UganVzdCBtb3ZlIHRoZSB4YXR0ciBlbnRyeSB0byB0aGUgYmVnaW5uaW5nCisJICogYW5kIGRvbid0IHRvdWNoIHRoZSBuYW1lL3ZhbHVlLiBTbyB0aGVyZSB3aWxsIGJlIHNvbWUgaG9sZXMgaW4gdGhlCisJICogYnVja2V0LCBhbmQgdGhleSB3aWxsIGJlIHJlbW92ZWQgd2hlbiBvY2ZzMl9kZWZyYWdfeGF0dHJfYnVja2V0IGlzCisJICogY2FsbGVkLgorCSAqLworCXhlID0gJnhoLT54aF9lbnRyaWVzW3N0YXJ0XTsKKwlsZW4gPSBzaXplb2Yoc3RydWN0IG9jZnMyX3hhdHRyX2VudHJ5KSAqIChjb3VudCAtIHN0YXJ0KTsKKwltbG9nKDAsICJtdiB4YXR0ciBlbnRyeSBsZW4gJWQgZnJvbSAlZCB0byAlZFxuIiwgbGVuLAorCSAgICAgKGludCkoKGNoYXIgKil4ZSAtIChjaGFyICopeGgpLAorCSAgICAgKGludCkoKGNoYXIgKil4aC0+eGhfZW50cmllcyAtIChjaGFyICopeGgpKTsKKwltZW1tb3ZlKChjaGFyICopeGgtPnhoX2VudHJpZXMsIChjaGFyICopeGUsIGxlbik7CisJeGUgPSAmeGgtPnhoX2VudHJpZXNbY291bnQgLSBzdGFydF07CisJbGVuID0gc2l6ZW9mKHN0cnVjdCBvY2ZzMl94YXR0cl9lbnRyeSkgKiBzdGFydDsKKwltZW1zZXQoKGNoYXIgKil4ZSwgMCwgbGVuKTsKKworCWxlMTZfYWRkX2NwdSgmeGgtPnhoX2NvdW50LCAtc3RhcnQpOworCWxlMTZfYWRkX2NwdSgmeGgtPnhoX25hbWVfdmFsdWVfbGVuLCAtbmFtZV92YWx1ZV9sZW4pOworCisJLyogQ2FsY3VsYXRlIHhoX2ZyZWVfc3RhcnQgZm9yIHRoZSBuZXcgYnVja2V0LiAqLworCXhoLT54aF9mcmVlX3N0YXJ0ID0gY3B1X3RvX2xlMTYoT0NGUzJfWEFUVFJfQlVDS0VUX1NJWkUpOworCWZvciAoaSA9IDA7IGkgPCBsZTE2X3RvX2NwdSh4aC0+eGhfY291bnQpOyBpKyspIHsKKwkJeGUgPSAmeGgtPnhoX2VudHJpZXNbaV07CisJCXhlX2xlbiA9IE9DRlMyX1hBVFRSX1NJWkUoeGUtPnhlX25hbWVfbGVuKTsKKwkJaWYgKG9jZnMyX3hhdHRyX2lzX2xvY2FsKHhlKSkKKwkJCXhlX2xlbiArPQorCQkJICAgT0NGUzJfWEFUVFJfU0laRShsZTY0X3RvX2NwdSh4ZS0+eGVfdmFsdWVfc2l6ZSkpOworCQllbHNlCisJCQl4ZV9sZW4gKz0gT0NGUzJfWEFUVFJfUk9PVF9TSVpFOworCQlpZiAobGUxNl90b19jcHUoeGUtPnhlX25hbWVfb2Zmc2V0KSA8CisJCSAgICBsZTE2X3RvX2NwdSh4aC0+eGhfZnJlZV9zdGFydCkpCisJCQl4aC0+eGhfZnJlZV9zdGFydCA9IHhlLT54ZV9uYW1lX29mZnNldDsKKwl9CisKKwkvKiBzZXQgeGgtPnhoX251bV9idWNrZXRzIGZvciB0aGUgbmV3IHhoLiAqLworCWlmIChuZXdfYnVja2V0X2hlYWQpCisJCXhoLT54aF9udW1fYnVja2V0cyA9IGNwdV90b19sZTE2KDEpOworCWVsc2UKKwkJeGgtPnhoX251bV9idWNrZXRzID0gMDsKKworCWZvciAoaSA9IDA7IGkgPCBibGtfcGVyX2J1Y2tldDsgaSsrKSB7CisJCW9jZnMyX2pvdXJuYWxfZGlydHkoaGFuZGxlLCB0X2Joc1tpXSk7CisJCWlmIChyZXQpCisJCQltbG9nX2Vycm5vKHJldCk7CisJfQorCisJLyogc3RvcmUgdGhlIGZpcnN0X2hhc2ggb2YgdGhlIG5ldyBidWNrZXQuICovCisJaWYgKGZpcnN0X2hhc2gpCisJCSpmaXJzdF9oYXNoID0gbGUzMl90b19jcHUoeGgtPnhoX2VudHJpZXNbMF0ueGVfbmFtZV9oYXNoKTsKKworCS8qCisJICogTm93IG9ubHkgdXBkYXRlIHRoZSAxc3QgYmxvY2sgb2YgdGhlIG9sZCBidWNrZXQuCisJICogUGxlYXNlIG5vdGUgdGhhdCB0aGUgZW50cnkgaGFzIGJlZW4gc29ydGVkIGFscmVhZHkgYWJvdmUuCisJICovCisJeGggPSAoc3RydWN0IG9jZnMyX3hhdHRyX2hlYWRlciAqKXNfYmhzWzBdLT5iX2RhdGE7CisJbWVtc2V0KCZ4aC0+eGhfZW50cmllc1tzdGFydF0sIDAsCisJICAgICAgIHNpemVvZihzdHJ1Y3Qgb2NmczJfeGF0dHJfZW50cnkpICogKGNvdW50IC0gc3RhcnQpKTsKKwl4aC0+eGhfY291bnQgPSBjcHVfdG9fbGUxNihzdGFydCk7CisJeGgtPnhoX2ZyZWVfc3RhcnQgPSBjcHVfdG9fbGUxNihuYW1lX29mZnNldCk7CisJeGgtPnhoX25hbWVfdmFsdWVfbGVuID0gY3B1X3RvX2xlMTYobmFtZV92YWx1ZV9sZW4pOworCisJb2NmczJfam91cm5hbF9kaXJ0eShoYW5kbGUsIHNfYmhzWzBdKTsKKwlpZiAocmV0KQorCQltbG9nX2Vycm5vKHJldCk7CisKK291dDoKKwlpZiAoc19iaHMpIHsKKwkJZm9yIChpID0gMDsgaSA8IGJsa19wZXJfYnVja2V0OyBpKyspCisJCQlicmVsc2Uoc19iaHNbaV0pOworCX0KKwlrZnJlZShzX2Jocyk7CisKKwlpZiAodF9iaHMpIHsKKwkJZm9yIChpID0gMDsgaSA8IGJsa19wZXJfYnVja2V0OyBpKyspCisJCQlicmVsc2UodF9iaHNbaV0pOworCX0KKwlrZnJlZSh0X2Jocyk7CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogQ29weSB4YXR0ciBmcm9tIG9uZSBidWNrZXQgdG8gYW5vdGhlciBidWNrZXQuCisgKgorICogVGhlIGNhbGxlciBtdXN0IG1ha2Ugc3VyZSB0aGF0IHRoZSBqb3VybmFsIHRyYW5zYWN0aW9uCisgKiBoYXMgZW5vdWdoIHNwYWNlIGZvciBqb3VybmFsaW5nLgorICovCitzdGF0aWMgaW50IG9jZnMyX2NwX3hhdHRyX2J1Y2tldChzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkJCSBoYW5kbGVfdCAqaGFuZGxlLAorCQkJCSB1NjQgc19ibGtubywKKwkJCQkgdTY0IHRfYmxrbm8sCisJCQkJIGludCB0X2lzX25ldykKK3sKKwlpbnQgcmV0LCBpOworCWludCBibGtfcGVyX2J1Y2tldCA9IG9jZnMyX2Jsb2Nrc19wZXJfeGF0dHJfYnVja2V0KGlub2RlLT5pX3NiKTsKKwlpbnQgYmxvY2tzaXplID0gaW5vZGUtPmlfc2ItPnNfYmxvY2tzaXplOworCXN0cnVjdCBidWZmZXJfaGVhZCAqKnNfYmhzLCAqKnRfYmhzID0gTlVMTDsKKworCUJVR19PTihzX2Jsa25vID09IHRfYmxrbm8pOworCisJbWxvZygwLCAiY3AgYnVja2V0ICVsbHUgdG8gJWxsdSwgdGFyZ2V0IGlzICVkXG4iLAorCSAgICAgc19ibGtubywgdF9ibGtubywgdF9pc19uZXcpOworCisJc19iaHMgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgYnVmZmVyX2hlYWQgKikgKiBibGtfcGVyX2J1Y2tldCwKKwkJCUdGUF9OT0ZTKTsKKwlpZiAoIXNfYmhzKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXJldCA9IG9jZnMyX3JlYWRfeGF0dHJfYnVja2V0KGlub2RlLCBzX2Jsa25vLCBzX2JocywgMCk7CisJaWYgKHJldCkKKwkJZ290byBvdXQ7CisKKwl0X2JocyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBidWZmZXJfaGVhZCAqKSAqIGJsa19wZXJfYnVja2V0LAorCQkJR0ZQX05PRlMpOworCWlmICghdF9iaHMpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CisJfQorCisJcmV0ID0gb2NmczJfcmVhZF94YXR0cl9idWNrZXQoaW5vZGUsIHRfYmxrbm8sIHRfYmhzLCB0X2lzX25ldyk7CisJaWYgKHJldCkKKwkJZ290byBvdXQ7CisKKwlmb3IgKGkgPSAwOyBpIDwgYmxrX3Blcl9idWNrZXQ7IGkrKykgeworCQlyZXQgPSBvY2ZzMl9qb3VybmFsX2FjY2VzcyhoYW5kbGUsIGlub2RlLCB0X2Joc1tpXSwKKwkJCQkJICAgT0NGUzJfSk9VUk5BTF9BQ0NFU1NfV1JJVEUpOworCQlpZiAocmV0KQorCQkJZ290byBvdXQ7CisJfQorCisJZm9yIChpID0gMDsgaSA8IGJsa19wZXJfYnVja2V0OyBpKyspIHsKKwkJbWVtY3B5KHRfYmhzW2ldLT5iX2RhdGEsIHNfYmhzW2ldLT5iX2RhdGEsIGJsb2Nrc2l6ZSk7CisJCW9jZnMyX2pvdXJuYWxfZGlydHkoaGFuZGxlLCB0X2Joc1tpXSk7CisJfQorCitvdXQ6CisJaWYgKHNfYmhzKSB7CisJCWZvciAoaSA9IDA7IGkgPCBibGtfcGVyX2J1Y2tldDsgaSsrKQorCQkJYnJlbHNlKHNfYmhzW2ldKTsKKwl9CisJa2ZyZWUoc19iaHMpOworCisJaWYgKHRfYmhzKSB7CisJCWZvciAoaSA9IDA7IGkgPCBibGtfcGVyX2J1Y2tldDsgaSsrKQorCQkJYnJlbHNlKHRfYmhzW2ldKTsKKwl9CisJa2ZyZWUodF9iaHMpOworCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIENvcHkgb25lIHhhdHRyIGNsdXN0ZXIgZnJvbSBzcmNfYmxrIHRvIHRvX2Jsay4KKyAqIFRoZSB0b19ibGsgd2lsbCBiZWNvbWUgdGhlIGZpcnN0IGJ1Y2tldCBoZWFkZXIgb2YgdGhlIGNsdXN0ZXIsIHNvIGl0cworICogeGhfbnVtX2J1Y2tldHMgd2lsbCBiZSBpbml0aWFsaXplZCBhcyB0aGUgYnVja2V0IG51bSBpbiB0aGUgY2x1c3Rlci4KKyAqLworc3RhdGljIGludCBvY2ZzMl9jcF94YXR0cl9jbHVzdGVyKHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCQkJICBoYW5kbGVfdCAqaGFuZGxlLAorCQkJCSAgc3RydWN0IGJ1ZmZlcl9oZWFkICpmaXJzdF9iaCwKKwkJCQkgIHU2NCBzcmNfYmxrLAorCQkJCSAgdTY0IHRvX2JsaywKKwkJCQkgIHUzMiAqZmlyc3RfaGFzaCkKK3sKKwlpbnQgaSwgcmV0LCBjcmVkaXRzOworCXN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiID0gT0NGUzJfU0IoaW5vZGUtPmlfc2IpOworCWludCBicGMgPSBvY2ZzMl9jbHVzdGVyc190b19ibG9ja3MoaW5vZGUtPmlfc2IsIDEpOworCWludCBudW1fYnVja2V0cyA9IG9jZnMyX3hhdHRyX2J1Y2tldHNfcGVyX2NsdXN0ZXIob3NiKTsKKwlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoID0gTlVMTDsKKwlzdHJ1Y3Qgb2NmczJfeGF0dHJfaGVhZGVyICp4aDsKKwl1NjQgdG9fYmxrX3N0YXJ0ID0gdG9fYmxrOworCisJbWxvZygwLCAiY3AgeGF0dHJzIGZyb20gY2x1c3RlciAlbGx1IHRvICVsbHVcbiIsIHNyY19ibGssIHRvX2Jsayk7CisKKwkvKgorCSAqIFdlIG5lZWQgdG8gdXBkYXRlIHRoZSBuZXcgY2x1c3RlciBhbmQgMSBtb3JlIGZvciB0aGUgdXBkYXRlIG9mCisJICogdGhlIDFzdCBidWNrZXQgb2YgdGhlIHByZXZpb3VzIGV4dGVudCByZWMuCisJICovCisJY3JlZGl0cyA9IGJwYyArIDE7CisJcmV0ID0gb2NmczJfZXh0ZW5kX3RyYW5zKGhhbmRsZSwgY3JlZGl0cyk7CisJaWYgKHJldCkgeworCQltbG9nX2Vycm5vKHJldCk7CisJCWdvdG8gb3V0OworCX0KKworCXJldCA9IG9jZnMyX2pvdXJuYWxfYWNjZXNzKGhhbmRsZSwgaW5vZGUsIGZpcnN0X2JoLAorCQkJCSAgIE9DRlMyX0pPVVJOQUxfQUNDRVNTX1dSSVRFKTsKKwlpZiAocmV0KSB7CisJCW1sb2dfZXJybm8ocmV0KTsKKwkJZ290byBvdXQ7CisJfQorCisJZm9yIChpID0gMDsgaSA8IG51bV9idWNrZXRzOyBpKyspIHsKKwkJcmV0ID0gb2NmczJfY3BfeGF0dHJfYnVja2V0KGlub2RlLCBoYW5kbGUsCisJCQkJCSAgICBzcmNfYmxrLCB0b19ibGssIDEpOworCQlpZiAocmV0KSB7CisJCQltbG9nX2Vycm5vKHJldCk7CisJCQlnb3RvIG91dDsKKwkJfQorCisJCXNyY19ibGsgKz0gb2NmczJfYmxvY2tzX3Blcl94YXR0cl9idWNrZXQoaW5vZGUtPmlfc2IpOworCQl0b19ibGsgKz0gb2NmczJfYmxvY2tzX3Blcl94YXR0cl9idWNrZXQoaW5vZGUtPmlfc2IpOworCX0KKworCS8qIHVwZGF0ZSB0aGUgb2xkIGJ1Y2tldCBoZWFkZXIuICovCisJeGggPSAoc3RydWN0IG9jZnMyX3hhdHRyX2hlYWRlciAqKWZpcnN0X2JoLT5iX2RhdGE7CisJbGUxNl9hZGRfY3B1KCZ4aC0+eGhfbnVtX2J1Y2tldHMsIC1udW1fYnVja2V0cyk7CisKKwlvY2ZzMl9qb3VybmFsX2RpcnR5KGhhbmRsZSwgZmlyc3RfYmgpOworCisJLyogdXBkYXRlIHRoZSBuZXcgYnVja2V0IGhlYWRlci4gKi8KKwlyZXQgPSBvY2ZzMl9yZWFkX2Jsb2NrKGlub2RlLCB0b19ibGtfc3RhcnQsICZiaCk7CisJaWYgKHJldCA8IDApIHsKKwkJbWxvZ19lcnJubyhyZXQpOworCQlnb3RvIG91dDsKKwl9CisKKwlyZXQgPSBvY2ZzMl9qb3VybmFsX2FjY2VzcyhoYW5kbGUsIGlub2RlLCBiaCwKKwkJCQkgICBPQ0ZTMl9KT1VSTkFMX0FDQ0VTU19XUklURSk7CisJaWYgKHJldCkgeworCQltbG9nX2Vycm5vKHJldCk7CisJCWdvdG8gb3V0OworCX0KKworCXhoID0gKHN0cnVjdCBvY2ZzMl94YXR0cl9oZWFkZXIgKiliaC0+Yl9kYXRhOworCXhoLT54aF9udW1fYnVja2V0cyA9IGNwdV90b19sZTE2KG51bV9idWNrZXRzKTsKKworCW9jZnMyX2pvdXJuYWxfZGlydHkoaGFuZGxlLCBiaCk7CisKKwlpZiAoZmlyc3RfaGFzaCkKKwkJKmZpcnN0X2hhc2ggPSBsZTMyX3RvX2NwdSh4aC0+eGhfZW50cmllc1swXS54ZV9uYW1lX2hhc2gpOworb3V0OgorCWJyZWxzZShiaCk7CisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIE1vdmUgaGFsZiBvZiB0aGUgeGF0dHJzIGluIHRoaXMgY2x1c3RlciB0byB0aGUgbmV3IGNsdXN0ZXIuCisgKiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBvbmx5IGJlIGNhbGxlZCB3aGVuIGJ1Y2tldCBzaXplID09IGNsdXN0ZXIgc2l6ZS4KKyAqIE90aGVyd2lzZSBvY2ZzMl9tdl94YXR0cl9idWNrZXRfY3Jvc3NfY2x1c3RlciBzaG91bGQgYmUgdXNlZCBpbnN0ZWFkLgorICovCitzdGF0aWMgaW50IG9jZnMyX2hhbGZfeGF0dHJfY2x1c3RlcihzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkJCSAgICBoYW5kbGVfdCAqaGFuZGxlLAorCQkJCSAgICB1NjQgcHJldl9ibGssCisJCQkJICAgIHU2NCBuZXdfYmxrLAorCQkJCSAgICB1MzIgKmZpcnN0X2hhc2gpCit7CisJdTE2IGJsa19wZXJfYnVja2V0ID0gb2NmczJfYmxvY2tzX3Blcl94YXR0cl9idWNrZXQoaW5vZGUtPmlfc2IpOworCWludCByZXQsIGNyZWRpdHMgPSAyICogYmxrX3Blcl9idWNrZXQ7CisKKwlCVUdfT04oT0NGUzJfWEFUVFJfQlVDS0VUX1NJWkUgPCBPQ0ZTMl9TQihpbm9kZS0+aV9zYiktPnNfY2x1c3RlcnNpemUpOworCisJcmV0ID0gb2NmczJfZXh0ZW5kX3RyYW5zKGhhbmRsZSwgY3JlZGl0cyk7CisJaWYgKHJldCkgeworCQltbG9nX2Vycm5vKHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJLyogTW92ZSBoYWxmIG9mIHRoZSB4YXR0ciBpbiBzdGFydF9ibGsgdG8gdGhlIG5leHQgYnVja2V0LiAqLworCXJldHVybiAgb2NmczJfaGFsZl94YXR0cl9idWNrZXQoaW5vZGUsIGhhbmRsZSwgcHJldl9ibGssCisJCQkJCW5ld19ibGssIGZpcnN0X2hhc2gsIDEpOworfQorCisvKgorICogTW92ZSBzb21lIHhhdHRycyBmcm9tIHRoZSBvbGQgY2x1c3RlciB0byB0aGUgbmV3IG9uZSBzaW5jZSB0aGV5IGFyZSBub3QKKyAqIGNvbnRpZ3VvdXMgaW4gb2NmczIgeGF0dHIgdHJlZS4KKyAqCisgKiBuZXdfYmxrIHN0YXJ0cyBhIG5ldyBzZXBhcmF0ZSBjbHVzdGVyLCBhbmQgd2Ugd2lsbCBtb3ZlIHNvbWUgeGF0dHJzIGZyb20KKyAqIHByZXZfYmxrIHRvIGl0LiB2X3N0YXJ0IHdpbGwgYmUgc2V0IGFzIHRoZSBmaXJzdCBuYW1lIGhhc2ggdmFsdWUgaW4gdGhpcworICogbmV3IGNsdXN0ZXIgc28gdGhhdCBpdCBjYW4gYmUgdXNlZCBhcyBlX2Nwb3MgZHVyaW5nIHRyZWUgaW5zZXJ0aW9uIGFuZAorICogZG9uJ3QgY29sbGlkZSB3aXRoIG91ciBvcmlnaW5hbCBiLXRyZWUgb3BlcmF0aW9ucy4gZmlyc3RfYmggYW5kIGhlYWRlcl9iaAorICogd2lsbCBhbHNvIGJlIHVwZGF0ZWQgc2luY2UgdGhleSB3aWxsIGJlIHVzZWQgaW4gb2NmczJfZXh0ZW5kX3hhdHRyX2J1Y2tldAorICogdG8gZXh0ZW5kIHRoZSBpbnNlcnQgYnVja2V0LgorICoKKyAqIFRoZSBwcm9ibGVtIGlzIGhvdyBtdWNoIHhhdHRyIHNob3VsZCB3ZSBtb3ZlIHRvIHRoZSBuZXcgb25lIGFuZCB3aGVuIHNob3VsZAorICogd2UgdXBkYXRlIGZpcnN0X2JoIGFuZCBoZWFkZXJfYmg/CisgKiAxLiBJZiBjbHVzdGVyIHNpemUgPiBidWNrZXQgc2l6ZSwgdGhhdCBtZWFucyB0aGUgcHJldmlvdXMgY2x1c3RlciBoYXMgbW9yZQorICogICAgdGhhbiAxIGJ1Y2tldCwgc28ganVzdCBtb3ZlIGhhbGYgbnVtcyBvZiBidWNrZXQgaW50byB0aGUgbmV3IGNsdXN0ZXIgYW5kCisgKiAgICB1cGRhdGUgdGhlIGZpcnN0X2JoIGFuZCBoZWFkZXJfYmggaWYgdGhlIGluc2VydCBidWNrZXQgaGFzIGJlZW4gbW92ZWQKKyAqICAgIHRvIHRoZSBuZXcgY2x1c3Rlci4KKyAqIDIuIElmIGNsdXN0ZXJfc2l6ZSA9PSBidWNrZXRfc2l6ZToKKyAqICAgIGEpIElmIHRoZSBwcmV2aW91cyBleHRlbnQgcmVjIGhhcyBtb3JlIHRoYW4gb25lIGNsdXN0ZXIgYW5kIHRoZSBpbnNlcnQKKyAqICAgICAgIHBsYWNlIGlzbid0IGluIHRoZSBsYXN0IGNsdXN0ZXIsIGNvcHkgdGhlIGVudGlyZSBsYXN0IGNsdXN0ZXIgdG8gdGhlCisgKiAgICAgICBuZXcgb25lLiBUaGlzIHRpbWUsIHdlIGRvbid0IG5lZWQgdG8gdXBhdGUgdGhlIGZpcnN0X2JoIGFuZCBoZWFkZXJfYmgKKyAqICAgICAgIHNpbmNlIHRoZXkgd2lsbCBub3QgYmUgbW92ZWQgaW50byB0aGUgbmV3IGNsdXN0ZXIuCisgKiAgICBiKSBPdGhlcndpc2UsIG1vdmUgdGhlIGJvdHRvbSBoYWxmIG9mIHRoZSB4YXR0cnMgaW4gdGhlIGxhc3QgY2x1c3RlciBpbnRvCisgKiAgICAgICB0aGUgbmV3IG9uZS4gQW5kIHdlIHNldCB0aGUgZXh0ZW5kIGZsYWcgdG8gemVybyBpZiB0aGUgaW5zZXJ0IHBsYWNlIGlzCisgKiAgICAgICBtb3ZlZCBpbnRvIHRoZSBuZXcgYWxsb2NhdGVkIGNsdXN0ZXIgc2luY2Ugbm8gZXh0ZW5kIGlzIG5lZWRlZC4KKyAqLworc3RhdGljIGludCBvY2ZzMl9hZGp1c3RfeGF0dHJfY3Jvc3NfY2x1c3RlcihzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkJCQkgICAgaGFuZGxlX3QgKmhhbmRsZSwKKwkJCQkJICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqKmZpcnN0X2JoLAorCQkJCQkgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICoqaGVhZGVyX2JoLAorCQkJCQkgICAgdTY0IG5ld19ibGssCisJCQkJCSAgICB1NjQgcHJldl9ibGssCisJCQkJCSAgICB1MzIgcHJldl9jbHVzdGVycywKKwkJCQkJICAgIHUzMiAqdl9zdGFydCwKKwkJCQkJICAgIGludCAqZXh0ZW5kKQoreworCWludCByZXQgPSAwOworCWludCBicGMgPSBvY2ZzMl9jbHVzdGVyc190b19ibG9ja3MoaW5vZGUtPmlfc2IsIDEpOworCisJbWxvZygwLCAiYWRqdXN0IHhhdHRycyBmcm9tIGNsdXN0ZXIgJWxsdSBsZW4gJXUgdG8gJWxsdVxuIiwKKwkgICAgIHByZXZfYmxrLCBwcmV2X2NsdXN0ZXJzLCBuZXdfYmxrKTsKKworCWlmIChvY2ZzMl94YXR0cl9idWNrZXRzX3Blcl9jbHVzdGVyKE9DRlMyX1NCKGlub2RlLT5pX3NiKSkgPiAxKQorCQlyZXQgPSBvY2ZzMl9tdl94YXR0cl9idWNrZXRfY3Jvc3NfY2x1c3Rlcihpbm9kZSwKKwkJCQkJCQkgIGhhbmRsZSwKKwkJCQkJCQkgIGZpcnN0X2JoLAorCQkJCQkJCSAgaGVhZGVyX2JoLAorCQkJCQkJCSAgbmV3X2JsaywKKwkJCQkJCQkgIHByZXZfYmxrLAorCQkJCQkJCSAgcHJldl9jbHVzdGVycywKKwkJCQkJCQkgIHZfc3RhcnQpOworCWVsc2UgeworCQl1NjQgbGFzdF9ibGsgPSBwcmV2X2JsayArIGJwYyAqIChwcmV2X2NsdXN0ZXJzIC0gMSk7CisKKwkJaWYgKHByZXZfY2x1c3RlcnMgPiAxICYmICgqaGVhZGVyX2JoKS0+Yl9ibG9ja25yICE9IGxhc3RfYmxrKQorCQkJcmV0ID0gb2NmczJfY3BfeGF0dHJfY2x1c3Rlcihpbm9kZSwgaGFuZGxlLCAqZmlyc3RfYmgsCisJCQkJCQkgICAgIGxhc3RfYmxrLCBuZXdfYmxrLAorCQkJCQkJICAgICB2X3N0YXJ0KTsKKwkJZWxzZSB7CisJCQlyZXQgPSBvY2ZzMl9oYWxmX3hhdHRyX2NsdXN0ZXIoaW5vZGUsIGhhbmRsZSwKKwkJCQkJCSAgICAgICBsYXN0X2JsaywgbmV3X2JsaywKKwkJCQkJCSAgICAgICB2X3N0YXJ0KTsKKworCQkJaWYgKCgqaGVhZGVyX2JoKS0+Yl9ibG9ja25yID09IGxhc3RfYmxrICYmIGV4dGVuZCkKKwkJCQkqZXh0ZW5kID0gMDsKKwkJfQorCX0KKworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBBZGQgYSBuZXcgY2x1c3RlciBmb3IgeGF0dHIgc3RvcmFnZS4KKyAqCisgKiBJZiB0aGUgbmV3IGNsdXN0ZXIgaXMgY29udGlndW91cyB3aXRoIHRoZSBwcmV2aW91cyBvbmUsIGl0IHdpbGwgYmUKKyAqIGFwcGVuZGVkIHRvIHRoZSBzYW1lIGV4dGVudCByZWNvcmQsIGFuZCBudW1fY2x1c3RlcnMgd2lsbCBiZSB1cGRhdGVkLgorICogSWYgbm90LCB3ZSB3aWxsIGluc2VydCBhIG5ldyBleHRlbnQgZm9yIGl0IGFuZCBtb3ZlIHNvbWUgeGF0dHJzIGluCisgKiB0aGUgbGFzdCBjbHVzdGVyIGludG8gdGhlIG5ldyBhbGxvY2F0ZWQgb25lLgorICogV2UgYWxzbyBuZWVkIHRvIGxpbWl0IHRoZSBtYXhpbXVtIHNpemUgb2YgYSBidHJlZSBsZWFmLCBvdGhlcndpc2Ugd2UnbGwKKyAqIGxvc2UgdGhlIGJlbmVmaXRzIG9mIGhhc2hpbmcgYmVjYXVzZSB3ZSdsbCBoYXZlIHRvIHNlYXJjaCBsYXJnZSBsZWF2ZXMuCisgKiBTbyBub3cgdGhlIG1heGltdW0gc2l6ZSBpcyBPQ0ZTMl9NQVhfWEFUVFJfVFJFRV9MRUFGX1NJWkUob3IgY2x1c3RlcnNpemUsCisgKiBpZiBpdCdzIGJpZ2dlcikuCisgKgorICogZmlyc3RfYmggaXMgdGhlIGZpcnN0IGJsb2NrIG9mIHRoZSBwcmV2aW91cyBleHRlbnQgcmVjIGFuZCBoZWFkZXJfYmgKKyAqIGluZGljYXRlcyB0aGUgYnVja2V0IHdlIHdpbGwgaW5zZXJ0IHRoZSBuZXcgeGF0dHJzLiBUaGV5IHdpbGwgYmUgdXBkYXRlZAorICogd2hlbiB0aGUgaGVhZGVyX2JoIGlzIG1vdmVkIGludG8gdGhlIG5ldyBjbHVzdGVyLgorICovCitzdGF0aWMgaW50IG9jZnMyX2FkZF9uZXdfeGF0dHJfY2x1c3RlcihzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkJCSAgICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKnJvb3RfYmgsCisJCQkJICAgICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqKmZpcnN0X2JoLAorCQkJCSAgICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKipoZWFkZXJfYmgsCisJCQkJICAgICAgIHUzMiAqbnVtX2NsdXN0ZXJzLAorCQkJCSAgICAgICB1MzIgcHJldl9jcG9zLAorCQkJCSAgICAgICB1NjQgcHJldl9ibGtubywKKwkJCQkgICAgICAgaW50ICpleHRlbmQpCit7CisJaW50IHJldCwgY3JlZGl0czsKKwl1MTYgYnBjID0gb2NmczJfY2x1c3RlcnNfdG9fYmxvY2tzKGlub2RlLT5pX3NiLCAxKTsKKwl1MzIgcHJldl9jbHVzdGVycyA9ICpudW1fY2x1c3RlcnM7CisJdTMyIGNsdXN0ZXJzX3RvX2FkZCA9IDEsIGJpdF9vZmYsIG51bV9iaXRzLCB2X3N0YXJ0ID0gMDsKKwl1NjQgYmxvY2s7CisJaGFuZGxlX3QgKmhhbmRsZSA9IE5VTEw7CisJc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKmRhdGFfYWMgPSBOVUxMOworCXN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICptZXRhX2FjID0gTlVMTDsKKwlzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiA9IE9DRlMyX1NCKGlub2RlLT5pX3NiKTsKKwlzdHJ1Y3Qgb2NmczJfZXh0ZW50X3RyZWUgZXQ7CisKKwltbG9nKDAsICJBZGQgbmV3IHhhdHRyIGNsdXN0ZXIgZm9yICVsbHUsIHByZXZpb3VzIHhhdHRyIGhhc2ggPSAldSwgIgorCSAgICAgInByZXZpb3VzIHhhdHRyIGJsa25vID0gJWxsdVxuIiwKKwkgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpT0NGUzJfSShpbm9kZSktPmlwX2Jsa25vLAorCSAgICAgcHJldl9jcG9zLCBwcmV2X2Jsa25vKTsKKworCW9jZnMyX2luaXRfeGF0dHJfdHJlZV9leHRlbnRfdHJlZSgmZXQsIGlub2RlLCByb290X2JoKTsKKworCXJldCA9IG9jZnMyX2xvY2tfYWxsb2NhdG9ycyhpbm9kZSwgJmV0LCBjbHVzdGVyc190b19hZGQsIDAsCisJCQkJICAgICZkYXRhX2FjLCAmbWV0YV9hYyk7CisJaWYgKHJldCkgeworCQltbG9nX2Vycm5vKHJldCk7CisJCWdvdG8gbGVhdmU7CisJfQorCisJY3JlZGl0cyA9IG9jZnMyX2NhbGNfZXh0ZW5kX2NyZWRpdHMob3NiLT5zYiwgZXQuZXRfcm9vdF9lbCwKKwkJCQkJICAgIGNsdXN0ZXJzX3RvX2FkZCk7CisJaGFuZGxlID0gb2NmczJfc3RhcnRfdHJhbnMob3NiLCBjcmVkaXRzKTsKKwlpZiAoSVNfRVJSKGhhbmRsZSkpIHsKKwkJcmV0ID0gUFRSX0VSUihoYW5kbGUpOworCQloYW5kbGUgPSBOVUxMOworCQltbG9nX2Vycm5vKHJldCk7CisJCWdvdG8gbGVhdmU7CisJfQorCisJcmV0ID0gb2NmczJfam91cm5hbF9hY2Nlc3MoaGFuZGxlLCBpbm9kZSwgcm9vdF9iaCwKKwkJCQkgICBPQ0ZTMl9KT1VSTkFMX0FDQ0VTU19XUklURSk7CisJaWYgKHJldCA8IDApIHsKKwkJbWxvZ19lcnJubyhyZXQpOworCQlnb3RvIGxlYXZlOworCX0KKworCXJldCA9IF9fb2NmczJfY2xhaW1fY2x1c3RlcnMob3NiLCBoYW5kbGUsIGRhdGFfYWMsIDEsCisJCQkJICAgICBjbHVzdGVyc190b19hZGQsICZiaXRfb2ZmLCAmbnVtX2JpdHMpOworCWlmIChyZXQgPCAwKSB7CisJCWlmIChyZXQgIT0gLUVOT1NQQykKKwkJCW1sb2dfZXJybm8ocmV0KTsKKwkJZ290byBsZWF2ZTsKKwl9CisKKwlCVUdfT04obnVtX2JpdHMgPiBjbHVzdGVyc190b19hZGQpOworCisJYmxvY2sgPSBvY2ZzMl9jbHVzdGVyc190b19ibG9ja3Mob3NiLT5zYiwgYml0X29mZik7CisJbWxvZygwLCAiQWxsb2NhdGluZyAldSBjbHVzdGVycyBhdCBibG9jayAldSBmb3IgeGF0dHIgaW4gaW5vZGUgJWxsdVxuIiwKKwkgICAgIG51bV9iaXRzLCBiaXRfb2ZmLCAodW5zaWduZWQgbG9uZyBsb25nKU9DRlMyX0koaW5vZGUpLT5pcF9ibGtubyk7CisKKwlpZiAocHJldl9ibGtubyArIHByZXZfY2x1c3RlcnMgKiBicGMgPT0gYmxvY2sgJiYKKwkgICAgKHByZXZfY2x1c3RlcnMgKyBudW1fYml0cykgPDwgb3NiLT5zX2NsdXN0ZXJzaXplX2JpdHMgPD0KKwkgICAgIE9DRlMyX01BWF9YQVRUUl9UUkVFX0xFQUZfU0laRSkgeworCQkvKgorCQkgKiBJZiB0aGlzIGNsdXN0ZXIgaXMgY29udGlndW91cyB3aXRoIHRoZSBvbGQgb25lIGFuZAorCQkgKiBhZGRpbmcgdGhpcyBuZXcgY2x1c3Rlciwgd2UgZG9uJ3Qgc3VycGFzcyB0aGUgbGltaXQgb2YKKwkJICogT0NGUzJfTUFYX1hBVFRSX1RSRUVfTEVBRl9TSVpFLCBjb29sLiBXZSB3aWxsIGxldCBpdCBiZQorCQkgKiBpbml0aWFsaXplZCBhbmQgdXNlZCBsaWtlIG90aGVyIGJ1Y2tldHMgaW4gdGhlIHByZXZpb3VzCisJCSAqIGNsdXN0ZXIuCisJCSAqIFNvIGFkZCBpdCBhcyBhIGNvbnRpZ3VvdXMgb25lLiBUaGUgY2FsbGVyIHdpbGwgaGFuZGxlCisJCSAqIGl0cyBpbml0IHByb2Nlc3MuCisJCSAqLworCQl2X3N0YXJ0ID0gcHJldl9jcG9zICsgcHJldl9jbHVzdGVyczsKKwkJKm51bV9jbHVzdGVycyA9IHByZXZfY2x1c3RlcnMgKyBudW1fYml0czsKKwkJbWxvZygwLCAiQWRkIGNvbnRpZ3VvdXMgJXUgY2x1c3RlcnMgdG8gcHJldmlvdXMgZXh0ZW50IHJlYy5cbiIsCisJCSAgICAgbnVtX2JpdHMpOworCX0gZWxzZSB7CisJCXJldCA9IG9jZnMyX2FkanVzdF94YXR0cl9jcm9zc19jbHVzdGVyKGlub2RlLAorCQkJCQkJICAgICAgIGhhbmRsZSwKKwkJCQkJCSAgICAgICBmaXJzdF9iaCwKKwkJCQkJCSAgICAgICBoZWFkZXJfYmgsCisJCQkJCQkgICAgICAgYmxvY2ssCisJCQkJCQkgICAgICAgcHJldl9ibGtubywKKwkJCQkJCSAgICAgICBwcmV2X2NsdXN0ZXJzLAorCQkJCQkJICAgICAgICZ2X3N0YXJ0LAorCQkJCQkJICAgICAgIGV4dGVuZCk7CisJCWlmIChyZXQpIHsKKwkJCW1sb2dfZXJybm8ocmV0KTsKKwkJCWdvdG8gbGVhdmU7CisJCX0KKwl9CisKKwlpZiAoaGFuZGxlLT5oX2J1ZmZlcl9jcmVkaXRzIDwgY3JlZGl0cykgeworCQkvKgorCQkgKiBUaGUgam91cm5hbCBoYXMgYmVlbiByZXN0YXJ0ZWQgYmVmb3JlLCBhbmQgZG9uJ3QKKwkJICogaGF2ZSBlbm91Z2ggc3BhY2UgZm9yIHRoZSBpbnNlcnRpb24sIHNvIGV4dGVuZCBpdAorCQkgKiBoZXJlLgorCQkgKi8KKwkJcmV0ID0gb2NmczJfZXh0ZW5kX3RyYW5zKGhhbmRsZSwgY3JlZGl0cyk7CisJCWlmIChyZXQpIHsKKwkJCW1sb2dfZXJybm8ocmV0KTsKKwkJCWdvdG8gbGVhdmU7CisJCX0KKwl9CisJbWxvZygwLCAiSW5zZXJ0ICV1IGNsdXN0ZXJzIGF0IGJsb2NrICVsbHUgZm9yIHhhdHRyIGF0ICV1XG4iLAorCSAgICAgbnVtX2JpdHMsIGJsb2NrLCB2X3N0YXJ0KTsKKwlyZXQgPSBvY2ZzMl9pbnNlcnRfZXh0ZW50KG9zYiwgaGFuZGxlLCBpbm9kZSwgJmV0LCB2X3N0YXJ0LCBibG9jaywKKwkJCQkgIG51bV9iaXRzLCAwLCBtZXRhX2FjKTsKKwlpZiAocmV0IDwgMCkgeworCQltbG9nX2Vycm5vKHJldCk7CisJCWdvdG8gbGVhdmU7CisJfQorCisJcmV0ID0gb2NmczJfam91cm5hbF9kaXJ0eShoYW5kbGUsIHJvb3RfYmgpOworCWlmIChyZXQgPCAwKSB7CisJCW1sb2dfZXJybm8ocmV0KTsKKwkJZ290byBsZWF2ZTsKKwl9CisKK2xlYXZlOgorCWlmIChoYW5kbGUpCisJCW9jZnMyX2NvbW1pdF90cmFucyhvc2IsIGhhbmRsZSk7CisJaWYgKGRhdGFfYWMpCisJCW9jZnMyX2ZyZWVfYWxsb2NfY29udGV4dChkYXRhX2FjKTsKKwlpZiAobWV0YV9hYykKKwkJb2NmczJfZnJlZV9hbGxvY19jb250ZXh0KG1ldGFfYWMpOworCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIEV4dGVuZCBhIG5ldyB4YXR0ciBidWNrZXQgYW5kIG1vdmUgeGF0dHJzIHRvIHRoZSBlbmQgb25lIGJ5IG9uZSB1bnRpbAorICogV2UgbWVldCB3aXRoIHN0YXJ0X2JoLiBPbmx5IG1vdmUgaGFsZiBvZiB0aGUgeGF0dHJzIHRvIHRoZSBidWNrZXQgYWZ0ZXIgaXQuCisgKi8KK3N0YXRpYyBpbnQgb2NmczJfZXh0ZW5kX3hhdHRyX2J1Y2tldChzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkJCSAgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpmaXJzdF9iaCwKKwkJCQkgICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqc3RhcnRfYmgsCisJCQkJICAgICB1MzIgbnVtX2NsdXN0ZXJzKQoreworCWludCByZXQsIGNyZWRpdHM7CisJc3RydWN0IG9jZnMyX3N1cGVyICpvc2IgPSBPQ0ZTMl9TQihpbm9kZS0+aV9zYik7CisJdTE2IGJsa19wZXJfYnVja2V0ID0gb2NmczJfYmxvY2tzX3Blcl94YXR0cl9idWNrZXQoaW5vZGUtPmlfc2IpOworCXU2NCBzdGFydF9ibGsgPSBzdGFydF9iaC0+Yl9ibG9ja25yLCBlbmRfYmxrOworCXUzMiBudW1fYnVja2V0cyA9IG51bV9jbHVzdGVycyAqIG9jZnMyX3hhdHRyX2J1Y2tldHNfcGVyX2NsdXN0ZXIob3NiKTsKKwloYW5kbGVfdCAqaGFuZGxlOworCXN0cnVjdCBvY2ZzMl94YXR0cl9oZWFkZXIgKmZpcnN0X3hoID0KKwkJCQkoc3RydWN0IG9jZnMyX3hhdHRyX2hlYWRlciAqKWZpcnN0X2JoLT5iX2RhdGE7CisJdTE2IGJ1Y2tldCA9IGxlMTZfdG9fY3B1KGZpcnN0X3hoLT54aF9udW1fYnVja2V0cyk7CisKKwltbG9nKDAsICJleHRlbmQgeGF0dHIgYnVja2V0IGluICVsbHUsIHhhdHRyIGV4dGVuZCByZWMgc3RhcnRpbmcgIgorCSAgICAgImZyb20gJWxsdSwgbGVuID0gJXVcbiIsIHN0YXJ0X2JsaywKKwkgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpZmlyc3RfYmgtPmJfYmxvY2tuciwgbnVtX2NsdXN0ZXJzKTsKKworCUJVR19PTihidWNrZXQgPj0gbnVtX2J1Y2tldHMpOworCisJZW5kX2JsayA9IGZpcnN0X2JoLT5iX2Jsb2NrbnIgKyAoYnVja2V0IC0gMSkgKiBibGtfcGVyX2J1Y2tldDsKKworCS8qCisJICogV2Ugd2lsbCB0b3VjaCBhbGwgdGhlIGJ1Y2tldHMgYWZ0ZXIgdGhlIHN0YXJ0X2JoKGluY2x1ZGUgaXQpLgorCSAqIEFkZCBvbmUgbW9yZSBidWNrZXQgYW5kIG1vZGlmeSB0aGUgZmlyc3RfYmguCisJICovCisJY3JlZGl0cyA9IGVuZF9ibGsgLSBzdGFydF9ibGsgKyAyICogYmxrX3Blcl9idWNrZXQgKyAxOworCWhhbmRsZSA9IG9jZnMyX3N0YXJ0X3RyYW5zKG9zYiwgY3JlZGl0cyk7CisJaWYgKElTX0VSUihoYW5kbGUpKSB7CisJCXJldCA9IFBUUl9FUlIoaGFuZGxlKTsKKwkJaGFuZGxlID0gTlVMTDsKKwkJbWxvZ19lcnJubyhyZXQpOworCQlnb3RvIG91dDsKKwl9CisKKwlyZXQgPSBvY2ZzMl9qb3VybmFsX2FjY2VzcyhoYW5kbGUsIGlub2RlLCBmaXJzdF9iaCwKKwkJCQkgICBPQ0ZTMl9KT1VSTkFMX0FDQ0VTU19XUklURSk7CisJaWYgKHJldCkgeworCQltbG9nX2Vycm5vKHJldCk7CisJCWdvdG8gY29tbWl0OworCX0KKworCXdoaWxlIChlbmRfYmxrICE9IHN0YXJ0X2JsaykgeworCQlyZXQgPSBvY2ZzMl9jcF94YXR0cl9idWNrZXQoaW5vZGUsIGhhbmRsZSwgZW5kX2JsaywKKwkJCQkJICAgIGVuZF9ibGsgKyBibGtfcGVyX2J1Y2tldCwgMCk7CisJCWlmIChyZXQpCisJCQlnb3RvIGNvbW1pdDsKKwkJZW5kX2JsayAtPSBibGtfcGVyX2J1Y2tldDsKKwl9CisKKwkvKiBNb3ZlIGhhbGYgb2YgdGhlIHhhdHRyIGluIHN0YXJ0X2JsayB0byB0aGUgbmV4dCBidWNrZXQuICovCisJcmV0ID0gb2NmczJfaGFsZl94YXR0cl9idWNrZXQoaW5vZGUsIGhhbmRsZSwgc3RhcnRfYmxrLAorCQkJCSAgICAgIHN0YXJ0X2JsayArIGJsa19wZXJfYnVja2V0LCBOVUxMLCAwKTsKKworCWxlMTZfYWRkX2NwdSgmZmlyc3RfeGgtPnhoX251bV9idWNrZXRzLCAxKTsKKwlvY2ZzMl9qb3VybmFsX2RpcnR5KGhhbmRsZSwgZmlyc3RfYmgpOworCitjb21taXQ6CisJb2NmczJfY29tbWl0X3RyYW5zKG9zYiwgaGFuZGxlKTsKK291dDoKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogQWRkIG5ldyB4YXR0ciBidWNrZXQgaW4gYW4gZXh0ZW50IHJlY29yZCBhbmQgYWRqdXN0IHRoZSBidWNrZXRzIGFjY29yZGluZ2x5LgorICogeGJfYmggaXMgdGhlIG9jZnMyX3hhdHRyX2Jsb2NrLgorICogV2Ugd2lsbCBtb3ZlIGFsbCB0aGUgYnVja2V0cyBzdGFydGluZyBmcm9tIGhlYWRlcl9iaCB0byB0aGUgbmV4dCBwbGFjZS4gQXMKKyAqIGZvciB0aGlzIG9uZSwgaGFsZiBudW0gb2YgaXRzIHhhdHRycyB3aWxsIGJlIG1vdmVkIHRvIHRoZSBuZXh0IG9uZS4KKyAqCisgKiBXZSB3aWxsIGFsbG9jYXRlIGEgbmV3IGNsdXN0ZXIgaWYgY3VycmVudCBjbHVzdGVyIGlzIGZ1bGwgYW5kIGFkanVzdAorICogaGVhZGVyX2JoIGFuZCBmaXJzdF9iaCBpZiB0aGUgaW5zZXJ0IHBsYWNlIGlzIG1vdmVkIHRvIHRoZSBuZXcgY2x1c3Rlci4KKyAqLworc3RhdGljIGludCBvY2ZzMl9hZGRfbmV3X3hhdHRyX2J1Y2tldChzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkJCSAgICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqeGJfYmgsCisJCQkJICAgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpoZWFkZXJfYmgpCit7CisJc3RydWN0IG9jZnMyX3hhdHRyX2hlYWRlciAqZmlyc3RfeGggPSBOVUxMOworCXN0cnVjdCBidWZmZXJfaGVhZCAqZmlyc3RfYmggPSBOVUxMOworCXN0cnVjdCBvY2ZzMl94YXR0cl9ibG9jayAqeGIgPQorCQkJKHN0cnVjdCBvY2ZzMl94YXR0cl9ibG9jayAqKXhiX2JoLT5iX2RhdGE7CisJc3RydWN0IG9jZnMyX3hhdHRyX3RyZWVfcm9vdCAqeGJfcm9vdCA9ICZ4Yi0+eGJfYXR0cnMueGJfcm9vdDsKKwlzdHJ1Y3Qgb2NmczJfZXh0ZW50X2xpc3QgKmVsID0gJnhiX3Jvb3QtPnh0X2xpc3Q7CisJc3RydWN0IG9jZnMyX3hhdHRyX2hlYWRlciAqeGggPQorCQkJKHN0cnVjdCBvY2ZzMl94YXR0cl9oZWFkZXIgKiloZWFkZXJfYmgtPmJfZGF0YTsKKwl1MzIgbmFtZV9oYXNoID0gbGUzMl90b19jcHUoeGgtPnhoX2VudHJpZXNbMF0ueGVfbmFtZV9oYXNoKTsKKwlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gaW5vZGUtPmlfc2I7CisJc3RydWN0IG9jZnMyX3N1cGVyICpvc2IgPSBPQ0ZTMl9TQihzYik7CisJaW50IHJldCwgbnVtX2J1Y2tldHMsIGV4dGVuZCA9IDE7CisJdTY0IHBfYmxrbm87CisJdTMyIGVfY3BvcywgbnVtX2NsdXN0ZXJzOworCisJbWxvZygwLCAiQWRkIG5ldyB4YXR0ciBidWNrZXQgc3RhcnRpbmcgZm9ybSAlbGx1XG4iLAorCSAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZyloZWFkZXJfYmgtPmJfYmxvY2tucik7CisKKwkvKgorCSAqIEFkZCByZWZyZW5jZSBmb3IgaGVhZGVyX2JoIGhlcmUgYmVjYXVzZSBpdCBtYXkgYmUKKwkgKiBjaGFuZ2VkIGluIG9jZnMyX2FkZF9uZXdfeGF0dHJfY2x1c3RlciBhbmQgd2UgbmVlZAorCSAqIHRvIGZyZWUgaXQgaW4gdGhlIGVuZC4KKwkgKi8KKwlnZXRfYmgoaGVhZGVyX2JoKTsKKworCXJldCA9IG9jZnMyX3hhdHRyX2dldF9yZWMoaW5vZGUsIG5hbWVfaGFzaCwgJnBfYmxrbm8sICZlX2Nwb3MsCisJCQkJICAmbnVtX2NsdXN0ZXJzLCBlbCk7CisJaWYgKHJldCkgeworCQltbG9nX2Vycm5vKHJldCk7CisJCWdvdG8gb3V0OworCX0KKworCXJldCA9IG9jZnMyX3JlYWRfYmxvY2soaW5vZGUsIHBfYmxrbm8sICZmaXJzdF9iaCk7CisJaWYgKHJldCkgeworCQltbG9nX2Vycm5vKHJldCk7CisJCWdvdG8gb3V0OworCX0KKworCW51bV9idWNrZXRzID0gb2NmczJfeGF0dHJfYnVja2V0c19wZXJfY2x1c3Rlcihvc2IpICogbnVtX2NsdXN0ZXJzOworCWZpcnN0X3hoID0gKHN0cnVjdCBvY2ZzMl94YXR0cl9oZWFkZXIgKilmaXJzdF9iaC0+Yl9kYXRhOworCisJaWYgKG51bV9idWNrZXRzID09IGxlMTZfdG9fY3B1KGZpcnN0X3hoLT54aF9udW1fYnVja2V0cykpIHsKKwkJcmV0ID0gb2NmczJfYWRkX25ld194YXR0cl9jbHVzdGVyKGlub2RlLAorCQkJCQkJICB4Yl9iaCwKKwkJCQkJCSAgJmZpcnN0X2JoLAorCQkJCQkJICAmaGVhZGVyX2JoLAorCQkJCQkJICAmbnVtX2NsdXN0ZXJzLAorCQkJCQkJICBlX2Nwb3MsCisJCQkJCQkgIHBfYmxrbm8sCisJCQkJCQkgICZleHRlbmQpOworCQlpZiAocmV0KSB7CisJCQltbG9nX2Vycm5vKHJldCk7CisJCQlnb3RvIG91dDsKKwkJfQorCX0KKworCWlmIChleHRlbmQpCisJCXJldCA9IG9jZnMyX2V4dGVuZF94YXR0cl9idWNrZXQoaW5vZGUsCisJCQkJCQlmaXJzdF9iaCwKKwkJCQkJCWhlYWRlcl9iaCwKKwkJCQkJCW51bV9jbHVzdGVycyk7CisJaWYgKHJldCkKKwkJbWxvZ19lcnJubyhyZXQpOworb3V0OgorCWJyZWxzZShmaXJzdF9iaCk7CisJYnJlbHNlKGhlYWRlcl9iaCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGlubGluZSBjaGFyICpvY2ZzMl94YXR0cl9idWNrZXRfZ2V0X3ZhbChzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkJCQlzdHJ1Y3Qgb2NmczJfeGF0dHJfYnVja2V0ICpidWNrZXQsCisJCQkJCWludCBvZmZzKQoreworCWludCBibG9ja19vZmYgPSBvZmZzID4+IGlub2RlLT5pX3NiLT5zX2Jsb2Nrc2l6ZV9iaXRzOworCisJb2ZmcyA9IG9mZnMgJSBpbm9kZS0+aV9zYi0+c19ibG9ja3NpemU7CisJcmV0dXJuIGJ1Y2tldC0+YmhzW2Jsb2NrX29mZl0tPmJfZGF0YSArIG9mZnM7Cit9CisKKy8qCisgKiBIYW5kbGUgdGhlIG5vcm1hbCB4YXR0ciBzZXQsIGluY2x1ZGluZyByZXBsYWNlLCBkZWxldGUgYW5kIG5ldy4KKyAqCisgKiBOb3RlOiAibG9jYWwiIGluZGljYXRlcyB0aGUgcmVhbCBkYXRhJ3MgbG9jYWxpdHkuIFNvIHdlIGNhbid0CisgKiBqdXN0IGl0cyBidWNrZXQgbG9jYWxpdHkgYnkgaXRzIGxlbmd0aC4KKyAqLworc3RhdGljIHZvaWQgb2NmczJfeGF0dHJfc2V0X2VudHJ5X25vcm1hbChzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkJCQkgc3RydWN0IG9jZnMyX3hhdHRyX2luZm8gKnhpLAorCQkJCQkgc3RydWN0IG9jZnMyX3hhdHRyX3NlYXJjaCAqeHMsCisJCQkJCSB1MzIgbmFtZV9oYXNoLAorCQkJCQkgaW50IGxvY2FsKQoreworCXN0cnVjdCBvY2ZzMl94YXR0cl9lbnRyeSAqbGFzdCwgKnhlOworCWludCBuYW1lX2xlbiA9IHN0cmxlbih4aS0+bmFtZSk7CisJc3RydWN0IG9jZnMyX3hhdHRyX2hlYWRlciAqeGggPSB4cy0+aGVhZGVyOworCXUxNiBjb3VudCA9IGxlMTZfdG9fY3B1KHhoLT54aF9jb3VudCksIHN0YXJ0OworCXNpemVfdCBibG9ja3NpemUgPSBpbm9kZS0+aV9zYi0+c19ibG9ja3NpemU7CisJY2hhciAqdmFsOworCXNpemVfdCBvZmZzLCBzaXplLCBuZXdfc2l6ZTsKKworCWxhc3QgPSAmeGgtPnhoX2VudHJpZXNbY291bnRdOworCWlmICgheHMtPm5vdF9mb3VuZCkgeworCQl4ZSA9IHhzLT5oZXJlOworCQlvZmZzID0gbGUxNl90b19jcHUoeGUtPnhlX25hbWVfb2Zmc2V0KTsKKwkJaWYgKG9jZnMyX3hhdHRyX2lzX2xvY2FsKHhlKSkKKwkJCXNpemUgPSBPQ0ZTMl9YQVRUUl9TSVpFKG5hbWVfbGVuKSArCisJCQlPQ0ZTMl9YQVRUUl9TSVpFKGxlNjRfdG9fY3B1KHhlLT54ZV92YWx1ZV9zaXplKSk7CisJCWVsc2UKKwkJCXNpemUgPSBPQ0ZTMl9YQVRUUl9TSVpFKG5hbWVfbGVuKSArCisJCQlPQ0ZTMl9YQVRUUl9TSVpFKE9DRlMyX1hBVFRSX1JPT1RfU0laRSk7CisKKwkJLyoKKwkJICogSWYgdGhlIG5ldyB2YWx1ZSB3aWxsIGJlIHN0b3JlZCBvdXRzaWRlLCB4aS0+dmFsdWUgaGFzIGJlZW4KKwkJICogaW5pdGFsaXplZCBhcyBhbiBlbXB0eSBvY2ZzMl94YXR0cl92YWx1ZV9yb290LCBhbmQgdGhlIHNhbWUKKwkJICogZ29lcyB3aXRoIHhpLT52YWx1ZV9sZW4sIHNvIHdlIGNhbiBzZXQgbmV3X3NpemUgc2FmZWx5IGhlcmUuCisJCSAqIFNlZSBvY2ZzMl94YXR0cl9zZXRfaW5fYnVja2V0LgorCQkgKi8KKwkJbmV3X3NpemUgPSBPQ0ZTMl9YQVRUUl9TSVpFKG5hbWVfbGVuKSArCisJCQkgICBPQ0ZTMl9YQVRUUl9TSVpFKHhpLT52YWx1ZV9sZW4pOworCisJCWxlMTZfYWRkX2NwdSgmeGgtPnhoX25hbWVfdmFsdWVfbGVuLCAtc2l6ZSk7CisJCWlmICh4aS0+dmFsdWUpIHsKKwkJCWlmIChuZXdfc2l6ZSA+IHNpemUpCisJCQkJZ290byBzZXRfbmV3X25hbWVfdmFsdWU7CisKKwkJCS8qIE5vdyByZXBsYWNlIHRoZSBvbGQgdmFsdWUgd2l0aCBuZXcgb25lLiAqLworCQkJaWYgKGxvY2FsKQorCQkJCXhlLT54ZV92YWx1ZV9zaXplID0gY3B1X3RvX2xlNjQoeGktPnZhbHVlX2xlbik7CisJCQllbHNlCisJCQkJeGUtPnhlX3ZhbHVlX3NpemUgPSAwOworCisJCQl2YWwgPSBvY2ZzMl94YXR0cl9idWNrZXRfZ2V0X3ZhbChpbm9kZSwKKwkJCQkJCQkgJnhzLT5idWNrZXQsIG9mZnMpOworCQkJbWVtc2V0KHZhbCArIE9DRlMyX1hBVFRSX1NJWkUobmFtZV9sZW4pLCAwLAorCQkJICAgICAgIHNpemUgLSBPQ0ZTMl9YQVRUUl9TSVpFKG5hbWVfbGVuKSk7CisJCQlpZiAoT0NGUzJfWEFUVFJfU0laRSh4aS0+dmFsdWVfbGVuKSA+IDApCisJCQkJbWVtY3B5KHZhbCArIE9DRlMyX1hBVFRSX1NJWkUobmFtZV9sZW4pLAorCQkJCSAgICAgICB4aS0+dmFsdWUsIHhpLT52YWx1ZV9sZW4pOworCisJCQlsZTE2X2FkZF9jcHUoJnhoLT54aF9uYW1lX3ZhbHVlX2xlbiwgbmV3X3NpemUpOworCQkJb2NmczJfeGF0dHJfc2V0X2xvY2FsKHhlLCBsb2NhbCk7CisJCQlyZXR1cm47CisJCX0gZWxzZSB7CisJCQkvKgorCQkJICogUmVtb3ZlIHRoZSBvbGQgZW50cnkgaWYgdGhlcmUgaXMgbW9yZSB0aGFuIG9uZS4KKwkJCSAqIFdlIGRvbid0IHJlbW92ZSB0aGUgbGFzdCBlbnRyeSBzbyB0aGF0IHdlIGNhbgorCQkJICogdXNlIGl0IHRvIGluZGljYXRlIHRoZSBoYXNoIHZhbHVlIG9mIHRoZSBlbXB0eQorCQkJICogYnVja2V0LgorCQkJICovCisJCQlsYXN0IC09IDE7CisJCQlsZTE2X2FkZF9jcHUoJnhoLT54aF9jb3VudCwgLTEpOworCQkJaWYgKHhoLT54aF9jb3VudCkgeworCQkJCW1lbW1vdmUoeGUsIHhlICsgMSwKKwkJCQkJKHZvaWQgKilsYXN0IC0gKHZvaWQgKil4ZSk7CisJCQkJbWVtc2V0KGxhc3QsIDAsCisJCQkJICAgICAgIHNpemVvZihzdHJ1Y3Qgb2NmczJfeGF0dHJfZW50cnkpKTsKKwkJCX0gZWxzZQorCQkJCXhoLT54aF9mcmVlX3N0YXJ0ID0KKwkJCQkJY3B1X3RvX2xlMTYoT0NGUzJfWEFUVFJfQlVDS0VUX1NJWkUpOworCisJCQlyZXR1cm47CisJCX0KKwl9IGVsc2UgeworCQkvKiBmaW5kIGEgbmV3IGVudHJ5IGZvciBpbnNlcnQuICovCisJCWludCBsb3cgPSAwLCBoaWdoID0gY291bnQgLSAxLCB0bXA7CisJCXN0cnVjdCBvY2ZzMl94YXR0cl9lbnRyeSAqdG1wX3hlOworCisJCXdoaWxlIChsb3cgPD0gaGlnaCAmJiBjb3VudCkgeworCQkJdG1wID0gKGxvdyArIGhpZ2gpIC8gMjsKKwkJCXRtcF94ZSA9ICZ4aC0+eGhfZW50cmllc1t0bXBdOworCisJCQlpZiAobmFtZV9oYXNoID4gbGUzMl90b19jcHUodG1wX3hlLT54ZV9uYW1lX2hhc2gpKQorCQkJCWxvdyA9IHRtcCArIDE7CisJCQllbHNlIGlmIChuYW1lX2hhc2ggPAorCQkJCSBsZTMyX3RvX2NwdSh0bXBfeGUtPnhlX25hbWVfaGFzaCkpCisJCQkJaGlnaCA9IHRtcCAtIDE7CisJCQllbHNlIHsKKwkJCQlsb3cgPSB0bXA7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKworCQl4ZSA9ICZ4aC0+eGhfZW50cmllc1tsb3ddOworCQlpZiAobG93ICE9IGNvdW50KQorCQkJbWVtbW92ZSh4ZSArIDEsIHhlLCAodm9pZCAqKWxhc3QgLSAodm9pZCAqKXhlKTsKKworCQlsZTE2X2FkZF9jcHUoJnhoLT54aF9jb3VudCwgMSk7CisJCW1lbXNldCh4ZSwgMCwgc2l6ZW9mKHN0cnVjdCBvY2ZzMl94YXR0cl9lbnRyeSkpOworCQl4ZS0+eGVfbmFtZV9oYXNoID0gY3B1X3RvX2xlMzIobmFtZV9oYXNoKTsKKwkJeGUtPnhlX25hbWVfbGVuID0gbmFtZV9sZW47CisJCW9jZnMyX3hhdHRyX3NldF90eXBlKHhlLCB4aS0+bmFtZV9pbmRleCk7CisJfQorCitzZXRfbmV3X25hbWVfdmFsdWU6CisJLyogSW5zZXJ0IHRoZSBuZXcgbmFtZSt2YWx1ZS4gKi8KKwlzaXplID0gT0NGUzJfWEFUVFJfU0laRShuYW1lX2xlbikgKyBPQ0ZTMl9YQVRUUl9TSVpFKHhpLT52YWx1ZV9sZW4pOworCisJLyoKKwkgKiBXZSBtdXN0IG1ha2Ugc3VyZSB0aGF0IHRoZSBuYW1lL3ZhbHVlIHBhaXIKKwkgKiBleGlzdHMgaW4gdGhlIHNhbWUgYmxvY2suCisJICovCisJb2ZmcyA9IGxlMTZfdG9fY3B1KHhoLT54aF9mcmVlX3N0YXJ0KTsKKwlzdGFydCA9IG9mZnMgLSBzaXplOworCisJaWYgKHN0YXJ0ID4+IGlub2RlLT5pX3NiLT5zX2Jsb2Nrc2l6ZV9iaXRzICE9CisJICAgIChvZmZzIC0gMSkgPj4gaW5vZGUtPmlfc2ItPnNfYmxvY2tzaXplX2JpdHMpIHsKKwkJb2ZmcyA9IG9mZnMgLSBvZmZzICUgYmxvY2tzaXplOworCQl4aC0+eGhfZnJlZV9zdGFydCA9IGNwdV90b19sZTE2KG9mZnMpOworCX0KKworCXZhbCA9IG9jZnMyX3hhdHRyX2J1Y2tldF9nZXRfdmFsKGlub2RlLAorCQkJCQkgJnhzLT5idWNrZXQsIG9mZnMgLSBzaXplKTsKKwl4ZS0+eGVfbmFtZV9vZmZzZXQgPSBjcHVfdG9fbGUxNihvZmZzIC0gc2l6ZSk7CisKKwltZW1zZXQodmFsLCAwLCBzaXplKTsKKwltZW1jcHkodmFsLCB4aS0+bmFtZSwgbmFtZV9sZW4pOworCW1lbWNweSh2YWwgKyBPQ0ZTMl9YQVRUUl9TSVpFKG5hbWVfbGVuKSwgeGktPnZhbHVlLCB4aS0+dmFsdWVfbGVuKTsKKworCXhlLT54ZV92YWx1ZV9zaXplID0gY3B1X3RvX2xlNjQoeGktPnZhbHVlX2xlbik7CisJb2NmczJfeGF0dHJfc2V0X2xvY2FsKHhlLCBsb2NhbCk7CisJeHMtPmhlcmUgPSB4ZTsKKwlsZTE2X2FkZF9jcHUoJnhoLT54aF9mcmVlX3N0YXJ0LCAtc2l6ZSk7CisJbGUxNl9hZGRfY3B1KCZ4aC0+eGhfbmFtZV92YWx1ZV9sZW4sIHNpemUpOworCisJcmV0dXJuOworfQorCitzdGF0aWMgaW50IG9jZnMyX3hhdHRyX2J1Y2tldF9oYW5kbGVfam91cm5hbChzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkJCQkgICAgIGhhbmRsZV90ICpoYW5kbGUsCisJCQkJCSAgICAgc3RydWN0IG9jZnMyX3hhdHRyX3NlYXJjaCAqeHMsCisJCQkJCSAgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICoqYmhzLAorCQkJCQkgICAgIHUxNiBiaF9udW0pCit7CisJaW50IHJldCA9IDAsIG9mZiwgYmxvY2tfb2ZmOworCXN0cnVjdCBvY2ZzMl94YXR0cl9lbnRyeSAqeGUgPSB4cy0+aGVyZTsKKworCS8qCisJICogRmlyc3QgY2FsY3VsYXRlIGFsbCB0aGUgYmxvY2tzIHdlIHNob3VsZCBqb3VybmFsX2FjY2VzcworCSAqIGFuZCBqb3VybmFsX2RpcnR5LiBUaGUgZmlyc3QgYmxvY2sgc2hvdWxkIGFsd2F5cyBiZSB0b3VjaGVkLgorCSAqLworCXJldCA9IG9jZnMyX2pvdXJuYWxfZGlydHkoaGFuZGxlLCBiaHNbMF0pOworCWlmIChyZXQpCisJCW1sb2dfZXJybm8ocmV0KTsKKworCS8qIGNhbGMgdGhlIGRhdGEuICovCisJb2ZmID0gbGUxNl90b19jcHUoeGUtPnhlX25hbWVfb2Zmc2V0KTsKKwlibG9ja19vZmYgPSBvZmYgPj4gaW5vZGUtPmlfc2ItPnNfYmxvY2tzaXplX2JpdHM7CisJcmV0ID0gb2NmczJfam91cm5hbF9kaXJ0eShoYW5kbGUsIGJoc1tibG9ja19vZmZdKTsKKwlpZiAocmV0KQorCQltbG9nX2Vycm5vKHJldCk7CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogU2V0IHRoZSB4YXR0ciBlbnRyeSBpbiB0aGUgc3BlY2lmaWVkIGJ1Y2tldC4KKyAqIFRoZSBidWNrZXQgaXMgaW5kaWNhdGVkIGJ5IHhzLT5idWNrZXQgYW5kIGl0IHNob3VsZCBoYXZlIHRoZSBlbm91Z2gKKyAqIHNwYWNlIGZvciB0aGUgeGF0dHIgaW5zZXJ0aW9uLgorICovCitzdGF0aWMgaW50IG9jZnMyX3hhdHRyX3NldF9lbnRyeV9pbl9idWNrZXQoc3RydWN0IGlub2RlICppbm9kZSwKKwkJCQkJICAgc3RydWN0IG9jZnMyX3hhdHRyX2luZm8gKnhpLAorCQkJCQkgICBzdHJ1Y3Qgb2NmczJfeGF0dHJfc2VhcmNoICp4cywKKwkJCQkJICAgdTMyIG5hbWVfaGFzaCwKKwkJCQkJICAgaW50IGxvY2FsKQoreworCWludCBpLCByZXQ7CisJaGFuZGxlX3QgKmhhbmRsZSA9IE5VTEw7CisJdTE2IGJsa19wZXJfYnVja2V0ID0gb2NmczJfYmxvY2tzX3Blcl94YXR0cl9idWNrZXQoaW5vZGUtPmlfc2IpOworCXN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiID0gT0NGUzJfU0IoaW5vZGUtPmlfc2IpOworCisJbWxvZygwLCAiU2V0IHhhdHRyIGVudHJ5IGxlbiA9ICVsdSBpbmRleCA9ICVkIGluIGJ1Y2tldCAlbGx1XG4iLAorCSAgICAgKHVuc2lnbmVkIGxvbmcpeGktPnZhbHVlX2xlbiwgeGktPm5hbWVfaW5kZXgsCisJICAgICAodW5zaWduZWQgbG9uZyBsb25nKXhzLT5idWNrZXQuYmhzWzBdLT5iX2Jsb2NrbnIpOworCisJaWYgKCF4cy0+YnVja2V0LmJoc1sxXSkgeworCQlyZXQgPSBvY2ZzMl9yZWFkX2Jsb2Nrcyhpbm9kZSwKKwkJCQkJeHMtPmJ1Y2tldC5iaHNbMF0tPmJfYmxvY2tuciArIDEsCisJCQkJCWJsa19wZXJfYnVja2V0IC0gMSwgJnhzLT5idWNrZXQuYmhzWzFdLAorCQkJCQkwKTsKKwkJaWYgKHJldCkgeworCQkJbWxvZ19lcnJubyhyZXQpOworCQkJZ290byBvdXQ7CisJCX0KKwl9CisKKwloYW5kbGUgPSBvY2ZzMl9zdGFydF90cmFucyhvc2IsIGJsa19wZXJfYnVja2V0KTsKKwlpZiAoSVNfRVJSKGhhbmRsZSkpIHsKKwkJcmV0ID0gUFRSX0VSUihoYW5kbGUpOworCQloYW5kbGUgPSBOVUxMOworCQltbG9nX2Vycm5vKHJldCk7CisJCWdvdG8gb3V0OworCX0KKworCWZvciAoaSA9IDA7IGkgPCBibGtfcGVyX2J1Y2tldDsgaSsrKSB7CisJCXJldCA9IG9jZnMyX2pvdXJuYWxfYWNjZXNzKGhhbmRsZSwgaW5vZGUsIHhzLT5idWNrZXQuYmhzW2ldLAorCQkJCQkgICBPQ0ZTMl9KT1VSTkFMX0FDQ0VTU19XUklURSk7CisJCWlmIChyZXQgPCAwKSB7CisJCQltbG9nX2Vycm5vKHJldCk7CisJCQlnb3RvIG91dDsKKwkJfQorCX0KKworCW9jZnMyX3hhdHRyX3NldF9lbnRyeV9ub3JtYWwoaW5vZGUsIHhpLCB4cywgbmFtZV9oYXNoLCBsb2NhbCk7CisKKwkvKk9ubHkgZGlydHkgdGhlIGJsb2NrcyB3ZSBoYXZlIHRvdWNoZWQgaW4gc2V0IHhhdHRyLiAqLworCXJldCA9IG9jZnMyX3hhdHRyX2J1Y2tldF9oYW5kbGVfam91cm5hbChpbm9kZSwgaGFuZGxlLCB4cywKKwkJCQkJCXhzLT5idWNrZXQuYmhzLCBibGtfcGVyX2J1Y2tldCk7CisJaWYgKHJldCkKKwkJbWxvZ19lcnJubyhyZXQpOworb3V0OgorCW9jZnMyX2NvbW1pdF90cmFucyhvc2IsIGhhbmRsZSk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IG9jZnMyX3hhdHRyX3ZhbHVlX3VwZGF0ZV9zaXplKHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCQkJCSBzdHJ1Y3QgYnVmZmVyX2hlYWQgKnhlX2JoLAorCQkJCQkgc3RydWN0IG9jZnMyX3hhdHRyX2VudHJ5ICp4ZSwKKwkJCQkJIHU2NCBuZXdfc2l6ZSkKK3sKKwlpbnQgcmV0OworCXN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiID0gT0NGUzJfU0IoaW5vZGUtPmlfc2IpOworCWhhbmRsZV90ICpoYW5kbGUgPSBOVUxMOworCisJaGFuZGxlID0gb2NmczJfc3RhcnRfdHJhbnMob3NiLCAxKTsKKwlpZiAoaGFuZGxlID09IE5VTEwpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJbWxvZ19lcnJubyhyZXQpOworCQlnb3RvIG91dDsKKwl9CisKKwlyZXQgPSBvY2ZzMl9qb3VybmFsX2FjY2VzcyhoYW5kbGUsIGlub2RlLCB4ZV9iaCwKKwkJCQkgICBPQ0ZTMl9KT1VSTkFMX0FDQ0VTU19XUklURSk7CisJaWYgKHJldCA8IDApIHsKKwkJbWxvZ19lcnJubyhyZXQpOworCQlnb3RvIG91dF9jb21taXQ7CisJfQorCisJeGUtPnhlX3ZhbHVlX3NpemUgPSBjcHVfdG9fbGU2NChuZXdfc2l6ZSk7CisKKwlyZXQgPSBvY2ZzMl9qb3VybmFsX2RpcnR5KGhhbmRsZSwgeGVfYmgpOworCWlmIChyZXQgPCAwKQorCQltbG9nX2Vycm5vKHJldCk7CisKK291dF9jb21taXQ6CisJb2NmczJfY29tbWl0X3RyYW5zKG9zYiwgaGFuZGxlKTsKK291dDoKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogVHJ1bmNhdGUgdGhlIHNwZWNpZmllZCB4ZV9vZmYgZW50cnkgaW4geGF0dHIgYnVja2V0LgorICogYnVja2V0IGlzIGluZGljYXRlZCBieSBoZWFkZXJfYmggYW5kIGxlbiBpcyB0aGUgbmV3IGxlbmd0aC4KKyAqIEJvdGggdGhlIG9jZnMyX3hhdHRyX3ZhbHVlX3Jvb3QgYW5kIHRoZSBlbnRyeSB3aWxsIGJlIHVwZGF0ZWQgaGVyZS4KKyAqCisgKiBDb3B5IHRoZSBuZXcgdXBkYXRlZCB4ZSBhbmQgeGVfdmFsdWVfcm9vdCB0byBuZXdfeGUgYW5kIG5ld194diBpZiBuZWVkZWQuCisgKi8KK3N0YXRpYyBpbnQgb2NmczJfeGF0dHJfYnVja2V0X3ZhbHVlX3RydW5jYXRlKHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCQkJCSAgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpoZWFkZXJfYmgsCisJCQkJCSAgICAgaW50IHhlX29mZiwKKwkJCQkJICAgICBpbnQgbGVuKQoreworCWludCByZXQsIG9mZnNldDsKKwl1NjQgdmFsdWVfYmxrOworCXN0cnVjdCBidWZmZXJfaGVhZCAqdmFsdWVfYmggPSBOVUxMOworCXN0cnVjdCBvY2ZzMl94YXR0cl92YWx1ZV9yb290ICp4djsKKwlzdHJ1Y3Qgb2NmczJfeGF0dHJfZW50cnkgKnhlOworCXN0cnVjdCBvY2ZzMl94YXR0cl9oZWFkZXIgKnhoID0KKwkJCShzdHJ1Y3Qgb2NmczJfeGF0dHJfaGVhZGVyICopaGVhZGVyX2JoLT5iX2RhdGE7CisJc2l6ZV90IGJsb2Nrc2l6ZSA9IGlub2RlLT5pX3NiLT5zX2Jsb2Nrc2l6ZTsKKworCXhlID0gJnhoLT54aF9lbnRyaWVzW3hlX29mZl07CisKKwlCVUdfT04oIXhlIHx8IG9jZnMyX3hhdHRyX2lzX2xvY2FsKHhlKSk7CisKKwlvZmZzZXQgPSBsZTE2X3RvX2NwdSh4ZS0+eGVfbmFtZV9vZmZzZXQpICsKKwkJIE9DRlMyX1hBVFRSX1NJWkUoeGUtPnhlX25hbWVfbGVuKTsKKworCXZhbHVlX2JsayA9IG9mZnNldCAvIGJsb2Nrc2l6ZTsKKworCS8qIFdlIGRvbid0IGFsbG93IG9jZnMyX3hhdHRyX3ZhbHVlIHRvIGJlIHN0b3JlZCBpbiBkaWZmZXJlbnQgYmxvY2suICovCisJQlVHX09OKHZhbHVlX2JsayAhPSAob2Zmc2V0ICsgT0NGUzJfWEFUVFJfUk9PVF9TSVpFIC0gMSkgLyBibG9ja3NpemUpOworCXZhbHVlX2JsayArPSBoZWFkZXJfYmgtPmJfYmxvY2tucjsKKworCXJldCA9IG9jZnMyX3JlYWRfYmxvY2soaW5vZGUsIHZhbHVlX2JsaywgJnZhbHVlX2JoKTsKKwlpZiAocmV0KSB7CisJCW1sb2dfZXJybm8ocmV0KTsKKwkJZ290byBvdXQ7CisJfQorCisJeHYgPSAoc3RydWN0IG9jZnMyX3hhdHRyX3ZhbHVlX3Jvb3QgKikKKwkJKHZhbHVlX2JoLT5iX2RhdGEgKyBvZmZzZXQgJSBibG9ja3NpemUpOworCisJbWxvZygwLCAidHJ1bmNhdGUgJXUgaW4geGF0dHIgYnVja2V0ICVsbHUgdG8gJWQgYnl0ZXMuXG4iLAorCSAgICAgeGVfb2ZmLCAodW5zaWduZWQgbG9uZyBsb25nKWhlYWRlcl9iaC0+Yl9ibG9ja25yLCBsZW4pOworCXJldCA9IG9jZnMyX3hhdHRyX3ZhbHVlX3RydW5jYXRlKGlub2RlLCB2YWx1ZV9iaCwgeHYsIGxlbik7CisJaWYgKHJldCkgeworCQltbG9nX2Vycm5vKHJldCk7CisJCWdvdG8gb3V0OworCX0KKworCXJldCA9IG9jZnMyX3hhdHRyX3ZhbHVlX3VwZGF0ZV9zaXplKGlub2RlLCBoZWFkZXJfYmgsIHhlLCBsZW4pOworCWlmIChyZXQpIHsKKwkJbWxvZ19lcnJubyhyZXQpOworCQlnb3RvIG91dDsKKwl9CisKK291dDoKKwlicmVsc2UodmFsdWVfYmgpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgb2NmczJfeGF0dHJfYnVja2V0X3ZhbHVlX3RydW5jYXRlX3hzKHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCQkJCQlzdHJ1Y3Qgb2NmczJfeGF0dHJfc2VhcmNoICp4cywKKwkJCQkJCWludCBsZW4pCit7CisJaW50IHJldCwgb2Zmc2V0OworCXN0cnVjdCBvY2ZzMl94YXR0cl9lbnRyeSAqeGUgPSB4cy0+aGVyZTsKKwlzdHJ1Y3Qgb2NmczJfeGF0dHJfaGVhZGVyICp4aCA9IChzdHJ1Y3Qgb2NmczJfeGF0dHJfaGVhZGVyICopeHMtPmJhc2U7CisKKwlCVUdfT04oIXhzLT5idWNrZXQuYmhzWzBdIHx8ICF4ZSB8fCBvY2ZzMl94YXR0cl9pc19sb2NhbCh4ZSkpOworCisJb2Zmc2V0ID0geGUgLSB4aC0+eGhfZW50cmllczsKKwlyZXQgPSBvY2ZzMl94YXR0cl9idWNrZXRfdmFsdWVfdHJ1bmNhdGUoaW5vZGUsIHhzLT5idWNrZXQuYmhzWzBdLAorCQkJCQkJb2Zmc2V0LCBsZW4pOworCWlmIChyZXQpCisJCW1sb2dfZXJybm8ocmV0KTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgb2NmczJfeGF0dHJfYnVja2V0X3NldF92YWx1ZV9vdXRzaWRlKHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCQkJCQlzdHJ1Y3Qgb2NmczJfeGF0dHJfc2VhcmNoICp4cywKKwkJCQkJCWNoYXIgKnZhbCwKKwkJCQkJCWludCB2YWx1ZV9sZW4pCit7CisJaW50IG9mZnNldDsKKwlzdHJ1Y3Qgb2NmczJfeGF0dHJfdmFsdWVfcm9vdCAqeHY7CisJc3RydWN0IG9jZnMyX3hhdHRyX2VudHJ5ICp4ZSA9IHhzLT5oZXJlOworCisJQlVHX09OKCF4cy0+YmFzZSB8fCAheGUgfHwgb2NmczJfeGF0dHJfaXNfbG9jYWwoeGUpKTsKKworCW9mZnNldCA9IGxlMTZfdG9fY3B1KHhlLT54ZV9uYW1lX29mZnNldCkgKworCQkgT0NGUzJfWEFUVFJfU0laRSh4ZS0+eGVfbmFtZV9sZW4pOworCisJeHYgPSAoc3RydWN0IG9jZnMyX3hhdHRyX3ZhbHVlX3Jvb3QgKikoeHMtPmJhc2UgKyBvZmZzZXQpOworCisJcmV0dXJuIF9fb2NmczJfeGF0dHJfc2V0X3ZhbHVlX291dHNpZGUoaW5vZGUsIHh2LCB2YWwsIHZhbHVlX2xlbik7Cit9CisKK3N0YXRpYyBpbnQgb2NmczJfcm1feGF0dHJfY2x1c3RlcihzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkJCSAgc3RydWN0IGJ1ZmZlcl9oZWFkICpyb290X2JoLAorCQkJCSAgdTY0IGJsa25vLAorCQkJCSAgdTMyIGNwb3MsCisJCQkJICB1MzIgbGVuKQoreworCWludCByZXQ7CisJc3RydWN0IG9jZnMyX3N1cGVyICpvc2IgPSBPQ0ZTMl9TQihpbm9kZS0+aV9zYik7CisJc3RydWN0IGlub2RlICp0bF9pbm9kZSA9IG9zYi0+b3NiX3RsX2lub2RlOworCWhhbmRsZV90ICpoYW5kbGU7CisJc3RydWN0IG9jZnMyX3hhdHRyX2Jsb2NrICp4YiA9CisJCQkoc3RydWN0IG9jZnMyX3hhdHRyX2Jsb2NrICopcm9vdF9iaC0+Yl9kYXRhOworCXN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICptZXRhX2FjID0gTlVMTDsKKwlzdHJ1Y3Qgb2NmczJfY2FjaGVkX2RlYWxsb2NfY3R4dCBkZWFsbG9jOworCXN0cnVjdCBvY2ZzMl9leHRlbnRfdHJlZSBldDsKKworCW9jZnMyX2luaXRfeGF0dHJfdHJlZV9leHRlbnRfdHJlZSgmZXQsIGlub2RlLCByb290X2JoKTsKKworCW9jZnMyX2luaXRfZGVhbGxvY19jdHh0KCZkZWFsbG9jKTsKKworCW1sb2coMCwgInJtIHhhdHRyIGV4dGVudCByZWMgYXQgJXUgbGVuID0gJXUsIHN0YXJ0IGZyb20gJWxsdVxuIiwKKwkgICAgIGNwb3MsIGxlbiwgKHVuc2lnbmVkIGxvbmcgbG9uZylibGtubyk7CisKKwlvY2ZzMl9yZW1vdmVfeGF0dHJfY2x1c3RlcnNfZnJvbV9jYWNoZShpbm9kZSwgYmxrbm8sIGxlbik7CisKKwlyZXQgPSBvY2ZzMl9sb2NrX2FsbG9jYXRvcnMoaW5vZGUsICZldCwgMCwgMSwgTlVMTCwgJm1ldGFfYWMpOworCWlmIChyZXQpIHsKKwkJbWxvZ19lcnJubyhyZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCW11dGV4X2xvY2soJnRsX2lub2RlLT5pX211dGV4KTsKKworCWlmIChvY2ZzMl90cnVuY2F0ZV9sb2dfbmVlZHNfZmx1c2gob3NiKSkgeworCQlyZXQgPSBfX29jZnMyX2ZsdXNoX3RydW5jYXRlX2xvZyhvc2IpOworCQlpZiAocmV0IDwgMCkgeworCQkJbWxvZ19lcnJubyhyZXQpOworCQkJZ290byBvdXQ7CisJCX0KKwl9CisKKwloYW5kbGUgPSBvY2ZzMl9zdGFydF90cmFucyhvc2IsIE9DRlMyX1JFTU9WRV9FWFRFTlRfQ1JFRElUUyk7CisJaWYgKGhhbmRsZSA9PSBOVUxMKSB7CisJCXJldCA9IC1FTk9NRU07CisJCW1sb2dfZXJybm8ocmV0KTsKKwkJZ290byBvdXQ7CisJfQorCisJcmV0ID0gb2NmczJfam91cm5hbF9hY2Nlc3MoaGFuZGxlLCBpbm9kZSwgcm9vdF9iaCwKKwkJCQkgICBPQ0ZTMl9KT1VSTkFMX0FDQ0VTU19XUklURSk7CisJaWYgKHJldCkgeworCQltbG9nX2Vycm5vKHJldCk7CisJCWdvdG8gb3V0X2NvbW1pdDsKKwl9CisKKwlyZXQgPSBvY2ZzMl9yZW1vdmVfZXh0ZW50KGlub2RlLCAmZXQsIGNwb3MsIGxlbiwgaGFuZGxlLCBtZXRhX2FjLAorCQkJCSAgJmRlYWxsb2MpOworCWlmIChyZXQpIHsKKwkJbWxvZ19lcnJubyhyZXQpOworCQlnb3RvIG91dF9jb21taXQ7CisJfQorCisJbGUzMl9hZGRfY3B1KCZ4Yi0+eGJfYXR0cnMueGJfcm9vdC54dF9jbHVzdGVycywgLWxlbik7CisKKwlyZXQgPSBvY2ZzMl9qb3VybmFsX2RpcnR5KGhhbmRsZSwgcm9vdF9iaCk7CisJaWYgKHJldCkgeworCQltbG9nX2Vycm5vKHJldCk7CisJCWdvdG8gb3V0X2NvbW1pdDsKKwl9CisKKwlyZXQgPSBvY2ZzMl90cnVuY2F0ZV9sb2dfYXBwZW5kKG9zYiwgaGFuZGxlLCBibGtubywgbGVuKTsKKwlpZiAocmV0KQorCQltbG9nX2Vycm5vKHJldCk7CisKK291dF9jb21taXQ6CisJb2NmczJfY29tbWl0X3RyYW5zKG9zYiwgaGFuZGxlKTsKK291dDoKKwlvY2ZzMl9zY2hlZHVsZV90cnVuY2F0ZV9sb2dfZmx1c2gob3NiLCAxKTsKKworCW11dGV4X3VubG9jaygmdGxfaW5vZGUtPmlfbXV0ZXgpOworCisJaWYgKG1ldGFfYWMpCisJCW9jZnMyX2ZyZWVfYWxsb2NfY29udGV4dChtZXRhX2FjKTsKKworCW9jZnMyX3J1bl9kZWFsbG9jcyhvc2IsICZkZWFsbG9jKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIG9jZnMyX3hhdHRyX2J1Y2tldF9yZW1vdmVfeHMoc3RydWN0IGlub2RlICppbm9kZSwKKwkJCQkJIHN0cnVjdCBvY2ZzMl94YXR0cl9zZWFyY2ggKnhzKQoreworCWhhbmRsZV90ICpoYW5kbGUgPSBOVUxMOworCXN0cnVjdCBvY2ZzMl94YXR0cl9oZWFkZXIgKnhoID0geHMtPmJ1Y2tldC54aDsKKwlzdHJ1Y3Qgb2NmczJfeGF0dHJfZW50cnkgKmxhc3QgPSAmeGgtPnhoX2VudHJpZXNbCisJCQkJCQlsZTE2X3RvX2NwdSh4aC0+eGhfY291bnQpIC0gMV07CisJaW50IHJldCA9IDA7CisKKwloYW5kbGUgPSBvY2ZzMl9zdGFydF90cmFucygoT0NGUzJfU0IoaW5vZGUtPmlfc2IpKSwgMSk7CisJaWYgKElTX0VSUihoYW5kbGUpKSB7CisJCXJldCA9IFBUUl9FUlIoaGFuZGxlKTsKKwkJbWxvZ19lcnJubyhyZXQpOworCQlyZXR1cm47CisJfQorCisJcmV0ID0gb2NmczJfam91cm5hbF9hY2Nlc3MoaGFuZGxlLCBpbm9kZSwgeHMtPmJ1Y2tldC5iaHNbMF0sCisJCQkJICAgT0NGUzJfSk9VUk5BTF9BQ0NFU1NfV1JJVEUpOworCWlmIChyZXQpIHsKKwkJbWxvZ19lcnJubyhyZXQpOworCQlnb3RvIG91dF9jb21taXQ7CisJfQorCisJLyogUmVtb3ZlIHRoZSBvbGQgZW50cnkuICovCisJbWVtbW92ZSh4cy0+aGVyZSwgeHMtPmhlcmUgKyAxLAorCQkodm9pZCAqKWxhc3QgLSAodm9pZCAqKXhzLT5oZXJlKTsKKwltZW1zZXQobGFzdCwgMCwgc2l6ZW9mKHN0cnVjdCBvY2ZzMl94YXR0cl9lbnRyeSkpOworCWxlMTZfYWRkX2NwdSgmeGgtPnhoX2NvdW50LCAtMSk7CisKKwlyZXQgPSBvY2ZzMl9qb3VybmFsX2RpcnR5KGhhbmRsZSwgeHMtPmJ1Y2tldC5iaHNbMF0pOworCWlmIChyZXQgPCAwKQorCQltbG9nX2Vycm5vKHJldCk7CitvdXRfY29tbWl0OgorCW9jZnMyX2NvbW1pdF90cmFucyhPQ0ZTMl9TQihpbm9kZS0+aV9zYiksIGhhbmRsZSk7Cit9CisKKy8qCisgKiBTZXQgdGhlIHhhdHRyIG5hbWUvdmFsdWUgaW4gdGhlIGJ1Y2tldCBzcGVjaWZpZWQgaW4geHMuCisgKgorICogQXMgdGhlIG5ldyB2YWx1ZSBpbiB4aSBtYXkgYmUgc3RvcmVkIGluIHRoZSBidWNrZXQgb3IgaW4gYW4gb3V0c2lkZSBjbHVzdGVyLAorICogd2UgZGl2aWRlIHRoZSB3aG9sZSBwcm9jZXNzIGludG8gMyBzdGVwczoKKyAqIDEuIGluc2VydCBuYW1lL3ZhbHVlIGluIHRoZSBidWNrZXQob2NmczJfeGF0dHJfc2V0X2VudHJ5X2luX2J1Y2tldCkKKyAqIDIuIHRydW5jYXRlIG9mIHRoZSBvdXRzaWRlIGNsdXN0ZXIob2NmczJfeGF0dHJfYnVja2V0X3ZhbHVlX3RydW5jYXRlX3hzKQorICogMy4gU2V0IHRoZSB2YWx1ZSB0byB0aGUgb3V0c2lkZSBjbHVzdGVyKG9jZnMyX3hhdHRyX2J1Y2tldF9zZXRfdmFsdWVfb3V0c2lkZSkKKyAqIDQuIElmIHRoZSBjbHVzdGVycyBmb3IgdGhlIG5ldyBvdXRzaWRlIHZhbHVlIGNhbid0IGJlIGFsbG9jYXRlZCwgd2UgbmVlZAorICogICAgdG8gZnJlZSB0aGUgeGF0dHIgd2UgYWxsb2NhdGVkIGluIHNldC4KKyAqLworc3RhdGljIGludCBvY2ZzMl94YXR0cl9zZXRfaW5fYnVja2V0KHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCQkJICAgICBzdHJ1Y3Qgb2NmczJfeGF0dHJfaW5mbyAqeGksCisJCQkJICAgICBzdHJ1Y3Qgb2NmczJfeGF0dHJfc2VhcmNoICp4cykKK3sKKwlpbnQgcmV0LCBsb2NhbCA9IDE7CisJc2l6ZV90IHZhbHVlX2xlbjsKKwljaGFyICp2YWwgPSAoY2hhciAqKXhpLT52YWx1ZTsKKwlzdHJ1Y3Qgb2NmczJfeGF0dHJfZW50cnkgKnhlID0geHMtPmhlcmU7CisJdTMyIG5hbWVfaGFzaCA9IG9jZnMyX3hhdHRyX25hbWVfaGFzaChpbm9kZSwgeGktPm5hbWUsCisJCQkJCSAgICAgIHN0cmxlbih4aS0+bmFtZSkpOworCisJaWYgKCF4cy0+bm90X2ZvdW5kICYmICFvY2ZzMl94YXR0cl9pc19sb2NhbCh4ZSkpIHsKKwkJLyoKKwkJICogV2UgbmVlZCB0byB0cnVuY2F0ZSB0aGUgeGF0dHIgc3RvcmFnZSBmaXJzdC4KKwkJICoKKwkJICogSWYgYm90aCB0aGUgb2xkIGFuZCBuZXcgdmFsdWUgYXJlIHN0b3JlZCB0bworCQkgKiBvdXRzaWRlIGJsb2NrLCB3ZSBvbmx5IG5lZWQgdG8gdHJ1bmNhdGUKKwkJICogdGhlIHN0b3JhZ2UgYW5kIHRoZW4gc2V0IHRoZSB2YWx1ZSBvdXRzaWRlLgorCQkgKgorCQkgKiBJZiB0aGUgbmV3IHZhbHVlIHNob3VsZCBiZSBzdG9yZWQgd2l0aGluIGJsb2NrLAorCQkgKiB3ZSBzaG91bGQgZnJlZSBhbGwgdGhlIG91dHNpZGUgYmxvY2sgZmlyc3QgYW5kCisJCSAqIHRoZSBtb2RpZmljYXRpb24gdG8gdGhlIHhhdHRyIGJsb2NrIHdpbGwgYmUgZG9uZQorCQkgKiBieSBmb2xsb3dpbmcgc3RlcHMuCisJCSAqLworCQlpZiAoeGktPnZhbHVlX2xlbiA+IE9DRlMyX1hBVFRSX0lOTElORV9TSVpFKQorCQkJdmFsdWVfbGVuID0geGktPnZhbHVlX2xlbjsKKwkJZWxzZQorCQkJdmFsdWVfbGVuID0gMDsKKworCQlyZXQgPSBvY2ZzMl94YXR0cl9idWNrZXRfdmFsdWVfdHJ1bmNhdGVfeHMoaW5vZGUsIHhzLAorCQkJCQkJCSAgIHZhbHVlX2xlbik7CisJCWlmIChyZXQpCisJCQlnb3RvIG91dDsKKworCQlpZiAodmFsdWVfbGVuKQorCQkJZ290byBzZXRfdmFsdWVfb3V0c2lkZTsKKwl9CisKKwl2YWx1ZV9sZW4gPSB4aS0+dmFsdWVfbGVuOworCS8qIFNvIHdlIGhhdmUgdG8gaGFuZGxlIHRoZSBpbnNpZGUgYmxvY2sgY2hhbmdlIG5vdy4gKi8KKwlpZiAodmFsdWVfbGVuID4gT0NGUzJfWEFUVFJfSU5MSU5FX1NJWkUpIHsKKwkJLyoKKwkJICogSWYgdGhlIG5ldyB2YWx1ZSB3aWxsIGJlIHN0b3JlZCBvdXRzaWRlIG9mIGJsb2NrLAorCQkgKiBpbml0YWxpemUgYSBuZXcgZW1wdHkgdmFsdWUgcm9vdCBhbmQgaW5zZXJ0IGl0IGZpcnN0LgorCQkgKi8KKwkJbG9jYWwgPSAwOworCQl4aS0+dmFsdWUgPSAmZGVmX3h2OworCQl4aS0+dmFsdWVfbGVuID0gT0NGUzJfWEFUVFJfUk9PVF9TSVpFOworCX0KKworCXJldCA9IG9jZnMyX3hhdHRyX3NldF9lbnRyeV9pbl9idWNrZXQoaW5vZGUsIHhpLCB4cywgbmFtZV9oYXNoLCBsb2NhbCk7CisJaWYgKHJldCkgeworCQltbG9nX2Vycm5vKHJldCk7CisJCWdvdG8gb3V0OworCX0KKworCWlmICh2YWx1ZV9sZW4gPD0gT0NGUzJfWEFUVFJfSU5MSU5FX1NJWkUpCisJCWdvdG8gb3V0OworCisJLyogYWxsb2NhdGUgdGhlIHNwYWNlIG5vdyBmb3IgdGhlIG91dHNpZGUgYmxvY2sgc3RvcmFnZS4gKi8KKwlyZXQgPSBvY2ZzMl94YXR0cl9idWNrZXRfdmFsdWVfdHJ1bmNhdGVfeHMoaW5vZGUsIHhzLAorCQkJCQkJICAgdmFsdWVfbGVuKTsKKwlpZiAocmV0KSB7CisJCW1sb2dfZXJybm8ocmV0KTsKKworCQlpZiAoeHMtPm5vdF9mb3VuZCkgeworCQkJLyoKKwkJCSAqIFdlIGNhbid0IGFsbG9jYXRlIGVub3VnaCBjbHVzdGVycyBmb3Igb3V0c2lkZQorCQkJICogc3RvcmFnZSBhbmQgd2UgaGF2ZSBhbGxvY2F0ZWQgeGF0dHIgYWxyZWFkeSwKKwkJCSAqIHNvIG5lZWQgdG8gcmVtb3ZlIGl0LgorCQkJICovCisJCQlvY2ZzMl94YXR0cl9idWNrZXRfcmVtb3ZlX3hzKGlub2RlLCB4cyk7CisJCX0KKwkJZ290byBvdXQ7CisJfQorCitzZXRfdmFsdWVfb3V0c2lkZToKKwlyZXQgPSBvY2ZzMl94YXR0cl9idWNrZXRfc2V0X3ZhbHVlX291dHNpZGUoaW5vZGUsIHhzLCB2YWwsIHZhbHVlX2xlbik7CitvdXQ6CisJcmV0dXJuIHJldDsKK30KKworLyogY2hlY2sgd2hldGhlciB0aGUgeGF0dHIgYnVja2V0IGlzIGZpbGxlZCB1cCB3aXRoIHRoZSBzYW1lIGhhc2ggdmFsdWUuICovCitzdGF0aWMgaW50IG9jZnMyX2NoZWNrX3hhdHRyX2J1Y2tldF9jb2xsaXNpb24oc3RydWN0IGlub2RlICppbm9kZSwKKwkJCQkJICAgICAgc3RydWN0IG9jZnMyX3hhdHRyX2J1Y2tldCAqYnVja2V0KQoreworCXN0cnVjdCBvY2ZzMl94YXR0cl9oZWFkZXIgKnhoID0gYnVja2V0LT54aDsKKworCWlmICh4aC0+eGhfZW50cmllc1tsZTE2X3RvX2NwdSh4aC0+eGhfY291bnQpIC0gMV0ueGVfbmFtZV9oYXNoID09CisJICAgIHhoLT54aF9lbnRyaWVzWzBdLnhlX25hbWVfaGFzaCkgeworCQltbG9nKE1MX0VSUk9SLCAiVG9vIG11Y2ggaGFzaCBjb2xsaXNpb24gaW4geGF0dHIgYnVja2V0ICVsbHUsICIKKwkJICAgICAiaGFzaCA9ICV1XG4iLAorCQkgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpYnVja2V0LT5iaHNbMF0tPmJfYmxvY2tuciwKKwkJICAgICBsZTMyX3RvX2NwdSh4aC0+eGhfZW50cmllc1swXS54ZV9uYW1lX2hhc2gpKTsKKwkJcmV0dXJuIC1FTk9TUEM7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgb2NmczJfeGF0dHJfc2V0X2VudHJ5X2luZGV4X2Jsb2NrKHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCQkJCSAgICAgc3RydWN0IG9jZnMyX3hhdHRyX2luZm8gKnhpLAorCQkJCQkgICAgIHN0cnVjdCBvY2ZzMl94YXR0cl9zZWFyY2ggKnhzKQoreworCXN0cnVjdCBvY2ZzMl94YXR0cl9oZWFkZXIgKnhoOworCXN0cnVjdCBvY2ZzMl94YXR0cl9lbnRyeSAqeGU7CisJdTE2IGNvdW50LCBoZWFkZXJfc2l6ZSwgeGhfZnJlZV9zdGFydDsKKwlpbnQgaSwgZnJlZSwgbWF4X2ZyZWUsIG5lZWQsIG9sZDsKKwlzaXplX3QgdmFsdWVfc2l6ZSA9IDAsIG5hbWVfbGVuID0gc3RybGVuKHhpLT5uYW1lKTsKKwlzaXplX3QgYmxvY2tzaXplID0gaW5vZGUtPmlfc2ItPnNfYmxvY2tzaXplOworCWludCByZXQsIGFsbG9jYXRpb24gPSAwOworCXUxNiBibGtfcGVyX2J1Y2tldCA9IG9jZnMyX2Jsb2Nrc19wZXJfeGF0dHJfYnVja2V0KGlub2RlLT5pX3NiKTsKKworCW1sb2dfZW50cnkoIlNldCB4YXR0ciAlcyBpbiB4YXR0ciBpbmRleCBibG9ja1xuIiwgeGktPm5hbWUpOworCit0cnlfYWdhaW46CisJeGggPSB4cy0+aGVhZGVyOworCWNvdW50ID0gbGUxNl90b19jcHUoeGgtPnhoX2NvdW50KTsKKwl4aF9mcmVlX3N0YXJ0ID0gbGUxNl90b19jcHUoeGgtPnhoX2ZyZWVfc3RhcnQpOworCWhlYWRlcl9zaXplID0gc2l6ZW9mKHN0cnVjdCBvY2ZzMl94YXR0cl9oZWFkZXIpICsKKwkJCWNvdW50ICogc2l6ZW9mKHN0cnVjdCBvY2ZzMl94YXR0cl9lbnRyeSk7CisJbWF4X2ZyZWUgPSBPQ0ZTMl9YQVRUUl9CVUNLRVRfU0laRSAtCisJCWxlMTZfdG9fY3B1KHhoLT54aF9uYW1lX3ZhbHVlX2xlbikgLSBoZWFkZXJfc2l6ZTsKKworCW1sb2dfYnVnX29uX21zZyhoZWFkZXJfc2l6ZSA+IGJsb2Nrc2l6ZSwgImJ1Y2tldCAlbGx1IGhhcyBoZWFkZXIgc2l6ZSAiCisJCQkib2YgJXUgd2hpY2ggZXhjZWVkIGJsb2NrIHNpemVcbiIsCisJCQkodW5zaWduZWQgbG9uZyBsb25nKXhzLT5idWNrZXQuYmhzWzBdLT5iX2Jsb2NrbnIsCisJCQloZWFkZXJfc2l6ZSk7CisKKwlpZiAoeGktPnZhbHVlICYmIHhpLT52YWx1ZV9sZW4gPiBPQ0ZTMl9YQVRUUl9JTkxJTkVfU0laRSkKKwkJdmFsdWVfc2l6ZSA9IE9DRlMyX1hBVFRSX1JPT1RfU0laRTsKKwllbHNlIGlmICh4aS0+dmFsdWUpCisJCXZhbHVlX3NpemUgPSBPQ0ZTMl9YQVRUUl9TSVpFKHhpLT52YWx1ZV9sZW4pOworCisJaWYgKHhzLT5ub3RfZm91bmQpCisJCW5lZWQgPSBzaXplb2Yoc3RydWN0IG9jZnMyX3hhdHRyX2VudHJ5KSArCisJCQlPQ0ZTMl9YQVRUUl9TSVpFKG5hbWVfbGVuKSArIHZhbHVlX3NpemU7CisJZWxzZSB7CisJCW5lZWQgPSB2YWx1ZV9zaXplICsgT0NGUzJfWEFUVFJfU0laRShuYW1lX2xlbik7CisKKwkJLyoKKwkJICogV2Ugb25seSByZXBsYWNlIHRoZSBvbGQgdmFsdWUgaWYgdGhlIG5ldyBsZW5ndGggaXMgc21hbGxlcgorCQkgKiB0aGFuIHRoZSBvbGQgb25lLiBPdGhlcndpc2Ugd2Ugd2lsbCBhbGxvY2F0ZSBuZXcgc3BhY2UgaW4gdGhlCisJCSAqIGJ1Y2tldCB0byBzdG9yZSBpdC4KKwkJICovCisJCXhlID0geHMtPmhlcmU7CisJCWlmIChvY2ZzMl94YXR0cl9pc19sb2NhbCh4ZSkpCisJCQlvbGQgPSBPQ0ZTMl9YQVRUUl9TSVpFKGxlNjRfdG9fY3B1KHhlLT54ZV92YWx1ZV9zaXplKSk7CisJCWVsc2UKKwkJCW9sZCA9IE9DRlMyX1hBVFRSX1NJWkUoT0NGUzJfWEFUVFJfUk9PVF9TSVpFKTsKKworCQlpZiAob2xkID49IHZhbHVlX3NpemUpCisJCQluZWVkID0gMDsKKwl9CisKKwlmcmVlID0geGhfZnJlZV9zdGFydCAtIGhlYWRlcl9zaXplOworCS8qCisJICogV2UgbmVlZCB0byBtYWtlIHN1cmUgdGhlIG5ldyBuYW1lL3ZhbHVlIHBhaXIKKwkgKiBjYW4gZXhpc3QgaW4gdGhlIHNhbWUgYmxvY2suCisJICovCisJaWYgKHhoX2ZyZWVfc3RhcnQgJSBibG9ja3NpemUgPCBuZWVkKQorCQlmcmVlIC09IHhoX2ZyZWVfc3RhcnQgJSBibG9ja3NpemU7CisKKwltbG9nKDAsICJ4cy0+bm90X2ZvdW5kID0gJWQsIGluIHhhdHRyIGJ1Y2tldCAlbGx1OiBmcmVlID0gJWQsICIKKwkgICAgICJuZWVkID0gJWQsIG1heF9mcmVlID0gJWQsIHhoX2ZyZWVfc3RhcnQgPSAldSwgeGhfbmFtZV92YWx1ZV9sZW4gPSIKKwkgICAgICIgJXVcbiIsIHhzLT5ub3RfZm91bmQsCisJICAgICAodW5zaWduZWQgbG9uZyBsb25nKXhzLT5idWNrZXQuYmhzWzBdLT5iX2Jsb2NrbnIsCisJICAgICBmcmVlLCBuZWVkLCBtYXhfZnJlZSwgbGUxNl90b19jcHUoeGgtPnhoX2ZyZWVfc3RhcnQpLAorCSAgICAgbGUxNl90b19jcHUoeGgtPnhoX25hbWVfdmFsdWVfbGVuKSk7CisKKwlpZiAoZnJlZSA8IG5lZWQgfHwgY291bnQgPT0gb2NmczJfeGF0dHJfbWF4X3hlX2luX2J1Y2tldChpbm9kZS0+aV9zYikpIHsKKwkJaWYgKG5lZWQgPD0gbWF4X2ZyZWUgJiYKKwkJICAgIGNvdW50IDwgb2NmczJfeGF0dHJfbWF4X3hlX2luX2J1Y2tldChpbm9kZS0+aV9zYikpIHsKKwkJCS8qCisJCQkgKiBXZSBjYW4gY3JlYXRlIHRoZSBzcGFjZSBieSBkZWZyYWdtZW50LiBTaW5jZSBvbmx5IHRoZQorCQkJICogbmFtZS92YWx1ZSB3aWxsIGJlIG1vdmVkLCB0aGUgeGUgc2hvdWxkbid0IGJlIGNoYW5nZWQKKwkJCSAqIGluIHhzLgorCQkJICovCisJCQlyZXQgPSBvY2ZzMl9kZWZyYWdfeGF0dHJfYnVja2V0KGlub2RlLCAmeHMtPmJ1Y2tldCk7CisJCQlpZiAocmV0KSB7CisJCQkJbWxvZ19lcnJubyhyZXQpOworCQkJCWdvdG8gb3V0OworCQkJfQorCisJCQl4aF9mcmVlX3N0YXJ0ID0gbGUxNl90b19jcHUoeGgtPnhoX2ZyZWVfc3RhcnQpOworCQkJZnJlZSA9IHhoX2ZyZWVfc3RhcnQgLSBoZWFkZXJfc2l6ZTsKKwkJCWlmICh4aF9mcmVlX3N0YXJ0ICUgYmxvY2tzaXplIDwgbmVlZCkKKwkJCQlmcmVlIC09IHhoX2ZyZWVfc3RhcnQgJSBibG9ja3NpemU7CisKKwkJCWlmIChmcmVlID49IG5lZWQpCisJCQkJZ290byB4YXR0cl9zZXQ7CisKKwkJCW1sb2coMCwgIkNhbid0IGdldCBlbm91Z2ggc3BhY2UgZm9yIHhhdHRyIGluc2VydCBieSAiCisJCQkgICAgICJkZWZyYWdtZW50LiBOZWVkICV1IGJ5dGVzLCBidXQgd2UgaGF2ZSAlZCwgc28gIgorCQkJICAgICAiYWxsb2NhdGUgbmV3IGJ1Y2tldCBmb3IgaXQuXG4iLCBuZWVkLCBmcmVlKTsKKwkJfQorCisJCS8qCisJCSAqIFdlIGhhdmUgdG8gYWRkIG5ldyBidWNrZXRzIG9yIGNsdXN0ZXJzIGFuZCBvbmUKKwkJICogYWxsb2NhdGlvbiBzaG91bGQgbGVhdmUgdXMgZW5vdWdoIHNwYWNlIGZvciBpbnNlcnQuCisJCSAqLworCQlCVUdfT04oYWxsb2NhdGlvbik7CisKKwkJLyoKKwkJICogV2UgZG8gbm90IGFsbG93IGZvciBvdmVybGFwcGluZyByYW5nZXMgYmV0d2VlbiBidWNrZXRzLiBBbmQKKwkJICogdGhlIG1heGltdW0gbnVtYmVyIG9mIGNvbGxpc2lvbnMgd2Ugd2lsbCBhbGxvdyBmb3IgdGhlbiBpcworCQkgKiBvbmUgYnVja2V0J3Mgd29ydGgsIHNvIGNoZWNrIGl0IGhlcmUgd2hldGhlciB3ZSBuZWVkIHRvCisJCSAqIGFkZCBhIG5ldyBidWNrZXQgZm9yIHRoZSBpbnNlcnQuCisJCSAqLworCQlyZXQgPSBvY2ZzMl9jaGVja194YXR0cl9idWNrZXRfY29sbGlzaW9uKGlub2RlLCAmeHMtPmJ1Y2tldCk7CisJCWlmIChyZXQpIHsKKwkJCW1sb2dfZXJybm8ocmV0KTsKKwkJCWdvdG8gb3V0OworCQl9CisKKwkJcmV0ID0gb2NmczJfYWRkX25ld194YXR0cl9idWNrZXQoaW5vZGUsCisJCQkJCQkgeHMtPnhhdHRyX2JoLAorCQkJCQkJIHhzLT5idWNrZXQuYmhzWzBdKTsKKwkJaWYgKHJldCkgeworCQkJbWxvZ19lcnJubyhyZXQpOworCQkJZ290byBvdXQ7CisJCX0KKworCQlmb3IgKGkgPSAwOyBpIDwgYmxrX3Blcl9idWNrZXQ7IGkrKykKKwkJCWJyZWxzZSh4cy0+YnVja2V0LmJoc1tpXSk7CisKKwkJbWVtc2V0KCZ4cy0+YnVja2V0LCAwLCBzaXplb2YoeHMtPmJ1Y2tldCkpOworCisJCXJldCA9IG9jZnMyX3hhdHRyX2luZGV4X2Jsb2NrX2ZpbmQoaW5vZGUsIHhzLT54YXR0cl9iaCwKKwkJCQkJCSAgIHhpLT5uYW1lX2luZGV4LAorCQkJCQkJICAgeGktPm5hbWUsIHhzKTsKKwkJaWYgKHJldCAmJiByZXQgIT0gLUVOT0RBVEEpCisJCQlnb3RvIG91dDsKKwkJeHMtPm5vdF9mb3VuZCA9IHJldDsKKwkJYWxsb2NhdGlvbiA9IDE7CisJCWdvdG8gdHJ5X2FnYWluOworCX0KKworeGF0dHJfc2V0OgorCXJldCA9IG9jZnMyX3hhdHRyX3NldF9pbl9idWNrZXQoaW5vZGUsIHhpLCB4cyk7CitvdXQ6CisJbWxvZ19leGl0KHJldCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBvY2ZzMl9kZWxldGVfeGF0dHJfaW5fYnVja2V0KHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCQkJCXN0cnVjdCBvY2ZzMl94YXR0cl9idWNrZXQgKmJ1Y2tldCwKKwkJCQkJdm9pZCAqcGFyYSkKK3sKKwlpbnQgcmV0ID0gMDsKKwlzdHJ1Y3Qgb2NmczJfeGF0dHJfaGVhZGVyICp4aCA9IGJ1Y2tldC0+eGg7CisJdTE2IGk7CisJc3RydWN0IG9jZnMyX3hhdHRyX2VudHJ5ICp4ZTsKKworCWZvciAoaSA9IDA7IGkgPCBsZTE2X3RvX2NwdSh4aC0+eGhfY291bnQpOyBpKyspIHsKKwkJeGUgPSAmeGgtPnhoX2VudHJpZXNbaV07CisJCWlmIChvY2ZzMl94YXR0cl9pc19sb2NhbCh4ZSkpCisJCQljb250aW51ZTsKKworCQlyZXQgPSBvY2ZzMl94YXR0cl9idWNrZXRfdmFsdWVfdHJ1bmNhdGUoaW5vZGUsCisJCQkJCQkJYnVja2V0LT5iaHNbMF0sCisJCQkJCQkJaSwgMCk7CisJCWlmIChyZXQpIHsKKwkJCW1sb2dfZXJybm8ocmV0KTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBvY2ZzMl9kZWxldGVfeGF0dHJfaW5kZXhfYmxvY2soc3RydWN0IGlub2RlICppbm9kZSwKKwkJCQkJICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKnhiX2JoKQoreworCXN0cnVjdCBvY2ZzMl94YXR0cl9ibG9jayAqeGIgPQorCQkJKHN0cnVjdCBvY2ZzMl94YXR0cl9ibG9jayAqKXhiX2JoLT5iX2RhdGE7CisJc3RydWN0IG9jZnMyX2V4dGVudF9saXN0ICplbCA9ICZ4Yi0+eGJfYXR0cnMueGJfcm9vdC54dF9saXN0OworCWludCByZXQgPSAwOworCXUzMiBuYW1lX2hhc2ggPSBVSU5UX01BWCwgZV9jcG9zLCBudW1fY2x1c3RlcnM7CisJdTY0IHBfYmxrbm87CisKKwlpZiAobGUxNl90b19jcHUoZWwtPmxfbmV4dF9mcmVlX3JlYykgPT0gMCkKKwkJcmV0dXJuIDA7CisKKwl3aGlsZSAobmFtZV9oYXNoID4gMCkgeworCQlyZXQgPSBvY2ZzMl94YXR0cl9nZXRfcmVjKGlub2RlLCBuYW1lX2hhc2gsICZwX2Jsa25vLAorCQkJCQkgICZlX2Nwb3MsICZudW1fY2x1c3RlcnMsIGVsKTsKKwkJaWYgKHJldCkgeworCQkJbWxvZ19lcnJubyhyZXQpOworCQkJZ290byBvdXQ7CisJCX0KKworCQlyZXQgPSBvY2ZzMl9pdGVyYXRlX3hhdHRyX2J1Y2tldHMoaW5vZGUsIHBfYmxrbm8sIG51bV9jbHVzdGVycywKKwkJCQkJCSAgb2NmczJfZGVsZXRlX3hhdHRyX2luX2J1Y2tldCwKKwkJCQkJCSAgTlVMTCk7CisJCWlmIChyZXQpIHsKKwkJCW1sb2dfZXJybm8ocmV0KTsKKwkJCWdvdG8gb3V0OworCQl9CisKKwkJcmV0ID0gb2NmczJfcm1feGF0dHJfY2x1c3Rlcihpbm9kZSwgeGJfYmgsCisJCQkJCSAgICAgcF9ibGtubywgZV9jcG9zLCBudW1fY2x1c3RlcnMpOworCQlpZiAocmV0KSB7CisJCQltbG9nX2Vycm5vKHJldCk7CisJCQlicmVhazsKKwkJfQorCisJCWlmIChlX2Nwb3MgPT0gMCkKKwkJCWJyZWFrOworCisJCW5hbWVfaGFzaCA9IGVfY3BvcyAtIDE7CisJfQorCitvdXQ6CisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqICd0cnVzdGVkJyBhdHRyaWJ1dGVzIHN1cHBvcnQKKyAqLworCisjZGVmaW5lIFhBVFRSX1RSVVNURURfUFJFRklYICJ0cnVzdGVkLiIKKworc3RhdGljIHNpemVfdCBvY2ZzMl94YXR0cl90cnVzdGVkX2xpc3Qoc3RydWN0IGlub2RlICppbm9kZSwgY2hhciAqbGlzdCwKKwkJCQkgICAgICAgc2l6ZV90IGxpc3Rfc2l6ZSwgY29uc3QgY2hhciAqbmFtZSwKKwkJCQkgICAgICAgc2l6ZV90IG5hbWVfbGVuKQoreworCWNvbnN0IHNpemVfdCBwcmVmaXhfbGVuID0gc2l6ZW9mKFhBVFRSX1RSVVNURURfUFJFRklYKSAtIDE7CisJY29uc3Qgc2l6ZV90IHRvdGFsX2xlbiA9IHByZWZpeF9sZW4gKyBuYW1lX2xlbiArIDE7CisKKwlpZiAobGlzdCAmJiB0b3RhbF9sZW4gPD0gbGlzdF9zaXplKSB7CisJCW1lbWNweShsaXN0LCBYQVRUUl9UUlVTVEVEX1BSRUZJWCwgcHJlZml4X2xlbik7CisJCW1lbWNweShsaXN0ICsgcHJlZml4X2xlbiwgbmFtZSwgbmFtZV9sZW4pOworCQlsaXN0W3ByZWZpeF9sZW4gKyBuYW1lX2xlbl0gPSAnXDAnOworCX0KKwlyZXR1cm4gdG90YWxfbGVuOworfQorCitzdGF0aWMgaW50IG9jZnMyX3hhdHRyX3RydXN0ZWRfZ2V0KHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNvbnN0IGNoYXIgKm5hbWUsCisJCQkJICAgdm9pZCAqYnVmZmVyLCBzaXplX3Qgc2l6ZSkKK3sKKwlpZiAoc3RyY21wKG5hbWUsICIiKSA9PSAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlyZXR1cm4gb2NmczJfeGF0dHJfZ2V0KGlub2RlLCBPQ0ZTMl9YQVRUUl9JTkRFWF9UUlVTVEVELCBuYW1lLAorCQkJICAgICAgIGJ1ZmZlciwgc2l6ZSk7Cit9CisKK3N0YXRpYyBpbnQgb2NmczJfeGF0dHJfdHJ1c3RlZF9zZXQoc3RydWN0IGlub2RlICppbm9kZSwgY29uc3QgY2hhciAqbmFtZSwKKwkJCQkgICBjb25zdCB2b2lkICp2YWx1ZSwgc2l6ZV90IHNpemUsIGludCBmbGFncykKK3sKKwlpZiAoc3RyY21wKG5hbWUsICIiKSA9PSAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJldHVybiBvY2ZzMl94YXR0cl9zZXQoaW5vZGUsIE9DRlMyX1hBVFRSX0lOREVYX1RSVVNURUQsIG5hbWUsIHZhbHVlLAorCQkJICAgICAgIHNpemUsIGZsYWdzKTsKK30KKworc3RydWN0IHhhdHRyX2hhbmRsZXIgb2NmczJfeGF0dHJfdHJ1c3RlZF9oYW5kbGVyID0geworCS5wcmVmaXgJPSBYQVRUUl9UUlVTVEVEX1BSRUZJWCwKKwkubGlzdAk9IG9jZnMyX3hhdHRyX3RydXN0ZWRfbGlzdCwKKwkuZ2V0CT0gb2NmczJfeGF0dHJfdHJ1c3RlZF9nZXQsCisJLnNldAk9IG9jZnMyX3hhdHRyX3RydXN0ZWRfc2V0LAorfTsKKworCisvKgorICogJ3VzZXInIGF0dHJpYnV0ZXMgc3VwcG9ydAorICovCisKKyNkZWZpbmUgWEFUVFJfVVNFUl9QUkVGSVggInVzZXIuIgorCitzdGF0aWMgc2l6ZV90IG9jZnMyX3hhdHRyX3VzZXJfbGlzdChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjaGFyICpsaXN0LAorCQkJCSAgICBzaXplX3QgbGlzdF9zaXplLCBjb25zdCBjaGFyICpuYW1lLAorCQkJCSAgICBzaXplX3QgbmFtZV9sZW4pCit7CisJY29uc3Qgc2l6ZV90IHByZWZpeF9sZW4gPSBzaXplb2YoWEFUVFJfVVNFUl9QUkVGSVgpIC0gMTsKKwljb25zdCBzaXplX3QgdG90YWxfbGVuID0gcHJlZml4X2xlbiArIG5hbWVfbGVuICsgMTsKKwlzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiA9IE9DRlMyX1NCKGlub2RlLT5pX3NiKTsKKworCWlmIChvc2ItPnNfbW91bnRfb3B0ICYgT0NGUzJfTU9VTlRfTk9VU0VSWEFUVFIpCisJCXJldHVybiAwOworCisJaWYgKGxpc3QgJiYgdG90YWxfbGVuIDw9IGxpc3Rfc2l6ZSkgeworCQltZW1jcHkobGlzdCwgWEFUVFJfVVNFUl9QUkVGSVgsIHByZWZpeF9sZW4pOworCQltZW1jcHkobGlzdCArIHByZWZpeF9sZW4sIG5hbWUsIG5hbWVfbGVuKTsKKwkJbGlzdFtwcmVmaXhfbGVuICsgbmFtZV9sZW5dID0gJ1wwJzsKKwl9CisJcmV0dXJuIHRvdGFsX2xlbjsKK30KKworc3RhdGljIGludCBvY2ZzMl94YXR0cl91c2VyX2dldChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjb25zdCBjaGFyICpuYW1lLAorCQkJCXZvaWQgKmJ1ZmZlciwgc2l6ZV90IHNpemUpCit7CisJc3RydWN0IG9jZnMyX3N1cGVyICpvc2IgPSBPQ0ZTMl9TQihpbm9kZS0+aV9zYik7CisKKwlpZiAoc3RyY21wKG5hbWUsICIiKSA9PSAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAob3NiLT5zX21vdW50X29wdCAmIE9DRlMyX01PVU5UX05PVVNFUlhBVFRSKQorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisJcmV0dXJuIG9jZnMyX3hhdHRyX2dldChpbm9kZSwgT0NGUzJfWEFUVFJfSU5ERVhfVVNFUiwgbmFtZSwKKwkJCSAgICAgICBidWZmZXIsIHNpemUpOworfQorCitzdGF0aWMgaW50IG9jZnMyX3hhdHRyX3VzZXJfc2V0KHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNvbnN0IGNoYXIgKm5hbWUsCisJCQkJY29uc3Qgdm9pZCAqdmFsdWUsIHNpemVfdCBzaXplLCBpbnQgZmxhZ3MpCit7CisJc3RydWN0IG9jZnMyX3N1cGVyICpvc2IgPSBPQ0ZTMl9TQihpbm9kZS0+aV9zYik7CisKKwlpZiAoc3RyY21wKG5hbWUsICIiKSA9PSAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAob3NiLT5zX21vdW50X29wdCAmIE9DRlMyX01PVU5UX05PVVNFUlhBVFRSKQorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisKKwlyZXR1cm4gb2NmczJfeGF0dHJfc2V0KGlub2RlLCBPQ0ZTMl9YQVRUUl9JTkRFWF9VU0VSLCBuYW1lLCB2YWx1ZSwKKwkJCSAgICAgICBzaXplLCBmbGFncyk7Cit9CisKK3N0cnVjdCB4YXR0cl9oYW5kbGVyIG9jZnMyX3hhdHRyX3VzZXJfaGFuZGxlciA9IHsKKwkucHJlZml4CT0gWEFUVFJfVVNFUl9QUkVGSVgsCisJLmxpc3QJPSBvY2ZzMl94YXR0cl91c2VyX2xpc3QsCisJLmdldAk9IG9jZnMyX3hhdHRyX3VzZXJfZ2V0LAorCS5zZXQJPSBvY2ZzMl94YXR0cl91c2VyX3NldCwKK307CmRpZmYgLS1naXQgYS9mcy9vY2ZzMi94YXR0ci5oIGIvZnMvb2NmczIveGF0dHIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMjVjN2M2Ci0tLSAvZGV2L251bGwKKysrIGIvZnMvb2NmczIveGF0dHIuaApAQCAtMCwwICsxLDY4IEBACisvKiAtKi0gbW9kZTogYzsgYy1iYXNpYy1vZmZzZXQ6IDg7IC0qLQorICogdmltOiBub2V4cGFuZHRhYiBzdz04IHRzPTggc3RzPTA6CisgKgorICogeGF0dHIuaAorICoKKyAqIEZ1bmN0aW9uIHByb3RvdHlwZXMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggT3JhY2xlLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisgKiBCb3N0b24sIE1BIDAyMTExMC0xMzA3LCBVU0EuCisgKi8KKworI2lmbmRlZiBPQ0ZTMl9YQVRUUl9ICisjZGVmaW5lIE9DRlMyX1hBVFRSX0gKKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC94YXR0ci5oPgorCitlbnVtIG9jZnMyX3hhdHRyX3R5cGUgeworCU9DRlMyX1hBVFRSX0lOREVYX1VTRVIgPSAxLAorCU9DRlMyX1hBVFRSX0lOREVYX1BPU0lYX0FDTF9BQ0NFU1MsCisJT0NGUzJfWEFUVFJfSU5ERVhfUE9TSVhfQUNMX0RFRkFVTFQsCisJT0NGUzJfWEFUVFJfSU5ERVhfVFJVU1RFRCwKKwlPQ0ZTMl9YQVRUUl9JTkRFWF9TRUNVUklUWSwKKwlPQ0ZTMl9YQVRUUl9NQVgKK307CisKK2V4dGVybiBzdHJ1Y3QgeGF0dHJfaGFuZGxlciBvY2ZzMl94YXR0cl91c2VyX2hhbmRsZXI7CitleHRlcm4gc3RydWN0IHhhdHRyX2hhbmRsZXIgb2NmczJfeGF0dHJfdHJ1c3RlZF9oYW5kbGVyOworCitleHRlcm4gc3NpemVfdCBvY2ZzMl9saXN0eGF0dHIoc3RydWN0IGRlbnRyeSAqLCBjaGFyICosIHNpemVfdCk7CitleHRlcm4gaW50IG9jZnMyX3hhdHRyX2dldChzdHJ1Y3QgaW5vZGUgKiwgaW50LCBjb25zdCBjaGFyICosIHZvaWQgKiwgc2l6ZV90KTsKK2V4dGVybiBpbnQgb2NmczJfeGF0dHJfc2V0KHN0cnVjdCBpbm9kZSAqLCBpbnQsIGNvbnN0IGNoYXIgKiwgY29uc3Qgdm9pZCAqLAorCQkJICAgc2l6ZV90LCBpbnQpOworZXh0ZXJuIGludCBvY2ZzMl94YXR0cl9yZW1vdmUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGJ1ZmZlcl9oZWFkICpkaV9iaCk7CitleHRlcm4gc3RydWN0IHhhdHRyX2hhbmRsZXIgKm9jZnMyX3hhdHRyX2hhbmRsZXJzW107CisKK3N0YXRpYyBpbmxpbmUgdTE2IG9jZnMyX3hhdHRyX2J1Y2tldHNfcGVyX2NsdXN0ZXIoc3RydWN0IG9jZnMyX3N1cGVyICpvc2IpCit7CisJcmV0dXJuICgxIDw8IG9zYi0+c19jbHVzdGVyc2l6ZV9iaXRzKSAvIE9DRlMyX1hBVFRSX0JVQ0tFVF9TSVpFOworfQorCitzdGF0aWMgaW5saW5lIHUxNiBvY2ZzMl9ibG9ja3NfcGVyX3hhdHRyX2J1Y2tldChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQoreworCXJldHVybiBPQ0ZTMl9YQVRUUl9CVUNLRVRfU0laRSAvICgxIDw8IHNiLT5zX2Jsb2Nrc2l6ZV9iaXRzKTsKK30KKworc3RhdGljIGlubGluZSB1MTYgb2NmczJfeGF0dHJfbWF4X3hlX2luX2J1Y2tldChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQoreworCXUxNiBsZW4gPSBzYi0+c19ibG9ja3NpemUgLQorCQkgb2Zmc2V0b2Yoc3RydWN0IG9jZnMyX3hhdHRyX2hlYWRlciwgeGhfZW50cmllcyk7CisKKwlyZXR1cm4gbGVuIC8gc2l6ZW9mKHN0cnVjdCBvY2ZzMl94YXR0cl9lbnRyeSk7Cit9CisjZW5kaWYgLyogT0NGUzJfWEFUVFJfSCAqLwpkaWZmIC0tZ2l0IGEvZnMvb21mcy9pbm9kZS5jIGIvZnMvb21mcy9pbm9kZS5jCmluZGV4IGQyOTA0N2IuLmNiZjA0N2EgMTAwNjQ0Ci0tLSBhL2ZzL29tZnMvaW5vZGUuYworKysgYi9mcy9vbWZzL2lub2RlLmMKQEAgLTM0Niw3ICszNDYsNyBAQAogCU9wdF91aWQsIE9wdF9naWQsIE9wdF91bWFzaywgT3B0X2RtYXNrLCBPcHRfZm1hc2sKIH07CiAKLXN0YXRpYyBtYXRjaF90YWJsZV90IHRva2VucyA9IHsKK3N0YXRpYyBjb25zdCBtYXRjaF90YWJsZV90IHRva2VucyA9IHsKIAl7T3B0X3VpZCwgInVpZD0ldSJ9LAogCXtPcHRfZ2lkLCAiZ2lkPSV1In0sCiAJe09wdF91bWFzaywgInVtYXNrPSVvIn0sCmRpZmYgLS1naXQgYS9mcy9vcGVuLmMgYi9mcy9vcGVuLmMKaW5kZXggMDdkYTkzNS4uNTU5NjA0OSAxMDA2NDQKLS0tIGEvZnMvb3Blbi5jCisrKyBiL2ZzL29wZW4uYwpAQCAtMTE0MSw4ICsxMTQxLDcgQEAKIGFzbWxpbmthZ2UgbG9uZyBzeXNfdmhhbmd1cCh2b2lkKQogewogCWlmIChjYXBhYmxlKENBUF9TWVNfVFRZX0NPTkZJRykpIHsKLQkJLyogWFhYOiB0aGlzIG5lZWRzIGxvY2tpbmcgKi8KLQkJdHR5X3ZoYW5ndXAoY3VycmVudC0+c2lnbmFsLT50dHkpOworCQl0dHlfdmhhbmd1cF9zZWxmKCk7CiAJCXJldHVybiAwOwogCX0KIAlyZXR1cm4gLUVQRVJNOwpkaWZmIC0tZ2l0IGEvZnMvcGFydGl0aW9ucy9hY29ybi5jIGIvZnMvcGFydGl0aW9ucy9hY29ybi5jCmluZGV4IDNkM2UxNjYuLmE5N2I0NzcgMTAwNjQ0Ci0tLSBhL2ZzL3BhcnRpdGlvbnMvYWNvcm4uYworKysgYi9mcy9wYXJ0aXRpb25zL2Fjb3JuLmMKQEAgLTI3NSwxNiArMjc1LDYgQEAKIAlpZCA9IGRhdGFbMHgxZmNdICYgMTU7CiAJcHV0X2Rldl9zZWN0b3Ioc2VjdCk7CiAKLSNpZmRlZiBDT05GSUdfQkxLX0RFVl9NRk0KLQlpZiAoTUFKT1IoYmRldi0+YmRfZGV2KSA9PSBNRk1fQUNPUk5fTUFKT1IpIHsKLQkJZXh0ZXJuIHZvaWQgeGRfc2V0X2dlb21ldHJ5KHN0cnVjdCBibG9ja19kZXZpY2UgKiwKLQkJCXVuc2lnbmVkIGNoYXIsIHVuc2lnbmVkIGNoYXIsIHVuc2lnbmVkIGludCk7Ci0JCXhkX3NldF9nZW9tZXRyeShiZGV2LCBkci0+c2Vjc3BlcnRyYWNrLCBoZWFkcywgMSk7Ci0JCWludmFsaWRhdGVfYmhfbHJ1cygpOwotCQl0cnVuY2F0ZV9pbm9kZV9wYWdlcyhiZGV2LT5iZF9pbm9kZS0+aV9tYXBwaW5nLCAwKTsKLQl9Ci0jZW5kaWYKLQogCS8qCiAJICogV29yayBvdXQgc3RhcnQgb2Ygbm9uLWFkZnMgcGFydGl0aW9uLgogCSAqLwpkaWZmIC0tZ2l0IGEvZnMvcGFydGl0aW9ucy9jaGVjay5jIGIvZnMvcGFydGl0aW9ucy9jaGVjay5jCmluZGV4IDc0MDgyMjcuLmNmYjBjODAgMTAwNjQ0Ci0tLSBhL2ZzL3BhcnRpdGlvbnMvY2hlY2suYworKysgYi9mcy9wYXJ0aXRpb25zL2NoZWNrLmMKQEAgLTE5NSw2ICsxOTUsMTQgQEAKIAlyZXR1cm4gRVJSX1BUUihyZXMpOwogfQogCitzdGF0aWMgc3NpemVfdCBwYXJ0X3BhcnRpdGlvbl9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCXN0cnVjdCBoZF9zdHJ1Y3QgKnAgPSBkZXZfdG9fcGFydChkZXYpOworCisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIHAtPnBhcnRubyk7Cit9CisKIHN0YXRpYyBzc2l6ZV90IHBhcnRfc3RhcnRfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCiAJCQkgICAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKIHsKQEAgLTI2MCw2ICsyNjgsNyBAQAogfQogI2VuZGlmCiAKK3N0YXRpYyBERVZJQ0VfQVRUUihwYXJ0aXRpb24sIFNfSVJVR08sIHBhcnRfcGFydGl0aW9uX3Nob3csIE5VTEwpOwogc3RhdGljIERFVklDRV9BVFRSKHN0YXJ0LCBTX0lSVUdPLCBwYXJ0X3N0YXJ0X3Nob3csIE5VTEwpOwogc3RhdGljIERFVklDRV9BVFRSKHNpemUsIFNfSVJVR08sIHBhcnRfc2l6ZV9zaG93LCBOVUxMKTsKIHN0YXRpYyBERVZJQ0VfQVRUUihzdGF0LCBTX0lSVUdPLCBwYXJ0X3N0YXRfc2hvdywgTlVMTCk7CkBAIC0yNjksNiArMjc4LDcgQEAKICNlbmRpZgogCiBzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqcGFydF9hdHRyc1tdID0geworCSZkZXZfYXR0cl9wYXJ0aXRpb24uYXR0ciwKIAkmZGV2X2F0dHJfc3RhcnQuYXR0ciwKIAkmZGV2X2F0dHJfc2l6ZS5hdHRyLAogCSZkZXZfYXR0cl9zdGF0LmF0dHIsCkBAIC01MzgsMTAgKzU0OCwyMyBAQAogCQlzZWN0b3JfdCBmcm9tID0gc3RhdGUtPnBhcnRzW3BdLmZyb207CiAJCWlmICghc2l6ZSkKIAkJCWNvbnRpbnVlOwotCQlpZiAoZnJvbSArIHNpemUgPiBnZXRfY2FwYWNpdHkoZGlzaykpIHsKKwkJaWYgKGZyb20gPj0gZ2V0X2NhcGFjaXR5KGRpc2spKSB7CiAJCQlwcmludGsoS0VSTl9XQVJOSU5HCi0JCQkJIiVzOiBwJWQgZXhjZWVkcyBkZXZpY2UgY2FwYWNpdHlcbiIsCi0JCQkJZGlzay0+ZGlza19uYW1lLCBwKTsKKwkJCSAgICAgICAiJXM6IHAlZCBpZ25vcmVkLCBzdGFydCAlbGx1IGlzIGJlaGluZCB0aGUgZW5kIG9mIHRoZSBkaXNrXG4iLAorCQkJICAgICAgIGRpc2stPmRpc2tfbmFtZSwgcCwgKHVuc2lnbmVkIGxvbmcgbG9uZykgZnJvbSk7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoZnJvbSArIHNpemUgPiBnZXRfY2FwYWNpdHkoZGlzaykpIHsKKwkJCS8qCisJCQkgKiB3ZSBjYW4gbm90IGlnbm9yZSBwYXJ0aXRpb25zIG9mIGJyb2tlbiB0YWJsZXMKKwkJCSAqIGNyZWF0ZWQgYnkgZm9yIGV4YW1wbGUgY2FtZXJhIGZpcm13YXJlLCBidXQgd2UKKwkJCSAqIGxpbWl0IHRoZW0gdG8gdGhlIGVuZCBvZiB0aGUgZGlzayB0byBhdm9pZAorCQkJICogY3JlYXRpbmcgaW52YWxpZCBibG9jayBkZXZpY2VzCisJCQkgKi8KKwkJCXByaW50ayhLRVJOX1dBUk5JTkcKKwkJCSAgICAgICAiJXM6IHAlZCBzaXplICVsbHUgbGltaXRlZCB0byBlbmQgb2YgZGlza1xuIiwKKwkJCSAgICAgICBkaXNrLT5kaXNrX25hbWUsIHAsICh1bnNpZ25lZCBsb25nIGxvbmcpIHNpemUpOworCQkJc2l6ZSA9IGdldF9jYXBhY2l0eShkaXNrKSAtIGZyb207CiAJCX0KIAkJcmVzID0gYWRkX3BhcnRpdGlvbihkaXNrLCBwLCBmcm9tLCBzaXplLCBzdGF0ZS0+cGFydHNbcF0uZmxhZ3MpOwogCQlpZiAocmVzKSB7CmRpZmYgLS1naXQgYS9mcy9wcm9jL0tjb25maWcgYi9mcy9wcm9jL0tjb25maWcKaW5kZXggNzNjZDdhNC4uNTBmOGYwNiAxMDA2NDQKLS0tIGEvZnMvcHJvYy9LY29uZmlnCisrKyBiL2ZzL3Byb2MvS2NvbmZpZwpAQCAtNTcsMyArNTcsMTMgQEAKIAkgIEFzIGl0IGlzIGdlbmVyYWxseSBhIGdvb2QgdGhpbmcsIHlvdSBzaG91bGQgc2F5IFkgaGVyZSB1bmxlc3MKIAkgIGJ1aWxkaW5nIGEga2VybmVsIGZvciBpbnN0YWxsL3Jlc2N1ZSBkaXNrcyBvciB5b3VyIHN5c3RlbSBpcyB2ZXJ5CiAJICBsaW1pdGVkIGluIG1lbW9yeS4KKworY29uZmlnIFBST0NfUEFHRV9NT05JVE9SCisgCWRlZmF1bHQgeQorCWRlcGVuZHMgb24gUFJPQ19GUyAmJiBNTVUKKwlib29sICJFbmFibGUgL3Byb2MgcGFnZSBtb25pdG9yaW5nIiBpZiBFTUJFRERFRAorIAloZWxwCisJICBWYXJpb3VzIC9wcm9jIGZpbGVzIGV4aXN0IHRvIG1vbml0b3IgcHJvY2VzcyBtZW1vcnkgdXRpbGl6YXRpb246CisJICAvcHJvYy9waWQvc21hcHMsIC9wcm9jL3BpZC9jbGVhcl9yZWZzLCAvcHJvYy9waWQvcGFnZW1hcCwKKwkgIC9wcm9jL2twYWdlY291bnQsIGFuZCAvcHJvYy9rcGFnZWZsYWdzLiBEaXNhYmxpbmcgdGhlc2UKKyAgICAgICAgICBpbnRlcmZhY2VzIHdpbGwgcmVkdWNlIHRoZSBzaXplIG9mIHRoZSBrZXJuZWwgYnkgYXBwcm94aW1hdGVseSA0a2IuCmRpZmYgLS1naXQgYS9mcy9wcm9jL2FycmF5LmMgYi9mcy9wcm9jL2FycmF5LmMKaW5kZXggNzFjOWJlNS4uYmI5ZjRiMCAxMDA2NDQKLS0tIGEvZnMvcHJvYy9hcnJheS5jCisrKyBiL2ZzL3Byb2MvYXJyYXkuYwpAQCAtODYsMTEgKzg2LDYgQEAKICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CiAjaW5jbHVkZSAiaW50ZXJuYWwuaCIKIAotLyogR2NjIG9wdGltaXplcyBhd2F5ICJzdHJsZW4oeCkiIGZvciBjb25zdGFudCB4ICovCi0jZGVmaW5lIEFEREJVRihidWZmZXIsIHN0cmluZykgXAotZG8geyBtZW1jcHkoYnVmZmVyLCBzdHJpbmcsIHN0cmxlbihzdHJpbmcpKTsgXAotICAgICBidWZmZXIgKz0gc3RybGVuKHN0cmluZyk7IH0gd2hpbGUgKDApCi0KIHN0YXRpYyBpbmxpbmUgdm9pZCB0YXNrX25hbWUoc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApCiB7CiAJaW50IGk7CkBAIC0yNjEsNyArMjU2LDYgQEAKIAlzaWdlbXB0eXNldCgmaWdub3JlZCk7CiAJc2lnZW1wdHlzZXQoJmNhdWdodCk7CiAKLQlyY3VfcmVhZF9sb2NrKCk7CiAJaWYgKGxvY2tfdGFza19zaWdoYW5kKHAsICZmbGFncykpIHsKIAkJcGVuZGluZyA9IHAtPnBlbmRpbmcuc2lnbmFsOwogCQlzaHBlbmRpbmcgPSBwLT5zaWduYWwtPnNoYXJlZF9wZW5kaW5nLnNpZ25hbDsKQEAgLTI3Miw3ICsyNjYsNiBAQAogCQlxbGltID0gcC0+c2lnbmFsLT5ybGltW1JMSU1JVF9TSUdQRU5ESU5HXS5ybGltX2N1cjsKIAkJdW5sb2NrX3Rhc2tfc2lnaGFuZChwLCAmZmxhZ3MpOwogCX0KLQlyY3VfcmVhZF91bmxvY2soKTsKIAogCXNlcV9wcmludGYobSwgIlRocmVhZHM6XHQlZFxuIiwgbnVtX3RocmVhZHMpOwogCXNlcV9wcmludGYobSwgIlNpZ1E6XHQlbHUvJWx1XG4iLCBxc2l6ZSwgcWxpbSk7CkBAIC0zOTUsMjAgKzM4OCwyMCBAQAogCiAJCS8qIGFkZCB1cCBsaXZlIHRocmVhZCBzdGF0cyBhdCB0aGUgZ3JvdXAgbGV2ZWwgKi8KIAkJaWYgKHdob2xlKSB7CisJCQlzdHJ1Y3QgdGFza19jcHV0aW1lIGNwdXRpbWU7CiAJCQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQgPSB0YXNrOwogCQkJZG8gewogCQkJCW1pbl9mbHQgKz0gdC0+bWluX2ZsdDsKIAkJCQltYWpfZmx0ICs9IHQtPm1hal9mbHQ7Ci0JCQkJdXRpbWUgPSBjcHV0aW1lX2FkZCh1dGltZSwgdGFza191dGltZSh0KSk7Ci0JCQkJc3RpbWUgPSBjcHV0aW1lX2FkZChzdGltZSwgdGFza19zdGltZSh0KSk7CiAJCQkJZ3RpbWUgPSBjcHV0aW1lX2FkZChndGltZSwgdGFza19ndGltZSh0KSk7CiAJCQkJdCA9IG5leHRfdGhyZWFkKHQpOwogCQkJfSB3aGlsZSAodCAhPSB0YXNrKTsKIAogCQkJbWluX2ZsdCArPSBzaWctPm1pbl9mbHQ7CiAJCQltYWpfZmx0ICs9IHNpZy0+bWFqX2ZsdDsKLQkJCXV0aW1lID0gY3B1dGltZV9hZGQodXRpbWUsIHNpZy0+dXRpbWUpOwotCQkJc3RpbWUgPSBjcHV0aW1lX2FkZChzdGltZSwgc2lnLT5zdGltZSk7CisJCQl0aHJlYWRfZ3JvdXBfY3B1dGltZSh0YXNrLCAmY3B1dGltZSk7CisJCQl1dGltZSA9IGNwdXRpbWUudXRpbWU7CisJCQlzdGltZSA9IGNwdXRpbWUuc3RpbWU7CiAJCQlndGltZSA9IGNwdXRpbWVfYWRkKGd0aW1lLCBzaWctPmd0aW1lKTsKIAkJfQogCmRpZmYgLS1naXQgYS9mcy9wcm9jL2Jhc2UuYyBiL2ZzL3Byb2MvYmFzZS5jCmluZGV4IGEyODg0MGIuLmI1OTE4YWUgMTAwNjQ0Ci0tLSBhL2ZzL3Byb2MvYmFzZS5jCisrKyBiL2ZzL3Byb2MvYmFzZS5jCkBAIC0xNDgsOSArMTQ4LDYgQEAKIAlyZXR1cm4gY291bnQ7CiB9CiAKLWludCBtYXBzX3Byb3RlY3Q7Ci1FWFBPUlRfU1lNQk9MKG1hcHNfcHJvdGVjdCk7Ci0KIHN0YXRpYyBzdHJ1Y3QgZnNfc3RydWN0ICpnZXRfZnNfc3RydWN0KHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaykKIHsKIAlzdHJ1Y3QgZnNfc3RydWN0ICpmczsKQEAgLTE2NCw3ICsxNjEsNiBAQAogCiBzdGF0aWMgaW50IGdldF9ucl90aHJlYWRzKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKQogewotCS8qIE11c3QgYmUgY2FsbGVkIHdpdGggdGhlIHJjdV9yZWFkX2xvY2sgaGVsZCAqLwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IGNvdW50ID0gMDsKIApAQCAtNDcxLDE0ICs0NjcsMTAgQEAKIAogCXN0cnVjdCBybGltaXQgcmxpbVtSTElNX05MSU1JVFNdOwogCi0JcmN1X3JlYWRfbG9jaygpOwotCWlmICghbG9ja190YXNrX3NpZ2hhbmQodGFzaywmZmxhZ3MpKSB7Ci0JCXJjdV9yZWFkX3VubG9jaygpOworCWlmICghbG9ja190YXNrX3NpZ2hhbmQodGFzaywgJmZsYWdzKSkKIAkJcmV0dXJuIDA7Ci0JfQogCW1lbWNweShybGltLCB0YXNrLT5zaWduYWwtPnJsaW0sIHNpemVvZihzdHJ1Y3QgcmxpbWl0KSAqIFJMSU1fTkxJTUlUUyk7CiAJdW5sb2NrX3Rhc2tfc2lnaGFuZCh0YXNrLCAmZmxhZ3MpOwotCXJjdV9yZWFkX3VubG9jaygpOwogCiAJLyoKIAkgKiBwcmludCB0aGUgZmlsZSBoZWFkZXIKQEAgLTI0NDMsNiArMjQzNSwxMyBAQAogfQogI2VuZGlmIC8qIENPTkZJR19UQVNLX0lPX0FDQ09VTlRJTkcgKi8KIAorc3RhdGljIGludCBwcm9jX3BpZF9wZXJzb25hbGl0eShzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCBwaWRfbmFtZXNwYWNlICpucywKKwkJCQlzdHJ1Y3QgcGlkICpwaWQsIHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaykKK3sKKwlzZXFfcHJpbnRmKG0sICIlMDh4XG4iLCB0YXNrLT5wZXJzb25hbGl0eSk7CisJcmV0dXJuIDA7Cit9CisKIC8qCiAgKiBUaHJlYWQgZ3JvdXBzCiAgKi8KQEAgLTI0NTksNiArMjQ1OCw3IEBACiAJUkVHKCJlbnZpcm9uIiwgICAgU19JUlVTUiwgZW52aXJvbiksCiAJSU5GKCJhdXh2IiwgICAgICAgU19JUlVTUiwgcGlkX2F1eHYpLAogCU9ORSgic3RhdHVzIiwgICAgIFNfSVJVR08sIHBpZF9zdGF0dXMpLAorCU9ORSgicGVyc29uYWxpdHkiLCBTX0lSVVNSLCBwaWRfcGVyc29uYWxpdHkpLAogCUlORigibGltaXRzIiwJICBTX0lSVVNSLCBwaWRfbGltaXRzKSwKICNpZmRlZiBDT05GSUdfU0NIRURfREVCVUcKIAlSRUcoInNjaGVkIiwgICAgICBTX0lSVUdPfFNfSVdVU1IsIHBpZF9zY2hlZCksCkBAIC0yNzk0LDYgKzI3OTQsNyBAQAogCVJFRygiZW52aXJvbiIsICAgU19JUlVTUiwgZW52aXJvbiksCiAJSU5GKCJhdXh2IiwgICAgICBTX0lSVVNSLCBwaWRfYXV4diksCiAJT05FKCJzdGF0dXMiLCAgICBTX0lSVUdPLCBwaWRfc3RhdHVzKSwKKwlPTkUoInBlcnNvbmFsaXR5IiwgU19JUlVTUiwgcGlkX3BlcnNvbmFsaXR5KSwKIAlJTkYoImxpbWl0cyIsCSBTX0lSVVNSLCBwaWRfbGltaXRzKSwKICNpZmRlZiBDT05GSUdfU0NIRURfREVCVUcKIAlSRUcoInNjaGVkIiwgICAgIFNfSVJVR098U19JV1VTUiwgcGlkX3NjaGVkKSwKQEAgLTMwODgsOSArMzA4OSw3IEBACiAJZ2VuZXJpY19maWxsYXR0cihpbm9kZSwgc3RhdCk7CiAKIAlpZiAocCkgewotCQlyY3VfcmVhZF9sb2NrKCk7CiAJCXN0YXQtPm5saW5rICs9IGdldF9ucl90aHJlYWRzKHApOwotCQlyY3VfcmVhZF91bmxvY2soKTsKIAkJcHV0X3Rhc2tfc3RydWN0KHApOwogCX0KIApkaWZmIC0tZ2l0IGEvZnMvcHJvYy9pbm9kZS5jIGIvZnMvcHJvYy9pbm9kZS5jCmluZGV4IDhiYjAzZjAuLmM2YjRmYTcgMTAwNjQ0Ci0tLSBhL2ZzL3Byb2MvaW5vZGUuYworKysgYi9mcy9wcm9jL2lub2RlLmMKQEAgLTM0Miw3ICszNDIsNyBAQAogCWlmICghcGRlLT5wcm9jX2ZvcHMpIHsKIAkJc3Bpbl91bmxvY2soJnBkZS0+cGRlX3VubG9hZF9sb2NrKTsKIAkJa2ZyZWUocGRlbyk7Ci0JCXJldHVybiBydjsKKwkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCXBkZS0+cGRlX3VzZXJzKys7CiAJb3BlbiA9IHBkZS0+cHJvY19mb3BzLT5vcGVuOwpkaWZmIC0tZ2l0IGEvZnMvcHJvYy9pbnRlcm5hbC5oIGIvZnMvcHJvYy9pbnRlcm5hbC5oCmluZGV4IDQ0MjIwMjMuLjNiZmI3YjggMTAwNjQ0Ci0tLSBhL2ZzL3Byb2MvaW50ZXJuYWwuaAorKysgYi9mcy9wcm9jL2ludGVybmFsLmgKQEAgLTQ1LDggKzQ1LDYgQEAKIGV4dGVybiBpbnQgbm9tbXVfdm1hX3Nob3coc3RydWN0IHNlcV9maWxlICosIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqKTsKICNlbmRpZgogCi1leHRlcm4gaW50IG1hcHNfcHJvdGVjdDsKLQogZXh0ZXJuIGludCBwcm9jX3RpZF9zdGF0KHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IHBpZF9uYW1lc3BhY2UgKm5zLAogCQkJCXN0cnVjdCBwaWQgKnBpZCwgc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKTsKIGV4dGVybiBpbnQgcHJvY190Z2lkX3N0YXQoc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3QgcGlkX25hbWVzcGFjZSAqbnMsCmRpZmYgLS1naXQgYS9mcy9wcm9jL3Byb2NfbWlzYy5jIGIvZnMvcHJvYy9wcm9jX21pc2MuYwppbmRleCAyOWUyMGM2Li43ZWE1MmM3IDEwMDY0NAotLS0gYS9mcy9wcm9jL3Byb2NfbWlzYy5jCisrKyBiL2ZzL3Byb2MvcHJvY19taXNjLmMKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L21tem9uZS5oPgogI2luY2x1ZGUgPGxpbnV4L3BhZ2VtYXAuaD4KKyNpbmNsdWRlIDxsaW51eC9pcnEuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9zd2FwLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgpAQCAtNDUsNyArNDYsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2Jsa2Rldi5oPgogI2luY2x1ZGUgPGxpbnV4L2h1Z2V0bGIuaD4KICNpbmNsdWRlIDxsaW51eC9qaWZmaWVzLmg+Ci0jaW5jbHVkZSA8bGludXgvc3lzcnEuaD4KICNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CiAjaW5jbHVkZSA8bGludXgvY3Jhc2hfZHVtcC5oPgogI2luY2x1ZGUgPGxpbnV4L3BpZF9uYW1lc3BhY2UuaD4KQEAgLTY4LDcgKzY4LDYgQEAKIGV4dGVybiBpbnQgZ2V0X2hhcmR3YXJlX2xpc3QoY2hhciAqKTsKIGV4dGVybiBpbnQgZ2V0X3N0cmFtX2xpc3QoY2hhciAqKTsKIGV4dGVybiBpbnQgZ2V0X2V4ZWNfZG9tYWluX2xpc3QoY2hhciAqKTsKLWV4dGVybiBpbnQgZ2V0X2RtYV9saXN0KGNoYXIgKik7CiAKIHN0YXRpYyBpbnQgcHJvY19jYWxjX21ldHJpY3MoY2hhciAqcGFnZSwgY2hhciAqKnN0YXJ0LCBvZmZfdCBvZmYsCiAJCQkJIGludCBjb3VudCwgaW50ICplb2YsIGludCBsZW4pCkBAIC0xMzgsNiArMTM3LDggQEAKIAl1bnNpZ25lZCBsb25nIGFsbG93ZWQ7CiAJc3RydWN0IHZtYWxsb2NfaW5mbyB2bWk7CiAJbG9uZyBjYWNoZWQ7CisJdW5zaWduZWQgbG9uZyBwYWdlc1tOUl9MUlVfTElTVFNdOworCWludCBscnU7CiAKIC8qCiAgKiBkaXNwbGF5IGluIGtpbG9ieXRlcy4KQEAgLTE1Niw1MSArMTU3LDcwIEBACiAKIAlnZXRfdm1hbGxvY19pbmZvKCZ2bWkpOwogCisJZm9yIChscnUgPSBMUlVfQkFTRTsgbHJ1IDwgTlJfTFJVX0xJU1RTOyBscnUrKykKKwkJcGFnZXNbbHJ1XSA9IGdsb2JhbF9wYWdlX3N0YXRlKE5SX0xSVV9CQVNFICsgbHJ1KTsKKwogCS8qCiAJICogVGFnZ2VkIGZvcm1hdCwgZm9yIGVhc3kgZ3JlcHBpbmcgYW5kIGV4cGFuc2lvbi4KIAkgKi8KIAlsZW4gPSBzcHJpbnRmKHBhZ2UsCi0JCSJNZW1Ub3RhbDogICAgICU4bHUga0JcbiIKLQkJIk1lbUZyZWU6ICAgICAgJThsdSBrQlxuIgotCQkiQnVmZmVyczogICAgICAlOGx1IGtCXG4iCi0JCSJDYWNoZWQ6ICAgICAgICU4bHUga0JcbiIKLQkJIlN3YXBDYWNoZWQ6ICAgJThsdSBrQlxuIgotCQkiQWN0aXZlOiAgICAgICAlOGx1IGtCXG4iCi0JCSJJbmFjdGl2ZTogICAgICU4bHUga0JcbiIKKwkJIk1lbVRvdGFsOiAgICAgICAlOGx1IGtCXG4iCisJCSJNZW1GcmVlOiAgICAgICAgJThsdSBrQlxuIgorCQkiQnVmZmVyczogICAgICAgICU4bHUga0JcbiIKKwkJIkNhY2hlZDogICAgICAgICAlOGx1IGtCXG4iCisJCSJTd2FwQ2FjaGVkOiAgICAgJThsdSBrQlxuIgorCQkiQWN0aXZlOiAgICAgICAgICU4bHUga0JcbiIKKwkJIkluYWN0aXZlOiAgICAgICAlOGx1IGtCXG4iCisJCSJBY3RpdmUoYW5vbik6ICAgJThsdSBrQlxuIgorCQkiSW5hY3RpdmUoYW5vbik6ICU4bHUga0JcbiIKKwkJIkFjdGl2ZShmaWxlKTogICAlOGx1IGtCXG4iCisJCSJJbmFjdGl2ZShmaWxlKTogJThsdSBrQlxuIgorI2lmZGVmIENPTkZJR19VTkVWSUNUQUJMRV9MUlUKKwkJIlVuZXZpY3RhYmxlOiAgICAlOGx1IGtCXG4iCisJCSJNbG9ja2VkOiAgICAgICAgJThsdSBrQlxuIgorI2VuZGlmCiAjaWZkZWYgQ09ORklHX0hJR0hNRU0KLQkJIkhpZ2hUb3RhbDogICAgJThsdSBrQlxuIgotCQkiSGlnaEZyZWU6ICAgICAlOGx1IGtCXG4iCi0JCSJMb3dUb3RhbDogICAgICU4bHUga0JcbiIKLQkJIkxvd0ZyZWU6ICAgICAgJThsdSBrQlxuIgorCQkiSGlnaFRvdGFsOiAgICAgICU4bHUga0JcbiIKKwkJIkhpZ2hGcmVlOiAgICAgICAlOGx1IGtCXG4iCisJCSJMb3dUb3RhbDogICAgICAgJThsdSBrQlxuIgorCQkiTG93RnJlZTogICAgICAgICU4bHUga0JcbiIKICNlbmRpZgotCQkiU3dhcFRvdGFsOiAgICAlOGx1IGtCXG4iCi0JCSJTd2FwRnJlZTogICAgICU4bHUga0JcbiIKLQkJIkRpcnR5OiAgICAgICAgJThsdSBrQlxuIgotCQkiV3JpdGViYWNrOiAgICAlOGx1IGtCXG4iCi0JCSJBbm9uUGFnZXM6ICAgICU4bHUga0JcbiIKLQkJIk1hcHBlZDogICAgICAgJThsdSBrQlxuIgotCQkiU2xhYjogICAgICAgICAlOGx1IGtCXG4iCi0JCSJTUmVjbGFpbWFibGU6ICU4bHUga0JcbiIKLQkJIlNVbnJlY2xhaW06ICAgJThsdSBrQlxuIgotCQkiUGFnZVRhYmxlczogICAlOGx1IGtCXG4iCisJCSJTd2FwVG90YWw6ICAgICAgJThsdSBrQlxuIgorCQkiU3dhcEZyZWU6ICAgICAgICU4bHUga0JcbiIKKwkJIkRpcnR5OiAgICAgICAgICAlOGx1IGtCXG4iCisJCSJXcml0ZWJhY2s6ICAgICAgJThsdSBrQlxuIgorCQkiQW5vblBhZ2VzOiAgICAgICU4bHUga0JcbiIKKwkJIk1hcHBlZDogICAgICAgICAlOGx1IGtCXG4iCisJCSJTbGFiOiAgICAgICAgICAgJThsdSBrQlxuIgorCQkiU1JlY2xhaW1hYmxlOiAgICU4bHUga0JcbiIKKwkJIlNVbnJlY2xhaW06ICAgICAlOGx1IGtCXG4iCisJCSJQYWdlVGFibGVzOiAgICAgJThsdSBrQlxuIgogI2lmZGVmIENPTkZJR19RVUlDS0xJU1QKLQkJIlF1aWNrbGlzdHM6ICAgJThsdSBrQlxuIgorCQkiUXVpY2tsaXN0czogICAgICU4bHUga0JcbiIKICNlbmRpZgotCQkiTkZTX1Vuc3RhYmxlOiAlOGx1IGtCXG4iCi0JCSJCb3VuY2U6ICAgICAgICU4bHUga0JcbiIKLQkJIldyaXRlYmFja1RtcDogJThsdSBrQlxuIgotCQkiQ29tbWl0TGltaXQ6ICAlOGx1IGtCXG4iCi0JCSJDb21taXR0ZWRfQVM6ICU4bHUga0JcbiIKLQkJIlZtYWxsb2NUb3RhbDogJThsdSBrQlxuIgotCQkiVm1hbGxvY1VzZWQ6ICAlOGx1IGtCXG4iCi0JCSJWbWFsbG9jQ2h1bms6ICU4bHUga0JcbiIsCisJCSJORlNfVW5zdGFibGU6ICAgJThsdSBrQlxuIgorCQkiQm91bmNlOiAgICAgICAgICU4bHUga0JcbiIKKwkJIldyaXRlYmFja1RtcDogICAlOGx1IGtCXG4iCisJCSJDb21taXRMaW1pdDogICAgJThsdSBrQlxuIgorCQkiQ29tbWl0dGVkX0FTOiAgICU4bHUga0JcbiIKKwkJIlZtYWxsb2NUb3RhbDogICAlOGx1IGtCXG4iCisJCSJWbWFsbG9jVXNlZDogICAgJThsdSBrQlxuIgorCQkiVm1hbGxvY0NodW5rOiAgICU4bHUga0JcbiIsCiAJCUsoaS50b3RhbHJhbSksCiAJCUsoaS5mcmVlcmFtKSwKIAkJSyhpLmJ1ZmZlcnJhbSksCiAJCUsoY2FjaGVkKSwKIAkJSyh0b3RhbF9zd2FwY2FjaGVfcGFnZXMpLAotCQlLKGdsb2JhbF9wYWdlX3N0YXRlKE5SX0FDVElWRSkpLAotCQlLKGdsb2JhbF9wYWdlX3N0YXRlKE5SX0lOQUNUSVZFKSksCisJCUsocGFnZXNbTFJVX0FDVElWRV9BTk9OXSAgICsgcGFnZXNbTFJVX0FDVElWRV9GSUxFXSksCisJCUsocGFnZXNbTFJVX0lOQUNUSVZFX0FOT05dICsgcGFnZXNbTFJVX0lOQUNUSVZFX0ZJTEVdKSwKKwkJSyhwYWdlc1tMUlVfQUNUSVZFX0FOT05dKSwKKwkJSyhwYWdlc1tMUlVfSU5BQ1RJVkVfQU5PTl0pLAorCQlLKHBhZ2VzW0xSVV9BQ1RJVkVfRklMRV0pLAorCQlLKHBhZ2VzW0xSVV9JTkFDVElWRV9GSUxFXSksCisjaWZkZWYgQ09ORklHX1VORVZJQ1RBQkxFX0xSVQorCQlLKHBhZ2VzW0xSVV9VTkVWSUNUQUJMRV0pLAorCQlLKGdsb2JhbF9wYWdlX3N0YXRlKE5SX01MT0NLKSksCisjZW5kaWYKICNpZmRlZiBDT05GSUdfSElHSE1FTQogCQlLKGkudG90YWxoaWdoKSwKIAkJSyhpLmZyZWVoaWdoKSwKQEAgLTUwMiwxNyArNTIyLDEzIEBACiAKIHN0YXRpYyBpbnQgc2hvd19zdGF0KHN0cnVjdCBzZXFfZmlsZSAqcCwgdm9pZCAqdikKIHsKLQlpbnQgaTsKKwlpbnQgaSwgajsKIAl1bnNpZ25lZCBsb25nIGppZjsKIAljcHV0aW1lNjRfdCB1c2VyLCBuaWNlLCBzeXN0ZW0sIGlkbGUsIGlvd2FpdCwgaXJxLCBzb2Z0aXJxLCBzdGVhbDsKIAljcHV0aW1lNjRfdCBndWVzdDsKIAl1NjQgc3VtID0gMDsKIAlzdHJ1Y3QgdGltZXNwZWMgYm9vdHRpbWU7Ci0JdW5zaWduZWQgaW50ICpwZXJfaXJxX3N1bTsKLQotCXBlcl9pcnFfc3VtID0ga3phbGxvYyhzaXplb2YodW5zaWduZWQgaW50KSpOUl9JUlFTLCBHRlBfS0VSTkVMKTsKLQlpZiAoIXBlcl9pcnFfc3VtKQotCQlyZXR1cm4gLUVOT01FTTsKKwl1bnNpZ25lZCBpbnQgcGVyX2lycV9zdW07CiAKIAl1c2VyID0gbmljZSA9IHN5c3RlbSA9IGlkbGUgPSBpb3dhaXQgPQogCQlpcnEgPSBzb2Z0aXJxID0gc3RlYWwgPSBjcHV0aW1lNjRfemVybzsKQEAgLTUyMSw4ICs1MzcsNiBAQAogCWppZiA9IGJvb3R0aW1lLnR2X3NlYzsKIAogCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShpKSB7Ci0JCWludCBqOwotCiAJCXVzZXIgPSBjcHV0aW1lNjRfYWRkKHVzZXIsIGtzdGF0X2NwdShpKS5jcHVzdGF0LnVzZXIpOwogCQluaWNlID0gY3B1dGltZTY0X2FkZChuaWNlLCBrc3RhdF9jcHUoaSkuY3B1c3RhdC5uaWNlKTsKIAkJc3lzdGVtID0gY3B1dGltZTY0X2FkZChzeXN0ZW0sIGtzdGF0X2NwdShpKS5jcHVzdGF0LnN5c3RlbSk7CkBAIC01MzIsMTEgKzU0NiwxMCBAQAogCQlzb2Z0aXJxID0gY3B1dGltZTY0X2FkZChzb2Z0aXJxLCBrc3RhdF9jcHUoaSkuY3B1c3RhdC5zb2Z0aXJxKTsKIAkJc3RlYWwgPSBjcHV0aW1lNjRfYWRkKHN0ZWFsLCBrc3RhdF9jcHUoaSkuY3B1c3RhdC5zdGVhbCk7CiAJCWd1ZXN0ID0gY3B1dGltZTY0X2FkZChndWVzdCwga3N0YXRfY3B1KGkpLmNwdXN0YXQuZ3Vlc3QpOwotCQlmb3IgKGogPSAwOyBqIDwgTlJfSVJRUzsgaisrKSB7Ci0JCQl1bnNpZ25lZCBpbnQgdGVtcCA9IGtzdGF0X2NwdShpKS5pcnFzW2pdOwotCQkJc3VtICs9IHRlbXA7Ci0JCQlwZXJfaXJxX3N1bVtqXSArPSB0ZW1wOwotCQl9CisKKwkJZm9yX2VhY2hfaXJxX25yKGopCisJCQlzdW0gKz0ga3N0YXRfaXJxc19jcHUoaiwgaSk7CisKIAkJc3VtICs9IGFyY2hfaXJxX3N0YXRfY3B1KGkpOwogCX0KIAlzdW0gKz0gYXJjaF9pcnFfc3RhdCgpOwpAQCAtNTc4LDggKzU5MSwxNSBAQAogCX0KIAlzZXFfcHJpbnRmKHAsICJpbnRyICVsbHUiLCAodW5zaWduZWQgbG9uZyBsb25nKXN1bSk7CiAKLQlmb3IgKGkgPSAwOyBpIDwgTlJfSVJRUzsgaSsrKQotCQlzZXFfcHJpbnRmKHAsICIgJXUiLCBwZXJfaXJxX3N1bVtpXSk7CisJLyogc3VtIGFnYWluID8gaXQgY291bGQgYmUgdXBkYXRlZD8gKi8KKwlmb3JfZWFjaF9pcnFfbnIoaikgeworCQlwZXJfaXJxX3N1bSA9IDA7CisKKwkJZm9yX2VhY2hfcG9zc2libGVfY3B1KGkpCisJCQlwZXJfaXJxX3N1bSArPSBrc3RhdF9pcnFzX2NwdShqLCBpKTsKKworCQlzZXFfcHJpbnRmKHAsICIgJXUiLCBwZXJfaXJxX3N1bSk7CisJfQogCiAJc2VxX3ByaW50ZihwLAogCQkiXG5jdHh0ICVsbHVcbiIKQEAgLTU5Myw3ICs2MTMsNiBAQAogCQlucl9ydW5uaW5nKCksCiAJCW5yX2lvd2FpdCgpKTsKIAotCWtmcmVlKHBlcl9pcnFfc3VtKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNjMyLDE1ICs2NTEsMTQgQEAKICAqLwogc3RhdGljIHZvaWQgKmludF9zZXFfc3RhcnQoc3RydWN0IHNlcV9maWxlICpmLCBsb2ZmX3QgKnBvcykKIHsKLQlyZXR1cm4gKCpwb3MgPD0gTlJfSVJRUykgPyBwb3MgOiBOVUxMOworCXJldHVybiAoKnBvcyA8PSBucl9pcnFzKSA/IHBvcyA6IE5VTEw7CiB9CiAKKwogc3RhdGljIHZvaWQgKmludF9zZXFfbmV4dChzdHJ1Y3Qgc2VxX2ZpbGUgKmYsIHZvaWQgKnYsIGxvZmZfdCAqcG9zKQogewogCSgqcG9zKSsrOwotCWlmICgqcG9zID4gTlJfSVJRUykKLQkJcmV0dXJuIE5VTEw7Ci0JcmV0dXJuIHBvczsKKwlyZXR1cm4gKCpwb3MgPD0gbnJfaXJxcykgPyBwb3MgOiBOVUxMOwogfQogCiBzdGF0aWMgdm9pZCBpbnRfc2VxX3N0b3Aoc3RydWN0IHNlcV9maWxlICpmLCB2b2lkICp2KQpAQCAtNjQ4LDcgKzY2Niw2IEBACiAJLyogTm90aGluZyB0byBkbyAqLwogfQogCi0KIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgaW50X3NlcV9vcHMgPSB7CiAJLnN0YXJ0ID0gaW50X3NlcV9zdGFydCwKIAkubmV4dCAgPSBpbnRfc2VxX25leHQsCkBAIC02ODQsNiArNzAxLDcgQEAKIAlyZXR1cm4gcHJvY19jYWxjX21ldHJpY3MocGFnZSwgc3RhcnQsIG9mZiwgY291bnQsIGVvZiwgbGVuKTsKIH0KIAorI2lmZGVmIENPTkZJR19GSUxFX0xPQ0tJTkcKIHN0YXRpYyBpbnQgbG9ja3Nfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCkKIHsKIAlyZXR1cm4gc2VxX29wZW4oZmlscCwgJmxvY2tzX3NlcV9vcGVyYXRpb25zKTsKQEAgLTY5NSw2ICs3MTMsNyBAQAogCS5sbHNlZWsJCT0gc2VxX2xzZWVrLAogCS5yZWxlYXNlCT0gc2VxX3JlbGVhc2UsCiB9OworI2VuZGlmIC8qIENPTkZJR19GSUxFX0xPQ0tJTkcgKi8KIAogc3RhdGljIGludCBleGVjZG9tYWluc19yZWFkX3Byb2MoY2hhciAqcGFnZSwgY2hhciAqKnN0YXJ0LCBvZmZfdCBvZmYsCiAJCQkJIGludCBjb3VudCwgaW50ICplb2YsIHZvaWQgKmRhdGEpCkBAIC03MDMsMjggKzcyMiw2IEBACiAJcmV0dXJuIHByb2NfY2FsY19tZXRyaWNzKHBhZ2UsIHN0YXJ0LCBvZmYsIGNvdW50LCBlb2YsIGxlbik7CiB9CiAKLSNpZmRlZiBDT05GSUdfTUFHSUNfU1lTUlEKLS8qCi0gKiB3cml0aW5nICdDJyB0byAvcHJvYy9zeXNycS10cmlnZ2VyIGlzIGxpa2Ugc3lzcnEtQwotICovCi1zdGF0aWMgc3NpemVfdCB3cml0ZV9zeXNycV90cmlnZ2VyKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmLAotCQkJCSAgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQotewotCWlmIChjb3VudCkgewotCQljaGFyIGM7Ci0KLQkJaWYgKGdldF91c2VyKGMsIGJ1ZikpCi0JCQlyZXR1cm4gLUVGQVVMVDsKLQkJX19oYW5kbGVfc3lzcnEoYywgTlVMTCwgMCk7Ci0JfQotCXJldHVybiBjb3VudDsKLX0KLQotc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcHJvY19zeXNycV90cmlnZ2VyX29wZXJhdGlvbnMgPSB7Ci0JLndyaXRlCQk9IHdyaXRlX3N5c3JxX3RyaWdnZXIsCi19OwotI2VuZGlmCi0KICNpZmRlZiBDT05GSUdfUFJPQ19QQUdFX01PTklUT1IKICNkZWZpbmUgS1BNU0laRSBzaXplb2YodTY0KQogI2RlZmluZSBLUE1NQVNLIChLUE1TSVpFIC0gMSkKQEAgLTg4OCw3ICs4ODUsOSBAQAogI2lmZGVmIENPTkZJR19QUklOVEsKIAlwcm9jX2NyZWF0ZSgia21zZyIsIFNfSVJVU1IsIE5VTEwsICZwcm9jX2ttc2dfb3BlcmF0aW9ucyk7CiAjZW5kaWYKKyNpZmRlZiBDT05GSUdfRklMRV9MT0NLSU5HCiAJcHJvY19jcmVhdGUoImxvY2tzIiwgMCwgTlVMTCwgJnByb2NfbG9ja3Nfb3BlcmF0aW9ucyk7CisjZW5kaWYKIAlwcm9jX2NyZWF0ZSgiZGV2aWNlcyIsIDAsIE5VTEwsICZwcm9jX2RldmluZm9fb3BlcmF0aW9ucyk7CiAJcHJvY19jcmVhdGUoImNwdWluZm8iLCAwLCBOVUxMLCAmcHJvY19jcHVpbmZvX29wZXJhdGlvbnMpOwogI2lmZGVmIENPTkZJR19CTE9DSwpAQCAtOTMxLDcgKzkzMCw0IEBACiAjaWZkZWYgQ09ORklHX1BST0NfVk1DT1JFCiAJcHJvY192bWNvcmUgPSBwcm9jX2NyZWF0ZSgidm1jb3JlIiwgU19JUlVTUiwgTlVMTCwgJnByb2Nfdm1jb3JlX29wZXJhdGlvbnMpOwogI2VuZGlmCi0jaWZkZWYgQ09ORklHX01BR0lDX1NZU1JRCi0JcHJvY19jcmVhdGUoInN5c3JxLXRyaWdnZXIiLCBTX0lXVVNSLCBOVUxMLCAmcHJvY19zeXNycV90cmlnZ2VyX29wZXJhdGlvbnMpOwotI2VuZGlmCiB9CmRpZmYgLS1naXQgYS9mcy9wcm9jL3Byb2Nfc3lzY3RsLmMgYi9mcy9wcm9jL3Byb2Nfc3lzY3RsLmMKaW5kZXggZjlhOGI4OS4uOTQ1YTgxMCAxMDA2NDQKLS0tIGEvZnMvcHJvYy9wcm9jX3N5c2N0bC5jCisrKyBiL2ZzL3Byb2MvcHJvY19zeXNjdGwuYwpAQCAtNjYsNyArNjYsNyBAQAogCXJldHVybiBOVUxMOwogfQogCi1zdHJ1Y3QgY3RsX3RhYmxlX2hlYWRlciAqZ3JhYl9oZWFkZXIoc3RydWN0IGlub2RlICppbm9kZSkKK3N0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlX2hlYWRlciAqZ3JhYl9oZWFkZXIoc3RydWN0IGlub2RlICppbm9kZSkKIHsKIAlpZiAoUFJPQ19JKGlub2RlKS0+c3lzY3RsKQogCQlyZXR1cm4gc3lzY3RsX2hlYWRfZ3JhYihQUk9DX0koaW5vZGUpLT5zeXNjdGwpOwpAQCAtMzk1LDEwICszOTUsMTAgQEAKIAkuZF9jb21wYXJlCT0gcHJvY19zeXNfY29tcGFyZSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnByb2Nfc3lzX3Jvb3Q7Ci0KIGludCBwcm9jX3N5c19pbml0KHZvaWQpCiB7CisJc3RydWN0IHByb2NfZGlyX2VudHJ5ICpwcm9jX3N5c19yb290OworCiAJcHJvY19zeXNfcm9vdCA9IHByb2NfbWtkaXIoInN5cyIsIE5VTEwpOwogCXByb2Nfc3lzX3Jvb3QtPnByb2NfaW9wcyA9ICZwcm9jX3N5c19kaXJfb3BlcmF0aW9uczsKIAlwcm9jX3N5c19yb290LT5wcm9jX2ZvcHMgPSAmcHJvY19zeXNfZGlyX2ZpbGVfb3BlcmF0aW9uczsKZGlmZiAtLWdpdCBhL2ZzL3Byb2MvdGFza19tbXUuYyBiL2ZzL3Byb2MvdGFza19tbXUuYwppbmRleCA3M2QxODkxLi40ODA2ODMwIDEwMDY0NAotLS0gYS9mcy9wcm9jL3Rhc2tfbW11LmMKKysrIGIvZnMvcHJvYy90YXNrX21tdS5jCkBAIC0yMTAsOSArMjEwLDYgQEAKIAlkZXZfdCBkZXYgPSAwOwogCWludCBsZW47CiAKLQlpZiAobWFwc19wcm90ZWN0ICYmICFwdHJhY2VfbWF5X2FjY2Vzcyh0YXNrLCBQVFJBQ0VfTU9ERV9SRUFEKSkKLQkJcmV0dXJuIC1FQUNDRVM7Ci0KIAlpZiAoZmlsZSkgewogCQlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gdm1hLT52bV9maWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlOwogCQlkZXYgPSBpbm9kZS0+aV9zYi0+c19kZXY7CkBAIC03NDIsMjIgKzczOSwxMSBAQAogI2lmZGVmIENPTkZJR19OVU1BCiBleHRlcm4gaW50IHNob3dfbnVtYV9tYXAoc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KTsKIAotc3RhdGljIGludCBzaG93X251bWFfbWFwX2NoZWNrZWQoc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KQotewotCXN0cnVjdCBwcm9jX21hcHNfcHJpdmF0ZSAqcHJpdiA9IG0tPnByaXZhdGU7Ci0Jc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrID0gcHJpdi0+dGFzazsKLQotCWlmIChtYXBzX3Byb3RlY3QgJiYgIXB0cmFjZV9tYXlfYWNjZXNzKHRhc2ssIFBUUkFDRV9NT0RFX1JFQUQpKQotCQlyZXR1cm4gLUVBQ0NFUzsKLQotCXJldHVybiBzaG93X251bWFfbWFwKG0sIHYpOwotfQotCiBzdGF0aWMgY29uc3Qgc3RydWN0IHNlcV9vcGVyYXRpb25zIHByb2NfcGlkX251bWFfbWFwc19vcCA9IHsKICAgICAgICAgLnN0YXJ0ICA9IG1fc3RhcnQsCiAgICAgICAgIC5uZXh0ICAgPSBtX25leHQsCiAgICAgICAgIC5zdG9wICAgPSBtX3N0b3AsCi0gICAgICAgIC5zaG93ICAgPSBzaG93X251bWFfbWFwX2NoZWNrZWQKKyAgICAgICAgLnNob3cgICA9IHNob3dfbnVtYV9tYXAsCiB9OwogCiBzdGF0aWMgaW50IG51bWFfbWFwc19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQpkaWZmIC0tZ2l0IGEvZnMvcHJvYy90YXNrX25vbW11LmMgYi9mcy9wcm9jL3Rhc2tfbm9tbXUuYwppbmRleCA1ZDg0ZTcxLi4yMTliZDc5IDEwMDY0NAotLS0gYS9mcy9wcm9jL3Rhc2tfbm9tbXUuYworKysgYi9mcy9wcm9jL3Rhc2tfbm9tbXUuYwpAQCAtMTEwLDExICsxMTAsNiBAQAogc3RhdGljIGludCBzaG93X21hcChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKl92bWwpCiB7CiAJc3RydWN0IHZtX2xpc3Rfc3RydWN0ICp2bWwgPSBfdm1sOwotCXN0cnVjdCBwcm9jX21hcHNfcHJpdmF0ZSAqcHJpdiA9IG0tPnByaXZhdGU7Ci0Jc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrID0gcHJpdi0+dGFzazsKLQotCWlmIChtYXBzX3Byb3RlY3QgJiYgIXB0cmFjZV9tYXlfYWNjZXNzKHRhc2ssIFBUUkFDRV9NT0RFX1JFQUQpKQotCQlyZXR1cm4gLUVBQ0NFUzsKIAogCXJldHVybiBub21tdV92bWFfc2hvdyhtLCB2bWwtPnZtYSk7CiB9CmRpZmYgLS1naXQgYS9mcy9wcm9jL3ZtY29yZS5jIGIvZnMvcHJvYy92bWNvcmUuYwppbmRleCA5YWMwZjVlLi5jZDljYTY3IDEwMDY0NAotLS0gYS9mcy9wcm9jL3ZtY29yZS5jCisrKyBiL2ZzL3Byb2Mvdm1jb3JlLmMKQEAgLTMyLDkgKzMyLDYgQEAKIC8qIFRvdGFsIHNpemUgb2Ygdm1jb3JlIGZpbGUuICovCiBzdGF0aWMgdTY0IHZtY29yZV9zaXplOwogCi0vKiBTdG9yZXMgdGhlIHBoeXNpY2FsIGFkZHJlc3Mgb2YgZWxmIGhlYWRlciBvZiBjcmFzaCBpbWFnZS4gKi8KLXVuc2lnbmVkIGxvbmcgbG9uZyBlbGZjb3JlaGRyX2FkZHIgPSBFTEZDT1JFX0FERFJfTUFYOwotCiBzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnByb2Nfdm1jb3JlID0gTlVMTDsKIAogLyogUmVhZHMgYSBwYWdlIGZyb20gdGhlIG9sZG1lbSBkZXZpY2UgZnJvbSBnaXZlbiBvZmZzZXQuICovCkBAIC0xNjUsMTQgKzE2Miw4IEBACiAJcmV0dXJuIGFjYzsKIH0KIAotc3RhdGljIGludCBvcGVuX3ZtY29yZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCkKLXsKLQlyZXR1cm4gMDsKLX0KLQogY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBwcm9jX3ZtY29yZV9vcGVyYXRpb25zID0gewogCS5yZWFkCQk9IHJlYWRfdm1jb3JlLAotCS5vcGVuCQk9IG9wZW5fdm1jb3JlLAogfTsKIAogc3RhdGljIHN0cnVjdCB2bWNvcmUqIF9faW5pdCBnZXRfbmV3X2VsZW1lbnQodm9pZCkKQEAgLTY1Myw3ICs2NDQsNyBAQAogCWludCByYyA9IDA7CiAKIAkvKiBJZiBlbGZjb3JlaGRyPSBoYXMgYmVlbiBwYXNzZWQgaW4gY21kbGluZSwgdGhlbiBjYXB0dXJlIHRoZSBkdW1wLiovCi0JaWYgKCEoZWxmY29yZWhkcl9hZGRyIDwgRUxGQ09SRV9BRERSX01BWCkpCisJaWYgKCEoaXNfdm1jb3JlX3VzYWJsZSgpKSkKIAkJcmV0dXJuIHJjOwogCXJjID0gcGFyc2VfY3Jhc2hfZWxmX2hlYWRlcnMoKTsKIAlpZiAocmMpIHsKZGlmZiAtLWdpdCBhL2ZzL3JhbWZzL2ZpbGUtbm9tbXUuYyBiL2ZzL3JhbWZzL2ZpbGUtbm9tbXUuYwppbmRleCA1MTQ1Y2I5Li43NmFjZGJjIDEwMDY0NAotLS0gYS9mcy9yYW1mcy9maWxlLW5vbW11LmMKKysrIGIvZnMvcmFtZnMvZmlsZS1ub21tdS5jCkBAIC0xMTIsMTIgKzExMiwxMiBAQAogCQkJZ290byBhZGRfZXJyb3I7CiAKIAkJaWYgKCFwYWdldmVjX2FkZCgmbHJ1X3B2ZWMsIHBhZ2UpKQotCQkJX19wYWdldmVjX2xydV9hZGQoJmxydV9wdmVjKTsKKwkJCV9fcGFnZXZlY19scnVfYWRkX2ZpbGUoJmxydV9wdmVjKTsKIAogCQl1bmxvY2tfcGFnZShwYWdlKTsKIAl9CiAKLQlwYWdldmVjX2xydV9hZGQoJmxydV9wdmVjKTsKKwlwYWdldmVjX2xydV9hZGRfZmlsZSgmbHJ1X3B2ZWMpOwogCXJldHVybiAwOwogCiAgZnNpemVfZXhjZWVkZWQ6CmRpZmYgLS1naXQgYS9mcy9yYW1mcy9pbm9kZS5jIGIvZnMvcmFtZnMvaW5vZGUuYwppbmRleCBiMTMxMjM0Li5mMDMxZDFjIDEwMDY0NAotLS0gYS9mcy9yYW1mcy9pbm9kZS5jCisrKyBiL2ZzL3JhbWZzL2lub2RlLmMKQEAgLTYxLDYgKzYxLDcgQEAKIAkJaW5vZGUtPmlfbWFwcGluZy0+YV9vcHMgPSAmcmFtZnNfYW9wczsKIAkJaW5vZGUtPmlfbWFwcGluZy0+YmFja2luZ19kZXZfaW5mbyA9ICZyYW1mc19iYWNraW5nX2Rldl9pbmZvOwogCQltYXBwaW5nX3NldF9nZnBfbWFzayhpbm9kZS0+aV9tYXBwaW5nLCBHRlBfSElHSFVTRVIpOworCQltYXBwaW5nX3NldF91bmV2aWN0YWJsZShpbm9kZS0+aV9tYXBwaW5nKTsKIAkJaW5vZGUtPmlfYXRpbWUgPSBpbm9kZS0+aV9tdGltZSA9IGlub2RlLT5pX2N0aW1lID0gQ1VSUkVOVF9USU1FOwogCQlzd2l0Y2ggKG1vZGUgJiBTX0lGTVQpIHsKIAkJZGVmYXVsdDoKZGlmZiAtLWdpdCBhL2ZzL3JlaXNlcmZzL3Byb2Nmcy5jIGIvZnMvcmVpc2VyZnMvcHJvY2ZzLmMKaW5kZXggYjlkYmVlYy4uMzcxNzNmYSAxMDA2NDQKLS0tIGEvZnMvcmVpc2VyZnMvcHJvY2ZzLmMKKysrIGIvZnMvcmVpc2VyZnMvcHJvY2ZzLmMKQEAgLTgsOCArOCw2IEBACiAKIC8qIHByb2MgaW5mbyBzdXBwb3J0IGEgbGEgb25lIGNyZWF0ZWQgYnkgU2l6aWZAQm90aWsuUlUgZm9yIFBHQyAqLwogCi0vKiAkSWQ6IHByb2Nmcy5jLHYgMS4xLjguMiAyMDAxLzA3LzE1IDE3OjA4OjQyIGdvZCBFeHAgJCAqLwotCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvdGltZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CkBAIC02MjEsNyArNjE5LDYgQEAKICNlbmRpZgogCiAvKgotICogJExvZzogcHJvY2ZzLmMsdiAkCiAgKiBSZXZpc2lvbiAxLjEuOC4yICAyMDAxLzA3LzE1IDE3OjA4OjQyICBnb2QKICAqICAuIHVzZSBnZXRfc3VwZXIoKSBpbiBwcm9jZnMuYwogICogIC4gcmVtb3ZlIHJlbW92ZV9zYXZlX2xpbmsoKSBmcm9tIHJlaXNlcmZzX2RvX3RydW5jYXRlKCkKZGlmZiAtLWdpdCBhL2ZzL3JlaXNlcmZzL3hhdHRyLmMgYi9mcy9yZWlzZXJmcy94YXR0ci5jCmluZGV4IGJiM2NiNWIuLmFkOTI0NjEgMTAwNjQ0Ci0tLSBhL2ZzL3JlaXNlcmZzL3hhdHRyLmMKKysrIGIvZnMvcmVpc2VyZnMveGF0dHIuYwpAQCAtMTU1LDcgKzE1NSw3IEBACiAJeGFkaXIgPSBvcGVuX3hhX2Rpcihpbm9kZSwgZmxhZ3MpOwogCWlmIChJU19FUlIoeGFkaXIpKSB7CiAJCXJldHVybiBFUlJfQ0FTVCh4YWRpcik7Ci0JfSBlbHNlIGlmICh4YWRpciAmJiAheGFkaXItPmRfaW5vZGUpIHsKKwl9IGVsc2UgaWYgKCF4YWRpci0+ZF9pbm9kZSkgewogCQlkcHV0KHhhZGlyKTsKIAkJcmV0dXJuIEVSUl9QVFIoLUVOT0RBVEEpOwogCX0KZGlmZiAtLWdpdCBhL2ZzL3NlcV9maWxlLmMgYi9mcy9zZXFfZmlsZS5jCmluZGV4IGJkMjBmN2YuLmViYTJlYWIgMTAwNjQ0Ci0tLSBhL2ZzL3NlcV9maWxlLmMKKysrIGIvZnMvc2VxX2ZpbGUuYwpAQCAtNDUyLDE3ICs0NTIsMzQgQEAKIAogaW50IHNlcV9iaXRtYXAoc3RydWN0IHNlcV9maWxlICptLCB1bnNpZ25lZCBsb25nICpiaXRzLCB1bnNpZ25lZCBpbnQgbnJfYml0cykKIHsKLQlzaXplX3QgbGVuID0gYml0bWFwX3NjbnByaW50Zl9sZW4obnJfYml0cyk7Ci0KLQlpZiAobS0+Y291bnQgKyBsZW4gPCBtLT5zaXplKSB7Ci0JCWJpdG1hcF9zY25wcmludGYobS0+YnVmICsgbS0+Y291bnQsIG0tPnNpemUgLSBtLT5jb3VudCwKLQkJCQkgYml0cywgbnJfYml0cyk7Ci0JCW0tPmNvdW50ICs9IGxlbjsKLQkJcmV0dXJuIDA7CisJaWYgKG0tPmNvdW50IDwgbS0+c2l6ZSkgeworCQlpbnQgbGVuID0gYml0bWFwX3NjbnByaW50ZihtLT5idWYgKyBtLT5jb3VudCwKKwkJCQltLT5zaXplIC0gbS0+Y291bnQsIGJpdHMsIG5yX2JpdHMpOworCQlpZiAobS0+Y291bnQgKyBsZW4gPCBtLT5zaXplKSB7CisJCQltLT5jb3VudCArPSBsZW47CisJCQlyZXR1cm4gMDsKKwkJfQogCX0KIAltLT5jb3VudCA9IG0tPnNpemU7CiAJcmV0dXJuIC0xOwogfQorRVhQT1JUX1NZTUJPTChzZXFfYml0bWFwKTsKKworaW50IHNlcV9iaXRtYXBfbGlzdChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHVuc2lnbmVkIGxvbmcgKmJpdHMsCisJCXVuc2lnbmVkIGludCBucl9iaXRzKQoreworCWlmIChtLT5jb3VudCA8IG0tPnNpemUpIHsKKwkJaW50IGxlbiA9IGJpdG1hcF9zY25saXN0cHJpbnRmKG0tPmJ1ZiArIG0tPmNvdW50LAorCQkJCW0tPnNpemUgLSBtLT5jb3VudCwgYml0cywgbnJfYml0cyk7CisJCWlmIChtLT5jb3VudCArIGxlbiA8IG0tPnNpemUpIHsKKwkJCW0tPmNvdW50ICs9IGxlbjsKKwkJCXJldHVybiAwOworCQl9CisJfQorCW0tPmNvdW50ID0gbS0+c2l6ZTsKKwlyZXR1cm4gLTE7Cit9CitFWFBPUlRfU1lNQk9MKHNlcV9iaXRtYXBfbGlzdCk7CiAKIHN0YXRpYyB2b2lkICpzaW5nbGVfc3RhcnQoc3RydWN0IHNlcV9maWxlICpwLCBsb2ZmX3QgKnBvcykKIHsKZGlmZiAtLWdpdCBhL2ZzL3N5c2ZzL2Jpbi5jIGIvZnMvc3lzZnMvYmluLmMKaW5kZXggMDA2ZmM2NC4uNjZmNmU1OCAxMDA2NDQKLS0tIGEvZnMvc3lzZnMvYmluLmMKKysrIGIvZnMvc3lzZnMvYmluLmMKQEAgLTYxLDYgKzYxLDcgQEAKIAlpbnQgc2l6ZSA9IGRlbnRyeS0+ZF9pbm9kZS0+aV9zaXplOwogCWxvZmZfdCBvZmZzID0gKm9mZjsKIAlpbnQgY291bnQgPSBtaW5fdChzaXplX3QsIGJ5dGVzLCBQQUdFX1NJWkUpOworCWNoYXIgKnRlbXA7CiAKIAlpZiAoc2l6ZSkgewogCQlpZiAob2ZmcyA+IHNpemUpCkBAIC02OSwyMyArNzAsMzMgQEAKIAkJCWNvdW50ID0gc2l6ZSAtIG9mZnM7CiAJfQogCisJdGVtcCA9IGttYWxsb2MoY291bnQsIEdGUF9LRVJORUwpOworCWlmICghdGVtcCkKKwkJcmV0dXJuIC1FTk9NRU07CisKIAltdXRleF9sb2NrKCZiYi0+bXV0ZXgpOwogCiAJY291bnQgPSBmaWxsX3JlYWQoZGVudHJ5LCBiYi0+YnVmZmVyLCBvZmZzLCBjb3VudCk7Ci0JaWYgKGNvdW50IDwgMCkKLQkJZ290byBvdXRfdW5sb2NrOworCWlmIChjb3VudCA8IDApIHsKKwkJbXV0ZXhfdW5sb2NrKCZiYi0+bXV0ZXgpOworCQlnb3RvIG91dF9mcmVlOworCX0KIAotCWlmIChjb3B5X3RvX3VzZXIodXNlcmJ1ZiwgYmItPmJ1ZmZlciwgY291bnQpKSB7CisJbWVtY3B5KHRlbXAsIGJiLT5idWZmZXIsIGNvdW50KTsKKworCW11dGV4X3VubG9jaygmYmItPm11dGV4KTsKKworCWlmIChjb3B5X3RvX3VzZXIodXNlcmJ1ZiwgdGVtcCwgY291bnQpKSB7CiAJCWNvdW50ID0gLUVGQVVMVDsKLQkJZ290byBvdXRfdW5sb2NrOworCQlnb3RvIG91dF9mcmVlOwogCX0KIAogCXByX2RlYnVnKCJvZmZzID0gJWxsZCwgKm9mZiA9ICVsbGQsIGNvdW50ID0gJWRcbiIsIG9mZnMsICpvZmYsIGNvdW50KTsKIAogCSpvZmYgPSBvZmZzICsgY291bnQ7CiAKLSBvdXRfdW5sb2NrOgotCW11dGV4X3VubG9jaygmYmItPm11dGV4KTsKKyBvdXRfZnJlZToKKwlrZnJlZSh0ZW1wKTsKIAlyZXR1cm4gY291bnQ7CiB9CiAKQEAgLTExOCw2ICsxMjksNyBAQAogCWludCBzaXplID0gZGVudHJ5LT5kX2lub2RlLT5pX3NpemU7CiAJbG9mZl90IG9mZnMgPSAqb2ZmOwogCWludCBjb3VudCA9IG1pbl90KHNpemVfdCwgYnl0ZXMsIFBBR0VfU0laRSk7CisJY2hhciAqdGVtcDsKIAogCWlmIChzaXplKSB7CiAJCWlmIChvZmZzID4gc2l6ZSkKQEAgLTEyNiwxOSArMTM4LDI3IEBACiAJCQljb3VudCA9IHNpemUgLSBvZmZzOwogCX0KIAotCW11dGV4X2xvY2soJmJiLT5tdXRleCk7CisJdGVtcCA9IGttYWxsb2MoY291bnQsIEdGUF9LRVJORUwpOworCWlmICghdGVtcCkKKwkJcmV0dXJuIC1FTk9NRU07CiAKLQlpZiAoY29weV9mcm9tX3VzZXIoYmItPmJ1ZmZlciwgdXNlcmJ1ZiwgY291bnQpKSB7CisJaWYgKGNvcHlfZnJvbV91c2VyKHRlbXAsIHVzZXJidWYsIGNvdW50KSkgewogCQljb3VudCA9IC1FRkFVTFQ7Ci0JCWdvdG8gb3V0X3VubG9jazsKKwkJZ290byBvdXRfZnJlZTsKIAl9CiAKKwltdXRleF9sb2NrKCZiYi0+bXV0ZXgpOworCisJbWVtY3B5KGJiLT5idWZmZXIsIHRlbXAsIGNvdW50KTsKKwogCWNvdW50ID0gZmx1c2hfd3JpdGUoZGVudHJ5LCBiYi0+YnVmZmVyLCBvZmZzLCBjb3VudCk7CisJbXV0ZXhfdW5sb2NrKCZiYi0+bXV0ZXgpOworCiAJaWYgKGNvdW50ID4gMCkKIAkJKm9mZiA9IG9mZnMgKyBjb3VudDsKIAotIG91dF91bmxvY2s6Ci0JbXV0ZXhfdW5sb2NrKCZiYi0+bXV0ZXgpOworb3V0X2ZyZWU6CisJa2ZyZWUodGVtcCk7CiAJcmV0dXJuIGNvdW50OwogfQogCmRpZmYgLS1naXQgYS9mcy9zeXNmcy9kaXIuYyBiL2ZzL3N5c2ZzL2Rpci5jCmluZGV4IGFlZGFlYmEuLjNhMDVhNTkgMTAwNjQ0Ci0tLSBhL2ZzL3N5c2ZzL2Rpci5jCisrKyBiL2ZzL3N5c2ZzL2Rpci5jCkBAIC0zNzAsMTcgKzM3MCwxNyBAQAogCW1lbXNldChhY3h0LCAwLCBzaXplb2YoKmFjeHQpKTsKIAlhY3h0LT5wYXJlbnRfc2QgPSBwYXJlbnRfc2Q7CiAKLQkvKiBMb29rdXAgcGFyZW50IGlub2RlLiAgaW5vZGUgaW5pdGlhbGl6YXRpb24gYW5kIElfTkVXCi0JICogY2xlYXJpbmcgYXJlIHByb3RlY3RlZCBieSBzeXNmc19tdXRleC4gIEJ5IGdyYWJiaW5nIGl0IGFuZAotCSAqIGxvb2tpbmcgdXAgd2l0aCBfbm93YWl0IHZhcmlhbnQsIGlub2RlIHN0YXRlIGNhbiBiZQotCSAqIGRldGVybWluZWQgcmVsaWFibHkuCisJLyogTG9va3VwIHBhcmVudCBpbm9kZS4gIGlub2RlIGluaXRpYWxpemF0aW9uIGlzIHByb3RlY3RlZCBieQorCSAqIHN5c2ZzX211dGV4LCBzbyBpbm9kZSBleGlzdGVuY2UgY2FuIGJlIGRldGVybWluZWQgYnkKKwkgKiBsb29raW5nIHVwIGlub2RlIHdoaWxlIGhvbGRpbmcgc3lzZnNfbXV0ZXguCiAJICovCiAJbXV0ZXhfbG9jaygmc3lzZnNfbXV0ZXgpOwogCi0JaW5vZGUgPSBpbG9va3VwNV9ub3dhaXQoc3lzZnNfc2IsIHBhcmVudF9zZC0+c19pbm8sIHN5c2ZzX2lsb29rdXBfdGVzdCwKLQkJCQlwYXJlbnRfc2QpOworCWlub2RlID0gaWxvb2t1cDUoc3lzZnNfc2IsIHBhcmVudF9zZC0+c19pbm8sIHN5c2ZzX2lsb29rdXBfdGVzdCwKKwkJCSBwYXJlbnRfc2QpOworCWlmIChpbm9kZSkgeworCQlXQVJOX09OKGlub2RlLT5pX3N0YXRlICYgSV9ORVcpOwogCi0JaWYgKGlub2RlICYmICEoaW5vZGUtPmlfc3RhdGUgJiBJX05FVykpIHsKIAkJLyogcGFyZW50IGlub2RlIGF2YWlsYWJsZSAqLwogCQlhY3h0LT5wYXJlbnRfaW5vZGUgPSBpbm9kZTsKIApAQCAtMzkzLDggKzM5Myw3IEBACiAJCQltdXRleF9sb2NrKCZpbm9kZS0+aV9tdXRleCk7CiAJCQltdXRleF9sb2NrKCZzeXNmc19tdXRleCk7CiAJCX0KLQl9IGVsc2UKLQkJaXB1dChpbm9kZSk7CisJfQogfQogCiAvKioKQEAgLTYzNiw2ICs2MzUsNyBAQAogCiAJcmV0dXJuIHNkOwogfQorRVhQT1JUX1NZTUJPTF9HUEwoc3lzZnNfZ2V0X2RpcmVudCk7CiAKIHN0YXRpYyBpbnQgY3JlYXRlX2RpcihzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IHN5c2ZzX2RpcmVudCAqcGFyZW50X3NkLAogCQkgICAgICBjb25zdCBjaGFyICpuYW1lLCBzdHJ1Y3Qgc3lzZnNfZGlyZW50ICoqcF9zZCkKQEAgLTgyOSwxNiArODI5LDEyIEBACiAJaWYgKCFuZXdfZGVudHJ5KQogCQlnb3RvIG91dF91bmxvY2s7CiAKLQkvKiByZW5hbWUga29iamVjdCBhbmQgc3lzZnNfZGlyZW50ICovCisJLyogcmVuYW1lIHN5c2ZzX2RpcmVudCAqLwogCWVycm9yID0gLUVOT01FTTsKIAluZXdfbmFtZSA9IGR1cF9uYW1lID0ga3N0cmR1cChuZXdfbmFtZSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFuZXdfbmFtZSkKIAkJZ290byBvdXRfdW5sb2NrOwogCi0JZXJyb3IgPSBrb2JqZWN0X3NldF9uYW1lKGtvYmosICIlcyIsIG5ld19uYW1lKTsKLQlpZiAoZXJyb3IpCi0JCWdvdG8gb3V0X3VubG9jazsKLQogCWR1cF9uYW1lID0gc2QtPnNfbmFtZTsKIAlzZC0+c19uYW1lID0gbmV3X25hbWU7CiAKZGlmZiAtLWdpdCBhL2ZzL3N5c2ZzL2ZpbGUuYyBiL2ZzL3N5c2ZzL2ZpbGUuYwppbmRleCBjOWU0ZTUwLi4xZjRhM2Y4IDEwMDY0NAotLS0gYS9mcy9zeXNmcy9maWxlLmMKKysrIGIvZnMvc3lzZnMvZmlsZS5jCkBAIC0xOSwxMCArMTksMTggQEAKICNpbmNsdWRlIDxsaW51eC9wb2xsLmg+CiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisjaW5jbHVkZSA8bGludXgvbGltaXRzLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KIAogI2luY2x1ZGUgInN5c2ZzLmgiCiAKKy8qIHVzZWQgaW4gY3Jhc2ggZHVtcHMgdG8gaGVscCB3aXRoIGRlYnVnZ2luZyAqLworc3RhdGljIGNoYXIgbGFzdF9zeXNmc19maWxlW1BBVEhfTUFYXTsKK3ZvaWQgc3lzZnNfcHJpbnRrX2xhc3RfZmlsZSh2b2lkKQoreworCXByaW50ayhLRVJOX0VNRVJHICJsYXN0IHN5c2ZzIGZpbGU6ICVzXG4iLCBsYXN0X3N5c2ZzX2ZpbGUpOworfQorCiAvKgogICogVGhlcmUncyBvbmUgc3lzZnNfYnVmZmVyIGZvciBlYWNoIG9wZW4gZmlsZSBhbmQgb25lCiAgKiBzeXNmc19vcGVuX2RpcmVudCBmb3IgZWFjaCBzeXNmc19kaXJlbnQgd2l0aCBvbmUgb3IgbW9yZSBvcGVuCkBAIC0zMjgsNiArMzM2LDExIEBACiAJc3RydWN0IHN5c2ZzX2J1ZmZlciAqYnVmZmVyOwogCXN0cnVjdCBzeXNmc19vcHMgKm9wczsKIAlpbnQgZXJyb3IgPSAtRUFDQ0VTOworCWNoYXIgKnA7CisKKwlwID0gZF9wYXRoKCZmaWxlLT5mX3BhdGgsIGxhc3Rfc3lzZnNfZmlsZSwgc2l6ZW9mKGxhc3Rfc3lzZnNfZmlsZSkpOworCWlmIChwKQorCQltZW1tb3ZlKGxhc3Rfc3lzZnNfZmlsZSwgcCwgc3RybGVuKHApICsgMSk7CiAKIAkvKiBuZWVkIGF0dHJfc2QgZm9yIGF0dHIgYW5kIG9wcywgaXRzIHBhcmVudCBmb3Iga29iaiAqLwogCWlmICghc3lzZnNfZ2V0X2FjdGl2ZV90d28oYXR0cl9zZCkpCkBAIC00NDAsNyArNDUzLDIzIEBACiAJcmV0dXJuIFBPTExFUlJ8UE9MTFBSSTsKIH0KIAotdm9pZCBzeXNmc19ub3RpZnkoc3RydWN0IGtvYmplY3QgKmssIGNoYXIgKmRpciwgY2hhciAqYXR0cikKK3ZvaWQgc3lzZnNfbm90aWZ5X2RpcmVudChzdHJ1Y3Qgc3lzZnNfZGlyZW50ICpzZCkKK3sKKwlzdHJ1Y3Qgc3lzZnNfb3Blbl9kaXJlbnQgKm9kOworCisJc3Bpbl9sb2NrKCZzeXNmc19vcGVuX2RpcmVudF9sb2NrKTsKKworCW9kID0gc2QtPnNfYXR0ci5vcGVuOworCWlmIChvZCkgeworCQlhdG9taWNfaW5jKCZvZC0+ZXZlbnQpOworCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJm9kLT5wb2xsKTsKKwl9CisKKwlzcGluX3VubG9jaygmc3lzZnNfb3Blbl9kaXJlbnRfbG9jayk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChzeXNmc19ub3RpZnlfZGlyZW50KTsKKwordm9pZCBzeXNmc19ub3RpZnkoc3RydWN0IGtvYmplY3QgKmssIGNvbnN0IGNoYXIgKmRpciwgY29uc3QgY2hhciAqYXR0cikKIHsKIAlzdHJ1Y3Qgc3lzZnNfZGlyZW50ICpzZCA9IGstPnNkOwogCkBAIC00NTAsMTkgKzQ3OSw4IEBACiAJCXNkID0gc3lzZnNfZmluZF9kaXJlbnQoc2QsIGRpcik7CiAJaWYgKHNkICYmIGF0dHIpCiAJCXNkID0gc3lzZnNfZmluZF9kaXJlbnQoc2QsIGF0dHIpOwotCWlmIChzZCkgewotCQlzdHJ1Y3Qgc3lzZnNfb3Blbl9kaXJlbnQgKm9kOwotCi0JCXNwaW5fbG9jaygmc3lzZnNfb3Blbl9kaXJlbnRfbG9jayk7Ci0KLQkJb2QgPSBzZC0+c19hdHRyLm9wZW47Ci0JCWlmIChvZCkgewotCQkJYXRvbWljX2luYygmb2QtPmV2ZW50KTsKLQkJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmb2QtPnBvbGwpOwotCQl9Ci0KLQkJc3Bpbl91bmxvY2soJnN5c2ZzX29wZW5fZGlyZW50X2xvY2spOwotCX0KKwlpZiAoc2QpCisJCXN5c2ZzX25vdGlmeV9kaXJlbnQoc2QpOwogCiAJbXV0ZXhfdW5sb2NrKCZzeXNmc19tdXRleCk7CiB9CmRpZmYgLS1naXQgYS9mcy9zeXNmcy9tb3VudC5jIGIvZnMvc3lzZnMvbW91bnQuYwppbmRleCAxNGYwMDIzLi5hYjM0M2UzIDEwMDY0NAotLS0gYS9mcy9zeXNmcy9tb3VudC5jCisrKyBiL2ZzL3N5c2ZzL21vdW50LmMKQEAgLTE2LDYgKzE2LDcgQEAKICNpbmNsdWRlIDxsaW51eC9tb3VudC5oPgogI2luY2x1ZGUgPGxpbnV4L3BhZ2VtYXAuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAKICNpbmNsdWRlICJzeXNmcy5oIgogCkBAIC0xMTUsMyArMTE2LDE3IEBACiAJc3lzZnNfZGlyX2NhY2hlcCA9IE5VTEw7CiAJZ290byBvdXQ7CiB9CisKKyN1bmRlZiBzeXNmc19nZXQKK3N0cnVjdCBzeXNmc19kaXJlbnQgKnN5c2ZzX2dldChzdHJ1Y3Qgc3lzZnNfZGlyZW50ICpzZCkKK3sKKwlyZXR1cm4gX19zeXNmc19nZXQoc2QpOworfQorRVhQT1JUX1NZTUJPTF9HUEwoc3lzZnNfZ2V0KTsKKworI3VuZGVmIHN5c2ZzX3B1dAordm9pZCBzeXNmc19wdXQoc3RydWN0IHN5c2ZzX2RpcmVudCAqc2QpCit7CisJX19zeXNmc19wdXQoc2QpOworfQorRVhQT1JUX1NZTUJPTF9HUEwoc3lzZnNfcHV0KTsKZGlmZiAtLWdpdCBhL2ZzL3N5c2ZzL3N5c2ZzLmggYi9mcy9zeXNmcy9zeXNmcy5oCmluZGV4IGE1ZGI0OTYuLjkzYzZkNmIgMTAwNjQ0Ci0tLSBhL2ZzL3N5c2ZzL3N5c2ZzLmgKKysrIGIvZnMvc3lzZnMvc3lzZnMuaApAQCAtMTI0LDcgKzEyNCw3IEBACiAJCQlzdHJ1Y3Qgc3lzZnNfZGlyZW50ICoqcF9zZCk7CiB2b2lkIHN5c2ZzX3JlbW92ZV9zdWJkaXIoc3RydWN0IHN5c2ZzX2RpcmVudCAqc2QpOwogCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBzeXNmc19kaXJlbnQgKnN5c2ZzX2dldChzdHJ1Y3Qgc3lzZnNfZGlyZW50ICpzZCkKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHN5c2ZzX2RpcmVudCAqX19zeXNmc19nZXQoc3RydWN0IHN5c2ZzX2RpcmVudCAqc2QpCiB7CiAJaWYgKHNkKSB7CiAJCVdBUk5fT04oIWF0b21pY19yZWFkKCZzZC0+c19jb3VudCkpOwpAQCAtMTMyLDEyICsxMzIsMTQgQEAKIAl9CiAJcmV0dXJuIHNkOwogfQorI2RlZmluZSBzeXNmc19nZXQoc2QpIF9fc3lzZnNfZ2V0KHNkKQogCi1zdGF0aWMgaW5saW5lIHZvaWQgc3lzZnNfcHV0KHN0cnVjdCBzeXNmc19kaXJlbnQgKnNkKQorc3RhdGljIGlubGluZSB2b2lkIF9fc3lzZnNfcHV0KHN0cnVjdCBzeXNmc19kaXJlbnQgKnNkKQogewogCWlmIChzZCAmJiBhdG9taWNfZGVjX2FuZF90ZXN0KCZzZC0+c19jb3VudCkpCiAJCXJlbGVhc2Vfc3lzZnNfZGlyZW50KHNkKTsKIH0KKyNkZWZpbmUgc3lzZnNfcHV0KHNkKSBfX3N5c2ZzX3B1dChzZCkKIAogLyoKICAqIGlub2RlLmMKZGlmZiAtLWdpdCBhL2ZzL3ViaWZzL2J1ZGdldC5jIGIvZnMvdWJpZnMvYnVkZ2V0LmMKaW5kZXggNzNkYjQ2NC4uMWE0OTczZSAxMDA2NDQKLS0tIGEvZnMvdWJpZnMvYnVkZ2V0LmMKKysrIGIvZnMvdWJpZnMvYnVkZ2V0LmMKQEAgLTQxNCwxOSArNDE0LDIxIEBACiAJICogICAgQGMtPmxzdC5lbXB0eV9sZWJzICsgQGMtPmZyZWVhYmxlX2NudCArIEBjLT5pZHhfZ2NfY250IC0KIAkgKiAgICBAYy0+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+bm9kZV90eXBlID09IFVCSUZTX1BBRF9OT0RFKSB7CmRpZmYgLS1naXQgYS9mcy91Ymlmcy9zdXBlci5jIGIvZnMvdWJpZnMvc3VwZXIuYwppbmRleCAzZjQ5MDIwLi44NzgwZWZiIDEwMDY0NAotLS0gYS9mcy91Ymlmcy9zdXBlci5jCisrKyBiL2ZzL3ViaWZzL3N1cGVyLmMKQEAgLTQwMSw2ICs0MDEsMTYgQEAKIAllbHNlIGlmIChjLT5tb3VudF9vcHRzLnVubW91bnRfbW9kZSA9PSAxKQogCQlzZXFfcHJpbnRmKHMsICIsbm9ybV91bm1vdW50Iik7CiAKKwlpZiAoYy0+bW91bnRfb3B0cy5idWxrX3JlYWQgPT0gMikKKwkJc2VxX3ByaW50ZihzLCAiLGJ1bGtfcmVhZCIpOworCWVsc2UgaWYgKGMtPm1vdW50X29wdHMuYnVsa19yZWFkID09IDEpCisJCXNlcV9wcmludGYocywgIixub19idWxrX3JlYWQiKTsKKworCWlmIChjLT5tb3VudF9vcHRzLmNoa19kYXRhX2NyYyA9PSAyKQorCQlzZXFfcHJpbnRmKHMsICIsY2hrX2RhdGFfY3JjIik7CisJZWxzZSBpZiAoYy0+bW91bnRfb3B0cy5jaGtfZGF0YV9jcmMgPT0gMSkKKwkJc2VxX3ByaW50ZihzLCAiLG5vX2Noa19kYXRhX2NyYyIpOworCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTQwOCwxMyArNDE4LDI2IEBACiB7CiAJc3RydWN0IHViaWZzX2luZm8gKmMgPSBzYi0+c19mc19pbmZvOwogCWludCBpLCByZXQgPSAwLCBlcnI7CisJbG9uZyBsb25nIGJ1ZF9ieXRlczsKIAotCWlmIChjLT5qaGVhZHMpCisJaWYgKGMtPmpoZWFkcykgewogCQlmb3IgKGkgPSAwOyBpIDwgYy0+amhlYWRfY250OyBpKyspIHsKIAkJCWVyciA9IHViaWZzX3didWZfc3luYygmYy0+amhlYWRzW2ldLndidWYpOwogCQkJaWYgKGVyciAmJiAhcmV0KQogCQkJCXJldCA9IGVycjsKIAkJfQorCisJCS8qIENvbW1pdCB0aGUgam91cm5hbCB1bmxlc3MgaXQgaGFzIHRvbyBsaXR0bGUgZGF0YSAqLworCQlzcGluX2xvY2soJmMtPmJ1ZHNfbG9jayk7CisJCWJ1ZF9ieXRlcyA9IGMtPmJ1ZF9ieXRlczsKKwkJc3Bpbl91bmxvY2soJmMtPmJ1ZHNfbG9jayk7CisJCWlmIChidWRfYnl0ZXMgPiBjLT5sZWJfc2l6ZSkgeworCQkJZXJyID0gdWJpZnNfcnVuX2NvbW1pdChjKTsKKwkJCWlmIChlcnIpCisJCQkJcmV0dXJuIGVycjsKKwkJfQorCX0KKwogCS8qCiAJICogV2Ugb3VnaHQgdG8gY2FsbCBzeW5jIGZvciBjLT51YmkgYnV0IGl0IGRvZXMgbm90IGhhdmUgb25lLiBJZiBpdCBoYWQKIAkgKiBpdCB3b3VsZCBpbiB0dXJuIGNhbGwgbXRkLT5zeW5jLCBob3dldmVyIG10ZCBvcGVyYXRpb25zIGFyZQpAQCAtNTM4LDYgKzU2MSwxOCBAQAogCSAqIGNhbGN1bGF0aW9ucyB3aGVuIHJlcG9ydGluZyBmcmVlIHNwYWNlLgogCSAqLwogCWMtPmxlYl9vdmVyaGVhZCA9IGMtPmxlYl9zaXplICUgVUJJRlNfTUFYX0RBVEFfTk9ERV9TWjsKKwkvKiBCdWZmZXIgc2l6ZSBmb3IgYnVsay1yZWFkcyAqLworCWMtPmJ1bGtfcmVhZF9idWZfc2l6ZSA9IFVCSUZTX01BWF9CVUxLX1JFQUQgKiBVQklGU19NQVhfREFUQV9OT0RFX1NaOworCWlmIChjLT5idWxrX3JlYWRfYnVmX3NpemUgPiBjLT5sZWJfc2l6ZSkKKwkJYy0+YnVsa19yZWFkX2J1Zl9zaXplID0gYy0+bGViX3NpemU7CisJaWYgKGMtPmJ1bGtfcmVhZF9idWZfc2l6ZSA+IDEyOCAqIDEwMjQpIHsKKwkJLyogQ2hlY2sgaWYgd2UgY2FuIGttYWxsb2MgbW9yZSB0aGFuIDEyOEtpQiAqLworCQl2b2lkICp0cnkgPSBrbWFsbG9jKGMtPmJ1bGtfcmVhZF9idWZfc2l6ZSwgR0ZQX0tFUk5FTCk7CisKKwkJa2ZyZWUodHJ5KTsKKwkJaWYgKCF0cnkpCisJCQljLT5idWxrX3JlYWRfYnVmX3NpemUgPSAxMjggKiAxMDI0OworCX0KIAlyZXR1cm4gMDsKIH0KIApAQCAtODQwLDE3ICs4NzUsMjkgQEAKICAqCiAgKiBPcHRfZmFzdF91bm1vdW50OiBkbyBub3QgcnVuIGEgam91cm5hbCBjb21taXQgYmVmb3JlIHVuLW1vdW50aW5nCiAgKiBPcHRfbm9ybV91bm1vdW50OiBydW4gYSBqb3VybmFsIGNvbW1pdCBiZWZvcmUgdW4tbW91bnRpbmcKKyAqIE9wdF9idWxrX3JlYWQ6IGVuYWJsZSBidWxrLXJlYWRzCisgKiBPcHRfbm9fYnVsa19yZWFkOiBkaXNhYmxlIGJ1bGstcmVhZHMKKyAqIE9wdF9jaGtfZGF0YV9jcmM6IGNoZWNrIENSQ3Mgd2hlbiByZWFkaW5nIGRhdGEgbm9kZXMKKyAqIE9wdF9ub19jaGtfZGF0YV9jcmM6IGRvIG5vdCBjaGVjayBDUkNzIHdoZW4gcmVhZGluZyBkYXRhIG5vZGVzCiAgKiBPcHRfZXJyOiBqdXN0IGVuZCBvZiBhcnJheSBtYXJrZXIKICAqLwogZW51bSB7CiAJT3B0X2Zhc3RfdW5tb3VudCwKIAlPcHRfbm9ybV91bm1vdW50LAorCU9wdF9idWxrX3JlYWQsCisJT3B0X25vX2J1bGtfcmVhZCwKKwlPcHRfY2hrX2RhdGFfY3JjLAorCU9wdF9ub19jaGtfZGF0YV9jcmMsCiAJT3B0X2VyciwKIH07CiAKLXN0YXRpYyBtYXRjaF90YWJsZV90IHRva2VucyA9IHsKK3N0YXRpYyBjb25zdCBtYXRjaF90YWJsZV90IHRva2VucyA9IHsKIAl7T3B0X2Zhc3RfdW5tb3VudCwgImZhc3RfdW5tb3VudCJ9LAogCXtPcHRfbm9ybV91bm1vdW50LCAibm9ybV91bm1vdW50In0sCisJe09wdF9idWxrX3JlYWQsICJidWxrX3JlYWQifSwKKwl7T3B0X25vX2J1bGtfcmVhZCwgIm5vX2J1bGtfcmVhZCJ9LAorCXtPcHRfY2hrX2RhdGFfY3JjLCAiY2hrX2RhdGFfY3JjIn0sCisJe09wdF9ub19jaGtfZGF0YV9jcmMsICJub19jaGtfZGF0YV9jcmMifSwKIAl7T3B0X2VyciwgTlVMTH0sCiB9OwogCkBAIC04ODgsNiArOTM1LDIyIEBACiAJCQljLT5tb3VudF9vcHRzLnVubW91bnRfbW9kZSA9IDE7CiAJCQljLT5mYXN0X3VubW91bnQgPSAwOwogCQkJYnJlYWs7CisJCWNhc2UgT3B0X2J1bGtfcmVhZDoKKwkJCWMtPm1vdW50X29wdHMuYnVsa19yZWFkID0gMjsKKwkJCWMtPmJ1bGtfcmVhZCA9IDE7CisJCQlicmVhazsKKwkJY2FzZSBPcHRfbm9fYnVsa19yZWFkOgorCQkJYy0+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+aWlwID09IDApCi0JCQljb3JyZWN0X3BhcmVudF9rZXlzKGMsIHpub2RlKTsKIAogCQkvKiBUYWlsIHJlY3Vyc2lvbiAqLwogCQl6YnItPmtleSA9IHpuLT56YnJhbmNoWzBdLmtleTsKZGlmZiAtLWdpdCBhL2ZzL3ViaWZzL3RuY19taXNjLmMgYi9mcy91Ymlmcy90bmNfbWlzYy5jCmluZGV4IGEyNWMxY2MuLmI0OGRiOTkgMTAwNjQ0Ci0tLSBhL2ZzL3ViaWZzL3RuY19taXNjLmMKKysrIGIvZnMvdWJpZnMvdG5jX21pc2MuYwpAQCAtNDgwLDggKzQ4MCw4IEBACiAJfQogCiAJLyogTWFrZSBzdXJlIHRoZSBrZXkgb2YgdGhlIHJlYWQgbm9kZSBpcyBjb3JyZWN0ICovCi0Ja2V5X3JlYWQoYywga2V5LCAma2V5MSk7Ci0JaWYgKG1lbWNtcChub2RlICsgVUJJRlNfS0VZX09GRlNFVCwgJmtleTEsIGMtPmtleV9sZW4pKSB7CisJa2V5X3JlYWQoYywgbm9kZSArIFVCSUZTX0tFWV9PRkZTRVQsICZrZXkxKTsKKwlpZiAoIWtleXNfZXEoYywga2V5LCAma2V5MSkpIHsKIAkJdWJpZnNfZXJyKCJiYWQga2V5IGluIG5vZGUgYXQgTEVCICVkOiVkIiwKIAkJCSAgemJyLT5sbnVtLCB6YnItPm9mZnMpOwogCQlkYmdfdG5jKCJsb29rZWQgZm9yIGtleSAlcyBmb3VuZCBub2RlJ3Mga2V5ICVzIiwKZGlmZiAtLWdpdCBhL2ZzL3ViaWZzL3ViaWZzLW1lZGlhLmggYi9mcy91Ymlmcy91Ymlmcy1tZWRpYS5oCmluZGV4IGE5ZWNiZDkuLjBiMzc4MDQgMTAwNjQ0Ci0tLSBhL2ZzL3ViaWZzL3ViaWZzLW1lZGlhLmgKKysrIGIvZnMvdWJpZnMvdWJpZnMtbWVkaWEuaApAQCAtNzUsNyArNzUsNiBAQAogICovCiAjZGVmaW5lIFVCSUZTX0JMT0NLX1NJWkUgIDQwOTYKICNkZWZpbmUgVUJJRlNfQkxPQ0tfU0hJRlQgMTIKLSNkZWZpbmUgVUJJRlNfQkxPQ0tfTUFTSyAgMHgwMDAwMEZGRgogCiAvKiBVQklGUyBwYWRkaW5nIGJ5dGUgcGF0dGVybiAobXVzdCBub3QgYmUgZmlyc3Qgb3IgbGFzdCBieXRlIG9mIG5vZGUgbWFnaWMpICovCiAjZGVmaW5lIFVCSUZTX1BBRERJTkdfQllURSAweENFCmRpZmYgLS1naXQgYS9mcy91Ymlmcy91Ymlmcy5oIGIvZnMvdWJpZnMvdWJpZnMuaAppbmRleCAxN2M2MjBiLi5hN2JkMzJmIDEwMDY0NAotLS0gYS9mcy91Ymlmcy91Ymlmcy5oCisrKyBiL2ZzL3ViaWZzL3ViaWZzLmgKQEAgLTE0Miw2ICsxNDIsOSBAQAogLyogTWF4aW11bSBleHBlY3RlZCB0cmVlIGhlaWdodCBmb3IgdXNlIGJ5IGJvdHRvbV91cF9idWYgKi8KICNkZWZpbmUgQk9UVE9NX1VQX0hFSUdIVCA2NAogCisvKiBNYXhpbXVtIG51bWJlciBvZiBkYXRhIG5vZGVzIHRvIGJ1bGstcmVhZCAqLworI2RlZmluZSBVQklGU19NQVhfQlVMS19SRUFEIDMyCisKIC8qCiAgKiBMb2NrZGVwIGNsYXNzZXMgZm9yIFVCSUZTIGlub2RlIEB1aV9tdXRleC4KICAqLwpAQCAtMzI4LDkgKzMzMSwxMCBAQAogICogICAgICAgICAgICAgICB0aGlzIGlub2RlCiAgKiBAZGlydHk6IG5vbi16ZXJvIGlmIHRoZSBpbm9kZSBpcyBkaXJ0eQogICogQHhhdHRyOiBub24temVybyBpZiB0aGlzIGlzIGFuIGV4dGVuZGVkIGF0dHJpYnV0ZSBpbm9kZQorICogQGJ1bGtfcmVhZDogbm9uLXplcm8gaWYgYnVsay1yZWFkIHNob3VsZCBiZSB1c2VkCiAgKiBAdWlfbXV0ZXg6IHNlcmlhbGl6ZXMgaW5vZGUgd3JpdGUtYmFjayB3aXRoIHRoZSByZXN0IG9mIFZGUyBvcGVyYXRpb25zLAotICogICAgICAgICAgICBzZXJpYWxpemVzICJjbGVhbiA8LT4gZGlydHkiIHN0YXRlIGNoYW5nZXMsIHByb3RlY3RzIEBkaXJ0eSwKLSAqICAgICAgICAgICAgQHVpX3NpemUsIGFuZCBAeGF0dHJfc2l6ZQorICogICAgICAgICAgICBzZXJpYWxpemVzICJjbGVhbiA8LT4gZGlydHkiIHN0YXRlIGNoYW5nZXMsIHNlcmlhbGl6ZXMgYnVsay1yZWFkLAorICogICAgICAgICAgICBwcm90ZWN0cyBAZGlydHksIEBidWxrX3JlYWQsIEB1aV9zaXplLCBhbmQgQHhhdHRyX3NpemUKICAqIEB1aV9sb2NrOiBwcm90ZWN0cyBAc3luY2VkX2lfc2l6ZQogICogQHN5bmNlZF9pX3NpemU6IHN5bmNocm9uaXplZCBzaXplIG9mIGlub2RlLCBpLmUuIHRoZSB2YWx1ZSBvZiBpbm9kZSBzaXplCiAgKiAgICAgICAgICAgICAgICAgY3VycmVudGx5IHN0b3JlZCBvbiB0aGUgZmxhc2g7IHVzZWQgb25seSBmb3IgcmVndWxhciBmaWxlCkBAIC0zMzgsNiArMzQyLDggQEAKICAqIEB1aV9zaXplOiBpbm9kZSBzaXplIHVzZWQgYnkgVUJJRlMgd2hlbiB3cml0aW5nIHRvIGZsYXNoCiAgKiBAZmxhZ3M6IGlub2RlIGZsYWdzIChAVUJJRlNfQ09NUFJfRkwsIGV0YykKICAqIEBjb21wcl90eXBlOiBkZWZhdWx0IGNvbXByZXNzaW9uIHR5cGUgdXNlZCBmb3IgdGhpcyBpbm9kZQorICogQGxhc3RfcGFnZV9yZWFkOiBwYWdlIG51bWJlciBvZiBsYXN0IHBhZ2UgcmVhZCAoZm9yIGJ1bGsgcmVhZCkKKyAqIEByZWFkX2luX2Ffcm93OiBudW1iZXIgb2YgY29uc2VjdXRpdmUgcGFnZXMgcmVhZCBpbiBhIHJvdyAoZm9yIGJ1bGsgcmVhZCkKICAqIEBkYXRhX2xlbjogbGVuZ3RoIG9mIHRoZSBkYXRhIGF0dGFjaGVkIHRvIHRoZSBpbm9kZQogICogQGRhdGE6IGlub2RlJ3MgZGF0YQogICoKQEAgLTM3OSwxMiArMzg1LDE1IEBACiAJdW5zaWduZWQgaW50IHhhdHRyX25hbWVzOwogCXVuc2lnbmVkIGludCBkaXJ0eToxOwogCXVuc2lnbmVkIGludCB4YXR0cjoxOworCXVuc2lnbmVkIGludCBidWxrX3JlYWQ6MTsKIAlzdHJ1Y3QgbXV0ZXggdWlfbXV0ZXg7CiAJc3BpbmxvY2tfdCB1aV9sb2NrOwogCWxvZmZfdCBzeW5jZWRfaV9zaXplOwogCWxvZmZfdCB1aV9zaXplOwogCWludCBmbGFnczsKIAlpbnQgY29tcHJfdHlwZTsKKwlwZ29mZl90IGxhc3RfcGFnZV9yZWFkOworCXBnb2ZmX3QgcmVhZF9pbl9hX3JvdzsKIAlpbnQgZGF0YV9sZW47CiAJdm9pZCAqZGF0YTsKIH07CkBAIC02OTgsOCArNzA3LDggQEAKICAqIHN0cnVjdCB1Ymlmc196YnJhbmNoIC0ga2V5L2Nvb3JkaW5hdGUvbGVuZ3RoIGJyYW5jaCBzdG9yZWQgaW4gem5vZGVzLgogICogQGtleToga2V5CiAgKiBAem5vZGU6IHpub2RlIGFkZHJlc3MgaW4gbWVtb3J5Ci0gKiBAbG51bTogTEVCIG51bWJlciBvZiB0aGUgaW5kZXhpbmcgbm9kZQotICogQG9mZnM6IG9mZnNldCBvZiB0aGUgaW5kZXhpbmcgbm9kZSB3aXRoaW4gQGxudW0KKyAqIEBsbnVtOiBMRUIgbnVtYmVyIG9mIHRoZSB0YXJnZXQgbm9kZSAoaW5kZXhpbmcgbm9kZSBvciBkYXRhIG5vZGUpCisgKiBAb2ZmczogdGFyZ2V0IG5vZGUgb2Zmc2V0IHdpdGhpbiBAbG51bQogICogQGxlbjogdGFyZ2V0IG5vZGUgbGVuZ3RoCiAgKi8KIHN0cnVjdCB1Ymlmc196YnJhbmNoIHsKQEAgLTc0NCw2ICs3NTMsMjggQEAKIH07CiAKIC8qKgorICogc3RydWN0IGJ1X2luZm8gLSBidWxrLXJlYWQgaW5mb3JtYXRpb24KKyAqIEBrZXk6IGZpcnN0IGRhdGEgbm9kZSBrZXkKKyAqIEB6YnJhbmNoOiB6YnJhbmNoZXMgb2YgZGF0YSBub2RlcyB0byBidWxrIHJlYWQKKyAqIEBidWY6IGJ1ZmZlciB0byByZWFkIGludG8KKyAqIEBidWZfbGVuOiBidWZmZXIgbGVuZ3RoCisgKiBAZ2Nfc2VxOiBHQyBzZXF1ZW5jZSBudW1iZXIgdG8gZGV0ZWN0IHJhY2VzIHdpdGggR0MKKyAqIEBjbnQ6IG51bWJlciBvZiBkYXRhIG5vZGVzIGZvciBidWxrIHJlYWQKKyAqIEBibGtfY250OiBudW1iZXIgb2YgZGF0YSBibG9ja3MgaW5jbHVkaW5nIGhvbGVzCisgKiBAb2VmOiBlbmQgb2YgZmlsZSByZWFjaGVkCisgKi8KK3N0cnVjdCBidV9pbmZvIHsKKwl1bmlvbiB1Ymlmc19rZXkga2V5OworCXN0cnVjdCB1Ymlmc196YnJhbmNoIHpicmFuY2hbVUJJRlNfTUFYX0JVTEtfUkVBRF07CisJdm9pZCAqYnVmOworCWludCBidWZfbGVuOworCWludCBnY19zZXE7CisJaW50IGNudDsKKwlpbnQgYmxrX2NudDsKKwlpbnQgZW9mOworfTsKKworLyoqCiAgKiBzdHJ1Y3QgdWJpZnNfbm9kZV9yYW5nZSAtIG5vZGUgbGVuZ3RoIHJhbmdlIGRlc2NyaXB0aW9uIGRhdGEgc3RydWN0dXJlLgogICogQGxlbjogZml4ZWQgbm9kZSBsZW5ndGgKICAqIEBtaW5fbGVuOiBtaW5pbXVtIHBvc3NpYmxlIG5vZGUgbGVuZ3RoCkBAIC04NjIsOSArODkzLDEzIEBACiAvKioKICAqIHN0cnVjdCB1Ymlmc19tb3VudF9vcHRzIC0gVUJJRlMtc3BlY2lmaWMgbW91bnQgb3B0aW9ucyBpbmZvcm1hdGlvbi4KICAqIEB1bm1vdW50X21vZGU6IHNlbGVjdGVkIHVubW91bnQgbW9kZSAoJTAgZGVmYXVsdCwgJTEgbm9ybWFsLCAlMiBmYXN0KQorICogQGJ1bGtfcmVhZDogZW5hYmxlIGJ1bGstcmVhZHMKKyAqIEBjaGtfZGF0YV9jcmM6IGNoZWNrIENSQ3Mgd2hlbiByZWFkaW5nIGRhdGEgbm9kZXMKICAqLwogc3RydWN0IHViaWZzX21vdW50X29wdHMgewogCXVuc2lnbmVkIGludCB1bm1vdW50X21vZGU6MjsKKwl1bnNpZ25lZCBpbnQgYnVsa19yZWFkOjI7CisJdW5zaWduZWQgaW50IGNoa19kYXRhX2NyYzoyOwogfTsKIAogLyoqCkBAIC05MDUsMTMgKzk0MCwxMiBAQAogICogQGNtdF9zdGF0ZTogY29tbWl0IHN0YXRlCiAgKiBAY3NfbG9jazogY29tbWl0IHN0YXRlIGxvY2sKICAqIEBjbXRfd3E6IHdhaXQgcXVldWUgdG8gc2xlZXAgb24gaWYgdGhlIGxvZyBpcyBmdWxsIGFuZCBhIGNvbW1pdCBpcyBydW5uaW5nCisgKgogICogQGZhc3RfdW5tb3VudDogZG8gbm90IHJ1biBqb3VybmFsIGNvbW1pdCBiZWZvcmUgdW4tbW91bnRpbmcKICAqIEBiaWdfbHB0OiBmbGFnIHRoYXQgTFBUIGlzIHRvbyBiaWcgdG8gd3JpdGUgd2hvbGUgZHVyaW5nIGNvbW1pdAotICogQGNoZWNrX2xwdF9mcmVlOiBmbGFnIHRoYXQgaW5kaWNhdGVzIExQVCBHQyBtYXkgYmUgbmVlZGVkCi0gKiBAbm9zcGFjZTogbm9uLXplcm8gaWYgdGhlIGZpbGUtc3lzdGVtIGRvZXMgbm90IGhhdmUgZmxhc2ggc3BhY2UgKHVzZWQgYXMKLSAqICAgICAgICAgICBvcHRpbWl6YXRpb24pCi0gKiBAbm9zcGFjZV9ycDogdGhlIHNhbWUgYXMgQG5vc3BhY2UsIGJ1dCBhZGRpdGlvbmFsbHkgbWVhbnMgdGhhdCBldmVuIHJlc2VydmVkCi0gKiAgICAgICAgICAgICAgcG9vbCBpcyBmdWxsCisgKiBAbm9fY2hrX2RhdGFfY3JjOiBkbyBub3QgY2hlY2sgQ1JDcyB3aGVuIHJlYWRpbmcgZGF0YSBub2RlcyAoZXhjZXB0IGR1cmluZworICogICAgICAgICAgICAgICAgICAgcmVjb3ZlcnkpCisgKiBAYnVsa19yZWFkOiBlbmFibGUgYnVsay1yZWFkcwogICoKICAqIEB0bmNfbXV0ZXg6IHByb3RlY3RzIHRoZSBUcmVlIE5vZGUgQ2FjaGUgKFROQyksIEB6cm9vdCwgQGNuZXh0LCBAZW5leHQsIGFuZAogICogICAgICAgICAgICAgQGNhbGNfaWR4X3N6CkBAIC05MzUsNiArOTY5LDcgQEAKICAqIEBtc3Rfbm9kZTogbWFzdGVyIG5vZGUKICAqIEBtc3Rfb2Zmczogb2Zmc2V0IG9mIHZhbGlkIG1hc3RlciBub2RlCiAgKiBAbXN0X211dGV4OiBwcm90ZWN0cyB0aGUgbWFzdGVyIG5vZGUgYXJlYSwgQG1zdF9ub2RlLCBhbmQgQG1zdF9vZmZzCisgKiBAYnVsa19yZWFkX2J1Zl9zaXplOiBidWZmZXIgc2l6ZSBmb3IgYnVsay1yZWFkcwogICoKICAqIEBsb2dfbGViczogbnVtYmVyIG9mIGxvZ2ljYWwgZXJhc2VibG9ja3MgaW4gdGhlIGxvZwogICogQGxvZ19ieXRlczogbG9nIHNpemUgaW4gYnl0ZXMKQEAgLTk3NywxMiArMTAxMiwxNyBAQAogICogICAgICAgICAgICAgICAgICAgICAgICBidXQgd2hpY2ggc3RpbGwgaGF2ZSB0byBiZSB0YWtlbiBpbnRvIGFjY291bnQgYmVjYXVzZQogICogICAgICAgICAgICAgICAgICAgICAgICB0aGUgaW5kZXggaGFzIG5vdCBiZWVuIGNvbW1pdHRlZCBzbyBmYXIKICAqIEBzcGFjZV9sb2NrOiBwcm90ZWN0cyBAYnVkZ19pZHhfZ3Jvd3RoLCBAYnVkZ19kYXRhX2dyb3d0aCwgQGJ1ZGdfZGRfZ3Jvd3RoLAotICogICAgICAgICAgICAgIEBidWRnX3VuY29tbWl0ZWRfaWR4LCBAbWluX2lkeF9sZWJzLCBAb2xkX2lkeF9zeiwgYW5kIEBsc3Q7CisgKiAgICAgICAgICAgICAgQGJ1ZGdfdW5jb21taXRlZF9pZHgsIEBtaW5faWR4X2xlYnMsIEBvbGRfaWR4X3N6LCBAbHN0LAorICogICAgICAgICAgICAgIEBub3NwYWNlLCBhbmQgQG5vc3BhY2VfcnA7CiAgKiBAbWluX2lkeF9sZWJzOiBtaW5pbXVtIG51bWJlciBvZiBMRUJzIHJlcXVpcmVkIGZvciB0aGUgaW5kZXgKICAqIEBvbGRfaWR4X3N6OiBzaXplIG9mIGluZGV4IG9uIGZsYXNoCiAgKiBAY2FsY19pZHhfc3o6IHRlbXBvcmFyeSB2YXJpYWJsZSB3aGljaCBpcyB1c2VkIHRvIGNhbGN1bGF0ZSBuZXcgaW5kZXggc2l6ZQogICogICAgICAgICAgICAgICAoY29udGFpbnMgYWNjdXJhdGUgbmV3IGluZGV4IHNpemUgYXQgZW5kIG9mIFROQyBjb21taXQgc3RhcnQpCiAgKiBAbHN0OiBscHJvcHMgc3RhdGlzdGljcworICogQG5vc3BhY2U6IG5vbi16ZXJvIGlmIHRoZSBmaWxlLXN5c3RlbSBkb2VzIG5vdCBoYXZlIGZsYXNoIHNwYWNlICh1c2VkIGFzCisgKiAgICAgICAgICAgb3B0aW1pemF0aW9uKQorICogQG5vc3BhY2VfcnA6IHRoZSBzYW1lIGFzIEBub3NwYWNlLCBidXQgYWRkaXRpb25hbGx5IG1lYW5zIHRoYXQgZXZlbiByZXNlcnZlZAorICogICAgICAgICAgICAgIHBvb2wgaXMgZnVsbAogICoKICAqIEBwYWdlX2J1ZGdldDogYnVkZ2V0IGZvciBhIHBhZ2UKICAqIEBpbm9kZV9idWRnZXQ6IGJ1ZGdldCBmb3IgYW4gaW5vZGUKQEAgLTEwNjEsNiArMTEwMSw3IEBACiAgKiBAbHB0X2RydHlfZmxnczogZGlydHkgZmxhZ3MgZm9yIExQVCBzcGVjaWFsIG5vZGVzIGUuZy4gbHRhYgogICogQGRpcnR5X25uX2NudDogbnVtYmVyIG9mIGRpcnR5IG5ub2RlcwogICogQGRpcnR5X3BuX2NudDogbnVtYmVyIG9mIGRpcnR5IHBub2RlcworICogQGNoZWNrX2xwdF9mcmVlOiBmbGFnIHRoYXQgaW5kaWNhdGVzIExQVCBHQyBtYXkgYmUgbmVlZGVkCiAgKiBAbHB0X3N6OiBMUFQgc2l6ZQogICogQGxwdF9ub2RfYnVmOiBidWZmZXIgZm9yIGFuIG9uLWZsYXNoIG5ub2RlIG9yIHBub2RlCiAgKiBAbHB0X2J1ZjogYnVmZmVyIG9mIExFQiBzaXplIHVzZWQgYnkgTFBUCkBAIC0xMTAyLDYgKzExNDMsNyBAQAogICogQHJjdnJkX21zdF9ub2RlOiByZWNvdmVyZWQgbWFzdGVyIG5vZGUgdG8gd3JpdGUgd2hlbiBtb3VudGluZyBybyB0byBydwogICogQHNpemVfdHJlZTogaW5vZGUgc2l6ZSBpbmZvcm1hdGlvbiBmb3IgcmVjb3ZlcnkKICAqIEByZW1vdW50aW5nX3J3OiBzZXQgd2hpbGUgcmVtb3VudGluZyBmcm9tIHJvIHRvIHJ3IChzYiBmbGFncyBoYXZlIE1TX1JET05MWSkKKyAqIEBhbHdheXNfY2hrX2NyYzogYWx3YXlzIGNoZWNrIENSQ3MgKHdoaWxlIG1vdW50aW5nIGFuZCByZW1vdW50aW5nIHJ3KQogICogQG1vdW50X29wdHM6IFVCSUZTLXNwZWNpZmljIG1vdW50IG9wdGlvbnMKICAqCiAgKiBAZGJnX2J1ZjogYSBidWZmZXIgb2YgTEVCIHNpemUgdXNlZCBmb3IgZGVidWdnaW5nIHB1cnBvc2VzCkBAIC0xMTQ2LDExICsxMTg4LDExIEBACiAJaW50IGNtdF9zdGF0ZTsKIAlzcGlubG9ja190IGNzX2xvY2s7CiAJd2FpdF9xdWV1ZV9oZWFkX3QgY210X3dxOworCiAJdW5zaWduZWQgaW50IGZhc3RfdW5tb3VudDoxOwogCXVuc2lnbmVkIGludCBiaWdfbHB0OjE7Ci0JdW5zaWduZWQgaW50IGNoZWNrX2xwdF9mcmVlOjE7Ci0JdW5zaWduZWQgaW50IG5vc3BhY2U6MTsKLQl1bnNpZ25lZCBpbnQgbm9zcGFjZV9ycDoxOworCXVuc2lnbmVkIGludCBub19jaGtfZGF0YV9jcmM6MTsKKwl1bnNpZ25lZCBpbnQgYnVsa19yZWFkOjE7CiAKIAlzdHJ1Y3QgbXV0ZXggdG5jX211dGV4OwogCXN0cnVjdCB1Ymlmc196YnJhbmNoIHpyb290OwpAQCAtMTE3NSw2ICsxMjE3LDcgQEAKIAlzdHJ1Y3QgdWJpZnNfbXN0X25vZGUgKm1zdF9ub2RlOwogCWludCBtc3Rfb2ZmczsKIAlzdHJ1Y3QgbXV0ZXggbXN0X211dGV4OworCWludCBidWxrX3JlYWRfYnVmX3NpemU7CiAKIAlpbnQgbG9nX2xlYnM7CiAJbG9uZyBsb25nIGxvZ19ieXRlczsKQEAgLTEyMTgsNiArMTI2MSw4IEBACiAJdW5zaWduZWQgbG9uZyBsb25nIG9sZF9pZHhfc3o7CiAJdW5zaWduZWQgbG9uZyBsb25nIGNhbGNfaWR4X3N6OwogCXN0cnVjdCB1Ymlmc19scF9zdGF0cyBsc3Q7CisJdW5zaWduZWQgaW50IG5vc3BhY2U6MTsKKwl1bnNpZ25lZCBpbnQgbm9zcGFjZV9ycDoxOwogCiAJaW50IHBhZ2VfYnVkZ2V0OwogCWludCBpbm9kZV9idWRnZXQ7CkBAIC0xMjk0LDYgKzEzMzksNyBAQAogCWludCBscHRfZHJ0eV9mbGdzOwogCWludCBkaXJ0eV9ubl9jbnQ7CiAJaW50IGRpcnR5X3BuX2NudDsKKwlpbnQgY2hlY2tfbHB0X2ZyZWU7CiAJbG9uZyBsb25nIGxwdF9zejsKIAl2b2lkICpscHRfbm9kX2J1ZjsKIAl2b2lkICpscHRfYnVmOwpAQCAtMTMzNSw2ICsxMzgxLDcgQEAKIAlzdHJ1Y3QgdWJpZnNfbXN0X25vZGUgKnJjdnJkX21zdF9ub2RlOwogCXN0cnVjdCByYl9yb290IHNpemVfdHJlZTsKIAlpbnQgcmVtb3VudGluZ19ydzsKKwlpbnQgYWx3YXlzX2Noa19jcmM7CiAJc3RydWN0IHViaWZzX21vdW50X29wdHMgbW91bnRfb3B0czsKIAogI2lmZGVmIENPTkZJR19VQklGU19GU19ERUJVRwpAQCAtMTM0Nyw2ICsxMzk0LDEyIEBACiAJdW5zaWduZWQgbG9uZyBmYWlsX3RpbWVvdXQ7CiAJdW5zaWduZWQgaW50IGZhaWxfY250OwogCXVuc2lnbmVkIGludCBmYWlsX2NudF9tYXg7CisJbG9uZyBsb25nIGNoa19scHRfc3o7CisJbG9uZyBsb25nIGNoa19scHRfc3oyOworCWxvbmcgbG9uZyBjaGtfbHB0X3dhc3RhZ2U7CisJaW50IGNoa19scHRfbGViczsKKwlpbnQgbmV3X25oZWFkX2xudW07CisJaW50IG5ld19uaGVhZF9vZmZzOwogI2VuZGlmCiB9OwogCkBAIC0xMzc3LDcgKzE0MzAsNyBAQAogaW50IHViaWZzX3dyaXRlX25vZGUoc3RydWN0IHViaWZzX2luZm8gKmMsIHZvaWQgKm5vZGUsIGludCBsZW4sIGludCBsbnVtLAogCQkgICAgIGludCBvZmZzLCBpbnQgZHR5cGUpOwogaW50IHViaWZzX2NoZWNrX25vZGUoY29uc3Qgc3RydWN0IHViaWZzX2luZm8gKmMsIGNvbnN0IHZvaWQgKmJ1ZiwgaW50IGxudW0sCi0JCSAgICAgaW50IG9mZnMsIGludCBxdWlldCk7CisJCSAgICAgaW50IG9mZnMsIGludCBxdWlldCwgaW50IGNoa19jcmMpOwogdm9pZCB1Ymlmc19wcmVwYXJlX25vZGUoc3RydWN0IHViaWZzX2luZm8gKmMsIHZvaWQgKmJ1ZiwgaW50IGxlbiwgaW50IHBhZCk7CiB2b2lkIHViaWZzX3ByZXBfZ3JwX25vZGUoc3RydWN0IHViaWZzX2luZm8gKmMsIHZvaWQgKm5vZGUsIGludCBsZW4sIGludCBsYXN0KTsKIGludCB1Ymlmc19pb19pbml0KHN0cnVjdCB1Ymlmc19pbmZvICpjKTsKQEAgLTE0OTAsNiArMTU0Myw4IEBACiBpbnQgaXNfaWR4X25vZGVfaW5fdG5jKHN0cnVjdCB1Ymlmc19pbmZvICpjLCB1bmlvbiB1Ymlmc19rZXkgKmtleSwgaW50IGxldmVsLAogCQkgICAgICAgaW50IGxudW0sIGludCBvZmZzKTsKIGludCBpbnNlcnRfb2xkX2lkeF96bm9kZShzdHJ1Y3QgdWJpZnNfaW5mbyAqYywgc3RydWN0IHViaWZzX3pub2RlICp6bm9kZSk7CitpbnQgdWJpZnNfdG5jX2dldF9idV9rZXlzKHN0cnVjdCB1Ymlmc19pbmZvICpjLCBzdHJ1Y3QgYnVfaW5mbyAqYnUpOworaW50IHViaWZzX3RuY19idWxrX3JlYWQoc3RydWN0IHViaWZzX2luZm8gKmMsIHN0cnVjdCBidV9pbmZvICpidSk7CiAKIC8qIHRuY19taXNjLmMgKi8KIHN0cnVjdCB1Ymlmc196bm9kZSAqdWJpZnNfdG5jX2xldmVsb3JkZXJfbmV4dChzdHJ1Y3QgdWJpZnNfem5vZGUgKnpyLApAQCAtMTU4NiwxMiArMTY0MSwxMCBAQAogdm9pZCB1Ymlmc19scHRfZnJlZShzdHJ1Y3QgdWJpZnNfaW5mbyAqYywgaW50IHdyX29ubHkpOwogCiAvKiBscHJvcHMuYyAqLwotdm9pZCB1Ymlmc19nZXRfbHByb3BzKHN0cnVjdCB1Ymlmc19pbmZvICpjKTsKIGNvbnN0IHN0cnVjdCB1Ymlmc19scHJvcHMgKnViaWZzX2NoYW5nZV9scChzdHJ1Y3QgdWJpZnNfaW5mbyAqYywKIAkJCQkJICAgY29uc3Qgc3RydWN0IHViaWZzX2xwcm9wcyAqbHAsCiAJCQkJCSAgIGludCBmcmVlLCBpbnQgZGlydHksIGludCBmbGFncywKIAkJCQkJICAgaW50IGlkeF9nY19jbnQpOwotdm9pZCB1Ymlmc19yZWxlYXNlX2xwcm9wcyhzdHJ1Y3QgdWJpZnNfaW5mbyAqYyk7CiB2b2lkIHViaWZzX2dldF9scF9zdGF0cyhzdHJ1Y3QgdWJpZnNfaW5mbyAqYywgc3RydWN0IHViaWZzX2xwX3N0YXRzICpzdGF0cyk7CiB2b2lkIHViaWZzX2FkZF90b19jYXQoc3RydWN0IHViaWZzX2luZm8gKmMsIHN0cnVjdCB1Ymlmc19scHJvcHMgKmxwcm9wcywKIAkJICAgICAgaW50IGNhdCk7CmRpZmYgLS1naXQgYS9mcy91Ymlmcy94YXR0ci5jIGIvZnMvdWJpZnMveGF0dHIuYwppbmRleCA2NDliZWM3Li5jZmQzMWUyIDEwMDY0NAotLS0gYS9mcy91Ymlmcy94YXR0ci5jCisrKyBiL2ZzL3ViaWZzL3hhdHRyLmMKQEAgLTQ0Niw3ICs0NDYsNyBAQAogCQlpbnQgdHlwZTsKIAogCQl4ZW50ID0gdWJpZnNfdG5jX25leHRfZW50KGMsICZrZXksICZubSk7Ci0JCWlmICh1bmxpa2VseShJU19FUlIoeGVudCkpKSB7CisJCWlmIChJU19FUlIoeGVudCkpIHsKIAkJCWVyciA9IFBUUl9FUlIoeGVudCk7CiAJCQlicmVhazsKIAkJfQpkaWZmIC0tZ2l0IGEvZnMvdWRmL3N1cGVyLmMgYi9mcy91ZGYvc3VwZXIuYwppbmRleCA1Njk4YmJmLi5lMjVlNzAxIDEwMDY0NAotLS0gYS9mcy91ZGYvc3VwZXIuYworKysgYi9mcy91ZGYvc3VwZXIuYwpAQCAtMzY5LDcgKzM2OSw3IEBACiAJT3B0X2VyciwgT3B0X3Vmb3JnZXQsIE9wdF91aWdub3JlLCBPcHRfZ2ZvcmdldCwgT3B0X2dpZ25vcmUKIH07CiAKLXN0YXRpYyBtYXRjaF90YWJsZV90IHRva2VucyA9IHsKK3N0YXRpYyBjb25zdCBtYXRjaF90YWJsZV90IHRva2VucyA9IHsKIAl7T3B0X25vdnJzLAkibm92cnMifSwKIAl7T3B0X25vc3RyaWN0LAkibm9zdHJpY3QifSwKIAl7T3B0X2JzLAkiYnM9JXUifSwKZGlmZiAtLWdpdCBhL2ZzL3Vmcy9zdXBlci5jIGIvZnMvdWZzL3N1cGVyLmMKaW5kZXggMzE0MTk2OS4uZTY1MjEyZCAxMDA2NDQKLS0tIGEvZnMvdWZzL3N1cGVyLmMKKysrIGIvZnMvdWZzL3N1cGVyLmMKQEAgLTMwOSw3ICszMDksNyBAQAogICAgICAgIE9wdF9lcnIKIH07CiAKLXN0YXRpYyBtYXRjaF90YWJsZV90IHRva2VucyA9IHsKK3N0YXRpYyBjb25zdCBtYXRjaF90YWJsZV90IHRva2VucyA9IHsKIAl7T3B0X3R5cGVfb2xkLCAidWZzdHlwZT1vbGQifSwKIAl7T3B0X3R5cGVfc3VueDg2LCAidWZzdHlwZT1zdW54ODYifSwKIAl7T3B0X3R5cGVfc3VuLCAidWZzdHlwZT1zdW4ifSwKQEAgLTEyMzMsNyArMTIzMyw3IEBACiB7CiAJc3RydWN0IHVmc19zYl9pbmZvICpzYmkgPSBVRlNfU0IodmZzLT5tbnRfc2IpOwogCXVuc2lnbmVkIG12YWwgPSBzYmktPnNfbW91bnRfb3B0ICYgVUZTX01PVU5UX1VGU1RZUEU7Ci0Jc3RydWN0IG1hdGNoX3Rva2VuICp0cCA9IHRva2VuczsKKwljb25zdCBzdHJ1Y3QgbWF0Y2hfdG9rZW4gKnRwID0gdG9rZW5zOwogCiAJd2hpbGUgKHRwLT50b2tlbiAhPSBPcHRfb25lcnJvcl9wYW5pYyAmJiB0cC0+dG9rZW4gIT0gbXZhbCkKIAkJKyt0cDsKZGlmZiAtLWdpdCBhL2ZzL3hmcy9saW51eC0yLjYveGZzX3N1cGVyLmMgYi9mcy94ZnMvbGludXgtMi42L3hmc19zdXBlci5jCmluZGV4IDE4ZDNjODQuLmUzOTAxMzYgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy9saW51eC0yLjYveGZzX3N1cGVyLmMKKysrIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfc3VwZXIuYwpAQCAtMTU4LDcgKzE1OCw3IEBACiAJT3B0X2JhcnJpZXIsIE9wdF9ub2JhcnJpZXIsIE9wdF9lcnIKIH07CiAKLXN0YXRpYyBtYXRjaF90YWJsZV90IHRva2VucyA9IHsKK3N0YXRpYyBjb25zdCBtYXRjaF90YWJsZV90IHRva2VucyA9IHsKIAl7T3B0X2JhcnJpZXIsICJiYXJyaWVyIn0sCiAJe09wdF9ub2JhcnJpZXIsICJub2JhcnJpZXIifSwKIAl7T3B0X2VyciwgTlVMTH0KQEAgLTEzMjMsNyArMTMyMyw3IEBACiAJIlhGUzogbW91bnQgb3B0aW9uIFwiJXNcIiBub3Qgc3VwcG9ydGVkIGZvciByZW1vdW50XG4iLCBwKTsKIAkJCXJldHVybiAtRUlOVkFMOwogI2Vsc2UKLQkJCXJldHVybiAwOworCQkJYnJlYWs7CiAjZW5kaWYKIAkJfQogCX0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYWNwaS9hY21hY3Jvcy5oIGIvaW5jbHVkZS9hY3BpL2FjbWFjcm9zLmgKaW5kZXggNTdhYjllOS4uNzRhOTYxNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hY3BpL2FjbWFjcm9zLmgKKysrIGIvaW5jbHVkZS9hY3BpL2FjbWFjcm9zLmgKQEAgLTQ2Nyw3ICs0NjcsNyBAQAogLyoKICAqIElmIEFDUElfR0VUX0ZVTkNUSU9OX05BTUUgd2FzIG5vdCBkZWZpbmVkIGluIHRoZSBjb21waWxlci1kZXBlbmRlbnQgaGVhZGVyLAogICogZGVmaW5lIGl0IG5vdy4gVGhpcyBpcyB0aGUgY2FzZSB3aGVyZSB0aGVyZSB0aGUgY29tcGlsZXIgZG9lcyBub3Qgc3VwcG9ydAotICogYSBfX0ZVTkNUSU9OX18gbWFjcm8gb3IgZXF1aXZhbGVudC4KKyAqIGEgX19mdW5jX18gbWFjcm8gb3IgZXF1aXZhbGVudC4KICAqLwogI2lmbmRlZiBBQ1BJX0dFVF9GVU5DVElPTl9OQU1FCiAjZGVmaW5lIEFDUElfR0VUX0ZVTkNUSU9OX05BTUUgICAgICAgICAgX2FjcGlfZnVuY3Rpb25fbmFtZQpAQCAtNDc1LDEyICs0NzUsMTIgQEAKICAqIFRoZSBOYW1lIHBhcmFtZXRlciBzaG91bGQgYmUgdGhlIHByb2NlZHVyZSBuYW1lIGFzIGEgcXVvdGVkIHN0cmluZy4KICAqIFRoZSBmdW5jdGlvbiBuYW1lIGlzIGFsc28gdXNlZCBieSB0aGUgZnVuY3Rpb24gZXhpdCBtYWNyb3MgYmVsb3cuCiAgKiBOb3RlOiAoY29uc3QgY2hhcikgaXMgdXNlZCB0byBiZSBjb21wYXRpYmxlIHdpdGggdGhlIGRlYnVnIGludGVyZmFjZXMKLSAqIGFuZCBtYWNyb3Mgc3VjaCBhcyBfX0ZVTkNUSU9OX18uCisgKiBhbmQgbWFjcm9zIHN1Y2ggYXMgX19mdW5jX18uCiAgKi8KICNkZWZpbmUgQUNQSV9GVU5DVElPTl9OQU1FKG5hbWUpCXN0YXRpYyBjb25zdCBjaGFyIF9hY3BpX2Z1bmN0aW9uX25hbWVbXSA9ICNuYW1lOwogCiAjZWxzZQotLyogQ29tcGlsZXIgc3VwcG9ydHMgX19GVU5DVElPTl9fIChvciBlcXVpdmFsZW50KSAtLSBJZ25vcmUgdGhpcyBtYWNybyAqLworLyogQ29tcGlsZXIgc3VwcG9ydHMgX19mdW5jX18gKG9yIGVxdWl2YWxlbnQpIC0tIElnbm9yZSB0aGlzIG1hY3JvICovCiAKICNkZWZpbmUgQUNQSV9GVU5DVElPTl9OQU1FKG5hbWUpCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYWNwaS9wbGF0Zm9ybS9hY2djYy5oIGIvaW5jbHVkZS9hY3BpL3BsYXRmb3JtL2FjZ2NjLmgKaW5kZXggODk5NmRiYS4uOGUyY2RjNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hY3BpL3BsYXRmb3JtL2FjZ2NjLmgKKysrIGIvaW5jbHVkZS9hY3BpL3BsYXRmb3JtL2FjZ2NjLmgKQEAgLTQ2LDcgKzQ2LDcgQEAKIAogLyogRnVuY3Rpb24gbmFtZSBpcyB1c2VkIGZvciBkZWJ1ZyBvdXRwdXQuIE5vbi1BTlNJLCBjb21waWxlci1kZXBlbmRlbnQgKi8KIAotI2RlZmluZSBBQ1BJX0dFVF9GVU5DVElPTl9OQU1FICAgICAgICAgIF9fRlVOQ1RJT05fXworI2RlZmluZSBBQ1BJX0dFVF9GVU5DVElPTl9OQU1FICAgICAgICAgIF9fZnVuY19fCiAKIC8qCiAgKiBUaGlzIG1hY3JvIGlzIHVzZWQgdG8gdGFnIGZ1bmN0aW9ucyBhcyAicHJpbnRmLWxpa2UiIGJlY2F1c2UKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9wbGF0LXMzYy9kZWJ1Zy1tYWNyby5TIGIvaW5jbHVkZS9hc20tYXJtL3BsYXQtczNjL2RlYnVnLW1hY3JvLlMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg0YzQwYjguLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9hc20tYXJtL3BsYXQtczNjL2RlYnVnLW1hY3JvLlMKKysrIC9kZXYvbnVsbApAQCAtMSw3NSArMCwwIEBACi0vKiBsaW51eC9pbmNsdWRlL2FzbS1hcm0vcGxhdC1zM2MvZGVidWctbWFjcm8uUwotICoKLSAqIENvcHlyaWdodCAyMDA1LCAyMDA3IFNpbXRlYyBFbGVjdHJvbmljcwotICoJaHR0cDovL2FybWxpbnV4LnNpbXRlYy5jby51ay8KLSAqCUJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotKi8KLQotI2luY2x1ZGUgPGFzbS9wbGF0LXMzYy9yZWdzLXNlcmlhbC5oPgotCi0vKiBUaGUgUzNDMjQ0MCBpbXBsZW1lbnRhdGlvbnMgYXJlIHVzZWQgYnkgZGVmYXVsdCBhcyB0aGV5IGFyZSB0aGUKLSAqIG1vc3Qgd2lkZWx5IHJlLXVzZWQgKi8KLQotCS5tYWNybyBmaWZvX2xldmVsX3MzYzI0NDAgcmQsIHJ4Ci0JCWxkcglccmQsIFsgXHJ4LCAjIFMzQzI0MTBfVUZTVEFUIF0KLQkJYW5kCVxyZCwgXHJkLCAjUzNDMjQ0MF9VRlNUQVRfVFhNQVNLCi0JLmVuZG0KLQotI2lmbmRlZiBmaWZvX2xldmVsCi0jZGVmaW5lIGZpZm9fbGV2ZWwgZmlmb19sZXZlbF9zM2MyNDEwCi0jZW5kaWYKLQotCS5tYWNybyAgZmlmb19mdWxsX3MzYzI0NDAgcmQsIHJ4Ci0JCWxkcglccmQsIFsgXHJ4LCAjIFMzQzI0MTBfVUZTVEFUIF0KLQkJdHN0CVxyZCwgI1MzQzI0NDBfVUZTVEFUX1RYRlVMTAotCS5lbmRtCi0KLSNpZm5kZWYgZmlmb19mdWxsCi0jZGVmaW5lIGZpZm9fZnVsbCBmaWZvX2Z1bGxfczNjMjQ0MAotI2VuZGlmCi0KLQkubWFjcm8Jc2VuZHVhcnQscmQscngKLQkJc3RyYiAJXHJkLCBbXHJ4LCAjIFMzQzI0MTBfVVRYSCBdCi0JLmVuZG0KLQotCS5tYWNybwlidXN5dWFydCwgcmQsIHJ4Ci0JCWxkcglccmQsIFsgXHJ4LCAjIFMzQzI0MTBfVUZDT04gXQotCQl0c3QJXHJkLCAjUzNDMjQxMF9VRkNPTl9GSUZPTU9ERQlAIGZpZm8gZW5hYmxlZD8KLQkJYmVxCTEwMDFmCQkJCUAKLQkJQCBGSUZPIGVuYWJsZWQuLi4KLTEwMDM6Ci0JCWZpZm9fZnVsbCBccmQsIFxyeAotCQlibmUJMTAwM2IKLQkJYgkxMDAyZgotCi0xMDAxOgotCQlAIGJ1c3kgd2FpdGluZyBmb3Igbm9uIGZpZm8KLQkJbGRyCVxyZCwgWyBccngsICMgUzNDMjQxMF9VVFJTVEFUIF0KLQkJdHN0CVxyZCwgI1MzQzI0MTBfVVRSU1RBVF9UWEZFCi0JCWJlcQkxMDAxYgotCi0xMDAyOgkJQCBleGl0IGJ1c3l1YXJ0Ci0JLmVuZG0KLQotCS5tYWNybwl3YWl0dWFydCxyZCxyeAotCQlsZHIJXHJkLCBbIFxyeCwgIyBTM0MyNDEwX1VGQ09OIF0KLQkJdHN0CVxyZCwgI1MzQzI0MTBfVUZDT05fRklGT01PREUJQCBmaWZvIGVuYWJsZWQ/Ci0JCWJlcQkxMDAxZgkJCQlACi0JCUAgRklGTyBlbmFibGVkLi4uCi0xMDAzOgotCQlmaWZvX2xldmVsIFxyZCwgXHJ4Ci0JCXRlcQlccmQsICMwCi0JCWJuZQkxMDAzYgotCQliCTEwMDJmCi0xMDAxOgotCQlAIGlkbGUgd2FpdGluZyBmb3Igbm9uIGZpZm8KLQkJbGRyCVxyZCwgWyBccngsICMgUzNDMjQxMF9VVFJTVEFUIF0KLQkJdHN0CVxyZCwgI1MzQzI0MTBfVVRSU1RBVF9UWEZFCi0JCWJlcQkxMDAxYgotCi0xMDAyOgkJQCBleGl0IGJ1c3l1YXJ0Ci0JLmVuZG0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9wbGF0LXMzYy91bmNvbXByZXNzLmggYi9pbmNsdWRlL2FzbS1hcm0vcGxhdC1zM2MvdW5jb21wcmVzcy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxOWI5ZWRhLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLWFybS9wbGF0LXMzYy91bmNvbXByZXNzLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNTUgKzAsMCBAQAotLyogbGludXgvaW5jbHVkZS9hc20tYXJtL3BsYXQtczNjL3VuY29tcHJlc3MuaAotICoKLSAqIENvcHlyaWdodCAyMDAzLCAyMDA3IFNpbXRlYyBFbGVjdHJvbmljcwotICoJaHR0cDovL2FybWxpbnV4LnNpbXRlYy5jby51ay8KLSAqCUJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4KLSAqCi0gKiBTM0MgLSB1bmNvbXByZXNzIGNvZGUKLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotKi8KLQotI2lmbmRlZiBfX0FTTV9QTEFUX1VOQ09NUFJFU1NfSAotI2RlZmluZSBfX0FTTV9QTEFUX1VOQ09NUFJFU1NfSAotCi10eXBlZGVmIHVuc2lnbmVkIGludCB1cGZfdDsJLyogY2Fubm90IGluY2x1ZGUgbGludXgvc2VyaWFsX2NvcmUuaCAqLwotCi0vKiB1YXJ0IHNldHVwICovCi0KLXN0YXRpYyB1bnNpZ25lZCBpbnQgZmlmb19tYXNrOwotc3RhdGljIHVuc2lnbmVkIGludCBmaWZvX21heDsKLQotLyogZm9yd2FyZCBkZWNsZXJhdGlvbnMgKi8KLQotc3RhdGljIHZvaWQgYXJjaF9kZXRlY3RfY3B1KHZvaWQpOwotCi0vKiBkZWZpbmVzIGZvciBVQVJUIHJlZ2lzdGVycyAqLwotCi0jaW5jbHVkZSA8YXNtL3BsYXQtczNjL3JlZ3Mtc2VyaWFsLmg+Ci0jaW5jbHVkZSA8YXNtL3BsYXQtczNjL3JlZ3Mtd2F0Y2hkb2cuaD4KLQotLyogd29ya2luZyBpbiBwaHlzaWNhbCBzcGFjZS4uLiAqLwotI3VuZGVmIFMzQzI0MTBfV0RPR1JFRwotI2RlZmluZSBTM0MyNDEwX1dET0dSRUcoeCkgKChTM0MyNFhYX1BBX1dBVENIRE9HICsgKHgpKSkKLQotLyogaG93IG1hbnkgYnl0ZXMgd2UgYWxsb3cgaW50byB0aGUgRklGTyBhdCBhIHRpbWUgaW4gRklGTyBtb2RlICovCi0jZGVmaW5lIEZJRk9fTUFYCSAoMTQpCi0KLSNkZWZpbmUgdWFydF9iYXNlIFMzQzI0WFhfUEFfVUFSVCArICgweDQwMDAqQ09ORklHX1MzQ19MT1dMRVZFTF9VQVJUX1BPUlQpCi0KLXN0YXRpYyBfX2lubGluZV9fIHZvaWQKLXVhcnRfd3IodW5zaWduZWQgaW50IHJlZywgdW5zaWduZWQgaW50IHZhbCkKLXsKLQl2b2xhdGlsZSB1bnNpZ25lZCBpbnQgKnB0cjsKLQotCXB0ciA9ICh2b2xhdGlsZSB1bnNpZ25lZCBpbnQgKikocmVnICsgdWFydF9iYXNlKTsKLQkqcHRyID0gdmFsOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBpbnQKLXVhcnRfcmQodW5zaWduZWQgaW50IHJlZykKLXsKLQl2b2xhdGlsZSB1bnNpZ25lZCBpbnQgKnB0cjsKLQotCXB0ciA9ICh2b2xhdGlsZSB1bnNpZ25lZCBpbnQgKikocmVnICsgdWFydF9iYXNlKTsKLQlyZXR1cm4gKnB0cjsKLX0KLQotLyogd2UgY2FuIGRlYWwgd2l0aCB0aGUgY2FzZSB0aGUgVUFSVHMgYXJlIGJlaW5nIHJ1bgotICogaW4gRklGTyBtb2RlLCBzbyB0aGF0IHdlIGRvbid0IGhvbGQgdXAgb3VyIGV4ZWN1dGlvbgotICogd2FpdGluZyBmb3IgdHggdG8gaGFwcGVuLi4uCi0qLwotCi1zdGF0aWMgdm9pZCBwdXRjKGludCBjaCkKLXsKLQlpZiAodWFydF9yZChTM0MyNDEwX1VGQ09OKSAmIFMzQzI0MTBfVUZDT05fRklGT01PREUpIHsKLQkJaW50IGxldmVsOwotCi0JCXdoaWxlICgxKSB7Ci0JCQlsZXZlbCA9IHVhcnRfcmQoUzNDMjQxMF9VRlNUQVQpOwotCQkJbGV2ZWwgJj0gZmlmb19tYXNrOwotCi0JCQlpZiAobGV2ZWwgPCBmaWZvX21heCkKLQkJCQlicmVhazsKLQkJfQotCi0JfSBlbHNlIHsKLQkJLyogbm90IHVzaW5nIGZpZm9zICovCi0KLQkJd2hpbGUgKCh1YXJ0X3JkKFMzQzI0MTBfVVRSU1RBVCkgJiBTM0MyNDEwX1VUUlNUQVRfVFhFKSAhPSBTM0MyNDEwX1VUUlNUQVRfVFhFKQotCQkJYmFycmllcigpOwotCX0KLQotCS8qIHdyaXRlIGJ5dGUgdG8gdHJhbnNtaXNzaW9uIHJlZ2lzdGVyICovCi0JdWFydF93cihTM0MyNDEwX1VUWEgsIGNoKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGZsdXNoKHZvaWQpCi17Ci19Ci0KLSNkZWZpbmUgX19yYXdfd3JpdGVsKGQsYWQpIGRvIHsgKigodm9sYXRpbGUgdW5zaWduZWQgaW50ICopKGFkKSkgPSAoZCk7IH0gd2hpbGUoMCkKLQotLyogQ09ORklHX1MzQ19CT09UX1dBVENIRE9HCi0gKgotICogU2ltcGxlIGJvb3QtdGltZSB3YXRjaGRvZyBzZXR1cCwgdG8gcmVib290IHRoZSBzeXN0ZW0gaWYgdGhlcmUgaXMKLSAqIGFueSBwcm9ibGVtIHdpdGggdGhlIGJvb3QgcHJvY2VzcwotKi8KLQotI2lmZGVmIENPTkZJR19TM0NfQk9PVF9XQVRDSERPRwotCi0jZGVmaW5lIFdET0dfQ09VTlQgKDB4ZmYwMCkKLQotc3RhdGljIGlubGluZSB2b2lkIGFyY2hfZGVjb21wX3dkb2codm9pZCkKLXsKLQlfX3Jhd193cml0ZWwoV0RPR19DT1VOVCwgUzNDMjQxMF9XVENOVCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGFyY2hfZGVjb21wX3dkb2dfc3RhcnQodm9pZCkKLXsKLQlfX3Jhd193cml0ZWwoV0RPR19DT1VOVCwgUzNDMjQxMF9XVERBVCk7Ci0JX19yYXdfd3JpdGVsKFdET0dfQ09VTlQsIFMzQzI0MTBfV1RDTlQpOwotCV9fcmF3X3dyaXRlbChTM0MyNDEwX1dUQ09OX0VOQUJMRSB8IFMzQzI0MTBfV1RDT05fRElWMTI4IHwgUzNDMjQxMF9XVENPTl9SU1RFTiB8IFMzQzI0MTBfV1RDT05fUFJFU0NBTEUoMHg4MCksIFMzQzI0MTBfV1RDT04pOwotfQotCi0jZWxzZQotI2RlZmluZSBhcmNoX2RlY29tcF93ZG9nX3N0YXJ0KCkKLSNkZWZpbmUgYXJjaF9kZWNvbXBfd2RvZygpCi0jZW5kaWYKLQotI2lmZGVmIENPTkZJR19TM0NfQk9PVF9FUlJPUl9SRVNFVAotCi1zdGF0aWMgdm9pZCBhcmNoX2RlY29tcF9lcnJvcihjb25zdCBjaGFyICp4KQotewotCXB1dHN0cigiXG5cbiIpOwotCXB1dHN0cih4KTsKLQlwdXRzdHIoIlxuXG4gLS0gU3lzdGVtIHJlc2V0dGluZ1xuIik7Ci0KLQlfX3Jhd193cml0ZWwoMHg0MDAwLCBTM0MyNDEwX1dUREFUKTsKLQlfX3Jhd193cml0ZWwoMHg0MDAwLCBTM0MyNDEwX1dUQ05UKTsKLQlfX3Jhd193cml0ZWwoUzNDMjQxMF9XVENPTl9FTkFCTEUgfCBTM0MyNDEwX1dUQ09OX0RJVjEyOCB8IFMzQzI0MTBfV1RDT05fUlNURU4gfCBTM0MyNDEwX1dUQ09OX1BSRVNDQUxFKDB4NDApLCBTM0MyNDEwX1dUQ09OKTsKLQotCXdoaWxlKDEpOwotfQotCi0jZGVmaW5lIGFyY2hfZXJyb3IgYXJjaF9kZWNvbXBfZXJyb3IKLSNlbmRpZgotCi1zdGF0aWMgdm9pZCBlcnJvcihjaGFyICplcnIpOwotCi1zdGF0aWMgdm9pZAotYXJjaF9kZWNvbXBfc2V0dXAodm9pZCkKLXsKLQkvKiB3ZSBtYXkgbmVlZCB0byBzZXR1cCB0aGUgdWFydChzKSBoZXJlIGlmIHdlIGFyZSBub3QgcnVubmluZwotCSAqIG9uIGFuIEJBU1QuLi4gdGhlIEJBU1Qgd2lsbCBoYXZlIGxlZnQgdGhlIHVhcnRzIGNvbmZpZ3VyZWQKLQkgKiBhZnRlciBjYWxsaW5nIGxpbnV4LgotCSAqLwotCi0JYXJjaF9kZXRlY3RfY3B1KCk7Ci0JYXJjaF9kZWNvbXBfd2RvZ19zdGFydCgpOwotfQotCi0KLSNlbmRpZiAvKiBfX0FTTV9QTEFUX1VOQ09NUFJFU1NfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tY3Jpcy9hLm91dC5oIGIvaW5jbHVkZS9hc20tY3Jpcy9hLm91dC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjODJlOWY5Li4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLWNyaXMvYS5vdXQuaAorKysgL2Rldi9udWxsCkBAIC0xLDI2ICswLDAgQEAKLSNpZm5kZWYgX19DUklTX0FfT1VUX0hfXwotI2RlZmluZSBfX0NSSVNfQV9PVVRfSF9fCi0KLS8qIHdlIGRvbid0IHN1cHBvcnQgYS5vdXQgYmluYXJpZXMgb24gTGludXgvQ1JJUyBhbnl3YXksIHNvIHRoaXMgaXMKLSAqIG5vdCByZWFsbHkgdXNlZCBidXQgc3RpbGwgbmVlZGVkIGJlY2F1c2UgYmluZm10X2VsZi5jIGZvciBzb21lIHJlYXNvbgotICogd2FudHMgdG8ga25vdyBhYm91dCBhLm91dCBldmVuIGlmIHRoZXJlIGlzIG5vIGludGVycHJldGVyIGF2YWlsYWJsZS4uLgotICovCi0KLXN0cnVjdCBleGVjCi17Ci0gIHVuc2lnbmVkIGxvbmcgYV9pbmZvOwkJLyogVXNlIG1hY3JvcyBOX01BR0lDLCBldGMgZm9yIGFjY2VzcyAqLwotICB1bnNpZ25lZCBhX3RleHQ7CQkvKiBsZW5ndGggb2YgdGV4dCwgaW4gYnl0ZXMgKi8KLSAgdW5zaWduZWQgYV9kYXRhOwkJLyogbGVuZ3RoIG9mIGRhdGEsIGluIGJ5dGVzICovCi0gIHVuc2lnbmVkIGFfYnNzOwkJLyogbGVuZ3RoIG9mIHVuaW5pdGlhbGl6ZWQgZGF0YSBhcmVhIGZvciBmaWxlLCBpbiBieXRlcyAqLwotICB1bnNpZ25lZCBhX3N5bXM7CQkvKiBsZW5ndGggb2Ygc3ltYm9sIHRhYmxlIGRhdGEgaW4gZmlsZSwgaW4gYnl0ZXMgKi8KLSAgdW5zaWduZWQgYV9lbnRyeTsJCS8qIHN0YXJ0IGFkZHJlc3MgKi8KLSAgdW5zaWduZWQgYV90cnNpemU7CQkvKiBsZW5ndGggb2YgcmVsb2NhdGlvbiBpbmZvIGZvciB0ZXh0LCBpbiBieXRlcyAqLwotICB1bnNpZ25lZCBhX2Ryc2l6ZTsJCS8qIGxlbmd0aCBvZiByZWxvY2F0aW9uIGluZm8gZm9yIGRhdGEsIGluIGJ5dGVzICovCi19OwotCi0KLSNkZWZpbmUgTl9UUlNJWkUoYSkJKChhKS5hX3Ryc2l6ZSkKLSNkZWZpbmUgTl9EUlNJWkUoYSkJKChhKS5hX2Ryc2l6ZSkKLSNkZWZpbmUgTl9TWU1TSVpFKGEpCSgoYSkuYV9zeW1zKQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWNyaXMvZWxmLmggYi9pbmNsdWRlL2FzbS1jcmlzL2VsZi5oCmluZGV4IDAwMWY2NGEuLmYwZDE3ZmIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWNyaXMvZWxmLmgKKysrIGIvaW5jbHVkZS9hc20tY3Jpcy9lbGYuaApAQCAtODgsNiArODgsNiBAQAogCiAjZGVmaW5lIEVMRl9QTEFURk9STSAgKE5VTEwpCiAKLSNkZWZpbmUgU0VUX1BFUlNPTkFMSVRZKGV4LCBpYmNzMikgc2V0X3BlcnNvbmFsaXR5KChpYmNzMik/UEVSX1NWUjQ6UEVSX0xJTlVYKQorI2RlZmluZSBTRVRfUEVSU09OQUxJVFkoZXgpIHNldF9wZXJzb25hbGl0eShQRVJfTElOVVgpCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tY3Jpcy90aHJlYWRfaW5mby5oIGIvaW5jbHVkZS9hc20tY3Jpcy90aHJlYWRfaW5mby5oCmluZGV4IDdlZmUxMDAuLmNlZTk3ZjEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWNyaXMvdGhyZWFkX2luZm8uaAorKysgYi9pbmNsdWRlL2FzbS1jcmlzL3RocmVhZF9pbmZvLmgKQEAgLTg4LDYgKzg4LDcgQEAKICNkZWZpbmUgVElGX1JFU1RPUkVfU0lHTUFTSwk5CS8qIHJlc3RvcmUgc2lnbmFsIG1hc2sgaW4gZG9fc2lnbmFsKCkgKi8KICNkZWZpbmUgVElGX1BPTExJTkdfTlJGTEFHCTE2CS8qIHRydWUgaWYgcG9sbF9pZGxlKCkgaXMgcG9sbGluZyBUSUZfTkVFRF9SRVNDSEVEICovCiAjZGVmaW5lIFRJRl9NRU1ESUUJCTE3CisjZGVmaW5lIFRJRl9GUkVFWkUJCTE4CS8qIGlzIGZyZWV6aW5nIGZvciBzdXNwZW5kICovCiAKICNkZWZpbmUgX1RJRl9TWVNDQUxMX1RSQUNFCSgxPDxUSUZfU1lTQ0FMTF9UUkFDRSkKICNkZWZpbmUgX1RJRl9OT1RJRllfUkVTVU1FCSgxPDxUSUZfTk9USUZZX1JFU1VNRSkKQEAgLTk1LDYgKzk2LDcgQEAKICNkZWZpbmUgX1RJRl9ORUVEX1JFU0NIRUQJKDE8PFRJRl9ORUVEX1JFU0NIRUQpCiAjZGVmaW5lIF9USUZfUkVTVE9SRV9TSUdNQVNLCSgxPDxUSUZfUkVTVE9SRV9TSUdNQVNLKQogI2RlZmluZSBfVElGX1BPTExJTkdfTlJGTEFHCSgxPDxUSUZfUE9MTElOR19OUkZMQUcpCisjZGVmaW5lIF9USUZfRlJFRVpFCQkoMTw8VElGX0ZSRUVaRSkKIAogI2RlZmluZSBfVElGX1dPUktfTUFTSwkJMHgwMDAwRkZGRQkvKiB3b3JrIHRvIGRvIG9uIGludGVycnVwdC9leGNlcHRpb24gcmV0dXJuICovCiAjZGVmaW5lIF9USUZfQUxMV09SS19NQVNLCTB4MDAwMEZGRkYJLyogd29yayB0byBkbyBvbiBhbnkgcmV0dXJuIHRvIHUtc3BhY2UgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWZydi9lbGYuaCBiL2luY2x1ZGUvYXNtLWZydi9lbGYuaAppbmRleCA5ZmI5NDZiLi43Mjc5ZWMwN2QgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWZydi9lbGYuaAorKysgYi9pbmNsdWRlL2FzbS1mcnYvZWxmLmgKQEAgLTEzNyw2ICsxMzcsNiBAQAogCiAjZGVmaW5lIEVMRl9QTEFURk9STSAgKE5VTEwpCiAKLSNkZWZpbmUgU0VUX1BFUlNPTkFMSVRZKGV4LCBpYmNzMikgc2V0X3BlcnNvbmFsaXR5KChpYmNzMik/UEVSX1NWUjQ6UEVSX0xJTlVYKQorI2RlZmluZSBTRVRfUEVSU09OQUxJVFkoZXgpIHNldF9wZXJzb25hbGl0eShQRVJfTElOVVgpCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tZnJ2L2lkZS5oIGIvaW5jbHVkZS9hc20tZnJ2L2lkZS5oCmluZGV4IDdlYmNjNTYuLjM2MTA3NjYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWZydi9pZGUuaAorKysgYi9pbmNsdWRlL2FzbS1mcnYvaWRlLmgKQEAgLTE4LDE1ICsxOCw3IEBACiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL2lycS5oPgogCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qCi0gKiBzb21lIGJpdHMgbmVlZGVkIGZvciBwYXJ0cyBvZiB0aGUgSURFIHN1YnN5c3RlbSB0byBjb21waWxlCi0gKi8KLSNkZWZpbmUgX19pZGVfbW1faW5zdyhwb3J0LCBhZGRyLCBuKQlpbnN3KCh1bnNpZ25lZCBsb25nKSAocG9ydCksIGFkZHIsIG4pCi0jZGVmaW5lIF9faWRlX21tX2luc2wocG9ydCwgYWRkciwgbikJaW5zbCgodW5zaWduZWQgbG9uZykgKHBvcnQpLCBhZGRyLCBuKQotI2RlZmluZSBfX2lkZV9tbV9vdXRzdyhwb3J0LCBhZGRyLCBuKQlvdXRzdygodW5zaWduZWQgbG9uZykgKHBvcnQpLCBhZGRyLCBuKQotI2RlZmluZSBfX2lkZV9tbV9vdXRzbChwb3J0LCBhZGRyLCBuKQlvdXRzbCgodW5zaWduZWQgbG9uZykgKHBvcnQpLCBhZGRyLCBuKQotCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvaWRlX2lvcHMuaD4KIAogI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KICNlbmRpZiAvKiBfQVNNX0lERV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1mcnYvdW5hbGlnbmVkLmggYi9pbmNsdWRlL2FzbS1mcnYvdW5hbGlnbmVkLmgKaW5kZXggODM5YTJmYi4uNmM2MWMwNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tZnJ2L3VuYWxpZ25lZC5oCisrKyBiL2luY2x1ZGUvYXNtLWZydi91bmFsaWduZWQuaApAQCAtMTMsNyArMTMsNyBAQAogI2RlZmluZSBfQVNNX1VOQUxJR05FRF9ICiAKICNpbmNsdWRlIDxsaW51eC91bmFsaWduZWQvbGVfYnl0ZXNoaWZ0Lmg+Ci0jaW5jbHVkZSA8bGludXgvdW5hbGlnbmVkL2JlX2J5dGVzaGlmdC5oPgorI2luY2x1ZGUgPGxpbnV4L3VuYWxpZ25lZC9iZV9zdHJ1Y3QuaD4KICNpbmNsdWRlIDxsaW51eC91bmFsaWduZWQvZ2VuZXJpYy5oPgogCiAjZGVmaW5lIGdldF91bmFsaWduZWQJX19nZXRfdW5hbGlnbmVkX2JlCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1nZW5lcmljL2J1Zy5oIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy9idWcuaAppbmRleCBlZGM2YmE4Li4wZjZkYWJkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1nZW5lcmljL2J1Zy5oCisrKyBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvYnVnLmgKQEAgLTIyLDcgKzIyLDcgQEAKIAogI2lmbmRlZiBIQVZFX0FSQ0hfQlVHCiAjZGVmaW5lIEJVRygpIGRvIHsgXAotCXByaW50aygiQlVHOiBmYWlsdXJlIGF0ICVzOiVkLyVzKCkhXG4iLCBfX0ZJTEVfXywgX19MSU5FX18sIF9fRlVOQ1RJT05fXyk7IFwKKwlwcmludGsoIkJVRzogZmFpbHVyZSBhdCAlczolZC8lcygpIVxuIiwgX19GSUxFX18sIF9fTElORV9fLCBfX2Z1bmNfXyk7IFwKIAlwYW5pYygiQlVHISIpOyBcCiB9IHdoaWxlICgwKQogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1nZW5lcmljL2dwaW8uaCBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvZ3Bpby5oCmluZGV4IDBmOTlhZDMuLjgxNzk3ZWMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvZ3Bpby5oCisrKyBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvZ3Bpby5oCkBAIC0zNSwxMSArMzUsMTcgQEAKICAqIEBsYWJlbDogZm9yIGRpYWdub3N0aWNzCiAgKiBAZGV2OiBvcHRpb25hbCBkZXZpY2UgcHJvdmlkaW5nIHRoZSBHUElPcwogICogQG93bmVyOiBoZWxwcyBwcmV2ZW50IHJlbW92YWwgb2YgbW9kdWxlcyBleHBvcnRpbmcgYWN0aXZlIEdQSU9zCisgKiBAcmVxdWVzdDogb3B0aW9uYWwgaG9vayBmb3IgY2hpcC1zcGVjaWZpYyBhY3RpdmF0aW9uLCBzdWNoIGFzCisgKgllbmFibGluZyBtb2R1bGUgcG93ZXIgYW5kIGNsb2NrOyBtYXkgc2xlZXAKKyAqIEBmcmVlOiBvcHRpb25hbCBob29rIGZvciBjaGlwLXNwZWNpZmljIGRlYWN0aXZhdGlvbiwgc3VjaCBhcworICoJZGlzYWJsaW5nIG1vZHVsZSBwb3dlciBhbmQgY2xvY2s7IG1heSBzbGVlcAogICogQGRpcmVjdGlvbl9pbnB1dDogY29uZmlndXJlcyBzaWduYWwgIm9mZnNldCIgYXMgaW5wdXQsIG9yIHJldHVybnMgZXJyb3IKICAqIEBnZXQ6IHJldHVybnMgdmFsdWUgZm9yIHNpZ25hbCAib2Zmc2V0IjsgZm9yIG91dHB1dCBzaWduYWxzIHRoaXMKICAqCXJldHVybnMgZWl0aGVyIHRoZSB2YWx1ZSBhY3R1YWxseSBzZW5zZWQsIG9yIHplcm8KICAqIEBkaXJlY3Rpb25fb3V0cHV0OiBjb25maWd1cmVzIHNpZ25hbCAib2Zmc2V0IiBhcyBvdXRwdXQsIG9yIHJldHVybnMgZXJyb3IKICAqIEBzZXQ6IGFzc2lnbnMgb3V0cHV0IHZhbHVlIGZvciBzaWduYWwgIm9mZnNldCIKKyAqIEB0b19pcnE6IG9wdGlvbmFsIGhvb2sgc3VwcG9ydGluZyBub24tc3RhdGljIGdwaW9fdG9faXJxKCkgbWFwcGluZ3M7CisgKglpbXBsZW1lbnRhdGlvbiBtYXkgbm90IHNsZWVwCiAgKiBAZGJnX3Nob3c6IG9wdGlvbmFsIHJvdXRpbmUgdG8gc2hvdyBjb250ZW50cyBpbiBkZWJ1Z2ZzOyBkZWZhdWx0IGNvZGUKICAqCXdpbGwgYmUgdXNlZCB3aGVuIHRoaXMgaXMgb21pdHRlZCwgYnV0IGN1c3RvbSBjb2RlIGNhbiBzaG93IGV4dHJhCiAgKglzdGF0ZSAoc3VjaCBhcyBwdWxsdXAvcHVsbGRvd24gY29uZmlndXJhdGlvbikuCkBAIC02MSwxMCArNjcsMTUgQEAKICAqIGlzIGNhbGN1bGF0ZWQgYnkgc3VidHJhY3RpbmcgQGJhc2UgZnJvbSB0aGUgZ3BpbyBudW1iZXIuCiAgKi8KIHN0cnVjdCBncGlvX2NoaXAgewotCWNoYXIJCQkqbGFiZWw7CisJY29uc3QgY2hhcgkJKmxhYmVsOwogCXN0cnVjdCBkZXZpY2UJCSpkZXY7CiAJc3RydWN0IG1vZHVsZQkJKm93bmVyOwogCisJaW50CQkJKCpyZXF1ZXN0KShzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLAorCQkJCQkJdW5zaWduZWQgb2Zmc2V0KTsKKwl2b2lkCQkJKCpmcmVlKShzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLAorCQkJCQkJdW5zaWduZWQgb2Zmc2V0KTsKKwogCWludAkJCSgqZGlyZWN0aW9uX2lucHV0KShzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLAogCQkJCQkJdW5zaWduZWQgb2Zmc2V0KTsKIAlpbnQJCQkoKmdldCkoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwKQEAgLTczLDYgKzg0LDEwIEBACiAJCQkJCQl1bnNpZ25lZCBvZmZzZXQsIGludCB2YWx1ZSk7CiAJdm9pZAkJCSgqc2V0KShzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLAogCQkJCQkJdW5zaWduZWQgb2Zmc2V0LCBpbnQgdmFsdWUpOworCisJaW50CQkJKCp0b19pcnEpKHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsCisJCQkJCQl1bnNpZ25lZCBvZmZzZXQpOworCiAJdm9pZAkJCSgqZGJnX3Nob3cpKHN0cnVjdCBzZXFfZmlsZSAqcywKIAkJCQkJCXN0cnVjdCBncGlvX2NoaXAgKmNoaXApOwogCWludAkJCWJhc2U7CkBAIC0xMTIsNiArMTI3LDcgQEAKIAogZXh0ZXJuIGludCBfX2dwaW9fY2Fuc2xlZXAodW5zaWduZWQgZ3Bpbyk7CiAKK2V4dGVybiBpbnQgX19ncGlvX3RvX2lycSh1bnNpZ25lZCBncGlvKTsKIAogI2lmZGVmIENPTkZJR19HUElPX1NZU0ZTCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvcnRjLmggYi9pbmNsdWRlL2FzbS1nZW5lcmljL3J0Yy5oCmluZGV4IDcxZWYzZjAuLjg5MDYxYzEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvcnRjLmgKKysrIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy9ydGMuaApAQCAtODQsMTIgKzg0LDEyIEBACiAKIAlpZiAoIShjdHJsICYgUlRDX0RNX0JJTkFSWSkgfHwgUlRDX0FMV0FZU19CQ0QpCiAJewotCQlCQ0RfVE9fQklOKHRpbWUtPnRtX3NlYyk7Ci0JCUJDRF9UT19CSU4odGltZS0+dG1fbWluKTsKLQkJQkNEX1RPX0JJTih0aW1lLT50bV9ob3VyKTsKLQkJQkNEX1RPX0JJTih0aW1lLT50bV9tZGF5KTsKLQkJQkNEX1RPX0JJTih0aW1lLT50bV9tb24pOwotCQlCQ0RfVE9fQklOKHRpbWUtPnRtX3llYXIpOworCQl0aW1lLT50bV9zZWMgPSBiY2QyYmluKHRpbWUtPnRtX3NlYyk7CisJCXRpbWUtPnRtX21pbiA9IGJjZDJiaW4odGltZS0+dG1fbWluKTsKKwkJdGltZS0+dG1faG91ciA9IGJjZDJiaW4odGltZS0+dG1faG91cik7CisJCXRpbWUtPnRtX21kYXkgPSBiY2QyYmluKHRpbWUtPnRtX21kYXkpOworCQl0aW1lLT50bV9tb24gPSBiY2QyYmluKHRpbWUtPnRtX21vbik7CisJCXRpbWUtPnRtX3llYXIgPSBiY2QyYmluKHRpbWUtPnRtX3llYXIpOwogCX0KIAogI2lmZGVmIENPTkZJR19NQUNIX0RFQ1NUQVRJT04KQEAgLTE1OSwxMiArMTU5LDEyIEBACiAKIAlpZiAoIShDTU9TX1JFQUQoUlRDX0NPTlRST0wpICYgUlRDX0RNX0JJTkFSWSkKIAkgICAgfHwgUlRDX0FMV0FZU19CQ0QpIHsKLQkJQklOX1RPX0JDRChzZWMpOwotCQlCSU5fVE9fQkNEKG1pbik7Ci0JCUJJTl9UT19CQ0QoaHJzKTsKLQkJQklOX1RPX0JDRChkYXkpOwotCQlCSU5fVE9fQkNEKG1vbik7Ci0JCUJJTl9UT19CQ0QoeXJzKTsKKwkJc2VjID0gYmluMmJjZChzZWMpOworCQltaW4gPSBiaW4yYmNkKG1pbik7CisJCWhycyA9IGJpbjJiY2QoaHJzKTsKKwkJZGF5ID0gYmluMmJjZChkYXkpOworCQltb24gPSBiaW4yYmNkKG1vbik7CisJCXlycyA9IGJpbjJiY2QoeXJzKTsKIAl9CiAKIAlzYXZlX2NvbnRyb2wgPSBDTU9TX1JFQUQoUlRDX0NPTlRST0wpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tZ2VuZXJpYy9zdGF0ZnMuaCBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvc3RhdGZzLmgKaW5kZXggMWQwMTA0My4uNjEyOWQ2OCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tZ2VuZXJpYy9zdGF0ZnMuaAorKysgYi9pbmNsdWRlL2FzbS1nZW5lcmljL3N0YXRmcy5oCkBAIC02LDMzICs2LDY0IEBACiB0eXBlZGVmIF9fa2VybmVsX2ZzaWRfdAlmc2lkX3Q7CiAjZW5kaWYKIAorLyoKKyAqIE1vc3QgNjQtYml0IHBsYXRmb3JtcyB1c2UgJ2xvbmcnLCB3aGlsZSBtb3N0IDMyLWJpdCBwbGF0Zm9ybXMgdXNlICdfX3UzMicuCisgKiBZZXMsIHRoZXkgZGlmZmVyIGluIHNpZ25lZG5lc3MgYXMgd2VsbCBhcyBzaXplLgorICogU3BlY2lhbCBjYXNlcyBjYW4gb3ZlcnJpZGUgaXQgZm9yIHRoZW1zZWx2ZXMgLS0gZXhjZXB0IGZvciBTMzkweCwgd2hpY2gKKyAqIGlzIGp1c3QgYSBsaXR0bGUgdG9vIHNwZWNpYWwgZm9yIHVzLiBBbmQgTUlQUywgd2hpY2ggSSdtIG5vdCB0b3VjaGluZworICogd2l0aCBhIDEwJyBwb2xlLgorICovCisjaWZuZGVmIF9fc3RhdGZzX3dvcmQKKyNpZiBCSVRTX1BFUl9MT05HID09IDY0CisjZGVmaW5lIF9fc3RhdGZzX3dvcmQgbG9uZworI2Vsc2UKKyNkZWZpbmUgX19zdGF0ZnNfd29yZCBfX3UzMgorI2VuZGlmCisjZW5kaWYKKwogc3RydWN0IHN0YXRmcyB7Ci0JX191MzIgZl90eXBlOwotCV9fdTMyIGZfYnNpemU7Ci0JX191MzIgZl9ibG9ja3M7Ci0JX191MzIgZl9iZnJlZTsKLQlfX3UzMiBmX2JhdmFpbDsKLQlfX3UzMiBmX2ZpbGVzOwotCV9fdTMyIGZfZmZyZWU7CisJX19zdGF0ZnNfd29yZCBmX3R5cGU7CisJX19zdGF0ZnNfd29yZCBmX2JzaXplOworCV9fc3RhdGZzX3dvcmQgZl9ibG9ja3M7CisJX19zdGF0ZnNfd29yZCBmX2JmcmVlOworCV9fc3RhdGZzX3dvcmQgZl9iYXZhaWw7CisJX19zdGF0ZnNfd29yZCBmX2ZpbGVzOworCV9fc3RhdGZzX3dvcmQgZl9mZnJlZTsKIAlfX2tlcm5lbF9mc2lkX3QgZl9mc2lkOwotCV9fdTMyIGZfbmFtZWxlbjsKLQlfX3UzMiBmX2Zyc2l6ZTsKLQlfX3UzMiBmX3NwYXJlWzVdOworCV9fc3RhdGZzX3dvcmQgZl9uYW1lbGVuOworCV9fc3RhdGZzX3dvcmQgZl9mcnNpemU7CisJX19zdGF0ZnNfd29yZCBmX3NwYXJlWzVdOwogfTsKIAorLyoKKyAqIEFSTSBuZWVkcyB0byBhdm9pZCB0aGUgMzItYml0IHBhZGRpbmcgYXQgdGhlIGVuZCwgZm9yIGNvbnNpc3RlbmN5CisgKiBiZXR3ZWVuIEVBQkkgYW5kIE9BQkkgCisgKi8KKyNpZm5kZWYgQVJDSF9QQUNLX1NUQVRGUzY0CisjZGVmaW5lIEFSQ0hfUEFDS19TVEFURlM2NAorI2VuZGlmCisKIHN0cnVjdCBzdGF0ZnM2NCB7Ci0JX191MzIgZl90eXBlOwotCV9fdTMyIGZfYnNpemU7CisJX19zdGF0ZnNfd29yZCBmX3R5cGU7CisJX19zdGF0ZnNfd29yZCBmX2JzaXplOwogCV9fdTY0IGZfYmxvY2tzOwogCV9fdTY0IGZfYmZyZWU7CiAJX191NjQgZl9iYXZhaWw7CiAJX191NjQgZl9maWxlczsKIAlfX3U2NCBmX2ZmcmVlOwogCV9fa2VybmVsX2ZzaWRfdCBmX2ZzaWQ7Ci0JX191MzIgZl9uYW1lbGVuOwotCV9fdTMyIGZfZnJzaXplOwotCV9fdTMyIGZfc3BhcmVbNV07Ci19OworCV9fc3RhdGZzX3dvcmQgZl9uYW1lbGVuOworCV9fc3RhdGZzX3dvcmQgZl9mcnNpemU7CisJX19zdGF0ZnNfd29yZCBmX3NwYXJlWzVdOworfSBBUkNIX1BBQ0tfU1RBVEZTNjQ7CisKKy8qIAorICogSUE2NCBhbmQgeDg2XzY0IG5lZWQgdG8gYXZvaWQgdGhlIDMyLWJpdCBwYWRkaW5nIGF0IHRoZSBlbmQsCisgKiB0byBiZSBjb21wYXRpYmxlIHdpdGggdGhlIGkzODYgQUJJCisgKi8KKyNpZm5kZWYgQVJDSF9QQUNLX0NPTVBBVF9TVEFURlM2NAorI2RlZmluZSBBUkNIX1BBQ0tfQ09NUEFUX1NUQVRGUzY0CisjZW5kaWYKIAogc3RydWN0IGNvbXBhdF9zdGF0ZnM2NCB7CiAJX191MzIgZl90eXBlOwpAQCAtNDYsNiArNzcsNiBAQAogCV9fdTMyIGZfbmFtZWxlbjsKIAlfX3UzMiBmX2Zyc2l6ZTsKIAlfX3UzMiBmX3NwYXJlWzVdOwotfTsKK30gQVJDSF9QQUNLX0NPTVBBVF9TVEFURlM2NDsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1nZW5lcmljL3ZtbGludXgubGRzLmggYi9pbmNsdWRlL2FzbS1nZW5lcmljL3ZtbGludXgubGRzLmgKaW5kZXggNzQ0MGEwZC4uNzRjNWZhZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tZ2VuZXJpYy92bWxpbnV4Lmxkcy5oCisrKyBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvdm1saW51eC5sZHMuaApAQCAtMjY4LDcgKzI2OCwxNSBAQAogCUNQVV9ESVNDQVJEKGluaXQuZGF0YSkJCQkJCQlcCiAJQ1BVX0RJU0NBUkQoaW5pdC5yb2RhdGEpCQkJCQlcCiAJTUVNX0RJU0NBUkQoaW5pdC5kYXRhKQkJCQkJCVwKLQlNRU1fRElTQ0FSRChpbml0LnJvZGF0YSkKKwlNRU1fRElTQ0FSRChpbml0LnJvZGF0YSkJCQkJCVwKKwkvKiBpbXBsZW1lbnQgZHluYW1pYyBwcmludGsgZGVidWcgKi8JCQkJXAorCVZNTElOVVhfU1lNQk9MKF9fc3RhcnRfX192ZXJib3NlX3N0cmluZ3MpID0gLjsgICAgICAgICAgICAgICAgICBcCisJKihfX3ZlcmJvc2Vfc3RyaW5ncykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwlWTUxJTlVYX1NZTUJPTChfX3N0b3BfX192ZXJib3NlX3N0cmluZ3MpID0gLjsgICAgICAgICAgICAgICAgICAgXAorCS4gPSBBTElHTig4KTsJCQkJCQkJXAorCVZNTElOVVhfU1lNQk9MKF9fc3RhcnRfX192ZXJib3NlKSA9IC47ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJKihfX3ZlcmJvc2UpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwlWTUxJTlVYX1NZTUJPTChfX3N0b3BfX192ZXJib3NlKSA9IC47CiAKICNkZWZpbmUgSU5JVF9URVhUCQkJCQkJCVwKIAkqKC5pbml0LnRleHQpCQkJCQkJCVwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWg4MzAwL3RpbWVyLmggYi9pbmNsdWRlL2FzbS1oODMwMC90aW1lci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlZjgwNDYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1oODMwMC90aW1lci5oCkBAIC0wLDAgKzEsMjUgQEAKKyNpZm5kZWYgX19IODMwMF9USU1FUl9ICisjZGVmaW5lIF9fSDgzMDBfVElNRVJfSAorCit2b2lkIGg4MzAwX3RpbWVyX3RpY2sodm9pZCk7Cit2b2lkIGg4MzAwX3RpbWVyX3NldHVwKHZvaWQpOwordm9pZCBoODMwMF9nZXR0b2QodW5zaWduZWQgaW50ICp5ZWFyLCB1bnNpZ25lZCBpbnQgKm1vbiwgdW5zaWduZWQgaW50ICpkYXksCisJCSAgIHVuc2lnbmVkIGludCAqaG91ciwgdW5zaWduZWQgaW50ICptaW4sIHVuc2lnbmVkIGludCAqc2VjKTsKKworI2RlZmluZSBUSU1FUl9GUkVRIChDT05GSUdfQ1BVX0NMT0NLKjEwMDAwKSAvKiBUaW1lciBpbnB1dCBmcmVxLiAqLworCisjZGVmaW5lIGNhbGNfcGFyYW0oY250LCBkaXYsIHJhdGUsIGxpbWl0KQkJCVwKK2RvIHsJCQkJCQkJCVwKKwljbnQgPSBUSU1FUl9GUkVRIC8gSFo7CQkJCQlcCisJZm9yIChkaXYgPSAwOyBkaXYgPCBBUlJBWV9TSVpFKGRpdmlkZV9yYXRlKTsgZGl2KyspIHsJXAorCQlpZiAocmF0ZVtkaXZdID09IDApCQkJCVwKKwkJCWNvbnRpbnVlOwkJCQlcCisJCWlmICgoY250IC8gcmF0ZVtkaXZdKSA+IGxpbWl0KQkJCVwKKwkJCWJyZWFrOwkJCQkJXAorCX0JCQkJCQkJXAorCWlmIChkaXYgPT0gQVJSQVlfU0laRShkaXZpZGVfcmF0ZSkpCQkJXAorCQlwYW5pYygiVGltZXIgY291bnRlciBvdmVyZmxvdyIpOwkJXAorCWNudCAvPSBkaXZpZGVfcmF0ZVtkaXZdOwkJCQlcCit9IHdoaWxlKDApCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTMyci9hLm91dC5oIGIvaW5jbHVkZS9hc20tbTMyci9hLm91dC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYjE1MGY1Li4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLW0zMnIvYS5vdXQuaAorKysgL2Rldi9udWxsCkBAIC0xLDIwICswLDAgQEAKLSNpZm5kZWYgX0FTTV9NMzJSX0FfT1VUX0gKLSNkZWZpbmUgX0FTTV9NMzJSX0FfT1VUX0gKLQotc3RydWN0IGV4ZWMKLXsKLSAgdW5zaWduZWQgbG9uZyBhX2luZm87CQkvKiBVc2UgbWFjcm9zIE5fTUFHSUMsIGV0YyBmb3IgYWNjZXNzICovCi0gIHVuc2lnbmVkIGFfdGV4dDsJCS8qIGxlbmd0aCBvZiB0ZXh0LCBpbiBieXRlcyAqLwotICB1bnNpZ25lZCBhX2RhdGE7CQkvKiBsZW5ndGggb2YgZGF0YSwgaW4gYnl0ZXMgKi8KLSAgdW5zaWduZWQgYV9ic3M7CQkvKiBsZW5ndGggb2YgdW5pbml0aWFsaXplZCBkYXRhIGFyZWEgZm9yIGZpbGUsIGluIGJ5dGVzICovCi0gIHVuc2lnbmVkIGFfc3ltczsJCS8qIGxlbmd0aCBvZiBzeW1ib2wgdGFibGUgZGF0YSBpbiBmaWxlLCBpbiBieXRlcyAqLwotICB1bnNpZ25lZCBhX2VudHJ5OwkJLyogc3RhcnQgYWRkcmVzcyAqLwotICB1bnNpZ25lZCBhX3Ryc2l6ZTsJCS8qIGxlbmd0aCBvZiByZWxvY2F0aW9uIGluZm8gZm9yIHRleHQsIGluIGJ5dGVzICovCi0gIHVuc2lnbmVkIGFfZHJzaXplOwkJLyogbGVuZ3RoIG9mIHJlbG9jYXRpb24gaW5mbyBmb3IgZGF0YSwgaW4gYnl0ZXMgKi8KLX07Ci0KLSNkZWZpbmUgTl9UUlNJWkUoYSkJKChhKS5hX3Ryc2l6ZSkKLSNkZWZpbmUgTl9EUlNJWkUoYSkJKChhKS5hX2Ryc2l6ZSkKLSNkZWZpbmUgTl9TWU1TSVpFKGEpCSgoYSkuYV9zeW1zKQotCi0jZW5kaWYgLyogX0FTTV9NMzJSX0FfT1VUX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW0zMnIvZWxmLmggYi9pbmNsdWRlL2FzbS1tMzJyL2VsZi5oCmluZGV4IDY3YmNkNzcuLjBjYzM0YzkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW0zMnIvZWxmLmgKKysrIGIvaW5jbHVkZS9hc20tbTMyci9lbGYuaApAQCAtMTI5LDYgKzEyOSw2IEBACiAgICBpbnRlbnQgdGhhbiBwb2tpbmcgYXQgdW5hbWUgb3IgL3Byb2MvY3B1aW5mby4gICovCiAjZGVmaW5lIEVMRl9QTEFURk9STQkoTlVMTCkKIAotI2RlZmluZSBTRVRfUEVSU09OQUxJVFkoZXgsIGliY3MyKSBzZXRfcGVyc29uYWxpdHkoUEVSX0xJTlVYKQorI2RlZmluZSBTRVRfUEVSU09OQUxJVFkoZXgpIHNldF9wZXJzb25hbGl0eShQRVJfTElOVVgpCiAKICNlbmRpZiAgLyogX0FTTV9NMzJSX19FTEZfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4ay9hdGFyaWh3LmggYi9pbmNsdWRlL2FzbS1tNjhrL2F0YXJpaHcuaAppbmRleCBlY2YwMDdkLi4xNDEyYjRhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1tNjhrL2F0YXJpaHcuaAorKysgYi9pbmNsdWRlL2FzbS1tNjhrL2F0YXJpaHcuaApAQCAtMzksNyArMzksNiBAQAogI2RlZmluZSBNQUNIX0lTX1RUCSgoYXRhcmlfbWNoX2Nvb2tpZSA+PiAxNikgPT0gQVRBUklfTUNIX1RUKQogI2RlZmluZSBNQUNIX0lTX0ZBTENPTgkoKGF0YXJpX21jaF9jb29raWUgPj4gMTYpID09IEFUQVJJX01DSF9GQUxDT04pCiAjZGVmaW5lIE1BQ0hfSVNfTUVEVVNBCShhdGFyaV9tY2hfdHlwZSA9PSBBVEFSSV9NQUNIX01FRFVTQSkKLSNkZWZpbmUgTUFDSF9JU19IQURFUwkoYXRhcmlfbWNoX3R5cGUgPT0gQVRBUklfTUFDSF9IQURFUykKICNkZWZpbmUgTUFDSF9JU19BQjQwCShhdGFyaV9tY2hfdHlwZSA9PSBBVEFSSV9NQUNIX0FCNDApCiAKIC8qIHZhbHVlcyBmb3IgYXRhcmlfc3dpdGNoZXMgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW02OGsvZG1hLW1hcHBpbmcuaCBiL2luY2x1ZGUvYXNtLW02OGsvZG1hLW1hcHBpbmcuaAppbmRleCA5MWY3OTQ0Li4yNmY1MDU0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1tNjhrL2RtYS1tYXBwaW5nLmgKKysrIGIvaW5jbHVkZS9hc20tbTY4ay9kbWEtbWFwcGluZy5oCkBAIC03NCw2ICs3NCwxNCBAQAogZXh0ZXJuIHZvaWQgZG1hX3N5bmNfc2dfZm9yX2RldmljZShzdHJ1Y3QgZGV2aWNlICosIHN0cnVjdCBzY2F0dGVybGlzdCAqLCBpbnQsCiAJCQkJICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24pOwogCitzdGF0aWMgaW5saW5lIHZvaWQgZG1hX3N5bmNfc2luZ2xlX3JhbmdlX2Zvcl9kZXZpY2Uoc3RydWN0IGRldmljZSAqZGV2LAorCQlkbWFfYWRkcl90IGRtYV9oYW5kbGUsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCBzaXplX3Qgc2l6ZSwKKwkJZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKQoreworCS8qIGp1c3Qgc3luYyBldmVyeXRoaW5nIGZvciBub3cgKi8KKwlkbWFfc3luY19zaW5nbGVfZm9yX2RldmljZShkZXYsIGRtYV9oYW5kbGUsIG9mZnNldCArIHNpemUsIGRpcmVjdGlvbik7Cit9CisKIHN0YXRpYyBpbmxpbmUgdm9pZCBkbWFfc3luY19zaW5nbGVfZm9yX2NwdShzdHJ1Y3QgZGV2aWNlICpkZXYsIGRtYV9hZGRyX3QgaGFuZGxlLAogCQkJCQkgICBzaXplX3Qgc2l6ZSwgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyKQogewpAQCAtODQsNiArOTIsMTQgQEAKIHsKIH0KIAorc3RhdGljIGlubGluZSB2b2lkIGRtYV9zeW5jX3NpbmdsZV9yYW5nZV9mb3JfY3B1KHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJZG1hX2FkZHJfdCBkbWFfaGFuZGxlLCB1bnNpZ25lZCBsb25nIG9mZnNldCwgc2l6ZV90IHNpemUsCisJCWVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbikKK3sKKwkvKiBqdXN0IHN5bmMgZXZlcnl0aGluZyBmb3Igbm93ICovCisJZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUoZGV2LCBkbWFfaGFuZGxlLCBvZmZzZXQgKyBzaXplLCBkaXJlY3Rpb24pOworfQorCiBzdGF0aWMgaW5saW5lIGludCBkbWFfbWFwcGluZ19lcnJvcihzdHJ1Y3QgZGV2aWNlICpkZXYsIGRtYV9hZGRyX3QgaGFuZGxlKQogewogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4ay9kbWEuaCBiL2luY2x1ZGUvYXNtLW02OGsvZG1hLmgKaW5kZXggZDBjOWU2MS4uNDI0MGZiYzkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW02OGsvZG1hLmgKKysrIGIvaW5jbHVkZS9hc20tbTY4ay9kbWEuaApAQCAtMTEsMTAgKzExLDYgQEAKIGV4dGVybiBpbnQgcmVxdWVzdF9kbWEodW5zaWduZWQgaW50IGRtYW5yLCBjb25zdCBjaGFyICogZGV2aWNlX2lkKTsJLyogcmVzZXJ2ZSBhIERNQSBjaGFubmVsICovCiBleHRlcm4gdm9pZCBmcmVlX2RtYSh1bnNpZ25lZCBpbnQgZG1hbnIpOwkvKiByZWxlYXNlIGl0IGFnYWluICovCiAKLSNpZmRlZiBDT05GSUdfUENJCi1leHRlcm4gaW50IGlzYV9kbWFfYnJpZGdlX2J1Z2d5OwotI2Vsc2UKICNkZWZpbmUgaXNhX2RtYV9icmlkZ2VfYnVnZ3kgICAgKDApCi0jZW5kaWYKIAogI2VuZGlmIC8qIF9NNjhLX0RNQV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tNjhrL2VsZi5oIGIvaW5jbHVkZS9hc20tbTY4ay9lbGYuaAppbmRleCAxNGVhNDIxNS4uMGIwZjQ5ZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbTY4ay9lbGYuaAorKysgYi9pbmNsdWRlL2FzbS1tNjhrL2VsZi5oCkBAIC0xMTQsNiArMTE0LDYgQEAKIAogI2RlZmluZSBFTEZfUExBVEZPUk0gIChOVUxMKQogCi0jZGVmaW5lIFNFVF9QRVJTT05BTElUWShleCwgaWJjczIpIHNldF9wZXJzb25hbGl0eSgoaWJjczIpP1BFUl9TVlI0OlBFUl9MSU5VWCkKKyNkZWZpbmUgU0VUX1BFUlNPTkFMSVRZKGV4KSBzZXRfcGVyc29uYWxpdHkoUEVSX0xJTlVYKQogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW02OGsvZW50cnkuaCBiL2luY2x1ZGUvYXNtLW02OGsvZW50cnkuaAppbmRleCBmOGY2YjE4Li41MjAyZjVhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1tNjhrL2VudHJ5LmgKKysrIGIvaW5jbHVkZS9hc20tbTY4ay9lbnRyeS5oCkBAIC0zMSw3ICszMSw3IEBACiAgKi8KIAogLyogdGhlIGZvbGxvd2luZyBtYWNybyBpcyB1c2VkIHdoZW4gZW5hYmxpbmcgaW50ZXJydXB0cyAqLwotI2lmIGRlZmluZWQoTUFDSF9BVEFSSV9PTkxZKSAmJiAhZGVmaW5lZChDT05GSUdfSEFERVMpCisjaWYgZGVmaW5lZChNQUNIX0FUQVJJX09OTFkpCiAJLyogYmxvY2sgb3V0IEhTWU5DIG9uIHRoZSBhdGFyaSAqLwogI2RlZmluZSBBTExPV0lOVAkofjB4NDAwKQogI2RlZmluZQlNQVhfTk9JTlRfSVBMCTMKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW02OGsvaWRlLmggYi9pbmNsdWRlL2FzbS1tNjhrL2lkZS5oCmluZGV4IDFkYWY2Y2IuLmI5OTZhM2MgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW02OGsvaWRlLmgKKysrIGIvaW5jbHVkZS9hc20tbTY4ay9pZGUuaApAQCAtOTIsMTUgKzkyLDYgQEAKICNkZWZpbmUgb3V0c3dfc3dhcHcocG9ydCwgYWRkciwgbikJcmF3X291dHN3X3N3YXB3KCh1MTYgKilwb3J0LCBhZGRyLCBuKQogI2VuZGlmCiAKLQotLyogUTQwIGFuZCBBdGFyaSBoYXZlIGJ5dGVzd2FwcGVkIElERSBidXNzZXMgYW5kIHNpbmNlIG1hbnkgaW50ZXJlc3RpbmcKLSAqIHZhbHVlcyBpbiB0aGUgaWRlbnRpZmljYXRpb24gc3RyaW5nIGFyZSB0ZXh0LCBjaGFycyBhbmQgd29yZHMgdGhleQotICogaGFwcGVuZWQgdG8gYmUgYWxtb3N0IGNvcnJlY3Qgd2l0aG91dCBzd2FwcGluZy4uIEhvd2V2ZXIgKl9jYXBhY2l0eQotICogaXMgbmVlZGVkIGZvciBkcml2ZXMgb3ZlciA4IEdCLiBSWiAqLwotI2lmIGRlZmluZWQoQ09ORklHX1E0MCkgfHwgZGVmaW5lZChDT05GSUdfQVRBUkkpCi0jZGVmaW5lIE02OEtfSURFX1NXQVBXICAoTUFDSF9JU19RNDAgfHwgTUFDSF9JU19BVEFSSSkKLSNlbmRpZgotCiAjaWZkZWYgQ09ORklHX0JMS19ERVZfRkFMQ09OX0lERQogI2RlZmluZSBJREVfQVJDSF9MT0NLCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW02OGsvaW8uaCBiL2luY2x1ZGUvYXNtLW02OGsvaW8uaAppbmRleCA2NTcxODdmLi45ZTY3M2UzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1tNjhrL2lvLmgKKysrIGIvaW5jbHVkZS9hc20tbTY4ay9pby5oCkBAIC03LDE1ICs3LDEyIEBACiAgKiAgICAgICAgICAgIC0gYWRkZWQgc2tlbGV0b24gZm9yIEdHLUlJIGFuZCBBbWlnYSBQQ01DSUEKICAqIDIvMy8wMSBSWjogLSBtb3ZlZCBhIGZldyBtb3JlIGRlZnMgaW50byByYXdfaW8uaAogICoKLSAqIGluWC9vdXRYL3JlYWRYL3dyaXRlWCBzaG91bGQgbm90IGJlIHVzZWQgYnkgYW55IGRyaXZlciB1bmxlc3MgaXQgZG9lcwotICogSVNBIG9yIFBDSSBhY2Nlc3MuIE90aGVyIGRyaXZlcnMgc2hvdWxkIHVzZSBmdW5jdGlvbiBkZWZpbmVkIGluIHJhd19pby5oCisgKiBpblgvb3V0WCBzaG91bGQgbm90IGJlIHVzZWQgYnkgYW55IGRyaXZlciB1bmxlc3MgaXQgZG9lcworICogSVNBIGFjY2Vzcy4gT3RoZXIgZHJpdmVycyBzaG91bGQgdXNlIGZ1bmN0aW9uIGRlZmluZWQgaW4gcmF3X2lvLmgKICAqIG9yIGRlZmluZSBpdHMgb3duIG1hY3JvcyBvbiB0b3Agb2YgdGhlc2UuCiAgKgotICogICAgaW5YKCksb3V0WCgpICAgICAgICAgICAgICBhcmUgZm9yIFBDSSBhbmQgSVNBIEkvTwotICogICAgcmVhZFgoKSx3cml0ZVgoKSAgICAgICAgICBhcmUgZm9yIFBDSSBtZW1vcnkKKyAqICAgIGluWCgpLG91dFgoKSAgICAgICAgICAgICAgYXJlIGZvciBJU0EgSS9PCiAgKiAgICBpc2FfcmVhZFgoKSxpc2Ffd3JpdGVYKCkgIGFyZSBmb3IgSVNBIG1lbW9yeQotICoKLSAqIG1vdmVkIG1lbXtjcHksc2V0fV8qaW8gaW5zaWRlIENPTkZJR19QQ0kKICAqLwogCiAjaWZuZGVmIF9JT19ICkBAIC0yNTYsMTAgKzI1Myw3IEBACiAgICAgICAgKElTQV9TRVggPyByYXdfb3V0c2woaXNhX2l0bChwb3J0KSwgKHUzMiAqKShidWYpLCAobnIpKSA6ICBcCiAgICAgICAgICAgICAgICAgICByYXdfb3V0c3dfc3dhcHcoaXNhX2l0dyhwb3J0KSwgKHUxNiAqKShidWYpLCAobnIpPDwxKSkKIAotI2VuZGlmICAvKiBDT05GSUdfSVNBICovCiAKLQotI2lmIGRlZmluZWQoQ09ORklHX0lTQSkgJiYgIWRlZmluZWQoQ09ORklHX1BDSSkKICNkZWZpbmUgaW5iICAgICBpc2FfaW5iCiAjZGVmaW5lIGluYl9wICAgaXNhX2luYl9wCiAjZGVmaW5lIG91dGIgICAgaXNhX291dGIKQEAgLTI4Miw1NSArMjc2LDkgQEAKICNkZWZpbmUgcmVhZHcgICBpc2FfcmVhZHcKICNkZWZpbmUgd3JpdGViICBpc2Ffd3JpdGViCiAjZGVmaW5lIHdyaXRldyAgaXNhX3dyaXRldwotI2VuZGlmIC8qIENPTkZJR19JU0EgKi8KIAotI2lmIGRlZmluZWQoQ09ORklHX1BDSSkKKyNlbHNlICAvKiBDT05GSUdfSVNBICovCiAKLSNkZWZpbmUgcmVhZGwoYWRkcikgICAgICBpbl9sZTMyKGFkZHIpCi0jZGVmaW5lIHdyaXRlbCh2YWwsYWRkcikgb3V0X2xlMzIoKGFkZHIpLCh2YWwpKQotCi0vKiB0aG9zZSBjYW4gYmUgZGVmaW5lZCBmb3IgYm90aCBJU0EgYW5kIFBDSSAtIGl0IHdvbid0IHdvcmsgdGhvdWdoICovCi0jZGVmaW5lIHJlYWRiKGFkZHIpICAgICAgIGluXzgoYWRkcikKLSNkZWZpbmUgcmVhZHcoYWRkcikgICAgICAgaW5fbGUxNihhZGRyKQotI2RlZmluZSB3cml0ZWIodmFsLGFkZHIpICBvdXRfOCgoYWRkciksKHZhbCkpCi0jZGVmaW5lIHdyaXRldyh2YWwsYWRkcikgIG91dF9sZTE2KChhZGRyKSwodmFsKSkKLQotI2RlZmluZSByZWFkYl9yZWxheGVkKGFkZHIpIHJlYWRiKGFkZHIpCi0jZGVmaW5lIHJlYWR3X3JlbGF4ZWQoYWRkcikgcmVhZHcoYWRkcikKLSNkZWZpbmUgcmVhZGxfcmVsYXhlZChhZGRyKSByZWFkbChhZGRyKQotCi0jaWZuZGVmIENPTkZJR19JU0EKLSNkZWZpbmUgaW5iKHBvcnQpICAgICAgaW5fOChwb3J0KQotI2RlZmluZSBvdXRiKHZhbCxwb3J0KSBvdXRfOCgocG9ydCksKHZhbCkpCi0jZGVmaW5lIGludyhwb3J0KSAgICAgIGluX2xlMTYocG9ydCkKLSNkZWZpbmUgb3V0dyh2YWwscG9ydCkgb3V0X2xlMTYoKHBvcnQpLCh2YWwpKQotI2RlZmluZSBpbmwocG9ydCkgICAgICBpbl9sZTMyKHBvcnQpCi0jZGVmaW5lIG91dGwodmFsLHBvcnQpIG91dF9sZTMyKChwb3J0KSwodmFsKSkKLQotI2Vsc2UKLS8qCi0gKiBrZXJuZWwgd2l0aCBib3RoIElTQSBhbmQgUENJIGNvbXBpbGVkIGluLCB0aG9zZSBoYXZlCi0gKiBjb25mbGljdGluZyBkZWZzIGZvciBpbi9vdXQuIFNpbXBseSBjb25zaWRlciBwb3J0IDwgMTAyNAotICogSVNBIGFuZCBldmVyeXRoaW5nIGVsc2UgUENJLiByZWFkLHdyaXRlIG5vdCBkZWZpbmVkCi0gKiBpbiB0aGlzIGNhc2UKLSAqLwotI2RlZmluZSBpbmIocG9ydCkgKChwb3J0KTwxMDI0ID8gaXNhX2luYihwb3J0KSA6IGluXzgocG9ydCkpCi0jZGVmaW5lIGluYl9wKHBvcnQpICgocG9ydCk8MTAyNCA/IGlzYV9pbmJfcChwb3J0KSA6IGluXzgocG9ydCkpCi0jZGVmaW5lIGludyhwb3J0KSAoKHBvcnQpPDEwMjQgPyBpc2FfaW53KHBvcnQpIDogaW5fbGUxNihwb3J0KSkKLSNkZWZpbmUgaW53X3AocG9ydCkgKChwb3J0KTwxMDI0ID8gaXNhX2lud19wKHBvcnQpIDogaW5fbGUxNihwb3J0KSkKLSNkZWZpbmUgaW5sKHBvcnQpICgocG9ydCk8MTAyNCA/IGlzYV9pbmwocG9ydCkgOiBpbl9sZTMyKHBvcnQpKQotI2RlZmluZSBpbmxfcChwb3J0KSAoKHBvcnQpPDEwMjQgPyBpc2FfaW5sX3AocG9ydCkgOiBpbl9sZTMyKHBvcnQpKQotCi0jZGVmaW5lIG91dGIodmFsLHBvcnQpICgocG9ydCk8MTAyNCA/IGlzYV9vdXRiKCh2YWwpLChwb3J0KSkgOiBvdXRfOCgocG9ydCksKHZhbCkpKQotI2RlZmluZSBvdXRiX3AodmFsLHBvcnQpICgocG9ydCk8MTAyNCA/IGlzYV9vdXRiX3AoKHZhbCksKHBvcnQpKSA6IG91dF84KChwb3J0KSwodmFsKSkpCi0jZGVmaW5lIG91dHcodmFsLHBvcnQpICgocG9ydCk8MTAyNCA/IGlzYV9vdXR3KCh2YWwpLChwb3J0KSkgOiBvdXRfbGUxNigocG9ydCksKHZhbCkpKQotI2RlZmluZSBvdXR3X3AodmFsLHBvcnQpICgocG9ydCk8MTAyNCA/IGlzYV9vdXR3X3AoKHZhbCksKHBvcnQpKSA6IG91dF9sZTE2KChwb3J0KSwodmFsKSkpCi0jZGVmaW5lIG91dGwodmFsLHBvcnQpICgocG9ydCk8MTAyNCA/IGlzYV9vdXRsKCh2YWwpLChwb3J0KSkgOiBvdXRfbGUzMigocG9ydCksKHZhbCkpKQotI2RlZmluZSBvdXRsX3AodmFsLHBvcnQpICgocG9ydCk8MTAyNCA/IGlzYV9vdXRsX3AoKHZhbCksKHBvcnQpKSA6IG91dF9sZTMyKChwb3J0KSwodmFsKSkpCi0jZW5kaWYKLSNlbmRpZiAvKiBDT05GSUdfUENJICovCi0KLSNpZiAhZGVmaW5lZChDT05GSUdfSVNBKSAmJiAhZGVmaW5lZChDT05GSUdfUENJKQogLyoKICAqIFdlIG5lZWQgdG8gZGVmaW5lIGR1bW15IGZ1bmN0aW9ucyBmb3IgR0VORVJJQ19JT01BUCBzdXBwb3J0LgogICovCkBAIC0zNTcsMTEgKzMwNSwxMSBAQAogI2RlZmluZSB3cml0ZWIodmFsLGFkZHIpIG91dF84KChhZGRyKSwodmFsKSkKICNkZWZpbmUgcmVhZHcoYWRkcikgICAgICBpbl9sZTE2KGFkZHIpCiAjZGVmaW5lIHdyaXRldyh2YWwsYWRkcikgb3V0X2xlMTYoKGFkZHIpLCh2YWwpKQotI2VuZGlmCi0jaWYgIWRlZmluZWQoQ09ORklHX1BDSSkKKworI2VuZGlmIC8qIENPTkZJR19JU0EgKi8KKwogI2RlZmluZSByZWFkbChhZGRyKSAgICAgIGluX2xlMzIoYWRkcikKICNkZWZpbmUgd3JpdGVsKHZhbCxhZGRyKSBvdXRfbGUzMigoYWRkciksKHZhbCkpCi0jZW5kaWYKIAogI2RlZmluZSBtbWlvd2IoKQogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tNjhrL3BjaS5oIGIvaW5jbHVkZS9hc20tbTY4ay9wY2kuaAppbmRleCA2NzhjYjBiLi40YWQwYWVhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1tNjhrL3BjaS5oCisrKyBiL2luY2x1ZGUvYXNtLW02OGsvcGNpLmgKQEAgLTEsNTIgKzEsNyBAQAogI2lmbmRlZiBfQVNNX002OEtfUENJX0gKICNkZWZpbmUgX0FTTV9NNjhLX1BDSV9ICiAKLS8qCi0gKiBhc20tbTY4ay9wY2lfbTY4ay5oIC0gbTY4ayBzcGVjaWZpYyBQQ0kgZGVjbGFyYXRpb25zLgotICoKLSAqIFdyaXR0ZW4gYnkgV291dCBLbGFyZW4uCi0gKi8KLQotI2luY2x1ZGUgPGFzbS9zY2F0dGVybGlzdC5oPgotCi1zdHJ1Y3QgcGNpX29wczsKLQotLyoKLSAqIFN0cnVjdHVyZSB3aXRoIGhhcmR3YXJlIGRlcGVuZGVudCBpbmZvcm1hdGlvbiBhbmQgZnVuY3Rpb25zIG9mIHRoZQotICogUENJIGJ1cy4KLSAqLwotCi1zdHJ1Y3QgcGNpX2J1c19pbmZvCi17Ci0JLyoKLQkgKiBSZXNvdXJjZXMgb2YgdGhlIFBDSSBidXMuCi0JICovCi0KLQlzdHJ1Y3QgcmVzb3VyY2UgbWVtX3NwYWNlOwotCXN0cnVjdCByZXNvdXJjZSBpb19zcGFjZTsKLQotCS8qCi0JICogU3lzdGVtIGRlcGVuZGVudCBmdW5jdGlvbnMuCi0JICovCi0KLQlzdHJ1Y3QgcGNpX29wcyAqbTY4a19wY2lfb3BzOwotCi0Jdm9pZCAoKmZpeHVwKShpbnQgcGNpX21vZGlmeSk7Ci0Jdm9pZCAoKmNvbmZfZGV2aWNlKShzdHJ1Y3QgcGNpX2RldiAqZGV2KTsKLX07Ci0KLSNkZWZpbmUgcGNpYmlvc19hc3NpZ25fYWxsX2J1c3NlcygpCTAKLSNkZWZpbmUgcGNpYmlvc19zY2FuX2FsbF9mbnMoYSwgYikJMAotCi1zdGF0aWMgaW5saW5lIHZvaWQgcGNpYmlvc19zZXRfbWFzdGVyKHN0cnVjdCBwY2lfZGV2ICpkZXYpCi17Ci0JLyogTm8gc3BlY2lhbCBidXMgbWFzdGVyaW5nIHNldHVwIGhhbmRsaW5nICovCi19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBwY2liaW9zX3BlbmFsaXplX2lzYV9pcnEoaW50IGlycSwgaW50IGFjdGl2ZSkKLXsKLQkvKiBXZSBkb24ndCBkbyBkeW5hbWljIFBDSSBJUlEgYWxsb2NhdGlvbiAqLwotfQorI2luY2x1ZGUgPGFzbS1nZW5lcmljL3BjaS1kbWEtY29tcGF0Lmg+CiAKIC8qIFRoZSBQQ0kgYWRkcmVzcyBzcGFjZSBkb2VzIGVxdWFsIHRoZSBwaHlzaWNhbCBtZW1vcnkKICAqIGFkZHJlc3Mgc3BhY2UuICBUaGUgbmV0d29ya2luZyBhbmQgYmxvY2sgZGV2aWNlIGxheWVycyB1c2UKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW02OGsvdGhyZWFkX2luZm8uaCBiL2luY2x1ZGUvYXNtLW02OGsvdGhyZWFkX2luZm8uaAppbmRleCBhYmMwMDI3Li5hZjBmZGE0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1tNjhrL3RocmVhZF9pbmZvLmgKKysrIGIvaW5jbHVkZS9hc20tbTY4ay90aHJlYWRfaW5mby5oCkBAIC01Miw1ICs1Miw2IEBACiAjZGVmaW5lIFRJRl9ERUxBWUVEX1RSQUNFCTE0CS8qIHNpbmdsZSBzdGVwIGEgc3lzY2FsbCAqLwogI2RlZmluZSBUSUZfU1lTQ0FMTF9UUkFDRQkxNQkvKiBzeXNjYWxsIHRyYWNlIGFjdGl2ZSAqLwogI2RlZmluZSBUSUZfTUVNRElFCQkxNgorI2RlZmluZSBUSUZfRlJFRVpFCQkxNwkvKiB0aHJlYWQgaXMgZnJlZXppbmcgZm9yIHN1c3BlbmQgKi8KIAogI2VuZGlmCS8qIF9BU01fTTY4S19USFJFQURfSU5GT19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tNjhrL3ZpcnRjb252ZXJ0LmggYi9pbmNsdWRlL2FzbS1tNjhrL3ZpcnRjb252ZXJ0LmgKaW5kZXggZGVhMzJmYi4uMjJhYjA1YyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbTY4ay92aXJ0Y29udmVydC5oCisrKyBiL2luY2x1ZGUvYXNtLW02OGsvdmlydGNvbnZlcnQuaApAQCAtNDAsMTUgKzQwLDkgQEAKIAogLyoKICAqIElPIGJ1cyBtZW1vcnkgYWRkcmVzc2VzIGFyZSAxOjEgd2l0aCB0aGUgcGh5c2ljYWwgYWRkcmVzcywKLSAqIGV4Y2VwdCBvbiB0aGUgUENJIGJ1cyBvZiB0aGUgSGFkZXMuCiAgKi8KLSNpZmRlZiBDT05GSUdfSEFERVMKLSNkZWZpbmUgdmlydF90b19idXMoYSkgKHZpcnRfdG9fcGh5cyhhKSArIChNQUNIX0lTX0hBREVTID8gMHg4MDAwMDAwMCA6IDApKQotI2RlZmluZSBidXNfdG9fdmlydChhKSAocGh5c190b192aXJ0KChhKSAtIChNQUNIX0lTX0hBREVTID8gMHg4MDAwMDAwMCA6IDApKSkKLSNlbHNlCiAjZGVmaW5lIHZpcnRfdG9fYnVzIHZpcnRfdG9fcGh5cwogI2RlZmluZSBidXNfdG9fdmlydCBwaHlzX3RvX3ZpcnQKLSNlbmRpZgogCiAjZW5kaWYKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbW4xMDMwMC9lbGYuaCBiL2luY2x1ZGUvYXNtLW1uMTAzMDAvZWxmLmgKaW5kZXggMjU2YTcwNC4uYmYwOWY4YiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbW4xMDMwMC9lbGYuaAorKysgYi9pbmNsdWRlL2FzbS1tbjEwMzAwL2VsZi5oCkBAIC0xNDEsNyArMTQxLDcgQEAKICNkZWZpbmUgRUxGX1BMQVRGT1JNICAoTlVMTCkKIAogI2lmZGVmIF9fS0VSTkVMX18KLSNkZWZpbmUgU0VUX1BFUlNPTkFMSVRZKGV4LCBpYmNzMikgc2V0X3BlcnNvbmFsaXR5KFBFUl9MSU5VWCkKKyNkZWZpbmUgU0VUX1BFUlNPTkFMSVRZKGV4KSBzZXRfcGVyc29uYWxpdHkoUEVSX0xJTlVYKQogI2VuZGlmCiAKICNlbmRpZiAvKiBfQVNNX0VMRl9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wYXJpc2MvYS5vdXQuaCBiL2luY2x1ZGUvYXNtLXBhcmlzYy9hLm91dC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYjA0ZTM0Li4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLXBhcmlzYy9hLm91dC5oCisrKyAvZGV2L251bGwKQEAgLTEsMjAgKzAsMCBAQAotI2lmbmRlZiBfX1BBUklTQ19BX09VVF9IX18KLSNkZWZpbmUgX19QQVJJU0NfQV9PVVRfSF9fCi0KLXN0cnVjdCBleGVjCi17Ci0gIHVuc2lnbmVkIGludCBhX2luZm87CQkvKiBVc2UgbWFjcm9zIE5fTUFHSUMsIGV0YyBmb3IgYWNjZXNzICovCi0gIHVuc2lnbmVkIGFfdGV4dDsJCS8qIGxlbmd0aCBvZiB0ZXh0LCBpbiBieXRlcyAqLwotICB1bnNpZ25lZCBhX2RhdGE7CQkvKiBsZW5ndGggb2YgZGF0YSwgaW4gYnl0ZXMgKi8KLSAgdW5zaWduZWQgYV9ic3M7CQkvKiBsZW5ndGggb2YgdW5pbml0aWFsaXplZCBkYXRhIGFyZWEgZm9yIGZpbGUsIGluIGJ5dGVzICovCi0gIHVuc2lnbmVkIGFfc3ltczsJCS8qIGxlbmd0aCBvZiBzeW1ib2wgdGFibGUgZGF0YSBpbiBmaWxlLCBpbiBieXRlcyAqLwotICB1bnNpZ25lZCBhX2VudHJ5OwkJLyogc3RhcnQgYWRkcmVzcyAqLwotICB1bnNpZ25lZCBhX3Ryc2l6ZTsJCS8qIGxlbmd0aCBvZiByZWxvY2F0aW9uIGluZm8gZm9yIHRleHQsIGluIGJ5dGVzICovCi0gIHVuc2lnbmVkIGFfZHJzaXplOwkJLyogbGVuZ3RoIG9mIHJlbG9jYXRpb24gaW5mbyBmb3IgZGF0YSwgaW4gYnl0ZXMgKi8KLX07Ci0KLSNkZWZpbmUgTl9UUlNJWkUoYSkJKChhKS5hX3Ryc2l6ZSkKLSNkZWZpbmUgTl9EUlNJWkUoYSkJKChhKS5hX2Ryc2l6ZSkKLSNkZWZpbmUgTl9TWU1TSVpFKGEpCSgoYSkuYV9zeW1zKQotCi0jZW5kaWYgLyogX19BX09VVF9HTlVfSF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wYXJpc2MvZWxmLmggYi9pbmNsdWRlL2FzbS1wYXJpc2MvZWxmLmgKaW5kZXggZDBhNGE4Mi4uN2ZhNjc1NyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcGFyaXNjL2VsZi5oCisrKyBiL2luY2x1ZGUvYXNtLXBhcmlzYy9lbGYuaApAQCAtMjM2LDcgKzIzNiw3IEBACiAKICNkZWZpbmUgRUxGX1BMQVRGT1JNICAoIlBBUklTQ1wwIikKIAotI2RlZmluZSBTRVRfUEVSU09OQUxJVFkoZXgsIGliY3MyKSBcCisjZGVmaW5lIFNFVF9QRVJTT05BTElUWShleCkgXAogCWN1cnJlbnQtPnBlcnNvbmFsaXR5ID0gUEVSX0xJTlVYOyBcCiAJY3VycmVudC0+dGhyZWFkLm1hcF9iYXNlID0gREVGQVVMVF9NQVBfQkFTRTsgXAogCWN1cnJlbnQtPnRocmVhZC50YXNrX3NpemUgPSBERUZBVUxUX1RBU0tfU0laRSBcCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wYXJpc2MvaWRlLmggYi9pbmNsdWRlL2FzbS1wYXJpc2MvaWRlLmgKaW5kZXggYzI0NmVmNy4uODE3MDBhMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcGFyaXNjL2lkZS5oCisrKyBiL2luY2x1ZGUvYXNtLXBhcmlzYy9pZGUuaApAQCAtMTMsMTAgKzEzLDYgQEAKIAogI2lmZGVmIF9fS0VSTkVMX18KIAotI2RlZmluZSBpZGVfcmVxdWVzdF9pcnEoaXJxLGhhbmQsZmxnLGRldixpZCkJcmVxdWVzdF9pcnEoKGlycSksKGhhbmQpLChmbGcpLChkZXYpLChpZCkpCi0jZGVmaW5lIGlkZV9mcmVlX2lycShpcnEsZGV2X2lkKQkJZnJlZV9pcnEoKGlycSksIChkZXZfaWQpKQotI2RlZmluZSBpZGVfcmVxdWVzdF9yZWdpb24oZnJvbSxleHRlbnQsbmFtZSkJcmVxdWVzdF9yZWdpb24oKGZyb20pLCAoZXh0ZW50KSwgKG5hbWUpKQotI2RlZmluZSBpZGVfcmVsZWFzZV9yZWdpb24oZnJvbSxleHRlbnQpCQlyZWxlYXNlX3JlZ2lvbigoZnJvbSksIChleHRlbnQpKQogLyogR2VuZXJpYyBJL08gYW5kIE1FTUlPIHN0cmluZyBvcGVyYXRpb25zLiAgKi8KIAogI2RlZmluZSBfX2lkZV9pbnN3CWluc3cKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBhcmlzYy9zdGF0ZnMuaCBiL2luY2x1ZGUvYXNtLXBhcmlzYy9zdGF0ZnMuaAppbmRleCAxZDJiODEzLi4zMjRiZWE5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wYXJpc2Mvc3RhdGZzLmgKKysrIGIvaW5jbHVkZS9hc20tcGFyaXNjL3N0YXRmcy5oCkBAIC0xLDU4ICsxLDcgQEAKICNpZm5kZWYgX1BBUklTQ19TVEFURlNfSAogI2RlZmluZSBfUEFSSVNDX1NUQVRGU19ICiAKLSNpZm5kZWYgX19LRVJORUxfU1RSSUNUX05BTUVTCi0KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotCi10eXBlZGVmIF9fa2VybmVsX2ZzaWRfdAlmc2lkX3Q7Ci0KLSNlbmRpZgotCi0vKgotICogSXQgYXBwZWFycyB0aGF0IFBBUklTQyBjb3VsZCBiZSA2NCBfb3JfIDMyIGJpdC4KLSAqIDY0LWJpdCBmaWVsZHMgbXVzdCBiZSBleHBsaWNpdGx5IDY0LWJpdCBpbiBzdGF0ZnM2NC4KLSAqLwotc3RydWN0IHN0YXRmcyB7Ci0JbG9uZyBmX3R5cGU7Ci0JbG9uZyBmX2JzaXplOwotCWxvbmcgZl9ibG9ja3M7Ci0JbG9uZyBmX2JmcmVlOwotCWxvbmcgZl9iYXZhaWw7Ci0JbG9uZyBmX2ZpbGVzOwotCWxvbmcgZl9mZnJlZTsKLQlfX2tlcm5lbF9mc2lkX3QgZl9mc2lkOwotCWxvbmcgZl9uYW1lbGVuOwotCWxvbmcgZl9mcnNpemU7Ci0JbG9uZyBmX3NwYXJlWzVdOwotfTsKLQotc3RydWN0IHN0YXRmczY0IHsKLQlsb25nIGZfdHlwZTsKLQlsb25nIGZfYnNpemU7Ci0JX191NjQgZl9ibG9ja3M7Ci0JX191NjQgZl9iZnJlZTsKLQlfX3U2NCBmX2JhdmFpbDsKLQlfX3U2NCBmX2ZpbGVzOwotCV9fdTY0IGZfZmZyZWU7Ci0JX19rZXJuZWxfZnNpZF90IGZfZnNpZDsKLQlsb25nIGZfbmFtZWxlbjsKLQlsb25nIGZfZnJzaXplOwotCWxvbmcgZl9zcGFyZVs1XTsKLX07Ci0KLXN0cnVjdCBjb21wYXRfc3RhdGZzNjQgewotCV9fdTMyIGZfdHlwZTsKLQlfX3UzMiBmX2JzaXplOwotCV9fdTY0IGZfYmxvY2tzOwotCV9fdTY0IGZfYmZyZWU7Ci0JX191NjQgZl9iYXZhaWw7Ci0JX191NjQgZl9maWxlczsKLQlfX3U2NCBmX2ZmcmVlOwotCV9fa2VybmVsX2ZzaWRfdCBmX2ZzaWQ7Ci0JX191MzIgZl9uYW1lbGVuOwotCV9fdTMyIGZfZnJzaXplOwotCV9fdTMyIGZfc3BhcmVbNV07Ci19OworI2RlZmluZSBfX3N0YXRmc193b3JkIGxvbmcKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9zdGF0ZnMuaD4KIAogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wYXJpc2MvdGhyZWFkX2luZm8uaCBiL2luY2x1ZGUvYXNtLXBhcmlzYy90aHJlYWRfaW5mby5oCmluZGV4IDlmODEyNzQuLjA0MDc5NTkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBhcmlzYy90aHJlYWRfaW5mby5oCisrKyBiL2luY2x1ZGUvYXNtLXBhcmlzYy90aHJlYWRfaW5mby5oCkBAIC01OCw2ICs1OCw3IEBACiAjZGVmaW5lIFRJRl8zMkJJVCAgICAgICAgICAgICAgIDQgICAgICAgLyogMzIgYml0IGJpbmFyeSAqLwogI2RlZmluZSBUSUZfTUVNRElFCQk1CiAjZGVmaW5lIFRJRl9SRVNUT1JFX1NJR01BU0sJNgkvKiByZXN0b3JlIHNhdmVkIHNpZ25hbCBtYXNrICovCisjZGVmaW5lIFRJRl9GUkVFWkUJCTcJLyogaXMgZnJlZXppbmcgZm9yIHN1c3BlbmQgKi8KIAogI2RlZmluZSBfVElGX1NZU0NBTExfVFJBQ0UJKDEgPDwgVElGX1NZU0NBTExfVFJBQ0UpCiAjZGVmaW5lIF9USUZfU0lHUEVORElORwkJKDEgPDwgVElGX1NJR1BFTkRJTkcpCkBAIC02NSw2ICs2Niw3IEBACiAjZGVmaW5lIF9USUZfUE9MTElOR19OUkZMQUcJKDEgPDwgVElGX1BPTExJTkdfTlJGTEFHKQogI2RlZmluZSBfVElGXzMyQklUCQkoMSA8PCBUSUZfMzJCSVQpCiAjZGVmaW5lIF9USUZfUkVTVE9SRV9TSUdNQVNLCSgxIDw8IFRJRl9SRVNUT1JFX1NJR01BU0spCisjZGVmaW5lIF9USUZfRlJFRVpFCQkoMSA8PCBUSUZfRlJFRVpFKQogCiAjZGVmaW5lIF9USUZfVVNFUl9XT1JLX01BU0sgICAgIChfVElGX1NJR1BFTkRJTkcgfCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfVElGX05FRURfUkVTQ0hFRCB8IF9USUZfUkVTVE9SRV9TSUdNQVNLKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tdW0vZWxmLWkzODYuaCBiL2luY2x1ZGUvYXNtLXVtL2VsZi1pMzg2LmgKaW5kZXggMjNkNjg5My4uZDBkYTlkNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tdW0vZWxmLWkzODYuaAorKysgYi9pbmNsdWRlL2FzbS11bS9lbGYtaTM4Ni5oCkBAIC04Niw3ICs4Niw3IEBACiBleHRlcm4gY2hhciAqIGVsZl9hdXhfcGxhdGZvcm07CiAjZGVmaW5lIEVMRl9QTEFURk9STSAoZWxmX2F1eF9wbGF0Zm9ybSkKIAotI2RlZmluZSBTRVRfUEVSU09OQUxJVFkoZXgsIGliY3MyKSBkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIFNFVF9QRVJTT05BTElUWShleCkgZG8geyB9IHdoaWxlICgwKQogCiBleHRlcm4gdW5zaWduZWQgbG9uZyB2c3lzY2FsbF9laGRyOwogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgdnN5c2NhbGxfZW5kOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tdW0vZWxmLXBwYy5oIGIvaW5jbHVkZS9hc20tdW0vZWxmLXBwYy5oCmluZGV4IGQzYjkwYjcuLmFmOTQ2M2MgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXVtL2VsZi1wcGMuaAorKysgYi9pbmNsdWRlL2FzbS11bS9lbGYtcHBjLmgKQEAgLTUsNyArNSw3IEBACiBleHRlcm4gbG9uZyBlbGZfYXV4X2h3Y2FwOwogI2RlZmluZSBFTEZfSFdDQVAgKGVsZl9hdXhfaHdjYXApCiAKLSNkZWZpbmUgU0VUX1BFUlNPTkFMSVRZKGV4LCBpYmNzMikgZG8gOyB3aGlsZSgwKQorI2RlZmluZSBTRVRfUEVSU09OQUxJVFkoZXgpIGRvIDsgd2hpbGUoMCkKIAogI2RlZmluZSBFTEZfRVhFQ19QQUdFU0laRSA0MDk2CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXVtL2VsZi14ODZfNjQuaCBiL2luY2x1ZGUvYXNtLXVtL2VsZi14ODZfNjQuaAppbmRleCAzYjJkNTIyLi42ZThhOTE5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS11bS9lbGYteDg2XzY0LmgKKysrIGIvaW5jbHVkZS9hc20tdW0vZWxmLXg4Nl82NC5oCkBAIC0xMTQsNiArMTE0LDYgQEAKIAogI2RlZmluZSBFTEZfUExBVEZPUk0gIng4Nl82NCIKIAotI2RlZmluZSBTRVRfUEVSU09OQUxJVFkoZXgsIGliY3MyKSBkbyA7IHdoaWxlKDApCisjZGVmaW5lIFNFVF9QRVJTT05BTElUWShleCkgZG8gOyB3aGlsZSgwKQogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXVtL3RocmVhZF9pbmZvLmggYi9pbmNsdWRlL2FzbS11bS90aHJlYWRfaW5mby5oCmluZGV4IGUwN2U3MjguLjYyMjc0YWIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXVtL3RocmVhZF9pbmZvLmgKKysrIGIvaW5jbHVkZS9hc20tdW0vdGhyZWFkX2luZm8uaApAQCAtNjksNiArNjksNyBAQAogI2RlZmluZSBUSUZfTUVNRElFCSAJNQogI2RlZmluZSBUSUZfU1lTQ0FMTF9BVURJVAk2CiAjZGVmaW5lIFRJRl9SRVNUT1JFX1NJR01BU0sJNworI2RlZmluZSBUSUZfRlJFRVpFCQkxNgkvKiBpcyBmcmVlemluZyBmb3Igc3VzcGVuZCAqLwogCiAjZGVmaW5lIF9USUZfU1lTQ0FMTF9UUkFDRQkoMSA8PCBUSUZfU1lTQ0FMTF9UUkFDRSkKICNkZWZpbmUgX1RJRl9TSUdQRU5ESU5HCQkoMSA8PCBUSUZfU0lHUEVORElORykKQEAgLTc3LDUgKzc4LDYgQEAKICNkZWZpbmUgX1RJRl9NRU1ESUUJCSgxIDw8IFRJRl9NRU1ESUUpCiAjZGVmaW5lIF9USUZfU1lTQ0FMTF9BVURJVAkoMSA8PCBUSUZfU1lTQ0FMTF9BVURJVCkKICNkZWZpbmUgX1RJRl9SRVNUT1JFX1NJR01BU0sJKDEgPDwgVElGX1JFU1RPUkVfU0lHTUFTSykKKyNkZWZpbmUgX1RJRl9GUkVFWkUJCSgxIDw8IFRJRl9GUkVFWkUpCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L2FwaWMuaCBiL2luY2x1ZGUvYXNtLXg4Ni9hcGljLmgKaW5kZXggZDc2YTA4My4uZWYxZDcyZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teDg2L2FwaWMuaAorKysgYi9pbmNsdWRlL2FzbS14ODYvYXBpYy5oCkBAIC00MCw4ICs0MCw2IEBACiBleHRlcm4gdW5zaWduZWQgaW50IGFwaWNfdmVyYm9zaXR5OwogZXh0ZXJuIGludCBsb2NhbF9hcGljX3RpbWVyX2MyX29rOwogCi1leHRlcm4gaW50IGlvYXBpY19mb3JjZTsKLQogZXh0ZXJuIGludCBkaXNhYmxlX2FwaWM7CiAvKgogICogQmFzaWMgZnVuY3Rpb25zIGFjY2Vzc2luZyBBUElDcy4KQEAgLTEwMCw2ICs5OCwyMCBAQAogZXh0ZXJuIHZvaWQgZW5hYmxlX3gyYXBpYyh2b2lkKTsKIGV4dGVybiB2b2lkIGVuYWJsZV9JUl94MmFwaWModm9pZCk7CiBleHRlcm4gdm9pZCB4MmFwaWNfaWNyX3dyaXRlKHUzMiBsb3csIHUzMiBpZCk7CitzdGF0aWMgaW5saW5lIGludCB4MmFwaWNfZW5hYmxlZCh2b2lkKQoreworCWludCBtc3IsIG1zcjI7CisKKwlpZiAoIWNwdV9oYXNfeDJhcGljKQorCQlyZXR1cm4gMDsKKworCXJkbXNyKE1TUl9JQTMyX0FQSUNCQVNFLCBtc3IsIG1zcjIpOworCWlmIChtc3IgJiBYMkFQSUNfRU5BQkxFKQorCQlyZXR1cm4gMTsKKwlyZXR1cm4gMDsKK30KKyNlbHNlCisjZGVmaW5lIHgyYXBpY19lbmFibGVkKCkJMAogI2VuZGlmCiAKIHN0cnVjdCBhcGljX29wcyB7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODYvYmlnc21wL2FwaWMuaCBiL2luY2x1ZGUvYXNtLXg4Ni9iaWdzbXAvYXBpYy5oCmluZGV4IDBhOWNkN2MuLjFkOTU0M2IgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXg4Ni9iaWdzbXAvYXBpYy5oCisrKyBiL2luY2x1ZGUvYXNtLXg4Ni9iaWdzbXAvYXBpYy5oCkBAIC05LDIyICs5LDE3IEBACiAJcmV0dXJuICgxKTsKIH0KIAotLyogUm91bmQgcm9iaW4gdGhlIGlycXMgYW1vdW5nIHRoZSBvbmxpbmUgY3B1cyAqLwogc3RhdGljIGlubGluZSBjcHVtYXNrX3QgdGFyZ2V0X2NwdXModm9pZCkKIHsKLQlzdGF0aWMgdW5zaWduZWQgbG9uZyBjcHUgPSBOUl9DUFVTOwotCWRvIHsKLQkJaWYgKGNwdSA+PSBOUl9DUFVTKQotCQkJY3B1ID0gZmlyc3RfY3B1KGNwdV9vbmxpbmVfbWFwKTsKLQkJZWxzZQotCQkJY3B1ID0gbmV4dF9jcHUoY3B1LCBjcHVfb25saW5lX21hcCk7Ci0JfSB3aGlsZSAoY3B1ID49IE5SX0NQVVMpOwotCXJldHVybiBjcHVtYXNrX29mX2NwdShjcHUpOworI2lmZGVmIENPTkZJR19TTVAKKyAgICAgICAgcmV0dXJuIGNwdV9vbmxpbmVfbWFwOworI2Vsc2UKKyAgICAgICAgcmV0dXJuIGNwdW1hc2tfb2ZfY3B1KDApOworI2VuZGlmCiB9CiAKICN1bmRlZiBBUElDX0RFU1RfTE9HSUNBTAogI2RlZmluZSBBUElDX0RFU1RfTE9HSUNBTAkwCi0jZGVmaW5lIFRBUkdFVF9DUFVTCQkodGFyZ2V0X2NwdXMoKSkKICNkZWZpbmUgQVBJQ19ERlJfVkFMVUUJCShBUElDX0RGUl9GTEFUKQogI2RlZmluZSBJTlRfREVMSVZFUllfTU9ERQkoZGVzdF9GaXhlZCkKICNkZWZpbmUgSU5UX0RFU1RfTU9ERQkJKDApICAgIC8qIHBoeXMgZGVsaXZlcnkgdG8gdGFyZ2V0IHByb2MgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Ni9kZXNjLmggYi9pbmNsdWRlL2FzbS14ODYvZGVzYy5oCmluZGV4IGViYzMwNzguLmYwNmFkYWMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXg4Ni9kZXNjLmgKKysrIGIvaW5jbHVkZS9hc20teDg2L2Rlc2MuaApAQCAtMzUxLDIyICszNTEsMTggQEAKIAlfc2V0X2dhdGUobiwgR0FURV9JTlRFUlJVUFQsIGFkZHIsIDB4MywgMCwgX19LRVJORUxfQ1MpOwogfQogCitzdGF0aWMgaW5saW5lIHZvaWQgc2V0X3N5c3RlbV90cmFwX2dhdGUodW5zaWduZWQgaW50IG4sIHZvaWQgKmFkZHIpCit7CisJQlVHX09OKCh1bnNpZ25lZCluID4gMHhGRik7CisJX3NldF9nYXRlKG4sIEdBVEVfVFJBUCwgYWRkciwgMHgzLCAwLCBfX0tFUk5FTF9DUyk7Cit9CisKIHN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfdHJhcF9nYXRlKHVuc2lnbmVkIGludCBuLCB2b2lkICphZGRyKQogewogCUJVR19PTigodW5zaWduZWQpbiA+IDB4RkYpOwogCV9zZXRfZ2F0ZShuLCBHQVRFX1RSQVAsIGFkZHIsIDAsIDAsIF9fS0VSTkVMX0NTKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIHNldF9zeXN0ZW1fZ2F0ZSh1bnNpZ25lZCBpbnQgbiwgdm9pZCAqYWRkcikKLXsKLQlCVUdfT04oKHVuc2lnbmVkKW4gPiAweEZGKTsKLSNpZmRlZiBDT05GSUdfWDg2XzMyCi0JX3NldF9nYXRlKG4sIEdBVEVfVFJBUCwgYWRkciwgMHgzLCAwLCBfX0tFUk5FTF9DUyk7Ci0jZWxzZQotCV9zZXRfZ2F0ZShuLCBHQVRFX0lOVEVSUlVQVCwgYWRkciwgMHgzLCAwLCBfX0tFUk5FTF9DUyk7Ci0jZW5kaWYKLX0KLQogc3RhdGljIGlubGluZSB2b2lkIHNldF90YXNrX2dhdGUodW5zaWduZWQgaW50IG4sIHVuc2lnbmVkIGludCBnZHRfZW50cnkpCiB7CiAJQlVHX09OKCh1bnNpZ25lZCluID4gMHhGRik7CkBAIC0zNzksNyArMzc1LDcgQEAKIAlfc2V0X2dhdGUobiwgR0FURV9JTlRFUlJVUFQsIGFkZHIsIDAsIGlzdCwgX19LRVJORUxfQ1MpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgc2V0X3N5c3RlbV9nYXRlX2lzdChpbnQgbiwgdm9pZCAqYWRkciwgdW5zaWduZWQgaXN0KQorc3RhdGljIGlubGluZSB2b2lkIHNldF9zeXN0ZW1faW50cl9nYXRlX2lzdChpbnQgbiwgdm9pZCAqYWRkciwgdW5zaWduZWQgaXN0KQogewogCUJVR19PTigodW5zaWduZWQpbiA+IDB4RkYpOwogCV9zZXRfZ2F0ZShuLCBHQVRFX0lOVEVSUlVQVCwgYWRkciwgMHgzLCBpc3QsIF9fS0VSTkVMX0NTKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Ni9lZmkuaCBiL2luY2x1ZGUvYXNtLXg4Ni9lZmkuaAppbmRleCBlZDJkZTIyLi4zMTM0MzhlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS14ODYvZWZpLmgKKysrIGIvaW5jbHVkZS9hc20teDg2L2VmaS5oCkBAIC05NCw0ICs5NCwxNyBAQAogZXh0ZXJuIHZvaWQgZWZpX2NhbGxfcGh5c19wcmVsb2codm9pZCk7CiBleHRlcm4gdm9pZCBlZmlfY2FsbF9waHlzX2VwaWxvZyh2b2lkKTsKIAorI2lmbmRlZiBDT05GSUdfRUZJCisvKgorICogSUYgRUZJIGlzIG5vdCBjb25maWd1cmVkLCBoYXZlIHRoZSBFRkkgY2FsbHMgcmV0dXJuIC1FTk9TWVMuCisgKi8KKyNkZWZpbmUgZWZpX2NhbGwwKF9mKQkJCQkJKC1FTk9TWVMpCisjZGVmaW5lIGVmaV9jYWxsMShfZiwgX2ExKQkJCQkoLUVOT1NZUykKKyNkZWZpbmUgZWZpX2NhbGwyKF9mLCBfYTEsIF9hMikJCQkJKC1FTk9TWVMpCisjZGVmaW5lIGVmaV9jYWxsMyhfZiwgX2ExLCBfYTIsIF9hMykJCQkoLUVOT1NZUykKKyNkZWZpbmUgZWZpX2NhbGw0KF9mLCBfYTEsIF9hMiwgX2EzLCBfYTQpCQkoLUVOT1NZUykKKyNkZWZpbmUgZWZpX2NhbGw1KF9mLCBfYTEsIF9hMiwgX2EzLCBfYTQsIF9hNSkJCSgtRU5PU1lTKQorI2RlZmluZSBlZmlfY2FsbDYoX2YsIF9hMSwgX2EyLCBfYTMsIF9hNCwgX2E1LCBfYTYpCSgtRU5PU1lTKQorI2VuZGlmIC8qIENPTkZJR19FRkkgKi8KKwogI2VuZGlmIC8qIEFTTV9YODZfX0VGSV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODYvZWxmLmggYi9pbmNsdWRlL2FzbS14ODYvZWxmLmgKaW5kZXggNWM0NzQ1Yi4uMjZiYzE1ZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teDg2L2VsZi5oCisrKyBiL2luY2x1ZGUvYXNtLXg4Ni9lbGYuaApAQCAtMTg2LDcgKzE4Niw3IEBACiAJc2V0X2ZzKFVTRVJfRFMpOwkJCQlcCiB9IHdoaWxlICgwKQogCi0jZGVmaW5lIENPTVBBVF9TRVRfUEVSU09OQUxJVFkoZXgsIGliY3MyKQkJXAorI2RlZmluZSBDT01QQVRfU0VUX1BFUlNPTkFMSVRZKGV4KQkJCVwKIGRvIHsJCQkJCQkJXAogCWlmICh0ZXN0X3RocmVhZF9mbGFnKFRJRl9JQTMyKSkJCQlcCiAJCWNsZWFyX3RocmVhZF9mbGFnKFRJRl9BQklfUEVORElORyk7CVwKQEAgLTI2Nyw3ICsyNjcsNyBAQAogICAgRm9yIHRoZSBtb21lbnQsIHdlIGhhdmUgb25seSBvcHRpbWl6YXRpb25zIGZvciB0aGUgSW50ZWwgZ2VuZXJhdGlvbnMsCiAgICBidXQgdGhhdCBjb3VsZCBjaGFuZ2UuLi4gKi8KIAotI2RlZmluZSBTRVRfUEVSU09OQUxJVFkoZXgsIGliY3MyKSBzZXRfcGVyc29uYWxpdHlfNjRiaXQoKQorI2RlZmluZSBTRVRfUEVSU09OQUxJVFkoZXgpIHNldF9wZXJzb25hbGl0eV82NGJpdCgpCiAKIC8qCiAgKiBBbiBleGVjdXRhYmxlIGZvciB3aGljaCBlbGZfcmVhZF9pbXBsaWVzX2V4ZWMoKSByZXR1cm5zIFRSVUUgd2lsbApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L2VzNzAwMC9hcGljLmggYi9pbmNsdWRlL2FzbS14ODYvZXM3MDAwL2FwaWMuaAppbmRleCBiZDJjNDRkLi4zODBmMGI0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS14ODYvZXM3MDAwL2FwaWMuaAorKysgYi9pbmNsdWRlL2FzbS14ODYvZXM3MDAwL2FwaWMuaApAQCAtMTcsNyArMTcsNiBAQAogCXJldHVybiBjcHVtYXNrX29mX2NwdShzbXBfcHJvY2Vzc29yX2lkKCkpOwogI2VuZGlmCiB9Ci0jZGVmaW5lIFRBUkdFVF9DUFVTCSh0YXJnZXRfY3B1cygpKQogCiAjaWYgZGVmaW5lZCBDT05GSUdfRVM3MDAwX0NMVVNURVJFRF9BUElDCiAjZGVmaW5lIEFQSUNfREZSX1ZBTFVFCQkoQVBJQ19ERlJfQ0xVU1RFUikKQEAgLTgxLDcgKzgwLDcgQEAKIAlpbnQgYXBpYyA9IHBlcl9jcHUoeDg2X2Jpb3NfY3B1X2FwaWNpZCwgc21wX3Byb2Nlc3Nvcl9pZCgpKTsKIAlwcmludGsoIkVuYWJsaW5nIEFQSUMgbW9kZTogICVzLiAgVXNpbmcgJWQgSS9PIEFQSUNzLCB0YXJnZXQgY3B1cyAlbHhcbiIsCiAJCShhcGljX3ZlcnNpb25bYXBpY10gPT0gMHgxNCkgPwotCQkiUGh5c2ljYWwgQ2x1c3RlciIgOiAiTG9naWNhbCBDbHVzdGVyIiwgbnJfaW9hcGljcywgY3B1c19hZGRyKFRBUkdFVF9DUFVTKVswXSk7CisJCSJQaHlzaWNhbCBDbHVzdGVyIiA6ICJMb2dpY2FsIENsdXN0ZXIiLCBucl9pb2FwaWNzLCBjcHVzX2FkZHIodGFyZ2V0X2NwdXMoKSlbMF0pOwogfQogCiBzdGF0aWMgaW5saW5lIGludCBtdWx0aV90aW1lcl9jaGVjayhpbnQgYXBpYywgaW50IGlycSkKQEAgLTE3MSw3ICsxNzAsNyBAQAogCQkJaW50IG5ld19hcGljaWQgPSBjcHVfdG9fbG9naWNhbF9hcGljaWQoY3B1KTsKIAkJCWlmIChhcGljaWRfY2x1c3RlcihhcGljaWQpICE9CiAJCQkJCWFwaWNpZF9jbHVzdGVyKG5ld19hcGljaWQpKXsKLQkJCQlwcmludGsgKCIlczogTm90IGEgdmFsaWQgbWFzayFcbiIsX19GVU5DVElPTl9fKTsKKwkJCQlwcmludGsgKCIlczogTm90IGEgdmFsaWQgbWFzayFcbiIsIF9fZnVuY19fKTsKICNpZiBkZWZpbmVkIENPTkZJR19FUzcwMDBfQ0xVU1RFUkVEX0FQSUMKIAkJCQlyZXR1cm4gMHhGRjsKICNlbHNlCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODYvZXM3MDAwL21wcGFyc2UuaCBiL2luY2x1ZGUvYXNtLXg4Ni9lczcwMDAvbXBwYXJzZS5oCmluZGV4IDdiNWM4ODkuLmVkNWEzY2EgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXg4Ni9lczcwMDAvbXBwYXJzZS5oCisrKyBiL2luY2x1ZGUvYXNtLXg4Ni9lczcwMDAvbXBwYXJzZS5oCkBAIC01LDYgKzUsNyBAQAogCiBleHRlcm4gaW50IHBhcnNlX3VuaXN5c19vZW0gKGNoYXIgKm9lbXB0cik7CiBleHRlcm4gaW50IGZpbmRfdW5pc3lzX2FjcGlfb2VtX3RhYmxlKHVuc2lnbmVkIGxvbmcgKm9lbV9hZGRyKTsKK2V4dGVybiB2b2lkIHVubWFwX3VuaXN5c19hY3BpX29lbV90YWJsZSh1bnNpZ25lZCBsb25nIG9lbV9hZGRyKTsKIGV4dGVybiB2b2lkIHNldHVwX3VuaXN5cyh2b2lkKTsKIAogI2lmbmRlZiBDT05GSUdfWDg2X0dFTkVSSUNBUkNICmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODYvZml4bWFwXzMyLmggYi9pbmNsdWRlL2FzbS14ODYvZml4bWFwXzMyLmgKaW5kZXggNzg0ZTNlNy4uODg0NDAwMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teDg2L2ZpeG1hcF8zMi5oCisrKyBiL2luY2x1ZGUvYXNtLXg4Ni9maXhtYXBfMzIuaApAQCAtOTQsMTAgKzk0LDEwIEBACiAJICogY2FuIGhhdmUgYSBzaW5nbGUgcGdkIGVudHJ5IGFuZCBhIHNpbmdsZSBwdGUgdGFibGU6CiAJICovCiAjZGVmaW5lIE5SX0ZJWF9CVE1BUFMJCTY0Ci0jZGVmaW5lIEZJWF9CVE1BUFNfTkVTVElORwk0CisjZGVmaW5lIEZJWF9CVE1BUFNfU0xPVFMJNAogCUZJWF9CVE1BUF9FTkQgPSBfX2VuZF9vZl9wZXJtYW5lbnRfZml4ZWRfYWRkcmVzc2VzICsgMjU2IC0KIAkJCShfX2VuZF9vZl9wZXJtYW5lbnRfZml4ZWRfYWRkcmVzc2VzICYgMjU1KSwKLQlGSVhfQlRNQVBfQkVHSU4gPSBGSVhfQlRNQVBfRU5EICsgTlJfRklYX0JUTUFQUypGSVhfQlRNQVBTX05FU1RJTkcgLSAxLAorCUZJWF9CVE1BUF9CRUdJTiA9IEZJWF9CVE1BUF9FTkQgKyBOUl9GSVhfQlRNQVBTKkZJWF9CVE1BUFNfU0xPVFMgLSAxLAogCUZJWF9XUF9URVNULAogI2lmZGVmIENPTkZJR19BQ1BJCiAJRklYX0FDUElfQkVHSU4sCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODYvZml4bWFwXzY0LmggYi9pbmNsdWRlL2FzbS14ODYvZml4bWFwXzY0LmgKaW5kZXggZGFmYjI0Yi4uZGFiNDc1MSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teDg2L2ZpeG1hcF82NC5oCisrKyBiL2luY2x1ZGUvYXNtLXg4Ni9maXhtYXBfNjQuaApAQCAtNDksNiArNDksNyBAQAogI2lmZGVmIENPTkZJR19QQVJBVklSVAogCUZJWF9QQVJBVklSVF9CT09UTUFQLAogI2VuZGlmCisJX19lbmRfb2ZfcGVybWFuZW50X2ZpeGVkX2FkZHJlc3NlcywKICNpZmRlZiBDT05GSUdfQUNQSQogCUZJWF9BQ1BJX0JFR0lOLAogCUZJWF9BQ1BJX0VORCA9IEZJWF9BQ1BJX0JFR0lOICsgRklYX0FDUElfUEFHRVMgLSAxLApAQCAtNTYsMTkgKzU3LDE4IEBACiAjaWZkZWYgQ09ORklHX1BST1ZJREVfT0hDSTEzOTRfRE1BX0lOSVQKIAlGSVhfT0hDSTEzOTRfQkFTRSwKICNlbmRpZgotCV9fZW5kX29mX3Blcm1hbmVudF9maXhlZF9hZGRyZXNzZXMsCiAJLyoKIAkgKiAyNTYgdGVtcG9yYXJ5IGJvb3QtdGltZSBtYXBwaW5ncywgdXNlZCBieSBlYXJseV9pb3JlbWFwKCksCiAJICogYmVmb3JlIGlvcmVtYXAoKSBpcyBmdW5jdGlvbmFsLgogCSAqCi0JICogV2Ugcm91bmQgaXQgdXAgdG8gdGhlIG5leHQgNTEyIHBhZ2VzIGJvdW5kYXJ5IHNvIHRoYXQgd2UKKwkgKiBXZSByb3VuZCBpdCB1cCB0byB0aGUgbmV4dCAyNTYgcGFnZXMgYm91bmRhcnkgc28gdGhhdCB3ZQogCSAqIGNhbiBoYXZlIGEgc2luZ2xlIHBnZCBlbnRyeSBhbmQgYSBzaW5nbGUgcHRlIHRhYmxlOgogCSAqLwogI2RlZmluZSBOUl9GSVhfQlRNQVBTCQk2NAotI2RlZmluZSBGSVhfQlRNQVBTX05FU1RJTkcJNAotCUZJWF9CVE1BUF9FTkQgPSBfX2VuZF9vZl9wZXJtYW5lbnRfZml4ZWRfYWRkcmVzc2VzICsgNTEyIC0KLQkJCShfX2VuZF9vZl9wZXJtYW5lbnRfZml4ZWRfYWRkcmVzc2VzICYgNTExKSwKLQlGSVhfQlRNQVBfQkVHSU4gPSBGSVhfQlRNQVBfRU5EICsgTlJfRklYX0JUTUFQUypGSVhfQlRNQVBTX05FU1RJTkcgLSAxLAorI2RlZmluZSBGSVhfQlRNQVBTX1NMT1RTCTQKKwlGSVhfQlRNQVBfRU5EID0gX19lbmRfb2ZfcGVybWFuZW50X2ZpeGVkX2FkZHJlc3NlcyArIDI1NiAtCisJCQkoX19lbmRfb2ZfcGVybWFuZW50X2ZpeGVkX2FkZHJlc3NlcyAmIDI1NSksCisJRklYX0JUTUFQX0JFR0lOID0gRklYX0JUTUFQX0VORCArIE5SX0ZJWF9CVE1BUFMqRklYX0JUTUFQU19TTE9UUyAtIDEsCiAJX19lbmRfb2ZfZml4ZWRfYWRkcmVzc2VzCiB9OwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODYvZ2VuYXBpY18zMi5oIGIvaW5jbHVkZS9hc20teDg2L2dlbmFwaWNfMzIuaAppbmRleCAzNDI4MGYwLi42ZmU0ZjgxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS14ODYvZ2VuYXBpY18zMi5oCisrKyBiL2luY2x1ZGUvYXNtLXg4Ni9nZW5hcGljXzMyLmgKQEAgLTU3LDYgKzU3LDcgQEAKIAl1bnNpZ25lZCAoKmdldF9hcGljX2lkKSh1bnNpZ25lZCBsb25nIHgpOwogCXVuc2lnbmVkIGxvbmcgYXBpY19pZF9tYXNrOwogCXVuc2lnbmVkIGludCAoKmNwdV9tYXNrX3RvX2FwaWNpZCkoY3B1bWFza190IGNwdW1hc2spOworCWNwdW1hc2tfdCAoKnZlY3Rvcl9hbGxvY2F0aW9uX2RvbWFpbikoaW50IGNwdSk7CiAKICNpZmRlZiBDT05GSUdfU01QCiAJLyogaXBpICovCkBAIC0xMDQsNiArMTA1LDcgQEAKIAlBUElDRlVOQyhnZXRfYXBpY19pZCkJCQkJXAogCS5hcGljX2lkX21hc2sgPSBBUElDX0lEX01BU0ssCQkJXAogCUFQSUNGVU5DKGNwdV9tYXNrX3RvX2FwaWNpZCkJCQlcCisJQVBJQ0ZVTkModmVjdG9yX2FsbG9jYXRpb25fZG9tYWluKQkJCVwKIAlBUElDRlVOQyhhY3BpX21hZHRfb2VtX2NoZWNrKQkJCVwKIAlJUElGVU5DKHNlbmRfSVBJX21hc2spCQkJCVwKIAlJUElGVU5DKHNlbmRfSVBJX2FsbGJ1dHNlbGYpCQkJXApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L2hwZXQuaCBiL2luY2x1ZGUvYXNtLXg4Ni9ocGV0LmgKaW5kZXggY2JiYmI2ZC4uNThiMjczZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teDg2L2hwZXQuaAorKysgYi9pbmNsdWRlL2FzbS14ODYvaHBldC5oCkBAIC0xLDYgKzEsOCBAQAogI2lmbmRlZiBBU01fWDg2X19IUEVUX0gKICNkZWZpbmUgQVNNX1g4Nl9fSFBFVF9ICiAKKyNpbmNsdWRlIDxsaW51eC9tc2kuaD4KKwogI2lmZGVmIENPTkZJR19IUEVUX1RJTUVSCiAKICNkZWZpbmUgSFBFVF9NTUFQX1NJWkUJCTEwMjQKQEAgLTEwLDYgKzEyLDExIEBACiAjZGVmaW5lIEhQRVRfQ0ZHCQkweDAxMAogI2RlZmluZSBIUEVUX1NUQVRVUwkJMHgwMjAKICNkZWZpbmUgSFBFVF9DT1VOVEVSCQkweDBmMAorCisjZGVmaW5lIEhQRVRfVG5fQ0ZHKG4pCQkoMHgxMDAgKyAweDIwICogbikKKyNkZWZpbmUgSFBFVF9Ubl9DTVAobikJCSgweDEwOCArIDB4MjAgKiBuKQorI2RlZmluZSBIUEVUX1RuX1JPVVRFKG4pCSgweDExMCArIDB4MjAgKiBuKQorCiAjZGVmaW5lIEhQRVRfVDBfQ0ZHCQkweDEwMAogI2RlZmluZSBIUEVUX1QwX0NNUAkJMHgxMDgKICNkZWZpbmUgSFBFVF9UMF9ST1VURQkJMHgxMTAKQEAgLTY1LDYgKzcyLDIwIEBACiBleHRlcm4gdW5zaWduZWQgbG9uZyBocGV0X3JlYWRsKHVuc2lnbmVkIGxvbmcgYSk7CiBleHRlcm4gdm9pZCBmb3JjZV9ocGV0X3Jlc3VtZSh2b2lkKTsKIAorZXh0ZXJuIHZvaWQgaHBldF9tc2lfdW5tYXNrKHVuc2lnbmVkIGludCBpcnEpOworZXh0ZXJuIHZvaWQgaHBldF9tc2lfbWFzayh1bnNpZ25lZCBpbnQgaXJxKTsKK2V4dGVybiB2b2lkIGhwZXRfbXNpX3dyaXRlKHVuc2lnbmVkIGludCBpcnEsIHN0cnVjdCBtc2lfbXNnICptc2cpOworZXh0ZXJuIHZvaWQgaHBldF9tc2lfcmVhZCh1bnNpZ25lZCBpbnQgaXJxLCBzdHJ1Y3QgbXNpX21zZyAqbXNnKTsKKworI2lmZGVmIENPTkZJR19QQ0lfTVNJCitleHRlcm4gaW50IGFyY2hfc2V0dXBfaHBldF9tc2kodW5zaWduZWQgaW50IGlycSk7CisjZWxzZQorc3RhdGljIGlubGluZSBpbnQgYXJjaF9zZXR1cF9ocGV0X21zaSh1bnNpZ25lZCBpbnQgaXJxKQoreworCXJldHVybiAtRUlOVkFMOworfQorI2VuZGlmCisKICNpZmRlZiBDT05GSUdfSFBFVF9FTVVMQVRFX1JUQwogCiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODYvaHdfaXJxLmggYi9pbmNsdWRlL2FzbS14ODYvaHdfaXJxLmgKaW5kZXggNTBmNmUwMy4uNzQ5ZDA0MiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teDg2L2h3X2lycS5oCisrKyBiL2luY2x1ZGUvYXNtLXg4Ni9od19pcnEuaApAQCAtOTYsMTMgKzk2LDggQEAKIAogLyogU01QICovCiBleHRlcm4gdm9pZCBzbXBfYXBpY190aW1lcl9pbnRlcnJ1cHQoc3RydWN0IHB0X3JlZ3MgKik7Ci0jaWZkZWYgQ09ORklHX1g4Nl8zMgogZXh0ZXJuIHZvaWQgc21wX3NwdXJpb3VzX2ludGVycnVwdChzdHJ1Y3QgcHRfcmVncyAqKTsKIGV4dGVybiB2b2lkIHNtcF9lcnJvcl9pbnRlcnJ1cHQoc3RydWN0IHB0X3JlZ3MgKik7Ci0jZWxzZQotZXh0ZXJuIGFzbWxpbmthZ2Ugdm9pZCBzbXBfc3B1cmlvdXNfaW50ZXJydXB0KHZvaWQpOwotZXh0ZXJuIGFzbWxpbmthZ2Ugdm9pZCBzbXBfZXJyb3JfaW50ZXJydXB0KHZvaWQpOwotI2VuZGlmCiAjaWZkZWYgQ09ORklHX1g4Nl9TTVAKIGV4dGVybiB2b2lkIHNtcF9yZXNjaGVkdWxlX2ludGVycnVwdChzdHJ1Y3QgcHRfcmVncyAqKTsKIGV4dGVybiB2b2lkIHNtcF9jYWxsX2Z1bmN0aW9uX2ludGVycnVwdChzdHJ1Y3QgcHRfcmVncyAqKTsKQEAgLTExNSwxMyArMTEwLDEzIEBACiAjZW5kaWYKIAogI2lmZGVmIENPTkZJR19YODZfMzIKLWV4dGVybiB2b2lkICgqY29uc3QgaW50ZXJydXB0W05SX0lSUVNdKSh2b2lkKTsKLSNlbHNlCi10eXBlZGVmIGludCB2ZWN0b3JfaXJxX3RbTlJfVkVDVE9SU107Ci1ERUNMQVJFX1BFUl9DUFUodmVjdG9yX2lycV90LCB2ZWN0b3JfaXJxKTsKK2V4dGVybiB2b2lkICgqY29uc3QgaW50ZXJydXB0W05SX1ZFQ1RPUlNdKSh2b2lkKTsKICNlbmRpZgogCi0jaWYgZGVmaW5lZChDT05GSUdfWDg2X0lPX0FQSUMpICYmIGRlZmluZWQoQ09ORklHX1g4Nl82NCkKK3R5cGVkZWYgaW50IHZlY3Rvcl9pcnFfdFtOUl9WRUNUT1JTXTsKK0RFQ0xBUkVfUEVSX0NQVSh2ZWN0b3JfaXJxX3QsIHZlY3Rvcl9pcnEpOworCisjaWZkZWYgQ09ORklHX1g4Nl9JT19BUElDCiBleHRlcm4gdm9pZCBsb2NrX3ZlY3Rvcl9sb2NrKHZvaWQpOwogZXh0ZXJuIHZvaWQgdW5sb2NrX3ZlY3Rvcl9sb2NrKHZvaWQpOwogZXh0ZXJuIHZvaWQgX19zZXR1cF92ZWN0b3JfaXJxKGludCBjcHUpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L2lvLmggYi9pbmNsdWRlL2FzbS14ODYvaW8uaAppbmRleCA3MmI3NzE5Li5hMjMzZjgzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS14ODYvaW8uaAorKysgYi9pbmNsdWRlL2FzbS14ODYvaW8uaApAQCAtNSwyMCArNSw2IEBACiAKICNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgogCi0vKgotICogZWFybHlfaW9yZW1hcCgpIGFuZCBlYXJseV9pb3VubWFwKCkgYXJlIGZvciB0ZW1wb3JhcnkgZWFybHkgYm9vdC10aW1lCi0gKiBtYXBwaW5ncywgYmVmb3JlIHRoZSByZWFsIGlvcmVtYXAoKSBpcyBmdW5jdGlvbmFsLgotICogQSBib290LXRpbWUgbWFwcGluZyBpcyBjdXJyZW50bHkgbGltaXRlZCB0byBhdCBtb3N0IDE2IHBhZ2VzLgotICovCi0jaWZuZGVmIF9fQVNTRU1CTFlfXwotZXh0ZXJuIHZvaWQgZWFybHlfaW9yZW1hcF9pbml0KHZvaWQpOwotZXh0ZXJuIHZvaWQgZWFybHlfaW9yZW1hcF9jbGVhcih2b2lkKTsKLWV4dGVybiB2b2lkIGVhcmx5X2lvcmVtYXBfcmVzZXQodm9pZCk7Ci1leHRlcm4gdm9pZCAqZWFybHlfaW9yZW1hcCh1bnNpZ25lZCBsb25nIG9mZnNldCwgdW5zaWduZWQgbG9uZyBzaXplKTsKLWV4dGVybiB2b2lkIGVhcmx5X2lvdW5tYXAodm9pZCAqYWRkciwgdW5zaWduZWQgbG9uZyBzaXplKTsKLWV4dGVybiB2b2lkIF9faW9tZW0gKmZpeF9pb3JlbWFwKHVuc2lnbmVkIGlkeCwgdW5zaWduZWQgbG9uZyBwaHlzKTsKLSNlbmRpZgotCiAjZGVmaW5lIGJ1aWxkX21taW9fcmVhZChuYW1lLCBzaXplLCB0eXBlLCByZWcsIGJhcnJpZXIpIFwKIHN0YXRpYyBpbmxpbmUgdHlwZSBuYW1lKGNvbnN0IHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkcikgXAogeyB0eXBlIHJldDsgYXNtIHZvbGF0aWxlKCJtb3YiIHNpemUgIiAlMSwlMCI6cmVnIChyZXQpIFwKQEAgLTk3LDYgKzgzLDcgQEAKIGV4dGVybiB2b2lkIGVhcmx5X2lvcmVtYXBfY2xlYXIodm9pZCk7CiBleHRlcm4gdm9pZCBlYXJseV9pb3JlbWFwX3Jlc2V0KHZvaWQpOwogZXh0ZXJuIHZvaWQgKmVhcmx5X2lvcmVtYXAodW5zaWduZWQgbG9uZyBvZmZzZXQsIHVuc2lnbmVkIGxvbmcgc2l6ZSk7CitleHRlcm4gdm9pZCAqZWFybHlfbWVtcmVtYXAodW5zaWduZWQgbG9uZyBvZmZzZXQsIHVuc2lnbmVkIGxvbmcgc2l6ZSk7CiBleHRlcm4gdm9pZCBlYXJseV9pb3VubWFwKHZvaWQgKmFkZHIsIHVuc2lnbmVkIGxvbmcgc2l6ZSk7CiBleHRlcm4gdm9pZCBfX2lvbWVtICpmaXhfaW9yZW1hcCh1bnNpZ25lZCBpZHgsIHVuc2lnbmVkIGxvbmcgcGh5cyk7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Ni9pb182NC5oIGIvaW5jbHVkZS9hc20teDg2L2lvXzY0LmgKaW5kZXggNjQ0MjllOS4uZWU2ZTA4NiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teDg2L2lvXzY0LmgKKysrIGIvaW5jbHVkZS9hc20teDg2L2lvXzY0LmgKQEAgLTE2NSw5ICsxNjUsNiBAQAogCiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvaW9tYXAuaD4KIAotZXh0ZXJuIHZvaWQgKmVhcmx5X2lvcmVtYXAodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIHNpemUpOwotZXh0ZXJuIHZvaWQgZWFybHlfaW91bm1hcCh2b2lkICphZGRyLCB1bnNpZ25lZCBsb25nIHNpemUpOwotCiAvKgogICogVGhpcyBvbmUgbWFwcyBoaWdoIGFkZHJlc3MgZGV2aWNlIG1lbW9yeSBhbmQgdHVybnMgb2ZmIGNhY2hpbmcgZm9yIHRoYXQgYXJlYS4KICAqIGl0J3MgdXNlZnVsIGlmIHNvbWUgY29udHJvbCByZWdpc3RlcnMgYXJlIGluIHN1Y2ggYW4gYXJlYSBhbmQgd3JpdGUgY29tYmluaW5nCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODYvaW9fYXBpYy5oIGIvaW5jbHVkZS9hc20teDg2L2lvX2FwaWMuaAppbmRleCA4ZWM2OGE1Li5kMzVjYmQ3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS14ODYvaW9fYXBpYy5oCisrKyBiL2luY2x1ZGUvYXNtLXg4Ni9pb19hcGljLmgKQEAgLTQsNiArNCw3IEBACiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxhc20vbXBzcGVjLmg+CiAjaW5jbHVkZSA8YXNtL2FwaWNkZWYuaD4KKyNpbmNsdWRlIDxhc20vaXJxX3ZlY3RvcnMuaD4KIAogLyoKICAqIEludGVsIElPLUFQSUMgc3VwcG9ydCBmb3IgU01QIGFuZCBVUCBzeXN0ZW1zLgpAQCAtODcsMjQgKzg4LDggQEAKIAkJbWFzawkJOiAgMSwJLyogMDogZW5hYmxlZCwgMTogZGlzYWJsZWQgKi8KIAkJX19yZXNlcnZlZF8yCTogMTU7CiAKLSNpZmRlZiBDT05GSUdfWDg2XzMyCi0JdW5pb24gewotCQlzdHJ1Y3QgewotCQkJX191MzIJX19yZXNlcnZlZF8xCTogMjQsCi0JCQkJcGh5c2ljYWxfZGVzdAk6ICA0LAotCQkJCV9fcmVzZXJ2ZWRfMgk6ICA0OwotCQl9IHBoeXNpY2FsOwotCi0JCXN0cnVjdCB7Ci0JCQlfX3UzMglfX3Jlc2VydmVkXzEJOiAyNCwKLQkJCQlsb2dpY2FsX2Rlc3QJOiAgODsKLQkJfSBsb2dpY2FsOwotCX0gZGVzdDsKLSNlbHNlCiAJX191MzIJX19yZXNlcnZlZF8zCTogMjQsCiAJCWRlc3QJCTogIDg7Ci0jZW5kaWYKLQogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKIHN0cnVjdCBJUl9JT19BUElDX3JvdXRlX2VudHJ5IHsKQEAgLTIwMywxMCArMTg4LDE3IEBACiBleHRlcm4gdm9pZCByZWluaXRfaW50cl9yZW1hcHBlZF9JT19BUElDKGludCk7CiAjZW5kaWYKIAorZXh0ZXJuIGludCBwcm9iZV9ucl9pcnFzKHZvaWQpOworCiAjZWxzZSAgLyogIUNPTkZJR19YODZfSU9fQVBJQyAqLwogI2RlZmluZSBpb19hcGljX2Fzc2lnbl9wY2lfaXJxcyAwCiBzdGF0aWMgY29uc3QgaW50IHRpbWVyX3Rocm91Z2hfODI1OSA9IDA7CiBzdGF0aWMgaW5saW5lIHZvaWQgaW9hcGljX2luaXRfbWFwcGluZ3Modm9pZCkgeyB9CisKK3N0YXRpYyBpbmxpbmUgaW50IHByb2JlX25yX2lycXModm9pZCkKK3sKKwlyZXR1cm4gTlJfSVJRUzsKK30KICNlbmRpZgogCiAjZW5kaWYgLyogQVNNX1g4Nl9fSU9fQVBJQ19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODYvaW9jdGxzLmggYi9pbmNsdWRlL2FzbS14ODYvaW9jdGxzLmgKaW5kZXggMzM2NjAzNS4uMDY3NTJhNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teDg2L2lvY3Rscy5oCisrKyBiL2luY2x1ZGUvYXNtLXg4Ni9pb2N0bHMuaApAQCAtNTEsOSArNTEsMTUgQEAKICNkZWZpbmUgVENTRVRTMgkJX0lPVygnVCcsIDB4MkIsIHN0cnVjdCB0ZXJtaW9zMikKICNkZWZpbmUgVENTRVRTVzIJX0lPVygnVCcsIDB4MkMsIHN0cnVjdCB0ZXJtaW9zMikKICNkZWZpbmUgVENTRVRTRjIJX0lPVygnVCcsIDB4MkQsIHN0cnVjdCB0ZXJtaW9zMikKKyNkZWZpbmUgVElPQ0dSUzQ4NQkweDU0MkUKKyNkZWZpbmUgVElPQ1NSUzQ4NQkweDU0MkYKICNkZWZpbmUgVElPQ0dQVE4JX0lPUignVCcsIDB4MzAsIHVuc2lnbmVkIGludCkKIAkJCQkvKiBHZXQgUHR5IE51bWJlciAob2YgcHR5LW11eCBkZXZpY2UpICovCiAjZGVmaW5lIFRJT0NTUFRMQ0sJX0lPVygnVCcsIDB4MzEsIGludCkgIC8qIExvY2svdW5sb2NrIFB0eSAqLworI2RlZmluZSBUQ0dFVFgJCTB4NTQzMiAvKiBTWVM1IFRDR0VUWCBjb21wYXRpYmlsaXR5ICovCisjZGVmaW5lIFRDU0VUWAkJMHg1NDMzCisjZGVmaW5lIFRDU0VUWEYJCTB4NTQzNAorI2RlZmluZSBUQ1NFVFhXCQkweDU0MzUKIAogI2RlZmluZSBGSU9OQ0xFWAkweDU0NTAKICNkZWZpbmUgRklPQ0xFWAkJMHg1NDUxCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODYvaW9tbXUuaCBiL2luY2x1ZGUvYXNtLXg4Ni9pb21tdS5oCmluZGV4IDU0NmFkMzEuLjk2MWU3NDYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXg4Ni9pb21tdS5oCisrKyBiL2luY2x1ZGUvYXNtLXg4Ni9pb21tdS5oCkBAIC04LDcgKzgsNyBAQAogZXh0ZXJuIGludCBpb21tdV9kZXRlY3RlZDsKIGV4dGVybiBpbnQgZG1hcl9kaXNhYmxlZDsKIAotZXh0ZXJuIHVuc2lnbmVkIGxvbmcgaW9tbXVfbnVtX3BhZ2VzKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBsZW4pOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgaW9tbXVfbnJfcGFnZXModW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGxlbik7CiAKICNpZmRlZiBDT05GSUdfR0FSVF9JT01NVQogZXh0ZXJuIGludCBnYXJ0X2lvbW11X2FwZXJ0dXJlOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L2lycV92ZWN0b3JzLmggYi9pbmNsdWRlL2FzbS14ODYvaXJxX3ZlY3RvcnMuaAppbmRleCBjNWQyZDc2Li5hOGQwNjVkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS14ODYvaXJxX3ZlY3RvcnMuaAorKysgYi9pbmNsdWRlL2FzbS14ODYvaXJxX3ZlY3RvcnMuaApAQCAtMTksMTkgKzE5LDE0IEBACiAKIC8qCiAgKiBSZXNlcnZlIHRoZSBsb3dlc3QgdXNhYmxlIHByaW9yaXR5IGxldmVsIDB4MjAgLSAweDJmIGZvciB0cmlnZ2VyaW5nCi0gKiBjbGVhbnVwIGFmdGVyIGlycSBtaWdyYXRpb24gb24gNjQgYml0LgorICogY2xlYW51cCBhZnRlciBpcnEgbWlncmF0aW9uLgogICovCiAjZGVmaW5lIElSUV9NT1ZFX0NMRUFOVVBfVkVDVE9SCUZJUlNUX0VYVEVSTkFMX1ZFQ1RPUgogCiAvKgotICogVmVjdG9ycyAweDIwLTB4MmYgYXJlIHVzZWQgZm9yIElTQSBpbnRlcnJ1cHRzIG9uIDMyIGJpdC4KLSAqIFZlY3RvcnMgMHgzMC0weDNmIGFyZSB1c2VkIGZvciBJU0EgaW50ZXJydXB0cyBvbiA2NCBiaXQuCisgKiBWZWN0b3JzIDB4MzAtMHgzZiBhcmUgdXNlZCBmb3IgSVNBIGludGVycnVwdHMuCiAgKi8KLSNpZmRlZiBDT05GSUdfWDg2XzMyCi0jZGVmaW5lIElSUTBfVkVDVE9SCQkoRklSU1RfRVhURVJOQUxfVkVDVE9SKQotI2Vsc2UKICNkZWZpbmUgSVJRMF9WRUNUT1IJCShGSVJTVF9FWFRFUk5BTF9WRUNUT1IgKyAweDEwKQotI2VuZGlmCiAjZGVmaW5lIElSUTFfVkVDVE9SCQkoSVJRMF9WRUNUT1IgKyAxKQogI2RlZmluZSBJUlEyX1ZFQ1RPUgkJKElSUTBfVkVDVE9SICsgMikKICNkZWZpbmUgSVJRM19WRUNUT1IJCShJUlEwX1ZFQ1RPUiArIDMpCkBAIC05NiwxMSArOTEsNyBAQAogICogc3RhcnQgYXQgMHgzMSgweDQxKSB0byBzcHJlYWQgb3V0IHZlY3RvcnMgZXZlbmx5IGJldHdlZW4gcHJpb3JpdHkKICAqIGxldmVscy4gKDB4ODAgaXMgdGhlIHN5c2NhbGwgdmVjdG9yKQogICovCi0jaWZkZWYgQ09ORklHX1g4Nl8zMgotIyBkZWZpbmUgRklSU1RfREVWSUNFX1ZFQ1RPUgkweDMxCi0jZWxzZQotIyBkZWZpbmUgRklSU1RfREVWSUNFX1ZFQ1RPUgkoSVJRMTVfVkVDVE9SICsgMikKLSNlbmRpZgorI2RlZmluZSBGSVJTVF9ERVZJQ0VfVkVDVE9SCShJUlExNV9WRUNUT1IgKyAyKQogCiAjZGVmaW5lIE5SX1ZFQ1RPUlMJCTI1NgogCkBAIC0xMTYsNyArMTA3LDYgQEAKICMgZWxzZQogIyAgZGVmaW5lIE5SX0lSUVMgKE5SX1ZFQ1RPUlMgKyAoMzIgKiBNQVhfSU9fQVBJQ1MpKQogIyBlbmRpZgotIyBkZWZpbmUgTlJfSVJRX1ZFQ1RPUlMgTlJfSVJRUwogCiAjZWxpZiAhZGVmaW5lZChDT05GSUdfWDg2X1ZPWUFHRVIpCiAKQEAgLTEyNCwyMyArMTE0LDE1IEBACiAKICMgIGRlZmluZSBOUl9JUlFTCQkyMjQKIAotIyAgaWYgKDIyNCA+PSAzMiAqIE5SX0NQVVMpCi0jICAgZGVmaW5lIE5SX0lSUV9WRUNUT1JTCU5SX0lSUVMKLSMgIGVsc2UKLSMgICBkZWZpbmUgTlJfSVJRX1ZFQ1RPUlMJKDMyICogTlJfQ1BVUykKLSMgIGVuZGlmCi0KICMgZWxzZSAvKiBJT19BUElDIHx8IFBBUkFWSVJUICovCiAKICMgIGRlZmluZSBOUl9JUlFTCQkxNgotIyAgZGVmaW5lIE5SX0lSUV9WRUNUT1JTCU5SX0lSUVMKIAogIyBlbmRpZgogCiAjZWxzZSAvKiAhVklTV1MgJiYgIVZPWUFHRVIgKi8KIAogIyBkZWZpbmUgTlJfSVJRUwkJMjI0Ci0jIGRlZmluZSBOUl9JUlFfVkVDVE9SUwkJTlJfSVJRUwogCiAjZW5kaWYgLyogVklTV1MgKi8KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L2lycWZsYWdzLmggYi9pbmNsdWRlL2FzbS14ODYvaXJxZmxhZ3MuaAppbmRleCA0MjRhY2I0Li4yYmRhYjIxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS14ODYvaXJxZmxhZ3MuaAorKysgYi9pbmNsdWRlL2FzbS14ODYvaXJxZmxhZ3MuaApAQCAtMTY2LDI3ICsxNjYsNiBAQAogCXJldHVybiByYXdfaXJxc19kaXNhYmxlZF9mbGFncyhmbGFncyk7CiB9CiAKLS8qCi0gKiBtYWtlcyB0aGUgdHJhY2VkIGhhcmRpcnEgc3RhdGUgbWF0Y2ggd2l0aCB0aGUgbWFjaGluZSBzdGF0ZQotICoKLSAqIHNob3VsZCBiZSBhIHJhcmVseSB1c2VkIGZ1bmN0aW9uLCBvbmx5IGluIHBsYWNlcyB3aGVyZSBpdHMKLSAqIG90aGVyd2lzZSBpbXBvc3NpYmxlIHRvIGtub3cgdGhlIGlycSBzdGF0ZSwgbGlrZSBpbiB0cmFwcy4KLSAqLwotc3RhdGljIGlubGluZSB2b2lkIHRyYWNlX2hhcmRpcnFzX2ZpeHVwX2ZsYWdzKHVuc2lnbmVkIGxvbmcgZmxhZ3MpCi17Ci0JaWYgKHJhd19pcnFzX2Rpc2FibGVkX2ZsYWdzKGZsYWdzKSkKLQkJdHJhY2VfaGFyZGlycXNfb2ZmKCk7Ci0JZWxzZQotCQl0cmFjZV9oYXJkaXJxc19vbigpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgdHJhY2VfaGFyZGlycXNfZml4dXAodm9pZCkKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzID0gX19yYXdfbG9jYWxfc2F2ZV9mbGFncygpOwotCi0JdHJhY2VfaGFyZGlycXNfZml4dXBfZmxhZ3MoZmxhZ3MpOwotfQotCiAjZWxzZQogCiAjaWZkZWYgQ09ORklHX1g4Nl82NApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L2tkZWJ1Zy5oIGIvaW5jbHVkZS9hc20teDg2L2tkZWJ1Zy5oCmluZGV4IDVlYzNhZDMuLmZiYmFiNjYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXg4Ni9rZGVidWcuaAorKysgYi9pbmNsdWRlL2FzbS14ODYva2RlYnVnLmgKQEAgLTI3LDEwICsyNyw5IEBACiBleHRlcm4gdm9pZCBkaWUoY29uc3QgY2hhciAqLCBzdHJ1Y3QgcHRfcmVncyAqLGxvbmcpOwogZXh0ZXJuIGludCBfX211c3RfY2hlY2sgX19kaWUoY29uc3QgY2hhciAqLCBzdHJ1Y3QgcHRfcmVncyAqLCBsb25nKTsKIGV4dGVybiB2b2lkIHNob3dfcmVnaXN0ZXJzKHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKLWV4dGVybiB2b2lkIF9fc2hvd19yZWdpc3RlcnMoc3RydWN0IHB0X3JlZ3MgKiwgaW50IGFsbCk7CiBleHRlcm4gdm9pZCBzaG93X3RyYWNlKHN0cnVjdCB0YXNrX3N0cnVjdCAqdCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsCiAJCSAgICAgICB1bnNpZ25lZCBsb25nICpzcCwgdW5zaWduZWQgbG9uZyBicCk7Ci1leHRlcm4gdm9pZCBfX3Nob3dfcmVncyhzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CitleHRlcm4gdm9pZCBfX3Nob3dfcmVncyhzdHJ1Y3QgcHRfcmVncyAqcmVncywgaW50IGFsbCk7CiBleHRlcm4gdm9pZCBzaG93X3JlZ3Moc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOwogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgb29wc19iZWdpbih2b2lkKTsKIGV4dGVybiB2b2lkIG9vcHNfZW5kKHVuc2lnbmVkIGxvbmcsIHN0cnVjdCBwdF9yZWdzICosIGludCBzaWducik7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODYva3Byb2Jlcy5oIGIvaW5jbHVkZS9hc20teDg2L2twcm9iZXMuaAppbmRleCBiZDg0MDc4Ni4uOGEwNzQ4ZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teDg2L2twcm9iZXMuaAorKysgYi9pbmNsdWRlL2FzbS14ODYva3Byb2Jlcy5oCkBAIC04MiwxNSArODIsNiBAQAogCXN0cnVjdCBwcmV2X2twcm9iZSBwcmV2X2twcm9iZTsKIH07CiAKLS8qIHRyYXAzLzEgYXJlIGludHIgZ2F0ZXMgZm9yIGtwcm9iZXMuICBTbywgcmVzdG9yZSB0aGUgc3RhdHVzIG9mIElGLAotICogaWYgbmVjZXNzYXJ5LCBiZWZvcmUgZXhlY3V0aW5nIHRoZSBvcmlnaW5hbCBpbnQzLzEgKHRyYXApIGhhbmRsZXIuCi0gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCByZXN0b3JlX2ludGVycnVwdHMoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCi17Ci0JaWYgKHJlZ3MtPmZsYWdzICYgWDg2X0VGTEFHU19JRikKLQkJbG9jYWxfaXJxX2VuYWJsZSgpOwotfQotCiBleHRlcm4gaW50IGtwcm9iZV9mYXVsdF9oYW5kbGVyKHN0cnVjdCBwdF9yZWdzICpyZWdzLCBpbnQgdHJhcG5yKTsKIGV4dGVybiBpbnQga3Byb2JlX2V4Y2VwdGlvbnNfbm90aWZ5KHN0cnVjdCBub3RpZmllcl9ibG9jayAqc2VsZiwKIAkJCQkgICAgdW5zaWduZWQgbG9uZyB2YWwsIHZvaWQgKmRhdGEpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L2t2bS5oIGIvaW5jbHVkZS9hc20teDg2L2t2bS5oCmluZGV4IDc4ZTk1NGQuLmJhMGRkNzkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXg4Ni9rdm0uaAorKysgYi9pbmNsdWRlL2FzbS14ODYva3ZtLmgKQEAgLTIwOCwyNiArMjA4LDQgQEAKIHN0cnVjdCBrdm1fcGl0X3N0YXRlIHsKIAlzdHJ1Y3Qga3ZtX3BpdF9jaGFubmVsX3N0YXRlIGNoYW5uZWxzWzNdOwogfTsKLQotI2RlZmluZSBLVk1fVFJDX0lOSl9WSVJRICAgICAgICAgKEtWTV9UUkNfSEFORExFUiArIDB4MDIpCi0jZGVmaW5lIEtWTV9UUkNfUkVERUxJVkVSX0VWVCAgICAoS1ZNX1RSQ19IQU5ETEVSICsgMHgwMykKLSNkZWZpbmUgS1ZNX1RSQ19QRU5EX0lOVFIgICAgICAgIChLVk1fVFJDX0hBTkRMRVIgKyAweDA0KQotI2RlZmluZSBLVk1fVFJDX0lPX1JFQUQgICAgICAgICAgKEtWTV9UUkNfSEFORExFUiArIDB4MDUpCi0jZGVmaW5lIEtWTV9UUkNfSU9fV1JJVEUgICAgICAgICAoS1ZNX1RSQ19IQU5ETEVSICsgMHgwNikKLSNkZWZpbmUgS1ZNX1RSQ19DUl9SRUFEICAgICAgICAgIChLVk1fVFJDX0hBTkRMRVIgKyAweDA3KQotI2RlZmluZSBLVk1fVFJDX0NSX1dSSVRFICAgICAgICAgKEtWTV9UUkNfSEFORExFUiArIDB4MDgpCi0jZGVmaW5lIEtWTV9UUkNfRFJfUkVBRCAgICAgICAgICAoS1ZNX1RSQ19IQU5ETEVSICsgMHgwOSkKLSNkZWZpbmUgS1ZNX1RSQ19EUl9XUklURSAgICAgICAgIChLVk1fVFJDX0hBTkRMRVIgKyAweDBBKQotI2RlZmluZSBLVk1fVFJDX01TUl9SRUFEICAgICAgICAgKEtWTV9UUkNfSEFORExFUiArIDB4MEIpCi0jZGVmaW5lIEtWTV9UUkNfTVNSX1dSSVRFICAgICAgICAoS1ZNX1RSQ19IQU5ETEVSICsgMHgwQykKLSNkZWZpbmUgS1ZNX1RSQ19DUFVJRCAgICAgICAgICAgIChLVk1fVFJDX0hBTkRMRVIgKyAweDBEKQotI2RlZmluZSBLVk1fVFJDX0lOVFIgICAgICAgICAgICAgKEtWTV9UUkNfSEFORExFUiArIDB4MEUpCi0jZGVmaW5lIEtWTV9UUkNfTk1JICAgICAgICAgICAgICAoS1ZNX1RSQ19IQU5ETEVSICsgMHgwRikKLSNkZWZpbmUgS1ZNX1RSQ19WTU1DQUxMICAgICAgICAgIChLVk1fVFJDX0hBTkRMRVIgKyAweDEwKQotI2RlZmluZSBLVk1fVFJDX0hMVCAgICAgICAgICAgICAgKEtWTV9UUkNfSEFORExFUiArIDB4MTEpCi0jZGVmaW5lIEtWTV9UUkNfQ0xUUyAgICAgICAgICAgICAoS1ZNX1RSQ19IQU5ETEVSICsgMHgxMikKLSNkZWZpbmUgS1ZNX1RSQ19MTVNXICAgICAgICAgICAgIChLVk1fVFJDX0hBTkRMRVIgKyAweDEzKQotI2RlZmluZSBLVk1fVFJDX0FQSUNfQUNDRVNTICAgICAgKEtWTV9UUkNfSEFORExFUiArIDB4MTQpCi0jZGVmaW5lIEtWTV9UUkNfVERQX0ZBVUxUICAgICAgICAoS1ZNX1RSQ19IQU5ETEVSICsgMHgxNSkKLQogI2VuZGlmIC8qIEFTTV9YODZfX0tWTV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODYva3ZtX2hvc3QuaCBiL2luY2x1ZGUvYXNtLXg4Ni9rdm1faG9zdC5oCmluZGV4IDY5Nzk0NTQuLjQxMWZiOGMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXg4Ni9rdm1faG9zdC5oCisrKyBiL2luY2x1ZGUvYXNtLXg4Ni9rdm1faG9zdC5oCkBAIC01Nyw2ICs1NywxMCBAQAogI2RlZmluZSBLVk1fUEFHRVNfUEVSX0hQQUdFIChLVk1fSFBBR0VfU0laRSAvIFBBR0VfU0laRSkKIAogI2RlZmluZSBERV9WRUNUT1IgMAorI2RlZmluZSBEQl9WRUNUT1IgMQorI2RlZmluZSBCUF9WRUNUT1IgMworI2RlZmluZSBPRl9WRUNUT1IgNAorI2RlZmluZSBCUl9WRUNUT1IgNQogI2RlZmluZSBVRF9WRUNUT1IgNgogI2RlZmluZSBOTV9WRUNUT1IgNwogI2RlZmluZSBERl9WRUNUT1IgOApAQCAtNjUsNiArNjksNyBAQAogI2RlZmluZSBTU19WRUNUT1IgMTIKICNkZWZpbmUgR1BfVkVDVE9SIDEzCiAjZGVmaW5lIFBGX1ZFQ1RPUiAxNAorI2RlZmluZSBNRl9WRUNUT1IgMTYKICNkZWZpbmUgTUNfVkVDVE9SIDE4CiAKICNkZWZpbmUgU0VMRUNUT1JfVElfTUFTSyAoMSA8PCAyKQpAQCAtODksNyArOTQsNyBAQAogc3RydWN0IGt2bV92Y3B1Owogc3RydWN0IGt2bTsKIAotZW51bSB7CitlbnVtIGt2bV9yZWcgewogCVZDUFVfUkVHU19SQVggPSAwLAogCVZDUFVfUkVHU19SQ1ggPSAxLAogCVZDUFVfUkVHU19SRFggPSAyLApAQCAtMTA4LDYgKzExMyw3IEBACiAJVkNQVV9SRUdTX1IxNCA9IDE0LAogCVZDUFVfUkVHU19SMTUgPSAxNSwKICNlbmRpZgorCVZDUFVfUkVHU19SSVAsCiAJTlJfVkNQVV9SRUdTCiB9OwogCkBAIC0xODksMTAgKzE5NSwyMCBAQAogCQkJCSAgICAqLwogCWludCBtdWx0aW1hcHBlZDsgICAgICAgICAvKiBNb3JlIHRoYW4gb25lIHBhcmVudF9wdGU/ICovCiAJaW50IHJvb3RfY291bnQ7ICAgICAgICAgIC8qIEN1cnJlbnRseSBzZXJ2aW5nIGFzIGFjdGl2ZSByb290ICovCisJYm9vbCB1bnN5bmM7CisJYm9vbCB1bnN5bmNfY2hpbGRyZW47CiAJdW5pb24gewogCQl1NjQgKnBhcmVudF9wdGU7ICAgICAgICAgICAgICAgLyogIW11bHRpbWFwcGVkICovCiAJCXN0cnVjdCBobGlzdF9oZWFkIHBhcmVudF9wdGVzOyAvKiBtdWx0aW1hcHBlZCwga3ZtX3B0ZV9jaGFpbiAqLwogCX07CisJREVDTEFSRV9CSVRNQVAodW5zeW5jX2NoaWxkX2JpdG1hcCwgNTEyKTsKK307CisKK3N0cnVjdCBrdm1fcHZfbW11X29wX2J1ZmZlciB7CisJdm9pZCAqcHRyOworCXVuc2lnbmVkIGxlbjsKKwl1bnNpZ25lZCBwcm9jZXNzZWQ7CisJY2hhciBidWZbNTEyXSBfX2FsaWduZWQoc2l6ZW9mKGxvbmcpKTsKIH07CiAKIC8qCkBAIC0yMDcsNiArMjIzLDkgQEAKIAlncGFfdCAoKmd2YV90b19ncGEpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3ZhX3QgZ3ZhKTsKIAl2b2lkICgqcHJlZmV0Y2hfcGFnZSkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAogCQkJICAgICAgc3RydWN0IGt2bV9tbXVfcGFnZSAqcGFnZSk7CisJaW50ICgqc3luY19wYWdlKShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCisJCQkgc3RydWN0IGt2bV9tbXVfcGFnZSAqc3ApOworCXZvaWQgKCppbnZscGcpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3ZhX3QgZ3ZhKTsKIAlocGFfdCByb290X2hwYTsKIAlpbnQgcm9vdF9sZXZlbDsKIAlpbnQgc2hhZG93X3Jvb3RfbGV2ZWw7CkBAIC0yMTksOCArMjM4LDEzIEBACiAJaW50IGludGVycnVwdF93aW5kb3dfb3BlbjsKIAl1bnNpZ25lZCBsb25nIGlycV9zdW1tYXJ5OyAvKiBiaXQgdmVjdG9yOiAxIHBlciB3b3JkIGluIGlycV9wZW5kaW5nICovCiAJREVDTEFSRV9CSVRNQVAoaXJxX3BlbmRpbmcsIEtWTV9OUl9JTlRFUlJVUFRTKTsKLQl1bnNpZ25lZCBsb25nIHJlZ3NbTlJfVkNQVV9SRUdTXTsgLyogZm9yIHJzcDogdmNwdV9sb2FkX3JzcF9yaXAoKSAqLwotCXVuc2lnbmVkIGxvbmcgcmlwOyAgICAgIC8qIG5lZWRzIHZjcHVfbG9hZF9yc3BfcmlwKCkgKi8KKwkvKgorCSAqIHJpcCBhbmQgcmVncyBhY2Nlc3NlcyBtdXN0IGdvIHRocm91Z2gKKwkgKiBrdm1fe3JlZ2lzdGVyLHJpcH1fe3JlYWQsd3JpdGV9IGZ1bmN0aW9ucy4KKwkgKi8KKwl1bnNpZ25lZCBsb25nIHJlZ3NbTlJfVkNQVV9SRUdTXTsKKwl1MzIgcmVnc19hdmFpbDsKKwl1MzIgcmVnc19kaXJ0eTsKIAogCXVuc2lnbmVkIGxvbmcgY3IwOwogCXVuc2lnbmVkIGxvbmcgY3IyOwpAQCAtMjM3LDYgKzI2MSw5IEBACiAJYm9vbCB0cHJfYWNjZXNzX3JlcG9ydGluZzsKIAogCXN0cnVjdCBrdm1fbW11IG1tdTsKKwkvKiBvbmx5IG5lZWRlZCBpbiBrdm1fcHZfbW11X29wKCkgcGF0aCwgYnV0IGl0J3MgaG90IHNvCisJICogcHV0IGl0IGhlcmUgdG8gYXZvaWQgYWxsb2NhdGlvbiAqLworCXN0cnVjdCBrdm1fcHZfbW11X29wX2J1ZmZlciBtbXVfb3BfYnVmZmVyOwogCiAJc3RydWN0IGt2bV9tbXVfbWVtb3J5X2NhY2hlIG1tdV9wdGVfY2hhaW5fY2FjaGU7CiAJc3RydWN0IGt2bV9tbXVfbWVtb3J5X2NhY2hlIG1tdV9ybWFwX2Rlc2NfY2FjaGU7CkBAIC0yNjksNiArMjk2LDExIEBACiAJCXUzMiBlcnJvcl9jb2RlOwogCX0gZXhjZXB0aW9uOwogCisJc3RydWN0IGt2bV9xdWV1ZWRfaW50ZXJydXB0IHsKKwkJYm9vbCBwZW5kaW5nOworCQl1OCBucjsKKwl9IGludGVycnVwdDsKKwogCXN0cnVjdCB7CiAJCWludCBhY3RpdmU7CiAJCXU4IHNhdmVfaW9wbDsKQEAgLTI5NCw2ICszMjYsNyBAQAogCXN0cnVjdCBwYWdlICp0aW1lX3BhZ2U7CiAKIAlib29sIG5taV9wZW5kaW5nOworCWJvb2wgbm1pX2luamVjdGVkOwogCiAJdTY0IG10cnJbMHgxMDBdOwogfTsKQEAgLTMxNiw5ICszNDksMTIgQEAKIAkgKiBIYXNoIHRhYmxlIG9mIHN0cnVjdCBrdm1fbW11X3BhZ2UuCiAJICovCiAJc3RydWN0IGxpc3RfaGVhZCBhY3RpdmVfbW11X3BhZ2VzOworCXN0cnVjdCBsaXN0X2hlYWQgYXNzaWduZWRfZGV2X2hlYWQ7CisJc3RydWN0IGRtYXJfZG9tYWluICppbnRlbF9pb21tdV9kb21haW47CiAJc3RydWN0IGt2bV9waWMgKnZwaWM7CiAJc3RydWN0IGt2bV9pb2FwaWMgKnZpb2FwaWM7CiAJc3RydWN0IGt2bV9waXQgKnZwaXQ7CisJc3RydWN0IGhsaXN0X2hlYWQgaXJxX2Fja19ub3RpZmllcl9saXN0OwogCiAJaW50IHJvdW5kX3JvYmluX3ByZXZfdmNwdTsKIAl1bnNpZ25lZCBpbnQgdHNzX2FkZHI7CkBAIC0zMzgsNiArMzc0LDcgQEAKIAl1MzIgbW11X2Zsb29kZWQ7CiAJdTMyIG1tdV9yZWN5Y2xlZDsKIAl1MzIgbW11X2NhY2hlX21pc3M7CisJdTMyIG1tdV91bnN5bmM7CiAJdTMyIHJlbW90ZV90bGJfZmx1c2g7CiAJdTMyIGxwYWdlczsKIH07CkBAIC0zNjQsNiArNDAxLDcgQEAKIAl1MzIgaW5zbl9lbXVsYXRpb247CiAJdTMyIGluc25fZW11bGF0aW9uX2ZhaWw7CiAJdTMyIGh5cGVyY2FsbHM7CisJdTMyIGlycV9pbmplY3Rpb25zOwogfTsKIAogc3RydWN0IGRlc2NyaXB0b3JfdGFibGUgewpAQCAtNDE0LDggKzQ1Miw3IEBACiAJdW5zaWduZWQgbG9uZyAoKmdldF9kcikoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgZHIpOwogCXZvaWQgKCpzZXRfZHIpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IGRyLCB1bnNpZ25lZCBsb25nIHZhbHVlLAogCQkgICAgICAgaW50ICpleGNlcHRpb24pOwotCXZvaWQgKCpjYWNoZV9yZWdzKShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwotCXZvaWQgKCpkZWNhY2hlX3JlZ3MpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CisJdm9pZCAoKmNhY2hlX3JlZykoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBlbnVtIGt2bV9yZWcgcmVnKTsKIAl1bnNpZ25lZCBsb25nICgqZ2V0X3JmbGFncykoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKIAl2b2lkICgqc2V0X3JmbGFncykoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBsb25nIHJmbGFncyk7CiAKQEAgLTUyOCw2ICs1NjUsOCBAQAogdm9pZCBrdm1faW5qZWN0X3BhZ2VfZmF1bHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBsb25nIGNyMiwKIAkJCSAgIHUzMiBlcnJvcl9jb2RlKTsKIAordm9pZCBrdm1fcGljX3NldF9pcnEodm9pZCAqb3BhcXVlLCBpbnQgaXJxLCBpbnQgbGV2ZWwpOworCiB2b2lkIGt2bV9pbmplY3Rfbm1pKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CiAKIHZvaWQgZnhfaW5pdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwpAQCAtNTUwLDEyICs1ODksMTQgQEAKIHZvaWQgX19rdm1fbW11X2ZyZWVfc29tZV9wYWdlcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwogaW50IGt2bV9tbXVfbG9hZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwogdm9pZCBrdm1fbW11X3VubG9hZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwordm9pZCBrdm1fbW11X3N5bmNfcm9vdHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKIAogaW50IGt2bV9lbXVsYXRlX2h5cGVyY2FsbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwogCiBpbnQga3ZtX2ZpeF9oeXBlcmNhbGwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKIAogaW50IGt2bV9tbXVfcGFnZV9mYXVsdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGd2YV90IGd2YSwgdTMyIGVycm9yX2NvZGUpOwordm9pZCBrdm1fbW11X2ludmxwZyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGd2YV90IGd2YSk7CiAKIHZvaWQga3ZtX2VuYWJsZV90ZHAodm9pZCk7CiB2b2lkIGt2bV9kaXNhYmxlX3RkcCh2b2lkKTsKQEAgLTY4NiwzMyArNzI3LDYgQEAKIAlUQVNLX1NXSVRDSF9HQVRFID0gMywKIH07CiAKLSNkZWZpbmUgS1ZNVFJBQ0VfNUQoZXZ0LCB2Y3B1LCBkMSwgZDIsIGQzLCBkNCwgZDUsIG5hbWUpIFwKLQl0cmFjZV9tYXJrKGt2bV90cmFjZV8jI25hbWUsICIldSAlcCAldSAldSAldSAldSAldSAldSIsIEtWTV9UUkNfIyNldnQsIFwKLQkJCQkJCXZjcHUsIDUsIGQxLCBkMiwgZDMsIGQ0LCBkNSkKLSNkZWZpbmUgS1ZNVFJBQ0VfNEQoZXZ0LCB2Y3B1LCBkMSwgZDIsIGQzLCBkNCwgbmFtZSkgXAotCXRyYWNlX21hcmsoa3ZtX3RyYWNlXyMjbmFtZSwgIiV1ICVwICV1ICV1ICV1ICV1ICV1ICV1IiwgS1ZNX1RSQ18jI2V2dCwgXAotCQkJCQkJdmNwdSwgNCwgZDEsIGQyLCBkMywgZDQsIDApCi0jZGVmaW5lIEtWTVRSQUNFXzNEKGV2dCwgdmNwdSwgZDEsIGQyLCBkMywgbmFtZSkgXAotCXRyYWNlX21hcmsoa3ZtX3RyYWNlXyMjbmFtZSwgIiV1ICVwICV1ICV1ICV1ICV1ICV1ICV1IiwgS1ZNX1RSQ18jI2V2dCwgXAotCQkJCQkJdmNwdSwgMywgZDEsIGQyLCBkMywgMCwgMCkKLSNkZWZpbmUgS1ZNVFJBQ0VfMkQoZXZ0LCB2Y3B1LCBkMSwgZDIsIG5hbWUpIFwKLQl0cmFjZV9tYXJrKGt2bV90cmFjZV8jI25hbWUsICIldSAlcCAldSAldSAldSAldSAldSAldSIsIEtWTV9UUkNfIyNldnQsIFwKLQkJCQkJCXZjcHUsIDIsIGQxLCBkMiwgMCwgMCwgMCkKLSNkZWZpbmUgS1ZNVFJBQ0VfMUQoZXZ0LCB2Y3B1LCBkMSwgbmFtZSkgXAotCXRyYWNlX21hcmsoa3ZtX3RyYWNlXyMjbmFtZSwgIiV1ICVwICV1ICV1ICV1ICV1ICV1ICV1IiwgS1ZNX1RSQ18jI2V2dCwgXAotCQkJCQkJdmNwdSwgMSwgZDEsIDAsIDAsIDAsIDApCi0jZGVmaW5lIEtWTVRSQUNFXzBEKGV2dCwgdmNwdSwgbmFtZSkgXAotCXRyYWNlX21hcmsoa3ZtX3RyYWNlXyMjbmFtZSwgIiV1ICVwICV1ICV1ICV1ICV1ICV1ICV1IiwgS1ZNX1RSQ18jI2V2dCwgXAotCQkJCQkJdmNwdSwgMCwgMCwgMCwgMCwgMCwgMCkKLQotI2lmZGVmIENPTkZJR182NEJJVAotIyBkZWZpbmUgS1ZNX0VYX0VOVFJZICIucXVhZCIKLSMgZGVmaW5lIEtWTV9FWF9QVVNIICJwdXNocSIKLSNlbHNlCi0jIGRlZmluZSBLVk1fRVhfRU5UUlkgIi5sb25nIgotIyBkZWZpbmUgS1ZNX0VYX1BVU0ggInB1c2hsIgotI2VuZGlmCi0KIC8qCiAgKiBIYXJkd2FyZSB2aXJ0dWFsaXphdGlvbiBleHRlbnNpb24gaW5zdHJ1Y3Rpb25zIG1heSBmYXVsdCBpZiBhCiAgKiByZWJvb3QgdHVybnMgb2ZmIHZpcnR1YWxpemF0aW9uIHdoaWxlIHByb2Nlc3NlcyBhcmUgcnVubmluZy4KQEAgLTcyNCwxMSArNzM4LDExIEBACiAJIjY2NjogIiBpbnNuICJcblx0IiBcCiAJIi5wdXNoc2VjdGlvbiAuZml4dXAsIFwiYXhcIiBcbiIgXAogCSI2Njc6IFxuXHQiIFwKLQlLVk1fRVhfUFVTSCAiICQ2NjZiIFxuXHQiIFwKKwlfX0FTTV9TSVpFKHB1c2gpICIgJDY2NmIgXG5cdCIJICAgICAgXAogCSJqbXAga3ZtX2hhbmRsZV9mYXVsdF9vbl9yZWJvb3QgXG5cdCIgXAogCSIucG9wc2VjdGlvbiBcblx0IiBcCiAJIi5wdXNoc2VjdGlvbiBfX2V4X3RhYmxlLCBcImFcIiBcblx0IiBcCi0JS1ZNX0VYX0VOVFJZICIgNjY2YiwgNjY3YiBcblx0IiBcCisJX0FTTV9QVFIgIiA2NjZiLCA2NjdiIFxuXHQiIFwKIAkiLnBvcHNlY3Rpb24iCiAKICNkZWZpbmUgS1ZNX0FSQ0hfV0FOVF9NTVVfTk9USUZJRVIKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Ni9tYWNoLWRlZmF1bHQvZW50cnlfYXJjaC5oIGIvaW5jbHVkZS9hc20teDg2L21hY2gtZGVmYXVsdC9lbnRyeV9hcmNoLmgKaW5kZXggOTI4M2I2MC4uNmIxYWRkOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teDg2L21hY2gtZGVmYXVsdC9lbnRyeV9hcmNoLmgKKysrIGIvaW5jbHVkZS9hc20teDg2L21hY2gtZGVmYXVsdC9lbnRyeV9hcmNoLmgKQEAgLTE0LDYgKzE0LDcgQEAKIEJVSUxEX0lOVEVSUlVQVChpbnZhbGlkYXRlX2ludGVycnVwdCxJTlZBTElEQVRFX1RMQl9WRUNUT1IpCiBCVUlMRF9JTlRFUlJVUFQoY2FsbF9mdW5jdGlvbl9pbnRlcnJ1cHQsQ0FMTF9GVU5DVElPTl9WRUNUT1IpCiBCVUlMRF9JTlRFUlJVUFQoY2FsbF9mdW5jdGlvbl9zaW5nbGVfaW50ZXJydXB0LENBTExfRlVOQ1RJT05fU0lOR0xFX1ZFQ1RPUikKK0JVSUxEX0lOVEVSUlVQVChpcnFfbW92ZV9jbGVhbnVwX2ludGVycnVwdCxJUlFfTU9WRV9DTEVBTlVQX1ZFQ1RPUikKICNlbmRpZgogCiAvKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L21hY2gtZGVmYXVsdC9tYWNoX2FwaWMuaCBiL2luY2x1ZGUvYXNtLXg4Ni9tYWNoLWRlZmF1bHQvbWFjaF9hcGljLmgKaW5kZXggMmEzMzBhNC4uM2M2NmYyYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teDg2L21hY2gtZGVmYXVsdC9tYWNoX2FwaWMuaAorKysgYi9pbmNsdWRlL2FzbS14ODYvbWFjaC1kZWZhdWx0L21hY2hfYXBpYy5oCkBAIC04NSw2ICs4NSwyMCBAQAogCXJldHVybiAwOwogI2VuZGlmCiB9CisKK3N0YXRpYyBpbmxpbmUgY3B1bWFza190IHZlY3Rvcl9hbGxvY2F0aW9uX2RvbWFpbihpbnQgY3B1KQoreworICAgICAgICAvKiBDYXJlZnVsLiBTb21lIGNwdXMgZG8gbm90IHN0cmljdGx5IGhvbm9yIHRoZSBzZXQgb2YgY3B1cworICAgICAgICAgKiBzcGVjaWZpZWQgaW4gdGhlIGludGVycnVwdCBkZXN0aW5hdGlvbiB3aGVuIHVzaW5nIGxvd2VzdAorICAgICAgICAgKiBwcmlvcml0eSBpbnRlcnJ1cHQgZGVsaXZlcnkgbW9kZS4KKyAgICAgICAgICoKKyAgICAgICAgICogSW4gcGFydGljdWxhciB0aGVyZSB3YXMgYSBoeXBlcnRocmVhZGluZyBjcHUgb2JzZXJ2ZWQgdG8KKyAgICAgICAgICogZGVsaXZlciBpbnRlcnJ1cHRzIHRvIHRoZSB3cm9uZyBoeXBlcnRocmVhZCB3aGVuIG9ubHkgb25lCisgICAgICAgICAqIGh5cGVydGhyZWFkIHdhcyBzcGVjaWZpZWQgaW4gdGhlIGludGVycnVwdCBkZXNpdGluYXRpb24uCisgICAgICAgICAqLworICAgICAgICBjcHVtYXNrX3QgZG9tYWluID0geyB7IFswXSA9IEFQSUNfQUxMX0NQVVMsIH0gfTsKKyAgICAgICAgcmV0dXJuIGRvbWFpbjsKK30KICNlbmRpZgogCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgY2hlY2tfYXBpY2lkX3VzZWQocGh5c2lkX21hc2tfdCBiaXRtYXAsIGludCBhcGljaWQpCkBAIC0xMzgsNiArMTUyLDUgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCBlbmFibGVfYXBpY19tb2RlKHZvaWQpCiB7CiB9Ci0KICNlbmRpZiAvKiBDT05GSUdfWDg2X0xPQ0FMX0FQSUMgKi8KICNlbmRpZiAvKiBBU01fWDg2X19NQUNIX0RFRkFVTFRfX01BQ0hfQVBJQ19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODYvbWFjaC1kZWZhdWx0L21hY2hfdHJhcHMuaCBiL2luY2x1ZGUvYXNtLXg4Ni9tYWNoLWRlZmF1bHQvbWFjaF90cmFwcy5oCmluZGV4IGRlOWFjM2YuLmZmODc3OGYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXg4Ni9tYWNoLWRlZmF1bHQvbWFjaF90cmFwcy5oCisrKyBiL2luY2x1ZGUvYXNtLXg4Ni9tYWNoLWRlZmF1bHQvbWFjaF90cmFwcy5oCkBAIC03LDEyICs3LDYgQEAKIAogI2luY2x1ZGUgPGFzbS9tYzE0NjgxOHJ0Yy5oPgogCi1zdGF0aWMgaW5saW5lIHZvaWQgY2xlYXJfbWVtX2Vycm9yKHVuc2lnbmVkIGNoYXIgcmVhc29uKQotewotCXJlYXNvbiA9IChyZWFzb24gJiAweGYpIHwgNDsKLQlvdXRiKHJlYXNvbiwgMHg2MSk7Ci19Ci0KIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgY2hhciBnZXRfbm1pX3JlYXNvbih2b2lkKQogewogCXJldHVybiBpbmIoMHg2MSk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODYvbWFjaC1nZW5lcmljL2lycV92ZWN0b3JzX2xpbWl0cy5oIGIvaW5jbHVkZS9hc20teDg2L21hY2gtZ2VuZXJpYy9pcnFfdmVjdG9yc19saW1pdHMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjc4NzBlMS4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS14ODYvbWFjaC1nZW5lcmljL2lycV92ZWN0b3JzX2xpbWl0cy5oCisrKyAvZGV2L251bGwKQEAgLTEsMTQgKzAsMCBAQAotI2lmbmRlZiBBU01fWDg2X19NQUNIX0dFTkVSSUNfX0lSUV9WRUNUT1JTX0xJTUlUU19ICi0jZGVmaW5lIEFTTV9YODZfX01BQ0hfR0VORVJJQ19fSVJRX1ZFQ1RPUlNfTElNSVRTX0gKLQotLyoKLSAqIEZvciBTdW1taXQgb3IgZ2VuZXJpYyAoaS5lLiBpbnN0YWxsZXIpIGtlcm5lbHMsIHdlIGhhdmUgbG90cyBvZiBJL08gQVBJQ3MsCi0gKiBldmVuIHdpdGggdW5pLXByb2Mga2VybmVscywgc28gdXNlIGEgYmlnIGFycmF5LgotICoKLSAqIFRoaXMgdmFsdWUgc2hvdWxkIGJlIHRoZSBzYW1lIGluIGJvdGggdGhlIGdlbmVyaWMgYW5kIHN1bW1pdCBzdWJhcmNoZXMuCi0gKiBDaGFuZ2Ugb25lLCBjaGFuZ2UgJ2VtIGJvdGguCi0gKi8KLSNkZWZpbmUgTlJfSVJRUwkyMjQKLSNkZWZpbmUgTlJfSVJRX1ZFQ1RPUlMJMTAyNAotCi0jZW5kaWYgLyogQVNNX1g4Nl9fTUFDSF9HRU5FUklDX19JUlFfVkVDVE9SU19MSU1JVFNfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L21hY2gtZ2VuZXJpYy9tYWNoX2FwaWMuaCBiL2luY2x1ZGUvYXNtLXg4Ni9tYWNoLWdlbmVyaWMvbWFjaF9hcGljLmgKaW5kZXggNWQwMTBjNi4uNTA4NWI1MiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teDg2L21hY2gtZ2VuZXJpYy9tYWNoX2FwaWMuaAorKysgYi9pbmNsdWRlL2FzbS14ODYvbWFjaC1nZW5lcmljL21hY2hfYXBpYy5oCkBAIC0yNCw2ICsyNCw3IEBACiAjZGVmaW5lIGNoZWNrX3BoeXNfYXBpY2lkX3ByZXNlbnQgKGdlbmFwaWMtPmNoZWNrX3BoeXNfYXBpY2lkX3ByZXNlbnQpCiAjZGVmaW5lIGNoZWNrX2FwaWNpZF91c2VkIChnZW5hcGljLT5jaGVja19hcGljaWRfdXNlZCkKICNkZWZpbmUgY3B1X21hc2tfdG9fYXBpY2lkIChnZW5hcGljLT5jcHVfbWFza190b19hcGljaWQpCisjZGVmaW5lIHZlY3Rvcl9hbGxvY2F0aW9uX2RvbWFpbiAoZ2VuYXBpYy0+dmVjdG9yX2FsbG9jYXRpb25fZG9tYWluKQogI2RlZmluZSBlbmFibGVfYXBpY19tb2RlIChnZW5hcGljLT5lbmFibGVfYXBpY19tb2RlKQogI2RlZmluZSBwaHlzX3BrZ19pZCAoZ2VuYXBpYy0+cGh5c19wa2dfaWQpCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Ni9tb2R1bGUuaCBiL2luY2x1ZGUvYXNtLXg4Ni9tb2R1bGUuaAppbmRleCA0OGRjM2UwLi44NjRmMjAwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS14ODYvbW9kdWxlLmgKKysrIGIvaW5jbHVkZS9hc20teDg2L21vZHVsZS5oCkBAIC01Miw4ICs1Miw2IEBACiAjZGVmaW5lIE1PRFVMRV9QUk9DX0ZBTUlMWSAiRUZGSUNFT04gIgogI2VsaWYgZGVmaW5lZCBDT05GSUdfTVdJTkNISVBDNgogI2RlZmluZSBNT0RVTEVfUFJPQ19GQU1JTFkgIldJTkNISVBDNiAiCi0jZWxpZiBkZWZpbmVkIENPTkZJR19NV0lOQ0hJUDIKLSNkZWZpbmUgTU9EVUxFX1BST0NfRkFNSUxZICJXSU5DSElQMiAiCiAjZWxpZiBkZWZpbmVkIENPTkZJR19NV0lOQ0hJUDNECiAjZGVmaW5lIE1PRFVMRV9QUk9DX0ZBTUlMWSAiV0lOQ0hJUDNEICIKICNlbGlmIGRlZmluZWQgQ09ORklHX01DWVJJWElJSQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L21zci1pbmRleC5oIGIvaW5jbHVkZS9hc20teDg2L21zci1pbmRleC5oCmluZGV4IDBiYjQzMzAuLmRhYmQxMGYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXg4Ni9tc3ItaW5kZXguaAorKysgYi9pbmNsdWRlL2FzbS14ODYvbXNyLWluZGV4LmgKQEAgLTE3OCw2ICsxNzgsOSBAQAogI2RlZmluZSBNU1JfSUEzMl9FQkxfQ1JfUE9XRVJPTgkJMHgwMDAwMDAyYQogI2RlZmluZSBNU1JfSUEzMl9GRUFUVVJFX0NPTlRST0wgICAgICAgIDB4MDAwMDAwM2EKIAorI2RlZmluZSBGRUFUVVJFX0NPTlRST0xfTE9DS0VECQkoMTw8MCkKKyNkZWZpbmUgRkVBVFVSRV9DT05UUk9MX1ZNWE9OX0VOQUJMRUQJKDE8PDIpCisKICNkZWZpbmUgTVNSX0lBMzJfQVBJQ0JBU0UJCTB4MDAwMDAwMWIKICNkZWZpbmUgTVNSX0lBMzJfQVBJQ0JBU0VfQlNQCQkoMTw8OCkKICNkZWZpbmUgTVNSX0lBMzJfQVBJQ0JBU0VfRU5BQkxFCSgxPDwxMSkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Ni9ubWkuaCBiL2luY2x1ZGUvYXNtLXg4Ni9ubWkuaAppbmRleCBkNWU3MTVmLi5hNTNmODI5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS14ODYvbm1pLmgKKysrIGIvaW5jbHVkZS9hc20teDg2L25taS5oCkBAIC0xNSwxMCArMTUsNiBAQAogICovCiBpbnQgZG9fbm1pX2NhbGxiYWNrKHN0cnVjdCBwdF9yZWdzICpyZWdzLCBpbnQgY3B1KTsKIAotI2lmZGVmIENPTkZJR19YODZfNjQKLWV4dGVybiB2b2lkIGRlZmF1bHRfZG9fbm1pKHN0cnVjdCBwdF9yZWdzICopOwotI2VuZGlmCi0KIGV4dGVybiB2b2lkIGRpZV9ubWkoY2hhciAqc3RyLCBzdHJ1Y3QgcHRfcmVncyAqcmVncywgaW50IGRvX3BhbmljKTsKIGV4dGVybiBpbnQgY2hlY2tfbm1pX3dhdGNoZG9nKHZvaWQpOwogZXh0ZXJuIGludCBubWlfd2F0Y2hkb2dfZW5hYmxlZDsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Ni9udW1hcS9hcGljLmggYi9pbmNsdWRlL2FzbS14ODYvbnVtYXEvYXBpYy5oCmluZGV4IGE4MzQ0YmEuLjBiZjJhMDYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXg4Ni9udW1hcS9hcGljLmgKKysrIGIvaW5jbHVkZS9hc20teDg2L251bWFxL2FwaWMuaApAQCAtMTIsOCArMTIsNiBAQAogCXJldHVybiBDUFVfTUFTS19BTEw7CiB9CiAKLSNkZWZpbmUgVEFSR0VUX0NQVVMgKHRhcmdldF9jcHVzKCkpCi0KICNkZWZpbmUgTk9fQkFMQU5DRV9JUlEgKDEpCiAjZGVmaW5lIGVzcl9kaXNhYmxlICgxKQogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODYvcGFnZS5oIGIvaW5jbHVkZS9hc20teDg2L3BhZ2UuaAppbmRleCBjOTE1NzQ3Li5kNGYxZDU3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS14ODYvcGFnZS5oCisrKyBiL2luY2x1ZGUvYXNtLXg4Ni9wYWdlLmgKQEAgLTE3OSw2ICsxNzksNyBAQAogI2VuZGlmCS8qIENPTkZJR19QQVJBVklSVCAqLwogCiAjZGVmaW5lIF9fcGEoeCkJCV9fcGh5c19hZGRyKCh1bnNpZ25lZCBsb25nKSh4KSkKKyNkZWZpbmUgX19wYV9ub2RlYnVnKHgpCV9fcGh5c19hZGRyX25vZGVidWcoKHVuc2lnbmVkIGxvbmcpKHgpKQogLyogX19wYV9zeW1ib2wgc2hvdWxkIGJlIHVzZWQgZm9yIEMgdmlzaWJsZSBzeW1ib2xzLgogICAgVGhpcyBzZWVtcyB0byBiZSB0aGUgb2ZmaWNpYWwgZ2NjIGJsZXNzZWQgd2F5IHRvIGRvIHN1Y2ggYXJpdGhtZXRpYy4gKi8KICNkZWZpbmUgX19wYV9zeW1ib2woeCkJX19wYShfX3BoeXNfcmVsb2NfaGlkZSgodW5zaWduZWQgbG9uZykoeCkpKQpAQCAtMTg4LDkgKzE4OSwxNCBAQAogI2RlZmluZSBfX2Jvb3RfdmEoeCkJCV9fdmEoeCkKICNkZWZpbmUgX19ib290X3BhKHgpCQlfX3BhKHgpCiAKKy8qCisgKiB2aXJ0X3RvX3BhZ2Uoa2FkZHIpIHJldHVybnMgYSB2YWxpZCBwb2ludGVyIGlmIGFuZCBvbmx5IGlmCisgKiB2aXJ0X2FkZHJfdmFsaWQoa2FkZHIpIHJldHVybnMgdHJ1ZS4KKyAqLwogI2RlZmluZSB2aXJ0X3RvX3BhZ2Uoa2FkZHIpCXBmbl90b19wYWdlKF9fcGEoa2FkZHIpID4+IFBBR0VfU0hJRlQpCiAjZGVmaW5lIHBmbl90b19rYWRkcihwZm4pICAgICAgX192YSgocGZuKSA8PCBQQUdFX1NISUZUKQotI2RlZmluZSB2aXJ0X2FkZHJfdmFsaWQoa2FkZHIpCXBmbl92YWxpZChfX3BhKGthZGRyKSA+PiBQQUdFX1NISUZUKQorZXh0ZXJuIGJvb2wgX192aXJ0X2FkZHJfdmFsaWQodW5zaWduZWQgbG9uZyBrYWRkcik7CisjZGVmaW5lIHZpcnRfYWRkcl92YWxpZChrYWRkcikJX192aXJ0X2FkZHJfdmFsaWQoKHVuc2lnbmVkIGxvbmcpIChrYWRkcikpCiAKICNlbmRpZgkvKiBfX0FTU0VNQkxZX18gKi8KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L3BhZ2VfMzIuaCBiL2luY2x1ZGUvYXNtLXg4Ni9wYWdlXzMyLmgKaW5kZXggOWM1YTczNy4uYmRmNWRiYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teDg2L3BhZ2VfMzIuaAorKysgYi9pbmNsdWRlL2FzbS14ODYvcGFnZV8zMi5oCkBAIC0yMCw2ICsyMCwxMiBAQAogI2VuZGlmCiAjZGVmaW5lIFRIUkVBRF9TSVpFIAkoUEFHRV9TSVpFIDw8IFRIUkVBRF9PUkRFUikKIAorI2RlZmluZSBTVEFDS0ZBVUxUX1NUQUNLIDAKKyNkZWZpbmUgRE9VQkxFRkFVTFRfU1RBQ0sgMQorI2RlZmluZSBOTUlfU1RBQ0sgMAorI2RlZmluZSBERUJVR19TVEFDSyAwCisjZGVmaW5lIE1DRV9TVEFDSyAwCisjZGVmaW5lIE5fRVhDRVBUSU9OX1NUQUNLUyAxCiAKICNpZmRlZiBDT05GSUdfWDg2X1BBRQogLyogNDQ9MzIrMTIsIHRoZSBsaW1pdCB3ZSBjYW4gZml0IGludG8gYW4gdW5zaWduZWQgbG9uZyBwZm4gKi8KQEAgLTMzLDcgKzM5LDYgQEAKIHR5cGVkZWYgdTY0CXB1ZHZhbF90OwogdHlwZWRlZiB1NjQJcGdkdmFsX3Q7CiB0eXBlZGVmIHU2NAlwZ3Byb3R2YWxfdDsKLXR5cGVkZWYgdTY0CXBoeXNfYWRkcl90OwogCiB0eXBlZGVmIHVuaW9uIHsKIAlzdHJ1Y3QgewpAQCAtNTQsNyArNTksNiBAQAogdHlwZWRlZiB1bnNpZ25lZCBsb25nCXB1ZHZhbF90OwogdHlwZWRlZiB1bnNpZ25lZCBsb25nCXBnZHZhbF90OwogdHlwZWRlZiB1bnNpZ25lZCBsb25nCXBncHJvdHZhbF90OwotdHlwZWRlZiB1bnNpZ25lZCBsb25nCXBoeXNfYWRkcl90OwogCiB0eXBlZGVmIHVuaW9uIHsKIAlwdGV2YWxfdCBwdGU7CkBAIC03MywxMSArNzcsMTEgQEAKICNlbmRpZgogCiAjaWZuZGVmIF9fQVNTRU1CTFlfXwotI2RlZmluZSBfX3BoeXNfYWRkcl9jb25zdCh4KQkoKHgpIC0gUEFHRV9PRkZTRVQpCisjZGVmaW5lIF9fcGh5c19hZGRyX25vZGVidWcoeCkJKCh4KSAtIFBBR0VfT0ZGU0VUKQogI2lmZGVmIENPTkZJR19ERUJVR19WSVJUVUFMCiBleHRlcm4gdW5zaWduZWQgbG9uZyBfX3BoeXNfYWRkcih1bnNpZ25lZCBsb25nKTsKICNlbHNlCi0jZGVmaW5lIF9fcGh5c19hZGRyKHgpCQkoKHgpIC0gUEFHRV9PRkZTRVQpCisjZGVmaW5lIF9fcGh5c19hZGRyKHgpCQlfX3BoeXNfYWRkcl9ub2RlYnVnKHgpCiAjZW5kaWYKICNkZWZpbmUgX19waHlzX3JlbG9jX2hpZGUoeCkJUkVMT0NfSElERSgoeCksIDApCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Ni9wYWdlXzY0LmggYi9pbmNsdWRlL2FzbS14ODYvcGFnZV82NC5oCmluZGV4IDVlNjRhY2YuLjQ5MzgwYjggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXg4Ni9wYWdlXzY0LmgKKysrIGIvaW5jbHVkZS9hc20teDg2L3BhZ2VfNjQuaApAQCAtNzksNyArNzksNiBAQAogdHlwZWRlZiB1bnNpZ25lZCBsb25nCXB1ZHZhbF90OwogdHlwZWRlZiB1bnNpZ25lZCBsb25nCXBnZHZhbF90OwogdHlwZWRlZiB1bnNpZ25lZCBsb25nCXBncHJvdHZhbF90OwotdHlwZWRlZiB1bnNpZ25lZCBsb25nCXBoeXNfYWRkcl90OwogCiB0eXBlZGVmIHN0cnVjdCBwYWdlICpwZ3RhYmxlX3Q7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Ni9wZ3RhYmxlLmggYi9pbmNsdWRlL2FzbS14ODYvcGd0YWJsZS5oCmluZGV4IGU5ZjEwYWYuLjg4YTUzYjEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXg4Ni9wZ3RhYmxlLmgKKysrIGIvaW5jbHVkZS9hc20teDg2L3BndGFibGUuaApAQCAtMTUsNyArMTUsNyBAQAogI2RlZmluZSBfUEFHRV9CSVRfUEFUCQk3CS8qIG9uIDRLQiBwYWdlcyAqLwogI2RlZmluZSBfUEFHRV9CSVRfR0xPQkFMCTgJLyogR2xvYmFsIFRMQiBlbnRyeSBQUHJvKyAqLwogI2RlZmluZSBfUEFHRV9CSVRfVU5VU0VEMQk5CS8qIGF2YWlsYWJsZSBmb3IgcHJvZ3JhbW1lciAqLwotI2RlZmluZSBfUEFHRV9CSVRfVU5VU0VEMgkxMAorI2RlZmluZSBfUEFHRV9CSVRfSU9NQVAJCTEwCS8qIGZsYWcgdXNlZCB0byBpbmRpY2F0ZSBJTyBtYXBwaW5nICovCiAjZGVmaW5lIF9QQUdFX0JJVF9VTlVTRUQzCTExCiAjZGVmaW5lIF9QQUdFX0JJVF9QQVRfTEFSR0UJMTIJLyogT24gMk1CIG9yIDFHQiBwYWdlcyAqLwogI2RlZmluZSBfUEFHRV9CSVRfU1BFQ0lBTAlfUEFHRV9CSVRfVU5VU0VEMQpAQCAtMzIsNyArMzIsNyBAQAogI2RlZmluZSBfUEFHRV9QU0UJKF9BVChwdGV2YWxfdCwgMSkgPDwgX1BBR0VfQklUX1BTRSkKICNkZWZpbmUgX1BBR0VfR0xPQkFMCShfQVQocHRldmFsX3QsIDEpIDw8IF9QQUdFX0JJVF9HTE9CQUwpCiAjZGVmaW5lIF9QQUdFX1VOVVNFRDEJKF9BVChwdGV2YWxfdCwgMSkgPDwgX1BBR0VfQklUX1VOVVNFRDEpCi0jZGVmaW5lIF9QQUdFX1VOVVNFRDIJKF9BVChwdGV2YWxfdCwgMSkgPDwgX1BBR0VfQklUX1VOVVNFRDIpCisjZGVmaW5lIF9QQUdFX0lPTUFQCShfQVQocHRldmFsX3QsIDEpIDw8IF9QQUdFX0JJVF9JT01BUCkKICNkZWZpbmUgX1BBR0VfVU5VU0VEMwkoX0FUKHB0ZXZhbF90LCAxKSA8PCBfUEFHRV9CSVRfVU5VU0VEMykKICNkZWZpbmUgX1BBR0VfUEFUCShfQVQocHRldmFsX3QsIDEpIDw8IF9QQUdFX0JJVF9QQVQpCiAjZGVmaW5lIF9QQUdFX1BBVF9MQVJHRSAoX0FUKHB0ZXZhbF90LCAxKSA8PCBfUEFHRV9CSVRfUEFUX0xBUkdFKQpAQCAtOTksNiArOTksMTEgQEAKICNkZWZpbmUgX19QQUdFX0tFUk5FTF9MQVJHRV9OT0NBQ0hFCShfX1BBR0VfS0VSTkVMIHwgX1BBR0VfQ0FDSEVfVUMgfCBfUEFHRV9QU0UpCiAjZGVmaW5lIF9fUEFHRV9LRVJORUxfTEFSR0VfRVhFQwkoX19QQUdFX0tFUk5FTF9FWEVDIHwgX1BBR0VfUFNFKQogCisjZGVmaW5lIF9fUEFHRV9LRVJORUxfSU8JCShfX1BBR0VfS0VSTkVMIHwgX1BBR0VfSU9NQVApCisjZGVmaW5lIF9fUEFHRV9LRVJORUxfSU9fTk9DQUNIRQkoX19QQUdFX0tFUk5FTF9OT0NBQ0hFIHwgX1BBR0VfSU9NQVApCisjZGVmaW5lIF9fUEFHRV9LRVJORUxfSU9fVUNfTUlOVVMJKF9fUEFHRV9LRVJORUxfVUNfTUlOVVMgfCBfUEFHRV9JT01BUCkKKyNkZWZpbmUgX19QQUdFX0tFUk5FTF9JT19XQwkJKF9fUEFHRV9LRVJORUxfV0MgfCBfUEFHRV9JT01BUCkKKwogI2RlZmluZSBQQUdFX0tFUk5FTAkJCV9fcGdwcm90KF9fUEFHRV9LRVJORUwpCiAjZGVmaW5lIFBBR0VfS0VSTkVMX1JPCQkJX19wZ3Byb3QoX19QQUdFX0tFUk5FTF9STykKICNkZWZpbmUgUEFHRV9LRVJORUxfRVhFQwkJX19wZ3Byb3QoX19QQUdFX0tFUk5FTF9FWEVDKQpAQCAtMTEzLDYgKzExOCwxMSBAQAogI2RlZmluZSBQQUdFX0tFUk5FTF9WU1lTQ0FMTAkJX19wZ3Byb3QoX19QQUdFX0tFUk5FTF9WU1lTQ0FMTCkKICNkZWZpbmUgUEFHRV9LRVJORUxfVlNZU0NBTExfTk9DQUNIRQlfX3BncHJvdChfX1BBR0VfS0VSTkVMX1ZTWVNDQUxMX05PQ0FDSEUpCiAKKyNkZWZpbmUgUEFHRV9LRVJORUxfSU8JCQlfX3BncHJvdChfX1BBR0VfS0VSTkVMX0lPKQorI2RlZmluZSBQQUdFX0tFUk5FTF9JT19OT0NBQ0hFCQlfX3BncHJvdChfX1BBR0VfS0VSTkVMX0lPX05PQ0FDSEUpCisjZGVmaW5lIFBBR0VfS0VSTkVMX0lPX1VDX01JTlVTCQlfX3BncHJvdChfX1BBR0VfS0VSTkVMX0lPX1VDX01JTlVTKQorI2RlZmluZSBQQUdFX0tFUk5FTF9JT19XQwkJX19wZ3Byb3QoX19QQUdFX0tFUk5FTF9JT19XQykKKwogLyogICAgICAgICB4d3IgKi8KICNkZWZpbmUgX19QMDAwCVBBR0VfTk9ORQogI2RlZmluZSBfX1AwMDEJUEFHRV9SRUFET05MWQpAQCAtMjAxLDcgKzIxMSw3IEBACiAKIHN0YXRpYyBpbmxpbmUgaW50IHB0ZV9zcGVjaWFsKHB0ZV90IHB0ZSkKIHsKLQlyZXR1cm4gcHRlX3ZhbChwdGUpICYgX1BBR0VfU1BFQ0lBTDsKKwlyZXR1cm4gcHRlX2ZsYWdzKHB0ZSkgJiBfUEFHRV9TUEVDSUFMOwogfQogCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgcHRlX3BmbihwdGVfdCBwdGUpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODYvcHRyYWNlLmggYi9pbmNsdWRlL2FzbS14ODYvcHRyYWNlLmgKaW5kZXggYWM1NzhmMS4uYTIwMjU1MiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teDg2L3B0cmFjZS5oCisrKyBiL2luY2x1ZGUvYXNtLXg4Ni9wdHJhY2UuaApAQCAtMTc0LDEyICsxNzQsOCBAQAogCiBleHRlcm4gdW5zaWduZWQgbG9uZwogY29udmVydF9pcF90b19saW5lYXIoc3RydWN0IHRhc2tfc3RydWN0ICpjaGlsZCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOwotCi0jaWZkZWYgQ09ORklHX1g4Nl8zMgogZXh0ZXJuIHZvaWQgc2VuZF9zaWd0cmFwKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCBzdHJ1Y3QgcHRfcmVncyAqcmVncywKIAkJCSBpbnQgZXJyb3JfY29kZSwgaW50IHNpX2NvZGUpOwotI2VuZGlmCi0KIHZvaWQgc2lnbmFsX2ZhdWx0KHN0cnVjdCBwdF9yZWdzICpyZWdzLCB2b2lkIF9fdXNlciAqZnJhbWUsIGNoYXIgKndoZXJlKTsKIAogZXh0ZXJuIGxvbmcgc3lzY2FsbF90cmFjZV9lbnRlcihzdHJ1Y3QgcHRfcmVncyAqKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Ni9wdmNsb2NrLmggYi9pbmNsdWRlL2FzbS14ODYvcHZjbG9jay5oCmluZGV4IDFhMzhmNjguLmFkMjllMjcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXg4Ni9wdmNsb2NrLmgKKysrIGIvaW5jbHVkZS9hc20teDg2L3B2Y2xvY2suaApAQCAtNiw2ICs2LDcgQEAKIAogLyogc29tZSBoZWxwZXIgZnVuY3Rpb25zIGZvciB4ZW4gYW5kIGt2bSBwdiBjbG9jayBzb3VyY2VzICovCiBjeWNsZV90IHB2Y2xvY2tfY2xvY2tzb3VyY2VfcmVhZChzdHJ1Y3QgcHZjbG9ja192Y3B1X3RpbWVfaW5mbyAqc3JjKTsKK3Vuc2lnbmVkIGxvbmcgcHZjbG9ja190c2Nfa2h6KHN0cnVjdCBwdmNsb2NrX3ZjcHVfdGltZV9pbmZvICpzcmMpOwogdm9pZCBwdmNsb2NrX3JlYWRfd2FsbGNsb2NrKHN0cnVjdCBwdmNsb2NrX3dhbGxfY2xvY2sgKndhbGwsCiAJCQkgICAgc3RydWN0IHB2Y2xvY2tfdmNwdV90aW1lX2luZm8gKnZjcHUsCiAJCQkgICAgc3RydWN0IHRpbWVzcGVjICp0cyk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODYvc2VnbWVudC5oIGIvaW5jbHVkZS9hc20teDg2L3NlZ21lbnQuaAppbmRleCBlYTVmMGE4Li41ZDZlNjk0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS14ODYvc2VnbWVudC5oCisrKyBiL2luY2x1ZGUvYXNtLXg4Ni9zZWdtZW50LmgKQEAgLTEzMSwxMiArMTMxLDYgQEAKICAqIE1hdGNoaW5nIHJ1bGVzIGZvciBjZXJ0YWluIHR5cGVzIG9mIHNlZ21lbnRzLgogICovCiAKLS8qIE1hdGNoZXMgb25seSBfX0tFUk5FTF9DUywgaWdub3JpbmcgUG5QIC8gVVNFUiAvIEFQTSBzZWdtZW50cyAqLwotI2RlZmluZSBTRUdNRU5UX0lTX0tFUk5FTF9DT0RFKHgpICgoKHgpICYgMHhmYykgPT0gR0RUX0VOVFJZX0tFUk5FTF9DUyAqIDgpCi0KLS8qIE1hdGNoZXMgX19LRVJORUxfQ1MgYW5kIF9fVVNFUl9DUyAodGhleSBtdXN0IGJlIDIgZW50cmllcyBhcGFydCkgKi8KLSNkZWZpbmUgU0VHTUVOVF9JU19GTEFUX0NPREUoeCkgICgoKHgpICYgMHhlYykgPT0gR0RUX0VOVFJZX0tFUk5FTF9DUyAqIDgpCi0KIC8qIE1hdGNoZXMgUE5QX0NTMzIgYW5kIFBOUF9DUzE2ICh0aGV5IG11c3QgYmUgY29uc2VjdXRpdmUpICovCiAjZGVmaW5lIFNFR01FTlRfSVNfUE5QX0NPREUoeCkgICAoKCh4KSAmIDB4ZjQpID09IEdEVF9FTlRSWV9QTlBCSU9TX0JBU0UgKiA4KQogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODYvc21wLmggYi9pbmNsdWRlL2FzbS14ODYvc21wLmgKaW5kZXggNmRmMjYxNS4uYTZhZmMyOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teDg2L3NtcC5oCisrKyBiL2luY2x1ZGUvYXNtLXg4Ni9zbXAuaApAQCAtMTQxLDYgKzE0MSw4IEBACiB2b2lkIG5hdGl2ZV9zZW5kX2NhbGxfZnVuY19pcGkoY3B1bWFza190IG1hc2spOwogdm9pZCBuYXRpdmVfc2VuZF9jYWxsX2Z1bmNfc2luZ2xlX2lwaShpbnQgY3B1KTsKIAorZXh0ZXJuIHZvaWQgcHJlZmlsbF9wb3NzaWJsZV9tYXAodm9pZCk7CisKIHZvaWQgc21wX3N0b3JlX2NwdV9pbmZvKGludCBpZCk7CiAjZGVmaW5lIGNwdV9waHlzaWNhbF9pZChjcHUpCXBlcl9jcHUoeDg2X2NwdV90b19hcGljaWQsIGNwdSkKIApAQCAtMTQ5LDE1ICsxNTEsMTEgQEAKIHsKIAlyZXR1cm4gY3B1c193ZWlnaHQoY3B1X2NhbGxvdXRfbWFwKTsKIH0KLSNlbmRpZiAvKiBDT05GSUdfU01QICovCi0KLSNpZiBkZWZpbmVkKENPTkZJR19TTVApICYmIGRlZmluZWQoQ09ORklHX0hPVFBMVUdfQ1BVKQotZXh0ZXJuIHZvaWQgcHJlZmlsbF9wb3NzaWJsZV9tYXAodm9pZCk7CiAjZWxzZQogc3RhdGljIGlubGluZSB2b2lkIHByZWZpbGxfcG9zc2libGVfbWFwKHZvaWQpCiB7CiB9Ci0jZW5kaWYKKyNlbmRpZiAvKiBDT05GSUdfU01QICovCiAKIGV4dGVybiB1bnNpZ25lZCBkaXNhYmxlZF9jcHVzIF9fY3B1aW5pdGRhdGE7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Ni9zdGF0ZnMuaCBiL2luY2x1ZGUvYXNtLXg4Ni9zdGF0ZnMuaAppbmRleCAzZjAwNWJjLi5jYTVkYzE5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS14ODYvc3RhdGZzLmgKKysrIGIvaW5jbHVkZS9hc20teDg2L3N0YXRmcy5oCkBAIC0xLDYzICsxLDEyIEBACiAjaWZuZGVmIEFTTV9YODZfX1NUQVRGU19ICiAjZGVmaW5lIEFTTV9YODZfX1NUQVRGU19ICiAKLSNpZmRlZiBfX2kzODZfXwotI2luY2x1ZGUgPGFzbS1nZW5lcmljL3N0YXRmcy5oPgotI2Vsc2UKLQotI2lmbmRlZiBfX0tFUk5FTF9TVFJJQ1RfTkFNRVMKLQotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0KLXR5cGVkZWYgX19rZXJuZWxfZnNpZF90CWZzaWRfdDsKLQotI2VuZGlmCi0KIC8qCi0gKiBUaGlzIGlzIHVnbHkgLS0gd2UncmUgYWxyZWFkeSA2NC1iaXQgY2xlYW4sIHNvIGp1c3QgZHVwbGljYXRlIHRoZQotICogZGVmaW5pdGlvbnMuCisgKiBXZSBuZWVkIGNvbXBhdF9zdGF0ZnM2NCB0byBiZSBwYWNrZWQsIGJlY2F1c2UgdGhlIGkzODYgQUJJIHdvbid0CisgKiBhZGQgcGFkZGluZyBhdCB0aGUgZW5kIHRvIGJyaW5nIGl0IHRvIGEgbXVsdGlwbGUgb2YgOCBieXRlcywgYnV0CisgKiB0aGUgeDg2XzY0IEFCSSB3aWxsLgogICovCi1zdHJ1Y3Qgc3RhdGZzIHsKLQlsb25nIGZfdHlwZTsKLQlsb25nIGZfYnNpemU7Ci0JbG9uZyBmX2Jsb2NrczsKLQlsb25nIGZfYmZyZWU7Ci0JbG9uZyBmX2JhdmFpbDsKLQlsb25nIGZfZmlsZXM7Ci0JbG9uZyBmX2ZmcmVlOwotCV9fa2VybmVsX2ZzaWRfdCBmX2ZzaWQ7Ci0JbG9uZyBmX25hbWVsZW47Ci0JbG9uZyBmX2Zyc2l6ZTsKLQlsb25nIGZfc3BhcmVbNV07Ci19OworI2RlZmluZSBBUkNIX1BBQ0tfQ09NUEFUX1NUQVRGUzY0IF9fYXR0cmlidXRlX18oKHBhY2tlZCxhbGlnbmVkKDQpKSkKIAotc3RydWN0IHN0YXRmczY0IHsKLQlsb25nIGZfdHlwZTsKLQlsb25nIGZfYnNpemU7Ci0JbG9uZyBmX2Jsb2NrczsKLQlsb25nIGZfYmZyZWU7Ci0JbG9uZyBmX2JhdmFpbDsKLQlsb25nIGZfZmlsZXM7Ci0JbG9uZyBmX2ZmcmVlOwotCV9fa2VybmVsX2ZzaWRfdCBmX2ZzaWQ7Ci0JbG9uZyBmX25hbWVsZW47Ci0JbG9uZyBmX2Zyc2l6ZTsKLQlsb25nIGZfc3BhcmVbNV07Ci19OwotCi1zdHJ1Y3QgY29tcGF0X3N0YXRmczY0IHsKLQlfX3UzMiBmX3R5cGU7Ci0JX191MzIgZl9ic2l6ZTsKLQlfX3U2NCBmX2Jsb2NrczsKLQlfX3U2NCBmX2JmcmVlOwotCV9fdTY0IGZfYmF2YWlsOwotCV9fdTY0IGZfZmlsZXM7Ci0JX191NjQgZl9mZnJlZTsKLQlfX2tlcm5lbF9mc2lkX3QgZl9mc2lkOwotCV9fdTMyIGZfbmFtZWxlbjsKLQlfX3UzMiBmX2Zyc2l6ZTsKLQlfX3UzMiBmX3NwYXJlWzVdOwotfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKLQotI2VuZGlmIC8qICFfX2kzODZfXyAqLworI2luY2x1ZGUgPGFzbS1nZW5lcmljL3N0YXRmcy5oPgogI2VuZGlmIC8qIEFTTV9YODZfX1NUQVRGU19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODYvc3VtbWl0L2FwaWMuaCBiL2luY2x1ZGUvYXNtLXg4Ni9zdW1taXQvYXBpYy5oCmluZGV4IGM1YjJlNGIuLjliMzA3MGYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXg4Ni9zdW1taXQvYXBpYy5oCisrKyBiL2luY2x1ZGUvYXNtLXg4Ni9zdW1taXQvYXBpYy5oCkBAIC0yMiw3ICsyMiw2IEBACiAJICovCiAJcmV0dXJuIGNwdW1hc2tfb2ZfY3B1KDApOwogfQotI2RlZmluZSBUQVJHRVRfQ1BVUwkodGFyZ2V0X2NwdXMoKSkKIAogI2RlZmluZSBJTlRfREVMSVZFUllfTU9ERSAoZGVzdF9Mb3dlc3RQcmlvKQogI2RlZmluZSBJTlRfREVTVF9NT0RFIDEgICAgIC8qIGxvZ2ljYWwgZGVsaXZlcnkgYnJvYWRjYXN0IHRvIGFsbCBwcm9jcyAqLwpAQCAtMTYwLDcgKzE1OSw3IEBACiAJCQlpbnQgbmV3X2FwaWNpZCA9IGNwdV90b19sb2dpY2FsX2FwaWNpZChjcHUpOwogCQkJaWYgKGFwaWNpZF9jbHVzdGVyKGFwaWNpZCkgIT0KIAkJCQkJYXBpY2lkX2NsdXN0ZXIobmV3X2FwaWNpZCkpewotCQkJCXByaW50ayAoIiVzOiBOb3QgYSB2YWxpZCBtYXNrIVxuIixfX0ZVTkNUSU9OX18pOworCQkJCXByaW50ayAoIiVzOiBOb3QgYSB2YWxpZCBtYXNrIVxuIiwgX19mdW5jX18pOwogCQkJCXJldHVybiAweEZGOwogCQkJfQogCQkJYXBpY2lkID0gYXBpY2lkIHwgbmV3X2FwaWNpZDsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Ni9zdW1taXQvaXJxX3ZlY3RvcnNfbGltaXRzLmggYi9pbmNsdWRlL2FzbS14ODYvc3VtbWl0L2lycV92ZWN0b3JzX2xpbWl0cy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4OTBjZTNmLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLXg4Ni9zdW1taXQvaXJxX3ZlY3RvcnNfbGltaXRzLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNCArMCwwIEBACi0jaWZuZGVmIF9BU01fSVJRX1ZFQ1RPUlNfTElNSVRTX0gKLSNkZWZpbmUgX0FTTV9JUlFfVkVDVE9SU19MSU1JVFNfSAotCi0vKgotICogRm9yIFN1bW1pdCBvciBnZW5lcmljIChpLmUuIGluc3RhbGxlcikga2VybmVscywgd2UgaGF2ZSBsb3RzIG9mIEkvTyBBUElDcywKLSAqIGV2ZW4gd2l0aCB1bmktcHJvYyBrZXJuZWxzLCBzbyB1c2UgYSBiaWcgYXJyYXkuCi0gKgotICogVGhpcyB2YWx1ZSBzaG91bGQgYmUgdGhlIHNhbWUgaW4gYm90aCB0aGUgZ2VuZXJpYyBhbmQgc3VtbWl0IHN1YmFyY2hlcy4KLSAqIENoYW5nZSBvbmUsIGNoYW5nZSAnZW0gYm90aC4KLSAqLwotI2RlZmluZSBOUl9JUlFTCTIyNAotI2RlZmluZSBOUl9JUlFfVkVDVE9SUwkxMDI0Ci0KLSNlbmRpZiAvKiBfQVNNX0lSUV9WRUNUT1JTX0xJTUlUU19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODYvc3lzdGVtLmggYi9pbmNsdWRlL2FzbS14ODYvc3lzdGVtLmgKaW5kZXggMzQ1MDVkZC4uYjIwYzg5NCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teDg2L3N5c3RlbS5oCisrKyBiL2luY2x1ZGUvYXNtLXg4Ni9zeXN0ZW0uaApAQCAtNjQsNyArNjQsMTAgQEAKIAkJICAgICAgIAkJCQkJCQlcCiAJCSAgICAgICAvKiByZWdwYXJtIHBhcmFtZXRlcnMgZm9yIF9fc3dpdGNoX3RvKCk6ICovCVwKIAkJICAgICAgIFtwcmV2XSAgICAgImEiIChwcmV2KSwJCQkJXAotCQkgICAgICAgW25leHRdICAgICAiZCIgKG5leHQpKTsJCQkJXAorCQkgICAgICAgW25leHRdICAgICAiZCIgKG5leHQpCQkJCVwKKwkJCQkJCQkJCVwKKwkJICAgICA6IC8qIHJlbG9hZGVkIHNlZ21lbnQgcmVnaXN0ZXJzICovCQkJXAorCQkJIm1lbW9yeSIpOwkJCQkJXAogfSB3aGlsZSAoMCkKIAogLyoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Ni90cmFwcy5oIGIvaW5jbHVkZS9hc20teDg2L3RyYXBzLmgKaW5kZXggN2E2OTJiYS4uNmMzZGMyYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teDg2L3RyYXBzLmgKKysrIGIvaW5jbHVkZS9hc20teDg2L3RyYXBzLmgKQEAgLTMsNyArMywxMiBAQAogCiAjaW5jbHVkZSA8YXNtL2RlYnVncmVnLmg+CiAKLS8qIENvbW1vbiBpbiBYODZfMzIgYW5kIFg4Nl82NCAqLworI2lmZGVmIENPTkZJR19YODZfMzIKKyNkZWZpbmUgZG90cmFwbGlua2FnZQorI2Vsc2UKKyNkZWZpbmUgZG90cmFwbGlua2FnZSBhc21saW5rYWdlCisjZW5kaWYKKwogYXNtbGlua2FnZSB2b2lkIGRpdmlkZV9lcnJvcih2b2lkKTsKIGFzbWxpbmthZ2Ugdm9pZCBkZWJ1Zyh2b2lkKTsKIGFzbWxpbmthZ2Ugdm9pZCBubWkodm9pZCk7CkBAIC0xMiwzMSArMTcsNDcgQEAKIGFzbWxpbmthZ2Ugdm9pZCBib3VuZHModm9pZCk7CiBhc21saW5rYWdlIHZvaWQgaW52YWxpZF9vcCh2b2lkKTsKIGFzbWxpbmthZ2Ugdm9pZCBkZXZpY2Vfbm90X2F2YWlsYWJsZSh2b2lkKTsKKyNpZmRlZiBDT05GSUdfWDg2XzY0Cithc21saW5rYWdlIHZvaWQgZG91YmxlX2ZhdWx0KHZvaWQpOworI2VuZGlmCiBhc21saW5rYWdlIHZvaWQgY29wcm9jZXNzb3Jfc2VnbWVudF9vdmVycnVuKHZvaWQpOwogYXNtbGlua2FnZSB2b2lkIGludmFsaWRfVFNTKHZvaWQpOwogYXNtbGlua2FnZSB2b2lkIHNlZ21lbnRfbm90X3ByZXNlbnQodm9pZCk7CiBhc21saW5rYWdlIHZvaWQgc3RhY2tfc2VnbWVudCh2b2lkKTsKIGFzbWxpbmthZ2Ugdm9pZCBnZW5lcmFsX3Byb3RlY3Rpb24odm9pZCk7CiBhc21saW5rYWdlIHZvaWQgcGFnZV9mYXVsdCh2b2lkKTsKLWFzbWxpbmthZ2Ugdm9pZCBjb3Byb2Nlc3Nvcl9lcnJvcih2b2lkKTsKLWFzbWxpbmthZ2Ugdm9pZCBzaW1kX2NvcHJvY2Vzc29yX2Vycm9yKHZvaWQpOwotYXNtbGlua2FnZSB2b2lkIGFsaWdubWVudF9jaGVjayh2b2lkKTsKIGFzbWxpbmthZ2Ugdm9pZCBzcHVyaW91c19pbnRlcnJ1cHRfYnVnKHZvaWQpOworYXNtbGlua2FnZSB2b2lkIGNvcHJvY2Vzc29yX2Vycm9yKHZvaWQpOworYXNtbGlua2FnZSB2b2lkIGFsaWdubWVudF9jaGVjayh2b2lkKTsKICNpZmRlZiBDT05GSUdfWDg2X01DRQogYXNtbGlua2FnZSB2b2lkIG1hY2hpbmVfY2hlY2sodm9pZCk7CiAjZW5kaWYgLyogQ09ORklHX1g4Nl9NQ0UgKi8KK2FzbWxpbmthZ2Ugdm9pZCBzaW1kX2NvcHJvY2Vzc29yX2Vycm9yKHZvaWQpOwogCi12b2lkIGRvX2RpdmlkZV9lcnJvcihzdHJ1Y3QgcHRfcmVncyAqLCBsb25nKTsKLXZvaWQgZG9fb3ZlcmZsb3coc3RydWN0IHB0X3JlZ3MgKiwgbG9uZyk7Ci12b2lkIGRvX2JvdW5kcyhzdHJ1Y3QgcHRfcmVncyAqLCBsb25nKTsKLXZvaWQgZG9fY29wcm9jZXNzb3Jfc2VnbWVudF9vdmVycnVuKHN0cnVjdCBwdF9yZWdzICosIGxvbmcpOwotdm9pZCBkb19pbnZhbGlkX1RTUyhzdHJ1Y3QgcHRfcmVncyAqLCBsb25nKTsKLXZvaWQgZG9fc2VnbWVudF9ub3RfcHJlc2VudChzdHJ1Y3QgcHRfcmVncyAqLCBsb25nKTsKLXZvaWQgZG9fc3RhY2tfc2VnbWVudChzdHJ1Y3QgcHRfcmVncyAqLCBsb25nKTsKLXZvaWQgZG9fYWxpZ25tZW50X2NoZWNrKHN0cnVjdCBwdF9yZWdzICosIGxvbmcpOwotdm9pZCBkb19pbnZhbGlkX29wKHN0cnVjdCBwdF9yZWdzICosIGxvbmcpOwotdm9pZCBkb19nZW5lcmFsX3Byb3RlY3Rpb24oc3RydWN0IHB0X3JlZ3MgKiwgbG9uZyk7Ci12b2lkIGRvX25taShzdHJ1Y3QgcHRfcmVncyAqLCBsb25nKTsKK2RvdHJhcGxpbmthZ2Ugdm9pZCBkb19kaXZpZGVfZXJyb3Ioc3RydWN0IHB0X3JlZ3MgKiwgbG9uZyk7Citkb3RyYXBsaW5rYWdlIHZvaWQgZG9fZGVidWcoc3RydWN0IHB0X3JlZ3MgKiwgbG9uZyk7Citkb3RyYXBsaW5rYWdlIHZvaWQgZG9fbm1pKHN0cnVjdCBwdF9yZWdzICosIGxvbmcpOworZG90cmFwbGlua2FnZSB2b2lkIGRvX2ludDMoc3RydWN0IHB0X3JlZ3MgKiwgbG9uZyk7Citkb3RyYXBsaW5rYWdlIHZvaWQgZG9fb3ZlcmZsb3coc3RydWN0IHB0X3JlZ3MgKiwgbG9uZyk7Citkb3RyYXBsaW5rYWdlIHZvaWQgZG9fYm91bmRzKHN0cnVjdCBwdF9yZWdzICosIGxvbmcpOworZG90cmFwbGlua2FnZSB2b2lkIGRvX2ludmFsaWRfb3Aoc3RydWN0IHB0X3JlZ3MgKiwgbG9uZyk7Citkb3RyYXBsaW5rYWdlIHZvaWQgZG9fZGV2aWNlX25vdF9hdmFpbGFibGUoc3RydWN0IHB0X3JlZ3MgKiwgbG9uZyk7Citkb3RyYXBsaW5rYWdlIHZvaWQgZG9fY29wcm9jZXNzb3Jfc2VnbWVudF9vdmVycnVuKHN0cnVjdCBwdF9yZWdzICosIGxvbmcpOworZG90cmFwbGlua2FnZSB2b2lkIGRvX2ludmFsaWRfVFNTKHN0cnVjdCBwdF9yZWdzICosIGxvbmcpOworZG90cmFwbGlua2FnZSB2b2lkIGRvX3NlZ21lbnRfbm90X3ByZXNlbnQoc3RydWN0IHB0X3JlZ3MgKiwgbG9uZyk7Citkb3RyYXBsaW5rYWdlIHZvaWQgZG9fc3RhY2tfc2VnbWVudChzdHJ1Y3QgcHRfcmVncyAqLCBsb25nKTsKK2RvdHJhcGxpbmthZ2Ugdm9pZCBkb19nZW5lcmFsX3Byb3RlY3Rpb24oc3RydWN0IHB0X3JlZ3MgKiwgbG9uZyk7Citkb3RyYXBsaW5rYWdlIHZvaWQgZG9fcGFnZV9mYXVsdChzdHJ1Y3QgcHRfcmVncyAqLCB1bnNpZ25lZCBsb25nKTsKK2RvdHJhcGxpbmthZ2Ugdm9pZCBkb19zcHVyaW91c19pbnRlcnJ1cHRfYnVnKHN0cnVjdCBwdF9yZWdzICosIGxvbmcpOworZG90cmFwbGlua2FnZSB2b2lkIGRvX2NvcHJvY2Vzc29yX2Vycm9yKHN0cnVjdCBwdF9yZWdzICosIGxvbmcpOworZG90cmFwbGlua2FnZSB2b2lkIGRvX2FsaWdubWVudF9jaGVjayhzdHJ1Y3QgcHRfcmVncyAqLCBsb25nKTsKKyNpZmRlZiBDT05GSUdfWDg2X01DRQorZG90cmFwbGlua2FnZSB2b2lkIGRvX21hY2hpbmVfY2hlY2soc3RydWN0IHB0X3JlZ3MgKiwgbG9uZyk7CisjZW5kaWYKK2RvdHJhcGxpbmthZ2Ugdm9pZCBkb19zaW1kX2NvcHJvY2Vzc29yX2Vycm9yKHN0cnVjdCBwdF9yZWdzICosIGxvbmcpOworI2lmZGVmIENPTkZJR19YODZfMzIKK2RvdHJhcGxpbmthZ2Ugdm9pZCBkb19pcmV0X2Vycm9yKHN0cnVjdCBwdF9yZWdzICosIGxvbmcpOworI2VuZGlmCiAKIHN0YXRpYyBpbmxpbmUgaW50IGdldF9zaV9jb2RlKHVuc2lnbmVkIGxvbmcgY29uZGl0aW9uKQogewpAQCAtNTIsMzEgKzczLDkgQEAKIGV4dGVybiBpbnQga3N0YWNrX2RlcHRoX3RvX3ByaW50OwogCiAjaWZkZWYgQ09ORklHX1g4Nl8zMgotCi12b2lkIGRvX2lyZXRfZXJyb3Ioc3RydWN0IHB0X3JlZ3MgKiwgbG9uZyk7Ci12b2lkIGRvX2ludDMoc3RydWN0IHB0X3JlZ3MgKiwgbG9uZyk7Ci12b2lkIGRvX2RlYnVnKHN0cnVjdCBwdF9yZWdzICosIGxvbmcpOwogdm9pZCBtYXRoX2Vycm9yKHZvaWQgX191c2VyICopOwotdm9pZCBkb19jb3Byb2Nlc3Nvcl9lcnJvcihzdHJ1Y3QgcHRfcmVncyAqLCBsb25nKTsKLXZvaWQgZG9fc2ltZF9jb3Byb2Nlc3Nvcl9lcnJvcihzdHJ1Y3QgcHRfcmVncyAqLCBsb25nKTsKLXZvaWQgZG9fc3B1cmlvdXNfaW50ZXJydXB0X2J1ZyhzdHJ1Y3QgcHRfcmVncyAqLCBsb25nKTsKIHVuc2lnbmVkIGxvbmcgcGF0Y2hfZXNwZml4X2Rlc2ModW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZyk7CiBhc21saW5rYWdlIHZvaWQgbWF0aF9lbXVsYXRlKGxvbmcpOworI2VuZGlmCiAKLXZvaWQgZG9fcGFnZV9mYXVsdChzdHJ1Y3QgcHRfcmVncyAqcmVncywgdW5zaWduZWQgbG9uZyBlcnJvcl9jb2RlKTsKLQotI2Vsc2UgLyogQ09ORklHX1g4Nl8zMiAqLwotCi1hc21saW5rYWdlIHZvaWQgZG91YmxlX2ZhdWx0KHZvaWQpOwotCi1hc21saW5rYWdlIHZvaWQgZG9faW50MyhzdHJ1Y3QgcHRfcmVncyAqLCBsb25nKTsKLWFzbWxpbmthZ2Ugdm9pZCBkb19zdGFja19zZWdtZW50KHN0cnVjdCBwdF9yZWdzICosIGxvbmcpOwotYXNtbGlua2FnZSB2b2lkIGRvX2RlYnVnKHN0cnVjdCBwdF9yZWdzICosIHVuc2lnbmVkIGxvbmcpOwotYXNtbGlua2FnZSB2b2lkIGRvX2NvcHJvY2Vzc29yX2Vycm9yKHN0cnVjdCBwdF9yZWdzICopOwotYXNtbGlua2FnZSB2b2lkIGRvX3NpbWRfY29wcm9jZXNzb3JfZXJyb3Ioc3RydWN0IHB0X3JlZ3MgKik7Ci1hc21saW5rYWdlIHZvaWQgZG9fc3B1cmlvdXNfaW50ZXJydXB0X2J1ZyhzdHJ1Y3QgcHRfcmVncyAqKTsKLQotYXNtbGlua2FnZSB2b2lkIGRvX3BhZ2VfZmF1bHQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHVuc2lnbmVkIGxvbmcgZXJyb3JfY29kZSk7Ci0KLSNlbmRpZiAvKiBDT05GSUdfWDg2XzMyICovCiAjZW5kaWYgLyogQVNNX1g4Nl9fVFJBUFNfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L3V2L2Jpb3MuaCBiL2luY2x1ZGUvYXNtLXg4Ni91di9iaW9zLmgKaW5kZXggN2NkNmQ3ZS4uMjE1ZjE5NiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teDg2L3V2L2Jpb3MuaAorKysgYi9pbmNsdWRlL2FzbS14ODYvdXYvYmlvcy5oCkBAIC0yLDkgKzIsNyBAQAogI2RlZmluZSBBU01fWDg2X19VVl9fQklPU19ICiAKIC8qCi0gKiBCSU9TIGxheWVyIGRlZmluaXRpb25zLgotICoKLSAqICBDb3B5cmlnaHQgKGMpIDIwMDggU2lsaWNvbiBHcmFwaGljcywgSW5jLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIFVWIEJJT1MgbGF5ZXIgZGVmaW5pdGlvbnMuCiAgKgogICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKQEAgLTE5LDExICsxNyw0MyBAQAogICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiAgKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKICAqICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyBVU0EKKyAqCisgKiAgQ29weXJpZ2h0IChjKSAyMDA4IFNpbGljb24gR3JhcGhpY3MsIEluYy4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChjKSBSdXNzIEFuZGVyc29uCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L3J0Yy5oPgogCi0jZGVmaW5lIEJJT1NfRlJFUV9CQVNFCQkJMHgwMTAwMDAwMQorLyoKKyAqIFZhbHVlcyBmb3IgdGhlIEJJT1MgY2FsbHMuICBJdCBpcyBwYXNzZWQgYXMgdGhlIGZpcnN0ICogYXJndW1lbnQgaW4gdGhlCisgKiBCSU9TIGNhbGwuICBQYXNzaW5nIGFueSBvdGhlciB2YWx1ZSBpbiB0aGUgZmlyc3QgYXJndW1lbnQgd2lsbCByZXN1bHQKKyAqIGluIGEgQklPU19TVEFUVVNfVU5JTVBMRU1FTlRFRCByZXR1cm4gc3RhdHVzLgorICovCitlbnVtIHV2X2Jpb3NfY21kIHsKKwlVVl9CSU9TX0NPTU1PTiwKKwlVVl9CSU9TX0dFVF9TTl9JTkZPLAorCVVWX0JJT1NfRlJFUV9CQVNFCit9OworCisvKgorICogU3RhdHVzIHZhbHVlcyByZXR1cm5lZCBmcm9tIGEgQklPUyBjYWxsLgorICovCitlbnVtIHsKKwlCSU9TX1NUQVRVU19TVUNDRVNTCQk9ICAwLAorCUJJT1NfU1RBVFVTX1VOSU1QTEVNRU5URUQJPSAtRU5PU1lTLAorCUJJT1NfU1RBVFVTX0VJTlZBTAkJPSAtRUlOVkFMLAorCUJJT1NfU1RBVFVTX1VOQVZBSUwJCT0gLUVCVVNZCit9OworCisvKgorICogVGhlIFVWIHN5c3RlbSB0YWJsZSBkZXNjcmliZXMgc3BlY2lmaWMgZmlybXdhcmUKKyAqIGNhcGFiaWxpdGllcyBhdmFpbGFibGUgdG8gdGhlIExpbnV4IGtlcm5lbCBhdCBydW50aW1lLgorICovCitzdHJ1Y3QgdXZfc3lzdGFiIHsKKwljaGFyIHNpZ25hdHVyZVs0XTsJLyogbXVzdCBiZSAiVVZTVCIgKi8KKwl1MzIgcmV2aXNpb247CQkvKiBkaXN0aW5ndWlzaCBkaWZmZXJlbnQgZmlybXdhcmUgcmV2cyAqLworCXU2NCBmdW5jdGlvbjsJCS8qIEJJT1MgcnVudGltZSBjYWxsYmFjayBmdW5jdGlvbiBwdHIgKi8KK307CiAKIGVudW0gewogCUJJT1NfRlJFUV9CQVNFX1BMQVRGT1JNID0gMCwKQEAgLTMxLDM4ICs2MSwzNCBAQAogCUJJT1NfRlJFUV9CQVNFX1JFQUxUSU1FX0NMT0NLID0gMgogfTsKIAotIyBkZWZpbmUgQklPU19DQUxMKHJlc3VsdCwgYTAsIGExLCBhMiwgYTMsIGE0LCBhNSwgYTYsIGE3KQkJXAotCWRvIHsJCQkJCQkJCVwKLQkJLyogWFhYIC0gdGhlIHJlYWwgY2FsbCBnb2VzIGhlcmUgKi8JCQlcCi0JCXJlc3VsdC5zdGF0dXMgPSBCSU9TX1NUQVRVU19VTklNUExFTUVOVEVEOwkJXAotCQlpc3J2LnYwID0gMDsJCQkJCQlcCi0JCWlzcnYudjEgPSAwOwkJCQkJCVwKLQl9IHdoaWxlICgwKQotCi1lbnVtIHsKLQlCSU9TX1NUQVRVU19TVUNDRVNTCQk9ICAwLAotCUJJT1NfU1RBVFVTX1VOSU1QTEVNRU5URUQJPSAtMSwKLQlCSU9TX1NUQVRVU19FSU5WQUwJCT0gLTIsCi0JQklPU19TVEFUVVNfRVJST1IJCT0gLTMKK3VuaW9uIHBhcnRpdGlvbl9pbmZvX3UgeworCXU2NAl2YWw7CisJc3RydWN0IHsKKwkJdTY0CWh1Yl92ZXJzaW9uCTogIDgsCisJCQlwYXJ0aXRpb25faWQJOiAxNiwKKwkJCWNvaGVyZW5jZV9pZAk6IDE2LAorCQkJcmVnaW9uX3NpemUJOiAyNDsKKwl9OwogfTsKIAotc3RydWN0IHV2X2Jpb3NfcmV0dmFsIHsKLQkvKgotCSAqIEEgemVybyBzdGF0dXMgdmFsdWUgaW5kaWNhdGVzIGNhbGwgY29tcGxldGVkIHdpdGhvdXQgZXJyb3IuCi0JICogQSBuZWdhdGl2ZSBzdGF0dXMgdmFsdWUgaW5kaWNhdGVzIHJlYXNvbiBvZiBjYWxsIGZhaWx1cmUuCi0JICogQSBwb3NpdGl2ZSBzdGF0dXMgdmFsdWUgaW5kaWNhdGVzIHN1Y2Nlc3MgYnV0IGFuCi0JICogaW5mb3JtYXRpb25hbCB2YWx1ZSBzaG91bGQgYmUgcHJpbnRlZCAoZS5nLiwgInJlYm9vdCBmb3IKLQkgKiBjaGFuZ2UgdG8gdGFrZSBlZmZlY3QiKS4KLQkgKi8KLQlzNjQgc3RhdHVzOwotCXU2NCB2MDsKLQl1NjQgdjE7Ci0JdTY0IHYyOwotfTsKKy8qCisgKiBiaW9zIGNhbGxzIGhhdmUgNiBwYXJhbWV0ZXJzCisgKi8KK2V4dGVybiBzNjQgdXZfYmlvc19jYWxsKGVudW0gdXZfYmlvc19jbWQsIHU2NCwgdTY0LCB1NjQsIHU2NCwgdTY0KTsKK2V4dGVybiBzNjQgdXZfYmlvc19jYWxsX2lycXNhdmUoZW51bSB1dl9iaW9zX2NtZCwgdTY0LCB1NjQsIHU2NCwgdTY0LCB1NjQpOworZXh0ZXJuIHM2NCB1dl9iaW9zX2NhbGxfcmVlbnRyYW50KGVudW0gdXZfYmlvc19jbWQsIHU2NCwgdTY0LCB1NjQsIHU2NCwgdTY0KTsKIAotZXh0ZXJuIGxvbmcKLXg4Nl9iaW9zX2ZyZXFfYmFzZSh1bnNpZ25lZCBsb25nIHdoaWNoLCB1bnNpZ25lZCBsb25nICp0aWNrc19wZXJfc2Vjb25kLAotCQkgICB1bnNpZ25lZCBsb25nICpkcmlmdF9pbmZvKTsKLWV4dGVybiBjb25zdCBjaGFyICp4ODZfYmlvc19zdHJlcnJvcihsb25nIHN0YXR1cyk7CitleHRlcm4gczY0IHV2X2Jpb3NfZ2V0X3NuX2luZm8oaW50LCBpbnQgKiwgbG9uZyAqLCBsb25nICosIGxvbmcgKik7CitleHRlcm4gczY0IHV2X2Jpb3NfZnJlcV9iYXNlKHU2NCwgdTY0ICopOworCitleHRlcm4gdm9pZCB1dl9iaW9zX2luaXQodm9pZCk7CisKK2V4dGVybiBpbnQgdXZfdHlwZTsKK2V4dGVybiBsb25nIHNuX3BhcnRpdGlvbl9pZDsKK2V4dGVybiBsb25nIHV2X2NvaGVyZW5jeV9pZDsKK2V4dGVybiBsb25nIHV2X3JlZ2lvbl9zaXplOworI2RlZmluZSBwYXJ0aXRpb25fY29oZXJlbmNlX2lkKCkJKHV2X2NvaGVyZW5jeV9pZCkKKworZXh0ZXJuIHN0cnVjdCBrb2JqZWN0ICpzZ2lfdXZfa29iajsJLyogL3N5cy9maXJtd2FyZS9zZ2lfdXYgKi8KIAogI2VuZGlmIC8qIEFTTV9YODZfX1VWX19CSU9TX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Ni91di91dl9pcnEuaCBiL2luY2x1ZGUvYXNtLXg4Ni91di91dl9pcnEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YmY1ZjMyCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20teDg2L3V2L3V2X2lycS5oCkBAIC0wLDAgKzEsMzYgQEAKKy8qCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBTR0kgVVYgSVJRIGRlZmluaXRpb25zCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFNpbGljb24gR3JhcGhpY3MsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqLworCisjaWZuZGVmIEFTTV9YODZfX1VWX19VVl9JUlFfSAorI2RlZmluZSBBU01fWDg2X19VVl9fVVZfSVJRX0gKKworLyogSWYgYSBnZW5lcmljIHZlcnNpb24gb2YgdGhpcyBzdHJ1Y3R1cmUgZ2V0cyBkZWZpbmVkLCBlbGltaW5hdGUgdGhpcyBvbmUuICovCitzdHJ1Y3QgdXZfSU9fQVBJQ19yb3V0ZV9lbnRyeSB7CisJX191NjQJdmVjdG9yCQk6ICA4LAorCQlkZWxpdmVyeV9tb2RlCTogIDMsCisJCWRlc3RfbW9kZQk6ICAxLAorCQlkZWxpdmVyeV9zdGF0dXMJOiAgMSwKKwkJcG9sYXJpdHkJOiAgMSwKKwkJX19yZXNlcnZlZF8xCTogIDEsCisJCXRyaWdnZXIJCTogIDEsCisJCW1hc2sJCTogIDEsCisJCV9fcmVzZXJ2ZWRfMgk6IDE1LAorCQlkZXN0CQk6IDMyOworfTsKKworZXh0ZXJuIHN0cnVjdCBpcnFfY2hpcCB1dl9pcnFfY2hpcDsKKworZXh0ZXJuIGludCBhcmNoX2VuYWJsZV91dl9pcnEoY2hhciAqLCB1bnNpZ25lZCBpbnQsIGludCwgaW50LCB1bnNpZ25lZCBsb25nKTsKK2V4dGVybiB2b2lkIGFyY2hfZGlzYWJsZV91dl9pcnEoaW50LCB1bnNpZ25lZCBsb25nKTsKKworZXh0ZXJuIGludCB1dl9zZXR1cF9pcnEoY2hhciAqLCBpbnQsIGludCwgdW5zaWduZWQgbG9uZyk7CitleHRlcm4gdm9pZCB1dl90ZWFyZG93bl9pcnEodW5zaWduZWQgaW50LCBpbnQsIHVuc2lnbmVkIGxvbmcpOworCisjZW5kaWYgLyogQVNNX1g4Nl9fVVZfX1VWX0lSUV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODYveGVuL3BhZ2UuaCBiL2luY2x1ZGUvYXNtLXg4Ni94ZW4vcGFnZS5oCmluZGV4IGM1MDE4NWQuLmQ1ZWFkYTAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXg4Ni94ZW4vcGFnZS5oCisrKyBiL2luY2x1ZGUvYXNtLXg4Ni94ZW4vcGFnZS5oCkBAIC03NiwxMyArNzYsMTMgQEAKIHN0YXRpYyBpbmxpbmUgeG1hZGRyX3QgcGh5c190b19tYWNoaW5lKHhwYWRkcl90IHBoeXMpCiB7CiAJdW5zaWduZWQgb2Zmc2V0ID0gcGh5cy5wYWRkciAmIH5QQUdFX01BU0s7Ci0JcmV0dXJuIFhNQUREUihQRk5fUEhZUygodTY0KXBmbl90b19tZm4oUEZOX0RPV04ocGh5cy5wYWRkcikpKSB8IG9mZnNldCk7CisJcmV0dXJuIFhNQUREUihQRk5fUEhZUyhwZm5fdG9fbWZuKFBGTl9ET1dOKHBoeXMucGFkZHIpKSkgfCBvZmZzZXQpOwogfQogCiBzdGF0aWMgaW5saW5lIHhwYWRkcl90IG1hY2hpbmVfdG9fcGh5cyh4bWFkZHJfdCBtYWNoaW5lKQogewogCXVuc2lnbmVkIG9mZnNldCA9IG1hY2hpbmUubWFkZHIgJiB+UEFHRV9NQVNLOwotCXJldHVybiBYUEFERFIoUEZOX1BIWVMoKHU2NCltZm5fdG9fcGZuKFBGTl9ET1dOKG1hY2hpbmUubWFkZHIpKSkgfCBvZmZzZXQpOworCXJldHVybiBYUEFERFIoUEZOX1BIWVMobWZuX3RvX3BmbihQRk5fRE9XTihtYWNoaW5lLm1hZGRyKSkpIHwgb2Zmc2V0KTsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXh0ZW5zYS9hLm91dC5oIGIvaW5jbHVkZS9hc20teHRlbnNhL2Eub3V0LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZkZjEzNzAuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9hc20teHRlbnNhL2Eub3V0LmgKKysrIC9kZXYvbnVsbApAQCAtMSwyOSArMCwwIEBACi0vKgotICogaW5jbHVkZS9hc20teHRlbnNhL2Eub3V0LmgKLSAqCi0gKiBEdW1teSBhLm91dCBmaWxlLiBYdGVuc2EgZG9lcyBub3Qgc3VwcG9ydCB0aGUgYS5vdXQgZm9ybWF0LCBidXQgdGhlIGtlcm5lbAotICogc2VlbXMgdG8gZGVwZW5kIG9uIGl0LgotICoKLSAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCi0gKiBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIENvcHlyaWdodCAoQykgMjAwMSAtIDIwMDUgVGVuc2lsaWNhIEluYy4KLSAqLwotCi0jaWZuZGVmIF9YVEVOU0FfQV9PVVRfSAotI2RlZmluZSBfWFRFTlNBX0FfT1VUX0gKLQotc3RydWN0IGV4ZWMKLXsKLSAgdW5zaWduZWQgbG9uZyBhX2luZm87Ci0gIHVuc2lnbmVkIGFfdGV4dDsKLSAgdW5zaWduZWQgYV9kYXRhOwotICB1bnNpZ25lZCBhX2JzczsKLSAgdW5zaWduZWQgYV9zeW1zOwotICB1bnNpZ25lZCBhX2VudHJ5OwotICB1bnNpZ25lZCBhX3Ryc2l6ZTsKLSAgdW5zaWduZWQgYV9kcnNpemU7Ci19OwotCi0jZW5kaWYgLyogX1hURU5TQV9BX09VVF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14dGVuc2EvZWxmLmggYi9pbmNsdWRlL2FzbS14dGVuc2EvZWxmLmgKaW5kZXggY2E2ZTUxMC4uYzNmNTNlNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teHRlbnNhL2VsZi5oCisrKyBiL2luY2x1ZGUvYXNtLXh0ZW5zYS9lbGYuaApAQCAtMTg5LDcgKzE4OSw3IEBACiAjZW5kaWYKIH0gZWxmX3h0cmVnc190OwogCi0jZGVmaW5lIFNFVF9QRVJTT05BTElUWShleCwgaWJjczIpIHNldF9wZXJzb25hbGl0eShQRVJfTElOVVhfMzJCSVQpCisjZGVmaW5lIFNFVF9QRVJTT05BTElUWShleCkgc2V0X3BlcnNvbmFsaXR5KFBFUl9MSU5VWF8zMkJJVCkKIAogc3RydWN0IHRhc2tfc3RydWN0OwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14dGVuc2EvdGhyZWFkX2luZm8uaCBiL2luY2x1ZGUvYXNtLXh0ZW5zYS90aHJlYWRfaW5mby5oCmluZGV4IDdlNDEzMWQuLjBmNGZlMWYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXh0ZW5zYS90aHJlYWRfaW5mby5oCisrKyBiL2luY2x1ZGUvYXNtLXh0ZW5zYS90aHJlYWRfaW5mby5oCkBAIC0xMzQsNiArMTM0LDcgQEAKICNkZWZpbmUgVElGX01FTURJRQkJNQogI2RlZmluZSBUSUZfUkVTVE9SRV9TSUdNQVNLCTYJLyogcmVzdG9yZSBzaWduYWwgbWFzayBpbiBkb19zaWduYWwoKSAqLwogI2RlZmluZSBUSUZfUE9MTElOR19OUkZMQUcJMTYJLyogdHJ1ZSBpZiBwb2xsX2lkbGUoKSBpcyBwb2xsaW5nIFRJRl9ORUVEX1JFU0NIRUQgKi8KKyNkZWZpbmUgVElGX0ZSRUVaRQkJMTcJLyogaXMgZnJlZXppbmcgZm9yIHN1c3BlbmQgKi8KIAogI2RlZmluZSBfVElGX1NZU0NBTExfVFJBQ0UJKDE8PFRJRl9TWVNDQUxMX1RSQUNFKQogI2RlZmluZSBfVElGX1NJR1BFTkRJTkcJCSgxPDxUSUZfU0lHUEVORElORykKQEAgLTE0Miw2ICsxNDMsNyBAQAogI2RlZmluZSBfVElGX0lSRVQJCSgxPDxUSUZfSVJFVCkKICNkZWZpbmUgX1RJRl9QT0xMSU5HX05SRkxBRwkoMTw8VElGX1BPTExJTkdfTlJGTEFHKQogI2RlZmluZSBfVElGX1JFU1RPUkVfU0lHTUFTSwkoMTw8VElGX1JFU1RPUkVfU0lHTUFTSykKKyNkZWZpbmUgX1RJRl9GUkVFWkUJCSgxPDxUSUZfRlJFRVpFKQogCiAjZGVmaW5lIF9USUZfV09SS19NQVNLCQkweDAwMDBGRkZFCS8qIHdvcmsgdG8gZG8gb24gaW50ZXJydXB0L2V4Y2VwdGlvbiByZXR1cm4gKi8KICNkZWZpbmUgX1RJRl9BTExXT1JLX01BU0sJMHgwMDAwRkZGRgkvKiB3b3JrIHRvIGRvIG9uIGFueSByZXR1cm4gdG8gdS1zcGFjZSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9kcm0vZHJtLmggYi9pbmNsdWRlL2RybS9kcm0uaAppbmRleCAzOGQzYzZiLi5mNDZiYTRiNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9kcm0vZHJtLmgKKysrIGIvaW5jbHVkZS9kcm0vZHJtLmgKQEAgLTM2LDcgKzM2LDYgQEAKICNpZm5kZWYgX0RSTV9IXwogI2RlZmluZSBfRFJNX0hfCiAKLSNpZiBkZWZpbmVkKF9fbGludXhfXykKICNpZiBkZWZpbmVkKF9fS0VSTkVMX18pCiAjZW5kaWYKICNpbmNsdWRlIDxhc20vaW9jdGwuaD4JCS8qIEZvciBfSU8qIG1hY3JvcyAqLwpAQCAtNDYsMjIgKzQ1LDYgQEAKICNkZWZpbmUgRFJNX0lPQ19XUklURQkJX0lPQ19XUklURQogI2RlZmluZSBEUk1fSU9DX1JFQURXUklURQlfSU9DX1JFQUR8X0lPQ19XUklURQogI2RlZmluZSBEUk1fSU9DKGRpciwgZ3JvdXAsIG5yLCBzaXplKSBfSU9DKGRpciwgZ3JvdXAsIG5yLCBzaXplKQotI2VsaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgfHwgZGVmaW5lZChfX05ldEJTRF9fKSB8fCBkZWZpbmVkKF9fT3BlbkJTRF9fKQotI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmIGRlZmluZWQoSU5fTU9EVUxFKQotLyogUHJldmVudCBuYW1lIGNvbGxpc2lvbiB3aGVuIGluY2x1ZGluZyBzeXMvaW9jY29tLmggKi8KLSN1bmRlZiBpb2N0bAotI2luY2x1ZGUgPHN5cy9pb2Njb20uaD4KLSNkZWZpbmUgaW9jdGwoYSxiLGMpCQl4Zjg2aW9jdGwoYSxiLGMpCi0jZWxzZQotI2luY2x1ZGUgPHN5cy9pb2Njb20uaD4KLSNlbmRpZgkJCQkvKiBfX0ZyZWVCU0RfXyAmJiB4Zjg2aW9jdGwgKi8KLSNkZWZpbmUgRFJNX0lPQ1RMX05SKG4pCQkoKG4pICYgMHhmZikKLSNkZWZpbmUgRFJNX0lPQ19WT0lECQlJT0NfVk9JRAotI2RlZmluZSBEUk1fSU9DX1JFQUQJCUlPQ19PVVQKLSNkZWZpbmUgRFJNX0lPQ19XUklURQkJSU9DX0lOCi0jZGVmaW5lIERSTV9JT0NfUkVBRFdSSVRFCUlPQ19JTk9VVAotI2RlZmluZSBEUk1fSU9DKGRpciwgZ3JvdXAsIG5yLCBzaXplKSBfSU9DKGRpciwgZ3JvdXAsIG5yLCBzaXplKQotI2VuZGlmCiAKICNkZWZpbmUgRFJNX01BSk9SICAgICAgIDIyNgogI2RlZmluZSBEUk1fTUFYX01JTk9SICAgMTUKQEAgLTQ3MSw2ICs0NTQsNyBAQAogZW51bSBkcm1fdmJsYW5rX3NlcV90eXBlIHsKIAlfRFJNX1ZCTEFOS19BQlNPTFVURSA9IDB4MCwJLyoqPCBXYWl0IGZvciBzcGVjaWZpYyB2Ymxhbmsgc2VxdWVuY2UgbnVtYmVyICovCiAJX0RSTV9WQkxBTktfUkVMQVRJVkUgPSAweDEsCS8qKjwgV2FpdCBmb3IgZ2l2ZW4gbnVtYmVyIG9mIHZibGFua3MgKi8KKwlfRFJNX1ZCTEFOS19GTElQID0gMHg4MDAwMDAwLCAgIC8qKjwgU2NoZWR1bGVkIGJ1ZmZlciBzd2FwIHNob3VsZCBmbGlwICovCiAJX0RSTV9WQkxBTktfTkVYVE9OTUlTUyA9IDB4MTAwMDAwMDAsCS8qKjwgSWYgbWlzc2VkLCB3YWl0IGZvciBuZXh0IHZibGFuayAqLwogCV9EUk1fVkJMQU5LX1NFQ09OREFSWSA9IDB4MjAwMDAwMDAsCS8qKjwgU2Vjb25kYXJ5IGRpc3BsYXkgY29udHJvbGxlciAqLwogCV9EUk1fVkJMQU5LX1NJR05BTCA9IDB4NDAwMDAwMDAJLyoqPCBTZW5kIHNpZ25hbCBpbnN0ZWFkIG9mIGJsb2NraW5nICovCkBAIC01MDMsNiArNDg3LDE5IEBACiAJc3RydWN0IGRybV93YWl0X3ZibGFua19yZXBseSByZXBseTsKIH07CiAKKyNkZWZpbmUgX0RSTV9QUkVfTU9ERVNFVCAxCisjZGVmaW5lIF9EUk1fUE9TVF9NT0RFU0VUIDIKKworLyoqCisgKiBEUk1fSU9DVExfTU9ERVNFVF9DVEwgaW9jdGwgYXJndW1lbnQgdHlwZQorICoKKyAqIFxzYSBkcm1Nb2Rlc2V0Q3RsKCkuCisgKi8KK3N0cnVjdCBkcm1fbW9kZXNldF9jdGwgeworCXVpbnQzMl90IGNydGM7CisJdWludDMyX3QgY21kOworfTsKKwogLyoqCiAgKiBEUk1fSU9DVExfQUdQX0VOQUJMRSBpb2N0bCBhcmd1bWVudCB0eXBlLgogICoKQEAgLTU3Myw2ICs1NzAsMzQgQEAKIAlpbnQgZHJtX2RkX21pbm9yOwogfTsKIAorLyoqIERSTV9JT0NUTF9HRU1fQ0xPU0UgaW9jdGwgYXJndW1lbnQgdHlwZSAqLworc3RydWN0IGRybV9nZW1fY2xvc2UgeworCS8qKiBIYW5kbGUgb2YgdGhlIG9iamVjdCB0byBiZSBjbG9zZWQuICovCisJdWludDMyX3QgaGFuZGxlOworCXVpbnQzMl90IHBhZDsKK307CisKKy8qKiBEUk1fSU9DVExfR0VNX0ZMSU5LIGlvY3RsIGFyZ3VtZW50IHR5cGUgKi8KK3N0cnVjdCBkcm1fZ2VtX2ZsaW5rIHsKKwkvKiogSGFuZGxlIGZvciB0aGUgb2JqZWN0IGJlaW5nIG5hbWVkICovCisJdWludDMyX3QgaGFuZGxlOworCisJLyoqIFJldHVybmVkIGdsb2JhbCBuYW1lICovCisJdWludDMyX3QgbmFtZTsKK307CisKKy8qKiBEUk1fSU9DVExfR0VNX09QRU4gaW9jdGwgYXJndW1lbnQgdHlwZSAqLworc3RydWN0IGRybV9nZW1fb3BlbiB7CisJLyoqIE5hbWUgb2Ygb2JqZWN0IGJlaW5nIG9wZW5lZCAqLworCXVpbnQzMl90IG5hbWU7CisKKwkvKiogUmV0dXJuZWQgaGFuZGxlIGZvciB0aGUgb2JqZWN0ICovCisJdWludDMyX3QgaGFuZGxlOworCisJLyoqIFJldHVybmVkIHNpemUgb2YgdGhlIG9iamVjdCAqLworCXVpbnQ2NF90IHNpemU7Cit9OworCiAjZGVmaW5lIERSTV9JT0NUTF9CQVNFCQkJJ2QnCiAjZGVmaW5lIERSTV9JTyhucikJCQlfSU8oRFJNX0lPQ1RMX0JBU0UsbnIpCiAjZGVmaW5lIERSTV9JT1IobnIsdHlwZSkJCV9JT1IoRFJNX0lPQ1RMX0JBU0UsbnIsdHlwZSkKQEAgLTU4Nyw2ICs2MTIsMTAgQEAKICNkZWZpbmUgRFJNX0lPQ1RMX0dFVF9DTElFTlQgICAgICAgICAgICBEUk1fSU9XUigweDA1LCBzdHJ1Y3QgZHJtX2NsaWVudCkKICNkZWZpbmUgRFJNX0lPQ1RMX0dFVF9TVEFUUyAgICAgICAgICAgICBEUk1fSU9SKCAweDA2LCBzdHJ1Y3QgZHJtX3N0YXRzKQogI2RlZmluZSBEUk1fSU9DVExfU0VUX1ZFUlNJT04JCURSTV9JT1dSKDB4MDcsIHN0cnVjdCBkcm1fc2V0X3ZlcnNpb24pCisjZGVmaW5lIERSTV9JT0NUTF9NT0RFU0VUX0NUTCAgICAgICAgICAgRFJNX0lPVygweDA4LCBzdHJ1Y3QgZHJtX21vZGVzZXRfY3RsKQorI2RlZmluZSBEUk1fSU9DVExfR0VNX0NMT1NFCQlEUk1fSU9XICgweDA5LCBzdHJ1Y3QgZHJtX2dlbV9jbG9zZSkKKyNkZWZpbmUgRFJNX0lPQ1RMX0dFTV9GTElOSwkJRFJNX0lPV1IoMHgwYSwgc3RydWN0IGRybV9nZW1fZmxpbmspCisjZGVmaW5lIERSTV9JT0NUTF9HRU1fT1BFTgkJRFJNX0lPV1IoMHgwYiwgc3RydWN0IGRybV9nZW1fb3BlbikKIAogI2RlZmluZSBEUk1fSU9DVExfU0VUX1VOSVFVRQkJRFJNX0lPVyggMHgxMCwgc3RydWN0IGRybV91bmlxdWUpCiAjZGVmaW5lIERSTV9JT0NUTF9BVVRIX01BR0lDCQlEUk1fSU9XKCAweDExLCBzdHJ1Y3QgZHJtX2F1dGgpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2RybS9kcm1QLmggYi9pbmNsdWRlL2RybS9kcm1QLmgKaW5kZXggMWMxYjEzZS4uNTljNzk2YiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9kcm0vZHJtUC5oCisrKyBiL2luY2x1ZGUvZHJtL2RybVAuaApAQCAtMTA0LDYgKzEwNCw3IEBACiAjZGVmaW5lIERSSVZFUl9ETUFfUVVFVUUgICAweDIwMAogI2RlZmluZSBEUklWRVJfRkJfRE1BICAgICAgMHg0MDAKICNkZWZpbmUgRFJJVkVSX0lSUV9WQkwyICAgIDB4ODAwCisjZGVmaW5lIERSSVZFUl9HRU0gICAgICAgICAweDEwMDAKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyoqIFxuYW1lIEJlZ2luIHRoZSBEUk0uLi4gKi8KQEAgLTM4Nyw2ICszODgsMTAgQEAKIAlzdHJ1Y3QgZHJtX21pbm9yICptaW5vcjsKIAlpbnQgcmVtb3ZlX2F1dGhfb25fY2xvc2U7CiAJdW5zaWduZWQgbG9uZyBsb2NrX2NvdW50OworCS8qKiBNYXBwaW5nIG9mIG1tIG9iamVjdCBoYW5kbGVzIHRvIG9iamVjdCBwb2ludGVycy4gKi8KKwlzdHJ1Y3QgaWRyIG9iamVjdF9pZHI7CisJLyoqIExvY2sgZm9yIHN5bmNocm9uaXphdGlvbiBvZiBhY2Nlc3MgdG8gb2JqZWN0X2lkci4gKi8KKwlzcGlubG9ja190IHRhYmxlX2xvY2s7CiAJc3RydWN0IGZpbGUgKmZpbHA7CiAJdm9pZCAqZHJpdmVyX3ByaXY7CiB9OwpAQCAtNTU4LDYgKzU2Myw1NiBAQAogfTsKIAogLyoqCisgKiBUaGlzIHN0cnVjdHVyZSBkZWZpbmVzIHRoZSBkcm1fbW0gbWVtb3J5IG9iamVjdCwgd2hpY2ggd2lsbCBiZSB1c2VkIGJ5IHRoZQorICogRFJNIGZvciBpdHMgYnVmZmVyIG9iamVjdHMuCisgKi8KK3N0cnVjdCBkcm1fZ2VtX29iamVjdCB7CisJLyoqIFJlZmVyZW5jZSBjb3VudCBvZiB0aGlzIG9iamVjdCAqLworCXN0cnVjdCBrcmVmIHJlZmNvdW50OworCisJLyoqIEhhbmRsZSBjb3VudCBvZiB0aGlzIG9iamVjdC4gRWFjaCBoYW5kbGUgYWxzbyBob2xkcyBhIHJlZmVyZW5jZSAqLworCXN0cnVjdCBrcmVmIGhhbmRsZWNvdW50OworCisJLyoqIFJlbGF0ZWQgZHJtIGRldmljZSAqLworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXY7CisKKwkvKiogRmlsZSByZXByZXNlbnRpbmcgdGhlIHNobWVtIHN0b3JhZ2UgKi8KKwlzdHJ1Y3QgZmlsZSAqZmlscDsKKworCS8qKgorCSAqIFNpemUgb2YgdGhlIG9iamVjdCwgaW4gYnl0ZXMuICBJbW11dGFibGUgb3ZlciB0aGUgb2JqZWN0J3MKKwkgKiBsaWZldGltZS4KKwkgKi8KKwlzaXplX3Qgc2l6ZTsKKworCS8qKgorCSAqIEdsb2JhbCBuYW1lIGZvciB0aGlzIG9iamVjdCwgc3RhcnRzIGF0IDEuIDAgbWVhbnMgdW5uYW1lZC4KKwkgKiBBY2Nlc3MgaXMgY292ZXJlZCBieSB0aGUgb2JqZWN0X25hbWVfbG9jayBpbiB0aGUgcmVsYXRlZCBkcm1fZGV2aWNlCisJICovCisJaW50IG5hbWU7CisKKwkvKioKKwkgKiBNZW1vcnkgZG9tYWlucy4gVGhlc2UgbW9uaXRvciB3aGljaCBjYWNoZXMgY29udGFpbiByZWFkL3dyaXRlIGRhdGEKKwkgKiByZWxhdGVkIHRvIHRoZSBvYmplY3QuIFdoZW4gdHJhbnNpdGlvbmluZyBmcm9tIG9uZSBzZXQgb2YgZG9tYWlucworCSAqIHRvIGFub3RoZXIsIHRoZSBkcml2ZXIgaXMgY2FsbGVkIHRvIGVuc3VyZSB0aGF0IGNhY2hlcyBhcmUgc3VpdGFibHkKKwkgKiBmbHVzaGVkIGFuZCBpbnZhbGlkYXRlZAorCSAqLworCXVpbnQzMl90IHJlYWRfZG9tYWluczsKKwl1aW50MzJfdCB3cml0ZV9kb21haW47CisKKwkvKioKKwkgKiBXaGlsZSB2YWxpZGF0aW5nIGFuIGV4ZWMgb3BlcmF0aW9uLCB0aGUKKwkgKiBuZXcgcmVhZC93cml0ZSBkb21haW4gdmFsdWVzIGFyZSBjb21wdXRlZCBoZXJlLgorCSAqIFRoZXkgd2lsbCBiZSB0cmFuc2ZlcnJlZCB0byB0aGUgYWJvdmUgdmFsdWVzCisJICogYXQgdGhlIHBvaW50IHRoYXQgYW55IGNhY2hlIGZsdXNoaW5nIG9jY3VycworCSAqLworCXVpbnQzMl90IHBlbmRpbmdfcmVhZF9kb21haW5zOworCXVpbnQzMl90IHBlbmRpbmdfd3JpdGVfZG9tYWluOworCisJdm9pZCAqZHJpdmVyX3ByaXZhdGU7Cit9OworCisvKioKICAqIERSTSBkcml2ZXIgc3RydWN0dXJlLiBUaGlzIHN0cnVjdHVyZSByZXByZXNlbnQgdGhlIGNvbW1vbiBjb2RlIGZvcgogICogYSBmYW1pbHkgb2YgY2FyZHMuIFRoZXJlIHdpbGwgb25lIGRybV9kZXZpY2UgZm9yIGVhY2ggY2FyZCBwcmVzZW50CiAgKiBpbiB0aGlzIGZhbWlseQpAQCAtNTgwLDExICs2MzUsNTQgQEAKIAlpbnQgKCprZXJuZWxfY29udGV4dF9zd2l0Y2gpIChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgb2xkLAogCQkJCSAgICAgIGludCBuZXcpOwogCXZvaWQgKCprZXJuZWxfY29udGV4dF9zd2l0Y2hfdW5sb2NrKSAoc3RydWN0IGRybV9kZXZpY2UgKmRldik7Ci0JaW50ICgqdmJsYW5rX3dhaXQpIChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgKnNlcXVlbmNlKTsKLQlpbnQgKCp2Ymxhbmtfd2FpdDIpIChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgKnNlcXVlbmNlKTsKIAlpbnQgKCpkcmlfbGlicmFyeV9uYW1lKSAoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgY2hhciAqYnVmKTsKIAogCS8qKgorCSAqIGdldF92YmxhbmtfY291bnRlciAtIGdldCByYXcgaGFyZHdhcmUgdmJsYW5rIGNvdW50ZXIKKwkgKiBAZGV2OiBEUk0gZGV2aWNlCisJICogQGNydGM6IGNvdW50ZXIgdG8gZmV0Y2gKKwkgKgorCSAqIERyaXZlciBjYWxsYmFjayBmb3IgZmV0Y2hpbmcgYSByYXcgaGFyZHdhcmUgdmJsYW5rIGNvdW50ZXIKKwkgKiBmb3IgQGNydGMuICBJZiBhIGRldmljZSBkb2Vzbid0IGhhdmUgYSBoYXJkd2FyZSBjb3VudGVyLCB0aGUKKwkgKiBkcml2ZXIgY2FuIHNpbXBseSByZXR1cm4gdGhlIHZhbHVlIG9mIGRybV92YmxhbmtfY291bnQgYW5kCisJICogbWFrZSB0aGUgZW5hYmxlX3ZibGFuaygpIGFuZCBkaXNhYmxlX3ZibGFuaygpIGhvb2tzIGludG8gbm8tb3BzLAorCSAqIGxlYXZpbmcgaW50ZXJydXB0cyBlbmFibGVkIGF0IGFsbCB0aW1lcy4KKwkgKgorCSAqIFdyYXBhcm91bmQgaGFuZGxpbmcgYW5kIGxvc3Mgb2YgZXZlbnRzIGR1ZSB0byBtb2Rlc2V0dGluZyBpcyBkZWFsdAorCSAqIHdpdGggaW4gdGhlIERSTSBjb3JlIGNvZGUuCisJICoKKwkgKiBSRVRVUk5TCisJICogUmF3IHZibGFuayBjb3VudGVyIHZhbHVlLgorCSAqLworCXUzMiAoKmdldF92YmxhbmtfY291bnRlcikgKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGludCBjcnRjKTsKKworCS8qKgorCSAqIGVuYWJsZV92YmxhbmsgLSBlbmFibGUgdmJsYW5rIGludGVycnVwdCBldmVudHMKKwkgKiBAZGV2OiBEUk0gZGV2aWNlCisJICogQGNydGM6IHdoaWNoIGlycSB0byBlbmFibGUKKwkgKgorCSAqIEVuYWJsZSB2YmxhbmsgaW50ZXJydXB0cyBmb3IgQGNydGMuICBJZiB0aGUgZGV2aWNlIGRvZXNuJ3QgaGF2ZQorCSAqIGEgaGFyZHdhcmUgdmJsYW5rIGNvdW50ZXIsIHRoaXMgcm91dGluZSBzaG91bGQgYmUgYSBuby1vcCwgc2luY2UKKwkgKiBpbnRlcnJ1cHRzIHdpbGwgaGF2ZSB0byBzdGF5IG9uIHRvIGtlZXAgdGhlIGNvdW50IGFjY3VyYXRlLgorCSAqCisJICogUkVUVVJOUworCSAqIFplcm8gb24gc3VjY2VzcywgYXBwcm9wcmlhdGUgZXJybm8gaWYgdGhlIGdpdmVuIEBjcnRjJ3MgdmJsYW5rCisJICogaW50ZXJydXB0IGNhbm5vdCBiZSBlbmFibGVkLgorCSAqLworCWludCAoKmVuYWJsZV92YmxhbmspIChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgY3J0Yyk7CisKKwkvKioKKwkgKiBkaXNhYmxlX3ZibGFuayAtIGRpc2FibGUgdmJsYW5rIGludGVycnVwdCBldmVudHMKKwkgKiBAZGV2OiBEUk0gZGV2aWNlCisJICogQGNydGM6IHdoaWNoIGlycSB0byBlbmFibGUKKwkgKgorCSAqIERpc2FibGUgdmJsYW5rIGludGVycnVwdHMgZm9yIEBjcnRjLiAgSWYgdGhlIGRldmljZSBkb2Vzbid0IGhhdmUKKwkgKiBhIGhhcmR3YXJlIHZibGFuayBjb3VudGVyLCB0aGlzIHJvdXRpbmUgc2hvdWxkIGJlIGEgbm8tb3AsIHNpbmNlCisJICogaW50ZXJydXB0cyB3aWxsIGhhdmUgdG8gc3RheSBvbiB0byBrZWVwIHRoZSBjb3VudCBhY2N1cmF0ZS4KKwkgKi8KKwl2b2lkICgqZGlzYWJsZV92YmxhbmspIChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgY3J0Yyk7CisKKwkvKioKIAkgKiBDYWxsZWQgYnkgXGMgZHJtX2RldmljZV9pc19hZ3AuICBUeXBpY2FsbHkgdXNlZCB0byBkZXRlcm1pbmUgaWYgYQogCSAqIGNhcmQgaXMgcmVhbGx5IGF0dGFjaGVkIHRvIEFHUCBvciBub3QuCiAJICoKQEAgLTYwMSw3ICs2OTksNyBAQAogCiAJaXJxcmV0dXJuX3QoKmlycV9oYW5kbGVyKSAoRFJNX0lSUV9BUkdTKTsKIAl2b2lkICgqaXJxX3ByZWluc3RhbGwpIChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKLQl2b2lkICgqaXJxX3Bvc3RpbnN0YWxsKSAoc3RydWN0IGRybV9kZXZpY2UgKmRldik7CisJaW50ICgqaXJxX3Bvc3RpbnN0YWxsKSAoc3RydWN0IGRybV9kZXZpY2UgKmRldik7CiAJdm9pZCAoKmlycV91bmluc3RhbGwpIChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKIAl2b2lkICgqcmVjbGFpbV9idWZmZXJzKSAoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKIAkJCQkgc3RydWN0IGRybV9maWxlICogZmlsZV9wcml2KTsKQEAgLTYxNCw2ICs3MTIsMTggQEAKIAl2b2lkICgqc2V0X3ZlcnNpb24pIChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAogCQkJICAgICBzdHJ1Y3QgZHJtX3NldF92ZXJzaW9uICpzdik7CiAKKwlpbnQgKCpwcm9jX2luaXQpKHN0cnVjdCBkcm1fbWlub3IgKm1pbm9yKTsKKwl2b2lkICgqcHJvY19jbGVhbnVwKShzdHJ1Y3QgZHJtX21pbm9yICptaW5vcik7CisKKwkvKioKKwkgKiBEcml2ZXItc3BlY2lmaWMgY29uc3RydWN0b3IgZm9yIGRybV9nZW1fb2JqZWN0cywgdG8gc2V0IHVwCisJICogb2JqLT5kcml2ZXJfcHJpdmF0ZS4KKwkgKgorCSAqIFJldHVybnMgMCBvbiBzdWNjZXNzLgorCSAqLworCWludCAoKmdlbV9pbml0X29iamVjdCkgKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqKTsKKwl2b2lkICgqZ2VtX2ZyZWVfb2JqZWN0KSAoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmopOworCiAJaW50IG1ham9yOwogCWludCBtaW5vcjsKIAlpbnQgcGF0Y2hsZXZlbDsKQEAgLTcxNCw3ICs4MjQsNiBAQAogCiAJLyoqIFxuYW1lIENvbnRleHQgc3VwcG9ydCAqLwogCS8qQHsgKi8KLQlpbnQgaXJxOwkJCS8qKjwgSW50ZXJydXB0IHVzZWQgYnkgYm9hcmQgKi8KIAlpbnQgaXJxX2VuYWJsZWQ7CQkvKio8IFRydWUgaWYgaXJxIGhhbmRsZXIgaXMgZW5hYmxlZCAqLwogCV9fdm9sYXRpbGVfXyBsb25nIGNvbnRleHRfZmxhZzsJLyoqPCBDb250ZXh0IHN3YXBwaW5nIGZsYWcgKi8KIAlfX3ZvbGF0aWxlX18gbG9uZyBpbnRlcnJ1cHRfZmxhZzsgLyoqPCBJbnRlcnJ1cHRpb24gaGFuZGxlciBmbGFnICovCkBAIC03MzAsMTMgKzgzOSwyOCBAQAogCS8qKiBcbmFtZSBWQkxBTksgSVJRIHN1cHBvcnQgKi8KIAkvKkB7ICovCiAKLQl3YWl0X3F1ZXVlX2hlYWRfdCB2YmxfcXVldWU7CS8qKjwgVkJMQU5LIHdhaXQgcXVldWUgKi8KLQlhdG9taWNfdCB2YmxfcmVjZWl2ZWQ7Ci0JYXRvbWljX3QgdmJsX3JlY2VpdmVkMjsJCS8qKjwgbnVtYmVyIG9mIHNlY29uZGFyeSBWQkxBTksgaW50ZXJydXB0cyAqLworCS8qCisJICogQXQgbG9hZCB0aW1lLCBkaXNhYmxpbmcgdGhlIHZibGFuayBpbnRlcnJ1cHQgd29uJ3QgYmUgYWxsb3dlZCBzaW5jZQorCSAqIG9sZCBjbGllbnRzIG1heSBub3QgY2FsbCB0aGUgbW9kZXNldCBpb2N0bCBhbmQgdGhlcmVmb3JlIG1pc2JlaGF2ZS4KKwkgKiBPbmNlIHRoZSBtb2Rlc2V0IGlvY3RsICpoYXMqIGJlZW4gY2FsbGVkIHRob3VnaCwgd2UgY2FuIHNhZmVseQorCSAqIGRpc2FibGUgdGhlbSB3aGVuIHVudXNlZC4KKwkgKi8KKwlpbnQgdmJsYW5rX2Rpc2FibGVfYWxsb3dlZDsKKworCXdhaXRfcXVldWVfaGVhZF90ICp2YmxfcXVldWU7ICAgLyoqPCBWQkxBTksgd2FpdCBxdWV1ZSAqLworCWF0b21pY190ICpfdmJsYW5rX2NvdW50OyAgICAgICAgLyoqPCBudW1iZXIgb2YgVkJMQU5LIGludGVycnVwdHMgKGRyaXZlciBtdXN0IGFsbG9jIHRoZSByaWdodCBudW1iZXIgb2YgY291bnRlcnMpICovCiAJc3BpbmxvY2tfdCB2YmxfbG9jazsKLQlzdHJ1Y3QgbGlzdF9oZWFkIHZibF9zaWdzOwkJLyoqPCBzaWduYWwgbGlzdCB0byBzZW5kIG9uIFZCTEFOSyAqLwotCXN0cnVjdCBsaXN0X2hlYWQgdmJsX3NpZ3MyOwkvKio8IHNpZ25hbHMgdG8gc2VuZCBvbiBzZWNvbmRhcnkgVkJMQU5LICovCi0JdW5zaWduZWQgaW50IHZibF9wZW5kaW5nOworCXN0cnVjdCBsaXN0X2hlYWQgKnZibF9zaWdzOwkvKio8IHNpZ25hbCBsaXN0IHRvIHNlbmQgb24gVkJMQU5LICovCisJYXRvbWljX3QgdmJsX3NpZ25hbF9wZW5kaW5nOyAgICAvKiBudW1iZXIgb2Ygc2lnbmFscyBwZW5kaW5nIG9uIGFsbCBjcnRjcyovCisJYXRvbWljX3QgKnZibGFua19yZWZjb3VudDsgICAgICAvKiBudW1iZXIgb2YgdXNlcnMgb2YgdmJsYW5rIGludGVycnVwdHNwZXIgY3J0YyAqLworCXUzMiAqbGFzdF92Ymxhbms7ICAgICAgICAgICAgICAgLyogcHJvdGVjdGVkIGJ5IGRldi0+dmJsX2xvY2ssIHVzZWQgKi8KKwkJCQkJLyogZm9yIHdyYXBhcm91bmQgaGFuZGxpbmcgKi8KKwlpbnQgKnZibGFua19lbmFibGVkOyAgICAgICAgICAgIC8qIHNvIHdlIGRvbid0IGNhbGwgZW5hYmxlIG1vcmUgdGhhbgorCQkJCQkgICBvbmNlIHBlciBkaXNhYmxlICovCisJaW50ICp2YmxhbmtfaW5tb2Rlc2V0OyAgICAgICAgICAvKiBEaXNwbGF5IGRyaXZlciBpcyBzZXR0aW5nIG1vZGUgKi8KKwlzdHJ1Y3QgdGltZXJfbGlzdCB2YmxhbmtfZGlzYWJsZV90aW1lcjsKKworCXUzMiBtYXhfdmJsYW5rX2NvdW50OyAgICAgICAgICAgLyoqPCBzaXplIG9mIHZibGFuayBjb3VudGVyIHJlZ2lzdGVyICovCiAJc3BpbmxvY2tfdCB0YXNrbGV0X2xvY2s7CS8qKjwgRm9yIGRybV9sb2NrZWRfdGFza2xldCAqLwogCXZvaWQgKCpsb2NrZWRfdGFza2xldF9mdW5jKShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKIApAQCAtNzU3LDYgKzg4MSw3IEBACiAJc3RydWN0IHBjaV9jb250cm9sbGVyICpob3NlOwogI2VuZGlmCiAJc3RydWN0IGRybV9zZ19tZW0gKnNnOwkvKio8IFNjYXR0ZXIgZ2F0aGVyIG1lbW9yeSAqLworCWludCBudW1fY3J0Y3M7ICAgICAgICAgICAgICAgICAgLyoqPCBOdW1iZXIgb2YgQ1JUQ3Mgb24gdGhpcyBkZXZpY2UgKi8KIAl2b2lkICpkZXZfcHJpdmF0ZTsJCS8qKjwgZGV2aWNlIHByaXZhdGUgZGF0YSAqLwogCXN0cnVjdCBkcm1fc2lnZGF0YSBzaWdkYXRhOwkgICAvKio8IEZvciBibG9ja19hbGxfc2lnbmFscyAqLwogCXNpZ3NldF90IHNpZ21hc2s7CkBAIC03NzEsOCArODk2LDI5IEBACiAJc3BpbmxvY2tfdCBkcndfbG9jazsKIAlzdHJ1Y3QgaWRyIGRyd19pZHI7CiAJLypAfSAqLworCisJLyoqIFxuYW1lIEdFTSBpbmZvcm1hdGlvbiAqLworCS8qQHsgKi8KKwlzcGlubG9ja190IG9iamVjdF9uYW1lX2xvY2s7CisJc3RydWN0IGlkciBvYmplY3RfbmFtZV9pZHI7CisJYXRvbWljX3Qgb2JqZWN0X2NvdW50OworCWF0b21pY190IG9iamVjdF9tZW1vcnk7CisJYXRvbWljX3QgcGluX2NvdW50OworCWF0b21pY190IHBpbl9tZW1vcnk7CisJYXRvbWljX3QgZ3R0X2NvdW50OworCWF0b21pY190IGd0dF9tZW1vcnk7CisJdWludDMyX3QgZ3R0X3RvdGFsOworCXVpbnQzMl90IGludmFsaWRhdGVfZG9tYWluczsgICAgLyogZG9tYWlucyBwZW5kaW5nIGludmFsaWRhdGlvbiAqLworCXVpbnQzMl90IGZsdXNoX2RvbWFpbnM7ICAgICAgICAgLyogZG9tYWlucyBwZW5kaW5nIGZsdXNoICovCisJLypAfSAqLworCiB9OwogCitzdGF0aWMgaW5saW5lIGludCBkcm1fZGV2X3RvX2lycShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQoreworCXJldHVybiBkZXYtPnBkZXYtPmlycTsKK30KKwogc3RhdGljIF9faW5saW5lX18gaW50IGRybV9jb3JlX2NoZWNrX2ZlYXR1cmUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKIAkJCQkJICAgICBpbnQgZmVhdHVyZSkKIHsKQEAgLTg2Nyw2ICsxMDEzLDExIEBACiBleHRlcm4gRFJNX0FHUF9NRU0gKmRybV9hbGxvY19hZ3Aoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50IHBhZ2VzLCB1MzIgdHlwZSk7CiBleHRlcm4gaW50IGRybV9mcmVlX2FncChEUk1fQUdQX01FTSAqIGhhbmRsZSwgaW50IHBhZ2VzKTsKIGV4dGVybiBpbnQgZHJtX2JpbmRfYWdwKERSTV9BR1BfTUVNICogaGFuZGxlLCB1bnNpZ25lZCBpbnQgc3RhcnQpOworZXh0ZXJuIERSTV9BR1BfTUVNICpkcm1fYWdwX2JpbmRfcGFnZXMoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJCQkgICAgICAgc3RydWN0IHBhZ2UgKipwYWdlcywKKwkJCQkgICAgICAgdW5zaWduZWQgbG9uZyBudW1fcGFnZXMsCisJCQkJICAgICAgIHVpbnQzMl90IGd0dF9vZmZzZXQsCisJCQkJICAgICAgIHVpbnQzMl90IHR5cGUpOwogZXh0ZXJuIGludCBkcm1fdW5iaW5kX2FncChEUk1fQUdQX01FTSAqIGhhbmRsZSk7CiAKIAkJCQkvKiBNaXNjLiBJT0NUTCBzdXBwb3J0IChkcm1faW9jdGwuaCkgKi8KQEAgLTkyOSw2ICsxMDgwLDkgQEAKIGV4dGVybiBpbnQgZHJtX2F1dGhtYWdpYyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAogCQkJIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KTsKIAorLyogQ2FjaGUgbWFuYWdlbWVudCAoZHJtX2NhY2hlLmMpICovCit2b2lkIGRybV9jbGZsdXNoX3BhZ2VzKHN0cnVjdCBwYWdlICpwYWdlc1tdLCB1bnNpZ25lZCBsb25nIG51bV9wYWdlcyk7CisKIAkJCQkvKiBMb2NraW5nIElPQ1RMIHN1cHBvcnQgKGRybV9sb2NrLmgpICovCiBleHRlcm4gaW50IGRybV9sb2NrKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCiAJCSAgICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdik7CkBAIC05ODUsMTUgKzExMzksMjUgQEAKIGV4dGVybiBpbnQgZHJtX2NvbnRyb2woc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKIAkJICAgICAgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KTsKIGV4dGVybiBpcnFyZXR1cm5fdCBkcm1faXJxX2hhbmRsZXIoRFJNX0lSUV9BUkdTKTsKK2V4dGVybiBpbnQgZHJtX2lycV9pbnN0YWxsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwogZXh0ZXJuIGludCBkcm1faXJxX3VuaW5zdGFsbChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKIGV4dGVybiB2b2lkIGRybV9kcml2ZXJfaXJxX3ByZWluc3RhbGwoc3RydWN0IGRybV9kZXZpY2UgKmRldik7CiBleHRlcm4gdm9pZCBkcm1fZHJpdmVyX2lycV9wb3N0aW5zdGFsbChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKIGV4dGVybiB2b2lkIGRybV9kcml2ZXJfaXJxX3VuaW5zdGFsbChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKIAorZXh0ZXJuIGludCBkcm1fdmJsYW5rX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50IG51bV9jcnRjcyk7CiBleHRlcm4gaW50IGRybV93YWl0X3ZibGFuayhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAotCQkJICAgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpOworCQkJICAgc3RydWN0IGRybV9maWxlICpmaWxwKTsKIGV4dGVybiBpbnQgZHJtX3ZibGFua193YWl0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCAqdmJsX3NlcSk7Ci1leHRlcm4gdm9pZCBkcm1fdmJsX3NlbmRfc2lnbmFscyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKK2V4dGVybiB2b2lkIGRybV9sb2NrZWRfdGFza2xldChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAorCQkJICAgICAgIHZvaWQoKmZ1bmMpKHN0cnVjdCBkcm1fZGV2aWNlICopKTsKK2V4dGVybiB1MzIgZHJtX3ZibGFua19jb3VudChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgY3J0Yyk7CitleHRlcm4gdm9pZCBkcm1faGFuZGxlX3ZibGFuayhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgY3J0Yyk7CitleHRlcm4gaW50IGRybV92YmxhbmtfZ2V0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGludCBjcnRjKTsKK2V4dGVybiB2b2lkIGRybV92YmxhbmtfcHV0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGludCBjcnRjKTsKKy8qIE1vZGVzZXR0aW5nIHN1cHBvcnQgKi8KK2V4dGVybiBpbnQgZHJtX21vZGVzZXRfY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCisJCQkgICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdik7CiBleHRlcm4gdm9pZCBkcm1fbG9ja2VkX3Rhc2tsZXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCgqZnVuYykoc3RydWN0IGRybV9kZXZpY2UqKSk7CiAKIAkJCQkvKiBBR1AvR0FSVCBzdXBwb3J0IChkcm1fYWdwc3VwcG9ydC5oKSAqLwpAQCAtMTAyNiw2ICsxMTkwLDcgQEAKIGV4dGVybiBpbnQgZHJtX2FncF9mcmVlX21lbW9yeShEUk1fQUdQX01FTSAqIGhhbmRsZSk7CiBleHRlcm4gaW50IGRybV9hZ3BfYmluZF9tZW1vcnkoRFJNX0FHUF9NRU0gKiBoYW5kbGUsIG9mZl90IHN0YXJ0KTsKIGV4dGVybiBpbnQgZHJtX2FncF91bmJpbmRfbWVtb3J5KERSTV9BR1BfTUVNICogaGFuZGxlKTsKK2V4dGVybiB2b2lkIGRybV9hZ3BfY2hpcHNldF9mbHVzaChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKIAogCQkJCS8qIFN0dWIgc3VwcG9ydCAoZHJtX3N0dWIuaCkgKi8KIGV4dGVybiBpbnQgZHJtX2dldF9kZXYoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQsCkBAIC0xMDg4LDYgKzEyNTMsNjYgQEAKIGV4dGVybiBpbnQgZHJtX21tX3JlbW92ZV9zcGFjZV9mcm9tX3RhaWwoc3RydWN0IGRybV9tbSAqbW0sIHVuc2lnbmVkIGxvbmcgc2l6ZSk7CiBleHRlcm4gaW50IGRybV9tbV9hZGRfc3BhY2VfdG9fdGFpbChzdHJ1Y3QgZHJtX21tICptbSwgdW5zaWduZWQgbG9uZyBzaXplKTsKIAorLyogR3JhcGhpY3MgRXhlY3V0aW9uIE1hbmFnZXIgbGlicmFyeSBmdW5jdGlvbnMgKGRybV9nZW0uYykgKi8KK2ludCBkcm1fZ2VtX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldik7Cit2b2lkIGRybV9nZW1fb2JqZWN0X2ZyZWUoc3RydWN0IGtyZWYgKmtyZWYpOworc3RydWN0IGRybV9nZW1fb2JqZWN0ICpkcm1fZ2VtX29iamVjdF9hbGxvYyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAorCQkJCQkgICAgc2l6ZV90IHNpemUpOwordm9pZCBkcm1fZ2VtX29iamVjdF9oYW5kbGVfZnJlZShzdHJ1Y3Qga3JlZiAqa3JlZik7CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorZHJtX2dlbV9vYmplY3RfcmVmZXJlbmNlKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqKQoreworCWtyZWZfZ2V0KCZvYmotPnJlZmNvdW50KTsKK30KKworc3RhdGljIGlubGluZSB2b2lkCitkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZShzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaikKK3sKKwlpZiAob2JqID09IE5VTEwpCisJCXJldHVybjsKKworCWtyZWZfcHV0KCZvYmotPnJlZmNvdW50LCBkcm1fZ2VtX29iamVjdF9mcmVlKTsKK30KKworaW50IGRybV9nZW1faGFuZGxlX2NyZWF0ZShzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdiwKKwkJCSAgc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmosCisJCQkgIGludCAqaGFuZGxlcCk7CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorZHJtX2dlbV9vYmplY3RfaGFuZGxlX3JlZmVyZW5jZShzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaikKK3sKKwlkcm1fZ2VtX29iamVjdF9yZWZlcmVuY2Uob2JqKTsKKwlrcmVmX2dldCgmb2JqLT5oYW5kbGVjb3VudCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorZHJtX2dlbV9vYmplY3RfaGFuZGxlX3VucmVmZXJlbmNlKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqKQoreworCWlmIChvYmogPT0gTlVMTCkKKwkJcmV0dXJuOworCisJLyoKKwkgKiBNdXN0IGJ1bXAgaGFuZGxlIGNvdW50IGZpcnN0IGFzIHRoaXMgbWF5IGJlIHRoZSBsYXN0CisJICogcmVmLCBpbiB3aGljaCBjYXNlIHRoZSBvYmplY3Qgd291bGQgZGlzYXBwZWFyIGJlZm9yZSB3ZQorCSAqIGNoZWNrZWQgZm9yIGEgbmFtZQorCSAqLworCWtyZWZfcHV0KCZvYmotPmhhbmRsZWNvdW50LCBkcm1fZ2VtX29iamVjdF9oYW5kbGVfZnJlZSk7CisJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2Uob2JqKTsKK30KKworc3RydWN0IGRybV9nZW1fb2JqZWN0ICpkcm1fZ2VtX29iamVjdF9sb29rdXAoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJCQkJICAgICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbHAsCisJCQkJCSAgICAgaW50IGhhbmRsZSk7CitpbnQgZHJtX2dlbV9jbG9zZV9pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAorCQkJc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpOworaW50IGRybV9nZW1fZmxpbmtfaW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKKwkJCXN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KTsKK2ludCBkcm1fZ2VtX29wZW5faW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKKwkJICAgICAgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KTsKK3ZvaWQgZHJtX2dlbV9vcGVuKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2YXRlKTsKK3ZvaWQgZHJtX2dlbV9yZWxlYXNlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2YXRlKTsKKwogZXh0ZXJuIHZvaWQgZHJtX2NvcmVfaW9yZW1hcChzdHJ1Y3QgZHJtX21hcCAqbWFwLCBzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKIGV4dGVybiB2b2lkIGRybV9jb3JlX2lvcmVtYXBfd2Moc3RydWN0IGRybV9tYXAgKm1hcCwgc3RydWN0IGRybV9kZXZpY2UgKmRldik7CiBleHRlcm4gdm9pZCBkcm1fY29yZV9pb3JlbWFwZnJlZShzdHJ1Y3QgZHJtX21hcCAqbWFwLCBzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHJtL2RybV9wY2lpZHMuaCBiL2luY2x1ZGUvZHJtL2RybV9wY2lpZHMuaAppbmRleCAxMzViZDE5Li5kYTA0MTA5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2RybS9kcm1fcGNpaWRzLmgKKysrIGIvaW5jbHVkZS9kcm0vZHJtX3BjaWlkcy5oCkBAIC04NCwxOCArODQsMTggQEAKIAl7MHgxMDAyLCAweDU0NjIsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlYzODB8UkFERU9OX0lTX01PQklMSVRZfSwgXAogCXsweDEwMDIsIDB4NTQ2NCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SVjM4MHxSQURFT05fSVNfTU9CSUxJVFl9LCBcCiAJezB4MTAwMiwgMHg1NjU3LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JWMzgwfFJBREVPTl9ORVdfTUVNTUFQfSwgXAotCXsweDEwMDIsIDB4NTU0OCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SNDIwfFJBREVPTl9ORVdfTUVNTUFQfSwgXAotCXsweDEwMDIsIDB4NTU0OSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SNDIwfFJBREVPTl9ORVdfTUVNTUFQfSwgXAotCXsweDEwMDIsIDB4NTU0QSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SNDIwfFJBREVPTl9ORVdfTUVNTUFQfSwgXAotCXsweDEwMDIsIDB4NTU0QiwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SNDIwfFJBREVPTl9ORVdfTUVNTUFQfSwgXAotCXsweDEwMDIsIDB4NTU0QywgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SNDIwfFJBREVPTl9ORVdfTUVNTUFQfSwgXAotCXsweDEwMDIsIDB4NTU0RCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SNDIwfFJBREVPTl9ORVdfTUVNTUFQfSwgXAotCXsweDEwMDIsIDB4NTU0RSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SNDIwfFJBREVPTl9ORVdfTUVNTUFQfSwgXAotCXsweDEwMDIsIDB4NTU0RiwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SNDIwfFJBREVPTl9ORVdfTUVNTUFQfSwgXAotCXsweDEwMDIsIDB4NTU1MCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SNDIwfFJBREVPTl9ORVdfTUVNTUFQfSwgXAotCXsweDEwMDIsIDB4NTU1MSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SNDIwfFJBREVPTl9ORVdfTUVNTUFQfSwgXAotCXsweDEwMDIsIDB4NTU1MiwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SNDIwfFJBREVPTl9ORVdfTUVNTUFQfSwgXAotCXsweDEwMDIsIDB4NTU1NCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SNDIwfFJBREVPTl9ORVdfTUVNTUFQfSwgXAorCXsweDEwMDIsIDB4NTU0OCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SNDIzfFJBREVPTl9ORVdfTUVNTUFQfSwgXAorCXsweDEwMDIsIDB4NTU0OSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SNDIzfFJBREVPTl9ORVdfTUVNTUFQfSwgXAorCXsweDEwMDIsIDB4NTU0QSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SNDIzfFJBREVPTl9ORVdfTUVNTUFQfSwgXAorCXsweDEwMDIsIDB4NTU0QiwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SNDIzfFJBREVPTl9ORVdfTUVNTUFQfSwgXAorCXsweDEwMDIsIDB4NTU0QywgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SNDIzfFJBREVPTl9ORVdfTUVNTUFQfSwgXAorCXsweDEwMDIsIDB4NTU0RCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SNDIzfFJBREVPTl9ORVdfTUVNTUFQfSwgXAorCXsweDEwMDIsIDB4NTU0RSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SNDIzfFJBREVPTl9ORVdfTUVNTUFQfSwgXAorCXsweDEwMDIsIDB4NTU0RiwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SNDIzfFJBREVPTl9ORVdfTUVNTUFQfSwgXAorCXsweDEwMDIsIDB4NTU1MCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SNDIzfFJBREVPTl9ORVdfTUVNTUFQfSwgXAorCXsweDEwMDIsIDB4NTU1MSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SNDIzfFJBREVPTl9ORVdfTUVNTUFQfSwgXAorCXsweDEwMDIsIDB4NTU1MiwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SNDIzfFJBREVPTl9ORVdfTUVNTUFQfSwgXAorCXsweDEwMDIsIDB4NTU1NCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SNDIzfFJBREVPTl9ORVdfTUVNTUFQfSwgXAogCXsweDEwMDIsIDB4NTY0QSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SVjQxMHxSQURFT05fSVNfTU9CSUxJVFl8UkFERU9OX05FV19NRU1NQVB9LCBcCiAJezB4MTAwMiwgMHg1NjRCLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JWNDEwfFJBREVPTl9JU19NT0JJTElUWXxSQURFT05fTkVXX01FTU1BUH0sIFwKIAl7MHgxMDAyLCAweDU2NEYsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlY0MTB8UkFERU9OX0lTX01PQklMSVRZfFJBREVPTl9ORVdfTUVNTUFQfSwgXApAQCAtMTEzLDggKzExMywxMCBAQAogCXsweDEwMDIsIDB4NTk2NCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SVjI4MH0sIFwKIAl7MHgxMDAyLCAweDU5NjUsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlYyODB9LCBcCiAJezB4MTAwMiwgMHg1OTY5LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JWMTAwfSwgXAotCXsweDEwMDIsIDB4NWE2MSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SUzQ4MHxSQURFT05fSVNfSUdQfFJBREVPTl9JU19NT0JJTElUWXxSQURFT05fSVNfSUdQR0FSVH0sIFwKLQl7MHgxMDAyLCAweDVhNjIsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlM0ODB8UkFERU9OX0lTX0lHUHxSQURFT05fSVNfTU9CSUxJVFl8UkFERU9OX0lTX0lHUEdBUlR9LCBcCisJezB4MTAwMiwgMHg1YTQxLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JTNDAwfFJBREVPTl9JU19JR1B8UkFERU9OX0lTX0lHUEdBUlR9LCBcCisJezB4MTAwMiwgMHg1YTQyLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JTNDAwfFJBREVPTl9JU19JR1B8UkFERU9OX0lTX01PQklMSVRZfFJBREVPTl9JU19JR1BHQVJUfSwgXAorCXsweDEwMDIsIDB4NWE2MSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SUzQwMHxSQURFT05fSVNfSUdQfFJBREVPTl9JU19JR1BHQVJUfSwgXAorCXsweDEwMDIsIDB4NWE2MiwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SUzQwMHxSQURFT05fSVNfSUdQfFJBREVPTl9JU19NT0JJTElUWXxSQURFT05fSVNfSUdQR0FSVH0sIFwKIAl7MHgxMDAyLCAweDViNjAsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlYzODB8UkFERU9OX05FV19NRU1NQVB9LCBcCiAJezB4MTAwMiwgMHg1YjYyLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JWMzgwfFJBREVPTl9ORVdfTUVNTUFQfSwgXAogCXsweDEwMDIsIDB4NWI2MywgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SVjM4MHxSQURFT05fTkVXX01FTU1BUH0sIFwKQEAgLTEyMiwxNiArMTI0LDE2IEBACiAJezB4MTAwMiwgMHg1YjY1LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JWMzgwfFJBREVPTl9ORVdfTUVNTUFQfSwgXAogCXsweDEwMDIsIDB4NWM2MSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SVjI4MHxSQURFT05fSVNfTU9CSUxJVFl9LCBcCiAJezB4MTAwMiwgMHg1YzYzLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JWMjgwfFJBREVPTl9JU19NT0JJTElUWX0sIFwKLQl7MHgxMDAyLCAweDVkNDgsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUjQyMHxSQURFT05fSVNfTU9CSUxJVFl8UkFERU9OX05FV19NRU1NQVB9LCBcCi0JezB4MTAwMiwgMHg1ZDQ5LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1I0MjB8UkFERU9OX0lTX01PQklMSVRZfFJBREVPTl9ORVdfTUVNTUFQfSwgXAotCXsweDEwMDIsIDB4NWQ0YSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SNDIwfFJBREVPTl9JU19NT0JJTElUWXxSQURFT05fTkVXX01FTU1BUH0sIFwKLQl7MHgxMDAyLCAweDVkNGMsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUjQyMHxSQURFT05fTkVXX01FTU1BUH0sIFwKLQl7MHgxMDAyLCAweDVkNGQsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUjQyMHxSQURFT05fTkVXX01FTU1BUH0sIFwKLQl7MHgxMDAyLCAweDVkNGUsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUjQyMHxSQURFT05fTkVXX01FTU1BUH0sIFwKLQl7MHgxMDAyLCAweDVkNGYsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUjQyMHxSQURFT05fTkVXX01FTU1BUH0sIFwKLQl7MHgxMDAyLCAweDVkNTAsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUjQyMHxSQURFT05fTkVXX01FTU1BUH0sIFwKLQl7MHgxMDAyLCAweDVkNTIsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUjQyMHxSQURFT05fTkVXX01FTU1BUH0sIFwKLQl7MHgxMDAyLCAweDVkNTcsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUjQyMHxSQURFT05fTkVXX01FTU1BUH0sIFwKKwl7MHgxMDAyLCAweDVkNDgsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUjQyM3xSQURFT05fSVNfTU9CSUxJVFl8UkFERU9OX05FV19NRU1NQVB9LCBcCisJezB4MTAwMiwgMHg1ZDQ5LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1I0MjN8UkFERU9OX0lTX01PQklMSVRZfFJBREVPTl9ORVdfTUVNTUFQfSwgXAorCXsweDEwMDIsIDB4NWQ0YSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SNDIzfFJBREVPTl9JU19NT0JJTElUWXxSQURFT05fTkVXX01FTU1BUH0sIFwKKwl7MHgxMDAyLCAweDVkNGMsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUjQyM3xSQURFT05fTkVXX01FTU1BUH0sIFwKKwl7MHgxMDAyLCAweDVkNGQsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUjQyM3xSQURFT05fTkVXX01FTU1BUH0sIFwKKwl7MHgxMDAyLCAweDVkNGUsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUjQyM3xSQURFT05fTkVXX01FTU1BUH0sIFwKKwl7MHgxMDAyLCAweDVkNGYsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUjQyM3xSQURFT05fTkVXX01FTU1BUH0sIFwKKwl7MHgxMDAyLCAweDVkNTAsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUjQyM3xSQURFT05fTkVXX01FTU1BUH0sIFwKKwl7MHgxMDAyLCAweDVkNTIsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUjQyM3xSQURFT05fTkVXX01FTU1BUH0sIFwKKwl7MHgxMDAyLCAweDVkNTcsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUjQyM3xSQURFT05fTkVXX01FTU1BUH0sIFwKIAl7MHgxMDAyLCAweDVlNDgsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlY0MTB8UkFERU9OX05FV19NRU1NQVB9LCBcCiAJezB4MTAwMiwgMHg1ZTRhLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JWNDEwfFJBREVPTl9ORVdfTUVNTUFQfSwgXAogCXsweDEwMDIsIDB4NWU0YiwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SVjQxMHxSQURFT05fTkVXX01FTU1BUH0sIFwKQEAgLTIzNyw2ICsyMzksMTAgQEAKIAl7MHgxMDAyLCAweDc4MzUsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlMzMDB8UkFERU9OX0lTX0lHUHxSQURFT05fSVNfTU9CSUxJVFl8UkFERU9OX05FV19NRU1NQVB9LCBcCiAJezB4MTAwMiwgMHg3OTFlLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JTNjkwfFJBREVPTl9JU19JR1B8UkFERU9OX05FV19NRU1NQVB8UkFERU9OX0lTX0lHUEdBUlR9LCBcCiAJezB4MTAwMiwgMHg3OTFmLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JTNjkwfFJBREVPTl9JU19JR1B8UkFERU9OX05FV19NRU1NQVB8UkFERU9OX0lTX0lHUEdBUlR9LCBcCisJezB4MTAwMiwgMHg3OTZjLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JTNzQwfFJBREVPTl9JU19JR1B8UkFERU9OX05FV19NRU1NQVB8UkFERU9OX0lTX0lHUEdBUlR9LCBcCisJezB4MTAwMiwgMHg3OTZkLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JTNzQwfFJBREVPTl9JU19JR1B8UkFERU9OX05FV19NRU1NQVB8UkFERU9OX0lTX0lHUEdBUlR9LCBcCisJezB4MTAwMiwgMHg3OTZlLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JTNzQwfFJBREVPTl9JU19JR1B8UkFERU9OX05FV19NRU1NQVB8UkFERU9OX0lTX0lHUEdBUlR9LCBcCisJezB4MTAwMiwgMHg3OTZmLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JTNzQwfFJBREVPTl9JU19JR1B8UkFERU9OX05FV19NRU1NQVB8UkFERU9OX0lTX0lHUEdBUlR9LCBcCiAJezAsIDAsIDB9CiAKICNkZWZpbmUgcjEyOF9QQ0lfSURTIFwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHJtL2k5MTVfZHJtLmggYi9pbmNsdWRlL2RybS9pOTE1X2RybS5oCmluZGV4IDA1YzY2Y2YuLmViNGIzNTAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZHJtL2k5MTVfZHJtLmgKKysrIGIvaW5jbHVkZS9kcm0vaTkxNV9kcm0uaApAQCAtMTQzLDYgKzE0MywyMiBAQAogI2RlZmluZSBEUk1fSTkxNV9HRVRfVkJMQU5LX1BJUEUJMHgwZQogI2RlZmluZSBEUk1fSTkxNV9WQkxBTktfU1dBUAkweDBmCiAjZGVmaW5lIERSTV9JOTE1X0hXU19BRERSCTB4MTEKKyNkZWZpbmUgRFJNX0k5MTVfR0VNX0lOSVQJMHgxMworI2RlZmluZSBEUk1fSTkxNV9HRU1fRVhFQ0JVRkZFUgkweDE0CisjZGVmaW5lIERSTV9JOTE1X0dFTV9QSU4JMHgxNQorI2RlZmluZSBEUk1fSTkxNV9HRU1fVU5QSU4JMHgxNgorI2RlZmluZSBEUk1fSTkxNV9HRU1fQlVTWQkweDE3CisjZGVmaW5lIERSTV9JOTE1X0dFTV9USFJPVFRMRQkweDE4CisjZGVmaW5lIERSTV9JOTE1X0dFTV9FTlRFUlZUCTB4MTkKKyNkZWZpbmUgRFJNX0k5MTVfR0VNX0xFQVZFVlQJMHgxYQorI2RlZmluZSBEUk1fSTkxNV9HRU1fQ1JFQVRFCTB4MWIKKyNkZWZpbmUgRFJNX0k5MTVfR0VNX1BSRUFECTB4MWMKKyNkZWZpbmUgRFJNX0k5MTVfR0VNX1BXUklURQkweDFkCisjZGVmaW5lIERSTV9JOTE1X0dFTV9NTUFQCTB4MWUKKyNkZWZpbmUgRFJNX0k5MTVfR0VNX1NFVF9ET01BSU4JMHgxZgorI2RlZmluZSBEUk1fSTkxNV9HRU1fU1dfRklOSVNICTB4MjAKKyNkZWZpbmUgRFJNX0k5MTVfR0VNX1NFVF9USUxJTkcJMHgyMQorI2RlZmluZSBEUk1fSTkxNV9HRU1fR0VUX1RJTElORwkweDIyCiAKICNkZWZpbmUgRFJNX0lPQ1RMX0k5MTVfSU5JVAkJRFJNX0lPVyggRFJNX0NPTU1BTkRfQkFTRSArIERSTV9JOTE1X0lOSVQsIGRybV9pOTE1X2luaXRfdCkKICNkZWZpbmUgRFJNX0lPQ1RMX0k5MTVfRkxVU0gJCURSTV9JTyAoIERSTV9DT01NQU5EX0JBU0UgKyBEUk1fSTkxNV9GTFVTSCkKQEAgLTE2MCw2ICsxNzYsMjAgQEAKICNkZWZpbmUgRFJNX0lPQ1RMX0k5MTVfU0VUX1ZCTEFOS19QSVBFCURSTV9JT1coIERSTV9DT01NQU5EX0JBU0UgKyBEUk1fSTkxNV9TRVRfVkJMQU5LX1BJUEUsIGRybV9pOTE1X3ZibGFua19waXBlX3QpCiAjZGVmaW5lIERSTV9JT0NUTF9JOTE1X0dFVF9WQkxBTktfUElQRQlEUk1fSU9SKCBEUk1fQ09NTUFORF9CQVNFICsgRFJNX0k5MTVfR0VUX1ZCTEFOS19QSVBFLCBkcm1faTkxNV92YmxhbmtfcGlwZV90KQogI2RlZmluZSBEUk1fSU9DVExfSTkxNV9WQkxBTktfU1dBUAlEUk1fSU9XUihEUk1fQ09NTUFORF9CQVNFICsgRFJNX0k5MTVfVkJMQU5LX1NXQVAsIGRybV9pOTE1X3ZibGFua19zd2FwX3QpCisjZGVmaW5lIERSTV9JT0NUTF9JOTE1X0dFTV9QSU4JCURSTV9JT1dSKERSTV9DT01NQU5EX0JBU0UgKyBEUk1fSTkxNV9HRU1fUElOLCBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3BpbikKKyNkZWZpbmUgRFJNX0lPQ1RMX0k5MTVfR0VNX1VOUElOCURSTV9JT1coRFJNX0NPTU1BTkRfQkFTRSArIERSTV9JOTE1X0dFTV9VTlBJTiwgc3RydWN0IGRybV9pOTE1X2dlbV91bnBpbikKKyNkZWZpbmUgRFJNX0lPQ1RMX0k5MTVfR0VNX0JVU1kJCURSTV9JT1dSKERSTV9DT01NQU5EX0JBU0UgKyBEUk1fSTkxNV9HRU1fQlVTWSwgc3RydWN0IGRybV9pOTE1X2dlbV9idXN5KQorI2RlZmluZSBEUk1fSU9DVExfSTkxNV9HRU1fVEhST1RUTEUJRFJNX0lPICggRFJNX0NPTU1BTkRfQkFTRSArIERSTV9JOTE1X0dFTV9USFJPVFRMRSkKKyNkZWZpbmUgRFJNX0lPQ1RMX0k5MTVfR0VNX0VOVEVSVlQJRFJNX0lPKERSTV9DT01NQU5EX0JBU0UgKyBEUk1fSTkxNV9HRU1fRU5URVJWVCkKKyNkZWZpbmUgRFJNX0lPQ1RMX0k5MTVfR0VNX0xFQVZFVlQJRFJNX0lPKERSTV9DT01NQU5EX0JBU0UgKyBEUk1fSTkxNV9HRU1fTEVBVkVWVCkKKyNkZWZpbmUgRFJNX0lPQ1RMX0k5MTVfR0VNX0NSRUFURQlEUk1fSU9XUihEUk1fQ09NTUFORF9CQVNFICsgRFJNX0k5MTVfR0VNX0NSRUFURSwgc3RydWN0IGRybV9pOTE1X2dlbV9jcmVhdGUpCisjZGVmaW5lIERSTV9JT0NUTF9JOTE1X0dFTV9QUkVBRAlEUk1fSU9XIChEUk1fQ09NTUFORF9CQVNFICsgRFJNX0k5MTVfR0VNX1BSRUFELCBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3ByZWFkKQorI2RlZmluZSBEUk1fSU9DVExfSTkxNV9HRU1fUFdSSVRFCURSTV9JT1cgKERSTV9DT01NQU5EX0JBU0UgKyBEUk1fSTkxNV9HRU1fUFdSSVRFLCBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3B3cml0ZSkKKyNkZWZpbmUgRFJNX0lPQ1RMX0k5MTVfR0VNX01NQVAJCURSTV9JT1dSKERSTV9DT01NQU5EX0JBU0UgKyBEUk1fSTkxNV9HRU1fTU1BUCwgc3RydWN0IGRybV9pOTE1X2dlbV9tbWFwKQorI2RlZmluZSBEUk1fSU9DVExfSTkxNV9HRU1fU0VUX0RPTUFJTglEUk1fSU9XIChEUk1fQ09NTUFORF9CQVNFICsgRFJNX0k5MTVfR0VNX1NFVF9ET01BSU4sIHN0cnVjdCBkcm1faTkxNV9nZW1fc2V0X2RvbWFpbikKKyNkZWZpbmUgRFJNX0lPQ1RMX0k5MTVfR0VNX1NXX0ZJTklTSAlEUk1fSU9XIChEUk1fQ09NTUFORF9CQVNFICsgRFJNX0k5MTVfR0VNX1NXX0ZJTklTSCwgc3RydWN0IGRybV9pOTE1X2dlbV9zd19maW5pc2gpCisjZGVmaW5lIERSTV9JT0NUTF9JOTE1X0dFTV9TRVRfVElMSU5HCURSTV9JT1dSIChEUk1fQ09NTUFORF9CQVNFICsgRFJNX0k5MTVfR0VNX1NFVF9USUxJTkcsIHN0cnVjdCBkcm1faTkxNV9nZW1fc2V0X3RpbGluZykKKyNkZWZpbmUgRFJNX0lPQ1RMX0k5MTVfR0VNX0dFVF9USUxJTkcJRFJNX0lPV1IgKERSTV9DT01NQU5EX0JBU0UgKyBEUk1fSTkxNV9HRU1fR0VUX1RJTElORywgc3RydWN0IGRybV9pOTE1X2dlbV9nZXRfdGlsaW5nKQogCiAvKiBBbGxvdyBkcml2ZXJzIHRvIHN1Ym1pdCBiYXRjaGJ1ZmZlcnMgZGlyZWN0bHkgdG8gaGFyZHdhcmUsIHJlbHlpbmcKICAqIG9uIHRoZSBzZWN1cml0eSBtZWNoYW5pc21zIHByb3ZpZGVkIGJ5IGhhcmR3YXJlLgpAQCAtMjAwLDYgKzIzMCw4IEBACiAjZGVmaW5lIEk5MTVfUEFSQU1fSVJRX0FDVElWRSAgICAgICAgICAgIDEKICNkZWZpbmUgSTkxNV9QQVJBTV9BTExPV19CQVRDSEJVRkZFUiAgICAgMgogI2RlZmluZSBJOTE1X1BBUkFNX0xBU1RfRElTUEFUQ0ggICAgICAgICAzCisjZGVmaW5lIEk5MTVfUEFSQU1fQ0hJUFNFVF9JRCAgICAgICAgICAgIDQKKyNkZWZpbmUgSTkxNV9QQVJBTV9IQVNfR0VNICAgICAgICAgICAgICAgNQogCiB0eXBlZGVmIHN0cnVjdCBkcm1faTkxNV9nZXRwYXJhbSB7CiAJaW50IHBhcmFtOwpAQCAtMjY3LDQgKzI5OSwzMDUgQEAKIAl1aW50NjRfdCBhZGRyOwogfSBkcm1faTkxNV9od3NfYWRkcl90OwogCitzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2luaXQgeworCS8qKgorCSAqIEJlZ2lubmluZyBvZmZzZXQgaW4gdGhlIEdUVCB0byBiZSBtYW5hZ2VkIGJ5IHRoZSBEUk0gbWVtb3J5CisJICogbWFuYWdlci4KKwkgKi8KKwl1aW50NjRfdCBndHRfc3RhcnQ7CisJLyoqCisJICogRW5kaW5nIG9mZnNldCBpbiB0aGUgR1RUIHRvIGJlIG1hbmFnZWQgYnkgdGhlIERSTSBtZW1vcnkKKwkgKiBtYW5hZ2VyLgorCSAqLworCXVpbnQ2NF90IGd0dF9lbmQ7Cit9OworCitzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2NyZWF0ZSB7CisJLyoqCisJICogUmVxdWVzdGVkIHNpemUgZm9yIHRoZSBvYmplY3QuCisJICoKKwkgKiBUaGUgKHBhZ2UtYWxpZ25lZCkgYWxsb2NhdGVkIHNpemUgZm9yIHRoZSBvYmplY3Qgd2lsbCBiZSByZXR1cm5lZC4KKwkgKi8KKwl1aW50NjRfdCBzaXplOworCS8qKgorCSAqIFJldHVybmVkIGhhbmRsZSBmb3IgdGhlIG9iamVjdC4KKwkgKgorCSAqIE9iamVjdCBoYW5kbGVzIGFyZSBub256ZXJvLgorCSAqLworCXVpbnQzMl90IGhhbmRsZTsKKwl1aW50MzJfdCBwYWQ7Cit9OworCitzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3ByZWFkIHsKKwkvKiogSGFuZGxlIGZvciB0aGUgb2JqZWN0IGJlaW5nIHJlYWQuICovCisJdWludDMyX3QgaGFuZGxlOworCXVpbnQzMl90IHBhZDsKKwkvKiogT2Zmc2V0IGludG8gdGhlIG9iamVjdCB0byByZWFkIGZyb20gKi8KKwl1aW50NjRfdCBvZmZzZXQ7CisJLyoqIExlbmd0aCBvZiBkYXRhIHRvIHJlYWQgKi8KKwl1aW50NjRfdCBzaXplOworCS8qKgorCSAqIFBvaW50ZXIgdG8gd3JpdGUgdGhlIGRhdGEgaW50by4KKwkgKgorCSAqIFRoaXMgaXMgYSBmaXhlZC1zaXplIHR5cGUgZm9yIDMyLzY0IGNvbXBhdGliaWxpdHkuCisJICovCisJdWludDY0X3QgZGF0YV9wdHI7Cit9OworCitzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3B3cml0ZSB7CisJLyoqIEhhbmRsZSBmb3IgdGhlIG9iamVjdCBiZWluZyB3cml0dGVuIHRvLiAqLworCXVpbnQzMl90IGhhbmRsZTsKKwl1aW50MzJfdCBwYWQ7CisJLyoqIE9mZnNldCBpbnRvIHRoZSBvYmplY3QgdG8gd3JpdGUgdG8gKi8KKwl1aW50NjRfdCBvZmZzZXQ7CisJLyoqIExlbmd0aCBvZiBkYXRhIHRvIHdyaXRlICovCisJdWludDY0X3Qgc2l6ZTsKKwkvKioKKwkgKiBQb2ludGVyIHRvIHJlYWQgdGhlIGRhdGEgZnJvbS4KKwkgKgorCSAqIFRoaXMgaXMgYSBmaXhlZC1zaXplIHR5cGUgZm9yIDMyLzY0IGNvbXBhdGliaWxpdHkuCisJICovCisJdWludDY0X3QgZGF0YV9wdHI7Cit9OworCitzdHJ1Y3QgZHJtX2k5MTVfZ2VtX21tYXAgeworCS8qKiBIYW5kbGUgZm9yIHRoZSBvYmplY3QgYmVpbmcgbWFwcGVkLiAqLworCXVpbnQzMl90IGhhbmRsZTsKKwl1aW50MzJfdCBwYWQ7CisJLyoqIE9mZnNldCBpbiB0aGUgb2JqZWN0IHRvIG1hcC4gKi8KKwl1aW50NjRfdCBvZmZzZXQ7CisJLyoqCisJICogTGVuZ3RoIG9mIGRhdGEgdG8gbWFwLgorCSAqCisJICogVGhlIHZhbHVlIHdpbGwgYmUgcGFnZS1hbGlnbmVkLgorCSAqLworCXVpbnQ2NF90IHNpemU7CisJLyoqCisJICogUmV0dXJuZWQgcG9pbnRlciB0aGUgZGF0YSB3YXMgbWFwcGVkIGF0LgorCSAqCisJICogVGhpcyBpcyBhIGZpeGVkLXNpemUgdHlwZSBmb3IgMzIvNjQgY29tcGF0aWJpbGl0eS4KKwkgKi8KKwl1aW50NjRfdCBhZGRyX3B0cjsKK307CisKK3N0cnVjdCBkcm1faTkxNV9nZW1fc2V0X2RvbWFpbiB7CisJLyoqIEhhbmRsZSBmb3IgdGhlIG9iamVjdCAqLworCXVpbnQzMl90IGhhbmRsZTsKKworCS8qKiBOZXcgcmVhZCBkb21haW5zICovCisJdWludDMyX3QgcmVhZF9kb21haW5zOworCisJLyoqIE5ldyB3cml0ZSBkb21haW4gKi8KKwl1aW50MzJfdCB3cml0ZV9kb21haW47Cit9OworCitzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3N3X2ZpbmlzaCB7CisJLyoqIEhhbmRsZSBmb3IgdGhlIG9iamVjdCAqLworCXVpbnQzMl90IGhhbmRsZTsKK307CisKK3N0cnVjdCBkcm1faTkxNV9nZW1fcmVsb2NhdGlvbl9lbnRyeSB7CisJLyoqCisJICogSGFuZGxlIG9mIHRoZSBidWZmZXIgYmVpbmcgcG9pbnRlZCB0byBieSB0aGlzIHJlbG9jYXRpb24gZW50cnkuCisJICoKKwkgKiBJdCdzIGFwcGVhbGluZyB0byBtYWtlIHRoaXMgYmUgYW4gaW5kZXggaW50byB0aGUgbW1fdmFsaWRhdGVfZW50cnkKKwkgKiBsaXN0IHRvIHJlZmVyIHRvIHRoZSBidWZmZXIsIGJ1dCB0aGlzIGFsbG93cyB0aGUgZHJpdmVyIHRvIGNyZWF0ZQorCSAqIGEgcmVsb2NhdGlvbiBsaXN0IGZvciBzdGF0ZSBidWZmZXJzIGFuZCBub3QgcmUtd3JpdGUgaXQgcGVyCisJICogZXhlYyB1c2luZyB0aGUgYnVmZmVyLgorCSAqLworCXVpbnQzMl90IHRhcmdldF9oYW5kbGU7CisKKwkvKioKKwkgKiBWYWx1ZSB0byBiZSBhZGRlZCB0byB0aGUgb2Zmc2V0IG9mIHRoZSB0YXJnZXQgYnVmZmVyIHRvIG1ha2UgdXAKKwkgKiB0aGUgcmVsb2NhdGlvbiBlbnRyeS4KKwkgKi8KKwl1aW50MzJfdCBkZWx0YTsKKworCS8qKiBPZmZzZXQgaW4gdGhlIGJ1ZmZlciB0aGUgcmVsb2NhdGlvbiBlbnRyeSB3aWxsIGJlIHdyaXR0ZW4gaW50byAqLworCXVpbnQ2NF90IG9mZnNldDsKKworCS8qKgorCSAqIE9mZnNldCB2YWx1ZSBvZiB0aGUgdGFyZ2V0IGJ1ZmZlciB0aGF0IHRoZSByZWxvY2F0aW9uIGVudHJ5IHdhcyBsYXN0CisJICogd3JpdHRlbiBhcy4KKwkgKgorCSAqIElmIHRoZSBidWZmZXIgaGFzIHRoZSBzYW1lIG9mZnNldCBhcyBsYXN0IHRpbWUsIHdlIGNhbiBza2lwIHN5bmNpbmcKKwkgKiBhbmQgd3JpdGluZyB0aGUgcmVsb2NhdGlvbi4gIFRoaXMgdmFsdWUgaXMgd3JpdHRlbiBiYWNrIG91dCBieQorCSAqIHRoZSBleGVjYnVmZmVyIGlvY3RsIHdoZW4gdGhlIHJlbG9jYXRpb24gaXMgd3JpdHRlbi4KKwkgKi8KKwl1aW50NjRfdCBwcmVzdW1lZF9vZmZzZXQ7CisKKwkvKioKKwkgKiBUYXJnZXQgbWVtb3J5IGRvbWFpbnMgcmVhZCBieSB0aGlzIG9wZXJhdGlvbi4KKwkgKi8KKwl1aW50MzJfdCByZWFkX2RvbWFpbnM7CisKKwkvKioKKwkgKiBUYXJnZXQgbWVtb3J5IGRvbWFpbnMgd3JpdHRlbiBieSB0aGlzIG9wZXJhdGlvbi4KKwkgKgorCSAqIE5vdGUgdGhhdCBvbmx5IG9uZSBkb21haW4gbWF5IGJlIHdyaXR0ZW4gYnkgdGhlIHdob2xlCisJICogZXhlY2J1ZmZlciBvcGVyYXRpb24sIHNvIHRoYXQgd2hlcmUgdGhlcmUgYXJlIGNvbmZsaWN0cywKKwkgKiB0aGUgYXBwbGljYXRpb24gd2lsbCBnZXQgLUVJTlZBTCBiYWNrLgorCSAqLworCXVpbnQzMl90IHdyaXRlX2RvbWFpbjsKK307CisKKy8qKiBAeworICogSW50ZWwgbWVtb3J5IGRvbWFpbnMKKyAqCisgKiBNb3N0IG9mIHRoZXNlIGp1c3QgYWxpZ24gd2l0aCB0aGUgdmFyaW91cyBjYWNoZXMgaW4KKyAqIHRoZSBzeXN0ZW0gYW5kIGFyZSB1c2VkIHRvIGZsdXNoIGFuZCBpbnZhbGlkYXRlIGFzCisgKiBvYmplY3RzIGVuZCB1cCBjYWNoZWQgaW4gZGlmZmVyZW50IGRvbWFpbnMuCisgKi8KKy8qKiBDUFUgY2FjaGUgKi8KKyNkZWZpbmUgSTkxNV9HRU1fRE9NQUlOX0NQVQkJMHgwMDAwMDAwMQorLyoqIFJlbmRlciBjYWNoZSwgdXNlZCBieSAyRCBhbmQgM0QgZHJhd2luZyAqLworI2RlZmluZSBJOTE1X0dFTV9ET01BSU5fUkVOREVSCQkweDAwMDAwMDAyCisvKiogU2FtcGxlciBjYWNoZSwgdXNlZCBieSB0ZXh0dXJlIGVuZ2luZSAqLworI2RlZmluZSBJOTE1X0dFTV9ET01BSU5fU0FNUExFUgkJMHgwMDAwMDAwNAorLyoqIENvbW1hbmQgcXVldWUsIHVzZWQgdG8gbG9hZCBiYXRjaCBidWZmZXJzICovCisjZGVmaW5lIEk5MTVfR0VNX0RPTUFJTl9DT01NQU5ECQkweDAwMDAwMDA4CisvKiogSW5zdHJ1Y3Rpb24gY2FjaGUsIHVzZWQgYnkgc2hhZGVyIHByb2dyYW1zICovCisjZGVmaW5lIEk5MTVfR0VNX0RPTUFJTl9JTlNUUlVDVElPTgkweDAwMDAwMDEwCisvKiogVmVydGV4IGFkZHJlc3MgY2FjaGUgKi8KKyNkZWZpbmUgSTkxNV9HRU1fRE9NQUlOX1ZFUlRFWAkJMHgwMDAwMDAyMAorLyoqIEdUVCBkb21haW4gLSBhcGVydHVyZSBhbmQgc2Nhbm91dCAqLworI2RlZmluZSBJOTE1X0dFTV9ET01BSU5fR1RUCQkweDAwMDAwMDQwCisvKiogQH0gKi8KKworc3RydWN0IGRybV9pOTE1X2dlbV9leGVjX29iamVjdCB7CisJLyoqCisJICogVXNlcidzIGhhbmRsZSBmb3IgYSBidWZmZXIgdG8gYmUgYm91bmQgaW50byB0aGUgR1RUIGZvciB0aGlzCisJICogb3BlcmF0aW9uLgorCSAqLworCXVpbnQzMl90IGhhbmRsZTsKKworCS8qKiBOdW1iZXIgb2YgcmVsb2NhdGlvbnMgdG8gYmUgcGVyZm9ybWVkIG9uIHRoaXMgYnVmZmVyICovCisJdWludDMyX3QgcmVsb2NhdGlvbl9jb3VudDsKKwkvKioKKwkgKiBQb2ludGVyIHRvIGFycmF5IG9mIHN0cnVjdCBkcm1faTkxNV9nZW1fcmVsb2NhdGlvbl9lbnRyeSBjb250YWluaW5nCisJICogdGhlIHJlbG9jYXRpb25zIHRvIGJlIHBlcmZvcm1lZCBpbiB0aGlzIGJ1ZmZlci4KKwkgKi8KKwl1aW50NjRfdCByZWxvY3NfcHRyOworCisJLyoqIFJlcXVpcmVkIGFsaWdubWVudCBpbiBncmFwaGljcyBhcGVydHVyZSAqLworCXVpbnQ2NF90IGFsaWdubWVudDsKKworCS8qKgorCSAqIFJldHVybmVkIHZhbHVlIG9mIHRoZSB1cGRhdGVkIG9mZnNldCBvZiB0aGUgb2JqZWN0LCBmb3IgZnV0dXJlCisJICogcHJlc3VtZWRfb2Zmc2V0IHdyaXRlcy4KKwkgKi8KKwl1aW50NjRfdCBvZmZzZXQ7Cit9OworCitzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNidWZmZXIgeworCS8qKgorCSAqIExpc3Qgb2YgYnVmZmVycyB0byBiZSB2YWxpZGF0ZWQgd2l0aCB0aGVpciByZWxvY2F0aW9ucyB0byBiZQorCSAqIHBlcmZvcm1lbmQgb24gdGhlbS4KKwkgKgorCSAqIFRoaXMgaXMgYSBwb2ludGVyIHRvIGFuIGFycmF5IG9mIHN0cnVjdCBkcm1faTkxNV9nZW1fdmFsaWRhdGVfZW50cnkuCisJICoKKwkgKiBUaGVzZSBidWZmZXJzIG11c3QgYmUgbGlzdGVkIGluIGFuIG9yZGVyIHN1Y2ggdGhhdCBhbGwgcmVsb2NhdGlvbnMKKwkgKiBhIGJ1ZmZlciBpcyBwZXJmb3JtaW5nIHJlZmVyIHRvIGJ1ZmZlcnMgdGhhdCBoYXZlIGFscmVhZHkgYXBwZWFyZWQKKwkgKiBpbiB0aGUgdmFsaWRhdGUgbGlzdC4KKwkgKi8KKwl1aW50NjRfdCBidWZmZXJzX3B0cjsKKwl1aW50MzJfdCBidWZmZXJfY291bnQ7CisKKwkvKiogT2Zmc2V0IGluIHRoZSBiYXRjaGJ1ZmZlciB0byBzdGFydCBleGVjdXRpb24gZnJvbS4gKi8KKwl1aW50MzJfdCBiYXRjaF9zdGFydF9vZmZzZXQ7CisJLyoqIEJ5dGVzIHVzZWQgaW4gYmF0Y2hidWZmZXIgZnJvbSBiYXRjaF9zdGFydF9vZmZzZXQgKi8KKwl1aW50MzJfdCBiYXRjaF9sZW47CisJdWludDMyX3QgRFIxOworCXVpbnQzMl90IERSNDsKKwl1aW50MzJfdCBudW1fY2xpcHJlY3RzOworCS8qKiBUaGlzIGlzIGEgc3RydWN0IGRybV9jbGlwX3JlY3QgKmNsaXByZWN0cyAqLworCXVpbnQ2NF90IGNsaXByZWN0c19wdHI7Cit9OworCitzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3BpbiB7CisJLyoqIEhhbmRsZSBvZiB0aGUgYnVmZmVyIHRvIGJlIHBpbm5lZC4gKi8KKwl1aW50MzJfdCBoYW5kbGU7CisJdWludDMyX3QgcGFkOworCisJLyoqIGFsaWdubWVudCByZXF1aXJlZCB3aXRoaW4gdGhlIGFwZXJ0dXJlICovCisJdWludDY0X3QgYWxpZ25tZW50OworCisJLyoqIFJldHVybmVkIEdUVCBvZmZzZXQgb2YgdGhlIGJ1ZmZlci4gKi8KKwl1aW50NjRfdCBvZmZzZXQ7Cit9OworCitzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3VucGluIHsKKwkvKiogSGFuZGxlIG9mIHRoZSBidWZmZXIgdG8gYmUgdW5waW5uZWQuICovCisJdWludDMyX3QgaGFuZGxlOworCXVpbnQzMl90IHBhZDsKK307CisKK3N0cnVjdCBkcm1faTkxNV9nZW1fYnVzeSB7CisJLyoqIEhhbmRsZSBvZiB0aGUgYnVmZmVyIHRvIGNoZWNrIGZvciBidXN5ICovCisJdWludDMyX3QgaGFuZGxlOworCisJLyoqIFJldHVybiBidXN5IHN0YXR1cyAoMSBpZiBidXN5LCAwIGlmIGlkbGUpICovCisJdWludDMyX3QgYnVzeTsKK307CisKKyNkZWZpbmUgSTkxNV9USUxJTkdfTk9ORQkwCisjZGVmaW5lIEk5MTVfVElMSU5HX1gJCTEKKyNkZWZpbmUgSTkxNV9USUxJTkdfWQkJMgorCisjZGVmaW5lIEk5MTVfQklUXzZfU1dJWlpMRV9OT05FCQkwCisjZGVmaW5lIEk5MTVfQklUXzZfU1dJWlpMRV85CQkxCisjZGVmaW5lIEk5MTVfQklUXzZfU1dJWlpMRV85XzEwCQkyCisjZGVmaW5lIEk5MTVfQklUXzZfU1dJWlpMRV85XzExCQkzCisjZGVmaW5lIEk5MTVfQklUXzZfU1dJWlpMRV85XzEwXzExCTQKKy8qIE5vdCBzZWVuIGJ5IHVzZXJsYW5kICovCisjZGVmaW5lIEk5MTVfQklUXzZfU1dJWlpMRV9VTktOT1dOCTUKKworc3RydWN0IGRybV9pOTE1X2dlbV9zZXRfdGlsaW5nIHsKKwkvKiogSGFuZGxlIG9mIHRoZSBidWZmZXIgdG8gaGF2ZSBpdHMgdGlsaW5nIHN0YXRlIHVwZGF0ZWQgKi8KKwl1aW50MzJfdCBoYW5kbGU7CisKKwkvKioKKwkgKiBUaWxpbmcgbW9kZSBmb3IgdGhlIG9iamVjdCAoSTkxNV9USUxJTkdfTk9ORSwgSTkxNV9USUxJTkdfWCwKKwkgKiBJOTE1X1RJTElOR19ZKS4KKwkgKgorCSAqIFRoaXMgdmFsdWUgaXMgdG8gYmUgc2V0IG9uIHJlcXVlc3QsIGFuZCB3aWxsIGJlIHVwZGF0ZWQgYnkgdGhlCisJICoga2VybmVsIG9uIHN1Y2Nlc3NmdWwgcmV0dXJuIHdpdGggdGhlIGFjdHVhbCBjaG9zZW4gdGlsaW5nIGxheW91dC4KKwkgKgorCSAqIFRoZSB0aWxpbmcgbW9kZSBtYXkgYmUgZGVtb3RlZCB0byBJOTE1X1RJTElOR19OT05FIHdoZW4gdGhlIHN5c3RlbQorCSAqIGhhcyBiaXQgNiBzd2l6emxpbmcgdGhhdCBjYW4ndCBiZSBtYW5hZ2VkIGNvcnJlY3RseSBieSBHRU0uCisJICoKKwkgKiBCdWZmZXIgY29udGVudHMgYmVjb21lIHVuZGVmaW5lZCB3aGVuIGNoYW5naW5nIHRpbGluZ19tb2RlLgorCSAqLworCXVpbnQzMl90IHRpbGluZ19tb2RlOworCisJLyoqCisJICogU3RyaWRlIGluIGJ5dGVzIGZvciB0aGUgb2JqZWN0IHdoZW4gaW4gSTkxNV9USUxJTkdfWCBvcgorCSAqIEk5MTVfVElMSU5HX1kuCisJICovCisJdWludDMyX3Qgc3RyaWRlOworCisJLyoqCisJICogUmV0dXJuZWQgYWRkcmVzcyBiaXQgNiBzd2l6emxpbmcgcmVxdWlyZWQgZm9yIENQVSBhY2Nlc3MgdGhyb3VnaAorCSAqIG1tYXAgbWFwcGluZy4KKwkgKi8KKwl1aW50MzJfdCBzd2l6emxlX21vZGU7Cit9OworCitzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2dldF90aWxpbmcgeworCS8qKiBIYW5kbGUgb2YgdGhlIGJ1ZmZlciB0byBnZXQgdGlsaW5nIHN0YXRlIGZvci4gKi8KKwl1aW50MzJfdCBoYW5kbGU7CisKKwkvKioKKwkgKiBDdXJyZW50IHRpbGluZyBtb2RlIGZvciB0aGUgb2JqZWN0IChJOTE1X1RJTElOR19OT05FLCBJOTE1X1RJTElOR19YLAorCSAqIEk5MTVfVElMSU5HX1kpLgorCSAqLworCXVpbnQzMl90IHRpbGluZ19tb2RlOworCisJLyoqCisJICogUmV0dXJuZWQgYWRkcmVzcyBiaXQgNiBzd2l6emxpbmcgcmVxdWlyZWQgZm9yIENQVSBhY2Nlc3MgdGhyb3VnaAorCSAqIG1tYXAgbWFwcGluZy4KKwkgKi8KKwl1aW50MzJfdCBzd2l6emxlX21vZGU7Cit9OworCiAjZW5kaWYJCQkJLyogX0k5MTVfRFJNX0hfICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L0tidWlsZCBiL2luY2x1ZGUvbGludXgvS2J1aWxkCmluZGV4IDI4MmE1MDQuLmU1MzE3ODNlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L0tidWlsZAorKysgYi9pbmNsdWRlL2xpbnV4L0tidWlsZApAQCAtMTA3LDYgKzEwNyw3IEBACiBoZWFkZXIteSArPSBsaW1pdHMuaAogaGVhZGVyLXkgKz0gbWFnaWMuaAogaGVhZGVyLXkgKz0gbWFqb3IuaAoraGVhZGVyLXkgKz0gbWFwX3RvXzdzZWdtZW50LmgKIGhlYWRlci15ICs9IG1hdHJveGZiLmgKIGhlYWRlci15ICs9IG1leWUuaAogaGVhZGVyLXkgKz0gbWluaXhfZnMuaApAQCAtMTgyLDYgKzE4Myw3IEBACiB1bmlmZGVmLXkgKz0gYXV4dmVjLmgKIHVuaWZkZWYteSArPSBiaW5mbXRzLmgKIHVuaWZkZWYteSArPSBibGt0cmFjZV9hcGkuaAordW5pZmRlZi15ICs9IGJ5dGVvcmRlci5oCiB1bmlmZGVmLXkgKz0gY2FwYWJpbGl0eS5oCiB1bmlmZGVmLXkgKz0gY2FwaS5oCiB1bmlmZGVmLXkgKz0gY2Npc3NfaW9jdGwuaApAQCAtMzM5LDYgKzM0MSw3IEBACiB1bmlmZGVmLXkgKz0gc3RhdC5oCiB1bmlmZGVmLXkgKz0gc3RkZGVmLmgKIHVuaWZkZWYteSArPSBzdHJpbmcuaAordW5pZmRlZi15ICs9IHN3YWIuaAogdW5pZmRlZi15ICs9IHN5bmNsaW5rLmgKIHVuaWZkZWYteSArPSBzeXNjdGwuaAogdW5pZmRlZi15ICs9IHRjcC5oCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2Fpby5oIGIvaW5jbHVkZS9saW51eC9haW8uaAppbmRleCAwOWIyNzZjLi5mNmI4Y2Y5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2Fpby5oCisrKyBiL2luY2x1ZGUvbGludXgvYWlvLmgKQEAgLTIwNCwxMiArMjA0LDIxIEBACiAvKiBwcm90b3R5cGVzICovCiBleHRlcm4gdW5zaWduZWQgYWlvX21heF9zaXplOwogCisjaWZkZWYgQ09ORklHX0FJTwogZXh0ZXJuIHNzaXplX3Qgd2FpdF9vbl9zeW5jX2tpb2NiKHN0cnVjdCBraW9jYiAqaW9jYik7CiBleHRlcm4gaW50IGFpb19wdXRfcmVxKHN0cnVjdCBraW9jYiAqaW9jYik7CiBleHRlcm4gdm9pZCBraWNrX2lvY2Ioc3RydWN0IGtpb2NiICppb2NiKTsKIGV4dGVybiBpbnQgYWlvX2NvbXBsZXRlKHN0cnVjdCBraW9jYiAqaW9jYiwgbG9uZyByZXMsIGxvbmcgcmVzMik7CiBzdHJ1Y3QgbW1fc3RydWN0OwogZXh0ZXJuIHZvaWQgZXhpdF9haW8oc3RydWN0IG1tX3N0cnVjdCAqbW0pOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgc3NpemVfdCB3YWl0X29uX3N5bmNfa2lvY2Ioc3RydWN0IGtpb2NiICppb2NiKSB7IHJldHVybiAwOyB9CitzdGF0aWMgaW5saW5lIGludCBhaW9fcHV0X3JlcShzdHJ1Y3Qga2lvY2IgKmlvY2IpIHsgcmV0dXJuIDA7IH0KK3N0YXRpYyBpbmxpbmUgdm9pZCBraWNrX2lvY2Ioc3RydWN0IGtpb2NiICppb2NiKSB7IH0KK3N0YXRpYyBpbmxpbmUgaW50IGFpb19jb21wbGV0ZShzdHJ1Y3Qga2lvY2IgKmlvY2IsIGxvbmcgcmVzLCBsb25nIHJlczIpIHsgcmV0dXJuIDA7IH0KK3N0cnVjdCBtbV9zdHJ1Y3Q7CitzdGF0aWMgaW5saW5lIHZvaWQgZXhpdF9haW8oc3RydWN0IG1tX3N0cnVjdCAqbW0pIHsgfQorI2VuZGlmIC8qIENPTkZJR19BSU8gKi8KIAogI2RlZmluZSBpb193YWl0X3RvX2tpb2NiKHdhaXQpIGNvbnRhaW5lcl9vZih3YWl0LCBzdHJ1Y3Qga2lvY2IsIGtpX3dhaXQpCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYXV0b19kZXYtaW9jdGwuaCBiL2luY2x1ZGUvbGludXgvYXV0b19kZXYtaW9jdGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNGQwNWNjCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9hdXRvX2Rldi1pb2N0bC5oCkBAIC0wLDAgKzEsMTU3IEBACisvKgorICogQ29weXJpZ2h0IDIwMDggUmVkIEhhdCwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IDIwMDggSWFuIEtlbnQgPHJhdmVuQHRoZW1hdy5uZXQ+CisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIExpbnV4IGtlcm5lbCBhbmQgaXMgbWFkZSBhdmFpbGFibGUgdW5kZXIKKyAqIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHZlcnNpb24gMiwgb3IgYXQgeW91cgorICogb3B0aW9uLCBhbnkgbGF0ZXIgdmVyc2lvbiwgaW5jb3Jwb3JhdGVkIGhlcmVpbiBieSByZWZlcmVuY2UuCisgKi8KKworI2lmbmRlZiBfTElOVVhfQVVUT19ERVZfSU9DVExfSAorI2RlZmluZSBfTElOVVhfQVVUT19ERVZfSU9DVExfSAorCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworI2RlZmluZSBBVVRPRlNfREVWSUNFX05BTUUJCSJhdXRvZnMiCisKKyNkZWZpbmUgQVVUT0ZTX0RFVl9JT0NUTF9WRVJTSU9OX01BSk9SCTEKKyNkZWZpbmUgQVVUT0ZTX0RFVl9JT0NUTF9WRVJTSU9OX01JTk9SCTAKKworI2RlZmluZSBBVVRPRlNfREVWSURfTEVOCQkxNgorCisjZGVmaW5lIEFVVE9GU19ERVZfSU9DVExfU0laRQkJc2l6ZW9mKHN0cnVjdCBhdXRvZnNfZGV2X2lvY3RsKQorCisvKgorICogQW4gaW9jdGwgaW50ZXJmYWNlIGZvciBhdXRvZnMgbW91bnQgcG9pbnQgY29udHJvbC4KKyAqLworCisvKgorICogQWxsIHRoZSBpb2N0bHMgdXNlIHRoaXMgc3RydWN0dXJlLgorICogV2hlbiBzZW5kaW5nIGEgcGF0aCBzaXplIG11c3QgYWNjb3VudCBmb3IgdGhlIHRvdGFsIGxlbmd0aAorICogb2YgdGhlIGNodW5rIG9mIG1lbW9yeSBvdGhlcndpc2UgaXMgaXMgdGhlIHNpemUgb2YgdGhlCisgKiBzdHJ1Y3R1cmUuCisgKi8KKworc3RydWN0IGF1dG9mc19kZXZfaW9jdGwgeworCV9fdTMyIHZlcl9tYWpvcjsKKwlfX3UzMiB2ZXJfbWlub3I7CisJX191MzIgc2l6ZTsJCS8qIHRvdGFsIHNpemUgb2YgZGF0YSBwYXNzZWQgaW4KKwkJCQkgKiBpbmNsdWRpbmcgdGhpcyBzdHJ1Y3QgKi8KKwlfX3MzMiBpb2N0bGZkOwkJLyogYXV0b21vdW50IGNvbW1hbmQgZmQgKi8KKworCV9fdTMyIGFyZzE7CQkvKiBDb21tYW5kIHBhcmFtZXRlcnMgKi8KKwlfX3UzMiBhcmcyOworCisJY2hhciBwYXRoWzBdOworfTsKKworc3RhdGljIGlubGluZSB2b2lkIGluaXRfYXV0b2ZzX2Rldl9pb2N0bChzdHJ1Y3QgYXV0b2ZzX2Rldl9pb2N0bCAqaW4pCit7CisJaW4tPnZlcl9tYWpvciA9IEFVVE9GU19ERVZfSU9DVExfVkVSU0lPTl9NQUpPUjsKKwlpbi0+dmVyX21pbm9yID0gQVVUT0ZTX0RFVl9JT0NUTF9WRVJTSU9OX01JTk9SOworCWluLT5zaXplID0gc2l6ZW9mKHN0cnVjdCBhdXRvZnNfZGV2X2lvY3RsKTsKKwlpbi0+aW9jdGxmZCA9IC0xOworCWluLT5hcmcxID0gMDsKKwlpbi0+YXJnMiA9IDA7CisJcmV0dXJuOworfQorCisvKgorICogSWYgeW91IGNoYW5nZSB0aGlzIG1ha2Ugc3VyZSB5b3UgbWFrZSB0aGUgY29ycmVzcG9uZGluZyBjaGFuZ2UKKyAqIHRvIGF1dG9mcy1kZXYtaW9jdGwuYzpsb29rdXBfaW9jdGwoKQorICovCitlbnVtIHsKKwkvKiBHZXQgdmFyaW91cyB2ZXJzaW9uIGluZm8gKi8KKwlBVVRPRlNfREVWX0lPQ1RMX1ZFUlNJT05fQ01EID0gMHg3MSwKKwlBVVRPRlNfREVWX0lPQ1RMX1BST1RPVkVSX0NNRCwKKwlBVVRPRlNfREVWX0lPQ1RMX1BST1RPU1VCVkVSX0NNRCwKKworCS8qIE9wZW4gbW91bnQgaW9jdGwgZmQgKi8KKwlBVVRPRlNfREVWX0lPQ1RMX09QRU5NT1VOVF9DTUQsCisKKwkvKiBDbG9zZSBtb3VudCBpb2N0bCBmZCAqLworCUFVVE9GU19ERVZfSU9DVExfQ0xPU0VNT1VOVF9DTUQsCisKKwkvKiBNb3VudC9leHBpcmUgc3RhdHVzIHJldHVybnMgKi8KKwlBVVRPRlNfREVWX0lPQ1RMX1JFQURZX0NNRCwKKwlBVVRPRlNfREVWX0lPQ1RMX0ZBSUxfQ01ELAorCisJLyogQWN0aXZhdGUvZGVhY3RpdmF0ZSBhdXRvZnMgbW91bnQgKi8KKwlBVVRPRlNfREVWX0lPQ1RMX1NFVFBJUEVGRF9DTUQsCisJQVVUT0ZTX0RFVl9JT0NUTF9DQVRBVE9OSUNfQ01ELAorCisJLyogRXhwaXJ5IHRpbWVvdXQgKi8KKwlBVVRPRlNfREVWX0lPQ1RMX1RJTUVPVVRfQ01ELAorCisJLyogR2V0IG1vdW50IGxhc3QgcmVxdWVzdGluZyB1aWQgYW5kIGdpZCAqLworCUFVVE9GU19ERVZfSU9DVExfUkVRVUVTVEVSX0NNRCwKKworCS8qIENoZWNrIGZvciBlbGlnaWJsZSBleHBpcmUgY2FuZGlkYXRlcyAqLworCUFVVE9GU19ERVZfSU9DVExfRVhQSVJFX0NNRCwKKworCS8qIFJlcXVlc3QgYnVzeSBzdGF0dXMgKi8KKwlBVVRPRlNfREVWX0lPQ1RMX0FTS1VNT1VOVF9DTUQsCisKKwkvKiBDaGVjayBpZiBwYXRoIGlzIGEgbW91bnRwb2ludCAqLworCUFVVE9GU19ERVZfSU9DVExfSVNNT1VOVFBPSU5UX0NNRCwKK307CisKKyNkZWZpbmUgQVVUT0ZTX0lPQ1RMIDB4OTMKKworI2RlZmluZSBBVVRPRlNfREVWX0lPQ1RMX1ZFUlNJT04gXAorCV9JT1dSKEFVVE9GU19JT0NUTCwgXAorCSAgICAgIEFVVE9GU19ERVZfSU9DVExfVkVSU0lPTl9DTUQsIHN0cnVjdCBhdXRvZnNfZGV2X2lvY3RsKQorCisjZGVmaW5lIEFVVE9GU19ERVZfSU9DVExfUFJPVE9WRVIgXAorCV9JT1dSKEFVVE9GU19JT0NUTCwgXAorCSAgICAgIEFVVE9GU19ERVZfSU9DVExfUFJPVE9WRVJfQ01ELCBzdHJ1Y3QgYXV0b2ZzX2Rldl9pb2N0bCkKKworI2RlZmluZSBBVVRPRlNfREVWX0lPQ1RMX1BST1RPU1VCVkVSIFwKKwlfSU9XUihBVVRPRlNfSU9DVEwsIFwKKwkgICAgICBBVVRPRlNfREVWX0lPQ1RMX1BST1RPU1VCVkVSX0NNRCwgc3RydWN0IGF1dG9mc19kZXZfaW9jdGwpCisKKyNkZWZpbmUgQVVUT0ZTX0RFVl9JT0NUTF9PUEVOTU9VTlQgXAorCV9JT1dSKEFVVE9GU19JT0NUTCwgXAorCSAgICAgIEFVVE9GU19ERVZfSU9DVExfT1BFTk1PVU5UX0NNRCwgc3RydWN0IGF1dG9mc19kZXZfaW9jdGwpCisKKyNkZWZpbmUgQVVUT0ZTX0RFVl9JT0NUTF9DTE9TRU1PVU5UIFwKKwlfSU9XUihBVVRPRlNfSU9DVEwsIFwKKwkgICAgICBBVVRPRlNfREVWX0lPQ1RMX0NMT1NFTU9VTlRfQ01ELCBzdHJ1Y3QgYXV0b2ZzX2Rldl9pb2N0bCkKKworI2RlZmluZSBBVVRPRlNfREVWX0lPQ1RMX1JFQURZIFwKKwlfSU9XUihBVVRPRlNfSU9DVEwsIFwKKwkgICAgICBBVVRPRlNfREVWX0lPQ1RMX1JFQURZX0NNRCwgc3RydWN0IGF1dG9mc19kZXZfaW9jdGwpCisKKyNkZWZpbmUgQVVUT0ZTX0RFVl9JT0NUTF9GQUlMIFwKKwlfSU9XUihBVVRPRlNfSU9DVEwsIFwKKwkgICAgICBBVVRPRlNfREVWX0lPQ1RMX0ZBSUxfQ01ELCBzdHJ1Y3QgYXV0b2ZzX2Rldl9pb2N0bCkKKworI2RlZmluZSBBVVRPRlNfREVWX0lPQ1RMX1NFVFBJUEVGRCBcCisJX0lPV1IoQVVUT0ZTX0lPQ1RMLCBcCisJICAgICAgQVVUT0ZTX0RFVl9JT0NUTF9TRVRQSVBFRkRfQ01ELCBzdHJ1Y3QgYXV0b2ZzX2Rldl9pb2N0bCkKKworI2RlZmluZSBBVVRPRlNfREVWX0lPQ1RMX0NBVEFUT05JQyBcCisJX0lPV1IoQVVUT0ZTX0lPQ1RMLCBcCisJICAgICAgQVVUT0ZTX0RFVl9JT0NUTF9DQVRBVE9OSUNfQ01ELCBzdHJ1Y3QgYXV0b2ZzX2Rldl9pb2N0bCkKKworI2RlZmluZSBBVVRPRlNfREVWX0lPQ1RMX1RJTUVPVVQgXAorCV9JT1dSKEFVVE9GU19JT0NUTCwgXAorCSAgICAgIEFVVE9GU19ERVZfSU9DVExfVElNRU9VVF9DTUQsIHN0cnVjdCBhdXRvZnNfZGV2X2lvY3RsKQorCisjZGVmaW5lIEFVVE9GU19ERVZfSU9DVExfUkVRVUVTVEVSIFwKKwlfSU9XUihBVVRPRlNfSU9DVEwsIFwKKwkgICAgICBBVVRPRlNfREVWX0lPQ1RMX1JFUVVFU1RFUl9DTUQsIHN0cnVjdCBhdXRvZnNfZGV2X2lvY3RsKQorCisjZGVmaW5lIEFVVE9GU19ERVZfSU9DVExfRVhQSVJFIFwKKwlfSU9XUihBVVRPRlNfSU9DVEwsIFwKKwkgICAgICBBVVRPRlNfREVWX0lPQ1RMX0VYUElSRV9DTUQsIHN0cnVjdCBhdXRvZnNfZGV2X2lvY3RsKQorCisjZGVmaW5lIEFVVE9GU19ERVZfSU9DVExfQVNLVU1PVU5UIFwKKwlfSU9XUihBVVRPRlNfSU9DVEwsIFwKKwkgICAgICBBVVRPRlNfREVWX0lPQ1RMX0FTS1VNT1VOVF9DTUQsIHN0cnVjdCBhdXRvZnNfZGV2X2lvY3RsKQorCisjZGVmaW5lIEFVVE9GU19ERVZfSU9DVExfSVNNT1VOVFBPSU5UIFwKKwlfSU9XUihBVVRPRlNfSU9DVEwsIFwKKwkgICAgICBBVVRPRlNfREVWX0lPQ1RMX0lTTU9VTlRQT0lOVF9DTUQsIHN0cnVjdCBhdXRvZnNfZGV2X2lvY3RsKQorCisjZW5kaWYJLyogX0xJTlVYX0FVVE9fREVWX0lPQ1RMX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYXV0b19mczQuaCBiL2luY2x1ZGUvbGludXgvYXV0b19mczQuaAppbmRleCBiNzg1YzZmLi4yMjUzNzE2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2F1dG9fZnM0LmgKKysrIGIvaW5jbHVkZS9saW51eC9hdXRvX2ZzNC5oCkBAIC0yMywxMiArMjMsMTcgQEAKICNkZWZpbmUgQVVUT0ZTX01JTl9QUk9UT19WRVJTSU9OCTMKICNkZWZpbmUgQVVUT0ZTX01BWF9QUk9UT19WRVJTSU9OCTUKIAotI2RlZmluZSBBVVRPRlNfUFJPVE9fU1VCVkVSU0lPTgkJMAorI2RlZmluZSBBVVRPRlNfUFJPVE9fU1VCVkVSU0lPTgkJMQogCiAvKiBNYXNrIGZvciBleHBpcmUgYmVoYXZpb3VyICovCiAjZGVmaW5lIEFVVE9GU19FWFBfSU1NRURJQVRFCQkxCiAjZGVmaW5lIEFVVE9GU19FWFBfTEVBVkVTCQkyCiAKKyNkZWZpbmUgQVVUT0ZTX1RZUEVfQU5ZCQkJMHgwMDAwCisjZGVmaW5lIEFVVE9GU19UWVBFX0lORElSRUNUCQkweDAwMDEKKyNkZWZpbmUgQVVUT0ZTX1RZUEVfRElSRUNUCQkweDAwMDIKKyNkZWZpbmUgQVVUT0ZTX1RZUEVfT0ZGU0VUCQkweDAwMDQKKwogLyogRGFlbW9uIG5vdGlmaWNhdGlvbiBwYWNrZXQgdHlwZXMgKi8KIGVudW0gYXV0b2ZzX25vdGlmeSB7CiAJTkZZX05PTkUsCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2JhY2tpbmctZGV2LmggYi9pbmNsdWRlL2xpbnV4L2JhY2tpbmctZGV2LmgKaW5kZXggMGEyNGQ1NS4uYmVlNTJhYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9iYWNraW5nLWRldi5oCisrKyBiL2luY2x1ZGUvbGludXgvYmFja2luZy1kZXYuaApAQCAtMTc1LDYgKzE3NSw4IEBACiAgKiBCRElfQ0FQX1JFQURfTUFQOiAgICAgICBDYW4gYmUgbWFwcGVkIGZvciByZWFkaW5nCiAgKiBCRElfQ0FQX1dSSVRFX01BUDogICAgICBDYW4gYmUgbWFwcGVkIGZvciB3cml0aW5nCiAgKiBCRElfQ0FQX0VYRUNfTUFQOiAgICAgICBDYW4gYmUgbWFwcGVkIGZvciBleGVjdXRpb24KKyAqCisgKiBCRElfQ0FQX1NXQVBfQkFDS0VEOiAgICBDb3VudCBzaG1lbS90bXBmcyBvYmplY3RzIGFzIHN3YXAtYmFja2VkLgogICovCiAjZGVmaW5lIEJESV9DQVBfTk9fQUNDVF9ESVJUWQkweDAwMDAwMDAxCiAjZGVmaW5lIEJESV9DQVBfTk9fV1JJVEVCQUNLCTB4MDAwMDAwMDIKQEAgLTE4NCw2ICsxODYsNyBAQAogI2RlZmluZSBCRElfQ0FQX1dSSVRFX01BUAkweDAwMDAwMDIwCiAjZGVmaW5lIEJESV9DQVBfRVhFQ19NQVAJMHgwMDAwMDA0MAogI2RlZmluZSBCRElfQ0FQX05PX0FDQ1RfV0IJMHgwMDAwMDA4MAorI2RlZmluZSBCRElfQ0FQX1NXQVBfQkFDS0VECTB4MDAwMDAxMDAKIAogI2RlZmluZSBCRElfQ0FQX1ZNRkxBR1MgXAogCShCRElfQ0FQX1JFQURfTUFQIHwgQkRJX0NBUF9XUklURV9NQVAgfCBCRElfQ0FQX0VYRUNfTUFQKQpAQCAtMjQ4LDYgKzI1MSwxMSBAQAogCQkJCSAgICAgIEJESV9DQVBfTk9fV1JJVEVCQUNLKSk7CiB9CiAKK3N0YXRpYyBpbmxpbmUgYm9vbCBiZGlfY2FwX3N3YXBfYmFja2VkKHN0cnVjdCBiYWNraW5nX2Rldl9pbmZvICpiZGkpCit7CisJcmV0dXJuIGJkaS0+Y2FwYWJpbGl0aWVzICYgQkRJX0NBUF9TV0FQX0JBQ0tFRDsKK30KKwogc3RhdGljIGlubGluZSBib29sIG1hcHBpbmdfY2FwX3dyaXRlYmFja19kaXJ0eShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZykKIHsKIAlyZXR1cm4gYmRpX2NhcF93cml0ZWJhY2tfZGlydHkobWFwcGluZy0+YmFja2luZ19kZXZfaW5mbyk7CkBAIC0yNTgsNCArMjY2LDkgQEAKIAlyZXR1cm4gYmRpX2NhcF9hY2NvdW50X2RpcnR5KG1hcHBpbmctPmJhY2tpbmdfZGV2X2luZm8pOwogfQogCitzdGF0aWMgaW5saW5lIGJvb2wgbWFwcGluZ19jYXBfc3dhcF9iYWNrZWQoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcpCit7CisJcmV0dXJuIGJkaV9jYXBfc3dhcF9iYWNrZWQobWFwcGluZy0+YmFja2luZ19kZXZfaW5mbyk7Cit9CisKICNlbmRpZgkJLyogX0xJTlVYX0JBQ0tJTkdfREVWX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYmNkLmggYi9pbmNsdWRlL2xpbnV4L2JjZC5oCmluZGV4IDdhYzUxOGUuLjIyZWE1NjMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvYmNkLmgKKysrIGIvaW5jbHVkZS9saW51eC9iY2QuaApAQCAtMSwxMiArMSwzIEBACi0vKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkIHRvIGNvcHksIG1vZGlmeSBhbmQgcmVkaXN0cmlidXRlIHRoaXMgY29kZQotICogaW4gdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIFZlcnNpb24gMiBvciBsYXRlciwKLSAqIGF0IHlvdXIgb3B0aW9uLgotICovCi0KLS8qIG1hY3JvcyB0byB0cmFuc2xhdGUgdG8vZnJvbSBiaW5hcnkgYW5kIGJpbmFyeS1jb2RlZCBkZWNpbWFsIChmcmVxdWVudGx5Ci0gKiBmb3VuZCBpbiBSVEMgY2hpcHMpLgotICovCi0KICNpZm5kZWYgX0JDRF9ICiAjZGVmaW5lIF9CQ0RfSAogCkBAIC0xNSwxMSArNiw0IEBACiB1bnNpZ25lZCBiY2QyYmluKHVuc2lnbmVkIGNoYXIgdmFsKSBfX2F0dHJpYnV0ZV9jb25zdF9fOwogdW5zaWduZWQgY2hhciBiaW4yYmNkKHVuc2lnbmVkIHZhbCkgX19hdHRyaWJ1dGVfY29uc3RfXzsKIAotI2RlZmluZSBCQ0QyQklOKHZhbCkJYmNkMmJpbih2YWwpCi0jZGVmaW5lIEJJTjJCQ0QodmFsKQliaW4yYmNkKHZhbCkKLQotLyogYmFja3dhcmRzIGNvbXBhdCAqLwotI2RlZmluZSBCQ0RfVE9fQklOKHZhbCkgKCh2YWwpPUJDRDJCSU4odmFsKSkKLSNkZWZpbmUgQklOX1RPX0JDRCh2YWwpICgodmFsKT1CSU4yQkNEKHZhbCkpCi0KICNlbmRpZiAvKiBfQkNEX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYmluZm10cy5oIGIvaW5jbHVkZS9saW51eC9iaW5mbXRzLmgKaW5kZXggODI2ZjYyMy4uNzM5NGI1YiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9iaW5mbXRzLmgKKysrIGIvaW5jbHVkZS9saW51eC9iaW5mbXRzLmgKQEAgLTM2LDYgKzM2LDEwIEBACiAJdW5zaWduZWQgbG9uZyBwOyAvKiBjdXJyZW50IHRvcCBvZiBtZW0gKi8KIAl1bnNpZ25lZCBpbnQgc2hfYmFuZzoxLAogCQkgICAgIG1pc2NfYmFuZzoxOworI2lmZGVmIF9fYWxwaGFfXworCXVuc2lnbmVkIGludCB0YXNvOjE7CisjZW5kaWYKKwl1bnNpZ25lZCBpbnQgcmVjdXJzaW9uX2RlcHRoOwogCXN0cnVjdCBmaWxlICogZmlsZTsKIAlpbnQgZV91aWQsIGVfZ2lkOwogCWtlcm5lbF9jYXBfdCBjYXBfcG9zdF9leGVjX3Blcm1pdHRlZDsKQEAgLTU4LDYgKzYyLDcgQEAKICNkZWZpbmUgQklOUFJNX0ZMQUdTX0VYRUNGRF9CSVQgMQogI2RlZmluZSBCSU5QUk1fRkxBR1NfRVhFQ0ZEICgxIDw8IEJJTlBSTV9GTEFHU19FWEVDRkRfQklUKQogCisjZGVmaW5lIEJJTlBSTV9NQVhfUkVDVVJTSU9OIDQKIAogLyoKICAqIFRoaXMgc3RydWN0dXJlIGRlZmluZXMgdGhlIGZ1bmN0aW9ucyB0aGF0IGFyZSB1c2VkIHRvIGxvYWQgdGhlIGJpbmFyeSBmb3JtYXRzIHRoYXQKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYmlvLmggYi9pbmNsdWRlL2xpbnV4L2Jpby5oCmluZGV4IGZmNWI0Y2YuLjFjOTFhMTcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvYmlvLmgKKysrIGIvaW5jbHVkZS9saW51eC9iaW8uaApAQCAtNzksNiArNzksMTMgQEAKIAogCXVuc2lnbmVkIGludAkJYmlfc2l6ZTsJLyogcmVzaWR1YWwgSS9PIGNvdW50ICovCiAKKwkvKgorCSAqIFRvIGtlZXAgdHJhY2sgb2YgdGhlIG1heCBzZWdtZW50IHNpemUsIHdlIGFjY291bnQgZm9yIHRoZQorCSAqIHNpemVzIG9mIHRoZSBmaXJzdCBhbmQgbGFzdCBtZXJnZWFibGUgc2VnbWVudHMgaW4gdGhpcyBiaW8uCisJICovCisJdW5zaWduZWQgaW50CQliaV9zZWdfZnJvbnRfc2l6ZTsKKwl1bnNpZ25lZCBpbnQJCWJpX3NlZ19iYWNrX3NpemU7CisKIAl1bnNpZ25lZCBpbnQJCWJpX21heF92ZWNzOwkvKiBtYXggYnZsX3ZlY3Mgd2UgY2FuIGhvbGQgKi8KIAogCXVuc2lnbmVkIGludAkJYmlfY29tcF9jcHU7CS8qIGNvbXBsZXRpb24gQ1BVICovCkBAIC0xMjksMjUgKzEzNiwzMCBAQAogICogYml0IDIgLS0gYmFycmllcgogICoJSW5zZXJ0IGEgc2VyaWFsaXphdGlvbiBwb2ludCBpbiB0aGUgSU8gcXVldWUsIGZvcmNpbmcgcHJldmlvdXNseQogICoJc3VibWl0dGVkIElPIHRvIGJlIGNvbXBsZXRlZCBiZWZvcmUgdGhpcyBvZW4gaXMgaXNzdWVkLgotICogYml0IDMgLS0gZmFpbCBmYXN0LCBkb24ndCB3YW50IGxvdyBsZXZlbCBkcml2ZXIgcmV0cmllcwotICogYml0IDQgLS0gc3luY2hyb25vdXMgSS9PIGhpbnQ6IHRoZSBibG9jayBsYXllciB3aWxsIHVucGx1ZyBpbW1lZGlhdGVseQorICogYml0IDMgLS0gc3luY2hyb25vdXMgSS9PIGhpbnQ6IHRoZSBibG9jayBsYXllciB3aWxsIHVucGx1ZyBpbW1lZGlhdGVseQogICoJTm90ZSB0aGF0IHRoaXMgZG9lcyBOT1QgaW5kaWNhdGUgdGhhdCB0aGUgSU8gaXRzZWxmIGlzIHN5bmMsIGp1c3QKICAqCXRoYXQgdGhlIGJsb2NrIGxheWVyIHdpbGwgbm90IHBvc3Rwb25lIGlzc3VlIG9mIHRoaXMgSU8gYnkgcGx1Z2dpbmcuCi0gKiBiaXQgNSAtLSBtZXRhZGF0YSByZXF1ZXN0CisgKiBiaXQgNCAtLSBtZXRhZGF0YSByZXF1ZXN0CiAgKglVc2VkIGZvciB0cmFjaW5nIHRvIGRpZmZlcmVudGlhdGUgbWV0YWRhdGEgYW5kIGRhdGEgSU8uIE1heSBhbHNvCiAgKglnZXQgc29tZSBwcmVmZXJlbnRpYWwgdHJlYXRtZW50IGluIHRoZSBJTyBzY2hlZHVsZXIKLSAqIGJpdCA2IC0tIGRpc2NhcmQgc2VjdG9ycworICogYml0IDUgLS0gZGlzY2FyZCBzZWN0b3JzCiAgKglJbmZvcm1zIHRoZSBsb3dlciBsZXZlbCBkZXZpY2UgdGhhdCB0aGlzIHJhbmdlIG9mIHNlY3RvcnMgaXMgbm8gbG9uZ2VyCiAgKgl1c2VkIGJ5IHRoZSBmaWxlIHN5c3RlbSBhbmQgbWF5IHRodXMgYmUgZnJlZWQgYnkgdGhlIGRldmljZS4gVXNlZAogICoJZm9yIGZsYXNoIGJhc2VkIHN0b3JhZ2UuCisgKiBiaXQgNiAtLSBmYWlsIGZhc3QgZGV2aWNlIGVycm9ycworICogYml0IDcgLS0gZmFpbCBmYXN0IHRyYW5zcG9ydCBlcnJvcnMKKyAqIGJpdCA4IC0tIGZhaWwgZmFzdCBkcml2ZXIgZXJyb3JzCisgKglEb24ndCB3YW50IGRyaXZlciByZXRyaWVzIGZvciBhbnkgZmFzdCBmYWlsIHdoYXRldmVyIHRoZSByZWFzb24uCiAgKi8KICNkZWZpbmUgQklPX1JXCQkwCS8qIE11c3QgbWF0Y2ggUlcgaW4gcmVxIGZsYWdzIChibGtkZXYuaCkgKi8KICNkZWZpbmUgQklPX1JXX0FIRUFECTEJLyogTXVzdCBtYXRjaCBGQUlMRkFTVCBpbiByZXEgZmxhZ3MgKi8KICNkZWZpbmUgQklPX1JXX0JBUlJJRVIJMgotI2RlZmluZSBCSU9fUldfRkFJTEZBU1QJMwotI2RlZmluZSBCSU9fUldfU1lOQwk0Ci0jZGVmaW5lIEJJT19SV19NRVRBCTUKLSNkZWZpbmUgQklPX1JXX0RJU0NBUkQJNgorI2RlZmluZSBCSU9fUldfU1lOQwkzCisjZGVmaW5lIEJJT19SV19NRVRBCTQKKyNkZWZpbmUgQklPX1JXX0RJU0NBUkQJNQorI2RlZmluZSBCSU9fUldfRkFJTEZBU1RfREVWCQk2CisjZGVmaW5lIEJJT19SV19GQUlMRkFTVF9UUkFOU1BPUlQJNworI2RlZmluZSBCSU9fUldfRkFJTEZBU1RfRFJJVkVSCQk4CiAKIC8qCiAgKiB1cHBlciAxNiBiaXRzIG9mIGJpX3J3IGRlZmluZSB0aGUgaW8gcHJpb3JpdHkgb2YgdGhpcyBiaW8KQEAgLTE3NCw3ICsxODYsMTAgQEAKICNkZWZpbmUgYmlvX3NlY3RvcnMoYmlvKQkoKGJpbyktPmJpX3NpemUgPj4gOSkKICNkZWZpbmUgYmlvX2JhcnJpZXIoYmlvKQkoKGJpbyktPmJpX3J3ICYgKDEgPDwgQklPX1JXX0JBUlJJRVIpKQogI2RlZmluZSBiaW9fc3luYyhiaW8pCQkoKGJpbyktPmJpX3J3ICYgKDEgPDwgQklPX1JXX1NZTkMpKQotI2RlZmluZSBiaW9fZmFpbGZhc3QoYmlvKQkoKGJpbyktPmJpX3J3ICYgKDEgPDwgQklPX1JXX0ZBSUxGQVNUKSkKKyNkZWZpbmUgYmlvX2ZhaWxmYXN0X2RldihiaW8pCSgoYmlvKS0+YmlfcncgJgkoMSA8PCBCSU9fUldfRkFJTEZBU1RfREVWKSkKKyNkZWZpbmUgYmlvX2ZhaWxmYXN0X3RyYW5zcG9ydChiaW8pCVwKKwkoKGJpbyktPmJpX3J3ICYgKDEgPDwgQklPX1JXX0ZBSUxGQVNUX1RSQU5TUE9SVCkpCisjZGVmaW5lIGJpb19mYWlsZmFzdF9kcml2ZXIoYmlvKSAoKGJpbyktPmJpX3J3ICYgKDEgPDwgQklPX1JXX0ZBSUxGQVNUX0RSSVZFUikpCiAjZGVmaW5lIGJpb19yd19haGVhZChiaW8pCSgoYmlvKS0+YmlfcncgJiAoMSA8PCBCSU9fUldfQUhFQUQpKQogI2RlZmluZSBiaW9fcndfbWV0YShiaW8pCSgoYmlvKS0+YmlfcncgJiAoMSA8PCBCSU9fUldfTUVUQSkpCiAjZGVmaW5lIGJpb19kaXNjYXJkKGJpbykJKChiaW8pLT5iaV9ydyAmICgxIDw8IEJJT19SV19ESVNDQVJEKSkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYml0bWFwLmggYi9pbmNsdWRlL2xpbnV4L2JpdG1hcC5oCmluZGV4IDg5NzgxZmQuLjFhYmZlNjYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvYml0bWFwLmgKKysrIGIvaW5jbHVkZS9saW51eC9iaXRtYXAuaApAQCAtMTEwLDcgKzExMCw2IEBACiAKIGV4dGVybiBpbnQgYml0bWFwX3NjbnByaW50ZihjaGFyICpidWYsIHVuc2lnbmVkIGludCBsZW4sCiAJCQljb25zdCB1bnNpZ25lZCBsb25nICpzcmMsIGludCBuYml0cyk7Ci1leHRlcm4gaW50IGJpdG1hcF9zY25wcmludGZfbGVuKHVuc2lnbmVkIGludCBucl9iaXRzKTsKIGV4dGVybiBpbnQgX19iaXRtYXBfcGFyc2UoY29uc3QgY2hhciAqYnVmLCB1bnNpZ25lZCBpbnQgYnVmbGVuLCBpbnQgaXNfdXNlciwKIAkJCXVuc2lnbmVkIGxvbmcgKmRzdCwgaW50IG5iaXRzKTsKIGV4dGVybiBpbnQgYml0bWFwX3BhcnNlX3VzZXIoY29uc3QgY2hhciBfX3VzZXIgKnVidWYsIHVuc2lnbmVkIGludCB1bGVuLApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ibGtkZXYuaCBiL2luY2x1ZGUvbGludXgvYmxrZGV2LmgKaW5kZXggYTkyZDllNC4uYjRmZTY4ZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9ibGtkZXYuaAorKysgYi9pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oCkBAIC04Nyw3ICs4Nyw5IEBACiAgKi8KIGVudW0gcnFfZmxhZ19iaXRzIHsKIAlfX1JFUV9SVywJCS8qIG5vdCBzZXQsIHJlYWQuIHNldCwgd3JpdGUgKi8KLQlfX1JFUV9GQUlMRkFTVCwJCS8qIG5vIGxvdyBsZXZlbCBkcml2ZXIgcmV0cmllcyAqLworCV9fUkVRX0ZBSUxGQVNUX0RFViwJLyogbm8gZHJpdmVyIHJldHJpZXMgb2YgZGV2aWNlIGVycm9ycyAqLworCV9fUkVRX0ZBSUxGQVNUX1RSQU5TUE9SVCwgLyogbm8gZHJpdmVyIHJldHJpZXMgb2YgdHJhbnNwb3J0IGVycm9ycyAqLworCV9fUkVRX0ZBSUxGQVNUX0RSSVZFUiwJLyogbm8gZHJpdmVyIHJldHJpZXMgb2YgZHJpdmVyIGVycm9ycyAqLwogCV9fUkVRX0RJU0NBUkQsCQkvKiByZXF1ZXN0IHRvIGRpc2NhcmQgc2VjdG9ycyAqLwogCV9fUkVRX1NPUlRFRCwJCS8qIGVsZXZhdG9yIGtub3dzIGFib3V0IHRoaXMgcmVxdWVzdCAqLwogCV9fUkVRX1NPRlRCQVJSSUVSLAkvKiBtYXkgbm90IGJlIHBhc3NlZCBieSBpb3NjaGVkdWxlciAqLwpAQCAtMTExLDggKzExMywxMCBAQAogfTsKIAogI2RlZmluZSBSRVFfUlcJCSgxIDw8IF9fUkVRX1JXKQorI2RlZmluZSBSRVFfRkFJTEZBU1RfREVWCSgxIDw8IF9fUkVRX0ZBSUxGQVNUX0RFVikKKyNkZWZpbmUgUkVRX0ZBSUxGQVNUX1RSQU5TUE9SVAkoMSA8PCBfX1JFUV9GQUlMRkFTVF9UUkFOU1BPUlQpCisjZGVmaW5lIFJFUV9GQUlMRkFTVF9EUklWRVIJKDEgPDwgX19SRVFfRkFJTEZBU1RfRFJJVkVSKQogI2RlZmluZSBSRVFfRElTQ0FSRAkoMSA8PCBfX1JFUV9ESVNDQVJEKQotI2RlZmluZSBSRVFfRkFJTEZBU1QJKDEgPDwgX19SRVFfRkFJTEZBU1QpCiAjZGVmaW5lIFJFUV9TT1JURUQJKDEgPDwgX19SRVFfU09SVEVEKQogI2RlZmluZSBSRVFfU09GVEJBUlJJRVIJKDEgPDwgX19SRVFfU09GVEJBUlJJRVIpCiAjZGVmaW5lIFJFUV9IQVJEQkFSUklFUgkoMSA8PCBfX1JFUV9IQVJEQkFSUklFUikKQEAgLTU2MCw3ICs1NjQsMTIgQEAKICNkZWZpbmUgYmxrX3NwZWNpYWxfcmVxdWVzdChycSkJKChycSktPmNtZF90eXBlID09IFJFUV9UWVBFX1NQRUNJQUwpCiAjZGVmaW5lIGJsa19zZW5zZV9yZXF1ZXN0KHJxKQkoKHJxKS0+Y21kX3R5cGUgPT0gUkVRX1RZUEVfU0VOU0UpCiAKLSNkZWZpbmUgYmxrX25vcmV0cnlfcmVxdWVzdChycSkJKChycSktPmNtZF9mbGFncyAmIFJFUV9GQUlMRkFTVCkKKyNkZWZpbmUgYmxrX2ZhaWxmYXN0X2RldihycSkJKChycSktPmNtZF9mbGFncyAmIFJFUV9GQUlMRkFTVF9ERVYpCisjZGVmaW5lIGJsa19mYWlsZmFzdF90cmFuc3BvcnQocnEpICgocnEpLT5jbWRfZmxhZ3MgJiBSRVFfRkFJTEZBU1RfVFJBTlNQT1JUKQorI2RlZmluZSBibGtfZmFpbGZhc3RfZHJpdmVyKHJxKQkoKHJxKS0+Y21kX2ZsYWdzICYgUkVRX0ZBSUxGQVNUX0RSSVZFUikKKyNkZWZpbmUgYmxrX25vcmV0cnlfcmVxdWVzdChycSkJKGJsa19mYWlsZmFzdF9kZXYocnEpIHx8CVwKKwkJCQkgYmxrX2ZhaWxmYXN0X3RyYW5zcG9ydChycSkgfHwJXAorCQkJCSBibGtfZmFpbGZhc3RfZHJpdmVyKHJxKSkKICNkZWZpbmUgYmxrX3JxX3N0YXJ0ZWQocnEpCSgocnEpLT5jbWRfZmxhZ3MgJiBSRVFfU1RBUlRFRCkKIAogI2RlZmluZSBibGtfYWNjb3VudF9ycShycSkJKGJsa19ycV9zdGFydGVkKHJxKSAmJiAoYmxrX2ZzX3JlcXVlc3QocnEpIHx8IGJsa19kaXNjYXJkX3JxKHJxKSkpIApAQCAtODU2LDcgKzg2NSw2IEBACiBleHRlcm4gaW50IGJsa19ycV9tYXBfc2coc3RydWN0IHJlcXVlc3RfcXVldWUgKiwgc3RydWN0IHJlcXVlc3QgKiwgc3RydWN0IHNjYXR0ZXJsaXN0ICopOwogZXh0ZXJuIHZvaWQgYmxrX2R1bXBfcnFfZmxhZ3Moc3RydWN0IHJlcXVlc3QgKiwgY2hhciAqKTsKIGV4dGVybiB2b2lkIGdlbmVyaWNfdW5wbHVnX2RldmljZShzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqKTsKLWV4dGVybiB2b2lkIF9fZ2VuZXJpY191bnBsdWdfZGV2aWNlKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICopOwogZXh0ZXJuIGxvbmcgbnJfYmxvY2tkZXZfcGFnZXModm9pZCk7CiAKIGludCBibGtfZ2V0X3F1ZXVlKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICopOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ibGt0cmFjZV9hcGkuaCBiL2luY2x1ZGUvbGludXgvYmxrdHJhY2VfYXBpLmgKaW5kZXggM2EzMWViNS4uYmRmNTA1ZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9ibGt0cmFjZV9hcGkuaAorKysgYi9pbmNsdWRlL2xpbnV4L2Jsa3RyYWNlX2FwaS5oCkBAIC0yNCw2ICsyNCw3IEBACiAJQkxLX1RDX0FIRUFECT0gMSA8PCAxMSwJLyogcmVhZGFoZWFkICovCiAJQkxLX1RDX01FVEEJPSAxIDw8IDEyLAkvKiBtZXRhZGF0YSAqLwogCUJMS19UQ19ESVNDQVJECT0gMSA8PCAxMywJLyogZGlzY2FyZCByZXF1ZXN0cyAqLworCUJMS19UQ19EUlZfREFUQQk9IDEgPDwgMTQsCS8qIGJpbmFyeSBwZXItZHJpdmVyIGRhdGEgKi8KIAogCUJMS19UQ19FTkQJPSAxIDw8IDE1LAkvKiBvbmx5IDE2LWJpdHMsIHJlbWluZGVyICovCiB9OwpAQCAtNTEsNiArNTIsNyBAQAogCV9fQkxLX1RBX0JPVU5DRSwJCS8qIGJpbyB3YXMgYm91bmNlZCAqLwogCV9fQkxLX1RBX1JFTUFQLAkJCS8qIGJpbyB3YXMgcmVtYXBwZWQgKi8KIAlfX0JMS19UQV9BQk9SVCwJCQkvKiByZXF1ZXN0IGFib3J0ZWQgKi8KKwlfX0JMS19UQV9EUlZfREFUQSwJCS8qIGRyaXZlci1zcGVjaWZpYyBiaW5hcnkgZGF0YSAqLwogfTsKIAogLyoKQEAgLTgyLDYgKzg0LDcgQEAKICNkZWZpbmUgQkxLX1RBX0JPVU5DRQkJKF9fQkxLX1RBX0JPVU5DRSkKICNkZWZpbmUgQkxLX1RBX1JFTUFQCQkoX19CTEtfVEFfUkVNQVAgfCBCTEtfVENfQUNUKEJMS19UQ19RVUVVRSkpCiAjZGVmaW5lIEJMS19UQV9BQk9SVAkJKF9fQkxLX1RBX0FCT1JUIHwgQkxLX1RDX0FDVChCTEtfVENfUVVFVUUpKQorI2RlZmluZSBCTEtfVEFfRFJWX0RBVEEJKF9fQkxLX1RBX0RSVl9EQVRBIHwgQkxLX1RDX0FDVChCTEtfVENfRFJWX0RBVEEpKQogCiAjZGVmaW5lIEJMS19UTl9QUk9DRVNTCQkoX19CTEtfVE5fUFJPQ0VTUyB8IEJMS19UQ19BQ1QoQkxLX1RDX05PVElGWSkpCiAjZGVmaW5lIEJMS19UTl9USU1FU1RBTVAJKF9fQkxLX1ROX1RJTUVTVEFNUCB8IEJMS19UQ19BQ1QoQkxLX1RDX05PVElGWSkpCkBAIC0zMTcsNiArMzIwLDM0IEBACiAJX19ibGtfYWRkX3RyYWNlKGJ0LCBmcm9tLCBiaW8tPmJpX3NpemUsIGJpby0+YmlfcncsIEJMS19UQV9SRU1BUCwgIWJpb19mbGFnZ2VkKGJpbywgQklPX1VQVE9EQVRFKSwgc2l6ZW9mKHIpLCAmcik7CiB9CiAKKy8qKgorICogYmxrX2FkZF9kcml2ZXJfZGF0YSAtIEFkZCBiaW5hcnkgbWVzc2FnZSB3aXRoIGRyaXZlci1zcGVjaWZpYyBkYXRhCisgKiBAcToJCXF1ZXVlIHRoZSBpbyBpcyBmb3IKKyAqIEBycToJCWlvIHJlcXVlc3QKKyAqIEBkYXRhOglkcml2ZXItc3BlY2lmaWMgZGF0YQorICogQGxlbjoJbGVuZ3RoIG9mIGRyaXZlci1zcGVjaWZpYyBkYXRhCisgKgorICogRGVzY3JpcHRpb246CisgKiAgICAgU29tZSBkcml2ZXJzIG1pZ2h0IHdhbnQgdG8gd3JpdGUgZHJpdmVyLXNwZWNpZmljIGRhdGEgcGVyIHJlcXVlc3QuCisgKgorICoqLworc3RhdGljIGlubGluZSB2b2lkIGJsa19hZGRfZHJpdmVyX2RhdGEoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsCisJCQkJICAgICAgIHN0cnVjdCByZXF1ZXN0ICpycSwKKwkJCQkgICAgICAgdm9pZCAqZGF0YSwgc2l6ZV90IGxlbikKK3sKKwlzdHJ1Y3QgYmxrX3RyYWNlICpidCA9IHEtPmJsa190cmFjZTsKKworCWlmIChsaWtlbHkoIWJ0KSkKKwkJcmV0dXJuOworCisJaWYgKGJsa19wY19yZXF1ZXN0KHJxKSkKKwkJX19ibGtfYWRkX3RyYWNlKGJ0LCAwLCBycS0+ZGF0YV9sZW4sIDAsIEJMS19UQV9EUlZfREFUQSwKKwkJCQlycS0+ZXJyb3JzLCBsZW4sIGRhdGEpOworCWVsc2UKKwkJX19ibGtfYWRkX3RyYWNlKGJ0LCBycS0+aGFyZF9zZWN0b3IsIHJxLT5oYXJkX25yX3NlY3RvcnMgPDwgOSwKKwkJCQkwLCBCTEtfVEFfRFJWX0RBVEEsIHJxLT5lcnJvcnMsIGxlbiwgZGF0YSk7Cit9CisKIGV4dGVybiBpbnQgYmxrX3RyYWNlX3NldHVwKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBjaGFyICpuYW1lLCBkZXZfdCBkZXYsCiAJCQkgICBjaGFyIF9fdXNlciAqYXJnKTsKIGV4dGVybiBpbnQgYmxrX3RyYWNlX3N0YXJ0c3RvcChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgaW50IHN0YXJ0KTsKQEAgLTMzMCw2ICszNjEsNyBAQAogI2RlZmluZSBibGtfYWRkX3RyYWNlX2dlbmVyaWMocSwgcnEsIHJ3LCB3aGF0KQlkbyB7IH0gd2hpbGUgKDApCiAjZGVmaW5lIGJsa19hZGRfdHJhY2VfcGR1X2ludChxLCB3aGF0LCBiaW8sIHBkdSkJZG8geyB9IHdoaWxlICgwKQogI2RlZmluZSBibGtfYWRkX3RyYWNlX3JlbWFwKHEsIGJpbywgZGV2LCBmLCB0KQlkbyB7fSB3aGlsZSAoMCkKKyNkZWZpbmUgYmxrX2FkZF9kcml2ZXJfZGF0YShxLCBycSwgZGF0YSwgbGVuKQlkbyB7fSB3aGlsZSAoMCkKICNkZWZpbmUgZG9fYmxrX3RyYWNlX3NldHVwKHEsIG5hbWUsIGRldiwgYnV0cykJKC1FTk9UVFkpCiAjZGVmaW5lIGJsa190cmFjZV9zZXR1cChxLCBuYW1lLCBkZXYsIGFyZykJKC1FTk9UVFkpCiAjZGVmaW5lIGJsa190cmFjZV9zdGFydHN0b3AocSwgc3RhcnQpCQkoLUVOT1RUWSkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYnVmZmVyX2hlYWQuaCBiL2luY2x1ZGUvbGludXgvYnVmZmVyX2hlYWQuaAppbmRleCBlYWRhYWI0Li4zY2U2NGI5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2J1ZmZlcl9oZWFkLmgKKysrIGIvaW5jbHVkZS9saW51eC9idWZmZXJfaGVhZC5oCkBAIC0zMjIsNyArMzIyLDcgQEAKIAogc3RhdGljIGlubGluZSBpbnQgdHJ5bG9ja19idWZmZXIoc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCkKIHsKLQlyZXR1cm4gbGlrZWx5KCF0ZXN0X2FuZF9zZXRfYml0KEJIX0xvY2ssICZiaC0+Yl9zdGF0ZSkpOworCXJldHVybiBsaWtlbHkoIXRlc3RfYW5kX3NldF9iaXRfbG9jayhCSF9Mb2NrLCAmYmgtPmJfc3RhdGUpKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIGxvY2tfYnVmZmVyKHN0cnVjdCBidWZmZXJfaGVhZCAqYmgpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2J5dGVvcmRlci9LYnVpbGQgYi9pbmNsdWRlL2xpbnV4L2J5dGVvcmRlci9LYnVpbGQKaW5kZXggMTEzM2Q1Zi4uZmJhYTdmOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9ieXRlb3JkZXIvS2J1aWxkCisrKyBiL2luY2x1ZGUvbGludXgvYnl0ZW9yZGVyL0tidWlsZApAQCAtMSwzICsxLDQgQEAKIHVuaWZkZWYteSArPSBiaWdfZW5kaWFuLmgKIHVuaWZkZWYteSArPSBsaXR0bGVfZW5kaWFuLmgKIHVuaWZkZWYteSArPSBzd2FiLmgKK3VuaWZkZWYteSArPSBzd2FiYi5oCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2J5dGVvcmRlci9iaWdfZW5kaWFuLmggYi9pbmNsdWRlL2xpbnV4L2J5dGVvcmRlci9iaWdfZW5kaWFuLmgKaW5kZXggNDRmOTViOS4uMWNiYTNmMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9ieXRlb3JkZXIvYmlnX2VuZGlhbi5oCisrKyBiL2luY2x1ZGUvbGludXgvYnl0ZW9yZGVyL2JpZ19lbmRpYW4uaApAQCAtMTAsNiArMTAsNyBAQAogCiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9ieXRlb3JkZXIvc3dhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2J5dGVvcmRlci9zd2FiYi5oPgogCiAjZGVmaW5lIF9fY29uc3RhbnRfaHRvbmwoeCkgKChfX2ZvcmNlIF9fYmUzMikoX191MzIpKHgpKQogI2RlZmluZSBfX2NvbnN0YW50X250b2hsKHgpICgoX19mb3JjZSBfX3UzMikoX19iZTMyKSh4KSkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYnl0ZW9yZGVyL2xpdHRsZV9lbmRpYW4uaCBiL2luY2x1ZGUvbGludXgvYnl0ZW9yZGVyL2xpdHRsZV9lbmRpYW4uaAppbmRleCA0Y2MxNzBhLi5jZWRjMWI1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2J5dGVvcmRlci9saXR0bGVfZW5kaWFuLmgKKysrIGIvaW5jbHVkZS9saW51eC9ieXRlb3JkZXIvbGl0dGxlX2VuZGlhbi5oCkBAIC0xMCw2ICsxMCw3IEBACiAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2J5dGVvcmRlci9zd2FiLmg+CisjaW5jbHVkZSA8bGludXgvYnl0ZW9yZGVyL3N3YWJiLmg+CiAKICNkZWZpbmUgX19jb25zdGFudF9odG9ubCh4KSAoKF9fZm9yY2UgX19iZTMyKV9fX2NvbnN0YW50X3N3YWIzMigoeCkpKQogI2RlZmluZSBfX2NvbnN0YW50X250b2hsKHgpIF9fX2NvbnN0YW50X3N3YWIzMigoX19mb3JjZSBfX2JlMzIpKHgpKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jZ3JvdXAuaCBiL2luY2x1ZGUvbGludXgvY2dyb3VwLmgKaW5kZXggYzk4ZGQ3Yy4uOGIwMGY2NiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9jZ3JvdXAuaAorKysgYi9pbmNsdWRlL2xpbnV4L2Nncm91cC5oCkBAIC05LDEyICs5LDEyIEBACiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+Ci0jaW5jbHVkZSA8bGludXgva3JlZi5oPgogI2luY2x1ZGUgPGxpbnV4L2NwdW1hc2suaD4KICNpbmNsdWRlIDxsaW51eC9ub2RlbWFzay5oPgogI2luY2x1ZGUgPGxpbnV4L3JjdXBkYXRlLmg+CiAjaW5jbHVkZSA8bGludXgvY2dyb3Vwc3RhdHMuaD4KICNpbmNsdWRlIDxsaW51eC9wcmlvX2hlYXAuaD4KKyNpbmNsdWRlIDxsaW51eC9yd3NlbS5oPgogCiAjaWZkZWYgQ09ORklHX0NHUk9VUFMKIApAQCAtMTM3LDYgKzEzNywxNSBAQAogCSAqIHJlbGVhc2VfbGlzdF9sb2NrCiAJICovCiAJc3RydWN0IGxpc3RfaGVhZCByZWxlYXNlX2xpc3Q7CisKKwkvKiBwaWRzX211dGV4IHByb3RlY3RzIHRoZSBmaWVsZHMgYmVsb3cgKi8KKwlzdHJ1Y3Qgcndfc2VtYXBob3JlIHBpZHNfbXV0ZXg7CisJLyogQXJyYXkgb2YgcHJvY2VzcyBpZHMgaW4gdGhlIGNncm91cCAqLworCXBpZF90ICp0YXNrc19waWRzOworCS8qIEhvdyBtYW55IGZpbGVzIGFyZSB1c2luZyB0aGUgY3VycmVudCB0YXNrc19waWRzIGFycmF5ICovCisJaW50IHBpZHNfdXNlX2NvdW50OworCS8qIExlbmd0aCBvZiB0aGUgY3VycmVudCB0YXNrc19waWRzIGFycmF5ICovCisJaW50IHBpZHNfbGVuZ3RoOwogfTsKIAogLyogQSBjc3Nfc2V0IGlzIGEgc3RydWN0dXJlIGhvbGRpbmcgcG9pbnRlcnMgdG8gYSBzZXQgb2YKQEAgLTE0OSw3ICsxNTgsNyBAQAogc3RydWN0IGNzc19zZXQgewogCiAJLyogUmVmZXJlbmNlIGNvdW50ICovCi0Jc3RydWN0IGtyZWYgcmVmOworCWF0b21pY190IHJlZmNvdW50OwogCiAJLyoKIAkgKiBMaXN0IHJ1bm5pbmcgdGhyb3VnaCBhbGwgY2dyb3VwIGdyb3VwcyBpbiB0aGUgc2FtZSBoYXNoCkBAIC0zMjYsNyArMzM1LDggQEAKIAkgKi8KIAl2b2lkICgqbW1fb3duZXJfY2hhbmdlZCkoc3RydWN0IGNncm91cF9zdWJzeXMgKnNzLAogCQkJCQlzdHJ1Y3QgY2dyb3VwICpvbGQsCi0JCQkJCXN0cnVjdCBjZ3JvdXAgKm5ldyk7CisJCQkJCXN0cnVjdCBjZ3JvdXAgKm5ldywKKwkJCQkJc3RydWN0IHRhc2tfc3RydWN0ICpwKTsKIAlpbnQgc3Vic3lzX2lkOwogCWludCBhY3RpdmU7CiAJaW50IGRpc2FibGVkOwpAQCAtMzkzLDYgKzQwMyw5IEBACiBpbnQgY2dyb3VwX3NjYW5fdGFza3Moc3RydWN0IGNncm91cF9zY2FubmVyICpzY2FuKTsKIGludCBjZ3JvdXBfYXR0YWNoX3Rhc2soc3RydWN0IGNncm91cCAqLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKik7CiAKK3ZvaWQgY2dyb3VwX21tX293bmVyX2NhbGxiYWNrcyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKm9sZCwKKwkJCSAgICAgICBzdHJ1Y3QgdGFza19zdHJ1Y3QgKm5ldyk7CisKICNlbHNlIC8qICFDT05GSUdfQ0dST1VQUyAqLwogCiBzdGF0aWMgaW5saW5lIGludCBjZ3JvdXBfaW5pdF9lYXJseSh2b2lkKSB7IHJldHVybiAwOyB9CkBAIC00MTEsMTUgKzQyNCw5IEBACiAJcmV0dXJuIC1FSU5WQUw7CiB9CiAKK3N0YXRpYyBpbmxpbmUgdm9pZCBjZ3JvdXBfbW1fb3duZXJfY2FsbGJhY2tzKHN0cnVjdCB0YXNrX3N0cnVjdCAqb2xkLAorCQkJCQkgICAgIHN0cnVjdCB0YXNrX3N0cnVjdCAqbmV3KSB7fQorCiAjZW5kaWYgLyogIUNPTkZJR19DR1JPVVBTICovCiAKLSNpZmRlZiBDT05GSUdfTU1fT1dORVIKLWV4dGVybiB2b2lkCi1jZ3JvdXBfbW1fb3duZXJfY2FsbGJhY2tzKHN0cnVjdCB0YXNrX3N0cnVjdCAqb2xkLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKm5ldyk7Ci0jZWxzZSAvKiAhQ09ORklHX01NX09XTkVSICovCi1zdGF0aWMgaW5saW5lIHZvaWQKLWNncm91cF9tbV9vd25lcl9jYWxsYmFja3Moc3RydWN0IHRhc2tfc3RydWN0ICpvbGQsIHN0cnVjdCB0YXNrX3N0cnVjdCAqbmV3KQotewotfQotI2VuZGlmIC8qIENPTkZJR19NTV9PV05FUiAqLwogI2VuZGlmIC8qIF9MSU5VWF9DR1JPVVBfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jZ3JvdXBfc3Vic3lzLmggYi9pbmNsdWRlL2xpbnV4L2Nncm91cF9zdWJzeXMuaAppbmRleCBlMjg3NzQ1Li45YzIyMzk2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2Nncm91cF9zdWJzeXMuaAorKysgYi9pbmNsdWRlL2xpbnV4L2Nncm91cF9zdWJzeXMuaApAQCAtNDgsMyArNDgsOSBAQAogI2VuZGlmCiAKIC8qICovCisKKyNpZmRlZiBDT05GSUdfQ0dST1VQX0ZSRUVaRVIKK1NVQlNZUyhmcmVlemVyKQorI2VuZGlmCisKKy8qICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2Nsay5oIGIvaW5jbHVkZS9saW51eC9jbGsuaAppbmRleCA1Y2E4YzZmLi43Nzg3NzczIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2Nsay5oCisrKyBiL2luY2x1ZGUvbGludXgvY2xrLmgKQEAgLTM1LDYgKzM1LDggQEAKICAqIGNsa19nZXQgbWF5IHJldHVybiBkaWZmZXJlbnQgY2xvY2sgcHJvZHVjZXJzIGRlcGVuZGluZyBvbiBAZGV2LikKICAqCiAgKiBEcml2ZXJzIG11c3QgYXNzdW1lIHRoYXQgdGhlIGNsb2NrIHNvdXJjZSBpcyBub3QgZW5hYmxlZC4KKyAqCisgKiBjbGtfZ2V0IHNob3VsZCBub3QgYmUgY2FsbGVkIGZyb20gd2l0aGluIGludGVycnVwdCBjb250ZXh0LgogICovCiBzdHJ1Y3QgY2xrICpjbGtfZ2V0KHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3QgY2hhciAqaWQpOwogCkBAIC03Niw2ICs3OCw4IEBACiAgKiBOb3RlOiBkcml2ZXJzIG11c3QgZW5zdXJlIHRoYXQgYWxsIGNsa19lbmFibGUgY2FsbHMgbWFkZSBvbiB0aGlzCiAgKiBjbG9jayBzb3VyY2UgYXJlIGJhbGFuY2VkIGJ5IGNsa19kaXNhYmxlIGNhbGxzIHByaW9yIHRvIGNhbGxpbmcKICAqIHRoaXMgZnVuY3Rpb24uCisgKgorICogY2xrX3B1dCBzaG91bGQgbm90IGJlIGNhbGxlZCBmcm9tIHdpdGhpbiBpbnRlcnJ1cHQgY29udGV4dC4KICAqLwogdm9pZCBjbGtfcHV0KHN0cnVjdCBjbGsgKmNsayk7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvY2xvY2tzb3VyY2UuaCBiL2luY2x1ZGUvbGludXgvY2xvY2tzb3VyY2UuaAppbmRleCA1NWU0MzRmLi5mODhkMzJmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2Nsb2Nrc291cmNlLmgKKysrIGIvaW5jbHVkZS9saW51eC9jbG9ja3NvdXJjZS5oCkBAIC00NSw3ICs0NSw4IEBACiAgKiBAcmVhZDoJCXJldHVybnMgYSBjeWNsZSB2YWx1ZQogICogQG1hc2s6CQliaXRtYXNrIGZvciB0d28ncyBjb21wbGVtZW50CiAgKgkJCXN1YnRyYWN0aW9uIG9mIG5vbiA2NCBiaXQgY291bnRlcnMKLSAqIEBtdWx0OgkJY3ljbGUgdG8gbmFub3NlY29uZCBtdWx0aXBsaWVyCisgKiBAbXVsdDoJCWN5Y2xlIHRvIG5hbm9zZWNvbmQgbXVsdGlwbGllciAoYWRqdXN0ZWQgYnkgTlRQKQorICogQG11bHRfb3JpZzoJCWN5Y2xlIHRvIG5hbm9zZWNvbmQgbXVsdGlwbGllciAodW5hZGp1c3RlZCBieSBOVFApCiAgKiBAc2hpZnQ6CQljeWNsZSB0byBuYW5vc2Vjb25kIGRpdmlzb3IgKHBvd2VyIG9mIHR3bykKICAqIEBmbGFnczoJCWZsYWdzIGRlc2NyaWJpbmcgc3BlY2lhbCBwcm9wZXJ0aWVzCiAgKiBAdnJlYWQ6CQl2c3lzY2FsbCBiYXNlZCByZWFkCkBAIC02Myw2ICs2NCw3IEBACiAJY3ljbGVfdCAoKnJlYWQpKHZvaWQpOwogCWN5Y2xlX3QgbWFzazsKIAl1MzIgbXVsdDsKKwl1MzIgbXVsdF9vcmlnOwogCXUzMiBzaGlmdDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWN5Y2xlX3QgKCp2cmVhZCkodm9pZCk7CkBAIC03Nyw2ICs3OSw3IEBACiAJLyogdGltZWtlZXBpbmcgc3BlY2lmaWMgZGF0YSwgaWdub3JlICovCiAJY3ljbGVfdCBjeWNsZV9pbnRlcnZhbDsKIAl1NjQJeHRpbWVfaW50ZXJ2YWw7CisJdTMyCXJhd19pbnRlcnZhbDsKIAkvKgogCSAqIFNlY29uZCBwYXJ0IGlzIHdyaXR0ZW4gYXQgZWFjaCB0aW1lciBpbnRlcnJ1cHQKIAkgKiBLZWVwIGl0IGluIGEgZGlmZmVyZW50IGNhY2hlIGxpbmUgdG8gZGlydHkgbm8KQEAgLTg1LDYgKzg4LDcgQEAKIAljeWNsZV90IGN5Y2xlX2xhc3QgX19fX2NhY2hlbGluZV9hbGlnbmVkX2luX3NtcDsKIAl1NjQgeHRpbWVfbnNlYzsKIAlzNjQgZXJyb3I7CisJc3RydWN0IHRpbWVzcGVjIHJhd190aW1lOwogCiAjaWZkZWYgQ09ORklHX0NMT0NLU09VUkNFX1dBVENIRE9HCiAJLyogV2F0Y2hkb2cgcmVsYXRlZCBkYXRhLCB1c2VkIGJ5IHRoZSBmcmFtZXdvcmsgKi8KQEAgLTIwMSwxNyArMjA1LDE5IEBACiB7CiAJdTY0IHRtcDsKIAotCS8qIFhYWCAtIEFsbCBvZiB0aGlzIGNvdWxkIHVzZSBhIHdob2xlIGxvdCBvZiBvcHRpbWl6YXRpb24gKi8KKwkvKiBEbyB0aGUgbnMgLT4gY3ljbGUgY29udmVyc2lvbiBmaXJzdCwgdXNpbmcgb3JpZ2luYWwgbXVsdCAqLwogCXRtcCA9IGxlbmd0aF9uc2VjOwogCXRtcCA8PD0gYy0+c2hpZnQ7Ci0JdG1wICs9IGMtPm11bHQvMjsKLQlkb19kaXYodG1wLCBjLT5tdWx0KTsKKwl0bXAgKz0gYy0+bXVsdF9vcmlnLzI7CisJZG9fZGl2KHRtcCwgYy0+bXVsdF9vcmlnKTsKIAogCWMtPmN5Y2xlX2ludGVydmFsID0gKGN5Y2xlX3QpdG1wOwogCWlmIChjLT5jeWNsZV9pbnRlcnZhbCA9PSAwKQogCQljLT5jeWNsZV9pbnRlcnZhbCA9IDE7CiAKKwkvKiBHbyBiYWNrIGZyb20gY3ljbGVzIC0+IHNoaWZ0ZWQgbnMsIHRoaXMgdGltZSB1c2UgbnRwIGFkanVzZWQgbXVsdCAqLwogCWMtPnh0aW1lX2ludGVydmFsID0gKHU2NCljLT5jeWNsZV9pbnRlcnZhbCAqIGMtPm11bHQ7CisJYy0+cmF3X2ludGVydmFsID0gKCh1NjQpYy0+Y3ljbGVfaW50ZXJ2YWwgKiBjLT5tdWx0X29yaWcpID4+IGMtPnNoaWZ0OwogfQogCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvY29tcGF0LmggYi9pbmNsdWRlL2xpbnV4L2NvbXBhdC5oCmluZGV4IGNmOGQxMWMuLmYwNjFhMWUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvY29tcGF0LmgKKysrIGIvaW5jbHVkZS9saW51eC9jb21wYXQuaApAQCAtNzgsNyArNzgsNiBAQAogCWNvbXBhdF9zaWdzZXRfd29yZAlzaWdbX0NPTVBBVF9OU0lHX1dPUkRTXTsKIH0gY29tcGF0X3NpZ3NldF90OwogCi1leHRlcm4gaW50IGNwX2NvbXBhdF9zdGF0KHN0cnVjdCBrc3RhdCAqLCBzdHJ1Y3QgY29tcGF0X3N0YXQgX191c2VyICopOwogZXh0ZXJuIGludCBnZXRfY29tcGF0X3RpbWVzcGVjKHN0cnVjdCB0aW1lc3BlYyAqLCBjb25zdCBzdHJ1Y3QgY29tcGF0X3RpbWVzcGVjIF9fdXNlciAqKTsKIGV4dGVybiBpbnQgcHV0X2NvbXBhdF90aW1lc3BlYyhjb25zdCBzdHJ1Y3QgdGltZXNwZWMgKiwgc3RydWN0IGNvbXBhdF90aW1lc3BlYyBfX3VzZXIgKik7CiAKQEAgLTIzNSw2ICsyMzQsMTEgQEAKIGV4dGVybiBpbnQgcHV0X2NvbXBhdF9pdGltZXJzcGVjKHN0cnVjdCBjb21wYXRfaXRpbWVyc3BlYyBfX3VzZXIgKmRzdCwKIAkJCQkgY29uc3Qgc3RydWN0IGl0aW1lcnNwZWMgKnNyYyk7CiAKK2FzbWxpbmthZ2UgbG9uZyBjb21wYXRfc3lzX2dldHRpbWVvZmRheShzdHJ1Y3QgY29tcGF0X3RpbWV2YWwgX191c2VyICp0diwKKwkJc3RydWN0IHRpbWV6b25lIF9fdXNlciAqdHopOworYXNtbGlua2FnZSBsb25nIGNvbXBhdF9zeXNfc2V0dGltZW9mZGF5KHN0cnVjdCBjb21wYXRfdGltZXZhbCBfX3VzZXIgKnR2LAorCQlzdHJ1Y3QgdGltZXpvbmUgX191c2VyICp0eik7CisKIGFzbWxpbmthZ2UgbG9uZyBjb21wYXRfc3lzX2FkanRpbWV4KHN0cnVjdCBjb21wYXRfdGltZXggX191c2VyICp1dHApOwogCiBleHRlcm4gaW50IGNvbXBhdF9wcmludGsoY29uc3QgY2hhciAqZm10LCAuLi4pOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jb25zb2xlX3N0cnVjdC5oIGIvaW5jbHVkZS9saW51eC9jb25zb2xlX3N0cnVjdC5oCmluZGV4IGIwM2Y4MGEuLmQ3MWY3YzAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvY29uc29sZV9zdHJ1Y3QuaAorKysgYi9pbmNsdWRlL2xpbnV4L2NvbnNvbGVfc3RydWN0LmgKQEAgLTUzLDcgKzUzLDYgQEAKIAl1bnNpZ25lZCBzaG9ydAl2Y19oaV9mb250X21hc2s7CS8qIFsjXSBBdHRyaWJ1dGUgc2V0IGZvciB1cHBlciAyNTYgY2hhcnMgb2YgZm9udCBvciAwIGlmIG5vdCBzdXBwb3J0ZWQgKi8KIAlzdHJ1Y3QgY29uc29sZV9mb250IHZjX2ZvbnQ7CQkvKiBDdXJyZW50IFZDIGZvbnQgc2V0ICovCiAJdW5zaWduZWQgc2hvcnQJdmNfdmlkZW9fZXJhc2VfY2hhcjsJLyogQmFja2dyb3VuZCBlcmFzZSBjaGFyYWN0ZXIgKi8KLQl1bnNpZ25lZCBzaG9ydAl2Y19zY3JsX2VyYXNlX2NoYXI7CS8qIEVyYXNlIGNoYXJhY3RlciBmb3Igc2Nyb2xsICovCiAJLyogVlQgdGVybWluYWwgZGF0YSAqLwogCXVuc2lnbmVkIGludAl2Y19zdGF0ZTsJCS8qIEVzY2FwZSBzZXF1ZW5jZSBwYXJzZXIgc3RhdGUgKi8KIAl1bnNpZ25lZCBpbnQJdmNfbnBhcix2Y19wYXJbTlBBUl07CS8qIFBhcmFtZXRlcnMgb2YgY3VycmVudCBlc2NhcGUgc2VxdWVuY2UgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvY3Jhc2hfZHVtcC5oIGIvaW5jbHVkZS9saW51eC9jcmFzaF9kdW1wLmgKaW5kZXggMDI1ZTRmNS4uMGFjZjNiNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9jcmFzaF9kdW1wLmgKKysrIGIvaW5jbHVkZS9saW51eC9jcmFzaF9kdW1wLmgKQEAgLTgsMTIgKzgsOSBAQAogI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KIAogI2RlZmluZSBFTEZDT1JFX0FERFJfTUFYCSgtMVVMTCkKKyNkZWZpbmUgRUxGQ09SRV9BRERSX0VSUgkoLTJVTEwpCiAKLSNpZmRlZiBDT05GSUdfUFJPQ19WTUNPUkUKIGV4dGVybiB1bnNpZ25lZCBsb25nIGxvbmcgZWxmY29yZWhkcl9hZGRyOwotI2Vsc2UKLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBsb25nIGxvbmcgZWxmY29yZWhkcl9hZGRyID0gRUxGQ09SRV9BRERSX01BWDsKLSNlbmRpZgogCiBleHRlcm4gc3NpemVfdCBjb3B5X29sZG1lbV9wYWdlKHVuc2lnbmVkIGxvbmcsIGNoYXIgKiwgc2l6ZV90LAogCQkJCQkJdW5zaWduZWQgbG9uZywgaW50KTsKQEAgLTI4LDEwICsyNSw0MyBAQAogCiAjZGVmaW5lIHZtY29yZV9lbGZfY2hlY2tfYXJjaCh4KSAoZWxmX2NoZWNrX2FyY2goeCkgfHwgdm1jb3JlX2VsZl9jaGVja19hcmNoX2Nyb3NzKHgpKQogCisvKgorICogaXNfa2R1bXBfa2VybmVsKCkgY2hlY2tzIHdoZXRoZXIgdGhpcyBrZXJuZWwgaXMgYm9vdGluZyBhZnRlciBhIHBhbmljIG9mCisgKiBwcmV2aW91cyBrZXJuZWwgb3Igbm90LiBUaGlzIGlzIGRldGVybWluZWQgYnkgY2hlY2tpbmcgaWYgcHJldmlvdXMga2VybmVsCisgKiBoYXMgcGFzc2VkIHRoZSBlbGYgY29yZSBoZWFkZXIgYWRkcmVzcyBvbiBjb21tYW5kIGxpbmUuCisgKgorICogVGhpcyBpcyBub3QganVzdCBhIHRlc3QgaWYgQ09ORklHX0NSQVNIX0RVTVAgaXMgZW5hYmxlZCBvciBub3QuIEl0IHdpbGwKKyAqIHJldHVybiAxIGlmIENPTkZJR19DUkFTSF9EVU1QPXkgYW5kIGlmIGtlcm5lbCBpcyBib290aW5nIGFmdGVyIGEgcGFuaWMgb2YKKyAqIHByZXZpb3VzIGtlcm5lbC4KKyAqLworCiBzdGF0aWMgaW5saW5lIGludCBpc19rZHVtcF9rZXJuZWwodm9pZCkKIHsKIAlyZXR1cm4gKGVsZmNvcmVoZHJfYWRkciAhPSBFTEZDT1JFX0FERFJfTUFYKSA/IDEgOiAwOwogfQorCisvKiBpc192bWNvcmVfdXNhYmxlKCkgY2hlY2tzIGlmIHRoZSBrZXJuZWwgaXMgYm9vdGluZyBhZnRlciBhIHBhbmljIGFuZAorICogdGhlIHZtY29yZSByZWdpb24gaXMgdXNhYmxlLgorICoKKyAqIFRoaXMgbWFrZXMgdXNlIG9mIHRoZSBmYWN0IHRoYXQgZHVlIHRvIGFsaWdubWVudCAtMlVMTCBpcyBub3QKKyAqIGEgdmFsaWQgcG9pbnRlciwgbXVjaCBpbiB0aGUgdmFpbiBvZiBJU19FUlIoKSwgZXhjZXB0CisgKiBkZWFsaW5nIGRpcmVjdGx5IHdpdGggYW4gdW5zaWduZWQgbG9uZyBsb25nIHJhdGhlciB0aGFuIGEgcG9pbnRlci4KKyAqLworCitzdGF0aWMgaW5saW5lIGludCBpc192bWNvcmVfdXNhYmxlKHZvaWQpCit7CisJcmV0dXJuIGlzX2tkdW1wX2tlcm5lbCgpICYmIGVsZmNvcmVoZHJfYWRkciAhPSBFTEZDT1JFX0FERFJfRVJSID8gMSA6IDA7Cit9CisKKy8qIHZtY29yZV91bnVzYWJsZSgpIG1hcmtzIHRoZSB2bWNvcmUgYXMgdW51c2FibGUsCisgKiB3aXRob3V0IGRpc3R1cmJpbmcgdGhlIGxvZ2ljIG9mIGlzX2tkdW1wX2tlcm5lbCgpCisgKi8KKworc3RhdGljIGlubGluZSB2b2lkIHZtY29yZV91bnVzYWJsZSh2b2lkKQoreworCWlmIChpc19rZHVtcF9rZXJuZWwoKSkKKwkJZWxmY29yZWhkcl9hZGRyID0gRUxGQ09SRV9BRERSX0VSUjsKK30KICNlbHNlIC8qICFDT05GSUdfQ1JBU0hfRFVNUCAqLwogc3RhdGljIGlubGluZSBpbnQgaXNfa2R1bXBfa2VybmVsKHZvaWQpIHsgcmV0dXJuIDA7IH0KICNlbmRpZiAvKiBDT05GSUdfQ1JBU0hfRFVNUCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9kZXZpY2UuaCBiL2luY2x1ZGUvbGludXgvZGV2aWNlLmgKaW5kZXggMjQ2OTM3Yy4uOTg3ZjU5MSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9kZXZpY2UuaAorKysgYi9pbmNsdWRlL2xpbnV4L2RldmljZS5oCkBAIC05MCw2ICs5MCw5IEBACiAJCQkJICBzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqc3RhcnQsIHZvaWQgKmRhdGEsCiAJCQkJICBpbnQgKCpmbikoc3RydWN0IGRldmljZV9kcml2ZXIgKiwgdm9pZCAqKSk7CiAKK3ZvaWQgYnVzX3NvcnRfYnJlYWR0aGZpcnN0KHN0cnVjdCBidXNfdHlwZSAqYnVzLAorCQkJICAgaW50ICgqY29tcGFyZSkoY29uc3Qgc3RydWN0IGRldmljZSAqYSwKKwkJCQkJICBjb25zdCBzdHJ1Y3QgZGV2aWNlICpiKSk7CiAvKgogICogQnVzIG5vdGlmaWVyczogR2V0IG5vdGlmaWVkIG9mIGFkZGl0aW9uL3JlbW92YWwgb2YgZGV2aWNlcwogICogYW5kIGJpbmRpbmcvdW5iaW5kaW5nIG9mIGRyaXZlcnMgdG8gZGV2aWNlcy4KQEAgLTUwMiw3ICs1MDUsNiBAQAogCQkJCSAgICBkZXZfdCBkZXZ0LCB2b2lkICpkcnZkYXRhLAogCQkJCSAgICBjb25zdCBjaGFyICpmbXQsIC4uLikKIAkJCQkgICAgX19hdHRyaWJ1dGVfXygoZm9ybWF0KHByaW50ZiwgNSwgNikpKTsKLSNkZWZpbmUgZGV2aWNlX2NyZWF0ZV9kcnZkYXRhCWRldmljZV9jcmVhdGUKIGV4dGVybiB2b2lkIGRldmljZV9kZXN0cm95KHN0cnVjdCBjbGFzcyAqY2xzLCBkZXZfdCBkZXZ0KTsKIAogLyoKQEAgLTU1MSw3ICs1NTMsMTEgQEAKICNkZWZpbmUgZGV2X2luZm8oZGV2LCBmb3JtYXQsIGFyZy4uLikJCVwKIAlkZXZfcHJpbnRrKEtFUk5fSU5GTyAsIGRldiAsIGZvcm1hdCAsICMjIGFyZykKIAotI2lmZGVmIERFQlVHCisjaWYgZGVmaW5lZChDT05GSUdfRFlOQU1JQ19QUklOVEtfREVCVUcpCisjZGVmaW5lIGRldl9kYmcoZGV2LCBmb3JtYXQsIC4uLikgZG8geyBcCisJZHluYW1pY19kZXZfZGJnKGRldiwgZm9ybWF0LCAjI19fVkFfQVJHU19fKTsgXAorCX0gd2hpbGUgKDApCisjZWxpZiBkZWZpbmVkKERFQlVHKQogI2RlZmluZSBkZXZfZGJnKGRldiwgZm9ybWF0LCBhcmcuLi4pCQlcCiAJZGV2X3ByaW50ayhLRVJOX0RFQlVHICwgZGV2ICwgZm9ybWF0ICwgIyMgYXJnKQogI2Vsc2UKQEAgLTU2Nyw2ICs1NzMsMTQgQEAKIAkoeyBpZiAoMCkgZGV2X3ByaW50ayhLRVJOX0RFQlVHLCBkZXYsIGZvcm1hdCwgIyNhcmcpOyAwOyB9KQogI2VuZGlmCiAKKy8qCisgKiBkZXZfV0FSTigpIGFjdHMgbGlrZSBkZXZfcHJpbnRrKCksIGJ1dCB3aXRoIHRoZSBrZXkgZGlmZmVyZW5jZQorICogb2YgdXNpbmcgYSBXQVJOL1dBUk5fT04gdG8gZ2V0IHRoZSBtZXNzYWdlIG91dCwgaW5jbHVkaW5nIHRoZQorICogZmlsZS9saW5lIGluZm9ybWF0aW9uIGFuZCBhIGJhY2t0cmFjZS4KKyAqLworI2RlZmluZSBkZXZfV0FSTihkZXYsIGZvcm1hdCwgYXJnLi4uKSBcCisJV0FSTigxLCAiRGV2aWNlOiAlc1xuIiBmb3JtYXQsIGRldl9kcml2ZXJfc3RyaW5nKGRldiksICMjIGFyZyk7CisKIC8qIENyZWF0ZSBhbGlhcywgc28gSSBjYW4gYmUgYXV0b2xvYWRlZC4gKi8KICNkZWZpbmUgTU9EVUxFX0FMSUFTX0NIQVJERVYobWFqb3IsbWlub3IpIFwKIAlNT0RVTEVfQUxJQVMoImNoYXItbWFqb3ItIiBfX3N0cmluZ2lmeShtYWpvcikgIi0iIF9fc3RyaW5naWZ5KG1pbm9yKSkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZGV2cHRzX2ZzLmggYi9pbmNsdWRlL2xpbnV4L2RldnB0c19mcy5oCmluZGV4IDE1NDc2OWMuLjVjZTBlNWYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZGV2cHRzX2ZzLmgKKysrIGIvaW5jbHVkZS9saW51eC9kZXZwdHNfZnMuaApAQCAtMTcsMjAgKzE3LDMxIEBACiAKICNpZmRlZiBDT05GSUdfVU5JWDk4X1BUWVMKIAotaW50IGRldnB0c19uZXdfaW5kZXgodm9pZCk7Ci12b2lkIGRldnB0c19raWxsX2luZGV4KGludCBpZHgpOwotaW50IGRldnB0c19wdHlfbmV3KHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpOyAgICAgIC8qIG1rbm9kIGluIGRldnB0cyAqLwotc3RydWN0IHR0eV9zdHJ1Y3QgKmRldnB0c19nZXRfdHR5KGludCBudW1iZXIpOwkgLyogZ2V0IHR0eSBzdHJ1Y3R1cmUgKi8KLXZvaWQgZGV2cHRzX3B0eV9raWxsKGludCBudW1iZXIpOwkJIC8qIHVubGluayAqLworaW50IGRldnB0c19uZXdfaW5kZXgoc3RydWN0IGlub2RlICpwdG14X2lub2RlKTsKK3ZvaWQgZGV2cHRzX2tpbGxfaW5kZXgoc3RydWN0IGlub2RlICpwdG14X2lub2RlLCBpbnQgaWR4KTsKKy8qIG1rbm9kIGluIGRldnB0cyAqLworaW50IGRldnB0c19wdHlfbmV3KHN0cnVjdCBpbm9kZSAqcHRteF9pbm9kZSwgc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSk7CisvKiBnZXQgdHR5IHN0cnVjdHVyZSAqLworc3RydWN0IHR0eV9zdHJ1Y3QgKmRldnB0c19nZXRfdHR5KHN0cnVjdCBpbm9kZSAqcHRzX2lub2RlLCBpbnQgbnVtYmVyKTsKKy8qIHVubGluayAqLwordm9pZCBkZXZwdHNfcHR5X2tpbGwoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSk7CiAKICNlbHNlCiAKIC8qIER1bW15IHN0dWJzIGluIHRoZSBuby1wdHkgY2FzZSAqLwotc3RhdGljIGlubGluZSBpbnQgZGV2cHRzX25ld19pbmRleCh2b2lkKSB7IHJldHVybiAtRUlOVkFMOyB9Ci1zdGF0aWMgaW5saW5lIHZvaWQgZGV2cHRzX2tpbGxfaW5kZXgoaW50IGlkeCkgeyB9Ci1zdGF0aWMgaW5saW5lIGludCBkZXZwdHNfcHR5X25ldyhzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KSB7IHJldHVybiAtRUlOVkFMOyB9Ci1zdGF0aWMgaW5saW5lIHN0cnVjdCB0dHlfc3RydWN0ICpkZXZwdHNfZ2V0X3R0eShpbnQgbnVtYmVyKSB7IHJldHVybiBOVUxMOyB9Ci1zdGF0aWMgaW5saW5lIHZvaWQgZGV2cHRzX3B0eV9raWxsKGludCBudW1iZXIpIHsgfQorc3RhdGljIGlubGluZSBpbnQgZGV2cHRzX25ld19pbmRleChzdHJ1Y3QgaW5vZGUgKnB0bXhfaW5vZGUpIHsgcmV0dXJuIC1FSU5WQUw7IH0KK3N0YXRpYyBpbmxpbmUgdm9pZCBkZXZwdHNfa2lsbF9pbmRleChzdHJ1Y3QgaW5vZGUgKnB0bXhfaW5vZGUsIGludCBpZHgpIHsgfQorc3RhdGljIGlubGluZSBpbnQgZGV2cHRzX3B0eV9uZXcoc3RydWN0IGlub2RlICpwdG14X2lub2RlLAorCQkJCXN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCit7CisJcmV0dXJuIC1FSU5WQUw7Cit9CitzdGF0aWMgaW5saW5lIHN0cnVjdCB0dHlfc3RydWN0ICpkZXZwdHNfZ2V0X3R0eShzdHJ1Y3QgaW5vZGUgKnB0c19pbm9kZSwKKwkJaW50IG51bWJlcikKK3sKKwlyZXR1cm4gTlVMTDsKK30KK3N0YXRpYyBpbmxpbmUgdm9pZCBkZXZwdHNfcHR5X2tpbGwoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkgeyB9CiAKICNlbmRpZgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9kbWFfcmVtYXBwaW5nLmggYi9pbmNsdWRlL2xpbnV4L2RtYV9yZW1hcHBpbmcuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gZHJpdmVycy9wY2kvZG1hX3JlbWFwcGluZy5oCnJlbmFtZSB0byBpbmNsdWRlL2xpbnV4L2RtYV9yZW1hcHBpbmcuaApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9kbWFyLmggYi9pbmNsdWRlL2xpbnV4L2RtYXIuaAppbmRleCBjMzYwYzU1Li5mMTk4NGZjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2RtYXIuaAorKysgYi9pbmNsdWRlL2xpbnV4L2RtYXIuaApAQCAtNDUsNyArNDUsNiBAQAogCWxpc3RfZm9yX2VhY2hfZW50cnkoZHJoZCwgJmRtYXJfZHJoZF91bml0cywgbGlzdCkKIAogZXh0ZXJuIGludCBkbWFyX3RhYmxlX2luaXQodm9pZCk7Ci1leHRlcm4gaW50IGVhcmx5X2RtYXJfZGV0ZWN0KHZvaWQpOwogZXh0ZXJuIGludCBkbWFyX2Rldl9zY29wZV9pbml0KHZvaWQpOwogCiAvKiBJbnRlbCBJT01NVSBkZXRlY3Rpb24gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZG1pLmggYi9pbmNsdWRlL2xpbnV4L2RtaS5oCmluZGV4IDJhMDYzYjYuLmU1MDg0ZWIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZG1pLmgKKysrIGIvaW5jbHVkZS9saW51eC9kbWkuaApAQCAtMiwyOSArMiw5IEBACiAjZGVmaW5lIF9fRE1JX0hfXwogCiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZF9kZXZpY2V0YWJsZS5oPgogCi1lbnVtIGRtaV9maWVsZCB7Ci0JRE1JX05PTkUsCi0JRE1JX0JJT1NfVkVORE9SLAotCURNSV9CSU9TX1ZFUlNJT04sCi0JRE1JX0JJT1NfREFURSwKLQlETUlfU1lTX1ZFTkRPUiwKLQlETUlfUFJPRFVDVF9OQU1FLAotCURNSV9QUk9EVUNUX1ZFUlNJT04sCi0JRE1JX1BST0RVQ1RfU0VSSUFMLAotCURNSV9QUk9EVUNUX1VVSUQsCi0JRE1JX0JPQVJEX1ZFTkRPUiwKLQlETUlfQk9BUkRfTkFNRSwKLQlETUlfQk9BUkRfVkVSU0lPTiwKLQlETUlfQk9BUkRfU0VSSUFMLAotCURNSV9CT0FSRF9BU1NFVF9UQUcsCi0JRE1JX0NIQVNTSVNfVkVORE9SLAotCURNSV9DSEFTU0lTX1RZUEUsCi0JRE1JX0NIQVNTSVNfVkVSU0lPTiwKLQlETUlfQ0hBU1NJU19TRVJJQUwsCi0JRE1JX0NIQVNTSVNfQVNTRVRfVEFHLAotCURNSV9TVFJJTkdfTUFYLAotfTsKKy8qIGVudW0gZG1pX2ZpZWxkIGlzIGluIG1vZF9kZXZpY2V0YWJsZS5oICovCiAKIGVudW0gZG1pX2RldmljZV90eXBlIHsKIAlETUlfREVWX1RZUEVfQU5ZID0gMCwKQEAgLTQ4LDIzICsyOCw2IEBACiAJdTE2IGhhbmRsZTsKIH07CiAKLS8qCi0gKglETUkgY2FsbGJhY2tzIGZvciBwcm9ibGVtIGJvYXJkcwotICovCi1zdHJ1Y3QgZG1pX3N0cm1hdGNoIHsKLQl1OCBzbG90OwotCWNoYXIgKnN1YnN0cjsKLX07Ci0KLXN0cnVjdCBkbWlfc3lzdGVtX2lkIHsKLQlpbnQgKCpjYWxsYmFjaykoY29uc3Qgc3RydWN0IGRtaV9zeXN0ZW1faWQgKik7Ci0JY29uc3QgY2hhciAqaWRlbnQ7Ci0Jc3RydWN0IGRtaV9zdHJtYXRjaCBtYXRjaGVzWzRdOwotCXZvaWQgKmRyaXZlcl9kYXRhOwotfTsKLQotI2RlZmluZSBETUlfTUFUQ0goYSwgYikJeyBhLCBiIH0KLQogc3RydWN0IGRtaV9kZXZpY2UgewogCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKIAlpbnQgdHlwZTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZHMxMjg2LmggYi9pbmNsdWRlL2xpbnV4L2RzMTI4Ni5oCmluZGV4IGQ4OTg5ODYuLjQ1ZWEwYWEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZHMxMjg2LmgKKysrIGIvaW5jbHVkZS9saW51eC9kczEyODYuaApAQCAtOCw4ICs4LDYgQEAKICNpZm5kZWYgX19MSU5VWF9EUzEyODZfSAogI2RlZmluZSBfX0xJTlVYX0RTMTI4Nl9ICiAKLSNpbmNsdWRlIDxhc20vZHMxMjg2Lmg+Ci0KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiByZWdpc3RlciBzdW1tYXJ5CiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZHZiL2Zyb250ZW5kLmggYi9pbmNsdWRlL2xpbnV4L2R2Yi9mcm9udGVuZC5oCmluZGV4IGM4Y2JkOTAuLjc5YThlZDggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZHZiL2Zyb250ZW5kLmgKKysrIGIvaW5jbHVkZS9saW51eC9kdmIvZnJvbnRlbmQuaApAQCAtNjIsNiArNjIsNyBAQAogCUZFX0NBTl9ISUVSQVJDSFlfQVVUTwkJPSAweDEwMDAwMCwKIAlGRV9DQU5fOFZTQgkJCT0gMHgyMDAwMDAsCiAJRkVfQ0FOXzE2VlNCCQkJPSAweDQwMDAwMCwKKwlGRV9IQVNfRVhURU5ERURfQ0FQUwkJPSAweDgwMDAwMCwgICAvLyBXZSBuZWVkIG1vcmUgYml0c3BhY2UgZm9yIG5ld2VyIEFQSXMsIGluZGljYXRlIHRoaXMuCiAJRkVfTkVFRFNfQkVORElORwkJPSAweDIwMDAwMDAwLCAvLyBub3Qgc3VwcG9ydGVkIGFueW1vcmUsIGRvbid0IHVzZSAoZnJvbnRlbmQgcmVxdWlyZXMgZnJlcXVlbmN5IGJlbmRpbmcpCiAJRkVfQ0FOX1JFQ09WRVIJCQk9IDB4NDAwMDAwMDAsIC8vIGZyb250ZW5kIGNhbiByZWNvdmVyIGZyb20gYSBjYWJsZSB1bnBsdWcgYXV0b21hdGljYWxseQogCUZFX0NBTl9NVVRFX1RTCQkJPSAweDgwMDAwMDAwICAvLyBmcm9udGVuZCBjYW4gc3RvcCBzcHVyaW91cyBUUyBkYXRhIG91dHB1dApAQCAtMTQ3LDcgKzE0OCw5IEBACiAJRkVDXzZfNywKIAlGRUNfN184LAogCUZFQ184XzksCi0JRkVDX0FVVE8KKwlGRUNfQVVUTywKKwlGRUNfM181LAorCUZFQ185XzEwLAogfSBmZV9jb2RlX3JhdGVfdDsKIAogCkBAIC0xNjAsNyArMTYzLDExIEBACiAJUUFNXzI1NiwKIAlRQU1fQVVUTywKIAlWU0JfOCwKLQlWU0JfMTYKKwlWU0JfMTYsCisJUFNLXzgsCisJQVBTS18xNiwKKwlBUFNLXzMyLAorCURRUFNLLAogfSBmZV9tb2R1bGF0aW9uX3Q7CiAKIHR5cGVkZWYgZW51bSBmZV90cmFuc21pdF9tb2RlIHsKQEAgLTIzOSw2ICsyNDYsMTA3IEBACiAJc3RydWN0IGR2Yl9mcm9udGVuZF9wYXJhbWV0ZXJzIHBhcmFtZXRlcnM7CiB9OwogCisvKiBTMkFQSSBDb21tYW5kcyAqLworI2RlZmluZSBEVFZfVU5ERUZJTkVECQkwCisjZGVmaW5lIERUVl9UVU5FCQkxCisjZGVmaW5lIERUVl9DTEVBUgkJMgorI2RlZmluZSBEVFZfRlJFUVVFTkNZCQkzCisjZGVmaW5lIERUVl9NT0RVTEFUSU9OCQk0CisjZGVmaW5lIERUVl9CQU5EV0lEVEhfSFoJNQorI2RlZmluZSBEVFZfSU5WRVJTSU9OCQk2CisjZGVmaW5lIERUVl9ESVNFUUNfTUFTVEVSCTcKKyNkZWZpbmUgRFRWX1NZTUJPTF9SQVRFCQk4CisjZGVmaW5lIERUVl9JTk5FUl9GRUMJCTkKKyNkZWZpbmUgRFRWX1ZPTFRBR0UJCTEwCisjZGVmaW5lIERUVl9UT05FCQkxMQorI2RlZmluZSBEVFZfUElMT1QJCTEyCisjZGVmaW5lIERUVl9ST0xMT0ZGCQkxMworI2RlZmluZSBEVFZfRElTRVFDX1NMQVZFX1JFUExZCTE0CisKKy8qIEJhc2ljIGVudW1lcmF0aW9uIHNldCBmb3IgcXVlcnlpbmcgdW5saW1pdGVkIGNhcGFiaWxpdGllcyAqLworI2RlZmluZSBEVFZfRkVfQ0FQQUJJTElUWV9DT1VOVAkxNQorI2RlZmluZSBEVFZfRkVfQ0FQQUJJTElUWQkxNgorI2RlZmluZSBEVFZfREVMSVZFUllfU1lTVEVNCTE3CisKKyNkZWZpbmUgRFRWX0FQSV9WRVJTSU9OCQkJCTM1CisjZGVmaW5lIERUVl9BUElfVkVSU0lPTgkJCQkzNQorI2RlZmluZSBEVFZfQ09ERV9SQVRFX0hQCQkJMzYKKyNkZWZpbmUgRFRWX0NPREVfUkFURV9MUAkJCTM3CisjZGVmaW5lIERUVl9HVUFSRF9JTlRFUlZBTAkJCTM4CisjZGVmaW5lIERUVl9UUkFOU01JU1NJT05fTU9ERQkJCTM5CisjZGVmaW5lIERUVl9ISUVSQVJDSFkJCQkJNDAKKworI2RlZmluZSBEVFZfTUFYX0NPTU1BTkQJCQkJRFRWX0hJRVJBUkNIWQorCit0eXBlZGVmIGVudW0gZmVfcGlsb3QgeworCVBJTE9UX09OLAorCVBJTE9UX09GRiwKKwlQSUxPVF9BVVRPLAorfSBmZV9waWxvdF90OworCit0eXBlZGVmIGVudW0gZmVfcm9sbG9mZiB7CisJUk9MTE9GRl8zNSwgLyogSW1wbGllZCB2YWx1ZSBpbiBEVkItUywgZGVmYXVsdCBmb3IgRFZCLVMyICovCisJUk9MTE9GRl8yMCwKKwlST0xMT0ZGXzI1LAorCVJPTExPRkZfQVVUTywKK30gZmVfcm9sbG9mZl90OworCit0eXBlZGVmIGVudW0gZmVfZGVsaXZlcnlfc3lzdGVtIHsKKwlTWVNfVU5ERUZJTkVELAorCVNZU19EVkJDX0FOTkVYX0FDLAorCVNZU19EVkJDX0FOTkVYX0IsCisJU1lTX0RWQlQsCisJU1lTX0RTUywKKwlTWVNfRFZCUywKKwlTWVNfRFZCUzIsCisJU1lTX0RWQkgsCisJU1lTX0lTREJULAorCVNZU19JU0RCUywKKwlTWVNfSVNEQkMsCisJU1lTX0FUU0MsCisJU1lTX0FUU0NNSCwKKwlTWVNfRE1CVEgsCisJU1lTX0NNTUIsCisJU1lTX0RBQiwKK30gZmVfZGVsaXZlcnlfc3lzdGVtX3Q7CisKK3N0cnVjdCBkdHZfY21kc19oIHsKKwljaGFyCSpuYW1lOwkJLyogQSBkaXNwbGF5IG5hbWUgZm9yIGRlYnVnZ2luZyBwdXJwb3NlcyAqLworCisJX191MzIJY21kOwkJLyogQSB1bmlxdWUgSUQgKi8KKworCS8qIEZsYWdzICovCisJX191MzIJc2V0OjE7CQkvKiBFaXRoZXIgYSBzZXQgb3IgZ2V0IHByb3BlcnR5ICovCisJX191MzIJYnVmZmVyOjE7CS8qIERvZXMgdGhpcyBwcm9wZXJ0eSB1c2UgdGhlIGJ1ZmZlcj8gKi8KKwlfX3UzMglyZXNlcnZlZDozMDsJLyogQWxpZ24gKi8KK307CisKK3N0cnVjdCBkdHZfcHJvcGVydHkgeworCV9fdTMyIGNtZDsKKwlfX3UzMiByZXNlcnZlZFszXTsKKwl1bmlvbiB7CisJCV9fdTMyIGRhdGE7CisJCXN0cnVjdCB7CisJCQlfX3U4IGRhdGFbMzJdOworCQkJX191MzIgbGVuOworCQkJX191MzIgcmVzZXJ2ZWQxWzNdOworCQkJdm9pZCAqcmVzZXJ2ZWQyOworCQl9IGJ1ZmZlcjsKKwl9IHU7CisJaW50IHJlc3VsdDsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCisvKiBudW0gb2YgcHJvcGVydGllcyBjYW5ub3QgZXhjZWVkIERUVl9JT0NUTF9NQVhfTVNHUyBwZXIgaW9jdGwgKi8KKyNkZWZpbmUgRFRWX0lPQ1RMX01BWF9NU0dTIDY0CisKK3N0cnVjdCBkdHZfcHJvcGVydGllcyB7CisJX191MzIgbnVtOworCXN0cnVjdCBkdHZfcHJvcGVydHkgKnByb3BzOworfTsKKworI2RlZmluZSBGRV9TRVRfUFJPUEVSVFkJCSAgIF9JT1coJ28nLCA4Miwgc3RydWN0IGR0dl9wcm9wZXJ0aWVzKQorI2RlZmluZSBGRV9HRVRfUFJPUEVSVFkJCSAgIF9JT1IoJ28nLCA4Mywgc3RydWN0IGR0dl9wcm9wZXJ0aWVzKQorCiAKIC8qKgogICogV2hlbiBzZXQsIHRoaXMgZmxhZyB3aWxsIGRpc2FibGUgYW55IHppZ3phZ2dpbmcgb3Igb3RoZXIgIm5vcm1hbCIgdHVuaW5nCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2R2Yi92ZXJzaW9uLmggYi9pbmNsdWRlL2xpbnV4L2R2Yi92ZXJzaW9uLmgKaW5kZXggMTI2ZTBjMi4uMjViODIzYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9kdmIvdmVyc2lvbi5oCisrKyBiL2luY2x1ZGUvbGludXgvZHZiL3ZlcnNpb24uaApAQCAtMjMsNyArMjMsNyBAQAogI2lmbmRlZiBfRFZCVkVSU0lPTl9IXwogI2RlZmluZSBfRFZCVkVSU0lPTl9IXwogCi0jZGVmaW5lIERWQl9BUElfVkVSU0lPTiAzCi0jZGVmaW5lIERWQl9BUElfVkVSU0lPTl9NSU5PUiAyCisjZGVmaW5lIERWQl9BUElfVkVSU0lPTiA1CisjZGVmaW5lIERWQl9BUElfVkVSU0lPTl9NSU5PUiAwCiAKICNlbmRpZiAvKl9EVkJWRVJTSU9OX0hfKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZHluYW1pY19wcmludGsuaCBiL2luY2x1ZGUvbGludXgvZHluYW1pY19wcmludGsuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZDUyOGQwCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9keW5hbWljX3ByaW50ay5oCkBAIC0wLDAgKzEsOTMgQEAKKyNpZm5kZWYgX0RZTkFNSUNfUFJJTlRLX0gKKyNkZWZpbmUgX0RZTkFNSUNfUFJJTlRLX0gKKworI2RlZmluZSBEWU5BTUlDX0RFQlVHX0hBU0hfQklUUyA2CisjZGVmaW5lIERFQlVHX0hBU0hfVEFCTEVfU0laRSAoMSA8PCBEWU5BTUlDX0RFQlVHX0hBU0hfQklUUykKKworI2RlZmluZSBUWVBFX0JPT0xFQU4gMQorCisjZGVmaW5lIERZTkFNSUNfRU5BQkxFRF9BTEwgMAorI2RlZmluZSBEWU5BTUlDX0VOQUJMRURfTk9ORSAxCisjZGVmaW5lIERZTkFNSUNfRU5BQkxFRF9TT01FIDIKKworZXh0ZXJuIGludCBkeW5hbWljX2VuYWJsZWQ7CisKKy8qIGR5bmFtaWNfcHJpbnRrX2VuYWJsZWQsIGFuZCBkeW5hbWljX3ByaW50a19lbmFibGVkMiBhcmUgYml0bWFza3MgaW4gd2hpY2gKKyAqIGJpdCBuIGlzIHNldCB0byAxIGlmIGFueSBtb2RuYW1lIGhhc2hlcyBpbnRvIHRoZSBidWNrZXQgbiwgMCBvdGhlcndpc2UuIFRoZXkKKyAqIHVzZSBpbmRlcGVuZGVudCBoYXNoIGZ1bmN0aW9ucywgdG8gcmVkdWNlIHRoZSBjaGFuY2Ugb2YgZmFsc2UgcG9zaXRpdmVzLgorICovCitleHRlcm4gbG9uZyBsb25nIGR5bmFtaWNfcHJpbnRrX2VuYWJsZWQ7CitleHRlcm4gbG9uZyBsb25nIGR5bmFtaWNfcHJpbnRrX2VuYWJsZWQyOworCitzdHJ1Y3QgbW9kX2RlYnVnIHsKKwljaGFyICptb2RuYW1lOworCWNoYXIgKmxvZ2ljYWxfbW9kbmFtZTsKKwljaGFyICpmbGFnX25hbWVzOworCWludCB0eXBlOworCWludCBoYXNoOworCWludCBoYXNoMjsKK30gX19hdHRyaWJ1dGVfXygoYWxpZ25lZCg4KSkpOworCitpbnQgcmVnaXN0ZXJfZHluYW1pY19kZWJ1Z19tb2R1bGUoY2hhciAqbW9kX25hbWUsIGludCB0eXBlLCBjaGFyICpzaGFyZV9uYW1lLAorCQkJCQljaGFyICpmbGFncywgaW50IGhhc2gsIGludCBoYXNoMik7CisKKyNpZiBkZWZpbmVkKENPTkZJR19EWU5BTUlDX1BSSU5US19ERUJVRykKK2V4dGVybiBpbnQgdW5yZWdpc3Rlcl9keW5hbWljX2RlYnVnX21vZHVsZShjaGFyICptb2RfbmFtZSk7CitleHRlcm4gaW50IF9fZHluYW1pY19kYmdfZW5hYmxlZF9oZWxwZXIoY2hhciAqbW9kbmFtZSwgaW50IHR5cGUsCisJCQkJCWludCB2YWx1ZSwgaW50IGhhc2gpOworCisjZGVmaW5lIF9fZHluYW1pY19kYmdfZW5hYmxlZChtb2R1bGUsIHR5cGUsIHZhbHVlLCBsZXZlbCwgaGFzaCkgICh7CSAgICAgXAorCWludCBfX3JldCA9IDA7CQkJCQkJCSAgICAgXAorCWlmICh1bmxpa2VseSgoZHluYW1pY19wcmludGtfZW5hYmxlZCAmICgxTEwgPDwgREVCVUdfSEFTSCkpICYmCSAgICAgXAorCQkJKGR5bmFtaWNfcHJpbnRrX2VuYWJsZWQyICYgKDFMTCA8PCBERUJVR19IQVNIMikpKSkgICBcCisJCQlfX3JldCA9IF9fZHluYW1pY19kYmdfZW5hYmxlZF9oZWxwZXIobW9kdWxlLCB0eXBlLCAgIFwKKwkJCQkJCQkJdmFsdWUsIGhhc2gpO1wKKwlfX3JldDsgfSkKKworI2RlZmluZSBkeW5hbWljX3ByX2RlYnVnKGZtdCwgLi4uKSBkbyB7CQkJCQkgICAgXAorCXN0YXRpYyBjaGFyIG1vZF9uYW1lW10JCQkJCQkgICAgXAorCV9fYXR0cmlidXRlX18oKHNlY3Rpb24oIl9fdmVyYm9zZV9zdHJpbmdzIikpKQkJCSAgICBcCisJID0gS0JVSUxEX01PRE5BTUU7CQkJCQkJICAgIFwKKwlzdGF0aWMgc3RydWN0IG1vZF9kZWJ1ZyBkZXNjcmlwdG9yCQkJCSAgICBcCisJX191c2VkCQkJCQkJCQkgICAgXAorCV9fYXR0cmlidXRlX18oKHNlY3Rpb24oIl9fdmVyYm9zZSIpLCBhbGlnbmVkKDgpKSkgPQkJICAgIFwKKwl7IG1vZF9uYW1lLCBtb2RfbmFtZSwgTlVMTCwgVFlQRV9CT09MRUFOLCBERUJVR19IQVNILCBERUJVR19IQVNIMiB9O1wKKwlpZiAoX19keW5hbWljX2RiZ19lbmFibGVkKEtCVUlMRF9NT0ROQU1FLCBUWVBFX0JPT0xFQU4sCQkgICAgXAorCQkJCQkJMCwgMCwgREVCVUdfSEFTSCkpCSAgICBcCisJCXByaW50ayhLRVJOX0RFQlVHIEtCVUlMRF9NT0ROQU1FICI6IiBmbXQsCQkgICAgXAorCQkJCSMjX19WQV9BUkdTX18pOwkJCQkgICAgXAorCX0gd2hpbGUgKDApCisKKyNkZWZpbmUgZHluYW1pY19kZXZfZGJnKGRldiwgZm9ybWF0LCAuLi4pIGRvIHsJCQkJICAgIFwKKwlzdGF0aWMgY2hhciBtb2RfbmFtZVtdCQkJCQkJICAgIFwKKwlfX2F0dHJpYnV0ZV9fKChzZWN0aW9uKCJfX3ZlcmJvc2Vfc3RyaW5ncyIpKSkJCQkgICAgXAorCSA9IEtCVUlMRF9NT0ROQU1FOwkJCQkJCSAgICBcCisJc3RhdGljIHN0cnVjdCBtb2RfZGVidWcgZGVzY3JpcHRvcgkJCQkgICAgXAorCV9fdXNlZAkJCQkJCQkJICAgIFwKKwlfX2F0dHJpYnV0ZV9fKChzZWN0aW9uKCJfX3ZlcmJvc2UiKSwgYWxpZ25lZCg4KSkpID0JCSAgICBcCisJeyBtb2RfbmFtZSwgbW9kX25hbWUsIE5VTEwsIFRZUEVfQk9PTEVBTiwgREVCVUdfSEFTSCwgREVCVUdfSEFTSDIgfTtcCisJaWYgKF9fZHluYW1pY19kYmdfZW5hYmxlZChLQlVJTERfTU9ETkFNRSwgVFlQRV9CT09MRUFOLAkJICAgIFwKKwkJCQkJCTAsIDAsIERFQlVHX0hBU0gpKQkgICAgXAorCQkJZGV2X3ByaW50ayhLRVJOX0RFQlVHLCBkZXYsCQkJICAgIFwKKwkJCQkJS0JVSUxEX01PRE5BTUUgIjogIiBmb3JtYXQsCSAgICBcCisJCQkJCSMjX19WQV9BUkdTX18pOwkJCSAgICBcCisJfSB3aGlsZSAoMCkKKworI2Vsc2UKKworc3RhdGljIGlubGluZSBpbnQgdW5yZWdpc3Rlcl9keW5hbWljX2RlYnVnX21vZHVsZShjb25zdCBjaGFyICptb2RfbmFtZSkKK3sKKwlyZXR1cm4gMDsKK30KK3N0YXRpYyBpbmxpbmUgaW50IF9fZHluYW1pY19kYmdfZW5hYmxlZF9oZWxwZXIoY2hhciAqbW9kbmFtZSwgaW50IHR5cGUsCisJCQkJCQlpbnQgdmFsdWUsIGludCBoYXNoKQoreworCXJldHVybiAwOworfQorCisjZGVmaW5lIF9fZHluYW1pY19kYmdfZW5hYmxlZChtb2R1bGUsIHR5cGUsIHZhbHVlLCBsZXZlbCwgaGFzaCkgICh7IDA7IH0pCisjZGVmaW5lIGR5bmFtaWNfcHJfZGVidWcoZm10LCAuLi4pICBkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIGR5bmFtaWNfZGV2X2RiZyhkZXYsIGZvcm1hdCwgLi4uKSAgZG8geyB9IHdoaWxlICgwKQorI2VuZGlmCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9lZmkuaCBiL2luY2x1ZGUvbGludXgvZWZpLmgKaW5kZXggODA3MzczZC4uYmI2NmZlYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9lZmkuaAorKysgYi9pbmNsdWRlL2xpbnV4L2VmaS5oCkBAIC0yMDgsNiArMjA4LDkgQEAKICNkZWZpbmUgRUZJX0dMT0JBTF9WQVJJQUJMRV9HVUlEIFwKICAgICBFRklfR1VJRCggIDB4OGJlNGRmNjEsIDB4OTNjYSwgMHgxMWQyLCAweGFhLCAweDBkLCAweDAwLCAweGUwLCAweDk4LCAweDAzLCAweDJiLCAweDhjICkKIAorI2RlZmluZSBVVl9TWVNURU1fVEFCTEVfR1VJRCBcCisgICAgRUZJX0dVSUQoICAweDNiMTNhN2Q0LCAweDYzM2UsIDB4MTFkZCwgMHg5MywgMHhlYywgMHhkYSwgMHgyNSwgMHg1NiwgMHhkOCwgMHg5NSwgMHg5MyApCisKIHR5cGVkZWYgc3RydWN0IHsKIAllZmlfZ3VpZF90IGd1aWQ7CiAJdW5zaWduZWQgbG9uZyB0YWJsZTsKQEAgLTI1NSw2ICsyNTgsNyBAQAogCXVuc2lnbmVkIGxvbmcgYm9vdF9pbmZvOwkvKiBib290IGluZm8gdGFibGUgKi8KIAl1bnNpZ25lZCBsb25nIGhjZHA7CQkvKiBIQ0RQIHRhYmxlICovCiAJdW5zaWduZWQgbG9uZyB1Z2E7CQkvKiBVR0EgdGFibGUgKi8KKwl1bnNpZ25lZCBsb25nIHV2X3N5c3RhYjsJLyogVVYgc3lzdGVtIHRhYmxlICovCiAJZWZpX2dldF90aW1lX3QgKmdldF90aW1lOwogCWVmaV9zZXRfdGltZV90ICpzZXRfdGltZTsKIAllZmlfZ2V0X3dha2V1cF90aW1lX3QgKmdldF93YWtldXBfdGltZTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZXh0Ml9mcy5oIGIvaW5jbHVkZS9saW51eC9leHQyX2ZzLmgKaW5kZXggMmVmZTdiOC4uNzhjNzc1YSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9leHQyX2ZzLmgKKysrIGIvaW5jbHVkZS9saW51eC9leHQyX2ZzLmgKQEAgLTQ3LDcgKzQ3LDcgQEAKICNpZmRlZiBFWFQyRlNfREVCVUcKICMJZGVmaW5lIGV4dDJfZGVidWcoZiwgYS4uLikJeyBcCiAJCQkJCXByaW50ayAoIkVYVDItZnMgREVCVUcgKCVzLCAlZCk6ICVzOiIsIFwKLQkJCQkJCV9fRklMRV9fLCBfX0xJTkVfXywgX19GVU5DVElPTl9fKTsgXAorCQkJCQkJX19GSUxFX18sIF9fTElORV9fLCBfX2Z1bmNfXyk7IFwKIAkJCQkgIAlwcmludGsgKGYsICMjIGEpOyBcCiAJCQkJCX0KICNlbHNlCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2V4dDNfZnMuaCBiL2luY2x1ZGUvbGludXgvZXh0M19mcy5oCmluZGV4IDgxMjBmYTEuLmQxNGYwMjkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZXh0M19mcy5oCisrKyBiL2luY2x1ZGUvbGludXgvZXh0M19mcy5oCkBAIC00Myw3ICs0Myw3IEBACiAjZGVmaW5lIGV4dDNfZGVidWcoZiwgYS4uLikJCQkJCQlcCiAJZG8gewkJCQkJCQkJXAogCQlwcmludGsgKEtFUk5fREVCVUcgIkVYVDMtZnMgREVCVUcgKCVzLCAlZCk6ICVzOiIsCVwKLQkJCV9fRklMRV9fLCBfX0xJTkVfXywgX19GVU5DVElPTl9fKTsJCVwKKwkJCV9fRklMRV9fLCBfX0xJTkVfXywgX19mdW5jX18pOwkJXAogCQlwcmludGsgKEtFUk5fREVCVUcgZiwgIyMgYSk7CQkJCVwKIAl9IHdoaWxlICgwKQogI2Vsc2UKQEAgLTM4MCw2ICszODAsOCBAQAogI2RlZmluZSBFWFQzX01PVU5UX1FVT1RBCQkweDgwMDAwIC8qIFNvbWUgcXVvdGEgb3B0aW9uIHNldCAqLwogI2RlZmluZSBFWFQzX01PVU5UX1VTUlFVT1RBCQkweDEwMDAwMCAvKiAib2xkIiB1c2VyIHF1b3RhICovCiAjZGVmaW5lIEVYVDNfTU9VTlRfR1JQUVVPVEEJCTB4MjAwMDAwIC8qICJvbGQiIGdyb3VwIHF1b3RhICovCisjZGVmaW5lIEVYVDNfTU9VTlRfREFUQV9FUlJfQUJPUlQJMHg0MDAwMDAgLyogQWJvcnQgb24gZmlsZSBkYXRhIHdyaXRlCisJCQkJCQkgICogZXJyb3IgaW4gb3JkZXJlZCBtb2RlICovCiAKIC8qIENvbXBhdGliaWxpdHksIGZvciBoYXZpbmcgYm90aCBleHQyX2ZzLmggYW5kIGV4dDNfZnMuaCBpbmNsdWRlZCBhdCBvbmNlICovCiAjaWZuZGVmIF9MSU5VWF9FWFQyX0ZTX0gKQEAgLTg3MSw3ICs4NzMsNyBAQAogI2RlZmluZSBleHQzX3N0ZF9lcnJvcihzYiwgZXJybm8pCQkJCVwKIGRvIHsJCQkJCQkJCVwKIAlpZiAoKGVycm5vKSkJCQkJCQlcCi0JCV9fZXh0M19zdGRfZXJyb3IoKHNiKSwgX19GVU5DVElPTl9fLCAoZXJybm8pKTsJXAorCQlfX2V4dDNfc3RkX2Vycm9yKChzYiksIF9fZnVuY19fLCAoZXJybm8pKTsJXAogfSB3aGlsZSAoMCkKIAogLyoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZXh0M19qYmQuaCBiL2luY2x1ZGUvbGludXgvZXh0M19qYmQuaAppbmRleCA4YzQzYjEzLi5jZjgyZDUxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2V4dDNfamJkLmgKKysrIGIvaW5jbHVkZS9saW51eC9leHQzX2piZC5oCkBAIC0xMzcsMTcgKzEzNywxNyBAQAogCQkJCWhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgpOwogCiAjZGVmaW5lIGV4dDNfam91cm5hbF9nZXRfdW5kb19hY2Nlc3MoaGFuZGxlLCBiaCkgXAotCV9fZXh0M19qb3VybmFsX2dldF91bmRvX2FjY2VzcyhfX0ZVTkNUSU9OX18sIChoYW5kbGUpLCAoYmgpKQorCV9fZXh0M19qb3VybmFsX2dldF91bmRvX2FjY2VzcyhfX2Z1bmNfXywgKGhhbmRsZSksIChiaCkpCiAjZGVmaW5lIGV4dDNfam91cm5hbF9nZXRfd3JpdGVfYWNjZXNzKGhhbmRsZSwgYmgpIFwKLQlfX2V4dDNfam91cm5hbF9nZXRfd3JpdGVfYWNjZXNzKF9fRlVOQ1RJT05fXywgKGhhbmRsZSksIChiaCkpCisJX19leHQzX2pvdXJuYWxfZ2V0X3dyaXRlX2FjY2VzcyhfX2Z1bmNfXywgKGhhbmRsZSksIChiaCkpCiAjZGVmaW5lIGV4dDNfam91cm5hbF9yZXZva2UoaGFuZGxlLCBibG9ja25yLCBiaCkgXAotCV9fZXh0M19qb3VybmFsX3Jldm9rZShfX0ZVTkNUSU9OX18sIChoYW5kbGUpLCAoYmxvY2tuciksIChiaCkpCisJX19leHQzX2pvdXJuYWxfcmV2b2tlKF9fZnVuY19fLCAoaGFuZGxlKSwgKGJsb2NrbnIpLCAoYmgpKQogI2RlZmluZSBleHQzX2pvdXJuYWxfZ2V0X2NyZWF0ZV9hY2Nlc3MoaGFuZGxlLCBiaCkgXAotCV9fZXh0M19qb3VybmFsX2dldF9jcmVhdGVfYWNjZXNzKF9fRlVOQ1RJT05fXywgKGhhbmRsZSksIChiaCkpCisJX19leHQzX2pvdXJuYWxfZ2V0X2NyZWF0ZV9hY2Nlc3MoX19mdW5jX18sIChoYW5kbGUpLCAoYmgpKQogI2RlZmluZSBleHQzX2pvdXJuYWxfZGlydHlfbWV0YWRhdGEoaGFuZGxlLCBiaCkgXAotCV9fZXh0M19qb3VybmFsX2RpcnR5X21ldGFkYXRhKF9fRlVOQ1RJT05fXywgKGhhbmRsZSksIChiaCkpCisJX19leHQzX2pvdXJuYWxfZGlydHlfbWV0YWRhdGEoX19mdW5jX18sIChoYW5kbGUpLCAoYmgpKQogI2RlZmluZSBleHQzX2pvdXJuYWxfZm9yZ2V0KGhhbmRsZSwgYmgpIFwKLQlfX2V4dDNfam91cm5hbF9mb3JnZXQoX19GVU5DVElPTl9fLCAoaGFuZGxlKSwgKGJoKSkKKwlfX2V4dDNfam91cm5hbF9mb3JnZXQoX19mdW5jX18sIChoYW5kbGUpLCAoYmgpKQogCiBpbnQgZXh0M19qb3VybmFsX2RpcnR5X2RhdGEoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCk7CiAKQEAgLTE2MCw3ICsxNjAsNyBAQAogfQogCiAjZGVmaW5lIGV4dDNfam91cm5hbF9zdG9wKGhhbmRsZSkgXAotCV9fZXh0M19qb3VybmFsX3N0b3AoX19GVU5DVElPTl9fLCAoaGFuZGxlKSkKKwlfX2V4dDNfam91cm5hbF9zdG9wKF9fZnVuY19fLCAoaGFuZGxlKSkKIAogc3RhdGljIGlubGluZSBoYW5kbGVfdCAqZXh0M19qb3VybmFsX2N1cnJlbnRfaGFuZGxlKHZvaWQpCiB7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2ZiLmggYi9pbmNsdWRlL2xpbnV4L2ZiLmgKaW5kZXggNTMxY2NkNS4uNzVhODFlYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9mYi5oCisrKyBiL2luY2x1ZGUvbGludXgvZmIuaApAQCAtODA4LDYgKzgwOCw3IEBACiBzdHJ1Y3QgZmJfaW5mbyB7CiAJaW50IG5vZGU7CiAJaW50IGZsYWdzOworCXN0cnVjdCBtdXRleCBsb2NrOwkJLyogTG9jayBmb3Igb3Blbi9yZWxlYXNlL2lvY3RsIGZ1bmNzICovCiAJc3RydWN0IGZiX3Zhcl9zY3JlZW5pbmZvIHZhcjsJLyogQ3VycmVudCB2YXIgKi8KIAlzdHJ1Y3QgZmJfZml4X3NjcmVlbmluZm8gZml4OwkvKiBDdXJyZW50IGZpeCAqLwogCXN0cnVjdCBmYl9tb25zcGVjcyBtb25zcGVjczsJLyogQ3VycmVudCBNb25pdG9yIHNwZWNzICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2ZpcmV3aXJlLWNkZXYuaCBiL2luY2x1ZGUvbGludXgvZmlyZXdpcmUtY2Rldi5oCmluZGV4IDBmMGUyNzEuLjRkMDc4ZTkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZmlyZXdpcmUtY2Rldi5oCisrKyBiL2luY2x1ZGUvbGludXgvZmlyZXdpcmUtY2Rldi5oCkBAIC0xNTQsOCArMTU0LDEzIEBACiAgKiBAcmVxdWVzdDogICAgICAgVmFsaWQgaWYgQGNvbW1vbi50eXBlID09ICVGV19DREVWX0VWRU5UX1JFUVVFU1QKICAqIEBpc29faW50ZXJydXB0OiBWYWxpZCBpZiBAY29tbW9uLnR5cGUgPT0gJUZXX0NERVZfRVZFTlRfSVNPX0lOVEVSUlVQVAogICoKLSAqIENvbnZlbmllbmNlIHVuaW9uIGZvciB1c2Vyc3BhY2UgdXNlLiAgRXZlbnRzIGNvdWxkIGJlIHJlYWQoMikgaW50byBhIGNoYXIKLSAqIGJ1ZmZlciBhbmQgdGhlbiBjYXN0IHRvIHRoaXMgdW5pb24gZm9yIGZ1cnRoZXIgcHJvY2Vzc2luZy4KKyAqIENvbnZlbmllbmNlIHVuaW9uIGZvciB1c2Vyc3BhY2UgdXNlLiAgRXZlbnRzIGNvdWxkIGJlIHJlYWQoMikgaW50byBhbgorICogYXBwcm9wcmlhdGVseSBhbGlnbmVkIGNoYXIgYnVmZmVyIGFuZCB0aGVuIGNhc3QgdG8gdGhpcyB1bmlvbiBmb3IgZnVydGhlcgorICogcHJvY2Vzc2luZy4gIE5vdGUgdGhhdCBmb3IgYSByZXF1ZXN0LCByZXNwb25zZSBvciBpc29faW50ZXJydXB0IGV2ZW50LAorICogdGhlIGRhdGFbXSBvciBoZWFkZXJbXSBtYXkgbWFrZSB0aGUgc2l6ZSBvZiB0aGUgZnVsbCBldmVudCBsYXJnZXIgdGhhbgorICogc2l6ZW9mKHVuaW9uIGZ3X2NkZXZfZXZlbnQpLiAgQWxzbyBub3RlIHRoYXQgaWYgeW91IGF0dGVtcHQgdG8gcmVhZCgyKQorICogYW4gZXZlbnQgaW50byBhIGJ1ZmZlciB0aGF0IGlzIG5vdCBsYXJnZSBlbm91Z2ggZm9yIGl0LCB0aGUgZGF0YSB0aGF0IGRvZXMKKyAqIG5vdCBmaXQgd2lsbCBiZSBkaXNjYXJkZWQgc28gdGhhdCB0aGUgbmV4dCByZWFkKDIpIHdpbGwgcmV0dXJuIGEgbmV3IGV2ZW50LgogICovCiB1bmlvbiBmd19jZGV2X2V2ZW50IHsKIAlzdHJ1Y3QgZndfY2Rldl9ldmVudF9jb21tb24gY29tbW9uOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9mcmVlemVyLmggYi9pbmNsdWRlL2xpbnV4L2ZyZWV6ZXIuaAppbmRleCBkZWRkZWVkLi44ZjIyNTMzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2ZyZWV6ZXIuaAorKysgYi9pbmNsdWRlL2xpbnV4L2ZyZWV6ZXIuaApAQCAtNiw3ICs2LDcgQEAKICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KIAotI2lmZGVmIENPTkZJR19QTV9TTEVFUAorI2lmZGVmIENPTkZJR19GUkVFWkVSCiAvKgogICogQ2hlY2sgaWYgYSBwcm9jZXNzIGhhcyBiZWVuIGZyb3plbgogICovCkBAIC0zOSwyOCArMzksMTggQEAKIAljbGVhcl90c2tfdGhyZWFkX2ZsYWcocCwgVElGX0ZSRUVaRSk7CiB9CiAKK3N0YXRpYyBpbmxpbmUgYm9vbCBzaG91bGRfc2VuZF9zaWduYWwoc3RydWN0IHRhc2tfc3RydWN0ICpwKQoreworCXJldHVybiAhKHAtPmZsYWdzICYgUEZfRlJFRVpFUl9OT1NJRyk7Cit9CisKIC8qCiAgKiBXYWtlIHVwIGEgZnJvemVuIHByb2Nlc3MKLSAqCi0gKiB0YXNrX2xvY2soKSBpcyB0YWtlbiB0byBwcmV2ZW50IHRoZSByYWNlIHdpdGggcmVmcmlnZXJhdG9yKCkgd2hpY2ggbWF5Ci0gKiBvY2N1ciBpZiB0aGUgZnJlZXppbmcgb2YgdGFza3MgZmFpbHMuICBOYW1lbHksIHdpdGhvdXQgdGhlIGxvY2ssIGlmIHRoZQotICogZnJlZXppbmcgb2YgdGFza3MgZmFpbGVkLCB0aGF3X3Rhc2tzKCkgbWlnaHQgaGF2ZSBydW4gYmVmb3JlIGEgdGFzayBpbgotICogcmVmcmlnZXJhdG9yKCkgY291bGQgY2FsbCBmcm96ZW5fcHJvY2VzcygpLCBpbiB3aGljaCBjYXNlIHRoZSB0YXNrIHdvdWxkIGJlCi0gKiBmcm96ZW4gYW5kIG5vIG9uZSB3b3VsZCB0aGF3IGl0LgogICovCi1zdGF0aWMgaW5saW5lIGludCB0aGF3X3Byb2Nlc3Moc3RydWN0IHRhc2tfc3RydWN0ICpwKQotewotCXRhc2tfbG9jayhwKTsKLQlpZiAoZnJvemVuKHApKSB7Ci0JCXAtPmZsYWdzICY9IH5QRl9GUk9aRU47Ci0JCXRhc2tfdW5sb2NrKHApOwotCQl3YWtlX3VwX3Byb2Nlc3MocCk7Ci0JCXJldHVybiAxOwotCX0KLQljbGVhcl9mcmVlemVfZmxhZyhwKTsKLQl0YXNrX3VubG9jayhwKTsKLQlyZXR1cm4gMDsKLX0KK2V4dGVybiBpbnQgX190aGF3X3Byb2Nlc3Moc3RydWN0IHRhc2tfc3RydWN0ICpwKTsKKworLyogVGFrZXMgYW5kIHJlbGVhc2VzIHRhc2sgYWxsb2MgbG9jayB1c2luZyB0YXNrX2xvY2soKSAqLworZXh0ZXJuIGludCB0aGF3X3Byb2Nlc3Moc3RydWN0IHRhc2tfc3RydWN0ICpwKTsKIAogZXh0ZXJuIHZvaWQgcmVmcmlnZXJhdG9yKHZvaWQpOwogZXh0ZXJuIGludCBmcmVlemVfcHJvY2Vzc2VzKHZvaWQpOwpAQCAtNzUsNiArNjUsMTUgQEAKIAkJcmV0dXJuIDA7CiB9CiAKK2V4dGVybiBib29sIGZyZWV6ZV90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgYm9vbCBzaWdfb25seSk7CitleHRlcm4gdm9pZCBjYW5jZWxfZnJlZXppbmcoc3RydWN0IHRhc2tfc3RydWN0ICpwKTsKKworI2lmZGVmIENPTkZJR19DR1JPVVBfRlJFRVpFUgorZXh0ZXJuIGludCBjZ3JvdXBfZnJvemVuKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzayk7CisjZWxzZSAvKiAhQ09ORklHX0NHUk9VUF9GUkVFWkVSICovCitzdGF0aWMgaW5saW5lIGludCBjZ3JvdXBfZnJvemVuKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaykgeyByZXR1cm4gMDsgfQorI2VuZGlmIC8qICFDT05GSUdfQ0dST1VQX0ZSRUVaRVIgKi8KKwogLyoKICAqIFRoZSBQRl9GUkVFWkVSX1NLSVAgZmxhZyBzaG91bGQgYmUgc2V0IGJ5IGEgdmZvcmsgcGFyZW50IHJpZ2h0IGJlZm9yZSBpdAogICogY2FsbHMgd2FpdF9mb3JfY29tcGxldGlvbigmdmZvcmspIGFuZCByZXNldCByaWdodCBhZnRlciBpdCByZXR1cm5zIGZyb20gdGhpcwpAQCAtMTY2LDcgKzE2NSw3IEBACiAJfSB3aGlsZSAodHJ5X3RvX2ZyZWV6ZSgpKTsJCQkJCVwKIAlfX3JldHZhbDsJCQkJCQkJXAogfSkKLSNlbHNlIC8qICFDT05GSUdfUE1fU0xFRVAgKi8KKyNlbHNlIC8qICFDT05GSUdfRlJFRVpFUiAqLwogc3RhdGljIGlubGluZSBpbnQgZnJvemVuKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkgeyByZXR1cm4gMDsgfQogc3RhdGljIGlubGluZSBpbnQgZnJlZXppbmcoc3RydWN0IHRhc2tfc3RydWN0ICpwKSB7IHJldHVybiAwOyB9CiBzdGF0aWMgaW5saW5lIHZvaWQgc2V0X2ZyZWV6ZV9mbGFnKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkge30KQEAgLTE5MSw2ICsxOTAsNiBAQAogI2RlZmluZSB3YWl0X2V2ZW50X2ZyZWV6YWJsZV90aW1lb3V0KHdxLCBjb25kaXRpb24sIHRpbWVvdXQpCQlcCiAJCXdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV90aW1lb3V0KHdxLCBjb25kaXRpb24sIHRpbWVvdXQpCiAKLSNlbmRpZiAvKiAhQ09ORklHX1BNX1NMRUVQICovCisjZW5kaWYgLyogIUNPTkZJR19GUkVFWkVSICovCiAKICNlbmRpZgkvKiBGUkVFWkVSX0hfSU5DTFVERUQgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZnMuaCBiL2luY2x1ZGUvbGludXgvZnMuaAppbmRleCA0NGUzY2IyLi5hNmE2MjViIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2ZzLmgKKysrIGIvaW5jbHVkZS9saW51eC9mcy5oCkBAIC05NDcsNiArOTQ3LDE0IEBACiAJaW50ICgqZmxfY2hhbmdlKShzdHJ1Y3QgZmlsZV9sb2NrICoqLCBpbnQpOwogfTsKIAorc3RydWN0IGxvY2tfbWFuYWdlciB7CisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OworfTsKKwordm9pZCBsb2Nrc19zdGFydF9ncmFjZShzdHJ1Y3QgbG9ja19tYW5hZ2VyICopOwordm9pZCBsb2Nrc19lbmRfZ3JhY2Uoc3RydWN0IGxvY2tfbWFuYWdlciAqKTsKK2ludCBsb2Nrc19pbl9ncmFjZSh2b2lkKTsKKwogLyogdGhhdCB3aWxsIGRpZSAtIHdlIG5lZWQgaXQgZm9yIG5mc19sb2NrX2luZm8gKi8KICNpbmNsdWRlIDxsaW51eC9uZnNfZnNfaS5oPgogCkBAIC05ODgsNiArOTk2LDEzIEBACiAKICNpbmNsdWRlIDxsaW51eC9mY250bC5oPgogCitleHRlcm4gdm9pZCBzZW5kX3NpZ2lvKHN0cnVjdCBmb3duX3N0cnVjdCAqZm93biwgaW50IGZkLCBpbnQgYmFuZCk7CisKKy8qIGZzL3N5bmMuYyAqLworZXh0ZXJuIGludCBkb19zeW5jX21hcHBpbmdfcmFuZ2Uoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIGxvZmZfdCBvZmZzZXQsCisJCQlsb2ZmX3QgZW5kYnl0ZSwgdW5zaWduZWQgaW50IGZsYWdzKTsKKworI2lmZGVmIENPTkZJR19GSUxFX0xPQ0tJTkcKIGV4dGVybiBpbnQgZmNudGxfZ2V0bGsoc3RydWN0IGZpbGUgKiwgc3RydWN0IGZsb2NrIF9fdXNlciAqKTsKIGV4dGVybiBpbnQgZmNudGxfc2V0bGsodW5zaWduZWQgaW50LCBzdHJ1Y3QgZmlsZSAqLCB1bnNpZ25lZCBpbnQsCiAJCQlzdHJ1Y3QgZmxvY2sgX191c2VyICopOwpAQCAtOTk4LDE0ICsxMDEzLDkgQEAKIAkJCXN0cnVjdCBmbG9jazY0IF9fdXNlciAqKTsKICNlbmRpZgogCi1leHRlcm4gdm9pZCBzZW5kX3NpZ2lvKHN0cnVjdCBmb3duX3N0cnVjdCAqZm93biwgaW50IGZkLCBpbnQgYmFuZCk7CiBleHRlcm4gaW50IGZjbnRsX3NldGxlYXNlKHVuc2lnbmVkIGludCBmZCwgc3RydWN0IGZpbGUgKmZpbHAsIGxvbmcgYXJnKTsKIGV4dGVybiBpbnQgZmNudGxfZ2V0bGVhc2Uoc3RydWN0IGZpbGUgKmZpbHApOwogCi0vKiBmcy9zeW5jLmMgKi8KLWV4dGVybiBpbnQgZG9fc3luY19tYXBwaW5nX3JhbmdlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBsb2ZmX3Qgb2Zmc2V0LAotCQkJbG9mZl90IGVuZGJ5dGUsIHVuc2lnbmVkIGludCBmbGFncyk7Ci0KIC8qIGZzL2xvY2tzLmMgKi8KIGV4dGVybiB2b2lkIGxvY2tzX2luaXRfbG9jayhzdHJ1Y3QgZmlsZV9sb2NrICopOwogZXh0ZXJuIHZvaWQgbG9ja3NfY29weV9sb2NrKHN0cnVjdCBmaWxlX2xvY2sgKiwgc3RydWN0IGZpbGVfbG9jayAqKTsKQEAgLTEwMjgsNiArMTAzOCwzNyBAQAogZXh0ZXJuIGludCBsb2NrX21heV9yZWFkKHN0cnVjdCBpbm9kZSAqLCBsb2ZmX3Qgc3RhcnQsIHVuc2lnbmVkIGxvbmcgY291bnQpOwogZXh0ZXJuIGludCBsb2NrX21heV93cml0ZShzdHJ1Y3QgaW5vZGUgKiwgbG9mZl90IHN0YXJ0LCB1bnNpZ25lZCBsb25nIGNvdW50KTsKIGV4dGVybiBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgbG9ja3Nfc2VxX29wZXJhdGlvbnM7CisjZWxzZSAvKiAhQ09ORklHX0ZJTEVfTE9DS0lORyAqLworI2RlZmluZSBmY250bF9nZXRsayhhLCBiKSAoeyAtRUlOVkFMOyB9KQorI2RlZmluZSBmY250bF9zZXRsayhhLCBiLCBjLCBkKSAoeyAtRUFDQ0VTOyB9KQorI2lmIEJJVFNfUEVSX0xPTkcgPT0gMzIKKyNkZWZpbmUgZmNudGxfZ2V0bGs2NChhLCBiKSAoeyAtRUlOVkFMOyB9KQorI2RlZmluZSBmY250bF9zZXRsazY0KGEsIGIsIGMsIGQpICh7IC1FQUNDRVM7IH0pCisjZW5kaWYKKyNkZWZpbmUgZmNudGxfc2V0bGVhc2UoYSwgYiwgYykgKHsgMDsgfSkKKyNkZWZpbmUgZmNudGxfZ2V0bGVhc2UoYSkgKHsgMDsgfSkKKyNkZWZpbmUgbG9ja3NfaW5pdF9sb2NrKGEpICh7IH0pCisjZGVmaW5lIF9fbG9ja3NfY29weV9sb2NrKGEsIGIpICh7IH0pCisjZGVmaW5lIGxvY2tzX2NvcHlfbG9jayhhLCBiKSAoeyB9KQorI2RlZmluZSBsb2Nrc19yZW1vdmVfcG9zaXgoYSwgYikgKHsgfSkKKyNkZWZpbmUgbG9ja3NfcmVtb3ZlX2Zsb2NrKGEpICh7IH0pCisjZGVmaW5lIHBvc2l4X3Rlc3RfbG9jayhhLCBiKSAoeyAwOyB9KQorI2RlZmluZSBwb3NpeF9sb2NrX2ZpbGUoYSwgYiwgYykgKHsgLUVOT0xDSzsgfSkKKyNkZWZpbmUgcG9zaXhfbG9ja19maWxlX3dhaXQoYSwgYikgKHsgLUVOT0xDSzsgfSkKKyNkZWZpbmUgcG9zaXhfdW5ibG9ja19sb2NrKGEsIGIpICgtRU5PRU5UKQorI2RlZmluZSB2ZnNfdGVzdF9sb2NrKGEsIGIpICh7IDA7IH0pCisjZGVmaW5lIHZmc19sb2NrX2ZpbGUoYSwgYiwgYywgZCkgKC1FTk9MQ0spCisjZGVmaW5lIHZmc19jYW5jZWxfbG9jayhhLCBiKSAoeyAwOyB9KQorI2RlZmluZSBmbG9ja19sb2NrX2ZpbGVfd2FpdChhLCBiKSAoeyAtRU5PTENLOyB9KQorI2RlZmluZSBfX2JyZWFrX2xlYXNlKGEsIGIpICh7IDA7IH0pCisjZGVmaW5lIGxlYXNlX2dldF9tdGltZShhLCBiKSAoeyB9KQorI2RlZmluZSBnZW5lcmljX3NldGxlYXNlKGEsIGIsIGMpICh7IC1FSU5WQUw7IH0pCisjZGVmaW5lIHZmc19zZXRsZWFzZShhLCBiLCBjKSAoeyAtRUlOVkFMOyB9KQorI2RlZmluZSBsZWFzZV9tb2RpZnkoYSwgYikgKHsgLUVJTlZBTDsgfSkKKyNkZWZpbmUgbG9ja19tYXlfcmVhZChhLCBiLCBjKSAoeyAxOyB9KQorI2RlZmluZSBsb2NrX21heV93cml0ZShhLCBiLCBjKSAoeyAxOyB9KQorI2VuZGlmIC8qICFDT05GSUdfRklMRV9MT0NLSU5HICovCisKIAogc3RydWN0IGZhc3luY19zdHJ1Y3QgewogCWludAltYWdpYzsKQEAgLTE1NzUsOSArMTYxNiwxMiBAQAogLyogL3N5cy9mcyAqLwogZXh0ZXJuIHN0cnVjdCBrb2JqZWN0ICpmc19rb2JqOwogCitleHRlcm4gaW50IHJ3X3ZlcmlmeV9hcmVhKGludCwgc3RydWN0IGZpbGUgKiwgbG9mZl90ICosIHNpemVfdCk7CisKICNkZWZpbmUgRkxPQ0tfVkVSSUZZX1JFQUQgIDEKICNkZWZpbmUgRkxPQ0tfVkVSSUZZX1dSSVRFIDIKIAorI2lmZGVmIENPTkZJR19GSUxFX0xPQ0tJTkcKIGV4dGVybiBpbnQgbG9ja3NfbWFuZGF0b3J5X2xvY2tlZChzdHJ1Y3QgaW5vZGUgKik7CiBleHRlcm4gaW50IGxvY2tzX21hbmRhdG9yeV9hcmVhKGludCwgc3RydWN0IGlub2RlICosIHN0cnVjdCBmaWxlICosIGxvZmZfdCwgc2l6ZV90KTsKIApAQCAtMTYwOCw4ICsxNjUyLDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotZXh0ZXJuIGludCByd192ZXJpZnlfYXJlYShpbnQsIHN0cnVjdCBmaWxlICosIGxvZmZfdCAqLCBzaXplX3QpOwotCiBzdGF0aWMgaW5saW5lIGludCBsb2Nrc192ZXJpZnlfdHJ1bmNhdGUoc3RydWN0IGlub2RlICppbm9kZSwKIAkJCQkgICAgc3RydWN0IGZpbGUgKmZpbHAsCiAJCQkJICAgIGxvZmZfdCBzaXplKQpAQCAtMTYzMCw2ICsxNjcyLDE1IEBACiAJCXJldHVybiBfX2JyZWFrX2xlYXNlKGlub2RlLCBtb2RlKTsKIAlyZXR1cm4gMDsKIH0KKyNlbHNlIC8qICFDT05GSUdfRklMRV9MT0NLSU5HICovCisjZGVmaW5lIGxvY2tzX21hbmRhdG9yeV9sb2NrZWQoYSkgKHsgMDsgfSkKKyNkZWZpbmUgbG9ja3NfbWFuZGF0b3J5X2FyZWEoYSwgYiwgYywgZCwgZSkgKHsgMDsgfSkKKyNkZWZpbmUgX19tYW5kYXRvcnlfbG9jayhhKSAoeyAwOyB9KQorI2RlZmluZSBtYW5kYXRvcnlfbG9jayhhKSAoeyAwOyB9KQorI2RlZmluZSBsb2Nrc192ZXJpZnlfbG9ja2VkKGEpICh7IDA7IH0pCisjZGVmaW5lIGxvY2tzX3ZlcmlmeV90cnVuY2F0ZShhLCBiLCBjKSAoeyAwOyB9KQorI2RlZmluZSBicmVha19sZWFzZShhLCBiKSAoeyAwOyB9KQorI2VuZGlmIC8qIENPTkZJR19GSUxFX0xPQ0tJTkcgKi8KIAogLyogZnMvb3Blbi5jICovCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZnVzZS5oIGIvaW5jbHVkZS9saW51eC9mdXNlLmgKaW5kZXggMjY1NjM1ZC4uMzUwZmU5NyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9mdXNlLmgKKysrIGIvaW5jbHVkZS9saW51eC9mdXNlLmgKQEAgLTE3LDggKzE3LDE0IEBACiAgKiAgLSBhZGQgbG9ja19vd25lciBmaWVsZCB0byBmdXNlX3NldGF0dHJfaW4sIGZ1c2VfcmVhZF9pbiBhbmQgZnVzZV93cml0ZV9pbgogICogIC0gYWRkIGJsa3NpemUgZmllbGQgdG8gZnVzZV9hdHRyCiAgKiAgLSBhZGQgZmlsZSBmbGFncyBmaWVsZCB0byBmdXNlX3JlYWRfaW4gYW5kIGZ1c2Vfd3JpdGVfaW4KKyAqCisgKiA3LjEwCisgKiAgLSBhZGQgbm9uc2Vla2FibGUgb3BlbiBmbGFnCiAgKi8KIAorI2lmbmRlZiBfTElOVVhfRlVTRV9ICisjZGVmaW5lIF9MSU5VWF9GVVNFX0gKKwogI2luY2x1ZGUgPGFzbS90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L21ham9yLmg+CiAKQEAgLTI2LDcgKzMyLDcgQEAKICNkZWZpbmUgRlVTRV9LRVJORUxfVkVSU0lPTiA3CiAKIC8qKiBNaW5vciB2ZXJzaW9uIG51bWJlciBvZiB0aGlzIGludGVyZmFjZSAqLwotI2RlZmluZSBGVVNFX0tFUk5FTF9NSU5PUl9WRVJTSU9OIDkKKyNkZWZpbmUgRlVTRV9LRVJORUxfTUlOT1JfVkVSU0lPTiAxMAogCiAvKiogVGhlIG5vZGUgSUQgb2YgdGhlIHJvb3QgaW5vZGUgKi8KICNkZWZpbmUgRlVTRV9ST09UX0lEIDEKQEAgLTk4LDkgKzEwNCwxMSBAQAogICoKICAqIEZPUEVOX0RJUkVDVF9JTzogYnlwYXNzIHBhZ2UgY2FjaGUgZm9yIHRoaXMgb3BlbiBmaWxlCiAgKiBGT1BFTl9LRUVQX0NBQ0hFOiBkb24ndCBpbnZhbGlkYXRlIHRoZSBkYXRhIGNhY2hlIG9uIG9wZW4KKyAqIEZPUEVOX05PTlNFRUtBQkxFOiB0aGUgZmlsZSBpcyBub3Qgc2Vla2FibGUKICAqLwogI2RlZmluZSBGT1BFTl9ESVJFQ1RfSU8JCSgxIDw8IDApCiAjZGVmaW5lIEZPUEVOX0tFRVBfQ0FDSEUJKDEgPDwgMSkKKyNkZWZpbmUgRk9QRU5fTk9OU0VFS0FCTEUJKDEgPDwgMikKIAogLyoqCiAgKiBJTklUIHJlcXVlc3QvcmVwbHkgZmxhZ3MKQEAgLTQwOSwzICs0MTcsNSBAQAogI2RlZmluZSBGVVNFX0RJUkVOVF9BTElHTih4KSAoKCh4KSArIHNpemVvZihfX3U2NCkgLSAxKSAmIH4oc2l6ZW9mKF9fdTY0KSAtIDEpKQogI2RlZmluZSBGVVNFX0RJUkVOVF9TSVpFKGQpIFwKIAlGVVNFX0RJUkVOVF9BTElHTihGVVNFX05BTUVfT0ZGU0VUICsgKGQpLT5uYW1lbGVuKQorCisjZW5kaWYgLyogX0xJTlVYX0ZVU0VfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9nYW1lcG9ydC5oIGIvaW5jbHVkZS9saW51eC9nYW1lcG9ydC5oCmluZGV4IGY2NGUyOWMuLjBjZDgyNWYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZ2FtZXBvcnQuaAorKysgYi9pbmNsdWRlL2xpbnV4L2dhbWVwb3J0LmgKQEAgLTE0NiwxMCArMTQ2LDExIEBACiAJbXV0ZXhfdW5sb2NrKCZnYW1lcG9ydC0+ZHJ2X211dGV4KTsKIH0KIAotdm9pZCBfX2dhbWVwb3J0X3JlZ2lzdGVyX2RyaXZlcihzdHJ1Y3QgZ2FtZXBvcnRfZHJpdmVyICpkcnYsIHN0cnVjdCBtb2R1bGUgKm93bmVyKTsKLXN0YXRpYyBpbmxpbmUgdm9pZCBnYW1lcG9ydF9yZWdpc3Rlcl9kcml2ZXIoc3RydWN0IGdhbWVwb3J0X2RyaXZlciAqZHJ2KQoraW50IF9fZ2FtZXBvcnRfcmVnaXN0ZXJfZHJpdmVyKHN0cnVjdCBnYW1lcG9ydF9kcml2ZXIgKmRydiwKKwkJCQlzdHJ1Y3QgbW9kdWxlICpvd25lciwgY29uc3QgY2hhciAqbW9kX25hbWUpOworc3RhdGljIGlubGluZSBpbnQgX19tdXN0X2NoZWNrIGdhbWVwb3J0X3JlZ2lzdGVyX2RyaXZlcihzdHJ1Y3QgZ2FtZXBvcnRfZHJpdmVyICpkcnYpCiB7Ci0JX19nYW1lcG9ydF9yZWdpc3Rlcl9kcml2ZXIoZHJ2LCBUSElTX01PRFVMRSk7CisJcmV0dXJuIF9fZ2FtZXBvcnRfcmVnaXN0ZXJfZHJpdmVyKGRydiwgVEhJU19NT0RVTEUsIEtCVUlMRF9NT0ROQU1FKTsKIH0KIAogdm9pZCBnYW1lcG9ydF91bnJlZ2lzdGVyX2RyaXZlcihzdHJ1Y3QgZ2FtZXBvcnRfZHJpdmVyICpkcnYpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ncGlvLmggYi9pbmNsdWRlL2xpbnV4L2dwaW8uaAppbmRleCA3MzBhMjBiLi5lMTBjNDlhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2dwaW8uaAorKysgYi9pbmNsdWRlL2xpbnV4L2dwaW8uaApAQCAtOCw2ICs4LDcgQEAKIAogI2Vsc2UKIAorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KIApAQCAtMzIsNiArMzMsOCBAQAogCiBzdGF0aWMgaW5saW5lIHZvaWQgZ3Bpb19mcmVlKHVuc2lnbmVkIGdwaW8pCiB7CisJbWlnaHRfc2xlZXAoKTsKKwogCS8qIEdQSU8gY2FuIG5ldmVyIGhhdmUgYmVlbiByZXF1ZXN0ZWQgKi8KIAlXQVJOX09OKDEpOwogfQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9oaWQuaCBiL2luY2x1ZGUvbGludXgvaGlkLmgKaW5kZXggYWM0ZTY3OC4uZjEzYmNhMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9oaWQuaAorKysgYi9pbmNsdWRlL2xpbnV4L2hpZC5oCkBAIC02Nyw2ICs2Nyw3IEBACiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZF9kZXZpY2V0YWJsZS5oPiAvKiBoaWRfZGV2aWNlX2lkICovCiAjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KICNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KICNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgpAQCAtMjQ2LDYgKzI0NywxOSBAQAogI2RlZmluZSBISURfRkVBVFVSRV9SRVBPUlQJMgogCiAvKgorICogSElEIGNvbm5lY3QgcmVxdWVzdHMKKyAqLworCisjZGVmaW5lIEhJRF9DT05ORUNUX0hJRElOUFVUCQkweDAxCisjZGVmaW5lIEhJRF9DT05ORUNUX0hJRElOUFVUX0ZPUkNFCTB4MDIKKyNkZWZpbmUgSElEX0NPTk5FQ1RfSElEUkFXCQkweDA0CisjZGVmaW5lIEhJRF9DT05ORUNUX0hJRERFVgkJMHgwOAorI2RlZmluZSBISURfQ09OTkVDVF9ISURERVZfRk9SQ0UJMHgxMAorI2RlZmluZSBISURfQ09OTkVDVF9GRgkJCTB4MjAKKyNkZWZpbmUgSElEX0NPTk5FQ1RfREVGQVVMVAkoSElEX0NPTk5FQ1RfSElESU5QVVR8SElEX0NPTk5FQ1RfSElEUkFXfCBcCisJCUhJRF9DT05ORUNUX0hJRERFVnxISURfQ09OTkVDVF9GRikKKworLyoKICAqIEhJRCBkZXZpY2UgcXVpcmtzLgogICovCiAKQEAgLTI1Niw0OCArMjcwLDExIEBACiAKICNkZWZpbmUgSElEX1FVSVJLX0lOVkVSVAkJCTB4MDAwMDAwMDEKICNkZWZpbmUgSElEX1FVSVJLX05PVE9VQ0gJCQkweDAwMDAwMDAyCi0jZGVmaW5lIEhJRF9RVUlSS19JR05PUkUJCQkweDAwMDAwMDA0CiAjZGVmaW5lIEhJRF9RVUlSS19OT0dFVAkJCQkweDAwMDAwMDA4Ci0jZGVmaW5lIEhJRF9RVUlSS19ISURERVYJCQkweDAwMDAwMDEwCiAjZGVmaW5lIEhJRF9RVUlSS19CQURQQUQJCQkweDAwMDAwMDIwCiAjZGVmaW5lIEhJRF9RVUlSS19NVUxUSV9JTlBVVAkJCTB4MDAwMDAwNDAKLSNkZWZpbmUgSElEX1FVSVJLXzJXSEVFTF9NT1VTRV9IQUNLXzcJCTB4MDAwMDAwODAKLSNkZWZpbmUgSElEX1FVSVJLXzJXSEVFTF9NT1VTRV9IQUNLXzUJCTB4MDAwMDAxMDAKLSNkZWZpbmUgSElEX1FVSVJLXzJXSEVFTF9NT1VTRV9IQUNLX09OCQkweDAwMDAwMjAwCi0jZGVmaW5lIEhJRF9RVUlSS19NSUdIVFlNT1VTRQkJCTB4MDAwMDA0MDAKLSNkZWZpbmUgSElEX1FVSVJLX0FQUExFX0hBU19GTgkJCTB4MDAwMDA4MDAKLSNkZWZpbmUgSElEX1FVSVJLX0FQUExFX0ZOX09OCQkJMHgwMDAwMTAwMAotI2RlZmluZSBISURfUVVJUktfSU5WRVJUX0hXSEVFTAkJCTB4MDAwMDIwMDAKLSNkZWZpbmUgSElEX1FVSVJLX0FQUExFX0lTT19LRVlCT0FSRAkJMHgwMDAwNDAwMAotI2RlZmluZSBISURfUVVJUktfQkFEX1JFTEFUSVZFX0tFWVMJCTB4MDAwMDgwMDAKICNkZWZpbmUgSElEX1FVSVJLX1NLSVBfT1VUUFVUX1JFUE9SVFMJCTB4MDAwMTAwMDAKLSNkZWZpbmUgSElEX1FVSVJLX0lHTk9SRV9NT1VTRQkJCTB4MDAwMjAwMDAKLSNkZWZpbmUgSElEX1FVSVJLX1NPTllfUFMzX0NPTlRST0xMRVIJCTB4MDAwNDAwMDAKLSNkZWZpbmUgSElEX1FVSVJLX0RVUExJQ0FURV9VU0FHRVMJCTB4MDAwODAwMDAKLSNkZWZpbmUgSElEX1FVSVJLX1JFU0VUX0xFRFMJCQkweDAwMTAwMDAwCi0jZGVmaW5lIEhJRF9RVUlSS19ISURJTlBVVAkJCTB4MDAyMDAwMDAKLSNkZWZpbmUgSElEX1FVSVJLX0xPR0lURUNIX0lHTk9SRV9ET1VCTEVEX1dIRUVMCTB4MDA0MDAwMDAKLSNkZWZpbmUgSElEX1FVSVJLX0xPR0lURUNIX0VYUEFOREVEX0tFWU1BUAkweDAwODAwMDAwCi0jZGVmaW5lIEhJRF9RVUlSS19JR05PUkVfSElESU5QVVQJCTB4MDEwMDAwMDAKLSNkZWZpbmUgSElEX1FVSVJLXzJXSEVFTF9NT1VTRV9IQUNLX0I4CQkweDAyMDAwMDAwCi0jZGVmaW5lIEhJRF9RVUlSS19IV0hFRUxfV0hFRUxfSU5WRVJUCQkweDA0MDAwMDAwCi0jZGVmaW5lIEhJRF9RVUlSS19NSUNST1NPRlRfS0VZUwkJMHgwODAwMDAwMAogI2RlZmluZSBISURfUVVJUktfRlVMTFNQRUVEX0lOVEVSVkFMCQkweDEwMDAwMDAwCi0jZGVmaW5lIEhJRF9RVUlSS19BUFBMRV9OVU1MT0NLX0VNVUxBVElPTgkweDIwMDAwMDAwCi0KLS8qCi0gKiBTZXBhcmF0ZSBxdWlya3MgZm9yIHJ1bnRpbWUgcmVwb3J0IGRlc2NyaXB0b3IgZml4dXAKLSAqLwotCi0jZGVmaW5lIEhJRF9RVUlSS19SREVTQ19DWU1PVElPTgkJMHgwMDAwMDAwMQotI2RlZmluZSBISURfUVVJUktfUkRFU0NfTE9HSVRFQ0gJCTB4MDAwMDAwMDIKLSNkZWZpbmUgSElEX1FVSVJLX1JERVNDX1NXQVBQRURfTUlOX01BWAkJMHgwMDAwMDAwNAotI2RlZmluZSBISURfUVVJUktfUkRFU0NfUEVUQUxZTlgJCTB4MDAwMDAwMDgKLSNkZWZpbmUgSElEX1FVSVJLX1JERVNDX01BQ0JPT0tfSklTCQkweDAwMDAwMDEwCi0jZGVmaW5lIEhJRF9RVUlSS19SREVTQ19CVVRUT05fQ09OU1VNRVIJCTB4MDAwMDAwMjAKLSNkZWZpbmUgSElEX1FVSVJLX1JERVNDX1NBTVNVTkdfUkVNT1RFCQkweDAwMDAwMDQwCi0jZGVmaW5lIEhJRF9RVUlSS19SREVTQ19NSUNST1NPRlRfUkVDVl8xMDI4CTB4MDAwMDAwODAKLSNkZWZpbmUgSElEX1FVSVJLX1JERVNDX1NVTlBMVVNfV0RFU0tUT1AJMHgwMDAwMDEwMAogCiAvKgogICogVGhpcyBpcyB0aGUgZ2xvYmFsIGVudmlyb25tZW50IG9mIHRoZSBwYXJzZXIuIFRoaXMgaW5mb3JtYXRpb24gaXMKQEAgLTQxMSwxMiArMzg4LDIxIEBACiBzdHJ1Y3QgaGlkX2NvbnRyb2xfZmlmbyB7CiAJdW5zaWduZWQgY2hhciBkaXI7CiAJc3RydWN0IGhpZF9yZXBvcnQgKnJlcG9ydDsKKwljaGFyICpyYXdfcmVwb3J0OworfTsKKworc3RydWN0IGhpZF9vdXRwdXRfZmlmbyB7CisJc3RydWN0IGhpZF9yZXBvcnQgKnJlcG9ydDsKKwljaGFyICpyYXdfcmVwb3J0OwogfTsKIAogI2RlZmluZSBISURfQ0xBSU1FRF9JTlBVVAkxCiAjZGVmaW5lIEhJRF9DTEFJTUVEX0hJRERFVgkyCiAjZGVmaW5lIEhJRF9DTEFJTUVEX0hJRFJBVwk0CiAKKyNkZWZpbmUgSElEX1NUQVRfQURERUQJCTEKKyNkZWZpbmUgSElEX1NUQVRfUEFSU0VECQkyCisKICNkZWZpbmUgSElEX0NUUkxfUlVOTklORwkxCiAjZGVmaW5lIEhJRF9PVVRfUlVOTklORwkJMgogI2RlZmluZSBISURfSU5fUlVOTklORwkJMwpAQCAtNDMxLDIyICs0MTcsMjggQEAKIAlzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dDsKIH07CiAKK3N0cnVjdCBoaWRfZHJpdmVyOworc3RydWN0IGhpZF9sbF9kcml2ZXI7CisKIHN0cnVjdCBoaWRfZGV2aWNlIHsJCQkJCQkJLyogZGV2aWNlIHJlcG9ydCBkZXNjcmlwdG9yICovCi0JIF9fdTggKnJkZXNjOworCV9fdTggKnJkZXNjOwogCXVuc2lnbmVkIHJzaXplOwogCXN0cnVjdCBoaWRfY29sbGVjdGlvbiAqY29sbGVjdGlvbjsJCQkJLyogTGlzdCBvZiBISUQgY29sbGVjdGlvbnMgKi8KIAl1bnNpZ25lZCBjb2xsZWN0aW9uX3NpemU7CQkJCQkvKiBOdW1iZXIgb2YgYWxsb2NhdGVkIGhpZF9jb2xsZWN0aW9ucyAqLwogCXVuc2lnbmVkIG1heGNvbGxlY3Rpb247CQkJCQkJLyogTnVtYmVyIG9mIHBhcnNlZCBjb2xsZWN0aW9ucyAqLwogCXVuc2lnbmVkIG1heGFwcGxpY2F0aW9uOwkJCQkJLyogTnVtYmVyIG9mIGFwcGxpY2F0aW9ucyAqLwotCXVuc2lnbmVkIHNob3J0IGJ1czsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBCVVMgSUQgKi8KLQl1bnNpZ25lZCBzaG9ydCB2ZW5kb3I7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogVmVuZG9yIElEICovCi0JdW5zaWduZWQgc2hvcnQgcHJvZHVjdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFByb2R1Y3QgSUQgKi8KLQl1bnNpZ25lZCB2ZXJzaW9uOwkJCQkJCS8qIEhJRCB2ZXJzaW9uICovCisJX191MTYgYnVzOwkJCQkJCQkvKiBCVVMgSUQgKi8KKwlfX3UzMiB2ZW5kb3I7CQkJCQkJCS8qIFZlbmRvciBJRCAqLworCV9fdTMyIHByb2R1Y3Q7CQkJCQkJCS8qIFByb2R1Y3QgSUQgKi8KKwlfX3UzMiB2ZXJzaW9uOwkJCQkJCQkvKiBISUQgdmVyc2lvbiAqLwogCXVuc2lnbmVkIGNvdW50cnk7CQkJCQkJLyogSElEIGNvdW50cnkgKi8KIAlzdHJ1Y3QgaGlkX3JlcG9ydF9lbnVtIHJlcG9ydF9lbnVtW0hJRF9SRVBPUlRfVFlQRVNdOwogCi0Jc3RydWN0IGRldmljZSAqZGV2OwkJCQkJCS8qIGRldmljZSAqLworCXN0cnVjdCBkZXZpY2UgZGV2OwkJCQkJCS8qIGRldmljZSAqLworCXN0cnVjdCBoaWRfZHJpdmVyICpkcml2ZXI7CisJc3RydWN0IGhpZF9sbF9kcml2ZXIgKmxsX2RyaXZlcjsKIAorCXVuc2lnbmVkIGludCBzdGF0dXM7CQkJCQkJLyogc2VlIFNUQVQgZmxhZ3MgYWJvdmUgKi8KIAl1bnNpZ25lZCBjbGFpbWVkOwkJCQkJCS8qIENsYWltZWQgYnkgaGlkaW5wdXQsIGhpZGRldj8gKi8KIAl1bnNpZ25lZCBxdWlya3M7CQkJCQkJLyogVmFyaW91cyBxdWlya3MgdGhlIGRldmljZSBjYW4gcHVsbCBvbiB1cyAqLwogCkBAIC00NjIsMjYgKzQ1NCwyOSBAQAogCiAJdm9pZCAqZHJpdmVyX2RhdGE7CiAKLQlfX3MzMiBkZWxheWVkX3ZhbHVlOwkJCQkJCS8qIEZvciBBNCBUZWNoIG1pY2UgaHdoZWVsIHF1aXJrICovCi0KLQkvKiBkZXZpY2Utc3BlY2lmaWMgZnVuY3Rpb24gcG9pbnRlcnMgKi8KLQlpbnQgKCpoaWRpbnB1dF9pbnB1dF9ldmVudCkgKHN0cnVjdCBpbnB1dF9kZXYgKiwgdW5zaWduZWQgaW50LCB1bnNpZ25lZCBpbnQsIGludCk7Ci0JaW50ICgqaGlkX29wZW4pIChzdHJ1Y3QgaGlkX2RldmljZSAqKTsKLQl2b2lkICgqaGlkX2Nsb3NlKSAoc3RydWN0IGhpZF9kZXZpY2UgKik7CisJLyogdGVtcG9yYXJ5IGhpZF9mZiBoYW5kbGluZyAodW50aWwgbW92ZWQgdG8gdGhlIGRyaXZlcnMpICovCisJaW50ICgqZmZfaW5pdCkoc3RydWN0IGhpZF9kZXZpY2UgKik7CiAKIAkvKiBoaWRkZXYgZXZlbnQgaGFuZGxlciAqLworCWludCAoKmhpZGRldl9jb25uZWN0KShzdHJ1Y3QgaGlkX2RldmljZSAqLCB1bnNpZ25lZCBpbnQpOwogCXZvaWQgKCpoaWRkZXZfaGlkX2V2ZW50KSAoc3RydWN0IGhpZF9kZXZpY2UgKiwgc3RydWN0IGhpZF9maWVsZCAqZmllbGQsCiAJCQkJICBzdHJ1Y3QgaGlkX3VzYWdlICosIF9fczMyKTsKIAl2b2lkICgqaGlkZGV2X3JlcG9ydF9ldmVudCkgKHN0cnVjdCBoaWRfZGV2aWNlICosIHN0cnVjdCBoaWRfcmVwb3J0ICopOwogCiAJLyogaGFuZGxlciBmb3IgcmF3IG91dHB1dCBkYXRhLCB1c2VkIGJ5IGhpZHJhdyAqLwogCWludCAoKmhpZF9vdXRwdXRfcmF3X3JlcG9ydCkgKHN0cnVjdCBoaWRfZGV2aWNlICosIF9fdTggKiwgc2l6ZV90KTsKLSNpZmRlZiBDT05GSUdfVVNCX0hJRElOUFVUX1BPV0VSQk9PSwotCXVuc2lnbmVkIGxvbmcgYXBwbGVfcHJlc3NlZF9mbltCSVRTX1RPX0xPTkdTKEtFWV9DTlQpXTsKLQl1bnNpZ25lZCBsb25nIHBiX3ByZXNzZWRfbnVtbG9ja1tCSVRTX1RPX0xPTkdTKEtFWV9DTlQpXTsKLSNlbmRpZgogfTsKIAorc3RhdGljIGlubGluZSB2b2lkICpoaWRfZ2V0X2RydmRhdGEoc3RydWN0IGhpZF9kZXZpY2UgKmhkZXYpCit7CisJcmV0dXJuIGRldl9nZXRfZHJ2ZGF0YSgmaGRldi0+ZGV2KTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGhpZF9zZXRfZHJ2ZGF0YShzdHJ1Y3QgaGlkX2RldmljZSAqaGRldiwgdm9pZCAqZGF0YSkKK3sKKwlkZXZfc2V0X2RydmRhdGEoJmhkZXYtPmRldiwgZGF0YSk7Cit9CisKICNkZWZpbmUgSElEX0dMT0JBTF9TVEFDS19TSVpFIDQKICNkZWZpbmUgSElEX0NPTExFQ1RJT05fU1RBQ0tfU0laRSA0CiAKQEAgLTUxMCw2ICs1MDUsMTA3IEBACiAJc3RydWN0IGhpZF9jbGFzc19kZXNjcmlwdG9yIGRlc2NbMV07CiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAorI2RlZmluZSBISURfREVWSUNFKGIsIHZlbiwgcHJvZCkgXAorCS5idXMgPSAoYiksIFwKKwkudmVuZG9yID0gKHZlbiksIC5wcm9kdWN0ID0gKHByb2QpCisKKyNkZWZpbmUgSElEX1VTQl9ERVZJQ0UodmVuLCBwcm9kKQlISURfREVWSUNFKEJVU19VU0IsIHZlbiwgcHJvZCkKKyNkZWZpbmUgSElEX0JMVUVUT09USF9ERVZJQ0UodmVuLCBwcm9kKQlISURfREVWSUNFKEJVU19CTFVFVE9PVEgsIHZlbiwgcHJvZCkKKworI2RlZmluZSBISURfUkVQT1JUX0lEKHJlcCkgXAorCS5yZXBvcnRfdHlwZSA9IChyZXApCisjZGVmaW5lIEhJRF9VU0FHRV9JRCh1aGlkLCB1dHlwZSwgdWNvZGUpIFwKKwkudXNhZ2VfaGlkID0gKHVoaWQpLCAudXNhZ2VfdHlwZSA9ICh1dHlwZSksIC51c2FnZV9jb2RlID0gKHVjb2RlKQorLyogd2UgZG9uJ3Qgd2FudCB0byBjYXRjaCB0eXBlcyBhbmQgY29kZXMgZXF1YWwgdG8gMCAqLworI2RlZmluZSBISURfVEVSTUlOQVRPUgkJKEhJRF9BTllfSUQgLSAxKQorCitzdHJ1Y3QgaGlkX3JlcG9ydF9pZCB7CisJX191MzIgcmVwb3J0X3R5cGU7Cit9Oworc3RydWN0IGhpZF91c2FnZV9pZCB7CisJX191MzIgdXNhZ2VfaGlkOworCV9fdTMyIHVzYWdlX3R5cGU7CisJX191MzIgdXNhZ2VfY29kZTsKK307CisKKy8qKgorICogc3RydWN0IGhpZF9kcml2ZXIKKyAqIEBuYW1lOiBkcml2ZXIgbmFtZSAoZS5nLiAiRm9vdGVjaF9iYXItd2hlZWwiKQorICogQGlkX3RhYmxlOiB3aGljaCBkZXZpY2VzIGlzIHRoaXMgZHJpdmVyIGZvciAobXVzdCBiZSBub24tTlVMTCBmb3IgcHJvYmUKKyAqIAkgICAgICB0byBiZSBjYWxsZWQpCisgKiBAcHJvYmU6IG5ldyBkZXZpY2UgaW5zZXJ0ZWQKKyAqIEByZW1vdmU6IGRldmljZSByZW1vdmVkIChOVUxMIGlmIG5vdCBhIGhvdC1wbHVnIGNhcGFibGUgZHJpdmVyKQorICogQHJlcG9ydF90YWJsZTogb24gd2hpY2ggcmVwb3J0cyB0byBjYWxsIHJhd19ldmVudCAoTlVMTCBtZWFucyBhbGwpCisgKiBAcmF3X2V2ZW50OiBpZiByZXBvcnQgaW4gcmVwb3J0X3RhYmxlLCB0aGlzIGhvb2sgaXMgY2FsbGVkIChOVUxMIG1lYW5zIG5vcCkKKyAqIEB1c2FnZV90YWJsZTogb24gd2hpY2ggZXZlbnRzIHRvIGNhbGwgZXZlbnQgKE5VTEwgbWVhbnMgYWxsKQorICogQGV2ZW50OiBpZiB1c2FnZSBpbiB1c2FnZV90YWJsZSwgdGhpcyBob29rIGlzIGNhbGxlZCAoTlVMTCBtZWFucyBub3ApCisgKiBAcmVwb3J0X2ZpeHVwOiBjYWxsZWQgYmVmb3JlIHJlcG9ydCBkZXNjcmlwdG9yIHBhcnNpbmcgKE5VTEwgbWVhbnMgbm9wKQorICogQGlucHV0X21hcHBpbmc6IGludm9rZWQgb24gaW5wdXQgcmVnaXN0ZXJpbmcgYmVmb3JlIG1hcHBpbmcgYW4gdXNhZ2UKKyAqIEBpbnB1dF9tYXBwZWQ6IGludm9rZWQgb24gaW5wdXQgcmVnaXN0ZXJpbmcgYWZ0ZXIgbWFwcGluZyBhbiB1c2FnZQorICoKKyAqIHJhd19ldmVudCBhbmQgZXZlbnQgc2hvdWxkIHJldHVybiAwIG9uIG5vIGFjdGlvbiBwZXJmb3JtZWQsIDEgd2hlbiBubworICogZnVydGhlciBwcm9jZXNzaW5nIHNob3VsZCBiZSBkb25lIGFuZCBuZWdhdGl2ZSBvbiBlcnJvcgorICoKKyAqIGlucHV0X21hcHBpbmcgc2hhbGwgcmV0dXJuIGEgbmVnYXRpdmUgdmFsdWUgdG8gY29tcGxldGVseSBpZ25vcmUgdGhpcyB1c2FnZQorICogKGUuZy4gZG91YmxlZCBvciBpbnZhbGlkIHVzYWdlKSwgemVybyB0byBjb250aW51ZSB3aXRoIHBhcnNpbmcgb2YgdGhpcworICogdXNhZ2UgYnkgZ2VuZXJpYyBjb2RlIChubyBzcGVjaWFsIGhhbmRsaW5nIG5lZWRlZCkgb3IgcG9zaXRpdmUgdG8gc2tpcAorICogZ2VuZXJpYyBwYXJzaW5nIChuZWVkZWQgc3BlY2lhbCBoYW5kbGluZyB3aGljaCB3YXMgZG9uZSBpbiB0aGUgaG9vayBhbHJlYWR5KQorICogaW5wdXRfbWFwcGVkIHNoYWxsIHJldHVybiBuZWdhdGl2ZSB0byBpbmZvcm0gdGhlIGxheWVyIHRoYXQgdGhpcyB1c2FnZQorICogc2hvdWxkIG5vdCBiZSBjb25zaWRlcmVkIGZvciBmdXJ0aGVyIHByb2Nlc3Npbmcgb3IgemVybyB0byBub3RpZnkgdGhhdAorICogbm8gcHJvY2Vzc2luZyB3YXMgcGVyZm9ybWVkIGFuZCBzaG91bGQgYmUgZG9uZSBpbiBhIGdlbmVyaWMgbWFubmVyCisgKiBCb3RoIHRoZXNlIGZ1bmN0aW9ucyBtYXkgYmUgTlVMTCB3aGljaCBtZWFucyB0aGUgc2FtZSBiZWhhdmlvciBhcyByZXR1cm5pbmcKKyAqIHplcm8gZnJvbSB0aGVtLgorICovCitzdHJ1Y3QgaGlkX2RyaXZlciB7CisJY2hhciAqbmFtZTsKKwljb25zdCBzdHJ1Y3QgaGlkX2RldmljZV9pZCAqaWRfdGFibGU7CisKKwlpbnQgKCpwcm9iZSkoc3RydWN0IGhpZF9kZXZpY2UgKmRldiwgY29uc3Qgc3RydWN0IGhpZF9kZXZpY2VfaWQgKmlkKTsKKwl2b2lkICgqcmVtb3ZlKShzdHJ1Y3QgaGlkX2RldmljZSAqZGV2KTsKKworCWNvbnN0IHN0cnVjdCBoaWRfcmVwb3J0X2lkICpyZXBvcnRfdGFibGU7CisJaW50ICgqcmF3X2V2ZW50KShzdHJ1Y3QgaGlkX2RldmljZSAqaGRldiwgc3RydWN0IGhpZF9yZXBvcnQgKnJlcG9ydCwKKwkJCXU4ICpkYXRhLCBpbnQgc2l6ZSk7CisJY29uc3Qgc3RydWN0IGhpZF91c2FnZV9pZCAqdXNhZ2VfdGFibGU7CisJaW50ICgqZXZlbnQpKHN0cnVjdCBoaWRfZGV2aWNlICpoZGV2LCBzdHJ1Y3QgaGlkX2ZpZWxkICpmaWVsZCwKKwkJCXN0cnVjdCBoaWRfdXNhZ2UgKnVzYWdlLCBfX3MzMiB2YWx1ZSk7CisKKwl2b2lkICgqcmVwb3J0X2ZpeHVwKShzdHJ1Y3QgaGlkX2RldmljZSAqaGRldiwgX191OCAqYnVmLAorCQkJdW5zaWduZWQgaW50IHNpemUpOworCisJaW50ICgqaW5wdXRfbWFwcGluZykoc3RydWN0IGhpZF9kZXZpY2UgKmhkZXYsCisJCQlzdHJ1Y3QgaGlkX2lucHV0ICpoaWRpbnB1dCwgc3RydWN0IGhpZF9maWVsZCAqZmllbGQsCisJCQlzdHJ1Y3QgaGlkX3VzYWdlICp1c2FnZSwgdW5zaWduZWQgbG9uZyAqKmJpdCwgaW50ICptYXgpOworCWludCAoKmlucHV0X21hcHBlZCkoc3RydWN0IGhpZF9kZXZpY2UgKmhkZXYsCisJCQlzdHJ1Y3QgaGlkX2lucHV0ICpoaWRpbnB1dCwgc3RydWN0IGhpZF9maWVsZCAqZmllbGQsCisJCQlzdHJ1Y3QgaGlkX3VzYWdlICp1c2FnZSwgdW5zaWduZWQgbG9uZyAqKmJpdCwgaW50ICptYXgpOworLyogcHJpdmF0ZTogKi8KKwlzdHJ1Y3QgZGV2aWNlX2RyaXZlciBkcml2ZXI7Cit9OworCisvKioKKyAqIGhpZF9sbF9kcml2ZXIgLSBsb3cgbGV2ZWwgZHJpdmVyIGNhbGxiYWNrcworICogQHN0YXJ0OiBjYWxsZWQgb24gcHJvYmUgdG8gc3RhcnQgdGhlIGRldmljZQorICogQHN0b3A6IGNhbGxlZCBvbiByZW1vdmUKKyAqIEBvcGVuOiBjYWxsZWQgYnkgaW5wdXQgbGF5ZXIgb24gb3BlbgorICogQGNsb3NlOiBjYWxsZWQgYnkgaW5wdXQgbGF5ZXIgb24gY2xvc2UKKyAqIEBoaWRpbnB1dF9pbnB1dF9ldmVudDogZXZlbnQgaW5wdXQgZXZlbnQgKGUuZy4gZmYgb3IgbGVkcykKKyAqIEBwYXJzZTogdGhpcyBtZXRob2QgaXMgY2FsbGVkIG9ubHkgb25jZSB0byBwYXJzZSB0aGUgZGV2aWNlIGRhdGEsCisgKgkgICBzaG91bGRuJ3QgYWxsb2NhdGUgYW55dGhpbmcgdG8gbm90IGxlYWsgbWVtb3J5CisgKi8KK3N0cnVjdCBoaWRfbGxfZHJpdmVyIHsKKwlpbnQgKCpzdGFydCkoc3RydWN0IGhpZF9kZXZpY2UgKmhkZXYpOworCXZvaWQgKCpzdG9wKShzdHJ1Y3QgaGlkX2RldmljZSAqaGRldik7CisKKwlpbnQgKCpvcGVuKShzdHJ1Y3QgaGlkX2RldmljZSAqaGRldik7CisJdm9pZCAoKmNsb3NlKShzdHJ1Y3QgaGlkX2RldmljZSAqaGRldik7CisKKwlpbnQgKCpoaWRpbnB1dF9pbnB1dF9ldmVudCkgKHN0cnVjdCBpbnB1dF9kZXYgKmlkZXYsIHVuc2lnbmVkIGludCB0eXBlLAorCQkJdW5zaWduZWQgaW50IGNvZGUsIGludCB2YWx1ZSk7CisKKwlpbnQgKCpwYXJzZSkoc3RydWN0IGhpZF9kZXZpY2UgKmhkZXYpOworfTsKKwogLyogQXBwbGljYXRpb25zIGZyb20gSElEIFVzYWdlIFRhYmxlcyA0LzgvOTkgVmVyc2lvbiAxLjEgKi8KIC8qIFdlIGlnbm9yZSBhIGZldyBpbnB1dCBhcHBsaWNhdGlvbnMgdGhhdCBhcmUgbm90IHdpZGVseSB1c2VkICovCiAjZGVmaW5lIElTX0lOUFVUX0FQUExJQ0FUSU9OKGEpICgoKGEgPj0gMHgwMDAxMDAwMCkgJiYgKGEgPD0gMHgwMDAxMDAwOCkpIHx8IChhID09IDB4MDAwMTAwODApIHx8IChhID09IDB4MDAwYzAwMDEpIHx8IChhID09IDB4MDAwZDAwMDIpKQpAQCAtNTIwLDQzICs2MTYsMTU3IEBACiBleHRlcm4gaW50IGhpZF9kZWJ1ZzsKICNlbmRpZgogCitleHRlcm4gaW50IGhpZF9hZGRfZGV2aWNlKHN0cnVjdCBoaWRfZGV2aWNlICopOworZXh0ZXJuIHZvaWQgaGlkX2Rlc3Ryb3lfZGV2aWNlKHN0cnVjdCBoaWRfZGV2aWNlICopOworCitleHRlcm4gaW50IF9fbXVzdF9jaGVjayBfX2hpZF9yZWdpc3Rlcl9kcml2ZXIoc3RydWN0IGhpZF9kcml2ZXIgKiwKKwkJc3RydWN0IG1vZHVsZSAqLCBjb25zdCBjaGFyICptb2RfbmFtZSk7CitzdGF0aWMgaW5saW5lIGludCBfX211c3RfY2hlY2sgaGlkX3JlZ2lzdGVyX2RyaXZlcihzdHJ1Y3QgaGlkX2RyaXZlciAqZHJpdmVyKQoreworCXJldHVybiBfX2hpZF9yZWdpc3Rlcl9kcml2ZXIoZHJpdmVyLCBUSElTX01PRFVMRSwgS0JVSUxEX01PRE5BTUUpOworfQorZXh0ZXJuIHZvaWQgaGlkX3VucmVnaXN0ZXJfZHJpdmVyKHN0cnVjdCBoaWRfZHJpdmVyICopOworCiBleHRlcm4gdm9pZCBoaWRpbnB1dF9oaWRfZXZlbnQoc3RydWN0IGhpZF9kZXZpY2UgKiwgc3RydWN0IGhpZF9maWVsZCAqLCBzdHJ1Y3QgaGlkX3VzYWdlICosIF9fczMyKTsKIGV4dGVybiB2b2lkIGhpZGlucHV0X3JlcG9ydF9ldmVudChzdHJ1Y3QgaGlkX2RldmljZSAqaGlkLCBzdHJ1Y3QgaGlkX3JlcG9ydCAqcmVwb3J0KTsKLWV4dGVybiBpbnQgaGlkaW5wdXRfY29ubmVjdChzdHJ1Y3QgaGlkX2RldmljZSAqKTsKK2V4dGVybiBpbnQgaGlkaW5wdXRfY29ubmVjdChzdHJ1Y3QgaGlkX2RldmljZSAqaGlkLCB1bnNpZ25lZCBpbnQgZm9yY2UpOwogZXh0ZXJuIHZvaWQgaGlkaW5wdXRfZGlzY29ubmVjdChzdHJ1Y3QgaGlkX2RldmljZSAqKTsKIAogaW50IGhpZF9zZXRfZmllbGQoc3RydWN0IGhpZF9maWVsZCAqLCB1bnNpZ25lZCwgX19zMzIpOwogaW50IGhpZF9pbnB1dF9yZXBvcnQoc3RydWN0IGhpZF9kZXZpY2UgKiwgaW50IHR5cGUsIHU4ICosIGludCwgaW50KTsKIGludCBoaWRpbnB1dF9maW5kX2ZpZWxkKHN0cnVjdCBoaWRfZGV2aWNlICpoaWQsIHVuc2lnbmVkIGludCB0eXBlLCB1bnNpZ25lZCBpbnQgY29kZSwgc3RydWN0IGhpZF9maWVsZCAqKmZpZWxkKTsKLWludCBoaWRpbnB1dF9tYXBwaW5nX3F1aXJrcyhzdHJ1Y3QgaGlkX3VzYWdlICosIHN0cnVjdCBpbnB1dF9kZXYgKiwgdW5zaWduZWQgbG9uZyAqKiwgaW50ICopOwotaW50IGhpZGlucHV0X2V2ZW50X3F1aXJrcyhzdHJ1Y3QgaGlkX2RldmljZSAqLCBzdHJ1Y3QgaGlkX2ZpZWxkICosIHN0cnVjdCBoaWRfdXNhZ2UgKiwgX19zMzIpOwotaW50IGhpZGlucHV0X2FwcGxlX2V2ZW50KHN0cnVjdCBoaWRfZGV2aWNlICosIHN0cnVjdCBpbnB1dF9kZXYgKiwgc3RydWN0IGhpZF91c2FnZSAqLCBfX3MzMik7CiB2b2lkIGhpZF9vdXRwdXRfcmVwb3J0KHN0cnVjdCBoaWRfcmVwb3J0ICpyZXBvcnQsIF9fdTggKmRhdGEpOwotdm9pZCBoaWRfZnJlZV9kZXZpY2Uoc3RydWN0IGhpZF9kZXZpY2UgKmRldmljZSk7Ci1zdHJ1Y3QgaGlkX2RldmljZSAqaGlkX3BhcnNlX3JlcG9ydChfX3U4ICpzdGFydCwgdW5zaWduZWQgc2l6ZSk7CitzdHJ1Y3QgaGlkX2RldmljZSAqaGlkX2FsbG9jYXRlX2RldmljZSh2b2lkKTsKK2ludCBoaWRfcGFyc2VfcmVwb3J0KHN0cnVjdCBoaWRfZGV2aWNlICpoaWQsIF9fdTggKnN0YXJ0LCB1bnNpZ25lZCBzaXplKTsKK2ludCBoaWRfY29ubmVjdChzdHJ1Y3QgaGlkX2RldmljZSAqaGlkLCB1bnNpZ25lZCBpbnQgY29ubmVjdF9tYXNrKTsKKworLyoqCisgKiBoaWRfbWFwX3VzYWdlIC0gbWFwIHVzYWdlIGlucHV0IGJpdHMKKyAqCisgKiBAaGlkaW5wdXQ6IGhpZGlucHV0IHdoaWNoIHdlIGFyZSBpbnRlcmVzdGVkIGluCisgKiBAdXNhZ2U6IHVzYWdlIHRvIGZpbGwgaW4KKyAqIEBiaXQ6IHBvaW50ZXIgdG8gaW5wdXQtPnt9Yml0IChvdXQgcGFyYW1ldGVyKQorICogQG1heDogbWF4aW1hbCB2YWxpZCB1c2FnZS0+Y29kZSB0byBjb25zaWRlciBsYXRlciAob3V0IHBhcmFtZXRlcikKKyAqIEB0eXBlOiBpbnB1dCBldmVudCB0eXBlIChFVl9LRVksIEVWX1JFTCwgLi4uKQorICogQGM6IGNvZGUgd2hpY2ggY29ycmVzcG9uZHMgdG8gdGhpcyB1c2FnZSBhbmQgdHlwZQorICovCitzdGF0aWMgaW5saW5lIHZvaWQgaGlkX21hcF91c2FnZShzdHJ1Y3QgaGlkX2lucHV0ICpoaWRpbnB1dCwKKwkJc3RydWN0IGhpZF91c2FnZSAqdXNhZ2UsIHVuc2lnbmVkIGxvbmcgKipiaXQsIGludCAqbWF4LAorCQlfX3U4IHR5cGUsIF9fdTE2IGMpCit7CisJc3RydWN0IGlucHV0X2RldiAqaW5wdXQgPSBoaWRpbnB1dC0+aW5wdXQ7CisKKwl1c2FnZS0+dHlwZSA9IHR5cGU7CisJdXNhZ2UtPmNvZGUgPSBjOworCisJc3dpdGNoICh0eXBlKSB7CisJY2FzZSBFVl9BQlM6CisJCSpiaXQgPSBpbnB1dC0+YWJzYml0OworCQkqbWF4ID0gQUJTX01BWDsKKwkJYnJlYWs7CisJY2FzZSBFVl9SRUw6CisJCSpiaXQgPSBpbnB1dC0+cmVsYml0OworCQkqbWF4ID0gUkVMX01BWDsKKwkJYnJlYWs7CisJY2FzZSBFVl9LRVk6CisJCSpiaXQgPSBpbnB1dC0+a2V5Yml0OworCQkqbWF4ID0gS0VZX01BWDsKKwkJYnJlYWs7CisJY2FzZSBFVl9MRUQ6CisJCSpiaXQgPSBpbnB1dC0+bGVkYml0OworCQkqbWF4ID0gTEVEX01BWDsKKwkJYnJlYWs7CisJfQorfQorCisvKioKKyAqIGhpZF9tYXBfdXNhZ2VfY2xlYXIgLSBtYXAgdXNhZ2UgaW5wdXQgYml0cyBhbmQgY2xlYXIgdGhlIGlucHV0IGJpdAorICoKKyAqIFRoZSBzYW1lIGFzIGhpZF9tYXBfdXNhZ2UsIGV4Y2VwdCB0aGUgQGMgYml0IGlzIGFsc28gY2xlYXJlZCBpbiBzdXBwb3J0ZWQKKyAqIGJpdHMgKEBiaXQpLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgaGlkX21hcF91c2FnZV9jbGVhcihzdHJ1Y3QgaGlkX2lucHV0ICpoaWRpbnB1dCwKKwkJc3RydWN0IGhpZF91c2FnZSAqdXNhZ2UsIHVuc2lnbmVkIGxvbmcgKipiaXQsIGludCAqbWF4LAorCQlfX3U4IHR5cGUsIF9fdTE2IGMpCit7CisJaGlkX21hcF91c2FnZShoaWRpbnB1dCwgdXNhZ2UsIGJpdCwgbWF4LCB0eXBlLCBjKTsKKwljbGVhcl9iaXQoYywgKmJpdCk7Cit9CisKKy8qKgorICogaGlkX3BhcnNlIC0gcGFyc2UgSFcgcmVwb3J0cworICoKKyAqIEBoZGV2OiBoaWQgZGV2aWNlCisgKgorICogQ2FsbCB0aGlzIGZyb20gcHJvYmUgYWZ0ZXIgeW91IHNldCB1cCB0aGUgZGV2aWNlIChpZiBuZWVkZWQpLiBZb3VyCisgKiByZXBvcnRfZml4dXAgd2lsbCBiZSBjYWxsZWQgKGlmIG5vbi1OVUxMKSBhZnRlciByZWFkaW5nIHJhdyByZXBvcnQgZnJvbQorICogZGV2aWNlIGJlZm9yZSBwYXNzaW5nIGl0IHRvIGhpZCBsYXllciBmb3IgcmVhbCBwYXJzaW5nLgorICovCitzdGF0aWMgaW5saW5lIGludCBfX211c3RfY2hlY2sgaGlkX3BhcnNlKHN0cnVjdCBoaWRfZGV2aWNlICpoZGV2KQoreworCWludCByZXQ7CisKKwlpZiAoaGRldi0+c3RhdHVzICYgSElEX1NUQVRfUEFSU0VEKQorCQlyZXR1cm4gMDsKKworCXJldCA9IGhkZXYtPmxsX2RyaXZlci0+cGFyc2UoaGRldik7CisJaWYgKCFyZXQpCisJCWhkZXYtPnN0YXR1cyB8PSBISURfU1RBVF9QQVJTRUQ7CisKKwlyZXR1cm4gcmV0OworfQorCisvKioKKyAqIGhpZF9od19zdGFydCAtIHN0YXJ0IHVuZGVybGF5aW5nIEhXCisgKgorICogQGhkZXY6IGhpZCBkZXZpY2UKKyAqIEBjb25uZWN0X21hc2s6IHdoaWNoIG91dHB1dHMgdG8gY29ubmVjdCwgc2VlIEhJRF9DT05ORUNUXyoKKyAqCisgKiBDYWxsIHRoaXMgaW4gcHJvYmUgZnVuY3Rpb24gKmFmdGVyKiBoaWRfcGFyc2UuIFRoaXMgd2lsbCBzZXR1cCBIVyBidWZmZXJzCisgKiBhbmQgc3RhcnQgdGhlIGRldmljZSAoaWYgbm90IGRlZmZlcmVkIHRvIGRldmljZSBvcGVuKS4gaGlkX2h3X3N0b3AgbXVzdCBiZQorICogY2FsbGVkIGlmIHRoaXMgd2FzIHN1Y2Nlc3NmdWxsLgorICovCitzdGF0aWMgaW5saW5lIGludCBfX211c3RfY2hlY2sgaGlkX2h3X3N0YXJ0KHN0cnVjdCBoaWRfZGV2aWNlICpoZGV2LAorCQl1bnNpZ25lZCBpbnQgY29ubmVjdF9tYXNrKQoreworCWludCByZXQgPSBoZGV2LT5sbF9kcml2ZXItPnN0YXJ0KGhkZXYpOworCWlmIChyZXQgfHwgIWNvbm5lY3RfbWFzaykKKwkJcmV0dXJuIHJldDsKKwlyZXQgPSBoaWRfY29ubmVjdChoZGV2LCBjb25uZWN0X21hc2spOworCWlmIChyZXQpCisJCWhkZXYtPmxsX2RyaXZlci0+c3RvcChoZGV2KTsKKwlyZXR1cm4gcmV0OworfQorCisvKioKKyAqIGhpZF9od19zdG9wIC0gc3RvcCB1bmRlcmxheWluZyBIVworICoKKyAqIEBoZGV2OiBoaWQgZGV2aWNlCisgKgorICogVGhpcyBpcyB1c3VhbGx5IGNhbGxlZCBmcm9tIHJlbW92ZSBmdW5jdGlvbiBvciBmcm9tIHByb2JlIHdoZW4gc29tZXRoaW5nCisgKiBmYWlsZWQgYW5kIGhpZF9od19zdGFydCB3YXMgY2FsbGVkIGFscmVhZHkuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBoaWRfaHdfc3RvcChzdHJ1Y3QgaGlkX2RldmljZSAqaGRldikKK3sKKwloZGV2LT5sbF9kcml2ZXItPnN0b3AoaGRldik7Cit9CisKK3ZvaWQgaGlkX3JlcG9ydF9yYXdfZXZlbnQoc3RydWN0IGhpZF9kZXZpY2UgKmhpZCwgaW50IHR5cGUsIHU4ICpkYXRhLCBpbnQgc2l6ZSwKKwkJaW50IGludGVycnVwdCk7CisKK2V4dGVybiBpbnQgaGlkX2dlbmVyaWNfaW5pdCh2b2lkKTsKK2V4dGVybiB2b2lkIGhpZF9nZW5lcmljX2V4aXQodm9pZCk7CiAKIC8qIEhJRCBxdWlya3MgQVBJICovCiB1MzIgdXNiaGlkX2xvb2t1cF9xdWlyayhjb25zdCB1MTYgaWRWZW5kb3IsIGNvbnN0IHUxNiBpZFByb2R1Y3QpOwogaW50IHVzYmhpZF9xdWlya3NfaW5pdChjaGFyICoqcXVpcmtzX3BhcmFtKTsKIHZvaWQgdXNiaGlkX3F1aXJrc19leGl0KHZvaWQpOwotdm9pZCB1c2JoaWRfZml4dXBfcmVwb3J0X2Rlc2NyaXB0b3IoY29uc3QgdTE2LCBjb25zdCB1MTYsIGNoYXIgKiwgdW5zaWduZWQsIGNoYXIgKiopOwordm9pZCB1c2JoaWRfc2V0X2xlZHMoc3RydWN0IGhpZF9kZXZpY2UgKmhpZCk7CiAKLSNpZmRlZiBDT05GSUdfSElEX0ZGCi1pbnQgaGlkX2ZmX2luaXQoc3RydWN0IGhpZF9kZXZpY2UgKmhpZCk7Ci0KLWludCBoaWRfbGdmZl9pbml0KHN0cnVjdCBoaWRfZGV2aWNlICpoaWQpOwotaW50IGhpZF9sZzJmZl9pbml0KHN0cnVjdCBoaWRfZGV2aWNlICpoaWQpOwotaW50IGhpZF9wbGZmX2luaXQoc3RydWN0IGhpZF9kZXZpY2UgKmhpZCk7Ci1pbnQgaGlkX3RtZmZfaW5pdChzdHJ1Y3QgaGlkX2RldmljZSAqaGlkKTsKLWludCBoaWRfenBmZl9pbml0KHN0cnVjdCBoaWRfZGV2aWNlICpoaWQpOwogI2lmZGVmIENPTkZJR19ISURfUElECiBpbnQgaGlkX3BpZGZmX2luaXQoc3RydWN0IGhpZF9kZXZpY2UgKmhpZCk7CiAjZWxzZQotc3RhdGljIGlubGluZSBpbnQgaGlkX3BpZGZmX2luaXQoc3RydWN0IGhpZF9kZXZpY2UgKmhpZCkgeyByZXR1cm4gLUVOT0RFVjsgfQotI2VuZGlmCi0KLSNlbHNlCi1zdGF0aWMgaW5saW5lIGludCBoaWRfZmZfaW5pdChzdHJ1Y3QgaGlkX2RldmljZSAqaGlkKSB7IHJldHVybiAtMTsgfQorI2RlZmluZSBoaWRfcGlkZmZfaW5pdCBOVUxMCiAjZW5kaWYKIAogI2lmZGVmIENPTkZJR19ISURfREVCVUcKQEAgLTU3MiwxMCArNzgyLDIzIEBACiAJcmV0dXJuIDA7CiB9CiAjZGVmaW5lIGRiZ19oaWRfbGluZSBkYmdfaGlkCi0jZW5kaWYKKyNlbmRpZiAvKiBISURfREVCVUcgKi8KIAogI2RlZmluZSBlcnJfaGlkKGZvcm1hdCwgYXJnLi4uKSBwcmludGsoS0VSTl9FUlIgIiVzOiAiIGZvcm1hdCAiXG4iICwgXAogCQlfX0ZJTEVfXyAsICMjIGFyZykKLSNlbmRpZgorI2VuZGlmIC8qIEhJRF9GRiAqLworCisjaWZkZWYgQ09ORklHX0hJRF9DT01QQVQKKyNkZWZpbmUgSElEX0NPTVBBVF9MT0FEX0RSSVZFUihuYW1lKQlcCit2b2lkIGhpZF9jb21wYXRfIyNuYW1lKHZvaWQpIHsgfQlcCitFWFBPUlRfU1lNQk9MKGhpZF9jb21wYXRfIyNuYW1lKQorI2Vsc2UKKyNkZWZpbmUgSElEX0NPTVBBVF9MT0FEX0RSSVZFUihuYW1lKQorI2VuZGlmIC8qIEhJRF9DT01QQVQgKi8KKyNkZWZpbmUgSElEX0NPTVBBVF9DQUxMX0RSSVZFUihuYW1lKQlkbyB7CVwKKwlleHRlcm4gdm9pZCBoaWRfY29tcGF0XyMjbmFtZSh2b2lkKTsJXAorCWhpZF9jb21wYXRfIyNuYW1lKCk7CQkJXAorfSB3aGlsZSAoMCkKKwogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaGlkZGV2LmggYi9pbmNsdWRlL2xpbnV4L2hpZGRldi5oCmluZGV4IGE0MTZiOTAuLmM3NjBhZTAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaGlkZGV2LmgKKysrIGIvaW5jbHVkZS9saW51eC9oaWRkZXYuaApAQCAtMTgyLDI2ICsxODIsMjggQEAKIC8qIFRvIHRyYXZlcnNlIHRoZSBpbnB1dCByZXBvcnQgZGVzY3JpcHRvciBpbmZvIGZvciBhIEhJRCBkZXZpY2UsIHBlcmZvcm0gdGhlIAogICogZm9sbG93aW5nOgogICoKLSAqICByaW5mby5yZXBvcnRfdHlwZSA9IEhJRF9SRVBPUlRfVFlQRV9JTlBVVDsKLSAqICByaW5mby5yZXBvcnRfaWQgPSBISURfUkVQT1JUX0lEX0ZJUlNUOwotICogIHJldCA9IGlvY3RsKGZkLCBISURJT0NHUkVQT1JUSU5GTywgJnJpbmZvKTsKKyAqIHJpbmZvLnJlcG9ydF90eXBlID0gSElEX1JFUE9SVF9UWVBFX0lOUFVUOworICogcmluZm8ucmVwb3J0X2lkID0gSElEX1JFUE9SVF9JRF9GSVJTVDsKKyAqIHJldCA9IGlvY3RsKGZkLCBISURJT0NHUkVQT1JUSU5GTywgJnJpbmZvKTsKICAqCi0gKiAgd2hpbGUgKHJldCA+PSAwKSB7Ci0gKiAgICAgIGZvciAoaSA9IDA7IGkgPCByaW5mby5udW1fZmllbGRzOyBpKyspIHsgCi0gKgkgICAgZmluZm8ucmVwb3J0X3R5cGUgPSByaW5mby5yZXBvcnRfdHlwZTsKLSAqICAgICAgICAgIGZpbmZvLnJlcG9ydF9pZCA9IHJpbmZvLnJlcG9ydF9pZDsKLSAqICAgICAgICAgIGZpbmZvLmZpZWxkX2luZGV4ID0gaTsKLSAqICAgICAgICAgIGlvY3RsKGZkLCBISURJT0NHRklFTERJTkZPLCAmZmluZm8pOwotICogICAgICAgICAgZm9yIChqID0gMDsgaiA8IGZpbmZvLm1heHVzYWdlOyBqKyspIHsKLSAqICAgICAgICAgICAgICB1cmVmLmZpZWxkX2luZGV4ID0gaTsKLSAqCQl1cmVmLnVzYWdlX2luZGV4ID0gajsKLSAqCQlpb2N0bChmZCwgSElESU9DR1VDT0RFLCAmdXJlZik7Ci0gKgkJaW9jdGwoZmQsIEhJRElPQ0dVU0FHRSwgJnVyZWYpOwotICogICAgICAgICAgfQotICoJfQotICoJcmluZm8ucmVwb3J0X2lkIHw9IEhJRF9SRVBPUlRfSURfTkVYVDsKLSAqCXJldCA9IGlvY3RsKGZkLCBISURJT0NHUkVQT1JUSU5GTywgJnJpbmZvKTsKLSAqICB9CisgKiB3aGlsZSAocmV0ID49IDApIHsKKyAqIAlmb3IgKGkgPSAwOyBpIDwgcmluZm8ubnVtX2ZpZWxkczsgaSsrKSB7CisgKiAJCWZpbmZvLnJlcG9ydF90eXBlID0gcmluZm8ucmVwb3J0X3R5cGU7CisgKiAJCWZpbmZvLnJlcG9ydF9pZCA9IHJpbmZvLnJlcG9ydF9pZDsKKyAqIAkJZmluZm8uZmllbGRfaW5kZXggPSBpOworICogCQlpb2N0bChmZCwgSElESU9DR0ZJRUxESU5GTywgJmZpbmZvKTsKKyAqIAkJZm9yIChqID0gMDsgaiA8IGZpbmZvLm1heHVzYWdlOyBqKyspIHsKKyAqIAkJCXVyZWYucmVwb3J0X3R5cGUgPSByaW5mby5yZXBvcnRfdHlwZTsKKyAqIAkJCXVyZWYucmVwb3J0X2lkID0gcmluZm8ucmVwb3J0X2lkOworICogCQkJdXJlZi5maWVsZF9pbmRleCA9IGk7CisgKiAJCQl1cmVmLnVzYWdlX2luZGV4ID0gajsKKyAqIAkJCWlvY3RsKGZkLCBISURJT0NHVUNPREUsICZ1cmVmKTsKKyAqIAkJCWlvY3RsKGZkLCBISURJT0NHVVNBR0UsICZ1cmVmKTsKKyAqIAkJfQorICogCX0KKyAqIAlyaW5mby5yZXBvcnRfaWQgfD0gSElEX1JFUE9SVF9JRF9ORVhUOworICogCXJldCA9IGlvY3RsKGZkLCBISURJT0NHUkVQT1JUSU5GTywgJnJpbmZvKTsKKyAqIH0KICAqLwogCiAKQEAgLTIxNyw3ICsyMTksNyBAQAogc3RydWN0IGhpZF9yZXBvcnQ7CiAKICNpZmRlZiBDT05GSUdfVVNCX0hJRERFVgotaW50IGhpZGRldl9jb25uZWN0KHN0cnVjdCBoaWRfZGV2aWNlICopOworaW50IGhpZGRldl9jb25uZWN0KHN0cnVjdCBoaWRfZGV2aWNlICpoaWQsIHVuc2lnbmVkIGludCBmb3JjZSk7CiB2b2lkIGhpZGRldl9kaXNjb25uZWN0KHN0cnVjdCBoaWRfZGV2aWNlICopOwogdm9pZCBoaWRkZXZfaGlkX2V2ZW50KHN0cnVjdCBoaWRfZGV2aWNlICpoaWQsIHN0cnVjdCBoaWRfZmllbGQgKmZpZWxkLAogCQkgICAgICBzdHJ1Y3QgaGlkX3VzYWdlICp1c2FnZSwgX19zMzIgdmFsdWUpOwpAQCAtMjI1LDcgKzIyNyw5IEBACiBpbnQgX19pbml0IGhpZGRldl9pbml0KHZvaWQpOwogdm9pZCBoaWRkZXZfZXhpdCh2b2lkKTsKICNlbHNlCi1zdGF0aWMgaW5saW5lIGludCBoaWRkZXZfY29ubmVjdChzdHJ1Y3QgaGlkX2RldmljZSAqaGlkKSB7IHJldHVybiAtMTsgfQorc3RhdGljIGlubGluZSBpbnQgaGlkZGV2X2Nvbm5lY3Qoc3RydWN0IGhpZF9kZXZpY2UgKmhpZCwKKwkJdW5zaWduZWQgaW50IGZvcmNlKQoreyByZXR1cm4gLTE7IH0KIHN0YXRpYyBpbmxpbmUgdm9pZCBoaWRkZXZfZGlzY29ubmVjdChzdHJ1Y3QgaGlkX2RldmljZSAqaGlkKSB7IH0KIHN0YXRpYyBpbmxpbmUgdm9pZCBoaWRkZXZfaGlkX2V2ZW50KHN0cnVjdCBoaWRfZGV2aWNlICpoaWQsIHN0cnVjdCBoaWRfZmllbGQgKmZpZWxkLAogCQkgICAgICBzdHJ1Y3QgaGlkX3VzYWdlICp1c2FnZSwgX19zMzIgdmFsdWUpIHsgfQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ocGV0LmggYi9pbmNsdWRlL2xpbnV4L2hwZXQuaAppbmRleCAyZGMyOWNlLi43OWY2M2EyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2hwZXQuaAorKysgYi9pbmNsdWRlL2xpbnV4L2hwZXQuaApAQCAtMzcsNiArMzcsNyBAQAogI2RlZmluZQlocGV0X2NvbXBhcmUJX3UxLl9ocGV0X2NvbXBhcmUKIAogI2RlZmluZQlIUEVUX01BWF9USU1FUlMJKDMyKQorI2RlZmluZQlIUEVUX01BWF9JUlEJKDMyKQogCiAvKgogICogSFBFVCBnZW5lcmFsIGNhcGFiaWxpdGllcyByZWdpc3RlcgpAQCAtNjQsNyArNjUsNyBAQAogICovCiAKICNkZWZpbmUJVG5fSU5UX1JPVVRFX0NBUF9NQVNLCQkoMHhmZmZmZmZmZjAwMDAwMDAwVUxMKQotI2RlZmluZQlUbl9JTklfUk9VVEVfQ0FQX1NISUZUCQkoMzJVTCkKKyNkZWZpbmUJVG5fSU5UX1JPVVRFX0NBUF9TSElGVAkJKDMyVUwpCiAjZGVmaW5lCVRuX0ZTQl9JTlRfREVMQ0FQX01BU0sJCSgweDgwMDBVTCkKICNkZWZpbmUJVG5fRlNCX0lOVF9ERUxDQVBfU0hJRlQJCSgxNSkKICNkZWZpbmUJVG5fRlNCX0VOX0NORl9NQVNLCQkoMHg0MDAwVUwpCkBAIC05MSwyMyArOTIsMTQgQEAKICAqIGV4cG9ydGVkIGludGVyZmFjZXMKICAqLwogCi1zdHJ1Y3QgaHBldF90YXNrIHsKLQl2b2lkICgqaHRfZnVuYykgKHZvaWQgKik7Ci0Jdm9pZCAqaHRfZGF0YTsKLQl2b2lkICpodF9vcGFxdWU7Ci19OwotCiBzdHJ1Y3QgaHBldF9kYXRhIHsKIAl1bnNpZ25lZCBsb25nIGhkX3BoeXNfYWRkcmVzczsKIAl2b2lkIF9faW9tZW0gKmhkX2FkZHJlc3M7CiAJdW5zaWduZWQgc2hvcnQgaGRfbmlycXM7Ci0JdW5zaWduZWQgc2hvcnQgaGRfZmxhZ3M7CiAJdW5zaWduZWQgaW50IGhkX3N0YXRlOwkvKiB0aW1lciBhbGxvY2F0ZWQgKi8KIAl1bnNpZ25lZCBpbnQgaGRfaXJxW0hQRVRfTUFYX1RJTUVSU107CiB9OwogCi0jZGVmaW5lCUhQRVRfREFUQV9QTEFURk9STQkweDAwMDEJLyogcGxhdGZvcm0gY2FsbCB0byBocGV0X2FsbG9jICovCi0KIHN0YXRpYyBpbmxpbmUgdm9pZCBocGV0X3Jlc2VydmVfdGltZXIoc3RydWN0IGhwZXRfZGF0YSAqaGQsIGludCB0aW1lcikKIHsKIAloZC0+aGRfc3RhdGUgfD0gKDEgPDwgdGltZXIpOwpAQCAtMTI1LDcgKzExNyw3IEBACiAJdW5zaWduZWQgc2hvcnQgaGlfdGltZXI7CiB9OwogCi0jZGVmaW5lCUhQRVRfSU5GT19QRVJJT0RJQwkweDAwMDEJLyogdGltZXIgaXMgcGVyaW9kaWMgKi8KKyNkZWZpbmUgSFBFVF9JTkZPX1BFUklPRElDCTB4MDAxMAkvKiBwZXJpb2RpYy1jYXBhYmxlIGNvbXBhcmF0b3IgKi8KIAogI2RlZmluZQlIUEVUX0lFX09OCV9JTygnaCcsIDB4MDEpCS8qIGludGVycnVwdCBvbiAqLwogI2RlZmluZQlIUEVUX0lFX09GRglfSU8oJ2gnLCAweDAyKQkvKiBpbnRlcnJ1cHQgb2ZmICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2hydGltZXIuaCBiL2luY2x1ZGUvbGludXgvaHJ0aW1lci5oCmluZGV4IDJmMjQ1ZmUuLjlhNGUzNWMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaHJ0aW1lci5oCisrKyBiL2luY2x1ZGUvbGludXgvaHJ0aW1lci5oCkBAIC0xMjUsMTIgKzEyNSwxMiBAQAogCWVudW0gaHJ0aW1lcl9yZXN0YXJ0CQkoKmZ1bmN0aW9uKShzdHJ1Y3QgaHJ0aW1lciAqKTsKIAlzdHJ1Y3QgaHJ0aW1lcl9jbG9ja19iYXNlCSpiYXNlOwogCXVuc2lnbmVkIGxvbmcJCQlzdGF0ZTsKLQllbnVtIGhydGltZXJfY2JfbW9kZQkJY2JfbW9kZTsKIAlzdHJ1Y3QgbGlzdF9oZWFkCQljYl9lbnRyeTsKKwllbnVtIGhydGltZXJfY2JfbW9kZQkJY2JfbW9kZTsKICNpZmRlZiBDT05GSUdfVElNRVJfU1RBVFMKKwlpbnQJCQkJc3RhcnRfcGlkOwogCXZvaWQJCQkJKnN0YXJ0X3NpdGU7CiAJY2hhcgkJCQlzdGFydF9jb21tWzE2XTsKLQlpbnQJCQkJc3RhcnRfcGlkOwogI2VuZGlmCiB9OwogCkBAIC0xNTUsMTAgKzE1NSw4IEBACiAgKiBAZmlyc3Q6CQlwb2ludGVyIHRvIHRoZSB0aW1lciBub2RlIHdoaWNoIGV4cGlyZXMgZmlyc3QKICAqIEByZXNvbHV0aW9uOgkJdGhlIHJlc29sdXRpb24gb2YgdGhlIGNsb2NrLCBpbiBuYW5vc2Vjb25kcwogICogQGdldF90aW1lOgkJZnVuY3Rpb24gdG8gcmV0cmlldmUgdGhlIGN1cnJlbnQgdGltZSBvZiB0aGUgY2xvY2sKLSAqIEBnZXRfc29mdGlycV90aW1lOglmdW5jdGlvbiB0byByZXRyaWV2ZSB0aGUgY3VycmVudCB0aW1lIGZyb20gdGhlIHNvZnRpcnEKICAqIEBzb2Z0aXJxX3RpbWU6CXRoZSB0aW1lIHdoZW4gcnVubmluZyB0aGUgaHJ0aW1lciBxdWV1ZSBpbiB0aGUgc29mdGlycQogICogQG9mZnNldDoJCW9mZnNldCBvZiB0aGlzIGNsb2NrIHRvIHRoZSBtb25vdG9uaWMgYmFzZQotICogQHJlcHJvZ3JhbToJCWZ1bmN0aW9uIHRvIHJlcHJvZ3JhbSB0aGUgdGltZXIgZXZlbnQKICAqLwogc3RydWN0IGhydGltZXJfY2xvY2tfYmFzZSB7CiAJc3RydWN0IGhydGltZXJfY3B1X2Jhc2UJKmNwdV9iYXNlOwpAQCAtMTY3LDEzICsxNjUsOSBAQAogCXN0cnVjdCByYl9ub2RlCQkqZmlyc3Q7CiAJa3RpbWVfdAkJCXJlc29sdXRpb247CiAJa3RpbWVfdAkJCSgqZ2V0X3RpbWUpKHZvaWQpOwotCWt0aW1lX3QJCQkoKmdldF9zb2Z0aXJxX3RpbWUpKHZvaWQpOwogCWt0aW1lX3QJCQlzb2Z0aXJxX3RpbWU7CiAjaWZkZWYgQ09ORklHX0hJR0hfUkVTX1RJTUVSUwogCWt0aW1lX3QJCQlvZmZzZXQ7Ci0JaW50CQkJKCpyZXByb2dyYW0pKHN0cnVjdCBocnRpbWVyICp0LAotCQkJCQkgICAgIHN0cnVjdCBocnRpbWVyX2Nsb2NrX2Jhc2UgKmIsCi0JCQkJCSAgICAga3RpbWVfdCBuKTsKICNlbmRpZgogfTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pMmMtaWQuaCBiL2luY2x1ZGUvbGludXgvaTJjLWlkLmgKaW5kZXggYmYzNGM1Zi4uMDFkNjdiYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pMmMtaWQuaAorKysgYi9pbmNsdWRlL2xpbnV4L2kyYy1pZC5oCkBAIC00MSw3ICs0MSw2IEBACiAjZGVmaW5lIEkyQ19EUklWRVJJRF9TQUE3MTEwCTIyCS8qIHZpZGVvIGRlY29kZXIJCSovCiAjZGVmaW5lIEkyQ19EUklWRVJJRF9TQUE1MjQ5CTI0CS8qIFNBQTUyNDkgYW5kIGNvbXBhdGlibGVzCSovCiAjZGVmaW5lIEkyQ19EUklWRVJJRF9QQ0Y4NTgzCTI1CS8qIHJlYWwgdGltZSBjbG9jawkJKi8KLSNkZWZpbmUgSTJDX0RSSVZFUklEX1NBQjMwMzYJMjYJLyogU0FCMzAzNiB0dW5lcgkJKi8KICNkZWZpbmUgSTJDX0RSSVZFUklEX1REQTc0MzIJMjcJLyogU3RlcmVvIHNvdW5kIHByb2Nlc3NvcgkqLwogI2RlZmluZSBJMkNfRFJJVkVSSURfVFZNSVhFUiAgICAyOCAgICAgIC8qIE1peGVyIGRyaXZlciBmb3IgdHYgY2FyZHMgICAgKi8KICNkZWZpbmUgSTJDX0RSSVZFUklEX1RWQVVESU8gICAgMjkgICAgICAvKiBHZW5lcmljIFRWIHNvdW5kIGRyaXZlciAgICAgICovCkBAIC02MSw3ICs2MCw3IEBACiAjZGVmaW5lIEkyQ19EUklWRVJJRF9XTTg3NzUJNjkJLyogd204Nzc1IGF1ZGlvIHByb2Nlc3NvcgkqLwogI2RlZmluZSBJMkNfRFJJVkVSSURfQ1M1M0wzMkEJNzAJLyogY3M1M2wzMmEgYXVkaW8gcHJvY2Vzc29yCSovCiAjZGVmaW5lIEkyQ19EUklWRVJJRF9DWDI1ODQwCTcxCS8qIGN4MjU4NHggdmlkZW8gZW5jb2RlcgkqLwotI2RlZmluZSBJMkNfRFJJVkVSSURfU0FBNzEyNwk3MgkvKiBzYWE3MTI0IHZpZGVvIGVuY29kZXIJKi8KKyNkZWZpbmUgSTJDX0RSSVZFUklEX1NBQTcxMjcJNzIJLyogc2FhNzEyNyB2aWRlbyBlbmNvZGVyCSovCiAjZGVmaW5lIEkyQ19EUklWRVJJRF9TQUE3MTFYCTczCS8qIHNhYTcxMXggdmlkZW8gZW5jb2RlcnMJKi8KICNkZWZpbmUgSTJDX0RSSVZFUklEX0FLSVRBSU9FWFAJNzQJLyogSU8gRXhwYW5kZXIgb24gU2hhcnAgU0wtQzEwMDAgKi8KICNkZWZpbmUgSTJDX0RSSVZFUklEX0lORlJBUkVECTc1CS8qIEkyQyBJbmZyYVJlZCBvbiBWaWRlbyBib2FyZHMgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaTJjL3R3bDQwMzAuaCBiL2luY2x1ZGUvbGludXgvaTJjL3R3bDQwMzAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZGI0NTMxCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9pMmMvdHdsNDAzMC5oCkBAIC0wLDAgKzEsMzM5IEBACisvKgorICogdHdsNDAzMC5oIC0gaGVhZGVyIGZvciBUV0w0MDMwIFBNIGFuZCBhdWRpbyBDT0RFQyBkZXZpY2UKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwNiBUZXhhcyBJbnN0cnVtZW50cywgSW5jLgorICoKKyAqIEJhc2VkIG9uIHRsdjMyMGFpYzIzLmM6CisgKiBDb3B5cmlnaHQgKGMpIGJ5IEthaSBTdmFobiA8a2FpLnN2YWhuQG5va2lhLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyBVU0EKKyAqCisgKi8KKworI2lmbmRlZiBfX1RXTDQwMzBfSF8KKyNkZWZpbmUgX19UV0w0MDMwX0hfCisKKy8qCisgKiBVc2luZyB0aGUgdHdsNDAzMCBjb3JlIHdlIGFkZHJlc3MgcmVnaXN0ZXJzIHVzaW5nIGEgcGFpcgorICoJeyBtb2R1bGUgaWQsIHJlbGF0aXZlIHJlZ2lzdGVyIG9mZnNldCB9CisgKiB3aGljaCB0aGF0IGNvcmUgdGhlbiBtYXBzIHRvIHRoZSByZWxldmFudAorICoJeyBpMmMgc2xhdmUsIGFic29sdXRlIHJlZ2lzdGVyIGFkZHJlc3MgfQorICoKKyAqIFRoZSBtb2R1bGUgSURzIGFyZSBtZWFuaW5nZnVsIG9ubHkgdG8gdGhlIHR3bDQwMzAgY29yZSBjb2RlLAorICogd2hpY2ggdXNlcyB0aGVtIGFzIGFycmF5IGluZGljZXMgdG8gbG9vayB1cCB0aGUgZmlyc3QgcmVnaXN0ZXIKKyAqIGFkZHJlc3MgZWFjaCBtb2R1bGUgdXNlcyB3aXRoaW4gYSBnaXZlbiBpMmMgc2xhdmUuCisgKi8KKworLyogU2xhdmUgMCAoaTJjIGFkZHJlc3MgMHg0OCkgKi8KKyNkZWZpbmUgVFdMNDAzMF9NT0RVTEVfVVNCCQkweDAwCisKKy8qIFNsYXZlIDEgKGkyYyBhZGRyZXNzIDB4NDkpICovCisjZGVmaW5lIFRXTDQwMzBfTU9EVUxFX0FVRElPX1ZPSUNFCTB4MDEKKyNkZWZpbmUgVFdMNDAzMF9NT0RVTEVfR1BJTwkJMHgwMgorI2RlZmluZSBUV0w0MDMwX01PRFVMRV9JTlRCUgkJMHgwMworI2RlZmluZSBUV0w0MDMwX01PRFVMRV9QSUgJCTB4MDQKKyNkZWZpbmUgVFdMNDAzMF9NT0RVTEVfVEVTVAkJMHgwNQorCisvKiBTbGF2ZSAyIChpMmMgYWRkcmVzcyAweDRhKSAqLworI2RlZmluZSBUV0w0MDMwX01PRFVMRV9LRVlQQUQJCTB4MDYKKyNkZWZpbmUgVFdMNDAzMF9NT0RVTEVfTUFEQwkJMHgwNworI2RlZmluZSBUV0w0MDMwX01PRFVMRV9JTlRFUlJVUFRTCTB4MDgKKyNkZWZpbmUgVFdMNDAzMF9NT0RVTEVfTEVECQkweDA5CisjZGVmaW5lIFRXTDQwMzBfTU9EVUxFX01BSU5fQ0hBUkdFCTB4MEEKKyNkZWZpbmUgVFdMNDAzMF9NT0RVTEVfUFJFQ0hBUkdFCTB4MEIKKyNkZWZpbmUgVFdMNDAzMF9NT0RVTEVfUFdNMAkJMHgwQworI2RlZmluZSBUV0w0MDMwX01PRFVMRV9QV00xCQkweDBECisjZGVmaW5lIFRXTDQwMzBfTU9EVUxFX1BXTUEJCTB4MEUKKyNkZWZpbmUgVFdMNDAzMF9NT0RVTEVfUFdNQgkJMHgwRgorCisvKiBTbGF2ZSAzIChpMmMgYWRkcmVzcyAweDRiKSAqLworI2RlZmluZSBUV0w0MDMwX01PRFVMRV9CQUNLVVAJCTB4MTAKKyNkZWZpbmUgVFdMNDAzMF9NT0RVTEVfSU5UCQkweDExCisjZGVmaW5lIFRXTDQwMzBfTU9EVUxFX1BNX01BU1RFUgkweDEyCisjZGVmaW5lIFRXTDQwMzBfTU9EVUxFX1BNX1JFQ0VJVkVSCTB4MTMKKyNkZWZpbmUgVFdMNDAzMF9NT0RVTEVfUlRDCQkweDE0CisjZGVmaW5lIFRXTDQwMzBfTU9EVUxFX1NFQ1VSRURfUkVHCTB4MTUKKworLyoKKyAqIFJlYWQgYW5kIHdyaXRlIHNpbmdsZSA4LWJpdCByZWdpc3RlcnMKKyAqLworaW50IHR3bDQwMzBfaTJjX3dyaXRlX3U4KHU4IG1vZF9ubywgdTggdmFsLCB1OCByZWcpOworaW50IHR3bDQwMzBfaTJjX3JlYWRfdTgodTggbW9kX25vLCB1OCAqdmFsLCB1OCByZWcpOworCisvKgorICogUmVhZCBhbmQgd3JpdGUgc2V2ZXJhbCA4LWJpdCByZWdpc3RlcnMgYXQgb25jZS4KKyAqCisgKiBJTVBPUlRBTlQ6ICBGb3IgdHdsNDAzMF9pMmNfd3JpdGUoKSwgYWxsb2NhdGUgbnVtX2J5dGVzICsgMQorICogZm9yIHRoZSB2YWx1ZSwgYW5kIHBvcHVsYXRlIHlvdXIgZGF0YSBzdGFydGluZyBhdCBvZmZzZXQgMS4KKyAqLworaW50IHR3bDQwMzBfaTJjX3dyaXRlKHU4IG1vZF9ubywgdTggKnZhbHVlLCB1OCByZWcsIHU4IG51bV9ieXRlcyk7CitpbnQgdHdsNDAzMF9pMmNfcmVhZCh1OCBtb2Rfbm8sIHU4ICp2YWx1ZSwgdTggcmVnLCB1OCBudW1fYnl0ZXMpOworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKgorICogTk9URTogIGF0IHVwIHRvIDEwMjQgcmVnaXN0ZXJzLCB0aGlzIGlzIGEgYmlnIGNoaXAuCisgKgorICogQXZvaWQgcHV0dGluZyByZWdpc3RlciBkZWNsYXJhdGlvbnMgaW4gdGhpcyBmaWxlLCBpbnN0ZWFkIG9mIGludG8KKyAqIGEgZHJpdmVyLXByaXZhdGUgZmlsZSwgdW5sZXNzIHNvbWUgb2YgdGhlIHJlZ2lzdGVycyBpbiBhIGJsb2NrCisgKiBuZWVkIHRvIGJlIHNoYXJlZCB3aXRoIG90aGVyIGRyaXZlcnMuICBPbmUgZXhhbXBsZSBpcyBibG9ja3MgdGhhdAorICogaGF2ZSBTZWNvbmRhcnkgSVJRIEhhbmRsZXIgKFNJSCkgcmVnaXN0ZXJzLgorICovCisKKyNkZWZpbmUgVFdMNDAzMF9TSUhfQ1RSTF9FWENMRU5fTUFTSwlCSVQoMCkKKyNkZWZpbmUgVFdMNDAzMF9TSUhfQ1RSTF9QRU5ERElTX01BU0sJQklUKDEpCisjZGVmaW5lIFRXTDQwMzBfU0lIX0NUUkxfQ09SX01BU0sJQklUKDIpCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qCisgKiBHUElPIEJsb2NrIFJlZ2lzdGVyIG9mZnNldHMgKHVzZSBUV0w0MDMwX01PRFVMRV9HUElPKQorICovCisKKyNkZWZpbmUgUkVHX0dQSU9EQVRBSU4xCQkJMHgwCisjZGVmaW5lIFJFR19HUElPREFUQUlOMgkJCTB4MQorI2RlZmluZSBSRUdfR1BJT0RBVEFJTjMJCQkweDIKKyNkZWZpbmUgUkVHX0dQSU9EQVRBRElSMQkJMHgzCisjZGVmaW5lIFJFR19HUElPREFUQURJUjIJCTB4NAorI2RlZmluZSBSRUdfR1BJT0RBVEFESVIzCQkweDUKKyNkZWZpbmUgUkVHX0dQSU9EQVRBT1VUMQkJMHg2CisjZGVmaW5lIFJFR19HUElPREFUQU9VVDIJCTB4NworI2RlZmluZSBSRUdfR1BJT0RBVEFPVVQzCQkweDgKKyNkZWZpbmUgUkVHX0NMRUFSR1BJT0RBVEFPVVQxCQkweDkKKyNkZWZpbmUgUkVHX0NMRUFSR1BJT0RBVEFPVVQyCQkweEEKKyNkZWZpbmUgUkVHX0NMRUFSR1BJT0RBVEFPVVQzCQkweEIKKyNkZWZpbmUgUkVHX1NFVEdQSU9EQVRBT1VUMQkJMHhDCisjZGVmaW5lIFJFR19TRVRHUElPREFUQU9VVDIJCTB4RAorI2RlZmluZSBSRUdfU0VUR1BJT0RBVEFPVVQzCQkweEUKKyNkZWZpbmUgUkVHX0dQSU9fREVCRU4xCQkJMHhGCisjZGVmaW5lIFJFR19HUElPX0RFQkVOMgkJCTB4MTAKKyNkZWZpbmUgUkVHX0dQSU9fREVCRU4zCQkJMHgxMQorI2RlZmluZSBSRUdfR1BJT19DVFJMCQkJMHgxMgorI2RlZmluZSBSRUdfR1BJT1BVUERDVFIxCQkweDEzCisjZGVmaW5lIFJFR19HUElPUFVQRENUUjIJCTB4MTQKKyNkZWZpbmUgUkVHX0dQSU9QVVBEQ1RSMwkJMHgxNQorI2RlZmluZSBSRUdfR1BJT1BVUERDVFI0CQkweDE2CisjZGVmaW5lIFJFR19HUElPUFVQRENUUjUJCTB4MTcKKyNkZWZpbmUgUkVHX0dQSU9fSVNSMUEJCQkweDE5CisjZGVmaW5lIFJFR19HUElPX0lTUjJBCQkJMHgxQQorI2RlZmluZSBSRUdfR1BJT19JU1IzQQkJCTB4MUIKKyNkZWZpbmUgUkVHX0dQSU9fSU1SMUEJCQkweDFDCisjZGVmaW5lIFJFR19HUElPX0lNUjJBCQkJMHgxRAorI2RlZmluZSBSRUdfR1BJT19JTVIzQQkJCTB4MUUKKyNkZWZpbmUgUkVHX0dQSU9fSVNSMUIJCQkweDFGCisjZGVmaW5lIFJFR19HUElPX0lTUjJCCQkJMHgyMAorI2RlZmluZSBSRUdfR1BJT19JU1IzQgkJCTB4MjEKKyNkZWZpbmUgUkVHX0dQSU9fSU1SMUIJCQkweDIyCisjZGVmaW5lIFJFR19HUElPX0lNUjJCCQkJMHgyMworI2RlZmluZSBSRUdfR1BJT19JTVIzQgkJCTB4MjQKKyNkZWZpbmUgUkVHX0dQSU9fRURSMQkJCTB4MjgKKyNkZWZpbmUgUkVHX0dQSU9fRURSMgkJCTB4MjkKKyNkZWZpbmUgUkVHX0dQSU9fRURSMwkJCTB4MkEKKyNkZWZpbmUgUkVHX0dQSU9fRURSNAkJCTB4MkIKKyNkZWZpbmUgUkVHX0dQSU9fRURSNQkJCTB4MkMKKyNkZWZpbmUgUkVHX0dQSU9fU0lIX0NUUkwJCTB4MkQKKworLyogVXAgdG8gMTggc2lnbmFscyBhcmUgYXZhaWxhYmxlIGFzIEdQSU9zLCB3aGVuIHRoZWlyCisgKiBwaW5zIGFyZSBub3QgYXNzaWduZWQgdG8gYW5vdGhlciB1c2UgKHN1Y2ggYXMgVUxQSS9VU0IpLgorICovCisjZGVmaW5lIFRXTDQwMzBfR1BJT19NQVgJCTE4CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qCisgKiBLZXlwYWQgcmVnaXN0ZXIgb2Zmc2V0cyAodXNlIFRXTDQwMzBfTU9EVUxFX0tFWVBBRCkKKyAqIC4uLiBTSUgvaW50ZXJydXB0IG9ubHkKKyAqLworCisjZGVmaW5lIFRXTDQwMzBfS0VZUEFEX0tFWVBfSVNSMQkweDExCisjZGVmaW5lIFRXTDQwMzBfS0VZUEFEX0tFWVBfSU1SMQkweDEyCisjZGVmaW5lIFRXTDQwMzBfS0VZUEFEX0tFWVBfSVNSMgkweDEzCisjZGVmaW5lIFRXTDQwMzBfS0VZUEFEX0tFWVBfSU1SMgkweDE0CisjZGVmaW5lIFRXTDQwMzBfS0VZUEFEX0tFWVBfU0lSCQkweDE1CS8qIHRlc3QgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgVFdMNDAzMF9LRVlQQURfS0VZUF9FRFIJCTB4MTYKKyNkZWZpbmUgVFdMNDAzMF9LRVlQQURfS0VZUF9TSUhfQ1RSTAkweDE3CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qCisgKiBNdWx0aWNoYW5uZWwgQURDIHJlZ2lzdGVyIG9mZnNldHMgKHVzZSBUV0w0MDMwX01PRFVMRV9NQURDKQorICogLi4uIFNJSC9pbnRlcnJ1cHQgb25seQorICovCisKKyNkZWZpbmUgVFdMNDAzMF9NQURDX0lTUjEJCTB4NjEKKyNkZWZpbmUgVFdMNDAzMF9NQURDX0lNUjEJCTB4NjIKKyNkZWZpbmUgVFdMNDAzMF9NQURDX0lTUjIJCTB4NjMKKyNkZWZpbmUgVFdMNDAzMF9NQURDX0lNUjIJCTB4NjQKKyNkZWZpbmUgVFdMNDAzMF9NQURDX1NJUgkJMHg2NQkvKiB0ZXN0IHJlZ2lzdGVyICovCisjZGVmaW5lIFRXTDQwMzBfTUFEQ19FRFIJCTB4NjYKKyNkZWZpbmUgVFdMNDAzMF9NQURDX1NJSF9DVFJMCQkweDY3CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qCisgKiBCYXR0ZXJ5IGNoYXJnZXIgcmVnaXN0ZXIgb2Zmc2V0cyAodXNlIFRXTDQwMzBfTU9EVUxFX0lOVEVSUlVQVFMpCisgKi8KKworI2RlZmluZSBUV0w0MDMwX0lOVEVSUlVQVFNfQkNJSVNSMUEJMHgwCisjZGVmaW5lIFRXTDQwMzBfSU5URVJSVVBUU19CQ0lJU1IyQQkweDEKKyNkZWZpbmUgVFdMNDAzMF9JTlRFUlJVUFRTX0JDSUlNUjFBCTB4MgorI2RlZmluZSBUV0w0MDMwX0lOVEVSUlVQVFNfQkNJSU1SMkEJMHgzCisjZGVmaW5lIFRXTDQwMzBfSU5URVJSVVBUU19CQ0lJU1IxQgkweDQKKyNkZWZpbmUgVFdMNDAzMF9JTlRFUlJVUFRTX0JDSUlTUjJCCTB4NQorI2RlZmluZSBUV0w0MDMwX0lOVEVSUlVQVFNfQkNJSU1SMUIJMHg2CisjZGVmaW5lIFRXTDQwMzBfSU5URVJSVVBUU19CQ0lJTVIyQgkweDcKKyNkZWZpbmUgVFdMNDAzMF9JTlRFUlJVUFRTX0JDSVNJUjEJMHg4CS8qIHRlc3QgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgVFdMNDAzMF9JTlRFUlJVUFRTX0JDSVNJUjIJMHg5CS8qIHRlc3QgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgVFdMNDAzMF9JTlRFUlJVUFRTX0JDSUVEUjEJMHhhCisjZGVmaW5lIFRXTDQwMzBfSU5URVJSVVBUU19CQ0lFRFIyCTB4YgorI2RlZmluZSBUV0w0MDMwX0lOVEVSUlVQVFNfQkNJRURSMwkweGMKKyNkZWZpbmUgVFdMNDAzMF9JTlRFUlJVUFRTX0JDSVNJSENUUkwJMHhkCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qCisgKiBQb3dlciBJbnRlcnJ1cHQgYmxvY2sgcmVnaXN0ZXIgb2Zmc2V0cyAodXNlIFRXTDQwMzBfTU9EVUxFX0lOVCkKKyAqLworCisjZGVmaW5lIFRXTDQwMzBfSU5UX1BXUl9JU1IxCQkweDAKKyNkZWZpbmUgVFdMNDAzMF9JTlRfUFdSX0lNUjEJCTB4MQorI2RlZmluZSBUV0w0MDMwX0lOVF9QV1JfSVNSMgkJMHgyCisjZGVmaW5lIFRXTDQwMzBfSU5UX1BXUl9JTVIyCQkweDMKKyNkZWZpbmUgVFdMNDAzMF9JTlRfUFdSX1NJUgkJMHg0CS8qIHRlc3QgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgVFdMNDAzMF9JTlRfUFdSX0VEUjEJCTB4NQorI2RlZmluZSBUV0w0MDMwX0lOVF9QV1JfRURSMgkJMHg2CisjZGVmaW5lIFRXTDQwMzBfSU5UX1BXUl9TSUhfQ1RSTAkweDcKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RydWN0IHR3bDQwMzBfYmNpX3BsYXRmb3JtX2RhdGEgeworCWludCAqYmF0dGVyeV90bXBfdGJsOworCXVuc2lnbmVkIGludCB0YmxzaXplOworfTsKKworLyogVFdMNDAzMF9HUElPX01BWCAoMTgpIEdQSU9zLCB3aXRoIGludGVycnVwdHMgKi8KK3N0cnVjdCB0d2w0MDMwX2dwaW9fcGxhdGZvcm1fZGF0YSB7CisJaW50CQlncGlvX2Jhc2U7CisJdW5zaWduZWQJaXJxX2Jhc2UsIGlycV9lbmQ7CisKKwkvKiBGb3IgZ3Bpby1OLCBiaXQgKDEgPDwgTikgaW4gInB1bGx1cHMiIGlzIHNldCBpZiB0aGF0IHB1bGx1cAorCSAqIHNob3VsZCBiZSBlbmFibGVkLiAgRWxzZSwgaWYgdGhhdCBiaXQgaXMgc2V0IGluICJwdWxsZG93bnMiLAorCSAqIHRoYXQgcHVsbGRvd24gaXMgZW5hYmxlZC4gIERvbid0IHdhc3RlIHBvd2VyIGJ5IGxldHRpbmcgYW55CisJICogZGlnaXRhbCBpbnB1dHMgZmxvYXQuLi4KKwkgKi8KKwl1MzIJCXB1bGx1cHM7CisJdTMyCQlwdWxsZG93bnM7CisKKwlpbnQJCSgqc2V0dXApKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQl1bnNpZ25lZCBncGlvLCB1bnNpZ25lZCBuZ3Bpbyk7CisJaW50CQkoKnRlYXJkb3duKShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJdW5zaWduZWQgZ3BpbywgdW5zaWduZWQgbmdwaW8pOworfTsKKworc3RydWN0IHR3bDQwMzBfbWFkY19wbGF0Zm9ybV9kYXRhIHsKKwlpbnQJCWlycV9saW5lOworfTsKKworc3RydWN0IHR3bDQwMzBfa2V5cGFkX2RhdGEgeworCWludCByb3dzOworCWludCBjb2xzOworCWludCAqa2V5bWFwOworCWludCBpcnE7CisJdW5zaWduZWQgaW50IGtleW1hcHNpemU7CisJdW5zaWduZWQgaW50IHJlcDoxOworfTsKKworZW51bSB0d2w0MDMwX3VzYl9tb2RlIHsKKwlUMl9VU0JfTU9ERV9VTFBJID0gMSwKKwlUMl9VU0JfTU9ERV9DRUEyMDExXzNQSU4gPSAyLAorfTsKKworc3RydWN0IHR3bDQwMzBfdXNiX2RhdGEgeworCWVudW0gdHdsNDAzMF91c2JfbW9kZQl1c2JfbW9kZTsKK307CisKK3N0cnVjdCB0d2w0MDMwX3BsYXRmb3JtX2RhdGEgeworCXVuc2lnbmVkCQkJCWlycV9iYXNlLCBpcnFfZW5kOworCXN0cnVjdCB0d2w0MDMwX2JjaV9wbGF0Zm9ybV9kYXRhCSpiY2k7CisJc3RydWN0IHR3bDQwMzBfZ3Bpb19wbGF0Zm9ybV9kYXRhCSpncGlvOworCXN0cnVjdCB0d2w0MDMwX21hZGNfcGxhdGZvcm1fZGF0YQkqbWFkYzsKKwlzdHJ1Y3QgdHdsNDAzMF9rZXlwYWRfZGF0YQkJKmtleXBhZDsKKwlzdHJ1Y3QgdHdsNDAzMF91c2JfZGF0YQkJCSp1c2I7CisKKwkvKiBSRVZJU0lUIG1vcmUgdG8gY29tZSAuLi4gX25vdGhpbmdfIHNob3VsZCBiZSBoYXJkLXdpcmVkICovCit9OworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKgorICogRklYTUUgY29tcGxldGVseSBzdG9wIHVzaW5nIFRXTDQwMzBfSVJRX0JBU0UgLi4uIGluc3RlYWQsIHBhc3MgdGhlCisgKiBJUlEgZGF0YSB0byBzdWJzaWRpYXJ5IGRldmljZXMgdXNpbmcgcGxhdGZvcm0gZGV2aWNlIHJlc291cmNlcy4KKyAqLworCisvKiBJUlEgaW5mb3JtYXRpb24tbmVlZCBiYXNlICovCisjaW5jbHVkZSA8bWFjaC9pcnFzLmg+CisvKiBUV0w0MDMwIGludGVycnVwdHMgKi8KKworLyogI2RlZmluZSBUV0w0MDMwX01PRElSUV9HUElPCQkoVFdMNDAzMF9JUlFfQkFTRSArIDApICovCisjZGVmaW5lIFRXTDQwMzBfTU9ESVJRX0tFWVBBRAkJKFRXTDQwMzBfSVJRX0JBU0UgKyAxKQorI2RlZmluZSBUV0w0MDMwX01PRElSUV9CQ0kJCShUV0w0MDMwX0lSUV9CQVNFICsgMikKKyNkZWZpbmUgVFdMNDAzMF9NT0RJUlFfTUFEQwkJKFRXTDQwMzBfSVJRX0JBU0UgKyAzKQorLyogI2RlZmluZSBUV0w0MDMwX01PRElSUV9VU0IJCShUV0w0MDMwX0lSUV9CQVNFICsgNCkgKi8KKyNkZWZpbmUgVFdMNDAzMF9NT0RJUlFfUFdSCQkoVFdMNDAzMF9JUlFfQkFTRSArIDUpCisKKyNkZWZpbmUgVFdMNDAzMF9QV1JJUlFfUFdSQlROCQkoVFdMNDAzMF9QV1JfSVJRX0JBU0UgKyAwKQorI2RlZmluZSBUV0w0MDMwX1BXUklSUV9DSEdfUFJFUwkJKFRXTDQwMzBfUFdSX0lSUV9CQVNFICsgMSkKKyNkZWZpbmUgVFdMNDAzMF9QV1JJUlFfVVNCX1BSRVMJCShUV0w0MDMwX1BXUl9JUlFfQkFTRSArIDIpCisjZGVmaW5lIFRXTDQwMzBfUFdSSVJRX1JUQwkJKFRXTDQwMzBfUFdSX0lSUV9CQVNFICsgMykKKyNkZWZpbmUgVFdMNDAzMF9QV1JJUlFfSE9UX0RJRQkJKFRXTDQwMzBfUFdSX0lSUV9CQVNFICsgNCkKKyNkZWZpbmUgVFdMNDAzMF9QV1JJUlFfUFdST0tfVElNRU9VVAkoVFdMNDAzMF9QV1JfSVJRX0JBU0UgKyA1KQorI2RlZmluZSBUV0w0MDMwX1BXUklSUV9NQkNIRwkJKFRXTDQwMzBfUFdSX0lSUV9CQVNFICsgNikKKyNkZWZpbmUgVFdMNDAzMF9QV1JJUlFfU0NfREVURUNUCShUV0w0MDMwX1BXUl9JUlFfQkFTRSArIDcpCisKKy8qIFJlc3QgYXJlIHVuc3VlZCBjdXJyZW50bHkqLworCisvKiBPZmZzZXRzIHRvIFBvd2VyIFJlZ2lzdGVycyAqLworI2RlZmluZSBUV0w0MDMwX1ZEQUNfREVWX0dSUAkJMHgzQgorI2RlZmluZSBUV0w0MDMwX1ZEQUNfREVESUNBVEVECQkweDNFCisjZGVmaW5lIFRXTDQwMzBfVkFVWDFfREVWX0dSUAkJMHgxNworI2RlZmluZSBUV0w0MDMwX1ZBVVgxX0RFRElDQVRFRAkJMHgxQQorI2RlZmluZSBUV0w0MDMwX1ZBVVgyX0RFVl9HUlAJCTB4MUIKKyNkZWZpbmUgVFdMNDAzMF9WQVVYMl9ERURJQ0FURUQJCTB4MUUKKyNkZWZpbmUgVFdMNDAzMF9WQVVYM19ERVZfR1JQCQkweDFGCisjZGVmaW5lIFRXTDQwMzBfVkFVWDNfREVESUNBVEVECQkweDIyCisKKy8qIFRXTDQwMzAgR1BJTyBpbnRlcnJ1cHQgZGVmaW5pdGlvbnMgKi8KKworI2RlZmluZSBUV0w0MDMwX0dQSU9fSVJRX05PKG4pCQkoVFdMNDAzMF9HUElPX0lSUV9CQVNFICsgKG4pKQorI2RlZmluZSBUV0w0MDMwX0dQSU9fSVNfRU5BQkxFCQkxCisKKy8qCisgKiBFeHBvcnRlZCBUV0w0MDMwIEdQSU8gQVBJcworICoKKyAqIFdBUk5JTkcgLS0gdXNlIHN0YW5kYXJkIEdQSU8gYW5kIElSUSBjYWxscyBpbnN0ZWFkOyB0aGVzZSB3aWxsIHZhbmlzaC4KKyAqLworaW50IHR3bDQwMzBfZ2V0X2dwaW9fZGF0YWluKGludCBncGlvKTsKK2ludCB0d2w0MDMwX3JlcXVlc3RfZ3BpbyhpbnQgZ3Bpbyk7CitpbnQgdHdsNDAzMF9zZXRfZ3Bpb19kZWJvdW5jZShpbnQgZ3BpbywgaW50IGVuYWJsZSk7CitpbnQgdHdsNDAzMF9mcmVlX2dwaW8oaW50IGdwaW8pOworCisjaWYgZGVmaW5lZChDT05GSUdfVFdMNDAzMF9CQ0lfQkFUVEVSWSkgfHwgXAorCWRlZmluZWQoQ09ORklHX1RXTDQwMzBfQkNJX0JBVFRFUllfTU9EVUxFKQorCWV4dGVybiBpbnQgdHdsNDAzMGNoYXJnZXJfdXNiX2VuKGludCBlbmFibGUpOworI2Vsc2UKKwlzdGF0aWMgaW5saW5lIGludCB0d2w0MDMwY2hhcmdlcl91c2JfZW4oaW50IGVuYWJsZSkgeyByZXR1cm4gMDsgfQorI2VuZGlmCisKKyNlbmRpZiAvKiBFbmQgb2YgX19UV0w0MDMwX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaTJvLmggYi9pbmNsdWRlL2xpbnV4L2kyby5oCmluZGV4IDc1YWU2ZDguLjRjNGU1N2QgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaTJvLmgKKysrIGIvaW5jbHVkZS9saW51eC9pMm8uaApAQCAtNTcwLDcgKzU3MCw2IEBACiAjZW5kaWYKIAlzcGlubG9ja190IGxvY2s7CS8qIGxvY2sgZm9yIGNvbnRyb2xsZXIKIAkJCQkgICBjb25maWd1cmF0aW9uICovCi0KIAl2b2lkICpkcml2ZXJfZGF0YVtJMk9fTUFYX0RSSVZFUlNdOwkvKiBzdG9yYWdlIGZvciBkcml2ZXJzICovCiB9OwogCkBAIC02OTEsMjg5ICs2OTAsMjIgQEAKIH07CiAjZW5kaWYKIAotLyoqCi0gKglpMm9fc2dfdGFibGVzaXplIC0gQ2FsY3VsYXRlIHRoZSBtYXhpbXVtIG51bWJlciBvZiBlbGVtZW50cyBpbiBhIFNHTAotICoJQGM6IEkyTyBjb250cm9sbGVyIGZvciB3aGljaCB0aGUgY2FsY3VsYXRpb24gc2hvdWxkIGJlIGRvbmUKLSAqCUBib2R5X3NpemU6IG1heGltdW0gYm9keSBzaXplIHVzZWQgZm9yIG1lc3NhZ2UgaW4gMzItYml0IHdvcmRzLgotICoKLSAqCVJldHVybiB0aGUgbWF4aW11bSBudW1iZXIgb2YgU0cgZWxlbWVudHMgaW4gYSBTRyBsaXN0LgotICovCi1zdGF0aWMgaW5saW5lIHUxNiBpMm9fc2dfdGFibGVzaXplKHN0cnVjdCBpMm9fY29udHJvbGxlciAqYywgdTE2IGJvZHlfc2l6ZSkKLXsKLQlpMm9fc3RhdHVzX2Jsb2NrICpzYiA9IGMtPnN0YXR1c19ibG9jay52aXJ0OwotCXUxNiBzZ19jb3VudCA9Ci0JICAgIChzYi0+aW5ib3VuZF9mcmFtZV9zaXplIC0gc2l6ZW9mKHN0cnVjdCBpMm9fbWVzc2FnZSkgLyA0KSAtCi0JICAgIGJvZHlfc2l6ZTsKLQotCWlmIChjLT5wYWVfc3VwcG9ydCkgewotCQkvKgotCQkgKiBmb3IgNjQtYml0IGEgU0cgYXR0cmlidXRlIGVsZW1lbnQgbXVzdCBiZSBhZGRlZCBhbmQgZWFjaAotCQkgKiBTRyBlbGVtZW50IG5lZWRzIDEyIGJ5dGVzIGluc3RlYWQgb2YgOC4KLQkJICovCi0JCXNnX2NvdW50IC09IDI7Ci0JCXNnX2NvdW50IC89IDM7Ci0JfSBlbHNlCi0JCXNnX2NvdW50IC89IDI7Ci0KLQlpZiAoYy0+c2hvcnRfcmVxICYmIChzZ19jb3VudCA+IDgpKQotCQlzZ19jb3VudCA9IDg7Ci0KLQlyZXR1cm4gc2dfY291bnQ7Ci19OwotCi0vKioKLSAqCWkyb19kbWFfbWFwX3NpbmdsZSAtIE1hcCBwb2ludGVyIHRvIGNvbnRyb2xsZXIgYW5kIGZpbGwgaW4gSTJPIG1lc3NhZ2UuCi0gKglAYzogSTJPIGNvbnRyb2xsZXIKLSAqCUBwdHI6IHBvaW50ZXIgdG8gdGhlIGRhdGEgd2hpY2ggc2hvdWxkIGJlIG1hcHBlZAotICoJQHNpemU6IHNpemUgb2YgZGF0YSBpbiBieXRlcwotICoJQGRpcmVjdGlvbjogRE1BX1RPX0RFVklDRSAvIERNQV9GUk9NX0RFVklDRQotICoJQHNnX3B0cjogcG9pbnRlciB0byB0aGUgU0cgbGlzdCBpbnNpZGUgdGhlIEkyTyBtZXNzYWdlCi0gKgotICoJVGhpcyBmdW5jdGlvbiBkb2VzIGFsbCBuZWNlc3NhcnkgRE1BIGhhbmRsaW5nIGFuZCBhbHNvIHdyaXRlcyB0aGUgSTJPCi0gKglTR0wgZWxlbWVudHMgaW50byB0aGUgSTJPIG1lc3NhZ2UuIEZvciBkZXRhaWxzIG9uIERNQSBoYW5kbGluZyBzZWUgYWxzbwotICoJZG1hX21hcF9zaW5nbGUoKS4gVGhlIHBvaW50ZXIgc2dfcHRyIHdpbGwgb25seSBiZSBzZXQgdG8gdGhlIGVuZCBvZiB0aGUKLSAqCVNHIGxpc3QgaWYgdGhlIGFsbG9jYXRpb24gd2FzIHN1Y2Nlc3NmdWwuCi0gKgotICoJUmV0dXJucyBETUEgYWRkcmVzcyB3aGljaCBtdXN0IGJlIGNoZWNrZWQgZm9yIGZhaWx1cmVzIHVzaW5nCi0gKglkbWFfbWFwcGluZ19lcnJvcigpLgotICovCi1zdGF0aWMgaW5saW5lIGRtYV9hZGRyX3QgaTJvX2RtYV9tYXBfc2luZ2xlKHN0cnVjdCBpMm9fY29udHJvbGxlciAqYywgdm9pZCAqcHRyLAorZXh0ZXJuIHUxNiBpMm9fc2dfdGFibGVzaXplKHN0cnVjdCBpMm9fY29udHJvbGxlciAqYywgdTE2IGJvZHlfc2l6ZSk7CitleHRlcm4gZG1hX2FkZHJfdCBpMm9fZG1hX21hcF9zaW5nbGUoc3RydWN0IGkyb19jb250cm9sbGVyICpjLCB2b2lkICpwdHIsCiAJCQkJCSAgICBzaXplX3Qgc2l6ZSwKIAkJCQkJICAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbiwKLQkJCQkJICAgIHUzMiAqKiBzZ19wdHIpCi17Ci0JdTMyIHNnX2ZsYWdzOwotCXUzMiAqbXB0ciA9ICpzZ19wdHI7Ci0JZG1hX2FkZHJfdCBkbWFfYWRkcjsKLQotCXN3aXRjaCAoZGlyZWN0aW9uKSB7Ci0JY2FzZSBETUFfVE9fREVWSUNFOgotCQlzZ19mbGFncyA9IDB4ZDQwMDAwMDA7Ci0JCWJyZWFrOwotCWNhc2UgRE1BX0ZST01fREVWSUNFOgotCQlzZ19mbGFncyA9IDB4ZDAwMDAwMDA7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXJldHVybiAwOwotCX0KLQotCWRtYV9hZGRyID0gZG1hX21hcF9zaW5nbGUoJmMtPnBkZXYtPmRldiwgcHRyLCBzaXplLCBkaXJlY3Rpb24pOwotCWlmICghZG1hX21hcHBpbmdfZXJyb3IoJmMtPnBkZXYtPmRldiwgZG1hX2FkZHIpKSB7Ci0jaWZkZWYgQ09ORklHX0kyT19FWFRfQURBUFRFQ19ETUE2NAotCQlpZiAoKHNpemVvZihkbWFfYWRkcl90KSA+IDQpICYmIGMtPnBhZV9zdXBwb3J0KSB7Ci0JCQkqbXB0cisrID0gY3B1X3RvX2xlMzIoMHg3QzAyMDAwMik7Ci0JCQkqbXB0cisrID0gY3B1X3RvX2xlMzIoUEFHRV9TSVpFKTsKLQkJfQotI2VuZGlmCi0KLQkJKm1wdHIrKyA9IGNwdV90b19sZTMyKHNnX2ZsYWdzIHwgc2l6ZSk7Ci0JCSptcHRyKysgPSBjcHVfdG9fbGUzMihpMm9fZG1hX2xvdyhkbWFfYWRkcikpOwotI2lmZGVmIENPTkZJR19JMk9fRVhUX0FEQVBURUNfRE1BNjQKLQkJaWYgKChzaXplb2YoZG1hX2FkZHJfdCkgPiA0KSAmJiBjLT5wYWVfc3VwcG9ydCkKLQkJCSptcHRyKysgPSBjcHVfdG9fbGUzMihpMm9fZG1hX2hpZ2goZG1hX2FkZHIpKTsKLSNlbmRpZgotCQkqc2dfcHRyID0gbXB0cjsKLQl9Ci0JcmV0dXJuIGRtYV9hZGRyOwotfTsKLQotLyoqCi0gKglpMm9fZG1hX21hcF9zZyAtIE1hcCBhIFNHIExpc3QgdG8gY29udHJvbGxlciBhbmQgZmlsbCBpbiBJMk8gbWVzc2FnZS4KLSAqCUBjOiBJMk8gY29udHJvbGxlcgotICoJQHNnOiBTRyBsaXN0IHRvIGJlIG1hcHBlZAotICoJQHNnX2NvdW50OiBudW1iZXIgb2YgZWxlbWVudHMgaW4gdGhlIFNHIGxpc3QKLSAqCUBkaXJlY3Rpb246IERNQV9UT19ERVZJQ0UgLyBETUFfRlJPTV9ERVZJQ0UKLSAqCUBzZ19wdHI6IHBvaW50ZXIgdG8gdGhlIFNHIGxpc3QgaW5zaWRlIHRoZSBJMk8gbWVzc2FnZQotICoKLSAqCVRoaXMgZnVuY3Rpb24gZG9lcyBhbGwgbmVjZXNzYXJ5IERNQSBoYW5kbGluZyBhbmQgYWxzbyB3cml0ZXMgdGhlIEkyTwotICoJU0dMIGVsZW1lbnRzIGludG8gdGhlIEkyTyBtZXNzYWdlLiBGb3IgZGV0YWlscyBvbiBETUEgaGFuZGxpbmcgc2VlIGFsc28KLSAqCWRtYV9tYXBfc2coKS4gVGhlIHBvaW50ZXIgc2dfcHRyIHdpbGwgb25seSBiZSBzZXQgdG8gdGhlIGVuZCBvZiB0aGUgU0cKLSAqCWxpc3QgaWYgdGhlIGFsbG9jYXRpb24gd2FzIHN1Y2Nlc3NmdWwuCi0gKgotICoJUmV0dXJucyAwIG9uIGZhaWx1cmUgb3IgMSBvbiBzdWNjZXNzLgotICovCi1zdGF0aWMgaW5saW5lIGludCBpMm9fZG1hX21hcF9zZyhzdHJ1Y3QgaTJvX2NvbnRyb2xsZXIgKmMsCisJCQkJCSAgICB1MzIgKiogc2dfcHRyKTsKK2V4dGVybiBpbnQgaTJvX2RtYV9tYXBfc2coc3RydWN0IGkyb19jb250cm9sbGVyICpjLAogCQkJCSBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLCBpbnQgc2dfY291bnQsCiAJCQkJIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbiwKLQkJCQkgdTMyICoqIHNnX3B0cikKLXsKLQl1MzIgc2dfZmxhZ3M7Ci0JdTMyICptcHRyID0gKnNnX3B0cjsKLQotCXN3aXRjaCAoZGlyZWN0aW9uKSB7Ci0JY2FzZSBETUFfVE9fREVWSUNFOgotCQlzZ19mbGFncyA9IDB4MTQwMDAwMDA7Ci0JCWJyZWFrOwotCWNhc2UgRE1BX0ZST01fREVWSUNFOgotCQlzZ19mbGFncyA9IDB4MTAwMDAwMDA7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXJldHVybiAwOwotCX0KLQotCXNnX2NvdW50ID0gZG1hX21hcF9zZygmYy0+cGRldi0+ZGV2LCBzZywgc2dfY291bnQsIGRpcmVjdGlvbik7Ci0JaWYgKCFzZ19jb3VudCkKLQkJcmV0dXJuIDA7Ci0KLSNpZmRlZiBDT05GSUdfSTJPX0VYVF9BREFQVEVDX0RNQTY0Ci0JaWYgKChzaXplb2YoZG1hX2FkZHJfdCkgPiA0KSAmJiBjLT5wYWVfc3VwcG9ydCkgewotCQkqbXB0cisrID0gY3B1X3RvX2xlMzIoMHg3QzAyMDAwMik7Ci0JCSptcHRyKysgPSBjcHVfdG9fbGUzMihQQUdFX1NJWkUpOwotCX0KLSNlbmRpZgotCi0Jd2hpbGUgKHNnX2NvdW50LS0gPiAwKSB7Ci0JCWlmICghc2dfY291bnQpCi0JCQlzZ19mbGFncyB8PSAweEMwMDAwMDAwOwotCQkqbXB0cisrID0gY3B1X3RvX2xlMzIoc2dfZmxhZ3MgfCBzZ19kbWFfbGVuKHNnKSk7Ci0JCSptcHRyKysgPSBjcHVfdG9fbGUzMihpMm9fZG1hX2xvdyhzZ19kbWFfYWRkcmVzcyhzZykpKTsKLSNpZmRlZiBDT05GSUdfSTJPX0VYVF9BREFQVEVDX0RNQTY0Ci0JCWlmICgoc2l6ZW9mKGRtYV9hZGRyX3QpID4gNCkgJiYgYy0+cGFlX3N1cHBvcnQpCi0JCQkqbXB0cisrID0gY3B1X3RvX2xlMzIoaTJvX2RtYV9oaWdoKHNnX2RtYV9hZGRyZXNzKHNnKSkpOwotI2VuZGlmCi0JCXNnID0gc2dfbmV4dChzZyk7Ci0JfQotCSpzZ19wdHIgPSBtcHRyOwotCi0JcmV0dXJuIDE7Ci19OwotCi0vKioKLSAqCWkyb19kbWFfYWxsb2MgLSBBbGxvY2F0ZSBETUEgbWVtb3J5Ci0gKglAZGV2OiBzdHJ1Y3QgZGV2aWNlIHBvaW50ZXIgdG8gdGhlIFBDSSBkZXZpY2Ugb2YgdGhlIEkyTyBjb250cm9sbGVyCi0gKglAYWRkcjogaTJvX2RtYSBzdHJ1Y3Qgd2hpY2ggc2hvdWxkIGdldCB0aGUgRE1BIGJ1ZmZlcgotICoJQGxlbjogbGVuZ3RoIG9mIHRoZSBuZXcgRE1BIG1lbW9yeQotICoJQGdmcF9tYXNrOiBHRlAgbWFzawotICoKLSAqCUFsbG9jYXRlIGEgY29oZXJlbnQgRE1BIG1lbW9yeSBhbmQgd3JpdGUgdGhlIHBvaW50ZXJzIGludG8gYWRkci4KLSAqCi0gKglSZXR1cm5zIDAgb24gc3VjY2VzcyBvciAtRU5PTUVNIG9uIGZhaWx1cmUuCi0gKi8KLXN0YXRpYyBpbmxpbmUgaW50IGkyb19kbWFfYWxsb2Moc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgaTJvX2RtYSAqYWRkciwKLQkJCQlzaXplX3QgbGVuLCBnZnBfdCBnZnBfbWFzaykKLXsKLQlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHRvX3BjaV9kZXYoZGV2KTsKLQlpbnQgZG1hXzY0ID0gMDsKLQotCWlmICgoc2l6ZW9mKGRtYV9hZGRyX3QpID4gNCkgJiYgKHBkZXYtPmRtYV9tYXNrID09IERNQV82NEJJVF9NQVNLKSkgewotCQlkbWFfNjQgPSAxOwotCQlpZiAocGNpX3NldF9kbWFfbWFzayhwZGV2LCBETUFfMzJCSVRfTUFTSykpCi0JCQlyZXR1cm4gLUVOT01FTTsKLQl9Ci0KLQlhZGRyLT52aXJ0ID0gZG1hX2FsbG9jX2NvaGVyZW50KGRldiwgbGVuLCAmYWRkci0+cGh5cywgZ2ZwX21hc2spOwotCi0JaWYgKChzaXplb2YoZG1hX2FkZHJfdCkgPiA0KSAmJiBkbWFfNjQpCi0JCWlmIChwY2lfc2V0X2RtYV9tYXNrKHBkZXYsIERNQV82NEJJVF9NQVNLKSkKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcgImkybzogdW5hYmxlIHRvIHNldCA2NC1iaXQgRE1BIik7Ci0KLQlpZiAoIWFkZHItPnZpcnQpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JbWVtc2V0KGFkZHItPnZpcnQsIDAsIGxlbik7Ci0JYWRkci0+bGVuID0gbGVuOwotCi0JcmV0dXJuIDA7Ci19OwotCi0vKioKLSAqCWkyb19kbWFfZnJlZSAtIEZyZWUgRE1BIG1lbW9yeQotICoJQGRldjogc3RydWN0IGRldmljZSBwb2ludGVyIHRvIHRoZSBQQ0kgZGV2aWNlIG9mIHRoZSBJMk8gY29udHJvbGxlcgotICoJQGFkZHI6IGkyb19kbWEgc3RydWN0IHdoaWNoIGNvbnRhaW5zIHRoZSBETUEgYnVmZmVyCi0gKgotICoJRnJlZSBhIGNvaGVyZW50IERNQSBtZW1vcnkgYW5kIHNldCB2aXJ0dWFsIGFkZHJlc3Mgb2YgYWRkciB0byBOVUxMLgotICovCi1zdGF0aWMgaW5saW5lIHZvaWQgaTJvX2RtYV9mcmVlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGkyb19kbWEgKmFkZHIpCi17Ci0JaWYgKGFkZHItPnZpcnQpIHsKLQkJaWYgKGFkZHItPnBoeXMpCi0JCQlkbWFfZnJlZV9jb2hlcmVudChkZXYsIGFkZHItPmxlbiwgYWRkci0+dmlydCwKLQkJCQkJICBhZGRyLT5waHlzKTsKLQkJZWxzZQotCQkJa2ZyZWUoYWRkci0+dmlydCk7Ci0JCWFkZHItPnZpcnQgPSBOVUxMOwotCX0KLX07Ci0KLS8qKgotICoJaTJvX2RtYV9yZWFsbG9jIC0gUmVhbGxvYyBETUEgbWVtb3J5Ci0gKglAZGV2OiBzdHJ1Y3QgZGV2aWNlIHBvaW50ZXIgdG8gdGhlIFBDSSBkZXZpY2Ugb2YgdGhlIEkyTyBjb250cm9sbGVyCi0gKglAYWRkcjogcG9pbnRlciB0byBhIGkyb19kbWEgc3RydWN0IERNQSBidWZmZXIKLSAqCUBsZW46IG5ldyBsZW5ndGggb2YgbWVtb3J5Ci0gKglAZ2ZwX21hc2s6IEdGUCBtYXNrCi0gKgotICoJSWYgdGhlcmUgd2FzIHNvbWV0aGluZyBhbGxvY2F0ZWQgaW4gdGhlIGFkZHIsIGZyZWUgaXQgZmlyc3QuIElmIGxlbiA+IDAKLSAqCXRoYW4gdHJ5IHRvIGFsbG9jYXRlIGl0IGFuZCB3cml0ZSB0aGUgYWRkcmVzc2VzIGJhY2sgdG8gdGhlIGFkZHIKLSAqCXN0cnVjdHVyZS4gSWYgbGVuID09IDAgc2V0IHRoZSB2aXJ0dWFsIGFkZHJlc3MgdG8gTlVMTC4KLSAqCi0gKglSZXR1cm5zIHRoZSAwIG9uIHN1Y2Nlc3Mgb3IgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlLgotICovCi1zdGF0aWMgaW5saW5lIGludCBpMm9fZG1hX3JlYWxsb2Moc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgaTJvX2RtYSAqYWRkciwKLQkJCQkgIHNpemVfdCBsZW4sIGdmcF90IGdmcF9tYXNrKQotewotCWkyb19kbWFfZnJlZShkZXYsIGFkZHIpOwotCi0JaWYgKGxlbikKLQkJcmV0dXJuIGkyb19kbWFfYWxsb2MoZGV2LCBhZGRyLCBsZW4sIGdmcF9tYXNrKTsKLQotCXJldHVybiAwOwotfTsKLQotLyoKLSAqCWkyb19wb29sX2FsbG9jIC0gQWxsb2NhdGUgYW4gc2xhYiBjYWNoZSBhbmQgbWVtcG9vbAotICoJQG1lbXBvb2w6IHBvaW50ZXIgdG8gc3RydWN0IGkyb19wb29sIHRvIHdyaXRlIGRhdGEgaW50by4KLSAqCUBuYW1lOiBuYW1lIHdoaWNoIGlzIHVzZWQgdG8gaWRlbnRpZnkgY2FjaGUKLSAqCUBzaXplOiBzaXplIG9mIGVhY2ggb2JqZWN0Ci0gKglAbWluX25yOiBtaW5pbXVtIG51bWJlciBvZiBvYmplY3RzCi0gKgotICoJRmlyc3QgYWxsb2NhdGVzIGEgc2xhYiBjYWNoZSB3aXRoIG5hbWUgYW5kIHNpemUuIFRoZW4gYWxsb2NhdGVzIGEKLSAqCW1lbXBvb2wgd2hpY2ggdXNlcyB0aGUgc2xhYiBjYWNoZSBmb3IgYWxsb2NhdGlvbiBhbmQgZnJlZWluZy4KLSAqCi0gKglSZXR1cm5zIDAgb24gc3VjY2VzcyBvciBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUuCi0gKi8KLXN0YXRpYyBpbmxpbmUgaW50IGkyb19wb29sX2FsbG9jKHN0cnVjdCBpMm9fcG9vbCAqcG9vbCwgY29uc3QgY2hhciAqbmFtZSwKLQkJCQkgc2l6ZV90IHNpemUsIGludCBtaW5fbnIpCi17Ci0JcG9vbC0+bmFtZSA9IGttYWxsb2Moc3RybGVuKG5hbWUpICsgMSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFwb29sLT5uYW1lKQotCQlnb3RvIGV4aXQ7Ci0Jc3RyY3B5KHBvb2wtPm5hbWUsIG5hbWUpOwotCi0JcG9vbC0+c2xhYiA9Ci0JICAgIGttZW1fY2FjaGVfY3JlYXRlKHBvb2wtPm5hbWUsIHNpemUsIDAsIFNMQUJfSFdDQUNIRV9BTElHTiwgTlVMTCk7Ci0JaWYgKCFwb29sLT5zbGFiKQotCQlnb3RvIGZyZWVfbmFtZTsKLQotCXBvb2wtPm1lbXBvb2wgPSBtZW1wb29sX2NyZWF0ZV9zbGFiX3Bvb2wobWluX25yLCBwb29sLT5zbGFiKTsKLQlpZiAoIXBvb2wtPm1lbXBvb2wpCi0JCWdvdG8gZnJlZV9zbGFiOwotCi0JcmV0dXJuIDA7Ci0KLSAgICAgIGZyZWVfc2xhYjoKLQlrbWVtX2NhY2hlX2Rlc3Ryb3kocG9vbC0+c2xhYik7Ci0KLSAgICAgIGZyZWVfbmFtZToKLQlrZnJlZShwb29sLT5uYW1lKTsKLQotICAgICAgZXhpdDoKLQlyZXR1cm4gLUVOT01FTTsKLX07Ci0KLS8qCi0gKglpMm9fcG9vbF9mcmVlIC0gRnJlZSBzbGFiIGNhY2hlIGFuZCBtZW1wb29sIGFnYWluCi0gKglAbWVtcG9vbDogcG9pbnRlciB0byBzdHJ1Y3QgaTJvX3Bvb2wgd2hpY2ggc2hvdWxkIGJlIGZyZWVkCi0gKgotICoJTm90ZSB0aGF0IHlvdSBoYXZlIHRvIHJldHVybiBhbGwgb2JqZWN0cyB0byB0aGUgbWVtcG9vbCBhZ2FpbiBiZWZvcmUKLSAqCWNhbGxpbmcgaTJvX3Bvb2xfZnJlZSgpLgotICovCi1zdGF0aWMgaW5saW5lIHZvaWQgaTJvX3Bvb2xfZnJlZShzdHJ1Y3QgaTJvX3Bvb2wgKnBvb2wpCi17Ci0JbWVtcG9vbF9kZXN0cm95KHBvb2wtPm1lbXBvb2wpOwotCWttZW1fY2FjaGVfZGVzdHJveShwb29sLT5zbGFiKTsKLQlrZnJlZShwb29sLT5uYW1lKTsKLX07Ci0KKwkJCQkgdTMyICoqIHNnX3B0cik7CitleHRlcm4gaW50IGkyb19kbWFfYWxsb2Moc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgaTJvX2RtYSAqYWRkciwgc2l6ZV90IGxlbik7CitleHRlcm4gdm9pZCBpMm9fZG1hX2ZyZWUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgaTJvX2RtYSAqYWRkcik7CitleHRlcm4gaW50IGkyb19kbWFfcmVhbGxvYyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBpMm9fZG1hICphZGRyLAorCQkJCQkJCQlzaXplX3QgbGVuKTsKK2V4dGVybiBpbnQgaTJvX3Bvb2xfYWxsb2Moc3RydWN0IGkyb19wb29sICpwb29sLCBjb25zdCBjaGFyICpuYW1lLAorCQkJCSBzaXplX3Qgc2l6ZSwgaW50IG1pbl9ucik7CitleHRlcm4gdm9pZCBpMm9fcG9vbF9mcmVlKHN0cnVjdCBpMm9fcG9vbCAqcG9vbCk7CiAvKiBJMk8gZHJpdmVyIChPU00pIGZ1bmN0aW9ucyAqLwogZXh0ZXJuIGludCBpMm9fZHJpdmVyX3JlZ2lzdGVyKHN0cnVjdCBpMm9fZHJpdmVyICopOwogZXh0ZXJuIHZvaWQgaTJvX2RyaXZlcl91bnJlZ2lzdGVyKHN0cnVjdCBpMm9fZHJpdmVyICopOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pY21wdjYuaCBiL2luY2x1ZGUvbGludXgvaWNtcHY2LmgKaW5kZXggMDMwNjc0NC4uYTkzYThkZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pY21wdjYuaAorKysgYi9pbmNsdWRlL2xpbnV4L2ljbXB2Ni5oCkBAIC00MCwxNiArNDAsMTggQEAKICAgICAgICAgICAgICAgICBzdHJ1Y3QgaWNtcHY2X25kX3JhIHsKIAkJCV9fdTgJCWhvcF9saW1pdDsKICNpZiBkZWZpbmVkKF9fTElUVExFX0VORElBTl9CSVRGSUVMRCkKLQkJCV9fdTgJCXJlc2VydmVkOjQsCisJCQlfX3U4CQlyZXNlcnZlZDozLAogCQkJCQlyb3V0ZXJfcHJlZjoyLAorCQkJCQlob21lX2FnZW50OjEsCiAJCQkJCW90aGVyOjEsCiAJCQkJCW1hbmFnZWQ6MTsKIAogI2VsaWYgZGVmaW5lZChfX0JJR19FTkRJQU5fQklURklFTEQpCiAJCQlfX3U4CQltYW5hZ2VkOjEsCiAJCQkJCW90aGVyOjEsCisJCQkJCWhvbWVfYWdlbnQ6MSwKIAkJCQkJcm91dGVyX3ByZWY6MiwKLQkJCQkJcmVzZXJ2ZWQ6NDsKKwkJCQkJcmVzZXJ2ZWQ6MzsKICNlbHNlCiAjZXJyb3IJIlBsZWFzZSBmaXggPGFzbS9ieXRlb3JkZXIuaD4iCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaWRlLmggYi9pbmNsdWRlL2xpbnV4L2lkZS5oCmluZGV4IGE5ZDgyZDYuLjg5ZTUzY2YgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaWRlLmgKKysrIGIvaW5jbHVkZS9saW51eC9pZGUuaApAQCAtNDgsMTIgKzQ4LDYgQEAKICNkZWZpbmUgRVJST1JfUkVTRVQJMwkvKiBSZXNldCBjb250cm9sbGVyIGV2ZXJ5IDR0aCByZXRyeSAqLwogI2RlZmluZSBFUlJPUl9SRUNBTAkxCS8qIFJlY2FsaWJyYXRlIGV2ZXJ5IDJuZCByZXRyeSAqLwogCi0vKgotICogc3RhdGUgZmxhZ3MKLSAqLwotCi0jZGVmaW5lIERNQV9QSU9fUkVUUlkJMQkvKiByZXRyeWluZyBpbiBQSU8gKi8KLQogI2RlZmluZSBIV0lGKGRyaXZlKQkJKChpZGVfaHdpZl90ICopKChkcml2ZSktPmh3aWYpKQogI2RlZmluZSBIV0dST1VQKGRyaXZlKQkJKChpZGVfaHdncm91cF90ICopKEhXSUYoZHJpdmUpLT5od2dyb3VwKSkKIApAQCAtMTYyLDYgKzE1Niw4IEBACiAgKi8KICNkZWZpbmUgUkVRX0RSSVZFX1JFU0VUCQkweDIwCiAjZGVmaW5lIFJFUV9ERVZTRVRfRVhFQwkJMHgyMQorI2RlZmluZSBSRVFfUEFSS19IRUFEUwkJMHgyMgorI2RlZmluZSBSRVFfVU5QQVJLX0hFQURTCTB4MjMKIAogLyoKICAqIENoZWNrIGZvciBhbiBpbnRlcnJ1cHQgYW5kIGFja25vd2xlZGdlIHRoZSBpbnRlcnJ1cHQgc3RhdHVzCkBAIC0yNjgsOCArMjY0LDYgQEAKICAqIHNldF9nZW9tZXRyeQk6IHJlc3BlY2lmeSBkcml2ZSBnZW9tZXRyeQogICogcmVjYWxpYnJhdGUJOiBzZWVrIHRvIGN5bCAwCiAgKiBzZXRfbXVsdG1vZGUJOiBzZXQgbXVsdG1vZGUgY291bnQKLSAqIHNldF90dW5lCTogdHVuZSBpbnRlcmZhY2UgZm9yIGRyaXZlCi0gKiBzZXJ2aWNlZAk6IHNlcnZpY2UgY29tbWFuZAogICogcmVzZXJ2ZWQJOiB1bnVzZWQKICAqLwogdHlwZWRlZiB1bmlvbiB7CkBAIC0yNzgsNDMgKzI3MiwxMSBAQAogCQl1bnNpZ25lZCBzZXRfZ2VvbWV0cnkJOiAxOwogCQl1bnNpZ25lZCByZWNhbGlicmF0ZQk6IDE7CiAJCXVuc2lnbmVkIHNldF9tdWx0bW9kZQk6IDE7Ci0JCXVuc2lnbmVkIHNldF90dW5lCTogMTsKLQkJdW5zaWduZWQgc2VydmljZWQJOiAxOwotCQl1bnNpZ25lZCByZXNlcnZlZAk6IDM7CisJCXVuc2lnbmVkIHJlc2VydmVkCTogNTsKIAl9IGI7CiB9IHNwZWNpYWxfdDsKIAogLyoKLSAqIEFUQS1JREUgU2VsZWN0IFJlZ2lzdGVyLCBha2EgRGV2aWNlLUhlYWQKLSAqCi0gKiBoZWFkCQk6IGFsd2F5cyB6ZXJvcyBoZXJlCi0gKiB1bml0CQk6IGRyaXZlIHNlbGVjdCBudW1iZXI6IDAvMQotICogYml0NQkJOiBhbHdheXMgMQotICogbGJhCQk6IHVzaW5nIExCQSBpbnN0ZWFkIG9mIENIUwotICogYml0NwkJOiBhbHdheXMgMQotICovCi10eXBlZGVmIHVuaW9uIHsKLQl1bnNpZ25lZCBhbGwJCQk6IDg7Ci0Jc3RydWN0IHsKLSNpZiBkZWZpbmVkKF9fTElUVExFX0VORElBTl9CSVRGSUVMRCkKLQkJdW5zaWduZWQgaGVhZAkJOiA0OwotCQl1bnNpZ25lZCB1bml0CQk6IDE7Ci0JCXVuc2lnbmVkIGJpdDUJCTogMTsKLQkJdW5zaWduZWQgbGJhCQk6IDE7Ci0JCXVuc2lnbmVkIGJpdDcJCTogMTsKLSNlbGlmIGRlZmluZWQoX19CSUdfRU5ESUFOX0JJVEZJRUxEKQotCQl1bnNpZ25lZCBiaXQ3CQk6IDE7Ci0JCXVuc2lnbmVkIGxiYQkJOiAxOwotCQl1bnNpZ25lZCBiaXQ1CQk6IDE7Ci0JCXVuc2lnbmVkIHVuaXQJCTogMTsKLQkJdW5zaWduZWQgaGVhZAkJOiA0OwotI2Vsc2UKLSNlcnJvciAiUGxlYXNlIGZpeCA8YXNtL2J5dGVvcmRlci5oPiIKLSNlbmRpZgotCX0gYjsKLX0gc2VsZWN0X3QsIGF0YV9zZWxlY3RfdDsKLQotLyoKICAqIFN0YXR1cyByZXR1cm5lZCBmcm9tIHZhcmlvdXMgaWRlXyBmdW5jdGlvbnMKICAqLwogdHlwZWRlZiBlbnVtIHsKQEAgLTMyMiw2OTkgKzI4NCw2IEBACiAJaWRlX3N0YXJ0ZWQsCS8qIGEgZHJpdmUgb3BlcmF0aW9uIHdhcyBzdGFydGVkLCBoYW5kbGVyIHdhcyBzZXQgKi8KIH0gaWRlX3N0YXJ0c3RvcF90OwogCi1zdHJ1Y3QgaWRlX2RldnNldDsKLXN0cnVjdCBpZGVfZHJpdmVyX3M7Ci0KLSNpZmRlZiBDT05GSUdfQkxLX0RFVl9JREVBQ1BJCi1zdHJ1Y3QgaWRlX2FjcGlfZHJpdmVfbGluazsKLXN0cnVjdCBpZGVfYWNwaV9od2lmX2xpbms7Ci0jZW5kaWYKLQotLyogQVRBUEkgZGV2aWNlIGZsYWdzICovCi1lbnVtIHsKLQlJREVfQUZMQUdfRFJRX0lOVEVSUlVQVAkJPSAoMSA8PCAwKSwKLQlJREVfQUZMQUdfTUVESUFfQ0hBTkdFRAkJPSAoMSA8PCAxKSwKLQkvKiBEcml2ZSBjYW5ub3QgbG9jayB0aGUgZG9vci4gKi8KLQlJREVfQUZMQUdfTk9fRE9PUkxPQ0sJCT0gKDEgPDwgMiksCi0KLQkvKiBpZGUtY2QgKi8KLQkvKiBEcml2ZSBjYW5ub3QgZWplY3QgdGhlIGRpc2MuICovCi0JSURFX0FGTEFHX05PX0VKRUNUCQk9ICgxIDw8IDMpLAotCS8qIERyaXZlIGlzIGEgcHJlIEFUQVBJIDEuMiBkcml2ZS4gKi8KLQlJREVfQUZMQUdfUFJFX0FUQVBJMTIJCT0gKDEgPDwgNCksCi0JLyogVE9DIGFkZHJlc3NlcyBhcmUgaW4gQkNELiAqLwotCUlERV9BRkxBR19UT0NBRERSX0FTX0JDRAk9ICgxIDw8IDUpLAotCS8qIFRPQyB0cmFjayBudW1iZXJzIGFyZSBpbiBCQ0QuICovCi0JSURFX0FGTEFHX1RPQ1RSQUNLU19BU19CQ0QJPSAoMSA8PCA2KSwKLQkvKgotCSAqIERyaXZlIGRvZXMgbm90IHByb3ZpZGUgZGF0YSBpbiBtdWx0aXBsZXMgb2YgU0VDVE9SX1NJWkUKLQkgKiB3aGVuIG1vcmUgdGhhbiBvbmUgaW50ZXJydXB0IGlzIG5lZWRlZC4KLQkgKi8KLQlJREVfQUZMQUdfTElNSVRfTkZSQU1FUwkJPSAoMSA8PCA3KSwKLQkvKiBTZWVraW5nIGluIHByb2dyZXNzLiAqLwotCUlERV9BRkxBR19TRUVLSU5HCQk9ICgxIDw8IDgpLAotCS8qIFNhdmVkIFRPQyBpbmZvcm1hdGlvbiBpcyBjdXJyZW50LiAqLwotCUlERV9BRkxBR19UT0NfVkFMSUQJCT0gKDEgPDwgOSksCi0JLyogV2UgdGhpbmsgdGhhdCB0aGUgZHJpdmUgZG9vciBpcyBsb2NrZWQuICovCi0JSURFX0FGTEFHX0RPT1JfTE9DS0VECQk9ICgxIDw8IDEwKSwKLQkvKiBTRVRfQ0RfU1BFRUQgY29tbWFuZCBpcyB1bnN1cHBvcnRlZC4gKi8KLQlJREVfQUZMQUdfTk9fU1BFRURfU0VMRUNUCT0gKDEgPDwgMTEpLAotCUlERV9BRkxBR19WRVJUT1NfMzAwX1NTRAk9ICgxIDw8IDEyKSwKLQlJREVfQUZMQUdfVkVSVE9TXzYwMF9FU0QJPSAoMSA8PCAxMyksCi0JSURFX0FGTEFHX1NBTllPXzNDRAkJPSAoMSA8PCAxNCksCi0JSURFX0FGTEFHX0ZVTExfQ0FQU19QQUdFCT0gKDEgPDwgMTUpLAotCUlERV9BRkxBR19QTEFZX0FVRElPX09LCQk9ICgxIDw8IDE2KSwKLQlJREVfQUZMQUdfTEVfU1BFRURfRklFTERTCT0gKDEgPDwgMTcpLAotCi0JLyogaWRlLWZsb3BweSAqLwotCS8qIEZvcm1hdCBpbiBwcm9ncmVzcyAqLwotCUlERV9BRkxBR19GT1JNQVRfSU5fUFJPR1JFU1MJPSAoMSA8PCAxOCksCi0JLyogQXZvaWQgY29tbWFuZHMgbm90IHN1cHBvcnRlZCBpbiBDbGlrIGRyaXZlICovCi0JSURFX0FGTEFHX0NMSUtfRFJJVkUJCT0gKDEgPDwgMTkpLAotCS8qIFJlcXVpcmVzIEJIIGFsZ29yaXRobSBmb3IgcGFja2V0cyAqLwotCUlERV9BRkxBR19aSVBfRFJJVkUJCT0gKDEgPDwgMjApLAotCS8qIFdyaXRlIHByb3RlY3QgKi8KLQlJREVfQUZMQUdfV1AJCQk9ICgxIDw8IDIxKSwKLQkvKiBTdXBwb3J0cyBmb3JtYXQgcHJvZ3Jlc3MgcmVwb3J0ICovCi0JSURFX0FGTEFHX1NSRlAJCQk9ICgxIDw8IDIyKSwKLQotCS8qIGlkZS10YXBlICovCi0JSURFX0FGTEFHX0lHTk9SRV9EU0MJCT0gKDEgPDwgMjMpLAotCS8qIDAgV2hlbiB0aGUgdGFwZSBwb3NpdGlvbiBpcyB1bmtub3duICovCi0JSURFX0FGTEFHX0FERFJFU1NfVkFMSUQJCT0gKDEgPDwJMjQpLAotCS8qIERldmljZSBhbHJlYWR5IG9wZW5lZCAqLwotCUlERV9BRkxBR19CVVNZCQkJPSAoMSA8PCAyNSksCi0JLyogQXR0ZW1wdCB0byBhdXRvLWRldGVjdCB0aGUgY3VycmVudCB1c2VyIGJsb2NrIHNpemUgKi8KLQlJREVfQUZMQUdfREVURUNUX0JTCQk9ICgxIDw8IDI2KSwKLQkvKiBDdXJyZW50bHkgb24gYSBmaWxlbWFyayAqLwotCUlERV9BRkxBR19GSUxFTUFSSwkJPSAoMSA8PCAyNyksCi0JLyogMCA9IG5vIHRhcGUgaXMgbG9hZGVkLCBzbyB3ZSBkb24ndCByZXdpbmQgYWZ0ZXIgZWplY3RpbmcgKi8KLQlJREVfQUZMQUdfTUVESVVNX1BSRVNFTlQJPSAoMSA8PCAyOCksCi0KLQlJREVfQUZMQUdfTk9fQVVUT0NMT1NFCQk9ICgxIDw8IDI5KSwKLX07Ci0KLXN0cnVjdCBpZGVfZHJpdmVfcyB7Ci0JY2hhcgkJbmFtZVs0XTsJLyogZHJpdmUgbmFtZSwgc3VjaCBhcyAiaGRhIiAqLwotICAgICAgICBjaGFyICAgICAgICAgICAgZHJpdmVyX3JlcVsxMF07CS8qIHJlcXVlc3RzIHNwZWNpZmljIGRyaXZlciAqLwotCi0Jc3RydWN0IHJlcXVlc3RfcXVldWUJKnF1ZXVlOwkvKiByZXF1ZXN0IHF1ZXVlICovCi0KLQlzdHJ1Y3QgcmVxdWVzdAkJKnJxOwkvKiBjdXJyZW50IHJlcXVlc3QgKi8KLQlzdHJ1Y3QgaWRlX2RyaXZlX3MgCSpuZXh0OwkvKiBjaXJjdWxhciBsaXN0IG9mIGh3Z3JvdXAgZHJpdmVzICovCi0Jdm9pZAkJKmRyaXZlcl9kYXRhOwkvKiBleHRyYSBkcml2ZXIgZGF0YSAqLwotCXUxNgkJCSppZDsJLyogaWRlbnRpZmljYXRpb24gaW5mbyAqLwotI2lmZGVmIENPTkZJR19JREVfUFJPQ19GUwotCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcHJvYzsJLyogL3Byb2MvaWRlLyBkaXJlY3RvcnkgZW50cnkgKi8KLQljb25zdCBzdHJ1Y3QgaWRlX3Byb2NfZGV2c2V0ICpzZXR0aW5nczsgLyogL3Byb2MvaWRlLyBkcml2ZSBzZXR0aW5ncyAqLwotI2VuZGlmCi0Jc3RydWN0IGh3aWZfcwkJKmh3aWY7CS8qIGFjdHVhbGx5IChpZGVfaHdpZl90ICopICovCi0KLQl1bnNpZ25lZCBsb25nIHNsZWVwOwkJLyogc2xlZXAgdW50aWwgdGhpcyB0aW1lICovCi0JdW5zaWduZWQgbG9uZyBzZXJ2aWNlX3N0YXJ0OwkvKiB0aW1lIHdlIHN0YXJ0ZWQgbGFzdCByZXF1ZXN0ICovCi0JdW5zaWduZWQgbG9uZyBzZXJ2aWNlX3RpbWU7CS8qIHNlcnZpY2UgdGltZSBvZiBsYXN0IHJlcXVlc3QgKi8KLQl1bnNpZ25lZCBsb25nIHRpbWVvdXQ7CQkvKiBtYXggdGltZSB0byB3YWl0IGZvciBpcnEgKi8KLQotCXNwZWNpYWxfdAlzcGVjaWFsOwkvKiBzcGVjaWFsIGFjdGlvbiBmbGFncyAqLwotCXNlbGVjdF90CXNlbGVjdDsJCS8qIGJhc2ljIGRyaXZlL2hlYWQgc2VsZWN0IHJlZyB2YWx1ZSAqLwotCi0JdTgJcmV0cnlfcGlvOwkJLyogcmV0cnlpbmcgZG1hIGNhcGFibGUgaG9zdCBpbiBwaW8gKi8KLQl1OAlzdGF0ZTsJCQkvKiByZXRyeSBzdGF0ZSAqLwotCXU4CXdhaXRpbmdfZm9yX2RtYTsJLyogZG1hIGN1cnJlbnRseSBpbiBwcm9ncmVzcyAqLwotCi0JdW5zaWduZWQga2VlcF9zZXR0aW5ncwk6IDE7CS8qIHJlc3RvcmUgc2V0dGluZ3MgYWZ0ZXIgZHJpdmUgcmVzZXQgKi8KLQl1bnNpZ25lZCB1c2luZ19kbWEJOiAxOwkvKiBkaXNrIGlzIHVzaW5nIGRtYSBmb3IgcmVhZC93cml0ZSAqLwotCXVuc2lnbmVkIHVubWFzawkJOiAxOwkvKiBva2F5IHRvIHVubWFzayBvdGhlciBpcnFzICovCi0JdW5zaWduZWQgbm9mbHVzaAk6IDE7CS8qIGRvbid0IGF0dGVtcHQgZmx1c2hlcyAqLwotCXVuc2lnbmVkIGRzY19vdmVybGFwCTogMTsJLyogRFNDIG92ZXJsYXAgKi8KLQl1bnNpZ25lZCBuaWNlMQkJOiAxOwkvKiBnaXZlIHBvdGVudGlhbCBleGNlc3MgYmFuZHdpZHRoICovCi0JdW5zaWduZWQgcHJlc2VudAk6IDE7CS8qIGRyaXZlIGlzIHBoeXNpY2FsbHkgcHJlc2VudCAqLwotCXVuc2lnbmVkIGRlYWQJCTogMTsJLyogZGV2aWNlIGVqZWN0ZWQgaGludCAqLwotCXVuc2lnbmVkIGlkX3JlYWQJOiAxOwkvKiAxPWlkIHJlYWQgZnJvbSBkaXNrIDAgPSBzeW50aGV0aWMgKi8KLQl1bnNpZ25lZCBub3Byb2JlIAk6IDE7CS8qIGZyb206ICBoZHg9bm9wcm9iZSAqLwotCXVuc2lnbmVkIHJlbW92YWJsZQk6IDE7CS8qIDEgaWYgbmVlZCB0byBkbyBjaGVja19tZWRpYV9jaGFuZ2UgKi8KLQl1bnNpZ25lZCBhdHRhY2gJCTogMTsJLyogbmVlZGVkIGZvciByZW1vdmFibGUgZGV2aWNlcyAqLwotCXVuc2lnbmVkIGZvcmNlZF9nZW9tCTogMTsJLyogMSBpZiBoZHg9YyxoLHMgd2FzIGdpdmVuIGF0IGJvb3QgKi8KLQl1bnNpZ25lZCBub191bm1hc2sJOiAxOwkvKiBkaXNhbGxvdyBzZXR0aW5nIHVubWFzayBiaXQgKi8KLQl1bnNpZ25lZCBub19pb18zMmJpdAk6IDE7CS8qIGRpc2FsbG93IGVuYWJsaW5nIDMyYml0IEkvTyAqLwotCXVuc2lnbmVkIGRvb3Jsb2NraW5nCTogMTsJLyogZm9yIHJlbW92YWJsZSBvbmx5OiBkb29yIGxvY2svdW5sb2NrIHdvcmtzICovCi0JdW5zaWduZWQgbm9kbWEJCTogMTsJLyogZGlzYWxsb3cgRE1BICovCi0JdW5zaWduZWQgYmxvY2tlZCAgICAgICAgOiAxOwkvKiAxPXBvd2VybWFuYWdtZW50IHRvbGQgdXMgbm90IHRvIGRvIGFueXRoaW5nLCBzbyBzbGVlcCBuaWNlbHkgKi8KLQl1bnNpZ25lZCBzY3NpCQk6IDE7CS8qIDA9ZGVmYXVsdCwgMT1pZGUtc2NzaSBlbXVsYXRpb24gKi8KLQl1bnNpZ25lZCBzbGVlcGluZwk6IDE7CS8qIDE9c2xlZXBpbmcgJiBzbGVlcCBmaWVsZCB2YWxpZCAqLwotCXVuc2lnbmVkIHBvc3RfcmVzZXQJOiAxOwotCXVuc2lnbmVkIHVkbWEzM193YXJuZWQJOiAxOwotCXVuc2lnbmVkIGFkZHJlc3NpbmcJOiAyOwkvKiAwPTI4LWJpdCwgMT00OC1iaXQsIDI9NDgtYml0IGRvaW5nIDI4LWJpdCAqLwotCXVuc2lnbmVkIHdjYWNoZQkJOiAxOwkvKiBzdGF0dXMgb2Ygd3JpdGUgY2FjaGUgKi8KLQl1bnNpZ25lZCBub3dlcnIJCTogMTsJLyogdXNlZCBmb3IgaWdub3JpbmcgQVRBX0RGICovCi0KLSAgICAgICAgdTgJcXVpcmtfbGlzdDsJLyogY29uc2lkZXJlZCBxdWlya3ksIHNldCBmb3IgYSBzcGVjaWZpYyBob3N0ICovCi0gICAgICAgIHU4CWluaXRfc3BlZWQ7CS8qIHRyYW5zZmVyIHJhdGUgc2V0IGF0IGJvb3QgKi8KLSAgICAgICAgdTgJY3VycmVudF9zcGVlZDsJLyogY3VycmVudCB0cmFuc2ZlciByYXRlIHNldCAqLwotCXU4CWRlc2lyZWRfc3BlZWQ7CS8qIGRlc2lyZWQgdHJhbnNmZXIgcmF0ZSBzZXQgKi8KLSAgICAgICAgdTgJZG47CQkvKiBub3cgd2lkZSBzcHJlYWQgdXNlICovCi0JdTgJYWNvdXN0aWM7CS8qIGFjb3VzdGljIG1hbmFnZW1lbnQgKi8KLQl1OAltZWRpYTsJCS8qIGRpc2ssIGNkcm9tLCB0YXBlLCBmbG9wcHksIC4uLiAqLwotCXU4CXJlYWR5X3N0YXQ7CS8qIG1pbiBzdGF0dXMgdmFsdWUgZm9yIGRyaXZlIHJlYWR5ICovCi0JdTgJbXVsdF9jb3VudDsJLyogY3VycmVudCBtdWx0aXBsZSBzZWN0b3Igc2V0dGluZyAqLwotCXU4CW11bHRfcmVxOwkvKiByZXF1ZXN0ZWQgbXVsdGlwbGUgc2VjdG9yIHNldHRpbmcgKi8KLQl1OAl0dW5lX3JlcTsJLyogcmVxdWVzdGVkIGRyaXZlIHR1bmluZyBzZXR0aW5nICovCi0JdTgJaW9fMzJiaXQ7CS8qIDA9MTYtYml0LCAxPTMyLWJpdCwgMi8zPTMyYml0K3N5bmMgKi8KLQl1OAliYWRfd3N0YXQ7CS8qIHVzZWQgZm9yIGlnbm9yaW5nIEFUQV9ERiAqLwotCXU4CWhlYWQ7CQkvKiAicmVhbCIgbnVtYmVyIG9mIGhlYWRzICovCi0JdTgJc2VjdDsJCS8qICJyZWFsIiBzZWN0b3JzIHBlciB0cmFjayAqLwotCXU4CWJpb3NfaGVhZDsJLyogQklPUy9mZGlzay9MSUxPIG51bWJlciBvZiBoZWFkcyAqLwotCXU4CWJpb3Nfc2VjdDsJLyogQklPUy9mZGlzay9MSUxPIHNlY3RvcnMgcGVyIHRyYWNrICovCi0KLQl1bnNpZ25lZCBpbnQJYmlvc19jeWw7CS8qIEJJT1MvZmRpc2svTElMTyBudW1iZXIgb2YgY3lscyAqLwotCXVuc2lnbmVkIGludAljeWw7CQkvKiAicmVhbCIgbnVtYmVyIG9mIGN5bHMgKi8KLQl1bnNpZ25lZCBpbnQJZHJpdmVfZGF0YTsJLyogdXNlZCBieSBzZXRfcGlvX21vZGUvc2VsZWN0cHJvYyAqLwotCXVuc2lnbmVkIGludAlmYWlsdXJlczsJLyogY3VycmVudCBmYWlsdXJlIGNvdW50ICovCi0JdW5zaWduZWQgaW50CW1heF9mYWlsdXJlczsJLyogbWF4aW11bSBhbGxvd2VkIGZhaWx1cmUgY291bnQgKi8KLQl1NjQJCXByb2JlZF9jYXBhY2l0eTsvKiBpbml0aWFsIHJlcG9ydGVkIG1lZGlhIGNhcGFjaXR5IChpZGUtY2Qgb25seSBjdXJyZW50bHkpICovCi0KLQl1NjQJCWNhcGFjaXR5NjQ7CS8qIHRvdGFsIG51bWJlciBvZiBzZWN0b3JzICovCi0KLQlpbnQJCWx1bjsJCS8qIGxvZ2ljYWwgdW5pdCAqLwotCWludAkJY3JjX2NvdW50OwkvKiBjcmMgY291bnRlciB0byByZWR1Y2UgZHJpdmUgc3BlZWQgKi8KLSNpZmRlZiBDT05GSUdfQkxLX0RFVl9JREVBQ1BJCi0Jc3RydWN0IGlkZV9hY3BpX2RyaXZlX2xpbmsgKmFjcGlkYXRhOwotI2VuZGlmCi0Jc3RydWN0IGxpc3RfaGVhZCBsaXN0OwotCXN0cnVjdCBkZXZpY2UJZ2VuZGV2OwotCXN0cnVjdCBjb21wbGV0aW9uIGdlbmRldl9yZWxfY29tcDsJLyogdG8gZGVhbCB3aXRoIGRldmljZSByZWxlYXNlKCkgKi8KLQotCS8qIGNhbGxiYWNrIGZvciBwYWNrZXQgY29tbWFuZHMgKi8KLQl2b2lkICgqcGNfY2FsbGJhY2spKHN0cnVjdCBpZGVfZHJpdmVfcyAqKTsKLQotCXVuc2lnbmVkIGxvbmcgYXRhcGlfZmxhZ3M7Ci19OwotCi10eXBlZGVmIHN0cnVjdCBpZGVfZHJpdmVfcyBpZGVfZHJpdmVfdDsKLQotI2RlZmluZSB0b19pZGVfZGV2aWNlKGRldiljb250YWluZXJfb2YoZGV2LCBpZGVfZHJpdmVfdCwgZ2VuZGV2KQotCi1zdHJ1Y3QgaWRlX3Rhc2tfczsKLXN0cnVjdCBpZGVfcG9ydF9pbmZvOwotCi1zdHJ1Y3QgaWRlX3RwX29wcyB7Ci0Jdm9pZAkoKmV4ZWNfY29tbWFuZCkoc3RydWN0IGh3aWZfcyAqLCB1OCk7Ci0JdTgJKCpyZWFkX3N0YXR1cykoc3RydWN0IGh3aWZfcyAqKTsKLQl1OAkoKnJlYWRfYWx0c3RhdHVzKShzdHJ1Y3QgaHdpZl9zICopOwotCXU4CSgqcmVhZF9zZmZfZG1hX3N0YXR1cykoc3RydWN0IGh3aWZfcyAqKTsKLQotCXZvaWQJKCpzZXRfaXJxKShzdHJ1Y3QgaHdpZl9zICosIGludCk7Ci0KLQl2b2lkCSgqdGZfbG9hZCkoaWRlX2RyaXZlX3QgKiwgc3RydWN0IGlkZV90YXNrX3MgKik7Ci0Jdm9pZAkoKnRmX3JlYWQpKGlkZV9kcml2ZV90ICosIHN0cnVjdCBpZGVfdGFza19zICopOwotCi0Jdm9pZAkoKmlucHV0X2RhdGEpKGlkZV9kcml2ZV90ICosIHN0cnVjdCByZXF1ZXN0ICosIHZvaWQgKiwKLQkJCSAgICAgIHVuc2lnbmVkIGludCk7Ci0Jdm9pZAkoKm91dHB1dF9kYXRhKShpZGVfZHJpdmVfdCAqLCBzdHJ1Y3QgcmVxdWVzdCAqLCB2b2lkICosCi0JCQkgICAgICAgdW5zaWduZWQgaW50KTsKLX07Ci0KLWV4dGVybiBjb25zdCBzdHJ1Y3QgaWRlX3RwX29wcyBkZWZhdWx0X3RwX29wczsKLQotLyoqCi0gKiBzdHJ1Y3QgaWRlX3BvcnRfb3BzIC0gSURFIHBvcnQgb3BlcmF0aW9ucwotICoKLSAqIEBpbml0X2RldjoJCWhvc3Qgc3BlY2lmaWMgaW5pdGlhbGl6YXRpb24gb2YgYSBkZXZpY2UKLSAqIEBzZXRfcGlvX21vZGU6CXJvdXRpbmUgdG8gcHJvZ3JhbSBob3N0IGZvciBQSU8gbW9kZQotICogQHNldF9kbWFfbW9kZToJcm91dGluZSB0byBwcm9ncmFtIGhvc3QgZm9yIERNQSBtb2RlCi0gKiBAc2VsZWN0cHJvYzoJCXR3ZWFrcyBoYXJkd2FyZSB0byBzZWxlY3QgZHJpdmUKLSAqIEByZXNldF9wb2xsOgkJY2hpcHNldCBwb2xsaW5nIGJhc2VkIG9uIGhiYSBzcGVjaWZpY3MKLSAqIEBwcmVfcmVzZXQ6CQljaGlwc2V0IHNwZWNpZmljIGNoYW5nZXMgdG8gZGVmYXVsdCBmb3IgZGV2aWNlLWhiYSByZXNldHMKLSAqIEByZXNldHByb2M6CQlyb3V0aW5lIHRvIHJlc2V0IGNvbnRyb2xsZXIgYWZ0ZXIgYSBkaXNrIHJlc2V0Ci0gKiBAbWFza3Byb2M6CQlzcGVjaWFsIGhvc3QgbWFza2luZyBmb3IgZHJpdmUgc2VsZWN0aW9uCi0gKiBAcXVpcmtwcm9jOgkJY2hlY2sgaG9zdCdzIGRyaXZlIHF1aXJrIGxpc3QKLSAqCi0gKiBAbWRtYV9maWx0ZXI6CWZpbHRlciBNRE1BIG1vZGVzCi0gKiBAdWRtYV9maWx0ZXI6CWZpbHRlciBVRE1BIG1vZGVzCi0gKgotICogQGNhYmxlX2RldGVjdDoJZGV0ZWN0IGNhYmxlIHR5cGUKLSAqLwotc3RydWN0IGlkZV9wb3J0X29wcyB7Ci0Jdm9pZAkoKmluaXRfZGV2KShpZGVfZHJpdmVfdCAqKTsKLQl2b2lkCSgqc2V0X3Bpb19tb2RlKShpZGVfZHJpdmVfdCAqLCBjb25zdCB1OCk7Ci0Jdm9pZAkoKnNldF9kbWFfbW9kZSkoaWRlX2RyaXZlX3QgKiwgY29uc3QgdTgpOwotCXZvaWQJKCpzZWxlY3Rwcm9jKShpZGVfZHJpdmVfdCAqKTsKLQlpbnQJKCpyZXNldF9wb2xsKShpZGVfZHJpdmVfdCAqKTsKLQl2b2lkCSgqcHJlX3Jlc2V0KShpZGVfZHJpdmVfdCAqKTsKLQl2b2lkCSgqcmVzZXRwcm9jKShpZGVfZHJpdmVfdCAqKTsKLQl2b2lkCSgqbWFza3Byb2MpKGlkZV9kcml2ZV90ICosIGludCk7Ci0Jdm9pZAkoKnF1aXJrcHJvYykoaWRlX2RyaXZlX3QgKik7Ci0KLQl1OAkoKm1kbWFfZmlsdGVyKShpZGVfZHJpdmVfdCAqKTsKLQl1OAkoKnVkbWFfZmlsdGVyKShpZGVfZHJpdmVfdCAqKTsKLQotCXU4CSgqY2FibGVfZGV0ZWN0KShzdHJ1Y3QgaHdpZl9zICopOwotfTsKLQotc3RydWN0IGlkZV9kbWFfb3BzIHsKLQl2b2lkCSgqZG1hX2hvc3Rfc2V0KShzdHJ1Y3QgaWRlX2RyaXZlX3MgKiwgaW50KTsKLQlpbnQJKCpkbWFfc2V0dXApKHN0cnVjdCBpZGVfZHJpdmVfcyAqKTsKLQl2b2lkCSgqZG1hX2V4ZWNfY21kKShzdHJ1Y3QgaWRlX2RyaXZlX3MgKiwgdTgpOwotCXZvaWQJKCpkbWFfc3RhcnQpKHN0cnVjdCBpZGVfZHJpdmVfcyAqKTsKLQlpbnQJKCpkbWFfZW5kKShzdHJ1Y3QgaWRlX2RyaXZlX3MgKik7Ci0JaW50CSgqZG1hX3Rlc3RfaXJxKShzdHJ1Y3QgaWRlX2RyaXZlX3MgKik7Ci0Jdm9pZAkoKmRtYV9sb3N0X2lycSkoc3RydWN0IGlkZV9kcml2ZV9zICopOwotCXZvaWQJKCpkbWFfdGltZW91dCkoc3RydWN0IGlkZV9kcml2ZV9zICopOwotfTsKLQotc3RydWN0IGlkZV9ob3N0OwotCi10eXBlZGVmIHN0cnVjdCBod2lmX3MgewotCXN0cnVjdCBod2lmX3MgKm5leHQ7CQkvKiBmb3IgbGlua2VkLWxpc3QgaW4gaWRlX2h3Z3JvdXBfdCAqLwotCXN0cnVjdCBod2lmX3MgKm1hdGU7CQkvKiBvdGhlciBod2lmIGZyb20gc2FtZSBQQ0kgY2hpcCAqLwotCXN0cnVjdCBod2dyb3VwX3MgKmh3Z3JvdXA7CS8qIGFjdHVhbGx5IChpZGVfaHdncm91cF90ICopICovCi0Jc3RydWN0IHByb2NfZGlyX2VudHJ5ICpwcm9jOwkvKiAvcHJvYy9pZGUvIGRpcmVjdG9yeSBlbnRyeSAqLwotCi0Jc3RydWN0IGlkZV9ob3N0ICpob3N0OwotCi0JY2hhciBuYW1lWzZdOwkJCS8qIG5hbWUgb2YgaW50ZXJmYWNlLCBlZy4gImlkZTAiICovCi0KLQlzdHJ1Y3QgaWRlX2lvX3BvcnRzCWlvX3BvcnRzOwotCi0JdW5zaWduZWQgbG9uZwlzYXRhX3NjcltTQVRBX05SX1BPUlRTXTsKLQotCWlkZV9kcml2ZV90CWRyaXZlc1tNQVhfRFJJVkVTXTsJLyogZHJpdmUgaW5mbyAqLwotCi0JdTggbWFqb3I7CS8qIG91ciBtYWpvciBudW1iZXIgKi8KLQl1OCBpbmRleDsJLyogMCBmb3IgaWRlMDsgMSBmb3IgaWRlMTsgLi4uICovCi0JdTggY2hhbm5lbDsJLyogZm9yIGR1YWwtcG9ydCBjaGlwczogMD1wcmltYXJ5LCAxPXNlY29uZGFyeSAqLwotCi0JdTMyIGhvc3RfZmxhZ3M7Ci0KLQl1OCBwaW9fbWFzazsKLQotCXU4IHVsdHJhX21hc2s7Ci0JdTggbXdkbWFfbWFzazsKLQl1OCBzd2RtYV9tYXNrOwotCi0JdTggY2JsOwkJLyogY2FibGUgdHlwZSAqLwotCi0JaHdpZl9jaGlwc2V0X3QgY2hpcHNldDsJLyogc3ViLW1vZHVsZSBmb3IgdHVuaW5nLi4gKi8KLQotCXN0cnVjdCBkZXZpY2UgKmRldjsKLQotCWlkZV9hY2tfaW50cl90ICphY2tfaW50cjsKLQotCXZvaWQgKCpyd19kaXNrKShpZGVfZHJpdmVfdCAqLCBzdHJ1Y3QgcmVxdWVzdCAqKTsKLQotCWNvbnN0IHN0cnVjdCBpZGVfdHBfb3BzCQkqdHBfb3BzOwotCWNvbnN0IHN0cnVjdCBpZGVfcG9ydF9vcHMJKnBvcnRfb3BzOwotCWNvbnN0IHN0cnVjdCBpZGVfZG1hX29wcwkqZG1hX29wczsKLQotCXZvaWQgKCppZGVfZG1hX2NsZWFyX2lycSkoaWRlX2RyaXZlX3QgKmRyaXZlKTsKLQotCS8qIGRtYSBwaHlzaWNhbCByZWdpb24gZGVzY3JpcHRvciB0YWJsZSAoY3B1IHZpZXcpICovCi0JdW5zaWduZWQgaW50CSpkbWF0YWJsZV9jcHU7Ci0JLyogZG1hIHBoeXNpY2FsIHJlZ2lvbiBkZXNjcmlwdG9yIHRhYmxlIChkbWEgdmlldykgKi8KLQlkbWFfYWRkcl90CWRtYXRhYmxlX2RtYTsKLQkvKiBTY2F0dGVyLWdhdGhlciBsaXN0IHVzZWQgdG8gYnVpbGQgdGhlIGFib3ZlICovCi0Jc3RydWN0IHNjYXR0ZXJsaXN0ICpzZ190YWJsZTsKLQlpbnQgc2dfbWF4X25lbnRzOwkJLyogTWF4aW11bSBudW1iZXIgb2YgZW50cmllcyBpbiBpdCAqLwotCWludCBzZ19uZW50czsJCQkvKiBDdXJyZW50IG51bWJlciBvZiBlbnRyaWVzIGluIGl0ICovCi0JaW50IHNnX2RtYV9kaXJlY3Rpb247CQkvKiBkbWEgdHJhbnNmZXIgZGlyZWN0aW9uICovCi0KLQkvKiBkYXRhIHBoYXNlIG9mIHRoZSBhY3RpdmUgY29tbWFuZCAoY3VycmVudGx5IG9ubHkgdmFsaWQgZm9yIFBJTy9ETUEpICovCi0JaW50CQlkYXRhX3BoYXNlOwotCi0JdW5zaWduZWQgaW50IG5zZWN0OwotCXVuc2lnbmVkIGludCBubGVmdDsKLQlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKmN1cnNnOwotCXVuc2lnbmVkIGludCBjdXJzZ19vZnM7Ci0KLQlpbnQJCXJxc2l6ZTsJCS8qIG1heCBzZWN0b3JzIHBlciByZXF1ZXN0ICovCi0JaW50CQlpcnE7CQkvKiBvdXIgaXJxIG51bWJlciAqLwotCi0JdW5zaWduZWQgbG9uZwlkbWFfYmFzZTsJLyogYmFzZSBhZGRyIGZvciBkbWEgcG9ydHMgKi8KLQotCXVuc2lnbmVkIGxvbmcJY29uZmlnX2RhdGE7CS8qIGZvciB1c2UgYnkgY2hpcHNldC1zcGVjaWZpYyBjb2RlICovCi0JdW5zaWduZWQgbG9uZwlzZWxlY3RfZGF0YTsJLyogZm9yIHVzZSBieSBjaGlwc2V0LXNwZWNpZmljIGNvZGUgKi8KLQotCXVuc2lnbmVkIGxvbmcJZXh0cmFfYmFzZTsJLyogZXh0cmEgYWRkciBmb3IgZG1hIHBvcnRzICovCi0JdW5zaWduZWQJZXh0cmFfcG9ydHM7CS8qIG51bWJlciBvZiBleHRyYSBkbWEgcG9ydHMgKi8KLQotCXVuc2lnbmVkCXByZXNlbnQgICAgOiAxOwkvKiB0aGlzIGludGVyZmFjZSBleGlzdHMgKi8KLQl1bnNpZ25lZAlzZXJpYWxpemVkIDogMTsJLyogc2VyaWFsaXplZCBhbGwgY2hhbm5lbCBvcGVyYXRpb24gKi8KLQl1bnNpZ25lZAlzaGFyaW5nX2lycTogMTsJLyogMSA9IHNoYXJpbmcgaXJxIHdpdGggYW5vdGhlciBod2lmICovCi0JdW5zaWduZWQJc2dfbWFwcGVkICA6IDE7CS8qIHNnX3RhYmxlIGFuZCBzZ19uZW50cyBhcmUgcmVhZHkgKi8KLQotCXN0cnVjdCBkZXZpY2UJCWdlbmRldjsKLQlzdHJ1Y3QgZGV2aWNlCQkqcG9ydGRldjsKLQotCXN0cnVjdCBjb21wbGV0aW9uIGdlbmRldl9yZWxfY29tcDsgLyogVG8gZGVhbCB3aXRoIGRldmljZSByZWxlYXNlKCkgKi8KLQotCXZvaWQJCSpod2lmX2RhdGE7CS8qIGV4dHJhIGh3aWYgZGF0YSAqLwotCi0JdW5zaWduZWQgZG1hOwotCi0jaWZkZWYgQ09ORklHX0JMS19ERVZfSURFQUNQSQotCXN0cnVjdCBpZGVfYWNwaV9od2lmX2xpbmsgKmFjcGlkYXRhOwotI2VuZGlmCi19IF9fX19jYWNoZWxpbmVfaW50ZXJub2RlYWxpZ25lZF9pbl9zbXAgaWRlX2h3aWZfdDsKLQotc3RydWN0IGlkZV9ob3N0IHsKLQlpZGVfaHdpZl90CSpwb3J0c1tNQVhfSFdJRlNdOwotCXVuc2lnbmVkIGludAluX3BvcnRzOwotCXN0cnVjdCBkZXZpY2UJKmRldlsyXTsKLQl1bnNpZ25lZCBpbnQJKCppbml0X2NoaXBzZXQpKHN0cnVjdCBwY2lfZGV2ICopOwotCXVuc2lnbmVkIGxvbmcJaG9zdF9mbGFnczsKLQl2b2lkCQkqaG9zdF9wcml2OwotfTsKLQotLyoKLSAqICBpbnRlcm5hbCBpZGUgaW50ZXJydXB0IGhhbmRsZXIgdHlwZQotICovCi10eXBlZGVmIGlkZV9zdGFydHN0b3BfdCAoaWRlX2hhbmRsZXJfdCkoaWRlX2RyaXZlX3QgKik7Ci10eXBlZGVmIGludCAoaWRlX2V4cGlyeV90KShpZGVfZHJpdmVfdCAqKTsKLQotLyogdXNlZCBieSBpZGUtY2QsIGlkZS1mbG9wcHksIGV0Yy4gKi8KLXR5cGVkZWYgdm9pZCAoeGZlcl9mdW5jX3QpKGlkZV9kcml2ZV90ICosIHN0cnVjdCByZXF1ZXN0ICpycSwgdm9pZCAqLCB1bnNpZ25lZCk7Ci0KLXR5cGVkZWYgc3RydWN0IGh3Z3JvdXBfcyB7Ci0JCS8qIGlycSBoYW5kbGVyLCBpZiBhY3RpdmUgKi8KLQlpZGVfc3RhcnRzdG9wX3QJKCpoYW5kbGVyKShpZGVfZHJpdmVfdCAqKTsKLQotCQkvKiBCT09MOiBwcm90ZWN0cyBhbGwgZmllbGRzIGJlbG93ICovCi0Jdm9sYXRpbGUgaW50IGJ1c3k7Ci0JCS8qIEJPT0w6IHdha2UgdXMgdXAgb24gdGltZXIgZXhwaXJ5ICovCi0JdW5zaWduZWQgaW50IHNsZWVwaW5nCTogMTsKLQkJLyogQk9PTDogcG9sbGluZyBhY3RpdmUgJiBwb2xsX3RpbWVvdXQgZmllbGQgdmFsaWQgKi8KLQl1bnNpZ25lZCBpbnQgcG9sbGluZwk6IDE7Ci0KLQkJLyogY3VycmVudCBkcml2ZSAqLwotCWlkZV9kcml2ZV90ICpkcml2ZTsKLQkJLyogcHRyIHRvIGN1cnJlbnQgaHdpZiBpbiBsaW5rZWQtbGlzdCAqLwotCWlkZV9od2lmX3QgKmh3aWY7Ci0KLQkJLyogY3VycmVudCByZXF1ZXN0ICovCi0Jc3RydWN0IHJlcXVlc3QgKnJxOwotCi0JCS8qIGZhaWxzYWZlIHRpbWVyICovCi0Jc3RydWN0IHRpbWVyX2xpc3QgdGltZXI7Ci0JCS8qIHRpbWVvdXQgdmFsdWUgZHVyaW5nIGxvbmcgcG9sbHMgKi8KLQl1bnNpZ25lZCBsb25nIHBvbGxfdGltZW91dDsKLQkJLyogcXVlcmllZCB1cG9uIHRpbWVvdXRzICovCi0JaW50ICgqZXhwaXJ5KShpZGVfZHJpdmVfdCAqKTsKLQotCWludCByZXFfZ2VuOwotCWludCByZXFfZ2VuX3RpbWVyOwotfSBpZGVfaHdncm91cF90OwotCi10eXBlZGVmIHN0cnVjdCBpZGVfZHJpdmVyX3MgaWRlX2RyaXZlcl90OwotCi1leHRlcm4gc3RydWN0IG11dGV4IGlkZV9zZXR0aW5nX210eDsKLQotLyoKLSAqIGNvbmZpZ3VyYWJsZSBkcml2ZSBzZXR0aW5ncwotICovCi0KLSNkZWZpbmUgRFNfU1lOQwkoMSA8PCAwKQotCi1zdHJ1Y3QgaWRlX2RldnNldCB7Ci0JaW50CQkoKmdldCkoaWRlX2RyaXZlX3QgKik7Ci0JaW50CQkoKnNldCkoaWRlX2RyaXZlX3QgKiwgaW50KTsKLQl1bnNpZ25lZCBpbnQJZmxhZ3M7Ci19OwotCi0jZGVmaW5lIF9fREVWU0VUKF9mbGFncywgX2dldCwgX3NldCkgeyBcCi0JLmZsYWdzCT0gX2ZsYWdzLCBcCi0JLmdldAk9IF9nZXQsCVwKLQkuc2V0CT0gX3NldCwJXAotfQotCi0jZGVmaW5lIGlkZV9kZXZzZXRfZ2V0KG5hbWUsIGZpZWxkKSBcCi1zdGF0aWMgaW50IGdldF8jI25hbWUoaWRlX2RyaXZlX3QgKmRyaXZlKSBcCi17IFwKLQlyZXR1cm4gZHJpdmUtPmZpZWxkOyBcCi19Ci0KLSNkZWZpbmUgaWRlX2RldnNldF9zZXQobmFtZSwgZmllbGQpIFwKLXN0YXRpYyBpbnQgc2V0XyMjbmFtZShpZGVfZHJpdmVfdCAqZHJpdmUsIGludCBhcmcpIFwKLXsgXAotCWRyaXZlLT5maWVsZCA9IGFyZzsgXAotCXJldHVybiAwOyBcCi19Ci0KLSNkZWZpbmUgX19JREVfREVWU0VUKF9uYW1lLCBfZmxhZ3MsIF9nZXQsIF9zZXQpIFwKLWNvbnN0IHN0cnVjdCBpZGVfZGV2c2V0IGlkZV9kZXZzZXRfIyNfbmFtZSA9IFwKLQlfX0RFVlNFVChfZmxhZ3MsIF9nZXQsIF9zZXQpCi0KLSNkZWZpbmUgSURFX0RFVlNFVChfbmFtZSwgX2ZsYWdzLCBfZ2V0LCBfc2V0KSBcCi1zdGF0aWMgX19JREVfREVWU0VUKF9uYW1lLCBfZmxhZ3MsIF9nZXQsIF9zZXQpCi0KLSNkZWZpbmUgaWRlX2RldnNldF9ydyhfbmFtZSwgX2Z1bmMpIFwKLUlERV9ERVZTRVQoX25hbWUsIDAsIGdldF8jI19mdW5jLCBzZXRfIyNfZnVuYykKLQotI2RlZmluZSBpZGVfZGV2c2V0X3coX25hbWUsIF9mdW5jKSBcCi1JREVfREVWU0VUKF9uYW1lLCAwLCBOVUxMLCBzZXRfIyNfZnVuYykKLQotI2RlZmluZSBpZGVfZGV2c2V0X3J3X3N5bmMoX25hbWUsIF9mdW5jKSBcCi1JREVfREVWU0VUKF9uYW1lLCBEU19TWU5DLCBnZXRfIyNfZnVuYywgc2V0XyMjX2Z1bmMpCi0KLSNkZWZpbmUgaWRlX2RlY2xfZGV2c2V0KF9uYW1lKSBcCi1leHRlcm4gY29uc3Qgc3RydWN0IGlkZV9kZXZzZXQgaWRlX2RldnNldF8jI19uYW1lCi0KLWlkZV9kZWNsX2RldnNldChpb18zMmJpdCk7Ci1pZGVfZGVjbF9kZXZzZXQoa2VlcHNldHRpbmdzKTsKLWlkZV9kZWNsX2RldnNldChwaW9fbW9kZSk7Ci1pZGVfZGVjbF9kZXZzZXQodW5tYXNraXJxKTsKLWlkZV9kZWNsX2RldnNldCh1c2luZ19kbWEpOwotCi0vKiBBVEFQSSBwYWNrZXQgY29tbWFuZCBmbGFncyAqLwotZW51bSB7Ci0JLyogc2V0IHdoZW4gYW4gZXJyb3IgaXMgY29uc2lkZXJlZCBub3JtYWwgLSBubyByZXRyeSAoaWRlLXRhcGUpICovCi0JUENfRkxBR19BQk9SVAkJCT0gKDEgPDwgMCksCi0JUENfRkxBR19TVVBQUkVTU19FUlJPUgkJPSAoMSA8PCAxKSwKLQlQQ19GTEFHX1dBSVRfRk9SX0RTQwkJPSAoMSA8PCAyKSwKLQlQQ19GTEFHX0RNQV9PSwkJCT0gKDEgPDwgMyksCi0JUENfRkxBR19ETUFfSU5fUFJPR1JFU1MJCT0gKDEgPDwgNCksCi0JUENfRkxBR19ETUFfRVJST1IJCT0gKDEgPDwgNSksCi0JUENfRkxBR19XUklUSU5HCQkJPSAoMSA8PCA2KSwKLQkvKiBjb21tYW5kIHRpbWVkIG91dCAqLwotCVBDX0ZMQUdfVElNRURPVVQJCT0gKDEgPDwgNyksCi19OwotCi0vKgotICogV2l0aCBlYWNoIHBhY2tldCBjb21tYW5kLCB3ZSBhbGxvY2F0ZSBhIGJ1ZmZlciBvZiBJREVfUENfQlVGRkVSX1NJWkUgYnl0ZXMuCi0gKiBUaGlzIGlzIHVzZWQgZm9yIHNldmVyYWwgcGFja2V0IGNvbW1hbmRzIChub3QgZm9yIFJFQUQvV1JJVEUgY29tbWFuZHMpLgotICovCi0jZGVmaW5lIElERV9QQ19CVUZGRVJfU0laRQkyNTYKLQotc3RydWN0IGlkZV9hdGFwaV9wYyB7Ci0JLyogYWN0dWFsIHBhY2tldCBieXRlcyAqLwotCXU4IGNbMTJdOwotCS8qIGluY3JlbWVudGVkIG9uIGVhY2ggcmV0cnkgKi8KLQlpbnQgcmV0cmllczsKLQlpbnQgZXJyb3I7Ci0KLQkvKiBieXRlcyB0byB0cmFuc2ZlciAqLwotCWludCByZXFfeGZlcjsKLQkvKiBieXRlcyBhY3R1YWxseSB0cmFuc2ZlcnJlZCAqLwotCWludCB4ZmVycmVkOwotCi0JLyogZGF0YSBidWZmZXIgKi8KLQl1OCAqYnVmOwotCS8qIGN1cnJlbnQgYnVmZmVyIHBvc2l0aW9uICovCi0JdTggKmN1cl9wb3M7Ci0JaW50IGJ1Zl9zaXplOwotCS8qIG1pc3NpbmcvYXZhaWxhYmxlIGRhdGEgb24gdGhlIGN1cnJlbnQgYnVmZmVyICovCi0JaW50IGJfY291bnQ7Ci0KLQkvKiB0aGUgY29ycmVzcG9uZGluZyByZXF1ZXN0ICovCi0Jc3RydWN0IHJlcXVlc3QgKnJxOwotCi0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCS8qCi0JICogdGhvc2UgYXJlIG1vcmUgb3IgbGVzcyBkcml2ZXItc3BlY2lmaWMgYW5kIHNvbWUgb2YgdGhlbSBhcmUgc3ViamVjdAotCSAqIHRvIGNoYW5nZS9yZW1vdmFsIGxhdGVyLgotCSAqLwotCXU4IHBjX2J1ZltJREVfUENfQlVGRkVSX1NJWkVdOwotCi0JLyogaWRldGFwZSBvbmx5ICovCi0Jc3RydWN0IGlkZXRhcGVfYmggKmJoOwotCWNoYXIgKmJfZGF0YTsKLQotCS8qIGlkZXNjc2kgb25seSBmb3Igbm93ICovCi0Jc3RydWN0IHNjYXR0ZXJsaXN0ICpzZzsKLQl1bnNpZ25lZCBpbnQgc2dfY250OwotCi0Jc3RydWN0IHNjc2lfY21uZCAqc2NzaV9jbWQ7Ci0Jdm9pZCAoKmRvbmUpIChzdHJ1Y3Qgc2NzaV9jbW5kICopOwotCi0JdW5zaWduZWQgbG9uZyB0aW1lb3V0OwotfTsKLQotI2lmZGVmIENPTkZJR19JREVfUFJPQ19GUwotLyoKLSAqIC9wcm9jL2lkZSBpbnRlcmZhY2UKLSAqLwotCi0jZGVmaW5lIGlkZV9kZXZzZXRfcndfZmllbGQoX25hbWUsIF9maWVsZCkgXAotaWRlX2RldnNldF9nZXQoX25hbWUsIF9maWVsZCk7IFwKLWlkZV9kZXZzZXRfc2V0KF9uYW1lLCBfZmllbGQpOyBcCi1JREVfREVWU0VUKF9uYW1lLCBEU19TWU5DLCBnZXRfIyNfbmFtZSwgc2V0XyMjX25hbWUpCi0KLXN0cnVjdCBpZGVfcHJvY19kZXZzZXQgewotCWNvbnN0IGNoYXIJCSpuYW1lOwotCWNvbnN0IHN0cnVjdCBpZGVfZGV2c2V0CSpzZXR0aW5nOwotCWludAkJCW1pbiwgbWF4OwotCWludAkJCSgqbXVsZikoaWRlX2RyaXZlX3QgKik7Ci0JaW50CQkJKCpkaXZmKShpZGVfZHJpdmVfdCAqKTsKLX07Ci0KLSNkZWZpbmUgX19JREVfUFJPQ19ERVZTRVQoX25hbWUsIF9taW4sIF9tYXgsIF9tdWxmLCBfZGl2ZikgeyBcCi0JLm5hbWUgPSBfX3N0cmluZ2lmeShfbmFtZSksIFwKLQkuc2V0dGluZyA9ICZpZGVfZGV2c2V0XyMjX25hbWUsIFwKLQkubWluID0gX21pbiwgXAotCS5tYXggPSBfbWF4LCBcCi0JLm11bGYgPSBfbXVsZiwgXAotCS5kaXZmID0gX2RpdmYsIFwKLX0KLQotI2RlZmluZSBJREVfUFJPQ19ERVZTRVQoX25hbWUsIF9taW4sIF9tYXgpIFwKLV9fSURFX1BST0NfREVWU0VUKF9uYW1lLCBfbWluLCBfbWF4LCBOVUxMLCBOVUxMKQotCi10eXBlZGVmIHN0cnVjdCB7Ci0JY29uc3QgY2hhcgkqbmFtZTsKLQltb2RlX3QJCW1vZGU7Ci0JcmVhZF9wcm9jX3QJKnJlYWRfcHJvYzsKLQl3cml0ZV9wcm9jX3QJKndyaXRlX3Byb2M7Ci19IGlkZV9wcm9jX2VudHJ5X3Q7Ci0KLXZvaWQgcHJvY19pZGVfY3JlYXRlKHZvaWQpOwotdm9pZCBwcm9jX2lkZV9kZXN0cm95KHZvaWQpOwotdm9pZCBpZGVfcHJvY19yZWdpc3Rlcl9wb3J0KGlkZV9od2lmX3QgKik7Ci12b2lkIGlkZV9wcm9jX3BvcnRfcmVnaXN0ZXJfZGV2aWNlcyhpZGVfaHdpZl90ICopOwotdm9pZCBpZGVfcHJvY191bnJlZ2lzdGVyX2RldmljZShpZGVfZHJpdmVfdCAqKTsKLXZvaWQgaWRlX3Byb2NfdW5yZWdpc3Rlcl9wb3J0KGlkZV9od2lmX3QgKik7Ci12b2lkIGlkZV9wcm9jX3JlZ2lzdGVyX2RyaXZlcihpZGVfZHJpdmVfdCAqLCBpZGVfZHJpdmVyX3QgKik7Ci12b2lkIGlkZV9wcm9jX3VucmVnaXN0ZXJfZHJpdmVyKGlkZV9kcml2ZV90ICosIGlkZV9kcml2ZXJfdCAqKTsKLQotcmVhZF9wcm9jX3QgcHJvY19pZGVfcmVhZF9jYXBhY2l0eTsKLXJlYWRfcHJvY190IHByb2NfaWRlX3JlYWRfZ2VvbWV0cnk7Ci0KLS8qCi0gKiBTdGFuZGFyZCBleGl0IHN0dWZmOgotICovCi0jZGVmaW5lIFBST0NfSURFX1JFQURfUkVUVVJOKHBhZ2Usc3RhcnQsb2ZmLGNvdW50LGVvZixsZW4pIFwKLXsJCQkJCVwKLQlsZW4gLT0gb2ZmOwkJCVwKLQlpZiAobGVuIDwgY291bnQpIHsJCVwKLQkJKmVvZiA9IDE7CQlcCi0JCWlmIChsZW4gPD0gMCkJCVwKLQkJCXJldHVybiAwOwlcCi0JfSBlbHNlCQkJCVwKLQkJbGVuID0gY291bnQ7CQlcCi0JKnN0YXJ0ID0gcGFnZSArIG9mZjsJCVwKLQlyZXR1cm4gbGVuOwkJCVwKLX0KLSNlbHNlCi1zdGF0aWMgaW5saW5lIHZvaWQgcHJvY19pZGVfY3JlYXRlKHZvaWQpIHsgOyB9Ci1zdGF0aWMgaW5saW5lIHZvaWQgcHJvY19pZGVfZGVzdHJveSh2b2lkKSB7IDsgfQotc3RhdGljIGlubGluZSB2b2lkIGlkZV9wcm9jX3JlZ2lzdGVyX3BvcnQoaWRlX2h3aWZfdCAqaHdpZikgeyA7IH0KLXN0YXRpYyBpbmxpbmUgdm9pZCBpZGVfcHJvY19wb3J0X3JlZ2lzdGVyX2RldmljZXMoaWRlX2h3aWZfdCAqaHdpZikgeyA7IH0KLXN0YXRpYyBpbmxpbmUgdm9pZCBpZGVfcHJvY191bnJlZ2lzdGVyX2RldmljZShpZGVfZHJpdmVfdCAqZHJpdmUpIHsgOyB9Ci1zdGF0aWMgaW5saW5lIHZvaWQgaWRlX3Byb2NfdW5yZWdpc3Rlcl9wb3J0KGlkZV9od2lmX3QgKmh3aWYpIHsgOyB9Ci1zdGF0aWMgaW5saW5lIHZvaWQgaWRlX3Byb2NfcmVnaXN0ZXJfZHJpdmVyKGlkZV9kcml2ZV90ICpkcml2ZSwgaWRlX2RyaXZlcl90ICpkcml2ZXIpIHsgOyB9Ci1zdGF0aWMgaW5saW5lIHZvaWQgaWRlX3Byb2NfdW5yZWdpc3Rlcl9kcml2ZXIoaWRlX2RyaXZlX3QgKmRyaXZlLCBpZGVfZHJpdmVyX3QgKmRyaXZlcikgeyA7IH0KLSNkZWZpbmUgUFJPQ19JREVfUkVBRF9SRVRVUk4ocGFnZSxzdGFydCxvZmYsY291bnQsZW9mLGxlbikgcmV0dXJuIDA7Ci0jZW5kaWYKLQotLyoKLSAqIFBvd2VyIE1hbmFnZW1lbnQgc3RlcCB2YWx1ZSAocnEtPnBtLT5wbV9zdGVwKS4KLSAqCi0gKiBUaGUgc3RlcCB2YWx1ZSBzdGFydHMgYXQgMCAoaWRlX3BtX3N0YXRlX3N0YXJ0X3N1c3BlbmQpIGZvciBhCi0gKiBzdXNwZW5kIG9wZXJhdGlvbiBvciAxMDAwIChpZGVfcG1fc3RhdGVfc3RhcnRfcmVzdW1lKSBmb3IgYQotICogcmVzdW1lIG9wZXJhdGlvbi4KLSAqCi0gKiBGb3IgZWFjaCBzdGVwLCB0aGUgY29yZSBjYWxscyB0aGUgc3ViZHJpdmVyIHN0YXJ0X3Bvd2VyX3N0ZXAoKSBmaXJzdC4KLSAqIFRoaXMgY2FuIHJldHVybjoKLSAqCS0gaWRlX3N0b3BwZWQgOglJbiB0aGlzIGNhc2UsIHRoZSBjb3JlIGNhbGxzIHVzIGJhY2sgYWdhaW4gdW5sZXNzCi0gKgkJCXN0ZXAgaGF2ZSBiZWVuIHNldCB0byBpZGVfcG93ZXJfc3RhdGVfY29tcGxldGVkLgotICoJLSBpZGVfc3RhcnRlZCA6CUluIHRoaXMgY2FzZSwgdGhlIGNoYW5uZWwgaXMgbGVmdCBidXN5IHVudGlsIGFuCi0gKgkJCWFzeW5jIGV2ZW50IChpbnRlcnJ1cHQpIG9jY3Vycy4KLSAqIFR5cGljYWxseSwgc3RhcnRfcG93ZXJfc3RlcCgpIHdpbGwgaXNzdWUgYSB0YXNrZmlsZSByZXF1ZXN0IHdpdGgKLSAqIGRvX3J3X3Rhc2tmaWxlKCkuCi0gKgotICogVXBvbiByZWNlcHRpb24gb2YgdGhlIGludGVycnVwdCwgdGhlIGNvcmUgd2lsbCBjYWxsIGNvbXBsZXRlX3Bvd2VyX3N0ZXAoKQotICogd2l0aCB0aGUgZXJyb3IgY29kZSBpZiBhbnkuIFRoaXMgcm91dGluZSBzaG91bGQgdXBkYXRlIHRoZSBzdGVwIHZhbHVlCi0gKiBhbmQgcmV0dXJuLiBJdCBzaG91bGQgbm90IHN0YXJ0IGEgbmV3IHJlcXVlc3QuIFRoZSBjb3JlIHdpbGwgY2FsbAotICogc3RhcnRfcG93ZXJfc3RlcCBmb3IgdGhlIG5ldyBzdGVwIHZhbHVlLCB1bmxlc3Mgc3RlcCBoYXZlIGJlZW4gc2V0IHRvCi0gKiBpZGVfcG93ZXJfc3RhdGVfY29tcGxldGVkLgotICoKLSAqIFN1YmRyaXZlcnMgYXJlIGV4cGVjdGVkIHRvIGRlZmluZSB0aGVpciBvd24gYWRkaXRpb25hbCBwb3dlcgotICogc3RlcHMgZnJvbSAxLi45OTkgZm9yIHN1c3BlbmQgYW5kIGZyb20gMTAwMS4uMTk5OSBmb3IgcmVzdW1lLAotICogb3RoZXIgdmFsdWVzIGFyZSByZXNlcnZlZCBmb3IgZnV0dXJlIHVzZS4KLSAqLwotCi1lbnVtIHsKLQlpZGVfcG1fc3RhdGVfY29tcGxldGVkCQk9IC0xLAotCWlkZV9wbV9zdGF0ZV9zdGFydF9zdXNwZW5kCT0gMCwKLQlpZGVfcG1fc3RhdGVfc3RhcnRfcmVzdW1lCT0gMTAwMCwKLX07Ci0KLS8qCi0gKiBTdWJkcml2ZXJzIHN1cHBvcnQuCi0gKgotICogVGhlIGdlbmRyaXZlci5vd25lciBmaWVsZCBzaG91bGQgYmUgc2V0IHRvIHRoZSBtb2R1bGUgb3duZXIgb2YgdGhpcyBkcml2ZXIuCi0gKiBUaGUgZ2VuZHJpdmVyLm5hbWUgZmllbGQgc2hvdWxkIGJlIHNldCB0byB0aGUgbmFtZSBvZiB0aGlzIGRyaXZlcgotICovCi1zdHJ1Y3QgaWRlX2RyaXZlcl9zIHsKLQljb25zdCBjaGFyCQkJKnZlcnNpb247Ci0JdTgJCQkJbWVkaWE7Ci0JaWRlX3N0YXJ0c3RvcF90CSgqZG9fcmVxdWVzdCkoaWRlX2RyaXZlX3QgKiwgc3RydWN0IHJlcXVlc3QgKiwgc2VjdG9yX3QpOwotCWludAkJKCplbmRfcmVxdWVzdCkoaWRlX2RyaXZlX3QgKiwgaW50LCBpbnQpOwotCWlkZV9zdGFydHN0b3BfdAkoKmVycm9yKShpZGVfZHJpdmVfdCAqLCBzdHJ1Y3QgcmVxdWVzdCAqcnEsIHU4LCB1OCk7Ci0Jc3RydWN0IGRldmljZV9kcml2ZXIJZ2VuX2RyaXZlcjsKLQlpbnQJCSgqcHJvYmUpKGlkZV9kcml2ZV90ICopOwotCXZvaWQJCSgqcmVtb3ZlKShpZGVfZHJpdmVfdCAqKTsKLQl2b2lkCQkoKnJlc3VtZSkoaWRlX2RyaXZlX3QgKik7Ci0Jdm9pZAkJKCpzaHV0ZG93bikoaWRlX2RyaXZlX3QgKik7Ci0jaWZkZWYgQ09ORklHX0lERV9QUk9DX0ZTCi0JaWRlX3Byb2NfZW50cnlfdAkJKnByb2M7Ci0JY29uc3Qgc3RydWN0IGlkZV9wcm9jX2RldnNldAkqc2V0dGluZ3M7Ci0jZW5kaWYKLX07Ci0KLSNkZWZpbmUgdG9faWRlX2RyaXZlcihkcnYpIGNvbnRhaW5lcl9vZihkcnYsIGlkZV9kcml2ZXJfdCwgZ2VuX2RyaXZlcikKLQotaW50IGlkZV9kZXZpY2VfZ2V0KGlkZV9kcml2ZV90ICopOwotdm9pZCBpZGVfZGV2aWNlX3B1dChpZGVfZHJpdmVfdCAqKTsKLQotc3RydWN0IGlkZV9pb2N0bF9kZXZzZXQgewotCXVuc2lnbmVkIGludAlnZXRfaW9jdGw7Ci0JdW5zaWduZWQgaW50CXNldF9pb2N0bDsKLQljb25zdCBzdHJ1Y3QgaWRlX2RldnNldCAqc2V0dGluZzsKLX07Ci0KLWludCBpZGVfc2V0dGluZ19pb2N0bChpZGVfZHJpdmVfdCAqLCBzdHJ1Y3QgYmxvY2tfZGV2aWNlICosIHVuc2lnbmVkIGludCwKLQkJICAgICAgdW5zaWduZWQgbG9uZywgY29uc3Qgc3RydWN0IGlkZV9pb2N0bF9kZXZzZXQgKik7Ci0KLWludCBnZW5lcmljX2lkZV9pb2N0bChpZGVfZHJpdmVfdCAqLCBzdHJ1Y3QgZmlsZSAqLCBzdHJ1Y3QgYmxvY2tfZGV2aWNlICosCi0JCSAgICAgIHVuc2lnbmVkLCB1bnNpZ25lZCBsb25nKTsKLQotZXh0ZXJuIGludCBpZGVfdmxiX2NsazsKLWV4dGVybiBpbnQgaWRlX3BjaV9jbGs7Ci0KLWV4dGVybiBpbnQgaWRlX2VuZF9yZXF1ZXN0IChpZGVfZHJpdmVfdCAqZHJpdmUsIGludCB1cHRvZGF0ZSwgaW50IG5yc2Vjcyk7Ci1pbnQgaWRlX2VuZF9kZXF1ZXVlZF9yZXF1ZXN0KGlkZV9kcml2ZV90ICpkcml2ZSwgc3RydWN0IHJlcXVlc3QgKnJxLAotCQkJICAgICBpbnQgdXB0b2RhdGUsIGludCBucl9zZWN0b3JzKTsKLQotZXh0ZXJuIHZvaWQgaWRlX3NldF9oYW5kbGVyIChpZGVfZHJpdmVfdCAqZHJpdmUsIGlkZV9oYW5kbGVyX3QgKmhhbmRsZXIsIHVuc2lnbmVkIGludCB0aW1lb3V0LCBpZGVfZXhwaXJ5X3QgKmV4cGlyeSk7Ci0KLXZvaWQgaWRlX2V4ZWN1dGVfY29tbWFuZChpZGVfZHJpdmVfdCAqLCB1OCwgaWRlX2hhbmRsZXJfdCAqLCB1bnNpZ25lZCBpbnQsCi0JCQkgaWRlX2V4cGlyeV90ICopOwotCi12b2lkIGlkZV9leGVjdXRlX3BrdF9jbWQoaWRlX2RyaXZlX3QgKik7Ci0KLXZvaWQgaWRlX3BhZF90cmFuc2ZlcihpZGVfZHJpdmVfdCAqLCBpbnQsIGludCk7Ci0KLWlkZV9zdGFydHN0b3BfdCBfX2lkZV9lcnJvcihpZGVfZHJpdmVfdCAqLCBzdHJ1Y3QgcmVxdWVzdCAqLCB1OCwgdTgpOwotCi1pZGVfc3RhcnRzdG9wX3QgaWRlX2Vycm9yIChpZGVfZHJpdmVfdCAqZHJpdmUsIGNvbnN0IGNoYXIgKm1zZywgYnl0ZSBzdGF0KTsKLQotdm9pZCBpZGVfZml4X2RyaXZlaWQodTE2ICopOwotCi1leHRlcm4gdm9pZCBpZGVfZml4c3RyaW5nKHU4ICosIGNvbnN0IGludCwgY29uc3QgaW50KTsKLQotaW50IGlkZV9idXN5X3NsZWVwKGlkZV9od2lmX3QgKiwgdW5zaWduZWQgbG9uZywgaW50KTsKLQotaW50IGlkZV93YWl0X3N0YXQoaWRlX3N0YXJ0c3RvcF90ICosIGlkZV9kcml2ZV90ICosIHU4LCB1OCwgdW5zaWduZWQgbG9uZyk7Ci0KLWV4dGVybiBpZGVfc3RhcnRzdG9wX3QgaWRlX2RvX3Jlc2V0IChpZGVfZHJpdmVfdCAqKTsKLQotZXh0ZXJuIGludCBpZGVfZGV2c2V0X2V4ZWN1dGUoaWRlX2RyaXZlX3QgKmRyaXZlLAotCQkJICAgICAgY29uc3Qgc3RydWN0IGlkZV9kZXZzZXQgKnNldHRpbmcsIGludCBhcmcpOwotCi1leHRlcm4gdm9pZCBpZGVfZG9fZHJpdmVfY21kKGlkZV9kcml2ZV90ICosIHN0cnVjdCByZXF1ZXN0ICopOwotCi1leHRlcm4gdm9pZCBpZGVfZW5kX2RyaXZlX2NtZChpZGVfZHJpdmVfdCAqLCB1OCwgdTgpOwotCiBlbnVtIHsKIAlJREVfVEZMQUdfTEJBNDgJCQk9ICgxIDw8IDApLAogCUlERV9URkxBR19GTEFHR0VECQk9ICgxIDw8IDIpLApAQCAtMTExOSw2ICszODgsODE2IEBACiAJdm9pZAkJCSpzcGVjaWFsOwkvKiB2YWxpZF90IGdlbmVyYWxseSAqLwogfSBpZGVfdGFza190OwogCisvKiBBVEFQSSBwYWNrZXQgY29tbWFuZCBmbGFncyAqLworZW51bSB7CisJLyogc2V0IHdoZW4gYW4gZXJyb3IgaXMgY29uc2lkZXJlZCBub3JtYWwgLSBubyByZXRyeSAoaWRlLXRhcGUpICovCisJUENfRkxBR19BQk9SVAkJCT0gKDEgPDwgMCksCisJUENfRkxBR19TVVBQUkVTU19FUlJPUgkJPSAoMSA8PCAxKSwKKwlQQ19GTEFHX1dBSVRfRk9SX0RTQwkJPSAoMSA8PCAyKSwKKwlQQ19GTEFHX0RNQV9PSwkJCT0gKDEgPDwgMyksCisJUENfRkxBR19ETUFfSU5fUFJPR1JFU1MJCT0gKDEgPDwgNCksCisJUENfRkxBR19ETUFfRVJST1IJCT0gKDEgPDwgNSksCisJUENfRkxBR19XUklUSU5HCQkJPSAoMSA8PCA2KSwKKwkvKiBjb21tYW5kIHRpbWVkIG91dCAqLworCVBDX0ZMQUdfVElNRURPVVQJCT0gKDEgPDwgNyksCit9OworCisvKgorICogV2l0aCBlYWNoIHBhY2tldCBjb21tYW5kLCB3ZSBhbGxvY2F0ZSBhIGJ1ZmZlciBvZiBJREVfUENfQlVGRkVSX1NJWkUgYnl0ZXMuCisgKiBUaGlzIGlzIHVzZWQgZm9yIHNldmVyYWwgcGFja2V0IGNvbW1hbmRzIChub3QgZm9yIFJFQUQvV1JJVEUgY29tbWFuZHMpLgorICovCisjZGVmaW5lIElERV9QQ19CVUZGRVJfU0laRQkyNTYKKworc3RydWN0IGlkZV9hdGFwaV9wYyB7CisJLyogYWN0dWFsIHBhY2tldCBieXRlcyAqLworCXU4IGNbMTJdOworCS8qIGluY3JlbWVudGVkIG9uIGVhY2ggcmV0cnkgKi8KKwlpbnQgcmV0cmllczsKKwlpbnQgZXJyb3I7CisKKwkvKiBieXRlcyB0byB0cmFuc2ZlciAqLworCWludCByZXFfeGZlcjsKKwkvKiBieXRlcyBhY3R1YWxseSB0cmFuc2ZlcnJlZCAqLworCWludCB4ZmVycmVkOworCisJLyogZGF0YSBidWZmZXIgKi8KKwl1OCAqYnVmOworCS8qIGN1cnJlbnQgYnVmZmVyIHBvc2l0aW9uICovCisJdTggKmN1cl9wb3M7CisJaW50IGJ1Zl9zaXplOworCS8qIG1pc3NpbmcvYXZhaWxhYmxlIGRhdGEgb24gdGhlIGN1cnJlbnQgYnVmZmVyICovCisJaW50IGJfY291bnQ7CisKKwkvKiB0aGUgY29ycmVzcG9uZGluZyByZXF1ZXN0ICovCisJc3RydWN0IHJlcXVlc3QgKnJxOworCisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCS8qCisJICogdGhvc2UgYXJlIG1vcmUgb3IgbGVzcyBkcml2ZXItc3BlY2lmaWMgYW5kIHNvbWUgb2YgdGhlbSBhcmUgc3ViamVjdAorCSAqIHRvIGNoYW5nZS9yZW1vdmFsIGxhdGVyLgorCSAqLworCXU4IHBjX2J1ZltJREVfUENfQlVGRkVSX1NJWkVdOworCisJLyogaWRldGFwZSBvbmx5ICovCisJc3RydWN0IGlkZXRhcGVfYmggKmJoOworCWNoYXIgKmJfZGF0YTsKKworCS8qIGlkZXNjc2kgb25seSBmb3Igbm93ICovCisJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZzsKKwl1bnNpZ25lZCBpbnQgc2dfY250OworCisJc3RydWN0IHNjc2lfY21uZCAqc2NzaV9jbWQ7CisJdm9pZCAoKmRvbmUpIChzdHJ1Y3Qgc2NzaV9jbW5kICopOworCisJdW5zaWduZWQgbG9uZyB0aW1lb3V0OworfTsKKworc3RydWN0IGlkZV9kZXZzZXQ7CitzdHJ1Y3QgaWRlX2RyaXZlcl9zOworCisjaWZkZWYgQ09ORklHX0JMS19ERVZfSURFQUNQSQorc3RydWN0IGlkZV9hY3BpX2RyaXZlX2xpbms7CitzdHJ1Y3QgaWRlX2FjcGlfaHdpZl9saW5rOworI2VuZGlmCisKK3N0cnVjdCBpZGVfZHJpdmVfczsKKworc3RydWN0IGlkZV9kaXNrX29wcyB7CisJaW50CQkoKmNoZWNrKShzdHJ1Y3QgaWRlX2RyaXZlX3MgKiwgY29uc3QgY2hhciAqKTsKKwlpbnQJCSgqZ2V0X2NhcGFjaXR5KShzdHJ1Y3QgaWRlX2RyaXZlX3MgKik7CisJdm9pZAkJKCpzZXR1cCkoc3RydWN0IGlkZV9kcml2ZV9zICopOworCXZvaWQJCSgqZmx1c2gpKHN0cnVjdCBpZGVfZHJpdmVfcyAqKTsKKwlpbnQJCSgqaW5pdF9tZWRpYSkoc3RydWN0IGlkZV9kcml2ZV9zICosIHN0cnVjdCBnZW5kaXNrICopOworCWludAkJKCpzZXRfZG9vcmxvY2spKHN0cnVjdCBpZGVfZHJpdmVfcyAqLCBzdHJ1Y3QgZ2VuZGlzayAqLAorCQkJCQlpbnQpOworCWlkZV9zdGFydHN0b3BfdAkoKmRvX3JlcXVlc3QpKHN0cnVjdCBpZGVfZHJpdmVfcyAqLCBzdHJ1Y3QgcmVxdWVzdCAqLAorCQkJCSAgICAgIHNlY3Rvcl90KTsKKwlpbnQJCSgqZW5kX3JlcXVlc3QpKHN0cnVjdCBpZGVfZHJpdmVfcyAqLCBpbnQsIGludCk7CisJaW50CQkoKmlvY3RsKShzdHJ1Y3QgaWRlX2RyaXZlX3MgKiwgc3RydWN0IGlub2RlICosCisJCQkJIHN0cnVjdCBmaWxlICosIHVuc2lnbmVkIGludCwgdW5zaWduZWQgbG9uZyk7Cit9OworCisvKiBBVEFQSSBkZXZpY2UgZmxhZ3MgKi8KK2VudW0geworCUlERV9BRkxBR19EUlFfSU5URVJSVVBUCQk9ICgxIDw8IDApLAorCisJLyogaWRlLWNkICovCisJLyogRHJpdmUgY2Fubm90IGVqZWN0IHRoZSBkaXNjLiAqLworCUlERV9BRkxBR19OT19FSkVDVAkJPSAoMSA8PCAzKSwKKwkvKiBEcml2ZSBpcyBhIHByZSBBVEFQSSAxLjIgZHJpdmUuICovCisJSURFX0FGTEFHX1BSRV9BVEFQSTEyCQk9ICgxIDw8IDQpLAorCS8qIFRPQyBhZGRyZXNzZXMgYXJlIGluIEJDRC4gKi8KKwlJREVfQUZMQUdfVE9DQUREUl9BU19CQ0QJPSAoMSA8PCA1KSwKKwkvKiBUT0MgdHJhY2sgbnVtYmVycyBhcmUgaW4gQkNELiAqLworCUlERV9BRkxBR19UT0NUUkFDS1NfQVNfQkNECT0gKDEgPDwgNiksCisJLyoKKwkgKiBEcml2ZSBkb2VzIG5vdCBwcm92aWRlIGRhdGEgaW4gbXVsdGlwbGVzIG9mIFNFQ1RPUl9TSVpFCisJICogd2hlbiBtb3JlIHRoYW4gb25lIGludGVycnVwdCBpcyBuZWVkZWQuCisJICovCisJSURFX0FGTEFHX0xJTUlUX05GUkFNRVMJCT0gKDEgPDwgNyksCisJLyogU2Vla2luZyBpbiBwcm9ncmVzcy4gKi8KKwlJREVfQUZMQUdfU0VFS0lORwkJPSAoMSA8PCA4KSwKKwkvKiBTYXZlZCBUT0MgaW5mb3JtYXRpb24gaXMgY3VycmVudC4gKi8KKwlJREVfQUZMQUdfVE9DX1ZBTElECQk9ICgxIDw8IDkpLAorCS8qIFdlIHRoaW5rIHRoYXQgdGhlIGRyaXZlIGRvb3IgaXMgbG9ja2VkLiAqLworCUlERV9BRkxBR19ET09SX0xPQ0tFRAkJPSAoMSA8PCAxMCksCisJLyogU0VUX0NEX1NQRUVEIGNvbW1hbmQgaXMgdW5zdXBwb3J0ZWQuICovCisJSURFX0FGTEFHX05PX1NQRUVEX1NFTEVDVAk9ICgxIDw8IDExKSwKKwlJREVfQUZMQUdfVkVSVE9TXzMwMF9TU0QJPSAoMSA8PCAxMiksCisJSURFX0FGTEFHX1ZFUlRPU182MDBfRVNECT0gKDEgPDwgMTMpLAorCUlERV9BRkxBR19TQU5ZT18zQ0QJCT0gKDEgPDwgMTQpLAorCUlERV9BRkxBR19GVUxMX0NBUFNfUEFHRQk9ICgxIDw8IDE1KSwKKwlJREVfQUZMQUdfUExBWV9BVURJT19PSwkJPSAoMSA8PCAxNiksCisJSURFX0FGTEFHX0xFX1NQRUVEX0ZJRUxEUwk9ICgxIDw8IDE3KSwKKworCS8qIGlkZS1mbG9wcHkgKi8KKwkvKiBBdm9pZCBjb21tYW5kcyBub3Qgc3VwcG9ydGVkIGluIENsaWsgZHJpdmUgKi8KKwlJREVfQUZMQUdfQ0xJS19EUklWRQkJPSAoMSA8PCAxOSksCisJLyogUmVxdWlyZXMgQkggYWxnb3JpdGhtIGZvciBwYWNrZXRzICovCisJSURFX0FGTEFHX1pJUF9EUklWRQkJPSAoMSA8PCAyMCksCisJLyogU3VwcG9ydHMgZm9ybWF0IHByb2dyZXNzIHJlcG9ydCAqLworCUlERV9BRkxBR19TUkZQCQkJPSAoMSA8PCAyMiksCisKKwkvKiBpZGUtdGFwZSAqLworCUlERV9BRkxBR19JR05PUkVfRFNDCQk9ICgxIDw8IDIzKSwKKwkvKiAwIFdoZW4gdGhlIHRhcGUgcG9zaXRpb24gaXMgdW5rbm93biAqLworCUlERV9BRkxBR19BRERSRVNTX1ZBTElECQk9ICgxIDw8CTI0KSwKKwkvKiBEZXZpY2UgYWxyZWFkeSBvcGVuZWQgKi8KKwlJREVfQUZMQUdfQlVTWQkJCT0gKDEgPDwgMjUpLAorCS8qIEF0dGVtcHQgdG8gYXV0by1kZXRlY3QgdGhlIGN1cnJlbnQgdXNlciBibG9jayBzaXplICovCisJSURFX0FGTEFHX0RFVEVDVF9CUwkJPSAoMSA8PCAyNiksCisJLyogQ3VycmVudGx5IG9uIGEgZmlsZW1hcmsgKi8KKwlJREVfQUZMQUdfRklMRU1BUksJCT0gKDEgPDwgMjcpLAorCS8qIDAgPSBubyB0YXBlIGlzIGxvYWRlZCwgc28gd2UgZG9uJ3QgcmV3aW5kIGFmdGVyIGVqZWN0aW5nICovCisJSURFX0FGTEFHX01FRElVTV9QUkVTRU5UCT0gKDEgPDwgMjgpLAorCisJSURFX0FGTEFHX05PX0FVVE9DTE9TRQkJPSAoMSA8PCAyOSksCit9OworCisvKiBkZXZpY2UgZmxhZ3MgKi8KK2VudW0geworCS8qIHJlc3RvcmUgc2V0dGluZ3MgYWZ0ZXIgZGV2aWNlIHJlc2V0ICovCisJSURFX0RGTEFHX0tFRVBfU0VUVElOR1MJCT0gKDEgPDwgMCksCisJLyogZGV2aWNlIGlzIHVzaW5nIERNQSBmb3IgcmVhZC93cml0ZSAqLworCUlERV9ERkxBR19VU0lOR19ETUEJCT0gKDEgPDwgMSksCisJLyogb2theSB0byB1bm1hc2sgb3RoZXIgSVJRcyAqLworCUlERV9ERkxBR19VTk1BU0sJCT0gKDEgPDwgMiksCisJLyogZG9uJ3QgYXR0ZW1wdCBmbHVzaGVzICovCisJSURFX0RGTEFHX05PRkxVU0gJCT0gKDEgPDwgMyksCisJLyogRFNDIG92ZXJsYXAgKi8KKwlJREVfREZMQUdfRFNDX09WRVJMQVAJCT0gKDEgPDwgNCksCisJLyogZ2l2ZSBwb3RlbnRpYWwgZXhjZXNzIGJhbmR3aWR0aCAqLworCUlERV9ERkxBR19OSUNFMQkJCT0gKDEgPDwgNSksCisJLyogZGV2aWNlIGlzIHBoeXNpY2FsbHkgcHJlc2VudCAqLworCUlERV9ERkxBR19QUkVTRU5UCQk9ICgxIDw8IDYpLAorCS8qIGRldmljZSBlamVjdGVkIGhpbnQgKi8KKwlJREVfREZMQUdfREVBRAkJCT0gKDEgPDwgNyksCisJLyogaWQgcmVhZCBmcm9tIGRldmljZSAoc3ludGhldGljIGlmIG5vdCBzZXQpICovCisJSURFX0RGTEFHX0lEX1JFQUQJCT0gKDEgPDwgOCksCisJSURFX0RGTEFHX05PUFJPQkUJCT0gKDEgPDwgOSksCisJLyogbmVlZCB0byBkbyBjaGVja19tZWRpYV9jaGFuZ2UoKSAqLworCUlERV9ERkxBR19SRU1PVkFCTEUJCT0gKDEgPDwgMTApLAorCS8qIG5lZWRlZCBmb3IgcmVtb3ZhYmxlIGRldmljZXMgKi8KKwlJREVfREZMQUdfQVRUQUNICQk9ICgxIDw8IDExKSwKKwlJREVfREZMQUdfRk9SQ0VEX0dFT00JCT0gKDEgPDwgMTIpLAorCS8qIGRpc2FsbG93IHNldHRpbmcgdW5tYXNrIGJpdCAqLworCUlERV9ERkxBR19OT19VTk1BU0sJCT0gKDEgPDwgMTMpLAorCS8qIGRpc2FsbG93IGVuYWJsaW5nIDMyLWJpdCBJL08gKi8KKwlJREVfREZMQUdfTk9fSU9fMzJCSVQJCT0gKDEgPDwgMTQpLAorCS8qIGZvciByZW1vdmFibGUgb25seTogZG9vciBsb2NrL3VubG9jayB3b3JrcyAqLworCUlERV9ERkxBR19ET09STE9DS0lORwkJPSAoMSA8PCAxNSksCisJLyogZGlzYWxsb3cgRE1BICovCisJSURFX0RGTEFHX05PRE1BCQkJPSAoMSA8PCAxNiksCisJLyogcG93ZXJtYW5hZ21lbnQgdG9sZCB1cyBub3QgdG8gZG8gYW55dGhpbmcsIHNvIHNsZWVwIG5pY2VseSAqLworCUlERV9ERkxBR19CTE9DS0VECQk9ICgxIDw8IDE3KSwKKwkvKiBpZGUtc2NzaSBlbXVsYXRpb24gKi8KKwlJREVfREZMQUdfU0NTSQkJCT0gKDEgPDwgMTgpLAorCS8qIHNsZWVwaW5nICYgc2xlZXAgZmllbGQgdmFsaWQgKi8KKwlJREVfREZMQUdfU0xFRVBJTkcJCT0gKDEgPDwgMTkpLAorCUlERV9ERkxBR19QT1NUX1JFU0VUCQk9ICgxIDw8IDIwKSwKKwlJREVfREZMQUdfVURNQTMzX1dBUk5FRAkJPSAoMSA8PCAyMSksCisJSURFX0RGTEFHX0xCQTQ4CQkJPSAoMSA8PCAyMiksCisJLyogc3RhdHVzIG9mIHdyaXRlIGNhY2hlICovCisJSURFX0RGTEFHX1dDQUNIRQkJPSAoMSA8PCAyMyksCisJLyogdXNlZCBmb3IgaWdub3JpbmcgQVRBX0RGICovCisJSURFX0RGTEFHX05PV0VSUgkJPSAoMSA8PCAyNCksCisJLyogcmV0cnlpbmcgaW4gUElPICovCisJSURFX0RGTEFHX0RNQV9QSU9fUkVUUlkJCT0gKDEgPDwgMjUpLAorCUlERV9ERkxBR19MQkEJCQk9ICgxIDw8IDI2KSwKKwkvKiBkb24ndCB1bmxvYWQgaGVhZHMgKi8KKwlJREVfREZMQUdfTk9fVU5MT0FECQk9ICgxIDw8IDI3KSwKKwkvKiBoZWFkcyB1bmxvYWRlZCwgcGxlYXNlIGRvbid0IHJlc2V0IHBvcnQgKi8KKwlJREVfREZMQUdfUEFSS0VECQk9ICgxIDw8IDI4KSwKKwlJREVfREZMQUdfTUVESUFfQ0hBTkdFRAkJPSAoMSA8PCAyOSksCisJLyogd3JpdGUgcHJvdGVjdCAqLworCUlERV9ERkxBR19XUAkJCT0gKDEgPDwgMzApLAorCUlERV9ERkxBR19GT1JNQVRfSU5fUFJPR1JFU1MJPSAoMSA8PCAzMSksCit9OworCitzdHJ1Y3QgaWRlX2RyaXZlX3MgeworCWNoYXIJCW5hbWVbNF07CS8qIGRyaXZlIG5hbWUsIHN1Y2ggYXMgImhkYSIgKi8KKyAgICAgICAgY2hhciAgICAgICAgICAgIGRyaXZlcl9yZXFbMTBdOwkvKiByZXF1ZXN0cyBzcGVjaWZpYyBkcml2ZXIgKi8KKworCXN0cnVjdCByZXF1ZXN0X3F1ZXVlCSpxdWV1ZTsJLyogcmVxdWVzdCBxdWV1ZSAqLworCisJc3RydWN0IHJlcXVlc3QJCSpycTsJLyogY3VycmVudCByZXF1ZXN0ICovCisJc3RydWN0IGlkZV9kcml2ZV9zIAkqbmV4dDsJLyogY2lyY3VsYXIgbGlzdCBvZiBod2dyb3VwIGRyaXZlcyAqLworCXZvaWQJCSpkcml2ZXJfZGF0YTsJLyogZXh0cmEgZHJpdmVyIGRhdGEgKi8KKwl1MTYJCQkqaWQ7CS8qIGlkZW50aWZpY2F0aW9uIGluZm8gKi8KKyNpZmRlZiBDT05GSUdfSURFX1BST0NfRlMKKwlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnByb2M7CS8qIC9wcm9jL2lkZS8gZGlyZWN0b3J5IGVudHJ5ICovCisJY29uc3Qgc3RydWN0IGlkZV9wcm9jX2RldnNldCAqc2V0dGluZ3M7IC8qIC9wcm9jL2lkZS8gZHJpdmUgc2V0dGluZ3MgKi8KKyNlbmRpZgorCXN0cnVjdCBod2lmX3MJCSpod2lmOwkvKiBhY3R1YWxseSAoaWRlX2h3aWZfdCAqKSAqLworCisJY29uc3Qgc3RydWN0IGlkZV9kaXNrX29wcyAqZGlza19vcHM7CisKKwl1bnNpZ25lZCBsb25nIGRldl9mbGFnczsKKworCXVuc2lnbmVkIGxvbmcgc2xlZXA7CQkvKiBzbGVlcCB1bnRpbCB0aGlzIHRpbWUgKi8KKwl1bnNpZ25lZCBsb25nIHNlcnZpY2Vfc3RhcnQ7CS8qIHRpbWUgd2Ugc3RhcnRlZCBsYXN0IHJlcXVlc3QgKi8KKwl1bnNpZ25lZCBsb25nIHNlcnZpY2VfdGltZTsJLyogc2VydmljZSB0aW1lIG9mIGxhc3QgcmVxdWVzdCAqLworCXVuc2lnbmVkIGxvbmcgdGltZW91dDsJCS8qIG1heCB0aW1lIHRvIHdhaXQgZm9yIGlycSAqLworCisJc3BlY2lhbF90CXNwZWNpYWw7CS8qIHNwZWNpYWwgYWN0aW9uIGZsYWdzICovCisKKwl1OAlzZWxlY3Q7CQkJLyogYmFzaWMgZHJpdmUvaGVhZCBzZWxlY3QgcmVnIHZhbHVlICovCisJdTgJcmV0cnlfcGlvOwkJLyogcmV0cnlpbmcgZG1hIGNhcGFibGUgaG9zdCBpbiBwaW8gKi8KKwl1OAl3YWl0aW5nX2Zvcl9kbWE7CS8qIGRtYSBjdXJyZW50bHkgaW4gcHJvZ3Jlc3MgKi8KKwl1OAlkbWE7CQkJLyogYXRhcGkgZG1hIGZsYWcgKi8KKworICAgICAgICB1OAlxdWlya19saXN0OwkvKiBjb25zaWRlcmVkIHF1aXJreSwgc2V0IGZvciBhIHNwZWNpZmljIGhvc3QgKi8KKyAgICAgICAgdTgJaW5pdF9zcGVlZDsJLyogdHJhbnNmZXIgcmF0ZSBzZXQgYXQgYm9vdCAqLworICAgICAgICB1OAljdXJyZW50X3NwZWVkOwkvKiBjdXJyZW50IHRyYW5zZmVyIHJhdGUgc2V0ICovCisJdTgJZGVzaXJlZF9zcGVlZDsJLyogZGVzaXJlZCB0cmFuc2ZlciByYXRlIHNldCAqLworICAgICAgICB1OAlkbjsJCS8qIG5vdyB3aWRlIHNwcmVhZCB1c2UgKi8KKwl1OAlhY291c3RpYzsJLyogYWNvdXN0aWMgbWFuYWdlbWVudCAqLworCXU4CW1lZGlhOwkJLyogZGlzaywgY2Ryb20sIHRhcGUsIGZsb3BweSwgLi4uICovCisJdTgJcmVhZHlfc3RhdDsJLyogbWluIHN0YXR1cyB2YWx1ZSBmb3IgZHJpdmUgcmVhZHkgKi8KKwl1OAltdWx0X2NvdW50OwkvKiBjdXJyZW50IG11bHRpcGxlIHNlY3RvciBzZXR0aW5nICovCisJdTgJbXVsdF9yZXE7CS8qIHJlcXVlc3RlZCBtdWx0aXBsZSBzZWN0b3Igc2V0dGluZyAqLworCXU4CWlvXzMyYml0OwkvKiAwPTE2LWJpdCwgMT0zMi1iaXQsIDIvMz0zMmJpdCtzeW5jICovCisJdTgJYmFkX3dzdGF0OwkvKiB1c2VkIGZvciBpZ25vcmluZyBBVEFfREYgKi8KKwl1OAloZWFkOwkJLyogInJlYWwiIG51bWJlciBvZiBoZWFkcyAqLworCXU4CXNlY3Q7CQkvKiAicmVhbCIgc2VjdG9ycyBwZXIgdHJhY2sgKi8KKwl1OAliaW9zX2hlYWQ7CS8qIEJJT1MvZmRpc2svTElMTyBudW1iZXIgb2YgaGVhZHMgKi8KKwl1OAliaW9zX3NlY3Q7CS8qIEJJT1MvZmRpc2svTElMTyBzZWN0b3JzIHBlciB0cmFjayAqLworCisJLyogZGVsYXkgdGhpcyBsb25nIGJlZm9yZSBzZW5kaW5nIHBhY2tldCBjb21tYW5kICovCisJdTggcGNfZGVsYXk7CisKKwl1bnNpZ25lZCBpbnQJYmlvc19jeWw7CS8qIEJJT1MvZmRpc2svTElMTyBudW1iZXIgb2YgY3lscyAqLworCXVuc2lnbmVkIGludAljeWw7CQkvKiAicmVhbCIgbnVtYmVyIG9mIGN5bHMgKi8KKwl1bnNpZ25lZCBpbnQJZHJpdmVfZGF0YTsJLyogdXNlZCBieSBzZXRfcGlvX21vZGUvc2VsZWN0cHJvYyAqLworCXVuc2lnbmVkIGludAlmYWlsdXJlczsJLyogY3VycmVudCBmYWlsdXJlIGNvdW50ICovCisJdW5zaWduZWQgaW50CW1heF9mYWlsdXJlczsJLyogbWF4aW11bSBhbGxvd2VkIGZhaWx1cmUgY291bnQgKi8KKwl1NjQJCXByb2JlZF9jYXBhY2l0eTsvKiBpbml0aWFsIHJlcG9ydGVkIG1lZGlhIGNhcGFjaXR5IChpZGUtY2Qgb25seSBjdXJyZW50bHkpICovCisKKwl1NjQJCWNhcGFjaXR5NjQ7CS8qIHRvdGFsIG51bWJlciBvZiBzZWN0b3JzICovCisKKwlpbnQJCWx1bjsJCS8qIGxvZ2ljYWwgdW5pdCAqLworCWludAkJY3JjX2NvdW50OwkvKiBjcmMgY291bnRlciB0byByZWR1Y2UgZHJpdmUgc3BlZWQgKi8KKworCXVuc2lnbmVkIGxvbmcJZGVidWdfbWFzazsJLyogZGVidWdnaW5nIGxldmVscyBzd2l0Y2ggKi8KKworI2lmZGVmIENPTkZJR19CTEtfREVWX0lERUFDUEkKKwlzdHJ1Y3QgaWRlX2FjcGlfZHJpdmVfbGluayAqYWNwaWRhdGE7CisjZW5kaWYKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CisJc3RydWN0IGRldmljZQlnZW5kZXY7CisJc3RydWN0IGNvbXBsZXRpb24gZ2VuZGV2X3JlbF9jb21wOwkvKiB0byBkZWFsIHdpdGggZGV2aWNlIHJlbGVhc2UoKSAqLworCisJLyogY3VycmVudCBwYWNrZXQgY29tbWFuZCAqLworCXN0cnVjdCBpZGVfYXRhcGlfcGMgKnBjOworCisJLyogY2FsbGJhY2sgZm9yIHBhY2tldCBjb21tYW5kcyAqLworCXZvaWQgKCpwY19jYWxsYmFjaykoc3RydWN0IGlkZV9kcml2ZV9zICosIGludCk7CisKKwl2b2lkICgqcGNfdXBkYXRlX2J1ZmZlcnMpKHN0cnVjdCBpZGVfZHJpdmVfcyAqLCBzdHJ1Y3QgaWRlX2F0YXBpX3BjICopOworCWludCAgKCpwY19pb19idWZmZXJzKShzdHJ1Y3QgaWRlX2RyaXZlX3MgKiwgc3RydWN0IGlkZV9hdGFwaV9wYyAqLAorCQkJICAgICAgdW5zaWduZWQgaW50LCBpbnQpOworCisJdW5zaWduZWQgbG9uZyBhdGFwaV9mbGFnczsKKworCXN0cnVjdCBpZGVfYXRhcGlfcGMgcmVxdWVzdF9zZW5zZV9wYzsKKwlzdHJ1Y3QgcmVxdWVzdCByZXF1ZXN0X3NlbnNlX3JxOworfTsKKwordHlwZWRlZiBzdHJ1Y3QgaWRlX2RyaXZlX3MgaWRlX2RyaXZlX3Q7CisKKyNkZWZpbmUgdG9faWRlX2RldmljZShkZXYpCQljb250YWluZXJfb2YoZGV2LCBpZGVfZHJpdmVfdCwgZ2VuZGV2KQorCisjZGVmaW5lIHRvX2lkZV9kcnYob2JqLCBjb250X3R5cGUpCVwKKwljb250YWluZXJfb2Yob2JqLCBzdHJ1Y3QgY29udF90eXBlLCBrcmVmKQorCisjZGVmaW5lIGlkZV9kcnZfZyhkaXNrLCBjb250X3R5cGUpCVwKKwljb250YWluZXJfb2YoKGRpc2spLT5wcml2YXRlX2RhdGEsIHN0cnVjdCBjb250X3R5cGUsIGRyaXZlcikKKworc3RydWN0IGlkZV9wb3J0X2luZm87CisKK3N0cnVjdCBpZGVfdHBfb3BzIHsKKwl2b2lkCSgqZXhlY19jb21tYW5kKShzdHJ1Y3QgaHdpZl9zICosIHU4KTsKKwl1OAkoKnJlYWRfc3RhdHVzKShzdHJ1Y3QgaHdpZl9zICopOworCXU4CSgqcmVhZF9hbHRzdGF0dXMpKHN0cnVjdCBod2lmX3MgKik7CisJdTgJKCpyZWFkX3NmZl9kbWFfc3RhdHVzKShzdHJ1Y3QgaHdpZl9zICopOworCisJdm9pZAkoKnNldF9pcnEpKHN0cnVjdCBod2lmX3MgKiwgaW50KTsKKworCXZvaWQJKCp0Zl9sb2FkKShpZGVfZHJpdmVfdCAqLCBzdHJ1Y3QgaWRlX3Rhc2tfcyAqKTsKKwl2b2lkCSgqdGZfcmVhZCkoaWRlX2RyaXZlX3QgKiwgc3RydWN0IGlkZV90YXNrX3MgKik7CisKKwl2b2lkCSgqaW5wdXRfZGF0YSkoaWRlX2RyaXZlX3QgKiwgc3RydWN0IHJlcXVlc3QgKiwgdm9pZCAqLAorCQkJICAgICAgdW5zaWduZWQgaW50KTsKKwl2b2lkCSgqb3V0cHV0X2RhdGEpKGlkZV9kcml2ZV90ICosIHN0cnVjdCByZXF1ZXN0ICosIHZvaWQgKiwKKwkJCSAgICAgICB1bnNpZ25lZCBpbnQpOworfTsKKworZXh0ZXJuIGNvbnN0IHN0cnVjdCBpZGVfdHBfb3BzIGRlZmF1bHRfdHBfb3BzOworCisvKioKKyAqIHN0cnVjdCBpZGVfcG9ydF9vcHMgLSBJREUgcG9ydCBvcGVyYXRpb25zCisgKgorICogQGluaXRfZGV2OgkJaG9zdCBzcGVjaWZpYyBpbml0aWFsaXphdGlvbiBvZiBhIGRldmljZQorICogQHNldF9waW9fbW9kZToJcm91dGluZSB0byBwcm9ncmFtIGhvc3QgZm9yIFBJTyBtb2RlCisgKiBAc2V0X2RtYV9tb2RlOglyb3V0aW5lIHRvIHByb2dyYW0gaG9zdCBmb3IgRE1BIG1vZGUKKyAqIEBzZWxlY3Rwcm9jOgkJdHdlYWtzIGhhcmR3YXJlIHRvIHNlbGVjdCBkcml2ZQorICogQHJlc2V0X3BvbGw6CQljaGlwc2V0IHBvbGxpbmcgYmFzZWQgb24gaGJhIHNwZWNpZmljcworICogQHByZV9yZXNldDoJCWNoaXBzZXQgc3BlY2lmaWMgY2hhbmdlcyB0byBkZWZhdWx0IGZvciBkZXZpY2UtaGJhIHJlc2V0cworICogQHJlc2V0cHJvYzoJCXJvdXRpbmUgdG8gcmVzZXQgY29udHJvbGxlciBhZnRlciBhIGRpc2sgcmVzZXQKKyAqIEBtYXNrcHJvYzoJCXNwZWNpYWwgaG9zdCBtYXNraW5nIGZvciBkcml2ZSBzZWxlY3Rpb24KKyAqIEBxdWlya3Byb2M6CQljaGVjayBob3N0J3MgZHJpdmUgcXVpcmsgbGlzdAorICogQGNsZWFyX2lycToJCWNsZWFyIElSUQorICoKKyAqIEBtZG1hX2ZpbHRlcjoJZmlsdGVyIE1ETUEgbW9kZXMKKyAqIEB1ZG1hX2ZpbHRlcjoJZmlsdGVyIFVETUEgbW9kZXMKKyAqCisgKiBAY2FibGVfZGV0ZWN0OglkZXRlY3QgY2FibGUgdHlwZQorICovCitzdHJ1Y3QgaWRlX3BvcnRfb3BzIHsKKwl2b2lkCSgqaW5pdF9kZXYpKGlkZV9kcml2ZV90ICopOworCXZvaWQJKCpzZXRfcGlvX21vZGUpKGlkZV9kcml2ZV90ICosIGNvbnN0IHU4KTsKKwl2b2lkCSgqc2V0X2RtYV9tb2RlKShpZGVfZHJpdmVfdCAqLCBjb25zdCB1OCk7CisJdm9pZAkoKnNlbGVjdHByb2MpKGlkZV9kcml2ZV90ICopOworCWludAkoKnJlc2V0X3BvbGwpKGlkZV9kcml2ZV90ICopOworCXZvaWQJKCpwcmVfcmVzZXQpKGlkZV9kcml2ZV90ICopOworCXZvaWQJKCpyZXNldHByb2MpKGlkZV9kcml2ZV90ICopOworCXZvaWQJKCptYXNrcHJvYykoaWRlX2RyaXZlX3QgKiwgaW50KTsKKwl2b2lkCSgqcXVpcmtwcm9jKShpZGVfZHJpdmVfdCAqKTsKKwl2b2lkCSgqY2xlYXJfaXJxKShpZGVfZHJpdmVfdCAqKTsKKworCXU4CSgqbWRtYV9maWx0ZXIpKGlkZV9kcml2ZV90ICopOworCXU4CSgqdWRtYV9maWx0ZXIpKGlkZV9kcml2ZV90ICopOworCisJdTgJKCpjYWJsZV9kZXRlY3QpKHN0cnVjdCBod2lmX3MgKik7Cit9OworCitzdHJ1Y3QgaWRlX2RtYV9vcHMgeworCXZvaWQJKCpkbWFfaG9zdF9zZXQpKHN0cnVjdCBpZGVfZHJpdmVfcyAqLCBpbnQpOworCWludAkoKmRtYV9zZXR1cCkoc3RydWN0IGlkZV9kcml2ZV9zICopOworCXZvaWQJKCpkbWFfZXhlY19jbWQpKHN0cnVjdCBpZGVfZHJpdmVfcyAqLCB1OCk7CisJdm9pZAkoKmRtYV9zdGFydCkoc3RydWN0IGlkZV9kcml2ZV9zICopOworCWludAkoKmRtYV9lbmQpKHN0cnVjdCBpZGVfZHJpdmVfcyAqKTsKKwlpbnQJKCpkbWFfdGVzdF9pcnEpKHN0cnVjdCBpZGVfZHJpdmVfcyAqKTsKKwl2b2lkCSgqZG1hX2xvc3RfaXJxKShzdHJ1Y3QgaWRlX2RyaXZlX3MgKik7CisJdm9pZAkoKmRtYV90aW1lb3V0KShzdHJ1Y3QgaWRlX2RyaXZlX3MgKik7Cit9OworCitzdHJ1Y3QgaWRlX2hvc3Q7CisKK3R5cGVkZWYgc3RydWN0IGh3aWZfcyB7CisJc3RydWN0IGh3aWZfcyAqbmV4dDsJCS8qIGZvciBsaW5rZWQtbGlzdCBpbiBpZGVfaHdncm91cF90ICovCisJc3RydWN0IGh3aWZfcyAqbWF0ZTsJCS8qIG90aGVyIGh3aWYgZnJvbSBzYW1lIFBDSSBjaGlwICovCisJc3RydWN0IGh3Z3JvdXBfcyAqaHdncm91cDsJLyogYWN0dWFsbHkgKGlkZV9od2dyb3VwX3QgKikgKi8KKwlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnByb2M7CS8qIC9wcm9jL2lkZS8gZGlyZWN0b3J5IGVudHJ5ICovCisKKwlzdHJ1Y3QgaWRlX2hvc3QgKmhvc3Q7CisKKwljaGFyIG5hbWVbNl07CQkJLyogbmFtZSBvZiBpbnRlcmZhY2UsIGVnLiAiaWRlMCIgKi8KKworCXN0cnVjdCBpZGVfaW9fcG9ydHMJaW9fcG9ydHM7CisKKwl1bnNpZ25lZCBsb25nCXNhdGFfc2NyW1NBVEFfTlJfUE9SVFNdOworCisJaWRlX2RyaXZlX3QJZHJpdmVzW01BWF9EUklWRVNdOwkvKiBkcml2ZSBpbmZvICovCisKKwl1OCBtYWpvcjsJLyogb3VyIG1ham9yIG51bWJlciAqLworCXU4IGluZGV4OwkvKiAwIGZvciBpZGUwOyAxIGZvciBpZGUxOyAuLi4gKi8KKwl1OCBjaGFubmVsOwkvKiBmb3IgZHVhbC1wb3J0IGNoaXBzOiAwPXByaW1hcnksIDE9c2Vjb25kYXJ5ICovCisKKwl1MzIgaG9zdF9mbGFnczsKKworCXU4IHBpb19tYXNrOworCisJdTggdWx0cmFfbWFzazsKKwl1OCBtd2RtYV9tYXNrOworCXU4IHN3ZG1hX21hc2s7CisKKwl1OCBjYmw7CQkvKiBjYWJsZSB0eXBlICovCisKKwlod2lmX2NoaXBzZXRfdCBjaGlwc2V0OwkvKiBzdWItbW9kdWxlIGZvciB0dW5pbmcuLiAqLworCisJc3RydWN0IGRldmljZSAqZGV2OworCisJaWRlX2Fja19pbnRyX3QgKmFja19pbnRyOworCisJdm9pZCAoKnJ3X2Rpc2spKGlkZV9kcml2ZV90ICosIHN0cnVjdCByZXF1ZXN0ICopOworCisJY29uc3Qgc3RydWN0IGlkZV90cF9vcHMJCSp0cF9vcHM7CisJY29uc3Qgc3RydWN0IGlkZV9wb3J0X29wcwkqcG9ydF9vcHM7CisJY29uc3Qgc3RydWN0IGlkZV9kbWFfb3BzCSpkbWFfb3BzOworCisJLyogZG1hIHBoeXNpY2FsIHJlZ2lvbiBkZXNjcmlwdG9yIHRhYmxlIChjcHUgdmlldykgKi8KKwl1bnNpZ25lZCBpbnQJKmRtYXRhYmxlX2NwdTsKKwkvKiBkbWEgcGh5c2ljYWwgcmVnaW9uIGRlc2NyaXB0b3IgdGFibGUgKGRtYSB2aWV3KSAqLworCWRtYV9hZGRyX3QJZG1hdGFibGVfZG1hOworCisJLyogbWF4aW11bSBudW1iZXIgb2YgUFJEIHRhYmxlIGVudHJpZXMgKi8KKwlpbnQgcHJkX21heF9uZW50czsKKwkvKiBQUkQgZW50cnkgc2l6ZSBpbiBieXRlcyAqLworCWludCBwcmRfZW50X3NpemU7CisKKwkvKiBTY2F0dGVyLWdhdGhlciBsaXN0IHVzZWQgdG8gYnVpbGQgdGhlIGFib3ZlICovCisJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZ190YWJsZTsKKwlpbnQgc2dfbWF4X25lbnRzOwkJLyogTWF4aW11bSBudW1iZXIgb2YgZW50cmllcyBpbiBpdCAqLworCWludCBzZ19uZW50czsJCQkvKiBDdXJyZW50IG51bWJlciBvZiBlbnRyaWVzIGluIGl0ICovCisJaW50IHNnX2RtYV9kaXJlY3Rpb247CQkvKiBkbWEgdHJhbnNmZXIgZGlyZWN0aW9uICovCisKKwkvKiBkYXRhIHBoYXNlIG9mIHRoZSBhY3RpdmUgY29tbWFuZCAoY3VycmVudGx5IG9ubHkgdmFsaWQgZm9yIFBJTy9ETUEpICovCisJaW50CQlkYXRhX3BoYXNlOworCisJc3RydWN0IGlkZV90YXNrX3MgdGFzazsJCS8qIGN1cnJlbnQgY29tbWFuZCAqLworCisJdW5zaWduZWQgaW50IG5zZWN0OworCXVuc2lnbmVkIGludCBubGVmdDsKKwlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKmN1cnNnOworCXVuc2lnbmVkIGludCBjdXJzZ19vZnM7CisKKwlpbnQJCXJxc2l6ZTsJCS8qIG1heCBzZWN0b3JzIHBlciByZXF1ZXN0ICovCisJaW50CQlpcnE7CQkvKiBvdXIgaXJxIG51bWJlciAqLworCisJdW5zaWduZWQgbG9uZwlkbWFfYmFzZTsJLyogYmFzZSBhZGRyIGZvciBkbWEgcG9ydHMgKi8KKworCXVuc2lnbmVkIGxvbmcJY29uZmlnX2RhdGE7CS8qIGZvciB1c2UgYnkgY2hpcHNldC1zcGVjaWZpYyBjb2RlICovCisJdW5zaWduZWQgbG9uZwlzZWxlY3RfZGF0YTsJLyogZm9yIHVzZSBieSBjaGlwc2V0LXNwZWNpZmljIGNvZGUgKi8KKworCXVuc2lnbmVkIGxvbmcJZXh0cmFfYmFzZTsJLyogZXh0cmEgYWRkciBmb3IgZG1hIHBvcnRzICovCisJdW5zaWduZWQJZXh0cmFfcG9ydHM7CS8qIG51bWJlciBvZiBleHRyYSBkbWEgcG9ydHMgKi8KKworCXVuc2lnbmVkCXByZXNlbnQgICAgOiAxOwkvKiB0aGlzIGludGVyZmFjZSBleGlzdHMgKi8KKwl1bnNpZ25lZAlzZXJpYWxpemVkIDogMTsJLyogc2VyaWFsaXplZCBhbGwgY2hhbm5lbCBvcGVyYXRpb24gKi8KKwl1bnNpZ25lZAlzaGFyaW5nX2lycTogMTsJLyogMSA9IHNoYXJpbmcgaXJxIHdpdGggYW5vdGhlciBod2lmICovCisJdW5zaWduZWQJc2dfbWFwcGVkICA6IDE7CS8qIHNnX3RhYmxlIGFuZCBzZ19uZW50cyBhcmUgcmVhZHkgKi8KKworCXN0cnVjdCBkZXZpY2UJCWdlbmRldjsKKwlzdHJ1Y3QgZGV2aWNlCQkqcG9ydGRldjsKKworCXN0cnVjdCBjb21wbGV0aW9uIGdlbmRldl9yZWxfY29tcDsgLyogVG8gZGVhbCB3aXRoIGRldmljZSByZWxlYXNlKCkgKi8KKworCXZvaWQJCSpod2lmX2RhdGE7CS8qIGV4dHJhIGh3aWYgZGF0YSAqLworCisjaWZkZWYgQ09ORklHX0JMS19ERVZfSURFQUNQSQorCXN0cnVjdCBpZGVfYWNwaV9od2lmX2xpbmsgKmFjcGlkYXRhOworI2VuZGlmCit9IF9fX19jYWNoZWxpbmVfaW50ZXJub2RlYWxpZ25lZF9pbl9zbXAgaWRlX2h3aWZfdDsKKworI2RlZmluZSBNQVhfSE9TVF9QT1JUUyA0CisKK3N0cnVjdCBpZGVfaG9zdCB7CisJaWRlX2h3aWZfdAkqcG9ydHNbTUFYX0hPU1RfUE9SVFNdOworCXVuc2lnbmVkIGludAluX3BvcnRzOworCXN0cnVjdCBkZXZpY2UJKmRldlsyXTsKKwl1bnNpZ25lZCBpbnQJKCppbml0X2NoaXBzZXQpKHN0cnVjdCBwY2lfZGV2ICopOworCXVuc2lnbmVkIGxvbmcJaG9zdF9mbGFnczsKKwl2b2lkCQkqaG9zdF9wcml2OworfTsKKworLyoKKyAqICBpbnRlcm5hbCBpZGUgaW50ZXJydXB0IGhhbmRsZXIgdHlwZQorICovCit0eXBlZGVmIGlkZV9zdGFydHN0b3BfdCAoaWRlX2hhbmRsZXJfdCkoaWRlX2RyaXZlX3QgKik7Cit0eXBlZGVmIGludCAoaWRlX2V4cGlyeV90KShpZGVfZHJpdmVfdCAqKTsKKworLyogdXNlZCBieSBpZGUtY2QsIGlkZS1mbG9wcHksIGV0Yy4gKi8KK3R5cGVkZWYgdm9pZCAoeGZlcl9mdW5jX3QpKGlkZV9kcml2ZV90ICosIHN0cnVjdCByZXF1ZXN0ICpycSwgdm9pZCAqLCB1bnNpZ25lZCk7CisKK3R5cGVkZWYgc3RydWN0IGh3Z3JvdXBfcyB7CisJCS8qIGlycSBoYW5kbGVyLCBpZiBhY3RpdmUgKi8KKwlpZGVfc3RhcnRzdG9wX3QJKCpoYW5kbGVyKShpZGVfZHJpdmVfdCAqKTsKKworCQkvKiBCT09MOiBwcm90ZWN0cyBhbGwgZmllbGRzIGJlbG93ICovCisJdm9sYXRpbGUgaW50IGJ1c3k7CisJCS8qIEJPT0w6IHdha2UgdXMgdXAgb24gdGltZXIgZXhwaXJ5ICovCisJdW5zaWduZWQgaW50IHNsZWVwaW5nCTogMTsKKwkJLyogQk9PTDogcG9sbGluZyBhY3RpdmUgJiBwb2xsX3RpbWVvdXQgZmllbGQgdmFsaWQgKi8KKwl1bnNpZ25lZCBpbnQgcG9sbGluZwk6IDE7CisKKwkJLyogY3VycmVudCBkcml2ZSAqLworCWlkZV9kcml2ZV90ICpkcml2ZTsKKwkJLyogcHRyIHRvIGN1cnJlbnQgaHdpZiBpbiBsaW5rZWQtbGlzdCAqLworCWlkZV9od2lmX3QgKmh3aWY7CisKKwkJLyogY3VycmVudCByZXF1ZXN0ICovCisJc3RydWN0IHJlcXVlc3QgKnJxOworCisJCS8qIGZhaWxzYWZlIHRpbWVyICovCisJc3RydWN0IHRpbWVyX2xpc3QgdGltZXI7CisJCS8qIHRpbWVvdXQgdmFsdWUgZHVyaW5nIGxvbmcgcG9sbHMgKi8KKwl1bnNpZ25lZCBsb25nIHBvbGxfdGltZW91dDsKKwkJLyogcXVlcmllZCB1cG9uIHRpbWVvdXRzICovCisJaW50ICgqZXhwaXJ5KShpZGVfZHJpdmVfdCAqKTsKKworCWludCByZXFfZ2VuOworCWludCByZXFfZ2VuX3RpbWVyOworfSBpZGVfaHdncm91cF90OworCit0eXBlZGVmIHN0cnVjdCBpZGVfZHJpdmVyX3MgaWRlX2RyaXZlcl90OworCitleHRlcm4gc3RydWN0IG11dGV4IGlkZV9zZXR0aW5nX210eDsKKworLyoKKyAqIGNvbmZpZ3VyYWJsZSBkcml2ZSBzZXR0aW5ncworICovCisKKyNkZWZpbmUgRFNfU1lOQwkoMSA8PCAwKQorCitzdHJ1Y3QgaWRlX2RldnNldCB7CisJaW50CQkoKmdldCkoaWRlX2RyaXZlX3QgKik7CisJaW50CQkoKnNldCkoaWRlX2RyaXZlX3QgKiwgaW50KTsKKwl1bnNpZ25lZCBpbnQJZmxhZ3M7Cit9OworCisjZGVmaW5lIF9fREVWU0VUKF9mbGFncywgX2dldCwgX3NldCkgeyBcCisJLmZsYWdzCT0gX2ZsYWdzLCBcCisJLmdldAk9IF9nZXQsCVwKKwkuc2V0CT0gX3NldCwJXAorfQorCisjZGVmaW5lIGlkZV9kZXZzZXRfZ2V0KG5hbWUsIGZpZWxkKSBcCitzdGF0aWMgaW50IGdldF8jI25hbWUoaWRlX2RyaXZlX3QgKmRyaXZlKSBcCit7IFwKKwlyZXR1cm4gZHJpdmUtPmZpZWxkOyBcCit9CisKKyNkZWZpbmUgaWRlX2RldnNldF9zZXQobmFtZSwgZmllbGQpIFwKK3N0YXRpYyBpbnQgc2V0XyMjbmFtZShpZGVfZHJpdmVfdCAqZHJpdmUsIGludCBhcmcpIFwKK3sgXAorCWRyaXZlLT5maWVsZCA9IGFyZzsgXAorCXJldHVybiAwOyBcCit9CisKKyNkZWZpbmUgaWRlX2RldnNldF9nZXRfZmxhZyhuYW1lLCBmbGFnKSBcCitzdGF0aWMgaW50IGdldF8jI25hbWUoaWRlX2RyaXZlX3QgKmRyaXZlKSBcCit7IFwKKwlyZXR1cm4gISEoZHJpdmUtPmRldl9mbGFncyAmIGZsYWcpOyBcCit9CisKKyNkZWZpbmUgaWRlX2RldnNldF9zZXRfZmxhZyhuYW1lLCBmbGFnKSBcCitzdGF0aWMgaW50IHNldF8jI25hbWUoaWRlX2RyaXZlX3QgKmRyaXZlLCBpbnQgYXJnKSBcCit7IFwKKwlpZiAoYXJnKSBcCisJCWRyaXZlLT5kZXZfZmxhZ3MgfD0gZmxhZzsgXAorCWVsc2UgXAorCQlkcml2ZS0+ZGV2X2ZsYWdzICY9IH5mbGFnOyBcCisJcmV0dXJuIDA7IFwKK30KKworI2RlZmluZSBfX0lERV9ERVZTRVQoX25hbWUsIF9mbGFncywgX2dldCwgX3NldCkgXAorY29uc3Qgc3RydWN0IGlkZV9kZXZzZXQgaWRlX2RldnNldF8jI19uYW1lID0gXAorCV9fREVWU0VUKF9mbGFncywgX2dldCwgX3NldCkKKworI2RlZmluZSBJREVfREVWU0VUKF9uYW1lLCBfZmxhZ3MsIF9nZXQsIF9zZXQpIFwKK3N0YXRpYyBfX0lERV9ERVZTRVQoX25hbWUsIF9mbGFncywgX2dldCwgX3NldCkKKworI2RlZmluZSBpZGVfZGV2c2V0X3J3KF9uYW1lLCBfZnVuYykgXAorSURFX0RFVlNFVChfbmFtZSwgMCwgZ2V0XyMjX2Z1bmMsIHNldF8jI19mdW5jKQorCisjZGVmaW5lIGlkZV9kZXZzZXRfdyhfbmFtZSwgX2Z1bmMpIFwKK0lERV9ERVZTRVQoX25hbWUsIDAsIE5VTEwsIHNldF8jI19mdW5jKQorCisjZGVmaW5lIGlkZV9leHRfZGV2c2V0X3J3KF9uYW1lLCBfZnVuYykgXAorX19JREVfREVWU0VUKF9uYW1lLCAwLCBnZXRfIyNfZnVuYywgc2V0XyMjX2Z1bmMpCisKKyNkZWZpbmUgaWRlX2V4dF9kZXZzZXRfcndfc3luYyhfbmFtZSwgX2Z1bmMpIFwKK19fSURFX0RFVlNFVChfbmFtZSwgRFNfU1lOQywgZ2V0XyMjX2Z1bmMsIHNldF8jI19mdW5jKQorCisjZGVmaW5lIGlkZV9kZWNsX2RldnNldChfbmFtZSkgXAorZXh0ZXJuIGNvbnN0IHN0cnVjdCBpZGVfZGV2c2V0IGlkZV9kZXZzZXRfIyNfbmFtZQorCitpZGVfZGVjbF9kZXZzZXQoaW9fMzJiaXQpOworaWRlX2RlY2xfZGV2c2V0KGtlZXBzZXR0aW5ncyk7CitpZGVfZGVjbF9kZXZzZXQocGlvX21vZGUpOworaWRlX2RlY2xfZGV2c2V0KHVubWFza2lycSk7CitpZGVfZGVjbF9kZXZzZXQodXNpbmdfZG1hKTsKKworI2lmZGVmIENPTkZJR19JREVfUFJPQ19GUworLyoKKyAqIC9wcm9jL2lkZSBpbnRlcmZhY2UKKyAqLworCisjZGVmaW5lIGlkZV9kZXZzZXRfcndfZmllbGQoX25hbWUsIF9maWVsZCkgXAoraWRlX2RldnNldF9nZXQoX25hbWUsIF9maWVsZCk7IFwKK2lkZV9kZXZzZXRfc2V0KF9uYW1lLCBfZmllbGQpOyBcCitJREVfREVWU0VUKF9uYW1lLCBEU19TWU5DLCBnZXRfIyNfbmFtZSwgc2V0XyMjX25hbWUpCisKKyNkZWZpbmUgaWRlX2RldnNldF9yd19mbGFnKF9uYW1lLCBfZmllbGQpIFwKK2lkZV9kZXZzZXRfZ2V0X2ZsYWcoX25hbWUsIF9maWVsZCk7IFwKK2lkZV9kZXZzZXRfc2V0X2ZsYWcoX25hbWUsIF9maWVsZCk7IFwKK0lERV9ERVZTRVQoX25hbWUsIERTX1NZTkMsIGdldF8jI19uYW1lLCBzZXRfIyNfbmFtZSkKKworc3RydWN0IGlkZV9wcm9jX2RldnNldCB7CisJY29uc3QgY2hhcgkJKm5hbWU7CisJY29uc3Qgc3RydWN0IGlkZV9kZXZzZXQJKnNldHRpbmc7CisJaW50CQkJbWluLCBtYXg7CisJaW50CQkJKCptdWxmKShpZGVfZHJpdmVfdCAqKTsKKwlpbnQJCQkoKmRpdmYpKGlkZV9kcml2ZV90ICopOworfTsKKworI2RlZmluZSBfX0lERV9QUk9DX0RFVlNFVChfbmFtZSwgX21pbiwgX21heCwgX211bGYsIF9kaXZmKSB7IFwKKwkubmFtZSA9IF9fc3RyaW5naWZ5KF9uYW1lKSwgXAorCS5zZXR0aW5nID0gJmlkZV9kZXZzZXRfIyNfbmFtZSwgXAorCS5taW4gPSBfbWluLCBcCisJLm1heCA9IF9tYXgsIFwKKwkubXVsZiA9IF9tdWxmLCBcCisJLmRpdmYgPSBfZGl2ZiwgXAorfQorCisjZGVmaW5lIElERV9QUk9DX0RFVlNFVChfbmFtZSwgX21pbiwgX21heCkgXAorX19JREVfUFJPQ19ERVZTRVQoX25hbWUsIF9taW4sIF9tYXgsIE5VTEwsIE5VTEwpCisKK3R5cGVkZWYgc3RydWN0IHsKKwljb25zdCBjaGFyCSpuYW1lOworCW1vZGVfdAkJbW9kZTsKKwlyZWFkX3Byb2NfdAkqcmVhZF9wcm9jOworCXdyaXRlX3Byb2NfdAkqd3JpdGVfcHJvYzsKK30gaWRlX3Byb2NfZW50cnlfdDsKKwordm9pZCBwcm9jX2lkZV9jcmVhdGUodm9pZCk7Cit2b2lkIHByb2NfaWRlX2Rlc3Ryb3kodm9pZCk7Cit2b2lkIGlkZV9wcm9jX3JlZ2lzdGVyX3BvcnQoaWRlX2h3aWZfdCAqKTsKK3ZvaWQgaWRlX3Byb2NfcG9ydF9yZWdpc3Rlcl9kZXZpY2VzKGlkZV9od2lmX3QgKik7Cit2b2lkIGlkZV9wcm9jX3VucmVnaXN0ZXJfZGV2aWNlKGlkZV9kcml2ZV90ICopOwordm9pZCBpZGVfcHJvY191bnJlZ2lzdGVyX3BvcnQoaWRlX2h3aWZfdCAqKTsKK3ZvaWQgaWRlX3Byb2NfcmVnaXN0ZXJfZHJpdmVyKGlkZV9kcml2ZV90ICosIGlkZV9kcml2ZXJfdCAqKTsKK3ZvaWQgaWRlX3Byb2NfdW5yZWdpc3Rlcl9kcml2ZXIoaWRlX2RyaXZlX3QgKiwgaWRlX2RyaXZlcl90ICopOworCityZWFkX3Byb2NfdCBwcm9jX2lkZV9yZWFkX2NhcGFjaXR5OworcmVhZF9wcm9jX3QgcHJvY19pZGVfcmVhZF9nZW9tZXRyeTsKKworLyoKKyAqIFN0YW5kYXJkIGV4aXQgc3R1ZmY6CisgKi8KKyNkZWZpbmUgUFJPQ19JREVfUkVBRF9SRVRVUk4ocGFnZSxzdGFydCxvZmYsY291bnQsZW9mLGxlbikgXAorewkJCQkJXAorCWxlbiAtPSBvZmY7CQkJXAorCWlmIChsZW4gPCBjb3VudCkgewkJXAorCQkqZW9mID0gMTsJCVwKKwkJaWYgKGxlbiA8PSAwKQkJXAorCQkJcmV0dXJuIDA7CVwKKwl9IGVsc2UJCQkJXAorCQlsZW4gPSBjb3VudDsJCVwKKwkqc3RhcnQgPSBwYWdlICsgb2ZmOwkJXAorCXJldHVybiBsZW47CQkJXAorfQorI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCBwcm9jX2lkZV9jcmVhdGUodm9pZCkgeyA7IH0KK3N0YXRpYyBpbmxpbmUgdm9pZCBwcm9jX2lkZV9kZXN0cm95KHZvaWQpIHsgOyB9CitzdGF0aWMgaW5saW5lIHZvaWQgaWRlX3Byb2NfcmVnaXN0ZXJfcG9ydChpZGVfaHdpZl90ICpod2lmKSB7IDsgfQorc3RhdGljIGlubGluZSB2b2lkIGlkZV9wcm9jX3BvcnRfcmVnaXN0ZXJfZGV2aWNlcyhpZGVfaHdpZl90ICpod2lmKSB7IDsgfQorc3RhdGljIGlubGluZSB2b2lkIGlkZV9wcm9jX3VucmVnaXN0ZXJfZGV2aWNlKGlkZV9kcml2ZV90ICpkcml2ZSkgeyA7IH0KK3N0YXRpYyBpbmxpbmUgdm9pZCBpZGVfcHJvY191bnJlZ2lzdGVyX3BvcnQoaWRlX2h3aWZfdCAqaHdpZikgeyA7IH0KK3N0YXRpYyBpbmxpbmUgdm9pZCBpZGVfcHJvY19yZWdpc3Rlcl9kcml2ZXIoaWRlX2RyaXZlX3QgKmRyaXZlLCBpZGVfZHJpdmVyX3QgKmRyaXZlcikgeyA7IH0KK3N0YXRpYyBpbmxpbmUgdm9pZCBpZGVfcHJvY191bnJlZ2lzdGVyX2RyaXZlcihpZGVfZHJpdmVfdCAqZHJpdmUsIGlkZV9kcml2ZXJfdCAqZHJpdmVyKSB7IDsgfQorI2RlZmluZSBQUk9DX0lERV9SRUFEX1JFVFVSTihwYWdlLHN0YXJ0LG9mZixjb3VudCxlb2YsbGVuKSByZXR1cm4gMDsKKyNlbmRpZgorCitlbnVtIHsKKwkvKiBlbnRlci9leGl0IGZ1bmN0aW9ucyAqLworCUlERV9EQkdfRlVOQyA9CQkJKDEgPDwgMCksCisJLyogc2Vuc2Uga2V5L2FzYyBoYW5kbGluZyAqLworCUlERV9EQkdfU0VOU0UgPQkJCSgxIDw8IDEpLAorCS8qIHBhY2tldCBjb21tYW5kcyBoYW5kbGluZyAqLworCUlERV9EQkdfUEMgPQkJCSgxIDw8IDIpLAorCS8qIHJlcXVlc3QgaGFuZGxpbmcgKi8KKwlJREVfREJHX1JRID0JCQkoMSA8PCAzKSwKKwkvKiBkcml2ZXIgcHJvYmluZy9zZXR1cCAqLworCUlERV9EQkdfUFJPQkUgPQkJCSgxIDw8IDQpLAorfTsKKworLyogRFJWX05BTUUgaGFzIHRvIGJlIGRlZmluZWQgaW4gdGhlIGRyaXZlciBiZWZvcmUgdXNpbmcgdGhlIG1hY3JvIGJlbG93ICovCisjZGVmaW5lIF9faWRlX2RlYnVnX2xvZyhsdmwsIGZtdCwgYXJncy4uLikJCQlcCit7CQkJCQkJCQlcCisJaWYgKHVubGlrZWx5KGRyaXZlLT5kZWJ1Z19tYXNrICYgbHZsKSkJCQlcCisJCXByaW50ayhLRVJOX0lORk8gRFJWX05BTUUgIjogIiBmbXQsICMjIGFyZ3MpOwlcCit9CisKKy8qCisgKiBQb3dlciBNYW5hZ2VtZW50IHN0YXRlIG1hY2hpbmUgKHJxLT5wbS0+cG1fc3RlcCkuCisgKgorICogRm9yIGVhY2ggc3RlcCwgdGhlIGNvcmUgY2FsbHMgaWRlX3N0YXJ0X3Bvd2VyX3N0ZXAoKSBmaXJzdC4KKyAqIFRoaXMgY2FuIHJldHVybjoKKyAqCS0gaWRlX3N0b3BwZWQgOglJbiB0aGlzIGNhc2UsIHRoZSBjb3JlIGNhbGxzIHVzIGJhY2sgYWdhaW4gdW5sZXNzCisgKgkJCXN0ZXAgaGF2ZSBiZWVuIHNldCB0byBpZGVfcG93ZXJfc3RhdGVfY29tcGxldGVkLgorICoJLSBpZGVfc3RhcnRlZCA6CUluIHRoaXMgY2FzZSwgdGhlIGNoYW5uZWwgaXMgbGVmdCBidXN5IHVudGlsIGFuCisgKgkJCWFzeW5jIGV2ZW50IChpbnRlcnJ1cHQpIG9jY3Vycy4KKyAqIFR5cGljYWxseSwgaWRlX3N0YXJ0X3Bvd2VyX3N0ZXAoKSB3aWxsIGlzc3VlIGEgdGFza2ZpbGUgcmVxdWVzdCB3aXRoCisgKiBkb19yd190YXNrZmlsZSgpLgorICoKKyAqIFVwb24gcmVjZXB0aW9uIG9mIHRoZSBpbnRlcnJ1cHQsIHRoZSBjb3JlIHdpbGwgY2FsbCBpZGVfY29tcGxldGVfcG93ZXJfc3RlcCgpCisgKiB3aXRoIHRoZSBlcnJvciBjb2RlIGlmIGFueS4gVGhpcyByb3V0aW5lIHNob3VsZCB1cGRhdGUgdGhlIHN0ZXAgdmFsdWUKKyAqIGFuZCByZXR1cm4uIEl0IHNob3VsZCBub3Qgc3RhcnQgYSBuZXcgcmVxdWVzdC4gVGhlIGNvcmUgd2lsbCBjYWxsCisgKiBpZGVfc3RhcnRfcG93ZXJfc3RlcCgpIGZvciB0aGUgbmV3IHN0ZXAgdmFsdWUsIHVubGVzcyBzdGVwIGhhdmUgYmVlbgorICogc2V0IHRvIElERV9QTV9DT01QTEVURUQuCisgKi8KK2VudW0geworCUlERV9QTV9TVEFSVF9TVVNQRU5ELAorCUlERV9QTV9GTFVTSF9DQUNIRQk9IElERV9QTV9TVEFSVF9TVVNQRU5ELAorCUlERV9QTV9TVEFOREJZLAorCisJSURFX1BNX1NUQVJUX1JFU1VNRSwKKwlJREVfUE1fUkVTVE9SRV9QSU8JPSBJREVfUE1fU1RBUlRfUkVTVU1FLAorCUlERV9QTV9JRExFLAorCUlERV9QTV9SRVNUT1JFX0RNQSwKKworCUlERV9QTV9DT01QTEVURUQsCit9OworCisvKgorICogU3ViZHJpdmVycyBzdXBwb3J0LgorICoKKyAqIFRoZSBnZW5kcml2ZXIub3duZXIgZmllbGQgc2hvdWxkIGJlIHNldCB0byB0aGUgbW9kdWxlIG93bmVyIG9mIHRoaXMgZHJpdmVyLgorICogVGhlIGdlbmRyaXZlci5uYW1lIGZpZWxkIHNob3VsZCBiZSBzZXQgdG8gdGhlIG5hbWUgb2YgdGhpcyBkcml2ZXIKKyAqLworc3RydWN0IGlkZV9kcml2ZXJfcyB7CisJY29uc3QgY2hhcgkJCSp2ZXJzaW9uOworCWlkZV9zdGFydHN0b3BfdAkoKmRvX3JlcXVlc3QpKGlkZV9kcml2ZV90ICosIHN0cnVjdCByZXF1ZXN0ICosIHNlY3Rvcl90KTsKKwlpbnQJCSgqZW5kX3JlcXVlc3QpKGlkZV9kcml2ZV90ICosIGludCwgaW50KTsKKwlpZGVfc3RhcnRzdG9wX3QJKCplcnJvcikoaWRlX2RyaXZlX3QgKiwgc3RydWN0IHJlcXVlc3QgKnJxLCB1OCwgdTgpOworCXN0cnVjdCBkZXZpY2VfZHJpdmVyCWdlbl9kcml2ZXI7CisJaW50CQkoKnByb2JlKShpZGVfZHJpdmVfdCAqKTsKKwl2b2lkCQkoKnJlbW92ZSkoaWRlX2RyaXZlX3QgKik7CisJdm9pZAkJKCpyZXN1bWUpKGlkZV9kcml2ZV90ICopOworCXZvaWQJCSgqc2h1dGRvd24pKGlkZV9kcml2ZV90ICopOworI2lmZGVmIENPTkZJR19JREVfUFJPQ19GUworCWlkZV9wcm9jX2VudHJ5X3QgKgkJKCpwcm9jX2VudHJpZXMpKGlkZV9kcml2ZV90ICopOworCWNvbnN0IHN0cnVjdCBpZGVfcHJvY19kZXZzZXQgKgkoKnByb2NfZGV2c2V0cykoaWRlX2RyaXZlX3QgKik7CisjZW5kaWYKK307CisKKyNkZWZpbmUgdG9faWRlX2RyaXZlcihkcnYpIGNvbnRhaW5lcl9vZihkcnYsIGlkZV9kcml2ZXJfdCwgZ2VuX2RyaXZlcikKKworaW50IGlkZV9kZXZpY2VfZ2V0KGlkZV9kcml2ZV90ICopOwordm9pZCBpZGVfZGV2aWNlX3B1dChpZGVfZHJpdmVfdCAqKTsKKworc3RydWN0IGlkZV9pb2N0bF9kZXZzZXQgeworCXVuc2lnbmVkIGludAlnZXRfaW9jdGw7CisJdW5zaWduZWQgaW50CXNldF9pb2N0bDsKKwljb25zdCBzdHJ1Y3QgaWRlX2RldnNldCAqc2V0dGluZzsKK307CisKK2ludCBpZGVfc2V0dGluZ19pb2N0bChpZGVfZHJpdmVfdCAqLCBzdHJ1Y3QgYmxvY2tfZGV2aWNlICosIHVuc2lnbmVkIGludCwKKwkJICAgICAgdW5zaWduZWQgbG9uZywgY29uc3Qgc3RydWN0IGlkZV9pb2N0bF9kZXZzZXQgKik7CisKK2ludCBnZW5lcmljX2lkZV9pb2N0bChpZGVfZHJpdmVfdCAqLCBzdHJ1Y3QgZmlsZSAqLCBzdHJ1Y3QgYmxvY2tfZGV2aWNlICosCisJCSAgICAgIHVuc2lnbmVkLCB1bnNpZ25lZCBsb25nKTsKKworZXh0ZXJuIGludCBpZGVfdmxiX2NsazsKK2V4dGVybiBpbnQgaWRlX3BjaV9jbGs7CisKK2V4dGVybiBpbnQgaWRlX2VuZF9yZXF1ZXN0IChpZGVfZHJpdmVfdCAqZHJpdmUsIGludCB1cHRvZGF0ZSwgaW50IG5yc2Vjcyk7CitpbnQgaWRlX2VuZF9kZXF1ZXVlZF9yZXF1ZXN0KGlkZV9kcml2ZV90ICpkcml2ZSwgc3RydWN0IHJlcXVlc3QgKnJxLAorCQkJICAgICBpbnQgdXB0b2RhdGUsIGludCBucl9zZWN0b3JzKTsKKworZXh0ZXJuIHZvaWQgaWRlX3NldF9oYW5kbGVyIChpZGVfZHJpdmVfdCAqZHJpdmUsIGlkZV9oYW5kbGVyX3QgKmhhbmRsZXIsIHVuc2lnbmVkIGludCB0aW1lb3V0LCBpZGVfZXhwaXJ5X3QgKmV4cGlyeSk7CisKK3ZvaWQgaWRlX2V4ZWN1dGVfY29tbWFuZChpZGVfZHJpdmVfdCAqLCB1OCwgaWRlX2hhbmRsZXJfdCAqLCB1bnNpZ25lZCBpbnQsCisJCQkgaWRlX2V4cGlyeV90ICopOworCit2b2lkIGlkZV9leGVjdXRlX3BrdF9jbWQoaWRlX2RyaXZlX3QgKik7CisKK3ZvaWQgaWRlX3BhZF90cmFuc2ZlcihpZGVfZHJpdmVfdCAqLCBpbnQsIGludCk7CisKK2lkZV9zdGFydHN0b3BfdCBfX2lkZV9lcnJvcihpZGVfZHJpdmVfdCAqLCBzdHJ1Y3QgcmVxdWVzdCAqLCB1OCwgdTgpOworCitpZGVfc3RhcnRzdG9wX3QgaWRlX2Vycm9yIChpZGVfZHJpdmVfdCAqZHJpdmUsIGNvbnN0IGNoYXIgKm1zZywgYnl0ZSBzdGF0KTsKKwordm9pZCBpZGVfZml4X2RyaXZlaWQodTE2ICopOworCitleHRlcm4gdm9pZCBpZGVfZml4c3RyaW5nKHU4ICosIGNvbnN0IGludCwgY29uc3QgaW50KTsKKworaW50IGlkZV9idXN5X3NsZWVwKGlkZV9od2lmX3QgKiwgdW5zaWduZWQgbG9uZywgaW50KTsKKworaW50IGlkZV93YWl0X3N0YXQoaWRlX3N0YXJ0c3RvcF90ICosIGlkZV9kcml2ZV90ICosIHU4LCB1OCwgdW5zaWduZWQgbG9uZyk7CisKK2V4dGVybiBpZGVfc3RhcnRzdG9wX3QgaWRlX2RvX3Jlc2V0IChpZGVfZHJpdmVfdCAqKTsKKworZXh0ZXJuIGludCBpZGVfZGV2c2V0X2V4ZWN1dGUoaWRlX2RyaXZlX3QgKmRyaXZlLAorCQkJICAgICAgY29uc3Qgc3RydWN0IGlkZV9kZXZzZXQgKnNldHRpbmcsIGludCBhcmcpOworCitleHRlcm4gdm9pZCBpZGVfZG9fZHJpdmVfY21kKGlkZV9kcml2ZV90ICosIHN0cnVjdCByZXF1ZXN0ICopOworCitleHRlcm4gdm9pZCBpZGVfZW5kX2RyaXZlX2NtZChpZGVfZHJpdmVfdCAqLCB1OCwgdTgpOworCiB2b2lkIGlkZV90Zl9kdW1wKGNvbnN0IGNoYXIgKiwgc3RydWN0IGlkZV90YXNrZmlsZSAqKTsKIAogdm9pZCBpZGVfZXhlY19jb21tYW5kKGlkZV9od2lmX3QgKiwgdTgpOwpAQCAtMTE1MCw2ICsxMjI5LDEzIEBACiAKIHZvaWQgaWRlX2luaXRfcGMoc3RydWN0IGlkZV9hdGFwaV9wYyAqKTsKIAorLyogRGlzayBoZWFkIHBhcmtpbmcgKi8KK2V4dGVybiB3YWl0X3F1ZXVlX2hlYWRfdCBpZGVfcGFya193cTsKK3NzaXplX3QgaWRlX3Bhcmtfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkgICAgICBjaGFyICpidWYpOworc3NpemVfdCBpZGVfcGFya19zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkgICAgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVuKTsKKwogLyoKICAqIFNwZWNpYWwgcmVxdWVzdHMgZm9yIGlkZS10YXBlIGJsb2NrIGRldmljZSBzdHJhdGVneSByb3V0aW5lLgogICoKQEAgLTExNjMsMjQgKzEyNDksMjIgQEAKIAlSRVFfSURFVEFQRV9XUklURQk9ICgxIDw8IDMpLAogfTsKIAotdm9pZCBpZGVfcXVldWVfcGNfaGVhZChpZGVfZHJpdmVfdCAqLCBzdHJ1Y3QgZ2VuZGlzayAqLCBzdHJ1Y3QgaWRlX2F0YXBpX3BjICosCi0JCSAgICAgICBzdHJ1Y3QgcmVxdWVzdCAqKTsKIGludCBpZGVfcXVldWVfcGNfdGFpbChpZGVfZHJpdmVfdCAqLCBzdHJ1Y3QgZ2VuZGlzayAqLCBzdHJ1Y3QgaWRlX2F0YXBpX3BjICopOwogCiBpbnQgaWRlX2RvX3Rlc3RfdW5pdF9yZWFkeShpZGVfZHJpdmVfdCAqLCBzdHJ1Y3QgZ2VuZGlzayAqKTsKIGludCBpZGVfZG9fc3RhcnRfc3RvcChpZGVfZHJpdmVfdCAqLCBzdHJ1Y3QgZ2VuZGlzayAqLCBpbnQpOwogaW50IGlkZV9zZXRfbWVkaWFfbG9jayhpZGVfZHJpdmVfdCAqLCBzdHJ1Y3QgZ2VuZGlzayAqLCBpbnQpOwordm9pZCBpZGVfY3JlYXRlX3JlcXVlc3Rfc2Vuc2VfY21kKGlkZV9kcml2ZV90ICosIHN0cnVjdCBpZGVfYXRhcGlfcGMgKik7Cit2b2lkIGlkZV9yZXRyeV9wYyhpZGVfZHJpdmVfdCAqLCBzdHJ1Y3QgZ2VuZGlzayAqKTsKIAotaWRlX3N0YXJ0c3RvcF90IGlkZV9wY19pbnRyKGlkZV9kcml2ZV90ICpkcml2ZSwgc3RydWN0IGlkZV9hdGFwaV9wYyAqcGMsCi0JaWRlX2hhbmRsZXJfdCAqaGFuZGxlciwgdW5zaWduZWQgaW50IHRpbWVvdXQsIGlkZV9leHBpcnlfdCAqZXhwaXJ5LAotCXZvaWQgKCp1cGRhdGVfYnVmZmVycykoaWRlX2RyaXZlX3QgKiwgc3RydWN0IGlkZV9hdGFwaV9wYyAqKSwKLQl2b2lkICgqcmV0cnlfcGMpKGlkZV9kcml2ZV90ICopLCB2b2lkICgqZHNjX2hhbmRsZSkoaWRlX2RyaXZlX3QgKiksCi0JaW50ICgqaW9fYnVmZmVycykoaWRlX2RyaXZlX3QgKiwgc3RydWN0IGlkZV9hdGFwaV9wYyAqLCB1bnNpZ25lZCBpbnQsCi0JCQkgICBpbnQpKTsKLWlkZV9zdGFydHN0b3BfdCBpZGVfdHJhbnNmZXJfcGMoaWRlX2RyaXZlX3QgKiwgc3RydWN0IGlkZV9hdGFwaV9wYyAqLAotCQkJCWlkZV9oYW5kbGVyX3QgKiwgdW5zaWduZWQgaW50LCBpZGVfZXhwaXJ5X3QgKik7Ci1pZGVfc3RhcnRzdG9wX3QgaWRlX2lzc3VlX3BjKGlkZV9kcml2ZV90ICosIHN0cnVjdCBpZGVfYXRhcGlfcGMgKiwKLQkJCSAgICAgaWRlX2hhbmRsZXJfdCAqLCB1bnNpZ25lZCBpbnQsIGlkZV9leHBpcnlfdCAqKTsKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBpZGVfc2NzaV9nZXRfdGltZW91dChzdHJ1Y3QgaWRlX2F0YXBpX3BjICpwYykKK3sKKwlyZXR1cm4gbWF4X3QodW5zaWduZWQgbG9uZywgV0FJVF9DTUQsIHBjLT50aW1lb3V0IC0gamlmZmllcyk7Cit9CisKK2ludCBpZGVfc2NzaV9leHBpcnkoaWRlX2RyaXZlX3QgKik7CisKK2lkZV9zdGFydHN0b3BfdCBpZGVfaXNzdWVfcGMoaWRlX2RyaXZlX3QgKiwgdW5zaWduZWQgaW50LCBpZGVfZXhwaXJ5X3QgKik7CiAKIGlkZV9zdGFydHN0b3BfdCBkb19yd190YXNrZmlsZShpZGVfZHJpdmVfdCAqLCBpZGVfdGFza190ICopOwogCkBAIC0xMzU4LDYgKzE0NDIsNyBAQAogaW50IGlkZV9pbl9kcml2ZV9saXN0KHUxNiAqLCBjb25zdCBzdHJ1Y3QgZHJpdmVfbGlzdF9lbnRyeSAqKTsKIAogI2lmZGVmIENPTkZJR19CTEtfREVWX0lERURNQQoraW50IGlkZV9kbWFfZ29vZF9kcml2ZShpZGVfZHJpdmVfdCAqKTsKIGludCBfX2lkZV9kbWFfYmFkX2RyaXZlKGlkZV9kcml2ZV90ICopOwogaW50IGlkZV9pZF9kbWFfYnVnKGlkZV9kcml2ZV90ICopOwogCkBAIC0xMzc1LDI1ICsxNDYwLDI5IEBACiB2b2lkIGlkZV9jaGVja19kbWFfY3JjKGlkZV9kcml2ZV90ICopOwogaWRlX3N0YXJ0c3RvcF90IGlkZV9kbWFfaW50cihpZGVfZHJpdmVfdCAqKTsKIAoraW50IGlkZV9hbGxvY2F0ZV9kbWFfZW5naW5lKGlkZV9od2lmX3QgKik7Cit2b2lkIGlkZV9yZWxlYXNlX2RtYV9lbmdpbmUoaWRlX2h3aWZfdCAqKTsKKwogaW50IGlkZV9idWlsZF9zZ2xpc3QoaWRlX2RyaXZlX3QgKiwgc3RydWN0IHJlcXVlc3QgKik7CiB2b2lkIGlkZV9kZXN0cm95X2RtYXRhYmxlKGlkZV9kcml2ZV90ICopOwogCiAjaWZkZWYgQ09ORklHX0JMS19ERVZfSURFRE1BX1NGRgoraW50IGNvbmZpZ19kcml2ZV9mb3JfZG1hKGlkZV9kcml2ZV90ICopOwogZXh0ZXJuIGludCBpZGVfYnVpbGRfZG1hdGFibGUoaWRlX2RyaXZlX3QgKiwgc3RydWN0IHJlcXVlc3QgKik7Ci1pbnQgaWRlX2FsbG9jYXRlX2RtYV9lbmdpbmUoaWRlX2h3aWZfdCAqKTsKLXZvaWQgaWRlX3JlbGVhc2VfZG1hX2VuZ2luZShpZGVfaHdpZl90ICopOwotCiB2b2lkIGlkZV9kbWFfaG9zdF9zZXQoaWRlX2RyaXZlX3QgKiwgaW50KTsKIGV4dGVybiBpbnQgaWRlX2RtYV9zZXR1cChpZGVfZHJpdmVfdCAqKTsKIHZvaWQgaWRlX2RtYV9leGVjX2NtZChpZGVfZHJpdmVfdCAqLCB1OCk7CiBleHRlcm4gdm9pZCBpZGVfZG1hX3N0YXJ0KGlkZV9kcml2ZV90ICopOwotZXh0ZXJuIGludCBfX2lkZV9kbWFfZW5kKGlkZV9kcml2ZV90ICopOworaW50IGlkZV9kbWFfZW5kKGlkZV9kcml2ZV90ICopOwogaW50IGlkZV9kbWFfdGVzdF9pcnEoaWRlX2RyaXZlX3QgKik7Ci1leHRlcm4gdm9pZCBpZGVfZG1hX2xvc3RfaXJxKGlkZV9kcml2ZV90ICopOwotZXh0ZXJuIHZvaWQgaWRlX2RtYV90aW1lb3V0KGlkZV9kcml2ZV90ICopOwogZXh0ZXJuIGNvbnN0IHN0cnVjdCBpZGVfZG1hX29wcyBzZmZfZG1hX29wczsKKyNlbHNlCitzdGF0aWMgaW5saW5lIGludCBjb25maWdfZHJpdmVfZm9yX2RtYShpZGVfZHJpdmVfdCAqZHJpdmUpIHsgcmV0dXJuIDA7IH0KICNlbmRpZiAvKiBDT05GSUdfQkxLX0RFVl9JREVETUFfU0ZGICovCiAKK3ZvaWQgaWRlX2RtYV9sb3N0X2lycShpZGVfZHJpdmVfdCAqKTsKK3ZvaWQgaWRlX2RtYV90aW1lb3V0KGlkZV9kcml2ZV90ICopOworCiAjZWxzZQogc3RhdGljIGlubGluZSBpbnQgaWRlX2lkX2RtYV9idWcoaWRlX2RyaXZlX3QgKmRyaXZlKSB7IHJldHVybiAwOyB9CiBzdGF0aWMgaW5saW5lIHU4IGlkZV9maW5kX2RtYV9tb2RlKGlkZV9kcml2ZV90ICpkcml2ZSwgdTggc3BlZWQpIHsgcmV0dXJuIDA7IH0KQEAgLTE0MDQsMTEgKzE0OTMsOCBAQAogc3RhdGljIGlubGluZSB2b2lkIGlkZV9kbWFfdmVyYm9zZShpZGVfZHJpdmVfdCAqZHJpdmUpIHsgOyB9CiBzdGF0aWMgaW5saW5lIGludCBpZGVfc2V0X2RtYShpZGVfZHJpdmVfdCAqZHJpdmUpIHsgcmV0dXJuIDE7IH0KIHN0YXRpYyBpbmxpbmUgdm9pZCBpZGVfY2hlY2tfZG1hX2NyYyhpZGVfZHJpdmVfdCAqZHJpdmUpIHsgOyB9Ci0jZW5kaWYgLyogQ09ORklHX0JMS19ERVZfSURFRE1BICovCi0KLSNpZm5kZWYgQ09ORklHX0JMS19ERVZfSURFRE1BX1NGRgogc3RhdGljIGlubGluZSB2b2lkIGlkZV9yZWxlYXNlX2RtYV9lbmdpbmUoaWRlX2h3aWZfdCAqaHdpZikgeyA7IH0KLSNlbmRpZgorI2VuZGlmIC8qIENPTkZJR19CTEtfREVWX0lERURNQSAqLwogCiAjaWZkZWYgQ09ORklHX0JMS19ERVZfSURFQUNQSQogZXh0ZXJuIGludCBpZGVfYWNwaV9leGVjX3RmcyhpZGVfZHJpdmVfdCAqZHJpdmUpOwpAQCAtMTQzNiw3ICsxNTIyLDYgQEAKIAogdm9pZCBpZGVfcG9ydF9hcHBseV9wYXJhbXMoaWRlX2h3aWZfdCAqKTsKIAotc3RydWN0IGlkZV9ob3N0ICppZGVfaG9zdF9hbGxvY19hbGwoY29uc3Qgc3RydWN0IGlkZV9wb3J0X2luZm8gKiwgaHdfcmVnc190ICoqKTsKIHN0cnVjdCBpZGVfaG9zdCAqaWRlX2hvc3RfYWxsb2MoY29uc3Qgc3RydWN0IGlkZV9wb3J0X2luZm8gKiwgaHdfcmVnc190ICoqKTsKIHZvaWQgaWRlX2hvc3RfZnJlZShzdHJ1Y3QgaWRlX2hvc3QgKik7CiBpbnQgaWRlX2hvc3RfcmVnaXN0ZXIoc3RydWN0IGlkZV9ob3N0ICosIGNvbnN0IHN0cnVjdCBpZGVfcG9ydF9pbmZvICosCkBAIC0xNTQ3LDYgKzE2MzIsNiBAQAogewogCWlkZV9kcml2ZV90ICpwZWVyID0gJmRyaXZlLT5od2lmLT5kcml2ZXNbKGRyaXZlLT5kbiBeIDEpICYgMV07CiAKLQlyZXR1cm4gcGVlci0+cHJlc2VudCA/IHBlZXIgOiBOVUxMOworCXJldHVybiAocGVlci0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX1BSRVNFTlQpID8gcGVlciA6IE5VTEw7CiB9CiAjZW5kaWYgLyogX0lERV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2lmX2V0aGVyLmggYi9pbmNsdWRlL2xpbnV4L2lmX2V0aGVyLmgKaW5kZXggYmYxYTUzYi4uN2YzYzczNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pZl9ldGhlci5oCisrKyBiL2luY2x1ZGUvbGludXgvaWZfZXRoZXIuaApAQCAtOSw3ICs5LDcgQEAKICAqCiAgKiBBdXRob3I6CUZyZWQgTi4gdmFuIEtlbXBlbiwgPHdhbHRqZUB1V2FsdC5OTC5NdWduZXQuT1JHPgogICoJCURvbmFsZCBCZWNrZXIsIDxiZWNrZXJAc3VwZXIub3JnPgotICoJCUFsYW4gQ294LCA8YWxhbkByZWRoYXQuY29tPgorICoJCUFsYW4gQ294LCA8YWxhbkBseG9yZ3VrLnVrdXUub3JnLnVrPgogICoJCVN0ZXZlIFdoaXRlaG91c2UsIDxndzdycm1AZWVzaGFjazMuc3dhbi5hYy51az4KICAqCiAgKgkJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pZl9mZGRpLmggYi9pbmNsdWRlL2xpbnV4L2lmX2ZkZGkuaAppbmRleCBhZTc3ZGFlLi40NWRlMTA0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2lmX2ZkZGkuaAorKysgYi9pbmNsdWRlL2xpbnV4L2lmX2ZkZGkuaApAQCAtMTIsNyArMTIsNyBAQAogICoJCWlmX2ZkZGkuaCBpcyBiYXNlZCBvbiBwcmV2aW91cyBpZl9ldGhlci5oIGFuZCBpZl90ci5oIHdvcmsgYnkKICAqCQkJRnJlZCBOLiB2YW4gS2VtcGVuLCA8d2FsdGplQHVXYWx0Lk5MLk11Z25ldC5PUkc+CiAgKgkJCURvbmFsZCBCZWNrZXIsIDxiZWNrZXJAc3VwZXIub3JnPgotICoJCQlBbGFuIENveCwgPGFsYW5AcmVkaGF0LmNvbT4KKyAqCQkJQWxhbiBDb3gsIDxhbGFuQGx4b3JndWsudWt1dS5vcmcudWs+CiAgKgkJCVN0ZXZlIFdoaXRlaG91c2UsIDxndzdycm1AZWVzaGFjazMuc3dhbi5hYy51az4KICAqCQkJUGV0ZXIgRGUgU2NocmlqdmVyLCA8c3R1ZDExQGNjNC5rdWxldXZlbi5hYy5iZT4KICAqCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2lmX2hpcHBpLmggYi9pbmNsdWRlL2xpbnV4L2lmX2hpcHBpLmgKaW5kZXggOTRkMzFjYS4uZjBmMjM1MSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pZl9oaXBwaS5oCisrKyBiL2luY2x1ZGUvbGludXgvaWZfaGlwcGkuaApAQCAtOSw3ICs5LDcgQEAKICAqCiAgKiBBdXRob3I6CUZyZWQgTi4gdmFuIEtlbXBlbiwgPHdhbHRqZUB1V2FsdC5OTC5NdWduZXQuT1JHPgogICoJCURvbmFsZCBCZWNrZXIsIDxiZWNrZXJAc3VwZXIub3JnPgotICoJCUFsYW4gQ294LCA8YWxhbkByZWRoYXQuY29tPgorICoJCUFsYW4gQ294LCA8YWxhbkBseG9yZ3VrLnVrdXUub3JnLnVrPgogICoJCVN0ZXZlIFdoaXRlaG91c2UsIDxndzdycm1AZWVzaGFjazMuc3dhbi5hYy51az4KICAqCQlKZXMgU29yZW5zZW4sIDxKZXMuU29yZW5zZW5AY2Vybi5jaD4KICAqCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2lnbXAuaCBiL2luY2x1ZGUvbGludXgvaWdtcC5oCmluZGV4IDdiYjNjMDkuLmY3MzRhMGIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaWdtcC5oCisrKyBiL2luY2x1ZGUvbGludXgvaWdtcC5oCkBAIC0yLDcgKzIsNyBAQAogICoJTGludXggTkVUMzoJSW50ZXJuZXQgR3JvdXAgTWFuYWdlbWVudCBQcm90b2NvbCAgW0lHTVBdCiAgKgogICoJQXV0aG9yczoKLSAqCQlBbGFuIENveCA8QWxhbi5Db3hAbGludXgub3JnPgorICoJCUFsYW4gQ294IDxhbGFuQGx4b3JndWsudWt1dS5vcmcudWs+CiAgKgogICoJRXh0ZW5kZWQgdG8gdGFsayB0aGUgQlNEIGV4dGVuZGVkIElHTVAgcHJvdG9jb2wgb2YgbXJvdXRlZCAzLjYKICAqCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2luaXQuaCBiL2luY2x1ZGUvbGludXgvaW5pdC5oCmluZGV4IDkzNTM4YjYuLmFkNjM4MjQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaW5pdC5oCisrKyBiL2luY2x1ZGUvbGludXgvaW5pdC5oCkBAIC0yMzMsOSArMjMzLDYgQEAKIAkJX19hdHRyaWJ1dGVfXygoYWxpZ25lZCgoc2l6ZW9mKGxvbmcpKSkpKQlcCiAJCT0geyBfX3NldHVwX3N0cl8jI3VuaXF1ZV9pZCwgZm4sIGVhcmx5IH0KIAotI2RlZmluZSBfX3NldHVwX251bGxfcGFyYW0oc3RyLCB1bmlxdWVfaWQpCQkJXAotCV9fc2V0dXBfcGFyYW0oc3RyLCB1bmlxdWVfaWQsIE5VTEwsIDApCi0KICNkZWZpbmUgX19zZXR1cChzdHIsIGZuKQkJCQkJXAogCV9fc2V0dXBfcGFyYW0oc3RyLCBmbiwgZm4sIDApCiAKQEAgLTI5Niw3ICsyOTMsNiBAQAogCXZvaWQgY2xlYW51cF9tb2R1bGUodm9pZCkgX19hdHRyaWJ1dGVfXygoYWxpYXMoI2V4aXRmbikpKTsKIAogI2RlZmluZSBfX3NldHVwX3BhcmFtKHN0ciwgdW5pcXVlX2lkLCBmbikJLyogbm90aGluZyAqLwotI2RlZmluZSBfX3NldHVwX251bGxfcGFyYW0oc3RyLCB1bmlxdWVfaWQpIAkvKiBub3RoaW5nICovCiAjZGVmaW5lIF9fc2V0dXAoc3RyLCBmdW5jKSAJCQkvKiBub3RoaW5nICovCiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pbnB1dC5oIGIvaW5jbHVkZS9saW51eC9pbnB1dC5oCmluZGV4IGE1ODAyYzkuLmI4NmZiNTUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaW5wdXQuaAorKysgYi9pbmNsdWRlL2xpbnV4L2lucHV0LmgKQEAgLTU3Nyw5ICs1NzcsMjIgQEAKICNkZWZpbmUgS0VZX0JSTF9ET1Q5CQkweDFmOQogI2RlZmluZSBLRVlfQlJMX0RPVDEwCQkweDFmYQogCisjZGVmaW5lIEtFWV9OVU1FUklDXzAJCTB4MjAwCS8qIHVzZWQgYnkgcGhvbmVzLCByZW1vdGUgY29udHJvbHMsICovCisjZGVmaW5lIEtFWV9OVU1FUklDXzEJCTB4MjAxCS8qIGFuZCBvdGhlciBrZXlwYWRzICovCisjZGVmaW5lIEtFWV9OVU1FUklDXzIJCTB4MjAyCisjZGVmaW5lIEtFWV9OVU1FUklDXzMJCTB4MjAzCisjZGVmaW5lIEtFWV9OVU1FUklDXzQJCTB4MjA0CisjZGVmaW5lIEtFWV9OVU1FUklDXzUJCTB4MjA1CisjZGVmaW5lIEtFWV9OVU1FUklDXzYJCTB4MjA2CisjZGVmaW5lIEtFWV9OVU1FUklDXzcJCTB4MjA3CisjZGVmaW5lIEtFWV9OVU1FUklDXzgJCTB4MjA4CisjZGVmaW5lIEtFWV9OVU1FUklDXzkJCTB4MjA5CisjZGVmaW5lIEtFWV9OVU1FUklDX1NUQVIJMHgyMGEKKyNkZWZpbmUgS0VZX05VTUVSSUNfUE9VTkQJMHgyMGIKKwogLyogV2UgYXZvaWQgbG93IGNvbW1vbiBrZXlzIGluIG1vZHVsZSBhbGlhc2VzIHNvIHRoZXkgZG9uJ3QgZ2V0IGh1Z2UuICovCiAjZGVmaW5lIEtFWV9NSU5fSU5URVJFU1RJTkcJS0VZX01VVEUKLSNkZWZpbmUgS0VZX01BWAkJCTB4MWZmCisjZGVmaW5lIEtFWV9NQVgJCQkweDJmZgogI2RlZmluZSBLRVlfQ05UCQkJKEtFWV9NQVgrMSkKIAogLyoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaW50ZWwtaW9tbXUuaCBiL2luY2x1ZGUvbGludXgvaW50ZWwtaW9tbXUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZTExN2YzCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9pbnRlbC1pb21tdS5oCkBAIC0wLDAgKzEsMzI3IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA2LCBJbnRlbCBDb3Jwb3JhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKKyAqIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAorICogdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZQorICogUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMDggSW50ZWwgQ29ycG9yYXRpb24KKyAqIEF1dGhvcjogQXNob2sgUmFqIDxhc2hvay5yYWpAaW50ZWwuY29tPgorICogQXV0aG9yOiBBbmlsIFMgS2VzaGF2YW11cnRoeSA8YW5pbC5zLmtlc2hhdmFtdXJ0aHlAaW50ZWwuY29tPgorICovCisKKyNpZm5kZWYgX0lOVEVMX0lPTU1VX0hfCisjZGVmaW5lIF9JTlRFTF9JT01NVV9IXworCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9tc2kuaD4KKyNpbmNsdWRlIDxsaW51eC9zeXNkZXYuaD4KKyNpbmNsdWRlIDxsaW51eC9pb3ZhLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9kbWFfcmVtYXBwaW5nLmg+CisjaW5jbHVkZSA8YXNtL2NhY2hlZmx1c2guaD4KKworLyoKKyAqIEludGVsIElPTU1VIHJlZ2lzdGVyIHNwZWNpZmljYXRpb24gcGVyIHZlcnNpb24gMS4wIHB1YmxpYyBzcGVjLgorICovCisKKyNkZWZpbmUJRE1BUl9WRVJfUkVHCTB4MAkvKiBBcmNoIHZlcnNpb24gc3VwcG9ydGVkIGJ5IHRoaXMgSU9NTVUgKi8KKyNkZWZpbmUJRE1BUl9DQVBfUkVHCTB4OAkvKiBIYXJkd2FyZSBzdXBwb3J0ZWQgY2FwYWJpbGl0aWVzICovCisjZGVmaW5lCURNQVJfRUNBUF9SRUcJMHgxMAkvKiBFeHRlbmRlZCBjYXBhYmlsaXRpZXMgc3VwcG9ydGVkICovCisjZGVmaW5lCURNQVJfR0NNRF9SRUcJMHgxOAkvKiBHbG9iYWwgY29tbWFuZCByZWdpc3RlciAqLworI2RlZmluZQlETUFSX0dTVFNfUkVHCTB4MWMJLyogR2xvYmFsIHN0YXR1cyByZWdpc3RlciAqLworI2RlZmluZQlETUFSX1JUQUREUl9SRUcJMHgyMAkvKiBSb290IGVudHJ5IHRhYmxlICovCisjZGVmaW5lCURNQVJfQ0NNRF9SRUcJMHgyOAkvKiBDb250ZXh0IGNvbW1hbmQgcmVnICovCisjZGVmaW5lCURNQVJfRlNUU19SRUcJMHgzNAkvKiBGYXVsdCBTdGF0dXMgcmVnaXN0ZXIgKi8KKyNkZWZpbmUJRE1BUl9GRUNUTF9SRUcJMHgzOAkvKiBGYXVsdCBjb250cm9sIHJlZ2lzdGVyICovCisjZGVmaW5lCURNQVJfRkVEQVRBX1JFRwkweDNjCS8qIEZhdWx0IGV2ZW50IGludGVycnVwdCBkYXRhIHJlZ2lzdGVyICovCisjZGVmaW5lCURNQVJfRkVBRERSX1JFRwkweDQwCS8qIEZhdWx0IGV2ZW50IGludGVycnVwdCBhZGRyIHJlZ2lzdGVyICovCisjZGVmaW5lCURNQVJfRkVVQUREUl9SRUcgMHg0NAkvKiBVcHBlciBhZGRyZXNzIHJlZ2lzdGVyICovCisjZGVmaW5lCURNQVJfQUZMT0dfUkVHCTB4NTgJLyogQWR2YW5jZWQgRmF1bHQgY29udHJvbCAqLworI2RlZmluZQlETUFSX1BNRU5fUkVHCTB4NjQJLyogRW5hYmxlIFByb3RlY3RlZCBNZW1vcnkgUmVnaW9uICovCisjZGVmaW5lCURNQVJfUExNQkFTRV9SRUcgMHg2OAkvKiBQTVJSIExvdyBhZGRyICovCisjZGVmaW5lCURNQVJfUExNTElNSVRfUkVHIDB4NmMJLyogUE1SUiBsb3cgbGltaXQgKi8KKyNkZWZpbmUJRE1BUl9QSE1CQVNFX1JFRyAweDcwCS8qIHBtcnIgaGlnaCBiYXNlIGFkZHIgKi8KKyNkZWZpbmUJRE1BUl9QSE1MSU1JVF9SRUcgMHg3OAkvKiBwbXJyIGhpZ2ggbGltaXQgKi8KKyNkZWZpbmUgRE1BUl9JUUhfUkVHCTB4ODAJLyogSW52YWxpZGF0aW9uIHF1ZXVlIGhlYWQgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgRE1BUl9JUVRfUkVHCTB4ODgJLyogSW52YWxpZGF0aW9uIHF1ZXVlIHRhaWwgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgRE1BUl9JUUFfUkVHCTB4OTAJLyogSW52YWxpZGF0aW9uIHF1ZXVlIGFkZHIgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgRE1BUl9JQ1NfUkVHCTB4OTgJLyogSW52YWxpZGF0aW9uIGNvbXBsZXRlIHN0YXR1cyByZWdpc3RlciAqLworI2RlZmluZSBETUFSX0lSVEFfUkVHCTB4YjggICAgLyogSW50ZXJydXB0IHJlbWFwcGluZyB0YWJsZSBhZGRyIHJlZ2lzdGVyICovCisKKyNkZWZpbmUgT0ZGU0VUX1NUUklERQkJKDkpCisvKgorI2RlZmluZSBkbWFyX3JlYWRsKGRtYXIsIHJlZykgcmVhZGwoZG1hciArIHJlZykKKyNkZWZpbmUgZG1hcl9yZWFkcShkbWFyLCByZWcpICh7IFwKKwkJdTMyIGxvLCBoaTsgXAorCQlsbyA9IHJlYWRsKGRtYXIgKyByZWcpOyBcCisJCWhpID0gcmVhZGwoZG1hciArIHJlZyArIDQpOyBcCisJCSgoKHU2NCkgaGkpIDw8IDMyKSArIGxvOyB9KQorKi8KK3N0YXRpYyBpbmxpbmUgdTY0IGRtYXJfcmVhZHEodm9pZCBfX2lvbWVtICphZGRyKQoreworCXUzMiBsbywgaGk7CisJbG8gPSByZWFkbChhZGRyKTsKKwloaSA9IHJlYWRsKGFkZHIgKyA0KTsKKwlyZXR1cm4gKCgodTY0KSBoaSkgPDwgMzIpICsgbG87Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBkbWFyX3dyaXRlcSh2b2lkIF9faW9tZW0gKmFkZHIsIHU2NCB2YWwpCit7CisJd3JpdGVsKCh1MzIpdmFsLCBhZGRyKTsKKwl3cml0ZWwoKHUzMikodmFsID4+IDMyKSwgYWRkciArIDQpOworfQorCisjZGVmaW5lIERNQVJfVkVSX01BSk9SKHYpCQkoKCh2KSAmIDB4ZjApID4+IDQpCisjZGVmaW5lIERNQVJfVkVSX01JTk9SKHYpCQkoKHYpICYgMHgwZikKKworLyoKKyAqIERlY29kaW5nIENhcGFiaWxpdHkgUmVnaXN0ZXIKKyAqLworI2RlZmluZSBjYXBfcmVhZF9kcmFpbihjKQkoKChjKSA+PiA1NSkgJiAxKQorI2RlZmluZSBjYXBfd3JpdGVfZHJhaW4oYykJKCgoYykgPj4gNTQpICYgMSkKKyNkZWZpbmUgY2FwX21heF9hbWFza192YWwoYykJKCgoYykgPj4gNDgpICYgMHgzZikKKyNkZWZpbmUgY2FwX251bV9mYXVsdF9yZWdzKGMpCSgoKChjKSA+PiA0MCkgJiAweGZmKSArIDEpCisjZGVmaW5lIGNhcF9wZ3NlbF9pbnYoYykJKCgoYykgPj4gMzkpICYgMSkKKworI2RlZmluZSBjYXBfc3VwZXJfcGFnZV92YWwoYykJKCgoYykgPj4gMzQpICYgMHhmKQorI2RlZmluZSBjYXBfc3VwZXJfb2Zmc2V0KGMpCSgoKGZpbmRfZmlyc3RfYml0KCZjYXBfc3VwZXJfcGFnZV92YWwoYyksIDQpKSBcCisJCQkJCSogT0ZGU0VUX1NUUklERSkgKyAyMSkKKworI2RlZmluZSBjYXBfZmF1bHRfcmVnX29mZnNldChjKQkoKCgoYykgPj4gMjQpICYgMHgzZmYpICogMTYpCisjZGVmaW5lIGNhcF9tYXhfZmF1bHRfcmVnX29mZnNldChjKSBcCisJKGNhcF9mYXVsdF9yZWdfb2Zmc2V0KGMpICsgY2FwX251bV9mYXVsdF9yZWdzKGMpICogMTYpCisKKyNkZWZpbmUgY2FwX3pscihjKQkJKCgoYykgPj4gMjIpICYgMSkKKyNkZWZpbmUgY2FwX2lzb2NoKGMpCQkoKChjKSA+PiAyMykgJiAxKQorI2RlZmluZSBjYXBfbWdhdyhjKQkJKCgoKGMpID4+IDE2KSAmIDB4M2YpICsgMSkKKyNkZWZpbmUgY2FwX3NhZ2F3KGMpCQkoKChjKSA+PiA4KSAmIDB4MWYpCisjZGVmaW5lIGNhcF9jYWNoaW5nX21vZGUoYykJKCgoYykgPj4gNykgJiAxKQorI2RlZmluZSBjYXBfcGhtcihjKQkJKCgoYykgPj4gNikgJiAxKQorI2RlZmluZSBjYXBfcGxtcihjKQkJKCgoYykgPj4gNSkgJiAxKQorI2RlZmluZSBjYXBfcndiZihjKQkJKCgoYykgPj4gNCkgJiAxKQorI2RlZmluZSBjYXBfYWZsKGMpCQkoKChjKSA+PiAzKSAmIDEpCisjZGVmaW5lIGNhcF9uZG9tcyhjKQkJKCgodW5zaWduZWQgbG9uZykxKSA8PCAoNCArIDIgKiAoKGMpICYgMHg3KSkpCisvKgorICogRXh0ZW5kZWQgQ2FwYWJpbGl0eSBSZWdpc3RlcgorICovCisKKyNkZWZpbmUgZWNhcF9uaW90bGJfaXVuaXRzKGUpCSgoKChlKSA+PiAyNCkgJiAweGZmKSArIDEpCisjZGVmaW5lIGVjYXBfaW90bGJfb2Zmc2V0KGUpIAkoKCgoZSkgPj4gOCkgJiAweDNmZikgKiAxNikKKyNkZWZpbmUgZWNhcF9tYXhfaW90bGJfb2Zmc2V0KGUpIFwKKwkoZWNhcF9pb3RsYl9vZmZzZXQoZSkgKyBlY2FwX25pb3RsYl9pdW5pdHMoZSkgKiAxNikKKyNkZWZpbmUgZWNhcF9jb2hlcmVudChlKQkoKGUpICYgMHgxKQorI2RlZmluZSBlY2FwX3FpcyhlKQkJKChlKSAmIDB4MikKKyNkZWZpbmUgZWNhcF9laW1fc3VwcG9ydChlKQkoKGUgPj4gNCkgJiAweDEpCisjZGVmaW5lIGVjYXBfaXJfc3VwcG9ydChlKQkoKGUgPj4gMykgJiAweDEpCisjZGVmaW5lIGVjYXBfbWF4X2hhbmRsZV9tYXNrKGUpICgoZSA+PiAyMCkgJiAweGYpCisKKworLyogSU9UTEJfUkVHICovCisjZGVmaW5lIERNQV9UTEJfR0xPQkFMX0ZMVVNIICgoKHU2NCkxKSA8PCA2MCkKKyNkZWZpbmUgRE1BX1RMQl9EU0lfRkxVU0ggKCgodTY0KTIpIDw8IDYwKQorI2RlZmluZSBETUFfVExCX1BTSV9GTFVTSCAoKCh1NjQpMykgPDwgNjApCisjZGVmaW5lIERNQV9UTEJfSUlSRyh0eXBlKSAoKHR5cGUgPj4gNjApICYgNykKKyNkZWZpbmUgRE1BX1RMQl9JQUlHKHZhbCkgKCgodmFsKSA+PiA1NykgJiA3KQorI2RlZmluZSBETUFfVExCX1JFQURfRFJBSU4gKCgodTY0KTEpIDw8IDQ5KQorI2RlZmluZSBETUFfVExCX1dSSVRFX0RSQUlOICgoKHU2NCkxKSA8PCA0OCkKKyNkZWZpbmUgRE1BX1RMQl9ESUQoaWQpCSgoKHU2NCkoKGlkKSAmIDB4ZmZmZikpIDw8IDMyKQorI2RlZmluZSBETUFfVExCX0lWVCAoKCh1NjQpMSkgPDwgNjMpCisjZGVmaW5lIERNQV9UTEJfSUhfTk9OTEVBRiAoKCh1NjQpMSkgPDwgNikKKyNkZWZpbmUgRE1BX1RMQl9NQVhfU0laRSAoMHgzZikKKworLyogSU5WQUxJRF9ERVNDICovCisjZGVmaW5lIERNQV9JRF9UTEJfR0xPQkFMX0ZMVVNICSgoKHU2NCkxKSA8PCAzKQorI2RlZmluZSBETUFfSURfVExCX0RTSV9GTFVTSAkoKCh1NjQpMikgPDwgMykKKyNkZWZpbmUgRE1BX0lEX1RMQl9QU0lfRkxVU0gJKCgodTY0KTMpIDw8IDMpCisjZGVmaW5lIERNQV9JRF9UTEJfUkVBRF9EUkFJTgkoKCh1NjQpMSkgPDwgNykKKyNkZWZpbmUgRE1BX0lEX1RMQl9XUklURV9EUkFJTgkoKCh1NjQpMSkgPDwgNikKKyNkZWZpbmUgRE1BX0lEX1RMQl9ESUQoaWQpCSgoKHU2NCkoKGlkICYgMHhmZmZmKSA8PCAxNikpKQorI2RlZmluZSBETUFfSURfVExCX0lIX05PTkxFQUYJKCgodTY0KTEpIDw8IDYpCisjZGVmaW5lIERNQV9JRF9UTEJfQUREUihhZGRyKQkoYWRkcikKKyNkZWZpbmUgRE1BX0lEX1RMQl9BRERSX01BU0sobWFzaykJKG1hc2spCisKKy8qIFBNRU5fUkVHICovCisjZGVmaW5lIERNQV9QTUVOX0VQTSAoKCh1MzIpMSk8PDMxKQorI2RlZmluZSBETUFfUE1FTl9QUlMgKCgodTMyKTEpPDwwKQorCisvKiBHQ01EX1JFRyAqLworI2RlZmluZSBETUFfR0NNRF9URSAoKCh1MzIpMSkgPDwgMzEpCisjZGVmaW5lIERNQV9HQ01EX1NSVFAgKCgodTMyKTEpIDw8IDMwKQorI2RlZmluZSBETUFfR0NNRF9TRkwgKCgodTMyKTEpIDw8IDI5KQorI2RlZmluZSBETUFfR0NNRF9FQUZMICgoKHUzMikxKSA8PCAyOCkKKyNkZWZpbmUgRE1BX0dDTURfV0JGICgoKHUzMikxKSA8PCAyNykKKyNkZWZpbmUgRE1BX0dDTURfUUlFICgoKHUzMikxKSA8PCAyNikKKyNkZWZpbmUgRE1BX0dDTURfU0lSVFAgKCgodTMyKTEpIDw8IDI0KQorI2RlZmluZSBETUFfR0NNRF9JUkUgKCgodTMyKSAxKSA8PCAyNSkKKworLyogR1NUU19SRUcgKi8KKyNkZWZpbmUgRE1BX0dTVFNfVEVTICgoKHUzMikxKSA8PCAzMSkKKyNkZWZpbmUgRE1BX0dTVFNfUlRQUyAoKCh1MzIpMSkgPDwgMzApCisjZGVmaW5lIERNQV9HU1RTX0ZMUyAoKCh1MzIpMSkgPDwgMjkpCisjZGVmaW5lIERNQV9HU1RTX0FGTFMgKCgodTMyKTEpIDw8IDI4KQorI2RlZmluZSBETUFfR1NUU19XQkZTICgoKHUzMikxKSA8PCAyNykKKyNkZWZpbmUgRE1BX0dTVFNfUUlFUyAoKCh1MzIpMSkgPDwgMjYpCisjZGVmaW5lIERNQV9HU1RTX0lSVFBTICgoKHUzMikxKSA8PCAyNCkKKyNkZWZpbmUgRE1BX0dTVFNfSVJFUyAoKCh1MzIpMSkgPDwgMjUpCisKKy8qIENDTURfUkVHICovCisjZGVmaW5lIERNQV9DQ01EX0lDQyAoKCh1NjQpMSkgPDwgNjMpCisjZGVmaW5lIERNQV9DQ01EX0dMT0JBTF9JTlZMICgoKHU2NCkxKSA8PCA2MSkKKyNkZWZpbmUgRE1BX0NDTURfRE9NQUlOX0lOVkwgKCgodTY0KTIpIDw8IDYxKQorI2RlZmluZSBETUFfQ0NNRF9ERVZJQ0VfSU5WTCAoKCh1NjQpMykgPDwgNjEpCisjZGVmaW5lIERNQV9DQ01EX0ZNKG0pICgoKHU2NCkoKG0pICYgMHgzKSkgPDwgMzIpCisjZGVmaW5lIERNQV9DQ01EX01BU0tfTk9CSVQgMAorI2RlZmluZSBETUFfQ0NNRF9NQVNLXzFCSVQgMQorI2RlZmluZSBETUFfQ0NNRF9NQVNLXzJCSVQgMgorI2RlZmluZSBETUFfQ0NNRF9NQVNLXzNCSVQgMworI2RlZmluZSBETUFfQ0NNRF9TSUQocykgKCgodTY0KSgocykgJiAweGZmZmYpKSA8PCAxNikKKyNkZWZpbmUgRE1BX0NDTURfRElEKGQpICgodTY0KSgoZCkgJiAweGZmZmYpKQorCisvKiBGRUNUTF9SRUcgKi8KKyNkZWZpbmUgRE1BX0ZFQ1RMX0lNICgoKHUzMikxKSA8PCAzMSkKKworLyogRlNUU19SRUcgKi8KKyNkZWZpbmUgRE1BX0ZTVFNfUFBGICgodTMyKTIpCisjZGVmaW5lIERNQV9GU1RTX1BGTyAoKHUzMikxKQorI2RlZmluZSBkbWFfZnN0c19mYXVsdF9yZWNvcmRfaW5kZXgocykgKCgocykgPj4gOCkgJiAweGZmKQorCisvKiBGUkNEX1JFRywgMzIgYml0cyBhY2Nlc3MgKi8KKyNkZWZpbmUgRE1BX0ZSQ0RfRiAoKCh1MzIpMSkgPDwgMzEpCisjZGVmaW5lIGRtYV9mcmNkX3R5cGUoZCkgKChkID4+IDMwKSAmIDEpCisjZGVmaW5lIGRtYV9mcmNkX2ZhdWx0X3JlYXNvbihjKSAoYyAmIDB4ZmYpCisjZGVmaW5lIGRtYV9mcmNkX3NvdXJjZV9pZChjKSAoYyAmIDB4ZmZmZikKKyNkZWZpbmUgZG1hX2ZyY2RfcGFnZV9hZGRyKGQpIChkICYgKCgodTY0KS0xKSA8PCAxMikpIC8qIGxvdyA2NCBiaXQgKi8KKworI2RlZmluZSBETUFSX09QRVJBVElPTl9USU1FT1VUICgoY3ljbGVzX3QpIHRzY19raHoqMTAqMTAwMCkgLyogMTBzZWMgKi8KKworI2RlZmluZSBJT01NVV9XQUlUX09QKGlvbW11LCBvZmZzZXQsIG9wLCBjb25kLCBzdHMpIFwKK3tcCisJY3ljbGVzX3Qgc3RhcnRfdGltZSA9IGdldF9jeWNsZXMoKTtcCisJd2hpbGUgKDEpIHtcCisJCXN0cyA9IG9wIChpb21tdS0+cmVnICsgb2Zmc2V0KTtcCisJCWlmIChjb25kKVwKKwkJCWJyZWFrO1wKKwkJaWYgKERNQVJfT1BFUkFUSU9OX1RJTUVPVVQgPCAoZ2V0X2N5Y2xlcygpIC0gc3RhcnRfdGltZSkpXAorCQkJcGFuaWMoIkRNQVIgaGFyZHdhcmUgaXMgbWFsZnVuY3Rpb25pbmdcbiIpO1wKKwkJY3B1X3JlbGF4KCk7XAorCX1cCit9CisKKyNkZWZpbmUgUUlfTEVOR1RICTI1NgkvKiBxdWV1ZSBsZW5ndGggKi8KKworZW51bSB7CisJUUlfRlJFRSwKKwlRSV9JTl9VU0UsCisJUUlfRE9ORQorfTsKKworI2RlZmluZSBRSV9DQ19UWVBFCQkweDEKKyNkZWZpbmUgUUlfSU9UTEJfVFlQRQkJMHgyCisjZGVmaW5lIFFJX0RJT1RMQl9UWVBFCQkweDMKKyNkZWZpbmUgUUlfSUVDX1RZUEUJCTB4NAorI2RlZmluZSBRSV9JV0RfVFlQRQkJMHg1CisKKyNkZWZpbmUgUUlfSUVDX1NFTEVDVElWRQkoKCh1NjQpMSkgPDwgNCkKKyNkZWZpbmUgUUlfSUVDX0lJREVYKGlkeCkJKCgodTY0KShpZHggJiAweGZmZmYpIDw8IDMyKSkKKyNkZWZpbmUgUUlfSUVDX0lNKG0pCQkoKCh1NjQpKG0gJiAweDFmKSA8PCAyNykpCisKKyNkZWZpbmUgUUlfSVdEX1NUQVRVU19EQVRBKGQpCSgoKHU2NClkKSA8PCAzMikKKyNkZWZpbmUgUUlfSVdEX1NUQVRVU19XUklURQkoKCh1NjQpMSkgPDwgNSkKKworc3RydWN0IHFpX2Rlc2MgeworCXU2NCBsb3csIGhpZ2g7Cit9OworCitzdHJ1Y3QgcV9pbnZhbCB7CisJc3BpbmxvY2tfdCAgICAgIHFfbG9jazsKKwlzdHJ1Y3QgcWlfZGVzYyAgKmRlc2M7ICAgICAgICAgIC8qIGludmFsaWRhdGlvbiBxdWV1ZSAqLworCWludCAgICAgICAgICAgICAqZGVzY19zdGF0dXM7ICAgLyogZGVzYyBzdGF0dXMgKi8KKwlpbnQgICAgICAgICAgICAgZnJlZV9oZWFkOyAgICAgIC8qIGZpcnN0IGZyZWUgZW50cnkgKi8KKwlpbnQgICAgICAgICAgICAgZnJlZV90YWlsOyAgICAgIC8qIGxhc3QgZnJlZSBlbnRyeSAqLworCWludCAgICAgICAgICAgICBmcmVlX2NudDsKK307CisKKyNpZmRlZiBDT05GSUdfSU5UUl9SRU1BUAorLyogMU1CIC0gbWF4aW11bSBwb3NzaWJsZSBpbnRlcnJ1cHQgcmVtYXBwaW5nIHRhYmxlIHNpemUgKi8KKyNkZWZpbmUgSU5UUl9SRU1BUF9QQUdFX09SREVSCTgKKyNkZWZpbmUgSU5UUl9SRU1BUF9UQUJMRV9SRUdfU0laRQkweGYKKworI2RlZmluZSBJTlRSX1JFTUFQX1RBQkxFX0VOVFJJRVMJNjU1MzYKKworc3RydWN0IGlyX3RhYmxlIHsKKwlzdHJ1Y3QgaXJ0ZSAqYmFzZTsKK307CisjZW5kaWYKKworc3RydWN0IGludGVsX2lvbW11IHsKKwl2b2lkIF9faW9tZW0JKnJlZzsgLyogUG9pbnRlciB0byBoYXJkd2FyZSByZWdzLCB2aXJ0dWFsIGFkZHIgKi8KKwl1NjQJCWNhcDsKKwl1NjQJCWVjYXA7CisJaW50CQlzZWc7CisJdTMyCQlnY21kOyAvKiBIb2xkcyBURSwgRUFGTC4gRG9uJ3QgbmVlZCBTUlRQLCBTRkwsIFdCRiAqLworCXNwaW5sb2NrX3QJcmVnaXN0ZXJfbG9jazsgLyogcHJvdGVjdCByZWdpc3RlciBoYW5kbGluZyAqLworCWludAkJc2VxX2lkOwkvKiBzZXF1ZW5jZSBpZCBvZiB0aGUgaW9tbXUgKi8KKworI2lmZGVmIENPTkZJR19ETUFSCisJdW5zaWduZWQgbG9uZyAJKmRvbWFpbl9pZHM7IC8qIGJpdG1hcCBvZiBkb21haW5zICovCisJc3RydWN0IGRtYXJfZG9tYWluICoqZG9tYWluczsgLyogcHRyIHRvIGRvbWFpbnMgKi8KKwlzcGlubG9ja190CWxvY2s7IC8qIHByb3RlY3QgY29udGV4dCwgZG9tYWluIGlkcyAqLworCXN0cnVjdCByb290X2VudHJ5ICpyb290X2VudHJ5OyAvKiB2aXJ0dWFsIGFkZHJlc3MgKi8KKworCXVuc2lnbmVkIGludCBpcnE7CisJdW5zaWduZWQgY2hhciBuYW1lWzddOyAgICAvKiBEZXZpY2UgTmFtZSAqLworCXN0cnVjdCBtc2lfbXNnIHNhdmVkX21zZzsKKwlzdHJ1Y3Qgc3lzX2RldmljZSBzeXNkZXY7CisjZW5kaWYKKwlzdHJ1Y3QgcV9pbnZhbCAgKnFpOyAgICAgICAgICAgIC8qIFF1ZXVlZCBpbnZhbGlkYXRpb24gaW5mbyAqLworI2lmZGVmIENPTkZJR19JTlRSX1JFTUFQCisJc3RydWN0IGlyX3RhYmxlICppcl90YWJsZTsJLyogSW50ZXJydXB0IHJlbWFwcGluZyBpbmZvICovCisjZW5kaWYKK307CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX2lvbW11X2ZsdXNoX2NhY2hlKAorCXN0cnVjdCBpbnRlbF9pb21tdSAqaW9tbXUsIHZvaWQgKmFkZHIsIGludCBzaXplKQoreworCWlmICghZWNhcF9jb2hlcmVudChpb21tdS0+ZWNhcCkpCisJCWNsZmx1c2hfY2FjaGVfcmFuZ2UoYWRkciwgc2l6ZSk7Cit9CisKK2V4dGVybiBzdHJ1Y3QgZG1hcl9kcmhkX3VuaXQgKiBkbWFyX2ZpbmRfbWF0Y2hlZF9kcmhkX3VuaXQoc3RydWN0IHBjaV9kZXYgKmRldik7CisKK2V4dGVybiBpbnQgYWxsb2NfaW9tbXUoc3RydWN0IGRtYXJfZHJoZF91bml0ICpkcmhkKTsKK2V4dGVybiB2b2lkIGZyZWVfaW9tbXUoc3RydWN0IGludGVsX2lvbW11ICppb21tdSk7CitleHRlcm4gaW50IGRtYXJfZW5hYmxlX3FpKHN0cnVjdCBpbnRlbF9pb21tdSAqaW9tbXUpOworZXh0ZXJuIHZvaWQgcWlfZ2xvYmFsX2llYyhzdHJ1Y3QgaW50ZWxfaW9tbXUgKmlvbW11KTsKKworZXh0ZXJuIHZvaWQgcWlfc3VibWl0X3N5bmMoc3RydWN0IHFpX2Rlc2MgKmRlc2MsIHN0cnVjdCBpbnRlbF9pb21tdSAqaW9tbXUpOworCit2b2lkIGludGVsX2lvbW11X2RvbWFpbl9leGl0KHN0cnVjdCBkbWFyX2RvbWFpbiAqZG9tYWluKTsKK3N0cnVjdCBkbWFyX2RvbWFpbiAqaW50ZWxfaW9tbXVfZG9tYWluX2FsbG9jKHN0cnVjdCBwY2lfZGV2ICpwZGV2KTsKK2ludCBpbnRlbF9pb21tdV9jb250ZXh0X21hcHBpbmcoc3RydWN0IGRtYXJfZG9tYWluICpkb21haW4sCisJCQkJc3RydWN0IHBjaV9kZXYgKnBkZXYpOworaW50IGludGVsX2lvbW11X3BhZ2VfbWFwcGluZyhzdHJ1Y3QgZG1hcl9kb21haW4gKmRvbWFpbiwgZG1hX2FkZHJfdCBpb3ZhLAorCQkJICAgICB1NjQgaHBhLCBzaXplX3Qgc2l6ZSwgaW50IHByb3QpOwordm9pZCBpbnRlbF9pb21tdV9kZXRhY2hfZGV2KHN0cnVjdCBkbWFyX2RvbWFpbiAqZG9tYWluLCB1OCBidXMsIHU4IGRldmZuKTsKK3N0cnVjdCBkbWFyX2RvbWFpbiAqaW50ZWxfaW9tbXVfZmluZF9kb21haW4oc3RydWN0IHBjaV9kZXYgKnBkZXYpOwordTY0IGludGVsX2lvbW11X2lvdmFfdG9fcGZuKHN0cnVjdCBkbWFyX2RvbWFpbiAqZG9tYWluLCB1NjQgaW92YSk7CisKKyNpZmRlZiBDT05GSUdfRE1BUgoraW50IGludGVsX2lvbW11X2ZvdW5kKHZvaWQpOworI2Vsc2UgLyogQ09ORklHX0RNQVIgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGludGVsX2lvbW11X2ZvdW5kKHZvaWQpCit7CisJcmV0dXJuIDA7Cit9CisjZW5kaWYgLyogQ09ORklHX0RNQVIgKi8KKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2ludGVycnVwdC5oIGIvaW5jbHVkZS9saW51eC9pbnRlcnJ1cHQuaAppbmRleCA1OGZmNGU3Li5mNThhMGNmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2ludGVycnVwdC5oCisrKyBiL2luY2x1ZGUvbGludXgvaW50ZXJydXB0LmgKQEAgLTgsOSArOCwxMiBAQAogI2luY2x1ZGUgPGxpbnV4L3ByZWVtcHQuaD4KICNpbmNsdWRlIDxsaW51eC9jcHVtYXNrLmg+CiAjaW5jbHVkZSA8bGludXgvaXJxcmV0dXJuLmg+CisjaW5jbHVkZSA8bGludXgvaXJxbnIuaD4KICNpbmNsdWRlIDxsaW51eC9oYXJkaXJxLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9pcnFmbGFncy5oPgorI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgorI2luY2x1ZGUgPGxpbnV4L3BlcmNwdS5oPgogI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KICNpbmNsdWRlIDxhc20vcHRyYWNlLmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgpAQCAtMjUyLDYgKzI1NSw4IEBACiAJSFJUSU1FUl9TT0ZUSVJRLAogI2VuZGlmCiAJUkNVX1NPRlRJUlEsIAkvKiBQcmVmZXJhYmxlIFJDVSBzaG91bGQgYWx3YXlzIGJlIHRoZSBsYXN0IHNvZnRpcnEgKi8KKworCU5SX1NPRlRJUlFTCiB9OwogCiAvKiBzb2Z0aXJxIG1hc2sgYW5kIGFjdGl2ZSBmaWVsZHMgbW92ZWQgdG8gaXJxX2NwdXN0YXRfdCBpbgpAQCAtMjcxLDYgKzI3NiwyNSBAQAogZXh0ZXJuIHZvaWQgcmFpc2Vfc29mdGlycV9pcnFvZmYodW5zaWduZWQgaW50IG5yKTsKIGV4dGVybiB2b2lkIHJhaXNlX3NvZnRpcnEodW5zaWduZWQgaW50IG5yKTsKIAorLyogVGhpcyBpcyB0aGUgd29ya2xpc3QgdGhhdCBxdWV1ZXMgdXAgcGVyLWNwdSBzb2Z0aXJxIHdvcmsuCisgKgorICogc2VuZF9yZW1vdGVfc2VuZGlycSgpIGFkZHMgd29yayB0byB0aGVzZSBsaXN0cywgYW5kCisgKiB0aGUgc29mdGlycSBoYW5kbGVyIGl0c2VsZiBkZXF1ZXVlcyBmcm9tIHRoZW0uICBUaGUgcXVldWVzCisgKiBhcmUgcHJvdGVjdGVkIGJ5IGRpc2FibGluZyBsb2NhbCBjcHUgaW50ZXJydXB0cyBhbmQgdGhleSBtdXN0CisgKiBvbmx5IGJlIGFjY2Vzc2VkIGJ5IHRoZSBsb2NhbCBjcHUgdGhhdCB0aGV5IGFyZSBmb3IuCisgKi8KK0RFQ0xBUkVfUEVSX0NQVShzdHJ1Y3QgbGlzdF9oZWFkIFtOUl9TT0ZUSVJRU10sIHNvZnRpcnFfd29ya19saXN0KTsKKworLyogVHJ5IHRvIHNlbmQgYSBzb2Z0aXJxIHRvIGEgcmVtb3RlIGNwdS4gIElmIHRoaXMgY2Fubm90IGJlIGRvbmUsIHRoZQorICogd29yayB3aWxsIGJlIHF1ZXVlZCB0byB0aGUgbG9jYWwgY3B1LgorICovCitleHRlcm4gdm9pZCBzZW5kX3JlbW90ZV9zb2Z0aXJxKHN0cnVjdCBjYWxsX3NpbmdsZV9kYXRhICpjcCwgaW50IGNwdSwgaW50IHNvZnRpcnEpOworCisvKiBMaWtlIHNlbmRfcmVtb3RlX3NvZnRpcnEoKSwgYnV0IHRoZSBjYWxsZXIgbXVzdCBkaXNhYmxlIGxvY2FsIGNwdSBpbnRlcnJ1cHRzCisgKiBhbmQgY29tcHV0ZSB0aGUgY3VycmVudCBjcHUsIHBhc3NlZCBpbiBhcyAndGhpc19jcHUnLgorICovCitleHRlcm4gdm9pZCBfX3NlbmRfcmVtb3RlX3NvZnRpcnEoc3RydWN0IGNhbGxfc2luZ2xlX2RhdGEgKmNwLCBpbnQgY3B1LAorCQkJCSAgaW50IHRoaXNfY3B1LCBpbnQgc29mdGlycSk7CiAKIC8qIFRhc2tsZXRzIC0tLSBtdWx0aXRocmVhZGVkIGFuYWxvZ3VlIG9mIEJIcy4KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pb21tdS1oZWxwZXIuaCBiL2luY2x1ZGUvbGludXgvaW9tbXUtaGVscGVyLmgKaW5kZXggYTZkMDU4Ni4uM2IwNjhlNWIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaW9tbXUtaGVscGVyLmgKKysrIGIvaW5jbHVkZS9saW51eC9pb21tdS1oZWxwZXIuaApAQCAtMjMsNCArMjMsNyBAQAogZXh0ZXJuIHZvaWQgaW9tbXVfYXJlYV9mcmVlKHVuc2lnbmVkIGxvbmcgKm1hcCwgdW5zaWduZWQgbG9uZyBzdGFydCwKIAkJCSAgICB1bnNpZ25lZCBpbnQgbnIpOwogCitleHRlcm4gdW5zaWduZWQgbG9uZyBpb21tdV9udW1fcGFnZXModW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGxlbiwKKwkJCQkgICAgIHVuc2lnbmVkIGxvbmcgaW9fcGFnZV9zaXplKTsKKwogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2lvcG9ydC5oIGIvaW5jbHVkZS9saW51eC9pb3BvcnQuaAppbmRleCBlZTliY2M2Li4wNDFlOTVhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2lvcG9ydC5oCisrKyBiL2luY2x1ZGUvbGludXgvaW9wb3J0LmgKQEAgLTM0LDcgKzM0LDggQEAKICAqLwogI2RlZmluZSBJT1JFU09VUkNFX0JJVFMJCTB4MDAwMDAwZmYJLyogQnVzLXNwZWNpZmljIGJpdHMgKi8KIAotI2RlZmluZSBJT1JFU09VUkNFX0lPCQkweDAwMDAwMTAwCS8qIFJlc291cmNlIHR5cGUgKi8KKyNkZWZpbmUgSU9SRVNPVVJDRV9UWVBFX0JJVFMJMHgwMDAwMGYwMAkvKiBSZXNvdXJjZSB0eXBlICovCisjZGVmaW5lIElPUkVTT1VSQ0VfSU8JCTB4MDAwMDAxMDAKICNkZWZpbmUgSU9SRVNPVVJDRV9NRU0JCTB4MDAwMDAyMDAKICNkZWZpbmUgSU9SRVNPVVJDRV9JUlEJCTB4MDAwMDA0MDAKICNkZWZpbmUgSU9SRVNPVVJDRV9ETUEJCTB4MDAwMDA4MDAKQEAgLTEyNiw2ICsxMjcsMTAgQEAKIHsKIAlyZXR1cm4gcmVzLT5lbmQgLSByZXMtPnN0YXJ0ICsgMTsKIH0KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyByZXNvdXJjZV90eXBlKHN0cnVjdCByZXNvdXJjZSAqcmVzKQoreworCXJldHVybiByZXMtPmZsYWdzICYgSU9SRVNPVVJDRV9UWVBFX0JJVFM7Cit9CiAKIC8qIENvbnZlbmllbmNlIHNob3J0aGFuZCB3aXRoIGFsbG9jYXRpb24gKi8KICNkZWZpbmUgcmVxdWVzdF9yZWdpb24oc3RhcnQsbixuYW1lKQlfX3JlcXVlc3RfcmVnaW9uKCZpb3BvcnRfcmVzb3VyY2UsIChzdGFydCksIChuKSwgKG5hbWUpKQpAQCAtMTY5LDYgKzE3NCw3IEBACiAKIGV4dGVybiB2b2lkIF9fZGV2bV9yZWxlYXNlX3JlZ2lvbihzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCByZXNvdXJjZSAqcGFyZW50LAogCQkJCSAgcmVzb3VyY2Vfc2l6ZV90IHN0YXJ0LCByZXNvdXJjZV9zaXplX3Qgbik7CitleHRlcm4gaW50IGlvbWVtX21hcF9zYW5pdHlfY2hlY2socmVzb3VyY2Vfc2l6ZV90IGFkZHIsIHVuc2lnbmVkIGxvbmcgc2l6ZSk7CiAKICNlbmRpZiAvKiBfX0FTU0VNQkxZX18gKi8KICNlbmRpZgkvKiBfTElOVVhfSU9QT1JUX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2lvdmEuaCBiL2luY2x1ZGUvbGludXgvaW92YS5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBkcml2ZXJzL3BjaS9pb3ZhLmgKcmVuYW1lIHRvIGluY2x1ZGUvbGludXgvaW92YS5oCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2lycS5oIGIvaW5jbHVkZS9saW51eC9pcnEuaAppbmRleCA4ZDk0MTFiLi5kMDU4YzU3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2lycS5oCisrKyBiL2luY2x1ZGUvbGludXgvaXJxLmgKQEAgLTE4LDYgKzE4LDcgQEAKICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L2NwdW1hc2suaD4KICNpbmNsdWRlIDxsaW51eC9pcnFyZXR1cm4uaD4KKyNpbmNsdWRlIDxsaW51eC9pcnFuci5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAKICNpbmNsdWRlIDxhc20vaXJxLmg+CkBAIC0xNTIsNiArMTUzLDcgQEAKICAqIEBuYW1lOgkJZmxvdyBoYW5kbGVyIG5hbWUgZm9yIC9wcm9jL2ludGVycnVwdHMgb3V0cHV0CiAgKi8KIHN0cnVjdCBpcnFfZGVzYyB7CisJdW5zaWduZWQgaW50CQlpcnE7CiAJaXJxX2Zsb3dfaGFuZGxlcl90CWhhbmRsZV9pcnE7CiAJc3RydWN0IGlycV9jaGlwCQkqY2hpcDsKIAlzdHJ1Y3QgbXNpX2Rlc2MJCSptc2lfZGVzYzsKQEAgLTE3MCw3ICsxNzIsNyBAQAogCWNwdW1hc2tfdAkJYWZmaW5pdHk7CiAJdW5zaWduZWQgaW50CQljcHU7CiAjZW5kaWYKLSNpZiBkZWZpbmVkKENPTkZJR19HRU5FUklDX1BFTkRJTkdfSVJRKSB8fCBkZWZpbmVkKENPTkZJR19JUlFCQUxBTkNFKQorI2lmZGVmIENPTkZJR19HRU5FUklDX1BFTkRJTkdfSVJRCiAJY3B1bWFza190CQlwZW5kaW5nX21hc2s7CiAjZW5kaWYKICNpZmRlZiBDT05GSUdfUFJPQ19GUwpAQCAtMTc5LDggKzE4MSwxNCBAQAogCWNvbnN0IGNoYXIJCSpuYW1lOwogfSBfX19fY2FjaGVsaW5lX2ludGVybm9kZWFsaWduZWRfaW5fc21wOwogCisKIGV4dGVybiBzdHJ1Y3QgaXJxX2Rlc2MgaXJxX2Rlc2NbTlJfSVJRU107CiAKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGlycV9kZXNjICppcnFfdG9fZGVzYyh1bnNpZ25lZCBpbnQgaXJxKQoreworCXJldHVybiAoaXJxIDwgbnJfaXJxcykgPyBpcnFfZGVzYyArIGlycSA6IE5VTEw7Cit9CisKIC8qCiAgKiBNaWdyYXRpb24gaGVscGVycyBmb3Igb2Jzb2xldGUgbmFtZXMsIHRoZXkgd2lsbCBnbyBhd2F5OgogICovCkBAIC0xOTgsMTkgKzIwNiwxNSBAQAogCiAjaWZkZWYgQ09ORklHX0dFTkVSSUNfSEFSRElSUVMKIAotI2lmbmRlZiBoYW5kbGVfZHluYW1pY190aWNrCi0jIGRlZmluZSBoYW5kbGVfZHluYW1pY190aWNrKGEpCQlkbyB7IH0gd2hpbGUgKDApCi0jZW5kaWYKLQogI2lmZGVmIENPTkZJR19TTVAKIAotI2lmIGRlZmluZWQoQ09ORklHX0dFTkVSSUNfUEVORElOR19JUlEpIHx8IGRlZmluZWQoQ09ORklHX0lSUUJBTEFOQ0UpCisjaWZkZWYgQ09ORklHX0dFTkVSSUNfUEVORElOR19JUlEKIAogdm9pZCBzZXRfcGVuZGluZ19pcnEodW5zaWduZWQgaW50IGlycSwgY3B1bWFza190IG1hc2spOwogdm9pZCBtb3ZlX25hdGl2ZV9pcnEoaW50IGlycSk7CiB2b2lkIG1vdmVfbWFza2VkX2lycShpbnQgaXJxKTsKIAotI2Vsc2UgLyogQ09ORklHX0dFTkVSSUNfUEVORElOR19JUlEgfHwgQ09ORklHX0lSUUJBTEFOQ0UgKi8KKyNlbHNlIC8qIENPTkZJR19HRU5FUklDX1BFTkRJTkdfSVJRICovCiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBtb3ZlX2lycShpbnQgaXJxKQogewpAQCAtMjM3LDE5ICsyNDEsMTQgQEAKIAogI2VuZGlmIC8qIENPTkZJR19TTVAgKi8KIAotI2lmZGVmIENPTkZJR19JUlFCQUxBTkNFCi1leHRlcm4gdm9pZCBzZXRfYmFsYW5jZV9pcnFfYWZmaW5pdHkodW5zaWduZWQgaW50IGlycSwgY3B1bWFza190IG1hc2spOwotI2Vsc2UKLXN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfYmFsYW5jZV9pcnFfYWZmaW5pdHkodW5zaWduZWQgaW50IGlycSwgY3B1bWFza190IG1hc2spCi17Ci19Ci0jZW5kaWYKLQogZXh0ZXJuIGludCBub19pcnFfYWZmaW5pdHk7CiAKIHN0YXRpYyBpbmxpbmUgaW50IGlycV9iYWxhbmNpbmdfZGlzYWJsZWQodW5zaWduZWQgaW50IGlycSkKIHsKLQlyZXR1cm4gaXJxX2Rlc2NbaXJxXS5zdGF0dXMgJiBJUlFfTk9fQkFMQU5DSU5HX01BU0s7CisJc3RydWN0IGlycV9kZXNjICpkZXNjOworCisJZGVzYyA9IGlycV90b19kZXNjKGlycSk7CisJcmV0dXJuIGRlc2MtPnN0YXR1cyAmIElSUV9OT19CQUxBTkNJTkdfTUFTSzsKIH0KIAogLyogSGFuZGxlIGlycSBhY3Rpb24gY2hhaW5zOiAqLwpAQCAtMjc5LDEwICsyNzgsOCBAQAogICogaXJxY2hpcC1zdHlsZSBjb250cm9sbGVyIHRoZW4gd2UgY2FsbCB0aGUgLT5oYW5kbGVfaXJxKCkgaGFuZGxlciwKICAqIGFuZCBpdCBjYWxscyBfX2RvX0lSUSgpIGlmIGl0J3MgYXR0YWNoZWQgdG8gYW4gaXJxdHlwZS1zdHlsZSBjb250cm9sbGVyLgogICovCi1zdGF0aWMgaW5saW5lIHZvaWQgZ2VuZXJpY19oYW5kbGVfaXJxKHVuc2lnbmVkIGludCBpcnEpCitzdGF0aWMgaW5saW5lIHZvaWQgZ2VuZXJpY19oYW5kbGVfaXJxX2Rlc2ModW5zaWduZWQgaW50IGlycSwgc3RydWN0IGlycV9kZXNjICpkZXNjKQogewotCXN0cnVjdCBpcnFfZGVzYyAqZGVzYyA9IGlycV9kZXNjICsgaXJxOwotCiAjaWZkZWYgQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUQogCWRlc2MtPmhhbmRsZV9pcnEoaXJxLCBkZXNjKTsKICNlbHNlCkBAIC0yOTMsNiArMjkwLDExIEBACiAjZW5kaWYKIH0KIAorc3RhdGljIGlubGluZSB2b2lkIGdlbmVyaWNfaGFuZGxlX2lycSh1bnNpZ25lZCBpbnQgaXJxKQoreworCWdlbmVyaWNfaGFuZGxlX2lycV9kZXNjKGlycSwgaXJxX3RvX2Rlc2MoaXJxKSk7Cit9CisKIC8qIEhhbmRsaW5nIG9mIHVuaGFuZGxlZCBhbmQgc3B1cmlvdXMgaW50ZXJydXB0czogKi8KIGV4dGVybiB2b2lkIG5vdGVfaW50ZXJydXB0KHVuc2lnbmVkIGludCBpcnEsIHN0cnVjdCBpcnFfZGVzYyAqZGVzYywKIAkJCSAgIGludCBhY3Rpb25fcmV0KTsKQEAgLTMyNSw3ICszMjcsMTAgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCBfX3NldF9pcnFfaGFuZGxlcl91bmxvY2tlZChpbnQgaXJxLAogCQkJCQkgICAgICBpcnFfZmxvd19oYW5kbGVyX3QgaGFuZGxlcikKIHsKLQlpcnFfZGVzY1tpcnFdLmhhbmRsZV9pcnEgPSBoYW5kbGVyOworCXN0cnVjdCBpcnFfZGVzYyAqZGVzYzsKKworCWRlc2MgPSBpcnFfdG9fZGVzYyhpcnEpOworCWRlc2MtPmhhbmRsZV9pcnEgPSBoYW5kbGVyOwogfQogCiAvKgpAQCAtMzUzLDEzICszNTgsMTQgQEAKIGV4dGVybiB2b2lkIHNldF9pcnFfcHJvYmUodW5zaWduZWQgaW50IGlycSk7CiAKIC8qIEhhbmRsZSBkeW5hbWljIGlycSBjcmVhdGlvbiBhbmQgZGVzdHJ1Y3Rpb24gKi8KK2V4dGVybiB1bnNpZ25lZCBpbnQgY3JlYXRlX2lycV9ucih1bnNpZ25lZCBpbnQgaXJxX3dhbnQpOwogZXh0ZXJuIGludCBjcmVhdGVfaXJxKHZvaWQpOwogZXh0ZXJuIHZvaWQgZGVzdHJveV9pcnEodW5zaWduZWQgaW50IGlycSk7CiAKIC8qIFRlc3QgdG8gc2VlIGlmIGEgZHJpdmVyIGhhcyBzdWNjZXNzZnVsbHkgcmVxdWVzdGVkIGFuIGlycSAqLwogc3RhdGljIGlubGluZSBpbnQgaXJxX2hhc19hY3Rpb24odW5zaWduZWQgaW50IGlycSkKIHsKLQlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MgPSBpcnFfZGVzYyArIGlycTsKKwlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MgPSBpcnFfdG9fZGVzYyhpcnEpOwogCXJldHVybiBkZXNjLT5hY3Rpb24gIT0gTlVMTDsKIH0KIApAQCAtMzc0LDEwICszODAsMTAgQEAKIGV4dGVybiBpbnQgc2V0X2lycV90eXBlKHVuc2lnbmVkIGludCBpcnEsIHVuc2lnbmVkIGludCB0eXBlKTsKIGV4dGVybiBpbnQgc2V0X2lycV9tc2kodW5zaWduZWQgaW50IGlycSwgc3RydWN0IG1zaV9kZXNjICplbnRyeSk7CiAKLSNkZWZpbmUgZ2V0X2lycV9jaGlwKGlycSkJKGlycV9kZXNjW2lycV0uY2hpcCkKLSNkZWZpbmUgZ2V0X2lycV9jaGlwX2RhdGEoaXJxKQkoaXJxX2Rlc2NbaXJxXS5jaGlwX2RhdGEpCi0jZGVmaW5lIGdldF9pcnFfZGF0YShpcnEpCShpcnFfZGVzY1tpcnFdLmhhbmRsZXJfZGF0YSkKLSNkZWZpbmUgZ2V0X2lycV9tc2koaXJxKQkoaXJxX2Rlc2NbaXJxXS5tc2lfZGVzYykKKyNkZWZpbmUgZ2V0X2lycV9jaGlwKGlycSkJKGlycV90b19kZXNjKGlycSktPmNoaXApCisjZGVmaW5lIGdldF9pcnFfY2hpcF9kYXRhKGlycSkJKGlycV90b19kZXNjKGlycSktPmNoaXBfZGF0YSkKKyNkZWZpbmUgZ2V0X2lycV9kYXRhKGlycSkJKGlycV90b19kZXNjKGlycSktPmhhbmRsZXJfZGF0YSkKKyNkZWZpbmUgZ2V0X2lycV9tc2koaXJxKQkoaXJxX3RvX2Rlc2MoaXJxKS0+bXNpX2Rlc2MpCiAKICNlbmRpZiAvKiBDT05GSUdfR0VORVJJQ19IQVJESVJRUyAqLwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2lycW5yLmggYi9pbmNsdWRlL2xpbnV4L2lycW5yLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzE3MWRkYwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvaXJxbnIuaApAQCAtMCwwICsxLDI0IEBACisjaWZuZGVmIF9MSU5VWF9JUlFOUl9ICisjZGVmaW5lIF9MSU5VWF9JUlFOUl9ICisKKyNpZm5kZWYgQ09ORklHX0dFTkVSSUNfSEFSRElSUVMKKyNpbmNsdWRlIDxhc20vaXJxLmg+CisjIGRlZmluZSBucl9pcnFzCQlOUl9JUlFTCisKKyMgZGVmaW5lIGZvcl9lYWNoX2lycV9kZXNjKGlycSwgZGVzYykJCVwKKwlmb3IgKGlycSA9IDA7IGlycSA8IG5yX2lycXM7IGlycSsrKQorI2Vsc2UKK2V4dGVybiBpbnQgbnJfaXJxczsKKworIyBkZWZpbmUgZm9yX2VhY2hfaXJxX2Rlc2MoaXJxLCBkZXNjKQkJXAorCWZvciAoaXJxID0gMCwgZGVzYyA9IGlycV9kZXNjOyBpcnEgPCBucl9pcnFzOyBpcnErKywgZGVzYysrKQorCisjIGRlZmluZSBmb3JfZWFjaF9pcnFfZGVzY19yZXZlcnNlKGlycSwgZGVzYykJCQlcCisJZm9yIChpcnEgPSBucl9pcnFzIC0xLCBkZXNjID0gaXJxX2Rlc2MgKyAobnJfaXJxcyAtMSApOwlcCisJICAgICBpcnEgPiAwOyBpcnEtLSwgZGVzYy0tKQorI2VuZGlmCisKKyNkZWZpbmUgZm9yX2VhY2hfaXJxX25yKGlycSkJCQlcCisJZm9yIChpcnEgPSAwOyBpcnEgPCBucl9pcnFzOyBpcnErKykKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2l2dHYuaCBiL2luY2x1ZGUvbGludXgvaXZ0di5oCmluZGV4IDE3Y2E2NGIuLmYyNzIwMjggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaXZ0di5oCisrKyBiL2luY2x1ZGUvbGludXgvaXZ0di5oCkBAIC0yMyw2ICsyMyw3IEBACiAKICNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYyLmg+CiAKIC8qIGl2dHYga25vd3Mgc2V2ZXJhbCBkaXN0aW5jdCBvdXRwdXQgbW9kZXM6IE1QRUcgc3RyZWFtaW5nLAogICAgWVVWIHN0cmVhbWluZywgWVVWIHVwZGF0ZXMgdGhyb3VnaCB1c2VyIERNQSBhbmQgdGhlIHBhc3N0aHJvdWdoCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2piZC5oIGIvaW5jbHVkZS9saW51eC9qYmQuaAppbmRleCAwN2E5YjUyLi4zNWQ0ZjYzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2piZC5oCisrKyBiL2luY2x1ZGUvbGludXgvamJkLmgKQEAgLTYxLDcgKzYxLDcgQEAKIAlkbyB7CQkJCQkJCQlcCiAJCWlmICgobikgPD0gam91cm5hbF9lbmFibGVfZGVidWcpIHsJCQlcCiAJCQlwcmludGsgKEtFUk5fREVCVUcgIiglcywgJWQpOiAlczogIiwJCVwKLQkJCQlfX0ZJTEVfXywgX19MSU5FX18sIF9fRlVOQ1RJT05fXyk7CVwKKwkJCQlfX0ZJTEVfXywgX19MSU5FX18sIF9fZnVuY19fKTsJXAogCQkJcHJpbnRrIChmLCAjIyBhKTsJCQkJXAogCQl9CQkJCQkJCVwKIAl9IHdoaWxlICgwKQpAQCAtODE2LDYgKzgxNiw5IEBACiAjZGVmaW5lIEpGU19GTFVTSEVECTB4MDA4CS8qIFRoZSBqb3VybmFsIHN1cGVyYmxvY2sgaGFzIGJlZW4gZmx1c2hlZCAqLwogI2RlZmluZSBKRlNfTE9BREVECTB4MDEwCS8qIFRoZSBqb3VybmFsIHN1cGVyYmxvY2sgaGFzIGJlZW4gbG9hZGVkICovCiAjZGVmaW5lIEpGU19CQVJSSUVSCTB4MDIwCS8qIFVzZSBJREUgYmFycmllcnMgKi8KKyNkZWZpbmUgSkZTX0FCT1JUX09OX1NZTkNEQVRBX0VSUgkweDA0MCAgLyogQWJvcnQgdGhlIGpvdXJuYWwgb24gZmlsZQorCQkJCQkJKiBkYXRhIHdyaXRlIGVycm9yIGluIG9yZGVyZWQKKwkJCQkJCSogbW9kZSAqLwogCiAvKgogICogRnVuY3Rpb24gZGVjbGFyYXRpb25zIGZvciB0aGUgam91cm5hbGluZyB0cmFuc2FjdGlvbiBhbmQgYnVmZmVyCkBAIC05ODQsNyArOTg3LDcgQEAKIAogI2RlZmluZSBqYmRfRU5PU1lTKCkgXAogZG8gewkJCQkJCQkJICAgICAgICAgICBcCi0JcHJpbnRrIChLRVJOX0VSUiAiSkJEIHVuaW1wbGVtZW50ZWQgZnVuY3Rpb24gJXNcbiIsIF9fRlVOQ1RJT05fXyk7IFwKKwlwcmludGsgKEtFUk5fRVJSICJKQkQgdW5pbXBsZW1lbnRlZCBmdW5jdGlvbiAlc1xuIiwgX19mdW5jX18pOyBcCiAJY3VycmVudC0+c3RhdGUgPSBUQVNLX1VOSU5URVJSVVBUSUJMRTsJCQkgICAgICAgICAgIFwKIAlzY2hlZHVsZSgpOwkJCQkJCSAgICAgICAgICAgXAogfSB3aGlsZSAoMSkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvamJkMi5oIGIvaW5jbHVkZS9saW51eC9qYmQyLmgKaW5kZXggZDJlOTFlYS4uYzdkMTA2ZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9qYmQyLmgKKysrIGIvaW5jbHVkZS9saW51eC9qYmQyLmgKQEAgLTYxLDcgKzYxLDcgQEAKIAlkbyB7CQkJCQkJCQlcCiAJCWlmICgobikgPD0gamJkMl9qb3VybmFsX2VuYWJsZV9kZWJ1ZykgewkJCVwKIAkJCXByaW50ayAoS0VSTl9ERUJVRyAiKCVzLCAlZCk6ICVzOiAiLAkJXAotCQkJCV9fRklMRV9fLCBfX0xJTkVfXywgX19GVU5DVElPTl9fKTsJXAorCQkJCV9fRklMRV9fLCBfX0xJTkVfXywgX19mdW5jX18pOwlcCiAJCQlwcmludGsgKGYsICMjIGEpOwkJCQlcCiAJCX0JCQkJCQkJXAogCX0gd2hpbGUgKDApCkBAIC02NDEsNiArNjQxLDExIEBACiAJICovCiAJaW50IHRfaGFuZGxlX2NvdW50OwogCisJLyoKKwkgKiBGb3IgdXNlIGJ5IHRoZSBmaWxlc3lzdGVtIHRvIHN0b3JlIGZzLXNwZWNpZmljIGRhdGEKKwkgKiBzdHJ1Y3R1cmVzIGFzc29jaWF0ZWQgd2l0aCB0aGUgdHJhbnNhY3Rpb24KKwkgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkCXRfcHJpdmF0ZV9saXN0OwogfTsKIAogc3RydWN0IHRyYW5zYWN0aW9uX3J1bl9zdGF0c19zIHsKQEAgLTkzNSw2ICs5NDAsMTAgQEAKIAogCXBpZF90CQkJal9sYXN0X3N5bmNfd3JpdGVyOwogCisJLyogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbiBhIHRyYW5zYWN0aW9uIGlzIGNsb3NlZCAqLworCXZvaWQJCQkoKmpfY29tbWl0X2NhbGxiYWNrKShqb3VybmFsX3QgKiwKKwkJCQkJCSAgICAgdHJhbnNhY3Rpb25fdCAqKTsKKwogCS8qCiAJICogSm91cm5hbCBzdGF0aXN0aWNzCiAJICovCkBAIC0xMTQzLDcgKzExNTIsNyBAQAogCiAjZGVmaW5lIGpiZF9FTk9TWVMoKSBcCiBkbyB7CQkJCQkJCQkgICAgICAgICAgIFwKLQlwcmludGsgKEtFUk5fRVJSICJKQkQgdW5pbXBsZW1lbnRlZCBmdW5jdGlvbiAlc1xuIiwgX19GVU5DVElPTl9fKTsgXAorCXByaW50ayAoS0VSTl9FUlIgIkpCRCB1bmltcGxlbWVudGVkIGZ1bmN0aW9uICVzXG4iLCBfX2Z1bmNfXyk7IFwKIAljdXJyZW50LT5zdGF0ZSA9IFRBU0tfVU5JTlRFUlJVUFRJQkxFOwkJCSAgICAgICAgICAgXAogCXNjaGVkdWxlKCk7CQkJCQkJICAgICAgICAgICBcCiB9IHdoaWxlICgxKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9qb3VybmFsLWhlYWQuaCBiL2luY2x1ZGUvbGludXgvam91cm5hbC1oZWFkLmgKaW5kZXggOGE2MmQxZS4uYmI3MGViYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9qb3VybmFsLWhlYWQuaAorKysgYi9pbmNsdWRlL2xpbnV4L2pvdXJuYWwtaGVhZC5oCkBAIC0zLDcgKzMsNyBAQAogICoKICAqIGJ1ZmZlcl9oZWFkIGZpZWxkcyBmb3IgSkJECiAgKgotICogMjcgTWF5IDIwMDEgQW5kcmV3IE1vcnRvbiA8YWtwbUBkaWdlby5jb20+CisgKiAyNyBNYXkgMjAwMSBBbmRyZXcgTW9ydG9uCiAgKglDcmVhdGVkIC0gcHVsbGVkIG91dCBvZiBmcy5oCiAgKi8KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9rYWxsc3ltcy5oIGIvaW5jbHVkZS9saW51eC9rYWxsc3ltcy5oCmluZGV4IGI5NjE0NDguLmYzZmUzNDMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgva2FsbHN5bXMuaAorKysgYi9pbmNsdWRlL2xpbnV4L2thbGxzeW1zLmgKQEAgLTkzLDEyICs5MywxMCBAQAogfQogCiAvKgotICogUHJldHR5LXByaW50IGEgZnVuY3Rpb24gcG9pbnRlci4KLSAqCi0gKiBpYTY0IGFuZCBwcGM2NCBmdW5jdGlvbiBwb2ludGVycyBhcmUgcmVhbGx5IGZ1bmN0aW9uIGRlc2NyaXB0b3JzLAotICogd2hpY2ggY29udGFpbiBhIHBvaW50ZXIgdGhlIHJlYWwgYWRkcmVzcy4KKyAqIFByZXR0eS1wcmludCBhIGZ1bmN0aW9uIHBvaW50ZXIuICBUaGlzIGZ1bmN0aW9uIGlzIGRlcHJlY2F0ZWQuCisgKiBQbGVhc2UgdXNlIHRoZSAiJXBGIiB2c3ByaW50ZiBmb3JtYXQgaW5zdGVhZC4KICAqLwotc3RhdGljIGlubGluZSB2b2lkIHByaW50X2ZuX2Rlc2NyaXB0b3Jfc3ltYm9sKGNvbnN0IGNoYXIgKmZtdCwgdm9pZCAqYWRkcikKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX2RlcHJlY2F0ZWQgcHJpbnRfZm5fZGVzY3JpcHRvcl9zeW1ib2woY29uc3QgY2hhciAqZm10LCB2b2lkICphZGRyKQogewogI2lmIGRlZmluZWQoQ09ORklHX0lBNjQpIHx8IGRlZmluZWQoQ09ORklHX1BQQzY0KQogCWFkZHIgPSAqKHZvaWQgKiopYWRkcjsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgva2VybmVsLmggYi9pbmNsdWRlL2xpbnV4L2tlcm5lbC5oCmluZGV4IDc1ZDgxZjEuLjVhNTY2YjcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgva2VybmVsLmgKKysrIGIvaW5jbHVkZS9saW51eC9rZXJuZWwuaApAQCAtMTYsNiArMTYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2xvZzIuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlY2hlY2suaD4KICNpbmNsdWRlIDxsaW51eC9yYXRlbGltaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9keW5hbWljX3ByaW50ay5oPgogI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KICNpbmNsdWRlIDxhc20vYnVnLmg+CiAKQEAgLTIxMyw2ICsyMTQsOSBAQAogCQl7IHJldHVybiBmYWxzZTsgfQogI2VuZGlmCiAKK2V4dGVybiBpbnQgcHJpbnRrX25lZWRzX2NwdShpbnQgY3B1KTsKK2V4dGVybiB2b2lkIHByaW50a190aWNrKHZvaWQpOworCiBleHRlcm4gdm9pZCBhc21saW5rYWdlIF9fYXR0cmlidXRlX18oKGZvcm1hdChwcmludGYsIDEsIDIpKSkKIAllYXJseV9wcmludGsoY29uc3QgY2hhciAqZm10LCAuLi4pOwogCkBAIC0yMzUsOSArMjM5LDEwIEBACiBleHRlcm4gaW50IHBhbmljX3RpbWVvdXQ7CiBleHRlcm4gaW50IHBhbmljX29uX29vcHM7CiBleHRlcm4gaW50IHBhbmljX29uX3VucmVjb3ZlcmVkX25taTsKLWV4dGVybiBpbnQgdGFpbnRlZDsKIGV4dGVybiBjb25zdCBjaGFyICpwcmludF90YWludGVkKHZvaWQpOwotZXh0ZXJuIHZvaWQgYWRkX3RhaW50KHVuc2lnbmVkKTsKK2V4dGVybiB2b2lkIGFkZF90YWludCh1bnNpZ25lZCBmbGFnKTsKK2V4dGVybiBpbnQgdGVzdF90YWludCh1bnNpZ25lZCBmbGFnKTsKK2V4dGVybiB1bnNpZ25lZCBsb25nIGdldF90YWludCh2b2lkKTsKIGV4dGVybiBpbnQgcm9vdF9tb3VudGZsYWdzOwogCiAvKiBWYWx1ZXMgdXNlZCBmb3Igc3lzdGVtX3N0YXRlICovCkBAIC0yNTAsMTYgKzI1NSwxNyBAQAogCVNZU1RFTV9TVVNQRU5EX0RJU0ssCiB9IHN5c3RlbV9zdGF0ZTsKIAotI2RlZmluZSBUQUlOVF9QUk9QUklFVEFSWV9NT0RVTEUJKDE8PDApCi0jZGVmaW5lIFRBSU5UX0ZPUkNFRF9NT0RVTEUJCSgxPDwxKQotI2RlZmluZSBUQUlOVF9VTlNBRkVfU01QCQkoMTw8MikKLSNkZWZpbmUgVEFJTlRfRk9SQ0VEX1JNTU9ECQkoMTw8MykKLSNkZWZpbmUgVEFJTlRfTUFDSElORV9DSEVDSwkJKDE8PDQpCi0jZGVmaW5lIFRBSU5UX0JBRF9QQUdFCQkJKDE8PDUpCi0jZGVmaW5lIFRBSU5UX1VTRVIJCQkoMTw8NikKLSNkZWZpbmUgVEFJTlRfRElFCQkJKDE8PDcpCi0jZGVmaW5lIFRBSU5UX09WRVJSSURERU5fQUNQSV9UQUJMRQkoMTw8OCkKLSNkZWZpbmUgVEFJTlRfV0FSTgkJCSgxPDw5KQorI2RlZmluZSBUQUlOVF9QUk9QUklFVEFSWV9NT0RVTEUJMAorI2RlZmluZSBUQUlOVF9GT1JDRURfTU9EVUxFCQkxCisjZGVmaW5lIFRBSU5UX1VOU0FGRV9TTVAJCTIKKyNkZWZpbmUgVEFJTlRfRk9SQ0VEX1JNTU9ECQkzCisjZGVmaW5lIFRBSU5UX01BQ0hJTkVfQ0hFQ0sJCTQKKyNkZWZpbmUgVEFJTlRfQkFEX1BBR0UJCQk1CisjZGVmaW5lIFRBSU5UX1VTRVIJCQk2CisjZGVmaW5lIFRBSU5UX0RJRQkJCTcKKyNkZWZpbmUgVEFJTlRfT1ZFUlJJRERFTl9BQ1BJX1RBQkxFCTgKKyNkZWZpbmUgVEFJTlRfV0FSTgkJCTkKKyNkZWZpbmUgVEFJTlRfQ1JBUAkJCTEwCiAKIGV4dGVybiB2b2lkIGR1bXBfc3RhY2sodm9pZCkgX19jb2xkOwogCkBAIC0zMDMsOCArMzA5LDEyIEBACiAjZGVmaW5lIHByX2luZm8oZm10LCBhcmcuLi4pIFwKIAlwcmludGsoS0VSTl9JTkZPIGZtdCwgIyNhcmcpCiAKLSNpZmRlZiBERUJVRwogLyogSWYgeW91IGFyZSB3cml0aW5nIGEgZHJpdmVyLCBwbGVhc2UgdXNlIGRldl9kYmcgaW5zdGVhZCAqLworI2lmIGRlZmluZWQoQ09ORklHX0RZTkFNSUNfUFJJTlRLX0RFQlVHKQorI2RlZmluZSBwcl9kZWJ1ZyhmbXQsIC4uLikgZG8geyBcCisJZHluYW1pY19wcl9kZWJ1ZyhmbXQsICMjX19WQV9BUkdTX18pOyBcCisJfSB3aGlsZSAoMCkKKyNlbGlmIGRlZmluZWQoREVCVUcpCiAjZGVmaW5lIHByX2RlYnVnKGZtdCwgYXJnLi4uKSBcCiAJcHJpbnRrKEtFUk5fREVCVUcgZm10LCAjI2FyZykKICNlbHNlCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2tlcm5lbF9zdGF0LmggYi9pbmNsdWRlL2xpbnV4L2tlcm5lbF9zdGF0LmgKaW5kZXggY2Y5ZjQwYS4uNGExNDVjYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9rZXJuZWxfc3RhdC5oCisrKyBiL2luY2x1ZGUvbGludXgva2VybmVsX3N0YXQuaApAQCAtMzksMTkgKzM5LDM0IEBACiAKIGV4dGVybiB1bnNpZ25lZCBsb25nIGxvbmcgbnJfY29udGV4dF9zd2l0Y2hlcyh2b2lkKTsKIAorc3RydWN0IGlycV9kZXNjOworCitzdGF0aWMgaW5saW5lIHZvaWQga3N0YXRfaW5jcl9pcnFzX3RoaXNfY3B1KHVuc2lnbmVkIGludCBpcnEsCisJCQkJCSAgICBzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MpCit7CisJa3N0YXRfdGhpc19jcHUuaXJxc1tpcnFdKys7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGtzdGF0X2lycXNfY3B1KHVuc2lnbmVkIGludCBpcnEsIGludCBjcHUpCit7CisgICAgICAgcmV0dXJuIGtzdGF0X2NwdShjcHUpLmlycXNbaXJxXTsKK30KKwogLyoKICAqIE51bWJlciBvZiBpbnRlcnJ1cHRzIHBlciBzcGVjaWZpYyBJUlEgc291cmNlLCBzaW5jZSBib290dXAKICAqLwotc3RhdGljIGlubGluZSBpbnQga3N0YXRfaXJxcyhpbnQgaXJxKQorc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQga3N0YXRfaXJxcyh1bnNpZ25lZCBpbnQgaXJxKQogewotCWludCBjcHUsIHN1bSA9IDA7CisJdW5zaWduZWQgaW50IHN1bSA9IDA7CisJaW50IGNwdTsKIAogCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpCi0JCXN1bSArPSBrc3RhdF9jcHUoY3B1KS5pcnFzW2lycV07CisJCXN1bSArPSBrc3RhdF9pcnFzX2NwdShpcnEsIGNwdSk7CiAKIAlyZXR1cm4gc3VtOwogfQogCitleHRlcm4gdW5zaWduZWQgbG9uZyBsb25nIHRhc2tfZGVsdGFfZXhlYyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKik7CiBleHRlcm4gdm9pZCBhY2NvdW50X3VzZXJfdGltZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKiwgY3B1dGltZV90KTsKIGV4dGVybiB2b2lkIGFjY291bnRfdXNlcl90aW1lX3NjYWxlZChzdHJ1Y3QgdGFza19zdHJ1Y3QgKiwgY3B1dGltZV90KTsKIGV4dGVybiB2b2lkIGFjY291bnRfc3lzdGVtX3RpbWUoc3RydWN0IHRhc2tfc3RydWN0ICosIGludCwgY3B1dGltZV90KTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgva21vZC5oIGIvaW5jbHVkZS9saW51eC9rbW9kLmgKaW5kZXggYTFhOTE1Ny4uOTIyMTNhOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9rbW9kLmgKKysrIGIvaW5jbHVkZS9saW51eC9rbW9kLmgKQEAgLTk5LDQgKzk5LDcgQEAKIGV4dGVybiBpbnQgY2FsbF91c2VybW9kZWhlbHBlcl9waXBlKGNoYXIgKnBhdGgsIGNoYXIgKmFyZ3ZbXSwgY2hhciAqZW52cFtdLAogCQkJCSAgICBzdHJ1Y3QgZmlsZSAqKmZpbHApOwogCitleHRlcm4gaW50IHVzZXJtb2RlaGVscGVyX2Rpc2FibGUodm9pZCk7CitleHRlcm4gdm9pZCB1c2VybW9kZWhlbHBlcl9lbmFibGUodm9pZCk7CisKICNlbmRpZiAvKiBfX0xJTlVYX0tNT0RfSF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2t2bS5oIGIvaW5jbHVkZS9saW51eC9rdm0uaAppbmRleCA3MGEzMDY1Li43OTdmY2Q3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2t2bS5oCisrKyBiL2luY2x1ZGUvbGludXgva3ZtLmgKQEAgLTMxMSwyMiArMzExLDMzIEBACiAKIC8qIFRoaXMgc3RydWN0dXJlIHJlcHJlc2VudHMgYSBzaW5nbGUgdHJhY2UgYnVmZmVyIHJlY29yZC4gKi8KIHN0cnVjdCBrdm1fdHJhY2VfcmVjIHsKLQlfX3UzMiBldmVudDoyODsKLQlfX3UzMiBleHRyYV91MzI6MzsKLQlfX3UzMiBjeWNsZV9pbjoxOworCS8qIHZhcmlhYmxlIHJlY192YWwKKwkgKiBpcyBzcGxpdCBpbnRvOgorCSAqIGJpdHMgMCAtIDI3ICAtPiBldmVudCBpZAorCSAqIGJpdHMgMjggLTMwICAtPiBudW1iZXIgb2YgZXh0cmEgZGF0YSBhcmdzIG9mIHNpemUgdTMyCisJICogYml0cyAzMSAgICAgIC0+IGJpbmFyeSBpbmRpY2F0b3IgZm9yIGlmIHRzYyBpcyBpbiByZWNvcmQKKwkgKi8KKwlfX3UzMiByZWNfdmFsOwogCV9fdTMyIHBpZDsKIAlfX3UzMiB2Y3B1X2lkOwogCXVuaW9uIHsKIAkJc3RydWN0IHsKLQkJCV9fdTY0IGN5Y2xlX3U2NDsKKwkJCV9fdTY0IHRpbWVzdGFtcDsKIAkJCV9fdTMyIGV4dHJhX3UzMltLVk1fVFJDX0VYVFJBX01BWF07Ci0JCX0gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgY3ljbGU7CisJCX0gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgdGltZXN0YW1wOwogCQlzdHJ1Y3QgewogCQkJX191MzIgZXh0cmFfdTMyW0tWTV9UUkNfRVhUUkFfTUFYXTsKLQkJfSBub2N5Y2xlOworCQl9IG5vdGltZXN0YW1wOwogCX0gdTsKIH07CiAKKyNkZWZpbmUgVFJBQ0VfUkVDX0VWRU5UX0lEKHZhbCkgXAorCQkoMHgwZmZmZmZmZiAmICh2YWwpKQorI2RlZmluZSBUUkFDRV9SRUNfTlVNX0RBVEFfQVJHUyh2YWwpIFwKKwkJKDB4NzAwMDAwMDAgJiAoKHZhbCkgPDwgMjgpKQorI2RlZmluZSBUUkFDRV9SRUNfVENTKHZhbCkgXAorCQkoMHg4MDAwMDAwMCAmICgodmFsKSA8PCAzMSkpCisKICNkZWZpbmUgS1ZNSU8gMHhBRQogCiAvKgpAQCAtMzcyLDYgKzM4MywxMCBAQAogI2RlZmluZSBLVk1fQ0FQX01QX1NUQVRFIDE0CiAjZGVmaW5lIEtWTV9DQVBfQ09BTEVTQ0VEX01NSU8gMTUKICNkZWZpbmUgS1ZNX0NBUF9TWU5DX01NVSAxNiAgLyogQ2hhbmdlcyB0byBob3N0IG1tYXAgYXJlIHJlZmxlY3RlZCBpbiBndWVzdCAqLworI2lmIGRlZmluZWQoQ09ORklHX1g4Nil8fGRlZmluZWQoQ09ORklHX0lBNjQpCisjZGVmaW5lIEtWTV9DQVBfREVWSUNFX0FTU0lHTk1FTlQgMTcKKyNlbmRpZgorI2RlZmluZSBLVk1fQ0FQX0lPTU1VIDE4CiAKIC8qCiAgKiBpb2N0bHMgZm9yIFZNIGZkcwpAQCAtNDAxLDYgKzQxNiwxMCBAQAogCQkJX0lPVyhLVk1JTywgIDB4NjcsIHN0cnVjdCBrdm1fY29hbGVzY2VkX21taW9fem9uZSkKICNkZWZpbmUgS1ZNX1VOUkVHSVNURVJfQ09BTEVTQ0VEX01NSU8gXAogCQkJX0lPVyhLVk1JTywgIDB4NjgsIHN0cnVjdCBrdm1fY29hbGVzY2VkX21taW9fem9uZSkKKyNkZWZpbmUgS1ZNX0FTU0lHTl9QQ0lfREVWSUNFIF9JT1IoS1ZNSU8sIDB4NjksIFwKKwkJCQkgICBzdHJ1Y3Qga3ZtX2Fzc2lnbmVkX3BjaV9kZXYpCisjZGVmaW5lIEtWTV9BU1NJR05fSVJRIF9JT1IoS1ZNSU8sIDB4NzAsIFwKKwkJCSAgICBzdHJ1Y3Qga3ZtX2Fzc2lnbmVkX2lycSkKIAogLyoKICAqIGlvY3RscyBmb3IgdmNwdSBmZHMKQEAgLTQ0MCw0ICs0NTksNDUgQEAKICNkZWZpbmUgS1ZNX0dFVF9NUF9TVEFURSAgICAgICAgICBfSU9SKEtWTUlPLCAgMHg5OCwgc3RydWN0IGt2bV9tcF9zdGF0ZSkKICNkZWZpbmUgS1ZNX1NFVF9NUF9TVEFURSAgICAgICAgICBfSU9XKEtWTUlPLCAgMHg5OSwgc3RydWN0IGt2bV9tcF9zdGF0ZSkKIAorI2RlZmluZSBLVk1fVFJDX0lOSl9WSVJRICAgICAgICAgKEtWTV9UUkNfSEFORExFUiArIDB4MDIpCisjZGVmaW5lIEtWTV9UUkNfUkVERUxJVkVSX0VWVCAgICAoS1ZNX1RSQ19IQU5ETEVSICsgMHgwMykKKyNkZWZpbmUgS1ZNX1RSQ19QRU5EX0lOVFIgICAgICAgIChLVk1fVFJDX0hBTkRMRVIgKyAweDA0KQorI2RlZmluZSBLVk1fVFJDX0lPX1JFQUQgICAgICAgICAgKEtWTV9UUkNfSEFORExFUiArIDB4MDUpCisjZGVmaW5lIEtWTV9UUkNfSU9fV1JJVEUgICAgICAgICAoS1ZNX1RSQ19IQU5ETEVSICsgMHgwNikKKyNkZWZpbmUgS1ZNX1RSQ19DUl9SRUFEICAgICAgICAgIChLVk1fVFJDX0hBTkRMRVIgKyAweDA3KQorI2RlZmluZSBLVk1fVFJDX0NSX1dSSVRFICAgICAgICAgKEtWTV9UUkNfSEFORExFUiArIDB4MDgpCisjZGVmaW5lIEtWTV9UUkNfRFJfUkVBRCAgICAgICAgICAoS1ZNX1RSQ19IQU5ETEVSICsgMHgwOSkKKyNkZWZpbmUgS1ZNX1RSQ19EUl9XUklURSAgICAgICAgIChLVk1fVFJDX0hBTkRMRVIgKyAweDBBKQorI2RlZmluZSBLVk1fVFJDX01TUl9SRUFEICAgICAgICAgKEtWTV9UUkNfSEFORExFUiArIDB4MEIpCisjZGVmaW5lIEtWTV9UUkNfTVNSX1dSSVRFICAgICAgICAoS1ZNX1RSQ19IQU5ETEVSICsgMHgwQykKKyNkZWZpbmUgS1ZNX1RSQ19DUFVJRCAgICAgICAgICAgIChLVk1fVFJDX0hBTkRMRVIgKyAweDBEKQorI2RlZmluZSBLVk1fVFJDX0lOVFIgICAgICAgICAgICAgKEtWTV9UUkNfSEFORExFUiArIDB4MEUpCisjZGVmaW5lIEtWTV9UUkNfTk1JICAgICAgICAgICAgICAoS1ZNX1RSQ19IQU5ETEVSICsgMHgwRikKKyNkZWZpbmUgS1ZNX1RSQ19WTU1DQUxMICAgICAgICAgIChLVk1fVFJDX0hBTkRMRVIgKyAweDEwKQorI2RlZmluZSBLVk1fVFJDX0hMVCAgICAgICAgICAgICAgKEtWTV9UUkNfSEFORExFUiArIDB4MTEpCisjZGVmaW5lIEtWTV9UUkNfQ0xUUyAgICAgICAgICAgICAoS1ZNX1RSQ19IQU5ETEVSICsgMHgxMikKKyNkZWZpbmUgS1ZNX1RSQ19MTVNXICAgICAgICAgICAgIChLVk1fVFJDX0hBTkRMRVIgKyAweDEzKQorI2RlZmluZSBLVk1fVFJDX0FQSUNfQUNDRVNTICAgICAgKEtWTV9UUkNfSEFORExFUiArIDB4MTQpCisjZGVmaW5lIEtWTV9UUkNfVERQX0ZBVUxUICAgICAgICAoS1ZNX1RSQ19IQU5ETEVSICsgMHgxNSkKKyNkZWZpbmUgS1ZNX1RSQ19HVExCX1dSSVRFICAgICAgIChLVk1fVFJDX0hBTkRMRVIgKyAweDE2KQorI2RlZmluZSBLVk1fVFJDX1NUTEJfV1JJVEUgICAgICAgKEtWTV9UUkNfSEFORExFUiArIDB4MTcpCisjZGVmaW5lIEtWTV9UUkNfU1RMQl9JTlZBTCAgICAgICAoS1ZNX1RSQ19IQU5ETEVSICsgMHgxOCkKKyNkZWZpbmUgS1ZNX1RSQ19QUENfSU5TVFIgICAgICAgIChLVk1fVFJDX0hBTkRMRVIgKyAweDE5KQorCitzdHJ1Y3Qga3ZtX2Fzc2lnbmVkX3BjaV9kZXYgeworCV9fdTMyIGFzc2lnbmVkX2Rldl9pZDsKKwlfX3UzMiBidXNucjsKKwlfX3UzMiBkZXZmbjsKKwlfX3UzMiBmbGFnczsKK307CisKK3N0cnVjdCBrdm1fYXNzaWduZWRfaXJxIHsKKwlfX3UzMiBhc3NpZ25lZF9kZXZfaWQ7CisJX191MzIgaG9zdF9pcnE7CisJX191MzIgZ3Vlc3RfaXJxOworCV9fdTMyIGZsYWdzOworfTsKKworI2RlZmluZSBLVk1fREVWX0FTU0lHTl9FTkFCTEVfSU9NTVUJKDEgPDwgMCkKKwogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmggYi9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmgKaW5kZXggODUyNWFmYy4uMzgzM2M0OCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9rdm1faG9zdC5oCisrKyBiL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaApAQCAtMzQsNiArMzQsOCBAQAogI2RlZmluZSBLVk1fUkVRX01NVV9SRUxPQUQgICAgICAgICAzCiAjZGVmaW5lIEtWTV9SRVFfVFJJUExFX0ZBVUxUICAgICAgIDQKICNkZWZpbmUgS1ZNX1JFUV9QRU5ESU5HX1RJTUVSICAgICAgNQorI2RlZmluZSBLVk1fUkVRX1VOSEFMVCAgICAgICAgICAgICA2CisjZGVmaW5lIEtWTV9SRVFfTU1VX1NZTkMgICAgICAgICAgIDcKIAogc3RydWN0IGt2bV92Y3B1OwogZXh0ZXJuIHN0cnVjdCBrbWVtX2NhY2hlICprdm1fdmNwdV9jYWNoZTsKQEAgLTI3OSwxMiArMjgxLDY4IEBACiAKIHN0cnVjdCAga3ZtICprdm1fYXJjaF9jcmVhdGVfdm0odm9pZCk7CiB2b2lkIGt2bV9hcmNoX2Rlc3Ryb3lfdm0oc3RydWN0IGt2bSAqa3ZtKTsKK3ZvaWQga3ZtX2ZyZWVfYWxsX2Fzc2lnbmVkX2RldmljZXMoc3RydWN0IGt2bSAqa3ZtKTsKIAogaW50IGt2bV9jcHVfZ2V0X2ludGVycnVwdChzdHJ1Y3Qga3ZtX3ZjcHUgKnYpOwogaW50IGt2bV9jcHVfaGFzX2ludGVycnVwdChzdHJ1Y3Qga3ZtX3ZjcHUgKnYpOwogaW50IGt2bV9jcHVfaGFzX3BlbmRpbmdfdGltZXIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKIHZvaWQga3ZtX3ZjcHVfa2ljayhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwogCitpbnQga3ZtX2lzX21taW9fcGZuKHBmbl90IHBmbik7CisKK3N0cnVjdCBrdm1faXJxX2Fja19ub3RpZmllciB7CisJc3RydWN0IGhsaXN0X25vZGUgbGluazsKKwl1bnNpZ25lZCBnc2k7CisJdm9pZCAoKmlycV9hY2tlZCkoc3RydWN0IGt2bV9pcnFfYWNrX25vdGlmaWVyICpraWFuKTsKK307CisKK3N0cnVjdCBrdm1fYXNzaWduZWRfZGV2X2tlcm5lbCB7CisJc3RydWN0IGt2bV9pcnFfYWNrX25vdGlmaWVyIGFja19ub3RpZmllcjsKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QgaW50ZXJydXB0X3dvcms7CisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OworCWludCBhc3NpZ25lZF9kZXZfaWQ7CisJaW50IGhvc3RfYnVzbnI7CisJaW50IGhvc3RfZGV2Zm47CisJaW50IGhvc3RfaXJxOworCWludCBndWVzdF9pcnE7CisJaW50IGlycV9yZXF1ZXN0ZWQ7CisJc3RydWN0IHBjaV9kZXYgKmRldjsKKwlzdHJ1Y3Qga3ZtICprdm07Cit9Owordm9pZCBrdm1fc2V0X2lycShzdHJ1Y3Qga3ZtICprdm0sIGludCBpcnEsIGludCBsZXZlbCk7Cit2b2lkIGt2bV9ub3RpZnlfYWNrZWRfaXJxKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgZ3NpKTsKK3ZvaWQga3ZtX3JlZ2lzdGVyX2lycV9hY2tfbm90aWZpZXIoc3RydWN0IGt2bSAqa3ZtLAorCQkJCSAgIHN0cnVjdCBrdm1faXJxX2Fja19ub3RpZmllciAqa2lhbik7Cit2b2lkIGt2bV91bnJlZ2lzdGVyX2lycV9hY2tfbm90aWZpZXIoc3RydWN0IGt2bSAqa3ZtLAorCQkJCSAgICAgc3RydWN0IGt2bV9pcnFfYWNrX25vdGlmaWVyICpraWFuKTsKKworI2lmZGVmIENPTkZJR19ETUFSCitpbnQga3ZtX2lvbW11X21hcF9wYWdlcyhzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IGJhc2VfZ2ZuLAorCQkJdW5zaWduZWQgbG9uZyBucGFnZXMpOworaW50IGt2bV9pb21tdV9tYXBfZ3Vlc3Qoc3RydWN0IGt2bSAqa3ZtLAorCQkJc3RydWN0IGt2bV9hc3NpZ25lZF9kZXZfa2VybmVsICphc3NpZ25lZF9kZXYpOworaW50IGt2bV9pb21tdV91bm1hcF9ndWVzdChzdHJ1Y3Qga3ZtICprdm0pOworI2Vsc2UgLyogQ09ORklHX0RNQVIgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGt2bV9pb21tdV9tYXBfcGFnZXMoc3RydWN0IGt2bSAqa3ZtLAorCQkJCSAgICAgIGdmbl90IGJhc2VfZ2ZuLAorCQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgbnBhZ2VzKQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIGludCBrdm1faW9tbXVfbWFwX2d1ZXN0KHN0cnVjdCBrdm0gKmt2bSwKKwkJCQkgICAgICBzdHJ1Y3Qga3ZtX2Fzc2lnbmVkX2Rldl9rZXJuZWwKKwkJCQkgICAgICAqYXNzaWduZWRfZGV2KQoreworCXJldHVybiAtRU5PREVWOworfQorCitzdGF0aWMgaW5saW5lIGludCBrdm1faW9tbXVfdW5tYXBfZ3Vlc3Qoc3RydWN0IGt2bSAqa3ZtKQoreworCXJldHVybiAwOworfQorI2VuZGlmIC8qIENPTkZJR19ETUFSICovCisKIHN0YXRpYyBpbmxpbmUgdm9pZCBrdm1fZ3Vlc3RfZW50ZXIodm9pZCkKIHsKIAlhY2NvdW50X3N5c3RlbV92dGltZShjdXJyZW50KTsKQEAgLTMwNyw2ICszNjUsMTEgQEAKIAlyZXR1cm4gKGdwYV90KWdmbiA8PCBQQUdFX1NISUZUOwogfQogCitzdGF0aWMgaW5saW5lIGhwYV90IHBmbl90b19ocGEocGZuX3QgcGZuKQoreworCXJldHVybiAoaHBhX3QpcGZuIDw8IFBBR0VfU0hJRlQ7Cit9CisKIHN0YXRpYyBpbmxpbmUgdm9pZCBrdm1fbWlncmF0ZV90aW1lcnMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogewogCXNldF9iaXQoS1ZNX1JFUV9NSUdSQVRFX1RJTUVSLCAmdmNwdS0+cmVxdWVzdHMpOwpAQCAtMzI2LDYgKzM4OSwyNSBAQAogZXh0ZXJuIHN0cnVjdCBrdm1fc3RhdHNfZGVidWdmc19pdGVtIGRlYnVnZnNfZW50cmllc1tdOwogZXh0ZXJuIHN0cnVjdCBkZW50cnkgKmt2bV9kZWJ1Z2ZzX2RpcjsKIAorI2RlZmluZSBLVk1UUkFDRV81RChldnQsIHZjcHUsIGQxLCBkMiwgZDMsIGQ0LCBkNSwgbmFtZSkgXAorCXRyYWNlX21hcmsoa3ZtX3RyYWNlXyMjbmFtZSwgIiV1ICVwICV1ICV1ICV1ICV1ICV1ICV1IiwgS1ZNX1RSQ18jI2V2dCwgXAorCQkJCQkJdmNwdSwgNSwgZDEsIGQyLCBkMywgZDQsIGQ1KQorI2RlZmluZSBLVk1UUkFDRV80RChldnQsIHZjcHUsIGQxLCBkMiwgZDMsIGQ0LCBuYW1lKSBcCisJdHJhY2VfbWFyayhrdm1fdHJhY2VfIyNuYW1lLCAiJXUgJXAgJXUgJXUgJXUgJXUgJXUgJXUiLCBLVk1fVFJDXyMjZXZ0LCBcCisJCQkJCQl2Y3B1LCA0LCBkMSwgZDIsIGQzLCBkNCwgMCkKKyNkZWZpbmUgS1ZNVFJBQ0VfM0QoZXZ0LCB2Y3B1LCBkMSwgZDIsIGQzLCBuYW1lKSBcCisJdHJhY2VfbWFyayhrdm1fdHJhY2VfIyNuYW1lLCAiJXUgJXAgJXUgJXUgJXUgJXUgJXUgJXUiLCBLVk1fVFJDXyMjZXZ0LCBcCisJCQkJCQl2Y3B1LCAzLCBkMSwgZDIsIGQzLCAwLCAwKQorI2RlZmluZSBLVk1UUkFDRV8yRChldnQsIHZjcHUsIGQxLCBkMiwgbmFtZSkgXAorCXRyYWNlX21hcmsoa3ZtX3RyYWNlXyMjbmFtZSwgIiV1ICVwICV1ICV1ICV1ICV1ICV1ICV1IiwgS1ZNX1RSQ18jI2V2dCwgXAorCQkJCQkJdmNwdSwgMiwgZDEsIGQyLCAwLCAwLCAwKQorI2RlZmluZSBLVk1UUkFDRV8xRChldnQsIHZjcHUsIGQxLCBuYW1lKSBcCisJdHJhY2VfbWFyayhrdm1fdHJhY2VfIyNuYW1lLCAiJXUgJXAgJXUgJXUgJXUgJXUgJXUgJXUiLCBLVk1fVFJDXyMjZXZ0LCBcCisJCQkJCQl2Y3B1LCAxLCBkMSwgMCwgMCwgMCwgMCkKKyNkZWZpbmUgS1ZNVFJBQ0VfMEQoZXZ0LCB2Y3B1LCBuYW1lKSBcCisJdHJhY2VfbWFyayhrdm1fdHJhY2VfIyNuYW1lLCAiJXUgJXAgJXUgJXUgJXUgJXUgJXUgJXUiLCBLVk1fVFJDXyMjZXZ0LCBcCisJCQkJCQl2Y3B1LCAwLCAwLCAwLCAwLCAwLCAwKQorCiAjaWZkZWYgQ09ORklHX0tWTV9UUkFDRQogaW50IGt2bV90cmFjZV9pb2N0bCh1bnNpZ25lZCBpbnQgaW9jdGwsIHVuc2lnbmVkIGxvbmcgYXJnKTsKIHZvaWQga3ZtX3RyYWNlX2NsZWFudXAodm9pZCk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2xvY2tkL2JpbmQuaCBiL2luY2x1ZGUvbGludXgvbG9ja2QvYmluZC5oCmluZGV4IDNkMjViY2QuLmU1ODcyZGMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbG9ja2QvYmluZC5oCisrKyBiL2luY2x1ZGUvbGludXgvbG9ja2QvYmluZC5oCkBAIC0yNyw3ICsyNyw2IEBACiAJCQkJCQlzdHJ1Y3QgbmZzX2ZoICosCiAJCQkJCQlzdHJ1Y3QgZmlsZSAqKik7CiAJdm9pZAkJCSgqZmNsb3NlKShzdHJ1Y3QgZmlsZSAqKTsKLQl1bnNpZ25lZCBsb25nCQkoKmdldF9ncmFjZV9wZXJpb2QpKHZvaWQpOwogfTsKIAogZXh0ZXJuIHN0cnVjdCBubG1zdmNfYmluZGluZyAqCW5sbXN2Y19vcHM7CkBAIC01MywxNSArNTIsNyBAQAogCiBleHRlcm4gaW50CW5sbWNsbnRfcHJvYyhzdHJ1Y3QgbmxtX2hvc3QgKmhvc3QsIGludCBjbWQsCiAJCQkJCXN0cnVjdCBmaWxlX2xvY2sgKmZsKTsKLWV4dGVybiBpbnQJbG9ja2RfdXAoaW50IHByb3RvKTsKK2V4dGVybiBpbnQJbG9ja2RfdXAodm9pZCk7CiBleHRlcm4gdm9pZAlsb2NrZF9kb3duKHZvaWQpOwogCi11bnNpZ25lZCBsb25nIGdldF9uZnNfZ3JhY2VfcGVyaW9kKHZvaWQpOwotCi0jaWZkZWYgQ09ORklHX05GU0RfVjQKLXVuc2lnbmVkIGxvbmcgZ2V0X25mczRfZ3JhY2VfcGVyaW9kKHZvaWQpOwotI2Vsc2UKLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBnZXRfbmZzNF9ncmFjZV9wZXJpb2Qodm9pZCkge3JldHVybiAwO30KLSNlbmRpZgotCiAjZW5kaWYgLyogTElOVVhfTE9DS0RfQklORF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2xvY2tkL2xvY2tkLmggYi9pbmNsdWRlL2xpbnV4L2xvY2tkL2xvY2tkLmgKaW5kZXggZGJiODdhYi4uYjU2ZDVhYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9sb2NrZC9sb2NrZC5oCisrKyBiL2luY2x1ZGUvbGludXgvbG9ja2QvbG9ja2QuaApAQCAtMTIsNiArMTIsOCBAQAogI2lmZGVmIF9fS0VSTkVMX18KIAogI2luY2x1ZGUgPGxpbnV4L2luLmg+CisjaW5jbHVkZSA8bGludXgvaW42Lmg+CisjaW5jbHVkZSA8bmV0L2lwdjYuaD4KICNpbmNsdWRlIDxsaW51eC9mcy5oPgogI2luY2x1ZGUgPGxpbnV4L2tyZWYuaD4KICNpbmNsdWRlIDxsaW51eC91dHNuYW1lLmg+CkBAIC0zOCw4ICs0MCw5IEBACiAgKi8KIHN0cnVjdCBubG1faG9zdCB7CiAJc3RydWN0IGhsaXN0X25vZGUJaF9oYXNoOwkJLyogZG91Ymx5IGxpbmtlZCBsaXN0ICovCi0Jc3RydWN0IHNvY2thZGRyX2luCWhfYWRkcjsJCS8qIHBlZXIgYWRkcmVzcyAqLwotCXN0cnVjdCBzb2NrYWRkcl9pbgloX3NhZGRyOwkvKiBvdXIgYWRkcmVzcyAob3B0aW9uYWwpICovCisJc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UJaF9hZGRyOwkJLyogcGVlciBhZGRyZXNzICovCisJc2l6ZV90CQkJaF9hZGRybGVuOworCXN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlCWhfc3JjYWRkcjsJLyogb3VyIGFkZHJlc3MgKG9wdGlvbmFsKSAqLwogCXN0cnVjdCBycGNfY2xudAkqCWhfcnBjY2xudDsJLyogUlBDIGNsaWVudCB0byB0YWxrIHRvIHBlZXIgKi8KIAljaGFyICoJCQloX25hbWU7CQkvKiByZW1vdGUgaG9zdG5hbWUgKi8KIAl1MzIJCQloX3ZlcnNpb247CS8qIGludGVyZmFjZSB2ZXJzaW9uICovCkBAIC02MSwxOCArNjQsNTYgQEAKIAlzdHJ1Y3QgbGlzdF9oZWFkCWhfZ3JhbnRlZDsJLyogTG9ja3MgaW4gR1JBTlRFRCBzdGF0ZSAqLwogCXN0cnVjdCBsaXN0X2hlYWQJaF9yZWNsYWltOwkvKiBMb2NrcyBpbiBSRUNMQUlNIHN0YXRlICovCiAJc3RydWN0IG5zbV9oYW5kbGUgKgloX25zbWhhbmRsZTsJLyogTlNNIHN0YXR1cyBoYW5kbGUgKi8KKworCWNoYXIJCQloX2FkZHJidWZbNDhdLAkvKiBhZGRyZXNzIGV5ZWNhdGNoZXJzICovCisJCQkJaF9zcmNhZGRyYnVmWzQ4XTsKIH07CiAKIHN0cnVjdCBuc21faGFuZGxlIHsKIAlzdHJ1Y3QgbGlzdF9oZWFkCXNtX2xpbms7CiAJYXRvbWljX3QJCXNtX2NvdW50OwogCWNoYXIgKgkJCXNtX25hbWU7Ci0Jc3RydWN0IHNvY2thZGRyX2luCXNtX2FkZHI7CisJc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UJc21fYWRkcjsKKwlzaXplX3QJCQlzbV9hZGRybGVuOwogCXVuc2lnbmVkIGludAkJc21fbW9uaXRvcmVkIDogMSwKIAkJCQlzbV9zdGlja3kgOiAxOwkvKiBkb24ndCB1bm1vbml0b3IgKi8KKwljaGFyCQkJc21fYWRkcmJ1Zls0OF07CS8qIGFkZHJlc3MgZXllY2F0Y2hlciAqLwogfTsKIAogLyoKKyAqIFJpZ29yb3VzIHR5cGUgY2hlY2tpbmcgb24gc29ja2FkZHIgdHlwZSBjb252ZXJzaW9ucworICovCitzdGF0aWMgaW5saW5lIHN0cnVjdCBzb2NrYWRkcl9pbiAqbmxtX2FkZHJfaW4oY29uc3Qgc3RydWN0IG5sbV9ob3N0ICpob3N0KQoreworCXJldHVybiAoc3RydWN0IHNvY2thZGRyX2luICopJmhvc3QtPmhfYWRkcjsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3Qgc29ja2FkZHIgKm5sbV9hZGRyKGNvbnN0IHN0cnVjdCBubG1faG9zdCAqaG9zdCkKK3sKKwlyZXR1cm4gKHN0cnVjdCBzb2NrYWRkciAqKSZob3N0LT5oX2FkZHI7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHNvY2thZGRyX2luICpubG1fc3JjYWRkcl9pbihjb25zdCBzdHJ1Y3QgbmxtX2hvc3QgKmhvc3QpCit7CisJcmV0dXJuIChzdHJ1Y3Qgc29ja2FkZHJfaW4gKikmaG9zdC0+aF9zcmNhZGRyOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBzb2NrYWRkciAqbmxtX3NyY2FkZHIoY29uc3Qgc3RydWN0IG5sbV9ob3N0ICpob3N0KQoreworCXJldHVybiAoc3RydWN0IHNvY2thZGRyICopJmhvc3QtPmhfc3JjYWRkcjsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3Qgc29ja2FkZHJfaW4gKm5zbV9hZGRyX2luKGNvbnN0IHN0cnVjdCBuc21faGFuZGxlICpoYW5kbGUpCit7CisJcmV0dXJuIChzdHJ1Y3Qgc29ja2FkZHJfaW4gKikmaGFuZGxlLT5zbV9hZGRyOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBzb2NrYWRkciAqbnNtX2FkZHIoY29uc3Qgc3RydWN0IG5zbV9oYW5kbGUgKmhhbmRsZSkKK3sKKwlyZXR1cm4gKHN0cnVjdCBzb2NrYWRkciAqKSZoYW5kbGUtPnNtX2FkZHI7Cit9CisKKy8qCiAgKiBNYXAgYW4gZmxfb3duZXJfdCBpbnRvIGEgdW5pcXVlIDMyLWJpdCAicGlkIgogICovCiBzdHJ1Y3QgbmxtX2xvY2tvd25lciB7CkBAIC0xNjYsNyArMjA3LDggQEAKIHN0cnVjdCBubG1fd2FpdCAqIG5sbWNsbnRfcHJlcGFyZV9ibG9jayhzdHJ1Y3QgbmxtX2hvc3QgKmhvc3QsIHN0cnVjdCBmaWxlX2xvY2sgKmZsKTsKIHZvaWQJCSAgbmxtY2xudF9maW5pc2hfYmxvY2soc3RydWN0IG5sbV93YWl0ICpibG9jayk7CiBpbnQJCSAgbmxtY2xudF9ibG9jayhzdHJ1Y3QgbmxtX3dhaXQgKmJsb2NrLCBzdHJ1Y3QgbmxtX3Jxc3QgKnJlcSwgbG9uZyB0aW1lb3V0KTsKLV9fYmUzMgkJICBubG1jbG50X2dyYW50KGNvbnN0IHN0cnVjdCBzb2NrYWRkcl9pbiAqYWRkciwgY29uc3Qgc3RydWN0IG5sbV9sb2NrICopOworX19iZTMyCQkgIG5sbWNsbnRfZ3JhbnQoY29uc3Qgc3RydWN0IHNvY2thZGRyICphZGRyLAorCQkJCWNvbnN0IHN0cnVjdCBubG1fbG9jayAqbG9jayk7CiB2b2lkCQkgIG5sbWNsbnRfcmVjb3Zlcnkoc3RydWN0IG5sbV9ob3N0ICopOwogaW50CQkgIG5sbWNsbnRfcmVjbGFpbShzdHJ1Y3QgbmxtX2hvc3QgKiwgc3RydWN0IGZpbGVfbG9jayAqKTsKIHZvaWQJCSAgbmxtY2xudF9uZXh0X2Nvb2tpZShzdHJ1Y3QgbmxtX2Nvb2tpZSAqKTsKQEAgLTE3NCwxMiArMjE2LDE0IEBACiAvKgogICogSG9zdCBjYWNoZQogICovCi1zdHJ1Y3QgbmxtX2hvc3QgICpubG1jbG50X2xvb2t1cF9ob3N0KGNvbnN0IHN0cnVjdCBzb2NrYWRkcl9pbiAqc2luLAotCQkJCQlpbnQgcHJvdG8sIHUzMiB2ZXJzaW9uLAorc3RydWN0IG5sbV9ob3N0ICAqbmxtY2xudF9sb29rdXBfaG9zdChjb25zdCBzdHJ1Y3Qgc29ja2FkZHIgKnNhcCwKKwkJCQkJY29uc3Qgc2l6ZV90IHNhbGVuLAorCQkJCQljb25zdCB1bnNpZ25lZCBzaG9ydCBwcm90b2NvbCwKKwkJCQkJY29uc3QgdTMyIHZlcnNpb24sCisJCQkJCWNvbnN0IGNoYXIgKmhvc3RuYW1lKTsKK3N0cnVjdCBubG1faG9zdCAgKm5sbXN2Y19sb29rdXBfaG9zdChjb25zdCBzdHJ1Y3Qgc3ZjX3Jxc3QgKnJxc3RwLAogCQkJCQljb25zdCBjaGFyICpob3N0bmFtZSwKLQkJCQkJdW5zaWduZWQgaW50IGhvc3RuYW1lX2xlbik7Ci1zdHJ1Y3QgbmxtX2hvc3QgICpubG1zdmNfbG9va3VwX2hvc3Qoc3RydWN0IHN2Y19ycXN0ICosIGNvbnN0IGNoYXIgKiwKLQkJCQkJdW5zaWduZWQgaW50KTsKKwkJCQkJY29uc3Qgc2l6ZV90IGhvc3RuYW1lX2xlbik7CiBzdHJ1Y3QgcnBjX2NsbnQgKiBubG1fYmluZF9ob3N0KHN0cnVjdCBubG1faG9zdCAqKTsKIHZvaWQJCSAgbmxtX3JlYmluZF9ob3N0KHN0cnVjdCBubG1faG9zdCAqKTsKIHN0cnVjdCBubG1faG9zdCAqIG5sbV9nZXRfaG9zdChzdHJ1Y3QgbmxtX2hvc3QgKik7CkBAIC0yMDEsNyArMjQ1LDcgQEAKICAqLwogX19iZTMyCQkgIG5sbXN2Y19sb2NrKHN0cnVjdCBzdmNfcnFzdCAqLCBzdHJ1Y3QgbmxtX2ZpbGUgKiwKIAkJCSAgICAgIHN0cnVjdCBubG1faG9zdCAqLCBzdHJ1Y3QgbmxtX2xvY2sgKiwgaW50LAotCQkJICAgICAgc3RydWN0IG5sbV9jb29raWUgKik7CisJCQkgICAgICBzdHJ1Y3QgbmxtX2Nvb2tpZSAqLCBpbnQpOwogX19iZTMyCQkgIG5sbXN2Y191bmxvY2soc3RydWN0IG5sbV9maWxlICosIHN0cnVjdCBubG1fbG9jayAqKTsKIF9fYmUzMgkJICBubG1zdmNfdGVzdGxvY2soc3RydWN0IHN2Y19ycXN0ICosIHN0cnVjdCBubG1fZmlsZSAqLAogCQkJc3RydWN0IG5sbV9ob3N0ICosIHN0cnVjdCBubG1fbG9jayAqLApAQCAtMjMzLDE1ICsyNzcsODIgQEAKIAlyZXR1cm4gZmlsZS0+Zl9maWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlOwogfQogCi0vKgotICogQ29tcGFyZSB0d28gaG9zdCBhZGRyZXNzZXMgKG5lZWRzIG1vZGlmeWluZyBmb3IgaXB2NikKLSAqLwotc3RhdGljIGlubGluZSBpbnQgbmxtX2NtcF9hZGRyKGNvbnN0IHN0cnVjdCBzb2NrYWRkcl9pbiAqc2luMSwKLQkJCSAgICAgICBjb25zdCBzdHJ1Y3Qgc29ja2FkZHJfaW4gKnNpbjIpCitzdGF0aWMgaW5saW5lIGludCBfX25sbV9wcml2aWxlZ2VkX3JlcXVlc3Q0KGNvbnN0IHN0cnVjdCBzb2NrYWRkciAqc2FwKQogeworCWNvbnN0IHN0cnVjdCBzb2NrYWRkcl9pbiAqc2luID0gKHN0cnVjdCBzb2NrYWRkcl9pbiAqKXNhcDsKKwlyZXR1cm4gKHNpbi0+c2luX2FkZHIuc19hZGRyID09IGh0b25sKElOQUREUl9MT09QQkFDSykpICYmCisJCQkobnRvaHMoc2luLT5zaW5fcG9ydCkgPCAxMDI0KTsKK30KKworI2lmIGRlZmluZWQoQ09ORklHX0lQVjYpIHx8IGRlZmluZWQoQ09ORklHX0lQVjZfTU9EVUxFKQorc3RhdGljIGlubGluZSBpbnQgX19ubG1fcHJpdmlsZWdlZF9yZXF1ZXN0Nihjb25zdCBzdHJ1Y3Qgc29ja2FkZHIgKnNhcCkKK3sKKwljb25zdCBzdHJ1Y3Qgc29ja2FkZHJfaW42ICpzaW42ID0gKHN0cnVjdCBzb2NrYWRkcl9pbjYgKilzYXA7CisJcmV0dXJuIChpcHY2X2FkZHJfdHlwZSgmc2luNi0+c2luNl9hZGRyKSAmIElQVjZfQUREUl9MT09QQkFDSykgJiYKKwkJCShudG9ocyhzaW42LT5zaW42X3BvcnQpIDwgMTAyNCk7Cit9CisjZWxzZQkvKiBkZWZpbmVkKENPTkZJR19JUFY2KSB8fCBkZWZpbmVkKENPTkZJR19JUFY2X01PRFVMRSkgKi8KK3N0YXRpYyBpbmxpbmUgaW50IF9fbmxtX3ByaXZpbGVnZWRfcmVxdWVzdDYoY29uc3Qgc3RydWN0IHNvY2thZGRyICpzYXApCit7CisJcmV0dXJuIDA7Cit9CisjZW5kaWYJLyogZGVmaW5lZChDT05GSUdfSVBWNikgfHwgZGVmaW5lZChDT05GSUdfSVBWNl9NT0RVTEUpICovCisKKy8qCisgKiBFbnN1cmUgaW5jb21pbmcgcmVxdWVzdHMgYXJlIGZyb20gbG9jYWwgcHJpdmlsZWdlZCBjYWxsZXJzLgorICoKKyAqIFJldHVybiBUUlVFIGlmIHNlbmRlciBpcyBsb2NhbCBhbmQgaXMgY29ubmVjdGluZyB2aWEgYSBwcml2aWxlZ2VkIHBvcnQ7CisgKiBvdGhlcndpc2UgcmV0dXJuIEZBTFNFLgorICovCitzdGF0aWMgaW5saW5lIGludCBubG1fcHJpdmlsZWdlZF9yZXF1ZXN0ZXIoY29uc3Qgc3RydWN0IHN2Y19ycXN0ICpycXN0cCkKK3sKKwljb25zdCBzdHJ1Y3Qgc29ja2FkZHIgKnNhcCA9IHN2Y19hZGRyKHJxc3RwKTsKKworCXN3aXRjaCAoc2FwLT5zYV9mYW1pbHkpIHsKKwljYXNlIEFGX0lORVQ6CisJCXJldHVybiBfX25sbV9wcml2aWxlZ2VkX3JlcXVlc3Q0KHNhcCk7CisJY2FzZSBBRl9JTkVUNjoKKwkJcmV0dXJuIF9fbmxtX3ByaXZpbGVnZWRfcmVxdWVzdDYoc2FwKTsKKwlkZWZhdWx0OgorCQlyZXR1cm4gMDsKKwl9Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IF9fbmxtX2NtcF9hZGRyNChjb25zdCBzdHJ1Y3Qgc29ja2FkZHIgKnNhcDEsCisJCQkJICBjb25zdCBzdHJ1Y3Qgc29ja2FkZHIgKnNhcDIpCit7CisJY29uc3Qgc3RydWN0IHNvY2thZGRyX2luICpzaW4xID0gKGNvbnN0IHN0cnVjdCBzb2NrYWRkcl9pbiAqKXNhcDE7CisJY29uc3Qgc3RydWN0IHNvY2thZGRyX2luICpzaW4yID0gKGNvbnN0IHN0cnVjdCBzb2NrYWRkcl9pbiAqKXNhcDI7CiAJcmV0dXJuIHNpbjEtPnNpbl9hZGRyLnNfYWRkciA9PSBzaW4yLT5zaW5fYWRkci5zX2FkZHI7CiB9CiAKK3N0YXRpYyBpbmxpbmUgaW50IF9fbmxtX2NtcF9hZGRyNihjb25zdCBzdHJ1Y3Qgc29ja2FkZHIgKnNhcDEsCisJCQkJICBjb25zdCBzdHJ1Y3Qgc29ja2FkZHIgKnNhcDIpCit7CisJY29uc3Qgc3RydWN0IHNvY2thZGRyX2luNiAqc2luMSA9IChjb25zdCBzdHJ1Y3Qgc29ja2FkZHJfaW42ICopc2FwMTsKKwljb25zdCBzdHJ1Y3Qgc29ja2FkZHJfaW42ICpzaW4yID0gKGNvbnN0IHN0cnVjdCBzb2NrYWRkcl9pbjYgKilzYXAyOworCXJldHVybiBpcHY2X2FkZHJfZXF1YWwoJnNpbjEtPnNpbjZfYWRkciwgJnNpbjItPnNpbjZfYWRkcik7Cit9CisKKy8qCisgKiBDb21wYXJlIHR3byBob3N0IGFkZHJlc3NlcworICoKKyAqIFJldHVybiBUUlVFIGlmIHRoZSBhZGRyZXNzZXMgYXJlIHRoZSBzYW1lOyBvdGhlcndpc2UgRkFMU0UuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IG5sbV9jbXBfYWRkcihjb25zdCBzdHJ1Y3Qgc29ja2FkZHIgKnNhcDEsCisJCQkgICAgICAgY29uc3Qgc3RydWN0IHNvY2thZGRyICpzYXAyKQoreworCWlmIChzYXAxLT5zYV9mYW1pbHkgPT0gc2FwMi0+c2FfZmFtaWx5KSB7CisJCXN3aXRjaCAoc2FwMS0+c2FfZmFtaWx5KSB7CisJCWNhc2UgQUZfSU5FVDoKKwkJCXJldHVybiBfX25sbV9jbXBfYWRkcjQoc2FwMSwgc2FwMik7CisJCWNhc2UgQUZfSU5FVDY6CisJCQlyZXR1cm4gX19ubG1fY21wX2FkZHI2KHNhcDEsIHNhcDIpOworCQl9CisJfQorCXJldHVybiAwOworfQorCiAvKgogICogQ29tcGFyZSB0d28gTkxNIGxvY2tzLgogICogV2hlbiB0aGUgc2Vjb25kIGxvY2sgaXMgb2YgdHlwZSBGX1VOTENLLCB0aGlzIGFjdHMgbGlrZSBhIHdpbGRjYXJkLgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9sb2NrZC94ZHIuaCBiL2luY2x1ZGUvbGludXgvbG9ja2QveGRyLmgKaW5kZXggZGYxOGZhMC4uZDZiM2E4MCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9sb2NrZC94ZHIuaAorKysgYi9pbmNsdWRlL2xpbnV4L2xvY2tkL3hkci5oCkBAIC04MSw4ICs4MSw2IEBACiAJdW5zaWduZWQgaW50CWxlbjsKIAl1MzIJCXN0YXRlOwogCV9fYmUzMgkJYWRkcjsKLQlfX2JlMzIJCXZlcnM7Ci0JX19iZTMyCQlwcm90bzsKIH07CiAKIC8qCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21hZ2ljLmggYi9pbmNsdWRlL2xpbnV4L21hZ2ljLmgKaW5kZXggMWZhMGMyYy4uZjdmM2ZkZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tYWdpYy5oCisrKyBiL2luY2x1ZGUvbGludXgvbWFnaWMuaApAQCAtNiw2ICs2LDEwIEBACiAjZGVmaW5lIEFGU19TVVBFUl9NQUdJQyAgICAgICAgICAgICAgICAweDUzNDY0MTRGCiAjZGVmaW5lIEFVVE9GU19TVVBFUl9NQUdJQwkweDAxODcKICNkZWZpbmUgQ09EQV9TVVBFUl9NQUdJQwkweDczNzU3MjQ1CisjZGVmaW5lIERFQlVHRlNfTUFHSUMgICAgICAgICAgMHg2NDYyNjcyMAorI2RlZmluZSBTWVNGU19NQUdJQwkJMHg2MjY1NjU3MgorI2RlZmluZSBTRUNVUklUWUZTX01BR0lDCTB4NzM2MzY2NzMKKyNkZWZpbmUgVE1QRlNfTUFHSUMJCTB4MDEwMjE5OTQKICNkZWZpbmUgRUZTX1NVUEVSX01BR0lDCQkweDQxNEE1MwogI2RlZmluZSBFWFQyX1NVUEVSX01BR0lDCTB4RUY1MwogI2RlZmluZSBFWFQzX1NVUEVSX01BR0lDCTB4RUY1MwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tYXBfdG9fN3NlZ21lbnQuaCBiL2luY2x1ZGUvbGludXgvbWFwX3RvXzdzZWdtZW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2RmODQzMgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvbWFwX3RvXzdzZWdtZW50LmgKQEAgLTAsMCArMSwxODcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUgSGVuayBWZXJnb25ldCA8SGVuay5WZXJnb25ldEBnbWFpbC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKKyAqLworCisjaWZuZGVmIE1BUF9UT183U0VHTUVOVF9ICisjZGVmaW5lIE1BUF9UT183U0VHTUVOVF9ICisKKy8qIFRoaXMgZmlsZSBwcm92aWRlcyB0cmFuc2xhdGlvbiBwcmltaXRpdmVzIGFuZCB0YWJsZXMgZm9yIHRoZSBjb252ZXJzaW9uCisgKiBvZiAoQVNDSUkpIGNoYXJhY3RlcnMgdG8gYSA3LXNlZ21lbnRzIG5vdGF0aW9uLgorICoKKyAqIFRoZSA3IHNlZ21lbnQncyB3aWtpcGVkaWEgbm90YXRpb24gYmVsb3cgaXMgdXNlZCBhcyBzdGFuZGFyZC4KKyAqIFNlZTogaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9TZXZlbl9zZWdtZW50X2Rpc3BsYXkKKyAqCisgKiBOb3RhdGlvbjoJKy1hLSsKKyAqCQlmICAgYgorICoJCSstZy0rCisgKgkJZSAgIGMKKyAqCQkrLWQtKworICoKKyAqIFVzYWdlOgorICoKKyAqICAgUmVnaXN0ZXIgYSBtYXAgdmFyaWFibGUsIGFuZCBmaWxsIGl0IHdpdGggYSBjaGFyYWN0ZXIgc2V0OgorICoJc3RhdGljIFNFRzdfREVGQVVMVF9NQVAobWFwX3NlZzcpOworICoKKyAqCisgKiAgIFRoZW4gdXNlIGZvciBjb252ZXJzaW9uOgorICoJc2VnNyA9IG1hcF90b19zZWc3KCZtYXBfc2VnNywgc29tZV9jaGFyKTsKKyAqCS4uLgorICoKKyAqIEluIGRldmljZSBkcml2ZXJzIGl0IGlzIHJlY29tbWVuZGVkLCBpZiByZXF1aXJlZCwgdG8gbWFrZSB0aGUgY2hhciBtYXAKKyAqIGFjY2Vzc2libGUgdmlhIHRoZSBzeXNmcyBpbnRlcmZhY2UgdXNpbmcgdGhlIGZvbGxvd2luZyBzY2hlbWU6CisgKgorICogc3RhdGljIHNzaXplX3Qgc2hvd19tYXAoc3RydWN0IGRldmljZSAqZGV2LCBjaGFyICpidWYpIHsKKyAqCW1lbWNweShidWYsICZtYXBfc2VnNywgc2l6ZW9mKG1hcF9zZWc3KSk7CisgKglyZXR1cm4gc2l6ZW9mKG1hcF9zZWc3KTsKKyAqIH0KKyAqIHN0YXRpYyBzc2l6ZV90IHN0b3JlX21hcChzdHJ1Y3QgZGV2aWNlICpkZXYsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNudCkgeworICoJaWYoY250ICE9IHNpemVvZihtYXBfc2VnNykpCisgKgkJcmV0dXJuIC1FSU5WQUw7CisgKgltZW1jcHkoJm1hcF9zZWc3LCBidWYsIGNudCk7CisgKglyZXR1cm4gY250OworICogfQorICogc3RhdGljIERFVklDRV9BVFRSKG1hcF9zZWc3LCBQRVJNU19SVywgc2hvd19tYXAsIHN0b3JlX21hcCk7CisgKgorICogSGlzdG9yeToKKyAqIDIwMDUtMDUtMzEJUkZDIGxpbnV4LWtlcm5lbEB2Z2VyLmtlcm5lbC5vcmcKKyAqLworI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisKKworI2RlZmluZSBCSVRfU0VHN19BCQkwCisjZGVmaW5lIEJJVF9TRUc3X0IJCTEKKyNkZWZpbmUgQklUX1NFRzdfQwkJMgorI2RlZmluZSBCSVRfU0VHN19ECQkzCisjZGVmaW5lIEJJVF9TRUc3X0UJCTQKKyNkZWZpbmUgQklUX1NFRzdfRgkJNQorI2RlZmluZSBCSVRfU0VHN19HCQk2CisjZGVmaW5lIEJJVF9TRUc3X1JFU0VSVkVECTcKKworc3RydWN0IHNlZzdfY29udmVyc2lvbl9tYXAgeworCXVuc2lnbmVkIGNoYXIJdGFibGVbMTI4XTsKK307CisKK3N0YXRpYyBpbmxpbmUgaW50IG1hcF90b19zZWc3KHN0cnVjdCBzZWc3X2NvbnZlcnNpb25fbWFwICptYXAsIGludCBjKQoreworCXJldHVybiBjID49IDAgJiYgYyA8IHNpemVvZihtYXAtPnRhYmxlKSA/IG1hcC0+dGFibGVbY10gOiAtRUlOVkFMOworfQorCisjZGVmaW5lIFNFRzdfQ09OVkVSU0lPTl9NQVAoX25hbWUsIF9tYXApCVwKKwlzdHJ1Y3Qgc2VnN19jb252ZXJzaW9uX21hcCBfbmFtZSA9IHsgLnRhYmxlID0geyBfbWFwIH0gfQorCisvKgorICogSXQgaXMgcmVjb21tZW5kZWQgdG8gdXNlIGEgZmFjaWxpdHkgdGhhdCBhbGxvd3MgdXNlciBzcGFjZSB0byByZWRlZmluZQorICogY3VzdG9tIGNoYXJhY3RlciBzZXRzIGZvciBMQ0QgZGV2aWNlcy4gUGxlYXNlIHVzZSBhIHN5c2ZzIGludGVyZmFjZQorICogYXMgZGVzY3JpYmVkIGFib3ZlLgorICovCisjZGVmaW5lIE1BUF9UT19TRUc3X1NZU0ZTX0ZJTEUJIm1hcF9zZWc3IgorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQVNDSUkgY29udmVyc2lvbiB0YWJsZQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2RlZmluZSBfU0VHNyhsLGEsYixjLGQsZSxmLGcpCVwKKyAgICAgICgJYTw8QklUX1NFRzdfQSB8CWI8PEJJVF9TRUc3X0IgfAljPDxCSVRfU0VHN19DIHwJZDw8QklUX1NFRzdfRCB8CVwKKwllPDxCSVRfU0VHN19FIHwJZjw8QklUX1NFRzdfRiB8CWc8PEJJVF9TRUc3X0cgKQorCisjZGVmaW5lIF9NQVBfMF8zMl9BU0NJSV9TRUc3X05PTl9QUklOVEFCTEUJXAorCTAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLAorCisjZGVmaW5lIF9NQVBfMzNfNDdfQVNDSUlfU0VHN19TWU1CT0wJCVwKKyBfU0VHNygnIScsMCwwLDAsMCwxLDEsMCksIF9TRUc3KCciJywwLDEsMCwwLDAsMSwwKSwgX1NFRzcoJyMnLDAsMSwxLDAsMSwxLDApLFwKKyBfU0VHNygnJCcsMSwwLDEsMSwwLDEsMSksIF9TRUc3KCclJywwLDAsMSwwLDAsMSwwKSwgX1NFRzcoJyYnLDEsMCwxLDEsMSwxLDEpLFwKKyBfU0VHNygnXCcnLDAsMCwwLDAsMCwxLDApLF9TRUc3KCcoJywxLDAsMCwxLDEsMSwwKSwgX1NFRzcoJyknLDEsMSwxLDEsMCwwLDApLFwKKyBfU0VHNygnKicsMCwxLDEsMCwxLDEsMSksIF9TRUc3KCcrJywwLDEsMSwwLDAsMCwxKSwgX1NFRzcoJywnLDAsMCwwLDAsMSwwLDApLFwKKyBfU0VHNygnLScsMCwwLDAsMCwwLDAsMSksIF9TRUc3KCcuJywwLDAsMCwwLDEsMCwwKSwgX1NFRzcoJy8nLDAsMSwwLDAsMSwwLDEpLAorCisjZGVmaW5lIF9NQVBfNDhfNTdfQVNDSUlfU0VHN19OVU1FUklDCQlcCisgX1NFRzcoJzAnLDEsMSwxLDEsMSwxLDApLCBfU0VHNygnMScsMCwxLDEsMCwwLDAsMCksIF9TRUc3KCcyJywxLDEsMCwxLDEsMCwxKSxcCisgX1NFRzcoJzMnLDEsMSwxLDEsMCwwLDEpLCBfU0VHNygnNCcsMCwxLDEsMCwwLDEsMSksIF9TRUc3KCc1JywxLDAsMSwxLDAsMSwxKSxcCisgX1NFRzcoJzYnLDEsMCwxLDEsMSwxLDEpLCBfU0VHNygnNycsMSwxLDEsMCwwLDAsMCksIF9TRUc3KCc4JywxLDEsMSwxLDEsMSwxKSxcCisgX1NFRzcoJzknLDEsMSwxLDEsMCwxLDEpLAorCisjZGVmaW5lIF9NQVBfNThfNjRfQVNDSUlfU0VHN19TWU1CT0wJCVwKKyBfU0VHNygnOicsMCwwLDAsMSwwLDAsMSksIF9TRUc3KCc7JywwLDAsMCwxLDAsMCwxKSwgX1NFRzcoJzwnLDEsMCwwLDAsMCwxLDEpLFwKKyBfU0VHNygnPScsMCwwLDAsMSwwLDAsMSksIF9TRUc3KCc+JywxLDEsMCwwLDAsMCwxKSwgX1NFRzcoJz8nLDEsMSwxLDAsMCwxLDApLFwKKyBfU0VHNygnQCcsMSwxLDAsMSwxLDEsMSksCisKKyNkZWZpbmUgX01BUF82NV85MF9BU0NJSV9TRUc3X0FMUEhBX1VQUFIJXAorIF9TRUc3KCdBJywxLDEsMSwwLDEsMSwxKSwgX1NFRzcoJ0InLDEsMSwxLDEsMSwxLDEpLCBfU0VHNygnQycsMSwwLDAsMSwxLDEsMCksXAorIF9TRUc3KCdEJywxLDEsMSwxLDEsMSwwKSwgX1NFRzcoJ0UnLDEsMCwwLDEsMSwxLDEpLCBfU0VHNygnRicsMSwwLDAsMCwxLDEsMSksXAorIF9TRUc3KCdHJywxLDEsMSwxLDAsMSwxKSwgX1NFRzcoJ0gnLDAsMSwxLDAsMSwxLDEpLCBfU0VHNygnSScsMCwxLDEsMCwwLDAsMCksXAorIF9TRUc3KCdKJywwLDEsMSwxLDAsMCwwKSwgX1NFRzcoJ0snLDAsMSwxLDAsMSwxLDEpLCBfU0VHNygnTCcsMCwwLDAsMSwxLDEsMCksXAorIF9TRUc3KCdNJywxLDEsMSwwLDEsMSwwKSwgX1NFRzcoJ04nLDEsMSwxLDAsMSwxLDApLCBfU0VHNygnTycsMSwxLDEsMSwxLDEsMCksXAorIF9TRUc3KCdQJywxLDEsMCwwLDEsMSwxKSwgX1NFRzcoJ1EnLDEsMSwxLDEsMSwxLDApLCBfU0VHNygnUicsMSwxLDEsMCwxLDEsMSksXAorIF9TRUc3KCdTJywxLDAsMSwxLDAsMSwxKSwgX1NFRzcoJ1QnLDAsMCwwLDEsMSwxLDEpLCBfU0VHNygnVScsMCwxLDEsMSwxLDEsMCksXAorIF9TRUc3KCdWJywwLDEsMSwxLDEsMSwwKSwgX1NFRzcoJ1cnLDAsMSwxLDEsMSwxLDEpLCBfU0VHNygnWCcsMCwxLDEsMCwxLDEsMSksXAorIF9TRUc3KCdZJywwLDEsMSwwLDAsMSwxKSwgX1NFRzcoJ1onLDEsMSwwLDEsMSwwLDEpLAorCisjZGVmaW5lIF9NQVBfOTFfOTZfQVNDSUlfU0VHN19TWU1CT0wJCVwKKyBfU0VHNygnWycsMSwwLDAsMSwxLDEsMCksIF9TRUc3KCdcXCcsMCwwLDEsMCwwLDEsMSksX1NFRzcoJ10nLDEsMSwxLDEsMCwwLDApLFwKKyBfU0VHNygnXicsMSwxLDAsMCwwLDEsMCksIF9TRUc3KCdfJywwLDAsMCwxLDAsMCwwKSwgX1NFRzcoJ2AnLDAsMSwwLDAsMCwwLDApLAorCisjZGVmaW5lIF9NQVBfOTdfMTIyX0FTQ0lJX1NFRzdfQUxQSEFfTE9XRVIJXAorIF9TRUc3KCdBJywxLDEsMSwwLDEsMSwxKSwgX1NFRzcoJ2InLDAsMCwxLDEsMSwxLDEpLCBfU0VHNygnYycsMCwwLDAsMSwxLDAsMSksXAorIF9TRUc3KCdkJywwLDEsMSwxLDEsMCwxKSwgX1NFRzcoJ0UnLDEsMCwwLDEsMSwxLDEpLCBfU0VHNygnRicsMSwwLDAsMCwxLDEsMSksXAorIF9TRUc3KCdHJywxLDEsMSwxLDAsMSwxKSwgX1NFRzcoJ2gnLDAsMCwxLDAsMSwxLDEpLCBfU0VHNygnaScsMCwwLDEsMCwwLDAsMCksXAorIF9TRUc3KCdqJywwLDAsMSwxLDAsMCwwKSwgX1NFRzcoJ2snLDAsMCwxLDAsMSwxLDEpLCBfU0VHNygnTCcsMCwwLDAsMSwxLDEsMCksXAorIF9TRUc3KCdNJywxLDEsMSwwLDEsMSwwKSwgX1NFRzcoJ24nLDAsMCwxLDAsMSwwLDEpLCBfU0VHNygnbycsMCwwLDEsMSwxLDAsMSksXAorIF9TRUc3KCdQJywxLDEsMCwwLDEsMSwxKSwgX1NFRzcoJ3EnLDEsMSwxLDAsMCwxLDEpLCBfU0VHNygncicsMCwwLDAsMCwxLDAsMSksXAorIF9TRUc3KCdTJywxLDAsMSwxLDAsMSwxKSwgX1NFRzcoJ1QnLDAsMCwwLDEsMSwxLDEpLCBfU0VHNygndScsMCwwLDEsMSwxLDAsMCksXAorIF9TRUc3KCd2JywwLDAsMSwxLDEsMCwwKSwgX1NFRzcoJ1cnLDAsMSwxLDEsMSwxLDEpLCBfU0VHNygnWCcsMCwxLDEsMCwxLDEsMSksXAorIF9TRUc3KCd5JywwLDEsMSwxLDAsMSwxKSwgX1NFRzcoJ1onLDEsMSwwLDEsMSwwLDEpLAorCisjZGVmaW5lIF9NQVBfMTIzXzEyNl9BU0NJSV9TRUc3X1NZTUJPTAkJXAorIF9TRUc3KCd7JywxLDAsMCwxLDEsMSwwKSwgX1NFRzcoJ3wnLDAsMCwwLDAsMSwxLDApLCBfU0VHNygnfScsMSwxLDEsMSwwLDAsMCksXAorIF9TRUc3KCd+JywxLDAsMCwwLDAsMCwwKSwKKworLyogTWFwcyAqLworCisvKiBUaGlzIHNldCB0cmllcyB0byBtYXAgYXMgY2xvc2UgYXMgcG9zc2libGUgdG8gdGhlIHZpc2libGUgY2hhcmFjdGVyaXN0aWNzCisgKiBvZiB0aGUgQVNDSUkgc3ltYm9sLCBsb3dlcmNhc2UgYW5kIHVwcGVyY2FzZSBsZXR0ZXJzIG1heSBkaWZmZXIgaW4KKyAqIHByZXNlbnRhdGlvbiBvbiB0aGUgZGlzcGxheS4KKyAqLworI2RlZmluZSBNQVBfQVNDSUk3U0VHX0FMUEhBTlVNCQkJXAorCV9NQVBfMF8zMl9BU0NJSV9TRUc3X05PTl9QUklOVEFCTEUJXAorCV9NQVBfMzNfNDdfQVNDSUlfU0VHN19TWU1CT0wJCVwKKwlfTUFQXzQ4XzU3X0FTQ0lJX1NFRzdfTlVNRVJJQwkJXAorCV9NQVBfNThfNjRfQVNDSUlfU0VHN19TWU1CT0wJCVwKKwlfTUFQXzY1XzkwX0FTQ0lJX1NFRzdfQUxQSEFfVVBQUglcCisJX01BUF85MV85Nl9BU0NJSV9TRUc3X1NZTUJPTAkJXAorCV9NQVBfOTdfMTIyX0FTQ0lJX1NFRzdfQUxQSEFfTE9XRVIJXAorCV9NQVBfMTIzXzEyNl9BU0NJSV9TRUc3X1NZTUJPTAorCisvKiBUaGlzIHNldCB0cmllcyB0byBtYXAgYXMgY2xvc2UgYXMgcG9zc2libGUgdG8gdGhlIHN5bWJvbGljIGNoYXJhY3RlcmlzdGljcworICogb2YgdGhlIEFTQ0lJIGNoYXJhY3RlciBmb3IgbWF4aW11bSBkaXNjcmltaW5hdGlvbi4KKyAqIEZvciBub3cgdGhpcyBtZWFucyBhbGwgYWxwaGEgY2hhcnMgYXJlIGluIGxvd2VyIGNhc2UgcmVwcmVzZW50YXRpb25zLgorICogKFRoaXMgZm9yIGV4YW1wbGUgZmFjaWxpdGF0ZXMgdGhlIHVzZSBvZiBoZXggbnVtYmVycyB3aXRoIHVwcGVyY2FzZSBpbnB1dC4pCisgKi8KKyNkZWZpbmUgTUFQX0FTQ0lJN1NFR19BTFBIQU5VTV9MQwkJCVwKKwlfTUFQXzBfMzJfQVNDSUlfU0VHN19OT05fUFJJTlRBQkxFCVwKKwlfTUFQXzMzXzQ3X0FTQ0lJX1NFRzdfU1lNQk9MCQlcCisJX01BUF80OF81N19BU0NJSV9TRUc3X05VTUVSSUMJCVwKKwlfTUFQXzU4XzY0X0FTQ0lJX1NFRzdfU1lNQk9MCQlcCisJX01BUF85N18xMjJfQVNDSUlfU0VHN19BTFBIQV9MT1dFUglcCisJX01BUF85MV85Nl9BU0NJSV9TRUc3X1NZTUJPTAkJXAorCV9NQVBfOTdfMTIyX0FTQ0lJX1NFRzdfQUxQSEFfTE9XRVIJXAorCV9NQVBfMTIzXzEyNl9BU0NJSV9TRUc3X1NZTUJPTAorCisjZGVmaW5lIFNFRzdfREVGQVVMVF9NQVAoX25hbWUpCQlcCisJU0VHN19DT05WRVJTSU9OX01BUChfbmFtZSxNQVBfQVNDSUk3U0VHX0FMUEhBTlVNKQorCisjZW5kaWYJLyogTUFQX1RPXzdTRUdNRU5UX0ggKi8KKwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmggYi9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaAppbmRleCBmZGYzOTY3Li4xZmJlMTRkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaAorKysgYi9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaApAQCAtMjcsMTYgKzI3LDEzIEBACiAKICNpZmRlZiBDT05GSUdfQ0dST1VQX01FTV9SRVNfQ1RMUgogCi0jZGVmaW5lIHBhZ2VfcmVzZXRfYmFkX2Nncm91cChwYWdlKQkoKHBhZ2UpLT5wYWdlX2Nncm91cCA9IDApCi0KLWV4dGVybiBzdHJ1Y3QgcGFnZV9jZ3JvdXAgKnBhZ2VfZ2V0X3BhZ2VfY2dyb3VwKHN0cnVjdCBwYWdlICpwYWdlKTsKIGV4dGVybiBpbnQgbWVtX2Nncm91cF9jaGFyZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAogCQkJCWdmcF90IGdmcF9tYXNrKTsKIGV4dGVybiBpbnQgbWVtX2Nncm91cF9jYWNoZV9jaGFyZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAogCQkJCQlnZnBfdCBnZnBfbWFzayk7CitleHRlcm4gdm9pZCBtZW1fY2dyb3VwX21vdmVfbGlzdHMoc3RydWN0IHBhZ2UgKnBhZ2UsIGVudW0gbHJ1X2xpc3QgbHJ1KTsKIGV4dGVybiB2b2lkIG1lbV9jZ3JvdXBfdW5jaGFyZ2VfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSk7CiBleHRlcm4gdm9pZCBtZW1fY2dyb3VwX3VuY2hhcmdlX2NhY2hlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpOwotZXh0ZXJuIHZvaWQgbWVtX2Nncm91cF9tb3ZlX2xpc3RzKHN0cnVjdCBwYWdlICpwYWdlLCBib29sIGFjdGl2ZSk7CiBleHRlcm4gaW50IG1lbV9jZ3JvdXBfc2hyaW5rX3VzYWdlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBnZnBfdCBnZnBfbWFzayk7CiAKIGV4dGVybiB1bnNpZ25lZCBsb25nIG1lbV9jZ3JvdXBfaXNvbGF0ZV9wYWdlcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sCkBAIC00NCw3ICs0MSw3IEBACiAJCQkJCXVuc2lnbmVkIGxvbmcgKnNjYW5uZWQsIGludCBvcmRlciwKIAkJCQkJaW50IG1vZGUsIHN0cnVjdCB6b25lICp6LAogCQkJCQlzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2NvbnQsCi0JCQkJCWludCBhY3RpdmUpOworCQkJCQlpbnQgYWN0aXZlLCBpbnQgZmlsZSk7CiBleHRlcm4gdm9pZCBtZW1fY2dyb3VwX291dF9vZl9tZW1vcnkoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbSwgZ2ZwX3QgZ2ZwX21hc2spOwogaW50IHRhc2tfaW5fbWVtX2Nncm91cChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIGNvbnN0IHN0cnVjdCBtZW1fY2dyb3VwICptZW0pOwogCkBAIC02OSwyMSArNjYsMTEgQEAKIGV4dGVybiB2b2lkIG1lbV9jZ3JvdXBfcmVjb3JkX3JlY2xhaW1fcHJpb3JpdHkoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbSwKIAkJCQkJCQlpbnQgcHJpb3JpdHkpOwogCi1leHRlcm4gbG9uZyBtZW1fY2dyb3VwX2NhbGNfcmVjbGFpbV9hY3RpdmUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbSwKLQkJCQlzdHJ1Y3Qgem9uZSAqem9uZSwgaW50IHByaW9yaXR5KTsKLWV4dGVybiBsb25nIG1lbV9jZ3JvdXBfY2FsY19yZWNsYWltX2luYWN0aXZlKHN0cnVjdCBtZW1fY2dyb3VwICptZW0sCi0JCQkJc3RydWN0IHpvbmUgKnpvbmUsIGludCBwcmlvcml0eSk7CitleHRlcm4gbG9uZyBtZW1fY2dyb3VwX2NhbGNfcmVjbGFpbShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtLCBzdHJ1Y3Qgem9uZSAqem9uZSwKKwkJCQkJaW50IHByaW9yaXR5LCBlbnVtIGxydV9saXN0IGxydSk7CisKIAogI2Vsc2UgLyogQ09ORklHX0NHUk9VUF9NRU1fUkVTX0NUTFIgKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBwYWdlX3Jlc2V0X2JhZF9jZ3JvdXAoc3RydWN0IHBhZ2UgKnBhZ2UpCi17Ci19Ci0KLXN0YXRpYyBpbmxpbmUgc3RydWN0IHBhZ2VfY2dyb3VwICpwYWdlX2dldF9wYWdlX2Nncm91cChzdHJ1Y3QgcGFnZSAqcGFnZSkKLXsKLQlyZXR1cm4gTlVMTDsKLX0KLQogc3RhdGljIGlubGluZSBpbnQgbWVtX2Nncm91cF9jaGFyZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsCiAJCQkJCXN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBnZnBfdCBnZnBfbWFzaykKIHsKQEAgLTE1OSwxNCArMTQ2LDkgQEAKIHsKIH0KIAotc3RhdGljIGlubGluZSBsb25nIG1lbV9jZ3JvdXBfY2FsY19yZWNsYWltX2FjdGl2ZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtLAotCQkJCQlzdHJ1Y3Qgem9uZSAqem9uZSwgaW50IHByaW9yaXR5KQotewotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW5saW5lIGxvbmcgbWVtX2Nncm91cF9jYWxjX3JlY2xhaW1faW5hY3RpdmUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbSwKLQkJCQkJc3RydWN0IHpvbmUgKnpvbmUsIGludCBwcmlvcml0eSkKK3N0YXRpYyBpbmxpbmUgbG9uZyBtZW1fY2dyb3VwX2NhbGNfcmVjbGFpbShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtLAorCQkJCQlzdHJ1Y3Qgem9uZSAqem9uZSwgaW50IHByaW9yaXR5LAorCQkJCQllbnVtIGxydV9saXN0IGxydSkKIHsKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWZkL2RhOTAzeC5oIGIvaW5jbHVkZS9saW51eC9tZmQvZGE5MDN4LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2FkMzE0YwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvbWZkL2RhOTAzeC5oCkBAIC0wLDAgKzEsMjAxIEBACisjaWZuZGVmIF9fTElOVVhfUE1JQ19EQTkwM1hfSAorI2RlZmluZSBfX0xJTlVYX1BNSUNfREE5MDNYX0gKKworLyogVW5pZmllZCBzdWIgZGV2aWNlIElEcyBmb3IgREE5MDMwL0RBOTAzNCAqLworZW51bSB7CisJREE5MDMwX0lEX0xFRF8xLAorCURBOTAzMF9JRF9MRURfMiwKKwlEQTkwMzBfSURfTEVEXzMsCisJREE5MDMwX0lEX0xFRF80LAorCURBOTAzMF9JRF9MRURfUEMsCisJREE5MDMwX0lEX1ZJQlJBLAorCURBOTAzMF9JRF9XTEVELAorCURBOTAzMF9JRF9CVUNLMSwKKwlEQTkwMzBfSURfQlVDSzIsCisJREE5MDMwX0lEX0xETzEsCisJREE5MDMwX0lEX0xETzIsCisJREE5MDMwX0lEX0xETzMsCisJREE5MDMwX0lEX0xETzQsCisJREE5MDMwX0lEX0xETzUsCisJREE5MDMwX0lEX0xETzYsCisJREE5MDMwX0lEX0xETzcsCisJREE5MDMwX0lEX0xETzgsCisJREE5MDMwX0lEX0xETzksCisJREE5MDMwX0lEX0xETzEwLAorCURBOTAzMF9JRF9MRE8xMSwKKwlEQTkwMzBfSURfTERPMTIsCisJREE5MDMwX0lEX0xETzEzLAorCURBOTAzMF9JRF9MRE8xNCwKKwlEQTkwMzBfSURfTERPMTUsCisJREE5MDMwX0lEX0xETzE2LAorCURBOTAzMF9JRF9MRE8xNywKKwlEQTkwMzBfSURfTERPMTgsCisJREE5MDMwX0lEX0xETzE5LAorCURBOTAzMF9JRF9MRE9fSU5ULAkvKiBMRE8gSW50ZXJuYWwgKi8KKworCURBOTAzNF9JRF9MRURfMSwKKwlEQTkwMzRfSURfTEVEXzIsCisJREE5MDM0X0lEX1ZJQlJBLAorCURBOTAzNF9JRF9XTEVELAorCURBOTAzNF9JRF9UT1VDSCwKKworCURBOTAzNF9JRF9CVUNLMSwKKwlEQTkwMzRfSURfQlVDSzIsCisJREE5MDM0X0lEX0xETzEsCisJREE5MDM0X0lEX0xETzIsCisJREE5MDM0X0lEX0xETzMsCisJREE5MDM0X0lEX0xETzQsCisJREE5MDM0X0lEX0xETzUsCisJREE5MDM0X0lEX0xETzYsCisJREE5MDM0X0lEX0xETzcsCisJREE5MDM0X0lEX0xETzgsCisJREE5MDM0X0lEX0xETzksCisJREE5MDM0X0lEX0xETzEwLAorCURBOTAzNF9JRF9MRE8xMSwKKwlEQTkwMzRfSURfTERPMTIsCisJREE5MDM0X0lEX0xETzEzLAorCURBOTAzNF9JRF9MRE8xNCwKKwlEQTkwMzRfSURfTERPMTUsCit9OworCisvKgorICogREE5MDMwL0RBOTAzNCBMRURzIHN1Yi1kZXZpY2VzIHVzZXMgZ2VuZXJpYyAic3RydWN0IGxlZF9pbmZvIgorICogYXMgdGhlIHBsYXRmb3JtX2RhdGEKKyAqLworCisvKiBEQTkwMzAgZmxhZ3MgZm9yICJzdHJ1Y3QgbGVkX2luZm8iCisgKi8KKyNkZWZpbmUgREE5MDMwX0xFRF9SQVRFX09OCSgwIDw8IDUpCisjZGVmaW5lIERBOTAzMF9MRURfUkFURV8wNTJTCSgxIDw8IDUpCisjZGVmaW5lIERBOTAzMF9MRURfRFVUWV8xXzE2CSgwIDw8IDMpCisjZGVmaW5lIERBOTAzMF9MRURfRFVUWV8xXzgJKDEgPDwgMykKKyNkZWZpbmUgREE5MDMwX0xFRF9EVVRZXzFfNAkoMiA8PCAzKQorI2RlZmluZSBEQTkwMzBfTEVEX0RVVFlfMV8yCSgzIDw8IDMpCisKKyNkZWZpbmUgREE5MDMwX1ZJQlJBX01PREVfMVAzVgkoMCA8PCAxKQorI2RlZmluZSBEQTkwMzBfVklCUkFfTU9ERV8yUDdWCSgxIDw8IDEpCisjZGVmaW5lIERBOTAzMF9WSUJSQV9GUkVRXzFIWgkoMCA8PCAyKQorI2RlZmluZSBEQTkwMzBfVklCUkFfRlJFUV8ySFoJKDEgPDwgMikKKyNkZWZpbmUgREE5MDMwX1ZJQlJBX0ZSRVFfNEhaCSgyIDw8IDIpCisjZGVmaW5lIERBOTAzMF9WSUJSQV9GUkVRXzhIWgkoMyA8PCAyKQorI2RlZmluZSBEQTkwMzBfVklCUkFfRFVUWV9PTgkoMCA8PCA0KQorI2RlZmluZSBEQTkwMzBfVklCUkFfRFVUWV83NVAJKDEgPDwgNCkKKyNkZWZpbmUgREE5MDMwX1ZJQlJBX0RVVFlfNTBQCSgyIDw8IDQpCisjZGVmaW5lIERBOTAzMF9WSUJSQV9EVVRZXzI1UAkoMyA8PCA0KQorCisvKiBEQTkwMzQgZmxhZ3MgZm9yICJzdHJ1Y3QgbGVkX2luZm8iICovCisjZGVmaW5lIERBOTAzNF9MRURfUkFNUAkJKDEgPDwgNykKKworLyogREE5MDM0IHRvdWNoIHNjcmVlbiBwbGF0Zm9ybSBkYXRhICovCitzdHJ1Y3QgZGE5MDM0X3RvdWNoX3BkYXRhIHsKKwlpbnQJaW50ZXJ2YWxfbXM7CS8qIHNhbXBsaW5nIGludGVydmFsIHdoaWxlIHBlbiBkb3duICovCisJaW50CXhfaW52ZXJ0ZWQ7CisJaW50CXlfaW52ZXJ0ZWQ7Cit9OworCitzdHJ1Y3QgZGE5MDN4X3N1YmRldl9pbmZvIHsKKwlpbnQJCWlkOworCWNvbnN0IGNoYXIJKm5hbWU7CisJdm9pZAkJKnBsYXRmb3JtX2RhdGE7Cit9OworCitzdHJ1Y3QgZGE5MDN4X3BsYXRmb3JtX2RhdGEgeworCWludCBudW1fc3ViZGV2czsKKwlzdHJ1Y3QgZGE5MDN4X3N1YmRldl9pbmZvICpzdWJkZXZzOworfTsKKworLyogYml0IGRlZmluaXRpb25zIGZvciBEQTkwMzAgZXZlbnRzICovCisjZGVmaW5lIERBOTAzMF9FVkVOVF9PTktFWQkJKDEgPDwgMCkKKyNkZWZpbmUJREE5MDMwX0VWRU5UX1BXUkVOCQkoMSA8PCAxKQorI2RlZmluZQlEQTkwMzBfRVZFTlRfRVhUT04JCSgxIDw8IDIpCisjZGVmaW5lCURBOTAzMF9FVkVOVF9DSERFVAkJKDEgPDwgMykKKyNkZWZpbmUJREE5MDMwX0VWRU5UX1RCQVQJCSgxIDw8IDQpCisjZGVmaW5lCURBOTAzMF9FVkVOVF9WQkFUTU9OCQkoMSA8PCA1KQorI2RlZmluZQlEQTkwMzBfRVZFTlRfVkJBVE1PTl9UWE9OCSgxIDw8IDYpCisjZGVmaW5lCURBOTAzMF9FVkVOVF9DSElPVkVSCQkoMSA8PCA3KQorI2RlZmluZQlEQTkwMzBfRVZFTlRfVENUTwkJKDEgPDwgOCkKKyNkZWZpbmUJREE5MDMwX0VWRU5UX0NDVE8JCSgxIDw8IDkpCisjZGVmaW5lCURBOTAzMF9FVkVOVF9BRENfUkVBRFkJCSgxIDw8IDEwKQorI2RlZmluZQlEQTkwMzBfRVZFTlRfVkJVU180UDQJCSgxIDw8IDExKQorI2RlZmluZQlEQTkwMzBfRVZFTlRfVkJVU180UDAJCSgxIDw8IDEyKQorI2RlZmluZQlEQTkwMzBfRVZFTlRfU0VTU19WQUxJRAkJKDEgPDwgMTMpCisjZGVmaW5lCURBOTAzMF9FVkVOVF9TUlBfREVURUNUCQkoMSA8PCAxNCkKKyNkZWZpbmUJREE5MDMwX0VWRU5UX1dBVENIRE9HCQkoMSA8PCAxNSkKKyNkZWZpbmUJREE5MDMwX0VWRU5UX0xETzE1CQkoMSA8PCAxNikKKyNkZWZpbmUJREE5MDMwX0VWRU5UX0xETzE2CQkoMSA8PCAxNykKKyNkZWZpbmUJREE5MDMwX0VWRU5UX0xETzE3CQkoMSA8PCAxOCkKKyNkZWZpbmUJREE5MDMwX0VWRU5UX0xETzE4CQkoMSA8PCAxOSkKKyNkZWZpbmUJREE5MDMwX0VWRU5UX0xETzE5CQkoMSA8PCAyMCkKKyNkZWZpbmUJREE5MDMwX0VWRU5UX0JVQ0syCQkoMSA8PCAyMSkKKworLyogYml0IGRlZmluaXRpb25zIGZvciBEQTkwMzQgZXZlbnRzICovCisjZGVmaW5lIERBOTAzNF9FVkVOVF9PTktFWQkJKDEgPDwgMCkKKyNkZWZpbmUgREE5MDM0X0VWRU5UX0VYVE9OCQkoMSA8PCAyKQorI2RlZmluZSBEQTkwMzRfRVZFTlRfQ0hERVQJCSgxIDw8IDMpCisjZGVmaW5lIERBOTAzNF9FVkVOVF9UQkFUCQkoMSA8PCA0KQorI2RlZmluZSBEQTkwMzRfRVZFTlRfVkJBVE1PTgkJKDEgPDwgNSkKKyNkZWZpbmUgREE5MDM0X0VWRU5UX1JFVl9JT1ZFUgkJKDEgPDwgNikKKyNkZWZpbmUgREE5MDM0X0VWRU5UX0NIX0lPVkVSCQkoMSA8PCA3KQorI2RlZmluZSBEQTkwMzRfRVZFTlRfQ0hfVENUTwkJKDEgPDwgOCkKKyNkZWZpbmUgREE5MDM0X0VWRU5UX0NIX0NDVE8JCSgxIDw8IDkpCisjZGVmaW5lIERBOTAzNF9FVkVOVF9VU0JfREVWCQkoMSA8PCAxMCkKKyNkZWZpbmUgREE5MDM0X0VWRU5UX09UR0NQX0lPVkVSCSgxIDw8IDExKQorI2RlZmluZSBEQTkwMzRfRVZFTlRfVkJVU180UDU1CQkoMSA8PCAxMikKKyNkZWZpbmUgREE5MDM0X0VWRU5UX1ZCVVNfM1A4CQkoMSA8PCAxMykKKyNkZWZpbmUgREE5MDM0X0VWRU5UX1NFU1NfMVA4CQkoMSA8PCAxNCkKKyNkZWZpbmUgREE5MDM0X0VWRU5UX1NSUF9SRUFEWQkJKDEgPDwgMTUpCisjZGVmaW5lIERBOTAzNF9FVkVOVF9BRENfTUFOCQkoMSA8PCAxNikKKyNkZWZpbmUgREE5MDM0X0VWRU5UX0FEQ19BVVRPNAkJKDEgPDwgMTcpCisjZGVmaW5lIERBOTAzNF9FVkVOVF9BRENfQVVUTzUJCSgxIDw8IDE4KQorI2RlZmluZSBEQTkwMzRfRVZFTlRfQURDX0FVVE82CQkoMSA8PCAxOSkKKyNkZWZpbmUgREE5MDM0X0VWRU5UX1BFTl9ET1dOCQkoMSA8PCAyMCkKKyNkZWZpbmUgREE5MDM0X0VWRU5UX1RTSV9SRUFEWQkJKDEgPDwgMjEpCisjZGVmaW5lIERBOTAzNF9FVkVOVF9VQVJUX1RYCQkoMSA8PCAyMikKKyNkZWZpbmUgREE5MDM0X0VWRU5UX1VBUlRfUlgJCSgxIDw8IDIzKQorI2RlZmluZSBEQTkwMzRfRVZFTlRfSEVBRFNFVAkJKDEgPDwgMjUpCisjZGVmaW5lIERBOTAzNF9FVkVOVF9IT09LU1dJVENICQkoMSA8PCAyNikKKyNkZWZpbmUgREE5MDM0X0VWRU5UX1dBVENIRE9HCQkoMSA8PCAyNykKKworZXh0ZXJuIGludCBkYTkwM3hfcmVnaXN0ZXJfbm90aWZpZXIoc3RydWN0IGRldmljZSAqZGV2LAorCQlzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLCB1bnNpZ25lZCBpbnQgZXZlbnRzKTsKK2V4dGVybiBpbnQgZGE5MDN4X3VucmVnaXN0ZXJfbm90aWZpZXIoc3RydWN0IGRldmljZSAqZGV2LAorCQlzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLCB1bnNpZ25lZCBpbnQgZXZlbnRzKTsKKworLyogU3RhdHVzIFF1ZXJ5IEludGVyZmFjZSAqLworI2RlZmluZSBEQTkwMzBfU1RBVFVTX09OS0VZCQkoMSA8PCAwKQorI2RlZmluZSBEQTkwMzBfU1RBVFVTX1BXUkVOMQkJKDEgPDwgMSkKKyNkZWZpbmUgREE5MDMwX1NUQVRVU19FWFRPTgkJKDEgPDwgMikKKyNkZWZpbmUgREE5MDMwX1NUQVRVU19DSERFVAkJKDEgPDwgMykKKyNkZWZpbmUgREE5MDMwX1NUQVRVU19UQkFUCQkoMSA8PCA0KQorI2RlZmluZSBEQTkwMzBfU1RBVFVTX1ZCQVRNT04JCSgxIDw8IDUpCisjZGVmaW5lIERBOTAzMF9TVEFUVVNfVkJBVE1PTl9UWE9OCSgxIDw8IDYpCisjZGVmaW5lIERBOTAzMF9TVEFUVVNfTUNMS0RFVAkJKDEgPDwgNykKKworI2RlZmluZSBEQTkwMzRfU1RBVFVTX09OS0VZCQkoMSA8PCAwKQorI2RlZmluZSBEQTkwMzRfU1RBVFVTX0VYVE9OCQkoMSA8PCAyKQorI2RlZmluZSBEQTkwMzRfU1RBVFVTX0NIREVUCQkoMSA8PCAzKQorI2RlZmluZSBEQTkwMzRfU1RBVFVTX1RCQVQJCSgxIDw8IDQpCisjZGVmaW5lIERBOTAzNF9TVEFUVVNfVkJBVE1PTgkJKDEgPDwgNSkKKyNkZWZpbmUgREE5MDM0X1NUQVRVU19QRU5fRE9XTgkJKDEgPDwgNikKKyNkZWZpbmUgREE5MDM0X1NUQVRVU19NQ0xLREVUCQkoMSA8PCA3KQorI2RlZmluZSBEQTkwMzRfU1RBVFVTX1VTQl9ERVYJCSgxIDw8IDgpCisjZGVmaW5lIERBOTAzNF9TVEFUVVNfSEVBRFNFVAkJKDEgPDwgOSkKKyNkZWZpbmUgREE5MDM0X1NUQVRVU19IT09LU1dJVENICSgxIDw8IDEwKQorI2RlZmluZSBEQTkwMzRfU1RBVFVTX1JFTUNPTgkJKDEgPDwgMTEpCisjZGVmaW5lIERBOTAzNF9TVEFUVVNfVkJVU19WQUxJRF80UDU1CSgxIDw8IDEyKQorI2RlZmluZSBEQTkwMzRfU1RBVFVTX1ZCVVNfVkFMSURfM1A4CSgxIDw8IDEzKQorI2RlZmluZSBEQTkwMzRfU1RBVFVTX1NFU1NfVkFMSURfMVA4CSgxIDw8IDE0KQorI2RlZmluZSBEQTkwMzRfU1RBVFVTX1NSUF9SRUFEWQkJKDEgPDwgMTUpCisKK2V4dGVybiBpbnQgZGE5MDN4X3F1ZXJ5X3N0YXR1cyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBzdGF0dXMpOworCisKKy8qIE5PVEU6IHRoZSB0d28gZnVuY3Rpb25zIGJlbG93IGFyZSBub3QgaW50ZW5kZWQgZm9yIHVzZSBvdXRzaWRlCisgKiBvZiB0aGUgREE5MDM0IHN1Yi1kZXZpY2UgZHJpdmVycworICovCitleHRlcm4gaW50IGRhOTAzeF93cml0ZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCByZWcsIHVpbnQ4X3QgdmFsKTsKK2V4dGVybiBpbnQgZGE5MDN4X3JlYWQoc3RydWN0IGRldmljZSAqZGV2LCBpbnQgcmVnLCB1aW50OF90ICp2YWwpOworZXh0ZXJuIGludCBkYTkwM3hfdXBkYXRlKHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IHJlZywgdWludDhfdCB2YWwsIHVpbnQ4X3QgbWFzayk7CitleHRlcm4gaW50IGRhOTAzeF9zZXRfYml0cyhzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCByZWcsIHVpbnQ4X3QgYml0X21hc2spOworZXh0ZXJuIGludCBkYTkwM3hfY2xyX2JpdHMoc3RydWN0IGRldmljZSAqZGV2LCBpbnQgcmVnLCB1aW50OF90IGJpdF9tYXNrKTsKKyNlbmRpZiAvKiBfX0xJTlVYX1BNSUNfREE5MDNYX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWZkL3Q3bDY2eGIuaCBiL2luY2x1ZGUvbGludXgvbWZkL3Q3bDY2eGIuaAppbmRleCBlODNjN2YyLi5iNDYyOTgxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21mZC90N2w2NnhiLmgKKysrIGIvaW5jbHVkZS9saW51eC9tZmQvdDdsNjZ4Yi5oCkBAIC0xNSw4ICsxNSw2IEBACiAjaW5jbHVkZSA8bGludXgvbWZkL3RtaW8uaD4KIAogc3RydWN0IHQ3bDY2eGJfcGxhdGZvcm1fZGF0YSB7Ci0JaW50ICgqZW5hYmxlX2NsazMyaykoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KTsKLQl2b2lkICgqZGlzYWJsZV9jbGszMmspKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldik7CiAJaW50ICgqZW5hYmxlKShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpOwogCWludCAoKmRpc2FibGUpKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldik7CiAJaW50ICgqc3VzcGVuZCkoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWZkL3RjNjM4N3hiLmggYi9pbmNsdWRlL2xpbnV4L21mZC90YzYzODd4Yi5oCmluZGV4IGZhMDZlMDYuLmI0ODg4MjAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbWZkL3RjNjM4N3hiLmgKKysrIGIvaW5jbHVkZS9saW51eC9tZmQvdGM2Mzg3eGIuaApAQCAtMTEsOSArMTEsNiBAQAogI2RlZmluZSBNRkRfVEM2Mzg3WEJfSAogCiBzdHJ1Y3QgdGM2Mzg3eGJfcGxhdGZvcm1fZGF0YSB7Ci0JaW50ICgqZW5hYmxlX2NsazMyaykoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KTsKLQl2b2lkICgqZGlzYWJsZV9jbGszMmspKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldik7Ci0KIAlpbnQgKCplbmFibGUpKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldik7CiAJaW50ICgqZGlzYWJsZSkoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KTsKIAlpbnQgKCpzdXNwZW5kKShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tZmQvdGM2MzkzeGIuaCBiL2luY2x1ZGUvbGludXgvbWZkL3RjNjM5M3hiLmgKaW5kZXggZmVjN2IzZi4uNjI2ZTQ0OCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tZmQvdGM2MzkzeGIuaAorKysgYi9pbmNsdWRlL2xpbnV4L21mZC90YzYzOTN4Yi5oCkBAIC0xNywxMiArMTcsMTIgQEAKICNpZm5kZWYgTUZEX1RDNjM5M1hCX0gKICNkZWZpbmUgTUZEX1RDNjM5M1hCX0gKIAorI2luY2x1ZGUgPGxpbnV4L2ZiLmg+CisKIC8qIEFsc28gb25lIHNob3VsZCBwcm92aWRlIHRoZSBDSzNQNk1JIGNsb2NrICovCiBzdHJ1Y3QgdGM2MzkzeGJfcGxhdGZvcm1fZGF0YSB7CiAJdTE2CXNjcl9wbGwyY3I7CS8qIFBMTDIgQ29udHJvbCAqLwogCXUxNglzY3JfZ3BlcjsJLyogR1AgRW5hYmxlICovCi0JdTMyCXNjcl9ncG9fZG9lY3I7CS8qIEdQTyBEYXRhIE9FIENvbnRyb2wgKi8KLQl1MzIJc2NyX2dwb19kc3I7CS8qIEdQTyBEYXRhIFNldCAqLwogCiAJaW50CSgqZW5hYmxlKShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpOwogCWludAkoKmRpc2FibGUpKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldik7CkBAIC0zMSwxNSArMzEsMjggQEAKIAogCWludAlpcnFfYmFzZTsJLyogYmFzZSBmb3Igc3ViZGV2aWNlIGlycXMgKi8KIAlpbnQJZ3Bpb19iYXNlOworCWludAkoKnNldHVwKShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpOworCXZvaWQJKCp0ZWFyZG93bikoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KTsKIAogCXN0cnVjdCB0bWlvX25hbmRfZGF0YQkqbmFuZF9kYXRhOworCXN0cnVjdCB0bWlvX2ZiX2RhdGEJKmZiX2RhdGE7CisKKwl1bnNpZ25lZCByZXN1bWVfcmVzdG9yZSA6IDE7IC8qIG1ha2Ugc3BlY2lhbCBhY3Rpb25zCisJCQkJCXRvIHByZXNlcnZlIHRoZSBzdGF0ZQorCQkJCQlvbiBzdXNwZW5kL3Jlc3VtZSAqLwogfTsKIAorZXh0ZXJuIGludCB0YzYzOTN4Yl9sY2RfbW9kZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpmYiwKKwkJCSAgICAgY29uc3Qgc3RydWN0IGZiX3ZpZGVvbW9kZSAqbW9kZSk7CitleHRlcm4gaW50IHRjNjM5M3hiX2xjZF9zZXRfcG93ZXIoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZmIsIGJvb2wgb24pOworCiAvKgogICogUmVsYXRpdmUgdG8gaXJxX2Jhc2UKICAqLwogI2RlZmluZQlJUlFfVEM2MzkzX05BTkQJCTAKICNkZWZpbmUJSVJRX1RDNjM5M19NTUMJCTEKKyNkZWZpbmUJSVJRX1RDNjM5M19PSENJCQkyCisjZGVmaW5lCUlSUV9UQzYzOTNfRkIJCTQKIAogI2RlZmluZQlUQzYzOTNYQl9OUl9JUlFTCTgKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tZmQvdG1pby5oIGIvaW5jbHVkZS9saW51eC9tZmQvdG1pby5oCmluZGV4IGVjNjEyZTYuLjUxNmQ5NTUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbWZkL3RtaW8uaAorKysgYi9pbmNsdWRlL2xpbnV4L21mZC90bWlvLmgKQEAgLTEsNiArMSw4IEBACiAjaWZuZGVmIE1GRF9UTUlPX0gKICNkZWZpbmUgTUZEX1RNSU9fSAogCisjaW5jbHVkZSA8bGludXgvZmIuaD4KKwogI2RlZmluZSB0bWlvX2lvcmVhZDgoYWRkcikgcmVhZGIoYWRkcikKICNkZWZpbmUgdG1pb19pb3JlYWQxNihhZGRyKSByZWFkdyhhZGRyKQogI2RlZmluZSB0bWlvX2lvcmVhZDE2X3JlcChyLCBiLCBsKSByZWFkc3cociwgYiwgbCkKQEAgLTI1LDQgKzI3LDIxIEBACiAJdW5zaWduZWQgaW50CQludW1fcGFydGl0aW9uczsKIH07CiAKKyNkZWZpbmUgRkJJT19UTUlPX0FDQ19XUklURQkweDdDNjM5MzAwCisjZGVmaW5lIEZCSU9fVE1JT19BQ0NfU1lOQwkweDdDNjM5MzAxCisKK3N0cnVjdCB0bWlvX2ZiX2RhdGEgeworCWludAkJCSgqbGNkX3NldF9wb3dlcikoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZmJfZGV2LAorCQkJCQkJCQlib29sIG9uKTsKKwlpbnQJCQkoKmxjZF9tb2RlKShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpmYl9kZXYsCisJCQkJCWNvbnN0IHN0cnVjdCBmYl92aWRlb21vZGUgKm1vZGUpOworCWludAkJCW51bV9tb2RlczsKKwlzdHJ1Y3QgZmJfdmlkZW9tb2RlCSptb2RlczsKKworCS8qIGluIG1tOiBzaXplIG9mIHNjcmVlbiAqLworCWludAkJCWhlaWdodDsKKwlpbnQJCQl3aWR0aDsKK307CisKKwogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21mZC93bTgzNTAvYXVkaW8uaCBiL2luY2x1ZGUvbGludXgvbWZkL3dtODM1MC9hdWRpby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxN2JiMjIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L21mZC93bTgzNTAvYXVkaW8uaApAQCAtMCwwICsxLDU5OCBAQAorLyoKKyAqIGF1ZGlvLmggIC0tICBBdWRpbyBEcml2ZXIgZm9yIFdvbGZzb24gV004MzUwIFBNSUMKKyAqCisgKiBDb3B5cmlnaHQgMjAwNyBXb2xmc29uIE1pY3JvZWxlY3Ryb25pY3MgUExDCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAorICogIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgorICogIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICovCisKKyNpZm5kZWYgX19MSU5VWF9NRkRfV004MzUwX0FVRElPX0hfCisjZGVmaW5lIF9fTElOVVhfTUZEX1dNODM1MF9BVURJT19IXworCisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisKKyNkZWZpbmUgV004MzUwX0NMT0NLX0NPTlRST0xfMSAgICAgICAgICAgICAgICAgIDB4MjgKKyNkZWZpbmUgV004MzUwX0NMT0NLX0NPTlRST0xfMiAgICAgICAgICAgICAgICAgIDB4MjkKKyNkZWZpbmUgV004MzUwX0ZMTF9DT05UUk9MXzEgICAgICAgICAgICAgICAgICAgIDB4MkEKKyNkZWZpbmUgV004MzUwX0ZMTF9DT05UUk9MXzIgICAgICAgICAgICAgICAgICAgIDB4MkIKKyNkZWZpbmUgV004MzUwX0ZMTF9DT05UUk9MXzMgICAgICAgICAgICAgICAgICAgIDB4MkMKKyNkZWZpbmUgV004MzUwX0ZMTF9DT05UUk9MXzQgICAgICAgICAgICAgICAgICAgIDB4MkQKKyNkZWZpbmUgV004MzUwX0RBQ19DT05UUk9MICAgICAgICAgICAgICAgICAgICAgIDB4MzAKKyNkZWZpbmUgV004MzUwX0RBQ19ESUdJVEFMX1ZPTFVNRV9MICAgICAgICAgICAgIDB4MzIKKyNkZWZpbmUgV004MzUwX0RBQ19ESUdJVEFMX1ZPTFVNRV9SICAgICAgICAgICAgIDB4MzMKKyNkZWZpbmUgV004MzUwX0RBQ19MUl9SQVRFICAgICAgICAgICAgICAgICAgICAgIDB4MzUKKyNkZWZpbmUgV004MzUwX0RBQ19DTE9DS19DT05UUk9MICAgICAgICAgICAgICAgIDB4MzYKKyNkZWZpbmUgV004MzUwX0RBQ19NVVRFICAgICAgICAgICAgICAgICAgICAgICAgIDB4M0EKKyNkZWZpbmUgV004MzUwX0RBQ19NVVRFX1ZPTFVNRSAgICAgICAgICAgICAgICAgIDB4M0IKKyNkZWZpbmUgV004MzUwX0RBQ19TSURFICAgICAgICAgICAgICAgICAgICAgICAgIDB4M0MKKyNkZWZpbmUgV004MzUwX0FEQ19DT05UUk9MICAgICAgICAgICAgICAgICAgICAgIDB4NDAKKyNkZWZpbmUgV004MzUwX0FEQ19ESUdJVEFMX1ZPTFVNRV9MICAgICAgICAgICAgIDB4NDIKKyNkZWZpbmUgV004MzUwX0FEQ19ESUdJVEFMX1ZPTFVNRV9SICAgICAgICAgICAgIDB4NDMKKyNkZWZpbmUgV004MzUwX0FEQ19ESVZJREVSICAgICAgICAgICAgICAgICAgICAgIDB4NDQKKyNkZWZpbmUgV004MzUwX0FEQ19MUl9SQVRFICAgICAgICAgICAgICAgICAgICAgIDB4NDYKKyNkZWZpbmUgV004MzUwX0lOUFVUX0NPTlRST0wgICAgICAgICAgICAgICAgICAgIDB4NDgKKyNkZWZpbmUgV004MzUwX0lOM19JTlBVVF9DT05UUk9MICAgICAgICAgICAgICAgIDB4NDkKKyNkZWZpbmUgV004MzUwX01JQ19CSUFTX0NPTlRST0wgICAgICAgICAgICAgICAgIDB4NEEKKyNkZWZpbmUgV004MzUwX09VVFBVVF9DT05UUk9MICAgICAgICAgICAgICAgICAgIDB4NEMKKyNkZWZpbmUgV004MzUwX0pBQ0tfREVURUNUICAgICAgICAgICAgICAgICAgICAgIDB4NEQKKyNkZWZpbmUgV004MzUwX0FOVElfUE9QX0NPTlRST0wgICAgICAgICAgICAgICAgIDB4NEUKKyNkZWZpbmUgV004MzUwX0xFRlRfSU5QVVRfVk9MVU1FICAgICAgICAgICAgICAgIDB4NTAKKyNkZWZpbmUgV004MzUwX1JJR0hUX0lOUFVUX1ZPTFVNRSAgICAgICAgICAgICAgIDB4NTEKKyNkZWZpbmUgV004MzUwX0xFRlRfTUlYRVJfQ09OVFJPTCAgICAgICAgICAgICAgIDB4NTgKKyNkZWZpbmUgV004MzUwX1JJR0hUX01JWEVSX0NPTlRST0wgICAgICAgICAgICAgIDB4NTkKKyNkZWZpbmUgV004MzUwX09VVDNfTUlYRVJfQ09OVFJPTCAgICAgICAgICAgICAgIDB4NUMKKyNkZWZpbmUgV004MzUwX09VVDRfTUlYRVJfQ09OVFJPTCAgICAgICAgICAgICAgIDB4NUQKKyNkZWZpbmUgV004MzUwX09VVFBVVF9MRUZUX01JWEVSX1ZPTFVNRSAgICAgICAgIDB4NjAKKyNkZWZpbmUgV004MzUwX09VVFBVVF9SSUdIVF9NSVhFUl9WT0xVTUUgICAgICAgIDB4NjEKKyNkZWZpbmUgV004MzUwX0lOUFVUX01JWEVSX1ZPTFVNRV9MICAgICAgICAgICAgIDB4NjIKKyNkZWZpbmUgV004MzUwX0lOUFVUX01JWEVSX1ZPTFVNRV9SICAgICAgICAgICAgIDB4NjMKKyNkZWZpbmUgV004MzUwX0lOUFVUX01JWEVSX1ZPTFVNRSAgICAgICAgICAgICAgIDB4NjQKKyNkZWZpbmUgV004MzUwX0xPVVQxX1ZPTFVNRSAgICAgICAgICAgICAgICAgICAgIDB4NjgKKyNkZWZpbmUgV004MzUwX1JPVVQxX1ZPTFVNRSAgICAgICAgICAgICAgICAgICAgIDB4NjkKKyNkZWZpbmUgV004MzUwX0xPVVQyX1ZPTFVNRSAgICAgICAgICAgICAgICAgICAgIDB4NkEKKyNkZWZpbmUgV004MzUwX1JPVVQyX1ZPTFVNRSAgICAgICAgICAgICAgICAgICAgIDB4NkIKKyNkZWZpbmUgV004MzUwX0JFRVBfVk9MVU1FICAgICAgICAgICAgICAgICAgICAgIDB4NkYKKyNkZWZpbmUgV004MzUwX0FJX0ZPUk1BVElORyAgICAgICAgICAgICAgICAgICAgIDB4NzAKKyNkZWZpbmUgV004MzUwX0FEQ19EQUNfQ09NUCAgICAgICAgICAgICAgICAgICAgIDB4NzEKKyNkZWZpbmUgV004MzUwX0FJX0FEQ19DT05UUk9MICAgICAgICAgICAgICAgICAgIDB4NzIKKyNkZWZpbmUgV004MzUwX0FJX0RBQ19DT05UUk9MICAgICAgICAgICAgICAgICAgIDB4NzMKKyNkZWZpbmUgV004MzUwX0FJRl9URVNUICAgICAgICAgICAgICAgICAgICAgICAgIDB4NzQKKyNkZWZpbmUgV004MzUwX0pBQ0tfUElOX1NUQVRVUyAgICAgICAgICAgICAgICAgIDB4RTcKKworLyogQml0IHZhbHVlcyBmb3IgUjA4ICgweDA4KSAqLworI2RlZmluZSBXTTgzNTBfQ09ERUNfSVNFTF8xXzUgICAgICAgICAgICAgICAgICAgMAkvKiB4MS41ICovCisjZGVmaW5lIFdNODM1MF9DT0RFQ19JU0VMXzFfMCAgICAgICAgICAgICAgICAgICAxCS8qIHgxLjAgKi8KKyNkZWZpbmUgV004MzUwX0NPREVDX0lTRUxfMF83NSAgICAgICAgICAgICAgICAgIDIJLyogeDAuNzUgKi8KKyNkZWZpbmUgV004MzUwX0NPREVDX0lTRUxfMF81ICAgICAgICAgICAgICAgICAgIDMJLyogeDAuNSAqLworCisjZGVmaW5lIFdNODM1MF9WTUlEX09GRiAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIFdNODM1MF9WTUlEXzUwMEsgICAgICAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIFdNODM1MF9WTUlEXzEwMEsgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIFdNODM1MF9WTUlEXzEwSyAgICAgICAgICAgICAgICAgICAgICAgICAzCisKKy8qCisgKiBSNDAgKDB4MjgpIC0gQ2xvY2sgQ29udHJvbCAxCisgKi8KKyNkZWZpbmUgV004MzUwX1RPQ0xLX1JBVEUgICAgICAgICAgICAgICAgICAgICAgIDB4NDAwMAorI2RlZmluZSBXTTgzNTBfTUNMS19TRUwgICAgICAgICAgICAgICAgICAgICAgICAgMHgwODAwCisjZGVmaW5lIFdNODM1MF9NQ0xLX0RJVl9NQVNLICAgICAgICAgICAgICAgICAgICAweDAxMDAKKyNkZWZpbmUgV004MzUwX0JDTEtfRElWX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDBGMAorI2RlZmluZSBXTTgzNTBfT1BDTEtfRElWX01BU0sgICAgICAgICAgICAgICAgICAgMHgwMDA3CisKKy8qCisgKiBSNDEgKDB4MjkpIC0gQ2xvY2sgQ29udHJvbCAyCisgKi8KKyNkZWZpbmUgV004MzUwX0xSQ19BRENfU0VMICAgICAgICAgICAgICAgICAgICAgIDB4ODAwMAorI2RlZmluZSBXTTgzNTBfTUNMS19ESVIgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxCisKKy8qCisgKiBSNDIgKDB4MkEpIC0gRkxMIENvbnRyb2wgMQorICovCisjZGVmaW5lIFdNODM1MF9GTExfRElUSEVSX1dJRFRIX01BU0sgICAgICAgICAgICAweDMwMDAKKyNkZWZpbmUgV004MzUwX0ZMTF9ESVRIRVJfSFAgICAgICAgICAgICAgICAgICAgIDB4MDgwMAorI2RlZmluZSBXTTgzNTBfRkxMX09VVERJVl9NQVNLICAgICAgICAgICAgICAgICAgMHgwNzAwCisjZGVmaW5lIFdNODM1MF9GTExfUlNQX1JBVEVfTUFTSyAgICAgICAgICAgICAgICAweDAwRjAKKyNkZWZpbmUgV004MzUwX0ZMTF9SQVRFX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDAwNworCisvKgorICogUjQzICgweDJCKSAtIEZMTCBDb250cm9sIDIKKyAqLworI2RlZmluZSBXTTgzNTBfRkxMX1JBVElPX01BU0sgICAgICAgICAgICAgICAgICAgMHhGODAwCisjZGVmaW5lIFdNODM1MF9GTExfTl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAweDAzRkYKKworLyoKKyAqIFI0NCAoMHgyQykgLSBGTEwgQ29udHJvbCAzCisgKi8KKyNkZWZpbmUgV004MzUwX0ZMTF9LX01BU0sgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRgorCisvKgorICogUjQ1ICgweDJEKSAtIEZMTCBDb250cm9sIDQKKyAqLworI2RlZmluZSBXTTgzNTBfRkxMX0ZSQUMgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDIwCisjZGVmaW5lIFdNODM1MF9GTExfU0xPV19MT0NLX1JFRiAgICAgICAgICAgICAgICAweDAwMTAKKyNkZWZpbmUgV004MzUwX0ZMTF9DTEtfU1JDX01BU0sgICAgICAgICAgICAgICAgIDB4MDAwMworCisvKgorICogUjQ4ICgweDMwKSAtIERBQyBDb250cm9sCisgKi8KKyNkZWZpbmUgV004MzUwX0RBQ19NT05PICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjAwMAorI2RlZmluZSBXTTgzNTBfQUlGX0xSQ0xLUkFURSAgICAgICAgICAgICAgICAgICAgMHgxMDAwCisjZGVmaW5lIFdNODM1MF9ERUVNUF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAweDAwMzAKKyNkZWZpbmUgV004MzUwX0RBQ0xfREFUSU5WICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMgorI2RlZmluZSBXTTgzNTBfREFDUl9EQVRJTlYgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxCisKKy8qCisgKiBSNTAgKDB4MzIpIC0gREFDIERpZ2l0YWwgVm9sdW1lIEwKKyAqLworI2RlZmluZSBXTTgzNTBfREFDX1ZVICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwCisjZGVmaW5lIFdNODM1MF9EQUNMX1ZPTF9NQVNLICAgICAgICAgICAgICAgICAgICAweDAwRkYKKworLyoKKyAqIFI1MSAoMHgzMykgLSBEQUMgRGlnaXRhbCBWb2x1bWUgUgorICovCisjZGVmaW5lIFdNODM1MF9EQUNfVlUgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAKKyNkZWZpbmUgV004MzUwX0RBQ1JfVk9MX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDBGRgorCisvKgorICogUjUzICgweDM1KSAtIERBQyBMUiBSYXRlCisgKi8KKyNkZWZpbmUgV004MzUwX0RBQ0xSQ19FTkEgICAgICAgICAgICAgICAgICAgICAgIDB4MDgwMAorI2RlZmluZSBXTTgzNTBfREFDTFJDX1JBVEVfTUFTSyAgICAgICAgICAgICAgICAgMHgwN0ZGCisKKy8qCisgKiBSNTQgKDB4MzYpIC0gREFDIENsb2NrIENvbnRyb2wKKyAqLworI2RlZmluZSBXTTgzNTBfREFDQ0xLX1BPTCAgICAgICAgICAgICAgICAgICAgICAgMHgwMDEwCisjZGVmaW5lIFdNODM1MF9EQUNfQ0xLRElWX01BU0sgICAgICAgICAgICAgICAgICAweDAwMDcKKworLyoKKyAqIFI1OCAoMHgzQSkgLSBEQUMgTXV0ZQorICovCisjZGVmaW5lIFdNODM1MF9EQUNfTVVURV9FTkEgICAgICAgICAgICAgICAgICAgICAweDQwMDAKKworLyoKKyAqIFI1OSAoMHgzQikgLSBEQUMgTXV0ZSBWb2x1bWUKKyAqLworI2RlZmluZSBXTTgzNTBfREFDX01VVEVNT0RFICAgICAgICAgICAgICAgICAgICAgMHg0MDAwCisjZGVmaW5lIFdNODM1MF9EQUNfTVVURVJBVEUgICAgICAgICAgICAgICAgICAgICAweDIwMDAKKyNkZWZpbmUgV004MzUwX0RBQ19TQl9GSUxUICAgICAgICAgICAgICAgICAgICAgIDB4MTAwMAorCisvKgorICogUjYwICgweDNDKSAtIERBQyBTaWRlCisgKi8KKyNkZWZpbmUgV004MzUwX0FEQ19UT19EQUNMX01BU0sgICAgICAgICAgICAgICAgIDB4MzAwMAorI2RlZmluZSBXTTgzNTBfQURDX1RPX0RBQ1JfTUFTSyAgICAgICAgICAgICAgICAgMHgwQzAwCisKKy8qCisgKiBSNjQgKDB4NDApIC0gQURDIENvbnRyb2wKKyAqLworI2RlZmluZSBXTTgzNTBfQURDX0hQRl9DVVRfTUFTSyAgICAgICAgICAgICAgICAgMHgwMzAwCisjZGVmaW5lIFdNODM1MF9BRENMX0RBVElOViAgICAgICAgICAgICAgICAgICAgICAweDAwMDIKKyNkZWZpbmUgV004MzUwX0FEQ1JfREFUSU5WICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMQorCisvKgorICogUjY2ICgweDQyKSAtIEFEQyBEaWdpdGFsIFZvbHVtZSBMCisgKi8KKyNkZWZpbmUgV004MzUwX0FEQ19WVSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMAorI2RlZmluZSBXTTgzNTBfQURDTF9WT0xfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMEZGCisKKy8qCisgKiBSNjcgKDB4NDMpIC0gQURDIERpZ2l0YWwgVm9sdW1lIFIKKyAqLworI2RlZmluZSBXTTgzNTBfQURDX1ZVICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwCisjZGVmaW5lIFdNODM1MF9BRENSX1ZPTF9NQVNLICAgICAgICAgICAgICAgICAgICAweDAwRkYKKworLyoKKyAqIFI2OCAoMHg0NCkgLSBBREMgRGl2aWRlcgorICovCisjZGVmaW5lIFdNODM1MF9BRENMX0RBQ19TVk9MX01BU0sgICAgICAgICAgICAgICAweDBGMDAKKyNkZWZpbmUgV004MzUwX0FEQ1JfREFDX1NWT0xfTUFTSyAgICAgICAgICAgICAgIDB4MDBGMAorI2RlZmluZSBXTTgzNTBfQURDQ0xLX1BPTCAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA4CisjZGVmaW5lIFdNODM1MF9BRENfQ0xLRElWX01BU0sgICAgICAgICAgICAgICAgICAweDAwMDcKKworLyoKKyAqIFI3MCAoMHg0NikgLSBBREMgTFIgUmF0ZQorICovCisjZGVmaW5lIFdNODM1MF9BRENMUkNfRU5BICAgICAgICAgICAgICAgICAgICAgICAweDA4MDAKKyNkZWZpbmUgV004MzUwX0FEQ0xSQ19SQVRFX01BU0sgICAgICAgICAgICAgICAgIDB4MDdGRgorCisvKgorICogUjcyICgweDQ4KSAtIElucHV0IENvbnRyb2wKKyAqLworI2RlZmluZSBXTTgzNTBfSU4yUl9FTkEgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNDAwCisjZGVmaW5lIFdNODM1MF9JTjFSTl9FTkEgICAgICAgICAgICAgICAgICAgICAgICAweDAyMDAKKyNkZWZpbmUgV004MzUwX0lOMVJQX0VOQSAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMAorI2RlZmluZSBXTTgzNTBfSU4yTF9FTkEgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA0CisjZGVmaW5lIFdNODM1MF9JTjFMTl9FTkEgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDIKKyNkZWZpbmUgV004MzUwX0lOMUxQX0VOQSAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMQorCisvKgorICogUjczICgweDQ5KSAtIElOMyBJbnB1dCBDb250cm9sCisgKi8KKyNkZWZpbmUgV004MzUwX0lOM1JfU0hPUlQgICAgICAgICAgICAgICAgICAgICAgIDB4NDAwMAorI2RlZmluZSBXTTgzNTBfSU4zTF9TSE9SVCAgICAgICAgICAgICAgICAgICAgICAgMHgwMDQwCisKKy8qCisgKiBSNzQgKDB4NEEpIC0gTWljIEJpYXMgQ29udHJvbAorICovCisjZGVmaW5lIFdNODM1MF9NSUNCU0VMICAgICAgICAgICAgICAgICAgICAgICAgICAweDQwMDAKKyNkZWZpbmUgV004MzUwX01DRFRIUl9NQVNLICAgICAgICAgICAgICAgICAgICAgIDB4MDAxQworI2RlZmluZSBXTTgzNTBfTUNEU0NUSFJfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMDAzCisKKy8qCisgKiBSNzYgKDB4NEMpIC0gT3V0cHV0IENvbnRyb2wKKyAqLworI2RlZmluZSBXTTgzNTBfT1VUNF9WUk9JICAgICAgICAgICAgICAgICAgICAgICAgMHgwODAwCisjZGVmaW5lIFdNODM1MF9PVVQzX1ZST0kgICAgICAgICAgICAgICAgICAgICAgICAweDA0MDAKKyNkZWZpbmUgV004MzUwX09VVDJfVlJPSSAgICAgICAgICAgICAgICAgICAgICAgIDB4MDIwMAorI2RlZmluZSBXTTgzNTBfT1VUMV9WUk9JICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwCisjZGVmaW5lIFdNODM1MF9PVVQyX0ZCICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDQKKyNkZWZpbmUgV004MzUwX09VVDFfRkIgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMQorCisvKgorICogUjc3ICgweDREKSAtIEphY2sgRGV0ZWN0CisgKi8KKyNkZWZpbmUgV004MzUwX0pETF9FTkEgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODAwMAorI2RlZmluZSBXTTgzNTBfSkRSX0VOQSAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0MDAwCisKKy8qCisgKiBSNzggKDB4NEUpIC0gQW50aSBQb3AgQ29udHJvbAorICovCisjZGVmaW5lIFdNODM1MF9BTlRJX1BPUF9NQVNLICAgICAgICAgICAgICAgICAgICAweDAzMDAKKyNkZWZpbmUgV004MzUwX0RJU19PUF9MTjRfTUFTSyAgICAgICAgICAgICAgICAgIDB4MDBDMAorI2RlZmluZSBXTTgzNTBfRElTX09QX0xOM19NQVNLICAgICAgICAgICAgICAgICAgMHgwMDMwCisjZGVmaW5lIFdNODM1MF9ESVNfT1BfT1VUMl9NQVNLICAgICAgICAgICAgICAgICAweDAwMEMKKyNkZWZpbmUgV004MzUwX0RJU19PUF9PVVQxX01BU0sgICAgICAgICAgICAgICAgIDB4MDAwMworCisvKgorICogUjgwICgweDUwKSAtIExlZnQgSW5wdXQgVm9sdW1lCisgKi8KKyNkZWZpbmUgV004MzUwX0lOTF9NVVRFICAgICAgICAgICAgICAgICAgICAgICAgIDB4NDAwMAorI2RlZmluZSBXTTgzNTBfSU5MX1pDICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyMDAwCisjZGVmaW5lIFdNODM1MF9JTl9WVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAKKyNkZWZpbmUgV004MzUwX0lOTF9WT0xfTUFTSyAgICAgICAgICAgICAgICAgICAgIDB4MDBGQworCisvKgorICogUjgxICgweDUxKSAtIFJpZ2h0IElucHV0IFZvbHVtZQorICovCisjZGVmaW5lIFdNODM1MF9JTlJfTVVURSAgICAgICAgICAgICAgICAgICAgICAgICAweDQwMDAKKyNkZWZpbmUgV004MzUwX0lOUl9aQyAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjAwMAorI2RlZmluZSBXTTgzNTBfSU5fVlUgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwCisjZGVmaW5lIFdNODM1MF9JTlJfVk9MX01BU0sgICAgICAgICAgICAgICAgICAgICAweDAwRkMKKworLyoKKyAqIFI4OCAoMHg1OCkgLSBMZWZ0IE1peGVyIENvbnRyb2wKKyAqLworI2RlZmluZSBXTTgzNTBfREFDUl9UT19NSVhPVVRMICAgICAgICAgICAgICAgICAgMHgxMDAwCisjZGVmaW5lIFdNODM1MF9EQUNMX1RPX01JWE9VVEwgICAgICAgICAgICAgICAgICAweDA4MDAKKyNkZWZpbmUgV004MzUwX0lOM0xfVE9fTUlYT1VUTCAgICAgICAgICAgICAgICAgIDB4MDAwNAorI2RlZmluZSBXTTgzNTBfSU5SX1RPX01JWE9VVEwgICAgICAgICAgICAgICAgICAgMHgwMDAyCisjZGVmaW5lIFdNODM1MF9JTkxfVE9fTUlYT1VUTCAgICAgICAgICAgICAgICAgICAweDAwMDEKKworLyoKKyAqIFI4OSAoMHg1OSkgLSBSaWdodCBNaXhlciBDb250cm9sCisgKi8KKyNkZWZpbmUgV004MzUwX0RBQ1JfVE9fTUlYT1VUUiAgICAgICAgICAgICAgICAgIDB4MTAwMAorI2RlZmluZSBXTTgzNTBfREFDTF9UT19NSVhPVVRSICAgICAgICAgICAgICAgICAgMHgwODAwCisjZGVmaW5lIFdNODM1MF9JTjNSX1RPX01JWE9VVFIgICAgICAgICAgICAgICAgICAweDAwMDgKKyNkZWZpbmUgV004MzUwX0lOUl9UT19NSVhPVVRSICAgICAgICAgICAgICAgICAgIDB4MDAwMgorI2RlZmluZSBXTTgzNTBfSU5MX1RPX01JWE9VVFIgICAgICAgICAgICAgICAgICAgMHgwMDAxCisKKy8qCisgKiBSOTIgKDB4NUMpIC0gT1VUMyBNaXhlciBDb250cm9sCisgKi8KKyNkZWZpbmUgV004MzUwX0RBQ0xfVE9fT1VUMyAgICAgICAgICAgICAgICAgICAgIDB4MDgwMAorI2RlZmluZSBXTTgzNTBfTUlYSU5MX1RPX09VVDMgICAgICAgICAgICAgICAgICAgMHgwMTAwCisjZGVmaW5lIFdNODM1MF9PVVQ0X1RPX09VVDMgICAgICAgICAgICAgICAgICAgICAweDAwMDgKKyNkZWZpbmUgV004MzUwX01JWE9VVExfVE9fT1VUMyAgICAgICAgICAgICAgICAgIDB4MDAwMQorCisvKgorICogUjkzICgweDVEKSAtIE9VVDQgTWl4ZXIgQ29udHJvbAorICovCisjZGVmaW5lIFdNODM1MF9EQUNSX1RPX09VVDQgICAgICAgICAgICAgICAgICAgICAweDEwMDAKKyNkZWZpbmUgV004MzUwX0RBQ0xfVE9fT1VUNCAgICAgICAgICAgICAgICAgICAgIDB4MDgwMAorI2RlZmluZSBXTTgzNTBfT1VUNF9BVFROICAgICAgICAgICAgICAgICAgICAgICAgMHgwNDAwCisjZGVmaW5lIFdNODM1MF9NSVhJTlJfVE9fT1VUNCAgICAgICAgICAgICAgICAgICAweDAyMDAKKyNkZWZpbmUgV004MzUwX09VVDNfVE9fT1VUNCAgICAgICAgICAgICAgICAgICAgIDB4MDAwNAorI2RlZmluZSBXTTgzNTBfTUlYT1VUUl9UT19PVVQ0ICAgICAgICAgICAgICAgICAgMHgwMDAyCisjZGVmaW5lIFdNODM1MF9NSVhPVVRMX1RPX09VVDQgICAgICAgICAgICAgICAgICAweDAwMDEKKworLyoKKyAqIFI5NiAoMHg2MCkgLSBPdXRwdXQgTGVmdCBNaXhlciBWb2x1bWUKKyAqLworI2RlZmluZSBXTTgzNTBfSU4zTF9NSVhPVVRMX1ZPTF9NQVNLICAgICAgICAgICAgMHgwRTAwCisjZGVmaW5lIFdNODM1MF9JTjNMX01JWE9VVExfVk9MX1NISUZUICAgICAgICAgICAgICAgIDkKKyNkZWZpbmUgV004MzUwX0lOUl9NSVhPVVRMX1ZPTF9NQVNLICAgICAgICAgICAgIDB4MDBFMAorI2RlZmluZSBXTTgzNTBfSU5SX01JWE9VVExfVk9MX1NISUZUICAgICAgICAgICAgICAgICA1CisjZGVmaW5lIFdNODM1MF9JTkxfTUlYT1VUTF9WT0xfTUFTSyAgICAgICAgICAgICAweDAwMEUKKyNkZWZpbmUgV004MzUwX0lOTF9NSVhPVVRMX1ZPTF9TSElGVCAgICAgICAgICAgICAgICAgMQorCisvKiBCaXQgdmFsdWVzIGZvciBSOTYgKDB4NjApICovCisjZGVmaW5lIFdNODM1MF9JTjNMX01JWE9VVExfVk9MX09GRiAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgV004MzUwX0lOM0xfTUlYT1VUTF9WT0xfTTEyREIgICAgICAgICAgICAgICAgMQorI2RlZmluZSBXTTgzNTBfSU4zTF9NSVhPVVRMX1ZPTF9NOURCICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIFdNODM1MF9JTjNMX01JWE9VVExfVk9MX002REIgICAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgV004MzUwX0lOM0xfTUlYT1VUTF9WT0xfTTNEQiAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBXTTgzNTBfSU4zTF9NSVhPVVRMX1ZPTF8wREIgICAgICAgICAgICAgICAgICA1CisjZGVmaW5lIFdNODM1MF9JTjNMX01JWE9VVExfVk9MXzNEQiAgICAgICAgICAgICAgICAgIDYKKyNkZWZpbmUgV004MzUwX0lOM0xfTUlYT1VUTF9WT0xfNkRCICAgICAgICAgICAgICAgICAgNworCisjZGVmaW5lIFdNODM1MF9JTlJfTUlYT1VUTF9WT0xfT0ZGICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgV004MzUwX0lOUl9NSVhPVVRMX1ZPTF9NMTJEQiAgICAgICAgICAgICAgICAgMQorI2RlZmluZSBXTTgzNTBfSU5SX01JWE9VVExfVk9MX005REIgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIFdNODM1MF9JTlJfTUlYT1VUTF9WT0xfTTZEQiAgICAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgV004MzUwX0lOUl9NSVhPVVRMX1ZPTF9NM0RCICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBXTTgzNTBfSU5SX01JWE9VVExfVk9MXzBEQiAgICAgICAgICAgICAgICAgICA1CisjZGVmaW5lIFdNODM1MF9JTlJfTUlYT1VUTF9WT0xfM0RCICAgICAgICAgICAgICAgICAgIDYKKyNkZWZpbmUgV004MzUwX0lOUl9NSVhPVVRMX1ZPTF82REIgICAgICAgICAgICAgICAgICAgNworCisjZGVmaW5lIFdNODM1MF9JTkxfTUlYT1VUTF9WT0xfT0ZGICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgV004MzUwX0lOTF9NSVhPVVRMX1ZPTF9NMTJEQiAgICAgICAgICAgICAgICAgMQorI2RlZmluZSBXTTgzNTBfSU5MX01JWE9VVExfVk9MX005REIgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIFdNODM1MF9JTkxfTUlYT1VUTF9WT0xfTTZEQiAgICAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgV004MzUwX0lOTF9NSVhPVVRMX1ZPTF9NM0RCICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBXTTgzNTBfSU5MX01JWE9VVExfVk9MXzBEQiAgICAgICAgICAgICAgICAgICA1CisjZGVmaW5lIFdNODM1MF9JTkxfTUlYT1VUTF9WT0xfM0RCICAgICAgICAgICAgICAgICAgIDYKKyNkZWZpbmUgV004MzUwX0lOTF9NSVhPVVRMX1ZPTF82REIgICAgICAgICAgICAgICAgICAgNworCisvKgorICogUjk3ICgweDYxKSAtIE91dHB1dCBSaWdodCBNaXhlciBWb2x1bWUKKyAqLworI2RlZmluZSBXTTgzNTBfSU4zUl9NSVhPVVRSX1ZPTF9NQVNLICAgICAgICAgICAgMHhFMDAwCisjZGVmaW5lIFdNODM1MF9JTjNSX01JWE9VVFJfVk9MX1NISUZUICAgICAgICAgICAgICAgMTMKKyNkZWZpbmUgV004MzUwX0lOUl9NSVhPVVRSX1ZPTF9NQVNLICAgICAgICAgICAgIDB4MDBFMAorI2RlZmluZSBXTTgzNTBfSU5SX01JWE9VVFJfVk9MX1NISUZUICAgICAgICAgICAgICAgICA1CisjZGVmaW5lIFdNODM1MF9JTkxfTUlYT1VUUl9WT0xfTUFTSyAgICAgICAgICAgICAweDAwMEUKKyNkZWZpbmUgV004MzUwX0lOTF9NSVhPVVRSX1ZPTF9TSElGVCAgICAgICAgICAgICAgICAgMQorCisvKiBCaXQgdmFsdWVzIGZvciBSOTYgKDB4NjApICovCisjZGVmaW5lIFdNODM1MF9JTjNSX01JWE9VVFJfVk9MX09GRiAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgV004MzUwX0lOM1JfTUlYT1VUUl9WT0xfTTEyREIgICAgICAgICAgICAgICAgMQorI2RlZmluZSBXTTgzNTBfSU4zUl9NSVhPVVRSX1ZPTF9NOURCICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIFdNODM1MF9JTjNSX01JWE9VVFJfVk9MX002REIgICAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgV004MzUwX0lOM1JfTUlYT1VUUl9WT0xfTTNEQiAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBXTTgzNTBfSU4zUl9NSVhPVVRSX1ZPTF8wREIgICAgICAgICAgICAgICAgICA1CisjZGVmaW5lIFdNODM1MF9JTjNSX01JWE9VVFJfVk9MXzNEQiAgICAgICAgICAgICAgICAgIDYKKyNkZWZpbmUgV004MzUwX0lOM1JfTUlYT1VUUl9WT0xfNkRCICAgICAgICAgICAgICAgICAgNworCisjZGVmaW5lIFdNODM1MF9JTlJfTUlYT1VUUl9WT0xfT0ZGICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgV004MzUwX0lOUl9NSVhPVVRSX1ZPTF9NMTJEQiAgICAgICAgICAgICAgICAgMQorI2RlZmluZSBXTTgzNTBfSU5SX01JWE9VVFJfVk9MX005REIgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIFdNODM1MF9JTlJfTUlYT1VUUl9WT0xfTTZEQiAgICAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgV004MzUwX0lOUl9NSVhPVVRSX1ZPTF9NM0RCICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBXTTgzNTBfSU5SX01JWE9VVFJfVk9MXzBEQiAgICAgICAgICAgICAgICAgICA1CisjZGVmaW5lIFdNODM1MF9JTlJfTUlYT1VUUl9WT0xfM0RCICAgICAgICAgICAgICAgICAgIDYKKyNkZWZpbmUgV004MzUwX0lOUl9NSVhPVVRSX1ZPTF82REIgICAgICAgICAgICAgICAgICAgNworCisjZGVmaW5lIFdNODM1MF9JTkxfTUlYT1VUUl9WT0xfT0ZGICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgV004MzUwX0lOTF9NSVhPVVRSX1ZPTF9NMTJEQiAgICAgICAgICAgICAgICAgMQorI2RlZmluZSBXTTgzNTBfSU5MX01JWE9VVFJfVk9MX005REIgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIFdNODM1MF9JTkxfTUlYT1VUUl9WT0xfTTZEQiAgICAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgV004MzUwX0lOTF9NSVhPVVRSX1ZPTF9NM0RCICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBXTTgzNTBfSU5MX01JWE9VVFJfVk9MXzBEQiAgICAgICAgICAgICAgICAgICA1CisjZGVmaW5lIFdNODM1MF9JTkxfTUlYT1VUUl9WT0xfM0RCICAgICAgICAgICAgICAgICAgIDYKKyNkZWZpbmUgV004MzUwX0lOTF9NSVhPVVRSX1ZPTF82REIgICAgICAgICAgICAgICAgICAgNworCisvKgorICogUjk4ICgweDYyKSAtIElucHV0IE1peGVyIFZvbHVtZSBMCisgKi8KKyNkZWZpbmUgV004MzUwX0lOM0xfTUlYSU5MX1ZPTF9NQVNLICAgICAgICAgICAgIDB4MEUwMAorI2RlZmluZSBXTTgzNTBfSU4yTF9NSVhJTkxfVk9MX01BU0sgICAgICAgICAgICAgMHgwMDBFCisjZGVmaW5lIFdNODM1MF9JTkxfTUlYSU5MX1ZPTCAgICAgICAgICAgICAgICAgICAweDAwMDEKKworLyoKKyAqIFI5OSAoMHg2MykgLSBJbnB1dCBNaXhlciBWb2x1bWUgUgorICovCisjZGVmaW5lIFdNODM1MF9JTjNSX01JWElOUl9WT0xfTUFTSyAgICAgICAgICAgICAweEUwMDAKKyNkZWZpbmUgV004MzUwX0lOMlJfTUlYSU5SX1ZPTF9NQVNLICAgICAgICAgICAgIDB4MDBFMAorI2RlZmluZSBXTTgzNTBfSU5SX01JWElOUl9WT0wgICAgICAgICAgICAgICAgICAgMHgwMDAxCisKKy8qCisgKiBSMTAwICgweDY0KSAtIElucHV0IE1peGVyIFZvbHVtZQorICovCisjZGVmaW5lIFdNODM1MF9PVVQ0X01JWElOX0RTVCAgICAgICAgICAgICAgICAgICAweDgwMDAKKyNkZWZpbmUgV004MzUwX09VVDRfTUlYSU5fVk9MX01BU0sgICAgICAgICAgICAgIDB4MDAwRQorCisvKgorICogUjEwNCAoMHg2OCkgLSBMT1VUMSBWb2x1bWUKKyAqLworI2RlZmluZSBXTTgzNTBfT1VUMUxfTVVURSAgICAgICAgICAgICAgICAgICAgICAgMHg0MDAwCisjZGVmaW5lIFdNODM1MF9PVVQxTF9aQyAgICAgICAgICAgICAgICAgICAgICAgICAweDIwMDAKKyNkZWZpbmUgV004MzUwX09VVDFfVlUgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMAorI2RlZmluZSBXTTgzNTBfT1VUMUxfVk9MX01BU0sgICAgICAgICAgICAgICAgICAgMHgwMEZDCisjZGVmaW5lIFdNODM1MF9PVVQxTF9WT0xfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgIDIKKworLyoKKyAqIFIxMDUgKDB4NjkpIC0gUk9VVDEgVm9sdW1lCisgKi8KKyNkZWZpbmUgV004MzUwX09VVDFSX01VVEUgICAgICAgICAgICAgICAgICAgICAgIDB4NDAwMAorI2RlZmluZSBXTTgzNTBfT1VUMVJfWkMgICAgICAgICAgICAgICAgICAgICAgICAgMHgyMDAwCisjZGVmaW5lIFdNODM1MF9PVVQxX1ZVICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAKKyNkZWZpbmUgV004MzUwX09VVDFSX1ZPTF9NQVNLICAgICAgICAgICAgICAgICAgIDB4MDBGQworI2RlZmluZSBXTTgzNTBfT1VUMVJfVk9MX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAyCisKKy8qCisgKiBSMTA2ICgweDZBKSAtIExPVVQyIFZvbHVtZQorICovCisjZGVmaW5lIFdNODM1MF9PVVQyTF9NVVRFICAgICAgICAgICAgICAgICAgICAgICAweDQwMDAKKyNkZWZpbmUgV004MzUwX09VVDJMX1pDICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjAwMAorI2RlZmluZSBXTTgzNTBfT1VUMl9WVSAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwCisjZGVmaW5lIFdNODM1MF9PVVQyTF9WT0xfTUFTSyAgICAgICAgICAgICAgICAgICAweDAwRkMKKworLyoKKyAqIFIxMDcgKDB4NkIpIC0gUk9VVDIgVm9sdW1lCisgKi8KKyNkZWZpbmUgV004MzUwX09VVDJSX01VVEUgICAgICAgICAgICAgICAgICAgICAgIDB4NDAwMAorI2RlZmluZSBXTTgzNTBfT1VUMlJfWkMgICAgICAgICAgICAgICAgICAgICAgICAgMHgyMDAwCisjZGVmaW5lIFdNODM1MF9PVVQyUl9JTlYgICAgICAgICAgICAgICAgICAgICAgICAweDA0MDAKKyNkZWZpbmUgV004MzUwX09VVDJSX0lOVl9NVVRFICAgICAgICAgICAgICAgICAgIDB4MDIwMAorI2RlZmluZSBXTTgzNTBfT1VUMl9WVSAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwCisjZGVmaW5lIFdNODM1MF9PVVQyUl9WT0xfTUFTSyAgICAgICAgICAgICAgICAgICAweDAwRkMKKworLyoKKyAqIFIxMTEgKDB4NkYpIC0gQkVFUCBWb2x1bWUKKyAqLworI2RlZmluZSBXTTgzNTBfSU4zUl9PVVQyUl9WT0xfTUFTSyAgICAgICAgICAgICAgMHgwMEUwCisKKy8qCisgKiBSMTEyICgweDcwKSAtIEFJIEZvcm1hdGluZworICovCisjZGVmaW5lIFdNODM1MF9BSUZfQkNMS19JTlYgICAgICAgICAgICAgICAgICAgICAweDgwMDAKKyNkZWZpbmUgV004MzUwX0FJRl9UUkkgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjAwMAorI2RlZmluZSBXTTgzNTBfQUlGX0xSQ0xLX0lOViAgICAgICAgICAgICAgICAgICAgMHgxMDAwCisjZGVmaW5lIFdNODM1MF9BSUZfV0xfTUFTSyAgICAgICAgICAgICAgICAgICAgICAweDBDMDAKKyNkZWZpbmUgV004MzUwX0FJRl9GTVRfTUFTSyAgICAgICAgICAgICAgICAgICAgIDB4MDMwMAorCisvKgorICogUjExMyAoMHg3MSkgLSBBREMgREFDIENPTVAKKyAqLworI2RlZmluZSBXTTgzNTBfREFDX0NPTVAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDgwCisjZGVmaW5lIFdNODM1MF9EQUNfQ09NUE1PREUgICAgICAgICAgICAgICAgICAgICAweDAwNDAKKyNkZWZpbmUgV004MzUwX0FEQ19DT01QICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAyMAorI2RlZmluZSBXTTgzNTBfQURDX0NPTVBNT0RFICAgICAgICAgICAgICAgICAgICAgMHgwMDEwCisjZGVmaW5lIFdNODM1MF9MT09QQkFDSyAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEKKworLyoKKyAqIFIxMTQgKDB4NzIpIC0gQUkgQURDIENvbnRyb2wKKyAqLworI2RlZmluZSBXTTgzNTBfQUlGQURDX1BEICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDgwCisjZGVmaW5lIFdNODM1MF9BSUZBRENMX1NSQyAgICAgICAgICAgICAgICAgICAgICAweDAwNDAKKyNkZWZpbmUgV004MzUwX0FJRkFEQ1JfU1JDICAgICAgICAgICAgICAgICAgICAgIDB4MDAyMAorI2RlZmluZSBXTTgzNTBfQUlGQURDX1RETV9DSEFOICAgICAgICAgICAgICAgICAgMHgwMDEwCisjZGVmaW5lIFdNODM1MF9BSUZBRENfVERNICAgICAgICAgICAgICAgICAgICAgICAweDAwMDgKKworLyoKKyAqIFIxMTUgKDB4NzMpIC0gQUkgREFDIENvbnRyb2wKKyAqLworI2RlZmluZSBXTTgzNTBfQkNMS19NU1RSICAgICAgICAgICAgICAgICAgICAgICAgMHg0MDAwCisjZGVmaW5lIFdNODM1MF9BSUZEQUNfUEQgICAgICAgICAgICAgICAgICAgICAgICAweDAwODAKKyNkZWZpbmUgV004MzUwX0RBQ0xfU1JDICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA0MAorI2RlZmluZSBXTTgzNTBfREFDUl9TUkMgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDIwCisjZGVmaW5lIFdNODM1MF9BSUZEQUNfVERNX0NIQU4gICAgICAgICAgICAgICAgICAweDAwMTAKKyNkZWZpbmUgV004MzUwX0FJRkRBQ19URE0gICAgICAgICAgICAgICAgICAgICAgIDB4MDAwOAorI2RlZmluZSBXTTgzNTBfREFDX0JPT1NUX01BU0sgICAgICAgICAgICAgICAgICAgMHgwMDAzCisKKy8qCisgKiBSMTE2ICgweDc0KSAtIEFJRiBUZXN0CisgKi8KKyNkZWZpbmUgV004MzUwX0NPREVDX0JZUCAgICAgICAgICAgICAgICAgICAgICAgIDB4NDAwMAorI2RlZmluZSBXTTgzNTBfQUlGQURDX1dSX1RTVCAgICAgICAgICAgICAgICAgICAgMHgyMDAwCisjZGVmaW5lIFdNODM1MF9BSUZBRENfUkRfVFNUICAgICAgICAgICAgICAgICAgICAweDEwMDAKKyNkZWZpbmUgV004MzUwX0FJRkRBQ19XUl9UU1QgICAgICAgICAgICAgICAgICAgIDB4MDgwMAorI2RlZmluZSBXTTgzNTBfQUlGREFDX1JEX1RTVCAgICAgICAgICAgICAgICAgICAgMHgwNDAwCisjZGVmaW5lIFdNODM1MF9BSUZBRENfQVNZTiAgICAgICAgICAgICAgICAgICAgICAweDAwMjAKKyNkZWZpbmUgV004MzUwX0FJRkRBQ19BU1lOICAgICAgICAgICAgICAgICAgICAgIDB4MDAxMAorCisvKgorICogUjIzMSAoMHhFNykgLSBKYWNrIFN0YXR1cworICovCisjZGVmaW5lIFdNODM1MF9KQUNLX1JfTFZMICAgICAgICAgICAgICAgICAgICAgICAweDA0MDAKKworLyoKKyAqIFdNODM1MCBQbGF0Zm9ybSBzZXR1cAorICovCisjZGVmaW5lIFdNODM1MF9TX0NVUlZFX05PTkUJCQkweDAKKyNkZWZpbmUgV004MzUwX1NfQ1VSVkVfRkFTVAkJCTB4MQorI2RlZmluZSBXTTgzNTBfU19DVVJWRV9NRURJVU0JCQkweDIKKyNkZWZpbmUgV004MzUwX1NfQ1VSVkVfU0xPVwkJCTB4MworCisjZGVmaW5lIFdNODM1MF9ESVNDSEFSR0VfT0ZGCQkJMHgwCisjZGVmaW5lIFdNODM1MF9ESVNDSEFSR0VfRkFTVAkJCTB4MQorI2RlZmluZSBXTTgzNTBfRElTQ0hBUkdFX01FRElVTQkJCTB4MgorI2RlZmluZSBXTTgzNTBfRElTQ0hBUkdFX1NMT1cJCQkweDMKKworI2RlZmluZSBXTTgzNTBfVElFX09GRl81MDBSCQkJMHgwCisjZGVmaW5lIFdNODM1MF9USUVfT0ZGXzMwSwkJCTB4MQorCisvKgorICogQ2xvY2sgc291cmNlcyAmIGRpcmVjdGlvbnMKKyAqLworI2RlZmluZSBXTTgzNTBfU1lTQ0xLCQkJCTAKKworI2RlZmluZSBXTTgzNTBfTUNMS19TRUxfUExMX01DTEsJCTAKKyNkZWZpbmUgV004MzUwX01DTEtfU0VMX1BMTF9EQUMJCQkxCisjZGVmaW5lIFdNODM1MF9NQ0xLX1NFTF9QTExfQURDCQkJMgorI2RlZmluZSBXTTgzNTBfTUNMS19TRUxfUExMXzMySwkJCTMKKyNkZWZpbmUgV004MzUwX01DTEtfU0VMX01DTEsJCQk1CisKKyNkZWZpbmUgV004MzUwX01DTEtfRElSX09VVAkJCTAKKyNkZWZpbmUgV004MzUwX01DTEtfRElSX0lOCQkJMQorCisvKiBjbG9jayBkaXZpZGVyIGlkJ3MgKi8KKyNkZWZpbmUgV004MzUwX0FEQ19DTEtESVYJCQkwCisjZGVmaW5lIFdNODM1MF9EQUNfQ0xLRElWCQkJMQorI2RlZmluZSBXTTgzNTBfQkNMS19DTEtESVYJCQkyCisjZGVmaW5lIFdNODM1MF9PUENMS19DTEtESVYJCQkzCisjZGVmaW5lIFdNODM1MF9UT19DTEtESVYJCQk0CisjZGVmaW5lIFdNODM1MF9TWVNfQ0xLRElWCQkJNQorI2RlZmluZSBXTTgzNTBfREFDTFJfQ0xLRElWCQkJNgorI2RlZmluZSBXTTgzNTBfQURDTFJfQ0xLRElWCQkJNworCisvKiBBREMgY2xvY2sgZGl2aWRlcnMgKi8KKyNkZWZpbmUgV004MzUwX0FEQ0RJVl8xCQkJCTB4MAorI2RlZmluZSBXTTgzNTBfQURDRElWXzFfNQkJCTB4MQorI2RlZmluZSBXTTgzNTBfQURDRElWXzIJCQkJMHgyCisjZGVmaW5lIFdNODM1MF9BRENESVZfMwkJCQkweDMKKyNkZWZpbmUgV004MzUwX0FEQ0RJVl80CQkJCTB4NAorI2RlZmluZSBXTTgzNTBfQURDRElWXzVfNQkJCTB4NQorI2RlZmluZSBXTTgzNTBfQURDRElWXzYJCQkJMHg2CisKKy8qIEFEQyBjbG9jayBkaXZpZGVycyAqLworI2RlZmluZSBXTTgzNTBfREFDRElWXzEJCQkJMHgwCisjZGVmaW5lIFdNODM1MF9EQUNESVZfMV81CQkJMHgxCisjZGVmaW5lIFdNODM1MF9EQUNESVZfMgkJCQkweDIKKyNkZWZpbmUgV004MzUwX0RBQ0RJVl8zCQkJCTB4MworI2RlZmluZSBXTTgzNTBfREFDRElWXzQJCQkJMHg0CisjZGVmaW5lIFdNODM1MF9EQUNESVZfNV81CQkJMHg1CisjZGVmaW5lIFdNODM1MF9EQUNESVZfNgkJCQkweDYKKworLyogQkNMSyBjbG9jayBkaXZpZGVycyAqLworI2RlZmluZSBXTTgzNTBfQkNMS19ESVZfMQkJCSgweDAgPDwgNCkKKyNkZWZpbmUgV004MzUwX0JDTEtfRElWXzFfNQkJCSgweDEgPDwgNCkKKyNkZWZpbmUgV004MzUwX0JDTEtfRElWXzIJCQkoMHgyIDw8IDQpCisjZGVmaW5lIFdNODM1MF9CQ0xLX0RJVl8zCQkJKDB4MyA8PCA0KQorI2RlZmluZSBXTTgzNTBfQkNMS19ESVZfNAkJCSgweDQgPDwgNCkKKyNkZWZpbmUgV004MzUwX0JDTEtfRElWXzVfNQkJCSgweDUgPDwgNCkKKyNkZWZpbmUgV004MzUwX0JDTEtfRElWXzYJCQkoMHg2IDw8IDQpCisjZGVmaW5lIFdNODM1MF9CQ0xLX0RJVl84CQkJKDB4NyA8PCA0KQorI2RlZmluZSBXTTgzNTBfQkNMS19ESVZfMTEJCQkoMHg4IDw8IDQpCisjZGVmaW5lIFdNODM1MF9CQ0xLX0RJVl8xMgkJCSgweDkgPDwgNCkKKyNkZWZpbmUgV004MzUwX0JDTEtfRElWXzE2CQkJKDB4YSA8PCA0KQorI2RlZmluZSBXTTgzNTBfQkNMS19ESVZfMjIJCQkoMHhiIDw8IDQpCisjZGVmaW5lIFdNODM1MF9CQ0xLX0RJVl8yNAkJCSgweGMgPDwgNCkKKyNkZWZpbmUgV004MzUwX0JDTEtfRElWXzMyCQkJKDB4ZCA8PCA0KQorI2RlZmluZSBXTTgzNTBfQkNMS19ESVZfNDQJCQkoMHhlIDw8IDQpCisjZGVmaW5lIFdNODM1MF9CQ0xLX0RJVl80OAkJCSgweGYgPDwgNCkKKworLyogU3lzIChNQ0xLKSBjbG9jayBkaXZpZGVycyAqLworI2RlZmluZSBXTTgzNTBfTUNMS19ESVZfMQkJCSgweDAgPDwgOCkKKyNkZWZpbmUgV004MzUwX01DTEtfRElWXzIJCQkoMHgxIDw8IDgpCisKKy8qIE9QIGNsb2NrIGRpdmlkZXJzICovCisjZGVmaW5lIFdNODM1MF9PUENMS19ESVZfMQkJCTB4MAorI2RlZmluZSBXTTgzNTBfT1BDTEtfRElWXzIJCQkweDEKKyNkZWZpbmUgV004MzUwX09QQ0xLX0RJVl8zCQkJMHgyCisjZGVmaW5lIFdNODM1MF9PUENMS19ESVZfNAkJCTB4MworI2RlZmluZSBXTTgzNTBfT1BDTEtfRElWXzVfNQkJCTB4NAorI2RlZmluZSBXTTgzNTBfT1BDTEtfRElWXzYJCQkweDUKKworLyogREFJIElEICovCisjZGVmaW5lIFdNODM1MF9ISUZJX0RBSQkJCQkwCisKKy8qCisgKiBBdWRpbyBpbnRlcnJ1cHRzLgorICovCisjZGVmaW5lIFdNODM1MF9JUlFfQ09ERUNfSkNLX0RFVF9MCQkzOQorI2RlZmluZSBXTTgzNTBfSVJRX0NPREVDX0pDS19ERVRfUgkJNDAKKyNkZWZpbmUgV004MzUwX0lSUV9DT0RFQ19NSUNTQ0QJCQk0MQorI2RlZmluZSBXTTgzNTBfSVJRX0NPREVDX01JQ0QJCQk0MgorCitzdHJ1Y3Qgd204MzUwX2NvZGVjIHsKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2OworfTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21mZC93bTgzNTAvY29tcGFyYXRvci5oIGIvaW5jbHVkZS9saW51eC9tZmQvd204MzUwL2NvbXBhcmF0b3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNTM3ODg2Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9tZmQvd204MzUwL2NvbXBhcmF0b3IuaApAQCAtMCwwICsxLDE2NyBAQAorLyoKKyAqIGNvbXBhcmF0b3IuaCAgLS0gIENvbXBhcmF0b3IgQXV4IEFEQyBmb3IgV29sZnNvbiBXTTgzNTAgUE1JQworICoKKyAqIENvcHlyaWdodCAyMDA3IFdvbGZzb24gTWljcm9lbGVjdHJvbmljcyBQTEMKKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiAgdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgKiAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaWZuZGVmIF9fTElOVVhfTUZEX1dNODM1MF9DT01QQVJBVE9SX0hfCisjZGVmaW5lIF9fTElOVVhfTUZEX1dNODM1MF9DT01QQVJBVE9SX0hfCisKKy8qCisgKiBSZWdpc3RlcnMKKyAqLworCisjZGVmaW5lIFdNODM1MF9ESUdJVElTRVJfQ09OVFJPTF8xICAgICAgICAgICAgICAweDkwCisjZGVmaW5lIFdNODM1MF9ESUdJVElTRVJfQ09OVFJPTF8yICAgICAgICAgICAgICAweDkxCisjZGVmaW5lIFdNODM1MF9BVVgxX1JFQURCQUNLICAgICAgICAgICAgICAgICAgICAweDk4CisjZGVmaW5lIFdNODM1MF9BVVgyX1JFQURCQUNLICAgICAgICAgICAgICAgICAgICAweDk5CisjZGVmaW5lIFdNODM1MF9BVVgzX1JFQURCQUNLICAgICAgICAgICAgICAgICAgICAweDlBCisjZGVmaW5lIFdNODM1MF9BVVg0X1JFQURCQUNLICAgICAgICAgICAgICAgICAgICAweDlCCisjZGVmaW5lIFdNODM1MF9DSElQX1RFTVBfUkVBREJBQ0sgICAgICAgICAgICAgICAweDlGCisjZGVmaW5lIFdNODM1MF9HRU5FUklDX0NPTVBBUkFUT1JfQ09OVFJPTCAgICAgICAweEEzCisjZGVmaW5lIFdNODM1MF9HRU5FUklDX0NPTVBBUkFUT1JfMSAgICAgICAgICAgICAweEE0CisjZGVmaW5lIFdNODM1MF9HRU5FUklDX0NPTVBBUkFUT1JfMiAgICAgICAgICAgICAweEE1CisjZGVmaW5lIFdNODM1MF9HRU5FUklDX0NPTVBBUkFUT1JfMyAgICAgICAgICAgICAweEE2CisjZGVmaW5lIFdNODM1MF9HRU5FUklDX0NPTVBBUkFUT1JfNCAgICAgICAgICAgICAweEE3CisKKy8qCisgKiBSMTQ0ICgweDkwKSAtIERpZ2l0aXNlciBDb250cm9sICgxKQorICovCisjZGVmaW5lIFdNODM1MF9BVVhBRENfQ1RDICAgICAgICAgICAgICAgICAgICAgICAweDQwMDAKKyNkZWZpbmUgV004MzUwX0FVWEFEQ19QT0xMICAgICAgICAgICAgICAgICAgICAgIDB4MjAwMAorI2RlZmluZSBXTTgzNTBfQVVYQURDX0hJQl9NT0RFICAgICAgICAgICAgICAgICAgMHgxMDAwCisjZGVmaW5lIFdNODM1MF9BVVhBRENfU0VMOCAgICAgICAgICAgICAgICAgICAgICAweDAwODAKKyNkZWZpbmUgV004MzUwX0FVWEFEQ19TRUw3ICAgICAgICAgICAgICAgICAgICAgIDB4MDA0MAorI2RlZmluZSBXTTgzNTBfQVVYQURDX1NFTDYgICAgICAgICAgICAgICAgICAgICAgMHgwMDIwCisjZGVmaW5lIFdNODM1MF9BVVhBRENfU0VMNSAgICAgICAgICAgICAgICAgICAgICAweDAwMTAKKyNkZWZpbmUgV004MzUwX0FVWEFEQ19TRUw0ICAgICAgICAgICAgICAgICAgICAgIDB4MDAwOAorI2RlZmluZSBXTTgzNTBfQVVYQURDX1NFTDMgICAgICAgICAgICAgICAgICAgICAgMHgwMDA0CisjZGVmaW5lIFdNODM1MF9BVVhBRENfU0VMMiAgICAgICAgICAgICAgICAgICAgICAweDAwMDIKKyNkZWZpbmUgV004MzUwX0FVWEFEQ19TRUwxICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMQorCisvKgorICogUjE0NSAoMHg5MSkgLSBEaWdpdGlzZXIgQ29udHJvbCAoMikKKyAqLworI2RlZmluZSBXTTgzNTBfQVVYQURDX01BU0tNT0RFX01BU0sgICAgICAgICAgICAgMHgzMDAwCisjZGVmaW5lIFdNODM1MF9BVVhBRENfQ1JBVEVfTUFTSyAgICAgICAgICAgICAgICAweDA3MDAKKyNkZWZpbmUgV004MzUwX0FVWEFEQ19DQUwgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNAorI2RlZmluZSBXTTgzNTBfQVVYX1JCTU9ERSAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAyCisjZGVmaW5lIFdNODM1MF9BVVhBRENfV0FJVCAgICAgICAgICAgICAgICAgICAgICAweDAwMDEKKworLyoKKyAqIFIxNTIgKDB4OTgpIC0gQVVYMSBSZWFkYmFjaworICovCisjZGVmaW5lIFdNODM1MF9BVVhBRENfU0NBTEUxX01BU0sgICAgICAgICAgICAgICAweDYwMDAKKyNkZWZpbmUgV004MzUwX0FVWEFEQ19SRUYxICAgICAgICAgICAgICAgICAgICAgIDB4MTAwMAorI2RlZmluZSBXTTgzNTBfQVVYQURDX0RBVEExX01BU0sgICAgICAgICAgICAgICAgMHgwRkZGCisKKy8qCisgKiBSMTUzICgweDk5KSAtIEFVWDIgUmVhZGJhY2sKKyAqLworI2RlZmluZSBXTTgzNTBfQVVYQURDX1NDQUxFMl9NQVNLICAgICAgICAgICAgICAgMHg2MDAwCisjZGVmaW5lIFdNODM1MF9BVVhBRENfUkVGMiAgICAgICAgICAgICAgICAgICAgICAweDEwMDAKKyNkZWZpbmUgV004MzUwX0FVWEFEQ19EQVRBMl9NQVNLICAgICAgICAgICAgICAgIDB4MEZGRgorCisvKgorICogUjE1NCAoMHg5QSkgLSBBVVgzIFJlYWRiYWNrCisgKi8KKyNkZWZpbmUgV004MzUwX0FVWEFEQ19TQ0FMRTNfTUFTSyAgICAgICAgICAgICAgIDB4NjAwMAorI2RlZmluZSBXTTgzNTBfQVVYQURDX1JFRjMgICAgICAgICAgICAgICAgICAgICAgMHgxMDAwCisjZGVmaW5lIFdNODM1MF9BVVhBRENfREFUQTNfTUFTSyAgICAgICAgICAgICAgICAweDBGRkYKKworLyoKKyAqIFIxNTUgKDB4OUIpIC0gQVVYNCBSZWFkYmFjaworICovCisjZGVmaW5lIFdNODM1MF9BVVhBRENfU0NBTEU0X01BU0sgICAgICAgICAgICAgICAweDYwMDAKKyNkZWZpbmUgV004MzUwX0FVWEFEQ19SRUY0ICAgICAgICAgICAgICAgICAgICAgIDB4MTAwMAorI2RlZmluZSBXTTgzNTBfQVVYQURDX0RBVEE0X01BU0sgICAgICAgICAgICAgICAgMHgwRkZGCisKKy8qCisgKiBSMTU2ICgweDlDKSAtIFVTQiBWb2x0YWdlIFJlYWRiYWNrCisgKi8KKyNkZWZpbmUgV004MzUwX0FVWEFEQ19EQVRBX1VTQl9NQVNLICAgICAgICAgICAgIDB4MEZGRgorCisvKgorICogUjE1NyAoMHg5RCkgLSBMSU5FIFZvbHRhZ2UgUmVhZGJhY2sKKyAqLworI2RlZmluZSBXTTgzNTBfQVVYQURDX0RBVEFfTElORV9NQVNLICAgICAgICAgICAgMHgwRkZGCisKKy8qCisgKiBSMTU4ICgweDlFKSAtIEJBVFQgVm9sdGFnZSBSZWFkYmFjaworICovCisjZGVmaW5lIFdNODM1MF9BVVhBRENfREFUQV9CQVRUX01BU0sgICAgICAgICAgICAweDBGRkYKKworLyoKKyAqIFIxNTkgKDB4OUYpIC0gQ2hpcCBUZW1wIFJlYWRiYWNrCisgKi8KKyNkZWZpbmUgV004MzUwX0FVWEFEQ19EQVRBX0NISVBURU1QX01BU0sgICAgICAgIDB4MEZGRgorCisvKgorICogUjE2MyAoMHhBMykgLSBHZW5lcmljIENvbXBhcmF0b3IgQ29udHJvbAorICovCisjZGVmaW5lIFdNODM1MF9EQ01QNF9FTkEgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDgKKyNkZWZpbmUgV004MzUwX0RDTVAzX0VOQSAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNAorI2RlZmluZSBXTTgzNTBfRENNUDJfRU5BICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAyCisjZGVmaW5lIFdNODM1MF9EQ01QMV9FTkEgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEKKworLyoKKyAqIFIxNjQgKDB4QTQpIC0gR2VuZXJpYyBjb21wYXJhdG9yIDEKKyAqLworI2RlZmluZSBXTTgzNTBfRENNUDFfU1JDU0VMX01BU0sgICAgICAgICAgICAgICAgMHhFMDAwCisjZGVmaW5lIFdNODM1MF9EQ01QMV9HVCAgICAgICAgICAgICAgICAgICAgICAgICAweDEwMDAKKyNkZWZpbmUgV004MzUwX0RDTVAxX1RIUl9NQVNLICAgICAgICAgICAgICAgICAgIDB4MEZGRgorCisvKgorICogUjE2NSAoMHhBNSkgLSBHZW5lcmljIGNvbXBhcmF0b3IgMgorICovCisjZGVmaW5lIFdNODM1MF9EQ01QMl9TUkNTRUxfTUFTSyAgICAgICAgICAgICAgICAweEUwMDAKKyNkZWZpbmUgV004MzUwX0RDTVAyX0dUICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTAwMAorI2RlZmluZSBXTTgzNTBfRENNUDJfVEhSX01BU0sgICAgICAgICAgICAgICAgICAgMHgwRkZGCisKKy8qCisgKiBSMTY2ICgweEE2KSAtIEdlbmVyaWMgY29tcGFyYXRvciAzCisgKi8KKyNkZWZpbmUgV004MzUwX0RDTVAzX1NSQ1NFTF9NQVNLICAgICAgICAgICAgICAgIDB4RTAwMAorI2RlZmluZSBXTTgzNTBfRENNUDNfR1QgICAgICAgICAgICAgICAgICAgICAgICAgMHgxMDAwCisjZGVmaW5lIFdNODM1MF9EQ01QM19USFJfTUFTSyAgICAgICAgICAgICAgICAgICAweDBGRkYKKworLyoKKyAqIFIxNjcgKDB4QTcpIC0gR2VuZXJpYyBjb21wYXJhdG9yIDQKKyAqLworI2RlZmluZSBXTTgzNTBfRENNUDRfU1JDU0VMX01BU0sgICAgICAgICAgICAgICAgMHhFMDAwCisjZGVmaW5lIFdNODM1MF9EQ01QNF9HVCAgICAgICAgICAgICAgICAgICAgICAgICAweDEwMDAKKyNkZWZpbmUgV004MzUwX0RDTVA0X1RIUl9NQVNLICAgICAgICAgICAgICAgICAgIDB4MEZGRgorCisvKgorICogSW50ZXJydXB0cy4KKyAqLworI2RlZmluZSBXTTgzNTBfSVJRX0FVWEFEQ19EQVRBUkRZCQkxNgorI2RlZmluZSBXTTgzNTBfSVJRX0FVWEFEQ19EQ09NUDQJCTE3CisjZGVmaW5lIFdNODM1MF9JUlFfQVVYQURDX0RDT01QMwkJMTgKKyNkZWZpbmUgV004MzUwX0lSUV9BVVhBRENfRENPTVAyCQkxOQorI2RlZmluZSBXTTgzNTBfSVJRX0FVWEFEQ19EQ09NUDEJCTIwCisjZGVmaW5lIFdNODM1MF9JUlFfU1lTX0hZU1RfQ09NUF9GQUlMCQkyMQorI2RlZmluZSBXTTgzNTBfSVJRX1NZU19DSElQX0dUMTE1CQkyMgorI2RlZmluZSBXTTgzNTBfSVJRX1NZU19DSElQX0dUMTQwCQkyMworCisvKgorICogVVNCLzIsIExJTkUgJiBCQVRUID0gKChWUlRDICogMikgLyA0MDk1KSkgKiAxMGU2IHVWCisgKiBXaGVyZSBWUlRDID0gMi43IFYKKyAqLworI2RlZmluZSBXTTgzNTBfQVVYX0NPRUZGCQkJMTMxOQorCisjZGVmaW5lIFdNODM1MF9BVVhBRENfQVVYMQkJCTAKKyNkZWZpbmUgV004MzUwX0FVWEFEQ19BVVgyCQkJMQorI2RlZmluZSBXTTgzNTBfQVVYQURDX0FVWDMJCQkyCisjZGVmaW5lIFdNODM1MF9BVVhBRENfQVVYNAkJCTMKKyNkZWZpbmUgV004MzUwX0FVWEFEQ19VU0IJCQk0CisjZGVmaW5lIFdNODM1MF9BVVhBRENfTElORQkJCTUKKyNkZWZpbmUgV004MzUwX0FVWEFEQ19CQVRUCQkJNgorI2RlZmluZSBXTTgzNTBfQVVYQURDX1RFTVAJCQk3CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tZmQvd204MzUwL2NvcmUuaCBiL2luY2x1ZGUvbGludXgvbWZkL3dtODM1MC9jb3JlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmViZjk3ZgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvbWZkL3dtODM1MC9jb3JlLmgKQEAgLTAsMCArMSw2MzEgQEAKKy8qCisgKiBjb3JlLmggIC0tICBDb3JlIERyaXZlciBmb3IgV29sZnNvbiBXTTgzNTAgUE1JQworICoKKyAqIENvcHlyaWdodCAyMDA3IFdvbGZzb24gTWljcm9lbGVjdHJvbmljcyBQTEMKKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiAgdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgKiAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKi8KKworI2lmbmRlZiBfX0xJTlVYX01GRF9XTTgzNTBfQ09SRV9IXworI2RlZmluZSBfX0xJTlVYX01GRF9XTTgzNTBfQ09SRV9IXworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KKyNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KKworI2luY2x1ZGUgPGxpbnV4L21mZC93bTgzNTAvYXVkaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9tZmQvd204MzUwL2dwaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9tZmQvd204MzUwL3BtaWMuaD4KKyNpbmNsdWRlIDxsaW51eC9tZmQvd204MzUwL3J0Yy5oPgorI2luY2x1ZGUgPGxpbnV4L21mZC93bTgzNTAvc3VwcGx5Lmg+CisjaW5jbHVkZSA8bGludXgvbWZkL3dtODM1MC93ZHQuaD4KKworLyoKKyAqIFJlZ2lzdGVyIHZhbHVlcy4KKyAqLworI2RlZmluZSBXTTgzNTBfUkVTRVRfSUQgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMAorI2RlZmluZSBXTTgzNTBfSUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMQorI2RlZmluZSBXTTgzNTBfU1lTVEVNX0NPTlRST0xfMSAgICAgICAgICAgICAgICAgMHgwMworI2RlZmluZSBXTTgzNTBfU1lTVEVNX0NPTlRST0xfMiAgICAgICAgICAgICAgICAgMHgwNAorI2RlZmluZSBXTTgzNTBfU1lTVEVNX0hJQkVSTkFURSAgICAgICAgICAgICAgICAgMHgwNQorI2RlZmluZSBXTTgzNTBfSU5URVJGQUNFX0NPTlRST0wgICAgICAgICAgICAgICAgMHgwNgorI2RlZmluZSBXTTgzNTBfUE9XRVJfTUdNVF8xICAgICAgICAgICAgICAgICAgICAgMHgwOAorI2RlZmluZSBXTTgzNTBfUE9XRVJfTUdNVF8yICAgICAgICAgICAgICAgICAgICAgMHgwOQorI2RlZmluZSBXTTgzNTBfUE9XRVJfTUdNVF8zICAgICAgICAgICAgICAgICAgICAgMHgwQQorI2RlZmluZSBXTTgzNTBfUE9XRVJfTUdNVF80ICAgICAgICAgICAgICAgICAgICAgMHgwQgorI2RlZmluZSBXTTgzNTBfUE9XRVJfTUdNVF81ICAgICAgICAgICAgICAgICAgICAgMHgwQworI2RlZmluZSBXTTgzNTBfUE9XRVJfTUdNVF82ICAgICAgICAgICAgICAgICAgICAgMHgwRAorI2RlZmluZSBXTTgzNTBfUE9XRVJfTUdNVF83ICAgICAgICAgICAgICAgICAgICAgMHgwRQorCisjZGVmaW5lIFdNODM1MF9TWVNURU1fSU5URVJSVVBUUyAgICAgICAgICAgICAgICAweDE4CisjZGVmaW5lIFdNODM1MF9JTlRfU1RBVFVTXzEgICAgICAgICAgICAgICAgICAgICAweDE5CisjZGVmaW5lIFdNODM1MF9JTlRfU1RBVFVTXzIgICAgICAgICAgICAgICAgICAgICAweDFBCisjZGVmaW5lIFdNODM1MF9QT1dFUl9VUF9JTlRfU1RBVFVTICAgICAgICAgICAgICAweDFCCisjZGVmaW5lIFdNODM1MF9VTkRFUl9WT0xUQUdFX0lOVF9TVEFUVVMgICAgICAgICAweDFDCisjZGVmaW5lIFdNODM1MF9PVkVSX0NVUlJFTlRfSU5UX1NUQVRVUyAgICAgICAgICAweDFECisjZGVmaW5lIFdNODM1MF9HUElPX0lOVF9TVEFUVVMgICAgICAgICAgICAgICAgICAweDFFCisjZGVmaW5lIFdNODM1MF9DT01QQVJBVE9SX0lOVF9TVEFUVVMgICAgICAgICAgICAweDFGCisjZGVmaW5lIFdNODM1MF9TWVNURU1fSU5URVJSVVBUU19NQVNLICAgICAgICAgICAweDIwCisjZGVmaW5lIFdNODM1MF9JTlRfU1RBVFVTXzFfTUFTSyAgICAgICAgICAgICAgICAweDIxCisjZGVmaW5lIFdNODM1MF9JTlRfU1RBVFVTXzJfTUFTSyAgICAgICAgICAgICAgICAweDIyCisjZGVmaW5lIFdNODM1MF9QT1dFUl9VUF9JTlRfU1RBVFVTX01BU0sgICAgICAgICAweDIzCisjZGVmaW5lIFdNODM1MF9VTkRFUl9WT0xUQUdFX0lOVF9TVEFUVVNfTUFTSyAgICAweDI0CisjZGVmaW5lIFdNODM1MF9PVkVSX0NVUlJFTlRfSU5UX1NUQVRVU19NQVNLICAgICAweDI1CisjZGVmaW5lIFdNODM1MF9HUElPX0lOVF9TVEFUVVNfTUFTSyAgICAgICAgICAgICAweDI2CisjZGVmaW5lIFdNODM1MF9DT01QQVJBVE9SX0lOVF9TVEFUVVNfTUFTSyAgICAgICAweDI3CisKKyNkZWZpbmUgV004MzUwX01BWF9SRUdJU1RFUiAgICAgICAgICAgICAgICAgICAgIDB4RkYKKworLyoKKyAqIEZpZWxkIERlZmluaXRpb25zLgorICovCisKKy8qCisgKiBSMCAoMHgwMCkgLSBSZXNldC9JRAorICovCisjZGVmaW5lIFdNODM1MF9TV19SRVNFVF9DSElQX0lEX01BU0sgICAgICAgICAgICAweEZGRkYKKworLyoKKyAqIFIxICgweDAxKSAtIElECisgKi8KKyNkZWZpbmUgV004MzUwX0NISVBfUkVWX01BU0sgICAgICAgICAgICAgICAgICAgIDB4NzAwMAorI2RlZmluZSBXTTgzNTBfQ09ORl9TVFNfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwQzAwCisjZGVmaW5lIFdNODM1MF9DVVNUX0lEX01BU0sgICAgICAgICAgICAgICAgICAgICAweDAwRkYKKworLyoKKyAqIFIzICgweDAzKSAtIFN5c3RlbSBDb250cm9sIDEKKyAqLworI2RlZmluZSBXTTgzNTBfQ0hJUF9PTiAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MDAwCisjZGVmaW5lIFdNODM1MF9QT1dFUkNZQ0xFICAgICAgICAgICAgICAgICAgICAgICAweDIwMDAKKyNkZWZpbmUgV004MzUwX1ZDQ19GQVVMVF9PViAgICAgICAgICAgICAgICAgICAgIDB4MTAwMAorI2RlZmluZSBXTTgzNTBfUkVHX1JTVEJfVElNRV9NQVNLICAgICAgICAgICAgICAgMHgwQzAwCisjZGVmaW5lIFdNODM1MF9CR19TTEVFUCAgICAgICAgICAgICAgICAgICAgICAgICAweDAyMDAKKyNkZWZpbmUgV004MzUwX01FTV9WQUxJRCAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAyMAorI2RlZmluZSBXTTgzNTBfQ0hJUF9TRVRfVVAgICAgICAgICAgICAgICAgICAgICAgMHgwMDEwCisjZGVmaW5lIFdNODM1MF9PTl9ERUJfVCAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDgKKyNkZWZpbmUgV004MzUwX09OX1BPTCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMgorI2RlZmluZSBXTTgzNTBfSVJRX1BPTCAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxCisKKy8qCisgKiBSNCAoMHgwNCkgLSBTeXN0ZW0gQ29udHJvbCAyCisgKi8KKyNkZWZpbmUgV004MzUwX1VTQl9TVVNQRU5EXzhNQSAgICAgICAgICAgICAgICAgIDB4ODAwMAorI2RlZmluZSBXTTgzNTBfVVNCX1NVU1BFTkQgICAgICAgICAgICAgICAgICAgICAgMHg0MDAwCisjZGVmaW5lIFdNODM1MF9VU0JfTVNUUiAgICAgICAgICAgICAgICAgICAgICAgICAweDIwMDAKKyNkZWZpbmUgV004MzUwX1VTQl9NU1RSX1NSQyAgICAgICAgICAgICAgICAgICAgIDB4MTAwMAorI2RlZmluZSBXTTgzNTBfVVNCXzUwME1BICAgICAgICAgICAgICAgICAgICAgICAgMHgwODAwCisjZGVmaW5lIFdNODM1MF9VU0JfTk9MSU0gICAgICAgICAgICAgICAgICAgICAgICAweDA0MDAKKworLyoKKyAqIFI1ICgweDA1KSAtIFN5c3RlbSBIaWJlcm5hdGUKKyAqLworI2RlZmluZSBXTTgzNTBfSElCRVJOQVRFICAgICAgICAgICAgICAgICAgICAgICAgMHg4MDAwCisjZGVmaW5lIFdNODM1MF9XRE9HX0hJQl9NT0RFICAgICAgICAgICAgICAgICAgICAweDAwODAKKyNkZWZpbmUgV004MzUwX1JFR19ISUJfU1RBUlRVUF9TRVEgICAgICAgICAgICAgIDB4MDA0MAorI2RlZmluZSBXTTgzNTBfUkVHX1JFU0VUX0hJQl9NT0RFICAgICAgICAgICAgICAgMHgwMDIwCisjZGVmaW5lIFdNODM1MF9SU1RfSElCX01PREUgICAgICAgICAgICAgICAgICAgICAweDAwMTAKKyNkZWZpbmUgV004MzUwX0lSUV9ISUJfTU9ERSAgICAgICAgICAgICAgICAgICAgIDB4MDAwOAorI2RlZmluZSBXTTgzNTBfTUVNUlNUX0hJQl9NT0RFICAgICAgICAgICAgICAgICAgMHgwMDA0CisjZGVmaW5lIFdNODM1MF9QQ0NPTVBfSElCX01PREUgICAgICAgICAgICAgICAgICAweDAwMDIKKyNkZWZpbmUgV004MzUwX1RFTVBNT05fSElCX01PREUgICAgICAgICAgICAgICAgIDB4MDAwMQorCisvKgorICogUjYgKDB4MDYpIC0gSW50ZXJmYWNlIENvbnRyb2wKKyAqLworI2RlZmluZSBXTTgzNTBfVVNFX0RFVl9QSU5TICAgICAgICAgICAgICAgICAgICAgMHg4MDAwCisjZGVmaW5lIFdNODM1MF9VU0VfREVWX1BJTlNfTUFTSyAgICAgICAgICAgICAgICAweDgwMDAKKyNkZWZpbmUgV004MzUwX1VTRV9ERVZfUElOU19TSElGVCAgICAgICAgICAgICAgICAgICAxNQorI2RlZmluZSBXTTgzNTBfREVWX0FERFJfTUFTSyAgICAgICAgICAgICAgICAgICAgMHg2MDAwCisjZGVmaW5lIFdNODM1MF9ERVZfQUREUl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgMTMKKyNkZWZpbmUgV004MzUwX0NPTkZJR19ET05FICAgICAgICAgICAgICAgICAgICAgIDB4MTAwMAorI2RlZmluZSBXTTgzNTBfQ09ORklHX0RPTkVfTUFTSyAgICAgICAgICAgICAgICAgMHgxMDAwCisjZGVmaW5lIFdNODM1MF9DT05GSUdfRE9ORV9TSElGVCAgICAgICAgICAgICAgICAgICAgMTIKKyNkZWZpbmUgV004MzUwX1JFQ09ORklHX0FUX09OICAgICAgICAgICAgICAgICAgIDB4MDgwMAorI2RlZmluZSBXTTgzNTBfUkVDT05GSUdfQVRfT05fTUFTSyAgICAgICAgICAgICAgMHgwODAwCisjZGVmaW5lIFdNODM1MF9SRUNPTkZJR19BVF9PTl9TSElGVCAgICAgICAgICAgICAgICAgMTEKKyNkZWZpbmUgV004MzUwX0FVVE9JTkMgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDIwMAorI2RlZmluZSBXTTgzNTBfQVVUT0lOQ19NQVNLICAgICAgICAgICAgICAgICAgICAgMHgwMjAwCisjZGVmaW5lIFdNODM1MF9BVVRPSU5DX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgIDkKKyNkZWZpbmUgV004MzUwX0FSQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMAorI2RlZmluZSBXTTgzNTBfQVJBX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwCisjZGVmaW5lIFdNODM1MF9BUkFfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgV004MzUwX1NQSV9DRkcgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwOAorI2RlZmluZSBXTTgzNTBfU1BJX0NGR19NQVNLICAgICAgICAgICAgICAgICAgICAgMHgwMDA4CisjZGVmaW5lIFdNODM1MF9TUElfQ0ZHX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgV004MzUwX1NQSV80V0lSRSAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNAorI2RlZmluZSBXTTgzNTBfU1BJXzRXSVJFX01BU0sgICAgICAgICAgICAgICAgICAgMHgwMDA0CisjZGVmaW5lIFdNODM1MF9TUElfNFdJUkVfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgV004MzUwX1NQSV8zV0lSRSAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMgorI2RlZmluZSBXTTgzNTBfU1BJXzNXSVJFX01BU0sgICAgICAgICAgICAgICAgICAgMHgwMDAyCisjZGVmaW5lIFdNODM1MF9TUElfM1dJUkVfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgIDEKKworLyogQml0IHZhbHVlcyBmb3IgUjA2ICgweDA2KSAqLworI2RlZmluZSBXTTgzNTBfVVNFX0RFVl9QSU5TX1BSSU1BUlkgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIFdNODM1MF9VU0VfREVWX1BJTlNfREVWICAgICAgICAgICAgICAgICAgICAgIDEKKworI2RlZmluZSBXTTgzNTBfREVWX0FERFJfMzQgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIFdNODM1MF9ERVZfQUREUl8zNiAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgV004MzUwX0RFVl9BRERSXzNDICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBXTTgzNTBfREVWX0FERFJfM0UgICAgICAgICAgICAgICAgICAgICAgICAgICAzCisKKyNkZWZpbmUgV004MzUwX0NPTkZJR19ET05FX09GRiAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBXTTgzNTBfQ09ORklHX0RPTkVfRE9ORSAgICAgICAgICAgICAgICAgICAgICAxCisKKyNkZWZpbmUgV004MzUwX1JFQ09ORklHX0FUX09OX09GRiAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBXTTgzNTBfUkVDT05GSUdfQVRfT05fT04gICAgICAgICAgICAgICAgICAgICAxCisKKyNkZWZpbmUgV004MzUwX0FVVE9JTkNfT0ZGICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBXTTgzNTBfQVVUT0lOQ19PTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisKKyNkZWZpbmUgV004MzUwX0FSQV9PRkYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBXTTgzNTBfQVJBX09OICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisKKyNkZWZpbmUgV004MzUwX1NQSV9DRkdfQ01PUyAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBXTTgzNTBfU1BJX0NGR19PRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisKKyNkZWZpbmUgV004MzUwX1NQSV80V0lSRV8zV0lSRSAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBXTTgzNTBfU1BJXzRXSVJFXzRXSVJFICAgICAgICAgICAgICAgICAgICAgICAxCisKKyNkZWZpbmUgV004MzUwX1NQSV8zV0lSRV9JMkMgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBXTTgzNTBfU1BJXzNXSVJFX1NQSSAgICAgICAgICAgICAgICAgICAgICAgICAxCisKKy8qCisgKiBSOCAoMHgwOCkgLSBQb3dlciBtZ210ICgxKQorICovCisjZGVmaW5lIFdNODM1MF9DT0RFQ19JU0VMX01BU0sgICAgICAgICAgICAgICAgICAweEMwMDAKKyNkZWZpbmUgV004MzUwX1ZCVUZFTiAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjAwMAorI2RlZmluZSBXTTgzNTBfT1VUUFVUX0RSQUlOX0VOICAgICAgICAgICAgICAgICAgMHgwNDAwCisjZGVmaW5lIFdNODM1MF9NSUNfREVUX0VOQSAgICAgICAgICAgICAgICAgICAgICAweDAxMDAKKyNkZWZpbmUgV004MzUwX0JJQVNFTiAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAyMAorI2RlZmluZSBXTTgzNTBfTUlDQkVOICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDEwCisjZGVmaW5lIFdNODM1MF9WTUlERU4gICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDQKKyNkZWZpbmUgV004MzUwX1ZNSURfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMworI2RlZmluZSBXTTgzNTBfVk1JRF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8qCisgKiBSOSAoMHgwOSkgLSBQb3dlciBtZ210ICgyKQorICovCisjZGVmaW5lIFdNODM1MF9JTjNSX0VOQSAgICAgICAgICAgICAgICAgICAgICAgICAweDA4MDAKKyNkZWZpbmUgV004MzUwX0lOM0xfRU5BICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDQwMAorI2RlZmluZSBXTTgzNTBfSU5SX0VOQSAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMjAwCisjZGVmaW5lIFdNODM1MF9JTkxfRU5BICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAKKyNkZWZpbmUgV004MzUwX01JWElOUl9FTkEgICAgICAgICAgICAgICAgICAgICAgIDB4MDA4MAorI2RlZmluZSBXTTgzNTBfTUlYSU5MX0VOQSAgICAgICAgICAgICAgICAgICAgICAgMHgwMDQwCisjZGVmaW5lIFdNODM1MF9PVVQ0X0VOQSAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMjAKKyNkZWZpbmUgV004MzUwX09VVDNfRU5BICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAxMAorI2RlZmluZSBXTTgzNTBfTUlYT1VUUl9FTkEgICAgICAgICAgICAgICAgICAgICAgMHgwMDAyCisjZGVmaW5lIFdNODM1MF9NSVhPVVRMX0VOQSAgICAgICAgICAgICAgICAgICAgICAweDAwMDEKKworLyoKKyAqIFIxMCAoMHgwQSkgLSBQb3dlciBtZ210ICgzKQorICovCisjZGVmaW5lIFdNODM1MF9JTjNSX1RPX09VVDJSICAgICAgICAgICAgICAgICAgICAweDAwODAKKyNkZWZpbmUgV004MzUwX09VVDJSX0VOQSAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwOAorI2RlZmluZSBXTTgzNTBfT1VUMkxfRU5BICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA0CisjZGVmaW5lIFdNODM1MF9PVVQxUl9FTkEgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDIKKyNkZWZpbmUgV004MzUwX09VVDFMX0VOQSAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMQorCisvKgorICogUjExICgweDBCKSAtIFBvd2VyIG1nbXQgKDQpCisgKi8KKyNkZWZpbmUgV004MzUwX1NZU0NMS19FTkEgICAgICAgICAgICAgICAgICAgICAgIDB4NDAwMAorI2RlZmluZSBXTTgzNTBfQURDX0hQRl9FTkEgICAgICAgICAgICAgICAgICAgICAgMHgyMDAwCisjZGVmaW5lIFdNODM1MF9GTExfRU5BICAgICAgICAgICAgICAgICAgICAgICAgICAweDA4MDAKKyNkZWZpbmUgV004MzUwX0ZMTF9PU0NfRU5BICAgICAgICAgICAgICAgICAgICAgIDB4MDQwMAorI2RlZmluZSBXTTgzNTBfVE9DTEtfRU5BICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwCisjZGVmaW5lIFdNODM1MF9EQUNSX0VOQSAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMjAKKyNkZWZpbmUgV004MzUwX0RBQ0xfRU5BICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAxMAorI2RlZmluZSBXTTgzNTBfQURDUl9FTkEgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA4CisjZGVmaW5lIFdNODM1MF9BRENMX0VOQSAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDQKKworLyoKKyAqIFIxMiAoMHgwQykgLSBQb3dlciBtZ210ICg1KQorICovCisjZGVmaW5lIFdNODM1MF9DT0RFQ19FTkEgICAgICAgICAgICAgICAgICAgICAgICAweDEwMDAKKyNkZWZpbmUgV004MzUwX1JUQ19USUNLX0VOQSAgICAgICAgICAgICAgICAgICAgIDB4MDgwMAorI2RlZmluZSBXTTgzNTBfT1NDMzJLX0VOQSAgICAgICAgICAgICAgICAgICAgICAgMHgwNDAwCisjZGVmaW5lIFdNODM1MF9DSEdfRU5BICAgICAgICAgICAgICAgICAgICAgICAgICAweDAyMDAKKyNkZWZpbmUgV004MzUwX0FDQ19ERVRfRU5BICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMAorI2RlZmluZSBXTTgzNTBfQVVYQURDX0VOQSAgICAgICAgICAgICAgICAgICAgICAgMHgwMDgwCisjZGVmaW5lIFdNODM1MF9EQ01QNF9FTkEgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDgKKyNkZWZpbmUgV004MzUwX0RDTVAzX0VOQSAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNAorI2RlZmluZSBXTTgzNTBfRENNUDJfRU5BICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAyCisjZGVmaW5lIFdNODM1MF9EQ01QMV9FTkEgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEKKworLyoKKyAqIFIxMyAoMHgwRCkgLSBQb3dlciBtZ210ICg2KQorICovCisjZGVmaW5lIFdNODM1MF9MU19FTkEgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgwMDAKKyNkZWZpbmUgV004MzUwX0xETzRfRU5BICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDgwMAorI2RlZmluZSBXTTgzNTBfTERPM19FTkEgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNDAwCisjZGVmaW5lIFdNODM1MF9MRE8yX0VOQSAgICAgICAgICAgICAgICAgICAgICAgICAweDAyMDAKKyNkZWZpbmUgV004MzUwX0xETzFfRU5BICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMAorI2RlZmluZSBXTTgzNTBfREM2X0VOQSAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDIwCisjZGVmaW5lIFdNODM1MF9EQzVfRU5BICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMTAKKyNkZWZpbmUgV004MzUwX0RDNF9FTkEgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwOAorI2RlZmluZSBXTTgzNTBfREMzX0VOQSAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA0CisjZGVmaW5lIFdNODM1MF9EQzJfRU5BICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDIKKyNkZWZpbmUgV004MzUwX0RDMV9FTkEgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMQorCisvKgorICogUjE0ICgweDBFKSAtIFBvd2VyIG1nbXQgKDcpCisgKi8KKyNkZWZpbmUgV004MzUwX0NTMl9FTkEgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMgorI2RlZmluZSBXTTgzNTBfQ1MxX0VOQSAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxCisKKy8qCisgKiBSMjQgKDB4MTgpIC0gU3lzdGVtIEludGVycnVwdHMKKyAqLworI2RlZmluZSBXTTgzNTBfT0NfSU5UICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyMDAwCisjZGVmaW5lIFdNODM1MF9VVl9JTlQgICAgICAgICAgICAgICAgICAgICAgICAgICAweDEwMDAKKyNkZWZpbmUgV004MzUwX1BVVE9fSU5UICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDgwMAorI2RlZmluZSBXTTgzNTBfQ1NfSU5UICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMjAwCisjZGVmaW5lIFdNODM1MF9FWFRfSU5UICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAKKyNkZWZpbmUgV004MzUwX0NPREVDX0lOVCAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA4MAorI2RlZmluZSBXTTgzNTBfR1BfSU5UICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDQwCisjZGVmaW5lIFdNODM1MF9BVVhBRENfSU5UICAgICAgICAgICAgICAgICAgICAgICAweDAwMjAKKyNkZWZpbmUgV004MzUwX1JUQ19JTlQgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAxMAorI2RlZmluZSBXTTgzNTBfU1lTX0lOVCAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA4CisjZGVmaW5lIFdNODM1MF9DSEdfSU5UICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDQKKyNkZWZpbmUgV004MzUwX1VTQl9JTlQgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMgorI2RlZmluZSBXTTgzNTBfV0tVUF9JTlQgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxCisKKy8qCisgKiBSMjUgKDB4MTkpIC0gSW50ZXJydXB0IFN0YXR1cyAxCisgKi8KKyNkZWZpbmUgV004MzUwX0NIR19CQVRfSE9UX0VJTlQgICAgICAgICAgICAgICAgIDB4ODAwMAorI2RlZmluZSBXTTgzNTBfQ0hHX0JBVF9DT0xEX0VJTlQgICAgICAgICAgICAgICAgMHg0MDAwCisjZGVmaW5lIFdNODM1MF9DSEdfQkFUX0ZBSUxfRUlOVCAgICAgICAgICAgICAgICAweDIwMDAKKyNkZWZpbmUgV004MzUwX0NIR19UT19FSU5UICAgICAgICAgICAgICAgICAgICAgIDB4MTAwMAorI2RlZmluZSBXTTgzNTBfQ0hHX0VORF9FSU5UICAgICAgICAgICAgICAgICAgICAgMHgwODAwCisjZGVmaW5lIFdNODM1MF9DSEdfU1RBUlRfRUlOVCAgICAgICAgICAgICAgICAgICAweDA0MDAKKyNkZWZpbmUgV004MzUwX0NIR19GQVNUX1JEWV9FSU5UICAgICAgICAgICAgICAgIDB4MDIwMAorI2RlZmluZSBXTTgzNTBfUlRDX1BFUl9FSU5UICAgICAgICAgICAgICAgICAgICAgMHgwMDgwCisjZGVmaW5lIFdNODM1MF9SVENfU0VDX0VJTlQgICAgICAgICAgICAgICAgICAgICAweDAwNDAKKyNkZWZpbmUgV004MzUwX1JUQ19BTE1fRUlOVCAgICAgICAgICAgICAgICAgICAgIDB4MDAyMAorI2RlZmluZSBXTTgzNTBfQ0hHX1ZCQVRUX0xUXzNQOV9FSU5UICAgICAgICAgICAgMHgwMDA0CisjZGVmaW5lIFdNODM1MF9DSEdfVkJBVFRfTFRfM1AxX0VJTlQgICAgICAgICAgICAweDAwMDIKKyNkZWZpbmUgV004MzUwX0NIR19WQkFUVF9MVF8yUDg1X0VJTlQgICAgICAgICAgIDB4MDAwMQorCisvKgorICogUjI2ICgweDFBKSAtIEludGVycnVwdCBTdGF0dXMgMgorICovCisjZGVmaW5lIFdNODM1MF9DUzFfRUlOVCAgICAgICAgICAgICAgICAgICAgICAgICAweDIwMDAKKyNkZWZpbmUgV004MzUwX0NTMl9FSU5UICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTAwMAorI2RlZmluZSBXTTgzNTBfVVNCX0xJTUlUX0VJTlQgICAgICAgICAgICAgICAgICAgMHgwNDAwCisjZGVmaW5lIFdNODM1MF9BVVhBRENfREFUQVJEWV9FSU5UICAgICAgICAgICAgICAweDAxMDAKKyNkZWZpbmUgV004MzUwX0FVWEFEQ19EQ09NUDRfRUlOVCAgICAgICAgICAgICAgIDB4MDA4MAorI2RlZmluZSBXTTgzNTBfQVVYQURDX0RDT01QM19FSU5UICAgICAgICAgICAgICAgMHgwMDQwCisjZGVmaW5lIFdNODM1MF9BVVhBRENfRENPTVAyX0VJTlQgICAgICAgICAgICAgICAweDAwMjAKKyNkZWZpbmUgV004MzUwX0FVWEFEQ19EQ09NUDFfRUlOVCAgICAgICAgICAgICAgIDB4MDAxMAorI2RlZmluZSBXTTgzNTBfU1lTX0hZU1RfQ09NUF9GQUlMX0VJTlQgICAgICAgICAgMHgwMDA4CisjZGVmaW5lIFdNODM1MF9TWVNfQ0hJUF9HVDExNV9FSU5UICAgICAgICAgICAgICAweDAwMDQKKyNkZWZpbmUgV004MzUwX1NZU19DSElQX0dUMTQwX0VJTlQgICAgICAgICAgICAgIDB4MDAwMgorI2RlZmluZSBXTTgzNTBfU1lTX1dET0dfVE9fRUlOVCAgICAgICAgICAgICAgICAgMHgwMDAxCisKKy8qCisgKiBSMjcgKDB4MUIpIC0gUG93ZXIgVXAgSW50ZXJydXB0IFN0YXR1cworICovCisjZGVmaW5lIFdNODM1MF9QVVRPX0xETzRfRUlOVCAgICAgICAgICAgICAgICAgICAweDA4MDAKKyNkZWZpbmUgV004MzUwX1BVVE9fTERPM19FSU5UICAgICAgICAgICAgICAgICAgIDB4MDQwMAorI2RlZmluZSBXTTgzNTBfUFVUT19MRE8yX0VJTlQgICAgICAgICAgICAgICAgICAgMHgwMjAwCisjZGVmaW5lIFdNODM1MF9QVVRPX0xETzFfRUlOVCAgICAgICAgICAgICAgICAgICAweDAxMDAKKyNkZWZpbmUgV004MzUwX1BVVE9fREM2X0VJTlQgICAgICAgICAgICAgICAgICAgIDB4MDAyMAorI2RlZmluZSBXTTgzNTBfUFVUT19EQzVfRUlOVCAgICAgICAgICAgICAgICAgICAgMHgwMDEwCisjZGVmaW5lIFdNODM1MF9QVVRPX0RDNF9FSU5UICAgICAgICAgICAgICAgICAgICAweDAwMDgKKyNkZWZpbmUgV004MzUwX1BVVE9fREMzX0VJTlQgICAgICAgICAgICAgICAgICAgIDB4MDAwNAorI2RlZmluZSBXTTgzNTBfUFVUT19EQzJfRUlOVCAgICAgICAgICAgICAgICAgICAgMHgwMDAyCisjZGVmaW5lIFdNODM1MF9QVVRPX0RDMV9FSU5UICAgICAgICAgICAgICAgICAgICAweDAwMDEKKworLyoKKyAqIFIyOCAoMHgxQykgLSBVbmRlciBWb2x0YWdlIEludGVycnVwdCBzdGF0dXMKKyAqLworI2RlZmluZSBXTTgzNTBfVVZfTERPNF9FSU5UICAgICAgICAgICAgICAgICAgICAgMHgwODAwCisjZGVmaW5lIFdNODM1MF9VVl9MRE8zX0VJTlQgICAgICAgICAgICAgICAgICAgICAweDA0MDAKKyNkZWZpbmUgV004MzUwX1VWX0xETzJfRUlOVCAgICAgICAgICAgICAgICAgICAgIDB4MDIwMAorI2RlZmluZSBXTTgzNTBfVVZfTERPMV9FSU5UICAgICAgICAgICAgICAgICAgICAgMHgwMTAwCisjZGVmaW5lIFdNODM1MF9VVl9EQzZfRUlOVCAgICAgICAgICAgICAgICAgICAgICAweDAwMjAKKyNkZWZpbmUgV004MzUwX1VWX0RDNV9FSU5UICAgICAgICAgICAgICAgICAgICAgIDB4MDAxMAorI2RlZmluZSBXTTgzNTBfVVZfREM0X0VJTlQgICAgICAgICAgICAgICAgICAgICAgMHgwMDA4CisjZGVmaW5lIFdNODM1MF9VVl9EQzNfRUlOVCAgICAgICAgICAgICAgICAgICAgICAweDAwMDQKKyNkZWZpbmUgV004MzUwX1VWX0RDMl9FSU5UICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMgorI2RlZmluZSBXTTgzNTBfVVZfREMxX0VJTlQgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxCisKKy8qCisgKiBSMjkgKDB4MUQpIC0gT3ZlciBDdXJyZW50IEludGVycnVwdCBzdGF0dXMKKyAqLworI2RlZmluZSBXTTgzNTBfT0NfTFNfRUlOVCAgICAgICAgICAgICAgICAgICAgICAgMHg4MDAwCisKKy8qCisgKiBSMzAgKDB4MUUpIC0gR1BJTyBJbnRlcnJ1cHQgU3RhdHVzCisgKi8KKyNkZWZpbmUgV004MzUwX0dQMTJfRUlOVCAgICAgICAgICAgICAgICAgICAgICAgIDB4MTAwMAorI2RlZmluZSBXTTgzNTBfR1AxMV9FSU5UICAgICAgICAgICAgICAgICAgICAgICAgMHgwODAwCisjZGVmaW5lIFdNODM1MF9HUDEwX0VJTlQgICAgICAgICAgICAgICAgICAgICAgICAweDA0MDAKKyNkZWZpbmUgV004MzUwX0dQOV9FSU5UICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDIwMAorI2RlZmluZSBXTTgzNTBfR1A4X0VJTlQgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwCisjZGVmaW5lIFdNODM1MF9HUDdfRUlOVCAgICAgICAgICAgICAgICAgICAgICAgICAweDAwODAKKyNkZWZpbmUgV004MzUwX0dQNl9FSU5UICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA0MAorI2RlZmluZSBXTTgzNTBfR1A1X0VJTlQgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDIwCisjZGVmaW5lIFdNODM1MF9HUDRfRUlOVCAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMTAKKyNkZWZpbmUgV004MzUwX0dQM19FSU5UICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwOAorI2RlZmluZSBXTTgzNTBfR1AyX0VJTlQgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA0CisjZGVmaW5lIFdNODM1MF9HUDFfRUlOVCAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDIKKyNkZWZpbmUgV004MzUwX0dQMF9FSU5UICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMQorCisvKgorICogUjMxICgweDFGKSAtIENvbXBhcmF0b3IgSW50ZXJydXB0IFN0YXR1cworICovCisjZGVmaW5lIFdNODM1MF9FWFRfVVNCX0ZCX0VJTlQgICAgICAgICAgICAgICAgICAweDgwMDAKKyNkZWZpbmUgV004MzUwX0VYVF9XQUxMX0ZCX0VJTlQgICAgICAgICAgICAgICAgIDB4NDAwMAorI2RlZmluZSBXTTgzNTBfRVhUX0JBVF9GQl9FSU5UICAgICAgICAgICAgICAgICAgMHgyMDAwCisjZGVmaW5lIFdNODM1MF9DT0RFQ19KQ0tfREVUX0xfRUlOVCAgICAgICAgICAgICAweDA4MDAKKyNkZWZpbmUgV004MzUwX0NPREVDX0pDS19ERVRfUl9FSU5UICAgICAgICAgICAgIDB4MDQwMAorI2RlZmluZSBXTTgzNTBfQ09ERUNfTUlDU0NEX0VJTlQgICAgICAgICAgICAgICAgMHgwMjAwCisjZGVmaW5lIFdNODM1MF9DT0RFQ19NSUNEX0VJTlQgICAgICAgICAgICAgICAgICAweDAxMDAKKyNkZWZpbmUgV004MzUwX1dLVVBfT0ZGX1NUQVRFX0VJTlQgICAgICAgICAgICAgIDB4MDA0MAorI2RlZmluZSBXTTgzNTBfV0tVUF9ISUJfU1RBVEVfRUlOVCAgICAgICAgICAgICAgMHgwMDIwCisjZGVmaW5lIFdNODM1MF9XS1VQX0NPTlZfRkFVTFRfRUlOVCAgICAgICAgICAgICAweDAwMTAKKyNkZWZpbmUgV004MzUwX1dLVVBfV0RPR19SU1RfRUlOVCAgICAgICAgICAgICAgIDB4MDAwOAorI2RlZmluZSBXTTgzNTBfV0tVUF9HUF9QV1JfT05fRUlOVCAgICAgICAgICAgICAgMHgwMDA0CisjZGVmaW5lIFdNODM1MF9XS1VQX09OS0VZX0VJTlQgICAgICAgICAgICAgICAgICAweDAwMDIKKyNkZWZpbmUgV004MzUwX1dLVVBfR1BfV0FLRVVQX0VJTlQgICAgICAgICAgICAgIDB4MDAwMQorCisvKgorICogUjMyICgweDIwKSAtIFN5c3RlbSBJbnRlcnJ1cHRzIE1hc2sKKyAqLworI2RlZmluZSBXTTgzNTBfSU1fT0NfSU5UICAgICAgICAgICAgICAgICAgICAgICAgMHgyMDAwCisjZGVmaW5lIFdNODM1MF9JTV9VVl9JTlQgICAgICAgICAgICAgICAgICAgICAgICAweDEwMDAKKyNkZWZpbmUgV004MzUwX0lNX1BVVE9fSU5UICAgICAgICAgICAgICAgICAgICAgIDB4MDgwMAorI2RlZmluZSBXTTgzNTBfSU1fU1BBUkVfSU5UICAgICAgICAgICAgICAgICAgICAgMHgwNDAwCisjZGVmaW5lIFdNODM1MF9JTV9DU19JTlQgICAgICAgICAgICAgICAgICAgICAgICAweDAyMDAKKyNkZWZpbmUgV004MzUwX0lNX0VYVF9JTlQgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMAorI2RlZmluZSBXTTgzNTBfSU1fQ09ERUNfSU5UICAgICAgICAgICAgICAgICAgICAgMHgwMDgwCisjZGVmaW5lIFdNODM1MF9JTV9HUF9JTlQgICAgICAgICAgICAgICAgICAgICAgICAweDAwNDAKKyNkZWZpbmUgV004MzUwX0lNX0FVWEFEQ19JTlQgICAgICAgICAgICAgICAgICAgIDB4MDAyMAorI2RlZmluZSBXTTgzNTBfSU1fUlRDX0lOVCAgICAgICAgICAgICAgICAgICAgICAgMHgwMDEwCisjZGVmaW5lIFdNODM1MF9JTV9TWVNfSU5UICAgICAgICAgICAgICAgICAgICAgICAweDAwMDgKKyNkZWZpbmUgV004MzUwX0lNX0NIR19JTlQgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNAorI2RlZmluZSBXTTgzNTBfSU1fVVNCX0lOVCAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAyCisjZGVmaW5lIFdNODM1MF9JTV9XS1VQX0lOVCAgICAgICAgICAgICAgICAgICAgICAweDAwMDEKKworLyoKKyAqIFIzMyAoMHgyMSkgLSBJbnRlcnJ1cHQgU3RhdHVzIDEgTWFzaworICovCisjZGVmaW5lIFdNODM1MF9JTV9DSEdfQkFUX0hPVF9FSU5UICAgICAgICAgICAgICAweDgwMDAKKyNkZWZpbmUgV004MzUwX0lNX0NIR19CQVRfQ09MRF9FSU5UICAgICAgICAgICAgIDB4NDAwMAorI2RlZmluZSBXTTgzNTBfSU1fQ0hHX0JBVF9GQUlMX0VJTlQgICAgICAgICAgICAgMHgyMDAwCisjZGVmaW5lIFdNODM1MF9JTV9DSEdfVE9fRUlOVCAgICAgICAgICAgICAgICAgICAweDEwMDAKKyNkZWZpbmUgV004MzUwX0lNX0NIR19FTkRfRUlOVCAgICAgICAgICAgICAgICAgIDB4MDgwMAorI2RlZmluZSBXTTgzNTBfSU1fQ0hHX1NUQVJUX0VJTlQgICAgICAgICAgICAgICAgMHgwNDAwCisjZGVmaW5lIFdNODM1MF9JTV9DSEdfRkFTVF9SRFlfRUlOVCAgICAgICAgICAgICAweDAyMDAKKyNkZWZpbmUgV004MzUwX0lNX1JUQ19QRVJfRUlOVCAgICAgICAgICAgICAgICAgIDB4MDA4MAorI2RlZmluZSBXTTgzNTBfSU1fUlRDX1NFQ19FSU5UICAgICAgICAgICAgICAgICAgMHgwMDQwCisjZGVmaW5lIFdNODM1MF9JTV9SVENfQUxNX0VJTlQgICAgICAgICAgICAgICAgICAweDAwMjAKKyNkZWZpbmUgV004MzUwX0lNX0NIR19WQkFUVF9MVF8zUDlfRUlOVCAgICAgICAgIDB4MDAwNAorI2RlZmluZSBXTTgzNTBfSU1fQ0hHX1ZCQVRUX0xUXzNQMV9FSU5UICAgICAgICAgMHgwMDAyCisjZGVmaW5lIFdNODM1MF9JTV9DSEdfVkJBVFRfTFRfMlA4NV9FSU5UICAgICAgICAweDAwMDEKKworLyoKKyAqIFIzNCAoMHgyMikgLSBJbnRlcnJ1cHQgU3RhdHVzIDIgTWFzaworICovCisjZGVmaW5lIFdNODM1MF9JTV9TUEFSRTJfRUlOVCAgICAgICAgICAgICAgICAgICAweDgwMDAKKyNkZWZpbmUgV004MzUwX0lNX1NQQVJFMV9FSU5UICAgICAgICAgICAgICAgICAgIDB4NDAwMAorI2RlZmluZSBXTTgzNTBfSU1fQ1MxX0VJTlQgICAgICAgICAgICAgICAgICAgICAgMHgyMDAwCisjZGVmaW5lIFdNODM1MF9JTV9DUzJfRUlOVCAgICAgICAgICAgICAgICAgICAgICAweDEwMDAKKyNkZWZpbmUgV004MzUwX0lNX1VTQl9MSU1JVF9FSU5UICAgICAgICAgICAgICAgIDB4MDQwMAorI2RlZmluZSBXTTgzNTBfSU1fQVVYQURDX0RBVEFSRFlfRUlOVCAgICAgICAgICAgMHgwMTAwCisjZGVmaW5lIFdNODM1MF9JTV9BVVhBRENfRENPTVA0X0VJTlQgICAgICAgICAgICAweDAwODAKKyNkZWZpbmUgV004MzUwX0lNX0FVWEFEQ19EQ09NUDNfRUlOVCAgICAgICAgICAgIDB4MDA0MAorI2RlZmluZSBXTTgzNTBfSU1fQVVYQURDX0RDT01QMl9FSU5UICAgICAgICAgICAgMHgwMDIwCisjZGVmaW5lIFdNODM1MF9JTV9BVVhBRENfRENPTVAxX0VJTlQgICAgICAgICAgICAweDAwMTAKKyNkZWZpbmUgV004MzUwX0lNX1NZU19IWVNUX0NPTVBfRkFJTF9FSU5UICAgICAgIDB4MDAwOAorI2RlZmluZSBXTTgzNTBfSU1fU1lTX0NISVBfR1QxMTVfRUlOVCAgICAgICAgICAgMHgwMDA0CisjZGVmaW5lIFdNODM1MF9JTV9TWVNfQ0hJUF9HVDE0MF9FSU5UICAgICAgICAgICAweDAwMDIKKyNkZWZpbmUgV004MzUwX0lNX1NZU19XRE9HX1RPX0VJTlQgICAgICAgICAgICAgIDB4MDAwMQorCisvKgorICogUjM1ICgweDIzKSAtIFBvd2VyIFVwIEludGVycnVwdCBTdGF0dXMgTWFzaworICovCisjZGVmaW5lIFdNODM1MF9JTV9QVVRPX0xETzRfRUlOVCAgICAgICAgICAgICAgICAweDA4MDAKKyNkZWZpbmUgV004MzUwX0lNX1BVVE9fTERPM19FSU5UICAgICAgICAgICAgICAgIDB4MDQwMAorI2RlZmluZSBXTTgzNTBfSU1fUFVUT19MRE8yX0VJTlQgICAgICAgICAgICAgICAgMHgwMjAwCisjZGVmaW5lIFdNODM1MF9JTV9QVVRPX0xETzFfRUlOVCAgICAgICAgICAgICAgICAweDAxMDAKKyNkZWZpbmUgV004MzUwX0lNX1BVVE9fREM2X0VJTlQgICAgICAgICAgICAgICAgIDB4MDAyMAorI2RlZmluZSBXTTgzNTBfSU1fUFVUT19EQzVfRUlOVCAgICAgICAgICAgICAgICAgMHgwMDEwCisjZGVmaW5lIFdNODM1MF9JTV9QVVRPX0RDNF9FSU5UICAgICAgICAgICAgICAgICAweDAwMDgKKyNkZWZpbmUgV004MzUwX0lNX1BVVE9fREMzX0VJTlQgICAgICAgICAgICAgICAgIDB4MDAwNAorI2RlZmluZSBXTTgzNTBfSU1fUFVUT19EQzJfRUlOVCAgICAgICAgICAgICAgICAgMHgwMDAyCisjZGVmaW5lIFdNODM1MF9JTV9QVVRPX0RDMV9FSU5UICAgICAgICAgICAgICAgICAweDAwMDEKKworLyoKKyAqIFIzNiAoMHgyNCkgLSBVbmRlciBWb2x0YWdlIEludGVycnVwdCBzdGF0dXMgTWFzaworICovCisjZGVmaW5lIFdNODM1MF9JTV9VVl9MRE80X0VJTlQgICAgICAgICAgICAgICAgICAweDA4MDAKKyNkZWZpbmUgV004MzUwX0lNX1VWX0xETzNfRUlOVCAgICAgICAgICAgICAgICAgIDB4MDQwMAorI2RlZmluZSBXTTgzNTBfSU1fVVZfTERPMl9FSU5UICAgICAgICAgICAgICAgICAgMHgwMjAwCisjZGVmaW5lIFdNODM1MF9JTV9VVl9MRE8xX0VJTlQgICAgICAgICAgICAgICAgICAweDAxMDAKKyNkZWZpbmUgV004MzUwX0lNX1VWX0RDNl9FSU5UICAgICAgICAgICAgICAgICAgIDB4MDAyMAorI2RlZmluZSBXTTgzNTBfSU1fVVZfREM1X0VJTlQgICAgICAgICAgICAgICAgICAgMHgwMDEwCisjZGVmaW5lIFdNODM1MF9JTV9VVl9EQzRfRUlOVCAgICAgICAgICAgICAgICAgICAweDAwMDgKKyNkZWZpbmUgV004MzUwX0lNX1VWX0RDM19FSU5UICAgICAgICAgICAgICAgICAgIDB4MDAwNAorI2RlZmluZSBXTTgzNTBfSU1fVVZfREMyX0VJTlQgICAgICAgICAgICAgICAgICAgMHgwMDAyCisjZGVmaW5lIFdNODM1MF9JTV9VVl9EQzFfRUlOVCAgICAgICAgICAgICAgICAgICAweDAwMDEKKworLyoKKyAqIFIzNyAoMHgyNSkgLSBPdmVyIEN1cnJlbnQgSW50ZXJydXB0IHN0YXR1cyBNYXNrCisgKi8KKyNkZWZpbmUgV004MzUwX0lNX09DX0xTX0VJTlQgICAgICAgICAgICAgICAgICAgIDB4ODAwMAorCisvKgorICogUjM4ICgweDI2KSAtIEdQSU8gSW50ZXJydXB0IFN0YXR1cyBNYXNrCisgKi8KKyNkZWZpbmUgV004MzUwX0lNX0dQMTJfRUlOVCAgICAgICAgICAgICAgICAgICAgIDB4MTAwMAorI2RlZmluZSBXTTgzNTBfSU1fR1AxMV9FSU5UICAgICAgICAgICAgICAgICAgICAgMHgwODAwCisjZGVmaW5lIFdNODM1MF9JTV9HUDEwX0VJTlQgICAgICAgICAgICAgICAgICAgICAweDA0MDAKKyNkZWZpbmUgV004MzUwX0lNX0dQOV9FSU5UICAgICAgICAgICAgICAgICAgICAgIDB4MDIwMAorI2RlZmluZSBXTTgzNTBfSU1fR1A4X0VJTlQgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwCisjZGVmaW5lIFdNODM1MF9JTV9HUDdfRUlOVCAgICAgICAgICAgICAgICAgICAgICAweDAwODAKKyNkZWZpbmUgV004MzUwX0lNX0dQNl9FSU5UICAgICAgICAgICAgICAgICAgICAgIDB4MDA0MAorI2RlZmluZSBXTTgzNTBfSU1fR1A1X0VJTlQgICAgICAgICAgICAgICAgICAgICAgMHgwMDIwCisjZGVmaW5lIFdNODM1MF9JTV9HUDRfRUlOVCAgICAgICAgICAgICAgICAgICAgICAweDAwMTAKKyNkZWZpbmUgV004MzUwX0lNX0dQM19FSU5UICAgICAgICAgICAgICAgICAgICAgIDB4MDAwOAorI2RlZmluZSBXTTgzNTBfSU1fR1AyX0VJTlQgICAgICAgICAgICAgICAgICAgICAgMHgwMDA0CisjZGVmaW5lIFdNODM1MF9JTV9HUDFfRUlOVCAgICAgICAgICAgICAgICAgICAgICAweDAwMDIKKyNkZWZpbmUgV004MzUwX0lNX0dQMF9FSU5UICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMQorCisvKgorICogUjM5ICgweDI3KSAtIENvbXBhcmF0b3IgSW50ZXJydXB0IFN0YXR1cyBNYXNrCisgKi8KKyNkZWZpbmUgV004MzUwX0lNX0VYVF9VU0JfRkJfRUlOVCAgICAgICAgICAgICAgIDB4ODAwMAorI2RlZmluZSBXTTgzNTBfSU1fRVhUX1dBTExfRkJfRUlOVCAgICAgICAgICAgICAgMHg0MDAwCisjZGVmaW5lIFdNODM1MF9JTV9FWFRfQkFUX0ZCX0VJTlQgICAgICAgICAgICAgICAweDIwMDAKKyNkZWZpbmUgV004MzUwX0lNX0NPREVDX0pDS19ERVRfTF9FSU5UICAgICAgICAgIDB4MDgwMAorI2RlZmluZSBXTTgzNTBfSU1fQ09ERUNfSkNLX0RFVF9SX0VJTlQgICAgICAgICAgMHgwNDAwCisjZGVmaW5lIFdNODM1MF9JTV9DT0RFQ19NSUNTQ0RfRUlOVCAgICAgICAgICAgICAweDAyMDAKKyNkZWZpbmUgV004MzUwX0lNX0NPREVDX01JQ0RfRUlOVCAgICAgICAgICAgICAgIDB4MDEwMAorI2RlZmluZSBXTTgzNTBfSU1fV0tVUF9PRkZfU1RBVEVfRUlOVCAgICAgICAgICAgMHgwMDQwCisjZGVmaW5lIFdNODM1MF9JTV9XS1VQX0hJQl9TVEFURV9FSU5UICAgICAgICAgICAweDAwMjAKKyNkZWZpbmUgV004MzUwX0lNX1dLVVBfQ09OVl9GQVVMVF9FSU5UICAgICAgICAgIDB4MDAxMAorI2RlZmluZSBXTTgzNTBfSU1fV0tVUF9XRE9HX1JTVF9FSU5UICAgICAgICAgICAgMHgwMDA4CisjZGVmaW5lIFdNODM1MF9JTV9XS1VQX0dQX1BXUl9PTl9FSU5UICAgICAgICAgICAweDAwMDQKKyNkZWZpbmUgV004MzUwX0lNX1dLVVBfT05LRVlfRUlOVCAgICAgICAgICAgICAgIDB4MDAwMgorI2RlZmluZSBXTTgzNTBfSU1fV0tVUF9HUF9XQUtFVVBfRUlOVCAgICAgICAgICAgMHgwMDAxCisKKy8qCisgKiBSMjIwICgweERDKSAtIFJBTSBCSVNUIDEKKyAqLworI2RlZmluZSBXTTgzNTBfUkVBRF9TVEFUVVMgICAgICAgICAgICAgICAgICAgICAgMHgwODAwCisjZGVmaW5lIFdNODM1MF9UU1RSQU1fQ0xLICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAKKyNkZWZpbmUgV004MzUwX1RTVFJBTV9DTEtfRU5BICAgICAgICAgICAgICAgICAgIDB4MDA4MAorI2RlZmluZSBXTTgzNTBfU1RBUlRTRVEgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDQwCisjZGVmaW5lIFdNODM1MF9SRUFEX1NSQyAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMjAKKyNkZWZpbmUgV004MzUwX0NPVU5UX0RJUiAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAxMAorI2RlZmluZSBXTTgzNTBfVFNUUkFNX01PREVfTUFTSyAgICAgICAgICAgICAgICAgMHgwMDBFCisjZGVmaW5lIFdNODM1MF9UU1RSQU1fRU5BICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEKKworLyoKKyAqIFIyMjUgKDB4RTEpIC0gRENEQy9MRE8gc3RhdHVzCisgKi8KKyNkZWZpbmUgV004MzUwX0xTX1NUUyAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODAwMAorI2RlZmluZSBXTTgzNTBfTERPNF9TVFMgICAgICAgICAgICAgICAgICAgICAgICAgMHgwODAwCisjZGVmaW5lIFdNODM1MF9MRE8zX1NUUyAgICAgICAgICAgICAgICAgICAgICAgICAweDA0MDAKKyNkZWZpbmUgV004MzUwX0xETzJfU1RTICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDIwMAorI2RlZmluZSBXTTgzNTBfTERPMV9TVFMgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwCisjZGVmaW5lIFdNODM1MF9EQzZfU1RTICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMjAKKyNkZWZpbmUgV004MzUwX0RDNV9TVFMgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAxMAorI2RlZmluZSBXTTgzNTBfREM0X1NUUyAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA4CisjZGVmaW5lIFdNODM1MF9EQzNfU1RTICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDQKKyNkZWZpbmUgV004MzUwX0RDMl9TVFMgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMgorI2RlZmluZSBXTTgzNTBfREMxX1NUUyAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxCisKKy8qIFdNODM1MCB3YWtlIHVwIGNvbmRpdGlvbnMgKi8KKyNkZWZpbmUgV004MzUwX0lSUV9XS1VQX09GRl9TVEFURQkJNDMKKyNkZWZpbmUgV004MzUwX0lSUV9XS1VQX0hJQl9TVEFURQkJNDQKKyNkZWZpbmUgV004MzUwX0lSUV9XS1VQX0NPTlZfRkFVTFQJCTQ1CisjZGVmaW5lIFdNODM1MF9JUlFfV0tVUF9XRE9HX1JTVAkJNDYKKyNkZWZpbmUgV004MzUwX0lSUV9XS1VQX0dQX1BXUl9PTgkJNDcKKyNkZWZpbmUgV004MzUwX0lSUV9XS1VQX09OS0VZCQkJNDgKKyNkZWZpbmUgV004MzUwX0lSUV9XS1VQX0dQX1dBS0VVUAkJNDkKKworLyogd204MzUwIGNoaXAgcmV2aXNpb25zICovCisjZGVmaW5lIFdNODM1MF9SRVZfRQkJCQkweDQKKyNkZWZpbmUgV004MzUwX1JFVl9GCQkJCTB4NQorI2RlZmluZSBXTTgzNTBfUkVWX0cJCQkJMHg2CisKKyNkZWZpbmUgV004MzUwX05VTV9JUlEJCQkJNjMKKworc3RydWN0IHdtODM1MF9yZWdfYWNjZXNzIHsKKwl1MTYgcmVhZGFibGU7CQkvKiBNYXNrIG9mIHJlYWRhYmxlIGJpdHMgKi8KKwl1MTYgd3JpdGFibGU7CQkvKiBNYXNrIG9mIHdyaXRhYmxlIGJpdHMgKi8KKwl1MTYgdm9sOwkJLyogTWFzayBvZiB2b2xhdGlsZSBiaXRzICovCit9OworZXh0ZXJuIGNvbnN0IHN0cnVjdCB3bTgzNTBfcmVnX2FjY2VzcyB3bTgzNTBfcmVnX2lvX21hcFtdOworZXh0ZXJuIGNvbnN0IHUxNiB3bTgzNTBfbW9kZTBfZGVmYXVsdHNbXTsKK2V4dGVybiBjb25zdCB1MTYgd204MzUwX21vZGUxX2RlZmF1bHRzW107CitleHRlcm4gY29uc3QgdTE2IHdtODM1MF9tb2RlMl9kZWZhdWx0c1tdOworZXh0ZXJuIGNvbnN0IHUxNiB3bTgzNTBfbW9kZTNfZGVmYXVsdHNbXTsKKworc3RydWN0IHdtODM1MDsKKworc3RydWN0IHdtODM1MF9pcnEgeworCXZvaWQgKCpoYW5kbGVyKSAoc3RydWN0IHdtODM1MCAqLCBpbnQsIHZvaWQgKik7CisJdm9pZCAqZGF0YTsKK307CisKK3N0cnVjdCB3bTgzNTAgeworCWludCByZXY7CQkvKiBjaGlwIHJldmlzaW9uICovCisKKwlzdHJ1Y3QgZGV2aWNlICpkZXY7CisKKwkvKiBkZXZpY2UgSU8gKi8KKwl1bmlvbiB7CisJCXN0cnVjdCBpMmNfY2xpZW50ICppMmNfY2xpZW50OworCQlzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpX2RldmljZTsKKwl9OworCWludCAoKnJlYWRfZGV2KShzdHJ1Y3Qgd204MzUwICp3bTgzNTAsIGNoYXIgcmVnLCBpbnQgc2l6ZSwgdm9pZCAqZGVzdCk7CisJaW50ICgqd3JpdGVfZGV2KShzdHJ1Y3Qgd204MzUwICp3bTgzNTAsIGNoYXIgcmVnLCBpbnQgc2l6ZSwKKwkJCSB2b2lkICpzcmMpOworCXUxNiAqcmVnX2NhY2hlOworCisJLyogSW50ZXJydXB0IGhhbmRsaW5nICovCisJc3RydWN0IHdvcmtfc3RydWN0IGlycV93b3JrOworCXN0cnVjdCBtdXRleCBpcnFfbXV0ZXg7IC8qIElSUSB0YWJsZSBtdXRleCAqLworCXN0cnVjdCB3bTgzNTBfaXJxIGlycVtXTTgzNTBfTlVNX0lSUV07CisJaW50IGNoaXBfaXJxOworCisJLyogQ2xpZW50IGRldmljZXMgKi8KKwlzdHJ1Y3Qgd204MzUwX2NvZGVjIGNvZGVjOworCXN0cnVjdCB3bTgzNTBfZ3BpbyBncGlvOworCXN0cnVjdCB3bTgzNTBfcG1pYyBwbWljOworCXN0cnVjdCB3bTgzNTBfcG93ZXIgcG93ZXI7CisJc3RydWN0IHdtODM1MF9ydGMgcnRjOworCXN0cnVjdCB3bTgzNTBfd2R0IHdkdDsKK307CisKKy8qKgorICogRGF0YSB0byBiZSBzdXBwbGllZCBieSB0aGUgcGxhdGZvcm0gdG8gaW5pdGlhbGlzZSB0aGUgV004MzUwLgorICoKKyAqIEBpbml0OiBGdW5jdGlvbiBjYWxsZWQgZHVyaW5nIGRyaXZlciBpbml0aWFsaXNhdGlvbi4gIFNob3VsZCBiZQorICogICAgICAgIHVzZWQgYnkgdGhlIHBsYXRmb3JtIHRvIGNvbmZpZ3VyZSBHUElPIGZ1bmN0aW9ucyBhbmQgc2ltaWxhci4KKyAqLworc3RydWN0IHdtODM1MF9wbGF0Zm9ybV9kYXRhIHsKKwlpbnQgKCppbml0KShzdHJ1Y3Qgd204MzUwICp3bTgzNTApOworfTsKKworCisvKgorICogV004MzUwIGRldmljZSBpbml0aWFsaXNhdGlvbiBhbmQgZXhpdC4KKyAqLworaW50IHdtODM1MF9kZXZpY2VfaW5pdChzdHJ1Y3Qgd204MzUwICp3bTgzNTAsIGludCBpcnEsCisJCSAgICAgICBzdHJ1Y3Qgd204MzUwX3BsYXRmb3JtX2RhdGEgKnBkYXRhKTsKK3ZvaWQgd204MzUwX2RldmljZV9leGl0KHN0cnVjdCB3bTgzNTAgKndtODM1MCk7CisKKy8qCisgKiBXTTgzNTAgZGV2aWNlIElPCisgKi8KK2ludCB3bTgzNTBfY2xlYXJfYml0cyhzdHJ1Y3Qgd204MzUwICp3bTgzNTAsIHUxNiByZWcsIHUxNiBtYXNrKTsKK2ludCB3bTgzNTBfc2V0X2JpdHMoc3RydWN0IHdtODM1MCAqd204MzUwLCB1MTYgcmVnLCB1MTYgbWFzayk7Cit1MTYgd204MzUwX3JlZ19yZWFkKHN0cnVjdCB3bTgzNTAgKndtODM1MCwgaW50IHJlZyk7CitpbnQgd204MzUwX3JlZ193cml0ZShzdHJ1Y3Qgd204MzUwICp3bTgzNTAsIGludCByZWcsIHUxNiB2YWwpOworaW50IHdtODM1MF9yZWdfbG9jayhzdHJ1Y3Qgd204MzUwICp3bTgzNTApOworaW50IHdtODM1MF9yZWdfdW5sb2NrKHN0cnVjdCB3bTgzNTAgKndtODM1MCk7CitpbnQgd204MzUwX2Jsb2NrX3JlYWQoc3RydWN0IHdtODM1MCAqd204MzUwLCBpbnQgcmVnLCBpbnQgc2l6ZSwgdTE2ICpkZXN0KTsKK2ludCB3bTgzNTBfYmxvY2tfd3JpdGUoc3RydWN0IHdtODM1MCAqd204MzUwLCBpbnQgcmVnLCBpbnQgc2l6ZSwgdTE2ICpzcmMpOworCisvKgorICogV004MzUwIGludGVybmFsIGludGVycnVwdHMKKyAqLworaW50IHdtODM1MF9yZWdpc3Rlcl9pcnEoc3RydWN0IHdtODM1MCAqd204MzUwLCBpbnQgaXJxLAorCQkJdm9pZCAoKmhhbmRsZXIpIChzdHJ1Y3Qgd204MzUwICosIGludCwgdm9pZCAqKSwKKwkJCXZvaWQgKmRhdGEpOworaW50IHdtODM1MF9mcmVlX2lycShzdHJ1Y3Qgd204MzUwICp3bTgzNTAsIGludCBpcnEpOworaW50IHdtODM1MF9tYXNrX2lycShzdHJ1Y3Qgd204MzUwICp3bTgzNTAsIGludCBpcnEpOworaW50IHdtODM1MF91bm1hc2tfaXJxKHN0cnVjdCB3bTgzNTAgKndtODM1MCwgaW50IGlycSk7CisKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21mZC93bTgzNTAvZ3Bpby5oIGIvaW5jbHVkZS9saW51eC9tZmQvd204MzUwL2dwaW8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZDkxZThmCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9tZmQvd204MzUwL2dwaW8uaApAQCAtMCwwICsxLDM0MiBAQAorLyoKKyAqIGdwaW8uaCAgLS0gIEdQSU8gRHJpdmVyIGZvciBXb2xmc29uIFdNODM1MCBQTUlDCisgKgorICogQ29weXJpZ2h0IDIwMDcgV29sZnNvbiBNaWNyb2VsZWN0cm9uaWNzIFBMQworICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqICB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqLworCisjaWZuZGVmIF9fTElOVVhfTUZEX1dNODM1MF9HUElPX0hfCisjZGVmaW5lIF9fTElOVVhfTUZEX1dNODM1MF9HUElPX0hfCisKKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKworLyoKKyAqIEdQSU8gUmVnaXN0ZXJzLgorICovCisjZGVmaW5lIFdNODM1MF9HUElPX0RFQk9VTkNFICAgICAgICAgICAgICAgICAgICAweDgwCisjZGVmaW5lIFdNODM1MF9HUElPX1BJTl9QVUxMX1VQX0NPTlRST0wgICAgICAgICAweDgxCisjZGVmaW5lIFdNODM1MF9HUElPX1BVTExfRE9XTl9DT05UUk9MICAgICAgICAgICAweDgyCisjZGVmaW5lIFdNODM1MF9HUElPX0lOVF9NT0RFICAgICAgICAgICAgICAgICAgICAweDgzCisjZGVmaW5lIFdNODM1MF9HUElPX0NPTlRST0wgICAgICAgICAgICAgICAgICAgICAweDg1CisjZGVmaW5lIFdNODM1MF9HUElPX0NPTkZJR1VSQVRJT05fSV9PICAgICAgICAgICAweDg2CisjZGVmaW5lIFdNODM1MF9HUElPX1BJTl9QT0xBUklUWV9UWVBFICAgICAgICAgICAweDg3CisjZGVmaW5lIFdNODM1MF9HUElPX0ZVTkNUSU9OX1NFTEVDVF8xICAgICAgICAgICAweDhDCisjZGVmaW5lIFdNODM1MF9HUElPX0ZVTkNUSU9OX1NFTEVDVF8yICAgICAgICAgICAweDhECisjZGVmaW5lIFdNODM1MF9HUElPX0ZVTkNUSU9OX1NFTEVDVF8zICAgICAgICAgICAweDhFCisjZGVmaW5lIFdNODM1MF9HUElPX0ZVTkNUSU9OX1NFTEVDVF80ICAgICAgICAgICAweDhGCisKKy8qCisgKiBHUElPIEZ1bmN0aW9ucworICovCisjZGVmaW5lIFdNODM1MF9HUElPMF9HUElPX0lOCQkJMHgwCisjZGVmaW5lIFdNODM1MF9HUElPMF9HUElPX09VVAkJCTB4MAorI2RlZmluZSBXTTgzNTBfR1BJTzBfUFdSX09OX0lOCQkJMHgxCisjZGVmaW5lIFdNODM1MF9HUElPMF9QV1JfT05fT1VUCQkJMHgxCisjZGVmaW5lIFdNODM1MF9HUElPMF9MRE9fRU5fSU4JCQkweDIKKyNkZWZpbmUgV004MzUwX0dQSU8wX1ZSVENfT1VUCQkJMHgyCisjZGVmaW5lIFdNODM1MF9HUElPMF9MUFdSMV9JTgkJCTB4MworI2RlZmluZSBXTTgzNTBfR1BJTzBfUE9SX0JfT1VUCQkJMHgzCisKKyNkZWZpbmUgV004MzUwX0dQSU8xX0dQSU9fSU4JCQkweDAKKyNkZWZpbmUgV004MzUwX0dQSU8xX0dQSU9fT1VUCQkJMHgwCisjZGVmaW5lIFdNODM1MF9HUElPMV9QV1JfT05fSU4JCQkweDEKKyNkZWZpbmUgV004MzUwX0dQSU8xX0RPX0NPTkZfT1VUCQkweDEKKyNkZWZpbmUgV004MzUwX0dQSU8xX0xET19FTl9JTgkJCTB4MgorI2RlZmluZSBXTTgzNTBfR1BJTzFfUkVTRVRfT1VUCQkJMHgyCisjZGVmaW5lIFdNODM1MF9HUElPMV9MUFdSMl9JTgkJCTB4MworI2RlZmluZSBXTTgzNTBfR1BJTzFfTUVNUlNUX09VVAkJCTB4MworCisjZGVmaW5lIFdNODM1MF9HUElPMl9HUElPX0lOCQkJMHgwCisjZGVmaW5lIFdNODM1MF9HUElPMl9HUElPX09VVAkJCTB4MAorI2RlZmluZSBXTTgzNTBfR1BJTzJfUFdSX09OX0lOCQkJMHgxCisjZGVmaW5lIFdNODM1MF9HUElPMl9QV1JfT05fT1VUCQkJMHgxCisjZGVmaW5lIFdNODM1MF9HUElPMl9XQUtFX1VQX0lOCQkJMHgyCisjZGVmaW5lIFdNODM1MF9HUElPMl9WUlRDX09VVAkJCTB4MgorI2RlZmluZSBXTTgzNTBfR1BJTzJfMzJLSFpfSU4JCQkweDMKKyNkZWZpbmUgV004MzUwX0dQSU8yXzMyS0haX09VVAkJCTB4MworCisjZGVmaW5lIFdNODM1MF9HUElPM19HUElPX0lOCQkJMHgwCisjZGVmaW5lIFdNODM1MF9HUElPM19HUElPX09VVAkJCTB4MAorI2RlZmluZSBXTTgzNTBfR1BJTzNfUFdSX09OX0lOCQkJMHgxCisjZGVmaW5lIFdNODM1MF9HUElPM19QX0NMS19PVVQJCQkweDEKKyNkZWZpbmUgV004MzUwX0dQSU8zX0xET19FTl9JTgkJCTB4MgorI2RlZmluZSBXTTgzNTBfR1BJTzNfVlJUQ19PVVQJCQkweDIKKyNkZWZpbmUgV004MzUwX0dQSU8zX1BXUl9PRkZfSU4JCQkweDMKKyNkZWZpbmUgV004MzUwX0dQSU8zXzMyS0haX09VVAkJCTB4MworCisjZGVmaW5lIFdNODM1MF9HUElPNF9HUElPX0lOCQkJMHgwCisjZGVmaW5lIFdNODM1MF9HUElPNF9HUElPX09VVAkJCTB4MAorI2RlZmluZSBXTTgzNTBfR1BJTzRfTVJfSU4JCQkweDEKKyNkZWZpbmUgV004MzUwX0dQSU80X01FTV9SU1RfT1VUCQkweDEKKyNkZWZpbmUgV004MzUwX0dQSU80X0ZMQVNIX0lOCQkJMHgyCisjZGVmaW5lIFdNODM1MF9HUElPNF9BREFfT1VUCQkJMHgyCisjZGVmaW5lIFdNODM1MF9HUElPNF9ISUJFUk5BVEVfSU4JCTB4MworI2RlZmluZSBXTTgzNTBfR1BJTzRfRkxBU0hfT1VUCQkJMHgzCisjZGVmaW5lIFdNODM1MF9HUElPNF9NSUNERVRfT1VUCQkJMHg0CisjZGVmaW5lIFdNODM1MF9HUElPNF9NSUNTSFRfT1VUCQkJMHg1CisKKyNkZWZpbmUgV004MzUwX0dQSU81X0dQSU9fSU4JCQkweDAKKyNkZWZpbmUgV004MzUwX0dQSU81X0dQSU9fT1VUCQkJMHgwCisjZGVmaW5lIFdNODM1MF9HUElPNV9MUFdSMV9JTgkJCTB4MQorI2RlZmluZSBXTTgzNTBfR1BJTzVfUF9DTEtfT1VUCQkJMHgxCisjZGVmaW5lIFdNODM1MF9HUElPNV9BRENMUkNMS19JTgkJMHgyCisjZGVmaW5lIFdNODM1MF9HUElPNV9BRENMUkNMS19PVVQJCTB4MgorI2RlZmluZSBXTTgzNTBfR1BJTzVfSElCRVJOQVRFX0lOCQkweDMKKyNkZWZpbmUgV004MzUwX0dQSU81XzMyS0haX09VVAkJCTB4MworI2RlZmluZSBXTTgzNTBfR1BJTzVfTUlDREVUX09VVAkJCTB4NAorI2RlZmluZSBXTTgzNTBfR1BJTzVfTUlDU0hUX09VVAkJCTB4NQorI2RlZmluZSBXTTgzNTBfR1BJTzVfQURBX09VVAkJCTB4NgorI2RlZmluZSBXTTgzNTBfR1BJTzVfT1BDTEtfT1VUCQkJMHg3CisKKyNkZWZpbmUgV004MzUwX0dQSU82X0dQSU9fSU4JCQkweDAKKyNkZWZpbmUgV004MzUwX0dQSU82X0dQSU9fT1VUCQkJMHgwCisjZGVmaW5lIFdNODM1MF9HUElPNl9MUFdSMl9JTgkJCTB4MQorI2RlZmluZSBXTTgzNTBfR1BJTzZfTUVNUlNUX09VVAkJCTB4MQorI2RlZmluZSBXTTgzNTBfR1BJTzZfRkxBU0hfSU4JCQkweDIKKyNkZWZpbmUgV004MzUwX0dQSU82X0FEQV9PVVQJCQkweDIKKyNkZWZpbmUgV004MzUwX0dQSU82X0hJQkVSTkFURV9JTgkJMHgzCisjZGVmaW5lIFdNODM1MF9HUElPNl9SVENfT1VUCQkJMHgzCisjZGVmaW5lIFdNODM1MF9HUElPNl9NSUNERVRfT1VUCQkJMHg0CisjZGVmaW5lIFdNODM1MF9HUElPNl9NSUNTSFRfT1VUCQkJMHg1CisjZGVmaW5lIFdNODM1MF9HUElPNl9BRENMUkNMS0JfT1VUCQkweDYKKyNkZWZpbmUgV004MzUwX0dQSU82X1NET1VUX09VVAkJCTB4NworCisjZGVmaW5lIFdNODM1MF9HUElPN19HUElPX0lOCQkJMHgwCisjZGVmaW5lIFdNODM1MF9HUElPN19HUElPX09VVAkJCTB4MAorI2RlZmluZSBXTTgzNTBfR1BJTzdfTFBXUjNfSU4JCQkweDEKKyNkZWZpbmUgV004MzUwX0dQSU83X1BfQ0xLX09VVAkJCTB4MQorI2RlZmluZSBXTTgzNTBfR1BJTzdfTUFTS19JTgkJCTB4MgorI2RlZmluZSBXTTgzNTBfR1BJTzdfVkNDX0ZBVUxUX09VVAkJMHgyCisjZGVmaW5lIFdNODM1MF9HUElPN19ISUJFUk5BVEVfSU4JCTB4MworI2RlZmluZSBXTTgzNTBfR1BJTzdfQkFUVF9GQVVMVF9PVVQJCTB4MworI2RlZmluZSBXTTgzNTBfR1BJTzdfTUlDREVUX09VVAkJCTB4NAorI2RlZmluZSBXTTgzNTBfR1BJTzdfTUlDU0hUX09VVAkJCTB4NQorI2RlZmluZSBXTTgzNTBfR1BJTzdfQURBX09VVAkJCTB4NgorI2RlZmluZSBXTTgzNTBfR1BJTzdfQ1NCX0lOCQkJMHg3CisKKyNkZWZpbmUgV004MzUwX0dQSU84X0dQSU9fSU4JCQkweDAKKyNkZWZpbmUgV004MzUwX0dQSU84X0dQSU9fT1VUCQkJMHgwCisjZGVmaW5lIFdNODM1MF9HUElPOF9NUl9JTgkJCTB4MQorI2RlZmluZSBXTTgzNTBfR1BJTzhfVkNDX0ZBVUxUX09VVAkJMHgxCisjZGVmaW5lIFdNODM1MF9HUElPOF9BRENCQ0xLX0lOCQkJMHgyCisjZGVmaW5lIFdNODM1MF9HUElPOF9BRENCQ0xLX09VVAkJMHgyCisjZGVmaW5lIFdNODM1MF9HUElPOF9QV1JfT0ZGX0lOCQkJMHgzCisjZGVmaW5lIFdNODM1MF9HUElPOF9CQVRUX0ZBVUxUX09VVAkJMHgzCisjZGVmaW5lIFdNODM1MF9HUElPOF9BTFRTQ0xfSU4JCQkweGYKKworI2RlZmluZSBXTTgzNTBfR1BJTzlfR1BJT19JTgkJCTB4MAorI2RlZmluZSBXTTgzNTBfR1BJTzlfR1BJT19PVVQJCQkweDAKKyNkZWZpbmUgV004MzUwX0dQSU85X0hFQVJUQkVBVF9JTgkJMHgxCisjZGVmaW5lIFdNODM1MF9HUElPOV9WQ0NfRkFVTFRfT1VUCQkweDEKKyNkZWZpbmUgV004MzUwX0dQSU85X01BU0tfSU4JCQkweDIKKyNkZWZpbmUgV004MzUwX0dQSU85X0xJTkVfR1RfQkFUVF9PVVQJCTB4MgorI2RlZmluZSBXTTgzNTBfR1BJTzlfUFdSX09GRl9JTgkJCTB4MworI2RlZmluZSBXTTgzNTBfR1BJTzlfQkFUVF9GQVVMVF9PVVQJCTB4MworI2RlZmluZSBXTTgzNTBfR1BJTzlfQUxUU0RBX09VVAkJCTB4ZgorCisjZGVmaW5lIFdNODM1MF9HUElPMTBfR1BJT19JTgkJCTB4MAorI2RlZmluZSBXTTgzNTBfR1BJTzEwX0dQSU9fT1VUCQkJMHgwCisjZGVmaW5lIFdNODM1MF9HUElPMTBfSVNJTktDX09VVAkJMHgxCisjZGVmaW5lIFdNODM1MF9HUElPMTBfUFdSX09GRl9JTgkJMHgyCisjZGVmaW5lIFdNODM1MF9HUElPMTBfTElORV9HVF9CQVRUX09VVAkJMHgyCisjZGVmaW5lIFdNODM1MF9HUElPMTBfQ0hEX0lORF9JTgkJMHgzCisKKyNkZWZpbmUgV004MzUwX0dQSU8xMV9HUElPX0lOCQkJMHgwCisjZGVmaW5lIFdNODM1MF9HUElPMTFfR1BJT19PVVQJCQkweDAKKyNkZWZpbmUgV004MzUwX0dQSU8xMV9JU0lOS0RfT1VUCQkweDEKKyNkZWZpbmUgV004MzUwX0dQSU8xMV9XQUtFVVBfSU4JCQkweDIKKyNkZWZpbmUgV004MzUwX0dQSU8xMV9MSU5FX0dUX0JBVFRfT1VUCQkweDIKKyNkZWZpbmUgV004MzUwX0dQSU8xMV9DSERfSU5EX0lOCQkweDMKKworI2RlZmluZSBXTTgzNTBfR1BJTzEyX0dQSU9fSU4JCQkweDAKKyNkZWZpbmUgV004MzUwX0dQSU8xMl9HUElPX09VVAkJCTB4MAorI2RlZmluZSBXTTgzNTBfR1BJTzEyX0lTSU5LRV9PVVQJCTB4MQorI2RlZmluZSBXTTgzNTBfR1BJTzEyX0xJTkVfR1RfQkFUVF9PVVQJCTB4MgorI2RlZmluZSBXTTgzNTBfR1BJTzEyX0xJTkVfRU5fT1VUCQkweDMKKyNkZWZpbmUgV004MzUwX0dQSU8xMl8zMktIWl9PVVQJCQkweDQKKworI2RlZmluZSBXTTgzNTBfR1BJT19ESVJfSU4JCQkwCisjZGVmaW5lIFdNODM1MF9HUElPX0RJUl9PVVQJCQkxCisjZGVmaW5lIFdNODM1MF9HUElPX0FDVElWRV9MT1cJCQkwCisjZGVmaW5lIFdNODM1MF9HUElPX0FDVElWRV9ISUdICQkJMQorI2RlZmluZSBXTTgzNTBfR1BJT19QVUxMX05PTkUJCQkwCisjZGVmaW5lIFdNODM1MF9HUElPX1BVTExfVVAJCQkxCisjZGVmaW5lIFdNODM1MF9HUElPX1BVTExfRE9XTgkJCTIKKyNkZWZpbmUgV004MzUwX0dQSU9fSU5WRVJUX09GRgkJCTAKKyNkZWZpbmUgV004MzUwX0dQSU9fSU5WRVJUX09OCQkJMQorI2RlZmluZSBXTTgzNTBfR1BJT19ERUJPVU5DRV9PRkYJCTAKKyNkZWZpbmUgV004MzUwX0dQSU9fREVCT1VOQ0VfT04JCQkxCisKKy8qCisgKiBSMTI4ICgweDgwKSAtIEdQSU8gRGVib3VuY2UKKyAqLworI2RlZmluZSBXTTgzNTBfR1AxMl9EQiAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxMDAwCisjZGVmaW5lIFdNODM1MF9HUDExX0RCICAgICAgICAgICAgICAgICAgICAgICAgICAweDA4MDAKKyNkZWZpbmUgV004MzUwX0dQMTBfREIgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDQwMAorI2RlZmluZSBXTTgzNTBfR1A5X0RCICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMjAwCisjZGVmaW5lIFdNODM1MF9HUDhfREIgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAKKyNkZWZpbmUgV004MzUwX0dQN19EQiAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA4MAorI2RlZmluZSBXTTgzNTBfR1A2X0RCICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDQwCisjZGVmaW5lIFdNODM1MF9HUDVfREIgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMjAKKyNkZWZpbmUgV004MzUwX0dQNF9EQiAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAxMAorI2RlZmluZSBXTTgzNTBfR1AzX0RCICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA4CisjZGVmaW5lIFdNODM1MF9HUDJfREIgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDQKKyNkZWZpbmUgV004MzUwX0dQMV9EQiAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMgorI2RlZmluZSBXTTgzNTBfR1AwX0RCICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxCisKKy8qCisgKiBSMTI5ICgweDgxKSAtIEdQSU8gUGluIHB1bGwgdXAgQ29udHJvbAorICovCisjZGVmaW5lIFdNODM1MF9HUDEyX1BVICAgICAgICAgICAgICAgICAgICAgICAgICAweDEwMDAKKyNkZWZpbmUgV004MzUwX0dQMTFfUFUgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDgwMAorI2RlZmluZSBXTTgzNTBfR1AxMF9QVSAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNDAwCisjZGVmaW5lIFdNODM1MF9HUDlfUFUgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAyMDAKKyNkZWZpbmUgV004MzUwX0dQOF9QVSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMAorI2RlZmluZSBXTTgzNTBfR1A3X1BVICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDgwCisjZGVmaW5lIFdNODM1MF9HUDZfUFUgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwNDAKKyNkZWZpbmUgV004MzUwX0dQNV9QVSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAyMAorI2RlZmluZSBXTTgzNTBfR1A0X1BVICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDEwCisjZGVmaW5lIFdNODM1MF9HUDNfUFUgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDgKKyNkZWZpbmUgV004MzUwX0dQMl9QVSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNAorI2RlZmluZSBXTTgzNTBfR1AxX1BVICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAyCisjZGVmaW5lIFdNODM1MF9HUDBfUFUgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEKKworLyoKKyAqIFIxMzAgKDB4ODIpIC0gR1BJTyBQdWxsIGRvd24gQ29udHJvbAorICovCisjZGVmaW5lIFdNODM1MF9HUDEyX1BEICAgICAgICAgICAgICAgICAgICAgICAgICAweDEwMDAKKyNkZWZpbmUgV004MzUwX0dQMTFfUEQgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDgwMAorI2RlZmluZSBXTTgzNTBfR1AxMF9QRCAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNDAwCisjZGVmaW5lIFdNODM1MF9HUDlfUEQgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAyMDAKKyNkZWZpbmUgV004MzUwX0dQOF9QRCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMAorI2RlZmluZSBXTTgzNTBfR1A3X1BEICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDgwCisjZGVmaW5lIFdNODM1MF9HUDZfUEQgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwNDAKKyNkZWZpbmUgV004MzUwX0dQNV9QRCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAyMAorI2RlZmluZSBXTTgzNTBfR1A0X1BEICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDEwCisjZGVmaW5lIFdNODM1MF9HUDNfUEQgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDgKKyNkZWZpbmUgV004MzUwX0dQMl9QRCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNAorI2RlZmluZSBXTTgzNTBfR1AxX1BEICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAyCisjZGVmaW5lIFdNODM1MF9HUDBfUEQgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEKKworLyoKKyAqIFIxMzEgKDB4ODMpIC0gR1BJTyBJbnRlcnJ1cHQgTW9kZQorICovCisjZGVmaW5lIFdNODM1MF9HUDEyX0lOVE1PREUgICAgICAgICAgICAgICAgICAgICAweDEwMDAKKyNkZWZpbmUgV004MzUwX0dQMTFfSU5UTU9ERSAgICAgICAgICAgICAgICAgICAgIDB4MDgwMAorI2RlZmluZSBXTTgzNTBfR1AxMF9JTlRNT0RFICAgICAgICAgICAgICAgICAgICAgMHgwNDAwCisjZGVmaW5lIFdNODM1MF9HUDlfSU5UTU9ERSAgICAgICAgICAgICAgICAgICAgICAweDAyMDAKKyNkZWZpbmUgV004MzUwX0dQOF9JTlRNT0RFICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMAorI2RlZmluZSBXTTgzNTBfR1A3X0lOVE1PREUgICAgICAgICAgICAgICAgICAgICAgMHgwMDgwCisjZGVmaW5lIFdNODM1MF9HUDZfSU5UTU9ERSAgICAgICAgICAgICAgICAgICAgICAweDAwNDAKKyNkZWZpbmUgV004MzUwX0dQNV9JTlRNT0RFICAgICAgICAgICAgICAgICAgICAgIDB4MDAyMAorI2RlZmluZSBXTTgzNTBfR1A0X0lOVE1PREUgICAgICAgICAgICAgICAgICAgICAgMHgwMDEwCisjZGVmaW5lIFdNODM1MF9HUDNfSU5UTU9ERSAgICAgICAgICAgICAgICAgICAgICAweDAwMDgKKyNkZWZpbmUgV004MzUwX0dQMl9JTlRNT0RFICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNAorI2RlZmluZSBXTTgzNTBfR1AxX0lOVE1PREUgICAgICAgICAgICAgICAgICAgICAgMHgwMDAyCisjZGVmaW5lIFdNODM1MF9HUDBfSU5UTU9ERSAgICAgICAgICAgICAgICAgICAgICAweDAwMDEKKworLyoKKyAqIFIxMzMgKDB4ODUpIC0gR1BJTyBDb250cm9sCisgKi8KKyNkZWZpbmUgV004MzUwX0dQX0RCVElNRV9NQVNLICAgICAgICAgICAgICAgICAgIDB4MDBDMAorCisvKgorICogUjEzNCAoMHg4NikgLSBHUElPIENvbmZpZ3VyYXRpb24gKGkvbykKKyAqLworI2RlZmluZSBXTTgzNTBfR1AxMl9ESVIgICAgICAgICAgICAgICAgICAgICAgICAgMHgxMDAwCisjZGVmaW5lIFdNODM1MF9HUDExX0RJUiAgICAgICAgICAgICAgICAgICAgICAgICAweDA4MDAKKyNkZWZpbmUgV004MzUwX0dQMTBfRElSICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDQwMAorI2RlZmluZSBXTTgzNTBfR1A5X0RJUiAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMjAwCisjZGVmaW5lIFdNODM1MF9HUDhfRElSICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAKKyNkZWZpbmUgV004MzUwX0dQN19ESVIgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA4MAorI2RlZmluZSBXTTgzNTBfR1A2X0RJUiAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDQwCisjZGVmaW5lIFdNODM1MF9HUDVfRElSICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMjAKKyNkZWZpbmUgV004MzUwX0dQNF9ESVIgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAxMAorI2RlZmluZSBXTTgzNTBfR1AzX0RJUiAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA4CisjZGVmaW5lIFdNODM1MF9HUDJfRElSICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDQKKyNkZWZpbmUgV004MzUwX0dQMV9ESVIgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMgorI2RlZmluZSBXTTgzNTBfR1AwX0RJUiAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxCisKKy8qCisgKiBSMTM1ICgweDg3KSAtIEdQSU8gUGluIFBvbGFyaXR5IC8gVHlwZQorICovCisjZGVmaW5lIFdNODM1MF9HUDEyX0NGRyAgICAgICAgICAgICAgICAgICAgICAgICAweDEwMDAKKyNkZWZpbmUgV004MzUwX0dQMTFfQ0ZHICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDgwMAorI2RlZmluZSBXTTgzNTBfR1AxMF9DRkcgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNDAwCisjZGVmaW5lIFdNODM1MF9HUDlfQ0ZHICAgICAgICAgICAgICAgICAgICAgICAgICAweDAyMDAKKyNkZWZpbmUgV004MzUwX0dQOF9DRkcgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMAorI2RlZmluZSBXTTgzNTBfR1A3X0NGRyAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDgwCisjZGVmaW5lIFdNODM1MF9HUDZfQ0ZHICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwNDAKKyNkZWZpbmUgV004MzUwX0dQNV9DRkcgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAyMAorI2RlZmluZSBXTTgzNTBfR1A0X0NGRyAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDEwCisjZGVmaW5lIFdNODM1MF9HUDNfQ0ZHICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDgKKyNkZWZpbmUgV004MzUwX0dQMl9DRkcgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNAorI2RlZmluZSBXTTgzNTBfR1AxX0NGRyAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAyCisjZGVmaW5lIFdNODM1MF9HUDBfQ0ZHICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEKKworLyoKKyAqIFIxNDAgKDB4OEMpIC0gR1BJTyBGdW5jdGlvbiBTZWxlY3QgMQorICovCisjZGVmaW5lIFdNODM1MF9HUDNfRk5fTUFTSyAgICAgICAgICAgICAgICAgICAgICAweEYwMDAKKyNkZWZpbmUgV004MzUwX0dQMl9GTl9NQVNLICAgICAgICAgICAgICAgICAgICAgIDB4MEYwMAorI2RlZmluZSBXTTgzNTBfR1AxX0ZOX01BU0sgICAgICAgICAgICAgICAgICAgICAgMHgwMEYwCisjZGVmaW5lIFdNODM1MF9HUDBfRk5fTUFTSyAgICAgICAgICAgICAgICAgICAgICAweDAwMEYKKworLyoKKyAqIFIxNDEgKDB4OEQpIC0gR1BJTyBGdW5jdGlvbiBTZWxlY3QgMgorICovCisjZGVmaW5lIFdNODM1MF9HUDdfRk5fTUFTSyAgICAgICAgICAgICAgICAgICAgICAweEYwMDAKKyNkZWZpbmUgV004MzUwX0dQNl9GTl9NQVNLICAgICAgICAgICAgICAgICAgICAgIDB4MEYwMAorI2RlZmluZSBXTTgzNTBfR1A1X0ZOX01BU0sgICAgICAgICAgICAgICAgICAgICAgMHgwMEYwCisjZGVmaW5lIFdNODM1MF9HUDRfRk5fTUFTSyAgICAgICAgICAgICAgICAgICAgICAweDAwMEYKKworLyoKKyAqIFIxNDIgKDB4OEUpIC0gR1BJTyBGdW5jdGlvbiBTZWxlY3QgMworICovCisjZGVmaW5lIFdNODM1MF9HUDExX0ZOX01BU0sgICAgICAgICAgICAgICAgICAgICAweEYwMDAKKyNkZWZpbmUgV004MzUwX0dQMTBfRk5fTUFTSyAgICAgICAgICAgICAgICAgICAgIDB4MEYwMAorI2RlZmluZSBXTTgzNTBfR1A5X0ZOX01BU0sgICAgICAgICAgICAgICAgICAgICAgMHgwMEYwCisjZGVmaW5lIFdNODM1MF9HUDhfRk5fTUFTSyAgICAgICAgICAgICAgICAgICAgICAweDAwMEYKKworLyoKKyAqIFIxNDMgKDB4OEYpIC0gR1BJTyBGdW5jdGlvbiBTZWxlY3QgNAorICovCisjZGVmaW5lIFdNODM1MF9HUDEyX0ZOX01BU0sgICAgICAgICAgICAgICAgICAgICAweDAwMEYKKworLyoKKyAqIFIyMzAgKDB4RTYpIC0gR1BJTyBQaW4gU3RhdHVzCisgKi8KKyNkZWZpbmUgV004MzUwX0dQMTJfTFZMICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTAwMAorI2RlZmluZSBXTTgzNTBfR1AxMV9MVkwgICAgICAgICAgICAgICAgICAgICAgICAgMHgwODAwCisjZGVmaW5lIFdNODM1MF9HUDEwX0xWTCAgICAgICAgICAgICAgICAgICAgICAgICAweDA0MDAKKyNkZWZpbmUgV004MzUwX0dQOV9MVkwgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDIwMAorI2RlZmluZSBXTTgzNTBfR1A4X0xWTCAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwCisjZGVmaW5lIFdNODM1MF9HUDdfTFZMICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwODAKKyNkZWZpbmUgV004MzUwX0dQNl9MVkwgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA0MAorI2RlZmluZSBXTTgzNTBfR1A1X0xWTCAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDIwCisjZGVmaW5lIFdNODM1MF9HUDRfTFZMICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMTAKKyNkZWZpbmUgV004MzUwX0dQM19MVkwgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwOAorI2RlZmluZSBXTTgzNTBfR1AyX0xWTCAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA0CisjZGVmaW5lIFdNODM1MF9HUDFfTFZMICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDIKKyNkZWZpbmUgV004MzUwX0dQMF9MVkwgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMQorCitzdHJ1Y3Qgd204MzUwOworCitpbnQgd204MzUwX2dwaW9fY29uZmlnKHN0cnVjdCB3bTgzNTAgKndtODM1MCwgaW50IGdwaW8sIGludCBkaXIsIGludCBmdW5jLAorCQkgICAgICAgaW50IHBvbCwgaW50IHB1bGwsIGludCBpbnZlcnQsIGludCBkZWJvdW5jZSk7CisKK3N0cnVjdCB3bTgzNTBfZ3BpbyB7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldjsKK307CisKKy8qCisgKiBHUElPIEludGVycnVwdHMKKyAqLworI2RlZmluZSBXTTgzNTBfSVJRX0dQSU8oeCkgICAgICAgICAgICAgICAgICAgICAgKDUwICsgeCkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21mZC93bTgzNTAvcG1pYy5oIGIvaW5jbHVkZS9saW51eC9tZmQvd204MzUwL3BtaWMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OWI2OWUwCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9tZmQvd204MzUwL3BtaWMuaApAQCAtMCwwICsxLDc0MSBAQAorLyoKKyAqIHBtaWMuaCAgLS0gIFBvd2VyIE1hbmFnbWVudCBEcml2ZXIgZm9yIFdvbGZzb24gV004MzUwIFBNSUMKKyAqCisgKiBDb3B5cmlnaHQgMjAwNyBXb2xmc29uIE1pY3JvZWxlY3Ryb25pY3MgUExDCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAorICogIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgorICogIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICovCisKKyNpZm5kZWYgX19MSU5VWF9NRkRfV004MzUwX1BNSUNfSAorI2RlZmluZSBfX0xJTlVYX01GRF9XTTgzNTBfUE1JQ19ICisKKy8qCisgKiBSZWdpc3RlciB2YWx1ZXMuCisgKi8KKworI2RlZmluZSBXTTgzNTBfQ1VSUkVOVF9TSU5LX0RSSVZFUl9BICAgICAgICAgICAgMHhBQworI2RlZmluZSBXTTgzNTBfQ1NBX0ZMQVNIX0NPTlRST0wgICAgICAgICAgICAgICAgMHhBRAorI2RlZmluZSBXTTgzNTBfQ1VSUkVOVF9TSU5LX0RSSVZFUl9CICAgICAgICAgICAgMHhBRQorI2RlZmluZSBXTTgzNTBfQ1NCX0ZMQVNIX0NPTlRST0wgICAgICAgICAgICAgICAgMHhBRgorI2RlZmluZSBXTTgzNTBfRENEQ19MRE9fUkVRVUVTVEVEICAgICAgICAgICAgICAgMHhCMAorI2RlZmluZSBXTTgzNTBfRENEQ19BQ1RJVkVfT1BUSU9OUyAgICAgICAgICAgICAgMHhCMQorI2RlZmluZSBXTTgzNTBfRENEQ19TTEVFUF9PUFRJT05TICAgICAgICAgICAgICAgMHhCMgorI2RlZmluZSBXTTgzNTBfUE9XRVJfQ0hFQ0tfQ09NUEFSQVRPUiAgICAgICAgICAgMHhCMworI2RlZmluZSBXTTgzNTBfRENEQzFfQ09OVFJPTCAgICAgICAgICAgICAgICAgICAgMHhCNAorI2RlZmluZSBXTTgzNTBfRENEQzFfVElNRU9VVFMgICAgICAgICAgICAgICAgICAgMHhCNQorI2RlZmluZSBXTTgzNTBfRENEQzFfTE9XX1BPV0VSICAgICAgICAgICAgICAgICAgMHhCNgorI2RlZmluZSBXTTgzNTBfRENEQzJfQ09OVFJPTCAgICAgICAgICAgICAgICAgICAgMHhCNworI2RlZmluZSBXTTgzNTBfRENEQzJfVElNRU9VVFMgICAgICAgICAgICAgICAgICAgMHhCOAorI2RlZmluZSBXTTgzNTBfRENEQzNfQ09OVFJPTCAgICAgICAgICAgICAgICAgICAgMHhCQQorI2RlZmluZSBXTTgzNTBfRENEQzNfVElNRU9VVFMgICAgICAgICAgICAgICAgICAgMHhCQgorI2RlZmluZSBXTTgzNTBfRENEQzNfTE9XX1BPV0VSICAgICAgICAgICAgICAgICAgMHhCQworI2RlZmluZSBXTTgzNTBfRENEQzRfQ09OVFJPTCAgICAgICAgICAgICAgICAgICAgMHhCRAorI2RlZmluZSBXTTgzNTBfRENEQzRfVElNRU9VVFMgICAgICAgICAgICAgICAgICAgMHhCRQorI2RlZmluZSBXTTgzNTBfRENEQzRfTE9XX1BPV0VSICAgICAgICAgICAgICAgICAgMHhCRgorI2RlZmluZSBXTTgzNTBfRENEQzVfQ09OVFJPTCAgICAgICAgICAgICAgICAgICAgMHhDMAorI2RlZmluZSBXTTgzNTBfRENEQzVfVElNRU9VVFMgICAgICAgICAgICAgICAgICAgMHhDMQorI2RlZmluZSBXTTgzNTBfRENEQzZfQ09OVFJPTCAgICAgICAgICAgICAgICAgICAgMHhDMworI2RlZmluZSBXTTgzNTBfRENEQzZfVElNRU9VVFMgICAgICAgICAgICAgICAgICAgMHhDNAorI2RlZmluZSBXTTgzNTBfRENEQzZfTE9XX1BPV0VSICAgICAgICAgICAgICAgICAgMHhDNQorI2RlZmluZSBXTTgzNTBfTElNSVRfU1dJVENIX0NPTlRST0wgICAgICAgICAgICAgMHhDNworI2RlZmluZSBXTTgzNTBfTERPMV9DT05UUk9MICAgICAgICAgICAgICAgICAgICAgMHhDOAorI2RlZmluZSBXTTgzNTBfTERPMV9USU1FT1VUUyAgICAgICAgICAgICAgICAgICAgMHhDOQorI2RlZmluZSBXTTgzNTBfTERPMV9MT1dfUE9XRVIgICAgICAgICAgICAgICAgICAgMHhDQQorI2RlZmluZSBXTTgzNTBfTERPMl9DT05UUk9MICAgICAgICAgICAgICAgICAgICAgMHhDQgorI2RlZmluZSBXTTgzNTBfTERPMl9USU1FT1VUUyAgICAgICAgICAgICAgICAgICAgMHhDQworI2RlZmluZSBXTTgzNTBfTERPMl9MT1dfUE9XRVIgICAgICAgICAgICAgICAgICAgMHhDRAorI2RlZmluZSBXTTgzNTBfTERPM19DT05UUk9MICAgICAgICAgICAgICAgICAgICAgMHhDRQorI2RlZmluZSBXTTgzNTBfTERPM19USU1FT1VUUyAgICAgICAgICAgICAgICAgICAgMHhDRgorI2RlZmluZSBXTTgzNTBfTERPM19MT1dfUE9XRVIgICAgICAgICAgICAgICAgICAgMHhEMAorI2RlZmluZSBXTTgzNTBfTERPNF9DT05UUk9MICAgICAgICAgICAgICAgICAgICAgMHhEMQorI2RlZmluZSBXTTgzNTBfTERPNF9USU1FT1VUUyAgICAgICAgICAgICAgICAgICAgMHhEMgorI2RlZmluZSBXTTgzNTBfTERPNF9MT1dfUE9XRVIgICAgICAgICAgICAgICAgICAgMHhEMworI2RlZmluZSBXTTgzNTBfVkNDX0ZBVUxUX01BU0tTICAgICAgICAgICAgICAgICAgMHhENworI2RlZmluZSBXTTgzNTBfTUFJTl9CQU5ER0FQX0NPTlRST0wgICAgICAgICAgICAgMHhEOAorI2RlZmluZSBXTTgzNTBfT1NDX0NPTlRST0wgICAgICAgICAgICAgICAgICAgICAgMHhEOQorI2RlZmluZSBXTTgzNTBfUlRDX1RJQ0tfQ09OVFJPTCAgICAgICAgICAgICAgICAgMHhEQQorI2RlZmluZSBXTTgzNTBfU0VDVVJJVFkgICAgICAgICAgICAgICAgICAgICAgICAgMHhEQgorI2RlZmluZSBXTTgzNTBfUkFNX0JJU1RfMSAgICAgICAgICAgICAgICAgICAgICAgMHhEQworI2RlZmluZSBXTTgzNTBfRENEQ19MRE9fU1RBVFVTICAgICAgICAgICAgICAgICAgMHhFMQorI2RlZmluZSBXTTgzNTBfR1BJT19QSU5fU1RBVFVTICAgICAgICAgICAgICAgICAgMHhFNgorCisjZGVmaW5lIFdNODM1MF9EQ0RDMV9GT1JDRV9QV00gICAgICAgICAgICAgICAgICAweEY4CisjZGVmaW5lIFdNODM1MF9EQ0RDM19GT1JDRV9QV00gICAgICAgICAgICAgICAgICAweEZBCisjZGVmaW5lIFdNODM1MF9EQ0RDNF9GT1JDRV9QV00gICAgICAgICAgICAgICAgICAweEZCCisjZGVmaW5lIFdNODM1MF9EQ0RDNl9GT1JDRV9QV00gICAgICAgICAgICAgICAgICAweEZECisKKy8qCisgKiBSMTcyICgweEFDKSAtIEN1cnJlbnQgU2luayBEcml2ZXIgQQorICovCisjZGVmaW5lIFdNODM1MF9DUzFfSElCX01PREUgICAgICAgICAgICAgICAgICAgICAweDEwMDAKKyNkZWZpbmUgV004MzUwX0NTMV9ISUJfTU9ERV9NQVNLICAgICAgICAgICAgICAgIDB4MTAwMAorI2RlZmluZSBXTTgzNTBfQ1MxX0hJQl9NT0RFX1NISUZUICAgICAgICAgICAgICAgICAgIDEyCisjZGVmaW5lIFdNODM1MF9DUzFfSVNFTF9NQVNLICAgICAgICAgICAgICAgICAgICAweDAwM0YKKyNkZWZpbmUgV004MzUwX0NTMV9JU0VMX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvKiBCaXQgdmFsdWVzIGZvciBSMTcyICgweEFDKSAqLworI2RlZmluZSBXTTgzNTBfQ1MxX0hJQl9NT0RFX0RJU0FCTEUgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIFdNODM1MF9DUzFfSElCX01PREVfTEVBVkUgICAgICAgICAgICAgICAgICAgIDEKKworI2RlZmluZSBXTTgzNTBfQ1MxX0lTRUxfMjIwTSAgICAgICAgICAgICAgICAgICAgICAweDNGCisKKy8qCisgKiBSMTczICgweEFEKSAtIENTQSBGbGFzaCBjb250cm9sCisgKi8KKyNkZWZpbmUgV004MzUwX0NTMV9GTEFTSF9NT0RFICAgICAgICAgICAgICAgICAgIDB4ODAwMAorI2RlZmluZSBXTTgzNTBfQ1MxX1RSSUdTUkMgICAgICAgICAgICAgICAgICAgICAgMHg0MDAwCisjZGVmaW5lIFdNODM1MF9DUzFfRFJJVkUgICAgICAgICAgICAgICAgICAgICAgICAweDIwMDAKKyNkZWZpbmUgV004MzUwX0NTMV9GTEFTSF9EVVJfTUFTSyAgICAgICAgICAgICAgIDB4MDMwMAorI2RlZmluZSBXTTgzNTBfQ1MxX09GRl9SQU1QX01BU0sgICAgICAgICAgICAgICAgMHgwMDMwCisjZGVmaW5lIFdNODM1MF9DUzFfT05fUkFNUF9NQVNLICAgICAgICAgICAgICAgICAweDAwMDMKKworLyoKKyAqIFIxNzQgKDB4QUUpIC0gQ3VycmVudCBTaW5rIERyaXZlciBCCisgKi8KKyNkZWZpbmUgV004MzUwX0NTMl9ISUJfTU9ERSAgICAgICAgICAgICAgICAgICAgIDB4MTAwMAorI2RlZmluZSBXTTgzNTBfQ1MyX0lTRUxfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMDNGCisKKy8qCisgKiBSMTc1ICgweEFGKSAtIENTQiBGbGFzaCBjb250cm9sCisgKi8KKyNkZWZpbmUgV004MzUwX0NTMl9GTEFTSF9NT0RFICAgICAgICAgICAgICAgICAgIDB4ODAwMAorI2RlZmluZSBXTTgzNTBfQ1MyX1RSSUdTUkMgICAgICAgICAgICAgICAgICAgICAgMHg0MDAwCisjZGVmaW5lIFdNODM1MF9DUzJfRFJJVkUgICAgICAgICAgICAgICAgICAgICAgICAweDIwMDAKKyNkZWZpbmUgV004MzUwX0NTMl9GTEFTSF9EVVJfTUFTSyAgICAgICAgICAgICAgIDB4MDMwMAorI2RlZmluZSBXTTgzNTBfQ1MyX09GRl9SQU1QX01BU0sgICAgICAgICAgICAgICAgMHgwMDMwCisjZGVmaW5lIFdNODM1MF9DUzJfT05fUkFNUF9NQVNLICAgICAgICAgICAgICAgICAweDAwMDMKKworLyoKKyAqIFIxNzYgKDB4QjApIC0gRENEQy9MRE8gcmVxdWVzdGVkCisgKi8KKyNkZWZpbmUgV004MzUwX0xTX0VOQSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODAwMAorI2RlZmluZSBXTTgzNTBfTERPNF9FTkEgICAgICAgICAgICAgICAgICAgICAgICAgMHgwODAwCisjZGVmaW5lIFdNODM1MF9MRE8zX0VOQSAgICAgICAgICAgICAgICAgICAgICAgICAweDA0MDAKKyNkZWZpbmUgV004MzUwX0xETzJfRU5BICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDIwMAorI2RlZmluZSBXTTgzNTBfTERPMV9FTkEgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwCisjZGVmaW5lIFdNODM1MF9EQzZfRU5BICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMjAKKyNkZWZpbmUgV004MzUwX0RDNV9FTkEgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAxMAorI2RlZmluZSBXTTgzNTBfREM0X0VOQSAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA4CisjZGVmaW5lIFdNODM1MF9EQzNfRU5BICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDQKKyNkZWZpbmUgV004MzUwX0RDMl9FTkEgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMgorI2RlZmluZSBXTTgzNTBfREMxX0VOQSAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxCisKKy8qCisgKiBSMTc3ICgweEIxKSAtIERDREMgQWN0aXZlIG9wdGlvbnMKKyAqLworI2RlZmluZSBXTTgzNTBfUFVUT19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgMHgzMDAwCisjZGVmaW5lIFdNODM1MF9QV1JVUF9ERUxBWV9NQVNLICAgICAgICAgICAgICAgICAweDAzMDAKKyNkZWZpbmUgV004MzUwX0RDNl9BQ1RJVkUgICAgICAgICAgICAgICAgICAgICAgIDB4MDAyMAorI2RlZmluZSBXTTgzNTBfREM0X0FDVElWRSAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA4CisjZGVmaW5lIFdNODM1MF9EQzNfQUNUSVZFICAgICAgICAgICAgICAgICAgICAgICAweDAwMDQKKyNkZWZpbmUgV004MzUwX0RDMV9BQ1RJVkUgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMQorCisvKgorICogUjE3OCAoMHhCMikgLSBEQ0RDIFNsZWVwIG9wdGlvbnMKKyAqLworI2RlZmluZSBXTTgzNTBfREM2X1NMRUVQICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDIwCisjZGVmaW5lIFdNODM1MF9EQzRfU0xFRVAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDgKKyNkZWZpbmUgV004MzUwX0RDM19TTEVFUCAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNAorI2RlZmluZSBXTTgzNTBfREMxX1NMRUVQICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxCisKKy8qCisgKiBSMTc5ICgweEIzKSAtIFBvd2VyLWNoZWNrIGNvbXBhcmF0b3IKKyAqLworI2RlZmluZSBXTTgzNTBfUENDTVBfRVJSQUNUICAgICAgICAgICAgICAgICAgICAgMHg0MDAwCisjZGVmaW5lIFdNODM1MF9QQ0NNUF9SQUlMICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAKKyNkZWZpbmUgV004MzUwX1BDQ01QX09GRl9USFJfTUFTSyAgICAgICAgICAgICAgIDB4MDA3MAorI2RlZmluZSBXTTgzNTBfUENDTVBfT05fVEhSX01BU0sgICAgICAgICAgICAgICAgMHgwMDA3CisKKy8qCisgKiBSMTgwICgweEI0KSAtIERDREMxIENvbnRyb2wKKyAqLworI2RlZmluZSBXTTgzNTBfREMxX09QRkxUICAgICAgICAgICAgICAgICAgICAgICAgMHgwNDAwCisjZGVmaW5lIFdNODM1MF9EQzFfVlNFTF9NQVNLICAgICAgICAgICAgICAgICAgICAweDAwN0YKKyNkZWZpbmUgV004MzUwX0RDMV9WU0VMX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvKgorICogUjE4MSAoMHhCNSkgLSBEQ0RDMSBUaW1lb3V0cworICovCisjZGVmaW5lIFdNODM1MF9EQzFfRVJSQUNUX01BU0sgICAgICAgICAgICAgICAgICAweEMwMDAKKyNkZWZpbmUgV004MzUwX0RDMV9FUlJBQ1RfU0hJRlQgICAgICAgICAgICAgICAgICAgICAxNAorI2RlZmluZSBXTTgzNTBfREMxX0VOU0xPVF9NQVNLICAgICAgICAgICAgICAgICAgMHgzQzAwCisjZGVmaW5lIFdNODM1MF9EQzFfRU5TTE9UX1NISUZUICAgICAgICAgICAgICAgICAgICAgMTAKKyNkZWZpbmUgV004MzUwX0RDMV9TRFNMT1RfTUFTSyAgICAgICAgICAgICAgICAgIDB4MDNDMAorI2RlZmluZSBXTTgzNTBfREMxX1VWVE9fTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMDMwCisjZGVmaW5lIFdNODM1MF9EQzFfU0RTTE9UX1NISUZUICAgICAgICAgICAgICAgICAgICAgIDYKKworLyogQml0IHZhbHVlcyBmb3IgUjE4MSAoMHhCNSkgKi8KKyNkZWZpbmUgV004MzUwX0RDMV9FUlJBQ1RfTk9ORSAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBXTTgzNTBfREMxX0VSUkFDVF9TSFVURE9XTl9DT05WICAgICAgICAgICAgICAxCisjZGVmaW5lIFdNODM1MF9EQzFfRVJSQUNUX1NIVVRET1dOX1NZUyAgICAgICAgICAgICAgIDIKKworLyoKKyAqIFIxODIgKDB4QjYpIC0gRENEQzEgTG93IFBvd2VyCisgKi8KKyNkZWZpbmUgV004MzUwX0RDMV9ISUJfTU9ERV9NQVNLICAgICAgICAgICAgICAgIDB4NzAwMAorI2RlZmluZSBXTTgzNTBfREMxX0hJQl9UUklHX01BU0sgICAgICAgICAgICAgICAgMHgwMzAwCisjZGVmaW5lIFdNODM1MF9EQzFfVklNR19NQVNLICAgICAgICAgICAgICAgICAgICAweDAwN0YKKworLyoKKyAqIFIxODMgKDB4QjcpIC0gRENEQzIgQ29udHJvbAorICovCisjZGVmaW5lIFdNODM1MF9EQzJfTU9ERSAgICAgICAgICAgICAgICAgICAgICAgICAweDQwMDAKKyNkZWZpbmUgV004MzUwX0RDMl9NT0RFX01BU0sgICAgICAgICAgICAgICAgICAgIDB4NDAwMAorI2RlZmluZSBXTTgzNTBfREMyX01PREVfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgIDE0CisjZGVmaW5lIFdNODM1MF9EQzJfSElCX01PREUgICAgICAgICAgICAgICAgICAgICAweDEwMDAKKyNkZWZpbmUgV004MzUwX0RDMl9ISUJfTU9ERV9NQVNLICAgICAgICAgICAgICAgIDB4MTAwMAorI2RlZmluZSBXTTgzNTBfREMyX0hJQl9NT0RFX1NISUZUICAgICAgICAgICAgICAgICAgIDEyCisjZGVmaW5lIFdNODM1MF9EQzJfSElCX1RSSUdfTUFTSyAgICAgICAgICAgICAgICAweDAzMDAKKyNkZWZpbmUgV004MzUwX0RDMl9ISUJfVFJJR19TSElGVCAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBXTTgzNTBfREMyX0lMSU0gICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDQwCisjZGVmaW5lIFdNODM1MF9EQzJfSUxJTV9NQVNLICAgICAgICAgICAgICAgICAgICAweDAwNDAKKyNkZWZpbmUgV004MzUwX0RDMl9JTElNX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgNgorI2RlZmluZSBXTTgzNTBfREMyX1JNUF9NQVNLICAgICAgICAgICAgICAgICAgICAgMHgwMDE4CisjZGVmaW5lIFdNODM1MF9EQzJfUk1QX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgV004MzUwX0RDMl9GQlNSQ19NQVNLICAgICAgICAgICAgICAgICAgIDB4MDAwMworI2RlZmluZSBXTTgzNTBfREMyX0ZCU1JDX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8qIEJpdCB2YWx1ZXMgZm9yIFIxODMgKDB4QjcpICovCisjZGVmaW5lIFdNODM1MF9EQzJfTU9ERV9CT09TVCAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgV004MzUwX0RDMl9NT0RFX1NXSVRDSCAgICAgICAgICAgICAgICAgICAgICAgMQorCisjZGVmaW5lIFdNODM1MF9EQzJfSElCX01PREVfQUNUSVZFICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgV004MzUwX0RDMl9ISUJfTU9ERV9ESVNBQkxFICAgICAgICAgICAgICAgICAgMAorCisjZGVmaW5lIFdNODM1MF9EQzJfSElCX1RSSUdfTk9ORSAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgV004MzUwX0RDMl9ISUJfVFJJR19MUFdSMSAgICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSBXTTgzNTBfREMyX0hJQl9UUklHX0xQV1IyICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIFdNODM1MF9EQzJfSElCX1RSSUdfTFBXUjMgICAgICAgICAgICAgICAgICAgIDMKKworI2RlZmluZSBXTTgzNTBfREMyX0lMSU1fSElHSCAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIFdNODM1MF9EQzJfSUxJTV9MT1cgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKworI2RlZmluZSBXTTgzNTBfREMyX1JNUF8zMFYgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIFdNODM1MF9EQzJfUk1QXzIwViAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgV004MzUwX0RDMl9STVBfMTBWICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBXTTgzNTBfREMyX1JNUF81ViAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCisKKyNkZWZpbmUgV004MzUwX0RDMl9GQlNSQ19GQjIgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBXTTgzNTBfREMyX0ZCU1JDX0lTSU5LQSAgICAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIFdNODM1MF9EQzJfRkJTUkNfSVNJTktCICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgV004MzUwX0RDMl9GQlNSQ19VU0IgICAgICAgICAgICAgICAgICAgICAgICAgMworCisvKgorICogUjE4NCAoMHhCOCkgLSBEQ0RDMiBUaW1lb3V0cworICovCisjZGVmaW5lIFdNODM1MF9EQzJfRVJSQUNUX01BU0sgICAgICAgICAgICAgICAgICAweEMwMDAKKyNkZWZpbmUgV004MzUwX0RDMl9FUlJBQ1RfU0hJRlQgICAgICAgICAgICAgICAgICAgICAxNAorI2RlZmluZSBXTTgzNTBfREMyX0VOU0xPVF9NQVNLICAgICAgICAgICAgICAgICAgMHgzQzAwCisjZGVmaW5lIFdNODM1MF9EQzJfRU5TTE9UX1NISUZUICAgICAgICAgICAgICAgICAgICAgMTAKKyNkZWZpbmUgV004MzUwX0RDMl9TRFNMT1RfTUFTSyAgICAgICAgICAgICAgICAgIDB4MDNDMAorI2RlZmluZSBXTTgzNTBfREMyX1VWVE9fTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMDMwCisKKy8qIEJpdCB2YWx1ZXMgZm9yIFIxODQgKDB4QjgpICovCisjZGVmaW5lIFdNODM1MF9EQzJfRVJSQUNUX05PTkUgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgV004MzUwX0RDMl9FUlJBQ1RfU0hVVERPV05fQ09OViAgICAgICAgICAgICAgMQorI2RlZmluZSBXTTgzNTBfREMyX0VSUkFDVF9TSFVURE9XTl9TWVMgICAgICAgICAgICAgICAyCisKKy8qCisgKiBSMTg2ICgweEJBKSAtIERDREMzIENvbnRyb2wKKyAqLworI2RlZmluZSBXTTgzNTBfREMzX09QRkxUICAgICAgICAgICAgICAgICAgICAgICAgMHgwNDAwCisjZGVmaW5lIFdNODM1MF9EQzNfVlNFTF9NQVNLICAgICAgICAgICAgICAgICAgICAweDAwN0YKKyNkZWZpbmUgV004MzUwX0RDM19WU0VMX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvKgorICogUjE4NyAoMHhCQikgLSBEQ0RDMyBUaW1lb3V0cworICovCisjZGVmaW5lIFdNODM1MF9EQzNfRVJSQUNUX01BU0sgICAgICAgICAgICAgICAgICAweEMwMDAKKyNkZWZpbmUgV004MzUwX0RDM19FUlJBQ1RfU0hJRlQgICAgICAgICAgICAgICAgICAgICAxNAorI2RlZmluZSBXTTgzNTBfREMzX0VOU0xPVF9NQVNLICAgICAgICAgICAgICAgICAgMHgzQzAwCisjZGVmaW5lIFdNODM1MF9EQzNfRU5TTE9UX1NISUZUICAgICAgICAgICAgICAgICAgICAgMTAKKyNkZWZpbmUgV004MzUwX0RDM19TRFNMT1RfTUFTSyAgICAgICAgICAgICAgICAgIDB4MDNDMAorI2RlZmluZSBXTTgzNTBfREMzX1VWVE9fTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMDMwCisjZGVmaW5lIFdNODM1MF9EQzNfU0RTTE9UX1NISUZUICAgICAgICAgICAgICAgICAgICAgIDYKKworLyogQml0IHZhbHVlcyBmb3IgUjE4NyAoMHhCQikgKi8KKyNkZWZpbmUgV004MzUwX0RDM19FUlJBQ1RfTk9ORSAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBXTTgzNTBfREMzX0VSUkFDVF9TSFVURE9XTl9DT05WICAgICAgICAgICAgICAxCisjZGVmaW5lIFdNODM1MF9EQzNfRVJSQUNUX1NIVVRET1dOX1NZUyAgICAgICAgICAgICAgIDIKKy8qCisgKiBSMTg4ICgweEJDKSAtIERDREMzIExvdyBQb3dlcgorICovCisjZGVmaW5lIFdNODM1MF9EQzNfSElCX01PREVfTUFTSyAgICAgICAgICAgICAgICAweDcwMDAKKyNkZWZpbmUgV004MzUwX0RDM19ISUJfVFJJR19NQVNLICAgICAgICAgICAgICAgIDB4MDMwMAorI2RlZmluZSBXTTgzNTBfREMzX1ZJTUdfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMDdGCisKKy8qCisgKiBSMTg5ICgweEJEKSAtIERDREM0IENvbnRyb2wKKyAqLworI2RlZmluZSBXTTgzNTBfREM0X09QRkxUICAgICAgICAgICAgICAgICAgICAgICAgMHgwNDAwCisjZGVmaW5lIFdNODM1MF9EQzRfVlNFTF9NQVNLICAgICAgICAgICAgICAgICAgICAweDAwN0YKKyNkZWZpbmUgV004MzUwX0RDNF9WU0VMX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvKgorICogUjE5MCAoMHhCRSkgLSBEQ0RDNCBUaW1lb3V0cworICovCisjZGVmaW5lIFdNODM1MF9EQzRfRVJSQUNUX01BU0sgICAgICAgICAgICAgICAgICAweEMwMDAKKyNkZWZpbmUgV004MzUwX0RDNF9FUlJBQ1RfU0hJRlQgICAgICAgICAgICAgICAgICAgICAxNAorI2RlZmluZSBXTTgzNTBfREM0X0VOU0xPVF9NQVNLICAgICAgICAgICAgICAgICAgMHgzQzAwCisjZGVmaW5lIFdNODM1MF9EQzRfRU5TTE9UX1NISUZUICAgICAgICAgICAgICAgICAgICAgMTAKKyNkZWZpbmUgV004MzUwX0RDNF9TRFNMT1RfTUFTSyAgICAgICAgICAgICAgICAgIDB4MDNDMAorI2RlZmluZSBXTTgzNTBfREM0X1VWVE9fTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMDMwCisjZGVmaW5lIFdNODM1MF9EQzRfU0RTTE9UX1NISUZUICAgICAgICAgICAgICAgICAgICAgIDYKKworLyogQml0IHZhbHVlcyBmb3IgUjE5MCAoMHhCRSkgKi8KKyNkZWZpbmUgV004MzUwX0RDNF9FUlJBQ1RfTk9ORSAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBXTTgzNTBfREM0X0VSUkFDVF9TSFVURE9XTl9DT05WICAgICAgICAgICAgICAxCisjZGVmaW5lIFdNODM1MF9EQzRfRVJSQUNUX1NIVVRET1dOX1NZUyAgICAgICAgICAgICAgIDIKKworLyoKKyAqIFIxOTEgKDB4QkYpIC0gRENEQzQgTG93IFBvd2VyCisgKi8KKyNkZWZpbmUgV004MzUwX0RDNF9ISUJfTU9ERV9NQVNLICAgICAgICAgICAgICAgIDB4NzAwMAorI2RlZmluZSBXTTgzNTBfREM0X0hJQl9UUklHX01BU0sgICAgICAgICAgICAgICAgMHgwMzAwCisjZGVmaW5lIFdNODM1MF9EQzRfVklNR19NQVNLICAgICAgICAgICAgICAgICAgICAweDAwN0YKKworLyoKKyAqIFIxOTIgKDB4QzApIC0gRENEQzUgQ29udHJvbAorICovCisjZGVmaW5lIFdNODM1MF9EQzVfTU9ERSAgICAgICAgICAgICAgICAgICAgICAgICAweDQwMDAKKyNkZWZpbmUgV004MzUwX0RDNV9NT0RFX01BU0sgICAgICAgICAgICAgICAgICAgIDB4NDAwMAorI2RlZmluZSBXTTgzNTBfREM1X01PREVfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgIDE0CisjZGVmaW5lIFdNODM1MF9EQzVfSElCX01PREUgICAgICAgICAgICAgICAgICAgICAweDEwMDAKKyNkZWZpbmUgV004MzUwX0RDNV9ISUJfTU9ERV9NQVNLICAgICAgICAgICAgICAgIDB4MTAwMAorI2RlZmluZSBXTTgzNTBfREM1X0hJQl9NT0RFX1NISUZUICAgICAgICAgICAgICAgICAgIDEyCisjZGVmaW5lIFdNODM1MF9EQzVfSElCX1RSSUdfTUFTSyAgICAgICAgICAgICAgICAweDAzMDAKKyNkZWZpbmUgV004MzUwX0RDNV9ISUJfVFJJR19TSElGVCAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBXTTgzNTBfREM1X0lMSU0gICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDQwCisjZGVmaW5lIFdNODM1MF9EQzVfSUxJTV9NQVNLICAgICAgICAgICAgICAgICAgICAweDAwNDAKKyNkZWZpbmUgV004MzUwX0RDNV9JTElNX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgNgorI2RlZmluZSBXTTgzNTBfREM1X1JNUF9NQVNLICAgICAgICAgICAgICAgICAgICAgMHgwMDE4CisjZGVmaW5lIFdNODM1MF9EQzVfUk1QX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgV004MzUwX0RDNV9GQlNSQ19NQVNLICAgICAgICAgICAgICAgICAgIDB4MDAwMworI2RlZmluZSBXTTgzNTBfREM1X0ZCU1JDX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8qIEJpdCB2YWx1ZXMgZm9yIFIxOTIgKDB4QzApICovCisjZGVmaW5lIFdNODM1MF9EQzVfTU9ERV9CT09TVCAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgV004MzUwX0RDNV9NT0RFX1NXSVRDSCAgICAgICAgICAgICAgICAgICAgICAgMQorCisjZGVmaW5lIFdNODM1MF9EQzVfSElCX01PREVfQUNUSVZFICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgV004MzUwX0RDNV9ISUJfTU9ERV9ESVNBQkxFICAgICAgICAgICAgICAgICAgMAorCisjZGVmaW5lIFdNODM1MF9EQzVfSElCX1RSSUdfTk9ORSAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgV004MzUwX0RDNV9ISUJfVFJJR19MUFdSMSAgICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSBXTTgzNTBfREM1X0hJQl9UUklHX0xQV1IyICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIFdNODM1MF9EQzVfSElCX1RSSUdfTFBXUjMgICAgICAgICAgICAgICAgICAgIDMKKworI2RlZmluZSBXTTgzNTBfREM1X0lMSU1fSElHSCAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIFdNODM1MF9EQzVfSUxJTV9MT1cgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKworI2RlZmluZSBXTTgzNTBfREM1X1JNUF8zMFYgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIFdNODM1MF9EQzVfUk1QXzIwViAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgV004MzUwX0RDNV9STVBfMTBWICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBXTTgzNTBfREM1X1JNUF81ViAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCisKKyNkZWZpbmUgV004MzUwX0RDNV9GQlNSQ19GQjIgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBXTTgzNTBfREM1X0ZCU1JDX0lTSU5LQSAgICAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIFdNODM1MF9EQzVfRkJTUkNfSVNJTktCICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgV004MzUwX0RDNV9GQlNSQ19VU0IgICAgICAgICAgICAgICAgICAgICAgICAgMworCisvKgorICogUjE5MyAoMHhDMSkgLSBEQ0RDNSBUaW1lb3V0cworICovCisjZGVmaW5lIFdNODM1MF9EQzVfRVJSQUNUX01BU0sgICAgICAgICAgICAgICAgICAweEMwMDAKKyNkZWZpbmUgV004MzUwX0RDNV9FUlJBQ1RfU0hJRlQgICAgICAgICAgICAgICAgICAgICAxNAorI2RlZmluZSBXTTgzNTBfREM1X0VOU0xPVF9NQVNLICAgICAgICAgICAgICAgICAgMHgzQzAwCisjZGVmaW5lIFdNODM1MF9EQzVfRU5TTE9UX1NISUZUICAgICAgICAgICAgICAgICAgICAgMTAKKyNkZWZpbmUgV004MzUwX0RDNV9TRFNMT1RfTUFTSyAgICAgICAgICAgICAgICAgIDB4MDNDMAorI2RlZmluZSBXTTgzNTBfREM1X1VWVE9fTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMDMwCisjZGVmaW5lIFdNODM1MF9EQzVfU0RTTE9UX1NISUZUICAgICAgICAgICAgICAgICAgICAgIDYKKworLyogQml0IHZhbHVlcyBmb3IgUjE5MyAoMHhDMSkgKi8KKyNkZWZpbmUgV004MzUwX0RDNV9FUlJBQ1RfTk9ORSAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBXTTgzNTBfREM1X0VSUkFDVF9TSFVURE9XTl9DT05WICAgICAgICAgICAgICAxCisjZGVmaW5lIFdNODM1MF9EQzVfRVJSQUNUX1NIVVRET1dOX1NZUyAgICAgICAgICAgICAgIDIKKworLyoKKyAqIFIxOTUgKDB4QzMpIC0gRENEQzYgQ29udHJvbAorICovCisjZGVmaW5lIFdNODM1MF9EQzZfT1BGTFQgICAgICAgICAgICAgICAgICAgICAgICAweDA0MDAKKyNkZWZpbmUgV004MzUwX0RDNl9WU0VMX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDA3RgorI2RlZmluZSBXTTgzNTBfREM2X1ZTRUxfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8qCisgKiBSMTk2ICgweEM0KSAtIERDREM2IFRpbWVvdXRzCisgKi8KKyNkZWZpbmUgV004MzUwX0RDNl9FUlJBQ1RfTUFTSyAgICAgICAgICAgICAgICAgIDB4QzAwMAorI2RlZmluZSBXTTgzNTBfREM2X0VSUkFDVF9TSElGVCAgICAgICAgICAgICAgICAgICAgIDE0CisjZGVmaW5lIFdNODM1MF9EQzZfRU5TTE9UX01BU0sgICAgICAgICAgICAgICAgICAweDNDMDAKKyNkZWZpbmUgV004MzUwX0RDNl9FTlNMT1RfU0hJRlQgICAgICAgICAgICAgICAgICAgICAxMAorI2RlZmluZSBXTTgzNTBfREM2X1NEU0xPVF9NQVNLICAgICAgICAgICAgICAgICAgMHgwM0MwCisjZGVmaW5lIFdNODM1MF9EQzZfVVZUT19NQVNLICAgICAgICAgICAgICAgICAgICAweDAwMzAKKyNkZWZpbmUgV004MzUwX0RDNl9TRFNMT1RfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgNgorCisvKiBCaXQgdmFsdWVzIGZvciBSMTk2ICgweEM0KSAqLworI2RlZmluZSBXTTgzNTBfREM2X0VSUkFDVF9OT05FICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIFdNODM1MF9EQzZfRVJSQUNUX1NIVVRET1dOX0NPTlYgICAgICAgICAgICAgIDEKKyNkZWZpbmUgV004MzUwX0RDNl9FUlJBQ1RfU0hVVERPV05fU1lTICAgICAgICAgICAgICAgMgorCisvKgorICogUjE5NyAoMHhDNSkgLSBEQ0RDNiBMb3cgUG93ZXIKKyAqLworI2RlZmluZSBXTTgzNTBfREM2X0hJQl9NT0RFX01BU0sgICAgICAgICAgICAgICAgMHg3MDAwCisjZGVmaW5lIFdNODM1MF9EQzZfSElCX1RSSUdfTUFTSyAgICAgICAgICAgICAgICAweDAzMDAKKyNkZWZpbmUgV004MzUwX0RDNl9WSU1HX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDA3RgorCisvKgorICogUjE5OSAoMHhDNykgLSBMaW1pdCBTd2l0Y2ggQ29udHJvbAorICovCisjZGVmaW5lIFdNODM1MF9MU19FUlJBQ1RfTUFTSyAgICAgICAgICAgICAgICAgICAweEMwMDAKKyNkZWZpbmUgV004MzUwX0xTX0VSUkFDVF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAxNAorI2RlZmluZSBXTTgzNTBfTFNfRU5TTE9UX01BU0sgICAgICAgICAgICAgICAgICAgMHgzQzAwCisjZGVmaW5lIFdNODM1MF9MU19FTlNMT1RfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgMTAKKyNkZWZpbmUgV004MzUwX0xTX1NEU0xPVF9NQVNLICAgICAgICAgICAgICAgICAgIDB4MDNDMAorI2RlZmluZSBXTTgzNTBfTFNfU0RTTE9UX1NISUZUICAgICAgICAgICAgICAgICAgICAgICA2CisjZGVmaW5lIFdNODM1MF9MU19ISUJfTU9ERSAgICAgICAgICAgICAgICAgICAgICAweDAwMTAKKyNkZWZpbmUgV004MzUwX0xTX0hJQl9NT0RFX01BU0sgICAgICAgICAgICAgICAgIDB4MDAxMAorI2RlZmluZSBXTTgzNTBfTFNfSElCX01PREVfU0hJRlQgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIFdNODM1MF9MU19ISUJfUFJPVCAgICAgICAgICAgICAgICAgICAgICAweDAwMDIKKyNkZWZpbmUgV004MzUwX0xTX0hJQl9QUk9UX01BU0sgICAgICAgICAgICAgICAgIDB4MDAwMgorI2RlZmluZSBXTTgzNTBfTFNfSElCX1BST1RfU0hJRlQgICAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIFdNODM1MF9MU19QUk9UICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEKKyNkZWZpbmUgV004MzUwX0xTX1BST1RfTUFTSyAgICAgICAgICAgICAgICAgICAgIDB4MDAwMQorI2RlZmluZSBXTTgzNTBfTFNfUFJPVF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8qIEJpdCB2YWx1ZXMgZm9yIFIxOTkgKDB4QzcpICovCisjZGVmaW5lIFdNODM1MF9MU19FUlJBQ1RfTk9ORSAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBXTTgzNTBfTFNfRVJSQUNUX1NIVVRET1dOX0NPTlYgICAgICAgICAgICAgIDEKKyNkZWZpbmUgV004MzUwX0xTX0VSUkFDVF9TSFVURE9XTl9TWVMgICAgICAgICAgICAgICAyCisKKy8qCisgKiBSMjAwICgweEM4KSAtIExETzEgQ29udHJvbAorICovCisjZGVmaW5lIFdNODM1MF9MRE8xX1NXSSAgICAgICAgICAgICAgICAgICAgICAgICAweDQwMDAKKyNkZWZpbmUgV004MzUwX0xETzFfT1BGTFQgICAgICAgICAgICAgICAgICAgICAgIDB4MDQwMAorI2RlZmluZSBXTTgzNTBfTERPMV9WU0VMX01BU0sgICAgICAgICAgICAgICAgICAgMHgwMDFGCisjZGVmaW5lIFdNODM1MF9MRE8xX1ZTRUxfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgIDAKKworLyoKKyAqIFIyMDEgKDB4QzkpIC0gTERPMSBUaW1lb3V0cworICovCisjZGVmaW5lIFdNODM1MF9MRE8xX0VSUkFDVF9NQVNLICAgICAgICAgICAgICAgICAweEMwMDAKKyNkZWZpbmUgV004MzUwX0xETzFfRVJSQUNUX1NISUZUICAgICAgICAgICAgICAgICAgICAxNAorI2RlZmluZSBXTTgzNTBfTERPMV9FTlNMT1RfTUFTSyAgICAgICAgICAgICAgICAgMHgzQzAwCisjZGVmaW5lIFdNODM1MF9MRE8xX0VOU0xPVF9TSElGVCAgICAgICAgICAgICAgICAgICAgMTAKKyNkZWZpbmUgV004MzUwX0xETzFfU0RTTE9UX01BU0sgICAgICAgICAgICAgICAgIDB4MDNDMAorI2RlZmluZSBXTTgzNTBfTERPMV9VVlRPX01BU0sgICAgICAgICAgICAgICAgICAgMHgwMDMwCisjZGVmaW5lIFdNODM1MF9MRE8xX1NEU0xPVF9TSElGVCAgICAgICAgICAgICAgICAgICAgIDYKKworLyogQml0IHZhbHVlcyBmb3IgUjIwMSAoMHhDOSkgKi8KKyNkZWZpbmUgV004MzUwX0xETzFfRVJSQUNUX05PTkUgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgV004MzUwX0xETzFfRVJSQUNUX1NIVVRET1dOX0NPTlYgICAgICAgICAgICAgIDEKKyNkZWZpbmUgV004MzUwX0xETzFfRVJSQUNUX1NIVVRET1dOX1NZUyAgICAgICAgICAgICAgIDIKKworLyoKKyAqIFIyMDIgKDB4Q0EpIC0gTERPMSBMb3cgUG93ZXIKKyAqLworI2RlZmluZSBXTTgzNTBfTERPMV9ISUJfTU9ERV9NQVNLICAgICAgICAgICAgICAgMHgzMDAwCisjZGVmaW5lIFdNODM1MF9MRE8xX0hJQl9UUklHX01BU0sgICAgICAgICAgICAgICAweDAzMDAKKyNkZWZpbmUgV004MzUwX0xETzFfVklNR19NQVNLICAgICAgICAgICAgICAgICAgIDB4MDAxRgorI2RlZmluZSBXTTgzNTBfTERPMV9ISUJfTU9ERV9ESVMJCSgweDEgPDwgMTIpCisKKworLyoKKyAqIFIyMDMgKDB4Q0IpIC0gTERPMiBDb250cm9sCisgKi8KKyNkZWZpbmUgV004MzUwX0xETzJfU1dJICAgICAgICAgICAgICAgICAgICAgICAgIDB4NDAwMAorI2RlZmluZSBXTTgzNTBfTERPMl9PUEZMVCAgICAgICAgICAgICAgICAgICAgICAgMHgwNDAwCisjZGVmaW5lIFdNODM1MF9MRE8yX1ZTRUxfTUFTSyAgICAgICAgICAgICAgICAgICAweDAwMUYKKyNkZWZpbmUgV004MzUwX0xETzJfVlNFTF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgMAorCisvKgorICogUjIwNCAoMHhDQykgLSBMRE8yIFRpbWVvdXRzCisgKi8KKyNkZWZpbmUgV004MzUwX0xETzJfRVJSQUNUX01BU0sgICAgICAgICAgICAgICAgIDB4QzAwMAorI2RlZmluZSBXTTgzNTBfTERPMl9FUlJBQ1RfU0hJRlQgICAgICAgICAgICAgICAgICAgIDE0CisjZGVmaW5lIFdNODM1MF9MRE8yX0VOU0xPVF9NQVNLICAgICAgICAgICAgICAgICAweDNDMDAKKyNkZWZpbmUgV004MzUwX0xETzJfRU5TTE9UX1NISUZUICAgICAgICAgICAgICAgICAgICAxMAorI2RlZmluZSBXTTgzNTBfTERPMl9TRFNMT1RfTUFTSyAgICAgICAgICAgICAgICAgMHgwM0MwCisjZGVmaW5lIFdNODM1MF9MRE8yX1NEU0xPVF9TSElGVCAgICAgICAgICAgICAgICAgICAgIDYKKworLyogQml0IHZhbHVlcyBmb3IgUjIwNCAoMHhDQykgKi8KKyNkZWZpbmUgV004MzUwX0xETzJfRVJSQUNUX05PTkUgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgV004MzUwX0xETzJfRVJSQUNUX1NIVVRET1dOX0NPTlYgICAgICAgICAgICAgIDEKKyNkZWZpbmUgV004MzUwX0xETzJfRVJSQUNUX1NIVVRET1dOX1NZUyAgICAgICAgICAgICAgIDIKKworLyoKKyAqIFIyMDUgKDB4Q0QpIC0gTERPMiBMb3cgUG93ZXIKKyAqLworI2RlZmluZSBXTTgzNTBfTERPMl9ISUJfTU9ERV9NQVNLICAgICAgICAgICAgICAgMHgzMDAwCisjZGVmaW5lIFdNODM1MF9MRE8yX0hJQl9UUklHX01BU0sgICAgICAgICAgICAgICAweDAzMDAKKyNkZWZpbmUgV004MzUwX0xETzJfVklNR19NQVNLICAgICAgICAgICAgICAgICAgIDB4MDAxRgorCisvKgorICogUjIwNiAoMHhDRSkgLSBMRE8zIENvbnRyb2wKKyAqLworI2RlZmluZSBXTTgzNTBfTERPM19TV0kgICAgICAgICAgICAgICAgICAgICAgICAgMHg0MDAwCisjZGVmaW5lIFdNODM1MF9MRE8zX09QRkxUICAgICAgICAgICAgICAgICAgICAgICAweDA0MDAKKyNkZWZpbmUgV004MzUwX0xETzNfVlNFTF9NQVNLICAgICAgICAgICAgICAgICAgIDB4MDAxRgorI2RlZmluZSBXTTgzNTBfTERPM19WU0VMX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8qCisgKiBSMjA3ICgweENGKSAtIExETzMgVGltZW91dHMKKyAqLworI2RlZmluZSBXTTgzNTBfTERPM19FUlJBQ1RfTUFTSyAgICAgICAgICAgICAgICAgMHhDMDAwCisjZGVmaW5lIFdNODM1MF9MRE8zX0VSUkFDVF9TSElGVCAgICAgICAgICAgICAgICAgICAgMTQKKyNkZWZpbmUgV004MzUwX0xETzNfRU5TTE9UX01BU0sgICAgICAgICAgICAgICAgIDB4M0MwMAorI2RlZmluZSBXTTgzNTBfTERPM19FTlNMT1RfU0hJRlQgICAgICAgICAgICAgICAgICAgIDEwCisjZGVmaW5lIFdNODM1MF9MRE8zX1NEU0xPVF9NQVNLICAgICAgICAgICAgICAgICAweDAzQzAKKyNkZWZpbmUgV004MzUwX0xETzNfVVZUT19NQVNLICAgICAgICAgICAgICAgICAgIDB4MDAzMAorI2RlZmluZSBXTTgzNTBfTERPM19TRFNMT1RfU0hJRlQgICAgICAgICAgICAgICAgICAgICA2CisKKy8qIEJpdCB2YWx1ZXMgZm9yIFIyMDcgKDB4Q0YpICovCisjZGVmaW5lIFdNODM1MF9MRE8zX0VSUkFDVF9OT05FICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIFdNODM1MF9MRE8zX0VSUkFDVF9TSFVURE9XTl9DT05WICAgICAgICAgICAgICAxCisjZGVmaW5lIFdNODM1MF9MRE8zX0VSUkFDVF9TSFVURE9XTl9TWVMgICAgICAgICAgICAgICAyCisKKy8qCisgKiBSMjA4ICgweEQwKSAtIExETzMgTG93IFBvd2VyCisgKi8KKyNkZWZpbmUgV004MzUwX0xETzNfSElCX01PREVfTUFTSyAgICAgICAgICAgICAgIDB4MzAwMAorI2RlZmluZSBXTTgzNTBfTERPM19ISUJfVFJJR19NQVNLICAgICAgICAgICAgICAgMHgwMzAwCisjZGVmaW5lIFdNODM1MF9MRE8zX1ZJTUdfTUFTSyAgICAgICAgICAgICAgICAgICAweDAwMUYKKworLyoKKyAqIFIyMDkgKDB4RDEpIC0gTERPNCBDb250cm9sCisgKi8KKyNkZWZpbmUgV004MzUwX0xETzRfU1dJICAgICAgICAgICAgICAgICAgICAgICAgIDB4NDAwMAorI2RlZmluZSBXTTgzNTBfTERPNF9PUEZMVCAgICAgICAgICAgICAgICAgICAgICAgMHgwNDAwCisjZGVmaW5lIFdNODM1MF9MRE80X1ZTRUxfTUFTSyAgICAgICAgICAgICAgICAgICAweDAwMUYKKyNkZWZpbmUgV004MzUwX0xETzRfVlNFTF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgMAorCisvKgorICogUjIxMCAoMHhEMikgLSBMRE80IFRpbWVvdXRzCisgKi8KKyNkZWZpbmUgV004MzUwX0xETzRfRVJSQUNUX01BU0sgICAgICAgICAgICAgICAgIDB4QzAwMAorI2RlZmluZSBXTTgzNTBfTERPNF9FUlJBQ1RfU0hJRlQgICAgICAgICAgICAgICAgICAgIDE0CisjZGVmaW5lIFdNODM1MF9MRE80X0VOU0xPVF9NQVNLICAgICAgICAgICAgICAgICAweDNDMDAKKyNkZWZpbmUgV004MzUwX0xETzRfRU5TTE9UX1NISUZUICAgICAgICAgICAgICAgICAgICAxMAorI2RlZmluZSBXTTgzNTBfTERPNF9TRFNMT1RfTUFTSyAgICAgICAgICAgICAgICAgMHgwM0MwCisjZGVmaW5lIFdNODM1MF9MRE80X1VWVE9fTUFTSyAgICAgICAgICAgICAgICAgICAweDAwMzAKKyNkZWZpbmUgV004MzUwX0xETzRfU0RTTE9UX1NISUZUICAgICAgICAgICAgICAgICAgICAgNgorCisvKiBCaXQgdmFsdWVzIGZvciBSMjEwICgweEQyKSAqLworI2RlZmluZSBXTTgzNTBfTERPNF9FUlJBQ1RfTk9ORSAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBXTTgzNTBfTERPNF9FUlJBQ1RfU0hVVERPV05fQ09OViAgICAgICAgICAgICAgMQorI2RlZmluZSBXTTgzNTBfTERPNF9FUlJBQ1RfU0hVVERPV05fU1lTICAgICAgICAgICAgICAgMgorCisvKgorICogUjIxMSAoMHhEMykgLSBMRE80IExvdyBQb3dlcgorICovCisjZGVmaW5lIFdNODM1MF9MRE80X0hJQl9NT0RFX01BU0sgICAgICAgICAgICAgICAweDMwMDAKKyNkZWZpbmUgV004MzUwX0xETzRfSElCX1RSSUdfTUFTSyAgICAgICAgICAgICAgIDB4MDMwMAorI2RlZmluZSBXTTgzNTBfTERPNF9WSU1HX01BU0sgICAgICAgICAgICAgICAgICAgMHgwMDFGCisKKy8qCisgKiBSMjE1ICgweEQ3KSAtIFZDQ19GQVVMVCBNYXNrcworICovCisjZGVmaW5lIFdNODM1MF9MU19GQVVMVCAgICAgICAgICAgICAgICAgICAgICAgICAweDgwMDAKKyNkZWZpbmUgV004MzUwX0xETzRfRkFVTFQgICAgICAgICAgICAgICAgICAgICAgIDB4MDgwMAorI2RlZmluZSBXTTgzNTBfTERPM19GQVVMVCAgICAgICAgICAgICAgICAgICAgICAgMHgwNDAwCisjZGVmaW5lIFdNODM1MF9MRE8yX0ZBVUxUICAgICAgICAgICAgICAgICAgICAgICAweDAyMDAKKyNkZWZpbmUgV004MzUwX0xETzFfRkFVTFQgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMAorI2RlZmluZSBXTTgzNTBfREM2X0ZBVUxUICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDIwCisjZGVmaW5lIFdNODM1MF9EQzVfRkFVTFQgICAgICAgICAgICAgICAgICAgICAgICAweDAwMTAKKyNkZWZpbmUgV004MzUwX0RDNF9GQVVMVCAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwOAorI2RlZmluZSBXTTgzNTBfREMzX0ZBVUxUICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA0CisjZGVmaW5lIFdNODM1MF9EQzJfRkFVTFQgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDIKKyNkZWZpbmUgV004MzUwX0RDMV9GQVVMVCAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMQorCisvKgorICogUjIxNiAoMHhEOCkgLSBNYWluIEJhbmRnYXAgQ29udHJvbAorICovCisjZGVmaW5lIFdNODM1MF9NQkdfTE9BRF9GVVNFUyAgICAgICAgICAgICAgICAgICAweDgwMDAKKyNkZWZpbmUgV004MzUwX01CR19GVVNFX1dQUkVQICAgICAgICAgICAgICAgICAgIDB4NDAwMAorI2RlZmluZSBXTTgzNTBfTUJHX0ZVU0VfV1JJVEUgICAgICAgICAgICAgICAgICAgMHgyMDAwCisjZGVmaW5lIFdNODM1MF9NQkdfRlVTRV9UUklNX01BU0sgICAgICAgICAgICAgICAweDFGMDAKKyNkZWZpbmUgV004MzUwX01CR19UUklNX1NSQyAgICAgICAgICAgICAgICAgICAgIDB4MDAyMAorI2RlZmluZSBXTTgzNTBfTUJHX1VTRVJfVFJJTV9NQVNLICAgICAgICAgICAgICAgMHgwMDFGCisKKy8qCisgKiBSMjE3ICgweEQ5KSAtIE9TQyBDb250cm9sCisgKi8KKyNkZWZpbmUgV004MzUwX09TQ19MT0FEX0ZVU0VTICAgICAgICAgICAgICAgICAgIDB4ODAwMAorI2RlZmluZSBXTTgzNTBfT1NDX0ZVU0VfV1BSRVAgICAgICAgICAgICAgICAgICAgMHg0MDAwCisjZGVmaW5lIFdNODM1MF9PU0NfRlVTRV9XUklURSAgICAgICAgICAgICAgICAgICAweDIwMDAKKyNkZWZpbmUgV004MzUwX09TQ19GVVNFX1RSSU1fTUFTSyAgICAgICAgICAgICAgIDB4MEYwMAorI2RlZmluZSBXTTgzNTBfT1NDX1RSSU1fU1JDICAgICAgICAgICAgICAgICAgICAgMHgwMDIwCisjZGVmaW5lIFdNODM1MF9PU0NfVVNFUl9UUklNX01BU0sgICAgICAgICAgICAgICAweDAwMEYKKworLyoKKyAqIFIyNDggKDB4RjgpIC0gRENEQzEgRm9yY2UgUFdNCisgKi8KKyNkZWZpbmUgV004MzUwX0RDREMxX0ZPUkNFX1BXTV9FTkEgICAgICAgICAgICAgIDB4MDAxMAorCisvKgorICogUjI1MCAoMHhGQSkgLSBEQ0RDMyBGb3JjZSBQV00KKyAqLworI2RlZmluZSBXTTgzNTBfRENEQzNfRk9SQ0VfUFdNX0VOQSAgICAgICAgICAgICAgMHgwMDEwCisKKy8qCisgKiBSMjUxICgweEZCKSAtIERDREM0IEZvcmNlIFBXTQorICovCisjZGVmaW5lIFdNODM1MF9EQ0RDNF9GT1JDRV9QV01fRU5BICAgICAgICAgICAgICAweDAwMTAKKworLyoKKyAqIFIyNTMgKDB4RkQpIC0gRENEQzEgRm9yY2UgUFdNCisgKi8KKyNkZWZpbmUgV004MzUwX0RDREM2X0ZPUkNFX1BXTV9FTkEgICAgICAgICAgICAgIDB4MDAxMAorCisvKgorICogRENEQydzCisgKi8KKyNkZWZpbmUgV004MzUwX0RDRENfMQkJCQkwCisjZGVmaW5lIFdNODM1MF9EQ0RDXzIJCQkJMQorI2RlZmluZSBXTTgzNTBfRENEQ18zCQkJCTIKKyNkZWZpbmUgV004MzUwX0RDRENfNAkJCQkzCisjZGVmaW5lIFdNODM1MF9EQ0RDXzUJCQkJNAorI2RlZmluZSBXTTgzNTBfRENEQ182CQkJCTUKKworLyogRENEQyBtb2RlcyAqLworI2RlZmluZSBXTTgzNTBfRENEQ19BQ1RJVkVfU1RBTkRCWQkJMAorI2RlZmluZSBXTTgzNTBfRENEQ19BQ1RJVkVfUFVMU0UJCTEKKyNkZWZpbmUgV004MzUwX0RDRENfU0xFRVBfTk9STUFMCQkwCisjZGVmaW5lIFdNODM1MF9EQ0RDX1NMRUVQX0xPVwkJCTEKKworLyogRENEQyBMb3cgcG93ZXIgKEhpYmVybmF0ZSkgbW9kZSAqLworI2RlZmluZSBXTTgzNTBfRENEQ19ISUJfTU9ERV9DVVIJCSgwIDw8IDEyKQorI2RlZmluZSBXTTgzNTBfRENEQ19ISUJfTU9ERV9JTUFHRQkJKDEgPDwgMTIpCisjZGVmaW5lIFdNODM1MF9EQ0RDX0hJQl9NT0RFX1NUQU5EQlkJCSgyIDw8IDEyKQorI2RlZmluZSBXTTgzNTBfRENEQ19ISUJfTU9ERV9MRE8JCSg0IDw8IDEyKQorI2RlZmluZSBXTTgzNTBfRENEQ19ISUJfTU9ERV9MRE9fSU0JCSg1IDw8IDEyKQorI2RlZmluZSBXTTgzNTBfRENEQ19ISUJfTU9ERV9ESVMJCSg3IDw8IDEyKQorI2RlZmluZSBXTTgzNTBfRENEQ19ISUJfTU9ERV9NQVNLCQkoNyA8PCAxMikKKworLyogRENEQyBMb3cgUG93ZXIgKEhpYmVybmF0ZSkgc2lnbmFsICovCisjZGVmaW5lIFdNODM1MF9EQ0RDX0hJQl9TSUdfUkVHCQkJKDAgPDwgOCkKKyNkZWZpbmUgV004MzUwX0RDRENfSElCX1NJR19MUFdSMQkJKDEgPDwgOCkKKyNkZWZpbmUgV004MzUwX0RDRENfSElCX1NJR19MUFdSMgkJKDIgPDwgOCkKKyNkZWZpbmUgV004MzUwX0RDRENfSElCX1NJR19MUFdSMwkJKDMgPDwgOCkKKworLyogTERPIExvdyBwb3dlciAoSGliZXJuYXRlKSBtb2RlICovCisjZGVmaW5lIFdNODM1MF9MRE9fSElCX01PREVfSU1BR0UJCSgwIDw8IDApCisjZGVmaW5lIFdNODM1MF9MRE9fSElCX01PREVfRElTCQkJKDEgPDwgMCkKKworLyogTERPIExvdyBQb3dlciAoSGliZXJuYXRlKSBzaWduYWwgKi8KKyNkZWZpbmUgV004MzUwX0xET19ISUJfU0lHX1JFRwkJCSgwIDw8IDgpCisjZGVmaW5lIFdNODM1MF9MRE9fSElCX1NJR19MUFdSMQkJKDEgPDwgOCkKKyNkZWZpbmUgV004MzUwX0xET19ISUJfU0lHX0xQV1IyCQkoMiA8PCA4KQorI2RlZmluZSBXTTgzNTBfTERPX0hJQl9TSUdfTFBXUjMJCSgzIDw8IDgpCisKKy8qCisgKiBMRE9zCisgKi8KKyNkZWZpbmUgV004MzUwX0xET18xCQkJCTYKKyNkZWZpbmUgV004MzUwX0xET18yCQkJCTcKKyNkZWZpbmUgV004MzUwX0xET18zCQkJCTgKKyNkZWZpbmUgV004MzUwX0xET180CQkJCTkKKworLyoKKyAqIElTSU5LcworICovCisjZGVmaW5lIFdNODM1MF9JU0lOS19BCQkJCTEwCisjZGVmaW5lIFdNODM1MF9JU0lOS19CCQkJCTExCisKKyNkZWZpbmUgV004MzUwX0lTSU5LX01PREVfQk9PU1QJCQkwCisjZGVmaW5lIFdNODM1MF9JU0lOS19NT0RFX1NXSVRDSAkJMQorI2RlZmluZSBXTTgzNTBfSVNJTktfSUxJTV9OT1JNQUwJCTAKKyNkZWZpbmUgV004MzUwX0lTSU5LX0lMSU1fTE9XCQkJMQorCisjZGVmaW5lIFdNODM1MF9JU0lOS19GTEFTSF9ESVNBQkxFCQkwCisjZGVmaW5lIFdNODM1MF9JU0lOS19GTEFTSF9FTkFCTEUJCTEKKyNkZWZpbmUgV004MzUwX0lTSU5LX0ZMQVNIX1RSSUdfQklUCQkwCisjZGVmaW5lIFdNODM1MF9JU0lOS19GTEFTSF9UUklHX0dQSU8JCTEKKyNkZWZpbmUgV004MzUwX0lTSU5LX0ZMQVNIX01PREVfRU4JCSgxIDw8IDEzKQorI2RlZmluZSBXTTgzNTBfSVNJTktfRkxBU0hfTU9ERV9ESVMJCSgwIDw8IDEzKQorI2RlZmluZSBXTTgzNTBfSVNJTktfRkxBU0hfRFVSXzMyTVMJCSgwIDw8IDgpCisjZGVmaW5lIFdNODM1MF9JU0lOS19GTEFTSF9EVVJfNjRNUwkJKDEgPDwgOCkKKyNkZWZpbmUgV004MzUwX0lTSU5LX0ZMQVNIX0RVUl85Nk1TCQkoMiA8PCA4KQorI2RlZmluZSBXTTgzNTBfSVNJTktfRkxBU0hfRFVSXzEwMjRNUwkJKDMgPDwgOCkKKyNkZWZpbmUgV004MzUwX0lTSU5LX0ZMQVNIX09OX0lOU1RBTlQJCSgwIDw8IDQpCisjZGVmaW5lIFdNODM1MF9JU0lOS19GTEFTSF9PTl8wXzI1UwkJKDEgPDwgNCkKKyNkZWZpbmUgV004MzUwX0lTSU5LX0ZMQVNIX09OXzBfNTBTCQkoMiA8PCA0KQorI2RlZmluZSBXTTgzNTBfSVNJTktfRkxBU0hfT05fMV8wMFMJCSgzIDw8IDQpCisjZGVmaW5lIFdNODM1MF9JU0lOS19GTEFTSF9PTl8xXzk1UwkJKDEgPDwgNCkKKyNkZWZpbmUgV004MzUwX0lTSU5LX0ZMQVNIX09OXzNfOTFTCQkoMiA8PCA0KQorI2RlZmluZSBXTTgzNTBfSVNJTktfRkxBU0hfT05fN184MFMJCSgzIDw8IDQpCisjZGVmaW5lIFdNODM1MF9JU0lOS19GTEFTSF9PRkZfSU5TVEFOVAkJKDAgPDwgMCkKKyNkZWZpbmUgV004MzUwX0lTSU5LX0ZMQVNIX09GRl8wXzI1UwkJKDEgPDwgMCkKKyNkZWZpbmUgV004MzUwX0lTSU5LX0ZMQVNIX09GRl8wXzUwUwkJKDIgPDwgMCkKKyNkZWZpbmUgV004MzUwX0lTSU5LX0ZMQVNIX09GRl8xXzAwUwkJKDMgPDwgMCkKKyNkZWZpbmUgV004MzUwX0lTSU5LX0ZMQVNIX09GRl8xXzk1UwkJKDEgPDwgMCkKKyNkZWZpbmUgV004MzUwX0lTSU5LX0ZMQVNIX09GRl8zXzkxUwkJKDIgPDwgMCkKKyNkZWZpbmUgV004MzUwX0lTSU5LX0ZMQVNIX09GRl83XzgwUwkJKDMgPDwgMCkKKworLyoKKyAqIFJlZ3VsYXRvciBJbnRlcnJ1cHRzLgorICovCisjZGVmaW5lIFdNODM1MF9JUlFfQ1MxCQkJCTEzCisjZGVmaW5lIFdNODM1MF9JUlFfQ1MyCQkJCTE0CisjZGVmaW5lIFdNODM1MF9JUlFfVVZfTERPNAkJCTI1CisjZGVmaW5lIFdNODM1MF9JUlFfVVZfTERPMwkJCTI2CisjZGVmaW5lIFdNODM1MF9JUlFfVVZfTERPMgkJCTI3CisjZGVmaW5lIFdNODM1MF9JUlFfVVZfTERPMQkJCTI4CisjZGVmaW5lIFdNODM1MF9JUlFfVVZfREM2CQkJMjkKKyNkZWZpbmUgV004MzUwX0lSUV9VVl9EQzUJCQkzMAorI2RlZmluZSBXTTgzNTBfSVJRX1VWX0RDNAkJCTMxCisjZGVmaW5lIFdNODM1MF9JUlFfVVZfREMzCQkJMzIKKyNkZWZpbmUgV004MzUwX0lSUV9VVl9EQzIJCQkzMworI2RlZmluZSBXTTgzNTBfSVJRX1VWX0RDMQkJCTM0CisjZGVmaW5lIFdNODM1MF9JUlFfT0NfTFMJCQkzNQorCisjZGVmaW5lIE5VTV9XTTgzNTBfUkVHVUxBVE9SUwkJCTEyCisKK3N0cnVjdCB3bTgzNTA7CitzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlOworc3RydWN0IHJlZ3VsYXRvcl9pbml0X2RhdGE7CisKK3N0cnVjdCB3bTgzNTBfcG1pYyB7CisJLyogSVNJTksgdG8gRENEQyBtYXBwaW5nICovCisJaW50IGlzaW5rX0FfZGNkYzsKKwlpbnQgaXNpbmtfQl9kY2RjOworCisJLyogaGliZXJuYXRlIGNvbmZpZ3MgKi8KKwl1MTYgZGNkYzFfaGliX21vZGU7CisJdTE2IGRjZGMzX2hpYl9tb2RlOworCXUxNiBkY2RjNF9oaWJfbW9kZTsKKwl1MTYgZGNkYzZfaGliX21vZGU7CisKKwkvKiByZWd1bGF0b3IgZGV2aWNlcyAqLworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXZbTlVNX1dNODM1MF9SRUdVTEFUT1JTXTsKK307CisKK2ludCB3bTgzNTBfcmVnaXN0ZXJfcmVndWxhdG9yKHN0cnVjdCB3bTgzNTAgKndtODM1MCwgaW50IHJlZywKKwkJCSAgICAgIHN0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhICppbml0ZGF0YSk7CisKKy8qCisgKiBBZGRpdGlvbmFsIERDREMgY29udHJvbCBub3Qgc3VwcG9ydGVkIHZpYSByZWd1bGF0b3IgQVBJCisgKi8KK2ludCB3bTgzNTBfZGNkY19zZXRfc2xvdChzdHJ1Y3Qgd204MzUwICp3bTgzNTAsIGludCBkY2RjLCB1MTYgc3RhcnQsCisJCQkgdTE2IHN0b3AsIHUxNiBmYXVsdCk7CitpbnQgd204MzUwX2RjZGMyNV9zZXRfbW9kZShzdHJ1Y3Qgd204MzUwICp3bTgzNTAsIGludCBkY2RjLCB1MTYgbW9kZSwKKwkJCSAgIHUxNiBpbGltLCB1MTYgcmFtcCwgdTE2IGZlZWRiYWNrKTsKKworLyoKKyAqIEFkZGl0aW9uYWwgTERPIGNvbnRyb2wgbm90IHN1cHBvcnRlZCB2aWEgcmVndWxhdG9yIEFQSQorICovCitpbnQgd204MzUwX2xkb19zZXRfc2xvdChzdHJ1Y3Qgd204MzUwICp3bTgzNTAsIGludCBsZG8sIHUxNiBzdGFydCwgdTE2IHN0b3ApOworCisvKgorICogQWRkaXRpb25hbCBJU0lOSyBjb250cm9sIG5vdCBzdXBwb3J0ZWQgdmlhIHJlZ3VsYXRvciBBUEkKKyAqLworaW50IHdtODM1MF9pc2lua19zZXRfZmxhc2goc3RydWN0IHdtODM1MCAqd204MzUwLCBpbnQgaXNpbmssIHUxNiBtb2RlLAorCQkJICAgdTE2IHRyaWdnZXIsIHUxNiBkdXJhdGlvbiwgdTE2IG9uX3JhbXAsCisJCQkgICB1MTYgb2ZmX3JhbXAsIHUxNiBkcml2ZSk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tZmQvd204MzUwL3J0Yy5oIGIvaW5jbHVkZS9saW51eC9tZmQvd204MzUwL3J0Yy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRmZGE2OWUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L21mZC93bTgzNTAvcnRjLmgKQEAgLTAsMCArMSwyNjYgQEAKKy8qCisgKiBydGMuaCAgLS0gIFJUQyBkcml2ZXIgZm9yIFdvbGZzb24gV004MzUwIFBNSUMKKyAqCisgKiBDb3B5cmlnaHQgMjAwNyBXb2xmc29uIE1pY3JvZWxlY3Ryb25pY3MgUExDCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAorICogIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgorICogIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2lmbmRlZiBfX0xJTlVYX01GRF9XTTgzNTBfUlRDX0gKKyNkZWZpbmUgX19MSU5VWF9NRkRfV004MzUwX1JUQ19ICisKKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKworLyoKKyAqIFJlZ2lzdGVyIHZhbHVlcy4KKyAqLworI2RlZmluZSBXTTgzNTBfUlRDX1NFQ09ORFNfTUlOVVRFUyAgICAgICAgICAgICAgMHgxMAorI2RlZmluZSBXTTgzNTBfUlRDX0hPVVJTX0RBWSAgICAgICAgICAgICAgICAgICAgMHgxMQorI2RlZmluZSBXTTgzNTBfUlRDX0RBVEVfTU9OVEggICAgICAgICAgICAgICAgICAgMHgxMgorI2RlZmluZSBXTTgzNTBfUlRDX1lFQVIgICAgICAgICAgICAgICAgICAgICAgICAgMHgxMworI2RlZmluZSBXTTgzNTBfQUxBUk1fU0VDT05EU19NSU5VVEVTICAgICAgICAgICAgMHgxNAorI2RlZmluZSBXTTgzNTBfQUxBUk1fSE9VUlNfREFZICAgICAgICAgICAgICAgICAgMHgxNQorI2RlZmluZSBXTTgzNTBfQUxBUk1fREFURV9NT05USCAgICAgICAgICAgICAgICAgMHgxNgorI2RlZmluZSBXTTgzNTBfUlRDX1RJTUVfQ09OVFJPTCAgICAgICAgICAgICAgICAgMHgxNworCisvKgorICogUjE2ICgweDEwKSAtIFJUQyBTZWNvbmRzL01pbnV0ZXMKKyAqLworI2RlZmluZSBXTTgzNTBfUlRDX01JTlNfTUFTSyAgICAgICAgICAgICAgICAgICAgMHg3RjAwCisjZGVmaW5lIFdNODM1MF9SVENfTUlOU19TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgV004MzUwX1JUQ19TRUNTX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDA3RgorI2RlZmluZSBXTTgzNTBfUlRDX1NFQ1NfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8qCisgKiBSMTcgKDB4MTEpIC0gUlRDIEhvdXJzL0RheQorICovCisjZGVmaW5lIFdNODM1MF9SVENfREFZX01BU0sgICAgICAgICAgICAgICAgICAgICAweDA3MDAKKyNkZWZpbmUgV004MzUwX1JUQ19EQVlfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBXTTgzNTBfUlRDX0hQTV9NQVNLICAgICAgICAgICAgICAgICAgICAgMHgwMDIwCisjZGVmaW5lIFdNODM1MF9SVENfSFBNX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgIDUKKyNkZWZpbmUgV004MzUwX1JUQ19IUlNfTUFTSyAgICAgICAgICAgICAgICAgICAgIDB4MDAxRgorI2RlZmluZSBXTTgzNTBfUlRDX0hSU19TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8qIEJpdCB2YWx1ZXMgZm9yIFIyMSAoMHgxNSkgKi8KKyNkZWZpbmUgV004MzUwX1JUQ19EQVlfU1VOICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSBXTTgzNTBfUlRDX0RBWV9NT04gICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIFdNODM1MF9SVENfREFZX1RVRSAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgV004MzUwX1JUQ19EQVlfV0VEICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBXTTgzNTBfUlRDX0RBWV9USFUgICAgICAgICAgICAgICAgICAgICAgICAgICA1CisjZGVmaW5lIFdNODM1MF9SVENfREFZX0ZSSSAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKKyNkZWZpbmUgV004MzUwX1JUQ19EQVlfU0FUICAgICAgICAgICAgICAgICAgICAgICAgICAgNworCisjZGVmaW5lIFdNODM1MF9SVENfSFBNX0FNICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgV004MzUwX1JUQ19IUE1fUE0gICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorCisvKgorICogUjE4ICgweDEyKSAtIFJUQyBEYXRlL01vbnRoCisgKi8KKyNkZWZpbmUgV004MzUwX1JUQ19NVEhfTUFTSyAgICAgICAgICAgICAgICAgICAgIDB4MUYwMAorI2RlZmluZSBXTTgzNTBfUlRDX01USF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIFdNODM1MF9SVENfREFURV9NQVNLICAgICAgICAgICAgICAgICAgICAweDAwM0YKKyNkZWZpbmUgV004MzUwX1JUQ19EQVRFX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgMAorCisvKiBCaXQgdmFsdWVzIGZvciBSMjIgKDB4MTYpICovCisjZGVmaW5lIFdNODM1MF9SVENfTVRIX0pBTiAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgV004MzUwX1JUQ19NVEhfRkVCICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBXTTgzNTBfUlRDX01USF9NQVIgICAgICAgICAgICAgICAgICAgICAgICAgICAzCisjZGVmaW5lIFdNODM1MF9SVENfTVRIX0FQUiAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgV004MzUwX1JUQ19NVEhfTUFZICAgICAgICAgICAgICAgICAgICAgICAgICAgNQorI2RlZmluZSBXTTgzNTBfUlRDX01USF9KVU4gICAgICAgICAgICAgICAgICAgICAgICAgICA2CisjZGVmaW5lIFdNODM1MF9SVENfTVRIX0pVTCAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKKyNkZWZpbmUgV004MzUwX1JUQ19NVEhfQVVHICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBXTTgzNTBfUlRDX01USF9TRVAgICAgICAgICAgICAgICAgICAgICAgICAgICA5CisjZGVmaW5lIFdNODM1MF9SVENfTVRIX09DVCAgICAgICAgICAgICAgICAgICAgICAgICAgMTAKKyNkZWZpbmUgV004MzUwX1JUQ19NVEhfTk9WICAgICAgICAgICAgICAgICAgICAgICAgICAxMQorI2RlZmluZSBXTTgzNTBfUlRDX01USF9ERUMgICAgICAgICAgICAgICAgICAgICAgICAgIDEyCisjZGVmaW5lIFdNODM1MF9SVENfTVRIX0pBTl9CQ0QgICAgICAgICAgICAgICAgICAgIDB4MDEKKyNkZWZpbmUgV004MzUwX1JUQ19NVEhfRkVCX0JDRCAgICAgICAgICAgICAgICAgICAgMHgwMgorI2RlZmluZSBXTTgzNTBfUlRDX01USF9NQVJfQkNEICAgICAgICAgICAgICAgICAgICAweDAzCisjZGVmaW5lIFdNODM1MF9SVENfTVRIX0FQUl9CQ0QgICAgICAgICAgICAgICAgICAgIDB4MDQKKyNkZWZpbmUgV004MzUwX1JUQ19NVEhfTUFZX0JDRCAgICAgICAgICAgICAgICAgICAgMHgwNQorI2RlZmluZSBXTTgzNTBfUlRDX01USF9KVU5fQkNEICAgICAgICAgICAgICAgICAgICAweDA2CisjZGVmaW5lIFdNODM1MF9SVENfTVRIX0pVTF9CQ0QgICAgICAgICAgICAgICAgICAgIDB4MDcKKyNkZWZpbmUgV004MzUwX1JUQ19NVEhfQVVHX0JDRCAgICAgICAgICAgICAgICAgICAgMHgwOAorI2RlZmluZSBXTTgzNTBfUlRDX01USF9TRVBfQkNEICAgICAgICAgICAgICAgICAgICAweDA5CisjZGVmaW5lIFdNODM1MF9SVENfTVRIX09DVF9CQ0QgICAgICAgICAgICAgICAgICAgIDB4MTAKKyNkZWZpbmUgV004MzUwX1JUQ19NVEhfTk9WX0JDRCAgICAgICAgICAgICAgICAgICAgMHgxMQorI2RlZmluZSBXTTgzNTBfUlRDX01USF9ERUNfQkNEICAgICAgICAgICAgICAgICAgICAweDEyCisKKy8qCisgKiBSMTkgKDB4MTMpIC0gUlRDIFllYXIKKyAqLworI2RlZmluZSBXTTgzNTBfUlRDX1lIVU5EUkVEU19NQVNLICAgICAgICAgICAgICAgMHgzRjAwCisjZGVmaW5lIFdNODM1MF9SVENfWUhVTkRSRURTX1NISUZUICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgV004MzUwX1JUQ19ZVU5JVFNfTUFTSyAgICAgICAgICAgICAgICAgIDB4MDBGRgorI2RlZmluZSBXTTgzNTBfUlRDX1lVTklUU19TSElGVCAgICAgICAgICAgICAgICAgICAgICAwCisKKy8qCisgKiBSMjAgKDB4MTQpIC0gQWxhcm0gU2Vjb25kcy9NaW51dGVzCisgKi8KKyNkZWZpbmUgV004MzUwX1JUQ19BTE1NSU5TX01BU0sgICAgICAgICAgICAgICAgIDB4N0YwMAorI2RlZmluZSBXTTgzNTBfUlRDX0FMTU1JTlNfU0hJRlQgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIFdNODM1MF9SVENfQUxNU0VDU19NQVNLICAgICAgICAgICAgICAgICAweDAwN0YKKyNkZWZpbmUgV004MzUwX1JUQ19BTE1TRUNTX1NISUZUICAgICAgICAgICAgICAgICAgICAgMAorCisvKiBCaXQgdmFsdWVzIGZvciBSMjAgKDB4MTQpICovCisjZGVmaW5lIFdNODM1MF9SVENfQUxNTUlOU19ET05UX0NBUkUgICAgICAgICAgICAgICAgLTEKKyNkZWZpbmUgV004MzUwX1JUQ19BTE1TRUNTX0RPTlRfQ0FSRSAgICAgICAgICAgICAgICAtMQorCisvKgorICogUjIxICgweDE1KSAtIEFsYXJtIEhvdXJzL0RheQorICovCisjZGVmaW5lIFdNODM1MF9SVENfQUxNREFZX01BU0sgICAgICAgICAgICAgICAgICAweDBGMDAKKyNkZWZpbmUgV004MzUwX1JUQ19BTE1EQVlfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBXTTgzNTBfUlRDX0FMTUhQTV9NQVNLICAgICAgICAgICAgICAgICAgMHgwMDIwCisjZGVmaW5lIFdNODM1MF9SVENfQUxNSFBNX1NISUZUICAgICAgICAgICAgICAgICAgICAgIDUKKyNkZWZpbmUgV004MzUwX1JUQ19BTE1IUlNfTUFTSyAgICAgICAgICAgICAgICAgIDB4MDAxRgorI2RlZmluZSBXTTgzNTBfUlRDX0FMTUhSU19TSElGVCAgICAgICAgICAgICAgICAgICAgICAwCisKKy8qIEJpdCB2YWx1ZXMgZm9yIFIyMSAoMHgxNSkgKi8KKyNkZWZpbmUgV004MzUwX1JUQ19BTE1EQVlfRE9OVF9DQVJFICAgICAgICAgICAgICAgICAtMQorI2RlZmluZSBXTTgzNTBfUlRDX0FMTURBWV9TVU4gICAgICAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIFdNODM1MF9SVENfQUxNREFZX01PTiAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgV004MzUwX1JUQ19BTE1EQVlfVFVFICAgICAgICAgICAgICAgICAgICAgICAgMworI2RlZmluZSBXTTgzNTBfUlRDX0FMTURBWV9XRUQgICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIFdNODM1MF9SVENfQUxNREFZX1RIVSAgICAgICAgICAgICAgICAgICAgICAgIDUKKyNkZWZpbmUgV004MzUwX1JUQ19BTE1EQVlfRlJJICAgICAgICAgICAgICAgICAgICAgICAgNgorI2RlZmluZSBXTTgzNTBfUlRDX0FMTURBWV9TQVQgICAgICAgICAgICAgICAgICAgICAgICA3CisKKyNkZWZpbmUgV004MzUwX1JUQ19BTE1IUE1fQU0gICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBXTTgzNTBfUlRDX0FMTUhQTV9QTSAgICAgICAgICAgICAgICAgICAgICAgICAxCisKKyNkZWZpbmUgV004MzUwX1JUQ19BTE1IUlNfRE9OVF9DQVJFICAgICAgICAgICAgICAgICAtMQorCisvKgorICogUjIyICgweDE2KSAtIEFsYXJtIERhdGUvTW9udGgKKyAqLworI2RlZmluZSBXTTgzNTBfUlRDX0FMTU1USF9NQVNLICAgICAgICAgICAgICAgICAgMHgxRjAwCisjZGVmaW5lIFdNODM1MF9SVENfQUxNTVRIX1NISUZUICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgV004MzUwX1JUQ19BTE1EQVRFX01BU0sgICAgICAgICAgICAgICAgIDB4MDAzRgorI2RlZmluZSBXTTgzNTBfUlRDX0FMTURBVEVfU0hJRlQgICAgICAgICAgICAgICAgICAgICAwCisKKy8qIEJpdCB2YWx1ZXMgZm9yIFIyMiAoMHgxNikgKi8KKyNkZWZpbmUgV004MzUwX1JUQ19BTE1EQVRFX0RPTlRfQ0FSRSAgICAgICAgICAgICAgICAtMQorCisjZGVmaW5lIFdNODM1MF9SVENfQUxNTVRIX0RPTlRfQ0FSRSAgICAgICAgICAgICAgICAgLTEKKyNkZWZpbmUgV004MzUwX1JUQ19BTE1NVEhfSkFOICAgICAgICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSBXTTgzNTBfUlRDX0FMTU1USF9GRUIgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIFdNODM1MF9SVENfQUxNTVRIX01BUiAgICAgICAgICAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgV004MzUwX1JUQ19BTE1NVEhfQVBSICAgICAgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBXTTgzNTBfUlRDX0FMTU1USF9NQVkgICAgICAgICAgICAgICAgICAgICAgICA1CisjZGVmaW5lIFdNODM1MF9SVENfQUxNTVRIX0pVTiAgICAgICAgICAgICAgICAgICAgICAgIDYKKyNkZWZpbmUgV004MzUwX1JUQ19BTE1NVEhfSlVMICAgICAgICAgICAgICAgICAgICAgICAgNworI2RlZmluZSBXTTgzNTBfUlRDX0FMTU1USF9BVUcgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIFdNODM1MF9SVENfQUxNTVRIX1NFUCAgICAgICAgICAgICAgICAgICAgICAgIDkKKyNkZWZpbmUgV004MzUwX1JUQ19BTE1NVEhfT0NUICAgICAgICAgICAgICAgICAgICAgICAxMAorI2RlZmluZSBXTTgzNTBfUlRDX0FMTU1USF9OT1YgICAgICAgICAgICAgICAgICAgICAgIDExCisjZGVmaW5lIFdNODM1MF9SVENfQUxNTVRIX0RFQyAgICAgICAgICAgICAgICAgICAgICAgMTIKKyNkZWZpbmUgV004MzUwX1JUQ19BTE1NVEhfSkFOX0JDRCAgICAgICAgICAgICAgICAgMHgwMQorI2RlZmluZSBXTTgzNTBfUlRDX0FMTU1USF9GRUJfQkNEICAgICAgICAgICAgICAgICAweDAyCisjZGVmaW5lIFdNODM1MF9SVENfQUxNTVRIX01BUl9CQ0QgICAgICAgICAgICAgICAgIDB4MDMKKyNkZWZpbmUgV004MzUwX1JUQ19BTE1NVEhfQVBSX0JDRCAgICAgICAgICAgICAgICAgMHgwNAorI2RlZmluZSBXTTgzNTBfUlRDX0FMTU1USF9NQVlfQkNEICAgICAgICAgICAgICAgICAweDA1CisjZGVmaW5lIFdNODM1MF9SVENfQUxNTVRIX0pVTl9CQ0QgICAgICAgICAgICAgICAgIDB4MDYKKyNkZWZpbmUgV004MzUwX1JUQ19BTE1NVEhfSlVMX0JDRCAgICAgICAgICAgICAgICAgMHgwNworI2RlZmluZSBXTTgzNTBfUlRDX0FMTU1USF9BVUdfQkNEICAgICAgICAgICAgICAgICAweDA4CisjZGVmaW5lIFdNODM1MF9SVENfQUxNTVRIX1NFUF9CQ0QgICAgICAgICAgICAgICAgIDB4MDkKKyNkZWZpbmUgV004MzUwX1JUQ19BTE1NVEhfT0NUX0JDRCAgICAgICAgICAgICAgICAgMHgxMAorI2RlZmluZSBXTTgzNTBfUlRDX0FMTU1USF9OT1ZfQkNEICAgICAgICAgICAgICAgICAweDExCisjZGVmaW5lIFdNODM1MF9SVENfQUxNTVRIX0RFQ19CQ0QgICAgICAgICAgICAgICAgIDB4MTIKKworLyoKKyAqIFIyMyAoMHgxNykgLSBSVEMgVGltZSBDb250cm9sCisgKi8KKyNkZWZpbmUgV004MzUwX1JUQ19CQ0QgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODAwMAorI2RlZmluZSBXTTgzNTBfUlRDX0JDRF9NQVNLICAgICAgICAgICAgICAgICAgICAgMHg4MDAwCisjZGVmaW5lIFdNODM1MF9SVENfQkNEX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgMTUKKyNkZWZpbmUgV004MzUwX1JUQ18xMkhSICAgICAgICAgICAgICAgICAgICAgICAgIDB4NDAwMAorI2RlZmluZSBXTTgzNTBfUlRDXzEySFJfTUFTSyAgICAgICAgICAgICAgICAgICAgMHg0MDAwCisjZGVmaW5lIFdNODM1MF9SVENfMTJIUl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgMTQKKyNkZWZpbmUgV004MzUwX1JUQ19EU1QgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjAwMAorI2RlZmluZSBXTTgzNTBfUlRDX0RTVF9NQVNLICAgICAgICAgICAgICAgICAgICAgMHgyMDAwCisjZGVmaW5lIFdNODM1MF9SVENfRFNUX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgMTMKKyNkZWZpbmUgV004MzUwX1JUQ19TRVQgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDgwMAorI2RlZmluZSBXTTgzNTBfUlRDX1NFVF9NQVNLICAgICAgICAgICAgICAgICAgICAgMHgwODAwCisjZGVmaW5lIFdNODM1MF9SVENfU0VUX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgMTEKKyNkZWZpbmUgV004MzUwX1JUQ19TVFMgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDQwMAorI2RlZmluZSBXTTgzNTBfUlRDX1NUU19NQVNLICAgICAgICAgICAgICAgICAgICAgMHgwNDAwCisjZGVmaW5lIFdNODM1MF9SVENfU1RTX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgMTAKKyNkZWZpbmUgV004MzUwX1JUQ19BTE1TRVQgICAgICAgICAgICAgICAgICAgICAgIDB4MDIwMAorI2RlZmluZSBXTTgzNTBfUlRDX0FMTVNFVF9NQVNLICAgICAgICAgICAgICAgICAgMHgwMjAwCisjZGVmaW5lIFdNODM1MF9SVENfQUxNU0VUX1NISUZUICAgICAgICAgICAgICAgICAgICAgIDkKKyNkZWZpbmUgV004MzUwX1JUQ19BTE1TVFMgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMAorI2RlZmluZSBXTTgzNTBfUlRDX0FMTVNUU19NQVNLICAgICAgICAgICAgICAgICAgMHgwMTAwCisjZGVmaW5lIFdNODM1MF9SVENfQUxNU1RTX1NISUZUICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgV004MzUwX1JUQ19QSU5UICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA3MAorI2RlZmluZSBXTTgzNTBfUlRDX1BJTlRfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMDcwCisjZGVmaW5lIFdNODM1MF9SVENfUElOVF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgV004MzUwX1JUQ19EU1cgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwRgorI2RlZmluZSBXTTgzNTBfUlRDX0RTV19NQVNLICAgICAgICAgICAgICAgICAgICAgMHgwMDBGCisjZGVmaW5lIFdNODM1MF9SVENfRFNXX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLyogQml0IHZhbHVlcyBmb3IgUjIzICgweDE3KSAqLworI2RlZmluZSBXTTgzNTBfUlRDX0JDRF9CSU5BUlkgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIFdNODM1MF9SVENfQkNEX0JDRCAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKworI2RlZmluZSBXTTgzNTBfUlRDXzEySFJfMjRIUiAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIFdNODM1MF9SVENfMTJIUl8xMkhSICAgICAgICAgICAgICAgICAgICAgICAgIDEKKworI2RlZmluZSBXTTgzNTBfUlRDX0RTVF9ESVNBQkxFRCAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIFdNODM1MF9SVENfRFNUX0VOQUJMRUQgICAgICAgICAgICAgICAgICAgICAgIDEKKworI2RlZmluZSBXTTgzNTBfUlRDX1NFVF9SVU4gICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIFdNODM1MF9SVENfU0VUX1NFVCAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKworI2RlZmluZSBXTTgzNTBfUlRDX1NUU19SVU5OSU5HICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIFdNODM1MF9SVENfU1RTX1NUT1BQRUQgICAgICAgICAgICAgICAgICAgICAgIDEKKworI2RlZmluZSBXTTgzNTBfUlRDX0FMTVNFVF9SVU4gICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIFdNODM1MF9SVENfQUxNU0VUX1NFVCAgICAgICAgICAgICAgICAgICAgICAgIDEKKworI2RlZmluZSBXTTgzNTBfUlRDX0FMTVNUU19SVU5OSU5HICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIFdNODM1MF9SVENfQUxNU1RTX1NUT1BQRUQgICAgICAgICAgICAgICAgICAgIDEKKworI2RlZmluZSBXTTgzNTBfUlRDX1BJTlRfRElTQUJMRUQgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIFdNODM1MF9SVENfUElOVF9TRUNTICAgICAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgV004MzUwX1JUQ19QSU5UX01JTlMgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBXTTgzNTBfUlRDX1BJTlRfSFJTICAgICAgICAgICAgICAgICAgICAgICAgICAzCisjZGVmaW5lIFdNODM1MF9SVENfUElOVF9EQVlTICAgICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgV004MzUwX1JUQ19QSU5UX01USFMgICAgICAgICAgICAgICAgICAgICAgICAgNQorCisjZGVmaW5lIFdNODM1MF9SVENfRFNXX0RJU0FCTEVEICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgV004MzUwX1JUQ19EU1dfMUhaICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSBXTTgzNTBfUlRDX0RTV18ySFogICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIFdNODM1MF9SVENfRFNXXzRIWiAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgV004MzUwX1JUQ19EU1dfOEhaICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBXTTgzNTBfUlRDX0RTV18xNkhaICAgICAgICAgICAgICAgICAgICAgICAgICA1CisjZGVmaW5lIFdNODM1MF9SVENfRFNXXzMySFogICAgICAgICAgICAgICAgICAgICAgICAgIDYKKyNkZWZpbmUgV004MzUwX1JUQ19EU1dfNjRIWiAgICAgICAgICAgICAgICAgICAgICAgICAgNworI2RlZmluZSBXTTgzNTBfUlRDX0RTV18xMjhIWiAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIFdNODM1MF9SVENfRFNXXzI1NkhaICAgICAgICAgICAgICAgICAgICAgICAgIDkKKyNkZWZpbmUgV004MzUwX1JUQ19EU1dfNTEySFogICAgICAgICAgICAgICAgICAgICAgICAxMAorI2RlZmluZSBXTTgzNTBfUlRDX0RTV18xMDI0SFogICAgICAgICAgICAgICAgICAgICAgIDExCisKKy8qCisgKiBSMjE4ICgweERBKSAtIFJUQyBUaWNrIENvbnRyb2wKKyAqLworI2RlZmluZSBXTTgzNTBfUlRDX1RJQ0tTVFMgICAgICAgICAgICAgICAgICAgICAgMHg0MDAwCisjZGVmaW5lIFdNODM1MF9SVENfQ0xLU1JDICAgICAgICAgICAgICAgICAgICAgICAweDIwMDAKKyNkZWZpbmUgV004MzUwX1JUQ19UUklNX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDNGRgorCisvKgorICogUlRDIEludGVycnVwdHMuCisgKi8KKyNkZWZpbmUgV004MzUwX0lSUV9SVENfUEVSCQkJNworI2RlZmluZSBXTTgzNTBfSVJRX1JUQ19TRUMJCQk4CisjZGVmaW5lIFdNODM1MF9JUlFfUlRDX0FMTQkJCTkKKworc3RydWN0IHdtODM1MF9ydGMgeworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXY7Cit9OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWZkL3dtODM1MC9zdXBwbHkuaCBiL2luY2x1ZGUvbGludXgvbWZkL3dtODM1MC9zdXBwbHkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYzhmM2NkCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9tZmQvd204MzUwL3N1cHBseS5oCkBAIC0wLDAgKzEsMTExIEBACisvKgorICogc3VwcGx5LmggIC0tICBQb3dlciBTdXBwbHkgRHJpdmVyIGZvciBXb2xmc29uIFdNODM1MCBQTUlDCisgKgorICogQ29weXJpZ2h0IDIwMDcgV29sZnNvbiBNaWNyb2VsZWN0cm9uaWNzIFBMQworICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqICB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqLworCisjaWZuZGVmIF9fTElOVVhfTUZEX1dNODM1MF9TVVBQTFlfSF8KKyNkZWZpbmUgX19MSU5VWF9NRkRfV004MzUwX1NVUFBMWV9IXworCisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisKKy8qCisgKiBDaGFyZ2VyIHJlZ2lzdGVycworICovCisjZGVmaW5lIFdNODM1MF9CQVRURVJZX0NIQVJHRVJfQ09OVFJPTF8xICAgICAgICAweEE4CisjZGVmaW5lIFdNODM1MF9CQVRURVJZX0NIQVJHRVJfQ09OVFJPTF8yICAgICAgICAweEE5CisjZGVmaW5lIFdNODM1MF9CQVRURVJZX0NIQVJHRVJfQ09OVFJPTF8zICAgICAgICAweEFBCisKKy8qCisgKiBSMTY4ICgweEE4KSAtIEJhdHRlcnkgQ2hhcmdlciBDb250cm9sIDEKKyAqLworI2RlZmluZSBXTTgzNTBfQ0hHX0VOQV9SMTY4ICAgICAgICAgICAgICAgICAgICAgMHg4MDAwCisjZGVmaW5lIFdNODM1MF9DSEdfVEhSICAgICAgICAgICAgICAgICAgICAgICAgICAweDIwMDAKKyNkZWZpbmUgV004MzUwX0NIR19FT0NfU0VMX01BU0sgICAgICAgICAgICAgICAgIDB4MUMwMAorI2RlZmluZSBXTTgzNTBfQ0hHX1RSSUNLTEVfVEVNUF9DSE9LRSAgICAgICAgICAgMHgwMjAwCisjZGVmaW5lIFdNODM1MF9DSEdfVFJJQ0tMRV9VU0JfQ0hPS0UgICAgICAgICAgICAweDAxMDAKKyNkZWZpbmUgV004MzUwX0NIR19SRUNPVkVSX1QgICAgICAgICAgICAgICAgICAgIDB4MDA4MAorI2RlZmluZSBXTTgzNTBfQ0hHX0VORF9BQ1QgICAgICAgICAgICAgICAgICAgICAgMHgwMDQwCisjZGVmaW5lIFdNODM1MF9DSEdfRkFTVCAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMjAKKyNkZWZpbmUgV004MzUwX0NIR19GQVNUX1VTQl9USFJPVFRMRSAgICAgICAgICAgIDB4MDAxMAorI2RlZmluZSBXTTgzNTBfQ0hHX05UQ19NT04gICAgICAgICAgICAgICAgICAgICAgMHgwMDA4CisjZGVmaW5lIFdNODM1MF9DSEdfQkFUVF9IT1RfTU9OICAgICAgICAgICAgICAgICAweDAwMDQKKyNkZWZpbmUgV004MzUwX0NIR19CQVRUX0NPTERfTU9OICAgICAgICAgICAgICAgIDB4MDAwMgorI2RlZmluZSBXTTgzNTBfQ0hHX0NISVBfVEVNUF9NT04gICAgICAgICAgICAgICAgMHgwMDAxCisKKy8qCisgKiBSMTY5ICgweEE5KSAtIEJhdHRlcnkgQ2hhcmdlciBDb250cm9sIDIKKyAqLworI2RlZmluZSBXTTgzNTBfQ0hHX0FDVElWRSAgICAgICAgICAgICAgICAgICAgICAgMHg4MDAwCisjZGVmaW5lIFdNODM1MF9DSEdfUEFVU0UgICAgICAgICAgICAgICAgICAgICAgICAweDQwMDAKKyNkZWZpbmUgV004MzUwX0NIR19TVFNfTUFTSyAgICAgICAgICAgICAgICAgICAgIDB4MzAwMAorI2RlZmluZSBXTTgzNTBfQ0hHX1RJTUVfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwRjAwCisjZGVmaW5lIFdNODM1MF9DSEdfTUFTS19XQUxMX0ZCICAgICAgICAgICAgICAgICAweDAwODAKKyNkZWZpbmUgV004MzUwX0NIR19UUklDS0xFX1NFTCAgICAgICAgICAgICAgICAgIDB4MDA0MAorI2RlZmluZSBXTTgzNTBfQ0hHX1ZTRUxfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMDMwCisjZGVmaW5lIFdNODM1MF9DSEdfSVNFTF9NQVNLICAgICAgICAgICAgICAgICAgICAweDAwMEYKKyNkZWZpbmUgV004MzUwX0NIR19TVFNfT0ZGICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMAorI2RlZmluZSBXTTgzNTBfQ0hHX1NUU19UUklDS0xFICAgICAgICAgICAgICAgICAgMHgxMDAwCisjZGVmaW5lIFdNODM1MF9DSEdfU1RTX0ZBU1QgICAgICAgICAgICAgICAgICAgICAweDIwMDAKKworLyoKKyAqIFIxNzAgKDB4QUEpIC0gQmF0dGVyeSBDaGFyZ2VyIENvbnRyb2wgMworICovCisjZGVmaW5lIFdNODM1MF9DSEdfVEhST1RUTEVfVF9NQVNLICAgICAgICAgICAgICAweDAwNjAKKyNkZWZpbmUgV004MzUwX0NIR19TTUFSVCAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAxMAorI2RlZmluZSBXTTgzNTBfQ0hHX1RJTUVSX0FESlRfTUFTSyAgICAgICAgICAgICAgMHgwMDBGCisKKy8qCisgKiBDaGFyZ2VyIEludGVycnVwdHMKKyAqLworI2RlZmluZSBXTTgzNTBfSVJRX0NIR19CQVRfSE9UCQkJMAorI2RlZmluZSBXTTgzNTBfSVJRX0NIR19CQVRfQ09MRAkJCTEKKyNkZWZpbmUgV004MzUwX0lSUV9DSEdfQkFUX0ZBSUwJCQkyCisjZGVmaW5lIFdNODM1MF9JUlFfQ0hHX1RPCQkJMworI2RlZmluZSBXTTgzNTBfSVJRX0NIR19FTkQJCQk0CisjZGVmaW5lIFdNODM1MF9JUlFfQ0hHX1NUQVJUCQkJNQorI2RlZmluZSBXTTgzNTBfSVJRX0NIR19GQVNUX1JEWQkJCTYKKyNkZWZpbmUgV004MzUwX0lSUV9DSEdfVkJBVFRfTFRfM1A5CQkxMAorI2RlZmluZSBXTTgzNTBfSVJRX0NIR19WQkFUVF9MVF8zUDEJCTExCisjZGVmaW5lIFdNODM1MF9JUlFfQ0hHX1ZCQVRUX0xUXzJQODUJCTEyCisKKy8qCisgKiBDaGFyZ2VyIFBvbGljeQorICovCisjZGVmaW5lIFdNODM1MF9DSEdfVFJJQ0tMRV81MG1BCQkJKDAgPDwgNikKKyNkZWZpbmUgV004MzUwX0NIR19UUklDS0xFXzEwMG1BCQkoMSA8PCA2KQorI2RlZmluZSBXTTgzNTBfQ0hHXzRfMDVWCQkJKDAgPDwgNCkKKyNkZWZpbmUgV004MzUwX0NIR180XzEwVgkJCSgxIDw8IDQpCisjZGVmaW5lIFdNODM1MF9DSEdfNF8xNVYJCQkoMiA8PCA0KQorI2RlZmluZSBXTTgzNTBfQ0hHXzRfMjBWCQkJKDMgPDwgNCkKKyNkZWZpbmUgV004MzUwX0NIR19GQVNUX0xJTUlUX21BKHgpCQkoKHggLyA1MCkgJiAweGYpCisjZGVmaW5lIFdNODM1MF9DSEdfRU9DX21BKHgpCQkJKCgoeCAtIDEwKSAmIDB4NykgPDwgMTApCisjZGVmaW5lIFdNODM1MF9DSEdfVFJJQ0tMRV8zXzFWCQkJKDAgPDwgMTMpCisjZGVmaW5lIFdNODM1MF9DSEdfVFJJQ0tMRV8zXzlWCQkJKDEgPDwgMTMpCisKKy8qCisgKiBTdXBwbHkgUmVnaXN0ZXJzLgorICovCisjZGVmaW5lIFdNODM1MF9VU0JfVk9MVEFHRV9SRUFEQkFDSyAgICAgICAgICAgICAweDlDCisjZGVmaW5lIFdNODM1MF9MSU5FX1ZPTFRBR0VfUkVBREJBQ0sgICAgICAgICAgICAweDlECisjZGVmaW5lIFdNODM1MF9CQVRUX1ZPTFRBR0VfUkVBREJBQ0sgICAgICAgICAgICAweDlFCisKKy8qCisgKiBTdXBwbHkgSW50ZXJydXB0cy4KKyAqLworI2RlZmluZSBXTTgzNTBfSVJRX1VTQl9MSU1JVAkJCTE1CisjZGVmaW5lIFdNODM1MF9JUlFfRVhUX1VTQl9GQgkJCTM2CisjZGVmaW5lIFdNODM1MF9JUlFfRVhUX1dBTExfRkIJCQkzNworI2RlZmluZSBXTTgzNTBfSVJRX0VYVF9CQVRfRkIJCQkzOAorCitzdHJ1Y3Qgd204MzUwX3Bvd2VyIHsKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2OworfTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21mZC93bTgzNTAvd2R0LmggYi9pbmNsdWRlL2xpbnV4L21mZC93bTgzNTAvd2R0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjYxMzViNQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvbWZkL3dtODM1MC93ZHQuaApAQCAtMCwwICsxLDI4IEBACisvKgorICogd2R0LmggIC0tICBXYXRjaGRvZyBEcml2ZXIgZm9yIFdvbGZzb24gV004MzUwIFBNSUMKKyAqCisgKiBDb3B5cmlnaHQgMjAwNywgMjAwOCBXb2xmc29uIE1pY3JvZWxlY3Ryb25pY3MgUExDCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAorICogIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgorICogIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2lmbmRlZiBfX0xJTlVYX01GRF9XTTgzNTBfV0RUX0hfCisjZGVmaW5lIF9fTElOVVhfTUZEX1dNODM1MF9XRFRfSF8KKworI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorCisjZGVmaW5lIFdNODM1MF9XRE9HX0hJQl9NT0RFICAgICAgICAgICAgICAgICAgICAweDAwODAKKyNkZWZpbmUgV004MzUwX1dET0dfREVCVUcgICAgICAgICAgICAgICAgICAgICAgIDB4MDA0MAorI2RlZmluZSBXTTgzNTBfV0RPR19NT0RFX01BU0sgICAgICAgICAgICAgICAgICAgMHgwMDMwCisjZGVmaW5lIFdNODM1MF9XRE9HX1RPX01BU0sgICAgICAgICAgICAgICAgICAgICAweDAwMDcKKworI2RlZmluZSBXTTgzNTBfSVJRX1NZU19XRE9HX1RPCQkJMjQKKworc3RydWN0IHdtODM1MF93ZHQgeworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXY7Cit9OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWZkL3dtODQwMC1hdWRpby5oIGIvaW5jbHVkZS9saW51eC9tZmQvd204NDAwLWF1ZGlvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjY2NDBlMAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvbWZkL3dtODQwMC1hdWRpby5oCkBAIC0wLDAgKzEsMTE4NiBAQAorLyoKKyAqIHdtODQwMCBwcml2YXRlIGRlZmluaXRpb25zIGZvciBhdWRpbworICoKKyAqIENvcHlyaWdodCAyMDA4IFdvbGZzb24gTWljcm9lbGVjdHJvbmljcyBwbGMKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworCisjaWZuZGVmIF9fTElOVVhfTUZEX1dNODQwMF9BVURJT19ICisjZGVmaW5lIF9fTElOVVhfTUZEX1dNODQwMF9BVURJT19ICisKKyNpbmNsdWRlIDxsaW51eC9tZmQvd204NDAwLWF1ZGlvLmg+CisKKy8qCisgKiBSMiAoMHgwMikgLSBQb3dlciBNYW5hZ2VtZW50ICgxKQorICovCisjZGVmaW5lIFdNODQwMF9DT0RFQ19FTkEgICAgICAgICAgICAgICAgICAgICAgICAweDgwMDAgIC8qIENPREVDX0VOQSAqLworI2RlZmluZSBXTTg0MDBfQ09ERUNfRU5BX01BU0sgICAgICAgICAgICAgICAgICAgMHg4MDAwICAvKiBDT0RFQ19FTkEgKi8KKyNkZWZpbmUgV004NDAwX0NPREVDX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAxNSAgLyogQ09ERUNfRU5BICovCisjZGVmaW5lIFdNODQwMF9DT0RFQ19FTkFfV0lEVEggICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIENPREVDX0VOQSAqLworI2RlZmluZSBXTTg0MDBfU1lTQ0xLX0VOQSAgICAgICAgICAgICAgICAgICAgICAgMHg0MDAwICAvKiBTWVNDTEtfRU5BICovCisjZGVmaW5lIFdNODQwMF9TWVNDTEtfRU5BX01BU0sgICAgICAgICAgICAgICAgICAweDQwMDAgIC8qIFNZU0NMS19FTkEgKi8KKyNkZWZpbmUgV004NDAwX1NZU0NMS19FTkFfU0hJRlQgICAgICAgICAgICAgICAgICAgICAxNCAgLyogU1lTQ0xLX0VOQSAqLworI2RlZmluZSBXTTg0MDBfU1lTQ0xLX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAxICAvKiBTWVNDTEtfRU5BICovCisjZGVmaW5lIFdNODQwMF9TUEtfTUlYX0VOQSAgICAgICAgICAgICAgICAgICAgICAweDIwMDAgIC8qIFNQS19NSVhfRU5BICovCisjZGVmaW5lIFdNODQwMF9TUEtfTUlYX0VOQV9NQVNLICAgICAgICAgICAgICAgICAweDIwMDAgIC8qIFNQS19NSVhfRU5BICovCisjZGVmaW5lIFdNODQwMF9TUEtfTUlYX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgICAgMTMgIC8qIFNQS19NSVhfRU5BICovCisjZGVmaW5lIFdNODQwMF9TUEtfTUlYX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgICAgIDEgIC8qIFNQS19NSVhfRU5BICovCisjZGVmaW5lIFdNODQwMF9TUEtfRU5BICAgICAgICAgICAgICAgICAgICAgICAgICAweDEwMDAgIC8qIFNQS19FTkEgKi8KKyNkZWZpbmUgV004NDAwX1NQS19FTkFfTUFTSyAgICAgICAgICAgICAgICAgICAgIDB4MTAwMCAgLyogU1BLX0VOQSAqLworI2RlZmluZSBXTTg0MDBfU1BLX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDEyICAvKiBTUEtfRU5BICovCisjZGVmaW5lIFdNODQwMF9TUEtfRU5BX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIFNQS19FTkEgKi8KKyNkZWZpbmUgV004NDAwX09VVDNfRU5BICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDgwMCAgLyogT1VUM19FTkEgKi8KKyNkZWZpbmUgV004NDAwX09VVDNfRU5BX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDgwMCAgLyogT1VUM19FTkEgKi8KKyNkZWZpbmUgV004NDAwX09VVDNfRU5BX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAxMSAgLyogT1VUM19FTkEgKi8KKyNkZWZpbmUgV004NDAwX09VVDNfRU5BX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogT1VUM19FTkEgKi8KKyNkZWZpbmUgV004NDAwX09VVDRfRU5BICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDQwMCAgLyogT1VUNF9FTkEgKi8KKyNkZWZpbmUgV004NDAwX09VVDRfRU5BX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDQwMCAgLyogT1VUNF9FTkEgKi8KKyNkZWZpbmUgV004NDAwX09VVDRfRU5BX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAxMCAgLyogT1VUNF9FTkEgKi8KKyNkZWZpbmUgV004NDAwX09VVDRfRU5BX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogT1VUNF9FTkEgKi8KKyNkZWZpbmUgV004NDAwX0xPVVRfRU5BICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDIwMCAgLyogTE9VVF9FTkEgKi8KKyNkZWZpbmUgV004NDAwX0xPVVRfRU5BX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDIwMCAgLyogTE9VVF9FTkEgKi8KKyNkZWZpbmUgV004NDAwX0xPVVRfRU5BX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgOSAgLyogTE9VVF9FTkEgKi8KKyNkZWZpbmUgV004NDAwX0xPVVRfRU5BX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogTE9VVF9FTkEgKi8KKyNkZWZpbmUgV004NDAwX1JPVVRfRU5BICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogUk9VVF9FTkEgKi8KKyNkZWZpbmUgV004NDAwX1JPVVRfRU5BX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogUk9VVF9FTkEgKi8KKyNkZWZpbmUgV004NDAwX1JPVVRfRU5BX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgOCAgLyogUk9VVF9FTkEgKi8KKyNkZWZpbmUgV004NDAwX1JPVVRfRU5BX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogUk9VVF9FTkEgKi8KKyNkZWZpbmUgV004NDAwX01JQzFCSUFTX0VOQSAgICAgICAgICAgICAgICAgICAgIDB4MDAxMCAgLyogTUlDMUJJQVNfRU5BICovCisjZGVmaW5lIFdNODQwMF9NSUMxQklBU19FTkFfTUFTSyAgICAgICAgICAgICAgICAweDAwMTAgIC8qIE1JQzFCSUFTX0VOQSAqLworI2RlZmluZSBXTTg0MDBfTUlDMUJJQVNfRU5BX1NISUZUICAgICAgICAgICAgICAgICAgICA0ICAvKiBNSUMxQklBU19FTkEgKi8KKyNkZWZpbmUgV004NDAwX01JQzFCSUFTX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgICAgMSAgLyogTUlDMUJJQVNfRU5BICovCisjZGVmaW5lIFdNODQwMF9WTUlEX01PREVfTUFTSyAgICAgICAgICAgICAgICAgICAweDAwMDYgIC8qIFZNSURfTU9ERSAtIFsyOjFdICovCisjZGVmaW5lIFdNODQwMF9WTUlEX01PREVfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIFZNSURfTU9ERSAtIFsyOjFdICovCisjZGVmaW5lIFdNODQwMF9WTUlEX01PREVfV0lEVEggICAgICAgICAgICAgICAgICAgICAgIDIgIC8qIFZNSURfTU9ERSAtIFsyOjFdICovCisjZGVmaW5lIFdNODQwMF9WUkVGX0VOQSAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIFZSRUZfRU5BICovCisjZGVmaW5lIFdNODQwMF9WUkVGX0VOQV9NQVNLICAgICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIFZSRUZfRU5BICovCisjZGVmaW5lIFdNODQwMF9WUkVGX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIFZSRUZfRU5BICovCisjZGVmaW5lIFdNODQwMF9WUkVGX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIFZSRUZfRU5BICovCisKKy8qCisgKiBSMyAoMHgwMykgLSBQb3dlciBNYW5hZ2VtZW50ICgyKQorICovCisjZGVmaW5lIFdNODQwMF9GTExfRU5BICAgICAgICAgICAgICAgICAgICAgICAgICAweDgwMDAgIC8qIEZMTF9FTkEgKi8KKyNkZWZpbmUgV004NDAwX0ZMTF9FTkFfTUFTSyAgICAgICAgICAgICAgICAgICAgIDB4ODAwMCAgLyogRkxMX0VOQSAqLworI2RlZmluZSBXTTg0MDBfRkxMX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDE1ICAvKiBGTExfRU5BICovCisjZGVmaW5lIFdNODQwMF9GTExfRU5BX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEZMTF9FTkEgKi8KKyNkZWZpbmUgV004NDAwX1RTSFVUX0VOQSAgICAgICAgICAgICAgICAgICAgICAgIDB4NDAwMCAgLyogVFNIVVRfRU5BICovCisjZGVmaW5lIFdNODQwMF9UU0hVVF9FTkFfTUFTSyAgICAgICAgICAgICAgICAgICAweDQwMDAgIC8qIFRTSFVUX0VOQSAqLworI2RlZmluZSBXTTg0MDBfVFNIVVRfRU5BX1NISUZUICAgICAgICAgICAgICAgICAgICAgIDE0ICAvKiBUU0hVVF9FTkEgKi8KKyNkZWZpbmUgV004NDAwX1RTSFVUX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogVFNIVVRfRU5BICovCisjZGVmaW5lIFdNODQwMF9UU0hVVF9PUERJUyAgICAgICAgICAgICAgICAgICAgICAweDIwMDAgIC8qIFRTSFVUX09QRElTICovCisjZGVmaW5lIFdNODQwMF9UU0hVVF9PUERJU19NQVNLICAgICAgICAgICAgICAgICAweDIwMDAgIC8qIFRTSFVUX09QRElTICovCisjZGVmaW5lIFdNODQwMF9UU0hVVF9PUERJU19TSElGVCAgICAgICAgICAgICAgICAgICAgMTMgIC8qIFRTSFVUX09QRElTICovCisjZGVmaW5lIFdNODQwMF9UU0hVVF9PUERJU19XSURUSCAgICAgICAgICAgICAgICAgICAgIDEgIC8qIFRTSFVUX09QRElTICovCisjZGVmaW5lIFdNODQwMF9PUENMS19FTkEgICAgICAgICAgICAgICAgICAgICAgICAweDA4MDAgIC8qIE9QQ0xLX0VOQSAqLworI2RlZmluZSBXTTg0MDBfT1BDTEtfRU5BX01BU0sgICAgICAgICAgICAgICAgICAgMHgwODAwICAvKiBPUENMS19FTkEgKi8KKyNkZWZpbmUgV004NDAwX09QQ0xLX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAxMSAgLyogT1BDTEtfRU5BICovCisjZGVmaW5lIFdNODQwMF9PUENMS19FTkFfV0lEVEggICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIE9QQ0xLX0VOQSAqLworI2RlZmluZSBXTTg0MDBfQUlOTF9FTkEgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMjAwICAvKiBBSU5MX0VOQSAqLworI2RlZmluZSBXTTg0MDBfQUlOTF9FTkFfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMjAwICAvKiBBSU5MX0VOQSAqLworI2RlZmluZSBXTTg0MDBfQUlOTF9FTkFfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICA5ICAvKiBBSU5MX0VOQSAqLworI2RlZmluZSBXTTg0MDBfQUlOTF9FTkFfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBBSU5MX0VOQSAqLworI2RlZmluZSBXTTg0MDBfQUlOUl9FTkEgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBBSU5SX0VOQSAqLworI2RlZmluZSBXTTg0MDBfQUlOUl9FTkFfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBBSU5SX0VOQSAqLworI2RlZmluZSBXTTg0MDBfQUlOUl9FTkFfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICA4ICAvKiBBSU5SX0VOQSAqLworI2RlZmluZSBXTTg0MDBfQUlOUl9FTkFfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBBSU5SX0VOQSAqLworI2RlZmluZSBXTTg0MDBfTElOMzRfRU5BICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDgwICAvKiBMSU4zNF9FTkEgKi8KKyNkZWZpbmUgV004NDAwX0xJTjM0X0VOQV9NQVNLICAgICAgICAgICAgICAgICAgIDB4MDA4MCAgLyogTElOMzRfRU5BICovCisjZGVmaW5lIFdNODQwMF9MSU4zNF9FTkFfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgIDcgIC8qIExJTjM0X0VOQSAqLworI2RlZmluZSBXTTg0MDBfTElOMzRfRU5BX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBMSU4zNF9FTkEgKi8KKyNkZWZpbmUgV004NDAwX0xJTjEyX0VOQSAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA0MCAgLyogTElOMTJfRU5BICovCisjZGVmaW5lIFdNODQwMF9MSU4xMl9FTkFfTUFTSyAgICAgICAgICAgICAgICAgICAweDAwNDAgIC8qIExJTjEyX0VOQSAqLworI2RlZmluZSBXTTg0MDBfTElOMTJfRU5BX1NISUZUICAgICAgICAgICAgICAgICAgICAgICA2ICAvKiBMSU4xMl9FTkEgKi8KKyNkZWZpbmUgV004NDAwX0xJTjEyX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogTElOMTJfRU5BICovCisjZGVmaW5lIFdNODQwMF9SSU4zNF9FTkEgICAgICAgICAgICAgICAgICAgICAgICAweDAwMjAgIC8qIFJJTjM0X0VOQSAqLworI2RlZmluZSBXTTg0MDBfUklOMzRfRU5BX01BU0sgICAgICAgICAgICAgICAgICAgMHgwMDIwICAvKiBSSU4zNF9FTkEgKi8KKyNkZWZpbmUgV004NDAwX1JJTjM0X0VOQV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgNSAgLyogUklOMzRfRU5BICovCisjZGVmaW5lIFdNODQwMF9SSU4zNF9FTkFfV0lEVEggICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIFJJTjM0X0VOQSAqLworI2RlZmluZSBXTTg0MDBfUklOMTJfRU5BICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDEwICAvKiBSSU4xMl9FTkEgKi8KKyNkZWZpbmUgV004NDAwX1JJTjEyX0VOQV9NQVNLICAgICAgICAgICAgICAgICAgIDB4MDAxMCAgLyogUklOMTJfRU5BICovCisjZGVmaW5lIFdNODQwMF9SSU4xMl9FTkFfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgIDQgIC8qIFJJTjEyX0VOQSAqLworI2RlZmluZSBXTTg0MDBfUklOMTJfRU5BX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBSSU4xMl9FTkEgKi8KKyNkZWZpbmUgV004NDAwX0FEQ0xfRU5BICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMiAgLyogQURDTF9FTkEgKi8KKyNkZWZpbmUgV004NDAwX0FEQ0xfRU5BX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDAwMiAgLyogQURDTF9FTkEgKi8KKyNkZWZpbmUgV004NDAwX0FEQ0xfRU5BX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogQURDTF9FTkEgKi8KKyNkZWZpbmUgV004NDAwX0FEQ0xfRU5BX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogQURDTF9FTkEgKi8KKyNkZWZpbmUgV004NDAwX0FEQ1JfRU5BICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogQURDUl9FTkEgKi8KKyNkZWZpbmUgV004NDAwX0FEQ1JfRU5BX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogQURDUl9FTkEgKi8KKyNkZWZpbmUgV004NDAwX0FEQ1JfRU5BX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgMCAgLyogQURDUl9FTkEgKi8KKyNkZWZpbmUgV004NDAwX0FEQ1JfRU5BX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogQURDUl9FTkEgKi8KKworLyoKKyAqIFI0ICgweDA0KSAtIFBvd2VyIE1hbmFnZW1lbnQgKDMpCisgKi8KKyNkZWZpbmUgV004NDAwX0xPTl9FTkEgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjAwMCAgLyogTE9OX0VOQSAqLworI2RlZmluZSBXTTg0MDBfTE9OX0VOQV9NQVNLICAgICAgICAgICAgICAgICAgICAgMHgyMDAwICAvKiBMT05fRU5BICovCisjZGVmaW5lIFdNODQwMF9MT05fRU5BX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgMTMgIC8qIExPTl9FTkEgKi8KKyNkZWZpbmUgV004NDAwX0xPTl9FTkFfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogTE9OX0VOQSAqLworI2RlZmluZSBXTTg0MDBfTE9QX0VOQSAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxMDAwICAvKiBMT1BfRU5BICovCisjZGVmaW5lIFdNODQwMF9MT1BfRU5BX01BU0sgICAgICAgICAgICAgICAgICAgICAweDEwMDAgIC8qIExPUF9FTkEgKi8KKyNkZWZpbmUgV004NDAwX0xPUF9FTkFfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAxMiAgLyogTE9QX0VOQSAqLworI2RlZmluZSBXTTg0MDBfTE9QX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBMT1BfRU5BICovCisjZGVmaW5lIFdNODQwMF9ST05fRU5BICAgICAgICAgICAgICAgICAgICAgICAgICAweDA4MDAgIC8qIFJPTl9FTkEgKi8KKyNkZWZpbmUgV004NDAwX1JPTl9FTkFfTUFTSyAgICAgICAgICAgICAgICAgICAgIDB4MDgwMCAgLyogUk9OX0VOQSAqLworI2RlZmluZSBXTTg0MDBfUk9OX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDExICAvKiBST05fRU5BICovCisjZGVmaW5lIFdNODQwMF9ST05fRU5BX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIFJPTl9FTkEgKi8KKyNkZWZpbmUgV004NDAwX1JPUF9FTkEgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDQwMCAgLyogUk9QX0VOQSAqLworI2RlZmluZSBXTTg0MDBfUk9QX0VOQV9NQVNLICAgICAgICAgICAgICAgICAgICAgMHgwNDAwICAvKiBST1BfRU5BICovCisjZGVmaW5lIFdNODQwMF9ST1BfRU5BX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgMTAgIC8qIFJPUF9FTkEgKi8KKyNkZWZpbmUgV004NDAwX1JPUF9FTkFfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogUk9QX0VOQSAqLworI2RlZmluZSBXTTg0MDBfTE9QR0FfRU5BICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDgwICAvKiBMT1BHQV9FTkEgKi8KKyNkZWZpbmUgV004NDAwX0xPUEdBX0VOQV9NQVNLICAgICAgICAgICAgICAgICAgIDB4MDA4MCAgLyogTE9QR0FfRU5BICovCisjZGVmaW5lIFdNODQwMF9MT1BHQV9FTkFfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgIDcgIC8qIExPUEdBX0VOQSAqLworI2RlZmluZSBXTTg0MDBfTE9QR0FfRU5BX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBMT1BHQV9FTkEgKi8KKyNkZWZpbmUgV004NDAwX1JPUEdBX0VOQSAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA0MCAgLyogUk9QR0FfRU5BICovCisjZGVmaW5lIFdNODQwMF9ST1BHQV9FTkFfTUFTSyAgICAgICAgICAgICAgICAgICAweDAwNDAgIC8qIFJPUEdBX0VOQSAqLworI2RlZmluZSBXTTg0MDBfUk9QR0FfRU5BX1NISUZUICAgICAgICAgICAgICAgICAgICAgICA2ICAvKiBST1BHQV9FTkEgKi8KKyNkZWZpbmUgV004NDAwX1JPUEdBX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogUk9QR0FfRU5BICovCisjZGVmaW5lIFdNODQwMF9MT01JWF9FTkEgICAgICAgICAgICAgICAgICAgICAgICAweDAwMjAgIC8qIExPTUlYX0VOQSAqLworI2RlZmluZSBXTTg0MDBfTE9NSVhfRU5BX01BU0sgICAgICAgICAgICAgICAgICAgMHgwMDIwICAvKiBMT01JWF9FTkEgKi8KKyNkZWZpbmUgV004NDAwX0xPTUlYX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgNSAgLyogTE9NSVhfRU5BICovCisjZGVmaW5lIFdNODQwMF9MT01JWF9FTkFfV0lEVEggICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIExPTUlYX0VOQSAqLworI2RlZmluZSBXTTg0MDBfUk9NSVhfRU5BICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDEwICAvKiBST01JWF9FTkEgKi8KKyNkZWZpbmUgV004NDAwX1JPTUlYX0VOQV9NQVNLICAgICAgICAgICAgICAgICAgIDB4MDAxMCAgLyogUk9NSVhfRU5BICovCisjZGVmaW5lIFdNODQwMF9ST01JWF9FTkFfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgIDQgIC8qIFJPTUlYX0VOQSAqLworI2RlZmluZSBXTTg0MDBfUk9NSVhfRU5BX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBST01JWF9FTkEgKi8KKyNkZWZpbmUgV004NDAwX0RBQ0xfRU5BICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMiAgLyogREFDTF9FTkEgKi8KKyNkZWZpbmUgV004NDAwX0RBQ0xfRU5BX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDAwMiAgLyogREFDTF9FTkEgKi8KKyNkZWZpbmUgV004NDAwX0RBQ0xfRU5BX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogREFDTF9FTkEgKi8KKyNkZWZpbmUgV004NDAwX0RBQ0xfRU5BX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogREFDTF9FTkEgKi8KKyNkZWZpbmUgV004NDAwX0RBQ1JfRU5BICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogREFDUl9FTkEgKi8KKyNkZWZpbmUgV004NDAwX0RBQ1JfRU5BX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogREFDUl9FTkEgKi8KKyNkZWZpbmUgV004NDAwX0RBQ1JfRU5BX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgMCAgLyogREFDUl9FTkEgKi8KKyNkZWZpbmUgV004NDAwX0RBQ1JfRU5BX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogREFDUl9FTkEgKi8KKworLyoKKyAqIFI1ICgweDA1KSAtIEF1ZGlvIEludGVyZmFjZSAoMSkKKyAqLworI2RlZmluZSBXTTg0MDBfQUlGQURDTF9TUkMgICAgICAgICAgICAgICAgICAgICAgMHg4MDAwICAvKiBBSUZBRENMX1NSQyAqLworI2RlZmluZSBXTTg0MDBfQUlGQURDTF9TUkNfTUFTSyAgICAgICAgICAgICAgICAgMHg4MDAwICAvKiBBSUZBRENMX1NSQyAqLworI2RlZmluZSBXTTg0MDBfQUlGQURDTF9TUkNfU0hJRlQgICAgICAgICAgICAgICAgICAgIDE1ICAvKiBBSUZBRENMX1NSQyAqLworI2RlZmluZSBXTTg0MDBfQUlGQURDTF9TUkNfV0lEVEggICAgICAgICAgICAgICAgICAgICAxICAvKiBBSUZBRENMX1NSQyAqLworI2RlZmluZSBXTTg0MDBfQUlGQURDUl9TUkMgICAgICAgICAgICAgICAgICAgICAgMHg0MDAwICAvKiBBSUZBRENSX1NSQyAqLworI2RlZmluZSBXTTg0MDBfQUlGQURDUl9TUkNfTUFTSyAgICAgICAgICAgICAgICAgMHg0MDAwICAvKiBBSUZBRENSX1NSQyAqLworI2RlZmluZSBXTTg0MDBfQUlGQURDUl9TUkNfU0hJRlQgICAgICAgICAgICAgICAgICAgIDE0ICAvKiBBSUZBRENSX1NSQyAqLworI2RlZmluZSBXTTg0MDBfQUlGQURDUl9TUkNfV0lEVEggICAgICAgICAgICAgICAgICAgICAxICAvKiBBSUZBRENSX1NSQyAqLworI2RlZmluZSBXTTg0MDBfQUlGQURDX1RETSAgICAgICAgICAgICAgICAgICAgICAgMHgyMDAwICAvKiBBSUZBRENfVERNICovCisjZGVmaW5lIFdNODQwMF9BSUZBRENfVERNX01BU0sgICAgICAgICAgICAgICAgICAweDIwMDAgIC8qIEFJRkFEQ19URE0gKi8KKyNkZWZpbmUgV004NDAwX0FJRkFEQ19URE1fU0hJRlQgICAgICAgICAgICAgICAgICAgICAxMyAgLyogQUlGQURDX1RETSAqLworI2RlZmluZSBXTTg0MDBfQUlGQURDX1RETV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAxICAvKiBBSUZBRENfVERNICovCisjZGVmaW5lIFdNODQwMF9BSUZBRENfVERNX0NIQU4gICAgICAgICAgICAgICAgICAweDEwMDAgIC8qIEFJRkFEQ19URE1fQ0hBTiAqLworI2RlZmluZSBXTTg0MDBfQUlGQURDX1RETV9DSEFOX01BU0sgICAgICAgICAgICAgMHgxMDAwICAvKiBBSUZBRENfVERNX0NIQU4gKi8KKyNkZWZpbmUgV004NDAwX0FJRkFEQ19URE1fQ0hBTl9TSElGVCAgICAgICAgICAgICAgICAxMiAgLyogQUlGQURDX1RETV9DSEFOICovCisjZGVmaW5lIFdNODQwMF9BSUZBRENfVERNX0NIQU5fV0lEVEggICAgICAgICAgICAgICAgIDEgIC8qIEFJRkFEQ19URE1fQ0hBTiAqLworI2RlZmluZSBXTTg0MDBfQUlGX0JDTEtfSU5WICAgICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBBSUZfQkNMS19JTlYgKi8KKyNkZWZpbmUgV004NDAwX0FJRl9CQ0xLX0lOVl9NQVNLICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogQUlGX0JDTEtfSU5WICovCisjZGVmaW5lIFdNODQwMF9BSUZfQkNMS19JTlZfU0hJRlQgICAgICAgICAgICAgICAgICAgIDggIC8qIEFJRl9CQ0xLX0lOViAqLworI2RlZmluZSBXTTg0MDBfQUlGX0JDTEtfSU5WX1dJRFRIICAgICAgICAgICAgICAgICAgICAxICAvKiBBSUZfQkNMS19JTlYgKi8KKyNkZWZpbmUgV004NDAwX0FJRl9MUkNMS19JTlYgICAgICAgICAgICAgICAgICAgIDB4MDA4MCAgLyogQUlGX0xSQ0xLX0lOViAqLworI2RlZmluZSBXTTg0MDBfQUlGX0xSQ0xLX0lOVl9NQVNLICAgICAgICAgICAgICAgMHgwMDgwICAvKiBBSUZfTFJDTEtfSU5WICovCisjZGVmaW5lIFdNODQwMF9BSUZfTFJDTEtfSU5WX1NISUZUICAgICAgICAgICAgICAgICAgIDcgIC8qIEFJRl9MUkNMS19JTlYgKi8KKyNkZWZpbmUgV004NDAwX0FJRl9MUkNMS19JTlZfV0lEVEggICAgICAgICAgICAgICAgICAgMSAgLyogQUlGX0xSQ0xLX0lOViAqLworI2RlZmluZSBXTTg0MDBfQUlGX1dMX01BU0sgICAgICAgICAgICAgICAgICAgICAgMHgwMDYwICAvKiBBSUZfV0wgLSBbNjo1XSAqLworI2RlZmluZSBXTTg0MDBfQUlGX1dMX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICA1ICAvKiBBSUZfV0wgLSBbNjo1XSAqLworI2RlZmluZSBXTTg0MDBfQUlGX1dMX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAyICAvKiBBSUZfV0wgLSBbNjo1XSAqLworI2RlZmluZSBXTTg0MDBfQUlGX1dMXzE2QklUUwkJCSgwIDw8IDUpCisjZGVmaW5lIFdNODQwMF9BSUZfV0xfMjBCSVRTCQkJKDEgPDwgNSkKKyNkZWZpbmUgV004NDAwX0FJRl9XTF8yNEJJVFMJCQkoMiA8PCA1KQorI2RlZmluZSBXTTg0MDBfQUlGX1dMXzMyQklUUwkJCSgzIDw8IDUpCisjZGVmaW5lIFdNODQwMF9BSUZfRk1UX01BU0sgICAgICAgICAgICAgICAgICAgICAweDAwMTggIC8qIEFJRl9GTVQgLSBbNDozXSAqLworI2RlZmluZSBXTTg0MDBfQUlGX0ZNVF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAzICAvKiBBSUZfRk1UIC0gWzQ6M10gKi8KKyNkZWZpbmUgV004NDAwX0FJRl9GTVRfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgMiAgLyogQUlGX0ZNVCAtIFs0OjNdICovCisjZGVmaW5lIFdNODQwMF9BSUZfRk1UX1JJR0hUSgkJCSgwIDw8IDMpCisjZGVmaW5lIFdNODQwMF9BSUZfRk1UX0xFRlRKCQkJKDEgPDwgMykKKyNkZWZpbmUgV004NDAwX0FJRl9GTVRfSTJTCQkJKDIgPDwgMykKKyNkZWZpbmUgV004NDAwX0FJRl9GTVRfRFNQCQkJKDMgPDwgMykKKworLyoKKyAqIFI2ICgweDA2KSAtIEF1ZGlvIEludGVyZmFjZSAoMikKKyAqLworI2RlZmluZSBXTTg0MDBfREFDTF9TUkMgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MDAwICAvKiBEQUNMX1NSQyAqLworI2RlZmluZSBXTTg0MDBfREFDTF9TUkNfTUFTSyAgICAgICAgICAgICAgICAgICAgMHg4MDAwICAvKiBEQUNMX1NSQyAqLworI2RlZmluZSBXTTg0MDBfREFDTF9TUkNfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgIDE1ICAvKiBEQUNMX1NSQyAqLworI2RlZmluZSBXTTg0MDBfREFDTF9TUkNfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBEQUNMX1NSQyAqLworI2RlZmluZSBXTTg0MDBfREFDUl9TUkMgICAgICAgICAgICAgICAgICAgICAgICAgMHg0MDAwICAvKiBEQUNSX1NSQyAqLworI2RlZmluZSBXTTg0MDBfREFDUl9TUkNfTUFTSyAgICAgICAgICAgICAgICAgICAgMHg0MDAwICAvKiBEQUNSX1NSQyAqLworI2RlZmluZSBXTTg0MDBfREFDUl9TUkNfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgIDE0ICAvKiBEQUNSX1NSQyAqLworI2RlZmluZSBXTTg0MDBfREFDUl9TUkNfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBEQUNSX1NSQyAqLworI2RlZmluZSBXTTg0MDBfQUlGREFDX1RETSAgICAgICAgICAgICAgICAgICAgICAgMHgyMDAwICAvKiBBSUZEQUNfVERNICovCisjZGVmaW5lIFdNODQwMF9BSUZEQUNfVERNX01BU0sgICAgICAgICAgICAgICAgICAweDIwMDAgIC8qIEFJRkRBQ19URE0gKi8KKyNkZWZpbmUgV004NDAwX0FJRkRBQ19URE1fU0hJRlQgICAgICAgICAgICAgICAgICAgICAxMyAgLyogQUlGREFDX1RETSAqLworI2RlZmluZSBXTTg0MDBfQUlGREFDX1RETV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAxICAvKiBBSUZEQUNfVERNICovCisjZGVmaW5lIFdNODQwMF9BSUZEQUNfVERNX0NIQU4gICAgICAgICAgICAgICAgICAweDEwMDAgIC8qIEFJRkRBQ19URE1fQ0hBTiAqLworI2RlZmluZSBXTTg0MDBfQUlGREFDX1RETV9DSEFOX01BU0sgICAgICAgICAgICAgMHgxMDAwICAvKiBBSUZEQUNfVERNX0NIQU4gKi8KKyNkZWZpbmUgV004NDAwX0FJRkRBQ19URE1fQ0hBTl9TSElGVCAgICAgICAgICAgICAgICAxMiAgLyogQUlGREFDX1RETV9DSEFOICovCisjZGVmaW5lIFdNODQwMF9BSUZEQUNfVERNX0NIQU5fV0lEVEggICAgICAgICAgICAgICAgIDEgIC8qIEFJRkRBQ19URE1fQ0hBTiAqLworI2RlZmluZSBXTTg0MDBfREFDX0JPT1NUX01BU0sgICAgICAgICAgICAgICAgICAgMHgwQzAwICAvKiBEQUNfQk9PU1QgLSBbMTE6MTBdICovCisjZGVmaW5lIFdNODQwMF9EQUNfQk9PU1RfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgMTAgIC8qIERBQ19CT09TVCAtIFsxMToxMF0gKi8KKyNkZWZpbmUgV004NDAwX0RBQ19CT09TVF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgMiAgLyogREFDX0JPT1NUIC0gWzExOjEwXSAqLworI2RlZmluZSBXTTg0MDBfREFDX0NPTVAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDEwICAvKiBEQUNfQ09NUCAqLworI2RlZmluZSBXTTg0MDBfREFDX0NPTVBfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMDEwICAvKiBEQUNfQ09NUCAqLworI2RlZmluZSBXTTg0MDBfREFDX0NPTVBfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICA0ICAvKiBEQUNfQ09NUCAqLworI2RlZmluZSBXTTg0MDBfREFDX0NPTVBfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBEQUNfQ09NUCAqLworI2RlZmluZSBXTTg0MDBfREFDX0NPTVBNT0RFICAgICAgICAgICAgICAgICAgICAgMHgwMDA4ICAvKiBEQUNfQ09NUE1PREUgKi8KKyNkZWZpbmUgV004NDAwX0RBQ19DT01QTU9ERV9NQVNLICAgICAgICAgICAgICAgIDB4MDAwOCAgLyogREFDX0NPTVBNT0RFICovCisjZGVmaW5lIFdNODQwMF9EQUNfQ09NUE1PREVfU0hJRlQgICAgICAgICAgICAgICAgICAgIDMgIC8qIERBQ19DT01QTU9ERSAqLworI2RlZmluZSBXTTg0MDBfREFDX0NPTVBNT0RFX1dJRFRIICAgICAgICAgICAgICAgICAgICAxICAvKiBEQUNfQ09NUE1PREUgKi8KKyNkZWZpbmUgV004NDAwX0FEQ19DT01QICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNCAgLyogQURDX0NPTVAgKi8KKyNkZWZpbmUgV004NDAwX0FEQ19DT01QX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDAwNCAgLyogQURDX0NPTVAgKi8KKyNkZWZpbmUgV004NDAwX0FEQ19DT01QX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgMiAgLyogQURDX0NPTVAgKi8KKyNkZWZpbmUgV004NDAwX0FEQ19DT01QX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogQURDX0NPTVAgKi8KKyNkZWZpbmUgV004NDAwX0FEQ19DT01QTU9ERSAgICAgICAgICAgICAgICAgICAgIDB4MDAwMiAgLyogQURDX0NPTVBNT0RFICovCisjZGVmaW5lIFdNODQwMF9BRENfQ09NUE1PREVfTUFTSyAgICAgICAgICAgICAgICAweDAwMDIgIC8qIEFEQ19DT01QTU9ERSAqLworI2RlZmluZSBXTTg0MDBfQURDX0NPTVBNT0RFX1NISUZUICAgICAgICAgICAgICAgICAgICAxICAvKiBBRENfQ09NUE1PREUgKi8KKyNkZWZpbmUgV004NDAwX0FEQ19DT01QTU9ERV9XSURUSCAgICAgICAgICAgICAgICAgICAgMSAgLyogQURDX0NPTVBNT0RFICovCisjZGVmaW5lIFdNODQwMF9MT09QQkFDSyAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIExPT1BCQUNLICovCisjZGVmaW5lIFdNODQwMF9MT09QQkFDS19NQVNLICAgICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIExPT1BCQUNLICovCisjZGVmaW5lIFdNODQwMF9MT09QQkFDS19TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIExPT1BCQUNLICovCisjZGVmaW5lIFdNODQwMF9MT09QQkFDS19XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIExPT1BCQUNLICovCisKKy8qCisgKiBSNyAoMHgwNykgLSBDbG9ja2luZyAoMSkKKyAqLworI2RlZmluZSBXTTg0MDBfVE9DTEtfUkFURSAgICAgICAgICAgICAgICAgICAgICAgMHg4MDAwICAvKiBUT0NMS19SQVRFICovCisjZGVmaW5lIFdNODQwMF9UT0NMS19SQVRFX01BU0sgICAgICAgICAgICAgICAgICAweDgwMDAgIC8qIFRPQ0xLX1JBVEUgKi8KKyNkZWZpbmUgV004NDAwX1RPQ0xLX1JBVEVfU0hJRlQgICAgICAgICAgICAgICAgICAgICAxNSAgLyogVE9DTEtfUkFURSAqLworI2RlZmluZSBXTTg0MDBfVE9DTEtfUkFURV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAxICAvKiBUT0NMS19SQVRFICovCisjZGVmaW5lIFdNODQwMF9UT0NMS19FTkEgICAgICAgICAgICAgICAgICAgICAgICAweDQwMDAgIC8qIFRPQ0xLX0VOQSAqLworI2RlZmluZSBXTTg0MDBfVE9DTEtfRU5BX01BU0sgICAgICAgICAgICAgICAgICAgMHg0MDAwICAvKiBUT0NMS19FTkEgKi8KKyNkZWZpbmUgV004NDAwX1RPQ0xLX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAxNCAgLyogVE9DTEtfRU5BICovCisjZGVmaW5lIFdNODQwMF9UT0NMS19FTkFfV0lEVEggICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIFRPQ0xLX0VOQSAqLworI2RlZmluZSBXTTg0MDBfT1BDTEtESVZfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgxRTAwICAvKiBPUENMS0RJViAtIFsxMjo5XSAqLworI2RlZmluZSBXTTg0MDBfT1BDTEtESVZfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICA5ICAvKiBPUENMS0RJViAtIFsxMjo5XSAqLworI2RlZmluZSBXTTg0MDBfT1BDTEtESVZfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICA0ICAvKiBPUENMS0RJViAtIFsxMjo5XSAqLworI2RlZmluZSBXTTg0MDBfRENMS0RJVl9NQVNLICAgICAgICAgICAgICAgICAgICAgMHgwMUMwICAvKiBEQ0xLRElWIC0gWzg6Nl0gKi8KKyNkZWZpbmUgV004NDAwX0RDTEtESVZfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgNiAgLyogRENMS0RJViAtIFs4OjZdICovCisjZGVmaW5lIFdNODQwMF9EQ0xLRElWX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgIDMgIC8qIERDTEtESVYgLSBbODo2XSAqLworI2RlZmluZSBXTTg0MDBfQkNMS19ESVZfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMDFFICAvKiBCQ0xLX0RJViAtIFs0OjFdICovCisjZGVmaW5lIFdNODQwMF9CQ0xLX0RJVl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEJDTEtfRElWIC0gWzQ6MV0gKi8KKyNkZWZpbmUgV004NDAwX0JDTEtfRElWX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgNCAgLyogQkNMS19ESVYgLSBbNDoxXSAqLworCisvKgorICogUjggKDB4MDgpIC0gQ2xvY2tpbmcgKDIpCisgKi8KKyNkZWZpbmUgV004NDAwX01DTEtfU1JDICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODAwMCAgLyogTUNMS19TUkMgKi8KKyNkZWZpbmUgV004NDAwX01DTEtfU1JDX01BU0sgICAgICAgICAgICAgICAgICAgIDB4ODAwMCAgLyogTUNMS19TUkMgKi8KKyNkZWZpbmUgV004NDAwX01DTEtfU1JDX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAxNSAgLyogTUNMS19TUkMgKi8KKyNkZWZpbmUgV004NDAwX01DTEtfU1JDX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogTUNMS19TUkMgKi8KKyNkZWZpbmUgV004NDAwX1NZU0NMS19TUkMgICAgICAgICAgICAgICAgICAgICAgIDB4NDAwMCAgLyogU1lTQ0xLX1NSQyAqLworI2RlZmluZSBXTTg0MDBfU1lTQ0xLX1NSQ19NQVNLICAgICAgICAgICAgICAgICAgMHg0MDAwICAvKiBTWVNDTEtfU1JDICovCisjZGVmaW5lIFdNODQwMF9TWVNDTEtfU1JDX1NISUZUICAgICAgICAgICAgICAgICAgICAgMTQgIC8qIFNZU0NMS19TUkMgKi8KKyNkZWZpbmUgV004NDAwX1NZU0NMS19TUkNfV0lEVEggICAgICAgICAgICAgICAgICAgICAgMSAgLyogU1lTQ0xLX1NSQyAqLworI2RlZmluZSBXTTg0MDBfQ0xLX0ZPUkNFICAgICAgICAgICAgICAgICAgICAgICAgMHgyMDAwICAvKiBDTEtfRk9SQ0UgKi8KKyNkZWZpbmUgV004NDAwX0NMS19GT1JDRV9NQVNLICAgICAgICAgICAgICAgICAgIDB4MjAwMCAgLyogQ0xLX0ZPUkNFICovCisjZGVmaW5lIFdNODQwMF9DTEtfRk9SQ0VfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgMTMgIC8qIENMS19GT1JDRSAqLworI2RlZmluZSBXTTg0MDBfQ0xLX0ZPUkNFX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBDTEtfRk9SQ0UgKi8KKyNkZWZpbmUgV004NDAwX01DTEtfRElWX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MTgwMCAgLyogTUNMS19ESVYgLSBbMTI6MTFdICovCisjZGVmaW5lIFdNODQwMF9NQ0xLX0RJVl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgMTEgIC8qIE1DTEtfRElWIC0gWzEyOjExXSAqLworI2RlZmluZSBXTTg0MDBfTUNMS19ESVZfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAyICAvKiBNQ0xLX0RJViAtIFsxMjoxMV0gKi8KKyNkZWZpbmUgV004NDAwX01DTEtfSU5WICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDQwMCAgLyogTUNMS19JTlYgKi8KKyNkZWZpbmUgV004NDAwX01DTEtfSU5WX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDQwMCAgLyogTUNMS19JTlYgKi8KKyNkZWZpbmUgV004NDAwX01DTEtfSU5WX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAxMCAgLyogTUNMS19JTlYgKi8KKyNkZWZpbmUgV004NDAwX01DTEtfSU5WX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogTUNMS19JTlYgKi8KKyNkZWZpbmUgV004NDAwX0FEQ19DTEtESVZfTUFTSyAgICAgICAgICAgICAgICAgIDB4MDBFMCAgLyogQURDX0NMS0RJViAtIFs3OjVdICovCisjZGVmaW5lIFdNODQwMF9BRENfQ0xLRElWX1NISUZUICAgICAgICAgICAgICAgICAgICAgIDUgIC8qIEFEQ19DTEtESVYgLSBbNzo1XSAqLworI2RlZmluZSBXTTg0MDBfQURDX0NMS0RJVl9XSURUSCAgICAgICAgICAgICAgICAgICAgICAzICAvKiBBRENfQ0xLRElWIC0gWzc6NV0gKi8KKyNkZWZpbmUgV004NDAwX0RBQ19DTEtESVZfTUFTSyAgICAgICAgICAgICAgICAgIDB4MDAxQyAgLyogREFDX0NMS0RJViAtIFs0OjJdICovCisjZGVmaW5lIFdNODQwMF9EQUNfQ0xLRElWX1NISUZUICAgICAgICAgICAgICAgICAgICAgIDIgIC8qIERBQ19DTEtESVYgLSBbNDoyXSAqLworI2RlZmluZSBXTTg0MDBfREFDX0NMS0RJVl9XSURUSCAgICAgICAgICAgICAgICAgICAgICAzICAvKiBEQUNfQ0xLRElWIC0gWzQ6Ml0gKi8KKworLyoKKyAqIFI5ICgweDA5KSAtIEF1ZGlvIEludGVyZmFjZSAoMykKKyAqLworI2RlZmluZSBXTTg0MDBfQUlGX01TVFIxICAgICAgICAgICAgICAgICAgICAgICAgMHg4MDAwICAvKiBBSUZfTVNUUjEgKi8KKyNkZWZpbmUgV004NDAwX0FJRl9NU1RSMV9NQVNLICAgICAgICAgICAgICAgICAgIDB4ODAwMCAgLyogQUlGX01TVFIxICovCisjZGVmaW5lIFdNODQwMF9BSUZfTVNUUjFfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgMTUgIC8qIEFJRl9NU1RSMSAqLworI2RlZmluZSBXTTg0MDBfQUlGX01TVFIxX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBBSUZfTVNUUjEgKi8KKyNkZWZpbmUgV004NDAwX0FJRl9NU1RSMiAgICAgICAgICAgICAgICAgICAgICAgIDB4NDAwMCAgLyogQUlGX01TVFIyICovCisjZGVmaW5lIFdNODQwMF9BSUZfTVNUUjJfTUFTSyAgICAgICAgICAgICAgICAgICAweDQwMDAgIC8qIEFJRl9NU1RSMiAqLworI2RlZmluZSBXTTg0MDBfQUlGX01TVFIyX1NISUZUICAgICAgICAgICAgICAgICAgICAgIDE0ICAvKiBBSUZfTVNUUjIgKi8KKyNkZWZpbmUgV004NDAwX0FJRl9NU1RSMl9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogQUlGX01TVFIyICovCisjZGVmaW5lIFdNODQwMF9BSUZfU0VMICAgICAgICAgICAgICAgICAgICAgICAgICAweDIwMDAgIC8qIEFJRl9TRUwgKi8KKyNkZWZpbmUgV004NDAwX0FJRl9TRUxfTUFTSyAgICAgICAgICAgICAgICAgICAgIDB4MjAwMCAgLyogQUlGX1NFTCAqLworI2RlZmluZSBXTTg0MDBfQUlGX1NFTF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDEzICAvKiBBSUZfU0VMICovCisjZGVmaW5lIFdNODQwMF9BSUZfU0VMX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEFJRl9TRUwgKi8KKyNkZWZpbmUgV004NDAwX0FEQ0xSQ19ESVIgICAgICAgICAgICAgICAgICAgICAgIDB4MDgwMCAgLyogQURDTFJDX0RJUiAqLworI2RlZmluZSBXTTg0MDBfQURDTFJDX0RJUl9NQVNLICAgICAgICAgICAgICAgICAgMHgwODAwICAvKiBBRENMUkNfRElSICovCisjZGVmaW5lIFdNODQwMF9BRENMUkNfRElSX1NISUZUICAgICAgICAgICAgICAgICAgICAgMTEgIC8qIEFEQ0xSQ19ESVIgKi8KKyNkZWZpbmUgV004NDAwX0FEQ0xSQ19ESVJfV0lEVEggICAgICAgICAgICAgICAgICAgICAgMSAgLyogQURDTFJDX0RJUiAqLworI2RlZmluZSBXTTg0MDBfQURDTFJDX1JBVEVfTUFTSyAgICAgICAgICAgICAgICAgMHgwN0ZGICAvKiBBRENMUkNfUkFURSAtIFsxMDowXSAqLworI2RlZmluZSBXTTg0MDBfQURDTFJDX1JBVEVfU0hJRlQgICAgICAgICAgICAgICAgICAgICAwICAvKiBBRENMUkNfUkFURSAtIFsxMDowXSAqLworI2RlZmluZSBXTTg0MDBfQURDTFJDX1JBVEVfV0lEVEggICAgICAgICAgICAgICAgICAgIDExICAvKiBBRENMUkNfUkFURSAtIFsxMDowXSAqLworCisvKgorICogUjEwICgweDBBKSAtIEF1ZGlvIEludGVyZmFjZSAoNCkKKyAqLworI2RlZmluZSBXTTg0MDBfQUxSQ0dQSU8xICAgICAgICAgICAgICAgICAgICAgICAgMHg4MDAwICAvKiBBTFJDR1BJTzEgKi8KKyNkZWZpbmUgV004NDAwX0FMUkNHUElPMV9NQVNLICAgICAgICAgICAgICAgICAgIDB4ODAwMCAgLyogQUxSQ0dQSU8xICovCisjZGVmaW5lIFdNODQwMF9BTFJDR1BJTzFfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgMTUgIC8qIEFMUkNHUElPMSAqLworI2RlZmluZSBXTTg0MDBfQUxSQ0dQSU8xX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBBTFJDR1BJTzEgKi8KKyNkZWZpbmUgV004NDAwX0FMUkNCR1BJTzYgICAgICAgICAgICAgICAgICAgICAgIDB4NDAwMCAgLyogQUxSQ0JHUElPNiAqLworI2RlZmluZSBXTTg0MDBfQUxSQ0JHUElPNl9NQVNLICAgICAgICAgICAgICAgICAgMHg0MDAwICAvKiBBTFJDQkdQSU82ICovCisjZGVmaW5lIFdNODQwMF9BTFJDQkdQSU82X1NISUZUICAgICAgICAgICAgICAgICAgICAgMTQgIC8qIEFMUkNCR1BJTzYgKi8KKyNkZWZpbmUgV004NDAwX0FMUkNCR1BJTzZfV0lEVEggICAgICAgICAgICAgICAgICAgICAgMSAgLyogQUxSQ0JHUElPNiAqLworI2RlZmluZSBXTTg0MDBfQUlGX1RSSVMgICAgICAgICAgICAgICAgICAgICAgICAgMHgyMDAwICAvKiBBSUZfVFJJUyAqLworI2RlZmluZSBXTTg0MDBfQUlGX1RSSVNfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgyMDAwICAvKiBBSUZfVFJJUyAqLworI2RlZmluZSBXTTg0MDBfQUlGX1RSSVNfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgIDEzICAvKiBBSUZfVFJJUyAqLworI2RlZmluZSBXTTg0MDBfQUlGX1RSSVNfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBBSUZfVFJJUyAqLworI2RlZmluZSBXTTg0MDBfREFDTFJDX0RJUiAgICAgICAgICAgICAgICAgICAgICAgMHgwODAwICAvKiBEQUNMUkNfRElSICovCisjZGVmaW5lIFdNODQwMF9EQUNMUkNfRElSX01BU0sgICAgICAgICAgICAgICAgICAweDA4MDAgIC8qIERBQ0xSQ19ESVIgKi8KKyNkZWZpbmUgV004NDAwX0RBQ0xSQ19ESVJfU0hJRlQgICAgICAgICAgICAgICAgICAgICAxMSAgLyogREFDTFJDX0RJUiAqLworI2RlZmluZSBXTTg0MDBfREFDTFJDX0RJUl9XSURUSCAgICAgICAgICAgICAgICAgICAgICAxICAvKiBEQUNMUkNfRElSICovCisjZGVmaW5lIFdNODQwMF9EQUNMUkNfUkFURV9NQVNLICAgICAgICAgICAgICAgICAweDA3RkYgIC8qIERBQ0xSQ19SQVRFIC0gWzEwOjBdICovCisjZGVmaW5lIFdNODQwMF9EQUNMUkNfUkFURV9TSElGVCAgICAgICAgICAgICAgICAgICAgIDAgIC8qIERBQ0xSQ19SQVRFIC0gWzEwOjBdICovCisjZGVmaW5lIFdNODQwMF9EQUNMUkNfUkFURV9XSURUSCAgICAgICAgICAgICAgICAgICAgMTEgIC8qIERBQ0xSQ19SQVRFIC0gWzEwOjBdICovCisKKy8qCisgKiBSMTEgKDB4MEIpIC0gREFDIENUUkwKKyAqLworI2RlZmluZSBXTTg0MDBfREFDX1NETUNMS19SQVRFICAgICAgICAgICAgICAgICAgMHgyMDAwICAvKiBEQUNfU0RNQ0xLX1JBVEUgKi8KKyNkZWZpbmUgV004NDAwX0RBQ19TRE1DTEtfUkFURV9NQVNLICAgICAgICAgICAgIDB4MjAwMCAgLyogREFDX1NETUNMS19SQVRFICovCisjZGVmaW5lIFdNODQwMF9EQUNfU0RNQ0xLX1JBVEVfU0hJRlQgICAgICAgICAgICAgICAgMTMgIC8qIERBQ19TRE1DTEtfUkFURSAqLworI2RlZmluZSBXTTg0MDBfREFDX1NETUNMS19SQVRFX1dJRFRIICAgICAgICAgICAgICAgICAxICAvKiBEQUNfU0RNQ0xLX1JBVEUgKi8KKyNkZWZpbmUgV004NDAwX0FJRl9MUkNMS1JBVEUgICAgICAgICAgICAgICAgICAgIDB4MDQwMCAgLyogQUlGX0xSQ0xLUkFURSAqLworI2RlZmluZSBXTTg0MDBfQUlGX0xSQ0xLUkFURV9NQVNLICAgICAgICAgICAgICAgMHgwNDAwICAvKiBBSUZfTFJDTEtSQVRFICovCisjZGVmaW5lIFdNODQwMF9BSUZfTFJDTEtSQVRFX1NISUZUICAgICAgICAgICAgICAgICAgMTAgIC8qIEFJRl9MUkNMS1JBVEUgKi8KKyNkZWZpbmUgV004NDAwX0FJRl9MUkNMS1JBVEVfV0lEVEggICAgICAgICAgICAgICAgICAgMSAgLyogQUlGX0xSQ0xLUkFURSAqLworI2RlZmluZSBXTTg0MDBfREFDX01PTk8gICAgICAgICAgICAgICAgICAgICAgICAgMHgwMjAwICAvKiBEQUNfTU9OTyAqLworI2RlZmluZSBXTTg0MDBfREFDX01PTk9fTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMjAwICAvKiBEQUNfTU9OTyAqLworI2RlZmluZSBXTTg0MDBfREFDX01PTk9fU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICA5ICAvKiBEQUNfTU9OTyAqLworI2RlZmluZSBXTTg0MDBfREFDX01PTk9fV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBEQUNfTU9OTyAqLworI2RlZmluZSBXTTg0MDBfREFDX1NCX0ZJTFQgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBEQUNfU0JfRklMVCAqLworI2RlZmluZSBXTTg0MDBfREFDX1NCX0ZJTFRfTUFTSyAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBEQUNfU0JfRklMVCAqLworI2RlZmluZSBXTTg0MDBfREFDX1NCX0ZJTFRfU0hJRlQgICAgICAgICAgICAgICAgICAgICA4ICAvKiBEQUNfU0JfRklMVCAqLworI2RlZmluZSBXTTg0MDBfREFDX1NCX0ZJTFRfV0lEVEggICAgICAgICAgICAgICAgICAgICAxICAvKiBEQUNfU0JfRklMVCAqLworI2RlZmluZSBXTTg0MDBfREFDX01VVEVSQVRFICAgICAgICAgICAgICAgICAgICAgMHgwMDgwICAvKiBEQUNfTVVURVJBVEUgKi8KKyNkZWZpbmUgV004NDAwX0RBQ19NVVRFUkFURV9NQVNLICAgICAgICAgICAgICAgIDB4MDA4MCAgLyogREFDX01VVEVSQVRFICovCisjZGVmaW5lIFdNODQwMF9EQUNfTVVURVJBVEVfU0hJRlQgICAgICAgICAgICAgICAgICAgIDcgIC8qIERBQ19NVVRFUkFURSAqLworI2RlZmluZSBXTTg0MDBfREFDX01VVEVSQVRFX1dJRFRIICAgICAgICAgICAgICAgICAgICAxICAvKiBEQUNfTVVURVJBVEUgKi8KKyNkZWZpbmUgV004NDAwX0RBQ19NVVRFTU9ERSAgICAgICAgICAgICAgICAgICAgIDB4MDA0MCAgLyogREFDX01VVEVNT0RFICovCisjZGVmaW5lIFdNODQwMF9EQUNfTVVURU1PREVfTUFTSyAgICAgICAgICAgICAgICAweDAwNDAgIC8qIERBQ19NVVRFTU9ERSAqLworI2RlZmluZSBXTTg0MDBfREFDX01VVEVNT0RFX1NISUZUICAgICAgICAgICAgICAgICAgICA2ICAvKiBEQUNfTVVURU1PREUgKi8KKyNkZWZpbmUgV004NDAwX0RBQ19NVVRFTU9ERV9XSURUSCAgICAgICAgICAgICAgICAgICAgMSAgLyogREFDX01VVEVNT0RFICovCisjZGVmaW5lIFdNODQwMF9ERUVNUF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAweDAwMzAgIC8qIERFRU1QIC0gWzU6NF0gKi8KKyNkZWZpbmUgV004NDAwX0RFRU1QX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICAgNCAgLyogREVFTVAgLSBbNTo0XSAqLworI2RlZmluZSBXTTg0MDBfREVFTVBfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgICAyICAvKiBERUVNUCAtIFs1OjRdICovCisjZGVmaW5lIFdNODQwMF9EQUNfTVVURSAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDQgIC8qIERBQ19NVVRFICovCisjZGVmaW5lIFdNODQwMF9EQUNfTVVURV9NQVNLICAgICAgICAgICAgICAgICAgICAweDAwMDQgIC8qIERBQ19NVVRFICovCisjZGVmaW5lIFdNODQwMF9EQUNfTVVURV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDIgIC8qIERBQ19NVVRFICovCisjZGVmaW5lIFdNODQwMF9EQUNfTVVURV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIERBQ19NVVRFICovCisjZGVmaW5lIFdNODQwMF9EQUNMX0RBVElOViAgICAgICAgICAgICAgICAgICAgICAweDAwMDIgIC8qIERBQ0xfREFUSU5WICovCisjZGVmaW5lIFdNODQwMF9EQUNMX0RBVElOVl9NQVNLICAgICAgICAgICAgICAgICAweDAwMDIgIC8qIERBQ0xfREFUSU5WICovCisjZGVmaW5lIFdNODQwMF9EQUNMX0RBVElOVl9TSElGVCAgICAgICAgICAgICAgICAgICAgIDEgIC8qIERBQ0xfREFUSU5WICovCisjZGVmaW5lIFdNODQwMF9EQUNMX0RBVElOVl9XSURUSCAgICAgICAgICAgICAgICAgICAgIDEgIC8qIERBQ0xfREFUSU5WICovCisjZGVmaW5lIFdNODQwMF9EQUNSX0RBVElOViAgICAgICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIERBQ1JfREFUSU5WICovCisjZGVmaW5lIFdNODQwMF9EQUNSX0RBVElOVl9NQVNLICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIERBQ1JfREFUSU5WICovCisjZGVmaW5lIFdNODQwMF9EQUNSX0RBVElOVl9TSElGVCAgICAgICAgICAgICAgICAgICAgIDAgIC8qIERBQ1JfREFUSU5WICovCisjZGVmaW5lIFdNODQwMF9EQUNSX0RBVElOVl9XSURUSCAgICAgICAgICAgICAgICAgICAgIDEgIC8qIERBQ1JfREFUSU5WICovCisKKy8qCisgKiBSMTIgKDB4MEMpIC0gTGVmdCBEQUMgRGlnaXRhbCBWb2x1bWUKKyAqLworI2RlZmluZSBXTTg0MDBfREFDX1ZVICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBEQUNfVlUgKi8KKyNkZWZpbmUgV004NDAwX0RBQ19WVV9NQVNLICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogREFDX1ZVICovCisjZGVmaW5lIFdNODQwMF9EQUNfVlVfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgIDggIC8qIERBQ19WVSAqLworI2RlZmluZSBXTTg0MDBfREFDX1ZVX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBEQUNfVlUgKi8KKyNkZWZpbmUgV004NDAwX0RBQ0xfVk9MX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDBGRiAgLyogREFDTF9WT0wgLSBbNzowXSAqLworI2RlZmluZSBXTTg0MDBfREFDTF9WT0xfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAwICAvKiBEQUNMX1ZPTCAtIFs3OjBdICovCisjZGVmaW5lIFdNODQwMF9EQUNMX1ZPTF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDggIC8qIERBQ0xfVk9MIC0gWzc6MF0gKi8KKworLyoKKyAqIFIxMyAoMHgwRCkgLSBSaWdodCBEQUMgRGlnaXRhbCBWb2x1bWUKKyAqLworI2RlZmluZSBXTTg0MDBfREFDX1ZVICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBEQUNfVlUgKi8KKyNkZWZpbmUgV004NDAwX0RBQ19WVV9NQVNLICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogREFDX1ZVICovCisjZGVmaW5lIFdNODQwMF9EQUNfVlVfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgIDggIC8qIERBQ19WVSAqLworI2RlZmluZSBXTTg0MDBfREFDX1ZVX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBEQUNfVlUgKi8KKyNkZWZpbmUgV004NDAwX0RBQ1JfVk9MX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDBGRiAgLyogREFDUl9WT0wgLSBbNzowXSAqLworI2RlZmluZSBXTTg0MDBfREFDUl9WT0xfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAwICAvKiBEQUNSX1ZPTCAtIFs3OjBdICovCisjZGVmaW5lIFdNODQwMF9EQUNSX1ZPTF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDggIC8qIERBQ1JfVk9MIC0gWzc6MF0gKi8KKworLyoKKyAqIFIxNCAoMHgwRSkgLSBEaWdpdGFsIFNpZGUgVG9uZQorICovCisjZGVmaW5lIFdNODQwMF9BRENMX0RBQ19TVk9MX01BU0sgICAgICAgICAgICAgICAweDFFMDAgIC8qICAgQURDTF9EQUNfU1ZPTCAtIFsxMjo5XSAqLworI2RlZmluZSBXTTg0MDBfQURDTF9EQUNfU1ZPTF9TSElGVCAgICAgICAgICAgICAgICAgICA5ICAvKiAgIEFEQ0xfREFDX1NWT0wgLSBbMTI6OV0gKi8KKyNkZWZpbmUgV004NDAwX0FEQ0xfREFDX1NWT0xfV0lEVEggICAgICAgICAgICAgICAgICAgNCAgLyogICBBRENMX0RBQ19TVk9MIC0gWzEyOjldICovCisjZGVmaW5lIFdNODQwMF9BRENSX0RBQ19TVk9MX01BU0sgICAgICAgICAgICAgICAweDAxRTAgIC8qIEFEQ1JfREFDX1NWT0wgLSBbODo1XSAqLworI2RlZmluZSBXTTg0MDBfQURDUl9EQUNfU1ZPTF9TSElGVCAgICAgICAgICAgICAgICAgICA1ICAvKiBBRENSX0RBQ19TVk9MIC0gWzg6NV0gKi8KKyNkZWZpbmUgV004NDAwX0FEQ1JfREFDX1NWT0xfV0lEVEggICAgICAgICAgICAgICAgICAgNCAgLyogQURDUl9EQUNfU1ZPTCAtIFs4OjVdICovCisjZGVmaW5lIFdNODQwMF9BRENfVE9fREFDTF9NQVNLICAgICAgICAgICAgICAgICAweDAwMEMgIC8qIEFEQ19UT19EQUNMIC0gWzM6Ml0gKi8KKyNkZWZpbmUgV004NDAwX0FEQ19UT19EQUNMX1NISUZUICAgICAgICAgICAgICAgICAgICAgMiAgLyogQURDX1RPX0RBQ0wgLSBbMzoyXSAqLworI2RlZmluZSBXTTg0MDBfQURDX1RPX0RBQ0xfV0lEVEggICAgICAgICAgICAgICAgICAgICAyICAvKiBBRENfVE9fREFDTCAtIFszOjJdICovCisjZGVmaW5lIFdNODQwMF9BRENfVE9fREFDUl9NQVNLICAgICAgICAgICAgICAgICAweDAwMDMgIC8qIEFEQ19UT19EQUNSIC0gWzE6MF0gKi8KKyNkZWZpbmUgV004NDAwX0FEQ19UT19EQUNSX1NISUZUICAgICAgICAgICAgICAgICAgICAgMCAgLyogQURDX1RPX0RBQ1IgLSBbMTowXSAqLworI2RlZmluZSBXTTg0MDBfQURDX1RPX0RBQ1JfV0lEVEggICAgICAgICAgICAgICAgICAgICAyICAvKiBBRENfVE9fREFDUiAtIFsxOjBdICovCisKKy8qCisgKiBSMTUgKDB4MEYpIC0gQURDIENUUkwKKyAqLworI2RlZmluZSBXTTg0MDBfQURDX0hQRl9FTkEgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBBRENfSFBGX0VOQSAqLworI2RlZmluZSBXTTg0MDBfQURDX0hQRl9FTkFfTUFTSyAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBBRENfSFBGX0VOQSAqLworI2RlZmluZSBXTTg0MDBfQURDX0hQRl9FTkFfU0hJRlQgICAgICAgICAgICAgICAgICAgICA4ICAvKiBBRENfSFBGX0VOQSAqLworI2RlZmluZSBXTTg0MDBfQURDX0hQRl9FTkFfV0lEVEggICAgICAgICAgICAgICAgICAgICAxICAvKiBBRENfSFBGX0VOQSAqLworI2RlZmluZSBXTTg0MDBfQURDX0hQRl9DVVRfTUFTSyAgICAgICAgICAgICAgICAgMHgwMDYwICAvKiBBRENfSFBGX0NVVCAtIFs2OjVdICovCisjZGVmaW5lIFdNODQwMF9BRENfSFBGX0NVVF9TSElGVCAgICAgICAgICAgICAgICAgICAgIDUgIC8qIEFEQ19IUEZfQ1VUIC0gWzY6NV0gKi8KKyNkZWZpbmUgV004NDAwX0FEQ19IUEZfQ1VUX1dJRFRIICAgICAgICAgICAgICAgICAgICAgMiAgLyogQURDX0hQRl9DVVQgLSBbNjo1XSAqLworI2RlZmluZSBXTTg0MDBfQURDTF9EQVRJTlYgICAgICAgICAgICAgICAgICAgICAgMHgwMDAyICAvKiBBRENMX0RBVElOViAqLworI2RlZmluZSBXTTg0MDBfQURDTF9EQVRJTlZfTUFTSyAgICAgICAgICAgICAgICAgMHgwMDAyICAvKiBBRENMX0RBVElOViAqLworI2RlZmluZSBXTTg0MDBfQURDTF9EQVRJTlZfU0hJRlQgICAgICAgICAgICAgICAgICAgICAxICAvKiBBRENMX0RBVElOViAqLworI2RlZmluZSBXTTg0MDBfQURDTF9EQVRJTlZfV0lEVEggICAgICAgICAgICAgICAgICAgICAxICAvKiBBRENMX0RBVElOViAqLworI2RlZmluZSBXTTg0MDBfQURDUl9EQVRJTlYgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBBRENSX0RBVElOViAqLworI2RlZmluZSBXTTg0MDBfQURDUl9EQVRJTlZfTUFTSyAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBBRENSX0RBVElOViAqLworI2RlZmluZSBXTTg0MDBfQURDUl9EQVRJTlZfU0hJRlQgICAgICAgICAgICAgICAgICAgICAwICAvKiBBRENSX0RBVElOViAqLworI2RlZmluZSBXTTg0MDBfQURDUl9EQVRJTlZfV0lEVEggICAgICAgICAgICAgICAgICAgICAxICAvKiBBRENSX0RBVElOViAqLworCisvKgorICogUjE2ICgweDEwKSAtIExlZnQgQURDIERpZ2l0YWwgVm9sdW1lCisgKi8KKyNkZWZpbmUgV004NDAwX0FEQ19WVSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogQURDX1ZVICovCisjZGVmaW5lIFdNODQwMF9BRENfVlVfTUFTSyAgICAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIEFEQ19WVSAqLworI2RlZmluZSBXTTg0MDBfQURDX1ZVX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICA4ICAvKiBBRENfVlUgKi8KKyNkZWZpbmUgV004NDAwX0FEQ19WVV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogQURDX1ZVICovCisjZGVmaW5lIFdNODQwMF9BRENMX1ZPTF9NQVNLICAgICAgICAgICAgICAgICAgICAweDAwRkYgIC8qIEFEQ0xfVk9MIC0gWzc6MF0gKi8KKyNkZWZpbmUgV004NDAwX0FEQ0xfVk9MX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgMCAgLyogQURDTF9WT0wgLSBbNzowXSAqLworI2RlZmluZSBXTTg0MDBfQURDTF9WT0xfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICA4ICAvKiBBRENMX1ZPTCAtIFs3OjBdICovCisKKy8qCisgKiBSMTcgKDB4MTEpIC0gUmlnaHQgQURDIERpZ2l0YWwgVm9sdW1lCisgKi8KKyNkZWZpbmUgV004NDAwX0FEQ19WVSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogQURDX1ZVICovCisjZGVmaW5lIFdNODQwMF9BRENfVlVfTUFTSyAgICAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIEFEQ19WVSAqLworI2RlZmluZSBXTTg0MDBfQURDX1ZVX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICA4ICAvKiBBRENfVlUgKi8KKyNkZWZpbmUgV004NDAwX0FEQ19WVV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogQURDX1ZVICovCisjZGVmaW5lIFdNODQwMF9BRENSX1ZPTF9NQVNLICAgICAgICAgICAgICAgICAgICAweDAwRkYgIC8qIEFEQ1JfVk9MIC0gWzc6MF0gKi8KKyNkZWZpbmUgV004NDAwX0FEQ1JfVk9MX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgMCAgLyogQURDUl9WT0wgLSBbNzowXSAqLworI2RlZmluZSBXTTg0MDBfQURDUl9WT0xfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICA4ICAvKiBBRENSX1ZPTCAtIFs3OjBdICovCisKKy8qCisgKiBSMjQgKDB4MTgpIC0gTGVmdCBMaW5lIElucHV0IDEmMiBWb2x1bWUKKyAqLworI2RlZmluZSBXTTg0MDBfSVBWVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBJUFZVICovCisjZGVmaW5lIFdNODQwMF9JUFZVX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIElQVlUgKi8KKyNkZWZpbmUgV004NDAwX0lQVlVfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgOCAgLyogSVBWVSAqLworI2RlZmluZSBXTTg0MDBfSVBWVV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBJUFZVICovCisjZGVmaW5lIFdNODQwMF9MSTEyTVVURSAgICAgICAgICAgICAgICAgICAgICAgICAweDAwODAgIC8qIExJMTJNVVRFICovCisjZGVmaW5lIFdNODQwMF9MSTEyTVVURV9NQVNLICAgICAgICAgICAgICAgICAgICAweDAwODAgIC8qIExJMTJNVVRFICovCisjZGVmaW5lIFdNODQwMF9MSTEyTVVURV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDcgIC8qIExJMTJNVVRFICovCisjZGVmaW5lIFdNODQwMF9MSTEyTVVURV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIExJMTJNVVRFICovCisjZGVmaW5lIFdNODQwMF9MSTEyWkMgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwNDAgIC8qIExJMTJaQyAqLworI2RlZmluZSBXTTg0MDBfTEkxMlpDX01BU0sgICAgICAgICAgICAgICAgICAgICAgMHgwMDQwICAvKiBMSTEyWkMgKi8KKyNkZWZpbmUgV004NDAwX0xJMTJaQ19TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgNiAgLyogTEkxMlpDICovCisjZGVmaW5lIFdNODQwMF9MSTEyWkNfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIExJMTJaQyAqLworI2RlZmluZSBXTTg0MDBfTElOMTJWT0xfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMDFGICAvKiBMSU4xMlZPTCAtIFs0OjBdICovCisjZGVmaW5lIFdNODQwMF9MSU4xMlZPTF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIExJTjEyVk9MIC0gWzQ6MF0gKi8KKyNkZWZpbmUgV004NDAwX0xJTjEyVk9MX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgNSAgLyogTElOMTJWT0wgLSBbNDowXSAqLworCisvKgorICogUjI1ICgweDE5KSAtIExlZnQgTGluZSBJbnB1dCAzJjQgVm9sdW1lCisgKi8KKyNkZWZpbmUgV004NDAwX0lQVlUgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogSVBWVSAqLworI2RlZmluZSBXTTg0MDBfSVBWVV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBJUFZVICovCisjZGVmaW5lIFdNODQwMF9JUFZVX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICAgIDggIC8qIElQVlUgKi8KKyNkZWZpbmUgV004NDAwX0lQVlVfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogSVBWVSAqLworI2RlZmluZSBXTTg0MDBfTEkzNE1VVEUgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDgwICAvKiBMSTM0TVVURSAqLworI2RlZmluZSBXTTg0MDBfTEkzNE1VVEVfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMDgwICAvKiBMSTM0TVVURSAqLworI2RlZmluZSBXTTg0MDBfTEkzNE1VVEVfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICA3ICAvKiBMSTM0TVVURSAqLworI2RlZmluZSBXTTg0MDBfTEkzNE1VVEVfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBMSTM0TVVURSAqLworI2RlZmluZSBXTTg0MDBfTEkzNFpDICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDQwICAvKiBMSTM0WkMgKi8KKyNkZWZpbmUgV004NDAwX0xJMzRaQ19NQVNLICAgICAgICAgICAgICAgICAgICAgIDB4MDA0MCAgLyogTEkzNFpDICovCisjZGVmaW5lIFdNODQwMF9MSTM0WkNfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgIDYgIC8qIExJMzRaQyAqLworI2RlZmluZSBXTTg0MDBfTEkzNFpDX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBMSTM0WkMgKi8KKyNkZWZpbmUgV004NDAwX0xJTjM0Vk9MX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDAxRiAgLyogTElOMzRWT0wgLSBbNDowXSAqLworI2RlZmluZSBXTTg0MDBfTElOMzRWT0xfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAwICAvKiBMSU4zNFZPTCAtIFs0OjBdICovCisjZGVmaW5lIFdNODQwMF9MSU4zNFZPTF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDUgIC8qIExJTjM0Vk9MIC0gWzQ6MF0gKi8KKworLyoKKyAqIFIyNiAoMHgxQSkgLSBSaWdodCBMaW5lIElucHV0IDEmMiBWb2x1bWUKKyAqLworI2RlZmluZSBXTTg0MDBfSVBWVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBJUFZVICovCisjZGVmaW5lIFdNODQwMF9JUFZVX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIElQVlUgKi8KKyNkZWZpbmUgV004NDAwX0lQVlVfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgOCAgLyogSVBWVSAqLworI2RlZmluZSBXTTg0MDBfSVBWVV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBJUFZVICovCisjZGVmaW5lIFdNODQwMF9SSTEyTVVURSAgICAgICAgICAgICAgICAgICAgICAgICAweDAwODAgIC8qIFJJMTJNVVRFICovCisjZGVmaW5lIFdNODQwMF9SSTEyTVVURV9NQVNLICAgICAgICAgICAgICAgICAgICAweDAwODAgIC8qIFJJMTJNVVRFICovCisjZGVmaW5lIFdNODQwMF9SSTEyTVVURV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDcgIC8qIFJJMTJNVVRFICovCisjZGVmaW5lIFdNODQwMF9SSTEyTVVURV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIFJJMTJNVVRFICovCisjZGVmaW5lIFdNODQwMF9SSTEyWkMgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwNDAgIC8qIFJJMTJaQyAqLworI2RlZmluZSBXTTg0MDBfUkkxMlpDX01BU0sgICAgICAgICAgICAgICAgICAgICAgMHgwMDQwICAvKiBSSTEyWkMgKi8KKyNkZWZpbmUgV004NDAwX1JJMTJaQ19TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgNiAgLyogUkkxMlpDICovCisjZGVmaW5lIFdNODQwMF9SSTEyWkNfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIFJJMTJaQyAqLworI2RlZmluZSBXTTg0MDBfUklOMTJWT0xfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMDFGICAvKiBSSU4xMlZPTCAtIFs0OjBdICovCisjZGVmaW5lIFdNODQwMF9SSU4xMlZPTF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIFJJTjEyVk9MIC0gWzQ6MF0gKi8KKyNkZWZpbmUgV004NDAwX1JJTjEyVk9MX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgNSAgLyogUklOMTJWT0wgLSBbNDowXSAqLworCisvKgorICogUjI3ICgweDFCKSAtIFJpZ2h0IExpbmUgSW5wdXQgMyY0IFZvbHVtZQorICovCisjZGVmaW5lIFdNODQwMF9JUFZVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIElQVlUgKi8KKyNkZWZpbmUgV004NDAwX0lQVlVfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogSVBWVSAqLworI2RlZmluZSBXTTg0MDBfSVBWVV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgICA4ICAvKiBJUFZVICovCisjZGVmaW5lIFdNODQwMF9JUFZVX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIElQVlUgKi8KKyNkZWZpbmUgV004NDAwX1JJMzRNVVRFICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA4MCAgLyogUkkzNE1VVEUgKi8KKyNkZWZpbmUgV004NDAwX1JJMzRNVVRFX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDA4MCAgLyogUkkzNE1VVEUgKi8KKyNkZWZpbmUgV004NDAwX1JJMzRNVVRFX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgNyAgLyogUkkzNE1VVEUgKi8KKyNkZWZpbmUgV004NDAwX1JJMzRNVVRFX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogUkkzNE1VVEUgKi8KKyNkZWZpbmUgV004NDAwX1JJMzRaQyAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA0MCAgLyogUkkzNFpDICovCisjZGVmaW5lIFdNODQwMF9SSTM0WkNfTUFTSyAgICAgICAgICAgICAgICAgICAgICAweDAwNDAgIC8qIFJJMzRaQyAqLworI2RlZmluZSBXTTg0MDBfUkkzNFpDX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICA2ICAvKiBSSTM0WkMgKi8KKyNkZWZpbmUgV004NDAwX1JJMzRaQ19XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogUkkzNFpDICovCisjZGVmaW5lIFdNODQwMF9SSU4zNFZPTF9NQVNLICAgICAgICAgICAgICAgICAgICAweDAwMUYgIC8qIFJJTjM0Vk9MIC0gWzQ6MF0gKi8KKyNkZWZpbmUgV004NDAwX1JJTjM0Vk9MX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgMCAgLyogUklOMzRWT0wgLSBbNDowXSAqLworI2RlZmluZSBXTTg0MDBfUklOMzRWT0xfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICA1ICAvKiBSSU4zNFZPTCAtIFs0OjBdICovCisKKy8qCisgKiBSMjggKDB4MUMpIC0gTGVmdCBPdXRwdXQgVm9sdW1lCisgKi8KKyNkZWZpbmUgV004NDAwX09QVlUgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogT1BWVSAqLworI2RlZmluZSBXTTg0MDBfT1BWVV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBPUFZVICovCisjZGVmaW5lIFdNODQwMF9PUFZVX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICAgIDggIC8qIE9QVlUgKi8KKyNkZWZpbmUgV004NDAwX09QVlVfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogT1BWVSAqLworI2RlZmluZSBXTTg0MDBfTE9aQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDgwICAvKiBMT1pDICovCisjZGVmaW5lIFdNODQwMF9MT1pDX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAweDAwODAgIC8qIExPWkMgKi8KKyNkZWZpbmUgV004NDAwX0xPWkNfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgNyAgLyogTE9aQyAqLworI2RlZmluZSBXTTg0MDBfTE9aQ19XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBMT1pDICovCisjZGVmaW5lIFdNODQwMF9MT1VUVk9MX01BU0sgICAgICAgICAgICAgICAgICAgICAweDAwN0YgIC8qIExPVVRWT0wgLSBbNjowXSAqLworI2RlZmluZSBXTTg0MDBfTE9VVFZPTF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAwICAvKiBMT1VUVk9MIC0gWzY6MF0gKi8KKyNkZWZpbmUgV004NDAwX0xPVVRWT0xfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgNyAgLyogTE9VVFZPTCAtIFs2OjBdICovCisKKy8qCisgKiBSMjkgKDB4MUQpIC0gUmlnaHQgT3V0cHV0IFZvbHVtZQorICovCisjZGVmaW5lIFdNODQwMF9PUFZVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIE9QVlUgKi8KKyNkZWZpbmUgV004NDAwX09QVlVfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogT1BWVSAqLworI2RlZmluZSBXTTg0MDBfT1BWVV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgICA4ICAvKiBPUFZVICovCisjZGVmaW5lIFdNODQwMF9PUFZVX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIE9QVlUgKi8KKyNkZWZpbmUgV004NDAwX1JPWkMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA4MCAgLyogUk9aQyAqLworI2RlZmluZSBXTTg0MDBfUk9aQ19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDgwICAvKiBST1pDICovCisjZGVmaW5lIFdNODQwMF9ST1pDX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcgIC8qIFJPWkMgKi8KKyNkZWZpbmUgV004NDAwX1JPWkNfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogUk9aQyAqLworI2RlZmluZSBXTTg0MDBfUk9VVFZPTF9NQVNLICAgICAgICAgICAgICAgICAgICAgMHgwMDdGICAvKiBST1VUVk9MIC0gWzY6MF0gKi8KKyNkZWZpbmUgV004NDAwX1JPVVRWT0xfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgMCAgLyogUk9VVFZPTCAtIFs2OjBdICovCisjZGVmaW5lIFdNODQwMF9ST1VUVk9MX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgIDcgIC8qIFJPVVRWT0wgLSBbNjowXSAqLworCisvKgorICogUjMwICgweDFFKSAtIExpbmUgT3V0cHV0cyBWb2x1bWUKKyAqLworI2RlZmluZSBXTTg0MDBfTE9OTVVURSAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDQwICAvKiBMT05NVVRFICovCisjZGVmaW5lIFdNODQwMF9MT05NVVRFX01BU0sgICAgICAgICAgICAgICAgICAgICAweDAwNDAgIC8qIExPTk1VVEUgKi8KKyNkZWZpbmUgV004NDAwX0xPTk1VVEVfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgNiAgLyogTE9OTVVURSAqLworI2RlZmluZSBXTTg0MDBfTE9OTVVURV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBMT05NVVRFICovCisjZGVmaW5lIFdNODQwMF9MT1BNVVRFICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMjAgIC8qIExPUE1VVEUgKi8KKyNkZWZpbmUgV004NDAwX0xPUE1VVEVfTUFTSyAgICAgICAgICAgICAgICAgICAgIDB4MDAyMCAgLyogTE9QTVVURSAqLworI2RlZmluZSBXTTg0MDBfTE9QTVVURV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICA1ICAvKiBMT1BNVVRFICovCisjZGVmaW5lIFdNODQwMF9MT1BNVVRFX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIExPUE1VVEUgKi8KKyNkZWZpbmUgV004NDAwX0xPQVRUTiAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAxMCAgLyogTE9BVFROICovCisjZGVmaW5lIFdNODQwMF9MT0FUVE5fTUFTSyAgICAgICAgICAgICAgICAgICAgICAweDAwMTAgIC8qIExPQVRUTiAqLworI2RlZmluZSBXTTg0MDBfTE9BVFROX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICA0ICAvKiBMT0FUVE4gKi8KKyNkZWZpbmUgV004NDAwX0xPQVRUTl9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogTE9BVFROICovCisjZGVmaW5lIFdNODQwMF9ST05NVVRFICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDQgIC8qIFJPTk1VVEUgKi8KKyNkZWZpbmUgV004NDAwX1JPTk1VVEVfTUFTSyAgICAgICAgICAgICAgICAgICAgIDB4MDAwNCAgLyogUk9OTVVURSAqLworI2RlZmluZSBXTTg0MDBfUk9OTVVURV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAyICAvKiBST05NVVRFICovCisjZGVmaW5lIFdNODQwMF9ST05NVVRFX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIFJPTk1VVEUgKi8KKyNkZWZpbmUgV004NDAwX1JPUE1VVEUgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMiAgLyogUk9QTVVURSAqLworI2RlZmluZSBXTTg0MDBfUk9QTVVURV9NQVNLICAgICAgICAgICAgICAgICAgICAgMHgwMDAyICAvKiBST1BNVVRFICovCisjZGVmaW5lIFdNODQwMF9ST1BNVVRFX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIFJPUE1VVEUgKi8KKyNkZWZpbmUgV004NDAwX1JPUE1VVEVfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogUk9QTVVURSAqLworI2RlZmluZSBXTTg0MDBfUk9BVFROICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBST0FUVE4gKi8KKyNkZWZpbmUgV004NDAwX1JPQVRUTl9NQVNLICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogUk9BVFROICovCisjZGVmaW5lIFdNODQwMF9ST0FUVE5fU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIFJPQVRUTiAqLworI2RlZmluZSBXTTg0MDBfUk9BVFROX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBST0FUVE4gKi8KKworLyoKKyAqIFIzMSAoMHgxRikgLSBPdXQzLzQgVm9sdW1lCisgKi8KKyNkZWZpbmUgV004NDAwX09VVDNNVVRFICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAyMCAgLyogT1VUM01VVEUgKi8KKyNkZWZpbmUgV004NDAwX09VVDNNVVRFX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDAyMCAgLyogT1VUM01VVEUgKi8KKyNkZWZpbmUgV004NDAwX09VVDNNVVRFX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgNSAgLyogT1VUM01VVEUgKi8KKyNkZWZpbmUgV004NDAwX09VVDNNVVRFX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogT1VUM01VVEUgKi8KKyNkZWZpbmUgV004NDAwX09VVDNBVFROICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAxMCAgLyogT1VUM0FUVE4gKi8KKyNkZWZpbmUgV004NDAwX09VVDNBVFROX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDAxMCAgLyogT1VUM0FUVE4gKi8KKyNkZWZpbmUgV004NDAwX09VVDNBVFROX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgNCAgLyogT1VUM0FUVE4gKi8KKyNkZWZpbmUgV004NDAwX09VVDNBVFROX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogT1VUM0FUVE4gKi8KKyNkZWZpbmUgV004NDAwX09VVDRNVVRFICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMiAgLyogT1VUNE1VVEUgKi8KKyNkZWZpbmUgV004NDAwX09VVDRNVVRFX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDAwMiAgLyogT1VUNE1VVEUgKi8KKyNkZWZpbmUgV004NDAwX09VVDRNVVRFX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogT1VUNE1VVEUgKi8KKyNkZWZpbmUgV004NDAwX09VVDRNVVRFX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogT1VUNE1VVEUgKi8KKyNkZWZpbmUgV004NDAwX09VVDRBVFROICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogT1VUNEFUVE4gKi8KKyNkZWZpbmUgV004NDAwX09VVDRBVFROX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogT1VUNEFUVE4gKi8KKyNkZWZpbmUgV004NDAwX09VVDRBVFROX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgMCAgLyogT1VUNEFUVE4gKi8KKyNkZWZpbmUgV004NDAwX09VVDRBVFROX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogT1VUNEFUVE4gKi8KKworLyoKKyAqIFIzMiAoMHgyMCkgLSBMZWZ0IE9QR0EgVm9sdW1lCisgKi8KKyNkZWZpbmUgV004NDAwX09QVlUgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogT1BWVSAqLworI2RlZmluZSBXTTg0MDBfT1BWVV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBPUFZVICovCisjZGVmaW5lIFdNODQwMF9PUFZVX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICAgIDggIC8qIE9QVlUgKi8KKyNkZWZpbmUgV004NDAwX09QVlVfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogT1BWVSAqLworI2RlZmluZSBXTTg0MDBfTE9QR0FaQyAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDgwICAvKiBMT1BHQVpDICovCisjZGVmaW5lIFdNODQwMF9MT1BHQVpDX01BU0sgICAgICAgICAgICAgICAgICAgICAweDAwODAgIC8qIExPUEdBWkMgKi8KKyNkZWZpbmUgV004NDAwX0xPUEdBWkNfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgNyAgLyogTE9QR0FaQyAqLworI2RlZmluZSBXTTg0MDBfTE9QR0FaQ19XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBMT1BHQVpDICovCisjZGVmaW5lIFdNODQwMF9MT1BHQVZPTF9NQVNLICAgICAgICAgICAgICAgICAgICAweDAwN0YgIC8qIExPUEdBVk9MIC0gWzY6MF0gKi8KKyNkZWZpbmUgV004NDAwX0xPUEdBVk9MX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgMCAgLyogTE9QR0FWT0wgLSBbNjowXSAqLworI2RlZmluZSBXTTg0MDBfTE9QR0FWT0xfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICA3ICAvKiBMT1BHQVZPTCAtIFs2OjBdICovCisKKy8qCisgKiBSMzMgKDB4MjEpIC0gUmlnaHQgT1BHQSBWb2x1bWUKKyAqLworI2RlZmluZSBXTTg0MDBfT1BWVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBPUFZVICovCisjZGVmaW5lIFdNODQwMF9PUFZVX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIE9QVlUgKi8KKyNkZWZpbmUgV004NDAwX09QVlVfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgOCAgLyogT1BWVSAqLworI2RlZmluZSBXTTg0MDBfT1BWVV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBPUFZVICovCisjZGVmaW5lIFdNODQwMF9ST1BHQVpDICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwODAgIC8qIFJPUEdBWkMgKi8KKyNkZWZpbmUgV004NDAwX1JPUEdBWkNfTUFTSyAgICAgICAgICAgICAgICAgICAgIDB4MDA4MCAgLyogUk9QR0FaQyAqLworI2RlZmluZSBXTTg0MDBfUk9QR0FaQ19TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICA3ICAvKiBST1BHQVpDICovCisjZGVmaW5lIFdNODQwMF9ST1BHQVpDX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIFJPUEdBWkMgKi8KKyNkZWZpbmUgV004NDAwX1JPUEdBVk9MX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDA3RiAgLyogUk9QR0FWT0wgLSBbNjowXSAqLworI2RlZmluZSBXTTg0MDBfUk9QR0FWT0xfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAwICAvKiBST1BHQVZPTCAtIFs2OjBdICovCisjZGVmaW5lIFdNODQwMF9ST1BHQVZPTF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDcgIC8qIFJPUEdBVk9MIC0gWzY6MF0gKi8KKworLyoKKyAqIFIzNCAoMHgyMikgLSBTcGVha2VyIFZvbHVtZQorICovCisjZGVmaW5lIFdNODQwMF9TUEtBVFROX01BU0sgICAgICAgICAgICAgICAgICAgICAweDAwMDMgIC8qIFNQS0FUVE4gLSBbMTowXSAqLworI2RlZmluZSBXTTg0MDBfU1BLQVRUTl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAwICAvKiBTUEtBVFROIC0gWzE6MF0gKi8KKyNkZWZpbmUgV004NDAwX1NQS0FUVE5fV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgMiAgLyogU1BLQVRUTiAtIFsxOjBdICovCisKKy8qCisgKiBSMzUgKDB4MjMpIC0gQ2xhc3NEMQorICovCisjZGVmaW5lIFdNODQwMF9DRE1PREUgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIENETU9ERSAqLworI2RlZmluZSBXTTg0MDBfQ0RNT0RFX01BU0sgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBDRE1PREUgKi8KKyNkZWZpbmUgV004NDAwX0NETU9ERV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgOCAgLyogQ0RNT0RFICovCisjZGVmaW5lIFdNODQwMF9DRE1PREVfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIENETU9ERSAqLworI2RlZmluZSBXTTg0MDBfQ0xBU1NEX0NMS19TRUwgICAgICAgICAgICAgICAgICAgMHgwMDgwICAvKiBDTEFTU0RfQ0xLX1NFTCAqLworI2RlZmluZSBXTTg0MDBfQ0xBU1NEX0NMS19TRUxfTUFTSyAgICAgICAgICAgICAgMHgwMDgwICAvKiBDTEFTU0RfQ0xLX1NFTCAqLworI2RlZmluZSBXTTg0MDBfQ0xBU1NEX0NMS19TRUxfU0hJRlQgICAgICAgICAgICAgICAgICA3ICAvKiBDTEFTU0RfQ0xLX1NFTCAqLworI2RlZmluZSBXTTg0MDBfQ0xBU1NEX0NMS19TRUxfV0lEVEggICAgICAgICAgICAgICAgICAxICAvKiBDTEFTU0RfQ0xLX1NFTCAqLworI2RlZmluZSBXTTg0MDBfQ0RfU1JDVFJMICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDQwICAvKiBDRF9TUkNUUkwgKi8KKyNkZWZpbmUgV004NDAwX0NEX1NSQ1RSTF9NQVNLICAgICAgICAgICAgICAgICAgIDB4MDA0MCAgLyogQ0RfU1JDVFJMICovCisjZGVmaW5lIFdNODQwMF9DRF9TUkNUUkxfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgIDYgIC8qIENEX1NSQ1RSTCAqLworI2RlZmluZSBXTTg0MDBfQ0RfU1JDVFJMX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBDRF9TUkNUUkwgKi8KKyNkZWZpbmUgV004NDAwX1NQS05PUE9QICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAyMCAgLyogU1BLTk9QT1AgKi8KKyNkZWZpbmUgV004NDAwX1NQS05PUE9QX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDAyMCAgLyogU1BLTk9QT1AgKi8KKyNkZWZpbmUgV004NDAwX1NQS05PUE9QX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgNSAgLyogU1BLTk9QT1AgKi8KKyNkZWZpbmUgV004NDAwX1NQS05PUE9QX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogU1BLTk9QT1AgKi8KKyNkZWZpbmUgV004NDAwX0RCTEVSQVRFICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAxMCAgLyogREJMRVJBVEUgKi8KKyNkZWZpbmUgV004NDAwX0RCTEVSQVRFX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDAxMCAgLyogREJMRVJBVEUgKi8KKyNkZWZpbmUgV004NDAwX0RCTEVSQVRFX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgNCAgLyogREJMRVJBVEUgKi8KKyNkZWZpbmUgV004NDAwX0RCTEVSQVRFX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogREJMRVJBVEUgKi8KKyNkZWZpbmUgV004NDAwX0xPT1BURVNUICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwOCAgLyogTE9PUFRFU1QgKi8KKyNkZWZpbmUgV004NDAwX0xPT1BURVNUX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDAwOCAgLyogTE9PUFRFU1QgKi8KKyNkZWZpbmUgV004NDAwX0xPT1BURVNUX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgMyAgLyogTE9PUFRFU1QgKi8KKyNkZWZpbmUgV004NDAwX0xPT1BURVNUX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogTE9PUFRFU1QgKi8KKyNkZWZpbmUgV004NDAwX0hBTEZBQkJJQVMgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNCAgLyogSEFMRkFCQklBUyAqLworI2RlZmluZSBXTTg0MDBfSEFMRkFCQklBU19NQVNLICAgICAgICAgICAgICAgICAgMHgwMDA0ICAvKiBIQUxGQUJCSUFTICovCisjZGVmaW5lIFdNODQwMF9IQUxGQUJCSUFTX1NISUZUICAgICAgICAgICAgICAgICAgICAgIDIgIC8qIEhBTEZBQkJJQVMgKi8KKyNkZWZpbmUgV004NDAwX0hBTEZBQkJJQVNfV0lEVEggICAgICAgICAgICAgICAgICAgICAgMSAgLyogSEFMRkFCQklBUyAqLworI2RlZmluZSBXTTg0MDBfVFJJREVMX01BU0sgICAgICAgICAgICAgICAgICAgICAgMHgwMDAzICAvKiBUUklERUwgLSBbMTowXSAqLworI2RlZmluZSBXTTg0MDBfVFJJREVMX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICAwICAvKiBUUklERUwgLSBbMTowXSAqLworI2RlZmluZSBXTTg0MDBfVFJJREVMX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAyICAvKiBUUklERUwgLSBbMTowXSAqLworCisvKgorICogUjM3ICgweDI1KSAtIENsYXNzRDMKKyAqLworI2RlZmluZSBXTTg0MDBfRENHQUlOX01BU0sgICAgICAgICAgICAgICAgICAgICAgMHgwMDM4ICAvKiBEQ0dBSU4gLSBbNTozXSAqLworI2RlZmluZSBXTTg0MDBfRENHQUlOX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICAzICAvKiBEQ0dBSU4gLSBbNTozXSAqLworI2RlZmluZSBXTTg0MDBfRENHQUlOX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAzICAvKiBEQ0dBSU4gLSBbNTozXSAqLworI2RlZmluZSBXTTg0MDBfQUNHQUlOX01BU0sgICAgICAgICAgICAgICAgICAgICAgMHgwMDA3ICAvKiBBQ0dBSU4gLSBbMjowXSAqLworI2RlZmluZSBXTTg0MDBfQUNHQUlOX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICAwICAvKiBBQ0dBSU4gLSBbMjowXSAqLworI2RlZmluZSBXTTg0MDBfQUNHQUlOX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAzICAvKiBBQ0dBSU4gLSBbMjowXSAqLworCisvKgorICogUjM5ICgweDI3KSAtIElucHV0IE1peGVyMQorICovCisjZGVmaW5lIFdNODQwMF9BSU5MTU9ERV9NQVNLICAgICAgICAgICAgICAgICAgICAweDAwMEMgIC8qIEFJTkxNT0RFIC0gWzM6Ml0gKi8KKyNkZWZpbmUgV004NDAwX0FJTkxNT0RFX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgMiAgLyogQUlOTE1PREUgLSBbMzoyXSAqLworI2RlZmluZSBXTTg0MDBfQUlOTE1PREVfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAyICAvKiBBSU5MTU9ERSAtIFszOjJdICovCisjZGVmaW5lIFdNODQwMF9BSU5STU9ERV9NQVNLICAgICAgICAgICAgICAgICAgICAweDAwMDMgIC8qIEFJTlJNT0RFIC0gWzE6MF0gKi8KKyNkZWZpbmUgV004NDAwX0FJTlJNT0RFX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgMCAgLyogQUlOUk1PREUgLSBbMTowXSAqLworI2RlZmluZSBXTTg0MDBfQUlOUk1PREVfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAyICAvKiBBSU5STU9ERSAtIFsxOjBdICovCisKKy8qCisgKiBSNDAgKDB4MjgpIC0gSW5wdXQgTWl4ZXIyCisgKi8KKyNkZWZpbmUgV004NDAwX0xNUDQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA4MCAgLyogTE1QNCAqLworI2RlZmluZSBXTTg0MDBfTE1QNF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDgwICAvKiBMTVA0ICovCisjZGVmaW5lIFdNODQwMF9MTVA0X1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcgIC8qIExNUDQgKi8KKyNkZWZpbmUgV004NDAwX0xNUDRfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogTE1QNCAqLworI2RlZmluZSBXTTg0MDBfTE1OMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDQwICAvKiBMTU4zICovCisjZGVmaW5lIFdNODQwMF9MTU4zX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAweDAwNDAgIC8qIExNTjMgKi8KKyNkZWZpbmUgV004NDAwX0xNTjNfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgNiAgLyogTE1OMyAqLworI2RlZmluZSBXTTg0MDBfTE1OM19XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBMTU4zICovCisjZGVmaW5lIFdNODQwMF9MTVAyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMjAgIC8qIExNUDIgKi8KKyNkZWZpbmUgV004NDAwX0xNUDJfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAyMCAgLyogTE1QMiAqLworI2RlZmluZSBXTTg0MDBfTE1QMl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgICA1ICAvKiBMTVAyICovCisjZGVmaW5lIFdNODQwMF9MTVAyX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIExNUDIgKi8KKyNkZWZpbmUgV004NDAwX0xNTjEgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAxMCAgLyogTE1OMSAqLworI2RlZmluZSBXTTg0MDBfTE1OMV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDEwICAvKiBMTU4xICovCisjZGVmaW5lIFdNODQwMF9MTU4xX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQgIC8qIExNTjEgKi8KKyNkZWZpbmUgV004NDAwX0xNTjFfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogTE1OMSAqLworI2RlZmluZSBXTTg0MDBfUk1QNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA4ICAvKiBSTVA0ICovCisjZGVmaW5lIFdNODQwMF9STVA0X01BU0sgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDggIC8qIFJNUDQgKi8KKyNkZWZpbmUgV004NDAwX1JNUDRfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgMyAgLyogUk1QNCAqLworI2RlZmluZSBXTTg0MDBfUk1QNF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBSTVA0ICovCisjZGVmaW5lIFdNODQwMF9STU4zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDQgIC8qIFJNTjMgKi8KKyNkZWZpbmUgV004NDAwX1JNTjNfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNCAgLyogUk1OMyAqLworI2RlZmluZSBXTTg0MDBfUk1OM19TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAyICAvKiBSTU4zICovCisjZGVmaW5lIFdNODQwMF9STU4zX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIFJNTjMgKi8KKyNkZWZpbmUgV004NDAwX1JNUDIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMiAgLyogUk1QMiAqLworI2RlZmluZSBXTTg0MDBfUk1QMl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAyICAvKiBSTVAyICovCisjZGVmaW5lIFdNODQwMF9STVAyX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIFJNUDIgKi8KKyNkZWZpbmUgV004NDAwX1JNUDJfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogUk1QMiAqLworI2RlZmluZSBXTTg0MDBfUk1OMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBSTU4xICovCisjZGVmaW5lIFdNODQwMF9STU4xX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIFJNTjEgKi8KKyNkZWZpbmUgV004NDAwX1JNTjFfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCAgLyogUk1OMSAqLworI2RlZmluZSBXTTg0MDBfUk1OMV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBSTU4xICovCisKKy8qCisgKiBSNDEgKDB4MjkpIC0gSW5wdXQgTWl4ZXIzCisgKi8KKyNkZWZpbmUgV004NDAwX0wzNE1OQiAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogTDM0TU5CICovCisjZGVmaW5lIFdNODQwMF9MMzRNTkJfTUFTSyAgICAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIEwzNE1OQiAqLworI2RlZmluZSBXTTg0MDBfTDM0TU5CX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICA4ICAvKiBMMzRNTkIgKi8KKyNkZWZpbmUgV004NDAwX0wzNE1OQl9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogTDM0TU5CICovCisjZGVmaW5lIFdNODQwMF9MMzRNTkJTVCAgICAgICAgICAgICAgICAgICAgICAgICAweDAwODAgIC8qIEwzNE1OQlNUICovCisjZGVmaW5lIFdNODQwMF9MMzRNTkJTVF9NQVNLICAgICAgICAgICAgICAgICAgICAweDAwODAgIC8qIEwzNE1OQlNUICovCisjZGVmaW5lIFdNODQwMF9MMzRNTkJTVF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDcgIC8qIEwzNE1OQlNUICovCisjZGVmaW5lIFdNODQwMF9MMzRNTkJTVF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEwzNE1OQlNUICovCisjZGVmaW5lIFdNODQwMF9MMTJNTkIgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMjAgIC8qIEwxMk1OQiAqLworI2RlZmluZSBXTTg0MDBfTDEyTU5CX01BU0sgICAgICAgICAgICAgICAgICAgICAgMHgwMDIwICAvKiBMMTJNTkIgKi8KKyNkZWZpbmUgV004NDAwX0wxMk1OQl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgNSAgLyogTDEyTU5CICovCisjZGVmaW5lIFdNODQwMF9MMTJNTkJfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEwxMk1OQiAqLworI2RlZmluZSBXTTg0MDBfTDEyTU5CU1QgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDEwICAvKiBMMTJNTkJTVCAqLworI2RlZmluZSBXTTg0MDBfTDEyTU5CU1RfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMDEwICAvKiBMMTJNTkJTVCAqLworI2RlZmluZSBXTTg0MDBfTDEyTU5CU1RfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICA0ICAvKiBMMTJNTkJTVCAqLworI2RlZmluZSBXTTg0MDBfTDEyTU5CU1RfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBMMTJNTkJTVCAqLworI2RlZmluZSBXTTg0MDBfTERCVk9MX01BU0sgICAgICAgICAgICAgICAgICAgICAgMHgwMDA3ICAvKiBMREJWT0wgLSBbMjowXSAqLworI2RlZmluZSBXTTg0MDBfTERCVk9MX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICAwICAvKiBMREJWT0wgLSBbMjowXSAqLworI2RlZmluZSBXTTg0MDBfTERCVk9MX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAzICAvKiBMREJWT0wgLSBbMjowXSAqLworCisvKgorICogUjQyICgweDJBKSAtIElucHV0IE1peGVyNAorICovCisjZGVmaW5lIFdNODQwMF9SMzRNTkIgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIFIzNE1OQiAqLworI2RlZmluZSBXTTg0MDBfUjM0TU5CX01BU0sgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBSMzRNTkIgKi8KKyNkZWZpbmUgV004NDAwX1IzNE1OQl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgOCAgLyogUjM0TU5CICovCisjZGVmaW5lIFdNODQwMF9SMzRNTkJfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIFIzNE1OQiAqLworI2RlZmluZSBXTTg0MDBfUjM0TU5CU1QgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDgwICAvKiBSMzRNTkJTVCAqLworI2RlZmluZSBXTTg0MDBfUjM0TU5CU1RfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMDgwICAvKiBSMzRNTkJTVCAqLworI2RlZmluZSBXTTg0MDBfUjM0TU5CU1RfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICA3ICAvKiBSMzRNTkJTVCAqLworI2RlZmluZSBXTTg0MDBfUjM0TU5CU1RfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBSMzRNTkJTVCAqLworI2RlZmluZSBXTTg0MDBfUjEyTU5CICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDIwICAvKiBSMTJNTkIgKi8KKyNkZWZpbmUgV004NDAwX1IxMk1OQl9NQVNLICAgICAgICAgICAgICAgICAgICAgIDB4MDAyMCAgLyogUjEyTU5CICovCisjZGVmaW5lIFdNODQwMF9SMTJNTkJfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgIDUgIC8qIFIxMk1OQiAqLworI2RlZmluZSBXTTg0MDBfUjEyTU5CX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBSMTJNTkIgKi8KKyNkZWZpbmUgV004NDAwX1IxMk1OQlNUICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAxMCAgLyogUjEyTU5CU1QgKi8KKyNkZWZpbmUgV004NDAwX1IxMk1OQlNUX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDAxMCAgLyogUjEyTU5CU1QgKi8KKyNkZWZpbmUgV004NDAwX1IxMk1OQlNUX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgNCAgLyogUjEyTU5CU1QgKi8KKyNkZWZpbmUgV004NDAwX1IxMk1OQlNUX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogUjEyTU5CU1QgKi8KKyNkZWZpbmUgV004NDAwX1JEQlZPTF9NQVNLICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNyAgLyogUkRCVk9MIC0gWzI6MF0gKi8KKyNkZWZpbmUgV004NDAwX1JEQlZPTF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgMCAgLyogUkRCVk9MIC0gWzI6MF0gKi8KKyNkZWZpbmUgV004NDAwX1JEQlZPTF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgMyAgLyogUkRCVk9MIC0gWzI6MF0gKi8KKworLyoKKyAqIFI0MyAoMHgyQikgLSBJbnB1dCBNaXhlcjUKKyAqLworI2RlZmluZSBXTTg0MDBfTEkyQlZPTF9NQVNLICAgICAgICAgICAgICAgICAgICAgMHgwMUMwICAvKiBMSTJCVk9MIC0gWzg6Nl0gKi8KKyNkZWZpbmUgV004NDAwX0xJMkJWT0xfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgNiAgLyogTEkyQlZPTCAtIFs4OjZdICovCisjZGVmaW5lIFdNODQwMF9MSTJCVk9MX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgIDMgIC8qIExJMkJWT0wgLSBbODo2XSAqLworI2RlZmluZSBXTTg0MDBfTFI0QlZPTF9NQVNLICAgICAgICAgICAgICAgICAgICAgMHgwMDM4ICAvKiBMUjRCVk9MIC0gWzU6M10gKi8KKyNkZWZpbmUgV004NDAwX0xSNEJWT0xfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgMyAgLyogTFI0QlZPTCAtIFs1OjNdICovCisjZGVmaW5lIFdNODQwMF9MUjRCVk9MX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgIDMgIC8qIExSNEJWT0wgLSBbNTozXSAqLworI2RlZmluZSBXTTg0MDBfTEw0QlZPTF9NQVNLICAgICAgICAgICAgICAgICAgICAgMHgwMDA3ICAvKiBMTDRCVk9MIC0gWzI6MF0gKi8KKyNkZWZpbmUgV004NDAwX0xMNEJWT0xfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgMCAgLyogTEw0QlZPTCAtIFsyOjBdICovCisjZGVmaW5lIFdNODQwMF9MTDRCVk9MX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgIDMgIC8qIExMNEJWT0wgLSBbMjowXSAqLworCisvKgorICogUjQ0ICgweDJDKSAtIElucHV0IE1peGVyNgorICovCisjZGVmaW5lIFdNODQwMF9SSTJCVk9MX01BU0sgICAgICAgICAgICAgICAgICAgICAweDAxQzAgIC8qIFJJMkJWT0wgLSBbODo2XSAqLworI2RlZmluZSBXTTg0MDBfUkkyQlZPTF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICA2ICAvKiBSSTJCVk9MIC0gWzg6Nl0gKi8KKyNkZWZpbmUgV004NDAwX1JJMkJWT0xfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgMyAgLyogUkkyQlZPTCAtIFs4OjZdICovCisjZGVmaW5lIFdNODQwMF9STDRCVk9MX01BU0sgICAgICAgICAgICAgICAgICAgICAweDAwMzggIC8qIFJMNEJWT0wgLSBbNTozXSAqLworI2RlZmluZSBXTTg0MDBfUkw0QlZPTF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAzICAvKiBSTDRCVk9MIC0gWzU6M10gKi8KKyNkZWZpbmUgV004NDAwX1JMNEJWT0xfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgMyAgLyogUkw0QlZPTCAtIFs1OjNdICovCisjZGVmaW5lIFdNODQwMF9SUjRCVk9MX01BU0sgICAgICAgICAgICAgICAgICAgICAweDAwMDcgIC8qIFJSNEJWT0wgLSBbMjowXSAqLworI2RlZmluZSBXTTg0MDBfUlI0QlZPTF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAwICAvKiBSUjRCVk9MIC0gWzI6MF0gKi8KKyNkZWZpbmUgV004NDAwX1JSNEJWT0xfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgMyAgLyogUlI0QlZPTCAtIFsyOjBdICovCisKKy8qCisgKiBSNDUgKDB4MkQpIC0gT3V0cHV0IE1peGVyMQorICovCisjZGVmaW5lIFdNODQwMF9MUkJMTyAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwODAgIC8qIExSQkxPICovCisjZGVmaW5lIFdNODQwMF9MUkJMT19NQVNLICAgICAgICAgICAgICAgICAgICAgICAweDAwODAgIC8qIExSQkxPICovCisjZGVmaW5lIFdNODQwMF9MUkJMT19TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgIDcgIC8qIExSQkxPICovCisjZGVmaW5lIFdNODQwMF9MUkJMT19XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIExSQkxPICovCisjZGVmaW5lIFdNODQwMF9MTEJMTyAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwNDAgIC8qIExMQkxPICovCisjZGVmaW5lIFdNODQwMF9MTEJMT19NQVNLICAgICAgICAgICAgICAgICAgICAgICAweDAwNDAgIC8qIExMQkxPICovCisjZGVmaW5lIFdNODQwMF9MTEJMT19TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgIDYgIC8qIExMQkxPICovCisjZGVmaW5lIFdNODQwMF9MTEJMT19XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIExMQkxPICovCisjZGVmaW5lIFdNODQwMF9MUkkzTE8gICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMjAgIC8qIExSSTNMTyAqLworI2RlZmluZSBXTTg0MDBfTFJJM0xPX01BU0sgICAgICAgICAgICAgICAgICAgICAgMHgwMDIwICAvKiBMUkkzTE8gKi8KKyNkZWZpbmUgV004NDAwX0xSSTNMT19TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgNSAgLyogTFJJM0xPICovCisjZGVmaW5lIFdNODQwMF9MUkkzTE9fV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIExSSTNMTyAqLworI2RlZmluZSBXTTg0MDBfTExJM0xPICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDEwICAvKiBMTEkzTE8gKi8KKyNkZWZpbmUgV004NDAwX0xMSTNMT19NQVNLICAgICAgICAgICAgICAgICAgICAgIDB4MDAxMCAgLyogTExJM0xPICovCisjZGVmaW5lIFdNODQwMF9MTEkzTE9fU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgIDQgIC8qIExMSTNMTyAqLworI2RlZmluZSBXTTg0MDBfTExJM0xPX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBMTEkzTE8gKi8KKyNkZWZpbmUgV004NDAwX0xSMTJMTyAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwOCAgLyogTFIxMkxPICovCisjZGVmaW5lIFdNODQwMF9MUjEyTE9fTUFTSyAgICAgICAgICAgICAgICAgICAgICAweDAwMDggIC8qIExSMTJMTyAqLworI2RlZmluZSBXTTg0MDBfTFIxMkxPX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICAzICAvKiBMUjEyTE8gKi8KKyNkZWZpbmUgV004NDAwX0xSMTJMT19XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogTFIxMkxPICovCisjZGVmaW5lIFdNODQwMF9MTDEyTE8gICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDQgIC8qIExMMTJMTyAqLworI2RlZmluZSBXTTg0MDBfTEwxMkxPX01BU0sgICAgICAgICAgICAgICAgICAgICAgMHgwMDA0ICAvKiBMTDEyTE8gKi8KKyNkZWZpbmUgV004NDAwX0xMMTJMT19TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgMiAgLyogTEwxMkxPICovCisjZGVmaW5lIFdNODQwMF9MTDEyTE9fV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIExMMTJMTyAqLworI2RlZmluZSBXTTg0MDBfTERMTyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBMRExPICovCisjZGVmaW5lIFdNODQwMF9MRExPX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIExETE8gKi8KKyNkZWZpbmUgV004NDAwX0xETE9fU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCAgLyogTERMTyAqLworI2RlZmluZSBXTTg0MDBfTERMT19XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBMRExPICovCisKKy8qCisgKiBSNDYgKDB4MkUpIC0gT3V0cHV0IE1peGVyMgorICovCisjZGVmaW5lIFdNODQwMF9STEJSTyAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwODAgIC8qIFJMQlJPICovCisjZGVmaW5lIFdNODQwMF9STEJST19NQVNLICAgICAgICAgICAgICAgICAgICAgICAweDAwODAgIC8qIFJMQlJPICovCisjZGVmaW5lIFdNODQwMF9STEJST19TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgIDcgIC8qIFJMQlJPICovCisjZGVmaW5lIFdNODQwMF9STEJST19XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIFJMQlJPICovCisjZGVmaW5lIFdNODQwMF9SUkJSTyAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwNDAgIC8qIFJSQlJPICovCisjZGVmaW5lIFdNODQwMF9SUkJST19NQVNLICAgICAgICAgICAgICAgICAgICAgICAweDAwNDAgIC8qIFJSQlJPICovCisjZGVmaW5lIFdNODQwMF9SUkJST19TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgIDYgIC8qIFJSQlJPICovCisjZGVmaW5lIFdNODQwMF9SUkJST19XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIFJSQlJPICovCisjZGVmaW5lIFdNODQwMF9STEkzUk8gICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMjAgIC8qIFJMSTNSTyAqLworI2RlZmluZSBXTTg0MDBfUkxJM1JPX01BU0sgICAgICAgICAgICAgICAgICAgICAgMHgwMDIwICAvKiBSTEkzUk8gKi8KKyNkZWZpbmUgV004NDAwX1JMSTNST19TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgNSAgLyogUkxJM1JPICovCisjZGVmaW5lIFdNODQwMF9STEkzUk9fV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIFJMSTNSTyAqLworI2RlZmluZSBXTTg0MDBfUlJJM1JPICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDEwICAvKiBSUkkzUk8gKi8KKyNkZWZpbmUgV004NDAwX1JSSTNST19NQVNLICAgICAgICAgICAgICAgICAgICAgIDB4MDAxMCAgLyogUlJJM1JPICovCisjZGVmaW5lIFdNODQwMF9SUkkzUk9fU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgIDQgIC8qIFJSSTNSTyAqLworI2RlZmluZSBXTTg0MDBfUlJJM1JPX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBSUkkzUk8gKi8KKyNkZWZpbmUgV004NDAwX1JMMTJSTyAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwOCAgLyogUkwxMlJPICovCisjZGVmaW5lIFdNODQwMF9STDEyUk9fTUFTSyAgICAgICAgICAgICAgICAgICAgICAweDAwMDggIC8qIFJMMTJSTyAqLworI2RlZmluZSBXTTg0MDBfUkwxMlJPX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICAzICAvKiBSTDEyUk8gKi8KKyNkZWZpbmUgV004NDAwX1JMMTJST19XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogUkwxMlJPICovCisjZGVmaW5lIFdNODQwMF9SUjEyUk8gICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDQgIC8qIFJSMTJSTyAqLworI2RlZmluZSBXTTg0MDBfUlIxMlJPX01BU0sgICAgICAgICAgICAgICAgICAgICAgMHgwMDA0ICAvKiBSUjEyUk8gKi8KKyNkZWZpbmUgV004NDAwX1JSMTJST19TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgMiAgLyogUlIxMlJPICovCisjZGVmaW5lIFdNODQwMF9SUjEyUk9fV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIFJSMTJSTyAqLworI2RlZmluZSBXTTg0MDBfUkRSTyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBSRFJPICovCisjZGVmaW5lIFdNODQwMF9SRFJPX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIFJEUk8gKi8KKyNkZWZpbmUgV004NDAwX1JEUk9fU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCAgLyogUkRSTyAqLworI2RlZmluZSBXTTg0MDBfUkRST19XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBSRFJPICovCisKKy8qCisgKiBSNDcgKDB4MkYpIC0gT3V0cHV0IE1peGVyMworICovCisjZGVmaW5lIFdNODQwMF9MTEkzTE9WT0xfTUFTSyAgICAgICAgICAgICAgICAgICAweDAxQzAgIC8qIExMSTNMT1ZPTCAtIFs4OjZdICovCisjZGVmaW5lIFdNODQwMF9MTEkzTE9WT0xfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgIDYgIC8qIExMSTNMT1ZPTCAtIFs4OjZdICovCisjZGVmaW5lIFdNODQwMF9MTEkzTE9WT0xfV0lEVEggICAgICAgICAgICAgICAgICAgICAgIDMgIC8qIExMSTNMT1ZPTCAtIFs4OjZdICovCisjZGVmaW5lIFdNODQwMF9MUjEyTE9WT0xfTUFTSyAgICAgICAgICAgICAgICAgICAweDAwMzggIC8qIExSMTJMT1ZPTCAtIFs1OjNdICovCisjZGVmaW5lIFdNODQwMF9MUjEyTE9WT0xfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgIDMgIC8qIExSMTJMT1ZPTCAtIFs1OjNdICovCisjZGVmaW5lIFdNODQwMF9MUjEyTE9WT0xfV0lEVEggICAgICAgICAgICAgICAgICAgICAgIDMgIC8qIExSMTJMT1ZPTCAtIFs1OjNdICovCisjZGVmaW5lIFdNODQwMF9MTDEyTE9WT0xfTUFTSyAgICAgICAgICAgICAgICAgICAweDAwMDcgIC8qIExMMTJMT1ZPTCAtIFsyOjBdICovCisjZGVmaW5lIFdNODQwMF9MTDEyTE9WT0xfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIExMMTJMT1ZPTCAtIFsyOjBdICovCisjZGVmaW5lIFdNODQwMF9MTDEyTE9WT0xfV0lEVEggICAgICAgICAgICAgICAgICAgICAgIDMgIC8qIExMMTJMT1ZPTCAtIFsyOjBdICovCisKKy8qCisgKiBSNDggKDB4MzApIC0gT3V0cHV0IE1peGVyNAorICovCisjZGVmaW5lIFdNODQwMF9SUkkzUk9WT0xfTUFTSyAgICAgICAgICAgICAgICAgICAweDAxQzAgIC8qIFJSSTNST1ZPTCAtIFs4OjZdICovCisjZGVmaW5lIFdNODQwMF9SUkkzUk9WT0xfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgIDYgIC8qIFJSSTNST1ZPTCAtIFs4OjZdICovCisjZGVmaW5lIFdNODQwMF9SUkkzUk9WT0xfV0lEVEggICAgICAgICAgICAgICAgICAgICAgIDMgIC8qIFJSSTNST1ZPTCAtIFs4OjZdICovCisjZGVmaW5lIFdNODQwMF9STDEyUk9WT0xfTUFTSyAgICAgICAgICAgICAgICAgICAweDAwMzggIC8qIFJMMTJST1ZPTCAtIFs1OjNdICovCisjZGVmaW5lIFdNODQwMF9STDEyUk9WT0xfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgIDMgIC8qIFJMMTJST1ZPTCAtIFs1OjNdICovCisjZGVmaW5lIFdNODQwMF9STDEyUk9WT0xfV0lEVEggICAgICAgICAgICAgICAgICAgICAgIDMgIC8qIFJMMTJST1ZPTCAtIFs1OjNdICovCisjZGVmaW5lIFdNODQwMF9SUjEyUk9WT0xfTUFTSyAgICAgICAgICAgICAgICAgICAweDAwMDcgIC8qIFJSMTJST1ZPTCAtIFsyOjBdICovCisjZGVmaW5lIFdNODQwMF9SUjEyUk9WT0xfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIFJSMTJST1ZPTCAtIFsyOjBdICovCisjZGVmaW5lIFdNODQwMF9SUjEyUk9WT0xfV0lEVEggICAgICAgICAgICAgICAgICAgICAgIDMgIC8qIFJSMTJST1ZPTCAtIFsyOjBdICovCisKKy8qCisgKiBSNDkgKDB4MzEpIC0gT3V0cHV0IE1peGVyNQorICovCisjZGVmaW5lIFdNODQwMF9MUkkzTE9WT0xfTUFTSyAgICAgICAgICAgICAgICAgICAweDAxQzAgIC8qIExSSTNMT1ZPTCAtIFs4OjZdICovCisjZGVmaW5lIFdNODQwMF9MUkkzTE9WT0xfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgIDYgIC8qIExSSTNMT1ZPTCAtIFs4OjZdICovCisjZGVmaW5lIFdNODQwMF9MUkkzTE9WT0xfV0lEVEggICAgICAgICAgICAgICAgICAgICAgIDMgIC8qIExSSTNMT1ZPTCAtIFs4OjZdICovCisjZGVmaW5lIFdNODQwMF9MUkJMT1ZPTF9NQVNLICAgICAgICAgICAgICAgICAgICAweDAwMzggIC8qIExSQkxPVk9MIC0gWzU6M10gKi8KKyNkZWZpbmUgV004NDAwX0xSQkxPVk9MX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgMyAgLyogTFJCTE9WT0wgLSBbNTozXSAqLworI2RlZmluZSBXTTg0MDBfTFJCTE9WT0xfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAzICAvKiBMUkJMT1ZPTCAtIFs1OjNdICovCisjZGVmaW5lIFdNODQwMF9MTEJMT1ZPTF9NQVNLICAgICAgICAgICAgICAgICAgICAweDAwMDcgIC8qIExMQkxPVk9MIC0gWzI6MF0gKi8KKyNkZWZpbmUgV004NDAwX0xMQkxPVk9MX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgMCAgLyogTExCTE9WT0wgLSBbMjowXSAqLworI2RlZmluZSBXTTg0MDBfTExCTE9WT0xfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAzICAvKiBMTEJMT1ZPTCAtIFsyOjBdICovCisKKy8qCisgKiBSNTAgKDB4MzIpIC0gT3V0cHV0IE1peGVyNgorICovCisjZGVmaW5lIFdNODQwMF9STEkzUk9WT0xfTUFTSyAgICAgICAgICAgICAgICAgICAweDAxQzAgIC8qIFJMSTNST1ZPTCAtIFs4OjZdICovCisjZGVmaW5lIFdNODQwMF9STEkzUk9WT0xfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgIDYgIC8qIFJMSTNST1ZPTCAtIFs4OjZdICovCisjZGVmaW5lIFdNODQwMF9STEkzUk9WT0xfV0lEVEggICAgICAgICAgICAgICAgICAgICAgIDMgIC8qIFJMSTNST1ZPTCAtIFs4OjZdICovCisjZGVmaW5lIFdNODQwMF9STEJST1ZPTF9NQVNLICAgICAgICAgICAgICAgICAgICAweDAwMzggIC8qIFJMQlJPVk9MIC0gWzU6M10gKi8KKyNkZWZpbmUgV004NDAwX1JMQlJPVk9MX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgMyAgLyogUkxCUk9WT0wgLSBbNTozXSAqLworI2RlZmluZSBXTTg0MDBfUkxCUk9WT0xfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAzICAvKiBSTEJST1ZPTCAtIFs1OjNdICovCisjZGVmaW5lIFdNODQwMF9SUkJST1ZPTF9NQVNLICAgICAgICAgICAgICAgICAgICAweDAwMDcgIC8qIFJSQlJPVk9MIC0gWzI6MF0gKi8KKyNkZWZpbmUgV004NDAwX1JSQlJPVk9MX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgMCAgLyogUlJCUk9WT0wgLSBbMjowXSAqLworI2RlZmluZSBXTTg0MDBfUlJCUk9WT0xfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAzICAvKiBSUkJST1ZPTCAtIFsyOjBdICovCisKKy8qCisgKiBSNTEgKDB4MzMpIC0gT3V0My80IE1peGVyCisgKi8KKyNkZWZpbmUgV004NDAwX1ZTRUxfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgIDB4MDE4MCAgLyogVlNFTCAtIFs4OjddICovCisjZGVmaW5lIFdNODQwMF9WU0VMX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcgIC8qIFZTRUwgLSBbODo3XSAqLworI2RlZmluZSBXTTg0MDBfVlNFTF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgICAyICAvKiBWU0VMIC0gWzg6N10gKi8KKyNkZWZpbmUgV004NDAwX0xJNE8zICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAyMCAgLyogTEk0TzMgKi8KKyNkZWZpbmUgV004NDAwX0xJNE8zX01BU0sgICAgICAgICAgICAgICAgICAgICAgIDB4MDAyMCAgLyogTEk0TzMgKi8KKyNkZWZpbmUgV004NDAwX0xJNE8zX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICAgNSAgLyogTEk0TzMgKi8KKyNkZWZpbmUgV004NDAwX0xJNE8zX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogTEk0TzMgKi8KKyNkZWZpbmUgV004NDAwX0xQR0FPMyAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAxMCAgLyogTFBHQU8zICovCisjZGVmaW5lIFdNODQwMF9MUEdBTzNfTUFTSyAgICAgICAgICAgICAgICAgICAgICAweDAwMTAgIC8qIExQR0FPMyAqLworI2RlZmluZSBXTTg0MDBfTFBHQU8zX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICA0ICAvKiBMUEdBTzMgKi8KKyNkZWZpbmUgV004NDAwX0xQR0FPM19XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogTFBHQU8zICovCisjZGVmaW5lIFdNODQwMF9SSTRPNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDIgIC8qIFJJNE80ICovCisjZGVmaW5lIFdNODQwMF9SSTRPNF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAweDAwMDIgIC8qIFJJNE80ICovCisjZGVmaW5lIFdNODQwMF9SSTRPNF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIFJJNE80ICovCisjZGVmaW5lIFdNODQwMF9SSTRPNF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIFJJNE80ICovCisjZGVmaW5lIFdNODQwMF9SUEdBTzQgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIFJQR0FPNCAqLworI2RlZmluZSBXTTg0MDBfUlBHQU80X01BU0sgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBSUEdBTzQgKi8KKyNkZWZpbmUgV004NDAwX1JQR0FPNF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgMCAgLyogUlBHQU80ICovCisjZGVmaW5lIFdNODQwMF9SUEdBTzRfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIFJQR0FPNCAqLworCisvKgorICogUjUyICgweDM0KSAtIExpbmUgTWl4ZXIxCisgKi8KKyNkZWZpbmUgV004NDAwX0xMT1BHQUxPTiAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA0MCAgLyogTExPUEdBTE9OICovCisjZGVmaW5lIFdNODQwMF9MTE9QR0FMT05fTUFTSyAgICAgICAgICAgICAgICAgICAweDAwNDAgIC8qIExMT1BHQUxPTiAqLworI2RlZmluZSBXTTg0MDBfTExPUEdBTE9OX1NISUZUICAgICAgICAgICAgICAgICAgICAgICA2ICAvKiBMTE9QR0FMT04gKi8KKyNkZWZpbmUgV004NDAwX0xMT1BHQUxPTl9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogTExPUEdBTE9OICovCisjZGVmaW5lIFdNODQwMF9MUk9QR0FMT04gICAgICAgICAgICAgICAgICAgICAgICAweDAwMjAgIC8qIExST1BHQUxPTiAqLworI2RlZmluZSBXTTg0MDBfTFJPUEdBTE9OX01BU0sgICAgICAgICAgICAgICAgICAgMHgwMDIwICAvKiBMUk9QR0FMT04gKi8KKyNkZWZpbmUgV004NDAwX0xST1BHQUxPTl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgNSAgLyogTFJPUEdBTE9OICovCisjZGVmaW5lIFdNODQwMF9MUk9QR0FMT05fV0lEVEggICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIExST1BHQUxPTiAqLworI2RlZmluZSBXTTg0MDBfTE9QTE9OICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDEwICAvKiBMT1BMT04gKi8KKyNkZWZpbmUgV004NDAwX0xPUExPTl9NQVNLICAgICAgICAgICAgICAgICAgICAgIDB4MDAxMCAgLyogTE9QTE9OICovCisjZGVmaW5lIFdNODQwMF9MT1BMT05fU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgIDQgIC8qIExPUExPTiAqLworI2RlZmluZSBXTTg0MDBfTE9QTE9OX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBMT1BMT04gKi8KKyNkZWZpbmUgV004NDAwX0xSMTJMT1AgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNCAgLyogTFIxMkxPUCAqLworI2RlZmluZSBXTTg0MDBfTFIxMkxPUF9NQVNLICAgICAgICAgICAgICAgICAgICAgMHgwMDA0ICAvKiBMUjEyTE9QICovCisjZGVmaW5lIFdNODQwMF9MUjEyTE9QX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgIDIgIC8qIExSMTJMT1AgKi8KKyNkZWZpbmUgV004NDAwX0xSMTJMT1BfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogTFIxMkxPUCAqLworI2RlZmluZSBXTTg0MDBfTEwxMkxPUCAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAyICAvKiBMTDEyTE9QICovCisjZGVmaW5lIFdNODQwMF9MTDEyTE9QX01BU0sgICAgICAgICAgICAgICAgICAgICAweDAwMDIgIC8qIExMMTJMT1AgKi8KKyNkZWZpbmUgV004NDAwX0xMMTJMT1BfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogTEwxMkxPUCAqLworI2RlZmluZSBXTTg0MDBfTEwxMkxPUF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBMTDEyTE9QICovCisjZGVmaW5lIFdNODQwMF9MTE9QR0FMT1AgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIExMT1BHQUxPUCAqLworI2RlZmluZSBXTTg0MDBfTExPUEdBTE9QX01BU0sgICAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBMTE9QR0FMT1AgKi8KKyNkZWZpbmUgV004NDAwX0xMT1BHQUxPUF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgMCAgLyogTExPUEdBTE9QICovCisjZGVmaW5lIFdNODQwMF9MTE9QR0FMT1BfV0lEVEggICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIExMT1BHQUxPUCAqLworCisvKgorICogUjUzICgweDM1KSAtIExpbmUgTWl4ZXIyCisgKi8KKyNkZWZpbmUgV004NDAwX1JST1BHQVJPTiAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA0MCAgLyogUlJPUEdBUk9OICovCisjZGVmaW5lIFdNODQwMF9SUk9QR0FST05fTUFTSyAgICAgICAgICAgICAgICAgICAweDAwNDAgIC8qIFJST1BHQVJPTiAqLworI2RlZmluZSBXTTg0MDBfUlJPUEdBUk9OX1NISUZUICAgICAgICAgICAgICAgICAgICAgICA2ICAvKiBSUk9QR0FST04gKi8KKyNkZWZpbmUgV004NDAwX1JST1BHQVJPTl9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogUlJPUEdBUk9OICovCisjZGVmaW5lIFdNODQwMF9STE9QR0FST04gICAgICAgICAgICAgICAgICAgICAgICAweDAwMjAgIC8qIFJMT1BHQVJPTiAqLworI2RlZmluZSBXTTg0MDBfUkxPUEdBUk9OX01BU0sgICAgICAgICAgICAgICAgICAgMHgwMDIwICAvKiBSTE9QR0FST04gKi8KKyNkZWZpbmUgV004NDAwX1JMT1BHQVJPTl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgNSAgLyogUkxPUEdBUk9OICovCisjZGVmaW5lIFdNODQwMF9STE9QR0FST05fV0lEVEggICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIFJMT1BHQVJPTiAqLworI2RlZmluZSBXTTg0MDBfUk9QUk9OICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDEwICAvKiBST1BST04gKi8KKyNkZWZpbmUgV004NDAwX1JPUFJPTl9NQVNLICAgICAgICAgICAgICAgICAgICAgIDB4MDAxMCAgLyogUk9QUk9OICovCisjZGVmaW5lIFdNODQwMF9ST1BST05fU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgIDQgIC8qIFJPUFJPTiAqLworI2RlZmluZSBXTTg0MDBfUk9QUk9OX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBST1BST04gKi8KKyNkZWZpbmUgV004NDAwX1JMMTJST1AgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNCAgLyogUkwxMlJPUCAqLworI2RlZmluZSBXTTg0MDBfUkwxMlJPUF9NQVNLICAgICAgICAgICAgICAgICAgICAgMHgwMDA0ICAvKiBSTDEyUk9QICovCisjZGVmaW5lIFdNODQwMF9STDEyUk9QX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgIDIgIC8qIFJMMTJST1AgKi8KKyNkZWZpbmUgV004NDAwX1JMMTJST1BfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogUkwxMlJPUCAqLworI2RlZmluZSBXTTg0MDBfUlIxMlJPUCAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAyICAvKiBSUjEyUk9QICovCisjZGVmaW5lIFdNODQwMF9SUjEyUk9QX01BU0sgICAgICAgICAgICAgICAgICAgICAweDAwMDIgIC8qIFJSMTJST1AgKi8KKyNkZWZpbmUgV004NDAwX1JSMTJST1BfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogUlIxMlJPUCAqLworI2RlZmluZSBXTTg0MDBfUlIxMlJPUF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBSUjEyUk9QICovCisjZGVmaW5lIFdNODQwMF9SUk9QR0FST1AgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIFJST1BHQVJPUCAqLworI2RlZmluZSBXTTg0MDBfUlJPUEdBUk9QX01BU0sgICAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBSUk9QR0FST1AgKi8KKyNkZWZpbmUgV004NDAwX1JST1BHQVJPUF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgMCAgLyogUlJPUEdBUk9QICovCisjZGVmaW5lIFdNODQwMF9SUk9QR0FST1BfV0lEVEggICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIFJST1BHQVJPUCAqLworCisvKgorICogUjU0ICgweDM2KSAtIFNwZWFrZXIgTWl4ZXIKKyAqLworI2RlZmluZSBXTTg0MDBfTEIyU1BLICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDgwICAvKiBMQjJTUEsgKi8KKyNkZWZpbmUgV004NDAwX0xCMlNQS19NQVNLICAgICAgICAgICAgICAgICAgICAgIDB4MDA4MCAgLyogTEIyU1BLICovCisjZGVmaW5lIFdNODQwMF9MQjJTUEtfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgIDcgIC8qIExCMlNQSyAqLworI2RlZmluZSBXTTg0MDBfTEIyU1BLX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBMQjJTUEsgKi8KKyNkZWZpbmUgV004NDAwX1JCMlNQSyAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA0MCAgLyogUkIyU1BLICovCisjZGVmaW5lIFdNODQwMF9SQjJTUEtfTUFTSyAgICAgICAgICAgICAgICAgICAgICAweDAwNDAgIC8qIFJCMlNQSyAqLworI2RlZmluZSBXTTg0MDBfUkIyU1BLX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICA2ICAvKiBSQjJTUEsgKi8KKyNkZWZpbmUgV004NDAwX1JCMlNQS19XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogUkIyU1BLICovCisjZGVmaW5lIFdNODQwMF9MSTJTUEsgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMjAgIC8qIExJMlNQSyAqLworI2RlZmluZSBXTTg0MDBfTEkyU1BLX01BU0sgICAgICAgICAgICAgICAgICAgICAgMHgwMDIwICAvKiBMSTJTUEsgKi8KKyNkZWZpbmUgV004NDAwX0xJMlNQS19TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgNSAgLyogTEkyU1BLICovCisjZGVmaW5lIFdNODQwMF9MSTJTUEtfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIExJMlNQSyAqLworI2RlZmluZSBXTTg0MDBfUkkyU1BLICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDEwICAvKiBSSTJTUEsgKi8KKyNkZWZpbmUgV004NDAwX1JJMlNQS19NQVNLICAgICAgICAgICAgICAgICAgICAgIDB4MDAxMCAgLyogUkkyU1BLICovCisjZGVmaW5lIFdNODQwMF9SSTJTUEtfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgIDQgIC8qIFJJMlNQSyAqLworI2RlZmluZSBXTTg0MDBfUkkyU1BLX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBSSTJTUEsgKi8KKyNkZWZpbmUgV004NDAwX0xPUEdBU1BLICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwOCAgLyogTE9QR0FTUEsgKi8KKyNkZWZpbmUgV004NDAwX0xPUEdBU1BLX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDAwOCAgLyogTE9QR0FTUEsgKi8KKyNkZWZpbmUgV004NDAwX0xPUEdBU1BLX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgMyAgLyogTE9QR0FTUEsgKi8KKyNkZWZpbmUgV004NDAwX0xPUEdBU1BLX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogTE9QR0FTUEsgKi8KKyNkZWZpbmUgV004NDAwX1JPUEdBU1BLICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNCAgLyogUk9QR0FTUEsgKi8KKyNkZWZpbmUgV004NDAwX1JPUEdBU1BLX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDAwNCAgLyogUk9QR0FTUEsgKi8KKyNkZWZpbmUgV004NDAwX1JPUEdBU1BLX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgMiAgLyogUk9QR0FTUEsgKi8KKyNkZWZpbmUgV004NDAwX1JPUEdBU1BLX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogUk9QR0FTUEsgKi8KKyNkZWZpbmUgV004NDAwX0xEU1BLICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMiAgLyogTERTUEsgKi8KKyNkZWZpbmUgV004NDAwX0xEU1BLX01BU0sgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMiAgLyogTERTUEsgKi8KKyNkZWZpbmUgV004NDAwX0xEU1BLX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogTERTUEsgKi8KKyNkZWZpbmUgV004NDAwX0xEU1BLX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogTERTUEsgKi8KKyNkZWZpbmUgV004NDAwX1JEU1BLICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogUkRTUEsgKi8KKyNkZWZpbmUgV004NDAwX1JEU1BLX01BU0sgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogUkRTUEsgKi8KKyNkZWZpbmUgV004NDAwX1JEU1BLX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICAgMCAgLyogUkRTUEsgKi8KKyNkZWZpbmUgV004NDAwX1JEU1BLX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogUkRTUEsgKi8KKworLyoKKyAqIFI1NSAoMHgzNykgLSBBZGRpdGlvbmFsIENvbnRyb2wKKyAqLworI2RlZmluZSBXTTg0MDBfVlJPSSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBWUk9JICovCisjZGVmaW5lIFdNODQwMF9WUk9JX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIFZST0kgKi8KKyNkZWZpbmUgV004NDAwX1ZST0lfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCAgLyogVlJPSSAqLworI2RlZmluZSBXTTg0MDBfVlJPSV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBWUk9JICovCisKKy8qCisgKiBSNTYgKDB4MzgpIC0gQW50aVBPUDEKKyAqLworI2RlZmluZSBXTTg0MDBfRElTX0xMSU5FICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDIwICAvKiBESVNfTExJTkUgKi8KKyNkZWZpbmUgV004NDAwX0RJU19MTElORV9NQVNLICAgICAgICAgICAgICAgICAgIDB4MDAyMCAgLyogRElTX0xMSU5FICovCisjZGVmaW5lIFdNODQwMF9ESVNfTExJTkVfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgIDUgIC8qIERJU19MTElORSAqLworI2RlZmluZSBXTTg0MDBfRElTX0xMSU5FX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBESVNfTExJTkUgKi8KKyNkZWZpbmUgV004NDAwX0RJU19STElORSAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAxMCAgLyogRElTX1JMSU5FICovCisjZGVmaW5lIFdNODQwMF9ESVNfUkxJTkVfTUFTSyAgICAgICAgICAgICAgICAgICAweDAwMTAgIC8qIERJU19STElORSAqLworI2RlZmluZSBXTTg0MDBfRElTX1JMSU5FX1NISUZUICAgICAgICAgICAgICAgICAgICAgICA0ICAvKiBESVNfUkxJTkUgKi8KKyNkZWZpbmUgV004NDAwX0RJU19STElORV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogRElTX1JMSU5FICovCisjZGVmaW5lIFdNODQwMF9ESVNfT1VUMyAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDggIC8qIERJU19PVVQzICovCisjZGVmaW5lIFdNODQwMF9ESVNfT1VUM19NQVNLICAgICAgICAgICAgICAgICAgICAweDAwMDggIC8qIERJU19PVVQzICovCisjZGVmaW5lIFdNODQwMF9ESVNfT1VUM19TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDMgIC8qIERJU19PVVQzICovCisjZGVmaW5lIFdNODQwMF9ESVNfT1VUM19XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIERJU19PVVQzICovCisjZGVmaW5lIFdNODQwMF9ESVNfT1VUNCAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDQgIC8qIERJU19PVVQ0ICovCisjZGVmaW5lIFdNODQwMF9ESVNfT1VUNF9NQVNLICAgICAgICAgICAgICAgICAgICAweDAwMDQgIC8qIERJU19PVVQ0ICovCisjZGVmaW5lIFdNODQwMF9ESVNfT1VUNF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDIgIC8qIERJU19PVVQ0ICovCisjZGVmaW5lIFdNODQwMF9ESVNfT1VUNF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIERJU19PVVQ0ICovCisjZGVmaW5lIFdNODQwMF9ESVNfTE9VVCAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDIgIC8qIERJU19MT1VUICovCisjZGVmaW5lIFdNODQwMF9ESVNfTE9VVF9NQVNLICAgICAgICAgICAgICAgICAgICAweDAwMDIgIC8qIERJU19MT1VUICovCisjZGVmaW5lIFdNODQwMF9ESVNfTE9VVF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIERJU19MT1VUICovCisjZGVmaW5lIFdNODQwMF9ESVNfTE9VVF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIERJU19MT1VUICovCisjZGVmaW5lIFdNODQwMF9ESVNfUk9VVCAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIERJU19ST1VUICovCisjZGVmaW5lIFdNODQwMF9ESVNfUk9VVF9NQVNLICAgICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIERJU19ST1VUICovCisjZGVmaW5lIFdNODQwMF9ESVNfUk9VVF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIERJU19ST1VUICovCisjZGVmaW5lIFdNODQwMF9ESVNfUk9VVF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIERJU19ST1VUICovCisKKy8qCisgKiBSNTcgKDB4MzkpIC0gQW50aVBPUDIKKyAqLworI2RlZmluZSBXTTg0MDBfU09GVFNUICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDQwICAvKiBTT0ZUU1QgKi8KKyNkZWZpbmUgV004NDAwX1NPRlRTVF9NQVNLICAgICAgICAgICAgICAgICAgICAgIDB4MDA0MCAgLyogU09GVFNUICovCisjZGVmaW5lIFdNODQwMF9TT0ZUU1RfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgIDYgIC8qIFNPRlRTVCAqLworI2RlZmluZSBXTTg0MDBfU09GVFNUX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBTT0ZUU1QgKi8KKyNkZWZpbmUgV004NDAwX0JVRklPRU4gICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwOCAgLyogQlVGSU9FTiAqLworI2RlZmluZSBXTTg0MDBfQlVGSU9FTl9NQVNLICAgICAgICAgICAgICAgICAgICAgMHgwMDA4ICAvKiBCVUZJT0VOICovCisjZGVmaW5lIFdNODQwMF9CVUZJT0VOX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgIDMgIC8qIEJVRklPRU4gKi8KKyNkZWZpbmUgV004NDAwX0JVRklPRU5fV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogQlVGSU9FTiAqLworI2RlZmluZSBXTTg0MDBfQlVGRENPUEVOICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA0ICAvKiBCVUZEQ09QRU4gKi8KKyNkZWZpbmUgV004NDAwX0JVRkRDT1BFTl9NQVNLICAgICAgICAgICAgICAgICAgIDB4MDAwNCAgLyogQlVGRENPUEVOICovCisjZGVmaW5lIFdNODQwMF9CVUZEQ09QRU5fU0hJRlQgICAgICAgICAgICAgICAgICAgICAgIDIgIC8qIEJVRkRDT1BFTiAqLworI2RlZmluZSBXTTg0MDBfQlVGRENPUEVOX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBCVUZEQ09QRU4gKi8KKyNkZWZpbmUgV004NDAwX1BPQkNUUkwgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMiAgLyogUE9CQ1RSTCAqLworI2RlZmluZSBXTTg0MDBfUE9CQ1RSTF9NQVNLICAgICAgICAgICAgICAgICAgICAgMHgwMDAyICAvKiBQT0JDVFJMICovCisjZGVmaW5lIFdNODQwMF9QT0JDVFJMX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIFBPQkNUUkwgKi8KKyNkZWZpbmUgV004NDAwX1BPQkNUUkxfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogUE9CQ1RSTCAqLworI2RlZmluZSBXTTg0MDBfVk1JRFRPRyAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBWTUlEVE9HICovCisjZGVmaW5lIFdNODQwMF9WTUlEVE9HX01BU0sgICAgICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIFZNSURUT0cgKi8KKyNkZWZpbmUgV004NDAwX1ZNSURUT0dfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgMCAgLyogVk1JRFRPRyAqLworI2RlZmluZSBXTTg0MDBfVk1JRFRPR19XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBWTUlEVE9HICovCisKKy8qCisgKiBSNTggKDB4M0EpIC0gTUlDQklBUworICovCisjZGVmaW5lIFdNODQwMF9NQ0RTQ1RIX01BU0sgICAgICAgICAgICAgICAgICAgICAweDAwQzAgIC8qIE1DRFNDVEggLSBbNzo2XSAqLworI2RlZmluZSBXTTg0MDBfTUNEU0NUSF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICA2ICAvKiBNQ0RTQ1RIIC0gWzc6Nl0gKi8KKyNkZWZpbmUgV004NDAwX01DRFNDVEhfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgMiAgLyogTUNEU0NUSCAtIFs3OjZdICovCisjZGVmaW5lIFdNODQwMF9NQ0RUSFJfTUFTSyAgICAgICAgICAgICAgICAgICAgICAweDAwMzggIC8qIE1DRFRIUiAtIFs1OjNdICovCisjZGVmaW5lIFdNODQwMF9NQ0RUSFJfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgIDMgIC8qIE1DRFRIUiAtIFs1OjNdICovCisjZGVmaW5lIFdNODQwMF9NQ0RUSFJfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgIDMgIC8qIE1DRFRIUiAtIFs1OjNdICovCisjZGVmaW5lIFdNODQwMF9NQ0QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDQgIC8qIE1DRCAqLworI2RlZmluZSBXTTg0MDBfTUNEX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA0ICAvKiBNQ0QgKi8KKyNkZWZpbmUgV004NDAwX01DRF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMiAgLyogTUNEICovCisjZGVmaW5lIFdNODQwMF9NQ0RfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIE1DRCAqLworI2RlZmluZSBXTTg0MDBfTUJTRUwgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBNQlNFTCAqLworI2RlZmluZSBXTTg0MDBfTUJTRUxfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBNQlNFTCAqLworI2RlZmluZSBXTTg0MDBfTUJTRUxfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgICAwICAvKiBNQlNFTCAqLworI2RlZmluZSBXTTg0MDBfTUJTRUxfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBNQlNFTCAqLworCisvKgorICogUjYwICgweDNDKSAtIEZMTCBDb250cm9sIDEKKyAqLworI2RlZmluZSBXTTg0MDBfRkxMX1JFRl9GUkVRICAgICAgICAgICAgICAgICAgICAgMHgxMDAwICAvKiBGTExfUkVGX0ZSRVEgKi8KKyNkZWZpbmUgV004NDAwX0ZMTF9SRUZfRlJFUV9NQVNLICAgICAgICAgICAgICAgIDB4MTAwMCAgLyogRkxMX1JFRl9GUkVRICovCisjZGVmaW5lIFdNODQwMF9GTExfUkVGX0ZSRVFfU0hJRlQgICAgICAgICAgICAgICAgICAgMTIgIC8qIEZMTF9SRUZfRlJFUSAqLworI2RlZmluZSBXTTg0MDBfRkxMX1JFRl9GUkVRX1dJRFRIICAgICAgICAgICAgICAgICAgICAxICAvKiBGTExfUkVGX0ZSRVEgKi8KKyNkZWZpbmUgV004NDAwX0ZMTF9DTEtfU1JDX01BU0sgICAgICAgICAgICAgICAgIDB4MEMwMCAgLyogRkxMX0NMS19TUkMgLSBbMTE6MTBdICovCisjZGVmaW5lIFdNODQwMF9GTExfQ0xLX1NSQ19TSElGVCAgICAgICAgICAgICAgICAgICAgMTAgIC8qIEZMTF9DTEtfU1JDIC0gWzExOjEwXSAqLworI2RlZmluZSBXTTg0MDBfRkxMX0NMS19TUkNfV0lEVEggICAgICAgICAgICAgICAgICAgICAyICAvKiBGTExfQ0xLX1NSQyAtIFsxMToxMF0gKi8KKyNkZWZpbmUgV004NDAwX0ZMTF9GUkFDICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDIwMCAgLyogRkxMX0ZSQUMgKi8KKyNkZWZpbmUgV004NDAwX0ZMTF9GUkFDX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDIwMCAgLyogRkxMX0ZSQUMgKi8KKyNkZWZpbmUgV004NDAwX0ZMTF9GUkFDX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgOSAgLyogRkxMX0ZSQUMgKi8KKyNkZWZpbmUgV004NDAwX0ZMTF9GUkFDX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogRkxMX0ZSQUMgKi8KKyNkZWZpbmUgV004NDAwX0ZMTF9PU0NfRU5BICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogRkxMX09TQ19FTkEgKi8KKyNkZWZpbmUgV004NDAwX0ZMTF9PU0NfRU5BX01BU0sgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogRkxMX09TQ19FTkEgKi8KKyNkZWZpbmUgV004NDAwX0ZMTF9PU0NfRU5BX1NISUZUICAgICAgICAgICAgICAgICAgICAgOCAgLyogRkxMX09TQ19FTkEgKi8KKyNkZWZpbmUgV004NDAwX0ZMTF9PU0NfRU5BX1dJRFRIICAgICAgICAgICAgICAgICAgICAgMSAgLyogRkxMX09TQ19FTkEgKi8KKyNkZWZpbmUgV004NDAwX0ZMTF9DVFJMX1JBVEVfTUFTSyAgICAgICAgICAgICAgIDB4MDBFMCAgLyogRkxMX0NUUkxfUkFURSAtIFs3OjVdICovCisjZGVmaW5lIFdNODQwMF9GTExfQ1RSTF9SQVRFX1NISUZUICAgICAgICAgICAgICAgICAgIDUgIC8qIEZMTF9DVFJMX1JBVEUgLSBbNzo1XSAqLworI2RlZmluZSBXTTg0MDBfRkxMX0NUUkxfUkFURV9XSURUSCAgICAgICAgICAgICAgICAgICAzICAvKiBGTExfQ1RSTF9SQVRFIC0gWzc6NV0gKi8KKyNkZWZpbmUgV004NDAwX0ZMTF9GUkFUSU9fTUFTSyAgICAgICAgICAgICAgICAgIDB4MDAxRiAgLyogRkxMX0ZSQVRJTyAtIFs0OjBdICovCisjZGVmaW5lIFdNODQwMF9GTExfRlJBVElPX1NISUZUICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIEZMTF9GUkFUSU8gLSBbNDowXSAqLworI2RlZmluZSBXTTg0MDBfRkxMX0ZSQVRJT19XSURUSCAgICAgICAgICAgICAgICAgICAgICA1ICAvKiBGTExfRlJBVElPIC0gWzQ6MF0gKi8KKworLyoKKyAqIFI2MSAoMHgzRCkgLSBGTEwgQ29udHJvbCAyCisgKi8KKyNkZWZpbmUgV004NDAwX0ZMTF9LX01BU0sgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRiAgLyogRkxMX0sgLSBbMTU6MF0gKi8KKyNkZWZpbmUgV004NDAwX0ZMTF9LX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICAgMCAgLyogRkxMX0sgLSBbMTU6MF0gKi8KKyNkZWZpbmUgV004NDAwX0ZMTF9LX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAxNiAgLyogRkxMX0sgLSBbMTU6MF0gKi8KKworLyoKKyAqIFI2MiAoMHgzRSkgLSBGTEwgQ29udHJvbCAzCisgKi8KKyNkZWZpbmUgV004NDAwX0ZMTF9OX01BU0sgICAgICAgICAgICAgICAgICAgICAgIDB4MDNGRiAgLyogRkxMX04gLSBbOTowXSAqLworI2RlZmluZSBXTTg0MDBfRkxMX05fU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgICAwICAvKiBGTExfTiAtIFs5OjBdICovCisjZGVmaW5lIFdNODQwMF9GTExfTl9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgMTAgIC8qIEZMTF9OIC0gWzk6MF0gKi8KKworLyoKKyAqIFI2MyAoMHgzRikgLSBGTEwgQ29udHJvbCA0CisgKi8KKyNkZWZpbmUgV004NDAwX0ZMTF9UUktfR0FJTl9NQVNLICAgICAgICAgICAgICAgIDB4MDA3OCAgLyogRkxMX1RSS19HQUlOIC0gWzY6M10gKi8KKyNkZWZpbmUgV004NDAwX0ZMTF9UUktfR0FJTl9TSElGVCAgICAgICAgICAgICAgICAgICAgMyAgLyogRkxMX1RSS19HQUlOIC0gWzY6M10gKi8KKyNkZWZpbmUgV004NDAwX0ZMTF9UUktfR0FJTl9XSURUSCAgICAgICAgICAgICAgICAgICAgNCAgLyogRkxMX1RSS19HQUlOIC0gWzY6M10gKi8KKyNkZWZpbmUgV004NDAwX0ZMTF9PVVRESVZfTUFTSyAgICAgICAgICAgICAgICAgIDB4MDAwNyAgLyogRkxMX09VVERJViAtIFsyOjBdICovCisjZGVmaW5lIFdNODQwMF9GTExfT1VURElWX1NISUZUICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIEZMTF9PVVRESVYgLSBbMjowXSAqLworI2RlZmluZSBXTTg0MDBfRkxMX09VVERJVl9XSURUSCAgICAgICAgICAgICAgICAgICAgICAzICAvKiBGTExfT1VURElWIC0gWzI6MF0gKi8KKwordm9pZCB3bTg0MDBfcmVzZXRfY29kZWNfcmVnX2NhY2hlKHN0cnVjdCB3bTg0MDAgKndtODQwMCk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tZmQvd204NDAwLXByaXZhdGUuaCBiL2luY2x1ZGUvbGludXgvbWZkL3dtODQwMC1wcml2YXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmFhYjRlOQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvbWZkL3dtODQwMC1wcml2YXRlLmgKQEAgLTAsMCArMSw5MzYgQEAKKy8qCisgKiB3bTg0MDAgcHJpdmF0ZSBkZWZpbml0aW9ucy4KKyAqCisgKiBDb3B5cmlnaHQgMjAwOCBXb2xmc29uIE1pY3JvZWxlY3Ryb25pY3MgcGxjCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworI2lmbmRlZiBfX0xJTlVYX01GRF9XTTg0MDBfUFJJVl9ICisjZGVmaW5lIF9fTElOVVhfTUZEX1dNODQwMF9QUklWX0gKKworI2luY2x1ZGUgPGxpbnV4L21mZC93bTg0MDAuaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorCisjZGVmaW5lIFdNODQwMF9SRUdJU1RFUl9DT1VOVCAweDU1CisKK3N0cnVjdCB3bTg0MDAgeworCXN0cnVjdCBkZXZpY2UgKmRldjsKKworCWludCAoKnJlYWRfZGV2KSh2b2lkICpkYXRhLCBjaGFyIHJlZywgaW50IGNvdW50LCB1MTYgKmRzdCk7CisJaW50ICgqd3JpdGVfZGV2KSh2b2lkICpkYXRhLCBjaGFyIHJlZywgaW50IGNvdW50LCBjb25zdCB1MTYgKnNyYyk7CisKKwlzdHJ1Y3QgbXV0ZXggaW9fbG9jazsKKwl2b2lkICppb19kYXRhOworCisJdTE2IHJlZ19jYWNoZVtXTTg0MDBfUkVHSVNURVJfQ09VTlRdOworCisJc3RydWN0IHBsYXRmb3JtX2RldmljZSByZWd1bGF0b3JzWzZdOworfTsKKworLyoKKyAqIFJlZ2lzdGVyIHZhbHVlcy4KKyAqLworI2RlZmluZSBXTTg0MDBfUkVTRVRfSUQgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMAorI2RlZmluZSBXTTg0MDBfSUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMQorI2RlZmluZSBXTTg0MDBfUE9XRVJfTUFOQUdFTUVOVF8xICAgICAgICAgICAgICAgMHgwMgorI2RlZmluZSBXTTg0MDBfUE9XRVJfTUFOQUdFTUVOVF8yICAgICAgICAgICAgICAgMHgwMworI2RlZmluZSBXTTg0MDBfUE9XRVJfTUFOQUdFTUVOVF8zICAgICAgICAgICAgICAgMHgwNAorI2RlZmluZSBXTTg0MDBfQVVESU9fSU5URVJGQUNFXzEgICAgICAgICAgICAgICAgMHgwNQorI2RlZmluZSBXTTg0MDBfQVVESU9fSU5URVJGQUNFXzIgICAgICAgICAgICAgICAgMHgwNgorI2RlZmluZSBXTTg0MDBfQ0xPQ0tJTkdfMSAgICAgICAgICAgICAgICAgICAgICAgMHgwNworI2RlZmluZSBXTTg0MDBfQ0xPQ0tJTkdfMiAgICAgICAgICAgICAgICAgICAgICAgMHgwOAorI2RlZmluZSBXTTg0MDBfQVVESU9fSU5URVJGQUNFXzMgICAgICAgICAgICAgICAgMHgwOQorI2RlZmluZSBXTTg0MDBfQVVESU9fSU5URVJGQUNFXzQgICAgICAgICAgICAgICAgMHgwQQorI2RlZmluZSBXTTg0MDBfREFDX0NUUkwgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQgorI2RlZmluZSBXTTg0MDBfTEVGVF9EQUNfRElHSVRBTF9WT0xVTUUgICAgICAgICAgMHgwQworI2RlZmluZSBXTTg0MDBfUklHSFRfREFDX0RJR0lUQUxfVk9MVU1FICAgICAgICAgMHgwRAorI2RlZmluZSBXTTg0MDBfRElHSVRBTF9TSURFX1RPTkUgICAgICAgICAgICAgICAgMHgwRQorI2RlZmluZSBXTTg0MDBfQURDX0NUUkwgICAgICAgICAgICAgICAgICAgICAgICAgMHgwRgorI2RlZmluZSBXTTg0MDBfTEVGVF9BRENfRElHSVRBTF9WT0xVTUUgICAgICAgICAgMHgxMAorI2RlZmluZSBXTTg0MDBfUklHSFRfQURDX0RJR0lUQUxfVk9MVU1FICAgICAgICAgMHgxMQorI2RlZmluZSBXTTg0MDBfR1BJT19DVFJMXzEgICAgICAgICAgICAgICAgICAgICAgMHgxMgorI2RlZmluZSBXTTg0MDBfR1BJTzFfR1BJTzIgICAgICAgICAgICAgICAgICAgICAgMHgxMworI2RlZmluZSBXTTg0MDBfR1BJTzNfR1BJTzQgICAgICAgICAgICAgICAgICAgICAgMHgxNAorI2RlZmluZSBXTTg0MDBfR1BJTzVfR1BJTzYgICAgICAgICAgICAgICAgICAgICAgMHgxNQorI2RlZmluZSBXTTg0MDBfR1BJT0NUUkxfMiAgICAgICAgICAgICAgICAgICAgICAgMHgxNgorI2RlZmluZSBXTTg0MDBfR1BJT19QT0wgICAgICAgICAgICAgICAgICAgICAgICAgMHgxNworI2RlZmluZSBXTTg0MDBfTEVGVF9MSU5FX0lOUFVUXzFfMl9WT0xVTUUgICAgICAgMHgxOAorI2RlZmluZSBXTTg0MDBfTEVGVF9MSU5FX0lOUFVUXzNfNF9WT0xVTUUgICAgICAgMHgxOQorI2RlZmluZSBXTTg0MDBfUklHSFRfTElORV9JTlBVVF8xXzJfVk9MVU1FICAgICAgMHgxQQorI2RlZmluZSBXTTg0MDBfUklHSFRfTElORV9JTlBVVF8zXzRfVk9MVU1FICAgICAgMHgxQgorI2RlZmluZSBXTTg0MDBfTEVGVF9PVVRQVVRfVk9MVU1FICAgICAgICAgICAgICAgMHgxQworI2RlZmluZSBXTTg0MDBfUklHSFRfT1VUUFVUX1ZPTFVNRSAgICAgICAgICAgICAgMHgxRAorI2RlZmluZSBXTTg0MDBfTElORV9PVVRQVVRTX1ZPTFVNRSAgICAgICAgICAgICAgMHgxRQorI2RlZmluZSBXTTg0MDBfT1VUM180X1ZPTFVNRSAgICAgICAgICAgICAgICAgICAgMHgxRgorI2RlZmluZSBXTTg0MDBfTEVGVF9PUEdBX1ZPTFVNRSAgICAgICAgICAgICAgICAgMHgyMAorI2RlZmluZSBXTTg0MDBfUklHSFRfT1BHQV9WT0xVTUUgICAgICAgICAgICAgICAgMHgyMQorI2RlZmluZSBXTTg0MDBfU1BFQUtFUl9WT0xVTUUgICAgICAgICAgICAgICAgICAgMHgyMgorI2RlZmluZSBXTTg0MDBfQ0xBU1NEMSAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyMworI2RlZmluZSBXTTg0MDBfQ0xBU1NEMyAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyNQorI2RlZmluZSBXTTg0MDBfSU5QVVRfTUlYRVIxICAgICAgICAgICAgICAgICAgICAgMHgyNworI2RlZmluZSBXTTg0MDBfSU5QVVRfTUlYRVIyICAgICAgICAgICAgICAgICAgICAgMHgyOAorI2RlZmluZSBXTTg0MDBfSU5QVVRfTUlYRVIzICAgICAgICAgICAgICAgICAgICAgMHgyOQorI2RlZmluZSBXTTg0MDBfSU5QVVRfTUlYRVI0ICAgICAgICAgICAgICAgICAgICAgMHgyQQorI2RlZmluZSBXTTg0MDBfSU5QVVRfTUlYRVI1ICAgICAgICAgICAgICAgICAgICAgMHgyQgorI2RlZmluZSBXTTg0MDBfSU5QVVRfTUlYRVI2ICAgICAgICAgICAgICAgICAgICAgMHgyQworI2RlZmluZSBXTTg0MDBfT1VUUFVUX01JWEVSMSAgICAgICAgICAgICAgICAgICAgMHgyRAorI2RlZmluZSBXTTg0MDBfT1VUUFVUX01JWEVSMiAgICAgICAgICAgICAgICAgICAgMHgyRQorI2RlZmluZSBXTTg0MDBfT1VUUFVUX01JWEVSMyAgICAgICAgICAgICAgICAgICAgMHgyRgorI2RlZmluZSBXTTg0MDBfT1VUUFVUX01JWEVSNCAgICAgICAgICAgICAgICAgICAgMHgzMAorI2RlZmluZSBXTTg0MDBfT1VUUFVUX01JWEVSNSAgICAgICAgICAgICAgICAgICAgMHgzMQorI2RlZmluZSBXTTg0MDBfT1VUUFVUX01JWEVSNiAgICAgICAgICAgICAgICAgICAgMHgzMgorI2RlZmluZSBXTTg0MDBfT1VUM180X01JWEVSICAgICAgICAgICAgICAgICAgICAgMHgzMworI2RlZmluZSBXTTg0MDBfTElORV9NSVhFUjEgICAgICAgICAgICAgICAgICAgICAgMHgzNAorI2RlZmluZSBXTTg0MDBfTElORV9NSVhFUjIgICAgICAgICAgICAgICAgICAgICAgMHgzNQorI2RlZmluZSBXTTg0MDBfU1BFQUtFUl9NSVhFUiAgICAgICAgICAgICAgICAgICAgMHgzNgorI2RlZmluZSBXTTg0MDBfQURESVRJT05BTF9DT05UUk9MICAgICAgICAgICAgICAgMHgzNworI2RlZmluZSBXTTg0MDBfQU5USVBPUDEgICAgICAgICAgICAgICAgICAgICAgICAgMHgzOAorI2RlZmluZSBXTTg0MDBfQU5USVBPUDIgICAgICAgICAgICAgICAgICAgICAgICAgMHgzOQorI2RlZmluZSBXTTg0MDBfTUlDQklBUyAgICAgICAgICAgICAgICAgICAgICAgICAgMHgzQQorI2RlZmluZSBXTTg0MDBfRkxMX0NPTlRST0xfMSAgICAgICAgICAgICAgICAgICAgMHgzQworI2RlZmluZSBXTTg0MDBfRkxMX0NPTlRST0xfMiAgICAgICAgICAgICAgICAgICAgMHgzRAorI2RlZmluZSBXTTg0MDBfRkxMX0NPTlRST0xfMyAgICAgICAgICAgICAgICAgICAgMHgzRQorI2RlZmluZSBXTTg0MDBfRkxMX0NPTlRST0xfNCAgICAgICAgICAgICAgICAgICAgMHgzRgorI2RlZmluZSBXTTg0MDBfTERPMV9DT05UUk9MICAgICAgICAgICAgICAgICAgICAgMHg0MQorI2RlZmluZSBXTTg0MDBfTERPMl9DT05UUk9MICAgICAgICAgICAgICAgICAgICAgMHg0MgorI2RlZmluZSBXTTg0MDBfTERPM19DT05UUk9MICAgICAgICAgICAgICAgICAgICAgMHg0MworI2RlZmluZSBXTTg0MDBfTERPNF9DT05UUk9MICAgICAgICAgICAgICAgICAgICAgMHg0NAorI2RlZmluZSBXTTg0MDBfRENEQzFfQ09OVFJPTF8xICAgICAgICAgICAgICAgICAgMHg0NgorI2RlZmluZSBXTTg0MDBfRENEQzFfQ09OVFJPTF8yICAgICAgICAgICAgICAgICAgMHg0NworI2RlZmluZSBXTTg0MDBfRENEQzJfQ09OVFJPTF8xICAgICAgICAgICAgICAgICAgMHg0OAorI2RlZmluZSBXTTg0MDBfRENEQzJfQ09OVFJPTF8yICAgICAgICAgICAgICAgICAgMHg0OQorI2RlZmluZSBXTTg0MDBfSU5URVJGQUNFICAgICAgICAgICAgICAgICAgICAgICAgMHg0QgorI2RlZmluZSBXTTg0MDBfUE1fR0VORVJBTCAgICAgICAgICAgICAgICAgICAgICAgMHg0QworI2RlZmluZSBXTTg0MDBfUE1fU0hVVERPV05fQ09OVFJPTCAgICAgICAgICAgICAgMHg0RQorI2RlZmluZSBXTTg0MDBfSU5URVJSVVBUX1NUQVRVU18xICAgICAgICAgICAgICAgMHg0RgorI2RlZmluZSBXTTg0MDBfSU5URVJSVVBUX1NUQVRVU18xX01BU0sgICAgICAgICAgMHg1MAorI2RlZmluZSBXTTg0MDBfSU5URVJSVVBUX0xFVkVMUyAgICAgICAgICAgICAgICAgMHg1MQorI2RlZmluZSBXTTg0MDBfU0hVVERPV05fUkVBU09OICAgICAgICAgICAgICAgICAgMHg1MgorI2RlZmluZSBXTTg0MDBfTElORV9DSVJDVUlUUyAgICAgICAgICAgICAgICAgICAgMHg1NAorCisvKgorICogRmllbGQgRGVmaW5pdGlvbnMuCisgKi8KKworLyoKKyAqIFIwICgweDAwKSAtIFJlc2V0L0lECisgKi8KKyNkZWZpbmUgV004NDAwX1NXX1JFU0VUX0NISVBfSURfTUFTSyAgICAgICAgICAgIDB4RkZGRiAgLyogU1dfUkVTRVQvQ0hJUF9JRCAtIFsxNTowXSAqLworI2RlZmluZSBXTTg0MDBfU1dfUkVTRVRfQ0hJUF9JRF9TSElGVCAgICAgICAgICAgICAgICAwICAvKiBTV19SRVNFVC9DSElQX0lEIC0gWzE1OjBdICovCisjZGVmaW5lIFdNODQwMF9TV19SRVNFVF9DSElQX0lEX1dJRFRIICAgICAgICAgICAgICAgMTYgIC8qIFNXX1JFU0VUL0NISVBfSUQgLSBbMTU6MF0gKi8KKworLyoKKyAqIFIxICgweDAxKSAtIElECisgKi8KKyNkZWZpbmUgV004NDAwX0NISVBfUkVWX01BU0sgICAgICAgICAgICAgICAgICAgIDB4NzAwMCAgLyogQ0hJUF9SRVYgLSBbMTQ6MTJdICovCisjZGVmaW5lIFdNODQwMF9DSElQX1JFVl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgMTIgIC8qIENISVBfUkVWIC0gWzE0OjEyXSAqLworI2RlZmluZSBXTTg0MDBfQ0hJUF9SRVZfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAzICAvKiBDSElQX1JFViAtIFsxNDoxMl0gKi8KKworLyoKKyAqIFIxOCAoMHgxMikgLSBHUElPIENUUkwgMQorICovCisjZGVmaW5lIFdNODQwMF9JUlEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDEwMDAgIC8qIElSUSAqLworI2RlZmluZSBXTTg0MDBfSVJRX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgMHgxMDAwICAvKiBJUlEgKi8KKyNkZWZpbmUgV004NDAwX0lSUV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMiAgLyogSVJRICovCisjZGVmaW5lIFdNODQwMF9JUlFfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIElSUSAqLworI2RlZmluZSBXTTg0MDBfVEVNUE9LICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwODAwICAvKiBURU1QT0sgKi8KKyNkZWZpbmUgV004NDAwX1RFTVBPS19NQVNLICAgICAgICAgICAgICAgICAgICAgIDB4MDgwMCAgLyogVEVNUE9LICovCisjZGVmaW5lIFdNODQwMF9URU1QT0tfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgMTEgIC8qIFRFTVBPSyAqLworI2RlZmluZSBXTTg0MDBfVEVNUE9LX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBURU1QT0sgKi8KKyNkZWZpbmUgV004NDAwX01JQzFTSFJUICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDQwMCAgLyogTUlDMVNIUlQgKi8KKyNkZWZpbmUgV004NDAwX01JQzFTSFJUX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDQwMCAgLyogTUlDMVNIUlQgKi8KKyNkZWZpbmUgV004NDAwX01JQzFTSFJUX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAxMCAgLyogTUlDMVNIUlQgKi8KKyNkZWZpbmUgV004NDAwX01JQzFTSFJUX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogTUlDMVNIUlQgKi8KKyNkZWZpbmUgV004NDAwX01JQzFERVQgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDIwMCAgLyogTUlDMURFVCAqLworI2RlZmluZSBXTTg0MDBfTUlDMURFVF9NQVNLICAgICAgICAgICAgICAgICAgICAgMHgwMjAwICAvKiBNSUMxREVUICovCisjZGVmaW5lIFdNODQwMF9NSUMxREVUX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgIDkgIC8qIE1JQzFERVQgKi8KKyNkZWZpbmUgV004NDAwX01JQzFERVRfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogTUlDMURFVCAqLworI2RlZmluZSBXTTg0MDBfRkxMX0xDSyAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBGTExfTENLICovCisjZGVmaW5lIFdNODQwMF9GTExfTENLX01BU0sgICAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIEZMTF9MQ0sgKi8KKyNkZWZpbmUgV004NDAwX0ZMTF9MQ0tfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgOCAgLyogRkxMX0xDSyAqLworI2RlZmluZSBXTTg0MDBfRkxMX0xDS19XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBGTExfTENLICovCisjZGVmaW5lIFdNODQwMF9HUElPX1NUQVRVU19NQVNLICAgICAgICAgICAgICAgICAweDAwRkYgIC8qIEdQSU9fU1RBVFVTIC0gWzc6MF0gKi8KKyNkZWZpbmUgV004NDAwX0dQSU9fU1RBVFVTX1NISUZUICAgICAgICAgICAgICAgICAgICAgMCAgLyogR1BJT19TVEFUVVMgLSBbNzowXSAqLworI2RlZmluZSBXTTg0MDBfR1BJT19TVEFUVVNfV0lEVEggICAgICAgICAgICAgICAgICAgICA4ICAvKiBHUElPX1NUQVRVUyAtIFs3OjBdICovCisKKy8qCisgKiBSMTkgKDB4MTMpIC0gR1BJTzEgJiBHUElPMgorICovCisjZGVmaW5lIFdNODQwMF9HUElPMl9ERUJfRU5BICAgICAgICAgICAgICAgICAgICAweDgwMDAgIC8qIEdQSU8yX0RFQl9FTkEgKi8KKyNkZWZpbmUgV004NDAwX0dQSU8yX0RFQl9FTkFfTUFTSyAgICAgICAgICAgICAgIDB4ODAwMCAgLyogR1BJTzJfREVCX0VOQSAqLworI2RlZmluZSBXTTg0MDBfR1BJTzJfREVCX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgIDE1ICAvKiBHUElPMl9ERUJfRU5BICovCisjZGVmaW5lIFdNODQwMF9HUElPMl9ERUJfRU5BX1dJRFRIICAgICAgICAgICAgICAgICAgIDEgIC8qIEdQSU8yX0RFQl9FTkEgKi8KKyNkZWZpbmUgV004NDAwX0dQSU8yX0lSUV9FTkEgICAgICAgICAgICAgICAgICAgIDB4NDAwMCAgLyogR1BJTzJfSVJRX0VOQSAqLworI2RlZmluZSBXTTg0MDBfR1BJTzJfSVJRX0VOQV9NQVNLICAgICAgICAgICAgICAgMHg0MDAwICAvKiBHUElPMl9JUlFfRU5BICovCisjZGVmaW5lIFdNODQwMF9HUElPMl9JUlFfRU5BX1NISUZUICAgICAgICAgICAgICAgICAgMTQgIC8qIEdQSU8yX0lSUV9FTkEgKi8KKyNkZWZpbmUgV004NDAwX0dQSU8yX0lSUV9FTkFfV0lEVEggICAgICAgICAgICAgICAgICAgMSAgLyogR1BJTzJfSVJRX0VOQSAqLworI2RlZmluZSBXTTg0MDBfR1BJTzJfUFUgICAgICAgICAgICAgICAgICAgICAgICAgMHgyMDAwICAvKiBHUElPMl9QVSAqLworI2RlZmluZSBXTTg0MDBfR1BJTzJfUFVfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgyMDAwICAvKiBHUElPMl9QVSAqLworI2RlZmluZSBXTTg0MDBfR1BJTzJfUFVfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgIDEzICAvKiBHUElPMl9QVSAqLworI2RlZmluZSBXTTg0MDBfR1BJTzJfUFVfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBHUElPMl9QVSAqLworI2RlZmluZSBXTTg0MDBfR1BJTzJfUEQgICAgICAgICAgICAgICAgICAgICAgICAgMHgxMDAwICAvKiBHUElPMl9QRCAqLworI2RlZmluZSBXTTg0MDBfR1BJTzJfUERfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgxMDAwICAvKiBHUElPMl9QRCAqLworI2RlZmluZSBXTTg0MDBfR1BJTzJfUERfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgIDEyICAvKiBHUElPMl9QRCAqLworI2RlZmluZSBXTTg0MDBfR1BJTzJfUERfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBHUElPMl9QRCAqLworI2RlZmluZSBXTTg0MDBfR1BJTzJfU0VMX01BU0sgICAgICAgICAgICAgICAgICAgMHgwRjAwICAvKiBHUElPMl9TRUwgLSBbMTE6OF0gKi8KKyNkZWZpbmUgV004NDAwX0dQSU8yX1NFTF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgOCAgLyogR1BJTzJfU0VMIC0gWzExOjhdICovCisjZGVmaW5lIFdNODQwMF9HUElPMl9TRUxfV0lEVEggICAgICAgICAgICAgICAgICAgICAgIDQgIC8qIEdQSU8yX1NFTCAtIFsxMTo4XSAqLworI2RlZmluZSBXTTg0MDBfR1BJTzFfREVCX0VOQSAgICAgICAgICAgICAgICAgICAgMHgwMDgwICAvKiBHUElPMV9ERUJfRU5BICovCisjZGVmaW5lIFdNODQwMF9HUElPMV9ERUJfRU5BX01BU0sgICAgICAgICAgICAgICAweDAwODAgIC8qIEdQSU8xX0RFQl9FTkEgKi8KKyNkZWZpbmUgV004NDAwX0dQSU8xX0RFQl9FTkFfU0hJRlQgICAgICAgICAgICAgICAgICAgNyAgLyogR1BJTzFfREVCX0VOQSAqLworI2RlZmluZSBXTTg0MDBfR1BJTzFfREVCX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgICAxICAvKiBHUElPMV9ERUJfRU5BICovCisjZGVmaW5lIFdNODQwMF9HUElPMV9JUlFfRU5BICAgICAgICAgICAgICAgICAgICAweDAwNDAgIC8qIEdQSU8xX0lSUV9FTkEgKi8KKyNkZWZpbmUgV004NDAwX0dQSU8xX0lSUV9FTkFfTUFTSyAgICAgICAgICAgICAgIDB4MDA0MCAgLyogR1BJTzFfSVJRX0VOQSAqLworI2RlZmluZSBXTTg0MDBfR1BJTzFfSVJRX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgICA2ICAvKiBHUElPMV9JUlFfRU5BICovCisjZGVmaW5lIFdNODQwMF9HUElPMV9JUlFfRU5BX1dJRFRIICAgICAgICAgICAgICAgICAgIDEgIC8qIEdQSU8xX0lSUV9FTkEgKi8KKyNkZWZpbmUgV004NDAwX0dQSU8xX1BVICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAyMCAgLyogR1BJTzFfUFUgKi8KKyNkZWZpbmUgV004NDAwX0dQSU8xX1BVX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDAyMCAgLyogR1BJTzFfUFUgKi8KKyNkZWZpbmUgV004NDAwX0dQSU8xX1BVX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgNSAgLyogR1BJTzFfUFUgKi8KKyNkZWZpbmUgV004NDAwX0dQSU8xX1BVX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogR1BJTzFfUFUgKi8KKyNkZWZpbmUgV004NDAwX0dQSU8xX1BEICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAxMCAgLyogR1BJTzFfUEQgKi8KKyNkZWZpbmUgV004NDAwX0dQSU8xX1BEX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDAxMCAgLyogR1BJTzFfUEQgKi8KKyNkZWZpbmUgV004NDAwX0dQSU8xX1BEX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgNCAgLyogR1BJTzFfUEQgKi8KKyNkZWZpbmUgV004NDAwX0dQSU8xX1BEX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogR1BJTzFfUEQgKi8KKyNkZWZpbmUgV004NDAwX0dQSU8xX1NFTF9NQVNLICAgICAgICAgICAgICAgICAgIDB4MDAwRiAgLyogR1BJTzFfU0VMIC0gWzM6MF0gKi8KKyNkZWZpbmUgV004NDAwX0dQSU8xX1NFTF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgMCAgLyogR1BJTzFfU0VMIC0gWzM6MF0gKi8KKyNkZWZpbmUgV004NDAwX0dQSU8xX1NFTF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgNCAgLyogR1BJTzFfU0VMIC0gWzM6MF0gKi8KKworLyoKKyAqIFIyMCAoMHgxNCkgLSBHUElPMyAmIEdQSU80CisgKi8KKyNkZWZpbmUgV004NDAwX0dQSU80X0RFQl9FTkEgICAgICAgICAgICAgICAgICAgIDB4ODAwMCAgLyogR1BJTzRfREVCX0VOQSAqLworI2RlZmluZSBXTTg0MDBfR1BJTzRfREVCX0VOQV9NQVNLICAgICAgICAgICAgICAgMHg4MDAwICAvKiBHUElPNF9ERUJfRU5BICovCisjZGVmaW5lIFdNODQwMF9HUElPNF9ERUJfRU5BX1NISUZUICAgICAgICAgICAgICAgICAgMTUgIC8qIEdQSU80X0RFQl9FTkEgKi8KKyNkZWZpbmUgV004NDAwX0dQSU80X0RFQl9FTkFfV0lEVEggICAgICAgICAgICAgICAgICAgMSAgLyogR1BJTzRfREVCX0VOQSAqLworI2RlZmluZSBXTTg0MDBfR1BJTzRfSVJRX0VOQSAgICAgICAgICAgICAgICAgICAgMHg0MDAwICAvKiBHUElPNF9JUlFfRU5BICovCisjZGVmaW5lIFdNODQwMF9HUElPNF9JUlFfRU5BX01BU0sgICAgICAgICAgICAgICAweDQwMDAgIC8qIEdQSU80X0lSUV9FTkEgKi8KKyNkZWZpbmUgV004NDAwX0dQSU80X0lSUV9FTkFfU0hJRlQgICAgICAgICAgICAgICAgICAxNCAgLyogR1BJTzRfSVJRX0VOQSAqLworI2RlZmluZSBXTTg0MDBfR1BJTzRfSVJRX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgICAxICAvKiBHUElPNF9JUlFfRU5BICovCisjZGVmaW5lIFdNODQwMF9HUElPNF9QVSAgICAgICAgICAgICAgICAgICAgICAgICAweDIwMDAgIC8qIEdQSU80X1BVICovCisjZGVmaW5lIFdNODQwMF9HUElPNF9QVV9NQVNLICAgICAgICAgICAgICAgICAgICAweDIwMDAgIC8qIEdQSU80X1BVICovCisjZGVmaW5lIFdNODQwMF9HUElPNF9QVV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgMTMgIC8qIEdQSU80X1BVICovCisjZGVmaW5lIFdNODQwMF9HUElPNF9QVV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEdQSU80X1BVICovCisjZGVmaW5lIFdNODQwMF9HUElPNF9QRCAgICAgICAgICAgICAgICAgICAgICAgICAweDEwMDAgIC8qIEdQSU80X1BEICovCisjZGVmaW5lIFdNODQwMF9HUElPNF9QRF9NQVNLICAgICAgICAgICAgICAgICAgICAweDEwMDAgIC8qIEdQSU80X1BEICovCisjZGVmaW5lIFdNODQwMF9HUElPNF9QRF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgMTIgIC8qIEdQSU80X1BEICovCisjZGVmaW5lIFdNODQwMF9HUElPNF9QRF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEdQSU80X1BEICovCisjZGVmaW5lIFdNODQwMF9HUElPNF9TRUxfTUFTSyAgICAgICAgICAgICAgICAgICAweDBGMDAgIC8qIEdQSU80X1NFTCAtIFsxMTo4XSAqLworI2RlZmluZSBXTTg0MDBfR1BJTzRfU0VMX1NISUZUICAgICAgICAgICAgICAgICAgICAgICA4ICAvKiBHUElPNF9TRUwgLSBbMTE6OF0gKi8KKyNkZWZpbmUgV004NDAwX0dQSU80X1NFTF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgNCAgLyogR1BJTzRfU0VMIC0gWzExOjhdICovCisjZGVmaW5lIFdNODQwMF9HUElPM19ERUJfRU5BICAgICAgICAgICAgICAgICAgICAweDAwODAgIC8qIEdQSU8zX0RFQl9FTkEgKi8KKyNkZWZpbmUgV004NDAwX0dQSU8zX0RFQl9FTkFfTUFTSyAgICAgICAgICAgICAgIDB4MDA4MCAgLyogR1BJTzNfREVCX0VOQSAqLworI2RlZmluZSBXTTg0MDBfR1BJTzNfREVCX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgICA3ICAvKiBHUElPM19ERUJfRU5BICovCisjZGVmaW5lIFdNODQwMF9HUElPM19ERUJfRU5BX1dJRFRIICAgICAgICAgICAgICAgICAgIDEgIC8qIEdQSU8zX0RFQl9FTkEgKi8KKyNkZWZpbmUgV004NDAwX0dQSU8zX0lSUV9FTkEgICAgICAgICAgICAgICAgICAgIDB4MDA0MCAgLyogR1BJTzNfSVJRX0VOQSAqLworI2RlZmluZSBXTTg0MDBfR1BJTzNfSVJRX0VOQV9NQVNLICAgICAgICAgICAgICAgMHgwMDQwICAvKiBHUElPM19JUlFfRU5BICovCisjZGVmaW5lIFdNODQwMF9HUElPM19JUlFfRU5BX1NISUZUICAgICAgICAgICAgICAgICAgIDYgIC8qIEdQSU8zX0lSUV9FTkEgKi8KKyNkZWZpbmUgV004NDAwX0dQSU8zX0lSUV9FTkFfV0lEVEggICAgICAgICAgICAgICAgICAgMSAgLyogR1BJTzNfSVJRX0VOQSAqLworI2RlZmluZSBXTTg0MDBfR1BJTzNfUFUgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDIwICAvKiBHUElPM19QVSAqLworI2RlZmluZSBXTTg0MDBfR1BJTzNfUFVfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMDIwICAvKiBHUElPM19QVSAqLworI2RlZmluZSBXTTg0MDBfR1BJTzNfUFVfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICA1ICAvKiBHUElPM19QVSAqLworI2RlZmluZSBXTTg0MDBfR1BJTzNfUFVfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBHUElPM19QVSAqLworI2RlZmluZSBXTTg0MDBfR1BJTzNfUEQgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDEwICAvKiBHUElPM19QRCAqLworI2RlZmluZSBXTTg0MDBfR1BJTzNfUERfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMDEwICAvKiBHUElPM19QRCAqLworI2RlZmluZSBXTTg0MDBfR1BJTzNfUERfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICA0ICAvKiBHUElPM19QRCAqLworI2RlZmluZSBXTTg0MDBfR1BJTzNfUERfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBHUElPM19QRCAqLworI2RlZmluZSBXTTg0MDBfR1BJTzNfU0VMX01BU0sgICAgICAgICAgICAgICAgICAgMHgwMDBGICAvKiBHUElPM19TRUwgLSBbMzowXSAqLworI2RlZmluZSBXTTg0MDBfR1BJTzNfU0VMX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAwICAvKiBHUElPM19TRUwgLSBbMzowXSAqLworI2RlZmluZSBXTTg0MDBfR1BJTzNfU0VMX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICA0ICAvKiBHUElPM19TRUwgLSBbMzowXSAqLworCisvKgorICogUjIxICgweDE1KSAtIEdQSU81ICYgR1BJTzYKKyAqLworI2RlZmluZSBXTTg0MDBfR1BJTzZfREVCX0VOQSAgICAgICAgICAgICAgICAgICAgMHg4MDAwICAvKiBHUElPNl9ERUJfRU5BICovCisjZGVmaW5lIFdNODQwMF9HUElPNl9ERUJfRU5BX01BU0sgICAgICAgICAgICAgICAweDgwMDAgIC8qIEdQSU82X0RFQl9FTkEgKi8KKyNkZWZpbmUgV004NDAwX0dQSU82X0RFQl9FTkFfU0hJRlQgICAgICAgICAgICAgICAgICAxNSAgLyogR1BJTzZfREVCX0VOQSAqLworI2RlZmluZSBXTTg0MDBfR1BJTzZfREVCX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgICAxICAvKiBHUElPNl9ERUJfRU5BICovCisjZGVmaW5lIFdNODQwMF9HUElPNl9JUlFfRU5BICAgICAgICAgICAgICAgICAgICAweDQwMDAgIC8qIEdQSU82X0lSUV9FTkEgKi8KKyNkZWZpbmUgV004NDAwX0dQSU82X0lSUV9FTkFfTUFTSyAgICAgICAgICAgICAgIDB4NDAwMCAgLyogR1BJTzZfSVJRX0VOQSAqLworI2RlZmluZSBXTTg0MDBfR1BJTzZfSVJRX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgIDE0ICAvKiBHUElPNl9JUlFfRU5BICovCisjZGVmaW5lIFdNODQwMF9HUElPNl9JUlFfRU5BX1dJRFRIICAgICAgICAgICAgICAgICAgIDEgIC8qIEdQSU82X0lSUV9FTkEgKi8KKyNkZWZpbmUgV004NDAwX0dQSU82X1BVICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjAwMCAgLyogR1BJTzZfUFUgKi8KKyNkZWZpbmUgV004NDAwX0dQSU82X1BVX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MjAwMCAgLyogR1BJTzZfUFUgKi8KKyNkZWZpbmUgV004NDAwX0dQSU82X1BVX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAxMyAgLyogR1BJTzZfUFUgKi8KKyNkZWZpbmUgV004NDAwX0dQSU82X1BVX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogR1BJTzZfUFUgKi8KKyNkZWZpbmUgV004NDAwX0dQSU82X1BEICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTAwMCAgLyogR1BJTzZfUEQgKi8KKyNkZWZpbmUgV004NDAwX0dQSU82X1BEX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MTAwMCAgLyogR1BJTzZfUEQgKi8KKyNkZWZpbmUgV004NDAwX0dQSU82X1BEX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAxMiAgLyogR1BJTzZfUEQgKi8KKyNkZWZpbmUgV004NDAwX0dQSU82X1BEX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogR1BJTzZfUEQgKi8KKyNkZWZpbmUgV004NDAwX0dQSU82X1NFTF9NQVNLICAgICAgICAgICAgICAgICAgIDB4MEYwMCAgLyogR1BJTzZfU0VMIC0gWzExOjhdICovCisjZGVmaW5lIFdNODQwMF9HUElPNl9TRUxfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgIDggIC8qIEdQSU82X1NFTCAtIFsxMTo4XSAqLworI2RlZmluZSBXTTg0MDBfR1BJTzZfU0VMX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICA0ICAvKiBHUElPNl9TRUwgLSBbMTE6OF0gKi8KKyNkZWZpbmUgV004NDAwX0dQSU81X0RFQl9FTkEgICAgICAgICAgICAgICAgICAgIDB4MDA4MCAgLyogR1BJTzVfREVCX0VOQSAqLworI2RlZmluZSBXTTg0MDBfR1BJTzVfREVCX0VOQV9NQVNLICAgICAgICAgICAgICAgMHgwMDgwICAvKiBHUElPNV9ERUJfRU5BICovCisjZGVmaW5lIFdNODQwMF9HUElPNV9ERUJfRU5BX1NISUZUICAgICAgICAgICAgICAgICAgIDcgIC8qIEdQSU81X0RFQl9FTkEgKi8KKyNkZWZpbmUgV004NDAwX0dQSU81X0RFQl9FTkFfV0lEVEggICAgICAgICAgICAgICAgICAgMSAgLyogR1BJTzVfREVCX0VOQSAqLworI2RlZmluZSBXTTg0MDBfR1BJTzVfSVJRX0VOQSAgICAgICAgICAgICAgICAgICAgMHgwMDQwICAvKiBHUElPNV9JUlFfRU5BICovCisjZGVmaW5lIFdNODQwMF9HUElPNV9JUlFfRU5BX01BU0sgICAgICAgICAgICAgICAweDAwNDAgIC8qIEdQSU81X0lSUV9FTkEgKi8KKyNkZWZpbmUgV004NDAwX0dQSU81X0lSUV9FTkFfU0hJRlQgICAgICAgICAgICAgICAgICAgNiAgLyogR1BJTzVfSVJRX0VOQSAqLworI2RlZmluZSBXTTg0MDBfR1BJTzVfSVJRX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgICAxICAvKiBHUElPNV9JUlFfRU5BICovCisjZGVmaW5lIFdNODQwMF9HUElPNV9QVSAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMjAgIC8qIEdQSU81X1BVICovCisjZGVmaW5lIFdNODQwMF9HUElPNV9QVV9NQVNLICAgICAgICAgICAgICAgICAgICAweDAwMjAgIC8qIEdQSU81X1BVICovCisjZGVmaW5lIFdNODQwMF9HUElPNV9QVV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDUgIC8qIEdQSU81X1BVICovCisjZGVmaW5lIFdNODQwMF9HUElPNV9QVV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEdQSU81X1BVICovCisjZGVmaW5lIFdNODQwMF9HUElPNV9QRCAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMTAgIC8qIEdQSU81X1BEICovCisjZGVmaW5lIFdNODQwMF9HUElPNV9QRF9NQVNLICAgICAgICAgICAgICAgICAgICAweDAwMTAgIC8qIEdQSU81X1BEICovCisjZGVmaW5lIFdNODQwMF9HUElPNV9QRF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDQgIC8qIEdQSU81X1BEICovCisjZGVmaW5lIFdNODQwMF9HUElPNV9QRF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEdQSU81X1BEICovCisjZGVmaW5lIFdNODQwMF9HUElPNV9TRUxfTUFTSyAgICAgICAgICAgICAgICAgICAweDAwMEYgIC8qIEdQSU81X1NFTCAtIFszOjBdICovCisjZGVmaW5lIFdNODQwMF9HUElPNV9TRUxfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIEdQSU81X1NFTCAtIFszOjBdICovCisjZGVmaW5lIFdNODQwMF9HUElPNV9TRUxfV0lEVEggICAgICAgICAgICAgICAgICAgICAgIDQgIC8qIEdQSU81X1NFTCAtIFszOjBdICovCisKKy8qCisgKiBSMjIgKDB4MTYpIC0gR1BJT0NUUkwgMgorICovCisjZGVmaW5lIFdNODQwMF9URU1QT0tfSVJRX0VOQSAgICAgICAgICAgICAgICAgICAweDA4MDAgIC8qIFRFTVBPS19JUlFfRU5BICovCisjZGVmaW5lIFdNODQwMF9URU1QT0tfSVJRX0VOQV9NQVNLICAgICAgICAgICAgICAweDA4MDAgIC8qIFRFTVBPS19JUlFfRU5BICovCisjZGVmaW5lIFdNODQwMF9URU1QT0tfSVJRX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgMTEgIC8qIFRFTVBPS19JUlFfRU5BICovCisjZGVmaW5lIFdNODQwMF9URU1QT0tfSVJRX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgIDEgIC8qIFRFTVBPS19JUlFfRU5BICovCisjZGVmaW5lIFdNODQwMF9NSUMxU0hSVF9JUlFfRU5BICAgICAgICAgICAgICAgICAweDA0MDAgIC8qIE1JQzFTSFJUX0lSUV9FTkEgKi8KKyNkZWZpbmUgV004NDAwX01JQzFTSFJUX0lSUV9FTkFfTUFTSyAgICAgICAgICAgIDB4MDQwMCAgLyogTUlDMVNIUlRfSVJRX0VOQSAqLworI2RlZmluZSBXTTg0MDBfTUlDMVNIUlRfSVJRX0VOQV9TSElGVCAgICAgICAgICAgICAgIDEwICAvKiBNSUMxU0hSVF9JUlFfRU5BICovCisjZGVmaW5lIFdNODQwMF9NSUMxU0hSVF9JUlFfRU5BX1dJRFRIICAgICAgICAgICAgICAgIDEgIC8qIE1JQzFTSFJUX0lSUV9FTkEgKi8KKyNkZWZpbmUgV004NDAwX01JQzFERVRfSVJRX0VOQSAgICAgICAgICAgICAgICAgIDB4MDIwMCAgLyogTUlDMURFVF9JUlFfRU5BICovCisjZGVmaW5lIFdNODQwMF9NSUMxREVUX0lSUV9FTkFfTUFTSyAgICAgICAgICAgICAweDAyMDAgIC8qIE1JQzFERVRfSVJRX0VOQSAqLworI2RlZmluZSBXTTg0MDBfTUlDMURFVF9JUlFfRU5BX1NISUZUICAgICAgICAgICAgICAgICA5ICAvKiBNSUMxREVUX0lSUV9FTkEgKi8KKyNkZWZpbmUgV004NDAwX01JQzFERVRfSVJRX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgMSAgLyogTUlDMURFVF9JUlFfRU5BICovCisjZGVmaW5lIFdNODQwMF9GTExfTENLX0lSUV9FTkEgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIEZMTF9MQ0tfSVJRX0VOQSAqLworI2RlZmluZSBXTTg0MDBfRkxMX0xDS19JUlFfRU5BX01BU0sgICAgICAgICAgICAgMHgwMTAwICAvKiBGTExfTENLX0lSUV9FTkEgKi8KKyNkZWZpbmUgV004NDAwX0ZMTF9MQ0tfSVJRX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgOCAgLyogRkxMX0xDS19JUlFfRU5BICovCisjZGVmaW5lIFdNODQwMF9GTExfTENLX0lSUV9FTkFfV0lEVEggICAgICAgICAgICAgICAgIDEgIC8qIEZMTF9MQ0tfSVJRX0VOQSAqLworI2RlZmluZSBXTTg0MDBfR1BJOF9ERUJfRU5BICAgICAgICAgICAgICAgICAgICAgMHgwMDgwICAvKiBHUEk4X0RFQl9FTkEgKi8KKyNkZWZpbmUgV004NDAwX0dQSThfREVCX0VOQV9NQVNLICAgICAgICAgICAgICAgIDB4MDA4MCAgLyogR1BJOF9ERUJfRU5BICovCisjZGVmaW5lIFdNODQwMF9HUEk4X0RFQl9FTkFfU0hJRlQgICAgICAgICAgICAgICAgICAgIDcgIC8qIEdQSThfREVCX0VOQSAqLworI2RlZmluZSBXTTg0MDBfR1BJOF9ERUJfRU5BX1dJRFRIICAgICAgICAgICAgICAgICAgICAxICAvKiBHUEk4X0RFQl9FTkEgKi8KKyNkZWZpbmUgV004NDAwX0dQSThfSVJRX0VOQSAgICAgICAgICAgICAgICAgICAgIDB4MDA0MCAgLyogR1BJOF9JUlFfRU5BICovCisjZGVmaW5lIFdNODQwMF9HUEk4X0lSUV9FTkFfTUFTSyAgICAgICAgICAgICAgICAweDAwNDAgIC8qIEdQSThfSVJRX0VOQSAqLworI2RlZmluZSBXTTg0MDBfR1BJOF9JUlFfRU5BX1NISUZUICAgICAgICAgICAgICAgICAgICA2ICAvKiBHUEk4X0lSUV9FTkEgKi8KKyNkZWZpbmUgV004NDAwX0dQSThfSVJRX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgICAgMSAgLyogR1BJOF9JUlFfRU5BICovCisjZGVmaW5lIFdNODQwMF9HUEk4X0VOQSAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMTAgIC8qIEdQSThfRU5BICovCisjZGVmaW5lIFdNODQwMF9HUEk4X0VOQV9NQVNLICAgICAgICAgICAgICAgICAgICAweDAwMTAgIC8qIEdQSThfRU5BICovCisjZGVmaW5lIFdNODQwMF9HUEk4X0VOQV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDQgIC8qIEdQSThfRU5BICovCisjZGVmaW5lIFdNODQwMF9HUEk4X0VOQV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEdQSThfRU5BICovCisjZGVmaW5lIFdNODQwMF9HUEk3X0RFQl9FTkEgICAgICAgICAgICAgICAgICAgICAweDAwMDggIC8qIEdQSTdfREVCX0VOQSAqLworI2RlZmluZSBXTTg0MDBfR1BJN19ERUJfRU5BX01BU0sgICAgICAgICAgICAgICAgMHgwMDA4ICAvKiBHUEk3X0RFQl9FTkEgKi8KKyNkZWZpbmUgV004NDAwX0dQSTdfREVCX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgICAgMyAgLyogR1BJN19ERUJfRU5BICovCisjZGVmaW5lIFdNODQwMF9HUEk3X0RFQl9FTkFfV0lEVEggICAgICAgICAgICAgICAgICAgIDEgIC8qIEdQSTdfREVCX0VOQSAqLworI2RlZmluZSBXTTg0MDBfR1BJN19JUlFfRU5BICAgICAgICAgICAgICAgICAgICAgMHgwMDA0ICAvKiBHUEk3X0lSUV9FTkEgKi8KKyNkZWZpbmUgV004NDAwX0dQSTdfSVJRX0VOQV9NQVNLICAgICAgICAgICAgICAgIDB4MDAwNCAgLyogR1BJN19JUlFfRU5BICovCisjZGVmaW5lIFdNODQwMF9HUEk3X0lSUV9FTkFfU0hJRlQgICAgICAgICAgICAgICAgICAgIDIgIC8qIEdQSTdfSVJRX0VOQSAqLworI2RlZmluZSBXTTg0MDBfR1BJN19JUlFfRU5BX1dJRFRIICAgICAgICAgICAgICAgICAgICAxICAvKiBHUEk3X0lSUV9FTkEgKi8KKyNkZWZpbmUgV004NDAwX0dQSTdfRU5BICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogR1BJN19FTkEgKi8KKyNkZWZpbmUgV004NDAwX0dQSTdfRU5BX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogR1BJN19FTkEgKi8KKyNkZWZpbmUgV004NDAwX0dQSTdfRU5BX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgMCAgLyogR1BJN19FTkEgKi8KKyNkZWZpbmUgV004NDAwX0dQSTdfRU5BX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogR1BJN19FTkEgKi8KKworLyoKKyAqIFIyMyAoMHgxNykgLSBHUElPX1BPTAorICovCisjZGVmaW5lIFdNODQwMF9JUlFfSU5WICAgICAgICAgICAgICAgICAgICAgICAgICAweDEwMDAgIC8qIElSUV9JTlYgKi8KKyNkZWZpbmUgV004NDAwX0lSUV9JTlZfTUFTSyAgICAgICAgICAgICAgICAgICAgIDB4MTAwMCAgLyogSVJRX0lOViAqLworI2RlZmluZSBXTTg0MDBfSVJRX0lOVl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDEyICAvKiBJUlFfSU5WICovCisjZGVmaW5lIFdNODQwMF9JUlFfSU5WX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIElSUV9JTlYgKi8KKyNkZWZpbmUgV004NDAwX1RFTVBPS19QT0wgICAgICAgICAgICAgICAgICAgICAgIDB4MDgwMCAgLyogVEVNUE9LX1BPTCAqLworI2RlZmluZSBXTTg0MDBfVEVNUE9LX1BPTF9NQVNLICAgICAgICAgICAgICAgICAgMHgwODAwICAvKiBURU1QT0tfUE9MICovCisjZGVmaW5lIFdNODQwMF9URU1QT0tfUE9MX1NISUZUICAgICAgICAgICAgICAgICAgICAgMTEgIC8qIFRFTVBPS19QT0wgKi8KKyNkZWZpbmUgV004NDAwX1RFTVBPS19QT0xfV0lEVEggICAgICAgICAgICAgICAgICAgICAgMSAgLyogVEVNUE9LX1BPTCAqLworI2RlZmluZSBXTTg0MDBfTUlDMVNIUlRfUE9MICAgICAgICAgICAgICAgICAgICAgMHgwNDAwICAvKiBNSUMxU0hSVF9QT0wgKi8KKyNkZWZpbmUgV004NDAwX01JQzFTSFJUX1BPTF9NQVNLICAgICAgICAgICAgICAgIDB4MDQwMCAgLyogTUlDMVNIUlRfUE9MICovCisjZGVmaW5lIFdNODQwMF9NSUMxU0hSVF9QT0xfU0hJRlQgICAgICAgICAgICAgICAgICAgMTAgIC8qIE1JQzFTSFJUX1BPTCAqLworI2RlZmluZSBXTTg0MDBfTUlDMVNIUlRfUE9MX1dJRFRIICAgICAgICAgICAgICAgICAgICAxICAvKiBNSUMxU0hSVF9QT0wgKi8KKyNkZWZpbmUgV004NDAwX01JQzFERVRfUE9MICAgICAgICAgICAgICAgICAgICAgIDB4MDIwMCAgLyogTUlDMURFVF9QT0wgKi8KKyNkZWZpbmUgV004NDAwX01JQzFERVRfUE9MX01BU0sgICAgICAgICAgICAgICAgIDB4MDIwMCAgLyogTUlDMURFVF9QT0wgKi8KKyNkZWZpbmUgV004NDAwX01JQzFERVRfUE9MX1NISUZUICAgICAgICAgICAgICAgICAgICAgOSAgLyogTUlDMURFVF9QT0wgKi8KKyNkZWZpbmUgV004NDAwX01JQzFERVRfUE9MX1dJRFRIICAgICAgICAgICAgICAgICAgICAgMSAgLyogTUlDMURFVF9QT0wgKi8KKyNkZWZpbmUgV004NDAwX0ZMTF9MQ0tfUE9MICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogRkxMX0xDS19QT0wgKi8KKyNkZWZpbmUgV004NDAwX0ZMTF9MQ0tfUE9MX01BU0sgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogRkxMX0xDS19QT0wgKi8KKyNkZWZpbmUgV004NDAwX0ZMTF9MQ0tfUE9MX1NISUZUICAgICAgICAgICAgICAgICAgICAgOCAgLyogRkxMX0xDS19QT0wgKi8KKyNkZWZpbmUgV004NDAwX0ZMTF9MQ0tfUE9MX1dJRFRIICAgICAgICAgICAgICAgICAgICAgMSAgLyogRkxMX0xDS19QT0wgKi8KKyNkZWZpbmUgV004NDAwX0dQSU9fUE9MX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDBGRiAgLyogR1BJT19QT0wgLSBbNzowXSAqLworI2RlZmluZSBXTTg0MDBfR1BJT19QT0xfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAwICAvKiBHUElPX1BPTCAtIFs3OjBdICovCisjZGVmaW5lIFdNODQwMF9HUElPX1BPTF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDggIC8qIEdQSU9fUE9MIC0gWzc6MF0gKi8KKworLyoKKyAqIFI2NSAoMHg0MSkgLSBMRE8gMSBDb250cm9sCisgKi8KKyNkZWZpbmUgV004NDAwX0xETzFfRU5BICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODAwMCAgLyogTERPMV9FTkEgKi8KKyNkZWZpbmUgV004NDAwX0xETzFfRU5BX01BU0sgICAgICAgICAgICAgICAgICAgIDB4ODAwMCAgLyogTERPMV9FTkEgKi8KKyNkZWZpbmUgV004NDAwX0xETzFfRU5BX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAxNSAgLyogTERPMV9FTkEgKi8KKyNkZWZpbmUgV004NDAwX0xETzFfRU5BX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogTERPMV9FTkEgKi8KKyNkZWZpbmUgV004NDAwX0xETzFfU1dJICAgICAgICAgICAgICAgICAgICAgICAgIDB4NDAwMCAgLyogTERPMV9TV0kgKi8KKyNkZWZpbmUgV004NDAwX0xETzFfU1dJX01BU0sgICAgICAgICAgICAgICAgICAgIDB4NDAwMCAgLyogTERPMV9TV0kgKi8KKyNkZWZpbmUgV004NDAwX0xETzFfU1dJX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAxNCAgLyogTERPMV9TV0kgKi8KKyNkZWZpbmUgV004NDAwX0xETzFfU1dJX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogTERPMV9TV0kgKi8KKyNkZWZpbmUgV004NDAwX0xETzFfT1BGTFQgICAgICAgICAgICAgICAgICAgICAgIDB4MTAwMCAgLyogTERPMV9PUEZMVCAqLworI2RlZmluZSBXTTg0MDBfTERPMV9PUEZMVF9NQVNLICAgICAgICAgICAgICAgICAgMHgxMDAwICAvKiBMRE8xX09QRkxUICovCisjZGVmaW5lIFdNODQwMF9MRE8xX09QRkxUX1NISUZUICAgICAgICAgICAgICAgICAgICAgMTIgIC8qIExETzFfT1BGTFQgKi8KKyNkZWZpbmUgV004NDAwX0xETzFfT1BGTFRfV0lEVEggICAgICAgICAgICAgICAgICAgICAgMSAgLyogTERPMV9PUEZMVCAqLworI2RlZmluZSBXTTg0MDBfTERPMV9FUlJBQ1QgICAgICAgICAgICAgICAgICAgICAgMHgwODAwICAvKiBMRE8xX0VSUkFDVCAqLworI2RlZmluZSBXTTg0MDBfTERPMV9FUlJBQ1RfTUFTSyAgICAgICAgICAgICAgICAgMHgwODAwICAvKiBMRE8xX0VSUkFDVCAqLworI2RlZmluZSBXTTg0MDBfTERPMV9FUlJBQ1RfU0hJRlQgICAgICAgICAgICAgICAgICAgIDExICAvKiBMRE8xX0VSUkFDVCAqLworI2RlZmluZSBXTTg0MDBfTERPMV9FUlJBQ1RfV0lEVEggICAgICAgICAgICAgICAgICAgICAxICAvKiBMRE8xX0VSUkFDVCAqLworI2RlZmluZSBXTTg0MDBfTERPMV9ISUJfTU9ERSAgICAgICAgICAgICAgICAgICAgMHgwNDAwICAvKiBMRE8xX0hJQl9NT0RFICovCisjZGVmaW5lIFdNODQwMF9MRE8xX0hJQl9NT0RFX01BU0sgICAgICAgICAgICAgICAweDA0MDAgIC8qIExETzFfSElCX01PREUgKi8KKyNkZWZpbmUgV004NDAwX0xETzFfSElCX01PREVfU0hJRlQgICAgICAgICAgICAgICAgICAxMCAgLyogTERPMV9ISUJfTU9ERSAqLworI2RlZmluZSBXTTg0MDBfTERPMV9ISUJfTU9ERV9XSURUSCAgICAgICAgICAgICAgICAgICAxICAvKiBMRE8xX0hJQl9NT0RFICovCisjZGVmaW5lIFdNODQwMF9MRE8xX1ZJTUdfTUFTSyAgICAgICAgICAgICAgICAgICAweDAzRTAgIC8qIExETzFfVklNRyAtIFs5OjVdICovCisjZGVmaW5lIFdNODQwMF9MRE8xX1ZJTUdfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgIDUgIC8qIExETzFfVklNRyAtIFs5OjVdICovCisjZGVmaW5lIFdNODQwMF9MRE8xX1ZJTUdfV0lEVEggICAgICAgICAgICAgICAgICAgICAgIDUgIC8qIExETzFfVklNRyAtIFs5OjVdICovCisjZGVmaW5lIFdNODQwMF9MRE8xX1ZTRUxfTUFTSyAgICAgICAgICAgICAgICAgICAweDAwMUYgIC8qIExETzFfVlNFTCAtIFs0OjBdICovCisjZGVmaW5lIFdNODQwMF9MRE8xX1ZTRUxfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIExETzFfVlNFTCAtIFs0OjBdICovCisjZGVmaW5lIFdNODQwMF9MRE8xX1ZTRUxfV0lEVEggICAgICAgICAgICAgICAgICAgICAgIDUgIC8qIExETzFfVlNFTCAtIFs0OjBdICovCisKKy8qCisgKiBSNjYgKDB4NDIpIC0gTERPIDIgQ29udHJvbAorICovCisjZGVmaW5lIFdNODQwMF9MRE8yX0VOQSAgICAgICAgICAgICAgICAgICAgICAgICAweDgwMDAgIC8qIExETzJfRU5BICovCisjZGVmaW5lIFdNODQwMF9MRE8yX0VOQV9NQVNLICAgICAgICAgICAgICAgICAgICAweDgwMDAgIC8qIExETzJfRU5BICovCisjZGVmaW5lIFdNODQwMF9MRE8yX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgMTUgIC8qIExETzJfRU5BICovCisjZGVmaW5lIFdNODQwMF9MRE8yX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIExETzJfRU5BICovCisjZGVmaW5lIFdNODQwMF9MRE8yX1NXSSAgICAgICAgICAgICAgICAgICAgICAgICAweDQwMDAgIC8qIExETzJfU1dJICovCisjZGVmaW5lIFdNODQwMF9MRE8yX1NXSV9NQVNLICAgICAgICAgICAgICAgICAgICAweDQwMDAgIC8qIExETzJfU1dJICovCisjZGVmaW5lIFdNODQwMF9MRE8yX1NXSV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgMTQgIC8qIExETzJfU1dJICovCisjZGVmaW5lIFdNODQwMF9MRE8yX1NXSV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIExETzJfU1dJICovCisjZGVmaW5lIFdNODQwMF9MRE8yX09QRkxUICAgICAgICAgICAgICAgICAgICAgICAweDEwMDAgIC8qIExETzJfT1BGTFQgKi8KKyNkZWZpbmUgV004NDAwX0xETzJfT1BGTFRfTUFTSyAgICAgICAgICAgICAgICAgIDB4MTAwMCAgLyogTERPMl9PUEZMVCAqLworI2RlZmluZSBXTTg0MDBfTERPMl9PUEZMVF9TSElGVCAgICAgICAgICAgICAgICAgICAgIDEyICAvKiBMRE8yX09QRkxUICovCisjZGVmaW5lIFdNODQwMF9MRE8yX09QRkxUX1dJRFRIICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIExETzJfT1BGTFQgKi8KKyNkZWZpbmUgV004NDAwX0xETzJfRVJSQUNUICAgICAgICAgICAgICAgICAgICAgIDB4MDgwMCAgLyogTERPMl9FUlJBQ1QgKi8KKyNkZWZpbmUgV004NDAwX0xETzJfRVJSQUNUX01BU0sgICAgICAgICAgICAgICAgIDB4MDgwMCAgLyogTERPMl9FUlJBQ1QgKi8KKyNkZWZpbmUgV004NDAwX0xETzJfRVJSQUNUX1NISUZUICAgICAgICAgICAgICAgICAgICAxMSAgLyogTERPMl9FUlJBQ1QgKi8KKyNkZWZpbmUgV004NDAwX0xETzJfRVJSQUNUX1dJRFRIICAgICAgICAgICAgICAgICAgICAgMSAgLyogTERPMl9FUlJBQ1QgKi8KKyNkZWZpbmUgV004NDAwX0xETzJfSElCX01PREUgICAgICAgICAgICAgICAgICAgIDB4MDQwMCAgLyogTERPMl9ISUJfTU9ERSAqLworI2RlZmluZSBXTTg0MDBfTERPMl9ISUJfTU9ERV9NQVNLICAgICAgICAgICAgICAgMHgwNDAwICAvKiBMRE8yX0hJQl9NT0RFICovCisjZGVmaW5lIFdNODQwMF9MRE8yX0hJQl9NT0RFX1NISUZUICAgICAgICAgICAgICAgICAgMTAgIC8qIExETzJfSElCX01PREUgKi8KKyNkZWZpbmUgV004NDAwX0xETzJfSElCX01PREVfV0lEVEggICAgICAgICAgICAgICAgICAgMSAgLyogTERPMl9ISUJfTU9ERSAqLworI2RlZmluZSBXTTg0MDBfTERPMl9WSU1HX01BU0sgICAgICAgICAgICAgICAgICAgMHgwM0UwICAvKiBMRE8yX1ZJTUcgLSBbOTo1XSAqLworI2RlZmluZSBXTTg0MDBfTERPMl9WSU1HX1NISUZUICAgICAgICAgICAgICAgICAgICAgICA1ICAvKiBMRE8yX1ZJTUcgLSBbOTo1XSAqLworI2RlZmluZSBXTTg0MDBfTERPMl9WSU1HX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICA1ICAvKiBMRE8yX1ZJTUcgLSBbOTo1XSAqLworI2RlZmluZSBXTTg0MDBfTERPMl9WU0VMX01BU0sgICAgICAgICAgICAgICAgICAgMHgwMDFGICAvKiBMRE8yX1ZTRUwgLSBbNDowXSAqLworI2RlZmluZSBXTTg0MDBfTERPMl9WU0VMX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAwICAvKiBMRE8yX1ZTRUwgLSBbNDowXSAqLworI2RlZmluZSBXTTg0MDBfTERPMl9WU0VMX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICA1ICAvKiBMRE8yX1ZTRUwgLSBbNDowXSAqLworCisvKgorICogUjY3ICgweDQzKSAtIExETyAzIENvbnRyb2wKKyAqLworI2RlZmluZSBXTTg0MDBfTERPM19FTkEgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MDAwICAvKiBMRE8zX0VOQSAqLworI2RlZmluZSBXTTg0MDBfTERPM19FTkFfTUFTSyAgICAgICAgICAgICAgICAgICAgMHg4MDAwICAvKiBMRE8zX0VOQSAqLworI2RlZmluZSBXTTg0MDBfTERPM19FTkFfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgIDE1ICAvKiBMRE8zX0VOQSAqLworI2RlZmluZSBXTTg0MDBfTERPM19FTkFfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBMRE8zX0VOQSAqLworI2RlZmluZSBXTTg0MDBfTERPM19TV0kgICAgICAgICAgICAgICAgICAgICAgICAgMHg0MDAwICAvKiBMRE8zX1NXSSAqLworI2RlZmluZSBXTTg0MDBfTERPM19TV0lfTUFTSyAgICAgICAgICAgICAgICAgICAgMHg0MDAwICAvKiBMRE8zX1NXSSAqLworI2RlZmluZSBXTTg0MDBfTERPM19TV0lfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgIDE0ICAvKiBMRE8zX1NXSSAqLworI2RlZmluZSBXTTg0MDBfTERPM19TV0lfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBMRE8zX1NXSSAqLworI2RlZmluZSBXTTg0MDBfTERPM19PUEZMVCAgICAgICAgICAgICAgICAgICAgICAgMHgxMDAwICAvKiBMRE8zX09QRkxUICovCisjZGVmaW5lIFdNODQwMF9MRE8zX09QRkxUX01BU0sgICAgICAgICAgICAgICAgICAweDEwMDAgIC8qIExETzNfT1BGTFQgKi8KKyNkZWZpbmUgV004NDAwX0xETzNfT1BGTFRfU0hJRlQgICAgICAgICAgICAgICAgICAgICAxMiAgLyogTERPM19PUEZMVCAqLworI2RlZmluZSBXTTg0MDBfTERPM19PUEZMVF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAxICAvKiBMRE8zX09QRkxUICovCisjZGVmaW5lIFdNODQwMF9MRE8zX0VSUkFDVCAgICAgICAgICAgICAgICAgICAgICAweDA4MDAgIC8qIExETzNfRVJSQUNUICovCisjZGVmaW5lIFdNODQwMF9MRE8zX0VSUkFDVF9NQVNLICAgICAgICAgICAgICAgICAweDA4MDAgIC8qIExETzNfRVJSQUNUICovCisjZGVmaW5lIFdNODQwMF9MRE8zX0VSUkFDVF9TSElGVCAgICAgICAgICAgICAgICAgICAgMTEgIC8qIExETzNfRVJSQUNUICovCisjZGVmaW5lIFdNODQwMF9MRE8zX0VSUkFDVF9XSURUSCAgICAgICAgICAgICAgICAgICAgIDEgIC8qIExETzNfRVJSQUNUICovCisjZGVmaW5lIFdNODQwMF9MRE8zX0hJQl9NT0RFICAgICAgICAgICAgICAgICAgICAweDA0MDAgIC8qIExETzNfSElCX01PREUgKi8KKyNkZWZpbmUgV004NDAwX0xETzNfSElCX01PREVfTUFTSyAgICAgICAgICAgICAgIDB4MDQwMCAgLyogTERPM19ISUJfTU9ERSAqLworI2RlZmluZSBXTTg0MDBfTERPM19ISUJfTU9ERV9TSElGVCAgICAgICAgICAgICAgICAgIDEwICAvKiBMRE8zX0hJQl9NT0RFICovCisjZGVmaW5lIFdNODQwMF9MRE8zX0hJQl9NT0RFX1dJRFRIICAgICAgICAgICAgICAgICAgIDEgIC8qIExETzNfSElCX01PREUgKi8KKyNkZWZpbmUgV004NDAwX0xETzNfVklNR19NQVNLICAgICAgICAgICAgICAgICAgIDB4MDNFMCAgLyogTERPM19WSU1HIC0gWzk6NV0gKi8KKyNkZWZpbmUgV004NDAwX0xETzNfVklNR19TSElGVCAgICAgICAgICAgICAgICAgICAgICAgNSAgLyogTERPM19WSU1HIC0gWzk6NV0gKi8KKyNkZWZpbmUgV004NDAwX0xETzNfVklNR19XSURUSCAgICAgICAgICAgICAgICAgICAgICAgNSAgLyogTERPM19WSU1HIC0gWzk6NV0gKi8KKyNkZWZpbmUgV004NDAwX0xETzNfVlNFTF9NQVNLICAgICAgICAgICAgICAgICAgIDB4MDAxRiAgLyogTERPM19WU0VMIC0gWzQ6MF0gKi8KKyNkZWZpbmUgV004NDAwX0xETzNfVlNFTF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgMCAgLyogTERPM19WU0VMIC0gWzQ6MF0gKi8KKyNkZWZpbmUgV004NDAwX0xETzNfVlNFTF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgNSAgLyogTERPM19WU0VMIC0gWzQ6MF0gKi8KKworLyoKKyAqIFI2OCAoMHg0NCkgLSBMRE8gNCBDb250cm9sCisgKi8KKyNkZWZpbmUgV004NDAwX0xETzRfRU5BICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODAwMCAgLyogTERPNF9FTkEgKi8KKyNkZWZpbmUgV004NDAwX0xETzRfRU5BX01BU0sgICAgICAgICAgICAgICAgICAgIDB4ODAwMCAgLyogTERPNF9FTkEgKi8KKyNkZWZpbmUgV004NDAwX0xETzRfRU5BX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAxNSAgLyogTERPNF9FTkEgKi8KKyNkZWZpbmUgV004NDAwX0xETzRfRU5BX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogTERPNF9FTkEgKi8KKyNkZWZpbmUgV004NDAwX0xETzRfU1dJICAgICAgICAgICAgICAgICAgICAgICAgIDB4NDAwMCAgLyogTERPNF9TV0kgKi8KKyNkZWZpbmUgV004NDAwX0xETzRfU1dJX01BU0sgICAgICAgICAgICAgICAgICAgIDB4NDAwMCAgLyogTERPNF9TV0kgKi8KKyNkZWZpbmUgV004NDAwX0xETzRfU1dJX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAxNCAgLyogTERPNF9TV0kgKi8KKyNkZWZpbmUgV004NDAwX0xETzRfU1dJX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogTERPNF9TV0kgKi8KKyNkZWZpbmUgV004NDAwX0xETzRfT1BGTFQgICAgICAgICAgICAgICAgICAgICAgIDB4MTAwMCAgLyogTERPNF9PUEZMVCAqLworI2RlZmluZSBXTTg0MDBfTERPNF9PUEZMVF9NQVNLICAgICAgICAgICAgICAgICAgMHgxMDAwICAvKiBMRE80X09QRkxUICovCisjZGVmaW5lIFdNODQwMF9MRE80X09QRkxUX1NISUZUICAgICAgICAgICAgICAgICAgICAgMTIgIC8qIExETzRfT1BGTFQgKi8KKyNkZWZpbmUgV004NDAwX0xETzRfT1BGTFRfV0lEVEggICAgICAgICAgICAgICAgICAgICAgMSAgLyogTERPNF9PUEZMVCAqLworI2RlZmluZSBXTTg0MDBfTERPNF9FUlJBQ1QgICAgICAgICAgICAgICAgICAgICAgMHgwODAwICAvKiBMRE80X0VSUkFDVCAqLworI2RlZmluZSBXTTg0MDBfTERPNF9FUlJBQ1RfTUFTSyAgICAgICAgICAgICAgICAgMHgwODAwICAvKiBMRE80X0VSUkFDVCAqLworI2RlZmluZSBXTTg0MDBfTERPNF9FUlJBQ1RfU0hJRlQgICAgICAgICAgICAgICAgICAgIDExICAvKiBMRE80X0VSUkFDVCAqLworI2RlZmluZSBXTTg0MDBfTERPNF9FUlJBQ1RfV0lEVEggICAgICAgICAgICAgICAgICAgICAxICAvKiBMRE80X0VSUkFDVCAqLworI2RlZmluZSBXTTg0MDBfTERPNF9ISUJfTU9ERSAgICAgICAgICAgICAgICAgICAgMHgwNDAwICAvKiBMRE80X0hJQl9NT0RFICovCisjZGVmaW5lIFdNODQwMF9MRE80X0hJQl9NT0RFX01BU0sgICAgICAgICAgICAgICAweDA0MDAgIC8qIExETzRfSElCX01PREUgKi8KKyNkZWZpbmUgV004NDAwX0xETzRfSElCX01PREVfU0hJRlQgICAgICAgICAgICAgICAgICAxMCAgLyogTERPNF9ISUJfTU9ERSAqLworI2RlZmluZSBXTTg0MDBfTERPNF9ISUJfTU9ERV9XSURUSCAgICAgICAgICAgICAgICAgICAxICAvKiBMRE80X0hJQl9NT0RFICovCisjZGVmaW5lIFdNODQwMF9MRE80X1ZJTUdfTUFTSyAgICAgICAgICAgICAgICAgICAweDAzRTAgIC8qIExETzRfVklNRyAtIFs5OjVdICovCisjZGVmaW5lIFdNODQwMF9MRE80X1ZJTUdfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgIDUgIC8qIExETzRfVklNRyAtIFs5OjVdICovCisjZGVmaW5lIFdNODQwMF9MRE80X1ZJTUdfV0lEVEggICAgICAgICAgICAgICAgICAgICAgIDUgIC8qIExETzRfVklNRyAtIFs5OjVdICovCisjZGVmaW5lIFdNODQwMF9MRE80X1ZTRUxfTUFTSyAgICAgICAgICAgICAgICAgICAweDAwMUYgIC8qIExETzRfVlNFTCAtIFs0OjBdICovCisjZGVmaW5lIFdNODQwMF9MRE80X1ZTRUxfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIExETzRfVlNFTCAtIFs0OjBdICovCisjZGVmaW5lIFdNODQwMF9MRE80X1ZTRUxfV0lEVEggICAgICAgICAgICAgICAgICAgICAgIDUgIC8qIExETzRfVlNFTCAtIFs0OjBdICovCisKKy8qCisgKiBSNzAgKDB4NDYpIC0gRENEQzEgQ29udHJvbCAxCisgKi8KKyNkZWZpbmUgV004NDAwX0RDMV9FTkEgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODAwMCAgLyogREMxX0VOQSAqLworI2RlZmluZSBXTTg0MDBfREMxX0VOQV9NQVNLICAgICAgICAgICAgICAgICAgICAgMHg4MDAwICAvKiBEQzFfRU5BICovCisjZGVmaW5lIFdNODQwMF9EQzFfRU5BX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgMTUgIC8qIERDMV9FTkEgKi8KKyNkZWZpbmUgV004NDAwX0RDMV9FTkFfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogREMxX0VOQSAqLworI2RlZmluZSBXTTg0MDBfREMxX0FDVElWRSAgICAgICAgICAgICAgICAgICAgICAgMHg0MDAwICAvKiBEQzFfQUNUSVZFICovCisjZGVmaW5lIFdNODQwMF9EQzFfQUNUSVZFX01BU0sgICAgICAgICAgICAgICAgICAweDQwMDAgIC8qIERDMV9BQ1RJVkUgKi8KKyNkZWZpbmUgV004NDAwX0RDMV9BQ1RJVkVfU0hJRlQgICAgICAgICAgICAgICAgICAgICAxNCAgLyogREMxX0FDVElWRSAqLworI2RlZmluZSBXTTg0MDBfREMxX0FDVElWRV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAxICAvKiBEQzFfQUNUSVZFICovCisjZGVmaW5lIFdNODQwMF9EQzFfU0xFRVAgICAgICAgICAgICAgICAgICAgICAgICAweDIwMDAgIC8qIERDMV9TTEVFUCAqLworI2RlZmluZSBXTTg0MDBfREMxX1NMRUVQX01BU0sgICAgICAgICAgICAgICAgICAgMHgyMDAwICAvKiBEQzFfU0xFRVAgKi8KKyNkZWZpbmUgV004NDAwX0RDMV9TTEVFUF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAxMyAgLyogREMxX1NMRUVQICovCisjZGVmaW5lIFdNODQwMF9EQzFfU0xFRVBfV0lEVEggICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIERDMV9TTEVFUCAqLworI2RlZmluZSBXTTg0MDBfREMxX09QRkxUICAgICAgICAgICAgICAgICAgICAgICAgMHgxMDAwICAvKiBEQzFfT1BGTFQgKi8KKyNkZWZpbmUgV004NDAwX0RDMV9PUEZMVF9NQVNLICAgICAgICAgICAgICAgICAgIDB4MTAwMCAgLyogREMxX09QRkxUICovCisjZGVmaW5lIFdNODQwMF9EQzFfT1BGTFRfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgMTIgIC8qIERDMV9PUEZMVCAqLworI2RlZmluZSBXTTg0MDBfREMxX09QRkxUX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBEQzFfT1BGTFQgKi8KKyNkZWZpbmUgV004NDAwX0RDMV9FUlJBQ1QgICAgICAgICAgICAgICAgICAgICAgIDB4MDgwMCAgLyogREMxX0VSUkFDVCAqLworI2RlZmluZSBXTTg0MDBfREMxX0VSUkFDVF9NQVNLICAgICAgICAgICAgICAgICAgMHgwODAwICAvKiBEQzFfRVJSQUNUICovCisjZGVmaW5lIFdNODQwMF9EQzFfRVJSQUNUX1NISUZUICAgICAgICAgICAgICAgICAgICAgMTEgIC8qIERDMV9FUlJBQ1QgKi8KKyNkZWZpbmUgV004NDAwX0RDMV9FUlJBQ1RfV0lEVEggICAgICAgICAgICAgICAgICAgICAgMSAgLyogREMxX0VSUkFDVCAqLworI2RlZmluZSBXTTg0MDBfREMxX0hJQl9NT0RFICAgICAgICAgICAgICAgICAgICAgMHgwNDAwICAvKiBEQzFfSElCX01PREUgKi8KKyNkZWZpbmUgV004NDAwX0RDMV9ISUJfTU9ERV9NQVNLICAgICAgICAgICAgICAgIDB4MDQwMCAgLyogREMxX0hJQl9NT0RFICovCisjZGVmaW5lIFdNODQwMF9EQzFfSElCX01PREVfU0hJRlQgICAgICAgICAgICAgICAgICAgMTAgIC8qIERDMV9ISUJfTU9ERSAqLworI2RlZmluZSBXTTg0MDBfREMxX0hJQl9NT0RFX1dJRFRIICAgICAgICAgICAgICAgICAgICAxICAvKiBEQzFfSElCX01PREUgKi8KKyNkZWZpbmUgV004NDAwX0RDMV9TT0ZUU1RfTUFTSyAgICAgICAgICAgICAgICAgIDB4MDMwMCAgLyogREMxX1NPRlRTVCAtIFs5OjhdICovCisjZGVmaW5lIFdNODQwMF9EQzFfU09GVFNUX1NISUZUICAgICAgICAgICAgICAgICAgICAgIDggIC8qIERDMV9TT0ZUU1QgLSBbOTo4XSAqLworI2RlZmluZSBXTTg0MDBfREMxX1NPRlRTVF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAyICAvKiBEQzFfU09GVFNUIC0gWzk6OF0gKi8KKyNkZWZpbmUgV004NDAwX0RDMV9PVl9QUk9UICAgICAgICAgICAgICAgICAgICAgIDB4MDA4MCAgLyogREMxX09WX1BST1QgKi8KKyNkZWZpbmUgV004NDAwX0RDMV9PVl9QUk9UX01BU0sgICAgICAgICAgICAgICAgIDB4MDA4MCAgLyogREMxX09WX1BST1QgKi8KKyNkZWZpbmUgV004NDAwX0RDMV9PVl9QUk9UX1NISUZUICAgICAgICAgICAgICAgICAgICAgNyAgLyogREMxX09WX1BST1QgKi8KKyNkZWZpbmUgV004NDAwX0RDMV9PVl9QUk9UX1dJRFRIICAgICAgICAgICAgICAgICAgICAgMSAgLyogREMxX09WX1BST1QgKi8KKyNkZWZpbmUgV004NDAwX0RDMV9WU0VMX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDA3RiAgLyogREMxX1ZTRUwgLSBbNjowXSAqLworI2RlZmluZSBXTTg0MDBfREMxX1ZTRUxfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAwICAvKiBEQzFfVlNFTCAtIFs2OjBdICovCisjZGVmaW5lIFdNODQwMF9EQzFfVlNFTF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDcgIC8qIERDMV9WU0VMIC0gWzY6MF0gKi8KKworLyoKKyAqIFI3MSAoMHg0NykgLSBEQ0RDMSBDb250cm9sIDIKKyAqLworI2RlZmluZSBXTTg0MDBfREMxX0ZSQ19QV00gICAgICAgICAgICAgICAgICAgICAgMHgyMDAwICAvKiBEQzFfRlJDX1BXTSAqLworI2RlZmluZSBXTTg0MDBfREMxX0ZSQ19QV01fTUFTSyAgICAgICAgICAgICAgICAgMHgyMDAwICAvKiBEQzFfRlJDX1BXTSAqLworI2RlZmluZSBXTTg0MDBfREMxX0ZSQ19QV01fU0hJRlQgICAgICAgICAgICAgICAgICAgIDEzICAvKiBEQzFfRlJDX1BXTSAqLworI2RlZmluZSBXTTg0MDBfREMxX0ZSQ19QV01fV0lEVEggICAgICAgICAgICAgICAgICAgICAxICAvKiBEQzFfRlJDX1BXTSAqLworI2RlZmluZSBXTTg0MDBfREMxX1NUQllfTElNX01BU0sgICAgICAgICAgICAgICAgMHgwMzAwICAvKiBEQzFfU1RCWV9MSU0gLSBbOTo4XSAqLworI2RlZmluZSBXTTg0MDBfREMxX1NUQllfTElNX1NISUZUICAgICAgICAgICAgICAgICAgICA4ICAvKiBEQzFfU1RCWV9MSU0gLSBbOTo4XSAqLworI2RlZmluZSBXTTg0MDBfREMxX1NUQllfTElNX1dJRFRIICAgICAgICAgICAgICAgICAgICAyICAvKiBEQzFfU1RCWV9MSU0gLSBbOTo4XSAqLworI2RlZmluZSBXTTg0MDBfREMxX0FDVF9MSU0gICAgICAgICAgICAgICAgICAgICAgMHgwMDgwICAvKiBEQzFfQUNUX0xJTSAqLworI2RlZmluZSBXTTg0MDBfREMxX0FDVF9MSU1fTUFTSyAgICAgICAgICAgICAgICAgMHgwMDgwICAvKiBEQzFfQUNUX0xJTSAqLworI2RlZmluZSBXTTg0MDBfREMxX0FDVF9MSU1fU0hJRlQgICAgICAgICAgICAgICAgICAgICA3ICAvKiBEQzFfQUNUX0xJTSAqLworI2RlZmluZSBXTTg0MDBfREMxX0FDVF9MSU1fV0lEVEggICAgICAgICAgICAgICAgICAgICAxICAvKiBEQzFfQUNUX0xJTSAqLworI2RlZmluZSBXTTg0MDBfREMxX1ZJTUdfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMDdGICAvKiBEQzFfVklNRyAtIFs2OjBdICovCisjZGVmaW5lIFdNODQwMF9EQzFfVklNR19TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIERDMV9WSU1HIC0gWzY6MF0gKi8KKyNkZWZpbmUgV004NDAwX0RDMV9WSU1HX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgNyAgLyogREMxX1ZJTUcgLSBbNjowXSAqLworCisvKgorICogUjcyICgweDQ4KSAtIERDREMyIENvbnRyb2wgMQorICovCisjZGVmaW5lIFdNODQwMF9EQzJfRU5BICAgICAgICAgICAgICAgICAgICAgICAgICAweDgwMDAgIC8qIERDMl9FTkEgKi8KKyNkZWZpbmUgV004NDAwX0RDMl9FTkFfTUFTSyAgICAgICAgICAgICAgICAgICAgIDB4ODAwMCAgLyogREMyX0VOQSAqLworI2RlZmluZSBXTTg0MDBfREMyX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDE1ICAvKiBEQzJfRU5BICovCisjZGVmaW5lIFdNODQwMF9EQzJfRU5BX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIERDMl9FTkEgKi8KKyNkZWZpbmUgV004NDAwX0RDMl9BQ1RJVkUgICAgICAgICAgICAgICAgICAgICAgIDB4NDAwMCAgLyogREMyX0FDVElWRSAqLworI2RlZmluZSBXTTg0MDBfREMyX0FDVElWRV9NQVNLICAgICAgICAgICAgICAgICAgMHg0MDAwICAvKiBEQzJfQUNUSVZFICovCisjZGVmaW5lIFdNODQwMF9EQzJfQUNUSVZFX1NISUZUICAgICAgICAgICAgICAgICAgICAgMTQgIC8qIERDMl9BQ1RJVkUgKi8KKyNkZWZpbmUgV004NDAwX0RDMl9BQ1RJVkVfV0lEVEggICAgICAgICAgICAgICAgICAgICAgMSAgLyogREMyX0FDVElWRSAqLworI2RlZmluZSBXTTg0MDBfREMyX1NMRUVQICAgICAgICAgICAgICAgICAgICAgICAgMHgyMDAwICAvKiBEQzJfU0xFRVAgKi8KKyNkZWZpbmUgV004NDAwX0RDMl9TTEVFUF9NQVNLICAgICAgICAgICAgICAgICAgIDB4MjAwMCAgLyogREMyX1NMRUVQICovCisjZGVmaW5lIFdNODQwMF9EQzJfU0xFRVBfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgMTMgIC8qIERDMl9TTEVFUCAqLworI2RlZmluZSBXTTg0MDBfREMyX1NMRUVQX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBEQzJfU0xFRVAgKi8KKyNkZWZpbmUgV004NDAwX0RDMl9PUEZMVCAgICAgICAgICAgICAgICAgICAgICAgIDB4MTAwMCAgLyogREMyX09QRkxUICovCisjZGVmaW5lIFdNODQwMF9EQzJfT1BGTFRfTUFTSyAgICAgICAgICAgICAgICAgICAweDEwMDAgIC8qIERDMl9PUEZMVCAqLworI2RlZmluZSBXTTg0MDBfREMyX09QRkxUX1NISUZUICAgICAgICAgICAgICAgICAgICAgIDEyICAvKiBEQzJfT1BGTFQgKi8KKyNkZWZpbmUgV004NDAwX0RDMl9PUEZMVF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogREMyX09QRkxUICovCisjZGVmaW5lIFdNODQwMF9EQzJfRVJSQUNUICAgICAgICAgICAgICAgICAgICAgICAweDA4MDAgIC8qIERDMl9FUlJBQ1QgKi8KKyNkZWZpbmUgV004NDAwX0RDMl9FUlJBQ1RfTUFTSyAgICAgICAgICAgICAgICAgIDB4MDgwMCAgLyogREMyX0VSUkFDVCAqLworI2RlZmluZSBXTTg0MDBfREMyX0VSUkFDVF9TSElGVCAgICAgICAgICAgICAgICAgICAgIDExICAvKiBEQzJfRVJSQUNUICovCisjZGVmaW5lIFdNODQwMF9EQzJfRVJSQUNUX1dJRFRIICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIERDMl9FUlJBQ1QgKi8KKyNkZWZpbmUgV004NDAwX0RDMl9ISUJfTU9ERSAgICAgICAgICAgICAgICAgICAgIDB4MDQwMCAgLyogREMyX0hJQl9NT0RFICovCisjZGVmaW5lIFdNODQwMF9EQzJfSElCX01PREVfTUFTSyAgICAgICAgICAgICAgICAweDA0MDAgIC8qIERDMl9ISUJfTU9ERSAqLworI2RlZmluZSBXTTg0MDBfREMyX0hJQl9NT0RFX1NISUZUICAgICAgICAgICAgICAgICAgIDEwICAvKiBEQzJfSElCX01PREUgKi8KKyNkZWZpbmUgV004NDAwX0RDMl9ISUJfTU9ERV9XSURUSCAgICAgICAgICAgICAgICAgICAgMSAgLyogREMyX0hJQl9NT0RFICovCisjZGVmaW5lIFdNODQwMF9EQzJfU09GVFNUX01BU0sgICAgICAgICAgICAgICAgICAweDAzMDAgIC8qIERDMl9TT0ZUU1QgLSBbOTo4XSAqLworI2RlZmluZSBXTTg0MDBfREMyX1NPRlRTVF9TSElGVCAgICAgICAgICAgICAgICAgICAgICA4ICAvKiBEQzJfU09GVFNUIC0gWzk6OF0gKi8KKyNkZWZpbmUgV004NDAwX0RDMl9TT0ZUU1RfV0lEVEggICAgICAgICAgICAgICAgICAgICAgMiAgLyogREMyX1NPRlRTVCAtIFs5OjhdICovCisjZGVmaW5lIFdNODQwMF9EQzJfT1ZfUFJPVCAgICAgICAgICAgICAgICAgICAgICAweDAwODAgIC8qIERDMl9PVl9QUk9UICovCisjZGVmaW5lIFdNODQwMF9EQzJfT1ZfUFJPVF9NQVNLICAgICAgICAgICAgICAgICAweDAwODAgIC8qIERDMl9PVl9QUk9UICovCisjZGVmaW5lIFdNODQwMF9EQzJfT1ZfUFJPVF9TSElGVCAgICAgICAgICAgICAgICAgICAgIDcgIC8qIERDMl9PVl9QUk9UICovCisjZGVmaW5lIFdNODQwMF9EQzJfT1ZfUFJPVF9XSURUSCAgICAgICAgICAgICAgICAgICAgIDEgIC8qIERDMl9PVl9QUk9UICovCisjZGVmaW5lIFdNODQwMF9EQzJfVlNFTF9NQVNLICAgICAgICAgICAgICAgICAgICAweDAwN0YgIC8qIERDMl9WU0VMIC0gWzY6MF0gKi8KKyNkZWZpbmUgV004NDAwX0RDMl9WU0VMX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgMCAgLyogREMyX1ZTRUwgLSBbNjowXSAqLworI2RlZmluZSBXTTg0MDBfREMyX1ZTRUxfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICA3ICAvKiBEQzJfVlNFTCAtIFs2OjBdICovCisKKy8qCisgKiBSNzMgKDB4NDkpIC0gRENEQzIgQ29udHJvbCAyCisgKi8KKyNkZWZpbmUgV004NDAwX0RDMl9GUkNfUFdNICAgICAgICAgICAgICAgICAgICAgIDB4MjAwMCAgLyogREMyX0ZSQ19QV00gKi8KKyNkZWZpbmUgV004NDAwX0RDMl9GUkNfUFdNX01BU0sgICAgICAgICAgICAgICAgIDB4MjAwMCAgLyogREMyX0ZSQ19QV00gKi8KKyNkZWZpbmUgV004NDAwX0RDMl9GUkNfUFdNX1NISUZUICAgICAgICAgICAgICAgICAgICAxMyAgLyogREMyX0ZSQ19QV00gKi8KKyNkZWZpbmUgV004NDAwX0RDMl9GUkNfUFdNX1dJRFRIICAgICAgICAgICAgICAgICAgICAgMSAgLyogREMyX0ZSQ19QV00gKi8KKyNkZWZpbmUgV004NDAwX0RDMl9TVEJZX0xJTV9NQVNLICAgICAgICAgICAgICAgIDB4MDMwMCAgLyogREMyX1NUQllfTElNIC0gWzk6OF0gKi8KKyNkZWZpbmUgV004NDAwX0RDMl9TVEJZX0xJTV9TSElGVCAgICAgICAgICAgICAgICAgICAgOCAgLyogREMyX1NUQllfTElNIC0gWzk6OF0gKi8KKyNkZWZpbmUgV004NDAwX0RDMl9TVEJZX0xJTV9XSURUSCAgICAgICAgICAgICAgICAgICAgMiAgLyogREMyX1NUQllfTElNIC0gWzk6OF0gKi8KKyNkZWZpbmUgV004NDAwX0RDMl9BQ1RfTElNICAgICAgICAgICAgICAgICAgICAgIDB4MDA4MCAgLyogREMyX0FDVF9MSU0gKi8KKyNkZWZpbmUgV004NDAwX0RDMl9BQ1RfTElNX01BU0sgICAgICAgICAgICAgICAgIDB4MDA4MCAgLyogREMyX0FDVF9MSU0gKi8KKyNkZWZpbmUgV004NDAwX0RDMl9BQ1RfTElNX1NISUZUICAgICAgICAgICAgICAgICAgICAgNyAgLyogREMyX0FDVF9MSU0gKi8KKyNkZWZpbmUgV004NDAwX0RDMl9BQ1RfTElNX1dJRFRIICAgICAgICAgICAgICAgICAgICAgMSAgLyogREMyX0FDVF9MSU0gKi8KKyNkZWZpbmUgV004NDAwX0RDMl9WSU1HX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDA3RiAgLyogREMyX1ZJTUcgLSBbNjowXSAqLworI2RlZmluZSBXTTg0MDBfREMyX1ZJTUdfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAwICAvKiBEQzJfVklNRyAtIFs2OjBdICovCisjZGVmaW5lIFdNODQwMF9EQzJfVklNR19XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDcgIC8qIERDMl9WSU1HIC0gWzY6MF0gKi8KKworLyoKKyAqIFI3NSAoMHg0QikgLSBJbnRlcmZhY2UKKyAqLworI2RlZmluZSBXTTg0MDBfQVVUT0lOQyAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA4ICAvKiBBVVRPSU5DICovCisjZGVmaW5lIFdNODQwMF9BVVRPSU5DX01BU0sgICAgICAgICAgICAgICAgICAgICAweDAwMDggIC8qIEFVVE9JTkMgKi8KKyNkZWZpbmUgV004NDAwX0FVVE9JTkNfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgMyAgLyogQVVUT0lOQyAqLworI2RlZmluZSBXTTg0MDBfQVVUT0lOQ19XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBBVVRPSU5DICovCisjZGVmaW5lIFdNODQwMF9BUkFfRU5BICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDQgIC8qIEFSQV9FTkEgKi8KKyNkZWZpbmUgV004NDAwX0FSQV9FTkFfTUFTSyAgICAgICAgICAgICAgICAgICAgIDB4MDAwNCAgLyogQVJBX0VOQSAqLworI2RlZmluZSBXTTg0MDBfQVJBX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAyICAvKiBBUkFfRU5BICovCisjZGVmaW5lIFdNODQwMF9BUkFfRU5BX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEFSQV9FTkEgKi8KKyNkZWZpbmUgV004NDAwX1NQSV9DRkcgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMiAgLyogU1BJX0NGRyAqLworI2RlZmluZSBXTTg0MDBfU1BJX0NGR19NQVNLICAgICAgICAgICAgICAgICAgICAgMHgwMDAyICAvKiBTUElfQ0ZHICovCisjZGVmaW5lIFdNODQwMF9TUElfQ0ZHX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIFNQSV9DRkcgKi8KKyNkZWZpbmUgV004NDAwX1NQSV9DRkdfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogU1BJX0NGRyAqLworCisvKgorICogUjc2ICgweDRDKSAtIFBNIEdFTkVSQUwKKyAqLworI2RlZmluZSBXTTg0MDBfQ09ERUNfU09GVFNUICAgICAgICAgICAgICAgICAgICAgMHg4MDAwICAvKiBDT0RFQ19TT0ZUU1QgKi8KKyNkZWZpbmUgV004NDAwX0NPREVDX1NPRlRTVF9NQVNLICAgICAgICAgICAgICAgIDB4ODAwMCAgLyogQ09ERUNfU09GVFNUICovCisjZGVmaW5lIFdNODQwMF9DT0RFQ19TT0ZUU1RfU0hJRlQgICAgICAgICAgICAgICAgICAgMTUgIC8qIENPREVDX1NPRlRTVCAqLworI2RlZmluZSBXTTg0MDBfQ09ERUNfU09GVFNUX1dJRFRIICAgICAgICAgICAgICAgICAgICAxICAvKiBDT0RFQ19TT0ZUU1QgKi8KKyNkZWZpbmUgV004NDAwX0NPREVDX1NPRlRTRCAgICAgICAgICAgICAgICAgICAgIDB4NDAwMCAgLyogQ09ERUNfU09GVFNEICovCisjZGVmaW5lIFdNODQwMF9DT0RFQ19TT0ZUU0RfTUFTSyAgICAgICAgICAgICAgICAweDQwMDAgIC8qIENPREVDX1NPRlRTRCAqLworI2RlZmluZSBXTTg0MDBfQ09ERUNfU09GVFNEX1NISUZUICAgICAgICAgICAgICAgICAgIDE0ICAvKiBDT0RFQ19TT0ZUU0QgKi8KKyNkZWZpbmUgV004NDAwX0NPREVDX1NPRlRTRF9XSURUSCAgICAgICAgICAgICAgICAgICAgMSAgLyogQ09ERUNfU09GVFNEICovCisjZGVmaW5lIFdNODQwMF9DSElQX1NPRlRTRCAgICAgICAgICAgICAgICAgICAgICAweDIwMDAgIC8qIENISVBfU09GVFNEICovCisjZGVmaW5lIFdNODQwMF9DSElQX1NPRlRTRF9NQVNLICAgICAgICAgICAgICAgICAweDIwMDAgIC8qIENISVBfU09GVFNEICovCisjZGVmaW5lIFdNODQwMF9DSElQX1NPRlRTRF9TSElGVCAgICAgICAgICAgICAgICAgICAgMTMgIC8qIENISVBfU09GVFNEICovCisjZGVmaW5lIFdNODQwMF9DSElQX1NPRlRTRF9XSURUSCAgICAgICAgICAgICAgICAgICAgIDEgIC8qIENISVBfU09GVFNEICovCisjZGVmaW5lIFdNODQwMF9EU0xFRVAxX1BPTCAgICAgICAgICAgICAgICAgICAgICAweDAwMDggIC8qIERTTEVFUDFfUE9MICovCisjZGVmaW5lIFdNODQwMF9EU0xFRVAxX1BPTF9NQVNLICAgICAgICAgICAgICAgICAweDAwMDggIC8qIERTTEVFUDFfUE9MICovCisjZGVmaW5lIFdNODQwMF9EU0xFRVAxX1BPTF9TSElGVCAgICAgICAgICAgICAgICAgICAgIDMgIC8qIERTTEVFUDFfUE9MICovCisjZGVmaW5lIFdNODQwMF9EU0xFRVAxX1BPTF9XSURUSCAgICAgICAgICAgICAgICAgICAgIDEgIC8qIERTTEVFUDFfUE9MICovCisjZGVmaW5lIFdNODQwMF9EU0xFRVAyX1BPTCAgICAgICAgICAgICAgICAgICAgICAweDAwMDQgIC8qIERTTEVFUDJfUE9MICovCisjZGVmaW5lIFdNODQwMF9EU0xFRVAyX1BPTF9NQVNLICAgICAgICAgICAgICAgICAweDAwMDQgIC8qIERTTEVFUDJfUE9MICovCisjZGVmaW5lIFdNODQwMF9EU0xFRVAyX1BPTF9TSElGVCAgICAgICAgICAgICAgICAgICAgIDIgIC8qIERTTEVFUDJfUE9MICovCisjZGVmaW5lIFdNODQwMF9EU0xFRVAyX1BPTF9XSURUSCAgICAgICAgICAgICAgICAgICAgIDEgIC8qIERTTEVFUDJfUE9MICovCisjZGVmaW5lIFdNODQwMF9QV1JfU1RBVEVfTUFTSyAgICAgICAgICAgICAgICAgICAweDAwMDMgIC8qIFBXUl9TVEFURSAtIFsxOjBdICovCisjZGVmaW5lIFdNODQwMF9QV1JfU1RBVEVfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIFBXUl9TVEFURSAtIFsxOjBdICovCisjZGVmaW5lIFdNODQwMF9QV1JfU1RBVEVfV0lEVEggICAgICAgICAgICAgICAgICAgICAgIDIgIC8qIFBXUl9TVEFURSAtIFsxOjBdICovCisKKy8qCisgKiBSNzggKDB4NEUpIC0gUE0gU2h1dGRvd24gQ29udHJvbAorICovCisjZGVmaW5lIFdNODQwMF9DSElQX0dUMTUwX0VSUkFDVCAgICAgICAgICAgICAgICAweDAyMDAgIC8qIENISVBfR1QxNTBfRVJSQUNUICovCisjZGVmaW5lIFdNODQwMF9DSElQX0dUMTUwX0VSUkFDVF9NQVNLICAgICAgICAgICAweDAyMDAgIC8qIENISVBfR1QxNTBfRVJSQUNUICovCisjZGVmaW5lIFdNODQwMF9DSElQX0dUMTUwX0VSUkFDVF9TSElGVCAgICAgICAgICAgICAgIDkgIC8qIENISVBfR1QxNTBfRVJSQUNUICovCisjZGVmaW5lIFdNODQwMF9DSElQX0dUMTUwX0VSUkFDVF9XSURUSCAgICAgICAgICAgICAgIDEgIC8qIENISVBfR1QxNTBfRVJSQUNUICovCisjZGVmaW5lIFdNODQwMF9DSElQX0dUMTE1X0VSUkFDVCAgICAgICAgICAgICAgICAweDAxMDAgIC8qIENISVBfR1QxMTVfRVJSQUNUICovCisjZGVmaW5lIFdNODQwMF9DSElQX0dUMTE1X0VSUkFDVF9NQVNLICAgICAgICAgICAweDAxMDAgIC8qIENISVBfR1QxMTVfRVJSQUNUICovCisjZGVmaW5lIFdNODQwMF9DSElQX0dUMTE1X0VSUkFDVF9TSElGVCAgICAgICAgICAgICAgIDggIC8qIENISVBfR1QxMTVfRVJSQUNUICovCisjZGVmaW5lIFdNODQwMF9DSElQX0dUMTE1X0VSUkFDVF9XSURUSCAgICAgICAgICAgICAgIDEgIC8qIENISVBfR1QxMTVfRVJSQUNUICovCisjZGVmaW5lIFdNODQwMF9MSU5FX0NNUF9FUlJBQ1QgICAgICAgICAgICAgICAgICAweDAwODAgIC8qIExJTkVfQ01QX0VSUkFDVCAqLworI2RlZmluZSBXTTg0MDBfTElORV9DTVBfRVJSQUNUX01BU0sgICAgICAgICAgICAgMHgwMDgwICAvKiBMSU5FX0NNUF9FUlJBQ1QgKi8KKyNkZWZpbmUgV004NDAwX0xJTkVfQ01QX0VSUkFDVF9TSElGVCAgICAgICAgICAgICAgICAgNyAgLyogTElORV9DTVBfRVJSQUNUICovCisjZGVmaW5lIFdNODQwMF9MSU5FX0NNUF9FUlJBQ1RfV0lEVEggICAgICAgICAgICAgICAgIDEgIC8qIExJTkVfQ01QX0VSUkFDVCAqLworI2RlZmluZSBXTTg0MDBfVVZMT19FUlJBQ1QgICAgICAgICAgICAgICAgICAgICAgMHgwMDQwICAvKiBVVkxPX0VSUkFDVCAqLworI2RlZmluZSBXTTg0MDBfVVZMT19FUlJBQ1RfTUFTSyAgICAgICAgICAgICAgICAgMHgwMDQwICAvKiBVVkxPX0VSUkFDVCAqLworI2RlZmluZSBXTTg0MDBfVVZMT19FUlJBQ1RfU0hJRlQgICAgICAgICAgICAgICAgICAgICA2ICAvKiBVVkxPX0VSUkFDVCAqLworI2RlZmluZSBXTTg0MDBfVVZMT19FUlJBQ1RfV0lEVEggICAgICAgICAgICAgICAgICAgICAxICAvKiBVVkxPX0VSUkFDVCAqLworCisvKgorICogUjc5ICgweDRGKSAtIEludGVycnVwdCBTdGF0dXMgMQorICovCisjZGVmaW5lIFdNODQwMF9NSUNEX0NJTlQgICAgICAgICAgICAgICAgICAgICAgICAweDgwMDAgIC8qIE1JQ0RfQ0lOVCAqLworI2RlZmluZSBXTTg0MDBfTUlDRF9DSU5UX01BU0sgICAgICAgICAgICAgICAgICAgMHg4MDAwICAvKiBNSUNEX0NJTlQgKi8KKyNkZWZpbmUgV004NDAwX01JQ0RfQ0lOVF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAxNSAgLyogTUlDRF9DSU5UICovCisjZGVmaW5lIFdNODQwMF9NSUNEX0NJTlRfV0lEVEggICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIE1JQ0RfQ0lOVCAqLworI2RlZmluZSBXTTg0MDBfTUlDU0NEX0NJTlQgICAgICAgICAgICAgICAgICAgICAgMHg0MDAwICAvKiBNSUNTQ0RfQ0lOVCAqLworI2RlZmluZSBXTTg0MDBfTUlDU0NEX0NJTlRfTUFTSyAgICAgICAgICAgICAgICAgMHg0MDAwICAvKiBNSUNTQ0RfQ0lOVCAqLworI2RlZmluZSBXTTg0MDBfTUlDU0NEX0NJTlRfU0hJRlQgICAgICAgICAgICAgICAgICAgIDE0ICAvKiBNSUNTQ0RfQ0lOVCAqLworI2RlZmluZSBXTTg0MDBfTUlDU0NEX0NJTlRfV0lEVEggICAgICAgICAgICAgICAgICAgICAxICAvKiBNSUNTQ0RfQ0lOVCAqLworI2RlZmluZSBXTTg0MDBfSkRMX0NJTlQgICAgICAgICAgICAgICAgICAgICAgICAgMHgyMDAwICAvKiBKRExfQ0lOVCAqLworI2RlZmluZSBXTTg0MDBfSkRMX0NJTlRfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgyMDAwICAvKiBKRExfQ0lOVCAqLworI2RlZmluZSBXTTg0MDBfSkRMX0NJTlRfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgIDEzICAvKiBKRExfQ0lOVCAqLworI2RlZmluZSBXTTg0MDBfSkRMX0NJTlRfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBKRExfQ0lOVCAqLworI2RlZmluZSBXTTg0MDBfSkRSX0NJTlQgICAgICAgICAgICAgICAgICAgICAgICAgMHgxMDAwICAvKiBKRFJfQ0lOVCAqLworI2RlZmluZSBXTTg0MDBfSkRSX0NJTlRfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgxMDAwICAvKiBKRFJfQ0lOVCAqLworI2RlZmluZSBXTTg0MDBfSkRSX0NJTlRfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgIDEyICAvKiBKRFJfQ0lOVCAqLworI2RlZmluZSBXTTg0MDBfSkRSX0NJTlRfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBKRFJfQ0lOVCAqLworI2RlZmluZSBXTTg0MDBfQ09ERUNfU0VRX0VORF9FSU5UICAgICAgICAgICAgICAgMHgwODAwICAvKiBDT0RFQ19TRVFfRU5EX0VJTlQgKi8KKyNkZWZpbmUgV004NDAwX0NPREVDX1NFUV9FTkRfRUlOVF9NQVNLICAgICAgICAgIDB4MDgwMCAgLyogQ09ERUNfU0VRX0VORF9FSU5UICovCisjZGVmaW5lIFdNODQwMF9DT0RFQ19TRVFfRU5EX0VJTlRfU0hJRlQgICAgICAgICAgICAgMTEgIC8qIENPREVDX1NFUV9FTkRfRUlOVCAqLworI2RlZmluZSBXTTg0MDBfQ09ERUNfU0VRX0VORF9FSU5UX1dJRFRIICAgICAgICAgICAgICAxICAvKiBDT0RFQ19TRVFfRU5EX0VJTlQgKi8KKyNkZWZpbmUgV004NDAwX0NERUxfVE9fRUlOVCAgICAgICAgICAgICAgICAgICAgIDB4MDQwMCAgLyogQ0RFTF9UT19FSU5UICovCisjZGVmaW5lIFdNODQwMF9DREVMX1RPX0VJTlRfTUFTSyAgICAgICAgICAgICAgICAweDA0MDAgIC8qIENERUxfVE9fRUlOVCAqLworI2RlZmluZSBXTTg0MDBfQ0RFTF9UT19FSU5UX1NISUZUICAgICAgICAgICAgICAgICAgIDEwICAvKiBDREVMX1RPX0VJTlQgKi8KKyNkZWZpbmUgV004NDAwX0NERUxfVE9fRUlOVF9XSURUSCAgICAgICAgICAgICAgICAgICAgMSAgLyogQ0RFTF9UT19FSU5UICovCisjZGVmaW5lIFdNODQwMF9DSElQX0dUMTUwX0VJTlQgICAgICAgICAgICAgICAgICAweDAyMDAgIC8qIENISVBfR1QxNTBfRUlOVCAqLworI2RlZmluZSBXTTg0MDBfQ0hJUF9HVDE1MF9FSU5UX01BU0sgICAgICAgICAgICAgMHgwMjAwICAvKiBDSElQX0dUMTUwX0VJTlQgKi8KKyNkZWZpbmUgV004NDAwX0NISVBfR1QxNTBfRUlOVF9TSElGVCAgICAgICAgICAgICAgICAgOSAgLyogQ0hJUF9HVDE1MF9FSU5UICovCisjZGVmaW5lIFdNODQwMF9DSElQX0dUMTUwX0VJTlRfV0lEVEggICAgICAgICAgICAgICAgIDEgIC8qIENISVBfR1QxNTBfRUlOVCAqLworI2RlZmluZSBXTTg0MDBfQ0hJUF9HVDExNV9FSU5UICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBDSElQX0dUMTE1X0VJTlQgKi8KKyNkZWZpbmUgV004NDAwX0NISVBfR1QxMTVfRUlOVF9NQVNLICAgICAgICAgICAgIDB4MDEwMCAgLyogQ0hJUF9HVDExNV9FSU5UICovCisjZGVmaW5lIFdNODQwMF9DSElQX0dUMTE1X0VJTlRfU0hJRlQgICAgICAgICAgICAgICAgIDggIC8qIENISVBfR1QxMTVfRUlOVCAqLworI2RlZmluZSBXTTg0MDBfQ0hJUF9HVDExNV9FSU5UX1dJRFRIICAgICAgICAgICAgICAgICAxICAvKiBDSElQX0dUMTE1X0VJTlQgKi8KKyNkZWZpbmUgV004NDAwX0xJTkVfQ01QX0VJTlQgICAgICAgICAgICAgICAgICAgIDB4MDA4MCAgLyogTElORV9DTVBfRUlOVCAqLworI2RlZmluZSBXTTg0MDBfTElORV9DTVBfRUlOVF9NQVNLICAgICAgICAgICAgICAgMHgwMDgwICAvKiBMSU5FX0NNUF9FSU5UICovCisjZGVmaW5lIFdNODQwMF9MSU5FX0NNUF9FSU5UX1NISUZUICAgICAgICAgICAgICAgICAgIDcgIC8qIExJTkVfQ01QX0VJTlQgKi8KKyNkZWZpbmUgV004NDAwX0xJTkVfQ01QX0VJTlRfV0lEVEggICAgICAgICAgICAgICAgICAgMSAgLyogTElORV9DTVBfRUlOVCAqLworI2RlZmluZSBXTTg0MDBfVVZMT19FSU5UICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDQwICAvKiBVVkxPX0VJTlQgKi8KKyNkZWZpbmUgV004NDAwX1VWTE9fRUlOVF9NQVNLICAgICAgICAgICAgICAgICAgIDB4MDA0MCAgLyogVVZMT19FSU5UICovCisjZGVmaW5lIFdNODQwMF9VVkxPX0VJTlRfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgIDYgIC8qIFVWTE9fRUlOVCAqLworI2RlZmluZSBXTTg0MDBfVVZMT19FSU5UX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBVVkxPX0VJTlQgKi8KKyNkZWZpbmUgV004NDAwX0RDMl9VVl9FSU5UICAgICAgICAgICAgICAgICAgICAgIDB4MDAyMCAgLyogREMyX1VWX0VJTlQgKi8KKyNkZWZpbmUgV004NDAwX0RDMl9VVl9FSU5UX01BU0sgICAgICAgICAgICAgICAgIDB4MDAyMCAgLyogREMyX1VWX0VJTlQgKi8KKyNkZWZpbmUgV004NDAwX0RDMl9VVl9FSU5UX1NISUZUICAgICAgICAgICAgICAgICAgICAgNSAgLyogREMyX1VWX0VJTlQgKi8KKyNkZWZpbmUgV004NDAwX0RDMl9VVl9FSU5UX1dJRFRIICAgICAgICAgICAgICAgICAgICAgMSAgLyogREMyX1VWX0VJTlQgKi8KKyNkZWZpbmUgV004NDAwX0RDMV9VVl9FSU5UICAgICAgICAgICAgICAgICAgICAgIDB4MDAxMCAgLyogREMxX1VWX0VJTlQgKi8KKyNkZWZpbmUgV004NDAwX0RDMV9VVl9FSU5UX01BU0sgICAgICAgICAgICAgICAgIDB4MDAxMCAgLyogREMxX1VWX0VJTlQgKi8KKyNkZWZpbmUgV004NDAwX0RDMV9VVl9FSU5UX1NISUZUICAgICAgICAgICAgICAgICAgICAgNCAgLyogREMxX1VWX0VJTlQgKi8KKyNkZWZpbmUgV004NDAwX0RDMV9VVl9FSU5UX1dJRFRIICAgICAgICAgICAgICAgICAgICAgMSAgLyogREMxX1VWX0VJTlQgKi8KKyNkZWZpbmUgV004NDAwX0xETzRfVVZfRUlOVCAgICAgICAgICAgICAgICAgICAgIDB4MDAwOCAgLyogTERPNF9VVl9FSU5UICovCisjZGVmaW5lIFdNODQwMF9MRE80X1VWX0VJTlRfTUFTSyAgICAgICAgICAgICAgICAweDAwMDggIC8qIExETzRfVVZfRUlOVCAqLworI2RlZmluZSBXTTg0MDBfTERPNF9VVl9FSU5UX1NISUZUICAgICAgICAgICAgICAgICAgICAzICAvKiBMRE80X1VWX0VJTlQgKi8KKyNkZWZpbmUgV004NDAwX0xETzRfVVZfRUlOVF9XSURUSCAgICAgICAgICAgICAgICAgICAgMSAgLyogTERPNF9VVl9FSU5UICovCisjZGVmaW5lIFdNODQwMF9MRE8zX1VWX0VJTlQgICAgICAgICAgICAgICAgICAgICAweDAwMDQgIC8qIExETzNfVVZfRUlOVCAqLworI2RlZmluZSBXTTg0MDBfTERPM19VVl9FSU5UX01BU0sgICAgICAgICAgICAgICAgMHgwMDA0ICAvKiBMRE8zX1VWX0VJTlQgKi8KKyNkZWZpbmUgV004NDAwX0xETzNfVVZfRUlOVF9TSElGVCAgICAgICAgICAgICAgICAgICAgMiAgLyogTERPM19VVl9FSU5UICovCisjZGVmaW5lIFdNODQwMF9MRE8zX1VWX0VJTlRfV0lEVEggICAgICAgICAgICAgICAgICAgIDEgIC8qIExETzNfVVZfRUlOVCAqLworI2RlZmluZSBXTTg0MDBfTERPMl9VVl9FSU5UICAgICAgICAgICAgICAgICAgICAgMHgwMDAyICAvKiBMRE8yX1VWX0VJTlQgKi8KKyNkZWZpbmUgV004NDAwX0xETzJfVVZfRUlOVF9NQVNLICAgICAgICAgICAgICAgIDB4MDAwMiAgLyogTERPMl9VVl9FSU5UICovCisjZGVmaW5lIFdNODQwMF9MRE8yX1VWX0VJTlRfU0hJRlQgICAgICAgICAgICAgICAgICAgIDEgIC8qIExETzJfVVZfRUlOVCAqLworI2RlZmluZSBXTTg0MDBfTERPMl9VVl9FSU5UX1dJRFRIICAgICAgICAgICAgICAgICAgICAxICAvKiBMRE8yX1VWX0VJTlQgKi8KKyNkZWZpbmUgV004NDAwX0xETzFfVVZfRUlOVCAgICAgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogTERPMV9VVl9FSU5UICovCisjZGVmaW5lIFdNODQwMF9MRE8xX1VWX0VJTlRfTUFTSyAgICAgICAgICAgICAgICAweDAwMDEgIC8qIExETzFfVVZfRUlOVCAqLworI2RlZmluZSBXTTg0MDBfTERPMV9VVl9FSU5UX1NISUZUICAgICAgICAgICAgICAgICAgICAwICAvKiBMRE8xX1VWX0VJTlQgKi8KKyNkZWZpbmUgV004NDAwX0xETzFfVVZfRUlOVF9XSURUSCAgICAgICAgICAgICAgICAgICAgMSAgLyogTERPMV9VVl9FSU5UICovCisKKy8qCisgKiBSODAgKDB4NTApIC0gSW50ZXJydXB0IFN0YXR1cyAxIE1hc2sKKyAqLworI2RlZmluZSBXTTg0MDBfSU1fTUlDRF9DSU5UICAgICAgICAgICAgICAgICAgICAgMHg4MDAwICAvKiBJTV9NSUNEX0NJTlQgKi8KKyNkZWZpbmUgV004NDAwX0lNX01JQ0RfQ0lOVF9NQVNLICAgICAgICAgICAgICAgIDB4ODAwMCAgLyogSU1fTUlDRF9DSU5UICovCisjZGVmaW5lIFdNODQwMF9JTV9NSUNEX0NJTlRfU0hJRlQgICAgICAgICAgICAgICAgICAgMTUgIC8qIElNX01JQ0RfQ0lOVCAqLworI2RlZmluZSBXTTg0MDBfSU1fTUlDRF9DSU5UX1dJRFRIICAgICAgICAgICAgICAgICAgICAxICAvKiBJTV9NSUNEX0NJTlQgKi8KKyNkZWZpbmUgV004NDAwX0lNX01JQ1NDRF9DSU5UICAgICAgICAgICAgICAgICAgIDB4NDAwMCAgLyogSU1fTUlDU0NEX0NJTlQgKi8KKyNkZWZpbmUgV004NDAwX0lNX01JQ1NDRF9DSU5UX01BU0sgICAgICAgICAgICAgIDB4NDAwMCAgLyogSU1fTUlDU0NEX0NJTlQgKi8KKyNkZWZpbmUgV004NDAwX0lNX01JQ1NDRF9DSU5UX1NISUZUICAgICAgICAgICAgICAgICAxNCAgLyogSU1fTUlDU0NEX0NJTlQgKi8KKyNkZWZpbmUgV004NDAwX0lNX01JQ1NDRF9DSU5UX1dJRFRIICAgICAgICAgICAgICAgICAgMSAgLyogSU1fTUlDU0NEX0NJTlQgKi8KKyNkZWZpbmUgV004NDAwX0lNX0pETF9DSU5UICAgICAgICAgICAgICAgICAgICAgIDB4MjAwMCAgLyogSU1fSkRMX0NJTlQgKi8KKyNkZWZpbmUgV004NDAwX0lNX0pETF9DSU5UX01BU0sgICAgICAgICAgICAgICAgIDB4MjAwMCAgLyogSU1fSkRMX0NJTlQgKi8KKyNkZWZpbmUgV004NDAwX0lNX0pETF9DSU5UX1NISUZUICAgICAgICAgICAgICAgICAgICAxMyAgLyogSU1fSkRMX0NJTlQgKi8KKyNkZWZpbmUgV004NDAwX0lNX0pETF9DSU5UX1dJRFRIICAgICAgICAgICAgICAgICAgICAgMSAgLyogSU1fSkRMX0NJTlQgKi8KKyNkZWZpbmUgV004NDAwX0lNX0pEUl9DSU5UICAgICAgICAgICAgICAgICAgICAgIDB4MTAwMCAgLyogSU1fSkRSX0NJTlQgKi8KKyNkZWZpbmUgV004NDAwX0lNX0pEUl9DSU5UX01BU0sgICAgICAgICAgICAgICAgIDB4MTAwMCAgLyogSU1fSkRSX0NJTlQgKi8KKyNkZWZpbmUgV004NDAwX0lNX0pEUl9DSU5UX1NISUZUICAgICAgICAgICAgICAgICAgICAxMiAgLyogSU1fSkRSX0NJTlQgKi8KKyNkZWZpbmUgV004NDAwX0lNX0pEUl9DSU5UX1dJRFRIICAgICAgICAgICAgICAgICAgICAgMSAgLyogSU1fSkRSX0NJTlQgKi8KKyNkZWZpbmUgV004NDAwX0lNX0NPREVDX1NFUV9FTkRfRUlOVCAgICAgICAgICAgIDB4MDgwMCAgLyogSU1fQ09ERUNfU0VRX0VORF9FSU5UICovCisjZGVmaW5lIFdNODQwMF9JTV9DT0RFQ19TRVFfRU5EX0VJTlRfTUFTSyAgICAgICAweDA4MDAgIC8qIElNX0NPREVDX1NFUV9FTkRfRUlOVCAqLworI2RlZmluZSBXTTg0MDBfSU1fQ09ERUNfU0VRX0VORF9FSU5UX1NISUZUICAgICAgICAgIDExICAvKiBJTV9DT0RFQ19TRVFfRU5EX0VJTlQgKi8KKyNkZWZpbmUgV004NDAwX0lNX0NPREVDX1NFUV9FTkRfRUlOVF9XSURUSCAgICAgICAgICAgMSAgLyogSU1fQ09ERUNfU0VRX0VORF9FSU5UICovCisjZGVmaW5lIFdNODQwMF9JTV9DREVMX1RPX0VJTlQgICAgICAgICAgICAgICAgICAweDA0MDAgIC8qIElNX0NERUxfVE9fRUlOVCAqLworI2RlZmluZSBXTTg0MDBfSU1fQ0RFTF9UT19FSU5UX01BU0sgICAgICAgICAgICAgMHgwNDAwICAvKiBJTV9DREVMX1RPX0VJTlQgKi8KKyNkZWZpbmUgV004NDAwX0lNX0NERUxfVE9fRUlOVF9TSElGVCAgICAgICAgICAgICAgICAxMCAgLyogSU1fQ0RFTF9UT19FSU5UICovCisjZGVmaW5lIFdNODQwMF9JTV9DREVMX1RPX0VJTlRfV0lEVEggICAgICAgICAgICAgICAgIDEgIC8qIElNX0NERUxfVE9fRUlOVCAqLworI2RlZmluZSBXTTg0MDBfSU1fQ0hJUF9HVDE1MF9FSU5UICAgICAgICAgICAgICAgMHgwMjAwICAvKiBJTV9DSElQX0dUMTUwX0VJTlQgKi8KKyNkZWZpbmUgV004NDAwX0lNX0NISVBfR1QxNTBfRUlOVF9NQVNLICAgICAgICAgIDB4MDIwMCAgLyogSU1fQ0hJUF9HVDE1MF9FSU5UICovCisjZGVmaW5lIFdNODQwMF9JTV9DSElQX0dUMTUwX0VJTlRfU0hJRlQgICAgICAgICAgICAgIDkgIC8qIElNX0NISVBfR1QxNTBfRUlOVCAqLworI2RlZmluZSBXTTg0MDBfSU1fQ0hJUF9HVDE1MF9FSU5UX1dJRFRIICAgICAgICAgICAgICAxICAvKiBJTV9DSElQX0dUMTUwX0VJTlQgKi8KKyNkZWZpbmUgV004NDAwX0lNX0NISVBfR1QxMTVfRUlOVCAgICAgICAgICAgICAgIDB4MDEwMCAgLyogSU1fQ0hJUF9HVDExNV9FSU5UICovCisjZGVmaW5lIFdNODQwMF9JTV9DSElQX0dUMTE1X0VJTlRfTUFTSyAgICAgICAgICAweDAxMDAgIC8qIElNX0NISVBfR1QxMTVfRUlOVCAqLworI2RlZmluZSBXTTg0MDBfSU1fQ0hJUF9HVDExNV9FSU5UX1NISUZUICAgICAgICAgICAgICA4ICAvKiBJTV9DSElQX0dUMTE1X0VJTlQgKi8KKyNkZWZpbmUgV004NDAwX0lNX0NISVBfR1QxMTVfRUlOVF9XSURUSCAgICAgICAgICAgICAgMSAgLyogSU1fQ0hJUF9HVDExNV9FSU5UICovCisjZGVmaW5lIFdNODQwMF9JTV9MSU5FX0NNUF9FSU5UICAgICAgICAgICAgICAgICAweDAwODAgIC8qIElNX0xJTkVfQ01QX0VJTlQgKi8KKyNkZWZpbmUgV004NDAwX0lNX0xJTkVfQ01QX0VJTlRfTUFTSyAgICAgICAgICAgIDB4MDA4MCAgLyogSU1fTElORV9DTVBfRUlOVCAqLworI2RlZmluZSBXTTg0MDBfSU1fTElORV9DTVBfRUlOVF9TSElGVCAgICAgICAgICAgICAgICA3ICAvKiBJTV9MSU5FX0NNUF9FSU5UICovCisjZGVmaW5lIFdNODQwMF9JTV9MSU5FX0NNUF9FSU5UX1dJRFRIICAgICAgICAgICAgICAgIDEgIC8qIElNX0xJTkVfQ01QX0VJTlQgKi8KKyNkZWZpbmUgV004NDAwX0lNX1VWTE9fRUlOVCAgICAgICAgICAgICAgICAgICAgIDB4MDA0MCAgLyogSU1fVVZMT19FSU5UICovCisjZGVmaW5lIFdNODQwMF9JTV9VVkxPX0VJTlRfTUFTSyAgICAgICAgICAgICAgICAweDAwNDAgIC8qIElNX1VWTE9fRUlOVCAqLworI2RlZmluZSBXTTg0MDBfSU1fVVZMT19FSU5UX1NISUZUICAgICAgICAgICAgICAgICAgICA2ICAvKiBJTV9VVkxPX0VJTlQgKi8KKyNkZWZpbmUgV004NDAwX0lNX1VWTE9fRUlOVF9XSURUSCAgICAgICAgICAgICAgICAgICAgMSAgLyogSU1fVVZMT19FSU5UICovCisjZGVmaW5lIFdNODQwMF9JTV9EQzJfVVZfRUlOVCAgICAgICAgICAgICAgICAgICAweDAwMjAgIC8qIElNX0RDMl9VVl9FSU5UICovCisjZGVmaW5lIFdNODQwMF9JTV9EQzJfVVZfRUlOVF9NQVNLICAgICAgICAgICAgICAweDAwMjAgIC8qIElNX0RDMl9VVl9FSU5UICovCisjZGVmaW5lIFdNODQwMF9JTV9EQzJfVVZfRUlOVF9TSElGVCAgICAgICAgICAgICAgICAgIDUgIC8qIElNX0RDMl9VVl9FSU5UICovCisjZGVmaW5lIFdNODQwMF9JTV9EQzJfVVZfRUlOVF9XSURUSCAgICAgICAgICAgICAgICAgIDEgIC8qIElNX0RDMl9VVl9FSU5UICovCisjZGVmaW5lIFdNODQwMF9JTV9EQzFfVVZfRUlOVCAgICAgICAgICAgICAgICAgICAweDAwMTAgIC8qIElNX0RDMV9VVl9FSU5UICovCisjZGVmaW5lIFdNODQwMF9JTV9EQzFfVVZfRUlOVF9NQVNLICAgICAgICAgICAgICAweDAwMTAgIC8qIElNX0RDMV9VVl9FSU5UICovCisjZGVmaW5lIFdNODQwMF9JTV9EQzFfVVZfRUlOVF9TSElGVCAgICAgICAgICAgICAgICAgIDQgIC8qIElNX0RDMV9VVl9FSU5UICovCisjZGVmaW5lIFdNODQwMF9JTV9EQzFfVVZfRUlOVF9XSURUSCAgICAgICAgICAgICAgICAgIDEgIC8qIElNX0RDMV9VVl9FSU5UICovCisjZGVmaW5lIFdNODQwMF9JTV9MRE80X1VWX0VJTlQgICAgICAgICAgICAgICAgICAweDAwMDggIC8qIElNX0xETzRfVVZfRUlOVCAqLworI2RlZmluZSBXTTg0MDBfSU1fTERPNF9VVl9FSU5UX01BU0sgICAgICAgICAgICAgMHgwMDA4ICAvKiBJTV9MRE80X1VWX0VJTlQgKi8KKyNkZWZpbmUgV004NDAwX0lNX0xETzRfVVZfRUlOVF9TSElGVCAgICAgICAgICAgICAgICAgMyAgLyogSU1fTERPNF9VVl9FSU5UICovCisjZGVmaW5lIFdNODQwMF9JTV9MRE80X1VWX0VJTlRfV0lEVEggICAgICAgICAgICAgICAgIDEgIC8qIElNX0xETzRfVVZfRUlOVCAqLworI2RlZmluZSBXTTg0MDBfSU1fTERPM19VVl9FSU5UICAgICAgICAgICAgICAgICAgMHgwMDA0ICAvKiBJTV9MRE8zX1VWX0VJTlQgKi8KKyNkZWZpbmUgV004NDAwX0lNX0xETzNfVVZfRUlOVF9NQVNLICAgICAgICAgICAgIDB4MDAwNCAgLyogSU1fTERPM19VVl9FSU5UICovCisjZGVmaW5lIFdNODQwMF9JTV9MRE8zX1VWX0VJTlRfU0hJRlQgICAgICAgICAgICAgICAgIDIgIC8qIElNX0xETzNfVVZfRUlOVCAqLworI2RlZmluZSBXTTg0MDBfSU1fTERPM19VVl9FSU5UX1dJRFRIICAgICAgICAgICAgICAgICAxICAvKiBJTV9MRE8zX1VWX0VJTlQgKi8KKyNkZWZpbmUgV004NDAwX0lNX0xETzJfVVZfRUlOVCAgICAgICAgICAgICAgICAgIDB4MDAwMiAgLyogSU1fTERPMl9VVl9FSU5UICovCisjZGVmaW5lIFdNODQwMF9JTV9MRE8yX1VWX0VJTlRfTUFTSyAgICAgICAgICAgICAweDAwMDIgIC8qIElNX0xETzJfVVZfRUlOVCAqLworI2RlZmluZSBXTTg0MDBfSU1fTERPMl9VVl9FSU5UX1NISUZUICAgICAgICAgICAgICAgICAxICAvKiBJTV9MRE8yX1VWX0VJTlQgKi8KKyNkZWZpbmUgV004NDAwX0lNX0xETzJfVVZfRUlOVF9XSURUSCAgICAgICAgICAgICAgICAgMSAgLyogSU1fTERPMl9VVl9FSU5UICovCisjZGVmaW5lIFdNODQwMF9JTV9MRE8xX1VWX0VJTlQgICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIElNX0xETzFfVVZfRUlOVCAqLworI2RlZmluZSBXTTg0MDBfSU1fTERPMV9VVl9FSU5UX01BU0sgICAgICAgICAgICAgMHgwMDAxICAvKiBJTV9MRE8xX1VWX0VJTlQgKi8KKyNkZWZpbmUgV004NDAwX0lNX0xETzFfVVZfRUlOVF9TSElGVCAgICAgICAgICAgICAgICAgMCAgLyogSU1fTERPMV9VVl9FSU5UICovCisjZGVmaW5lIFdNODQwMF9JTV9MRE8xX1VWX0VJTlRfV0lEVEggICAgICAgICAgICAgICAgIDEgIC8qIElNX0xETzFfVVZfRUlOVCAqLworCisvKgorICogUjgxICgweDUxKSAtIEludGVycnVwdCBMZXZlbHMKKyAqLworI2RlZmluZSBXTTg0MDBfTUlDRF9MVkwgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MDAwICAvKiBNSUNEX0xWTCAqLworI2RlZmluZSBXTTg0MDBfTUlDRF9MVkxfTUFTSyAgICAgICAgICAgICAgICAgICAgMHg4MDAwICAvKiBNSUNEX0xWTCAqLworI2RlZmluZSBXTTg0MDBfTUlDRF9MVkxfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgIDE1ICAvKiBNSUNEX0xWTCAqLworI2RlZmluZSBXTTg0MDBfTUlDRF9MVkxfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBNSUNEX0xWTCAqLworI2RlZmluZSBXTTg0MDBfTUlDU0NEX0xWTCAgICAgICAgICAgICAgICAgICAgICAgMHg0MDAwICAvKiBNSUNTQ0RfTFZMICovCisjZGVmaW5lIFdNODQwMF9NSUNTQ0RfTFZMX01BU0sgICAgICAgICAgICAgICAgICAweDQwMDAgIC8qIE1JQ1NDRF9MVkwgKi8KKyNkZWZpbmUgV004NDAwX01JQ1NDRF9MVkxfU0hJRlQgICAgICAgICAgICAgICAgICAgICAxNCAgLyogTUlDU0NEX0xWTCAqLworI2RlZmluZSBXTTg0MDBfTUlDU0NEX0xWTF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAxICAvKiBNSUNTQ0RfTFZMICovCisjZGVmaW5lIFdNODQwMF9KRExfTFZMICAgICAgICAgICAgICAgICAgICAgICAgICAweDIwMDAgIC8qIEpETF9MVkwgKi8KKyNkZWZpbmUgV004NDAwX0pETF9MVkxfTUFTSyAgICAgICAgICAgICAgICAgICAgIDB4MjAwMCAgLyogSkRMX0xWTCAqLworI2RlZmluZSBXTTg0MDBfSkRMX0xWTF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDEzICAvKiBKRExfTFZMICovCisjZGVmaW5lIFdNODQwMF9KRExfTFZMX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEpETF9MVkwgKi8KKyNkZWZpbmUgV004NDAwX0pEUl9MVkwgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTAwMCAgLyogSkRSX0xWTCAqLworI2RlZmluZSBXTTg0MDBfSkRSX0xWTF9NQVNLICAgICAgICAgICAgICAgICAgICAgMHgxMDAwICAvKiBKRFJfTFZMICovCisjZGVmaW5lIFdNODQwMF9KRFJfTFZMX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgMTIgIC8qIEpEUl9MVkwgKi8KKyNkZWZpbmUgV004NDAwX0pEUl9MVkxfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogSkRSX0xWTCAqLworI2RlZmluZSBXTTg0MDBfQ09ERUNfU0VRX0VORF9MVkwgICAgICAgICAgICAgICAgMHgwODAwICAvKiBDT0RFQ19TRVFfRU5EX0xWTCAqLworI2RlZmluZSBXTTg0MDBfQ09ERUNfU0VRX0VORF9MVkxfTUFTSyAgICAgICAgICAgMHgwODAwICAvKiBDT0RFQ19TRVFfRU5EX0xWTCAqLworI2RlZmluZSBXTTg0MDBfQ09ERUNfU0VRX0VORF9MVkxfU0hJRlQgICAgICAgICAgICAgIDExICAvKiBDT0RFQ19TRVFfRU5EX0xWTCAqLworI2RlZmluZSBXTTg0MDBfQ09ERUNfU0VRX0VORF9MVkxfV0lEVEggICAgICAgICAgICAgICAxICAvKiBDT0RFQ19TRVFfRU5EX0xWTCAqLworI2RlZmluZSBXTTg0MDBfQ0RFTF9UT19MVkwgICAgICAgICAgICAgICAgICAgICAgMHgwNDAwICAvKiBDREVMX1RPX0xWTCAqLworI2RlZmluZSBXTTg0MDBfQ0RFTF9UT19MVkxfTUFTSyAgICAgICAgICAgICAgICAgMHgwNDAwICAvKiBDREVMX1RPX0xWTCAqLworI2RlZmluZSBXTTg0MDBfQ0RFTF9UT19MVkxfU0hJRlQgICAgICAgICAgICAgICAgICAgIDEwICAvKiBDREVMX1RPX0xWTCAqLworI2RlZmluZSBXTTg0MDBfQ0RFTF9UT19MVkxfV0lEVEggICAgICAgICAgICAgICAgICAgICAxICAvKiBDREVMX1RPX0xWTCAqLworI2RlZmluZSBXTTg0MDBfQ0hJUF9HVDE1MF9MVkwgICAgICAgICAgICAgICAgICAgMHgwMjAwICAvKiBDSElQX0dUMTUwX0xWTCAqLworI2RlZmluZSBXTTg0MDBfQ0hJUF9HVDE1MF9MVkxfTUFTSyAgICAgICAgICAgICAgMHgwMjAwICAvKiBDSElQX0dUMTUwX0xWTCAqLworI2RlZmluZSBXTTg0MDBfQ0hJUF9HVDE1MF9MVkxfU0hJRlQgICAgICAgICAgICAgICAgICA5ICAvKiBDSElQX0dUMTUwX0xWTCAqLworI2RlZmluZSBXTTg0MDBfQ0hJUF9HVDE1MF9MVkxfV0lEVEggICAgICAgICAgICAgICAgICAxICAvKiBDSElQX0dUMTUwX0xWTCAqLworI2RlZmluZSBXTTg0MDBfQ0hJUF9HVDExNV9MVkwgICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBDSElQX0dUMTE1X0xWTCAqLworI2RlZmluZSBXTTg0MDBfQ0hJUF9HVDExNV9MVkxfTUFTSyAgICAgICAgICAgICAgMHgwMTAwICAvKiBDSElQX0dUMTE1X0xWTCAqLworI2RlZmluZSBXTTg0MDBfQ0hJUF9HVDExNV9MVkxfU0hJRlQgICAgICAgICAgICAgICAgICA4ICAvKiBDSElQX0dUMTE1X0xWTCAqLworI2RlZmluZSBXTTg0MDBfQ0hJUF9HVDExNV9MVkxfV0lEVEggICAgICAgICAgICAgICAgICAxICAvKiBDSElQX0dUMTE1X0xWTCAqLworI2RlZmluZSBXTTg0MDBfTElORV9DTVBfTFZMICAgICAgICAgICAgICAgICAgICAgMHgwMDgwICAvKiBMSU5FX0NNUF9MVkwgKi8KKyNkZWZpbmUgV004NDAwX0xJTkVfQ01QX0xWTF9NQVNLICAgICAgICAgICAgICAgIDB4MDA4MCAgLyogTElORV9DTVBfTFZMICovCisjZGVmaW5lIFdNODQwMF9MSU5FX0NNUF9MVkxfU0hJRlQgICAgICAgICAgICAgICAgICAgIDcgIC8qIExJTkVfQ01QX0xWTCAqLworI2RlZmluZSBXTTg0MDBfTElORV9DTVBfTFZMX1dJRFRIICAgICAgICAgICAgICAgICAgICAxICAvKiBMSU5FX0NNUF9MVkwgKi8KKyNkZWZpbmUgV004NDAwX1VWTE9fTFZMICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA0MCAgLyogVVZMT19MVkwgKi8KKyNkZWZpbmUgV004NDAwX1VWTE9fTFZMX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDA0MCAgLyogVVZMT19MVkwgKi8KKyNkZWZpbmUgV004NDAwX1VWTE9fTFZMX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgNiAgLyogVVZMT19MVkwgKi8KKyNkZWZpbmUgV004NDAwX1VWTE9fTFZMX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogVVZMT19MVkwgKi8KKyNkZWZpbmUgV004NDAwX0RDMl9VVl9MVkwgICAgICAgICAgICAgICAgICAgICAgIDB4MDAyMCAgLyogREMyX1VWX0xWTCAqLworI2RlZmluZSBXTTg0MDBfREMyX1VWX0xWTF9NQVNLICAgICAgICAgICAgICAgICAgMHgwMDIwICAvKiBEQzJfVVZfTFZMICovCisjZGVmaW5lIFdNODQwMF9EQzJfVVZfTFZMX1NISUZUICAgICAgICAgICAgICAgICAgICAgIDUgIC8qIERDMl9VVl9MVkwgKi8KKyNkZWZpbmUgV004NDAwX0RDMl9VVl9MVkxfV0lEVEggICAgICAgICAgICAgICAgICAgICAgMSAgLyogREMyX1VWX0xWTCAqLworI2RlZmluZSBXTTg0MDBfREMxX1VWX0xWTCAgICAgICAgICAgICAgICAgICAgICAgMHgwMDEwICAvKiBEQzFfVVZfTFZMICovCisjZGVmaW5lIFdNODQwMF9EQzFfVVZfTFZMX01BU0sgICAgICAgICAgICAgICAgICAweDAwMTAgIC8qIERDMV9VVl9MVkwgKi8KKyNkZWZpbmUgV004NDAwX0RDMV9VVl9MVkxfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgNCAgLyogREMxX1VWX0xWTCAqLworI2RlZmluZSBXTTg0MDBfREMxX1VWX0xWTF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAxICAvKiBEQzFfVVZfTFZMICovCisjZGVmaW5lIFdNODQwMF9MRE80X1VWX0xWTCAgICAgICAgICAgICAgICAgICAgICAweDAwMDggIC8qIExETzRfVVZfTFZMICovCisjZGVmaW5lIFdNODQwMF9MRE80X1VWX0xWTF9NQVNLICAgICAgICAgICAgICAgICAweDAwMDggIC8qIExETzRfVVZfTFZMICovCisjZGVmaW5lIFdNODQwMF9MRE80X1VWX0xWTF9TSElGVCAgICAgICAgICAgICAgICAgICAgIDMgIC8qIExETzRfVVZfTFZMICovCisjZGVmaW5lIFdNODQwMF9MRE80X1VWX0xWTF9XSURUSCAgICAgICAgICAgICAgICAgICAgIDEgIC8qIExETzRfVVZfTFZMICovCisjZGVmaW5lIFdNODQwMF9MRE8zX1VWX0xWTCAgICAgICAgICAgICAgICAgICAgICAweDAwMDQgIC8qIExETzNfVVZfTFZMICovCisjZGVmaW5lIFdNODQwMF9MRE8zX1VWX0xWTF9NQVNLICAgICAgICAgICAgICAgICAweDAwMDQgIC8qIExETzNfVVZfTFZMICovCisjZGVmaW5lIFdNODQwMF9MRE8zX1VWX0xWTF9TSElGVCAgICAgICAgICAgICAgICAgICAgIDIgIC8qIExETzNfVVZfTFZMICovCisjZGVmaW5lIFdNODQwMF9MRE8zX1VWX0xWTF9XSURUSCAgICAgICAgICAgICAgICAgICAgIDEgIC8qIExETzNfVVZfTFZMICovCisjZGVmaW5lIFdNODQwMF9MRE8yX1VWX0xWTCAgICAgICAgICAgICAgICAgICAgICAweDAwMDIgIC8qIExETzJfVVZfTFZMICovCisjZGVmaW5lIFdNODQwMF9MRE8yX1VWX0xWTF9NQVNLICAgICAgICAgICAgICAgICAweDAwMDIgIC8qIExETzJfVVZfTFZMICovCisjZGVmaW5lIFdNODQwMF9MRE8yX1VWX0xWTF9TSElGVCAgICAgICAgICAgICAgICAgICAgIDEgIC8qIExETzJfVVZfTFZMICovCisjZGVmaW5lIFdNODQwMF9MRE8yX1VWX0xWTF9XSURUSCAgICAgICAgICAgICAgICAgICAgIDEgIC8qIExETzJfVVZfTFZMICovCisjZGVmaW5lIFdNODQwMF9MRE8xX1VWX0xWTCAgICAgICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIExETzFfVVZfTFZMICovCisjZGVmaW5lIFdNODQwMF9MRE8xX1VWX0xWTF9NQVNLICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIExETzFfVVZfTFZMICovCisjZGVmaW5lIFdNODQwMF9MRE8xX1VWX0xWTF9TSElGVCAgICAgICAgICAgICAgICAgICAgIDAgIC8qIExETzFfVVZfTFZMICovCisjZGVmaW5lIFdNODQwMF9MRE8xX1VWX0xWTF9XSURUSCAgICAgICAgICAgICAgICAgICAgIDEgIC8qIExETzFfVVZfTFZMICovCisKKy8qCisgKiBSODIgKDB4NTIpIC0gU2h1dGRvd24gUmVhc29uCisgKi8KKyNkZWZpbmUgV004NDAwX1NEUl9DSElQX1NPRlRTRCAgICAgICAgICAgICAgICAgIDB4MjAwMCAgLyogU0RSX0NISVBfU09GVFNEICovCisjZGVmaW5lIFdNODQwMF9TRFJfQ0hJUF9TT0ZUU0RfTUFTSyAgICAgICAgICAgICAweDIwMDAgIC8qIFNEUl9DSElQX1NPRlRTRCAqLworI2RlZmluZSBXTTg0MDBfU0RSX0NISVBfU09GVFNEX1NISUZUICAgICAgICAgICAgICAgIDEzICAvKiBTRFJfQ0hJUF9TT0ZUU0QgKi8KKyNkZWZpbmUgV004NDAwX1NEUl9DSElQX1NPRlRTRF9XSURUSCAgICAgICAgICAgICAgICAgMSAgLyogU0RSX0NISVBfU09GVFNEICovCisjZGVmaW5lIFdNODQwMF9TRFJfTlBETiAgICAgICAgICAgICAgICAgICAgICAgICAweDA4MDAgIC8qIFNEUl9OUEROICovCisjZGVmaW5lIFdNODQwMF9TRFJfTlBETl9NQVNLICAgICAgICAgICAgICAgICAgICAweDA4MDAgIC8qIFNEUl9OUEROICovCisjZGVmaW5lIFdNODQwMF9TRFJfTlBETl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgMTEgIC8qIFNEUl9OUEROICovCisjZGVmaW5lIFdNODQwMF9TRFJfTlBETl9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIFNEUl9OUEROICovCisjZGVmaW5lIFdNODQwMF9TRFJfQ0hJUF9HVDE1MCAgICAgICAgICAgICAgICAgICAweDAyMDAgIC8qIFNEUl9DSElQX0dUMTUwICovCisjZGVmaW5lIFdNODQwMF9TRFJfQ0hJUF9HVDE1MF9NQVNLICAgICAgICAgICAgICAweDAyMDAgIC8qIFNEUl9DSElQX0dUMTUwICovCisjZGVmaW5lIFdNODQwMF9TRFJfQ0hJUF9HVDE1MF9TSElGVCAgICAgICAgICAgICAgICAgIDkgIC8qIFNEUl9DSElQX0dUMTUwICovCisjZGVmaW5lIFdNODQwMF9TRFJfQ0hJUF9HVDE1MF9XSURUSCAgICAgICAgICAgICAgICAgIDEgIC8qIFNEUl9DSElQX0dUMTUwICovCisjZGVmaW5lIFdNODQwMF9TRFJfQ0hJUF9HVDExNSAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIFNEUl9DSElQX0dUMTE1ICovCisjZGVmaW5lIFdNODQwMF9TRFJfQ0hJUF9HVDExNV9NQVNLICAgICAgICAgICAgICAweDAxMDAgIC8qIFNEUl9DSElQX0dUMTE1ICovCisjZGVmaW5lIFdNODQwMF9TRFJfQ0hJUF9HVDExNV9TSElGVCAgICAgICAgICAgICAgICAgIDggIC8qIFNEUl9DSElQX0dUMTE1ICovCisjZGVmaW5lIFdNODQwMF9TRFJfQ0hJUF9HVDExNV9XSURUSCAgICAgICAgICAgICAgICAgIDEgIC8qIFNEUl9DSElQX0dUMTE1ICovCisjZGVmaW5lIFdNODQwMF9TRFJfTElORV9DTVAgICAgICAgICAgICAgICAgICAgICAweDAwODAgIC8qIFNEUl9MSU5FX0NNUCAqLworI2RlZmluZSBXTTg0MDBfU0RSX0xJTkVfQ01QX01BU0sgICAgICAgICAgICAgICAgMHgwMDgwICAvKiBTRFJfTElORV9DTVAgKi8KKyNkZWZpbmUgV004NDAwX1NEUl9MSU5FX0NNUF9TSElGVCAgICAgICAgICAgICAgICAgICAgNyAgLyogU0RSX0xJTkVfQ01QICovCisjZGVmaW5lIFdNODQwMF9TRFJfTElORV9DTVBfV0lEVEggICAgICAgICAgICAgICAgICAgIDEgIC8qIFNEUl9MSU5FX0NNUCAqLworI2RlZmluZSBXTTg0MDBfU0RSX1VWTE8gICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDQwICAvKiBTRFJfVVZMTyAqLworI2RlZmluZSBXTTg0MDBfU0RSX1VWTE9fTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMDQwICAvKiBTRFJfVVZMTyAqLworI2RlZmluZSBXTTg0MDBfU0RSX1VWTE9fU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICA2ICAvKiBTRFJfVVZMTyAqLworI2RlZmluZSBXTTg0MDBfU0RSX1VWTE9fV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBTRFJfVVZMTyAqLworI2RlZmluZSBXTTg0MDBfU0RSX0RDMl9VViAgICAgICAgICAgICAgICAgICAgICAgMHgwMDIwICAvKiBTRFJfREMyX1VWICovCisjZGVmaW5lIFdNODQwMF9TRFJfREMyX1VWX01BU0sgICAgICAgICAgICAgICAgICAweDAwMjAgIC8qIFNEUl9EQzJfVVYgKi8KKyNkZWZpbmUgV004NDAwX1NEUl9EQzJfVVZfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgNSAgLyogU0RSX0RDMl9VViAqLworI2RlZmluZSBXTTg0MDBfU0RSX0RDMl9VVl9XSURUSCAgICAgICAgICAgICAgICAgICAgICAxICAvKiBTRFJfREMyX1VWICovCisjZGVmaW5lIFdNODQwMF9TRFJfREMxX1VWICAgICAgICAgICAgICAgICAgICAgICAweDAwMTAgIC8qIFNEUl9EQzFfVVYgKi8KKyNkZWZpbmUgV004NDAwX1NEUl9EQzFfVVZfTUFTSyAgICAgICAgICAgICAgICAgIDB4MDAxMCAgLyogU0RSX0RDMV9VViAqLworI2RlZmluZSBXTTg0MDBfU0RSX0RDMV9VVl9TSElGVCAgICAgICAgICAgICAgICAgICAgICA0ICAvKiBTRFJfREMxX1VWICovCisjZGVmaW5lIFdNODQwMF9TRFJfREMxX1VWX1dJRFRIICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIFNEUl9EQzFfVVYgKi8KKyNkZWZpbmUgV004NDAwX1NEUl9MRE80X1VWICAgICAgICAgICAgICAgICAgICAgIDB4MDAwOCAgLyogU0RSX0xETzRfVVYgKi8KKyNkZWZpbmUgV004NDAwX1NEUl9MRE80X1VWX01BU0sgICAgICAgICAgICAgICAgIDB4MDAwOCAgLyogU0RSX0xETzRfVVYgKi8KKyNkZWZpbmUgV004NDAwX1NEUl9MRE80X1VWX1NISUZUICAgICAgICAgICAgICAgICAgICAgMyAgLyogU0RSX0xETzRfVVYgKi8KKyNkZWZpbmUgV004NDAwX1NEUl9MRE80X1VWX1dJRFRIICAgICAgICAgICAgICAgICAgICAgMSAgLyogU0RSX0xETzRfVVYgKi8KKyNkZWZpbmUgV004NDAwX1NEUl9MRE8zX1VWICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNCAgLyogU0RSX0xETzNfVVYgKi8KKyNkZWZpbmUgV004NDAwX1NEUl9MRE8zX1VWX01BU0sgICAgICAgICAgICAgICAgIDB4MDAwNCAgLyogU0RSX0xETzNfVVYgKi8KKyNkZWZpbmUgV004NDAwX1NEUl9MRE8zX1VWX1NISUZUICAgICAgICAgICAgICAgICAgICAgMiAgLyogU0RSX0xETzNfVVYgKi8KKyNkZWZpbmUgV004NDAwX1NEUl9MRE8zX1VWX1dJRFRIICAgICAgICAgICAgICAgICAgICAgMSAgLyogU0RSX0xETzNfVVYgKi8KKyNkZWZpbmUgV004NDAwX1NEUl9MRE8yX1VWICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMiAgLyogU0RSX0xETzJfVVYgKi8KKyNkZWZpbmUgV004NDAwX1NEUl9MRE8yX1VWX01BU0sgICAgICAgICAgICAgICAgIDB4MDAwMiAgLyogU0RSX0xETzJfVVYgKi8KKyNkZWZpbmUgV004NDAwX1NEUl9MRE8yX1VWX1NISUZUICAgICAgICAgICAgICAgICAgICAgMSAgLyogU0RSX0xETzJfVVYgKi8KKyNkZWZpbmUgV004NDAwX1NEUl9MRE8yX1VWX1dJRFRIICAgICAgICAgICAgICAgICAgICAgMSAgLyogU0RSX0xETzJfVVYgKi8KKyNkZWZpbmUgV004NDAwX1NEUl9MRE8xX1VWICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogU0RSX0xETzFfVVYgKi8KKyNkZWZpbmUgV004NDAwX1NEUl9MRE8xX1VWX01BU0sgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogU0RSX0xETzFfVVYgKi8KKyNkZWZpbmUgV004NDAwX1NEUl9MRE8xX1VWX1NISUZUICAgICAgICAgICAgICAgICAgICAgMCAgLyogU0RSX0xETzFfVVYgKi8KKyNkZWZpbmUgV004NDAwX1NEUl9MRE8xX1VWX1dJRFRIICAgICAgICAgICAgICAgICAgICAgMSAgLyogU0RSX0xETzFfVVYgKi8KKworLyoKKyAqIFI4NCAoMHg1NCkgLSBMaW5lIENpcmN1aXRzCisgKi8KKyNkZWZpbmUgV004NDAwX0JHX0xJTkVfQ09NUCAgICAgICAgICAgICAgICAgICAgIDB4ODAwMCAgLyogQkdfTElORV9DT01QICovCisjZGVmaW5lIFdNODQwMF9CR19MSU5FX0NPTVBfTUFTSyAgICAgICAgICAgICAgICAweDgwMDAgIC8qIEJHX0xJTkVfQ09NUCAqLworI2RlZmluZSBXTTg0MDBfQkdfTElORV9DT01QX1NISUZUICAgICAgICAgICAgICAgICAgIDE1ICAvKiBCR19MSU5FX0NPTVAgKi8KKyNkZWZpbmUgV004NDAwX0JHX0xJTkVfQ09NUF9XSURUSCAgICAgICAgICAgICAgICAgICAgMSAgLyogQkdfTElORV9DT01QICovCisjZGVmaW5lIFdNODQwMF9MSU5FX0NNUF9WVEhJX01BU0sgICAgICAgICAgICAgICAweDAwRjAgIC8qIExJTkVfQ01QX1ZUSEkgLSBbNzo0XSAqLworI2RlZmluZSBXTTg0MDBfTElORV9DTVBfVlRISV9TSElGVCAgICAgICAgICAgICAgICAgICA0ICAvKiBMSU5FX0NNUF9WVEhJIC0gWzc6NF0gKi8KKyNkZWZpbmUgV004NDAwX0xJTkVfQ01QX1ZUSElfV0lEVEggICAgICAgICAgICAgICAgICAgNCAgLyogTElORV9DTVBfVlRISSAtIFs3OjRdICovCisjZGVmaW5lIFdNODQwMF9MSU5FX0NNUF9WVEhEX01BU0sgICAgICAgICAgICAgICAweDAwMEYgIC8qIExJTkVfQ01QX1ZUSEQgLSBbMzowXSAqLworI2RlZmluZSBXTTg0MDBfTElORV9DTVBfVlRIRF9TSElGVCAgICAgICAgICAgICAgICAgICAwICAvKiBMSU5FX0NNUF9WVEhEIC0gWzM6MF0gKi8KKyNkZWZpbmUgV004NDAwX0xJTkVfQ01QX1ZUSERfV0lEVEggICAgICAgICAgICAgICAgICAgNCAgLyogTElORV9DTVBfVlRIRCAtIFszOjBdICovCisKK3UxNiB3bTg0MDBfcmVnX3JlYWQoc3RydWN0IHdtODQwMCAqd204NDAwLCB1OCByZWcpOworaW50IHdtODQwMF9ibG9ja19yZWFkKHN0cnVjdCB3bTg0MDAgKndtODQwMCwgdTggcmVnLCBpbnQgY291bnQsIHUxNiAqZGF0YSk7CitpbnQgd204NDAwX3NldF9iaXRzKHN0cnVjdCB3bTg0MDAgKndtODQwMCwgdTggcmVnLCB1MTYgbWFzaywgdTE2IHZhbCk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tZmQvd204NDAwLmggYi9pbmNsdWRlL2xpbnV4L21mZC93bTg0MDAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNDZiNTY2Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9tZmQvd204NDAwLmgKQEAgLTAsMCArMSw0MCBAQAorLyoKKyAqIHdtODQwMCBjbGllbnQgaW50ZXJmYWNlCisgKgorICogQ29weXJpZ2h0IDIwMDggV29sZnNvbiBNaWNyb2VsZWN0cm9uaWNzIHBsYworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKyNpZm5kZWYgX19MSU5VWF9NRkRfV004NDAwX0gKKyNkZWZpbmUgX19MSU5VWF9NRkRfV004NDAwX0gKKworI2luY2x1ZGUgPGxpbnV4L3JlZ3VsYXRvci9tYWNoaW5lLmg+CisKKyNkZWZpbmUgV004NDAwX0xETzEgIDAKKyNkZWZpbmUgV004NDAwX0xETzIgIDEKKyNkZWZpbmUgV004NDAwX0xETzMgIDIKKyNkZWZpbmUgV004NDAwX0xETzQgIDMKKyNkZWZpbmUgV004NDAwX0RDREMxIDQKKyNkZWZpbmUgV004NDAwX0RDREMyIDUKKworc3RydWN0IHdtODQwMF9wbGF0Zm9ybV9kYXRhIHsKKwlpbnQgKCpwbGF0Zm9ybV9pbml0KShzdHJ1Y3QgZGV2aWNlICpkZXYpOworfTsKKworaW50IHdtODQwMF9yZWdpc3Rlcl9yZWd1bGF0b3Ioc3RydWN0IGRldmljZSAqZGV2LCBpbnQgcmVnLAorCQkJICAgICAgc3RydWN0IHJlZ3VsYXRvcl9pbml0X2RhdGEgKmluaXRkYXRhKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21pZ3JhdGUuaCBiL2luY2x1ZGUvbGludXgvbWlncmF0ZS5oCmluZGV4IDAzYWVhNjEuLjNmMzQwMDUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbWlncmF0ZS5oCisrKyBiL2luY2x1ZGUvbGludXgvbWlncmF0ZS5oCkBAIC03LDcgKzcsNiBAQAogdHlwZWRlZiBzdHJ1Y3QgcGFnZSAqbmV3X3BhZ2VfdChzdHJ1Y3QgcGFnZSAqLCB1bnNpZ25lZCBsb25nIHByaXZhdGUsIGludCAqKik7CiAKICNpZmRlZiBDT05GSUdfTUlHUkFUSU9OCi1leHRlcm4gaW50IGlzb2xhdGVfbHJ1X3BhZ2Uoc3RydWN0IHBhZ2UgKnAsIHN0cnVjdCBsaXN0X2hlYWQgKnBhZ2VsaXN0KTsKIGV4dGVybiBpbnQgcHV0YmFja19scnVfcGFnZXMoc3RydWN0IGxpc3RfaGVhZCAqbCk7CiBleHRlcm4gaW50IG1pZ3JhdGVfcGFnZShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqLAogCQkJc3RydWN0IHBhZ2UgKiwgc3RydWN0IHBhZ2UgKik7CkBAIC0yMSw4ICsyMCw2IEBACiAJCWNvbnN0IG5vZGVtYXNrX3QgKmZyb20sIGNvbnN0IG5vZGVtYXNrX3QgKnRvLAogCQl1bnNpZ25lZCBsb25nIGZsYWdzKTsKICNlbHNlCi1zdGF0aWMgaW5saW5lIGludCBpc29sYXRlX2xydV9wYWdlKHN0cnVjdCBwYWdlICpwLCBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0KQotCQkJCQl7IHJldHVybiAtRU5PU1lTOyB9CiBzdGF0aWMgaW5saW5lIGludCBwdXRiYWNrX2xydV9wYWdlcyhzdHJ1Y3QgbGlzdF9oZWFkICpsKSB7IHJldHVybiAwOyB9CiBzdGF0aWMgaW5saW5lIGludCBtaWdyYXRlX3BhZ2VzKHN0cnVjdCBsaXN0X2hlYWQgKmwsIG5ld19wYWdlX3QgeCwKIAkJdW5zaWduZWQgbG9uZyBwcml2YXRlKSB7IHJldHVybiAtRU5PU1lTOyB9CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tLmggYi9pbmNsdWRlL2xpbnV4L21tLmgKaW5kZXggYzYxYmExMC4uZmZlZTJmNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tbS5oCisrKyBiL2luY2x1ZGUvbGludXgvbW0uaApAQCAtMTMyLDYgKzEzMiwxMSBAQAogI2RlZmluZSBWTV9SYW5kb21SZWFkSGludCh2KQkJKCh2KS0+dm1fZmxhZ3MgJiBWTV9SQU5EX1JFQUQpCiAKIC8qCisgKiBzcGVjaWFsIHZtYXMgdGhhdCBhcmUgbm9uLW1lcmdhYmxlLCBub24tbWxvY2soKWFibGUKKyAqLworI2RlZmluZSBWTV9TUEVDSUFMIChWTV9JTyB8IFZNX0RPTlRFWFBBTkQgfCBWTV9SRVNFUlZFRCB8IFZNX1BGTk1BUCkKKworLyoKICAqIG1hcHBpbmcgZnJvbSB0aGUgY3VycmVudGx5IGFjdGl2ZSB2bV9mbGFncyBwcm90ZWN0aW9uIGJpdHMgKHRoZQogICogbG93IGZvdXIgYml0cykgdG8gYSBwYWdlIHByb3RlY3Rpb24gbWFzay4uCiAgKi8KQEAgLTcwMCwxMCArNzA1LDEwIEBACiBleHRlcm4gdm9pZCBzaG93X2ZyZWVfYXJlYXModm9pZCk7CiAKICNpZmRlZiBDT05GSUdfU0hNRU0KLWludCBzaG1lbV9sb2NrKHN0cnVjdCBmaWxlICpmaWxlLCBpbnQgbG9jaywgc3RydWN0IHVzZXJfc3RydWN0ICp1c2VyKTsKK2V4dGVybiBpbnQgc2htZW1fbG9jayhzdHJ1Y3QgZmlsZSAqZmlsZSwgaW50IGxvY2ssIHN0cnVjdCB1c2VyX3N0cnVjdCAqdXNlcik7CiAjZWxzZQogc3RhdGljIGlubGluZSBpbnQgc2htZW1fbG9jayhzdHJ1Y3QgZmlsZSAqZmlsZSwgaW50IGxvY2ssCi0JCQkgICAgIHN0cnVjdCB1c2VyX3N0cnVjdCAqdXNlcikKKwkJCSAgICBzdHJ1Y3QgdXNlcl9zdHJ1Y3QgKnVzZXIpCiB7CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oIGIvaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaAppbmRleCA4OTViYzRlLi5jOTQ4MzUwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oCisrKyBiL2luY2x1ZGUvbGludXgvbW1faW5saW5lLmgKQEAgLTEsNDAgKzEsMTAwIEBACi1zdGF0aWMgaW5saW5lIHZvaWQKLWFkZF9wYWdlX3RvX2FjdGl2ZV9saXN0KHN0cnVjdCB6b25lICp6b25lLCBzdHJ1Y3QgcGFnZSAqcGFnZSkKKyNpZm5kZWYgTElOVVhfTU1fSU5MSU5FX0gKKyNkZWZpbmUgTElOVVhfTU1fSU5MSU5FX0gKKworLyoqCisgKiBwYWdlX2lzX2ZpbGVfY2FjaGUgLSBzaG91bGQgdGhlIHBhZ2UgYmUgb24gYSBmaWxlIExSVSBvciBhbm9uIExSVT8KKyAqIEBwYWdlOiB0aGUgcGFnZSB0byB0ZXN0CisgKgorICogUmV0dXJucyBMUlVfRklMRSBpZiBAcGFnZSBpcyBwYWdlIGNhY2hlIHBhZ2UgYmFja2VkIGJ5IGEgcmVndWxhciBmaWxlc3lzdGVtLAorICogb3IgMCBpZiBAcGFnZSBpcyBhbm9ueW1vdXMsIHRtcGZzIG9yIG90aGVyd2lzZSByYW0gb3Igc3dhcCBiYWNrZWQuCisgKiBVc2VkIGJ5IGZ1bmN0aW9ucyB0aGF0IG1hbmlwdWxhdGUgdGhlIExSVSBsaXN0cywgdG8gc29ydCBhIHBhZ2UKKyAqIG9udG8gdGhlIHJpZ2h0IExSVSBsaXN0LgorICoKKyAqIFdlIHdvdWxkIGxpa2UgdG8gZ2V0IHRoaXMgaW5mbyB3aXRob3V0IGEgcGFnZSBmbGFnLCBidXQgdGhlIHN0YXRlCisgKiBuZWVkcyB0byBzdXJ2aXZlIHVudGlsIHRoZSBwYWdlIGlzIGxhc3QgZGVsZXRlZCBmcm9tIHRoZSBMUlUsIHdoaWNoCisgKiBjb3VsZCBiZSBhcyBmYXIgZG93biBhcyBfX3BhZ2VfY2FjaGVfcmVsZWFzZS4KKyAqLworc3RhdGljIGlubGluZSBpbnQgcGFnZV9pc19maWxlX2NhY2hlKHN0cnVjdCBwYWdlICpwYWdlKQogewotCWxpc3RfYWRkKCZwYWdlLT5scnUsICZ6b25lLT5hY3RpdmVfbGlzdCk7Ci0JX19pbmNfem9uZV9zdGF0ZSh6b25lLCBOUl9BQ1RJVkUpOworCWlmIChQYWdlU3dhcEJhY2tlZChwYWdlKSkKKwkJcmV0dXJuIDA7CisKKwkvKiBUaGUgcGFnZSBpcyBwYWdlIGNhY2hlIGJhY2tlZCBieSBhIG5vcm1hbCBmaWxlc3lzdGVtLiAqLworCXJldHVybiBMUlVfRklMRTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkCi1hZGRfcGFnZV90b19pbmFjdGl2ZV9saXN0KHN0cnVjdCB6b25lICp6b25lLCBzdHJ1Y3QgcGFnZSAqcGFnZSkKK2FkZF9wYWdlX3RvX2xydV9saXN0KHN0cnVjdCB6b25lICp6b25lLCBzdHJ1Y3QgcGFnZSAqcGFnZSwgZW51bSBscnVfbGlzdCBsKQogewotCWxpc3RfYWRkKCZwYWdlLT5scnUsICZ6b25lLT5pbmFjdGl2ZV9saXN0KTsKLQlfX2luY196b25lX3N0YXRlKHpvbmUsIE5SX0lOQUNUSVZFKTsKKwlsaXN0X2FkZCgmcGFnZS0+bHJ1LCAmem9uZS0+bHJ1W2xdLmxpc3QpOworCV9faW5jX3pvbmVfc3RhdGUoem9uZSwgTlJfTFJVX0JBU0UgKyBsKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkCi1kZWxfcGFnZV9mcm9tX2FjdGl2ZV9saXN0KHN0cnVjdCB6b25lICp6b25lLCBzdHJ1Y3QgcGFnZSAqcGFnZSkKK2RlbF9wYWdlX2Zyb21fbHJ1X2xpc3Qoc3RydWN0IHpvbmUgKnpvbmUsIHN0cnVjdCBwYWdlICpwYWdlLCBlbnVtIGxydV9saXN0IGwpCiB7CiAJbGlzdF9kZWwoJnBhZ2UtPmxydSk7Ci0JX19kZWNfem9uZV9zdGF0ZSh6b25lLCBOUl9BQ1RJVkUpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQKLWRlbF9wYWdlX2Zyb21faW5hY3RpdmVfbGlzdChzdHJ1Y3Qgem9uZSAqem9uZSwgc3RydWN0IHBhZ2UgKnBhZ2UpCi17Ci0JbGlzdF9kZWwoJnBhZ2UtPmxydSk7Ci0JX19kZWNfem9uZV9zdGF0ZSh6b25lLCBOUl9JTkFDVElWRSk7CisJX19kZWNfem9uZV9zdGF0ZSh6b25lLCBOUl9MUlVfQkFTRSArIGwpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQKIGRlbF9wYWdlX2Zyb21fbHJ1KHN0cnVjdCB6b25lICp6b25lLCBzdHJ1Y3QgcGFnZSAqcGFnZSkKIHsKKwllbnVtIGxydV9saXN0IGwgPSBMUlVfQkFTRTsKKwogCWxpc3RfZGVsKCZwYWdlLT5scnUpOwotCWlmIChQYWdlQWN0aXZlKHBhZ2UpKSB7Ci0JCV9fQ2xlYXJQYWdlQWN0aXZlKHBhZ2UpOwotCQlfX2RlY196b25lX3N0YXRlKHpvbmUsIE5SX0FDVElWRSk7CisJaWYgKFBhZ2VVbmV2aWN0YWJsZShwYWdlKSkgeworCQlfX0NsZWFyUGFnZVVuZXZpY3RhYmxlKHBhZ2UpOworCQlsID0gTFJVX1VORVZJQ1RBQkxFOwogCX0gZWxzZSB7Ci0JCV9fZGVjX3pvbmVfc3RhdGUoem9uZSwgTlJfSU5BQ1RJVkUpOworCQlpZiAoUGFnZUFjdGl2ZShwYWdlKSkgeworCQkJX19DbGVhclBhZ2VBY3RpdmUocGFnZSk7CisJCQlsICs9IExSVV9BQ1RJVkU7CisJCX0KKwkJbCArPSBwYWdlX2lzX2ZpbGVfY2FjaGUocGFnZSk7CiAJfQorCV9fZGVjX3pvbmVfc3RhdGUoem9uZSwgTlJfTFJVX0JBU0UgKyBsKTsKIH0KIAorLyoqCisgKiBwYWdlX2xydSAtIHdoaWNoIExSVSBsaXN0IHNob3VsZCBhIHBhZ2UgYmUgb24/CisgKiBAcGFnZTogdGhlIHBhZ2UgdG8gdGVzdAorICoKKyAqIFJldHVybnMgdGhlIExSVSBsaXN0IGEgcGFnZSBzaG91bGQgYmUgb24sIGFzIGFuIGluZGV4CisgKiBpbnRvIHRoZSBhcnJheSBvZiBMUlUgbGlzdHMuCisgKi8KK3N0YXRpYyBpbmxpbmUgZW51bSBscnVfbGlzdCBwYWdlX2xydShzdHJ1Y3QgcGFnZSAqcGFnZSkKK3sKKwllbnVtIGxydV9saXN0IGxydSA9IExSVV9CQVNFOworCisJaWYgKFBhZ2VVbmV2aWN0YWJsZShwYWdlKSkKKwkJbHJ1ID0gTFJVX1VORVZJQ1RBQkxFOworCWVsc2UgeworCQlpZiAoUGFnZUFjdGl2ZShwYWdlKSkKKwkJCWxydSArPSBMUlVfQUNUSVZFOworCQlscnUgKz0gcGFnZV9pc19maWxlX2NhY2hlKHBhZ2UpOworCX0KKworCXJldHVybiBscnU7Cit9CisKKy8qKgorICogaW5hY3RpdmVfYW5vbl9pc19sb3cgLSBjaGVjayBpZiBhbm9ueW1vdXMgcGFnZXMgbmVlZCB0byBiZSBkZWFjdGl2YXRlZAorICogQHpvbmU6IHpvbmUgdG8gY2hlY2sKKyAqCisgKiBSZXR1cm5zIHRydWUgaWYgdGhlIHpvbmUgZG9lcyBub3QgaGF2ZSBlbm91Z2ggaW5hY3RpdmUgYW5vbiBwYWdlcywKKyAqIG1lYW5pbmcgc29tZSBhY3RpdmUgYW5vbiBwYWdlcyBuZWVkIHRvIGJlIGRlYWN0aXZhdGVkLgorICovCitzdGF0aWMgaW5saW5lIGludCBpbmFjdGl2ZV9hbm9uX2lzX2xvdyhzdHJ1Y3Qgem9uZSAqem9uZSkKK3sKKwl1bnNpZ25lZCBsb25nIGFjdGl2ZSwgaW5hY3RpdmU7CisKKwlhY3RpdmUgPSB6b25lX3BhZ2Vfc3RhdGUoem9uZSwgTlJfQUNUSVZFX0FOT04pOworCWluYWN0aXZlID0gem9uZV9wYWdlX3N0YXRlKHpvbmUsIE5SX0lOQUNUSVZFX0FOT04pOworCisJaWYgKGluYWN0aXZlICogem9uZS0+aW5hY3RpdmVfcmF0aW8gPCBhY3RpdmUpCisJCXJldHVybiAxOworCisJcmV0dXJuIDA7Cit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW1fdHlwZXMuaCBiL2luY2x1ZGUvbGludXgvbW1fdHlwZXMuaAppbmRleCA5ZDQ5ZmEzLi5mZTgyNTQ3MSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tbV90eXBlcy5oCisrKyBiL2luY2x1ZGUvbGludXgvbW1fdHlwZXMuaApAQCAtOTQsOSArOTQsNiBAQAogCXZvaWQgKnZpcnR1YWw7CQkJLyogS2VybmVsIHZpcnR1YWwgYWRkcmVzcyAoTlVMTCBpZgogCQkJCQkgICBub3Qga21hcHBlZCwgaWUuIGhpZ2htZW0pICovCiAjZW5kaWYgLyogV0FOVF9QQUdFX1ZJUlRVQUwgKi8KLSNpZmRlZiBDT05GSUdfQ0dST1VQX01FTV9SRVNfQ1RMUgotCXVuc2lnbmVkIGxvbmcgcGFnZV9jZ3JvdXA7Ci0jZW5kaWYKIH07CiAKIC8qCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tem9uZS5oIGIvaW5jbHVkZS9saW51eC9tbXpvbmUuaAppbmRleCA0MjgzMjhhLi4zNWE3YjVlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21tem9uZS5oCisrKyBiL2luY2x1ZGUvbGludXgvbW16b25lLmgKQEAgLTgxLDIxICs4MSwzMSBAQAogZW51bSB6b25lX3N0YXRfaXRlbSB7CiAJLyogRmlyc3QgMTI4IGJ5dGUgY2FjaGVsaW5lIChhc3N1bWluZyA2NCBiaXQgd29yZHMpICovCiAJTlJfRlJFRV9QQUdFUywKLQlOUl9JTkFDVElWRSwKLQlOUl9BQ1RJVkUsCisJTlJfTFJVX0JBU0UsCisJTlJfSU5BQ1RJVkVfQU5PTiA9IE5SX0xSVV9CQVNFLCAvKiBtdXN0IG1hdGNoIG9yZGVyIG9mIExSVV9bSU5dQUNUSVZFICovCisJTlJfQUNUSVZFX0FOT04sCQkvKiAgIiAgICAgIiAgICAgIiAgICIgICAgICAgIiAgICAgICAgICovCisJTlJfSU5BQ1RJVkVfRklMRSwJLyogICIgICAgICIgICAgICIgICAiICAgICAgICIgICAgICAgICAqLworCU5SX0FDVElWRV9GSUxFLAkJLyogICIgICAgICIgICAgICIgICAiICAgICAgICIgICAgICAgICAqLworI2lmZGVmIENPTkZJR19VTkVWSUNUQUJMRV9MUlUKKwlOUl9VTkVWSUNUQUJMRSwJCS8qICAiICAgICAiICAgICAiICAgIiAgICAgICAiICAgICAgICAgKi8KKwlOUl9NTE9DSywJCS8qIG1sb2NrKCllZCBwYWdlcyBmb3VuZCBhbmQgbW92ZWQgb2ZmIExSVSAqLworI2Vsc2UKKwlOUl9VTkVWSUNUQUJMRSA9IE5SX0FDVElWRV9GSUxFLCAvKiBhdm9pZCBjb21waWxlciBlcnJvcnMgaW4gZGVhZCBjb2RlICovCisJTlJfTUxPQ0sgPSBOUl9BQ1RJVkVfRklMRSwKKyNlbmRpZgogCU5SX0FOT05fUEFHRVMsCS8qIE1hcHBlZCBhbm9ueW1vdXMgcGFnZXMgKi8KIAlOUl9GSUxFX01BUFBFRCwJLyogcGFnZWNhY2hlIHBhZ2VzIG1hcHBlZCBpbnRvIHBhZ2V0YWJsZXMuCiAJCQkgICBvbmx5IG1vZGlmaWVkIGZyb20gcHJvY2VzcyBjb250ZXh0ICovCiAJTlJfRklMRV9QQUdFUywKIAlOUl9GSUxFX0RJUlRZLAogCU5SX1dSSVRFQkFDSywKLQkvKiBTZWNvbmQgMTI4IGJ5dGUgY2FjaGVsaW5lICovCiAJTlJfU0xBQl9SRUNMQUlNQUJMRSwKIAlOUl9TTEFCX1VOUkVDTEFJTUFCTEUsCiAJTlJfUEFHRVRBQkxFLAkJLyogdXNlZCBmb3IgcGFnZXRhYmxlcyAqLwogCU5SX1VOU1RBQkxFX05GUywJLyogTkZTIHVuc3RhYmxlIHBhZ2VzICovCiAJTlJfQk9VTkNFLAogCU5SX1ZNU0NBTl9XUklURSwKKwkvKiBTZWNvbmQgMTI4IGJ5dGUgY2FjaGVsaW5lICovCiAJTlJfV1JJVEVCQUNLX1RFTVAsCS8qIFdyaXRlYmFjayB1c2luZyB0ZW1wb3JhcnkgYnVmZmVycyAqLwogI2lmZGVmIENPTkZJR19OVU1BCiAJTlVNQV9ISVQsCQkvKiBhbGxvY2F0ZWQgaW4gaW50ZW5kZWQgbm9kZSAqLwpAQCAtMTA3LDYgKzExNyw1NSBAQAogI2VuZGlmCiAJTlJfVk1fWk9ORV9TVEFUX0lURU1TIH07CiAKKy8qCisgKiBXZSBkbyBhcml0aG1ldGljIG9uIHRoZSBMUlUgbGlzdHMgaW4gdmFyaW91cyBwbGFjZXMgaW4gdGhlIGNvZGUsCisgKiBzbyBpdCBpcyBpbXBvcnRhbnQgdG8ga2VlcCB0aGUgYWN0aXZlIGxpc3RzIExSVV9BQ1RJVkUgaGlnaGVyIGluCisgKiB0aGUgYXJyYXkgdGhhbiB0aGUgY29ycmVzcG9uZGluZyBpbmFjdGl2ZSBsaXN0cywgYW5kIHRvIGtlZXAKKyAqIHRoZSAqX0ZJTEUgbGlzdHMgTFJVX0ZJTEUgaGlnaGVyIHRoYW4gdGhlIGNvcnJlc3BvbmRpbmcgX0FOT04gbGlzdHMuCisgKgorICogVGhpcyBoYXMgdG8gYmUga2VwdCBpbiBzeW5jIHdpdGggdGhlIHN0YXRpc3RpY3MgaW4gem9uZV9zdGF0X2l0ZW0KKyAqIGFib3ZlIGFuZCB0aGUgZGVzY3JpcHRpb25zIGluIHZtc3RhdF90ZXh0IGluIG1tL3Ztc3RhdC5jCisgKi8KKyNkZWZpbmUgTFJVX0JBU0UgMAorI2RlZmluZSBMUlVfQUNUSVZFIDEKKyNkZWZpbmUgTFJVX0ZJTEUgMgorCitlbnVtIGxydV9saXN0IHsKKwlMUlVfSU5BQ1RJVkVfQU5PTiA9IExSVV9CQVNFLAorCUxSVV9BQ1RJVkVfQU5PTiA9IExSVV9CQVNFICsgTFJVX0FDVElWRSwKKwlMUlVfSU5BQ1RJVkVfRklMRSA9IExSVV9CQVNFICsgTFJVX0ZJTEUsCisJTFJVX0FDVElWRV9GSUxFID0gTFJVX0JBU0UgKyBMUlVfRklMRSArIExSVV9BQ1RJVkUsCisjaWZkZWYgQ09ORklHX1VORVZJQ1RBQkxFX0xSVQorCUxSVV9VTkVWSUNUQUJMRSwKKyNlbHNlCisJTFJVX1VORVZJQ1RBQkxFID0gTFJVX0FDVElWRV9GSUxFLCAvKiBhdm9pZCBjb21waWxlciBlcnJvcnMgaW4gZGVhZCBjb2RlICovCisjZW5kaWYKKwlOUl9MUlVfTElTVFMKK307CisKKyNkZWZpbmUgZm9yX2VhY2hfbHJ1KGwpIGZvciAobCA9IDA7IGwgPCBOUl9MUlVfTElTVFM7IGwrKykKKworI2RlZmluZSBmb3JfZWFjaF9ldmljdGFibGVfbHJ1KGwpIGZvciAobCA9IDA7IGwgPD0gTFJVX0FDVElWRV9GSUxFOyBsKyspCisKK3N0YXRpYyBpbmxpbmUgaW50IGlzX2ZpbGVfbHJ1KGVudW0gbHJ1X2xpc3QgbCkKK3sKKwlyZXR1cm4gKGwgPT0gTFJVX0lOQUNUSVZFX0ZJTEUgfHwgbCA9PSBMUlVfQUNUSVZFX0ZJTEUpOworfQorCitzdGF0aWMgaW5saW5lIGludCBpc19hY3RpdmVfbHJ1KGVudW0gbHJ1X2xpc3QgbCkKK3sKKwlyZXR1cm4gKGwgPT0gTFJVX0FDVElWRV9BTk9OIHx8IGwgPT0gTFJVX0FDVElWRV9GSUxFKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgaXNfdW5ldmljdGFibGVfbHJ1KGVudW0gbHJ1X2xpc3QgbCkKK3sKKyNpZmRlZiBDT05GSUdfVU5FVklDVEFCTEVfTFJVCisJcmV0dXJuIChsID09IExSVV9VTkVWSUNUQUJMRSk7CisjZWxzZQorCXJldHVybiAwOworI2VuZGlmCit9CisKIHN0cnVjdCBwZXJfY3B1X3BhZ2VzIHsKIAlpbnQgY291bnQ7CQkvKiBudW1iZXIgb2YgcGFnZXMgaW4gdGhlIGxpc3QgKi8KIAlpbnQgaGlnaDsJCS8qIGhpZ2ggd2F0ZXJtYXJrLCBlbXB0eWluZyBuZWVkZWQgKi8KQEAgLTI1MSwxMCArMzEwLDIyIEBACiAKIAkvKiBGaWVsZHMgY29tbW9ubHkgYWNjZXNzZWQgYnkgdGhlIHBhZ2UgcmVjbGFpbSBzY2FubmVyICovCiAJc3BpbmxvY2tfdAkJbHJ1X2xvY2s7CQotCXN0cnVjdCBsaXN0X2hlYWQJYWN0aXZlX2xpc3Q7Ci0Jc3RydWN0IGxpc3RfaGVhZAlpbmFjdGl2ZV9saXN0OwotCXVuc2lnbmVkIGxvbmcJCW5yX3NjYW5fYWN0aXZlOwotCXVuc2lnbmVkIGxvbmcJCW5yX3NjYW5faW5hY3RpdmU7CisJc3RydWN0IHsKKwkJc3RydWN0IGxpc3RfaGVhZCBsaXN0OworCQl1bnNpZ25lZCBsb25nIG5yX3NjYW47CisJfSBscnVbTlJfTFJVX0xJU1RTXTsKKworCS8qCisJICogVGhlIHBhZ2VvdXQgY29kZSBpbiB2bXNjYW4uYyBrZWVwcyB0cmFjayBvZiBob3cgbWFueSBvZiB0aGUKKwkgKiBtZW0vc3dhcCBiYWNrZWQgYW5kIGZpbGUgYmFja2VkIHBhZ2VzIGFyZSByZWZlZmVyZW5jZWQuCisJICogVGhlIGhpZ2hlciB0aGUgcm90YXRlZC9zY2FubmVkIHJhdGlvLCB0aGUgbW9yZSB2YWx1YWJsZQorCSAqIHRoYXQgY2FjaGUgaXMuCisJICoKKwkgKiBUaGUgYW5vbiBMUlUgc3RhdHMgbGl2ZSBpbiBbMF0sIGZpbGUgTFJVIHN0YXRzIGluIFsxXQorCSAqLworCXVuc2lnbmVkIGxvbmcJCXJlY2VudF9yb3RhdGVkWzJdOworCXVuc2lnbmVkIGxvbmcJCXJlY2VudF9zY2FubmVkWzJdOworCiAJdW5zaWduZWQgbG9uZwkJcGFnZXNfc2Nhbm5lZDsJICAgLyogc2luY2UgbGFzdCByZWNsYWltICovCiAJdW5zaWduZWQgbG9uZwkJZmxhZ3M7CQkgICAvKiB6b25lIGZsYWdzLCBzZWUgYmVsb3cgKi8KIApAQCAtMjc2LDYgKzM0NywxMiBAQAogCSAqLwogCWludCBwcmV2X3ByaW9yaXR5OwogCisJLyoKKwkgKiBUaGUgdGFyZ2V0IHJhdGlvIG9mIEFDVElWRV9BTk9OIHRvIElOQUNUSVZFX0FOT04gcGFnZXMgb24KKwkgKiB0aGlzIHpvbmUncyBMUlUuICBNYWludGFpbmVkIGJ5IHRoZSBwYWdlb3V0IGNvZGUuCisJICovCisJdW5zaWduZWQgaW50IGluYWN0aXZlX3JhdGlvOworCiAKIAlaT05FX1BBRERJTkcoX3BhZDJfKQogCS8qIFJhcmVseSB1c2VkIG9yIHJlYWQtbW9zdGx5IGZpZWxkcyAqLwpAQCAtNTI0LDggKzYwMSwxMSBAQAogCXN0cnVjdCB6b25lIG5vZGVfem9uZXNbTUFYX05SX1pPTkVTXTsKIAlzdHJ1Y3Qgem9uZWxpc3Qgbm9kZV96b25lbGlzdHNbTUFYX1pPTkVMSVNUU107CiAJaW50IG5yX3pvbmVzOwotI2lmZGVmIENPTkZJR19GTEFUX05PREVfTUVNX01BUAorI2lmZGVmIENPTkZJR19GTEFUX05PREVfTUVNX01BUAkvKiBtZWFucyAhU1BBUlNFTUVNICovCiAJc3RydWN0IHBhZ2UgKm5vZGVfbWVtX21hcDsKKyNpZmRlZiBDT05GSUdfQ0dST1VQX01FTV9SRVNfQ1RMUgorCXN0cnVjdCBwYWdlX2Nncm91cCAqbm9kZV9wYWdlX2Nncm91cDsKKyNlbmRpZgogI2VuZGlmCiAJc3RydWN0IGJvb3RtZW1fZGF0YSAqYmRhdGE7CiAjaWZkZWYgQ09ORklHX01FTU9SWV9IT1RQTFVHCkBAIC04NTQsNiArOTM0LDcgQEAKICNlbmRpZgogCiBzdHJ1Y3QgcGFnZTsKK3N0cnVjdCBwYWdlX2Nncm91cDsKIHN0cnVjdCBtZW1fc2VjdGlvbiB7CiAJLyoKIAkgKiBUaGlzIGlzLCBsb2dpY2FsbHksIGEgcG9pbnRlciB0byBhbiBhcnJheSBvZiBzdHJ1Y3QKQEAgLTg3MSw2ICs5NTIsMTQgQEAKIAogCS8qIFNlZSBkZWNsYXJhdGlvbiBvZiBzaW1pbGFyIGZpZWxkIGluIHN0cnVjdCB6b25lICovCiAJdW5zaWduZWQgbG9uZyAqcGFnZWJsb2NrX2ZsYWdzOworI2lmZGVmIENPTkZJR19DR1JPVVBfTUVNX1JFU19DVExSCisJLyoKKwkgKiBJZiAhU1BBUlNFTUVNLCBwZ2RhdCBkb2Vzbid0IGhhdmUgcGFnZV9jZ3JvdXAgcG9pbnRlci4gV2UgdXNlCisJICogc2VjdGlvbi4gKHNlZSBtZW1jb250cm9sLmgvcGFnZV9jZ3JvdXAuaCBhYm91dCB0aGlzLikKKwkgKi8KKwlzdHJ1Y3QgcGFnZV9jZ3JvdXAgKnBhZ2VfY2dyb3VwOworCXVuc2lnbmVkIGxvbmcgcGFkOworI2VuZGlmCiB9OwogCiAjaWZkZWYgQ09ORklHX1NQQVJTRU1FTV9FWFRSRU1FCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21vZF9kZXZpY2V0YWJsZS5oIGIvaW5jbHVkZS9saW51eC9tb2RfZGV2aWNldGFibGUuaAppbmRleCBjNGRiNTgyLi5lYjcxYjQ1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21vZF9kZXZpY2V0YWJsZS5oCisrKyBiL2luY2x1ZGUvbGludXgvbW9kX2RldmljZXRhYmxlLmgKQEAgLTEzMSw2ICsxMzEsMTYgQEAKICNkZWZpbmUgVVNCX0RFVklDRV9JRF9NQVRDSF9JTlRfU1VCQ0xBU1MJMHgwMTAwCiAjZGVmaW5lIFVTQl9ERVZJQ0VfSURfTUFUQ0hfSU5UX1BST1RPQ09MCTB4MDIwMAogCisjZGVmaW5lIEhJRF9BTllfSUQJCQkJKH4wKQorCitzdHJ1Y3QgaGlkX2RldmljZV9pZCB7CisJX191MTYgYnVzOworCV9fdTMyIHZlbmRvcjsKKwlfX3UzMiBwcm9kdWN0OworCWtlcm5lbF91bG9uZ190IGRyaXZlcl9kYXRhCisJCV9fYXR0cmlidXRlX18oKGFsaWduZWQoc2l6ZW9mKGtlcm5lbF91bG9uZ190KSkpKTsKK307CisKIC8qIHMzOTAgQ0NXIGRldmljZXMgKi8KIHN0cnVjdCBjY3dfZGV2aWNlX2lkIHsKIAlfX3UxNgltYXRjaF9mbGFnczsJLyogd2hpY2ggZmllbGRzIHRvIG1hdGNoIGFnYWluc3QgKi8KQEAgLTI3NCw3ICsyODQsNyBAQAogLyogSW5wdXQgKi8KICNkZWZpbmUgSU5QVVRfREVWSUNFX0lEX0VWX01BWAkJMHgxZgogI2RlZmluZSBJTlBVVF9ERVZJQ0VfSURfS0VZX01JTl9JTlRFUkVTVElORwkweDcxCi0jZGVmaW5lIElOUFVUX0RFVklDRV9JRF9LRVlfTUFYCQkweDFmZgorI2RlZmluZSBJTlBVVF9ERVZJQ0VfSURfS0VZX01BWAkJMHgyZmYKICNkZWZpbmUgSU5QVVRfREVWSUNFX0lEX1JFTF9NQVgJCTB4MGYKICNkZWZpbmUgSU5QVVRfREVWSUNFX0lEX0FCU19NQVgJCTB4M2YKICNkZWZpbmUgSU5QVVRfREVWSUNFX0lEX01TQ19NQVgJCTB4MDcKQEAgLTM4OCw1ICszOTgsNTIgQEAKIAkJCV9fYXR0cmlidXRlX18oKGFsaWduZWQoc2l6ZW9mKGtlcm5lbF91bG9uZ190KSkpKTsKIH07CiAKKy8qIGRtaSAqLworZW51bSBkbWlfZmllbGQgeworCURNSV9OT05FLAorCURNSV9CSU9TX1ZFTkRPUiwKKwlETUlfQklPU19WRVJTSU9OLAorCURNSV9CSU9TX0RBVEUsCisJRE1JX1NZU19WRU5ET1IsCisJRE1JX1BST0RVQ1RfTkFNRSwKKwlETUlfUFJPRFVDVF9WRVJTSU9OLAorCURNSV9QUk9EVUNUX1NFUklBTCwKKwlETUlfUFJPRFVDVF9VVUlELAorCURNSV9CT0FSRF9WRU5ET1IsCisJRE1JX0JPQVJEX05BTUUsCisJRE1JX0JPQVJEX1ZFUlNJT04sCisJRE1JX0JPQVJEX1NFUklBTCwKKwlETUlfQk9BUkRfQVNTRVRfVEFHLAorCURNSV9DSEFTU0lTX1ZFTkRPUiwKKwlETUlfQ0hBU1NJU19UWVBFLAorCURNSV9DSEFTU0lTX1ZFUlNJT04sCisJRE1JX0NIQVNTSVNfU0VSSUFMLAorCURNSV9DSEFTU0lTX0FTU0VUX1RBRywKKwlETUlfU1RSSU5HX01BWCwKK307CisKK3N0cnVjdCBkbWlfc3RybWF0Y2ggeworCXVuc2lnbmVkIGNoYXIgc2xvdDsKKwljaGFyIHN1YnN0cls3OV07Cit9OworCisjaWZuZGVmIF9fS0VSTkVMX18KK3N0cnVjdCBkbWlfc3lzdGVtX2lkIHsKKwlrZXJuZWxfdWxvbmdfdCBjYWxsYmFjazsKKwlrZXJuZWxfdWxvbmdfdCBpZGVudDsKKwlzdHJ1Y3QgZG1pX3N0cm1hdGNoIG1hdGNoZXNbNF07CisJa2VybmVsX3Vsb25nX3QgZHJpdmVyX2RhdGEKKwkJCV9fYXR0cmlidXRlX18oKGFsaWduZWQoc2l6ZW9mKGtlcm5lbF91bG9uZ190KSkpKTsKK307CisjZWxzZQorc3RydWN0IGRtaV9zeXN0ZW1faWQgeworCWludCAoKmNhbGxiYWNrKShjb25zdCBzdHJ1Y3QgZG1pX3N5c3RlbV9pZCAqKTsKKwljb25zdCBjaGFyICppZGVudDsKKwlzdHJ1Y3QgZG1pX3N0cm1hdGNoIG1hdGNoZXNbNF07CisJdm9pZCAqZHJpdmVyX2RhdGE7Cit9OworI2VuZGlmCisKKyNkZWZpbmUgRE1JX01BVENIKGEsIGIpCXsgYSwgYiB9CiAKICNlbmRpZiAvKiBMSU5VWF9NT0RfREVWSUNFVEFCTEVfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tb2R1bGUuaCBiL2luY2x1ZGUvbGludXgvbW9kdWxlLmgKaW5kZXggNjhlMDk1NS4uYTQxNTU1YyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tb2R1bGUuaAorKysgYi9pbmNsdWRlL2xpbnV4L21vZHVsZS5oCkBAIC0zNDUsNyArMzQ1LDYgQEAKIAkvKiBSZWZlcmVuY2UgY291bnRzICovCiAJc3RydWN0IG1vZHVsZV9yZWYgcmVmW05SX0NQVVNdOwogI2VuZGlmCi0KIH07CiAjaWZuZGVmIE1PRFVMRV9BUkNIX0lOSVQKICNkZWZpbmUgTU9EVUxFX0FSQ0hfSU5JVCB7fQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tb3VudC5oIGIvaW5jbHVkZS9saW51eC9tb3VudC5oCmluZGV4IDMwYTFkNjMuLmNhYjJhODUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbW91bnQuaAorKysgYi9pbmNsdWRlL2xpbnV4L21vdW50LmgKQEAgLTUsOCArNSw2IEBACiAgKgogICogQXV0aG9yOiAgTWFyY28gdmFuIFdpZXJpbmdlbiA8bXZ3QHBsYW5ldHMuZWxtLm5ldD4KICAqCi0gKiBWZXJzaW9uOiAkSWQ6IG1vdW50LmgsdiAyLjAgMTk5Ni8xMS8xNyAxNjo0ODoxNCBtdncgRXhwIG12dyAkCi0gKgogICovCiAjaWZuZGVmIF9MSU5VWF9NT1VOVF9ICiAjZGVmaW5lIF9MSU5VWF9NT1VOVF9ICmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L210ZC9jZmkuaCBiL2luY2x1ZGUvbGludXgvbXRkL2NmaS5oCmluZGV4IGQ2ZmIxMTUuLmVlNTEyNGVjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L210ZC9jZmkuaAorKysgYi9pbmNsdWRlL2xpbnV4L210ZC9jZmkuaApAQCAtMTIsNiArMTIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L210ZC9mbGFzaGNoaXAuaD4KICNpbmNsdWRlIDxsaW51eC9tdGQvbWFwLmg+CiAjaW5jbHVkZSA8bGludXgvbXRkL2NmaV9lbmRpYW4uaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQveGlwLmg+CiAKICNpZmRlZiBDT05GSUdfTVREX0NGSV9JMQogI2RlZmluZSBjZmlfaW50ZXJsZWF2ZShjZmkpIDEKQEAgLTQzMCw3ICs0MzEsNiBAQAogewogCW1hcF93b3JkIHZhbDsKIAl1aW50MzJfdCBhZGRyID0gYmFzZSArIGNmaV9idWlsZF9jbWRfYWRkcihjbWRfYWRkciwgY2ZpX2ludGVybGVhdmUoY2ZpKSwgdHlwZSk7Ci0KIAl2YWwgPSBjZmlfYnVpbGRfY21kKGNtZCwgbWFwLCBjZmkpOwogCiAJaWYgKHByZXZfdmFsKQpAQCAtNDgzLDYgKzQ4MywxMyBAQAogCX0KIH0KIAoraW50IF9feGlwcmFtIGNmaV9xcnlfcHJlc2VudChzdHJ1Y3QgbWFwX2luZm8gKm1hcCwgX191MzIgYmFzZSwKKwkJCSAgICAgc3RydWN0IGNmaV9wcml2YXRlICpjZmkpOworaW50IF9feGlwcmFtIGNmaV9xcnlfbW9kZV9vbih1aW50MzJfdCBiYXNlLCBzdHJ1Y3QgbWFwX2luZm8gKm1hcCwKKwkJCSAgICAgc3RydWN0IGNmaV9wcml2YXRlICpjZmkpOwordm9pZCBfX3hpcHJhbSBjZmlfcXJ5X21vZGVfb2ZmKHVpbnQzMl90IGJhc2UsIHN0cnVjdCBtYXBfaW5mbyAqbWFwLAorCQkJICAgICAgIHN0cnVjdCBjZmlfcHJpdmF0ZSAqY2ZpKTsKKwogc3RydWN0IGNmaV9leHRxdWVyeSAqY2ZpX3JlYWRfcHJpKHN0cnVjdCBtYXBfaW5mbyAqbWFwLCB1aW50MTZfdCBhZHIsIHVpbnQxNl90IHNpemUsCiAJCQkgICAgIGNvbnN0IGNoYXIqIG5hbWUpOwogc3RydWN0IGNmaV9maXh1cCB7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L210ZC9mbGFzaGNoaXAuaCBiL2luY2x1ZGUvbGludXgvbXRkL2ZsYXNoY2hpcC5oCmluZGV4IDA4ZGQxMzEuLmQ0ZjM4YzUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbXRkL2ZsYXNoY2hpcC5oCisrKyBiL2luY2x1ZGUvbGludXgvbXRkL2ZsYXNoY2hpcC5oCkBAIC03Myw2ICs3MywxMCBAQAogCWludCBidWZmZXJfd3JpdGVfdGltZTsKIAlpbnQgZXJhc2VfdGltZTsKIAorCWludCB3b3JkX3dyaXRlX3RpbWVfbWF4OworCWludCBidWZmZXJfd3JpdGVfdGltZV9tYXg7CisJaW50IGVyYXNlX3RpbWVfbWF4OworCiAJdm9pZCAqcHJpdjsKIH07CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbXRkL210ZC5oIGIvaW5jbHVkZS9saW51eC9tdGQvbXRkLmgKaW5kZXggOTIyNjM2NS4uZWFlMjZiYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tdGQvbXRkLmgKKysrIGIvaW5jbHVkZS9saW51eC9tdGQvbXRkLmgKQEAgLTI1LDggKzI1LDEwIEBACiAjZGVmaW5lIE1URF9FUkFTRV9ET05FICAgICAgICAgIDB4MDgKICNkZWZpbmUgTVREX0VSQVNFX0ZBSUxFRCAgICAgICAgMHgxMAogCisjZGVmaW5lIE1URF9GQUlMX0FERFJfVU5LTk9XTiAweGZmZmZmZmZmCisKIC8qIElmIHRoZSBlcmFzZSBmYWlscywgZmFpbF9hZGRyIG1pZ2h0IGluZGljYXRlIGV4YWN0bHkgd2hpY2ggYmxvY2sgZmFpbGVkLiAgSWYKLSAgIGZhaWxfYWRkciA9IDB4ZmZmZmZmZmYsIHRoZSBmYWlsdXJlIHdhcyBub3QgYXQgdGhlIGRldmljZSBsZXZlbCBvciB3YXMgbm90CisgICBmYWlsX2FkZHIgPSBNVERfRkFJTF9BRERSX1VOS05PV04sIHRoZSBmYWlsdXJlIHdhcyBub3QgYXQgdGhlIGRldmljZSBsZXZlbCBvciB3YXMgbm90CiAgICBzcGVjaWZpYyB0byBhbnkgcGFydGljdWxhciBibG9jay4gKi8KIHN0cnVjdCBlcmFzZV9pbmZvIHsKIAlzdHJ1Y3QgbXRkX2luZm8gKm10ZDsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbXRkL25hbmQtZ3Bpby5oIGIvaW5jbHVkZS9saW51eC9tdGQvbmFuZC1ncGlvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTE1MzRlNQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvbXRkL25hbmQtZ3Bpby5oCkBAIC0wLDAgKzEsMTkgQEAKKyNpZm5kZWYgX19MSU5VWF9NVERfTkFORF9HUElPX0gKKyNkZWZpbmUgX19MSU5VWF9NVERfTkFORF9HUElPX0gKKworI2luY2x1ZGUgPGxpbnV4L210ZC9uYW5kLmg+CisKK3N0cnVjdCBncGlvX25hbmRfcGxhdGRhdGEgeworCWludAlncGlvX25jZTsKKwlpbnQJZ3Bpb19ud3A7CisJaW50CWdwaW9fY2xlOworCWludAlncGlvX2FsZTsKKwlpbnQJZ3Bpb19yZHk7CisJdm9pZAkoKmFkanVzdF9wYXJ0cykoc3RydWN0IGdwaW9fbmFuZF9wbGF0ZGF0YSAqLCBzaXplX3QpOworCXN0cnVjdCBtdGRfcGFydGl0aW9uICpwYXJ0czsKKwl1bnNpZ25lZCBpbnQgbnVtX3BhcnRzOworCXVuc2lnbmVkIGludCBvcHRpb25zOworCWludAljaGlwX2RlbGF5OworfTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L210ZC9uYW5kLmggYi9pbmNsdWRlL2xpbnV4L210ZC9uYW5kLmgKaW5kZXggODE3NzRlNS4uNzMzZDNmMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tdGQvbmFuZC5oCisrKyBiL2luY2x1ZGUvbGludXgvbXRkL25hbmQuaApAQCAtMjQ4LDYgKzI0OCw3IEBACiAgKiBAcmVhZF9wYWdlX3JhdzoJZnVuY3Rpb24gdG8gcmVhZCBhIHJhdyBwYWdlIHdpdGhvdXQgRUNDCiAgKiBAd3JpdGVfcGFnZV9yYXc6CWZ1bmN0aW9uIHRvIHdyaXRlIGEgcmF3IHBhZ2Ugd2l0aG91dCBFQ0MKICAqIEByZWFkX3BhZ2U6CWZ1bmN0aW9uIHRvIHJlYWQgYSBwYWdlIGFjY29yZGluZyB0byB0aGUgZWNjIGdlbmVyYXRvciByZXF1aXJlbWVudHMKKyAqIEByZWFkX3N1YnBhZ2U6CWZ1bmN0aW9uIHRvIHJlYWQgcGFydHMgb2YgdGhlIHBhZ2UgY292ZXJlZCBieSBFQ0MuCiAgKiBAd3JpdGVfcGFnZToJZnVuY3Rpb24gdG8gd3JpdGUgYSBwYWdlIGFjY29yZGluZyB0byB0aGUgZWNjIGdlbmVyYXRvciByZXF1aXJlbWVudHMKICAqIEByZWFkX29vYjoJZnVuY3Rpb24gdG8gcmVhZCBjaGlwIE9PQiBkYXRhCiAgKiBAd3JpdGVfb29iOglmdW5jdGlvbiB0byB3cml0ZSBjaGlwIE9PQiBkYXRhCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L210ZC9vbmVuYW5kX3JlZ3MuaCBiL2luY2x1ZGUvbGludXgvbXRkL29uZW5hbmRfcmVncy5oCmluZGV4IGQxYjMxMGMuLjBjNmJiZTIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbXRkL29uZW5hbmRfcmVncy5oCisrKyBiL2luY2x1ZGUvbGludXgvbXRkL29uZW5hbmRfcmVncy5oCkBAIC0xNTIsNiArMTUyLDggQEAKICNkZWZpbmUgT05FTkFORF9TWVNfQ0ZHMV9JTlQJCSgxIDw8IDYpCiAjZGVmaW5lIE9ORU5BTkRfU1lTX0NGRzFfSU9CRQkJKDEgPDwgNSkKICNkZWZpbmUgT05FTkFORF9TWVNfQ0ZHMV9SRFlfQ09ORgkoMSA8PCA0KQorI2RlZmluZSBPTkVOQU5EX1NZU19DRkcxX0hGCQkoMSA8PCAyKQorI2RlZmluZSBPTkVOQU5EX1NZU19DRkcxX1NZTkNfV1JJVEUJKDEgPDwgMSkKIAogLyoKICAqIENvbnRyb2xsZXIgU3RhdHVzIFJlZ2lzdGVyIEYyNDBoIChSKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tdGQvcGFydGl0aW9ucy5oIGIvaW5jbHVkZS9saW51eC9tdGQvcGFydGl0aW9ucy5oCmluZGV4IDUwMTRmN2EuLmM5MmI0ZDQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbXRkL3BhcnRpdGlvbnMuaAorKysgYi9pbmNsdWRlL2xpbnV4L210ZC9wYXJ0aXRpb25zLmgKQEAgLTczLDcgKzczLDYgQEAKIHN0cnVjdCBkZXZpY2Vfbm9kZTsKIAogaW50IF9fZGV2aW5pdCBvZl9tdGRfcGFyc2VfcGFydGl0aW9ucyhzdHJ1Y3QgZGV2aWNlICpkZXYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBtdGRfaW5mbyAqbXRkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBtdGRfcGFydGl0aW9uICoqcHBhcnRzKTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tdGQvc2hfZmxjdGwuaCBiL2luY2x1ZGUvbGludXgvbXRkL3NoX2ZsY3RsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTc3YzFjZQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvbXRkL3NoX2ZsY3RsLmgKQEAgLTAsMCArMSwxMjUgQEAKKy8qCisgKiBTdXBlckggRkxDVEwgbmFuZCBjb250cm9sbGVyCisgKgorICogQ29weXJpZ2h0IMKpIDIwMDggUmVuZXNhcyBTb2x1dGlvbnMgQ29ycC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZS4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjaWZuZGVmIF9fU0hfRkxDVExfSF9fCisjZGVmaW5lIF9fU0hfRkxDVExfSF9fCisKKyNpbmNsdWRlIDxsaW51eC9tdGQvbXRkLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL25hbmQuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvcGFydGl0aW9ucy5oPgorCisvKiBGTENUTCByZWdpc3RlcnMgKi8KKyNkZWZpbmUgRkxDTU5DUihmKQkJKGYtPnJlZyArIDB4MCkKKyNkZWZpbmUgRkxDTURDUihmKQkJKGYtPnJlZyArIDB4NCkKKyNkZWZpbmUgRkxDTUNEUihmKQkJKGYtPnJlZyArIDB4OCkKKyNkZWZpbmUgRkxBRFIoZikJCShmLT5yZWcgKyAweEMpCisjZGVmaW5lIEZMQURSMihmKQkJKGYtPnJlZyArIDB4M0MpCisjZGVmaW5lIEZMREFUQVIoZikJCShmLT5yZWcgKyAweDEwKQorI2RlZmluZSBGTERUQ05UUihmKQkJKGYtPnJlZyArIDB4MTQpCisjZGVmaW5lIEZMSU5URE1BQ1IoZikJCShmLT5yZWcgKyAweDE4KQorI2RlZmluZSBGTEJTWVRNUihmKQkJKGYtPnJlZyArIDB4MUMpCisjZGVmaW5lIEZMQlNZQ05UKGYpCQkoZi0+cmVnICsgMHgyMCkKKyNkZWZpbmUgRkxEVEZJRk8oZikJCShmLT5yZWcgKyAweDI0KQorI2RlZmluZSBGTEVDRklGTyhmKQkJKGYtPnJlZyArIDB4MjgpCisjZGVmaW5lIEZMVFJDUihmKQkJKGYtPnJlZyArIDB4MkMpCisjZGVmaW5lCUZMNEVDQ1JFU1VMVDAoZikJKGYtPnJlZyArIDB4ODApCisjZGVmaW5lCUZMNEVDQ1JFU1VMVDEoZikJKGYtPnJlZyArIDB4ODQpCisjZGVmaW5lCUZMNEVDQ1JFU1VMVDIoZikJKGYtPnJlZyArIDB4ODgpCisjZGVmaW5lCUZMNEVDQ1JFU1VMVDMoZikJKGYtPnJlZyArIDB4OEMpCisjZGVmaW5lCUZMNEVDQ0NSKGYpCQkoZi0+cmVnICsgMHg5MCkKKyNkZWZpbmUJRkw0RUNDQ05UKGYpCQkoZi0+cmVnICsgMHg5NCkKKyNkZWZpbmUJRkxFUlJBRFIoZikJCShmLT5yZWcgKyAweDk4KQorCisvKiBGTENNTkNSIGNvbnRyb2wgYml0cyAqLworI2RlZmluZSBFQ0NQT1MyCQkoMHgxIDw8IDI1KQorI2RlZmluZSBfNEVDQ0NOVEVOCSgweDEgPDwgMjQpCisjZGVmaW5lIF80RUNDRU4JCSgweDEgPDwgMjMpCisjZGVmaW5lIF80RUNDQ09SUkVDVAkoMHgxIDw8IDIyKQorI2RlZmluZSBTTkFORF9FCQkoMHgxIDw8IDE4KQkvKiBTTkFORCAoMD01MTIgMT0yMDQ4KSovCisjZGVmaW5lIFFUU0VMX0UJCSgweDEgPDwgMTcpCisjZGVmaW5lIEVORElBTgkJKDB4MSA8PCAxNikJLyogMSA9IGxpdHRsZSBlbmRpYW4gKi8KKyNkZWZpbmUgRkNLU0VMX0UJKDB4MSA8PCAxNSkKKyNkZWZpbmUgRUNDUE9TXzAwCSgweDAwIDw8IDEyKQorI2RlZmluZSBFQ0NQT1NfMDEJKDB4MDEgPDwgMTIpCisjZGVmaW5lIEVDQ1BPU18wMgkoMHgwMiA8PCAxMikKKyNkZWZpbmUgQUNNX1NBQ0NFU19NT0RFCSgweDAxIDw8IDEwKQorI2RlZmluZSBOQU5XRl9FCQkoMHgxIDw8IDkpCisjZGVmaW5lIFNFX0QJCSgweDEgPDwgOCkJLyogU3BhcmUgYXJlYSBkaXNhYmxlICovCisjZGVmaW5lCUNFMV9FTkFCTEUJKDB4MSA8PCA0KQkvKiBDaGlwIEVuYWJsZSAxICovCisjZGVmaW5lCUNFMF9FTkFCTEUJKDB4MSA8PCAzKQkvKiBDaGlwIEVuYWJsZSAwICovCisjZGVmaW5lCVRZUEVTRUxfU0VUCSgweDEgPDwgMCkKKworLyogRkxDTURDUiBjb250cm9sIGJpdHMgKi8KKyNkZWZpbmUgQURSQ05UMl9FCSgweDEgPDwgMzEpCS8qIDVieXRlIGFkZHJlc3MgZW5hYmxlICovCisjZGVmaW5lIEFEUk1EX0UJCSgweDEgPDwgMjYpCS8qIFNlY3RvciBhZGRyZXNzIGFjY2VzcyAqLworI2RlZmluZSBDRFNSQ19FCQkoMHgxIDw8IDI1KQkvKiBEYXRhIGJ1ZmZlciBzZWxlY3Rpb24gKi8KKyNkZWZpbmUgRE9TUl9FCQkoMHgxIDw8IDI0KQkvKiBTdGF0dXMgcmVhZCBjaGVjayAqLworI2RlZmluZSBTRUxSVwkJKDB4MSA8PCAyMSkJLyogIDA6cmVhZCAxOndyaXRlICovCisjZGVmaW5lIERPQURSX0UJCSgweDEgPDwgMjApCS8qIEFkZHJlc3Mgc3RhZ2UgZXhlY3V0ZSAqLworI2RlZmluZSBBRFJDTlRfMQkoMHgwMCA8PCAxOCkJLyogQWRkcmVzcyBkYXRhIGJ5dGVzOiAxYnl0ZSAqLworI2RlZmluZSBBRFJDTlRfMgkoMHgwMSA8PCAxOCkJLyogQWRkcmVzcyBkYXRhIGJ5dGVzOiAyYnl0ZSAqLworI2RlZmluZSBBRFJDTlRfMwkoMHgwMiA8PCAxOCkJLyogQWRkcmVzcyBkYXRhIGJ5dGVzOiAzYnl0ZSAqLworI2RlZmluZSBBRFJDTlRfNAkoMHgwMyA8PCAxOCkJLyogQWRkcmVzcyBkYXRhIGJ5dGVzOiA0Ynl0ZSAqLworI2RlZmluZSBET0NNRDJfRQkoMHgxIDw8IDE3KQkvKiAybmQgY21kIHN0YWdlIGV4ZWN1dGUgKi8KKyNkZWZpbmUgRE9DTUQxX0UJKDB4MSA8PCAxNikJLyogMXN0IGNtZCBzdGFnZSBleGVjdXRlICovCisKKy8qIEZMVFJDUiBjb250cm9sIGJpdHMgKi8KKyNkZWZpbmUgVFJTVFJUCQkoMHgxIDw8IDApCS8qIHRyYW5zbGF0aW9uIHN0YXJ0ICovCisjZGVmaW5lIFRSRU5ECQkoMHgxIDw8IDEpCS8qIHRyYW5zbGF0aW9uIGVuZCAqLworCisvKiBGTDRFQ0NDUiBjb250cm9sIGJpdHMgKi8KKyNkZWZpbmUJXzRFQ0NGQQkJKDB4MSA8PCAyKQkvKiA0IHN5bWJvbHMgY29ycmVjdCBmYXVsdCAqLworI2RlZmluZQlfNEVDQ0VORAkoMHgxIDw8IDEpCS8qIDQgc3ltYm9scyBlbmQgKi8KKyNkZWZpbmUJXzRFQ0NFWFNUCSgweDEgPDwgMCkJLyogNCBzeW1ib2xzIGV4aXN0ICovCisKKyNkZWZpbmUgSU5JVF9GTDRFQ0NSRVNVTFRfVkFMCTB4MDNGRjAzRkYKKyNkZWZpbmUgTE9PUF9USU1FT1VUX01BWAkweDAwMDEwMDAwCisKKyNkZWZpbmUgbXRkX3RvX2ZsY3RsKG10ZCkJY29udGFpbmVyX29mKG10ZCwgc3RydWN0IHNoX2ZsY3RsLCBtdGQpCisKK3N0cnVjdCBzaF9mbGN0bCB7CisJc3RydWN0IG10ZF9pbmZvCQltdGQ7CisJc3RydWN0IG5hbmRfY2hpcAljaGlwOworCXZvaWQgX19pb21lbQkJKnJlZzsKKworCXVpbnQ4X3QJZG9uZV9idWZmWzIwNDggKyA2NF07CS8qIG1heCBzaXplIDIwNDggKyA2NCAqLworCWludAlyZWFkX2J5dGVzOworCWludAlpbmRleDsKKwlpbnQJc2VxaW5fY29sdW1uOwkJLyogY29sdW1uIGluIFNFUUlOIGNtZCAqLworCWludAlzZXFpbl9wYWdlX2FkZHI7CS8qIHBhZ2VfYWRkciBpbiBTRVFJTiBjbWQgKi8KKwl1aW50MzJfdCBzZXFpbl9yZWFkX2NtZDsJCS8qIHJlYWQgY21kIGluIFNFUUlOIGNtZCAqLworCWludAllcmFzZTFfcGFnZV9hZGRyOwkvKiBwYWdlX2FkZHIgaW4gRVJBU0UxIGNtZCAqLworCXVpbnQzMl90IGVyYXNlX0FEUkNOVDsJCS8qIGJpdHMgb2YgRkxDTURDUiBpbiBFUkFTRTEgY21kICovCisJdWludDMyX3QgcndfQURSQ05UOwkvKiBiaXRzIG9mIEZMQ01EQ1IgaW4gUkVBRCBXUklURSBjbWQgKi8KKworCWludAlod2VjY19jYW50X2NvcnJlY3RbNF07CisKKwl1bnNpZ25lZCBwYWdlX3NpemU6MTsJLyogTkFORCBwYWdlIHNpemUgKDAgPSA1MTIsIDEgPSAyMDQ4KSAqLworCXVuc2lnbmVkIGh3ZWNjOjE7CS8qIEhhcmR3YXJlIEVDQyAoMCA9IGRpc2FibGVkLCAxID0gZW5hYmxlZCkgKi8KK307CisKK3N0cnVjdCBzaF9mbGN0bF9wbGF0Zm9ybV9kYXRhIHsKKwlzdHJ1Y3QgbXRkX3BhcnRpdGlvbgkqcGFydHM7CisJaW50CQkJbnJfcGFydHM7CisJdW5zaWduZWQgbG9uZwkJZmxjbW5jcl92YWw7CisKKwl1bnNpZ25lZCBoYXNfaHdlY2M6MTsKK307CisKKyNlbmRpZgkvKiBfX1NIX0ZMQ1RMX0hfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaCBiL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgKaW5kZXggZDNlYTNkZS4uNjQ4NzU4NSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oCkBAIC0xMSw3ICsxMSw3IEBACiAgKgkJRnJlZCBOLiB2YW4gS2VtcGVuLCA8d2FsdGplQHVXYWx0Lk5MLk11Z25ldC5PUkc+CiAgKgkJQ29yZXkgTWlueWFyZCA8d2YtcmNoIW1pbnlhcmRAcmVsYXkuRVUubmV0PgogICoJCURvbmFsZCBKLiBCZWNrZXIsIDxiZWNrZXJAY2VzZGlzLmdzZmMubmFzYS5nb3Y+Ci0gKgkJQWxhbiBDb3gsIDxBbGFuLkNveEBsaW51eC5vcmc+CisgKgkJQWxhbiBDb3gsIDxhbGFuQGx4b3JndWsudWt1dS5vcmcudWs+CiAgKgkJQmpvcm4gRWt3YWxsLiA8Ymowcm5AYmxveC5zZT4KICAqICAgICAgICAgICAgICBQZWtrYSBSaWlrb25lbiA8cHJpaWtvbmVAcG9zZWlkb24ucHNwdC5maT4KICAqCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZm5ldGxpbmsuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mbmV0bGluay5oCmluZGV4IDBkODQyNGY3Li43ZDhlMDQ1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZm5ldGxpbmsuaAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZm5ldGxpbmsuaApAQCAtNzgsNiArNzgsOSBAQAogCQkJICBpbnQgZWNobyk7CiBleHRlcm4gaW50IG5mbmV0bGlua191bmljYXN0KHN0cnVjdCBza19idWZmICpza2IsIHVfaW50MzJfdCBwaWQsIGludCBmbGFncyk7CiAKK2V4dGVybiB2b2lkIG5mbmxfbG9jayh2b2lkKTsKK2V4dGVybiB2b2lkIG5mbmxfdW5sb2NrKHZvaWQpOworCiAjZGVmaW5lIE1PRFVMRV9BTElBU19ORk5MX1NVQlNZUyhzdWJzeXMpIFwKIAlNT0RVTEVfQUxJQVMoIm5mbmV0bGluay1zdWJzeXMtIiBfX3N0cmluZ2lmeShzdWJzeXMpKQogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25mc19mcy5oIGIvaW5jbHVkZS9saW51eC9uZnNfZnMuaAppbmRleCA3OGE1OTIyLi40ZWFhODM0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25mc19mcy5oCisrKyBiL2luY2x1ZGUvbGludXgvbmZzX2ZzLmgKQEAgLTEzNyw3ICsxMzcsNyBAQAogCXVuc2lnbmVkIGxvbmcJCWF0dHJ0aW1lb190aW1lc3RhbXA7CiAJX191NjQJCQljaGFuZ2VfYXR0cjsJCS8qIHY0IG9ubHkgKi8KIAotCXVuc2lnbmVkIGxvbmcJCWxhc3RfdXBkYXRlZDsKKwl1bnNpZ25lZCBsb25nCQlhdHRyX2dlbmNvdW50OwogCS8qICJHZW5lcmF0aW9uIGNvdW50ZXIiIGZvciB0aGUgYXR0cmlidXRlIGNhY2hlLiBUaGlzIGlzCiAJICogYnVtcGVkIHdoZW5ldmVyIHdlIHVwZGF0ZSB0aGUgbWV0YWRhdGEgb24gdGhlCiAJICogc2VydmVyLgpAQCAtMjAwLDExICsyMDAsMTAgQEAKIC8qCiAgKiBCaXQgb2Zmc2V0cyBpbiBmbGFncyBmaWVsZAogICovCi0jZGVmaW5lIE5GU19JTk9fUkVWQUxJREFUSU5HCSgwKQkJLyogcmV2YWxpZGF0aW5nIGF0dHJzICovCi0jZGVmaW5lIE5GU19JTk9fQURWSVNFX1JEUExVUwkoMSkJCS8qIGFkdmlzZSByZWFkZGlycGx1cyAqLwotI2RlZmluZSBORlNfSU5PX1NUQUxFCQkoMikJCS8qIHBvc3NpYmxlIHN0YWxlIGlub2RlICovCi0jZGVmaW5lIE5GU19JTk9fQUNMX0xSVV9TRVQJKDMpCQkvKiBJbm9kZSBpcyBvbiB0aGUgTFJVIGxpc3QgKi8KLSNkZWZpbmUgTkZTX0lOT19NT1VOVFBPSU5UCSg0KQkJLyogaW5vZGUgaXMgcmVtb3RlIG1vdW50cG9pbnQgKi8KKyNkZWZpbmUgTkZTX0lOT19BRFZJU0VfUkRQTFVTCSgwKQkJLyogYWR2aXNlIHJlYWRkaXJwbHVzICovCisjZGVmaW5lIE5GU19JTk9fU1RBTEUJCSgxKQkJLyogcG9zc2libGUgc3RhbGUgaW5vZGUgKi8KKyNkZWZpbmUgTkZTX0lOT19BQ0xfTFJVX1NFVAkoMikJCS8qIElub2RlIGlzIG9uIHRoZSBMUlUgbGlzdCAqLworI2RlZmluZSBORlNfSU5PX01PVU5UUE9JTlQJKDMpCQkvKiBpbm9kZSBpcyByZW1vdGUgbW91bnRwb2ludCAqLwogCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBuZnNfaW5vZGUgKk5GU19JKGNvbnN0IHN0cnVjdCBpbm9kZSAqaW5vZGUpCiB7CkBAIC0zNDUsMTUgKzM0NCwxMSBAQAogZXh0ZXJuIHZvaWQgcHV0X25mc19vcGVuX2NvbnRleHQoc3RydWN0IG5mc19vcGVuX2NvbnRleHQgKmN0eCk7CiBleHRlcm4gc3RydWN0IG5mc19vcGVuX2NvbnRleHQgKm5mc19maW5kX29wZW5fY29udGV4dChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgcnBjX2NyZWQgKmNyZWQsIGludCBtb2RlKTsKIGV4dGVybiB1NjQgbmZzX2NvbXBhdF91c2VyX2lubzY0KHU2NCBmaWxlaWQpOworZXh0ZXJuIHZvaWQgbmZzX2ZhdHRyX2luaXQoc3RydWN0IG5mc19mYXR0ciAqZmF0dHIpOwogCiAvKiBsaW51eC9uZXQvaXB2NC9pcGNvbmZpZy5jOiB0cmltcyBpcCBhZGRyIG9mZiBmcm9udCBvZiBuYW1lLCB0b28uICovCiBleHRlcm4gX19iZTMyIHJvb3RfbmZzX3BhcnNlX2FkZHIoY2hhciAqbmFtZSk7IC8qX19pbml0Ki8KLQotc3RhdGljIGlubGluZSB2b2lkIG5mc19mYXR0cl9pbml0KHN0cnVjdCBuZnNfZmF0dHIgKmZhdHRyKQotewotCWZhdHRyLT52YWxpZCA9IDA7Ci0JZmF0dHItPnRpbWVfc3RhcnQgPSBqaWZmaWVzOwotfQorZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbmZzX2luY19hdHRyX2dlbmVyYXRpb25fY291bnRlcih2b2lkKTsKIAogLyoKICAqIGxpbnV4L2ZzL25mcy9maWxlLmMKQEAgLTM3Miw4ICszNjcsMTIgQEAKIAogc3RhdGljIGlubGluZSBzdHJ1Y3QgcnBjX2NyZWQgKm5mc19maWxlX2NyZWQoc3RydWN0IGZpbGUgKmZpbGUpCiB7Ci0JaWYgKGZpbGUgIT0gTlVMTCkKLQkJcmV0dXJuIG5mc19maWxlX29wZW5fY29udGV4dChmaWxlKS0+Y3JlZDsKKwlpZiAoZmlsZSAhPSBOVUxMKSB7CisJCXN0cnVjdCBuZnNfb3Blbl9jb250ZXh0ICpjdHggPQorCQkJbmZzX2ZpbGVfb3Blbl9jb250ZXh0KGZpbGUpOworCQlpZiAoY3R4KQorCQkJcmV0dXJuIGN0eC0+Y3JlZDsKKwl9CiAJcmV0dXJuIE5VTEw7CiB9CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmZzX2ZzX3NiLmggYi9pbmNsdWRlL2xpbnV4L25mc19mc19zYi5oCmluZGV4IGM5YmVhY2QuLjRlNDc3YWUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmZzX2ZzX3NiLmgKKysrIGIvaW5jbHVkZS9saW51eC9uZnNfZnNfc2IuaApAQCAtMTE5LDcgKzExOSw2IEBACiAJdm9pZCAoKmRlc3Ryb3kpKHN0cnVjdCBuZnNfc2VydmVyICopOwogCiAJYXRvbWljX3QgYWN0aXZlOyAvKiBLZWVwIHRyYWNlIG9mIGFueSBhY3Rpdml0eSB0byB0aGlzIHNlcnZlciAqLwotCXdhaXRfcXVldWVfaGVhZF90IGFjdGl2ZV93cTsgIC8qIFdhaXQgZm9yIGFueSBhY3Rpdml0eSB0byBzdG9wICAqLwogCiAJLyogbW91bnRkLXJlbGF0ZWQgbW91bnQgb3B0aW9ucyAqLwogCXN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlCW1vdW50ZF9hZGRyZXNzOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZnNfbW91bnQuaCBiL2luY2x1ZGUvbGludXgvbmZzX21vdW50LmgKaW5kZXggZGY3YzZiNy4uNjU0OWEwNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZnNfbW91bnQuaAorKysgYi9pbmNsdWRlL2xpbnV4L25mc19tb3VudC5oCkBAIC02NSw0ICs2NSw4IEBACiAjZGVmaW5lIE5GU19NT1VOVF9VTlNIQVJFRAkweDgwMDAJLyogNSAqLwogI2RlZmluZSBORlNfTU9VTlRfRkxBR01BU0sJMHhGRkZGCiAKKy8qIFRoZSBmb2xsb3dpbmcgYXJlIGZvciBpbnRlcm5hbCB1c2Ugb25seSAqLworI2RlZmluZSBORlNfTU9VTlRfTE9PS1VQX0NBQ0hFX05PTkVHCTB4MTAwMDAKKyNkZWZpbmUgTkZTX01PVU5UX0xPT0tVUF9DQUNIRV9OT05FCTB4MjAwMDAKKwogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25mc194ZHIuaCBiL2luY2x1ZGUvbGludXgvbmZzX3hkci5oCmluZGV4IDhjNzdjMTEuLmMxYzMxYWMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmZzX3hkci5oCisrKyBiL2luY2x1ZGUvbGludXgvbmZzX3hkci5oCkBAIC0zNiw2ICszNiw3IEBACiAJX191MzIJCQlubGluazsKIAlfX3UzMgkJCXVpZDsKIAlfX3UzMgkJCWdpZDsKKwlkZXZfdAkJCXJkZXY7CiAJX191NjQJCQlzaXplOwogCXVuaW9uIHsKIAkJc3RydWN0IHsKQEAgLTQ2LDcgKzQ3LDYgQEAKIAkJCV9fdTY0CXVzZWQ7CiAJCX0gbmZzMzsKIAl9IGR1OwotCWRldl90CQkJcmRldjsKIAlzdHJ1Y3QgbmZzX2ZzaWQJCWZzaWQ7CiAJX191NjQJCQlmaWxlaWQ7CiAJc3RydWN0IHRpbWVzcGVjCQlhdGltZTsKQEAgLTU2LDYgKzU2LDcgQEAKIAlfX3U2NAkJCWNoYW5nZV9hdHRyOwkvKiBORlN2NCBjaGFuZ2UgYXR0cmlidXRlICovCiAJX191NjQJCQlwcmVfY2hhbmdlX2F0dHI7LyogcHJlLW9wIE5GU3Y0IGNoYW5nZSBhdHRyaWJ1dGUgKi8KIAl1bnNpZ25lZCBsb25nCQl0aW1lX3N0YXJ0OworCXVuc2lnbmVkIGxvbmcJCWdlbmNvdW50OwogfTsKIAogI2RlZmluZSBORlNfQVRUUl9XQ0MJCTB4MDAwMQkJLyogcHJlLW9wIFdDQyBkYXRhICAgICovCkBAIC02NzIsMTYgKzY3MywxNiBAQAogCXN0cnVjdCBuZnNfZmF0dHIgKgkJbmV3X2ZhdHRyOwogfTsKIAotI2RlZmluZSBORlM0X1NFVENMSUVOVElEX05BTUVMRU4JKDU2KQorI2RlZmluZSBORlM0X1NFVENMSUVOVElEX05BTUVMRU4JKDEyNykKIHN0cnVjdCBuZnM0X3NldGNsaWVudGlkIHsKIAljb25zdCBuZnM0X3ZlcmlmaWVyICoJCXNjX3ZlcmlmaWVyOwogCXVuc2lnbmVkIGludAkJCXNjX25hbWVfbGVuOwotCWNoYXIJCQkJc2NfbmFtZVtORlM0X1NFVENMSUVOVElEX05BTUVMRU5dOworCWNoYXIJCQkJc2NfbmFtZVtORlM0X1NFVENMSUVOVElEX05BTUVMRU4gKyAxXTsKIAl1MzIJCQkJc2NfcHJvZzsKIAl1bnNpZ25lZCBpbnQJCQlzY19uZXRpZF9sZW47Ci0JY2hhcgkJCQlzY19uZXRpZFtSUENCSU5EX01BWE5FVElETEVOXTsKKwljaGFyCQkJCXNjX25ldGlkW1JQQ0JJTkRfTUFYTkVUSURMRU4gKyAxXTsKIAl1bnNpZ25lZCBpbnQJCQlzY191YWRkcl9sZW47Ci0JY2hhcgkJCQlzY191YWRkcltSUENCSU5EX01BWFVBRERSTEVOXTsKKwljaGFyCQkJCXNjX3VhZGRyW1JQQ0JJTkRfTUFYVUFERFJMRU4gKyAxXTsKIAl1MzIJCQkJc2NfY2JfaWRlbnQ7CiB9OwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25mc2QvbmZzZC5oIGIvaW5jbHVkZS9saW51eC9uZnNkL25mc2QuaAppbmRleCAxMDhmNDdlLi4yMTI2OTQwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25mc2QvbmZzZC5oCisrKyBiL2luY2x1ZGUvbGludXgvbmZzZC9uZnNkLmgKQEAgLTM4LDYgKzM4LDcgQEAKICNkZWZpbmUgTkZTRF9NQVlfTE9DSwkJMzIKICNkZWZpbmUgTkZTRF9NQVlfT1dORVJfT1ZFUlJJREUJNjQKICNkZWZpbmUgTkZTRF9NQVlfTE9DQUxfQUNDRVNTCTEyOCAvKiBJUklYIGRvaW5nIGxvY2FsIGFjY2VzcyBjaGVjayBvbiBkZXZpY2Ugc3BlY2lhbCBmaWxlKi8KKyNkZWZpbmUgTkZTRF9NQVlfQllQQVNTX0dTU19PTl9ST09UIDI1NgogCiAjZGVmaW5lIE5GU0RfTUFZX0NSRUFURQkJKE5GU0RfTUFZX0VYRUN8TkZTRF9NQVlfV1JJVEUpCiAjZGVmaW5lIE5GU0RfTUFZX1JFTU9WRQkJKE5GU0RfTUFZX0VYRUN8TkZTRF9NQVlfV1JJVEV8TkZTRF9NQVlfVFJVTkMpCkBAIC0xMjUsNyArMTI2LDcgQEAKIF9fYmUzMgkJbmZzZF9yZWFkZGlyKHN0cnVjdCBzdmNfcnFzdCAqLCBzdHJ1Y3Qgc3ZjX2ZoICosCiAJCQkgICAgIGxvZmZfdCAqLCBzdHJ1Y3QgcmVhZGRpcl9jZCAqLCBmaWxsZGlyX3QpOwogX19iZTMyCQluZnNkX3N0YXRmcyhzdHJ1Y3Qgc3ZjX3Jxc3QgKiwgc3RydWN0IHN2Y19maCAqLAotCQkJCXN0cnVjdCBrc3RhdGZzICopOworCQkJCXN0cnVjdCBrc3RhdGZzICosIGludCBhY2Nlc3MpOwogCiBpbnQJCW5mc2Rfbm90aWZ5X2NoYW5nZShzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGlhdHRyICopOwogX19iZTMyCQluZnNkX3Blcm1pc3Npb24oc3RydWN0IHN2Y19ycXN0ICosIHN0cnVjdCBzdmNfZXhwb3J0ICosCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L29mLmggYi9pbmNsdWRlL2xpbnV4L29mLmgKaW5kZXggNzk4ODZhZC4uZTI0ODhmNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9vZi5oCisrKyBiL2luY2x1ZGUvbGludXgvb2YuaApAQCAtNzEsNSArNzEsOCBAQAogZXh0ZXJuIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgKm9mX21hdGNoX25vZGUoCiAJY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCAqbWF0Y2hlcywgY29uc3Qgc3RydWN0IGRldmljZV9ub2RlICpub2RlKTsKIGV4dGVybiBpbnQgb2ZfbW9kYWxpYXNfbm9kZShzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUsIGNoYXIgKm1vZGFsaWFzLCBpbnQgbGVuKTsKK2V4dGVybiBpbnQgb2ZfcGFyc2VfcGhhbmRsZXNfd2l0aF9hcmdzKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsCisJY29uc3QgY2hhciAqbGlzdF9uYW1lLCBjb25zdCBjaGFyICpjZWxsc19uYW1lLCBpbnQgaW5kZXgsCisJc3RydWN0IGRldmljZV9ub2RlICoqb3V0X25vZGUsIGNvbnN0IHZvaWQgKipvdXRfYXJncyk7CiAKICNlbmRpZiAvKiBfTElOVVhfT0ZfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9vcHJvZmlsZS5oIGIvaW5jbHVkZS9saW51eC9vcHJvZmlsZS5oCmluZGV4IDA0MWJiMzEuLmJjYjhmNzIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvb3Byb2ZpbGUuaAorKysgYi9pbmNsdWRlL2xpbnV4L29wcm9maWxlLmgKQEAgLTM2LDYgKzM2LDggQEAKICNkZWZpbmUgWEVOX0VOVEVSX1NXSVRDSF9DT0RFCQkxMAogI2RlZmluZSBTUFVfUFJPRklMSU5HX0NPREUJCTExCiAjZGVmaW5lIFNQVV9DVFhfU1dJVENIX0NPREUJCTEyCisjZGVmaW5lIElCU19GRVRDSF9DT0RFCQkJMTMKKyNkZWZpbmUgSUJTX09QX0NPREUJCQkxNAogCiBzdHJ1Y3Qgc3VwZXJfYmxvY2s7CiBzdHJ1Y3QgZGVudHJ5OwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmggYi9pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaAppbmRleCBjNzRkM2U4Li5iMTJmOTNhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaAorKysgYi9pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaApAQCAtOTMsNiArOTMsMTEgQEAKIAlQR19tYXBwZWR0b2Rpc2ssCS8qIEhhcyBibG9ja3MgYWxsb2NhdGVkIG9uLWRpc2sgKi8KIAlQR19yZWNsYWltLAkJLyogVG8gYmUgcmVjbGFpbWVkIGFzYXAgKi8KIAlQR19idWRkeSwJCS8qIFBhZ2UgaXMgZnJlZSwgb24gYnVkZHkgbGlzdHMgKi8KKwlQR19zd2FwYmFja2VkLAkJLyogUGFnZSBpcyBiYWNrZWQgYnkgUkFNL3N3YXAgKi8KKyNpZmRlZiBDT05GSUdfVU5FVklDVEFCTEVfTFJVCisJUEdfdW5ldmljdGFibGUsCQkvKiBQYWdlIGlzICJ1bmV2aWN0YWJsZSIgICovCisJUEdfbWxvY2tlZCwJCS8qIFBhZ2UgaXMgdm1hIG1sb2NrZWQgKi8KKyNlbmRpZgogI2lmZGVmIENPTkZJR19JQTY0X1VOQ0FDSEVEX0FMTE9DQVRPUgogCVBHX3VuY2FjaGVkLAkJLyogUGFnZSBoYXMgYmVlbiBtYXBwZWQgYXMgdW5jYWNoZWQgKi8KICNlbmRpZgpAQCAtMTYxLDYgKzE2NiwxOCBAQAogI2RlZmluZSBURVNUU0NGTEFHKHVuYW1lLCBsbmFtZSkJCQkJCVwKIAlURVNUU0VURkxBRyh1bmFtZSwgbG5hbWUpIFRFU1RDTEVBUkZMQUcodW5hbWUsIGxuYW1lKQogCisjZGVmaW5lIFNFVFBBR0VGTEFHX05PT1AodW5hbWUpCQkJCQkJXAorc3RhdGljIGlubGluZSB2b2lkIFNldFBhZ2UjI3VuYW1lKHN0cnVjdCBwYWdlICpwYWdlKSB7ICB9CisKKyNkZWZpbmUgQ0xFQVJQQUdFRkxBR19OT09QKHVuYW1lKQkJCQkJXAorc3RhdGljIGlubGluZSB2b2lkIENsZWFyUGFnZSMjdW5hbWUoc3RydWN0IHBhZ2UgKnBhZ2UpIHsgIH0KKworI2RlZmluZSBfX0NMRUFSUEFHRUZMQUdfTk9PUCh1bmFtZSkJCQkJCVwKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX0NsZWFyUGFnZSMjdW5hbWUoc3RydWN0IHBhZ2UgKnBhZ2UpIHsgIH0KKworI2RlZmluZSBURVNUQ0xFQVJGTEFHX0ZBTFNFKHVuYW1lKQkJCQkJXAorc3RhdGljIGlubGluZSBpbnQgVGVzdENsZWFyUGFnZSMjdW5hbWUoc3RydWN0IHBhZ2UgKnBhZ2UpIHsgcmV0dXJuIDA7IH0KKwogc3RydWN0IHBhZ2U7CS8qIGZvcndhcmQgZGVjbGFyYXRpb24gKi8KIAogVEVTVFBBR0VGTEFHKExvY2tlZCwgbG9ja2VkKQpAQCAtMTY5LDYgKzE4Niw3IEBACiBQQUdFRkxBRyhEaXJ0eSwgZGlydHkpIFRFU1RTQ0ZMQUcoRGlydHksIGRpcnR5KSBfX0NMRUFSUEFHRUZMQUcoRGlydHksIGRpcnR5KQogUEFHRUZMQUcoTFJVLCBscnUpIF9fQ0xFQVJQQUdFRkxBRyhMUlUsIGxydSkKIFBBR0VGTEFHKEFjdGl2ZSwgYWN0aXZlKSBfX0NMRUFSUEFHRUZMQUcoQWN0aXZlLCBhY3RpdmUpCisJVEVTVENMRUFSRkxBRyhBY3RpdmUsIGFjdGl2ZSkKIF9fUEFHRUZMQUcoU2xhYiwgc2xhYikKIFBBR0VGTEFHKENoZWNrZWQsIGNoZWNrZWQpCQkvKiBVc2VkIGJ5IHNvbWUgZmlsZXN5c3RlbXMgKi8KIFBBR0VGTEFHKFBpbm5lZCwgcGlubmVkKSBURVNUU0NGTEFHKFBpbm5lZCwgcGlubmVkKQkvKiBYZW4gKi8KQEAgLTE3Niw2ICsxOTQsNyBAQAogUEFHRUZMQUcoUmVzZXJ2ZWQsIHJlc2VydmVkKSBfX0NMRUFSUEFHRUZMQUcoUmVzZXJ2ZWQsIHJlc2VydmVkKQogUEFHRUZMQUcoUHJpdmF0ZSwgcHJpdmF0ZSkgX19DTEVBUlBBR0VGTEFHKFByaXZhdGUsIHByaXZhdGUpCiAJX19TRVRQQUdFRkxBRyhQcml2YXRlLCBwcml2YXRlKQorUEFHRUZMQUcoU3dhcEJhY2tlZCwgc3dhcGJhY2tlZCkgX19DTEVBUlBBR0VGTEFHKFN3YXBCYWNrZWQsIHN3YXBiYWNrZWQpCiAKIF9fUEFHRUZMQUcoU2xvYlBhZ2UsIHNsb2JfcGFnZSkKIF9fUEFHRUZMQUcoU2xvYkZyZWUsIHNsb2JfZnJlZSkKQEAgLTIxMSw2ICsyMzAsMjUgQEAKIFBBR0VGTEFHX0ZBTFNFKFN3YXBDYWNoZSkKICNlbmRpZgogCisjaWZkZWYgQ09ORklHX1VORVZJQ1RBQkxFX0xSVQorUEFHRUZMQUcoVW5ldmljdGFibGUsIHVuZXZpY3RhYmxlKSBfX0NMRUFSUEFHRUZMQUcoVW5ldmljdGFibGUsIHVuZXZpY3RhYmxlKQorCVRFU1RDTEVBUkZMQUcoVW5ldmljdGFibGUsIHVuZXZpY3RhYmxlKQorCisjZGVmaW5lIE1MT0NLX1BBR0VTIDEKK1BBR0VGTEFHKE1sb2NrZWQsIG1sb2NrZWQpIF9fQ0xFQVJQQUdFRkxBRyhNbG9ja2VkLCBtbG9ja2VkKQorCVRFU1RTQ0ZMQUcoTWxvY2tlZCwgbWxvY2tlZCkKKworI2Vsc2UKKworI2RlZmluZSBNTE9DS19QQUdFUyAwCitQQUdFRkxBR19GQUxTRShNbG9ja2VkKQorCVNFVFBBR0VGTEFHX05PT1AoTWxvY2tlZCkgVEVTVENMRUFSRkxBR19GQUxTRShNbG9ja2VkKQorCitQQUdFRkxBR19GQUxTRShVbmV2aWN0YWJsZSkgVEVTVENMRUFSRkxBR19GQUxTRShVbmV2aWN0YWJsZSkKKwlTRVRQQUdFRkxBR19OT09QKFVuZXZpY3RhYmxlKSBDTEVBUlBBR0VGTEFHX05PT1AoVW5ldmljdGFibGUpCisJX19DTEVBUlBBR0VGTEFHX05PT1AoVW5ldmljdGFibGUpCisjZW5kaWYKKwogI2lmZGVmIENPTkZJR19JQTY0X1VOQ0FDSEVEX0FMTE9DQVRPUgogUEFHRUZMQUcoVW5jYWNoZWQsIHVuY2FjaGVkKQogI2Vsc2UKQEAgLTMyNiwxNSArMzY0LDI1IEBACiAKICNlbmRpZiAvKiAhUEFHRUZMQUdTX0VYVEVOREVEICovCiAKKyNpZmRlZiBDT05GSUdfVU5FVklDVEFCTEVfTFJVCisjZGVmaW5lIF9fUEdfVU5FVklDVEFCTEUJKDEgPDwgUEdfdW5ldmljdGFibGUpCisjZGVmaW5lIF9fUEdfTUxPQ0tFRAkJKDEgPDwgUEdfbWxvY2tlZCkKKyNlbHNlCisjZGVmaW5lIF9fUEdfVU5FVklDVEFCTEUJMAorI2RlZmluZSBfX1BHX01MT0NLRUQJCTAKKyNlbmRpZgorCiAjZGVmaW5lIFBBR0VfRkxBR1MJKDEgPDwgUEdfbHJ1ICAgfCAxIDw8IFBHX3ByaXZhdGUgICB8IDEgPDwgUEdfbG9ja2VkIHwgXAogCQkJIDEgPDwgUEdfYnVkZHkgfCAxIDw8IFBHX3dyaXRlYmFjayB8IFwKLQkJCSAxIDw8IFBHX3NsYWIgIHwgMSA8PCBQR19zd2FwY2FjaGUgfCAxIDw8IFBHX2FjdGl2ZSkKKwkJCSAxIDw8IFBHX3NsYWIgIHwgMSA8PCBQR19zd2FwY2FjaGUgfCAxIDw8IFBHX2FjdGl2ZSB8IFwKKwkJCSBfX1BHX1VORVZJQ1RBQkxFIHwgX19QR19NTE9DS0VEKQogCiAvKgogICogRmxhZ3MgY2hlY2tlZCBpbiBiYWRfcGFnZSgpLiAgUGFnZXMgb24gdGhlIGZyZWUgbGlzdCBzaG91bGQgbm90IGhhdmUKICAqIHRoZXNlIGZsYWdzIHNldC4gIEl0IHRoZXkgYXJlLCB0aGVyZSBpcyBhIHByb2JsZW0uCiAgKi8KLSNkZWZpbmUgUEFHRV9GTEFHU19DTEVBUl9XSEVOX0JBRCAoUEFHRV9GTEFHUyB8IDEgPDwgUEdfcmVjbGFpbSB8IDEgPDwgUEdfZGlydHkpCisjZGVmaW5lIFBBR0VfRkxBR1NfQ0xFQVJfV0hFTl9CQUQgKFBBR0VfRkxBR1MgfCBcCisJCTEgPDwgUEdfcmVjbGFpbSB8IDEgPDwgUEdfZGlydHkgfCAxIDw8IFBHX3N3YXBiYWNrZWQpCiAKIC8qCiAgKiBGbGFncyBjaGVja2VkIHdoZW4gYSBwYWdlIGlzIGZyZWVkLiAgUGFnZXMgYmVpbmcgZnJlZWQgc2hvdWxkIG5vdCBoYXZlCkBAIC0zNDcsNyArMzk1LDggQEAKICAqIFBhZ2VzIGJlaW5nIHByZXBwZWQgc2hvdWxkIG5vdCBoYXZlIHRoZXNlIGZsYWdzIHNldC4gIEl0IHRoZXkgYXJlLCB0aGVyZQogICogaXMgYSBwcm9ibGVtLgogICovCi0jZGVmaW5lIFBBR0VfRkxBR1NfQ0hFQ0tfQVRfUFJFUCAoUEFHRV9GTEFHUyB8IDEgPDwgUEdfcmVzZXJ2ZWQgfCAxIDw8IFBHX2RpcnR5KQorI2RlZmluZSBQQUdFX0ZMQUdTX0NIRUNLX0FUX1BSRVAgKFBBR0VfRkxBR1MgfCBcCisJCTEgPDwgUEdfcmVzZXJ2ZWQgfCAxIDw8IFBHX2RpcnR5IHwgMSA8PCBQR19zd2FwYmFja2VkKQogCiAjZW5kaWYgLyogIV9fR0VORVJBVElOR19CT1VORFNfSCAqLwogI2VuZGlmCS8qIFBBR0VfRkxBR1NfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wYWdlX2Nncm91cC5oIGIvaW5jbHVkZS9saW51eC9wYWdlX2Nncm91cC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBmZDM5ZjIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L3BhZ2VfY2dyb3VwLmgKQEAgLTAsMCArMSwxMDMgQEAKKyNpZm5kZWYgX19MSU5VWF9QQUdFX0NHUk9VUF9ICisjZGVmaW5lIF9fTElOVVhfUEFHRV9DR1JPVVBfSAorCisjaWZkZWYgQ09ORklHX0NHUk9VUF9NRU1fUkVTX0NUTFIKKyNpbmNsdWRlIDxsaW51eC9iaXRfc3BpbmxvY2suaD4KKy8qCisgKiBQYWdlIENncm91cCBjYW4gYmUgY29uc2lkZXJlZCBhcyBhbiBleHRlbmRlZCBtZW1fbWFwLgorICogQSBwYWdlX2Nncm91cCBwYWdlIGlzIGFzc29jaWF0ZWQgd2l0aCBldmVyeSBwYWdlIGRlc2NyaXB0b3IuIFRoZQorICogcGFnZV9jZ3JvdXAgaGVscHMgdXMgaWRlbnRpZnkgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGNncm91cAorICogQWxsIHBhZ2UgY2dyb3VwcyBhcmUgYWxsb2NhdGVkIGF0IGJvb3Qgb3IgbWVtb3J5IGhvdHBsdWcgZXZlbnQsCisgKiB0aGVuIHRoZSBwYWdlIGNncm91cCBmb3IgcGZuIGFsd2F5cyBleGlzdHMuCisgKi8KK3N0cnVjdCBwYWdlX2Nncm91cCB7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2Nncm91cDsKKwlzdHJ1Y3QgcGFnZSAqcGFnZTsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxydTsJCS8qIHBlciBjZ3JvdXAgTFJVIGxpc3QgKi8KK307CisKK3ZvaWQgX19pbml0IHBnZGF0X3BhZ2VfY2dyb3VwX2luaXQoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCk7Cit2b2lkIF9faW5pdCBwYWdlX2Nncm91cF9pbml0KHZvaWQpOworc3RydWN0IHBhZ2VfY2dyb3VwICpsb29rdXBfcGFnZV9jZ3JvdXAoc3RydWN0IHBhZ2UgKnBhZ2UpOworCitlbnVtIHsKKwkvKiBmbGFncyBmb3IgbWVtX2Nncm91cCAqLworCVBDR19MT0NLLCAgLyogcGFnZSBjZ3JvdXAgaXMgbG9ja2VkICovCisJUENHX0NBQ0hFLCAvKiBjaGFyZ2VkIGFzIGNhY2hlICovCisJUENHX1VTRUQsIC8qIHRoaXMgb2JqZWN0IGlzIGluIHVzZS4gKi8KKwkvKiBmbGFncyBmb3IgTFJVIHBsYWNlbWVudCAqLworCVBDR19BQ1RJVkUsIC8qIHBhZ2UgaXMgYWN0aXZlIGluIHRoaXMgY2dyb3VwICovCisJUENHX0ZJTEUsIC8qIHBhZ2UgaXMgZmlsZSBzeXN0ZW0gYmFja2VkICovCisJUENHX1VORVZJQ1RBQkxFLCAvKiBwYWdlIGlzIHVuZXZpY3RhYmxlYWJsZSAqLworfTsKKworI2RlZmluZSBURVNUUENHRkxBRyh1bmFtZSwgbG5hbWUpCQkJXAorc3RhdGljIGlubGluZSBpbnQgUGFnZUNncm91cCMjdW5hbWUoc3RydWN0IHBhZ2VfY2dyb3VwICpwYykJXAorCXsgcmV0dXJuIHRlc3RfYml0KFBDR18jI2xuYW1lLCAmcGMtPmZsYWdzKTsgfQorCisjZGVmaW5lIFNFVFBDR0ZMQUcodW5hbWUsIGxuYW1lKQkJCVwKK3N0YXRpYyBpbmxpbmUgdm9pZCBTZXRQYWdlQ2dyb3VwIyN1bmFtZShzdHJ1Y3QgcGFnZV9jZ3JvdXAgKnBjKVwKKwl7IHNldF9iaXQoUENHXyMjbG5hbWUsICZwYy0+ZmxhZ3MpOyAgfQorCisjZGVmaW5lIENMRUFSUENHRkxBRyh1bmFtZSwgbG5hbWUpCQkJXAorc3RhdGljIGlubGluZSB2b2lkIENsZWFyUGFnZUNncm91cCMjdW5hbWUoc3RydWN0IHBhZ2VfY2dyb3VwICpwYykJXAorCXsgY2xlYXJfYml0KFBDR18jI2xuYW1lLCAmcGMtPmZsYWdzKTsgIH0KKworLyogQ2FjaGUgZmxhZyBpcyBzZXQgb25seSBvbmNlIChhdCBhbGxvY2F0aW9uKSAqLworVEVTVFBDR0ZMQUcoQ2FjaGUsIENBQ0hFKQorCitURVNUUENHRkxBRyhVc2VkLCBVU0VEKQorQ0xFQVJQQ0dGTEFHKFVzZWQsIFVTRUQpCisKKy8qIExSVSBtYW5hZ2VtZW50IGZsYWdzIChmcm9tIGdsb2JhbC1scnUgZGVmaW5pdGlvbikgKi8KK1RFU1RQQ0dGTEFHKEZpbGUsIEZJTEUpCitTRVRQQ0dGTEFHKEZpbGUsIEZJTEUpCitDTEVBUlBDR0ZMQUcoRmlsZSwgRklMRSkKKworVEVTVFBDR0ZMQUcoQWN0aXZlLCBBQ1RJVkUpCitTRVRQQ0dGTEFHKEFjdGl2ZSwgQUNUSVZFKQorQ0xFQVJQQ0dGTEFHKEFjdGl2ZSwgQUNUSVZFKQorCitURVNUUENHRkxBRyhVbmV2aWN0YWJsZSwgVU5FVklDVEFCTEUpCitTRVRQQ0dGTEFHKFVuZXZpY3RhYmxlLCBVTkVWSUNUQUJMRSkKK0NMRUFSUENHRkxBRyhVbmV2aWN0YWJsZSwgVU5FVklDVEFCTEUpCisKK3N0YXRpYyBpbmxpbmUgaW50IHBhZ2VfY2dyb3VwX25pZChzdHJ1Y3QgcGFnZV9jZ3JvdXAgKnBjKQoreworCXJldHVybiBwYWdlX3RvX25pZChwYy0+cGFnZSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgZW51bSB6b25lX3R5cGUgcGFnZV9jZ3JvdXBfemlkKHN0cnVjdCBwYWdlX2Nncm91cCAqcGMpCit7CisJcmV0dXJuIHBhZ2Vfem9uZW51bShwYy0+cGFnZSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBsb2NrX3BhZ2VfY2dyb3VwKHN0cnVjdCBwYWdlX2Nncm91cCAqcGMpCit7CisJYml0X3NwaW5fbG9jayhQQ0dfTE9DSywgJnBjLT5mbGFncyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHRyeWxvY2tfcGFnZV9jZ3JvdXAoc3RydWN0IHBhZ2VfY2dyb3VwICpwYykKK3sKKwlyZXR1cm4gYml0X3NwaW5fdHJ5bG9jayhQQ0dfTE9DSywgJnBjLT5mbGFncyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB1bmxvY2tfcGFnZV9jZ3JvdXAoc3RydWN0IHBhZ2VfY2dyb3VwICpwYykKK3sKKwliaXRfc3Bpbl91bmxvY2soUENHX0xPQ0ssICZwYy0+ZmxhZ3MpOworfQorCisjZWxzZSAvKiBDT05GSUdfQ0dST1VQX01FTV9SRVNfQ1RMUiAqLworc3RydWN0IHBhZ2VfY2dyb3VwOworCitzdGF0aWMgaW5saW5lIHZvaWQgcGdkYXRfcGFnZV9jZ3JvdXBfaW5pdChzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0KQoreworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBwYWdlX2Nncm91cCAqbG9va3VwX3BhZ2VfY2dyb3VwKHN0cnVjdCBwYWdlICpwYWdlKQoreworCXJldHVybiBOVUxMOworfQorI2VuZGlmCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGFnZW1hcC5oIGIvaW5jbHVkZS9saW51eC9wYWdlbWFwLmgKaW5kZXggNWRhMzFjMS4uNzA5NzQyYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wYWdlbWFwLmgKKysrIGIvaW5jbHVkZS9saW51eC9wYWdlbWFwLmgKQEAgLTMyLDYgKzMyLDM0IEBACiAJfQogfQogCisjaWZkZWYgQ09ORklHX1VORVZJQ1RBQkxFX0xSVQorI2RlZmluZSBBU19VTkVWSUNUQUJMRQkoX19HRlBfQklUU19TSElGVCArIDIpCS8qIGUuZy4sIHJhbWRpc2ssIFNITV9MT0NLICovCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBtYXBwaW5nX3NldF91bmV2aWN0YWJsZShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZykKK3sKKwlzZXRfYml0KEFTX1VORVZJQ1RBQkxFLCAmbWFwcGluZy0+ZmxhZ3MpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgbWFwcGluZ19jbGVhcl91bmV2aWN0YWJsZShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZykKK3sKKwljbGVhcl9iaXQoQVNfVU5FVklDVEFCTEUsICZtYXBwaW5nLT5mbGFncyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IG1hcHBpbmdfdW5ldmljdGFibGUoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcpCit7CisJaWYgKGxpa2VseShtYXBwaW5nKSkKKwkJcmV0dXJuIHRlc3RfYml0KEFTX1VORVZJQ1RBQkxFLCAmbWFwcGluZy0+ZmxhZ3MpOworCXJldHVybiAhIW1hcHBpbmc7Cit9CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIG1hcHBpbmdfc2V0X3VuZXZpY3RhYmxlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nKSB7IH0KK3N0YXRpYyBpbmxpbmUgdm9pZCBtYXBwaW5nX2NsZWFyX3VuZXZpY3RhYmxlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nKSB7IH0KK3N0YXRpYyBpbmxpbmUgaW50IG1hcHBpbmdfdW5ldmljdGFibGUoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcpCit7CisJcmV0dXJuIDA7Cit9CisjZW5kaWYKKwogc3RhdGljIGlubGluZSBnZnBfdCBtYXBwaW5nX2dmcF9tYXNrKHN0cnVjdCBhZGRyZXNzX3NwYWNlICogbWFwcGluZykKIHsKIAlyZXR1cm4gKF9fZm9yY2UgZ2ZwX3QpbWFwcGluZy0+ZmxhZ3MgJiBfX0dGUF9CSVRTX01BU0s7CkBAIC0yNzEsMTkgKzI5OSwxOSBAQAogZXh0ZXJuIHZvaWQgX19sb2NrX3BhZ2Vfbm9zeW5jKHN0cnVjdCBwYWdlICpwYWdlKTsKIGV4dGVybiB2b2lkIHVubG9ja19wYWdlKHN0cnVjdCBwYWdlICpwYWdlKTsKIAotc3RhdGljIGlubGluZSB2b2lkIHNldF9wYWdlX2xvY2tlZChzdHJ1Y3QgcGFnZSAqcGFnZSkKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX3NldF9wYWdlX2xvY2tlZChzdHJ1Y3QgcGFnZSAqcGFnZSkKIHsKLQlzZXRfYml0KFBHX2xvY2tlZCwgJnBhZ2UtPmZsYWdzKTsKKwlfX3NldF9iaXQoUEdfbG9ja2VkLCAmcGFnZS0+ZmxhZ3MpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgY2xlYXJfcGFnZV9sb2NrZWQoc3RydWN0IHBhZ2UgKnBhZ2UpCitzdGF0aWMgaW5saW5lIHZvaWQgX19jbGVhcl9wYWdlX2xvY2tlZChzdHJ1Y3QgcGFnZSAqcGFnZSkKIHsKLQljbGVhcl9iaXQoUEdfbG9ja2VkLCAmcGFnZS0+ZmxhZ3MpOworCV9fY2xlYXJfYml0KFBHX2xvY2tlZCwgJnBhZ2UtPmZsYWdzKTsKIH0KIAogc3RhdGljIGlubGluZSBpbnQgdHJ5bG9ja19wYWdlKHN0cnVjdCBwYWdlICpwYWdlKQogewotCXJldHVybiAhdGVzdF9hbmRfc2V0X2JpdChQR19sb2NrZWQsICZwYWdlLT5mbGFncyk7CisJcmV0dXJuIChsaWtlbHkoIXRlc3RfYW5kX3NldF9iaXRfbG9jayhQR19sb2NrZWQsICZwYWdlLT5mbGFncykpKTsKIH0KIAogLyoKQEAgLTQxMCwxNyArNDM4LDE3IEBACiAKIC8qCiAgKiBMaWtlIGFkZF90b19wYWdlX2NhY2hlX2xvY2tlZCwgYnV0IHVzZWQgdG8gYWRkIG5ld2x5IGFsbG9jYXRlZCBwYWdlczoKLSAqIHRoZSBwYWdlIGlzIG5ldywgc28gd2UgY2FuIGp1c3QgcnVuIHNldF9wYWdlX2xvY2tlZCgpIGFnYWluc3QgaXQuCisgKiB0aGUgcGFnZSBpcyBuZXcsIHNvIHdlIGNhbiBqdXN0IHJ1biBfX3NldF9wYWdlX2xvY2tlZCgpIGFnYWluc3QgaXQuCiAgKi8KIHN0YXRpYyBpbmxpbmUgaW50IGFkZF90b19wYWdlX2NhY2hlKHN0cnVjdCBwYWdlICpwYWdlLAogCQlzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgcGdvZmZfdCBvZmZzZXQsIGdmcF90IGdmcF9tYXNrKQogewogCWludCBlcnJvcjsKIAotCXNldF9wYWdlX2xvY2tlZChwYWdlKTsKKwlfX3NldF9wYWdlX2xvY2tlZChwYWdlKTsKIAllcnJvciA9IGFkZF90b19wYWdlX2NhY2hlX2xvY2tlZChwYWdlLCBtYXBwaW5nLCBvZmZzZXQsIGdmcF9tYXNrKTsKIAlpZiAodW5saWtlbHkoZXJyb3IpKQotCQljbGVhcl9wYWdlX2xvY2tlZChwYWdlKTsKKwkJX19jbGVhcl9wYWdlX2xvY2tlZChwYWdlKTsKIAlyZXR1cm4gZXJyb3I7CiB9CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGFnZXZlYy5oIGIvaW5jbHVkZS9saW51eC9wYWdldmVjLmgKaW5kZXggOGViN2ZhNy4uZTkwYTJjYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wYWdldmVjLmgKKysrIGIvaW5jbHVkZS9saW51eC9wYWdldmVjLmgKQEAgLTIzLDkgKzIzLDkgQEAKIHZvaWQgX19wYWdldmVjX3JlbGVhc2Uoc3RydWN0IHBhZ2V2ZWMgKnB2ZWMpOwogdm9pZCBfX3BhZ2V2ZWNfcmVsZWFzZV9ub25scnUoc3RydWN0IHBhZ2V2ZWMgKnB2ZWMpOwogdm9pZCBfX3BhZ2V2ZWNfZnJlZShzdHJ1Y3QgcGFnZXZlYyAqcHZlYyk7Ci12b2lkIF9fcGFnZXZlY19scnVfYWRkKHN0cnVjdCBwYWdldmVjICpwdmVjKTsKLXZvaWQgX19wYWdldmVjX2xydV9hZGRfYWN0aXZlKHN0cnVjdCBwYWdldmVjICpwdmVjKTsKK3ZvaWQgX19fX3BhZ2V2ZWNfbHJ1X2FkZChzdHJ1Y3QgcGFnZXZlYyAqcHZlYywgZW51bSBscnVfbGlzdCBscnUpOwogdm9pZCBwYWdldmVjX3N0cmlwKHN0cnVjdCBwYWdldmVjICpwdmVjKTsKK3ZvaWQgcGFnZXZlY19zd2FwX2ZyZWUoc3RydWN0IHBhZ2V2ZWMgKnB2ZWMpOwogdW5zaWduZWQgcGFnZXZlY19sb29rdXAoc3RydWN0IHBhZ2V2ZWMgKnB2ZWMsIHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLAogCQlwZ29mZl90IHN0YXJ0LCB1bnNpZ25lZCBucl9wYWdlcyk7CiB1bnNpZ25lZCBwYWdldmVjX2xvb2t1cF90YWcoc3RydWN0IHBhZ2V2ZWMgKnB2ZWMsCkBAIC04MSwxMCArODEsMzYgQEAKIAkJX19wYWdldmVjX2ZyZWUocHZlYyk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBwYWdldmVjX2xydV9hZGQoc3RydWN0IHBhZ2V2ZWMgKnB2ZWMpCitzdGF0aWMgaW5saW5lIHZvaWQgX19wYWdldmVjX2xydV9hZGRfYW5vbihzdHJ1Y3QgcGFnZXZlYyAqcHZlYykKK3sKKwlfX19fcGFnZXZlY19scnVfYWRkKHB2ZWMsIExSVV9JTkFDVElWRV9BTk9OKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIF9fcGFnZXZlY19scnVfYWRkX2FjdGl2ZV9hbm9uKHN0cnVjdCBwYWdldmVjICpwdmVjKQoreworCV9fX19wYWdldmVjX2xydV9hZGQocHZlYywgTFJVX0FDVElWRV9BTk9OKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIF9fcGFnZXZlY19scnVfYWRkX2ZpbGUoc3RydWN0IHBhZ2V2ZWMgKnB2ZWMpCit7CisJX19fX3BhZ2V2ZWNfbHJ1X2FkZChwdmVjLCBMUlVfSU5BQ1RJVkVfRklMRSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX3BhZ2V2ZWNfbHJ1X2FkZF9hY3RpdmVfZmlsZShzdHJ1Y3QgcGFnZXZlYyAqcHZlYykKK3sKKwlfX19fcGFnZXZlY19scnVfYWRkKHB2ZWMsIExSVV9BQ1RJVkVfRklMRSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBwYWdldmVjX2xydV9hZGRfZmlsZShzdHJ1Y3QgcGFnZXZlYyAqcHZlYykKIHsKIAlpZiAocGFnZXZlY19jb3VudChwdmVjKSkKLQkJX19wYWdldmVjX2xydV9hZGQocHZlYyk7CisJCV9fcGFnZXZlY19scnVfYWRkX2ZpbGUocHZlYyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBwYWdldmVjX2xydV9hZGRfYW5vbihzdHJ1Y3QgcGFnZXZlYyAqcHZlYykKK3sKKwlpZiAocGFnZXZlY19jb3VudChwdmVjKSkKKwkJX19wYWdldmVjX2xydV9hZGRfYW5vbihwdmVjKTsKIH0KIAogI2VuZGlmIC8qIF9MSU5VWF9QQUdFVkVDX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGFycG9ydC5oIGIvaW5jbHVkZS9saW51eC9wYXJwb3J0LmgKaW5kZXggNmEwZDdjZC4uZTFmODNjNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wYXJwb3J0LmgKKysrIGIvaW5jbHVkZS9saW51eC9wYXJwb3J0LmgKQEAgLTEsNSArMSwzIEBACi0vKiAkSWQ6IHBhcnBvcnQuaCx2IDEuMSAxOTk4LzA1LzE3IDEwOjU3OjUyIGFuZHJlYSBFeHAgYW5kcmVhICQgKi8KLQogLyoKICAqIEFueSBwYXJ0IG9mIHRoaXMgcHJvZ3JhbSBtYXkgYmUgdXNlZCBpbiBkb2N1bWVudHMgbGljZW5zZWQgdW5kZXIKICAqIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4xIG9yIGFueSBsYXRlciB2ZXJzaW9uCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BhcnNlci5oIGIvaW5jbHVkZS9saW51eC9wYXJzZXIuaAppbmRleCA3ZGNkMDUwLi5lYTIyODFlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BhcnNlci5oCisrKyBiL2luY2x1ZGUvbGludXgvcGFyc2VyLmgKQEAgLTI1LDcgKzI1LDcgQEAKIAljaGFyICp0bzsKIH0gc3Vic3RyaW5nX3Q7CiAKLWludCBtYXRjaF90b2tlbihjaGFyICosIG1hdGNoX3RhYmxlX3QgdGFibGUsIHN1YnN0cmluZ190IGFyZ3NbXSk7CitpbnQgbWF0Y2hfdG9rZW4oY2hhciAqLCBjb25zdCBtYXRjaF90YWJsZV90IHRhYmxlLCBzdWJzdHJpbmdfdCBhcmdzW10pOwogaW50IG1hdGNoX2ludChzdWJzdHJpbmdfdCAqLCBpbnQgKnJlc3VsdCk7CiBpbnQgbWF0Y2hfb2N0YWwoc3Vic3RyaW5nX3QgKiwgaW50ICpyZXN1bHQpOwogaW50IG1hdGNoX2hleChzdWJzdHJpbmdfdCAqLCBpbnQgKnJlc3VsdCk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BjaS5oIGIvaW5jbHVkZS9saW51eC9wY2kuaAppbmRleCA5OGRjNjI0Li43ZjNmNjVlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BjaS5oCisrKyBiL2luY2x1ZGUvbGludXgvcGNpLmgKQEAgLTYzMSw2ICs2MzEsOCBAQAogaW50IHBjaV9zZWxlY3RfYmFycyhzdHJ1Y3QgcGNpX2RldiAqZGV2LCB1bnNpZ25lZCBsb25nIGZsYWdzKTsKIAogLyogUk9NIGNvbnRyb2wgcmVsYXRlZCByb3V0aW5lcyAqLworaW50IHBjaV9lbmFibGVfcm9tKHN0cnVjdCBwY2lfZGV2ICpwZGV2KTsKK3ZvaWQgcGNpX2Rpc2FibGVfcm9tKHN0cnVjdCBwY2lfZGV2ICpwZGV2KTsKIHZvaWQgX19pb21lbSBfX211c3RfY2hlY2sgKnBjaV9tYXBfcm9tKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBzaXplX3QgKnNpemUpOwogdm9pZCBwY2lfdW5tYXBfcm9tKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCB2b2lkIF9faW9tZW0gKnJvbSk7CiBzaXplX3QgcGNpX2dldF9yb21fc2l6ZSh2b2lkIF9faW9tZW0gKnJvbSwgc2l6ZV90IHNpemUpOwpAQCAtNzIzLDcgKzcyNSw3IEBACiB9OwogCiBzdHJ1Y3QgbXNpeF9lbnRyeSB7Ci0JdTE2IAl2ZWN0b3I7CS8qIGtlcm5lbCB1c2VzIHRvIHdyaXRlIGFsbG9jYXRlZCB2ZWN0b3IgKi8KKwl1MzIJdmVjdG9yOwkvKiBrZXJuZWwgdXNlcyB0byB3cml0ZSBhbGxvY2F0ZWQgdmVjdG9yICovCiAJdTE2CWVudHJ5OwkvKiBkcml2ZXIgdXNlcyB0byBzcGVjaWZ5IGVudHJ5LCBPUyB3cml0ZXMgKi8KIH07CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGNpX2lkcy5oIGIvaW5jbHVkZS9saW51eC9wY2lfaWRzLmgKaW5kZXggZjYzYjU0NS4uOGVkZGRjMjQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcGNpX2lkcy5oCisrKyBiL2luY2x1ZGUvbGludXgvcGNpX2lkcy5oCkBAIC01ODcsNiArNTg3LDcgQEAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9NQVRST1hfRzIwMF9QQ0kJMHgwNTIwCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTUFUUk9YX0cyMDBfQUdQCTB4MDUyMQogI2RlZmluZQlQQ0lfREVWSUNFX0lEX01BVFJPWF9HNDAwCTB4MDUyNQorI2RlZmluZQlQQ0lfREVWSUNFX0lEX01BVFJPWF9HMjAwRVZfUENJCTB4MDUzMAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX01BVFJPWF9HNTUwCTB4MjUyNwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX01BVFJPWF9WSUEJMHg0NTM2CiAKQEAgLTE1MzMsNyArMTUzNCw5IEBACiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTUFSVkVMTF9HVDY0MjYwCTB4NjQzMAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX01BUlZFTExfTVY2NDM2MAkweDY0NjAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9NQVJWRUxMX01WNjQ0NjAJMHg2NDgwCi0jZGVmaW5lIFBDSV9ERVZJQ0VfSURfTUFSVkVMTF9DQUZFX1NECTB4NDEwMQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX01BUlZFTExfODhBTFAwMV9OQU5ECTB4NDEwMAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX01BUlZFTExfODhBTFAwMV9TRAkweDQxMDEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9NQVJWRUxMXzg4QUxQMDFfQ0NJQwkweDQxMDIKIAogI2RlZmluZSBQQ0lfVkVORE9SX0lEX1YzCQkweDExYjAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9WM19WOTYwCQkweDAwMDEKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGZuLmggYi9pbmNsdWRlL2xpbnV4L3Bmbi5oCmluZGV4IGJiMDFmOGIuLjc2NDY2MzcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcGZuLmgKKysrIGIvaW5jbHVkZS9saW51eC9wZm4uaApAQCAtMSw5ICsxLDEzIEBACiAjaWZuZGVmIF9MSU5VWF9QRk5fSF8KICNkZWZpbmUgX0xJTlVYX1BGTl9IXwogCisjaWZuZGVmIF9fQVNTRU1CTFlfXworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjZW5kaWYKKwogI2RlZmluZSBQRk5fQUxJR04oeCkJKCgodW5zaWduZWQgbG9uZykoeCkgKyAoUEFHRV9TSVpFIC0gMSkpICYgUEFHRV9NQVNLKQogI2RlZmluZSBQRk5fVVAoeCkJKCgoeCkgKyBQQUdFX1NJWkUtMSkgPj4gUEFHRV9TSElGVCkKICNkZWZpbmUgUEZOX0RPV04oeCkJKCh4KSA+PiBQQUdFX1NISUZUKQotI2RlZmluZSBQRk5fUEhZUyh4KQkoKHgpIDw8IFBBR0VfU0hJRlQpCisjZGVmaW5lIFBGTl9QSFlTKHgpCSgocGh5c19hZGRyX3QpKHgpIDw8IFBBR0VfU0hJRlQpCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9waWRfbmFtZXNwYWNlLmggYi9pbmNsdWRlL2xpbnV4L3BpZF9uYW1lc3BhY2UuaAppbmRleCAxYWY4MmM0Li5kODJmZTgyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BpZF9uYW1lc3BhY2UuaAorKysgYi9pbmNsdWRlL2xpbnV4L3BpZF9uYW1lc3BhY2UuaApAQCAtODQsMTIgKzg0LDYgQEAKIAlyZXR1cm4gdHNrLT5uc3Byb3h5LT5waWRfbnM7CiB9CiAKLXN0YXRpYyBpbmxpbmUgc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrX2NoaWxkX3JlYXBlcihzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykKLXsKLQlCVUdfT04odHNrICE9IGN1cnJlbnQpOwotCXJldHVybiB0c2stPm5zcHJveHktPnBpZF9ucy0+Y2hpbGRfcmVhcGVyOwotfQotCiB2b2lkIHBpZGhhc2hfaW5pdCh2b2lkKTsKIHZvaWQgcGlkbWFwX2luaXQodm9pZCk7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGxhdGZvcm1fZGV2aWNlLmggYi9pbmNsdWRlL2xpbnV4L3BsYXRmb3JtX2RldmljZS5oCmluZGV4IDk1YWMyMWEuLjRiOGNjNmEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcGxhdGZvcm1fZGV2aWNlLmgKKysrIGIvaW5jbHVkZS9saW51eC9wbGF0Zm9ybV9kZXZpY2UuaApAQCAtMzcsNiArMzcsOCBAQAogCiBleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyX3NpbXBsZShjb25zdCBjaGFyICosIGludCBpZCwKIAkJCQkJc3RydWN0IHJlc291cmNlICosIHVuc2lnbmVkIGludCk7CitleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyX2RhdGEoc3RydWN0IGRldmljZSAqLAorCQljb25zdCBjaGFyICosIGludCwgY29uc3Qgdm9pZCAqLCBzaXplX3QpOwogCiBleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGxhdGZvcm1fZGV2aWNlX2FsbG9jKGNvbnN0IGNoYXIgKm5hbWUsIGludCBpZCk7CiBleHRlcm4gaW50IHBsYXRmb3JtX2RldmljZV9hZGRfcmVzb3VyY2VzKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIHN0cnVjdCByZXNvdXJjZSAqcmVzLCB1bnNpZ25lZCBpbnQgbnVtKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcG0uaCBiL2luY2x1ZGUvbGludXgvcG0uaAppbmRleCA0ZGNjZTU0Li40MmRlNDAwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BtLmgKKysrIGIvaW5jbHVkZS9saW51eC9wbS5oCkBAIC00MTksNyArNDE5LDcgQEAKIAogI2RlZmluZSBzdXNwZW5kX3JlcG9ydF9yZXN1bHQoZm4sIHJldCkJCQkJCVwKIAlkbyB7CQkJCQkJCQlcCi0JCV9fc3VzcGVuZF9yZXBvcnRfcmVzdWx0KF9fRlVOQ1RJT05fXywgZm4sIHJldCk7CQlcCisJCV9fc3VzcGVuZF9yZXBvcnRfcmVzdWx0KF9fZnVuY19fLCBmbiwgcmV0KTsJCVwKIAl9IHdoaWxlICgwKQogCiAjZWxzZSAvKiAhQ09ORklHX1BNX1NMRUVQICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BucC5oIGIvaW5jbHVkZS9saW51eC9wbnAuaAppbmRleCBiZTc2NGU1Li41M2I3MGZkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BucC5oCisrKyBiL2luY2x1ZGUvbGludXgvcG5wLmgKQEAgLTIyLDkgKzIyLDExIEBACiAgKiBSZXNvdXJjZSBNYW5hZ2VtZW50CiAgKi8KICNpZmRlZiBDT05GSUdfUE5QCi1zdHJ1Y3QgcmVzb3VyY2UgKnBucF9nZXRfcmVzb3VyY2Uoc3RydWN0IHBucF9kZXYgKiwgdW5zaWduZWQgaW50LCB1bnNpZ25lZCBpbnQpOworc3RydWN0IHJlc291cmNlICpwbnBfZ2V0X3Jlc291cmNlKHN0cnVjdCBwbnBfZGV2ICpkZXYsIHVuc2lnbmVkIGxvbmcgdHlwZSwKKwkJCQl1bnNpZ25lZCBpbnQgbnVtKTsKICNlbHNlCi1zdGF0aWMgaW5saW5lIHN0cnVjdCByZXNvdXJjZSAqcG5wX2dldF9yZXNvdXJjZShzdHJ1Y3QgcG5wX2RldiAqZGV2LCB1bnNpZ25lZCBpbnQgdHlwZSwgdW5zaWduZWQgaW50IG51bSkKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHJlc291cmNlICpwbnBfZ2V0X3Jlc291cmNlKHN0cnVjdCBwbnBfZGV2ICpkZXYsCisJCQl1bnNpZ25lZCBsb25nIHR5cGUsIHVuc2lnbmVkIGludCBudW0pCiB7CiAJcmV0dXJuIE5VTEw7CiB9CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3Bvc2l4LXRpbWVycy5oIGIvaW5jbHVkZS9saW51eC9wb3NpeC10aW1lcnMuaAppbmRleCBhN2RkMzhmLi5hN2M3MjEzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3Bvc2l4LXRpbWVycy5oCisrKyBiL2luY2x1ZGUvbGludXgvcG9zaXgtdGltZXJzLmgKQEAgLTQ1LDggKzQ1LDYgQEAKIAlpbnQgaXRfcmVxdWV1ZV9wZW5kaW5nOwkJLyogd2FpdGluZyB0byByZXF1ZXVlIHRoaXMgdGltZXIgKi8KICNkZWZpbmUgUkVRVUVVRV9QRU5ESU5HIDEKIAlpbnQgaXRfc2lnZXZfbm90aWZ5OwkJLyogbm90aWZ5IHdvcmQgb2Ygc2lnZXZlbnQgc3RydWN0ICovCi0JaW50IGl0X3NpZ2V2X3NpZ25vOwkJLyogc2lnbm8gd29yZCBvZiBzaWdldmVudCBzdHJ1Y3QgKi8KLQlzaWd2YWxfdCBpdF9zaWdldl92YWx1ZTsJLyogdmFsdWUgd29yZCBvZiBzaWdldmVudCBzdHJ1Y3QgKi8KIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKml0X3Byb2Nlc3M7CS8qIHByb2Nlc3MgdG8gc2VuZCBzaWduYWwgdG8gKi8KIAlzdHJ1Y3Qgc2lncXVldWUgKnNpZ3E7CQkvKiBzaWduYWwgcXVldWUgZW50cnkuICovCiAJdW5pb24gewpAQCAtMTE1LDQgKzExMyw2IEBACiAKIGxvbmcgY2xvY2tfbmFub3NsZWVwX3Jlc3RhcnQoc3RydWN0IHJlc3RhcnRfYmxvY2sgKnJlc3RhcnRfYmxvY2spOwogCit2b2lkIHVwZGF0ZV9ybGltaXRfY3B1KHVuc2lnbmVkIGxvbmcgcmxpbV9uZXcpOworCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcG93ZXJfc3VwcGx5LmggYi9pbmNsdWRlL2xpbnV4L3Bvd2VyX3N1cHBseS5oCmluZGV4IGVhOTZlYWQuLmY5MzQ4Y2IgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcG93ZXJfc3VwcGx5LmgKKysrIGIvaW5jbHVkZS9saW51eC9wb3dlcl9zdXBwbHkuaApAQCAtMTY1LDYgKzE2NSwxMiBAQAogZXh0ZXJuIHZvaWQgcG93ZXJfc3VwcGx5X2NoYW5nZWQoc3RydWN0IHBvd2VyX3N1cHBseSAqcHN5KTsKIGV4dGVybiBpbnQgcG93ZXJfc3VwcGx5X2FtX2lfc3VwcGxpZWQoc3RydWN0IHBvd2VyX3N1cHBseSAqcHN5KTsKIAorI2lmIGRlZmluZWQoQ09ORklHX1BPV0VSX1NVUFBMWSkgfHwgZGVmaW5lZChDT05GSUdfUE9XRVJfU1VQUExZX01PRFVMRSkKK2V4dGVybiBpbnQgcG93ZXJfc3VwcGx5X2lzX3N5c3RlbV9zdXBwbGllZCh2b2lkKTsKKyNlbHNlCitzdGF0aWMgaW5saW5lIGludCBwb3dlcl9zdXBwbHlfaXNfc3lzdGVtX3N1cHBsaWVkKHZvaWQpIHsgcmV0dXJuIC1FTk9TWVM7IH0KKyNlbmRpZgorCiBleHRlcm4gaW50IHBvd2VyX3N1cHBseV9yZWdpc3RlcihzdHJ1Y3QgZGV2aWNlICpwYXJlbnQsCiAJCQkJIHN0cnVjdCBwb3dlcl9zdXBwbHkgKnBzeSk7CiBleHRlcm4gdm9pZCBwb3dlcl9zdXBwbHlfdW5yZWdpc3RlcihzdHJ1Y3QgcG93ZXJfc3VwcGx5ICpwc3kpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wcm9jX2ZzLmggYi9pbmNsdWRlL2xpbnV4L3Byb2NfZnMuaAppbmRleCBmYjYxODUwLi4yN2Q1MzRmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3Byb2NfZnMuaAorKysgYi9pbmNsdWRlL2xpbnV4L3Byb2NfZnMuaApAQCAtMTM5LDcgKzEzOSw2IEBACiBleHRlcm4gc3RydWN0IGRlbnRyeSAqcHJvY19sb29rdXAoc3RydWN0IGlub2RlICosIHN0cnVjdCBkZW50cnkgKiwgc3RydWN0IG5hbWVpZGF0YSAqKTsKIAogZXh0ZXJuIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcHJvY19rY29yZV9vcGVyYXRpb25zOwotZXh0ZXJuIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcHBjX2h0YWJfb3BlcmF0aW9uczsKIAogZXh0ZXJuIGludCBwaWRfbnNfcHJlcGFyZV9wcm9jKHN0cnVjdCBwaWRfbmFtZXNwYWNlICpucyk7CiBleHRlcm4gdm9pZCBwaWRfbnNfcmVsZWFzZV9wcm9jKHN0cnVjdCBwaWRfbmFtZXNwYWNlICpucyk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3Byb2ZpbGUuaCBiL2luY2x1ZGUvbGludXgvcHJvZmlsZS5oCmluZGV4IDdlNzA4NzIuLjU3MDA0NTAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcHJvZmlsZS5oCisrKyBiL2luY2x1ZGUvbGludXgvcHJvZmlsZS5oCkBAIC0zNSw3ICszNSw5IEBACiBleHRlcm4gaW50IHByb2Zfb24gX19yZWFkX21vc3RseTsKIAogLyogaW5pdCBiYXNpYyBrZXJuZWwgcHJvZmlsZXIgKi8KLXZvaWQgX19pbml0IHByb2ZpbGVfaW5pdCh2b2lkKTsKK2ludCBwcm9maWxlX2luaXQodm9pZCk7CitpbnQgcHJvZmlsZV9zZXR1cChjaGFyICpzdHIpOworaW50IGNyZWF0ZV9wcm9jX3Byb2ZpbGUodm9pZCk7CiB2b2lkIHByb2ZpbGVfdGljayhpbnQgdHlwZSk7CiAKIC8qCkBAIC04NCw5ICs4Niw5IEBACiAKICNkZWZpbmUgcHJvZl9vbiAwCiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBwcm9maWxlX2luaXQodm9pZCkKK3N0YXRpYyBpbmxpbmUgaW50IHByb2ZpbGVfaW5pdCh2b2lkKQogewotCXJldHVybjsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIHByb2ZpbGVfdGljayhpbnQgdHlwZSkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcHRyYWNlLmggYi9pbmNsdWRlL2xpbnV4L3B0cmFjZS5oCmluZGV4IGVhNzQxNmMuLjIyNjQxZDUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcHRyYWNlLmgKKysrIGIvaW5jbHVkZS9saW51eC9wdHJhY2UuaApAQCAtOTQsNyArOTQsNiBAQAogZXh0ZXJuIHZvaWQgX19wdHJhY2VfbGluayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKmNoaWxkLAogCQkJICBzdHJ1Y3QgdGFza19zdHJ1Y3QgKm5ld19wYXJlbnQpOwogZXh0ZXJuIHZvaWQgX19wdHJhY2VfdW5saW5rKHN0cnVjdCB0YXNrX3N0cnVjdCAqY2hpbGQpOwotZXh0ZXJuIHZvaWQgcHRyYWNlX3VudHJhY2Uoc3RydWN0IHRhc2tfc3RydWN0ICpjaGlsZCk7CiAjZGVmaW5lIFBUUkFDRV9NT0RFX1JFQUQgICAxCiAjZGVmaW5lIFBUUkFDRV9NT0RFX0FUVEFDSCAyCiAvKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgLWVycm5vIG9uIGRlbmlhbC4gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcXVvdGEuaCBiL2luY2x1ZGUvbGludXgvcXVvdGEuaAppbmRleCAzNzZhMDUwLi40MDQwMWI1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3F1b3RhLmgKKysrIGIvaW5jbHVkZS9saW51eC9xdW90YS5oCkBAIC0yOCw4ICsyOCw2IEBACiAgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCiAgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCiAgKiBTVUNIIERBTUFHRS4KLSAqCi0gKiBWZXJzaW9uOiAkSWQ6IHF1b3RhLmgsdiAyLjAgMTk5Ni8xMS8xNyAxNjo0ODoxNCBtdncgRXhwIG12dyAkCiAgKi8KIAogI2lmbmRlZiBfTElOVVhfUVVPVEFfCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3F1b3Rhb3BzLmggYi9pbmNsdWRlL2xpbnV4L3F1b3Rhb3BzLmgKaW5kZXggY2E2YjliNS4uYTU1OGE0YyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9xdW90YW9wcy5oCisrKyBiL2luY2x1ZGUvbGludXgvcXVvdGFvcHMuaApAQCAtMyw5ICszLDYgQEAKICAqIG1hY3JvcyBleHBhbmQgdG8gdGhlIHJpZ2h0IHNvdXJjZS1jb2RlLgogICoKICAqIEF1dGhvcjogIE1hcmNvIHZhbiBXaWVyaW5nZW4gPG12d0BwbGFuZXRzLmVsbS5uZXQ+Ci0gKgotICogVmVyc2lvbjogJElkOiBxdW90YW9wcy5oLHYgMS4yIDE5OTgvMDEvMTUgMTY6MjI6MjYgZWNkIEV4cCAkCi0gKgogICovCiAjaWZuZGVmIF9MSU5VWF9RVU9UQU9QU18KICNkZWZpbmUgX0xJTlVYX1FVT1RBT1BTXwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9yYWlkL2xpbmVhci5oIGIvaW5jbHVkZS9saW51eC9yYWlkL2xpbmVhci5oCmluZGV4IDdlMzc1MTEuLmYzOGI5YzUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcmFpZC9saW5lYXIuaAorKysgYi9pbmNsdWRlL2xpbnV4L3JhaWQvbGluZWFyLmgKQEAgLTUsOCArNSw4IEBACiAKIHN0cnVjdCBkZXZfaW5mbyB7CiAJbWRrX3JkZXZfdAkqcmRldjsKLQlzZWN0b3JfdAlzaXplOwotCXNlY3Rvcl90CW9mZnNldDsKKwlzZWN0b3JfdAludW1fc2VjdG9yczsKKwlzZWN0b3JfdAlzdGFydF9zZWN0b3I7CiB9OwogCiB0eXBlZGVmIHN0cnVjdCBkZXZfaW5mbyBkZXZfaW5mb190OwpAQCAtMTUsOSArMTUsMTEgQEAKIHsKIAlzdHJ1Y3QgbGluZWFyX3ByaXZhdGVfZGF0YSAqcHJldjsJLyogZWFybGllciB2ZXJzaW9uICovCiAJZGV2X2luZm9fdAkJKipoYXNoX3RhYmxlOwotCXNlY3Rvcl90CQloYXNoX3NwYWNpbmc7CisJc2VjdG9yX3QJCXNwYWNpbmc7CiAJc2VjdG9yX3QJCWFycmF5X3NlY3RvcnM7Ci0JaW50CQkJcHJlc2hpZnQ7IC8qIHNoaWZ0IGJlZm9yZSBkaXZpZGluZyBieSBoYXNoX3NwYWNpbmcgKi8KKwlpbnQJCQlzZWN0b3Jfc2hpZnQ7CS8qIHNoaWZ0IGJlZm9yZSBkaXZpZGluZworCQkJCQkJICogYnkgc3BhY2luZworCQkJCQkJICovCiAJZGV2X2luZm9fdAkJZGlza3NbMF07CiB9OwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3JhaWQvbWQuaCBiL2luY2x1ZGUvbGludXgvcmFpZC9tZC5oCmluZGV4IGRjMGUzZmMuLjgyYmVhMTQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcmFpZC9tZC5oCisrKyBiL2luY2x1ZGUvbGludXgvcmFpZC9tZC5oCkBAIC0xOSwyNyArMTksNyBAQAogI2RlZmluZSBfTURfSAogCiAjaW5jbHVkZSA8bGludXgvYmxrZGV2Lmg+Ci0jaW5jbHVkZSA8bGludXgvbWFqb3IuaD4KLSNpbmNsdWRlIDxsaW51eC9pb2N0bC5oPgotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8bGludXgvYml0b3BzLmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvaGRyZWcuaD4KLSNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KLSNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgotI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Ci0jaW5jbHVkZSA8bmV0L2NoZWNrc3VtLmg+Ci0jaW5jbHVkZSA8bGludXgvcmFuZG9tLmg+Ci0jaW5jbHVkZSA8bGludXgva2VybmVsX3N0YXQuaD4KLSNpbmNsdWRlIDxhc20vaW8uaD4KLSNpbmNsdWRlIDxsaW51eC9jb21wbGV0aW9uLmg+Ci0jaW5jbHVkZSA8bGludXgvbWVtcG9vbC5oPgotI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KLSNpbmNsdWRlIDxsaW51eC9yZWJvb3QuaD4KLSNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+Ci0jaW5jbHVkZSA8bGludXgvYmxrcGcuaD4KLSNpbmNsdWRlIDxsaW51eC9iaW8uaD4KIAogLyoKICAqICdtZF9wLmgnIGhvbGRzIHRoZSAncGh5c2ljYWwnIGxheW91dCBvZiBSQUlEIGRldmljZXMKQEAgLTc0LDE5ICs1NCwxNyBAQAogCiBleHRlcm4gaW50IG1kcF9tYWpvcjsKIAotZXh0ZXJuIGludCByZWdpc3Rlcl9tZF9wZXJzb25hbGl0eSAoc3RydWN0IG1ka19wZXJzb25hbGl0eSAqcCk7Ci1leHRlcm4gaW50IHVucmVnaXN0ZXJfbWRfcGVyc29uYWxpdHkgKHN0cnVjdCBtZGtfcGVyc29uYWxpdHkgKnApOwotZXh0ZXJuIG1ka190aHJlYWRfdCAqIG1kX3JlZ2lzdGVyX3RocmVhZCAodm9pZCAoKnJ1bikgKG1kZGV2X3QgKm1kZGV2KSwKK2V4dGVybiBpbnQgcmVnaXN0ZXJfbWRfcGVyc29uYWxpdHkoc3RydWN0IG1ka19wZXJzb25hbGl0eSAqcCk7CitleHRlcm4gaW50IHVucmVnaXN0ZXJfbWRfcGVyc29uYWxpdHkoc3RydWN0IG1ka19wZXJzb25hbGl0eSAqcCk7CitleHRlcm4gbWRrX3RocmVhZF90ICogbWRfcmVnaXN0ZXJfdGhyZWFkKHZvaWQgKCpydW4pIChtZGRldl90ICptZGRldiksCiAJCQkJbWRkZXZfdCAqbWRkZXYsIGNvbnN0IGNoYXIgKm5hbWUpOwotZXh0ZXJuIHZvaWQgbWRfdW5yZWdpc3Rlcl90aHJlYWQgKG1ka190aHJlYWRfdCAqdGhyZWFkKTsKK2V4dGVybiB2b2lkIG1kX3VucmVnaXN0ZXJfdGhyZWFkKG1ka190aHJlYWRfdCAqdGhyZWFkKTsKIGV4dGVybiB2b2lkIG1kX3dha2V1cF90aHJlYWQobWRrX3RocmVhZF90ICp0aHJlYWQpOwogZXh0ZXJuIHZvaWQgbWRfY2hlY2tfcmVjb3ZlcnkobWRkZXZfdCAqbWRkZXYpOwogZXh0ZXJuIHZvaWQgbWRfd3JpdGVfc3RhcnQobWRkZXZfdCAqbWRkZXYsIHN0cnVjdCBiaW8gKmJpKTsKIGV4dGVybiB2b2lkIG1kX3dyaXRlX2VuZChtZGRldl90ICptZGRldik7Ci1leHRlcm4gdm9pZCBtZF9oYW5kbGVfc2FmZW1vZGUobWRkZXZfdCAqbWRkZXYpOwogZXh0ZXJuIHZvaWQgbWRfZG9uZV9zeW5jKG1kZGV2X3QgKm1kZGV2LCBpbnQgYmxvY2tzLCBpbnQgb2spOwotZXh0ZXJuIHZvaWQgbWRfZXJyb3IgKG1kZGV2X3QgKm1kZGV2LCBtZGtfcmRldl90ICpyZGV2KTsKLWV4dGVybiB2b2lkIG1kX3VucGx1Z19tZGRldihtZGRldl90ICptZGRldik7CitleHRlcm4gdm9pZCBtZF9lcnJvcihtZGRldl90ICptZGRldiwgbWRrX3JkZXZfdCAqcmRldik7CiAKIGV4dGVybiB2b2lkIG1kX3N1cGVyX3dyaXRlKG1kZGV2X3QgKm1kZGV2LCBtZGtfcmRldl90ICpyZGV2LAogCQkJICAgc2VjdG9yX3Qgc2VjdG9yLCBpbnQgc2l6ZSwgc3RydWN0IHBhZ2UgKnBhZ2UpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9yZWd1bGF0b3IvZHJpdmVyLmggYi9pbmNsdWRlL2xpbnV4L3JlZ3VsYXRvci9kcml2ZXIuaAppbmRleCAxZDcxMmM3Li5lMzdkODA1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3JlZ3VsYXRvci9kcml2ZXIuaAorKysgYi9pbmNsdWRlL2xpbnV4L3JlZ3VsYXRvci9kcml2ZXIuaApAQCAtMTgsOCArMTgsOCBAQAogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L3JlZ3VsYXRvci9jb25zdW1lci5oPgogCi1zdHJ1Y3QgcmVndWxhdG9yX2NvbnN0cmFpbnRzOwogc3RydWN0IHJlZ3VsYXRvcl9kZXY7CitzdHJ1Y3QgcmVndWxhdG9yX2luaXRfZGF0YTsKIAogLyoqCiAgKiBzdHJ1Y3QgcmVndWxhdG9yX29wcyAtIHJlZ3VsYXRvciBvcGVyYXRpb25zLgpAQCAtNTEsNyArNTEsNyBAQAogCQkJCQkgIGludCBvdXRwdXRfdVYsIGludCBsb2FkX3VBKTsKIAogCS8qIHRoZSBvcGVyYXRpb25zIGJlbG93IGFyZSBmb3IgY29uZmlndXJhdGlvbiBvZiByZWd1bGF0b3Igc3RhdGUgd2hlbgotCSAqIGl0J3MgcGFyZW50IFBNSUMgZW50ZXJzIGEgZ2xvYmFsIFNUQU5CWS9ISUJFUk5BVEUgc3RhdGUgKi8KKwkgKiBpdHMgcGFyZW50IFBNSUMgZW50ZXJzIGEgZ2xvYmFsIFNUQU5EQlkvSElCRVJOQVRFIHN0YXRlICovCiAKIAkvKiBzZXQgcmVndWxhdG9yIHN1c3BlbmQgdm9sdGFnZSAqLwogCWludCAoKnNldF9zdXNwZW5kX3ZvbHRhZ2UpIChzdHJ1Y3QgcmVndWxhdG9yX2RldiAqLCBpbnQgdVYpOwpAQCAtODUsMTUgKzg1LDE3IEBACiAJc3RydWN0IG1vZHVsZSAqb3duZXI7CiB9OwogCi0KIHN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZWd1bGF0b3JfcmVnaXN0ZXIoc3RydWN0IHJlZ3VsYXRvcl9kZXNjICpyZWd1bGF0b3JfZGVzYywKLQkJCQkJICB2b2lkICpyZWdfZGF0YSk7CisJc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkcml2ZXJfZGF0YSk7CiB2b2lkIHJlZ3VsYXRvcl91bnJlZ2lzdGVyKHN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2KTsKIAogaW50IHJlZ3VsYXRvcl9ub3RpZmllcl9jYWxsX2NoYWluKHN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2LAogCQkJCSAgdW5zaWduZWQgbG9uZyBldmVudCwgdm9pZCAqZGF0YSk7CiAKIHZvaWQgKnJkZXZfZ2V0X2RydmRhdGEoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYpOworc3RydWN0IGRldmljZSAqcmRldl9nZXRfZGV2KHN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2KTsKIGludCByZGV2X2dldF9pZChzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldik7CiAKK3ZvaWQgKnJlZ3VsYXRvcl9nZXRfaW5pdF9kcnZkYXRhKHN0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhICpyZWdfaW5pdF9kYXRhKTsKKwogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3JlZ3VsYXRvci9tYWNoaW5lLmggYi9pbmNsdWRlL2xpbnV4L3JlZ3VsYXRvci9tYWNoaW5lLmgKaW5kZXggMTFlNzM3ZC4uYzZkNjkzMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9yZWd1bGF0b3IvbWFjaGluZS5oCisrKyBiL2luY2x1ZGUvbGludXgvcmVndWxhdG9yL21hY2hpbmUuaApAQCAtODksMTUgKzg5LDMzIEBACiAJdW5zaWduZWQgYXBwbHlfdVY6MTsJLyogYXBwbHkgdVYgY29uc3RyYWludCBpZmYgbWluID09IG1heCAqLwogfTsKIAotaW50IHJlZ3VsYXRvcl9zZXRfc3VwcGx5KGNvbnN0IGNoYXIgKnJlZ3VsYXRvciwgY29uc3QgY2hhciAqcmVndWxhdG9yX3N1cHBseSk7CisvKioKKyAqIHN0cnVjdCByZWd1bGF0b3JfY29uc3VtZXJfc3VwcGx5IC0gc3VwcGx5IC0+IGRldmljZSBtYXBwaW5nCisgKgorICogVGhpcyBtYXBzIGEgc3VwcGx5IG5hbWUgdG8gYSBkZXZpY2UuCisgKi8KK3N0cnVjdCByZWd1bGF0b3JfY29uc3VtZXJfc3VwcGx5IHsKKwlzdHJ1Y3QgZGV2aWNlICpkZXY7CS8qIGNvbnN1bWVyICovCisJY29uc3QgY2hhciAqc3VwcGx5OwkvKiBjb25zdW1lciBzdXBwbHkgLSBlLmcuICJ2Y2MiICovCit9OwogCi1jb25zdCBjaGFyICpyZWd1bGF0b3JfZ2V0X3N1cHBseShjb25zdCBjaGFyICpyZWd1bGF0b3IpOworLyoqCisgKiBzdHJ1Y3QgcmVndWxhdG9yX2luaXRfZGF0YSAtIHJlZ3VsYXRvciBwbGF0Zm9ybSBpbml0aWFsaXNhdGlvbiBkYXRhLgorICoKKyAqIEluaXRpYWxpc2F0aW9uIGNvbnN0cmFpbnRzLCBvdXIgc3VwcGx5IGFuZCBjb25zdW1lcnMgc3VwcGxpZXMuCisgKi8KK3N0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhIHsKKwlzdHJ1Y3QgZGV2aWNlICpzdXBwbHlfcmVndWxhdG9yX2RldjsgLyogb3IgTlVMTCBmb3IgTElORSAqLwogCi1pbnQgcmVndWxhdG9yX3NldF9tYWNoaW5lX2NvbnN0cmFpbnRzKGNvbnN0IGNoYXIgKnJlZ3VsYXRvciwKLQlzdHJ1Y3QgcmVndWxhdGlvbl9jb25zdHJhaW50cyAqY29uc3RyYWludHMpOworCXN0cnVjdCByZWd1bGF0aW9uX2NvbnN0cmFpbnRzIGNvbnN0cmFpbnRzOwogCi1pbnQgcmVndWxhdG9yX3NldF9kZXZpY2Vfc3VwcGx5KGNvbnN0IGNoYXIgKnJlZ3VsYXRvciwgc3RydWN0IGRldmljZSAqZGV2LAotCQkJCWNvbnN0IGNoYXIgKnN1cHBseSk7CisJaW50IG51bV9jb25zdW1lcl9zdXBwbGllczsKKwlzdHJ1Y3QgcmVndWxhdG9yX2NvbnN1bWVyX3N1cHBseSAqY29uc3VtZXJfc3VwcGxpZXM7CisKKwkvKiBvcHRpb25hbCByZWd1bGF0b3IgbWFjaGluZSBzcGVjaWZpYyBpbml0ICovCisJaW50ICgqcmVndWxhdG9yX2luaXQpKHZvaWQgKmRyaXZlcl9kYXRhKTsKKwl2b2lkICpkcml2ZXJfZGF0YTsJLyogY29yZSBkb2VzIG5vdCB0b3VjaCB0aGlzICovCit9OwogCiBpbnQgcmVndWxhdG9yX3N1c3BlbmRfcHJlcGFyZShzdXNwZW5kX3N0YXRlX3Qgc3RhdGUpOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3JlaXNlcmZzX2ZzLmggYi9pbmNsdWRlL2xpbnV4L3JlaXNlcmZzX2ZzLmgKaW5kZXggZTk5NjNhZi4uYmM1MTE0ZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9yZWlzZXJmc19mcy5oCisrKyBiL2luY2x1ZGUvbGludXgvcmVpc2VyZnNfZnMuaApAQCAtODcsNyArODcsNyBAQAogaWYoICEoIGNvbmQgKSApIAkJCQkJCQkJXAogICByZWlzZXJmc19wYW5pYyggTlVMTCwgInJlaXNlcmZzWyVpXTogYXNzZXJ0aW9uICIgc2NvbmQgIiBmYWlsZWQgYXQgIglcCiAJCSAgX19GSUxFX18gIjolaTolczogIiBmb3JtYXQgIlxuIiwJCVwKLQkJICBpbl9pbnRlcnJ1cHQoKSA/IC0xIDogdGFza19waWRfbnIoY3VycmVudCksIF9fTElORV9fICwgX19GVU5DVElPTl9fICwgIyNhcmdzICkKKwkJICBpbl9pbnRlcnJ1cHQoKSA/IC0xIDogdGFza19waWRfbnIoY3VycmVudCksIF9fTElORV9fICwgX19mdW5jX18gLCAjI2FyZ3MgKQogCiAjZGVmaW5lIFJBU1NFUlQoY29uZCwgZm9ybWF0LCBhcmdzLi4uKSBfX1JBU1NFUlQoY29uZCwgI2NvbmQsIGZvcm1hdCwgIyNhcmdzKQogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3JtYXAuaCBiL2luY2x1ZGUvbGludXgvcm1hcC5oCmluZGV4IGZlZDZmNWUuLjg5ZjA1NjQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcm1hcC5oCisrKyBiL2luY2x1ZGUvbGludXgvcm1hcC5oCkBAIC0zOSwxOCArMzksNiBAQAogCiAjaWZkZWYgQ09ORklHX01NVQogCi1leHRlcm4gc3RydWN0IGttZW1fY2FjaGUgKmFub25fdm1hX2NhY2hlcDsKLQotc3RhdGljIGlubGluZSBzdHJ1Y3QgYW5vbl92bWEgKmFub25fdm1hX2FsbG9jKHZvaWQpCi17Ci0JcmV0dXJuIGttZW1fY2FjaGVfYWxsb2MoYW5vbl92bWFfY2FjaGVwLCBHRlBfS0VSTkVMKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGFub25fdm1hX2ZyZWUoc3RydWN0IGFub25fdm1hICphbm9uX3ZtYSkKLXsKLQlrbWVtX2NhY2hlX2ZyZWUoYW5vbl92bWFfY2FjaGVwLCBhbm9uX3ZtYSk7Ci19Ci0KIHN0YXRpYyBpbmxpbmUgdm9pZCBhbm9uX3ZtYV9sb2NrKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQogewogCXN0cnVjdCBhbm9uX3ZtYSAqYW5vbl92bWEgPSB2bWEtPmFub25fdm1hOwpAQCAtNzUsNiArNjMsOSBAQAogdm9pZCBhbm9uX3ZtYV9saW5rKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqKTsKIHZvaWQgX19hbm9uX3ZtYV9saW5rKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqKTsKIAorZXh0ZXJuIHN0cnVjdCBhbm9uX3ZtYSAqcGFnZV9sb2NrX2Fub25fdm1hKHN0cnVjdCBwYWdlICpwYWdlKTsKK2V4dGVybiB2b2lkIHBhZ2VfdW5sb2NrX2Fub25fdm1hKHN0cnVjdCBhbm9uX3ZtYSAqYW5vbl92bWEpOworCiAvKgogICogcm1hcCBpbnRlcmZhY2VzIGNhbGxlZCB3aGVuIGFkZGluZyBvciByZW1vdmluZyBwdGUgb2YgcGFnZQogICovCkBAIC0xMTcsNiArMTA4LDE5IEBACiAgKi8KIGludCBwYWdlX21rY2xlYW4oc3RydWN0IHBhZ2UgKik7CiAKKyNpZmRlZiBDT05GSUdfVU5FVklDVEFCTEVfTFJVCisvKgorICogY2FsbGVkIGluIG11bmxvY2soKS9tdW5tYXAoKSBwYXRoIHRvIGNoZWNrIGZvciBvdGhlciB2bWFzIGhvbGRpbmcKKyAqIHRoZSBwYWdlIG1sb2NrZWQuCisgKi8KK2ludCB0cnlfdG9fbXVubG9jayhzdHJ1Y3QgcGFnZSAqKTsKKyNlbHNlCitzdGF0aWMgaW5saW5lIGludCB0cnlfdG9fbXVubG9jayhzdHJ1Y3QgcGFnZSAqcGFnZSkKK3sKKwlyZXR1cm4gMDsJLyogYS5rLmEuIFNXQVBfU1VDQ0VTUyAqLworfQorI2VuZGlmCisKICNlbHNlCS8qICFDT05GSUdfTU1VICovCiAKICNkZWZpbmUgYW5vbl92bWFfaW5pdCgpCQlkbyB7fSB3aGlsZSAoMCkKQEAgLTE0MCw1ICsxNDQsNiBAQAogI2RlZmluZSBTV0FQX1NVQ0NFU1MJMAogI2RlZmluZSBTV0FQX0FHQUlOCTEKICNkZWZpbmUgU1dBUF9GQUlMCTIKKyNkZWZpbmUgU1dBUF9NTE9DSwkzCiAKICNlbmRpZgkvKiBfTElOVVhfUk1BUF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3J0bXV0ZXguaCBiL2luY2x1ZGUvbGludXgvcnRtdXRleC5oCmluZGV4IDM4MmJiNzkuLmYxOWIwMGIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcnRtdXRleC5oCisrKyBiL2luY2x1ZGUvbGludXgvcnRtdXRleC5oCkBAIC01NCw3ICs1NCw3IEBACiAjaWZkZWYgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMKICMgZGVmaW5lIF9fREVCVUdfUlRfTVVURVhfSU5JVElBTElaRVIobXV0ZXhuYW1lKSBcCiAJLCAubmFtZSA9ICNtdXRleG5hbWUsIC5maWxlID0gX19GSUxFX18sIC5saW5lID0gX19MSU5FX18KLSMgZGVmaW5lIHJ0X211dGV4X2luaXQobXV0ZXgpCQkJX19ydF9tdXRleF9pbml0KG11dGV4LCBfX0ZVTkNUSU9OX18pCisjIGRlZmluZSBydF9tdXRleF9pbml0KG11dGV4KQkJCV9fcnRfbXV0ZXhfaW5pdChtdXRleCwgX19mdW5jX18pCiAgZXh0ZXJuIHZvaWQgcnRfbXV0ZXhfZGVidWdfdGFza19mcmVlKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKTsKICNlbHNlCiAjIGRlZmluZSBfX0RFQlVHX1JUX01VVEVYX0lOSVRJQUxJWkVSKG11dGV4bmFtZSkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2NoZWQuaCBiL2luY2x1ZGUvbGludXgvc2NoZWQuaAppbmRleCBjMjI2YzdiLi41YzM4ZGI1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NjaGVkLmgKKysrIGIvaW5jbHVkZS9saW51eC9zY2hlZC5oCkBAIC00MDMsMTIgKzQwMywyMSBAQAogI2RlZmluZSBNTUZfRFVNUF9NQVBQRURfUFJJVkFURQk0CiAjZGVmaW5lIE1NRl9EVU1QX01BUFBFRF9TSEFSRUQJNQogI2RlZmluZSBNTUZfRFVNUF9FTEZfSEVBREVSUwk2CisjZGVmaW5lIE1NRl9EVU1QX0hVR0VUTEJfUFJJVkFURSA3CisjZGVmaW5lIE1NRl9EVU1QX0hVR0VUTEJfU0hBUkVEICA4CiAjZGVmaW5lIE1NRl9EVU1QX0ZJTFRFUl9TSElGVAlNTUZfRFVNUEFCTEVfQklUUwotI2RlZmluZSBNTUZfRFVNUF9GSUxURVJfQklUUwk1CisjZGVmaW5lIE1NRl9EVU1QX0ZJTFRFUl9CSVRTCTcKICNkZWZpbmUgTU1GX0RVTVBfRklMVEVSX01BU0sgXAogCSgoKDEgPDwgTU1GX0RVTVBfRklMVEVSX0JJVFMpIC0gMSkgPDwgTU1GX0RVTVBfRklMVEVSX1NISUZUKQogI2RlZmluZSBNTUZfRFVNUF9GSUxURVJfREVGQVVMVCBcCi0JKCgxIDw8IE1NRl9EVU1QX0FOT05fUFJJVkFURSkgfAkoMSA8PCBNTUZfRFVNUF9BTk9OX1NIQVJFRCkpCisJKCgxIDw8IE1NRl9EVU1QX0FOT05fUFJJVkFURSkgfAkoMSA8PCBNTUZfRFVNUF9BTk9OX1NIQVJFRCkgfFwKKwkgKDEgPDwgTU1GX0RVTVBfSFVHRVRMQl9QUklWQVRFKSB8IE1NRl9EVU1QX01BU0tfREVGQVVMVF9FTEYpCisKKyNpZmRlZiBDT05GSUdfQ09SRV9EVU1QX0RFRkFVTFRfRUxGX0hFQURFUlMKKyMgZGVmaW5lIE1NRl9EVU1QX01BU0tfREVGQVVMVF9FTEYJKDEgPDwgTU1GX0RVTVBfRUxGX0hFQURFUlMpCisjZWxzZQorIyBkZWZpbmUgTU1GX0RVTVBfTUFTS19ERUZBVUxUX0VMRgkwCisjZW5kaWYKIAogc3RydWN0IHNpZ2hhbmRfc3RydWN0IHsKIAlhdG9taWNfdAkJY291bnQ7CkBAIC00MjUsNiArNDM0LDM5IEBACiAJdW5zaWduZWQgbG9uZwkJYWNfbWluZmx0LCBhY19tYWpmbHQ7CiB9OwogCisvKioKKyAqIHN0cnVjdCB0YXNrX2NwdXRpbWUgLSBjb2xsZWN0ZWQgQ1BVIHRpbWUgY291bnRzCisgKiBAdXRpbWU6CQl0aW1lIHNwZW50IGluIHVzZXIgbW9kZSwgaW4gJmNwdXRpbWVfdCB1bml0cworICogQHN0aW1lOgkJdGltZSBzcGVudCBpbiBrZXJuZWwgbW9kZSwgaW4gJmNwdXRpbWVfdCB1bml0cworICogQHN1bV9leGVjX3J1bnRpbWU6CXRvdGFsIHRpbWUgc3BlbnQgb24gdGhlIENQVSwgaW4gbmFub3NlY29uZHMKKyAqCisgKiBUaGlzIHN0cnVjdHVyZSBncm91cHMgdG9nZXRoZXIgdGhyZWUga2luZHMgb2YgQ1BVIHRpbWUgdGhhdCBhcmUKKyAqIHRyYWNrZWQgZm9yIHRocmVhZHMgYW5kIHRocmVhZCBncm91cHMuICBNb3N0IHRoaW5ncyBjb25zaWRlcmluZworICogQ1BVIHRpbWUgd2FudCB0byBncm91cCB0aGVzZSBjb3VudHMgdG9nZXRoZXIgYW5kIHRyZWF0IGFsbCB0aHJlZQorICogb2YgdGhlbSBpbiBwYXJhbGxlbC4KKyAqLworc3RydWN0IHRhc2tfY3B1dGltZSB7CisJY3B1dGltZV90IHV0aW1lOworCWNwdXRpbWVfdCBzdGltZTsKKwl1bnNpZ25lZCBsb25nIGxvbmcgc3VtX2V4ZWNfcnVudGltZTsKK307CisvKiBBbHRlcm5hdGUgZmllbGQgbmFtZXMgd2hlbiB1c2VkIHRvIGNhY2hlIGV4cGlyYXRpb25zLiAqLworI2RlZmluZSBwcm9mX2V4cAlzdGltZQorI2RlZmluZSB2aXJ0X2V4cAl1dGltZQorI2RlZmluZSBzY2hlZF9leHAJc3VtX2V4ZWNfcnVudGltZQorCisvKioKKyAqIHN0cnVjdCB0aHJlYWRfZ3JvdXBfY3B1dGltZSAtIHRocmVhZCBncm91cCBpbnRlcnZhbCB0aW1lciBjb3VudHMKKyAqIEB0b3RhbHM6CQl0aHJlYWQgZ3JvdXAgaW50ZXJ2YWwgdGltZXJzOyBzdWJzdHJ1Y3R1cmUgZm9yCisgKgkJCXVuaXByb2Nlc3NvciBrZXJuZWwsIHBlci1jcHUgZm9yIFNNUCBrZXJuZWwuCisgKgorICogVGhpcyBzdHJ1Y3R1cmUgY29udGFpbnMgdGhlIHZlcnNpb24gb2YgdGFza19jcHV0aW1lLCBhYm92ZSwgdGhhdCBpcworICogdXNlZCBmb3IgdGhyZWFkIGdyb3VwIENQVSBjbG9jayBjYWxjdWxhdGlvbnMuCisgKi8KK3N0cnVjdCB0aHJlYWRfZ3JvdXBfY3B1dGltZSB7CisJc3RydWN0IHRhc2tfY3B1dGltZSAqdG90YWxzOworfTsKKwogLyoKICAqIE5PVEUhICJzaWduYWxfc3RydWN0IiBkb2VzIG5vdCBoYXZlIGl0J3Mgb3duCiAgKiBsb2NraW5nLCBiZWNhdXNlIGEgc2hhcmVkIHNpZ25hbF9zdHJ1Y3QgYWx3YXlzCkBAIC00NzAsNiArNTEyLDE3IEBACiAJY3B1dGltZV90IGl0X3Byb2ZfZXhwaXJlcywgaXRfdmlydF9leHBpcmVzOwogCWNwdXRpbWVfdCBpdF9wcm9mX2luY3IsIGl0X3ZpcnRfaW5jcjsKIAorCS8qCisJICogVGhyZWFkIGdyb3VwIHRvdGFscyBmb3IgcHJvY2VzcyBDUFUgY2xvY2tzLgorCSAqIFNlZSB0aHJlYWRfZ3JvdXBfY3B1dGltZSgpLCBldCBhbCwgZm9yIGRldGFpbHMuCisJICovCisJc3RydWN0IHRocmVhZF9ncm91cF9jcHV0aW1lIGNwdXRpbWU7CisKKwkvKiBFYXJsaWVzdC1leHBpcmF0aW9uIGNhY2hlLiAqLworCXN0cnVjdCB0YXNrX2NwdXRpbWUgY3B1dGltZV9leHBpcmVzOworCisJc3RydWN0IGxpc3RfaGVhZCBjcHVfdGltZXJzWzNdOworCiAJLyogam9iIGNvbnRyb2wgSURzICovCiAKIAkvKgpAQCAtNTAwLDcgKzU1Myw3IEBACiAJICogTGl2ZSB0aHJlYWRzIG1haW50YWluIHRoZWlyIG93biBjb3VudGVycyBhbmQgYWRkIHRvIHRoZXNlCiAJICogaW4gX19leGl0X3NpZ25hbCwgZXhjZXB0IGZvciB0aGUgZ3JvdXAgbGVhZGVyLgogCSAqLwotCWNwdXRpbWVfdCB1dGltZSwgc3RpbWUsIGN1dGltZSwgY3N0aW1lOworCWNwdXRpbWVfdCBjdXRpbWUsIGNzdGltZTsKIAljcHV0aW1lX3QgZ3RpbWU7CiAJY3B1dGltZV90IGNndGltZTsKIAl1bnNpZ25lZCBsb25nIG52Y3N3LCBuaXZjc3csIGNudmNzdywgY25pdmNzdzsKQEAgLTUwOSwxNCArNTYyLDYgQEAKIAlzdHJ1Y3QgdGFza19pb19hY2NvdW50aW5nIGlvYWM7CiAKIAkvKgotCSAqIEN1bXVsYXRpdmUgbnMgb2Ygc2NoZWR1bGVkIENQVSB0aW1lIGZvciBkZWFkIHRocmVhZHMgaW4gdGhlCi0JICogZ3JvdXAsIG5vdCBpbmNsdWRpbmcgYSB6b21iaWUgZ3JvdXAgbGVhZGVyLiAgKFRoaXMgb25seSBkaWZmZXJzCi0JICogZnJvbSBqaWZmaWVzX3RvX25zKHV0aW1lICsgc3RpbWUpIGlmIHNjaGVkX2Nsb2NrIHVzZXMgc29tZXRoaW5nCi0JICogb3RoZXIgdGhhbiBqaWZmaWVzLikKLQkgKi8KLQl1bnNpZ25lZCBsb25nIGxvbmcgc3VtX3NjaGVkX3J1bnRpbWU7Ci0KLQkvKgogCSAqIFdlIGRvbid0IGJvdGhlciB0byBzeW5jaHJvbml6ZSBtb3N0IHJlYWRlcnMgb2YgdGhpcyBhdCBhbGwsCiAJICogYmVjYXVzZSB0aGVyZSBpcyBubyByZWFkZXIgY2hlY2tpbmcgYSBsaW1pdCB0aGF0IGFjdHVhbGx5IG5lZWRzCiAJICogdG8gZ2V0IGJvdGggcmxpbV9jdXIgYW5kIHJsaW1fbWF4IGF0b21pY2FsbHksIGFuZCBlaXRoZXIgb25lCkBAIC01MjcsOCArNTcyLDYgQEAKIAkgKi8KIAlzdHJ1Y3QgcmxpbWl0IHJsaW1bUkxJTV9OTElNSVRTXTsKIAotCXN0cnVjdCBsaXN0X2hlYWQgY3B1X3RpbWVyc1szXTsKLQogCS8qIGtlZXAgdGhlIHByb2Nlc3Mtc2hhcmVkIGtleXJpbmdzIGhlcmUgc28gdGhhdCB0aGV5IGRvIHRoZSByaWdodAogCSAqIHRoaW5nIGluIHRocmVhZHMgY3JlYXRlZCB3aXRoIENMT05FX1RIUkVBRCAqLwogI2lmZGVmIENPTkZJR19LRVlTCkBAIC0xMTM3LDggKzExODAsNyBAQAogLyogbW0gZmF1bHQgYW5kIHN3YXAgaW5mbzogdGhpcyBjYW4gYXJndWFibHkgYmUgc2VlbiBhcyBlaXRoZXIgbW0tc3BlY2lmaWMgb3IgdGhyZWFkLXNwZWNpZmljICovCiAJdW5zaWduZWQgbG9uZyBtaW5fZmx0LCBtYWpfZmx0OwogCi0gIAljcHV0aW1lX3QgaXRfcHJvZl9leHBpcmVzLCBpdF92aXJ0X2V4cGlyZXM7Ci0JdW5zaWduZWQgbG9uZyBsb25nIGl0X3NjaGVkX2V4cGlyZXM7CisJc3RydWN0IHRhc2tfY3B1dGltZSBjcHV0aW1lX2V4cGlyZXM7CiAJc3RydWN0IGxpc3RfaGVhZCBjcHVfdGltZXJzWzNdOwogCiAvKiBwcm9jZXNzIGNyZWRlbnRpYWxzICovCkBAIC0xNTg4LDYgKzE2MzAsNyBAQAogCiBleHRlcm4gdW5zaWduZWQgbG9uZyBsb25nCiB0YXNrX3NjaGVkX3J1bnRpbWUoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKTsKK2V4dGVybiB1bnNpZ25lZCBsb25nIGxvbmcgdGhyZWFkX2dyb3VwX3NjaGVkX3J1bnRpbWUoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKTsKIAogLyogc2NoZWRfZXhlYyBpcyBjYWxsZWQgYnkgcHJvY2Vzc2VzIHBlcmZvcm1pbmcgYW4gZXhlYyAqLwogI2lmZGVmIENPTkZJR19TTVAKQEAgLTIwODUsNiArMjEyOCwzMCBAQAogfQogCiAvKgorICogVGhyZWFkIGdyb3VwIENQVSB0aW1lIGFjY291bnRpbmcuCisgKi8KKworZXh0ZXJuIGludCB0aHJlYWRfZ3JvdXBfY3B1dGltZV9hbGxvYyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKik7CitleHRlcm4gdm9pZCB0aHJlYWRfZ3JvdXBfY3B1dGltZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKiwgc3RydWN0IHRhc2tfY3B1dGltZSAqKTsKKworc3RhdGljIGlubGluZSB2b2lkIHRocmVhZF9ncm91cF9jcHV0aW1lX2luaXQoc3RydWN0IHNpZ25hbF9zdHJ1Y3QgKnNpZykKK3sKKwlzaWctPmNwdXRpbWUudG90YWxzID0gTlVMTDsKK30KKworc3RhdGljIGlubGluZSBpbnQgdGhyZWFkX2dyb3VwX2NwdXRpbWVfY2xvbmVfdGhyZWFkKHN0cnVjdCB0YXNrX3N0cnVjdCAqY3VycikKK3sKKwlpZiAoY3Vyci0+c2lnbmFsLT5jcHV0aW1lLnRvdGFscykKKwkJcmV0dXJuIDA7CisJcmV0dXJuIHRocmVhZF9ncm91cF9jcHV0aW1lX2FsbG9jKGN1cnIpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgdGhyZWFkX2dyb3VwX2NwdXRpbWVfZnJlZShzdHJ1Y3Qgc2lnbmFsX3N0cnVjdCAqc2lnKQoreworCWZyZWVfcGVyY3B1KHNpZy0+Y3B1dGltZS50b3RhbHMpOworfQorCisvKgogICogUmVldmFsdWF0ZSB3aGV0aGVyIHRoZSB0YXNrIGhhcyBzaWduYWxzIHBlbmRpbmcgZGVsaXZlcnkuCiAgKiBXYWtlIHRoZSB0YXNrIGlmIHNvLgogICogVGhpcyBpcyByZXF1aXJlZCBldmVyeSB0aW1lIHRoZSBibG9ja2VkIHNpZ3NldF90IGNoYW5nZXMuCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NlcV9maWxlLmggYi9pbmNsdWRlL2xpbnV4L3NlcV9maWxlLmgKaW5kZXggYTE3ODNiMi4uZGM1MGJjYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zZXFfZmlsZS5oCisrKyBiL2luY2x1ZGUvbGludXgvc2VxX2ZpbGUuaApAQCAtNjAsNiArNjAsMTkgQEAKIAlyZXR1cm4gc2VxX2JpdG1hcChtLCBtYXNrLT5iaXRzLCBNQVhfTlVNTk9ERVMpOwogfQogCitpbnQgc2VxX2JpdG1hcF9saXN0KHN0cnVjdCBzZXFfZmlsZSAqbSwgdW5zaWduZWQgbG9uZyAqYml0cywKKwkJdW5zaWduZWQgaW50IG5yX2JpdHMpOworCitzdGF0aWMgaW5saW5lIGludCBzZXFfY3B1bWFza19saXN0KHN0cnVjdCBzZXFfZmlsZSAqbSwgY3B1bWFza190ICptYXNrKQoreworCXJldHVybiBzZXFfYml0bWFwX2xpc3QobSwgbWFzay0+Yml0cywgTlJfQ1BVUyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHNlcV9ub2RlbWFza19saXN0KHN0cnVjdCBzZXFfZmlsZSAqbSwgbm9kZW1hc2tfdCAqbWFzaykKK3sKKwlyZXR1cm4gc2VxX2JpdG1hcF9saXN0KG0sIG1hc2stPmJpdHMsIE1BWF9OVU1OT0RFUyk7Cit9CisKIGludCBzaW5nbGVfb3BlbihzdHJ1Y3QgZmlsZSAqLCBpbnQgKCopKHN0cnVjdCBzZXFfZmlsZSAqLCB2b2lkICopLCB2b2lkICopOwogaW50IHNpbmdsZV9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgZmlsZSAqKTsKIHZvaWQgKl9fc2VxX29wZW5fcHJpdmF0ZShzdHJ1Y3QgZmlsZSAqLCBjb25zdCBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgKiwgaW50KTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2VyaWFsLmggYi9pbmNsdWRlL2xpbnV4L3NlcmlhbC5oCmluZGV4IGRlYjcxNDMxLi4xZWE4ZDkyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NlcmlhbC5oCisrKyBiL2luY2x1ZGUvbGludXgvc2VyaWFsLmgKQEAgLTE3Myw2ICsxNzMsMjIgQEAKIAlpbnQgcmVzZXJ2ZWRbOV07CiB9OwogCisvKgorICogU2VyaWFsIGludGVyZmFjZSBmb3IgY29udHJvbGxpbmcgUlM0ODUgc2V0dGluZ3Mgb24gY2hpcHMgd2l0aCBzdWl0YWJsZQorICogc3VwcG9ydC4gU2V0IHdpdGggVElPQ1NSUzQ4NSBhbmQgZ2V0IHdpdGggVElPQ0dSUzQ4NSBpZiBzdXBwb3J0ZWQgYnkgeW91cgorICogcGxhdGZvcm0uIFRoZSBzZXQgZnVuY3Rpb24gcmV0dXJucyB0aGUgbmV3IHN0YXRlLCB3aXRoIGFueSB1bnN1cHBvcnRlZCBiaXRzCisgKiByZXZlcnRlZCBhcHByb3ByaWF0ZWx5LgorICovCisKK3N0cnVjdCBzZXJpYWxfcnM0ODUgeworCV9fdTMyCWZsYWdzOwkJCS8qIFJTNDg1IGZlYXR1cmUgZmxhZ3MgKi8KKyNkZWZpbmUgU0VSX1JTNDg1X0VOQUJMRUQJCSgxIDw8IDApCisjZGVmaW5lIFNFUl9SUzQ4NV9SVFNfT05fU0VORAkJKDEgPDwgMSkKKyNkZWZpbmUgU0VSX1JTNDg1X1JUU19BRlRFUl9TRU5ECSgxIDw8IDIpCisJX191MzIJZGVsYXlfcnRzX2JlZm9yZV9zZW5kOwkvKiBNaWxsaXNlY29uZHMgKi8KKwlfX3UzMglwYWRkaW5nWzZdOwkJLyogTWVtb3J5IGlzIGNoZWFwLCBuZXcgc3RydWN0cworCQkJCQkgICBhcmUgYSByb3lhbCBQSVRBIC4uICovCit9OwogCiAjaWZkZWYgX19LRVJORUxfXwogI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NlcmlhbF9jb3JlLmggYi9pbmNsdWRlL2xpbnV4L3NlcmlhbF9jb3JlLmgKaW5kZXggM2IyZjZjMC4uZTI3ZjIxNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zZXJpYWxfY29yZS5oCisrKyBiL2luY2x1ZGUvbGludXgvc2VyaWFsX2NvcmUuaApAQCAtMjQxLDcgKzI0MSw3IEBACiAKIHN0cnVjdCB1YXJ0X3BvcnQgewogCXNwaW5sb2NrX3QJCWxvY2s7CQkJLyogcG9ydCBsb2NrICovCi0JdW5zaWduZWQgaW50CQlpb2Jhc2U7CQkJLyogaW4vb3V0W2J3bF0gKi8KKwl1bnNpZ25lZCBsb25nCQlpb2Jhc2U7CQkJLyogaW4vb3V0W2J3bF0gKi8KIAl1bnNpZ25lZCBjaGFyIF9faW9tZW0JKm1lbWJhc2U7CQkvKiByZWFkL3dyaXRlW2J3bF0gKi8KIAl1bnNpZ25lZCBpbnQJCWlycTsJCQkvKiBpcnEgbnVtYmVyICovCiAJdW5zaWduZWQgaW50CQl1YXJ0Y2xrOwkJLyogYmFzZSB1YXJ0IGNsb2NrICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NoX2ludGMuaCBiL2luY2x1ZGUvbGludXgvc2hfaW50Yy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY4ZTIxMmYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L3NoX2ludGMuaApAQCAtMCwwICsxLDkxIEBACisjaWZuZGVmIF9fU0hfSU5UQ19ICisjZGVmaW5lIF9fU0hfSU5UQ19ICisKK3R5cGVkZWYgdW5zaWduZWQgY2hhciBpbnRjX2VudW07CisKK3N0cnVjdCBpbnRjX3ZlY3QgeworCWludGNfZW51bSBlbnVtX2lkOworCXVuc2lnbmVkIHNob3J0IHZlY3Q7Cit9OworCisjZGVmaW5lIElOVENfVkVDVChlbnVtX2lkLCB2ZWN0KSB7IGVudW1faWQsIHZlY3QgfQorI2RlZmluZSBJTlRDX0lSUShlbnVtX2lkLCBpcnEpIElOVENfVkVDVChlbnVtX2lkLCBpcnEyZXZ0KGlycSkpCisKK3N0cnVjdCBpbnRjX2dyb3VwIHsKKwlpbnRjX2VudW0gZW51bV9pZDsKKwlpbnRjX2VudW0gZW51bV9pZHNbMzJdOworfTsKKworI2RlZmluZSBJTlRDX0dST1VQKGVudW1faWQsIGlkcy4uLikgeyBlbnVtX2lkLCB7IGlkcyB9IH0KKworc3RydWN0IGludGNfbWFza19yZWcgeworCXVuc2lnbmVkIGxvbmcgc2V0X3JlZywgY2xyX3JlZywgcmVnX3dpZHRoOworCWludGNfZW51bSBlbnVtX2lkc1szMl07CisjaWZkZWYgQ09ORklHX1NNUAorCXVuc2lnbmVkIGxvbmcgc21wOworI2VuZGlmCit9OworCitzdHJ1Y3QgaW50Y19wcmlvX3JlZyB7CisJdW5zaWduZWQgbG9uZyBzZXRfcmVnLCBjbHJfcmVnLCByZWdfd2lkdGgsIGZpZWxkX3dpZHRoOworCWludGNfZW51bSBlbnVtX2lkc1sxNl07CisjaWZkZWYgQ09ORklHX1NNUAorCXVuc2lnbmVkIGxvbmcgc21wOworI2VuZGlmCit9OworCitzdHJ1Y3QgaW50Y19zZW5zZV9yZWcgeworCXVuc2lnbmVkIGxvbmcgcmVnLCByZWdfd2lkdGgsIGZpZWxkX3dpZHRoOworCWludGNfZW51bSBlbnVtX2lkc1sxNl07Cit9OworCisjaWZkZWYgQ09ORklHX1NNUAorI2RlZmluZSBJTlRDX1NNUChzdHJpZGUsIG5yKSAuc21wID0gKHN0cmlkZSkgfCAoKG5yKSA8PCA4KQorI2Vsc2UKKyNkZWZpbmUgSU5UQ19TTVAoc3RyaWRlLCBucikKKyNlbmRpZgorCitzdHJ1Y3QgaW50Y19kZXNjIHsKKwlzdHJ1Y3QgaW50Y192ZWN0ICp2ZWN0b3JzOworCXVuc2lnbmVkIGludCBucl92ZWN0b3JzOworCXN0cnVjdCBpbnRjX2dyb3VwICpncm91cHM7CisJdW5zaWduZWQgaW50IG5yX2dyb3VwczsKKwlzdHJ1Y3QgaW50Y19tYXNrX3JlZyAqbWFza19yZWdzOworCXVuc2lnbmVkIGludCBucl9tYXNrX3JlZ3M7CisJc3RydWN0IGludGNfcHJpb19yZWcgKnByaW9fcmVnczsKKwl1bnNpZ25lZCBpbnQgbnJfcHJpb19yZWdzOworCXN0cnVjdCBpbnRjX3NlbnNlX3JlZyAqc2Vuc2VfcmVnczsKKwl1bnNpZ25lZCBpbnQgbnJfc2Vuc2VfcmVnczsKKwljaGFyICpuYW1lOworI2lmIGRlZmluZWQoQ09ORklHX0NQVV9TSDMpIHx8IGRlZmluZWQoQ09ORklHX0NQVV9TSDRBKQorCXN0cnVjdCBpbnRjX21hc2tfcmVnICphY2tfcmVnczsKKwl1bnNpZ25lZCBpbnQgbnJfYWNrX3JlZ3M7CisjZW5kaWYKK307CisKKyNkZWZpbmUgX0lOVENfQVJSQVkoYSkgYSwgc2l6ZW9mKGEpL3NpemVvZigqYSkKKyNkZWZpbmUgREVDTEFSRV9JTlRDX0RFU0Moc3ltYm9sLCBjaGlwbmFtZSwgdmVjdG9ycywgZ3JvdXBzLAkJXAorCW1hc2tfcmVncywgcHJpb19yZWdzLCBzZW5zZV9yZWdzKQkJCQlcCitzdHJ1Y3QgaW50Y19kZXNjIHN5bWJvbCBfX2luaXRkYXRhID0gewkJCQkJXAorCV9JTlRDX0FSUkFZKHZlY3RvcnMpLCBfSU5UQ19BUlJBWShncm91cHMpLAkJCVwKKwlfSU5UQ19BUlJBWShtYXNrX3JlZ3MpLCBfSU5UQ19BUlJBWShwcmlvX3JlZ3MpLAkJCVwKKwlfSU5UQ19BUlJBWShzZW5zZV9yZWdzKSwJCQkJCVwKKwljaGlwbmFtZSwJCQkJCQkJXAorfQorCisjaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NIMykgfHwgZGVmaW5lZChDT05GSUdfQ1BVX1NINEEpCisjZGVmaW5lIERFQ0xBUkVfSU5UQ19ERVNDX0FDSyhzeW1ib2wsIGNoaXBuYW1lLCB2ZWN0b3JzLCBncm91cHMsCVwKKwltYXNrX3JlZ3MsIHByaW9fcmVncywgc2Vuc2VfcmVncywgYWNrX3JlZ3MpCQkJXAorc3RydWN0IGludGNfZGVzYyBzeW1ib2wgX19pbml0ZGF0YSA9IHsJCQkJCVwKKwlfSU5UQ19BUlJBWSh2ZWN0b3JzKSwgX0lOVENfQVJSQVkoZ3JvdXBzKSwJCQlcCisJX0lOVENfQVJSQVkobWFza19yZWdzKSwgX0lOVENfQVJSQVkocHJpb19yZWdzKSwJCQlcCisJX0lOVENfQVJSQVkoc2Vuc2VfcmVncyksCQkJCQlcCisJY2hpcG5hbWUsCQkJCQkJCVwKKwlfSU5UQ19BUlJBWShhY2tfcmVncyksCQkJCQkJXAorfQorI2VuZGlmCisKK3ZvaWQgX19pbml0IHJlZ2lzdGVyX2ludGNfY29udHJvbGxlcihzdHJ1Y3QgaW50Y19kZXNjICpkZXNjKTsKK2ludCBpbnRjX3NldF9wcmlvcml0eSh1bnNpZ25lZCBpbnQgaXJxLCB1bnNpZ25lZCBpbnQgcHJpbyk7CisKKyNlbmRpZiAvKiBfX1NIX0lOVENfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zbXAuaCBiL2luY2x1ZGUvbGludXgvc21wLmgKaW5kZXggNjY0ODRkNC4uMmU0ZDU4YiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zbXAuaAorKysgYi9pbmNsdWRlL2xpbnV4L3NtcC5oCkBAIC03LDYgKzcsNyBAQAogICovCiAKICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgogI2luY2x1ZGUgPGxpbnV4L2NwdW1hc2suaD4KIApAQCAtMTYsNyArMTcsOCBAQAogCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKIAl2b2lkICgqZnVuYykgKHZvaWQgKmluZm8pOwogCXZvaWQgKmluZm87Ci0JdW5zaWduZWQgaW50IGZsYWdzOworCXUxNiBmbGFnczsKKwl1MTYgcHJpdjsKIH07CiAKICNpZmRlZiBDT05GSUdfU01QCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NwaS9vcmlvbl9zcGkuaCBiL2luY2x1ZGUvbGludXgvc3BpL29yaW9uX3NwaS5oCmluZGV4IGI0ZDlmYTYuLmRlY2Y2ZDggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc3BpL29yaW9uX3NwaS5oCisrKyBiL2luY2x1ZGUvbGludXgvc3BpL29yaW9uX3NwaS5oCkBAIC0xMSw2ICsxMSw3IEBACiAKIHN0cnVjdCBvcmlvbl9zcGlfaW5mbyB7CiAJdTMyCXRjbGs7CQkvKiBubyA8bGludXgvY2xrLmg+IHN1cHBvcnQgeWV0ICovCisJdTMyCWVuYWJsZV9jbG9ja19maXg7CiB9OwogCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3VucnBjL2NsbnQuaCBiL2luY2x1ZGUvbGludXgvc3VucnBjL2NsbnQuaAppbmRleCBlNWJmZTAxLi42ZjBlZTFiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3N1bnJwYy9jbG50LmgKKysrIGIvaW5jbHVkZS9saW51eC9zdW5ycGMvY2xudC5oCkBAIC0xMDQsNiArMTA0LDcgQEAKIAljb25zdCBzdHJ1Y3QgcnBjX3RpbWVvdXQgKnRpbWVvdXQ7CiAJY2hhcgkJCSpzZXJ2ZXJuYW1lOwogCXN0cnVjdCBycGNfcHJvZ3JhbQkqcHJvZ3JhbTsKKwl1MzIJCQlwcm9nbnVtYmVyOwkvKiBvdmVycmlkZXMgcHJvZ3JhbS0+bnVtYmVyICovCiAJdTMyCQkJdmVyc2lvbjsKIAlycGNfYXV0aGZsYXZvcl90CWF1dGhmbGF2b3I7CiAJdW5zaWduZWQgbG9uZwkJZmxhZ3M7CkBAIC0xMjQsMTAgKzEyNSwxMCBAQAogdm9pZAkJcnBjX3NodXRkb3duX2NsaWVudChzdHJ1Y3QgcnBjX2NsbnQgKik7CiB2b2lkCQlycGNfcmVsZWFzZV9jbGllbnQoc3RydWN0IHJwY19jbG50ICopOwogCi1pbnQJCXJwY2JfcmVnaXN0ZXIodTMyLCB1MzIsIGludCwgdW5zaWduZWQgc2hvcnQsIGludCAqKTsKK2ludAkJcnBjYl9yZWdpc3Rlcih1MzIsIHUzMiwgaW50LCB1bnNpZ25lZCBzaG9ydCk7CiBpbnQJCXJwY2JfdjRfcmVnaXN0ZXIoY29uc3QgdTMyIHByb2dyYW0sIGNvbnN0IHUzMiB2ZXJzaW9uLAogCQkJCSBjb25zdCBzdHJ1Y3Qgc29ja2FkZHIgKmFkZHJlc3MsCi0JCQkJIGNvbnN0IGNoYXIgKm5ldGlkLCBpbnQgKnJlc3VsdCk7CisJCQkJIGNvbnN0IGNoYXIgKm5ldGlkKTsKIGludAkJcnBjYl9nZXRwb3J0X3N5bmMoc3RydWN0IHNvY2thZGRyX2luICosIHUzMiwgdTMyLCBpbnQpOwogdm9pZAkJcnBjYl9nZXRwb3J0X2FzeW5jKHN0cnVjdCBycGNfdGFzayAqKTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zdW5ycGMvc3ZjLmggYi9pbmNsdWRlL2xpbnV4L3N1bnJwYy9zdmMuaAppbmRleCBkYzY5MDY4Li4zYWZlN2ZiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3N1bnJwYy9zdmMuaAorKysgYi9pbmNsdWRlL2xpbnV4L3N1bnJwYy9zdmMuaApAQCAtNjYsNiArNjYsNyBAQAogCXN0cnVjdCBsaXN0X2hlYWQJc3ZfdGVtcHNvY2tzOwkvKiBhbGwgdGVtcG9yYXJ5IHNvY2tldHMgKi8KIAlpbnQJCQlzdl90bXBjbnQ7CS8qIGNvdW50IG9mIHRlbXBvcmFyeSBzb2NrZXRzICovCiAJc3RydWN0IHRpbWVyX2xpc3QJc3ZfdGVtcHRpbWVyOwkvKiB0aW1lciBmb3IgYWdpbmcgdGVtcG9yYXJ5IHNvY2tldHMgKi8KKwlzYV9mYW1pbHlfdAkJc3ZfZmFtaWx5OwkvKiBsaXN0ZW5lcidzIGFkZHJlc3MgZmFtaWx5ICovCiAKIAljaGFyICoJCQlzdl9uYW1lOwkvKiBzZXJ2aWNlIG5hbWUgKi8KIApAQCAtMjY1LDE3ICsyNjYsMTcgQEAKIC8qCiAgKiBSaWdvcm91cyB0eXBlIGNoZWNraW5nIG9uIHNvY2thZGRyIHR5cGUgY29udmVyc2lvbnMKICAqLwotc3RhdGljIGlubGluZSBzdHJ1Y3Qgc29ja2FkZHJfaW4gKnN2Y19hZGRyX2luKHN0cnVjdCBzdmNfcnFzdCAqcnFzdCkKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHNvY2thZGRyX2luICpzdmNfYWRkcl9pbihjb25zdCBzdHJ1Y3Qgc3ZjX3Jxc3QgKnJxc3QpCiB7CiAJcmV0dXJuIChzdHJ1Y3Qgc29ja2FkZHJfaW4gKikgJnJxc3QtPnJxX2FkZHI7CiB9CiAKLXN0YXRpYyBpbmxpbmUgc3RydWN0IHNvY2thZGRyX2luNiAqc3ZjX2FkZHJfaW42KHN0cnVjdCBzdmNfcnFzdCAqcnFzdCkKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHNvY2thZGRyX2luNiAqc3ZjX2FkZHJfaW42KGNvbnN0IHN0cnVjdCBzdmNfcnFzdCAqcnFzdCkKIHsKIAlyZXR1cm4gKHN0cnVjdCBzb2NrYWRkcl9pbjYgKikgJnJxc3QtPnJxX2FkZHI7CiB9CiAKLXN0YXRpYyBpbmxpbmUgc3RydWN0IHNvY2thZGRyICpzdmNfYWRkcihzdHJ1Y3Qgc3ZjX3Jxc3QgKnJxc3QpCitzdGF0aWMgaW5saW5lIHN0cnVjdCBzb2NrYWRkciAqc3ZjX2FkZHIoY29uc3Qgc3RydWN0IHN2Y19ycXN0ICpycXN0KQogewogCXJldHVybiAoc3RydWN0IHNvY2thZGRyICopICZycXN0LT5ycV9hZGRyOwogfQpAQCAtMzgxLDE4ICszODIsMjAgQEAKIC8qCiAgKiBGdW5jdGlvbiBwcm90b3R5cGVzLgogICovCi1zdHJ1Y3Qgc3ZjX3NlcnYgKiAgc3ZjX2NyZWF0ZShzdHJ1Y3Qgc3ZjX3Byb2dyYW0gKiwgdW5zaWduZWQgaW50LAotCQkJICAgICAgdm9pZCAoKnNodXRkb3duKShzdHJ1Y3Qgc3ZjX3NlcnYqKSk7CitzdHJ1Y3Qgc3ZjX3NlcnYgKnN2Y19jcmVhdGUoc3RydWN0IHN2Y19wcm9ncmFtICosIHVuc2lnbmVkIGludCwgc2FfZmFtaWx5X3QsCisJCQkgICAgdm9pZCAoKnNodXRkb3duKShzdHJ1Y3Qgc3ZjX3NlcnYgKikpOwogc3RydWN0IHN2Y19ycXN0ICpzdmNfcHJlcGFyZV90aHJlYWQoc3RydWN0IHN2Y19zZXJ2ICpzZXJ2LAogCQkJCQlzdHJ1Y3Qgc3ZjX3Bvb2wgKnBvb2wpOwogdm9pZAkJICAgc3ZjX2V4aXRfdGhyZWFkKHN0cnVjdCBzdmNfcnFzdCAqKTsKIHN0cnVjdCBzdmNfc2VydiAqICBzdmNfY3JlYXRlX3Bvb2xlZChzdHJ1Y3Qgc3ZjX3Byb2dyYW0gKiwgdW5zaWduZWQgaW50LAotCQkJdm9pZCAoKnNodXRkb3duKShzdHJ1Y3Qgc3ZjX3NlcnYqKSwgc3ZjX3RocmVhZF9mbiwKLQkJCXN0cnVjdCBtb2R1bGUgKik7CisJCQlzYV9mYW1pbHlfdCwgdm9pZCAoKnNodXRkb3duKShzdHJ1Y3Qgc3ZjX3NlcnYgKiksCisJCQlzdmNfdGhyZWFkX2ZuLCBzdHJ1Y3QgbW9kdWxlICopOwogaW50CQkgICBzdmNfc2V0X251bV90aHJlYWRzKHN0cnVjdCBzdmNfc2VydiAqLCBzdHJ1Y3Qgc3ZjX3Bvb2wgKiwgaW50KTsKIHZvaWQJCSAgIHN2Y19kZXN0cm95KHN0cnVjdCBzdmNfc2VydiAqKTsKIGludAkJICAgc3ZjX3Byb2Nlc3Moc3RydWN0IHN2Y19ycXN0ICopOwotaW50CQkgICBzdmNfcmVnaXN0ZXIoc3RydWN0IHN2Y19zZXJ2ICosIGludCwgdW5zaWduZWQgc2hvcnQpOworaW50CQkgICBzdmNfcmVnaXN0ZXIoY29uc3Qgc3RydWN0IHN2Y19zZXJ2ICosIGNvbnN0IHVuc2lnbmVkIHNob3J0LAorCQkJCWNvbnN0IHVuc2lnbmVkIHNob3J0KTsKKwogdm9pZAkJICAgc3ZjX3dha2VfdXAoc3RydWN0IHN2Y19zZXJ2ICopOwogdm9pZAkJICAgc3ZjX3Jlc2VydmUoc3RydWN0IHN2Y19ycXN0ICpycXN0cCwgaW50IHNwYWNlKTsKIHN0cnVjdCBzdmNfcG9vbCAqICBzdmNfcG9vbF9mb3JfY3B1KHN0cnVjdCBzdmNfc2VydiAqc2VydiwgaW50IGNwdSk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3N1bnJwYy9zdmNfcmRtYS5oIGIvaW5jbHVkZS9saW51eC9zdW5ycGMvc3ZjX3JkbWEuaAppbmRleCBkYzA1YjU0Li5jMTRmZTg2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3N1bnJwYy9zdmNfcmRtYS5oCisrKyBiL2luY2x1ZGUvbGludXgvc3VucnBjL3N2Y19yZG1hLmgKQEAgLTcyLDYgKzcyLDcgQEAKICAqLwogc3RydWN0IHN2Y19yZG1hX29wX2N0eHQgewogCXN0cnVjdCBzdmNfcmRtYV9vcF9jdHh0ICpyZWFkX2hkcjsKKwlzdHJ1Y3Qgc3ZjX3JkbWFfZmFzdHJlZ19tciAqZnJtcjsKIAlpbnQgaGRyX2NvdW50OwogCXN0cnVjdCB4ZHJfYnVmIGFyZzsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGR0b19xOwpAQCAtMTAzLDE2ICsxMDQsMzAgQEAKIAlpbnQgc3RhcnQ7CQkvKiBzZ2Ugbm8gZm9yIHRoaXMgY2h1bmsgKi8KIAlpbnQgY291bnQ7CQkvKiBzZ2UgY291bnQgZm9yIHRoaXMgY2h1bmsgKi8KIH07CitzdHJ1Y3Qgc3ZjX3JkbWFfZmFzdHJlZ19tciB7CisJc3RydWN0IGliX21yICptcjsKKwl2b2lkICprdmE7CisJc3RydWN0IGliX2Zhc3RfcmVnX3BhZ2VfbGlzdCAqcGFnZV9saXN0OworCWludCBwYWdlX2xpc3RfbGVuOworCXVuc2lnbmVkIGxvbmcgYWNjZXNzX2ZsYWdzOworCXVuc2lnbmVkIGxvbmcgbWFwX2xlbjsKKwllbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb247CisJc3RydWN0IGxpc3RfaGVhZCBmcm1yX2xpc3Q7Cit9Owogc3RydWN0IHN2Y19yZG1hX3JlcV9tYXAgeworCXN0cnVjdCBzdmNfcmRtYV9mYXN0cmVnX21yICpmcm1yOwogCXVuc2lnbmVkIGxvbmcgY291bnQ7CiAJdW5pb24gewogCQlzdHJ1Y3Qga3ZlYyBzZ2VbUlBDU1ZDX01BWFBBR0VTXTsKIAkJc3RydWN0IHN2Y19yZG1hX2NodW5rX3NnZSBjaFtSUENTVkNfTUFYUEFHRVNdOwogCX07CiB9OwotCisjZGVmaW5lIFJETUFDVFhUX0ZfRkFTVF9VTlJFRwkxCiAjZGVmaW5lIFJETUFDVFhUX0ZfTEFTVF9DVFhUCTIKIAorI2RlZmluZQlTVkNSRE1BX0RFVkNBUF9GQVNUX1JFRwkJMQkvKiBmYXN0IG1yIHJlZ2lzdHJhdGlvbiAqLworI2RlZmluZQlTVkNSRE1BX0RFVkNBUF9SRUFEX1dfSU5WCTIJLyogcmVhZCB3LyBpbnZhbGlkYXRlICovCisKIHN0cnVjdCBzdmN4cHJ0X3JkbWEgewogCXN0cnVjdCBzdmNfeHBydCAgICAgIHNjX3hwcnQ7CQkvKiBTVkMgdHJhbnNwb3J0IHN0cnVjdHVyZSAqLwogCXN0cnVjdCByZG1hX2NtX2lkICAgICpzY19jbV9pZDsJCS8qIFJETUEgY29ubmVjdGlvbiBpZCAqLwpAQCAtMTM2LDYgKzE1MSwxMSBAQAogCXN0cnVjdCBpYl9jcSAgICAgICAgICpzY19ycV9jcTsKIAlzdHJ1Y3QgaWJfY3EgICAgICAgICAqc2Nfc3FfY3E7CiAJc3RydWN0IGliX21yICAgICAgICAgKnNjX3BoeXNfbXI7CS8qIE1SIGZvciBzZXJ2ZXIgbWVtb3J5ICovCisJdTMyCQkgICAgIHNjX2Rldl9jYXBzOwkvKiBkaXN0aWxsZWQgZGV2aWNlIGNhcHMgKi8KKwl1MzIJCSAgICAgc2NfZG1hX2xrZXk7CS8qIGxvY2FsIGRtYSBrZXkgKi8KKwl1bnNpZ25lZCBpbnQJICAgICBzY19mcm1yX3BnX2xpc3RfbGVuOworCXN0cnVjdCBsaXN0X2hlYWQgICAgIHNjX2ZybXJfcTsKKwlzcGlubG9ja190CSAgICAgc2NfZnJtcl9xX2xvY2s7CiAKIAlzcGlubG9ja190CSAgICAgc2NfbG9jazsJCS8qIHRyYW5zcG9ydCBsb2NrICovCiAKQEAgLTE5Miw4ICsyMTIsMTMgQEAKIGV4dGVybiBpbnQgc3ZjX3JkbWFfY3JlYXRlX2xpc3RlbihzdHJ1Y3Qgc3ZjX3NlcnYgKiwgaW50LCBzdHJ1Y3Qgc29ja2FkZHIgKik7CiBleHRlcm4gc3RydWN0IHN2Y19yZG1hX29wX2N0eHQgKnN2Y19yZG1hX2dldF9jb250ZXh0KHN0cnVjdCBzdmN4cHJ0X3JkbWEgKik7CiBleHRlcm4gdm9pZCBzdmNfcmRtYV9wdXRfY29udGV4dChzdHJ1Y3Qgc3ZjX3JkbWFfb3BfY3R4dCAqLCBpbnQpOworZXh0ZXJuIHZvaWQgc3ZjX3JkbWFfdW5tYXBfZG1hKHN0cnVjdCBzdmNfcmRtYV9vcF9jdHh0ICpjdHh0KTsKIGV4dGVybiBzdHJ1Y3Qgc3ZjX3JkbWFfcmVxX21hcCAqc3ZjX3JkbWFfZ2V0X3JlcV9tYXAodm9pZCk7CiBleHRlcm4gdm9pZCBzdmNfcmRtYV9wdXRfcmVxX21hcChzdHJ1Y3Qgc3ZjX3JkbWFfcmVxX21hcCAqKTsKK2V4dGVybiBpbnQgc3ZjX3JkbWFfZmFzdHJlZyhzdHJ1Y3Qgc3ZjeHBydF9yZG1hICosIHN0cnVjdCBzdmNfcmRtYV9mYXN0cmVnX21yICopOworZXh0ZXJuIHN0cnVjdCBzdmNfcmRtYV9mYXN0cmVnX21yICpzdmNfcmRtYV9nZXRfZnJtcihzdHJ1Y3Qgc3ZjeHBydF9yZG1hICopOworZXh0ZXJuIHZvaWQgc3ZjX3JkbWFfcHV0X2ZybXIoc3RydWN0IHN2Y3hwcnRfcmRtYSAqLAorCQkJICAgICAgc3RydWN0IHN2Y19yZG1hX2Zhc3RyZWdfbXIgKik7CiBleHRlcm4gdm9pZCBzdmNfc3FfcmVhcChzdHJ1Y3Qgc3ZjeHBydF9yZG1hICopOwogZXh0ZXJuIHZvaWQgc3ZjX3JxX3JlYXAoc3RydWN0IHN2Y3hwcnRfcmRtYSAqKTsKIGV4dGVybiBzdHJ1Y3Qgc3ZjX3hwcnRfY2xhc3Mgc3ZjX3JkbWFfY2xhc3M7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3N1bnJwYy9zdmNzb2NrLmggYi9pbmNsdWRlL2xpbnV4L3N1bnJwYy9zdmNzb2NrLmgKaW5kZXggOGNmZjY5Ni4uNDgzZTEwMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zdW5ycGMvc3Zjc29jay5oCisrKyBiL2luY2x1ZGUvbGludXgvc3VucnBjL3N2Y3NvY2suaApAQCAtMzksMTAgKzM5LDcgQEAKIHZvaWQJCXN2Y19kcm9wKHN0cnVjdCBzdmNfcnFzdCAqKTsKIHZvaWQJCXN2Y19zb2NrX3VwZGF0ZV9idWZzKHN0cnVjdCBzdmNfc2VydiAqc2Vydik7CiBpbnQJCXN2Y19zb2NrX25hbWVzKGNoYXIgKmJ1Ziwgc3RydWN0IHN2Y19zZXJ2ICpzZXJ2LCBjaGFyICp0b2Nsb3NlKTsKLWludAkJc3ZjX2FkZHNvY2soc3RydWN0IHN2Y19zZXJ2ICpzZXJ2LAotCQkJICAgIGludCBmZCwKLQkJCSAgICBjaGFyICpuYW1lX3JldHVybiwKLQkJCSAgICBpbnQgKnByb3RvKTsKK2ludAkJc3ZjX2FkZHNvY2soc3RydWN0IHN2Y19zZXJ2ICpzZXJ2LCBpbnQgZmQsIGNoYXIgKm5hbWVfcmV0dXJuKTsKIHZvaWQJCXN2Y19pbml0X3hwcnRfc29jayh2b2lkKTsKIHZvaWQJCXN2Y19jbGVhbnVwX3hwcnRfc29jayh2b2lkKTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zdW5ycGMveHBydHJkbWEuaCBiL2luY2x1ZGUvbGludXgvc3VucnBjL3hwcnRyZG1hLmgKaW5kZXggNGRlNTZiMS4uNTRhMzc5YyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zdW5ycGMveHBydHJkbWEuaAorKysgYi9pbmNsdWRlL2xpbnV4L3N1bnJwYy94cHJ0cmRtYS5oCkBAIC02Niw5ICs2Niw2IEBACiAKICNkZWZpbmUgUlBDUkRNQV9JTkxJTkVfUEFEX1RIUkVTSCAgKDUxMikvKiBwYXlsb2FkIHRocmVzaG9sZCB0byBwYWQgKGJ5dGVzKSAqLwogCi0jZGVmaW5lIFJETUFfUkVTT0xWRV9USU1FT1VUCSg1KkhaKQkvKiBUQkQgNSBzZWNvbmRzICovCi0jZGVmaW5lIFJETUFfQ09OTkVDVF9SRVRSWV9NQVgJKDIpCS8qIHJldHJpZXMgaWYgbm8gbGlzdGVuZXIgYmFja2xvZyAqLwotCiAvKiBtZW1vcnkgcmVnaXN0cmF0aW9uIHN0cmF0ZWdpZXMgKi8KICNkZWZpbmUgUlBDUkRNQV9QRVJTSVNURU5UX1JFR0lTVFJBVElPTiAoMSkKIApAQCAtNzgsNiArNzUsNyBAQAogCVJQQ1JETUFfTUVNV0lORE9XUywKIAlSUENSRE1BX01FTVdJTkRPV1NfQVNZTkMsCiAJUlBDUkRNQV9NVEhDQUZNUiwKKwlSUENSRE1BX0ZSTVIsCiAJUlBDUkRNQV9BTExQSFlTSUNBTCwKIAlSUENSRE1BX0xBU1QKIH07CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3N3YWIuaCBiL2luY2x1ZGUvbGludXgvc3dhYi5oCmluZGV4IDI3MGQ1YzIwLi5iYmVkMjc5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3N3YWIuaAorKysgYi9pbmNsdWRlL2xpbnV4L3N3YWIuaApAQCAtNDcsOCArNDcsNiBAQAogewogI2lmZGVmIF9fYXJjaF9zd2FiMTYKIAlyZXR1cm4gX19hcmNoX3N3YWIxNih2YWwpOwotI2VsaWYgZGVmaW5lZChfX2FyY2hfc3dhYjE2cCkKLQlyZXR1cm4gX19hcmNoX3N3YWIxNnAoJnZhbCk7CiAjZWxzZQogCXJldHVybiBfX2NvbnN0X3N3YWIxNih2YWwpOwogI2VuZGlmCkBAIC01OCw4ICs1Niw2IEBACiB7CiAjaWZkZWYgX19hcmNoX3N3YWIzMgogCXJldHVybiBfX2FyY2hfc3dhYjMyKHZhbCk7Ci0jZWxpZiBkZWZpbmVkKF9fYXJjaF9zd2FiMzJwKQotCXJldHVybiBfX2FyY2hfc3dhYjMycCgmdmFsKTsKICNlbHNlCiAJcmV0dXJuIF9fY29uc3Rfc3dhYjMyKHZhbCk7CiAjZW5kaWYKQEAgLTY5LDggKzY1LDYgQEAKIHsKICNpZmRlZiBfX2FyY2hfc3dhYjY0CiAJcmV0dXJuIF9fYXJjaF9zd2FiNjQodmFsKTsKLSNlbGlmIGRlZmluZWQoX19hcmNoX3N3YWI2NHApCi0JcmV0dXJuIF9fYXJjaF9zd2FiNjRwKCZ2YWwpOwogI2VsaWYgZGVmaW5lZChfX1NXQUJfNjRfVEhSVV8zMl9fKQogCV9fdTMyIGggPSB2YWwgPj4gMzI7CiAJX191MzIgbCA9IHZhbCAmICgoMVVMTCA8PCAzMikgLSAxKTsKQEAgLTg0LDggKzc4LDYgQEAKIHsKICNpZmRlZiBfX2FyY2hfc3dhaHczMgogCXJldHVybiBfX2FyY2hfc3dhaHczMih2YWwpOwotI2VsaWYgZGVmaW5lZChfX2FyY2hfc3dhaHczMnApCi0JcmV0dXJuIF9fYXJjaF9zd2FodzMycCgmdmFsKTsKICNlbHNlCiAJcmV0dXJuIF9fY29uc3Rfc3dhaHczMih2YWwpOwogI2VuZGlmCkBAIC05NSw4ICs4Nyw2IEBACiB7CiAjaWZkZWYgX19hcmNoX3N3YWhiMzIKIAlyZXR1cm4gX19hcmNoX3N3YWhiMzIodmFsKTsKLSNlbGlmIGRlZmluZWQoX19hcmNoX3N3YWhiMzJwKQotCXJldHVybiBfX2FyY2hfc3dhaGIzMnAoJnZhbCk7CiAjZWxzZQogCXJldHVybiBfX2NvbnN0X3N3YWhiMzIodmFsKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zd2FwLmggYi9pbmNsdWRlL2xpbnV4L3N3YXAuaAppbmRleCBkZTQwZjE2OWEuLmEzYWY5NWIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc3dhcC5oCisrKyBiL2luY2x1ZGUvbGludXgvc3dhcC5oCkBAIC03LDYgKzcsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KICNpbmNsdWRlIDxsaW51eC9tZW1jb250cm9sLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9ub2RlLmg+CiAKICNpbmNsdWRlIDxhc20vYXRvbWljLmg+CiAjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KQEAgLTE3MSw4ICsxNzIsMTAgQEAKIAogCiAvKiBsaW51eC9tbS9zd2FwLmMgKi8KLWV4dGVybiB2b2lkIGxydV9jYWNoZV9hZGQoc3RydWN0IHBhZ2UgKik7Ci1leHRlcm4gdm9pZCBscnVfY2FjaGVfYWRkX2FjdGl2ZShzdHJ1Y3QgcGFnZSAqKTsKK2V4dGVybiB2b2lkIF9fbHJ1X2NhY2hlX2FkZChzdHJ1Y3QgcGFnZSAqLCBlbnVtIGxydV9saXN0IGxydSk7CitleHRlcm4gdm9pZCBscnVfY2FjaGVfYWRkX2xydShzdHJ1Y3QgcGFnZSAqLCBlbnVtIGxydV9saXN0IGxydSk7CitleHRlcm4gdm9pZCBscnVfY2FjaGVfYWRkX2FjdGl2ZV9vcl91bmV2aWN0YWJsZShzdHJ1Y3QgcGFnZSAqLAorCQkJCQlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKik7CiBleHRlcm4gdm9pZCBhY3RpdmF0ZV9wYWdlKHN0cnVjdCBwYWdlICopOwogZXh0ZXJuIHZvaWQgbWFya19wYWdlX2FjY2Vzc2VkKHN0cnVjdCBwYWdlICopOwogZXh0ZXJuIHZvaWQgbHJ1X2FkZF9kcmFpbih2b2lkKTsKQEAgLTE4MCwxMiArMTgzLDM4IEBACiBleHRlcm4gdm9pZCByb3RhdGVfcmVjbGFpbWFibGVfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSk7CiBleHRlcm4gdm9pZCBzd2FwX3NldHVwKHZvaWQpOwogCitleHRlcm4gdm9pZCBhZGRfcGFnZV90b191bmV2aWN0YWJsZV9saXN0KHN0cnVjdCBwYWdlICpwYWdlKTsKKworLyoqCisgKiBscnVfY2FjaGVfYWRkOiBhZGQgYSBwYWdlIHRvIHRoZSBwYWdlIGxpc3RzCisgKiBAcGFnZTogdGhlIHBhZ2UgdG8gYWRkCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBscnVfY2FjaGVfYWRkX2Fub24oc3RydWN0IHBhZ2UgKnBhZ2UpCit7CisJX19scnVfY2FjaGVfYWRkKHBhZ2UsIExSVV9JTkFDVElWRV9BTk9OKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGxydV9jYWNoZV9hZGRfYWN0aXZlX2Fub24oc3RydWN0IHBhZ2UgKnBhZ2UpCit7CisJX19scnVfY2FjaGVfYWRkKHBhZ2UsIExSVV9BQ1RJVkVfQU5PTik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBscnVfY2FjaGVfYWRkX2ZpbGUoc3RydWN0IHBhZ2UgKnBhZ2UpCit7CisJX19scnVfY2FjaGVfYWRkKHBhZ2UsIExSVV9JTkFDVElWRV9GSUxFKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGxydV9jYWNoZV9hZGRfYWN0aXZlX2ZpbGUoc3RydWN0IHBhZ2UgKnBhZ2UpCit7CisJX19scnVfY2FjaGVfYWRkKHBhZ2UsIExSVV9BQ1RJVkVfRklMRSk7Cit9CisKIC8qIGxpbnV4L21tL3Ztc2Nhbi5jICovCiBleHRlcm4gdW5zaWduZWQgbG9uZyB0cnlfdG9fZnJlZV9wYWdlcyhzdHJ1Y3Qgem9uZWxpc3QgKnpvbmVsaXN0LCBpbnQgb3JkZXIsCiAJCQkJCWdmcF90IGdmcF9tYXNrKTsKIGV4dGVybiB1bnNpZ25lZCBsb25nIHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbSwKIAkJCQkJCQlnZnBfdCBnZnBfbWFzayk7Ci1leHRlcm4gaW50IF9faXNvbGF0ZV9scnVfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgaW50IG1vZGUpOworZXh0ZXJuIGludCBfX2lzb2xhdGVfbHJ1X3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIGludCBtb2RlLCBpbnQgZmlsZSk7CiBleHRlcm4gdW5zaWduZWQgbG9uZyBzaHJpbmtfYWxsX21lbW9yeSh1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKTsKIGV4dGVybiBpbnQgdm1fc3dhcHBpbmVzczsKIGV4dGVybiBpbnQgcmVtb3ZlX21hcHBpbmcoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHN0cnVjdCBwYWdlICpwYWdlKTsKQEAgLTIwNCw2ICsyMzMsMzQgQEAKIH0KICNlbmRpZgogCisjaWZkZWYgQ09ORklHX1VORVZJQ1RBQkxFX0xSVQorZXh0ZXJuIGludCBwYWdlX2V2aWN0YWJsZShzdHJ1Y3QgcGFnZSAqcGFnZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpOworZXh0ZXJuIHZvaWQgc2Nhbl9tYXBwaW5nX3VuZXZpY3RhYmxlX3BhZ2VzKHN0cnVjdCBhZGRyZXNzX3NwYWNlICopOworCitleHRlcm4gdW5zaWduZWQgbG9uZyBzY2FuX3VuZXZpY3RhYmxlX3BhZ2VzOworZXh0ZXJuIGludCBzY2FuX3VuZXZpY3RhYmxlX2hhbmRsZXIoc3RydWN0IGN0bF90YWJsZSAqLCBpbnQsIHN0cnVjdCBmaWxlICosCisJCQkJCXZvaWQgX191c2VyICosIHNpemVfdCAqLCBsb2ZmX3QgKik7CitleHRlcm4gaW50IHNjYW5fdW5ldmljdGFibGVfcmVnaXN0ZXJfbm9kZShzdHJ1Y3Qgbm9kZSAqbm9kZSk7CitleHRlcm4gdm9pZCBzY2FuX3VuZXZpY3RhYmxlX3VucmVnaXN0ZXJfbm9kZShzdHJ1Y3Qgbm9kZSAqbm9kZSk7CisjZWxzZQorc3RhdGljIGlubGluZSBpbnQgcGFnZV9ldmljdGFibGUoc3RydWN0IHBhZ2UgKnBhZ2UsCisJCQkJCQlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKK3sKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHNjYW5fbWFwcGluZ191bmV2aWN0YWJsZV9wYWdlcyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZykKK3sKK30KKworc3RhdGljIGlubGluZSBpbnQgc2Nhbl91bmV2aWN0YWJsZV9yZWdpc3Rlcl9ub2RlKHN0cnVjdCBub2RlICpub2RlKQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc2Nhbl91bmV2aWN0YWJsZV91bnJlZ2lzdGVyX25vZGUoc3RydWN0IG5vZGUgKm5vZGUpIHsgfQorI2VuZGlmCisKIGV4dGVybiBpbnQga3N3YXBkX3J1bihpbnQgbmlkKTsKIAogI2lmZGVmIENPTkZJR19NTVUKQEAgLTI1MSw2ICszMDgsNyBAQAogZXh0ZXJuIHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpnZXRfc3dhcF9pbmZvX3N0cnVjdCh1bnNpZ25lZCk7CiBleHRlcm4gaW50IGNhbl9zaGFyZV9zd2FwX3BhZ2Uoc3RydWN0IHBhZ2UgKik7CiBleHRlcm4gaW50IHJlbW92ZV9leGNsdXNpdmVfc3dhcF9wYWdlKHN0cnVjdCBwYWdlICopOworZXh0ZXJuIGludCByZW1vdmVfZXhjbHVzaXZlX3N3YXBfcGFnZV9yZWYoc3RydWN0IHBhZ2UgKik7CiBzdHJ1Y3QgYmFja2luZ19kZXZfaW5mbzsKIAogLyogbGludXgvbW0vdGhyYXNoLmMgKi8KQEAgLTMzOSw2ICszOTcsMTEgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGlubGluZSBpbnQgcmVtb3ZlX2V4Y2x1c2l2ZV9zd2FwX3BhZ2VfcmVmKHN0cnVjdCBwYWdlICpwYWdlKQoreworCXJldHVybiAwOworfQorCiBzdGF0aWMgaW5saW5lIHN3cF9lbnRyeV90IGdldF9zd2FwX3BhZ2Uodm9pZCkKIHsKIAlzd3BfZW50cnlfdCBlbnRyeTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3dpb3RsYi5oIGIvaW5jbHVkZS9saW51eC9zd2lvdGxiLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjE4ZWM1NQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvc3dpb3RsYi5oCkBAIC0wLDAgKzEsODMgQEAKKyNpZm5kZWYgX19MSU5VWF9TV0lPVExCX0gKKyNkZWZpbmUgX19MSU5VWF9TV0lPVExCX0gKKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKK3N0cnVjdCBkZXZpY2U7CitzdHJ1Y3QgZG1hX2F0dHJzOworc3RydWN0IHNjYXR0ZXJsaXN0OworCitleHRlcm4gdm9pZAorc3dpb3RsYl9pbml0KHZvaWQpOworCitleHRlcm4gdm9pZAorKnN3aW90bGJfYWxsb2NfY29oZXJlbnQoc3RydWN0IGRldmljZSAqaHdkZXYsIHNpemVfdCBzaXplLAorCQkJZG1hX2FkZHJfdCAqZG1hX2hhbmRsZSwgZ2ZwX3QgZmxhZ3MpOworCitleHRlcm4gdm9pZAorc3dpb3RsYl9mcmVlX2NvaGVyZW50KHN0cnVjdCBkZXZpY2UgKmh3ZGV2LCBzaXplX3Qgc2l6ZSwKKwkJICAgICAgdm9pZCAqdmFkZHIsIGRtYV9hZGRyX3QgZG1hX2hhbmRsZSk7CisKK2V4dGVybiBkbWFfYWRkcl90Citzd2lvdGxiX21hcF9zaW5nbGUoc3RydWN0IGRldmljZSAqaHdkZXYsIHZvaWQgKnB0ciwgc2l6ZV90IHNpemUsIGludCBkaXIpOworCitleHRlcm4gdm9pZAorc3dpb3RsYl91bm1hcF9zaW5nbGUoc3RydWN0IGRldmljZSAqaHdkZXYsIGRtYV9hZGRyX3QgZGV2X2FkZHIsCisJCSAgICAgc2l6ZV90IHNpemUsIGludCBkaXIpOworCitleHRlcm4gZG1hX2FkZHJfdAorc3dpb3RsYl9tYXBfc2luZ2xlX2F0dHJzKHN0cnVjdCBkZXZpY2UgKmh3ZGV2LCB2b2lkICpwdHIsIHNpemVfdCBzaXplLAorCQkJIGludCBkaXIsIHN0cnVjdCBkbWFfYXR0cnMgKmF0dHJzKTsKKworZXh0ZXJuIHZvaWQKK3N3aW90bGJfdW5tYXBfc2luZ2xlX2F0dHJzKHN0cnVjdCBkZXZpY2UgKmh3ZGV2LCBkbWFfYWRkcl90IGRldl9hZGRyLAorCQkJICAgc2l6ZV90IHNpemUsIGludCBkaXIsIHN0cnVjdCBkbWFfYXR0cnMgKmF0dHJzKTsKKworZXh0ZXJuIGludAorc3dpb3RsYl9tYXBfc2coc3RydWN0IGRldmljZSAqaHdkZXYsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csIGludCBuZW50cywKKwkgICAgICAgaW50IGRpcmVjdGlvbik7CisKK2V4dGVybiB2b2lkCitzd2lvdGxiX3VubWFwX3NnKHN0cnVjdCBkZXZpY2UgKmh3ZGV2LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLCBpbnQgbmVudHMsCisJCSBpbnQgZGlyZWN0aW9uKTsKKworZXh0ZXJuIGludAorc3dpb3RsYl9tYXBfc2dfYXR0cnMoc3RydWN0IGRldmljZSAqaHdkZXYsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2dsLCBpbnQgbmVsZW1zLAorCQkgICAgIGludCBkaXIsIHN0cnVjdCBkbWFfYXR0cnMgKmF0dHJzKTsKKworZXh0ZXJuIHZvaWQKK3N3aW90bGJfdW5tYXBfc2dfYXR0cnMoc3RydWN0IGRldmljZSAqaHdkZXYsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2dsLAorCQkgICAgICAgaW50IG5lbGVtcywgaW50IGRpciwgc3RydWN0IGRtYV9hdHRycyAqYXR0cnMpOworCitleHRlcm4gdm9pZAorc3dpb3RsYl9zeW5jX3NpbmdsZV9mb3JfY3B1KHN0cnVjdCBkZXZpY2UgKmh3ZGV2LCBkbWFfYWRkcl90IGRldl9hZGRyLAorCQkJICAgIHNpemVfdCBzaXplLCBpbnQgZGlyKTsKKworZXh0ZXJuIHZvaWQKK3N3aW90bGJfc3luY19zZ19mb3JfY3B1KHN0cnVjdCBkZXZpY2UgKmh3ZGV2LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLAorCQkJaW50IG5lbGVtcywgaW50IGRpcik7CisKK2V4dGVybiB2b2lkCitzd2lvdGxiX3N5bmNfc2luZ2xlX2Zvcl9kZXZpY2Uoc3RydWN0IGRldmljZSAqaHdkZXYsIGRtYV9hZGRyX3QgZGV2X2FkZHIsCisJCQkgICAgICAgc2l6ZV90IHNpemUsIGludCBkaXIpOworCitleHRlcm4gdm9pZAorc3dpb3RsYl9zeW5jX3NnX2Zvcl9kZXZpY2Uoc3RydWN0IGRldmljZSAqaHdkZXYsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csCisJCQkgICBpbnQgbmVsZW1zLCBpbnQgZGlyKTsKKworZXh0ZXJuIHZvaWQKK3N3aW90bGJfc3luY19zaW5nbGVfcmFuZ2VfZm9yX2NwdShzdHJ1Y3QgZGV2aWNlICpod2RldiwgZG1hX2FkZHJfdCBkZXZfYWRkciwKKwkJCQkgIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCBzaXplX3Qgc2l6ZSwgaW50IGRpcik7CisKK2V4dGVybiB2b2lkCitzd2lvdGxiX3N5bmNfc2luZ2xlX3JhbmdlX2Zvcl9kZXZpY2Uoc3RydWN0IGRldmljZSAqaHdkZXYsIGRtYV9hZGRyX3QgZGV2X2FkZHIsCisJCQkJICAgICB1bnNpZ25lZCBsb25nIG9mZnNldCwgc2l6ZV90IHNpemUsCisJCQkJICAgICBpbnQgZGlyKTsKKworZXh0ZXJuIGludAorc3dpb3RsYl9kbWFfbWFwcGluZ19lcnJvcihzdHJ1Y3QgZGV2aWNlICpod2RldiwgZG1hX2FkZHJfdCBkbWFfYWRkcik7CisKK2V4dGVybiBpbnQKK3N3aW90bGJfZG1hX3N1cHBvcnRlZChzdHJ1Y3QgZGV2aWNlICpod2RldiwgdTY0IG1hc2spOworCisjZW5kaWYgLyogX19MSU5VWF9TV0lPVExCX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3lzY3RsLmggYi9pbmNsdWRlL2xpbnV4L3N5c2N0bC5oCmluZGV4IGQwNDM3ZjMuLjM5ZDQ3MWQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc3lzY3RsLmgKKysrIGIvaW5jbHVkZS9saW51eC9zeXNjdGwuaApAQCAtOTcyLDcgKzk3Miw3IEBACiAKIHR5cGVkZWYgc3RydWN0IGN0bF90YWJsZSBjdGxfdGFibGU7CiAKLXR5cGVkZWYgaW50IGN0bF9oYW5kbGVyIChzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSwgaW50IF9fdXNlciAqbmFtZSwgaW50IG5sZW4sCit0eXBlZGVmIGludCBjdGxfaGFuZGxlciAoc3RydWN0IGN0bF90YWJsZSAqdGFibGUsCiAJCQkgdm9pZCBfX3VzZXIgKm9sZHZhbCwgc2l6ZV90IF9fdXNlciAqb2xkbGVucCwKIAkJCSB2b2lkIF9fdXNlciAqbmV3dmFsLCBzaXplX3QgbmV3bGVuKTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zeXNmcy5oIGIvaW5jbHVkZS9saW51eC9zeXNmcy5oCmluZGV4IDM3ZmEyNDEuLjlkNjhmZWQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc3lzZnMuaAorKysgYi9pbmNsdWRlL2xpbnV4L3N5c2ZzLmgKQEAgLTIxLDggKzIxLDkgQEAKIHN0cnVjdCBtb2R1bGU7CiAKIC8qIEZJWE1FCi0gKiBUaGUgKm93bmVyIGZpZWxkIGlzIG5vIGxvbmdlciB1c2VkLCBidXQgbGVhdmUgYXJvdW5kCi0gKiB1bnRpbCB0aGUgdHJlZSBnZXRzIGNsZWFuZWQgdXAgZnVsbHkuCisgKiBUaGUgKm93bmVyIGZpZWxkIGlzIG5vIGxvbmdlciB1c2VkLgorICogeDg2IHRyZWUgaGFzIGJlZW4gY2xlYW5lZCB1cC4gVGhlIG93bmVyCisgKiBhdHRyaWJ1dGUgaXMgc3RpbGwgbGVmdCBmb3Igb3RoZXIgYXJjaGVzLgogICovCiBzdHJ1Y3QgYXR0cmlidXRlIHsKIAljb25zdCBjaGFyCQkqbmFtZTsKQEAgLTc4LDYgKzc5LDggQEAKIAlzc2l6ZV90CSgqc3RvcmUpKHN0cnVjdCBrb2JqZWN0ICosc3RydWN0IGF0dHJpYnV0ZSAqLGNvbnN0IGNoYXIgKiwgc2l6ZV90KTsKIH07CiAKK3N0cnVjdCBzeXNmc19kaXJlbnQ7CisKICNpZmRlZiBDT05GSUdfU1lTRlMKIAogaW50IHN5c2ZzX3NjaGVkdWxlX2NhbGxiYWNrKHN0cnVjdCBrb2JqZWN0ICprb2JqLCB2b2lkICgqZnVuYykodm9pZCAqKSwKQEAgLTExNyw5ICsxMjAsMTQgQEAKIHZvaWQgc3lzZnNfcmVtb3ZlX2ZpbGVfZnJvbV9ncm91cChzdHJ1Y3Qga29iamVjdCAqa29iaiwKIAkJCWNvbnN0IHN0cnVjdCBhdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmdyb3VwKTsKIAotdm9pZCBzeXNmc19ub3RpZnkoc3RydWN0IGtvYmplY3QgKmtvYmosIGNoYXIgKmRpciwgY2hhciAqYXR0cik7Ci0KLWV4dGVybiBpbnQgX19tdXN0X2NoZWNrIHN5c2ZzX2luaXQodm9pZCk7Cit2b2lkIHN5c2ZzX25vdGlmeShzdHJ1Y3Qga29iamVjdCAqa29iaiwgY29uc3QgY2hhciAqZGlyLCBjb25zdCBjaGFyICphdHRyKTsKK3ZvaWQgc3lzZnNfbm90aWZ5X2RpcmVudChzdHJ1Y3Qgc3lzZnNfZGlyZW50ICpzZCk7CitzdHJ1Y3Qgc3lzZnNfZGlyZW50ICpzeXNmc19nZXRfZGlyZW50KHN0cnVjdCBzeXNmc19kaXJlbnQgKnBhcmVudF9zZCwKKwkJCQkgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpuYW1lKTsKK3N0cnVjdCBzeXNmc19kaXJlbnQgKnN5c2ZzX2dldChzdHJ1Y3Qgc3lzZnNfZGlyZW50ICpzZCk7Cit2b2lkIHN5c2ZzX3B1dChzdHJ1Y3Qgc3lzZnNfZGlyZW50ICpzZCk7Cit2b2lkIHN5c2ZzX3ByaW50a19sYXN0X2ZpbGUodm9pZCk7CitpbnQgX19tdXN0X2NoZWNrIHN5c2ZzX2luaXQodm9pZCk7CiAKICNlbHNlIC8qIENPTkZJR19TWVNGUyAqLwogCkBAIC0yMjIsNyArMjMwLDI0IEBACiB7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBzeXNmc19ub3RpZnkoc3RydWN0IGtvYmplY3QgKmtvYmosIGNoYXIgKmRpciwgY2hhciAqYXR0cikKK3N0YXRpYyBpbmxpbmUgdm9pZCBzeXNmc19ub3RpZnkoc3RydWN0IGtvYmplY3QgKmtvYmosIGNvbnN0IGNoYXIgKmRpciwKKwkJCQljb25zdCBjaGFyICphdHRyKQoreworfQorc3RhdGljIGlubGluZSB2b2lkIHN5c2ZzX25vdGlmeV9kaXJlbnQoc3RydWN0IHN5c2ZzX2RpcmVudCAqc2QpCit7Cit9CitzdGF0aWMgaW5saW5lCitzdHJ1Y3Qgc3lzZnNfZGlyZW50ICpzeXNmc19nZXRfZGlyZW50KHN0cnVjdCBzeXNmc19kaXJlbnQgKnBhcmVudF9zZCwKKwkJCQkgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpuYW1lKQoreworCXJldHVybiBOVUxMOworfQorc3RhdGljIGlubGluZSBzdHJ1Y3Qgc3lzZnNfZGlyZW50ICpzeXNmc19nZXQoc3RydWN0IHN5c2ZzX2RpcmVudCAqc2QpCit7CisJcmV0dXJuIE5VTEw7Cit9CitzdGF0aWMgaW5saW5lIHZvaWQgc3lzZnNfcHV0KHN0cnVjdCBzeXNmc19kaXJlbnQgKnNkKQogewogfQogCkBAIC0yMzEsNiArMjU2LDEwIEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbmxpbmUgdm9pZCBzeXNmc19wcmludGtfbGFzdF9maWxlKHZvaWQpCit7Cit9CisKICNlbmRpZiAvKiBDT05GSUdfU1lTRlMgKi8KIAogI2VuZGlmIC8qIF9TWVNGU19IXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC90YXNrX2lvX2FjY291bnRpbmcuaCBiL2luY2x1ZGUvbGludXgvdGFza19pb19hY2NvdW50aW5nLmgKaW5kZXggNWU4OGFmYy4uYmRmODU1YyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC90YXNrX2lvX2FjY291bnRpbmcuaAorKysgYi9pbmNsdWRlL2xpbnV4L3Rhc2tfaW9fYWNjb3VudGluZy5oCkBAIC01LDcgKzUsNyBAQAogICogRG9uJ3QgaW5jbHVkZSB0aGlzIGhlYWRlciBmaWxlIGRpcmVjdGx5IC0gaXQgaXMgZGVzaWduZWQgdG8gYmUgZHJhZ2dlZCBpbiB2aWEKICAqIHNjaGVkLmguCiAgKgotICogQmxhbWUgYWtwbUBvc2RsLm9yZyBmb3IgYWxsIHRoaXMuCisgKiBCbGFtZSBBbmRyZXcgTW9ydG9uIGZvciBhbGwgdGhpcy4KICAqLwogCiBzdHJ1Y3QgdGFza19pb19hY2NvdW50aW5nIHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdGVsZXBob255LmggYi9pbmNsdWRlL2xpbnV4L3RlbGVwaG9ueS5oCmluZGV4IDBkMGNmMmEuLjViMmI2MjYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdGVsZXBob255LmgKKysrIGIvaW5jbHVkZS9saW51eC90ZWxlcGhvbnkuaApAQCAtMjgsMTAgKzI4LDYgQEAKICAqIE9OIEFOICJBUyBJUyIgQkFTSVMsIEFORCBRVUlDS05FVCBURUNITk9MT0dJRVMsIElOQy4gSEFTIE5PIE9CTElHQVRJT04KICAqIFRPIFBST1ZJREUgTUFJTlRFTkFOQ0UsIFNVUFBPUlQsIFVQREFURVMsIEVOSEFOQ0VNRU5UUywgT1IgTU9ESUZJQ0FUSU9OUy4KICAqCi0gKiBWZXJzaW9uOiAgICAgICAkUmV2aXNpb246IDQuMiAkCi0gKgotICogJElkOiB0ZWxlcGhvbnkuaCx2IDQuMiAyMDAxLzA4LzA2IDA3OjA5OjQzIGNyYWlncyBFeHAgJAotICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogI2lmbmRlZiBURUxFUEhPTllfSApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC90ZXJtaW9zLmggYi9pbmNsdWRlL2xpbnV4L3Rlcm1pb3MuaAppbmRleCA0Nzg2NjI4Li4yYWNkMGMxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3Rlcm1pb3MuaAorKysgYi9pbmNsdWRlL2xpbnV4L3Rlcm1pb3MuaApAQCAtNCw0ICs0LDE5IEBACiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxhc20vdGVybWlvcy5oPgogCisjZGVmaW5lIE5GRgk1CisKK3N0cnVjdCB0ZXJtaW94Cit7CisJX191MTYJeF9oZmxhZzsKKwlfX3UxNgl4X2NmbGFnOworCV9fdTE2CXhfcmZsYWdbTkZGXTsKKwlfX3UxNgl4X3NmbGFnOworfTsKKworI2RlZmluZQlSVFNYT0ZGCQkweDAwMDEJCS8qIFJUUyBmbG93IGNvbnRyb2wgb24gaW5wdXQgKi8KKyNkZWZpbmUJQ1RTWE9OCQkweDAwMDIJCS8qIENUUyBmbG93IGNvbnRyb2wgb24gb3V0cHV0ICovCisjZGVmaW5lCURUUlhPRkYJCTB4MDAwNAkJLyogRFRSIGZsb3cgY29udHJvbCBvbiBpbnB1dCAqLworI2RlZmluZSBEU1JYT04JCTB4MDAwOAkJLyogRENEIGZsb3cgY29udHJvbCBvbiBvdXRwdXQgKi8KKwogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3RpY2suaCBiL2luY2x1ZGUvbGludXgvdGljay5oCmluZGV4IDk4OTIxYTMuLmI2ZWM4MTggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdGljay5oCisrKyBiL2luY2x1ZGUvbGludXgvdGljay5oCkBAIC05Niw5ICs5NiwxMSBAQAogZXh0ZXJuIHZvaWQgdGlja19jbG9ja19ub3RpZnkodm9pZCk7CiBleHRlcm4gaW50IHRpY2tfY2hlY2tfb25lc2hvdF9jaGFuZ2UoaW50IGFsbG93X25vaHopOwogZXh0ZXJuIHN0cnVjdCB0aWNrX3NjaGVkICp0aWNrX2dldF90aWNrX3NjaGVkKGludCBjcHUpOworZXh0ZXJuIHZvaWQgdGlja19jaGVja19pZGxlKGludCBjcHUpOwogIyBlbHNlCiBzdGF0aWMgaW5saW5lIHZvaWQgdGlja19jbG9ja19ub3RpZnkodm9pZCkgeyB9CiBzdGF0aWMgaW5saW5lIGludCB0aWNrX2NoZWNrX29uZXNob3RfY2hhbmdlKGludCBhbGxvd19ub2h6KSB7IHJldHVybiAwOyB9CitzdGF0aWMgaW5saW5lIHZvaWQgdGlja19jaGVja19pZGxlKGludCBjcHUpIHsgfQogIyBlbmRpZgogCiAjZWxzZSAvKiBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUyAqLwpAQCAtMTA2LDI2ICsxMDgsMjMgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCB0aWNrX2NhbmNlbF9zY2hlZF90aW1lcihpbnQgY3B1KSB7IH0KIHN0YXRpYyBpbmxpbmUgdm9pZCB0aWNrX2Nsb2NrX25vdGlmeSh2b2lkKSB7IH0KIHN0YXRpYyBpbmxpbmUgaW50IHRpY2tfY2hlY2tfb25lc2hvdF9jaGFuZ2UoaW50IGFsbG93X25vaHopIHsgcmV0dXJuIDA7IH0KK3N0YXRpYyBpbmxpbmUgdm9pZCB0aWNrX2NoZWNrX2lkbGUoaW50IGNwdSkgeyB9CiAjZW5kaWYgLyogIUNPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTICovCiAKICMgaWZkZWYgQ09ORklHX05PX0haCiBleHRlcm4gdm9pZCB0aWNrX25vaHpfc3RvcF9zY2hlZF90aWNrKGludCBpbmlkbGUpOwogZXh0ZXJuIHZvaWQgdGlja19ub2h6X3Jlc3RhcnRfc2NoZWRfdGljayh2b2lkKTsKLWV4dGVybiB2b2lkIHRpY2tfbm9oel91cGRhdGVfamlmZmllcyh2b2lkKTsKIGV4dGVybiBrdGltZV90IHRpY2tfbm9oel9nZXRfc2xlZXBfbGVuZ3RoKHZvaWQpOwotZXh0ZXJuIHZvaWQgdGlja19ub2h6X3N0b3BfaWRsZShpbnQgY3B1KTsKIGV4dGVybiB1NjQgZ2V0X2NwdV9pZGxlX3RpbWVfdXMoaW50IGNwdSwgdTY0ICpsYXN0X3VwZGF0ZV90aW1lKTsKICMgZWxzZQogc3RhdGljIGlubGluZSB2b2lkIHRpY2tfbm9oel9zdG9wX3NjaGVkX3RpY2soaW50IGluaWRsZSkgeyB9CiBzdGF0aWMgaW5saW5lIHZvaWQgdGlja19ub2h6X3Jlc3RhcnRfc2NoZWRfdGljayh2b2lkKSB7IH0KLXN0YXRpYyBpbmxpbmUgdm9pZCB0aWNrX25vaHpfdXBkYXRlX2ppZmZpZXModm9pZCkgeyB9CiBzdGF0aWMgaW5saW5lIGt0aW1lX3QgdGlja19ub2h6X2dldF9zbGVlcF9sZW5ndGgodm9pZCkKIHsKIAlrdGltZV90IGxlbiA9IHsgLnR2NjQgPSBOU0VDX1BFUl9TRUMvSFogfTsKIAogCXJldHVybiBsZW47CiB9Ci1zdGF0aWMgaW5saW5lIHZvaWQgdGlja19ub2h6X3N0b3BfaWRsZShpbnQgY3B1KSB7IH0KIHN0YXRpYyBpbmxpbmUgdTY0IGdldF9jcHVfaWRsZV90aW1lX3VzKGludCBjcHUsIHU2NCAqdW51c2VkKSB7IHJldHVybiAtMTsgfQogIyBlbmRpZiAvKiAhTk9fSFogKi8KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC90aW1lLmggYi9pbmNsdWRlL2xpbnV4L3RpbWUuaAppbmRleCBlMTUyMDZhLi40ZjFjOWRiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3RpbWUuaAorKysgYi9pbmNsdWRlL2xpbnV4L3RpbWUuaApAQCAtMjksNiArMjksOCBAQAogCiAjaWZkZWYgX19LRVJORUxfXwogCitleHRlcm4gc3RydWN0IHRpbWV6b25lIHN5c190ejsKKwogLyogUGFyYW1ldGVycyB1c2VkIHRvIGNvbnZlcnQgdGhlIHRpbWVzcGVjIHZhbHVlczogKi8KICNkZWZpbmUgTVNFQ19QRVJfU0VDCTEwMDBMCiAjZGVmaW5lIFVTRUNfUEVSX01TRUMJMTAwMEwKQEAgLTExNyw2ICsxMTksNyBAQAogZXh0ZXJuIHVuc2lnbmVkIGludCBhbGFybV9zZXRpdGltZXIodW5zaWduZWQgaW50IHNlY29uZHMpOwogZXh0ZXJuIGludCBkb19nZXRpdGltZXIoaW50IHdoaWNoLCBzdHJ1Y3QgaXRpbWVydmFsICp2YWx1ZSk7CiBleHRlcm4gdm9pZCBnZXRuc3RpbWVvZmRheShzdHJ1Y3QgdGltZXNwZWMgKnR2KTsKK2V4dGVybiB2b2lkIGdldHJhd21vbm90b25pYyhzdHJ1Y3QgdGltZXNwZWMgKnRzKTsKIGV4dGVybiB2b2lkIGdldGJvb3R0aW1lKHN0cnVjdCB0aW1lc3BlYyAqdHMpOwogZXh0ZXJuIHZvaWQgbW9ub3RvbmljX3RvX2Jvb3RiYXNlZChzdHJ1Y3QgdGltZXNwZWMgKnRzKTsKIApAQCAtMTI1LDYgKzEyOCw5IEBACiBleHRlcm4gdm9pZCB1cGRhdGVfd2FsbF90aW1lKHZvaWQpOwogZXh0ZXJuIHZvaWQgdXBkYXRlX3h0aW1lX2NhY2hlKHU2NCBuc2VjKTsKIAorc3RydWN0IHRtczsKK2V4dGVybiB2b2lkIGRvX3N5c190aW1lcyhzdHJ1Y3QgdG1zICopOworCiAvKioKICAqIHRpbWVzcGVjX3RvX25zIC0gQ29udmVydCB0aW1lc3BlYyB0byBuYW5vc2Vjb25kcwogICogQHRzOgkJcG9pbnRlciB0byB0aGUgdGltZXNwZWMgdmFyaWFibGUgdG8gYmUgY29udmVydGVkCkBAIC0yMTQsNiArMjIwLDcgQEAKICNkZWZpbmUgQ0xPQ0tfTU9OT1RPTklDCQkJMQogI2RlZmluZSBDTE9DS19QUk9DRVNTX0NQVVRJTUVfSUQJMgogI2RlZmluZSBDTE9DS19USFJFQURfQ1BVVElNRV9JRAkJMworI2RlZmluZSBDTE9DS19NT05PVE9OSUNfUkFXCQk0CiAKIC8qCiAgKiBUaGUgSURzIG9mIHZhcmlvdXMgaGFyZHdhcmUgY2xvY2tzOgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC90aW1leC5oIGIvaW5jbHVkZS9saW51eC90aW1leC5oCmluZGV4IGZjNjAzNWQuLjkwMDczMTMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdGltZXguaAorKysgYi9pbmNsdWRlL2xpbnV4L3RpbWV4LmgKQEAgLTgyLDcgKzgyLDcgQEAKICAqLwogI2RlZmluZSBTSElGVF9VU0VDIDE2CQkvKiBmcmVxdWVuY3kgb2Zmc2V0IHNjYWxlIChzaGlmdCkgKi8KICNkZWZpbmUgUFBNX1NDQUxFIChOU0VDX1BFUl9VU0VDIDw8IChOVFBfU0NBTEVfU0hJRlQgLSBTSElGVF9VU0VDKSkKLSNkZWZpbmUgUFBNX1NDQUxFX0lOVl9TSElGVCAyMAorI2RlZmluZSBQUE1fU0NBTEVfSU5WX1NISUZUIDE5CiAjZGVmaW5lIFBQTV9TQ0FMRV9JTlYgKCgxbGwgPDwgKFBQTV9TQ0FMRV9JTlZfU0hJRlQgKyBOVFBfU0NBTEVfU0hJRlQpKSAvIFwKIAkJICAgICAgIFBQTV9TQ0FMRSArIDEpCiAKQEAgLTE0MSw4ICsxNDEsMTUgQEAKICNkZWZpbmUgQURKX01JQ1JPCQkweDEwMDAJLyogc2VsZWN0IG1pY3Jvc2Vjb25kIHJlc29sdXRpb24gKi8KICNkZWZpbmUgQURKX05BTk8JCTB4MjAwMAkvKiBzZWxlY3QgbmFub3NlY29uZCByZXNvbHV0aW9uICovCiAjZGVmaW5lIEFESl9USUNLCQkweDQwMDAJLyogdGljayB2YWx1ZSAqLworCisjaWZkZWYgX19LRVJORUxfXworI2RlZmluZSBBREpfQURKVElNRQkJMHg4MDAwCS8qIHN3aXRjaCBiZXR3ZWVuIGFkanRpbWUvYWRqdGltZXggbW9kZXMgKi8KKyNkZWZpbmUgQURKX09GRlNFVF9TSU5HTEVTSE9UCTB4MDAwMQkvKiBvbGQtZmFzaGlvbmVkIGFkanRpbWUgKi8KKyNkZWZpbmUgQURKX09GRlNFVF9SRUFET05MWQkweDIwMDAJLyogcmVhZC1vbmx5IGFkanRpbWUgKi8KKyNlbHNlCiAjZGVmaW5lIEFESl9PRkZTRVRfU0lOR0xFU0hPVAkweDgwMDEJLyogb2xkLWZhc2hpb25lZCBhZGp0aW1lICovCi0jZGVmaW5lIEFESl9PRkZTRVRfU1NfUkVBRAkweGEwMDEgIC8qIHJlYWQtb25seSBhZGp0aW1lICovCisjZGVmaW5lIEFESl9PRkZTRVRfU1NfUkVBRAkweGEwMDEJLyogcmVhZC1vbmx5IGFkanRpbWUgKi8KKyNlbmRpZgogCiAvKiB4bnRwIDMuNCBjb21wYXRpYmlsaXR5IG5hbWVzICovCiAjZGVmaW5lIE1PRF9PRkZTRVQJQURKX09GRlNFVApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC90dHkuaCBiL2luY2x1ZGUvbGludXgvdHR5LmgKaW5kZXggMGNiZWM3NC4uM2I4MTIxZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC90dHkuaAorKysgYi9pbmNsdWRlL2xpbnV4L3R0eS5oCkBAIC0yMyw3ICsyMyw3IEBACiAgKi8KICNkZWZpbmUgTlJfVU5JWDk4X1BUWV9ERUZBVUxUCTQwOTYgICAgICAvKiBEZWZhdWx0IG1heGltdW0gZm9yIFVuaXg5OCBwdHlzICovCiAjZGVmaW5lIE5SX1VOSVg5OF9QVFlfTUFYCSgxIDw8IE1JTk9SQklUUykgLyogQWJzb2x1dGUgbGltaXQgKi8KLSNkZWZpbmUgTlJfTERJU0NTCQkxOAorI2RlZmluZSBOUl9MRElTQ1MJCTE5CiAKIC8qIGxpbmUgZGlzY2lwbGluZXMgKi8KICNkZWZpbmUgTl9UVFkJCTAKQEAgLTQ1LDYgKzQ1LDcgQEAKICNkZWZpbmUgTl9IQ0kJCTE1CS8qIEJsdWV0b290aCBIQ0kgVUFSVCAqLwogI2RlZmluZSBOX0dJR0FTRVRfTTEwMQkxNgkvKiBTaWVtZW5zIEdpZ2FzZXQgTTEwMSBzZXJpYWwgREVDVCBhZGFwdGVyICovCiAjZGVmaW5lIE5fU0xDQU4JCTE3CS8qIFNlcmlhbCAvIFVTQiBzZXJpYWwgQ0FOIEFkYXB0b3JzICovCisjZGVmaW5lIE5fUFBTCQkxOAkvKiBQdWxzZSBwZXIgU2Vjb25kICovCiAKIC8qCiAgKiBUaGlzIGNoYXJhY3RlciBpcyB0aGUgc2FtZSBhcyBfUE9TSVhfVkRJU0FCTEU6IGl0IGNhbm5vdCBiZSB1c2VkIGFzCkBAIC0xODEsNiArMTgyLDcgQEAKIAogc3RydWN0IHR0eV9wb3J0IHsKIAlzdHJ1Y3QgdHR5X3N0cnVjdAkqdHR5OwkJLyogQmFjayBwb2ludGVyICovCisJc3BpbmxvY2tfdAkJbG9jazsJCS8qIExvY2sgcHJvdGVjdGluZyB0dHkgZmllbGQgKi8KIAlpbnQJCQlibG9ja2VkX29wZW47CS8qIFdhaXRpbmcgdG8gb3BlbiAqLwogCWludAkJCWNvdW50OwkJLyogVXNhZ2UgY291bnQgKi8KIAl3YWl0X3F1ZXVlX2hlYWRfdAlvcGVuX3dhaXQ7CS8qIE9wZW4gd2FpdGVycyAqLwpAQCAtMjA4LDYgKzIxMCw3IEBACiAKIHN0cnVjdCB0dHlfc3RydWN0IHsKIAlpbnQJbWFnaWM7CisJc3RydWN0IGtyZWYga3JlZjsKIAlzdHJ1Y3QgdHR5X2RyaXZlciAqZHJpdmVyOwogCWNvbnN0IHN0cnVjdCB0dHlfb3BlcmF0aW9ucyAqb3BzOwogCWludCBpbmRleDsKQEAgLTIxNyw2ICsyMjAsNyBAQAogCXNwaW5sb2NrX3QgY3RybF9sb2NrOwogCS8qIFRlcm1pb3MgdmFsdWVzIGFyZSBwcm90ZWN0ZWQgYnkgdGhlIHRlcm1pb3MgbXV0ZXggKi8KIAlzdHJ1Y3Qga3Rlcm1pb3MgKnRlcm1pb3MsICp0ZXJtaW9zX2xvY2tlZDsKKwlzdHJ1Y3QgdGVybWlveCAqdGVybWlveDsJLyogTWF5IGJlIE5VTEwgZm9yIHVuc3VwcG9ydGVkICovCiAJY2hhciBuYW1lWzY0XTsKIAlzdHJ1Y3QgcGlkICpwZ3JwOwkJLyogUHJvdGVjdGVkIGJ5IGN0cmwgbG9jayAqLwogCXN0cnVjdCBwaWQgKnNlc3Npb247CkBAIC0zMTAsNiArMzE0LDI1IEBACiBleHRlcm4gdm9pZCBjb25zb2xlX2luaXQodm9pZCk7CiBleHRlcm4gaW50IHZjc19pbml0KHZvaWQpOwogCitleHRlcm4gc3RydWN0IGNsYXNzICp0dHlfY2xhc3M7CisKKy8qKgorICoJdHR5X2tyZWZfZ2V0CQktCWdldCBhIHR0eSByZWZlcmVuY2UKKyAqCUB0dHk6IHR0eSBkZXZpY2UKKyAqCisgKglSZXR1cm4gYSBuZXcgcmVmZXJlbmNlIHRvIGEgdHR5IG9iamVjdC4gVGhlIGNhbGxlciBtdXN0IGhvbGQKKyAqCXN1ZmZpY2llbnQgbG9ja3MvY291bnRzIHRvIGVuc3VyZSB0aGF0IHRoZWlyIGV4aXN0aW5nIHJlZmVyZW5jZSBjYW5ub3QKKyAqCWdvIGF3YXkKKyAqLworCitleHRlcm4gaW5saW5lIHN0cnVjdCB0dHlfc3RydWN0ICp0dHlfa3JlZl9nZXQoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKK3sKKwlpZiAodHR5KQorCQlrcmVmX2dldCgmdHR5LT5rcmVmKTsKKwlyZXR1cm4gdHR5OworfQorZXh0ZXJuIHZvaWQgdHR5X2tyZWZfcHV0KHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpOworCiBleHRlcm4gaW50IHR0eV9wYXJhbm9pYV9jaGVjayhzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAogCQkJICAgICAgY29uc3QgY2hhciAqcm91dGluZSk7CiBleHRlcm4gY2hhciAqdHR5X25hbWUoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgY2hhciAqYnVmKTsKQEAgLTMzMywxMyArMzU2LDE1IEBACiBleHRlcm4gdm9pZCB0dHlfdW50aHJvdHRsZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KTsKIGV4dGVybiBpbnQgdHR5X2RvX3Jlc2l6ZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgdHR5X3N0cnVjdCAqcmVhbF90dHksCiAJCQkJCQlzdHJ1Y3Qgd2luc2l6ZSAqd3MpOwotCitleHRlcm4gdm9pZCB0dHlfc2h1dGRvd24oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSk7CitleHRlcm4gdm9pZCB0dHlfZnJlZV90ZXJtaW9zKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpOwogZXh0ZXJuIGludCBpc19jdXJyZW50X3BncnBfb3JwaGFuZWQodm9pZCk7CiBleHRlcm4gc3RydWN0IHBpZCAqdHR5X2dldF9wZ3JwKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpOwogZXh0ZXJuIGludCBpc19pZ25vcmVkKGludCBzaWcpOwogZXh0ZXJuIGludCB0dHlfc2lnbmFsKGludCBzaWcsIHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpOwogZXh0ZXJuIHZvaWQgdHR5X2hhbmd1cChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KTsKIGV4dGVybiB2b2lkIHR0eV92aGFuZ3VwKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpOworZXh0ZXJuIHZvaWQgdHR5X3ZoYW5ndXBfc2VsZih2b2lkKTsKIGV4dGVybiB2b2lkIHR0eV91bmhhbmd1cChzdHJ1Y3QgZmlsZSAqZmlscCk7CiBleHRlcm4gaW50IHR0eV9odW5nX3VwX3Aoc3RydWN0IGZpbGUgKmZpbHApOwogZXh0ZXJuIHZvaWQgZG9fU0FLKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpOwpAQCAtMzQ3LDYgKzM3Miw5IEBACiBleHRlcm4gdm9pZCBkaXNhc3NvY2lhdGVfY3R0eShpbnQgcHJpdik7CiBleHRlcm4gdm9pZCBub190dHkodm9pZCk7CiBleHRlcm4gdm9pZCB0dHlfZmxpcF9idWZmZXJfcHVzaChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KTsKK2V4dGVybiB2b2lkIHR0eV9idWZmZXJfZnJlZV9hbGwoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSk7CitleHRlcm4gdm9pZCB0dHlfYnVmZmVyX2ZsdXNoKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpOworZXh0ZXJuIHZvaWQgdHR5X2J1ZmZlcl9pbml0KHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpOwogZXh0ZXJuIHNwZWVkX3QgdHR5X2dldF9iYXVkX3JhdGUoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSk7CiBleHRlcm4gc3BlZWRfdCB0dHlfdGVybWlvc19iYXVkX3JhdGUoc3RydWN0IGt0ZXJtaW9zICp0ZXJtaW9zKTsKIGV4dGVybiBzcGVlZF90IHR0eV90ZXJtaW9zX2lucHV0X2JhdWRfcmF0ZShzdHJ1Y3Qga3Rlcm1pb3MgKnRlcm1pb3MpOwpAQCAtMzcyLDYgKzQwMCwxNSBAQAogZXh0ZXJuIGRldl90IHR0eV9kZXZudW0oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSk7CiBleHRlcm4gdm9pZCBwcm9jX2NsZWFyX3R0eShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApOwogZXh0ZXJuIHN0cnVjdCB0dHlfc3RydWN0ICpnZXRfY3VycmVudF90dHkodm9pZCk7CitleHRlcm4gdm9pZCB0dHlfZGVmYXVsdF9mb3BzKHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgKmZvcHMpOworZXh0ZXJuIHN0cnVjdCB0dHlfc3RydWN0ICphbGxvY190dHlfc3RydWN0KHZvaWQpOworZXh0ZXJuIHZvaWQgZnJlZV90dHlfc3RydWN0KHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpOworZXh0ZXJuIHZvaWQgaW5pdGlhbGl6ZV90dHlfc3RydWN0KHN0cnVjdCB0dHlfc3RydWN0ICp0dHksCisJCXN0cnVjdCB0dHlfZHJpdmVyICpkcml2ZXIsIGludCBpZHgpOworZXh0ZXJuIHN0cnVjdCB0dHlfc3RydWN0ICp0dHlfaW5pdF9kZXYoc3RydWN0IHR0eV9kcml2ZXIgKmRyaXZlciwgaW50IGlkeCwKKwkJCQkJCQkJaW50IGZpcnN0X29rKTsKK2V4dGVybiB2b2lkIHR0eV9yZWxlYXNlX2RldihzdHJ1Y3QgZmlsZSAqZmlscCk7CitleHRlcm4gaW50IHR0eV9pbml0X3Rlcm1pb3Moc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSk7CiAKIGV4dGVybiBzdHJ1Y3QgbXV0ZXggdHR5X211dGV4OwogCkBAIC0zODIsNiArNDE5LDggQEAKIGV4dGVybiB2b2lkIHR0eV9wb3J0X2luaXQoc3RydWN0IHR0eV9wb3J0ICpwb3J0KTsKIGV4dGVybiBpbnQgdHR5X3BvcnRfYWxsb2NfeG1pdF9idWYoc3RydWN0IHR0eV9wb3J0ICpwb3J0KTsKIGV4dGVybiB2b2lkIHR0eV9wb3J0X2ZyZWVfeG1pdF9idWYoc3RydWN0IHR0eV9wb3J0ICpwb3J0KTsKK2V4dGVybiBzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5X3BvcnRfdHR5X2dldChzdHJ1Y3QgdHR5X3BvcnQgKnBvcnQpOworZXh0ZXJuIHZvaWQgdHR5X3BvcnRfdHR5X3NldChzdHJ1Y3QgdHR5X3BvcnQgKnBvcnQsIHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpOwogCiBleHRlcm4gaW50IHR0eV9yZWdpc3Rlcl9sZGlzYyhpbnQgZGlzYywgc3RydWN0IHR0eV9sZGlzY19vcHMgKm5ld19sZGlzYyk7CiBleHRlcm4gaW50IHR0eV91bnJlZ2lzdGVyX2xkaXNjKGludCBkaXNjKTsKQEAgLTQyNyw3ICs0NjYsNyBAQAogI2VuZGlmCiAKIC8qIHR0eV9pb2N0bC5jICovCi1leHRlcm4gaW50IG5fdHR5X2lvY3RsKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICpmaWxlLAorZXh0ZXJuIGludCBuX3R0eV9pb2N0bF9oZWxwZXIoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKmZpbGUsCiAJCSAgICAgICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZyk7CiAKIC8qIHNlcmlhbC5jICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3R0eV9kcml2ZXIuaCBiL2luY2x1ZGUvbGludXgvdHR5X2RyaXZlci5oCmluZGV4IDE2ZDI3OTQuLjc4NDE2YjkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdHR5X2RyaXZlci5oCisrKyBiL2luY2x1ZGUvbGludXgvdHR5X2RyaXZlci5oCkBAIC03LDYgKzcsMjggQEAKICAqIGRlZmluZWQ7IHVubGVzcyBub3RlZCBvdGhlcndpc2UsIHRoZXkgYXJlIG9wdGlvbmFsLCBhbmQgY2FuIGJlCiAgKiBmaWxsZWQgaW4gd2l0aCBhIG51bGwgcG9pbnRlci4KICAqCisgKiBzdHJ1Y3QgdHR5X3N0cnVjdCAqICgqbG9va3VwKShzdHJ1Y3QgdHR5X2RyaXZlciAqc2VsZiwgaW50IGlkeCkKKyAqCisgKglSZXR1cm4gdGhlIHR0eSBkZXZpY2UgY29ycmVzcG9uZGluZyB0byBpZHgsIE5VTEwgaWYgdGhlcmUgaXMgbm90CisgKglvbmUgY3VycmVudGx5IGluIHVzZSBhbmQgYW4gRVJSX1BUUiB2YWx1ZSBvbiBlcnJvci4gQ2FsbGVkIHVuZGVyCisgKgl0dHlfbXV0ZXggKGZvciBub3chKQorICoKKyAqCU9wdGlvbmFsIG1ldGhvZC4gRGVmYXVsdCBiZWhhdmlvdXIgaXMgdG8gdXNlIHRoZSB0dHlzIGFycmF5CisgKgorICogaW50ICgqaW5zdGFsbCkoc3RydWN0IHR0eV9kcml2ZXIgKnNlbGYsIHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCisgKgorICoJSW5zdGFsbCBhIG5ldyB0dHkgaW50byB0aGUgdHR5IGRyaXZlciBpbnRlcm5hbCB0YWJsZXMuIFVzZWQgaW4KKyAqCWNvbmp1bmN0aW9uIHdpdGggbG9va3VwIGFuZCByZW1vdmUgbWV0aG9kcy4KKyAqCisgKglPcHRpb25hbCBtZXRob2QuIERlZmF1bHQgYmVoYXZpb3VyIGlzIHRvIHVzZSB0aGUgdHR5cyBhcnJheQorICoKKyAqIHZvaWQgKCpyZW1vdmUpKHN0cnVjdCB0dHlfZHJpdmVyICpzZWxmLCBzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQorICoKKyAqCVJlbW92ZSBhIGNsb3NlZCB0dHkgZnJvbSB0aGUgdHR5IGRyaXZlciBpbnRlcm5hbCB0YWJsZXMuIFVzZWQgaW4KKyAqCWNvbmp1bmN0aW9uIHdpdGggbG9va3VwIGFuZCByZW1vdmUgbWV0aG9kcy4KKyAqCisgKglPcHRpb25hbCBtZXRob2QuIERlZmF1bHQgYmVoYXZpb3VyIGlzIHRvIHVzZSB0aGUgdHR5cyBhcnJheQorICoKICAqIGludCAgKCpvcGVuKShzdHJ1Y3QgdHR5X3N0cnVjdCAqIHR0eSwgc3RydWN0IGZpbGUgKiBmaWxwKTsKICAqCiAgKiAJVGhpcyByb3V0aW5lIGlzIGNhbGxlZCB3aGVuIGEgcGFydGljdWxhciB0dHkgZGV2aWNlIGlzIG9wZW5lZC4KQEAgLTIxLDYgKzQzLDExIEBACiAgKgogICoJUmVxdWlyZWQgbWV0aG9kLgogICoKKyAqIHZvaWQgKCpzaHV0ZG93bikoc3RydWN0IHR0eV9zdHJ1Y3QgKiB0dHkpOworICoKKyAqIAlUaGlzIHJvdXRpbmUgaXMgY2FsbGVkIHdoZW4gYSBwYXJ0aWN1bGFyIHR0eSBkZXZpY2UgaXMgY2xvc2VkIGZvcgorICoJdGhlIGxhc3QgdGltZSBmcmVlaW5nIHVwIHRoZSByZXNvdXJjZXMuCisgKgogICogaW50ICgqd3JpdGUpKHN0cnVjdCB0dHlfc3RydWN0ICogdHR5LAogICogCQkgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLCBpbnQgY291bnQpOwogICoKQEAgLTE4MCw2ICsyMDcsMTQgQEAKICAqCW5vdCBmb3JjZSBlcnJvcnMgaGVyZSBpZiB0aGV5IGFyZSBub3QgcmVzaXphYmxlIG9iamVjdHMgKGVnIGEgc2VyaWFsCiAgKglsaW5lKS4gU2VlIHR0eV9kb19yZXNpemUoKSBpZiB5b3UgbmVlZCB0byB3cmFwIHRoZSBzdGFuZGFyZCBtZXRob2QKICAqCWluIHlvdXIgb3duIGxvZ2ljIC0gdGhlIHVzdWFsIGNhc2UuCisgKgorICogdm9pZCAoKnNldF90ZXJtaW94KShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgdGVybWlveCAqbmV3KTsKKyAqCisgKglDYWxsZWQgd2hlbiB0aGUgZGV2aWNlIHJlY2VpdmVzIGEgdGVybWlveCBiYXNlZCBpb2N0bC4gUGFzc2VzIGRvd24KKyAqCXRoZSByZXF1ZXN0ZWQgZGF0YSBmcm9tIHVzZXIgc3BhY2UuIFRoaXMgbWV0aG9kIHdpbGwgbm90IGJlIGludm9rZWQKKyAqCXVubGVzcyB0aGUgdHR5IGFsc28gaGFzIGEgdmFsaWQgdHR5LT50ZXJtaW94IHBvaW50ZXIuCisgKgorICoJT3B0aW9uYWw6IENhbGxlZCB1bmRlciB0aGUgdGVybWlvcyBsb2NrCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CkBAIC0xOTAsOCArMjI1LDEzIEBACiBzdHJ1Y3QgdHR5X2RyaXZlcjsKIAogc3RydWN0IHR0eV9vcGVyYXRpb25zIHsKKwlzdHJ1Y3QgdHR5X3N0cnVjdCAqICgqbG9va3VwKShzdHJ1Y3QgdHR5X2RyaXZlciAqZHJpdmVyLAorCQkJc3RydWN0IGlub2RlICppbm9kZSwgaW50IGlkeCk7CisJaW50ICAoKmluc3RhbGwpKHN0cnVjdCB0dHlfZHJpdmVyICpkcml2ZXIsIHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpOworCXZvaWQgKCpyZW1vdmUpKHN0cnVjdCB0dHlfZHJpdmVyICpkcml2ZXIsIHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpOwogCWludCAgKCpvcGVuKShzdHJ1Y3QgdHR5X3N0cnVjdCAqIHR0eSwgc3RydWN0IGZpbGUgKiBmaWxwKTsKIAl2b2lkICgqY2xvc2UpKHN0cnVjdCB0dHlfc3RydWN0ICogdHR5LCBzdHJ1Y3QgZmlsZSAqIGZpbHApOworCXZvaWQgKCpzaHV0ZG93bikoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSk7CiAJaW50ICAoKndyaXRlKShzdHJ1Y3QgdHR5X3N0cnVjdCAqIHR0eSwKIAkJICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLCBpbnQgY291bnQpOwogCWludCAgKCpwdXRfY2hhcikoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgdW5zaWduZWQgY2hhciBjaCk7CkBAIC0yMjAsNiArMjYwLDcgQEAKIAkJCXVuc2lnbmVkIGludCBzZXQsIHVuc2lnbmVkIGludCBjbGVhcik7CiAJaW50ICgqcmVzaXplKShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgdHR5X3N0cnVjdCAqcmVhbF90dHksCiAJCQkJc3RydWN0IHdpbnNpemUgKndzKTsKKwlpbnQgKCpzZXRfdGVybWlveCkoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IHRlcm1pb3ggKnRuZXcpOwogI2lmZGVmIENPTkZJR19DT05TT0xFX1BPTEwKIAlpbnQgKCpwb2xsX2luaXQpKHN0cnVjdCB0dHlfZHJpdmVyICpkcml2ZXIsIGludCBsaW5lLCBjaGFyICpvcHRpb25zKTsKIAlpbnQgKCpwb2xsX2dldF9jaGFyKShzdHJ1Y3QgdHR5X2RyaXZlciAqZHJpdmVyLCBpbnQgbGluZSk7CkBAIC0yMjksNiArMjcwLDcgQEAKIAogc3RydWN0IHR0eV9kcml2ZXIgewogCWludAltYWdpYzsJCS8qIG1hZ2ljIG51bWJlciBmb3IgdGhpcyBzdHJ1Y3R1cmUgKi8KKwlzdHJ1Y3Qga3JlZiBrcmVmOwkvKiBSZWZlcmVuY2UgbWFuYWdlbWVudCAqLwogCXN0cnVjdCBjZGV2IGNkZXY7CiAJc3RydWN0IG1vZHVsZQkqb3duZXI7CiAJY29uc3QgY2hhcgkqZHJpdmVyX25hbWU7CkBAIC0yNDIsNyArMjg0LDYgQEAKIAlzaG9ydAlzdWJ0eXBlOwkvKiBzdWJ0eXBlIG9mIHR0eSBkcml2ZXIgKi8KIAlzdHJ1Y3Qga3Rlcm1pb3MgaW5pdF90ZXJtaW9zOyAvKiBJbml0aWFsIHRlcm1pb3MgKi8KIAlpbnQJZmxhZ3M7CQkvKiB0dHkgZHJpdmVyIGZsYWdzICovCi0JaW50CXJlZmNvdW50OwkvKiBmb3IgbG9hZGFibGUgdHR5IGRyaXZlcnMgKi8KIAlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnByb2NfZW50cnk7IC8qIC9wcm9jIGZzIGVudHJ5ICovCiAJc3RydWN0IHR0eV9kcml2ZXIgKm90aGVyOyAvKiBvbmx5IHVzZWQgZm9yIHRoZSBQVFkgZHJpdmVyICovCiAKQEAgLTI2NCwxMiArMzA1LDE5IEBACiAKIGV4dGVybiBzdHJ1Y3QgbGlzdF9oZWFkIHR0eV9kcml2ZXJzOwogCi1zdHJ1Y3QgdHR5X2RyaXZlciAqYWxsb2NfdHR5X2RyaXZlcihpbnQgbGluZXMpOwotdm9pZCBwdXRfdHR5X2RyaXZlcihzdHJ1Y3QgdHR5X2RyaXZlciAqZHJpdmVyKTsKLXZvaWQgdHR5X3NldF9vcGVyYXRpb25zKHN0cnVjdCB0dHlfZHJpdmVyICpkcml2ZXIsCitleHRlcm4gc3RydWN0IHR0eV9kcml2ZXIgKmFsbG9jX3R0eV9kcml2ZXIoaW50IGxpbmVzKTsKK2V4dGVybiB2b2lkIHB1dF90dHlfZHJpdmVyKHN0cnVjdCB0dHlfZHJpdmVyICpkcml2ZXIpOworZXh0ZXJuIHZvaWQgdHR5X3NldF9vcGVyYXRpb25zKHN0cnVjdCB0dHlfZHJpdmVyICpkcml2ZXIsCiAJCQljb25zdCBzdHJ1Y3QgdHR5X29wZXJhdGlvbnMgKm9wKTsKIGV4dGVybiBzdHJ1Y3QgdHR5X2RyaXZlciAqdHR5X2ZpbmRfcG9sbGluZ19kcml2ZXIoY2hhciAqbmFtZSwgaW50ICpsaW5lKTsKIAorZXh0ZXJuIHZvaWQgdHR5X2RyaXZlcl9rcmVmX3B1dChzdHJ1Y3QgdHR5X2RyaXZlciAqZHJpdmVyKTsKK2V4dGVybiBpbmxpbmUgc3RydWN0IHR0eV9kcml2ZXIgKnR0eV9kcml2ZXJfa3JlZl9nZXQoc3RydWN0IHR0eV9kcml2ZXIgKmQpCit7CisJa3JlZl9nZXQoJmQtPmtyZWYpOworCXJldHVybiBkOworfQorCiAvKiB0dHkgZHJpdmVyIG1hZ2ljIG51bWJlciAqLwogI2RlZmluZSBUVFlfRFJJVkVSX01BR0lDCQkweDU0MDIKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC90eXBlcy5oIGIvaW5jbHVkZS9saW51eC90eXBlcy5oCmluZGV4IGQ0YTljZTYuLmYyNGY3YmUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdHlwZXMuaAorKysgYi9pbmNsdWRlL2xpbnV4L3R5cGVzLmgKQEAgLTE5MSwxMiArMTkxLDE0IEBACiAjaWZkZWYgX19LRVJORUxfXwogdHlwZWRlZiB1bnNpZ25lZCBfX2JpdHdpc2VfXyBnZnBfdDsKIAotI2lmZGVmIENPTkZJR19SRVNPVVJDRVNfNjRCSVQKLXR5cGVkZWYgdTY0IHJlc291cmNlX3NpemVfdDsKKyNpZmRlZiBDT05GSUdfUEhZU19BRERSX1RfNjRCSVQKK3R5cGVkZWYgdTY0IHBoeXNfYWRkcl90OwogI2Vsc2UKLXR5cGVkZWYgdTMyIHJlc291cmNlX3NpemVfdDsKK3R5cGVkZWYgdTMyIHBoeXNfYWRkcl90OwogI2VuZGlmCiAKK3R5cGVkZWYgcGh5c19hZGRyX3QgcmVzb3VyY2Vfc2l6ZV90OworCiBzdHJ1Y3QgdXN0YXQgewogCV9fa2VybmVsX2RhZGRyX3QJZl90ZnJlZTsKIAlfX2tlcm5lbF9pbm9fdAkJZl90aW5vZGU7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3VzYi5oIGIvaW5jbHVkZS9saW51eC91c2IuaAppbmRleCA5NGFjNzRhLi44ZmE5NzNiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3VzYi5oCisrKyBiL2luY2x1ZGUvbGludXgvdXNiLmgKQEAgLTExMzUsNiArMTEzNSw3IEBACiAJc3RydWN0IGxpc3RfaGVhZCB1cmJfbGlzdDsKIAl3YWl0X3F1ZXVlX2hlYWRfdCB3YWl0OwogCXNwaW5sb2NrX3QgbG9jazsKKwl1bnNpZ25lZCBpbnQgcG9pc29uZWQ6MTsKIH07CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBpbml0X3VzYl9hbmNob3Ioc3RydWN0IHVzYl9hbmNob3IgKmFuY2hvcikKQEAgLTE0NTksMTIgKzE0NjAsMTggQEAKIGV4dGVybiBpbnQgdXNiX3N1Ym1pdF91cmIoc3RydWN0IHVyYiAqdXJiLCBnZnBfdCBtZW1fZmxhZ3MpOwogZXh0ZXJuIGludCB1c2JfdW5saW5rX3VyYihzdHJ1Y3QgdXJiICp1cmIpOwogZXh0ZXJuIHZvaWQgdXNiX2tpbGxfdXJiKHN0cnVjdCB1cmIgKnVyYik7CitleHRlcm4gdm9pZCB1c2JfcG9pc29uX3VyYihzdHJ1Y3QgdXJiICp1cmIpOworZXh0ZXJuIHZvaWQgdXNiX3VucG9pc29uX3VyYihzdHJ1Y3QgdXJiICp1cmIpOwogZXh0ZXJuIHZvaWQgdXNiX2tpbGxfYW5jaG9yZWRfdXJicyhzdHJ1Y3QgdXNiX2FuY2hvciAqYW5jaG9yKTsKK2V4dGVybiB2b2lkIHVzYl9wb2lzb25fYW5jaG9yZWRfdXJicyhzdHJ1Y3QgdXNiX2FuY2hvciAqYW5jaG9yKTsKIGV4dGVybiB2b2lkIHVzYl91bmxpbmtfYW5jaG9yZWRfdXJicyhzdHJ1Y3QgdXNiX2FuY2hvciAqYW5jaG9yKTsKIGV4dGVybiB2b2lkIHVzYl9hbmNob3JfdXJiKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHVzYl9hbmNob3IgKmFuY2hvcik7CiBleHRlcm4gdm9pZCB1c2JfdW5hbmNob3JfdXJiKHN0cnVjdCB1cmIgKnVyYik7CiBleHRlcm4gaW50IHVzYl93YWl0X2FuY2hvcl9lbXB0eV90aW1lb3V0KHN0cnVjdCB1c2JfYW5jaG9yICphbmNob3IsCiAJCQkJCSB1bnNpZ25lZCBpbnQgdGltZW91dCk7CitleHRlcm4gc3RydWN0IHVyYiAqdXNiX2dldF9mcm9tX2FuY2hvcihzdHJ1Y3QgdXNiX2FuY2hvciAqYW5jaG9yKTsKK2V4dGVybiB2b2lkIHVzYl9zY3V0dGxlX2FuY2hvcmVkX3VyYnMoc3RydWN0IHVzYl9hbmNob3IgKmFuY2hvcik7CitleHRlcm4gaW50IHVzYl9hbmNob3JfZW1wdHkoc3RydWN0IHVzYl9hbmNob3IgKmFuY2hvcik7CiAKIC8qKgogICogdXNiX3VyYl9kaXJfaW4gLSBjaGVjayBpZiBhbiBVUkIgZGVzY3JpYmVzIGFuIElOIHRyYW5zZmVyCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3VzYi9LYnVpbGQgYi9pbmNsdWRlL2xpbnV4L3VzYi9LYnVpbGQKaW5kZXggNDJlODRmYy4uNTRjNDQ2MyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC91c2IvS2J1aWxkCisrKyBiL2luY2x1ZGUvbGludXgvdXNiL0tidWlsZApAQCAtNCw0ICs0LDUgQEAKIGhlYWRlci15ICs9IGdhZGdldGZzLmgKIGhlYWRlci15ICs9IG1pZGkuaAogaGVhZGVyLXkgKz0gZ19wcmludGVyLmgKLQoraGVhZGVyLXkgKz0gdG1jLmgKK2hlYWRlci15ICs9IHZzdHVzYi5oCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3VzYi9jZGMuaCBiL2luY2x1ZGUvbGludXgvdXNiL2NkYy5oCmluZGV4IGNhMjI4YmIuLjE4YTcyOTMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdXNiL2NkYy5oCisrKyBiL2luY2x1ZGUvbGludXgvdXNiL2NkYy5oCkBAIC0xNjAsNiArMTYwLDE1IEBACiAJX191OAliRGV0YWlsRGF0YVswXTsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCisvKiAiT0JFWCBDb250cm9sIE1vZGVsIEZ1bmN0aW9uYWwgRGVzY3JpcHRvciIgKi8KK3N0cnVjdCB1c2JfY2RjX29iZXhfZGVzYyB7CisJX191OAliTGVuZ3RoOworCV9fdTgJYkRlc2NyaXB0b3JUeXBlOworCV9fdTgJYkRlc2NyaXB0b3JTdWJUeXBlOworCisJX19sZTE2CWJjZFZlcnNpb247Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKwogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAogLyoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdXNiL2NvbXBvc2l0ZS5oIGIvaW5jbHVkZS9saW51eC91c2IvY29tcG9zaXRlLmgKaW5kZXggYzkzMjM5MC4uOTM1YzM4MCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC91c2IvY29tcG9zaXRlLmgKKysrIGIvaW5jbHVkZS9saW51eC91c2IvY29tcG9zaXRlLmgKQEAgLTEzMCw2ICsxMzAsOSBAQAogCiBpbnQgdXNiX2FkZF9mdW5jdGlvbihzdHJ1Y3QgdXNiX2NvbmZpZ3VyYXRpb24gKiwgc3RydWN0IHVzYl9mdW5jdGlvbiAqKTsKIAoraW50IHVzYl9mdW5jdGlvbl9kZWFjdGl2YXRlKHN0cnVjdCB1c2JfZnVuY3Rpb24gKik7CitpbnQgdXNiX2Z1bmN0aW9uX2FjdGl2YXRlKHN0cnVjdCB1c2JfZnVuY3Rpb24gKik7CisKIGludCB1c2JfaW50ZXJmYWNlX2lkKHN0cnVjdCB1c2JfY29uZmlndXJhdGlvbiAqLCBzdHJ1Y3QgdXNiX2Z1bmN0aW9uICopOwogCiAvKioKQEAgLTMxNiw5ICszMTksMTMgQEAKIAlzdHJ1Y3QgdXNiX2NvbXBvc2l0ZV9kcml2ZXIJKmRyaXZlcjsKIAl1OAkJCQluZXh0X3N0cmluZ19pZDsKIAotCXNwaW5sb2NrX3QJCQlsb2NrOworCS8qIHRoZSBnYWRnZXQgZHJpdmVyIHdvbid0IGVuYWJsZSB0aGUgZGF0YSBwdWxsdXAKKwkgKiB3aGlsZSB0aGUgZGVhY3RpdmF0aW9uIGNvdW50IGlzIG5vbnplcm8uCisJICovCisJdW5zaWduZWQJCQlkZWFjdGl2YXRpb25zOwogCi0JLyogUkVWSVNJVCB1c2UgYW5kIGV4aXN0ZW5jZSBvZiBsb2NrIC4uLiAqLworCS8qIHByb3RlY3RzIGF0IGxlYXN0IGRlYWN0aXZhdGlvbiBjb3VudCAqLworCXNwaW5sb2NrX3QJCQlsb2NrOwogfTsKIAogZXh0ZXJuIGludCB1c2Jfc3RyaW5nX2lkKHN0cnVjdCB1c2JfY29tcG9zaXRlX2RldiAqYyk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3VzYi9zZXJpYWwuaCBiL2luY2x1ZGUvbGludXgvdXNiL3NlcmlhbC5oCmluZGV4IDY1NTM0MWQuLjBiODYxN2EgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdXNiL3NlcmlhbC5oCisrKyBiL2luY2x1ZGUvbGludXgvdXNiL3NlcmlhbC5oCkBAIC0xOTIsNyArMTkyLDcgQEAKICAqIFRoZSBkcml2ZXIub3duZXIgZmllbGQgc2hvdWxkIGJlIHNldCB0byB0aGUgbW9kdWxlIG93bmVyIG9mIHRoaXMgZHJpdmVyLgogICogVGhlIGRyaXZlci5uYW1lIGZpZWxkIHNob3VsZCBiZSBzZXQgdG8gdGhlIG5hbWUgb2YgdGhpcyBkcml2ZXIgKHJlbWVtYmVyCiAgKiBpdCB3aWxsIHNob3cgdXAgaW4gc3lzZnMsIHNvIGl0IG5lZWRzIHRvIGJlIHNob3J0IGFuZCB0byB0aGUgcG9pbnQuCi0gKiBVc2VpbmcgdGhlIG1vZHVsZSBuYW1lIGlzIGEgZ29vZCBpZGVhLikKKyAqIFVzaW5nIHRoZSBtb2R1bGUgbmFtZSBpcyBhIGdvb2QgaWRlYS4pCiAgKi8KIHN0cnVjdCB1c2Jfc2VyaWFsX2RyaXZlciB7CiAJY29uc3QgY2hhciAqZGVzY3JpcHRpb247CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3VzYi90bWMuaCBiL2luY2x1ZGUvbGludXgvdXNiL3RtYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMwNDVhZTEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L3VzYi90bWMuaApAQCAtMCwwICsxLDQzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA3IFN0ZWZhbiBLb3BwLCBHZWNoaW5nZW4sIEdlcm1hbnkKKyAqIENvcHlyaWdodCAoQykgMjAwOCBOb3ZlbGwsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBHcmVnIEtyb2FoLUhhcnRtYW4gPGdyZWdraEBzdXNlLmRlPgorICoKKyAqIFRoaXMgZmlsZSBob2xkcyBVU0IgY29uc3RhbnRzIGRlZmluZWQgYnkgdGhlIFVTQiBEZXZpY2UgQ2xhc3MKKyAqIERlZmluaXRpb24gZm9yIFRlc3QgYW5kIE1lYXN1cmVtZW50IGRldmljZXMgcHVibGlzaGVkIGJ5IHRoZSBVU0ItSUYuCisgKgorICogSXQgYWxzbyBoYXMgdGhlIGlvY3RsIGRlZmluaXRpb25zIGZvciB0aGUgdXNidG1jIGtlcm5lbCBkcml2ZXIgdGhhdAorICogdXNlcnNwYWNlIG5lZWRzIHRvIGtub3cgYWJvdXQuCisgKi8KKworI2lmbmRlZiBfX0xJTlVYX1VTQl9UTUNfSAorI2RlZmluZSBfX0xJTlVYX1VTQl9UTUNfSAorCisvKiBVU0IgVE1DIHN0YXR1cyB2YWx1ZXMgKi8KKyNkZWZpbmUgVVNCVE1DX1NUQVRVU19TVUNDRVNTCQkJCTB4MDEKKyNkZWZpbmUgVVNCVE1DX1NUQVRVU19QRU5ESU5HCQkJCTB4MDIKKyNkZWZpbmUgVVNCVE1DX1NUQVRVU19GQUlMRUQJCQkJMHg4MAorI2RlZmluZSBVU0JUTUNfU1RBVFVTX1RSQU5TRkVSX05PVF9JTl9QUk9HUkVTUwkJMHg4MQorI2RlZmluZSBVU0JUTUNfU1RBVFVTX1NQTElUX05PVF9JTl9QUk9HUkVTUwkJMHg4MgorI2RlZmluZSBVU0JUTUNfU1RBVFVTX1NQTElUX0lOX1BST0dSRVNTCQkJMHg4MworCisvKiBVU0IgVE1DIHJlcXVlc3RzIHZhbHVlcyAqLworI2RlZmluZSBVU0JUTUNfUkVRVUVTVF9JTklUSUFURV9BQk9SVF9CVUxLX09VVAkJMQorI2RlZmluZSBVU0JUTUNfUkVRVUVTVF9DSEVDS19BQk9SVF9CVUxLX09VVF9TVEFUVVMJMgorI2RlZmluZSBVU0JUTUNfUkVRVUVTVF9JTklUSUFURV9BQk9SVF9CVUxLX0lOCQkzCisjZGVmaW5lIFVTQlRNQ19SRVFVRVNUX0NIRUNLX0FCT1JUX0JVTEtfSU5fU1RBVFVTCTQKKyNkZWZpbmUgVVNCVE1DX1JFUVVFU1RfSU5JVElBVEVfQ0xFQVIJCQk1CisjZGVmaW5lIFVTQlRNQ19SRVFVRVNUX0NIRUNLX0NMRUFSX1NUQVRVUwkJNgorI2RlZmluZSBVU0JUTUNfUkVRVUVTVF9HRVRfQ0FQQUJJTElUSUVTCQkJNworI2RlZmluZSBVU0JUTUNfUkVRVUVTVF9JTkRJQ0FUT1JfUFVMU0UJCQk2NAorCisvKiBSZXF1ZXN0IHZhbHVlcyBmb3IgVVNCVE1DIGRyaXZlcidzIGlvY3RsIGVudHJ5IHBvaW50ICovCisjZGVmaW5lIFVTQlRNQ19JT0NfTlIJCQk5MQorI2RlZmluZSBVU0JUTUNfSU9DVExfSU5ESUNBVE9SX1BVTFNFCV9JTyhVU0JUTUNfSU9DX05SLCAxKQorI2RlZmluZSBVU0JUTUNfSU9DVExfQ0xFQVIJCV9JTyhVU0JUTUNfSU9DX05SLCAyKQorI2RlZmluZSBVU0JUTUNfSU9DVExfQUJPUlRfQlVMS19PVVQJX0lPKFVTQlRNQ19JT0NfTlIsIDMpCisjZGVmaW5lIFVTQlRNQ19JT0NUTF9BQk9SVF9CVUxLX0lOCV9JTyhVU0JUTUNfSU9DX05SLCA0KQorI2RlZmluZSBVU0JUTUNfSU9DVExfQ0xFQVJfT1VUX0hBTFQJX0lPKFVTQlRNQ19JT0NfTlIsIDYpCisjZGVmaW5lIFVTQlRNQ19JT0NUTF9DTEVBUl9JTl9IQUxUCV9JTyhVU0JUTUNfSU9DX05SLCA3KQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdXNiL3ZzdHVzYi5oIGIvaW5jbHVkZS9saW51eC91c2IvdnN0dXNiLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWNmYWM2NwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvdXNiL3ZzdHVzYi5oCkBAIC0wLDAgKzEsNzEgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogIEZpbGU6IGRyaXZlcnMvdXNiL21pc2MvdnN0dXNiLmgKKyAqCisgKiAgUHVycG9zZTogU3VwcG9ydCBmb3IgdGhlIGJ1bGsgVVNCIFZlcm5pZXIgU3BlY3Ryb3Bob3RvbWV0ZXJzCisgKgorICogIEF1dGhvcjogICAgIEVRd2FyZSBFbmdpbmVlcmluZywgSW5jLgorICogICAgICAgICAgICAgIE9yZWdvbiBDaXR5LCBPUiwgVVNBIDk3MDQ1CisgKgorICogIENvcHlyaWdodDogIDIwMDcsIDIwMDgKKyAqICAgICAgICAgICAgICBWZXJuaWVyIFNvZnR3YXJlICYgVGVjaG5vbG9neQorICogICAgICAgICAgICAgIEJlYXZlcnRvbiwgT1IsIFVTQSA5NzAwNQorICoKKyAqICBXZWI6ICAgICAgICB3d3cudmVybmllci5jb20KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqICBUaGUgdnN0dXNiIG1vZHVsZSBpcyBhIHN0YW5kYXJkIHVzYiAnY2xpZW50JyBkcml2ZXIgcnVubmluZyBvbiB0b3Agb2YgdGhlCisgKiAgc3RhbmRhcmQgdXNiIGhvc3QgY29udHJvbGxlciBzdGFjay4KKyAqCisgKiAgSW4gZ2VuZXJhbCwgdnN0dXNiIHN1cHBvcnRzIHN0YW5kYXJkIGJ1bGsgdXNiIHBpcGVzLiAgSXQgc3VwcG9ydHMgbXVsdGlwbGUKKyAqICBkZXZpY2VzIGFuZCBtdWx0aXBsZSBwaXBlcyBwZXIgZGV2aWNlLgorICoKKyAqICBUaGUgdnN0dXNiIGRyaXZlciBzdXBwb3J0cyB0d28gaW50ZXJmYWNlczoKKyAqICAxIC0gaW9jdGwgU0VORF9QSVBFL1JFQ1ZfUElQRSAtIGEgZ2VuZXJhbCBidWxrIHdyaXRlL3JlYWQgbXNnCisgKiAgCWludGVyZmFjZSB0byBhbnkgcGlwZSB3aXRoIHRpbWVvdXQgc3VwcG9ydDsKKyAqICAyIC0gc3RhbmRhcmQgcmVhZC93cml0ZSB3aXRoIGlvY3RsIGNvbmZpZyAtIG9mZmVycyBzdGFuZGFyZCByZWFkL3dyaXRlCisgKiAgCWludGVyZmFjZSB3aXRoIGlvY3RsIGNvbmZpZ3VyZWQgcGlwZXMgYW5kIHRpbWVvdXRzLgorICoKKyAqICBCb3RoIGludGVyZmFjZXMgY2FuIGJlIHNpZ25hbCBmcm9tIG90aGVyIHByb2Nlc3MgYW5kIHdpbGwgYWJvcnQgaXRzIGkvbworICogIG9wZXJhdGlvbi4KKyAqCisgKiAgQSB0aW1lb3V0IG9mIDAgbWVhbnMgTk8gdGltZW91dC4gIFRoZSB1c2VyIGNhbiBzdGlsbCB0ZXJtaW5hdGUgdGhlIHJlYWQgdmlhCisgKiAgc2lnbmFsLgorICoKKyAqICBJZiB1c2luZyBtdWx0aXBsZSB0aHJlYWRzIHdpdGggdGhpcyBkcml2ZXIsIHRoZSB1c2VyIHNob3VsZCBlbnN1cmUgdGhhdAorICogIGFueSByZWFkcywgd3JpdGVzLCBvciBpb2N0bHMgYXJlIGNvbXBsZXRlIGJlZm9yZSBjbG9zaW5nIHRoZSBkZXZpY2UuCisgKiAgQ2hhbmdpbmcgcmVhZC93cml0ZSB0aW1lb3V0cyBvciBwaXBlcyB0YWtlcyBlZmZlY3Qgb24gbmV4dCByZWFkL3dyaXRlLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RydWN0IHZzdHVzYl9hcmdzIHsKKwl1bmlvbiB7CisJCS8qIHRoaXMgc3RydWN0IGlzIHVzZWQgZm9yIElPQ1RMX1ZTVFVTQl9TRU5EX1BJUEUsCSoKKwkJICogSU9DVExfVlNUVVNCX1JFQ1ZfUElQRSwgYW5kIHJlYWQoKS93cml0ZSgpIGZvcHMJKi8KKwkJc3RydWN0IHsKKwkJCXZvaWQgX191c2VyCSpidWZmZXI7CisJCQlzaXplX3QgICAgICAgICAgY291bnQ7CisJCQl1bnNpZ25lZCBpbnQgICAgdGltZW91dF9tczsKKwkJCWludCAgICAgICAgICAgICBwaXBlOworCQl9OworCisJCS8qIHRoaXMgb25lIGlzIHVzZWQgZm9yIElPQ1RMX1ZTVFVTQl9DT05GSUdfUlcgIAkqLworCQlzdHJ1Y3QgeworCQkJaW50IHJkX3BpcGU7CisJCQlpbnQgcmRfdGltZW91dF9tczsKKwkJCWludCB3cl9waXBlOworCQkJaW50IHdyX3RpbWVvdXRfbXM7CisJCX07CisJfTsKK307CisKKyNkZWZpbmUgVlNUX0lPQ19NQUdJQyAnTCcKKyNkZWZpbmUgVlNUX0lPQ19GSVJTVCAweDIwCisjZGVmaW5lIElPQ1RMX1ZTVFVTQl9TRU5EX1BJUEUJX0lPKFZTVF9JT0NfTUFHSUMsIFZTVF9JT0NfRklSU1QpCisjZGVmaW5lIElPQ1RMX1ZTVFVTQl9SRUNWX1BJUEUJX0lPKFZTVF9JT0NfTUFHSUMsIFZTVF9JT0NfRklSU1QgKyAxKQorI2RlZmluZSBJT0NUTF9WU1RVU0JfQ09ORklHX1JXCV9JTyhWU1RfSU9DX01BR0lDLCBWU1RfSU9DX0ZJUlNUICsgMikKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdmlkZW9kZXYyLmggYi9pbmNsdWRlL2xpbnV4L3ZpZGVvZGV2Mi5oCmluZGV4IDMwM2Q5M2ZmLi5kNGIwMzAzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3ZpZGVvZGV2Mi5oCisrKyBiL2luY2x1ZGUvbGludXgvdmlkZW9kZXYyLmgKQEAgLTkxMCw2ICs5MTAsOCBAQAogCVY0TDJfTVBFR19BVURJT19FTkNPRElOR19MQVlFUl8xID0gMCwKIAlWNEwyX01QRUdfQVVESU9fRU5DT0RJTkdfTEFZRVJfMiA9IDEsCiAJVjRMMl9NUEVHX0FVRElPX0VOQ09ESU5HX0xBWUVSXzMgPSAyLAorCVY0TDJfTVBFR19BVURJT19FTkNPRElOR19BQUMgICAgID0gMywKKwlWNEwyX01QRUdfQVVESU9fRU5DT0RJTkdfQUMzICAgICA9IDQsCiB9OwogI2RlZmluZSBWNEwyX0NJRF9NUEVHX0FVRElPX0wxX0JJVFJBVEUgCQkoVjRMMl9DSURfTVBFR19CQVNFKzEwMikKIGVudW0gdjRsMl9tcGVnX2F1ZGlvX2wxX2JpdHJhdGUgewpAQCAtOTg4LDEyICs5OTAsMzYgQEAKIAlWNEwyX01QRUdfQVVESU9fQ1JDX0NSQzE2ID0gMSwKIH07CiAjZGVmaW5lIFY0TDJfQ0lEX01QRUdfQVVESU9fTVVURSAJCShWNEwyX0NJRF9NUEVHX0JBU0UrMTA5KQorI2RlZmluZSBWNEwyX0NJRF9NUEVHX0FVRElPX0FBQ19CSVRSQVRFCQkoVjRMMl9DSURfTVBFR19CQVNFKzExMCkKKyNkZWZpbmUgVjRMMl9DSURfTVBFR19BVURJT19BQzNfQklUUkFURQkJKFY0TDJfQ0lEX01QRUdfQkFTRSsxMTEpCitlbnVtIHY0bDJfbXBlZ19hdWRpb19hYzNfYml0cmF0ZSB7CisJVjRMMl9NUEVHX0FVRElPX0FDM19CSVRSQVRFXzMySyAgPSAwLAorCVY0TDJfTVBFR19BVURJT19BQzNfQklUUkFURV80MEsgID0gMSwKKwlWNEwyX01QRUdfQVVESU9fQUMzX0JJVFJBVEVfNDhLICA9IDIsCisJVjRMMl9NUEVHX0FVRElPX0FDM19CSVRSQVRFXzU2SyAgPSAzLAorCVY0TDJfTVBFR19BVURJT19BQzNfQklUUkFURV82NEsgID0gNCwKKwlWNEwyX01QRUdfQVVESU9fQUMzX0JJVFJBVEVfODBLICA9IDUsCisJVjRMMl9NUEVHX0FVRElPX0FDM19CSVRSQVRFXzk2SyAgPSA2LAorCVY0TDJfTVBFR19BVURJT19BQzNfQklUUkFURV8xMTJLID0gNywKKwlWNEwyX01QRUdfQVVESU9fQUMzX0JJVFJBVEVfMTI4SyA9IDgsCisJVjRMMl9NUEVHX0FVRElPX0FDM19CSVRSQVRFXzE2MEsgPSA5LAorCVY0TDJfTVBFR19BVURJT19BQzNfQklUUkFURV8xOTJLID0gMTAsCisJVjRMMl9NUEVHX0FVRElPX0FDM19CSVRSQVRFXzIyNEsgPSAxMSwKKwlWNEwyX01QRUdfQVVESU9fQUMzX0JJVFJBVEVfMjU2SyA9IDEyLAorCVY0TDJfTVBFR19BVURJT19BQzNfQklUUkFURV8zMjBLID0gMTMsCisJVjRMMl9NUEVHX0FVRElPX0FDM19CSVRSQVRFXzM4NEsgPSAxNCwKKwlWNEwyX01QRUdfQVVESU9fQUMzX0JJVFJBVEVfNDQ4SyA9IDE1LAorCVY0TDJfTVBFR19BVURJT19BQzNfQklUUkFURV81MTJLID0gMTYsCisJVjRMMl9NUEVHX0FVRElPX0FDM19CSVRSQVRFXzU3NksgPSAxNywKKwlWNEwyX01QRUdfQVVESU9fQUMzX0JJVFJBVEVfNjQwSyA9IDE4LAorfTsKIAogLyogIE1QRUcgdmlkZW8gKi8KICNkZWZpbmUgVjRMMl9DSURfTVBFR19WSURFT19FTkNPRElORyAJCShWNEwyX0NJRF9NUEVHX0JBU0UrMjAwKQogZW51bSB2NGwyX21wZWdfdmlkZW9fZW5jb2RpbmcgewotCVY0TDJfTVBFR19WSURFT19FTkNPRElOR19NUEVHXzEgPSAwLAotCVY0TDJfTVBFR19WSURFT19FTkNPRElOR19NUEVHXzIgPSAxLAorCVY0TDJfTVBFR19WSURFT19FTkNPRElOR19NUEVHXzEgICAgID0gMCwKKwlWNEwyX01QRUdfVklERU9fRU5DT0RJTkdfTVBFR18yICAgICA9IDEsCisJVjRMMl9NUEVHX1ZJREVPX0VOQ09ESU5HX01QRUdfNF9BVkMgPSAyLAogfTsKICNkZWZpbmUgVjRMMl9DSURfTVBFR19WSURFT19BU1BFQ1QgCQkoVjRMMl9DSURfTVBFR19CQVNFKzIwMSkKIGVudW0gdjRsMl9tcGVnX3ZpZGVvX2FzcGVjdCB7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3ZtYWxsb2MuaCBiL2luY2x1ZGUvbGludXgvdm1hbGxvYy5oCmluZGV4IDMyOGViNDAuLjRjMjhjNGQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdm1hbGxvYy5oCisrKyBiL2luY2x1ZGUvbGludXgvdm1hbGxvYy5oCkBAIC0yLDYgKzIsNyBAQAogI2RlZmluZSBfTElOVVhfVk1BTExPQ19ICiAKICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxhc20vcGFnZS5oPgkJLyogcGdwcm90X3QgKi8KIAogc3RydWN0IHZtX2FyZWFfc3RydWN0OwkJLyogdm1hIGRlZmluaW5nIHVzZXIgbWFwcGluZyBpbiBtbV90eXBlcy5oICovCkBAIC0yMyw3ICsyNCw2IEBACiAjZW5kaWYKIAogc3RydWN0IHZtX3N0cnVjdCB7Ci0JLyoga2VlcCBuZXh0LGFkZHIsc2l6ZSB0b2dldGhlciB0byBzcGVlZHVwIGxvb2t1cHMgKi8KIAlzdHJ1Y3Qgdm1fc3RydWN0CSpuZXh0OwogCXZvaWQJCQkqYWRkcjsKIAl1bnNpZ25lZCBsb25nCQlzaXplOwpAQCAtMzcsNiArMzcsMTkgQEAKIC8qCiAgKglIaWdobGV2ZWwgQVBJcyBmb3IgZHJpdmVyIHVzZQogICovCitleHRlcm4gdm9pZCB2bV91bm1hcF9yYW0oY29uc3Qgdm9pZCAqbWVtLCB1bnNpZ25lZCBpbnQgY291bnQpOworZXh0ZXJuIHZvaWQgKnZtX21hcF9yYW0oc3RydWN0IHBhZ2UgKipwYWdlcywgdW5zaWduZWQgaW50IGNvdW50LAorCQkJCWludCBub2RlLCBwZ3Byb3RfdCBwcm90KTsKK2V4dGVybiB2b2lkIHZtX3VubWFwX2FsaWFzZXModm9pZCk7CisKKyNpZmRlZiBDT05GSUdfTU1VCitleHRlcm4gdm9pZCBfX2luaXQgdm1hbGxvY19pbml0KHZvaWQpOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCB2bWFsbG9jX2luaXQodm9pZCkKK3sKK30KKyNlbmRpZgorCiBleHRlcm4gdm9pZCAqdm1hbGxvYyh1bnNpZ25lZCBsb25nIHNpemUpOwogZXh0ZXJuIHZvaWQgKnZtYWxsb2NfdXNlcih1bnNpZ25lZCBsb25nIHNpemUpOwogZXh0ZXJuIHZvaWQgKnZtYWxsb2Nfbm9kZSh1bnNpZ25lZCBsb25nIHNpemUsIGludCBub2RlKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdm1zdGF0LmggYi9pbmNsdWRlL2xpbnV4L3Ztc3RhdC5oCmluZGV4IDU4MzM0ZDQuLjljZDNhYjAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdm1zdGF0LmgKKysrIGIvaW5jbHVkZS9saW51eC92bXN0YXQuaApAQCAtNDEsNiArNDEsMTYgQEAKICNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFCiAJCUhUTEJfQlVERFlfUEdBTExPQywgSFRMQl9CVUREWV9QR0FMTE9DX0ZBSUwsCiAjZW5kaWYKKyNpZmRlZiBDT05GSUdfVU5FVklDVEFCTEVfTFJVCisJCVVORVZJQ1RBQkxFX1BHQ1VMTEVELAkvKiBjdWxsZWQgdG8gbm9yZWNsYWltIGxpc3QgKi8KKwkJVU5FVklDVEFCTEVfUEdTQ0FOTkVELAkvKiBzY2FubmVkIGZvciByZWNsYWltYWJpbGl0eSAqLworCQlVTkVWSUNUQUJMRV9QR1JFU0NVRUQsCS8qIHJlc2N1ZWQgZnJvbSBub3JlY2xhaW0gbGlzdCAqLworCQlVTkVWSUNUQUJMRV9QR01MT0NLRUQsCisJCVVORVZJQ1RBQkxFX1BHTVVOTE9DS0VELAorCQlVTkVWSUNUQUJMRV9QR0NMRUFSRUQsCS8qIG9uIENPVywgcGFnZSB0cnVuY2F0ZSAqLworCQlVTkVWSUNUQUJMRV9QR1NUUkFOREVELAkvKiB1bmFibGUgdG8gaXNvbGF0ZSBvbiB1bmxvY2sgKi8KKwkJVU5FVklDVEFCTEVfTUxPQ0tGUkVFRCwKKyNlbmRpZgogCQlOUl9WTV9FVkVOVF9JVEVNUwogfTsKIApAQCAtMTU5LDYgKzE2OSwxNiBAQAogCXJldHVybiB4OwogfQogCitleHRlcm4gdW5zaWduZWQgbG9uZyBnbG9iYWxfbHJ1X3BhZ2VzKHZvaWQpOworCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgem9uZV9scnVfcGFnZXMoc3RydWN0IHpvbmUgKnpvbmUpCit7CisJcmV0dXJuICh6b25lX3BhZ2Vfc3RhdGUoem9uZSwgTlJfQUNUSVZFX0FOT04pCisJCSsgem9uZV9wYWdlX3N0YXRlKHpvbmUsIE5SX0FDVElWRV9GSUxFKQorCQkrIHpvbmVfcGFnZV9zdGF0ZSh6b25lLCBOUl9JTkFDVElWRV9BTk9OKQorCQkrIHpvbmVfcGFnZV9zdGF0ZSh6b25lLCBOUl9JTkFDVElWRV9GSUxFKSk7Cit9CisKICNpZmRlZiBDT05GSUdfTlVNQQogLyoKICAqIERldGVybWluZSB0aGUgcGVyIG5vZGUgdmFsdWUgb2YgYSBzdGF0IGl0ZW0uIFRoaXMgZnVuY3Rpb24KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdnRfa2Vybi5oIGIvaW5jbHVkZS9saW51eC92dF9rZXJuLmgKaW5kZXggMWNiZDBhNy4uMmYxMTEzNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC92dF9rZXJuLmgKKysrIGIvaW5jbHVkZS9saW51eC92dF9rZXJuLmgKQEAgLTk2LDcgKzk2LDcgQEAKIHZvaWQgcmVzZXRfdmMoc3RydWN0IHZjX2RhdGEgKnZjKTsKIGV4dGVybiBpbnQgdW5iaW5kX2Nvbl9kcml2ZXIoY29uc3Qgc3RydWN0IGNvbnN3ICpjc3csIGludCBmaXJzdCwgaW50IGxhc3QsCiAJCQkgICAgIGludCBkZWZsdCk7Ci1pbnQgdnR5X2luaXQodm9pZCk7CitpbnQgdnR5X2luaXQoY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyAqY29uc29sZV9mb3BzKTsKIAogLyoKICAqIHZjX3NjcmVlbi5jIHNoYXJlcyB0aGlzIHRlbXBvcmFyeSBidWZmZXIgd2l0aCB0aGUgY29uc29sZSB3cml0ZSBjb2RlIHNvIHRoYXQKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvd2FpdC5oIGIvaW5jbHVkZS9saW51eC93YWl0LmgKaW5kZXggMDA4MTE0Ny4uZWY2MDlmOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC93YWl0LmgKKysrIGIvaW5jbHVkZS9saW51eC93YWl0LmgKQEAgLTEwOCwxNSArMTA4LDYgQEAKIAlyZXR1cm4gIWxpc3RfZW1wdHkoJnEtPnRhc2tfbGlzdCk7CiB9CiAKLS8qCi0gKiBVc2VkIHRvIGRpc3Rpbmd1aXNoIGJldHdlZW4gc3luYyBhbmQgYXN5bmMgaW8gd2FpdCBjb250ZXh0OgotICogc3luYyBpL28gdHlwaWNhbGx5IHNwZWNpZmllcyBhIE5VTEwgd2FpdCBxdWV1ZSBlbnRyeSBvciBhIHdhaXQKLSAqIHF1ZXVlIGVudHJ5IGJvdW5kIHRvIGEgdGFzayAoY3VycmVudCB0YXNrKSB0byB3YWtlIHVwLgotICogYWlvIHNwZWNpZmllcyBhIHdhaXQgcXVldWUgZW50cnkgd2l0aCBhbiBhc3luYyBub3RpZmljYXRpb24KLSAqIGNhbGxiYWNrIHJvdXRpbmUsIG5vdCBhc3NvY2lhdGVkIHdpdGggYW55IHRhc2suCi0gKi8KLSNkZWZpbmUgaXNfc3luY193YWl0KHdhaXQpCSghKHdhaXQpIHx8ICgod2FpdCktPnByaXZhdGUpKQotCiBleHRlcm4gdm9pZCBhZGRfd2FpdF9xdWV1ZSh3YWl0X3F1ZXVlX2hlYWRfdCAqcSwgd2FpdF9xdWV1ZV90ICp3YWl0KTsKIGV4dGVybiB2b2lkIGFkZF93YWl0X3F1ZXVlX2V4Y2x1c2l2ZSh3YWl0X3F1ZXVlX2hlYWRfdCAqcSwgd2FpdF9xdWV1ZV90ICp3YWl0KTsKIGV4dGVybiB2b2lkIHJlbW92ZV93YWl0X3F1ZXVlKHdhaXRfcXVldWVfaGVhZF90ICpxLCB3YWl0X3F1ZXVlX3QgKndhaXQpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC93cml0ZWJhY2suaCBiL2luY2x1ZGUvbGludXgvd3JpdGViYWNrLmgKaW5kZXggMTJiMTVjNS4uZTU4NTY1NyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC93cml0ZWJhY2suaAorKysgYi9pbmNsdWRlL2xpbnV4L3dyaXRlYmFjay5oCkBAIC02Myw3ICs2MywxNSBAQAogCXVuc2lnbmVkIGZvcl93cml0ZXBhZ2VzOjE7CS8qIFRoaXMgaXMgYSB3cml0ZXBhZ2VzKCkgY2FsbCAqLwogCXVuc2lnbmVkIHJhbmdlX2N5Y2xpYzoxOwkvKiByYW5nZV9zdGFydCBpcyBjeWNsaWMgKi8KIAl1bnNpZ25lZCBtb3JlX2lvOjE7CQkvKiBtb3JlIGlvIHRvIGJlIGRpc3BhdGNoZWQgKi8KLQl1bnNpZ25lZCByYW5nZV9jb250OjE7CisJLyoKKwkgKiB3cml0ZV9jYWNoZV9wYWdlcygpIHdvbid0IHVwZGF0ZSB3YmMtPm5yX3RvX3dyaXRlIGFuZAorCSAqIG1hcHBpbmctPndyaXRlYmFja19pbmRleCBpZiBub19ucndyaXRlX2luZGV4X3VwZGF0ZQorCSAqIGlzIHNldC4gIHdyaXRlX2NhY2hlX3BhZ2VzKCkgbWF5IHdyaXRlIG1vcmUgdGhhbiB3ZQorCSAqIHJlcXVlc3RlZCBhbmQgd2Ugd2FudCB0byBtYWtlIHN1cmUgbnJfdG9fd3JpdGUgYW5kCisJICogd3JpdGViYWNrX2luZGV4IGFyZSB1cGRhdGVkIGluIGEgY29uc2lzdGVudCBtYW5uZXIKKwkgKiBzbyB3ZSB1c2UgYSBzaW5nbGUgY29udHJvbCB0byB1cGRhdGUgdGhlbQorCSAqLworCXVuc2lnbmVkIG5vX25yd3JpdGVfaW5kZXhfdXBkYXRlOjE7CiB9OwogCiAvKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9tYXRoLWVtdS9vcC0yLmggYi9pbmNsdWRlL21hdGgtZW11L29wLTIuaAppbmRleCBlMTkzZmIwLi40ZjI2ZWNjIDEwMDY0NAotLS0gYS9pbmNsdWRlL21hdGgtZW11L29wLTIuaAorKysgYi9pbmNsdWRlL21hdGgtZW11L29wLTIuaApAQCAtMjUsNyArMjUsNyBAQAogI2lmbmRlZiBfX01BVEhfRU1VX09QXzJfSF9fCiAjZGVmaW5lIF9fTUFUSF9FTVVfT1BfMl9IX18KIAotI2RlZmluZSBfRlBfRlJBQ19ERUNMXzIoWCkJX0ZQX1dfVFlQRSBYIyNfZjAsIFgjI19mMQorI2RlZmluZSBfRlBfRlJBQ19ERUNMXzIoWCkJX0ZQX1dfVFlQRSBYIyNfZjAgPSAwLCBYIyNfZjEgPSAwCiAjZGVmaW5lIF9GUF9GUkFDX0NPUFlfMihELFMpCShEIyNfZjAgPSBTIyNfZjAsIEQjI19mMSA9IFMjI19mMSkKICNkZWZpbmUgX0ZQX0ZSQUNfU0VUXzIoWCxJKQlfX0ZQX0ZSQUNfU0VUXzIoWCwgSSkKICNkZWZpbmUgX0ZQX0ZSQUNfSElHSF8yKFgpCShYIyNfZjEpCmRpZmYgLS1naXQgYS9pbmNsdWRlL21hdGgtZW11L29wLWNvbW1vbi5oIGIvaW5jbHVkZS9tYXRoLWVtdS9vcC1jb21tb24uaAppbmRleCBiYjQ2ZTc2Li5jYzFlYzM5IDEwMDY0NAotLS0gYS9pbmNsdWRlL21hdGgtZW11L29wLWNvbW1vbi5oCisrKyBiL2luY2x1ZGUvbWF0aC1lbXUvb3AtY29tbW9uLmgKQEAgLTczLDcgKzczLDcgQEAKIAlYIyNfYyA9IEZQX0NMU19OQU47CQkJCQkJXAogCS8qIENoZWNrIGZvciBzaWduYWxpbmcgTmFOICovCQkJCQlcCiAJaWYgKCEoX0ZQX0ZSQUNfSElHSF9SQVdfIyNmcyhYKSAmIF9GUF9RTkFOQklUXyMjZnMpKQkJXAotCSAgRlBfU0VUX0VYQ0VQVElPTihGUF9FWF9JTlZBTElEKTsJCQkJXAorCSAgRlBfU0VUX0VYQ0VQVElPTihGUF9FWF9JTlZBTElEIHwgRlBfRVhfSU5WQUxJRF9TTkFOKTsJCVwKICAgICAgIH0JCQkJCQkJCQlcCiAgICAgYnJlYWs7CQkJCQkJCQlcCiAgIH0JCQkJCQkJCQlcCkBAIC0zMjQsNyArMzI0LDcgQEAKIAlfRlBfRlJBQ19TRVRfIyN3YyhSLCBfRlBfTkFORlJBQ18jI2ZzKTsJCQkJICAgICBcCiAJUiMjX3MgPSBfRlBfTkFOU0lHTl8jI2ZzOwkJCQkJICAgICBcCiAJUiMjX2MgPSBGUF9DTFNfTkFOOwkJCQkJCSAgICAgXAotCUZQX1NFVF9FWENFUFRJT04oRlBfRVhfSU5WQUxJRCk7CQkJCSAgICAgXAorCUZQX1NFVF9FWENFUFRJT04oRlBfRVhfSU5WQUxJRCB8IEZQX0VYX0lOVkFMSURfSVNJKTsJCSAgICAgXAogCWJyZWFrOwkJCQkJCQkJICAgICBcCiAgICAgICB9CQkJCQkJCQkJICAgICBcCiAgICAgLyogRkFMTFRIUlUgKi8JCQkJCQkJICAgICBcCkBAIC00MzEsNyArNDMxLDcgQEAKICAgICBSIyNfcyA9IF9GUF9OQU5TSUdOXyMjZnM7CQkJCVwKICAgICBSIyNfYyA9IEZQX0NMU19OQU47CQkJCQlcCiAgICAgX0ZQX0ZSQUNfU0VUXyMjd2MoUiwgX0ZQX05BTkZSQUNfIyNmcyk7CQlcCi0gICAgRlBfU0VUX0VYQ0VQVElPTihGUF9FWF9JTlZBTElEKTsJCQlcCisgICAgRlBfU0VUX0VYQ0VQVElPTihGUF9FWF9JTlZBTElEIHwgRlBfRVhfSU5WQUxJRF9JTVopO1wKICAgICBicmVhazsJCQkJCQlcCiAJCQkJCQkJXAogICBkZWZhdWx0OgkJCQkJCVwKQEAgLTQ5MCwxMSArNDkwLDE1IEBACiAgICAgYnJlYWs7CQkJCQkJXAogCQkJCQkJCVwKICAgY2FzZSBfRlBfQ0xTX0NPTUJJTkUoRlBfQ0xTX0lORixGUF9DTFNfSU5GKToJCVwKKyAgICBSIyNfcyA9IF9GUF9OQU5TSUdOXyMjZnM7CQkJCVwKKyAgICBSIyNfYyA9IEZQX0NMU19OQU47CQkJCQlcCisgICAgX0ZQX0ZSQUNfU0VUXyMjd2MoUiwgX0ZQX05BTkZSQUNfIyNmcyk7CQlcCisgICAgRlBfU0VUX0VYQ0VQVElPTihGUF9FWF9JTlZBTElEIHwgRlBfRVhfSU5WQUxJRF9JREkpO1wKICAgY2FzZSBfRlBfQ0xTX0NPTUJJTkUoRlBfQ0xTX1pFUk8sRlBfQ0xTX1pFUk8pOglcCiAgICAgUiMjX3MgPSBfRlBfTkFOU0lHTl8jI2ZzOwkJCQlcCiAgICAgUiMjX2MgPSBGUF9DTFNfTkFOOwkJCQkJXAogICAgIF9GUF9GUkFDX1NFVF8jI3djKFIsIF9GUF9OQU5GUkFDXyMjZnMpOwkJXAotICAgIEZQX1NFVF9FWENFUFRJT04oRlBfRVhfSU5WQUxJRCk7CQkJXAorICAgIEZQX1NFVF9FWENFUFRJT04oRlBfRVhfSU5WQUxJRCB8IEZQX0VYX0lOVkFMSURfWkRaKTtcCiAgICAgYnJlYWs7CQkJCQkJXAogCQkJCQkJCVwKICAgZGVmYXVsdDoJCQkJCQlcCmRpZmYgLS1naXQgYS9pbmNsdWRlL21hdGgtZW11L3NvZnQtZnAuaCBiL2luY2x1ZGUvbWF0aC1lbXUvc29mdC1mcC5oCmluZGV4IGE2Zjg3M2IuLjNmMjg0YmMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbWF0aC1lbXUvc29mdC1mcC5oCisrKyBiL2luY2x1ZGUvbWF0aC1lbXUvc29mdC1mcC5oCkBAIC01MSw2ICs1MSwyNSBAQAogI2lmbmRlZiBGUF9FWF9JTlZBTElECiAjZGVmaW5lIEZQX0VYX0lOVkFMSUQJCTAKICNlbmRpZgorI2lmbmRlZiBGUF9FWF9JTlZBTElEX1NOQU4KKyNkZWZpbmUgRlBfRVhfSU5WQUxJRF9TTkFOCTAKKyNlbmRpZgorLyogaW5mIC0gaW5mICovCisjaWZuZGVmIEZQX0VYX0lOVkFMSURfSVNJCisjZGVmaW5lIEZQX0VYX0lOVkFMSURfSVNJCTAKKyNlbmRpZgorLyogaW5mIC8gaW5mICovCisjaWZuZGVmIEZQX0VYX0lOVkFMSURfSURJCisjZGVmaW5lIEZQX0VYX0lOVkFMSURfSURJCTAKKyNlbmRpZgorLyogMCAvIDAgKi8KKyNpZm5kZWYgRlBfRVhfSU5WQUxJRF9aRFoKKyNkZWZpbmUgRlBfRVhfSU5WQUxJRF9aRFoJMAorI2VuZGlmCisvKiBpbmYgKiAwICovCisjaWZuZGVmIEZQX0VYX0lOVkFMSURfSU1aCisjZGVmaW5lIEZQX0VYX0lOVkFMSURfSU1aCTAKKyNlbmRpZgogI2lmbmRlZiBGUF9FWF9PVkVSRkxPVwogI2RlZmluZSBGUF9FWF9PVkVSRkxPVwkJMAogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL21lZGlhL2lyLWNvbW1vbi5oIGIvaW5jbHVkZS9tZWRpYS9pci1jb21tb24uaAppbmRleCBiOGU4YWE5Li4zOGYyZDkzIDEwMDY0NAotLS0gYS9pbmNsdWRlL21lZGlhL2lyLWNvbW1vbi5oCisrKyBiL2luY2x1ZGUvbWVkaWEvaXItY29tbW9uLmgKQEAgLTI1LDYgKzI1LDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CiAjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAKICNkZWZpbmUgSVJfVFlQRV9SQzUgICAgIDEKICNkZWZpbmUgSVJfVFlQRV9QRCAgICAgIDIgLyogUHVsc2UgZGlzdGFuY2UgZW5jb2RlZCBJUiAqLwpAQCAtODUsNiArODYsMTAgQEAKIAl1MzIgY29kZTsJCQkvKiByYXcgY29kZSB1bmRlciBjb25zdHJ1Y3Rpb24gKi8KIAlzdHJ1Y3QgdGltZXZhbCBiYXNlX3RpbWU7CS8qIHRpbWUgb2YgbGFzdCBzZWVuIGNvZGUgKi8KIAlpbnQgYWN0aXZlOwkJCS8qIGJ1aWxkaW5nIHJhdyBjb2RlICovCisKKwkvKiBORUMgZGVjb2RpbmcgKi8KKwl1MzIJCQluZWNfZ3BpbzsKKwlzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgICB0bGV0OwogfTsKIAogdm9pZCBpcl9pbnB1dF9pbml0KHN0cnVjdCBpbnB1dF9kZXYgKmRldiwgc3RydWN0IGlyX2lucHV0X3N0YXRlICppciwKQEAgLTEwNSw2ICsxMTAsNyBAQAogZXh0ZXJuIElSX0tFWVRBQl9UWVBFIGlyX2NvZGVzX2VtcHR5W0lSX0tFWVRBQl9TSVpFXTsKIGV4dGVybiBJUl9LRVlUQUJfVFlQRSBpcl9jb2Rlc19hdmVybWVkaWFbSVJfS0VZVEFCX1NJWkVdOwogZXh0ZXJuIElSX0tFWVRBQl9UWVBFIGlyX2NvZGVzX2F2ZXJtZWRpYV9kdmJ0W0lSX0tFWVRBQl9TSVpFXTsKK2V4dGVybiBJUl9LRVlUQUJfVFlQRSBpcl9jb2Rlc19hdmVybWVkaWFfbTEzNWFbSVJfS0VZVEFCX1NJWkVdOwogZXh0ZXJuIElSX0tFWVRBQl9UWVBFIGlyX2NvZGVzX2FwYWNfdmlld2NvbXBbSVJfS0VZVEFCX1NJWkVdOwogZXh0ZXJuIElSX0tFWVRBQl9UWVBFIGlyX2NvZGVzX3BpeGVsdmlld1tJUl9LRVlUQUJfU0laRV07CiBleHRlcm4gSVJfS0VZVEFCX1RZUEUgaXJfY29kZXNfcGl4ZWx2aWV3X25ld1tJUl9LRVlUQUJfU0laRV07CkBAIC0xMzksNiArMTQ1LDcgQEAKIGV4dGVybiBJUl9LRVlUQUJfVFlQRSBpcl9jb2Rlc19idWRnZXRfY2lfb2xkW0lSX0tFWVRBQl9TSVpFXTsKIGV4dGVybiBJUl9LRVlUQUJfVFlQRSBpcl9jb2Rlc19hc3VzX3BjMzlbSVJfS0VZVEFCX1NJWkVdOwogZXh0ZXJuIElSX0tFWVRBQl9UWVBFIGlyX2NvZGVzX2VuY29yZV9lbmx0dltJUl9LRVlUQUJfU0laRV07CitleHRlcm4gSVJfS0VZVEFCX1RZUEUgaXJfY29kZXNfZW5jb3JlX2VubHR2MltJUl9LRVlUQUJfU0laRV07CiBleHRlcm4gSVJfS0VZVEFCX1RZUEUgaXJfY29kZXNfdHRfMTUwMFtJUl9LRVlUQUJfU0laRV07CiBleHRlcm4gSVJfS0VZVEFCX1RZUEUgaXJfY29kZXNfZnVzaW9uaGR0dl9tY2VbSVJfS0VZVEFCX1NJWkVdOwogZXh0ZXJuIElSX0tFWVRBQl9UWVBFIGlyX2NvZGVzX2JlaG9sZFtJUl9LRVlUQUJfU0laRV07CkBAIC0xNDcsNyArMTU0LDkgQEAKIGV4dGVybiBJUl9LRVlUQUJfVFlQRSBpcl9jb2Rlc19nZW5pdXNfdHZnb19hMTFtY2VbSVJfS0VZVEFCX1NJWkVdOwogZXh0ZXJuIElSX0tFWVRBQl9UWVBFIGlyX2NvZGVzX3Bvd2VyY29sb3JfcmVhbF9hbmdlbFtJUl9LRVlUQUJfU0laRV07CiBleHRlcm4gSVJfS0VZVEFCX1RZUEUgaXJfY29kZXNfYXZlcm1lZGlhX2ExNmRbSVJfS0VZVEFCX1NJWkVdOwotCitleHRlcm4gSVJfS0VZVEFCX1RZUEUgaXJfY29kZXNfZW5jb3JlX2VubHR2X2ZtNTNbSVJfS0VZVEFCX1NJWkVdOworZXh0ZXJuIElSX0tFWVRBQl9UWVBFIGlyX2NvZGVzX3JlYWxfYXVkaW9fMjIwXzMyX2tleXNbSVJfS0VZVEFCX1NJWkVdOworZXh0ZXJuIElSX0tFWVRBQl9UWVBFIGlyX2NvZGVzX21zaV90dmFueXdoZXJlX3BsdXNbSVJfS0VZVEFCX1NJWkVdOwogI2VuZGlmCiAKIC8qCmRpZmYgLS1naXQgYS9pbmNsdWRlL21lZGlhL3NhYTcxMTUuaCBiL2luY2x1ZGUvbWVkaWEvc2FhNzExNS5oCmluZGV4IGY2NzdkZmIuLmJhYjIxMjcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbWVkaWEvc2FhNzExNS5oCisrKyBiL2luY2x1ZGUvbWVkaWEvc2FhNzExNS5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAgICBzYWE3MTE1LmggLSBkZWZpbml0aW9uIGZvciBzYWE3MTEzLzQvNSBpbnB1dHMgYW5kIGZyZXF1ZW5jeSBmbGFncworICAgIHNhYTcxMTUuaCAtIGRlZmluaXRpb24gZm9yIHNhYTcxMTEvMy80LzUgaW5wdXRzIGFuZCBmcmVxdWVuY3kgZmxhZ3MKIAogICAgIENvcHlyaWdodCAoQykgMjAwNiBIYW5zIFZlcmt1aWwgKGh2ZXJrdWlsQHhzNGFsbC5ubCkKIApAQCAtMjEsMTMgKzIxLDEzIEBACiAjaWZuZGVmIF9TQUE3MTE1X0hfCiAjZGVmaW5lIF9TQUE3MTE1X0hfCiAKLS8qIFNBQTcxMTMvNC81IEhXIGlucHV0cyAqLworLyogU0FBNzExMS8zLzQvNSBIVyBpbnB1dHMgKi8KICNkZWZpbmUgU0FBNzExNV9DT01QT1NJVEUwIDAKICNkZWZpbmUgU0FBNzExNV9DT01QT1NJVEUxIDEKICNkZWZpbmUgU0FBNzExNV9DT01QT1NJVEUyIDIKICNkZWZpbmUgU0FBNzExNV9DT01QT1NJVEUzIDMKLSNkZWZpbmUgU0FBNzExNV9DT01QT1NJVEU0IDQgLyogbm90IGF2YWlsYWJsZSBmb3IgdGhlIHNhYTcxMTMgKi8KLSNkZWZpbmUgU0FBNzExNV9DT01QT1NJVEU1IDUgLyogbm90IGF2YWlsYWJsZSBmb3IgdGhlIHNhYTcxMTMgKi8KKyNkZWZpbmUgU0FBNzExNV9DT01QT1NJVEU0IDQgLyogbm90IGF2YWlsYWJsZSBmb3IgdGhlIHNhYTcxMTEvMyAqLworI2RlZmluZSBTQUE3MTE1X0NPTVBPU0lURTUgNSAvKiBub3QgYXZhaWxhYmxlIGZvciB0aGUgc2FhNzExMS8zICovCiAjZGVmaW5lIFNBQTcxMTVfU1ZJREVPMCAgICA2CiAjZGVmaW5lIFNBQTcxMTVfU1ZJREVPMSAgICA3CiAjZGVmaW5lIFNBQTcxMTVfU1ZJREVPMiAgICA4CkBAIC00Miw4ICs0MiwxNSBAQAogI2RlZmluZSBTQUE3MTE1X0ZSRVFfRkxfQ0dDRElWICgxIDw8IDEpCSAgIC8qIFNBIDNBWzZdLCBDR0NESVYsIFNBQTcxMTUgb25seSAqLwogI2RlZmluZSBTQUE3MTE1X0ZSRVFfRkxfQVBMTCAgICgxIDw8IDIpCSAgIC8qIFNBIDNBWzNdLCBBUExMLCBTQUE3MTE0LzUgb25seSAqLwogCi0jZGVmaW5lIFNBQTcxMTVfSVBPUlRfT04gICAgMQotI2RlZmluZSBTQUE3MTE1X0lQT1JUX09GRiAgIDAKKyNkZWZpbmUgU0FBNzExNV9JUE9SVF9PTiAgICAJMQorI2RlZmluZSBTQUE3MTE1X0lQT1JUX09GRiAgIAkwCisKKy8qIFNBQTcxMTEgc3BlY2lmaWMgb3V0cHV0IGZsYWdzICovCisjZGVmaW5lIFNBQTcxMTFfVkJJX0JZUEFTUyAJMgorI2RlZmluZSBTQUE3MTExX0ZNVF9ZVVY0MjIgICAgICAweDAwCisjZGVmaW5lIFNBQTcxMTFfRk1UX1JHQiAJMHg0MAorI2RlZmluZSBTQUE3MTExX0ZNVF9DQ0lSIAkweDgwCisjZGVmaW5lIFNBQTcxMTFfRk1UX1lVVjQxMSAJMHhjMAogCiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9tZWRpYS9zYWE3MTQ2LmggYi9pbmNsdWRlL21lZGlhL3NhYTcxNDYuaAppbmRleCAyZjY4ZjRjLi5jNWE2ZTIyIDEwMDY0NAotLS0gYS9pbmNsdWRlL21lZGlhL3NhYTcxNDYuaAorKysgYi9pbmNsdWRlL21lZGlhL3NhYTcxNDYuaApAQCAtMjQsMTMgKzI0LDEzIEBACiAKIGV4dGVybiB1bnNpZ25lZCBpbnQgc2FhNzE0Nl9kZWJ1ZzsKIAotLy8jZGVmaW5lIERFQlVHX1BST0xPRyBwcmludGsoIigweCUwOHgpKDB4JTA4eCkgJXM6ICVzKCk6ICIsKGRldj09MD8tMTooZGV2LT5tZW09PTA/LTE6c2FhNzE0Nl9yZWFkKGRldixSUFNfQUREUjApKSksKGRldj09MD8tMTooZGV2LT5tZW09PTA/LTE6c2FhNzE0Nl9yZWFkKGRldixJRVIpKSksS0JVSUxEX01PRE5BTUUsX19GVU5DVElPTl9fKQorLy8jZGVmaW5lIERFQlVHX1BST0xPRyBwcmludGsoIigweCUwOHgpKDB4JTA4eCkgJXM6ICVzKCk6ICIsKGRldj09MD8tMTooZGV2LT5tZW09PTA/LTE6c2FhNzE0Nl9yZWFkKGRldixSUFNfQUREUjApKSksKGRldj09MD8tMTooZGV2LT5tZW09PTA/LTE6c2FhNzE0Nl9yZWFkKGRldixJRVIpKSksS0JVSUxEX01PRE5BTUUsX19mdW5jX18pCiAKICNpZm5kZWYgREVCVUdfVkFSSUFCTEUKIAkjZGVmaW5lIERFQlVHX1ZBUklBQkxFIHNhYTcxNDZfZGVidWcKICNlbmRpZgogCi0jZGVmaW5lIERFQlVHX1BST0xPRyBwcmludGsoIiVzOiAlcygpOiAiLEtCVUlMRF9NT0ROQU1FLF9fRlVOQ1RJT05fXykKKyNkZWZpbmUgREVCVUdfUFJPTE9HIHByaW50aygiJXM6ICVzKCk6ICIsS0JVSUxEX01PRE5BTUUsIF9fZnVuY19fKQogI2RlZmluZSBJTkZPKHgpIHsgcHJpbnRrKCIlczogIixLQlVJTERfTU9ETkFNRSk7IHByaW50ayB4OyB9CiAKICNkZWZpbmUgRVJSKHgpIHsgREVCVUdfUFJPTE9HOyBwcmludGsgeDsgfQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9tZWRpYS9zaF9tb2JpbGVfY2V1LmggYi9pbmNsdWRlL21lZGlhL3NoX21vYmlsZV9jZXUuaAppbmRleCAyMzRhNDcxLi5iNWRiZWZlIDEwMDY0NAotLS0gYS9pbmNsdWRlL21lZGlhL3NoX21vYmlsZV9jZXUuaAorKysgYi9pbmNsdWRlL21lZGlhL3NoX21vYmlsZV9jZXUuaApAQCAtNSw4ICs1LDYgQEAKIAogc3RydWN0IHNoX21vYmlsZV9jZXVfaW5mbyB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsgLyogU09DQU1fLi4uICovCi0Jdm9pZCAoKmVuYWJsZV9jYW1lcmEpKHZvaWQpOwotCXZvaWQgKCpkaXNhYmxlX2NhbWVyYSkodm9pZCk7CiB9OwogCiAjZW5kaWYgLyogX19BU01fU0hfTU9CSUxFX0NFVV9IX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbWVkaWEvc29jX2NhbWVyYS5oIGIvaW5jbHVkZS9tZWRpYS9zb2NfY2FtZXJhLmgKaW5kZXggZDU0OGRlMy4uYzVkZTdiYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9tZWRpYS9zb2NfY2FtZXJhLmgKKysrIGIvaW5jbHVkZS9tZWRpYS9zb2NfY2FtZXJhLmgKQEAgLTgzLDYgKzgzLDkgQEAKIAlpbnQgYnVzX2lkOwogCS8qIEdQSU8gbnVtYmVyIHRvIHN3aXRjaCBiZXR3ZWVuIDggYW5kIDEwIGJpdCBtb2RlcyAqLwogCXVuc2lnbmVkIGludCBncGlvOworCS8qIE9wdGlvbmFsIGNhbGxiYWNrcyB0byBwb3dlciBvbiBvciBvZmYgYW5kIHJlc2V0IHRoZSBzZW5zb3IgKi8KKwlpbnQgKCpwb3dlcikoc3RydWN0IGRldmljZSAqLCBpbnQpOworCWludCAoKnJlc2V0KShzdHJ1Y3QgZGV2aWNlICopOwogfTsKIAogc3RhdGljIGlubGluZSBzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKnRvX3NvY19jYW1lcmFfZGV2KHN0cnVjdCBkZXZpY2UgKmRldikKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbWVkaWEvc29jX2NhbWVyYV9wbGF0Zm9ybS5oIGIvaW5jbHVkZS9tZWRpYS9zb2NfY2FtZXJhX3BsYXRmb3JtLmgKaW5kZXggODUxZjE4Mi4uMWQwOTJiNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9tZWRpYS9zb2NfY2FtZXJhX3BsYXRmb3JtLmgKKysrIGIvaW5jbHVkZS9tZWRpYS9zb2NfY2FtZXJhX3BsYXRmb3JtLmgKQEAgLTEsMyArMSwxMyBAQAorLyoKKyAqIEdlbmVyaWMgUGxhdGZvcm0gQ2FtZXJhIERyaXZlciBIZWFkZXIKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggTWFnbnVzIERhbW0KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKICNpZm5kZWYgX19TT0NfQ0FNRVJBX0hfXwogI2RlZmluZSBfX1NPQ19DQU1FUkFfSF9fCiAKQEAgLTksNiArMTksNyBAQAogCXVuc2lnbmVkIGxvbmcgZm9ybWF0X2RlcHRoOwogCXN0cnVjdCB2NGwyX3BpeF9mb3JtYXQgZm9ybWF0OwogCXVuc2lnbmVkIGxvbmcgYnVzX3BhcmFtOworCXZvaWQgKCpwb3dlcikoaW50KTsKIAlpbnQgKCpzZXRfY2FwdHVyZSkoc3RydWN0IHNvY19jYW1lcmFfcGxhdGZvcm1faW5mbyAqaW5mbywgaW50IGVuYWJsZSk7CiB9OwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL21lZGlhL3R1bmVyLmggYi9pbmNsdWRlL21lZGlhL3R1bmVyLmgKaW5kZXggNzcwNjhmYy4uN2Q0ZTJkYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9tZWRpYS90dW5lci5oCisrKyBiL2luY2x1ZGUvbWVkaWEvdHVuZXIuaApAQCAtMTIyLDYgKzEyMiw4IEBACiAjZGVmaW5lIFRVTkVSX1REQTk4ODcgICAgICAgICAgICAgICAgICAgNzQgICAgICAvKiBUaGlzIHR1bmVyIHNob3VsZCBiZSB1c2VkIG9ubHkgaW50ZXJuYWxseSAqLwogI2RlZmluZSBUVU5FUl9URUE1NzYxCQkJNzUJLyogT25seSBGTSBSYWRpbyBUdW5lciAqLwogI2RlZmluZSBUVU5FUl9YQzUwMDAJCQk3NgkvKiBYY2VpdmUgU2lsaWNvbiBUdW5lciAqLworI2RlZmluZSBUVU5FUl9UQ0xfTUYwMkdJUF81TgkJNzcJLyogVENMIE1GMDJHSVBfNU4gKi8KKyNkZWZpbmUgVFVORVJfUEhJTElQU19GTUQxMjE2TUVYX01LMwk3OAogCiAvKiB0diBjYXJkIHNwZWNpZmljICovCiAjZGVmaW5lIFREQTk4ODdfUFJFU0VOVCAJCSgxPDwwKQpAQCAtMTc4LDcgKzE4MCw3IEBACiAJdW5zaWduZWQgaW50CXR5cGU7ICAgLyogVHVuZXIgdHlwZSAqLwogCXVuc2lnbmVkIGludAltb2RlX21hc2s7ICAvKiBBbGxvd2VkIHR1bmVyIG1vZGVzICovCiAJdW5zaWduZWQgaW50CWNvbmZpZzsgLyogY29uZmlndXJhaW9uIGZvciBtb3JlIGNvbXBsZXggdHVuZXJzICovCi0JaW50ICgqdHVuZXJfY2FsbGJhY2spICh2b2lkICpkZXYsIGludCBjb21tYW5kLGludCBhcmcpOworCWludCAoKnR1bmVyX2NhbGxiYWNrKSAodm9pZCAqZGV2LCBpbnQgY29tcG9uZW50LCBpbnQgY21kLCBpbnQgYXJnKTsKIH07CiAKICNlbmRpZiAvKiBfX0tFUk5FTF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL21lZGlhL3Y0bDItY2hpcC1pZGVudC5oIGIvaW5jbHVkZS9tZWRpYS92NGwyLWNoaXAtaWRlbnQuaAppbmRleCA0MWI1MDliLi5kNzNhOGU5IDEwMDY0NAotLS0gYS9pbmNsdWRlL21lZGlhL3Y0bDItY2hpcC1pZGVudC5oCisrKyBiL2luY2x1ZGUvbWVkaWEvdjRsMi1jaGlwLWlkZW50LmgKQEAgLTcyLDYgKzcyLDEwIEBACiAJLyogbW9kdWxlIGNzNTM0NToganVzdCBpZGVudCA1MzQ1ICovCiAJVjRMMl9JREVOVF9DUzUzNDUgPSA1MzQ1LAogCisJLyogbW9kdWxlIHNhYTY3NTJoczogcmVzZXJ2ZWQgcmFuZ2UgNjc1MC02NzU5ICovCisJVjRMMl9JREVOVF9TQUE2NzUySFMgPSA2NzUyLAorCVY0TDJfSURFTlRfU0FBNjc1MkhTX0FDMyA9IDY3NTMsCisKIAkvKiBtb2R1bGUgd204NzM5OiBqdXN0IGlkZW50IDg3MzkgKi8KIAlWNEwyX0lERU5UX1dNODczOSA9IDg3MzksCiAKQEAgLTE2MSw2ICsxNjUsNyBAQAogCS8qIE1pY3JvbiBDTU9TIHNlbnNvciBjaGlwczogNDUwMDAtNDUwOTkgKi8KIAlWNEwyX0lERU5UX01UOU0wMDFDMTJTVAkJPSA0NTAwMCwKIAlWNEwyX0lERU5UX01UOU0wMDFDMTJTVE0JPSA0NTAwNSwKKwlWNEwyX0lERU5UX01UOU0xMTEJCT0gNDUwMDcsCiAJVjRMMl9JREVOVF9NVDlWMDIySVg3QVRDCT0gNDUwMTAsIC8qIE5vIHdheSB0byBkZXRlY3QgIm5vcm1hbCIgSTc3QVR4ICovCiAJVjRMMl9JREVOVF9NVDlWMDIySVg3QVRNCT0gNDUwMTUsIC8qIGFuZCAibGVhZCBmcmVlIiBJQTdBVHggY2hpcHMgKi8KIH07CmRpZmYgLS1naXQgYS9pbmNsdWRlL21lZGlhL3Y0bDItY29tbW9uLmggYi9pbmNsdWRlL21lZGlhL3Y0bDItY29tbW9uLmgKaW5kZXggMDdkM2E5YS4uMmY4NzE5YSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9tZWRpYS92NGwyLWNvbW1vbi5oCisrKyBiL2luY2x1ZGUvbWVkaWEvdjRsMi1jb21tb24uaApAQCAtNzYsMTEgKzc2LDE0IEBACiAKIGludCB2NGwyX2N0cmxfY2hlY2soc3RydWN0IHY0bDJfZXh0X2NvbnRyb2wgKmN0cmwsIHN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCAqcWN0cmwsCiAJCWNvbnN0IGNoYXIgKiptZW51X2l0ZW1zKTsKK2NvbnN0IGNoYXIgKnY0bDJfY3RybF9nZXRfbmFtZSh1MzIgaWQpOwogY29uc3QgY2hhciAqKnY0bDJfY3RybF9nZXRfbWVudSh1MzIgaWQpOwogaW50IHY0bDJfY3RybF9xdWVyeV9maWxsKHN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCAqcWN0cmwsIHMzMiBtaW4sIHMzMiBtYXgsIHMzMiBzdGVwLCBzMzIgZGVmKTsKIGludCB2NGwyX2N0cmxfcXVlcnlfZmlsbF9zdGQoc3RydWN0IHY0bDJfcXVlcnljdHJsICpxY3RybCk7CiBpbnQgdjRsMl9jdHJsX3F1ZXJ5X21lbnUoc3RydWN0IHY0bDJfcXVlcnltZW51ICpxbWVudSwKIAkJc3RydWN0IHY0bDJfcXVlcnljdHJsICpxY3RybCwgY29uc3QgY2hhciAqKm1lbnVfaXRlbXMpOworI2RlZmluZSBWNEwyX0NUUkxfTUVOVV9JRFNfRU5EICgweGZmZmZmZmZmKQoraW50IHY0bDJfY3RybF9xdWVyeV9tZW51X3ZhbGlkX2l0ZW1zKHN0cnVjdCB2NGwyX3F1ZXJ5bWVudSAqcW1lbnUsIGNvbnN0IHUzMiAqaWRzKTsKIHUzMiB2NGwyX2N0cmxfbmV4dChjb25zdCB1MzIgKiBjb25zdCAqY3RybF9jbGFzc2VzLCB1MzIgaWQpOwogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCkBAIC0yMjIsMTggKzIyNSwyMiBAQAogICAgQW4gZXh0cmEgZmxhZ3MgZmllbGQgYWxsb3dzIGRldmljZSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIHJlZ2FyZGluZwogICAgY2xvY2sgZnJlcXVlbmN5IGRpdmlkZXJzLCBldGMuIElmIG5vdCB1c2VkLCB0aGVuIHNldCBmbGFncyB0byAwLgogICAgSWYgdGhlIGZyZXF1ZW5jeSBpcyBub3Qgc3VwcG9ydGVkLCB0aGVuIC1FSU5WQUwgaXMgcmV0dXJuZWQuICovCi0jZGVmaW5lIFZJRElPQ19JTlRfU19DUllTVEFMX0ZSRVEgCV9JT1cgKCdkJywgMTEzLCBzdHJ1Y3QgdjRsMl9jcnlzdGFsX2ZyZXEpCisjZGVmaW5lIFZJRElPQ19JTlRfU19DUllTVEFMX0ZSRVEgCV9JT1coJ2QnLCAxMTMsIHN0cnVjdCB2NGwyX2NyeXN0YWxfZnJlcSkKIAogLyogSW5pdGlhbGl6ZSB0aGUgc2Vuc29yIHJlZ2lzdG9ycyB0byBzb21lIHNvcnQgb2YgcmVhc29uYWJsZQogICAgZGVmYXVsdCB2YWx1ZXMuICovCi0jZGVmaW5lIFZJRElPQ19JTlRfSU5JVAkJCV9JT1cgKCdkJywgMTE0LCB1MzIpCisjZGVmaW5lIFZJRElPQ19JTlRfSU5JVAkJCV9JT1coJ2QnLCAxMTQsIHUzMikKIAogLyogU2V0IHY0bDJfc3RkX2lkIGZvciB2aWRlbyBPVVRQVVQgZGV2aWNlcy4gVGhpcyBpcyBpZ25vcmVkIGJ5CiAgICB2aWRlbyBpbnB1dCBkZXZpY2VzLiAqLwotI2RlZmluZSBWSURJT0NfSU5UX1NfU1REX09VVFBVVAkJX0lPVyAgKCdkJywgMTE1LCB2NGwyX3N0ZF9pZCkKKyNkZWZpbmUgVklESU9DX0lOVF9TX1NURF9PVVRQVVQJCV9JT1coJ2QnLCAxMTUsIHY0bDJfc3RkX2lkKQogCiAvKiBHZXQgdjRsMl9zdGRfaWQgZm9yIHZpZGVvIE9VVFBVVCBkZXZpY2VzLiBUaGlzIGlzIGlnbm9yZWQgYnkKICAgIHZpZGVvIGlucHV0IGRldmljZXMuICovCi0jZGVmaW5lIFZJRElPQ19JTlRfR19TVERfT1VUUFVUCQlfSU9XICAoJ2QnLCAxMTYsIHY0bDJfc3RkX2lkKQorI2RlZmluZSBWSURJT0NfSU5UX0dfU1REX09VVFBVVAkJX0lPVygnZCcsIDExNiwgdjRsMl9zdGRfaWQpCisKKy8qIFNldCBHUElPIHBpbnMuIFZlcnkgc2ltcGxlIHJpZ2h0IG5vdywgbWlnaHQgbmVlZCB0byBiZSBleHRlbmRlZCB3aXRoCisgICBhIHY0bDJfZ3BpbyBzdHJ1Y3QgaWYgYSBkaXJlY3Rpb24gaXMgYWxzbyBuZWVkZWQuICovCisjZGVmaW5lIFZJRElPQ19JTlRfU19HUElPCQlfSU9XKCdkJywgMTE3LCB1MzIpCiAKICNlbmRpZiAvKiBWNEwyX0NPTU1PTl9IXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9tZWRpYS92NGwyLWRldi5oIGIvaW5jbHVkZS9tZWRpYS92NGwyLWRldi5oCmluZGV4IDI3NDVlMWEuLmEwYTZiNDEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbWVkaWEvdjRsMi1kZXYuaAorKysgYi9pbmNsdWRlL21lZGlhL3Y0bDItZGV2LmgKQEAgLTksMzAgKzksMjAgQEAKICNpZm5kZWYgX1Y0TDJfREVWX0gKICNkZWZpbmUgX1Y0TDJfREVWX0gKIAotI2RlZmluZSBPQlNPTEVURV9ERVZEQVRBIDEgLyogdG8gYmUgcmVtb3ZlZCBzb29uICovCi0KICNpbmNsdWRlIDxsaW51eC9wb2xsLmg+CiAjaW5jbHVkZSA8bGludXgvZnMuaD4KICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9jZGV2Lmg+CiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KLSNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPiAvKiBuZWVkIF9fdXNlciAqLwogI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Mi5oPgogCiAjZGVmaW5lIFZJREVPX01BSk9SCTgxCi0vKiBNaW5vciBkZXZpY2UgYWxsb2NhdGlvbiAqLwotI2RlZmluZSBNSU5PUl9WRkxfVFlQRV9HUkFCQkVSX01JTiAgIDAKLSNkZWZpbmUgTUlOT1JfVkZMX1RZUEVfR1JBQkJFUl9NQVggIDYzCi0jZGVmaW5lIE1JTk9SX1ZGTF9UWVBFX1JBRElPX01JTiAgICA2NAotI2RlZmluZSBNSU5PUl9WRkxfVFlQRV9SQURJT19NQVggICAxMjcKLSNkZWZpbmUgTUlOT1JfVkZMX1RZUEVfVlRYX01JTiAgICAgMTkyCi0jZGVmaW5lIE1JTk9SX1ZGTF9UWVBFX1ZUWF9NQVggICAgIDIyMwotI2RlZmluZSBNSU5PUl9WRkxfVFlQRV9WQklfTUlOICAgICAyMjQKLSNkZWZpbmUgTUlOT1JfVkZMX1RZUEVfVkJJX01BWCAgICAgMjU1CiAKICNkZWZpbmUgVkZMX1RZUEVfR1JBQkJFUgkwCiAjZGVmaW5lIFZGTF9UWVBFX1ZCSQkJMQogI2RlZmluZSBWRkxfVFlQRV9SQURJTwkJMgogI2RlZmluZSBWRkxfVFlQRV9WVFgJCTMKKyNkZWZpbmUgVkZMX1RZUEVfTUFYCQk0CiAKIHN0cnVjdCB2NGwyX2lvY3RsX2NhbGxiYWNrczsKIApAQCAtNDksMTIgKzM5LDE1IEBACiAKIAkvKiBzeXNmcyAqLwogCXN0cnVjdCBkZXZpY2UgZGV2OwkJLyogdjRsIGRldmljZSAqLworCXN0cnVjdCBjZGV2IGNkZXY7CQkvKiBjaGFyYWN0ZXIgZGV2aWNlICovCisJdm9pZCAoKmNkZXZfcmVsZWFzZSkoc3RydWN0IGtvYmplY3QgKmtvYmopOwogCXN0cnVjdCBkZXZpY2UgKnBhcmVudDsJCS8qIGRldmljZSBwYXJlbnQgKi8KIAogCS8qIGRldmljZSBpbmZvICovCiAJY2hhciBuYW1lWzMyXTsKIAlpbnQgdmZsX3R5cGU7CiAJaW50IG1pbm9yOworCXUxNiBudW07CiAJLyogYXR0cmlidXRlIHRvIGRpZmZlcmVudGlhdGUgbXVsdGlwbGUgaW5kaWNlcyBvbiBvbmUgcGh5c2ljYWwgZGV2aWNlICovCiAJaW50IGluZGV4OwogCkBAIC02OSw1MCArNjIsNTAgQEAKIAogCS8qIGlvY3RsIGNhbGxiYWNrcyAqLwogCWNvbnN0IHN0cnVjdCB2NGwyX2lvY3RsX29wcyAqaW9jdGxfb3BzOwotCi0jaWZkZWYgT0JTT0xFVEVfREVWREFUQSAvKiB0byBiZSByZW1vdmVkIHNvb24gKi8KLQkvKiBkZXYtPmRyaXZlcl9kYXRhIHdpbGwgYmUgdXNlZCBpbnN0ZWFkIHNvbWUgZGF5LgotCSAqIFVzZSB0aGUgdmlkZW9fe2dldHxzZXR9X2RydmRhdGEoKSBoZWxwZXIgZnVuY3Rpb25zLAotCSAqIHNvIHRoZSBzd2l0Y2ggb3ZlciB3aWxsIGJlIHRyYW5zcGFyZW50IGZvciB5b3UuCi0JICogT3IgdXNlIHtwY2l8dXNifV97Z2V0fHNldH1fZHJ2ZGF0YSgpIGRpcmVjdGx5LiAqLwotCXZvaWQgKnByaXY7Ci0jZW5kaWYKLQotCS8qIGZvciB2aWRlb2Rldi5jIGludGVybmFsIHVzYWdlIC0tIHBsZWFzZSBkb24ndCB0b3VjaCAqLwotCWludCB1c2VyczsgICAgICAgICAgICAgICAgICAgICAvKiB2aWRlb19leGNsdXNpdmVfe29wZW58Y2xvc2V9IC4uLiAqLwotCXN0cnVjdCBtdXRleCBsb2NrOyAgICAgICAgICAgICAvKiAuLi4gaGVscGVyIGZ1bmN0aW9uIHVzZXMgdGhlc2UgICAqLwogfTsKIAotLyogQ2xhc3MtZGV2IHRvIHZpZGVvLWRldmljZSAqLworLyogZGV2IHRvIHZpZGVvLWRldmljZSAqLwogI2RlZmluZSB0b192aWRlb19kZXZpY2UoY2QpIGNvbnRhaW5lcl9vZihjZCwgc3RydWN0IHZpZGVvX2RldmljZSwgZGV2KQogCi0vKiBWZXJzaW9uIDIgZnVuY3Rpb25zICovCi1leHRlcm4gaW50IHZpZGVvX3JlZ2lzdGVyX2RldmljZShzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2ZmQsIGludCB0eXBlLCBpbnQgbnIpOwotaW50IHZpZGVvX3JlZ2lzdGVyX2RldmljZV9pbmRleChzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2ZmQsIGludCB0eXBlLCBpbnQgbnIsCi0JCQkJCWludCBpbmRleCk7Ci12b2lkIHZpZGVvX3VucmVnaXN0ZXJfZGV2aWNlKHN0cnVjdCB2aWRlb19kZXZpY2UgKik7CisvKiBSZWdpc3RlciBhbmQgdW5yZWdpc3RlciBkZXZpY2VzLiBOb3RlIHRoYXQgaWYgdmlkZW9fcmVnaXN0ZXJfZGV2aWNlIGZhaWxzLAorICAgdGhlIHJlbGVhc2UoKSBjYWxsYmFjayBvZiB0aGUgdmlkZW9fZGV2aWNlIHN0cnVjdHVyZSBpcyAqbm90KiBjYWxsZWQsIHNvCisgICB0aGUgY2FsbGVyIGlzIHJlc3BvbnNpYmxlIGZvciBmcmVlaW5nIGFueSBkYXRhLiBVc3VhbGx5IHRoYXQgbWVhbnMgdGhhdAorICAgeW91IGNhbGwgdmlkZW9fZGV2aWNlX3JlbGVhc2UoKSBvbiBmYWlsdXJlLiAqLworaW50IF9fbXVzdF9jaGVjayB2aWRlb19yZWdpc3Rlcl9kZXZpY2Uoc3RydWN0IHZpZGVvX2RldmljZSAqdmZkLCBpbnQgdHlwZSwgaW50IG5yKTsKK2ludCBfX211c3RfY2hlY2sgdmlkZW9fcmVnaXN0ZXJfZGV2aWNlX2luZGV4KHN0cnVjdCB2aWRlb19kZXZpY2UgKnZmZCwKKwkJCQkJCWludCB0eXBlLCBpbnQgbnIsIGludCBpbmRleCk7Cit2b2lkIHZpZGVvX3VucmVnaXN0ZXJfZGV2aWNlKHN0cnVjdCB2aWRlb19kZXZpY2UgKnZmZCk7CiAKLS8qIGhlbHBlciBmdW5jdGlvbnMgdG8gYWxsb2MgLyByZWxlYXNlIHN0cnVjdCB2aWRlb19kZXZpY2UsIHRoZQotICAgbGF0ZXIgY2FuIGJlIHVzZWQgZm9yIHZpZGVvX2RldmljZS0+cmVsZWFzZSgpICovCi1zdHJ1Y3QgdmlkZW9fZGV2aWNlICp2aWRlb19kZXZpY2VfYWxsb2Modm9pZCk7CisvKiBoZWxwZXIgZnVuY3Rpb25zIHRvIGFsbG9jL3JlbGVhc2Ugc3RydWN0IHZpZGVvX2RldmljZSwgdGhlCisgICBsYXR0ZXIgY2FuIGFsc28gYmUgdXNlZCBmb3IgdmlkZW9fZGV2aWNlLT5yZWxlYXNlKCkuICovCitzdHJ1Y3QgdmlkZW9fZGV2aWNlICogX19tdXN0X2NoZWNrIHZpZGVvX2RldmljZV9hbGxvYyh2b2lkKTsKKworLyogdGhpcyByZWxlYXNlIGZ1bmN0aW9uIGZyZWVzIHRoZSB2ZmQgcG9pbnRlciAqLwogdm9pZCB2aWRlb19kZXZpY2VfcmVsZWFzZShzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2ZmQpOwogCi0jaWZkZWYgT0JTT0xFVEVfREVWREFUQSAvKiB0byBiZSByZW1vdmVkIHNvb24gKi8KKy8qIHRoaXMgcmVsZWFzZSBmdW5jdGlvbiBkb2VzIG5vdGhpbmcsIHVzZSB3aGVuIHRoZSB2aWRlb19kZXZpY2UgaXMgYQorICAgc3RhdGljIGdsb2JhbCBzdHJ1Y3QuIE5vdGUgdGhhdCBoYXZpbmcgYSBzdGF0aWMgdmlkZW9fZGV2aWNlIGlzCisgICBhIGR1YmlvdXMgY29uc3RydWN0aW9uIGF0IGJlc3QuICovCit2b2lkIHZpZGVvX2RldmljZV9yZWxlYXNlX2VtcHR5KHN0cnVjdCB2aWRlb19kZXZpY2UgKnZmZCk7CisKIC8qIGhlbHBlciBmdW5jdGlvbnMgdG8gYWNjZXNzIGRyaXZlciBwcml2YXRlIGRhdGEuICovCiBzdGF0aWMgaW5saW5lIHZvaWQgKnZpZGVvX2dldF9kcnZkYXRhKHN0cnVjdCB2aWRlb19kZXZpY2UgKmRldikKIHsKLQlyZXR1cm4gZGV2LT5wcml2OworCXJldHVybiBkZXZfZ2V0X2RydmRhdGEoJmRldi0+ZGV2KTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIHZpZGVvX3NldF9kcnZkYXRhKHN0cnVjdCB2aWRlb19kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSkKIHsKLQlkZXYtPnByaXYgPSBkYXRhOworCWRldl9zZXRfZHJ2ZGF0YSgmZGV2LT5kZXYsIGRhdGEpOwogfQogCi0vKiBPYnNvbGV0ZSBzdHVmZiAtIFN0aWxsIG5lZWRlZCBmb3IgcmFkaW8gZGV2aWNlcyBhbmQgb2Jzb2xldGUgZHJpdmVycyAqLwotZXh0ZXJuIHN0cnVjdCB2aWRlb19kZXZpY2UqIHZpZGVvX2RldmRhdGEoc3RydWN0IGZpbGUqKTsKLWV4dGVybiBpbnQgdmlkZW9fZXhjbHVzaXZlX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpOwotZXh0ZXJuIGludCB2aWRlb19leGNsdXNpdmVfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSk7Ci0jZW5kaWYKK3N0cnVjdCB2aWRlb19kZXZpY2UgKnZpZGVvX2RldmRhdGEoc3RydWN0IGZpbGUgKmZpbGUpOworCisvKiBDb21iaW5lIHZpZGVvX2dldF9kcnZkYXRhIGFuZCB2aWRlb19kZXZkYXRhIGFzIHRoaXMgaXMKKyAgIHVzZWQgdmVyeSBvZnRlbi4gKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCAqdmlkZW9fZHJ2ZGF0YShzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlyZXR1cm4gdmlkZW9fZ2V0X2RydmRhdGEodmlkZW9fZGV2ZGF0YShmaWxlKSk7Cit9CiAKICNlbmRpZiAvKiBfVjRMMl9ERVZfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9tZWRpYS92NGwyLWkyYy1kcnYtbGVnYWN5LmggYi9pbmNsdWRlL21lZGlhL3Y0bDItaTJjLWRydi1sZWdhY3kuaAppbmRleCA5NzVmZmJmLi5lNjVkZDlkIDEwMDY0NAotLS0gYS9pbmNsdWRlL21lZGlhL3Y0bDItaTJjLWRydi1sZWdhY3kuaAorKysgYi9pbmNsdWRlL21lZGlhL3Y0bDItaTJjLWRydi1sZWdhY3kuaApAQCAtMjEsNiArMjEsMTcgQEAKICAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgogICovCiAKKy8qIE5PVEU6IHRoZSBmdWxsIHZlcnNpb24gb2YgdGhpcyBoZWFkZXIgaXMgaW4gdGhlIHY0bC1kdmIgcmVwb3NpdG9yeQorICogYW5kIGFsbG93cyB2NGwgaTJjIGRyaXZlcnMgdG8gYmUgY29tcGlsZWQgb24gb2xkZXIga2VybmVscyBhcyB3ZWxsLgorICogVGhlIHZlcnNpb24gb2YgdGhpcyBoZWFkZXIgYXMgaXQgYXBwZWFycyBpbiB0aGUga2VybmVsIGlzIGEgc3RyaXBwZWQKKyAqIHZlcnNpb24gKHdpdGhvdXQgYWxsIHRoZSBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSBzdHVmZikgYW5kIHNvIGl0CisgKiBsb29rcyBhIGJpdCBvZGQuCisgKgorICogSWYgeW91IGxvb2sgYXQgdGhlIGZ1bGwgdmVyc2lvbiB0aGVuIHlvdSB3aWxsIHVuZGVyc3RhbmQgdGhlIHJlYXNvbgorICogZm9yIGludHJvZHVjaW5nIHRoaXMgaGVhZGVyIHNpbmNlIHlvdSByZWFsbHkgZG9uJ3Qgd2FudCB0byBoYXZlIGFsbAorICogdGhlIHRyaWNreSBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSBjb2RlIGluIGVhY2ggYW5kIGV2ZXJ5IGkyYyBkcml2ZXIuCisgKi8KKwogc3RydWN0IHY0bDJfaTJjX2RyaXZlcl9kYXRhIHsKIAljb25zdCBjaGFyICogY29uc3QgbmFtZTsKIAlpbnQgZHJpdmVyaWQ7CmRpZmYgLS1naXQgYS9pbmNsdWRlL21lZGlhL3Y0bDItaTJjLWRydi5oIGIvaW5jbHVkZS9tZWRpYS92NGwyLWkyYy1kcnYuaAppbmRleCA0MGVjZWYyLi5lZmRjOGJmIDEwMDY0NAotLS0gYS9pbmNsdWRlL21lZGlhL3Y0bDItaTJjLWRydi5oCisrKyBiL2luY2x1ZGUvbWVkaWEvdjRsMi1pMmMtZHJ2LmgKQEAgLTIxLDYgKzIxLDE3IEBACiAgKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KICAqLwogCisvKiBOT1RFOiB0aGUgZnVsbCB2ZXJzaW9uIG9mIHRoaXMgaGVhZGVyIGlzIGluIHRoZSB2NGwtZHZiIHJlcG9zaXRvcnkKKyAqIGFuZCBhbGxvd3MgdjRsIGkyYyBkcml2ZXJzIHRvIGJlIGNvbXBpbGVkIG9uIG9sZGVyIGtlcm5lbHMgYXMgd2VsbC4KKyAqIFRoZSB2ZXJzaW9uIG9mIHRoaXMgaGVhZGVyIGFzIGl0IGFwcGVhcnMgaW4gdGhlIGtlcm5lbCBpcyBhIHN0cmlwcGVkCisgKiB2ZXJzaW9uICh3aXRob3V0IGFsbCB0aGUgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgc3R1ZmYpIGFuZCBzbyBpdAorICogbG9va3MgYSBiaXQgb2RkLgorICoKKyAqIElmIHlvdSBsb29rIGF0IHRoZSBmdWxsIHZlcnNpb24gdGhlbiB5b3Ugd2lsbCB1bmRlcnN0YW5kIHRoZSByZWFzb24KKyAqIGZvciBpbnRyb2R1Y2luZyB0aGlzIGhlYWRlciBzaW5jZSB5b3UgcmVhbGx5IGRvbid0IHdhbnQgdG8gaGF2ZSBhbGwKKyAqIHRoZSB0cmlja3kgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgY29kZSBpbiBlYWNoIGFuZCBldmVyeSBpMmMgZHJpdmVyLgorICovCisKICNpZm5kZWYgX19WNEwyX0kyQ19EUlZfSF9fCiAjZGVmaW5lIF9fVjRMMl9JMkNfRFJWX0hfXwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL21lZGlhL3Y0bDItaW9jdGwuaCBiL2luY2x1ZGUvbWVkaWEvdjRsMi1pb2N0bC5oCmluZGV4IGRjNjQwNDYuLjBiZWYwM2EgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbWVkaWEvdjRsMi1pb2N0bC5oCisrKyBiL2luY2x1ZGUvbWVkaWEvdjRsMi1pb2N0bC5oCkBAIC0zOSwxMSArMzksNiBAQAogCQkJCQkgICAgc3RydWN0IHY0bDJfZm10ZGVzYyAqZik7CiAJaW50ICgqdmlkaW9jX2VudW1fZm10X3ZpZF9vdXQpICAgICAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLAogCQkJCQkgICAgc3RydWN0IHY0bDJfZm10ZGVzYyAqZik7Ci0jaWYgMQotCS8qIGRlcHJlY2F0ZWQsIHdpbGwgYmUgcmVtb3ZlZCBpbiAyLjYuMjggKi8KLQlpbnQgKCp2aWRpb2NfZW51bV9mbXRfdmJpX2NhcCkgICAgIChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsCi0JCQkJCSAgICBzdHJ1Y3QgdjRsMl9mbXRkZXNjICpmKTsKLSNlbmRpZgogCWludCAoKnZpZGlvY19lbnVtX2ZtdF90eXBlX3ByaXZhdGUpKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwKIAkJCQkJICAgIHN0cnVjdCB2NGwyX2ZtdGRlc2MgKmYpOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL21lZGlhL3ZpZGVvYnVmLWR2Yi5oIGIvaW5jbHVkZS9tZWRpYS92aWRlb2J1Zi1kdmIuaAppbmRleCBiNzc3NDg2Li44MDQ3MWMyIDEwMDY0NAotLS0gYS9pbmNsdWRlL21lZGlhL3ZpZGVvYnVmLWR2Yi5oCisrKyBiL2luY2x1ZGUvbWVkaWEvdmlkZW9idWYtZHZiLmgKQEAgLTE2LDcgKzE2LDYgQEAKIAlpbnQgICAgICAgICAgICAgICAgICAgICAgICBuZmVlZHM7CiAKIAkvKiB2aWRlb2J1Zl9kdmJfKHVuKXJlZ2lzdGVyIG1hbmdlcyB0aGlzICovCi0Jc3RydWN0IGR2Yl9hZGFwdGVyICAgICAgICAgYWRhcHRlcjsKIAlzdHJ1Y3QgZHZiX2RlbXV4ICAgICAgICAgICBkZW11eDsKIAlzdHJ1Y3QgZG14ZGV2ICAgICAgICAgICAgICBkbXhkZXY7CiAJc3RydWN0IGRteF9mcm9udGVuZCAgICAgICAgZmVfaHc7CkBAIC0yNCwxMiArMjMsMzQgQEAKIAlzdHJ1Y3QgZHZiX25ldCAgICAgICAgICAgICBuZXQ7CiB9OwogCi1pbnQgdmlkZW9idWZfZHZiX3JlZ2lzdGVyKHN0cnVjdCB2aWRlb2J1Zl9kdmIgKmR2YiwKK3N0cnVjdCB2aWRlb2J1Zl9kdmJfZnJvbnRlbmQgeworCXN0cnVjdCBsaXN0X2hlYWQgZmVsaXN0OworCWludCBpZDsKKwlzdHJ1Y3QgdmlkZW9idWZfZHZiIGR2YjsKK307CisKK3N0cnVjdCB2aWRlb2J1Zl9kdmJfZnJvbnRlbmRzIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGZlbGlzdDsKKwlzdHJ1Y3QgbXV0ZXggbG9jazsKKwlzdHJ1Y3QgZHZiX2FkYXB0ZXIgYWRhcHRlcjsKKwlpbnQgYWN0aXZlX2ZlX2lkOyAvKiBJbmRpY2F0ZXMgd2hpY2ggZnJvbnRlbmQgaW4gdGhlIGZlbGlzdCBpcyBpbiB1c2UgKi8KKwlpbnQgZ2F0ZTsgLyogRnJvbnRlbmQgd2l0aCBnYXRlIGNvbnRyb2wgMD0hTUZFLDE9ZmUwLDI9ZmUxIGV0YyAqLworfTsKKworaW50IHZpZGVvYnVmX2R2Yl9yZWdpc3Rlcl9idXMoc3RydWN0IHZpZGVvYnVmX2R2Yl9mcm9udGVuZHMgKmYsCiAJCQkgIHN0cnVjdCBtb2R1bGUgKm1vZHVsZSwKIAkJCSAgdm9pZCAqYWRhcHRlcl9wcml2LAogCQkJICBzdHJ1Y3QgZGV2aWNlICpkZXZpY2UsCi0JCQkgIHNob3J0ICphZGFwdGVyX25yKTsKLXZvaWQgdmlkZW9idWZfZHZiX3VucmVnaXN0ZXIoc3RydWN0IHZpZGVvYnVmX2R2YiAqZHZiKTsKKwkJCSAgc2hvcnQgKmFkYXB0ZXJfbnIsCisJCQkgIGludCBtZmVfc2hhcmVkKTsKKwordm9pZCB2aWRlb2J1Zl9kdmJfdW5yZWdpc3Rlcl9idXMoc3RydWN0IHZpZGVvYnVmX2R2Yl9mcm9udGVuZHMgKmYpOworCitzdHJ1Y3QgdmlkZW9idWZfZHZiX2Zyb250ZW5kICogdmlkZW9idWZfZHZiX2FsbG9jX2Zyb250ZW5kKHN0cnVjdCB2aWRlb2J1Zl9kdmJfZnJvbnRlbmRzICpmLCBpbnQgaWQpOworCitzdHJ1Y3QgdmlkZW9idWZfZHZiX2Zyb250ZW5kICogdmlkZW9idWZfZHZiX2dldF9mcm9udGVuZChzdHJ1Y3QgdmlkZW9idWZfZHZiX2Zyb250ZW5kcyAqZiwgaW50IGlkKTsKK2ludCB2aWRlb2J1Zl9kdmJfZmluZF9mcm9udGVuZChzdHJ1Y3QgdmlkZW9idWZfZHZiX2Zyb250ZW5kcyAqZiwgc3RydWN0IGR2Yl9mcm9udGVuZCAqcCk7CisKIAogLyoKICAqIExvY2FsIHZhcmlhYmxlczoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0LzlwLzlwLmggYi9pbmNsdWRlL25ldC85cC85cC5oCmluZGV4IGMzNjI2YzAuLmQyYzYwYzcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0LzlwLzlwLmgKKysrIGIvaW5jbHVkZS9uZXQvOXAvOXAuaApAQCAtMjcsOCArMjcsNiBAQAogI2lmbmRlZiBORVRfOVBfSAogI2RlZmluZSBORVRfOVBfSAogCi0jaWZkZWYgQ09ORklHX05FVF85UF9ERUJVRwotCiAvKioKICAqIGVudW0gcDlfZGVidWdfZmxhZ3MgLSBiaXRzIGZvciBtb3VudCB0aW1lIGRlYnVnIHBhcmFtZXRlcgogICogQFA5X0RFQlVHX0VSUk9SOiBtb3JlIHZlcmJvc2UgZXJyb3IgbWVzc2FnZXMgaW5jbHVkaW5nIG9yaWdpbmFsIGVycm9yIHN0cmluZwpAQCAtMzksNiArMzcsNyBAQAogICogQFA5X0RFQlVHX1RSQU5TOiB0cmFuc3BvcnQgdHJhY2luZwogICogQFA5X0RFQlVHX1NMQUJTOiBtZW1vcnkgbWFuYWdlbWVudCB0cmFjaW5nCiAgKiBAUDlfREVCVUdfRkNBTEw6IHZlcmJvc2UgZHVtcCBvZiBwcm90b2NvbCBtZXNzYWdlcworICogQFA5X0RFQlVHX0ZJRDogZmlkIGFsbG9jYXRpb24vZGVhbGxvY2F0aW9uIHRyYWNraW5nCiAgKgogICogVGhlc2UgZmxhZ3MgYXJlIHBhc3NlZCBhdCBtb3VudCB0aW1lIHRvIHR1cm4gb24gdmFyaW91cyBsZXZlbHMgb2YKICAqIHZlcmJvc2l0eSBhbmQgdHJhY2luZyB3aGljaCB3aWxsIGJlIG91dHB1dCB0byB0aGUgc3lzdGVtIGxvZ3MuCkBAIC01MywzMCArNTIsMzMgQEAKIAlQOV9ERUJVR19UUkFOUyA9CSgxPDw2KSwKIAlQOV9ERUJVR19TTEFCUyA9ICAgICAgCSgxPDw3KSwKIAlQOV9ERUJVR19GQ0FMTCA9CSgxPDw4KSwKKwlQOV9ERUJVR19GSUQgPQkJKDE8PDkpLAorCVA5X0RFQlVHX1BLVCA9CQkoMTw8MTApLAogfTsKIAogZXh0ZXJuIHVuc2lnbmVkIGludCBwOV9kZWJ1Z19sZXZlbDsKIAorI2lmZGVmIENPTkZJR19ORVRfOVBfREVCVUcKICNkZWZpbmUgUDlfRFBSSU5USyhsZXZlbCwgZm9ybWF0LCBhcmcuLi4pIFwKIGRvIHsgIFwKLQlpZiAoKHA5X2RlYnVnX2xldmVsICYgbGV2ZWwpID09IGxldmVsKSBcCi0JCXByaW50ayhLRVJOX05PVElDRSAiLS0gJXMgKCVkKTogIiBcCi0JCWZvcm1hdCAsIF9fRlVOQ1RJT05fXywgdGFza19waWRfbnIoY3VycmVudCkgLCAjIyBhcmcpOyBcCisJaWYgKChwOV9kZWJ1Z19sZXZlbCAmIGxldmVsKSA9PSBsZXZlbCkge1wKKwkJaWYgKGxldmVsID09IFA5X0RFQlVHXzlQKSBcCisJCQlwcmludGsoS0VSTl9OT1RJQ0UgIiglOC44ZCkgIiBcCisJCQlmb3JtYXQgLCB0YXNrX3BpZF9ucihjdXJyZW50KSAsICMjIGFyZyk7IFwKKwkJZWxzZSBcCisJCQlwcmludGsoS0VSTl9OT1RJQ0UgIi0tICVzICglZCk6ICIgXAorCQkJZm9ybWF0ICwgX19mdW5jX18sIHRhc2tfcGlkX25yKGN1cnJlbnQpICwgIyMgYXJnKTsgXAorCX0gXAogfSB3aGlsZSAoMCkKIAotI2RlZmluZSBQUklOVF9GQ0FMTF9FUlJPUihzLCBmY2FsbCkgUDlfRFBSSU5USyhQOV9ERUJVR19FUlJPUiwgICBcCi0JIiVzOiAlLipzXG4iLCBzLCBmY2FsbD9mY2FsbC0+cGFyYW1zLnJlcnJvci5lcnJvci5sZW46MCwgXAotCWZjYWxsP2ZjYWxsLT5wYXJhbXMucmVycm9yLmVycm9yLnN0cjoiIik7Ci0KICNlbHNlCiAjZGVmaW5lIFA5X0RQUklOVEsobGV2ZWwsIGZvcm1hdCwgYXJnLi4uKSAgZG8geyB9IHdoaWxlICgwKQotI2RlZmluZSBQUklOVF9GQ0FMTF9FUlJPUihzLCBmY2FsbCkgZG8geyB9IHdoaWxlICgwKQogI2VuZGlmCiAKICNkZWZpbmUgUDlfRVBSSU5USyhsZXZlbCwgZm9ybWF0LCBhcmcuLi4pIFwKIGRvIHsgXAogCXByaW50ayhsZXZlbCAiOXA6ICVzICglZCk6ICIgXAotCQlmb3JtYXQgLCBfX0ZVTkNUSU9OX18sIHRhc2tfcGlkX25yKGN1cnJlbnQpLCAjIyBhcmcpOyBcCisJCWZvcm1hdCAsIF9fZnVuY19fLCB0YXNrX3BpZF9ucihjdXJyZW50KSwgIyMgYXJnKTsgXAogfSB3aGlsZSAoMCkKIAogLyoqCkBAIC0zMjUsMzMgKzMyNyw2IEBACiAgKiBTZWUgQWxzbzogaHR0cDovL3BsYW45LmJlbGwtbGFicy5jb20vbWFnaWMvbWFuMmh0bWwvMi9zdGF0CiAgKi8KIAotc3RydWN0IHA5X3N0YXQgewotCXUxNiBzaXplOwotCXUxNiB0eXBlOwotCXUzMiBkZXY7Ci0Jc3RydWN0IHA5X3FpZCBxaWQ7Ci0JdTMyIG1vZGU7Ci0JdTMyIGF0aW1lOwotCXUzMiBtdGltZTsKLQl1NjQgbGVuZ3RoOwotCXN0cnVjdCBwOV9zdHIgbmFtZTsKLQlzdHJ1Y3QgcDlfc3RyIHVpZDsKLQlzdHJ1Y3QgcDlfc3RyIGdpZDsKLQlzdHJ1Y3QgcDlfc3RyIG11aWQ7Ci0Jc3RydWN0IHA5X3N0ciBleHRlbnNpb247CS8qIDlwMjAwMC51IGV4dGVuc2lvbnMgKi8KLQl1MzIgbl91aWQ7CQkJLyogOXAyMDAwLnUgZXh0ZW5zaW9ucyAqLwotCXUzMiBuX2dpZDsJCQkvKiA5cDIwMDAudSBleHRlbnNpb25zICovCi0JdTMyIG5fbXVpZDsJCQkvKiA5cDIwMDAudSBleHRlbnNpb25zICovCi19OwotCi0vKgotICogZmlsZSBtZXRhZGF0YSAoc3RhdCkgc3RydWN0dXJlIHVzZWQgdG8gY3JlYXRlIFR3c3RhdCBtZXNzYWdlCi0gKiBUaGUgaXMgaWRlbnRpY2FsIHRvICZwOV9zdGF0LCBidXQgdGhlIHN0cmluZ3MgZG9uJ3QgcG9pbnQgdG8KLSAqIHRoZSBzYW1lIG1lbW9yeSBibG9jayBhbmQgc2hvdWxkIGJlIGZyZWVkIHNlcGFyYXRlbHkKLSAqCi0gKiBTZWUgQWxzbzogaHR0cDovL3BsYW45LmJlbGwtbGFicy5jb20vbWFnaWMvbWFuMmh0bWwvMi9zdGF0Ci0gKi8KLQogc3RydWN0IHA5X3dzdGF0IHsKIAl1MTYgc2l6ZTsKIAl1MTYgdHlwZTsKQEAgLTQ5MywxMiArNDY4LDEyIEBACiB9OwogCiBzdHJ1Y3QgcDlfcnN0YXQgewotCXN0cnVjdCBwOV9zdGF0IHN0YXQ7CisJc3RydWN0IHA5X3dzdGF0IHN0YXQ7CiB9OwogCiBzdHJ1Y3QgcDlfdHdzdGF0IHsKIAl1MzIgZmlkOwotCXN0cnVjdCBwOV9zdGF0IHN0YXQ7CisJc3RydWN0IHA5X3dzdGF0IHN0YXQ7CiB9OwogCiBzdHJ1Y3QgcDlfcndzdGF0IHsKQEAgLTUwOSw4ICs0ODQsOSBAQAogICogQHNpemU6IHByZWZpeGVkIGxlbmd0aCBvZiB0aGUgc3RydWN0dXJlCiAgKiBAaWQ6IHByb3RvY29sIG9wZXJhdGluZyBpZGVudGlmaWVyIG9mIHR5cGUgJnA5X21zZ190CiAgKiBAdGFnOiB0cmFuc2FjdGlvbiBpZCBvZiB0aGUgcmVxdWVzdAorICogQG9mZnNldDogdXNlZCBieSBtYXJzaGFsbGluZyByb3V0aW5lcyB0byB0cmFjayBjdXJyZW50cG9zaXRpb24gaW4gYnVmZmVyCisgKiBAY2FwYWNpdHk6IHVzZWQgYnkgbWFyc2hhbGxpbmcgcm91dGluZXMgdG8gdHJhY2sgdG90YWwgY2FwYWNpdHkKICAqIEBzZGF0YTogcGF5bG9hZAotICogQHBhcmFtczogcGVyLW9wZXJhdGlvbiBwYXJhbWV0ZXJzCiAgKgogICogJnA5X2ZjYWxsIHJlcHJlc2VudHMgdGhlIHN0cnVjdHVyZSBmb3IgYWxsIDlQIFJQQwogICogdHJhbnNhY3Rpb25zLiAgUmVxdWVzdHMgYXJlIHBhY2thZ2VkIGludG8gZmNhbGxzLCBhbmQgcmVwb25zZXMKQEAgLTUyMyw2OCArNDk5LDE1IEBACiAJdTMyIHNpemU7CiAJdTggaWQ7CiAJdTE2IHRhZzsKLQl2b2lkICpzZGF0YTsKIAotCXVuaW9uIHsKLQkJc3RydWN0IHA5X3R2ZXJzaW9uIHR2ZXJzaW9uOwotCQlzdHJ1Y3QgcDlfcnZlcnNpb24gcnZlcnNpb247Ci0JCXN0cnVjdCBwOV90YXV0aCB0YXV0aDsKLQkJc3RydWN0IHA5X3JhdXRoIHJhdXRoOwotCQlzdHJ1Y3QgcDlfcmVycm9yIHJlcnJvcjsKLQkJc3RydWN0IHA5X3RmbHVzaCB0Zmx1c2g7Ci0JCXN0cnVjdCBwOV9yZmx1c2ggcmZsdXNoOwotCQlzdHJ1Y3QgcDlfdGF0dGFjaCB0YXR0YWNoOwotCQlzdHJ1Y3QgcDlfcmF0dGFjaCByYXR0YWNoOwotCQlzdHJ1Y3QgcDlfdHdhbGsgdHdhbGs7Ci0JCXN0cnVjdCBwOV9yd2FsayByd2FsazsKLQkJc3RydWN0IHA5X3RvcGVuIHRvcGVuOwotCQlzdHJ1Y3QgcDlfcm9wZW4gcm9wZW47Ci0JCXN0cnVjdCBwOV90Y3JlYXRlIHRjcmVhdGU7Ci0JCXN0cnVjdCBwOV9yY3JlYXRlIHJjcmVhdGU7Ci0JCXN0cnVjdCBwOV90cmVhZCB0cmVhZDsKLQkJc3RydWN0IHA5X3JyZWFkIHJyZWFkOwotCQlzdHJ1Y3QgcDlfdHdyaXRlIHR3cml0ZTsKLQkJc3RydWN0IHA5X3J3cml0ZSByd3JpdGU7Ci0JCXN0cnVjdCBwOV90Y2x1bmsgdGNsdW5rOwotCQlzdHJ1Y3QgcDlfcmNsdW5rIHJjbHVuazsKLQkJc3RydWN0IHA5X3RyZW1vdmUgdHJlbW92ZTsKLQkJc3RydWN0IHA5X3JyZW1vdmUgcnJlbW92ZTsKLQkJc3RydWN0IHA5X3RzdGF0IHRzdGF0OwotCQlzdHJ1Y3QgcDlfcnN0YXQgcnN0YXQ7Ci0JCXN0cnVjdCBwOV90d3N0YXQgdHdzdGF0OwotCQlzdHJ1Y3QgcDlfcndzdGF0IHJ3c3RhdDsKLQl9IHBhcmFtczsKKwlzaXplX3Qgb2Zmc2V0OworCXNpemVfdCBjYXBhY2l0eTsKKworCXVpbnQ4X3QgKnNkYXRhOwogfTsKIAogc3RydWN0IHA5X2lkcG9vbDsKIAotaW50IHA5X2Rlc2VyaWFsaXplX3N0YXQodm9pZCAqYnVmLCB1MzIgYnVmbGVuLCBzdHJ1Y3QgcDlfc3RhdCAqc3RhdCwKLQlpbnQgZG90dSk7Ci1pbnQgcDlfZGVzZXJpYWxpemVfZmNhbGwodm9pZCAqYnVmLCB1MzIgYnVmbGVuLCBzdHJ1Y3QgcDlfZmNhbGwgKmZjLCBpbnQgZG90dSk7Ci12b2lkIHA5X3NldF90YWcoc3RydWN0IHA5X2ZjYWxsICpmYywgdTE2IHRhZyk7Ci1zdHJ1Y3QgcDlfZmNhbGwgKnA5X2NyZWF0ZV90dmVyc2lvbih1MzIgbXNpemUsIGNoYXIgKnZlcnNpb24pOwotc3RydWN0IHA5X2ZjYWxsICpwOV9jcmVhdGVfdGF0dGFjaCh1MzIgZmlkLCB1MzIgYWZpZCwgY2hhciAqdW5hbWUsCi0JY2hhciAqYW5hbWUsIHUzMiBuX3VuYW1lLCBpbnQgZG90dSk7Ci1zdHJ1Y3QgcDlfZmNhbGwgKnA5X2NyZWF0ZV90YXV0aCh1MzIgYWZpZCwgY2hhciAqdW5hbWUsIGNoYXIgKmFuYW1lLAotCXUzMiBuX3VuYW1lLCBpbnQgZG90dSk7Ci1zdHJ1Y3QgcDlfZmNhbGwgKnA5X2NyZWF0ZV90Zmx1c2godTE2IG9sZHRhZyk7Ci1zdHJ1Y3QgcDlfZmNhbGwgKnA5X2NyZWF0ZV90d2Fsayh1MzIgZmlkLCB1MzIgbmV3ZmlkLCB1MTYgbnduYW1lLAotCWNoYXIgKip3bmFtZXMpOwotc3RydWN0IHA5X2ZjYWxsICpwOV9jcmVhdGVfdG9wZW4odTMyIGZpZCwgdTggbW9kZSk7Ci1zdHJ1Y3QgcDlfZmNhbGwgKnA5X2NyZWF0ZV90Y3JlYXRlKHUzMiBmaWQsIGNoYXIgKm5hbWUsIHUzMiBwZXJtLCB1OCBtb2RlLAotCWNoYXIgKmV4dGVuc2lvbiwgaW50IGRvdHUpOwotc3RydWN0IHA5X2ZjYWxsICpwOV9jcmVhdGVfdHJlYWQodTMyIGZpZCwgdTY0IG9mZnNldCwgdTMyIGNvdW50KTsKLXN0cnVjdCBwOV9mY2FsbCAqcDlfY3JlYXRlX3R3cml0ZSh1MzIgZmlkLCB1NjQgb2Zmc2V0LCB1MzIgY291bnQsCi0JY29uc3QgY2hhciAqZGF0YSk7Ci1zdHJ1Y3QgcDlfZmNhbGwgKnA5X2NyZWF0ZV90d3JpdGVfdSh1MzIgZmlkLCB1NjQgb2Zmc2V0LCB1MzIgY291bnQsCi0JY29uc3QgY2hhciBfX3VzZXIgKmRhdGEpOwotc3RydWN0IHA5X2ZjYWxsICpwOV9jcmVhdGVfdGNsdW5rKHUzMiBmaWQpOwotc3RydWN0IHA5X2ZjYWxsICpwOV9jcmVhdGVfdHJlbW92ZSh1MzIgZmlkKTsKLXN0cnVjdCBwOV9mY2FsbCAqcDlfY3JlYXRlX3RzdGF0KHUzMiBmaWQpOwotc3RydWN0IHA5X2ZjYWxsICpwOV9jcmVhdGVfdHdzdGF0KHUzMiBmaWQsIHN0cnVjdCBwOV93c3RhdCAqd3N0YXQsCi0JaW50IGRvdHUpOwotCi1pbnQgcDlfcHJpbnRmY2FsbChjaGFyICpidWYsIGludCBidWZsZW4sIHN0cnVjdCBwOV9mY2FsbCAqZmMsIGludCBkb3R1KTsKIGludCBwOV9lcnJzdHIyZXJybm8oY2hhciAqZXJyc3RyLCBpbnQgbGVuKTsKIAogc3RydWN0IHA5X2lkcG9vbCAqcDlfaWRwb29sX2NyZWF0ZSh2b2lkKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0LzlwL2NsaWVudC5oIGIvaW5jbHVkZS9uZXQvOXAvY2xpZW50LmgKaW5kZXggYzkzNmRkMS4uMWYxN2YzZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvOXAvY2xpZW50LmgKKysrIGIvaW5jbHVkZS9uZXQvOXAvY2xpZW50LmgKQEAgLTI2LDYgKzI2LDg3IEBACiAjaWZuZGVmIE5FVF85UF9DTElFTlRfSAogI2RlZmluZSBORVRfOVBfQ0xJRU5UX0gKIAorLyogTnVtYmVyIG9mIHJlcXVlc3RzIHBlciByb3cgKi8KKyNkZWZpbmUgUDlfUk9XX01BWFRBRyAyNTUKKworLyoqCisgKiBlbnVtIHA5X3RyYW5zX3N0YXR1cyAtIGRpZmZlcmVudCBzdGF0ZXMgb2YgdW5kZXJseWluZyB0cmFuc3BvcnRzCisgKiBAQ29ubmVjdGVkOiB0cmFuc3BvcnQgaXMgY29ubmVjdGVkIGFuZCBoZWFsdGh5CisgKiBARGlzY29ubmVjdGVkOiB0cmFuc3BvcnQgaGFzIGJlZW4gZGlzY29ubmVjdGVkCisgKiBASHVuZzogdHJhbnNwb3J0IGlzIGNvbm5lY3RlZCBieSB3ZWRnZWQKKyAqCisgKiBUaGlzIGVudW1lcmF0aW9uIGRldGFpbHMgdGhlIHZhcmlvdXMgc3RhdGVzIGEgdHJhbnNwb3J0CisgKiBpbnN0YXRpYXRpb24gY2FuIGJlIGluLgorICovCisKK2VudW0gcDlfdHJhbnNfc3RhdHVzIHsKKwlDb25uZWN0ZWQsCisJRGlzY29ubmVjdGVkLAorCUh1bmcsCit9OworCisvKioKKyAqIGVudW0gcDlfcmVxX3N0YXR1c190IC0gdmlydGlvIHJlcXVlc3Qgc3RhdHVzCisgKiBAUkVRX1NUQVRVU19JRExFOiByZXF1ZXN0IHNsb3QgdW51c2VkCisgKiBAUkVRX1NUQVRVU19BTExPQzogcmVxdWVzdCBoYXMgYmVlbiBhbGxvY2F0ZWQgYnV0IG5vdCBzZW50CisgKiBAUkVRX1NUQVRVU19VTlNFTlQ6IHJlcXVlc3Qgd2FpdGluZyB0byBiZSBzZW50CisgKiBAUkVRX1NUQVRVU19TRU5UOiByZXF1ZXN0IHNlbnQgdG8gc2VydmVyCisgKiBAUkVRX1NUQVRVU19GTFNIOiBhIGZsdXNoIGhhcyBiZWVuIHNlbnQgZm9yIHRoaXMgcmVxdWVzdAorICogQFJFUV9TVEFUVVNfUkNWRDogcmVzcG9uc2UgcmVjZWl2ZWQgZnJvbSBzZXJ2ZXIKKyAqIEBSRVFfU1RBVFVTX0ZMU0hEOiByZXF1ZXN0IGhhcyBiZWVuIGZsdXNoZWQKKyAqIEBSRVFfU1RBVFVTX0VSUk9SOiByZXF1ZXN0IGVuY291bnRlcmVkIGFuIGVycm9yIG9uIHRoZSBjbGllbnQgc2lkZQorICoKKyAqIFRoZSBAUkVRX1NUQVRVU19JRExFIHN0YXRlIGlzIHVzZWQgdG8gbWFyayBhIHJlcXVlc3Qgc2xvdCBhcyB1bnVzZWQKKyAqIGJ1dCB1c2UgaXMgYWN0dWFsbHkgdHJhY2tlZCBieSB0aGUgaWRwb29sIHN0cnVjdHVyZSB3aGljaCBoYW5kbGVzIHRhZworICogaWQgYWxsb2NhdGlvbi4KKyAqCisgKi8KKworZW51bSBwOV9yZXFfc3RhdHVzX3QgeworCVJFUV9TVEFUVVNfSURMRSwKKwlSRVFfU1RBVFVTX0FMTE9DLAorCVJFUV9TVEFUVVNfVU5TRU5ULAorCVJFUV9TVEFUVVNfU0VOVCwKKwlSRVFfU1RBVFVTX0ZMU0gsCisJUkVRX1NUQVRVU19SQ1ZELAorCVJFUV9TVEFUVVNfRkxTSEQsCisJUkVRX1NUQVRVU19FUlJPUiwKK307CisKKy8qKgorICogc3RydWN0IHA5X3JlcV90IC0gcmVxdWVzdCBzbG90cworICogQHN0YXR1czogc3RhdHVzIG9mIHRoaXMgcmVxdWVzdCBzbG90CisgKiBAdF9lcnI6IHRyYW5zcG9ydCBlcnJvcgorICogQGZsdXNoX3RhZzogdGFnIG9mIHJlcXVlc3QgYmVpbmcgZmx1c2hlZCAoZm9yIGZsdXNoIHJlcXVlc3RzKQorICogQHdxOiB3YWl0X3F1ZXVlIGZvciB0aGUgY2xpZW50IHRvIGJsb2NrIG9uIGZvciB0aGlzIHJlcXVlc3QKKyAqIEB0YzogdGhlIHJlcXVlc3QgZmNhbGwgc3RydWN0dXJlCisgKiBAcmM6IHRoZSByZXNwb25zZSBmY2FsbCBzdHJ1Y3R1cmUKKyAqIEBhdXg6IHRyYW5zcG9ydCBzcGVjaWZpYyBkYXRhIChwcm92aWRlZCBmb3IgdHJhbnNfZmQgbWlncmF0aW9uKQorICogQHJlcV9saXN0OiBsaW5rIGZvciBoaWdoZXIgbGV2ZWwgb2JqZWN0cyB0byBjaGFpbiByZXF1ZXN0cworICoKKyAqIFRyYW5zcG9ydCB1c2UgYW4gYXJyYXkgdG8gdHJhY2sgb3V0c3RhbmRpbmcgcmVxdWVzdHMKKyAqIGluc3RlYWQgb2YgYSBsaXN0LiAgV2hpbGUgdGhpcyBtYXkgaW5jdXJyIG92ZXJoZWFkIGR1cmluZyBpbml0aWFsCisgKiBhbGxvY2F0aW9uIG9yIGV4cGFuc2lvbiwgaXQgbWFrZXMgcmVxdWVzdCBsb29rdXAgbXVjaCBlYXNpZXIgYXMgdGhlCisgKiB0YWcgaWQgaXMgYSBpbmRleCBpbnRvIGFuIGFycmF5LiAgKFdlIHVzZSB0YWcrMSBzbyB0aGF0IHdlIGNhbiBhY2NvbW9kYXRlCisgKiB0aGUgLTEgdGFnIGZvciB0aGUgVF9WRVJTSU9OIHJlcXVlc3QpLgorICogVGhpcyBhbHNvIGhhcyB0aGUgbmljZSBlZmZlY3Qgb2Ygb25seSBoYXZpbmcgdG8gYWxsb2NhdGUgd2FpdF9xdWV1ZXMKKyAqIG9uY2UsIGluc3RlYWQgb2YgY29uc3RhbnRseSBhbGxvY2F0aW5nIGFuZCBmcmVlaW5nIHRoZW0uICBJdHMgcG9zc2libGUKKyAqIG90aGVyIHJlc291cmNlcyBjb3VsZCBiZW5lZml0IGZyb20gdGhpcyBzY2hlbWUgYXMgd2VsbC4KKyAqCisgKi8KKworc3RydWN0IHA5X3JlcV90IHsKKwlpbnQgc3RhdHVzOworCWludCB0X2VycjsKKwl1MTYgZmx1c2hfdGFnOworCXdhaXRfcXVldWVfaGVhZF90ICp3cTsKKwlzdHJ1Y3QgcDlfZmNhbGwgKnRjOworCXN0cnVjdCBwOV9mY2FsbCAqcmM7CisJdm9pZCAqYXV4OworCisJc3RydWN0IGxpc3RfaGVhZCByZXFfbGlzdDsKK307CisKIC8qKgogICogc3RydWN0IHA5X2NsaWVudCAtIHBlciBjbGllbnQgaW5zdGFuY2Ugc3RhdGUKICAqIEBsb2NrOiBwcm90ZWN0IEBmaWRsaXN0CkBAIC0zNiw5ICsxMTcsMjAgQEAKICAqIEBjb25uOiBjb25uZWN0aW9uIHN0YXRlIGluZm9ybWF0aW9uIHVzZWQgYnkgdHJhbnNfZmQKICAqIEBmaWRwb29sOiBmaWQgaGFuZGxlIGFjY291bnRpbmcgZm9yIHNlc3Npb24KICAqIEBmaWRsaXN0OiBMaXN0IG9mIGFjdGl2ZSBmaWQgaGFuZGxlcworICogQHRhZ3Bvb2wgLSB0cmFuc2FjdGlvbiBpZCBhY2NvdW50aW5nIGZvciBzZXNzaW9uCisgKiBAcmVxcyAtIDJEIGFycmF5IG9mIHJlcXVlc3RzCisgKiBAbWF4X3RhZyAtIGN1cnJlbnQgbWF4aW11bSB0YWcgaWQgYWxsb2NhdGVkCiAgKgogICogVGhlIGNsaWVudCBzdHJ1Y3R1cmUgaXMgdXNlZCB0byBrZWVwIHRyYWNrIG9mIHZhcmlvdXMgcGVyLWNsaWVudAogICogc3RhdGUgdGhhdCBoYXMgYmVlbiBpbnN0YW50aWF0ZWQuCisgKiBJbiBvcmRlciB0byBtaW5pbWl6ZSBwZXItdHJhbnNhY3Rpb24gb3ZlcmhlYWQgd2UgdXNlIGEKKyAqIHNpbXBsZSBhcnJheSB0byBsb29rdXAgcmVxdWVzdHMgaW5zdGVhZCBvZiBhIGhhc2ggdGFibGUKKyAqIG9yIGxpbmtlZCBsaXN0LiAgSW4gb3JkZXIgdG8gc3VwcG9ydCBsYXJnZXIgbnVtYmVyIG9mCisgKiB0cmFuc2FjdGlvbnMsIHdlIG1ha2UgdGhpcyBhIDJEIGFycmF5LCBhbGxvY2F0aW5nIG5ldyByb3dzCisgKiB3aGVuIHdlIG5lZWQgdG8gZ3JvdyB0aGUgdG90YWwgbnVtYmVyIG9mIHRoZSB0cmFuc2FjdGlvbnMuCisgKgorICogRWFjaCByb3cgaXMgMjU2IHJlcXVlc3RzIGFuZCB3ZSdsbCBzdXBwb3J0IHVwIHRvIDI1NiByb3dzIGZvcgorICogYSB0b3RhbCBvZiA2NGsgY29uY3VycmVudCByZXF1ZXN0cyBwZXIgc2Vzc2lvbi4KICAqCiAgKiBCdWdzOiBkdXBsaWNhdGVkIGRhdGEgYW5kIHBvdGVudGlhbGx5IHVubmVjZXNzYXJ5IGVsZW1lbnRzLgogICovCkBAIC00OCwxMSArMTQwLDE2IEBACiAJaW50IG1zaXplOwogCXVuc2lnbmVkIGNoYXIgZG90dTsKIAlzdHJ1Y3QgcDlfdHJhbnNfbW9kdWxlICp0cmFuc19tb2Q7Ci0Jc3RydWN0IHA5X3RyYW5zICp0cmFuczsKKwllbnVtIHA5X3RyYW5zX3N0YXR1cyBzdGF0dXM7CisJdm9pZCAqdHJhbnM7CiAJc3RydWN0IHA5X2Nvbm4gKmNvbm47CiAKIAlzdHJ1Y3QgcDlfaWRwb29sICpmaWRwb29sOwogCXN0cnVjdCBsaXN0X2hlYWQgZmlkbGlzdDsKKworCXN0cnVjdCBwOV9pZHBvb2wgKnRhZ3Bvb2w7CisJc3RydWN0IHA5X3JlcV90ICpyZXFzW1A5X1JPV19NQVhUQUddOworCWludCBtYXhfdGFnOwogfTsKIAogLyoqCkBAIC02NSw4ICsxNjIsNiBAQAogICogQHVpZDogdGhlIG51bWVyaWMgdWlkIG9mIHRoZSBsb2NhbCB1c2VyIHdobyBvd25zIHRoaXMgaGFuZGxlCiAgKiBAYXV4OiB0cmFuc3BvcnQgc3BlY2lmaWMgaW5mb3JtYXRpb24gKHVudXNlZD8pCiAgKiBAcmRpcl9mcG9zOiB0cmFja3Mgb2Zmc2V0IG9mIGZpbGUgcG9zaXRpb24gd2hlbiByZWFkaW5nIGRpcmVjdG9yeSBjb250ZW50cwotICogQHJkaXJfcG9zOiAodW51c2VkPykKLSAqIEByZGlyX2ZjYWxsOiBob2xkcyByZXNwb25zZSBvZiBsYXN0IGRpcmVjdG9yeSByZWFkIHJlcXVlc3QKICAqIEBmbGlzdDogcGVyLWNsaWVudC1pbnN0YW5jZSBmaWQgdHJhY2tpbmcKICAqIEBkbGlzdDogcGVyLWRlbnRyeSBmaWQgdHJhY2tpbmcKICAqCkBAIC04Myw4ICsxNzgsNiBAQAogCXZvaWQgKmF1eDsKIAogCWludCByZGlyX2Zwb3M7Ci0JaW50IHJkaXJfcG9zOwotCXN0cnVjdCBwOV9mY2FsbCAqcmRpcl9mY2FsbDsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGZsaXN0OwogCXN0cnVjdCBsaXN0X2hlYWQgZGxpc3Q7CS8qIGxpc3Qgb2YgYWxsIGZpZHMgYXR0YWNoZWQgdG8gYSBkZW50cnkgKi8KIH07CkBAIC0xMDMsMTUgKzE5NiwxOCBAQAogCQkJCQkJCWNoYXIgKmV4dGVuc2lvbik7CiBpbnQgcDlfY2xpZW50X2NsdW5rKHN0cnVjdCBwOV9maWQgKmZpZCk7CiBpbnQgcDlfY2xpZW50X3JlbW92ZShzdHJ1Y3QgcDlfZmlkICpmaWQpOwotaW50IHA5X2NsaWVudF9yZWFkKHN0cnVjdCBwOV9maWQgKmZpZCwgY2hhciAqZGF0YSwgdTY0IG9mZnNldCwgdTMyIGNvdW50KTsKLWludCBwOV9jbGllbnRfcmVhZG4oc3RydWN0IHA5X2ZpZCAqZmlkLCBjaGFyICpkYXRhLCB1NjQgb2Zmc2V0LCB1MzIgY291bnQpOwotaW50IHA5X2NsaWVudF93cml0ZShzdHJ1Y3QgcDlfZmlkICpmaWQsIGNoYXIgKmRhdGEsIHU2NCBvZmZzZXQsIHUzMiBjb3VudCk7Ci1pbnQgcDlfY2xpZW50X3VyZWFkKHN0cnVjdCBwOV9maWQgKmZpZCwgY2hhciBfX3VzZXIgKmRhdGEsIHU2NCBvZmZzZXQsCi0JCQkJCQkJCXUzMiBjb3VudCk7Ci1pbnQgcDlfY2xpZW50X3V3cml0ZShzdHJ1Y3QgcDlfZmlkICpmaWQsIGNvbnN0IGNoYXIgX191c2VyICpkYXRhLCB1NjQgb2Zmc2V0LAotCQkJCQkJCQl1MzIgY291bnQpOwotc3RydWN0IHA5X3N0YXQgKnA5X2NsaWVudF9zdGF0KHN0cnVjdCBwOV9maWQgKmZpZCk7CitpbnQgcDlfY2xpZW50X3JlYWQoc3RydWN0IHA5X2ZpZCAqZmlkLCBjaGFyICpkYXRhLCBjaGFyIF9fdXNlciAqdWRhdGEsCisJCQkJCQkJdTY0IG9mZnNldCwgdTMyIGNvdW50KTsKK2ludCBwOV9jbGllbnRfd3JpdGUoc3RydWN0IHA5X2ZpZCAqZmlkLCBjaGFyICpkYXRhLCBjb25zdCBjaGFyIF9fdXNlciAqdWRhdGEsCisJCQkJCQkJdTY0IG9mZnNldCwgdTMyIGNvdW50KTsKK3N0cnVjdCBwOV93c3RhdCAqcDlfY2xpZW50X3N0YXQoc3RydWN0IHA5X2ZpZCAqZmlkKTsKIGludCBwOV9jbGllbnRfd3N0YXQoc3RydWN0IHA5X2ZpZCAqZmlkLCBzdHJ1Y3QgcDlfd3N0YXQgKndzdCk7Ci1zdHJ1Y3QgcDlfc3RhdCAqcDlfY2xpZW50X2RpcnJlYWQoc3RydWN0IHA5X2ZpZCAqZmlkLCB1NjQgb2Zmc2V0KTsKKworc3RydWN0IHA5X3JlcV90ICpwOV90YWdfbG9va3VwKHN0cnVjdCBwOV9jbGllbnQgKiwgdTE2KTsKK3ZvaWQgcDlfY2xpZW50X2NiKHN0cnVjdCBwOV9jbGllbnQgKmMsIHN0cnVjdCBwOV9yZXFfdCAqcmVxKTsKKworaW50IHA5c3RhdF9yZWFkKGNoYXIgKiwgaW50LCBzdHJ1Y3QgcDlfd3N0YXQgKiwgaW50KTsKK3ZvaWQgcDlzdGF0X2ZyZWUoc3RydWN0IHA5X3dzdGF0ICopOworCiAKICNlbmRpZiAvKiBORVRfOVBfQ0xJRU5UX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0LzlwL3RyYW5zcG9ydC5oIGIvaW5jbHVkZS9uZXQvOXAvdHJhbnNwb3J0LmgKaW5kZXggM2NhNzM3MS4uNmQ1ODg2ZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvOXAvdHJhbnNwb3J0LmgKKysrIGIvaW5jbHVkZS9uZXQvOXAvdHJhbnNwb3J0LmgKQEAgLTI2LDUyICsyNiw2IEBACiAjaWZuZGVmIE5FVF85UF9UUkFOU1BPUlRfSAogI2RlZmluZSBORVRfOVBfVFJBTlNQT1JUX0gKIAotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotCi0vKioKLSAqIGVudW0gcDlfdHJhbnNfc3RhdHVzIC0gZGlmZmVyZW50IHN0YXRlcyBvZiB1bmRlcmx5aW5nIHRyYW5zcG9ydHMKLSAqIEBDb25uZWN0ZWQ6IHRyYW5zcG9ydCBpcyBjb25uZWN0ZWQgYW5kIGhlYWx0aHkKLSAqIEBEaXNjb25uZWN0ZWQ6IHRyYW5zcG9ydCBoYXMgYmVlbiBkaXNjb25uZWN0ZWQKLSAqIEBIdW5nOiB0cmFuc3BvcnQgaXMgY29ubmVjdGVkIGJ5IHdlZGdlZAotICoKLSAqIFRoaXMgZW51bWVyYXRpb24gZGV0YWlscyB0aGUgdmFyaW91cyBzdGF0ZXMgYSB0cmFuc3BvcnQKLSAqIGluc3RhdGlhdGlvbiBjYW4gYmUgaW4uCi0gKi8KLQotZW51bSBwOV90cmFuc19zdGF0dXMgewotCUNvbm5lY3RlZCwKLQlEaXNjb25uZWN0ZWQsCi0JSHVuZywKLX07Ci0KLS8qKgotICogc3RydWN0IHA5X3RyYW5zIC0gcGVyLXRyYW5zcG9ydCBzdGF0ZSBhbmQgQVBJCi0gKiBAc3RhdHVzOiB0cmFuc3BvcnQgJnA5X3RyYW5zX3N0YXR1cwotICogQG1zaXplOiBuZWdvdGlhdGVkIG1heGltdW0gcGFja2V0IHNpemUgKGR1cGxpY2F0ZSBmcm9tIGNsaWVudCkKLSAqIEBleHRlbmRlZDogbmVnb3RpYXRlZCBwcm90b2NvbCBleHRlbnNpb25zIChkdXBsaWNhdGUgZnJvbSBjbGllbnQpCi0gKiBAcHJpdjogdHJhbnNwb3J0IHByaXZhdGUgZGF0YQotICogQGNsb3NlOiBtZW1iZXIgZnVuY3Rpb24gdG8gZGlzY29ubmVjdCBhbmQgY2xvc2UgdGhlIHRyYW5zcG9ydAotICogQHJwYzogbWVtYmVyIGZ1bmN0aW9uIHRvIGlzc3VlIGEgcmVxdWVzdCB0byB0aGUgdHJhbnNwb3J0Ci0gKgotICogVGhpcyBpcyB0aGUgYmFzaWMgQVBJIGZvciBhIHRyYW5zcG9ydCBpbnN0YW5jZS4gIEl0IGlzIHVzZWQgYXMKLSAqIGEgaGFuZGxlIGJ5IHRoZSBjbGllbnQgdG8gaXNzdWUgcmVxdWVzdHMuICBUaGlzIGludGVyZmFjZSBpcyBjdXJyZW50bHkKLSAqIGluIGZsdXggZHVyaW5nIHJlb3JnYW5pemF0aW9uLgotICoKLSAqIEJ1Z3M6IHRoZXJlIGlzIGxvdHMgb2YgZHVwbGljYXRlZCBkYXRhIGhlcmUgYW5kIGl0cyBub3QgY2xlYXIgdGhhdAotICogdGhlIG1lbWJlciBmdW5jdGlvbnMgbmVlZCB0byBiZSBwZXItaW5zdGFuY2UgdmVyc3VzIHBlciB0cmFuc3BvcnQKLSAqIG1vZHVsZS4KLSAqLwotCi1zdHJ1Y3QgcDlfdHJhbnMgewotCWVudW0gcDlfdHJhbnNfc3RhdHVzIHN0YXR1czsKLQlpbnQgbXNpemU7Ci0JdW5zaWduZWQgY2hhciBleHRlbmRlZDsKLQl2b2lkICpwcml2OwotCXZvaWQgKCpjbG9zZSkgKHN0cnVjdCBwOV90cmFucyAqKTsKLQlpbnQgKCpycGMpIChzdHJ1Y3QgcDlfdHJhbnMgKnQsIHN0cnVjdCBwOV9mY2FsbCAqdGMsCi0JCQkJCQkJc3RydWN0IHA5X2ZjYWxsICoqcmMpOwotfTsKLQogLyoqCiAgKiBzdHJ1Y3QgcDlfdHJhbnNfbW9kdWxlIC0gdHJhbnNwb3J0IG1vZHVsZSBpbnRlcmZhY2UKICAqIEBsaXN0OiB1c2VkIHRvIG1haW50YWluIGEgbGlzdCBvZiBjdXJyZW50bHkgYXZhaWxhYmxlIHRyYW5zcG9ydHMKQEAgLTc5LDEyICszMywxNCBAQAogICogQG1heHNpemU6IHRyYW5zcG9ydCBwcm92aWRlZCBtYXhpbXVtIHBhY2tldCBzaXplCiAgKiBAZGVmOiBzZXQgaWYgdGhpcyB0cmFuc3BvcnQgc2hvdWxkIGJlIGNvbnNpZGVyZWQgdGhlIGRlZmF1bHQKICAqIEBjcmVhdGU6IG1lbWJlciBmdW5jdGlvbiB0byBjcmVhdGUgYSBuZXcgY29ubmVjdGlvbiBvbiB0aGlzIHRyYW5zcG9ydAorICogQHJlcXVlc3Q6IG1lbWJlciBmdW5jdGlvbiB0byBpc3N1ZSBhIHJlcXVlc3QgdG8gdGhlIHRyYW5zcG9ydAorICogQGNhbmNlbDogbWVtYmVyIGZ1bmN0aW9uIHRvIGNhbmNlbCBhIHJlcXVlc3QgKGlmIGl0IGhhc24ndCBiZWVuIHNlbnQpCiAgKgogICogVGhpcyBpcyB0aGUgYmFzaWMgQVBJIGZvciBhIHRyYW5zcG9ydCBtb2R1bGUgd2hpY2ggaXMgcmVnaXN0ZXJlZCBieSB0aGUKICAqIHRyYW5zcG9ydCBtb2R1bGUgd2l0aCB0aGUgOVAgY29yZSBuZXR3b3JrIG1vZHVsZSBhbmQgdXNlZCBieSB0aGUgY2xpZW50CiAgKiB0byBpbnN0YW50aWF0ZSBhIG5ldyBjb25uZWN0aW9uIG9uIGEgdHJhbnNwb3J0LgogICoKLSAqIEJ1Z3M6IHRoZSB0cmFuc3BvcnQgbW9kdWxlIGxpc3QgaXNuJ3QgcHJvdGVjdGVkLgorICogQlVHUzogdGhlIHRyYW5zcG9ydCBtb2R1bGUgbGlzdCBpc24ndCBwcm90ZWN0ZWQuCiAgKi8KIAogc3RydWN0IHA5X3RyYW5zX21vZHVsZSB7CkBAIC05Miw4ICs0OCwxMSBAQAogCWNoYXIgKm5hbWU7CQkvKiBuYW1lIG9mIHRyYW5zcG9ydCAqLwogCWludCBtYXhzaXplOwkJLyogbWF4IG1lc3NhZ2Ugc2l6ZSBvZiB0cmFuc3BvcnQgKi8KIAlpbnQgZGVmOwkJLyogdGhpcyB0cmFuc3BvcnQgc2hvdWxkIGJlIGRlZmF1bHQgKi8KLQlzdHJ1Y3QgcDlfdHJhbnMgKiAoKmNyZWF0ZSkoY29uc3QgY2hhciAqLCBjaGFyICosIGludCwgdW5zaWduZWQgY2hhcik7CiAJc3RydWN0IG1vZHVsZSAqb3duZXI7CisJaW50ICgqY3JlYXRlKShzdHJ1Y3QgcDlfY2xpZW50ICosIGNvbnN0IGNoYXIgKiwgY2hhciAqKTsKKwl2b2lkICgqY2xvc2UpIChzdHJ1Y3QgcDlfY2xpZW50ICopOworCWludCAoKnJlcXVlc3QpIChzdHJ1Y3QgcDlfY2xpZW50ICosIHN0cnVjdCBwOV9yZXFfdCAqcmVxKTsKKwlpbnQgKCpjYW5jZWwpIChzdHJ1Y3QgcDlfY2xpZW50ICosIHN0cnVjdCBwOV9yZXFfdCAqcmVxKTsKIH07CiAKIHZvaWQgdjlmc19yZWdpc3Rlcl90cmFucyhzdHJ1Y3QgcDlfdHJhbnNfbW9kdWxlICptKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2JsdWV0b290aC9ibHVldG9vdGguaCBiL2luY2x1ZGUvbmV0L2JsdWV0b290aC9ibHVldG9vdGguaAppbmRleCA2Zjg0MThiLi45OTZkMTJkIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9ibHVldG9vdGgvYmx1ZXRvb3RoLmgKKysrIGIvaW5jbHVkZS9uZXQvYmx1ZXRvb3RoL2JsdWV0b290aC5oCkBAIC01NCw4ICs1NCw4IEBACiAjZGVmaW5lIFNPTF9SRkNPTU0JMTgKIAogI2RlZmluZSBCVF9JTkZPKGZtdCwgYXJnLi4uKSBwcmludGsoS0VSTl9JTkZPICJCbHVldG9vdGg6ICIgZm10ICJcbiIgLCAjIyBhcmcpCi0jZGVmaW5lIEJUX0RCRyhmbXQsIGFyZy4uLikgIHByaW50ayhLRVJOX0lORk8gIiVzOiAiIGZtdCAiXG4iICwgX19GVU5DVElPTl9fICwgIyMgYXJnKQotI2RlZmluZSBCVF9FUlIoZm10LCBhcmcuLi4pICBwcmludGsoS0VSTl9FUlIgICIlczogIiBmbXQgIlxuIiAsIF9fRlVOQ1RJT05fXyAsICMjIGFyZykKKyNkZWZpbmUgQlRfREJHKGZtdCwgYXJnLi4uKSAgcHJpbnRrKEtFUk5fSU5GTyAiJXM6ICIgZm10ICJcbiIgLCBfX2Z1bmNfXyAsICMjIGFyZykKKyNkZWZpbmUgQlRfRVJSKGZtdCwgYXJnLi4uKSAgcHJpbnRrKEtFUk5fRVJSICAiJXM6ICIgZm10ICJcbiIgLCBfX2Z1bmNfXyAsICMjIGFyZykKIAogLyogQ29ubmVjdGlvbiBhbmQgc29ja2V0IHN0YXRlcyAqLwogZW51bSB7CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9jaXBzb19pcHY0LmggYi9pbmNsdWRlL25ldC9jaXBzb19pcHY0LmgKaW5kZXggYTZiYjk0NS4uOTkwOTc3NCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvY2lwc29faXB2NC5oCisrKyBiL2luY2x1ZGUvbmV0L2NpcHNvX2lwdjQuaApAQCAtNDAsMTEgKzQwLDEyIEBACiAjaW5jbHVkZSA8bGludXgvbmV0Lmg+CiAjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CiAjaW5jbHVkZSA8bmV0L25ldGxhYmVsLmg+CisjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgogCiAvKiBrbm93biBkb2kgdmFsdWVzICovCiAjZGVmaW5lIENJUFNPX1Y0X0RPSV9VTktOT1dOICAgICAgICAgIDB4MDAwMDAwMDAKIAotLyogdGFnIHR5cGVzICovCisvKiBzdGFuZGFyZCB0YWcgdHlwZXMgKi8KICNkZWZpbmUgQ0lQU09fVjRfVEFHX0lOVkFMSUQgICAgICAgICAgMAogI2RlZmluZSBDSVBTT19WNF9UQUdfUkJJVE1BUCAgICAgICAgICAxCiAjZGVmaW5lIENJUFNPX1Y0X1RBR19FTlVNICAgICAgICAgICAgIDIKQEAgLTUyLDEwICs1MywxNCBAQAogI2RlZmluZSBDSVBTT19WNF9UQUdfUEJJVE1BUCAgICAgICAgICA2CiAjZGVmaW5lIENJUFNPX1Y0X1RBR19GUkVFRk9STSAgICAgICAgIDcKIAorLyogbm9uLXN0YW5kYXJkIHRhZyB0eXBlcyAodGFncyA+IDEyNykgKi8KKyNkZWZpbmUgQ0lQU09fVjRfVEFHX0xPQ0FMICAgICAgICAgICAgMTI4CisKIC8qIGRvaSBtYXBwaW5nIHR5cGVzICovCiAjZGVmaW5lIENJUFNPX1Y0X01BUF9VTktOT1dOICAgICAgICAgIDAKLSNkZWZpbmUgQ0lQU09fVjRfTUFQX1NURCAgICAgICAgICAgICAgMQorI2RlZmluZSBDSVBTT19WNF9NQVBfVFJBTlMgICAgICAgICAgICAxCiAjZGVmaW5lIENJUFNPX1Y0X01BUF9QQVNTICAgICAgICAgICAgIDIKKyNkZWZpbmUgQ0lQU09fVjRfTUFQX0xPQ0FMICAgICAgICAgICAgMwogCiAvKiBsaW1pdHMgKi8KICNkZWZpbmUgQ0lQU09fVjRfTUFYX1JFTV9MVkxTICAgICAgICAgMjU1CkBAIC03OSwxMCArODQsOSBAQAogCX0gbWFwOwogCXU4IHRhZ3NbQ0lQU09fVjRfVEFHX01BWENOVF07CiAKLQl1MzIgdmFsaWQ7CisJYXRvbWljX3QgcmVmY291bnQ7CiAJc3RydWN0IGxpc3RfaGVhZCBsaXN0OwogCXN0cnVjdCByY3VfaGVhZCByY3U7Ci0Jc3RydWN0IGxpc3RfaGVhZCBkb21fbGlzdDsKIH07CiAKIC8qIFN0YW5kYXJkIENJUFNPIG1hcHBpbmcgdGFibGUgKi8KQEAgLTEyOCwyNSArMTMyLDI2IEBACiAKICNpZmRlZiBDT05GSUdfTkVUTEFCRUwKIGludCBjaXBzb192NF9kb2lfYWRkKHN0cnVjdCBjaXBzb192NF9kb2kgKmRvaV9kZWYpOwotaW50IGNpcHNvX3Y0X2RvaV9yZW1vdmUodTMyIGRvaSwKLQkJCXN0cnVjdCBuZXRsYmxfYXVkaXQgKmF1ZGl0X2luZm8sCi0JCQl2b2lkICgqY2FsbGJhY2spIChzdHJ1Y3QgcmN1X2hlYWQgKiBoZWFkKSk7Cit2b2lkIGNpcHNvX3Y0X2RvaV9mcmVlKHN0cnVjdCBjaXBzb192NF9kb2kgKmRvaV9kZWYpOworaW50IGNpcHNvX3Y0X2RvaV9yZW1vdmUodTMyIGRvaSwgc3RydWN0IG5ldGxibF9hdWRpdCAqYXVkaXRfaW5mbyk7CiBzdHJ1Y3QgY2lwc29fdjRfZG9pICpjaXBzb192NF9kb2lfZ2V0ZGVmKHUzMiBkb2kpOwordm9pZCBjaXBzb192NF9kb2lfcHV0ZGVmKHN0cnVjdCBjaXBzb192NF9kb2kgKmRvaV9kZWYpOwogaW50IGNpcHNvX3Y0X2RvaV93YWxrKHUzMiAqc2tpcF9jbnQsCiAJCSAgICAgaW50ICgqY2FsbGJhY2spIChzdHJ1Y3QgY2lwc29fdjRfZG9pICpkb2lfZGVmLCB2b2lkICphcmcpLAogCSAgICAgICAgICAgICB2b2lkICpjYl9hcmcpOwotaW50IGNpcHNvX3Y0X2RvaV9kb21oc2hfYWRkKHN0cnVjdCBjaXBzb192NF9kb2kgKmRvaV9kZWYsIGNvbnN0IGNoYXIgKmRvbWFpbik7Ci1pbnQgY2lwc29fdjRfZG9pX2RvbWhzaF9yZW1vdmUoc3RydWN0IGNpcHNvX3Y0X2RvaSAqZG9pX2RlZiwKLQkJCSAgICAgICBjb25zdCBjaGFyICpkb21haW4pOwogI2Vsc2UKIHN0YXRpYyBpbmxpbmUgaW50IGNpcHNvX3Y0X2RvaV9hZGQoc3RydWN0IGNpcHNvX3Y0X2RvaSAqZG9pX2RlZikKIHsKIAlyZXR1cm4gLUVOT1NZUzsKIH0KIAorc3RhdGljIGlubGluZSB2b2lkIGNpcHNvX3Y0X2RvaV9mcmVlKHN0cnVjdCBjaXBzb192NF9kb2kgKmRvaV9kZWYpCit7CisJcmV0dXJuOworfQorCiBzdGF0aWMgaW5saW5lIGludCBjaXBzb192NF9kb2lfcmVtb3ZlKHUzMiBkb2ksCi0JCQkJICAgIHN0cnVjdCBuZXRsYmxfYXVkaXQgKmF1ZGl0X2luZm8sCi0JCQkJICAgIHZvaWQgKCpjYWxsYmFjaykgKHN0cnVjdCByY3VfaGVhZCAqIGhlYWQpKQorCQkJCSAgICAgIHN0cnVjdCBuZXRsYmxfYXVkaXQgKmF1ZGl0X2luZm8pCiB7CiAJcmV0dXJuIDA7CiB9CkBAIC0yMDYsMTAgKzIxMSwxNSBAQAogaW50IGNpcHNvX3Y0X3NvY2tfc2V0YXR0cihzdHJ1Y3Qgc29jayAqc2ssCiAJCQkgIGNvbnN0IHN0cnVjdCBjaXBzb192NF9kb2kgKmRvaV9kZWYsCiAJCQkgIGNvbnN0IHN0cnVjdCBuZXRsYmxfbHNtX3NlY2F0dHIgKnNlY2F0dHIpOwordm9pZCBjaXBzb192NF9zb2NrX2RlbGF0dHIoc3RydWN0IHNvY2sgKnNrKTsKIGludCBjaXBzb192NF9zb2NrX2dldGF0dHIoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbmV0bGJsX2xzbV9zZWNhdHRyICpzZWNhdHRyKTsKK2ludCBjaXBzb192NF9za2J1ZmZfc2V0YXR0cihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJICAgIGNvbnN0IHN0cnVjdCBjaXBzb192NF9kb2kgKmRvaV9kZWYsCisJCQkgICAgY29uc3Qgc3RydWN0IG5ldGxibF9sc21fc2VjYXR0ciAqc2VjYXR0cik7CitpbnQgY2lwc29fdjRfc2tidWZmX2RlbGF0dHIoc3RydWN0IHNrX2J1ZmYgKnNrYik7CiBpbnQgY2lwc29fdjRfc2tidWZmX2dldGF0dHIoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCSAgICBzdHJ1Y3QgbmV0bGJsX2xzbV9zZWNhdHRyICpzZWNhdHRyKTsKLWludCBjaXBzb192NF92YWxpZGF0ZSh1bnNpZ25lZCBjaGFyICoqb3B0aW9uKTsKK2ludCBjaXBzb192NF92YWxpZGF0ZShjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBjaGFyICoqb3B0aW9uKTsKICNlbHNlCiBzdGF0aWMgaW5saW5lIHZvaWQgY2lwc29fdjRfZXJyb3Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCQkgIGludCBlcnJvciwKQEAgLTIyNSwxOSArMjM1LDM2IEBACiAJcmV0dXJuIC1FTk9TWVM7CiB9CiAKK3N0YXRpYyBpbmxpbmUgdm9pZCBjaXBzb192NF9zb2NrX2RlbGF0dHIoc3RydWN0IHNvY2sgKnNrKQoreworfQorCiBzdGF0aWMgaW5saW5lIGludCBjaXBzb192NF9zb2NrX2dldGF0dHIoc3RydWN0IHNvY2sgKnNrLAogCQkJCQlzdHJ1Y3QgbmV0bGJsX2xzbV9zZWNhdHRyICpzZWNhdHRyKQogewogCXJldHVybiAtRU5PU1lTOwogfQogCitzdGF0aWMgaW5saW5lIGludCBjaXBzb192NF9za2J1ZmZfc2V0YXR0cihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCSAgICAgIGNvbnN0IHN0cnVjdCBjaXBzb192NF9kb2kgKmRvaV9kZWYsCisJCQkJICAgICAgY29uc3Qgc3RydWN0IG5ldGxibF9sc21fc2VjYXR0ciAqc2VjYXR0cikKK3sKKwlyZXR1cm4gLUVOT1NZUzsKK30KKworc3RhdGljIGlubGluZSBpbnQgY2lwc29fdjRfc2tidWZmX2RlbGF0dHIoc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlyZXR1cm4gLUVOT1NZUzsKK30KKwogc3RhdGljIGlubGluZSBpbnQgY2lwc29fdjRfc2tidWZmX2dldGF0dHIoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCQkJICBzdHJ1Y3QgbmV0bGJsX2xzbV9zZWNhdHRyICpzZWNhdHRyKQogewogCXJldHVybiAtRU5PU1lTOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBjaXBzb192NF92YWxpZGF0ZSh1bnNpZ25lZCBjaGFyICoqb3B0aW9uKQorc3RhdGljIGlubGluZSBpbnQgY2lwc29fdjRfdmFsaWRhdGUoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkgICAgdW5zaWduZWQgY2hhciAqKm9wdGlvbikKIHsKIAlyZXR1cm4gLUVOT1NZUzsKIH0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2llZWU4MDIxMS5oIGIvaW5jbHVkZS9uZXQvaWVlZTgwMjExLmgKaW5kZXggNjA0ODU3OS4uOTNhNTZkZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvaWVlZTgwMjExLmgKKysrIGIvaW5jbHVkZS9uZXQvaWVlZTgwMjExLmgKQEAgLTExNCw3ICsxMTQsNyBAQAogI2RlZmluZSBJRUVFODAyMTFfREVCVUcobGV2ZWwsIGZtdCwgYXJncy4uLikgXAogZG8geyBpZiAoaWVlZTgwMjExX2RlYnVnX2xldmVsICYgKGxldmVsKSkgXAogICBwcmludGsoS0VSTl9ERUJVRyAiaWVlZTgwMjExOiAlYyAlcyAiIGZtdCwgXAotICAgICAgICAgaW5faW50ZXJydXB0KCkgPyAnSScgOiAnVScsIF9fRlVOQ1RJT05fXyAsICMjIGFyZ3MpOyB9IHdoaWxlICgwKQorICAgICAgICAgaW5faW50ZXJydXB0KCkgPyAnSScgOiAnVScsIF9fZnVuY19fICwgIyMgYXJncyk7IH0gd2hpbGUgKDApCiBzdGF0aWMgaW5saW5lIGJvb2wgaWVlZTgwMjExX3JhdGVsaW1pdF9kZWJ1Zyh1MzIgbGV2ZWwpCiB7CiAJcmV0dXJuIChpZWVlODAyMTFfZGVidWdfbGV2ZWwgJiBsZXZlbCkgJiYgbmV0X3JhdGVsaW1pdCgpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaXAuaCBiL2luY2x1ZGUvbmV0L2lwLmgKaW5kZXggMWNiY2NhZi4uYmMwMjZlYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvaXAuaAorKysgYi9pbmNsdWRlL25ldC9pcC5oCkBAIC0zOTYsNyArMzk2LDcgQEAKIGludCBpcHY0X2RvaW50X2FuZF9mbHVzaChjdGxfdGFibGUgKmN0bCwgaW50IHdyaXRlLAogCQkJIHN0cnVjdCBmaWxlKiBmaWxwLCB2b2lkIF9fdXNlciAqYnVmZmVyLAogCQkJIHNpemVfdCAqbGVucCwgbG9mZl90ICpwcG9zKTsKLWludCBpcHY0X2RvaW50X2FuZF9mbHVzaF9zdHJhdGVneShjdGxfdGFibGUgKnRhYmxlLCBpbnQgX191c2VyICpuYW1lLCBpbnQgbmxlbiwKK2ludCBpcHY0X2RvaW50X2FuZF9mbHVzaF9zdHJhdGVneShjdGxfdGFibGUgKnRhYmxlLAogCQkJCSAgdm9pZCBfX3VzZXIgKm9sZHZhbCwgc2l6ZV90IF9fdXNlciAqb2xkbGVucCwKIAkJCQkgIHZvaWQgX191c2VyICpuZXd2YWwsIHNpemVfdCBuZXdsZW4pOwogI2lmZGVmIENPTkZJR19QUk9DX0ZTCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pcF92cy5oIGIvaW5jbHVkZS9uZXQvaXBfdnMuaAppbmRleCAwYjIwNzFkLi5mZTlmY2Y3IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9pcF92cy5oCisrKyBiL2luY2x1ZGUvbmV0L2lwX3ZzLmgKQEAgLTE2NSwxMyArMTY1LDEzIEBACiAgICAgZG8gewkJCQkJCQkJXAogCSAgICBpZiAobGV2ZWwgPD0gaXBfdnNfZ2V0X2RlYnVnX2xldmVsKCkpCQkJXAogCQkgICAgcHJpbnRrKEtFUk5fREVCVUcgIkVudGVyOiAlcywgJXMgbGluZSAlaVxuIiwJXAotCQkJICAgX19GVU5DVElPTl9fLCBfX0ZJTEVfXywgX19MSU5FX18pOwkJXAorCQkJICAgX19mdW5jX18sIF9fRklMRV9fLCBfX0xJTkVfXyk7CQlcCiAgICAgfSB3aGlsZSAoMCkKICNkZWZpbmUgTGVhdmVGdW5jdGlvbihsZXZlbCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKIAkgICAgaWYgKGxldmVsIDw9IGlwX3ZzX2dldF9kZWJ1Z19sZXZlbCgpKSAgICAgICAgICAgICAgICAgICAgICAgXAogCQkJcHJpbnRrKEtFUk5fREVCVUcgIkxlYXZlOiAlcywgJXMgbGluZSAlaVxuIiwgICAgXAotCQkJICAgICAgIF9fRlVOQ1RJT05fXywgX19GSUxFX18sIF9fTElORV9fKTsgICAgICAgXAorCQkJICAgICAgIF9fZnVuY19fLCBfX0ZJTEVfXywgX19MSU5FX18pOyAgICAgICBcCiAgICAgfSB3aGlsZSAoMCkKICNlbHNlCiAjZGVmaW5lIEVudGVyRnVuY3Rpb24obGV2ZWwpICAgZG8ge30gd2hpbGUgKDApCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pcmRhL2lyZGEuaCBiL2luY2x1ZGUvbmV0L2lyZGEvaXJkYS5oCmluZGV4IDA4Mzg3NTUuLjdlNTgyMDYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2lyZGEvaXJkYS5oCisrKyBiL2luY2x1ZGUvbmV0L2lyZGEvaXJkYS5oCkBAIC03Miw3ICs3Miw3IEBACiAjZGVmaW5lIElSREFfQVNTRVJUKGV4cHIsIGZ1bmMpIFwKIGRvIHsgaWYoIShleHByKSkgeyBcCiAJcHJpbnRrKCAiQXNzZXJ0aW9uIGZhaWxlZCEgJXM6JXM6JWQgJXNcbiIsIFwKLQkJX19GSUxFX18sX19GVU5DVElPTl9fLF9fTElORV9fLCgjZXhwcikgKTsgXAorCQlfX0ZJTEVfXyxfX2Z1bmNfXyxfX0xJTkVfXywoI2V4cHIpICk7IFwKIAlmdW5jIH0gfSB3aGlsZSAoMCkKICNkZWZpbmUgSVJEQV9BU1NFUlRfTEFCRUwobGFiZWwpCWxhYmVsCiAjZWxzZQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbWFjODAyMTEuaCBiL2luY2x1ZGUvbmV0L21hYzgwMjExLmgKaW5kZXggNTYxN2ExNi4uZDg2MTE5NyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvbWFjODAyMTEuaAorKysgYi9pbmNsdWRlL25ldC9tYWM4MDIxMS5oCkBAIC02NDUsNyArNjQ1LDggQEAKICAqIAktIFRlbXBvcmFsIEVuY3J5cHRpb24gS2V5ICgxMjggYml0cykKICAqIAktIFRlbXBvcmFsIEF1dGhlbnRpY2F0b3IgVHggTUlDIEtleSAoNjQgYml0cykKICAqIAktIFRlbXBvcmFsIEF1dGhlbnRpY2F0b3IgUnggTUlDIEtleSAoNjQgYml0cykKLSAqCisgKiBAaWN2X2xlbjogRklYTUUKKyAqIEBpdl9sZW46IEZJWE1FCiAgKi8KIHN0cnVjdCBpZWVlODAyMTFfa2V5X2NvbmYgewogCWVudW0gaWVlZTgwMjExX2tleV9hbGcgYWxnOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbmRpc2MuaCBiL2luY2x1ZGUvbmV0L25kaXNjLmgKaW5kZXggYTAxYjdjNC4uMTFkZDAxMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvbmRpc2MuaAorKysgYi9pbmNsdWRlL25ldC9uZGlzYy5oCkBAIC0xMjksOSArMTI5LDggQEAKIAkJCQkJCQkgICB2b2lkIF9fdXNlciAqYnVmZmVyLAogCQkJCQkJCSAgIHNpemVfdCAqbGVucCwKIAkJCQkJCQkgICBsb2ZmX3QgKnBwb3MpOwotaW50IG5kaXNjX2lmaW5mb19zeXNjdGxfc3RyYXRlZ3koY3RsX3RhYmxlICpjdGwsIGludCBfX3VzZXIgKm5hbWUsCi0JCQkJIGludCBubGVuLCB2b2lkIF9fdXNlciAqb2xkdmFsLAotCQkJCSBzaXplX3QgX191c2VyICpvbGRsZW5wLAoraW50IG5kaXNjX2lmaW5mb19zeXNjdGxfc3RyYXRlZ3koY3RsX3RhYmxlICpjdGwsCisJCQkJIHZvaWQgX191c2VyICpvbGR2YWwsIHNpemVfdCBfX3VzZXIgKm9sZGxlbnAsCiAJCQkJIHZvaWQgX191c2VyICpuZXd2YWwsIHNpemVfdCBuZXdsZW4pOwogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9uYXRfY29yZS5oIGIvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX25hdF9jb3JlLmgKaW5kZXggZjI5ZWViOS4uNTg2ODQwNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX25hdF9jb3JlLmgKKysrIGIvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX25hdF9jb3JlLmgKQEAgLTI1LDQgKzI1LDEyIEBACiAJZWxzZQogCQlyZXR1cm4gdGVzdF9iaXQoSVBTX0RTVF9OQVRfRE9ORV9CSVQsICZjdC0+c3RhdHVzKTsKIH0KKworc3RydWN0IG5sYXR0cjsKKworZXh0ZXJuIGludAorKCpuZm5ldGxpbmtfcGFyc2VfbmF0X3NldHVwX2hvb2spKHN0cnVjdCBuZl9jb25uICpjdCwKKwkJCQkgIGVudW0gbmZfbmF0X21hbmlwX3R5cGUgbWFuaXAsCisJCQkJICBzdHJ1Y3QgbmxhdHRyICphdHRyKTsKKwogI2VuZGlmIC8qIF9ORl9OQVRfQ09SRV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9uZXRsYWJlbC5oIGIvaW5jbHVkZS9uZXQvbmV0bGFiZWwuaAppbmRleCBlNGQyZDZiLi4xN2M0NDJhIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9uZXRsYWJlbC5oCisrKyBiL2luY2x1ZGUvbmV0L25ldGxhYmVsLmgKQEAgLTksNyArOSw3IEBACiAgKi8KIAogLyoKLSAqIChjKSBDb3B5cmlnaHQgSGV3bGV0dC1QYWNrYXJkIERldmVsb3BtZW50IENvbXBhbnksIEwuUC4sIDIwMDYKKyAqIChjKSBDb3B5cmlnaHQgSGV3bGV0dC1QYWNrYXJkIERldmVsb3BtZW50IENvbXBhbnksIEwuUC4sIDIwMDYsIDIwMDgKICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgIHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CkBAIC03Miw4ICs3MiwxMCBAQAogLyogTmV0TGFiZWwgTkVUTElOSyBwcm90b2NvbCB2ZXJzaW9uCiAgKiAgMTogaW5pdGlhbCB2ZXJzaW9uCiAgKiAgMjogYWRkZWQgc3RhdGljIGxhYmVscyBmb3IgdW5sYWJlbGVkIGNvbm5lY3Rpb25zCisgKiAgMzogbmV0d29yayBzZWxlY3RvcnMgYWRkZWQgdG8gdGhlIE5ldExhYmVsL0xTTSBkb21haW4gbWFwcGluZyBhbmQgdGhlCisgKiAgICAgQ0lQU09fVjRfTUFQX0xPQ0FMIENJUFNPIG1hcHBpbmcgd2FzIGFkZGVkCiAgKi8KLSNkZWZpbmUgTkVUTEJMX1BST1RPX1ZFUlNJT04gICAgICAgICAgICAyCisjZGVmaW5lIE5FVExCTF9QUk9UT19WRVJTSU9OICAgICAgICAgICAgMwogCiAvKiBOZXRMYWJlbCBORVRMSU5LIHR5cGVzL2ZhbWlsaWVzICovCiAjZGVmaW5lIE5FVExCTF9OTFRZUEVfTk9ORSAgICAgICAgICAgICAgMApAQCAtODcsNiArODksOCBAQAogI2RlZmluZSBORVRMQkxfTkxUWVBFX0NJUFNPVjZfTkFNRSAgICAgICJOTEJMX0NJUFNPdjYiCiAjZGVmaW5lIE5FVExCTF9OTFRZUEVfVU5MQUJFTEVEICAgICAgICAgNQogI2RlZmluZSBORVRMQkxfTkxUWVBFX1VOTEFCRUxFRF9OQU1FICAgICJOTEJMX1VOTEJMIgorI2RlZmluZSBORVRMQkxfTkxUWVBFX0FERFJTRUxFQ1QgICAgICAgIDYKKyNkZWZpbmUgTkVUTEJMX05MVFlQRV9BRERSU0VMRUNUX05BTUUgICAiTkxCTF9BRFJTRUwiCiAKIC8qCiAgKiBOZXRMYWJlbCAtIEtlcm5lbCBBUEkgZm9yIGFjY2Vzc2luZyB0aGUgbmV0d29yayBwYWNrZXQgbGFiZWwgbWFwcGluZ3MuCkBAIC0yMDAsNyArMjA0LDcgQEAKIAl1MzIgdHlwZTsKIAljaGFyICpkb21haW47CiAJc3RydWN0IG5ldGxibF9sc21fY2FjaGUgKmNhY2hlOwotCXVuaW9uIHsKKwlzdHJ1Y3QgewogCQlzdHJ1Y3QgewogCQkJc3RydWN0IG5ldGxibF9sc21fc2VjYXR0cl9jYXRtYXAgKmNhdDsKIAkJCXUzMiBsdmw7CkBAIC0zNTIsMTIgKzM1Niw5IEBACiBpbnQgbmV0bGJsX2NmZ19tYXBfZGVsKGNvbnN0IGNoYXIgKmRvbWFpbiwgc3RydWN0IG5ldGxibF9hdWRpdCAqYXVkaXRfaW5mbyk7CiBpbnQgbmV0bGJsX2NmZ191bmxibF9hZGRfbWFwKGNvbnN0IGNoYXIgKmRvbWFpbiwKIAkJCSAgICAgc3RydWN0IG5ldGxibF9hdWRpdCAqYXVkaXRfaW5mbyk7Ci1pbnQgbmV0bGJsX2NmZ19jaXBzb3Y0X2FkZChzdHJ1Y3QgY2lwc29fdjRfZG9pICpkb2lfZGVmLAotCQkJICAgc3RydWN0IG5ldGxibF9hdWRpdCAqYXVkaXRfaW5mbyk7CiBpbnQgbmV0bGJsX2NmZ19jaXBzb3Y0X2FkZF9tYXAoc3RydWN0IGNpcHNvX3Y0X2RvaSAqZG9pX2RlZiwKIAkJCSAgICAgICBjb25zdCBjaGFyICpkb21haW4sCiAJCQkgICAgICAgc3RydWN0IG5ldGxibF9hdWRpdCAqYXVkaXRfaW5mbyk7Ci1pbnQgbmV0bGJsX2NmZ19jaXBzb3Y0X2RlbCh1MzIgZG9pLCBzdHJ1Y3QgbmV0bGJsX2F1ZGl0ICphdWRpdF9pbmZvKTsKIAogLyoKICAqIExTTSBzZWN1cml0eSBhdHRyaWJ1dGUgb3BlcmF0aW9ucwpAQCAtMzgwLDEyICszODEsMTkgQEAKIGludCBuZXRsYmxfZW5hYmxlZCh2b2lkKTsKIGludCBuZXRsYmxfc29ja19zZXRhdHRyKHN0cnVjdCBzb2NrICpzaywKIAkJCWNvbnN0IHN0cnVjdCBuZXRsYmxfbHNtX3NlY2F0dHIgKnNlY2F0dHIpOwordm9pZCBuZXRsYmxfc29ja19kZWxhdHRyKHN0cnVjdCBzb2NrICpzayk7CiBpbnQgbmV0bGJsX3NvY2tfZ2V0YXR0cihzdHJ1Y3Qgc29jayAqc2ssCiAJCQlzdHJ1Y3QgbmV0bGJsX2xzbV9zZWNhdHRyICpzZWNhdHRyKTsKK2ludCBuZXRsYmxfY29ubl9zZXRhdHRyKHN0cnVjdCBzb2NrICpzaywKKwkJCXN0cnVjdCBzb2NrYWRkciAqYWRkciwKKwkJCWNvbnN0IHN0cnVjdCBuZXRsYmxfbHNtX3NlY2F0dHIgKnNlY2F0dHIpOworaW50IG5ldGxibF9za2J1ZmZfc2V0YXR0cihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJICB1MTYgZmFtaWx5LAorCQkJICBjb25zdCBzdHJ1Y3QgbmV0bGJsX2xzbV9zZWNhdHRyICpzZWNhdHRyKTsKIGludCBuZXRsYmxfc2tidWZmX2dldGF0dHIoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCSAgdTE2IGZhbWlseSwKIAkJCSAgc3RydWN0IG5ldGxibF9sc21fc2VjYXR0ciAqc2VjYXR0cik7Ci12b2lkIG5ldGxibF9za2J1ZmZfZXJyKHN0cnVjdCBza19idWZmICpza2IsIGludCBlcnJvcik7Cit2b2lkIG5ldGxibF9za2J1ZmZfZXJyKHN0cnVjdCBza19idWZmICpza2IsIGludCBlcnJvciwgaW50IGdhdGV3YXkpOwogCiAvKgogICogTFNNIGxhYmVsIG1hcHBpbmcgY2FjaGUgb3BlcmF0aW9ucwpAQCAtNDA0LDIyICs0MTIsMTIgQEAKIHsKIAlyZXR1cm4gLUVOT1NZUzsKIH0KLXN0YXRpYyBpbmxpbmUgaW50IG5ldGxibF9jZmdfY2lwc292NF9hZGQoc3RydWN0IGNpcHNvX3Y0X2RvaSAqZG9pX2RlZiwKLQkJCQkJIHN0cnVjdCBuZXRsYmxfYXVkaXQgKmF1ZGl0X2luZm8pCi17Ci0JcmV0dXJuIC1FTk9TWVM7Ci19CiBzdGF0aWMgaW5saW5lIGludCBuZXRsYmxfY2ZnX2NpcHNvdjRfYWRkX21hcChzdHJ1Y3QgY2lwc29fdjRfZG9pICpkb2lfZGVmLAogCQkJCQkgICAgIGNvbnN0IGNoYXIgKmRvbWFpbiwKIAkJCQkJICAgICBzdHJ1Y3QgbmV0bGJsX2F1ZGl0ICphdWRpdF9pbmZvKQogewogCXJldHVybiAtRU5PU1lTOwogfQotc3RhdGljIGlubGluZSBpbnQgbmV0bGJsX2NmZ19jaXBzb3Y0X2RlbCh1MzIgZG9pLAotCQkJCQkgc3RydWN0IG5ldGxibF9hdWRpdCAqYXVkaXRfaW5mbykKLXsKLQlyZXR1cm4gLUVOT1NZUzsKLX0KIHN0YXRpYyBpbmxpbmUgaW50IG5ldGxibF9zZWNhdHRyX2NhdG1hcF93YWxrKAogCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBuZXRsYmxfbHNtX3NlY2F0dHJfY2F0bWFwICpjYXRtYXAsCiAJCQkJICAgICAgdTMyIG9mZnNldCkKQEAgLTQ1NiwxOCArNDU0LDM1IEBACiB7CiAJcmV0dXJuIC1FTk9TWVM7CiB9CitzdGF0aWMgaW5saW5lIHZvaWQgbmV0bGJsX3NvY2tfZGVsYXR0cihzdHJ1Y3Qgc29jayAqc2spCit7Cit9CiBzdGF0aWMgaW5saW5lIGludCBuZXRsYmxfc29ja19nZXRhdHRyKHN0cnVjdCBzb2NrICpzaywKIAkJCQkgICAgICBzdHJ1Y3QgbmV0bGJsX2xzbV9zZWNhdHRyICpzZWNhdHRyKQogewogCXJldHVybiAtRU5PU1lTOwogfQorc3RhdGljIGlubGluZSBpbnQgbmV0bGJsX2Nvbm5fc2V0YXR0cihzdHJ1Y3Qgc29jayAqc2ssCisJCQkJICAgICAgc3RydWN0IHNvY2thZGRyICphZGRyLAorCQkJCSAgICAgIGNvbnN0IHN0cnVjdCBuZXRsYmxfbHNtX3NlY2F0dHIgKnNlY2F0dHIpCit7CisJcmV0dXJuIC1FTk9TWVM7Cit9CitzdGF0aWMgaW5saW5lIGludCBuZXRsYmxfc2tidWZmX3NldGF0dHIoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkgICAgICB1MTYgZmFtaWx5LAorCQkJCSAgICAgIGNvbnN0IHN0cnVjdCBuZXRsYmxfbHNtX3NlY2F0dHIgKnNlY2F0dHIpCit7CisJcmV0dXJuIC1FTk9TWVM7Cit9CiBzdGF0aWMgaW5saW5lIGludCBuZXRsYmxfc2tidWZmX2dldGF0dHIoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCQkJdTE2IGZhbWlseSwKIAkJCQkJc3RydWN0IG5ldGxibF9sc21fc2VjYXR0ciAqc2VjYXR0cikKIHsKIAlyZXR1cm4gLUVOT1NZUzsKIH0KLXN0YXRpYyBpbmxpbmUgdm9pZCBuZXRsYmxfc2tidWZmX2VycihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgZXJyb3IpCitzdGF0aWMgaW5saW5lIHZvaWQgbmV0bGJsX3NrYnVmZl9lcnIoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkgICAgIGludCBlcnJvciwKKwkJCQkgICAgIGludCBnYXRld2F5KQogewogCXJldHVybjsKIH0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L25ldG5zL3hfdGFibGVzLmggYi9pbmNsdWRlL25ldC9uZXRucy94X3RhYmxlcy5oCmluZGV4IDBjYjYzZWQuLmI4MDkzOTcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L25ldG5zL3hfdGFibGVzLmgKKysrIGIvaW5jbHVkZS9uZXQvbmV0bnMveF90YWJsZXMuaApAQCAtMiw5ICsyLDkgQEAKICNkZWZpbmUgX19ORVROU19YX1RBQkxFU19ICiAKICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+Ci0jaW5jbHVkZSA8bGludXgvbmV0Lmg+CisjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyLmg+CiAKIHN0cnVjdCBuZXRuc194dCB7Ci0Jc3RydWN0IGxpc3RfaGVhZCB0YWJsZXNbTlBST1RPXTsKKwlzdHJ1Y3QgbGlzdF9oZWFkIHRhYmxlc1tORlBST1RPX05VTVBST1RPXTsKIH07CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3NjdHAvc2N0cC5oIGIvaW5jbHVkZS9uZXQvc2N0cC9zY3RwLmgKaW5kZXggNzAzMzA1ZC4uZWQ3MWIxMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvc2N0cC9zY3RwLmgKKysrIGIvaW5jbHVkZS9uZXQvc2N0cC9zY3RwLmgKQEAgLTMwMyw3ICszMDMsNyBAQAogI2RlZmluZSBTQ1RQX0FTU0VSVChleHByLCBzdHIsIGZ1bmMpIFwKIAlpZiAoIShleHByKSkgeyBcCiAJCVNDVFBfREVCVUdfUFJJTlRLKCJBc3NlcnRpb24gRmFpbGVkOiAlcyglcykgYXQgJXM6JXM6JWRcbiIsIFwKLQkJCXN0ciwgKCNleHByKSwgX19GSUxFX18sIF9fRlVOQ1RJT05fXywgX19MSU5FX18pOyBcCisJCQlzdHIsICgjZXhwciksIF9fRklMRV9fLCBfX2Z1bmNfXywgX19MSU5FX18pOyBcCiAJCWZ1bmM7IFwKIAl9CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvcGNtY2lhL2Npc2NvZGUuaCBiL2luY2x1ZGUvcGNtY2lhL2Npc2NvZGUuaAppbmRleCBhZDZlMjc4Li5iNDE3OTg1IDEwMDY0NAotLS0gYS9pbmNsdWRlL3BjbWNpYS9jaXNjb2RlLmgKKysrIGIvaW5jbHVkZS9wY21jaWEvY2lzY29kZS5oCkBAIC0xMTksNyArMTE5LDcgQEAKIAogI2RlZmluZSBNQU5GSURfVE9TSElCQQkJCTB4MDA5OAogCi0jZGVmaW5lIE1BTkZJRF9VTkdFUk1BTk4gMHgwMmMwCisjZGVmaW5lIE1BTkZJRF9VTkdFUk1BTk4JCTB4MDJjMAogCiAjZGVmaW5lIE1BTkZJRF9YSVJDT00JCQkweDAxMDUKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9wY21jaWEvY2lzdHBsLmggYi9pbmNsdWRlL3BjbWNpYS9jaXN0cGwuaAppbmRleCBlMmUxMGMxLi5jZmRkNWFmIDEwMDY0NAotLS0gYS9pbmNsdWRlL3BjbWNpYS9jaXN0cGwuaAorKysgYi9pbmNsdWRlL3BjbWNpYS9jaXN0cGwuaApAQCAtNTczLDQ0ICs1NzMsNiBAQAogI2RlZmluZSBUVVBMRV9SRVRVUk5fTElOSwkweDAxCiAjZGVmaW5lIFRVUExFX1JFVFVSTl9DT01NT04JMHgwMgogCi0vKiBGb3IgVmFsaWRhdGVDSVMgKi8KLXR5cGVkZWYgc3RydWN0IGNpc2luZm9fdCB7Ci0gICAgdV9pbnQJQ2hhaW5zOwotfSBjaXNpbmZvX3Q7Ci0KICNkZWZpbmUgQ0lTVFBMX01BWF9DSVNfU0laRQkweDIwMAogCi0vKiBGb3IgUmVwbGFjZUNJUyAqLwotdHlwZWRlZiBzdHJ1Y3QgY2lzZHVtcF90IHsKLSAgICB1X2ludAlMZW5ndGg7Ci0gICAgY2lzZGF0YV90CURhdGFbQ0lTVFBMX01BWF9DSVNfU0laRV07Ci19IGNpc2R1bXBfdDsKLQotCi1pbnQgcGNtY2lhX3JlcGxhY2VfY2lzKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzLCBjaXNkdW1wX3QgKmNpcyk7Ci0KLS8qIGRvbid0IHVzZSBvdXRzaWRlIG9mIFBDTUNJQSBjb3JlIHlldCAqLwotaW50IHBjY2FyZF9nZXRfbmV4dF90dXBsZShzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcywgdW5zaWduZWQgaW50IGZ1bmMsIHR1cGxlX3QgKnR1cGxlKTsKLWludCBwY2NhcmRfZ2V0X2ZpcnN0X3R1cGxlKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzLCB1bnNpZ25lZCBpbnQgZnVuY3Rpb24sIHR1cGxlX3QgKnR1cGxlKTsKLWludCBwY2NhcmRfZ2V0X3R1cGxlX2RhdGEoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMsIHR1cGxlX3QgKnR1cGxlKTsKLWludCBwY2NhcmRfcGFyc2VfdHVwbGUodHVwbGVfdCAqdHVwbGUsIGNpc3BhcnNlX3QgKnBhcnNlKTsKLQotaW50IHBjY2FyZF92YWxpZGF0ZV9jaXMoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMsIHVuc2lnbmVkIGludCBmdW5jdGlvbiwgdW5zaWduZWQgaW50ICpjb3VudCk7Ci0KLS8qIC4uLiBidXQgdXNlIHRoZXNlIHdyYXBwZXJzIGluc3RlYWQgKi8KLSNkZWZpbmUgcGNtY2lhX2dldF9maXJzdF90dXBsZShwX2RldiwgdHVwbGUpIFwKLQkJcGNjYXJkX2dldF9maXJzdF90dXBsZShwX2Rldi0+c29ja2V0LCBwX2Rldi0+ZnVuYywgdHVwbGUpCi0KLSNkZWZpbmUgcGNtY2lhX2dldF9uZXh0X3R1cGxlKHBfZGV2LCB0dXBsZSkgXAotCQlwY2NhcmRfZ2V0X25leHRfdHVwbGUocF9kZXYtPnNvY2tldCwgcF9kZXYtPmZ1bmMsIHR1cGxlKQotCi0jZGVmaW5lIHBjbWNpYV9nZXRfdHVwbGVfZGF0YShwX2RldiwgdHVwbGUpIFwKLQkJcGNjYXJkX2dldF90dXBsZV9kYXRhKHBfZGV2LT5zb2NrZXQsIHR1cGxlKQotCi0jZGVmaW5lIHBjbWNpYV9wYXJzZV90dXBsZShwX2RldiwgdHVwbGUsIHBhcnNlKSBcCi0JCXBjY2FyZF9wYXJzZV90dXBsZSh0dXBsZSwgcGFyc2UpCi0KLSNkZWZpbmUgcGNtY2lhX3ZhbGlkYXRlX2NpcyhwX2RldiwgaW5mbykgXAotCQlwY2NhcmRfdmFsaWRhdGVfY2lzKHBfZGV2LT5zb2NrZXQsIHBfZGV2LT5mdW5jLCBpbmZvKQotCiAjZW5kaWYgLyogTElOVVhfQ0lTVFBMX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvcGNtY2lhL2NzLmggYi9pbmNsdWRlL3BjbWNpYS9jcy5oCmluZGV4IDQ1ZDg0YjIuLjkwNDQ2OGEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvcGNtY2lhL2NzLmgKKysrIGIvaW5jbHVkZS9wY21jaWEvY3MuaApAQCAtMjgsNzIgKzI4LDE2IEBACiAjZGVmaW5lIENTX1dSSVRFCTIKIAogLyogZm9yIEFkanVzdFJlc291cmNlSW5mbyAqLwotdHlwZWRlZiBzdHJ1Y3QgYWRqdXN0X3QgewotICAgIHVfaW50CUFjdGlvbjsKLSAgICB1X2ludAlSZXNvdXJjZTsKLSAgICB1X2ludAlBdHRyaWJ1dGVzOwotICAgIHVuaW9uIHsKLQlzdHJ1Y3QgbWVtb3J5IHsKLQkgICAgdV9sb25nCUJhc2U7Ci0JICAgIHVfbG9uZwlTaXplOwotCX0gbWVtb3J5OwotCXN0cnVjdCBpbyB7Ci0JICAgIGlvYWRkcl90CUJhc2VQb3J0OwotCSAgICBpb2FkZHJfdAlOdW1Qb3J0czsKLQkgICAgdV9pbnQJSU9BZGRyTGluZXM7Ci0JfSBpbzsKLQlzdHJ1Y3QgaXJxIHsKLQkgICAgdV9pbnQJSVJROwotCX0gaXJxOwotICAgIH0gcmVzb3VyY2U7Ci19IGFkanVzdF90OwotCiAvKiBBY3Rpb24gZmllbGQgKi8KICNkZWZpbmUgUkVNT1ZFX01BTkFHRURfUkVTT1VSQ0UJCTEKICNkZWZpbmUgQUREX01BTkFHRURfUkVTT1VSQ0UJCTIKLSNkZWZpbmUgR0VUX0ZJUlNUX01BTkFHRURfUkVTT1VSQ0UJMwotI2RlZmluZSBHRVRfTkVYVF9NQU5BR0VEX1JFU09VUkNFCTQKLS8qIFJlc291cmNlIGZpZWxkICovCi0jZGVmaW5lIFJFU19NRU1PUllfUkFOR0UJCTEKLSNkZWZpbmUgUkVTX0lPX1JBTkdFCQkJMgotI2RlZmluZSBSRVNfSVJRCQkJCTMKLS8qIEF0dHJpYnV0ZSBmaWVsZCAqLwotI2RlZmluZSBSRVNfSVJRX1RZUEUJCQkweDAzCi0jZGVmaW5lIFJFU19JUlFfVFlQRV9FWENMVVNJVkUJCTAKLSNkZWZpbmUgUkVTX0lSUV9UWVBFX1RJTUUJCTEKLSNkZWZpbmUgUkVTX0lSUV9UWVBFX0RZTkFNSUMJCTIKLSNkZWZpbmUgUkVTX0lSUV9DU0MJCQkweDA0Ci0jZGVmaW5lIFJFU19TSEFSRUQJCQkweDA4Ci0jZGVmaW5lIFJFU19SRVNFUlZFRAkJCTB4MTAKLSNkZWZpbmUgUkVTX0FMTE9DQVRFRAkJCTB4MjAKLSNkZWZpbmUgUkVTX1JFTU9WRUQJCQkweDQwCisKIAogdHlwZWRlZiBzdHJ1Y3QgZXZlbnRfY2FsbGJhY2tfYXJnc190IHsKIAlzdHJ1Y3QgcGNtY2lhX2RldmljZQkqY2xpZW50X2hhbmRsZTsKIAl2b2lkCQkJKmNsaWVudF9kYXRhOwogfSBldmVudF9jYWxsYmFja19hcmdzX3Q7CiAKLS8qIGZvciBHZXRDb25maWd1cmF0aW9uSW5mbyAqLwotdHlwZWRlZiBzdHJ1Y3QgY29uZmlnX2luZm9fdCB7Ci0gICAgdV9jaGFyCUZ1bmN0aW9uOwotICAgIHVfaW50CUF0dHJpYnV0ZXM7Ci0gICAgdV9pbnQJVmNjLCBWcHAxLCBWcHAyOwotICAgIHVfaW50CUludFR5cGU7Ci0gICAgdV9pbnQJQ29uZmlnQmFzZTsKLSAgICB1X2NoYXIJU3RhdHVzLCBQaW4sIENvcHksIE9wdGlvbiwgRXh0U3RhdHVzOwotICAgIHVfaW50CVByZXNlbnQ7Ci0gICAgdV9pbnQJQ2FyZFZhbHVlczsKLSAgICB1X2ludAlBc3NpZ25lZElSUTsKLSAgICB1X2ludAlJUlFBdHRyaWJ1dGVzOwotICAgIGlvYWRkcl90CUJhc2VQb3J0MTsKLSAgICBpb2FkZHJfdAlOdW1Qb3J0czE7Ci0gICAgdV9pbnQJQXR0cmlidXRlczE7Ci0gICAgaW9hZGRyX3QJQmFzZVBvcnQyOwotICAgIGlvYWRkcl90CU51bVBvcnRzMjsKLSAgICB1X2ludAlBdHRyaWJ1dGVzMjsKLSAgICB1X2ludAlJT0FkZHJMaW5lczsKLX0gY29uZmlnX2luZm9fdDsKLQogLyogRm9yIENhcmRWYWx1ZXMgZmllbGQgKi8KICNkZWZpbmUgQ1ZfT1BUSU9OX1ZBTFVFCQkweDAxCiAjZGVmaW5lIENWX1NUQVRVU19WQUxVRQkJMHgwMgpAQCAtMjU3LDIyICsyMDEsNiBAQAogI2RlZmluZSBXSU5fQkFSX01BU0sJCTB4ZTAwMAogI2RlZmluZSBXSU5fQkFSX1NISUZUCQkxMwogCi0vKiBBdHRyaWJ1dGVzIGZvciBSZWdpc3RlckNsaWVudCAtLSBVTlVTRUQgLS0gKi8KLSNkZWZpbmUgSU5GT19NQVNURVJfQ0xJRU5UCTB4MDEKLSNkZWZpbmUgSU5GT19JT19DTElFTlQJCTB4MDIKLSNkZWZpbmUgSU5GT19NVERfQ0xJRU5UCQkweDA0Ci0jZGVmaW5lIElORk9fTUVNX0NMSUVOVAkJMHgwOAotI2RlZmluZSBNQVhfTlVNX0NMSUVOVFMJCTMKLQotI2RlZmluZSBJTkZPX0NBUkRfU0hBUkUJCTB4MTAKLSNkZWZpbmUgSU5GT19DQVJEX0VYQ0wJCTB4MjAKLQotdHlwZWRlZiBzdHJ1Y3QgY3Nfc3RhdHVzX3QgewotICAgIHVfY2hhcglGdW5jdGlvbjsKLSAgICBldmVudF90IAlDYXJkU3RhdGU7Ci0gICAgZXZlbnRfdAlTb2NrZXRTdGF0ZTsKLX0gY3Nfc3RhdHVzX3Q7Ci0KIHR5cGVkZWYgc3RydWN0IGVycm9yX2luZm9fdCB7CiAgICAgaW50CQlmdW5jOwogICAgIGludAkJcmV0Y29kZTsKQEAgLTMwOCw5NSArMjM2LDQgQEAKICNkZWZpbmUgQ1NfRVZFTlRfM1ZDQVJECQkJMHgyMDAwMDAKICNkZWZpbmUgQ1NfRVZFTlRfWFZDQVJECQkJMHg0MDAwMDAKIAotLyogUmV0dXJuIGNvZGVzICovCi0jZGVmaW5lIENTX1NVQ0NFU1MJCTB4MDAKLSNkZWZpbmUgQ1NfQkFEX0FEQVBURVIJCTB4MDEKLSNkZWZpbmUgQ1NfQkFEX0FUVFJJQlVURQkweDAyCi0jZGVmaW5lIENTX0JBRF9CQVNFCQkweDAzCi0jZGVmaW5lIENTX0JBRF9FREMJCTB4MDQKLSNkZWZpbmUgQ1NfQkFEX0lSUQkJMHgwNgotI2RlZmluZSBDU19CQURfT0ZGU0VUCQkweDA3Ci0jZGVmaW5lIENTX0JBRF9QQUdFCQkweDA4Ci0jZGVmaW5lIENTX1JFQURfRkFJTFVSRQkJMHgwOQotI2RlZmluZSBDU19CQURfU0laRQkJMHgwYQotI2RlZmluZSBDU19CQURfU09DS0VUCQkweDBiCi0jZGVmaW5lIENTX0JBRF9UWVBFCQkweDBkCi0jZGVmaW5lIENTX0JBRF9WQ0MJCTB4MGUKLSNkZWZpbmUgQ1NfQkFEX1ZQUAkJMHgwZgotI2RlZmluZSBDU19CQURfV0lORE9XCQkweDExCi0jZGVmaW5lIENTX1dSSVRFX0ZBSUxVUkUJMHgxMgotI2RlZmluZSBDU19OT19DQVJECQkweDE0Ci0jZGVmaW5lIENTX1VOU1VQUE9SVEVEX0ZVTkNUSU9OCTB4MTUKLSNkZWZpbmUgQ1NfVU5TVVBQT1JURURfTU9ERQkweDE2Ci0jZGVmaW5lIENTX0JBRF9TUEVFRAkJMHgxNwotI2RlZmluZSBDU19CVVNZCQkJMHgxOAotI2RlZmluZSBDU19HRU5FUkFMX0ZBSUxVUkUJMHgxOQotI2RlZmluZSBDU19XUklURV9QUk9URUNURUQJMHgxYQotI2RlZmluZSBDU19CQURfQVJHX0xFTkdUSAkweDFiCi0jZGVmaW5lIENTX0JBRF9BUkdTCQkweDFjCi0jZGVmaW5lIENTX0NPTkZJR1VSQVRJT05fTE9DS0VECTB4MWQKLSNkZWZpbmUgQ1NfSU5fVVNFCQkweDFlCi0jZGVmaW5lIENTX05PX01PUkVfSVRFTVMJMHgxZgotI2RlZmluZSBDU19PVVRfT0ZfUkVTT1VSQ0UJMHgyMAotI2RlZmluZSBDU19CQURfSEFORExFCQkweDIxCi0KLSNkZWZpbmUgQ1NfQkFEX1RVUExFCQkweDQwCi0KLSNpZmRlZiBfX0tFUk5FTF9fCi0KLS8qCi0gKiAgVGhlIG1haW4gQ2FyZCBTZXJ2aWNlcyBlbnRyeSBwb2ludAotICovCi0KLWVudW0gc2VydmljZSB7Ci0gICAgQWNjZXNzQ29uZmlndXJhdGlvblJlZ2lzdGVyLCBBZGRTb2NrZXRTZXJ2aWNlcywKLSAgICBBZGp1c3RSZXNvdXJjZUluZm8sIENoZWNrRXJhc2VRdWV1ZSwgQ2xvc2VNZW1vcnksIENvcHlNZW1vcnksCi0gICAgRGVyZWdpc3RlckNsaWVudCwgRGVyZWdpc3RlckVyYXNlUXVldWUsIEdldENhcmRTZXJ2aWNlc0luZm8sCi0gICAgR2V0Q2xpZW50SW5mbywgR2V0Q29uZmlndXJhdGlvbkluZm8sIEdldEV2ZW50TWFzaywKLSAgICBHZXRGaXJzdENsaWVudCwgR2V0Rmlyc3RQYXJ0aW9uLCBHZXRGaXJzdFJlZ2lvbiwgR2V0Rmlyc3RUdXBsZSwKLSAgICBHZXROZXh0Q2xpZW50LCBHZXROZXh0UGFydGl0aW9uLCBHZXROZXh0UmVnaW9uLCBHZXROZXh0VHVwbGUsCi0gICAgR2V0U3RhdHVzLCBHZXRUdXBsZURhdGEsIE1hcExvZ1NvY2tldCwgTWFwTG9nV2luZG93LCBNYXBNZW1QYWdlLAotICAgIE1hcFBoeVNvY2tldCwgTWFwUGh5V2luZG93LCBNb2RpZnlDb25maWd1cmF0aW9uLCBNb2RpZnlXaW5kb3csCi0gICAgT3Blbk1lbW9yeSwgUGFyc2VUdXBsZSwgUmVhZE1lbW9yeSwgUmVnaXN0ZXJDbGllbnQsCi0gICAgUmVnaXN0ZXJFcmFzZVF1ZXVlLCBSZWdpc3Rlck1URCwgUmVnaXN0ZXJUaW1lciwKLSAgICBSZWxlYXNlQ29uZmlndXJhdGlvbiwgUmVsZWFzZUV4Y2x1c2l2ZSwgUmVsZWFzZUlPLCBSZWxlYXNlSVJRLAotICAgIFJlbGVhc2VTb2NrZXRNYXNrLCBSZWxlYXNlV2luZG93LCBSZXBsYWNlU29ja2V0U2VydmljZXMsCi0gICAgUmVxdWVzdENvbmZpZ3VyYXRpb24sIFJlcXVlc3RFeGNsdXNpdmUsIFJlcXVlc3RJTywgUmVxdWVzdElSUSwKLSAgICBSZXF1ZXN0U29ja2V0TWFzaywgUmVxdWVzdFdpbmRvdywgUmVzZXRDYXJkLCBSZXR1cm5TU0VudHJ5LAotICAgIFNldEV2ZW50TWFzaywgU2V0UmVnaW9uLCBWYWxpZGF0ZUNJUywgVmVuZG9yU3BlY2lmaWMsCi0gICAgV3JpdGVNZW1vcnksIEJpbmREZXZpY2UsIEJpbmRNVEQsIFJlcG9ydEVycm9yLAotICAgIFN1c3BlbmRDYXJkLCBSZXN1bWVDYXJkLCBFamVjdENhcmQsIEluc2VydENhcmQsIFJlcGxhY2VDSVMsCi0gICAgR2V0Rmlyc3RXaW5kb3csIEdldE5leHRXaW5kb3csIEdldE1lbVBhZ2UKLX07Ci0KLXN0cnVjdCBwY21jaWFfc29ja2V0OwotCi1pbnQgcGNtY2lhX2FjY2Vzc19jb25maWd1cmF0aW9uX3JlZ2lzdGVyKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldiwgY29uZl9yZWdfdCAqcmVnKTsKLWludCBwY21jaWFfZ2V0X2NvbmZpZ3VyYXRpb25faW5mbyhzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYsIGNvbmZpZ19pbmZvX3QgKmNvbmZpZyk7Ci1pbnQgcGNtY2lhX2dldF9tZW1fcGFnZSh3aW5kb3dfaGFuZGxlX3Qgd2luLCBtZW1yZXFfdCAqcmVxKTsKLWludCBwY21jaWFfbWFwX21lbV9wYWdlKHdpbmRvd19oYW5kbGVfdCB3aW4sIG1lbXJlcV90ICpyZXEpOwotaW50IHBjbWNpYV9tb2RpZnlfY29uZmlndXJhdGlvbihzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYsIG1vZGNvbmZfdCAqbW9kKTsKLWludCBwY21jaWFfcmVsZWFzZV93aW5kb3cod2luZG93X2hhbmRsZV90IHdpbik7Ci1pbnQgcGNtY2lhX3JlcXVlc3RfY29uZmlndXJhdGlvbihzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYsIGNvbmZpZ19yZXFfdCAqcmVxKTsKLWludCBwY21jaWFfcmVxdWVzdF9pbyhzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYsIGlvX3JlcV90ICpyZXEpOwotaW50IHBjbWNpYV9yZXF1ZXN0X2lycShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYsIGlycV9yZXFfdCAqcmVxKTsKLWludCBwY21jaWFfcmVxdWVzdF93aW5kb3coc3RydWN0IHBjbWNpYV9kZXZpY2UgKipwX2Rldiwgd2luX3JlcV90ICpyZXEsIHdpbmRvd19oYW5kbGVfdCAqd2gpOwotaW50IHBjbWNpYV9zdXNwZW5kX2NhcmQoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnNrdCk7Ci1pbnQgcGNtY2lhX3Jlc3VtZV9jYXJkKHN0cnVjdCBwY21jaWFfc29ja2V0ICpza3QpOwotaW50IHBjbWNpYV9lamVjdF9jYXJkKHN0cnVjdCBwY21jaWFfc29ja2V0ICpza3QpOwotaW50IHBjbWNpYV9pbnNlcnRfY2FyZChzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqc2t0KTsKLWludCBwY2NhcmRfcmVzZXRfY2FyZChzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqc2t0KTsKLQotc3RydWN0IHBjbWNpYV9kZXZpY2UgKiBwY21jaWFfZGV2X3ByZXNlbnQoc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2KTsKLXZvaWQgcGNtY2lhX2Rpc2FibGVfZGV2aWNlKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2Rldik7Ci0KLXN0cnVjdCBwY21jaWFfc29ja2V0ICogcGNtY2lhX2dldF9zb2NrZXQoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnNrdCk7Ci12b2lkIHBjbWNpYV9wdXRfc29ja2V0KHN0cnVjdCBwY21jaWFfc29ja2V0ICpza3QpOwotCi0vKiBjb21wYXRpYmlsaXR5IGZ1bmN0aW9ucyAqLwotI2RlZmluZSBwY21jaWFfcmVzZXRfY2FyZChwX2RldiwgcmVxKSBcCi0JCXBjY2FyZF9yZXNldF9jYXJkKHBfZGV2LT5zb2NrZXQpCi0KLSNlbmRpZiAvKiBfX0tFUk5FTF9fICovCi0KICNlbmRpZiAvKiBfTElOVVhfQ1NfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9wY21jaWEvY3NfdHlwZXMuaCBiL2luY2x1ZGUvcGNtY2lhL2NzX3R5cGVzLmgKaW5kZXggZjQwMmEwZi4uMzE1OTY1YSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9wY21jaWEvY3NfdHlwZXMuaAorKysgYi9pbmNsdWRlL3BjbWNpYS9jc190eXBlcy5oCkBAIC0yMSwxNCArMjEsNiBAQAogI2luY2x1ZGUgPHN5cy90eXBlcy5oPgogI2VuZGlmCiAKLSNpZiBkZWZpbmVkKF9fYXJtX18pIHx8IGRlZmluZWQoX19taXBzX18pIHx8IGRlZmluZWQoX19hdnIzMl9fKSB8fCBcCi0JZGVmaW5lZChfX2JmaW5fXykKLS8qIFRoaXMgKGlvYWRkcl90KSBpcyBleHBvc2VkIHRvIHVzZXJzcGFjZSAmIGhlbmNlIGNhbm5vdCBiZSBjaGFuZ2VkLiAqLwotdHlwZWRlZiB1X2ludCAgIGlvYWRkcl90OwotI2Vsc2UKLXR5cGVkZWYgdV9zaG9ydAlpb2FkZHJfdDsKLSNlbmRpZgotCiB0eXBlZGVmIHVfc2hvcnQJc29ja2V0X3Q7CiB0eXBlZGVmIHVfaW50CWV2ZW50X3Q7CiB0eXBlZGVmIHVfY2hhcgljaXNkYXRhX3Q7CmRpZmYgLS1naXQgYS9pbmNsdWRlL3BjbWNpYS9kZXZpY2VfaWQuaCBiL2luY2x1ZGUvcGNtY2lhL2RldmljZV9pZC5oCmluZGV4IGUwNGUwYjAuLmMzM2VhMDggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvcGNtY2lhL2RldmljZV9pZC5oCisrKyBiL2luY2x1ZGUvcGNtY2lhL2RldmljZV9pZC5oCkBAIC0xLDEwICsxLDE5IEBACiAvKgotICogQ29weXJpZ2h0ICgyMDAzLTIwMDQpIAlEb21pbmlrIEJyb2Rvd3NraSA8bGludXhAYnJvZG8uZGU+Ci0gKgkJCQlEYXZpZCBXb29kaG91c2UKKyAqIGRldmljZV9pZC5oIC0tIFBDTUNJQSBkcml2ZXIgbWF0Y2hpbmcgaGVscGVycwogICoKLSAqIExpY2Vuc2U6IEdQTCB2MgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiAoQykgMjAwMyAtIDIwMDQJRGF2aWQgV29vZGhvdXNlCisgKiAoQykgMjAwMyAtIDIwMDQJRG9taW5payBCcm9kb3dza2kKICAqLwogCisjaWZuZGVmIF9MSU5VWF9QQ01DSUFfREVWSUNFX0lEX0gKKyNkZWZpbmUgX0xJTlVYX1BDTUNJQV9ERVZJQ0VfSURfSAorCisjaWZkZWYgX19LRVJORUxfXworCiAjZGVmaW5lIFBDTUNJQV9ERVZJQ0VfTUFORl9DQVJEKG1hbmYsIGNhcmQpIHsgXAogCS5tYXRjaF9mbGFncyA9IFBDTUNJQV9ERVZfSURfTUFUQ0hfTUFORl9JRHwgXAogCQkJUENNQ0lBX0RFVl9JRF9NQVRDSF9DQVJEX0lELCBcCkBAIC0yNTYsMyArMjY1LDYgQEAKIAogCiAjZGVmaW5lIFBDTUNJQV9ERVZJQ0VfTlVMTCB7IC5tYXRjaF9mbGFncyA9IDAsIH0KKworI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KKyNlbmRpZiAvKiBfTElOVVhfUENNQ0lBX0RFVklDRV9JRF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL3BjbWNpYS9kcy5oIGIvaW5jbHVkZS9wY21jaWEvZHMuaAppbmRleCBiMzE2MDI3Li5hMmJlODBiIDEwMDY0NAotLS0gYS9pbmNsdWRlL3BjbWNpYS9kcy5oCisrKyBiL2luY2x1ZGUvcGNtY2lhL2RzLmgKQEAgLTEwLDcgKzEwLDcgQEAKICAqIGFyZSBDb3B5cmlnaHQgKEMpIDE5OTkgRGF2aWQgQS4gSGluZHMuICBBbGwgUmlnaHRzIFJlc2VydmVkLgogICoKICAqIChDKSAxOTk5CQlEYXZpZCBBLiBIaW5kcwotICogKEMpIDIwMDMgLSAyMDA0CURvbWluaWsgQnJvZG93c2tpCisgKiAoQykgMjAwMyAtIDIwMDgJRG9taW5payBCcm9kb3dza2kKICAqLwogCiAjaWZuZGVmIF9MSU5VWF9EU19ICkBAIC0yMywxMDggKzIzLDIxIEBACiAjaW5jbHVkZSA8cGNtY2lhL2NzX3R5cGVzLmg+CiAjaW5jbHVkZSA8cGNtY2lhL2RldmljZV9pZC5oPgogCi10eXBlZGVmIHN0cnVjdCB0dXBsZV9wYXJzZV90IHsKLSAgICB0dXBsZV90CQl0dXBsZTsKLSAgICBjaXNkYXRhX3QJCWRhdGFbMjU1XTsKLSAgICBjaXNwYXJzZV90CQlwYXJzZTsKLX0gdHVwbGVfcGFyc2VfdDsKLQotdHlwZWRlZiBzdHJ1Y3Qgd2luX2luZm9fdCB7Ci0gICAgd2luZG93X2hhbmRsZV90CWhhbmRsZTsKLSAgICB3aW5fcmVxX3QJCXdpbmRvdzsKLSAgICBtZW1yZXFfdAkJbWFwOwotfSB3aW5faW5mb190OwotICAgIAotdHlwZWRlZiBzdHJ1Y3QgYmluZF9pbmZvX3QgewotICAgIGRldl9pbmZvX3QJCWRldl9pbmZvOwotICAgIHVfY2hhcgkJZnVuY3Rpb247Ci0gICAgc3RydWN0IHBjbWNpYV9kZXZpY2UgKmluc3RhbmNlOwotICAgIGNoYXIJCW5hbWVbREVWX05BTUVfTEVOXTsKLSAgICB1X3Nob3J0CQltYWpvciwgbWlub3I7Ci0gICAgdm9pZAkJKm5leHQ7Ci19IGJpbmRfaW5mb190OwotCi10eXBlZGVmIHN0cnVjdCBtdGRfaW5mb190IHsKLSAgICBkZXZfaW5mb190CQlkZXZfaW5mbzsKLSAgICB1X2ludAkJQXR0cmlidXRlczsKLSAgICB1X2ludAkJQ2FyZE9mZnNldDsKLX0gbXRkX2luZm9fdDsKLQotdHlwZWRlZiBzdHJ1Y3QgcmVnaW9uX2luZm9fdCB7Ci0gICAgdV9pbnQJCUF0dHJpYnV0ZXM7Ci0gICAgdV9pbnQJCUNhcmRPZmZzZXQ7Ci0gICAgdV9pbnQJCVJlZ2lvblNpemU7Ci0gICAgdV9pbnQJCUFjY2Vzc1NwZWVkOwotICAgIHVfaW50CQlCbG9ja1NpemU7Ci0gICAgdV9pbnQJCVBhcnRNdWx0aXBsZTsKLSAgICB1X2NoYXIJCUplZGVjTWZyLCBKZWRlY0luZm87Ci0gICAgbWVtb3J5X2hhbmRsZV90CW5leHQ7Ci19IHJlZ2lvbl9pbmZvX3Q7Ci0jZGVmaW5lIFJFR0lPTl9UWVBFCQkweDAwMDEKLSNkZWZpbmUgUkVHSU9OX1RZUEVfQ00JCTB4MDAwMAotI2RlZmluZSBSRUdJT05fVFlQRV9BTQkJMHgwMDAxCi0jZGVmaW5lIFJFR0lPTl9QUkVGRVRDSAkJMHgwMDA4Ci0jZGVmaW5lIFJFR0lPTl9DQUNIRUFCTEUJMHgwMDEwCi0jZGVmaW5lIFJFR0lPTl9CQVJfTUFTSwkJMHhlMDAwCi0jZGVmaW5lIFJFR0lPTl9CQVJfU0hJRlQJMTMKLQotdHlwZWRlZiB1bmlvbiBkc19pb2N0bF9hcmdfdCB7Ci0gICAgYWRqdXN0X3QJCWFkanVzdDsKLSAgICBjb25maWdfaW5mb190CWNvbmZpZzsKLSAgICB0dXBsZV90CQl0dXBsZTsKLSAgICB0dXBsZV9wYXJzZV90CXR1cGxlX3BhcnNlOwotICAgIGNsaWVudF9yZXFfdAljbGllbnRfcmVxOwotICAgIGNzX3N0YXR1c190CQlzdGF0dXM7Ci0gICAgY29uZl9yZWdfdAkJY29uZl9yZWc7Ci0gICAgY2lzaW5mb190CQljaXNpbmZvOwotICAgIHJlZ2lvbl9pbmZvX3QJcmVnaW9uOwotICAgIGJpbmRfaW5mb190CQliaW5kX2luZm87Ci0gICAgbXRkX2luZm9fdAkJbXRkX2luZm87Ci0gICAgd2luX2luZm9fdAkJd2luX2luZm87Ci0gICAgY2lzZHVtcF90CQljaXNkdW1wOwotfSBkc19pb2N0bF9hcmdfdDsKLQotI2RlZmluZSBEU19BREpVU1RfUkVTT1VSQ0VfSU5GTwkJX0lPV1IoJ2QnLCAyLCBhZGp1c3RfdCkKLSNkZWZpbmUgRFNfR0VUX0NPTkZJR1VSQVRJT05fSU5GTwlfSU9XUignZCcsIDMsIGNvbmZpZ19pbmZvX3QpCi0jZGVmaW5lIERTX0dFVF9GSVJTVF9UVVBMRQkJX0lPV1IoJ2QnLCA0LCB0dXBsZV90KQotI2RlZmluZSBEU19HRVRfTkVYVF9UVVBMRQkJX0lPV1IoJ2QnLCA1LCB0dXBsZV90KQotI2RlZmluZSBEU19HRVRfVFVQTEVfREFUQQkJX0lPV1IoJ2QnLCA2LCB0dXBsZV9wYXJzZV90KQotI2RlZmluZSBEU19QQVJTRV9UVVBMRQkJCV9JT1dSKCdkJywgNywgdHVwbGVfcGFyc2VfdCkKLSNkZWZpbmUgRFNfUkVTRVRfQ0FSRAkJCV9JTyAgKCdkJywgOCkKLSNkZWZpbmUgRFNfR0VUX1NUQVRVUwkJCV9JT1dSKCdkJywgOSwgY3Nfc3RhdHVzX3QpCi0jZGVmaW5lIERTX0FDQ0VTU19DT05GSUdVUkFUSU9OX1JFR0lTVEVSIF9JT1dSKCdkJywgMTAsIGNvbmZfcmVnX3QpCi0jZGVmaW5lIERTX1ZBTElEQVRFX0NJUwkJCV9JT1IgKCdkJywgMTEsIGNpc2luZm9fdCkKLSNkZWZpbmUgRFNfU1VTUEVORF9DQVJECQkJX0lPICAoJ2QnLCAxMikKLSNkZWZpbmUgRFNfUkVTVU1FX0NBUkQJCQlfSU8gICgnZCcsIDEzKQotI2RlZmluZSBEU19FSkVDVF9DQVJECQkJX0lPICAoJ2QnLCAxNCkKLSNkZWZpbmUgRFNfSU5TRVJUX0NBUkQJCQlfSU8gICgnZCcsIDE1KQotI2RlZmluZSBEU19HRVRfRklSU1RfUkVHSU9OCQlfSU9XUignZCcsIDE2LCByZWdpb25faW5mb190KQotI2RlZmluZSBEU19HRVRfTkVYVF9SRUdJT04JCV9JT1dSKCdkJywgMTcsIHJlZ2lvbl9pbmZvX3QpCi0jZGVmaW5lIERTX1JFUExBQ0VfQ0lTCQkJX0lPV1IoJ2QnLCAxOCwgY2lzZHVtcF90KQotI2RlZmluZSBEU19HRVRfRklSU1RfV0lORE9XCQlfSU9SICgnZCcsIDE5LCB3aW5faW5mb190KQotI2RlZmluZSBEU19HRVRfTkVYVF9XSU5ET1cJCV9JT1dSKCdkJywgMjAsIHdpbl9pbmZvX3QpCi0jZGVmaW5lIERTX0dFVF9NRU1fUEFHRQkJCV9JT1dSKCdkJywgMjEsIHdpbl9pbmZvX3QpCi0KLSNkZWZpbmUgRFNfQklORF9SRVFVRVNUCQkJX0lPV1IoJ2QnLCA2MCwgYmluZF9pbmZvX3QpCi0jZGVmaW5lIERTX0dFVF9ERVZJQ0VfSU5GTwkJX0lPV1IoJ2QnLCA2MSwgYmluZF9pbmZvX3QpIAotI2RlZmluZSBEU19HRVRfTkVYVF9ERVZJQ0UJCV9JT1dSKCdkJywgNjIsIGJpbmRfaW5mb190KSAKLSNkZWZpbmUgRFNfVU5CSU5EX1JFUVVFU1QJCV9JT1cgKCdkJywgNjMsIGJpbmRfaW5mb190KQotI2RlZmluZSBEU19CSU5EX01URAkJCV9JT1dSKCdkJywgNjQsIG10ZF9pbmZvX3QpCi0KICNpZmRlZiBfX0tFUk5FTF9fCiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CiAjaW5jbHVkZSA8cGNtY2lhL3NzLmg+CiAKLXR5cGVkZWYgc3RydWN0IGRldl9ub2RlX3QgewotICAgIGNoYXIJCWRldl9uYW1lW0RFVl9OQU1FX0xFTl07Ci0gICAgdV9zaG9ydAkJbWFqb3IsIG1pbm9yOwotICAgIHN0cnVjdCBkZXZfbm9kZV90CSpuZXh0OwotfSBkZXZfbm9kZV90OwotCi0KKy8qCisgKiBQQ01DSUEgZGV2aWNlIGRyaXZlcnMgKDE2LWJpdCBjYXJkcyBvbmx5OyAzMi1iaXQgY2FyZHMgcmVxdWlyZSBDYXJkQnVzCisgKiBhLmsuYS4gUENJIGRyaXZlcnMKKyAqLwogc3RydWN0IHBjbWNpYV9zb2NrZXQ7CitzdHJ1Y3QgcGNtY2lhX2RldmljZTsKIHN0cnVjdCBjb25maWdfdDsKIAorLyogZHluYW1pYyBkZXZpY2UgSURzIGZvciBQQ01DSUEgZGV2aWNlIGRyaXZlcnMuIFNlZQorICogRG9jdW1lbnRhdGlvbi9wY21jaWEvZHJpdmVyLnR4dCBmb3IgZGV0YWlscy4KKyovCiBzdHJ1Y3QgcGNtY2lhX2R5bmlkcyB7CiAJc3BpbmxvY2tfdAkJbG9jazsKIAlzdHJ1Y3QgbGlzdF9oZWFkCWxpc3Q7CkBAIC0xNDcsNiArNjAsMTQgQEAKIGludCBwY21jaWFfcmVnaXN0ZXJfZHJpdmVyKHN0cnVjdCBwY21jaWFfZHJpdmVyICpkcml2ZXIpOwogdm9pZCBwY21jaWFfdW5yZWdpc3Rlcl9kcml2ZXIoc3RydWN0IHBjbWNpYV9kcml2ZXIgKmRyaXZlcik7CiAKKy8qIFNvbWUgZHJpdmVycyB1c2UgZGV2X25vZGVfdCB0byBzdG9yZSBjaGFyIG9yIGJsb2NrIGRldmljZSBpbmZvcm1hdGlvbi4KKyAqIERvbid0IHVzZSB0aGlzIGluIG5ldyBkcml2ZXJzLCB0aG91Z2guCisgKi8KK3R5cGVkZWYgc3RydWN0IGRldl9ub2RlX3QgeworCWNoYXIJCQlkZXZfbmFtZVtERVZfTkFNRV9MRU5dOworCXVfc2hvcnQJCQltYWpvciwgbWlub3I7CisJc3RydWN0IGRldl9ub2RlX3QJKm5leHQ7Cit9IGRldl9ub2RlX3Q7CiAKIHN0cnVjdCBwY21jaWFfZGV2aWNlIHsKIAkvKiB0aGUgc29ja2V0IGFuZCB0aGUgZGV2aWNlX25vIFtmb3IgbXVsdGlmdW5jdGlvbiBkZXZpY2VzXQpAQCAtMjE2LDEwICsxMzcsMzA0IEBACiAjZGVmaW5lIHRvX3BjbWNpYV9kZXYobikgY29udGFpbmVyX29mKG4sIHN0cnVjdCBwY21jaWFfZGV2aWNlLCBkZXYpCiAjZGVmaW5lIHRvX3BjbWNpYV9kcnYobikgY29udGFpbmVyX29mKG4sIHN0cnVjdCBwY21jaWFfZHJpdmVyLCBkcnYpCiAKKy8qIGRlcHJlY2F0ZWQgLS0gZG9uJ3QgdXNlISAqLwogI2RlZmluZSBoYW5kbGVfdG9fZGV2KGhhbmRsZSkgKGhhbmRsZS0+ZGV2KQogCi0vKiBlcnJvciByZXBvcnRpbmcgKi8KLXZvaWQgY3NfZXJyb3Ioc3RydWN0IHBjbWNpYV9kZXZpY2UgKmhhbmRsZSwgaW50IGZ1bmMsIGludCByZXQpOworCisvKiAoZGVwcmVjYXRlZCkgZXJyb3IgcmVwb3J0aW5nIGJ5IFBDTUNJQSBkZXZpY2VzLiBVc2UgZGV2X3ByaW50aygpCisgKiBvciBkZXZfZGJnKCkgZGlyZWN0bHkgaW4gdGhlIGRyaXZlciwgd2l0aG91dCByZWZlcnJpbmcgdG8gcGNtY2lhX2Vycm9yX2Z1bmMoKQorICogYW5kL29yIHBjbWNpYV9lcnJvcl9yZXQoKSBmb3IgdGhvc2UgZnVuY3Rpb25zIHdpbGwgZ28gYXdheSBzb29uLgorICovCitlbnVtIHNlcnZpY2UgeworICAgIEFjY2Vzc0NvbmZpZ3VyYXRpb25SZWdpc3RlciwgQWRkU29ja2V0U2VydmljZXMsCisgICAgQWRqdXN0UmVzb3VyY2VJbmZvLCBDaGVja0VyYXNlUXVldWUsIENsb3NlTWVtb3J5LCBDb3B5TWVtb3J5LAorICAgIERlcmVnaXN0ZXJDbGllbnQsIERlcmVnaXN0ZXJFcmFzZVF1ZXVlLCBHZXRDYXJkU2VydmljZXNJbmZvLAorICAgIEdldENsaWVudEluZm8sIEdldENvbmZpZ3VyYXRpb25JbmZvLCBHZXRFdmVudE1hc2ssCisgICAgR2V0Rmlyc3RDbGllbnQsIEdldEZpcnN0UGFydGlvbiwgR2V0Rmlyc3RSZWdpb24sIEdldEZpcnN0VHVwbGUsCisgICAgR2V0TmV4dENsaWVudCwgR2V0TmV4dFBhcnRpdGlvbiwgR2V0TmV4dFJlZ2lvbiwgR2V0TmV4dFR1cGxlLAorICAgIEdldFN0YXR1cywgR2V0VHVwbGVEYXRhLCBNYXBMb2dTb2NrZXQsIE1hcExvZ1dpbmRvdywgTWFwTWVtUGFnZSwKKyAgICBNYXBQaHlTb2NrZXQsIE1hcFBoeVdpbmRvdywgTW9kaWZ5Q29uZmlndXJhdGlvbiwgTW9kaWZ5V2luZG93LAorICAgIE9wZW5NZW1vcnksIFBhcnNlVHVwbGUsIFJlYWRNZW1vcnksIFJlZ2lzdGVyQ2xpZW50LAorICAgIFJlZ2lzdGVyRXJhc2VRdWV1ZSwgUmVnaXN0ZXJNVEQsIFJlZ2lzdGVyVGltZXIsCisgICAgUmVsZWFzZUNvbmZpZ3VyYXRpb24sIFJlbGVhc2VFeGNsdXNpdmUsIFJlbGVhc2VJTywgUmVsZWFzZUlSUSwKKyAgICBSZWxlYXNlU29ja2V0TWFzaywgUmVsZWFzZVdpbmRvdywgUmVwbGFjZVNvY2tldFNlcnZpY2VzLAorICAgIFJlcXVlc3RDb25maWd1cmF0aW9uLCBSZXF1ZXN0RXhjbHVzaXZlLCBSZXF1ZXN0SU8sIFJlcXVlc3RJUlEsCisgICAgUmVxdWVzdFNvY2tldE1hc2ssIFJlcXVlc3RXaW5kb3csIFJlc2V0Q2FyZCwgUmV0dXJuU1NFbnRyeSwKKyAgICBTZXRFdmVudE1hc2ssIFNldFJlZ2lvbiwgVmFsaWRhdGVDSVMsIFZlbmRvclNwZWNpZmljLAorICAgIFdyaXRlTWVtb3J5LCBCaW5kRGV2aWNlLCBCaW5kTVRELCBSZXBvcnRFcnJvciwKKyAgICBTdXNwZW5kQ2FyZCwgUmVzdW1lQ2FyZCwgRWplY3RDYXJkLCBJbnNlcnRDYXJkLCBSZXBsYWNlQ0lTLAorICAgIEdldEZpcnN0V2luZG93LCBHZXROZXh0V2luZG93LCBHZXRNZW1QYWdlCit9OworY29uc3QgY2hhciAqcGNtY2lhX2Vycm9yX2Z1bmMoaW50IGZ1bmMpOworY29uc3QgY2hhciAqcGNtY2lhX2Vycm9yX3JldChpbnQgcmV0KTsKKworI2RlZmluZSBjc19lcnJvcihwX2RldiwgZnVuYywgcmV0KQkJCVwKKwl7CQkJCQkJXAorCQlkZXZfcHJpbnRrKEtFUk5fTk9USUNFLCAmcF9kZXYtPmRldiwJXAorCQkJICAgIiVzIDogJXNcbiIsCQkJXAorCQkJICAgcGNtY2lhX2Vycm9yX2Z1bmMoZnVuYyksCVwKKwkJCSAgIHBjbWNpYV9lcnJvcl9yZXQocmV0KSk7CVwKKwl9CisKKy8qIENJUyBhY2Nlc3MuCisgKiBVc2UgdGhlIHBjbWNpYV8qIHZlcnNpb25zIGluIFBDTUNJQSBkcml2ZXJzCisgKi8KK2ludCBwY21jaWFfcGFyc2VfdHVwbGUodHVwbGVfdCAqdHVwbGUsIGNpc3BhcnNlX3QgKnBhcnNlKTsKKworaW50IHBjY2FyZF9nZXRfZmlyc3RfdHVwbGUoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMsIHVuc2lnbmVkIGludCBmdW5jdGlvbiwKKwkJCSAgIHR1cGxlX3QgKnR1cGxlKTsKKyNkZWZpbmUgcGNtY2lhX2dldF9maXJzdF90dXBsZShwX2RldiwgdHVwbGUpIFwKKwkJcGNjYXJkX2dldF9maXJzdF90dXBsZShwX2Rldi0+c29ja2V0LCBwX2Rldi0+ZnVuYywgdHVwbGUpCisKK2ludCBwY2NhcmRfZ2V0X25leHRfdHVwbGUoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMsIHVuc2lnbmVkIGludCBmdW5jdGlvbiwKKwkJCSAgdHVwbGVfdCAqdHVwbGUpOworI2RlZmluZSBwY21jaWFfZ2V0X25leHRfdHVwbGUocF9kZXYsIHR1cGxlKSBcCisJCXBjY2FyZF9nZXRfbmV4dF90dXBsZShwX2Rldi0+c29ja2V0LCBwX2Rldi0+ZnVuYywgdHVwbGUpCisKK2ludCBwY2NhcmRfZ2V0X3R1cGxlX2RhdGEoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMsIHR1cGxlX3QgKnR1cGxlKTsKKyNkZWZpbmUgcGNtY2lhX2dldF90dXBsZV9kYXRhKHBfZGV2LCB0dXBsZSkgXAorCQlwY2NhcmRfZ2V0X3R1cGxlX2RhdGEocF9kZXYtPnNvY2tldCwgdHVwbGUpCisKKworLyogbG9vcCBDSVMgZW50cmllcyBmb3IgdmFsaWQgY29uZmlndXJhdGlvbiAqLworaW50IHBjbWNpYV9sb29wX2NvbmZpZyhzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYsCisJCSAgICAgICBpbnQJKCpjb25mX2NoZWNrKQkoc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2LAorCQkJCQkJIGNpc3RwbF9jZnRhYmxlX2VudHJ5X3QgKmNmLAorCQkJCQkJIGNpc3RwbF9jZnRhYmxlX2VudHJ5X3QgKmRmbHQsCisJCQkJCQkgdW5zaWduZWQgaW50IHZjYywKKwkJCQkJCSB2b2lkICpwcml2X2RhdGEpLAorCQkgICAgICAgdm9pZCAqcHJpdl9kYXRhKTsKKworLyogaXMgdGhlIGRldmljZSBzdGlsbCB0aGVyZT8gKi8KK3N0cnVjdCBwY21jaWFfZGV2aWNlICpwY21jaWFfZGV2X3ByZXNlbnQoc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2KTsKKworLyogbG93LWxldmVsIGludGVyZmFjZSByZXNldCAqLworaW50IHBjbWNpYV9yZXNldF9jYXJkKHN0cnVjdCBwY21jaWFfc29ja2V0ICpza3QpOworCisvKiBDSVMgY29uZmlnICovCitpbnQgcGNtY2lhX2FjY2Vzc19jb25maWd1cmF0aW9uX3JlZ2lzdGVyKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldiwKKwkJCQkJIGNvbmZfcmVnX3QgKnJlZyk7CisKKy8qIGRldmljZSBjb25maWd1cmF0aW9uICovCitpbnQgcGNtY2lhX3JlcXVlc3RfaW8oc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2LCBpb19yZXFfdCAqcmVxKTsKK2ludCBwY21jaWFfcmVxdWVzdF9pcnEoc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2LCBpcnFfcmVxX3QgKnJlcSk7CitpbnQgcGNtY2lhX3JlcXVlc3RfY29uZmlndXJhdGlvbihzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYsCisJCQkJIGNvbmZpZ19yZXFfdCAqcmVxKTsKKworaW50IHBjbWNpYV9yZXF1ZXN0X3dpbmRvdyhzdHJ1Y3QgcGNtY2lhX2RldmljZSAqKnBfZGV2LCB3aW5fcmVxX3QgKnJlcSwKKwkJCSAgd2luZG93X2hhbmRsZV90ICp3aCk7CitpbnQgcGNtY2lhX3JlbGVhc2Vfd2luZG93KHdpbmRvd19oYW5kbGVfdCB3aW4pOworCitpbnQgcGNtY2lhX2dldF9tZW1fcGFnZSh3aW5kb3dfaGFuZGxlX3Qgd2luLCBtZW1yZXFfdCAqcmVxKTsKK2ludCBwY21jaWFfbWFwX21lbV9wYWdlKHdpbmRvd19oYW5kbGVfdCB3aW4sIG1lbXJlcV90ICpyZXEpOworCitpbnQgcGNtY2lhX21vZGlmeV9jb25maWd1cmF0aW9uKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldiwgbW9kY29uZl90ICptb2QpOwordm9pZCBwY21jaWFfZGlzYWJsZV9kZXZpY2Uoc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2KTsKIAogI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KKworCisKKy8qIEJlbG93LCB0aGVyZSBhcmUgb25seSBkZWZpbml0aW9ucyB3aGljaCBhcmUgdXNlZCBieQorICogLSB0aGUgUENNQ0lBIGlvY3RsCisgKiAtIGRlcHJlY2F0ZWQgUENNQ0lBIHVzZXJzcGFjZSB0b29scyBvbmx5CisgKgorICogaGVyZSBiZSBkcmFnb25zIC4uLiBoZXJlIGJlIGRyYWdvbnMgLi4uIGhlcmUgYmUgZHJhZ29ucyAuLi4gaGVyZSBiZSBkcmFnCisgKi8KKworI2lmIGRlZmluZWQoQ09ORklHX1BDTUNJQV9JT0NUTCkgfHwgIWRlZmluZWQoX19LRVJORUxfXykKKworI2lmIGRlZmluZWQoX19hcm1fXykgfHwgZGVmaW5lZChfX21pcHNfXykgfHwgZGVmaW5lZChfX2F2cjMyX18pIHx8IFwKKwlkZWZpbmVkKF9fYmZpbl9fKQorLyogVGhpcyAoaW9hZGRyX3QpIGlzIGV4cG9zZWQgdG8gdXNlcnNwYWNlICYgaGVuY2UgY2Fubm90IGJlIGNoYW5nZWQuICovCit0eXBlZGVmIHVfaW50ICAgaW9hZGRyX3Q7CisjZWxzZQordHlwZWRlZiB1X3Nob3J0CWlvYWRkcl90OworI2VuZGlmCisKKy8qIGZvciBBZGp1c3RSZXNvdXJjZUluZm8gKi8KK3R5cGVkZWYgc3RydWN0IGFkanVzdF90IHsKKwl1X2ludAkJCUFjdGlvbjsKKwl1X2ludAkJCVJlc291cmNlOworCXVfaW50CQkJQXR0cmlidXRlczsKKwl1bmlvbiB7CisJCXN0cnVjdCBtZW1vcnkgeworCQkJdV9sb25nCQlCYXNlOworCQkJdV9sb25nCQlTaXplOworCQl9IG1lbW9yeTsKKwkJc3RydWN0IGlvIHsKKwkJCWlvYWRkcl90CUJhc2VQb3J0OworCQkJaW9hZGRyX3QJTnVtUG9ydHM7CisJCQl1X2ludAkJSU9BZGRyTGluZXM7CisJCX0gaW87CisJCXN0cnVjdCBpcnEgeworCQkJdV9pbnQJCUlSUTsKKwkJfSBpcnE7CisJfSByZXNvdXJjZTsKK30gYWRqdXN0X3Q7CisKKy8qIEFjdGlvbiBmaWVsZCAqLworI2RlZmluZSBSRU1PVkVfTUFOQUdFRF9SRVNPVVJDRQkJMQorI2RlZmluZSBBRERfTUFOQUdFRF9SRVNPVVJDRQkJMgorI2RlZmluZSBHRVRfRklSU1RfTUFOQUdFRF9SRVNPVVJDRQkzCisjZGVmaW5lIEdFVF9ORVhUX01BTkFHRURfUkVTT1VSQ0UJNAorLyogUmVzb3VyY2UgZmllbGQgKi8KKyNkZWZpbmUgUkVTX01FTU9SWV9SQU5HRQkJMQorI2RlZmluZSBSRVNfSU9fUkFOR0UJCQkyCisjZGVmaW5lIFJFU19JUlEJCQkJMworLyogQXR0cmlidXRlIGZpZWxkICovCisjZGVmaW5lIFJFU19JUlFfVFlQRQkJCTB4MDMKKyNkZWZpbmUgUkVTX0lSUV9UWVBFX0VYQ0xVU0lWRQkJMAorI2RlZmluZSBSRVNfSVJRX1RZUEVfVElNRQkJMQorI2RlZmluZSBSRVNfSVJRX1RZUEVfRFlOQU1JQwkJMgorI2RlZmluZSBSRVNfSVJRX0NTQwkJCTB4MDQKKyNkZWZpbmUgUkVTX1NIQVJFRAkJCTB4MDgKKyNkZWZpbmUgUkVTX1JFU0VSVkVECQkJMHgxMAorI2RlZmluZSBSRVNfQUxMT0NBVEVECQkJMHgyMAorI2RlZmluZSBSRVNfUkVNT1ZFRAkJCTB4NDAKKworCit0eXBlZGVmIHN0cnVjdCB0dXBsZV9wYXJzZV90IHsKKwl0dXBsZV90CQkJdHVwbGU7CisJY2lzZGF0YV90CQlkYXRhWzI1NV07CisJY2lzcGFyc2VfdAkJcGFyc2U7Cit9IHR1cGxlX3BhcnNlX3Q7CisKK3R5cGVkZWYgc3RydWN0IHdpbl9pbmZvX3QgeworCXdpbmRvd19oYW5kbGVfdAkJaGFuZGxlOworCXdpbl9yZXFfdAkJd2luZG93OworCW1lbXJlcV90CQltYXA7Cit9IHdpbl9pbmZvX3Q7CisKK3R5cGVkZWYgc3RydWN0IGJpbmRfaW5mb190IHsKKwlkZXZfaW5mb190CQlkZXZfaW5mbzsKKwl1X2NoYXIJCQlmdW5jdGlvbjsKKwlzdHJ1Y3QgcGNtY2lhX2RldmljZQkqaW5zdGFuY2U7CisJY2hhcgkJCW5hbWVbREVWX05BTUVfTEVOXTsKKwl1X3Nob3J0CQkJbWFqb3IsIG1pbm9yOworCXZvaWQJCQkqbmV4dDsKK30gYmluZF9pbmZvX3Q7CisKK3R5cGVkZWYgc3RydWN0IG10ZF9pbmZvX3QgeworCWRldl9pbmZvX3QgICAgIAkJZGV2X2luZm87CisJdV9pbnQJCQlBdHRyaWJ1dGVzOworCXVfaW50CQkJQ2FyZE9mZnNldDsKK30gbXRkX2luZm9fdDsKKwordHlwZWRlZiBzdHJ1Y3QgcmVnaW9uX2luZm9fdCB7CisJdV9pbnQJCQlBdHRyaWJ1dGVzOworCXVfaW50CQkJQ2FyZE9mZnNldDsKKwl1X2ludAkJCVJlZ2lvblNpemU7CisJdV9pbnQJCQlBY2Nlc3NTcGVlZDsKKwl1X2ludAkJCUJsb2NrU2l6ZTsKKwl1X2ludAkJCVBhcnRNdWx0aXBsZTsKKwl1X2NoYXIJCQlKZWRlY01mciwgSmVkZWNJbmZvOworCW1lbW9yeV9oYW5kbGVfdAkJbmV4dDsKK30gcmVnaW9uX2luZm9fdDsKKworI2RlZmluZSBSRUdJT05fVFlQRQkJMHgwMDAxCisjZGVmaW5lIFJFR0lPTl9UWVBFX0NNCQkweDAwMDAKKyNkZWZpbmUgUkVHSU9OX1RZUEVfQU0JCTB4MDAwMQorI2RlZmluZSBSRUdJT05fUFJFRkVUQ0gJCTB4MDAwOAorI2RlZmluZSBSRUdJT05fQ0FDSEVBQkxFCTB4MDAxMAorI2RlZmluZSBSRUdJT05fQkFSX01BU0sJCTB4ZTAwMAorI2RlZmluZSBSRUdJT05fQkFSX1NISUZUCTEzCisKKy8qIEZvciBSZXBsYWNlQ0lTICovCit0eXBlZGVmIHN0cnVjdCBjaXNkdW1wX3QgeworCXVfaW50CQkJTGVuZ3RoOworCWNpc2RhdGFfdAkJRGF0YVtDSVNUUExfTUFYX0NJU19TSVpFXTsKK30gY2lzZHVtcF90OworCisvKiBmb3IgR2V0Q29uZmlndXJhdGlvbkluZm8gKi8KK3R5cGVkZWYgc3RydWN0IGNvbmZpZ19pbmZvX3QgeworCXVfY2hhcgkJCUZ1bmN0aW9uOworCXVfaW50CQkJQXR0cmlidXRlczsKKwl1X2ludAkJCVZjYywgVnBwMSwgVnBwMjsKKwl1X2ludAkJCUludFR5cGU7CisJdV9pbnQJCQlDb25maWdCYXNlOworCXVfY2hhcgkJCVN0YXR1cywgUGluLCBDb3B5LCBPcHRpb24sIEV4dFN0YXR1czsKKwl1X2ludAkJCVByZXNlbnQ7CisJdV9pbnQJCQlDYXJkVmFsdWVzOworCXVfaW50CQkJQXNzaWduZWRJUlE7CisJdV9pbnQJCQlJUlFBdHRyaWJ1dGVzOworCWlvYWRkcl90CQlCYXNlUG9ydDE7CisJaW9hZGRyX3QJCU51bVBvcnRzMTsKKwl1X2ludAkJCUF0dHJpYnV0ZXMxOworCWlvYWRkcl90CQlCYXNlUG9ydDI7CisJaW9hZGRyX3QJCU51bVBvcnRzMjsKKwl1X2ludAkJCUF0dHJpYnV0ZXMyOworCXVfaW50CQkJSU9BZGRyTGluZXM7Cit9IGNvbmZpZ19pbmZvX3Q7CisKKy8qIEZvciBWYWxpZGF0ZUNJUyAqLwordHlwZWRlZiBzdHJ1Y3QgY2lzaW5mb190IHsKKwl1X2ludAkJCUNoYWluczsKK30gY2lzaW5mb190OworCit0eXBlZGVmIHN0cnVjdCBjc19zdGF0dXNfdCB7CisJdV9jaGFyCQkJRnVuY3Rpb247CisJZXZlbnRfdCAJCUNhcmRTdGF0ZTsKKwlldmVudF90CQkJU29ja2V0U3RhdGU7Cit9IGNzX3N0YXR1c190OworCit0eXBlZGVmIHVuaW9uIGRzX2lvY3RsX2FyZ190IHsKKwlhZGp1c3RfdAkJYWRqdXN0OworCWNvbmZpZ19pbmZvX3QJCWNvbmZpZzsKKwl0dXBsZV90CQkJdHVwbGU7CisJdHVwbGVfcGFyc2VfdAkJdHVwbGVfcGFyc2U7CisJY2xpZW50X3JlcV90CQljbGllbnRfcmVxOworCWNzX3N0YXR1c190CQlzdGF0dXM7CisJY29uZl9yZWdfdAkJY29uZl9yZWc7CisJY2lzaW5mb190CQljaXNpbmZvOworCXJlZ2lvbl9pbmZvX3QJCXJlZ2lvbjsKKwliaW5kX2luZm9fdAkJYmluZF9pbmZvOworCW10ZF9pbmZvX3QJCW10ZF9pbmZvOworCXdpbl9pbmZvX3QJCXdpbl9pbmZvOworCWNpc2R1bXBfdAkJY2lzZHVtcDsKK30gZHNfaW9jdGxfYXJnX3Q7CisKKyNkZWZpbmUgRFNfQURKVVNUX1JFU09VUkNFX0lORk8JCQlfSU9XUignZCcsICAyLCBhZGp1c3RfdCkKKyNkZWZpbmUgRFNfR0VUX0NPTkZJR1VSQVRJT05fSU5GTwkJX0lPV1IoJ2QnLCAgMywgY29uZmlnX2luZm9fdCkKKyNkZWZpbmUgRFNfR0VUX0ZJUlNUX1RVUExFCQkJX0lPV1IoJ2QnLCAgNCwgdHVwbGVfdCkKKyNkZWZpbmUgRFNfR0VUX05FWFRfVFVQTEUJCQlfSU9XUignZCcsICA1LCB0dXBsZV90KQorI2RlZmluZSBEU19HRVRfVFVQTEVfREFUQQkJCV9JT1dSKCdkJywgIDYsIHR1cGxlX3BhcnNlX3QpCisjZGVmaW5lIERTX1BBUlNFX1RVUExFCQkJCV9JT1dSKCdkJywgIDcsIHR1cGxlX3BhcnNlX3QpCisjZGVmaW5lIERTX1JFU0VUX0NBUkQJCQkJX0lPICAoJ2QnLCAgOCkKKyNkZWZpbmUgRFNfR0VUX1NUQVRVUwkJCQlfSU9XUignZCcsICA5LCBjc19zdGF0dXNfdCkKKyNkZWZpbmUgRFNfQUNDRVNTX0NPTkZJR1VSQVRJT05fUkVHSVNURVIJX0lPV1IoJ2QnLCAxMCwgY29uZl9yZWdfdCkKKyNkZWZpbmUgRFNfVkFMSURBVEVfQ0lTCQkJCV9JT1IgKCdkJywgMTEsIGNpc2luZm9fdCkKKyNkZWZpbmUgRFNfU1VTUEVORF9DQVJECQkJCV9JTyAgKCdkJywgMTIpCisjZGVmaW5lIERTX1JFU1VNRV9DQVJECQkJCV9JTyAgKCdkJywgMTMpCisjZGVmaW5lIERTX0VKRUNUX0NBUkQJCQkJX0lPICAoJ2QnLCAxNCkKKyNkZWZpbmUgRFNfSU5TRVJUX0NBUkQJCQkJX0lPICAoJ2QnLCAxNSkKKyNkZWZpbmUgRFNfR0VUX0ZJUlNUX1JFR0lPTgkJCV9JT1dSKCdkJywgMTYsIHJlZ2lvbl9pbmZvX3QpCisjZGVmaW5lIERTX0dFVF9ORVhUX1JFR0lPTgkJCV9JT1dSKCdkJywgMTcsIHJlZ2lvbl9pbmZvX3QpCisjZGVmaW5lIERTX1JFUExBQ0VfQ0lTCQkJCV9JT1dSKCdkJywgMTgsIGNpc2R1bXBfdCkKKyNkZWZpbmUgRFNfR0VUX0ZJUlNUX1dJTkRPVwkJCV9JT1IgKCdkJywgMTksIHdpbl9pbmZvX3QpCisjZGVmaW5lIERTX0dFVF9ORVhUX1dJTkRPVwkJCV9JT1dSKCdkJywgMjAsIHdpbl9pbmZvX3QpCisjZGVmaW5lIERTX0dFVF9NRU1fUEFHRQkJCQlfSU9XUignZCcsIDIxLCB3aW5faW5mb190KQorCisjZGVmaW5lIERTX0JJTkRfUkVRVUVTVAkJCQlfSU9XUignZCcsIDYwLCBiaW5kX2luZm9fdCkKKyNkZWZpbmUgRFNfR0VUX0RFVklDRV9JTkZPCQkJX0lPV1IoJ2QnLCA2MSwgYmluZF9pbmZvX3QpCisjZGVmaW5lIERTX0dFVF9ORVhUX0RFVklDRQkJCV9JT1dSKCdkJywgNjIsIGJpbmRfaW5mb190KQorI2RlZmluZSBEU19VTkJJTkRfUkVRVUVTVAkJCV9JT1cgKCdkJywgNjMsIGJpbmRfaW5mb190KQorI2RlZmluZSBEU19CSU5EX01URAkJCQlfSU9XUignZCcsIDY0LCBtdGRfaW5mb190KQorCisKKy8qIHVzZWQgaW4gdXNlcnNwYWNlIG9ubHkgKi8KKyNkZWZpbmUgQ1NfSU5fVVNFCQkJMHgxZQorCisjZGVmaW5lIElORk9fTUFTVEVSX0NMSUVOVAkweDAxCisjZGVmaW5lIElORk9fSU9fQ0xJRU5UCQkweDAyCisjZGVmaW5lIElORk9fTVREX0NMSUVOVAkJMHgwNAorI2RlZmluZSBJTkZPX01FTV9DTElFTlQJCTB4MDgKKyNkZWZpbmUgTUFYX05VTV9DTElFTlRTCQkzCisKKyNkZWZpbmUgSU5GT19DQVJEX1NIQVJFCQkweDEwCisjZGVmaW5lIElORk9fQ0FSRF9FWENMCQkweDIwCisKKworI2VuZGlmIC8qICFkZWZpbmVkKF9fS0VSTkVMX18pIHx8IGRlZmluZWQoQ09ORklHX1BDTUNJQV9JT0NUTCkgKi8KKwogI2VuZGlmIC8qIF9MSU5VWF9EU19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL3BjbWNpYS9zcy5oIGIvaW5jbHVkZS9wY21jaWEvc3MuaAppbmRleCBlZDkxOWRkLi45YjRhYzkzIDEwMDY0NAotLS0gYS9pbmNsdWRlL3BjbWNpYS9zcy5oCisrKyBiL2luY2x1ZGUvcGNtY2lhL3NzLmgKQEAgLTUzLDEwICs1MywxMCBAQAogCiAvKiBmb3IgR2V0U29ja2V0LCBTZXRTb2NrZXQgKi8KIHR5cGVkZWYgc3RydWN0IHNvY2tldF9zdGF0ZV90IHsKLSAgICB1X2ludAlmbGFnczsKLSAgICB1X2ludAljc2NfbWFzazsKLSAgICB1X2NoYXIJVmNjLCBWcHA7Ci0gICAgdV9jaGFyCWlvX2lycTsKKwl1X2ludAlmbGFnczsKKwl1X2ludAljc2NfbWFzazsKKwl1X2NoYXIJVmNjLCBWcHA7CisJdV9jaGFyCWlvX2lycTsKIH0gc29ja2V0X3N0YXRlX3Q7CiAKIGV4dGVybiBzb2NrZXRfc3RhdGVfdCBkZWFkX3NvY2tldDsKQEAgLTg2LDc5ICs4NiwyMiBAQAogI2RlZmluZSBIT09LX1BPV0VSX1BSRQkweDAxCiAjZGVmaW5lIEhPT0tfUE9XRVJfUE9TVAkweDAyCiAKLQogdHlwZWRlZiBzdHJ1Y3QgcGNjYXJkX2lvX21hcCB7Ci0gICAgdV9jaGFyCW1hcDsKLSAgICB1X2NoYXIJZmxhZ3M7Ci0gICAgdV9zaG9ydAlzcGVlZDsKLSAgICB1X2ludAlzdGFydCwgc3RvcDsKKwl1X2NoYXIJbWFwOworCXVfY2hhcglmbGFnczsKKwl1X3Nob3J0CXNwZWVkOworCXVfaW50CXN0YXJ0LCBzdG9wOwogfSBwY2NhcmRfaW9fbWFwOwogCiB0eXBlZGVmIHN0cnVjdCBwY2NhcmRfbWVtX21hcCB7Ci0gICAgdV9jaGFyCW1hcDsKLSAgICB1X2NoYXIJZmxhZ3M7Ci0gICAgdV9zaG9ydAlzcGVlZDsKLSAgICB1X2xvbmcJc3RhdGljX3N0YXJ0OwotICAgIHVfaW50CWNhcmRfc3RhcnQ7Ci0gICAgc3RydWN0IHJlc291cmNlICpyZXM7CisJdV9jaGFyCQltYXA7CisJdV9jaGFyCQlmbGFnczsKKwl1X3Nob3J0CQlzcGVlZDsKKwl1X2xvbmcJCXN0YXRpY19zdGFydDsKKwl1X2ludAkJY2FyZF9zdGFydDsKKwlzdHJ1Y3QgcmVzb3VyY2UJKnJlczsKIH0gcGNjYXJkX21lbV9tYXA7CiAKLXR5cGVkZWYgc3RydWN0IGNiX2JyaWRnZV9tYXAgewotICAgIHVfY2hhcgltYXA7Ci0gICAgdV9jaGFyCWZsYWdzOwotICAgIHVfaW50CXN0YXJ0LCBzdG9wOwotfSBjYl9icmlkZ2VfbWFwOwotCi0vKgotICogU29ja2V0IG9wZXJhdGlvbnMuCi0gKi8KLXN0cnVjdCBwY21jaWFfc29ja2V0OwotCi1zdHJ1Y3QgcGNjYXJkX29wZXJhdGlvbnMgewotCWludCAoKmluaXQpKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzb2NrKTsKLQlpbnQgKCpzdXNwZW5kKShzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqc29jayk7Ci0JaW50ICgqZ2V0X3N0YXR1cykoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnNvY2ssIHVfaW50ICp2YWx1ZSk7Ci0JaW50ICgqc2V0X3NvY2tldCkoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnNvY2ssIHNvY2tldF9zdGF0ZV90ICpzdGF0ZSk7Ci0JaW50ICgqc2V0X2lvX21hcCkoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnNvY2ssIHN0cnVjdCBwY2NhcmRfaW9fbWFwICppbyk7Ci0JaW50ICgqc2V0X21lbV9tYXApKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzb2NrLCBzdHJ1Y3QgcGNjYXJkX21lbV9tYXAgKm1lbSk7Ci19OwotCi1zdHJ1Y3QgcGNjYXJkX3Jlc291cmNlX29wcyB7Ci0JaW50CSgqdmFsaWRhdGVfbWVtKQkJKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzKTsKLQlpbnQJKCphZGp1c3RfaW9fcmVnaW9uKQkoc3RydWN0IHJlc291cmNlICpyZXMsCi0JCQkJCSB1bnNpZ25lZCBsb25nIHJfc3RhcnQsCi0JCQkJCSB1bnNpZ25lZCBsb25nIHJfZW5kLAotCQkJCQkgc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMpOwotCXN0cnVjdCByZXNvdXJjZSogKCpmaW5kX2lvKQkodW5zaWduZWQgbG9uZyBiYXNlLCBpbnQgbnVtLAotCQkJCQkgdW5zaWduZWQgbG9uZyBhbGlnbiwKLQkJCQkJIHN0cnVjdCBwY21jaWFfc29ja2V0ICpzKTsKLQlzdHJ1Y3QgcmVzb3VyY2UqICgqZmluZF9tZW0pCSh1bnNpZ25lZCBsb25nIGJhc2UsIHVuc2lnbmVkIGxvbmcgbnVtLAotCQkJCQkgdW5zaWduZWQgbG9uZyBhbGlnbiwgaW50IGxvdywKLQkJCQkJIHN0cnVjdCBwY21jaWFfc29ja2V0ICpzKTsKLQlpbnQJKCphZGRfaW8pCQkoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMsCi0JCQkJCSB1bnNpZ25lZCBpbnQgYWN0aW9uLAotCQkJCQkgdW5zaWduZWQgbG9uZyByX3N0YXJ0LAotCQkJCQkgdW5zaWduZWQgbG9uZyByX2VuZCk7Ci0JaW50CSgqYWRkX21lbSkJCShzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcywKLQkJCQkJIHVuc2lnbmVkIGludCBhY3Rpb24sCi0JCQkJCSB1bnNpZ25lZCBsb25nIHJfc3RhcnQsCi0JCQkJCSB1bnNpZ25lZCBsb25nIHJfZW5kKTsKLQlpbnQJKCppbml0KQkJCShzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcyk7Ci0Jdm9pZAkoKmV4aXQpCQkJKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzKTsKLX07Ci0vKiBTU19DQVBfU1RBVElDX01BUCAqLwotZXh0ZXJuIHN0cnVjdCBwY2NhcmRfcmVzb3VyY2Vfb3BzIHBjY2FyZF9zdGF0aWNfb3BzOwotLyogIVNTX0NBUF9TVEFUSUNfTUFQICovCi1leHRlcm4gc3RydWN0IHBjY2FyZF9yZXNvdXJjZV9vcHMgcGNjYXJkX25vbnN0YXRpY19vcHM7Ci0KLS8qIHN0YXRpYyBtZW0sIGR5bmFtaWMgSU8gc29ja2V0cyAqLwotZXh0ZXJuIHN0cnVjdCBwY2NhcmRfcmVzb3VyY2Vfb3BzIHBjY2FyZF9pb2R5bl9vcHM7Ci0KLS8qCi0gKiAgQ2FsbHMgdG8gc2V0IHVwIGxvdy1sZXZlbCAiU29ja2V0IFNlcnZpY2VzIiBkcml2ZXJzCi0gKi8KLXN0cnVjdCBwY21jaWFfc29ja2V0OwotCiB0eXBlZGVmIHN0cnVjdCBpb193aW5kb3dfdCB7CiAJdV9pbnQJCQlJblVzZSwgQ29uZmlnOwogCXN0cnVjdCByZXNvdXJjZQkJKnJlczsKQEAgLTE3OSwxMCArMTIyLDI1IEBACiAvKiBNYXhpbXVtIG51bWJlciBvZiBtZW1vcnkgd2luZG93cyBwZXIgc29ja2V0ICovCiAjZGVmaW5lIE1BWF9XSU4gNAogCisKKy8qCisgKiBTb2NrZXQgb3BlcmF0aW9ucy4KKyAqLworc3RydWN0IHBjbWNpYV9zb2NrZXQ7CitzdHJ1Y3QgcGNjYXJkX3Jlc291cmNlX29wczsKIHN0cnVjdCBjb25maWdfdDsKIHN0cnVjdCBwY21jaWFfY2FsbGJhY2s7CiBzdHJ1Y3QgdXNlcl9pbmZvX3Q7CiAKK3N0cnVjdCBwY2NhcmRfb3BlcmF0aW9ucyB7CisJaW50ICgqaW5pdCkoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMpOworCWludCAoKnN1c3BlbmQpKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzKTsKKwlpbnQgKCpnZXRfc3RhdHVzKShzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcywgdV9pbnQgKnZhbHVlKTsKKwlpbnQgKCpzZXRfc29ja2V0KShzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcywgc29ja2V0X3N0YXRlX3QgKnN0YXRlKTsKKwlpbnQgKCpzZXRfaW9fbWFwKShzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcywgc3RydWN0IHBjY2FyZF9pb19tYXAgKmlvKTsKKwlpbnQgKCpzZXRfbWVtX21hcCkoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMsIHN0cnVjdCBwY2NhcmRfbWVtX21hcCAqbWVtKTsKK307CisKIHN0cnVjdCBwY21jaWFfc29ja2V0IHsKIAlzdHJ1Y3QgbW9kdWxlCQkJKm93bmVyOwogCXNwaW5sb2NrX3QJCQlsb2NrOwpAQCAtMTk5LDggKzE1Nyw4IEBACiAJaW9fd2luZG93X3QJCQlpb1tNQVhfSU9fV0lOXTsKIAl3aW5kb3dfdAkJCXdpbltNQVhfV0lOXTsKIAlzdHJ1Y3QgbGlzdF9oZWFkCQljaXNfY2FjaGU7Ci0JdV9pbnQJCQkJZmFrZV9jaXNfbGVuOwotCWNoYXIJCQkJKmZha2VfY2lzOworCXNpemVfdAkJCQlmYWtlX2Npc19sZW47CisJdTgJCQkJKmZha2VfY2lzOwogCiAJc3RydWN0IGxpc3RfaGVhZAkJc29ja2V0X2xpc3Q7CiAJc3RydWN0IGNvbXBsZXRpb24JCXNvY2tldF9yZWxlYXNlZDsKQEAgLTIxOCwxMiArMTc2LDEyIEBACiAJc3RydWN0IHBjaV9kZXYgKgkJY2JfZGV2OwogCiAKLQkvKiBzb2NrZXQgc2V0dXAgaXMgZG9uZSBzbyByZXNvdXJjZXMgc2hvdWxkIGJlIGFibGUgdG8gYmUgYWxsb2NhdGVkLiBPbmx5Ci0JICogaWYgc2V0IHRvIDEsIGNhbGxzIHRvIGZpbmRfe2lvLG1lbX1fcmVnaW9uIGFyZSBoYW5kbGVkLCBhbmQgaW5zZXJ0aW9uCi0JICogZXZlbnRzIGFyZSBhY3R1YWxseSBtYW5hZ2VkIGJ5IHRoZSBQQ01DSUEgbGF5ZXIuKi8KKwkvKiBzb2NrZXQgc2V0dXAgaXMgZG9uZSBzbyByZXNvdXJjZXMgc2hvdWxkIGJlIGFibGUgdG8gYmUgYWxsb2NhdGVkLgorCSAqIE9ubHkgaWYgc2V0IHRvIDEsIGNhbGxzIHRvIGZpbmRfe2lvLG1lbX1fcmVnaW9uIGFyZSBoYW5kbGVkLCBhbmQKKwkgKiBpbnNlcnRpbyBldmVudHMgYXJlIGFjdHVhbGx5IG1hbmFnZWQgYnkgdGhlIFBDTUNJQSBsYXllci4qLwogCXU4CQkJCXJlc291cmNlX3NldHVwX2RvbmU6MTsKIAotCS8qIGlzIHNldCB0byBvbmUgaWYgcmVzb3VyY2Ugc2V0dXAgaXMgZG9uZSB1c2luZyBhZGp1c3RfcmVzb3VyY2VfaW5mbygpICovCisJLyogSXQncyBvbGQgaWYgcmVzb3VyY2Ugc2V0dXAgaXMgZG9uZSB1c2luZyBhZGp1c3RfcmVzb3VyY2VfaW5mbygpICovCiAJdTgJCQkJcmVzb3VyY2Vfc2V0dXBfb2xkOjE7CiAJdTgJCQkJcmVzb3VyY2Vfc2V0dXBfbmV3OjE7CiAKQEAgLTIzNiw3NSArMTk0LDEwMSBAQAogCiAJLyogWm9vbSB2aWRlbyBiZWhhdmlvdXIgaXMgc28gY2hpcCBzcGVjaWZpYyBpdHMgbm90IHdvcnRoIGFkZGluZwogCSAgIHRoaXMgdG8gX29wcyAqLwotCXZvaWQgCQkJCSgqem9vbV92aWRlbykoc3RydWN0IHBjbWNpYV9zb2NrZXQgKiwgaW50KTsKKwl2b2lkIAkJCQkoKnpvb21fdmlkZW8pKHN0cnVjdCBwY21jaWFfc29ja2V0ICosCisJCQkJCQkgICAgICBpbnQpOwogCiAJLyogc28gaXMgcG93ZXIgaG9vayAqLwogCWludCAoKnBvd2VyX2hvb2spKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzb2NrLCBpbnQgb3BlcmF0aW9uKTsKLSNpZmRlZiBDT05GSUdfQ0FSREJVUworCiAJLyogYWxsb3dzIHR1bmluZyB0aGUgQ0IgYnJpZGdlIGJlZm9yZSBsb2FkaW5nIGRyaXZlciBmb3IgdGhlIENCIGNhcmQgKi8KKyNpZmRlZiBDT05GSUdfQ0FSREJVUwogCXZvaWQgKCp0dW5lX2JyaWRnZSkoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnNvY2ssIHN0cnVjdCBwY2lfYnVzICpidXMpOwogI2VuZGlmCiAKIAkvKiBzdGF0ZSB0aHJlYWQgKi8KLQlzdHJ1Y3QgbXV0ZXgJCQlza3RfbXV0ZXg7CS8qIHByb3RlY3RzIHNvY2tldCBoL3cgc3RhdGUgKi8KLQogCXN0cnVjdCB0YXNrX3N0cnVjdAkJKnRocmVhZDsKIAlzdHJ1Y3QgY29tcGxldGlvbgkJdGhyZWFkX2RvbmU7Ci0Jc3BpbmxvY2tfdAkJCXRocmVhZF9sb2NrOwkvKiBwcm90ZWN0cyB0aHJlYWRfZXZlbnRzICovCiAJdW5zaWduZWQgaW50CQkJdGhyZWFkX2V2ZW50czsKKwkvKiBwcm90ZWN0cyBzb2NrZXQgaC93IHN0YXRlICovCisJc3RydWN0IG11dGV4CQkJc2t0X211dGV4OworCS8qIHByb3RlY3RzIHRocmVhZF9ldmVudHMgKi8KKwlzcGlubG9ja190CQkJdGhyZWFkX2xvY2s7CiAKIAkvKiBwY21jaWEgKDE2LWJpdCkgKi8KIAlzdHJ1Y3QgcGNtY2lhX2NhbGxiYWNrCQkqY2FsbGJhY2s7CiAKICNpZiBkZWZpbmVkKENPTkZJR19QQ01DSUEpIHx8IGRlZmluZWQoQ09ORklHX1BDTUNJQV9NT0RVTEUpCi0Jc3RydWN0IGxpc3RfaGVhZAkJZGV2aWNlc19saXN0OwkvKiAgUENNQ0lBIGRldmljZXMgKi8KLQl1OAkJCQlkZXZpY2VfY291bnQ7CS8qIHRoZSBudW1iZXIgb2YgZGV2aWNlcywgdXNlZAotCQkJCQkJCSAqIG9ubHkgaW50ZXJuYWxseSBhbmQgc3ViamVjdAotCQkJCQkJCSAqIHRvIGluY29ycmVjdG5lc3MgYW5kIGNoYW5nZSAqLworCS8qIFRoZSBmb2xsb3dpbmcgZWxlbWVudHMgcmVmZXIgdG8gMTYtYml0IFBDTUNJQSBkZXZpY2VzIGluc2VydGVkCisJICogaW50byB0aGUgc29ja2V0ICovCisJc3RydWN0IGxpc3RfaGVhZAkJZGV2aWNlc19saXN0OwogCisJLyogdGhlIG51bWJlciBvZiBkZXZpY2VzLCB1c2VkIG9ubHkgaW50ZXJuYWxseSBhbmQgc3ViamVjdCB0bworCSAqIGluY29ycmVjdG5lc3MgYW5kIGNoYW5nZSAqLworCXU4CQkJCWRldmljZV9jb3VudDsKKworCS8qIDE2LWJpdCBzdGF0ZTogKi8KIAlzdHJ1Y3QgewotCQl1OAkJCXByZXNlbnQ6MSwJLyogUENNQ0lBIGNhcmQgaXMgcHJlc2VudCBpbiBzb2NrZXQgKi8KLQkJCQkJYnVzeToxLAkJLyogIm1hc3RlciIgaW9jdGwgaXMgdXNlZCAqLwotCQkJCQlkZWFkOjEsCQkvKiBwY21jaWEgbW9kdWxlIGlzIGJlaW5nIHVubG9hZGVkICovCi0JCQkJCWRldmljZV9hZGRfcGVuZGluZzoxLCAvKiBhIG11bHRpZnVuY3Rpb24tZGV2aWNlCi0JCQkJCQkJICAgICAgICogYWRkIGV2ZW50IGlzIHBlbmRpbmcgKi8KLQkJCQkJbWZjX3BmYzoxLAkvKiB0aGUgcGVuZGluZyBldmVudCBhZGRzIGEgbWZjICgxKSBvciBwZmMgKDApICovCi0JCQkJCXJlc2VydmVkOjM7Ci0JfSAJCQkJcGNtY2lhX3N0YXRlOworCQkvKiBQQ01DSUEgY2FyZCBpcyBwcmVzZW50IGluIHNvY2tldCAqLworCQl1OAkJCXByZXNlbnQ6MTsKKwkJLyogIm1hc3RlciIgaW9jdGwgaXMgdXNlZCAqLworCQl1OAkJCWJ1c3k6MTsKKwkJLyogcGNtY2lhIG1vZHVsZSBpcyBiZWluZyB1bmxvYWRlZCAqLworCQl1OAkJCWRlYWQ6MTsKKwkJLyogYSBtdWx0aWZ1bmN0aW9uLWRldmljZSBhZGQgZXZlbnQgaXMgcGVuZGluZyAqLworCQl1OAkJCWRldmljZV9hZGRfcGVuZGluZzoxOworCQkvKiB0aGUgcGVuZGluZyBldmVudCBhZGRzIGEgbWZjICgxKSBvciBwZmMgKDApICovCisJCXU4CQkJbWZjX3BmYzoxOwogCi0Jc3RydWN0IHdvcmtfc3RydWN0CQlkZXZpY2VfYWRkOwkvKiBmb3IgYWRkaW5nIGZ1cnRoZXIgcHNldWRvLW11bHRpZnVuY3Rpb24KLQkJCQkJCQkgKiBkZXZpY2VzICovCisJCXU4CQkJcmVzZXJ2ZWQ6MzsKKwl9IHBjbWNpYV9zdGF0ZTsKKworCisJLyogZm9yIGFkZGluZyBmdXJ0aGVyIHBzZXVkby1tdWx0aWZ1bmN0aW9uIGRldmljZXMgKi8KKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QJCWRldmljZV9hZGQ7CiAKICNpZmRlZiBDT05GSUdfUENNQ0lBX0lPQ1RMCiAJc3RydWN0IHVzZXJfaW5mb190CQkqdXNlcjsKIAl3YWl0X3F1ZXVlX2hlYWRfdAkJcXVldWU7Ci0jZW5kaWYKLSNlbmRpZgorI2VuZGlmIC8qIENPTkZJR19QQ01DSUFfSU9DVEwgKi8KKyNlbmRpZiAvKiBDT05GSUdfUENNQ0lBICovCiAKIAkvKiBjYXJkYnVzICgzMi1iaXQpICovCiAjaWZkZWYgQ09ORklHX0NBUkRCVVMKIAlzdHJ1Y3QgcmVzb3VyY2UgKgkJY2JfY2lzX3JlczsKIAl2b2lkIF9faW9tZW0JCQkqY2JfY2lzX3ZpcnQ7Ci0jZW5kaWYKKyNlbmRpZiAvKiBDT05GSUdfQ0FSREJVUyAqLwogCiAJLyogc29ja2V0IGRldmljZSAqLwogCXN0cnVjdCBkZXZpY2UJCQlkZXY7Ci0Jdm9pZAkJCQkqZHJpdmVyX2RhdGE7CS8qIGRhdGEgaW50ZXJuYWwgdG8gdGhlIHNvY2tldCBkcml2ZXIgKi8KLQorCS8qIGRhdGEgaW50ZXJuYWwgdG8gdGhlIHNvY2tldCBkcml2ZXIgKi8KKwl2b2lkCQkJCSpkcml2ZXJfZGF0YTsKIH07CiAKLXN0cnVjdCBwY21jaWFfc29ja2V0ICogcGNtY2lhX2dldF9zb2NrZXRfYnlfbnIodW5zaWduZWQgaW50IG5yKTsKIAotCi0KLWV4dGVybiB2b2lkIHBjbWNpYV9wYXJzZV9ldmVudHMoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnNvY2tldCwgdW5zaWduZWQgaW50IGV2ZW50cyk7Ci1leHRlcm4gaW50IHBjbWNpYV9yZWdpc3Rlcl9zb2NrZXQoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnNvY2tldCk7Ci1leHRlcm4gdm9pZCBwY21jaWFfdW5yZWdpc3Rlcl9zb2NrZXQoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnNvY2tldCk7Ci0KLWV4dGVybiBzdHJ1Y3QgY2xhc3MgcGNtY2lhX3NvY2tldF9jbGFzczsKKy8qIHNvY2tldCBkcml2ZXJzIG11c3QgZGVmaW5lIHRoZSByZXNvdXJjZSBvcGVyYXRpb25zIHR5cGUgdGhleSB1c2UuIFRoZXJlCisgKiBhcmUgdGhyZWUgb3B0aW9uczoKKyAqIC0gcGNjYXJkX3N0YXRpY19vcHMJCWlvbWVtIGFuZCBpb3BvcnQgYXJlYXMgYXJlIGFzc2lnbmVkIHN0YXRpY2FsbHkKKyAqIC0gcGNjYXJkX2lvZHluX29wcwkJaW9tZW0gYXJlYXMgaXMgYXNzaWduZWQgc3RhdGljYWxseSwgaW9wb3J0CisgKgkJCQlhcmVhcyBkeW5hbWljYWxseQorICogLSBwY2NhcmRfbm9uc3RhdGljX29wcwlpb21lbSBhbmQgaW9wb3J0IGFyZWFzIGFyZSBhc3NpZ25lZCBkeW5hbWljYWxseS4KKyAqCQkJCUlmIHRoaXMgb3B0aW9uIGlzIHNlbGVjdGVkLCB1c2UKKyAqCQkJCSJzZWxlY3QgUENDQVJEX05PTlNUQVRJQyIgaW4gS2NvbmZpZy4KKyAqLworZXh0ZXJuIHN0cnVjdCBwY2NhcmRfcmVzb3VyY2Vfb3BzIHBjY2FyZF9zdGF0aWNfb3BzOworZXh0ZXJuIHN0cnVjdCBwY2NhcmRfcmVzb3VyY2Vfb3BzIHBjY2FyZF9pb2R5bl9vcHM7CitleHRlcm4gc3RydWN0IHBjY2FyZF9yZXNvdXJjZV9vcHMgcGNjYXJkX25vbnN0YXRpY19vcHM7CiAKIC8qIHNvY2tldCBkcml2ZXJzIGFyZSBleHBlY3RlZCB0byB1c2UgdGhlc2UgY2FsbGJhY2tzIGluIHRoZWlyIC5kcnYgc3RydWN0ICovCiBleHRlcm4gaW50IHBjbWNpYV9zb2NrZXRfZGV2X3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpOwogZXh0ZXJuIGludCBwY21jaWFfc29ja2V0X2Rldl9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KTsKIAorLyogc29ja2V0IGRyaXZlcnMgdXNlIHRoaXMgY2FsbGJhY2sgaW4gdGhlaXIgSVJRIGhhbmRsZXIgKi8KK2V4dGVybiB2b2lkIHBjbWNpYV9wYXJzZV9ldmVudHMoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnNvY2tldCwKKwkJCQl1bnNpZ25lZCBpbnQgZXZlbnRzKTsKKworLyogdG8gcmVnaXN0ZXIgYW5kIHVucmVnaXN0ZXIgYSBzb2NrZXQgKi8KK2V4dGVybiBpbnQgcGNtY2lhX3JlZ2lzdGVyX3NvY2tldChzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqc29ja2V0KTsKK2V4dGVybiB2b2lkIHBjbWNpYV91bnJlZ2lzdGVyX3NvY2tldChzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqc29ja2V0KTsKKworCiAjZW5kaWYgLyogX0xJTlVYX1NTX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvc2NzaS9pc2NzaV9pZi5oIGIvaW5jbHVkZS9zY3NpL2lzY3NpX2lmLmgKaW5kZXggMTZiZTEyZi4uMGM5NTE0ZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9zY3NpL2lzY3NpX2lmLmgKKysrIGIvaW5jbHVkZS9zY3NpL2lzY3NpX2lmLmgKQEAgLTIxMyw2ICsyMTMsOCBAQAogCUlTQ1NJX0VSUl9EQVRBX0RHU1QJCT0gSVNDU0lfRVJSX0JBU0UgKyAxNSwKIAlJU0NTSV9FUlJfUEFSQU1fTk9UX0ZPVU5ECT0gSVNDU0lfRVJSX0JBU0UgKyAxNiwKIAlJU0NTSV9FUlJfTk9fU0NTSV9DTUQJCT0gSVNDU0lfRVJSX0JBU0UgKyAxNywKKwlJU0NTSV9FUlJfSU5WQUxJRF9IT1NUCQk9IElTQ1NJX0VSUl9CQVNFICsgMTgsCisJSVNDU0lfRVJSX1hNSVRfRkFJTEVECQk9IElTQ1NJX0VSUl9CQVNFICsgMTksCiB9OwogCiAvKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zY3NpL2xpYmlzY3NpLmggYi9pbmNsdWRlL3Njc2kvbGliaXNjc2kuaAppbmRleCA1ZTc1YmI3Li42MWU1M2YxIDEwMDY0NAotLS0gYS9pbmNsdWRlL3Njc2kvbGliaXNjc2kuaAorKysgYi9pbmNsdWRlL3Njc2kvbGliaXNjc2kuaApAQCAtMjg3LDYgKzI4NywxMSBAQAogCXN0cnVjdCBpc2NzaV9wb29sCWNtZHBvb2w7CS8qIFBEVSdzIHBvb2wgKi8KIH07CiAKK2VudW0geworCUlTQ1NJX0hPU1RfU0VUVVAsCisJSVNDU0lfSE9TVF9SRU1PVkVELAorfTsKKwogc3RydWN0IGlzY3NpX2hvc3QgewogCWNoYXIJCQkqaW5pdGlhdG9ybmFtZTsKIAkvKiBodyBhZGRyZXNzIG9yIG5ldGRldiBpc2NzaSBjb25uZWN0aW9uIGlzIGJvdW5kIHRvICovCkBAIC0yOTUsNiArMzAwLDEyIEBACiAJLyogbG9jYWwgYWRkcmVzcyAqLwogCWludAkJCWxvY2FsX3BvcnQ7CiAJY2hhcgkJCWxvY2FsX2FkZHJlc3NbSVNDU0lfQUREUkVTU19CVUZfTEVOXTsKKworCXdhaXRfcXVldWVfaGVhZF90CXNlc3Npb25fcmVtb3ZhbF93cTsKKwkvKiBwcm90ZWN0cyBzZXNzaW9ucyBhbmQgc3RhdGUgKi8KKwlzcGlubG9ja190CQlsb2NrOworCWludAkJCW51bV9zZXNzaW9uczsKKwlpbnQJCQlzdGF0ZTsKIH07CiAKIC8qCkBAIC0zMDIsNyArMzEzLDcgQEAKICAqLwogZXh0ZXJuIGludCBpc2NzaV9jaGFuZ2VfcXVldWVfZGVwdGgoc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2LCBpbnQgZGVwdGgpOwogZXh0ZXJuIGludCBpc2NzaV9laF9hYm9ydChzdHJ1Y3Qgc2NzaV9jbW5kICpzYyk7Ci1leHRlcm4gaW50IGlzY3NpX2VoX2hvc3RfcmVzZXQoc3RydWN0IHNjc2lfY21uZCAqc2MpOworZXh0ZXJuIGludCBpc2NzaV9laF90YXJnZXRfcmVzZXQoc3RydWN0IHNjc2lfY21uZCAqc2MpOwogZXh0ZXJuIGludCBpc2NzaV9laF9kZXZpY2VfcmVzZXQoc3RydWN0IHNjc2lfY21uZCAqc2MpOwogZXh0ZXJuIGludCBpc2NzaV9xdWV1ZWNvbW1hbmQoc3RydWN0IHNjc2lfY21uZCAqc2MsCiAJCQkgICAgICB2b2lkICgqZG9uZSkoc3RydWN0IHNjc2lfY21uZCAqKSk7CkBAIC0zNTEsNiArMzYyLDggQEAKIGV4dGVybiBpbnQgaXNjc2lfY29ubl9iaW5kKHN0cnVjdCBpc2NzaV9jbHNfc2Vzc2lvbiAqLCBzdHJ1Y3QgaXNjc2lfY2xzX2Nvbm4gKiwKIAkJCSAgIGludCk7CiBleHRlcm4gdm9pZCBpc2NzaV9jb25uX2ZhaWx1cmUoc3RydWN0IGlzY3NpX2Nvbm4gKmNvbm4sIGVudW0gaXNjc2lfZXJyIGVycik7CitleHRlcm4gdm9pZCBpc2NzaV9zZXNzaW9uX2ZhaWx1cmUoc3RydWN0IGlzY3NpX2Nsc19zZXNzaW9uICpjbHNfc2Vzc2lvbiwKKwkJCQkgIGVudW0gaXNjc2lfZXJyIGVycik7CiBleHRlcm4gaW50IGlzY3NpX2Nvbm5fZ2V0X3BhcmFtKHN0cnVjdCBpc2NzaV9jbHNfY29ubiAqY2xzX2Nvbm4sCiAJCQkJZW51bSBpc2NzaV9wYXJhbSBwYXJhbSwgY2hhciAqYnVmKTsKIGV4dGVybiB2b2lkIGlzY3NpX3N1c3BlbmRfdHgoc3RydWN0IGlzY3NpX2Nvbm4gKmNvbm4pOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zY3NpL3Njc2kuaCBiL2luY2x1ZGUvc2NzaS9zY3NpLmgKaW5kZXggMTkyZjg3MS4uYTEwOTE2NSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9zY3NpL3Njc2kuaAorKysgYi9pbmNsdWRlL3Njc2kvc2NzaS5oCkBAIC0zODEsNiArMzgxLDExIEBACiAjZGVmaW5lIERJRF9JTU1fUkVUUlkgICAweDBjCS8qIFJldHJ5IHdpdGhvdXQgZGVjcmVtZW50aW5nIHJldHJ5IGNvdW50ICAqLwogI2RlZmluZSBESURfUkVRVUVVRQkweDBkCS8qIFJlcXVldWUgY29tbWFuZCAobm8gaW1tZWRpYXRlIHJldHJ5KSBhbHNvCiAJCQkJICogd2l0aG91dCBkZWNyZW1lbnRpbmcgdGhlIHJldHJ5IGNvdW50CSAgICovCisjZGVmaW5lIERJRF9UUkFOU1BPUlRfRElTUlVQVEVEIDB4MGUgLyogVHJhbnNwb3J0IGVycm9yIGRpc3J1cHRlZCBleGVjdXRpb24KKwkJCQkgICAgICAqIGFuZCB0aGUgZHJpdmVyIGJsb2NrZWQgdGhlIHBvcnQgdG8KKwkJCQkgICAgICAqIHJlY292ZXIgdGhlIGxpbmsuIFRyYW5zcG9ydCBjbGFzcyB3aWxsCisJCQkJICAgICAgKiByZXRyeSBvciBmYWlsIElPICovCisjZGVmaW5lIERJRF9UUkFOU1BPUlRfRkFJTEZBU1QJMHgwZiAvKiBUcmFuc3BvcnQgY2xhc3MgZmFzdGZhaWxlZCB0aGUgaW8gKi8KICNkZWZpbmUgRFJJVkVSX09LICAgICAgIDB4MDAJLyogRHJpdmVyIHN0YXR1cyAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAKIC8qCkBAIC00MjYsNiArNDMxLDcgQEAKICNkZWZpbmUgU0NTSV9NTFFVRVVFX0hPU1RfQlVTWSAgIDB4MTA1NQogI2RlZmluZSBTQ1NJX01MUVVFVUVfREVWSUNFX0JVU1kgMHgxMDU2CiAjZGVmaW5lIFNDU0lfTUxRVUVVRV9FSF9SRVRSWSAgICAweDEwNTcKKyNkZWZpbmUgU0NTSV9NTFFVRVVFX1RBUkdFVF9CVVNZIDB4MTA1OAogCiAvKgogICogIFVzZSB0aGVzZSB0byBzZXBhcmF0ZSBzdGF0dXMgbXNnIGFuZCBvdXIgYnl0ZXMKZGlmZiAtLWdpdCBhL2luY2x1ZGUvc2NzaS9zY3NpX2RldmljZS5oIGIvaW5jbHVkZS9zY3NpL3Njc2lfZGV2aWNlLmgKaW5kZXggYjQ5ZTcyNS4uYTM3YTgxNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9zY3NpL3Njc2lfZGV2aWNlLmgKKysrIGIvaW5jbHVkZS9zY3NpL3Njc2lfZGV2aWNlLmgKQEAgLTIzOCw2ICsyMzgsMTYgQEAKIAkJCQkJCSAqIGZvciB0aGUgZGV2aWNlIGF0IGEgdGltZS4gKi8KIAl1bnNpZ25lZCBpbnQJCXBkdF8xZl9mb3Jfbm9fbHVuOwkvKiBQRFQgPSAweDFmICovCiAJCQkJCQkvKiBtZWFucyBubyBsdW4gcHJlc2VudCAqLworCS8qIGNvbW1hbmRzIGFjdHVhbGx5IGFjdGl2ZSBvbiBMTEQuIHByb3RlY3RlZCBieSBob3N0IGxvY2suICovCisJdW5zaWduZWQgaW50CQl0YXJnZXRfYnVzeTsKKwkvKgorCSAqIExMRHMgc2hvdWxkIHNldCB0aGlzIGluIHRoZSBzbGF2ZV9hbGxvYyBob3N0IHRlbXBsYXRlIGNhbGxvdXQuCisJICogSWYgc2V0IHRvIHplcm8gdGhlbiB0aGVyZSBpcyBub3QgbGltaXQuCisJICovCisJdW5zaWduZWQgaW50CQljYW5fcXVldWU7CisJdW5zaWduZWQgaW50CQl0YXJnZXRfYmxvY2tlZDsKKwl1bnNpZ25lZCBpbnQJCW1heF90YXJnZXRfYmxvY2tlZDsKKyNkZWZpbmUgU0NTSV9ERUZBVUxUX1RBUkdFVF9CTE9DS0VECTMKIAogCWNoYXIJCQlzY3NpX2xldmVsOwogCXN0cnVjdCBleGVjdXRlX3dvcmsJZXc7CmRpZmYgLS1naXQgYS9pbmNsdWRlL3Njc2kvc2NzaV90cmFuc3BvcnRfZmMuaCBiL2luY2x1ZGUvc2NzaS9zY3NpX3RyYW5zcG9ydF9mYy5oCmluZGV4IDIxMDE4YTQuLjQ5ZDg5MTMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvc2NzaS9zY3NpX3RyYW5zcG9ydF9mYy5oCisrKyBiL2luY2x1ZGUvc2NzaS9zY3NpX3RyYW5zcG9ydF9mYy5oCkBAIC0zNTcsNiArMzU3LDcgQEAKIC8qIGJpdCBmaWVsZCB2YWx1ZXMgZm9yIHN0cnVjdCBmY19ycG9ydCAiZmxhZ3MiIGZpZWxkOiAqLwogI2RlZmluZSBGQ19SUE9SVF9ERVZMT1NTX1BFTkRJTkcJMHgwMQogI2RlZmluZSBGQ19SUE9SVF9TQ0FOX1BFTkRJTkcJCTB4MDIKKyNkZWZpbmUgRkNfUlBPUlRfRkFTVF9GQUlMX1RJTUVET1VUCTB4MDMKIAogI2RlZmluZQlkZXZfdG9fcnBvcnQoZCkJCQkJXAogCWNvbnRhaW5lcl9vZihkLCBzdHJ1Y3QgZmNfcnBvcnQsIGRldikKQEAgLTY3OCwxMiArNjc5LDE1IEBACiAJCWlmIChycG9ydC0+cm9sZXMgJiBGQ19QT1JUX1JPTEVfRkNQX1RBUkdFVCkKIAkJCXJlc3VsdCA9IDA7CiAJCWVsc2UgaWYgKHJwb3J0LT5mbGFncyAmIEZDX1JQT1JUX0RFVkxPU1NfUEVORElORykKLQkJCXJlc3VsdCA9IERJRF9JTU1fUkVUUlkgPDwgMTY7CisJCQlyZXN1bHQgPSBESURfVFJBTlNQT1JUX0RJU1JVUFRFRCA8PCAxNjsKIAkJZWxzZQogCQkJcmVzdWx0ID0gRElEX05PX0NPTk5FQ1QgPDwgMTY7CiAJCWJyZWFrOwogCWNhc2UgRkNfUE9SVFNUQVRFX0JMT0NLRUQ6Ci0JCXJlc3VsdCA9IERJRF9JTU1fUkVUUlkgPDwgMTY7CisJCWlmIChycG9ydC0+ZmxhZ3MgJiBGQ19SUE9SVF9GQVNUX0ZBSUxfVElNRURPVVQpCisJCQlyZXN1bHQgPSBESURfVFJBTlNQT1JUX0ZBSUxGQVNUIDw8IDE2OworCQllbHNlCisJCQlyZXN1bHQgPSBESURfVFJBTlNQT1JUX0RJU1JVUFRFRCA8PCAxNjsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcmVzdWx0ID0gRElEX05PX0NPTk5FQ1QgPDwgMTY7CmRpZmYgLS1naXQgYS9pbmNsdWRlL3Njc2kvc2NzaV90cmFuc3BvcnRfaXNjc2kuaCBiL2luY2x1ZGUvc2NzaS9zY3NpX3RyYW5zcG9ydF9pc2NzaS5oCmluZGV4IDhiNmM5MWQuLmM2NjdjYzMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvc2NzaS9zY3NpX3RyYW5zcG9ydF9pc2NzaS5oCisrKyBiL2luY2x1ZGUvc2NzaS9zY3NpX3RyYW5zcG9ydF9pc2NzaS5oCkBAIC0xMzUsNyArMTM1LDggQEAKIC8qCiAgKiBjb250cm9sIHBsYW5lIHVwY2FsbHMKICAqLwotZXh0ZXJuIHZvaWQgaXNjc2lfY29ubl9lcnJvcihzdHJ1Y3QgaXNjc2lfY2xzX2Nvbm4gKmNvbm4sIGVudW0gaXNjc2lfZXJyIGVycm9yKTsKK2V4dGVybiB2b2lkIGlzY3NpX2Nvbm5fZXJyb3JfZXZlbnQoc3RydWN0IGlzY3NpX2Nsc19jb25uICpjb25uLAorCQkJCSAgIGVudW0gaXNjc2lfZXJyIGVycm9yKTsKIGV4dGVybiBpbnQgaXNjc2lfcmVjdl9wZHUoc3RydWN0IGlzY3NpX2Nsc19jb25uICpjb25uLCBzdHJ1Y3QgaXNjc2lfaGRyICpoZHIsCiAJCQkgIGNoYXIgKmRhdGEsIHVpbnQzMl90IGRhdGFfc2l6ZSk7CiAKQEAgLTIwNyw3ICsyMDgsNyBAQAogc3RydWN0IGlzY3NpX2VuZHBvaW50IHsKIAl2b2lkICpkZF9kYXRhOwkJCS8qIExMRCBwcml2YXRlIGRhdGEgKi8KIAlzdHJ1Y3QgZGV2aWNlIGRldjsKLQl1bnNpZ25lZCBpbnQgaWQ7CisJdWludDY0X3QgaWQ7CiB9OwogCiAvKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zb3VuZC9zb2MtZGFwbS5oIGIvaW5jbHVkZS9zb3VuZC9zb2MtZGFwbS5oCmluZGV4IGMxYjI2ZmMuLmNhNjk5YTMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvc291bmQvc29jLWRhcG0uaAorKysgYi9pbmNsdWRlL3NvdW5kL3NvYy1kYXBtLmgKQEAgLTI0MCw2ICsyNDAsNyBAQAogLyogZGFwbSBhdWRpbyBwaW4gY29udHJvbCBhbmQgc3RhdHVzICovCiBpbnQgc25kX3NvY19kYXBtX2VuYWJsZV9waW4oc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLCBjaGFyICpwaW4pOwogaW50IHNuZF9zb2NfZGFwbV9kaXNhYmxlX3BpbihzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsIGNoYXIgKnBpbik7CitpbnQgc25kX3NvY19kYXBtX25jX3BpbihzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsIGNoYXIgKnBpbik7CiBpbnQgc25kX3NvY19kYXBtX2dldF9waW5fc3RhdHVzKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywgY2hhciAqcGluKTsKIGludCBzbmRfc29jX2RhcG1fc3luYyhzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL3NvdW5kL3RlYTU3NXgtdHVuZXIuaCBiL2luY2x1ZGUvc291bmQvdGVhNTc1eC10dW5lci5oCmluZGV4IGI2MmNlM2UuLmI2ODcwY2IgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvc291bmQvdGVhNTc1eC10dW5lci5oCisrKyBiL2luY2x1ZGUvc291bmQvdGVhNTc1eC10dW5lci5oCkBAIC00Myw2ICs0Myw3IEBACiAJdW5zaWduZWQgaW50IGZyZXFfZml4dXA7CS8qIGNyeXN0YWwgb25ib2FyZCAqLwogCXVuc2lnbmVkIGludCB2YWw7CQkvKiBodyB2YWx1ZSAqLwogCXVuc2lnbmVkIGxvbmcgZnJlcTsJCS8qIGZyZXF1ZW5jeSAqLworCXVuc2lnbmVkIGxvbmcgaW5fdXNlOwkJLyogc2V0IGlmIHRoZSBkZXZpY2UgaXMgaW4gdXNlICovCiAJc3RydWN0IHNuZF90ZWE1NzV4X29wcyAqb3BzOwogCXZvaWQgKnByaXZhdGVfZGF0YTsKIH07CmRpZmYgLS1naXQgYS9pbmNsdWRlL3ZpZGVvL2N5YmxhZmIuaCBiL2luY2x1ZGUvdmlkZW8vY3libGFmYi5oCmluZGV4IDcxNzQ0MDUuLmQzYzFkNGUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvdmlkZW8vY3libGFmYi5oCisrKyBiL2luY2x1ZGUvdmlkZW8vY3libGFmYi5oCkBAIC00LDcgKzQsNyBAQAogI2VuZGlmCiAKICNpZiBDWUJMQUZCX0RFQlVHCi0jZGVmaW5lIGRlYnVnKGYsYS4uLikJcHJpbnRrKCIlczoiIGYsICBfX0ZVTkNUSU9OX18gLCAjIyBhKTsKKyNkZWZpbmUgZGVidWcoZixhLi4uKQlwcmludGsoIiVzOiIgZiwgIF9fZnVuY19fICwgIyMgYSk7CiAjZWxzZQogI2RlZmluZSBkZWJ1ZyhmLGEuLi4pCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvdmlkZW8vbmVvbWFnaWMuaCBiL2luY2x1ZGUvdmlkZW8vbmVvbWFnaWMuaAppbmRleCAzODkxMGRhLi4wOGI2NjM3IDEwMDY0NAotLS0gYS9pbmNsdWRlL3ZpZGVvL25lb21hZ2ljLmgKKysrIGIvaW5jbHVkZS92aWRlby9uZW9tYWdpYy5oCkBAIC0xMjMsNyArMTIzLDYgQEAKIAogc3RydWN0IG5lb2ZiX3BhciB7CiAJc3RydWN0IHZnYXN0YXRlIHN0YXRlOwotCXN0cnVjdCBtdXRleCBvcGVuX2xvY2s7CiAJdW5zaWduZWQgaW50IHJlZl9jb3VudDsKIAogCXVuc2lnbmVkIGNoYXIgTWlzY091dFJlZzsJLyogTWlzYyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS92aWRlby9yYWRlb24uaCBiL2luY2x1ZGUvdmlkZW8vcmFkZW9uLmgKaW5kZXggMDk5ZmZhNS4uZDVkY2FmMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS92aWRlby9yYWRlb24uaAorKysgYi9pbmNsdWRlL3ZpZGVvL3JhZGVvbi5oCkBAIC0zODYsNyArMzg2LDcgQEAKICNkZWZpbmUgU0NfQk9UVE9NX1JJR0hUICAgICAgICAgICAgICAgICAgICAgICAgMHgxNkYwICAKICNkZWZpbmUgU1JDX1NDX0JPVFRPTV9SSUdIVCAgICAgICAgICAgICAgICAgICAgMHgxNkY0ICAKICNkZWZpbmUgUkIyRF9EU1RDQUNIRV9NT0RFCQkgICAgICAgMHgzNDI4Ci0jZGVmaW5lIFJCMkRfRFNUQ0FDSEVfQ1RMU1RBVAkJICAgICAgIDB4MzQyQworI2RlZmluZSBSQjJEX0RTVENBQ0hFX0NUTFNUQVRfYnJva2VuCSAgICAgICAweDM0MkMgLyogZG8gbm90IHVzZSAqLwogI2RlZmluZSBMVkRTX0dFTl9DTlRMCQkJICAgICAgIDB4MDJkMAogI2RlZmluZSBMVkRTX1BMTF9DTlRMCQkJICAgICAgIDB4MDJkNAogI2RlZmluZSBGUDJfR0VOX0NOVEwgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAyODgKQEAgLTUyNSw2ICs1MjUsOSBAQAogI2RlZmluZSBDUlRDX0RJU1BMQVlfRElTCQkJICAgKDEgPDwgMTApCiAjZGVmaW5lIENSVENfQ1JUX09OCQkJCSAgICgxIDw8IDE1KQogCisvKiBEU1RDQUNIRV9NT0RFIGJpdHMgY29uc3RhbnRzICovCisjZGVmaW5lIFJCMkRfRENfQVVUT0ZMVVNIX0VOQUJMRSAgICAgICAgICAgICAgICAgICAoMSA8PCA4KQorI2RlZmluZSBSQjJEX0RDX0RDX0RJU0FCTEVfSUdOT1JFX1BFICAgICAgICAgICAgICAgKDEgPDwgMTcpCiAKIC8qIERTVENBQ0hFX0NUTFNUQVQgYml0IGNvbnN0YW50cyAqLwogI2RlZmluZSBSQjJEX0RDX0ZMVVNIXzJECQkJICAgKDEgPDwgMCkKQEAgLTUzMiw2ICs1MzUsOSBAQAogI2RlZmluZSBSQjJEX0RDX0ZMVVNIX0FMTAkJCSAgIChSQjJEX0RDX0ZMVVNIXzJEIHwgUkIyRF9EQ19GUkVFXzJEKQogI2RlZmluZSBSQjJEX0RDX0JVU1kJCQkJICAgKDEgPDwgMzEpCiAKKy8qIERTVENBQ0hFX01PREUgYml0cyBjb25zdGFudHMgKi8KKyNkZWZpbmUgUkIyRF9EQ19BVVRPRkxVU0hfRU5BQkxFICAgICAgICAgICAgICAgICAgICgxIDw8IDgpCisjZGVmaW5lIFJCMkRfRENfRENfRElTQUJMRV9JR05PUkVfUEUgICAgICAgICAgICAgICAoMSA8PCAxNykKIAogLyogQ1JUQ19HRU5fQ05UTCBiaXQgY29uc3RhbnRzICovCiAjZGVmaW5lIENSVENfREJMX1NDQU5fRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCkBAIC04NjMsMTUgKzg2OSwxMCBAQAogI2RlZmluZSBHTUNfRFNUXzE2QlBQX1lWWVU0MjIgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMGMwMAogI2RlZmluZSBHTUNfRFNUXzMyQlBQX0FZVVY0NDQgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMGUwMAogI2RlZmluZSBHTUNfRFNUXzE2QlBQX0FSR0I0NDQ0ICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMGYwMAotI2RlZmluZSBHTUNfU1JDX01PTk8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAotI2RlZmluZSBHTUNfU1JDX01PTk9fTEJLR0QgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMTAwMAotI2RlZmluZSBHTUNfU1JDX0RTVENPTE9SICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMzAwMAogI2RlZmluZSBHTUNfQllURV9PUkRFUl9NU0JfVE9fTFNCICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAogI2RlZmluZSBHTUNfQllURV9PUkRFUl9MU0JfVE9fTVNCICAgICAgICAgICAgICAgICAgMHgwMDAwNDAwMAogI2RlZmluZSBHTUNfRFBfQ09OVkVSU0lPTl9URU1QXzkzMDAgICAgICAgICAgICAgICAgMHgwMDAwODAwMAogI2RlZmluZSBHTUNfRFBfQ09OVkVSU0lPTl9URU1QXzY1MDAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAotI2RlZmluZSBHTUNfRFBfU1JDX1JFQ1QgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMjAwMDAwMAotI2RlZmluZSBHTUNfRFBfU1JDX0hPU1QgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMzAwMDAwMAogI2RlZmluZSBHTUNfRFBfU1JDX0hPU1RfQllURUFMSUdOICAgICAgICAgICAgICAgICAgMHgwNDAwMDAwMAogI2RlZmluZSBHTUNfM0RfRkNOX0VOX0NMUiAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAogI2RlZmluZSBHTUNfM0RfRkNOX0VOX1NFVCAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwODAwMDAwMApAQCAtODgyLDYgKzg4Myw5IEBACiAjZGVmaW5lIEdNQ19XUklURV9NQVNLX0xFQVZFICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCiAjZGVmaW5lIEdNQ19XUklURV9NQVNLX1NFVCAgICAgICAgICAgICAgICAgICAgICAgICAweDQwMDAwMDAwCiAjZGVmaW5lIEdNQ19DTFJfQ01QX0NOVExfRElTICAgICAgCQkgICAoMSA8PCAyOCkKKyNkZWZpbmUgR01DX1NSQ19EQVRBVFlQRV9NQVNLCQkJICAgKDMgPDwgMTIpCisjZGVmaW5lIEdNQ19TUkNfREFUQVRZUEVfTU9OT19GR19CRwkJICAgKDAgPDwgMTIpCisjZGVmaW5lIEdNQ19TUkNfREFUQVRZUEVfTU9OT19GR19MQQkJICAgKDEgPDwgMTIpCiAjZGVmaW5lIEdNQ19TUkNfREFUQVRZUEVfQ09MT1IJCQkgICAoMyA8PCAxMikKICNkZWZpbmUgUk9QM19TICAgICAgICAgICAgICAgIAkJCSAgIDB4MDBjYzAwMDAKICNkZWZpbmUgUk9QM19TUkNDT1BZCQkJCSAgIDB4MDBjYzAwMDAKQEAgLTg5MCw2ICs4OTQsNyBAQAogI2RlZmluZSBEUF9TUkNfU09VUkNFX01BU0sgICAgICAgIAkJICAgKDcgICAgPDwgMjQpCiAjZGVmaW5lIEdNQ19CUlVTSF9OT05FICAgICAgICAgICAgCQkgICAoMTUgICA8PCAgNCkKICNkZWZpbmUgRFBfU1JDX1NPVVJDRV9NRU1PUlkJCQkgICAoMiAgICA8PCAyNCkKKyNkZWZpbmUgRFBfU1JDX1NPVVJDRV9IT1NUX0RBVEEJCQkgICAoMyAgICA8PCAyNCkKICNkZWZpbmUgR01DX0JSVVNIX1NPTElEQ09MT1IJCQkgICAweDAwMDAwMGQwCiAKIC8qIERQX01JWCBiaXQgY29uc3RhbnRzICovCkBAIC05NzUsNiArOTgwLDEyIEBACiAjZGVmaW5lIERJU1BfUFdSX01BTl9UVl9FTkFCTEVfUlNUICAgICAgICAgICAgICAgICAoMSA8PCAyNSkKICNkZWZpbmUgRElTUF9QV1JfTUFOX0FVVE9fUFdSVVBfRU4gICAgICAgICAgICAgICAgICgxIDw8IDI2KQogCisvKiBSQkJNX0dVSUNOVEwgY29uc3RhbnRzICovCisjZGVmaW5lIFJCQk1fR1VJQ05UTF9IT1NUX0RBVEFfU1dBUF9OT05FCSAgICgwIDw8IDApCisjZGVmaW5lIFJCQk1fR1VJQ05UTF9IT1NUX0RBVEFfU1dBUF8xNkJJVCAgICAgICAgICAoMSA8PCAwKQorI2RlZmluZSBSQkJNX0dVSUNOVExfSE9TVF9EQVRBX1NXQVBfMzJCSVQJICAgKDIgPDwgMCkKKyNkZWZpbmUgUkJCTV9HVUlDTlRMX0hPU1RfREFUQV9TV0FQX0hEVwkJICAgKDMgPDwgMCkKKwogLyogbWFza3MgKi8KIAogI2RlZmluZSBDT05GSUdfTUVNU0laRV9NQVNLCQkweDFmMDAwMDAwCmRpZmYgLS1naXQgYS9pbmNsdWRlL3ZpZGVvL3MxZDEzeHh4ZmIuaCBiL2luY2x1ZGUvdmlkZW8vczFkMTN4eHhmYi5oCmluZGV4IGM5OWQyNjEuLmZlNDFiODQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvdmlkZW8vczFkMTN4eHhmYi5oCisrKyBiL2luY2x1ZGUvdmlkZW8vczFkMTN4eHhmYi5oCkBAIC0xNCw3ICsxNCw4IEBACiAjZGVmaW5lCVMxRDEzWFhYRkJfSAogCiAjZGVmaW5lIFMxRF9QQUxFVFRFX1NJWkUJCTI1NgotI2RlZmluZSBTMURfQ0hJUF9SRVYJCQk3CS8qIGV4cGVjdGVkIGNoaXAgcmV2aXNpb24gbnVtYmVyIGZvciBzMWQxMzgwNiAqLworI2RlZmluZSBTMUQxMzUwNl9DSElQX1JFVgkJNAkvKiBleHBlY3RlZCBjaGlwIHJldmlzaW9uIG51bWJlciBmb3IgczFkMTM1MDYgKi8KKyNkZWZpbmUgUzFEMTM4MDZfQ0hJUF9SRVYJCTcJLyogZXhwZWN0ZWQgY2hpcCByZXZpc2lvbiBudW1iZXIgZm9yIHMxZDEzODA2ICovCiAjZGVmaW5lIFMxRF9GQklECQkJIlMxRDEzODA2IgogI2RlZmluZSBTMURfREVWSUNFTkFNRQkJCSJzMWQxMzgwNmZiIgogCmRpZmYgLS1naXQgYS9pbmNsdWRlL3ZpZGVvL3NoX21vYmlsZV9sY2RjLmggYi9pbmNsdWRlL3ZpZGVvL3NoX21vYmlsZV9sY2RjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWE0YmM2YQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvdmlkZW8vc2hfbW9iaWxlX2xjZGMuaApAQCAtMCwwICsxLDc4IEBACisjaWZuZGVmIF9fQVNNX1NIX01PQklMRV9MQ0RDX0hfXworI2RlZmluZSBfX0FTTV9TSF9NT0JJTEVfTENEQ19IX18KKworI2luY2x1ZGUgPGxpbnV4L2ZiLmg+CisKK2VudW0geyBSR0I4LCAgIC8qIDI0YnBwLCA4Ojg6OCAqLworICAgICAgIFJHQjksICAgLyogMThicHAsIDk6OSAqLworICAgICAgIFJHQjEyQSwgLyogMjRicHAsIDEyOjEyICovCisgICAgICAgUkdCMTJCLCAvKiAxMmJwcCAqLworICAgICAgIFJHQjE2LCAgLyogMTZicHAgKi8KKyAgICAgICBSR0IxOCwgIC8qIDE4YnBwICovCisgICAgICAgUkdCMjQsICAvKiAyNGJwcCAqLworICAgICAgIFNZUzhBLCAgLyogMjRicHAsIDg6ODo4ICovCisgICAgICAgU1lTOEIsICAvKiAxOGJwcCwgODo4OjIgKi8KKyAgICAgICBTWVM4QywgIC8qIDE4YnBwLCAyOjg6OCAqLworICAgICAgIFNZUzhELCAgLyogMTZicHAsIDg6OCAqLworICAgICAgIFNZUzksICAgLyogMThicHAsIDk6OSAqLworICAgICAgIFNZUzEyLCAgLyogMjRicHAsIDEyOjEyICovCisgICAgICAgU1lTMTZBLCAvKiAxNmJwcCAqLworICAgICAgIFNZUzE2QiwgLyogMThicHAsIDE2OjIgKi8KKyAgICAgICBTWVMxNkMsIC8qIDE4YnBwLCAyOjE2ICovCisgICAgICAgU1lTMTgsICAvKiAxOGJwcCAqLworICAgICAgIFNZUzI0IH07LyogMjRicHAgKi8KKworZW51bSB7IExDRENfQ0hBTl9ESVNBQkxFRCA9IDAsCisgICAgICAgTENEQ19DSEFOX01BSU5MQ0QsCisgICAgICAgTENEQ19DSEFOX1NVQkxDRCB9OworCitlbnVtIHsgTENEQ19DTEtfQlVTLCBMQ0RDX0NMS19QRVJJUEhFUkFMLCBMQ0RDX0NMS19FWFRFUk5BTCB9OworCisjZGVmaW5lIExDRENfRkxBR1NfRFdQT0wgKDEgPDwgMCkgLyogUmlzaW5nIGVkZ2UgZG90IGNsb2NrIGRhdGEgbGF0Y2ggKi8KKyNkZWZpbmUgTENEQ19GTEFHU19ESVBPTCAoMSA8PCAxKSAvKiBBY3RpdmUgbG93IGRpc3BsYXkgZW5hYmxlIHBvbGFyaXR5ICovCisjZGVmaW5lIExDRENfRkxBR1NfREFQT0wgKDEgPDwgMikgLyogQWN0aXZlIGxvdyBkaXNwbGF5IGRhdGEgcG9sYXJpdHkgKi8KKyNkZWZpbmUgTENEQ19GTEFHU19IU0NOVCAoMSA8PCAzKSAvKiBEaXNhYmxlIEhTWU5DIGR1cmluZyBWQkxBTksgKi8KKyNkZWZpbmUgTENEQ19GTEFHU19EV0NOVCAoMSA8PCA0KSAvKiBEaXNhYmxlIGRvdGNsb2NrIGR1cmluZyBibGFua2luZyAqLworCitzdHJ1Y3Qgc2hfbW9iaWxlX2xjZGNfc3lzX2J1c19jZmcgeworCXVuc2lnbmVkIGxvbmcgbGRtdDJyOworCXVuc2lnbmVkIGxvbmcgbGRtdDNyOworfTsKKworc3RydWN0IHNoX21vYmlsZV9sY2RjX3N5c19idXNfb3BzIHsKKwl2b2lkICgqd3JpdGVfaW5kZXgpKHZvaWQgKmhhbmRsZSwgdW5zaWduZWQgbG9uZyBkYXRhKTsKKwl2b2lkICgqd3JpdGVfZGF0YSkodm9pZCAqaGFuZGxlLCB1bnNpZ25lZCBsb25nIGRhdGEpOworCXVuc2lnbmVkIGxvbmcgKCpyZWFkX2RhdGEpKHZvaWQgKmhhbmRsZSk7Cit9OworCitzdHJ1Y3Qgc2hfbW9iaWxlX2xjZGNfYm9hcmRfY2ZnIHsKKwl2b2lkICpib2FyZF9kYXRhOworCWludCAoKnNldHVwX3N5cykodm9pZCAqYm9hcmRfZGF0YSwgdm9pZCAqc3lzX29wc19oYW5kbGUsCisJCQkgc3RydWN0IHNoX21vYmlsZV9sY2RjX3N5c19idXNfb3BzICpzeXNfb3BzKTsKKwl2b2lkICgqZGlzcGxheV9vbikodm9pZCAqYm9hcmRfZGF0YSk7CisJdm9pZCAoKmRpc3BsYXlfb2ZmKSh2b2lkICpib2FyZF9kYXRhKTsKK307CisKK3N0cnVjdCBzaF9tb2JpbGVfbGNkY19sY2Rfc2l6ZV9jZmcgeyAvKiB3aWR0aCBhbmQgaGVpZ2h0IG9mIHBhbmVsIGluIG1tICovCisJdW5zaWduZWQgbG9uZyB3aWR0aDsKKwl1bnNpZ25lZCBsb25nIGhlaWdodDsKK307CisKK3N0cnVjdCBzaF9tb2JpbGVfbGNkY19jaGFuX2NmZyB7CisJaW50IGNoYW47CisJaW50IGJwcDsKKwlpbnQgaW50ZXJmYWNlX3R5cGU7IC8qIHNlbGVjdHMgUkdCbiBvciBTWVNuIEkvRiwgc2VlIGFib3ZlICovCisJaW50IGNsb2NrX2RpdmlkZXI7CisJdW5zaWduZWQgbG9uZyBmbGFnczsgLyogTENEQ19GTEFHU18uLi4gKi8KKwlzdHJ1Y3QgZmJfdmlkZW9tb2RlIGxjZF9jZmc7CisJc3RydWN0IHNoX21vYmlsZV9sY2RjX2xjZF9zaXplX2NmZyBsY2Rfc2l6ZV9jZmc7CisJc3RydWN0IHNoX21vYmlsZV9sY2RjX2JvYXJkX2NmZyBib2FyZF9jZmc7CisJc3RydWN0IHNoX21vYmlsZV9sY2RjX3N5c19idXNfY2ZnIHN5c19idXNfY2ZnOyAvKiBvbmx5IGZvciBTWVNuIEkvRiAqLworfTsKKworc3RydWN0IHNoX21vYmlsZV9sY2RjX2luZm8geworCWludCBjbG9ja19zb3VyY2U7CisJc3RydWN0IHNoX21vYmlsZV9sY2RjX2NoYW5fY2ZnIGNoWzJdOworfTsKKworI2VuZGlmIC8qIF9fQVNNX1NIX01PQklMRV9MQ0RDX0hfXyAqLwpkaWZmIC0tZ2l0IGEvaW5pdC9LY29uZmlnIGIvaW5pdC9LY29uZmlnCmluZGV4IGMxMWRhMzguLjg4MjhlZDAgMTAwNjQ0Ci0tLSBhL2luaXQvS2NvbmZpZworKysgYi9pbml0L0tjb25maWcKQEAgLTI5OSw2ICsyOTksMTMgQEAKICAgICAgICAgICBmb3IgaW5zdGFuY2UgdmlydHVhbCBzZXJ2ZXJzIGFuZCBjaGVja3BvaW50L3Jlc3RhcnQKICAgICAgICAgICBqb2JzLgogCitjb25maWcgQ0dST1VQX0ZSRUVaRVIKKyAgICAgICAgYm9vbCAiY29udHJvbCBncm91cCBmcmVlemVyIHN1YnN5c3RlbSIKKyAgICAgICAgZGVwZW5kcyBvbiBDR1JPVVBTCisgICAgICAgIGhlbHAKKyAgICAgICAgICBQcm92aWRlcyBhIHdheSB0byBmcmVlemUgYW5kIHVuZnJlZXplIGFsbCB0YXNrcyBpbiBhCisJICBjZ3JvdXAuCisKIGNvbmZpZyBDR1JPVVBfREVWSUNFCiAJYm9vbCAiRGV2aWNlIGNvbnRyb2xsZXIgZm9yIGNncm91cHMiCiAJZGVwZW5kcyBvbiBDR1JPVVBTICYmIEVYUEVSSU1FTlRBTApAQCAtNzEzLDYgKzcyMCwxNCBAQAogCSAgb3B0aW9uIHJlcGxhY2VzIHNobWVtIGFuZCB0bXBmcyB3aXRoIHRoZSBtdWNoIHNpbXBsZXIgcmFtZnMgY29kZSwKIAkgIHdoaWNoIG1heSBiZSBhcHByb3ByaWF0ZSBvbiBzbWFsbCBzeXN0ZW1zIHdpdGhvdXQgc3dhcC4KIAorY29uZmlnIEFJTworCWJvb2wgIkVuYWJsZSBBSU8gc3VwcG9ydCIgaWYgRU1CRURERUQKKwlkZWZhdWx0IHkKKwloZWxwCisJICBUaGlzIG9wdGlvbiBlbmFibGVzIFBPU0lYIGFzeW5jaHJvbm91cyBJL08gd2hpY2ggbWF5IGJ5IHVzZWQKKyAgICAgICAgICBieSBzb21lIGhpZ2ggcGVyZm9ybWFuY2UgdGhyZWFkZWQgYXBwbGljYXRpb25zLiBEaXNhYmxpbmcKKyAgICAgICAgICB0aGlzIG9wdGlvbiBzYXZlcyBhYm91dCA3ay4KKwogY29uZmlnIFZNX0VWRU5UX0NPVU5URVJTCiAJZGVmYXVsdCB5CiAJYm9vbCAiRW5hYmxlIFZNIGV2ZW50IGNvdW50ZXJzIGZvciAvcHJvYy92bXN0YXQiIGlmIEVNQkVEREVECkBAIC03NzksMTYgKzc5NCw2IEBACiAKIHNvdXJjZSAiYXJjaC9LY29uZmlnIgogCi1jb25maWcgUFJPQ19QQUdFX01PTklUT1IKLSAJZGVmYXVsdCB5Ci0JZGVwZW5kcyBvbiBQUk9DX0ZTICYmIE1NVQotCWJvb2wgIkVuYWJsZSAvcHJvYyBwYWdlIG1vbml0b3JpbmciIGlmIEVNQkVEREVECi0gCWhlbHAKLQkgIFZhcmlvdXMgL3Byb2MgZmlsZXMgZXhpc3QgdG8gbW9uaXRvciBwcm9jZXNzIG1lbW9yeSB1dGlsaXphdGlvbjoKLQkgIC9wcm9jL3BpZC9zbWFwcywgL3Byb2MvcGlkL2NsZWFyX3JlZnMsIC9wcm9jL3BpZC9wYWdlbWFwLAotCSAgL3Byb2Mva3BhZ2Vjb3VudCwgYW5kIC9wcm9jL2twYWdlZmxhZ3MuIERpc2FibGluZyB0aGVzZQotICAgICAgICAgIGludGVyZmFjZXMgd2lsbCByZWR1Y2UgdGhlIHNpemUgb2YgdGhlIGtlcm5lbCBieSBhcHByb3hpbWF0ZWx5IDRrYi4KLQogZW5kbWVudQkJIyBHZW5lcmFsIHNldHVwCiAKIGNvbmZpZyBIQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UCmRpZmYgLS1naXQgYS9pbml0L2RvX21vdW50c19tZC5jIGIvaW5pdC9kb19tb3VudHNfbWQuYwppbmRleCA2OTNkMjQ2Li40Yzg3ZWUxIDEwMDY0NAotLS0gYS9pbml0L2RvX21vdW50c19tZC5jCisrKyBiL2luaXQvZG9fbW91bnRzX21kLmMKQEAgLTEsNSArMSw2IEBACiAKICNpbmNsdWRlIDxsaW51eC9yYWlkL21kLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KIAogI2luY2x1ZGUgImRvX21vdW50cy5oIgogCkBAIC0xMiw3ICsxMywxMiBAQAogICogVGhlIGNvZGUgZm9yIHRoYXQgaXMgaGVyZS4KICAqLwogCi1zdGF0aWMgaW50IF9faW5pdGRhdGEgcmFpZF9ub2F1dG9kZXRlY3QsIHJhaWRfYXV0b3BhcnQ7CisjaWZkZWYgQ09ORklHX01EX0FVVE9ERVRFQ1QKK3N0YXRpYyBpbnQgX19pbml0ZGF0YSByYWlkX25vYXV0b2RldGVjdDsKKyNlbHNlCitzdGF0aWMgaW50IF9faW5pdGRhdGEgcmFpZF9ub2F1dG9kZXRlY3Q9MTsKKyNlbmRpZgorc3RhdGljIGludCBfX2luaXRkYXRhIHJhaWRfYXV0b3BhcnQ7CiAKIHN0YXRpYyBzdHJ1Y3QgewogCWludCBtaW5vcjsKQEAgLTI1Miw2ICsyNTgsOCBAQAogCiAJCWlmICghc3RybmNtcChzdHIsICJub2F1dG9kZXRlY3QiLCB3bGVuKSkKIAkJCXJhaWRfbm9hdXRvZGV0ZWN0ID0gMTsKKwkJaWYgKCFzdHJuY21wKHN0ciwgImF1dG9kZXRlY3QiLCB3bGVuKSkKKwkJCXJhaWRfbm9hdXRvZGV0ZWN0ID0gMDsKIAkJaWYgKHN0cm5jbXAoc3RyLCAicGFydGl0aW9uYWJsZSIsIHdsZW4pPT0wKQogCQkJcmFpZF9hdXRvcGFydCA9IDE7CiAJCWlmIChzdHJuY21wKHN0ciwgInBhcnQiLCB3bGVuKT09MCkKQEAgLTI2NCwxNyArMjcyLDMyIEBACiBfX3NldHVwKCJyYWlkPSIsIHJhaWRfc2V0dXApOwogX19zZXR1cCgibWQ9IiwgbWRfc2V0dXApOwogCitzdGF0aWMgdm9pZCBhdXRvZGV0ZWN0X3JhaWQodm9pZCkKK3sKKwlpbnQgZmQ7CisKKwkvKgorCSAqIFNpbmNlIHdlIGRvbid0IHdhbnQgdG8gZGV0ZWN0IGFuZCB1c2UgaGFsZiBhIHJhaWQgYXJyYXksIHdlIG5lZWQgdG8KKwkgKiB3YWl0IGZvciB0aGUga25vd24gZGV2aWNlcyB0byBjb21wbGV0ZSB0aGVpciBwcm9iaW5nCisJICovCisJcHJpbnRrKEtFUk5fSU5GTyAibWQ6IFdhaXRpbmcgZm9yIGFsbCBkZXZpY2VzIHRvIGJlIGF2YWlsYWJsZSBiZWZvcmUgYXV0b2RldGVjdFxuIik7CisJcHJpbnRrKEtFUk5fSU5GTyAibWQ6IElmIHlvdSBkb24ndCB1c2UgcmFpZCwgdXNlIHJhaWQ9bm9hdXRvZGV0ZWN0XG4iKTsKKwl3aGlsZSAoZHJpdmVyX3Byb2JlX2RvbmUoKSA8IDApCisJCW1zbGVlcCgxMDApOworCWZkID0gc3lzX29wZW4oIi9kZXYvbWQwIiwgMCwgMCk7CisJaWYgKGZkID49IDApIHsKKwkJc3lzX2lvY3RsKGZkLCBSQUlEX0FVVE9SVU4sIHJhaWRfYXV0b3BhcnQpOworCQlzeXNfY2xvc2UoZmQpOworCX0KK30KKwogdm9pZCBfX2luaXQgbWRfcnVuX3NldHVwKHZvaWQpCiB7CiAJY3JlYXRlX2RldigiL2Rldi9tZDAiLCBNS0RFVihNRF9NQUpPUiwgMCkpOworCiAJaWYgKHJhaWRfbm9hdXRvZGV0ZWN0KQotCQlwcmludGsoS0VSTl9JTkZPICJtZDogU2tpcHBpbmcgYXV0b2RldGVjdGlvbiBvZiBSQUlEIGFycmF5cy4gKHJhaWQ9bm9hdXRvZGV0ZWN0KVxuIik7Ci0JZWxzZSB7Ci0JCWludCBmZCA9IHN5c19vcGVuKCIvZGV2L21kMCIsIDAsIDApOwotCQlpZiAoZmQgPj0gMCkgewotCQkJc3lzX2lvY3RsKGZkLCBSQUlEX0FVVE9SVU4sIHJhaWRfYXV0b3BhcnQpOwotCQkJc3lzX2Nsb3NlKGZkKTsKLQkJfQotCX0KKwkJcHJpbnRrKEtFUk5fSU5GTyAibWQ6IFNraXBwaW5nIGF1dG9kZXRlY3Rpb24gb2YgUkFJRCBhcnJheXMuIChyYWlkPWF1dG9kZXRlY3Qgd2lsbCBmb3JjZSlcbiIpOworCWVsc2UKKwkJYXV0b2RldGVjdF9yYWlkKCk7CiAJbWRfc2V0dXBfZHJpdmUoKTsKIH0KZGlmZiAtLWdpdCBhL2luaXQvZG9fbW91bnRzX3JkLmMgYi9pbml0L2RvX21vdW50c19yZC5jCmluZGV4IGZlZGVmOTMuLmE3Yzc0OGYgMTAwNjQ0Ci0tLSBhL2luaXQvZG9fbW91bnRzX3JkLmMKKysrIGIvaW5pdC9kb19tb3VudHNfcmQuYwpAQCAtNzEsNyArNzEsNyBAQAogCXN5c19yZWFkKGZkLCBidWYsIHNpemUpOwogCiAJLyoKLQkgKiBJZiBpdCBtYXRjaGVzIHRoZSBnemlwIG1hZ2ljIG51bWJlcnMsIHJldHVybiAtMQorCSAqIElmIGl0IG1hdGNoZXMgdGhlIGd6aXAgbWFnaWMgbnVtYmVycywgcmV0dXJuIDAKIAkgKi8KIAlpZiAoYnVmWzBdID09IDAzNyAmJiAoKGJ1ZlsxXSA9PSAwMjEzKSB8fCAoYnVmWzFdID09IDAyMzYpKSkgewogCQlwcmludGsoS0VSTl9OT1RJQ0UKZGlmZiAtLWdpdCBhL2luaXQvaW5pdHJhbWZzLmMgYi9pbml0L2luaXRyYW1mcy5jCmluZGV4IDY0NGZjMDEuLjRmNWJhNzUgMTAwNjQ0Ci0tLSBhL2luaXQvaW5pdHJhbWZzLmMKKysrIGIvaW5pdC9pbml0cmFtZnMuYwpAQCAtNiw2ICs2LDcgQEAKICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogI2luY2x1ZGUgPGxpbnV4L3N5c2NhbGxzLmg+CisjaW5jbHVkZSA8bGludXgvdXRpbWUuaD4KIAogc3RhdGljIF9faW5pdGRhdGEgY2hhciAqbWVzc2FnZTsKIHN0YXRpYyB2b2lkIF9faW5pdCBlcnJvcihjaGFyICp4KQpAQCAtNzIsNiArNzMsNDkgQEAKIAl9CiB9CiAKK3N0YXRpYyBsb25nIF9faW5pdCBkb191dGltZShjaGFyIF9fdXNlciAqZmlsZW5hbWUsIHRpbWVfdCBtdGltZSkKK3sKKwlzdHJ1Y3QgdGltZXNwZWMgdFsyXTsKKworCXRbMF0udHZfc2VjID0gbXRpbWU7CisJdFswXS50dl9uc2VjID0gMDsKKwl0WzFdLnR2X3NlYyA9IG10aW1lOworCXRbMV0udHZfbnNlYyA9IDA7CisKKwlyZXR1cm4gZG9fdXRpbWVzKEFUX0ZEQ1dELCBmaWxlbmFtZSwgdCwgQVRfU1lNTElOS19OT0ZPTExPVyk7Cit9CisKK3N0YXRpYyBfX2luaXRkYXRhIExJU1RfSEVBRChkaXJfbGlzdCk7CitzdHJ1Y3QgZGlyX2VudHJ5IHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CisJY2hhciAqbmFtZTsKKwl0aW1lX3QgbXRpbWU7Cit9OworCitzdGF0aWMgdm9pZCBfX2luaXQgZGlyX2FkZChjb25zdCBjaGFyICpuYW1lLCB0aW1lX3QgbXRpbWUpCit7CisJc3RydWN0IGRpcl9lbnRyeSAqZGUgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgZGlyX2VudHJ5KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFkZSkKKwkJcGFuaWMoImNhbid0IGFsbG9jYXRlIGRpcl9lbnRyeSBidWZmZXIiKTsKKwlJTklUX0xJU1RfSEVBRCgmZGUtPmxpc3QpOworCWRlLT5uYW1lID0ga3N0cmR1cChuYW1lLCBHRlBfS0VSTkVMKTsKKwlkZS0+bXRpbWUgPSBtdGltZTsKKwlsaXN0X2FkZCgmZGUtPmxpc3QsICZkaXJfbGlzdCk7Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCBkaXJfdXRpbWUodm9pZCkKK3sKKwlzdHJ1Y3QgZGlyX2VudHJ5ICpkZSwgKnRtcDsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZGUsIHRtcCwgJmRpcl9saXN0LCBsaXN0KSB7CisJCWxpc3RfZGVsKCZkZS0+bGlzdCk7CisJCWRvX3V0aW1lKGRlLT5uYW1lLCBkZS0+bXRpbWUpOworCQlrZnJlZShkZS0+bmFtZSk7CisJCWtmcmVlKGRlKTsKKwl9Cit9CisKK3N0YXRpYyBfX2luaXRkYXRhIHRpbWVfdCBtdGltZTsKKwogLyogY3BpbyBoZWFkZXIgcGFyc2luZyAqLwogCiBzdGF0aWMgX19pbml0ZGF0YSB1bnNpZ25lZCBsb25nIGlubywgbWFqb3IsIG1pbm9yLCBubGluazsKQEAgLTk3LDYgKzE0MSw3IEBACiAJdWlkID0gcGFyc2VkWzJdOwogCWdpZCA9IHBhcnNlZFszXTsKIAlubGluayA9IHBhcnNlZFs0XTsKKwltdGltZSA9IHBhcnNlZFs1XTsKIAlib2R5X2xlbiA9IHBhcnNlZFs2XTsKIAltYWpvciA9IHBhcnNlZFs3XTsKIAltaW5vciA9IHBhcnNlZFs4XTsKQEAgLTEzMCw2ICsxNzUsNyBAQAogCWNvdW50IC09IG47CiB9CiAKK3N0YXRpYyBfX2luaXRkYXRhIGNoYXIgKnZjb2xsZWN0ZWQ7CiBzdGF0aWMgX19pbml0ZGF0YSBjaGFyICpjb2xsZWN0ZWQ7CiBzdGF0aWMgX19pbml0ZGF0YSBpbnQgcmVtYWluczsKIHN0YXRpYyBfX2luaXRkYXRhIGNoYXIgKmNvbGxlY3Q7CkBAIC0yNzEsNiArMzE3LDcgQEAKIAkJCWlmICh3ZmQgPj0gMCkgewogCQkJCXN5c19mY2hvd24od2ZkLCB1aWQsIGdpZCk7CiAJCQkJc3lzX2ZjaG1vZCh3ZmQsIG1vZGUpOworCQkJCXZjb2xsZWN0ZWQgPSBrc3RyZHVwKGNvbGxlY3RlZCwgR0ZQX0tFUk5FTCk7CiAJCQkJc3RhdGUgPSBDb3B5RmlsZTsKIAkJCX0KIAkJfQpAQCAtMjc4LDEyICszMjUsMTQgQEAKIAkJc3lzX21rZGlyKGNvbGxlY3RlZCwgbW9kZSk7CiAJCXN5c19jaG93bihjb2xsZWN0ZWQsIHVpZCwgZ2lkKTsKIAkJc3lzX2NobW9kKGNvbGxlY3RlZCwgbW9kZSk7CisJCWRpcl9hZGQoY29sbGVjdGVkLCBtdGltZSk7CiAJfSBlbHNlIGlmIChTX0lTQkxLKG1vZGUpIHx8IFNfSVNDSFIobW9kZSkgfHwKIAkJICAgU19JU0ZJRk8obW9kZSkgfHwgU19JU1NPQ0sobW9kZSkpIHsKIAkJaWYgKG1heWJlX2xpbmsoKSA9PSAwKSB7CiAJCQlzeXNfbWtub2QoY29sbGVjdGVkLCBtb2RlLCByZGV2KTsKIAkJCXN5c19jaG93bihjb2xsZWN0ZWQsIHVpZCwgZ2lkKTsKIAkJCXN5c19jaG1vZChjb2xsZWN0ZWQsIG1vZGUpOworCQkJZG9fdXRpbWUoY29sbGVjdGVkLCBtdGltZSk7CiAJCX0KIAl9CiAJcmV0dXJuIDA7CkBAIC0yOTQsNiArMzQzLDggQEAKIAlpZiAoY291bnQgPj0gYm9keV9sZW4pIHsKIAkJc3lzX3dyaXRlKHdmZCwgdmljdGltLCBib2R5X2xlbik7CiAJCXN5c19jbG9zZSh3ZmQpOworCQlkb191dGltZSh2Y29sbGVjdGVkLCBtdGltZSk7CisJCWtmcmVlKHZjb2xsZWN0ZWQpOwogCQllYXQoYm9keV9sZW4pOwogCQlzdGF0ZSA9IFNraXBJdDsKIAkJcmV0dXJuIDA7CkBAIC0zMTEsNiArMzYyLDcgQEAKIAljbGVhbl9wYXRoKGNvbGxlY3RlZCwgMCk7CiAJc3lzX3N5bWxpbmsoY29sbGVjdGVkICsgTl9BTElHTihuYW1lX2xlbiksIGNvbGxlY3RlZCk7CiAJc3lzX2xjaG93bihjb2xsZWN0ZWQsIHVpZCwgZ2lkKTsKKwlkb191dGltZShjb2xsZWN0ZWQsIG10aW1lKTsKIAlzdGF0ZSA9IFNraXBJdDsKIAluZXh0X3N0YXRlID0gUmVzZXQ7CiAJcmV0dXJuIDA7CkBAIC00NjYsNiArNTE4LDcgQEAKIAkJYnVmICs9IGlucHRyOwogCQlsZW4gLT0gaW5wdHI7CiAJfQorCWRpcl91dGltZSgpOwogCWtmcmVlKHdpbmRvdyk7CiAJa2ZyZWUobmFtZV9idWYpOwogCWtmcmVlKHN5bWxpbmtfYnVmKTsKZGlmZiAtLWdpdCBhL2luaXQvbWFpbi5jIGIvaW5pdC9tYWluLmMKaW5kZXggMzgyMDMyMy4uNDM3MWQxMSAxMDA2NDQKLS0tIGEvaW5pdC9tYWluLmMKKysrIGIvaW5pdC9tYWluLmMKQEAgLTI3LDYgKzI3LDcgQEAKICNpbmNsdWRlIDxsaW51eC9nZnAuaD4KICNpbmNsdWRlIDxsaW51eC9wZXJjcHUuaD4KICNpbmNsdWRlIDxsaW51eC9rbW9kLmg+CisjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbF9zdGF0Lmg+CiAjaW5jbHVkZSA8bGludXgvc3RhcnRfa2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvc2VjdXJpdHkuaD4KQEAgLTY0Miw2ICs2NDMsNyBAQAogCQlpbml0cmRfc3RhcnQgPSAwOwogCX0KICNlbmRpZgorCXZtYWxsb2NfaW5pdCgpOwogCXZmc19jYWNoZXNfaW5pdF9lYXJseSgpOwogCWNwdXNldF9pbml0X2Vhcmx5KCk7CiAJbWVtX2luaXQoKTsKQEAgLTcwOCw3ICs3MTAsNyBAQAogCWludCByZXN1bHQ7CiAKIAlpZiAoaW5pdGNhbGxfZGVidWcpIHsKLQkJcHJpbnRrKCJjYWxsaW5nICAlcEZcbiIsIGZuKTsKKwkJcHJpbnRrKCJjYWxsaW5nICAlcEYgQCAlaVxuIiwgZm4sIHRhc2tfcGlkX25yKGN1cnJlbnQpKTsKIAkJdDAgPSBrdGltZV9nZXQoKTsKIAl9CiAKZGlmZiAtLWdpdCBhL2lwYy9pcGNfc3lzY3RsLmMgYi9pcGMvaXBjX3N5c2N0bC5jCmluZGV4IDY5YmM4NTkuLjBkZmViYzUgMTAwNjQ0Ci0tLSBhL2lwYy9pcGNfc3lzY3RsLmMKKysrIGIvaXBjL2lwY19zeXNjdGwuYwpAQCAtMTMxLDcgKzEzMSw3IEBACiAKICNpZmRlZiBDT05GSUdfU1lTQ1RMX1NZU0NBTEwKIC8qIFRoZSBnZW5lcmljIHN5c2N0bCBpcGMgZGF0YSByb3V0aW5lLiAqLwotc3RhdGljIGludCBzeXNjdGxfaXBjX2RhdGEoY3RsX3RhYmxlICp0YWJsZSwgaW50IF9fdXNlciAqbmFtZSwgaW50IG5sZW4sCitzdGF0aWMgaW50IHN5c2N0bF9pcGNfZGF0YShjdGxfdGFibGUgKnRhYmxlLAogCQl2b2lkIF9fdXNlciAqb2xkdmFsLCBzaXplX3QgX191c2VyICpvbGRsZW5wLAogCQl2b2lkIF9fdXNlciAqbmV3dmFsLCBzaXplX3QgbmV3bGVuKQogewpAQCAtMTY5LDE0ICsxNjksMTMgQEAKIAlyZXR1cm4gMTsKIH0KIAotc3RhdGljIGludCBzeXNjdGxfaXBjX3JlZ2lzdGVyZWRfZGF0YShjdGxfdGFibGUgKnRhYmxlLCBpbnQgX191c2VyICpuYW1lLAotCQlpbnQgbmxlbiwgdm9pZCBfX3VzZXIgKm9sZHZhbCwgc2l6ZV90IF9fdXNlciAqb2xkbGVucCwKK3N0YXRpYyBpbnQgc3lzY3RsX2lwY19yZWdpc3RlcmVkX2RhdGEoY3RsX3RhYmxlICp0YWJsZSwKKwkJdm9pZCBfX3VzZXIgKm9sZHZhbCwgc2l6ZV90IF9fdXNlciAqb2xkbGVucCwKIAkJdm9pZCBfX3VzZXIgKm5ld3ZhbCwgc2l6ZV90IG5ld2xlbikKIHsKIAlpbnQgcmM7CiAKLQlyYyA9IHN5c2N0bF9pcGNfZGF0YSh0YWJsZSwgbmFtZSwgbmxlbiwgb2xkdmFsLCBvbGRsZW5wLCBuZXd2YWwsCi0JCW5ld2xlbik7CisJcmMgPSBzeXNjdGxfaXBjX2RhdGEodGFibGUsIG9sZHZhbCwgb2xkbGVucCwgbmV3dmFsLCBuZXdsZW4pOwogCiAJaWYgKG5ld3ZhbCAmJiBuZXdsZW4gJiYgcmMgPiAwKQogCQkvKgpkaWZmIC0tZ2l0IGEvaXBjL21xdWV1ZS5jIGIvaXBjL21xdWV1ZS5jCmluZGV4IDk2ZmIzNmMuLjY4ZWI4NTcgMTAwNjQ0Ci0tLSBhL2lwYy9tcXVldWUuYworKysgYi9pcGMvbXF1ZXVlLmMKQEAgLTUyLDYgKzUyLDE0IEBACiAjZGVmaW5lIEhBUkRfTVNHTUFYIAkoMTMxMDcyL3NpemVvZih2b2lkKikpCiAjZGVmaW5lIERGTFRfTVNHU0laRU1BWCA4MTkyCS8qIG1heCBtZXNzYWdlIHNpemUgKi8KIAorLyoKKyAqIERlZmluZSB0aGUgcmFuZ2VzIHZhcmlvdXMgdXNlci1zcGVjaWZpZWQgbWF4aW11bSB2YWx1ZXMgY2FuCisgKiBiZSBzZXQgdG8uCisgKi8KKyNkZWZpbmUgTUlOX01TR01BWAkxCQkvKiBtaW4gdmFsdWUgZm9yIG1zZ19tYXggKi8KKyNkZWZpbmUgTUFYX01TR01BWAlIQVJEX01TR01BWAkvKiBtYXggdmFsdWUgZm9yIG1zZ19tYXggKi8KKyNkZWZpbmUgTUlOX01TR1NJWkVNQVgJMTI4CQkvKiBtaW4gdmFsdWUgZm9yIG1zZ3NpemVfbWF4ICovCisjZGVmaW5lIE1BWF9NU0dTSVpFTUFYCSg4MTkyKjEyOCkJLyogbWF4IHZhbHVlIGZvciBtc2dzaXplX21heCAqLwogCiBzdHJ1Y3QgZXh0X3dhaXRfcXVldWUgewkJLyogcXVldWUgb2Ygc2xlZXBpbmcgdGFza3MgKi8KIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2s7CkBAIC0xMzQsOCArMTQyLDggQEAKIAkJCWluZm8tPnFzaXplID0gMDsKIAkJCWluZm8tPnVzZXIgPSBOVUxMOwkvKiBzZXQgd2hlbiBhbGwgaXMgb2sgKi8KIAkJCW1lbXNldCgmaW5mby0+YXR0ciwgMCwgc2l6ZW9mKGluZm8tPmF0dHIpKTsKLQkJCWluZm8tPmF0dHIubXFfbWF4bXNnID0gREZMVF9NU0dNQVg7Ci0JCQlpbmZvLT5hdHRyLm1xX21zZ3NpemUgPSBERkxUX01TR1NJWkVNQVg7CisJCQlpbmZvLT5hdHRyLm1xX21heG1zZyA9IG1zZ19tYXg7CisJCQlpbmZvLT5hdHRyLm1xX21zZ3NpemUgPSBtc2dzaXplX21heDsKIAkJCWlmIChhdHRyKSB7CiAJCQkJaW5mby0+YXR0ci5tcV9tYXhtc2cgPSBhdHRyLT5tcV9tYXhtc2c7CiAJCQkJaW5mby0+YXR0ci5tcV9tc2dzaXplID0gYXR0ci0+bXFfbXNnc2l6ZTsKQEAgLTExOTEsMTEgKzExOTksMTEgQEAKIAkua2lsbF9zYiA9IGtpbGxfbGl0dGVyX3N1cGVyLAogfTsKIAotc3RhdGljIGludCBtc2dfbWF4X2xpbWl0X21pbiA9IERGTFRfTVNHTUFYOwotc3RhdGljIGludCBtc2dfbWF4X2xpbWl0X21heCA9IEhBUkRfTVNHTUFYOworc3RhdGljIGludCBtc2dfbWF4X2xpbWl0X21pbiA9IE1JTl9NU0dNQVg7CitzdGF0aWMgaW50IG1zZ19tYXhfbGltaXRfbWF4ID0gTUFYX01TR01BWDsKIAotc3RhdGljIGludCBtc2dfbWF4c2l6ZV9saW1pdF9taW4gPSBERkxUX01TR1NJWkVNQVg7Ci1zdGF0aWMgaW50IG1zZ19tYXhzaXplX2xpbWl0X21heCA9IElOVF9NQVg7CitzdGF0aWMgaW50IG1zZ19tYXhzaXplX2xpbWl0X21pbiA9IE1JTl9NU0dTSVpFTUFYOworc3RhdGljIGludCBtc2dfbWF4c2l6ZV9saW1pdF9tYXggPSBNQVhfTVNHU0laRU1BWDsKIAogc3RhdGljIGN0bF90YWJsZSBtcV9zeXNjdGxzW10gPSB7CiAJewpkaWZmIC0tZ2l0IGEvaXBjL3NlbS5jIGIvaXBjL3NlbS5jCmluZGV4IGJmMWJjMzYuLjA4MjEyMjQgMTAwNjQ0Ci0tLSBhL2lwYy9zZW0uYworKysgYi9pcGMvc2VtLmMKQEAgLTUwNCw3ICs1MDQsNyBAQAogCXJldHVybiBzZW16Y250OwogfQogCi12b2lkIGZyZWVfdW4oc3RydWN0IHJjdV9oZWFkICpoZWFkKQorc3RhdGljIHZvaWQgZnJlZV91bihzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpCiB7CiAJc3RydWN0IHNlbV91bmRvICp1biA9IGNvbnRhaW5lcl9vZihoZWFkLCBzdHJ1Y3Qgc2VtX3VuZG8sIHJjdSk7CiAJa2ZyZWUodW4pOwpkaWZmIC0tZ2l0IGEvaXBjL3NobS5jIGIvaXBjL3NobS5jCmluZGV4IGU3N2VjNjk4Li4wYWRkM2ZhIDEwMDY0NAotLS0gYS9pcGMvc2htLmMKKysrIGIvaXBjL3NobS5jCkBAIC03MzcsNiArNzM3LDEwIEBACiAJY2FzZSBTSE1fTE9DSzoKIAljYXNlIFNITV9VTkxPQ0s6CiAJeworCQlzdHJ1Y3QgZmlsZSAqdW5pbml0aWFsaXplZF92YXIoc2htX2ZpbGUpOworCisJCWxydV9hZGRfZHJhaW5fYWxsKCk7ICAvKiBkcmFpbiBwYWdldmVjcyB0byBscnUgbGlzdHMgKi8KKwogCQlzaHAgPSBzaG1fbG9ja19jaGVjayhucywgc2htaWQpOwogCQlpZiAoSVNfRVJSKHNocCkpIHsKIAkJCWVyciA9IFBUUl9FUlIoc2hwKTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9LY29uZmlnLmZyZWV6ZXIgYi9rZXJuZWwvS2NvbmZpZy5mcmVlemVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEzYmI0Y2IKLS0tIC9kZXYvbnVsbAorKysgYi9rZXJuZWwvS2NvbmZpZy5mcmVlemVyCkBAIC0wLDAgKzEsMiBAQAorY29uZmlnIEZSRUVaRVIKKwlkZWZfYm9vbCBQTV9TTEVFUCB8fCBDR1JPVVBfRlJFRVpFUgpkaWZmIC0tZ2l0IGEva2VybmVsL01ha2VmaWxlIGIva2VybmVsL01ha2VmaWxlCmluZGV4IDRlMWQ3ZGYuLjA2NjU1MGEgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9NYWtlZmlsZQorKysgYi9rZXJuZWwvTWFrZWZpbGUKQEAgLTI0LDYgKzI0LDcgQEAKIENGTEFHU19SRU1PVkVfc2NoZWQubyA9IC1tbm8tc3BlIC1wZwogZW5kaWYKIAorb2JqLSQoQ09ORklHX0ZSRUVaRVIpICs9IGZyZWV6ZXIubwogb2JqLSQoQ09ORklHX1BST0ZJTElORykgKz0gcHJvZmlsZS5vCiBvYmotJChDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0spICs9IHN5c2N0bF9jaGVjay5vCiBvYmotJChDT05GSUdfU1RBQ0tUUkFDRSkgKz0gc3RhY2t0cmFjZS5vCkBAIC01NSw2ICs1Niw3IEBACiBvYmotJChDT05GSUdfQ09NUEFUKSArPSBjb21wYXQubwogb2JqLSQoQ09ORklHX0NHUk9VUFMpICs9IGNncm91cC5vCiBvYmotJChDT05GSUdfQ0dST1VQX0RFQlVHKSArPSBjZ3JvdXBfZGVidWcubworb2JqLSQoQ09ORklHX0NHUk9VUF9GUkVFWkVSKSArPSBjZ3JvdXBfZnJlZXplci5vCiBvYmotJChDT05GSUdfQ1BVU0VUUykgKz0gY3B1c2V0Lm8KIG9iai0kKENPTkZJR19DR1JPVVBfTlMpICs9IG5zX2Nncm91cC5vCiBvYmotJChDT05GSUdfVVRTX05TKSArPSB1dHNuYW1lLm8KZGlmZiAtLWdpdCBhL2tlcm5lbC9hY2N0LmMgYi9rZXJuZWwvYWNjdC5jCmluZGV4IGRkNjhiOTAuLmY2MDA2YTYgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9hY2N0LmMKKysrIGIva2VybmVsL2FjY3QuYwpAQCAtNTQ4LDcgKzU0OCw3IEBACiAjZW5kaWYKIAogCXNwaW5fbG9ja19pcnEoJmN1cnJlbnQtPnNpZ2hhbmQtPnNpZ2xvY2spOwotCXR0eSA9IGN1cnJlbnQtPnNpZ25hbC0+dHR5OworCXR0eSA9IGN1cnJlbnQtPnNpZ25hbC0+dHR5OwkvKiBTYWZlIGFzIHdlIGhvbGQgdGhlIHNpZ2xvY2sgKi8KIAlhYy5hY190dHkgPSB0dHkgPyBvbGRfZW5jb2RlX2Rldih0dHlfZGV2bnVtKHR0eSkpIDogMDsKIAlhYy5hY191dGltZSA9IGVuY29kZV9jb21wX3QoamlmZmllc190b19BSFooY3B1dGltZV90b19qaWZmaWVzKHBhY2N0LT5hY191dGltZSkpKTsKIAlhYy5hY19zdGltZSA9IGVuY29kZV9jb21wX3QoamlmZmllc190b19BSFooY3B1dGltZV90b19qaWZmaWVzKHBhY2N0LT5hY19zdGltZSkpKTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9hdWRpdHNjLmMgYi9rZXJuZWwvYXVkaXRzYy5jCmluZGV4IDU5Y2VkZmIuLmNmNWJjMmYgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9hdWRpdHNjLmMKKysrIGIva2VybmVsL2F1ZGl0c2MuYwpAQCAtMjQ2LDggKzI0Niw4IEBACiAJdW5zaWduZWQgbjsKIAlpZiAodW5saWtlbHkoIWN0eCkpCiAJCXJldHVybiAwOwotCiAJbiA9IGN0eC0+bWFqb3I7CisKIAlzd2l0Y2ggKGF1ZGl0X2NsYXNzaWZ5X3N5c2NhbGwoY3R4LT5hcmNoLCBuKSkgewogCWNhc2UgMDoJLyogbmF0aXZlICovCiAJCWlmICgobWFzayAmIEFVRElUX1BFUk1fV1JJVEUpICYmCkBAIC0xMjA0LDEzICsxMjA0LDEzIEBACiAJCQkJIChjb250ZXh0LT5yZXR1cm5fdmFsaWQ9PUFVRElUU0NfU1VDQ0VTUyk/InllcyI6Im5vIiwKIAkJCQkgY29udGV4dC0+cmV0dXJuX2NvZGUpOwogCi0JbXV0ZXhfbG9jaygmdHR5X211dGV4KTsKLQlyZWFkX2xvY2soJnRhc2tsaXN0X2xvY2spOworCXNwaW5fbG9ja19pcnEoJnRzay0+c2lnaGFuZC0+c2lnbG9jayk7CiAJaWYgKHRzay0+c2lnbmFsICYmIHRzay0+c2lnbmFsLT50dHkgJiYgdHNrLT5zaWduYWwtPnR0eS0+bmFtZSkKIAkJdHR5ID0gdHNrLT5zaWduYWwtPnR0eS0+bmFtZTsKIAllbHNlCiAJCXR0eSA9ICIobm9uZSkiOwotCXJlYWRfdW5sb2NrKCZ0YXNrbGlzdF9sb2NrKTsKKwlzcGluX3VubG9ja19pcnEoJnRzay0+c2lnaGFuZC0+c2lnbG9jayk7CisKIAlhdWRpdF9sb2dfZm9ybWF0KGFiLAogCQkgICIgYTA9JWx4IGExPSVseCBhMj0lbHggYTM9JWx4IGl0ZW1zPSVkIgogCQkgICIgcHBpZD0lZCBwaWQ9JWQgYXVpZD0ldSB1aWQ9JXUgZ2lkPSV1IgpAQCAtMTIzMCw3ICsxMjMwLDYgQEAKIAkJICBjb250ZXh0LT5lZ2lkLCBjb250ZXh0LT5zZ2lkLCBjb250ZXh0LT5mc2dpZCwgdHR5LAogCQkgIHRzay0+c2Vzc2lvbmlkKTsKIAotCW11dGV4X3VubG9jaygmdHR5X211dGV4KTsKIAogCWF1ZGl0X2xvZ190YXNrX2luZm8oYWIsIHRzayk7CiAJaWYgKGNvbnRleHQtPmZpbHRlcmtleSkgewpkaWZmIC0tZ2l0IGEva2VybmVsL2Nncm91cC5jIGIva2VybmVsL2Nncm91cC5jCmluZGV4IGEwMTIzZDcuLjA0NmMxNjAgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9jZ3JvdXAuYworKysgYi9rZXJuZWwvY2dyb3VwLmMKQEAgLTI0MSw3ICsyNDEsNiBAQAogCXN0cnVjdCBjZ19jZ3JvdXBfbGluayAqbGluazsKIAlzdHJ1Y3QgY2dfY2dyb3VwX2xpbmsgKnNhdmVkX2xpbms7CiAKLQl3cml0ZV9sb2NrKCZjc3Nfc2V0X2xvY2spOwogCWhsaXN0X2RlbCgmY2ctPmhsaXN0KTsKIAljc3Nfc2V0X2NvdW50LS07CiAKQEAgLTI1MSwxNiArMjUwLDI1IEBACiAJCWxpc3RfZGVsKCZsaW5rLT5jZ3JwX2xpbmtfbGlzdCk7CiAJCWtmcmVlKGxpbmspOwogCX0KLQotCXdyaXRlX3VubG9jaygmY3NzX3NldF9sb2NrKTsKIH0KIAotc3RhdGljIHZvaWQgX19yZWxlYXNlX2Nzc19zZXQoc3RydWN0IGtyZWYgKmssIGludCB0YXNrZXhpdCkKK3N0YXRpYyB2b2lkIF9fcHV0X2Nzc19zZXQoc3RydWN0IGNzc19zZXQgKmNnLCBpbnQgdGFza2V4aXQpCiB7CiAJaW50IGk7Ci0Jc3RydWN0IGNzc19zZXQgKmNnID0gY29udGFpbmVyX29mKGssIHN0cnVjdCBjc3Nfc2V0LCByZWYpOwotCisJLyoKKwkgKiBFbnN1cmUgdGhhdCB0aGUgcmVmY291bnQgZG9lc24ndCBoaXQgemVybyB3aGlsZSBhbnkgcmVhZGVycworCSAqIGNhbiBzZWUgaXQuIFNpbWlsYXIgdG8gYXRvbWljX2RlY19hbmRfbG9jaygpLCBidXQgZm9yIGFuCisJICogcndsb2NrCisJICovCisJaWYgKGF0b21pY19hZGRfdW5sZXNzKCZjZy0+cmVmY291bnQsIC0xLCAxKSkKKwkJcmV0dXJuOworCXdyaXRlX2xvY2soJmNzc19zZXRfbG9jayk7CisJaWYgKCFhdG9taWNfZGVjX2FuZF90ZXN0KCZjZy0+cmVmY291bnQpKSB7CisJCXdyaXRlX3VubG9jaygmY3NzX3NldF9sb2NrKTsKKwkJcmV0dXJuOworCX0KIAl1bmxpbmtfY3NzX3NldChjZyk7CisJd3JpdGVfdW5sb2NrKCZjc3Nfc2V0X2xvY2spOwogCiAJcmN1X3JlYWRfbG9jaygpOwogCWZvciAoaSA9IDA7IGkgPCBDR1JPVVBfU1VCU1lTX0NPVU5UOyBpKyspIHsKQEAgLTI3NiwzMiArMjg0LDIyIEBACiAJa2ZyZWUoY2cpOwogfQogCi1zdGF0aWMgdm9pZCByZWxlYXNlX2Nzc19zZXQoc3RydWN0IGtyZWYgKmspCi17Ci0JX19yZWxlYXNlX2Nzc19zZXQoaywgMCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHJlbGVhc2VfY3NzX3NldF90YXNrZXhpdChzdHJ1Y3Qga3JlZiAqaykKLXsKLQlfX3JlbGVhc2VfY3NzX3NldChrLCAxKTsKLX0KLQogLyoKICAqIHJlZmNvdW50ZWQgZ2V0L3B1dCBmb3IgY3NzX3NldCBvYmplY3RzCiAgKi8KIHN0YXRpYyBpbmxpbmUgdm9pZCBnZXRfY3NzX3NldChzdHJ1Y3QgY3NzX3NldCAqY2cpCiB7Ci0Ja3JlZl9nZXQoJmNnLT5yZWYpOworCWF0b21pY19pbmMoJmNnLT5yZWZjb3VudCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBwdXRfY3NzX3NldChzdHJ1Y3QgY3NzX3NldCAqY2cpCiB7Ci0Ja3JlZl9wdXQoJmNnLT5yZWYsIHJlbGVhc2VfY3NzX3NldCk7CisJX19wdXRfY3NzX3NldChjZywgMCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBwdXRfY3NzX3NldF90YXNrZXhpdChzdHJ1Y3QgY3NzX3NldCAqY2cpCiB7Ci0Ja3JlZl9wdXQoJmNnLT5yZWYsIHJlbGVhc2VfY3NzX3NldF90YXNrZXhpdCk7CisJX19wdXRfY3NzX3NldChjZywgMSk7CiB9CiAKIC8qCkBAIC00MjcsNyArNDI1LDcgQEAKIAkJcmV0dXJuIE5VTEw7CiAJfQogCi0Ja3JlZl9pbml0KCZyZXMtPnJlZik7CisJYXRvbWljX3NldCgmcmVzLT5yZWZjb3VudCwgMSk7CiAJSU5JVF9MSVNUX0hFQUQoJnJlcy0+Y2dfbGlua3MpOwogCUlOSVRfTElTVF9IRUFEKCZyZXMtPnRhc2tzKTsKIAlJTklUX0hMSVNUX05PREUoJnJlcy0+aGxpc3QpOwpAQCAtODcwLDYgKzg2OCwxNCBAQAogCS5yZW1vdW50X2ZzID0gY2dyb3VwX3JlbW91bnQsCiB9OwogCitzdGF0aWMgdm9pZCBpbml0X2Nncm91cF9ob3VzZWtlZXBpbmcoc3RydWN0IGNncm91cCAqY2dycCkKK3sKKwlJTklUX0xJU1RfSEVBRCgmY2dycC0+c2libGluZyk7CisJSU5JVF9MSVNUX0hFQUQoJmNncnAtPmNoaWxkcmVuKTsKKwlJTklUX0xJU1RfSEVBRCgmY2dycC0+Y3NzX3NldHMpOworCUlOSVRfTElTVF9IRUFEKCZjZ3JwLT5yZWxlYXNlX2xpc3QpOworCWluaXRfcndzZW0oJmNncnAtPnBpZHNfbXV0ZXgpOworfQogc3RhdGljIHZvaWQgaW5pdF9jZ3JvdXBfcm9vdChzdHJ1Y3QgY2dyb3VwZnNfcm9vdCAqcm9vdCkKIHsKIAlzdHJ1Y3QgY2dyb3VwICpjZ3JwID0gJnJvb3QtPnRvcF9jZ3JvdXA7CkBAIC04NzgsMTAgKzg4NCw3IEBACiAJcm9vdC0+bnVtYmVyX29mX2Nncm91cHMgPSAxOwogCWNncnAtPnJvb3QgPSByb290OwogCWNncnAtPnRvcF9jZ3JvdXAgPSBjZ3JwOwotCUlOSVRfTElTVF9IRUFEKCZjZ3JwLT5zaWJsaW5nKTsKLQlJTklUX0xJU1RfSEVBRCgmY2dycC0+Y2hpbGRyZW4pOwotCUlOSVRfTElTVF9IRUFEKCZjZ3JwLT5jc3Nfc2V0cyk7Ci0JSU5JVF9MSVNUX0hFQUQoJmNncnAtPnJlbGVhc2VfbGlzdCk7CisJaW5pdF9jZ3JvdXBfaG91c2VrZWVwaW5nKGNncnApOwogfQogCiBzdGF0aWMgaW50IGNncm91cF90ZXN0X3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHZvaWQgKmRhdGEpCkBAIC0xNzI4LDcgKzE3MzEsNyBAQAogCiAJcmVhZF9sb2NrKCZjc3Nfc2V0X2xvY2spOwogCWxpc3RfZm9yX2VhY2hfZW50cnkobGluaywgJmNncnAtPmNzc19zZXRzLCBjZ3JwX2xpbmtfbGlzdCkgewotCQljb3VudCArPSBhdG9taWNfcmVhZCgmbGluay0+Y2ctPnJlZi5yZWZjb3VudCk7CisJCWNvdW50ICs9IGF0b21pY19yZWFkKCZsaW5rLT5jZy0+cmVmY291bnQpOwogCX0KIAlyZWFkX3VubG9jaygmY3NzX3NldF9sb2NrKTsKIAlyZXR1cm4gY291bnQ7CkBAIC0xOTk3LDE2ICsyMDAwLDcgQEAKICAqIGJ1dCB3ZSBjYW5ub3QgZ3VhcmFudGVlIHRoYXQgdGhlIGluZm9ybWF0aW9uIHdlIHByb2R1Y2UgaXMgY29ycmVjdAogICogdW5sZXNzIHdlIHByb2R1Y2UgaXQgZW50aXJlbHkgYXRvbWljYWxseS4KICAqCi0gKiBVcG9uIHRhc2tzIGZpbGUgb3BlbigpLCBhIHN0cnVjdCBjdHJfc3RydWN0IGlzIGFsbG9jYXRlZCwgdGhhdAotICogd2lsbCBoYXZlIGEgcG9pbnRlciB0byBhbiBhcnJheSAoYWxzbyBhbGxvY2F0ZWQgaGVyZSkuICBUaGUgc3RydWN0Ci0gKiBjdHJfc3RydWN0ICogaXMgc3RvcmVkIGluIGZpbGUtPnByaXZhdGVfZGF0YS4gIEl0cyByZXNvdXJjZXMgd2lsbAotICogYmUgZnJlZWQgYnkgcmVsZWFzZSgpIHdoZW4gdGhlIGZpbGUgaXMgY2xvc2VkLiAgVGhlIGFycmF5IGlzIHVzZWQKLSAqIHRvIHNwcmludGYgdGhlIFBJRHMgYW5kIHRoZW4gdXNlZCBieSByZWFkKCkuCiAgKi8KLXN0cnVjdCBjdHJfc3RydWN0IHsKLQljaGFyICpidWY7Ci0JaW50IGJ1ZnN6OwotfTsKIAogLyoKICAqIExvYWQgaW50byAncGlkYXJyYXknIHVwIHRvICducGlkcycgb2YgdGhlIHRhc2tzIHVzaW5nIGNncm91cApAQCAtMjA4OCw0MSArMjA4MiwxMzEgQEAKIAlyZXR1cm4gKihwaWRfdCAqKWEgLSAqKHBpZF90ICopYjsKIH0KIAotLyoKLSAqIENvbnZlcnQgYXJyYXkgJ2EnIG9mICducGlkcycgcGlkX3QncyB0byBhIHN0cmluZyBvZiBuZXdsaW5lIHNlcGFyYXRlZAotICogZGVjaW1hbCBwaWRzIGluICdidWYnLiAgRG9uJ3Qgd3JpdGUgbW9yZSB0aGFuICdzeicgY2hhcnMsIGJ1dCByZXR1cm4KLSAqIGNvdW50ICdjbnQnIG9mIGhvdyBtYW55IGNoYXJzIHdvdWxkIGJlIHdyaXR0ZW4gaWYgYnVmIHdlcmUgbGFyZ2UgZW5vdWdoLgotICovCi1zdGF0aWMgaW50IHBpZF9hcnJheV90b19idWYoY2hhciAqYnVmLCBpbnQgc3osIHBpZF90ICphLCBpbnQgbnBpZHMpCi17Ci0JaW50IGNudCA9IDA7Ci0JaW50IGk7CiAKLQlmb3IgKGkgPSAwOyBpIDwgbnBpZHM7IGkrKykKLQkJY250ICs9IHNucHJpbnRmKGJ1ZiArIGNudCwgbWF4KHN6IC0gY250LCAwKSwgIiVkXG4iLCBhW2ldKTsKLQlyZXR1cm4gY250OworLyoKKyAqIHNlcV9maWxlIG1ldGhvZHMgZm9yIHRoZSAidGFza3MiIGZpbGUuIFRoZSBzZXFfZmlsZSBwb3NpdGlvbiBpcyB0aGUKKyAqIG5leHQgcGlkIHRvIGRpc3BsYXk7IHRoZSBzZXFfZmlsZSBpdGVyYXRvciBpcyBhIHBvaW50ZXIgdG8gdGhlIHBpZAorICogaW4gdGhlIGNncm91cC0+dGFza3NfcGlkcyBhcnJheS4KKyAqLworCitzdGF0aWMgdm9pZCAqY2dyb3VwX3Rhc2tzX3N0YXJ0KHN0cnVjdCBzZXFfZmlsZSAqcywgbG9mZl90ICpwb3MpCit7CisJLyoKKwkgKiBJbml0aWFsbHkgd2UgcmVjZWl2ZSBhIHBvc2l0aW9uIHZhbHVlIHRoYXQgY29ycmVzcG9uZHMgdG8KKwkgKiBvbmUgbW9yZSB0aGFuIHRoZSBsYXN0IHBpZCBzaG93biAob3IgMCBvbiB0aGUgZmlyc3QgY2FsbCBvcgorCSAqIGFmdGVyIGEgc2VlayB0byB0aGUgc3RhcnQpLiBVc2UgYSBiaW5hcnktc2VhcmNoIHRvIGZpbmQgdGhlCisJICogbmV4dCBwaWQgdG8gZGlzcGxheSwgaWYgYW55CisJICovCisJc3RydWN0IGNncm91cCAqY2dycCA9IHMtPnByaXZhdGU7CisJaW50IGluZGV4ID0gMCwgcGlkID0gKnBvczsKKwlpbnQgKml0ZXI7CisKKwlkb3duX3JlYWQoJmNncnAtPnBpZHNfbXV0ZXgpOworCWlmIChwaWQpIHsKKwkJaW50IGVuZCA9IGNncnAtPnBpZHNfbGVuZ3RoOworCQlpbnQgaTsKKwkJd2hpbGUgKGluZGV4IDwgZW5kKSB7CisJCQlpbnQgbWlkID0gKGluZGV4ICsgZW5kKSAvIDI7CisJCQlpZiAoY2dycC0+dGFza3NfcGlkc1ttaWRdID09IHBpZCkgeworCQkJCWluZGV4ID0gbWlkOworCQkJCWJyZWFrOworCQkJfSBlbHNlIGlmIChjZ3JwLT50YXNrc19waWRzW21pZF0gPD0gcGlkKQorCQkJCWluZGV4ID0gbWlkICsgMTsKKwkJCWVsc2UKKwkJCQllbmQgPSBtaWQ7CisJCX0KKwl9CisJLyogSWYgd2UncmUgb2ZmIHRoZSBlbmQgb2YgdGhlIGFycmF5LCB3ZSdyZSBkb25lICovCisJaWYgKGluZGV4ID49IGNncnAtPnBpZHNfbGVuZ3RoKQorCQlyZXR1cm4gTlVMTDsKKwkvKiBVcGRhdGUgdGhlIGFic3RyYWN0IHBvc2l0aW9uIHRvIGJlIHRoZSBhY3R1YWwgcGlkIHRoYXQgd2UgZm91bmQgKi8KKwlpdGVyID0gY2dycC0+dGFza3NfcGlkcyArIGluZGV4OworCSpwb3MgPSAqaXRlcjsKKwlyZXR1cm4gaXRlcjsKIH0KIAotLyoKLSAqIEhhbmRsZSBhbiBvcGVuIG9uICd0YXNrcycgZmlsZS4gIFByZXBhcmUgYSBidWZmZXIgbGlzdGluZyB0aGUKLSAqIHByb2Nlc3MgaWQncyBvZiB0YXNrcyBjdXJyZW50bHkgYXR0YWNoZWQgdG8gdGhlIGNncm91cCBiZWluZyBvcGVuZWQuCi0gKgotICogRG9lcyBub3QgcmVxdWlyZSBhbnkgc3BlY2lmaWMgY2dyb3VwIG11dGV4ZXMsIGFuZCBkb2VzIG5vdCB0YWtlIGFueS4KLSAqLwotc3RhdGljIGludCBjZ3JvdXBfdGFza3Nfb3BlbihzdHJ1Y3QgaW5vZGUgKnVudXNlZCwgc3RydWN0IGZpbGUgKmZpbGUpCitzdGF0aWMgdm9pZCBjZ3JvdXBfdGFza3Nfc3RvcChzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHZvaWQgKnYpCit7CisJc3RydWN0IGNncm91cCAqY2dycCA9IHMtPnByaXZhdGU7CisJdXBfcmVhZCgmY2dycC0+cGlkc19tdXRleCk7Cit9CisKK3N0YXRpYyB2b2lkICpjZ3JvdXBfdGFza3NfbmV4dChzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHZvaWQgKnYsIGxvZmZfdCAqcG9zKQoreworCXN0cnVjdCBjZ3JvdXAgKmNncnAgPSBzLT5wcml2YXRlOworCWludCAqcCA9IHY7CisJaW50ICplbmQgPSBjZ3JwLT50YXNrc19waWRzICsgY2dycC0+cGlkc19sZW5ndGg7CisKKwkvKgorCSAqIEFkdmFuY2UgdG8gdGhlIG5leHQgcGlkIGluIHRoZSBhcnJheS4gSWYgdGhpcyBnb2VzIG9mZiB0aGUKKwkgKiBlbmQsIHdlJ3JlIGRvbmUKKwkgKi8KKwlwKys7CisJaWYgKHAgPj0gZW5kKSB7CisJCXJldHVybiBOVUxMOworCX0gZWxzZSB7CisJCSpwb3MgPSAqcDsKKwkJcmV0dXJuIHA7CisJfQorfQorCitzdGF0aWMgaW50IGNncm91cF90YXNrc19zaG93KHN0cnVjdCBzZXFfZmlsZSAqcywgdm9pZCAqdikKK3sKKwlyZXR1cm4gc2VxX3ByaW50ZihzLCAiJWRcbiIsICooaW50ICopdik7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgY2dyb3VwX3Rhc2tzX3NlcV9vcGVyYXRpb25zID0geworCS5zdGFydCA9IGNncm91cF90YXNrc19zdGFydCwKKwkuc3RvcCA9IGNncm91cF90YXNrc19zdG9wLAorCS5uZXh0ID0gY2dyb3VwX3Rhc2tzX25leHQsCisJLnNob3cgPSBjZ3JvdXBfdGFza3Nfc2hvdywKK307CisKK3N0YXRpYyB2b2lkIHJlbGVhc2VfY2dyb3VwX3BpZF9hcnJheShzdHJ1Y3QgY2dyb3VwICpjZ3JwKQoreworCWRvd25fd3JpdGUoJmNncnAtPnBpZHNfbXV0ZXgpOworCUJVR19PTighY2dycC0+cGlkc191c2VfY291bnQpOworCWlmICghLS1jZ3JwLT5waWRzX3VzZV9jb3VudCkgeworCQlrZnJlZShjZ3JwLT50YXNrc19waWRzKTsKKwkJY2dycC0+dGFza3NfcGlkcyA9IE5VTEw7CisJCWNncnAtPnBpZHNfbGVuZ3RoID0gMDsKKwl9CisJdXBfd3JpdGUoJmNncnAtPnBpZHNfbXV0ZXgpOworfQorCitzdGF0aWMgaW50IGNncm91cF90YXNrc19yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQogewogCXN0cnVjdCBjZ3JvdXAgKmNncnAgPSBfX2RfY2dycChmaWxlLT5mX2RlbnRyeS0+ZF9wYXJlbnQpOwotCXN0cnVjdCBjdHJfc3RydWN0ICpjdHI7Ci0JcGlkX3QgKnBpZGFycmF5OwotCWludCBucGlkczsKLQljaGFyIGM7CiAKIAlpZiAoIShmaWxlLT5mX21vZGUgJiBGTU9ERV9SRUFEKSkKIAkJcmV0dXJuIDA7CiAKLQljdHIgPSBrbWFsbG9jKHNpemVvZigqY3RyKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFjdHIpCi0JCWdvdG8gZXJyMDsKKwlyZWxlYXNlX2Nncm91cF9waWRfYXJyYXkoY2dycCk7CisJcmV0dXJuIHNlcV9yZWxlYXNlKGlub2RlLCBmaWxlKTsKK30KKworc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgY2dyb3VwX3Rhc2tzX29wZXJhdGlvbnMgPSB7CisJLnJlYWQgPSBzZXFfcmVhZCwKKwkubGxzZWVrID0gc2VxX2xzZWVrLAorCS53cml0ZSA9IGNncm91cF9maWxlX3dyaXRlLAorCS5yZWxlYXNlID0gY2dyb3VwX3Rhc2tzX3JlbGVhc2UsCit9OworCisvKgorICogSGFuZGxlIGFuIG9wZW4gb24gJ3Rhc2tzJyBmaWxlLiAgUHJlcGFyZSBhbiBhcnJheSBjb250YWluaW5nIHRoZQorICogcHJvY2VzcyBpZCdzIG9mIHRhc2tzIGN1cnJlbnRseSBhdHRhY2hlZCB0byB0aGUgY2dyb3VwIGJlaW5nIG9wZW5lZC4KKyAqLworCitzdGF0aWMgaW50IGNncm91cF90YXNrc19vcGVuKHN0cnVjdCBpbm9kZSAqdW51c2VkLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlzdHJ1Y3QgY2dyb3VwICpjZ3JwID0gX19kX2NncnAoZmlsZS0+Zl9kZW50cnktPmRfcGFyZW50KTsKKwlwaWRfdCAqcGlkYXJyYXk7CisJaW50IG5waWRzOworCWludCByZXR2YWw7CisKKwkvKiBOb3RoaW5nIHRvIGRvIGZvciB3cml0ZS1vbmx5IGZpbGVzICovCisJaWYgKCEoZmlsZS0+Zl9tb2RlICYgRk1PREVfUkVBRCkpCisJCXJldHVybiAwOwogCiAJLyoKIAkgKiBJZiBjZ3JvdXAgZ2V0cyBtb3JlIHVzZXJzIGFmdGVyIHdlIHJlYWQgY291bnQsIHdlIHdvbid0IGhhdmUKQEAgLTIxMzEsNTcgKzIyMTUsMzEgQEAKIAkgKiBzaG93IHVwIHVudGlsIHNvbWV0aW1lIGxhdGVyIG9uLgogCSAqLwogCW5waWRzID0gY2dyb3VwX3Rhc2tfY291bnQoY2dycCk7Ci0JaWYgKG5waWRzKSB7Ci0JCXBpZGFycmF5ID0ga21hbGxvYyhucGlkcyAqIHNpemVvZihwaWRfdCksIEdGUF9LRVJORUwpOwotCQlpZiAoIXBpZGFycmF5KQotCQkJZ290byBlcnIxOworCXBpZGFycmF5ID0ga21hbGxvYyhucGlkcyAqIHNpemVvZihwaWRfdCksIEdGUF9LRVJORUwpOworCWlmICghcGlkYXJyYXkpCisJCXJldHVybiAtRU5PTUVNOworCW5waWRzID0gcGlkX2FycmF5X2xvYWQocGlkYXJyYXksIG5waWRzLCBjZ3JwKTsKKwlzb3J0KHBpZGFycmF5LCBucGlkcywgc2l6ZW9mKHBpZF90KSwgY21wcGlkLCBOVUxMKTsKIAotCQlucGlkcyA9IHBpZF9hcnJheV9sb2FkKHBpZGFycmF5LCBucGlkcywgY2dycCk7Ci0JCXNvcnQocGlkYXJyYXksIG5waWRzLCBzaXplb2YocGlkX3QpLCBjbXBwaWQsIE5VTEwpOworCS8qCisJICogU3RvcmUgdGhlIGFycmF5IGluIHRoZSBjZ3JvdXAsIGZyZWVpbmcgdGhlIG9sZAorCSAqIGFycmF5IGlmIG5lY2Vzc2FyeQorCSAqLworCWRvd25fd3JpdGUoJmNncnAtPnBpZHNfbXV0ZXgpOworCWtmcmVlKGNncnAtPnRhc2tzX3BpZHMpOworCWNncnAtPnRhc2tzX3BpZHMgPSBwaWRhcnJheTsKKwljZ3JwLT5waWRzX2xlbmd0aCA9IG5waWRzOworCWNncnAtPnBpZHNfdXNlX2NvdW50Kys7CisJdXBfd3JpdGUoJmNncnAtPnBpZHNfbXV0ZXgpOwogCi0JCS8qIENhbGwgcGlkX2FycmF5X3RvX2J1ZigpIHR3aWNlLCBmaXJzdCBqdXN0IHRvIGdldCBidWZzeiAqLwotCQljdHItPmJ1ZnN6ID0gcGlkX2FycmF5X3RvX2J1ZigmYywgc2l6ZW9mKGMpLCBwaWRhcnJheSwgbnBpZHMpICsgMTsKLQkJY3RyLT5idWYgPSBrbWFsbG9jKGN0ci0+YnVmc3osIEdGUF9LRVJORUwpOwotCQlpZiAoIWN0ci0+YnVmKQotCQkJZ290byBlcnIyOwotCQljdHItPmJ1ZnN6ID0gcGlkX2FycmF5X3RvX2J1ZihjdHItPmJ1ZiwgY3RyLT5idWZzeiwgcGlkYXJyYXksIG5waWRzKTsKKwlmaWxlLT5mX29wID0gJmNncm91cF90YXNrc19vcGVyYXRpb25zOwogCi0JCWtmcmVlKHBpZGFycmF5KTsKLQl9IGVsc2UgewotCQljdHItPmJ1ZiA9IE5VTEw7Ci0JCWN0ci0+YnVmc3ogPSAwOworCXJldHZhbCA9IHNlcV9vcGVuKGZpbGUsICZjZ3JvdXBfdGFza3Nfc2VxX29wZXJhdGlvbnMpOworCWlmIChyZXR2YWwpIHsKKwkJcmVsZWFzZV9jZ3JvdXBfcGlkX2FycmF5KGNncnApOworCQlyZXR1cm4gcmV0dmFsOwogCX0KLQlmaWxlLT5wcml2YXRlX2RhdGEgPSBjdHI7Ci0JcmV0dXJuIDA7Ci0KLWVycjI6Ci0Ja2ZyZWUocGlkYXJyYXkpOwotZXJyMToKLQlrZnJlZShjdHIpOwotZXJyMDoKLQlyZXR1cm4gLUVOT01FTTsKLX0KLQotc3RhdGljIHNzaXplX3QgY2dyb3VwX3Rhc2tzX3JlYWQoc3RydWN0IGNncm91cCAqY2dycCwKLQkJCQkgICAgc3RydWN0IGNmdHlwZSAqY2Z0LAotCQkJCSAgICBzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1ZiwKLQkJCQkgICAgc2l6ZV90IG5ieXRlcywgbG9mZl90ICpwcG9zKQotewotCXN0cnVjdCBjdHJfc3RydWN0ICpjdHIgPSBmaWxlLT5wcml2YXRlX2RhdGE7Ci0KLQlyZXR1cm4gc2ltcGxlX3JlYWRfZnJvbV9idWZmZXIoYnVmLCBuYnl0ZXMsIHBwb3MsIGN0ci0+YnVmLCBjdHItPmJ1ZnN6KTsKLX0KLQotc3RhdGljIGludCBjZ3JvdXBfdGFza3NfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKnVudXNlZF9pbm9kZSwKLQkJCQkJc3RydWN0IGZpbGUgKmZpbGUpCi17Ci0Jc3RydWN0IGN0cl9zdHJ1Y3QgKmN0cjsKLQotCWlmIChmaWxlLT5mX21vZGUgJiBGTU9ERV9SRUFEKSB7Ci0JCWN0ciA9IGZpbGUtPnByaXZhdGVfZGF0YTsKLQkJa2ZyZWUoY3RyLT5idWYpOwotCQlrZnJlZShjdHIpOwotCX0KKwkoKHN0cnVjdCBzZXFfZmlsZSAqKWZpbGUtPnByaXZhdGVfZGF0YSktPnByaXZhdGUgPSBjZ3JwOwogCXJldHVybiAwOwogfQogCkBAIC0yMjEwLDcgKzIyNjgsNiBAQAogCXsKIAkJLm5hbWUgPSAidGFza3MiLAogCQkub3BlbiA9IGNncm91cF90YXNrc19vcGVuLAotCQkucmVhZCA9IGNncm91cF90YXNrc19yZWFkLAogCQkud3JpdGVfdTY0ID0gY2dyb3VwX3Rhc2tzX3dyaXRlLAogCQkucmVsZWFzZSA9IGNncm91cF90YXNrc19yZWxlYXNlLAogCQkucHJpdmF0ZSA9IEZJTEVfVEFTS0xJU1QsCkBAIC0yMzAwLDEwICsyMzU3LDcgQEAKIAogCW11dGV4X2xvY2soJmNncm91cF9tdXRleCk7CiAKLQlJTklUX0xJU1RfSEVBRCgmY2dycC0+c2libGluZyk7Ci0JSU5JVF9MSVNUX0hFQUQoJmNncnAtPmNoaWxkcmVuKTsKLQlJTklUX0xJU1RfSEVBRCgmY2dycC0+Y3NzX3NldHMpOwotCUlOSVRfTElTVF9IRUFEKCZjZ3JwLT5yZWxlYXNlX2xpc3QpOworCWluaXRfY2dyb3VwX2hvdXNla2VlcGluZyhjZ3JwKTsKIAogCWNncnAtPnBhcmVudCA9IHBhcmVudDsKIAljZ3JwLT5yb290ID0gcGFyZW50LT5yb290OwpAQCAtMjQ5NSw4ICsyNTQ5LDcgQEAKIGludCBfX2luaXQgY2dyb3VwX2luaXRfZWFybHkodm9pZCkKIHsKIAlpbnQgaTsKLQlrcmVmX2luaXQoJmluaXRfY3NzX3NldC5yZWYpOwotCWtyZWZfZ2V0KCZpbml0X2Nzc19zZXQucmVmKTsKKwlhdG9taWNfc2V0KCZpbml0X2Nzc19zZXQucmVmY291bnQsIDEpOwogCUlOSVRfTElTVF9IRUFEKCZpbml0X2Nzc19zZXQuY2dfbGlua3MpOwogCUlOSVRfTElTVF9IRUFEKCZpbml0X2Nzc19zZXQudGFza3MpOwogCUlOSVRfSExJU1RfTk9ERSgmaW5pdF9jc3Nfc2V0LmhsaXN0KTsKQEAgLTI3MzUsNiArMjc4OCw4IEBACiAgKiBDYWxsZWQgb24gZXZlcnkgY2hhbmdlIHRvIG1tLT5vd25lci4gbW1faW5pdF9vd25lcigpIGRvZXMgbm90CiAgKiBpbnZva2UgdGhpcyByb3V0aW5lLCBzaW5jZSBpdCBhc3NpZ25zIHRoZSBtbS0+b3duZXIgdGhlIGZpcnN0IHRpbWUKICAqIGFuZCBkb2VzIG5vdCBjaGFuZ2UgaXQuCisgKgorICogVGhlIGNhbGxiYWNrcyBhcmUgaW52b2tlZCB3aXRoIG1tYXBfc2VtIGhlbGQgaW4gcmVhZCBtb2RlLgogICovCiB2b2lkIGNncm91cF9tbV9vd25lcl9jYWxsYmFja3Moc3RydWN0IHRhc2tfc3RydWN0ICpvbGQsIHN0cnVjdCB0YXNrX3N0cnVjdCAqbmV3KQogewpAQCAtMjc1MCw3ICsyODA1LDcgQEAKIAkJCWlmIChvbGRjZ3JwID09IG5ld2NncnApCiAJCQkJY29udGludWU7CiAJCQlpZiAoc3MtPm1tX293bmVyX2NoYW5nZWQpCi0JCQkJc3MtPm1tX293bmVyX2NoYW5nZWQoc3MsIG9sZGNncnAsIG5ld2NncnApOworCQkJCXNzLT5tbV9vd25lcl9jaGFuZ2VkKHNzLCBvbGRjZ3JwLCBuZXdjZ3JwLCBuZXcpOwogCQl9CiAJfQogfQpkaWZmIC0tZ2l0IGEva2VybmVsL2Nncm91cF9kZWJ1Zy5jIGIva2VybmVsL2Nncm91cF9kZWJ1Zy5jCmluZGV4IGMzZGMzYWIuLmRhY2E2MjAgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9jZ3JvdXBfZGVidWcuYworKysgYi9rZXJuZWwvY2dyb3VwX2RlYnVnLmMKQEAgLTU3LDcgKzU3LDcgQEAKIAl1NjQgY291bnQ7CiAKIAlyY3VfcmVhZF9sb2NrKCk7Ci0JY291bnQgPSBhdG9taWNfcmVhZCgmY3VycmVudC0+Y2dyb3Vwcy0+cmVmLnJlZmNvdW50KTsKKwljb3VudCA9IGF0b21pY19yZWFkKCZjdXJyZW50LT5jZ3JvdXBzLT5yZWZjb3VudCk7CiAJcmN1X3JlYWRfdW5sb2NrKCk7CiAJcmV0dXJuIGNvdW50OwogfQpAQCAtOTAsNyArOTAsNyBAQAogCXsKIAkJLm5hbWUgPSAicmVsZWFzYWJsZSIsCiAJCS5yZWFkX3U2NCA9IHJlbGVhc2FibGVfcmVhZCwKLQl9CisJfSwKIH07CiAKIHN0YXRpYyBpbnQgZGVidWdfcG9wdWxhdGUoc3RydWN0IGNncm91cF9zdWJzeXMgKnNzLCBzdHJ1Y3QgY2dyb3VwICpjb250KQpkaWZmIC0tZ2l0IGEva2VybmVsL2Nncm91cF9mcmVlemVyLmMgYi9rZXJuZWwvY2dyb3VwX2ZyZWV6ZXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOTUwNTY5Ci0tLSAvZGV2L251bGwKKysrIGIva2VybmVsL2Nncm91cF9mcmVlemVyLmMKQEAgLTAsMCArMSwzNzkgQEAKKy8qCisgKiBjZ3JvdXBfZnJlZXplci5jIC0gIGNvbnRyb2wgZ3JvdXAgZnJlZXplciBzdWJzeXN0ZW0KKyAqCisgKiBDb3B5cmlnaHQgSUJNIENvcnBvcmF0aW9uLCAyMDA3CisgKgorICogQXV0aG9yIDogQ2VkcmljIExlIEdvYXRlciA8Y2xnQGZyLmlibS5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB2ZXJzaW9uIDIuMSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3b3VsZCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9jZ3JvdXAuaD4KKyNpbmNsdWRlIDxsaW51eC9mcy5oPgorI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC9mcmVlemVyLmg+CisjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KKworZW51bSBmcmVlemVyX3N0YXRlIHsKKwlDR1JPVVBfVEhBV0VEID0gMCwKKwlDR1JPVVBfRlJFRVpJTkcsCisJQ0dST1VQX0ZST1pFTiwKK307CisKK3N0cnVjdCBmcmVlemVyIHsKKwlzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSBjc3M7CisJZW51bSBmcmVlemVyX3N0YXRlIHN0YXRlOworCXNwaW5sb2NrX3QgbG9jazsgLyogcHJvdGVjdHMgX3dyaXRlc18gdG8gc3RhdGUgKi8KK307CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGZyZWV6ZXIgKmNncm91cF9mcmVlemVyKAorCQlzdHJ1Y3QgY2dyb3VwICpjZ3JvdXApCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZigKKwkJY2dyb3VwX3N1YnN5c19zdGF0ZShjZ3JvdXAsIGZyZWV6ZXJfc3Vic3lzX2lkKSwKKwkJc3RydWN0IGZyZWV6ZXIsIGNzcyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGZyZWV6ZXIgKnRhc2tfZnJlZXplcihzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZih0YXNrX3N1YnN5c19zdGF0ZSh0YXNrLCBmcmVlemVyX3N1YnN5c19pZCksCisJCQkgICAgc3RydWN0IGZyZWV6ZXIsIGNzcyk7Cit9CisKK2ludCBjZ3JvdXBfZnJvemVuKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaykKK3sKKwlzdHJ1Y3QgZnJlZXplciAqZnJlZXplcjsKKwllbnVtIGZyZWV6ZXJfc3RhdGUgc3RhdGU7CisKKwl0YXNrX2xvY2sodGFzayk7CisJZnJlZXplciA9IHRhc2tfZnJlZXplcih0YXNrKTsKKwlzdGF0ZSA9IGZyZWV6ZXItPnN0YXRlOworCXRhc2tfdW5sb2NrKHRhc2spOworCisJcmV0dXJuIHN0YXRlID09IENHUk9VUF9GUk9aRU47Cit9CisKKy8qCisgKiBjZ3JvdXBzX3dyaXRlX3N0cmluZygpIGxpbWl0cyB0aGUgc2l6ZSBvZiBmcmVlemVyIHN0YXRlIHN0cmluZ3MgdG8KKyAqIENHUk9VUF9MT0NBTF9CVUZGRVJfU0laRQorICovCitzdGF0aWMgY29uc3QgY2hhciAqZnJlZXplcl9zdGF0ZV9zdHJzW10gPSB7CisJIlRIQVdFRCIsCisJIkZSRUVaSU5HIiwKKwkiRlJPWkVOIiwKK307CisKKy8qCisgKiBTdGF0ZSBkaWFncmFtCisgKiBUcmFuc2l0aW9ucyBhcmUgY2F1c2VkIGJ5IHVzZXJzcGFjZSB3cml0ZXMgdG8gdGhlIGZyZWV6ZXIuc3RhdGUgZmlsZS4KKyAqIFRoZSB2YWx1ZXMgaW4gcGFyZW50aGVzaXMgYXJlIHN0YXRlIGxhYmVscy4gVGhlIHJlc3QgYXJlIGVkZ2UgbGFiZWxzLgorICoKKyAqIChUSEFXRUQpIC0tRlJPWkVOLS0+IChGUkVFWklORykgLS1GUk9aRU4tLT4gKEZST1pFTikKKyAqICAgIF4gXiAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgIHwKKyAqICAgIHwgXF9fX19fX19USEFXRURfX19fX19fLyAgICAgICAgICAgICAgICAgICAgIHwKKyAqICAgIFxfX19fX19fX19fX19fX19fX19fX19fX19fX1RIQVdFRF9fX19fX19fX19fXy8KKyAqLworCitzdHJ1Y3QgY2dyb3VwX3N1YnN5cyBmcmVlemVyX3N1YnN5czsKKworLyogTG9ja3MgdGFrZW4gYW5kIHRoZWlyIG9yZGVyaW5nCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIGNzc19zZXRfbG9jaworICogY2dyb3VwX211dGV4IChBS0EgY2dyb3VwX2xvY2spCisgKiB0YXNrLT5hbGxvY19sb2NrIChBS0EgdGFza19sb2NrKQorICogZnJlZXplci0+bG9jaworICogdGFzay0+c2lnaGFuZC0+c2lnbG9jaworICoKKyAqIGNncm91cCBjb2RlIGZvcmNlcyBjc3Nfc2V0X2xvY2sgdG8gYmUgdGFrZW4gYmVmb3JlIHRhc2stPmFsbG9jX2xvY2sKKyAqCisgKiBmcmVlemVyX2NyZWF0ZSgpLCBmcmVlemVyX2Rlc3Ryb3koKToKKyAqIGNncm91cF9tdXRleCBbIGJ5IGNncm91cCBjb3JlIF0KKyAqCisgKiBjYW5fYXR0YWNoKCk6CisgKiBjZ3JvdXBfbXV0ZXgKKyAqCisgKiBjZ3JvdXBfZnJvemVuKCk6CisgKiB0YXNrLT5hbGxvY19sb2NrICh0byBnZXQgdGFzaydzIGNncm91cCkKKyAqCisgKiBmcmVlemVyX2ZvcmsoKSAocHJlc2VydmluZyBmb3JrKCkgcGVyZm9ybWFuY2UgbWVhbnMgY2FuJ3QgdGFrZSBjZ3JvdXBfbXV0ZXgpOgorICogdGFzay0+YWxsb2NfbG9jayAodG8gZ2V0IHRhc2sncyBjZ3JvdXApCisgKiBmcmVlemVyLT5sb2NrCisgKiAgc2lnaGFuZC0+c2lnbG9jayAoaWYgdGhlIGNncm91cCBpcyBmcmVlemluZykKKyAqCisgKiBmcmVlemVyX3JlYWQoKToKKyAqIGNncm91cF9tdXRleAorICogIGZyZWV6ZXItPmxvY2sKKyAqICAgcmVhZF9sb2NrIGNzc19zZXRfbG9jayAoY2dyb3VwIGl0ZXJhdG9yIHN0YXJ0KQorICoKKyAqIGZyZWV6ZXJfd3JpdGUoKSAoZnJlZXplKToKKyAqIGNncm91cF9tdXRleAorICogIGZyZWV6ZXItPmxvY2sKKyAqICAgcmVhZF9sb2NrIGNzc19zZXRfbG9jayAoY2dyb3VwIGl0ZXJhdG9yIHN0YXJ0KQorICogICAgc2lnaGFuZC0+c2lnbG9jaworICoKKyAqIGZyZWV6ZXJfd3JpdGUoKSAodW5mcmVlemUpOgorICogY2dyb3VwX211dGV4CisgKiAgZnJlZXplci0+bG9jaworICogICByZWFkX2xvY2sgY3NzX3NldF9sb2NrIChjZ3JvdXAgaXRlcmF0b3Igc3RhcnQpCisgKiAgICB0YXNrLT5hbGxvY19sb2NrICh0byBwcmV2ZW50IHJhY2VzIHdpdGggZnJlZXplX3Rhc2soKSkKKyAqICAgICBzaWdoYW5kLT5zaWdsb2NrCisgKi8KK3N0YXRpYyBzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqZnJlZXplcl9jcmVhdGUoc3RydWN0IGNncm91cF9zdWJzeXMgKnNzLAorCQkJCQkJICBzdHJ1Y3QgY2dyb3VwICpjZ3JvdXApCit7CisJc3RydWN0IGZyZWV6ZXIgKmZyZWV6ZXI7CisKKwlmcmVlemVyID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGZyZWV6ZXIpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWZyZWV6ZXIpCisJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOworCisJc3Bpbl9sb2NrX2luaXQoJmZyZWV6ZXItPmxvY2spOworCWZyZWV6ZXItPnN0YXRlID0gQ0dST1VQX1RIQVdFRDsKKwlyZXR1cm4gJmZyZWV6ZXItPmNzczsKK30KKworc3RhdGljIHZvaWQgZnJlZXplcl9kZXN0cm95KHN0cnVjdCBjZ3JvdXBfc3Vic3lzICpzcywKKwkJCSAgICBzdHJ1Y3QgY2dyb3VwICpjZ3JvdXApCit7CisJa2ZyZWUoY2dyb3VwX2ZyZWV6ZXIoY2dyb3VwKSk7Cit9CisKKy8qIFRhc2sgaXMgZnJvemVuIG9yIHdpbGwgZnJlZXplIGltbWVkaWF0ZWx5IHdoZW4gbmV4dCBpdCBnZXRzIHdva2VuICovCitzdGF0aWMgYm9vbCBpc190YXNrX2Zyb3plbl9lbm91Z2goc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKQoreworCXJldHVybiBmcm96ZW4odGFzaykgfHwKKwkJKHRhc2tfaXNfc3RvcHBlZF9vcl90cmFjZWQodGFzaykgJiYgZnJlZXppbmcodGFzaykpOworfQorCisvKgorICogVGhlIGNhbGwgdG8gY2dyb3VwX2xvY2soKSBpbiB0aGUgZnJlZXplci5zdGF0ZSB3cml0ZSBtZXRob2QgcHJldmVudHMKKyAqIGEgd3JpdGUgdG8gdGhhdCBmaWxlIHJhY2luZyBhZ2FpbnN0IGFuIGF0dGFjaCwgYW5kIGhlbmNlIHRoZQorICogY2FuX2F0dGFjaCgpIHJlc3VsdCB3aWxsIHJlbWFpbiB2YWxpZCB1bnRpbCB0aGUgYXR0YWNoIGNvbXBsZXRlcy4KKyAqLworc3RhdGljIGludCBmcmVlemVyX2Nhbl9hdHRhY2goc3RydWN0IGNncm91cF9zdWJzeXMgKnNzLAorCQkJICAgICAgc3RydWN0IGNncm91cCAqbmV3X2Nncm91cCwKKwkJCSAgICAgIHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaykKK3sKKwlzdHJ1Y3QgZnJlZXplciAqZnJlZXplcjsKKwlpbnQgcmV0dmFsOworCisJLyogQW55dGhpbmcgZnJvemVuIGNhbid0IG1vdmUgb3IgYmUgbW92ZWQgdG8vZnJvbSAqLworCisJaWYgKGlzX3Rhc2tfZnJvemVuX2Vub3VnaCh0YXNrKSkKKwkJcmV0dXJuIC1FQlVTWTsKKworCWZyZWV6ZXIgPSBjZ3JvdXBfZnJlZXplcihuZXdfY2dyb3VwKTsKKwlpZiAoZnJlZXplci0+c3RhdGUgPT0gQ0dST1VQX0ZST1pFTikKKwkJcmV0dXJuIC1FQlVTWTsKKworCXJldHZhbCA9IDA7CisJdGFza19sb2NrKHRhc2spOworCWZyZWV6ZXIgPSB0YXNrX2ZyZWV6ZXIodGFzayk7CisJaWYgKGZyZWV6ZXItPnN0YXRlID09IENHUk9VUF9GUk9aRU4pCisJCXJldHZhbCA9IC1FQlVTWTsKKwl0YXNrX3VubG9jayh0YXNrKTsKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgdm9pZCBmcmVlemVyX2Zvcmsoc3RydWN0IGNncm91cF9zdWJzeXMgKnNzLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spCit7CisJc3RydWN0IGZyZWV6ZXIgKmZyZWV6ZXI7CisKKwl0YXNrX2xvY2sodGFzayk7CisJZnJlZXplciA9IHRhc2tfZnJlZXplcih0YXNrKTsKKwl0YXNrX3VubG9jayh0YXNrKTsKKworCUJVR19PTihmcmVlemVyLT5zdGF0ZSA9PSBDR1JPVVBfRlJPWkVOKTsKKwlzcGluX2xvY2tfaXJxKCZmcmVlemVyLT5sb2NrKTsKKwkvKiBMb2NraW5nIGF2b2lkcyByYWNlIHdpdGggRlJFRVpJTkcgLT4gVEhBV0VEIHRyYW5zaXRpb25zLiAqLworCWlmIChmcmVlemVyLT5zdGF0ZSA9PSBDR1JPVVBfRlJFRVpJTkcpCisJCWZyZWV6ZV90YXNrKHRhc2ssIHRydWUpOworCXNwaW5fdW5sb2NrX2lycSgmZnJlZXplci0+bG9jayk7Cit9CisKKy8qCisgKiBjYWxsZXIgbXVzdCBob2xkIGZyZWV6ZXItPmxvY2sKKyAqLworc3RhdGljIHZvaWQgdXBkYXRlX2ZyZWV6ZXJfc3RhdGUoc3RydWN0IGNncm91cCAqY2dyb3VwLAorCQkJCSBzdHJ1Y3QgZnJlZXplciAqZnJlZXplcikKK3sKKwlzdHJ1Y3QgY2dyb3VwX2l0ZXIgaXQ7CisJc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrOworCXVuc2lnbmVkIGludCBuZnJvemVuID0gMCwgbnRvdGFsID0gMDsKKworCWNncm91cF9pdGVyX3N0YXJ0KGNncm91cCwgJml0KTsKKwl3aGlsZSAoKHRhc2sgPSBjZ3JvdXBfaXRlcl9uZXh0KGNncm91cCwgJml0KSkpIHsKKwkJbnRvdGFsKys7CisJCWlmIChpc190YXNrX2Zyb3plbl9lbm91Z2godGFzaykpCisJCQluZnJvemVuKys7CisJfQorCisJLyoKKwkgKiBUcmFuc2l0aW9uIHRvIEZST1pFTiB3aGVuIG5vIG5ldyB0YXNrcyBjYW4gYmUgYWRkZWQgZW5zdXJlcworCSAqIHRoYXQgd2UgbmV2ZXIgZXhpc3QgaW4gdGhlIEZST1pFTiBzdGF0ZSB3aGlsZSB0aGVyZSBhcmUgdW5mcm96ZW4KKwkgKiB0YXNrcy4KKwkgKi8KKwlpZiAobmZyb3plbiA9PSBudG90YWwpCisJCWZyZWV6ZXItPnN0YXRlID0gQ0dST1VQX0ZST1pFTjsKKwllbHNlIGlmIChuZnJvemVuID4gMCkKKwkJZnJlZXplci0+c3RhdGUgPSBDR1JPVVBfRlJFRVpJTkc7CisJZWxzZQorCQlmcmVlemVyLT5zdGF0ZSA9IENHUk9VUF9USEFXRUQ7CisJY2dyb3VwX2l0ZXJfZW5kKGNncm91cCwgJml0KTsKK30KKworc3RhdGljIGludCBmcmVlemVyX3JlYWQoc3RydWN0IGNncm91cCAqY2dyb3VwLCBzdHJ1Y3QgY2Z0eXBlICpjZnQsCisJCQlzdHJ1Y3Qgc2VxX2ZpbGUgKm0pCit7CisJc3RydWN0IGZyZWV6ZXIgKmZyZWV6ZXI7CisJZW51bSBmcmVlemVyX3N0YXRlIHN0YXRlOworCisJaWYgKCFjZ3JvdXBfbG9ja19saXZlX2dyb3VwKGNncm91cCkpCisJCXJldHVybiAtRU5PREVWOworCisJZnJlZXplciA9IGNncm91cF9mcmVlemVyKGNncm91cCk7CisJc3Bpbl9sb2NrX2lycSgmZnJlZXplci0+bG9jayk7CisJc3RhdGUgPSBmcmVlemVyLT5zdGF0ZTsKKwlpZiAoc3RhdGUgPT0gQ0dST1VQX0ZSRUVaSU5HKSB7CisJCS8qIFdlIGNoYW5nZSBmcm9tIEZSRUVaSU5HIHRvIEZST1pFTiBsYXppbHkgaWYgdGhlIGNncm91cCB3YXMKKwkJICogb25seSBwYXJ0aWFsbHkgZnJvemVuIHdoZW4gd2UgZXhpdHRlZCB3cml0ZS4gKi8KKwkJdXBkYXRlX2ZyZWV6ZXJfc3RhdGUoY2dyb3VwLCBmcmVlemVyKTsKKwkJc3RhdGUgPSBmcmVlemVyLT5zdGF0ZTsKKwl9CisJc3Bpbl91bmxvY2tfaXJxKCZmcmVlemVyLT5sb2NrKTsKKwljZ3JvdXBfdW5sb2NrKCk7CisKKwlzZXFfcHV0cyhtLCBmcmVlemVyX3N0YXRlX3N0cnNbc3RhdGVdKTsKKwlzZXFfcHV0YyhtLCAnXG4nKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB0cnlfdG9fZnJlZXplX2Nncm91cChzdHJ1Y3QgY2dyb3VwICpjZ3JvdXAsIHN0cnVjdCBmcmVlemVyICpmcmVlemVyKQoreworCXN0cnVjdCBjZ3JvdXBfaXRlciBpdDsKKwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2s7CisJdW5zaWduZWQgaW50IG51bV9jYW50X2ZyZWV6ZV9ub3cgPSAwOworCisJZnJlZXplci0+c3RhdGUgPSBDR1JPVVBfRlJFRVpJTkc7CisJY2dyb3VwX2l0ZXJfc3RhcnQoY2dyb3VwLCAmaXQpOworCXdoaWxlICgodGFzayA9IGNncm91cF9pdGVyX25leHQoY2dyb3VwLCAmaXQpKSkgeworCQlpZiAoIWZyZWV6ZV90YXNrKHRhc2ssIHRydWUpKQorCQkJY29udGludWU7CisJCWlmIChpc190YXNrX2Zyb3plbl9lbm91Z2godGFzaykpCisJCQljb250aW51ZTsKKwkJaWYgKCFmcmVlemluZyh0YXNrKSAmJiAhZnJlZXplcl9zaG91bGRfc2tpcCh0YXNrKSkKKwkJCW51bV9jYW50X2ZyZWV6ZV9ub3crKzsKKwl9CisJY2dyb3VwX2l0ZXJfZW5kKGNncm91cCwgJml0KTsKKworCXJldHVybiBudW1fY2FudF9mcmVlemVfbm93ID8gLUVCVVNZIDogMDsKK30KKworc3RhdGljIGludCB1bmZyZWV6ZV9jZ3JvdXAoc3RydWN0IGNncm91cCAqY2dyb3VwLCBzdHJ1Y3QgZnJlZXplciAqZnJlZXplcikKK3sKKwlzdHJ1Y3QgY2dyb3VwX2l0ZXIgaXQ7CisJc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrOworCisJY2dyb3VwX2l0ZXJfc3RhcnQoY2dyb3VwLCAmaXQpOworCXdoaWxlICgodGFzayA9IGNncm91cF9pdGVyX25leHQoY2dyb3VwLCAmaXQpKSkgeworCQlpbnQgZG9fd2FrZTsKKworCQl0YXNrX2xvY2sodGFzayk7CisJCWRvX3dha2UgPSBfX3RoYXdfcHJvY2Vzcyh0YXNrKTsKKwkJdGFza191bmxvY2sodGFzayk7CisJCWlmIChkb193YWtlKQorCQkJd2FrZV91cF9wcm9jZXNzKHRhc2spOworCX0KKwljZ3JvdXBfaXRlcl9lbmQoY2dyb3VwLCAmaXQpOworCWZyZWV6ZXItPnN0YXRlID0gQ0dST1VQX1RIQVdFRDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGZyZWV6ZXJfY2hhbmdlX3N0YXRlKHN0cnVjdCBjZ3JvdXAgKmNncm91cCwKKwkJCQllbnVtIGZyZWV6ZXJfc3RhdGUgZ29hbF9zdGF0ZSkKK3sKKwlzdHJ1Y3QgZnJlZXplciAqZnJlZXplcjsKKwlpbnQgcmV0dmFsID0gMDsKKworCWZyZWV6ZXIgPSBjZ3JvdXBfZnJlZXplcihjZ3JvdXApOworCXNwaW5fbG9ja19pcnEoJmZyZWV6ZXItPmxvY2spOworCXVwZGF0ZV9mcmVlemVyX3N0YXRlKGNncm91cCwgZnJlZXplcik7CisJaWYgKGdvYWxfc3RhdGUgPT0gZnJlZXplci0+c3RhdGUpCisJCWdvdG8gb3V0OworCXN3aXRjaCAoZnJlZXplci0+c3RhdGUpIHsKKwljYXNlIENHUk9VUF9USEFXRUQ6CisJCXJldHZhbCA9IHRyeV90b19mcmVlemVfY2dyb3VwKGNncm91cCwgZnJlZXplcik7CisJCWJyZWFrOworCWNhc2UgQ0dST1VQX0ZSRUVaSU5HOgorCQlpZiAoZ29hbF9zdGF0ZSA9PSBDR1JPVVBfRlJPWkVOKSB7CisJCQkvKiBVc2Vyc3BhY2UgaXMgcmV0cnlpbmcgYWZ0ZXIKKwkJCSAqICIvYmluL2VjaG8gRlJPWkVOID4gZnJlZXplci5zdGF0ZSIgcmV0dXJuZWQgLUVCVVNZICovCisJCQlyZXR2YWwgPSB0cnlfdG9fZnJlZXplX2Nncm91cChjZ3JvdXAsIGZyZWV6ZXIpOworCQkJYnJlYWs7CisJCX0KKwkJLyogc3RhdGUgPT0gRlJFRVpJTkcgYW5kIGdvYWxfc3RhdGUgPT0gVEhBV0VELCBzbyB1bmZyZWV6ZSAqLworCWNhc2UgQ0dST1VQX0ZST1pFTjoKKwkJcmV0dmFsID0gdW5mcmVlemVfY2dyb3VwKGNncm91cCwgZnJlZXplcik7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KK291dDoKKwlzcGluX3VubG9ja19pcnEoJmZyZWV6ZXItPmxvY2spOworCisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIGludCBmcmVlemVyX3dyaXRlKHN0cnVjdCBjZ3JvdXAgKmNncm91cCwKKwkJCSBzdHJ1Y3QgY2Z0eXBlICpjZnQsCisJCQkgY29uc3QgY2hhciAqYnVmZmVyKQoreworCWludCByZXR2YWw7CisJZW51bSBmcmVlemVyX3N0YXRlIGdvYWxfc3RhdGU7CisKKwlpZiAoc3RyY21wKGJ1ZmZlciwgZnJlZXplcl9zdGF0ZV9zdHJzW0NHUk9VUF9USEFXRURdKSA9PSAwKQorCQlnb2FsX3N0YXRlID0gQ0dST1VQX1RIQVdFRDsKKwllbHNlIGlmIChzdHJjbXAoYnVmZmVyLCBmcmVlemVyX3N0YXRlX3N0cnNbQ0dST1VQX0ZST1pFTl0pID09IDApCisJCWdvYWxfc3RhdGUgPSBDR1JPVVBfRlJPWkVOOworCWVsc2UKKwkJcmV0dXJuIC1FSU87CisKKwlpZiAoIWNncm91cF9sb2NrX2xpdmVfZ3JvdXAoY2dyb3VwKSkKKwkJcmV0dXJuIC1FTk9ERVY7CisJcmV0dmFsID0gZnJlZXplcl9jaGFuZ2Vfc3RhdGUoY2dyb3VwLCBnb2FsX3N0YXRlKTsKKwljZ3JvdXBfdW5sb2NrKCk7CisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIHN0cnVjdCBjZnR5cGUgZmlsZXNbXSA9IHsKKwl7CisJCS5uYW1lID0gInN0YXRlIiwKKwkJLnJlYWRfc2VxX3N0cmluZyA9IGZyZWV6ZXJfcmVhZCwKKwkJLndyaXRlX3N0cmluZyA9IGZyZWV6ZXJfd3JpdGUsCisJfSwKK307CisKK3N0YXRpYyBpbnQgZnJlZXplcl9wb3B1bGF0ZShzdHJ1Y3QgY2dyb3VwX3N1YnN5cyAqc3MsIHN0cnVjdCBjZ3JvdXAgKmNncm91cCkKK3sKKwlyZXR1cm4gY2dyb3VwX2FkZF9maWxlcyhjZ3JvdXAsIHNzLCBmaWxlcywgQVJSQVlfU0laRShmaWxlcykpOworfQorCitzdHJ1Y3QgY2dyb3VwX3N1YnN5cyBmcmVlemVyX3N1YnN5cyA9IHsKKwkubmFtZQkJPSAiZnJlZXplciIsCisJLmNyZWF0ZQkJPSBmcmVlemVyX2NyZWF0ZSwKKwkuZGVzdHJveQk9IGZyZWV6ZXJfZGVzdHJveSwKKwkucG9wdWxhdGUJPSBmcmVlemVyX3BvcHVsYXRlLAorCS5zdWJzeXNfaWQJPSBmcmVlemVyX3N1YnN5c19pZCwKKwkuY2FuX2F0dGFjaAk9IGZyZWV6ZXJfY2FuX2F0dGFjaCwKKwkuYXR0YWNoCQk9IE5VTEwsCisJLmZvcmsJCT0gZnJlZXplcl9mb3JrLAorCS5leGl0CQk9IE5VTEwsCit9OwpkaWZmIC0tZ2l0IGEva2VybmVsL2NvbXBhdC5jIGIva2VybmVsL2NvbXBhdC5jCmluZGV4IDMyYzI1NGEuLjhlYWZlM2UgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9jb21wYXQuYworKysgYi9rZXJuZWwvY29tcGF0LmMKQEAgLTIzLDkgKzIzLDY4IEBACiAjaW5jbHVkZSA8bGludXgvdGltZXguaD4KICNpbmNsdWRlIDxsaW51eC9taWdyYXRlLmg+CiAjaW5jbHVkZSA8bGludXgvcG9zaXgtdGltZXJzLmg+CisjaW5jbHVkZSA8bGludXgvdGltZXMuaD4KIAogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAKKy8qCisgKiBOb3RlIHRoYXQgdGhlIG5hdGl2ZSBzaWRlIGlzIGFscmVhZHkgY29udmVydGVkIHRvIGEgdGltZXNwZWMsIGJlY2F1c2UKKyAqIHRoYXQncyB3aGF0IHdlIHdhbnQgYW55d2F5LgorICovCitzdGF0aWMgaW50IGNvbXBhdF9nZXRfdGltZXZhbChzdHJ1Y3QgdGltZXNwZWMgKm8sCisJCXN0cnVjdCBjb21wYXRfdGltZXZhbCBfX3VzZXIgKmkpCit7CisJbG9uZyB1c2VjOworCisJaWYgKGdldF91c2VyKG8tPnR2X3NlYywgJmktPnR2X3NlYykgfHwKKwkgICAgZ2V0X3VzZXIodXNlYywgJmktPnR2X3VzZWMpKQorCQlyZXR1cm4gLUVGQVVMVDsKKwlvLT50dl9uc2VjID0gdXNlYyAqIDEwMDA7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY29tcGF0X3B1dF90aW1ldmFsKHN0cnVjdCBjb21wYXRfdGltZXZhbCBfX3VzZXIgKm8sCisJCXN0cnVjdCB0aW1ldmFsICppKQoreworCXJldHVybiAocHV0X3VzZXIoaS0+dHZfc2VjLCAmby0+dHZfc2VjKSB8fAorCQlwdXRfdXNlcihpLT50dl91c2VjLCAmby0+dHZfdXNlYykpID8gLUVGQVVMVCA6IDA7Cit9CisKK2FzbWxpbmthZ2UgbG9uZyBjb21wYXRfc3lzX2dldHRpbWVvZmRheShzdHJ1Y3QgY29tcGF0X3RpbWV2YWwgX191c2VyICp0diwKKwkJc3RydWN0IHRpbWV6b25lIF9fdXNlciAqdHopCit7CisJaWYgKHR2KSB7CisJCXN0cnVjdCB0aW1ldmFsIGt0djsKKwkJZG9fZ2V0dGltZW9mZGF5KCZrdHYpOworCQlpZiAoY29tcGF0X3B1dF90aW1ldmFsKHR2LCAma3R2KSkKKwkJCXJldHVybiAtRUZBVUxUOworCX0KKwlpZiAodHopIHsKKwkJaWYgKGNvcHlfdG9fdXNlcih0eiwgJnN5c190eiwgc2l6ZW9mKHN5c190eikpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK2FzbWxpbmthZ2UgbG9uZyBjb21wYXRfc3lzX3NldHRpbWVvZmRheShzdHJ1Y3QgY29tcGF0X3RpbWV2YWwgX191c2VyICp0diwKKwkJc3RydWN0IHRpbWV6b25lIF9fdXNlciAqdHopCit7CisJc3RydWN0IHRpbWVzcGVjIGt0czsKKwlzdHJ1Y3QgdGltZXpvbmUga3R6OworCisJaWYgKHR2KSB7CisJCWlmIChjb21wYXRfZ2V0X3RpbWV2YWwoJmt0cywgdHYpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisJfQorCWlmICh0eikgeworCQlpZiAoY29weV9mcm9tX3VzZXIoJmt0eiwgdHosIHNpemVvZihrdHopKSkKKwkJCXJldHVybiAtRUZBVUxUOworCX0KKworCXJldHVybiBkb19zeXNfc2V0dGltZW9mZGF5KHR2ID8gJmt0cyA6IE5VTEwsIHR6ID8gJmt0eiA6IE5VTEwpOworfQorCiBpbnQgZ2V0X2NvbXBhdF90aW1lc3BlYyhzdHJ1Y3QgdGltZXNwZWMgKnRzLCBjb25zdCBzdHJ1Y3QgY29tcGF0X3RpbWVzcGVjIF9fdXNlciAqY3RzKQogewogCXJldHVybiAoIWFjY2Vzc19vayhWRVJJRllfUkVBRCwgY3RzLCBzaXplb2YoKmN0cykpIHx8CkBAIC0xNTAsNDkgKzIwOSwyMyBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgY29tcGF0X2Nsb2NrX3QgY2xvY2tfdF90b19jb21wYXRfY2xvY2tfdChjbG9ja190IHgpCit7CisJcmV0dXJuIGNvbXBhdF9qaWZmaWVzX3RvX2Nsb2NrX3QoY2xvY2tfdF90b19qaWZmaWVzKHgpKTsKK30KKwogYXNtbGlua2FnZSBsb25nIGNvbXBhdF9zeXNfdGltZXMoc3RydWN0IGNvbXBhdF90bXMgX191c2VyICp0YnVmKQogewotCS8qCi0JICoJSW4gdGhlIFNNUCB3b3JsZCB3ZSBtaWdodCBqdXN0IGJlIHVubHVja3kgYW5kIGhhdmUgb25lIG9mCi0JICoJdGhlIHRpbWVzIGluY3JlbWVudCBhcyB3ZSB1c2UgaXQuIFNpbmNlIHRoZSB2YWx1ZSBpcyBhbgotCSAqCWF0b21pY2FsbHkgc2FmZSB0eXBlIHRoaXMgaXMganVzdCBmaW5lLiBDb25jZXB0dWFsbHkgaXRzCi0JICoJYXMgaWYgdGhlIHN5c2NhbGwgdG9vayBhbiBpbnN0YW50IGxvbmdlciB0byBvY2N1ci4KLQkgKi8KIAlpZiAodGJ1ZikgeworCQlzdHJ1Y3QgdG1zIHRtczsKIAkJc3RydWN0IGNvbXBhdF90bXMgdG1wOwotCQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzayA9IGN1cnJlbnQ7Ci0JCXN0cnVjdCB0YXNrX3N0cnVjdCAqdDsKLQkJY3B1dGltZV90IHV0aW1lLCBzdGltZSwgY3V0aW1lLCBjc3RpbWU7CiAKLQkJcmVhZF9sb2NrKCZ0YXNrbGlzdF9sb2NrKTsKLQkJdXRpbWUgPSB0c2stPnNpZ25hbC0+dXRpbWU7Ci0JCXN0aW1lID0gdHNrLT5zaWduYWwtPnN0aW1lOwotCQl0ID0gdHNrOwotCQlkbyB7Ci0JCQl1dGltZSA9IGNwdXRpbWVfYWRkKHV0aW1lLCB0LT51dGltZSk7Ci0JCQlzdGltZSA9IGNwdXRpbWVfYWRkKHN0aW1lLCB0LT5zdGltZSk7Ci0JCQl0ID0gbmV4dF90aHJlYWQodCk7Ci0JCX0gd2hpbGUgKHQgIT0gdHNrKTsKLQotCQkvKgotCQkgKiBXaGlsZSB3ZSBoYXZlIHRhc2tsaXN0X2xvY2sgcmVhZC1sb2NrZWQsIG5vIGR5aW5nIHRocmVhZAotCQkgKiBjYW4gYmUgdXBkYXRpbmcgY3VycmVudC0+c2lnbmFsLT5bdXNddGltZS4gIEluc3RlYWQsCi0JCSAqIHdlIGdvdCB0aGVpciBjb3VudHMgaW5jbHVkZWQgaW4gdGhlIGxpdmUgdGhyZWFkIGxvb3AuCi0JCSAqIEhvd2V2ZXIsIGFub3RoZXIgdGhyZWFkIGNhbiBjb21lIGluIHJpZ2h0IG5vdyBhbmQKLQkJICogZG8gYSB3YWl0IGNhbGwgdGhhdCB1cGRhdGVzIGN1cnJlbnQtPnNpZ25hbC0+Y1t1c110aW1lLgotCQkgKiBUbyBtYWtlIHN1cmUgd2UgYWx3YXlzIHNlZSB0aGF0IHBhaXIgdXBkYXRlZCBhdG9taWNhbGx5LAotCQkgKiB3ZSB0YWtlIHRoZSBzaWdsb2NrIGFyb3VuZCBmZXRjaGluZyB0aGVtLgotCQkgKi8KLQkJc3Bpbl9sb2NrX2lycSgmdHNrLT5zaWdoYW5kLT5zaWdsb2NrKTsKLQkJY3V0aW1lID0gdHNrLT5zaWduYWwtPmN1dGltZTsKLQkJY3N0aW1lID0gdHNrLT5zaWduYWwtPmNzdGltZTsKLQkJc3Bpbl91bmxvY2tfaXJxKCZ0c2stPnNpZ2hhbmQtPnNpZ2xvY2spOwotCQlyZWFkX3VubG9jaygmdGFza2xpc3RfbG9jayk7Ci0KLQkJdG1wLnRtc191dGltZSA9IGNvbXBhdF9qaWZmaWVzX3RvX2Nsb2NrX3QoY3B1dGltZV90b19qaWZmaWVzKHV0aW1lKSk7Ci0JCXRtcC50bXNfc3RpbWUgPSBjb21wYXRfamlmZmllc190b19jbG9ja190KGNwdXRpbWVfdG9famlmZmllcyhzdGltZSkpOwotCQl0bXAudG1zX2N1dGltZSA9IGNvbXBhdF9qaWZmaWVzX3RvX2Nsb2NrX3QoY3B1dGltZV90b19qaWZmaWVzKGN1dGltZSkpOwotCQl0bXAudG1zX2NzdGltZSA9IGNvbXBhdF9qaWZmaWVzX3RvX2Nsb2NrX3QoY3B1dGltZV90b19qaWZmaWVzKGNzdGltZSkpOworCQlkb19zeXNfdGltZXMoJnRtcyk7CisJCS8qIENvbnZlcnQgb3VyIHN0cnVjdCB0bXMgdG8gdGhlIGNvbXBhdCB2ZXJzaW9uLiAqLworCQl0bXAudG1zX3V0aW1lID0gY2xvY2tfdF90b19jb21wYXRfY2xvY2tfdCh0bXMudG1zX3V0aW1lKTsKKwkJdG1wLnRtc19zdGltZSA9IGNsb2NrX3RfdG9fY29tcGF0X2Nsb2NrX3QodG1zLnRtc19zdGltZSk7CisJCXRtcC50bXNfY3V0aW1lID0gY2xvY2tfdF90b19jb21wYXRfY2xvY2tfdCh0bXMudG1zX2N1dGltZSk7CisJCXRtcC50bXNfY3N0aW1lID0gY2xvY2tfdF90b19jb21wYXRfY2xvY2tfdCh0bXMudG1zX2NzdGltZSk7CiAJCWlmIChjb3B5X3RvX3VzZXIodGJ1ZiwgJnRtcCwgc2l6ZW9mKHRtcCkpKQogCQkJcmV0dXJuIC1FRkFVTFQ7CiAJfQpkaWZmIC0tZ2l0IGEva2VybmVsL2NvbmZpZ3MuYyBiL2tlcm5lbC9jb25maWdzLmMKaW5kZXggNGMzNDUyMS4uYWJhZWU2OCAxMDA2NDQKLS0tIGEva2VybmVsL2NvbmZpZ3MuYworKysgYi9rZXJuZWwvY29uZmlncy5jCkBAIC01NCw5ICs1NCw2IEBACiAKICNpZmRlZiBDT05GSUdfSUtDT05GSUdfUFJPQwogCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiBnbG9iYWxzIGFuZCB1c2VmdWwgY29uc3RhbnRzICAgICAgICAgICAgICAgICAgICovCi0KIHN0YXRpYyBzc2l6ZV90CiBpa2NvbmZpZ19yZWFkX2N1cnJlbnQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsCiAJCSAgICAgIHNpemVfdCBsZW4sIGxvZmZfdCAqIG9mZnNldCkKQEAgLTcxLDkgKzY4LDYgQEAKIAkucmVhZCA9IGlrY29uZmlnX3JlYWRfY3VycmVudCwKIH07CiAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiBpa2NvbmZpZ19pbml0OiBzdGFydCB1cCBldmVyeXRoaW5nIHdlIG5lZWQgdG8gKi8KLQogc3RhdGljIGludCBfX2luaXQgaWtjb25maWdfaW5pdCh2b2lkKQogewogCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqZW50cnk7CkBAIC04OSw5ICs4Myw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiBpa2NvbmZpZ19jbGVhbnVwOiBjbGVhbiB1cCBvdXIgbWVzcyAgICAgICAgICAgKi8KLQogc3RhdGljIHZvaWQgX19leGl0IGlrY29uZmlnX2NsZWFudXAodm9pZCkKIHsKIAlyZW1vdmVfcHJvY19lbnRyeSgiY29uZmlnLmd6IiwgTlVMTCk7CmRpZmYgLS1naXQgYS9rZXJuZWwvY3B1c2V0LmMgYi9rZXJuZWwvY3B1c2V0LmMKaW5kZXggZWFiN2JkNi4uM2UwMDUyNiAxMDA2NDQKLS0tIGEva2VybmVsL2NwdXNldC5jCisrKyBiL2tlcm5lbC9jcHVzZXQuYwpAQCAtMTE3Miw3ICsxMTcyLDcgQEAKIHsKIAlzdHJ1Y3QgY3B1c2V0IHRyaWFsY3M7CiAJaW50IGVycjsKLQlpbnQgY3B1c19ub25lbXB0eSwgYmFsYW5jZV9mbGFnX2NoYW5nZWQ7CisJaW50IGJhbGFuY2VfZmxhZ19jaGFuZ2VkOwogCiAJdHJpYWxjcyA9ICpjczsKIAlpZiAodHVybmluZ19vbikKQEAgLTExODQsNyArMTE4NCw2IEBACiAJaWYgKGVyciA8IDApCiAJCXJldHVybiBlcnI7CiAKLQljcHVzX25vbmVtcHR5ID0gIWNwdXNfZW1wdHkodHJpYWxjcy5jcHVzX2FsbG93ZWQpOwogCWJhbGFuY2VfZmxhZ19jaGFuZ2VkID0gKGlzX3NjaGVkX2xvYWRfYmFsYW5jZShjcykgIT0KIAkJIAkJCWlzX3NjaGVkX2xvYWRfYmFsYW5jZSgmdHJpYWxjcykpOwogCkBAIC0xMTkyLDcgKzExOTEsNyBAQAogCWNzLT5mbGFncyA9IHRyaWFsY3MuZmxhZ3M7CiAJbXV0ZXhfdW5sb2NrKCZjYWxsYmFja19tdXRleCk7CiAKLQlpZiAoY3B1c19ub25lbXB0eSAmJiBiYWxhbmNlX2ZsYWdfY2hhbmdlZCkKKwlpZiAoIWNwdXNfZW1wdHkodHJpYWxjcy5jcHVzX2FsbG93ZWQpICYmIGJhbGFuY2VfZmxhZ19jaGFuZ2VkKQogCQlhc3luY19yZWJ1aWxkX3NjaGVkX2RvbWFpbnMoKTsKIAogCXJldHVybiAwOwpAQCAtMjQzNywxOSArMjQzNiwxNSBAQAogdm9pZCBjcHVzZXRfdGFza19zdGF0dXNfYWxsb3dlZChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaykKIHsKIAlzZXFfcHJpbnRmKG0sICJDcHVzX2FsbG93ZWQ6XHQiKTsKLQltLT5jb3VudCArPSBjcHVtYXNrX3NjbnByaW50ZihtLT5idWYgKyBtLT5jb3VudCwgbS0+c2l6ZSAtIG0tPmNvdW50LAotCQkJCQl0YXNrLT5jcHVzX2FsbG93ZWQpOworCXNlcV9jcHVtYXNrKG0sICZ0YXNrLT5jcHVzX2FsbG93ZWQpOwogCXNlcV9wcmludGYobSwgIlxuIik7CiAJc2VxX3ByaW50ZihtLCAiQ3B1c19hbGxvd2VkX2xpc3Q6XHQiKTsKLQltLT5jb3VudCArPSBjcHVsaXN0X3NjbnByaW50ZihtLT5idWYgKyBtLT5jb3VudCwgbS0+c2l6ZSAtIG0tPmNvdW50LAotCQkJCQl0YXNrLT5jcHVzX2FsbG93ZWQpOworCXNlcV9jcHVtYXNrX2xpc3QobSwgJnRhc2stPmNwdXNfYWxsb3dlZCk7CiAJc2VxX3ByaW50ZihtLCAiXG4iKTsKIAlzZXFfcHJpbnRmKG0sICJNZW1zX2FsbG93ZWQ6XHQiKTsKLQltLT5jb3VudCArPSBub2RlbWFza19zY25wcmludGYobS0+YnVmICsgbS0+Y291bnQsIG0tPnNpemUgLSBtLT5jb3VudCwKLQkJCQkJdGFzay0+bWVtc19hbGxvd2VkKTsKKwlzZXFfbm9kZW1hc2sobSwgJnRhc2stPm1lbXNfYWxsb3dlZCk7CiAJc2VxX3ByaW50ZihtLCAiXG4iKTsKIAlzZXFfcHJpbnRmKG0sICJNZW1zX2FsbG93ZWRfbGlzdDpcdCIpOwotCW0tPmNvdW50ICs9IG5vZGVsaXN0X3NjbnByaW50ZihtLT5idWYgKyBtLT5jb3VudCwgbS0+c2l6ZSAtIG0tPmNvdW50LAotCQkJCQl0YXNrLT5tZW1zX2FsbG93ZWQpOworCXNlcV9ub2RlbWFza19saXN0KG0sICZ0YXNrLT5tZW1zX2FsbG93ZWQpOwogCXNlcV9wcmludGYobSwgIlxuIik7CiB9CmRpZmYgLS1naXQgYS9rZXJuZWwvZG1hLmMgYi9rZXJuZWwvZG1hLmMKaW5kZXggZDJjNjBhOC4uZjkwMzE4OSAxMDA2NDQKLS0tIGEva2VybmVsL2RtYS5jCisrKyBiL2tlcm5lbC9kbWEuYwpAQCAtMSw0ICsxLDQgQEAKLS8qICRJZDogZG1hLmMsdiAxLjcgMTk5NC8xMi8yOCAwMzozNTozMyByb290IEV4cCByb290ICQKKy8qCiAgKiBsaW51eC9rZXJuZWwvZG1hLmM6IEEgRE1BIGNoYW5uZWwgYWxsb2NhdG9yLiBJbnNwaXJlZCBieSBsaW51eC9rZXJuZWwvaXJxLmMuCiAgKgogICogV3JpdHRlbiBieSBIZW5udXMgQmVyZ21hbiwgMTk5Mi4KZGlmZiAtLWdpdCBhL2tlcm5lbC9leGl0LmMgYi9rZXJuZWwvZXhpdC5jCmluZGV4IDg1YTgzYzguLjA1OWIzOGMgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9leGl0LmMKKysrIGIva2VybmVsL2V4aXQuYwpAQCAtMTEyLDggKzExMiw2IEBACiAJCSAqIFdlIHdvbid0IGV2ZXIgZ2V0IGhlcmUgZm9yIHRoZSBncm91cCBsZWFkZXIsIHNpbmNlIGl0CiAJCSAqIHdpbGwgaGF2ZSBiZWVuIHRoZSBsYXN0IHJlZmVyZW5jZSBvbiB0aGUgc2lnbmFsX3N0cnVjdC4KIAkJICovCi0JCXNpZy0+dXRpbWUgPSBjcHV0aW1lX2FkZChzaWctPnV0aW1lLCB0YXNrX3V0aW1lKHRzaykpOwotCQlzaWctPnN0aW1lID0gY3B1dGltZV9hZGQoc2lnLT5zdGltZSwgdGFza19zdGltZSh0c2spKTsKIAkJc2lnLT5ndGltZSA9IGNwdXRpbWVfYWRkKHNpZy0+Z3RpbWUsIHRhc2tfZ3RpbWUodHNrKSk7CiAJCXNpZy0+bWluX2ZsdCArPSB0c2stPm1pbl9mbHQ7CiAJCXNpZy0+bWFqX2ZsdCArPSB0c2stPm1hal9mbHQ7CkBAIC0xMjIsNyArMTIwLDYgQEAKIAkJc2lnLT5pbmJsb2NrICs9IHRhc2tfaW9fZ2V0X2luYmxvY2sodHNrKTsKIAkJc2lnLT5vdWJsb2NrICs9IHRhc2tfaW9fZ2V0X291YmxvY2sodHNrKTsKIAkJdGFza19pb19hY2NvdW50aW5nX2FkZCgmc2lnLT5pb2FjLCAmdHNrLT5pb2FjKTsKLQkJc2lnLT5zdW1fc2NoZWRfcnVudGltZSArPSB0c2stPnNlLnN1bV9leGVjX3J1bnRpbWU7CiAJCXNpZyA9IE5VTEw7IC8qIE1hcmtlciBmb3IgYmVsb3cuICovCiAJfQogCkBAIC02NDAsMjQgKzYzNywyMyBAQAogYXNzaWduX25ld19vd25lcjoKIAlCVUdfT04oYyA9PSBwKTsKIAlnZXRfdGFza19zdHJ1Y3QoYyk7CisJcmVhZF91bmxvY2soJnRhc2tsaXN0X2xvY2spOworCWRvd25fd3JpdGUoJm1tLT5tbWFwX3NlbSk7CiAJLyoKIAkgKiBUaGUgdGFza19sb2NrIHByb3RlY3RzIGMtPm1tIGZyb20gY2hhbmdpbmcuCiAJICogV2UgYWx3YXlzIHdhbnQgbW0tPm93bmVyLT5tbSA9PSBtbQogCSAqLwogCXRhc2tfbG9jayhjKTsKLQkvKgotCSAqIERlbGF5IHJlYWRfdW5sb2NrKCkgdGlsbCB3ZSBoYXZlIHRoZSB0YXNrX2xvY2soKQotCSAqIHRvIGVuc3VyZSB0aGF0IGMgZG9lcyBub3Qgc2xpcCBhd2F5IHVuZGVybmVhdGggdXMKLQkgKi8KLQlyZWFkX3VubG9jaygmdGFza2xpc3RfbG9jayk7CiAJaWYgKGMtPm1tICE9IG1tKSB7CiAJCXRhc2tfdW5sb2NrKGMpOworCQl1cF93cml0ZSgmbW0tPm1tYXBfc2VtKTsKIAkJcHV0X3Rhc2tfc3RydWN0KGMpOwogCQlnb3RvIHJldHJ5OwogCX0KIAljZ3JvdXBfbW1fb3duZXJfY2FsbGJhY2tzKG1tLT5vd25lciwgYyk7CiAJbW0tPm93bmVyID0gYzsKIAl0YXNrX3VubG9jayhjKTsKKwl1cF93cml0ZSgmbW0tPm1tYXBfc2VtKTsKIAlwdXRfdGFza19zdHJ1Y3QoYyk7CiB9CiAjZW5kaWYgLyogQ09ORklHX01NX09XTkVSICovCkBAIC0xMzAyLDYgKzEyOTgsNyBAQAogCWlmIChsaWtlbHkoIXRyYWNlZCkpIHsKIAkJc3RydWN0IHNpZ25hbF9zdHJ1Y3QgKnBzaWc7CiAJCXN0cnVjdCBzaWduYWxfc3RydWN0ICpzaWc7CisJCXN0cnVjdCB0YXNrX2NwdXRpbWUgY3B1dGltZTsKIAogCQkvKgogCQkgKiBUaGUgcmVzb3VyY2UgY291bnRlcnMgZm9yIHRoZSBncm91cCBsZWFkZXIgYXJlIGluIGl0cwpAQCAtMTMxNywyMCArMTMxNCwyMyBAQAogCQkgKiBuZWVkIHRvIHByb3RlY3QgdGhlIGFjY2VzcyB0byBwLT5wYXJlbnQtPnNpZ25hbCBmaWVsZHMsCiAJCSAqIGFzIG90aGVyIHRocmVhZHMgaW4gdGhlIHBhcmVudCBncm91cCBjYW4gYmUgcmlnaHQKIAkJICogaGVyZSByZWFwaW5nIG90aGVyIGNoaWxkcmVuIGF0IHRoZSBzYW1lIHRpbWUuCisJCSAqCisJCSAqIFdlIHVzZSB0aHJlYWRfZ3JvdXBfY3B1dGltZSgpIHRvIGdldCB0aW1lcyBmb3IgdGhlIHRocmVhZAorCQkgKiBncm91cCwgd2hpY2ggY29uc29saWRhdGVzIHRpbWVzIGZvciBhbGwgdGhyZWFkcyBpbiB0aGUKKwkJICogZ3JvdXAgaW5jbHVkaW5nIHRoZSBncm91cCBsZWFkZXIuCiAJCSAqLwogCQlzcGluX2xvY2tfaXJxKCZwLT5wYXJlbnQtPnNpZ2hhbmQtPnNpZ2xvY2spOwogCQlwc2lnID0gcC0+cGFyZW50LT5zaWduYWw7CiAJCXNpZyA9IHAtPnNpZ25hbDsKKwkJdGhyZWFkX2dyb3VwX2NwdXRpbWUocCwgJmNwdXRpbWUpOwogCQlwc2lnLT5jdXRpbWUgPQogCQkJY3B1dGltZV9hZGQocHNpZy0+Y3V0aW1lLAotCQkJY3B1dGltZV9hZGQocC0+dXRpbWUsCi0JCQljcHV0aW1lX2FkZChzaWctPnV0aW1lLAotCQkJCSAgICBzaWctPmN1dGltZSkpKTsKKwkJCWNwdXRpbWVfYWRkKGNwdXRpbWUudXRpbWUsCisJCQkJICAgIHNpZy0+Y3V0aW1lKSk7CiAJCXBzaWctPmNzdGltZSA9CiAJCQljcHV0aW1lX2FkZChwc2lnLT5jc3RpbWUsCi0JCQljcHV0aW1lX2FkZChwLT5zdGltZSwKLQkJCWNwdXRpbWVfYWRkKHNpZy0+c3RpbWUsCi0JCQkJICAgIHNpZy0+Y3N0aW1lKSkpOworCQkJY3B1dGltZV9hZGQoY3B1dGltZS5zdGltZSwKKwkJCQkgICAgc2lnLT5jc3RpbWUpKTsKIAkJcHNpZy0+Y2d0aW1lID0KIAkJCWNwdXRpbWVfYWRkKHBzaWctPmNndGltZSwKIAkJCWNwdXRpbWVfYWRkKHAtPmd0aW1lLApkaWZmIC0tZ2l0IGEva2VybmVsL2ZvcmsuYyBiL2tlcm5lbC9mb3JrLmMKaW5kZXggN2NlMmViZS4uNDRlNjRkNyAxMDA2NDQKLS0tIGEva2VybmVsL2ZvcmsuYworKysgYi9rZXJuZWwvZm9yay5jCkBAIC03NTksMTUgKzc1OSw0NCBAQAogCQlrbWVtX2NhY2hlX2ZyZWUoc2lnaGFuZF9jYWNoZXAsIHNpZ2hhbmQpOwogfQogCisKKy8qCisgKiBJbml0aWFsaXplIFBPU0lYIHRpbWVyIGhhbmRsaW5nIGZvciBhIHRocmVhZCBncm91cC4KKyAqLworc3RhdGljIHZvaWQgcG9zaXhfY3B1X3RpbWVyc19pbml0X2dyb3VwKHN0cnVjdCBzaWduYWxfc3RydWN0ICpzaWcpCit7CisJLyogVGhyZWFkIGdyb3VwIGNvdW50ZXJzLiAqLworCXRocmVhZF9ncm91cF9jcHV0aW1lX2luaXQoc2lnKTsKKworCS8qIEV4cGlyYXRpb24gdGltZXMgYW5kIGluY3JlbWVudHMuICovCisJc2lnLT5pdF92aXJ0X2V4cGlyZXMgPSBjcHV0aW1lX3plcm87CisJc2lnLT5pdF92aXJ0X2luY3IgPSBjcHV0aW1lX3plcm87CisJc2lnLT5pdF9wcm9mX2V4cGlyZXMgPSBjcHV0aW1lX3plcm87CisJc2lnLT5pdF9wcm9mX2luY3IgPSBjcHV0aW1lX3plcm87CisKKwkvKiBDYWNoZWQgZXhwaXJhdGlvbiB0aW1lcy4gKi8KKwlzaWctPmNwdXRpbWVfZXhwaXJlcy5wcm9mX2V4cCA9IGNwdXRpbWVfemVybzsKKwlzaWctPmNwdXRpbWVfZXhwaXJlcy52aXJ0X2V4cCA9IGNwdXRpbWVfemVybzsKKwlzaWctPmNwdXRpbWVfZXhwaXJlcy5zY2hlZF9leHAgPSAwOworCisJLyogVGhlIHRpbWVyIGxpc3RzLiAqLworCUlOSVRfTElTVF9IRUFEKCZzaWctPmNwdV90aW1lcnNbMF0pOworCUlOSVRfTElTVF9IRUFEKCZzaWctPmNwdV90aW1lcnNbMV0pOworCUlOSVRfTElTVF9IRUFEKCZzaWctPmNwdV90aW1lcnNbMl0pOworfQorCiBzdGF0aWMgaW50IGNvcHlfc2lnbmFsKHVuc2lnbmVkIGxvbmcgY2xvbmVfZmxhZ3MsIHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKQogewogCXN0cnVjdCBzaWduYWxfc3RydWN0ICpzaWc7CiAJaW50IHJldDsKIAogCWlmIChjbG9uZV9mbGFncyAmIENMT05FX1RIUkVBRCkgewotCQlhdG9taWNfaW5jKCZjdXJyZW50LT5zaWduYWwtPmNvdW50KTsKLQkJYXRvbWljX2luYygmY3VycmVudC0+c2lnbmFsLT5saXZlKTsKLQkJcmV0dXJuIDA7CisJCXJldCA9IHRocmVhZF9ncm91cF9jcHV0aW1lX2Nsb25lX3RocmVhZChjdXJyZW50KTsKKwkJaWYgKGxpa2VseSghcmV0KSkgeworCQkJYXRvbWljX2luYygmY3VycmVudC0+c2lnbmFsLT5jb3VudCk7CisJCQlhdG9taWNfaW5jKCZjdXJyZW50LT5zaWduYWwtPmxpdmUpOworCQl9CisJCXJldHVybiByZXQ7CiAJfQogCXNpZyA9IGttZW1fY2FjaGVfYWxsb2Moc2lnbmFsX2NhY2hlcCwgR0ZQX0tFUk5FTCk7CiAJdHNrLT5zaWduYWwgPSBzaWc7CkBAIC03OTUsMzkgKzgyNCwyNSBAQAogCXNpZy0+aXRfcmVhbF9pbmNyLnR2NjQgPSAwOwogCXNpZy0+cmVhbF90aW1lci5mdW5jdGlvbiA9IGl0X3JlYWxfZm47CiAKLQlzaWctPml0X3ZpcnRfZXhwaXJlcyA9IGNwdXRpbWVfemVybzsKLQlzaWctPml0X3ZpcnRfaW5jciA9IGNwdXRpbWVfemVybzsKLQlzaWctPml0X3Byb2ZfZXhwaXJlcyA9IGNwdXRpbWVfemVybzsKLQlzaWctPml0X3Byb2ZfaW5jciA9IGNwdXRpbWVfemVybzsKLQogCXNpZy0+bGVhZGVyID0gMDsJLyogc2Vzc2lvbiBsZWFkZXJzaGlwIGRvZXNuJ3QgaW5oZXJpdCAqLwogCXNpZy0+dHR5X29sZF9wZ3JwID0gTlVMTDsKKwlzaWctPnR0eSA9IE5VTEw7CiAKLQlzaWctPnV0aW1lID0gc2lnLT5zdGltZSA9IHNpZy0+Y3V0aW1lID0gc2lnLT5jc3RpbWUgPSBjcHV0aW1lX3plcm87CisJc2lnLT5jdXRpbWUgPSBzaWctPmNzdGltZSA9IGNwdXRpbWVfemVybzsKIAlzaWctPmd0aW1lID0gY3B1dGltZV96ZXJvOwogCXNpZy0+Y2d0aW1lID0gY3B1dGltZV96ZXJvOwogCXNpZy0+bnZjc3cgPSBzaWctPm5pdmNzdyA9IHNpZy0+Y252Y3N3ID0gc2lnLT5jbml2Y3N3ID0gMDsKIAlzaWctPm1pbl9mbHQgPSBzaWctPm1hal9mbHQgPSBzaWctPmNtaW5fZmx0ID0gc2lnLT5jbWFqX2ZsdCA9IDA7CiAJc2lnLT5pbmJsb2NrID0gc2lnLT5vdWJsb2NrID0gc2lnLT5jaW5ibG9jayA9IHNpZy0+Y291YmxvY2sgPSAwOwogCXRhc2tfaW9fYWNjb3VudGluZ19pbml0KCZzaWctPmlvYWMpOwotCXNpZy0+c3VtX3NjaGVkX3J1bnRpbWUgPSAwOwotCUlOSVRfTElTVF9IRUFEKCZzaWctPmNwdV90aW1lcnNbMF0pOwotCUlOSVRfTElTVF9IRUFEKCZzaWctPmNwdV90aW1lcnNbMV0pOwotCUlOSVRfTElTVF9IRUFEKCZzaWctPmNwdV90aW1lcnNbMl0pOwogCXRhc2tzdGF0c190Z2lkX2luaXQoc2lnKTsKIAogCXRhc2tfbG9jayhjdXJyZW50LT5ncm91cF9sZWFkZXIpOwogCW1lbWNweShzaWctPnJsaW0sIGN1cnJlbnQtPnNpZ25hbC0+cmxpbSwgc2l6ZW9mIHNpZy0+cmxpbSk7CiAJdGFza191bmxvY2soY3VycmVudC0+Z3JvdXBfbGVhZGVyKTsKIAotCWlmIChzaWctPnJsaW1bUkxJTUlUX0NQVV0ucmxpbV9jdXIgIT0gUkxJTV9JTkZJTklUWSkgewotCQkvKgotCQkgKiBOZXcgc29sZSB0aHJlYWQgaW4gdGhlIHByb2Nlc3MgZ2V0cyBhbiBleHBpcnkgdGltZQotCQkgKiBvZiB0aGUgd2hvbGUgQ1BVIHRpbWUgbGltaXQuCi0JCSAqLwotCQl0c2stPml0X3Byb2ZfZXhwaXJlcyA9Ci0JCQlzZWNzX3RvX2NwdXRpbWUoc2lnLT5ybGltW1JMSU1JVF9DUFVdLnJsaW1fY3VyKTsKLQl9CisJcG9zaXhfY3B1X3RpbWVyc19pbml0X2dyb3VwKHNpZyk7CisKIAlhY2N0X2luaXRfcGFjY3QoJnNpZy0+cGFjY3QpOwogCiAJdHR5X2F1ZGl0X2Zvcmsoc2lnKTsKQEAgLTgzNyw3ICs4NTIsOSBAQAogCiB2b2lkIF9fY2xlYW51cF9zaWduYWwoc3RydWN0IHNpZ25hbF9zdHJ1Y3QgKnNpZykKIHsKKwl0aHJlYWRfZ3JvdXBfY3B1dGltZV9mcmVlKHNpZyk7CiAJZXhpdF90aHJlYWRfZ3JvdXBfa2V5cyhzaWcpOworCXR0eV9rcmVmX3B1dChzaWctPnR0eSk7CiAJa21lbV9jYWNoZV9mcmVlKHNpZ25hbF9jYWNoZXAsIHNpZyk7CiB9CiAKQEAgLTg4Niw2ICs5MDMsMTkgQEAKICNlbmRpZiAvKiBDT05GSUdfTU1fT1dORVIgKi8KIAogLyoKKyAqIEluaXRpYWxpemUgUE9TSVggdGltZXIgaGFuZGxpbmcgZm9yIGEgc2luZ2xlIHRhc2suCisgKi8KK3N0YXRpYyB2b2lkIHBvc2l4X2NwdV90aW1lcnNfaW5pdChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykKK3sKKwl0c2stPmNwdXRpbWVfZXhwaXJlcy5wcm9mX2V4cCA9IGNwdXRpbWVfemVybzsKKwl0c2stPmNwdXRpbWVfZXhwaXJlcy52aXJ0X2V4cCA9IGNwdXRpbWVfemVybzsKKwl0c2stPmNwdXRpbWVfZXhwaXJlcy5zY2hlZF9leHAgPSAwOworCUlOSVRfTElTVF9IRUFEKCZ0c2stPmNwdV90aW1lcnNbMF0pOworCUlOSVRfTElTVF9IRUFEKCZ0c2stPmNwdV90aW1lcnNbMV0pOworCUlOSVRfTElTVF9IRUFEKCZ0c2stPmNwdV90aW1lcnNbMl0pOworfQorCisvKgogICogVGhpcyBjcmVhdGVzIGEgbmV3IHByb2Nlc3MgYXMgYSBjb3B5IG9mIHRoZSBvbGQgb25lLAogICogYnV0IGRvZXMgbm90IGFjdHVhbGx5IHN0YXJ0IGl0IHlldC4KICAqCkBAIC05OTUsMTIgKzEwMjUsNyBAQAogCXRhc2tfaW9fYWNjb3VudGluZ19pbml0KCZwLT5pb2FjKTsKIAlhY2N0X2NsZWFyX2ludGVncmFscyhwKTsKIAotCXAtPml0X3ZpcnRfZXhwaXJlcyA9IGNwdXRpbWVfemVybzsKLQlwLT5pdF9wcm9mX2V4cGlyZXMgPSBjcHV0aW1lX3plcm87Ci0JcC0+aXRfc2NoZWRfZXhwaXJlcyA9IDA7Ci0JSU5JVF9MSVNUX0hFQUQoJnAtPmNwdV90aW1lcnNbMF0pOwotCUlOSVRfTElTVF9IRUFEKCZwLT5jcHVfdGltZXJzWzFdKTsKLQlJTklUX0xJU1RfSEVBRCgmcC0+Y3B1X3RpbWVyc1syXSk7CisJcG9zaXhfY3B1X3RpbWVyc19pbml0KHApOwogCiAJcC0+bG9ja19kZXB0aCA9IC0xOwkJLyogLTEgPSBubyBsb2NrICovCiAJZG9fcG9zaXhfY2xvY2tfbW9ub3RvbmljX2dldHRpbWUoJnAtPnN0YXJ0X3RpbWUpOwpAQCAtMTIwMSwyMSArMTIyNiw2IEBACiAJaWYgKGNsb25lX2ZsYWdzICYgQ0xPTkVfVEhSRUFEKSB7CiAJCXAtPmdyb3VwX2xlYWRlciA9IGN1cnJlbnQtPmdyb3VwX2xlYWRlcjsKIAkJbGlzdF9hZGRfdGFpbF9yY3UoJnAtPnRocmVhZF9ncm91cCwgJnAtPmdyb3VwX2xlYWRlci0+dGhyZWFkX2dyb3VwKTsKLQotCQlpZiAoIWNwdXRpbWVfZXEoY3VycmVudC0+c2lnbmFsLT5pdF92aXJ0X2V4cGlyZXMsCi0JCQkJY3B1dGltZV96ZXJvKSB8fAotCQkgICAgIWNwdXRpbWVfZXEoY3VycmVudC0+c2lnbmFsLT5pdF9wcm9mX2V4cGlyZXMsCi0JCQkJY3B1dGltZV96ZXJvKSB8fAotCQkgICAgY3VycmVudC0+c2lnbmFsLT5ybGltW1JMSU1JVF9DUFVdLnJsaW1fY3VyICE9IFJMSU1fSU5GSU5JVFkgfHwKLQkJICAgICFsaXN0X2VtcHR5KCZjdXJyZW50LT5zaWduYWwtPmNwdV90aW1lcnNbMF0pIHx8Ci0JCSAgICAhbGlzdF9lbXB0eSgmY3VycmVudC0+c2lnbmFsLT5jcHVfdGltZXJzWzFdKSB8fAotCQkgICAgIWxpc3RfZW1wdHkoJmN1cnJlbnQtPnNpZ25hbC0+Y3B1X3RpbWVyc1syXSkpIHsKLQkJCS8qCi0JCQkgKiBIYXZlIGNoaWxkIHdha2UgdXAgb24gaXRzIGZpcnN0IHRpY2sgdG8gY2hlY2sKLQkJCSAqIGZvciBwcm9jZXNzIENQVSB0aW1lcnMuCi0JCQkgKi8KLQkJCXAtPml0X3Byb2ZfZXhwaXJlcyA9IGppZmZpZXNfdG9fY3B1dGltZSgxKTsKLQkJfQogCX0KIAogCWlmIChsaWtlbHkocC0+cGlkKSkgewpAQCAtMTIyNyw3ICsxMjM3LDggQEAKIAkJCQlwLT5uc3Byb3h5LT5waWRfbnMtPmNoaWxkX3JlYXBlciA9IHA7CiAKIAkJCXAtPnNpZ25hbC0+bGVhZGVyX3BpZCA9IHBpZDsKLQkJCXAtPnNpZ25hbC0+dHR5ID0gY3VycmVudC0+c2lnbmFsLT50dHk7CisJCQl0dHlfa3JlZl9wdXQocC0+c2lnbmFsLT50dHkpOworCQkJcC0+c2lnbmFsLT50dHkgPSB0dHlfa3JlZl9nZXQoY3VycmVudC0+c2lnbmFsLT50dHkpOwogCQkJc2V0X3Rhc2tfcGdycChwLCB0YXNrX3BncnBfbnIoY3VycmVudCkpOwogCQkJc2V0X3Rhc2tfc2Vzc2lvbihwLCB0YXNrX3Nlc3Npb25fbnIoY3VycmVudCkpOwogCQkJYXR0YWNoX3BpZChwLCBQSURUWVBFX1BHSUQsIHRhc2tfcGdycChjdXJyZW50KSk7CmRpZmYgLS1naXQgYS9rZXJuZWwvZnJlZXplci5jIGIva2VybmVsL2ZyZWV6ZXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYTYyNDhiCi0tLSAvZGV2L251bGwKKysrIGIva2VybmVsL2ZyZWV6ZXIuYwpAQCAtMCwwICsxLDE1NCBAQAorLyoKKyAqIGtlcm5lbC9mcmVlemVyLmMgLSBGdW5jdGlvbiB0byBmcmVlemUgYSBwcm9jZXNzCisgKgorICogT3JpZ2luYWxseSBmcm9tIGtlcm5lbC9wb3dlci9wcm9jZXNzLmMKKyAqLworCisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvc3VzcGVuZC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3N5c2NhbGxzLmg+CisjaW5jbHVkZSA8bGludXgvZnJlZXplci5oPgorCisvKgorICogZnJlZXppbmcgaXMgY29tcGxldGUsIG1hcmsgY3VycmVudCBwcm9jZXNzIGFzIGZyb3plbgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgZnJvemVuX3Byb2Nlc3Modm9pZCkKK3sKKwlpZiAoIXVubGlrZWx5KGN1cnJlbnQtPmZsYWdzICYgUEZfTk9GUkVFWkUpKSB7CisJCWN1cnJlbnQtPmZsYWdzIHw9IFBGX0ZST1pFTjsKKwkJd21iKCk7CisJfQorCWNsZWFyX2ZyZWV6ZV9mbGFnKGN1cnJlbnQpOworfQorCisvKiBSZWZyaWdlcmF0b3IgaXMgcGxhY2Ugd2hlcmUgZnJvemVuIHByb2Nlc3NlcyBhcmUgc3RvcmVkIDotKS4gKi8KK3ZvaWQgcmVmcmlnZXJhdG9yKHZvaWQpCit7CisJLyogSG1tLCBzaG91bGQgd2UgYmUgYWxsb3dlZCB0byBzdXNwZW5kIHdoZW4gdGhlcmUgYXJlIHJlYWx0aW1lCisJICAgcHJvY2Vzc2VzIGFyb3VuZD8gKi8KKwlsb25nIHNhdmU7CisKKwl0YXNrX2xvY2soY3VycmVudCk7CisJaWYgKGZyZWV6aW5nKGN1cnJlbnQpKSB7CisJCWZyb3plbl9wcm9jZXNzKCk7CisJCXRhc2tfdW5sb2NrKGN1cnJlbnQpOworCX0gZWxzZSB7CisJCXRhc2tfdW5sb2NrKGN1cnJlbnQpOworCQlyZXR1cm47CisJfQorCXNhdmUgPSBjdXJyZW50LT5zdGF0ZTsKKwlwcl9kZWJ1ZygiJXMgZW50ZXJlZCByZWZyaWdlcmF0b3JcbiIsIGN1cnJlbnQtPmNvbW0pOworCisJc3Bpbl9sb2NrX2lycSgmY3VycmVudC0+c2lnaGFuZC0+c2lnbG9jayk7CisJcmVjYWxjX3NpZ3BlbmRpbmcoKTsgLyogV2Ugc2VudCBmYWtlIHNpZ25hbCwgY2xlYW4gaXQgdXAgKi8KKwlzcGluX3VubG9ja19pcnEoJmN1cnJlbnQtPnNpZ2hhbmQtPnNpZ2xvY2spOworCisJZm9yICg7OykgeworCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX1VOSU5URVJSVVBUSUJMRSk7CisJCWlmICghZnJvemVuKGN1cnJlbnQpKQorCQkJYnJlYWs7CisJCXNjaGVkdWxlKCk7CisJfQorCXByX2RlYnVnKCIlcyBsZWZ0IHJlZnJpZ2VyYXRvclxuIiwgY3VycmVudC0+Y29tbSk7CisJX19zZXRfY3VycmVudF9zdGF0ZShzYXZlKTsKK30KK0VYUE9SVF9TWU1CT0wocmVmcmlnZXJhdG9yKTsKKworc3RhdGljIHZvaWQgZmFrZV9zaWduYWxfd2FrZV91cChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZwLT5zaWdoYW5kLT5zaWdsb2NrLCBmbGFncyk7CisJc2lnbmFsX3dha2VfdXAocCwgMCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcC0+c2lnaGFuZC0+c2lnbG9jaywgZmxhZ3MpOworfQorCisvKioKKyAqCWZyZWV6ZV90YXNrIC0gc2VuZCBhIGZyZWV6ZSByZXF1ZXN0IHRvIGdpdmVuIHRhc2sKKyAqCUBwOiB0YXNrIHRvIHNlbmQgdGhlIHJlcXVlc3QgdG8KKyAqCUBzaWdfb25seTogaWYgc2V0LCB0aGUgcmVxdWVzdCB3aWxsIG9ubHkgYmUgc2VudCBpZiB0aGUgdGFzayBoYXMgdGhlCisgKgkJUEZfRlJFRVpFUl9OT1NJRyBmbGFnIHVuc2V0CisgKglSZXR1cm4gdmFsdWU6ICdmYWxzZScsIGlmIEBzaWdfb25seSBpcyBzZXQgYW5kIHRoZSB0YXNrIGhhcworICoJCVBGX0ZSRUVaRVJfTk9TSUcgc2V0IG9yIHRoZSB0YXNrIGlzIGZyb3plbiwgJ3RydWUnLCBvdGhlcndpc2UKKyAqCisgKglUaGUgZnJlZXplIHJlcXVlc3QgaXMgc2VudCBieSBzZXR0aW5nIHRoZSB0YXNrcydzIFRJRl9GUkVFWkUgZmxhZyBhbmQKKyAqCWVpdGhlciBzZW5kaW5nIGEgZmFrZSBzaWduYWwgdG8gaXQgb3Igd2FraW5nIGl0IHVwLCBkZXBlbmRpbmcgb24gd2hldGhlcgorICoJb3Igbm90IGl0IGhhcyBQRl9GUkVFWkVSX05PU0lHIHNldC4gIElmIEBzaWdfb25seSBpcyBzZXQgYW5kIHRoZSB0YXNrCisgKgloYXMgUEZfRlJFRVpFUl9OT1NJRyBzZXQgKGllLiBpdCBpcyBhIHR5cGljYWwga2VybmVsIHRocmVhZCksIGl0cworICoJVElGX0ZSRUVaRSBmbGFnIHdpbGwgbm90IGJlIHNldC4KKyAqLworYm9vbCBmcmVlemVfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIGJvb2wgc2lnX29ubHkpCit7CisJLyoKKwkgKiBXZSBmaXJzdCBjaGVjayBpZiB0aGUgdGFzayBpcyBmcmVlemluZyBhbmQgbmV4dCBpZiBpdCBoYXMgYWxyZWFkeQorCSAqIGJlZW4gZnJvemVuIHRvIGF2b2lkIHRoZSByYWNlIHdpdGggZnJvemVuX3Byb2Nlc3MoKSB3aGljaCBmaXJzdCBtYXJrcworCSAqIHRoZSB0YXNrIGFzIGZyb3plbiBhbmQgbmV4dCBjbGVhcnMgaXRzIFRJRl9GUkVFWkUuCisJICovCisJaWYgKCFmcmVlemluZyhwKSkgeworCQlybWIoKTsKKwkJaWYgKGZyb3plbihwKSkKKwkJCXJldHVybiBmYWxzZTsKKworCQlpZiAoIXNpZ19vbmx5IHx8IHNob3VsZF9zZW5kX3NpZ25hbChwKSkKKwkJCXNldF9mcmVlemVfZmxhZyhwKTsKKwkJZWxzZQorCQkJcmV0dXJuIGZhbHNlOworCX0KKworCWlmIChzaG91bGRfc2VuZF9zaWduYWwocCkpIHsKKwkJaWYgKCFzaWduYWxfcGVuZGluZyhwKSkKKwkJCWZha2Vfc2lnbmFsX3dha2VfdXAocCk7CisJfSBlbHNlIGlmIChzaWdfb25seSkgeworCQlyZXR1cm4gZmFsc2U7CisJfSBlbHNlIHsKKwkJd2FrZV91cF9zdGF0ZShwLCBUQVNLX0lOVEVSUlVQVElCTEUpOworCX0KKworCXJldHVybiB0cnVlOworfQorCit2b2lkIGNhbmNlbF9mcmVlemluZyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWlmIChmcmVlemluZyhwKSkgeworCQlwcl9kZWJ1ZygiICBjbGVhbiB1cDogJXNcbiIsIHAtPmNvbW0pOworCQljbGVhcl9mcmVlemVfZmxhZyhwKTsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJnAtPnNpZ2hhbmQtPnNpZ2xvY2ssIGZsYWdzKTsKKwkJcmVjYWxjX3NpZ3BlbmRpbmdfYW5kX3dha2UocCk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnAtPnNpZ2hhbmQtPnNpZ2xvY2ssIGZsYWdzKTsKKwl9Cit9CisKKy8qCisgKiBXYWtlIHVwIGEgZnJvemVuIHByb2Nlc3MKKyAqCisgKiB0YXNrX2xvY2soKSBpcyBuZWVkZWQgdG8gcHJldmVudCB0aGUgcmFjZSB3aXRoIHJlZnJpZ2VyYXRvcigpIHdoaWNoIG1heQorICogb2NjdXIgaWYgdGhlIGZyZWV6aW5nIG9mIHRhc2tzIGZhaWxzLiAgTmFtZWx5LCB3aXRob3V0IHRoZSBsb2NrLCBpZiB0aGUKKyAqIGZyZWV6aW5nIG9mIHRhc2tzIGZhaWxlZCwgdGhhd190YXNrcygpIG1pZ2h0IGhhdmUgcnVuIGJlZm9yZSBhIHRhc2sgaW4KKyAqIHJlZnJpZ2VyYXRvcigpIGNvdWxkIGNhbGwgZnJvemVuX3Byb2Nlc3MoKSwgaW4gd2hpY2ggY2FzZSB0aGUgdGFzayB3b3VsZCBiZQorICogZnJvemVuIGFuZCBubyBvbmUgd291bGQgdGhhdyBpdC4KKyAqLworaW50IF9fdGhhd19wcm9jZXNzKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkKK3sKKwlpZiAoZnJvemVuKHApKSB7CisJCXAtPmZsYWdzICY9IH5QRl9GUk9aRU47CisJCXJldHVybiAxOworCX0KKwljbGVhcl9mcmVlemVfZmxhZyhwKTsKKwlyZXR1cm4gMDsKK30KKworaW50IHRoYXdfcHJvY2VzcyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApCit7CisJdGFza19sb2NrKHApOworCWlmIChfX3RoYXdfcHJvY2VzcyhwKSA9PSAxKSB7CisJCXRhc2tfdW5sb2NrKHApOworCQl3YWtlX3VwX3Byb2Nlc3MocCk7CisJCXJldHVybiAxOworCX0KKwl0YXNrX3VubG9jayhwKTsKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0wodGhhd19wcm9jZXNzKTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9ocnRpbWVyLmMgYi9rZXJuZWwvaHJ0aW1lci5jCmluZGV4IGNkZWM4M2UuLjk1OTc4ZjQgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9ocnRpbWVyLmMKKysrIGIva2VybmVsL2hydGltZXIuYwpAQCAtMTQwMyw5ICsxNDAzLDcgQEAKIAkJaWYgKCFiYXNlLT5maXJzdCkKIAkJCWNvbnRpbnVlOwogCi0JCWlmIChiYXNlLT5nZXRfc29mdGlycV90aW1lKQotCQkJYmFzZS0+c29mdGlycV90aW1lID0gYmFzZS0+Z2V0X3NvZnRpcnFfdGltZSgpOwotCQllbHNlIGlmIChnZXR0aW1lKSB7CisJCWlmIChnZXR0aW1lKSB7CiAJCQlocnRpbWVyX2dldF9zb2Z0aXJxX3RpbWUoY3B1X2Jhc2UpOwogCQkJZ2V0dGltZSA9IDA7CiAJCX0KQEAgLTE2ODgsOSArMTY4NiwxMSBAQAogCW5ld19iYXNlID0gJmdldF9jcHVfdmFyKGhydGltZXJfYmFzZXMpOwogCiAJdGlja19jYW5jZWxfc2NoZWRfdGltZXIoY3B1KTsKLQotCWxvY2FsX2lycV9kaXNhYmxlKCk7Ci0Jc3Bpbl9sb2NrKCZuZXdfYmFzZS0+bG9jayk7CisJLyoKKwkgKiBUaGUgY2FsbGVyIGlzIGdsb2JhbGx5IHNlcmlhbGl6ZWQgYW5kIG5vYm9keSBlbHNlCisJICogdGFrZXMgdHdvIGxvY2tzIGF0IG9uY2UsIGRlYWRsb2NrIGlzIG5vdCBwb3NzaWJsZS4KKwkgKi8KKwlzcGluX2xvY2tfaXJxKCZuZXdfYmFzZS0+bG9jayk7CiAJc3Bpbl9sb2NrX25lc3RlZCgmb2xkX2Jhc2UtPmxvY2ssIFNJTkdMRV9ERVBUSF9ORVNUSU5HKTsKIAogCWZvciAoaSA9IDA7IGkgPCBIUlRJTUVSX01BWF9DTE9DS19CQVNFUzsgaSsrKSB7CkBAIC0xNzAzLDggKzE3MDMsNyBAQAogCQlyYWlzZSA9IDE7CiAKIAlzcGluX3VubG9jaygmb2xkX2Jhc2UtPmxvY2spOwotCXNwaW5fdW5sb2NrKCZuZXdfYmFzZS0+bG9jayk7Ci0JbG9jYWxfaXJxX2VuYWJsZSgpOworCXNwaW5fdW5sb2NrX2lycSgmbmV3X2Jhc2UtPmxvY2spOwogCXB1dF9jcHVfdmFyKGhydGltZXJfYmFzZXMpOwogCiAJaWYgKHJhaXNlKQpkaWZmIC0tZ2l0IGEva2VybmVsL2lycS9hdXRvcHJvYmUuYyBiL2tlcm5lbC9pcnEvYXV0b3Byb2JlLmMKaW5kZXggNTMzMDY4Yy4uY2MwZjczMiAxMDA2NDQKLS0tIGEva2VybmVsL2lycS9hdXRvcHJvYmUuYworKysgYi9rZXJuZWwvaXJxL2F1dG9wcm9iZS5jCkBAIC0zMCwxNyArMzAsMTYgQEAKIHVuc2lnbmVkIGxvbmcgcHJvYmVfaXJxX29uKHZvaWQpCiB7CiAJc3RydWN0IGlycV9kZXNjICpkZXNjOwotCXVuc2lnbmVkIGxvbmcgbWFzazsKLQl1bnNpZ25lZCBpbnQgaTsKKwl1bnNpZ25lZCBsb25nIG1hc2sgPSAwOworCXVuc2lnbmVkIGludCBzdGF0dXM7CisJaW50IGk7CiAKIAltdXRleF9sb2NrKCZwcm9iaW5nX2FjdGl2ZSk7CiAJLyoKIAkgKiBzb21ldGhpbmcgbWF5IGhhdmUgZ2VuZXJhdGVkIGFuIGlycSBsb25nIGFnbyBhbmQgd2Ugd2FudCB0bwogCSAqIGZsdXNoIHN1Y2ggYSBsb25nc3RhbmRpbmcgaXJxIGJlZm9yZSBjb25zaWRlcmluZyBpdCBhcyBzcHVyaW91cy4KIAkgKi8KLQlmb3IgKGkgPSBOUl9JUlFTLTE7IGkgPiAwOyBpLS0pIHsKLQkJZGVzYyA9IGlycV9kZXNjICsgaTsKLQorCWZvcl9lYWNoX2lycV9kZXNjX3JldmVyc2UoaSwgZGVzYykgewogCQlzcGluX2xvY2tfaXJxKCZkZXNjLT5sb2NrKTsKIAkJaWYgKCFkZXNjLT5hY3Rpb24gJiYgIShkZXNjLT5zdGF0dXMgJiBJUlFfTk9QUk9CRSkpIHsKIAkJCS8qCkBAIC02OCw5ICs2Nyw3IEBACiAJICogKHdlIG11c3Qgc3RhcnR1cCBhZ2FpbiBoZXJlIGJlY2F1c2UgaWYgYSBsb25nc3RhbmRpbmcgaXJxCiAJICogaGFwcGVuZWQgaW4gdGhlIHByZXZpb3VzIHN0YWdlLCBpdCBtYXkgaGF2ZSBtYXNrZWQgaXRzZWxmKQogCSAqLwotCWZvciAoaSA9IE5SX0lSUVMtMTsgaSA+IDA7IGktLSkgewotCQlkZXNjID0gaXJxX2Rlc2MgKyBpOwotCisJZm9yX2VhY2hfaXJxX2Rlc2NfcmV2ZXJzZShpLCBkZXNjKSB7CiAJCXNwaW5fbG9ja19pcnEoJmRlc2MtPmxvY2spOwogCQlpZiAoIWRlc2MtPmFjdGlvbiAmJiAhKGRlc2MtPnN0YXR1cyAmIElSUV9OT1BST0JFKSkgewogCQkJZGVzYy0+c3RhdHVzIHw9IElSUV9BVVRPREVURUNUIHwgSVJRX1dBSVRJTkc7CkBAIC04OCwxMSArODUsNyBAQAogCS8qCiAJICogTm93IGZpbHRlciBvdXQgYW55IG9idmlvdXNseSBzcHVyaW91cyBpbnRlcnJ1cHRzCiAJICovCi0JbWFzayA9IDA7Ci0JZm9yIChpID0gMDsgaSA8IE5SX0lSUVM7IGkrKykgewotCQl1bnNpZ25lZCBpbnQgc3RhdHVzOwotCi0JCWRlc2MgPSBpcnFfZGVzYyArIGk7CisJZm9yX2VhY2hfaXJxX2Rlc2MoaSwgZGVzYykgewogCQlzcGluX2xvY2tfaXJxKCZkZXNjLT5sb2NrKTsKIAkJc3RhdHVzID0gZGVzYy0+c3RhdHVzOwogCkBAIC0xMjYsMTQgKzExOSwxMSBAQAogICovCiB1bnNpZ25lZCBpbnQgcHJvYmVfaXJxX21hc2sodW5zaWduZWQgbG9uZyB2YWwpCiB7Ci0JdW5zaWduZWQgaW50IG1hc2s7CisJdW5zaWduZWQgaW50IHN0YXR1cywgbWFzayA9IDA7CisJc3RydWN0IGlycV9kZXNjICpkZXNjOwogCWludCBpOwogCi0JbWFzayA9IDA7Ci0JZm9yIChpID0gMDsgaSA8IE5SX0lSUVM7IGkrKykgewotCQlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MgPSBpcnFfZGVzYyArIGk7Ci0JCXVuc2lnbmVkIGludCBzdGF0dXM7Ci0KKwlmb3JfZWFjaF9pcnFfZGVzYyhpLCBkZXNjKSB7CiAJCXNwaW5fbG9ja19pcnEoJmRlc2MtPmxvY2spOwogCQlzdGF0dXMgPSBkZXNjLT5zdGF0dXM7CiAKQEAgLTE3MSwyMCArMTYxLDE5IEBACiAgKi8KIGludCBwcm9iZV9pcnFfb2ZmKHVuc2lnbmVkIGxvbmcgdmFsKQogewotCWludCBpLCBpcnFfZm91bmQgPSAwLCBucl9pcnFzID0gMDsKKwlpbnQgaSwgaXJxX2ZvdW5kID0gMCwgbnJfb2ZfaXJxcyA9IDA7CisJc3RydWN0IGlycV9kZXNjICpkZXNjOworCXVuc2lnbmVkIGludCBzdGF0dXM7CiAKLQlmb3IgKGkgPSAwOyBpIDwgTlJfSVJRUzsgaSsrKSB7Ci0JCXN0cnVjdCBpcnFfZGVzYyAqZGVzYyA9IGlycV9kZXNjICsgaTsKLQkJdW5zaWduZWQgaW50IHN0YXR1czsKLQorCWZvcl9lYWNoX2lycV9kZXNjKGksIGRlc2MpIHsKIAkJc3Bpbl9sb2NrX2lycSgmZGVzYy0+bG9jayk7CiAJCXN0YXR1cyA9IGRlc2MtPnN0YXR1czsKIAogCQlpZiAoc3RhdHVzICYgSVJRX0FVVE9ERVRFQ1QpIHsKIAkJCWlmICghKHN0YXR1cyAmIElSUV9XQUlUSU5HKSkgewotCQkJCWlmICghbnJfaXJxcykKKwkJCQlpZiAoIW5yX29mX2lycXMpCiAJCQkJCWlycV9mb3VuZCA9IGk7Ci0JCQkJbnJfaXJxcysrOworCQkJCW5yX29mX2lycXMrKzsKIAkJCX0KIAkJCWRlc2MtPnN0YXR1cyA9IHN0YXR1cyAmIH5JUlFfQVVUT0RFVEVDVDsKIAkJCWRlc2MtPmNoaXAtPnNodXRkb3duKGkpOwpAQCAtMTkzLDcgKzE4Miw3IEBACiAJfQogCW11dGV4X3VubG9jaygmcHJvYmluZ19hY3RpdmUpOwogCi0JaWYgKG5yX2lycXMgPiAxKQorCWlmIChucl9vZl9pcnFzID4gMSkKIAkJaXJxX2ZvdW5kID0gLWlycV9mb3VuZDsKIAogCXJldHVybiBpcnFfZm91bmQ7CmRpZmYgLS1naXQgYS9rZXJuZWwvaXJxL2NoaXAuYyBiL2tlcm5lbC9pcnEvY2hpcC5jCmluZGV4IDNjZDQ0MWUuLjQ4OTVmZGUgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9pcnEvY2hpcC5jCisrKyBiL2tlcm5lbC9pcnEvY2hpcC5jCkBAIC0yNCwxNiArMjQsMTUgQEAKICAqLwogdm9pZCBkeW5hbWljX2lycV9pbml0KHVuc2lnbmVkIGludCBpcnEpCiB7Ci0Jc3RydWN0IGlycV9kZXNjICpkZXNjOworCXN0cnVjdCBpcnFfZGVzYyAqZGVzYyA9IGlycV90b19kZXNjKGlycSk7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCWlmIChpcnEgPj0gTlJfSVJRUykgeworCWlmICghZGVzYykgewogCQlXQVJOKDEsIEtFUk5fRVJSICJUcnlpbmcgdG8gaW5pdGlhbGl6ZSBpbnZhbGlkIElSUSVkXG4iLCBpcnEpOwogCQlyZXR1cm47CiAJfQogCiAJLyogRW5zdXJlIHdlIGRvbid0IGhhdmUgbGVmdCBvdmVyIHZhbHVlcyBmcm9tIGEgcHJldmlvdXMgdXNlIG9mIHRoaXMgaXJxICovCi0JZGVzYyA9IGlycV9kZXNjICsgaXJxOwogCXNwaW5fbG9ja19pcnFzYXZlKCZkZXNjLT5sb2NrLCBmbGFncyk7CiAJZGVzYy0+c3RhdHVzID0gSVJRX0RJU0FCTEVEOwogCWRlc2MtPmNoaXAgPSAmbm9faXJxX2NoaXA7CkBAIC01NywxNSArNTYsMTQgQEAKICAqLwogdm9pZCBkeW5hbWljX2lycV9jbGVhbnVwKHVuc2lnbmVkIGludCBpcnEpCiB7Ci0Jc3RydWN0IGlycV9kZXNjICpkZXNjOworCXN0cnVjdCBpcnFfZGVzYyAqZGVzYyA9IGlycV90b19kZXNjKGlycSk7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCWlmIChpcnEgPj0gTlJfSVJRUykgeworCWlmICghZGVzYykgewogCQlXQVJOKDEsIEtFUk5fRVJSICJUcnlpbmcgdG8gY2xlYW51cCBpbnZhbGlkIElSUSVkXG4iLCBpcnEpOwogCQlyZXR1cm47CiAJfQogCi0JZGVzYyA9IGlycV9kZXNjICsgaXJxOwogCXNwaW5fbG9ja19pcnFzYXZlKCZkZXNjLT5sb2NrLCBmbGFncyk7CiAJaWYgKGRlc2MtPmFjdGlvbikgewogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXNjLT5sb2NrLCBmbGFncyk7CkBAIC04OSwxMCArODcsMTAgQEAKICAqLwogaW50IHNldF9pcnFfY2hpcCh1bnNpZ25lZCBpbnQgaXJxLCBzdHJ1Y3QgaXJxX2NoaXAgKmNoaXApCiB7Ci0Jc3RydWN0IGlycV9kZXNjICpkZXNjOworCXN0cnVjdCBpcnFfZGVzYyAqZGVzYyA9IGlycV90b19kZXNjKGlycSk7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCWlmIChpcnEgPj0gTlJfSVJRUykgeworCWlmICghZGVzYykgewogCQlXQVJOKDEsIEtFUk5fRVJSICJUcnlpbmcgdG8gaW5zdGFsbCBjaGlwIGZvciBJUlElZFxuIiwgaXJxKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQpAQCAtMTAwLDcgKzk4LDYgQEAKIAlpZiAoIWNoaXApCiAJCWNoaXAgPSAmbm9faXJxX2NoaXA7CiAKLQlkZXNjID0gaXJxX2Rlc2MgKyBpcnE7CiAJc3Bpbl9sb2NrX2lycXNhdmUoJmRlc2MtPmxvY2ssIGZsYWdzKTsKIAlpcnFfY2hpcF9zZXRfZGVmYXVsdHMoY2hpcCk7CiAJZGVzYy0+Y2hpcCA9IGNoaXA7CkBAIC0xMTEsMjcgKzEwOCwyNyBAQAogRVhQT1JUX1NZTUJPTChzZXRfaXJxX2NoaXApOwogCiAvKioKLSAqCXNldF9pcnFfdHlwZSAtIHNldCB0aGUgaXJxIHR5cGUgZm9yIGFuIGlycQorICoJc2V0X2lycV90eXBlIC0gc2V0IHRoZSBpcnEgdHJpZ2dlciB0eXBlIGZvciBhbiBpcnEKICAqCUBpcnE6CWlycSBudW1iZXIKLSAqCUB0eXBlOglpbnRlcnJ1cHQgdHlwZSAtIHNlZSBpbmNsdWRlL2xpbnV4L2ludGVycnVwdC5oCisgKglAdHlwZToJSVJRX1RZUEVfe0xFVkVMLEVER0V9XyogdmFsdWUgLSBzZWUgaW5jbHVkZS9saW51eC9pcnEuaAogICovCiBpbnQgc2V0X2lycV90eXBlKHVuc2lnbmVkIGludCBpcnEsIHVuc2lnbmVkIGludCB0eXBlKQogewotCXN0cnVjdCBpcnFfZGVzYyAqZGVzYzsKKwlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MgPSBpcnFfdG9fZGVzYyhpcnEpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IHJldCA9IC1FTlhJTzsKIAotCWlmIChpcnEgPj0gTlJfSVJRUykgeworCWlmICghZGVzYykgewogCQlwcmludGsoS0VSTl9FUlIgIlRyeWluZyB0byBzZXQgaXJxIHR5cGUgZm9yIElSUSVkXG4iLCBpcnEpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKLQlkZXNjID0gaXJxX2Rlc2MgKyBpcnE7Ci0JaWYgKGRlc2MtPmNoaXAtPnNldF90eXBlKSB7Ci0JCXNwaW5fbG9ja19pcnFzYXZlKCZkZXNjLT5sb2NrLCBmbGFncyk7Ci0JCXJldCA9IGRlc2MtPmNoaXAtPnNldF90eXBlKGlycSwgdHlwZSk7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRlc2MtPmxvY2ssIGZsYWdzKTsKLQl9CisJaWYgKHR5cGUgPT0gSVJRX1RZUEVfTk9ORSkKKwkJcmV0dXJuIDA7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZGVzYy0+bG9jaywgZmxhZ3MpOworCXJldCA9IF9faXJxX3NldF90cmlnZ2VyKGRlc2MsIGlycSwgZmxhZ3MpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRlc2MtPmxvY2ssIGZsYWdzKTsKIAlyZXR1cm4gcmV0OwogfQogRVhQT1JUX1NZTUJPTChzZXRfaXJxX3R5cGUpOwpAQCAtMTQ1LDE2ICsxNDIsMTUgQEAKICAqLwogaW50IHNldF9pcnFfZGF0YSh1bnNpZ25lZCBpbnQgaXJxLCB2b2lkICpkYXRhKQogewotCXN0cnVjdCBpcnFfZGVzYyAqZGVzYzsKKwlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MgPSBpcnFfdG9fZGVzYyhpcnEpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlpZiAoaXJxID49IE5SX0lSUVMpIHsKKwlpZiAoIWRlc2MpIHsKIAkJcHJpbnRrKEtFUk5fRVJSCiAJCSAgICAgICAiVHJ5aW5nIHRvIGluc3RhbGwgY29udHJvbGxlciBkYXRhIGZvciBJUlElZFxuIiwgaXJxKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JZGVzYyA9IGlycV9kZXNjICsgaXJxOwogCXNwaW5fbG9ja19pcnFzYXZlKCZkZXNjLT5sb2NrLCBmbGFncyk7CiAJZGVzYy0+aGFuZGxlcl9kYXRhID0gZGF0YTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXNjLT5sb2NrLCBmbGFncyk7CkBAIC0xNzEsMTUgKzE2NywxNSBAQAogICovCiBpbnQgc2V0X2lycV9tc2kodW5zaWduZWQgaW50IGlycSwgc3RydWN0IG1zaV9kZXNjICplbnRyeSkKIHsKLQlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2M7CisJc3RydWN0IGlycV9kZXNjICpkZXNjID0gaXJxX3RvX2Rlc2MoaXJxKTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JaWYgKGlycSA+PSBOUl9JUlFTKSB7CisJaWYgKCFkZXNjKSB7CiAJCXByaW50ayhLRVJOX0VSUgogCQkgICAgICAgIlRyeWluZyB0byBpbnN0YWxsIG1zaSBkYXRhIGZvciBJUlElZFxuIiwgaXJxKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQotCWRlc2MgPSBpcnFfZGVzYyArIGlycTsKKwogCXNwaW5fbG9ja19pcnFzYXZlKCZkZXNjLT5sb2NrLCBmbGFncyk7CiAJZGVzYy0+bXNpX2Rlc2MgPSBlbnRyeTsKIAlpZiAoZW50cnkpCkBAIC0xOTcsMTAgKzE5MywxNiBAQAogICovCiBpbnQgc2V0X2lycV9jaGlwX2RhdGEodW5zaWduZWQgaW50IGlycSwgdm9pZCAqZGF0YSkKIHsKLQlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MgPSBpcnFfZGVzYyArIGlycTsKKwlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MgPSBpcnFfdG9fZGVzYyhpcnEpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlpZiAoaXJxID49IE5SX0lSUVMgfHwgIWRlc2MtPmNoaXApIHsKKwlpZiAoIWRlc2MpIHsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCSAgICAgICAiVHJ5aW5nIHRvIGluc3RhbGwgY2hpcCBkYXRhIGZvciBJUlElZFxuIiwgaXJxKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKCFkZXNjLT5jaGlwKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiQlVHOiBiYWQgc2V0X2lycV9jaGlwX2RhdGEoSVJRIyVkKVxuIiwgaXJxKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQpAQCAtMjE4LDcgKzIyMCw3IEBACiAgKi8KIHN0YXRpYyB2b2lkIGRlZmF1bHRfZW5hYmxlKHVuc2lnbmVkIGludCBpcnEpCiB7Ci0Jc3RydWN0IGlycV9kZXNjICpkZXNjID0gaXJxX2Rlc2MgKyBpcnE7CisJc3RydWN0IGlycV9kZXNjICpkZXNjID0gaXJxX3RvX2Rlc2MoaXJxKTsKIAogCWRlc2MtPmNoaXAtPnVubWFzayhpcnEpOwogCWRlc2MtPnN0YXR1cyAmPSB+SVJRX01BU0tFRDsKQEAgLTIzNiw4ICsyMzgsOSBAQAogICovCiBzdGF0aWMgdW5zaWduZWQgaW50IGRlZmF1bHRfc3RhcnR1cCh1bnNpZ25lZCBpbnQgaXJxKQogewotCWlycV9kZXNjW2lycV0uY2hpcC0+ZW5hYmxlKGlycSk7CisJc3RydWN0IGlycV9kZXNjICpkZXNjID0gaXJxX3RvX2Rlc2MoaXJxKTsKIAorCWRlc2MtPmNoaXAtPmVuYWJsZShpcnEpOwogCXJldHVybiAwOwogfQogCkBAIC0yNDYsNyArMjQ5LDcgQEAKICAqLwogc3RhdGljIHZvaWQgZGVmYXVsdF9zaHV0ZG93bih1bnNpZ25lZCBpbnQgaXJxKQogewotCXN0cnVjdCBpcnFfZGVzYyAqZGVzYyA9IGlycV9kZXNjICsgaXJxOworCXN0cnVjdCBpcnFfZGVzYyAqZGVzYyA9IGlycV90b19kZXNjKGlycSk7CiAKIAlkZXNjLT5jaGlwLT5tYXNrKGlycSk7CiAJZGVzYy0+c3RhdHVzIHw9IElSUV9NQVNLRUQ7CkBAIC0zMDUsMTQgKzMwOCwxMyBAQAogewogCXN0cnVjdCBpcnFhY3Rpb24gKmFjdGlvbjsKIAlpcnFyZXR1cm5fdCBhY3Rpb25fcmV0OwotCWNvbnN0IHVuc2lnbmVkIGludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CiAKIAlzcGluX2xvY2soJmRlc2MtPmxvY2spOwogCiAJaWYgKHVubGlrZWx5KGRlc2MtPnN0YXR1cyAmIElSUV9JTlBST0dSRVNTKSkKIAkJZ290byBvdXRfdW5sb2NrOwogCWRlc2MtPnN0YXR1cyAmPSB+KElSUV9SRVBMQVkgfCBJUlFfV0FJVElORyk7Ci0Ja3N0YXRfY3B1KGNwdSkuaXJxc1tpcnFdKys7CisJa3N0YXRfaW5jcl9pcnFzX3RoaXNfY3B1KGlycSwgZGVzYyk7CiAKIAlhY3Rpb24gPSBkZXNjLT5hY3Rpb247CiAJaWYgKHVubGlrZWx5KCFhY3Rpb24gfHwgKGRlc2MtPnN0YXR1cyAmIElSUV9ESVNBQkxFRCkpKQpAQCAtMzQ0LDcgKzM0Niw2IEBACiB2b2lkCiBoYW5kbGVfbGV2ZWxfaXJxKHVuc2lnbmVkIGludCBpcnEsIHN0cnVjdCBpcnFfZGVzYyAqZGVzYykKIHsKLQl1bnNpZ25lZCBpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwogCXN0cnVjdCBpcnFhY3Rpb24gKmFjdGlvbjsKIAlpcnFyZXR1cm5fdCBhY3Rpb25fcmV0OwogCkBAIC0zNTQsNyArMzU1LDcgQEAKIAlpZiAodW5saWtlbHkoZGVzYy0+c3RhdHVzICYgSVJRX0lOUFJPR1JFU1MpKQogCQlnb3RvIG91dF91bmxvY2s7CiAJZGVzYy0+c3RhdHVzICY9IH4oSVJRX1JFUExBWSB8IElSUV9XQUlUSU5HKTsKLQlrc3RhdF9jcHUoY3B1KS5pcnFzW2lycV0rKzsKKwlrc3RhdF9pbmNyX2lycXNfdGhpc19jcHUoaXJxLCBkZXNjKTsKIAogCS8qCiAJICogSWYgaXRzIGRpc2FibGVkIG9yIG5vIGFjdGlvbiBhdmFpbGFibGUKQEAgLTM5Miw3ICszOTMsNiBAQAogdm9pZAogaGFuZGxlX2Zhc3Rlb2lfaXJxKHVuc2lnbmVkIGludCBpcnEsIHN0cnVjdCBpcnFfZGVzYyAqZGVzYykKIHsKLQl1bnNpZ25lZCBpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwogCXN0cnVjdCBpcnFhY3Rpb24gKmFjdGlvbjsKIAlpcnFyZXR1cm5fdCBhY3Rpb25fcmV0OwogCkBAIC00MDIsNyArNDAyLDcgQEAKIAkJZ290byBvdXQ7CiAKIAlkZXNjLT5zdGF0dXMgJj0gfihJUlFfUkVQTEFZIHwgSVJRX1dBSVRJTkcpOwotCWtzdGF0X2NwdShjcHUpLmlycXNbaXJxXSsrOworCWtzdGF0X2luY3JfaXJxc190aGlzX2NwdShpcnEsIGRlc2MpOwogCiAJLyoKIAkgKiBJZiBpdHMgZGlzYWJsZWQgb3Igbm8gYWN0aW9uIGF2YWlsYWJsZQpAQCAtNDUxLDggKzQ1MSw2IEBACiB2b2lkCiBoYW5kbGVfZWRnZV9pcnEodW5zaWduZWQgaW50IGlycSwgc3RydWN0IGlycV9kZXNjICpkZXNjKQogewotCWNvbnN0IHVuc2lnbmVkIGludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7Ci0KIAlzcGluX2xvY2soJmRlc2MtPmxvY2spOwogCiAJZGVzYy0+c3RhdHVzICY9IH4oSVJRX1JFUExBWSB8IElSUV9XQUlUSU5HKTsKQEAgLTQ2OCw4ICs0NjYsNyBAQAogCQltYXNrX2Fja19pcnEoZGVzYywgaXJxKTsKIAkJZ290byBvdXRfdW5sb2NrOwogCX0KLQotCWtzdGF0X2NwdShjcHUpLmlycXNbaXJxXSsrOworCWtzdGF0X2luY3JfaXJxc190aGlzX2NwdShpcnEsIGRlc2MpOwogCiAJLyogU3RhcnQgaGFuZGxpbmcgdGhlIGlycSAqLwogCWRlc2MtPmNoaXAtPmFjayhpcnEpOwpAQCAtNTI0LDcgKzUyMSw3IEBACiB7CiAJaXJxcmV0dXJuX3QgYWN0aW9uX3JldDsKIAotCWtzdGF0X3RoaXNfY3B1LmlycXNbaXJxXSsrOworCWtzdGF0X2luY3JfaXJxc190aGlzX2NwdShpcnEsIGRlc2MpOwogCiAJaWYgKGRlc2MtPmNoaXAtPmFjaykKIAkJZGVzYy0+Y2hpcC0+YWNrKGlycSk7CkBAIC01NDEsMTcgKzUzOCwxNSBAQAogX19zZXRfaXJxX2hhbmRsZXIodW5zaWduZWQgaW50IGlycSwgaXJxX2Zsb3dfaGFuZGxlcl90IGhhbmRsZSwgaW50IGlzX2NoYWluZWQsCiAJCSAgY29uc3QgY2hhciAqbmFtZSkKIHsKLQlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2M7CisJc3RydWN0IGlycV9kZXNjICpkZXNjID0gaXJxX3RvX2Rlc2MoaXJxKTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JaWYgKGlycSA+PSBOUl9JUlFTKSB7CisJaWYgKCFkZXNjKSB7CiAJCXByaW50ayhLRVJOX0VSUgogCQkgICAgICAgIlRyeWluZyB0byBpbnN0YWxsIHR5cGUgY29udHJvbCBmb3IgSVJRJWRcbiIsIGlycSk7CiAJCXJldHVybjsKIAl9CiAKLQlkZXNjID0gaXJxX2Rlc2MgKyBpcnE7Ci0KIAlpZiAoIWhhbmRsZSkKIAkJaGFuZGxlID0gaGFuZGxlX2JhZF9pcnE7CiAJZWxzZSBpZiAoZGVzYy0+Y2hpcCA9PSAmbm9faXJxX2NoaXApIHsKQEAgLTU4Myw3ICs1NzgsNyBAQAogCQlkZXNjLT5zdGF0dXMgJj0gfklSUV9ESVNBQkxFRDsKIAkJZGVzYy0+c3RhdHVzIHw9IElSUV9OT1JFUVVFU1QgfCBJUlFfTk9QUk9CRTsKIAkJZGVzYy0+ZGVwdGggPSAwOwotCQlkZXNjLT5jaGlwLT51bm1hc2soaXJxKTsKKwkJZGVzYy0+Y2hpcC0+c3RhcnR1cChpcnEpOwogCX0KIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXNjLT5sb2NrLCBmbGFncyk7CiB9CkBAIC02MDYsMTcgKzYwMSwxNCBAQAogCiB2b2lkIF9faW5pdCBzZXRfaXJxX25vcHJvYmUodW5zaWduZWQgaW50IGlycSkKIHsKLQlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2M7CisJc3RydWN0IGlycV9kZXNjICpkZXNjID0gaXJxX3RvX2Rlc2MoaXJxKTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JaWYgKGlycSA+PSBOUl9JUlFTKSB7CisJaWYgKCFkZXNjKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiVHJ5aW5nIHRvIG1hcmsgSVJRJWQgbm9uLXByb2JlYWJsZVxuIiwgaXJxKTsKLQogCQlyZXR1cm47CiAJfQogCi0JZGVzYyA9IGlycV9kZXNjICsgaXJxOwotCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmRlc2MtPmxvY2ssIGZsYWdzKTsKIAlkZXNjLT5zdGF0dXMgfD0gSVJRX05PUFJPQkU7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGVzYy0+bG9jaywgZmxhZ3MpOwpAQCAtNjI0LDE3ICs2MTYsMTQgQEAKIAogdm9pZCBfX2luaXQgc2V0X2lycV9wcm9iZSh1bnNpZ25lZCBpbnQgaXJxKQogewotCXN0cnVjdCBpcnFfZGVzYyAqZGVzYzsKKwlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MgPSBpcnFfdG9fZGVzYyhpcnEpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlpZiAoaXJxID49IE5SX0lSUVMpIHsKKwlpZiAoIWRlc2MpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJUcnlpbmcgdG8gbWFyayBJUlElZCBwcm9iZWFibGVcbiIsIGlycSk7Ci0KIAkJcmV0dXJuOwogCX0KIAotCWRlc2MgPSBpcnFfZGVzYyArIGlycTsKLQogCXNwaW5fbG9ja19pcnFzYXZlKCZkZXNjLT5sb2NrLCBmbGFncyk7CiAJZGVzYy0+c3RhdHVzICY9IH5JUlFfTk9QUk9CRTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXNjLT5sb2NrLCBmbGFncyk7CmRpZmYgLS1naXQgYS9rZXJuZWwvaXJxL2hhbmRsZS5jIGIva2VybmVsL2lycS9oYW5kbGUuYwppbmRleCA1ZmE2MTk4Li5jODE1YjQyIDEwMDY0NAotLS0gYS9rZXJuZWwvaXJxL2hhbmRsZS5jCisrKyBiL2tlcm5lbC9pcnEvaGFuZGxlLmMKQEAgLTI1LDExICsyNSwxMCBAQAogICoKICAqIEhhbmRsZXMgc3B1cmlvdXMgYW5kIHVuaGFuZGxlZCBJUlEncy4gSXQgYWxzbyBwcmludHMgYSBkZWJ1Z21lc3NhZ2UuCiAgKi8KLXZvaWQKLWhhbmRsZV9iYWRfaXJxKHVuc2lnbmVkIGludCBpcnEsIHN0cnVjdCBpcnFfZGVzYyAqZGVzYykKK3ZvaWQgaGFuZGxlX2JhZF9pcnEodW5zaWduZWQgaW50IGlycSwgc3RydWN0IGlycV9kZXNjICpkZXNjKQogewogCXByaW50X2lycV9kZXNjKGlycSwgZGVzYyk7Ci0Ja3N0YXRfdGhpc19jcHUuaXJxc1tpcnFdKys7CisJa3N0YXRfaW5jcl9pcnFzX3RoaXNfY3B1KGlycSwgZGVzYyk7CiAJYWNrX2JhZF9pcnEoaXJxKTsKIH0KIApAQCAtNDcsNiArNDYsOSBAQAogICoKICAqIENvbnRyb2xsZXIgbWFwcGluZ3MgZm9yIGFsbCBpbnRlcnJ1cHQgc291cmNlczoKICAqLworaW50IG5yX2lycXMgPSBOUl9JUlFTOworRVhQT1JUX1NZTUJPTF9HUEwobnJfaXJxcyk7CisKIHN0cnVjdCBpcnFfZGVzYyBpcnFfZGVzY1tOUl9JUlFTXSBfX2NhY2hlbGluZV9hbGlnbmVkX2luX3NtcCA9IHsKIAlbMCAuLi4gTlJfSVJRUy0xXSA9IHsKIAkJLnN0YXR1cyA9IElSUV9ESVNBQkxFRCwKQEAgLTY2LDcgKzY4LDkgQEAKICAqLwogc3RhdGljIHZvaWQgYWNrX2JhZCh1bnNpZ25lZCBpbnQgaXJxKQogewotCXByaW50X2lycV9kZXNjKGlycSwgaXJxX2Rlc2MgKyBpcnEpOworCXN0cnVjdCBpcnFfZGVzYyAqZGVzYyA9IGlycV90b19kZXNjKGlycSk7CisKKwlwcmludF9pcnFfZGVzYyhpcnEsIGRlc2MpOwogCWFja19iYWRfaXJxKGlycSk7CiB9CiAKQEAgLTEzMSw4ICsxMzUsNiBAQAogCWlycXJldHVybl90IHJldCwgcmV0dmFsID0gSVJRX05PTkU7CiAJdW5zaWduZWQgaW50IHN0YXR1cyA9IDA7CiAKLQloYW5kbGVfZHluYW1pY190aWNrKGFjdGlvbik7Ci0KIAlpZiAoIShhY3Rpb24tPmZsYWdzICYgSVJRRl9ESVNBQkxFRCkpCiAJCWxvY2FsX2lycV9lbmFibGVfaW5faGFyZGlycSgpOwogCkBAIC0xNjUsMTEgKzE2NywxMiBAQAogICovCiB1bnNpZ25lZCBpbnQgX19kb19JUlEodW5zaWduZWQgaW50IGlycSkKIHsKLQlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MgPSBpcnFfZGVzYyArIGlycTsKKwlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MgPSBpcnFfdG9fZGVzYyhpcnEpOwogCXN0cnVjdCBpcnFhY3Rpb24gKmFjdGlvbjsKIAl1bnNpZ25lZCBpbnQgc3RhdHVzOwogCi0Ja3N0YXRfdGhpc19jcHUuaXJxc1tpcnFdKys7CisJa3N0YXRfaW5jcl9pcnFzX3RoaXNfY3B1KGlycSwgZGVzYyk7CisKIAlpZiAoQ0hFQ0tfSVJRX1BFUl9DUFUoZGVzYy0+c3RhdHVzKSkgewogCQlpcnFyZXR1cm5fdCBhY3Rpb25fcmV0OwogCkBAIC0yNTYsOCArMjU5LDggQEAKIH0KICNlbmRpZgogCi0jaWZkZWYgQ09ORklHX1RSQUNFX0lSUUZMQUdTCiAKKyNpZmRlZiBDT05GSUdfVFJBQ0VfSVJRRkxBR1MKIC8qCiAgKiBsb2NrZGVwOiB3ZSB3YW50IHRvIGhhbmRsZSBhbGwgaXJxX2Rlc2MgbG9ja3MgYXMgYSBzaW5nbGUgbG9jay1jbGFzczoKICAqLwpAQCAtMjY1LDEwICsyNjgsMTAgQEAKIAogdm9pZCBlYXJseV9pbml0X2lycV9sb2NrX2NsYXNzKHZvaWQpCiB7CisJc3RydWN0IGlycV9kZXNjICpkZXNjOwogCWludCBpOwogCi0JZm9yIChpID0gMDsgaSA8IE5SX0lSUVM7IGkrKykKLQkJbG9ja2RlcF9zZXRfY2xhc3MoJmlycV9kZXNjW2ldLmxvY2ssICZpcnFfZGVzY19sb2NrX2NsYXNzKTsKKwlmb3JfZWFjaF9pcnFfZGVzYyhpLCBkZXNjKQorCQlsb2NrZGVwX3NldF9jbGFzcygmZGVzYy0+bG9jaywgJmlycV9kZXNjX2xvY2tfY2xhc3MpOwogfQotCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2tlcm5lbC9pcnEvaW50ZXJuYWxzLmggYi9rZXJuZWwvaXJxL2ludGVybmFscy5oCmluZGV4IDA4YTg0OWEuLmM5NzY3ZTYgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9pcnEvaW50ZXJuYWxzLmgKKysrIGIva2VybmVsL2lycS9pbnRlcm5hbHMuaApAQCAtMTAsMTIgKzEwLDE1IEBACiAvKiBTZXQgZGVmYXVsdCBoYW5kbGVyOiAqLwogZXh0ZXJuIHZvaWQgY29tcGF0X2lycV9jaGlwX3NldF9kZWZhdWx0X2hhbmRsZXIoc3RydWN0IGlycV9kZXNjICpkZXNjKTsKIAorZXh0ZXJuIGludCBfX2lycV9zZXRfdHJpZ2dlcihzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MsIHVuc2lnbmVkIGludCBpcnEsCisJCXVuc2lnbmVkIGxvbmcgZmxhZ3MpOworCiAjaWZkZWYgQ09ORklHX1BST0NfRlMKLWV4dGVybiB2b2lkIHJlZ2lzdGVyX2lycV9wcm9jKHVuc2lnbmVkIGludCBpcnEpOworZXh0ZXJuIHZvaWQgcmVnaXN0ZXJfaXJxX3Byb2ModW5zaWduZWQgaW50IGlycSwgc3RydWN0IGlycV9kZXNjICpkZXNjKTsKIGV4dGVybiB2b2lkIHJlZ2lzdGVyX2hhbmRsZXJfcHJvYyh1bnNpZ25lZCBpbnQgaXJxLCBzdHJ1Y3QgaXJxYWN0aW9uICphY3Rpb24pOwogZXh0ZXJuIHZvaWQgdW5yZWdpc3Rlcl9oYW5kbGVyX3Byb2ModW5zaWduZWQgaW50IGlycSwgc3RydWN0IGlycWFjdGlvbiAqYWN0aW9uKTsKICNlbHNlCi1zdGF0aWMgaW5saW5lIHZvaWQgcmVnaXN0ZXJfaXJxX3Byb2ModW5zaWduZWQgaW50IGlycSkgeyB9CitzdGF0aWMgaW5saW5lIHZvaWQgcmVnaXN0ZXJfaXJxX3Byb2ModW5zaWduZWQgaW50IGlycSwgc3RydWN0IGlycV9kZXNjICpkZXNjKSB7IH0KIHN0YXRpYyBpbmxpbmUgdm9pZCByZWdpc3Rlcl9oYW5kbGVyX3Byb2ModW5zaWduZWQgaW50IGlycSwKIAkJCQkJIHN0cnVjdCBpcnFhY3Rpb24gKmFjdGlvbikgeyB9CiBzdGF0aWMgaW5saW5lIHZvaWQgdW5yZWdpc3Rlcl9oYW5kbGVyX3Byb2ModW5zaWduZWQgaW50IGlycSwKZGlmZiAtLWdpdCBhL2tlcm5lbC9pcnEvbWFuYWdlLmMgYi9rZXJuZWwvaXJxL21hbmFnZS5jCmluZGV4IDYwYzQ5ZTMuLmM0OThhMWIgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9pcnEvbWFuYWdlLmMKKysrIGIva2VybmVsL2lycS9tYW5hZ2UuYwpAQCAtMzEsMTAgKzMxLDEwIEBACiAgKi8KIHZvaWQgc3luY2hyb25pemVfaXJxKHVuc2lnbmVkIGludCBpcnEpCiB7Ci0Jc3RydWN0IGlycV9kZXNjICpkZXNjID0gaXJxX2Rlc2MgKyBpcnE7CisJc3RydWN0IGlycV9kZXNjICpkZXNjID0gaXJxX3RvX2Rlc2MoaXJxKTsKIAl1bnNpZ25lZCBpbnQgc3RhdHVzOwogCi0JaWYgKGlycSA+PSBOUl9JUlFTKQorCWlmICghZGVzYykKIAkJcmV0dXJuOwogCiAJZG8gewpAQCAtNjQsNyArNjQsNyBAQAogICovCiBpbnQgaXJxX2Nhbl9zZXRfYWZmaW5pdHkodW5zaWduZWQgaW50IGlycSkKIHsKLQlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MgPSBpcnFfZGVzYyArIGlycTsKKwlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MgPSBpcnFfdG9fZGVzYyhpcnEpOwogCiAJaWYgKENIRUNLX0lSUV9QRVJfQ1BVKGRlc2MtPnN0YXR1cykgfHwgIWRlc2MtPmNoaXAgfHwKIAkgICAgIWRlc2MtPmNoaXAtPnNldF9hZmZpbml0eSkKQEAgLTgxLDE4ICs4MSwxNyBAQAogICovCiBpbnQgaXJxX3NldF9hZmZpbml0eSh1bnNpZ25lZCBpbnQgaXJxLCBjcHVtYXNrX3QgY3B1bWFzaykKIHsKLQlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MgPSBpcnFfZGVzYyArIGlycTsKKwlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MgPSBpcnFfdG9fZGVzYyhpcnEpOwogCiAJaWYgKCFkZXNjLT5jaGlwLT5zZXRfYWZmaW5pdHkpCiAJCXJldHVybiAtRUlOVkFMOwogCi0Jc2V0X2JhbGFuY2VfaXJxX2FmZmluaXR5KGlycSwgY3B1bWFzayk7Ci0KICNpZmRlZiBDT05GSUdfR0VORVJJQ19QRU5ESU5HX0lSUQotCWlmIChkZXNjLT5zdGF0dXMgJiBJUlFfTU9WRV9QQ05UWFQpIHsKKwlpZiAoZGVzYy0+c3RhdHVzICYgSVJRX01PVkVfUENOVFhUIHx8IGRlc2MtPnN0YXR1cyAmIElSUV9ESVNBQkxFRCkgewogCQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJCXNwaW5fbG9ja19pcnFzYXZlKCZkZXNjLT5sb2NrLCBmbGFncyk7CisJCWRlc2MtPmFmZmluaXR5ID0gY3B1bWFzazsKIAkJZGVzYy0+Y2hpcC0+c2V0X2FmZmluaXR5KGlycSwgY3B1bWFzayk7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRlc2MtPmxvY2ssIGZsYWdzKTsKIAl9IGVsc2UKQEAgLTExMSwxNiArMTEwLDE3IEBACiBpbnQgaXJxX3NlbGVjdF9hZmZpbml0eSh1bnNpZ25lZCBpbnQgaXJxKQogewogCWNwdW1hc2tfdCBtYXNrOworCXN0cnVjdCBpcnFfZGVzYyAqZGVzYzsKIAogCWlmICghaXJxX2Nhbl9zZXRfYWZmaW5pdHkoaXJxKSkKIAkJcmV0dXJuIDA7CiAKIAljcHVzX2FuZChtYXNrLCBjcHVfb25saW5lX21hcCwgaXJxX2RlZmF1bHRfYWZmaW5pdHkpOwogCi0JaXJxX2Rlc2NbaXJxXS5hZmZpbml0eSA9IG1hc2s7Ci0JaXJxX2Rlc2NbaXJxXS5jaGlwLT5zZXRfYWZmaW5pdHkoaXJxLCBtYXNrKTsKKwlkZXNjID0gaXJxX3RvX2Rlc2MoaXJxKTsKKwlkZXNjLT5hZmZpbml0eSA9IG1hc2s7CisJZGVzYy0+Y2hpcC0+c2V0X2FmZmluaXR5KGlycSwgbWFzayk7CiAKLQlzZXRfYmFsYW5jZV9pcnFfYWZmaW5pdHkoaXJxLCBtYXNrKTsKIAlyZXR1cm4gMDsKIH0KICNlbmRpZgpAQCAtMTQwLDEwICsxNDAsMTAgQEAKICAqLwogdm9pZCBkaXNhYmxlX2lycV9ub3N5bmModW5zaWduZWQgaW50IGlycSkKIHsKLQlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MgPSBpcnFfZGVzYyArIGlycTsKKwlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MgPSBpcnFfdG9fZGVzYyhpcnEpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlpZiAoaXJxID49IE5SX0lSUVMpCisJaWYgKCFkZXNjKQogCQlyZXR1cm47CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmZGVzYy0+bG9jaywgZmxhZ3MpOwpAQCAtMTY5LDkgKzE2OSw5IEBACiAgKi8KIHZvaWQgZGlzYWJsZV9pcnEodW5zaWduZWQgaW50IGlycSkKIHsKLQlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MgPSBpcnFfZGVzYyArIGlycTsKKwlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MgPSBpcnFfdG9fZGVzYyhpcnEpOwogCi0JaWYgKGlycSA+PSBOUl9JUlFTKQorCWlmICghZGVzYykKIAkJcmV0dXJuOwogCiAJZGlzYWJsZV9pcnFfbm9zeW5jKGlycSk7CkBAIC0yMTEsMTAgKzIxMSwxMCBAQAogICovCiB2b2lkIGVuYWJsZV9pcnEodW5zaWduZWQgaW50IGlycSkKIHsKLQlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MgPSBpcnFfZGVzYyArIGlycTsKKwlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MgPSBpcnFfdG9fZGVzYyhpcnEpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlpZiAoaXJxID49IE5SX0lSUVMpCisJaWYgKCFkZXNjKQogCQlyZXR1cm47CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmZGVzYy0+bG9jaywgZmxhZ3MpOwpAQCAtMjIzLDkgKzIyMyw5IEBACiB9CiBFWFBPUlRfU1lNQk9MKGVuYWJsZV9pcnEpOwogCi1pbnQgc2V0X2lycV93YWtlX3JlYWwodW5zaWduZWQgaW50IGlycSwgdW5zaWduZWQgaW50IG9uKQorc3RhdGljIGludCBzZXRfaXJxX3dha2VfcmVhbCh1bnNpZ25lZCBpbnQgaXJxLCB1bnNpZ25lZCBpbnQgb24pCiB7Ci0Jc3RydWN0IGlycV9kZXNjICpkZXNjID0gaXJxX2Rlc2MgKyBpcnE7CisJc3RydWN0IGlycV9kZXNjICpkZXNjID0gaXJxX3RvX2Rlc2MoaXJxKTsKIAlpbnQgcmV0ID0gLUVOWElPOwogCiAJaWYgKGRlc2MtPmNoaXAtPnNldF93YWtlKQpAQCAtMjQ4LDcgKzI0OCw3IEBACiAgKi8KIGludCBzZXRfaXJxX3dha2UodW5zaWduZWQgaW50IGlycSwgdW5zaWduZWQgaW50IG9uKQogewotCXN0cnVjdCBpcnFfZGVzYyAqZGVzYyA9IGlycV9kZXNjICsgaXJxOworCXN0cnVjdCBpcnFfZGVzYyAqZGVzYyA9IGlycV90b19kZXNjKGlycSk7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgcmV0ID0gMDsKIApAQCAtMjg4LDEyICsyODgsMTYgQEAKICAqLwogaW50IGNhbl9yZXF1ZXN0X2lycSh1bnNpZ25lZCBpbnQgaXJxLCB1bnNpZ25lZCBsb25nIGlycWZsYWdzKQogeworCXN0cnVjdCBpcnFfZGVzYyAqZGVzYyA9IGlycV90b19kZXNjKGlycSk7CiAJc3RydWN0IGlycWFjdGlvbiAqYWN0aW9uOwogCi0JaWYgKGlycSA+PSBOUl9JUlFTIHx8IGlycV9kZXNjW2lycV0uc3RhdHVzICYgSVJRX05PUkVRVUVTVCkKKwlpZiAoIWRlc2MpCiAJCXJldHVybiAwOwogCi0JYWN0aW9uID0gaXJxX2Rlc2NbaXJxXS5hY3Rpb247CisJaWYgKGRlc2MtPnN0YXR1cyAmIElSUV9OT1JFUVVFU1QpCisJCXJldHVybiAwOworCisJYWN0aW9uID0gZGVzYy0+YWN0aW9uOwogCWlmIChhY3Rpb24pCiAJCWlmIChpcnFmbGFncyAmIGFjdGlvbi0+ZmxhZ3MgJiBJUlFGX1NIQVJFRCkKIAkJCWFjdGlvbiA9IE5VTEw7CkBAIC0zMTIsMTAgKzMxNiwxMSBAQAogCQlkZXNjLT5oYW5kbGVfaXJxID0gTlVMTDsKIH0KIAotc3RhdGljIGludCBfX2lycV9zZXRfdHJpZ2dlcihzdHJ1Y3QgaXJxX2NoaXAgKmNoaXAsIHVuc2lnbmVkIGludCBpcnEsCitpbnQgX19pcnFfc2V0X3RyaWdnZXIoc3RydWN0IGlycV9kZXNjICpkZXNjLCB1bnNpZ25lZCBpbnQgaXJxLAogCQl1bnNpZ25lZCBsb25nIGZsYWdzKQogewogCWludCByZXQ7CisJc3RydWN0IGlycV9jaGlwICpjaGlwID0gZGVzYy0+Y2hpcDsKIAogCWlmICghY2hpcCB8fCAhY2hpcC0+c2V0X3R5cGUpIHsKIAkJLyoKQEAgLTMzMyw2ICszMzgsMTEgQEAKIAkJcHJfZXJyKCJzZXR0aW5nIHRyaWdnZXIgbW9kZSAlZCBmb3IgaXJxICV1IGZhaWxlZCAoJXBGKVxuIiwKIAkJCQkoaW50KShmbGFncyAmIElSUUZfVFJJR0dFUl9NQVNLKSwKIAkJCQlpcnEsIGNoaXAtPnNldF90eXBlKTsKKwllbHNlIHsKKwkJLyogbm90ZSB0aGF0IElSUUZfVFJJR0dFUl9NQVNLID09IElSUV9UWVBFX1NFTlNFX01BU0sgKi8KKwkJZGVzYy0+c3RhdHVzICY9IH5JUlFfVFlQRV9TRU5TRV9NQVNLOworCQlkZXNjLT5zdGF0dXMgfD0gZmxhZ3MgJiBJUlFfVFlQRV9TRU5TRV9NQVNLOworCX0KIAogCXJldHVybiByZXQ7CiB9CkBAIC0zNDEsMTYgKzM1MSwxNiBAQAogICogSW50ZXJuYWwgZnVuY3Rpb24gdG8gcmVnaXN0ZXIgYW4gaXJxYWN0aW9uIC0gdHlwaWNhbGx5IHVzZWQgdG8KICAqIGFsbG9jYXRlIHNwZWNpYWwgaW50ZXJydXB0cyB0aGF0IGFyZSBwYXJ0IG9mIHRoZSBhcmNoaXRlY3R1cmUuCiAgKi8KLWludCBzZXR1cF9pcnEodW5zaWduZWQgaW50IGlycSwgc3RydWN0IGlycWFjdGlvbiAqbmV3KQorc3RhdGljIGludAorX19zZXR1cF9pcnEodW5zaWduZWQgaW50IGlycSwgc3RydWN0IGlycV9kZXNjICogZGVzYywgc3RydWN0IGlycWFjdGlvbiAqbmV3KQogewotCXN0cnVjdCBpcnFfZGVzYyAqZGVzYyA9IGlycV9kZXNjICsgaXJxOwogCXN0cnVjdCBpcnFhY3Rpb24gKm9sZCwgKipwOwogCWNvbnN0IGNoYXIgKm9sZF9uYW1lID0gTlVMTDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCBzaGFyZWQgPSAwOwogCWludCByZXQ7CiAKLQlpZiAoaXJxID49IE5SX0lSUVMpCisJaWYgKCFkZXNjKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWlmIChkZXNjLT5jaGlwID09ICZub19pcnFfY2hpcCkKQEAgLTQxMSw3ICs0MjEsNyBAQAogCiAJCS8qIFNldHVwIHRoZSB0eXBlIChsZXZlbCwgZWRnZSBwb2xhcml0eSkgaWYgY29uZmlndXJlZDogKi8KIAkJaWYgKG5ldy0+ZmxhZ3MgJiBJUlFGX1RSSUdHRVJfTUFTSykgewotCQkJcmV0ID0gX19pcnFfc2V0X3RyaWdnZXIoZGVzYy0+Y2hpcCwgaXJxLCBuZXctPmZsYWdzKTsKKwkJCXJldCA9IF9faXJxX3NldF90cmlnZ2VyKGRlc2MsIGlycSwgbmV3LT5mbGFncyk7CiAKIAkJCWlmIChyZXQpIHsKIAkJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXNjLT5sb2NrLCBmbGFncyk7CkBAIC00MzAsMTYgKzQ0MCwyMSBAQAogCQlpZiAoIShkZXNjLT5zdGF0dXMgJiBJUlFfTk9BVVRPRU4pKSB7CiAJCQlkZXNjLT5kZXB0aCA9IDA7CiAJCQlkZXNjLT5zdGF0dXMgJj0gfklSUV9ESVNBQkxFRDsKLQkJCWlmIChkZXNjLT5jaGlwLT5zdGFydHVwKQotCQkJCWRlc2MtPmNoaXAtPnN0YXJ0dXAoaXJxKTsKLQkJCWVsc2UKLQkJCQlkZXNjLT5jaGlwLT5lbmFibGUoaXJxKTsKKwkJCWRlc2MtPmNoaXAtPnN0YXJ0dXAoaXJxKTsKIAkJfSBlbHNlCiAJCQkvKiBVbmRvIG5lc3RlZCBkaXNhYmxlczogKi8KIAkJCWRlc2MtPmRlcHRoID0gMTsKIAogCQkvKiBTZXQgZGVmYXVsdCBhZmZpbml0eSBtYXNrIG9uY2UgZXZlcnl0aGluZyBpcyBzZXR1cCAqLwogCQlpcnFfc2VsZWN0X2FmZmluaXR5KGlycSk7CisKKwl9IGVsc2UgaWYgKChuZXctPmZsYWdzICYgSVJRRl9UUklHR0VSX01BU0spCisJCQkmJiAobmV3LT5mbGFncyAmIElSUUZfVFJJR0dFUl9NQVNLKQorCQkJCSE9IChkZXNjLT5zdGF0dXMgJiBJUlFfVFlQRV9TRU5TRV9NQVNLKSkgeworCQkvKiBob3BlIHRoZSBoYW5kbGVyIHdvcmtzIHdpdGggdGhlIGFjdHVhbCB0cmlnZ2VyIG1vZGUuLi4gKi8KKwkJcHJfd2FybmluZygiSVJRICVkIHVzZXMgdHJpZ2dlciBtb2RlICVkOyByZXF1ZXN0ZWQgJWRcbiIsCisJCQkJaXJxLCAoaW50KShkZXNjLT5zdGF0dXMgJiBJUlFfVFlQRV9TRU5TRV9NQVNLKSwKKwkJCQkoaW50KShuZXctPmZsYWdzICYgSVJRRl9UUklHR0VSX01BU0spKTsKIAl9CiAKIAkqcCA9IG5ldzsKQEAgLTQ2NCw3ICs0NzksNyBAQAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRlc2MtPmxvY2ssIGZsYWdzKTsKIAogCW5ldy0+aXJxID0gaXJxOwotCXJlZ2lzdGVyX2lycV9wcm9jKGlycSk7CisJcmVnaXN0ZXJfaXJxX3Byb2MoaXJxLCBkZXNjKTsKIAluZXctPmRpciA9IE5VTEw7CiAJcmVnaXN0ZXJfaGFuZGxlcl9wcm9jKGlycSwgbmV3KTsKIApAQCAtNDg0LDYgKzQ5OSwyMCBAQAogfQogCiAvKioKKyAqCXNldHVwX2lycSAtIHNldHVwIGFuIGludGVycnVwdAorICoJQGlycTogSW50ZXJydXB0IGxpbmUgdG8gc2V0dXAKKyAqCUBhY3Q6IGlycWFjdGlvbiBmb3IgdGhlIGludGVycnVwdAorICoKKyAqIFVzZWQgdG8gc3RhdGljYWxseSBzZXR1cCBpbnRlcnJ1cHRzIGluIHRoZSBlYXJseSBib290IHByb2Nlc3MuCisgKi8KK2ludCBzZXR1cF9pcnEodW5zaWduZWQgaW50IGlycSwgc3RydWN0IGlycWFjdGlvbiAqYWN0KQoreworCXN0cnVjdCBpcnFfZGVzYyAqZGVzYyA9IGlycV90b19kZXNjKGlycSk7CisKKwlyZXR1cm4gX19zZXR1cF9pcnEoaXJxLCBkZXNjLCBhY3QpOworfQorCisvKioKICAqCWZyZWVfaXJxIC0gZnJlZSBhbiBpbnRlcnJ1cHQKICAqCUBpcnE6IEludGVycnVwdCBsaW5lIHRvIGZyZWUKICAqCUBkZXZfaWQ6IERldmljZSBpZGVudGl0eSB0byBmcmVlCkBAIC00OTksMTUgKzUyOCwxNSBAQAogICovCiB2b2lkIGZyZWVfaXJxKHVuc2lnbmVkIGludCBpcnEsIHZvaWQgKmRldl9pZCkKIHsKLQlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2M7CisJc3RydWN0IGlycV9kZXNjICpkZXNjID0gaXJxX3RvX2Rlc2MoaXJxKTsKIAlzdHJ1Y3QgaXJxYWN0aW9uICoqcDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJV0FSTl9PTihpbl9pbnRlcnJ1cHQoKSk7Ci0JaWYgKGlycSA+PSBOUl9JUlFTKQorCisJaWYgKCFkZXNjKQogCQlyZXR1cm47CiAKLQlkZXNjID0gaXJxX2Rlc2MgKyBpcnE7CiAJc3Bpbl9sb2NrX2lycXNhdmUoJmRlc2MtPmxvY2ssIGZsYWdzKTsKIAlwID0gJmRlc2MtPmFjdGlvbjsKIAlmb3IgKDs7KSB7CkBAIC01OTYsMTIgKzYyNSwxNCBAQAogICoJSVJRRl9TSEFSRUQJCUludGVycnVwdCBpcyBzaGFyZWQKICAqCUlSUUZfRElTQUJMRUQJRGlzYWJsZSBsb2NhbCBpbnRlcnJ1cHRzIHdoaWxlIHByb2Nlc3NpbmcKICAqCUlSUUZfU0FNUExFX1JBTkRPTQlUaGUgaW50ZXJydXB0IGNhbiBiZSB1c2VkIGZvciBlbnRyb3B5CisgKglJUlFGX1RSSUdHRVJfKgkJU3BlY2lmeSBhY3RpdmUgZWRnZShzKSBvciBsZXZlbAogICoKICAqLwogaW50IHJlcXVlc3RfaXJxKHVuc2lnbmVkIGludCBpcnEsIGlycV9oYW5kbGVyX3QgaGFuZGxlciwKIAkJdW5zaWduZWQgbG9uZyBpcnFmbGFncywgY29uc3QgY2hhciAqZGV2bmFtZSwgdm9pZCAqZGV2X2lkKQogewogCXN0cnVjdCBpcnFhY3Rpb24gKmFjdGlvbjsKKwlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2M7CiAJaW50IHJldHZhbDsKIAogI2lmZGVmIENPTkZJR19MT0NLREVQCkBAIC02MTgsOSArNjQ5LDEyIEBACiAJICovCiAJaWYgKChpcnFmbGFncyAmIElSUUZfU0hBUkVEKSAmJiAhZGV2X2lkKQogCQlyZXR1cm4gLUVJTlZBTDsKLQlpZiAoaXJxID49IE5SX0lSUVMpCisKKwlkZXNjID0gaXJxX3RvX2Rlc2MoaXJxKTsKKwlpZiAoIWRlc2MpCiAJCXJldHVybiAtRUlOVkFMOwotCWlmIChpcnFfZGVzY1tpcnFdLnN0YXR1cyAmIElSUV9OT1JFUVVFU1QpCisKKwlpZiAoZGVzYy0+c3RhdHVzICYgSVJRX05PUkVRVUVTVCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAJaWYgKCFoYW5kbGVyKQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTYzNiwyNiArNjcwLDI5IEBACiAJYWN0aW9uLT5uZXh0ID0gTlVMTDsKIAlhY3Rpb24tPmRldl9pZCA9IGRldl9pZDsKIAorCXJldHZhbCA9IF9fc2V0dXBfaXJxKGlycSwgZGVzYywgYWN0aW9uKTsKKwlpZiAocmV0dmFsKQorCQlrZnJlZShhY3Rpb24pOworCiAjaWZkZWYgQ09ORklHX0RFQlVHX1NISVJRCiAJaWYgKGlycWZsYWdzICYgSVJRRl9TSEFSRUQpIHsKIAkJLyoKIAkJICogSXQncyBhIHNoYXJlZCBJUlEgLS0gdGhlIGRyaXZlciBvdWdodCB0byBiZSBwcmVwYXJlZCBmb3IgaXQKIAkJICogdG8gaGFwcGVuIGltbWVkaWF0ZWx5LCBzbyBsZXQncyBtYWtlIHN1cmUuLi4uCi0JCSAqIFdlIGRvIHRoaXMgYmVmb3JlIGFjdHVhbGx5IHJlZ2lzdGVyaW5nIGl0LCB0byBtYWtlIHN1cmUgdGhhdAotCQkgKiBhICdyZWFsJyBJUlEgZG9lc24ndCBydW4gaW4gcGFyYWxsZWwgd2l0aCBvdXIgZmFrZQorCQkgKiBXZSBkaXNhYmxlIHRoZSBpcnEgdG8gbWFrZSBzdXJlIHRoYXQgYSAncmVhbCcgSVJRIGRvZXNuJ3QKKwkJICogcnVuIGluIHBhcmFsbGVsIHdpdGggb3VyIGZha2UuCiAJCSAqLwogCQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCisJCWRpc2FibGVfaXJxKGlycSk7CiAJCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwogCQloYW5kbGVyKGlycSwgZGV2X2lkKTsKKwogCQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisJCWVuYWJsZV9pcnEoaXJxKTsKIAl9CiAjZW5kaWYKLQotCXJldHZhbCA9IHNldHVwX2lycShpcnEsIGFjdGlvbik7Ci0JaWYgKHJldHZhbCkKLQkJa2ZyZWUoYWN0aW9uKTsKLQogCXJldHVybiByZXR2YWw7CiB9CiBFWFBPUlRfU1lNQk9MKHJlcXVlc3RfaXJxKTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9pcnEvbWlncmF0aW9uLmMgYi9rZXJuZWwvaXJxL21pZ3JhdGlvbi5jCmluZGV4IDc3YjdhY2MuLjkwYjkyMGQgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9pcnEvbWlncmF0aW9uLmMKKysrIGIva2VybmVsL2lycS9taWdyYXRpb24uYwpAQCAtMywxOCArMywxOCBAQAogCiB2b2lkIHNldF9wZW5kaW5nX2lycSh1bnNpZ25lZCBpbnQgaXJxLCBjcHVtYXNrX3QgbWFzaykKIHsKLQlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MgPSBpcnFfZGVzYyArIGlycTsKKwlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MgPSBpcnFfdG9fZGVzYyhpcnEpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmZGVzYy0+bG9jaywgZmxhZ3MpOwogCWRlc2MtPnN0YXR1cyB8PSBJUlFfTU9WRV9QRU5ESU5HOwotCWlycV9kZXNjW2lycV0ucGVuZGluZ19tYXNrID0gbWFzazsKKwlkZXNjLT5wZW5kaW5nX21hc2sgPSBtYXNrOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRlc2MtPmxvY2ssIGZsYWdzKTsKIH0KIAogdm9pZCBtb3ZlX21hc2tlZF9pcnEoaW50IGlycSkKIHsKLQlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MgPSBpcnFfZGVzYyArIGlycTsKKwlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MgPSBpcnFfdG9fZGVzYyhpcnEpOwogCWNwdW1hc2tfdCB0bXA7CiAKIAlpZiAobGlrZWx5KCEoZGVzYy0+c3RhdHVzICYgSVJRX01PVkVfUEVORElORykpKQpAQCAtMzAsNyArMzAsNyBAQAogCiAJZGVzYy0+c3RhdHVzICY9IH5JUlFfTU9WRV9QRU5ESU5HOwogCi0JaWYgKHVubGlrZWx5KGNwdXNfZW1wdHkoaXJxX2Rlc2NbaXJxXS5wZW5kaW5nX21hc2spKSkKKwlpZiAodW5saWtlbHkoY3B1c19lbXB0eShkZXNjLT5wZW5kaW5nX21hc2spKSkKIAkJcmV0dXJuOwogCiAJaWYgKCFkZXNjLT5jaGlwLT5zZXRfYWZmaW5pdHkpCkBAIC0zOCw3ICszOCw3IEBACiAKIAlhc3NlcnRfc3Bpbl9sb2NrZWQoJmRlc2MtPmxvY2spOwogCi0JY3B1c19hbmQodG1wLCBpcnFfZGVzY1tpcnFdLnBlbmRpbmdfbWFzaywgY3B1X29ubGluZV9tYXApOworCWNwdXNfYW5kKHRtcCwgZGVzYy0+cGVuZGluZ19tYXNrLCBjcHVfb25saW5lX21hcCk7CiAKIAkvKgogCSAqIElmIHRoZXJlIHdhcyBhIHZhbGlkIG1hc2sgdG8gd29yayB3aXRoLCBwbGVhc2UKQEAgLTU1LDEyICs1NSwxMiBAQAogCWlmIChsaWtlbHkoIWNwdXNfZW1wdHkodG1wKSkpIHsKIAkJZGVzYy0+Y2hpcC0+c2V0X2FmZmluaXR5KGlycSx0bXApOwogCX0KLQljcHVzX2NsZWFyKGlycV9kZXNjW2lycV0ucGVuZGluZ19tYXNrKTsKKwljcHVzX2NsZWFyKGRlc2MtPnBlbmRpbmdfbWFzayk7CiB9CiAKIHZvaWQgbW92ZV9uYXRpdmVfaXJxKGludCBpcnEpCiB7Ci0Jc3RydWN0IGlycV9kZXNjICpkZXNjID0gaXJxX2Rlc2MgKyBpcnE7CisJc3RydWN0IGlycV9kZXNjICpkZXNjID0gaXJxX3RvX2Rlc2MoaXJxKTsKIAogCWlmIChsaWtlbHkoIShkZXNjLT5zdGF0dXMgJiBJUlFfTU9WRV9QRU5ESU5HKSkpCiAJCXJldHVybjsKZGlmZiAtLWdpdCBhL2tlcm5lbC9pcnEvcHJvYy5jIGIva2VybmVsL2lycS9wcm9jLmMKaW5kZXggYTA5ZGQyOS4uZmFjMDE0YSAxMDA2NDQKLS0tIGEva2VybmVsL2lycS9wcm9jLmMKKysrIGIva2VybmVsL2lycS9wcm9jLmMKQEAgLTE5LDcgKzE5LDcgQEAKIAogc3RhdGljIGludCBpcnFfYWZmaW5pdHlfcHJvY19zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdikKIHsKLQlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MgPSBpcnFfZGVzYyArIChsb25nKW0tPnByaXZhdGU7CisJc3RydWN0IGlycV9kZXNjICpkZXNjID0gaXJxX3RvX2Rlc2MoKGxvbmcpbS0+cHJpdmF0ZSk7CiAJY3B1bWFza190ICptYXNrID0gJmRlc2MtPmFmZmluaXR5OwogCiAjaWZkZWYgQ09ORklHX0dFTkVSSUNfUEVORElOR19JUlEKQEAgLTQzLDcgKzQzLDcgQEAKIAljcHVtYXNrX3QgbmV3X3ZhbHVlOwogCWludCBlcnI7CiAKLQlpZiAoIWlycV9kZXNjW2lycV0uY2hpcC0+c2V0X2FmZmluaXR5IHx8IG5vX2lycV9hZmZpbml0eSB8fAorCWlmICghaXJxX3RvX2Rlc2MoaXJxKS0+Y2hpcC0+c2V0X2FmZmluaXR5IHx8IG5vX2lycV9hZmZpbml0eSB8fAogCSAgICBpcnFfYmFsYW5jaW5nX2Rpc2FibGVkKGlycSkpCiAJCXJldHVybiAtRUlPOwogCkBAIC0xMzIsMjAgKzEzMiwyMCBAQAogc3RhdGljIGludCBpcnFfc3B1cmlvdXNfcmVhZChjaGFyICpwYWdlLCBjaGFyICoqc3RhcnQsIG9mZl90IG9mZiwKIAkJCQkgIGludCBjb3VudCwgaW50ICplb2YsIHZvaWQgKmRhdGEpCiB7Ci0Jc3RydWN0IGlycV9kZXNjICpkID0gJmlycV9kZXNjWyhsb25nKSBkYXRhXTsKKwlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MgPSBpcnFfdG9fZGVzYygobG9uZykgZGF0YSk7CiAJcmV0dXJuIHNwcmludGYocGFnZSwgImNvdW50ICV1XG4iCiAJCQkgICAgICJ1bmhhbmRsZWQgJXVcbiIKIAkJCSAgICAgImxhc3RfdW5oYW5kbGVkICV1IG1zXG4iLAotCQkJZC0+aXJxX2NvdW50LAotCQkJZC0+aXJxc191bmhhbmRsZWQsCi0JCQlqaWZmaWVzX3RvX21zZWNzKGQtPmxhc3RfdW5oYW5kbGVkKSk7CisJCQlkZXNjLT5pcnFfY291bnQsCisJCQlkZXNjLT5pcnFzX3VuaGFuZGxlZCwKKwkJCWppZmZpZXNfdG9fbXNlY3MoZGVzYy0+bGFzdF91bmhhbmRsZWQpKTsKIH0KIAogI2RlZmluZSBNQVhfTkFNRUxFTiAxMjgKIAogc3RhdGljIGludCBuYW1lX3VuaXF1ZSh1bnNpZ25lZCBpbnQgaXJxLCBzdHJ1Y3QgaXJxYWN0aW9uICpuZXdfYWN0aW9uKQogewotCXN0cnVjdCBpcnFfZGVzYyAqZGVzYyA9IGlycV9kZXNjICsgaXJxOworCXN0cnVjdCBpcnFfZGVzYyAqZGVzYyA9IGlycV90b19kZXNjKGlycSk7CiAJc3RydWN0IGlycWFjdGlvbiAqYWN0aW9uOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IHJldCA9IDE7CkBAIC0xNjUsOCArMTY1LDkgQEAKIHZvaWQgcmVnaXN0ZXJfaGFuZGxlcl9wcm9jKHVuc2lnbmVkIGludCBpcnEsIHN0cnVjdCBpcnFhY3Rpb24gKmFjdGlvbikKIHsKIAljaGFyIG5hbWUgW01BWF9OQU1FTEVOXTsKKwlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MgPSBpcnFfdG9fZGVzYyhpcnEpOwogCi0JaWYgKCFpcnFfZGVzY1tpcnFdLmRpciB8fCBhY3Rpb24tPmRpciB8fCAhYWN0aW9uLT5uYW1lIHx8CisJaWYgKCFkZXNjLT5kaXIgfHwgYWN0aW9uLT5kaXIgfHwgIWFjdGlvbi0+bmFtZSB8fAogCQkJCQkhbmFtZV91bmlxdWUoaXJxLCBhY3Rpb24pKQogCQlyZXR1cm47CiAKQEAgLTE3NCwzNiArMTc1LDM0IEBACiAJc25wcmludGYobmFtZSwgTUFYX05BTUVMRU4sICIlcyIsIGFjdGlvbi0+bmFtZSk7CiAKIAkvKiBjcmVhdGUgL3Byb2MvaXJxLzEyMzQvaGFuZGxlci8gKi8KLQlhY3Rpb24tPmRpciA9IHByb2NfbWtkaXIobmFtZSwgaXJxX2Rlc2NbaXJxXS5kaXIpOworCWFjdGlvbi0+ZGlyID0gcHJvY19ta2RpcihuYW1lLCBkZXNjLT5kaXIpOwogfQogCiAjdW5kZWYgTUFYX05BTUVMRU4KIAogI2RlZmluZSBNQVhfTkFNRUxFTiAxMAogCi12b2lkIHJlZ2lzdGVyX2lycV9wcm9jKHVuc2lnbmVkIGludCBpcnEpCit2b2lkIHJlZ2lzdGVyX2lycV9wcm9jKHVuc2lnbmVkIGludCBpcnEsIHN0cnVjdCBpcnFfZGVzYyAqZGVzYykKIHsKIAljaGFyIG5hbWUgW01BWF9OQU1FTEVOXTsKIAlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKmVudHJ5OwogCi0JaWYgKCFyb290X2lycV9kaXIgfHwKLQkJKGlycV9kZXNjW2lycV0uY2hpcCA9PSAmbm9faXJxX2NoaXApIHx8Ci0JCQlpcnFfZGVzY1tpcnFdLmRpcikKKwlpZiAoIXJvb3RfaXJxX2RpciB8fCAoZGVzYy0+Y2hpcCA9PSAmbm9faXJxX2NoaXApIHx8IGRlc2MtPmRpcikKIAkJcmV0dXJuOwogCiAJbWVtc2V0KG5hbWUsIDAsIE1BWF9OQU1FTEVOKTsKIAlzcHJpbnRmKG5hbWUsICIlZCIsIGlycSk7CiAKIAkvKiBjcmVhdGUgL3Byb2MvaXJxLzEyMzQgKi8KLQlpcnFfZGVzY1tpcnFdLmRpciA9IHByb2NfbWtkaXIobmFtZSwgcm9vdF9pcnFfZGlyKTsKKwlkZXNjLT5kaXIgPSBwcm9jX21rZGlyKG5hbWUsIHJvb3RfaXJxX2Rpcik7CiAKICNpZmRlZiBDT05GSUdfU01QCiAJLyogY3JlYXRlIC9wcm9jL2lycS88aXJxPi9zbXBfYWZmaW5pdHkgKi8KLQlwcm9jX2NyZWF0ZV9kYXRhKCJzbXBfYWZmaW5pdHkiLCAwNjAwLCBpcnFfZGVzY1tpcnFdLmRpciwKKwlwcm9jX2NyZWF0ZV9kYXRhKCJzbXBfYWZmaW5pdHkiLCAwNjAwLCBkZXNjLT5kaXIsCiAJCQkgJmlycV9hZmZpbml0eV9wcm9jX2ZvcHMsICh2b2lkICopKGxvbmcpaXJxKTsKICNlbmRpZgogCi0JZW50cnkgPSBjcmVhdGVfcHJvY19lbnRyeSgic3B1cmlvdXMiLCAwNDQ0LCBpcnFfZGVzY1tpcnFdLmRpcik7CisJZW50cnkgPSBjcmVhdGVfcHJvY19lbnRyeSgic3B1cmlvdXMiLCAwNDQ0LCBkZXNjLT5kaXIpOwogCWlmIChlbnRyeSkgewogCQllbnRyeS0+ZGF0YSA9ICh2b2lkICopKGxvbmcpaXJxOwogCQllbnRyeS0+cmVhZF9wcm9jID0gaXJxX3NwdXJpb3VzX3JlYWQ7CkBAIC0yMTQsOCArMjEzLDExIEBACiAKIHZvaWQgdW5yZWdpc3Rlcl9oYW5kbGVyX3Byb2ModW5zaWduZWQgaW50IGlycSwgc3RydWN0IGlycWFjdGlvbiAqYWN0aW9uKQogewotCWlmIChhY3Rpb24tPmRpcikKLQkJcmVtb3ZlX3Byb2NfZW50cnkoYWN0aW9uLT5kaXItPm5hbWUsIGlycV9kZXNjW2lycV0uZGlyKTsKKwlpZiAoYWN0aW9uLT5kaXIpIHsKKwkJc3RydWN0IGlycV9kZXNjICpkZXNjID0gaXJxX3RvX2Rlc2MoaXJxKTsKKworCQlyZW1vdmVfcHJvY19lbnRyeShhY3Rpb24tPmRpci0+bmFtZSwgZGVzYy0+ZGlyKTsKKwl9CiB9CiAKIHZvaWQgcmVnaXN0ZXJfZGVmYXVsdF9hZmZpbml0eV9wcm9jKHZvaWQpCkBAIC0yMjgsNyArMjMwLDggQEAKIAogdm9pZCBpbml0X2lycV9wcm9jKHZvaWQpCiB7Ci0JaW50IGk7CisJdW5zaWduZWQgaW50IGlycTsKKwlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2M7CiAKIAkvKiBjcmVhdGUgL3Byb2MvaXJxICovCiAJcm9vdF9pcnFfZGlyID0gcHJvY19ta2RpcigiaXJxIiwgTlVMTCk7CkBAIC0yNDAsNyArMjQzLDcgQEAKIAkvKgogCSAqIENyZWF0ZSBlbnRyaWVzIGZvciBhbGwgZXhpc3RpbmcgSVJRcy4KIAkgKi8KLQlmb3IgKGkgPSAwOyBpIDwgTlJfSVJRUzsgaSsrKQotCQlyZWdpc3Rlcl9pcnFfcHJvYyhpKTsKKwlmb3JfZWFjaF9pcnFfZGVzYyhpcnEsIGRlc2MpCisJCXJlZ2lzdGVyX2lycV9wcm9jKGlycSwgZGVzYyk7CiB9CiAKZGlmZiAtLWdpdCBhL2tlcm5lbC9pcnEvcmVzZW5kLmMgYi9rZXJuZWwvaXJxL3Jlc2VuZC5jCmluZGV4IGE4MDQ2NzkuLjg5YzcxMTcgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9pcnEvcmVzZW5kLmMKKysrIGIva2VybmVsL2lycS9yZXNlbmQuYwpAQCAtMzMsMTAgKzMzLDEwIEBACiAJc3RydWN0IGlycV9kZXNjICpkZXNjOwogCWludCBpcnE7CiAKLQl3aGlsZSAoIWJpdG1hcF9lbXB0eShpcnFzX3Jlc2VuZCwgTlJfSVJRUykpIHsKLQkJaXJxID0gZmluZF9maXJzdF9iaXQoaXJxc19yZXNlbmQsIE5SX0lSUVMpOworCXdoaWxlICghYml0bWFwX2VtcHR5KGlycXNfcmVzZW5kLCBucl9pcnFzKSkgeworCQlpcnEgPSBmaW5kX2ZpcnN0X2JpdChpcnFzX3Jlc2VuZCwgbnJfaXJxcyk7CiAJCWNsZWFyX2JpdChpcnEsIGlycXNfcmVzZW5kKTsKLQkJZGVzYyA9IGlycV9kZXNjICsgaXJxOworCQlkZXNjID0gaXJxX3RvX2Rlc2MoaXJxKTsKIAkJbG9jYWxfaXJxX2Rpc2FibGUoKTsKIAkJZGVzYy0+aGFuZGxlX2lycShpcnEsIGRlc2MpOwogCQlsb2NhbF9pcnFfZW5hYmxlKCk7CmRpZmYgLS1naXQgYS9rZXJuZWwvaXJxL3NwdXJpb3VzLmMgYi9rZXJuZWwvaXJxL3NwdXJpb3VzLmMKaW5kZXggYzY2ZDNmMS4uZGQzNjRjMSAxMDA2NDQKLS0tIGEva2VybmVsL2lycS9zcHVyaW91cy5jCisrKyBiL2tlcm5lbC9pcnEvc3B1cmlvdXMuYwpAQCAtMTIsODMgKzEyLDEyMiBAQAogI2luY2x1ZGUgPGxpbnV4L2thbGxzeW1zLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KKyNpbmNsdWRlIDxsaW51eC90aW1lci5oPgogCiBzdGF0aWMgaW50IGlycWZpeHVwIF9fcmVhZF9tb3N0bHk7CiAKKyNkZWZpbmUgUE9MTF9TUFVSSU9VU19JUlFfSU5URVJWQUwgKEhaLzEwKQorc3RhdGljIHZvaWQgcG9sbF9zcHVyaW91c19pcnFzKHVuc2lnbmVkIGxvbmcgZHVtbXkpOworc3RhdGljIERFRklORV9USU1FUihwb2xsX3NwdXJpb3VzX2lycV90aW1lciwgcG9sbF9zcHVyaW91c19pcnFzLCAwLCAwKTsKKwogLyoKICAqIFJlY292ZXJ5IGhhbmRsZXIgZm9yIG1pc3JvdXRlZCBpbnRlcnJ1cHRzLgogICovCitzdGF0aWMgaW50IHRyeV9vbmVfaXJxKGludCBpcnEsIHN0cnVjdCBpcnFfZGVzYyAqZGVzYykKK3sKKwlzdHJ1Y3QgaXJxYWN0aW9uICphY3Rpb247CisJaW50IG9rID0gMCwgd29yayA9IDA7CisKKwlzcGluX2xvY2soJmRlc2MtPmxvY2spOworCS8qIEFscmVhZHkgcnVubmluZyBvbiBhbm90aGVyIHByb2Nlc3NvciAqLworCWlmIChkZXNjLT5zdGF0dXMgJiBJUlFfSU5QUk9HUkVTUykgeworCQkvKgorCQkgKiBBbHJlYWR5IHJ1bm5pbmc6IElmIGl0IGlzIHNoYXJlZCBnZXQgdGhlIG90aGVyCisJCSAqIENQVSB0byBnbyBsb29raW5nIGZvciBvdXIgbXlzdGVyeSBpbnRlcnJ1cHQgdG9vCisJCSAqLworCQlpZiAoZGVzYy0+YWN0aW9uICYmIChkZXNjLT5hY3Rpb24tPmZsYWdzICYgSVJRRl9TSEFSRUQpKQorCQkJZGVzYy0+c3RhdHVzIHw9IElSUV9QRU5ESU5HOworCQlzcGluX3VubG9jaygmZGVzYy0+bG9jayk7CisJCXJldHVybiBvazsKKwl9CisJLyogSG9ub3VyIHRoZSBub3JtYWwgSVJRIGxvY2tpbmcgKi8KKwlkZXNjLT5zdGF0dXMgfD0gSVJRX0lOUFJPR1JFU1M7CisJYWN0aW9uID0gZGVzYy0+YWN0aW9uOworCXNwaW5fdW5sb2NrKCZkZXNjLT5sb2NrKTsKKworCXdoaWxlIChhY3Rpb24pIHsKKwkJLyogT25seSBzaGFyZWQgSVJRIGhhbmRsZXJzIGFyZSBzYWZlIHRvIGNhbGwgKi8KKwkJaWYgKGFjdGlvbi0+ZmxhZ3MgJiBJUlFGX1NIQVJFRCkgeworCQkJaWYgKGFjdGlvbi0+aGFuZGxlcihpcnEsIGFjdGlvbi0+ZGV2X2lkKSA9PQorCQkJCUlSUV9IQU5ETEVEKQorCQkJCW9rID0gMTsKKwkJfQorCQlhY3Rpb24gPSBhY3Rpb24tPm5leHQ7CisJfQorCWxvY2FsX2lycV9kaXNhYmxlKCk7CisJLyogTm93IGNsZWFuIHVwIHRoZSBmbGFncyAqLworCXNwaW5fbG9jaygmZGVzYy0+bG9jayk7CisJYWN0aW9uID0gZGVzYy0+YWN0aW9uOworCisJLyoKKwkgKiBXaGlsZSB3ZSB3ZXJlIGxvb2tpbmcgZm9yIGEgZml4dXAgc29tZW9uZSBxdWV1ZWQgYSByZWFsCisJICogSVJRIGNsYXNoaW5nIHdpdGggb3VyIHdhbGs6CisJICovCisJd2hpbGUgKChkZXNjLT5zdGF0dXMgJiBJUlFfUEVORElORykgJiYgYWN0aW9uKSB7CisJCS8qCisJCSAqIFBlcmZvcm0gcmVhbCBJUlEgcHJvY2Vzc2luZyBmb3IgdGhlIElSUSB3ZSBkZWZlcnJlZAorCQkgKi8KKwkJd29yayA9IDE7CisJCXNwaW5fdW5sb2NrKCZkZXNjLT5sb2NrKTsKKwkJaGFuZGxlX0lSUV9ldmVudChpcnEsIGFjdGlvbik7CisJCXNwaW5fbG9jaygmZGVzYy0+bG9jayk7CisJCWRlc2MtPnN0YXR1cyAmPSB+SVJRX1BFTkRJTkc7CisJfQorCWRlc2MtPnN0YXR1cyAmPSB+SVJRX0lOUFJPR1JFU1M7CisJLyoKKwkgKiBJZiB3ZSBkaWQgYWN0dWFsIHdvcmsgZm9yIHRoZSByZWFsIElSUSBsaW5lIHdlIG11c3QgbGV0IHRoZQorCSAqIElSUSBjb250cm9sbGVyIGNsZWFuIHVwIHRvbworCSAqLworCWlmICh3b3JrICYmIGRlc2MtPmNoaXAgJiYgZGVzYy0+Y2hpcC0+ZW5kKQorCQlkZXNjLT5jaGlwLT5lbmQoaXJxKTsKKwlzcGluX3VubG9jaygmZGVzYy0+bG9jayk7CisKKwlyZXR1cm4gb2s7Cit9CisKIHN0YXRpYyBpbnQgbWlzcm91dGVkX2lycShpbnQgaXJxKQogewotCWludCBpOwotCWludCBvayA9IDA7Ci0JaW50IHdvcmsgPSAwOwkvKiBEaWQgd2UgZG8gd29yayBmb3IgYSByZWFsIElSUSAqLworCXN0cnVjdCBpcnFfZGVzYyAqZGVzYzsKKwlpbnQgaSwgb2sgPSAwOwogCi0JZm9yIChpID0gMTsgaSA8IE5SX0lSUVM7IGkrKykgewotCQlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MgPSBpcnFfZGVzYyArIGk7Ci0JCXN0cnVjdCBpcnFhY3Rpb24gKmFjdGlvbjsKKwlmb3JfZWFjaF9pcnFfZGVzYyhpLCBkZXNjKSB7CisJCWlmICghaSkKKwkJCSBjb250aW51ZTsKIAogCQlpZiAoaSA9PSBpcnEpCS8qIEFscmVhZHkgdHJpZWQgKi8KIAkJCWNvbnRpbnVlOwogCi0JCXNwaW5fbG9jaygmZGVzYy0+bG9jayk7Ci0JCS8qIEFscmVhZHkgcnVubmluZyBvbiBhbm90aGVyIHByb2Nlc3NvciAqLwotCQlpZiAoZGVzYy0+c3RhdHVzICYgSVJRX0lOUFJPR1JFU1MpIHsKLQkJCS8qCi0JCQkgKiBBbHJlYWR5IHJ1bm5pbmc6IElmIGl0IGlzIHNoYXJlZCBnZXQgdGhlIG90aGVyCi0JCQkgKiBDUFUgdG8gZ28gbG9va2luZyBmb3Igb3VyIG15c3RlcnkgaW50ZXJydXB0IHRvbwotCQkJICovCi0JCQlpZiAoZGVzYy0+YWN0aW9uICYmIChkZXNjLT5hY3Rpb24tPmZsYWdzICYgSVJRRl9TSEFSRUQpKQotCQkJCWRlc2MtPnN0YXR1cyB8PSBJUlFfUEVORElORzsKLQkJCXNwaW5fdW5sb2NrKCZkZXNjLT5sb2NrKTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0JCS8qIEhvbm91ciB0aGUgbm9ybWFsIElSUSBsb2NraW5nICovCi0JCWRlc2MtPnN0YXR1cyB8PSBJUlFfSU5QUk9HUkVTUzsKLQkJYWN0aW9uID0gZGVzYy0+YWN0aW9uOwotCQlzcGluX3VubG9jaygmZGVzYy0+bG9jayk7Ci0KLQkJd2hpbGUgKGFjdGlvbikgewotCQkJLyogT25seSBzaGFyZWQgSVJRIGhhbmRsZXJzIGFyZSBzYWZlIHRvIGNhbGwgKi8KLQkJCWlmIChhY3Rpb24tPmZsYWdzICYgSVJRRl9TSEFSRUQpIHsKLQkJCQlpZiAoYWN0aW9uLT5oYW5kbGVyKGksIGFjdGlvbi0+ZGV2X2lkKSA9PQotCQkJCQkJSVJRX0hBTkRMRUQpCi0JCQkJCW9rID0gMTsKLQkJCX0KLQkJCWFjdGlvbiA9IGFjdGlvbi0+bmV4dDsKLQkJfQotCQlsb2NhbF9pcnFfZGlzYWJsZSgpOwotCQkvKiBOb3cgY2xlYW4gdXAgdGhlIGZsYWdzICovCi0JCXNwaW5fbG9jaygmZGVzYy0+bG9jayk7Ci0JCWFjdGlvbiA9IGRlc2MtPmFjdGlvbjsKLQotCQkvKgotCQkgKiBXaGlsZSB3ZSB3ZXJlIGxvb2tpbmcgZm9yIGEgZml4dXAgc29tZW9uZSBxdWV1ZWQgYSByZWFsCi0JCSAqIElSUSBjbGFzaGluZyB3aXRoIG91ciB3YWxrOgotCQkgKi8KLQkJd2hpbGUgKChkZXNjLT5zdGF0dXMgJiBJUlFfUEVORElORykgJiYgYWN0aW9uKSB7Ci0JCQkvKgotCQkJICogUGVyZm9ybSByZWFsIElSUSBwcm9jZXNzaW5nIGZvciB0aGUgSVJRIHdlIGRlZmVycmVkCi0JCQkgKi8KLQkJCXdvcmsgPSAxOwotCQkJc3Bpbl91bmxvY2soJmRlc2MtPmxvY2spOwotCQkJaGFuZGxlX0lSUV9ldmVudChpLCBhY3Rpb24pOwotCQkJc3Bpbl9sb2NrKCZkZXNjLT5sb2NrKTsKLQkJCWRlc2MtPnN0YXR1cyAmPSB+SVJRX1BFTkRJTkc7Ci0JCX0KLQkJZGVzYy0+c3RhdHVzICY9IH5JUlFfSU5QUk9HUkVTUzsKLQkJLyoKLQkJICogSWYgd2UgZGlkIGFjdHVhbCB3b3JrIGZvciB0aGUgcmVhbCBJUlEgbGluZSB3ZSBtdXN0IGxldCB0aGUKLQkJICogSVJRIGNvbnRyb2xsZXIgY2xlYW4gdXAgdG9vCi0JCSAqLwotCQlpZiAod29yayAmJiBkZXNjLT5jaGlwICYmIGRlc2MtPmNoaXAtPmVuZCkKLQkJCWRlc2MtPmNoaXAtPmVuZChpKTsKLQkJc3Bpbl91bmxvY2soJmRlc2MtPmxvY2spOworCQlpZiAodHJ5X29uZV9pcnEoaSwgZGVzYykpCisJCQlvayA9IDE7CiAJfQogCS8qIFNvIHRoZSBjYWxsZXIgY2FuIGFkanVzdCB0aGUgaXJxIGVycm9yIGNvdW50cyAqLwogCXJldHVybiBvazsKIH0KIAorc3RhdGljIHZvaWQgcG9sbF9zcHVyaW91c19pcnFzKHVuc2lnbmVkIGxvbmcgZHVtbXkpCit7CisJc3RydWN0IGlycV9kZXNjICpkZXNjOworCWludCBpOworCisJZm9yX2VhY2hfaXJxX2Rlc2MoaSwgZGVzYykgeworCQl1bnNpZ25lZCBpbnQgc3RhdHVzOworCisJCWlmICghaSkKKwkJCSBjb250aW51ZTsKKworCQkvKiBSYWN5IGJ1dCBpdCBkb2Vzbid0IG1hdHRlciAqLworCQlzdGF0dXMgPSBkZXNjLT5zdGF0dXM7CisJCWJhcnJpZXIoKTsKKwkJaWYgKCEoc3RhdHVzICYgSVJRX1NQVVJJT1VTX0RJU0FCTEVEKSkKKwkJCWNvbnRpbnVlOworCisJCXRyeV9vbmVfaXJxKGksIGRlc2MpOworCX0KKworCW1vZF90aW1lcigmcG9sbF9zcHVyaW91c19pcnFfdGltZXIsCisJCSAgamlmZmllcyArIFBPTExfU1BVUklPVVNfSVJRX0lOVEVSVkFMKTsKK30KKwogLyoKICAqIElmIDk5LDkwMCBvZiB0aGUgcHJldmlvdXMgMTAwLDAwMCBpbnRlcnJ1cHRzIGhhdmUgbm90IGJlZW4gaGFuZGxlZAogICogdGhlbiBhc3N1bWUgdGhhdCB0aGUgSVJRIGlzIHN0dWNrIGluIHNvbWUgbWFubmVyLiBEcm9wIGEgZGlhZ25vc3RpYwpAQCAtMTM3LDcgKzE3Niw5IEBACiAJfQogfQogCi1zdGF0aWMgaW5saW5lIGludCB0cnlfbWlzcm91dGVkX2lycSh1bnNpZ25lZCBpbnQgaXJxLCBzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MsIGlycXJldHVybl90IGFjdGlvbl9yZXQpCitzdGF0aWMgaW5saW5lIGludAordHJ5X21pc3JvdXRlZF9pcnEodW5zaWduZWQgaW50IGlycSwgc3RydWN0IGlycV9kZXNjICpkZXNjLAorCQkgIGlycXJldHVybl90IGFjdGlvbl9yZXQpCiB7CiAJc3RydWN0IGlycWFjdGlvbiAqYWN0aW9uOwogCkBAIC0yMTIsNiArMjUzLDkgQEAKIAkJZGVzYy0+c3RhdHVzIHw9IElSUV9ESVNBQkxFRCB8IElSUV9TUFVSSU9VU19ESVNBQkxFRDsKIAkJZGVzYy0+ZGVwdGgrKzsKIAkJZGVzYy0+Y2hpcC0+ZGlzYWJsZShpcnEpOworCisJCW1vZF90aW1lcigmcG9sbF9zcHVyaW91c19pcnFfdGltZXIsCisJCQkgIGppZmZpZXMgKyBQT0xMX1NQVVJJT1VTX0lSUV9JTlRFUlZBTCk7CiAJfQogCWRlc2MtPmlycXNfdW5oYW5kbGVkID0gMDsKIH0KQEAgLTI0MSw3ICsyODUsNyBAQAogCiBfX3NldHVwKCJpcnFmaXh1cCIsIGlycWZpeHVwX3NldHVwKTsKIG1vZHVsZV9wYXJhbShpcnFmaXh1cCwgaW50LCAwNjQ0KTsKLU1PRFVMRV9QQVJNX0RFU0MoImlycWZpeHVwIiwgIjA6IE5vIGZpeHVwLCAxOiBpcnFmaXh1cCBtb2RlIDI6IGlycXBvbGwgbW9kZSIpOworTU9EVUxFX1BBUk1fREVTQygiaXJxZml4dXAiLCAiMDogTm8gZml4dXAsIDE6IGlycWZpeHVwIG1vZGUsIDI6IGlycXBvbGwgbW9kZSIpOwogCiBzdGF0aWMgaW50IF9faW5pdCBpcnFwb2xsX3NldHVwKGNoYXIgKnN0cikKIHsKZGlmZiAtLWdpdCBhL2tlcm5lbC9pdGltZXIuYyBiL2tlcm5lbC9pdGltZXIuYwppbmRleCBhYjk4Mjc0Li5kYjdjMzU4IDEwMDY0NAotLS0gYS9rZXJuZWwvaXRpbWVyLmMKKysrIGIva2VybmVsL2l0aW1lci5jCkBAIC01NSwxNyArNTUsMTUgQEAKIAkJc3Bpbl91bmxvY2tfaXJxKCZ0c2stPnNpZ2hhbmQtPnNpZ2xvY2spOwogCQlicmVhazsKIAljYXNlIElUSU1FUl9WSVJUVUFMOgotCQlyZWFkX2xvY2soJnRhc2tsaXN0X2xvY2spOwogCQlzcGluX2xvY2tfaXJxKCZ0c2stPnNpZ2hhbmQtPnNpZ2xvY2spOwogCQljdmFsID0gdHNrLT5zaWduYWwtPml0X3ZpcnRfZXhwaXJlczsKIAkJY2ludGVydmFsID0gdHNrLT5zaWduYWwtPml0X3ZpcnRfaW5jcjsKIAkJaWYgKCFjcHV0aW1lX2VxKGN2YWwsIGNwdXRpbWVfemVybykpIHsKLQkJCXN0cnVjdCB0YXNrX3N0cnVjdCAqdCA9IHRzazsKLQkJCWNwdXRpbWVfdCB1dGltZSA9IHRzay0+c2lnbmFsLT51dGltZTsKLQkJCWRvIHsKLQkJCQl1dGltZSA9IGNwdXRpbWVfYWRkKHV0aW1lLCB0LT51dGltZSk7Ci0JCQkJdCA9IG5leHRfdGhyZWFkKHQpOwotCQkJfSB3aGlsZSAodCAhPSB0c2spOworCQkJc3RydWN0IHRhc2tfY3B1dGltZSBjcHV0aW1lOworCQkJY3B1dGltZV90IHV0aW1lOworCisJCQl0aHJlYWRfZ3JvdXBfY3B1dGltZSh0c2ssICZjcHV0aW1lKTsKKwkJCXV0aW1lID0gY3B1dGltZS51dGltZTsKIAkJCWlmIChjcHV0aW1lX2xlKGN2YWwsIHV0aW1lKSkgeyAvKiBhYm91dCB0byBmaXJlICovCiAJCQkJY3ZhbCA9IGppZmZpZXNfdG9fY3B1dGltZSgxKTsKIAkJCX0gZWxzZSB7CkBAIC03MywyNSArNzEsMTkgQEAKIAkJCX0KIAkJfQogCQlzcGluX3VubG9ja19pcnEoJnRzay0+c2lnaGFuZC0+c2lnbG9jayk7Ci0JCXJlYWRfdW5sb2NrKCZ0YXNrbGlzdF9sb2NrKTsKIAkJY3B1dGltZV90b190aW1ldmFsKGN2YWwsICZ2YWx1ZS0+aXRfdmFsdWUpOwogCQljcHV0aW1lX3RvX3RpbWV2YWwoY2ludGVydmFsLCAmdmFsdWUtPml0X2ludGVydmFsKTsKIAkJYnJlYWs7CiAJY2FzZSBJVElNRVJfUFJPRjoKLQkJcmVhZF9sb2NrKCZ0YXNrbGlzdF9sb2NrKTsKIAkJc3Bpbl9sb2NrX2lycSgmdHNrLT5zaWdoYW5kLT5zaWdsb2NrKTsKIAkJY3ZhbCA9IHRzay0+c2lnbmFsLT5pdF9wcm9mX2V4cGlyZXM7CiAJCWNpbnRlcnZhbCA9IHRzay0+c2lnbmFsLT5pdF9wcm9mX2luY3I7CiAJCWlmICghY3B1dGltZV9lcShjdmFsLCBjcHV0aW1lX3plcm8pKSB7Ci0JCQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQgPSB0c2s7Ci0JCQljcHV0aW1lX3QgcHRpbWUgPSBjcHV0aW1lX2FkZCh0c2stPnNpZ25hbC0+dXRpbWUsCi0JCQkJCQkgICAgICB0c2stPnNpZ25hbC0+c3RpbWUpOwotCQkJZG8gewotCQkJCXB0aW1lID0gY3B1dGltZV9hZGQocHRpbWUsCi0JCQkJCQkgICAgY3B1dGltZV9hZGQodC0+dXRpbWUsCi0JCQkJCQkJCXQtPnN0aW1lKSk7Ci0JCQkJdCA9IG5leHRfdGhyZWFkKHQpOwotCQkJfSB3aGlsZSAodCAhPSB0c2spOworCQkJc3RydWN0IHRhc2tfY3B1dGltZSB0aW1lczsKKwkJCWNwdXRpbWVfdCBwdGltZTsKKworCQkJdGhyZWFkX2dyb3VwX2NwdXRpbWUodHNrLCAmdGltZXMpOworCQkJcHRpbWUgPSBjcHV0aW1lX2FkZCh0aW1lcy51dGltZSwgdGltZXMuc3RpbWUpOwogCQkJaWYgKGNwdXRpbWVfbGUoY3ZhbCwgcHRpbWUpKSB7IC8qIGFib3V0IHRvIGZpcmUgKi8KIAkJCQljdmFsID0gamlmZmllc190b19jcHV0aW1lKDEpOwogCQkJfSBlbHNlIHsKQEAgLTk5LDcgKzkxLDYgQEAKIAkJCX0KIAkJfQogCQlzcGluX3VubG9ja19pcnEoJnRzay0+c2lnaGFuZC0+c2lnbG9jayk7Ci0JCXJlYWRfdW5sb2NrKCZ0YXNrbGlzdF9sb2NrKTsKIAkJY3B1dGltZV90b190aW1ldmFsKGN2YWwsICZ2YWx1ZS0+aXRfdmFsdWUpOwogCQljcHV0aW1lX3RvX3RpbWV2YWwoY2ludGVydmFsLCAmdmFsdWUtPml0X2ludGVydmFsKTsKIAkJYnJlYWs7CkBAIC0xODUsNyArMTc2LDYgQEAKIAljYXNlIElUSU1FUl9WSVJUVUFMOgogCQludmFsID0gdGltZXZhbF90b19jcHV0aW1lKCZ2YWx1ZS0+aXRfdmFsdWUpOwogCQluaW50ZXJ2YWwgPSB0aW1ldmFsX3RvX2NwdXRpbWUoJnZhbHVlLT5pdF9pbnRlcnZhbCk7Ci0JCXJlYWRfbG9jaygmdGFza2xpc3RfbG9jayk7CiAJCXNwaW5fbG9ja19pcnEoJnRzay0+c2lnaGFuZC0+c2lnbG9jayk7CiAJCWN2YWwgPSB0c2stPnNpZ25hbC0+aXRfdmlydF9leHBpcmVzOwogCQljaW50ZXJ2YWwgPSB0c2stPnNpZ25hbC0+aXRfdmlydF9pbmNyOwpAQCAtMjAwLDcgKzE5MCw2IEBACiAJCXRzay0+c2lnbmFsLT5pdF92aXJ0X2V4cGlyZXMgPSBudmFsOwogCQl0c2stPnNpZ25hbC0+aXRfdmlydF9pbmNyID0gbmludGVydmFsOwogCQlzcGluX3VubG9ja19pcnEoJnRzay0+c2lnaGFuZC0+c2lnbG9jayk7Ci0JCXJlYWRfdW5sb2NrKCZ0YXNrbGlzdF9sb2NrKTsKIAkJaWYgKG92YWx1ZSkgewogCQkJY3B1dGltZV90b190aW1ldmFsKGN2YWwsICZvdmFsdWUtPml0X3ZhbHVlKTsKIAkJCWNwdXRpbWVfdG9fdGltZXZhbChjaW50ZXJ2YWwsICZvdmFsdWUtPml0X2ludGVydmFsKTsKQEAgLTIwOSw3ICsxOTgsNiBAQAogCWNhc2UgSVRJTUVSX1BST0Y6CiAJCW52YWwgPSB0aW1ldmFsX3RvX2NwdXRpbWUoJnZhbHVlLT5pdF92YWx1ZSk7CiAJCW5pbnRlcnZhbCA9IHRpbWV2YWxfdG9fY3B1dGltZSgmdmFsdWUtPml0X2ludGVydmFsKTsKLQkJcmVhZF9sb2NrKCZ0YXNrbGlzdF9sb2NrKTsKIAkJc3Bpbl9sb2NrX2lycSgmdHNrLT5zaWdoYW5kLT5zaWdsb2NrKTsKIAkJY3ZhbCA9IHRzay0+c2lnbmFsLT5pdF9wcm9mX2V4cGlyZXM7CiAJCWNpbnRlcnZhbCA9IHRzay0+c2lnbmFsLT5pdF9wcm9mX2luY3I7CkBAIC0yMjQsNyArMjEyLDYgQEAKIAkJdHNrLT5zaWduYWwtPml0X3Byb2ZfZXhwaXJlcyA9IG52YWw7CiAJCXRzay0+c2lnbmFsLT5pdF9wcm9mX2luY3IgPSBuaW50ZXJ2YWw7CiAJCXNwaW5fdW5sb2NrX2lycSgmdHNrLT5zaWdoYW5kLT5zaWdsb2NrKTsKLQkJcmVhZF91bmxvY2soJnRhc2tsaXN0X2xvY2spOwogCQlpZiAob3ZhbHVlKSB7CiAJCQljcHV0aW1lX3RvX3RpbWV2YWwoY3ZhbCwgJm92YWx1ZS0+aXRfdmFsdWUpOwogCQkJY3B1dGltZV90b190aW1ldmFsKGNpbnRlcnZhbCwgJm92YWx1ZS0+aXRfaW50ZXJ2YWwpOwpkaWZmIC0tZ2l0IGEva2VybmVsL2thbGxzeW1zLmMgYi9rZXJuZWwva2FsbHN5bXMuYwppbmRleCAzOGZjMTBhLi41MDcyY2YxIDEwMDY0NAotLS0gYS9rZXJuZWwva2FsbHN5bXMuYworKysgYi9rZXJuZWwva2FsbHN5bXMuYwpAQCAtMjYwLDcgKzI2MCw2IEBACiAJLyogc2VlIGlmIGl0J3MgaW4gYSBtb2R1bGUgKi8KIAlyZXR1cm4gbW9kdWxlX2FkZHJlc3NfbG9va3VwKGFkZHIsIHN5bWJvbHNpemUsIG9mZnNldCwgbW9kbmFtZSwKIAkJCQkgICAgIG5hbWVidWYpOwotCXJldHVybiBOVUxMOwogfQogCiBpbnQgbG9va3VwX3N5bWJvbF9uYW1lKHVuc2lnbmVkIGxvbmcgYWRkciwgY2hhciAqc3ltbmFtZSkKZGlmZiAtLWdpdCBhL2tlcm5lbC9rZXhlYy5jIGIva2VybmVsL2tleGVjLmMKaW5kZXggYWVmMjY1My4uNzc3YWM0NSAxMDA2NDQKLS0tIGEva2VybmVsL2tleGVjLmMKKysrIGIva2VybmVsL2tleGVjLmMKQEAgLTEzNzEsNiArMTM3MSw3IEBACiAJVk1DT1JFSU5GT19TWU1CT0wobm9kZV9vbmxpbmVfbWFwKTsKIAlWTUNPUkVJTkZPX1NZTUJPTChzd2FwcGVyX3BnX2Rpcik7CiAJVk1DT1JFSU5GT19TWU1CT0woX3N0ZXh0KTsKKwlWTUNPUkVJTkZPX1NZTUJPTCh2bWxpc3QpOwogCiAjaWZuZGVmIENPTkZJR19ORUVEX01VTFRJUExFX05PREVTCiAJVk1DT1JFSU5GT19TWU1CT0wobWVtX21hcCk7CkBAIC0xNDA2LDYgKzE0MDcsNyBAQAogCVZNQ09SRUlORk9fT0ZGU0VUKGZyZWVfYXJlYSwgZnJlZV9saXN0KTsKIAlWTUNPUkVJTkZPX09GRlNFVChsaXN0X2hlYWQsIG5leHQpOwogCVZNQ09SRUlORk9fT0ZGU0VUKGxpc3RfaGVhZCwgcHJldik7CisJVk1DT1JFSU5GT19PRkZTRVQodm1fc3RydWN0LCBhZGRyKTsKIAlWTUNPUkVJTkZPX0xFTkdUSCh6b25lLmZyZWVfYXJlYSwgTUFYX09SREVSKTsKIAlWTUNPUkVJTkZPX0xFTkdUSChmcmVlX2FyZWEuZnJlZV9saXN0LCBNSUdSQVRFX1RZUEVTKTsKIAlWTUNPUkVJTkZPX05VTUJFUihOUl9GUkVFX1BBR0VTKTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9rbW9kLmMgYi9rZXJuZWwva21vZC5jCmluZGV4IDI0NTZkMWEuLjNkM2MzZWEgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9rbW9kLmMKKysrIGIva2VybmVsL2ttb2QuYwpAQCAtMTEzLDcgKzExMyw3IEBACiAJcmV0dXJuIHJldDsKIH0KIEVYUE9SVF9TWU1CT0wocmVxdWVzdF9tb2R1bGUpOwotI2VuZGlmIC8qIENPTkZJR19LTU9EICovCisjZW5kaWYgLyogQ09ORklHX01PRFVMRVMgKi8KIAogc3RydWN0IHN1YnByb2Nlc3NfaW5mbyB7CiAJc3RydWN0IHdvcmtfc3RydWN0IHdvcms7CkBAIC0yNjUsNyArMjY1LDcgQEAKIAl9CiB9CiAKLSNpZmRlZiBDT05GSUdfUE0KKyNpZmRlZiBDT05GSUdfUE1fU0xFRVAKIC8qCiAgKiBJZiBzZXQsIGNhbGxfdXNlcm1vZGVoZWxwZXJfZXhlYygpIHdpbGwgZXhpdCBpbW1lZGlhdGVseSByZXR1cm5pbmcgLUVCVVNZCiAgKiAodXNlZCBmb3IgcHJldmVudGluZyB1c2VyIGxhbmQgcHJvY2Vzc2VzIGZyb20gYmVpbmcgY3JlYXRlZCBhZnRlciB0aGUgdXNlcgpAQCAtMjg4LDM5ICsyODgsMzcgQEAKICAqLwogI2RlZmluZSBSVU5OSU5HX0hFTFBFUlNfVElNRU9VVAkoNSAqIEhaKQogCi1zdGF0aWMgaW50IHVzZXJtb2RlaGVscGVyX3BtX2NhbGxiYWNrKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmZiLAotCQkJCQl1bnNpZ25lZCBsb25nIGFjdGlvbiwKLQkJCQkJdm9pZCAqaWdub3JlZCkKKy8qKgorICogdXNlcm1vZGVoZWxwZXJfZGlzYWJsZSAtIHByZXZlbnQgbmV3IGhlbHBlcnMgZnJvbSBiZWluZyBzdGFydGVkCisgKi8KK2ludCB1c2VybW9kZWhlbHBlcl9kaXNhYmxlKHZvaWQpCiB7CiAJbG9uZyByZXR2YWw7CiAKLQlzd2l0Y2ggKGFjdGlvbikgewotCWNhc2UgUE1fSElCRVJOQVRJT05fUFJFUEFSRToKLQljYXNlIFBNX1NVU1BFTkRfUFJFUEFSRToKLQkJdXNlcm1vZGVoZWxwZXJfZGlzYWJsZWQgPSAxOwotCQlzbXBfbWIoKTsKLQkJLyoKLQkJICogRnJvbSBub3cgb24gY2FsbF91c2VybW9kZWhlbHBlcl9leGVjKCkgd29uJ3Qgc3RhcnQgYW55IG5ldwotCQkgKiBoZWxwZXJzLCBzbyBpdCBpcyBzdWZmaWNpZW50IGlmIHJ1bm5pbmdfaGVscGVycyB0dXJucyBvdXQgdG8KLQkJICogYmUgemVybyBhdCBvbmUgcG9pbnQgKGl0IG1heSBiZSBpbmNyZWFzZWQgbGF0ZXIsIGJ1dCB0aGF0Ci0JCSAqIGRvZXNuJ3QgbWF0dGVyKS4KLQkJICovCi0JCXJldHZhbCA9IHdhaXRfZXZlbnRfdGltZW91dChydW5uaW5nX2hlbHBlcnNfd2FpdHEsCisJdXNlcm1vZGVoZWxwZXJfZGlzYWJsZWQgPSAxOworCXNtcF9tYigpOworCS8qCisJICogRnJvbSBub3cgb24gY2FsbF91c2VybW9kZWhlbHBlcl9leGVjKCkgd29uJ3Qgc3RhcnQgYW55IG5ldworCSAqIGhlbHBlcnMsIHNvIGl0IGlzIHN1ZmZpY2llbnQgaWYgcnVubmluZ19oZWxwZXJzIHR1cm5zIG91dCB0bworCSAqIGJlIHplcm8gYXQgb25lIHBvaW50IChpdCBtYXkgYmUgaW5jcmVhc2VkIGxhdGVyLCBidXQgdGhhdAorCSAqIGRvZXNuJ3QgbWF0dGVyKS4KKwkgKi8KKwlyZXR2YWwgPSB3YWl0X2V2ZW50X3RpbWVvdXQocnVubmluZ19oZWxwZXJzX3dhaXRxLAogCQkJCQlhdG9taWNfcmVhZCgmcnVubmluZ19oZWxwZXJzKSA9PSAwLAogCQkJCQlSVU5OSU5HX0hFTFBFUlNfVElNRU9VVCk7Ci0JCWlmIChyZXR2YWwpIHsKLQkJCXJldHVybiBOT1RJRllfT0s7Ci0JCX0gZWxzZSB7Ci0JCQl1c2VybW9kZWhlbHBlcl9kaXNhYmxlZCA9IDA7Ci0JCQlyZXR1cm4gTk9USUZZX0JBRDsKLQkJfQotCWNhc2UgUE1fUE9TVF9ISUJFUk5BVElPTjoKLQljYXNlIFBNX1BPU1RfU1VTUEVORDoKLQkJdXNlcm1vZGVoZWxwZXJfZGlzYWJsZWQgPSAwOwotCQlyZXR1cm4gTk9USUZZX09LOwotCX0KKwlpZiAocmV0dmFsKQorCQlyZXR1cm4gMDsKIAotCXJldHVybiBOT1RJRllfRE9ORTsKKwl1c2VybW9kZWhlbHBlcl9kaXNhYmxlZCA9IDA7CisJcmV0dXJuIC1FQUdBSU47Cit9CisKKy8qKgorICogdXNlcm1vZGVoZWxwZXJfZW5hYmxlIC0gYWxsb3cgbmV3IGhlbHBlcnMgdG8gYmUgc3RhcnRlZCBhZ2FpbgorICovCit2b2lkIHVzZXJtb2RlaGVscGVyX2VuYWJsZSh2b2lkKQoreworCXVzZXJtb2RlaGVscGVyX2Rpc2FibGVkID0gMDsKIH0KIAogc3RhdGljIHZvaWQgaGVscGVyX2xvY2sodm9pZCkKQEAgLTMzNCwxOCArMzMyLDEyIEBACiAJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJnJ1bm5pbmdfaGVscGVycykpCiAJCXdha2VfdXAoJnJ1bm5pbmdfaGVscGVyc193YWl0cSk7CiB9Ci0KLXN0YXRpYyB2b2lkIHJlZ2lzdGVyX3BtX25vdGlmaWVyX2NhbGxiYWNrKHZvaWQpCi17Ci0JcG1fbm90aWZpZXIodXNlcm1vZGVoZWxwZXJfcG1fY2FsbGJhY2ssIDApOwotfQotI2Vsc2UgLyogQ09ORklHX1BNICovCisjZWxzZSAvKiBDT05GSUdfUE1fU0xFRVAgKi8KICNkZWZpbmUgdXNlcm1vZGVoZWxwZXJfZGlzYWJsZWQJMAogCiBzdGF0aWMgaW5saW5lIHZvaWQgaGVscGVyX2xvY2sodm9pZCkge30KIHN0YXRpYyBpbmxpbmUgdm9pZCBoZWxwZXJfdW5sb2NrKHZvaWQpIHt9Ci1zdGF0aWMgaW5saW5lIHZvaWQgcmVnaXN0ZXJfcG1fbm90aWZpZXJfY2FsbGJhY2sodm9pZCkge30KLSNlbmRpZiAvKiBDT05GSUdfUE0gKi8KKyNlbmRpZiAvKiBDT05GSUdfUE1fU0xFRVAgKi8KIAogLyoqCiAgKiBjYWxsX3VzZXJtb2RlaGVscGVyX3NldHVwIC0gcHJlcGFyZSB0byBjYWxsIGEgdXNlcm1vZGUgaGVscGVyCkBAIC01MTUsNSArNTA3LDQgQEAKIHsKIAlraGVscGVyX3dxID0gY3JlYXRlX3NpbmdsZXRocmVhZF93b3JrcXVldWUoImtoZWxwZXIiKTsKIAlCVUdfT04oIWtoZWxwZXJfd3EpOwotCXJlZ2lzdGVyX3BtX25vdGlmaWVyX2NhbGxiYWNrKCk7CiB9CmRpZmYgLS1naXQgYS9rZXJuZWwva3Byb2Jlcy5jIGIva2VybmVsL2twcm9iZXMuYwppbmRleCA3NWJjMmNkLi44YjU3YTI1IDEwMDY0NAotLS0gYS9rZXJuZWwva3Byb2Jlcy5jCisrKyBiL2tlcm5lbC9rcHJvYmVzLmMKQEAgLTQwNCw3ICs0MDQsNyBAQAogCXNwaW5fbG9ja19pcnFzYXZlKGhsaXN0X2xvY2ssICpmbGFncyk7CiB9CiAKLXZvaWQga3JldHByb2JlX3RhYmxlX2xvY2sodW5zaWduZWQgbG9uZyBoYXNoLCB1bnNpZ25lZCBsb25nICpmbGFncykKK3N0YXRpYyB2b2lkIGtyZXRwcm9iZV90YWJsZV9sb2NrKHVuc2lnbmVkIGxvbmcgaGFzaCwgdW5zaWduZWQgbG9uZyAqZmxhZ3MpCiB7CiAJc3BpbmxvY2tfdCAqaGxpc3RfbG9jayA9IGtyZXRwcm9iZV90YWJsZV9sb2NrX3B0cihoYXNoKTsKIAlzcGluX2xvY2tfaXJxc2F2ZShobGlzdF9sb2NrLCAqZmxhZ3MpOwpkaWZmIC0tZ2l0IGEva2VybmVsL2tzeXNmcy5jIGIva2VybmVsL2tzeXNmcy5jCmluZGV4IGU1M2JjMzAuLjA4ZGQ4ZWQgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9rc3lzZnMuYworKysgYi9rZXJuZWwva3N5c2ZzLmMKQEAgLTE0LDYgKzE0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgva2V4ZWMuaD4KKyNpbmNsdWRlIDxsaW51eC9wcm9maWxlLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KIAogI2RlZmluZSBLRVJORUxfQVRUUl9STyhfbmFtZSkgXApAQCAtNTMsNiArNTQsMzcgQEAKIEtFUk5FTF9BVFRSX1JXKHVldmVudF9oZWxwZXIpOwogI2VuZGlmCiAKKyNpZmRlZiBDT05GSUdfUFJPRklMSU5HCitzdGF0aWMgc3NpemVfdCBwcm9maWxpbmdfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaiwKKwkJCQkgIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBwcm9mX29uKTsKK30KK3N0YXRpYyBzc2l6ZV90IHByb2ZpbGluZ19zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaiwKKwkJCQkgICBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsCisJCQkJICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJaW50IHJldDsKKworCWlmIChwcm9mX29uKQorCQlyZXR1cm4gLUVFWElTVDsKKwkvKgorCSAqIFRoaXMgZXZlbnR1YWxseSBjYWxscyBpbnRvIGdldF9vcHRpb24oKSB3aGljaAorCSAqIGhhcyBhIHRvbiBvZiBjYWxsZXJzIGFuZCBpcyBub3QgY29uc3QuICBJdCBpcworCSAqIGVhc2llc3QgdG8gY2FzdCBpdCBhd2F5IGhlcmUuCisJICovCisJcHJvZmlsZV9zZXR1cCgoY2hhciAqKWJ1Zik7CisJcmV0ID0gcHJvZmlsZV9pbml0KCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKwlyZXQgPSBjcmVhdGVfcHJvY19wcm9maWxlKCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKwlyZXR1cm4gY291bnQ7Cit9CitLRVJORUxfQVRUUl9SVyhwcm9maWxpbmcpOworI2VuZGlmCisKICNpZmRlZiBDT05GSUdfS0VYRUMKIHN0YXRpYyBzc2l6ZV90IGtleGVjX2xvYWRlZF9zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLAogCQkJCSBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKQEAgLTEwOSw2ICsxNDEsOSBAQAogCSZ1ZXZlbnRfc2VxbnVtX2F0dHIuYXR0ciwKIAkmdWV2ZW50X2hlbHBlcl9hdHRyLmF0dHIsCiAjZW5kaWYKKyNpZmRlZiBDT05GSUdfUFJPRklMSU5HCisJJnByb2ZpbGluZ19hdHRyLmF0dHIsCisjZW5kaWYKICNpZmRlZiBDT05GSUdfS0VYRUMKIAkma2V4ZWNfbG9hZGVkX2F0dHIuYXR0ciwKIAkma2V4ZWNfY3Jhc2hfbG9hZGVkX2F0dHIuYXR0ciwKZGlmZiAtLWdpdCBhL2tlcm5lbC9rdGhyZWFkLmMgYi9rZXJuZWwva3RocmVhZC5jCmluZGV4IDk2Y2ZmMmYuLjE0ZWM2NGYgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9rdGhyZWFkLmMKKysrIGIva2VybmVsL2t0aHJlYWQuYwpAQCAtMTcxLDEyICsxNzEsMTEgQEAKICAqLwogdm9pZCBrdGhyZWFkX2JpbmQoc3RydWN0IHRhc2tfc3RydWN0ICprLCB1bnNpZ25lZCBpbnQgY3B1KQogewotCWlmIChrLT5zdGF0ZSAhPSBUQVNLX1VOSU5URVJSVVBUSUJMRSkgeworCS8qIE11c3QgaGF2ZSBkb25lIHNjaGVkdWxlKCkgaW4ga3RocmVhZCgpIGJlZm9yZSB3ZSBzZXRfdGFza19jcHUgKi8KKwlpZiAoIXdhaXRfdGFza19pbmFjdGl2ZShrLCBUQVNLX1VOSU5URVJSVVBUSUJMRSkpIHsKIAkJV0FSTl9PTigxKTsKIAkJcmV0dXJuOwogCX0KLQkvKiBNdXN0IGhhdmUgZG9uZSBzY2hlZHVsZSgpIGluIGt0aHJlYWQoKSBiZWZvcmUgd2Ugc2V0X3Rhc2tfY3B1ICovCi0Jd2FpdF90YXNrX2luYWN0aXZlKGssIDApOwogCXNldF90YXNrX2NwdShrLCBjcHUpOwogCWstPmNwdXNfYWxsb3dlZCA9IGNwdW1hc2tfb2ZfY3B1KGNwdSk7CiAJay0+cnQubnJfY3B1c19hbGxvd2VkID0gMTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9tb2R1bGUuYyBiL2tlcm5lbC9tb2R1bGUuYwppbmRleCA5ZGIxMTkxLi4yNWJjOWFjIDEwMDY0NAotLS0gYS9rZXJuZWwvbW9kdWxlLmMKKysrIGIva2VybmVsL21vZHVsZS5jCkBAIC0xMDAsNyArMTAwLDcgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCBhZGRfdGFpbnRfbW9kdWxlKHN0cnVjdCBtb2R1bGUgKm1vZCwgdW5zaWduZWQgZmxhZykKIHsKIAlhZGRfdGFpbnQoZmxhZyk7Ci0JbW9kLT50YWludHMgfD0gZmxhZzsKKwltb2QtPnRhaW50cyB8PSAoMVUgPDwgZmxhZyk7CiB9CiAKIC8qCkBAIC03ODQsNiArNzg0LDcgQEAKIAltdXRleF9sb2NrKCZtb2R1bGVfbXV0ZXgpOwogCS8qIFN0b3JlIHRoZSBuYW1lIG9mIHRoZSBsYXN0IHVubG9hZGVkIG1vZHVsZSBmb3IgZGlhZ25vc3RpYyBwdXJwb3NlcyAqLwogCXN0cmxjcHkobGFzdF91bmxvYWRlZF9tb2R1bGUsIG1vZC0+bmFtZSwgc2l6ZW9mKGxhc3RfdW5sb2FkZWRfbW9kdWxlKSk7CisJdW5yZWdpc3Rlcl9keW5hbWljX2RlYnVnX21vZHVsZShtb2QtPm5hbWUpOwogCWZyZWVfbW9kdWxlKG1vZCk7CiAKICBvdXQ6CkBAIC05MjMsNyArOTI0LDcgQEAKIHN0YXRpYyBpbnQgdHJ5X3RvX2ZvcmNlX2xvYWQoc3RydWN0IG1vZHVsZSAqbW9kLCBjb25zdCBjaGFyICpzeW1uYW1lKQogewogI2lmZGVmIENPTkZJR19NT0RVTEVfRk9SQ0VfTE9BRAotCWlmICghKHRhaW50ZWQgJiBUQUlOVF9GT1JDRURfTU9EVUxFKSkKKwlpZiAoIXRlc3RfdGFpbnQoVEFJTlRfRk9SQ0VEX01PRFVMRSkpCiAJCXByaW50aygiJXM6IG5vIHZlcnNpb24gZm9yIFwiJXNcIiBmb3VuZDoga2VybmVsIHRhaW50ZWQuXG4iLAogCQkgICAgICAgbW9kLT5uYW1lLCBzeW1uYW1lKTsKIAlhZGRfdGFpbnRfbW9kdWxlKG1vZCwgVEFJTlRfRk9SQ0VEX01PRFVMRSk7CkBAIC0xMDMzLDcgKzEwMzQsNyBAQAogCWNvbnN0IHVuc2lnbmVkIGxvbmcgKmNyYzsKIAogCXJldCA9IGZpbmRfc3ltYm9sKG5hbWUsICZvd25lciwgJmNyYywKLQkJCSAgIShtb2QtPnRhaW50cyAmIFRBSU5UX1BST1BSSUVUQVJZX01PRFVMRSksIHRydWUpOworCQkJICAhKG1vZC0+dGFpbnRzICYgKDEgPDwgVEFJTlRfUFJPUFJJRVRBUllfTU9EVUxFKSksIHRydWUpOwogCWlmICghSVNfRVJSX1ZBTFVFKHJldCkpIHsKIAkJLyogdXNlX21vZHVsZSBjYW4gZmFpbCBkdWUgdG8gT09NLAogCQkgICBvciBtb2R1bGUgaW5pdGlhbGl6YXRpb24gb3IgdW5sb2FkaW5nICovCkBAIC0xMTczLDcgKzExNzQsNyBAQAogCQl3aGlsZSAoaS0tID4gMCkKIAkJCXN5c2ZzX3JlbW92ZV9iaW5fZmlsZShub3Rlc19hdHRycy0+ZGlyLAogCQkJCQkgICAgICAmbm90ZXNfYXR0cnMtPmF0dHJzW2ldKTsKLQkJa29iamVjdF9kZWwobm90ZXNfYXR0cnMtPmRpcik7CisJCWtvYmplY3RfcHV0KG5vdGVzX2F0dHJzLT5kaXIpOwogCX0KIAlrZnJlZShub3Rlc19hdHRycyk7CiB9CkBAIC0xNjM0LDcgKzE2MzUsNyBAQAogCQlsaWNlbnNlID0gInVuc3BlY2lmaWVkIjsKIAogCWlmICghbGljZW5zZV9pc19ncGxfY29tcGF0aWJsZShsaWNlbnNlKSkgewotCQlpZiAoISh0YWludGVkICYgVEFJTlRfUFJPUFJJRVRBUllfTU9EVUxFKSkKKwkJaWYgKCF0ZXN0X3RhaW50KFRBSU5UX1BST1BSSUVUQVJZX01PRFVMRSkpCiAJCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogbW9kdWxlIGxpY2Vuc2UgJyVzJyB0YWludHMgIgogCQkJCSJrZXJuZWwuXG4iLCBtb2QtPm5hbWUsIGxpY2Vuc2UpOwogCQlhZGRfdGFpbnRfbW9kdWxlKG1vZCwgVEFJTlRfUFJPUFJJRVRBUllfTU9EVUxFKTsKQEAgLTE3ODMsNiArMTc4NCwzMyBAQAogfQogI2VuZGlmIC8qIENPTkZJR19LQUxMU1lNUyAqLwogCisjaWZkZWYgQ09ORklHX0RZTkFNSUNfUFJJTlRLX0RFQlVHCitzdGF0aWMgdm9pZCBkeW5hbWljX3ByaW50a19zZXR1cChFbGZfU2hkciAqc2VjaGRycywgdW5zaWduZWQgaW50IHZlcmJvc2VpbmRleCkKK3sKKwlzdHJ1Y3QgbW9kX2RlYnVnICpkZWJ1Z19pbmZvOworCXVuc2lnbmVkIGxvbmcgcG9zLCBlbmQ7CisJdW5zaWduZWQgaW50IG51bV92ZXJib3NlOworCisJcG9zID0gc2VjaGRyc1t2ZXJib3NlaW5kZXhdLnNoX2FkZHI7CisJbnVtX3ZlcmJvc2UgPSBzZWNoZHJzW3ZlcmJvc2VpbmRleF0uc2hfc2l6ZSAvCisJCQkJc2l6ZW9mKHN0cnVjdCBtb2RfZGVidWcpOworCWVuZCA9IHBvcyArIChudW1fdmVyYm9zZSAqIHNpemVvZihzdHJ1Y3QgbW9kX2RlYnVnKSk7CisKKwlmb3IgKDsgcG9zIDwgZW5kOyBwb3MgKz0gc2l6ZW9mKHN0cnVjdCBtb2RfZGVidWcpKSB7CisJCWRlYnVnX2luZm8gPSAoc3RydWN0IG1vZF9kZWJ1ZyAqKXBvczsKKwkJcmVnaXN0ZXJfZHluYW1pY19kZWJ1Z19tb2R1bGUoZGVidWdfaW5mby0+bW9kbmFtZSwKKwkJCWRlYnVnX2luZm8tPnR5cGUsIGRlYnVnX2luZm8tPmxvZ2ljYWxfbW9kbmFtZSwKKwkJCWRlYnVnX2luZm8tPmZsYWdfbmFtZXMsIGRlYnVnX2luZm8tPmhhc2gsCisJCQlkZWJ1Z19pbmZvLT5oYXNoMik7CisJfQorfQorI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCBkeW5hbWljX3ByaW50a19zZXR1cChFbGZfU2hkciAqc2VjaGRycywKKwkJCQkJdW5zaWduZWQgaW50IHZlcmJvc2VpbmRleCkKK3sKK30KKyNlbmRpZiAvKiBDT05GSUdfRFlOQU1JQ19QUklOVEtfREVCVUcgKi8KKwogc3RhdGljIHZvaWQgKm1vZHVsZV9hbGxvY191cGRhdGVfYm91bmRzKHVuc2lnbmVkIGxvbmcgc2l6ZSkKIHsKIAl2b2lkICpyZXQgPSBtb2R1bGVfYWxsb2Moc2l6ZSk7CkBAIC0xODA2LDYgKzE4MzQsNyBAQAogCUVsZl9FaGRyICpoZHI7CiAJRWxmX1NoZHIgKnNlY2hkcnM7CiAJY2hhciAqc2Vjc3RyaW5ncywgKmFyZ3MsICptb2RtYWdpYywgKnN0cnRhYiA9IE5VTEw7CisJY2hhciAqc3RhZ2luZzsKIAl1bnNpZ25lZCBpbnQgaTsKIAl1bnNpZ25lZCBpbnQgc3ltaW5kZXggPSAwOwogCXVuc2lnbmVkIGludCBzdHJpbmRleCA9IDA7CkBAIC0xODMxLDYgKzE4NjAsNyBAQAogI2VuZGlmCiAJdW5zaWduZWQgaW50IG1hcmtlcnNpbmRleDsKIAl1bnNpZ25lZCBpbnQgbWFya2Vyc3N0cmluZ3NpbmRleDsKKwl1bnNpZ25lZCBpbnQgdmVyYm9zZWluZGV4OwogCXN0cnVjdCBtb2R1bGUgKm1vZDsKIAlsb25nIGVyciA9IDA7CiAJdm9pZCAqcGVyY3B1ID0gTlVMTCwgKnB0ciA9IE5VTEw7IC8qIFN0b3BzIHNwdXJpb3VzIGdjYyB3YXJuaW5nICovCkBAIC0xOTYwLDYgKzE5OTAsMTQgQEAKIAkJZ290byBmcmVlX2hkcjsKIAl9CiAKKwlzdGFnaW5nID0gZ2V0X21vZGluZm8oc2VjaGRycywgaW5mb2luZGV4LCAic3RhZ2luZyIpOworCWlmIChzdGFnaW5nKSB7CisJCWFkZF90YWludF9tb2R1bGUobW9kLCBUQUlOVF9DUkFQKTsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IG1vZHVsZSBpcyBmcm9tIHRoZSBzdGFnaW5nIGRpcmVjdG9yeSwiCisJCSAgICAgICAiIHRoZSBxdWFsaXR5IGlzIHVua25vd24sIHlvdSBoYXZlIGJlZW4gd2FybmVkLlxuIiwKKwkJICAgICAgIG1vZC0+bmFtZSk7CisJfQorCiAJLyogTm93IGNvcHkgaW4gYXJncyAqLwogCWFyZ3MgPSBzdHJuZHVwX3VzZXIodWFyZ3MsIH4wVUwgPj4gMSk7CiAJaWYgKElTX0VSUihhcmdzKSkgewpAQCAtMjExNyw2ICsyMTU1LDcgQEAKIAltYXJrZXJzaW5kZXggPSBmaW5kX3NlYyhoZHIsIHNlY2hkcnMsIHNlY3N0cmluZ3MsICJfX21hcmtlcnMiKTsKICAJbWFya2Vyc3N0cmluZ3NpbmRleCA9IGZpbmRfc2VjKGhkciwgc2VjaGRycywgc2Vjc3RyaW5ncywKIAkJCQkJIl9fbWFya2Vyc19zdHJpbmdzIik7CisJdmVyYm9zZWluZGV4ID0gZmluZF9zZWMoaGRyLCBzZWNoZHJzLCBzZWNzdHJpbmdzLCAiX192ZXJib3NlIik7CiAKIAkvKiBOb3cgZG8gcmVsb2NhdGlvbnMuICovCiAJZm9yIChpID0gMTsgaSA8IGhkci0+ZV9zaG51bTsgaSsrKSB7CkBAIC0yMTY3LDYgKzIyMDYsNyBAQAogCQltYXJrZXJfdXBkYXRlX3Byb2JlX3JhbmdlKG1vZC0+bWFya2VycywKIAkJCW1vZC0+bWFya2VycyArIG1vZC0+bnVtX21hcmtlcnMpOwogI2VuZGlmCisJZHluYW1pY19wcmludGtfc2V0dXAoc2VjaGRycywgdmVyYm9zZWluZGV4KTsKIAllcnIgPSBtb2R1bGVfZmluYWxpemUoaGRyLCBzZWNoZHJzLCBtb2QpOwogCWlmIChlcnIgPCAwKQogCQlnb3RvIGNsZWFudXA7CkBAIC0yNTUyLDEwICsyNTkyLDEyIEBACiAJICAgIG1vZC0+c3RhdGUgPT0gTU9EVUxFX1NUQVRFX0dPSU5HIHx8CiAJICAgIG1vZC0+c3RhdGUgPT0gTU9EVUxFX1NUQVRFX0NPTUlORykgewogCQlidWZbYngrK10gPSAnKCc7Ci0JCWlmIChtb2QtPnRhaW50cyAmIFRBSU5UX1BST1BSSUVUQVJZX01PRFVMRSkKKwkJaWYgKG1vZC0+dGFpbnRzICYgKDEgPDwgVEFJTlRfUFJPUFJJRVRBUllfTU9EVUxFKSkKIAkJCWJ1ZltieCsrXSA9ICdQJzsKLQkJaWYgKG1vZC0+dGFpbnRzICYgVEFJTlRfRk9SQ0VEX01PRFVMRSkKKwkJaWYgKG1vZC0+dGFpbnRzICYgKDEgPDwgVEFJTlRfRk9SQ0VEX01PRFVMRSkpCiAJCQlidWZbYngrK10gPSAnRic7CisJCWlmIChtb2QtPnRhaW50cyAmICgxIDw8IFRBSU5UX0NSQVApKQorCQkJYnVmW2J4KytdID0gJ0MnOwogCQkvKgogCQkgKiBUQUlOVF9GT1JDRURfUk1NT0Q6IGNvdWxkIGJlIGFkZGVkLgogCQkgKiBUQUlOVF9VTlNBRkVfU01QLCBUQUlOVF9NQUNISU5FX0NIRUNLLCBUQUlOVF9CQURfUEFHRSBkb24ndApkaWZmIC0tZ2l0IGEva2VybmVsL3BhbmljLmMgYi9rZXJuZWwvcGFuaWMuYwppbmRleCAxMmM1YTBhLi5iZGE1NjFlIDEwMDY0NAotLS0gYS9rZXJuZWwvcGFuaWMuYworKysgYi9rZXJuZWwvcGFuaWMuYwpAQCAtMjMsNyArMjMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2thbGxzeW1zLmg+CiAKIGludCBwYW5pY19vbl9vb3BzOwotaW50IHRhaW50ZWQ7CitzdGF0aWMgdW5zaWduZWQgbG9uZyB0YWludGVkX21hc2s7CiBzdGF0aWMgaW50IHBhdXNlX29uX29vcHM7CiBzdGF0aWMgaW50IHBhdXNlX29uX29vcHNfZmxhZzsKIHN0YXRpYyBERUZJTkVfU1BJTkxPQ0socGF1c2Vfb25fb29wc19sb2NrKTsKQEAgLTE0Myw2ICsxNDMsMjcgQEAKIAogRVhQT1JUX1NZTUJPTChwYW5pYyk7CiAKKworc3RydWN0IHRudCB7CisJdTggYml0OworCWNoYXIgdHJ1ZTsKKwljaGFyIGZhbHNlOworfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB0bnQgdG50c1tdID0geworCXsgVEFJTlRfUFJPUFJJRVRBUllfTU9EVUxFLCAnUCcsICdHJyB9LAorCXsgVEFJTlRfRk9SQ0VEX01PRFVMRSwgJ0YnLCAnICcgfSwKKwl7IFRBSU5UX1VOU0FGRV9TTVAsICdTJywgJyAnIH0sCisJeyBUQUlOVF9GT1JDRURfUk1NT0QsICdSJywgJyAnIH0sCisJeyBUQUlOVF9NQUNISU5FX0NIRUNLLCAnTScsICcgJyB9LAorCXsgVEFJTlRfQkFEX1BBR0UsICdCJywgJyAnIH0sCisJeyBUQUlOVF9VU0VSLCAnVScsICcgJyB9LAorCXsgVEFJTlRfRElFLCAnRCcsICcgJyB9LAorCXsgVEFJTlRfT1ZFUlJJRERFTl9BQ1BJX1RBQkxFLCAnQScsICcgJyB9LAorCXsgVEFJTlRfV0FSTiwgJ1cnLCAnICcgfSwKKwl7IFRBSU5UX0NSQVAsICdDJywgJyAnIH0sCit9OworCiAvKioKICAqCXByaW50X3RhaW50ZWQgLSByZXR1cm4gYSBzdHJpbmcgdG8gcmVwcmVzZW50IHRoZSBrZXJuZWwgdGFpbnQgc3RhdGUuCiAgKgpAQCAtMTU1LDM1ICsxNzYsNDUgQEAKICAqICAnVScgLSBVc2Vyc3BhY2UtZGVmaW5lZCBuYXVnaHRpbmVzcy4KICAqICAnQScgLSBBQ1BJIHRhYmxlIG92ZXJyaWRkZW4uCiAgKiAgJ1cnIC0gVGFpbnQgb24gd2FybmluZy4KKyAqICAnQycgLSBtb2R1bGVzIGZyb20gZHJpdmVycy9zdGFnaW5nIGFyZSBsb2FkZWQuCiAgKgogICoJVGhlIHN0cmluZyBpcyBvdmVyd3JpdHRlbiBieSB0aGUgbmV4dCBjYWxsIHRvIHByaW50X3RhaW50KCkuCiAgKi8KLQogY29uc3QgY2hhciAqcHJpbnRfdGFpbnRlZCh2b2lkKQogewotCXN0YXRpYyBjaGFyIGJ1ZlsyMF07Ci0JaWYgKHRhaW50ZWQpIHsKLQkJc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgIlRhaW50ZWQ6ICVjJWMlYyVjJWMlYyVjJWMlYyVjIiwKLQkJCXRhaW50ZWQgJiBUQUlOVF9QUk9QUklFVEFSWV9NT0RVTEUgPyAnUCcgOiAnRycsCi0JCQl0YWludGVkICYgVEFJTlRfRk9SQ0VEX01PRFVMRSA/ICdGJyA6ICcgJywKLQkJCXRhaW50ZWQgJiBUQUlOVF9VTlNBRkVfU01QID8gJ1MnIDogJyAnLAotCQkJdGFpbnRlZCAmIFRBSU5UX0ZPUkNFRF9STU1PRCA/ICdSJyA6ICcgJywKLQkJCXRhaW50ZWQgJiBUQUlOVF9NQUNISU5FX0NIRUNLID8gJ00nIDogJyAnLAotCQkJdGFpbnRlZCAmIFRBSU5UX0JBRF9QQUdFID8gJ0InIDogJyAnLAotCQkJdGFpbnRlZCAmIFRBSU5UX1VTRVIgPyAnVScgOiAnICcsCi0JCQl0YWludGVkICYgVEFJTlRfRElFID8gJ0QnIDogJyAnLAotCQkJdGFpbnRlZCAmIFRBSU5UX09WRVJSSURERU5fQUNQSV9UQUJMRSA/ICdBJyA6ICcgJywKLQkJCXRhaW50ZWQgJiBUQUlOVF9XQVJOID8gJ1cnIDogJyAnKTsKLQl9Ci0JZWxzZQorCXN0YXRpYyBjaGFyIGJ1ZltBUlJBWV9TSVpFKHRudHMpICsgc2l6ZW9mKCJUYWludGVkOiAiKSArIDFdOworCisJaWYgKHRhaW50ZWRfbWFzaykgeworCQljaGFyICpzOworCQlpbnQgaTsKKworCQlzID0gYnVmICsgc3ByaW50ZihidWYsICJUYWludGVkOiAiKTsKKwkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUodG50cyk7IGkrKykgeworCQkJY29uc3Qgc3RydWN0IHRudCAqdCA9ICZ0bnRzW2ldOworCQkJKnMrKyA9IHRlc3RfYml0KHQtPmJpdCwgJnRhaW50ZWRfbWFzaykgPworCQkJCQl0LT50cnVlIDogdC0+ZmFsc2U7CisJCX0KKwkJKnMgPSAwOworCX0gZWxzZQogCQlzbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiTm90IHRhaW50ZWQiKTsKIAlyZXR1cm4oYnVmKTsKIH0KIAoraW50IHRlc3RfdGFpbnQodW5zaWduZWQgZmxhZykKK3sKKwlyZXR1cm4gdGVzdF9iaXQoZmxhZywgJnRhaW50ZWRfbWFzayk7Cit9CitFWFBPUlRfU1lNQk9MKHRlc3RfdGFpbnQpOworCit1bnNpZ25lZCBsb25nIGdldF90YWludCh2b2lkKQoreworCXJldHVybiB0YWludGVkX21hc2s7Cit9CisKIHZvaWQgYWRkX3RhaW50KHVuc2lnbmVkIGZsYWcpCiB7CiAJZGVidWdfbG9ja3MgPSAwOyAvKiBjYW4ndCB0cnVzdCB0aGUgaW50ZWdyaXR5IG9mIHRoZSBrZXJuZWwgYW55bW9yZSAqLwotCXRhaW50ZWQgfD0gZmxhZzsKKwlzZXRfYml0KGZsYWcsICZ0YWludGVkX21hc2spOwogfQogRVhQT1JUX1NZTUJPTChhZGRfdGFpbnQpOwogCmRpZmYgLS1naXQgYS9rZXJuZWwvcG9zaXgtY3B1LXRpbWVycy5jIGIva2VybmVsL3Bvc2l4LWNwdS10aW1lcnMuYwppbmRleCBjNDJhMDNhLi4xNTNkY2IyIDEwMDY0NAotLS0gYS9rZXJuZWwvcG9zaXgtY3B1LXRpbWVycy5jCisrKyBiL2tlcm5lbC9wb3NpeC1jcHUtdGltZXJzLmMKQEAgLTcsNiArNyw5MyBAQAogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+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+Y3B1dGltZV9leHBpcmVzLnZpcnRfZXhwID0gKm5ld3ZhbDsKKwkJCWJyZWFrOworCQl9CiAJfQogfQogCmRpZmYgLS1naXQgYS9rZXJuZWwvcG9zaXgtdGltZXJzLmMgYi9rZXJuZWwvcG9zaXgtdGltZXJzLmMKaW5kZXggNTEzMWU1NC4uYjkzMWQ3YyAxMDA2NDQKLS0tIGEva2VybmVsL3Bvc2l4LXRpbWVycy5jCisrKyBiL2tlcm5lbC9wb3NpeC10aW1lcnMuYwpAQCAtMjIzLDYgKzIyMywxNSBAQAogfQogCiAvKgorICogR2V0IG1vbm90b25pYyB0aW1lIGZvciBwb3NpeCB0aW1lcnMKKyAqLworc3RhdGljIGludCBwb3NpeF9nZXRfbW9ub3RvbmljX3JhdyhjbG9ja2lkX3Qgd2hpY2hfY2xvY2ssIHN0cnVjdCB0aW1lc3BlYyAqdHApCit7CisJZ2V0cmF3bW9ub3RvbmljKHRwKTsKKwlyZXR1cm4gMDsKK30KKworLyoKICAqIEluaXRpYWxpemUgZXZlcnl0aGluZywgd2VsbCwganVzdCBldmVyeXRoaW5nIGluIFBvc2l4IGNsb2Nrcy90aW1lcnMgOykKICAqLwogc3RhdGljIF9faW5pdCBpbnQgaW5pdF9wb3NpeF90aW1lcnModm9pZCkKQEAgLTIzNSw5ICsyNDQsMTUgQEAKIAkJLmNsb2NrX2dldCA9IHBvc2l4X2t0aW1lX2dldF90cywKIAkJLmNsb2NrX3NldCA9IGRvX3Bvc2l4X2Nsb2NrX25vc2V0dGltZSwKIAl9OworCXN0cnVjdCBrX2Nsb2NrIGNsb2NrX21vbm90b25pY19yYXcgPSB7CisJCS5jbG9ja19nZXRyZXMgPSBocnRpbWVyX2dldF9yZXMsCisJCS5jbG9ja19nZXQgPSBwb3NpeF9nZXRfbW9ub3RvbmljX3JhdywKKwkJLmNsb2NrX3NldCA9IGRvX3Bvc2l4X2Nsb2NrX25vc2V0dGltZSwKKwl9OwogCiAJcmVnaXN0ZXJfcG9zaXhfY2xvY2soQ0xPQ0tfUkVBTFRJTUUsICZjbG9ja19yZWFsdGltZSk7CiAJcmVnaXN0ZXJfcG9zaXhfY2xvY2soQ0xPQ0tfTU9OT1RPTklDLCAmY2xvY2tfbW9ub3RvbmljKTsKKwlyZWdpc3Rlcl9wb3NpeF9jbG9jayhDTE9DS19NT05PVE9OSUNfUkFXLCAmY2xvY2tfbW9ub3RvbmljX3Jhdyk7CiAKIAlwb3NpeF90aW1lcnNfY2FjaGUgPSBrbWVtX2NhY2hlX2NyZWF0ZSgicG9zaXhfdGltZXJzX2NhY2hlIiwKIAkJCQkJc2l6ZW9mIChzdHJ1Y3Qga19pdGltZXIpLCAwLCBTTEFCX1BBTklDLApAQCAtMjk4LDYgKzMxMyw3IEBACiAKIGludCBwb3NpeF90aW1lcl9ldmVudChzdHJ1Y3Qga19pdGltZXIgKnRpbXIsIGludCBzaV9wcml2YXRlKQogeworCWludCBzaGFyZWQsIHJldDsKIAkvKgogCSAqIEZJWE1FOiBpZiAtPnNpZ3EgaXMgcXVldWVkIHdlIGNhbiByYWNlIHdpdGgKIAkgKiBkZXF1ZXVlX3NpZ25hbCgpLT5kb19zY2hlZHVsZV9uZXh0X3RpbWVyKCkuCkBAIC0zMTEsMjUgKzMyNywxMCBAQAogCSAqLwogCXRpbXItPnNpZ3EtPmluZm8uc2lfc3lzX3ByaXZhdGUgPSBzaV9wcml2YXRlOwogCi0JdGltci0+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+aXRfbG9jayk7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlkcl9sb2NrLCAqZmxhZ3MpOwogCi0JcmV0dXJuIHRpbXI7CisJcmV0dXJuIE5VTEw7CiB9CiAKIC8qCkBAIC04NjIsOCArODMzLDcgQEAKIAkgKiBUaGlzIGtlZXBzIGFueSB0YXNrcyB3YWl0aW5nIG9uIHRoZSBzcGluIGxvY2sgZnJvbSB0aGlua2luZwogCSAqIHRoZXkgZ290IHNvbWV0aGluZyAoc2VlIHRoZSBsb2NrIGNvZGUgYWJvdmUpLgogCSAqLwotCWlmICh0aW1lci0+aXRfc2lnZXZfbm90aWZ5ID09IChTSUdFVl9TSUdOQUx8U0lHRVZfVEhSRUFEX0lEKSkKLQkJcHV0X3Rhc2tfc3RydWN0KHRpbWVyLT5pdF9wcm9jZXNzKTsKKwlwdXRfdGFza19zdHJ1Y3QodGltZXItPml0X3Byb2Nlc3MpOwogCXRpbWVyLT5pdF9wcm9jZXNzID0gTlVMTDsKIAogCXVubG9ja190aW1lcih0aW1lciwgZmxhZ3MpOwpAQCAtODkwLDggKzg2MCw3IEBACiAJICogVGhpcyBrZWVwcyBhbnkgdGFza3Mgd2FpdGluZyBvbiB0aGUgc3BpbiBsb2NrIGZyb20gdGhpbmtpbmcKIAkgKiB0aGV5IGdvdCBzb21ldGhpbmcgKHNlZSB0aGUgbG9jayBjb2RlIGFib3ZlKS4KIAkgKi8KLQlpZiAodGltZXItPml0X3NpZ2V2X25vdGlmeSA9PSAoU0lHRVZfU0lHTkFMfFNJR0VWX1RIUkVBRF9JRCkpCi0JCXB1dF90YXNrX3N0cnVjdCh0aW1lci0+aXRfcHJvY2Vzcyk7CisJcHV0X3Rhc2tfc3RydWN0KHRpbWVyLT5pdF9wcm9jZXNzKTsKIAl0aW1lci0+aXRfcHJvY2VzcyA9IE5VTEw7CiAKIAl1bmxvY2tfdGltZXIodGltZXIsIGZsYWdzKTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9wb3dlci9kaXNrLmMgYi9rZXJuZWwvcG93ZXIvZGlzay5jCmluZGV4IGJiZDg1YzYuLjMzMWY5ODMgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9wb3dlci9kaXNrLmMKKysrIGIva2VybmVsL3Bvd2VyL2Rpc2suYwpAQCAtMTQsNiArMTQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3JlYm9vdC5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2ttb2QuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvbW91bnQuaD4KQEAgLTUyMCw2ICs1MjEsMTAgQEAKIAlpZiAoZXJyb3IpCiAJCWdvdG8gRXhpdDsKIAorCWVycm9yID0gdXNlcm1vZGVoZWxwZXJfZGlzYWJsZSgpOworCWlmIChlcnJvcikKKwkJZ290byBFeGl0OworCiAJLyogQWxsb2NhdGUgbWVtb3J5IG1hbmFnZW1lbnQgc3RydWN0dXJlcyAqLwogCWVycm9yID0gY3JlYXRlX2Jhc2ljX21lbW9yeV9iaXRtYXBzKCk7CiAJaWYgKGVycm9yKQpAQCAtNTU4LDYgKzU2Myw3IEBACiAJdGhhd19wcm9jZXNzZXMoKTsKICBGaW5pc2g6CiAJZnJlZV9iYXNpY19tZW1vcnlfYml0bWFwcygpOworCXVzZXJtb2RlaGVscGVyX2VuYWJsZSgpOwogIEV4aXQ6CiAJcG1fbm90aWZpZXJfY2FsbF9jaGFpbihQTV9QT1NUX0hJQkVSTkFUSU9OKTsKIAlwbV9yZXN0b3JlX2NvbnNvbGUoKTsKQEAgLTYzNCw2ICs2NDAsMTAgQEAKIAlpZiAoZXJyb3IpCiAJCWdvdG8gRmluaXNoOwogCisJZXJyb3IgPSB1c2VybW9kZWhlbHBlcl9kaXNhYmxlKCk7CisJaWYgKGVycm9yKQorCQlnb3RvIEZpbmlzaDsKKwogCWVycm9yID0gY3JlYXRlX2Jhc2ljX21lbW9yeV9iaXRtYXBzKCk7CiAJaWYgKGVycm9yKQogCQlnb3RvIEZpbmlzaDsKQEAgLTY1Niw2ICs2NjYsNyBAQAogCXRoYXdfcHJvY2Vzc2VzKCk7CiAgRG9uZToKIAlmcmVlX2Jhc2ljX21lbW9yeV9iaXRtYXBzKCk7CisJdXNlcm1vZGVoZWxwZXJfZW5hYmxlKCk7CiAgRmluaXNoOgogCXBtX25vdGlmaWVyX2NhbGxfY2hhaW4oUE1fUE9TVF9SRVNUT1JFKTsKIAlwbV9yZXN0b3JlX2NvbnNvbGUoKTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9wb3dlci9tYWluLmMgYi9rZXJuZWwvcG93ZXIvbWFpbi5jCmluZGV4IDU0MGIxNmIuLjE5MTIyY2YgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9wb3dlci9tYWluLmMKKysrIGIva2VybmVsL3Bvd2VyL21haW4uYwpAQCAtMTQsNiArMTQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9rbW9kLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2NvbnNvbGUuaD4KICNpbmNsdWRlIDxsaW51eC9jcHUuaD4KQEAgLTIzNyw2ICsyMzgsMTAgQEAKIAlpZiAoZXJyb3IpCiAJCWdvdG8gRmluaXNoOwogCisJZXJyb3IgPSB1c2VybW9kZWhlbHBlcl9kaXNhYmxlKCk7CisJaWYgKGVycm9yKQorCQlnb3RvIEZpbmlzaDsKKwogCWlmIChzdXNwZW5kX2ZyZWV6ZV9wcm9jZXNzZXMoKSkgewogCQllcnJvciA9IC1FQUdBSU47CiAJCWdvdG8gVGhhdzsKQEAgLTI1Niw2ICsyNjEsNyBAQAogCiAgVGhhdzoKIAlzdXNwZW5kX3RoYXdfcHJvY2Vzc2VzKCk7CisJdXNlcm1vZGVoZWxwZXJfZW5hYmxlKCk7CiAgRmluaXNoOgogCXBtX25vdGlmaWVyX2NhbGxfY2hhaW4oUE1fUE9TVF9TVVNQRU5EKTsKIAlwbV9yZXN0b3JlX2NvbnNvbGUoKTsKQEAgLTM3Niw2ICszODIsNyBAQAogc3RhdGljIHZvaWQgc3VzcGVuZF9maW5pc2godm9pZCkKIHsKIAlzdXNwZW5kX3RoYXdfcHJvY2Vzc2VzKCk7CisJdXNlcm1vZGVoZWxwZXJfZW5hYmxlKCk7CiAJcG1fbm90aWZpZXJfY2FsbF9jaGFpbihQTV9QT1NUX1NVU1BFTkQpOwogCXBtX3Jlc3RvcmVfY29uc29sZSgpOwogfQpkaWZmIC0tZ2l0IGEva2VybmVsL3Bvd2VyL3Byb2Nlc3MuYyBiL2tlcm5lbC9wb3dlci9wcm9jZXNzLmMKaW5kZXggMjc4OTQ2YS4uY2E2MzQwMSAxMDA2NDQKLS0tIGEva2VybmVsL3Bvd2VyL3Byb2Nlc3MuYworKysgYi9rZXJuZWwvcG93ZXIvcHJvY2Vzcy5jCkBAIC0yOCwxMjEgKzI4LDYgQEAKIAlyZXR1cm4gMTsKIH0KIAotLyoKLSAqIGZyZWV6aW5nIGlzIGNvbXBsZXRlLCBtYXJrIGN1cnJlbnQgcHJvY2VzcyBhcyBmcm96ZW4KLSAqLwotc3RhdGljIGlubGluZSB2b2lkIGZyb3plbl9wcm9jZXNzKHZvaWQpCi17Ci0JaWYgKCF1bmxpa2VseShjdXJyZW50LT5mbGFncyAmIFBGX05PRlJFRVpFKSkgewotCQljdXJyZW50LT5mbGFncyB8PSBQRl9GUk9aRU47Ci0JCXdtYigpOwotCX0KLQljbGVhcl9mcmVlemVfZmxhZyhjdXJyZW50KTsKLX0KLQotLyogUmVmcmlnZXJhdG9yIGlzIHBsYWNlIHdoZXJlIGZyb3plbiBwcm9jZXNzZXMgYXJlIHN0b3JlZCA6LSkuICovCi12b2lkIHJlZnJpZ2VyYXRvcih2b2lkKQotewotCS8qIEhtbSwgc2hvdWxkIHdlIGJlIGFsbG93ZWQgdG8gc3VzcGVuZCB3aGVuIHRoZXJlIGFyZSByZWFsdGltZQotCSAgIHByb2Nlc3NlcyBhcm91bmQ/ICovCi0JbG9uZyBzYXZlOwotCi0JdGFza19sb2NrKGN1cnJlbnQpOwotCWlmIChmcmVlemluZyhjdXJyZW50KSkgewotCQlmcm96ZW5fcHJvY2VzcygpOwotCQl0YXNrX3VubG9jayhjdXJyZW50KTsKLQl9IGVsc2UgewotCQl0YXNrX3VubG9jayhjdXJyZW50KTsKLQkJcmV0dXJuOwotCX0KLQlzYXZlID0gY3VycmVudC0+c3RhdGU7Ci0JcHJfZGVidWcoIiVzIGVudGVyZWQgcmVmcmlnZXJhdG9yXG4iLCBjdXJyZW50LT5jb21tKTsKLQotCXNwaW5fbG9ja19pcnEoJmN1cnJlbnQtPnNpZ2hhbmQtPnNpZ2xvY2spOwotCXJlY2FsY19zaWdwZW5kaW5nKCk7IC8qIFdlIHNlbnQgZmFrZSBzaWduYWwsIGNsZWFuIGl0IHVwICovCi0Jc3Bpbl91bmxvY2tfaXJxKCZjdXJyZW50LT5zaWdoYW5kLT5zaWdsb2NrKTsKLQotCWZvciAoOzspIHsKLQkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19VTklOVEVSUlVQVElCTEUpOwotCQlpZiAoIWZyb3plbihjdXJyZW50KSkKLQkJCWJyZWFrOwotCQlzY2hlZHVsZSgpOwotCX0KLQlwcl9kZWJ1ZygiJXMgbGVmdCByZWZyaWdlcmF0b3JcbiIsIGN1cnJlbnQtPmNvbW0pOwotCV9fc2V0X2N1cnJlbnRfc3RhdGUoc2F2ZSk7Ci19Ci0KLXN0YXRpYyB2b2lkIGZha2Vfc2lnbmFsX3dha2VfdXAoc3RydWN0IHRhc2tfc3RydWN0ICpwKQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmcC0+c2lnaGFuZC0+c2lnbG9jaywgZmxhZ3MpOwotCXNpZ25hbF93YWtlX3VwKHAsIDApOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnAtPnNpZ2hhbmQtPnNpZ2xvY2ssIGZsYWdzKTsKLX0KLQotc3RhdGljIGlubGluZSBib29sIHNob3VsZF9zZW5kX3NpZ25hbChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApCi17Ci0JcmV0dXJuICEocC0+ZmxhZ3MgJiBQRl9GUkVFWkVSX05PU0lHKTsKLX0KLQotLyoqCi0gKglmcmVlemVfdGFzayAtIHNlbmQgYSBmcmVlemUgcmVxdWVzdCB0byBnaXZlbiB0YXNrCi0gKglAcDogdGFzayB0byBzZW5kIHRoZSByZXF1ZXN0IHRvCi0gKglAc2lnX29ubHk6IGlmIHNldCwgdGhlIHJlcXVlc3Qgd2lsbCBvbmx5IGJlIHNlbnQgaWYgdGhlIHRhc2sgaGFzIHRoZQotICoJCVBGX0ZSRUVaRVJfTk9TSUcgZmxhZyB1bnNldAotICoJUmV0dXJuIHZhbHVlOiAnZmFsc2UnLCBpZiBAc2lnX29ubHkgaXMgc2V0IGFuZCB0aGUgdGFzayBoYXMKLSAqCQlQRl9GUkVFWkVSX05PU0lHIHNldCBvciB0aGUgdGFzayBpcyBmcm96ZW4sICd0cnVlJywgb3RoZXJ3aXNlCi0gKgotICoJVGhlIGZyZWV6ZSByZXF1ZXN0IGlzIHNlbnQgYnkgc2V0dGluZyB0aGUgdGFza3MncyBUSUZfRlJFRVpFIGZsYWcgYW5kCi0gKgllaXRoZXIgc2VuZGluZyBhIGZha2Ugc2lnbmFsIHRvIGl0IG9yIHdha2luZyBpdCB1cCwgZGVwZW5kaW5nIG9uIHdoZXRoZXIKLSAqCW9yIG5vdCBpdCBoYXMgUEZfRlJFRVpFUl9OT1NJRyBzZXQuICBJZiBAc2lnX29ubHkgaXMgc2V0IGFuZCB0aGUgdGFzawotICoJaGFzIFBGX0ZSRUVaRVJfTk9TSUcgc2V0IChpZS4gaXQgaXMgYSB0eXBpY2FsIGtlcm5lbCB0aHJlYWQpLCBpdHMKLSAqCVRJRl9GUkVFWkUgZmxhZyB3aWxsIG5vdCBiZSBzZXQuCi0gKi8KLXN0YXRpYyBib29sIGZyZWV6ZV90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgYm9vbCBzaWdfb25seSkKLXsKLQkvKgotCSAqIFdlIGZpcnN0IGNoZWNrIGlmIHRoZSB0YXNrIGlzIGZyZWV6aW5nIGFuZCBuZXh0IGlmIGl0IGhhcyBhbHJlYWR5Ci0JICogYmVlbiBmcm96ZW4gdG8gYXZvaWQgdGhlIHJhY2Ugd2l0aCBmcm96ZW5fcHJvY2VzcygpIHdoaWNoIGZpcnN0IG1hcmtzCi0JICogdGhlIHRhc2sgYXMgZnJvemVuIGFuZCBuZXh0IGNsZWFycyBpdHMgVElGX0ZSRUVaRS4KLQkgKi8KLQlpZiAoIWZyZWV6aW5nKHApKSB7Ci0JCXJtYigpOwotCQlpZiAoZnJvemVuKHApKQotCQkJcmV0dXJuIGZhbHNlOwotCi0JCWlmICghc2lnX29ubHkgfHwgc2hvdWxkX3NlbmRfc2lnbmFsKHApKQotCQkJc2V0X2ZyZWV6ZV9mbGFnKHApOwotCQllbHNlCi0JCQlyZXR1cm4gZmFsc2U7Ci0JfQotCi0JaWYgKHNob3VsZF9zZW5kX3NpZ25hbChwKSkgewotCQlpZiAoIXNpZ25hbF9wZW5kaW5nKHApKQotCQkJZmFrZV9zaWduYWxfd2FrZV91cChwKTsKLQl9IGVsc2UgaWYgKHNpZ19vbmx5KSB7Ci0JCXJldHVybiBmYWxzZTsKLQl9IGVsc2UgewotCQl3YWtlX3VwX3N0YXRlKHAsIFRBU0tfSU5URVJSVVBUSUJMRSk7Ci0JfQotCi0JcmV0dXJuIHRydWU7Ci19Ci0KLXN0YXRpYyB2b2lkIGNhbmNlbF9mcmVlemluZyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCWlmIChmcmVlemluZyhwKSkgewotCQlwcl9kZWJ1ZygiICBjbGVhbiB1cDogJXNcbiIsIHAtPmNvbW0pOwotCQljbGVhcl9mcmVlemVfZmxhZyhwKTsKLQkJc3Bpbl9sb2NrX2lycXNhdmUoJnAtPnNpZ2hhbmQtPnNpZ2xvY2ssIGZsYWdzKTsKLQkJcmVjYWxjX3NpZ3BlbmRpbmdfYW5kX3dha2UocCk7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnAtPnNpZ2hhbmQtPnNpZ2xvY2ssIGZsYWdzKTsKLQl9Ci19Ci0KIHN0YXRpYyBpbnQgdHJ5X3RvX2ZyZWV6ZV90YXNrcyhib29sIHNpZ19vbmx5KQogewogCXN0cnVjdCB0YXNrX3N0cnVjdCAqZywgKnA7CkBAIC0yNTAsNiArMTM1LDkgQEAKIAkJaWYgKG5vc2lnX29ubHkgJiYgc2hvdWxkX3NlbmRfc2lnbmFsKHApKQogCQkJY29udGludWU7CiAKKwkJaWYgKGNncm91cF9mcm96ZW4ocCkpCisJCQljb250aW51ZTsKKwogCQl0aGF3X3Byb2Nlc3MocCk7CiAJfSB3aGlsZV9lYWNoX3RocmVhZChnLCBwKTsKIAlyZWFkX3VubG9jaygmdGFza2xpc3RfbG9jayk7CkBAIC0yNjQsNCArMTUyLDMgQEAKIAlwcmludGsoImRvbmUuXG4iKTsKIH0KIAotRVhQT1JUX1NZTUJPTChyZWZyaWdlcmF0b3IpOwpkaWZmIC0tZ2l0IGEva2VybmVsL3Bvd2VyL3VzZXIuYyBiL2tlcm5lbC9wb3dlci91c2VyLmMKaW5kZXggYTYzMzJhMy4uMDA1YjkzZCAxMDA2NDQKLS0tIGEva2VybmVsL3Bvd2VyL3VzZXIuYworKysgYi9rZXJuZWwvcG93ZXIvdXNlci5jCkBAIC0yMTIsMTMgKzIxMiwyMCBAQAogCWNhc2UgU05BUFNIT1RfRlJFRVpFOgogCQlpZiAoZGF0YS0+ZnJvemVuKQogCQkJYnJlYWs7CisKIAkJcHJpbnRrKCJTeW5jaW5nIGZpbGVzeXN0ZW1zIC4uLiAiKTsKIAkJc3lzX3N5bmMoKTsKIAkJcHJpbnRrKCJkb25lLlxuIik7CiAKLQkJZXJyb3IgPSBmcmVlemVfcHJvY2Vzc2VzKCk7CisJCWVycm9yID0gdXNlcm1vZGVoZWxwZXJfZGlzYWJsZSgpOwogCQlpZiAoZXJyb3IpCisJCQlicmVhazsKKworCQllcnJvciA9IGZyZWV6ZV9wcm9jZXNzZXMoKTsKKwkJaWYgKGVycm9yKSB7CiAJCQl0aGF3X3Byb2Nlc3NlcygpOworCQkJdXNlcm1vZGVoZWxwZXJfZW5hYmxlKCk7CisJCX0KIAkJaWYgKCFlcnJvcikKIAkJCWRhdGEtPmZyb3plbiA9IDE7CiAJCWJyZWFrOwpAQCAtMjI3LDYgKzIzNCw3IEBACiAJCWlmICghZGF0YS0+ZnJvemVuIHx8IGRhdGEtPnJlYWR5KQogCQkJYnJlYWs7CiAJCXRoYXdfcHJvY2Vzc2VzKCk7CisJCXVzZXJtb2RlaGVscGVyX2VuYWJsZSgpOwogCQlkYXRhLT5mcm96ZW4gPSAwOwogCQlicmVhazsKIApkaWZmIC0tZ2l0IGEva2VybmVsL3ByaW50ay5jIGIva2VybmVsL3ByaW50ay5jCmluZGV4IGI1MWIxNTYuLjYzNDFhZjcgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9wcmludGsuYworKysgYi9rZXJuZWwvcHJpbnRrLmMKQEAgLTEzLDcgKzEzLDcgQEAKICAqIEZpeGVkIFNNUCBzeW5jaHJvbml6YXRpb24sIDA4LzA4Lzk5LCBNYW5mcmVkIFNwcmF1bAogICogICAgIG1hbmZyZWRAY29sb3JmdWxsaWZlLmNvbQogICogUmV3cm90ZSBiaXRzIHRvIGdldCByaWQgb2YgY29uc29sZV9sb2NrCi0gKgkwMU1hcjAxIEFuZHJldyBNb3J0b24gPGFuZHJld21AdW93LmVkdS5hdT4KKyAqCTAxTWFyMDEgQW5kcmV3IE1vcnRvbgogICovCiAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KQEAgLTU3Nyw5ICs1NzcsNiBAQAogICogQGZtdDogZm9ybWF0IHN0cmluZwogICoKICAqIFRoaXMgaXMgcHJpbnRrKCkuICBJdCBjYW4gYmUgY2FsbGVkIGZyb20gYW55IGNvbnRleHQuICBXZSB3YW50IGl0IHRvIHdvcmsuCi0gKiBCZSBhd2FyZSBvZiB0aGUgZmFjdCB0aGF0IGlmIG9vcHNfaW5fcHJvZ3Jlc3MgaXMgbm90IHNldCwgd2UgbWlnaHQgdHJ5IHRvCi0gKiB3YWtlIGtsb2dkIHVwIHdoaWNoIGNvdWxkIGRlYWRsb2NrIG9uIHJ1bnF1ZXVlIGxvY2sgaWYgcHJpbnRrKCkgaXMgY2FsbGVkCi0gKiBmcm9tIHNjaGVkdWxlciBjb2RlLgogICoKICAqIFdlIHRyeSB0byBncmFiIHRoZSBjb25zb2xlX3NlbS4gIElmIHdlIHN1Y2NlZWQsIGl0J3MgZWFzeSAtIHdlIGxvZyB0aGUgb3V0cHV0IGFuZAogICogY2FsbCB0aGUgY29uc29sZSBkcml2ZXJzLiAgSWYgd2UgZmFpbCB0byBnZXQgdGhlIHNlbWFwaG9yZSB3ZSBwbGFjZSB0aGUgb3V0cHV0CkBAIC01OTMsNiArNTkwLDggQEAKICAqCiAgKiBTZWUgYWxzbzoKICAqIHByaW50ZigzKQorICoKKyAqIFNlZSB0aGUgdnNucHJpbnRmKCkgZG9jdW1lbnRhdGlvbiBmb3IgZm9ybWF0IHN0cmluZyBleHRlbnNpb25zIG92ZXIgQzk5LgogICovCiAKIGFzbWxpbmthZ2UgaW50IHByaW50ayhjb25zdCBjaGFyICpmbXQsIC4uLikKQEAgLTk4MiwxMCArOTgxLDI1IEBACiAJcmV0dXJuIGNvbnNvbGVfbG9ja2VkOwogfQogCitzdGF0aWMgREVGSU5FX1BFUl9DUFUoaW50LCBwcmludGtfcGVuZGluZyk7CisKK3ZvaWQgcHJpbnRrX3RpY2sodm9pZCkKK3sKKwlpZiAoX19nZXRfY3B1X3ZhcihwcmludGtfcGVuZGluZykpIHsKKwkJX19nZXRfY3B1X3ZhcihwcmludGtfcGVuZGluZykgPSAwOworCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJmxvZ193YWl0KTsKKwl9Cit9CisKK2ludCBwcmludGtfbmVlZHNfY3B1KGludCBjcHUpCit7CisJcmV0dXJuIHBlcl9jcHUocHJpbnRrX3BlbmRpbmcsIGNwdSk7Cit9CisKIHZvaWQgd2FrZV91cF9rbG9nZCh2b2lkKQogewotCWlmICghb29wc19pbl9wcm9ncmVzcyAmJiB3YWl0cXVldWVfYWN0aXZlKCZsb2dfd2FpdCkpCi0JCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmbG9nX3dhaXQpOworCWlmICh3YWl0cXVldWVfYWN0aXZlKCZsb2dfd2FpdCkpCisJCV9fcmF3X2dldF9jcHVfdmFyKHByaW50a19wZW5kaW5nKSA9IDE7CiB9CiAKIC8qKgpAQCAtMTI5MSwyMiArMTMwNSw2IEBACiB9CiBsYXRlX2luaXRjYWxsKGRpc2FibGVfYm9vdF9jb25zb2xlcyk7CiAKLS8qKgotICogdHR5X3dyaXRlX21lc3NhZ2UgLSB3cml0ZSBhIG1lc3NhZ2UgdG8gYSBjZXJ0YWluIHR0eSwgbm90IGp1c3QgdGhlIGNvbnNvbGUuCi0gKiBAdHR5OiB0aGUgZGVzdGluYXRpb24gdHR5X3N0cnVjdAotICogQG1zZzogdGhlIG1lc3NhZ2UgdG8gd3JpdGUKLSAqCi0gKiBUaGlzIGlzIHVzZWQgZm9yIG1lc3NhZ2VzIHRoYXQgbmVlZCB0byBiZSByZWRpcmVjdGVkIHRvIGEgc3BlY2lmaWMgdHR5LgotICogV2UgZG9uJ3QgcHV0IGl0IGludG8gdGhlIHN5c2xvZyBxdWV1ZSByaWdodCBub3cgbWF5YmUgaW4gdGhlIGZ1dHVyZSBpZgotICogcmVhbGx5IG5lZWRlZC4KLSAqLwotdm9pZCB0dHlfd3JpdGVfbWVzc2FnZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBjaGFyICptc2cpCi17Ci0JaWYgKHR0eSAmJiB0dHktPm9wcy0+d3JpdGUpCi0JCXR0eS0+b3BzLT53cml0ZSh0dHksIG1zZywgc3RybGVuKG1zZykpOwotCXJldHVybjsKLX0KLQogI2lmIGRlZmluZWQgQ09ORklHX1BSSU5USwogCiAvKgpkaWZmIC0tZ2l0IGEva2VybmVsL3Byb2ZpbGUuYyBiL2tlcm5lbC9wcm9maWxlLmMKaW5kZXggY2QyNmJlZC4uYTllNDIyZCAxMDA2NDQKLS0tIGEva2VybmVsL3Byb2ZpbGUuYworKysgYi9rZXJuZWwvcHJvZmlsZS5jCkBAIC0yMiw2ICsyMiw4IEBACiAjaW5jbHVkZSA8bGludXgvY3B1Lmg+CiAjaW5jbHVkZSA8bGludXgvaGlnaG1lbS5oPgogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KICNpbmNsdWRlIDxhc20vc2VjdGlvbnMuaD4KICNpbmNsdWRlIDxhc20vaXJxX3JlZ3MuaD4KICNpbmNsdWRlIDxhc20vcHRyYWNlLmg+CkBAIC01MCwxMSArNTIsMTEgQEAKIHN0YXRpYyBERUZJTkVfTVVURVgocHJvZmlsZV9mbGlwX211dGV4KTsKICNlbmRpZiAvKiBDT05GSUdfU01QICovCiAKLXN0YXRpYyBpbnQgX19pbml0IHByb2ZpbGVfc2V0dXAoY2hhciAqc3RyKQoraW50IHByb2ZpbGVfc2V0dXAoY2hhciAqc3RyKQogewotCXN0YXRpYyBjaGFyIF9faW5pdGRhdGEgc2NoZWRzdHJbXSA9ICJzY2hlZHVsZSI7Ci0Jc3RhdGljIGNoYXIgX19pbml0ZGF0YSBzbGVlcHN0cltdID0gInNsZWVwIjsKLQlzdGF0aWMgY2hhciBfX2luaXRkYXRhIGt2bXN0cltdID0gImt2bSI7CisJc3RhdGljIGNoYXIgc2NoZWRzdHJbXSA9ICJzY2hlZHVsZSI7CisJc3RhdGljIGNoYXIgc2xlZXBzdHJbXSA9ICJzbGVlcCI7CisJc3RhdGljIGNoYXIga3Ztc3RyW10gPSAia3ZtIjsKIAlpbnQgcGFyOwogCiAJaWYgKCFzdHJuY21wKHN0ciwgc2xlZXBzdHIsIHN0cmxlbihzbGVlcHN0cikpKSB7CkBAIC0xMDAsMTQgKzEwMiwzMyBAQAogX19zZXR1cCgicHJvZmlsZT0iLCBwcm9maWxlX3NldHVwKTsKIAogCi12b2lkIF9faW5pdCBwcm9maWxlX2luaXQodm9pZCkKK2ludCBwcm9maWxlX2luaXQodm9pZCkKIHsKKwlpbnQgYnVmZmVyX2J5dGVzOwogCWlmICghcHJvZl9vbikKLQkJcmV0dXJuOworCQlyZXR1cm4gMDsKIAogCS8qIG9ubHkgdGV4dCBpcyBwcm9maWxlZCAqLwogCXByb2ZfbGVuID0gKF9ldGV4dCAtIF9zdGV4dCkgPj4gcHJvZl9zaGlmdDsKLQlwcm9mX2J1ZmZlciA9IGFsbG9jX2Jvb3RtZW0ocHJvZl9sZW4qc2l6ZW9mKGF0b21pY190KSk7CisJYnVmZmVyX2J5dGVzID0gcHJvZl9sZW4qc2l6ZW9mKGF0b21pY190KTsKKwlpZiAoIXNsYWJfaXNfYXZhaWxhYmxlKCkpIHsKKwkJcHJvZl9idWZmZXIgPSBhbGxvY19ib290bWVtKGJ1ZmZlcl9ieXRlcyk7CisJCXJldHVybiAwOworCX0KKworCXByb2ZfYnVmZmVyID0ga3phbGxvYyhidWZmZXJfYnl0ZXMsIEdGUF9LRVJORUwpOworCWlmIChwcm9mX2J1ZmZlcikKKwkJcmV0dXJuIDA7CisKKwlwcm9mX2J1ZmZlciA9IGFsbG9jX3BhZ2VzX2V4YWN0KGJ1ZmZlcl9ieXRlcywgR0ZQX0tFUk5FTHxfX0dGUF9aRVJPKTsKKwlpZiAocHJvZl9idWZmZXIpCisJCXJldHVybiAwOworCisJcHJvZl9idWZmZXIgPSB2bWFsbG9jKGJ1ZmZlcl9ieXRlcyk7CisJaWYgKHByb2ZfYnVmZmVyKQorCQlyZXR1cm4gMDsKKworCXJldHVybiAtRU5PTUVNOwogfQogCiAvKiBQcm9maWxlIGV2ZW50IG5vdGlmaWNhdGlvbnMgKi8KQEAgLTUyNyw3ICs1NDgsNyBAQAogewogfQogCi1zdGF0aWMgaW50IF9faW5pdCBjcmVhdGVfaGFzaF90YWJsZXModm9pZCkKK3N0YXRpYyBpbnQgY3JlYXRlX2hhc2hfdGFibGVzKHZvaWQpCiB7CiAJaW50IGNwdTsKIApAQCAtNTc1LDE0ICs1OTYsMTQgQEAKICNkZWZpbmUgY3JlYXRlX2hhc2hfdGFibGVzKCkJCQkoeyAwOyB9KQogI2VuZGlmCiAKLXN0YXRpYyBpbnQgX19pbml0IGNyZWF0ZV9wcm9jX3Byb2ZpbGUodm9pZCkKK2ludCBjcmVhdGVfcHJvY19wcm9maWxlKHZvaWQpCiB7CiAJc3RydWN0IHByb2NfZGlyX2VudHJ5ICplbnRyeTsKIAogCWlmICghcHJvZl9vbikKIAkJcmV0dXJuIDA7CiAJaWYgKGNyZWF0ZV9oYXNoX3RhYmxlcygpKQotCQlyZXR1cm4gLTE7CisJCXJldHVybiAtRU5PTUVNOwogCWVudHJ5ID0gcHJvY19jcmVhdGUoInByb2ZpbGUiLCBTX0lXVVNSIHwgU19JUlVHTywKIAkJCSAgICBOVUxMLCAmcHJvY19wcm9maWxlX29wZXJhdGlvbnMpOwogCWlmICghZW50cnkpCmRpZmYgLS1naXQgYS9rZXJuZWwvcHRyYWNlLmMgYi9rZXJuZWwvcHRyYWNlLmMKaW5kZXggMzU2Njk5YS4uMWU2OGU0YyAxMDA2NDQKLS0tIGEva2VybmVsL3B0cmFjZS5jCisrKyBiL2tlcm5lbC9wdHJhY2UuYwpAQCAtNDUsNyArNDUsNyBAQAogICogVEFTS19UUkFDRUQsIHJlc3VtZSBpdCBub3cuCiAgKiBSZXF1aXJlcyB0aGF0IGlycXMgYmUgZGlzYWJsZWQuCiAgKi8KLXZvaWQgcHRyYWNlX3VudHJhY2Uoc3RydWN0IHRhc2tfc3RydWN0ICpjaGlsZCkKK3N0YXRpYyB2b2lkIHB0cmFjZV91bnRyYWNlKHN0cnVjdCB0YXNrX3N0cnVjdCAqY2hpbGQpCiB7CiAJc3Bpbl9sb2NrKCZjaGlsZC0+c2lnaGFuZC0+c2lnbG9jayk7CiAJaWYgKHRhc2tfaXNfdHJhY2VkKGNoaWxkKSkgewpkaWZmIC0tZ2l0IGEva2VybmVsL3JjdXByZWVtcHQuYyBiL2tlcm5lbC9yY3VwcmVlbXB0LmMKaW5kZXggY2E0YmJiZS4uNTkyMzZlOCAxMDA2NDQKLS0tIGEva2VybmVsL3JjdXByZWVtcHQuYworKysgYi9rZXJuZWwvcmN1cHJlZW1wdC5jCkBAIC01NCw5ICs1NCw5IEBACiAjaW5jbHVkZSA8bGludXgvY3B1Lmg+CiAjaW5jbHVkZSA8bGludXgvcmFuZG9tLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KLSNpbmNsdWRlIDxsaW51eC9ieXRlb3JkZXIvc3dhYmIuaD4KICNpbmNsdWRlIDxsaW51eC9jcHVtYXNrLmg+CiAjaW5jbHVkZSA8bGludXgvcmN1cHJlZW1wdF90cmFjZS5oPgorI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KIAogLyoKICAqIFBSRUVNUFRfUkNVIGRhdGEgc3RydWN0dXJlcy4KZGlmZiAtLWdpdCBhL2tlcm5lbC9yY3V0b3J0dXJlLmMgYi9rZXJuZWwvcmN1dG9ydHVyZS5jCmluZGV4IDkwYjViMTIuLjg1Y2I5MDUgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9yY3V0b3J0dXJlLmMKKysrIGIva2VybmVsL3JjdXRvcnR1cmUuYwpAQCAtNDIsMTAgKzQyLDEwIEBACiAjaW5jbHVkZSA8bGludXgvZnJlZXplci5oPgogI2luY2x1ZGUgPGxpbnV4L2NwdS5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Ci0jaW5jbHVkZSA8bGludXgvYnl0ZW9yZGVyL3N3YWJiLmg+CiAjaW5jbHVkZSA8bGludXgvc3RhdC5oPgogI2luY2x1ZGUgPGxpbnV4L3NyY3UuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgogCiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiBNT0RVTEVfQVVUSE9SKCJQYXVsIEUuIE1jS2VubmV5IDxwYXVsbWNrQHVzLmlibS5jb20+IGFuZCAiCmRpZmYgLS1naXQgYS9rZXJuZWwvcmVzb3VyY2UuYyBiL2tlcm5lbC9yZXNvdXJjZS5jCmluZGV4IDQxNGQ2ZmMuLjQwODlkMTIgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9yZXNvdXJjZS5jCisrKyBiL2tlcm5lbC9yZXNvdXJjZS5jCkBAIC0zOCwxMCArMzgsNiBAQAogCiBzdGF0aWMgREVGSU5FX1JXTE9DSyhyZXNvdXJjZV9sb2NrKTsKIAotI2lmZGVmIENPTkZJR19QUk9DX0ZTCi0KLWVudW0geyBNQVhfSU9SRVNfTEVWRUwgPSA1IH07Ci0KIHN0YXRpYyB2b2lkICpyX25leHQoc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2LCBsb2ZmX3QgKnBvcykKIHsKIAlzdHJ1Y3QgcmVzb3VyY2UgKnAgPSB2OwpAQCAtNTMsNiArNDksMTAgQEAKIAlyZXR1cm4gcC0+c2libGluZzsKIH0KIAorI2lmZGVmIENPTkZJR19QUk9DX0ZTCisKK2VudW0geyBNQVhfSU9SRVNfTEVWRUwgPSA1IH07CisKIHN0YXRpYyB2b2lkICpyX3N0YXJ0KHN0cnVjdCBzZXFfZmlsZSAqbSwgbG9mZl90ICpwb3MpCiAJX19hY3F1aXJlcyhyZXNvdXJjZV9sb2NrKQogewpAQCAtNTQ5LDEzICs1NDksOSBAQAogCX0KIAogCWlmICghcmVzKSB7Ci0JCXByaW50ayhLRVJOX0RFQlVHICIgICAgX19yZXNlcnZlX3JlZ2lvbl93aXRoX3NwbGl0OiAoJXMpIFslbGx4LCAlbGx4XSwgcmVzOiAoJXMpIFslbGx4LCAlbGx4XVxuIiwKLQkJCSBjb25mbGljdC0+bmFtZSwgY29uZmxpY3QtPnN0YXJ0LCBjb25mbGljdC0+ZW5kLAotCQkJIG5hbWUsIHN0YXJ0LCBlbmQpOwotCiAJCS8qIGZhaWxlZCwgc3BsaXQgYW5kIHRyeSBhZ2FpbiAqLwogCi0JCS8qIGNvbmZsaWN0IGNvdmVycmVkIHdob2xlIGFyZWEgKi8KKwkJLyogY29uZmxpY3QgY292ZXJlZCB3aG9sZSBhcmVhICovCiAJCWlmIChjb25mbGljdC0+c3RhcnQgPD0gc3RhcnQgJiYgY29uZmxpY3QtPmVuZCA+PSBlbmQpCiAJCQlyZXR1cm47CiAKQEAgLTYzMCwzMyArNjI2LDM0IEBACiB7CiAJc3RydWN0IHJlc291cmNlICpyZXMgPSBremFsbG9jKHNpemVvZigqcmVzKSwgR0ZQX0tFUk5FTCk7CiAKLQlpZiAocmVzKSB7Ci0JCXJlcy0+bmFtZSA9IG5hbWU7Ci0JCXJlcy0+c3RhcnQgPSBzdGFydDsKLQkJcmVzLT5lbmQgPSBzdGFydCArIG4gLSAxOwotCQlyZXMtPmZsYWdzID0gSU9SRVNPVVJDRV9CVVNZOworCWlmICghcmVzKQorCQlyZXR1cm4gTlVMTDsKIAotCQl3cml0ZV9sb2NrKCZyZXNvdXJjZV9sb2NrKTsKKwlyZXMtPm5hbWUgPSBuYW1lOworCXJlcy0+c3RhcnQgPSBzdGFydDsKKwlyZXMtPmVuZCA9IHN0YXJ0ICsgbiAtIDE7CisJcmVzLT5mbGFncyA9IElPUkVTT1VSQ0VfQlVTWTsKIAotCQlmb3IgKDs7KSB7Ci0JCQlzdHJ1Y3QgcmVzb3VyY2UgKmNvbmZsaWN0OworCXdyaXRlX2xvY2soJnJlc291cmNlX2xvY2spOwogCi0JCQljb25mbGljdCA9IF9fcmVxdWVzdF9yZXNvdXJjZShwYXJlbnQsIHJlcyk7Ci0JCQlpZiAoIWNvbmZsaWN0KQotCQkJCWJyZWFrOwotCQkJaWYgKGNvbmZsaWN0ICE9IHBhcmVudCkgewotCQkJCXBhcmVudCA9IGNvbmZsaWN0OwotCQkJCWlmICghKGNvbmZsaWN0LT5mbGFncyAmIElPUkVTT1VSQ0VfQlVTWSkpCi0JCQkJCWNvbnRpbnVlOwotCQkJfQorCWZvciAoOzspIHsKKwkJc3RydWN0IHJlc291cmNlICpjb25mbGljdDsKIAotCQkJLyogVWhodWgsIHRoYXQgZGlkbid0IHdvcmsgb3V0Li4gKi8KLQkJCWtmcmVlKHJlcyk7Ci0JCQlyZXMgPSBOVUxMOworCQljb25mbGljdCA9IF9fcmVxdWVzdF9yZXNvdXJjZShwYXJlbnQsIHJlcyk7CisJCWlmICghY29uZmxpY3QpCiAJCQlicmVhazsKKwkJaWYgKGNvbmZsaWN0ICE9IHBhcmVudCkgeworCQkJcGFyZW50ID0gY29uZmxpY3Q7CisJCQlpZiAoIShjb25mbGljdC0+ZmxhZ3MgJiBJT1JFU09VUkNFX0JVU1kpKQorCQkJCWNvbnRpbnVlOwogCQl9Ci0JCXdyaXRlX3VubG9jaygmcmVzb3VyY2VfbG9jayk7CisKKwkJLyogVWhodWgsIHRoYXQgZGlkbid0IHdvcmsgb3V0Li4gKi8KKwkJa2ZyZWUocmVzKTsKKwkJcmVzID0gTlVMTDsKKwkJYnJlYWs7CiAJfQorCXdyaXRlX3VubG9jaygmcmVzb3VyY2VfbG9jayk7CiAJcmV0dXJuIHJlczsKIH0KIEVYUE9SVF9TWU1CT0woX19yZXF1ZXN0X3JlZ2lvbik7CkBAIC04MzEsMyArODI4LDQwIEBACiB9CiAKIF9fc2V0dXAoInJlc2VydmU9IiwgcmVzZXJ2ZV9zZXR1cCk7CisKKy8qCisgKiBDaGVjayBpZiB0aGUgcmVxdWVzdGVkIGFkZHIgYW5kIHNpemUgc3BhbnMgbW9yZSB0aGFuIGFueSBzbG90IGluIHRoZQorICogaW9tZW0gcmVzb3VyY2UgdHJlZS4KKyAqLworaW50IGlvbWVtX21hcF9zYW5pdHlfY2hlY2socmVzb3VyY2Vfc2l6ZV90IGFkZHIsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKK3sKKwlzdHJ1Y3QgcmVzb3VyY2UgKnAgPSAmaW9tZW1fcmVzb3VyY2U7CisJaW50IGVyciA9IDA7CisJbG9mZl90IGw7CisKKwlyZWFkX2xvY2soJnJlc291cmNlX2xvY2spOworCWZvciAocCA9IHAtPmNoaWxkOyBwIDsgcCA9IHJfbmV4dChOVUxMLCBwLCAmbCkpIHsKKwkJLyoKKwkJICogV2UgY2FuIHByb2JhYmx5IHNraXAgdGhlIHJlc291cmNlcyB3aXRob3V0CisJCSAqIElPUkVTT1VSQ0VfSU8gYXR0cmlidXRlPworCQkgKi8KKwkJaWYgKHAtPnN0YXJ0ID49IGFkZHIgKyBzaXplKQorCQkJY29udGludWU7CisJCWlmIChwLT5lbmQgPCBhZGRyKQorCQkJY29udGludWU7CisJCWlmIChwLT5zdGFydCA8PSBhZGRyICYmIChwLT5lbmQgPj0gYWRkciArIHNpemUgLSAxKSkKKwkJCWNvbnRpbnVlOworCQlwcmludGsoS0VSTl9XQVJOSU5HICJyZXNvdXJjZSBtYXAgc2FuaXR5IGNoZWNrIGNvbmZsaWN0OiAiCisJCSAgICAgICAiMHglbGx4IDB4JWxseCAweCVsbHggMHglbGx4ICVzXG4iLAorCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylhZGRyLAorCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZykoYWRkciArIHNpemUgLSAxKSwKKwkJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpcC0+c3RhcnQsCisJCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKXAtPmVuZCwKKwkJICAgICAgIHAtPm5hbWUpOworCQllcnIgPSAtMTsKKwkJYnJlYWs7CisJfQorCXJlYWRfdW5sb2NrKCZyZXNvdXJjZV9sb2NrKTsKKworCXJldHVybiBlcnI7Cit9CmRpZmYgLS1naXQgYS9rZXJuZWwvc2NoZWQuYyBiL2tlcm5lbC9zY2hlZC5jCmluZGV4IDZmMjMwNTkuLjA5YThjMTUgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zY2hlZC5jCisrKyBiL2tlcm5lbC9zY2hlZC5jCkBAIC00MDUyLDIzICs0MDUyLDI2IEBACiBFWFBPUlRfUEVSX0NQVV9TWU1CT0woa3N0YXQpOwogCiAvKgotICogUmV0dXJuIHAtPnN1bV9leGVjX3J1bnRpbWUgcGx1cyBhbnkgbW9yZSBucyBvbiB0aGUgc2NoZWRfY2xvY2sKLSAqIHRoYXQgaGF2ZSBub3QgeWV0IGJlZW4gYmFua2VkIGluIGNhc2UgdGhlIHRhc2sgaXMgY3VycmVudGx5IHJ1bm5pbmcuCisgKiBSZXR1cm4gYW55IG5zIG9uIHRoZSBzY2hlZF9jbG9jayB0aGF0IGhhdmUgbm90IHlldCBiZWVuIGJhbmtlZCBpbgorICogQHAgaW4gY2FzZSB0aGF0IHRhc2sgaXMgY3VycmVudGx5IHJ1bm5pbmcuCiAgKi8KLXVuc2lnbmVkIGxvbmcgbG9uZyB0YXNrX3NjaGVkX3J1bnRpbWUoc3RydWN0IHRhc2tfc3RydWN0ICpwKQordW5zaWduZWQgbG9uZyBsb25nIHRhc2tfZGVsdGFfZXhlYyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQl1NjQgbnMsIGRlbHRhX2V4ZWM7CiAJc3RydWN0IHJxICpycTsKKwl1NjQgbnMgPSAwOwogCiAJcnEgPSB0YXNrX3JxX2xvY2socCwgJmZsYWdzKTsKLQlucyA9IHAtPnNlLnN1bV9leGVjX3J1bnRpbWU7CisKIAlpZiAodGFza19jdXJyZW50KHJxLCBwKSkgeworCQl1NjQgZGVsdGFfZXhlYzsKKwogCQl1cGRhdGVfcnFfY2xvY2socnEpOwogCQlkZWx0YV9leGVjID0gcnEtPmNsb2NrIC0gcC0+c2UuZXhlY19zdGFydDsKIAkJaWYgKChzNjQpZGVsdGFfZXhlYyA+IDApCi0JCQlucyArPSBkZWx0YV9leGVjOworCQkJbnMgPSBkZWx0YV9leGVjOwogCX0KKwogCXRhc2tfcnFfdW5sb2NrKHJxLCAmZmxhZ3MpOwogCiAJcmV0dXJuIG5zOwpAQCAtNDA4NSw2ICs0MDg4LDcgQEAKIAljcHV0aW1lNjRfdCB0bXA7CiAKIAlwLT51dGltZSA9IGNwdXRpbWVfYWRkKHAtPnV0aW1lLCBjcHV0aW1lKTsKKwlhY2NvdW50X2dyb3VwX3VzZXJfdGltZShwLCBjcHV0aW1lKTsKIAogCS8qIEFkZCB1c2VyIHRpbWUgdG8gY3B1c3RhdC4gKi8KIAl0bXAgPSBjcHV0aW1lX3RvX2NwdXRpbWU2NChjcHV0aW1lKTsKQEAgLTQxMDksNiArNDExMyw3IEBACiAJdG1wID0gY3B1dGltZV90b19jcHV0aW1lNjQoY3B1dGltZSk7CiAKIAlwLT51dGltZSA9IGNwdXRpbWVfYWRkKHAtPnV0aW1lLCBjcHV0aW1lKTsKKwlhY2NvdW50X2dyb3VwX3VzZXJfdGltZShwLCBjcHV0aW1lKTsKIAlwLT5ndGltZSA9IGNwdXRpbWVfYWRkKHAtPmd0aW1lLCBjcHV0aW1lKTsKIAogCWNwdXN0YXQtPnVzZXIgPSBjcHV0aW1lNjRfYWRkKGNwdXN0YXQtPnVzZXIsIHRtcCk7CkBAIC00MTQ0LDYgKzQxNDksNyBAQAogCX0KIAogCXAtPnN0aW1lID0gY3B1dGltZV9hZGQocC0+c3RpbWUsIGNwdXRpbWUpOworCWFjY291bnRfZ3JvdXBfc3lzdGVtX3RpbWUocCwgY3B1dGltZSk7CiAKIAkvKiBBZGQgc3lzdGVtIHRpbWUgdG8gY3B1c3RhdC4gKi8KIAl0bXAgPSBjcHV0aW1lX3RvX2NwdXRpbWU2NChjcHV0aW1lKTsKQEAgLTQxODUsNiArNDE5MSw3IEBACiAKIAlpZiAocCA9PSBycS0+aWRsZSkgewogCQlwLT5zdGltZSA9IGNwdXRpbWVfYWRkKHAtPnN0aW1lLCBzdGVhbCk7CisJCWFjY291bnRfZ3JvdXBfc3lzdGVtX3RpbWUocCwgc3RlYWwpOwogCQlpZiAoYXRvbWljX3JlYWQoJnJxLT5ucl9pb3dhaXQpID4gMCkKIAkJCWNwdXN0YXQtPmlvd2FpdCA9IGNwdXRpbWU2NF9hZGQoY3B1c3RhdC0+aW93YWl0LCB0bXApOwogCQllbHNlCmRpZmYgLS1naXQgYS9rZXJuZWwvc2NoZWRfY2xvY2suYyBiL2tlcm5lbC9zY2hlZF9jbG9jay5jCmluZGV4IGU4YWIwOTYuLjgxNzg3MjQgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zY2hlZF9jbG9jay5jCisrKyBiL2tlcm5lbC9zY2hlZF9jbG9jay5jCkBAIC0xMTgsMTMgKzExOCwxMyBAQAogCiAJLyoKIAkgKiBzY2QtPmNsb2NrID0gY2xhbXAoc2NkLT50aWNrX2d0b2QgKyBkZWx0YSwKLQkgKiAJCSAgICAgIG1heChzY2QtPnRpY2tfZ3RvZCwgc2NkLT5jbG9jayksCi0JICogCQkgICAgICBzY2QtPnRpY2tfZ3RvZCArIFRJQ0tfTlNFQyk7CisJICoJCSAgICAgIG1heChzY2QtPnRpY2tfZ3RvZCwgc2NkLT5jbG9jayksCisJICoJCSAgICAgIG1heChzY2QtPmNsb2NrLCBzY2QtPnRpY2tfZ3RvZCArIFRJQ0tfTlNFQykpOwogCSAqLwogCiAJY2xvY2sgPSBzY2QtPnRpY2tfZ3RvZCArIGRlbHRhOwogCW1pbl9jbG9jayA9IHdyYXBfbWF4KHNjZC0+dGlja19ndG9kLCBzY2QtPmNsb2NrKTsKLQltYXhfY2xvY2sgPSBzY2QtPnRpY2tfZ3RvZCArIFRJQ0tfTlNFQzsKKwltYXhfY2xvY2sgPSB3cmFwX21heChzY2QtPmNsb2NrLCBzY2QtPnRpY2tfZ3RvZCArIFRJQ0tfTlNFQyk7CiAKIAljbG9jayA9IHdyYXBfbWF4KGNsb2NrLCBtaW5fY2xvY2spOwogCWNsb2NrID0gd3JhcF9taW4oY2xvY2ssIG1heF9jbG9jayk7CmRpZmYgLS1naXQgYS9rZXJuZWwvc2NoZWRfZGVidWcuYyBiL2tlcm5lbC9zY2hlZF9kZWJ1Zy5jCmluZGV4IGJiZTZiMzEuLmFkOTU4YzEgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zY2hlZF9kZWJ1Zy5jCisrKyBiL2tlcm5lbC9zY2hlZF9kZWJ1Zy5jCkBAIC0zMzMsMTIgKzMzMywxMCBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IG51bV90aHJlYWRzID0gMTsKIAotCXJjdV9yZWFkX2xvY2soKTsKIAlpZiAobG9ja190YXNrX3NpZ2hhbmQocCwgJmZsYWdzKSkgewogCQludW1fdGhyZWFkcyA9IGF0b21pY19yZWFkKCZwLT5zaWduYWwtPmNvdW50KTsKIAkJdW5sb2NrX3Rhc2tfc2lnaGFuZChwLCAmZmxhZ3MpOwogCX0KLQlyY3VfcmVhZF91bmxvY2soKTsKIAogCVNFUV9wcmludGYobSwgIiVzICglZCwgI3RocmVhZHM6ICVkKVxuIiwgcC0+Y29tbSwgcC0+cGlkLCBudW1fdGhyZWFkcyk7CiAJU0VRX3ByaW50ZihtLApkaWZmIC0tZ2l0IGEva2VybmVsL3NjaGVkX2ZhaXIuYyBiL2tlcm5lbC9zY2hlZF9mYWlyLmMKaW5kZXggMThmZDE3MS4uZjYwNGRhZSAxMDA2NDQKLS0tIGEva2VybmVsL3NjaGVkX2ZhaXIuYworKysgYi9rZXJuZWwvc2NoZWRfZmFpci5jCkBAIC00NDksNiArNDQ5LDcgQEAKIAkJc3RydWN0IHRhc2tfc3RydWN0ICpjdXJ0YXNrID0gdGFza19vZihjdXJyKTsKIAogCQljcHVhY2N0X2NoYXJnZShjdXJ0YXNrLCBkZWx0YV9leGVjKTsKKwkJYWNjb3VudF9ncm91cF9leGVjX3J1bnRpbWUoY3VydGFzaywgZGVsdGFfZXhlYyk7CiAJfQogfQogCmRpZmYgLS1naXQgYS9rZXJuZWwvc2NoZWRfcnQuYyBiL2tlcm5lbC9zY2hlZF9ydC5jCmluZGV4IGNkZjU3NDAuLmI0NDZkYzggMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zY2hlZF9ydC5jCisrKyBiL2tlcm5lbC9zY2hlZF9ydC5jCkBAIC01MjYsNiArNTI2LDggQEAKIAlzY2hlZHN0YXRfc2V0KGN1cnItPnNlLmV4ZWNfbWF4LCBtYXgoY3Vyci0+c2UuZXhlY19tYXgsIGRlbHRhX2V4ZWMpKTsKIAogCWN1cnItPnNlLnN1bV9leGVjX3J1bnRpbWUgKz0gZGVsdGFfZXhlYzsKKwlhY2NvdW50X2dyb3VwX2V4ZWNfcnVudGltZShjdXJyLCBkZWx0YV9leGVjKTsKKwogCWN1cnItPnNlLmV4ZWNfc3RhcnQgPSBycS0+Y2xvY2s7CiAJY3B1YWNjdF9jaGFyZ2UoY3VyciwgZGVsdGFfZXhlYyk7CiAKQEAgLTE0NTgsNyArMTQ2MCw3IEBACiAJCXAtPnJ0LnRpbWVvdXQrKzsKIAkJbmV4dCA9IERJVl9ST1VORF9VUChtaW4oc29mdCwgaGFyZCksIFVTRUNfUEVSX1NFQy9IWik7CiAJCWlmIChwLT5ydC50aW1lb3V0ID4gbmV4dCkKLQkJCXAtPml0X3NjaGVkX2V4cGlyZXMgPSBwLT5zZS5zdW1fZXhlY19ydW50aW1lOworCQkJcC0+Y3B1dGltZV9leHBpcmVzLnNjaGVkX2V4cCA9IHAtPnNlLnN1bV9leGVjX3J1bnRpbWU7CiAJfQogfQogCmRpZmYgLS1naXQgYS9rZXJuZWwvc2NoZWRfc3RhdHMuaCBiL2tlcm5lbC9zY2hlZF9zdGF0cy5oCmluZGV4IDgzODVkNDMuLmI4YzE1NjkgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zY2hlZF9zdGF0cy5oCisrKyBiL2tlcm5lbC9zY2hlZF9zdGF0cy5oCkBAIC0yNzAsMyArMjcwLDg5IEBACiAjZGVmaW5lIHNjaGVkX2luZm9fc3dpdGNoKHQsIG5leHQpCQlkbyB7IH0gd2hpbGUgKDApCiAjZW5kaWYgLyogQ09ORklHX1NDSEVEU1RBVFMgfHwgQ09ORklHX1RBU0tfREVMQVlfQUNDVCAqLwogCisvKgorICogVGhlIGZvbGxvd2luZyBhcmUgZnVuY3Rpb25zIHRoYXQgc3VwcG9ydCBzY2hlZHVsZXItaW50ZXJuYWwgdGltZSBhY2NvdW50aW5nLgorICogVGhlc2UgZnVuY3Rpb25zIGFyZSBnZW5lcmFsbHkgY2FsbGVkIGF0IHRoZSB0aW1lciB0aWNrLiAgTm9uZSBvZiB0aGlzIGRlcGVuZHMKKyAqIG9uIENPTkZJR19TQ0hFRFNUQVRTLgorICovCisKKy8qKgorICogYWNjb3VudF9ncm91cF91c2VyX3RpbWUgLSBNYWludGFpbiB1dGltZSBmb3IgYSB0aHJlYWQgZ3JvdXAuCisgKgorICogQHRzazoJUG9pbnRlciB0byB0YXNrIHN0cnVjdHVyZS4KKyAqIEBjcHV0aW1lOglUaW1lIHZhbHVlIGJ5IHdoaWNoIHRvIGluY3JlbWVudCB0aGUgdXRpbWUgZmllbGQgb2YgdGhlCisgKgkJdGhyZWFkX2dyb3VwX2NwdXRpbWUgc3RydWN0dXJlLgorICoKKyAqIElmIHRocmVhZCBncm91cCB0aW1lIGlzIGJlaW5nIG1haW50YWluZWQsIGdldCB0aGUgc3RydWN0dXJlIGZvciB0aGUKKyAqIHJ1bm5pbmcgQ1BVIGFuZCB1cGRhdGUgdGhlIHV0aW1lIGZpZWxkIHRoZXJlLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgYWNjb3VudF9ncm91cF91c2VyX3RpbWUoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssCisJCQkJCSAgIGNwdXRpbWVfdCBjcHV0aW1lKQoreworCXN0cnVjdCBzaWduYWxfc3RydWN0ICpzaWc7CisKKwlzaWcgPSB0c2stPnNpZ25hbDsKKwlpZiAodW5saWtlbHkoIXNpZykpCisJCXJldHVybjsKKwlpZiAoc2lnLT5jcHV0aW1lLnRvdGFscykgeworCQlzdHJ1Y3QgdGFza19jcHV0aW1lICp0aW1lczsKKworCQl0aW1lcyA9IHBlcl9jcHVfcHRyKHNpZy0+Y3B1dGltZS50b3RhbHMsIGdldF9jcHUoKSk7CisJCXRpbWVzLT51dGltZSA9IGNwdXRpbWVfYWRkKHRpbWVzLT51dGltZSwgY3B1dGltZSk7CisJCXB1dF9jcHVfbm9fcmVzY2hlZCgpOworCX0KK30KKworLyoqCisgKiBhY2NvdW50X2dyb3VwX3N5c3RlbV90aW1lIC0gTWFpbnRhaW4gc3RpbWUgZm9yIGEgdGhyZWFkIGdyb3VwLgorICoKKyAqIEB0c2s6CVBvaW50ZXIgdG8gdGFzayBzdHJ1Y3R1cmUuCisgKiBAY3B1dGltZToJVGltZSB2YWx1ZSBieSB3aGljaCB0byBpbmNyZW1lbnQgdGhlIHN0aW1lIGZpZWxkIG9mIHRoZQorICoJCXRocmVhZF9ncm91cF9jcHV0aW1lIHN0cnVjdHVyZS4KKyAqCisgKiBJZiB0aHJlYWQgZ3JvdXAgdGltZSBpcyBiZWluZyBtYWludGFpbmVkLCBnZXQgdGhlIHN0cnVjdHVyZSBmb3IgdGhlCisgKiBydW5uaW5nIENQVSBhbmQgdXBkYXRlIHRoZSBzdGltZSBmaWVsZCB0aGVyZS4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIGFjY291bnRfZ3JvdXBfc3lzdGVtX3RpbWUoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssCisJCQkJCSAgICAgY3B1dGltZV90IGNwdXRpbWUpCit7CisJc3RydWN0IHNpZ25hbF9zdHJ1Y3QgKnNpZzsKKworCXNpZyA9IHRzay0+c2lnbmFsOworCWlmICh1bmxpa2VseSghc2lnKSkKKwkJcmV0dXJuOworCWlmIChzaWctPmNwdXRpbWUudG90YWxzKSB7CisJCXN0cnVjdCB0YXNrX2NwdXRpbWUgKnRpbWVzOworCisJCXRpbWVzID0gcGVyX2NwdV9wdHIoc2lnLT5jcHV0aW1lLnRvdGFscywgZ2V0X2NwdSgpKTsKKwkJdGltZXMtPnN0aW1lID0gY3B1dGltZV9hZGQodGltZXMtPnN0aW1lLCBjcHV0aW1lKTsKKwkJcHV0X2NwdV9ub19yZXNjaGVkKCk7CisJfQorfQorCisvKioKKyAqIGFjY291bnRfZ3JvdXBfZXhlY19ydW50aW1lIC0gTWFpbnRhaW4gZXhlYyBydW50aW1lIGZvciBhIHRocmVhZCBncm91cC4KKyAqCisgKiBAdHNrOglQb2ludGVyIHRvIHRhc2sgc3RydWN0dXJlLgorICogQG5zOgkJVGltZSB2YWx1ZSBieSB3aGljaCB0byBpbmNyZW1lbnQgdGhlIHN1bV9leGVjX3J1bnRpbWUgZmllbGQKKyAqCQlvZiB0aGUgdGhyZWFkX2dyb3VwX2NwdXRpbWUgc3RydWN0dXJlLgorICoKKyAqIElmIHRocmVhZCBncm91cCB0aW1lIGlzIGJlaW5nIG1haW50YWluZWQsIGdldCB0aGUgc3RydWN0dXJlIGZvciB0aGUKKyAqIHJ1bm5pbmcgQ1BVIGFuZCB1cGRhdGUgdGhlIHN1bV9leGVjX3J1bnRpbWUgZmllbGQgdGhlcmUuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBhY2NvdW50X2dyb3VwX2V4ZWNfcnVudGltZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywKKwkJCQkJICAgICAgdW5zaWduZWQgbG9uZyBsb25nIG5zKQoreworCXN0cnVjdCBzaWduYWxfc3RydWN0ICpzaWc7CisKKwlzaWcgPSB0c2stPnNpZ25hbDsKKwlpZiAodW5saWtlbHkoIXNpZykpCisJCXJldHVybjsKKwlpZiAoc2lnLT5jcHV0aW1lLnRvdGFscykgeworCQlzdHJ1Y3QgdGFza19jcHV0aW1lICp0aW1lczsKKworCQl0aW1lcyA9IHBlcl9jcHVfcHRyKHNpZy0+Y3B1dGltZS50b3RhbHMsIGdldF9jcHUoKSk7CisJCXRpbWVzLT5zdW1fZXhlY19ydW50aW1lICs9IG5zOworCQlwdXRfY3B1X25vX3Jlc2NoZWQoKTsKKwl9Cit9CmRpZmYgLS1naXQgYS9rZXJuZWwvc2lnbmFsLmMgYi9rZXJuZWwvc2lnbmFsLmMKaW5kZXggZTY2MWIwMS4uNmVlYTU4MiAxMDA2NDQKLS0tIGEva2VybmVsL3NpZ25hbC5jCisrKyBiL2tlcm5lbC9zaWduYWwuYwpAQCAtMTMzOCw2ICsxMzM4LDcgQEAKIAlzdHJ1Y3Qgc2lnaW5mbyBpbmZvOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJc3RydWN0IHNpZ2hhbmRfc3RydWN0ICpwc2lnOworCXN0cnVjdCB0YXNrX2NwdXRpbWUgY3B1dGltZTsKIAlpbnQgcmV0ID0gc2lnOwogCiAJQlVHX09OKHNpZyA9PSAtMSk7CkBAIC0xMzY4LDEwICsxMzY5LDkgQEAKIAogCWluZm8uc2lfdWlkID0gdHNrLT51aWQ7CiAKLQlpbmZvLnNpX3V0aW1lID0gY3B1dGltZV90b19jbG9ja190KGNwdXRpbWVfYWRkKHRzay0+dXRpbWUsCi0JCQkJCQkgICAgICAgdHNrLT5zaWduYWwtPnV0aW1lKSk7Ci0JaW5mby5zaV9zdGltZSA9IGNwdXRpbWVfdG9fY2xvY2tfdChjcHV0aW1lX2FkZCh0c2stPnN0aW1lLAotCQkJCQkJICAgICAgIHRzay0+c2lnbmFsLT5zdGltZSkpOworCXRocmVhZF9ncm91cF9jcHV0aW1lKHRzaywgJmNwdXRpbWUpOworCWluZm8uc2lfdXRpbWUgPSBjcHV0aW1lX3RvX2ppZmZpZXMoY3B1dGltZS51dGltZSk7CisJaW5mby5zaV9zdGltZSA9IGNwdXRpbWVfdG9famlmZmllcyhjcHV0aW1lLnN0aW1lKTsKIAogCWluZm8uc2lfc3RhdHVzID0gdHNrLT5leGl0X2NvZGUgJiAweDdmOwogCWlmICh0c2stPmV4aXRfY29kZSAmIDB4ODApCmRpZmYgLS1naXQgYS9rZXJuZWwvc29mdGlycS5jIGIva2VybmVsL3NvZnRpcnEuYwppbmRleCBjNTA2ZjI2Li43MTEwZGFlIDEwMDY0NAotLS0gYS9rZXJuZWwvc29mdGlycS5jCisrKyBiL2tlcm5lbC9zb2Z0aXJxLmMKQEAgLTYsNiArNiw4IEBACiAgKglEaXN0cmlidXRlIHVuZGVyIEdQTHYyLgogICoKICAqCVJld3JpdHRlbi4gT2xkIG9uZSB3YXMgZ29vZCBpbiAyLjIsIGJ1dCBpbiAyLjMgaXQgd2FzIGltbW9yYWwuIC0tQU5LICg5OTA5MDMpCisgKgorICoJUmVtb3RlIHNvZnRpcnEgaW5mcmFzdHJ1Y3R1cmUgaXMgYnkgSmVucyBBeGJvZS4KICAqLwogCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CkBAIC00Niw3ICs0OCw3IEBACiBFWFBPUlRfU1lNQk9MKGlycV9zdGF0KTsKICNlbmRpZgogCi1zdGF0aWMgc3RydWN0IHNvZnRpcnFfYWN0aW9uIHNvZnRpcnFfdmVjWzMyXSBfX2NhY2hlbGluZV9hbGlnbmVkX2luX3NtcDsKK3N0YXRpYyBzdHJ1Y3Qgc29mdGlycV9hY3Rpb24gc29mdGlycV92ZWNbTlJfU09GVElSUVNdIF9fY2FjaGVsaW5lX2FsaWduZWRfaW5fc21wOwogCiBzdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IHRhc2tfc3RydWN0ICosIGtzb2Z0aXJxZCk7CiAKQEAgLTIwNSw3ICsyMDcsMTggQEAKIAogCWRvIHsKIAkJaWYgKHBlbmRpbmcgJiAxKSB7CisJCQlpbnQgcHJldl9jb3VudCA9IHByZWVtcHRfY291bnQoKTsKKwogCQkJaC0+YWN0aW9uKGgpOworCisJCQlpZiAodW5saWtlbHkocHJldl9jb3VudCAhPSBwcmVlbXB0X2NvdW50KCkpKSB7CisJCQkJcHJpbnRrKEtFUk5fRVJSICJodWgsIGVudGVyZWQgc29mdGlycSAldGQgJXAiCisJCQkJICAgICAgICJ3aXRoIHByZWVtcHRfY291bnQgJTA4eCwiCisJCQkJICAgICAgICIgZXhpdGVkIHdpdGggJTA4eD9cbiIsIGggLSBzb2Z0aXJxX3ZlYywKKwkJCQkgICAgICAgaC0+YWN0aW9uLCBwcmV2X2NvdW50LCBwcmVlbXB0X2NvdW50KCkpOworCQkJCXByZWVtcHRfY291bnQoKSA9IHByZXZfY291bnQ7CisJCQl9CisKIAkJCXJjdV9iaF9xc2N0cl9pbmMoY3B1KTsKIAkJfQogCQloKys7CkBAIC0yNTQsMTYgKzI2NywxMiBAQAogICovCiB2b2lkIGlycV9lbnRlcih2b2lkKQogewotI2lmZGVmIENPTkZJR19OT19IWgogCWludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CisKIAlpZiAoaWRsZV9jcHUoY3B1KSAmJiAhaW5faW50ZXJydXB0KCkpCi0JCXRpY2tfbm9oel9zdG9wX2lkbGUoY3B1KTsKLSNlbmRpZgorCQl0aWNrX2NoZWNrX2lkbGUoY3B1KTsKKwogCV9faXJxX2VudGVyKCk7Ci0jaWZkZWYgQ09ORklHX05PX0haCi0JaWYgKGlkbGVfY3B1KGNwdSkpCi0JCXRpY2tfbm9oel91cGRhdGVfamlmZmllcygpOwotI2VuZGlmCiB9CiAKICNpZmRlZiBfX0FSQ0hfSVJRX0VYSVRfSVJRU19ESVNBQkxFRApAQCAtNDYzLDE3ICs0NzIsMTQ0IEBACiAKIEVYUE9SVF9TWU1CT0wodGFza2xldF9raWxsKTsKIAorREVGSU5FX1BFUl9DUFUoc3RydWN0IGxpc3RfaGVhZCBbTlJfU09GVElSUVNdLCBzb2Z0aXJxX3dvcmtfbGlzdCk7CitFWFBPUlRfUEVSX0NQVV9TWU1CT0woc29mdGlycV93b3JrX2xpc3QpOworCitzdGF0aWMgdm9pZCBfX2xvY2FsX3RyaWdnZXIoc3RydWN0IGNhbGxfc2luZ2xlX2RhdGEgKmNwLCBpbnQgc29mdGlycSkKK3sKKwlzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkID0gJl9fZ2V0X2NwdV92YXIoc29mdGlycV93b3JrX2xpc3Rbc29mdGlycV0pOworCisJbGlzdF9hZGRfdGFpbCgmY3AtPmxpc3QsIGhlYWQpOworCisJLyogVHJpZ2dlciB0aGUgc29mdGlycSBvbmx5IGlmIHRoZSBsaXN0IHdhcyBwcmV2aW91c2x5IGVtcHR5LiAgKi8KKwlpZiAoaGVhZC0+bmV4dCA9PSAmY3AtPmxpc3QpCisJCXJhaXNlX3NvZnRpcnFfaXJxb2ZmKHNvZnRpcnEpOworfQorCisjaWZkZWYgQ09ORklHX1VTRV9HRU5FUklDX1NNUF9IRUxQRVJTCitzdGF0aWMgdm9pZCByZW1vdGVfc29mdGlycV9yZWNlaXZlKHZvaWQgKmRhdGEpCit7CisJc3RydWN0IGNhbGxfc2luZ2xlX2RhdGEgKmNwID0gZGF0YTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCBzb2Z0aXJxOworCisJc29mdGlycSA9IGNwLT5wcml2OworCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCV9fbG9jYWxfdHJpZ2dlcihjcCwgc29mdGlycSk7CisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworfQorCitzdGF0aWMgaW50IF9fdHJ5X3JlbW90ZV9zb2Z0aXJxKHN0cnVjdCBjYWxsX3NpbmdsZV9kYXRhICpjcCwgaW50IGNwdSwgaW50IHNvZnRpcnEpCit7CisJaWYgKGNwdV9vbmxpbmUoY3B1KSkgeworCQljcC0+ZnVuYyA9IHJlbW90ZV9zb2Z0aXJxX3JlY2VpdmU7CisJCWNwLT5pbmZvID0gY3A7CisJCWNwLT5mbGFncyA9IDA7CisJCWNwLT5wcml2ID0gc29mdGlycTsKKworCQlfX3NtcF9jYWxsX2Z1bmN0aW9uX3NpbmdsZShjcHUsIGNwKTsKKwkJcmV0dXJuIDA7CisJfQorCXJldHVybiAxOworfQorI2Vsc2UgLyogQ09ORklHX1VTRV9HRU5FUklDX1NNUF9IRUxQRVJTICovCitzdGF0aWMgaW50IF9fdHJ5X3JlbW90ZV9zb2Z0aXJxKHN0cnVjdCBjYWxsX3NpbmdsZV9kYXRhICpjcCwgaW50IGNwdSwgaW50IHNvZnRpcnEpCit7CisJcmV0dXJuIDE7Cit9CisjZW5kaWYKKworLyoqCisgKiBfX3NlbmRfcmVtb3RlX3NvZnRpcnEgLSB0cnkgdG8gc2NoZWR1bGUgc29mdGlycSB3b3JrIG9uIGEgcmVtb3RlIGNwdQorICogQGNwOiBwcml2YXRlIFNNUCBjYWxsIGZ1bmN0aW9uIGRhdGEgYXJlYQorICogQGNwdTogdGhlIHJlbW90ZSBjcHUKKyAqIEB0aGlzX2NwdTogdGhlIGN1cnJlbnRseSBleGVjdXRpbmcgY3B1CisgKiBAc29mdGlycTogdGhlIHNvZnRpcnEgZm9yIHRoZSB3b3JrCisgKgorICogQXR0ZW1wdCB0byBzY2hlZHVsZSBzb2Z0aXJxIHdvcmsgb24gYSByZW1vdGUgY3B1LiAgSWYgdGhpcyBjYW5ub3QgYmUKKyAqIGRvbmUsIHRoZSB3b3JrIGlzIGluc3RlYWQgcXVldWVkIHVwIG9uIHRoZSBsb2NhbCBjcHUuCisgKgorICogSW50ZXJydXB0cyBtdXN0IGJlIGRpc2FibGVkLgorICovCit2b2lkIF9fc2VuZF9yZW1vdGVfc29mdGlycShzdHJ1Y3QgY2FsbF9zaW5nbGVfZGF0YSAqY3AsIGludCBjcHUsIGludCB0aGlzX2NwdSwgaW50IHNvZnRpcnEpCit7CisJaWYgKGNwdSA9PSB0aGlzX2NwdSB8fCBfX3RyeV9yZW1vdGVfc29mdGlycShjcCwgY3B1LCBzb2Z0aXJxKSkKKwkJX19sb2NhbF90cmlnZ2VyKGNwLCBzb2Z0aXJxKTsKK30KK0VYUE9SVF9TWU1CT0woX19zZW5kX3JlbW90ZV9zb2Z0aXJxKTsKKworLyoqCisgKiBzZW5kX3JlbW90ZV9zb2Z0aXJxIC0gdHJ5IHRvIHNjaGVkdWxlIHNvZnRpcnEgd29yayBvbiBhIHJlbW90ZSBjcHUKKyAqIEBjcDogcHJpdmF0ZSBTTVAgY2FsbCBmdW5jdGlvbiBkYXRhIGFyZWEKKyAqIEBjcHU6IHRoZSByZW1vdGUgY3B1CisgKiBAc29mdGlycTogdGhlIHNvZnRpcnEgZm9yIHRoZSB3b3JrCisgKgorICogTGlrZSBfX3NlbmRfcmVtb3RlX3NvZnRpcnEgZXhjZXB0IHRoYXQgZGlzYWJsaW5nIGludGVycnVwdHMgYW5kCisgKiBjb21wdXRpbmcgdGhlIGN1cnJlbnQgY3B1IGlzIGRvbmUgZm9yIHRoZSBjYWxsZXIuCisgKi8KK3ZvaWQgc2VuZF9yZW1vdGVfc29mdGlycShzdHJ1Y3QgY2FsbF9zaW5nbGVfZGF0YSAqY3AsIGludCBjcHUsIGludCBzb2Z0aXJxKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHRoaXNfY3B1OworCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCXRoaXNfY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOworCV9fc2VuZF9yZW1vdGVfc29mdGlycShjcCwgY3B1LCB0aGlzX2NwdSwgc29mdGlycSk7CisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworfQorRVhQT1JUX1NZTUJPTChzZW5kX3JlbW90ZV9zb2Z0aXJxKTsKKworc3RhdGljIGludCBfX2NwdWluaXQgcmVtb3RlX3NvZnRpcnFfY3B1X25vdGlmeShzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnNlbGYsCisJCQkJCSAgICAgICB1bnNpZ25lZCBsb25nIGFjdGlvbiwgdm9pZCAqaGNwdSkKK3sKKwkvKgorCSAqIElmIGEgQ1BVIGdvZXMgYXdheSwgc3BsaWNlIGl0cyBlbnRyaWVzIHRvIHRoZSBjdXJyZW50IENQVQorCSAqIGFuZCB0cmlnZ2VyIGEgcnVuIG9mIHRoZSBzb2Z0aXJxCisJICovCisJaWYgKGFjdGlvbiA9PSBDUFVfREVBRCB8fCBhY3Rpb24gPT0gQ1BVX0RFQURfRlJPWkVOKSB7CisJCWludCBjcHUgPSAodW5zaWduZWQgbG9uZykgaGNwdTsKKwkJaW50IGk7CisKKwkJbG9jYWxfaXJxX2Rpc2FibGUoKTsKKwkJZm9yIChpID0gMDsgaSA8IE5SX1NPRlRJUlFTOyBpKyspIHsKKwkJCXN0cnVjdCBsaXN0X2hlYWQgKmhlYWQgPSAmcGVyX2NwdShzb2Z0aXJxX3dvcmtfbGlzdFtpXSwgY3B1KTsKKwkJCXN0cnVjdCBsaXN0X2hlYWQgKmxvY2FsX2hlYWQ7CisKKwkJCWlmIChsaXN0X2VtcHR5KGhlYWQpKQorCQkJCWNvbnRpbnVlOworCisJCQlsb2NhbF9oZWFkID0gJl9fZ2V0X2NwdV92YXIoc29mdGlycV93b3JrX2xpc3RbaV0pOworCQkJbGlzdF9zcGxpY2VfaW5pdChoZWFkLCBsb2NhbF9oZWFkKTsKKwkJCXJhaXNlX3NvZnRpcnFfaXJxb2ZmKGkpOworCQl9CisJCWxvY2FsX2lycV9lbmFibGUoKTsKKwl9CisKKwlyZXR1cm4gTk9USUZZX09LOworfQorCitzdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIF9fY3B1aW5pdGRhdGEgcmVtb3RlX3NvZnRpcnFfY3B1X25vdGlmaWVyID0geworCS5ub3RpZmllcl9jYWxsCT0gcmVtb3RlX3NvZnRpcnFfY3B1X25vdGlmeSwKK307CisKIHZvaWQgX19pbml0IHNvZnRpcnFfaW5pdCh2b2lkKQogewogCWludCBjcHU7CiAKIAlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7CisJCWludCBpOworCiAJCXBlcl9jcHUodGFza2xldF92ZWMsIGNwdSkudGFpbCA9CiAJCQkmcGVyX2NwdSh0YXNrbGV0X3ZlYywgY3B1KS5oZWFkOwogCQlwZXJfY3B1KHRhc2tsZXRfaGlfdmVjLCBjcHUpLnRhaWwgPQogCQkJJnBlcl9jcHUodGFza2xldF9oaV92ZWMsIGNwdSkuaGVhZDsKKwkJZm9yIChpID0gMDsgaSA8IE5SX1NPRlRJUlFTOyBpKyspCisJCQlJTklUX0xJU1RfSEVBRCgmcGVyX2NwdShzb2Z0aXJxX3dvcmtfbGlzdFtpXSwgY3B1KSk7CiAJfQogCisJcmVnaXN0ZXJfaG90Y3B1X25vdGlmaWVyKCZyZW1vdGVfc29mdGlycV9jcHVfbm90aWZpZXIpOworCiAJb3Blbl9zb2Z0aXJxKFRBU0tMRVRfU09GVElSUSwgdGFza2xldF9hY3Rpb24pOwogCW9wZW5fc29mdGlycShISV9TT0ZUSVJRLCB0YXNrbGV0X2hpX2FjdGlvbik7CiB9CmRpZmYgLS1naXQgYS9rZXJuZWwvc29mdGxvY2t1cC5jIGIva2VybmVsL3NvZnRsb2NrdXAuYwppbmRleCBjYjgzOGVlLi4zOTUzZTRhIDEwMDY0NAotLS0gYS9rZXJuZWwvc29mdGxvY2t1cC5jCisrKyBiL2tlcm5lbC9zb2Z0bG9ja3VwLmMKQEAgLTIyNiw3ICsyMjYsNyBAQAogCSAqIElmIHRoZSBzeXN0ZW0gY3Jhc2hlZCBhbHJlYWR5IHRoZW4gYWxsIGJldHMgYXJlIG9mZiwKIAkgKiBkbyBub3QgcmVwb3J0IGV4dHJhIGh1bmcgdGFza3M6CiAJICovCi0JaWYgKCh0YWludGVkICYgVEFJTlRfRElFKSB8fCBkaWRfcGFuaWMpCisJaWYgKHRlc3RfdGFpbnQoVEFJTlRfRElFKSB8fCBkaWRfcGFuaWMpCiAJCXJldHVybjsKIAogCXJlYWRfbG9jaygmdGFza2xpc3RfbG9jayk7CmRpZmYgLS1naXQgYS9rZXJuZWwvc3lzLmMgYi9rZXJuZWwvc3lzLmMKaW5kZXggMDM4YTdiYy4uNTM4NzljZCAxMDA2NDQKLS0tIGEva2VybmVsL3N5cy5jCisrKyBiL2tlcm5lbC9zeXMuYwpAQCAtODUzLDM4ICs4NTMsMjggQEAKIAlyZXR1cm4gb2xkX2ZzZ2lkOwogfQogCit2b2lkIGRvX3N5c190aW1lcyhzdHJ1Y3QgdG1zICp0bXMpCit7CisJc3RydWN0IHRhc2tfY3B1dGltZSBjcHV0aW1lOworCWNwdXRpbWVfdCBjdXRpbWUsIGNzdGltZTsKKworCXNwaW5fbG9ja19pcnEoJmN1cnJlbnQtPnNpZ2hhbmQtPnNpZ2xvY2spOworCXRocmVhZF9ncm91cF9jcHV0aW1lKGN1cnJlbnQsICZjcHV0aW1lKTsKKwljdXRpbWUgPSBjdXJyZW50LT5zaWduYWwtPmN1dGltZTsKKwljc3RpbWUgPSBjdXJyZW50LT5zaWduYWwtPmNzdGltZTsKKwlzcGluX3VubG9ja19pcnEoJmN1cnJlbnQtPnNpZ2hhbmQtPnNpZ2xvY2spOworCXRtcy0+dG1zX3V0aW1lID0gY3B1dGltZV90b19jbG9ja190KGNwdXRpbWUudXRpbWUpOworCXRtcy0+dG1zX3N0aW1lID0gY3B1dGltZV90b19jbG9ja190KGNwdXRpbWUuc3RpbWUpOworCXRtcy0+dG1zX2N1dGltZSA9IGNwdXRpbWVfdG9fY2xvY2tfdChjdXRpbWUpOworCXRtcy0+dG1zX2NzdGltZSA9IGNwdXRpbWVfdG9fY2xvY2tfdChjc3RpbWUpOworfQorCiBhc21saW5rYWdlIGxvbmcgc3lzX3RpbWVzKHN0cnVjdCB0bXMgX191c2VyICogdGJ1ZikKIHsKLQkvKgotCSAqCUluIHRoZSBTTVAgd29ybGQgd2UgbWlnaHQganVzdCBiZSB1bmx1Y2t5IGFuZCBoYXZlIG9uZSBvZgotCSAqCXRoZSB0aW1lcyBpbmNyZW1lbnQgYXMgd2UgdXNlIGl0LiBTaW5jZSB0aGUgdmFsdWUgaXMgYW4KLQkgKglhdG9taWNhbGx5IHNhZmUgdHlwZSB0aGlzIGlzIGp1c3QgZmluZS4gQ29uY2VwdHVhbGx5IGl0cwotCSAqCWFzIGlmIHRoZSBzeXNjYWxsIHRvb2sgYW4gaW5zdGFudCBsb25nZXIgdG8gb2NjdXIuCi0JICovCiAJaWYgKHRidWYpIHsKIAkJc3RydWN0IHRtcyB0bXA7Ci0JCXN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrID0gY3VycmVudDsKLQkJc3RydWN0IHRhc2tfc3RydWN0ICp0OwotCQljcHV0aW1lX3QgdXRpbWUsIHN0aW1lLCBjdXRpbWUsIGNzdGltZTsKIAotCQlzcGluX2xvY2tfaXJxKCZ0c2stPnNpZ2hhbmQtPnNpZ2xvY2spOwotCQl1dGltZSA9IHRzay0+c2lnbmFsLT51dGltZTsKLQkJc3RpbWUgPSB0c2stPnNpZ25hbC0+c3RpbWU7Ci0JCXQgPSB0c2s7Ci0JCWRvIHsKLQkJCXV0aW1lID0gY3B1dGltZV9hZGQodXRpbWUsIHQtPnV0aW1lKTsKLQkJCXN0aW1lID0gY3B1dGltZV9hZGQoc3RpbWUsIHQtPnN0aW1lKTsKLQkJCXQgPSBuZXh0X3RocmVhZCh0KTsKLQkJfSB3aGlsZSAodCAhPSB0c2spOwotCi0JCWN1dGltZSA9IHRzay0+c2lnbmFsLT5jdXRpbWU7Ci0JCWNzdGltZSA9IHRzay0+c2lnbmFsLT5jc3RpbWU7Ci0JCXNwaW5fdW5sb2NrX2lycSgmdHNrLT5zaWdoYW5kLT5zaWdsb2NrKTsKLQotCQl0bXAudG1zX3V0aW1lID0gY3B1dGltZV90b19jbG9ja190KHV0aW1lKTsKLQkJdG1wLnRtc19zdGltZSA9IGNwdXRpbWVfdG9fY2xvY2tfdChzdGltZSk7Ci0JCXRtcC50bXNfY3V0aW1lID0gY3B1dGltZV90b19jbG9ja190KGN1dGltZSk7Ci0JCXRtcC50bXNfY3N0aW1lID0gY3B1dGltZV90b19jbG9ja190KGNzdGltZSk7CisJCWRvX3N5c190aW1lcygmdG1wKTsKIAkJaWYgKGNvcHlfdG9fdXNlcih0YnVmLCAmdG1wLCBzaXplb2Yoc3RydWN0IHRtcykpKQogCQkJcmV0dXJuIC1FRkFVTFQ7CiAJfQpAQCAtMTA2MCw5ICsxMDUwLDcgQEAKIAlncm91cF9sZWFkZXItPnNpZ25hbC0+bGVhZGVyID0gMTsKIAlfX3NldF9zcGVjaWFsX3BpZHMoc2lkKTsKIAotCXNwaW5fbG9jaygmZ3JvdXBfbGVhZGVyLT5zaWdoYW5kLT5zaWdsb2NrKTsKLQlncm91cF9sZWFkZXItPnNpZ25hbC0+dHR5ID0gTlVMTDsKLQlzcGluX3VubG9jaygmZ3JvdXBfbGVhZGVyLT5zaWdoYW5kLT5zaWdsb2NrKTsKKwlwcm9jX2NsZWFyX3R0eShncm91cF9sZWFkZXIpOwogCiAJZXJyID0gc2Vzc2lvbjsKIG91dDoKQEAgLTEzNTEsOCArMTMzOSwxMCBAQAogCWRvd25fd3JpdGUoJnV0c19zZW0pOwogCWVycm5vID0gLUVGQVVMVDsKIAlpZiAoIWNvcHlfZnJvbV91c2VyKHRtcCwgbmFtZSwgbGVuKSkgewotCQltZW1jcHkodXRzbmFtZSgpLT5ub2RlbmFtZSwgdG1wLCBsZW4pOwotCQl1dHNuYW1lKCktPm5vZGVuYW1lW2xlbl0gPSAwOworCQlzdHJ1Y3QgbmV3X3V0c25hbWUgKnUgPSB1dHNuYW1lKCk7CisKKwkJbWVtY3B5KHUtPm5vZGVuYW1lLCB0bXAsIGxlbik7CisJCW1lbXNldCh1LT5ub2RlbmFtZSArIGxlbiwgMCwgc2l6ZW9mKHUtPm5vZGVuYW1lKSAtIGxlbik7CiAJCWVycm5vID0gMDsKIAl9CiAJdXBfd3JpdGUoJnV0c19zZW0pOwpAQCAtMTM2NCwxNSArMTM1NCwxNyBAQAogYXNtbGlua2FnZSBsb25nIHN5c19nZXRob3N0bmFtZShjaGFyIF9fdXNlciAqbmFtZSwgaW50IGxlbikKIHsKIAlpbnQgaSwgZXJybm87CisJc3RydWN0IG5ld191dHNuYW1lICp1OwogCiAJaWYgKGxlbiA8IDApCiAJCXJldHVybiAtRUlOVkFMOwogCWRvd25fcmVhZCgmdXRzX3NlbSk7Ci0JaSA9IDEgKyBzdHJsZW4odXRzbmFtZSgpLT5ub2RlbmFtZSk7CisJdSA9IHV0c25hbWUoKTsKKwlpID0gMSArIHN0cmxlbih1LT5ub2RlbmFtZSk7CiAJaWYgKGkgPiBsZW4pCiAJCWkgPSBsZW47CiAJZXJybm8gPSAwOwotCWlmIChjb3B5X3RvX3VzZXIobmFtZSwgdXRzbmFtZSgpLT5ub2RlbmFtZSwgaSkpCisJaWYgKGNvcHlfdG9fdXNlcihuYW1lLCB1LT5ub2RlbmFtZSwgaSkpCiAJCWVycm5vID0gLUVGQVVMVDsKIAl1cF9yZWFkKCZ1dHNfc2VtKTsKIAlyZXR1cm4gZXJybm87CkBAIC0xMzk3LDggKzEzODksMTAgQEAKIAlkb3duX3dyaXRlKCZ1dHNfc2VtKTsKIAllcnJubyA9IC1FRkFVTFQ7CiAJaWYgKCFjb3B5X2Zyb21fdXNlcih0bXAsIG5hbWUsIGxlbikpIHsKLQkJbWVtY3B5KHV0c25hbWUoKS0+ZG9tYWlubmFtZSwgdG1wLCBsZW4pOwotCQl1dHNuYW1lKCktPmRvbWFpbm5hbWVbbGVuXSA9IDA7CisJCXN0cnVjdCBuZXdfdXRzbmFtZSAqdSA9IHV0c25hbWUoKTsKKworCQltZW1jcHkodS0+ZG9tYWlubmFtZSwgdG1wLCBsZW4pOworCQltZW1zZXQodS0+ZG9tYWlubmFtZSArIGxlbiwgMCwgc2l6ZW9mKHUtPmRvbWFpbm5hbWUpIC0gbGVuKTsKIAkJZXJybm8gPSAwOwogCX0KIAl1cF93cml0ZSgmdXRzX3NlbSk7CkBAIC0xNDQ1LDIxICsxNDM5LDI4IEBACiBhc21saW5rYWdlIGxvbmcgc3lzX3NldHJsaW1pdCh1bnNpZ25lZCBpbnQgcmVzb3VyY2UsIHN0cnVjdCBybGltaXQgX191c2VyICpybGltKQogewogCXN0cnVjdCBybGltaXQgbmV3X3JsaW0sICpvbGRfcmxpbTsKLQl1bnNpZ25lZCBsb25nIGl0X3Byb2Zfc2VjczsKIAlpbnQgcmV0dmFsOwogCiAJaWYgKHJlc291cmNlID49IFJMSU1fTkxJTUlUUykKIAkJcmV0dXJuIC1FSU5WQUw7CiAJaWYgKGNvcHlfZnJvbV91c2VyKCZuZXdfcmxpbSwgcmxpbSwgc2l6ZW9mKCpybGltKSkpCiAJCXJldHVybiAtRUZBVUxUOwotCWlmIChuZXdfcmxpbS5ybGltX2N1ciA+IG5ld19ybGltLnJsaW1fbWF4KQotCQlyZXR1cm4gLUVJTlZBTDsKIAlvbGRfcmxpbSA9IGN1cnJlbnQtPnNpZ25hbC0+cmxpbSArIHJlc291cmNlOwogCWlmICgobmV3X3JsaW0ucmxpbV9tYXggPiBvbGRfcmxpbS0+cmxpbV9tYXgpICYmCiAJICAgICFjYXBhYmxlKENBUF9TWVNfUkVTT1VSQ0UpKQogCQlyZXR1cm4gLUVQRVJNOwotCWlmIChyZXNvdXJjZSA9PSBSTElNSVRfTk9GSUxFICYmIG5ld19ybGltLnJsaW1fbWF4ID4gc3lzY3RsX25yX29wZW4pCi0JCXJldHVybiAtRVBFUk07CisKKwlpZiAocmVzb3VyY2UgPT0gUkxJTUlUX05PRklMRSkgeworCQlpZiAobmV3X3JsaW0ucmxpbV9tYXggPT0gUkxJTV9JTkZJTklUWSkKKwkJCW5ld19ybGltLnJsaW1fbWF4ID0gc3lzY3RsX25yX29wZW47CisJCWlmIChuZXdfcmxpbS5ybGltX2N1ciA9PSBSTElNX0lORklOSVRZKQorCQkJbmV3X3JsaW0ucmxpbV9jdXIgPSBzeXNjdGxfbnJfb3BlbjsKKwkJaWYgKG5ld19ybGltLnJsaW1fbWF4ID4gc3lzY3RsX25yX29wZW4pCisJCQlyZXR1cm4gLUVQRVJNOworCX0KKworCWlmIChuZXdfcmxpbS5ybGltX2N1ciA+IG5ld19ybGltLnJsaW1fbWF4KQorCQlyZXR1cm4gLUVJTlZBTDsKIAogCXJldHZhbCA9IHNlY3VyaXR5X3Rhc2tfc2V0cmxpbWl0KHJlc291cmNlLCAmbmV3X3JsaW0pOwogCWlmIChyZXR2YWwpCkBAIC0xNDkxLDE4ICsxNDkyLDcgQEAKIAlpZiAobmV3X3JsaW0ucmxpbV9jdXIgPT0gUkxJTV9JTkZJTklUWSkKIAkJZ290byBvdXQ7CiAKLQlpdF9wcm9mX3NlY3MgPSBjcHV0aW1lX3RvX3NlY3MoY3VycmVudC0+c2lnbmFsLT5pdF9wcm9mX2V4cGlyZXMpOwotCWlmIChpdF9wcm9mX3NlY3MgPT0gMCB8fCBuZXdfcmxpbS5ybGltX2N1ciA8PSBpdF9wcm9mX3NlY3MpIHsKLQkJdW5zaWduZWQgbG9uZyBybGltX2N1ciA9IG5ld19ybGltLnJsaW1fY3VyOwotCQljcHV0aW1lX3QgY3B1dGltZTsKLQotCQljcHV0aW1lID0gc2Vjc190b19jcHV0aW1lKHJsaW1fY3VyKTsKLQkJcmVhZF9sb2NrKCZ0YXNrbGlzdF9sb2NrKTsKLQkJc3Bpbl9sb2NrX2lycSgmY3VycmVudC0+c2lnaGFuZC0+c2lnbG9jayk7Ci0JCXNldF9wcm9jZXNzX2NwdV90aW1lcihjdXJyZW50LCBDUFVDTE9DS19QUk9GLCAmY3B1dGltZSwgTlVMTCk7Ci0JCXNwaW5fdW5sb2NrX2lycSgmY3VycmVudC0+c2lnaGFuZC0+c2lnbG9jayk7Ci0JCXJlYWRfdW5sb2NrKCZ0YXNrbGlzdF9sb2NrKTsKLQl9CisJdXBkYXRlX3JsaW1pdF9jcHUobmV3X3JsaW0ucmxpbV9jdXIpOwogb3V0OgogCXJldHVybiAwOwogfQpAQCAtMTU0MCwxMSArMTUzMCw4IEBACiAgKgogICovCiAKLXN0YXRpYyB2b2lkIGFjY3VtdWxhdGVfdGhyZWFkX3J1c2FnZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQsIHN0cnVjdCBydXNhZ2UgKnIsCi0JCQkJICAgICBjcHV0aW1lX3QgKnV0aW1lcCwgY3B1dGltZV90ICpzdGltZXApCitzdGF0aWMgdm9pZCBhY2N1bXVsYXRlX3RocmVhZF9ydXNhZ2Uoc3RydWN0IHRhc2tfc3RydWN0ICp0LCBzdHJ1Y3QgcnVzYWdlICpyKQogewotCSp1dGltZXAgPSBjcHV0aW1lX2FkZCgqdXRpbWVwLCB0LT51dGltZSk7Ci0JKnN0aW1lcCA9IGNwdXRpbWVfYWRkKCpzdGltZXAsIHQtPnN0aW1lKTsKIAlyLT5ydV9udmNzdyArPSB0LT5udmNzdzsKIAlyLT5ydV9uaXZjc3cgKz0gdC0+bml2Y3N3OwogCXItPnJ1X21pbmZsdCArPSB0LT5taW5fZmx0OwpAQCAtMTU1OCwxMiArMTU0NSwxMyBAQAogCXN0cnVjdCB0YXNrX3N0cnVjdCAqdDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWNwdXRpbWVfdCB1dGltZSwgc3RpbWU7CisJc3RydWN0IHRhc2tfY3B1dGltZSBjcHV0aW1lOwogCiAJbWVtc2V0KChjaGFyICopIHIsIDAsIHNpemVvZiAqcik7CiAJdXRpbWUgPSBzdGltZSA9IGNwdXRpbWVfemVybzsKIAogCWlmICh3aG8gPT0gUlVTQUdFX1RIUkVBRCkgewotCQlhY2N1bXVsYXRlX3RocmVhZF9ydXNhZ2UocCwgciwgJnV0aW1lLCAmc3RpbWUpOworCQlhY2N1bXVsYXRlX3RocmVhZF9ydXNhZ2UocCwgcik7CiAJCWdvdG8gb3V0OwogCX0KIApAQCAtMTU4Niw4ICsxNTc0LDkgQEAKIAkJCQlicmVhazsKIAogCQljYXNlIFJVU0FHRV9TRUxGOgotCQkJdXRpbWUgPSBjcHV0aW1lX2FkZCh1dGltZSwgcC0+c2lnbmFsLT51dGltZSk7Ci0JCQlzdGltZSA9IGNwdXRpbWVfYWRkKHN0aW1lLCBwLT5zaWduYWwtPnN0aW1lKTsKKwkJCXRocmVhZF9ncm91cF9jcHV0aW1lKHAsICZjcHV0aW1lKTsKKwkJCXV0aW1lID0gY3B1dGltZV9hZGQodXRpbWUsIGNwdXRpbWUudXRpbWUpOworCQkJc3RpbWUgPSBjcHV0aW1lX2FkZChzdGltZSwgY3B1dGltZS5zdGltZSk7CiAJCQlyLT5ydV9udmNzdyArPSBwLT5zaWduYWwtPm52Y3N3OwogCQkJci0+cnVfbml2Y3N3ICs9IHAtPnNpZ25hbC0+bml2Y3N3OwogCQkJci0+cnVfbWluZmx0ICs9IHAtPnNpZ25hbC0+bWluX2ZsdDsKQEAgLTE1OTYsNyArMTU4NSw3IEBACiAJCQlyLT5ydV9vdWJsb2NrICs9IHAtPnNpZ25hbC0+b3VibG9jazsKIAkJCXQgPSBwOwogCQkJZG8gewotCQkJCWFjY3VtdWxhdGVfdGhyZWFkX3J1c2FnZSh0LCByLCAmdXRpbWUsICZzdGltZSk7CisJCQkJYWNjdW11bGF0ZV90aHJlYWRfcnVzYWdlKHQsIHIpOwogCQkJCXQgPSBuZXh0X3RocmVhZCh0KTsKIAkJCX0gd2hpbGUgKHQgIT0gcCk7CiAJCQlicmVhazsKZGlmZiAtLWdpdCBhL2tlcm5lbC9zeXNfbmkuYyBiL2tlcm5lbC9zeXNfbmkuYwppbmRleCAwOGQ2ZTFiLi5hNzdiMjdiIDEwMDY0NAotLS0gYS9rZXJuZWwvc3lzX25pLmMKKysrIGIva2VybmVsL3N5c19uaS5jCkBAIC0xMjUsNiArMTI1LDEyIEBACiBjb25kX3N5c2NhbGwoc3lzX3ZtODYpOwogY29uZF9zeXNjYWxsKGNvbXBhdF9zeXNfaXBjKTsKIGNvbmRfc3lzY2FsbChjb21wYXRfc3lzX3N5c2N0bCk7Citjb25kX3N5c2NhbGwoc3lzX2Zsb2NrKTsKK2NvbmRfc3lzY2FsbChzeXNfaW9fc2V0dXApOworY29uZF9zeXNjYWxsKHN5c19pb19kZXN0cm95KTsKK2NvbmRfc3lzY2FsbChzeXNfaW9fc3VibWl0KTsKK2NvbmRfc3lzY2FsbChzeXNfaW9fY2FuY2VsKTsKK2NvbmRfc3lzY2FsbChzeXNfaW9fZ2V0ZXZlbnRzKTsKIAogLyogYXJjaC1zcGVjaWZpYyB3ZWFrIHN5c2NhbGwgZW50cmllcyAqLwogY29uZF9zeXNjYWxsKHN5c19wY2ljb25maWdfcmVhZCk7CmRpZmYgLS1naXQgYS9rZXJuZWwvc3lzY3RsLmMgYi9rZXJuZWwvc3lzY3RsLmMKaW5kZXggMWJmMzY5Yi4uYjNjYzczOSAxMDA2NDQKLS0tIGEva2VybmVsL3N5c2N0bC5jCisrKyBiL2tlcm5lbC9zeXNjdGwuYwpAQCAtODAsNyArODAsNiBAQAogZXh0ZXJuIGludCBzeXNjdGxfZHJvcF9jYWNoZXM7CiBleHRlcm4gaW50IHBlcmNwdV9wYWdlbGlzdF9mcmFjdGlvbjsKIGV4dGVybiBpbnQgY29tcGF0X2xvZzsKLWV4dGVybiBpbnQgbWFwc19wcm90ZWN0OwogZXh0ZXJuIGludCBsYXRlbmN5dG9wX2VuYWJsZWQ7CiBleHRlcm4gaW50IHN5c2N0bF9ucl9vcGVuX21pbiwgc3lzY3RsX25yX29wZW5fbWF4OwogI2lmZGVmIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUCkBAIC05Nyw3ICs5Niw3IEBACiBzdGF0aWMgaW50IG5lZ19vbmUgPSAtMTsKICNlbmRpZgogCi0jaWZkZWYgQ09ORklHX01NVQorI2lmIGRlZmluZWQoQ09ORklHX01NVSkgJiYgZGVmaW5lZChDT05GSUdfRklMRV9MT0NLSU5HKQogc3RhdGljIGludCB0d28gPSAyOwogI2VuZGlmCiAKQEAgLTE1MCw3ICsxNDksNyBAQAogI2lmZGVmIENPTkZJR19QUk9DX1NZU0NUTAogc3RhdGljIGludCBwcm9jX2RvX2NhZF9waWQoc3RydWN0IGN0bF90YWJsZSAqdGFibGUsIGludCB3cml0ZSwgc3RydWN0IGZpbGUgKmZpbHAsCiAJCSAgdm9pZCBfX3VzZXIgKmJ1ZmZlciwgc2l6ZV90ICpsZW5wLCBsb2ZmX3QgKnBwb3MpOwotc3RhdGljIGludCBwcm9jX2RvaW50dmVjX3RhaW50KHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLCBpbnQgd3JpdGUsIHN0cnVjdCBmaWxlICpmaWxwLAorc3RhdGljIGludCBwcm9jX3RhaW50KHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLCBpbnQgd3JpdGUsIHN0cnVjdCBmaWxlICpmaWxwLAogCQkJICAgICAgIHZvaWQgX191c2VyICpidWZmZXIsIHNpemVfdCAqbGVucCwgbG9mZl90ICpwcG9zKTsKICNlbmRpZgogCkBAIC0zODAsMTAgKzM3OSw5IEBACiAjaWZkZWYgQ09ORklHX1BST0NfU1lTQ1RMCiAJewogCQkucHJvY25hbWUJPSAidGFpbnRlZCIsCi0JCS5kYXRhCQk9ICZ0YWludGVkLAotCQkubWF4bGVuCQk9IHNpemVvZihpbnQpLAorCQkubWF4bGVuIAk9IHNpemVvZihsb25nKSwKIAkJLm1vZGUJCT0gMDY0NCwKLQkJLnByb2NfaGFuZGxlcgk9ICZwcm9jX2RvaW50dmVjX3RhaW50LAorCQkucHJvY19oYW5kbGVyCT0gJnByb2NfdGFpbnQsCiAJfSwKICNlbmRpZgogI2lmZGVmIENPTkZJR19MQVRFTkNZVE9QCkBAIC04MDgsMTYgKzgwNiw2IEBACiAJCS5wcm9jX2hhbmRsZXIJPSAmcHJvY19kb2ludHZlYywKIAl9LAogI2VuZGlmCi0jaWZkZWYgQ09ORklHX1BST0NfRlMKLQl7Ci0JCS5jdGxfbmFtZSAgICAgICA9IENUTF9VTk5VTUJFUkVELAotCQkucHJvY25hbWUgICAgICAgPSAibWFwc19wcm90ZWN0IiwKLQkJLmRhdGEgICAgICAgICAgID0gJm1hcHNfcHJvdGVjdCwKLQkJLm1heGxlbiAgICAgICAgID0gc2l6ZW9mKGludCksCi0JCS5tb2RlICAgICAgICAgICA9IDA2NDQsCi0JCS5wcm9jX2hhbmRsZXIgICA9ICZwcm9jX2RvaW50dmVjLAotCX0sCi0jZW5kaWYKIAl7CiAJCS5jdGxfbmFtZQk9IENUTF9VTk5VTUJFUkVELAogCQkucHJvY25hbWUJPSAicG93ZXJvZmZfY21kIiwKQEAgLTg0NSw2ICs4MzMsMTYgQEAKIAkJLnByb2NfaGFuZGxlciAgID0gJnByb2NfZG9pbnR2ZWMsCiAJfSwKICNlbmRpZgorI2lmZGVmIENPTkZJR19VTkVWSUNUQUJMRV9MUlUKKwl7CisJCS5jdGxfbmFtZQk9IENUTF9VTk5VTUJFUkVELAorCQkucHJvY25hbWUJPSAic2Nhbl91bmV2aWN0YWJsZV9wYWdlcyIsCisJCS5kYXRhCQk9ICZzY2FuX3VuZXZpY3RhYmxlX3BhZ2VzLAorCQkubWF4bGVuCQk9IHNpemVvZihzY2FuX3VuZXZpY3RhYmxlX3BhZ2VzKSwKKwkJLm1vZGUJCT0gMDY0NCwKKwkJLnByb2NfaGFuZGxlcgk9ICZzY2FuX3VuZXZpY3RhYmxlX2hhbmRsZXIsCisJfSwKKyNlbmRpZgogLyoKICAqIE5PVEU6IGRvIG5vdCBhZGQgbmV3IGVudHJpZXMgdG8gdGhpcyB0YWJsZSB1bmxlc3MgeW91IGhhdmUgcmVhZAogICogRG9jdW1lbnRhdGlvbi9zeXNjdGwvY3RsX3VubnVtYmVyZWQudHh0CkBAIC0xMjU5LDYgKzEyNTcsNyBAQAogCQkuZXh0cmExCQk9ICZtaW5vbGR1aWQsCiAJCS5leHRyYTIJCT0gJm1heG9sZHVpZCwKIAl9LAorI2lmZGVmIENPTkZJR19GSUxFX0xPQ0tJTkcKIAl7CiAJCS5jdGxfbmFtZQk9IEZTX0xFQVNFUywKIAkJLnByb2NuYW1lCT0gImxlYXNlcy1lbmFibGUiLApAQCAtMTI2Nyw2ICsxMjY2LDcgQEAKIAkJLm1vZGUJCT0gMDY0NCwKIAkJLnByb2NfaGFuZGxlcgk9ICZwcm9jX2RvaW50dmVjLAogCX0sCisjZW5kaWYKICNpZmRlZiBDT05GSUdfRE5PVElGWQogCXsKIAkJLmN0bF9uYW1lCT0gRlNfRElSX05PVElGWSwKQEAgLTEyNzgsNiArMTI3OCw3IEBACiAJfSwKICNlbmRpZgogI2lmZGVmIENPTkZJR19NTVUKKyNpZmRlZiBDT05GSUdfRklMRV9MT0NLSU5HCiAJewogCQkuY3RsX25hbWUJPSBGU19MRUFTRV9USU1FLAogCQkucHJvY25hbWUJPSAibGVhc2UtYnJlYWstdGltZSIsCkBAIC0xMjg5LDYgKzEyOTAsOCBAQAogCQkuZXh0cmExCQk9ICZ6ZXJvLAogCQkuZXh0cmEyCQk9ICZ0d28sCiAJfSwKKyNlbmRpZgorI2lmZGVmIENPTkZJR19BSU8KIAl7CiAJCS5wcm9jbmFtZQk9ICJhaW8tbnIiLAogCQkuZGF0YQkJPSAmYWlvX25yLApAQCAtMTMwMyw2ICsxMzA2LDcgQEAKIAkJLm1vZGUJCT0gMDY0NCwKIAkJLnByb2NfaGFuZGxlcgk9ICZwcm9jX2RvdWxvbmd2ZWNfbWlubWF4LAogCX0sCisjZW5kaWYgLyogQ09ORklHX0FJTyAqLwogI2lmZGVmIENPTkZJR19JTk9USUZZX1VTRVIKIAl7CiAJCS5jdGxfbmFtZQk9IEZTX0lOT1RJRlksCkBAIC0xNTA4LDcgKzE1MTIsNiBAQAogLyogUGVyZm9ybSB0aGUgYWN0dWFsIHJlYWQvd3JpdGUgb2YgYSBzeXNjdGwgdGFibGUgZW50cnkuICovCiBzdGF0aWMgaW50IGRvX3N5c2N0bF9zdHJhdGVneShzdHJ1Y3QgY3RsX3RhYmxlX3Jvb3QgKnJvb3QsCiAJCQlzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSwKLQkJCWludCBfX3VzZXIgKm5hbWUsIGludCBubGVuLAogCQkJdm9pZCBfX3VzZXIgKm9sZHZhbCwgc2l6ZV90IF9fdXNlciAqb2xkbGVucCwKIAkJCXZvaWQgX191c2VyICpuZXd2YWwsIHNpemVfdCBuZXdsZW4pCiB7CkBAIC0xNTIyLDggKzE1MjUsNyBAQAogCQlyZXR1cm4gLUVQRVJNOwogCiAJaWYgKHRhYmxlLT5zdHJhdGVneSkgewotCQlyYyA9IHRhYmxlLT5zdHJhdGVneSh0YWJsZSwgbmFtZSwgbmxlbiwgb2xkdmFsLCBvbGRsZW5wLAotCQkJCSAgICAgbmV3dmFsLCBuZXdsZW4pOworCQlyYyA9IHRhYmxlLT5zdHJhdGVneSh0YWJsZSwgb2xkdmFsLCBvbGRsZW5wLCBuZXd2YWwsIG5ld2xlbik7CiAJCWlmIChyYyA8IDApCiAJCQlyZXR1cm4gcmM7CiAJCWlmIChyYyA+IDApCkBAIC0xNTMzLDggKzE1MzUsNyBAQAogCS8qIElmIHRoZXJlIGlzIG5vIHN0cmF0ZWd5IHJvdXRpbmUsIG9yIGlmIHRoZSBzdHJhdGVneSByZXR1cm5zCiAJICogemVybywgcHJvY2VlZCB3aXRoIGF1dG9tYXRpYyByL3cgKi8KIAlpZiAodGFibGUtPmRhdGEgJiYgdGFibGUtPm1heGxlbikgewotCQlyYyA9IHN5c2N0bF9kYXRhKHRhYmxlLCBuYW1lLCBubGVuLCBvbGR2YWwsIG9sZGxlbnAsCi0JCQkJIG5ld3ZhbCwgbmV3bGVuKTsKKwkJcmMgPSBzeXNjdGxfZGF0YSh0YWJsZSwgb2xkdmFsLCBvbGRsZW5wLCBuZXd2YWwsIG5ld2xlbik7CiAJCWlmIChyYyA8IDApCiAJCQlyZXR1cm4gcmM7CiAJfQpAQCAtMTU2Niw3ICsxNTY3LDcgQEAKIAkJCQl0YWJsZSA9IHRhYmxlLT5jaGlsZDsKIAkJCQlnb3RvIHJlcGVhdDsKIAkJCX0KLQkJCWVycm9yID0gZG9fc3lzY3RsX3N0cmF0ZWd5KHJvb3QsIHRhYmxlLCBuYW1lLCBubGVuLAorCQkJZXJyb3IgPSBkb19zeXNjdGxfc3RyYXRlZ3kocm9vdCwgdGFibGUsCiAJCQkJCQkgICBvbGR2YWwsIG9sZGxlbnAsCiAJCQkJCQkgICBuZXd2YWwsIG5ld2xlbik7CiAJCQlyZXR1cm4gZXJyb3I7CkBAIC0yMjM1LDQ5ICsyMjM2LDM5IEBACiAJCSAgICAJICAgIE5VTEwsTlVMTCk7CiB9CiAKLSNkZWZpbmUgT1BfU0VUCTAKLSNkZWZpbmUgT1BfQU5ECTEKLSNkZWZpbmUgT1BfT1IJMgotCi1zdGF0aWMgaW50IGRvX3Byb2NfZG9pbnR2ZWNfYnNldF9jb252KGludCAqbmVncCwgdW5zaWduZWQgbG9uZyAqbHZhbHAsCi0JCQkJICAgICAgaW50ICp2YWxwLAotCQkJCSAgICAgIGludCB3cml0ZSwgdm9pZCAqZGF0YSkKLXsKLQlpbnQgb3AgPSAqKGludCAqKWRhdGE7Ci0JaWYgKHdyaXRlKSB7Ci0JCWludCB2YWwgPSAqbmVncCA/IC0qbHZhbHAgOiAqbHZhbHA7Ci0JCXN3aXRjaChvcCkgewotCQljYXNlIE9QX1NFVDoJKnZhbHAgPSB2YWw7IGJyZWFrOwotCQljYXNlIE9QX0FORDoJKnZhbHAgJj0gdmFsOyBicmVhazsKLQkJY2FzZSBPUF9PUjoJKnZhbHAgfD0gdmFsOyBicmVhazsKLQkJfQotCX0gZWxzZSB7Ci0JCWludCB2YWwgPSAqdmFscDsKLQkJaWYgKHZhbCA8IDApIHsKLQkJCSpuZWdwID0gLTE7Ci0JCQkqbHZhbHAgPSAodW5zaWduZWQgbG9uZyktdmFsOwotCQl9IGVsc2UgewotCQkJKm5lZ3AgPSAwOwotCQkJKmx2YWxwID0gKHVuc2lnbmVkIGxvbmcpdmFsOwotCQl9Ci0JfQotCXJldHVybiAwOwotfQotCiAvKgotICoJVGFpbnQgdmFsdWVzIGNhbiBvbmx5IGJlIGluY3JlYXNlZAorICogVGFpbnQgdmFsdWVzIGNhbiBvbmx5IGJlIGluY3JlYXNlZAorICogVGhpcyBtZWFucyB3ZSBjYW4gc2FmZWx5IHVzZSBhIHRlbXBvcmFyeS4KICAqLwotc3RhdGljIGludCBwcm9jX2RvaW50dmVjX3RhaW50KHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLCBpbnQgd3JpdGUsIHN0cnVjdCBmaWxlICpmaWxwLAorc3RhdGljIGludCBwcm9jX3RhaW50KHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLCBpbnQgd3JpdGUsIHN0cnVjdCBmaWxlICpmaWxwLAogCQkJICAgICAgIHZvaWQgX191c2VyICpidWZmZXIsIHNpemVfdCAqbGVucCwgbG9mZl90ICpwcG9zKQogewotCWludCBvcDsKKwlzdHJ1Y3QgY3RsX3RhYmxlIHQ7CisJdW5zaWduZWQgbG9uZyB0bXB0YWludCA9IGdldF90YWludCgpOworCWludCBlcnI7CiAKIAlpZiAod3JpdGUgJiYgIWNhcGFibGUoQ0FQX1NZU19BRE1JTikpCiAJCXJldHVybiAtRVBFUk07CiAKLQlvcCA9IE9QX09SOwotCXJldHVybiBkb19wcm9jX2RvaW50dmVjKHRhYmxlLHdyaXRlLGZpbHAsYnVmZmVyLGxlbnAscHBvcywKLQkJCQlkb19wcm9jX2RvaW50dmVjX2JzZXRfY29udiwmb3ApOworCXQgPSAqdGFibGU7CisJdC5kYXRhID0gJnRtcHRhaW50OworCWVyciA9IHByb2NfZG91bG9uZ3ZlY19taW5tYXgoJnQsIHdyaXRlLCBmaWxwLCBidWZmZXIsIGxlbnAsIHBwb3MpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOworCisJaWYgKHdyaXRlKSB7CisJCS8qCisJCSAqIFBvb3IgbWFuJ3MgYXRvbWljIG9yLiBOb3Qgd29ydGggYWRkaW5nIGEgcHJpbWl0aXZlCisJCSAqIHRvIGV2ZXJ5b25lJ3MgYXRvbWljLmggZm9yIHRoaXMKKwkJICovCisJCWludCBpOworCQlmb3IgKGkgPSAwOyBpIDwgQklUU19QRVJfTE9ORyAmJiB0bXB0YWludCA+PiBpOyBpKyspIHsKKwkJCWlmICgodG1wdGFpbnQgPj4gaSkgJiAxKQorCQkJCWFkZF90YWludChpKTsKKwkJfQorCX0KKworCXJldHVybiBlcnI7CiB9CiAKIHN0cnVjdCBkb19wcm9jX2RvaW50dmVjX21pbm1heF9jb252X3BhcmFtIHsKQEAgLTI3MjUsNyArMjcxNiw3IEBACiAgKi8KIAogLyogVGhlIGdlbmVyaWMgc3lzY3RsIGRhdGEgcm91dGluZSAodXNlZCBpZiBubyBzdHJhdGVneSByb3V0aW5lIHN1cHBsaWVkKSAqLwotaW50IHN5c2N0bF9kYXRhKHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLCBpbnQgX191c2VyICpuYW1lLCBpbnQgbmxlbiwKK2ludCBzeXNjdGxfZGF0YShzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSwKIAkJdm9pZCBfX3VzZXIgKm9sZHZhbCwgc2l6ZV90IF9fdXNlciAqb2xkbGVucCwKIAkJdm9pZCBfX3VzZXIgKm5ld3ZhbCwgc2l6ZV90IG5ld2xlbikKIHsKQEAgLTI3NTksNyArMjc1MCw3IEBACiB9CiAKIC8qIFRoZSBnZW5lcmljIHN0cmluZyBzdHJhdGVneSByb3V0aW5lOiAqLwotaW50IHN5c2N0bF9zdHJpbmcoc3RydWN0IGN0bF90YWJsZSAqdGFibGUsIGludCBfX3VzZXIgKm5hbWUsIGludCBubGVuLAoraW50IHN5c2N0bF9zdHJpbmcoc3RydWN0IGN0bF90YWJsZSAqdGFibGUsCiAJCSAgdm9pZCBfX3VzZXIgKm9sZHZhbCwgc2l6ZV90IF9fdXNlciAqb2xkbGVucCwKIAkJICB2b2lkIF9fdXNlciAqbmV3dmFsLCBzaXplX3QgbmV3bGVuKQogewpAQCAtMjgwNSw3ICsyNzk2LDcgQEAKICAqIGFyZSBiZXR3ZWVuIHRoZSBtaW5pbXVtIGFuZCBtYXhpbXVtIHZhbHVlcyBnaXZlbiBpbiB0aGUgYXJyYXlzCiAgKiB0YWJsZS0+ZXh0cmExIGFuZCB0YWJsZS0+ZXh0cmEyLCByZXNwZWN0aXZlbHkuCiAgKi8KLWludCBzeXNjdGxfaW50dmVjKHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLCBpbnQgX191c2VyICpuYW1lLCBpbnQgbmxlbiwKK2ludCBzeXNjdGxfaW50dmVjKHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLAogCQl2b2lkIF9fdXNlciAqb2xkdmFsLCBzaXplX3QgX191c2VyICpvbGRsZW5wLAogCQl2b2lkIF9fdXNlciAqbmV3dmFsLCBzaXplX3QgbmV3bGVuKQogewpAQCAtMjg0MSw3ICsyODMyLDcgQEAKIH0KIAogLyogU3RyYXRlZ3kgZnVuY3Rpb24gdG8gY29udmVydCBqaWZmaWVzIHRvIHNlY29uZHMgKi8gCi1pbnQgc3lzY3RsX2ppZmZpZXMoc3RydWN0IGN0bF90YWJsZSAqdGFibGUsIGludCBfX3VzZXIgKm5hbWUsIGludCBubGVuLAoraW50IHN5c2N0bF9qaWZmaWVzKHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLAogCQl2b2lkIF9fdXNlciAqb2xkdmFsLCBzaXplX3QgX191c2VyICpvbGRsZW5wLAogCQl2b2lkIF9fdXNlciAqbmV3dmFsLCBzaXplX3QgbmV3bGVuKQogewpAQCAtMjg3NSw3ICsyODY2LDcgQEAKIH0KIAogLyogU3RyYXRlZ3kgZnVuY3Rpb24gdG8gY29udmVydCBqaWZmaWVzIHRvIHNlY29uZHMgKi8gCi1pbnQgc3lzY3RsX21zX2ppZmZpZXMoc3RydWN0IGN0bF90YWJsZSAqdGFibGUsIGludCBfX3VzZXIgKm5hbWUsIGludCBubGVuLAoraW50IHN5c2N0bF9tc19qaWZmaWVzKHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLAogCQl2b2lkIF9fdXNlciAqb2xkdmFsLCBzaXplX3QgX191c2VyICpvbGRsZW5wLAogCQl2b2lkIF9fdXNlciAqbmV3dmFsLCBzaXplX3QgbmV3bGVuKQogewpAQCAtMjkzMCwzNSArMjkyMSwzNSBAQAogCXJldHVybiBlcnJvcjsKIH0KIAotaW50IHN5c2N0bF9kYXRhKHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLCBpbnQgX191c2VyICpuYW1lLCBpbnQgbmxlbiwKK2ludCBzeXNjdGxfZGF0YShzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSwKIAkJICB2b2lkIF9fdXNlciAqb2xkdmFsLCBzaXplX3QgX191c2VyICpvbGRsZW5wLAogCQkgIHZvaWQgX191c2VyICpuZXd2YWwsIHNpemVfdCBuZXdsZW4pCiB7CiAJcmV0dXJuIC1FTk9TWVM7CiB9CiAKLWludCBzeXNjdGxfc3RyaW5nKHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLCBpbnQgX191c2VyICpuYW1lLCBpbnQgbmxlbiwKK2ludCBzeXNjdGxfc3RyaW5nKHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLAogCQkgIHZvaWQgX191c2VyICpvbGR2YWwsIHNpemVfdCBfX3VzZXIgKm9sZGxlbnAsCiAJCSAgdm9pZCBfX3VzZXIgKm5ld3ZhbCwgc2l6ZV90IG5ld2xlbikKIHsKIAlyZXR1cm4gLUVOT1NZUzsKIH0KIAotaW50IHN5c2N0bF9pbnR2ZWMoc3RydWN0IGN0bF90YWJsZSAqdGFibGUsIGludCBfX3VzZXIgKm5hbWUsIGludCBubGVuLAoraW50IHN5c2N0bF9pbnR2ZWMoc3RydWN0IGN0bF90YWJsZSAqdGFibGUsCiAJCXZvaWQgX191c2VyICpvbGR2YWwsIHNpemVfdCBfX3VzZXIgKm9sZGxlbnAsCiAJCXZvaWQgX191c2VyICpuZXd2YWwsIHNpemVfdCBuZXdsZW4pCiB7CiAJcmV0dXJuIC1FTk9TWVM7CiB9CiAKLWludCBzeXNjdGxfamlmZmllcyhzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSwgaW50IF9fdXNlciAqbmFtZSwgaW50IG5sZW4sCitpbnQgc3lzY3RsX2ppZmZpZXMoc3RydWN0IGN0bF90YWJsZSAqdGFibGUsCiAJCXZvaWQgX191c2VyICpvbGR2YWwsIHNpemVfdCBfX3VzZXIgKm9sZGxlbnAsCiAJCXZvaWQgX191c2VyICpuZXd2YWwsIHNpemVfdCBuZXdsZW4pCiB7CiAJcmV0dXJuIC1FTk9TWVM7CiB9CiAKLWludCBzeXNjdGxfbXNfamlmZmllcyhzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSwgaW50IF9fdXNlciAqbmFtZSwgaW50IG5sZW4sCitpbnQgc3lzY3RsX21zX2ppZmZpZXMoc3RydWN0IGN0bF90YWJsZSAqdGFibGUsCiAJCXZvaWQgX191c2VyICpvbGR2YWwsIHNpemVfdCBfX3VzZXIgKm9sZGxlbnAsCiAJCXZvaWQgX191c2VyICpuZXd2YWwsIHNpemVfdCBuZXdsZW4pCiB7CmRpZmYgLS1naXQgYS9rZXJuZWwvdGltZS9LY29uZmlnIGIva2VybmVsL3RpbWUvS2NvbmZpZwppbmRleCA4ZDUzMTA2Li45NWVkNDI5IDEwMDY0NAotLS0gYS9rZXJuZWwvdGltZS9LY29uZmlnCisrKyBiL2tlcm5lbC90aW1lL0tjb25maWcKQEAgLTMsNyArMyw2IEBACiAjCiBjb25maWcgVElDS19PTkVTSE9UCiAJYm9vbAotCWRlZmF1bHQgbgogCiBjb25maWcgTk9fSFoKIAlib29sICJUaWNrbGVzcyBTeXN0ZW0gKER5bmFtaWMgVGlja3MpIgpkaWZmIC0tZ2l0IGEva2VybmVsL3RpbWUvY2xvY2tzb3VyY2UuYyBiL2tlcm5lbC90aW1lL2Nsb2Nrc291cmNlLmMKaW5kZXggMDkzZDRhYy4uOWVkMmVlYyAxMDA2NDQKLS0tIGEva2VybmVsL3RpbWUvY2xvY2tzb3VyY2UuYworKysgYi9rZXJuZWwvdGltZS9jbG9ja3NvdXJjZS5jCkBAIC0zMjUsNiArMzI1LDkgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCByZXQ7CiAKKwkvKiBzYXZlIG11bHRfb3JpZyBvbiByZWdpc3RyYXRpb24gKi8KKwljLT5tdWx0X29yaWcgPSBjLT5tdWx0OworCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmNsb2Nrc291cmNlX2xvY2ssIGZsYWdzKTsKIAlyZXQgPSBjbG9ja3NvdXJjZV9lbnF1ZXVlKGMpOwogCWlmICghcmV0KQpkaWZmIC0tZ2l0IGEva2VybmVsL3RpbWUvamlmZmllcy5jIGIva2VybmVsL3RpbWUvamlmZmllcy5jCmluZGV4IDRjMjU2ZmQuLjFjYTk5NTUgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90aW1lL2ppZmZpZXMuYworKysgYi9rZXJuZWwvdGltZS9qaWZmaWVzLmMKQEAgLTYxLDYgKzYxLDcgQEAKIAkucmVhZAkJPSBqaWZmaWVzX3JlYWQsCiAJLm1hc2sJCT0gMHhmZmZmZmZmZiwgLyozMmJpdHMqLwogCS5tdWx0CQk9IE5TRUNfUEVSX0pJRkZZIDw8IEpJRkZJRVNfU0hJRlQsIC8qIGRldGFpbHMgYWJvdmUgKi8KKwkubXVsdF9vcmlnCT0gTlNFQ19QRVJfSklGRlkgPDwgSklGRklFU19TSElGVCwKIAkuc2hpZnQJCT0gSklGRklFU19TSElGVCwKIH07CiAKZGlmZiAtLWdpdCBhL2tlcm5lbC90aW1lL250cC5jIGIva2VybmVsL3RpbWUvbnRwLmMKaW5kZXggMWFkNDZmMy4uMWEyMDcxNSAxMDA2NDQKLS0tIGEva2VybmVsL3RpbWUvbnRwLmMKKysrIGIva2VybmVsL3RpbWUvbnRwLmMKQEAgLTEwLDEzICsxMCwxMyBAQAogCiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC90aW1lLmg+Ci0jaW5jbHVkZSA8bGludXgvdGltZXIuaD4KICNpbmNsdWRlIDxsaW51eC90aW1leC5oPgogI2luY2x1ZGUgPGxpbnV4L2ppZmZpZXMuaD4KICNpbmNsdWRlIDxsaW51eC9ocnRpbWVyLmg+CiAjaW5jbHVkZSA8bGludXgvY2FwYWJpbGl0eS5oPgogI2luY2x1ZGUgPGxpbnV4L21hdGg2NC5oPgogI2luY2x1ZGUgPGxpbnV4L2Nsb2Nrc291cmNlLmg+CisjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CiAjaW5jbHVkZSA8YXNtL3RpbWV4Lmg+CiAKIC8qCkBAIC0yMTgsMTEgKzIxOCwxMSBAQAogLyogRGlzYWJsZSB0aGUgY21vcyB1cGRhdGUgLSB1c2VkIGJ5IHZpcnR1YWxpemF0aW9uIGFuZCBlbWJlZGRlZCAqLwogaW50IG5vX3N5bmNfY21vc19jbG9jayAgX19yZWFkX21vc3RseTsKIAotc3RhdGljIHZvaWQgc3luY19jbW9zX2Nsb2NrKHVuc2lnbmVkIGxvbmcgZHVtbXkpOworc3RhdGljIHZvaWQgc3luY19jbW9zX2Nsb2NrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7CiAKLXN0YXRpYyBERUZJTkVfVElNRVIoc3luY19jbW9zX3RpbWVyLCBzeW5jX2Ntb3NfY2xvY2ssIDAsIDApOworc3RhdGljIERFQ0xBUkVfREVMQVlFRF9XT1JLKHN5bmNfY21vc193b3JrLCBzeW5jX2Ntb3NfY2xvY2spOwogCi1zdGF0aWMgdm9pZCBzeW5jX2Ntb3NfY2xvY2sodW5zaWduZWQgbG9uZyBkdW1teSkKK3N0YXRpYyB2b2lkIHN5bmNfY21vc19jbG9jayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiB7CiAJc3RydWN0IHRpbWVzcGVjIG5vdywgbmV4dDsKIAlpbnQgZmFpbCA9IDE7CkBAIC0yNTgsMTMgKzI1OCwxMyBAQAogCQluZXh0LnR2X3NlYysrOwogCQluZXh0LnR2X25zZWMgLT0gTlNFQ19QRVJfU0VDOwogCX0KLQltb2RfdGltZXIoJnN5bmNfY21vc190aW1lciwgamlmZmllcyArIHRpbWVzcGVjX3RvX2ppZmZpZXMoJm5leHQpKTsKKwlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJnN5bmNfY21vc193b3JrLCB0aW1lc3BlY190b19qaWZmaWVzKCZuZXh0KSk7CiB9CiAKIHN0YXRpYyB2b2lkIG5vdGlmeV9jbW9zX3RpbWVyKHZvaWQpCiB7CiAJaWYgKCFub19zeW5jX2Ntb3NfY2xvY2spCi0JCW1vZF90aW1lcigmc3luY19jbW9zX3RpbWVyLCBqaWZmaWVzICsgMSk7CisJCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmc3luY19jbW9zX3dvcmssIDApOwogfQogCiAjZWxzZQpAQCAtMjc3LDM4ICsyNzcsNTAgQEAKIGludCBkb19hZGp0aW1leChzdHJ1Y3QgdGltZXggKnR4YykKIHsKIAlzdHJ1Y3QgdGltZXNwZWMgdHM7Ci0JbG9uZyBzYXZlX2FkanVzdCwgc2VjOwogCWludCByZXN1bHQ7CiAKLQkvKiBJbiBvcmRlciB0byBtb2RpZnkgYW55dGhpbmcsIHlvdSBnb3R0YSBiZSBzdXBlci11c2VyISAqLwotCWlmICh0eGMtPm1vZGVzICYmICFjYXBhYmxlKENBUF9TWVNfVElNRSkpCi0JCXJldHVybiAtRVBFUk07Ci0KLQkvKiBOb3cgd2UgdmFsaWRhdGUgdGhlIGRhdGEgYmVmb3JlIGRpc2FibGluZyBpbnRlcnJ1cHRzICovCi0KLQlpZiAoKHR4Yy0+bW9kZXMgJiBBREpfT0ZGU0VUX1NJTkdMRVNIT1QpID09IEFESl9PRkZTRVRfU0lOR0xFU0hPVCkgeworCS8qIFZhbGlkYXRlIHRoZSBkYXRhIGJlZm9yZSBkaXNhYmxpbmcgaW50ZXJydXB0cyAqLworCWlmICh0eGMtPm1vZGVzICYgQURKX0FESlRJTUUpIHsKIAkJLyogc2luZ2xlc2hvdCBtdXN0IG5vdCBiZSB1c2VkIHdpdGggYW55IG90aGVyIG1vZGUgYml0cyAqLwotCQlpZiAodHhjLT5tb2RlcyAmIH5BREpfT0ZGU0VUX1NTX1JFQUQpCisJCWlmICghKHR4Yy0+bW9kZXMgJiBBREpfT0ZGU0VUX1NJTkdMRVNIT1QpKQogCQkJcmV0dXJuIC1FSU5WQUw7CisJCWlmICghKHR4Yy0+bW9kZXMgJiBBREpfT0ZGU0VUX1JFQURPTkxZKSAmJgorCQkgICAgIWNhcGFibGUoQ0FQX1NZU19USU1FKSkKKwkJCXJldHVybiAtRVBFUk07CisJfSBlbHNlIHsKKwkJLyogSW4gb3JkZXIgdG8gbW9kaWZ5IGFueXRoaW5nLCB5b3UgZ290dGEgYmUgc3VwZXItdXNlciEgKi8KKwkJIGlmICh0eGMtPm1vZGVzICYmICFjYXBhYmxlKENBUF9TWVNfVElNRSkpCisJCQlyZXR1cm4gLUVQRVJNOworCisJCS8qIGlmIHRoZSBxdWFydHogaXMgb2ZmIGJ5IG1vcmUgdGhhbiAxMCUgc29tZXRoaW5nIGlzIFZFUlkgd3JvbmchICovCisJCWlmICh0eGMtPm1vZGVzICYgQURKX1RJQ0sgJiYKKwkJICAgICh0eGMtPnRpY2sgPCAgOTAwMDAwL1VTRVJfSFogfHwKKwkJICAgICB0eGMtPnRpY2sgPiAxMTAwMDAwL1VTRVJfSFopKQorCQkJCXJldHVybiAtRUlOVkFMOworCisJCWlmICh0eGMtPm1vZGVzICYgQURKX1NUQVRVUyAmJiB0aW1lX3N0YXRlICE9IFRJTUVfT0spCisJCQlocnRpbWVyX2NhbmNlbCgmbGVhcF90aW1lcik7CiAJfQogCi0JLyogaWYgdGhlIHF1YXJ0eiBpcyBvZmYgYnkgbW9yZSB0aGFuIDEwJSBzb21ldGhpbmcgaXMgVkVSWSB3cm9uZyAhICovCi0JaWYgKHR4Yy0+bW9kZXMgJiBBREpfVElDSykKLQkJaWYgKHR4Yy0+dGljayA8ICA5MDAwMDAvVVNFUl9IWiB8fAotCQkgICAgdHhjLT50aWNrID4gMTEwMDAwMC9VU0VSX0haKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlpZiAodGltZV9zdGF0ZSAhPSBUSU1FX09LICYmIHR4Yy0+bW9kZXMgJiBBREpfU1RBVFVTKQotCQlocnRpbWVyX2NhbmNlbCgmbGVhcF90aW1lcik7CiAJZ2V0bnN0aW1lb2ZkYXkoJnRzKTsKIAogCXdyaXRlX3NlcWxvY2tfaXJxKCZ4dGltZV9sb2NrKTsKIAotCS8qIFNhdmUgZm9yIGxhdGVyIC0gc2VtYW50aWNzIG9mIGFkanRpbWUgaXMgdG8gcmV0dXJuIG9sZCB2YWx1ZSAqLwotCXNhdmVfYWRqdXN0ID0gdGltZV9hZGp1c3Q7Ci0KIAkvKiBJZiB0aGVyZSBhcmUgaW5wdXQgcGFyYW1ldGVycywgdGhlbiBwcm9jZXNzIHRoZW0gKi8KKwlpZiAodHhjLT5tb2RlcyAmIEFESl9BREpUSU1FKSB7CisJCWxvbmcgc2F2ZV9hZGp1c3QgPSB0aW1lX2FkanVzdDsKKworCQlpZiAoISh0eGMtPm1vZGVzICYgQURKX09GRlNFVF9SRUFET05MWSkpIHsKKwkJCS8qIGFkanRpbWUoKSBpcyBpbmRlcGVuZGVudCBmcm9tIG50cF9hZGp0aW1lKCkgKi8KKwkJCXRpbWVfYWRqdXN0ID0gdHhjLT5vZmZzZXQ7CisJCQludHBfdXBkYXRlX2ZyZXF1ZW5jeSgpOworCQl9CisJCXR4Yy0+b2Zmc2V0ID0gc2F2ZV9hZGp1c3Q7CisJCWdvdG8gYWRqX2RvbmU7CisJfQogCWlmICh0eGMtPm1vZGVzKSB7CisJCWxvbmcgc2VjOworCiAJCWlmICh0eGMtPm1vZGVzICYgQURKX1NUQVRVUykgewogCQkJaWYgKCh0aW1lX3N0YXR1cyAmIFNUQV9QTEwpICYmCiAJCQkgICAgISh0eGMtPnN0YXR1cyAmIFNUQV9QTEwpKSB7CkBAIC0zNzUsMTMgKzM4Nyw4IEBACiAJCWlmICh0eGMtPm1vZGVzICYgQURKX1RBSSAmJiB0eGMtPmNvbnN0YW50ID4gMCkKIAkJCXRpbWVfdGFpID0gdHhjLT5jb25zdGFudDsKIAotCQlpZiAodHhjLT5tb2RlcyAmIEFESl9PRkZTRVQpIHsKLQkJCWlmICh0eGMtPm1vZGVzID09IEFESl9PRkZTRVRfU0lOR0xFU0hPVCkKLQkJCQkvKiBhZGp0aW1lKCkgaXMgaW5kZXBlbmRlbnQgZnJvbSBudHBfYWRqdGltZSgpICovCi0JCQkJdGltZV9hZGp1c3QgPSB0eGMtPm9mZnNldDsKLQkJCWVsc2UKLQkJCQludHBfdXBkYXRlX29mZnNldCh0eGMtPm9mZnNldCk7Ci0JCX0KKwkJaWYgKHR4Yy0+bW9kZXMgJiBBREpfT0ZGU0VUKQorCQkJbnRwX3VwZGF0ZV9vZmZzZXQodHhjLT5vZmZzZXQpOwogCQlpZiAodHhjLT5tb2RlcyAmIEFESl9USUNLKQogCQkJdGlja191c2VjID0gdHhjLT50aWNrOwogCkBAIC0zODksMjIgKzM5NiwxOCBAQAogCQkJbnRwX3VwZGF0ZV9mcmVxdWVuY3koKTsKIAl9CiAKKwl0eGMtPm9mZnNldCA9IHNoaWZ0X3JpZ2h0KHRpbWVfb2Zmc2V0ICogTlRQX0lOVEVSVkFMX0ZSRVEsCisJCQkJICBOVFBfU0NBTEVfU0hJRlQpOworCWlmICghKHRpbWVfc3RhdHVzICYgU1RBX05BTk8pKQorCQl0eGMtPm9mZnNldCAvPSBOU0VDX1BFUl9VU0VDOworCithZGpfZG9uZToKIAlyZXN1bHQgPSB0aW1lX3N0YXRlOwkvKiBtb3N0bHkgYFRJTUVfT0snICovCiAJaWYgKHRpbWVfc3RhdHVzICYgKFNUQV9VTlNZTkN8U1RBX0NMT0NLRVJSKSkKIAkJcmVzdWx0ID0gVElNRV9FUlJPUjsKIAotCWlmICgodHhjLT5tb2RlcyA9PSBBREpfT0ZGU0VUX1NJTkdMRVNIT1QpIHx8Ci0JICAgICh0eGMtPm1vZGVzID09IEFESl9PRkZTRVRfU1NfUkVBRCkpCi0JCXR4Yy0+b2Zmc2V0ID0gc2F2ZV9hZGp1c3Q7Ci0JZWxzZSB7Ci0JCXR4Yy0+b2Zmc2V0ID0gc2hpZnRfcmlnaHQodGltZV9vZmZzZXQgKiBOVFBfSU5URVJWQUxfRlJFUSwKLQkJCQkJICBOVFBfU0NBTEVfU0hJRlQpOwotCQlpZiAoISh0aW1lX3N0YXR1cyAmIFNUQV9OQU5PKSkKLQkJCXR4Yy0+b2Zmc2V0IC89IE5TRUNfUEVSX1VTRUM7Ci0JfQotCXR4Yy0+ZnJlcQkgICA9IHNoaWZ0X3JpZ2h0KChzMzIpKHRpbWVfZnJlcSA+PiBQUE1fU0NBTEVfSU5WX1NISUZUKSAqCi0JCQkJCSAoczY0KVBQTV9TQ0FMRV9JTlYsCi0JCQkJCSBOVFBfU0NBTEVfU0hJRlQpOworCXR4Yy0+ZnJlcQkgICA9IHNoaWZ0X3JpZ2h0KCh0aW1lX2ZyZXEgPj4gUFBNX1NDQUxFX0lOVl9TSElGVCkgKgorCQkJCQkgKHM2NClQUE1fU0NBTEVfSU5WLCBOVFBfU0NBTEVfU0hJRlQpOwogCXR4Yy0+bWF4ZXJyb3IJICAgPSB0aW1lX21heGVycm9yOwogCXR4Yy0+ZXN0ZXJyb3IJICAgPSB0aW1lX2VzdGVycm9yOwogCXR4Yy0+c3RhdHVzCSAgID0gdGltZV9zdGF0dXM7CmRpZmYgLS1naXQgYS9rZXJuZWwvdGltZS90aWNrLWJyb2FkY2FzdC5jIGIva2VybmVsL3RpbWUvdGljay1icm9hZGNhc3QuYwppbmRleCBjYjAxY2Q4Li5mOThhMWI3IDEwMDY0NAotLS0gYS9rZXJuZWwvdGltZS90aWNrLWJyb2FkY2FzdC5jCisrKyBiL2tlcm5lbC90aW1lL3RpY2stYnJvYWRjYXN0LmMKQEAgLTM4NCw2ICszODQsMTkgQEAKIH0KIAogLyoKKyAqIENhbGxlZCBmcm9tIGlycV9lbnRlcigpIHdoZW4gaWRsZSB3YXMgaW50ZXJydXB0ZWQgdG8gcmVlbmFibGUgdGhlCisgKiBwZXIgY3B1IGRldmljZS4KKyAqLwordm9pZCB0aWNrX2NoZWNrX29uZXNob3RfYnJvYWRjYXN0KGludCBjcHUpCit7CisJaWYgKGNwdV9pc3NldChjcHUsIHRpY2tfYnJvYWRjYXN0X29uZXNob3RfbWFzaykpIHsKKwkJc3RydWN0IHRpY2tfZGV2aWNlICp0ZCA9ICZwZXJfY3B1KHRpY2tfY3B1X2RldmljZSwgY3B1KTsKKworCQljbG9ja2V2ZW50c19zZXRfbW9kZSh0ZC0+ZXZ0ZGV2LCBDTE9DS19FVlRfTU9ERV9PTkVTSE9UKTsKKwl9Cit9CisKKy8qCiAgKiBIYW5kbGUgb25lc2hvdCBtb2RlIGJyb2FkY2FzdGluZwogICovCiBzdGF0aWMgdm9pZCB0aWNrX2hhbmRsZV9vbmVzaG90X2Jyb2FkY2FzdChzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpkZXYpCmRpZmYgLS1naXQgYS9rZXJuZWwvdGltZS90aWNrLWludGVybmFsLmggYi9rZXJuZWwvdGltZS90aWNrLWludGVybmFsLmgKaW5kZXggNDY5MjQ4Ny4uYjFjMDViZiAxMDA2NDQKLS0tIGEva2VybmVsL3RpbWUvdGljay1pbnRlcm5hbC5oCisrKyBiL2tlcm5lbC90aW1lL3RpY2staW50ZXJuYWwuaApAQCAtMzYsNiArMzYsNyBAQAogZXh0ZXJuIHZvaWQgdGlja19zaHV0ZG93bl9icm9hZGNhc3Rfb25lc2hvdCh1bnNpZ25lZCBpbnQgKmNwdXApOwogZXh0ZXJuIGludCB0aWNrX3Jlc3VtZV9icm9hZGNhc3Rfb25lc2hvdChzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpiYyk7CiBleHRlcm4gaW50IHRpY2tfYnJvYWRjYXN0X29uZXNob3RfYWN0aXZlKHZvaWQpOworZXh0ZXJuIHZvaWQgdGlja19jaGVja19vbmVzaG90X2Jyb2FkY2FzdChpbnQgY3B1KTsKICMgZWxzZSAvKiBCUk9BRENBU1QgKi8KIHN0YXRpYyBpbmxpbmUgdm9pZCB0aWNrX2Jyb2FkY2FzdF9zZXR1cF9vbmVzaG90KHN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgKmJjKQogewpAQCAtNDUsNiArNDYsNyBAQAogc3RhdGljIGlubGluZSB2b2lkIHRpY2tfYnJvYWRjYXN0X3N3aXRjaF90b19vbmVzaG90KHZvaWQpIHsgfQogc3RhdGljIGlubGluZSB2b2lkIHRpY2tfc2h1dGRvd25fYnJvYWRjYXN0X29uZXNob3QodW5zaWduZWQgaW50ICpjcHVwKSB7IH0KIHN0YXRpYyBpbmxpbmUgaW50IHRpY2tfYnJvYWRjYXN0X29uZXNob3RfYWN0aXZlKHZvaWQpIHsgcmV0dXJuIDA7IH0KK3N0YXRpYyBpbmxpbmUgdm9pZCB0aWNrX2NoZWNrX29uZXNob3RfYnJvYWRjYXN0KGludCBjcHUpIHsgfQogIyBlbmRpZiAvKiAhQlJPQURDQVNUICovCiAKICNlbHNlIC8qICFPTkVTSE9UICovCmRpZmYgLS1naXQgYS9rZXJuZWwvdGltZS90aWNrLXNjaGVkLmMgYi9rZXJuZWwvdGltZS90aWNrLXNjaGVkLmMKaW5kZXggYTRkMjE5My4uMDU4MWMxMSAxMDA2NDQKLS0tIGEva2VybmVsL3RpbWUvdGljay1zY2hlZC5jCisrKyBiL2tlcm5lbC90aW1lL3RpY2stc2NoZWQuYwpAQCAtMTU1LDcgKzE1NSw3IEBACiAJdG91Y2hfc29mdGxvY2t1cF93YXRjaGRvZygpOwogfQogCi12b2lkIHRpY2tfbm9oel9zdG9wX2lkbGUoaW50IGNwdSkKK3N0YXRpYyB2b2lkIHRpY2tfbm9oel9zdG9wX2lkbGUoaW50IGNwdSkKIHsKIAlzdHJ1Y3QgdGlja19zY2hlZCAqdHMgPSAmcGVyX2NwdSh0aWNrX2NwdV9zY2hlZCwgY3B1KTsKIApAQCAtMjcwLDcgKzI3MCw3IEBACiAJbmV4dF9qaWZmaWVzID0gZ2V0X25leHRfdGltZXJfaW50ZXJydXB0KGxhc3RfamlmZmllcyk7CiAJZGVsdGFfamlmZmllcyA9IG5leHRfamlmZmllcyAtIGxhc3RfamlmZmllczsKIAotCWlmIChyY3VfbmVlZHNfY3B1KGNwdSkpCisJaWYgKHJjdV9uZWVkc19jcHUoY3B1KSB8fCBwcmludGtfbmVlZHNfY3B1KGNwdSkpCiAJCWRlbHRhX2ppZmZpZXMgPSAxOwogCS8qCiAJICogRG8gbm90IHN0b3AgdGhlIHRpY2ssIGlmIHdlIGFyZSBvbmx5IG9uZSBvZmYKQEAgLTM3Nyw2ICszNzcsMzIgQEAKIAlyZXR1cm4gdHMtPnNsZWVwX2xlbmd0aDsKIH0KIAorc3RhdGljIHZvaWQgdGlja19ub2h6X3Jlc3RhcnQoc3RydWN0IHRpY2tfc2NoZWQgKnRzLCBrdGltZV90IG5vdykKK3sKKwlocnRpbWVyX2NhbmNlbCgmdHMtPnNjaGVkX3RpbWVyKTsKKwl0cy0+c2NoZWRfdGltZXIuZXhwaXJlcyA9IHRzLT5pZGxlX3RpY2s7CisKKwl3aGlsZSAoMSkgeworCQkvKiBGb3J3YXJkIHRoZSB0aW1lIHRvIGV4cGlyZSBpbiB0aGUgZnV0dXJlICovCisJCWhydGltZXJfZm9yd2FyZCgmdHMtPnNjaGVkX3RpbWVyLCBub3csIHRpY2tfcGVyaW9kKTsKKworCQlpZiAodHMtPm5vaHpfbW9kZSA9PSBOT0haX01PREVfSElHSFJFUykgeworCQkJaHJ0aW1lcl9zdGFydCgmdHMtPnNjaGVkX3RpbWVyLAorCQkJCSAgICAgIHRzLT5zY2hlZF90aW1lci5leHBpcmVzLAorCQkJCSAgICAgIEhSVElNRVJfTU9ERV9BQlMpOworCQkJLyogQ2hlY2ssIGlmIHRoZSB0aW1lciB3YXMgYWxyZWFkeSBpbiB0aGUgcGFzdCAqLworCQkJaWYgKGhydGltZXJfYWN0aXZlKCZ0cy0+c2NoZWRfdGltZXIpKQorCQkJCWJyZWFrOworCQl9IGVsc2UgeworCQkJaWYgKCF0aWNrX3Byb2dyYW1fZXZlbnQodHMtPnNjaGVkX3RpbWVyLmV4cGlyZXMsIDApKQorCQkJCWJyZWFrOworCQl9CisJCS8qIFVwZGF0ZSBqaWZmaWVzIGFuZCByZXJlYWQgdGltZSAqLworCQl0aWNrX2RvX3VwZGF0ZV9qaWZmaWVzNjQobm93KTsKKwkJbm93ID0ga3RpbWVfZ2V0KCk7CisJfQorfQorCiAvKioKICAqIHRpY2tfbm9oel9yZXN0YXJ0X3NjaGVkX3RpY2sgLSByZXN0YXJ0IHRoZSBpZGxlIHRpY2sgZnJvbSB0aGUgaWRsZSB0YXNrCiAgKgpAQCAtNDMwLDI4ICs0NTYsNyBAQAogCSAqLwogCXRzLT50aWNrX3N0b3BwZWQgID0gMDsKIAl0cy0+aWRsZV9leGl0dGltZSA9IG5vdzsKLQlocnRpbWVyX2NhbmNlbCgmdHMtPnNjaGVkX3RpbWVyKTsKLQl0cy0+c2NoZWRfdGltZXIuZXhwaXJlcyA9IHRzLT5pZGxlX3RpY2s7Ci0KLQl3aGlsZSAoMSkgewotCQkvKiBGb3J3YXJkIHRoZSB0aW1lIHRvIGV4cGlyZSBpbiB0aGUgZnV0dXJlICovCi0JCWhydGltZXJfZm9yd2FyZCgmdHMtPnNjaGVkX3RpbWVyLCBub3csIHRpY2tfcGVyaW9kKTsKLQotCQlpZiAodHMtPm5vaHpfbW9kZSA9PSBOT0haX01PREVfSElHSFJFUykgewotCQkJaHJ0aW1lcl9zdGFydCgmdHMtPnNjaGVkX3RpbWVyLAotCQkJCSAgICAgIHRzLT5zY2hlZF90aW1lci5leHBpcmVzLAotCQkJCSAgICAgIEhSVElNRVJfTU9ERV9BQlMpOwotCQkJLyogQ2hlY2ssIGlmIHRoZSB0aW1lciB3YXMgYWxyZWFkeSBpbiB0aGUgcGFzdCAqLwotCQkJaWYgKGhydGltZXJfYWN0aXZlKCZ0cy0+c2NoZWRfdGltZXIpKQotCQkJCWJyZWFrOwotCQl9IGVsc2UgewotCQkJaWYgKCF0aWNrX3Byb2dyYW1fZXZlbnQodHMtPnNjaGVkX3RpbWVyLmV4cGlyZXMsIDApKQotCQkJCWJyZWFrOwotCQl9Ci0JCS8qIFVwZGF0ZSBqaWZmaWVzIGFuZCByZXJlYWQgdGltZSAqLwotCQl0aWNrX2RvX3VwZGF0ZV9qaWZmaWVzNjQobm93KTsKLQkJbm93ID0ga3RpbWVfZ2V0KCk7Ci0JfQorCXRpY2tfbm9oel9yZXN0YXJ0KHRzLCBub3cpOwogCWxvY2FsX2lycV9lbmFibGUoKTsKIH0KIApAQCAtNTAzLDEwICs1MDgsNiBAQAogCXVwZGF0ZV9wcm9jZXNzX3RpbWVzKHVzZXJfbW9kZShyZWdzKSk7CiAJcHJvZmlsZV90aWNrKENQVV9QUk9GSUxJTkcpOwogCi0JLyogRG8gbm90IHJlc3RhcnQsIHdoZW4gd2UgYXJlIGluIHRoZSBpZGxlIGxvb3AgKi8KLQlpZiAodHMtPnRpY2tfc3RvcHBlZCkKLQkJcmV0dXJuOwotCiAJd2hpbGUgKHRpY2tfbm9oel9yZXByb2dyYW0odHMsIG5vdykpIHsKIAkJbm93ID0ga3RpbWVfZ2V0KCk7CiAJCXRpY2tfZG9fdXBkYXRlX2ppZmZpZXM2NChub3cpOwpAQCAtNTUyLDYgKzU1MywyNyBAQAogCSAgICAgICBzbXBfcHJvY2Vzc29yX2lkKCkpOwogfQogCisvKgorICogV2hlbiBOT0haIGlzIGVuYWJsZWQgYW5kIHRoZSB0aWNrIGlzIHN0b3BwZWQsIHdlIG5lZWQgdG8ga2ljayB0aGUKKyAqIHRpY2sgdGltZXIgZnJvbSBpcnFfZW50ZXIoKSBzbyB0aGF0IHRoZSBqaWZmaWVzIHVwZGF0ZSBpcyBrZXB0CisgKiBhbGl2ZSBkdXJpbmcgbG9uZyBydW5uaW5nIHNvZnRpcnFzLiBUaGF0J3MgdWdseSBhcyBoZWxsLCBidXQKKyAqIGNvcnJlY3RuZXNzIGlzIGtleSBldmVuIGlmIHdlIG5lZWQgdG8gZml4IHRoZSBvZmZlbmRpbmcgc29mdGlycSBpbgorICogdGhlIGZpcnN0IHBsYWNlLgorICoKKyAqIE5vdGUsIHRoaXMgaXMgZGlmZmVyZW50IHRvIHRpY2tfbm9oel9yZXN0YXJ0LiBXZSBqdXN0IGtpY2sgdGhlCisgKiB0aW1lciBhbmQgZG8gbm90IHRvdWNoIHRoZSBvdGhlciBtYWdpYyBiaXRzIHdoaWNoIG5lZWQgdG8gYmUgZG9uZQorICogd2hlbiBpZGxlIGlzIGxlZnQuCisgKi8KK3N0YXRpYyB2b2lkIHRpY2tfbm9oel9raWNrX3RpY2soaW50IGNwdSkKK3sKKwlzdHJ1Y3QgdGlja19zY2hlZCAqdHMgPSAmcGVyX2NwdSh0aWNrX2NwdV9zY2hlZCwgY3B1KTsKKworCWlmICghdHMtPnRpY2tfc3RvcHBlZCkKKwkJcmV0dXJuOworCisJdGlja19ub2h6X3Jlc3RhcnQodHMsIGt0aW1lX2dldCgpKTsKK30KKwogI2Vsc2UKIAogc3RhdGljIGlubGluZSB2b2lkIHRpY2tfbm9oel9zd2l0Y2hfdG9fbm9oeih2b2lkKSB7IH0KQEAgLTU1OSw2ICs1ODEsMTkgQEAKICNlbmRpZiAvKiBOT19IWiAqLwogCiAvKgorICogQ2FsbGVkIGZyb20gaXJxX2VudGVyIHRvIG5vdGlmeSBhYm91dCB0aGUgcG9zc2libGUgaW50ZXJydXB0aW9uIG9mIGlkbGUoKQorICovCit2b2lkIHRpY2tfY2hlY2tfaWRsZShpbnQgY3B1KQoreworCXRpY2tfY2hlY2tfb25lc2hvdF9icm9hZGNhc3QoY3B1KTsKKyNpZmRlZiBDT05GSUdfTk9fSFoKKwl0aWNrX25vaHpfc3RvcF9pZGxlKGNwdSk7CisJdGlja19ub2h6X3VwZGF0ZV9qaWZmaWVzKCk7CisJdGlja19ub2h6X2tpY2tfdGljayhjcHUpOworI2VuZGlmCit9CisKKy8qCiAgKiBIaWdoIHJlc29sdXRpb24gdGltZXIgc3BlY2lmaWMgY29kZQogICovCiAjaWZkZWYgQ09ORklHX0hJR0hfUkVTX1RJTUVSUwpAQCAtNjExLDEwICs2NDYsNiBAQAogCQlwcm9maWxlX3RpY2soQ1BVX1BST0ZJTElORyk7CiAJfQogCi0JLyogRG8gbm90IHJlc3RhcnQsIHdoZW4gd2UgYXJlIGluIHRoZSBpZGxlIGxvb3AgKi8KLQlpZiAodHMtPnRpY2tfc3RvcHBlZCkKLQkJcmV0dXJuIEhSVElNRVJfTk9SRVNUQVJUOwotCiAJaHJ0aW1lcl9mb3J3YXJkKHRpbWVyLCBub3csIHRpY2tfcGVyaW9kKTsKIAogCXJldHVybiBIUlRJTUVSX1JFU1RBUlQ7CmRpZmYgLS1naXQgYS9rZXJuZWwvdGltZS90aW1la2VlcGluZy5jIGIva2VybmVsL3RpbWUvdGltZWtlZXBpbmcuYwppbmRleCBlOTFjMjlmLi5lN2FjZmI0IDEwMDY0NAotLS0gYS9rZXJuZWwvdGltZS90aW1la2VlcGluZy5jCisrKyBiL2tlcm5lbC90aW1lL3RpbWVrZWVwaW5nLmMKQEAgLTU4LDI3ICs1OCwyNiBAQAogCiAjaWZkZWYgQ09ORklHX0dFTkVSSUNfVElNRQogLyoqCi0gKiBfX2dldF9uc2VjX29mZnNldCAtIFJldHVybnMgbmFub3NlY29uZHMgc2luY2UgbGFzdCBjYWxsIHRvIHBlcmlvZGljX2hvb2sKKyAqIGNsb2Nrc291cmNlX2ZvcndhcmRfbm93IC0gdXBkYXRlIGNsb2NrIHRvIHRoZSBjdXJyZW50IHRpbWUKICAqCi0gKiBwcml2YXRlIGZ1bmN0aW9uLCBtdXN0IGhvbGQgeHRpbWVfbG9jayBsb2NrIHdoZW4gYmVpbmcKLSAqIGNhbGxlZC4gUmV0dXJucyB0aGUgbnVtYmVyIG9mIG5hbm9zZWNvbmRzIHNpbmNlIHRoZQotICogbGFzdCBjYWxsIHRvIHVwZGF0ZV93YWxsX3RpbWUoKSAoYWRqdXN0ZWQgYnkgTlRQIHNjYWxpbmcpCisgKiBGb3J3YXJkIHRoZSBjdXJyZW50IGNsb2NrIHRvIHVwZGF0ZSBpdHMgc3RhdGUgc2luY2UgdGhlIGxhc3QgY2FsbCB0bworICogdXBkYXRlX3dhbGxfdGltZSgpLiBUaGlzIGlzIHVzZWZ1bCBiZWZvcmUgc2lnbmlmaWNhbnQgY2xvY2sgY2hhbmdlcywKKyAqIGFzIGl0IGF2b2lkcyBoYXZpbmcgdG8gZGVhbCB3aXRoIHRoaXMgdGltZSBvZmZzZXQgZXhwbGljaXRseS4KICAqLwotc3RhdGljIGlubGluZSBzNjQgX19nZXRfbnNlY19vZmZzZXQodm9pZCkKK3N0YXRpYyB2b2lkIGNsb2Nrc291cmNlX2ZvcndhcmRfbm93KHZvaWQpCiB7CiAJY3ljbGVfdCBjeWNsZV9ub3csIGN5Y2xlX2RlbHRhOwotCXM2NCBuc19vZmZzZXQ7CisJczY0IG5zZWM7CiAKLQkvKiByZWFkIGNsb2Nrc291cmNlOiAqLwogCWN5Y2xlX25vdyA9IGNsb2Nrc291cmNlX3JlYWQoY2xvY2spOwotCi0JLyogY2FsY3VsYXRlIHRoZSBkZWx0YSBzaW5jZSB0aGUgbGFzdCB1cGRhdGVfd2FsbF90aW1lOiAqLwogCWN5Y2xlX2RlbHRhID0gKGN5Y2xlX25vdyAtIGNsb2NrLT5jeWNsZV9sYXN0KSAmIGNsb2NrLT5tYXNrOworCWNsb2NrLT5jeWNsZV9sYXN0ID0gY3ljbGVfbm93OwogCi0JLyogY29udmVydCB0byBuYW5vc2Vjb25kczogKi8KLQluc19vZmZzZXQgPSBjeWMybnMoY2xvY2ssIGN5Y2xlX2RlbHRhKTsKKwluc2VjID0gY3ljMm5zKGNsb2NrLCBjeWNsZV9kZWx0YSk7CisJdGltZXNwZWNfYWRkX25zKCZ4dGltZSwgbnNlYyk7CiAKLQlyZXR1cm4gbnNfb2Zmc2V0OworCW5zZWMgPSAoKHM2NCljeWNsZV9kZWx0YSAqIGNsb2NrLT5tdWx0X29yaWcpID4+IGNsb2NrLT5zaGlmdDsKKwljbG9jay0+cmF3X3RpbWUudHZfbnNlYyArPSBuc2VjOwogfQogCiAvKioKQEAgLTg5LDYgKzg4LDcgQEAKICAqLwogdm9pZCBnZXRuc3RpbWVvZmRheShzdHJ1Y3QgdGltZXNwZWMgKnRzKQogeworCWN5Y2xlX3QgY3ljbGVfbm93LCBjeWNsZV9kZWx0YTsKIAl1bnNpZ25lZCBsb25nIHNlcTsKIAlzNjQgbnNlY3M7CiAKQEAgLTk2LDcgKzk2LDE1IEBACiAJCXNlcSA9IHJlYWRfc2VxYmVnaW4oJnh0aW1lX2xvY2spOwogCiAJCSp0cyA9IHh0aW1lOwotCQluc2VjcyA9IF9fZ2V0X25zZWNfb2Zmc2V0KCk7CisKKwkJLyogcmVhZCBjbG9ja3NvdXJjZTogKi8KKwkJY3ljbGVfbm93ID0gY2xvY2tzb3VyY2VfcmVhZChjbG9jayk7CisKKwkJLyogY2FsY3VsYXRlIHRoZSBkZWx0YSBzaW5jZSB0aGUgbGFzdCB1cGRhdGVfd2FsbF90aW1lOiAqLworCQljeWNsZV9kZWx0YSA9IChjeWNsZV9ub3cgLSBjbG9jay0+Y3ljbGVfbGFzdCkgJiBjbG9jay0+bWFzazsKKworCQkvKiBjb252ZXJ0IHRvIG5hbm9zZWNvbmRzOiAqLworCQluc2VjcyA9IGN5YzJucyhjbG9jaywgY3ljbGVfZGVsdGEpOwogCiAJfSB3aGlsZSAocmVhZF9zZXFyZXRyeSgmeHRpbWVfbG9jaywgc2VxKSk7CiAKQEAgLTEyOSwyMiArMTM3LDIyIEBACiAgKi8KIGludCBkb19zZXR0aW1lb2ZkYXkoc3RydWN0IHRpbWVzcGVjICp0dikKIHsKKwlzdHJ1Y3QgdGltZXNwZWMgdHNfZGVsdGE7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQl0aW1lX3Qgd3RtX3NlYywgc2VjID0gdHYtPnR2X3NlYzsKLQlsb25nIHd0bV9uc2VjLCBuc2VjID0gdHYtPnR2X25zZWM7CiAKIAlpZiAoKHVuc2lnbmVkIGxvbmcpdHYtPnR2X25zZWMgPj0gTlNFQ19QRVJfU0VDKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCXdyaXRlX3NlcWxvY2tfaXJxc2F2ZSgmeHRpbWVfbG9jaywgZmxhZ3MpOwogCi0JbnNlYyAtPSBfX2dldF9uc2VjX29mZnNldCgpOworCWNsb2Nrc291cmNlX2ZvcndhcmRfbm93KCk7CiAKLQl3dG1fc2VjICA9IHdhbGxfdG9fbW9ub3RvbmljLnR2X3NlYyArICh4dGltZS50dl9zZWMgLSBzZWMpOwotCXd0bV9uc2VjID0gd2FsbF90b19tb25vdG9uaWMudHZfbnNlYyArICh4dGltZS50dl9uc2VjIC0gbnNlYyk7CisJdHNfZGVsdGEudHZfc2VjID0gdHYtPnR2X3NlYyAtIHh0aW1lLnR2X3NlYzsKKwl0c19kZWx0YS50dl9uc2VjID0gdHYtPnR2X25zZWMgLSB4dGltZS50dl9uc2VjOworCXdhbGxfdG9fbW9ub3RvbmljID0gdGltZXNwZWNfc3ViKHdhbGxfdG9fbW9ub3RvbmljLCB0c19kZWx0YSk7CiAKLQlzZXRfbm9ybWFsaXplZF90aW1lc3BlYygmeHRpbWUsIHNlYywgbnNlYyk7Ci0Jc2V0X25vcm1hbGl6ZWRfdGltZXNwZWMoJndhbGxfdG9fbW9ub3RvbmljLCB3dG1fc2VjLCB3dG1fbnNlYyk7CisJeHRpbWUgPSAqdHY7CisKIAl1cGRhdGVfeHRpbWVfY2FjaGUoMCk7CiAKIAljbG9jay0+ZXJyb3IgPSAwOwpAQCAtMTcwLDIyICsxNzgsMTkgQEAKIHN0YXRpYyB2b2lkIGNoYW5nZV9jbG9ja3NvdXJjZSh2b2lkKQogewogCXN0cnVjdCBjbG9ja3NvdXJjZSAqbmV3OwotCWN5Y2xlX3Qgbm93OwotCXU2NCBuc2VjOwogCiAJbmV3ID0gY2xvY2tzb3VyY2VfZ2V0X25leHQoKTsKIAogCWlmIChjbG9jayA9PSBuZXcpCiAJCXJldHVybjsKIAotCW5ldy0+Y3ljbGVfbGFzdCA9IDA7Ci0Jbm93ID0gY2xvY2tzb3VyY2VfcmVhZChuZXcpOwotCW5zZWMgPSAgX19nZXRfbnNlY19vZmZzZXQoKTsKLQl0aW1lc3BlY19hZGRfbnMoJnh0aW1lLCBuc2VjKTsKKwljbG9ja3NvdXJjZV9mb3J3YXJkX25vdygpOworCisJbmV3LT5yYXdfdGltZSA9IGNsb2NrLT5yYXdfdGltZTsKIAogCWNsb2NrID0gbmV3OwotCWNsb2NrLT5jeWNsZV9sYXN0ID0gbm93OwotCisJY2xvY2stPmN5Y2xlX2xhc3QgPSAwOworCWNsb2NrLT5jeWNsZV9sYXN0ID0gY2xvY2tzb3VyY2VfcmVhZChuZXcpOwogCWNsb2NrLT5lcnJvciA9IDA7CiAJY2xvY2stPnh0aW1lX25zZWMgPSAwOwogCWNsb2Nrc291cmNlX2NhbGN1bGF0ZV9pbnRlcnZhbChjbG9jaywgTlRQX0lOVEVSVkFMX0xFTkdUSCk7CkBAIC0yMDAsMTEgKzIwNSw0NCBAQAogCSAqLwogfQogI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCBjbG9ja3NvdXJjZV9mb3J3YXJkX25vdyh2b2lkKSB7IH0KIHN0YXRpYyBpbmxpbmUgdm9pZCBjaGFuZ2VfY2xvY2tzb3VyY2Uodm9pZCkgeyB9Ci1zdGF0aWMgaW5saW5lIHM2NCBfX2dldF9uc2VjX29mZnNldCh2b2lkKSB7IHJldHVybiAwOyB9CiAjZW5kaWYKIAogLyoqCisgKiBnZXRyYXdtb25vdG9uaWMgLSBSZXR1cm5zIHRoZSByYXcgbW9ub3RvbmljIHRpbWUgaW4gYSB0aW1lc3BlYworICogQHRzOgkJcG9pbnRlciB0byB0aGUgdGltZXNwZWMgdG8gYmUgc2V0CisgKgorICogUmV0dXJucyB0aGUgcmF3IG1vbm90b25pYyB0aW1lIChjb21wbGV0ZWx5IHVuLW1vZGlmaWVkIGJ5IG50cCkKKyAqLwordm9pZCBnZXRyYXdtb25vdG9uaWMoc3RydWN0IHRpbWVzcGVjICp0cykKK3sKKwl1bnNpZ25lZCBsb25nIHNlcTsKKwlzNjQgbnNlY3M7CisJY3ljbGVfdCBjeWNsZV9ub3csIGN5Y2xlX2RlbHRhOworCisJZG8geworCQlzZXEgPSByZWFkX3NlcWJlZ2luKCZ4dGltZV9sb2NrKTsKKworCQkvKiByZWFkIGNsb2Nrc291cmNlOiAqLworCQljeWNsZV9ub3cgPSBjbG9ja3NvdXJjZV9yZWFkKGNsb2NrKTsKKworCQkvKiBjYWxjdWxhdGUgdGhlIGRlbHRhIHNpbmNlIHRoZSBsYXN0IHVwZGF0ZV93YWxsX3RpbWU6ICovCisJCWN5Y2xlX2RlbHRhID0gKGN5Y2xlX25vdyAtIGNsb2NrLT5jeWNsZV9sYXN0KSAmIGNsb2NrLT5tYXNrOworCisJCS8qIGNvbnZlcnQgdG8gbmFub3NlY29uZHM6ICovCisJCW5zZWNzID0gKChzNjQpY3ljbGVfZGVsdGEgKiBjbG9jay0+bXVsdF9vcmlnKSA+PiBjbG9jay0+c2hpZnQ7CisKKwkJKnRzID0gY2xvY2stPnJhd190aW1lOworCisJfSB3aGlsZSAocmVhZF9zZXFyZXRyeSgmeHRpbWVfbG9jaywgc2VxKSk7CisKKwl0aW1lc3BlY19hZGRfbnModHMsIG5zZWNzKTsKK30KK0VYUE9SVF9TWU1CT0woZ2V0cmF3bW9ub3RvbmljKTsKKworCisvKioKICAqIHRpbWVrZWVwaW5nX3ZhbGlkX2Zvcl9ocmVzIC0gQ2hlY2sgaWYgdGltZWtlZXBpbmcgaXMgc3VpdGFibGUgZm9yIGhyZXMKICAqLwogaW50IHRpbWVrZWVwaW5nX3ZhbGlkX2Zvcl9ocmVzKHZvaWQpCkBAIC0yNjUsOCArMzAzLDYgQEAKIHN0YXRpYyBpbnQgdGltZWtlZXBpbmdfc3VzcGVuZGVkOwogLyogdGltZSBpbiBzZWNvbmRzIHdoZW4gc3VzcGVuZCBiZWdhbiAqLwogc3RhdGljIHVuc2lnbmVkIGxvbmcgdGltZWtlZXBpbmdfc3VzcGVuZF90aW1lOwotLyogeHRpbWUgb2Zmc2V0IHdoZW4gd2Ugd2VudCBpbnRvIHN1c3BlbmQgKi8KLXN0YXRpYyBzNjQgdGltZWtlZXBpbmdfc3VzcGVuZF9uc2VjczsKIAogLyoqCiAgKiB0aW1la2VlcGluZ19yZXN1bWUgLSBSZXN1bWVzIHRoZSBnZW5lcmljIHRpbWVrZWVwaW5nIHN1YnN5c3RlbS4KQEAgLTI5Miw4ICszMjgsNiBAQAogCQl3YWxsX3RvX21vbm90b25pYy50dl9zZWMgLT0gc2xlZXBfbGVuZ3RoOwogCQl0b3RhbF9zbGVlcF90aW1lICs9IHNsZWVwX2xlbmd0aDsKIAl9Ci0JLyogTWFrZSBzdXJlIHRoYXQgd2UgaGF2ZSB0aGUgY29ycmVjdCB4dGltZSByZWZlcmVuY2UgKi8KLQl0aW1lc3BlY19hZGRfbnMoJnh0aW1lLCB0aW1la2VlcGluZ19zdXNwZW5kX25zZWNzKTsKIAl1cGRhdGVfeHRpbWVfY2FjaGUoMCk7CiAJLyogcmUtYmFzZSB0aGUgbGFzdCBjeWNsZSB2YWx1ZSAqLwogCWNsb2NrLT5jeWNsZV9sYXN0ID0gMDsKQEAgLTMxOSw4ICszNTMsNyBAQAogCXRpbWVrZWVwaW5nX3N1c3BlbmRfdGltZSA9IHJlYWRfcGVyc2lzdGVudF9jbG9jaygpOwogCiAJd3JpdGVfc2VxbG9ja19pcnFzYXZlKCZ4dGltZV9sb2NrLCBmbGFncyk7Ci0JLyogR2V0IHRoZSBjdXJyZW50IHh0aW1lIG9mZnNldCAqLwotCXRpbWVrZWVwaW5nX3N1c3BlbmRfbnNlY3MgPSBfX2dldF9uc2VjX29mZnNldCgpOworCWNsb2Nrc291cmNlX2ZvcndhcmRfbm93KCk7CiAJdGltZWtlZXBpbmdfc3VzcGVuZGVkID0gMTsKIAl3cml0ZV9zZXF1bmxvY2tfaXJxcmVzdG9yZSgmeHRpbWVfbG9jaywgZmxhZ3MpOwogCkBAIC00NTQsMjMgKzQ4NywyOSBAQAogI2Vsc2UKIAlvZmZzZXQgPSBjbG9jay0+Y3ljbGVfaW50ZXJ2YWw7CiAjZW5kaWYKLQljbG9jay0+eHRpbWVfbnNlYyArPSAoczY0KXh0aW1lLnR2X25zZWMgPDwgY2xvY2stPnNoaWZ0OworCWNsb2NrLT54dGltZV9uc2VjID0gKHM2NCl4dGltZS50dl9uc2VjIDw8IGNsb2NrLT5zaGlmdDsKIAogCS8qIG5vcm1hbGx5IHRoaXMgbG9vcCB3aWxsIHJ1biBqdXN0IG9uY2UsIGhvd2V2ZXIgaW4gdGhlCiAJICogY2FzZSBvZiBsb3N0IG9yIGxhdGUgdGlja3MsIGl0IHdpbGwgYWNjdW11bGF0ZSBjb3JyZWN0bHkuCiAJICovCiAJd2hpbGUgKG9mZnNldCA+PSBjbG9jay0+Y3ljbGVfaW50ZXJ2YWwpIHsKIAkJLyogYWNjdW11bGF0ZSBvbmUgaW50ZXJ2YWwgKi8KLQkJY2xvY2stPnh0aW1lX25zZWMgKz0gY2xvY2stPnh0aW1lX2ludGVydmFsOwotCQljbG9jay0+Y3ljbGVfbGFzdCArPSBjbG9jay0+Y3ljbGVfaW50ZXJ2YWw7CiAJCW9mZnNldCAtPSBjbG9jay0+Y3ljbGVfaW50ZXJ2YWw7CisJCWNsb2NrLT5jeWNsZV9sYXN0ICs9IGNsb2NrLT5jeWNsZV9pbnRlcnZhbDsKIAorCQljbG9jay0+eHRpbWVfbnNlYyArPSBjbG9jay0+eHRpbWVfaW50ZXJ2YWw7CiAJCWlmIChjbG9jay0+eHRpbWVfbnNlYyA+PSAodTY0KU5TRUNfUEVSX1NFQyA8PCBjbG9jay0+c2hpZnQpIHsKIAkJCWNsb2NrLT54dGltZV9uc2VjIC09ICh1NjQpTlNFQ19QRVJfU0VDIDw8IGNsb2NrLT5zaGlmdDsKIAkJCXh0aW1lLnR2X3NlYysrOwogCQkJc2Vjb25kX292ZXJmbG93KCk7CiAJCX0KIAorCQljbG9jay0+cmF3X3RpbWUudHZfbnNlYyArPSBjbG9jay0+cmF3X2ludGVydmFsOworCQlpZiAoY2xvY2stPnJhd190aW1lLnR2X25zZWMgPj0gTlNFQ19QRVJfU0VDKSB7CisJCQljbG9jay0+cmF3X3RpbWUudHZfbnNlYyAtPSBOU0VDX1BFUl9TRUM7CisJCQljbG9jay0+cmF3X3RpbWUudHZfc2VjKys7CisJCX0KKwogCQkvKiBhY2N1bXVsYXRlIGVycm9yIGJldHdlZW4gTlRQIGFuZCBjbG9jayBpbnRlcnZhbCAqLwogCQljbG9jay0+ZXJyb3IgKz0gdGlja19sZW5ndGg7CiAJCWNsb2NrLT5lcnJvciAtPSBjbG9jay0+eHRpbWVfaW50ZXJ2YWwgPDwgKE5UUF9TQ0FMRV9TSElGVCAtIGNsb2NrLT5zaGlmdCk7CkBAIC00NzksOSArNTE4LDEyIEBACiAJLyogY29ycmVjdCB0aGUgY2xvY2sgd2hlbiBOVFAgZXJyb3IgaXMgdG9vIGJpZyAqLwogCWNsb2Nrc291cmNlX2FkanVzdChvZmZzZXQpOwogCi0JLyogc3RvcmUgZnVsbCBuYW5vc2Vjb25kcyBpbnRvIHh0aW1lICovCi0JeHRpbWUudHZfbnNlYyA9IChzNjQpY2xvY2stPnh0aW1lX25zZWMgPj4gY2xvY2stPnNoaWZ0OworCS8qIHN0b3JlIGZ1bGwgbmFub3NlY29uZHMgaW50byB4dGltZSBhZnRlciByb3VuZGluZyBpdCB1cCBhbmQKKwkgKiBhZGQgdGhlIHJlbWFpbmRlciB0byB0aGUgZXJyb3IgZGlmZmVyZW5jZS4KKwkgKi8KKwl4dGltZS50dl9uc2VjID0gKChzNjQpY2xvY2stPnh0aW1lX25zZWMgPj4gY2xvY2stPnNoaWZ0KSArIDE7CiAJY2xvY2stPnh0aW1lX25zZWMgLT0gKHM2NCl4dGltZS50dl9uc2VjIDw8IGNsb2NrLT5zaGlmdDsKKwljbG9jay0+ZXJyb3IgKz0gY2xvY2stPnh0aW1lX25zZWMgPDwgKE5UUF9TQ0FMRV9TSElGVCAtIGNsb2NrLT5zaGlmdCk7CiAKIAl1cGRhdGVfeHRpbWVfY2FjaGUoY3ljMm5zKGNsb2NrLCBvZmZzZXQpKTsKIApkaWZmIC0tZ2l0IGEva2VybmVsL3RpbWUvdGltZXJfbGlzdC5jIGIva2VybmVsL3RpbWUvdGltZXJfbGlzdC5jCmluZGV4IGE0MGUyMGYuLmY2NDI2OTEgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90aW1lL3RpbWVyX2xpc3QuYworKysgYi9rZXJuZWwvdGltZS90aW1lcl9saXN0LmMKQEAgLTQ3LDEzICs0NywxNCBAQAogfQogCiBzdGF0aWMgdm9pZAotcHJpbnRfdGltZXIoc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3QgaHJ0aW1lciAqdGltZXIsIGludCBpZHgsIHU2NCBub3cpCitwcmludF90aW1lcihzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCBocnRpbWVyICp0YWRkciwgc3RydWN0IGhydGltZXIgKnRpbWVyLAorCSAgICBpbnQgaWR4LCB1NjQgbm93KQogewogI2lmZGVmIENPTkZJR19USU1FUl9TVEFUUwogCWNoYXIgdG1wW1RBU0tfQ09NTV9MRU4gKyAxXTsKICNlbmRpZgogCVNFUV9wcmludGYobSwgIiAjJWQ6ICIsIGlkeCk7Ci0JcHJpbnRfbmFtZV9vZmZzZXQobSwgdGltZXIpOworCXByaW50X25hbWVfb2Zmc2V0KG0sIHRhZGRyKTsKIAlTRVFfcHJpbnRmKG0sICIsICIpOwogCXByaW50X25hbWVfb2Zmc2V0KG0sIHRpbWVyLT5mdW5jdGlvbik7CiAJU0VRX3ByaW50ZihtLCAiLCBTOiUwMmx4IiwgdGltZXItPnN0YXRlKTsKQEAgLTk5LDcgKzEwMCw3IEBACiAJCXRtcCA9ICp0aW1lcjsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYmFzZS0+Y3B1X2Jhc2UtPmxvY2ssIGZsYWdzKTsKIAotCQlwcmludF90aW1lcihtLCAmdG1wLCBpLCBub3cpOworCQlwcmludF90aW1lcihtLCB0aW1lciwgJnRtcCwgaSwgbm93KTsKIAkJbmV4dCsrOwogCQlnb3RvIG5leHRfb25lOwogCX0KQEAgLTEwOSw2ICsxMTAsNyBAQAogc3RhdGljIHZvaWQKIHByaW50X2Jhc2Uoc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3QgaHJ0aW1lcl9jbG9ja19iYXNlICpiYXNlLCB1NjQgbm93KQogeworCVNFUV9wcmludGYobSwgIiAgLmJhc2U6ICAgICAgICVwXG4iLCBiYXNlKTsKIAlTRVFfcHJpbnRmKG0sICIgIC5pbmRleDogICAgICAlZFxuIiwKIAkJCWJhc2UtPmluZGV4KTsKIAlTRVFfcHJpbnRmKG0sICIgIC5yZXNvbHV0aW9uOiAlTHUgbnNlY3NcbiIsCkBAIC0xODMsMTIgKzE4NSwxNiBAQAogCiAjaWZkZWYgQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFMKIHN0YXRpYyB2b2lkCi1wcmludF90aWNrZGV2aWNlKHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IHRpY2tfZGV2aWNlICp0ZCkKK3ByaW50X3RpY2tkZXZpY2Uoc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3QgdGlja19kZXZpY2UgKnRkLCBpbnQgY3B1KQogewogCXN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgKmRldiA9IHRkLT5ldnRkZXY7CiAKIAlTRVFfcHJpbnRmKG0sICJcbiIpOwogCVNFUV9wcmludGYobSwgIlRpY2sgRGV2aWNlOiBtb2RlOiAgICAgJWRcbiIsIHRkLT5tb2RlKTsKKwlpZiAoY3B1IDwgMCkKKwkJU0VRX3ByaW50ZihtLCAiQnJvYWRjYXN0IGRldmljZVxuIik7CisJZWxzZQorCQlTRVFfcHJpbnRmKG0sICJQZXIgQ1BVIGRldmljZTogJWRcbiIsIGNwdSk7CiAKIAlTRVFfcHJpbnRmKG0sICJDbG9jayBFdmVudCBEZXZpY2U6ICIpOwogCWlmICghZGV2KSB7CkBAIC0yMjIsNyArMjI4LDcgQEAKIAlpbnQgY3B1OwogCiAjaWZkZWYgQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFNfQlJPQURDQVNUCi0JcHJpbnRfdGlja2RldmljZShtLCB0aWNrX2dldF9icm9hZGNhc3RfZGV2aWNlKCkpOworCXByaW50X3RpY2tkZXZpY2UobSwgdGlja19nZXRfYnJvYWRjYXN0X2RldmljZSgpLCAtMSk7CiAJU0VRX3ByaW50ZihtLCAidGlja19icm9hZGNhc3RfbWFzazogJTA4bHhcbiIsCiAJCSAgIHRpY2tfZ2V0X2Jyb2FkY2FzdF9tYXNrKCktPmJpdHNbMF0pOwogI2lmZGVmIENPTkZJR19USUNLX09ORVNIT1QKQEAgLTIzMiw3ICsyMzgsNyBAQAogCVNFUV9wcmludGYobSwgIlxuIik7CiAjZW5kaWYKIAlmb3JfZWFjaF9vbmxpbmVfY3B1KGNwdSkKLQkJICAgcHJpbnRfdGlja2RldmljZShtLCB0aWNrX2dldF9kZXZpY2UoY3B1KSk7CisJCXByaW50X3RpY2tkZXZpY2UobSwgdGlja19nZXRfZGV2aWNlKGNwdSksIGNwdSk7CiAJU0VRX3ByaW50ZihtLCAiXG4iKTsKIH0KICNlbHNlCkBAIC0yNDQsNyArMjUwLDcgQEAKIAl1NjQgbm93ID0ga3RpbWVfdG9fbnMoa3RpbWVfZ2V0KCkpOwogCWludCBjcHU7CiAKLQlTRVFfcHJpbnRmKG0sICJUaW1lciBMaXN0IFZlcnNpb246IHYwLjNcbiIpOworCVNFUV9wcmludGYobSwgIlRpbWVyIExpc3QgVmVyc2lvbjogdjAuNFxuIik7CiAJU0VRX3ByaW50ZihtLCAiSFJUSU1FUl9NQVhfQ0xPQ0tfQkFTRVM6ICVkXG4iLCBIUlRJTUVSX01BWF9DTE9DS19CQVNFUyk7CiAJU0VRX3ByaW50ZihtLCAibm93IGF0ICVMZCBuc2Vjc1xuIiwgKHVuc2lnbmVkIGxvbmcgbG9uZylub3cpOwogCmRpZmYgLS1naXQgYS9rZXJuZWwvdGltZXIuYyBiL2tlcm5lbC90aW1lci5jCmluZGV4IDAzYmM3ZjEuLjU2YmVjZjMgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90aW1lci5jCisrKyBiL2tlcm5lbC90aW1lci5jCkBAIC05NzgsNiArOTc4LDcgQEAKIAlydW5fbG9jYWxfdGltZXJzKCk7CiAJaWYgKHJjdV9wZW5kaW5nKGNwdSkpCiAJCXJjdV9jaGVja19jYWxsYmFja3MoY3B1LCB1c2VyX3RpY2spOworCXByaW50a190aWNrKCk7CiAJc2NoZWR1bGVyX3RpY2soKTsKIAlydW5fcG9zaXhfY3B1X3RpbWVycyhwKTsKIH0KQEAgLTE0MzUsOSArMTQzNiwxMSBAQAogCUJVR19PTihjcHVfb25saW5lKGNwdSkpOwogCW9sZF9iYXNlID0gcGVyX2NwdSh0dmVjX2Jhc2VzLCBjcHUpOwogCW5ld19iYXNlID0gZ2V0X2NwdV92YXIodHZlY19iYXNlcyk7Ci0KLQlsb2NhbF9pcnFfZGlzYWJsZSgpOwotCXNwaW5fbG9jaygmbmV3X2Jhc2UtPmxvY2spOworCS8qCisJICogVGhlIGNhbGxlciBpcyBnbG9iYWxseSBzZXJpYWxpemVkIGFuZCBub2JvZHkgZWxzZQorCSAqIHRha2VzIHR3byBsb2NrcyBhdCBvbmNlLCBkZWFkbG9jayBpcyBub3QgcG9zc2libGUuCisJICovCisJc3Bpbl9sb2NrX2lycSgmbmV3X2Jhc2UtPmxvY2spOwogCXNwaW5fbG9ja19uZXN0ZWQoJm9sZF9iYXNlLT5sb2NrLCBTSU5HTEVfREVQVEhfTkVTVElORyk7CiAKIAlCVUdfT04ob2xkX2Jhc2UtPnJ1bm5pbmdfdGltZXIpOwpAQCAtMTQ1Miw4ICsxNDU1LDcgQEAKIAl9CiAKIAlzcGluX3VubG9jaygmb2xkX2Jhc2UtPmxvY2spOwotCXNwaW5fdW5sb2NrKCZuZXdfYmFzZS0+bG9jayk7Ci0JbG9jYWxfaXJxX2VuYWJsZSgpOworCXNwaW5fdW5sb2NrX2lycSgmbmV3X2Jhc2UtPmxvY2spOwogCXB1dF9jcHVfdmFyKHR2ZWNfYmFzZXMpOwogfQogI2VuZGlmIC8qIENPTkZJR19IT1RQTFVHX0NQVSAqLwpkaWZmIC0tZ2l0IGEva2VybmVsL3V0c25hbWVfc3lzY3RsLmMgYi9rZXJuZWwvdXRzbmFtZV9zeXNjdGwuYwppbmRleCA0YWI5NjU5Li4zYjM0YjM1IDEwMDY0NAotLS0gYS9rZXJuZWwvdXRzbmFtZV9zeXNjdGwuYworKysgYi9rZXJuZWwvdXRzbmFtZV9zeXNjdGwuYwpAQCAtNjAsNyArNjAsNyBAQAogCiAjaWZkZWYgQ09ORklHX1NZU0NUTF9TWVNDQUxMCiAvKiBUaGUgZ2VuZXJpYyBzdHJpbmcgc3RyYXRlZ3kgcm91dGluZTogKi8KLXN0YXRpYyBpbnQgc3lzY3RsX3V0c19zdHJpbmcoY3RsX3RhYmxlICp0YWJsZSwgaW50IF9fdXNlciAqbmFtZSwgaW50IG5sZW4sCitzdGF0aWMgaW50IHN5c2N0bF91dHNfc3RyaW5nKGN0bF90YWJsZSAqdGFibGUsCiAJCSAgdm9pZCBfX3VzZXIgKm9sZHZhbCwgc2l6ZV90IF9fdXNlciAqb2xkbGVucCwKIAkJICB2b2lkIF9fdXNlciAqbmV3dmFsLCBzaXplX3QgbmV3bGVuKQogewpAQCAtNjksOCArNjksNyBAQAogCXdyaXRlID0gbmV3dmFsICYmIG5ld2xlbjsKIAltZW1jcHkoJnV0c190YWJsZSwgdGFibGUsIHNpemVvZih1dHNfdGFibGUpKTsKIAl1dHNfdGFibGUuZGF0YSA9IGdldF91dHModGFibGUsIHdyaXRlKTsKLQlyID0gc3lzY3RsX3N0cmluZygmdXRzX3RhYmxlLCBuYW1lLCBubGVuLAotCQlvbGR2YWwsIG9sZGxlbnAsIG5ld3ZhbCwgbmV3bGVuKTsKKwlyID0gc3lzY3RsX3N0cmluZygmdXRzX3RhYmxlLCBvbGR2YWwsIG9sZGxlbnAsIG5ld3ZhbCwgbmV3bGVuKTsKIAlwdXRfdXRzKHRhYmxlLCB3cml0ZSwgdXRzX3RhYmxlLmRhdGEpOwogCXJldHVybiByOwogfQpkaWZmIC0tZ2l0IGEva2VybmVsL3dhaXQuYyBiL2tlcm5lbC93YWl0LmMKaW5kZXggYzI3NWM1Ni4uY2Q4NzEzMSAxMDA2NDQKLS0tIGEva2VybmVsL3dhaXQuYworKysgYi9rZXJuZWwvd2FpdC5jCkBAIC03MiwxMiArNzIsNyBAQAogCXNwaW5fbG9ja19pcnFzYXZlKCZxLT5sb2NrLCBmbGFncyk7CiAJaWYgKGxpc3RfZW1wdHkoJndhaXQtPnRhc2tfbGlzdCkpCiAJCV9fYWRkX3dhaXRfcXVldWUocSwgd2FpdCk7Ci0JLyoKLQkgKiBkb24ndCBhbHRlciB0aGUgdGFzayBzdGF0ZSBpZiB0aGlzIGlzIGp1c3QgZ29pbmcgdG8KLQkgKiBxdWV1ZSBhbiBhc3luYyB3YWl0IHF1ZXVlIGNhbGxiYWNrCi0JICovCi0JaWYgKGlzX3N5bmNfd2FpdCh3YWl0KSkKLQkJc2V0X2N1cnJlbnRfc3RhdGUoc3RhdGUpOworCXNldF9jdXJyZW50X3N0YXRlKHN0YXRlKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZxLT5sb2NrLCBmbGFncyk7CiB9CiBFWFBPUlRfU1lNQk9MKHByZXBhcmVfdG9fd2FpdCk7CkBAIC05MSwxMiArODYsNyBAQAogCXNwaW5fbG9ja19pcnFzYXZlKCZxLT5sb2NrLCBmbGFncyk7CiAJaWYgKGxpc3RfZW1wdHkoJndhaXQtPnRhc2tfbGlzdCkpCiAJCV9fYWRkX3dhaXRfcXVldWVfdGFpbChxLCB3YWl0KTsKLQkvKgotCSAqIGRvbid0IGFsdGVyIHRoZSB0YXNrIHN0YXRlIGlmIHRoaXMgaXMganVzdCBnb2luZyB0bwotIAkgKiBxdWV1ZSBhbiBhc3luYyB3YWl0IHF1ZXVlIGNhbGxiYWNrCi0JICovCi0JaWYgKGlzX3N5bmNfd2FpdCh3YWl0KSkKLQkJc2V0X2N1cnJlbnRfc3RhdGUoc3RhdGUpOworCXNldF9jdXJyZW50X3N0YXRlKHN0YXRlKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZxLT5sb2NrLCBmbGFncyk7CiB9CiBFWFBPUlRfU1lNQk9MKHByZXBhcmVfdG9fd2FpdF9leGNsdXNpdmUpOwpkaWZmIC0tZ2l0IGEva2VybmVsL3dvcmtxdWV1ZS5jIGIva2VybmVsL3dvcmtxdWV1ZS5jCmluZGV4IDQwNDhlOTIuLjcxNGFmYWQgMTAwNjQ0Ci0tLSBhL2tlcm5lbC93b3JrcXVldWUuYworKysgYi9rZXJuZWwvd29ya3F1ZXVlLmMKQEAgLTksNyArOSw3IEBACiAgKiBEZXJpdmVkIGZyb20gdGhlIHRhc2txdWV1ZS9rZXZlbnRkIGNvZGUgYnk6CiAgKgogICogICBEYXZpZCBXb29kaG91c2UgPGR3bXcyQGluZnJhZGVhZC5vcmc+Ci0gKiAgIEFuZHJldyBNb3J0b24gPGFuZHJld21AdW93LmVkdS5hdT4KKyAqICAgQW5kcmV3IE1vcnRvbgogICogICBLYWkgUGV0emtlIDx3cHBAbWFyaWUucGh5c2lrLnR1LWJlcmxpbi5kZT4KICAqICAgVGhlb2RvcmUgVHMnbyA8dHl0c29AbWl0LmVkdT4KICAqCmRpZmYgLS1naXQgYS9saWIvS2NvbmZpZyBiL2xpYi9LY29uZmlnCmluZGV4IGM3YWQ3YTUuLjg1Y2Y3ZWEgMTAwNjQ0Ci0tLSBhL2xpYi9LY29uZmlnCisrKyBiL2xpYi9LY29uZmlnCkBAIC04LDEwICs4LDEwIEBACiAJdHJpc3RhdGUKIAogY29uZmlnIEdFTkVSSUNfRklORF9GSVJTVF9CSVQKLQlkZWZfYm9vbCBuCisJYm9vbAogCiBjb25maWcgR0VORVJJQ19GSU5EX05FWFRfQklUCi0JZGVmX2Jvb2wgbgorCWJvb2wKIAogY29uZmlnIENSQ19DQ0lUVAogCXRyaXN0YXRlICJDUkMtQ0NJVFQgZnVuY3Rpb25zIgpkaWZmIC0tZ2l0IGEvbGliL0tjb25maWcuZGVidWcgYi9saWIvS2NvbmZpZy5kZWJ1ZwppbmRleCBhYTgxZDI4Li5iMGYyMzllIDEwMDY0NAotLS0gYS9saWIvS2NvbmZpZy5kZWJ1ZworKysgYi9saWIvS2NvbmZpZy5kZWJ1ZwpAQCAtNjUyLDYgKzY1MiwxMSBAQAogCWRlcGVuZHMgb24gQkxPQ0sKIAlkZWZhdWx0IG4KIAloZWxwCisJICBCSUcgRkFUIFdBUk5JTkc6IEVOQUJMSU5HIFRISVMgT1BUSU9OIE1JR0hUIEJSRUFLIEJPT1RJTkcgT04KKwkgIFNPTUUgRElTVFJJQlVUSU9OUy4gIERPIE5PVCBFTkFCTEUgVEhJUyBVTkxFU1MgWU9VIEtOT1cgV0hBVAorCSAgWU9VIEFSRSBET0lORy4gIERpc3Ryb3MsIHBsZWFzZSBlbmFibGUgdGhpcyBhbmQgZml4IHdoYXRldmVyCisJICBpcyBicm9rZW4uCisKIAkgIENvbnZlbnRpb25hbGx5LCBibG9jayBkZXZpY2UgbnVtYmVycyBhcmUgYWxsb2NhdGVkIGZyb20KIAkgIHByZWRldGVybWluZWQgY29udGlndW91cyBhcmVhLiAgSG93ZXZlciwgZXh0ZW5kZWQgYmxvY2sgYXJlYQogCSAgbWF5IGludHJvZHVjZSBub24tY29udGlndW91cyBibG9jayBkZXZpY2UgbnVtYmVycy4gIFRoaXMKQEAgLTgwNyw2ICs4MTIsNjEgQEAKIAogCSAgU2F5IE4gaWYgeW91IGFyZSB1bnN1cmUuCiAKK2NvbmZpZyBEWU5BTUlDX1BSSU5US19ERUJVRworCWJvb2wgIkVuYWJsZSBkeW5hbWljIHByaW50aygpIGNhbGwgc3VwcG9ydCIKKwlkZWZhdWx0IG4KKwlkZXBlbmRzIG9uIFBSSU5USworCXNlbGVjdCBQUklOVEtfREVCVUcKKwloZWxwCisKKwkgIENvbXBpbGVzIGRlYnVnIGxldmVsIG1lc3NhZ2VzIGludG8gdGhlIGtlcm5lbCwgd2hpY2ggd291bGQgbm90CisJICBvdGhlcndpc2UgYmUgYXZhaWxhYmxlIGF0IHJ1bnRpbWUuIFRoZXNlIG1lc3NhZ2VzIGNhbiB0aGVuIGJlCisJICBlbmFibGVkL2Rpc2FibGVkIG9uIGEgcGVyIG1vZHVsZSBiYXNpcy4gVGhpcyBtZWNoYW5pc20gaW1wbGljaXRseQorCSAgZW5hYmxlcyBhbGwgcHJfZGVidWcoKSBhbmQgZGV2X2RiZygpIGNhbGxzLiBUaGUgaW1wYWN0IG9mIHRoaXMKKwkgIGNvbXBpbGUgb3B0aW9uIGlzIGEgbGFyZ2VyIGtlcm5lbCB0ZXh0IHNpemUgb2YgYWJvdXQgMiUuCisKKwkgIFVzYWdlOgorCisJICBEeW5hbWljIGRlYnVnZ2luZyBpcyBjb250cm9sbGVkIGJ5IHRoZSBkZWJ1Z2ZzIGZpbGUsCisJICBkeW5hbWljX3ByaW50ay9tb2R1bGVzLiBUaGlzIGZpbGUgY29udGFpbnMgYSBsaXN0IG9mIHRoZSBtb2R1bGVzIHRoYXQKKwkgIGNhbiBiZSBlbmFibGVkLiBUaGUgZm9ybWF0IG9mIHRoZSBmaWxlIGlzIHRoZSBtb2R1bGUgbmFtZSwgZm9sbG93ZWQKKwkgIGJ5IGEgc2V0IG9mIGZsYWdzIHRoYXQgY2FuIGJlIGVuYWJsZWQuIFRoZSBmaXJzdCBmbGFnIGlzIGFsd2F5cyB0aGUKKwkgICdlbmFibGVkJyBmbGFnLiBGb3IgZXhhbXBsZToKKworCQk8bW9kdWxlX25hbWU+IDxlbmFibGVkPTAvMT4KKwkJCQkuCisJCQkJLgorCQkJCS4KKworCSAgPG1vZHVsZV9uYW1lPiA6IE5hbWUgb2YgdGhlIG1vZHVsZSBpbiB3aGljaCB0aGUgZGVidWcgY2FsbCByZXNpZGVzCisJICA8ZW5hYmxlZD0wLzE+IDogd2hldGhlciB0aGUgbWVzc2FnZXMgYXJlIGVuYWJsZWQgb3Igbm90CisKKwkgIEZyb20gYSBsaXZlIHN5c3RlbToKKworCQlzbmRfaGRhX2ludGVsIGVuYWJsZWQ9MAorCQlmaXh1cCBlbmFibGVkPTAKKwkJZHJpdmVyIGVuYWJsZWQ9MAorCisJICBFbmFibGUgYSBtb2R1bGU6CisKKwkgIAkkZWNobyAic2V0IGVuYWJsZWQ9MSA8bW9kdWxlX25hbWU+IiA+IGR5bmFtaWNfcHJpbnRrL21vZHVsZXMKKworCSAgRGlzYWJsZSBhIG1vZHVsZToKKworCSAgCSRlY2hvICJzZXQgZW5hYmxlZD0wIDxtb2R1bGVfbmFtZT4iID4gZHluYW1pY19wcmludGsvbW9kdWxlcworCisJICBFbmFibGUgYWxsIG1vZHVsZXM6CisKKwkJJGVjaG8gInNldCBlbmFibGVkPTEgYWxsIiA+IGR5bmFtaWNfcHJpbnRrL21vZHVsZXMKKworCSAgRGlzYWJsZSBhbGwgbW9kdWxlczoKKworCQkkZWNobyAic2V0IGVuYWJsZWQ9MCBhbGwiID4gZHluYW1pY19wcmludGsvbW9kdWxlcworCisJICBGaW5hbGx5LCBwYXNzaW5nICJkeW5hbWljX3ByaW50ayIgYXQgdGhlIGNvbW1hbmQgbGluZSBlbmFibGVzCisJICBkZWJ1Z2dpbmcgZm9yIGFsbCBtb2R1bGVzLiBUaGlzIG1vZGUgY2FuIGJlIHR1cm5lZCBvZmYgdmlhIHRoZSBhYm92ZQorCSAgZGlzYWJsZSBjb21tYW5kLgorCiBzb3VyY2UgInNhbXBsZXMvS2NvbmZpZyIKIAogc291cmNlICJsaWIvS2NvbmZpZy5rZ2RiIgpkaWZmIC0tZ2l0IGEvbGliL01ha2VmaWxlIGIvbGliL01ha2VmaWxlCmluZGV4IDQ0MDAxYWYuLjE2ZmVhYWIgMTAwNjQ0Ci0tLSBhL2xpYi9NYWtlZmlsZQorKysgYi9saWIvTWFrZWZpbGUKQEAgLTgxLDYgKzgxLDggQEAKIAogb2JqLSQoQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0spICs9IHN5c2NhbGwubwogCitvYmotJChDT05GSUdfRFlOQU1JQ19QUklOVEtfREVCVUcpICs9IGR5bmFtaWNfcHJpbnRrLm8KKwogaG9zdHByb2dzLXkJOj0gZ2VuX2NyYzMydGFibGUKIGNsZWFuLWZpbGVzCTo9IGNyYzMydGFibGUuaAogCmRpZmYgLS1naXQgYS9saWIvYml0bWFwLmMgYi9saWIvYml0bWFwLmMKaW5kZXggMDZmYjU3Yy4uNDgyZGY5NCAxMDA2NDQKLS0tIGEvbGliL2JpdG1hcC5jCisrKyBiL2xpYi9iaXRtYXAuYwpAQCAtMzE2LDE3ICszMTYsNiBAQAogRVhQT1JUX1NZTUJPTChiaXRtYXBfc2NucHJpbnRmKTsKIAogLyoqCi0gKiBiaXRtYXBfc2NucHJpbnRmX2xlbiAtIHJldHVybiBidWZmZXIgbGVuZ3RoIG5lZWRlZCB0byBjb252ZXJ0Ci0gKiBiaXRtYXAgdG8gYW4gQVNDSUkgaGV4IHN0cmluZwotICogQG5yX2JpdHM6IG51bWJlciBvZiBiaXRzIHRvIGJlIGNvbnZlcnRlZAotICovCi1pbnQgYml0bWFwX3NjbnByaW50Zl9sZW4odW5zaWduZWQgaW50IG5yX2JpdHMpCi17Ci0JdW5zaWduZWQgaW50IG5yX25pYmJsZXMgPSBBTElHTihucl9iaXRzLCA0KSAvIDQ7Ci0JcmV0dXJuIG5yX25pYmJsZXMgKyBBTElHTihucl9uaWJibGVzLCBDSFVOS1NaIC8gNCkgLyAoQ0hVTktTWiAvIDQpIC0gMTsKLX0KLQotLyoqCiAgKiBfX2JpdG1hcF9wYXJzZSAtIGNvbnZlcnQgYW4gQVNDSUkgaGV4IHN0cmluZyBpbnRvIGEgYml0bWFwLgogICogQGJ1ZjogcG9pbnRlciB0byBidWZmZXIgY29udGFpbmluZyBzdHJpbmcuCiAgKiBAYnVmbGVuOiBidWZmZXIgc2l6ZSBpbiBieXRlcy4gIElmIHN0cmluZyBpcyBzbWFsbGVyIHRoYW4gdGhpcwpkaWZmIC0tZ2l0IGEvbGliL2R5bmFtaWNfcHJpbnRrLmMgYi9saWIvZHluYW1pY19wcmludGsuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNjQwZjg3Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2R5bmFtaWNfcHJpbnRrLmMKQEAgLTAsMCArMSw0MTggQEAKKy8qCisgKiBsaWIvZHluYW1pY19wcmludGsuYworICoKKyAqIG1ha2UgcHJfZGVidWcoKS9kZXZfZGJnKCkgY2FsbHMgcnVudGltZSBjb25maWd1cmFibGUgYmFzZWQgdXBvbiB0aGVpcgorICogdGhlaXIgc291cmNlIG1vZHVsZS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggUmVkIEhhdCwgSW5jLiwgSmFzb24gQmFyb24gPGpiYXJvbkByZWRoYXQuY29tPgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CisjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWJ1Z2ZzLmg+CisjaW5jbHVkZSA8bGludXgvZnMuaD4KKworZXh0ZXJuIHN0cnVjdCBtb2RfZGVidWcgX19zdGFydF9fX3ZlcmJvc2VbXTsKK2V4dGVybiBzdHJ1Y3QgbW9kX2RlYnVnIF9fc3RvcF9fX3ZlcmJvc2VbXTsKKworc3RydWN0IGRlYnVnX25hbWUgeworCXN0cnVjdCBobGlzdF9ub2RlIGhsaXN0OworCXN0cnVjdCBobGlzdF9ub2RlIGhsaXN0MjsKKwlpbnQgaGFzaDE7CisJaW50IGhhc2gyOworCWNoYXIgKm5hbWU7CisJaW50IGVuYWJsZTsKKwlpbnQgdHlwZTsKK307CisKK3N0YXRpYyBpbnQgbnJfZW50cmllczsKK3N0YXRpYyBpbnQgbnVtX2VuYWJsZWQ7CitpbnQgZHluYW1pY19lbmFibGVkID0gRFlOQU1JQ19FTkFCTEVEX05PTkU7CitzdGF0aWMgc3RydWN0IGhsaXN0X2hlYWQgbW9kdWxlX3RhYmxlW0RFQlVHX0hBU0hfVEFCTEVfU0laRV0gPQorCXsgWzAgLi4uIERFQlVHX0hBU0hfVEFCTEVfU0laRS0xXSA9IEhMSVNUX0hFQURfSU5JVCB9Oworc3RhdGljIHN0cnVjdCBobGlzdF9oZWFkIG1vZHVsZV90YWJsZTJbREVCVUdfSEFTSF9UQUJMRV9TSVpFXSA9CisJeyBbMCAuLi4gREVCVUdfSEFTSF9UQUJMRV9TSVpFLTFdID0gSExJU1RfSEVBRF9JTklUIH07CitzdGF0aWMgREVDTEFSRV9NVVRFWChkZWJ1Z19saXN0X211dGV4KTsKKworLyogZHluYW1pY19wcmludGtfZW5hYmxlZCwgYW5kIGR5bmFtaWNfcHJpbnRrX2VuYWJsZWQyIGFyZSBiaXRtYXNrcyBpbiB3aGljaAorICogYml0IG4gaXMgc2V0IHRvIDEgaWYgYW55IG1vZG5hbWUgaGFzaGVzIGludG8gdGhlIGJ1Y2tldCBuLCAwIG90aGVyd2lzZS4gVGhleQorICogdXNlIGluZGVwZW5kZW50IGhhc2ggZnVuY3Rpb25zLCB0byByZWR1Y2UgdGhlIGNoYW5jZSBvZiBmYWxzZSBwb3NpdGl2ZXMuCisgKi8KK2xvbmcgbG9uZyBkeW5hbWljX3ByaW50a19lbmFibGVkOworRVhQT1JUX1NZTUJPTF9HUEwoZHluYW1pY19wcmludGtfZW5hYmxlZCk7Citsb25nIGxvbmcgZHluYW1pY19wcmludGtfZW5hYmxlZDI7CitFWFBPUlRfU1lNQk9MX0dQTChkeW5hbWljX3ByaW50a19lbmFibGVkMik7CisKKy8qIHJldHVybnMgdGhlIGRlYnVnIG1vZHVsZSBwb2ludGVyLiAqLworc3RhdGljIHN0cnVjdCBkZWJ1Z19uYW1lICpmaW5kX2RlYnVnX21vZHVsZShjaGFyICptb2R1bGVfbmFtZSkKK3sKKwlpbnQgaTsKKwlzdHJ1Y3QgaGxpc3RfaGVhZCAqaGVhZDsKKwlzdHJ1Y3QgaGxpc3Rfbm9kZSAqbm9kZTsKKwlzdHJ1Y3QgZGVidWdfbmFtZSAqZWxlbWVudDsKKworCWVsZW1lbnQgPSBOVUxMOworCWZvciAoaSA9IDA7IGkgPCBERUJVR19IQVNIX1RBQkxFX1NJWkU7IGkrKykgeworCQloZWFkID0gJm1vZHVsZV90YWJsZVtpXTsKKwkJaGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGVsZW1lbnQsIG5vZGUsIGhlYWQsIGhsaXN0KQorCQkJaWYgKCFzdHJjbXAoZWxlbWVudC0+bmFtZSwgbW9kdWxlX25hbWUpKQorCQkJCXJldHVybiBlbGVtZW50OworCX0KKwlyZXR1cm4gTlVMTDsKK30KKworLyogcmV0dXJucyB0aGUgZGVidWcgbW9kdWxlIHBvaW50ZXIuICovCitzdGF0aWMgc3RydWN0IGRlYnVnX25hbWUgKmZpbmRfZGVidWdfbW9kdWxlX2hhc2goY2hhciAqbW9kdWxlX25hbWUsIGludCBoYXNoKQoreworCXN0cnVjdCBobGlzdF9oZWFkICpoZWFkOworCXN0cnVjdCBobGlzdF9ub2RlICpub2RlOworCXN0cnVjdCBkZWJ1Z19uYW1lICplbGVtZW50OworCisJZWxlbWVudCA9IE5VTEw7CisJaGVhZCA9ICZtb2R1bGVfdGFibGVbaGFzaF07CisJaGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGVsZW1lbnQsIG5vZGUsIGhlYWQsIGhsaXN0KQorCQlpZiAoIXN0cmNtcChlbGVtZW50LT5uYW1lLCBtb2R1bGVfbmFtZSkpCisJCQlyZXR1cm4gZWxlbWVudDsKKwlyZXR1cm4gTlVMTDsKK30KKworLyogY2FsbGVyIG11c3QgaG9sZCBtdXRleCovCitzdGF0aWMgaW50IF9fYWRkX2RlYnVnX21vZHVsZShjaGFyICptb2RfbmFtZSwgaW50IGhhc2gsIGludCBoYXNoMikKK3sKKwlzdHJ1Y3QgZGVidWdfbmFtZSAqbmV3OworCWNoYXIgKm1vZHVsZV9uYW1lOworCWludCByZXQgPSAwOworCisJaWYgKGZpbmRfZGVidWdfbW9kdWxlKG1vZF9uYW1lKSkgeworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIG91dDsKKwl9CisJbW9kdWxlX25hbWUgPSBrbWFsbG9jKHN0cmxlbihtb2RfbmFtZSkgKyAxLCBHRlBfS0VSTkVMKTsKKwlpZiAoIW1vZHVsZV9uYW1lKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gb3V0OworCX0KKwltb2R1bGVfbmFtZSA9IHN0cmNweShtb2R1bGVfbmFtZSwgbW9kX25hbWUpOworCW1vZHVsZV9uYW1lW3N0cmxlbihtb2RfbmFtZSldID0gJ1wwJzsKKwluZXcgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgZGVidWdfbmFtZSksIEdGUF9LRVJORUwpOworCWlmICghbmV3KSB7CisJCWtmcmVlKG1vZHVsZV9uYW1lKTsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CisJfQorCUlOSVRfSExJU1RfTk9ERSgmbmV3LT5obGlzdCk7CisJSU5JVF9ITElTVF9OT0RFKCZuZXctPmhsaXN0Mik7CisJbmV3LT5uYW1lID0gbW9kdWxlX25hbWU7CisJbmV3LT5oYXNoMSA9IGhhc2g7CisJbmV3LT5oYXNoMiA9IGhhc2gyOworCWhsaXN0X2FkZF9oZWFkX3JjdSgmbmV3LT5obGlzdCwgJm1vZHVsZV90YWJsZVtoYXNoXSk7CisJaGxpc3RfYWRkX2hlYWRfcmN1KCZuZXctPmhsaXN0MiwgJm1vZHVsZV90YWJsZTJbaGFzaDJdKTsKKwlucl9lbnRyaWVzKys7CitvdXQ6CisJcmV0dXJuIHJldDsKK30KKworaW50IHVucmVnaXN0ZXJfZHluYW1pY19kZWJ1Z19tb2R1bGUoY2hhciAqbW9kX25hbWUpCit7CisJc3RydWN0IGRlYnVnX25hbWUgKmVsZW1lbnQ7CisJaW50IHJldCA9IDA7CisKKwlkb3duKCZkZWJ1Z19saXN0X211dGV4KTsKKwllbGVtZW50ID0gZmluZF9kZWJ1Z19tb2R1bGUobW9kX25hbWUpOworCWlmICghZWxlbWVudCkgeworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIG91dDsKKwl9CisJaGxpc3RfZGVsX3JjdSgmZWxlbWVudC0+aGxpc3QpOworCWhsaXN0X2RlbF9yY3UoJmVsZW1lbnQtPmhsaXN0Mik7CisJc3luY2hyb25pemVfcmN1KCk7CisJa2ZyZWUoZWxlbWVudC0+bmFtZSk7CisJaWYgKGVsZW1lbnQtPmVuYWJsZSkKKwkJbnVtX2VuYWJsZWQtLTsKKwlrZnJlZShlbGVtZW50KTsKKwlucl9lbnRyaWVzLS07CitvdXQ6CisJdXAoJmRlYnVnX2xpc3RfbXV0ZXgpOworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTF9HUEwodW5yZWdpc3Rlcl9keW5hbWljX2RlYnVnX21vZHVsZSk7CisKK2ludCByZWdpc3Rlcl9keW5hbWljX2RlYnVnX21vZHVsZShjaGFyICptb2RfbmFtZSwgaW50IHR5cGUsIGNoYXIgKnNoYXJlX25hbWUsCisJCQkJCWNoYXIgKmZsYWdzLCBpbnQgaGFzaCwgaW50IGhhc2gyKQoreworCXN0cnVjdCBkZWJ1Z19uYW1lICplbGVtOworCWludCByZXQgPSAwOworCisJZG93bigmZGVidWdfbGlzdF9tdXRleCk7CisJZWxlbSA9IGZpbmRfZGVidWdfbW9kdWxlKG1vZF9uYW1lKTsKKwlpZiAoIWVsZW0pIHsKKwkJaWYgKF9fYWRkX2RlYnVnX21vZHVsZShtb2RfbmFtZSwgaGFzaCwgaGFzaDIpKQorCQkJZ290byBvdXQ7CisJCWVsZW0gPSBmaW5kX2RlYnVnX21vZHVsZShtb2RfbmFtZSk7CisJCWlmIChkeW5hbWljX2VuYWJsZWQgPT0gRFlOQU1JQ19FTkFCTEVEX0FMTCAmJgorCQkJCSFzdHJjbXAobW9kX25hbWUsIHNoYXJlX25hbWUpKSB7CisJCQllbGVtLT5lbmFibGUgPSB0cnVlOworCQkJbnVtX2VuYWJsZWQrKzsKKwkJfQorCX0KKwllbGVtLT50eXBlIHw9IHR5cGU7CitvdXQ6CisJdXAoJmRlYnVnX2xpc3RfbXV0ZXgpOworCXJldHVybiByZXQ7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChyZWdpc3Rlcl9keW5hbWljX2RlYnVnX21vZHVsZSk7CisKK2ludCBfX2R5bmFtaWNfZGJnX2VuYWJsZWRfaGVscGVyKGNoYXIgKm1vZF9uYW1lLCBpbnQgdHlwZSwgaW50IHZhbHVlLCBpbnQgaGFzaCkKK3sKKwlzdHJ1Y3QgZGVidWdfbmFtZSAqZWxlbTsKKwlpbnQgcmV0ID0gMDsKKworCWlmIChkeW5hbWljX2VuYWJsZWQgPT0gRFlOQU1JQ19FTkFCTEVEX0FMTCkKKwkJcmV0dXJuIDE7CisJcmN1X3JlYWRfbG9jaygpOworCWVsZW0gPSBmaW5kX2RlYnVnX21vZHVsZV9oYXNoKG1vZF9uYW1lLCBoYXNoKTsKKwlpZiAoZWxlbSAmJiBlbGVtLT5lbmFibGUpCisJCXJldCA9IDE7CisJcmN1X3JlYWRfdW5sb2NrKCk7CisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKF9fZHluYW1pY19kYmdfZW5hYmxlZF9oZWxwZXIpOworCitzdGF0aWMgdm9pZCBzZXRfYWxsKGJvb2wgZW5hYmxlKQoreworCXN0cnVjdCBkZWJ1Z19uYW1lICplOworCXN0cnVjdCBobGlzdF9ub2RlICpub2RlOworCWludCBpOworCWxvbmcgbG9uZyBlbmFibGVfbWFzazsKKworCWZvciAoaSA9IDA7IGkgPCBERUJVR19IQVNIX1RBQkxFX1NJWkU7IGkrKykgeworCQlpZiAobW9kdWxlX3RhYmxlW2ldLmZpcnN0ICE9IE5VTEwpIHsKKwkJCWhsaXN0X2Zvcl9lYWNoX2VudHJ5KGUsIG5vZGUsICZtb2R1bGVfdGFibGVbaV0sIGhsaXN0KSB7CisJCQkJZS0+ZW5hYmxlID0gZW5hYmxlOworCQkJfQorCQl9CisJfQorCWlmIChlbmFibGUpCisJCWVuYWJsZV9tYXNrID0gVUxMT05HX01BWDsKKwllbHNlCisJCWVuYWJsZV9tYXNrID0gMDsKKwlkeW5hbWljX3ByaW50a19lbmFibGVkID0gZW5hYmxlX21hc2s7CisJZHluYW1pY19wcmludGtfZW5hYmxlZDIgPSBlbmFibGVfbWFzazsKK30KKworc3RhdGljIGludCBkaXNhYmxlZF9oYXNoKGludCBpLCBib29sIGZpcnN0X3RhYmxlKQoreworCXN0cnVjdCBkZWJ1Z19uYW1lICplOworCXN0cnVjdCBobGlzdF9ub2RlICpub2RlOworCisJaWYgKGZpcnN0X3RhYmxlKSB7CisJCWhsaXN0X2Zvcl9lYWNoX2VudHJ5KGUsIG5vZGUsICZtb2R1bGVfdGFibGVbaV0sIGhsaXN0KSB7CisJCQlpZiAoZS0+ZW5hYmxlKQorCQkJCXJldHVybiAwOworCQl9CisJfSBlbHNlIHsKKwkJaGxpc3RfZm9yX2VhY2hfZW50cnkoZSwgbm9kZSwgJm1vZHVsZV90YWJsZTJbaV0sIGhsaXN0MikgeworCQkJaWYgKGUtPmVuYWJsZSkKKwkJCQlyZXR1cm4gMDsKKwkJfQorCX0KKwlyZXR1cm4gMTsKK30KKworc3RhdGljIHNzaXplX3QgcHJfZGVidWdfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWYsCisJCQkJc2l6ZV90IGxlbmd0aCwgbG9mZl90ICpwcG9zKQoreworCWNoYXIgKmJ1ZmZlciwgKnMsICp2YWx1ZV9zdHIsICpzZXR0aW5nX3N0cjsKKwlpbnQgZXJyLCB2YWx1ZTsKKwlzdHJ1Y3QgZGVidWdfbmFtZSAqZWxlbSA9IE5VTEw7CisJaW50IGFsbCA9IDA7CisKKwlpZiAobGVuZ3RoID4gUEFHRV9TSVpFIHx8IGxlbmd0aCA8IDApCisJCXJldHVybiAtRUlOVkFMOworCisJYnVmZmVyID0gKGNoYXIgKilfX2dldF9mcmVlX3BhZ2UoR0ZQX0tFUk5FTCk7CisJaWYgKCFidWZmZXIpCisJCXJldHVybiAtRU5PTUVNOworCisJZXJyID0gLUVGQVVMVDsKKwlpZiAoY29weV9mcm9tX3VzZXIoYnVmZmVyLCBidWYsIGxlbmd0aCkpCisJCWdvdG8gb3V0OworCisJZXJyID0gLUVJTlZBTDsKKwlpZiAobGVuZ3RoIDwgUEFHRV9TSVpFKQorCQlidWZmZXJbbGVuZ3RoXSA9ICdcMCc7CisJZWxzZSBpZiAoYnVmZmVyW1BBR0VfU0laRS0xXSkKKwkJZ290byBvdXQ7CisKKwllcnIgPSAtRUlOVkFMOworCWRvd24oJmRlYnVnX2xpc3RfbXV0ZXgpOworCisJaWYgKHN0cm5jbXAoInNldCIsIGJ1ZmZlciwgMykpCisJCWdvdG8gb3V0X3VwOworCXMgPSBidWZmZXIgKyAzOworCXNldHRpbmdfc3RyID0gc3Ryc2VwKCZzLCAiPSIpOworCWlmIChzID09IE5VTEwpCisJCWdvdG8gb3V0X3VwOworCXNldHRpbmdfc3RyID0gc3Ryc3RyaXAoc2V0dGluZ19zdHIpOworCXZhbHVlX3N0ciA9IHN0cnNlcCgmcywgIiAiKTsKKwlpZiAocyA9PSBOVUxMKQorCQlnb3RvIG91dF91cDsKKwlzID0gc3Ryc3RyaXAocyk7CisJaWYgKCFzdHJuY21wKHMsICJhbGwiLCAzKSkKKwkJYWxsID0gMTsKKwllbHNlCisJCWVsZW0gPSBmaW5kX2RlYnVnX21vZHVsZShzKTsKKwlpZiAoIXN0cm5jbXAoc2V0dGluZ19zdHIsICJlbmFibGUiLCA2KSkgeworCQl2YWx1ZSA9ICEhc2ltcGxlX3N0cnRvbCh2YWx1ZV9zdHIsIE5VTEwsIDEwKTsKKwkJaWYgKGFsbCkgeworCQkJaWYgKHZhbHVlKSB7CisJCQkJc2V0X2FsbCh0cnVlKTsKKwkJCQludW1fZW5hYmxlZCA9IG5yX2VudHJpZXM7CisJCQkJZHluYW1pY19lbmFibGVkID0gRFlOQU1JQ19FTkFCTEVEX0FMTDsKKwkJCX0gZWxzZSB7CisJCQkJc2V0X2FsbChmYWxzZSk7CisJCQkJbnVtX2VuYWJsZWQgPSAwOworCQkJCWR5bmFtaWNfZW5hYmxlZCA9IERZTkFNSUNfRU5BQkxFRF9OT05FOworCQkJfQorCQkJZXJyID0gMDsKKwkJfSBlbHNlIHsKKwkJCWlmIChlbGVtKSB7CisJCQkJaWYgKHZhbHVlICYmIChlbGVtLT5lbmFibGUgPT0gMCkpIHsKKwkJCQkJZHluYW1pY19wcmludGtfZW5hYmxlZCB8PQorCQkJCQkJCSgxTEwgPDwgZWxlbS0+aGFzaDEpOworCQkJCQlkeW5hbWljX3ByaW50a19lbmFibGVkMiB8PQorCQkJCQkJCSgxTEwgPDwgZWxlbS0+aGFzaDIpOworCQkJCQllbGVtLT5lbmFibGUgPSAxOworCQkJCQludW1fZW5hYmxlZCsrOworCQkJCQlkeW5hbWljX2VuYWJsZWQgPSBEWU5BTUlDX0VOQUJMRURfU09NRTsKKwkJCQkJZXJyID0gMDsKKwkJCQkJcHJpbnRrKEtFUk5fREVCVUcKKwkJCQkJICAgICAgICJkZWJ1Z2dpbmcgZW5hYmxlZCBmb3IgbW9kdWxlICVzIiwKKwkJCQkJICAgICAgIGVsZW0tPm5hbWUpOworCQkJCX0gZWxzZSBpZiAoIXZhbHVlICYmIChlbGVtLT5lbmFibGUgPT0gMSkpIHsKKwkJCQkJZWxlbS0+ZW5hYmxlID0gMDsKKwkJCQkJbnVtX2VuYWJsZWQtLTsKKwkJCQkJaWYgKGRpc2FibGVkX2hhc2goZWxlbS0+aGFzaDEsIHRydWUpKQorCQkJCQkJZHluYW1pY19wcmludGtfZW5hYmxlZCAmPQorCQkJCQkJCX4oMUxMIDw8IGVsZW0tPmhhc2gxKTsKKwkJCQkJaWYgKGRpc2FibGVkX2hhc2goZWxlbS0+aGFzaDIsIGZhbHNlKSkKKwkJCQkJCWR5bmFtaWNfcHJpbnRrX2VuYWJsZWQyICY9CisJCQkJCQkJfigxTEwgPDwgZWxlbS0+aGFzaDIpOworCQkJCQlpZiAobnVtX2VuYWJsZWQpCisJCQkJCQlkeW5hbWljX2VuYWJsZWQgPQorCQkJCQkJCURZTkFNSUNfRU5BQkxFRF9TT01FOworCQkJCQllbHNlCisJCQkJCQlkeW5hbWljX2VuYWJsZWQgPQorCQkJCQkJCURZTkFNSUNfRU5BQkxFRF9OT05FOworCQkJCQllcnIgPSAwOworCQkJCQlwcmludGsoS0VSTl9ERUJVRworCQkJCQkgICAgICAgImRlYnVnZ2luZyBkaXNhYmxlZCBmb3IgbW9kdWxlICIKKwkJCQkJICAgICAgICIlcyIsIGVsZW0tPm5hbWUpOworCQkJCX0KKwkJCX0KKwkJfQorCX0KKwlpZiAoIWVycikKKwkJZXJyID0gbGVuZ3RoOworb3V0X3VwOgorCXVwKCZkZWJ1Z19saXN0X211dGV4KTsKK291dDoKKwlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpYnVmZmVyKTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgdm9pZCAqcHJfZGVidWdfc2VxX3N0YXJ0KHN0cnVjdCBzZXFfZmlsZSAqZiwgbG9mZl90ICpwb3MpCit7CisJcmV0dXJuICgqcG9zIDwgREVCVUdfSEFTSF9UQUJMRV9TSVpFKSA/IHBvcyA6IE5VTEw7Cit9CisKK3N0YXRpYyB2b2lkICpwcl9kZWJ1Z19zZXFfbmV4dChzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHZvaWQgKnYsIGxvZmZfdCAqcG9zKQoreworCSgqcG9zKSsrOworCWlmICgqcG9zID49IERFQlVHX0hBU0hfVEFCTEVfU0laRSkKKwkJcmV0dXJuIE5VTEw7CisJcmV0dXJuIHBvczsKK30KKworc3RhdGljIHZvaWQgcHJfZGVidWdfc2VxX3N0b3Aoc3RydWN0IHNlcV9maWxlICpzLCB2b2lkICp2KQoreworCS8qIE5vdGhpbmcgdG8gZG8gKi8KK30KKworc3RhdGljIGludCBwcl9kZWJ1Z19zZXFfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHZvaWQgKnYpCit7CisJc3RydWN0IGhsaXN0X2hlYWQgKmhlYWQ7CisJc3RydWN0IGhsaXN0X25vZGUgKm5vZGU7CisJc3RydWN0IGRlYnVnX25hbWUgKmVsZW07CisJdW5zaWduZWQgaW50IGkgPSAqKGxvZmZfdCAqKSB2OworCisJcmN1X3JlYWRfbG9jaygpOworCWhlYWQgPSAmbW9kdWxlX3RhYmxlW2ldOworCWhsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShlbGVtLCBub2RlLCBoZWFkLCBobGlzdCkgeworCQlzZXFfcHJpbnRmKHMsICIlcyBlbmFibGVkPSVkIiwgZWxlbS0+bmFtZSwgZWxlbS0+ZW5hYmxlKTsKKwkJc2VxX3ByaW50ZihzLCAiXG4iKTsKKwl9CisJcmN1X3JlYWRfdW5sb2NrKCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgcHJfZGVidWdfc2VxX29wcyA9IHsKKwkuc3RhcnQgPSBwcl9kZWJ1Z19zZXFfc3RhcnQsCisJLm5leHQgID0gcHJfZGVidWdfc2VxX25leHQsCisJLnN0b3AgID0gcHJfZGVidWdfc2VxX3N0b3AsCisJLnNob3cgID0gcHJfZGVidWdfc2VxX3Nob3cKK307CisKK3N0YXRpYyBpbnQgcHJfZGVidWdfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCkKK3sKKwlyZXR1cm4gc2VxX29wZW4oZmlscCwgJnByX2RlYnVnX3NlcV9vcHMpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBwcl9kZWJ1Z19vcGVyYXRpb25zID0geworCS5vcGVuCQk9IHByX2RlYnVnX29wZW4sCisJLnJlYWQJCT0gc2VxX3JlYWQsCisJLndyaXRlCQk9IHByX2RlYnVnX3dyaXRlLAorCS5sbHNlZWsJCT0gc2VxX2xzZWVrLAorCS5yZWxlYXNlCT0gc2VxX3JlbGVhc2UsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBkeW5hbWljX3ByaW50a19pbml0KHZvaWQpCit7CisJc3RydWN0IGRlbnRyeSAqZGlyLCAqZmlsZTsKKwlzdHJ1Y3QgbW9kX2RlYnVnICppdGVyOworCXVuc2lnbmVkIGxvbmcgdmFsdWU7CisKKwlkaXIgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIoImR5bmFtaWNfcHJpbnRrIiwgTlVMTCk7CisJaWYgKCFkaXIpCisJCXJldHVybiAtRU5PTUVNOworCWZpbGUgPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJtb2R1bGVzIiwgMDY0NCwgZGlyLCBOVUxMLAorCQkJCQkmcHJfZGVidWdfb3BlcmF0aW9ucyk7CisJaWYgKCFmaWxlKSB7CisJCWRlYnVnZnNfcmVtb3ZlKGRpcik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwlmb3IgKHZhbHVlID0gKHVuc2lnbmVkIGxvbmcpX19zdGFydF9fX3ZlcmJvc2U7CisJCXZhbHVlIDwgKHVuc2lnbmVkIGxvbmcpX19zdG9wX19fdmVyYm9zZTsKKwkJdmFsdWUgKz0gc2l6ZW9mKHN0cnVjdCBtb2RfZGVidWcpKSB7CisJCQlpdGVyID0gKHN0cnVjdCBtb2RfZGVidWcgKil2YWx1ZTsKKwkJCXJlZ2lzdGVyX2R5bmFtaWNfZGVidWdfbW9kdWxlKGl0ZXItPm1vZG5hbWUsCisJCQkJaXRlci0+dHlwZSwKKwkJCQlpdGVyLT5sb2dpY2FsX21vZG5hbWUsCisJCQkJaXRlci0+ZmxhZ19uYW1lcywgaXRlci0+aGFzaCwgaXRlci0+aGFzaDIpOworCX0KKwlyZXR1cm4gMDsKK30KK21vZHVsZV9pbml0KGR5bmFtaWNfcHJpbnRrX2luaXQpOworLyogbWF5IHdhbnQgdG8gbW92ZSB0aGlzIGVhcmxpZXIgc28gd2UgY2FuIGdldCB0cmFjZXMgYXMgZWFybHkgYXMgcG9zc2libGUgKi8KKworc3RhdGljIGludCBfX2luaXQgZHluYW1pY19wcmludGtfc2V0dXAoY2hhciAqc3RyKQoreworCWlmIChzdHIpCisJCXJldHVybiAtRU5PRU5UOworCXNldF9hbGwodHJ1ZSk7CisJcmV0dXJuIDA7Cit9CisvKiBVc2UgZWFybHlfcGFyYW0oKSwgc28gd2UgY2FuIGdldCBkZWJ1ZyBvdXRwdXQgYXMgZWFybHkgYXMgcG9zc2libGUgKi8KK2Vhcmx5X3BhcmFtKCJkeW5hbWljX3ByaW50ayIsIGR5bmFtaWNfcHJpbnRrX3NldHVwKTsKZGlmZiAtLWdpdCBhL2xpYi9pb21tdS1oZWxwZXIuYyBiL2xpYi9pb21tdS1oZWxwZXIuYwppbmRleCA1ZDkwMDc0Li43NWRiZGEwIDEwMDY0NAotLS0gYS9saWIvaW9tbXUtaGVscGVyLmMKKysrIGIvbGliL2lvbW11LWhlbHBlci5jCkBAIC03OSwzICs3OSwxMiBAQAogCX0KIH0KIEVYUE9SVF9TWU1CT0woaW9tbXVfYXJlYV9mcmVlKTsKKwordW5zaWduZWQgbG9uZyBpb21tdV9udW1fcGFnZXModW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGxlbiwKKwkJCSAgICAgIHVuc2lnbmVkIGxvbmcgaW9fcGFnZV9zaXplKQoreworCXVuc2lnbmVkIGxvbmcgc2l6ZSA9IChhZGRyICYgKGlvX3BhZ2Vfc2l6ZSAtIDEpKSArIGxlbjsKKworCXJldHVybiBESVZfUk9VTkRfVVAoc2l6ZSwgaW9fcGFnZV9zaXplKTsKK30KK0VYUE9SVF9TWU1CT0woaW9tbXVfbnVtX3BhZ2VzKTsKZGlmZiAtLWdpdCBhL2xpYi9rb2JqZWN0LmMgYi9saWIva29iamVjdC5jCmluZGV4IGZiZjBhZTIuLjA0ODdkMWYgMTAwNjQ0Ci0tLSBhL2xpYi9rb2JqZWN0LmMKKysrIGIvbGliL2tvYmplY3QuYwpAQCAtMzg3LDExICszODcsMTcgQEAKICAqIGtvYmplY3RfcmVuYW1lIC0gY2hhbmdlIHRoZSBuYW1lIG9mIGFuIG9iamVjdAogICogQGtvYmo6IG9iamVjdCBpbiBxdWVzdGlvbi4KICAqIEBuZXdfbmFtZTogb2JqZWN0J3MgbmV3IG5hbWUKKyAqCisgKiBJdCBpcyB0aGUgcmVzcG9uc2liaWxpdHkgb2YgdGhlIGNhbGxlciB0byBwcm92aWRlIG11dHVhbAorICogZXhjbHVzaW9uIGJldHdlZW4gdHdvIGRpZmZlcmVudCBjYWxscyBvZiBrb2JqZWN0X3JlbmFtZQorICogb24gdGhlIHNhbWUga29iamVjdCBhbmQgdG8gZW5zdXJlIHRoYXQgbmV3X25hbWUgaXMgdmFsaWQgYW5kCisgKiB3b24ndCBjb25mbGljdCB3aXRoIG90aGVyIGtvYmplY3RzLgogICovCiBpbnQga29iamVjdF9yZW5hbWUoc3RydWN0IGtvYmplY3QgKmtvYmosIGNvbnN0IGNoYXIgKm5ld19uYW1lKQogewogCWludCBlcnJvciA9IDA7CiAJY29uc3QgY2hhciAqZGV2cGF0aCA9IE5VTEw7CisJY29uc3QgY2hhciAqZHVwX25hbWUgPSBOVUxMLCAqbmFtZTsKIAljaGFyICpkZXZwYXRoX3N0cmluZyA9IE5VTEw7CiAJY2hhciAqZW52cFsyXTsKIApAQCAtNDAxLDE5ICs0MDcsNiBAQAogCWlmICgha29iai0+cGFyZW50KQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCS8qIHNlZSBpZiB0aGlzIG5hbWUgaXMgYWxyZWFkeSBpbiB1c2UgKi8KLQlpZiAoa29iai0+a3NldCkgewotCQlzdHJ1Y3Qga29iamVjdCAqdGVtcF9rb2JqOwotCQl0ZW1wX2tvYmogPSBrc2V0X2ZpbmRfb2JqKGtvYmotPmtzZXQsIG5ld19uYW1lKTsKLQkJaWYgKHRlbXBfa29iaikgewotCQkJcHJpbnRrKEtFUk5fV0FSTklORyAia29iamVjdCAnJXMnIGNhbm5vdCBiZSByZW5hbWVkICIKLQkJCSAgICAgICAidG8gJyVzJyBhcyAnJXMnIGlzIGFscmVhZHkgaW4gZXhpc3RlbmNlLlxuIiwKLQkJCSAgICAgICBrb2JqZWN0X25hbWUoa29iaiksIG5ld19uYW1lLCBuZXdfbmFtZSk7Ci0JCQlrb2JqZWN0X3B1dCh0ZW1wX2tvYmopOwotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQl9Ci0KIAlkZXZwYXRoID0ga29iamVjdF9nZXRfcGF0aChrb2JqLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWRldnBhdGgpIHsKIAkJZXJyb3IgPSAtRU5PTUVNOwpAQCAtNDI4LDE1ICs0MjEsMjcgQEAKIAllbnZwWzBdID0gZGV2cGF0aF9zdHJpbmc7CiAJZW52cFsxXSA9IE5VTEw7CiAKKwluYW1lID0gZHVwX25hbWUgPSBrc3RyZHVwKG5ld19uYW1lLCBHRlBfS0VSTkVMKTsKKwlpZiAoIW5hbWUpIHsKKwkJZXJyb3IgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKKwl9CisKIAllcnJvciA9IHN5c2ZzX3JlbmFtZV9kaXIoa29iaiwgbmV3X25hbWUpOworCWlmIChlcnJvcikKKwkJZ290byBvdXQ7CisKKwkvKiBJbnN0YWxsIHRoZSBuZXcga29iamVjdCBuYW1lICovCisJZHVwX25hbWUgPSBrb2JqLT5uYW1lOworCWtvYmotPm5hbWUgPSBuYW1lOwogCiAJLyogVGhpcyBmdW5jdGlvbiBpcyBtb3N0bHkvb25seSB1c2VkIGZvciBuZXR3b3JrIGludGVyZmFjZS4KIAkgKiBTb21lIGhvdHBsdWcgcGFja2FnZSB0cmFjayBpbnRlcmZhY2VzIGJ5IHRoZWlyIG5hbWUgYW5kCiAJICogdGhlcmVmb3JlIHdhbnQgdG8ga25vdyB3aGVuIHRoZSBuYW1lIGlzIGNoYW5nZWQgYnkgdGhlIHVzZXIuICovCi0JaWYgKCFlcnJvcikKLQkJa29iamVjdF91ZXZlbnRfZW52KGtvYmosIEtPQkpfTU9WRSwgZW52cCk7CisJa29iamVjdF91ZXZlbnRfZW52KGtvYmosIEtPQkpfTU9WRSwgZW52cCk7CiAKIG91dDoKKwlrZnJlZShkdXBfbmFtZSk7CiAJa2ZyZWUoZGV2cGF0aF9zdHJpbmcpOwogCWtmcmVlKGRldnBhdGgpOwogCWtvYmplY3RfcHV0KGtvYmopOwpkaWZmIC0tZ2l0IGEvbGliL3BhcnNlci5jIGIvbGliL3BhcnNlci5jCmluZGV4IDRmMGNiYzAuLmIwMGQwMjAgMTAwNjQ0Ci0tLSBhL2xpYi9wYXJzZXIuYworKysgYi9saWIvcGFyc2VyLmMKQEAgLTEwMCw3ICsxMDAsNyBAQAogICogZm9ybWF0IGlkZW50aWZpZXJzIHdoaWNoIHdpbGwgYmUgdGFrZW4gaW50byBhY2NvdW50IHdoZW4gbWF0Y2hpbmcgdGhlCiAgKiB0b2tlbnMsIGFuZCB3aG9zZSBsb2NhdGlvbnMgd2lsbCBiZSByZXR1cm5lZCBpbiB0aGUgQGFyZ3MgYXJyYXkuCiAgKi8KLWludCBtYXRjaF90b2tlbihjaGFyICpzLCBtYXRjaF90YWJsZV90IHRhYmxlLCBzdWJzdHJpbmdfdCBhcmdzW10pCitpbnQgbWF0Y2hfdG9rZW4oY2hhciAqcywgY29uc3QgbWF0Y2hfdGFibGVfdCB0YWJsZSwgc3Vic3RyaW5nX3QgYXJnc1tdKQogewogCWNvbnN0IHN0cnVjdCBtYXRjaF90b2tlbiAqcDsKIApkaWZmIC0tZ2l0IGEvbGliL3ZzcHJpbnRmLmMgYi9saWIvdnNwcmludGYuYwppbmRleCBjMzk5YmMxLi5hMDEzYmJjIDEwMDY0NAotLS0gYS9saWIvdnNwcmludGYuYworKysgYi9saWIvdnNwcmludGYuYwpAQCAtMjQsNiArMjQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2thbGxzeW1zLmg+CiAjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgogCiAjaW5jbHVkZSA8YXNtL3BhZ2UuaD4JCS8qIGZvciBQQUdFX1NJWkUgKi8KICNpbmNsdWRlIDxhc20vZGl2NjQuaD4KQEAgLTMyLDQwICszMyw0OCBAQAogLyogV29ya3Mgb25seSBmb3IgZGlnaXRzIGFuZCBsZXR0ZXJzLCBidXQgc21hbGwgYW5kIGZhc3QgKi8KICNkZWZpbmUgVE9MT1dFUih4KSAoKHgpIHwgMHgyMCkKIAorc3RhdGljIHVuc2lnbmVkIGludCBzaW1wbGVfZ3Vlc3NfYmFzZShjb25zdCBjaGFyICpjcCkKK3sKKwlpZiAoY3BbMF0gPT0gJzAnKSB7CisJCWlmIChUT0xPV0VSKGNwWzFdKSA9PSAneCcgJiYgaXN4ZGlnaXQoY3BbMl0pKQorCQkJcmV0dXJuIDE2OworCQllbHNlCisJCQlyZXR1cm4gODsKKwl9IGVsc2UgeworCQlyZXR1cm4gMTA7CisJfQorfQorCiAvKioKICAqIHNpbXBsZV9zdHJ0b3VsIC0gY29udmVydCBhIHN0cmluZyB0byBhbiB1bnNpZ25lZCBsb25nCiAgKiBAY3A6IFRoZSBzdGFydCBvZiB0aGUgc3RyaW5nCiAgKiBAZW5kcDogQSBwb2ludGVyIHRvIHRoZSBlbmQgb2YgdGhlIHBhcnNlZCBzdHJpbmcgd2lsbCBiZSBwbGFjZWQgaGVyZQogICogQGJhc2U6IFRoZSBudW1iZXIgYmFzZSB0byB1c2UKICAqLwotdW5zaWduZWQgbG9uZyBzaW1wbGVfc3RydG91bChjb25zdCBjaGFyICpjcCxjaGFyICoqZW5kcCx1bnNpZ25lZCBpbnQgYmFzZSkKK3Vuc2lnbmVkIGxvbmcgc2ltcGxlX3N0cnRvdWwoY29uc3QgY2hhciAqY3AsIGNoYXIgKiplbmRwLCB1bnNpZ25lZCBpbnQgYmFzZSkKIHsKLQl1bnNpZ25lZCBsb25nIHJlc3VsdCA9IDAsdmFsdWU7CisJdW5zaWduZWQgbG9uZyByZXN1bHQgPSAwOwogCi0JaWYgKCFiYXNlKSB7Ci0JCWJhc2UgPSAxMDsKLQkJaWYgKCpjcCA9PSAnMCcpIHsKLQkJCWJhc2UgPSA4OwotCQkJY3ArKzsKLQkJCWlmICgoVE9MT1dFUigqY3ApID09ICd4JykgJiYgaXN4ZGlnaXQoY3BbMV0pKSB7Ci0JCQkJY3ArKzsKLQkJCQliYXNlID0gMTY7Ci0JCQl9Ci0JCX0KLQl9IGVsc2UgaWYgKGJhc2UgPT0gMTYpIHsKLQkJaWYgKGNwWzBdID09ICcwJyAmJiBUT0xPV0VSKGNwWzFdKSA9PSAneCcpCi0JCQljcCArPSAyOwotCX0KLQl3aGlsZSAoaXN4ZGlnaXQoKmNwKSAmJgotCSAgICAgICAodmFsdWUgPSBpc2RpZ2l0KCpjcCkgPyAqY3AtJzAnIDogVE9MT1dFUigqY3ApLSdhJysxMCkgPCBiYXNlKSB7Ci0JCXJlc3VsdCA9IHJlc3VsdCpiYXNlICsgdmFsdWU7CisJaWYgKCFiYXNlKQorCQliYXNlID0gc2ltcGxlX2d1ZXNzX2Jhc2UoY3ApOworCisJaWYgKGJhc2UgPT0gMTYgJiYgY3BbMF0gPT0gJzAnICYmIFRPTE9XRVIoY3BbMV0pID09ICd4JykKKwkJY3AgKz0gMjsKKworCXdoaWxlIChpc3hkaWdpdCgqY3ApKSB7CisJCXVuc2lnbmVkIGludCB2YWx1ZTsKKworCQl2YWx1ZSA9IGlzZGlnaXQoKmNwKSA/ICpjcCAtICcwJyA6IFRPTE9XRVIoKmNwKSAtICdhJyArIDEwOworCQlpZiAodmFsdWUgPj0gYmFzZSkKKwkJCWJyZWFrOworCQlyZXN1bHQgPSByZXN1bHQgKiBiYXNlICsgdmFsdWU7CiAJCWNwKys7CiAJfQorCiAJaWYgKGVuZHApCiAJCSplbmRwID0gKGNoYXIgKiljcDsKIAlyZXR1cm4gcmVzdWx0OwogfQotCiBFWFBPUlRfU1lNQk9MKHNpbXBsZV9zdHJ0b3VsKTsKIAogLyoqCkBAIC03NCwxMyArODMsMTIgQEAKICAqIEBlbmRwOiBBIHBvaW50ZXIgdG8gdGhlIGVuZCBvZiB0aGUgcGFyc2VkIHN0cmluZyB3aWxsIGJlIHBsYWNlZCBoZXJlCiAgKiBAYmFzZTogVGhlIG51bWJlciBiYXNlIHRvIHVzZQogICovCi1sb25nIHNpbXBsZV9zdHJ0b2woY29uc3QgY2hhciAqY3AsY2hhciAqKmVuZHAsdW5zaWduZWQgaW50IGJhc2UpCitsb25nIHNpbXBsZV9zdHJ0b2woY29uc3QgY2hhciAqY3AsIGNoYXIgKiplbmRwLCB1bnNpZ25lZCBpbnQgYmFzZSkKIHsKLQlpZigqY3A9PSctJykKLQkJcmV0dXJuIC1zaW1wbGVfc3RydG91bChjcCsxLGVuZHAsYmFzZSk7Ci0JcmV0dXJuIHNpbXBsZV9zdHJ0b3VsKGNwLGVuZHAsYmFzZSk7CisJaWYoKmNwID09ICctJykKKwkJcmV0dXJuIC1zaW1wbGVfc3RydG91bChjcCArIDEsIGVuZHAsIGJhc2UpOworCXJldHVybiBzaW1wbGVfc3RydG91bChjcCwgZW5kcCwgYmFzZSk7CiB9Ci0KIEVYUE9SVF9TWU1CT0woc2ltcGxlX3N0cnRvbCk7CiAKIC8qKgpAQCAtODksMzQgKzk3LDMwIEBACiAgKiBAZW5kcDogQSBwb2ludGVyIHRvIHRoZSBlbmQgb2YgdGhlIHBhcnNlZCBzdHJpbmcgd2lsbCBiZSBwbGFjZWQgaGVyZQogICogQGJhc2U6IFRoZSBudW1iZXIgYmFzZSB0byB1c2UKICAqLwotdW5zaWduZWQgbG9uZyBsb25nIHNpbXBsZV9zdHJ0b3VsbChjb25zdCBjaGFyICpjcCxjaGFyICoqZW5kcCx1bnNpZ25lZCBpbnQgYmFzZSkKK3Vuc2lnbmVkIGxvbmcgbG9uZyBzaW1wbGVfc3RydG91bGwoY29uc3QgY2hhciAqY3AsIGNoYXIgKiplbmRwLCB1bnNpZ25lZCBpbnQgYmFzZSkKIHsKLQl1bnNpZ25lZCBsb25nIGxvbmcgcmVzdWx0ID0gMCx2YWx1ZTsKKwl1bnNpZ25lZCBsb25nIGxvbmcgcmVzdWx0ID0gMDsKIAotCWlmICghYmFzZSkgewotCQliYXNlID0gMTA7Ci0JCWlmICgqY3AgPT0gJzAnKSB7Ci0JCQliYXNlID0gODsKLQkJCWNwKys7Ci0JCQlpZiAoKFRPTE9XRVIoKmNwKSA9PSAneCcpICYmIGlzeGRpZ2l0KGNwWzFdKSkgewotCQkJCWNwKys7Ci0JCQkJYmFzZSA9IDE2OwotCQkJfQotCQl9Ci0JfSBlbHNlIGlmIChiYXNlID09IDE2KSB7Ci0JCWlmIChjcFswXSA9PSAnMCcgJiYgVE9MT1dFUihjcFsxXSkgPT0gJ3gnKQotCQkJY3AgKz0gMjsKLQl9Ci0Jd2hpbGUgKGlzeGRpZ2l0KCpjcCkKLQkgJiYgKHZhbHVlID0gaXNkaWdpdCgqY3ApID8gKmNwLScwJyA6IFRPTE9XRVIoKmNwKS0nYScrMTApIDwgYmFzZSkgewotCQlyZXN1bHQgPSByZXN1bHQqYmFzZSArIHZhbHVlOworCWlmICghYmFzZSkKKwkJYmFzZSA9IHNpbXBsZV9ndWVzc19iYXNlKGNwKTsKKworCWlmIChiYXNlID09IDE2ICYmIGNwWzBdID09ICcwJyAmJiBUT0xPV0VSKGNwWzFdKSA9PSAneCcpCisJCWNwICs9IDI7CisKKwl3aGlsZSAoaXN4ZGlnaXQoKmNwKSkgeworCQl1bnNpZ25lZCBpbnQgdmFsdWU7CisKKwkJdmFsdWUgPSBpc2RpZ2l0KCpjcCkgPyAqY3AgLSAnMCcgOiBUT0xPV0VSKCpjcCkgLSAnYScgKyAxMDsKKwkJaWYgKHZhbHVlID49IGJhc2UpCisJCQlicmVhazsKKwkJcmVzdWx0ID0gcmVzdWx0ICogYmFzZSArIHZhbHVlOwogCQljcCsrOwogCX0KKwogCWlmIChlbmRwKQogCQkqZW5kcCA9IChjaGFyICopY3A7CiAJcmV0dXJuIHJlc3VsdDsKIH0KLQogRVhQT1JUX1NZTUJPTChzaW1wbGVfc3RydG91bGwpOwogCiAvKioKQEAgLTEyNSwxNCArMTI5LDEzIEBACiAgKiBAZW5kcDogQSBwb2ludGVyIHRvIHRoZSBlbmQgb2YgdGhlIHBhcnNlZCBzdHJpbmcgd2lsbCBiZSBwbGFjZWQgaGVyZQogICogQGJhc2U6IFRoZSBudW1iZXIgYmFzZSB0byB1c2UKICAqLwotbG9uZyBsb25nIHNpbXBsZV9zdHJ0b2xsKGNvbnN0IGNoYXIgKmNwLGNoYXIgKiplbmRwLHVuc2lnbmVkIGludCBiYXNlKQorbG9uZyBsb25nIHNpbXBsZV9zdHJ0b2xsKGNvbnN0IGNoYXIgKmNwLCBjaGFyICoqZW5kcCwgdW5zaWduZWQgaW50IGJhc2UpCiB7CiAJaWYoKmNwPT0nLScpCi0JCXJldHVybiAtc2ltcGxlX3N0cnRvdWxsKGNwKzEsZW5kcCxiYXNlKTsKLQlyZXR1cm4gc2ltcGxlX3N0cnRvdWxsKGNwLGVuZHAsYmFzZSk7CisJCXJldHVybiAtc2ltcGxlX3N0cnRvdWxsKGNwICsgMSwgZW5kcCwgYmFzZSk7CisJcmV0dXJuIHNpbXBsZV9zdHJ0b3VsbChjcCwgZW5kcCwgYmFzZSk7CiB9CiAKLQogLyoqCiAgKiBzdHJpY3Rfc3RydG91bCAtIGNvbnZlcnQgYSBzdHJpbmcgdG8gYW4gdW5zaWduZWQgbG9uZyBzdHJpY3RseQogICogQGNwOiBUaGUgc3RyaW5nIHRvIGJlIGNvbnZlcnRlZApAQCAtMTU1LDcgKzE1OCwyNyBAQAogICogc2ltcGxlX3N0cnRvdWwganVzdCBpZ25vcmVzIHRoZSBzdWNjZXNzaXZlIGludmFsaWQgY2hhcmFjdGVycyBhbmQKICAqIHJldHVybiB0aGUgY29udmVydGVkIHZhbHVlIG9mIHByZWZpeCBwYXJ0IG9mIHRoZSBzdHJpbmcuCiAgKi8KLWludCBzdHJpY3Rfc3RydG91bChjb25zdCBjaGFyICpjcCwgdW5zaWduZWQgaW50IGJhc2UsIHVuc2lnbmVkIGxvbmcgKnJlcyk7CitpbnQgc3RyaWN0X3N0cnRvdWwoY29uc3QgY2hhciAqY3AsIHVuc2lnbmVkIGludCBiYXNlLCB1bnNpZ25lZCBsb25nICpyZXMpCit7CisJY2hhciAqdGFpbDsKKwl1bnNpZ25lZCBsb25nIHZhbDsKKwlzaXplX3QgbGVuOworCisJKnJlcyA9IDA7CisJbGVuID0gc3RybGVuKGNwKTsKKwlpZiAobGVuID09IDApCisJCXJldHVybiAtRUlOVkFMOworCisJdmFsID0gc2ltcGxlX3N0cnRvdWwoY3AsICZ0YWlsLCBiYXNlKTsKKwlpZiAoKCp0YWlsID09ICdcMCcpIHx8CisJCSgobGVuID09IChzaXplX3QpKHRhaWwgLSBjcCkgKyAxKSAmJiAoKnRhaWwgPT0gJ1xuJykpKSB7CisJCSpyZXMgPSB2YWw7CisJCXJldHVybiAwOworCX0KKworCXJldHVybiAtRUlOVkFMOworfQorRVhQT1JUX1NZTUJPTChzdHJpY3Rfc3RydG91bCk7CiAKIC8qKgogICogc3RyaWN0X3N0cnRvbCAtIGNvbnZlcnQgYSBzdHJpbmcgdG8gYSBsb25nIHN0cmljdGx5CkBAIC0xNjksNyArMTkyLDIwIEBACiAgKiBJdCByZXR1cm5zIDAgaWYgY29udmVyc2lvbiBpcyBzdWNjZXNzZnVsIGFuZCAqcmVzIGlzIHNldCB0byB0aGUgY29udmVydGVkCiAgKiB2YWx1ZSwgb3RoZXJ3aXNlIGl0IHJldHVybnMgLUVJTlZBTCBhbmQgKnJlcyBpcyBzZXQgdG8gMC4KICAqLwotaW50IHN0cmljdF9zdHJ0b2woY29uc3QgY2hhciAqY3AsIHVuc2lnbmVkIGludCBiYXNlLCBsb25nICpyZXMpOworaW50IHN0cmljdF9zdHJ0b2woY29uc3QgY2hhciAqY3AsIHVuc2lnbmVkIGludCBiYXNlLCBsb25nICpyZXMpCit7CisJaW50IHJldDsKKwlpZiAoKmNwID09ICctJykgeworCQlyZXQgPSBzdHJpY3Rfc3RydG91bChjcCArIDEsIGJhc2UsICh1bnNpZ25lZCBsb25nICopcmVzKTsKKwkJaWYgKCFyZXQpCisJCQkqcmVzID0gLSgqcmVzKTsKKwl9IGVsc2UgeworCQlyZXQgPSBzdHJpY3Rfc3RydG91bChjcCwgYmFzZSwgKHVuc2lnbmVkIGxvbmcgKilyZXMpOworCX0KKworCXJldHVybiByZXQ7Cit9CitFWFBPUlRfU1lNQk9MKHN0cmljdF9zdHJ0b2wpOwogCiAvKioKICAqIHN0cmljdF9zdHJ0b3VsbCAtIGNvbnZlcnQgYSBzdHJpbmcgdG8gYW4gdW5zaWduZWQgbG9uZyBsb25nIHN0cmljdGx5CkBAIC0xOTMsNyArMjI5LDI3IEBACiAgKiBzaW1wbGVfc3RydG91bGwganVzdCBpZ25vcmVzIHRoZSBzdWNjZXNzaXZlIGludmFsaWQgY2hhcmFjdGVycyBhbmQKICAqIHJldHVybiB0aGUgY29udmVydGVkIHZhbHVlIG9mIHByZWZpeCBwYXJ0IG9mIHRoZSBzdHJpbmcuCiAgKi8KLWludCBzdHJpY3Rfc3RydG91bGwoY29uc3QgY2hhciAqY3AsIHVuc2lnbmVkIGludCBiYXNlLCB1bnNpZ25lZCBsb25nIGxvbmcgKnJlcyk7CitpbnQgc3RyaWN0X3N0cnRvdWxsKGNvbnN0IGNoYXIgKmNwLCB1bnNpZ25lZCBpbnQgYmFzZSwgdW5zaWduZWQgbG9uZyBsb25nICpyZXMpCit7CisJY2hhciAqdGFpbDsKKwl1bnNpZ25lZCBsb25nIGxvbmcgdmFsOworCXNpemVfdCBsZW47CisKKwkqcmVzID0gMDsKKwlsZW4gPSBzdHJsZW4oY3ApOworCWlmIChsZW4gPT0gMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwl2YWwgPSBzaW1wbGVfc3RydG91bGwoY3AsICZ0YWlsLCBiYXNlKTsKKwlpZiAoKCp0YWlsID09ICdcMCcpIHx8CisJCSgobGVuID09IChzaXplX3QpKHRhaWwgLSBjcCkgKyAxKSAmJiAoKnRhaWwgPT0gJ1xuJykpKSB7CisJCSpyZXMgPSB2YWw7CisJCXJldHVybiAwOworCX0KKworCXJldHVybiAtRUlOVkFMOworfQorRVhQT1JUX1NZTUJPTChzdHJpY3Rfc3RydG91bGwpOwogCiAvKioKICAqIHN0cmljdF9zdHJ0b2xsIC0gY29udmVydCBhIHN0cmluZyB0byBhIGxvbmcgbG9uZyBzdHJpY3RseQpAQCAtMjA3LDUzICsyNjMsMjAgQEAKICAqIEl0IHJldHVybnMgMCBpZiBjb252ZXJzaW9uIGlzIHN1Y2Nlc3NmdWwgYW5kICpyZXMgaXMgc2V0IHRvIHRoZSBjb252ZXJ0ZWQKICAqIHZhbHVlLCBvdGhlcndpc2UgaXQgcmV0dXJucyAtRUlOVkFMIGFuZCAqcmVzIGlzIHNldCB0byAwLgogICovCi1pbnQgc3RyaWN0X3N0cnRvbGwoY29uc3QgY2hhciAqY3AsIHVuc2lnbmVkIGludCBiYXNlLCBsb25nIGxvbmcgKnJlcyk7CitpbnQgc3RyaWN0X3N0cnRvbGwoY29uc3QgY2hhciAqY3AsIHVuc2lnbmVkIGludCBiYXNlLCBsb25nIGxvbmcgKnJlcykKK3sKKwlpbnQgcmV0OworCWlmICgqY3AgPT0gJy0nKSB7CisJCXJldCA9IHN0cmljdF9zdHJ0b3VsbChjcCArIDEsIGJhc2UsICh1bnNpZ25lZCBsb25nIGxvbmcgKilyZXMpOworCQlpZiAoIXJldCkKKwkJCSpyZXMgPSAtKCpyZXMpOworCX0gZWxzZSB7CisJCXJldCA9IHN0cmljdF9zdHJ0b3VsbChjcCwgYmFzZSwgKHVuc2lnbmVkIGxvbmcgbG9uZyAqKXJlcyk7CisJfQogCi0jZGVmaW5lIGRlZmluZV9zdHJpY3Rfc3RydG91eCh0eXBlLCB2YWx0eXBlKQkJCQlcCi1pbnQgc3RyaWN0X3N0cnRvdSMjdHlwZShjb25zdCBjaGFyICpjcCwgdW5zaWduZWQgaW50IGJhc2UsIHZhbHR5cGUgKnJlcylcCi17CQkJCQkJCQkJXAotCWNoYXIgKnRhaWw7CQkJCQkJCVwKLQl2YWx0eXBlIHZhbDsJCQkJCQkJXAotCXNpemVfdCBsZW47CQkJCQkJCVwKLQkJCQkJCQkJCVwKLQkqcmVzID0gMDsJCQkJCQkJXAotCWxlbiA9IHN0cmxlbihjcCk7CQkJCQkJXAotCWlmIChsZW4gPT0gMCkJCQkJCQkJXAotCQlyZXR1cm4gLUVJTlZBTDsJCQkJCQlcCi0JCQkJCQkJCQlcCi0JdmFsID0gc2ltcGxlX3N0cnRvdSMjdHlwZShjcCwgJnRhaWwsIGJhc2UpOwkJCVwKLQlpZiAoKCp0YWlsID09ICdcMCcpIHx8CQkJCQkJXAotCQkoKGxlbiA9PSAoc2l6ZV90KSh0YWlsIC0gY3ApICsgMSkgJiYgKCp0YWlsID09ICdcbicpKSkge1wKLQkJKnJlcyA9IHZhbDsJCQkJCQlcCi0JCXJldHVybiAwOwkJCQkJCVwKLQl9CQkJCQkJCQlcCi0JCQkJCQkJCQlcCi0JcmV0dXJuIC1FSU5WQUw7CQkJCQkJCVwKLX0JCQkJCQkJCQlcCi0KLSNkZWZpbmUgZGVmaW5lX3N0cmljdF9zdHJ0b3godHlwZSwgdmFsdHlwZSkJCQkJXAotaW50IHN0cmljdF9zdHJ0byMjdHlwZShjb25zdCBjaGFyICpjcCwgdW5zaWduZWQgaW50IGJhc2UsIHZhbHR5cGUgKnJlcykJXAotewkJCQkJCQkJCVwKLQlpbnQgcmV0OwkJCQkJCQlcCi0JaWYgKCpjcCA9PSAnLScpIHsJCQkJCQlcCi0JCXJldCA9IHN0cmljdF9zdHJ0b3UjI3R5cGUoY3ArMSwgYmFzZSwgcmVzKTsJCVwKLQkJaWYgKCFyZXQpCQkJCQkJXAotCQkJKnJlcyA9IC0oKnJlcyk7CQkJCQlcCi0JfSBlbHNlCQkJCQkJCQlcCi0JCXJldCA9IHN0cmljdF9zdHJ0b3UjI3R5cGUoY3AsIGJhc2UsIHJlcyk7CQlcCi0JCQkJCQkJCQlcCi0JcmV0dXJuIHJldDsJCQkJCQkJXAotfQkJCQkJCQkJCVwKLQotZGVmaW5lX3N0cmljdF9zdHJ0b3V4KGwsIHVuc2lnbmVkIGxvbmcpCi1kZWZpbmVfc3RyaWN0X3N0cnRveChsLCBsb25nKQotZGVmaW5lX3N0cmljdF9zdHJ0b3V4KGxsLCB1bnNpZ25lZCBsb25nIGxvbmcpCi1kZWZpbmVfc3RyaWN0X3N0cnRveChsbCwgbG9uZyBsb25nKQotCi1FWFBPUlRfU1lNQk9MKHN0cmljdF9zdHJ0b3VsKTsKLUVYUE9SVF9TWU1CT0woc3RyaWN0X3N0cnRvbCk7CisJcmV0dXJuIHJldDsKK30KIEVYUE9SVF9TWU1CT0woc3RyaWN0X3N0cnRvbGwpOwotRVhQT1JUX1NZTUJPTChzdHJpY3Rfc3RydG91bGwpOwogCiBzdGF0aWMgaW50IHNraXBfYXRvaShjb25zdCBjaGFyICoqcykKIHsKQEAgLTUyOCwxOCArNTUxLDUxIEBACiAjZW5kaWYKIH0KIAorc3RhdGljIGNoYXIgKnJlc291cmNlX3N0cmluZyhjaGFyICpidWYsIGNoYXIgKmVuZCwgc3RydWN0IHJlc291cmNlICpyZXMsIGludCBmaWVsZF93aWR0aCwgaW50IHByZWNpc2lvbiwgaW50IGZsYWdzKQoreworI2lmbmRlZiBJT19SU1JDX1BSSU5US19TSVpFCisjZGVmaW5lIElPX1JTUkNfUFJJTlRLX1NJWkUJNAorI2VuZGlmCisKKyNpZm5kZWYgTUVNX1JTUkNfUFJJTlRLX1NJWkUKKyNkZWZpbmUgTUVNX1JTUkNfUFJJTlRLX1NJWkUJOAorI2VuZGlmCisKKwkvKiByb29tIGZvciB0aGUgYWN0dWFsIG51bWJlcnMsIHRoZSB0d28gIjB4IiwgLSwgWywgXSBhbmQgdGhlIGZpbmFsIHplcm8gKi8KKwljaGFyIHN5bVs0KnNpemVvZihyZXNvdXJjZV9zaXplX3QpICsgOF07CisJY2hhciAqcCA9IHN5bSwgKnBlbmQgPSBzeW0gKyBzaXplb2Yoc3ltKTsKKwlpbnQgc2l6ZSA9IC0xOworCisJaWYgKHJlcy0+ZmxhZ3MgJiBJT1JFU09VUkNFX0lPKQorCQlzaXplID0gSU9fUlNSQ19QUklOVEtfU0laRTsKKwllbHNlIGlmIChyZXMtPmZsYWdzICYgSU9SRVNPVVJDRV9NRU0pCisJCXNpemUgPSBNRU1fUlNSQ19QUklOVEtfU0laRTsKKworCSpwKysgPSAnWyc7CisJcCA9IG51bWJlcihwLCBwZW5kLCByZXMtPnN0YXJ0LCAxNiwgc2l6ZSwgLTEsIFNQRUNJQUwgfCBTTUFMTCB8IFpFUk9QQUQpOworCSpwKysgPSAnLSc7CisJcCA9IG51bWJlcihwLCBwZW5kLCByZXMtPmVuZCwgMTYsIHNpemUsIC0xLCBTUEVDSUFMIHwgU01BTEwgfCBaRVJPUEFEKTsKKwkqcCsrID0gJ10nOworCSpwID0gMDsKKworCXJldHVybiBzdHJpbmcoYnVmLCBlbmQsIHN5bSwgZmllbGRfd2lkdGgsIHByZWNpc2lvbiwgZmxhZ3MpOworfQorCiAvKgogICogU2hvdyBhICclcCcgdGhpbmcuICBBIGtlcm5lbCBleHRlbnNpb24gaXMgdGhhdCB0aGUgJyVwJyBpcyBmb2xsb3dlZAogICogYnkgYW4gZXh0cmEgc2V0IG9mIGFscGhhbnVtZXJpYyBjaGFyYWN0ZXJzIHRoYXQgYXJlIGV4dGVuZGVkIGZvcm1hdAogICogc3BlY2lmaWVycy4KICAqCi0gKiBSaWdodCBub3cgd2UganVzdCBoYW5kbGUgJ0YnIChmb3Igc3ltYm9saWMgRnVuY3Rpb24gZGVzY3JpcHRvciBwb2ludGVycykKLSAqIGFuZCAnUycgKGZvciBTeW1ib2xpYyBkaXJlY3QgcG9pbnRlcnMpLCBidXQgdGhpcyBjYW4gZWFzaWx5IGJlCi0gKiBleHRlbmRlZCBpbiB0aGUgZnV0dXJlIChuZXR3b3JrIGFkZHJlc3MgdHlwZXMgZXRjKS4KKyAqIFJpZ2h0IG5vdyB3ZSBoYW5kbGU6CiAgKgotICogVGhlIGRpZmZlcmVuY2UgYmV0d2VlbiAnUycgYW5kICdGJyBpcyB0aGF0IG9uIGlhNjQgYW5kIHBwYzY0IGZ1bmN0aW9uCi0gKiBwb2ludGVycyBhcmUgcmVhbGx5IGZ1bmN0aW9uIGRlc2NyaXB0b3JzLCB3aGljaCBjb250YWluIGEgcG9pbnRlciB0aGUKLSAqIHJlYWwgYWRkcmVzcy4gCisgKiAtICdGJyBGb3Igc3ltYm9saWMgZnVuY3Rpb24gZGVzY3JpcHRvciBwb2ludGVycworICogLSAnUycgRm9yIHN5bWJvbGljIGRpcmVjdCBwb2ludGVycworICogLSAnUicgRm9yIGEgc3RydWN0IHJlc291cmNlIHBvaW50ZXIsIGl0IHByaW50cyB0aGUgcmFuZ2Ugb2YKKyAqICAgICAgIGFkZHJlc3NlcyAobm90IHRoZSBuYW1lIG5vciB0aGUgZmxhZ3MpCisgKgorICogTm90ZTogVGhlIGRpZmZlcmVuY2UgYmV0d2VlbiAnUycgYW5kICdGJyBpcyB0aGF0IG9uIGlhNjQgYW5kIHBwYzY0CisgKiBmdW5jdGlvbiBwb2ludGVycyBhcmUgcmVhbGx5IGZ1bmN0aW9uIGRlc2NyaXB0b3JzLCB3aGljaCBjb250YWluIGEKKyAqIHBvaW50ZXIgdG8gdGhlIHJlYWwgYWRkcmVzcy4KICAqLwogc3RhdGljIGNoYXIgKnBvaW50ZXIoY29uc3QgY2hhciAqZm10LCBjaGFyICpidWYsIGNoYXIgKmVuZCwgdm9pZCAqcHRyLCBpbnQgZmllbGRfd2lkdGgsIGludCBwcmVjaXNpb24sIGludCBmbGFncykKIHsKQEAgLTU0OSw2ICs2MDUsOCBAQAogCQkvKiBGYWxsdGhyb3VnaCAqLwogCWNhc2UgJ1MnOgogCQlyZXR1cm4gc3ltYm9sX3N0cmluZyhidWYsIGVuZCwgcHRyLCBmaWVsZF93aWR0aCwgcHJlY2lzaW9uLCBmbGFncyk7CisJY2FzZSAnUic6CisJCXJldHVybiByZXNvdXJjZV9zdHJpbmcoYnVmLCBlbmQsIHB0ciwgZmllbGRfd2lkdGgsIHByZWNpc2lvbiwgZmxhZ3MpOwogCX0KIAlmbGFncyB8PSBTTUFMTDsKIAlpZiAoZmllbGRfd2lkdGggPT0gLTEpIHsKQEAgLTU2NSw2ICs2MjMsMTEgQEAKICAqIEBmbXQ6IFRoZSBmb3JtYXQgc3RyaW5nIHRvIHVzZQogICogQGFyZ3M6IEFyZ3VtZW50cyBmb3IgdGhlIGZvcm1hdCBzdHJpbmcKICAqCisgKiBUaGlzIGZ1bmN0aW9uIGZvbGxvd3MgQzk5IHZzbnByaW50ZiwgYnV0IGhhcyBzb21lIGV4dGVuc2lvbnM6CisgKiAlcFMgb3V0cHV0IHRoZSBuYW1lIG9mIGEgdGV4dCBzeW1ib2wKKyAqICVwRiBvdXRwdXQgdGhlIG5hbWUgb2YgYSBmdW5jdGlvbiBwb2ludGVyCisgKiAlcFIgb3V0cHV0IHRoZSBhZGRyZXNzIHJhbmdlIGluIGEgc3RydWN0IHJlc291cmNlCisgKgogICogVGhlIHJldHVybiB2YWx1ZSBpcyB0aGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgd2hpY2ggd291bGQKICAqIGJlIGdlbmVyYXRlZCBmb3IgdGhlIGdpdmVuIGlucHV0LCBleGNsdWRpbmcgdGhlIHRyYWlsaW5nCiAgKiAnXDAnLCBhcyBwZXIgSVNPIEM5OS4gSWYgeW91IHdhbnQgdG8gaGF2ZSB0aGUgZXhhY3QKQEAgLTc5MCw3ICs4NTMsNiBAQAogCS8qIHRoZSB0cmFpbGluZyBudWxsIGJ5dGUgZG9lc24ndCBjb3VudCB0b3dhcmRzIHRoZSB0b3RhbCAqLwogCXJldHVybiBzdHItYnVmOwogfQotCiBFWFBPUlRfU1lNQk9MKHZzbnByaW50Zik7CiAKIC8qKgpAQCAtODA2LDYgKzg2OCw4IEBACiAgKgogICogQ2FsbCB0aGlzIGZ1bmN0aW9uIGlmIHlvdSBhcmUgYWxyZWFkeSBkZWFsaW5nIHdpdGggYSB2YV9saXN0LgogICogWW91IHByb2JhYmx5IHdhbnQgc2NucHJpbnRmKCkgaW5zdGVhZC4KKyAqCisgKiBTZWUgdGhlIHZzbnByaW50ZigpIGRvY3VtZW50YXRpb24gZm9yIGZvcm1hdCBzdHJpbmcgZXh0ZW5zaW9ucyBvdmVyIEM5OS4KICAqLwogaW50IHZzY25wcmludGYoY2hhciAqYnVmLCBzaXplX3Qgc2l6ZSwgY29uc3QgY2hhciAqZm10LCB2YV9saXN0IGFyZ3MpCiB7CkBAIC04MTQsNyArODc4LDYgQEAKIAlpPXZzbnByaW50ZihidWYsc2l6ZSxmbXQsYXJncyk7CiAJcmV0dXJuIChpID49IHNpemUpID8gKHNpemUgLSAxKSA6IGk7CiB9Ci0KIEVYUE9SVF9TWU1CT0wodnNjbnByaW50Zik7CiAKIC8qKgpAQCAtODI4LDYgKzg5MSw4IEBACiAgKiBnZW5lcmF0ZWQgZm9yIHRoZSBnaXZlbiBpbnB1dCwgZXhjbHVkaW5nIHRoZSB0cmFpbGluZyBudWxsLAogICogYXMgcGVyIElTTyBDOTkuICBJZiB0aGUgcmV0dXJuIGlzIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0bwogICogQHNpemUsIHRoZSByZXN1bHRpbmcgc3RyaW5nIGlzIHRydW5jYXRlZC4KKyAqCisgKiBTZWUgdGhlIHZzbnByaW50ZigpIGRvY3VtZW50YXRpb24gZm9yIGZvcm1hdCBzdHJpbmcgZXh0ZW5zaW9ucyBvdmVyIEM5OS4KICAqLwogaW50IHNucHJpbnRmKGNoYXIgKiBidWYsIHNpemVfdCBzaXplLCBjb25zdCBjaGFyICpmbXQsIC4uLikKIHsKQEAgLTgzOSw3ICs5MDQsNiBAQAogCXZhX2VuZChhcmdzKTsKIAlyZXR1cm4gaTsKIH0KLQogRVhQT1JUX1NZTUJPTChzbnByaW50Zik7CiAKIC8qKgpAQCAtODc3LDEyICs5NDEsMTMgQEAKICAqCiAgKiBDYWxsIHRoaXMgZnVuY3Rpb24gaWYgeW91IGFyZSBhbHJlYWR5IGRlYWxpbmcgd2l0aCBhIHZhX2xpc3QuCiAgKiBZb3UgcHJvYmFibHkgd2FudCBzcHJpbnRmKCkgaW5zdGVhZC4KKyAqCisgKiBTZWUgdGhlIHZzbnByaW50ZigpIGRvY3VtZW50YXRpb24gZm9yIGZvcm1hdCBzdHJpbmcgZXh0ZW5zaW9ucyBvdmVyIEM5OS4KICAqLwogaW50IHZzcHJpbnRmKGNoYXIgKmJ1ZiwgY29uc3QgY2hhciAqZm10LCB2YV9saXN0IGFyZ3MpCiB7CiAJcmV0dXJuIHZzbnByaW50ZihidWYsIElOVF9NQVgsIGZtdCwgYXJncyk7CiB9Ci0KIEVYUE9SVF9TWU1CT0wodnNwcmludGYpOwogCiAvKioKQEAgLTg5NCw2ICs5NTksOCBAQAogICogVGhlIGZ1bmN0aW9uIHJldHVybnMgdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIHdyaXR0ZW4KICAqIGludG8gQGJ1Zi4gVXNlIHNucHJpbnRmKCkgb3Igc2NucHJpbnRmKCkgaW4gb3JkZXIgdG8gYXZvaWQKICAqIGJ1ZmZlciBvdmVyZmxvd3MuCisgKgorICogU2VlIHRoZSB2c25wcmludGYoKSBkb2N1bWVudGF0aW9uIGZvciBmb3JtYXQgc3RyaW5nIGV4dGVuc2lvbnMgb3ZlciBDOTkuCiAgKi8KIGludCBzcHJpbnRmKGNoYXIgKiBidWYsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQogewpAQCAtOTA1LDcgKzk3Miw2IEBACiAJdmFfZW5kKGFyZ3MpOwogCXJldHVybiBpOwogfQotCiBFWFBPUlRfU1lNQk9MKHNwcmludGYpOwogCiAvKioKQEAgLTExMzQsNyArMTIwMCw2IEBACiAKIAlyZXR1cm4gbnVtOwogfQotCiBFWFBPUlRfU1lNQk9MKHZzc2NhbmYpOwogCiAvKioKQEAgLTExNTMsNSArMTIxOCw0IEBACiAJdmFfZW5kKGFyZ3MpOwogCXJldHVybiBpOwogfQotCiBFWFBPUlRfU1lNQk9MKHNzY2FuZik7CmRpZmYgLS1naXQgYS9tbS9LY29uZmlnIGIvbW0vS2NvbmZpZwppbmRleCAwYmQ5YzJkLi41YjU3OTBmIDEwMDY0NAotLS0gYS9tbS9LY29uZmlnCisrKyBiL21tL0tjb25maWcKQEAgLTEwMSw3ICsxMDEsNyBAQAogIyB3aXRoIGdjYyAzLjQgYW5kIGxhdGVyLgogIwogY29uZmlnIFNQQVJTRU1FTV9TVEFUSUMKLQlkZWZfYm9vbCBuCisJYm9vbAogCiAjCiAjIEFyY2hpdGVjdHVyZSBwbGF0Zm9ybXMgd2hpY2ggcmVxdWlyZSBhIHR3byBsZXZlbCBtZW1fc2VjdGlvbiBpbiBTUEFSU0VNRU0KQEAgLTExMyw3ICsxMTMsNyBAQAogCWRlcGVuZHMgb24gU1BBUlNFTUVNICYmICFTUEFSU0VNRU1fU1RBVElDCiAKIGNvbmZpZyBTUEFSU0VNRU1fVk1FTU1BUF9FTkFCTEUKLQlkZWZfYm9vbCBuCisJYm9vbAogCiBjb25maWcgU1BBUlNFTUVNX1ZNRU1NQVAKIAlib29sICJTcGFyc2UgTWVtb3J5IHZpcnR1YWwgbWVtbWFwIgpAQCAtMTg3LDYgKzE4Nyw5IEBACiAJaGVscAogCSAgVGhpcyBvcHRpb24gYWxsb3dzIG1lbW9yeSBhbmQgSU8gcmVzb3VyY2VzIHRvIGJlIDY0IGJpdC4KIAorY29uZmlnIFBIWVNfQUREUl9UXzY0QklUCisJZGVmX2Jvb2wgNjRCSVQgfHwgQVJDSF9QSFlTX0FERFJfVF82NEJJVAorCiBjb25maWcgWk9ORV9ETUFfRkxBRwogCWludAogCWRlZmF1bHQgIjAiIGlmICFaT05FX0RNQQpAQCAtMjA2LDUgKzIwOSwxNiBAQAogCWRlZl9ib29sIHkKIAlkZXBlbmRzIG9uICFBUkNIX05PX1ZJUlRfVE9fQlVTCiAKK2NvbmZpZyBVTkVWSUNUQUJMRV9MUlUKKwlib29sICJBZGQgTFJVIGxpc3QgdG8gdHJhY2sgbm9uLWV2aWN0YWJsZSBwYWdlcyIKKwlkZWZhdWx0IHkKKwlkZXBlbmRzIG9uIE1NVQorCWhlbHAKKwkgIEtlZXBzIHVuZXZpY3RhYmxlIHBhZ2VzIG9mZiBvZiB0aGUgYWN0aXZlIGFuZCBpbmFjdGl2ZSBwYWdlb3V0CisJICBsaXN0cywgc28ga3N3YXBkIHdpbGwgbm90IHdhc3RlIENQVSB0aW1lIG9yIGhhdmUgaXRzIGJhbGFuY2luZworCSAgYWxnb3JpdGhtcyB0aHJvd24gb2ZmIGJ5IHNjYW5uaW5nIHRoZXNlIHBhZ2VzLiAgU2VsZWN0aW5nIHRoaXMKKwkgIHdpbGwgdXNlIG9uZSBwYWdlIGZsYWcgYW5kIGluY3JlYXNlIHRoZSBjb2RlIHNpemUgYSBsaXR0bGUsCisJICBzYXkgWSB1bmxlc3MgeW91IGtub3cgd2hhdCB5b3UgYXJlIGRvaW5nLgorCiBjb25maWcgTU1VX05PVElGSUVSCiAJYm9vbApkaWZmIC0tZ2l0IGEvbW0vTWFrZWZpbGUgYi9tbS9NYWtlZmlsZQppbmRleCBkYTRjY2YwLi5jMDZiNDVhIDEwMDY0NAotLS0gYS9tbS9NYWtlZmlsZQorKysgYi9tbS9NYWtlZmlsZQpAQCAtMzMsNSArMzMsNCBAQAogb2JqLSQoQ09ORklHX01JR1JBVElPTikgKz0gbWlncmF0ZS5vCiBvYmotJChDT05GSUdfU01QKSArPSBhbGxvY3BlcmNwdS5vCiBvYmotJChDT05GSUdfUVVJQ0tMSVNUKSArPSBxdWlja2xpc3Qubwotb2JqLSQoQ09ORklHX0NHUk9VUF9NRU1fUkVTX0NUTFIpICs9IG1lbWNvbnRyb2wubwotCitvYmotJChDT05GSUdfQ0dST1VQX01FTV9SRVNfQ1RMUikgKz0gbWVtY29udHJvbC5vIHBhZ2VfY2dyb3VwLm8KZGlmZiAtLWdpdCBhL21tL2Jvb3RtZW0uYyBiL21tL2Jvb3RtZW0uYwppbmRleCBhZDhlZWM2Li5hYzVhODkxIDEwMDY0NAotLS0gYS9tbS9ib290bWVtLmMKKysrIGIvbW0vYm9vdG1lbS5jCkBAIC00OCw3ICs0OCw3IEBACiAJaWYgKHVubGlrZWx5KGJvb3RtZW1fZGVidWcpKQkJCVwKIAkJcHJpbnRrKEtFUk5fSU5GTwkJCVwKIAkJCSJib290bWVtOjolcyAiIGZtdCwJCVwKLQkJCV9fRlVOQ1RJT05fXywgIyMgYXJncyk7CQlcCisJCQlfX2Z1bmNfXywgIyMgYXJncyk7CQlcCiB9KQogCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBfX2luaXQgYm9vdG1hcF9ieXRlcyh1bnNpZ25lZCBsb25nIHBhZ2VzKQpkaWZmIC0tZ2l0IGEvbW0vZmFkdmlzZS5jIGIvbW0vZmFkdmlzZS5jCmluZGV4IDM0M2NmZGYuLmExZGE5NjkgMTAwNjQ0Ci0tLSBhL21tL2ZhZHZpc2UuYworKysgYi9tbS9mYWR2aXNlLmMKQEAgLTMsNyArMyw3IEBACiAgKgogICogQ29weXJpZ2h0IChDKSAyMDAyLCBMaW51cyBUb3J2YWxkcwogICoKLSAqIDExSmFuMjAwMwlha3BtQGRpZ2VvLmNvbQorICogMTFKYW4yMDAzCUFuZHJldyBNb3J0b24KICAqCQlJbml0aWFsIHZlcnNpb24uCiAgKi8KIApkaWZmIC0tZ2l0IGEvbW0vZmlsZW1hcC5jIGIvbW0vZmlsZW1hcC5jCmluZGV4IDg3NmJjNTkuLmFiODU1MzYgMTAwNjQ0Ci0tLSBhL21tL2ZpbGVtYXAuYworKysgYi9tbS9maWxlbWFwLmMKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlIDxsaW51eC9jcHVzZXQuaD4KICNpbmNsdWRlIDxsaW51eC9oYXJkaXJxLmg+IC8qIGZvciBCVUdfT04oIWluX2F0b21pYygpKSBvbmx5ICovCiAjaW5jbHVkZSA8bGludXgvbWVtY29udHJvbC5oPgorI2luY2x1ZGUgPGxpbnV4L21tX2lubGluZS5oPiAvKiBmb3IgcGFnZV9pc19maWxlX2NhY2hlKCkgKi8KICNpbmNsdWRlICJpbnRlcm5hbC5oIgogCiAvKgpAQCAtMTE1LDEyICsxMTYsMTIgQEAKIHsKIAlzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyA9IHBhZ2UtPm1hcHBpbmc7CiAKLQltZW1fY2dyb3VwX3VuY2hhcmdlX2NhY2hlX3BhZ2UocGFnZSk7CiAJcmFkaXhfdHJlZV9kZWxldGUoJm1hcHBpbmctPnBhZ2VfdHJlZSwgcGFnZS0+aW5kZXgpOwogCXBhZ2UtPm1hcHBpbmcgPSBOVUxMOwogCW1hcHBpbmctPm5ycGFnZXMtLTsKIAlfX2RlY196b25lX3BhZ2Vfc3RhdGUocGFnZSwgTlJfRklMRV9QQUdFUyk7CiAJQlVHX09OKHBhZ2VfbWFwcGVkKHBhZ2UpKTsKKwltZW1fY2dyb3VwX3VuY2hhcmdlX2NhY2hlX3BhZ2UocGFnZSk7CiAKIAkvKgogCSAqIFNvbWUgZmlsZXN5c3RlbXMgc2VlbSB0byByZS1kaXJ0eSB0aGUgcGFnZSBldmVuIGFmdGVyCkBAIC00OTIsOSArNDkzLDI0IEBACiBpbnQgYWRkX3RvX3BhZ2VfY2FjaGVfbHJ1KHN0cnVjdCBwYWdlICpwYWdlLCBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywKIAkJCQlwZ29mZl90IG9mZnNldCwgZ2ZwX3QgZ2ZwX21hc2spCiB7Ci0JaW50IHJldCA9IGFkZF90b19wYWdlX2NhY2hlKHBhZ2UsIG1hcHBpbmcsIG9mZnNldCwgZ2ZwX21hc2spOwotCWlmIChyZXQgPT0gMCkKLQkJbHJ1X2NhY2hlX2FkZChwYWdlKTsKKwlpbnQgcmV0OworCisJLyoKKwkgKiBTcGxpY2VfcmVhZCBhbmQgcmVhZGFoZWFkIGFkZCBzaG1lbS90bXBmcyBwYWdlcyBpbnRvIHRoZSBwYWdlIGNhY2hlCisJICogYmVmb3JlIHNobWVtX3JlYWRwYWdlIGhhcyBhIGNoYW5jZSB0byBtYXJrIHRoZW0gYXMgU3dhcEJhY2tlZDogdGhleQorCSAqIG5lZWQgdG8gZ28gb24gdGhlIGFjdGl2ZV9hbm9uIGxydSBiZWxvdywgYW5kIG1lbV9jZ3JvdXBfY2FjaGVfY2hhcmdlCisJICogKGNhbGxlZCBpbiBhZGRfdG9fcGFnZV9jYWNoZSkgbmVlZHMgdG8ga25vdyB3aGVyZSB0aGV5J3JlIGdvaW5nIHRvby4KKwkgKi8KKwlpZiAobWFwcGluZ19jYXBfc3dhcF9iYWNrZWQobWFwcGluZykpCisJCVNldFBhZ2VTd2FwQmFja2VkKHBhZ2UpOworCisJcmV0ID0gYWRkX3RvX3BhZ2VfY2FjaGUocGFnZSwgbWFwcGluZywgb2Zmc2V0LCBnZnBfbWFzayk7CisJaWYgKHJldCA9PSAwKSB7CisJCWlmIChwYWdlX2lzX2ZpbGVfY2FjaGUocGFnZSkpCisJCQlscnVfY2FjaGVfYWRkX2ZpbGUocGFnZSk7CisJCWVsc2UKKwkJCWxydV9jYWNoZV9hZGRfYWN0aXZlX2Fub24ocGFnZSk7CisJfQogCXJldHVybiByZXQ7CiB9CiAKQEAgLTU1NywxNyArNTczLDE0IEBACiAgKiBtZWNoYW5hbmlzbSBiZXR3ZWVuIFBhZ2VMb2NrZWQgcGFnZXMgYW5kIFBhZ2VXcml0ZWJhY2sgcGFnZXMgaXMgc2hhcmVkLgogICogQnV0IHRoYXQncyBPSyAtIHNsZWVwZXJzIGluIHdhaXRfb25fcGFnZV93cml0ZWJhY2soKSBqdXN0IGdvIGJhY2sgdG8gc2xlZXAuCiAgKgotICogVGhlIGZpcnN0IG1iIGlzIG5lY2Vzc2FyeSB0byBzYWZlbHkgY2xvc2UgdGhlIGNyaXRpY2FsIHNlY3Rpb24gb3BlbmVkIGJ5IHRoZQotICogdGVzdF9hbmRfc2V0X2JpdCgpIHRvIGxvY2sgdGhlIHBhZ2U7IHRoZSBzZWNvbmQgbWIgaXMgbmVjZXNzYXJ5IHRvIGVuZm9yY2UKLSAqIG9yZGVyaW5nIGJldHdlZW4gdGhlIGNsZWFyX2JpdCBhbmQgdGhlIHJlYWQgb2YgdGhlIHdhaXRxdWV1ZSAodG8gYXZvaWQgU01QCi0gKiByYWNlcyB3aXRoIGEgcGFyYWxsZWwgd2FpdF9vbl9wYWdlX2xvY2tlZCgpKS4KKyAqIFRoZSBtYiBpcyBuZWNlc3NhcnkgdG8gZW5mb3JjZSBvcmRlcmluZyBiZXR3ZWVuIHRoZSBjbGVhcl9iaXQgYW5kIHRoZSByZWFkCisgKiBvZiB0aGUgd2FpdHF1ZXVlICh0byBhdm9pZCBTTVAgcmFjZXMgd2l0aCBhIHBhcmFsbGVsIHdhaXRfb25fcGFnZV9sb2NrZWQoKSkuCiAgKi8KIHZvaWQgdW5sb2NrX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpCiB7Ci0Jc21wX21iX19iZWZvcmVfY2xlYXJfYml0KCk7Ci0JaWYgKCF0ZXN0X2FuZF9jbGVhcl9iaXQoUEdfbG9ja2VkLCAmcGFnZS0+ZmxhZ3MpKQotCQlCVUcoKTsKLQlzbXBfbWJfX2FmdGVyX2NsZWFyX2JpdCgpOyAKKwlWTV9CVUdfT04oIVBhZ2VMb2NrZWQocGFnZSkpOworCWNsZWFyX2JpdF91bmxvY2soUEdfbG9ja2VkLCAmcGFnZS0+ZmxhZ3MpOworCXNtcF9tYl9fYWZ0ZXJfY2xlYXJfYml0KCk7CiAJd2FrZV91cF9wYWdlKHBhZ2UsIFBHX2xvY2tlZCk7CiB9CiBFWFBPUlRfU1lNQk9MKHVubG9ja19wYWdlKTsKQEAgLTExMDAsOCArMTExMyw5IEBACiAKIHBhZ2Vfbm90X3VwX3RvX2RhdGU6CiAJCS8qIEdldCBleGNsdXNpdmUgYWNjZXNzIHRvIHRoZSBwYWdlIC4uLiAqLwotCQlpZiAobG9ja19wYWdlX2tpbGxhYmxlKHBhZ2UpKQotCQkJZ290byByZWFkcGFnZV9laW87CisJCWVycm9yID0gbG9ja19wYWdlX2tpbGxhYmxlKHBhZ2UpOworCQlpZiAodW5saWtlbHkoZXJyb3IpKQorCQkJZ290byByZWFkcGFnZV9lcnJvcjsKIAogcGFnZV9ub3RfdXBfdG9fZGF0ZV9sb2NrZWQ6CiAJCS8qIERpZCBpdCBnZXQgdHJ1bmNhdGVkIGJlZm9yZSB3ZSBnb3QgdGhlIGxvY2s/ICovCkBAIC0xMTMwLDggKzExNDQsOSBAQAogCQl9CiAKIAkJaWYgKCFQYWdlVXB0b2RhdGUocGFnZSkpIHsKLQkJCWlmIChsb2NrX3BhZ2Vfa2lsbGFibGUocGFnZSkpCi0JCQkJZ290byByZWFkcGFnZV9laW87CisJCQllcnJvciA9IGxvY2tfcGFnZV9raWxsYWJsZShwYWdlKTsKKwkJCWlmICh1bmxpa2VseShlcnJvcikpCisJCQkJZ290byByZWFkcGFnZV9lcnJvcjsKIAkJCWlmICghUGFnZVVwdG9kYXRlKHBhZ2UpKSB7CiAJCQkJaWYgKHBhZ2UtPm1hcHBpbmcgPT0gTlVMTCkgewogCQkJCQkvKgpAQCAtMTE0MywxNSArMTE1OCwxNCBAQAogCQkJCX0KIAkJCQl1bmxvY2tfcGFnZShwYWdlKTsKIAkJCQlzaHJpbmtfcmVhZGFoZWFkX3NpemVfZWlvKGZpbHAsIHJhKTsKLQkJCQlnb3RvIHJlYWRwYWdlX2VpbzsKKwkJCQllcnJvciA9IC1FSU87CisJCQkJZ290byByZWFkcGFnZV9lcnJvcjsKIAkJCX0KIAkJCXVubG9ja19wYWdlKHBhZ2UpOwogCQl9CiAKIAkJZ290byBwYWdlX29rOwogCi1yZWFkcGFnZV9laW86Ci0JCWVycm9yID0gLUVJTzsKIHJlYWRwYWdlX2Vycm9yOgogCQkvKiBVSEhVSCEgQSBzeW5jaHJvbm91cyByZWFkIGVycm9yIG9jY3VycmVkLiBSZXBvcnQgaXQgKi8KIAkJZGVzYy0+ZXJyb3IgPSBlcnJvcjsKQEAgLTExODYsOCArMTIwMCw3IEBACiAJcmEtPnByZXZfcG9zIHw9IHByZXZfb2Zmc2V0OwogCiAJKnBwb3MgPSAoKGxvZmZfdClpbmRleCA8PCBQQUdFX0NBQ0hFX1NISUZUKSArIG9mZnNldDsKLQlpZiAoZmlscCkKLQkJZmlsZV9hY2Nlc3NlZChmaWxwKTsKKwlmaWxlX2FjY2Vzc2VkKGZpbHApOwogfQogCiBpbnQgZmlsZV9yZWFkX2FjdG9yKHJlYWRfZGVzY3JpcHRvcl90ICpkZXNjLCBzdHJ1Y3QgcGFnZSAqcGFnZSwKZGlmZiAtLWdpdCBhL21tL2ZyZW1hcC5jIGIvbW0vZnJlbWFwLmMKaW5kZXggNzg4MTYzOC4uN2QxMmNhNyAxMDA2NDQKLS0tIGEvbW0vZnJlbWFwLmMKKysrIGIvbW0vZnJlbWFwLmMKQEAgLTIxLDYgKzIxLDggQEAKICNpbmNsdWRlIDxhc20vY2FjaGVmbHVzaC5oPgogI2luY2x1ZGUgPGFzbS90bGJmbHVzaC5oPgogCisjaW5jbHVkZSAiaW50ZXJuYWwuaCIKKwogc3RhdGljIHZvaWQgemFwX3B0ZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCiAJCQl1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGVwKQogewpAQCAtMjE1LDE1ICsyMTcsMzEgQEAKIAkJc3Bpbl91bmxvY2soJm1hcHBpbmctPmlfbW1hcF9sb2NrKTsKIAl9CiAKKwlpZiAodm1hLT52bV9mbGFncyAmIFZNX0xPQ0tFRCkgeworCQkvKgorCQkgKiBkcm9wIFBHX01sb2NrZWQgZmxhZyBmb3Igb3Zlci1tYXBwZWQgcmFuZ2UKKwkJICovCisJCXVuc2lnbmVkIGludCBzYXZlZF9mbGFncyA9IHZtYS0+dm1fZmxhZ3M7CisJCW11bmxvY2tfdm1hX3BhZ2VzX3JhbmdlKHZtYSwgc3RhcnQsIHN0YXJ0ICsgc2l6ZSk7CisJCXZtYS0+dm1fZmxhZ3MgPSBzYXZlZF9mbGFnczsKKwl9CisKIAltbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9zdGFydChtbSwgc3RhcnQsIHN0YXJ0ICsgc2l6ZSk7CiAJZXJyID0gcG9wdWxhdGVfcmFuZ2UobW0sIHZtYSwgc3RhcnQsIHNpemUsIHBnb2ZmKTsKIAltbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9lbmQobW0sIHN0YXJ0LCBzdGFydCArIHNpemUpOwogCWlmICghZXJyICYmICEoZmxhZ3MgJiBNQVBfTk9OQkxPQ0spKSB7Ci0JCWlmICh1bmxpa2VseShoYXNfd3JpdGVfbG9jaykpIHsKLQkJCWRvd25ncmFkZV93cml0ZSgmbW0tPm1tYXBfc2VtKTsKLQkJCWhhc193cml0ZV9sb2NrID0gMDsKKwkJaWYgKHZtYS0+dm1fZmxhZ3MgJiBWTV9MT0NLRUQpIHsKKwkJCS8qCisJCQkgKiBtaWdodCBiZSBtYXBwaW5nIHByZXZpb3VzbHkgdW5tYXBwZWQgcmFuZ2Ugb2YgZmlsZQorCQkJICovCisJCQltbG9ja192bWFfcGFnZXNfcmFuZ2Uodm1hLCBzdGFydCwgc3RhcnQgKyBzaXplKTsKKwkJfSBlbHNlIHsKKwkJCWlmICh1bmxpa2VseShoYXNfd3JpdGVfbG9jaykpIHsKKwkJCQlkb3duZ3JhZGVfd3JpdGUoJm1tLT5tbWFwX3NlbSk7CisJCQkJaGFzX3dyaXRlX2xvY2sgPSAwOworCQkJfQorCQkJbWFrZV9wYWdlc19wcmVzZW50KHN0YXJ0LCBzdGFydCtzaXplKTsKIAkJfQotCQltYWtlX3BhZ2VzX3ByZXNlbnQoc3RhcnQsIHN0YXJ0K3NpemUpOwogCX0KIAogCS8qCkBAIC0yNDAsNCArMjU4LDMgQEAKIAogCXJldHVybiBlcnI7CiB9Ci0KZGlmZiAtLWdpdCBhL21tL2h1Z2V0bGIuYyBiL21tL2h1Z2V0bGIuYwppbmRleCA2N2E3MTE5Li5jZThjYmIyIDEwMDY0NAotLS0gYS9tbS9odWdldGxiLmMKKysrIGIvbW0vaHVnZXRsYi5jCkBAIC0yNjIsNyArMjYyLDcgQEAKIAlzdHJ1Y3QgbGlzdF9oZWFkIHJlZ2lvbnM7CiB9OwogCi1zdHJ1Y3QgcmVzdl9tYXAgKnJlc3ZfbWFwX2FsbG9jKHZvaWQpCitzdGF0aWMgc3RydWN0IHJlc3ZfbWFwICpyZXN2X21hcF9hbGxvYyh2b2lkKQogewogCXN0cnVjdCByZXN2X21hcCAqcmVzdl9tYXAgPSBrbWFsbG9jKHNpemVvZigqcmVzdl9tYXApLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXJlc3ZfbWFwKQpAQCAtMjc0LDcgKzI3NCw3IEBACiAJcmV0dXJuIHJlc3ZfbWFwOwogfQogCi12b2lkIHJlc3ZfbWFwX3JlbGVhc2Uoc3RydWN0IGtyZWYgKnJlZikKK3N0YXRpYyB2b2lkIHJlc3ZfbWFwX3JlbGVhc2Uoc3RydWN0IGtyZWYgKnJlZikKIHsKIAlzdHJ1Y3QgcmVzdl9tYXAgKnJlc3ZfbWFwID0gY29udGFpbmVyX29mKHJlZiwgc3RydWN0IHJlc3ZfbWFwLCByZWZzKTsKIApAQCAtMjg5LDcgKzI4OSw3IEBACiAJaWYgKCEodm1hLT52bV9mbGFncyAmIFZNX1NIQVJFRCkpCiAJCXJldHVybiAoc3RydWN0IHJlc3ZfbWFwICopKGdldF92bWFfcHJpdmF0ZV9kYXRhKHZtYSkgJgogCQkJCQkJCX5IUEFHRV9SRVNWX01BU0spOwotCXJldHVybiAwOworCXJldHVybiBOVUxMOwogfQogCiBzdGF0aWMgdm9pZCBzZXRfdm1hX3Jlc3ZfbWFwKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBzdHJ1Y3QgcmVzdl9tYXAgKm1hcCkKQEAgLTE0NTksMTEgKzE0NTksMTEgQEAKIHsKIAlzdHJ1Y3QgaHN0YXRlICpoID0gJmRlZmF1bHRfaHN0YXRlOwogCXJldHVybiBzcHJpbnRmKGJ1ZiwKLQkJCSJIdWdlUGFnZXNfVG90YWw6ICU1bHVcbiIKLQkJCSJIdWdlUGFnZXNfRnJlZTogICU1bHVcbiIKLQkJCSJIdWdlUGFnZXNfUnN2ZDogICU1bHVcbiIKLQkJCSJIdWdlUGFnZXNfU3VycDogICU1bHVcbiIKLQkJCSJIdWdlcGFnZXNpemU6ICAgICU1bHUga0JcbiIsCisJCQkiSHVnZVBhZ2VzX1RvdGFsOiAgICU1bHVcbiIKKwkJCSJIdWdlUGFnZXNfRnJlZTogICAgJTVsdVxuIgorCQkJIkh1Z2VQYWdlc19Sc3ZkOiAgICAlNWx1XG4iCisJCQkiSHVnZVBhZ2VzX1N1cnA6ICAgICU1bHVcbiIKKwkJCSJIdWdlcGFnZXNpemU6ICAgJThsdSBrQlxuIiwKIAkJCWgtPm5yX2h1Z2VfcGFnZXMsCiAJCQloLT5mcmVlX2h1Z2VfcGFnZXMsCiAJCQloLT5yZXN2X2h1Z2VfcGFnZXMsCkBAIC0xNzQ3LDEwICsxNzQ3LDggQEAKICAqIGZyb20gb3RoZXIgVk1BcyBhbmQgbGV0IHRoZSBjaGlsZHJlbiBiZSBTSUdLSUxMZWQgaWYgdGhleSBhcmUgZmF1bHRpbmcgdGhlCiAgKiBzYW1lIHJlZ2lvbi4KICAqLwotaW50IHVubWFwX3JlZl9wcml2YXRlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAotCQkJCQlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKLQkJCQkJc3RydWN0IHBhZ2UgKnBhZ2UsCi0JCQkJCXVuc2lnbmVkIGxvbmcgYWRkcmVzcykKK3N0YXRpYyBpbnQgdW5tYXBfcmVmX3ByaXZhdGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAorCQkJCXN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MpCiB7CiAJc3RydWN0IHZtX2FyZWFfc3RydWN0ICppdGVyX3ZtYTsKIAlzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZzsKQEAgLTIwMDgsNyArMjAwNiw3IEBACiAJZW50cnkgPSBodWdlX3B0ZXBfZ2V0KHB0ZXApOwogCWlmIChodWdlX3B0ZV9ub25lKGVudHJ5KSkgewogCQlyZXQgPSBodWdldGxiX25vX3BhZ2UobW0sIHZtYSwgYWRkcmVzcywgcHRlcCwgd3JpdGVfYWNjZXNzKTsKLQkJZ290byBvdXRfdW5sb2NrOworCQlnb3RvIG91dF9tdXRleDsKIAl9CiAKIAlyZXQgPSAwOwpAQCAtMjAyNCw3ICsyMDIyLDcgQEAKIAlpZiAod3JpdGVfYWNjZXNzICYmICFwdGVfd3JpdGUoZW50cnkpKSB7CiAJCWlmICh2bWFfbmVlZHNfcmVzZXJ2YXRpb24oaCwgdm1hLCBhZGRyZXNzKSA8IDApIHsKIAkJCXJldCA9IFZNX0ZBVUxUX09PTTsKLQkJCWdvdG8gb3V0X3VubG9jazsKKwkJCWdvdG8gb3V0X211dGV4OwogCQl9CiAKIAkJaWYgKCEodm1hLT52bV9mbGFncyAmIFZNX1NIQVJFRCkpCkBAIC0yMDM0LDEwICsyMDMyLDIzIEBACiAKIAlzcGluX2xvY2soJm1tLT5wYWdlX3RhYmxlX2xvY2spOwogCS8qIENoZWNrIGZvciBhIHJhY2luZyB1cGRhdGUgYmVmb3JlIGNhbGxpbmcgaHVnZXRsYl9jb3cgKi8KLQlpZiAobGlrZWx5KHB0ZV9zYW1lKGVudHJ5LCBodWdlX3B0ZXBfZ2V0KHB0ZXApKSkpCi0JCWlmICh3cml0ZV9hY2Nlc3MgJiYgIXB0ZV93cml0ZShlbnRyeSkpCisJaWYgKHVubGlrZWx5KCFwdGVfc2FtZShlbnRyeSwgaHVnZV9wdGVwX2dldChwdGVwKSkpKQorCQlnb3RvIG91dF9wYWdlX3RhYmxlX2xvY2s7CisKKworCWlmICh3cml0ZV9hY2Nlc3MpIHsKKwkJaWYgKCFwdGVfd3JpdGUoZW50cnkpKSB7CiAJCQlyZXQgPSBodWdldGxiX2NvdyhtbSwgdm1hLCBhZGRyZXNzLCBwdGVwLCBlbnRyeSwKIAkJCQkJCQlwYWdlY2FjaGVfcGFnZSk7CisJCQlnb3RvIG91dF9wYWdlX3RhYmxlX2xvY2s7CisJCX0KKwkJZW50cnkgPSBwdGVfbWtkaXJ0eShlbnRyeSk7CisJfQorCWVudHJ5ID0gcHRlX21reW91bmcoZW50cnkpOworCWlmIChodWdlX3B0ZXBfc2V0X2FjY2Vzc19mbGFncyh2bWEsIGFkZHJlc3MsIHB0ZXAsIGVudHJ5LCB3cml0ZV9hY2Nlc3MpKQorCQl1cGRhdGVfbW11X2NhY2hlKHZtYSwgYWRkcmVzcywgZW50cnkpOworCitvdXRfcGFnZV90YWJsZV9sb2NrOgogCXNwaW5fdW5sb2NrKCZtbS0+cGFnZV90YWJsZV9sb2NrKTsKIAogCWlmIChwYWdlY2FjaGVfcGFnZSkgewpAQCAtMjA0NSw3ICsyMDU2LDcgQEAKIAkJcHV0X3BhZ2UocGFnZWNhY2hlX3BhZ2UpOwogCX0KIAotb3V0X3VubG9jazoKK291dF9tdXRleDoKIAltdXRleF91bmxvY2soJmh1Z2V0bGJfaW5zdGFudGlhdGlvbl9tdXRleCk7CiAKIAlyZXR1cm4gcmV0OwpAQCAtMjA2MCw2ICsyMDcxLDE0IEBACiAJcmV0dXJuIE5VTEw7CiB9CiAKK3N0YXRpYyBpbnQgaHVnZV96ZXJvcGFnZV9vayhwdGVfdCAqcHRlcCwgaW50IHdyaXRlLCBpbnQgc2hhcmVkKQoreworCWlmICghcHRlcCB8fCB3cml0ZSB8fCBzaGFyZWQpCisJCXJldHVybiAwOworCWVsc2UKKwkJcmV0dXJuIGh1Z2VfcHRlX25vbmUoaHVnZV9wdGVwX2dldChwdGVwKSk7Cit9CisKIGludCBmb2xsb3dfaHVnZXRsYl9wYWdlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKIAkJCXN0cnVjdCBwYWdlICoqcGFnZXMsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqKnZtYXMsCiAJCQl1bnNpZ25lZCBsb25nICpwb3NpdGlvbiwgaW50ICpsZW5ndGgsIGludCBpLApAQCAtMjA2OSw2ICsyMDg4LDggQEAKIAl1bnNpZ25lZCBsb25nIHZhZGRyID0gKnBvc2l0aW9uOwogCWludCByZW1haW5kZXIgPSAqbGVuZ3RoOwogCXN0cnVjdCBoc3RhdGUgKmggPSBoc3RhdGVfdm1hKHZtYSk7CisJaW50IHplcm9wYWdlX29rID0gMDsKKwlpbnQgc2hhcmVkID0gdm1hLT52bV9mbGFncyAmIFZNX1NIQVJFRDsKIAogCXNwaW5fbG9jaygmbW0tPnBhZ2VfdGFibGVfbG9jayk7CiAJd2hpbGUgKHZhZGRyIDwgdm1hLT52bV9lbmQgJiYgcmVtYWluZGVyKSB7CkBAIC0yMDgxLDggKzIxMDIsMTEgQEAKIAkJICogZmlyc3QsIGZvciB0aGUgcGFnZSBpbmRleGluZyBiZWxvdyB0byB3b3JrLgogCQkgKi8KIAkJcHRlID0gaHVnZV9wdGVfb2Zmc2V0KG1tLCB2YWRkciAmIGh1Z2VfcGFnZV9tYXNrKGgpKTsKKwkJaWYgKGh1Z2VfemVyb3BhZ2Vfb2socHRlLCB3cml0ZSwgc2hhcmVkKSkKKwkJCXplcm9wYWdlX29rID0gMTsKIAotCQlpZiAoIXB0ZSB8fCBodWdlX3B0ZV9ub25lKGh1Z2VfcHRlcF9nZXQocHRlKSkgfHwKKwkJaWYgKCFwdGUgfHwKKwkJICAgIChodWdlX3B0ZV9ub25lKGh1Z2VfcHRlcF9nZXQocHRlKSkgJiYgIXplcm9wYWdlX29rKSB8fAogCQkgICAgKHdyaXRlICYmICFwdGVfd3JpdGUoaHVnZV9wdGVwX2dldChwdGUpKSkpIHsKIAkJCWludCByZXQ7CiAKQEAgLTIxMDIsOCArMjEyNiwxMSBAQAogCQlwYWdlID0gcHRlX3BhZ2UoaHVnZV9wdGVwX2dldChwdGUpKTsKIHNhbWVfcGFnZToKIAkJaWYgKHBhZ2VzKSB7Ci0JCQlnZXRfcGFnZShwYWdlKTsKLQkJCXBhZ2VzW2ldID0gcGFnZSArIHBmbl9vZmZzZXQ7CisJCQlpZiAoemVyb3BhZ2Vfb2spCisJCQkJcGFnZXNbaV0gPSBaRVJPX1BBR0UoMCk7CisJCQllbHNlCisJCQkJcGFnZXNbaV0gPSBwYWdlICsgcGZuX29mZnNldDsKKwkJCWdldF9wYWdlKHBhZ2VzW2ldKTsKIAkJfQogCiAJCWlmICh2bWFzKQpkaWZmIC0tZ2l0IGEvbW0vaW50ZXJuYWwuaCBiL21tL2ludGVybmFsLmgKaW5kZXggMWY0M2Y3NC4uZTRlNzI4YiAxMDA2NDQKLS0tIGEvbW0vaW50ZXJuYWwuaAorKysgYi9tbS9pbnRlcm5hbC5oCkBAIC0zOSw2ICszOSwxNSBAQAogCWF0b21pY19kZWMoJnBhZ2UtPl9jb3VudCk7CiB9CiAKKy8qCisgKiBpbiBtbS92bXNjYW4uYzoKKyAqLworZXh0ZXJuIGludCBpc29sYXRlX2xydV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlKTsKK2V4dGVybiB2b2lkIHB1dGJhY2tfbHJ1X3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpOworCisvKgorICogaW4gbW0vcGFnZV9hbGxvYy5jCisgKi8KIGV4dGVybiB2b2lkIF9fZnJlZV9wYWdlc19ib290bWVtKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIpOwogCiAvKgpAQCAtNTIsNiArNjEsMTIwIEBACiAJcmV0dXJuIHBhZ2VfcHJpdmF0ZShwYWdlKTsKIH0KIAorZXh0ZXJuIGxvbmcgbWxvY2tfdm1hX3BhZ2VzX3JhbmdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAorCQkJdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpOworZXh0ZXJuIHZvaWQgbXVubG9ja192bWFfcGFnZXNfcmFuZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCisJCQl1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCk7CitzdGF0aWMgaW5saW5lIHZvaWQgbXVubG9ja192bWFfcGFnZXNfYWxsKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQoreworCW11bmxvY2tfdm1hX3BhZ2VzX3JhbmdlKHZtYSwgdm1hLT52bV9zdGFydCwgdm1hLT52bV9lbmQpOworfQorCisjaWZkZWYgQ09ORklHX1VORVZJQ1RBQkxFX0xSVQorLyoKKyAqIHVuZXZpY3RhYmxlX21pZ3JhdGVfcGFnZSgpIGNhbGxlZCBvbmx5IGZyb20gbWlncmF0ZV9wYWdlX2NvcHkoKSB0bworICogbWlncmF0ZSB1bmV2aWN0YWJsZSBmbGFnIHRvIG5ldyBwYWdlLgorICogTm90ZSB0aGF0IHRoZSBvbGQgcGFnZSBoYXMgYmVlbiBpc29sYXRlZCBmcm9tIHRoZSBMUlUgbGlzdHMgYXQgdGhpcworICogcG9pbnQgc28gd2UgZG9uJ3QgbmVlZCB0byB3b3JyeSBhYm91dCBMUlUgc3RhdGlzdGljcy4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIHVuZXZpY3RhYmxlX21pZ3JhdGVfcGFnZShzdHJ1Y3QgcGFnZSAqbmV3LCBzdHJ1Y3QgcGFnZSAqb2xkKQoreworCWlmIChUZXN0Q2xlYXJQYWdlVW5ldmljdGFibGUob2xkKSkKKwkJU2V0UGFnZVVuZXZpY3RhYmxlKG5ldyk7Cit9CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIHVuZXZpY3RhYmxlX21pZ3JhdGVfcGFnZShzdHJ1Y3QgcGFnZSAqbmV3LCBzdHJ1Y3QgcGFnZSAqb2xkKQoreworfQorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfVU5FVklDVEFCTEVfTFJVCisvKgorICogQ2FsbGVkIG9ubHkgaW4gZmF1bHQgcGF0aCB2aWEgcGFnZV9ldmljdGFibGUoKSBmb3IgYSBuZXcgcGFnZQorICogdG8gZGV0ZXJtaW5lIGlmIGl0J3MgYmVpbmcgbWFwcGVkIGludG8gYSBMT0NLRUQgdm1hLgorICogSWYgc28sIG1hcmsgcGFnZSBhcyBtbG9ja2VkLgorICovCitzdGF0aWMgaW5saW5lIGludCBpc19tbG9ja2VkX3ZtYShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgc3RydWN0IHBhZ2UgKnBhZ2UpCit7CisJVk1fQlVHX09OKFBhZ2VMUlUocGFnZSkpOworCisJaWYgKGxpa2VseSgodm1hLT52bV9mbGFncyAmIChWTV9MT0NLRUQgfCBWTV9TUEVDSUFMKSkgIT0gVk1fTE9DS0VEKSkKKwkJcmV0dXJuIDA7CisKKwlpZiAoIVRlc3RTZXRQYWdlTWxvY2tlZChwYWdlKSkgeworCQlpbmNfem9uZV9wYWdlX3N0YXRlKHBhZ2UsIE5SX01MT0NLKTsKKwkJY291bnRfdm1fZXZlbnQoVU5FVklDVEFCTEVfUEdNTE9DS0VEKTsKKwl9CisJcmV0dXJuIDE7Cit9CisKKy8qCisgKiBtdXN0IGJlIGNhbGxlZCB3aXRoIHZtYSdzIG1tYXBfc2VtIGhlbGQgZm9yIHJlYWQsIGFuZCBwYWdlIGxvY2tlZC4KKyAqLworZXh0ZXJuIHZvaWQgbWxvY2tfdm1hX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpOworCisvKgorICogQ2xlYXIgdGhlIHBhZ2UncyBQYWdlTWxvY2tlZCgpLiAgVGhpcyBjYW4gYmUgdXNlZnVsIGluIGEgc2l0dWF0aW9uIHdoZXJlCisgKiB3ZSB3YW50IHRvIHVuY29uZGl0aW9uYWxseSByZW1vdmUgYSBwYWdlIGZyb20gdGhlIHBhZ2VjYWNoZSAtLSBlLmcuLAorICogb24gdHJ1bmNhdGlvbiBvciBmcmVlaW5nLgorICoKKyAqIEl0IGlzIGxlZ2FsIHRvIGNhbGwgdGhpcyBmdW5jdGlvbiBmb3IgYW55IHBhZ2UsIG1sb2NrZWQgb3Igbm90LgorICogSWYgY2FsbGVkIGZvciBhIHBhZ2UgdGhhdCBpcyBzdGlsbCBtYXBwZWQgYnkgbWxvY2tlZCB2bWFzLCBhbGwgd2UgZG8KKyAqIGlzIHJldmVydCB0byBsYXp5IExSVSBiZWhhdmlvdXIgLS0gc2VtYW50aWNzIGFyZSBub3QgYnJva2VuLgorICovCitleHRlcm4gdm9pZCBfX2NsZWFyX3BhZ2VfbWxvY2soc3RydWN0IHBhZ2UgKnBhZ2UpOworc3RhdGljIGlubGluZSB2b2lkIGNsZWFyX3BhZ2VfbWxvY2soc3RydWN0IHBhZ2UgKnBhZ2UpCit7CisJaWYgKHVubGlrZWx5KFRlc3RDbGVhclBhZ2VNbG9ja2VkKHBhZ2UpKSkKKwkJX19jbGVhcl9wYWdlX21sb2NrKHBhZ2UpOworfQorCisvKgorICogbWxvY2tfbWlncmF0ZV9wYWdlIC0gY2FsbGVkIG9ubHkgZnJvbSBtaWdyYXRlX3BhZ2VfY29weSgpIHRvCisgKiBtaWdyYXRlIHRoZSBNbG9ja2VkIHBhZ2UgZmxhZzsgdXBkYXRlIHN0YXRpc3RpY3MuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBtbG9ja19taWdyYXRlX3BhZ2Uoc3RydWN0IHBhZ2UgKm5ld3BhZ2UsIHN0cnVjdCBwYWdlICpwYWdlKQoreworCWlmIChUZXN0Q2xlYXJQYWdlTWxvY2tlZChwYWdlKSkgeworCQl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwkJX19kZWNfem9uZV9wYWdlX3N0YXRlKHBhZ2UsIE5SX01MT0NLKTsKKwkJU2V0UGFnZU1sb2NrZWQobmV3cGFnZSk7CisJCV9faW5jX3pvbmVfcGFnZV9zdGF0ZShuZXdwYWdlLCBOUl9NTE9DSyk7CisJCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKwl9Cit9CisKKy8qCisgKiBmcmVlX3BhZ2VfbWxvY2soKSAtLSBjbGVhbiB1cCBhdHRlbXB0cyB0byBmcmVlIGFuZCBtbG9ja2VkKCkgcGFnZS4KKyAqIFBhZ2Ugc2hvdWxkIG5vdCBiZSBvbiBscnUsIHNvIG5vIG5lZWQgdG8gZml4IHRoYXQgdXAuCisgKiBmcmVlX3BhZ2VzX2NoZWNrKCkgd2lsbCB2ZXJpZnkuLi4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIGZyZWVfcGFnZV9tbG9jayhzdHJ1Y3QgcGFnZSAqcGFnZSkKK3sKKwlpZiAodW5saWtlbHkoVGVzdENsZWFyUGFnZU1sb2NrZWQocGFnZSkpKSB7CisJCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwkJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCQlfX2RlY196b25lX3BhZ2Vfc3RhdGUocGFnZSwgTlJfTUxPQ0spOworCQlfX2NvdW50X3ZtX2V2ZW50KFVORVZJQ1RBQkxFX01MT0NLRlJFRUQpOworCQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisJfQorfQorCisjZWxzZSAvKiBDT05GSUdfVU5FVklDVEFCTEVfTFJVICovCitzdGF0aWMgaW5saW5lIGludCBpc19tbG9ja2VkX3ZtYShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnYsIHN0cnVjdCBwYWdlICpwKQoreworCXJldHVybiAwOworfQorc3RhdGljIGlubGluZSB2b2lkIGNsZWFyX3BhZ2VfbWxvY2soc3RydWN0IHBhZ2UgKnBhZ2UpIHsgfQorc3RhdGljIGlubGluZSB2b2lkIG1sb2NrX3ZtYV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlKSB7IH0KK3N0YXRpYyBpbmxpbmUgdm9pZCBtbG9ja19taWdyYXRlX3BhZ2Uoc3RydWN0IHBhZ2UgKm5ldywgc3RydWN0IHBhZ2UgKm9sZCkgeyB9CitzdGF0aWMgaW5saW5lIHZvaWQgZnJlZV9wYWdlX21sb2NrKHN0cnVjdCBwYWdlICpwYWdlKSB7IH0KKworI2VuZGlmIC8qIENPTkZJR19VTkVWSUNUQUJMRV9MUlUgKi8KKwogLyoKICAqIEZMQVRNRU0gYW5kIERJU0NPTlRJR01FTSBjb25maWd1cmF0aW9ucyB1c2UgYWxsb2NfYm9vdG1lbV9ub2RlLAogICogc28gYWxsIGZ1bmN0aW9ucyBzdGFydGluZyBhdCBwYWdpbmdfaW5pdCBzaG91bGQgYmUgbWFya2VkIF9faW5pdApAQCAtMTIwLDQgKzI0MywxMiBAQAogfQogI2VuZGlmIC8qIENPTkZJR19TUEFSU0VNRU0gKi8KIAorI2RlZmluZSBHVVBfRkxBR1NfV1JJVEUgICAgICAgICAgICAgICAgICAweDEKKyNkZWZpbmUgR1VQX0ZMQUdTX0ZPUkNFICAgICAgICAgICAgICAgICAgMHgyCisjZGVmaW5lIEdVUF9GTEFHU19JR05PUkVfVk1BX1BFUk1JU1NJT05TIDB4NAorCitpbnQgX19nZXRfdXNlcl9wYWdlcyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgc3RydWN0IG1tX3N0cnVjdCAqbW0sCisJCSAgICAgdW5zaWduZWQgbG9uZyBzdGFydCwgaW50IGxlbiwgaW50IGZsYWdzLAorCQkgICAgIHN0cnVjdCBwYWdlICoqcGFnZXMsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqKnZtYXMpOworCiAjZW5kaWYKZGlmZiAtLWdpdCBhL21tL21lbWNvbnRyb2wuYyBiL21tL21lbWNvbnRyb2wuYwppbmRleCAzNjg5NmYzLi5kNGE5MmI2IDEwMDY0NAotLS0gYS9tbS9tZW1jb250cm9sLmMKKysrIGIvbW0vbWVtY29udHJvbC5jCkBAIC0zMiwxMSArMzIsMTIgQEAKICNpbmNsdWRlIDxsaW51eC9mcy5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+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+YWN0aXZlX2xpc3QpOwotCQlJTklUX0xJU1RfSEVBRCgmbXotPmluYWN0aXZlX2xpc3QpOwogCQlzcGluX2xvY2tfaW5pdCgmbXotPmxydV9sb2NrKTsKKwkJZm9yX2VhY2hfbHJ1KGwpCisJCQlJTklUX0xJU1RfSEVBRCgmbXotPmxpc3RzW2xdKTsKIAl9CiAJcmV0dXJuIDA7CiB9CkBAIC0xMTI0LDggKzEwODgsOCBAQAogCWludCBub2RlOwogCiAJaWYgKHVubGlrZWx5KChjb250LT5wYXJlbnQpID09IE5VTEwpKSB7CisJCXBhZ2VfY2dyb3VwX2luaXQoKTsKIAkJbWVtID0gJmluaXRfbWVtX2Nncm91cDsKLQkJcGFnZV9jZ3JvdXBfY2FjaGUgPSBLTUVNX0NBQ0hFKHBhZ2VfY2dyb3VwLCBTTEFCX1BBTklDKTsKIAl9IGVsc2UgewogCQltZW0gPSBtZW1fY2dyb3VwX2FsbG9jKCk7CiAJCWlmICghbWVtKQpkaWZmIC0tZ2l0IGEvbW0vbWVtb3J5LmMgYi9tbS9tZW1vcnkuYwppbmRleCAxMDAyZjQ3Li4zYTZjNGE2IDEwMDY0NAotLS0gYS9tbS9tZW1vcnkuYworKysgYi9tbS9tZW1vcnkuYwpAQCAtNjQsNiArNjQsOCBAQAogCiAjaW5jbHVkZSAiaW50ZXJuYWwuaCIKIAorI2luY2x1ZGUgImludGVybmFsLmgiCisKICNpZm5kZWYgQ09ORklHX05FRURfTVVMVElQTEVfTk9ERVMKIC8qIHVzZSB0aGUgcGVyLXBnZGF0IGRhdGEgaW5zdGVhZCBmb3IgZGlzY29udGlnbWVtIC0gbWJsaWdoICovCiB1bnNpZ25lZCBsb25nIG1heF9tYXBucjsKQEAgLTExMjksMTIgKzExMzEsMTcgQEAKIAlyZXR1cm4gIXZtYS0+dm1fb3BzIHx8ICF2bWEtPnZtX29wcy0+ZmF1bHQ7CiB9CiAKLWludCBnZXRfdXNlcl9wYWdlcyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgc3RydWN0IG1tX3N0cnVjdCAqbW0sCi0JCXVuc2lnbmVkIGxvbmcgc3RhcnQsIGludCBsZW4sIGludCB3cml0ZSwgaW50IGZvcmNlLAorCisKK2ludCBfX2dldF91c2VyX3BhZ2VzKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSwKKwkJICAgICB1bnNpZ25lZCBsb25nIHN0YXJ0LCBpbnQgbGVuLCBpbnQgZmxhZ3MsCiAJCXN0cnVjdCBwYWdlICoqcGFnZXMsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqKnZtYXMpCiB7CiAJaW50IGk7Ci0JdW5zaWduZWQgaW50IHZtX2ZsYWdzOworCXVuc2lnbmVkIGludCB2bV9mbGFncyA9IDA7CisJaW50IHdyaXRlID0gISEoZmxhZ3MgJiBHVVBfRkxBR1NfV1JJVEUpOworCWludCBmb3JjZSA9ICEhKGZsYWdzICYgR1VQX0ZMQUdTX0ZPUkNFKTsKKwlpbnQgaWdub3JlID0gISEoZmxhZ3MgJiBHVVBfRkxBR1NfSUdOT1JFX1ZNQV9QRVJNSVNTSU9OUyk7CiAKIAlpZiAobGVuIDw9IDApCiAJCXJldHVybiAwOwpAQCAtMTE1OCw3ICsxMTY1LDkgQEAKIAkJCXB1ZF90ICpwdWQ7CiAJCQlwbWRfdCAqcG1kOwogCQkJcHRlX3QgKnB0ZTsKLQkJCWlmICh3cml0ZSkgLyogdXNlciBnYXRlIHBhZ2VzIGFyZSByZWFkLW9ubHkgKi8KKworCQkJLyogdXNlciBnYXRlIHBhZ2VzIGFyZSByZWFkLW9ubHkgKi8KKwkJCWlmICghaWdub3JlICYmIHdyaXRlKQogCQkJCXJldHVybiBpID8gOiAtRUZBVUxUOwogCQkJaWYgKHBnID4gVEFTS19TSVpFKQogCQkJCXBnZCA9IHBnZF9vZmZzZXRfayhwZyk7CkBAIC0xMTkwLDggKzExOTksOSBAQAogCQkJY29udGludWU7CiAJCX0KIAotCQlpZiAoIXZtYSB8fCAodm1hLT52bV9mbGFncyAmIChWTV9JTyB8IFZNX1BGTk1BUCkpCi0JCQkJfHwgISh2bV9mbGFncyAmIHZtYS0+dm1fZmxhZ3MpKQorCQlpZiAoIXZtYSB8fAorCQkgICAgKHZtYS0+dm1fZmxhZ3MgJiAoVk1fSU8gfCBWTV9QRk5NQVApKSB8fAorCQkgICAgKCFpZ25vcmUgJiYgISh2bV9mbGFncyAmIHZtYS0+dm1fZmxhZ3MpKSkKIAkJCXJldHVybiBpID8gOiAtRUZBVUxUOwogCiAJCWlmIChpc192bV9odWdldGxiX3BhZ2Uodm1hKSkgewpAQCAtMTI2Niw2ICsxMjc2LDIzIEBACiAJfSB3aGlsZSAobGVuKTsKIAlyZXR1cm4gaTsKIH0KKworaW50IGdldF91c2VyX3BhZ2VzKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSwKKwkJdW5zaWduZWQgbG9uZyBzdGFydCwgaW50IGxlbiwgaW50IHdyaXRlLCBpbnQgZm9yY2UsCisJCXN0cnVjdCBwYWdlICoqcGFnZXMsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqKnZtYXMpCit7CisJaW50IGZsYWdzID0gMDsKKworCWlmICh3cml0ZSkKKwkJZmxhZ3MgfD0gR1VQX0ZMQUdTX1dSSVRFOworCWlmIChmb3JjZSkKKwkJZmxhZ3MgfD0gR1VQX0ZMQUdTX0ZPUkNFOworCisJcmV0dXJuIF9fZ2V0X3VzZXJfcGFnZXModHNrLCBtbSwKKwkJCQlzdGFydCwgbGVuLCBmbGFncywKKwkJCQlwYWdlcywgdm1hcyk7Cit9CisKIEVYUE9SVF9TWU1CT0woZ2V0X3VzZXJfcGFnZXMpOwogCiBwdGVfdCAqZ2V0X2xvY2tlZF9wdGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkciwKQEAgLTEyOTYsMTggKzEzMjMsMTQgQEAKIAlwdGVfdCAqcHRlOwogCXNwaW5sb2NrX3QgKnB0bDsKIAotCXJldHZhbCA9IG1lbV9jZ3JvdXBfY2hhcmdlKHBhZ2UsIG1tLCBHRlBfS0VSTkVMKTsKLQlpZiAocmV0dmFsKQotCQlnb3RvIG91dDsKLQogCXJldHZhbCA9IC1FSU5WQUw7CiAJaWYgKFBhZ2VBbm9uKHBhZ2UpKQotCQlnb3RvIG91dF91bmNoYXJnZTsKKwkJZ290byBvdXQ7CiAJcmV0dmFsID0gLUVOT01FTTsKIAlmbHVzaF9kY2FjaGVfcGFnZShwYWdlKTsKIAlwdGUgPSBnZXRfbG9ja2VkX3B0ZShtbSwgYWRkciwgJnB0bCk7CiAJaWYgKCFwdGUpCi0JCWdvdG8gb3V0X3VuY2hhcmdlOworCQlnb3RvIG91dDsKIAlyZXR2YWwgPSAtRUJVU1k7CiAJaWYgKCFwdGVfbm9uZSgqcHRlKSkKIAkJZ290byBvdXRfdW5sb2NrOwpAQCAtMTMyMyw4ICsxMzQ2LDYgQEAKIAlyZXR1cm4gcmV0dmFsOwogb3V0X3VubG9jazoKIAlwdGVfdW5tYXBfdW5sb2NrKHB0ZSwgcHRsKTsKLW91dF91bmNoYXJnZToKLQltZW1fY2dyb3VwX3VuY2hhcmdlX3BhZ2UocGFnZSk7CiBvdXQ6CiAJcmV0dXJuIHJldHZhbDsKIH0KQEAgLTE4NTgsNiArMTg3OSwxNSBAQAogCW5ld19wYWdlID0gYWxsb2NfcGFnZV92bWEoR0ZQX0hJR0hVU0VSX01PVkFCTEUsIHZtYSwgYWRkcmVzcyk7CiAJaWYgKCFuZXdfcGFnZSkKIAkJZ290byBvb207CisJLyoKKwkgKiBEb24ndCBsZXQgYW5vdGhlciB0YXNrLCB3aXRoIHBvc3NpYmx5IHVubG9ja2VkIHZtYSwKKwkgKiBrZWVwIHRoZSBtbG9ja2VkIHBhZ2UuCisJICovCisJaWYgKHZtYS0+dm1fZmxhZ3MgJiBWTV9MT0NLRUQpIHsKKwkJbG9ja19wYWdlKG9sZF9wYWdlKTsJLyogZm9yIExSVSBtYW5pcHVsYXRpb24gKi8KKwkJY2xlYXJfcGFnZV9tbG9jayhvbGRfcGFnZSk7CisJCXVubG9ja19wYWdlKG9sZF9wYWdlKTsKKwl9CiAJY293X3VzZXJfcGFnZShuZXdfcGFnZSwgb2xkX3BhZ2UsIGFkZHJlc3MsIHZtYSk7CiAJX19TZXRQYWdlVXB0b2RhdGUobmV3X3BhZ2UpOwogCkBAIC0xODg2LDExICsxOTE2LDEzIEBACiAJCSAqIHRocmVhZCBkb2luZyBDT1cuCiAJCSAqLwogCQlwdGVwX2NsZWFyX2ZsdXNoX25vdGlmeSh2bWEsIGFkZHJlc3MsIHBhZ2VfdGFibGUpOwotCQlzZXRfcHRlX2F0KG1tLCBhZGRyZXNzLCBwYWdlX3RhYmxlLCBlbnRyeSk7Ci0JCXVwZGF0ZV9tbXVfY2FjaGUodm1hLCBhZGRyZXNzLCBlbnRyeSk7Ci0JCWxydV9jYWNoZV9hZGRfYWN0aXZlKG5ld19wYWdlKTsKKwkJU2V0UGFnZVN3YXBCYWNrZWQobmV3X3BhZ2UpOworCQlscnVfY2FjaGVfYWRkX2FjdGl2ZV9vcl91bmV2aWN0YWJsZShuZXdfcGFnZSwgdm1hKTsKIAkJcGFnZV9hZGRfbmV3X2Fub25fcm1hcChuZXdfcGFnZSwgdm1hLCBhZGRyZXNzKTsKIAorLy9UT0RPOiAgaXMgdGhpcyBzYWZlPyAgZG9fYW5vbnltb3VzX3BhZ2UoKSBkb2VzIGl0IHRoaXMgd2F5LgorCQlzZXRfcHRlX2F0KG1tLCBhZGRyZXNzLCBwYWdlX3RhYmxlLCBlbnRyeSk7CisJCXVwZGF0ZV9tbXVfY2FjaGUodm1hLCBhZGRyZXNzLCBlbnRyeSk7CiAJCWlmIChvbGRfcGFnZSkgewogCQkJLyoKIAkJCSAqIE9ubHkgYWZ0ZXIgc3dpdGNoaW5nIHRoZSBwdGUgdG8gdGhlIG5ldyBwYWdlIG1heQpAQCAtMjI4OCwxNiArMjMyMCwxNyBAQAogCQljb3VudF92bV9ldmVudChQR01BSkZBVUxUKTsKIAl9CiAKLQlpZiAobWVtX2Nncm91cF9jaGFyZ2UocGFnZSwgbW0sIEdGUF9LRVJORUwpKSB7Ci0JCWRlbGF5YWNjdF9jbGVhcl9mbGFnKERFTEFZQUNDVF9QRl9TV0FQSU4pOwotCQlyZXQgPSBWTV9GQVVMVF9PT007Ci0JCWdvdG8gb3V0OwotCX0KLQogCW1hcmtfcGFnZV9hY2Nlc3NlZChwYWdlKTsKKwogCWxvY2tfcGFnZShwYWdlKTsKIAlkZWxheWFjY3RfY2xlYXJfZmxhZyhERUxBWUFDQ1RfUEZfU1dBUElOKTsKIAorCWlmIChtZW1fY2dyb3VwX2NoYXJnZShwYWdlLCBtbSwgR0ZQX0tFUk5FTCkpIHsKKwkJcmV0ID0gVk1fRkFVTFRfT09NOworCQl1bmxvY2tfcGFnZShwYWdlKTsKKwkJZ290byBvdXQ7CisJfQorCiAJLyoKIAkgKiBCYWNrIG91dCBpZiBzb21lYm9keSBlbHNlIGFscmVhZHkgZmF1bHRlZCBpbiB0aGlzIHB0ZS4KIAkgKi8KQEAgLTIzMjQsNyArMjM1Nyw3IEBACiAJcGFnZV9hZGRfYW5vbl9ybWFwKHBhZ2UsIHZtYSwgYWRkcmVzcyk7CiAKIAlzd2FwX2ZyZWUoZW50cnkpOwotCWlmICh2bV9zd2FwX2Z1bGwoKSkKKwlpZiAodm1fc3dhcF9mdWxsKCkgfHwgKHZtYS0+dm1fZmxhZ3MgJiBWTV9MT0NLRUQpIHx8IFBhZ2VNbG9ja2VkKHBhZ2UpKQogCQlyZW1vdmVfZXhjbHVzaXZlX3N3YXBfcGFnZShwYWdlKTsKIAl1bmxvY2tfcGFnZShwYWdlKTsKIApAQCAtMjM4Miw3ICsyNDE1LDggQEAKIAlpZiAoIXB0ZV9ub25lKCpwYWdlX3RhYmxlKSkKIAkJZ290byByZWxlYXNlOwogCWluY19tbV9jb3VudGVyKG1tLCBhbm9uX3Jzcyk7Ci0JbHJ1X2NhY2hlX2FkZF9hY3RpdmUocGFnZSk7CisJU2V0UGFnZVN3YXBCYWNrZWQocGFnZSk7CisJbHJ1X2NhY2hlX2FkZF9hY3RpdmVfb3JfdW5ldmljdGFibGUocGFnZSwgdm1hKTsKIAlwYWdlX2FkZF9uZXdfYW5vbl9ybWFwKHBhZ2UsIHZtYSwgYWRkcmVzcyk7CiAJc2V0X3B0ZV9hdChtbSwgYWRkcmVzcywgcGFnZV90YWJsZSwgZW50cnkpOwogCkBAIC0yNDIzLDYgKzI0NTcsNyBAQAogCXN0cnVjdCBwYWdlICpwYWdlOwogCXB0ZV90IGVudHJ5OwogCWludCBhbm9uID0gMDsKKwlpbnQgY2hhcmdlZCA9IDA7CiAJc3RydWN0IHBhZ2UgKmRpcnR5X3BhZ2UgPSBOVUxMOwogCXN0cnVjdCB2bV9mYXVsdCB2bWY7CiAJaW50IHJldDsKQEAgLTI0NjMsNiArMjQ5OCwxOCBAQAogCQkJCXJldCA9IFZNX0ZBVUxUX09PTTsKIAkJCQlnb3RvIG91dDsKIAkJCX0KKwkJCWlmIChtZW1fY2dyb3VwX2NoYXJnZShwYWdlLCBtbSwgR0ZQX0tFUk5FTCkpIHsKKwkJCQlyZXQgPSBWTV9GQVVMVF9PT007CisJCQkJcGFnZV9jYWNoZV9yZWxlYXNlKHBhZ2UpOworCQkJCWdvdG8gb3V0OworCQkJfQorCQkJY2hhcmdlZCA9IDE7CisJCQkvKgorCQkJICogRG9uJ3QgbGV0IGFub3RoZXIgdGFzaywgd2l0aCBwb3NzaWJseSB1bmxvY2tlZCB2bWEsCisJCQkgKiBrZWVwIHRoZSBtbG9ja2VkIHBhZ2UuCisJCQkgKi8KKwkJCWlmICh2bWEtPnZtX2ZsYWdzICYgVk1fTE9DS0VEKQorCQkJCWNsZWFyX3BhZ2VfbWxvY2sodm1mLnBhZ2UpOwogCQkJY29weV91c2VyX2hpZ2hwYWdlKHBhZ2UsIHZtZi5wYWdlLCBhZGRyZXNzLCB2bWEpOwogCQkJX19TZXRQYWdlVXB0b2RhdGUocGFnZSk7CiAJCX0gZWxzZSB7CkBAIC0yNDk3LDExICsyNTQ0LDYgQEAKIAogCX0KIAotCWlmIChtZW1fY2dyb3VwX2NoYXJnZShwYWdlLCBtbSwgR0ZQX0tFUk5FTCkpIHsKLQkJcmV0ID0gVk1fRkFVTFRfT09NOwotCQlnb3RvIG91dDsKLQl9Ci0KIAlwYWdlX3RhYmxlID0gcHRlX29mZnNldF9tYXBfbG9jayhtbSwgcG1kLCBhZGRyZXNzLCAmcHRsKTsKIAogCS8qCkBAIC0yNTIwLDExICsyNTYyLDExIEBACiAJCWVudHJ5ID0gbWtfcHRlKHBhZ2UsIHZtYS0+dm1fcGFnZV9wcm90KTsKIAkJaWYgKGZsYWdzICYgRkFVTFRfRkxBR19XUklURSkKIAkJCWVudHJ5ID0gbWF5YmVfbWt3cml0ZShwdGVfbWtkaXJ0eShlbnRyeSksIHZtYSk7Ci0JCXNldF9wdGVfYXQobW0sIGFkZHJlc3MsIHBhZ2VfdGFibGUsIGVudHJ5KTsKIAkJaWYgKGFub24pIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGluY19tbV9jb3VudGVyKG1tLCBhbm9uX3Jzcyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBscnVfY2FjaGVfYWRkX2FjdGl2ZShwYWdlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHBhZ2VfYWRkX25ld19hbm9uX3JtYXAocGFnZSwgdm1hLCBhZGRyZXNzKTsKKwkJCWluY19tbV9jb3VudGVyKG1tLCBhbm9uX3Jzcyk7CisJCQlTZXRQYWdlU3dhcEJhY2tlZChwYWdlKTsKKwkJCWxydV9jYWNoZV9hZGRfYWN0aXZlX29yX3VuZXZpY3RhYmxlKHBhZ2UsIHZtYSk7CisJCQlwYWdlX2FkZF9uZXdfYW5vbl9ybWFwKHBhZ2UsIHZtYSwgYWRkcmVzcyk7CiAJCX0gZWxzZSB7CiAJCQlpbmNfbW1fY291bnRlcihtbSwgZmlsZV9yc3MpOwogCQkJcGFnZV9hZGRfZmlsZV9ybWFwKHBhZ2UpOwpAQCAtMjUzMywxMSArMjU3NSwxNCBAQAogCQkJCWdldF9wYWdlKGRpcnR5X3BhZ2UpOwogCQkJfQogCQl9CisvL1RPRE86ICBpcyB0aGlzIHNhZmU/ICBkb19hbm9ueW1vdXNfcGFnZSgpIGRvZXMgaXQgdGhpcyB3YXkuCisJCXNldF9wdGVfYXQobW0sIGFkZHJlc3MsIHBhZ2VfdGFibGUsIGVudHJ5KTsKIAogCQkvKiBubyBuZWVkIHRvIGludmFsaWRhdGU6IGEgbm90LXByZXNlbnQgcGFnZSB3b24ndCBiZSBjYWNoZWQgKi8KIAkJdXBkYXRlX21tdV9jYWNoZSh2bWEsIGFkZHJlc3MsIGVudHJ5KTsKIAl9IGVsc2UgewotCQltZW1fY2dyb3VwX3VuY2hhcmdlX3BhZ2UocGFnZSk7CisJCWlmIChjaGFyZ2VkKQorCQkJbWVtX2Nncm91cF91bmNoYXJnZV9wYWdlKHBhZ2UpOwogCQlpZiAoYW5vbikKIAkJCXBhZ2VfY2FjaGVfcmVsZWFzZShwYWdlKTsKIAkJZWxzZQpAQCAtMjc3MiwxOSArMjgxNyw5IEBACiAJbGVuID0gRElWX1JPVU5EX1VQKGVuZCwgUEFHRV9TSVpFKSAtIGFkZHIvUEFHRV9TSVpFOwogCXJldCA9IGdldF91c2VyX3BhZ2VzKGN1cnJlbnQsIGN1cnJlbnQtPm1tLCBhZGRyLAogCQkJbGVuLCB3cml0ZSwgMCwgTlVMTCwgTlVMTCk7Ci0JaWYgKHJldCA8IDApIHsKLQkJLyoKLQkJICAgU1VTIHJlcXVpcmUgc3RyYW5nZSByZXR1cm4gdmFsdWUgdG8gbWxvY2sKLQkJICAgIC0gaW52YWxpZCBhZGRyIGdlbmVyYXRlIHRvIEVOT01FTS4KLQkJICAgIC0gb3V0IG9mIG1lbW9yeSBzaG91bGQgZ2VuZXJhdGUgRUFHQUlOLgotCQkqLwotCQlpZiAocmV0ID09IC1FRkFVTFQpCi0JCQlyZXQgPSAtRU5PTUVNOwotCQllbHNlIGlmIChyZXQgPT0gLUVOT01FTSkKLQkJCXJldCA9IC1FQUdBSU47CisJaWYgKHJldCA8IDApCiAJCXJldHVybiByZXQ7Ci0JfQotCXJldHVybiByZXQgPT0gbGVuID8gMCA6IC1FTk9NRU07CisJcmV0dXJuIHJldCA9PSBsZW4gPyAwIDogLUVGQVVMVDsKIH0KIAogI2lmICFkZWZpbmVkKF9fSEFWRV9BUkNIX0dBVEVfQVJFQSkKZGlmZiAtLWdpdCBhL21tL21lbW9yeV9ob3RwbHVnLmMgYi9tbS9tZW1vcnlfaG90cGx1Zy5jCmluZGV4IDg5ZmVlMmQuLjY4MzdhMTAgMTAwNjQ0Ci0tLSBhL21tL21lbW9yeV9ob3RwbHVnLmMKKysrIGIvbW0vbWVtb3J5X2hvdHBsdWcuYwpAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvbWlncmF0ZS5oPgogI2luY2x1ZGUgPGxpbnV4L3BhZ2UtaXNvbGF0aW9uLmg+CisjaW5jbHVkZSA8bGludXgvcGZuLmg+CiAKICNpbmNsdWRlIDxhc20vdGxiZmx1c2guaD4KIApAQCAtMzIzLDExICszMjQsMTEgQEAKIAlCVUdfT04ocGh5c19zdGFydF9wZm4gJiB+UEFHRV9TRUNUSU9OX01BU0spOwogCUJVR19PTihucl9wYWdlcyAlIFBBR0VTX1BFUl9TRUNUSU9OKTsKIAotCXJlbGVhc2VfbWVtX3JlZ2lvbihwaHlzX3N0YXJ0X3BmbiA8PCBQQUdFX1NISUZULCBucl9wYWdlcyAqIFBBR0VfU0laRSk7Ci0KIAlzZWN0aW9uc190b19yZW1vdmUgPSBucl9wYWdlcyAvIFBBR0VTX1BFUl9TRUNUSU9OOwogCWZvciAoaSA9IDA7IGkgPCBzZWN0aW9uc190b19yZW1vdmU7IGkrKykgewogCQl1bnNpZ25lZCBsb25nIHBmbiA9IHBoeXNfc3RhcnRfcGZuICsgaSpQQUdFU19QRVJfU0VDVElPTjsKKwkJcmVsZWFzZV9tZW1fcmVnaW9uKHBmbiA8PCBQQUdFX1NISUZULAorCQkJCSAgIFBBR0VTX1BFUl9TRUNUSU9OIDw8IFBBR0VfU0hJRlQpOwogCQlyZXQgPSBfX3JlbW92ZV9zZWN0aW9uKHpvbmUsIF9fcGZuX3RvX3NlY3Rpb24ocGZuKSk7CiAJCWlmIChyZXQpCiAJCQlicmVhazsKQEAgLTY1Nyw4ICs2NTgsOSBAQAogCQkgKiBXZSBjYW4gc2tpcCBmcmVlIHBhZ2VzLiBBbmQgd2UgY2FuIG9ubHkgZGVhbCB3aXRoIHBhZ2VzIG9uCiAJCSAqIExSVS4KIAkJICovCi0JCXJldCA9IGlzb2xhdGVfbHJ1X3BhZ2UocGFnZSwgJnNvdXJjZSk7CisJCXJldCA9IGlzb2xhdGVfbHJ1X3BhZ2UocGFnZSk7CiAJCWlmICghcmV0KSB7IC8qIFN1Y2Nlc3MgKi8KKwkJCWxpc3RfYWRkX3RhaWwoJnBhZ2UtPmxydSwgJnNvdXJjZSk7CiAJCQltb3ZlX3BhZ2VzLS07CiAJCX0gZWxzZSB7CiAJCQkvKiBCZWNhc3VlIHdlIGRvbid0IGhhdmUgYmlnIHpvbmUtPmxvY2suIHdlIHNob3VsZApAQCAtODQ5LDEwICs4NTEsMTkgQEAKIAogCXJldHVybiByZXQ7CiB9CisKK2ludCByZW1vdmVfbWVtb3J5KHU2NCBzdGFydCwgdTY0IHNpemUpCit7CisJdW5zaWduZWQgbG9uZyBzdGFydF9wZm4sIGVuZF9wZm47CisKKwlzdGFydF9wZm4gPSBQRk5fRE9XTihzdGFydCk7CisJZW5kX3BmbiA9IHN0YXJ0X3BmbiArIFBGTl9ET1dOKHNpemUpOworCXJldHVybiBvZmZsaW5lX3BhZ2VzKHN0YXJ0X3BmbiwgZW5kX3BmbiwgMTIwICogSFopOworfQogI2Vsc2UKIGludCByZW1vdmVfbWVtb3J5KHU2NCBzdGFydCwgdTY0IHNpemUpCiB7CiAJcmV0dXJuIC1FSU5WQUw7CiB9Ci1FWFBPUlRfU1lNQk9MX0dQTChyZW1vdmVfbWVtb3J5KTsKICNlbmRpZiAvKiBDT05GSUdfTUVNT1JZX0hPVFJFTU9WRSAqLworRVhQT1JUX1NZTUJPTF9HUEwocmVtb3ZlX21lbW9yeSk7CmRpZmYgLS1naXQgYS9tbS9tZW1wb2xpY3kuYyBiL21tL21lbXBvbGljeS5jCmluZGV4IDgzMzY5MDUuLjM2ZjQyNTcgMTAwNjQ0Ci0tLSBhL21tL21lbXBvbGljeS5jCisrKyBiL21tL21lbXBvbGljeS5jCkBAIC05Myw2ICs5Myw4IEBACiAjaW5jbHVkZSA8YXNtL3RsYmZsdXNoLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KIAorI2luY2x1ZGUgImludGVybmFsLmgiCisKIC8qIEludGVybmFsIGZsYWdzICovCiAjZGVmaW5lIE1QT0xfTUZfRElTQ09OVElHX09LIChNUE9MX01GX0lOVEVSTkFMIDw8IDApCS8qIFNraXAgY2hlY2tzIGZvciBjb250aW51b3VzIHZtYXMgKi8KICNkZWZpbmUgTVBPTF9NRl9JTlZFUlQgKE1QT0xfTUZfSU5URVJOQUwgPDwgMSkJCS8qIEludmVydCBjaGVjayBmb3Igbm9kZW1hc2sgKi8KQEAgLTc2Miw4ICs3NjQsMTEgQEAKIAkvKgogCSAqIEF2b2lkIG1pZ3JhdGluZyBhIHBhZ2UgdGhhdCBpcyBzaGFyZWQgd2l0aCBvdGhlcnMuCiAJICovCi0JaWYgKChmbGFncyAmIE1QT0xfTUZfTU9WRV9BTEwpIHx8IHBhZ2VfbWFwY291bnQocGFnZSkgPT0gMSkKLQkJaXNvbGF0ZV9scnVfcGFnZShwYWdlLCBwYWdlbGlzdCk7CisJaWYgKChmbGFncyAmIE1QT0xfTUZfTU9WRV9BTEwpIHx8IHBhZ2VfbWFwY291bnQocGFnZSkgPT0gMSkgeworCQlpZiAoIWlzb2xhdGVfbHJ1X3BhZ2UocGFnZSkpIHsKKwkJCWxpc3RfYWRkX3RhaWwoJnBhZ2UtPmxydSwgcGFnZWxpc3QpOworCQl9CisJfQogfQogCiBzdGF0aWMgc3RydWN0IHBhZ2UgKm5ld19ub2RlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgbm9kZSwgaW50ICoqeCkKQEAgLTIxOTcsNyArMjIwMiw3IEBACiAJaWYgKFBhZ2VTd2FwQ2FjaGUocGFnZSkpCiAJCW1kLT5zd2FwY2FjaGUrKzsKIAotCWlmIChQYWdlQWN0aXZlKHBhZ2UpKQorCWlmIChQYWdlQWN0aXZlKHBhZ2UpIHx8IFBhZ2VVbmV2aWN0YWJsZShwYWdlKSkKIAkJbWQtPmFjdGl2ZSsrOwogCiAJaWYgKFBhZ2VXcml0ZWJhY2socGFnZSkpCmRpZmYgLS1naXQgYS9tbS9taWdyYXRlLmMgYi9tbS9taWdyYXRlLmMKaW5kZXggMmE4MDEzNi4uNjYwMjk0MWIgMTAwNjQ0Ci0tLSBhL21tL21pZ3JhdGUuYworKysgYi9tbS9taWdyYXRlLmMKQEAgLTM3LDM2ICszNyw2IEBACiAjZGVmaW5lIGxydV90b19wYWdlKF9oZWFkKSAobGlzdF9lbnRyeSgoX2hlYWQpLT5wcmV2LCBzdHJ1Y3QgcGFnZSwgbHJ1KSkKIAogLyoKLSAqIElzb2xhdGUgb25lIHBhZ2UgZnJvbSB0aGUgTFJVIGxpc3RzLiBJZiBzdWNjZXNzZnVsIHB1dCBpdCBvbnRvCi0gKiB0aGUgaW5kaWNhdGVkIGxpc3Qgd2l0aCBlbGV2YXRlZCBwYWdlIGNvdW50LgotICoKLSAqIFJlc3VsdDoKLSAqICAtRUJVU1k6IHBhZ2Ugbm90IG9uIExSVSBsaXN0Ci0gKiAgMDogcGFnZSByZW1vdmVkIGZyb20gTFJVIGxpc3QgYW5kIGFkZGVkIHRvIHRoZSBzcGVjaWZpZWQgbGlzdC4KLSAqLwotaW50IGlzb2xhdGVfbHJ1X3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHN0cnVjdCBsaXN0X2hlYWQgKnBhZ2VsaXN0KQotewotCWludCByZXQgPSAtRUJVU1k7Ci0KLQlpZiAoUGFnZUxSVShwYWdlKSkgewotCQlzdHJ1Y3Qgem9uZSAqem9uZSA9IHBhZ2Vfem9uZShwYWdlKTsKLQotCQlzcGluX2xvY2tfaXJxKCZ6b25lLT5scnVfbG9jayk7Ci0JCWlmIChQYWdlTFJVKHBhZ2UpICYmIGdldF9wYWdlX3VubGVzc196ZXJvKHBhZ2UpKSB7Ci0JCQlyZXQgPSAwOwotCQkJQ2xlYXJQYWdlTFJVKHBhZ2UpOwotCQkJaWYgKFBhZ2VBY3RpdmUocGFnZSkpCi0JCQkJZGVsX3BhZ2VfZnJvbV9hY3RpdmVfbGlzdCh6b25lLCBwYWdlKTsKLQkJCWVsc2UKLQkJCQlkZWxfcGFnZV9mcm9tX2luYWN0aXZlX2xpc3Qoem9uZSwgcGFnZSk7Ci0JCQlsaXN0X2FkZF90YWlsKCZwYWdlLT5scnUsIHBhZ2VsaXN0KTsKLQkJfQotCQlzcGluX3VubG9ja19pcnEoJnpvbmUtPmxydV9sb2NrKTsKLQl9Ci0JcmV0dXJuIHJldDsKLX0KLQotLyoKICAqIG1pZ3JhdGVfcHJlcCgpIG5lZWRzIHRvIGJlIGNhbGxlZCBiZWZvcmUgd2Ugc3RhcnQgY29tcGlsaW5nIGEgbGlzdCBvZiBwYWdlcwogICogdG8gYmUgbWlncmF0ZWQgdXNpbmcgaXNvbGF0ZV9scnVfcGFnZSgpLgogICovCkBAIC04MywyMyArNTMsOSBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgbW92ZV90b19scnUoc3RydWN0IHBhZ2UgKnBhZ2UpCi17Ci0JaWYgKFBhZ2VBY3RpdmUocGFnZSkpIHsKLQkJLyoKLQkJICogbHJ1X2NhY2hlX2FkZF9hY3RpdmUgY2hlY2tzIHRoYXQKLQkJICogdGhlIFBHX2FjdGl2ZSBiaXQgaXMgb2ZmLgotCQkgKi8KLQkJQ2xlYXJQYWdlQWN0aXZlKHBhZ2UpOwotCQlscnVfY2FjaGVfYWRkX2FjdGl2ZShwYWdlKTsKLQl9IGVsc2UgewotCQlscnVfY2FjaGVfYWRkKHBhZ2UpOwotCX0KLQlwdXRfcGFnZShwYWdlKTsKLX0KLQogLyoKLSAqIEFkZCBpc29sYXRlZCBwYWdlcyBvbiB0aGUgbGlzdCBiYWNrIHRvIHRoZSBMUlUuCisgKiBBZGQgaXNvbGF0ZWQgcGFnZXMgb24gdGhlIGxpc3QgYmFjayB0byB0aGUgTFJVIHVuZGVyIHBhZ2UgbG9jaworICogdG8gYXZvaWQgbGVha2luZyBldmljdGFibGUgcGFnZXMgYmFjayBvbnRvIHVuZXZpY3RhYmxlIGxpc3QuCiAgKgogICogcmV0dXJucyB0aGUgbnVtYmVyIG9mIHBhZ2VzIHB1dCBiYWNrLgogICovCkBAIC0xMTEsNyArNjcsNyBAQAogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHBhZ2UsIHBhZ2UyLCBsLCBscnUpIHsKIAkJbGlzdF9kZWwoJnBhZ2UtPmxydSk7Ci0JCW1vdmVfdG9fbHJ1KHBhZ2UpOworCQlwdXRiYWNrX2xydV9wYWdlKHBhZ2UpOwogCQljb3VudCsrOwogCX0KIAlyZXR1cm4gY291bnQ7CkBAIC0zNzQsOCArMzMwLDYgQEAKIAlfX2luY196b25lX3BhZ2Vfc3RhdGUobmV3cGFnZSwgTlJfRklMRV9QQUdFUyk7CiAKIAlzcGluX3VubG9ja19pcnEoJm1hcHBpbmctPnRyZWVfbG9jayk7Ci0JaWYgKCFQYWdlU3dhcENhY2hlKG5ld3BhZ2UpKQotCQltZW1fY2dyb3VwX3VuY2hhcmdlX2NhY2hlX3BhZ2UocGFnZSk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTM4NSw2ICszMzksOCBAQAogICovCiBzdGF0aWMgdm9pZCBtaWdyYXRlX3BhZ2VfY29weShzdHJ1Y3QgcGFnZSAqbmV3cGFnZSwgc3RydWN0IHBhZ2UgKnBhZ2UpCiB7CisJaW50IGFub247CisKIAljb3B5X2hpZ2hwYWdlKG5ld3BhZ2UsIHBhZ2UpOwogCiAJaWYgKFBhZ2VFcnJvcihwYWdlKSkKQEAgLTM5Myw4ICszNDksMTEgQEAKIAkJU2V0UGFnZVJlZmVyZW5jZWQobmV3cGFnZSk7CiAJaWYgKFBhZ2VVcHRvZGF0ZShwYWdlKSkKIAkJU2V0UGFnZVVwdG9kYXRlKG5ld3BhZ2UpOwotCWlmIChQYWdlQWN0aXZlKHBhZ2UpKQorCWlmIChUZXN0Q2xlYXJQYWdlQWN0aXZlKHBhZ2UpKSB7CisJCVZNX0JVR19PTihQYWdlVW5ldmljdGFibGUocGFnZSkpOwogCQlTZXRQYWdlQWN0aXZlKG5ld3BhZ2UpOworCX0gZWxzZQorCQl1bmV2aWN0YWJsZV9taWdyYXRlX3BhZ2UobmV3cGFnZSwgcGFnZSk7CiAJaWYgKFBhZ2VDaGVja2VkKHBhZ2UpKQogCQlTZXRQYWdlQ2hlY2tlZChuZXdwYWdlKTsKIAlpZiAoUGFnZU1hcHBlZFRvRGlzayhwYWdlKSkKQEAgLTQxMiwxNCArMzcxLDIwIEBACiAJCV9fc2V0X3BhZ2VfZGlydHlfbm9idWZmZXJzKG5ld3BhZ2UpOwogIAl9CiAKKwltbG9ja19taWdyYXRlX3BhZ2UobmV3cGFnZSwgcGFnZSk7CisKICNpZmRlZiBDT05GSUdfU1dBUAogCUNsZWFyUGFnZVN3YXBDYWNoZShwYWdlKTsKICNlbmRpZgotCUNsZWFyUGFnZUFjdGl2ZShwYWdlKTsKIAlDbGVhclBhZ2VQcml2YXRlKHBhZ2UpOwogCXNldF9wYWdlX3ByaXZhdGUocGFnZSwgMCk7CisJLyogcGFnZS0+bWFwcGluZyBjb250YWlucyBhIGZsYWcgZm9yIFBhZ2VBbm9uKCkgKi8KKwlhbm9uID0gUGFnZUFub24ocGFnZSk7CiAJcGFnZS0+bWFwcGluZyA9IE5VTEw7CiAKKwlpZiAoIWFub24pIC8qIFRoaXMgcGFnZSB3YXMgcmVtb3ZlZCBmcm9tIHJhZGl4LXRyZWUuICovCisJCW1lbV9jZ3JvdXBfdW5jaGFyZ2VfY2FjaGVfcGFnZShwYWdlKTsKKwogCS8qCiAJICogSWYgYW55IHdhaXRlcnMgaGF2ZSBhY2N1bXVsYXRlZCBvbiB0aGUgbmV3IHBhZ2UgdGhlbgogCSAqIHdha2UgdGhlbSB1cC4KQEAgLTU5NCw2ICs1NTksMTAgQEAKICAqCiAgKiBUaGUgbmV3IHBhZ2Ugd2lsbCBoYXZlIHJlcGxhY2VkIHRoZSBvbGQgcGFnZSBpZiB0aGlzIGZ1bmN0aW9uCiAgKiBpcyBzdWNjZXNzZnVsLgorICoKKyAqIFJldHVybiB2YWx1ZToKKyAqICAgPCAwIC0gZXJyb3IgY29kZQorICogID09IDAgLSBzdWNjZXNzCiAgKi8KIHN0YXRpYyBpbnQgbW92ZV90b19uZXdfcGFnZShzdHJ1Y3QgcGFnZSAqbmV3cGFnZSwgc3RydWN0IHBhZ2UgKnBhZ2UpCiB7CkBAIC02MTEsNiArNTgwLDggQEAKIAkvKiBQcmVwYXJlIG1hcHBpbmcgZm9yIHRoZSBuZXcgcGFnZS4qLwogCW5ld3BhZ2UtPmluZGV4ID0gcGFnZS0+aW5kZXg7CiAJbmV3cGFnZS0+bWFwcGluZyA9IHBhZ2UtPm1hcHBpbmc7CisJaWYgKFBhZ2VTd2FwQmFja2VkKHBhZ2UpKQorCQlTZXRQYWdlU3dhcEJhY2tlZChuZXdwYWdlKTsKIAogCW1hcHBpbmcgPSBwYWdlX21hcHBpbmcocGFnZSk7CiAJaWYgKCFtYXBwaW5nKQpAQCAtNjU0LDkgKzYyNSwxMCBAQAogCWlmICghbmV3cGFnZSkKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQlpZiAocGFnZV9jb3VudChwYWdlKSA9PSAxKQorCWlmIChwYWdlX2NvdW50KHBhZ2UpID09IDEpIHsKIAkJLyogcGFnZSB3YXMgZnJlZWQgZnJvbSB1bmRlciB1cy4gU28gd2UgYXJlIGRvbmUuICovCiAJCWdvdG8gbW92ZV9uZXdwYWdlOworCX0KIAogCWNoYXJnZSA9IG1lbV9jZ3JvdXBfcHJlcGFyZV9taWdyYXRpb24ocGFnZSwgbmV3cGFnZSk7CiAJaWYgKGNoYXJnZSA9PSAtRU5PTUVNKSB7CkBAIC03MzAsNyArNzAyLDYgQEAKIAkJcmN1X3JlYWRfdW5sb2NrKCk7CiAKIHVubG9jazoKLQogCXVubG9ja19wYWdlKHBhZ2UpOwogCiAJaWYgKHJjICE9IC1FQUdBSU4pIHsKQEAgLTc0MSwxNyArNzEyLDE5IEBACiAgCQkgKiByZXN0b3JlZC4KICAJCSAqLwogIAkJbGlzdF9kZWwoJnBhZ2UtPmxydSk7Ci0gCQltb3ZlX3RvX2xydShwYWdlKTsKKwkJcHV0YmFja19scnVfcGFnZShwYWdlKTsKIAl9CiAKIG1vdmVfbmV3cGFnZToKIAlpZiAoIWNoYXJnZSkKIAkJbWVtX2Nncm91cF9lbmRfbWlncmF0aW9uKG5ld3BhZ2UpOworCiAJLyoKIAkgKiBNb3ZlIHRoZSBuZXcgcGFnZSB0byB0aGUgTFJVLiBJZiBtaWdyYXRpb24gd2FzIG5vdCBzdWNjZXNzZnVsCiAJICogdGhlbiB0aGlzIHdpbGwgZnJlZSB0aGUgcGFnZS4KIAkgKi8KLQltb3ZlX3RvX2xydShuZXdwYWdlKTsKKwlwdXRiYWNrX2xydV9wYWdlKG5ld3BhZ2UpOworCiAJaWYgKHJlc3VsdCkgewogCQlpZiAocmMpCiAJCQkqcmVzdWx0ID0gcmM7CkBAIC04NTgsOSArODMxLDExIEBACiAgKiBNb3ZlIGEgc2V0IG9mIHBhZ2VzIGFzIGluZGljYXRlZCBpbiB0aGUgcG0gYXJyYXkuIFRoZSBhZGRyCiAgKiBmaWVsZCBtdXN0IGJlIHNldCB0byB0aGUgdmlydHVhbCBhZGRyZXNzIG9mIHRoZSBwYWdlIHRvIGJlIG1vdmVkCiAgKiBhbmQgdGhlIG5vZGUgbnVtYmVyIG11c3QgY29udGFpbiBhIHZhbGlkIHRhcmdldCBub2RlLgorICogVGhlIHBtIGFycmF5IGVuZHMgd2l0aCBub2RlID0gTUFYX05VTU5PREVTLgogICovCi1zdGF0aWMgaW50IGRvX21vdmVfcGFnZXMoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHN0cnVjdCBwYWdlX3RvX25vZGUgKnBtLAotCQkJCWludCBtaWdyYXRlX2FsbCkKK3N0YXRpYyBpbnQgZG9fbW92ZV9wYWdlX3RvX25vZGVfYXJyYXkoc3RydWN0IG1tX3N0cnVjdCAqbW0sCisJCQkJICAgICAgc3RydWN0IHBhZ2VfdG9fbm9kZSAqcG0sCisJCQkJICAgICAgaW50IG1pZ3JhdGVfYWxsKQogewogCWludCBlcnI7CiAJc3RydWN0IHBhZ2VfdG9fbm9kZSAqcHA7CkBAIC05MTQsNyArODg5LDkgQEAKIAkJCQkhbWlncmF0ZV9hbGwpCiAJCQlnb3RvIHB1dF9hbmRfc2V0OwogCi0JCWVyciA9IGlzb2xhdGVfbHJ1X3BhZ2UocGFnZSwgJnBhZ2VsaXN0KTsKKwkJZXJyID0gaXNvbGF0ZV9scnVfcGFnZShwYWdlKTsKKwkJaWYgKCFlcnIpCisJCQlsaXN0X2FkZF90YWlsKCZwYWdlLT5scnUsICZwYWdlbGlzdCk7CiBwdXRfYW5kX3NldDoKIAkJLyoKIAkJICogRWl0aGVyIHJlbW92ZSB0aGUgZHVwbGljYXRlIHJlZmNvdW50IGZyb20KQEAgLTkyNiwzNiArOTAzLDExOCBAQAogCQlwcC0+c3RhdHVzID0gZXJyOwogCX0KIAorCWVyciA9IDA7CiAJaWYgKCFsaXN0X2VtcHR5KCZwYWdlbGlzdCkpCiAJCWVyciA9IG1pZ3JhdGVfcGFnZXMoJnBhZ2VsaXN0LCBuZXdfcGFnZV9ub2RlLAogCQkJCSh1bnNpZ25lZCBsb25nKXBtKTsKLQllbHNlCi0JCWVyciA9IC1FTk9FTlQ7CiAKIAl1cF9yZWFkKCZtbS0+bW1hcF9zZW0pOwogCXJldHVybiBlcnI7CiB9CiAKIC8qCi0gKiBEZXRlcm1pbmUgdGhlIG5vZGVzIG9mIGEgbGlzdCBvZiBwYWdlcy4gVGhlIGFkZHIgaW4gdGhlIHBtIGFycmF5Ci0gKiBtdXN0IGhhdmUgYmVlbiBzZXQgdG8gdGhlIHZpcnR1YWwgYWRkcmVzcyBvZiB3aGljaCB3ZSB3YW50IHRvIGRldGVybWluZQotICogdGhlIG5vZGUgbnVtYmVyLgorICogTWlncmF0ZSBhbiBhcnJheSBvZiBwYWdlIGFkZHJlc3Mgb250byBhbiBhcnJheSBvZiBub2RlcyBhbmQgZmlsbAorICogdGhlIGNvcnJlc3BvbmRpbmcgYXJyYXkgb2Ygc3RhdHVzLgogICovCi1zdGF0aWMgaW50IGRvX3BhZ2VzX3N0YXQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHN0cnVjdCBwYWdlX3RvX25vZGUgKnBtKQorc3RhdGljIGludCBkb19wYWdlc19tb3ZlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssCisJCQkgdW5zaWduZWQgbG9uZyBucl9wYWdlcywKKwkJCSBjb25zdCB2b2lkIF9fdXNlciAqIF9fdXNlciAqcGFnZXMsCisJCQkgY29uc3QgaW50IF9fdXNlciAqbm9kZXMsCisJCQkgaW50IF9fdXNlciAqc3RhdHVzLCBpbnQgZmxhZ3MpCiB7Ci0JZG93bl9yZWFkKCZtbS0+bW1hcF9zZW0pOworCXN0cnVjdCBwYWdlX3RvX25vZGUgKnBtID0gTlVMTDsKKwlub2RlbWFza190IHRhc2tfbm9kZXM7CisJaW50IGVyciA9IDA7CisJaW50IGk7CiAKLQlmb3IgKCA7IHBtLT5ub2RlICE9IE1BWF9OVU1OT0RFUzsgcG0rKykgewotCQlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTsKLQkJc3RydWN0IHBhZ2UgKnBhZ2U7Ci0JCWludCBlcnI7CisJdGFza19ub2RlcyA9IGNwdXNldF9tZW1zX2FsbG93ZWQodGFzayk7CisKKwkvKiBMaW1pdCBucl9wYWdlcyBzbyB0aGF0IHRoZSBtdWx0aXBsaWNhdGlvbiBtYXkgbm90IG92ZXJmbG93ICovCisJaWYgKG5yX3BhZ2VzID49IFVMT05HX01BWCAvIHNpemVvZihzdHJ1Y3QgcGFnZV90b19ub2RlKSAtIDEpIHsKKwkJZXJyID0gLUUyQklHOworCQlnb3RvIG91dDsKKwl9CisKKwlwbSA9IHZtYWxsb2MoKG5yX3BhZ2VzICsgMSkgKiBzaXplb2Yoc3RydWN0IHBhZ2VfdG9fbm9kZSkpOworCWlmICghcG0pIHsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CisJfQorCisJLyoKKwkgKiBHZXQgcGFyYW1ldGVycyBmcm9tIHVzZXIgc3BhY2UgYW5kIGluaXRpYWxpemUgdGhlIHBtCisJICogYXJyYXkuIFJldHVybiB2YXJpb3VzIGVycm9ycyBpZiB0aGUgdXNlciBkaWQgc29tZXRoaW5nIHdyb25nLgorCSAqLworCWZvciAoaSA9IDA7IGkgPCBucl9wYWdlczsgaSsrKSB7CisJCWNvbnN0IHZvaWQgX191c2VyICpwOwogCiAJCWVyciA9IC1FRkFVTFQ7Ci0JCXZtYSA9IGZpbmRfdm1hKG1tLCBwbS0+YWRkcik7CisJCWlmIChnZXRfdXNlcihwLCBwYWdlcyArIGkpKQorCQkJZ290byBvdXRfcG07CisKKwkJcG1baV0uYWRkciA9ICh1bnNpZ25lZCBsb25nKXA7CisJCWlmIChub2RlcykgeworCQkJaW50IG5vZGU7CisKKwkJCWlmIChnZXRfdXNlcihub2RlLCBub2RlcyArIGkpKQorCQkJCWdvdG8gb3V0X3BtOworCisJCQllcnIgPSAtRU5PREVWOworCQkJaWYgKCFub2RlX3N0YXRlKG5vZGUsIE5fSElHSF9NRU1PUlkpKQorCQkJCWdvdG8gb3V0X3BtOworCisJCQllcnIgPSAtRUFDQ0VTOworCQkJaWYgKCFub2RlX2lzc2V0KG5vZGUsIHRhc2tfbm9kZXMpKQorCQkJCWdvdG8gb3V0X3BtOworCisJCQlwbVtpXS5ub2RlID0gbm9kZTsKKwkJfSBlbHNlCisJCQlwbVtpXS5ub2RlID0gMDsJLyogYW55dGhpbmcgdG8gbm90IG1hdGNoIE1BWF9OVU1OT0RFUyAqLworCX0KKwkvKiBFbmQgbWFya2VyICovCisJcG1bbnJfcGFnZXNdLm5vZGUgPSBNQVhfTlVNTk9ERVM7CisKKwllcnIgPSBkb19tb3ZlX3BhZ2VfdG9fbm9kZV9hcnJheShtbSwgcG0sIGZsYWdzICYgTVBPTF9NRl9NT1ZFX0FMTCk7CisJaWYgKGVyciA+PSAwKQorCQkvKiBSZXR1cm4gc3RhdHVzIGluZm9ybWF0aW9uICovCisJCWZvciAoaSA9IDA7IGkgPCBucl9wYWdlczsgaSsrKQorCQkJaWYgKHB1dF91c2VyKHBtW2ldLnN0YXR1cywgc3RhdHVzICsgaSkpCisJCQkJZXJyID0gLUVGQVVMVDsKKworb3V0X3BtOgorCXZmcmVlKHBtKTsKK291dDoKKwlyZXR1cm4gZXJyOworfQorCisvKgorICogRGV0ZXJtaW5lIHRoZSBub2RlcyBvZiBhbiBhcnJheSBvZiBwYWdlcyBhbmQgc3RvcmUgaXQgaW4gYW4gYXJyYXkgb2Ygc3RhdHVzLgorICovCitzdGF0aWMgaW50IGRvX3BhZ2VzX3N0YXQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsCisJCQkgY29uc3Qgdm9pZCBfX3VzZXIgKiBfX3VzZXIgKnBhZ2VzLAorCQkJIGludCBfX3VzZXIgKnN0YXR1cykKK3sKKwl1bnNpZ25lZCBsb25nIGk7CisJaW50IGVycjsKKworCWRvd25fcmVhZCgmbW0tPm1tYXBfc2VtKTsKKworCWZvciAoaSA9IDA7IGkgPCBucl9wYWdlczsgaSsrKSB7CisJCWNvbnN0IHZvaWQgX191c2VyICpwOworCQl1bnNpZ25lZCBsb25nIGFkZHI7CisJCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hOworCQlzdHJ1Y3QgcGFnZSAqcGFnZTsKKworCQllcnIgPSAtRUZBVUxUOworCQlpZiAoZ2V0X3VzZXIocCwgcGFnZXMraSkpCisJCQlnb3RvIG91dDsKKwkJYWRkciA9ICh1bnNpZ25lZCBsb25nKSBwOworCisJCXZtYSA9IGZpbmRfdm1hKG1tLCBhZGRyKTsKIAkJaWYgKCF2bWEpCiAJCQlnb3RvIHNldF9zdGF0dXM7CiAKLQkJcGFnZSA9IGZvbGxvd19wYWdlKHZtYSwgcG0tPmFkZHIsIDApOworCQlwYWdlID0gZm9sbG93X3BhZ2Uodm1hLCBhZGRyLCAwKTsKIAogCQllcnIgPSBQVFJfRVJSKHBhZ2UpOwogCQlpZiAoSVNfRVJSKHBhZ2UpKQpAQCAtOTY4LDExICsxMDI3LDEzIEBACiAKIAkJZXJyID0gcGFnZV90b19uaWQocGFnZSk7CiBzZXRfc3RhdHVzOgotCQlwbS0+c3RhdHVzID0gZXJyOworCQlwdXRfdXNlcihlcnIsIHN0YXR1cytpKTsKIAl9CisJZXJyID0gMDsKIAorb3V0OgogCXVwX3JlYWQoJm1tLT5tbWFwX3NlbSk7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIGVycjsKIH0KIAogLyoKQEAgLTk4NCwxMiArMTA0NSw5IEBACiAJCQljb25zdCBpbnQgX191c2VyICpub2RlcywKIAkJCWludCBfX3VzZXIgKnN0YXR1cywgaW50IGZsYWdzKQogewotCWludCBlcnIgPSAwOwotCWludCBpOwogCXN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzazsKLQlub2RlbWFza190IHRhc2tfbm9kZXM7CiAJc3RydWN0IG1tX3N0cnVjdCAqbW07Ci0Jc3RydWN0IHBhZ2VfdG9fbm9kZSAqcG0gPSBOVUxMOworCWludCBlcnI7CiAKIAkvKiBDaGVjayBmbGFncyAqLwogCWlmIChmbGFncyAmIH4oTVBPTF9NRl9NT1ZFfE1QT0xfTUZfTU9WRV9BTEwpKQpAQCAtMTAyMSw3NSArMTA3OSwyMSBAQAogCSAgICAoY3VycmVudC0+dWlkICE9IHRhc2stPnN1aWQpICYmIChjdXJyZW50LT51aWQgIT0gdGFzay0+dWlkKSAmJgogCSAgICAhY2FwYWJsZShDQVBfU1lTX05JQ0UpKSB7CiAJCWVyciA9IC1FUEVSTTsKLQkJZ290byBvdXQyOworCQlnb3RvIG91dDsKIAl9CiAKICAJZXJyID0gc2VjdXJpdHlfdGFza19tb3ZlbWVtb3J5KHRhc2spOwogIAlpZiAoZXJyKQotIAkJZ290byBvdXQyOworCQlnb3RvIG91dDsKIAotCi0JdGFza19ub2RlcyA9IGNwdXNldF9tZW1zX2FsbG93ZWQodGFzayk7Ci0KLQkvKiBMaW1pdCBucl9wYWdlcyBzbyB0aGF0IHRoZSBtdWx0aXBsaWNhdGlvbiBtYXkgbm90IG92ZXJmbG93ICovCi0JaWYgKG5yX3BhZ2VzID49IFVMT05HX01BWCAvIHNpemVvZihzdHJ1Y3QgcGFnZV90b19ub2RlKSAtIDEpIHsKLQkJZXJyID0gLUUyQklHOwotCQlnb3RvIG91dDI7CisJaWYgKG5vZGVzKSB7CisJCWVyciA9IGRvX3BhZ2VzX21vdmUobW0sIHRhc2ssIG5yX3BhZ2VzLCBwYWdlcywgbm9kZXMsIHN0YXR1cywKKwkJCQkgICAgZmxhZ3MpOworCX0gZWxzZSB7CisJCWVyciA9IGRvX3BhZ2VzX3N0YXQobW0sIG5yX3BhZ2VzLCBwYWdlcywgc3RhdHVzKTsKIAl9CiAKLQlwbSA9IHZtYWxsb2MoKG5yX3BhZ2VzICsgMSkgKiBzaXplb2Yoc3RydWN0IHBhZ2VfdG9fbm9kZSkpOwotCWlmICghcG0pIHsKLQkJZXJyID0gLUVOT01FTTsKLQkJZ290byBvdXQyOwotCX0KLQotCS8qCi0JICogR2V0IHBhcmFtZXRlcnMgZnJvbSB1c2VyIHNwYWNlIGFuZCBpbml0aWFsaXplIHRoZSBwbQotCSAqIGFycmF5LiBSZXR1cm4gdmFyaW91cyBlcnJvcnMgaWYgdGhlIHVzZXIgZGlkIHNvbWV0aGluZyB3cm9uZy4KLQkgKi8KLQlmb3IgKGkgPSAwOyBpIDwgbnJfcGFnZXM7IGkrKykgewotCQljb25zdCB2b2lkIF9fdXNlciAqcDsKLQotCQllcnIgPSAtRUZBVUxUOwotCQlpZiAoZ2V0X3VzZXIocCwgcGFnZXMgKyBpKSkKLQkJCWdvdG8gb3V0OwotCi0JCXBtW2ldLmFkZHIgPSAodW5zaWduZWQgbG9uZylwOwotCQlpZiAobm9kZXMpIHsKLQkJCWludCBub2RlOwotCi0JCQlpZiAoZ2V0X3VzZXIobm9kZSwgbm9kZXMgKyBpKSkKLQkJCQlnb3RvIG91dDsKLQotCQkJZXJyID0gLUVOT0RFVjsKLQkJCWlmICghbm9kZV9zdGF0ZShub2RlLCBOX0hJR0hfTUVNT1JZKSkKLQkJCQlnb3RvIG91dDsKLQotCQkJZXJyID0gLUVBQ0NFUzsKLQkJCWlmICghbm9kZV9pc3NldChub2RlLCB0YXNrX25vZGVzKSkKLQkJCQlnb3RvIG91dDsKLQotCQkJcG1baV0ubm9kZSA9IG5vZGU7Ci0JCX0gZWxzZQotCQkJcG1baV0ubm9kZSA9IDA7CS8qIGFueXRoaW5nIHRvIG5vdCBtYXRjaCBNQVhfTlVNTk9ERVMgKi8KLQl9Ci0JLyogRW5kIG1hcmtlciAqLwotCXBtW25yX3BhZ2VzXS5ub2RlID0gTUFYX05VTU5PREVTOwotCi0JaWYgKG5vZGVzKQotCQllcnIgPSBkb19tb3ZlX3BhZ2VzKG1tLCBwbSwgZmxhZ3MgJiBNUE9MX01GX01PVkVfQUxMKTsKLQllbHNlCi0JCWVyciA9IGRvX3BhZ2VzX3N0YXQobW0sIHBtKTsKLQotCWlmIChlcnIgPj0gMCkKLQkJLyogUmV0dXJuIHN0YXR1cyBpbmZvcm1hdGlvbiAqLwotCQlmb3IgKGkgPSAwOyBpIDwgbnJfcGFnZXM7IGkrKykKLQkJCWlmIChwdXRfdXNlcihwbVtpXS5zdGF0dXMsIHN0YXR1cyArIGkpKQotCQkJCWVyciA9IC1FRkFVTFQ7Ci0KIG91dDoKLQl2ZnJlZShwbSk7Ci1vdXQyOgogCW1tcHV0KG1tKTsKIAlyZXR1cm4gZXJyOwogfQpkaWZmIC0tZ2l0IGEvbW0vbWxvY2suYyBiL21tL21sb2NrLmMKaW5kZXggMDFmYmU5My4uMDA4ZWE3MCAxMDA2NDQKLS0tIGEvbW0vbWxvY2suYworKysgYi9tbS9tbG9jay5jCkBAIC04LDEwICs4LDE4IEBACiAjaW5jbHVkZSA8bGludXgvY2FwYWJpbGl0eS5oPgogI2luY2x1ZGUgPGxpbnV4L21tYW4uaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L3N3YXAuaD4KKyNpbmNsdWRlIDxsaW51eC9zd2Fwb3BzLmg+CisjaW5jbHVkZSA8bGludXgvcGFnZW1hcC5oPgogI2luY2x1ZGUgPGxpbnV4L21lbXBvbGljeS5oPgogI2luY2x1ZGUgPGxpbnV4L3N5c2NhbGxzLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9ybWFwLmg+CisjaW5jbHVkZSA8bGludXgvbW16b25lLmg+CisjaW5jbHVkZSA8bGludXgvaHVnZXRsYi5oPgorCisjaW5jbHVkZSAiaW50ZXJuYWwuaCIKIAogaW50IGNhbl9kb19tbG9jayh2b2lkKQogewpAQCAtMjMsMTcgKzMxLDM4MSBAQAogfQogRVhQT1JUX1NZTUJPTChjYW5fZG9fbWxvY2spOwogCisjaWZkZWYgQ09ORklHX1VORVZJQ1RBQkxFX0xSVQorLyoKKyAqIE1sb2NrZWQgcGFnZXMgYXJlIG1hcmtlZCB3aXRoIFBhZ2VNbG9ja2VkKCkgZmxhZyBmb3IgZWZmaWNpZW50IHRlc3RpbmcKKyAqIGluIHZtc2NhbiBhbmQsIHBvc3NpYmx5LCB0aGUgZmF1bHQgcGF0aDsgYW5kIHRvIHN1cHBvcnQgc2VtaS1hY2N1cmF0ZQorICogc3RhdGlzdGljcy4KKyAqCisgKiBBbiBtbG9ja2VkIHBhZ2UgW1BhZ2VNbG9ja2VkKHBhZ2UpXSBpcyB1bmV2aWN0YWJsZS4gIEFzIHN1Y2gsIGl0IHdpbGwKKyAqIGJlIHBsYWNlZCBvbiB0aGUgTFJVICJ1bmV2aWN0YWJsZSIgbGlzdCwgcmF0aGVyIHRoYW4gdGhlIFtpbl1hY3RpdmUgbGlzdHMuCisgKiBUaGUgdW5ldmljdGFibGUgbGlzdCBpcyBhbiBMUlUgc2libGluZyBsaXN0IHRvIHRoZSBbaW5dYWN0aXZlIGxpc3RzLgorICogUGFnZVVuZXZpY3RhYmxlIGlzIHNldCB0byBpbmRpY2F0ZSB0aGUgdW5ldmljdGFibGUgc3RhdGUuCisgKgorICogV2hlbiBsYXp5IG1sb2NraW5nIHZpYSB2bXNjYW4sIGl0IGlzIGltcG9ydGFudCB0byBlbnN1cmUgdGhhdCB0aGUKKyAqIHZtYSdzIFZNX0xPQ0tFRCBzdGF0dXMgaXMgbm90IGNvbmN1cnJlbnRseSBiZWluZyBtb2RpZmllZCwgb3RoZXJ3aXNlIHdlCisgKiBtYXkgaGF2ZSBtbG9ja2VkIGEgcGFnZSB0aGF0IGlzIGJlaW5nIG11bmxvY2tlZC4gU28gbGF6eSBtbG9jayBtdXN0IHRha2UKKyAqIHRoZSBtbWFwX3NlbSBmb3IgcmVhZCwgYW5kIHZlcmlmeSB0aGF0IHRoZSB2bWEgcmVhbGx5IGlzIGxvY2tlZAorICogKHNlZSBtbS9ybWFwLmMpLgorICovCisKKy8qCisgKiAgTFJVIGFjY291bnRpbmcgZm9yIGNsZWFyX3BhZ2VfbWxvY2soKQorICovCit2b2lkIF9fY2xlYXJfcGFnZV9tbG9jayhzdHJ1Y3QgcGFnZSAqcGFnZSkKK3sKKwlWTV9CVUdfT04oIVBhZ2VMb2NrZWQocGFnZSkpOworCisJaWYgKCFwYWdlLT5tYXBwaW5nKSB7CS8qIHRydW5jYXRlZCA/ICovCisJCXJldHVybjsKKwl9CisKKwlkZWNfem9uZV9wYWdlX3N0YXRlKHBhZ2UsIE5SX01MT0NLKTsKKwljb3VudF92bV9ldmVudChVTkVWSUNUQUJMRV9QR0NMRUFSRUQpOworCWlmICghaXNvbGF0ZV9scnVfcGFnZShwYWdlKSkgeworCQlwdXRiYWNrX2xydV9wYWdlKHBhZ2UpOworCX0gZWxzZSB7CisJCS8qCisJCSAqIFBhZ2Ugbm90IG9uIHRoZSBMUlUgeWV0LiAgRmx1c2ggYWxsIHBhZ2V2ZWNzIGFuZCByZXRyeS4KKwkJICovCisJCWxydV9hZGRfZHJhaW5fYWxsKCk7CisJCWlmICghaXNvbGF0ZV9scnVfcGFnZShwYWdlKSkKKwkJCXB1dGJhY2tfbHJ1X3BhZ2UocGFnZSk7CisJCWVsc2UgaWYgKFBhZ2VVbmV2aWN0YWJsZShwYWdlKSkKKwkJCWNvdW50X3ZtX2V2ZW50KFVORVZJQ1RBQkxFX1BHU1RSQU5ERUQpOworCisJfQorfQorCisvKgorICogTWFyayBwYWdlIGFzIG1sb2NrZWQgaWYgbm90IGFscmVhZHkuCisgKiBJZiBwYWdlIG9uIExSVSwgaXNvbGF0ZSBhbmQgcHV0YmFjayB0byBtb3ZlIHRvIHVuZXZpY3RhYmxlIGxpc3QuCisgKi8KK3ZvaWQgbWxvY2tfdm1hX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpCit7CisJQlVHX09OKCFQYWdlTG9ja2VkKHBhZ2UpKTsKKworCWlmICghVGVzdFNldFBhZ2VNbG9ja2VkKHBhZ2UpKSB7CisJCWluY196b25lX3BhZ2Vfc3RhdGUocGFnZSwgTlJfTUxPQ0spOworCQljb3VudF92bV9ldmVudChVTkVWSUNUQUJMRV9QR01MT0NLRUQpOworCQlpZiAoIWlzb2xhdGVfbHJ1X3BhZ2UocGFnZSkpCisJCQlwdXRiYWNrX2xydV9wYWdlKHBhZ2UpOworCX0KK30KKworLyoKKyAqIGNhbGxlZCBmcm9tIG11bmxvY2soKS9tdW5tYXAoKSBwYXRoIHdpdGggcGFnZSBzdXBwb3NlZGx5IG9uIHRoZSBMUlUuCisgKgorICogTm90ZTogIHVubGlrZSBtbG9ja192bWFfcGFnZSgpLCB3ZSBjYW4ndCBqdXN0IGNsZWFyIHRoZSBQYWdlTWxvY2tlZAorICogW2luIHRyeV90b19tdW5sb2NrKCldIGFuZCB0aGVuIGF0dGVtcHQgdG8gaXNvbGF0ZSB0aGUgcGFnZS4gIFdlIG11c3QKKyAqIGlzb2xhdGUgdGhlIHBhZ2UgdG8ga2VlcCBvdGhlcnMgZnJvbSBtZXNzaW5nIHdpdGggaXRzIHVuZXZpY3RhYmxlCisgKiBhbmQgbWxvY2tlZCBzdGF0ZSB3aGlsZSB0cnlpbmcgdG8gbXVubG9jay4gIEhvd2V2ZXIsIHdlIHByZS1jbGVhciB0aGUKKyAqIG1sb2NrZWQgc3RhdGUgYW55d2F5IGFzIHdlIG1pZ2h0IGxvc2UgdGhlIGlzb2xhdGlvbiByYWNlIGFuZCB3ZSBtaWdodAorICogbm90IGdldCBhbm90aGVyIGNoYW5jZSB0byBjbGVhciBQYWdlTWxvY2tlZC4gIElmIHdlIHN1Y2Nlc3NmdWxseQorICogaXNvbGF0ZSB0aGUgcGFnZSBhbmQgdHJ5X3RvX211bmxvY2soKSBkZXRlY3RzIG90aGVyIFZNX0xPQ0tFRCB2bWFzCisgKiBtYXBwaW5nIHRoZSBwYWdlLCBpdCB3aWxsIHJlc3RvcmUgdGhlIFBhZ2VNbG9ja2VkIHN0YXRlLCB1bmxlc3MgdGhlIHBhZ2UKKyAqIGlzIG1hcHBlZCBpbiBhIG5vbi1saW5lYXIgdm1hLiAgU28sIHdlIGdvIGFoZWFkIGFuZCBTZXRQYWdlTWxvY2tlZCgpLAorICogcGVyaGFwcyByZWR1bmRhbnRseS4KKyAqIElmIHdlIGxvc2UgdGhlIGlzb2xhdGlvbiByYWNlLCBhbmQgdGhlIHBhZ2UgaXMgbWFwcGVkIGJ5IG90aGVyIFZNX0xPQ0tFRAorICogdm1hcywgd2UnbGwgZGV0ZWN0IHRoaXMgaW4gdm1zY2FuLS12aWEgdHJ5X3RvX211bmxvY2soKSBvciB0cnlfdG9fdW5tYXAoKQorICogZWl0aGVyIG9mIHdoaWNoIHdpbGwgcmVzdG9yZSB0aGUgUGFnZU1sb2NrZWQgc3RhdGUgYnkgY2FsbGluZworICogbWxvY2tfdm1hX3BhZ2UoKSBhYm92ZSwgaWYgaXQgY2FuIGdyYWIgdGhlIHZtYSdzIG1tYXAgc2VtLgorICovCitzdGF0aWMgdm9pZCBtdW5sb2NrX3ZtYV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlKQoreworCUJVR19PTighUGFnZUxvY2tlZChwYWdlKSk7CisKKwlpZiAoVGVzdENsZWFyUGFnZU1sb2NrZWQocGFnZSkpIHsKKwkJZGVjX3pvbmVfcGFnZV9zdGF0ZShwYWdlLCBOUl9NTE9DSyk7CisJCWlmICghaXNvbGF0ZV9scnVfcGFnZShwYWdlKSkgeworCQkJaW50IHJldCA9IHRyeV90b19tdW5sb2NrKHBhZ2UpOworCQkJLyoKKwkJCSAqIGRpZCB0cnlfdG9fdW5sb2NrKCkgc3VjY2VlZCBvciBwdW50PworCQkJICovCisJCQlpZiAocmV0ID09IFNXQVBfU1VDQ0VTUyB8fCByZXQgPT0gU1dBUF9BR0FJTikKKwkJCQljb3VudF92bV9ldmVudChVTkVWSUNUQUJMRV9QR01VTkxPQ0tFRCk7CisKKwkJCXB1dGJhY2tfbHJ1X3BhZ2UocGFnZSk7CisJCX0gZWxzZSB7CisJCQkvKgorCQkJICogV2UgbG9zdCB0aGUgcmFjZS4gIGxldCB0cnlfdG9fdW5tYXAoKSBkZWFsCisJCQkgKiB3aXRoIGl0LiAgQXQgbGVhc3Qgd2UgZ2V0IHRoZSBwYWdlIHN0YXRlIGFuZAorCQkJICogbWxvY2sgc3RhdHMgcmlnaHQuICBIb3dldmVyLCBwYWdlIGlzIHN0aWxsIG9uCisJCQkgKiB0aGUgbm9yZWNsYWltIGxpc3QuICBXZSdsbCBmaXggdGhhdCB1cCB3aGVuCisJCQkgKiB0aGUgcGFnZSBpcyBldmVudHVhbGx5IGZyZWVkIG9yIHdlIHNjYW4gdGhlCisJCQkgKiBub3JlY2xhaW0gbGlzdC4KKwkJCSAqLworCQkJaWYgKFBhZ2VVbmV2aWN0YWJsZShwYWdlKSkKKwkJCQljb3VudF92bV9ldmVudChVTkVWSUNUQUJMRV9QR1NUUkFOREVEKTsKKwkJCWVsc2UKKwkJCQljb3VudF92bV9ldmVudChVTkVWSUNUQUJMRV9QR01VTkxPQ0tFRCk7CisJCX0KKwl9Cit9CisKKy8qKgorICogX19tbG9ja192bWFfcGFnZXNfcmFuZ2UoKSAtICBtbG9jay9tdW5sb2NrIGEgcmFuZ2Ugb2YgcGFnZXMgaW4gdGhlIHZtYS4KKyAqIEB2bWE6ICAgdGFyZ2V0IHZtYQorICogQHN0YXJ0OiBzdGFydCBhZGRyZXNzCisgKiBAZW5kOiAgIGVuZCBhZGRyZXNzCisgKiBAbWxvY2s6IDAgaW5kaWNhdGUgbXVubG9jaywgb3RoZXJ3aXNlIG1sb2NrLgorICoKKyAqIElmIEBtbG9jayA9PSAwLCB1bmxvY2sgYW4gbWxvY2tlZCByYW5nZTsKKyAqIGVsc2UgbWxvY2sgdGhlIHJhbmdlIG9mIHBhZ2VzLiAgVGhpcyB0YWtlcyBjYXJlIG9mIG1ha2luZyB0aGUgcGFnZXMgcHJlc2VudCAsCisgKiB0b28uCisgKgorICogcmV0dXJuIDAgb24gc3VjY2VzcywgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBlcnJvci4KKyAqCisgKiB2bWEtPnZtX21tLT5tbWFwX3NlbSBtdXN0IGJlIGhlbGQgZm9yIGF0IGxlYXN0IHJlYWQuCisgKi8KK3N0YXRpYyBsb25nIF9fbWxvY2tfdm1hX3BhZ2VzX3JhbmdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAorCQkJCSAgIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLAorCQkJCSAgIGludCBtbG9jaykKK3sKKwlzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IHZtYS0+dm1fbW07CisJdW5zaWduZWQgbG9uZyBhZGRyID0gc3RhcnQ7CisJc3RydWN0IHBhZ2UgKnBhZ2VzWzE2XTsgLyogMTYgZ2l2ZXMgYSByZWFzb25hYmxlIGJhdGNoICovCisJaW50IG5yX3BhZ2VzID0gKGVuZCAtIHN0YXJ0KSAvIFBBR0VfU0laRTsKKwlpbnQgcmV0OworCWludCBndXBfZmxhZ3MgPSAwOworCisJVk1fQlVHX09OKHN0YXJ0ICYgflBBR0VfTUFTSyk7CisJVk1fQlVHX09OKGVuZCAgICYgflBBR0VfTUFTSyk7CisJVk1fQlVHX09OKHN0YXJ0IDwgdm1hLT52bV9zdGFydCk7CisJVk1fQlVHX09OKGVuZCAgID4gdm1hLT52bV9lbmQpOworCVZNX0JVR19PTigoIXJ3c2VtX2lzX2xvY2tlZCgmbW0tPm1tYXBfc2VtKSkgJiYKKwkJICAoYXRvbWljX3JlYWQoJm1tLT5tbV91c2VycykgIT0gMCkpOworCisJLyoKKwkgKiBtbG9jazogICBkb24ndCBwYWdlIHBvcHVsYXRlIGlmIHBhZ2UgaGFzIFBST1RfTk9ORSBwZXJtaXNzaW9uLgorCSAqIG11bmxvY2s6IHRoZSBwYWdlcyBhbHdheXMgZG8gbXVubG9jayBhbHRocm91Z2gKKwkgKiAgICAgICAgICBpdHMgaGFzIFBST1RfTk9ORSBwZXJtaXNzaW9uLgorCSAqLworCWlmICghbWxvY2spCisJCWd1cF9mbGFncyB8PSBHVVBfRkxBR1NfSUdOT1JFX1ZNQV9QRVJNSVNTSU9OUzsKKworCWlmICh2bWEtPnZtX2ZsYWdzICYgVk1fV1JJVEUpCisJCWd1cF9mbGFncyB8PSBHVVBfRkxBR1NfV1JJVEU7CisKKwlscnVfYWRkX2RyYWluX2FsbCgpOwkvKiBwdXNoIGNhY2hlZCBwYWdlcyB0byBMUlUgKi8KKworCXdoaWxlIChucl9wYWdlcyA+IDApIHsKKwkJaW50IGk7CisKKwkJY29uZF9yZXNjaGVkKCk7CisKKwkJLyoKKwkJICogZ2V0X3VzZXJfcGFnZXMgbWFrZXMgcGFnZXMgcHJlc2VudCBpZiB3ZSBhcmUKKwkJICogc2V0dGluZyBtbG9jay4gYW5kIHRoaXMgZXh0cmEgcmVmZXJlbmNlIGNvdW50IHdpbGwKKwkJICogZGlzYWJsZSBtaWdyYXRpb24gb2YgdGhpcyBwYWdlLiAgSG93ZXZlciwgcGFnZSBtYXkKKwkJICogc3RpbGwgYmUgdHJ1bmNhdGVkIG91dCBmcm9tIHVuZGVyIHVzLgorCQkgKi8KKwkJcmV0ID0gX19nZXRfdXNlcl9wYWdlcyhjdXJyZW50LCBtbSwgYWRkciwKKwkJCQltaW5fdChpbnQsIG5yX3BhZ2VzLCBBUlJBWV9TSVpFKHBhZ2VzKSksCisJCQkJZ3VwX2ZsYWdzLCBwYWdlcywgTlVMTCk7CisJCS8qCisJCSAqIFRoaXMgY2FuIGhhcHBlbiBmb3IsIGUuZy4sIFZNX05PTkxJTkVBUiByZWdpb25zIGJlZm9yZQorCQkgKiBhIHBhZ2UgaGFzIGJlZW4gYWxsb2NhdGVkIGFuZCBtYXBwZWQgYXQgYSBnaXZlbiBvZmZzZXQsCisJCSAqIG9yIGZvciBhZGRyZXNzZXMgdGhhdCBtYXAgYmV5b25kIGVuZCBvZiBhIGZpbGUuCisJCSAqIFdlJ2xsIG1sb2NrIHRoZSB0aGUgcGFnZXMgaWYvd2hlbiB0aGV5IGdldCBmYXVsdGVkIGluLgorCQkgKi8KKwkJaWYgKHJldCA8IDApCisJCQlicmVhazsKKwkJaWYgKHJldCA9PSAwKSB7CisJCQkvKgorCQkJICogV2Uga25vdyB0aGUgdm1hIGlzIHRoZXJlLCBzbyB0aGUgb25seSB0aW1lCisJCQkgKiB3ZSBjYW5ub3QgZ2V0IGEgc2luZ2xlIHBhZ2Ugc2hvdWxkIGJlIGFuCisJCQkgKiBlcnJvciAocmV0IDwgMCkgY2FzZS4KKwkJCSAqLworCQkJV0FSTl9PTigxKTsKKwkJCWJyZWFrOworCQl9CisKKwkJbHJ1X2FkZF9kcmFpbigpOwkvKiBwdXNoIGNhY2hlZCBwYWdlcyB0byBMUlUgKi8KKworCQlmb3IgKGkgPSAwOyBpIDwgcmV0OyBpKyspIHsKKwkJCXN0cnVjdCBwYWdlICpwYWdlID0gcGFnZXNbaV07CisKKwkJCWxvY2tfcGFnZShwYWdlKTsKKwkJCS8qCisJCQkgKiBCZWNhdXNlIHdlIGxvY2sgcGFnZSBoZXJlIGFuZCBtaWdyYXRpb24gaXMgYmxvY2tlZAorCQkJICogYnkgdGhlIGVsZXZhdGVkIHJlZmVyZW5jZSwgd2UgbmVlZCBvbmx5IGNoZWNrIGZvcgorCQkJICogcGFnZSB0cnVuY2F0aW9uIChmaWxlLWNhY2hlIG9ubHkpLgorCQkJICovCisJCQlpZiAocGFnZS0+bWFwcGluZykgeworCQkJCWlmIChtbG9jaykKKwkJCQkJbWxvY2tfdm1hX3BhZ2UocGFnZSk7CisJCQkJZWxzZQorCQkJCQltdW5sb2NrX3ZtYV9wYWdlKHBhZ2UpOworCQkJfQorCQkJdW5sb2NrX3BhZ2UocGFnZSk7CisJCQlwdXRfcGFnZShwYWdlKTsJCS8qIHJlZiBmcm9tIGdldF91c2VyX3BhZ2VzKCkgKi8KKworCQkJLyoKKwkJCSAqIGhlcmUgd2UgYXNzdW1lIHRoYXQgZ2V0X3VzZXJfcGFnZXMoKSBoYXMgZ2l2ZW4gdXMKKwkJCSAqIGEgbGlzdCBvZiB2aXJ0dWFsbHkgY29udGlndW91cyBwYWdlcy4KKwkJCSAqLworCQkJYWRkciArPSBQQUdFX1NJWkU7CS8qIGZvciBuZXh0IGdldF91c2VyX3BhZ2VzKCkgKi8KKwkJCW5yX3BhZ2VzLS07CisJCX0KKwkJcmV0ID0gMDsKKwl9CisKKwlscnVfYWRkX2RyYWluX2FsbCgpOwkvKiB0byB1cGRhdGUgc3RhdHMgKi8KKworCXJldHVybiByZXQ7CS8qIGNvdW50IGVudGlyZSB2bWEgYXMgbG9ja2VkX3ZtICovCit9CisKKy8qCisgKiBjb252ZXJ0IGdldF91c2VyX3BhZ2VzKCkgcmV0dXJuIHZhbHVlIHRvIHBvc2l4IG1sb2NrKCkgZXJyb3IKKyAqLworc3RhdGljIGludCBfX21sb2NrX3Bvc2l4X2Vycm9yX3JldHVybihsb25nIHJldHZhbCkKK3sKKwlpZiAocmV0dmFsID09IC1FRkFVTFQpCisJCXJldHZhbCA9IC1FTk9NRU07CisJZWxzZSBpZiAocmV0dmFsID09IC1FTk9NRU0pCisJCXJldHZhbCA9IC1FQUdBSU47CisJcmV0dXJuIHJldHZhbDsKK30KKworI2Vsc2UgLyogQ09ORklHX1VORVZJQ1RBQkxFX0xSVSAqLworCisvKgorICogSnVzdCBtYWtlIHBhZ2VzIHByZXNlbnQgaWYgVk1fTE9DS0VELiAgTm8tb3AgaWYgdW5sb2NraW5nLgorICovCitzdGF0aWMgbG9uZyBfX21sb2NrX3ZtYV9wYWdlc19yYW5nZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKKwkJCQkgICB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCwKKwkJCQkgICBpbnQgbWxvY2spCit7CisJaWYgKG1sb2NrICYmICh2bWEtPnZtX2ZsYWdzICYgVk1fTE9DS0VEKSkKKwkJcmV0dXJuIG1ha2VfcGFnZXNfcHJlc2VudChzdGFydCwgZW5kKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBpbnQgX19tbG9ja19wb3NpeF9lcnJvcl9yZXR1cm4obG9uZyByZXR2YWwpCit7CisJcmV0dXJuIDA7Cit9CisKKyNlbmRpZiAvKiBDT05GSUdfVU5FVklDVEFCTEVfTFJVICovCisKKy8qKgorICogbWxvY2tfdm1hX3BhZ2VzX3JhbmdlKCkgLSBtbG9jayBwYWdlcyBpbiBzcGVjaWZpZWQgdm1hIHJhbmdlLgorICogQHZtYSAtIHRoZSB2bWEgY29udGFpbmluZyB0aGUgc3BlY2ZpZWQgYWRkcmVzcyByYW5nZQorICogQHN0YXJ0IC0gc3RhcnRpbmcgYWRkcmVzcyBpbiBAdm1hIHRvIG1sb2NrCisgKiBAZW5kICAgLSBlbmQgYWRkcmVzcyBbKzFdIGluIEB2bWEgdG8gbWxvY2sKKyAqCisgKiBGb3IgbW1hcCgpL21yZW1hcCgpL2V4cGFuc2lvbiBvZiBtbG9ja2VkIHZtYS4KKyAqCisgKiByZXR1cm4gMCBvbiBzdWNjZXNzIGZvciAibm9ybWFsIiB2bWFzLgorICoKKyAqIHJldHVybiBudW1iZXIgb2YgcGFnZXMgWz4gMF0gdG8gYmUgcmVtb3ZlZCBmcm9tIGxvY2tlZF92bSBvbiBzdWNjZXNzCisgKiBvZiAic3BlY2lhbCIgdm1hcy4KKyAqCisgKiByZXR1cm4gbmVnYXRpdmUgZXJyb3IgaWYgdm1hIHNwYW5uaW5nIEBzdGFydC1AcmFuZ2UgZGlzYXBwZWFycyB3aGlsZQorICogbW1hcCBzZW1hcGhvcmUgaXMgZHJvcHBlZC4gIFVubGlrZWx5PworICovCitsb25nIG1sb2NrX3ZtYV9wYWdlc19yYW5nZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKKwkJCXVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKQoreworCXN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gdm1hLT52bV9tbTsKKwlpbnQgbnJfcGFnZXMgPSAoZW5kIC0gc3RhcnQpIC8gUEFHRV9TSVpFOworCUJVR19PTighKHZtYS0+dm1fZmxhZ3MgJiBWTV9MT0NLRUQpKTsKKworCS8qCisJICogZmlsdGVyIHVubG9ja2FibGUgdm1hcworCSAqLworCWlmICh2bWEtPnZtX2ZsYWdzICYgKFZNX0lPIHwgVk1fUEZOTUFQKSkKKwkJZ290byBub19tbG9jazsKKworCWlmICghKCh2bWEtPnZtX2ZsYWdzICYgKFZNX0RPTlRFWFBBTkQgfCBWTV9SRVNFUlZFRCkpIHx8CisJCQlpc192bV9odWdldGxiX3BhZ2Uodm1hKSB8fAorCQkJdm1hID09IGdldF9nYXRlX3ZtYShjdXJyZW50KSkpIHsKKwkJbG9uZyBlcnJvcjsKKwkJZG93bmdyYWRlX3dyaXRlKCZtbS0+bW1hcF9zZW0pOworCisJCWVycm9yID0gX19tbG9ja192bWFfcGFnZXNfcmFuZ2Uodm1hLCBzdGFydCwgZW5kLCAxKTsKKworCQl1cF9yZWFkKCZtbS0+bW1hcF9zZW0pOworCQkvKiB2bWEgY2FuIGNoYW5nZSBvciBkaXNhcHBlYXIgKi8KKwkJZG93bl93cml0ZSgmbW0tPm1tYXBfc2VtKTsKKwkJdm1hID0gZmluZF92bWEobW0sIHN0YXJ0KTsKKwkJLyogbm9uLU5VTEwgdm1hIG11c3QgY29udGFpbiBAc3RhcnQsIGJ1dCBuZWVkIHRvIGNoZWNrIEBlbmQgKi8KKwkJaWYgKCF2bWEgfHwgIGVuZCA+IHZtYS0+dm1fZW5kKQorCQkJcmV0dXJuIC1FTk9NRU07CisKKwkJcmV0dXJuIDA7CS8qIGhpZGUgb3RoZXIgZXJyb3JzIGZyb20gbW1hcCgpLCBldCBhbCAqLworCX0KKworCS8qCisJICogVXNlciBtYXBwZWQga2VybmVsIHBhZ2VzIG9yIGh1Z2UgcGFnZXM6CisJICogbWFrZSB0aGVzZSBwYWdlcyBwcmVzZW50IHRvIHBvcHVsYXRlIHRoZSBwdGVzLCBidXQKKwkgKiBmYWxsIHRocnUnIHRvIHJlc2V0IFZNX0xPQ0tFRC0tbm8gbmVlZCB0byB1bmxvY2ssIGFuZAorCSAqIHJldHVybiBucl9wYWdlcyBzbyB0aGVzZSBkb24ndCBnZXQgY291bnRlZCBhZ2FpbnN0IHRhc2sncworCSAqIGxvY2tlZCBsaW1pdC4gIGh1Z2UgcGFnZXMgYXJlIGFscmVhZHkgY291bnRlZCBhZ2FpbnN0CisJICogbG9ja2VkIHZtIGxpbWl0LgorCSAqLworCW1ha2VfcGFnZXNfcHJlc2VudChzdGFydCwgZW5kKTsKKworbm9fbWxvY2s6CisJdm1hLT52bV9mbGFncyAmPSB+Vk1fTE9DS0VEOwkvKiBhbmQgZG9uJ3QgY29tZSBiYWNrISAqLworCXJldHVybiBucl9wYWdlczsJCS8qIGVycm9yIG9yIHBhZ2VzIE5PVCBtbG9ja2VkICovCit9CisKKworLyoKKyAqIG11bmxvY2tfdm1hX3BhZ2VzX3JhbmdlKCkgLSBtdW5sb2NrIGFsbCBwYWdlcyBpbiB0aGUgdm1hIHJhbmdlLicKKyAqIEB2bWEgLSB2bWEgY29udGFpbmluZyByYW5nZSB0byBiZSBtdW5sb2NrKCllZC4KKyAqIEBzdGFydCAtIHN0YXJ0IGFkZHJlc3MgaW4gQHZtYSBvZiB0aGUgcmFuZ2UKKyAqIEBlbmQgLSBlbmQgb2YgcmFuZ2UgaW4gQHZtYS4KKyAqCisgKiAgRm9yIG1yZW1hcCgpLCBtdW5tYXAoKSBhbmQgZXhpdCgpLgorICoKKyAqIENhbGxlZCB3aXRoIEB2bWEgVk1fTE9DS0VELgorICoKKyAqIFJldHVybnMgd2l0aCBWTV9MT0NLRUQgY2xlYXJlZC4gIENhbGxlcnMgbXVzdCBiZSBwcmVwYXJlZCB0bworICogZGVhbCB3aXRoIHRoaXMuCisgKgorICogV2UgZG9uJ3Qgc2F2ZSBhbmQgcmVzdG9yZSBWTV9MT0NLRUQgaGVyZSBiZWNhdXNlIHBhZ2VzIGFyZQorICogc3RpbGwgb24gbHJ1LiAgSW4gdW5tYXAgcGF0aCwgcGFnZXMgbWlnaHQgYmUgc2Nhbm5lZCBieSByZWNsYWltCisgKiBhbmQgcmUtbWxvY2tlZCBieSB0cnlfdG9fe211bmxvY2t8dW5tYXB9IGJlZm9yZSB3ZSB1bm1hcCBhbmQKKyAqIGZyZWUgdGhlbS4gIFRoaXMgd2lsbCByZXN1bHQgaW4gZnJlZWluZyBtbG9ja2VkIHBhZ2VzLgorICovCit2b2lkIG11bmxvY2tfdm1hX3BhZ2VzX3JhbmdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAorCQkJICAgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpCit7CisJdm1hLT52bV9mbGFncyAmPSB+Vk1fTE9DS0VEOworCV9fbWxvY2tfdm1hX3BhZ2VzX3JhbmdlKHZtYSwgc3RhcnQsIGVuZCwgMCk7Cit9CisKKy8qCisgKiBtbG9ja19maXh1cCAgLSBoYW5kbGUgbWxvY2tbYWxsXS9tdW5sb2NrW2FsbF0gcmVxdWVzdHMuCisgKgorICogRmlsdGVycyBvdXQgInNwZWNpYWwiIHZtYXMgLS0gVk1fTE9DS0VEIG5ldmVyIGdldHMgc2V0IGZvciB0aGVzZSwgYW5kCisgKiBtdW5sb2NrIGlzIGEgbm8tb3AuICBIb3dldmVyLCBmb3Igc29tZSBzcGVjaWFsIHZtYXMsIHdlIGdvIGFoZWFkIGFuZAorICogcG9wdWxhdGUgdGhlIHB0ZXMgdmlhIG1ha2VfcGFnZXNfcHJlc2VudCgpLgorICoKKyAqIEZvciB2bWFzIHRoYXQgcGFzcyB0aGUgZmlsdGVycywgbWVyZ2Uvc3BsaXQgYXMgYXBwcm9wcmlhdGUuCisgKi8KIHN0YXRpYyBpbnQgbWxvY2tfZml4dXAoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqKnByZXYsCiAJdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsIHVuc2lnbmVkIGludCBuZXdmbGFncykKIHsKLQlzdHJ1Y3QgbW1fc3RydWN0ICogbW0gPSB2bWEtPnZtX21tOworCXN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gdm1hLT52bV9tbTsKIAlwZ29mZl90IHBnb2ZmOwotCWludCBwYWdlczsKKwlpbnQgbnJfcGFnZXM7CiAJaW50IHJldCA9IDA7CisJaW50IGxvY2sgPSBuZXdmbGFncyAmIFZNX0xPQ0tFRDsKIAotCWlmIChuZXdmbGFncyA9PSB2bWEtPnZtX2ZsYWdzKSB7Ci0JCSpwcmV2ID0gdm1hOwotCQlnb3RvIG91dDsKKwlpZiAobmV3ZmxhZ3MgPT0gdm1hLT52bV9mbGFncyB8fAorCQkJKHZtYS0+dm1fZmxhZ3MgJiAoVk1fSU8gfCBWTV9QRk5NQVApKSkKKwkJZ290byBvdXQ7CS8qIGRvbid0IHNldCBWTV9MT0NLRUQsICBkb24ndCBjb3VudCAqLworCisJaWYgKCh2bWEtPnZtX2ZsYWdzICYgKFZNX0RPTlRFWFBBTkQgfCBWTV9SRVNFUlZFRCkpIHx8CisJCQlpc192bV9odWdldGxiX3BhZ2Uodm1hKSB8fAorCQkJdm1hID09IGdldF9nYXRlX3ZtYShjdXJyZW50KSkgeworCQlpZiAobG9jaykKKwkJCW1ha2VfcGFnZXNfcHJlc2VudChzdGFydCwgZW5kKTsKKwkJZ290byBvdXQ7CS8qIGRvbid0IHNldCBWTV9MT0NLRUQsICBkb24ndCBjb3VudCAqLwogCX0KIAogCXBnb2ZmID0gdm1hLT52bV9wZ29mZiArICgoc3RhcnQgLSB2bWEtPnZtX3N0YXJ0KSA+PiBQQUdFX1NISUZUKTsKQEAgLTQ0LDggKzQxNiw2IEBACiAJCWdvdG8gc3VjY2VzczsKIAl9CiAKLQkqcHJldiA9IHZtYTsKLQogCWlmIChzdGFydCAhPSB2bWEtPnZtX3N0YXJ0KSB7CiAJCXJldCA9IHNwbGl0X3ZtYShtbSwgdm1hLCBzdGFydCwgMSk7CiAJCWlmIChyZXQpCkBAIC02MCwyNCArNDMwLDYxIEBACiAKIHN1Y2Nlc3M6CiAJLyoKKwkgKiBLZWVwIHRyYWNrIG9mIGFtb3VudCBvZiBsb2NrZWQgVk0uCisJICovCisJbnJfcGFnZXMgPSAoZW5kIC0gc3RhcnQpID4+IFBBR0VfU0hJRlQ7CisJaWYgKCFsb2NrKQorCQlucl9wYWdlcyA9IC1ucl9wYWdlczsKKwltbS0+bG9ja2VkX3ZtICs9IG5yX3BhZ2VzOworCisJLyoKIAkgKiB2bV9mbGFncyBpcyBwcm90ZWN0ZWQgYnkgdGhlIG1tYXBfc2VtIGhlbGQgaW4gd3JpdGUgbW9kZS4KIAkgKiBJdCdzIG9rYXkgaWYgdHJ5X3RvX3VubWFwX29uZSB1bm1hcHMgYSBwYWdlIGp1c3QgYWZ0ZXIgd2UKLQkgKiBzZXQgVk1fTE9DS0VELCBtYWtlX3BhZ2VzX3ByZXNlbnQgYmVsb3cgd2lsbCBicmluZyBpdCBiYWNrLgorCSAqIHNldCBWTV9MT0NLRUQsIF9fbWxvY2tfdm1hX3BhZ2VzX3JhbmdlIHdpbGwgYnJpbmcgaXQgYmFjay4KIAkgKi8KIAl2bWEtPnZtX2ZsYWdzID0gbmV3ZmxhZ3M7CiAKLQkvKgotCSAqIEtlZXAgdHJhY2sgb2YgYW1vdW50IG9mIGxvY2tlZCBWTS4KLQkgKi8KLQlwYWdlcyA9IChlbmQgLSBzdGFydCkgPj4gUEFHRV9TSElGVDsKLQlpZiAobmV3ZmxhZ3MgJiBWTV9MT0NLRUQpIHsKLQkJcGFnZXMgPSAtcGFnZXM7Ci0JCWlmICghKG5ld2ZsYWdzICYgVk1fSU8pKQotCQkJcmV0ID0gbWFrZV9wYWdlc19wcmVzZW50KHN0YXJ0LCBlbmQpOworCWlmIChsb2NrKSB7CisJCS8qCisJCSAqIG1tYXBfc2VtIGlzIGN1cnJlbnRseSBoZWxkIGZvciB3cml0ZS4gIERvd25ncmFkZSB0aGUgd3JpdGUKKwkJICogbG9jayB0byBhIHJlYWQgbG9jayBzbyB0aGF0IG90aGVyIGZhdWx0cywgbW1hcCBzY2FucywgLi4uCisJCSAqIHdoaWxlIHdlIGZhdWx0IGluIGFsbCBwYWdlcy4KKwkJICovCisJCWRvd25ncmFkZV93cml0ZSgmbW0tPm1tYXBfc2VtKTsKKworCQlyZXQgPSBfX21sb2NrX3ZtYV9wYWdlc19yYW5nZSh2bWEsIHN0YXJ0LCBlbmQsIDEpOworCisJCS8qCisJCSAqIE5lZWQgdG8gcmVhY3F1aXJlIG1tYXAgc2VtIGluIHdyaXRlIG1vZGUsIGFzIG91ciBjYWxsZXJzCisJCSAqIGV4cGVjdCB0aGlzLiAgV2UgaGF2ZSBubyBzdXBwb3J0IGZvciBhdG9taWNhbGx5IHVwZ3JhZGluZworCQkgKiBhIHNlbSB0byB3cml0ZSwgc28gd2UgbmVlZCB0byBjaGVjayBmb3IgcmFuZ2VzIHdoaWxlIHNlbQorCQkgKiBpcyB1bmxvY2tlZC4KKwkJICovCisJCXVwX3JlYWQoJm1tLT5tbWFwX3NlbSk7CisJCS8qIHZtYSBjYW4gY2hhbmdlIG9yIGRpc2FwcGVhciAqLworCQlkb3duX3dyaXRlKCZtbS0+bW1hcF9zZW0pOworCQkqcHJldiA9IGZpbmRfdm1hKG1tLCBzdGFydCk7CisJCS8qIG5vbi1OVUxMICpwcmV2IG11c3QgY29udGFpbiBAc3RhcnQsIGJ1dCBuZWVkIHRvIGNoZWNrIEBlbmQgKi8KKwkJaWYgKCEoKnByZXYpIHx8IGVuZCA+ICgqcHJldiktPnZtX2VuZCkKKwkJCXJldCA9IC1FTk9NRU07CisJCWVsc2UgaWYgKHJldCA+IDApIHsKKwkJCW1tLT5sb2NrZWRfdm0gLT0gcmV0OworCQkJcmV0ID0gMDsKKwkJfSBlbHNlCisJCQlyZXQgPSBfX21sb2NrX3Bvc2l4X2Vycm9yX3JldHVybihyZXQpOyAvKiB0cmFuc2xhdGUgaWYgbmVlZGVkICovCisJfSBlbHNlIHsKKwkJLyoKKwkJICogVE9ETzogIGZvciB1bmxvY2tpbmcsIHBhZ2VzIHdpbGwgYWxyZWFkeSBiZSByZXNpZGVudCwgc28KKwkJICogd2UgZG9uJ3QgbmVlZCB0byB3YWl0IGZvciBhbGxvY2F0aW9ucy9yZWNsYWltL3BhZ2VpbiwgLi4uCisJCSAqIEhvd2V2ZXIsIHVubG9ja2luZyBhIHZlcnkgbGFyZ2UgcmVnaW9uIGNhbiBzdGlsbCB0YWtlIGEKKwkJICogd2hpbGUuICBTaG91bGQgd2UgZG93bmdyYWRlIHRoZSBzZW1hcGhvcmUgZm9yIGJvdGggbG9jaworCQkgKiBBTkQgdW5sb2NrID8KKwkJICovCisJCV9fbWxvY2tfdm1hX3BhZ2VzX3JhbmdlKHZtYSwgc3RhcnQsIGVuZCwgMCk7CiAJfQogCi0JbW0tPmxvY2tlZF92bSAtPSBwYWdlczsKIG91dDoKKwkqcHJldiA9IHZtYTsKIAlyZXR1cm4gcmV0OwogfQogCmRpZmYgLS1naXQgYS9tbS9tbWFwLmMgYi9tbS9tbWFwLmMKaW5kZXggZTdhNWE2OC4uNzRmNGQxNSAxMDA2NDQKLS0tIGEvbW0vbW1hcC5jCisrKyBiL21tL21tYXAuYwpAQCAtNDEwLDcgKzQxMCw3IEBACiAJcmJfaW5zZXJ0X2NvbG9yKCZ2bWEtPnZtX3JiLCAmbW0tPm1tX3JiKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIF9fdm1hX2xpbmtfZmlsZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKK3N0YXRpYyB2b2lkIF9fdm1hX2xpbmtfZmlsZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKIHsKIAlzdHJ1Y3QgZmlsZSAqIGZpbGU7CiAKQEAgLTY2Miw4ICs2NjIsNiBAQAogICogSWYgdGhlIHZtYSBoYXMgYSAtPmNsb3NlIG9wZXJhdGlvbiB0aGVuIHRoZSBkcml2ZXIgcHJvYmFibHkgbmVlZHMgdG8gcmVsZWFzZQogICogcGVyLXZtYSByZXNvdXJjZXMsIHNvIHdlIGRvbid0IGF0dGVtcHQgdG8gbWVyZ2UgdGhvc2UuCiAgKi8KLSNkZWZpbmUgVk1fU1BFQ0lBTCAoVk1fSU8gfCBWTV9ET05URVhQQU5EIHwgVk1fUkVTRVJWRUQgfCBWTV9QRk5NQVApCi0KIHN0YXRpYyBpbmxpbmUgaW50IGlzX21lcmdlYWJsZV92bWEoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCiAJCQlzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgbG9uZyB2bV9mbGFncykKIHsKQEAgLTk3Miw2ICs5NzAsNyBAQAogCQkJcmV0dXJuIC1FUEVSTTsKIAkJdm1fZmxhZ3MgfD0gVk1fTE9DS0VEOwogCX0KKwogCS8qIG1sb2NrIE1DTF9GVVRVUkU/ICovCiAJaWYgKHZtX2ZsYWdzICYgVk1fTE9DS0VEKSB7CiAJCXVuc2lnbmVkIGxvbmcgbG9ja2VkLCBsb2NrX2xpbWl0OwpAQCAtMTEzOSwxMCArMTEzOCwxMiBAQAogCSAqIFRoZSBWTV9TSEFSRUQgdGVzdCBpcyBuZWNlc3NhcnkgYmVjYXVzZSBzaG1lbV96ZXJvX3NldHVwCiAJICogd2lsbCBjcmVhdGUgdGhlIGZpbGUgb2JqZWN0IGZvciBhIHNoYXJlZCBhbm9ueW1vdXMgbWFwIGJlbG93LgogCSAqLwotCWlmICghZmlsZSAmJiAhKHZtX2ZsYWdzICYgVk1fU0hBUkVEKSAmJgotCSAgICB2bWFfbWVyZ2UobW0sIHByZXYsIGFkZHIsIGFkZHIgKyBsZW4sIHZtX2ZsYWdzLAotCQkJCQlOVUxMLCBOVUxMLCBwZ29mZiwgTlVMTCkpCi0JCWdvdG8gb3V0OworCWlmICghZmlsZSAmJiAhKHZtX2ZsYWdzICYgVk1fU0hBUkVEKSkgeworCQl2bWEgPSB2bWFfbWVyZ2UobW0sIHByZXYsIGFkZHIsIGFkZHIgKyBsZW4sIHZtX2ZsYWdzLAorCQkJCQlOVUxMLCBOVUxMLCBwZ29mZiwgTlVMTCk7CisJCWlmICh2bWEpCisJCQlnb3RvIG91dDsKKwl9CiAKIAkvKgogCSAqIERldGVybWluZSB0aGUgb2JqZWN0IGJlaW5nIG1hcHBlZCBhbmQgY2FsbCB0aGUgYXBwcm9wcmlhdGUKQEAgLTEyMjQsMTAgKzEyMjUsMTQgQEAKIAltbS0+dG90YWxfdm0gKz0gbGVuID4+IFBBR0VfU0hJRlQ7CiAJdm1fc3RhdF9hY2NvdW50KG1tLCB2bV9mbGFncywgZmlsZSwgbGVuID4+IFBBR0VfU0hJRlQpOwogCWlmICh2bV9mbGFncyAmIFZNX0xPQ0tFRCkgewotCQltbS0+bG9ja2VkX3ZtICs9IGxlbiA+PiBQQUdFX1NISUZUOwotCQltYWtlX3BhZ2VzX3ByZXNlbnQoYWRkciwgYWRkciArIGxlbik7Ci0JfQotCWlmICgoZmxhZ3MgJiBNQVBfUE9QVUxBVEUpICYmICEoZmxhZ3MgJiBNQVBfTk9OQkxPQ0spKQorCQkvKgorCQkgKiBtYWtlcyBwYWdlcyBwcmVzZW50OyBkb3duZ3JhZGVzLCBkcm9wcywgcmVhY3F1aXJlcyBtbWFwX3NlbQorCQkgKi8KKwkJbG9uZyBucl9wYWdlcyA9IG1sb2NrX3ZtYV9wYWdlc19yYW5nZSh2bWEsIGFkZHIsIGFkZHIgKyBsZW4pOworCQlpZiAobnJfcGFnZXMgPCAwKQorCQkJcmV0dXJuIG5yX3BhZ2VzOwkvKiB2bWEgZ29uZSEgKi8KKwkJbW0tPmxvY2tlZF92bSArPSAobGVuID4+IFBBR0VfU0hJRlQpIC0gbnJfcGFnZXM7CisJfSBlbHNlIGlmICgoZmxhZ3MgJiBNQVBfUE9QVUxBVEUpICYmICEoZmxhZ3MgJiBNQVBfTk9OQkxPQ0spKQogCQltYWtlX3BhZ2VzX3ByZXNlbnQoYWRkciwgYWRkciArIGxlbik7CiAJcmV0dXJuIGFkZHI7CiAKQEAgLTE1ODYsNyArMTU5MSw3IEBACiAgKiB2bWEgaXMgdGhlIGxhc3Qgb25lIHdpdGggYWRkcmVzcyA+IHZtYS0+dm1fZW5kLiAgSGF2ZSB0byBleHRlbmQgdm1hLgogICovCiAjaWZuZGVmIENPTkZJR19JQTY0Ci1zdGF0aWMgaW5saW5lCitzdGF0aWMKICNlbmRpZgogaW50IGV4cGFuZF91cHdhcmRzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MpCiB7CkBAIC0xNjM2LDcgKzE2NDEsNyBAQAogLyoKICAqIHZtYSBpcyB0aGUgZmlyc3Qgb25lIHdpdGggYWRkcmVzcyA8IHZtYS0+dm1fc3RhcnQuICBIYXZlIHRvIGV4dGVuZCB2bWEuCiAgKi8KLXN0YXRpYyBpbmxpbmUgaW50IGV4cGFuZF9kb3dud2FyZHMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCitzdGF0aWMgaW50IGV4cGFuZF9kb3dud2FyZHMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCiAJCQkJICAgdW5zaWduZWQgbG9uZyBhZGRyZXNzKQogewogCWludCBlcnJvcjsKQEAgLTE2OTgsMTAgKzE3MDMsMTIgQEAKIAl2bWEgPSBmaW5kX3ZtYV9wcmV2KG1tLCBhZGRyLCAmcHJldik7CiAJaWYgKHZtYSAmJiAodm1hLT52bV9zdGFydCA8PSBhZGRyKSkKIAkJcmV0dXJuIHZtYTsKLQlpZiAoIXByZXYgfHwgZXhwYW5kX3N0YWNrKHByZXYsIGFkZHIpKQorCWlmIChleHBhbmRfc3RhY2socHJldiwgYWRkcikpCiAJCXJldHVybiBOVUxMOwotCWlmIChwcmV2LT52bV9mbGFncyAmIFZNX0xPQ0tFRCkKLQkJbWFrZV9wYWdlc19wcmVzZW50KGFkZHIsIHByZXYtPnZtX2VuZCk7CisJaWYgKHByZXYtPnZtX2ZsYWdzICYgVk1fTE9DS0VEKSB7CisJCWlmIChtbG9ja192bWFfcGFnZXNfcmFuZ2UocHJldiwgYWRkciwgcHJldi0+dm1fZW5kKSA8IDApCisJCQlyZXR1cm4gTlVMTDsJLyogdm1hIGdvbmUhICovCisJfQogCXJldHVybiBwcmV2OwogfQogI2Vsc2UKQEAgLTE3MjcsOCArMTczNCwxMCBAQAogCXN0YXJ0ID0gdm1hLT52bV9zdGFydDsKIAlpZiAoZXhwYW5kX3N0YWNrKHZtYSwgYWRkcikpCiAJCXJldHVybiBOVUxMOwotCWlmICh2bWEtPnZtX2ZsYWdzICYgVk1fTE9DS0VEKQotCQltYWtlX3BhZ2VzX3ByZXNlbnQoYWRkciwgc3RhcnQpOworCWlmICh2bWEtPnZtX2ZsYWdzICYgVk1fTE9DS0VEKSB7CisJCWlmIChtbG9ja192bWFfcGFnZXNfcmFuZ2Uodm1hLCBhZGRyLCBzdGFydCkgPCAwKQorCQkJcmV0dXJuIE5VTEw7CS8qIHZtYSBnb25lISAqLworCX0KIAlyZXR1cm4gdm1hOwogfQogI2VuZGlmCkBAIC0xNzQ3LDggKzE3NTYsNiBAQAogCQlsb25nIG5ycGFnZXMgPSB2bWFfcGFnZXModm1hKTsKIAogCQltbS0+dG90YWxfdm0gLT0gbnJwYWdlczsKLQkJaWYgKHZtYS0+dm1fZmxhZ3MgJiBWTV9MT0NLRUQpCi0JCQltbS0+bG9ja2VkX3ZtIC09IG5ycGFnZXM7CiAJCXZtX3N0YXRfYWNjb3VudChtbSwgdm1hLT52bV9mbGFncywgdm1hLT52bV9maWxlLCAtbnJwYWdlcyk7CiAJCXZtYSA9IHJlbW92ZV92bWEodm1hKTsKIAl9IHdoaWxlICh2bWEpOwpAQCAtMTkxNCw2ICsxOTIxLDIwIEBACiAJdm1hID0gcHJldj8gcHJldi0+dm1fbmV4dDogbW0tPm1tYXA7CiAKIAkvKgorCSAqIHVubG9jayBhbnkgbWxvY2soKWVkIHJhbmdlcyBiZWZvcmUgZGV0YWNoaW5nIHZtYXMKKwkgKi8KKwlpZiAobW0tPmxvY2tlZF92bSkgeworCQlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnRtcCA9IHZtYTsKKwkJd2hpbGUgKHRtcCAmJiB0bXAtPnZtX3N0YXJ0IDwgZW5kKSB7CisJCQlpZiAodG1wLT52bV9mbGFncyAmIFZNX0xPQ0tFRCkgeworCQkJCW1tLT5sb2NrZWRfdm0gLT0gdm1hX3BhZ2VzKHRtcCk7CisJCQkJbXVubG9ja192bWFfcGFnZXNfYWxsKHRtcCk7CisJCQl9CisJCQl0bXAgPSB0bXAtPnZtX25leHQ7CisJCX0KKwl9CisKKwkvKgogCSAqIFJlbW92ZSB0aGUgdm1hJ3MsIGFuZCB1bm1hcCB0aGUgYWN0dWFsIHBhZ2VzCiAJICovCiAJZGV0YWNoX3ZtYXNfdG9fYmVfdW5tYXBwZWQobW0sIHZtYSwgcHJldiwgZW5kKTsKQEAgLTIwMjUsOCArMjA0Niw5IEBACiAJCXJldHVybiAtRU5PTUVNOwogCiAJLyogQ2FuIHdlIGp1c3QgZXhwYW5kIGFuIG9sZCBwcml2YXRlIGFub255bW91cyBtYXBwaW5nPyAqLwotCWlmICh2bWFfbWVyZ2UobW0sIHByZXYsIGFkZHIsIGFkZHIgKyBsZW4sIGZsYWdzLAotCQkJCQlOVUxMLCBOVUxMLCBwZ29mZiwgTlVMTCkpCisJdm1hID0gdm1hX21lcmdlKG1tLCBwcmV2LCBhZGRyLCBhZGRyICsgbGVuLCBmbGFncywKKwkJCQkJTlVMTCwgTlVMTCwgcGdvZmYsIE5VTEwpOworCWlmICh2bWEpCiAJCWdvdG8gb3V0OwogCiAJLyoKQEAgLTIwNDgsOCArMjA3MCw4IEBACiBvdXQ6CiAJbW0tPnRvdGFsX3ZtICs9IGxlbiA+PiBQQUdFX1NISUZUOwogCWlmIChmbGFncyAmIFZNX0xPQ0tFRCkgewotCQltbS0+bG9ja2VkX3ZtICs9IGxlbiA+PiBQQUdFX1NISUZUOwotCQltYWtlX3BhZ2VzX3ByZXNlbnQoYWRkciwgYWRkciArIGxlbik7CisJCWlmICghbWxvY2tfdm1hX3BhZ2VzX3JhbmdlKHZtYSwgYWRkciwgYWRkciArIGxlbikpCisJCQltbS0+bG9ja2VkX3ZtICs9IChsZW4gPj4gUEFHRV9TSElGVCk7CiAJfQogCXJldHVybiBhZGRyOwogfQpAQCAtMjA2MCw3ICsyMDgyLDcgQEAKIHZvaWQgZXhpdF9tbWFwKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQogewogCXN0cnVjdCBtbXVfZ2F0aGVyICp0bGI7Ci0Jc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEgPSBtbS0+bW1hcDsKKwlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTsKIAl1bnNpZ25lZCBsb25nIG5yX2FjY291bnRlZCA9IDA7CiAJdW5zaWduZWQgbG9uZyBlbmQ7CiAKQEAgLTIwNjgsNiArMjA5MCwxNSBAQAogCWFyY2hfZXhpdF9tbWFwKG1tKTsKIAltbXVfbm90aWZpZXJfcmVsZWFzZShtbSk7CiAKKwlpZiAobW0tPmxvY2tlZF92bSkgeworCQl2bWEgPSBtbS0+bW1hcDsKKwkJd2hpbGUgKHZtYSkgeworCQkJaWYgKHZtYS0+dm1fZmxhZ3MgJiBWTV9MT0NLRUQpCisJCQkJbXVubG9ja192bWFfcGFnZXNfYWxsKHZtYSk7CisJCQl2bWEgPSB2bWEtPnZtX25leHQ7CisJCX0KKwl9CisJdm1hID0gbW0tPm1tYXA7CiAJbHJ1X2FkZF9kcmFpbigpOwogCWZsdXNoX2NhY2hlX21tKG1tKTsKIAl0bGIgPSB0bGJfZ2F0aGVyX21tdShtbSwgMSk7CmRpZmYgLS1naXQgYS9tbS9tcmVtYXAuYyBiL21tL21yZW1hcC5jCmluZGV4IDFhNzc0MzkuLjU4YTI5MDggMTAwNjQ0Ci0tLSBhL21tL21yZW1hcC5jCisrKyBiL21tL21yZW1hcC5jCkBAIC0yNCw2ICsyNCw4IEBACiAjaW5jbHVkZSA8YXNtL2NhY2hlZmx1c2guaD4KICNpbmNsdWRlIDxhc20vdGxiZmx1c2guaD4KIAorI2luY2x1ZGUgImludGVybmFsLmgiCisKIHN0YXRpYyBwbWRfdCAqZ2V0X29sZF9wbWQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcikKIHsKIAlwZ2RfdCAqcGdkOwpAQCAtMjM4LDggKzI0MCw4IEBACiAJaWYgKHZtX2ZsYWdzICYgVk1fTE9DS0VEKSB7CiAJCW1tLT5sb2NrZWRfdm0gKz0gbmV3X2xlbiA+PiBQQUdFX1NISUZUOwogCQlpZiAobmV3X2xlbiA+IG9sZF9sZW4pCi0JCQltYWtlX3BhZ2VzX3ByZXNlbnQobmV3X2FkZHIgKyBvbGRfbGVuLAotCQkJCQkgICBuZXdfYWRkciArIG5ld19sZW4pOworCQkJbWxvY2tfdm1hX3BhZ2VzX3JhbmdlKG5ld192bWEsIG5ld19hZGRyICsgb2xkX2xlbiwKKwkJCQkJCSAgICAgICBuZXdfYWRkciArIG5ld19sZW4pOwogCX0KIAogCXJldHVybiBuZXdfYWRkcjsKQEAgLTM3OSw3ICszODEsNyBAQAogCQkJdm1fc3RhdF9hY2NvdW50KG1tLCB2bWEtPnZtX2ZsYWdzLCB2bWEtPnZtX2ZpbGUsIHBhZ2VzKTsKIAkJCWlmICh2bWEtPnZtX2ZsYWdzICYgVk1fTE9DS0VEKSB7CiAJCQkJbW0tPmxvY2tlZF92bSArPSBwYWdlczsKLQkJCQltYWtlX3BhZ2VzX3ByZXNlbnQoYWRkciArIG9sZF9sZW4sCisJCQkJbWxvY2tfdm1hX3BhZ2VzX3JhbmdlKHZtYSwgYWRkciArIG9sZF9sZW4sCiAJCQkJCQkgICBhZGRyICsgbmV3X2xlbik7CiAJCQl9CiAJCQlyZXQgPSBhZGRyOwpkaWZmIC0tZ2l0IGEvbW0vbm9tbXUuYyBiL21tL25vbW11LmMKaW5kZXggZWQ3NWJjOS4uMjY5NmIyNCAxMDA2NDQKLS0tIGEvbW0vbm9tbXUuYworKysgYi9tbS9ub21tdS5jCkBAIC0zNCw2ICszNCw4IEBACiAjaW5jbHVkZSA8YXNtL3RsYi5oPgogI2luY2x1ZGUgPGFzbS90bGJmbHVzaC5oPgogCisjaW5jbHVkZSAiaW50ZXJuYWwuaCIKKwogdm9pZCAqaGlnaF9tZW1vcnk7CiBzdHJ1Y3QgcGFnZSAqbWVtX21hcDsKIHVuc2lnbmVkIGxvbmcgbWF4X21hcG5yOwpAQCAtMTI4LDIwICsxMzAsMTYgQEAKIAlyZXR1cm4gUEFHRV9TSVpFIDw8IGNvbXBvdW5kX29yZGVyKHBhZ2UpOwogfQogCi0vKgotICogZ2V0IGEgbGlzdCBvZiBwYWdlcyBpbiBhbiBhZGRyZXNzIHJhbmdlIGJlbG9uZ2luZyB0byB0aGUgc3BlY2lmaWVkIHByb2Nlc3MKLSAqIGFuZCBpbmRpY2F0ZSB0aGUgVk1BIHRoYXQgY292ZXJzIGVhY2ggcGFnZQotICogLSB0aGlzIGlzIHBvdGVudGlhbGx5IGRvZGd5IGFzIHdlIG1heSBlbmQgaW5jcmVtZW50aW5nIHRoZSBwYWdlIGNvdW50IG9mIGEKLSAqICAgc2xhYiBwYWdlIG9yIGEgc2Vjb25kYXJ5IHBhZ2UgZnJvbSBhIGNvbXBvdW5kIHBhZ2UKLSAqIC0gZG9uJ3QgcGVybWl0IGFjY2VzcyB0byBWTUFzIHRoYXQgZG9uJ3Qgc3VwcG9ydCBpdCwgc3VjaCBhcyBJL08gbWFwcGluZ3MKLSAqLwotaW50IGdldF91c2VyX3BhZ2VzKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSwKLQl1bnNpZ25lZCBsb25nIHN0YXJ0LCBpbnQgbGVuLCBpbnQgd3JpdGUsIGludCBmb3JjZSwKLQlzdHJ1Y3QgcGFnZSAqKnBhZ2VzLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKip2bWFzKQoraW50IF9fZ2V0X3VzZXJfcGFnZXMoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAorCQkgICAgIHVuc2lnbmVkIGxvbmcgc3RhcnQsIGludCBsZW4sIGludCBmbGFncywKKwkJc3RydWN0IHBhZ2UgKipwYWdlcywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICoqdm1hcykKIHsKIAlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTsKIAl1bnNpZ25lZCBsb25nIHZtX2ZsYWdzOwogCWludCBpOworCWludCB3cml0ZSA9ICEhKGZsYWdzICYgR1VQX0ZMQUdTX1dSSVRFKTsKKwlpbnQgZm9yY2UgPSAhIShmbGFncyAmIEdVUF9GTEFHU19GT1JDRSk7CisJaW50IGlnbm9yZSA9ICEhKGZsYWdzICYgR1VQX0ZMQUdTX0lHTk9SRV9WTUFfUEVSTUlTU0lPTlMpOwogCiAJLyogY2FsY3VsYXRlIHJlcXVpcmVkIHJlYWQgb3Igd3JpdGUgcGVybWlzc2lvbnMuCiAJICogLSBpZiAnZm9yY2UnIGlzIHNldCwgd2Ugb25seSByZXF1aXJlIHRoZSAiTUFZIiBmbGFncy4KQEAgLTE1Niw3ICsxNTQsNyBAQAogCiAJCS8qIHByb3RlY3Qgd2hhdCB3ZSBjYW4sIGluY2x1ZGluZyBjaGFyZGV2cyAqLwogCQlpZiAodm1hLT52bV9mbGFncyAmIChWTV9JTyB8IFZNX1BGTk1BUCkgfHwKLQkJICAgICEodm1fZmxhZ3MgJiB2bWEtPnZtX2ZsYWdzKSkKKwkJICAgICghaWdub3JlICYmICEodm1fZmxhZ3MgJiB2bWEtPnZtX2ZsYWdzKSkpCiAJCQlnb3RvIGZpbmlzaF9vcl9mYXVsdDsKIAogCQlpZiAocGFnZXMpIHsKQEAgLTE3NCw2ICsxNzIsMzAgQEAKIGZpbmlzaF9vcl9mYXVsdDoKIAlyZXR1cm4gaSA/IDogLUVGQVVMVDsKIH0KKworCisvKgorICogZ2V0IGEgbGlzdCBvZiBwYWdlcyBpbiBhbiBhZGRyZXNzIHJhbmdlIGJlbG9uZ2luZyB0byB0aGUgc3BlY2lmaWVkIHByb2Nlc3MKKyAqIGFuZCBpbmRpY2F0ZSB0aGUgVk1BIHRoYXQgY292ZXJzIGVhY2ggcGFnZQorICogLSB0aGlzIGlzIHBvdGVudGlhbGx5IGRvZGd5IGFzIHdlIG1heSBlbmQgaW5jcmVtZW50aW5nIHRoZSBwYWdlIGNvdW50IG9mIGEKKyAqICAgc2xhYiBwYWdlIG9yIGEgc2Vjb25kYXJ5IHBhZ2UgZnJvbSBhIGNvbXBvdW5kIHBhZ2UKKyAqIC0gZG9uJ3QgcGVybWl0IGFjY2VzcyB0byBWTUFzIHRoYXQgZG9uJ3Qgc3VwcG9ydCBpdCwgc3VjaCBhcyBJL08gbWFwcGluZ3MKKyAqLworaW50IGdldF91c2VyX3BhZ2VzKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSwKKwl1bnNpZ25lZCBsb25nIHN0YXJ0LCBpbnQgbGVuLCBpbnQgd3JpdGUsIGludCBmb3JjZSwKKwlzdHJ1Y3QgcGFnZSAqKnBhZ2VzLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKip2bWFzKQoreworCWludCBmbGFncyA9IDA7CisKKwlpZiAod3JpdGUpCisJCWZsYWdzIHw9IEdVUF9GTEFHU19XUklURTsKKwlpZiAoZm9yY2UpCisJCWZsYWdzIHw9IEdVUF9GTEFHU19GT1JDRTsKKworCXJldHVybiBfX2dldF91c2VyX3BhZ2VzKHRzaywgbW0sCisJCQkJc3RhcnQsIGxlbiwgZmxhZ3MsCisJCQkJcGFnZXMsIHZtYXMpOworfQogRVhQT1JUX1NZTUJPTChnZXRfdXNlcl9wYWdlcyk7CiAKIERFRklORV9SV0xPQ0sodm1saXN0X2xvY2spOwpkaWZmIC0tZ2l0IGEvbW0vcGFnZS13cml0ZWJhY2suYyBiL21tL3BhZ2Utd3JpdGViYWNrLmMKaW5kZXggMjRkZThiNi4uMjk3MGUzNSAxMDA2NDQKLS0tIGEvbW0vcGFnZS13cml0ZWJhY2suYworKysgYi9tbS9wYWdlLXdyaXRlYmFjay5jCkBAIC03LDcgKzcsNyBAQAogICogQ29udGFpbnMgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gd3JpdGluZyBiYWNrIGRpcnR5IHBhZ2VzIGF0IHRoZQogICogYWRkcmVzc19zcGFjZSBsZXZlbC4KICAqCi0gKiAxMEFwcjIwMDIJYWtwbUB6aXAuY29tLmF1CisgKiAxMEFwcjIwMDIJQW5kcmV3IE1vcnRvbgogICoJCUluaXRpYWwgdmVyc2lvbgogICovCiAKQEAgLTMyOSw5ICszMjksNyBAQAogCQlzdHJ1Y3Qgem9uZSAqeiA9CiAJCQkmTk9ERV9EQVRBKG5vZGUpLT5ub2RlX3pvbmVzW1pPTkVfSElHSE1FTV07CiAKLQkJeCArPSB6b25lX3BhZ2Vfc3RhdGUoeiwgTlJfRlJFRV9QQUdFUykKLQkJCSsgem9uZV9wYWdlX3N0YXRlKHosIE5SX0lOQUNUSVZFKQotCQkJKyB6b25lX3BhZ2Vfc3RhdGUoeiwgTlJfQUNUSVZFKTsKKwkJeCArPSB6b25lX3BhZ2Vfc3RhdGUoeiwgTlJfRlJFRV9QQUdFUykgKyB6b25lX2xydV9wYWdlcyh6KTsKIAl9CiAJLyoKIAkgKiBNYWtlIHN1cmUgdGhhdCB0aGUgbnVtYmVyIG9mIGhpZ2htZW0gcGFnZXMgaXMgbmV2ZXIgbGFyZ2VyCkBAIC0zNTUsOSArMzUzLDcgQEAKIHsKIAl1bnNpZ25lZCBsb25nIHg7CiAKLQl4ID0gZ2xvYmFsX3BhZ2Vfc3RhdGUoTlJfRlJFRV9QQUdFUykKLQkJKyBnbG9iYWxfcGFnZV9zdGF0ZShOUl9JTkFDVElWRSkKLQkJKyBnbG9iYWxfcGFnZV9zdGF0ZShOUl9BQ1RJVkUpOworCXggPSBnbG9iYWxfcGFnZV9zdGF0ZShOUl9GUkVFX1BBR0VTKSArIGdsb2JhbF9scnVfcGFnZXMoKTsKIAogCWlmICghdm1faGlnaG1lbV9pc19kaXJ0eWFibGUpCiAJCXggLT0gaGlnaG1lbV9kaXJ0eWFibGVfbWVtb3J5KHgpOwpAQCAtODc2LDYgKzg3Miw3IEBACiAJcGdvZmZfdCBlbmQ7CQkvKiBJbmNsdXNpdmUgKi8KIAlpbnQgc2Nhbm5lZCA9IDA7CiAJaW50IHJhbmdlX3dob2xlID0gMDsKKwlsb25nIG5yX3RvX3dyaXRlID0gd2JjLT5ucl90b193cml0ZTsKIAogCWlmICh3YmMtPm5vbmJsb2NraW5nICYmIGJkaV93cml0ZV9jb25nZXN0ZWQoYmRpKSkgewogCQl3YmMtPmVuY291bnRlcmVkX2Nvbmdlc3Rpb24gPSAxOwpAQCAtOTM5LDcgKzkzNiw3IEBACiAJCQkJdW5sb2NrX3BhZ2UocGFnZSk7CiAJCQkJcmV0ID0gMDsKIAkJCX0KLQkJCWlmIChyZXQgfHwgKC0tKHdiYy0+bnJfdG9fd3JpdGUpIDw9IDApKQorCQkJaWYgKHJldCB8fCAoLS1ucl90b193cml0ZSA8PSAwKSkKIAkJCQlkb25lID0gMTsKIAkJCWlmICh3YmMtPm5vbmJsb2NraW5nICYmIGJkaV93cml0ZV9jb25nZXN0ZWQoYmRpKSkgewogCQkJCXdiYy0+ZW5jb3VudGVyZWRfY29uZ2VzdGlvbiA9IDE7CkBAIC05NTgsMTEgKzk1NSwxMiBAQAogCQlpbmRleCA9IDA7CiAJCWdvdG8gcmV0cnk7CiAJfQotCWlmICh3YmMtPnJhbmdlX2N5Y2xpYyB8fCAocmFuZ2Vfd2hvbGUgJiYgd2JjLT5ucl90b193cml0ZSA+IDApKQotCQltYXBwaW5nLT53cml0ZWJhY2tfaW5kZXggPSBpbmRleDsKKwlpZiAoIXdiYy0+bm9fbnJ3cml0ZV9pbmRleF91cGRhdGUpIHsKKwkJaWYgKHdiYy0+cmFuZ2VfY3ljbGljIHx8IChyYW5nZV93aG9sZSAmJiBucl90b193cml0ZSA+IDApKQorCQkJbWFwcGluZy0+d3JpdGViYWNrX2luZGV4ID0gaW5kZXg7CisJCXdiYy0+bnJfdG9fd3JpdGUgPSBucl90b193cml0ZTsKKwl9CiAKLQlpZiAod2JjLT5yYW5nZV9jb250KQotCQl3YmMtPnJhbmdlX3N0YXJ0ID0gaW5kZXggPDwgUEFHRV9DQUNIRV9TSElGVDsKIAlyZXR1cm4gcmV0OwogfQogRVhQT1JUX1NZTUJPTCh3cml0ZV9jYWNoZV9wYWdlcyk7CmRpZmYgLS1naXQgYS9tbS9wYWdlX2FsbG9jLmMgYi9tbS9wYWdlX2FsbG9jLmMKaW5kZXggMjdiODY4MS4uZDBhMjQwZiAxMDA2NDQKLS0tIGEvbW0vcGFnZV9hbGxvYy5jCisrKyBiL21tL3BhZ2VfYWxsb2MuYwpAQCAtNDQsNyArNDQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2JhY2tpbmctZGV2Lmg+CiAjaW5jbHVkZSA8bGludXgvZmF1bHQtaW5qZWN0Lmg+CiAjaW5jbHVkZSA8bGludXgvcGFnZS1pc29sYXRpb24uaD4KLSNpbmNsdWRlIDxsaW51eC9tZW1jb250cm9sLmg+CisjaW5jbHVkZSA8bGludXgvcGFnZV9jZ3JvdXAuaD4KICNpbmNsdWRlIDxsaW51eC9kZWJ1Z29iamVjdHMuaD4KIAogI2luY2x1ZGUgPGFzbS90bGJmbHVzaC5oPgpAQCAtMjIzLDE3ICsyMjMsMTIgQEAKIAogc3RhdGljIHZvaWQgYmFkX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpCiB7Ci0Jdm9pZCAqcGMgPSBwYWdlX2dldF9wYWdlX2Nncm91cChwYWdlKTsKLQogCXByaW50ayhLRVJOX0VNRVJHICJCYWQgcGFnZSBzdGF0ZSBpbiBwcm9jZXNzICclcydcbiIgS0VSTl9FTUVSRwogCQkicGFnZTolcCBmbGFnczoweCUwKmx4IG1hcHBpbmc6JXAgbWFwY291bnQ6JWQgY291bnQ6JWRcbiIsCiAJCWN1cnJlbnQtPmNvbW0sIHBhZ2UsIChpbnQpKDIqc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKSwKIAkJKHVuc2lnbmVkIGxvbmcpcGFnZS0+ZmxhZ3MsIHBhZ2UtPm1hcHBpbmcsCiAJCXBhZ2VfbWFwY291bnQocGFnZSksIHBhZ2VfY291bnQocGFnZSkpOwotCWlmIChwYykgewotCQlwcmludGsoS0VSTl9FTUVSRyAiY2dyb3VwOiVwXG4iLCBwYyk7Ci0JCXBhZ2VfcmVzZXRfYmFkX2Nncm91cChwYWdlKTsKLQl9CisKIAlwcmludGsoS0VSTl9FTUVSRyAiVHJ5aW5nIHRvIGZpeCBpdCB1cCwgYnV0IGEgcmVib290IGlzIG5lZWRlZFxuIgogCQlLRVJOX0VNRVJHICJCYWNrdHJhY2U6XG4iKTsKIAlkdW1wX3N0YWNrKCk7CkBAIC00NTQsMTQgKzQ0OSwxNiBAQAogCiBzdGF0aWMgaW5saW5lIGludCBmcmVlX3BhZ2VzX2NoZWNrKHN0cnVjdCBwYWdlICpwYWdlKQogeworCWZyZWVfcGFnZV9tbG9jayhwYWdlKTsKIAlpZiAodW5saWtlbHkocGFnZV9tYXBjb3VudChwYWdlKSB8CiAJCShwYWdlLT5tYXBwaW5nICE9IE5VTEwpICB8Ci0JCShwYWdlX2dldF9wYWdlX2Nncm91cChwYWdlKSAhPSBOVUxMKSB8CiAJCShwYWdlX2NvdW50KHBhZ2UpICE9IDApICB8CiAJCShwYWdlLT5mbGFncyAmIFBBR0VfRkxBR1NfQ0hFQ0tfQVRfRlJFRSkpKQogCQliYWRfcGFnZShwYWdlKTsKIAlpZiAoUGFnZURpcnR5KHBhZ2UpKQogCQlfX0NsZWFyUGFnZURpcnR5KHBhZ2UpOworCWlmIChQYWdlU3dhcEJhY2tlZChwYWdlKSkKKwkJX19DbGVhclBhZ2VTd2FwQmFja2VkKHBhZ2UpOwogCS8qCiAJICogRm9yIG5vdywgd2UgcmVwb3J0IGlmIFBHX3Jlc2VydmVkIHdhcyBmb3VuZCBzZXQsIGJ1dCBkbyBub3QKIAkgKiBjbGVhciBpdCwgYW5kIGRvIG5vdCBmcmVlIHRoZSBwYWdlLiAgQnV0IHdlIHNoYWxsIHNvb24gbmVlZApAQCAtNjAwLDcgKzU5Nyw2IEBACiB7CiAJaWYgKHVubGlrZWx5KHBhZ2VfbWFwY291bnQocGFnZSkgfAogCQkocGFnZS0+bWFwcGluZyAhPSBOVUxMKSAgfAotCQkocGFnZV9nZXRfcGFnZV9jZ3JvdXAocGFnZSkgIT0gTlVMTCkgfAogCQkocGFnZV9jb3VudChwYWdlKSAhPSAwKSAgfAogCQkocGFnZS0+ZmxhZ3MgJiBQQUdFX0ZMQUdTX0NIRUNLX0FUX1BSRVApKSkKIAkJYmFkX3BhZ2UocGFnZSk7CkBAIC02MTQsNyArNjEwLDExIEBACiAKIAlwYWdlLT5mbGFncyAmPSB+KDEgPDwgUEdfdXB0b2RhdGUgfCAxIDw8IFBHX2Vycm9yIHwgMSA8PCBQR19yZWNsYWltIHwKIAkJCTEgPDwgUEdfcmVmZXJlbmNlZCB8IDEgPDwgUEdfYXJjaF8xIHwKLQkJCTEgPDwgUEdfb3duZXJfcHJpdl8xIHwgMSA8PCBQR19tYXBwZWR0b2Rpc2spOworCQkJMSA8PCBQR19vd25lcl9wcml2XzEgfCAxIDw8IFBHX21hcHBlZHRvZGlzaworI2lmZGVmIENPTkZJR19VTkVWSUNUQUJMRV9MUlUKKwkJCXwgMSA8PCBQR19tbG9ja2VkCisjZW5kaWYKKwkJCSk7CiAJc2V0X3BhZ2VfcHJpdmF0ZShwYWdlLCAwKTsKIAlzZXRfcGFnZV9yZWZjb3VudGVkKHBhZ2UpOwogCkBAIC0xODYyLDEwICsxODYyLDIxIEBACiAJCX0KIAl9CiAKLQlwcmludGsoIkFjdGl2ZTolbHUgaW5hY3RpdmU6JWx1IGRpcnR5OiVsdSB3cml0ZWJhY2s6JWx1IHVuc3RhYmxlOiVsdVxuIgorCXByaW50aygiQWN0aXZlX2Fub246JWx1IGFjdGl2ZV9maWxlOiVsdSBpbmFjdGl2ZV9hbm9uOiVsdVxuIgorCQkiIGluYWN0aXZlX2ZpbGU6JWx1IgorLy9UT0RPOiAgY2hlY2svYWRqdXN0IGxpbmUgbGVuZ3RocworI2lmZGVmIENPTkZJR19VTkVWSUNUQUJMRV9MUlUKKwkJIiB1bmV2aWN0YWJsZTolbHUiCisjZW5kaWYKKwkJIiBkaXJ0eTolbHUgd3JpdGViYWNrOiVsdSB1bnN0YWJsZTolbHVcbiIKIAkJIiBmcmVlOiVsdSBzbGFiOiVsdSBtYXBwZWQ6JWx1IHBhZ2V0YWJsZXM6JWx1IGJvdW5jZTolbHVcbiIsCi0JCWdsb2JhbF9wYWdlX3N0YXRlKE5SX0FDVElWRSksCi0JCWdsb2JhbF9wYWdlX3N0YXRlKE5SX0lOQUNUSVZFKSwKKwkJZ2xvYmFsX3BhZ2Vfc3RhdGUoTlJfQUNUSVZFX0FOT04pLAorCQlnbG9iYWxfcGFnZV9zdGF0ZShOUl9BQ1RJVkVfRklMRSksCisJCWdsb2JhbF9wYWdlX3N0YXRlKE5SX0lOQUNUSVZFX0FOT04pLAorCQlnbG9iYWxfcGFnZV9zdGF0ZShOUl9JTkFDVElWRV9GSUxFKSwKKyNpZmRlZiBDT05GSUdfVU5FVklDVEFCTEVfTFJVCisJCWdsb2JhbF9wYWdlX3N0YXRlKE5SX1VORVZJQ1RBQkxFKSwKKyNlbmRpZgogCQlnbG9iYWxfcGFnZV9zdGF0ZShOUl9GSUxFX0RJUlRZKSwKIAkJZ2xvYmFsX3BhZ2Vfc3RhdGUoTlJfV1JJVEVCQUNLKSwKIAkJZ2xvYmFsX3BhZ2Vfc3RhdGUoTlJfVU5TVEFCTEVfTkZTKSwKQEAgLTE4ODgsOCArMTg5OSwxMyBAQAogCQkJIiBtaW46JWx1a0IiCiAJCQkiIGxvdzolbHVrQiIKIAkJCSIgaGlnaDolbHVrQiIKLQkJCSIgYWN0aXZlOiVsdWtCIgotCQkJIiBpbmFjdGl2ZTolbHVrQiIKKwkJCSIgYWN0aXZlX2Fub246JWx1a0IiCisJCQkiIGluYWN0aXZlX2Fub246JWx1a0IiCisJCQkiIGFjdGl2ZV9maWxlOiVsdWtCIgorCQkJIiBpbmFjdGl2ZV9maWxlOiVsdWtCIgorI2lmZGVmIENPTkZJR19VTkVWSUNUQUJMRV9MUlUKKwkJCSIgdW5ldmljdGFibGU6JWx1a0IiCisjZW5kaWYKIAkJCSIgcHJlc2VudDolbHVrQiIKIAkJCSIgcGFnZXNfc2Nhbm5lZDolbHUiCiAJCQkiIGFsbF91bnJlY2xhaW1hYmxlPyAlcyIKQEAgLTE4OTksOCArMTkxNSwxMyBAQAogCQkJSyh6b25lLT5wYWdlc19taW4pLAogCQkJSyh6b25lLT5wYWdlc19sb3cpLAogCQkJSyh6b25lLT5wYWdlc19oaWdoKSwKLQkJCUsoem9uZV9wYWdlX3N0YXRlKHpvbmUsIE5SX0FDVElWRSkpLAotCQkJSyh6b25lX3BhZ2Vfc3RhdGUoem9uZSwgTlJfSU5BQ1RJVkUpKSwKKwkJCUsoem9uZV9wYWdlX3N0YXRlKHpvbmUsIE5SX0FDVElWRV9BTk9OKSksCisJCQlLKHpvbmVfcGFnZV9zdGF0ZSh6b25lLCBOUl9JTkFDVElWRV9BTk9OKSksCisJCQlLKHpvbmVfcGFnZV9zdGF0ZSh6b25lLCBOUl9BQ1RJVkVfRklMRSkpLAorCQkJSyh6b25lX3BhZ2Vfc3RhdGUoem9uZSwgTlJfSU5BQ1RJVkVfRklMRSkpLAorI2lmZGVmIENPTkZJR19VTkVWSUNUQUJMRV9MUlUKKwkJCUsoem9uZV9wYWdlX3N0YXRlKHpvbmUsIE5SX1VORVZJQ1RBQkxFKSksCisjZW5kaWYKIAkJCUsoem9uZS0+cHJlc2VudF9wYWdlcyksCiAJCQl6b25lLT5wYWdlc19zY2FubmVkLAogCQkJKHpvbmVfaXNfYWxsX3VucmVjbGFpbWFibGUoem9uZSkgPyAieWVzIiA6ICJubyIpCkBAIC0zNDEwLDEwICszNDMxLDEyIEBACiAJcGdkYXQtPm5yX3pvbmVzID0gMDsKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZwZ2RhdC0+a3N3YXBkX3dhaXQpOwogCXBnZGF0LT5rc3dhcGRfbWF4X29yZGVyID0gMDsKKwlwZ2RhdF9wYWdlX2Nncm91cF9pbml0KHBnZGF0KTsKIAkKIAlmb3IgKGogPSAwOyBqIDwgTUFYX05SX1pPTkVTOyBqKyspIHsKIAkJc3RydWN0IHpvbmUgKnpvbmUgPSBwZ2RhdC0+bm9kZV96b25lcyArIGo7CiAJCXVuc2lnbmVkIGxvbmcgc2l6ZSwgcmVhbHNpemUsIG1lbW1hcF9wYWdlczsKKwkJZW51bSBscnVfbGlzdCBsOwogCiAJCXNpemUgPSB6b25lX3NwYW5uZWRfcGFnZXNfaW5fbm9kZShuaWQsIGosIHpvbmVzX3NpemUpOwogCQlyZWFsc2l6ZSA9IHNpemUgLSB6b25lX2Fic2VudF9wYWdlc19pbl9ub2RlKG5pZCwgaiwKQEAgLTM0MjgsOCArMzQ1MSw4IEBACiAJCQlQQUdFX0FMSUdOKHNpemUgKiBzaXplb2Yoc3RydWN0IHBhZ2UpKSA+PiBQQUdFX1NISUZUOwogCQlpZiAocmVhbHNpemUgPj0gbWVtbWFwX3BhZ2VzKSB7CiAJCQlyZWFsc2l6ZSAtPSBtZW1tYXBfcGFnZXM7Ci0JCQltbWluaXRfZHByaW50ayhNTUlOSVRfVFJBQ0UsICJtZW1tYXBfaW5pdCIsCi0JCQkJIiVzIHpvbmU6ICVsdSBwYWdlcyB1c2VkIGZvciBtZW1tYXBcbiIsCisJCQlwcmludGsoS0VSTl9ERUJVRworCQkJCSIgICVzIHpvbmU6ICVsdSBwYWdlcyB1c2VkIGZvciBtZW1tYXBcbiIsCiAJCQkJem9uZV9uYW1lc1tqXSwgbWVtbWFwX3BhZ2VzKTsKIAkJfSBlbHNlCiAJCQlwcmludGsoS0VSTl9XQVJOSU5HCkBAIC0zNDM5LDggKzM0NjIsNyBAQAogCQkvKiBBY2NvdW50IGZvciByZXNlcnZlZCBwYWdlcyAqLwogCQlpZiAoaiA9PSAwICYmIHJlYWxzaXplID4gZG1hX3Jlc2VydmUpIHsKIAkJCXJlYWxzaXplIC09IGRtYV9yZXNlcnZlOwotCQkJbW1pbml0X2RwcmludGsoTU1JTklUX1RSQUNFLCAibWVtbWFwX2luaXQiLAotCQkJCQkiJXMgem9uZTogJWx1IHBhZ2VzIHJlc2VydmVkXG4iLAorCQkJcHJpbnRrKEtFUk5fREVCVUcgIiAgJXMgem9uZTogJWx1IHBhZ2VzIHJlc2VydmVkXG4iLAogCQkJCQl6b25lX25hbWVzWzBdLCBkbWFfcmVzZXJ2ZSk7CiAJCX0KIApAQCAtMzQ2NSwxMCArMzQ4NywxNCBAQAogCQl6b25lLT5wcmV2X3ByaW9yaXR5ID0gREVGX1BSSU9SSVRZOwogCiAJCXpvbmVfcGNwX2luaXQoem9uZSk7Ci0JCUlOSVRfTElTVF9IRUFEKCZ6b25lLT5hY3RpdmVfbGlzdCk7Ci0JCUlOSVRfTElTVF9IRUFEKCZ6b25lLT5pbmFjdGl2ZV9saXN0KTsKLQkJem9uZS0+bnJfc2Nhbl9hY3RpdmUgPSAwOwotCQl6b25lLT5ucl9zY2FuX2luYWN0aXZlID0gMDsKKwkJZm9yX2VhY2hfbHJ1KGwpIHsKKwkJCUlOSVRfTElTVF9IRUFEKCZ6b25lLT5scnVbbF0ubGlzdCk7CisJCQl6b25lLT5scnVbbF0ubnJfc2NhbiA9IDA7CisJCX0KKwkJem9uZS0+cmVjZW50X3JvdGF0ZWRbMF0gPSAwOworCQl6b25lLT5yZWNlbnRfcm90YXRlZFsxXSA9IDA7CisJCXpvbmUtPnJlY2VudF9zY2FubmVkWzBdID0gMDsKKwkJem9uZS0+cmVjZW50X3NjYW5uZWRbMV0gPSAwOwogCQl6YXBfem9uZV92bV9zdGF0cyh6b25lKTsKIAkJem9uZS0+ZmxhZ3MgPSAwOwogCQlpZiAoIXNpemUpCkBAIC0zOTUyLDcgKzM5NzgsNyBAQAogdm9pZCBfX2luaXQgZnJlZV9hcmVhX2luaXRfbm9kZXModW5zaWduZWQgbG9uZyAqbWF4X3pvbmVfcGZuKQogewogCXVuc2lnbmVkIGxvbmcgbmlkOwotCWVudW0gem9uZV90eXBlIGk7CisJaW50IGk7CiAKIAkvKiBTb3J0IGVhcmx5X25vZGVfbWFwIGFzIGluaXRpYWxpc2F0aW9uIGFzc3VtZXMgaXQgaXMgc29ydGVkICovCiAJc29ydF9ub2RlX21hcCgpOwpAQCAtNDIxMCw3ICs0MjM2LDcgQEAKIAlmb3JfZWFjaF96b25lKHpvbmUpIHsKIAkJdTY0IHRtcDsKIAotCQlzcGluX2xvY2tfaXJxc2F2ZSgmem9uZS0+bHJ1X2xvY2ssIGZsYWdzKTsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJnpvbmUtPmxvY2ssIGZsYWdzKTsKIAkJdG1wID0gKHU2NClwYWdlc19taW4gKiB6b25lLT5wcmVzZW50X3BhZ2VzOwogCQlkb19kaXYodG1wLCBsb3dtZW1fcGFnZXMpOwogCQlpZiAoaXNfaGlnaG1lbSh6b25lKSkgewpAQCAtNDI0MiwxMyArNDI2OCw1MyBAQAogCQl6b25lLT5wYWdlc19sb3cgICA9IHpvbmUtPnBhZ2VzX21pbiArICh0bXAgPj4gMik7CiAJCXpvbmUtPnBhZ2VzX2hpZ2ggID0gem9uZS0+cGFnZXNfbWluICsgKHRtcCA+PiAxKTsKIAkJc2V0dXBfem9uZV9taWdyYXRlX3Jlc2VydmUoem9uZSk7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnpvbmUtPmxydV9sb2NrLCBmbGFncyk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnpvbmUtPmxvY2ssIGZsYWdzKTsKIAl9CiAKIAkvKiB1cGRhdGUgdG90YWxyZXNlcnZlX3BhZ2VzICovCiAJY2FsY3VsYXRlX3RvdGFscmVzZXJ2ZV9wYWdlcygpOwogfQogCisvKioKKyAqIHNldHVwX3Blcl96b25lX2luYWN0aXZlX3JhdGlvIC0gY2FsbGVkIHdoZW4gbWluX2ZyZWVfa2J5dGVzIGNoYW5nZXMuCisgKgorICogVGhlIGluYWN0aXZlIGFub24gbGlzdCBzaG91bGQgYmUgc21hbGwgZW5vdWdoIHRoYXQgdGhlIFZNIG5ldmVyIGhhcyB0bworICogZG8gdG9vIG11Y2ggd29yaywgYnV0IGxhcmdlIGVub3VnaCB0aGF0IGVhY2ggaW5hY3RpdmUgcGFnZSBoYXMgYSBjaGFuY2UKKyAqIHRvIGJlIHJlZmVyZW5jZWQgYWdhaW4gYmVmb3JlIGl0IGlzIHN3YXBwZWQgb3V0LgorICoKKyAqIFRoZSBpbmFjdGl2ZV9hbm9uIHJhdGlvIGlzIHRoZSB0YXJnZXQgcmF0aW8gb2YgQUNUSVZFX0FOT04gdG8KKyAqIElOQUNUSVZFX0FOT04gcGFnZXMgb24gdGhpcyB6b25lJ3MgTFJVLCBtYWludGFpbmVkIGJ5IHRoZQorICogcGFnZW91dCBjb2RlLiBBIHpvbmUtPmluYWN0aXZlX3JhdGlvIG9mIDMgbWVhbnMgMzoxIG9yIDI1JSBvZgorICogdGhlIGFub255bW91cyBwYWdlcyBhcmUga2VwdCBvbiB0aGUgaW5hY3RpdmUgbGlzdC4KKyAqCisgKiB0b3RhbCAgICAgdGFyZ2V0ICAgIG1heAorICogbWVtb3J5ICAgIHJhdGlvICAgICBpbmFjdGl2ZSBhbm9uCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiAgIDEwTUIgICAgICAgMSAgICAgICAgIDVNQgorICogIDEwME1CICAgICAgIDEgICAgICAgIDUwTUIKKyAqICAgIDFHQiAgICAgICAzICAgICAgIDI1ME1CCisgKiAgIDEwR0IgICAgICAxMCAgICAgICAwLjlHQgorICogIDEwMEdCICAgICAgMzEgICAgICAgICAzR0IKKyAqICAgIDFUQiAgICAgMTAxICAgICAgICAxMEdCCisgKiAgIDEwVEIgICAgIDMyMCAgICAgICAgMzJHQgorICovCit2b2lkIHNldHVwX3Blcl96b25lX2luYWN0aXZlX3JhdGlvKHZvaWQpCit7CisJc3RydWN0IHpvbmUgKnpvbmU7CisKKwlmb3JfZWFjaF96b25lKHpvbmUpIHsKKwkJdW5zaWduZWQgaW50IGdiLCByYXRpbzsKKworCQkvKiBab25lIHNpemUgaW4gZ2lnYWJ5dGVzICovCisJCWdiID0gem9uZS0+cHJlc2VudF9wYWdlcyA+PiAoMzAgLSBQQUdFX1NISUZUKTsKKwkJcmF0aW8gPSBpbnRfc3FydCgxMCAqIGdiKTsKKwkJaWYgKCFyYXRpbykKKwkJCXJhdGlvID0gMTsKKworCQl6b25lLT5pbmFjdGl2ZV9yYXRpbyA9IHJhdGlvOworCX0KK30KKwogLyoKICAqIEluaXRpYWxpc2UgbWluX2ZyZWVfa2J5dGVzLgogICoKQEAgLTQyODYsNiArNDM1Miw3IEBACiAJCW1pbl9mcmVlX2tieXRlcyA9IDY1NTM2OwogCXNldHVwX3Blcl96b25lX3BhZ2VzX21pbigpOwogCXNldHVwX3Blcl96b25lX2xvd21lbV9yZXNlcnZlKCk7CisJc2V0dXBfcGVyX3pvbmVfaW5hY3RpdmVfcmF0aW8oKTsKIAlyZXR1cm4gMDsKIH0KIG1vZHVsZV9pbml0KGluaXRfcGVyX3pvbmVfcGFnZXNfbWluKQpkaWZmIC0tZ2l0IGEvbW0vcGFnZV9jZ3JvdXAuYyBiL21tL3BhZ2VfY2dyb3VwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWQ4NjU1MAotLS0gL2Rldi9udWxsCisrKyBiL21tL3BhZ2VfY2dyb3VwLmMKQEAgLTAsMCArMSwyMzcgQEAKKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L21tem9uZS5oPgorI2luY2x1ZGUgPGxpbnV4L2Jvb3RtZW0uaD4KKyNpbmNsdWRlIDxsaW51eC9iaXRfc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9wYWdlX2Nncm91cC5oPgorI2luY2x1ZGUgPGxpbnV4L2hhc2guaD4KKyNpbmNsdWRlIDxsaW51eC9tZW1vcnkuaD4KKworc3RhdGljIHZvaWQgX19tZW1pbml0CitfX2luaXRfcGFnZV9jZ3JvdXAoc3RydWN0IHBhZ2VfY2dyb3VwICpwYywgdW5zaWduZWQgbG9uZyBwZm4pCit7CisJcGMtPmZsYWdzID0gMDsKKwlwYy0+bWVtX2Nncm91cCA9IE5VTEw7CisJcGMtPnBhZ2UgPSBwZm5fdG9fcGFnZShwZm4pOworfQorc3RhdGljIHVuc2lnbmVkIGxvbmcgdG90YWxfdXNhZ2U7CisKKyNpZiAhZGVmaW5lZChDT05GSUdfU1BBUlNFTUVNKQorCisKK3ZvaWQgX19pbml0IHBnZGF0X3BhZ2VfY2dyb3VwX2luaXQoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCkKK3sKKwlwZ2RhdC0+bm9kZV9wYWdlX2Nncm91cCA9IE5VTEw7Cit9CisKK3N0cnVjdCBwYWdlX2Nncm91cCAqbG9va3VwX3BhZ2VfY2dyb3VwKHN0cnVjdCBwYWdlICpwYWdlKQoreworCXVuc2lnbmVkIGxvbmcgcGZuID0gcGFnZV90b19wZm4ocGFnZSk7CisJdW5zaWduZWQgbG9uZyBvZmZzZXQ7CisJc3RydWN0IHBhZ2VfY2dyb3VwICpiYXNlOworCisJYmFzZSA9IE5PREVfREFUQShwYWdlX3RvX25pZChwYWdlKSktPm5vZGVfcGFnZV9jZ3JvdXA7CisJaWYgKHVubGlrZWx5KCFiYXNlKSkKKwkJcmV0dXJuIE5VTEw7CisKKwlvZmZzZXQgPSBwZm4gLSBOT0RFX0RBVEEocGFnZV90b19uaWQocGFnZSkpLT5ub2RlX3N0YXJ0X3BmbjsKKwlyZXR1cm4gYmFzZSArIG9mZnNldDsKK30KKworc3RhdGljIGludCBfX2luaXQgYWxsb2Nfbm9kZV9wYWdlX2Nncm91cChpbnQgbmlkKQoreworCXN0cnVjdCBwYWdlX2Nncm91cCAqYmFzZSwgKnBjOworCXVuc2lnbmVkIGxvbmcgdGFibGVfc2l6ZTsKKwl1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiwgbnJfcGFnZXMsIGluZGV4OworCisJc3RhcnRfcGZuID0gTk9ERV9EQVRBKG5pZCktPm5vZGVfc3RhcnRfcGZuOworCW5yX3BhZ2VzID0gTk9ERV9EQVRBKG5pZCktPm5vZGVfc3Bhbm5lZF9wYWdlczsKKworCXRhYmxlX3NpemUgPSBzaXplb2Yoc3RydWN0IHBhZ2VfY2dyb3VwKSAqIG5yX3BhZ2VzOworCisJYmFzZSA9IF9fYWxsb2NfYm9vdG1lbV9ub2RlX25vcGFuaWMoTk9ERV9EQVRBKG5pZCksCisJCQl0YWJsZV9zaXplLCBQQUdFX1NJWkUsIF9fcGEoTUFYX0RNQV9BRERSRVNTKSk7CisJaWYgKCFiYXNlKQorCQlyZXR1cm4gLUVOT01FTTsKKwlmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBucl9wYWdlczsgaW5kZXgrKykgeworCQlwYyA9IGJhc2UgKyBpbmRleDsKKwkJX19pbml0X3BhZ2VfY2dyb3VwKHBjLCBzdGFydF9wZm4gKyBpbmRleCk7CisJfQorCU5PREVfREFUQShuaWQpLT5ub2RlX3BhZ2VfY2dyb3VwID0gYmFzZTsKKwl0b3RhbF91c2FnZSArPSB0YWJsZV9zaXplOworCXJldHVybiAwOworfQorCit2b2lkIF9faW5pdCBwYWdlX2Nncm91cF9pbml0KHZvaWQpCit7CisKKwlpbnQgbmlkLCBmYWlsOworCisJZm9yX2VhY2hfb25saW5lX25vZGUobmlkKSAgeworCQlmYWlsID0gYWxsb2Nfbm9kZV9wYWdlX2Nncm91cChuaWQpOworCQlpZiAoZmFpbCkKKwkJCWdvdG8gZmFpbDsKKwl9CisJcHJpbnRrKEtFUk5fSU5GTyAiYWxsb2NhdGVkICVsZCBieXRlcyBvZiBwYWdlX2Nncm91cFxuIiwgdG90YWxfdXNhZ2UpOworCXByaW50ayhLRVJOX0lORk8gInBsZWFzZSB0cnkgY2dyb3VwX2Rpc2FibGU9bWVtb3J5IG9wdGlvbiBpZiB5b3UiCisJIiBkb24ndCB3YW50XG4iKTsKKwlyZXR1cm47CitmYWlsOgorCXByaW50ayhLRVJOX0NSSVQgImFsbG9jYXRpb24gb2YgcGFnZV9jZ3JvdXAgd2FzIGZhaWxlZC5cbiIpOworCXByaW50ayhLRVJOX0NSSVQgInBsZWFzZSB0cnkgY2dyb3VwX2Rpc2FibGU9bWVtb3J5IGJvb3Qgb3B0aW9uXG4iKTsKKwlwYW5pYygiT3V0IG9mIG1lbW9yeSIpOworfQorCisjZWxzZSAvKiBDT05GSUdfRkxBVF9OT0RFX01FTV9NQVAgKi8KKworc3RydWN0IHBhZ2VfY2dyb3VwICpsb29rdXBfcGFnZV9jZ3JvdXAoc3RydWN0IHBhZ2UgKnBhZ2UpCit7CisJdW5zaWduZWQgbG9uZyBwZm4gPSBwYWdlX3RvX3BmbihwYWdlKTsKKwlzdHJ1Y3QgbWVtX3NlY3Rpb24gKnNlY3Rpb24gPSBfX3Bmbl90b19zZWN0aW9uKHBmbik7CisKKwlyZXR1cm4gc2VjdGlvbi0+cGFnZV9jZ3JvdXAgKyBwZm47Cit9CisKK2ludCBfX21lbWluaXQgaW5pdF9zZWN0aW9uX3BhZ2VfY2dyb3VwKHVuc2lnbmVkIGxvbmcgcGZuKQoreworCXN0cnVjdCBtZW1fc2VjdGlvbiAqc2VjdGlvbjsKKwlzdHJ1Y3QgcGFnZV9jZ3JvdXAgKmJhc2UsICpwYzsKKwl1bnNpZ25lZCBsb25nIHRhYmxlX3NpemU7CisJaW50IG5pZCwgaW5kZXg7CisKKwlzZWN0aW9uID0gX19wZm5fdG9fc2VjdGlvbihwZm4pOworCisJaWYgKHNlY3Rpb24tPnBhZ2VfY2dyb3VwKQorCQlyZXR1cm4gMDsKKworCW5pZCA9IHBhZ2VfdG9fbmlkKHBmbl90b19wYWdlKHBmbikpOworCisJdGFibGVfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgcGFnZV9jZ3JvdXApICogUEFHRVNfUEVSX1NFQ1RJT047CisJYmFzZSA9IGttYWxsb2Nfbm9kZSh0YWJsZV9zaXplLCBHRlBfS0VSTkVMLCBuaWQpOworCWlmICghYmFzZSkKKwkJYmFzZSA9IHZtYWxsb2Nfbm9kZSh0YWJsZV9zaXplLCBuaWQpOworCisJaWYgKCFiYXNlKSB7CisJCXByaW50ayhLRVJOX0VSUiAicGFnZSBjZ3JvdXAgYWxsb2NhdGlvbiBmYWlsdXJlXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJZm9yIChpbmRleCA9IDA7IGluZGV4IDwgUEFHRVNfUEVSX1NFQ1RJT047IGluZGV4KyspIHsKKwkJcGMgPSBiYXNlICsgaW5kZXg7CisJCV9faW5pdF9wYWdlX2Nncm91cChwYywgcGZuICsgaW5kZXgpOworCX0KKworCXNlY3Rpb24gPSBfX3Bmbl90b19zZWN0aW9uKHBmbik7CisJc2VjdGlvbi0+cGFnZV9jZ3JvdXAgPSBiYXNlIC0gcGZuOworCXRvdGFsX3VzYWdlICs9IHRhYmxlX3NpemU7CisJcmV0dXJuIDA7Cit9CisjaWZkZWYgQ09ORklHX01FTU9SWV9IT1RQTFVHCit2b2lkIF9fZnJlZV9wYWdlX2Nncm91cCh1bnNpZ25lZCBsb25nIHBmbikKK3sKKwlzdHJ1Y3QgbWVtX3NlY3Rpb24gKm1zOworCXN0cnVjdCBwYWdlX2Nncm91cCAqYmFzZTsKKworCW1zID0gX19wZm5fdG9fc2VjdGlvbihwZm4pOworCWlmICghbXMgfHwgIW1zLT5wYWdlX2Nncm91cCkKKwkJcmV0dXJuOworCWJhc2UgPSBtcy0+cGFnZV9jZ3JvdXAgKyBwZm47CisJbXMtPnBhZ2VfY2dyb3VwID0gTlVMTDsKKwlpZiAoaXNfdm1hbGxvY19hZGRyKGJhc2UpKQorCQl2ZnJlZShiYXNlKTsKKwllbHNlCisJCWtmcmVlKGJhc2UpOworfQorCitpbnQgb25saW5lX3BhZ2VfY2dyb3VwKHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLAorCQkJdW5zaWduZWQgbG9uZyBucl9wYWdlcywKKwkJCWludCBuaWQpCit7CisJdW5zaWduZWQgbG9uZyBzdGFydCwgZW5kLCBwZm47CisJaW50IGZhaWwgPSAwOworCisJc3RhcnQgPSBzdGFydF9wZm4gJiAoUEFHRVNfUEVSX1NFQ1RJT04gLSAxKTsKKwllbmQgPSBBTElHTihzdGFydF9wZm4gKyBucl9wYWdlcywgUEFHRVNfUEVSX1NFQ1RJT04pOworCisJZm9yIChwZm4gPSBzdGFydDsgIWZhaWwgJiYgcGZuIDwgZW5kOyBwZm4gKz0gUEFHRVNfUEVSX1NFQ1RJT04pIHsKKwkJaWYgKCFwZm5fcHJlc2VudChwZm4pKQorCQkJY29udGludWU7CisJCWZhaWwgPSBpbml0X3NlY3Rpb25fcGFnZV9jZ3JvdXAocGZuKTsKKwl9CisJaWYgKCFmYWlsKQorCQlyZXR1cm4gMDsKKworCS8qIHJvbGxiYWNrICovCisJZm9yIChwZm4gPSBzdGFydDsgcGZuIDwgZW5kOyBwZm4gKz0gUEFHRVNfUEVSX1NFQ1RJT04pCisJCV9fZnJlZV9wYWdlX2Nncm91cChwZm4pOworCisJcmV0dXJuIC1FTk9NRU07Cit9CisKK2ludCBvZmZsaW5lX3BhZ2VfY2dyb3VwKHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLAorCQl1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLCBpbnQgbmlkKQoreworCXVuc2lnbmVkIGxvbmcgc3RhcnQsIGVuZCwgcGZuOworCisJc3RhcnQgPSBzdGFydF9wZm4gJiAoUEFHRVNfUEVSX1NFQ1RJT04gLSAxKTsKKwllbmQgPSBBTElHTihzdGFydF9wZm4gKyBucl9wYWdlcywgUEFHRVNfUEVSX1NFQ1RJT04pOworCisJZm9yIChwZm4gPSBzdGFydDsgcGZuIDwgZW5kOyBwZm4gKz0gUEFHRVNfUEVSX1NFQ1RJT04pCisJCV9fZnJlZV9wYWdlX2Nncm91cChwZm4pOworCXJldHVybiAwOworCit9CisKK3N0YXRpYyBpbnQgcGFnZV9jZ3JvdXBfY2FsbGJhY2soc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpzZWxmLAorCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgYWN0aW9uLCB2b2lkICphcmcpCit7CisJc3RydWN0IG1lbW9yeV9ub3RpZnkgKm1uID0gYXJnOworCWludCByZXQgPSAwOworCXN3aXRjaCAoYWN0aW9uKSB7CisJY2FzZSBNRU1fR09JTkdfT05MSU5FOgorCQlyZXQgPSBvbmxpbmVfcGFnZV9jZ3JvdXAobW4tPnN0YXJ0X3BmbiwKKwkJCQkgICBtbi0+bnJfcGFnZXMsIG1uLT5zdGF0dXNfY2hhbmdlX25pZCk7CisJCWJyZWFrOworCWNhc2UgTUVNX0NBTkNFTF9PTkxJTkU6CisJY2FzZSBNRU1fT0ZGTElORToKKwkJb2ZmbGluZV9wYWdlX2Nncm91cChtbi0+c3RhcnRfcGZuLAorCQkJCW1uLT5ucl9wYWdlcywgbW4tPnN0YXR1c19jaGFuZ2VfbmlkKTsKKwkJYnJlYWs7CisJY2FzZSBNRU1fR09JTkdfT0ZGTElORToKKwkJYnJlYWs7CisJY2FzZSBNRU1fT05MSU5FOgorCWNhc2UgTUVNX0NBTkNFTF9PRkZMSU5FOgorCQlicmVhazsKKwl9CisJcmV0ID0gbm90aWZpZXJfZnJvbV9lcnJubyhyZXQpOworCXJldHVybiByZXQ7Cit9CisKKyNlbmRpZgorCit2b2lkIF9faW5pdCBwYWdlX2Nncm91cF9pbml0KHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyBwZm47CisJaW50IGZhaWwgPSAwOworCisJZm9yIChwZm4gPSAwOyAhZmFpbCAmJiBwZm4gPCBtYXhfcGZuOyBwZm4gKz0gUEFHRVNfUEVSX1NFQ1RJT04pIHsKKwkJaWYgKCFwZm5fcHJlc2VudChwZm4pKQorCQkJY29udGludWU7CisJCWZhaWwgPSBpbml0X3NlY3Rpb25fcGFnZV9jZ3JvdXAocGZuKTsKKwl9CisJaWYgKGZhaWwpIHsKKwkJcHJpbnRrKEtFUk5fQ1JJVCAidHJ5IGNncm91cF9kaXNhYmxlPW1lbW9yeSBib290IG9wdGlvblxuIik7CisJCXBhbmljKCJPdXQgb2YgbWVtb3J5Iik7CisJfSBlbHNlIHsKKwkJaG90cGx1Z19tZW1vcnlfbm90aWZpZXIocGFnZV9jZ3JvdXBfY2FsbGJhY2ssIDApOworCX0KKwlwcmludGsoS0VSTl9JTkZPICJhbGxvY2F0ZWQgJWxkIGJ5dGVzIG9mIHBhZ2VfY2dyb3VwXG4iLCB0b3RhbF91c2FnZSk7CisJcHJpbnRrKEtFUk5fSU5GTyAicGxlYXNlIHRyeSBjZ3JvdXBfZGlzYWJsZT1tZW1vcnkgb3B0aW9uIGlmIHlvdSBkb24ndCIKKwkiIHdhbnRcbiIpOworfQorCit2b2lkIF9faW5pdCBwZ2RhdF9wYWdlX2Nncm91cF9pbml0KHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQpCit7CisJcmV0dXJuOworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL21tL3BkZmx1c2guYyBiL21tL3BkZmx1c2guYwppbmRleCAwY2JlMGM2Li5hMGExNGM0IDEwMDY0NAotLS0gYS9tbS9wZGZsdXNoLmMKKysrIGIvbW0vcGRmbHVzaC5jCkBAIC0zLDcgKzMsNyBAQAogICoKICAqIENvcHlyaWdodCAoQykgMjAwMiwgTGludXMgVG9ydmFsZHMuCiAgKgotICogMDlBcHIyMDAyCWFrcG1AemlwLmNvbS5hdQorICogMDlBcHIyMDAyCUFuZHJldyBNb3J0b24KICAqCQlJbml0aWFsIHZlcnNpb24KICAqIDI5RmViMjAwNAlrYW9zQHNnaS5jb20KICAqCQlNb3ZlIHdvcmtlciB0aHJlYWQgY3JlYXRpb24gdG8ga3RocmVhZCB0byBhdm9pZCBjaGV3aW5nCmRpZmYgLS1naXQgYS9tbS9yZWFkYWhlYWQuYyBiL21tL3JlYWRhaGVhZC5jCmluZGV4IDc3ZThkZGYuLmJlYzgzYzEgMTAwNjQ0Ci0tLSBhL21tL3JlYWRhaGVhZC5jCisrKyBiL21tL3JlYWRhaGVhZC5jCkBAIC0zLDcgKzMsNyBAQAogICoKICAqIENvcHlyaWdodCAoQykgMjAwMiwgTGludXMgVG9ydmFsZHMKICAqCi0gKiAwOUFwcjIwMDIJYWtwbUB6aXAuY29tLmF1CisgKiAwOUFwcjIwMDIJQW5kcmV3IE1vcnRvbgogICoJCUluaXRpYWwgdmVyc2lvbi4KICAqLwogCkBAIC0yMjksNyArMjI5LDcgQEAKICAqLwogdW5zaWduZWQgbG9uZyBtYXhfc2FuZV9yZWFkYWhlYWQodW5zaWduZWQgbG9uZyBucikKIHsKLQlyZXR1cm4gbWluKG5yLCAobm9kZV9wYWdlX3N0YXRlKG51bWFfbm9kZV9pZCgpLCBOUl9JTkFDVElWRSkKKwlyZXR1cm4gbWluKG5yLCAobm9kZV9wYWdlX3N0YXRlKG51bWFfbm9kZV9pZCgpLCBOUl9JTkFDVElWRV9GSUxFKQogCQkrIG5vZGVfcGFnZV9zdGF0ZShudW1hX25vZGVfaWQoKSwgTlJfRlJFRV9QQUdFUykpIC8gMik7CiB9CiAKZGlmZiAtLWdpdCBhL21tL3JtYXAuYyBiL21tL3JtYXAuYwppbmRleCAwMzgzYWNmLi4xMDk5Mzk0IDEwMDY0NAotLS0gYS9tbS9ybWFwLmMKKysrIGIvbW0vcm1hcC5jCkBAIC01Myw5ICs1Myw0NyBAQAogCiAjaW5jbHVkZSA8YXNtL3RsYmZsdXNoLmg+CiAKLXN0cnVjdCBrbWVtX2NhY2hlICphbm9uX3ZtYV9jYWNoZXA7CisjaW5jbHVkZSAiaW50ZXJuYWwuaCIKIAotLyogVGhpcyBtdXN0IGJlIGNhbGxlZCB1bmRlciB0aGUgbW1hcF9zZW0uICovCitzdGF0aWMgc3RydWN0IGttZW1fY2FjaGUgKmFub25fdm1hX2NhY2hlcDsKKworc3RhdGljIGlubGluZSBzdHJ1Y3QgYW5vbl92bWEgKmFub25fdm1hX2FsbG9jKHZvaWQpCit7CisJcmV0dXJuIGttZW1fY2FjaGVfYWxsb2MoYW5vbl92bWFfY2FjaGVwLCBHRlBfS0VSTkVMKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGFub25fdm1hX2ZyZWUoc3RydWN0IGFub25fdm1hICphbm9uX3ZtYSkKK3sKKwlrbWVtX2NhY2hlX2ZyZWUoYW5vbl92bWFfY2FjaGVwLCBhbm9uX3ZtYSk7Cit9CisKKy8qKgorICogYW5vbl92bWFfcHJlcGFyZSAtIGF0dGFjaCBhbiBhbm9uX3ZtYSB0byBhIG1lbW9yeSByZWdpb24KKyAqIEB2bWE6IHRoZSBtZW1vcnkgcmVnaW9uIGluIHF1ZXN0aW9uCisgKgorICogVGhpcyBtYWtlcyBzdXJlIHRoZSBtZW1vcnkgbWFwcGluZyBkZXNjcmliZWQgYnkgJ3ZtYScgaGFzCisgKiBhbiAnYW5vbl92bWEnIGF0dGFjaGVkIHRvIGl0LCBzbyB0aGF0IHdlIGNhbiBhc3NvY2lhdGUgdGhlCisgKiBhbm9ueW1vdXMgcGFnZXMgbWFwcGVkIGludG8gaXQgd2l0aCB0aGF0IGFub25fdm1hLgorICoKKyAqIFRoZSBjb21tb24gY2FzZSB3aWxsIGJlIHRoYXQgd2UgYWxyZWFkeSBoYXZlIG9uZSwgYnV0IGlmCisgKiBpZiBub3Qgd2UgZWl0aGVyIG5lZWQgdG8gZmluZCBhbiBhZGphY2VudCBtYXBwaW5nIHRoYXQgd2UKKyAqIGNhbiByZS11c2UgdGhlIGFub25fdm1hIGZyb20gKHZlcnkgY29tbW9uIHdoZW4gdGhlIG9ubHkKKyAqIHJlYXNvbiBmb3Igc3BsaXR0aW5nIGEgdm1hIGhhcyBiZWVuIG1wcm90ZWN0KCkpLCBvciB3ZQorICogYWxsb2NhdGUgYSBuZXcgb25lLgorICoKKyAqIEFub24tdm1hIGFsbG9jYXRpb25zIGFyZSB2ZXJ5IHN1YnRsZSwgYmVjYXVzZSB3ZSBtYXkgaGF2ZQorICogb3B0aW1pc3RpY2FsbHkgbG9va2VkIHVwIGFuIGFub25fdm1hIGluIHBhZ2VfbG9ja19hbm9uX3ZtYSgpCisgKiBhbmQgdGhhdCBtYXkgYWN0dWFsbHkgdG91Y2ggdGhlIHNwaW5sb2NrIGV2ZW4gaW4gdGhlIG5ld2x5CisgKiBhbGxvY2F0ZWQgdm1hIChpdCBkZXBlbmRzIG9uIFJDVSB0byBtYWtlIHN1cmUgdGhhdCB0aGUKKyAqIGFub25fdm1hIGlzbid0IGFjdHVhbGx5IGRlc3Ryb3llZCkuCisgKgorICogQXMgYSByZXN1bHQsIHdlIG5lZWQgdG8gZG8gcHJvcGVyIGFub25fdm1hIGxvY2tpbmcgZXZlbgorICogZm9yIHRoZSBuZXcgYWxsb2NhdGlvbi4gQXQgdGhlIHNhbWUgdGltZSwgd2UgZG8gbm90IHdhbnQKKyAqIHRvIGRvIGFueSBsb2NraW5nIGZvciB0aGUgY29tbW9uIGNhc2Ugb2YgYWxyZWFkeSBoYXZpbmcKKyAqIGFuIGFub25fdm1hLgorICoKKyAqIFRoaXMgbXVzdCBiZSBjYWxsZWQgd2l0aCB0aGUgbW1hcF9zZW0gaGVsZCBmb3IgcmVhZGluZy4KKyAqLwogaW50IGFub25fdm1hX3ByZXBhcmUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCiB7CiAJc3RydWN0IGFub25fdm1hICphbm9uX3ZtYSA9IHZtYS0+YW5vbl92bWE7CkBAIC02MywyMCArMTAxLDE3IEBACiAJbWlnaHRfc2xlZXAoKTsKIAlpZiAodW5saWtlbHkoIWFub25fdm1hKSkgewogCQlzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IHZtYS0+dm1fbW07Ci0JCXN0cnVjdCBhbm9uX3ZtYSAqYWxsb2NhdGVkLCAqbG9ja2VkOworCQlzdHJ1Y3QgYW5vbl92bWEgKmFsbG9jYXRlZDsKIAogCQlhbm9uX3ZtYSA9IGZpbmRfbWVyZ2VhYmxlX2Fub25fdm1hKHZtYSk7Ci0JCWlmIChhbm9uX3ZtYSkgewotCQkJYWxsb2NhdGVkID0gTlVMTDsKLQkJCWxvY2tlZCA9IGFub25fdm1hOwotCQkJc3Bpbl9sb2NrKCZsb2NrZWQtPmxvY2spOwotCQl9IGVsc2UgeworCQlhbGxvY2F0ZWQgPSBOVUxMOworCQlpZiAoIWFub25fdm1hKSB7CiAJCQlhbm9uX3ZtYSA9IGFub25fdm1hX2FsbG9jKCk7CiAJCQlpZiAodW5saWtlbHkoIWFub25fdm1hKSkKIAkJCQlyZXR1cm4gLUVOT01FTTsKIAkJCWFsbG9jYXRlZCA9IGFub25fdm1hOwotCQkJbG9ja2VkID0gTlVMTDsKIAkJfQorCQlzcGluX2xvY2soJmFub25fdm1hLT5sb2NrKTsKIAogCQkvKiBwYWdlX3RhYmxlX2xvY2sgdG8gcHJvdGVjdCBhZ2FpbnN0IHRocmVhZHMgKi8KIAkJc3Bpbl9sb2NrKCZtbS0+cGFnZV90YWJsZV9sb2NrKTsKQEAgLTg3LDggKzEyMiw3IEBACiAJCX0KIAkJc3Bpbl91bmxvY2soJm1tLT5wYWdlX3RhYmxlX2xvY2spOwogCi0JCWlmIChsb2NrZWQpCi0JCQlzcGluX3VubG9jaygmbG9ja2VkLT5sb2NrKTsKKwkJc3Bpbl91bmxvY2soJmFub25fdm1hLT5sb2NrKTsKIAkJaWYgKHVubGlrZWx5KGFsbG9jYXRlZCkpCiAJCQlhbm9uX3ZtYV9mcmVlKGFsbG9jYXRlZCk7CiAJfQpAQCAtMTU3LDcgKzE5MSw3IEBACiAgKiBHZXR0aW5nIGEgbG9jayBvbiBhIHN0YWJsZSBhbm9uX3ZtYSBmcm9tIGEgcGFnZSBvZmYgdGhlIExSVSBpcwogICogdHJpY2t5OiBwYWdlX2xvY2tfYW5vbl92bWEgcmVseSBvbiBSQ1UgdG8gZ3VhcmQgYWdhaW5zdCB0aGUgcmFjZXMuCiAgKi8KLXN0YXRpYyBzdHJ1Y3QgYW5vbl92bWEgKnBhZ2VfbG9ja19hbm9uX3ZtYShzdHJ1Y3QgcGFnZSAqcGFnZSkKK3N0cnVjdCBhbm9uX3ZtYSAqcGFnZV9sb2NrX2Fub25fdm1hKHN0cnVjdCBwYWdlICpwYWdlKQogewogCXN0cnVjdCBhbm9uX3ZtYSAqYW5vbl92bWE7CiAJdW5zaWduZWQgbG9uZyBhbm9uX21hcHBpbmc7CkBAIC0xNzcsNyArMjExLDcgQEAKIAlyZXR1cm4gTlVMTDsKIH0KIAotc3RhdGljIHZvaWQgcGFnZV91bmxvY2tfYW5vbl92bWEoc3RydWN0IGFub25fdm1hICphbm9uX3ZtYSkKK3ZvaWQgcGFnZV91bmxvY2tfYW5vbl92bWEoc3RydWN0IGFub25fdm1hICphbm9uX3ZtYSkKIHsKIAlzcGluX3VubG9jaygmYW5vbl92bWEtPmxvY2spOwogCXJjdV9yZWFkX3VubG9jaygpOwpAQCAtMjY4LDYgKzMwMiwzMiBAQAogCXJldHVybiBOVUxMOwogfQogCisvKioKKyAqIHBhZ2VfbWFwcGVkX2luX3ZtYSAtIGNoZWNrIHdoZXRoZXIgYSBwYWdlIGlzIHJlYWxseSBtYXBwZWQgaW4gYSBWTUEKKyAqIEBwYWdlOiB0aGUgcGFnZSB0byB0ZXN0CisgKiBAdm1hOiB0aGUgVk1BIHRvIHRlc3QKKyAqCisgKiBSZXR1cm5zIDEgaWYgdGhlIHBhZ2UgaXMgbWFwcGVkIGludG8gdGhlIHBhZ2UgdGFibGVzIG9mIHRoZSBWTUEsIDAKKyAqIGlmIHRoZSBwYWdlIGlzIG5vdCBtYXBwZWQgaW50byB0aGUgcGFnZSB0YWJsZXMgb2YgdGhpcyBWTUEuICBPbmx5CisgKiB2YWxpZCBmb3Igbm9ybWFsIGZpbGUgb3IgYW5vbnltb3VzIFZNQXMuCisgKi8KK3N0YXRpYyBpbnQgcGFnZV9tYXBwZWRfaW5fdm1hKHN0cnVjdCBwYWdlICpwYWdlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKK3sKKwl1bnNpZ25lZCBsb25nIGFkZHJlc3M7CisJcHRlX3QgKnB0ZTsKKwlzcGlubG9ja190ICpwdGw7CisKKwlhZGRyZXNzID0gdm1hX2FkZHJlc3MocGFnZSwgdm1hKTsKKwlpZiAoYWRkcmVzcyA9PSAtRUZBVUxUKQkJLyogb3V0IG9mIHZtYSByYW5nZSAqLworCQlyZXR1cm4gMDsKKwlwdGUgPSBwYWdlX2NoZWNrX2FkZHJlc3MocGFnZSwgdm1hLT52bV9tbSwgYWRkcmVzcywgJnB0bCwgMSk7CisJaWYgKCFwdGUpCQkJLyogdGhlIHBhZ2UgaXMgbm90IGluIHRoaXMgbW0gKi8KKwkJcmV0dXJuIDA7CisJcHRlX3VubWFwX3VubG9jayhwdGUsIHB0bCk7CisKKwlyZXR1cm4gMTsKK30KKwogLyoKICAqIFN1YmZ1bmN0aW9ucyBvZiBwYWdlX3JlZmVyZW5jZWQ6IHBhZ2VfcmVmZXJlbmNlZF9vbmUgY2FsbGVkCiAgKiByZXBlYXRlZGx5IGZyb20gZWl0aGVyIHBhZ2VfcmVmZXJlbmNlZF9hbm9uIG9yIHBhZ2VfcmVmZXJlbmNlZF9maWxlLgpAQCAtMjg5LDEwICszNDksMTcgQEAKIAlpZiAoIXB0ZSkKIAkJZ290byBvdXQ7CiAKKwkvKgorCSAqIERvbid0IHdhbnQgdG8gZWxldmF0ZSByZWZlcmVuY2VkIGZvciBtbG9ja2VkIHBhZ2UgdGhhdCBnZXRzIHRoaXMgZmFyLAorCSAqIGluIG9yZGVyIHRoYXQgaXQgcHJvZ3Jlc3NlcyB0byB0cnlfdG9fdW5tYXAgYW5kIGlzIG1vdmVkIHRvIHRoZQorCSAqIHVuZXZpY3RhYmxlIGxpc3QuCisJICovCiAJaWYgKHZtYS0+dm1fZmxhZ3MgJiBWTV9MT0NLRUQpIHsKLQkJcmVmZXJlbmNlZCsrOwogCQkqbWFwY291bnQgPSAxOwkvKiBicmVhayBlYXJseSBmcm9tIGxvb3AgKi8KLQl9IGVsc2UgaWYgKHB0ZXBfY2xlYXJfZmx1c2hfeW91bmdfbm90aWZ5KHZtYSwgYWRkcmVzcywgcHRlKSkKKwkJZ290byBvdXRfdW5tYXA7CisJfQorCisJaWYgKHB0ZXBfY2xlYXJfZmx1c2hfeW91bmdfbm90aWZ5KHZtYSwgYWRkcmVzcywgcHRlKSkKIAkJcmVmZXJlbmNlZCsrOwogCiAJLyogUHJldGVuZCB0aGUgcGFnZSBpcyByZWZlcmVuY2VkIGlmIHRoZSB0YXNrIGhhcyB0aGUKQEAgLTMwMSw2ICszNjgsNyBAQAogCQkJcndzZW1faXNfbG9ja2VkKCZtbS0+bW1hcF9zZW0pKQogCQlyZWZlcmVuY2VkKys7CiAKK291dF91bm1hcDoKIAkoKm1hcGNvdW50KS0tOwogCXB0ZV91bm1hcF91bmxvY2socHRlLCBwdGwpOwogb3V0OgpAQCAtMzkwLDExICs0NTgsNiBAQAogCQkgKi8KIAkJaWYgKG1lbV9jb250ICYmICFtbV9tYXRjaF9jZ3JvdXAodm1hLT52bV9tbSwgbWVtX2NvbnQpKQogCQkJY29udGludWU7Ci0JCWlmICgodm1hLT52bV9mbGFncyAmIChWTV9MT0NLRUR8Vk1fTUFZU0hBUkUpKQotCQkJCSAgPT0gKFZNX0xPQ0tFRHxWTV9NQVlTSEFSRSkpIHsKLQkJCXJlZmVyZW5jZWQrKzsKLQkJCWJyZWFrOwotCQl9CiAJCXJlZmVyZW5jZWQgKz0gcGFnZV9yZWZlcmVuY2VkX29uZShwYWdlLCB2bWEsICZtYXBjb3VudCk7CiAJCWlmICghbWFwY291bnQpCiAJCQlicmVhazsKQEAgLTY3NCw4ICs3MzcsOCBAQAogCQkJcGFnZV9jbGVhcl9kaXJ0eShwYWdlKTsKIAkJCXNldF9wYWdlX2RpcnR5KHBhZ2UpOwogCQl9Ci0KLQkJbWVtX2Nncm91cF91bmNoYXJnZV9wYWdlKHBhZ2UpOworCQlpZiAoUGFnZUFub24ocGFnZSkpCisJCQltZW1fY2dyb3VwX3VuY2hhcmdlX3BhZ2UocGFnZSk7CiAJCV9fZGVjX3pvbmVfcGFnZV9zdGF0ZShwYWdlLAogCQkJUGFnZUFub24ocGFnZSkgPyBOUl9BTk9OX1BBR0VTIDogTlJfRklMRV9NQVBQRUQpOwogCQkvKgpAQCAtNzE3LDExICs3ODAsMTYgQEAKIAkgKiBJZiBpdCdzIHJlY2VudGx5IHJlZmVyZW5jZWQgKHBlcmhhcHMgcGFnZV9yZWZlcmVuY2VkCiAJICogc2tpcHBlZCBvdmVyIHRoaXMgbW0pIHRoZW4gd2Ugc2hvdWxkIHJlYWN0aXZhdGUgaXQuCiAJICovCi0JaWYgKCFtaWdyYXRpb24gJiYgKCh2bWEtPnZtX2ZsYWdzICYgVk1fTE9DS0VEKSB8fAotCQkJKHB0ZXBfY2xlYXJfZmx1c2hfeW91bmdfbm90aWZ5KHZtYSwgYWRkcmVzcywgcHRlKSkpKSB7Ci0JCXJldCA9IFNXQVBfRkFJTDsKLQkJZ290byBvdXRfdW5tYXA7Ci0JfQorCWlmICghbWlncmF0aW9uKSB7CisJCWlmICh2bWEtPnZtX2ZsYWdzICYgVk1fTE9DS0VEKSB7CisJCQlyZXQgPSBTV0FQX01MT0NLOworCQkJZ290byBvdXRfdW5tYXA7CisJCX0KKwkJaWYgKHB0ZXBfY2xlYXJfZmx1c2hfeW91bmdfbm90aWZ5KHZtYSwgYWRkcmVzcywgcHRlKSkgeworCQkJcmV0ID0gU1dBUF9GQUlMOworCQkJZ290byBvdXRfdW5tYXA7CisJCX0KKyAgCX0KIAogCS8qIE51a2UgdGhlIHBhZ2UgdGFibGUgZW50cnkuICovCiAJZmx1c2hfY2FjaGVfcGFnZSh2bWEsIGFkZHJlc3MsIHBhZ2VfdG9fcGZuKHBhZ2UpKTsKQEAgLTgwMiwxMiArODcwLDE3IEBACiAgKiBGb3IgdmVyeSBzcGFyc2VseSBwb3B1bGF0ZWQgVk1BcyB0aGlzIGlzIGEgbGl0dGxlIGluZWZmaWNpZW50IC0gY2hhbmNlcyBhcmUKICAqIHRoZXJlIHRoZXJlIHdvbid0IGJlIG1hbnkgcHRlcyBsb2NhdGVkIHdpdGhpbiB0aGUgc2NhbiBjbHVzdGVyLiAgSW4gdGhpcyBjYXNlCiAgKiBtYXliZSB3ZSBjb3VsZCBzY2FuIGZ1cnRoZXIgLSB0byB0aGUgZW5kIG9mIHRoZSBwdGUgcGFnZSwgcGVyaGFwcy4KKyAqCisgKiBNbG9ja2VkIHBhZ2VzOiAgY2hlY2sgVk1fTE9DS0VEIHVuZGVyIG1tYXBfc2VtIGhlbGQgZm9yIHJlYWQsIGlmIHdlIGNhbgorICogYWNxdWlyZSBpdCB3aXRob3V0IGJsb2NraW5nLiAgSWYgdm1hIGxvY2tlZCwgbWxvY2sgdGhlIHBhZ2VzIGluIHRoZSBjbHVzdGVyLAorICogcmF0aGVyIHRoYW4gdW5tYXBwaW5nIHRoZW0uICBJZiB3ZSBlbmNvdW50ZXIgdGhlICJjaGVja19wYWdlIiB0aGF0IHZtc2NhbiBpcworICogdHJ5aW5nIHRvIHVubWFwLCByZXR1cm4gU1dBUF9NTE9DSywgZWxzZSBkZWZhdWx0IFNXQVBfQUdBSU4uCiAgKi8KICNkZWZpbmUgQ0xVU1RFUl9TSVpFCW1pbigzMipQQUdFX1NJWkUsIFBNRF9TSVpFKQogI2RlZmluZSBDTFVTVEVSX01BU0sJKH4oQ0xVU1RFUl9TSVpFIC0gMSkpCiAKLXN0YXRpYyB2b2lkIHRyeV90b191bm1hcF9jbHVzdGVyKHVuc2lnbmVkIGxvbmcgY3Vyc29yLAotCXVuc2lnbmVkIGludCAqbWFwY291bnQsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQorc3RhdGljIGludCB0cnlfdG9fdW5tYXBfY2x1c3Rlcih1bnNpZ25lZCBsb25nIGN1cnNvciwgdW5zaWduZWQgaW50ICptYXBjb3VudCwKKwkJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHN0cnVjdCBwYWdlICpjaGVja19wYWdlKQogewogCXN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gdm1hLT52bV9tbTsKIAlwZ2RfdCAqcGdkOwpAQCAtODE5LDYgKzg5Miw4IEBACiAJc3RydWN0IHBhZ2UgKnBhZ2U7CiAJdW5zaWduZWQgbG9uZyBhZGRyZXNzOwogCXVuc2lnbmVkIGxvbmcgZW5kOworCWludCByZXQgPSBTV0FQX0FHQUlOOworCWludCBsb2NrZWRfdm1hID0gMDsKIAogCWFkZHJlc3MgPSAodm1hLT52bV9zdGFydCArIGN1cnNvcikgJiBDTFVTVEVSX01BU0s7CiAJZW5kID0gYWRkcmVzcyArIENMVVNURVJfU0laRTsKQEAgLTgyOSwxNSArOTA0LDI2IEBACiAKIAlwZ2QgPSBwZ2Rfb2Zmc2V0KG1tLCBhZGRyZXNzKTsKIAlpZiAoIXBnZF9wcmVzZW50KCpwZ2QpKQotCQlyZXR1cm47CisJCXJldHVybiByZXQ7CiAKIAlwdWQgPSBwdWRfb2Zmc2V0KHBnZCwgYWRkcmVzcyk7CiAJaWYgKCFwdWRfcHJlc2VudCgqcHVkKSkKLQkJcmV0dXJuOworCQlyZXR1cm4gcmV0OwogCiAJcG1kID0gcG1kX29mZnNldChwdWQsIGFkZHJlc3MpOwogCWlmICghcG1kX3ByZXNlbnQoKnBtZCkpCi0JCXJldHVybjsKKwkJcmV0dXJuIHJldDsKKworCS8qCisJICogTUxPQ0tfUEFHRVMgPT4gZmVhdHVyZSBpcyBjb25maWd1cmVkLgorCSAqIGlmIHdlIGNhbiBhY3F1aXJlIHRoZSBtbWFwX3NlbSBmb3IgcmVhZCwgYW5kIHZtYSBpcyBWTV9MT0NLRUQsCisJICoga2VlcCB0aGUgc2VtIHdoaWxlIHNjYW5uaW5nIHRoZSBjbHVzdGVyIGZvciBtbG9ja2luZyBwYWdlcy4KKwkgKi8KKwlpZiAoTUxPQ0tfUEFHRVMgJiYgZG93bl9yZWFkX3RyeWxvY2soJnZtYS0+dm1fbW0tPm1tYXBfc2VtKSkgeworCQlsb2NrZWRfdm1hID0gKHZtYS0+dm1fZmxhZ3MgJiBWTV9MT0NLRUQpOworCQlpZiAoIWxvY2tlZF92bWEpCisJCQl1cF9yZWFkKCZ2bWEtPnZtX21tLT5tbWFwX3NlbSk7IC8qIGRvbid0IG5lZWQgaXQgKi8KKwl9CiAKIAlwdGUgPSBwdGVfb2Zmc2V0X21hcF9sb2NrKG1tLCBwbWQsIGFkZHJlc3MsICZwdGwpOwogCkBAIC04NTAsNiArOTM2LDEzIEBACiAJCXBhZ2UgPSB2bV9ub3JtYWxfcGFnZSh2bWEsIGFkZHJlc3MsICpwdGUpOwogCQlCVUdfT04oIXBhZ2UgfHwgUGFnZUFub24ocGFnZSkpOwogCisJCWlmIChsb2NrZWRfdm1hKSB7CisJCQltbG9ja192bWFfcGFnZShwYWdlKTsgICAvKiBuby1vcCBpZiBhbHJlYWR5IG1sb2NrZWQgKi8KKwkJCWlmIChwYWdlID09IGNoZWNrX3BhZ2UpCisJCQkJcmV0ID0gU1dBUF9NTE9DSzsKKwkJCWNvbnRpbnVlOwkvKiBkb24ndCB1bm1hcCAqLworCQl9CisKIAkJaWYgKHB0ZXBfY2xlYXJfZmx1c2hfeW91bmdfbm90aWZ5KHZtYSwgYWRkcmVzcywgcHRlKSkKIAkJCWNvbnRpbnVlOwogCkBAIC04NzEsMzkgKzk2NCwxMDQgQEAKIAkJKCptYXBjb3VudCktLTsKIAl9CiAJcHRlX3VubWFwX3VubG9jayhwdGUgLSAxLCBwdGwpOworCWlmIChsb2NrZWRfdm1hKQorCQl1cF9yZWFkKCZ2bWEtPnZtX21tLT5tbWFwX3NlbSk7CisJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCB0cnlfdG9fdW5tYXBfYW5vbihzdHJ1Y3QgcGFnZSAqcGFnZSwgaW50IG1pZ3JhdGlvbikKKy8qCisgKiBjb21tb24gaGFuZGxpbmcgZm9yIHBhZ2VzIG1hcHBlZCBpbiBWTV9MT0NLRUQgdm1hcworICovCitzdGF0aWMgaW50IHRyeV90b19tbG9ja19wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKK3sKKwlpbnQgbWxvY2tlZCA9IDA7CisKKwlpZiAoZG93bl9yZWFkX3RyeWxvY2soJnZtYS0+dm1fbW0tPm1tYXBfc2VtKSkgeworCQlpZiAodm1hLT52bV9mbGFncyAmIFZNX0xPQ0tFRCkgeworCQkJbWxvY2tfdm1hX3BhZ2UocGFnZSk7CisJCQltbG9ja2VkKys7CS8qIHJlYWxseSBtbG9ja2VkIHRoZSBwYWdlICovCisJCX0KKwkJdXBfcmVhZCgmdm1hLT52bV9tbS0+bW1hcF9zZW0pOworCX0KKwlyZXR1cm4gbWxvY2tlZDsKK30KKworLyoqCisgKiB0cnlfdG9fdW5tYXBfYW5vbiAtIHVubWFwIG9yIHVubG9jayBhbm9ueW1vdXMgcGFnZSB1c2luZyB0aGUgb2JqZWN0LWJhc2VkCisgKiBybWFwIG1ldGhvZAorICogQHBhZ2U6IHRoZSBwYWdlIHRvIHVubWFwL3VubG9jaworICogQHVubG9jazogIHJlcXVlc3QgZm9yIHVubG9jayByYXRoZXIgdGhhbiB1bm1hcCBbdW5saWtlbHldCisgKiBAbWlncmF0aW9uOiAgdW5tYXBwaW5nIGZvciBtaWdyYXRpb24gLSBpZ25vcmVkIGlmIEB1bmxvY2sKKyAqCisgKiBGaW5kIGFsbCB0aGUgbWFwcGluZ3Mgb2YgYSBwYWdlIHVzaW5nIHRoZSBtYXBwaW5nIHBvaW50ZXIgYW5kIHRoZSB2bWEgY2hhaW5zCisgKiBjb250YWluZWQgaW4gdGhlIGFub25fdm1hIHN0cnVjdCBpdCBwb2ludHMgdG8uCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyBvbmx5IGNhbGxlZCBmcm9tIHRyeV90b191bm1hcC90cnlfdG9fbXVubG9jayBmb3IKKyAqIGFub255bW91cyBwYWdlcy4KKyAqIFdoZW4gY2FsbGVkIGZyb20gdHJ5X3RvX211bmxvY2soKSwgdGhlIG1tYXBfc2VtIG9mIHRoZSBtbSBjb250YWluaW5nIHRoZSB2bWEKKyAqIHdoZXJlIHRoZSBwYWdlIHdhcyBmb3VuZCB3aWxsIGJlIGhlbGQgZm9yIHdyaXRlLiAgU28sIHdlIHdvbid0IHJlY2hlY2sKKyAqIHZtX2ZsYWdzIGZvciB0aGF0IFZNQS4gIFRoYXQgc2hvdWxkIGJlIE9LLCBiZWNhdXNlIHRoYXQgdm1hIHNob3VsZG4ndCBiZQorICogJ0xPQ0tFRC4KKyAqLworc3RhdGljIGludCB0cnlfdG9fdW5tYXBfYW5vbihzdHJ1Y3QgcGFnZSAqcGFnZSwgaW50IHVubG9jaywgaW50IG1pZ3JhdGlvbikKIHsKIAlzdHJ1Y3QgYW5vbl92bWEgKmFub25fdm1hOwogCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hOworCXVuc2lnbmVkIGludCBtbG9ja2VkID0gMDsKIAlpbnQgcmV0ID0gU1dBUF9BR0FJTjsKIAorCWlmIChNTE9DS19QQUdFUyAmJiB1bmxpa2VseSh1bmxvY2spKQorCQlyZXQgPSBTV0FQX1NVQ0NFU1M7CS8qIGRlZmF1bHQgZm9yIHRyeV90b19tdW5sb2NrKCkgKi8KKwogCWFub25fdm1hID0gcGFnZV9sb2NrX2Fub25fdm1hKHBhZ2UpOwogCWlmICghYW5vbl92bWEpCiAJCXJldHVybiByZXQ7CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KHZtYSwgJmFub25fdm1hLT5oZWFkLCBhbm9uX3ZtYV9ub2RlKSB7Ci0JCXJldCA9IHRyeV90b191bm1hcF9vbmUocGFnZSwgdm1hLCBtaWdyYXRpb24pOwotCQlpZiAocmV0ID09IFNXQVBfRkFJTCB8fCAhcGFnZV9tYXBwZWQocGFnZSkpCi0JCQlicmVhazsKKwkJaWYgKE1MT0NLX1BBR0VTICYmIHVubGlrZWx5KHVubG9jaykpIHsKKwkJCWlmICghKCh2bWEtPnZtX2ZsYWdzICYgVk1fTE9DS0VEKSAmJgorCQkJICAgICAgcGFnZV9tYXBwZWRfaW5fdm1hKHBhZ2UsIHZtYSkpKQorCQkJCWNvbnRpbnVlOyAgLyogbXVzdCB2aXNpdCBhbGwgdW5sb2NrZWQgdm1hcyAqLworCQkJcmV0ID0gU1dBUF9NTE9DSzsgIC8qIHNhdyBhdCBsZWFzdCBvbmUgbWxvY2tlZCB2bWEgKi8KKwkJfSBlbHNlIHsKKwkJCXJldCA9IHRyeV90b191bm1hcF9vbmUocGFnZSwgdm1hLCBtaWdyYXRpb24pOworCQkJaWYgKHJldCA9PSBTV0FQX0ZBSUwgfHwgIXBhZ2VfbWFwcGVkKHBhZ2UpKQorCQkJCWJyZWFrOworCQl9CisJCWlmIChyZXQgPT0gU1dBUF9NTE9DSykgeworCQkJbWxvY2tlZCA9IHRyeV90b19tbG9ja19wYWdlKHBhZ2UsIHZtYSk7CisJCQlpZiAobWxvY2tlZCkKKwkJCQlicmVhazsJLyogc3RvcCBpZiBhY3R1YWxseSBtbG9ja2VkIHBhZ2UgKi8KKwkJfQogCX0KIAogCXBhZ2VfdW5sb2NrX2Fub25fdm1hKGFub25fdm1hKTsKKworCWlmIChtbG9ja2VkKQorCQlyZXQgPSBTV0FQX01MT0NLOwkvKiBhY3R1YWxseSBtbG9ja2VkIHRoZSBwYWdlICovCisJZWxzZSBpZiAocmV0ID09IFNXQVBfTUxPQ0spCisJCXJldCA9IFNXQVBfQUdBSU47CS8qIHNhdyBWTV9MT0NLRUQgdm1hICovCisKIAlyZXR1cm4gcmV0OwogfQogCiAvKioKLSAqIHRyeV90b191bm1hcF9maWxlIC0gdW5tYXAgZmlsZSBwYWdlIHVzaW5nIHRoZSBvYmplY3QtYmFzZWQgcm1hcCBtZXRob2QKLSAqIEBwYWdlOiB0aGUgcGFnZSB0byB1bm1hcAotICogQG1pZ3JhdGlvbjogbWlncmF0aW9uIGZsYWcKKyAqIHRyeV90b191bm1hcF9maWxlIC0gdW5tYXAvdW5sb2NrIGZpbGUgcGFnZSB1c2luZyB0aGUgb2JqZWN0LWJhc2VkIHJtYXAgbWV0aG9kCisgKiBAcGFnZTogdGhlIHBhZ2UgdG8gdW5tYXAvdW5sb2NrCisgKiBAdW5sb2NrOiAgcmVxdWVzdCBmb3IgdW5sb2NrIHJhdGhlciB0aGFuIHVubWFwIFt1bmxpa2VseV0KKyAqIEBtaWdyYXRpb246ICB1bm1hcHBpbmcgZm9yIG1pZ3JhdGlvbiAtIGlnbm9yZWQgaWYgQHVubG9jawogICoKICAqIEZpbmQgYWxsIHRoZSBtYXBwaW5ncyBvZiBhIHBhZ2UgdXNpbmcgdGhlIG1hcHBpbmcgcG9pbnRlciBhbmQgdGhlIHZtYSBjaGFpbnMKICAqIGNvbnRhaW5lZCBpbiB0aGUgYWRkcmVzc19zcGFjZSBzdHJ1Y3QgaXQgcG9pbnRzIHRvLgogICoKLSAqIFRoaXMgZnVuY3Rpb24gaXMgb25seSBjYWxsZWQgZnJvbSB0cnlfdG9fdW5tYXAgZm9yIG9iamVjdC1iYXNlZCBwYWdlcy4KKyAqIFRoaXMgZnVuY3Rpb24gaXMgb25seSBjYWxsZWQgZnJvbSB0cnlfdG9fdW5tYXAvdHJ5X3RvX211bmxvY2sgZm9yCisgKiBvYmplY3QtYmFzZWQgcGFnZXMuCisgKiBXaGVuIGNhbGxlZCBmcm9tIHRyeV90b19tdW5sb2NrKCksIHRoZSBtbWFwX3NlbSBvZiB0aGUgbW0gY29udGFpbmluZyB0aGUgdm1hCisgKiB3aGVyZSB0aGUgcGFnZSB3YXMgZm91bmQgd2lsbCBiZSBoZWxkIGZvciB3cml0ZS4gIFNvLCB3ZSB3b24ndCByZWNoZWNrCisgKiB2bV9mbGFncyBmb3IgdGhhdCBWTUEuICBUaGF0IHNob3VsZCBiZSBPSywgYmVjYXVzZSB0aGF0IHZtYSBzaG91bGRuJ3QgYmUKKyAqICdMT0NLRUQuCiAgKi8KLXN0YXRpYyBpbnQgdHJ5X3RvX3VubWFwX2ZpbGUoc3RydWN0IHBhZ2UgKnBhZ2UsIGludCBtaWdyYXRpb24pCitzdGF0aWMgaW50IHRyeV90b191bm1hcF9maWxlKHN0cnVjdCBwYWdlICpwYWdlLCBpbnQgdW5sb2NrLCBpbnQgbWlncmF0aW9uKQogewogCXN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nID0gcGFnZS0+bWFwcGluZzsKIAlwZ29mZl90IHBnb2ZmID0gcGFnZS0+aW5kZXggPDwgKFBBR0VfQ0FDSEVfU0hJRlQgLSBQQUdFX1NISUZUKTsKQEAgLTkxNCwyMCArMTA3Miw0NCBAQAogCXVuc2lnbmVkIGxvbmcgbWF4X25sX2N1cnNvciA9IDA7CiAJdW5zaWduZWQgbG9uZyBtYXhfbmxfc2l6ZSA9IDA7CiAJdW5zaWduZWQgaW50IG1hcGNvdW50OworCXVuc2lnbmVkIGludCBtbG9ja2VkID0gMDsKKworCWlmIChNTE9DS19QQUdFUyAmJiB1bmxpa2VseSh1bmxvY2spKQorCQlyZXQgPSBTV0FQX1NVQ0NFU1M7CS8qIGRlZmF1bHQgZm9yIHRyeV90b19tdW5sb2NrKCkgKi8KIAogCXNwaW5fbG9jaygmbWFwcGluZy0+aV9tbWFwX2xvY2spOwogCXZtYV9wcmlvX3RyZWVfZm9yZWFjaCh2bWEsICZpdGVyLCAmbWFwcGluZy0+aV9tbWFwLCBwZ29mZiwgcGdvZmYpIHsKLQkJcmV0ID0gdHJ5X3RvX3VubWFwX29uZShwYWdlLCB2bWEsIG1pZ3JhdGlvbik7Ci0JCWlmIChyZXQgPT0gU1dBUF9GQUlMIHx8ICFwYWdlX21hcHBlZChwYWdlKSkKLQkJCWdvdG8gb3V0OworCQlpZiAoTUxPQ0tfUEFHRVMgJiYgdW5saWtlbHkodW5sb2NrKSkgeworCQkJaWYgKCEodm1hLT52bV9mbGFncyAmIFZNX0xPQ0tFRCkpCisJCQkJY29udGludWU7CS8qIG11c3QgdmlzaXQgYWxsIHZtYXMgKi8KKwkJCXJldCA9IFNXQVBfTUxPQ0s7CisJCX0gZWxzZSB7CisJCQlyZXQgPSB0cnlfdG9fdW5tYXBfb25lKHBhZ2UsIHZtYSwgbWlncmF0aW9uKTsKKwkJCWlmIChyZXQgPT0gU1dBUF9GQUlMIHx8ICFwYWdlX21hcHBlZChwYWdlKSkKKwkJCQlnb3RvIG91dDsKKwkJfQorCQlpZiAocmV0ID09IFNXQVBfTUxPQ0spIHsKKwkJCW1sb2NrZWQgPSB0cnlfdG9fbWxvY2tfcGFnZShwYWdlLCB2bWEpOworCQkJaWYgKG1sb2NrZWQpCisJCQkJYnJlYWs7ICAvKiBzdG9wIGlmIGFjdHVhbGx5IG1sb2NrZWQgcGFnZSAqLworCQl9CiAJfQogCisJaWYgKG1sb2NrZWQpCisJCWdvdG8gb3V0OworCiAJaWYgKGxpc3RfZW1wdHkoJm1hcHBpbmctPmlfbW1hcF9ub25saW5lYXIpKQogCQlnb3RvIG91dDsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnkodm1hLCAmbWFwcGluZy0+aV9tbWFwX25vbmxpbmVhciwKIAkJCQkJCXNoYXJlZC52bV9zZXQubGlzdCkgewotCQlpZiAoKHZtYS0+dm1fZmxhZ3MgJiBWTV9MT0NLRUQpICYmICFtaWdyYXRpb24pCisJCWlmIChNTE9DS19QQUdFUyAmJiB1bmxpa2VseSh1bmxvY2spKSB7CisJCQlpZiAoISh2bWEtPnZtX2ZsYWdzICYgVk1fTE9DS0VEKSkKKwkJCQljb250aW51ZTsJLyogbXVzdCB2aXNpdCBhbGwgdm1hcyAqLworCQkJcmV0ID0gU1dBUF9NTE9DSzsJLyogbGVhdmUgbWxvY2tlZCA9PSAwICovCisJCQlnb3RvIG91dDsJCS8qIG5vIG5lZWQgdG8gbG9vayBmdXJ0aGVyICovCisJCX0KKwkJaWYgKCFNTE9DS19QQUdFUyAmJiAhbWlncmF0aW9uICYmICh2bWEtPnZtX2ZsYWdzICYgVk1fTE9DS0VEKSkKIAkJCWNvbnRpbnVlOwogCQljdXJzb3IgPSAodW5zaWduZWQgbG9uZykgdm1hLT52bV9wcml2YXRlX2RhdGE7CiAJCWlmIChjdXJzb3IgPiBtYXhfbmxfY3Vyc29yKQpAQCAtOTM3LDcgKzExMTksNyBAQAogCQkJbWF4X25sX3NpemUgPSBjdXJzb3I7CiAJfQogCi0JaWYgKG1heF9ubF9zaXplID09IDApIHsJLyogYW55IG5vbmxpbmVhcnMgbG9ja2VkIG9yIHJlc2VydmVkICovCisJaWYgKG1heF9ubF9zaXplID09IDApIHsJLyogYWxsIG5vbmxpbmVhcnMgbG9ja2VkIG9yIHJlc2VydmVkID8gKi8KIAkJcmV0ID0gU1dBUF9GQUlMOwogCQlnb3RvIG91dDsKIAl9CkBAIC05NjEsMTIgKzExNDMsMTYgQEAKIAlkbyB7CiAJCWxpc3RfZm9yX2VhY2hfZW50cnkodm1hLCAmbWFwcGluZy0+aV9tbWFwX25vbmxpbmVhciwKIAkJCQkJCXNoYXJlZC52bV9zZXQubGlzdCkgewotCQkJaWYgKCh2bWEtPnZtX2ZsYWdzICYgVk1fTE9DS0VEKSAmJiAhbWlncmF0aW9uKQorCQkJaWYgKCFNTE9DS19QQUdFUyAmJiAhbWlncmF0aW9uICYmCisJCQkgICAgKHZtYS0+dm1fZmxhZ3MgJiBWTV9MT0NLRUQpKQogCQkJCWNvbnRpbnVlOwogCQkJY3Vyc29yID0gKHVuc2lnbmVkIGxvbmcpIHZtYS0+dm1fcHJpdmF0ZV9kYXRhOwogCQkJd2hpbGUgKCBjdXJzb3IgPCBtYXhfbmxfY3Vyc29yICYmCiAJCQkJY3Vyc29yIDwgdm1hLT52bV9lbmQgLSB2bWEtPnZtX3N0YXJ0KSB7Ci0JCQkJdHJ5X3RvX3VubWFwX2NsdXN0ZXIoY3Vyc29yLCAmbWFwY291bnQsIHZtYSk7CisJCQkJcmV0ID0gdHJ5X3RvX3VubWFwX2NsdXN0ZXIoY3Vyc29yLCAmbWFwY291bnQsCisJCQkJCQkJCXZtYSwgcGFnZSk7CisJCQkJaWYgKHJldCA9PSBTV0FQX01MT0NLKQorCQkJCQltbG9ja2VkID0gMjsJLyogdG8gcmV0dXJuIGJlbG93ICovCiAJCQkJY3Vyc29yICs9IENMVVNURVJfU0laRTsKIAkJCQl2bWEtPnZtX3ByaXZhdGVfZGF0YSA9ICh2b2lkICopIGN1cnNvcjsKIAkJCQlpZiAoKGludCltYXBjb3VudCA8PSAwKQpAQCAtOTg3LDYgKzExNzMsMTAgQEAKIAkJdm1hLT52bV9wcml2YXRlX2RhdGEgPSBOVUxMOwogb3V0OgogCXNwaW5fdW5sb2NrKCZtYXBwaW5nLT5pX21tYXBfbG9jayk7CisJaWYgKG1sb2NrZWQpCisJCXJldCA9IFNXQVBfTUxPQ0s7CS8qIGFjdHVhbGx5IG1sb2NrZWQgdGhlIHBhZ2UgKi8KKwllbHNlIGlmIChyZXQgPT0gU1dBUF9NTE9DSykKKwkJcmV0ID0gU1dBUF9BR0FJTjsJLyogc2F3IFZNX0xPQ0tFRCB2bWEgKi8KIAlyZXR1cm4gcmV0OwogfQogCkBAIC0xMDAyLDYgKzExOTIsNyBAQAogICogU1dBUF9TVUNDRVNTCS0gd2Ugc3VjY2VlZGVkIGluIHJlbW92aW5nIGFsbCBtYXBwaW5ncwogICogU1dBUF9BR0FJTgktIHdlIG1pc3NlZCBhIG1hcHBpbmcsIHRyeSBhZ2FpbiBsYXRlcgogICogU1dBUF9GQUlMCS0gdGhlIHBhZ2UgaXMgdW5zd2FwcGFibGUKKyAqIFNXQVBfTUxPQ0sJLSBwYWdlIGlzIG1sb2NrZWQuCiAgKi8KIGludCB0cnlfdG9fdW5tYXAoc3RydWN0IHBhZ2UgKnBhZ2UsIGludCBtaWdyYXRpb24pCiB7CkBAIC0xMDEwLDEyICsxMjAxLDM2IEBACiAJQlVHX09OKCFQYWdlTG9ja2VkKHBhZ2UpKTsKIAogCWlmIChQYWdlQW5vbihwYWdlKSkKLQkJcmV0ID0gdHJ5X3RvX3VubWFwX2Fub24ocGFnZSwgbWlncmF0aW9uKTsKKwkJcmV0ID0gdHJ5X3RvX3VubWFwX2Fub24ocGFnZSwgMCwgbWlncmF0aW9uKTsKIAllbHNlCi0JCXJldCA9IHRyeV90b191bm1hcF9maWxlKHBhZ2UsIG1pZ3JhdGlvbik7Ci0KLQlpZiAoIXBhZ2VfbWFwcGVkKHBhZ2UpKQorCQlyZXQgPSB0cnlfdG9fdW5tYXBfZmlsZShwYWdlLCAwLCBtaWdyYXRpb24pOworCWlmIChyZXQgIT0gU1dBUF9NTE9DSyAmJiAhcGFnZV9tYXBwZWQocGFnZSkpCiAJCXJldCA9IFNXQVBfU1VDQ0VTUzsKIAlyZXR1cm4gcmV0OwogfQogCisjaWZkZWYgQ09ORklHX1VORVZJQ1RBQkxFX0xSVQorLyoqCisgKiB0cnlfdG9fbXVubG9jayAtIHRyeSB0byBtdW5sb2NrIGEgcGFnZQorICogQHBhZ2U6IHRoZSBwYWdlIHRvIGJlIG11bmxvY2tlZAorICoKKyAqIENhbGxlZCBmcm9tIG11bmxvY2sgY29kZS4gIENoZWNrcyBhbGwgb2YgdGhlIFZNQXMgbWFwcGluZyB0aGUgcGFnZQorICogdG8gbWFrZSBzdXJlIG5vYm9keSBlbHNlIGhhcyB0aGlzIHBhZ2UgbWxvY2tlZC4gVGhlIHBhZ2Ugd2lsbCBiZQorICogcmV0dXJuZWQgd2l0aCBQR19tbG9ja2VkIGNsZWFyZWQgaWYgbm8gb3RoZXIgdm1hcyBoYXZlIGl0IG1sb2NrZWQuCisgKgorICogUmV0dXJuIHZhbHVlcyBhcmU6CisgKgorICogU1dBUF9TVUNDRVNTCS0gbm8gdm1hJ3MgaG9sZGluZyBwYWdlIG1sb2NrZWQuCisgKiBTV0FQX0FHQUlOCS0gcGFnZSBtYXBwZWQgaW4gbWxvY2tlZCB2bWEgLS0gY291bGRuJ3QgYWNxdWlyZSBtbWFwIHNlbQorICogU1dBUF9NTE9DSwktIHBhZ2UgaXMgbm93IG1sb2NrZWQuCisgKi8KK2ludCB0cnlfdG9fbXVubG9jayhzdHJ1Y3QgcGFnZSAqcGFnZSkKK3sKKwlWTV9CVUdfT04oIVBhZ2VMb2NrZWQocGFnZSkgfHwgUGFnZUxSVShwYWdlKSk7CisKKwlpZiAoUGFnZUFub24ocGFnZSkpCisJCXJldHVybiB0cnlfdG9fdW5tYXBfYW5vbihwYWdlLCAxLCAwKTsKKwllbHNlCisJCXJldHVybiB0cnlfdG9fdW5tYXBfZmlsZShwYWdlLCAxLCAwKTsKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbW0vc2htZW0uYyBiL21tL3NobWVtLmMKaW5kZXggMDRmYjRmMS4uZDM4ZDdlNiAxMDA2NDQKLS0tIGEvbW0vc2htZW0uYworKysgYi9tbS9zaG1lbS5jCkBAIC01MCwxNCArNTAsMTIgQEAKICNpbmNsdWRlIDxsaW51eC9taWdyYXRlLmg+CiAjaW5jbHVkZSA8bGludXgvaGlnaG1lbS5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CisjaW5jbHVkZSA8bGludXgvbWFnaWMuaD4KIAogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8YXNtL2RpdjY0Lmg+CiAjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KIAotLyogVGhpcyBtYWdpYyBudW1iZXIgaXMgdXNlZCBpbiBnbGliYyBmb3IgcG9zaXggc2hhcmVkIG1lbW9yeSAqLwotI2RlZmluZSBUTVBGU19NQUdJQwkweDAxMDIxOTk0Ci0KICNkZWZpbmUgRU5UUklFU19QRVJfUEFHRSAoUEFHRV9DQUNIRV9TSVpFL3NpemVvZih1bnNpZ25lZCBsb25nKSkKICNkZWZpbmUgRU5UUklFU19QRVJfUEFHRVBBR0UgKEVOVFJJRVNfUEVSX1BBR0UqRU5UUklFU19QRVJfUEFHRSkKICNkZWZpbmUgQkxPQ0tTX1BFUl9QQUdFICAoUEFHRV9DQUNIRV9TSVpFLzUxMikKQEAgLTIwMSw3ICsxOTksNyBAQAogCiBzdGF0aWMgc3RydWN0IGJhY2tpbmdfZGV2X2luZm8gc2htZW1fYmFja2luZ19kZXZfaW5mbyAgX19yZWFkX21vc3RseSA9IHsKIAkucmFfcGFnZXMJPSAwLAkvKiBObyByZWFkYWhlYWQgKi8KLQkuY2FwYWJpbGl0aWVzCT0gQkRJX0NBUF9OT19BQ0NUX0FORF9XUklURUJBQ0ssCisJLmNhcGFiaWxpdGllcwk9IEJESV9DQVBfTk9fQUNDVF9BTkRfV1JJVEVCQUNLIHwgQkRJX0NBUF9TV0FQX0JBQ0tFRCwKIAkudW5wbHVnX2lvX2ZuCT0gZGVmYXVsdF91bnBsdWdfaW9fZm4sCiB9OwogCkBAIC0xMzY5LDYgKzEzNjcsNyBAQAogCQkJCWVycm9yID0gLUVOT01FTTsKIAkJCQlnb3RvIGZhaWxlZDsKIAkJCX0KKwkJCVNldFBhZ2VTd2FwQmFja2VkKGZpbGVwYWdlKTsKIAogCQkJLyogUHJlY2hhcmdlIHBhZ2Ugd2hpbGUgd2UgY2FuIHdhaXQsIGNvbXBlbnNhdGUgYWZ0ZXIgKi8KIAkJCWVycm9yID0gbWVtX2Nncm91cF9jYWNoZV9jaGFyZ2UoZmlsZXBhZ2UsIGN1cnJlbnQtPm1tLApAQCAtMTQ3OCwxMiArMTQ3NywxNiBAQAogCQlpZiAoIXVzZXJfc2htX2xvY2soaW5vZGUtPmlfc2l6ZSwgdXNlcikpCiAJCQlnb3RvIG91dF9ub21lbTsKIAkJaW5mby0+ZmxhZ3MgfD0gVk1fTE9DS0VEOworCQltYXBwaW5nX3NldF91bmV2aWN0YWJsZShmaWxlLT5mX21hcHBpbmcpOwogCX0KIAlpZiAoIWxvY2sgJiYgKGluZm8tPmZsYWdzICYgVk1fTE9DS0VEKSAmJiB1c2VyKSB7CiAJCXVzZXJfc2htX3VubG9jayhpbm9kZS0+aV9zaXplLCB1c2VyKTsKIAkJaW5mby0+ZmxhZ3MgJj0gflZNX0xPQ0tFRDsKKwkJbWFwcGluZ19jbGVhcl91bmV2aWN0YWJsZShmaWxlLT5mX21hcHBpbmcpOworCQlzY2FuX21hcHBpbmdfdW5ldmljdGFibGVfcGFnZXMoZmlsZS0+Zl9tYXBwaW5nKTsKIAl9CiAJcmV0dmFsID0gMDsKKwogb3V0X25vbWVtOgogCXNwaW5fdW5sb2NrKCZpbmZvLT5sb2NrKTsKIAlyZXR1cm4gcmV0dmFsOwpAQCAtMjU4Miw2ICsyNTg1LDcgQEAKIAlzaG1lbV91bmFjY3Rfc2l6ZShmbGFncywgc2l6ZSk7CiAJcmV0dXJuIEVSUl9QVFIoZXJyb3IpOwogfQorRVhQT1JUX1NZTUJPTF9HUEwoc2htZW1fZmlsZV9zZXR1cCk7CiAKIC8qKgogICogc2htZW1femVyb19zZXR1cCAtIHNldHVwIGEgc2hhcmVkIGFub255bW91cyBtYXBwaW5nCmRpZmYgLS1naXQgYS9tbS9zd2FwLmMgYi9tbS9zd2FwLmMKaW5kZXggOWUwY2IzMS4uMjE1MmU0OCAxMDA2NDQKLS0tIGEvbW0vc3dhcC5jCisrKyBiL21tL3N3YXAuYwpAQCAtMzEsMTEgKzMxLDEyIEBACiAjaW5jbHVkZSA8bGludXgvYmFja2luZy1kZXYuaD4KICNpbmNsdWRlIDxsaW51eC9tZW1jb250cm9sLmg+CiAKKyNpbmNsdWRlICJpbnRlcm5hbC5oIgorCiAvKiBIb3cgbWFueSBwYWdlcyBkbyB3ZSB0cnkgdG8gc3dhcCBvciBwYWdlIGluL291dCB0b2dldGhlcj8gKi8KIGludCBwYWdlX2NsdXN0ZXI7CiAKLXN0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgcGFnZXZlYywgbHJ1X2FkZF9wdmVjcyk7Ci1zdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IHBhZ2V2ZWMsIGxydV9hZGRfYWN0aXZlX3B2ZWNzKTsKK3N0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgcGFnZXZlY1tOUl9MUlVfTElTVFNdLCBscnVfYWRkX3B2ZWNzKTsKIHN0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgcGFnZXZlYywgbHJ1X3JvdGF0ZV9wdmVjcyk7CiAKIC8qCkBAIC0xMTYsOCArMTE3LDkgQEAKIAkJCXpvbmUgPSBwYWdlem9uZTsKIAkJCXNwaW5fbG9jaygmem9uZS0+bHJ1X2xvY2spOwogCQl9Ci0JCWlmIChQYWdlTFJVKHBhZ2UpICYmICFQYWdlQWN0aXZlKHBhZ2UpKSB7Ci0JCQlsaXN0X21vdmVfdGFpbCgmcGFnZS0+bHJ1LCAmem9uZS0+aW5hY3RpdmVfbGlzdCk7CisJCWlmIChQYWdlTFJVKHBhZ2UpICYmICFQYWdlQWN0aXZlKHBhZ2UpICYmICFQYWdlVW5ldmljdGFibGUocGFnZSkpIHsKKwkJCWludCBscnUgPSBwYWdlX2lzX2ZpbGVfY2FjaGUocGFnZSk7CisJCQlsaXN0X21vdmVfdGFpbCgmcGFnZS0+bHJ1LCAmem9uZS0+bHJ1W2xydV0ubGlzdCk7CiAJCQlwZ21vdmVkKys7CiAJCX0KIAl9CkBAIC0xMzYsNyArMTM4LDcgQEAKIHZvaWQgIHJvdGF0ZV9yZWNsYWltYWJsZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlKQogewogCWlmICghUGFnZUxvY2tlZChwYWdlKSAmJiAhUGFnZURpcnR5KHBhZ2UpICYmICFQYWdlQWN0aXZlKHBhZ2UpICYmCi0JICAgIFBhZ2VMUlUocGFnZSkpIHsKKwkgICAgIVBhZ2VVbmV2aWN0YWJsZShwYWdlKSAmJiBQYWdlTFJVKHBhZ2UpKSB7CiAJCXN0cnVjdCBwYWdldmVjICpwdmVjOwogCQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCkBAIC0xNTcsMTIgKzE1OSwxOSBAQAogCXN0cnVjdCB6b25lICp6b25lID0gcGFnZV96b25lKHBhZ2UpOwogCiAJc3Bpbl9sb2NrX2lycSgmem9uZS0+bHJ1X2xvY2spOwotCWlmIChQYWdlTFJVKHBhZ2UpICYmICFQYWdlQWN0aXZlKHBhZ2UpKSB7Ci0JCWRlbF9wYWdlX2Zyb21faW5hY3RpdmVfbGlzdCh6b25lLCBwYWdlKTsKKwlpZiAoUGFnZUxSVShwYWdlKSAmJiAhUGFnZUFjdGl2ZShwYWdlKSAmJiAhUGFnZVVuZXZpY3RhYmxlKHBhZ2UpKSB7CisJCWludCBmaWxlID0gcGFnZV9pc19maWxlX2NhY2hlKHBhZ2UpOworCQlpbnQgbHJ1ID0gTFJVX0JBU0UgKyBmaWxlOworCQlkZWxfcGFnZV9mcm9tX2xydV9saXN0KHpvbmUsIHBhZ2UsIGxydSk7CisKIAkJU2V0UGFnZUFjdGl2ZShwYWdlKTsKLQkJYWRkX3BhZ2VfdG9fYWN0aXZlX2xpc3Qoem9uZSwgcGFnZSk7CisJCWxydSArPSBMUlVfQUNUSVZFOworCQlhZGRfcGFnZV90b19scnVfbGlzdCh6b25lLCBwYWdlLCBscnUpOwogCQlfX2NvdW50X3ZtX2V2ZW50KFBHQUNUSVZBVEUpOwotCQltZW1fY2dyb3VwX21vdmVfbGlzdHMocGFnZSwgdHJ1ZSk7CisJCW1lbV9jZ3JvdXBfbW92ZV9saXN0cyhwYWdlLCBscnUpOworCisJCXpvbmUtPnJlY2VudF9yb3RhdGVkWyEhZmlsZV0rKzsKKwkJem9uZS0+cmVjZW50X3NjYW5uZWRbISFmaWxlXSsrOwogCX0KIAlzcGluX3VubG9ja19pcnEoJnpvbmUtPmxydV9sb2NrKTsKIH0KQEAgLTE3Niw3ICsxODUsOCBAQAogICovCiB2b2lkIG1hcmtfcGFnZV9hY2Nlc3NlZChzdHJ1Y3QgcGFnZSAqcGFnZSkKIHsKLQlpZiAoIVBhZ2VBY3RpdmUocGFnZSkgJiYgUGFnZVJlZmVyZW5jZWQocGFnZSkgJiYgUGFnZUxSVShwYWdlKSkgeworCWlmICghUGFnZUFjdGl2ZShwYWdlKSAmJiAhUGFnZVVuZXZpY3RhYmxlKHBhZ2UpICYmCisJCQlQYWdlUmVmZXJlbmNlZChwYWdlKSAmJiBQYWdlTFJVKHBhZ2UpKSB7CiAJCWFjdGl2YXRlX3BhZ2UocGFnZSk7CiAJCUNsZWFyUGFnZVJlZmVyZW5jZWQocGFnZSk7CiAJfSBlbHNlIGlmICghUGFnZVJlZmVyZW5jZWQocGFnZSkpIHsKQEAgLTE4NiwyOCArMTk2LDczIEBACiAKIEVYUE9SVF9TWU1CT0wobWFya19wYWdlX2FjY2Vzc2VkKTsKIAotLyoqCi0gKiBscnVfY2FjaGVfYWRkOiBhZGQgYSBwYWdlIHRvIHRoZSBwYWdlIGxpc3RzCi0gKiBAcGFnZTogdGhlIHBhZ2UgdG8gYWRkCi0gKi8KLXZvaWQgbHJ1X2NhY2hlX2FkZChzdHJ1Y3QgcGFnZSAqcGFnZSkKK3ZvaWQgX19scnVfY2FjaGVfYWRkKHN0cnVjdCBwYWdlICpwYWdlLCBlbnVtIGxydV9saXN0IGxydSkKIHsKLQlzdHJ1Y3QgcGFnZXZlYyAqcHZlYyA9ICZnZXRfY3B1X3ZhcihscnVfYWRkX3B2ZWNzKTsKKwlzdHJ1Y3QgcGFnZXZlYyAqcHZlYyA9ICZnZXRfY3B1X3ZhcihscnVfYWRkX3B2ZWNzKVtscnVdOwogCiAJcGFnZV9jYWNoZV9nZXQocGFnZSk7CiAJaWYgKCFwYWdldmVjX2FkZChwdmVjLCBwYWdlKSkKLQkJX19wYWdldmVjX2xydV9hZGQocHZlYyk7CisJCV9fX19wYWdldmVjX2xydV9hZGQocHZlYywgbHJ1KTsKIAlwdXRfY3B1X3ZhcihscnVfYWRkX3B2ZWNzKTsKIH0KIAotdm9pZCBscnVfY2FjaGVfYWRkX2FjdGl2ZShzdHJ1Y3QgcGFnZSAqcGFnZSkKKy8qKgorICogbHJ1X2NhY2hlX2FkZF9scnUgLSBhZGQgYSBwYWdlIHRvIGEgcGFnZSBsaXN0CisgKiBAcGFnZTogdGhlIHBhZ2UgdG8gYmUgYWRkZWQgdG8gdGhlIExSVS4KKyAqIEBscnU6IHRoZSBMUlUgbGlzdCB0byB3aGljaCB0aGUgcGFnZSBpcyBhZGRlZC4KKyAqLwordm9pZCBscnVfY2FjaGVfYWRkX2xydShzdHJ1Y3QgcGFnZSAqcGFnZSwgZW51bSBscnVfbGlzdCBscnUpCiB7Ci0Jc3RydWN0IHBhZ2V2ZWMgKnB2ZWMgPSAmZ2V0X2NwdV92YXIobHJ1X2FkZF9hY3RpdmVfcHZlY3MpOworCWlmIChQYWdlQWN0aXZlKHBhZ2UpKSB7CisJCVZNX0JVR19PTihQYWdlVW5ldmljdGFibGUocGFnZSkpOworCQlDbGVhclBhZ2VBY3RpdmUocGFnZSk7CisJfSBlbHNlIGlmIChQYWdlVW5ldmljdGFibGUocGFnZSkpIHsKKwkJVk1fQlVHX09OKFBhZ2VBY3RpdmUocGFnZSkpOworCQlDbGVhclBhZ2VVbmV2aWN0YWJsZShwYWdlKTsKKwl9CiAKLQlwYWdlX2NhY2hlX2dldChwYWdlKTsKLQlpZiAoIXBhZ2V2ZWNfYWRkKHB2ZWMsIHBhZ2UpKQotCQlfX3BhZ2V2ZWNfbHJ1X2FkZF9hY3RpdmUocHZlYyk7Ci0JcHV0X2NwdV92YXIobHJ1X2FkZF9hY3RpdmVfcHZlY3MpOworCVZNX0JVR19PTihQYWdlTFJVKHBhZ2UpIHx8IFBhZ2VBY3RpdmUocGFnZSkgfHwgUGFnZVVuZXZpY3RhYmxlKHBhZ2UpKTsKKwlfX2xydV9jYWNoZV9hZGQocGFnZSwgbHJ1KTsKK30KKworLyoqCisgKiBhZGRfcGFnZV90b191bmV2aWN0YWJsZV9saXN0IC0gYWRkIGEgcGFnZSB0byB0aGUgdW5ldmljdGFibGUgbGlzdAorICogQHBhZ2U6ICB0aGUgcGFnZSB0byBiZSBhZGRlZCB0byB0aGUgdW5ldmljdGFibGUgbGlzdAorICoKKyAqIEFkZCBwYWdlIGRpcmVjdGx5IHRvIGl0cyB6b25lJ3MgdW5ldmljdGFibGUgbGlzdC4gIFRvIGF2b2lkIHJhY2VzIHdpdGgKKyAqIHRhc2tzIHRoYXQgbWlnaHQgYmUgbWFraW5nIHRoZSBwYWdlIGV2aWN0YWJsZSwgdGhyb3VnaCBlZy4gbXVubG9jaywKKyAqIG11bm1hcCBvciBleGl0LCB3aGlsZSBpdCdzIG5vdCBvbiB0aGUgbHJ1LCB3ZSB3YW50IHRvIGFkZCB0aGUgcGFnZQorICogd2hpbGUgaXQncyBsb2NrZWQgb3Igb3RoZXJ3aXNlICJpbnZpc2libGUiIHRvIG90aGVyIHRhc2tzLiAgVGhpcyBpcworICogZGlmZmljdWx0IHRvIGRvIHdoZW4gdXNpbmcgdGhlIHBhZ2V2ZWMgY2FjaGUsIHNvIGJ5cGFzcyB0aGF0LgorICovCit2b2lkIGFkZF9wYWdlX3RvX3VuZXZpY3RhYmxlX2xpc3Qoc3RydWN0IHBhZ2UgKnBhZ2UpCit7CisJc3RydWN0IHpvbmUgKnpvbmUgPSBwYWdlX3pvbmUocGFnZSk7CisKKwlzcGluX2xvY2tfaXJxKCZ6b25lLT5scnVfbG9jayk7CisJU2V0UGFnZVVuZXZpY3RhYmxlKHBhZ2UpOworCVNldFBhZ2VMUlUocGFnZSk7CisJYWRkX3BhZ2VfdG9fbHJ1X2xpc3Qoem9uZSwgcGFnZSwgTFJVX1VORVZJQ1RBQkxFKTsKKwlzcGluX3VubG9ja19pcnEoJnpvbmUtPmxydV9sb2NrKTsKK30KKworLyoqCisgKiBscnVfY2FjaGVfYWRkX2FjdGl2ZV9vcl91bmV2aWN0YWJsZQorICogQHBhZ2U6ICB0aGUgcGFnZSB0byBiZSBhZGRlZCB0byBMUlUKKyAqIEB2bWE6ICAgdm1hIGluIHdoaWNoIHBhZ2UgaXMgbWFwcGVkIGZvciBkZXRlcm1pbmluZyByZWNsYWltYWJpbGl0eQorICoKKyAqIHBsYWNlIEBwYWdlIG9uIGFjdGl2ZSBvciB1bmV2aWN0YWJsZSBMUlUgbGlzdCwgZGVwZW5kaW5nIG9uCisgKiBwYWdlX2V2aWN0YWJsZSgpLiAgTm90ZSB0aGF0IGlmIHRoZSBwYWdlIGlzIG5vdCBldmljdGFibGUsCisgKiBpdCBnb2VzIGRpcmVjdGx5IGJhY2sgb250byBpdCdzIHpvbmUncyB1bmV2aWN0YWJsZSBsaXN0LiAgSXQgZG9lcworICogTk9UIHVzZSBhIHBlciBjcHUgcGFnZXZlYy4KKyAqLwordm9pZCBscnVfY2FjaGVfYWRkX2FjdGl2ZV9vcl91bmV2aWN0YWJsZShzdHJ1Y3QgcGFnZSAqcGFnZSwKKwkJCQkJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCit7CisJaWYgKHBhZ2VfZXZpY3RhYmxlKHBhZ2UsIHZtYSkpCisJCWxydV9jYWNoZV9hZGRfbHJ1KHBhZ2UsIExSVV9BQ1RJVkUgKyBwYWdlX2lzX2ZpbGVfY2FjaGUocGFnZSkpOworCWVsc2UKKwkJYWRkX3BhZ2VfdG9fdW5ldmljdGFibGVfbGlzdChwYWdlKTsKIH0KIAogLyoKQEAgLTIxNywxNSArMjcyLDE1IEBACiAgKi8KIHN0YXRpYyB2b2lkIGRyYWluX2NwdV9wYWdldmVjcyhpbnQgY3B1KQogeworCXN0cnVjdCBwYWdldmVjICpwdmVjcyA9IHBlcl9jcHUobHJ1X2FkZF9wdmVjcywgY3B1KTsKIAlzdHJ1Y3QgcGFnZXZlYyAqcHZlYzsKKwlpbnQgbHJ1OwogCi0JcHZlYyA9ICZwZXJfY3B1KGxydV9hZGRfcHZlY3MsIGNwdSk7Ci0JaWYgKHBhZ2V2ZWNfY291bnQocHZlYykpCi0JCV9fcGFnZXZlY19scnVfYWRkKHB2ZWMpOwotCi0JcHZlYyA9ICZwZXJfY3B1KGxydV9hZGRfYWN0aXZlX3B2ZWNzLCBjcHUpOwotCWlmIChwYWdldmVjX2NvdW50KHB2ZWMpKQotCQlfX3BhZ2V2ZWNfbHJ1X2FkZF9hY3RpdmUocHZlYyk7CisJZm9yX2VhY2hfbHJ1KGxydSkgeworCQlwdmVjID0gJnB2ZWNzW2xydSAtIExSVV9CQVNFXTsKKwkJaWYgKHBhZ2V2ZWNfY291bnQocHZlYykpCisJCQlfX19fcGFnZXZlY19scnVfYWRkKHB2ZWMsIGxydSk7CisJfQogCiAJcHZlYyA9ICZwZXJfY3B1KGxydV9yb3RhdGVfcHZlY3MsIGNwdSk7CiAJaWYgKHBhZ2V2ZWNfY291bnQocHZlYykpIHsKQEAgLTI0NCw3ICsyOTksNyBAQAogCXB1dF9jcHUoKTsKIH0KIAotI2lmZGVmIENPTkZJR19OVU1BCisjaWYgZGVmaW5lZChDT05GSUdfTlVNQSkgfHwgZGVmaW5lZChDT05GSUdfVU5FVklDVEFCTEVfTFJVKQogc3RhdGljIHZvaWQgbHJ1X2FkZF9kcmFpbl9wZXJfY3B1KHN0cnVjdCB3b3JrX3N0cnVjdCAqZHVtbXkpCiB7CiAJbHJ1X2FkZF9kcmFpbigpOwpAQCAtMzA4LDYgKzM2Myw3IEBACiAKIAkJaWYgKFBhZ2VMUlUocGFnZSkpIHsKIAkJCXN0cnVjdCB6b25lICpwYWdlem9uZSA9IHBhZ2Vfem9uZShwYWdlKTsKKwogCQkJaWYgKHBhZ2V6b25lICE9IHpvbmUpIHsKIAkJCQlpZiAoem9uZSkKIAkJCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmem9uZS0+bHJ1X2xvY2ssCkBAIC0zODAsMTAgKzQzNiwxMSBAQAogICogQWRkIHRoZSBwYXNzZWQgcGFnZXMgdG8gdGhlIExSVSwgdGhlbiBkcm9wIHRoZSBjYWxsZXIncyByZWZjb3VudAogICogb24gdGhlbS4gIFJlaW5pdGlhbGlzZXMgdGhlIGNhbGxlcidzIHBhZ2V2ZWMuCiAgKi8KLXZvaWQgX19wYWdldmVjX2xydV9hZGQoc3RydWN0IHBhZ2V2ZWMgKnB2ZWMpCit2b2lkIF9fX19wYWdldmVjX2xydV9hZGQoc3RydWN0IHBhZ2V2ZWMgKnB2ZWMsIGVudW0gbHJ1X2xpc3QgbHJ1KQogewogCWludCBpOwogCXN0cnVjdCB6b25lICp6b25lID0gTlVMTDsKKwlWTV9CVUdfT04oaXNfdW5ldmljdGFibGVfbHJ1KGxydSkpOwogCiAJZm9yIChpID0gMDsgaSA8IHBhZ2V2ZWNfY291bnQocHZlYyk7IGkrKykgewogCQlzdHJ1Y3QgcGFnZSAqcGFnZSA9IHB2ZWMtPnBhZ2VzW2ldOwpAQCAtMzk1LDM4ICs0NTIsMTMgQEAKIAkJCXpvbmUgPSBwYWdlem9uZTsKIAkJCXNwaW5fbG9ja19pcnEoJnpvbmUtPmxydV9sb2NrKTsKIAkJfQotCQlWTV9CVUdfT04oUGFnZUxSVShwYWdlKSk7Ci0JCVNldFBhZ2VMUlUocGFnZSk7Ci0JCWFkZF9wYWdlX3RvX2luYWN0aXZlX2xpc3Qoem9uZSwgcGFnZSk7Ci0JfQotCWlmICh6b25lKQotCQlzcGluX3VubG9ja19pcnEoJnpvbmUtPmxydV9sb2NrKTsKLQlyZWxlYXNlX3BhZ2VzKHB2ZWMtPnBhZ2VzLCBwdmVjLT5uciwgcHZlYy0+Y29sZCk7Ci0JcGFnZXZlY19yZWluaXQocHZlYyk7Ci19Ci0KLUVYUE9SVF9TWU1CT0woX19wYWdldmVjX2xydV9hZGQpOwotCi12b2lkIF9fcGFnZXZlY19scnVfYWRkX2FjdGl2ZShzdHJ1Y3QgcGFnZXZlYyAqcHZlYykKLXsKLQlpbnQgaTsKLQlzdHJ1Y3Qgem9uZSAqem9uZSA9IE5VTEw7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgcGFnZXZlY19jb3VudChwdmVjKTsgaSsrKSB7Ci0JCXN0cnVjdCBwYWdlICpwYWdlID0gcHZlYy0+cGFnZXNbaV07Ci0JCXN0cnVjdCB6b25lICpwYWdlem9uZSA9IHBhZ2Vfem9uZShwYWdlKTsKLQotCQlpZiAocGFnZXpvbmUgIT0gem9uZSkgewotCQkJaWYgKHpvbmUpCi0JCQkJc3Bpbl91bmxvY2tfaXJxKCZ6b25lLT5scnVfbG9jayk7Ci0JCQl6b25lID0gcGFnZXpvbmU7Ci0JCQlzcGluX2xvY2tfaXJxKCZ6b25lLT5scnVfbG9jayk7Ci0JCX0KLQkJVk1fQlVHX09OKFBhZ2VMUlUocGFnZSkpOwotCQlTZXRQYWdlTFJVKHBhZ2UpOwogCQlWTV9CVUdfT04oUGFnZUFjdGl2ZShwYWdlKSk7Ci0JCVNldFBhZ2VBY3RpdmUocGFnZSk7Ci0JCWFkZF9wYWdlX3RvX2FjdGl2ZV9saXN0KHpvbmUsIHBhZ2UpOworCQlWTV9CVUdfT04oUGFnZVVuZXZpY3RhYmxlKHBhZ2UpKTsKKwkJVk1fQlVHX09OKFBhZ2VMUlUocGFnZSkpOworCQlTZXRQYWdlTFJVKHBhZ2UpOworCQlpZiAoaXNfYWN0aXZlX2xydShscnUpKQorCQkJU2V0UGFnZUFjdGl2ZShwYWdlKTsKKwkJYWRkX3BhZ2VfdG9fbHJ1X2xpc3Qoem9uZSwgcGFnZSwgbHJ1KTsKIAl9CiAJaWYgKHpvbmUpCiAJCXNwaW5fdW5sb2NrX2lycSgmem9uZS0+bHJ1X2xvY2spOwpAQCAtNDM0LDYgKzQ2Niw4IEBACiAJcGFnZXZlY19yZWluaXQocHZlYyk7CiB9CiAKK0VYUE9SVF9TWU1CT0woX19fX3BhZ2V2ZWNfbHJ1X2FkZCk7CisKIC8qCiAgKiBUcnkgdG8gZHJvcCBidWZmZXJzIGZyb20gdGhlIHBhZ2VzIGluIGEgcGFnZXZlYwogICovCkBAIC00NTMsNiArNDg3LDMwIEBACiB9CiAKIC8qKgorICogcGFnZXZlY19zd2FwX2ZyZWUgLSB0cnkgdG8gZnJlZSBzd2FwIHNwYWNlIGZyb20gdGhlIHBhZ2VzIGluIGEgcGFnZXZlYworICogQHB2ZWM6IHBhZ2V2ZWMgd2l0aCBzd2FwY2FjaGUgcGFnZXMgdG8gZnJlZSB0aGUgc3dhcCBzcGFjZSBvZgorICoKKyAqIFRoZSBjYWxsZXIgbmVlZHMgdG8gaG9sZCBhbiBleHRyYSByZWZlcmVuY2UgdG8gZWFjaCBwYWdlIGFuZAorICogbm90IGhvbGQgdGhlIHBhZ2UgbG9jayBvbiB0aGUgcGFnZXMuICBUaGlzIGZ1bmN0aW9uIHVzZXMgYQorICogdHJ5bG9jayBvbiB0aGUgcGFnZSBsb2NrIHNvIGl0IG1heSBub3QgYWx3YXlzIGZyZWUgdGhlIHN3YXAKKyAqIHNwYWNlIGFzc29jaWF0ZWQgd2l0aCBhIHBhZ2UuCisgKi8KK3ZvaWQgcGFnZXZlY19zd2FwX2ZyZWUoc3RydWN0IHBhZ2V2ZWMgKnB2ZWMpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgcGFnZXZlY19jb3VudChwdmVjKTsgaSsrKSB7CisJCXN0cnVjdCBwYWdlICpwYWdlID0gcHZlYy0+cGFnZXNbaV07CisKKwkJaWYgKFBhZ2VTd2FwQ2FjaGUocGFnZSkgJiYgdHJ5bG9ja19wYWdlKHBhZ2UpKSB7CisJCQlpZiAoUGFnZVN3YXBDYWNoZShwYWdlKSkKKwkJCQlyZW1vdmVfZXhjbHVzaXZlX3N3YXBfcGFnZV9yZWYocGFnZSk7CisJCQl1bmxvY2tfcGFnZShwYWdlKTsKKwkJfQorCX0KK30KKworLyoqCiAgKiBwYWdldmVjX2xvb2t1cCAtIGdhbmcgcGFnZWNhY2hlIGxvb2t1cAogICogQHB2ZWM6CVdoZXJlIHRoZSByZXN1bHRpbmcgcGFnZXMgYXJlIHBsYWNlZAogICogQG1hcHBpbmc6CVRoZSBhZGRyZXNzX3NwYWNlIHRvIHNlYXJjaApkaWZmIC0tZ2l0IGEvbW0vc3dhcF9zdGF0ZS5jIGIvbW0vc3dhcF9zdGF0ZS5jCmluZGV4IDc5N2MzODMuLjMzNTNjOTAgMTAwNjQ0Ci0tLSBhL21tL3N3YXBfc3RhdGUuYworKysgYi9tbS9zd2FwX3N0YXRlLmMKQEAgLTMzLDcgKzMzLDcgQEAKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgYmFja2luZ19kZXZfaW5mbyBzd2FwX2JhY2tpbmdfZGV2X2luZm8gPSB7Ci0JLmNhcGFiaWxpdGllcwk9IEJESV9DQVBfTk9fQUNDVF9BTkRfV1JJVEVCQUNLLAorCS5jYXBhYmlsaXRpZXMJPSBCRElfQ0FQX05PX0FDQ1RfQU5EX1dSSVRFQkFDSyB8IEJESV9DQVBfU1dBUF9CQUNLRUQsCiAJLnVucGx1Z19pb19mbgk9IHN3YXBfdW5wbHVnX2lvX2ZuLAogfTsKIApAQCAtNzUsNiArNzUsNyBAQAogCUJVR19PTighUGFnZUxvY2tlZChwYWdlKSk7CiAJQlVHX09OKFBhZ2VTd2FwQ2FjaGUocGFnZSkpOwogCUJVR19PTihQYWdlUHJpdmF0ZShwYWdlKSk7CisJQlVHX09OKCFQYWdlU3dhcEJhY2tlZChwYWdlKSk7CiAJZXJyb3IgPSByYWRpeF90cmVlX3ByZWxvYWQoZ2ZwX21hc2spOwogCWlmICghZXJyb3IpIHsKIAkJcGFnZV9jYWNoZV9nZXQocGFnZSk7CkBAIC0zMDIsMTcgKzMwMywxOSBAQAogCQkgKiByZS11c2luZyB0aGUganVzdCBmcmVlZCBzd2FwIGVudHJ5IGZvciBhbiBleGlzdGluZyBwYWdlLgogCQkgKiBNYXkgZmFpbCAoLUVOT01FTSkgaWYgcmFkaXgtdHJlZSBub2RlIGFsbG9jYXRpb24gZmFpbGVkLgogCQkgKi8KLQkJc2V0X3BhZ2VfbG9ja2VkKG5ld19wYWdlKTsKKwkJX19zZXRfcGFnZV9sb2NrZWQobmV3X3BhZ2UpOworCQlTZXRQYWdlU3dhcEJhY2tlZChuZXdfcGFnZSk7CiAJCWVyciA9IGFkZF90b19zd2FwX2NhY2hlKG5ld19wYWdlLCBlbnRyeSwgZ2ZwX21hc2sgJiBHRlBfS0VSTkVMKTsKIAkJaWYgKGxpa2VseSghZXJyKSkgewogCQkJLyoKIAkJCSAqIEluaXRpYXRlIHJlYWQgaW50byBsb2NrZWQgcGFnZSBhbmQgcmV0dXJuLgogCQkJICovCi0JCQlscnVfY2FjaGVfYWRkX2FjdGl2ZShuZXdfcGFnZSk7CisJCQlscnVfY2FjaGVfYWRkX2Fub24obmV3X3BhZ2UpOwogCQkJc3dhcF9yZWFkcGFnZShOVUxMLCBuZXdfcGFnZSk7CiAJCQlyZXR1cm4gbmV3X3BhZ2U7CiAJCX0KLQkJY2xlYXJfcGFnZV9sb2NrZWQobmV3X3BhZ2UpOworCQlDbGVhclBhZ2VTd2FwQmFja2VkKG5ld19wYWdlKTsKKwkJX19jbGVhcl9wYWdlX2xvY2tlZChuZXdfcGFnZSk7CiAJCXN3YXBfZnJlZShlbnRyeSk7CiAJfSB3aGlsZSAoZXJyICE9IC1FTk9NRU0pOwogCmRpZmYgLS1naXQgYS9tbS9zd2FwZmlsZS5jIGIvbW0vc3dhcGZpbGUuYwppbmRleCAxZTMzMGYyLi45MGNiNjdhIDEwMDY0NAotLS0gYS9tbS9zd2FwZmlsZS5jCisrKyBiL21tL3N3YXBmaWxlLmMKQEAgLTM0NCw3ICszNDQsNyBAQAogICogV29yayBvdXQgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBwcm9jZXNzZXMgc2hhcmluZyB0aGlzCiAgKiBzd2FwIGNhY2hlIHBhZ2UuIEZyZWUgaXQgaWYgeW91IGNhbi4gUmV0dXJuIHN1Y2Nlc3MuCiAgKi8KLWludCByZW1vdmVfZXhjbHVzaXZlX3N3YXBfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSkKK3N0YXRpYyBpbnQgcmVtb3ZlX2V4Y2x1c2l2ZV9zd2FwX3BhZ2VfY291bnQoc3RydWN0IHBhZ2UgKnBhZ2UsIGludCBjb3VudCkKIHsKIAlpbnQgcmV0dmFsOwogCXN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICogcDsKQEAgLTM1Nyw3ICszNTcsNyBAQAogCQlyZXR1cm4gMDsKIAlpZiAoUGFnZVdyaXRlYmFjayhwYWdlKSkKIAkJcmV0dXJuIDA7Ci0JaWYgKHBhZ2VfY291bnQocGFnZSkgIT0gMikgLyogMjogdXMgKyBjYWNoZSAqLworCWlmIChwYWdlX2NvdW50KHBhZ2UpICE9IGNvdW50KSAvKiB1cyArIGNhY2hlICsgcHRlcyAqLwogCQlyZXR1cm4gMDsKIAogCWVudHJ5LnZhbCA9IHBhZ2VfcHJpdmF0ZShwYWdlKTsKQEAgLTM3MCw3ICszNzAsNyBAQAogCWlmIChwLT5zd2FwX21hcFtzd3Bfb2Zmc2V0KGVudHJ5KV0gPT0gMSkgewogCQkvKiBSZWNoZWNrIHRoZSBwYWdlIGNvdW50IHdpdGggdGhlIHN3YXBjYWNoZSBsb2NrIGhlbGQuLiAqLwogCQlzcGluX2xvY2tfaXJxKCZzd2FwcGVyX3NwYWNlLnRyZWVfbG9jayk7Ci0JCWlmICgocGFnZV9jb3VudChwYWdlKSA9PSAyKSAmJiAhUGFnZVdyaXRlYmFjayhwYWdlKSkgeworCQlpZiAoKHBhZ2VfY291bnQocGFnZSkgPT0gY291bnQpICYmICFQYWdlV3JpdGViYWNrKHBhZ2UpKSB7CiAJCQlfX2RlbGV0ZV9mcm9tX3N3YXBfY2FjaGUocGFnZSk7CiAJCQlTZXRQYWdlRGlydHkocGFnZSk7CiAJCQlyZXR2YWwgPSAxOwpAQCAtMzg4LDYgKzM4OCwyNSBAQAogfQogCiAvKgorICogTW9zdCBvZiB0aGUgdGltZSB0aGUgcGFnZSBzaG91bGQgaGF2ZSB0d28gcmVmZXJlbmNlczogb25lIGZvciB0aGUKKyAqIHByb2Nlc3MgYW5kIG9uZSBmb3IgdGhlIHN3YXAgY2FjaGUuCisgKi8KK2ludCByZW1vdmVfZXhjbHVzaXZlX3N3YXBfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSkKK3sKKwlyZXR1cm4gcmVtb3ZlX2V4Y2x1c2l2ZV9zd2FwX3BhZ2VfY291bnQocGFnZSwgMik7Cit9CisKKy8qCisgKiBUaGUgcGFnZW91dCBjb2RlIGhvbGRzIGFuIGV4dHJhIHJlZmVyZW5jZSB0byB0aGUgcGFnZS4gIFRoYXQgcmFpc2VzCisgKiB0aGUgcmVmZXJlbmNlIGNvdW50IHRvIHRlc3QgZm9yIHRvIDIgZm9yIGEgcGFnZSB0aGF0IGlzIG9ubHkgaW4gdGhlCisgKiBzd2FwIGNhY2hlIHBsdXMgMSBmb3IgZWFjaCBwcm9jZXNzIHRoYXQgbWFwcyB0aGUgcGFnZS4KKyAqLworaW50IHJlbW92ZV9leGNsdXNpdmVfc3dhcF9wYWdlX3JlZihzdHJ1Y3QgcGFnZSAqcGFnZSkKK3sKKwlyZXR1cm4gcmVtb3ZlX2V4Y2x1c2l2ZV9zd2FwX3BhZ2VfY291bnQocGFnZSwgMiArIHBhZ2VfbWFwY291bnQocGFnZSkpOworfQorCisvKgogICogRnJlZSB0aGUgc3dhcCBlbnRyeSBsaWtlIGFib3ZlLCBidXQgYWxzbyB0cnkgdG8KICAqIGZyZWUgdGhlIHBhZ2UgY2FjaGUgZW50cnkgaWYgaXQgaXMgdGhlIGxhc3QgdXNlci4KICAqLwpAQCAtNDAzLDcgKzQyMiw3IEBACiAJaWYgKHApIHsKIAkJaWYgKHN3YXBfZW50cnlfZnJlZShwLCBzd3Bfb2Zmc2V0KGVudHJ5KSkgPT0gMSkgewogCQkJcGFnZSA9IGZpbmRfZ2V0X3BhZ2UoJnN3YXBwZXJfc3BhY2UsIGVudHJ5LnZhbCk7Ci0JCQlpZiAocGFnZSAmJiB1bmxpa2VseSghdHJ5bG9ja19wYWdlKHBhZ2UpKSkgeworCQkJaWYgKHBhZ2UgJiYgIXRyeWxvY2tfcGFnZShwYWdlKSkgewogCQkJCXBhZ2VfY2FjaGVfcmVsZWFzZShwYWdlKTsKIAkJCQlwYWdlID0gTlVMTDsKIAkJCX0KZGlmZiAtLWdpdCBhL21tL3RydW5jYXRlLmMgYi9tbS90cnVuY2F0ZS5jCmluZGV4IDY2NTBjMWQuLjEyMjkyMTEgMTAwNjQ0Ci0tLSBhL21tL3RydW5jYXRlLmMKKysrIGIvbW0vdHJ1bmNhdGUuYwpAQCAtMyw3ICszLDcgQEAKICAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDIsIExpbnVzIFRvcnZhbGRzCiAgKgotICogMTBTZXAyMDAyCWFrcG1AemlwLmNvbS5hdQorICogMTBTZXAyMDAyCUFuZHJldyBNb3J0b24KICAqCQlJbml0aWFsIHZlcnNpb24uCiAgKi8KIApAQCAtMTgsNiArMTgsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3Rhc2tfaW9fYWNjb3VudGluZ19vcHMuaD4KICNpbmNsdWRlIDxsaW51eC9idWZmZXJfaGVhZC5oPgkvKiBncnIuIHRyeV90b19yZWxlYXNlX3BhZ2UsCiAJCQkJICAgZG9faW52YWxpZGF0ZXBhZ2UgKi8KKyNpbmNsdWRlICJpbnRlcm5hbC5oIgogCiAKIC8qKgpAQCAtMTAzLDYgKzEwNCw3IEBACiAKIAljYW5jZWxfZGlydHlfcGFnZShwYWdlLCBQQUdFX0NBQ0hFX1NJWkUpOwogCisJY2xlYXJfcGFnZV9tbG9jayhwYWdlKTsKIAlyZW1vdmVfZnJvbV9wYWdlX2NhY2hlKHBhZ2UpOwogCUNsZWFyUGFnZU1hcHBlZFRvRGlzayhwYWdlKTsKIAlwYWdlX2NhY2hlX3JlbGVhc2UocGFnZSk7CS8qIHBhZ2VjYWNoZSByZWYgKi8KQEAgLTEyNyw2ICsxMjksNyBAQAogCWlmIChQYWdlUHJpdmF0ZShwYWdlKSAmJiAhdHJ5X3RvX3JlbGVhc2VfcGFnZShwYWdlLCAwKSkKIAkJcmV0dXJuIDA7CiAKKwljbGVhcl9wYWdlX21sb2NrKHBhZ2UpOwogCXJldCA9IHJlbW92ZV9tYXBwaW5nKG1hcHBpbmcsIHBhZ2UpOwogCiAJcmV0dXJuIHJldDsKQEAgLTM1Miw2ICszNTUsNyBAQAogCWlmIChQYWdlRGlydHkocGFnZSkpCiAJCWdvdG8gZmFpbGVkOwogCisJY2xlYXJfcGFnZV9tbG9jayhwYWdlKTsKIAlCVUdfT04oUGFnZVByaXZhdGUocGFnZSkpOwogCV9fcmVtb3ZlX2Zyb21fcGFnZV9jYWNoZShwYWdlKTsKIAlzcGluX3VubG9ja19pcnEoJm1hcHBpbmctPnRyZWVfbG9jayk7CmRpZmYgLS1naXQgYS9tbS92bWFsbG9jLmMgYi9tbS92bWFsbG9jLmMKaW5kZXggZjAxOGQ3ZS4uMDc5NzU4OSAxMDA2NDQKLS0tIGEvbW0vdm1hbGxvYy5jCisrKyBiL21tL3ZtYWxsb2MuYwpAQCAtOCw2ICs4LDcgQEAKICAqICBOdW1hIGF3YXJlbmVzcywgQ2hyaXN0b3BoIExhbWV0ZXIsIFNHSSwgSnVuZSAyMDA1CiAgKi8KIAorI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2hpZ2htZW0uaD4KQEAgLTE4LDE2ICsxOSwxNyBAQAogI2luY2x1ZGUgPGxpbnV4L2RlYnVnb2JqZWN0cy5oPgogI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KICNpbmNsdWRlIDxsaW51eC9rYWxsc3ltcy5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9yYnRyZWUuaD4KKyNpbmNsdWRlIDxsaW51eC9yYWRpeC10cmVlLmg+CisjaW5jbHVkZSA8bGludXgvcmN1cGRhdGUuaD4KIAorI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGFzbS90bGJmbHVzaC5oPgogCiAKLURFRklORV9SV0xPQ0sodm1saXN0X2xvY2spOwotc3RydWN0IHZtX3N0cnVjdCAqdm1saXN0OwotCi1zdGF0aWMgdm9pZCAqX192bWFsbG9jX25vZGUodW5zaWduZWQgbG9uZyBzaXplLCBnZnBfdCBnZnBfbWFzaywgcGdwcm90X3QgcHJvdCwKLQkJCSAgICBpbnQgbm9kZSwgdm9pZCAqY2FsbGVyKTsKKy8qKiogUGFnZSB0YWJsZSBtYW5pcHVsYXRpb24gZnVuY3Rpb25zICoqKi8KIAogc3RhdGljIHZvaWQgdnVubWFwX3B0ZV9yYW5nZShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kKQogewpAQCAtNDAsOCArNDIsNyBAQAogCX0gd2hpbGUgKHB0ZSsrLCBhZGRyICs9IFBBR0VfU0laRSwgYWRkciAhPSBlbmQpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgdnVubWFwX3BtZF9yYW5nZShwdWRfdCAqcHVkLCB1bnNpZ25lZCBsb25nIGFkZHIsCi0JCQkJCQl1bnNpZ25lZCBsb25nIGVuZCkKK3N0YXRpYyB2b2lkIHZ1bm1hcF9wbWRfcmFuZ2UocHVkX3QgKnB1ZCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCkKIHsKIAlwbWRfdCAqcG1kOwogCXVuc2lnbmVkIGxvbmcgbmV4dDsKQEAgLTU1LDggKzU2LDcgQEAKIAl9IHdoaWxlIChwbWQrKywgYWRkciA9IG5leHQsIGFkZHIgIT0gZW5kKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIHZ1bm1hcF9wdWRfcmFuZ2UocGdkX3QgKnBnZCwgdW5zaWduZWQgbG9uZyBhZGRyLAotCQkJCQkJdW5zaWduZWQgbG9uZyBlbmQpCitzdGF0aWMgdm9pZCB2dW5tYXBfcHVkX3JhbmdlKHBnZF90ICpwZ2QsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQpCiB7CiAJcHVkX3QgKnB1ZDsKIAl1bnNpZ25lZCBsb25nIG5leHQ7CkBAIC03MCwxMiArNzAsMTAgQEAKIAl9IHdoaWxlIChwdWQrKywgYWRkciA9IG5leHQsIGFkZHIgIT0gZW5kKTsKIH0KIAotdm9pZCB1bm1hcF9rZXJuZWxfcmFuZ2UodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIHNpemUpCitzdGF0aWMgdm9pZCB2dW5tYXBfcGFnZV9yYW5nZSh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kKQogewogCXBnZF90ICpwZ2Q7CiAJdW5zaWduZWQgbG9uZyBuZXh0OwotCXVuc2lnbmVkIGxvbmcgc3RhcnQgPSBhZGRyOwotCXVuc2lnbmVkIGxvbmcgZW5kID0gYWRkciArIHNpemU7CiAKIAlCVUdfT04oYWRkciA+PSBlbmQpOwogCXBnZCA9IHBnZF9vZmZzZXRfayhhZGRyKTsKQEAgLTg2LDM1ICs4NCwzNiBAQAogCQkJY29udGludWU7CiAJCXZ1bm1hcF9wdWRfcmFuZ2UocGdkLCBhZGRyLCBuZXh0KTsKIAl9IHdoaWxlIChwZ2QrKywgYWRkciA9IG5leHQsIGFkZHIgIT0gZW5kKTsKLQlmbHVzaF90bGJfa2VybmVsX3JhbmdlKHN0YXJ0LCBlbmQpOwotfQotCi1zdGF0aWMgdm9pZCB1bm1hcF92bV9hcmVhKHN0cnVjdCB2bV9zdHJ1Y3QgKmFyZWEpCi17Ci0JdW5tYXBfa2VybmVsX3JhbmdlKCh1bnNpZ25lZCBsb25nKWFyZWEtPmFkZHIsIGFyZWEtPnNpemUpOwogfQogCiBzdGF0aWMgaW50IHZtYXBfcHRlX3JhbmdlKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkciwKLQkJCXVuc2lnbmVkIGxvbmcgZW5kLCBwZ3Byb3RfdCBwcm90LCBzdHJ1Y3QgcGFnZSAqKipwYWdlcykKKwkJdW5zaWduZWQgbG9uZyBlbmQsIHBncHJvdF90IHByb3QsIHN0cnVjdCBwYWdlICoqcGFnZXMsIGludCAqbnIpCiB7CiAJcHRlX3QgKnB0ZTsKIAorCS8qCisJICogbnIgaXMgYSBydW5uaW5nIGluZGV4IGludG8gdGhlIGFycmF5IHdoaWNoIGhlbHBzIGhpZ2hlciBsZXZlbAorCSAqIGNhbGxlcnMga2VlcCB0cmFjayBvZiB3aGVyZSB3ZSdyZSB1cCB0by4KKwkgKi8KKwogCXB0ZSA9IHB0ZV9hbGxvY19rZXJuZWwocG1kLCBhZGRyKTsKIAlpZiAoIXB0ZSkKIAkJcmV0dXJuIC1FTk9NRU07CiAJZG8gewotCQlzdHJ1Y3QgcGFnZSAqcGFnZSA9ICoqcGFnZXM7Ci0JCVdBUk5fT04oIXB0ZV9ub25lKCpwdGUpKTsKLQkJaWYgKCFwYWdlKQorCQlzdHJ1Y3QgcGFnZSAqcGFnZSA9IHBhZ2VzWypucl07CisKKwkJaWYgKFdBUk5fT04oIXB0ZV9ub25lKCpwdGUpKSkKKwkJCXJldHVybiAtRUJVU1k7CisJCWlmIChXQVJOX09OKCFwYWdlKSkKIAkJCXJldHVybiAtRU5PTUVNOwogCQlzZXRfcHRlX2F0KCZpbml0X21tLCBhZGRyLCBwdGUsIG1rX3B0ZShwYWdlLCBwcm90KSk7Ci0JCSgqcGFnZXMpKys7CisJCSgqbnIpKys7CiAJfSB3aGlsZSAocHRlKyssIGFkZHIgKz0gUEFHRV9TSVpFLCBhZGRyICE9IGVuZCk7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IHZtYXBfcG1kX3JhbmdlKHB1ZF90ICpwdWQsIHVuc2lnbmVkIGxvbmcgYWRkciwKLQkJCXVuc2lnbmVkIGxvbmcgZW5kLCBwZ3Byb3RfdCBwcm90LCBzdHJ1Y3QgcGFnZSAqKipwYWdlcykKK3N0YXRpYyBpbnQgdm1hcF9wbWRfcmFuZ2UocHVkX3QgKnB1ZCwgdW5zaWduZWQgbG9uZyBhZGRyLAorCQl1bnNpZ25lZCBsb25nIGVuZCwgcGdwcm90X3QgcHJvdCwgc3RydWN0IHBhZ2UgKipwYWdlcywgaW50ICpucikKIHsKIAlwbWRfdCAqcG1kOwogCXVuc2lnbmVkIGxvbmcgbmV4dDsKQEAgLTEyNCwxNCArMTIzLDE0IEBACiAJCXJldHVybiAtRU5PTUVNOwogCWRvIHsKIAkJbmV4dCA9IHBtZF9hZGRyX2VuZChhZGRyLCBlbmQpOwotCQlpZiAodm1hcF9wdGVfcmFuZ2UocG1kLCBhZGRyLCBuZXh0LCBwcm90LCBwYWdlcykpCisJCWlmICh2bWFwX3B0ZV9yYW5nZShwbWQsIGFkZHIsIG5leHQsIHByb3QsIHBhZ2VzLCBucikpCiAJCQlyZXR1cm4gLUVOT01FTTsKIAl9IHdoaWxlIChwbWQrKywgYWRkciA9IG5leHQsIGFkZHIgIT0gZW5kKTsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgdm1hcF9wdWRfcmFuZ2UocGdkX3QgKnBnZCwgdW5zaWduZWQgbG9uZyBhZGRyLAotCQkJdW5zaWduZWQgbG9uZyBlbmQsIHBncHJvdF90IHByb3QsIHN0cnVjdCBwYWdlICoqKnBhZ2VzKQorc3RhdGljIGludCB2bWFwX3B1ZF9yYW5nZShwZ2RfdCAqcGdkLCB1bnNpZ25lZCBsb25nIGFkZHIsCisJCXVuc2lnbmVkIGxvbmcgZW5kLCBwZ3Byb3RfdCBwcm90LCBzdHJ1Y3QgcGFnZSAqKnBhZ2VzLCBpbnQgKm5yKQogewogCXB1ZF90ICpwdWQ7CiAJdW5zaWduZWQgbG9uZyBuZXh0OwpAQCAtMTQxLDMyICsxNDAsNDAgQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAJZG8gewogCQluZXh0ID0gcHVkX2FkZHJfZW5kKGFkZHIsIGVuZCk7Ci0JCWlmICh2bWFwX3BtZF9yYW5nZShwdWQsIGFkZHIsIG5leHQsIHByb3QsIHBhZ2VzKSkKKwkJaWYgKHZtYXBfcG1kX3JhbmdlKHB1ZCwgYWRkciwgbmV4dCwgcHJvdCwgcGFnZXMsIG5yKSkKIAkJCXJldHVybiAtRU5PTUVNOwogCX0gd2hpbGUgKHB1ZCsrLCBhZGRyID0gbmV4dCwgYWRkciAhPSBlbmQpOwogCXJldHVybiAwOwogfQogCi1pbnQgbWFwX3ZtX2FyZWEoc3RydWN0IHZtX3N0cnVjdCAqYXJlYSwgcGdwcm90X3QgcHJvdCwgc3RydWN0IHBhZ2UgKioqcGFnZXMpCisvKgorICogU2V0IHVwIHBhZ2UgdGFibGVzIGluIGt2YSAoYWRkciwgZW5kKS4gVGhlIHB0ZXMgc2hhbGwgaGF2ZSBwcm90ICJwcm90IiwgYW5kCisgKiB3aWxsIGhhdmUgcGZucyBjb3JyZXNwb25kaW5nIHRvIHRoZSAicGFnZXMiIGFycmF5LgorICoKKyAqIEllLiBwdGUgYXQgYWRkcitOKlBBR0VfU0laRSBzaGFsbCBwb2ludCB0byBwZm4gY29ycmVzcG9uZGluZyB0byBwYWdlc1tOXQorICovCitzdGF0aWMgaW50IHZtYXBfcGFnZV9yYW5nZSh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLAorCQkJCXBncHJvdF90IHByb3QsIHN0cnVjdCBwYWdlICoqcGFnZXMpCiB7CiAJcGdkX3QgKnBnZDsKIAl1bnNpZ25lZCBsb25nIG5leHQ7Ci0JdW5zaWduZWQgbG9uZyBhZGRyID0gKHVuc2lnbmVkIGxvbmcpIGFyZWEtPmFkZHI7Ci0JdW5zaWduZWQgbG9uZyBlbmQgPSBhZGRyICsgYXJlYS0+c2l6ZSAtIFBBR0VfU0laRTsKLQlpbnQgZXJyOworCWludCBlcnIgPSAwOworCWludCBuciA9IDA7CiAKIAlCVUdfT04oYWRkciA+PSBlbmQpOwogCXBnZCA9IHBnZF9vZmZzZXRfayhhZGRyKTsKIAlkbyB7CiAJCW5leHQgPSBwZ2RfYWRkcl9lbmQoYWRkciwgZW5kKTsKLQkJZXJyID0gdm1hcF9wdWRfcmFuZ2UocGdkLCBhZGRyLCBuZXh0LCBwcm90LCBwYWdlcyk7CisJCWVyciA9IHZtYXBfcHVkX3JhbmdlKHBnZCwgYWRkciwgbmV4dCwgcHJvdCwgcGFnZXMsICZucik7CiAJCWlmIChlcnIpCiAJCQlicmVhazsKIAl9IHdoaWxlIChwZ2QrKywgYWRkciA9IG5leHQsIGFkZHIgIT0gZW5kKTsKLQlmbHVzaF9jYWNoZV92bWFwKCh1bnNpZ25lZCBsb25nKSBhcmVhLT5hZGRyLCBlbmQpOwotCXJldHVybiBlcnI7CisJZmx1c2hfY2FjaGVfdm1hcChhZGRyLCBlbmQpOworCisJaWYgKHVubGlrZWx5KGVycikpCisJCXJldHVybiBlcnI7CisJcmV0dXJuIG5yOwogfQotRVhQT1JUX1NZTUJPTF9HUEwobWFwX3ZtX2FyZWEpOwogCiBzdGF0aWMgaW5saW5lIGludCBpc192bWFsbG9jX29yX21vZHVsZV9hZGRyKGNvbnN0IHZvaWQgKngpCiB7CkBAIC0xODQsMTYgKzE5MSwxMyBAQAogfQogCiAvKgotICogTWFwIGEgdm1hbGxvYygpLXNwYWNlIHZpcnR1YWwgYWRkcmVzcyB0byB0aGUgcGh5c2ljYWwgcGFnZS4KKyAqIFdhbGsgYSB2bWFwIGFkZHJlc3MgdG8gdGhlIHN0cnVjdCBwYWdlIGl0IG1hcHMuCiAgKi8KIHN0cnVjdCBwYWdlICp2bWFsbG9jX3RvX3BhZ2UoY29uc3Qgdm9pZCAqdm1hbGxvY19hZGRyKQogewogCXVuc2lnbmVkIGxvbmcgYWRkciA9ICh1bnNpZ25lZCBsb25nKSB2bWFsbG9jX2FkZHI7CiAJc3RydWN0IHBhZ2UgKnBhZ2UgPSBOVUxMOwogCXBnZF90ICpwZ2QgPSBwZ2Rfb2Zmc2V0X2soYWRkcik7Ci0JcHVkX3QgKnB1ZDsKLQlwbWRfdCAqcG1kOwotCXB0ZV90ICpwdGVwLCBwdGU7CiAKIAkvKgogCSAqIFhYWCB3ZSBtaWdodCBuZWVkIHRvIGNoYW5nZSB0aGlzIGlmIHdlIGFkZCBWSVJUVUFMX0JVR19PTiBmb3IKQEAgLTIwMiwxMCArMjA2LDEyIEBACiAJVklSVFVBTF9CVUdfT04oIWlzX3ZtYWxsb2Nfb3JfbW9kdWxlX2FkZHIodm1hbGxvY19hZGRyKSk7CiAKIAlpZiAoIXBnZF9ub25lKCpwZ2QpKSB7Ci0JCXB1ZCA9IHB1ZF9vZmZzZXQocGdkLCBhZGRyKTsKKwkJcHVkX3QgKnB1ZCA9IHB1ZF9vZmZzZXQocGdkLCBhZGRyKTsKIAkJaWYgKCFwdWRfbm9uZSgqcHVkKSkgewotCQkJcG1kID0gcG1kX29mZnNldChwdWQsIGFkZHIpOworCQkJcG1kX3QgKnBtZCA9IHBtZF9vZmZzZXQocHVkLCBhZGRyKTsKIAkJCWlmICghcG1kX25vbmUoKnBtZCkpIHsKKwkJCQlwdGVfdCAqcHRlcCwgcHRlOworCiAJCQkJcHRlcCA9IHB0ZV9vZmZzZXRfbWFwKHBtZCwgYWRkcik7CiAJCQkJcHRlID0gKnB0ZXA7CiAJCQkJaWYgKHB0ZV9wcmVzZW50KHB0ZSkpCkBAIC0yMjcsMTMgKzIzMyw3NTEgQEAKIH0KIEVYUE9SVF9TWU1CT0wodm1hbGxvY190b19wZm4pOwogCi1zdGF0aWMgc3RydWN0IHZtX3N0cnVjdCAqCi1fX2dldF92bV9hcmVhX25vZGUodW5zaWduZWQgbG9uZyBzaXplLCB1bnNpZ25lZCBsb25nIGZsYWdzLCB1bnNpZ25lZCBsb25nIHN0YXJ0LAotCQl1bnNpZ25lZCBsb25nIGVuZCwgaW50IG5vZGUsIGdmcF90IGdmcF9tYXNrLCB2b2lkICpjYWxsZXIpCisKKy8qKiogR2xvYmFsIGt2YSBhbGxvY2F0b3IgKioqLworCisjZGVmaW5lIFZNX0xBWllfRlJFRQkweDAxCisjZGVmaW5lIFZNX0xBWllfRlJFRUlORwkweDAyCisjZGVmaW5lIFZNX1ZNX0FSRUEJMHgwNAorCitzdHJ1Y3Qgdm1hcF9hcmVhIHsKKwl1bnNpZ25lZCBsb25nIHZhX3N0YXJ0OworCXVuc2lnbmVkIGxvbmcgdmFfZW5kOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IHJiX25vZGUgcmJfbm9kZTsJCS8qIGFkZHJlc3Mgc29ydGVkIHJidHJlZSAqLworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsJCS8qIGFkZHJlc3Mgc29ydGVkIGxpc3QgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkIHB1cmdlX2xpc3Q7CS8qICJsYXp5IHB1cmdlIiBsaXN0ICovCisJdm9pZCAqcHJpdmF0ZTsKKwlzdHJ1Y3QgcmN1X2hlYWQgcmN1X2hlYWQ7Cit9OworCitzdGF0aWMgREVGSU5FX1NQSU5MT0NLKHZtYXBfYXJlYV9sb2NrKTsKK3N0YXRpYyBzdHJ1Y3QgcmJfcm9vdCB2bWFwX2FyZWFfcm9vdCA9IFJCX1JPT1Q7CitzdGF0aWMgTElTVF9IRUFEKHZtYXBfYXJlYV9saXN0KTsKKworc3RhdGljIHN0cnVjdCB2bWFwX2FyZWEgKl9fZmluZF92bWFwX2FyZWEodW5zaWduZWQgbG9uZyBhZGRyKQogewotCXN0cnVjdCB2bV9zdHJ1Y3QgKipwLCAqdG1wLCAqYXJlYTsKLQl1bnNpZ25lZCBsb25nIGFsaWduID0gMTsKKwlzdHJ1Y3QgcmJfbm9kZSAqbiA9IHZtYXBfYXJlYV9yb290LnJiX25vZGU7CisKKwl3aGlsZSAobikgeworCQlzdHJ1Y3Qgdm1hcF9hcmVhICp2YTsKKworCQl2YSA9IHJiX2VudHJ5KG4sIHN0cnVjdCB2bWFwX2FyZWEsIHJiX25vZGUpOworCQlpZiAoYWRkciA8IHZhLT52YV9zdGFydCkKKwkJCW4gPSBuLT5yYl9sZWZ0OworCQllbHNlIGlmIChhZGRyID4gdmEtPnZhX3N0YXJ0KQorCQkJbiA9IG4tPnJiX3JpZ2h0OworCQllbHNlCisJCQlyZXR1cm4gdmE7CisJfQorCisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyB2b2lkIF9faW5zZXJ0X3ZtYXBfYXJlYShzdHJ1Y3Qgdm1hcF9hcmVhICp2YSkKK3sKKwlzdHJ1Y3QgcmJfbm9kZSAqKnAgPSAmdm1hcF9hcmVhX3Jvb3QucmJfbm9kZTsKKwlzdHJ1Y3QgcmJfbm9kZSAqcGFyZW50ID0gTlVMTDsKKwlzdHJ1Y3QgcmJfbm9kZSAqdG1wOworCisJd2hpbGUgKCpwKSB7CisJCXN0cnVjdCB2bWFwX2FyZWEgKnRtcDsKKworCQlwYXJlbnQgPSAqcDsKKwkJdG1wID0gcmJfZW50cnkocGFyZW50LCBzdHJ1Y3Qgdm1hcF9hcmVhLCByYl9ub2RlKTsKKwkJaWYgKHZhLT52YV9zdGFydCA8IHRtcC0+dmFfZW5kKQorCQkJcCA9ICYoKnApLT5yYl9sZWZ0OworCQllbHNlIGlmICh2YS0+dmFfZW5kID4gdG1wLT52YV9zdGFydCkKKwkJCXAgPSAmKCpwKS0+cmJfcmlnaHQ7CisJCWVsc2UKKwkJCUJVRygpOworCX0KKworCXJiX2xpbmtfbm9kZSgmdmEtPnJiX25vZGUsIHBhcmVudCwgcCk7CisJcmJfaW5zZXJ0X2NvbG9yKCZ2YS0+cmJfbm9kZSwgJnZtYXBfYXJlYV9yb290KTsKKworCS8qIGFkZHJlc3Mtc29ydCB0aGlzIGxpc3Qgc28gaXQgaXMgdXNhYmxlIGxpa2UgdGhlIHZtbGlzdCAqLworCXRtcCA9IHJiX3ByZXYoJnZhLT5yYl9ub2RlKTsKKwlpZiAodG1wKSB7CisJCXN0cnVjdCB2bWFwX2FyZWEgKnByZXY7CisJCXByZXYgPSByYl9lbnRyeSh0bXAsIHN0cnVjdCB2bWFwX2FyZWEsIHJiX25vZGUpOworCQlsaXN0X2FkZF9yY3UoJnZhLT5saXN0LCAmcHJldi0+bGlzdCk7CisJfSBlbHNlCisJCWxpc3RfYWRkX3JjdSgmdmEtPmxpc3QsICZ2bWFwX2FyZWFfbGlzdCk7Cit9CisKK3N0YXRpYyB2b2lkIHB1cmdlX3ZtYXBfYXJlYV9sYXp5KHZvaWQpOworCisvKgorICogQWxsb2NhdGUgYSByZWdpb24gb2YgS1ZBIG9mIHRoZSBzcGVjaWZpZWQgc2l6ZSBhbmQgYWxpZ25tZW50LCB3aXRoaW4gdGhlCisgKiB2c3RhcnQgYW5kIHZlbmQuCisgKi8KK3N0YXRpYyBzdHJ1Y3Qgdm1hcF9hcmVhICphbGxvY192bWFwX2FyZWEodW5zaWduZWQgbG9uZyBzaXplLAorCQkJCXVuc2lnbmVkIGxvbmcgYWxpZ24sCisJCQkJdW5zaWduZWQgbG9uZyB2c3RhcnQsIHVuc2lnbmVkIGxvbmcgdmVuZCwKKwkJCQlpbnQgbm9kZSwgZ2ZwX3QgZ2ZwX21hc2spCit7CisJc3RydWN0IHZtYXBfYXJlYSAqdmE7CisJc3RydWN0IHJiX25vZGUgKm47CiAJdW5zaWduZWQgbG9uZyBhZGRyOworCWludCBwdXJnZWQgPSAwOworCisJQlVHX09OKHNpemUgJiB+UEFHRV9NQVNLKTsKKworCWFkZHIgPSBBTElHTih2c3RhcnQsIGFsaWduKTsKKworCXZhID0ga21hbGxvY19ub2RlKHNpemVvZihzdHJ1Y3Qgdm1hcF9hcmVhKSwKKwkJCWdmcF9tYXNrICYgR0ZQX1JFQ0xBSU1fTUFTSywgbm9kZSk7CisJaWYgKHVubGlrZWx5KCF2YSkpCisJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOworCityZXRyeToKKwlzcGluX2xvY2soJnZtYXBfYXJlYV9sb2NrKTsKKwkvKiBYWFg6IGNvdWxkIGhhdmUgYSBsYXN0X2hvbGUgY2FjaGUgKi8KKwluID0gdm1hcF9hcmVhX3Jvb3QucmJfbm9kZTsKKwlpZiAobikgeworCQlzdHJ1Y3Qgdm1hcF9hcmVhICpmaXJzdCA9IE5VTEw7CisKKwkJZG8geworCQkJc3RydWN0IHZtYXBfYXJlYSAqdG1wOworCQkJdG1wID0gcmJfZW50cnkobiwgc3RydWN0IHZtYXBfYXJlYSwgcmJfbm9kZSk7CisJCQlpZiAodG1wLT52YV9lbmQgPj0gYWRkcikgeworCQkJCWlmICghZmlyc3QgJiYgdG1wLT52YV9zdGFydCA8IGFkZHIgKyBzaXplKQorCQkJCQlmaXJzdCA9IHRtcDsKKwkJCQluID0gbi0+cmJfbGVmdDsKKwkJCX0gZWxzZSB7CisJCQkJZmlyc3QgPSB0bXA7CisJCQkJbiA9IG4tPnJiX3JpZ2h0OworCQkJfQorCQl9IHdoaWxlIChuKTsKKworCQlpZiAoIWZpcnN0KQorCQkJZ290byBmb3VuZDsKKworCQlpZiAoZmlyc3QtPnZhX2VuZCA8IGFkZHIpIHsKKwkJCW4gPSByYl9uZXh0KCZmaXJzdC0+cmJfbm9kZSk7CisJCQlpZiAobikKKwkJCQlmaXJzdCA9IHJiX2VudHJ5KG4sIHN0cnVjdCB2bWFwX2FyZWEsIHJiX25vZGUpOworCQkJZWxzZQorCQkJCWdvdG8gZm91bmQ7CisJCX0KKworCQl3aGlsZSAoYWRkciArIHNpemUgPj0gZmlyc3QtPnZhX3N0YXJ0ICYmIGFkZHIgKyBzaXplIDw9IHZlbmQpIHsKKwkJCWFkZHIgPSBBTElHTihmaXJzdC0+dmFfZW5kICsgUEFHRV9TSVpFLCBhbGlnbik7CisKKwkJCW4gPSByYl9uZXh0KCZmaXJzdC0+cmJfbm9kZSk7CisJCQlpZiAobikKKwkJCQlmaXJzdCA9IHJiX2VudHJ5KG4sIHN0cnVjdCB2bWFwX2FyZWEsIHJiX25vZGUpOworCQkJZWxzZQorCQkJCWdvdG8gZm91bmQ7CisJCX0KKwl9Citmb3VuZDoKKwlpZiAoYWRkciArIHNpemUgPiB2ZW5kKSB7CisJCXNwaW5fdW5sb2NrKCZ2bWFwX2FyZWFfbG9jayk7CisJCWlmICghcHVyZ2VkKSB7CisJCQlwdXJnZV92bWFwX2FyZWFfbGF6eSgpOworCQkJcHVyZ2VkID0gMTsKKwkJCWdvdG8gcmV0cnk7CisJCX0KKwkJaWYgKHByaW50a19yYXRlbGltaXQoKSkKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgInZtYXAgYWxsb2NhdGlvbiBmYWlsZWQ6ICIKKwkJCQkgInVzZSB2bWFsbG9jPTxzaXplPiB0byBpbmNyZWFzZSBzaXplLlxuIik7CisJCXJldHVybiBFUlJfUFRSKC1FQlVTWSk7CisJfQorCisJQlVHX09OKGFkZHIgJiAoYWxpZ24tMSkpOworCisJdmEtPnZhX3N0YXJ0ID0gYWRkcjsKKwl2YS0+dmFfZW5kID0gYWRkciArIHNpemU7CisJdmEtPmZsYWdzID0gMDsKKwlfX2luc2VydF92bWFwX2FyZWEodmEpOworCXNwaW5fdW5sb2NrKCZ2bWFwX2FyZWFfbG9jayk7CisKKwlyZXR1cm4gdmE7Cit9CisKK3N0YXRpYyB2b2lkIHJjdV9mcmVlX3ZhKHN0cnVjdCByY3VfaGVhZCAqaGVhZCkKK3sKKwlzdHJ1Y3Qgdm1hcF9hcmVhICp2YSA9IGNvbnRhaW5lcl9vZihoZWFkLCBzdHJ1Y3Qgdm1hcF9hcmVhLCByY3VfaGVhZCk7CisKKwlrZnJlZSh2YSk7Cit9CisKK3N0YXRpYyB2b2lkIF9fZnJlZV92bWFwX2FyZWEoc3RydWN0IHZtYXBfYXJlYSAqdmEpCit7CisJQlVHX09OKFJCX0VNUFRZX05PREUoJnZhLT5yYl9ub2RlKSk7CisJcmJfZXJhc2UoJnZhLT5yYl9ub2RlLCAmdm1hcF9hcmVhX3Jvb3QpOworCVJCX0NMRUFSX05PREUoJnZhLT5yYl9ub2RlKTsKKwlsaXN0X2RlbF9yY3UoJnZhLT5saXN0KTsKKworCWNhbGxfcmN1KCZ2YS0+cmN1X2hlYWQsIHJjdV9mcmVlX3ZhKTsKK30KKworLyoKKyAqIEZyZWUgYSByZWdpb24gb2YgS1ZBIGFsbG9jYXRlZCBieSBhbGxvY192bWFwX2FyZWEKKyAqLworc3RhdGljIHZvaWQgZnJlZV92bWFwX2FyZWEoc3RydWN0IHZtYXBfYXJlYSAqdmEpCit7CisJc3Bpbl9sb2NrKCZ2bWFwX2FyZWFfbG9jayk7CisJX19mcmVlX3ZtYXBfYXJlYSh2YSk7CisJc3Bpbl91bmxvY2soJnZtYXBfYXJlYV9sb2NrKTsKK30KKworLyoKKyAqIENsZWFyIHRoZSBwYWdldGFibGUgZW50cmllcyBvZiBhIGdpdmVuIHZtYXBfYXJlYQorICovCitzdGF0aWMgdm9pZCB1bm1hcF92bWFwX2FyZWEoc3RydWN0IHZtYXBfYXJlYSAqdmEpCit7CisJdnVubWFwX3BhZ2VfcmFuZ2UodmEtPnZhX3N0YXJ0LCB2YS0+dmFfZW5kKTsKK30KKworLyoKKyAqIGxhenlfbWF4X3BhZ2VzIGlzIHRoZSBtYXhpbXVtIGFtb3VudCBvZiB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2Ugd2UgZ2F0aGVyIHVwCisgKiBiZWZvcmUgYXR0ZW1wdGluZyB0byBwdXJnZSB3aXRoIGEgVExCIGZsdXNoLgorICoKKyAqIFRoZXJlIGlzIGEgdHJhZGVvZmYgaGVyZTogYSBsYXJnZXIgbnVtYmVyIHdpbGwgY292ZXIgbW9yZSBrZXJuZWwgcGFnZSB0YWJsZXMKKyAqIGFuZCB0YWtlIHNsaWdodGx5IGxvbmdlciB0byBwdXJnZSwgYnV0IGl0IHdpbGwgbGluZWFybHkgcmVkdWNlIHRoZSBudW1iZXIgb2YKKyAqIGdsb2JhbCBUTEIgZmx1c2hlcyB0aGF0IG11c3QgYmUgcGVyZm9ybWVkLiBJdCB3b3VsZCBzZWVtIG5hdHVyYWwgdG8gc2NhbGUKKyAqIHRoaXMgbnVtYmVyIHVwIGxpbmVhcmx5IHdpdGggdGhlIG51bWJlciBvZiBDUFVzIChiZWNhdXNlIHZtYXBwaW5nIGFjdGl2aXR5CisgKiBjb3VsZCBhbHNvIHNjYWxlIGxpbmVhcmx5IHdpdGggdGhlIG51bWJlciBvZiBDUFVzKSwgaG93ZXZlciBpdCBpcyBsaWtlbHkKKyAqIHRoYXQgaW4gcHJhY3RpY2UsIHdvcmtsb2FkcyBtaWdodCBiZSBjb25zdHJhaW5lZCBpbiBvdGhlciB3YXlzIHRoYXQgbWVhbgorICogdm1hcCBhY3Rpdml0eSB3aWxsIG5vdCBzY2FsZSBsaW5lYXJseSB3aXRoIENQVXMuIEFsc28sIEkgd2FudCB0byBiZQorICogY29uc2VydmF0aXZlIGFuZCBub3QgaW50cm9kdWNlIGEgYmlnIGxhdGVuY3kgb24gaHVnZSBzeXN0ZW1zLCBzbyBnbyB3aXRoCisgKiBhIGxlc3MgYWdncmVzc2l2ZSBsb2cgc2NhbGUuIEl0IHdpbGwgc3RpbGwgYmUgYW4gaW1wcm92ZW1lbnQgb3ZlciB0aGUgb2xkCisgKiBjb2RlLCBhbmQgaXQgd2lsbCBiZSBzaW1wbGUgdG8gY2hhbmdlIHRoZSBzY2FsZSBmYWN0b3IgaWYgd2UgZmluZCB0aGF0IGl0CisgKiBiZWNvbWVzIGEgcHJvYmxlbSBvbiBiaWdnZXIgc3lzdGVtcy4KKyAqLworc3RhdGljIHVuc2lnbmVkIGxvbmcgbGF6eV9tYXhfcGFnZXModm9pZCkKK3sKKwl1bnNpZ25lZCBpbnQgbG9nOworCisJbG9nID0gZmxzKG51bV9vbmxpbmVfY3B1cygpKTsKKworCXJldHVybiBsb2cgKiAoMzJVTCAqIDEwMjQgKiAxMDI0IC8gUEFHRV9TSVpFKTsKK30KKworc3RhdGljIGF0b21pY190IHZtYXBfbGF6eV9uciA9IEFUT01JQ19JTklUKDApOworCisvKgorICogUHVyZ2VzIGFsbCBsYXppbHktZnJlZWQgdm1hcCBhcmVhcy4KKyAqCisgKiBJZiBzeW5jIGlzIDAgdGhlbiBkb24ndCBwdXJnZSBpZiB0aGVyZSBpcyBhbHJlYWR5IGEgcHVyZ2UgaW4gcHJvZ3Jlc3MuCisgKiBJZiBmb3JjZV9mbHVzaCBpcyAxLCB0aGVuIGZsdXNoIGtlcm5lbCBUTEJzIGJldHdlZW4gKnN0YXJ0IGFuZCAqZW5kIGV2ZW4KKyAqIGlmIHdlIGZvdW5kIG5vIGxhenkgdm1hcCBhcmVhcyB0byB1bm1hcCAoY2FsbGVycyBjYW4gdXNlIHRoaXMgdG8gb3B0aW1pc2UKKyAqIHRoZWlyIG93biBUTEIgZmx1c2hpbmcpLgorICogUmV0dXJucyB3aXRoICpzdGFydCA9IG1pbigqc3RhcnQsIGxvd2VzdCBwdXJnZWQgYWRkcmVzcykKKyAqICAgICAgICAgICAgICAqZW5kID0gbWF4KCplbmQsIGhpZ2hlc3QgcHVyZ2VkIGFkZHJlc3MpCisgKi8KK3N0YXRpYyB2b2lkIF9fcHVyZ2Vfdm1hcF9hcmVhX2xhenkodW5zaWduZWQgbG9uZyAqc3RhcnQsIHVuc2lnbmVkIGxvbmcgKmVuZCwKKwkJCQkJaW50IHN5bmMsIGludCBmb3JjZV9mbHVzaCkKK3sKKwlzdGF0aWMgREVGSU5FX1NQSU5MT0NLKHB1cmdlX2xvY2spOworCUxJU1RfSEVBRCh2YWxpc3QpOworCXN0cnVjdCB2bWFwX2FyZWEgKnZhOworCWludCBuciA9IDA7CisKKwkvKgorCSAqIElmIHN5bmMgaXMgMCBidXQgZm9yY2VfZmx1c2ggaXMgMSwgd2UnbGwgZ28gc3luYyBhbnl3YXkgYnV0IGNhbGxlcnMKKwkgKiBzaG91bGQgbm90IGV4cGVjdCBzdWNoIGJlaGF2aW91ci4gVGhpcyBqdXN0IHNpbXBsaWZpZXMgbG9ja2luZyBmb3IKKwkgKiB0aGUgY2FzZSB0aGF0IGlzbid0IGFjdHVhbGx5IHVzZWQgYXQgdGhlIG1vbWVudCBhbnl3YXkuCisJICovCisJaWYgKCFzeW5jICYmICFmb3JjZV9mbHVzaCkgeworCQlpZiAoIXNwaW5fdHJ5bG9jaygmcHVyZ2VfbG9jaykpCisJCQlyZXR1cm47CisJfSBlbHNlCisJCXNwaW5fbG9jaygmcHVyZ2VfbG9jayk7CisKKwlyY3VfcmVhZF9sb2NrKCk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UodmEsICZ2bWFwX2FyZWFfbGlzdCwgbGlzdCkgeworCQlpZiAodmEtPmZsYWdzICYgVk1fTEFaWV9GUkVFKSB7CisJCQlpZiAodmEtPnZhX3N0YXJ0IDwgKnN0YXJ0KQorCQkJCSpzdGFydCA9IHZhLT52YV9zdGFydDsKKwkJCWlmICh2YS0+dmFfZW5kID4gKmVuZCkKKwkJCQkqZW5kID0gdmEtPnZhX2VuZDsKKwkJCW5yICs9ICh2YS0+dmFfZW5kIC0gdmEtPnZhX3N0YXJ0KSA+PiBQQUdFX1NISUZUOworCQkJdW5tYXBfdm1hcF9hcmVhKHZhKTsKKwkJCWxpc3RfYWRkX3RhaWwoJnZhLT5wdXJnZV9saXN0LCAmdmFsaXN0KTsKKwkJCXZhLT5mbGFncyB8PSBWTV9MQVpZX0ZSRUVJTkc7CisJCQl2YS0+ZmxhZ3MgJj0gflZNX0xBWllfRlJFRTsKKwkJfQorCX0KKwlyY3VfcmVhZF91bmxvY2soKTsKKworCWlmIChucikgeworCQlCVUdfT04obnIgPiBhdG9taWNfcmVhZCgmdm1hcF9sYXp5X25yKSk7CisJCWF0b21pY19zdWIobnIsICZ2bWFwX2xhenlfbnIpOworCX0KKworCWlmIChuciB8fCBmb3JjZV9mbHVzaCkKKwkJZmx1c2hfdGxiX2tlcm5lbF9yYW5nZSgqc3RhcnQsICplbmQpOworCisJaWYgKG5yKSB7CisJCXNwaW5fbG9jaygmdm1hcF9hcmVhX2xvY2spOworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHZhLCAmdmFsaXN0LCBwdXJnZV9saXN0KQorCQkJX19mcmVlX3ZtYXBfYXJlYSh2YSk7CisJCXNwaW5fdW5sb2NrKCZ2bWFwX2FyZWFfbG9jayk7CisJfQorCXNwaW5fdW5sb2NrKCZwdXJnZV9sb2NrKTsKK30KKworLyoKKyAqIEtpY2sgb2ZmIGEgcHVyZ2Ugb2YgdGhlIG91dHN0YW5kaW5nIGxhenkgYXJlYXMuCisgKi8KK3N0YXRpYyB2b2lkIHB1cmdlX3ZtYXBfYXJlYV9sYXp5KHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyBzdGFydCA9IFVMT05HX01BWCwgZW5kID0gMDsKKworCV9fcHVyZ2Vfdm1hcF9hcmVhX2xhenkoJnN0YXJ0LCAmZW5kLCAwLCAwKTsKK30KKworLyoKKyAqIEZyZWUgYW5kIHVubWFwIGEgdm1hcCBhcmVhCisgKi8KK3N0YXRpYyB2b2lkIGZyZWVfdW5tYXBfdm1hcF9hcmVhKHN0cnVjdCB2bWFwX2FyZWEgKnZhKQoreworCXZhLT5mbGFncyB8PSBWTV9MQVpZX0ZSRUU7CisJYXRvbWljX2FkZCgodmEtPnZhX2VuZCAtIHZhLT52YV9zdGFydCkgPj4gUEFHRV9TSElGVCwgJnZtYXBfbGF6eV9ucik7CisJaWYgKHVubGlrZWx5KGF0b21pY19yZWFkKCZ2bWFwX2xhenlfbnIpID4gbGF6eV9tYXhfcGFnZXMoKSkpCisJCXB1cmdlX3ZtYXBfYXJlYV9sYXp5KCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgdm1hcF9hcmVhICpmaW5kX3ZtYXBfYXJlYSh1bnNpZ25lZCBsb25nIGFkZHIpCit7CisJc3RydWN0IHZtYXBfYXJlYSAqdmE7CisKKwlzcGluX2xvY2soJnZtYXBfYXJlYV9sb2NrKTsKKwl2YSA9IF9fZmluZF92bWFwX2FyZWEoYWRkcik7CisJc3Bpbl91bmxvY2soJnZtYXBfYXJlYV9sb2NrKTsKKworCXJldHVybiB2YTsKK30KKworc3RhdGljIHZvaWQgZnJlZV91bm1hcF92bWFwX2FyZWFfYWRkcih1bnNpZ25lZCBsb25nIGFkZHIpCit7CisJc3RydWN0IHZtYXBfYXJlYSAqdmE7CisKKwl2YSA9IGZpbmRfdm1hcF9hcmVhKGFkZHIpOworCUJVR19PTighdmEpOworCWZyZWVfdW5tYXBfdm1hcF9hcmVhKHZhKTsKK30KKworCisvKioqIFBlciBjcHUga3ZhIGFsbG9jYXRvciAqKiovCisKKy8qCisgKiB2bWFwIHNwYWNlIGlzIGxpbWl0ZWQgZXNwZWNpYWxseSBvbiAzMiBiaXQgYXJjaGl0ZWN0dXJlcy4gRW5zdXJlIHRoZXJlIGlzCisgKiByb29tIGZvciBhdCBsZWFzdCAxNiBwZXJjcHUgdm1hcCBibG9ja3MgcGVyIENQVS4KKyAqLworLyoKKyAqIElmIHdlIGhhZCBhIGNvbnN0YW50IFZNQUxMT0NfU1RBUlQgYW5kIFZNQUxMT0NfRU5ELCB3ZSdkIGxpa2UgdG8gYmUgYWJsZQorICogdG8gI2RlZmluZSBWTUFMTE9DX1NQQUNFCQkoVk1BTExPQ19FTkQtVk1BTExPQ19TVEFSVCkuIEd1ZXNzCisgKiBpbnN0ZWFkICh3ZSBqdXN0IG5lZWQgYSByb3VnaCBpZGVhKQorICovCisjaWYgQklUU19QRVJfTE9ORyA9PSAzMgorI2RlZmluZSBWTUFMTE9DX1NQQUNFCQkoMTI4VUwqMTAyNCoxMDI0KQorI2Vsc2UKKyNkZWZpbmUgVk1BTExPQ19TUEFDRQkJKDEyOFVMKjEwMjQqMTAyNCoxMDI0KQorI2VuZGlmCisKKyNkZWZpbmUgVk1BTExPQ19QQUdFUwkJKFZNQUxMT0NfU1BBQ0UgLyBQQUdFX1NJWkUpCisjZGVmaW5lIFZNQVBfTUFYX0FMTE9DCQlCSVRTX1BFUl9MT05HCS8qIDI1Nksgd2l0aCA0SyBwYWdlcyAqLworI2RlZmluZSBWTUFQX0JCTUFQX0JJVFNfTUFYCTEwMjQJLyogNE1CIHdpdGggNEsgcGFnZXMgKi8KKyNkZWZpbmUgVk1BUF9CQk1BUF9CSVRTX01JTgkoVk1BUF9NQVhfQUxMT0MqMikKKyNkZWZpbmUgVk1BUF9NSU4oeCwgeSkJCSgoeCkgPCAoeSkgPyAoeCkgOiAoeSkpIC8qIGNhbid0IHVzZSBtaW4oKSAqLworI2RlZmluZSBWTUFQX01BWCh4LCB5KQkJKCh4KSA+ICh5KSA/ICh4KSA6ICh5KSkgLyogY2FuJ3QgdXNlIG1heCgpICovCisjZGVmaW5lIFZNQVBfQkJNQVBfQklUUwkJVk1BUF9NSU4oVk1BUF9CQk1BUF9CSVRTX01BWCwJCVwKKwkJCQkJVk1BUF9NQVgoVk1BUF9CQk1BUF9CSVRTX01JTiwJXAorCQkJCQkJVk1BTExPQ19QQUdFUyAvIE5SX0NQVVMgLyAxNikpCisKKyNkZWZpbmUgVk1BUF9CTE9DS19TSVpFCQkoVk1BUF9CQk1BUF9CSVRTICogUEFHRV9TSVpFKQorCitzdHJ1Y3Qgdm1hcF9ibG9ja19xdWV1ZSB7CisJc3BpbmxvY2tfdCBsb2NrOworCXN0cnVjdCBsaXN0X2hlYWQgZnJlZTsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGRpcnR5OworCXVuc2lnbmVkIGludCBucl9kaXJ0eTsKK307CisKK3N0cnVjdCB2bWFwX2Jsb2NrIHsKKwlzcGlubG9ja190IGxvY2s7CisJc3RydWN0IHZtYXBfYXJlYSAqdmE7CisJc3RydWN0IHZtYXBfYmxvY2tfcXVldWUgKnZicTsKKwl1bnNpZ25lZCBsb25nIGZyZWUsIGRpcnR5OworCURFQ0xBUkVfQklUTUFQKGFsbG9jX21hcCwgVk1BUF9CQk1BUF9CSVRTKTsKKwlERUNMQVJFX0JJVE1BUChkaXJ0eV9tYXAsIFZNQVBfQkJNQVBfQklUUyk7CisJdW5pb24geworCQlzdHJ1Y3QgeworCQkJc3RydWN0IGxpc3RfaGVhZCBmcmVlX2xpc3Q7CisJCQlzdHJ1Y3QgbGlzdF9oZWFkIGRpcnR5X2xpc3Q7CisJCX07CisJCXN0cnVjdCByY3VfaGVhZCByY3VfaGVhZDsKKwl9OworfTsKKworLyogUXVldWUgb2YgZnJlZSBhbmQgZGlydHkgdm1hcCBibG9ja3MsIGZvciBhbGxvY2F0aW9uIGFuZCBmbHVzaGluZyBwdXJwb3NlcyAqLworc3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCB2bWFwX2Jsb2NrX3F1ZXVlLCB2bWFwX2Jsb2NrX3F1ZXVlKTsKKworLyoKKyAqIFJhZGl4IHRyZWUgb2Ygdm1hcCBibG9ja3MsIGluZGV4ZWQgYnkgYWRkcmVzcywgdG8gcXVpY2tseSBmaW5kIGEgdm1hcCBibG9jaworICogaW4gdGhlIGZyZWUgcGF0aC4gQ291bGQgZ2V0IHJpZCBvZiB0aGlzIGlmIHdlIGNoYW5nZSB0aGUgQVBJIHRvIHJldHVybiBhCisgKiAiY29va2llIiBmcm9tIGFsbG9jLCB0byBiZSBwYXNzZWQgdG8gZnJlZS4gQnV0IG5vIGJpZyBkZWFsIHlldC4KKyAqLworc3RhdGljIERFRklORV9TUElOTE9DSyh2bWFwX2Jsb2NrX3RyZWVfbG9jayk7CitzdGF0aWMgUkFESVhfVFJFRSh2bWFwX2Jsb2NrX3RyZWUsIEdGUF9BVE9NSUMpOworCisvKgorICogV2Ugc2hvdWxkIHByb2JhYmx5IGhhdmUgYSBmYWxsYmFjayBtZWNoYW5pc20gdG8gYWxsb2NhdGUgdmlydHVhbCBtZW1vcnkKKyAqIG91dCBvZiBwYXJ0aWFsbHkgZmlsbGVkIHZtYXAgYmxvY2tzLiBIb3dldmVyIHZtYXAgYmxvY2sgc2l6aW5nIHNob3VsZCBiZQorICogZmFpcmx5IHJlYXNvbmFibGUgYWNjb3JkaW5nIHRvIHRoZSB2bWFsbG9jIHNpemUsIHNvIGl0IHNob3VsZG4ndCBiZSBhCisgKiBiaWcgcHJvYmxlbS4KKyAqLworCitzdGF0aWMgdW5zaWduZWQgbG9uZyBhZGRyX3RvX3ZiX2lkeCh1bnNpZ25lZCBsb25nIGFkZHIpCit7CisJYWRkciAtPSBWTUFMTE9DX1NUQVJUICYgfihWTUFQX0JMT0NLX1NJWkUtMSk7CisJYWRkciAvPSBWTUFQX0JMT0NLX1NJWkU7CisJcmV0dXJuIGFkZHI7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgdm1hcF9ibG9jayAqbmV3X3ZtYXBfYmxvY2soZ2ZwX3QgZ2ZwX21hc2spCit7CisJc3RydWN0IHZtYXBfYmxvY2tfcXVldWUgKnZicTsKKwlzdHJ1Y3Qgdm1hcF9ibG9jayAqdmI7CisJc3RydWN0IHZtYXBfYXJlYSAqdmE7CisJdW5zaWduZWQgbG9uZyB2Yl9pZHg7CisJaW50IG5vZGUsIGVycjsKKworCW5vZGUgPSBudW1hX25vZGVfaWQoKTsKKworCXZiID0ga21hbGxvY19ub2RlKHNpemVvZihzdHJ1Y3Qgdm1hcF9ibG9jayksCisJCQlnZnBfbWFzayAmIEdGUF9SRUNMQUlNX01BU0ssIG5vZGUpOworCWlmICh1bmxpa2VseSghdmIpKQorCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKKworCXZhID0gYWxsb2Nfdm1hcF9hcmVhKFZNQVBfQkxPQ0tfU0laRSwgVk1BUF9CTE9DS19TSVpFLAorCQkJCQlWTUFMTE9DX1NUQVJULCBWTUFMTE9DX0VORCwKKwkJCQkJbm9kZSwgZ2ZwX21hc2spOworCWlmICh1bmxpa2VseShJU19FUlIodmEpKSkgeworCQlrZnJlZSh2Yik7CisJCXJldHVybiBFUlJfUFRSKFBUUl9FUlIodmEpKTsKKwl9CisKKwllcnIgPSByYWRpeF90cmVlX3ByZWxvYWQoZ2ZwX21hc2spOworCWlmICh1bmxpa2VseShlcnIpKSB7CisJCWtmcmVlKHZiKTsKKwkJZnJlZV92bWFwX2FyZWEodmEpOworCQlyZXR1cm4gRVJSX1BUUihlcnIpOworCX0KKworCXNwaW5fbG9ja19pbml0KCZ2Yi0+bG9jayk7CisJdmItPnZhID0gdmE7CisJdmItPmZyZWUgPSBWTUFQX0JCTUFQX0JJVFM7CisJdmItPmRpcnR5ID0gMDsKKwliaXRtYXBfemVybyh2Yi0+YWxsb2NfbWFwLCBWTUFQX0JCTUFQX0JJVFMpOworCWJpdG1hcF96ZXJvKHZiLT5kaXJ0eV9tYXAsIFZNQVBfQkJNQVBfQklUUyk7CisJSU5JVF9MSVNUX0hFQUQoJnZiLT5mcmVlX2xpc3QpOworCUlOSVRfTElTVF9IRUFEKCZ2Yi0+ZGlydHlfbGlzdCk7CisKKwl2Yl9pZHggPSBhZGRyX3RvX3ZiX2lkeCh2YS0+dmFfc3RhcnQpOworCXNwaW5fbG9jaygmdm1hcF9ibG9ja190cmVlX2xvY2spOworCWVyciA9IHJhZGl4X3RyZWVfaW5zZXJ0KCZ2bWFwX2Jsb2NrX3RyZWUsIHZiX2lkeCwgdmIpOworCXNwaW5fdW5sb2NrKCZ2bWFwX2Jsb2NrX3RyZWVfbG9jayk7CisJQlVHX09OKGVycik7CisJcmFkaXhfdHJlZV9wcmVsb2FkX2VuZCgpOworCisJdmJxID0gJmdldF9jcHVfdmFyKHZtYXBfYmxvY2tfcXVldWUpOworCXZiLT52YnEgPSB2YnE7CisJc3Bpbl9sb2NrKCZ2YnEtPmxvY2spOworCWxpc3RfYWRkKCZ2Yi0+ZnJlZV9saXN0LCAmdmJxLT5mcmVlKTsKKwlzcGluX3VubG9jaygmdmJxLT5sb2NrKTsKKwlwdXRfY3B1X3Zhcih2bWFwX2NwdV9ibG9ja3MpOworCisJcmV0dXJuIHZiOworfQorCitzdGF0aWMgdm9pZCByY3VfZnJlZV92YihzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpCit7CisJc3RydWN0IHZtYXBfYmxvY2sgKnZiID0gY29udGFpbmVyX29mKGhlYWQsIHN0cnVjdCB2bWFwX2Jsb2NrLCByY3VfaGVhZCk7CisKKwlrZnJlZSh2Yik7Cit9CisKK3N0YXRpYyB2b2lkIGZyZWVfdm1hcF9ibG9jayhzdHJ1Y3Qgdm1hcF9ibG9jayAqdmIpCit7CisJc3RydWN0IHZtYXBfYmxvY2sgKnRtcDsKKwl1bnNpZ25lZCBsb25nIHZiX2lkeDsKKworCXNwaW5fbG9jaygmdmItPnZicS0+bG9jayk7CisJaWYgKCFsaXN0X2VtcHR5KCZ2Yi0+ZnJlZV9saXN0KSkKKwkJbGlzdF9kZWwoJnZiLT5mcmVlX2xpc3QpOworCWlmICghbGlzdF9lbXB0eSgmdmItPmRpcnR5X2xpc3QpKQorCQlsaXN0X2RlbCgmdmItPmRpcnR5X2xpc3QpOworCXNwaW5fdW5sb2NrKCZ2Yi0+dmJxLT5sb2NrKTsKKworCXZiX2lkeCA9IGFkZHJfdG9fdmJfaWR4KHZiLT52YS0+dmFfc3RhcnQpOworCXNwaW5fbG9jaygmdm1hcF9ibG9ja190cmVlX2xvY2spOworCXRtcCA9IHJhZGl4X3RyZWVfZGVsZXRlKCZ2bWFwX2Jsb2NrX3RyZWUsIHZiX2lkeCk7CisJc3Bpbl91bmxvY2soJnZtYXBfYmxvY2tfdHJlZV9sb2NrKTsKKwlCVUdfT04odG1wICE9IHZiKTsKKworCWZyZWVfdW5tYXBfdm1hcF9hcmVhKHZiLT52YSk7CisJY2FsbF9yY3UoJnZiLT5yY3VfaGVhZCwgcmN1X2ZyZWVfdmIpOworfQorCitzdGF0aWMgdm9pZCAqdmJfYWxsb2ModW5zaWduZWQgbG9uZyBzaXplLCBnZnBfdCBnZnBfbWFzaykKK3sKKwlzdHJ1Y3Qgdm1hcF9ibG9ja19xdWV1ZSAqdmJxOworCXN0cnVjdCB2bWFwX2Jsb2NrICp2YjsKKwl1bnNpZ25lZCBsb25nIGFkZHIgPSAwOworCXVuc2lnbmVkIGludCBvcmRlcjsKKworCUJVR19PTihzaXplICYgflBBR0VfTUFTSyk7CisJQlVHX09OKHNpemUgPiBQQUdFX1NJWkUqVk1BUF9NQVhfQUxMT0MpOworCW9yZGVyID0gZ2V0X29yZGVyKHNpemUpOworCithZ2FpbjoKKwlyY3VfcmVhZF9sb2NrKCk7CisJdmJxID0gJmdldF9jcHVfdmFyKHZtYXBfYmxvY2tfcXVldWUpOworCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHZiLCAmdmJxLT5mcmVlLCBmcmVlX2xpc3QpIHsKKwkJaW50IGk7CisKKwkJc3Bpbl9sb2NrKCZ2Yi0+bG9jayk7CisJCWkgPSBiaXRtYXBfZmluZF9mcmVlX3JlZ2lvbih2Yi0+YWxsb2NfbWFwLAorCQkJCQkJVk1BUF9CQk1BUF9CSVRTLCBvcmRlcik7CisKKwkJaWYgKGkgPj0gMCkgeworCQkJYWRkciA9IHZiLT52YS0+dmFfc3RhcnQgKyAoaSA8PCBQQUdFX1NISUZUKTsKKwkJCUJVR19PTihhZGRyX3RvX3ZiX2lkeChhZGRyKSAhPQorCQkJCQlhZGRyX3RvX3ZiX2lkeCh2Yi0+dmEtPnZhX3N0YXJ0KSk7CisJCQl2Yi0+ZnJlZSAtPSAxVUwgPDwgb3JkZXI7CisJCQlpZiAodmItPmZyZWUgPT0gMCkgeworCQkJCXNwaW5fbG9jaygmdmJxLT5sb2NrKTsKKwkJCQlsaXN0X2RlbF9pbml0KCZ2Yi0+ZnJlZV9saXN0KTsKKwkJCQlzcGluX3VubG9jaygmdmJxLT5sb2NrKTsKKwkJCX0KKwkJCXNwaW5fdW5sb2NrKCZ2Yi0+bG9jayk7CisJCQlicmVhazsKKwkJfQorCQlzcGluX3VubG9jaygmdmItPmxvY2spOworCX0KKwlwdXRfY3B1X3Zhcih2bWFwX2NwdV9ibG9ja3MpOworCXJjdV9yZWFkX3VubG9jaygpOworCisJaWYgKCFhZGRyKSB7CisJCXZiID0gbmV3X3ZtYXBfYmxvY2soZ2ZwX21hc2spOworCQlpZiAoSVNfRVJSKHZiKSkKKwkJCXJldHVybiB2YjsKKwkJZ290byBhZ2FpbjsKKwl9CisKKwlyZXR1cm4gKHZvaWQgKilhZGRyOworfQorCitzdGF0aWMgdm9pZCB2Yl9mcmVlKGNvbnN0IHZvaWQgKmFkZHIsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKK3sKKwl1bnNpZ25lZCBsb25nIG9mZnNldDsKKwl1bnNpZ25lZCBsb25nIHZiX2lkeDsKKwl1bnNpZ25lZCBpbnQgb3JkZXI7CisJc3RydWN0IHZtYXBfYmxvY2sgKnZiOworCisJQlVHX09OKHNpemUgJiB+UEFHRV9NQVNLKTsKKwlCVUdfT04oc2l6ZSA+IFBBR0VfU0laRSpWTUFQX01BWF9BTExPQyk7CisJb3JkZXIgPSBnZXRfb3JkZXIoc2l6ZSk7CisKKwlvZmZzZXQgPSAodW5zaWduZWQgbG9uZylhZGRyICYgKFZNQVBfQkxPQ0tfU0laRSAtIDEpOworCisJdmJfaWR4ID0gYWRkcl90b192Yl9pZHgoKHVuc2lnbmVkIGxvbmcpYWRkcik7CisJcmN1X3JlYWRfbG9jaygpOworCXZiID0gcmFkaXhfdHJlZV9sb29rdXAoJnZtYXBfYmxvY2tfdHJlZSwgdmJfaWR4KTsKKwlyY3VfcmVhZF91bmxvY2soKTsKKwlCVUdfT04oIXZiKTsKKworCXNwaW5fbG9jaygmdmItPmxvY2spOworCWJpdG1hcF9hbGxvY2F0ZV9yZWdpb24odmItPmRpcnR5X21hcCwgb2Zmc2V0ID4+IFBBR0VfU0hJRlQsIG9yZGVyKTsKKwlpZiAoIXZiLT5kaXJ0eSkgeworCQlzcGluX2xvY2soJnZiLT52YnEtPmxvY2spOworCQlsaXN0X2FkZCgmdmItPmRpcnR5X2xpc3QsICZ2Yi0+dmJxLT5kaXJ0eSk7CisJCXNwaW5fdW5sb2NrKCZ2Yi0+dmJxLT5sb2NrKTsKKwl9CisJdmItPmRpcnR5ICs9IDFVTCA8PCBvcmRlcjsKKwlpZiAodmItPmRpcnR5ID09IFZNQVBfQkJNQVBfQklUUykgeworCQlCVUdfT04odmItPmZyZWUgfHwgIWxpc3RfZW1wdHkoJnZiLT5mcmVlX2xpc3QpKTsKKwkJc3Bpbl91bmxvY2soJnZiLT5sb2NrKTsKKwkJZnJlZV92bWFwX2Jsb2NrKHZiKTsKKwl9IGVsc2UKKwkJc3Bpbl91bmxvY2soJnZiLT5sb2NrKTsKK30KKworLyoqCisgKiB2bV91bm1hcF9hbGlhc2VzIC0gdW5tYXAgb3V0c3RhbmRpbmcgbGF6eSBhbGlhc2VzIGluIHRoZSB2bWFwIGxheWVyCisgKgorICogVGhlIHZtYXAvdm1hbGxvYyBsYXllciBsYXppbHkgZmx1c2hlcyBrZXJuZWwgdmlydHVhbCBtYXBwaW5ncyBwcmltYXJpbHkKKyAqIHRvIGFtb3J0aXplIFRMQiBmbHVzaGluZyBvdmVyaGVhZHMuIFdoYXQgdGhpcyBtZWFucyBpcyB0aGF0IGFueSBwYWdlIHlvdQorICogaGF2ZSBub3csIG1heSwgaW4gYSBmb3JtZXIgbGlmZSwgaGF2ZSBiZWVuIG1hcHBlZCBpbnRvIGtlcm5lbCB2aXJ0dWFsCisgKiBhZGRyZXNzIGJ5IHRoZSB2bWFwIGxheWVyIGFuZCBzbyB0aGVyZSBtaWdodCBiZSBzb21lIENQVXMgd2l0aCBUTEIgZW50cmllcworICogc3RpbGwgcmVmZXJlbmNpbmcgdGhhdCBwYWdlIChhZGRpdGlvbmFsIHRvIHRoZSByZWd1bGFyIDE6MSBrZXJuZWwgbWFwcGluZykuCisgKgorICogdm1fdW5tYXBfYWxpYXNlcyBmbHVzaGVzIGFsbCBzdWNoIGxhenkgbWFwcGluZ3MuIEFmdGVyIGl0IHJldHVybnMsIHdlIGNhbgorICogYmUgc3VyZSB0aGF0IG5vbmUgb2YgdGhlIHBhZ2VzIHdlIGhhdmUgY29udHJvbCBvdmVyIHdpbGwgaGF2ZSBhbnkgYWxpYXNlcworICogZnJvbSB0aGUgdm1hcCBsYXllci4KKyAqLwordm9pZCB2bV91bm1hcF9hbGlhc2VzKHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyBzdGFydCA9IFVMT05HX01BWCwgZW5kID0gMDsKKwlpbnQgY3B1OworCWludCBmbHVzaCA9IDA7CisKKwlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7CisJCXN0cnVjdCB2bWFwX2Jsb2NrX3F1ZXVlICp2YnEgPSAmcGVyX2NwdSh2bWFwX2Jsb2NrX3F1ZXVlLCBjcHUpOworCQlzdHJ1Y3Qgdm1hcF9ibG9jayAqdmI7CisKKwkJcmN1X3JlYWRfbG9jaygpOworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdSh2YiwgJnZicS0+ZnJlZSwgZnJlZV9saXN0KSB7CisJCQlpbnQgaTsKKworCQkJc3Bpbl9sb2NrKCZ2Yi0+bG9jayk7CisJCQlpID0gZmluZF9maXJzdF9iaXQodmItPmRpcnR5X21hcCwgVk1BUF9CQk1BUF9CSVRTKTsKKwkJCXdoaWxlIChpIDwgVk1BUF9CQk1BUF9CSVRTKSB7CisJCQkJdW5zaWduZWQgbG9uZyBzLCBlOworCQkJCWludCBqOworCQkJCWogPSBmaW5kX25leHRfemVyb19iaXQodmItPmRpcnR5X21hcCwKKwkJCQkJVk1BUF9CQk1BUF9CSVRTLCBpKTsKKworCQkJCXMgPSB2Yi0+dmEtPnZhX3N0YXJ0ICsgKGkgPDwgUEFHRV9TSElGVCk7CisJCQkJZSA9IHZiLT52YS0+dmFfc3RhcnQgKyAoaiA8PCBQQUdFX1NISUZUKTsKKwkJCQl2dW5tYXBfcGFnZV9yYW5nZShzLCBlKTsKKwkJCQlmbHVzaCA9IDE7CisKKwkJCQlpZiAocyA8IHN0YXJ0KQorCQkJCQlzdGFydCA9IHM7CisJCQkJaWYgKGUgPiBlbmQpCisJCQkJCWVuZCA9IGU7CisKKwkJCQlpID0gajsKKwkJCQlpID0gZmluZF9uZXh0X2JpdCh2Yi0+ZGlydHlfbWFwLAorCQkJCQkJCVZNQVBfQkJNQVBfQklUUywgaSk7CisJCQl9CisJCQlzcGluX3VubG9jaygmdmItPmxvY2spOworCQl9CisJCXJjdV9yZWFkX3VubG9jaygpOworCX0KKworCV9fcHVyZ2Vfdm1hcF9hcmVhX2xhenkoJnN0YXJ0LCAmZW5kLCAxLCBmbHVzaCk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTCh2bV91bm1hcF9hbGlhc2VzKTsKKworLyoqCisgKiB2bV91bm1hcF9yYW0gLSB1bm1hcCBsaW5lYXIga2VybmVsIGFkZHJlc3Mgc3BhY2Ugc2V0IHVwIGJ5IHZtX21hcF9yYW0KKyAqIEBtZW06IHRoZSBwb2ludGVyIHJldHVybmVkIGJ5IHZtX21hcF9yYW0KKyAqIEBjb3VudDogdGhlIGNvdW50IHBhc3NlZCB0byB0aGF0IHZtX21hcF9yYW0gY2FsbCAoY2Fubm90IHVubWFwIHBhcnRpYWwpCisgKi8KK3ZvaWQgdm1fdW5tYXBfcmFtKGNvbnN0IHZvaWQgKm1lbSwgdW5zaWduZWQgaW50IGNvdW50KQoreworCXVuc2lnbmVkIGxvbmcgc2l6ZSA9IGNvdW50IDw8IFBBR0VfU0hJRlQ7CisJdW5zaWduZWQgbG9uZyBhZGRyID0gKHVuc2lnbmVkIGxvbmcpbWVtOworCisJQlVHX09OKCFhZGRyKTsKKwlCVUdfT04oYWRkciA8IFZNQUxMT0NfU1RBUlQpOworCUJVR19PTihhZGRyID4gVk1BTExPQ19FTkQpOworCUJVR19PTihhZGRyICYgKFBBR0VfU0laRS0xKSk7CisKKwlkZWJ1Z19jaGVja19ub19sb2Nrc19mcmVlZChtZW0sIHNpemUpOworCisJaWYgKGxpa2VseShjb3VudCA8PSBWTUFQX01BWF9BTExPQykpCisJCXZiX2ZyZWUobWVtLCBzaXplKTsKKwllbHNlCisJCWZyZWVfdW5tYXBfdm1hcF9hcmVhX2FkZHIoYWRkcik7Cit9CitFWFBPUlRfU1lNQk9MKHZtX3VubWFwX3JhbSk7CisKKy8qKgorICogdm1fbWFwX3JhbSAtIG1hcCBwYWdlcyBsaW5lYXJseSBpbnRvIGtlcm5lbCB2aXJ0dWFsIGFkZHJlc3MgKHZtYWxsb2Mgc3BhY2UpCisgKiBAcGFnZXM6IGFuIGFycmF5IG9mIHBvaW50ZXJzIHRvIHRoZSBwYWdlcyB0byBiZSBtYXBwZWQKKyAqIEBjb3VudDogbnVtYmVyIG9mIHBhZ2VzCisgKiBAbm9kZTogcHJlZmVyIHRvIGFsbG9jYXRlIGRhdGEgc3RydWN0dXJlcyBvbiB0aGlzIG5vZGUKKyAqIEBwcm90OiBtZW1vcnkgcHJvdGVjdGlvbiB0byB1c2UuIFBBR0VfS0VSTkVMIGZvciByZWd1bGFyIFJBTQorICogQHJldHVybnM6IGEgcG9pbnRlciB0byB0aGUgYWRkcmVzcyB0aGF0IGhhcyBiZWVuIG1hcHBlZCwgb3IgTlVMTCBvbiBmYWlsdXJlCisgKi8KK3ZvaWQgKnZtX21hcF9yYW0oc3RydWN0IHBhZ2UgKipwYWdlcywgdW5zaWduZWQgaW50IGNvdW50LCBpbnQgbm9kZSwgcGdwcm90X3QgcHJvdCkKK3sKKwl1bnNpZ25lZCBsb25nIHNpemUgPSBjb3VudCA8PCBQQUdFX1NISUZUOworCXVuc2lnbmVkIGxvbmcgYWRkcjsKKwl2b2lkICptZW07CisKKwlpZiAobGlrZWx5KGNvdW50IDw9IFZNQVBfTUFYX0FMTE9DKSkgeworCQltZW0gPSB2Yl9hbGxvYyhzaXplLCBHRlBfS0VSTkVMKTsKKwkJaWYgKElTX0VSUihtZW0pKQorCQkJcmV0dXJuIE5VTEw7CisJCWFkZHIgPSAodW5zaWduZWQgbG9uZyltZW07CisJfSBlbHNlIHsKKwkJc3RydWN0IHZtYXBfYXJlYSAqdmE7CisJCXZhID0gYWxsb2Nfdm1hcF9hcmVhKHNpemUsIFBBR0VfU0laRSwKKwkJCQlWTUFMTE9DX1NUQVJULCBWTUFMTE9DX0VORCwgbm9kZSwgR0ZQX0tFUk5FTCk7CisJCWlmIChJU19FUlIodmEpKQorCQkJcmV0dXJuIE5VTEw7CisKKwkJYWRkciA9IHZhLT52YV9zdGFydDsKKwkJbWVtID0gKHZvaWQgKilhZGRyOworCX0KKwlpZiAodm1hcF9wYWdlX3JhbmdlKGFkZHIsIGFkZHIgKyBzaXplLCBwcm90LCBwYWdlcykgPCAwKSB7CisJCXZtX3VubWFwX3JhbShtZW0sIGNvdW50KTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCXJldHVybiBtZW07Cit9CitFWFBPUlRfU1lNQk9MKHZtX21hcF9yYW0pOworCit2b2lkIF9faW5pdCB2bWFsbG9jX2luaXQodm9pZCkKK3sKKwlpbnQgaTsKKworCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShpKSB7CisJCXN0cnVjdCB2bWFwX2Jsb2NrX3F1ZXVlICp2YnE7CisKKwkJdmJxID0gJnBlcl9jcHUodm1hcF9ibG9ja19xdWV1ZSwgaSk7CisJCXNwaW5fbG9ja19pbml0KCZ2YnEtPmxvY2spOworCQlJTklUX0xJU1RfSEVBRCgmdmJxLT5mcmVlKTsKKwkJSU5JVF9MSVNUX0hFQUQoJnZicS0+ZGlydHkpOworCQl2YnEtPm5yX2RpcnR5ID0gMDsKKwl9Cit9CisKK3ZvaWQgdW5tYXBfa2VybmVsX3JhbmdlKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBzaXplKQoreworCXVuc2lnbmVkIGxvbmcgZW5kID0gYWRkciArIHNpemU7CisJdnVubWFwX3BhZ2VfcmFuZ2UoYWRkciwgZW5kKTsKKwlmbHVzaF90bGJfa2VybmVsX3JhbmdlKGFkZHIsIGVuZCk7Cit9CisKK2ludCBtYXBfdm1fYXJlYShzdHJ1Y3Qgdm1fc3RydWN0ICphcmVhLCBwZ3Byb3RfdCBwcm90LCBzdHJ1Y3QgcGFnZSAqKipwYWdlcykKK3sKKwl1bnNpZ25lZCBsb25nIGFkZHIgPSAodW5zaWduZWQgbG9uZylhcmVhLT5hZGRyOworCXVuc2lnbmVkIGxvbmcgZW5kID0gYWRkciArIGFyZWEtPnNpemUgLSBQQUdFX1NJWkU7CisJaW50IGVycjsKKworCWVyciA9IHZtYXBfcGFnZV9yYW5nZShhZGRyLCBlbmQsIHByb3QsICpwYWdlcyk7CisJaWYgKGVyciA+IDApIHsKKwkJKnBhZ2VzICs9IGVycjsKKwkJZXJyID0gMDsKKwl9CisKKwlyZXR1cm4gZXJyOworfQorRVhQT1JUX1NZTUJPTF9HUEwobWFwX3ZtX2FyZWEpOworCisvKioqIE9sZCB2bWFsbG9jIGludGVyZmFjZXMgKioqLworREVGSU5FX1JXTE9DSyh2bWxpc3RfbG9jayk7CitzdHJ1Y3Qgdm1fc3RydWN0ICp2bWxpc3Q7CisKK3N0YXRpYyBzdHJ1Y3Qgdm1fc3RydWN0ICpfX2dldF92bV9hcmVhX25vZGUodW5zaWduZWQgbG9uZyBzaXplLAorCQl1bnNpZ25lZCBsb25nIGZsYWdzLCB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCwKKwkJaW50IG5vZGUsIGdmcF90IGdmcF9tYXNrLCB2b2lkICpjYWxsZXIpCit7CisJc3RhdGljIHN0cnVjdCB2bWFwX2FyZWEgKnZhOworCXN0cnVjdCB2bV9zdHJ1Y3QgKmFyZWE7CisJc3RydWN0IHZtX3N0cnVjdCAqdG1wLCAqKnA7CisJdW5zaWduZWQgbG9uZyBhbGlnbiA9IDE7CiAKIAlCVUdfT04oaW5faW50ZXJydXB0KCkpOwogCWlmIChmbGFncyAmIFZNX0lPUkVNQVApIHsKQEAgLTI0NiwxMyArOTkwLDEyIEBACiAKIAkJYWxpZ24gPSAxdWwgPDwgYml0OwogCX0KLQlhZGRyID0gQUxJR04oc3RhcnQsIGFsaWduKTsKKwogCXNpemUgPSBQQUdFX0FMSUdOKHNpemUpOwogCWlmICh1bmxpa2VseSghc2l6ZSkpCiAJCXJldHVybiBOVUxMOwogCiAJYXJlYSA9IGttYWxsb2Nfbm9kZShzaXplb2YoKmFyZWEpLCBnZnBfbWFzayAmIEdGUF9SRUNMQUlNX01BU0ssIG5vZGUpOwotCiAJaWYgKHVubGlrZWx5KCFhcmVhKSkKIAkJcmV0dXJuIE5VTEw7CiAKQEAgLTI2MSw0OCArMTAwNCwzMiBAQAogCSAqLwogCXNpemUgKz0gUEFHRV9TSVpFOwogCi0Jd3JpdGVfbG9jaygmdm1saXN0X2xvY2spOwotCWZvciAocCA9ICZ2bWxpc3Q7ICh0bXAgPSAqcCkgIT0gTlVMTCA7cCA9ICZ0bXAtPm5leHQpIHsKLQkJaWYgKCh1bnNpZ25lZCBsb25nKXRtcC0+YWRkciA8IGFkZHIpIHsKLQkJCWlmKCh1bnNpZ25lZCBsb25nKXRtcC0+YWRkciArIHRtcC0+c2l6ZSA+PSBhZGRyKQotCQkJCWFkZHIgPSBBTElHTih0bXAtPnNpemUgKyAKLQkJCQkJICAgICAodW5zaWduZWQgbG9uZyl0bXAtPmFkZHIsIGFsaWduKTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0JCWlmICgoc2l6ZSArIGFkZHIpIDwgYWRkcikKLQkJCWdvdG8gb3V0OwotCQlpZiAoc2l6ZSArIGFkZHIgPD0gKHVuc2lnbmVkIGxvbmcpdG1wLT5hZGRyKQotCQkJZ290byBmb3VuZDsKLQkJYWRkciA9IEFMSUdOKHRtcC0+c2l6ZSArICh1bnNpZ25lZCBsb25nKXRtcC0+YWRkciwgYWxpZ24pOwotCQlpZiAoYWRkciA+IGVuZCAtIHNpemUpCi0JCQlnb3RvIG91dDsKKwl2YSA9IGFsbG9jX3ZtYXBfYXJlYShzaXplLCBhbGlnbiwgc3RhcnQsIGVuZCwgbm9kZSwgZ2ZwX21hc2spOworCWlmIChJU19FUlIodmEpKSB7CisJCWtmcmVlKGFyZWEpOworCQlyZXR1cm4gTlVMTDsKIAl9Ci0JaWYgKChzaXplICsgYWRkcikgPCBhZGRyKQotCQlnb3RvIG91dDsKLQlpZiAoYWRkciA+IGVuZCAtIHNpemUpCi0JCWdvdG8gb3V0OwotCi1mb3VuZDoKLQlhcmVhLT5uZXh0ID0gKnA7Ci0JKnAgPSBhcmVhOwogCiAJYXJlYS0+ZmxhZ3MgPSBmbGFnczsKLQlhcmVhLT5hZGRyID0gKHZvaWQgKilhZGRyOworCWFyZWEtPmFkZHIgPSAodm9pZCAqKXZhLT52YV9zdGFydDsKIAlhcmVhLT5zaXplID0gc2l6ZTsKIAlhcmVhLT5wYWdlcyA9IE5VTEw7CiAJYXJlYS0+bnJfcGFnZXMgPSAwOwogCWFyZWEtPnBoeXNfYWRkciA9IDA7CiAJYXJlYS0+Y2FsbGVyID0gY2FsbGVyOworCXZhLT5wcml2YXRlID0gYXJlYTsKKwl2YS0+ZmxhZ3MgfD0gVk1fVk1fQVJFQTsKKworCXdyaXRlX2xvY2soJnZtbGlzdF9sb2NrKTsKKwlmb3IgKHAgPSAmdm1saXN0OyAodG1wID0gKnApICE9IE5VTEw7IHAgPSAmdG1wLT5uZXh0KSB7CisJCWlmICh0bXAtPmFkZHIgPj0gYXJlYS0+YWRkcikKKwkJCWJyZWFrOworCX0KKwlhcmVhLT5uZXh0ID0gKnA7CisJKnAgPSBhcmVhOwogCXdyaXRlX3VubG9jaygmdm1saXN0X2xvY2spOwogCiAJcmV0dXJuIGFyZWE7Ci0KLW91dDoKLQl3cml0ZV91bmxvY2soJnZtbGlzdF9sb2NrKTsKLQlrZnJlZShhcmVhKTsKLQlpZiAocHJpbnRrX3JhdGVsaW1pdCgpKQotCQlwcmludGsoS0VSTl9XQVJOSU5HICJhbGxvY2F0aW9uIGZhaWxlZDogb3V0IG9mIHZtYWxsb2Mgc3BhY2UgLSB1c2Ugdm1hbGxvYz08c2l6ZT4gdG8gaW5jcmVhc2Ugc2l6ZS5cbiIpOwotCXJldHVybiBOVUxMOwogfQogCiBzdHJ1Y3Qgdm1fc3RydWN0ICpfX2dldF92bV9hcmVhKHVuc2lnbmVkIGxvbmcgc2l6ZSwgdW5zaWduZWQgbG9uZyBmbGFncywKQEAgLTM0MiwzOSArMTA2OSwxNSBAQAogCQkJCSAgZ2ZwX21hc2ssIF9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKSk7CiB9CiAKLS8qIENhbGxlciBtdXN0IGhvbGQgdm1saXN0X2xvY2sgKi8KLXN0YXRpYyBzdHJ1Y3Qgdm1fc3RydWN0ICpfX2ZpbmRfdm1fYXJlYShjb25zdCB2b2lkICphZGRyKQorc3RhdGljIHN0cnVjdCB2bV9zdHJ1Y3QgKmZpbmRfdm1fYXJlYShjb25zdCB2b2lkICphZGRyKQogewotCXN0cnVjdCB2bV9zdHJ1Y3QgKnRtcDsKKwlzdHJ1Y3Qgdm1hcF9hcmVhICp2YTsKIAotCWZvciAodG1wID0gdm1saXN0OyB0bXAgIT0gTlVMTDsgdG1wID0gdG1wLT5uZXh0KSB7Ci0JCSBpZiAodG1wLT5hZGRyID09IGFkZHIpCi0JCQlicmVhazsKLQl9CisJdmEgPSBmaW5kX3ZtYXBfYXJlYSgodW5zaWduZWQgbG9uZylhZGRyKTsKKwlpZiAodmEgJiYgdmEtPmZsYWdzICYgVk1fVk1fQVJFQSkKKwkJcmV0dXJuIHZhLT5wcml2YXRlOwogCi0JcmV0dXJuIHRtcDsKLX0KLQotLyogQ2FsbGVyIG11c3QgaG9sZCB2bWxpc3RfbG9jayAqLwotc3RhdGljIHN0cnVjdCB2bV9zdHJ1Y3QgKl9fcmVtb3ZlX3ZtX2FyZWEoY29uc3Qgdm9pZCAqYWRkcikKLXsKLQlzdHJ1Y3Qgdm1fc3RydWN0ICoqcCwgKnRtcDsKLQotCWZvciAocCA9ICZ2bWxpc3QgOyAodG1wID0gKnApICE9IE5VTEwgO3AgPSAmdG1wLT5uZXh0KSB7Ci0JCSBpZiAodG1wLT5hZGRyID09IGFkZHIpCi0JCQkgZ290byBmb3VuZDsKLQl9CiAJcmV0dXJuIE5VTEw7Ci0KLWZvdW5kOgotCXVubWFwX3ZtX2FyZWEodG1wKTsKLQkqcCA9IHRtcC0+bmV4dDsKLQotCS8qCi0JICogUmVtb3ZlIHRoZSBndWFyZCBwYWdlLgotCSAqLwotCXRtcC0+c2l6ZSAtPSBQQUdFX1NJWkU7Ci0JcmV0dXJuIHRtcDsKIH0KIAogLyoqCkBAIC0zODcsMTEgKzEwOTAsMjQgQEAKICAqLwogc3RydWN0IHZtX3N0cnVjdCAqcmVtb3ZlX3ZtX2FyZWEoY29uc3Qgdm9pZCAqYWRkcikKIHsKLQlzdHJ1Y3Qgdm1fc3RydWN0ICp2OwotCXdyaXRlX2xvY2soJnZtbGlzdF9sb2NrKTsKLQl2ID0gX19yZW1vdmVfdm1fYXJlYShhZGRyKTsKLQl3cml0ZV91bmxvY2soJnZtbGlzdF9sb2NrKTsKLQlyZXR1cm4gdjsKKwlzdHJ1Y3Qgdm1hcF9hcmVhICp2YTsKKworCXZhID0gZmluZF92bWFwX2FyZWEoKHVuc2lnbmVkIGxvbmcpYWRkcik7CisJaWYgKHZhICYmIHZhLT5mbGFncyAmIFZNX1ZNX0FSRUEpIHsKKwkJc3RydWN0IHZtX3N0cnVjdCAqdm0gPSB2YS0+cHJpdmF0ZTsKKwkJc3RydWN0IHZtX3N0cnVjdCAqdG1wLCAqKnA7CisJCWZyZWVfdW5tYXBfdm1hcF9hcmVhKHZhKTsKKwkJdm0tPnNpemUgLT0gUEFHRV9TSVpFOworCisJCXdyaXRlX2xvY2soJnZtbGlzdF9sb2NrKTsKKwkJZm9yIChwID0gJnZtbGlzdDsgKHRtcCA9ICpwKSAhPSB2bTsgcCA9ICZ0bXAtPm5leHQpCisJCQk7CisJCSpwID0gdG1wLT5uZXh0OworCQl3cml0ZV91bmxvY2soJnZtbGlzdF9sb2NrKTsKKworCQlyZXR1cm4gdm07CisJfQorCXJldHVybiBOVUxMOwogfQogCiBzdGF0aWMgdm9pZCBfX3Z1bm1hcChjb25zdCB2b2lkICphZGRyLCBpbnQgZGVhbGxvY2F0ZV9wYWdlcykKQEAgLTUwMSw2ICsxMjE3LDggQEAKIH0KIEVYUE9SVF9TWU1CT0wodm1hcCk7CiAKK3N0YXRpYyB2b2lkICpfX3ZtYWxsb2Nfbm9kZSh1bnNpZ25lZCBsb25nIHNpemUsIGdmcF90IGdmcF9tYXNrLCBwZ3Byb3RfdCBwcm90LAorCQkJICAgIGludCBub2RlLCB2b2lkICpjYWxsZXIpOwogc3RhdGljIHZvaWQgKl9fdm1hbGxvY19hcmVhX25vZGUoc3RydWN0IHZtX3N0cnVjdCAqYXJlYSwgZ2ZwX3QgZ2ZwX21hc2ssCiAJCQkJIHBncHJvdF90IHByb3QsIGludCBub2RlLCB2b2lkICpjYWxsZXIpCiB7CkBAIC02MjcsMTAgKzEzNDUsOCBAQAogCiAJcmV0ID0gX192bWFsbG9jKHNpemUsIEdGUF9LRVJORUwgfCBfX0dGUF9ISUdITUVNIHwgX19HRlBfWkVSTywgUEFHRV9LRVJORUwpOwogCWlmIChyZXQpIHsKLQkJd3JpdGVfbG9jaygmdm1saXN0X2xvY2spOwotCQlhcmVhID0gX19maW5kX3ZtX2FyZWEocmV0KTsKKwkJYXJlYSA9IGZpbmRfdm1fYXJlYShyZXQpOwogCQlhcmVhLT5mbGFncyB8PSBWTV9VU0VSTUFQOwotCQl3cml0ZV91bmxvY2soJnZtbGlzdF9sb2NrKTsKIAl9CiAJcmV0dXJuIHJldDsKIH0KQEAgLTcxMCwxMCArMTQyNiw4IEBACiAKIAlyZXQgPSBfX3ZtYWxsb2Moc2l6ZSwgR0ZQX1ZNQUxMT0MzMiB8IF9fR0ZQX1pFUk8sIFBBR0VfS0VSTkVMKTsKIAlpZiAocmV0KSB7Ci0JCXdyaXRlX2xvY2soJnZtbGlzdF9sb2NrKTsKLQkJYXJlYSA9IF9fZmluZF92bV9hcmVhKHJldCk7CisJCWFyZWEgPSBmaW5kX3ZtX2FyZWEocmV0KTsKIAkJYXJlYS0+ZmxhZ3MgfD0gVk1fVVNFUk1BUDsKLQkJd3JpdGVfdW5sb2NrKCZ2bWxpc3RfbG9jayk7CiAJfQogCXJldHVybiByZXQ7CiB9CkBAIC04MTQsMjYgKzE1MjgsMjUgQEAKIAlzdHJ1Y3Qgdm1fc3RydWN0ICphcmVhOwogCXVuc2lnbmVkIGxvbmcgdWFkZHIgPSB2bWEtPnZtX3N0YXJ0OwogCXVuc2lnbmVkIGxvbmcgdXNpemUgPSB2bWEtPnZtX2VuZCAtIHZtYS0+dm1fc3RhcnQ7Ci0JaW50IHJldDsKIAogCWlmICgoUEFHRV9TSVpFLTEpICYgKHVuc2lnbmVkIGxvbmcpYWRkcikKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlyZWFkX2xvY2soJnZtbGlzdF9sb2NrKTsKLQlhcmVhID0gX19maW5kX3ZtX2FyZWEoYWRkcik7CisJYXJlYSA9IGZpbmRfdm1fYXJlYShhZGRyKTsKIAlpZiAoIWFyZWEpCi0JCWdvdG8gb3V0X2VpbnZhbF9sb2NrZWQ7CisJCXJldHVybiAtRUlOVkFMOwogCiAJaWYgKCEoYXJlYS0+ZmxhZ3MgJiBWTV9VU0VSTUFQKSkKLQkJZ290byBvdXRfZWludmFsX2xvY2tlZDsKKwkJcmV0dXJuIC1FSU5WQUw7CiAKIAlpZiAodXNpemUgKyAocGdvZmYgPDwgUEFHRV9TSElGVCkgPiBhcmVhLT5zaXplIC0gUEFHRV9TSVpFKQotCQlnb3RvIG91dF9laW52YWxfbG9ja2VkOwotCXJlYWRfdW5sb2NrKCZ2bWxpc3RfbG9jayk7CisJCXJldHVybiAtRUlOVkFMOwogCiAJYWRkciArPSBwZ29mZiA8PCBQQUdFX1NISUZUOwogCWRvIHsKIAkJc3RydWN0IHBhZ2UgKnBhZ2UgPSB2bWFsbG9jX3RvX3BhZ2UoYWRkcik7CisJCWludCByZXQ7CisKIAkJcmV0ID0gdm1faW5zZXJ0X3BhZ2Uodm1hLCB1YWRkciwgcGFnZSk7CiAJCWlmIChyZXQpCiAJCQlyZXR1cm4gcmV0OwpAQCAtODQ2LDExICsxNTU5LDcgQEAKIAkvKiBQcmV2ZW50ICJ0aGluZ3MiIGxpa2UgbWVtb3J5IG1pZ3JhdGlvbj8gVk1fZmxhZ3MgbmVlZCBhIGNsZWFudXAuLi4gKi8KIAl2bWEtPnZtX2ZsYWdzIHw9IFZNX1JFU0VSVkVEOwogCi0JcmV0dXJuIHJldDsKLQotb3V0X2VpbnZhbF9sb2NrZWQ6Ci0JcmVhZF91bmxvY2soJnZtbGlzdF9sb2NrKTsKLQlyZXR1cm4gLUVJTlZBTDsKKwlyZXR1cm4gMDsKIH0KIEVYUE9SVF9TWU1CT0wocmVtYXBfdm1hbGxvY19yYW5nZSk7CiAKZGlmZiAtLWdpdCBhL21tL3Ztc2Nhbi5jIGIvbW0vdm1zY2FuLmMKaW5kZXggMWZmMWE1OC4uM2I1ODYwMiAxMDA2NDQKLS0tIGEvbW0vdm1zY2FuLmMKKysrIGIvbW0vdm1zY2FuLmMKQEAgLTM5LDYgKzM5LDcgQEAKICNpbmNsdWRlIDxsaW51eC9mcmVlemVyLmg+CiAjaW5jbHVkZSA8bGludXgvbWVtY29udHJvbC5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5YWNjdC5oPgorI2luY2x1ZGUgPGxpbnV4L3N5c2N0bC5oPgogCiAjaW5jbHVkZSA8YXNtL3RsYmZsdXNoLmg+CiAjaW5jbHVkZSA8YXNtL2RpdjY0Lmg+CkBAIC03OCw3ICs3OSw3IEBACiAJdW5zaWduZWQgbG9uZyAoKmlzb2xhdGVfcGFnZXMpKHVuc2lnbmVkIGxvbmcgbnIsIHN0cnVjdCBsaXN0X2hlYWQgKmRzdCwKIAkJCXVuc2lnbmVkIGxvbmcgKnNjYW5uZWQsIGludCBvcmRlciwgaW50IG1vZGUsCiAJCQlzdHJ1Y3Qgem9uZSAqeiwgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbV9jb250LAotCQkJaW50IGFjdGl2ZSk7CisJCQlpbnQgYWN0aXZlLCBpbnQgZmlsZSk7CiB9OwogCiAjZGVmaW5lIGxydV90b19wYWdlKF9oZWFkKSAobGlzdF9lbnRyeSgoX2hlYWQpLT5wcmV2LCBzdHJ1Y3QgcGFnZSwgbHJ1KSkKQEAgLTQ3MCw2ICs0NzEsODUgQEAKIAlyZXR1cm4gMDsKIH0KIAorLyoqCisgKiBwdXRiYWNrX2xydV9wYWdlIC0gcHV0IHByZXZpb3VzbHkgaXNvbGF0ZWQgcGFnZSBvbnRvIGFwcHJvcHJpYXRlIExSVSBsaXN0CisgKiBAcGFnZTogcGFnZSB0byBiZSBwdXQgYmFjayB0byBhcHByb3ByaWF0ZSBscnUgbGlzdAorICoKKyAqIEFkZCBwcmV2aW91c2x5IGlzb2xhdGVkIEBwYWdlIHRvIGFwcHJvcHJpYXRlIExSVSBsaXN0LgorICogUGFnZSBtYXkgc3RpbGwgYmUgdW5ldmljdGFibGUgZm9yIG90aGVyIHJlYXNvbnMuCisgKgorICogbHJ1X2xvY2sgbXVzdCBub3QgYmUgaGVsZCwgaW50ZXJydXB0cyBtdXN0IGJlIGVuYWJsZWQuCisgKi8KKyNpZmRlZiBDT05GSUdfVU5FVklDVEFCTEVfTFJVCit2b2lkIHB1dGJhY2tfbHJ1X3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpCit7CisJaW50IGxydTsKKwlpbnQgYWN0aXZlID0gISFUZXN0Q2xlYXJQYWdlQWN0aXZlKHBhZ2UpOworCWludCB3YXNfdW5ldmljdGFibGUgPSBQYWdlVW5ldmljdGFibGUocGFnZSk7CisKKwlWTV9CVUdfT04oUGFnZUxSVShwYWdlKSk7CisKK3JlZG86CisJQ2xlYXJQYWdlVW5ldmljdGFibGUocGFnZSk7CisKKwlpZiAocGFnZV9ldmljdGFibGUocGFnZSwgTlVMTCkpIHsKKwkJLyoKKwkJICogRm9yIGV2aWN0YWJsZSBwYWdlcywgd2UgY2FuIHVzZSB0aGUgY2FjaGUuCisJCSAqIEluIGV2ZW50IG9mIGEgcmFjZSwgd29yc3QgY2FzZSBpcyB3ZSBlbmQgdXAgd2l0aCBhbgorCQkgKiB1bmV2aWN0YWJsZSBwYWdlIG9uIFtpbl1hY3RpdmUgbGlzdC4KKwkJICogV2Uga25vdyBob3cgdG8gaGFuZGxlIHRoYXQuCisJCSAqLworCQlscnUgPSBhY3RpdmUgKyBwYWdlX2lzX2ZpbGVfY2FjaGUocGFnZSk7CisJCWxydV9jYWNoZV9hZGRfbHJ1KHBhZ2UsIGxydSk7CisJfSBlbHNlIHsKKwkJLyoKKwkJICogUHV0IHVuZXZpY3RhYmxlIHBhZ2VzIGRpcmVjdGx5IG9uIHpvbmUncyB1bmV2aWN0YWJsZQorCQkgKiBsaXN0LgorCQkgKi8KKwkJbHJ1ID0gTFJVX1VORVZJQ1RBQkxFOworCQlhZGRfcGFnZV90b191bmV2aWN0YWJsZV9saXN0KHBhZ2UpOworCX0KKwltZW1fY2dyb3VwX21vdmVfbGlzdHMocGFnZSwgbHJ1KTsKKworCS8qCisJICogcGFnZSdzIHN0YXR1cyBjYW4gY2hhbmdlIHdoaWxlIHdlIG1vdmUgaXQgYW1vbmcgbHJ1LiBJZiBhbiBldmljdGFibGUKKwkgKiBwYWdlIGlzIG9uIHVuZXZpY3RhYmxlIGxpc3QsIGl0IG5ldmVyIGJlIGZyZWVkLiBUbyBhdm9pZCB0aGF0LAorCSAqIGNoZWNrIGFmdGVyIHdlIGFkZGVkIGl0IHRvIHRoZSBsaXN0LCBhZ2Fpbi4KKwkgKi8KKwlpZiAobHJ1ID09IExSVV9VTkVWSUNUQUJMRSAmJiBwYWdlX2V2aWN0YWJsZShwYWdlLCBOVUxMKSkgeworCQlpZiAoIWlzb2xhdGVfbHJ1X3BhZ2UocGFnZSkpIHsKKwkJCXB1dF9wYWdlKHBhZ2UpOworCQkJZ290byByZWRvOworCQl9CisJCS8qIFRoaXMgbWVhbnMgc29tZW9uZSBlbHNlIGRyb3BwZWQgdGhpcyBwYWdlIGZyb20gTFJVCisJCSAqIFNvLCBpdCB3aWxsIGJlIGZyZWVkIG9yIHB1dGJhY2sgdG8gTFJVIGFnYWluLiBUaGVyZSBpcworCQkgKiBub3RoaW5nIHRvIGRvIGhlcmUuCisJCSAqLworCX0KKworCWlmICh3YXNfdW5ldmljdGFibGUgJiYgbHJ1ICE9IExSVV9VTkVWSUNUQUJMRSkKKwkJY291bnRfdm1fZXZlbnQoVU5FVklDVEFCTEVfUEdSRVNDVUVEKTsKKwllbHNlIGlmICghd2FzX3VuZXZpY3RhYmxlICYmIGxydSA9PSBMUlVfVU5FVklDVEFCTEUpCisJCWNvdW50X3ZtX2V2ZW50KFVORVZJQ1RBQkxFX1BHQ1VMTEVEKTsKKworCXB1dF9wYWdlKHBhZ2UpOwkJLyogZHJvcCByZWYgZnJvbSBpc29sYXRlICovCit9CisKKyNlbHNlIC8qIENPTkZJR19VTkVWSUNUQUJMRV9MUlUgKi8KKwordm9pZCBwdXRiYWNrX2xydV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlKQoreworCWludCBscnU7CisJVk1fQlVHX09OKFBhZ2VMUlUocGFnZSkpOworCisJbHJ1ID0gISFUZXN0Q2xlYXJQYWdlQWN0aXZlKHBhZ2UpICsgcGFnZV9pc19maWxlX2NhY2hlKHBhZ2UpOworCWxydV9jYWNoZV9hZGRfbHJ1KHBhZ2UsIGxydSk7CisJbWVtX2Nncm91cF9tb3ZlX2xpc3RzKHBhZ2UsIGxydSk7CisJcHV0X3BhZ2UocGFnZSk7Cit9CisjZW5kaWYgLyogQ09ORklHX1VORVZJQ1RBQkxFX0xSVSAqLworCisKIC8qCiAgKiBzaHJpbmtfcGFnZV9saXN0KCkgcmV0dXJucyB0aGUgbnVtYmVyIG9mIHJlY2xhaW1lZCBwYWdlcwogICovCkBAIC01MDMsNiArNTgzLDkgQEAKIAogCQlzYy0+bnJfc2Nhbm5lZCsrOwogCisJCWlmICh1bmxpa2VseSghcGFnZV9ldmljdGFibGUocGFnZSwgTlVMTCkpKQorCQkJZ290byBjdWxsX21sb2NrZWQ7CisKIAkJaWYgKCFzYy0+bWF5X3N3YXAgJiYgcGFnZV9tYXBwZWQocGFnZSkpCiAJCQlnb3RvIGtlZXBfbG9ja2VkOwogCkBAIC01MzksOSArNjIyLDE5IEBACiAJCSAqIEFub255bW91cyBwcm9jZXNzIG1lbW9yeSBoYXMgYmFja2luZyBzdG9yZT8KIAkJICogVHJ5IHRvIGFsbG9jYXRlIGl0IHNvbWUgc3dhcCBzcGFjZSBoZXJlLgogCQkgKi8KLQkJaWYgKFBhZ2VBbm9uKHBhZ2UpICYmICFQYWdlU3dhcENhY2hlKHBhZ2UpKQorCQlpZiAoUGFnZUFub24ocGFnZSkgJiYgIVBhZ2VTd2FwQ2FjaGUocGFnZSkpIHsKKwkJCXN3aXRjaCAodHJ5X3RvX211bmxvY2socGFnZSkpIHsKKwkJCWNhc2UgU1dBUF9GQUlMOgkJLyogc2hvdWxkbid0IGhhcHBlbiAqLworCQkJY2FzZSBTV0FQX0FHQUlOOgorCQkJCWdvdG8ga2VlcF9sb2NrZWQ7CisJCQljYXNlIFNXQVBfTUxPQ0s6CisJCQkJZ290byBjdWxsX21sb2NrZWQ7CisJCQljYXNlIFNXQVBfU1VDQ0VTUzoKKwkJCQk7IC8qIGZhbGwgdGhydSc7IGFkZCB0byBzd2FwIGNhY2hlICovCisJCQl9CiAJCQlpZiAoIWFkZF90b19zd2FwKHBhZ2UsIEdGUF9BVE9NSUMpKQogCQkJCWdvdG8gYWN0aXZhdGVfbG9ja2VkOworCQl9CiAjZW5kaWYgLyogQ09ORklHX1NXQVAgKi8KIAogCQltYXBwaW5nID0gcGFnZV9tYXBwaW5nKHBhZ2UpOwpAQCAtNTU2LDYgKzY0OSw4IEBACiAJCQkJZ290byBhY3RpdmF0ZV9sb2NrZWQ7CiAJCQljYXNlIFNXQVBfQUdBSU46CiAJCQkJZ290byBrZWVwX2xvY2tlZDsKKwkJCWNhc2UgU1dBUF9NTE9DSzoKKwkJCQlnb3RvIGN1bGxfbWxvY2tlZDsKIAkJCWNhc2UgU1dBUF9TVUNDRVNTOgogCQkJCTsgLyogdHJ5IHRvIGZyZWUgdGhlIHBhZ2UgYmVsb3cgKi8KIAkJCX0KQEAgLTYwMiw3ICs2OTcsNyBAQAogCQkgKiBwb3NzaWJsZSBmb3IgYSBwYWdlIHRvIGhhdmUgUGFnZURpcnR5IHNldCwgYnV0IGl0IGlzIGFjdHVhbGx5CiAJCSAqIGNsZWFuIChhbGwgaXRzIGJ1ZmZlcnMgYXJlIGNsZWFuKS4gIFRoaXMgaGFwcGVucyBpZiB0aGUKIAkJICogYnVmZmVycyB3ZXJlIHdyaXR0ZW4gb3V0IGRpcmVjdGx5LCB3aXRoIHN1Ym1pdF9iaCgpLiBleHQzCi0JCSAqIHdpbGwgZG8gdGhpcywgYXMgd2VsbCBhcyB0aGUgYmxvY2tkZXYgbWFwcGluZy4gCisJCSAqIHdpbGwgZG8gdGhpcywgYXMgd2VsbCBhcyB0aGUgYmxvY2tkZXYgbWFwcGluZy4KIAkJICogdHJ5X3RvX3JlbGVhc2VfcGFnZSgpIHdpbGwgZGlzY292ZXIgdGhhdCBjbGVhbm5lc3MgYW5kIHdpbGwKIAkJICogZHJvcCB0aGUgYnVmZmVycyBhbmQgbWFyayB0aGUgcGFnZSBjbGVhbiAtIGl0IGNhbiBiZSBmcmVlZC4KIAkJICoKQEAgLTYzNyw3ICs3MzIsMTQgQEAKIAkJaWYgKCFtYXBwaW5nIHx8ICFfX3JlbW92ZV9tYXBwaW5nKG1hcHBpbmcsIHBhZ2UpKQogCQkJZ290byBrZWVwX2xvY2tlZDsKIAotCQl1bmxvY2tfcGFnZShwYWdlKTsKKwkJLyoKKwkJICogQXQgdGhpcyBwb2ludCwgd2UgaGF2ZSBubyBvdGhlciByZWZlcmVuY2VzIGFuZCB0aGVyZSBpcworCQkgKiBubyB3YXkgdG8gcGljayBhbnkgbW9yZSB1cCAocmVtb3ZlZCBmcm9tIExSVSwgcmVtb3ZlZAorCQkgKiBmcm9tIHBhZ2VjYWNoZSkuIENhbiB1c2Ugbm9uLWF0b21pYyBiaXRvcHMgbm93IChhbmQKKwkJICogd2Ugb2J2aW91c2x5IGRvbid0IGhhdmUgdG8gd29ycnkgYWJvdXQgd2FraW5nIHVwIGEgcHJvY2VzcworCQkgKiB3YWl0aW5nIG9uIHRoZSBwYWdlIGxvY2ssIGJlY2F1c2UgdGhlcmUgYXJlIG5vIHJlZmVyZW5jZXMuCisJCSAqLworCQlfX2NsZWFyX3BhZ2VfbG9ja2VkKHBhZ2UpOwogZnJlZV9pdDoKIAkJbnJfcmVjbGFpbWVkKys7CiAJCWlmICghcGFnZXZlY19hZGQoJmZyZWVkX3B2ZWMsIHBhZ2UpKSB7CkBAIC02NDYsMTQgKzc0OCwyMyBAQAogCQl9CiAJCWNvbnRpbnVlOwogCitjdWxsX21sb2NrZWQ6CisJCXVubG9ja19wYWdlKHBhZ2UpOworCQlwdXRiYWNrX2xydV9wYWdlKHBhZ2UpOworCQljb250aW51ZTsKKwogYWN0aXZhdGVfbG9ja2VkOgorCQkvKiBOb3QgYSBjYW5kaWRhdGUgZm9yIHN3YXBwaW5nLCBzbyByZWNsYWltIHN3YXAgc3BhY2UuICovCisJCWlmIChQYWdlU3dhcENhY2hlKHBhZ2UpICYmIHZtX3N3YXBfZnVsbCgpKQorCQkJcmVtb3ZlX2V4Y2x1c2l2ZV9zd2FwX3BhZ2VfcmVmKHBhZ2UpOworCQlWTV9CVUdfT04oUGFnZUFjdGl2ZShwYWdlKSk7CiAJCVNldFBhZ2VBY3RpdmUocGFnZSk7CiAJCXBnYWN0aXZhdGUrKzsKIGtlZXBfbG9ja2VkOgogCQl1bmxvY2tfcGFnZShwYWdlKTsKIGtlZXA6CiAJCWxpc3RfYWRkKCZwYWdlLT5scnUsICZyZXRfcGFnZXMpOwotCQlWTV9CVUdfT04oUGFnZUxSVShwYWdlKSk7CisJCVZNX0JVR19PTihQYWdlTFJVKHBhZ2UpIHx8IFBhZ2VVbmV2aWN0YWJsZShwYWdlKSk7CiAJfQogCWxpc3Rfc3BsaWNlKCZyZXRfcGFnZXMsIHBhZ2VfbGlzdCk7CiAJaWYgKHBhZ2V2ZWNfY291bnQoJmZyZWVkX3B2ZWMpKQpAQCAtNjc3LDcgKzc4OCw3IEBACiAgKgogICogcmV0dXJucyAwIG9uIHN1Y2Nlc3MsIC12ZSBlcnJubyBvbiBmYWlsdXJlLgogICovCi1pbnQgX19pc29sYXRlX2xydV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCBpbnQgbW9kZSkKK2ludCBfX2lzb2xhdGVfbHJ1X3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIGludCBtb2RlLCBpbnQgZmlsZSkKIHsKIAlpbnQgcmV0ID0gLUVJTlZBTDsKIApAQCAtNjkzLDYgKzgwNCwxNyBAQAogCWlmIChtb2RlICE9IElTT0xBVEVfQk9USCAmJiAoIVBhZ2VBY3RpdmUocGFnZSkgIT0gIW1vZGUpKQogCQlyZXR1cm4gcmV0OwogCisJaWYgKG1vZGUgIT0gSVNPTEFURV9CT1RIICYmICghcGFnZV9pc19maWxlX2NhY2hlKHBhZ2UpICE9ICFmaWxlKSkKKwkJcmV0dXJuIHJldDsKKworCS8qCisJICogV2hlbiB0aGlzIGZ1bmN0aW9uIGlzIGJlaW5nIGNhbGxlZCBmb3IgbHVtcHkgcmVjbGFpbSwgd2UKKwkgKiBpbml0aWFsbHkgbG9vayBpbnRvIGFsbCBMUlUgcGFnZXMsIGFjdGl2ZSwgaW5hY3RpdmUgYW5kCisJICogdW5ldmljdGFibGU7IG9ubHkgZ2l2ZSBzaHJpbmtfcGFnZV9saXN0IGV2aWN0YWJsZSBwYWdlcy4KKwkgKi8KKwlpZiAoUGFnZVVuZXZpY3RhYmxlKHBhZ2UpKQorCQlyZXR1cm4gcmV0OworCiAJcmV0ID0gLUVCVVNZOwogCWlmIChsaWtlbHkoZ2V0X3BhZ2VfdW5sZXNzX3plcm8ocGFnZSkpKSB7CiAJCS8qCkBAIC03MjMsMTIgKzg0NSwxMyBAQAogICogQHNjYW5uZWQ6CVRoZSBudW1iZXIgb2YgcGFnZXMgdGhhdCB3ZXJlIHNjYW5uZWQuCiAgKiBAb3JkZXI6CVRoZSBjYWxsZXIncyBhdHRlbXB0ZWQgYWxsb2NhdGlvbiBvcmRlcgogICogQG1vZGU6CU9uZSBvZiB0aGUgTFJVIGlzb2xhdGlvbiBtb2RlcworICogQGZpbGU6CVRydWUgWzFdIGlmIGlzb2xhdGluZyBmaWxlIFshYW5vbl0gcGFnZXMKICAqCiAgKiByZXR1cm5zIGhvdyBtYW55IHBhZ2VzIHdlcmUgbW92ZWQgb250byAqQGRzdC4KICAqLwogc3RhdGljIHVuc2lnbmVkIGxvbmcgaXNvbGF0ZV9scnVfcGFnZXModW5zaWduZWQgbG9uZyBucl90b19zY2FuLAogCQlzdHJ1Y3QgbGlzdF9oZWFkICpzcmMsIHN0cnVjdCBsaXN0X2hlYWQgKmRzdCwKLQkJdW5zaWduZWQgbG9uZyAqc2Nhbm5lZCwgaW50IG9yZGVyLCBpbnQgbW9kZSkKKwkJdW5zaWduZWQgbG9uZyAqc2Nhbm5lZCwgaW50IG9yZGVyLCBpbnQgbW9kZSwgaW50IGZpbGUpCiB7CiAJdW5zaWduZWQgbG9uZyBucl90YWtlbiA9IDA7CiAJdW5zaWduZWQgbG9uZyBzY2FuOwpAQCAtNzQ1LDcgKzg2OCw3IEBACiAKIAkJVk1fQlVHX09OKCFQYWdlTFJVKHBhZ2UpKTsKIAotCQlzd2l0Y2ggKF9faXNvbGF0ZV9scnVfcGFnZShwYWdlLCBtb2RlKSkgeworCQlzd2l0Y2ggKF9faXNvbGF0ZV9scnVfcGFnZShwYWdlLCBtb2RlLCBmaWxlKSkgewogCQljYXNlIDA6CiAJCQlsaXN0X21vdmUoJnBhZ2UtPmxydSwgZHN0KTsKIAkJCW5yX3Rha2VuKys7CkBAIC03ODgsMTAgKzkxMSwxMSBAQAogCQkJCWJyZWFrOwogCiAJCQljdXJzb3JfcGFnZSA9IHBmbl90b19wYWdlKHBmbik7CisKIAkJCS8qIENoZWNrIHRoYXQgd2UgaGF2ZSBub3QgY3Jvc3NlZCBhIHpvbmUgYm91bmRhcnkuICovCiAJCQlpZiAodW5saWtlbHkocGFnZV96b25lX2lkKGN1cnNvcl9wYWdlKSAhPSB6b25lX2lkKSkKIAkJCQljb250aW51ZTsKLQkJCXN3aXRjaCAoX19pc29sYXRlX2xydV9wYWdlKGN1cnNvcl9wYWdlLCBtb2RlKSkgeworCQkJc3dpdGNoIChfX2lzb2xhdGVfbHJ1X3BhZ2UoY3Vyc29yX3BhZ2UsIG1vZGUsIGZpbGUpKSB7CiAJCQljYXNlIDA6CiAJCQkJbGlzdF9tb3ZlKCZjdXJzb3JfcGFnZS0+bHJ1LCBkc3QpOwogCQkJCW5yX3Rha2VuKys7CkBAIC04MDIsNyArOTI2LDcgQEAKIAkJCQkvKiBlbHNlIGl0IGlzIGJlaW5nIGZyZWVkIGVsc2V3aGVyZSAqLwogCQkJCWxpc3RfbW92ZSgmY3Vyc29yX3BhZ2UtPmxydSwgc3JjKTsKIAkJCWRlZmF1bHQ6Ci0JCQkJYnJlYWs7CisJCQkJYnJlYWs7CS8qICEgb24gTFJVIG9yIHdyb25nIGxpc3QgKi8KIAkJCX0KIAkJfQogCX0KQEAgLTgxNiw0MCArOTQwLDkzIEBACiAJCQkJCXVuc2lnbmVkIGxvbmcgKnNjYW5uZWQsIGludCBvcmRlciwKIAkJCQkJaW50IG1vZGUsIHN0cnVjdCB6b25lICp6LAogCQkJCQlzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2NvbnQsCi0JCQkJCWludCBhY3RpdmUpCisJCQkJCWludCBhY3RpdmUsIGludCBmaWxlKQogeworCWludCBscnUgPSBMUlVfQkFTRTsKIAlpZiAoYWN0aXZlKQotCQlyZXR1cm4gaXNvbGF0ZV9scnVfcGFnZXMobnIsICZ6LT5hY3RpdmVfbGlzdCwgZHN0LAotCQkJCQkJc2Nhbm5lZCwgb3JkZXIsIG1vZGUpOwotCWVsc2UKLQkJcmV0dXJuIGlzb2xhdGVfbHJ1X3BhZ2VzKG5yLCAmei0+aW5hY3RpdmVfbGlzdCwgZHN0LAotCQkJCQkJc2Nhbm5lZCwgb3JkZXIsIG1vZGUpOworCQlscnUgKz0gTFJVX0FDVElWRTsKKwlpZiAoZmlsZSkKKwkJbHJ1ICs9IExSVV9GSUxFOworCXJldHVybiBpc29sYXRlX2xydV9wYWdlcyhuciwgJnotPmxydVtscnVdLmxpc3QsIGRzdCwgc2Nhbm5lZCwgb3JkZXIsCisJCQkJCQkJCW1vZGUsICEhZmlsZSk7CiB9CiAKIC8qCiAgKiBjbGVhcl9hY3RpdmVfZmxhZ3MoKSBpcyBhIGhlbHBlciBmb3Igc2hyaW5rX2FjdGl2ZV9saXN0KCksIGNsZWFyaW5nCiAgKiBhbnkgYWN0aXZlIGJpdHMgZnJvbSB0aGUgcGFnZXMgaW4gdGhlIGxpc3QuCiAgKi8KLXN0YXRpYyB1bnNpZ25lZCBsb25nIGNsZWFyX2FjdGl2ZV9mbGFncyhzdHJ1Y3QgbGlzdF9oZWFkICpwYWdlX2xpc3QpCitzdGF0aWMgdW5zaWduZWQgbG9uZyBjbGVhcl9hY3RpdmVfZmxhZ3Moc3RydWN0IGxpc3RfaGVhZCAqcGFnZV9saXN0LAorCQkJCQl1bnNpZ25lZCBpbnQgKmNvdW50KQogewogCWludCBucl9hY3RpdmUgPSAwOworCWludCBscnU7CiAJc3RydWN0IHBhZ2UgKnBhZ2U7CiAKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHBhZ2UsIHBhZ2VfbGlzdCwgbHJ1KQorCWxpc3RfZm9yX2VhY2hfZW50cnkocGFnZSwgcGFnZV9saXN0LCBscnUpIHsKKwkJbHJ1ID0gcGFnZV9pc19maWxlX2NhY2hlKHBhZ2UpOwogCQlpZiAoUGFnZUFjdGl2ZShwYWdlKSkgeworCQkJbHJ1ICs9IExSVV9BQ1RJVkU7CiAJCQlDbGVhclBhZ2VBY3RpdmUocGFnZSk7CiAJCQlucl9hY3RpdmUrKzsKIAkJfQorCQljb3VudFtscnVdKys7CisJfQogCiAJcmV0dXJuIG5yX2FjdGl2ZTsKIH0KIAorLyoqCisgKiBpc29sYXRlX2xydV9wYWdlIC0gdHJpZXMgdG8gaXNvbGF0ZSBhIHBhZ2UgZnJvbSBpdHMgTFJVIGxpc3QKKyAqIEBwYWdlOiBwYWdlIHRvIGlzb2xhdGUgZnJvbSBpdHMgTFJVIGxpc3QKKyAqCisgKiBJc29sYXRlcyBhIEBwYWdlIGZyb20gYW4gTFJVIGxpc3QsIGNsZWFycyBQYWdlTFJVIGFuZCBhZGp1c3RzIHRoZQorICogdm1zdGF0IHN0YXRpc3RpYyBjb3JyZXNwb25kaW5nIHRvIHdoYXRldmVyIExSVSBsaXN0IHRoZSBwYWdlIHdhcyBvbi4KKyAqCisgKiBSZXR1cm5zIDAgaWYgdGhlIHBhZ2Ugd2FzIHJlbW92ZWQgZnJvbSBhbiBMUlUgbGlzdC4KKyAqIFJldHVybnMgLUVCVVNZIGlmIHRoZSBwYWdlIHdhcyBub3Qgb24gYW4gTFJVIGxpc3QuCisgKgorICogVGhlIHJldHVybmVkIHBhZ2Ugd2lsbCBoYXZlIFBhZ2VMUlUoKSBjbGVhcmVkLiAgSWYgaXQgd2FzIGZvdW5kIG9uCisgKiB0aGUgYWN0aXZlIGxpc3QsIGl0IHdpbGwgaGF2ZSBQYWdlQWN0aXZlIHNldC4gIElmIGl0IHdhcyBmb3VuZCBvbgorICogdGhlIHVuZXZpY3RhYmxlIGxpc3QsIGl0IHdpbGwgaGF2ZSB0aGUgUGFnZVVuZXZpY3RhYmxlIGJpdCBzZXQuIFRoYXQgZmxhZworICogbWF5IG5lZWQgdG8gYmUgY2xlYXJlZCBieSB0aGUgY2FsbGVyIGJlZm9yZSBsZXR0aW5nIHRoZSBwYWdlIGdvLgorICoKKyAqIFRoZSB2bXN0YXQgc3RhdGlzdGljIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGxpc3Qgb24gd2hpY2ggdGhlIHBhZ2Ugd2FzCisgKiBmb3VuZCB3aWxsIGJlIGRlY3JlbWVudGVkLgorICoKKyAqIFJlc3RyaWN0aW9uczoKKyAqICgxKSBNdXN0IGJlIGNhbGxlZCB3aXRoIGFuIGVsZXZhdGVkIHJlZmNvdW50IG9uIHRoZSBwYWdlLiBUaGlzIGlzIGEKKyAqICAgICBmdW5kYW1lbnRuYWwgZGlmZmVyZW5jZSBmcm9tIGlzb2xhdGVfbHJ1X3BhZ2VzICh3aGljaCBpcyBjYWxsZWQKKyAqICAgICB3aXRob3V0IGEgc3RhYmxlIHJlZmVyZW5jZSkuCisgKiAoMikgdGhlIGxydV9sb2NrIG11c3Qgbm90IGJlIGhlbGQuCisgKiAoMykgaW50ZXJydXB0cyBtdXN0IGJlIGVuYWJsZWQuCisgKi8KK2ludCBpc29sYXRlX2xydV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlKQoreworCWludCByZXQgPSAtRUJVU1k7CisKKwlpZiAoUGFnZUxSVShwYWdlKSkgeworCQlzdHJ1Y3Qgem9uZSAqem9uZSA9IHBhZ2Vfem9uZShwYWdlKTsKKworCQlzcGluX2xvY2tfaXJxKCZ6b25lLT5scnVfbG9jayk7CisJCWlmIChQYWdlTFJVKHBhZ2UpICYmIGdldF9wYWdlX3VubGVzc196ZXJvKHBhZ2UpKSB7CisJCQlpbnQgbHJ1ID0gcGFnZV9scnUocGFnZSk7CisJCQlyZXQgPSAwOworCQkJQ2xlYXJQYWdlTFJVKHBhZ2UpOworCisJCQlkZWxfcGFnZV9mcm9tX2xydV9saXN0KHpvbmUsIHBhZ2UsIGxydSk7CisJCX0KKwkJc3Bpbl91bmxvY2tfaXJxKCZ6b25lLT5scnVfbG9jayk7CisJfQorCXJldHVybiByZXQ7Cit9CisKIC8qCiAgKiBzaHJpbmtfaW5hY3RpdmVfbGlzdCgpIGlzIGEgaGVscGVyIGZvciBzaHJpbmtfem9uZSgpLiAgSXQgcmV0dXJucyB0aGUgbnVtYmVyCiAgKiBvZiByZWNsYWltZWQgcGFnZXMKICAqLwogc3RhdGljIHVuc2lnbmVkIGxvbmcgc2hyaW5rX2luYWN0aXZlX2xpc3QodW5zaWduZWQgbG9uZyBtYXhfc2NhbiwKLQkJCQlzdHJ1Y3Qgem9uZSAqem9uZSwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpCisJCQlzdHJ1Y3Qgem9uZSAqem9uZSwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MsCisJCQlpbnQgcHJpb3JpdHksIGludCBmaWxlKQogewogCUxJU1RfSEVBRChwYWdlX2xpc3QpOwogCXN0cnVjdCBwYWdldmVjIHB2ZWM7CkBAIC04NjYsMjAgKzEwNDMsNDMgQEAKIAkJdW5zaWduZWQgbG9uZyBucl9zY2FuOwogCQl1bnNpZ25lZCBsb25nIG5yX2ZyZWVkOwogCQl1bnNpZ25lZCBsb25nIG5yX2FjdGl2ZTsKKwkJdW5zaWduZWQgaW50IGNvdW50W05SX0xSVV9MSVNUU10gPSB7IDAsIH07CisJCWludCBtb2RlID0gSVNPTEFURV9JTkFDVElWRTsKKworCQkvKgorCQkgKiBJZiB3ZSBuZWVkIGEgbGFyZ2UgY29udGlndW91cyBjaHVuayBvZiBtZW1vcnksIG9yIGhhdmUKKwkJICogdHJvdWJsZSBnZXR0aW5nIGEgc21hbGwgc2V0IG9mIGNvbnRpZ3VvdXMgcGFnZXMsIHdlCisJCSAqIHdpbGwgcmVjbGFpbSBib3RoIGFjdGl2ZSBhbmQgaW5hY3RpdmUgcGFnZXMuCisJCSAqCisJCSAqIFdlIHVzZSB0aGUgc2FtZSB0aHJlc2hvbGQgYXMgcGFnZW91dCBjb25nZXN0aW9uX3dhaXQgYmVsb3cuCisJCSAqLworCQlpZiAoc2MtPm9yZGVyID4gUEFHRV9BTExPQ19DT1NUTFlfT1JERVIpCisJCQltb2RlID0gSVNPTEFURV9CT1RIOworCQllbHNlIGlmIChzYy0+b3JkZXIgJiYgcHJpb3JpdHkgPCBERUZfUFJJT1JJVFkgLSAyKQorCQkJbW9kZSA9IElTT0xBVEVfQk9USDsKIAogCQlucl90YWtlbiA9IHNjLT5pc29sYXRlX3BhZ2VzKHNjLT5zd2FwX2NsdXN0ZXJfbWF4LAotCQkJICAgICAmcGFnZV9saXN0LCAmbnJfc2Nhbiwgc2MtPm9yZGVyLAotCQkJICAgICAoc2MtPm9yZGVyID4gUEFHRV9BTExPQ19DT1NUTFlfT1JERVIpPwotCQkJCQkgICAgIElTT0xBVEVfQk9USCA6IElTT0xBVEVfSU5BQ1RJVkUsCi0JCQkJem9uZSwgc2MtPm1lbV9jZ3JvdXAsIDApOwotCQlucl9hY3RpdmUgPSBjbGVhcl9hY3RpdmVfZmxhZ3MoJnBhZ2VfbGlzdCk7CisJCQkgICAgICZwYWdlX2xpc3QsICZucl9zY2FuLCBzYy0+b3JkZXIsIG1vZGUsCisJCQkJem9uZSwgc2MtPm1lbV9jZ3JvdXAsIDAsIGZpbGUpOworCQlucl9hY3RpdmUgPSBjbGVhcl9hY3RpdmVfZmxhZ3MoJnBhZ2VfbGlzdCwgY291bnQpOwogCQlfX2NvdW50X3ZtX2V2ZW50cyhQR0RFQUNUSVZBVEUsIG5yX2FjdGl2ZSk7CiAKLQkJX19tb2Rfem9uZV9wYWdlX3N0YXRlKHpvbmUsIE5SX0FDVElWRSwgLW5yX2FjdGl2ZSk7Ci0JCV9fbW9kX3pvbmVfcGFnZV9zdGF0ZSh6b25lLCBOUl9JTkFDVElWRSwKLQkJCQkJCS0obnJfdGFrZW4gLSBucl9hY3RpdmUpKTsKLQkJaWYgKHNjYW5fZ2xvYmFsX2xydShzYykpCisJCV9fbW9kX3pvbmVfcGFnZV9zdGF0ZSh6b25lLCBOUl9BQ1RJVkVfRklMRSwKKwkJCQkJCS1jb3VudFtMUlVfQUNUSVZFX0ZJTEVdKTsKKwkJX19tb2Rfem9uZV9wYWdlX3N0YXRlKHpvbmUsIE5SX0lOQUNUSVZFX0ZJTEUsCisJCQkJCQktY291bnRbTFJVX0lOQUNUSVZFX0ZJTEVdKTsKKwkJX19tb2Rfem9uZV9wYWdlX3N0YXRlKHpvbmUsIE5SX0FDVElWRV9BTk9OLAorCQkJCQkJLWNvdW50W0xSVV9BQ1RJVkVfQU5PTl0pOworCQlfX21vZF96b25lX3BhZ2Vfc3RhdGUoem9uZSwgTlJfSU5BQ1RJVkVfQU5PTiwKKwkJCQkJCS1jb3VudFtMUlVfSU5BQ1RJVkVfQU5PTl0pOworCisJCWlmIChzY2FuX2dsb2JhbF9scnUoc2MpKSB7CiAJCQl6b25lLT5wYWdlc19zY2FubmVkICs9IG5yX3NjYW47CisJCQl6b25lLT5yZWNlbnRfc2Nhbm5lZFswXSArPSBjb3VudFtMUlVfSU5BQ1RJVkVfQU5PTl07CisJCQl6b25lLT5yZWNlbnRfc2Nhbm5lZFswXSArPSBjb3VudFtMUlVfQUNUSVZFX0FOT05dOworCQkJem9uZS0+cmVjZW50X3NjYW5uZWRbMV0gKz0gY291bnRbTFJVX0lOQUNUSVZFX0ZJTEVdOworCQkJem9uZS0+cmVjZW50X3NjYW5uZWRbMV0gKz0gY291bnRbTFJVX0FDVElWRV9GSUxFXTsKKwkJfQogCQlzcGluX3VubG9ja19pcnEoJnpvbmUtPmxydV9sb2NrKTsKIAogCQlucl9zY2FubmVkICs9IG5yX3NjYW47CkBAIC04OTksNyArMTA5OSw3IEBACiAJCQkgKiBUaGUgYXR0ZW1wdCBhdCBwYWdlIG91dCBtYXkgaGF2ZSBtYWRlIHNvbWUKIAkJCSAqIG9mIHRoZSBwYWdlcyBhY3RpdmUsIG1hcmsgdGhlbSBpbmFjdGl2ZSBhZ2Fpbi4KIAkJCSAqLwotCQkJbnJfYWN0aXZlID0gY2xlYXJfYWN0aXZlX2ZsYWdzKCZwYWdlX2xpc3QpOworCQkJbnJfYWN0aXZlID0gY2xlYXJfYWN0aXZlX2ZsYWdzKCZwYWdlX2xpc3QsIGNvdW50KTsKIAkJCWNvdW50X3ZtX2V2ZW50cyhQR0RFQUNUSVZBVEUsIG5yX2FjdGl2ZSk7CiAKIAkJCW5yX2ZyZWVkICs9IHNocmlua19wYWdlX2xpc3QoJnBhZ2VfbGlzdCwgc2MsCkBAIC05MjQsMTQgKzExMjQsMjQgQEAKIAkJICogUHV0IGJhY2sgYW55IHVuZnJlZWFibGUgcGFnZXMuCiAJCSAqLwogCQl3aGlsZSAoIWxpc3RfZW1wdHkoJnBhZ2VfbGlzdCkpIHsKKwkJCWludCBscnU7CiAJCQlwYWdlID0gbHJ1X3RvX3BhZ2UoJnBhZ2VfbGlzdCk7CiAJCQlWTV9CVUdfT04oUGFnZUxSVShwYWdlKSk7Ci0JCQlTZXRQYWdlTFJVKHBhZ2UpOwogCQkJbGlzdF9kZWwoJnBhZ2UtPmxydSk7Ci0JCQlpZiAoUGFnZUFjdGl2ZShwYWdlKSkKLQkJCQlhZGRfcGFnZV90b19hY3RpdmVfbGlzdCh6b25lLCBwYWdlKTsKLQkJCWVsc2UKLQkJCQlhZGRfcGFnZV90b19pbmFjdGl2ZV9saXN0KHpvbmUsIHBhZ2UpOworCQkJaWYgKHVubGlrZWx5KCFwYWdlX2V2aWN0YWJsZShwYWdlLCBOVUxMKSkpIHsKKwkJCQlzcGluX3VubG9ja19pcnEoJnpvbmUtPmxydV9sb2NrKTsKKwkJCQlwdXRiYWNrX2xydV9wYWdlKHBhZ2UpOworCQkJCXNwaW5fbG9ja19pcnEoJnpvbmUtPmxydV9sb2NrKTsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCVNldFBhZ2VMUlUocGFnZSk7CisJCQlscnUgPSBwYWdlX2xydShwYWdlKTsKKwkJCWFkZF9wYWdlX3RvX2xydV9saXN0KHpvbmUsIHBhZ2UsIGxydSk7CisJCQltZW1fY2dyb3VwX21vdmVfbGlzdHMocGFnZSwgbHJ1KTsKKwkJCWlmIChQYWdlQWN0aXZlKHBhZ2UpICYmIHNjYW5fZ2xvYmFsX2xydShzYykpIHsKKwkJCQlpbnQgZmlsZSA9ICEhcGFnZV9pc19maWxlX2NhY2hlKHBhZ2UpOworCQkJCXpvbmUtPnJlY2VudF9yb3RhdGVkW2ZpbGVdKys7CisJCQl9CiAJCQlpZiAoIXBhZ2V2ZWNfYWRkKCZwdmVjLCBwYWdlKSkgewogCQkJCXNwaW5fdW5sb2NrX2lycSgmem9uZS0+bHJ1X2xvY2spOwogCQkJCV9fcGFnZXZlY19yZWxlYXNlKCZwdmVjKTsKQEAgLTk2MiwxMTUgKzExNzIsNyBAQAogCiBzdGF0aWMgaW5saW5lIGludCB6b25lX2lzX25lYXJfb29tKHN0cnVjdCB6b25lICp6b25lKQogewotCXJldHVybiB6b25lLT5wYWdlc19zY2FubmVkID49ICh6b25lX3BhZ2Vfc3RhdGUoem9uZSwgTlJfQUNUSVZFKQotCQkJCSsgem9uZV9wYWdlX3N0YXRlKHpvbmUsIE5SX0lOQUNUSVZFKSkqMzsKLX0KLQotLyoKLSAqIERldGVybWluZSB3ZSBzaG91bGQgdHJ5IHRvIHJlY2xhaW0gbWFwcGVkIHBhZ2VzLgotICogVGhpcyBpcyBjYWxsZWQgb25seSB3aGVuIHNjLT5tZW1fY2dyb3VwIGlzIE5VTEwuCi0gKi8KLXN0YXRpYyBpbnQgY2FsY19yZWNsYWltX21hcHBlZChzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYywgc3RydWN0IHpvbmUgKnpvbmUsCi0JCQkJaW50IHByaW9yaXR5KQotewotCWxvbmcgbWFwcGVkX3JhdGlvOwotCWxvbmcgZGlzdHJlc3M7Ci0JbG9uZyBzd2FwX3RlbmRlbmN5OwotCWxvbmcgaW1iYWxhbmNlOwotCWludCByZWNsYWltX21hcHBlZCA9IDA7Ci0JaW50IHByZXZfcHJpb3JpdHk7Ci0KLQlpZiAoc2Nhbl9nbG9iYWxfbHJ1KHNjKSAmJiB6b25lX2lzX25lYXJfb29tKHpvbmUpKQotCQlyZXR1cm4gMTsKLQkvKgotCSAqIGBkaXN0cmVzcycgaXMgYSBtZWFzdXJlIG9mIGhvdyBtdWNoIHRyb3VibGUgd2UncmUgaGF2aW5nCi0JICogcmVjbGFpbWluZyBwYWdlcy4gIDAgLT4gbm8gcHJvYmxlbXMuICAxMDAgLT4gZ3JlYXQgdHJvdWJsZS4KLQkgKi8KLQlpZiAoc2Nhbl9nbG9iYWxfbHJ1KHNjKSkKLQkJcHJldl9wcmlvcml0eSA9IHpvbmUtPnByZXZfcHJpb3JpdHk7Ci0JZWxzZQotCQlwcmV2X3ByaW9yaXR5ID0gbWVtX2Nncm91cF9nZXRfcmVjbGFpbV9wcmlvcml0eShzYy0+bWVtX2Nncm91cCk7Ci0KLQlkaXN0cmVzcyA9IDEwMCA+PiBtaW4ocHJldl9wcmlvcml0eSwgcHJpb3JpdHkpOwotCi0JLyoKLQkgKiBUaGUgcG9pbnQgb2YgdGhpcyBhbGdvcml0aG0gaXMgdG8gZGVjaWRlIHdoZW4gdG8gc3RhcnQKLQkgKiByZWNsYWltaW5nIG1hcHBlZCBtZW1vcnkgaW5zdGVhZCBvZiBqdXN0IHBhZ2VjYWNoZS4gIFdvcmsgb3V0Ci0JICogaG93IG11Y2ggbWVtb3J5Ci0JICogaXMgbWFwcGVkLgotCSAqLwotCWlmIChzY2FuX2dsb2JhbF9scnUoc2MpKQotCQltYXBwZWRfcmF0aW8gPSAoKGdsb2JhbF9wYWdlX3N0YXRlKE5SX0ZJTEVfTUFQUEVEKSArCi0JCQkJZ2xvYmFsX3BhZ2Vfc3RhdGUoTlJfQU5PTl9QQUdFUykpICogMTAwKSAvCi0JCQkJCXZtX3RvdGFsX3BhZ2VzOwotCWVsc2UKLQkJbWFwcGVkX3JhdGlvID0gbWVtX2Nncm91cF9jYWxjX21hcHBlZF9yYXRpbyhzYy0+bWVtX2Nncm91cCk7Ci0KLQkvKgotCSAqIE5vdyBkZWNpZGUgaG93IG11Y2ggd2UgcmVhbGx5IHdhbnQgdG8gdW5tYXAgc29tZSBwYWdlcy4gIFRoZQotCSAqIG1hcHBlZCByYXRpbyBpcyBkb3duZ3JhZGVkIC0ganVzdCBiZWNhdXNlIHRoZXJlJ3MgYSBsb3Qgb2YKLQkgKiBtYXBwZWQgbWVtb3J5IGRvZXNuJ3QgbmVjZXNzYXJpbHkgbWVhbiB0aGF0IHBhZ2UgcmVjbGFpbQotCSAqIGlzbid0IHN1Y2NlZWRpbmcuCi0JICoKLQkgKiBUaGUgZGlzdHJlc3MgcmF0aW8gaXMgaW1wb3J0YW50IC0gd2UgZG9uJ3Qgd2FudCB0byBzdGFydAotCSAqIGdvaW5nIG9vbS4KLQkgKgotCSAqIEEgMTAwJSB2YWx1ZSBvZiB2bV9zd2FwcGluZXNzIG92ZXJyaWRlcyB0aGlzIGFsZ29yaXRobQotCSAqIGFsdG9nZXRoZXIuCi0JICovCi0Jc3dhcF90ZW5kZW5jeSA9IG1hcHBlZF9yYXRpbyAvIDIgKyBkaXN0cmVzcyArIHNjLT5zd2FwcGluZXNzOwotCi0JLyoKLQkgKiBJZiB0aGVyZSdzIGh1Z2UgaW1iYWxhbmNlIGJldHdlZW4gYWN0aXZlIGFuZCBpbmFjdGl2ZQotCSAqICh0aGluayBhY3RpdmUgMTAwIHRpbWVzIGxhcmdlciB0aGFuIGluYWN0aXZlKSB3ZSBzaG91bGQKLQkgKiBiZWNvbWUgbW9yZSBwZXJtaXNzaXZlLCBvciB0aGUgc3lzdGVtIHdpbGwgdGFrZSB0b28gbXVjaAotCSAqIGNwdSBiZWZvcmUgaXQgc3RhcnQgc3dhcHBpbmcgZHVyaW5nIG1lbW9yeSBwcmVzc3VyZS4KLQkgKiBEaXN0cmVzcyBpcyBhYm91dCBhdm9pZGluZyBlYXJseS1vb20sIHRoaXMgaXMgYWJvdXQKLQkgKiBtYWtpbmcgc3dhcHBpbmVzcyBncmFjZWZ1bCBkZXNwaXRlIHNldHRpbmcgaXQgdG8gbG93Ci0JICogdmFsdWVzLgotCSAqCi0JICogQXZvaWQgZGl2IGJ5IHplcm8gd2l0aCBucl9pbmFjdGl2ZSsxLCBhbmQgbWF4IHJlc3VsdGluZwotCSAqIHZhbHVlIGlzIHZtX3RvdGFsX3BhZ2VzLgotCSAqLwotCWlmIChzY2FuX2dsb2JhbF9scnUoc2MpKSB7Ci0JCWltYmFsYW5jZSAgPSB6b25lX3BhZ2Vfc3RhdGUoem9uZSwgTlJfQUNUSVZFKTsKLQkJaW1iYWxhbmNlIC89IHpvbmVfcGFnZV9zdGF0ZSh6b25lLCBOUl9JTkFDVElWRSkgKyAxOwotCX0gZWxzZQotCQlpbWJhbGFuY2UgPSBtZW1fY2dyb3VwX3JlY2xhaW1faW1iYWxhbmNlKHNjLT5tZW1fY2dyb3VwKTsKLQotCS8qCi0JICogUmVkdWNlIHRoZSBlZmZlY3Qgb2YgaW1iYWxhbmNlIGlmIHN3YXBwaW5lc3MgaXMgbG93LAotCSAqIHRoaXMgbWVhbnMgZm9yIGEgc3dhcHBpbmVzcyB2ZXJ5IGxvdywgdGhlIGltYmFsYW5jZQotCSAqIG11c3QgYmUgbXVjaCBoaWdoZXIgdGhhbiAxMDAgZm9yIHRoaXMgbG9naWMgdG8gbWFrZQotCSAqIHRoZSBkaWZmZXJlbmNlLgotCSAqCi0JICogTWF4IHRlbXBvcmFyeSB2YWx1ZSBpcyB2bV90b3RhbF9wYWdlcyoxMDAuCi0JICovCi0JaW1iYWxhbmNlICo9ICh2bV9zd2FwcGluZXNzICsgMSk7Ci0JaW1iYWxhbmNlIC89IDEwMDsKLQotCS8qCi0JICogSWYgbm90IG11Y2ggb2YgdGhlIHJhbSBpcyBtYXBwZWQsIG1ha2VzIHRoZSBpbWJhbGFuY2UKLQkgKiBsZXNzIHJlbGV2YW50LCBpdCdzIGhpZ2ggcHJpb3JpdHkgd2UgcmVmaWxsIHRoZSBpbmFjdGl2ZQotCSAqIGxpc3Qgd2l0aCBtYXBwZWQgcGFnZXMgb25seSBpbiBwcmVzZW5jZSBvZiBoaWdoIHJhdGlvIG9mCi0JICogbWFwcGVkIHBhZ2VzLgotCSAqCi0JICogTWF4IHRlbXBvcmFyeSB2YWx1ZSBpcyB2bV90b3RhbF9wYWdlcyoxMDAuCi0JICovCi0JaW1iYWxhbmNlICo9IG1hcHBlZF9yYXRpbzsKLQlpbWJhbGFuY2UgLz0gMTAwOwotCi0JLyogYXBwbHkgaW1iYWxhbmNlIGZlZWRiYWNrIHRvIHN3YXBfdGVuZGVuY3kgKi8KLQlzd2FwX3RlbmRlbmN5ICs9IGltYmFsYW5jZTsKLQotCS8qCi0JICogTm93IHVzZSB0aGlzIG1ldHJpYyB0byBkZWNpZGUgd2hldGhlciB0byBzdGFydCBtb3ZpbmcgbWFwcGVkCi0JICogbWVtb3J5IG9udG8gdGhlIGluYWN0aXZlIGxpc3QuCi0JICovCi0JaWYgKHN3YXBfdGVuZGVuY3kgPj0gMTAwKQotCQlyZWNsYWltX21hcHBlZCA9IDE7Ci0KLQlyZXR1cm4gcmVjbGFpbV9tYXBwZWQ7CisJcmV0dXJuIHpvbmUtPnBhZ2VzX3NjYW5uZWQgPj0gKHpvbmVfbHJ1X3BhZ2VzKHpvbmUpICogMyk7CiB9CiAKIC8qCkBAIC0xMDkzLDUzICsxMTk1LDcxIEBACiAKIAogc3RhdGljIHZvaWQgc2hyaW5rX2FjdGl2ZV9saXN0KHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsIHN0cnVjdCB6b25lICp6b25lLAotCQkJCXN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLCBpbnQgcHJpb3JpdHkpCisJCQlzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYywgaW50IHByaW9yaXR5LCBpbnQgZmlsZSkKIHsKIAl1bnNpZ25lZCBsb25nIHBnbW92ZWQ7CiAJaW50IHBnZGVhY3RpdmF0ZSA9IDA7CiAJdW5zaWduZWQgbG9uZyBwZ3NjYW5uZWQ7CiAJTElTVF9IRUFEKGxfaG9sZCk7CS8qIFRoZSBwYWdlcyB3aGljaCB3ZXJlIHNuaXBwZWQgb2ZmICovCi0JTElTVF9IRUFEKGxfaW5hY3RpdmUpOwkvKiBQYWdlcyB0byBnbyBvbnRvIHRoZSBpbmFjdGl2ZV9saXN0ICovCi0JTElTVF9IRUFEKGxfYWN0aXZlKTsJLyogUGFnZXMgdG8gZ28gb250byB0aGUgYWN0aXZlX2xpc3QgKi8KKwlMSVNUX0hFQUQobF9pbmFjdGl2ZSk7CiAJc3RydWN0IHBhZ2UgKnBhZ2U7CiAJc3RydWN0IHBhZ2V2ZWMgcHZlYzsKLQlpbnQgcmVjbGFpbV9tYXBwZWQgPSAwOwotCi0JaWYgKHNjLT5tYXlfc3dhcCkKLQkJcmVjbGFpbV9tYXBwZWQgPSBjYWxjX3JlY2xhaW1fbWFwcGVkKHNjLCB6b25lLCBwcmlvcml0eSk7CisJZW51bSBscnVfbGlzdCBscnU7CiAKIAlscnVfYWRkX2RyYWluKCk7CiAJc3Bpbl9sb2NrX2lycSgmem9uZS0+bHJ1X2xvY2spOwogCXBnbW92ZWQgPSBzYy0+aXNvbGF0ZV9wYWdlcyhucl9wYWdlcywgJmxfaG9sZCwgJnBnc2Nhbm5lZCwgc2MtPm9yZGVyLAogCQkJCQlJU09MQVRFX0FDVElWRSwgem9uZSwKLQkJCQkJc2MtPm1lbV9jZ3JvdXAsIDEpOworCQkJCQlzYy0+bWVtX2Nncm91cCwgMSwgZmlsZSk7CiAJLyoKIAkgKiB6b25lLT5wYWdlc19zY2FubmVkIGlzIHVzZWQgZm9yIGRldGVjdCB6b25lJ3Mgb29tCiAJICogbWVtX2Nncm91cCByZW1lbWJlcnMgbnJfc2NhbiBieSBpdHNlbGYuCiAJICovCi0JaWYgKHNjYW5fZ2xvYmFsX2xydShzYykpCisJaWYgKHNjYW5fZ2xvYmFsX2xydShzYykpIHsKIAkJem9uZS0+cGFnZXNfc2Nhbm5lZCArPSBwZ3NjYW5uZWQ7CisJCXpvbmUtPnJlY2VudF9zY2FubmVkWyEhZmlsZV0gKz0gcGdtb3ZlZDsKKwl9CiAKLQlfX21vZF96b25lX3BhZ2Vfc3RhdGUoem9uZSwgTlJfQUNUSVZFLCAtcGdtb3ZlZCk7CisJaWYgKGZpbGUpCisJCV9fbW9kX3pvbmVfcGFnZV9zdGF0ZSh6b25lLCBOUl9BQ1RJVkVfRklMRSwgLXBnbW92ZWQpOworCWVsc2UKKwkJX19tb2Rfem9uZV9wYWdlX3N0YXRlKHpvbmUsIE5SX0FDVElWRV9BTk9OLCAtcGdtb3ZlZCk7CiAJc3Bpbl91bmxvY2tfaXJxKCZ6b25lLT5scnVfbG9jayk7CiAKKwlwZ21vdmVkID0gMDsKIAl3aGlsZSAoIWxpc3RfZW1wdHkoJmxfaG9sZCkpIHsKIAkJY29uZF9yZXNjaGVkKCk7CiAJCXBhZ2UgPSBscnVfdG9fcGFnZSgmbF9ob2xkKTsKIAkJbGlzdF9kZWwoJnBhZ2UtPmxydSk7Ci0JCWlmIChwYWdlX21hcHBlZChwYWdlKSkgewotCQkJaWYgKCFyZWNsYWltX21hcHBlZCB8fAotCQkJICAgICh0b3RhbF9zd2FwX3BhZ2VzID09IDAgJiYgUGFnZUFub24ocGFnZSkpIHx8Ci0JCQkgICAgcGFnZV9yZWZlcmVuY2VkKHBhZ2UsIDAsIHNjLT5tZW1fY2dyb3VwKSkgewotCQkJCWxpc3RfYWRkKCZwYWdlLT5scnUsICZsX2FjdGl2ZSk7Ci0JCQkJY29udGludWU7Ci0JCQl9CisKKwkJaWYgKHVubGlrZWx5KCFwYWdlX2V2aWN0YWJsZShwYWdlLCBOVUxMKSkpIHsKKwkJCXB1dGJhY2tfbHJ1X3BhZ2UocGFnZSk7CisJCQljb250aW51ZTsKIAkJfQorCisJCS8qIHBhZ2VfcmVmZXJlbmNlZCBjbGVhcnMgUGFnZVJlZmVyZW5jZWQgKi8KKwkJaWYgKHBhZ2VfbWFwcGluZ19pbnVzZShwYWdlKSAmJgorCQkgICAgcGFnZV9yZWZlcmVuY2VkKHBhZ2UsIDAsIHNjLT5tZW1fY2dyb3VwKSkKKwkJCXBnbW92ZWQrKzsKKwogCQlsaXN0X2FkZCgmcGFnZS0+bHJ1LCAmbF9pbmFjdGl2ZSk7CiAJfQogCisJLyoKKwkgKiBDb3VudCByZWZlcmVuY2VkIHBhZ2VzIGZyb20gY3VycmVudGx5IHVzZWQgbWFwcGluZ3MgYXMKKwkgKiByb3RhdGVkLCBldmVuIHRob3VnaCB0aGV5IGFyZSBtb3ZlZCB0byB0aGUgaW5hY3RpdmUgbGlzdC4KKwkgKiBUaGlzIGhlbHBzIGJhbGFuY2Ugc2NhbiBwcmVzc3VyZSBiZXR3ZWVuIGZpbGUgYW5kIGFub255bW91cworCSAqIHBhZ2VzIGluIGdldF9zY2FuX3JhdGlvLgorCSAqLworCXpvbmUtPnJlY2VudF9yb3RhdGVkWyEhZmlsZV0gKz0gcGdtb3ZlZDsKKworCS8qCisJICogTW92ZSB0aGUgcGFnZXMgdG8gdGhlIFtmaWxlIG9yIGFub25dIGluYWN0aXZlIGxpc3QuCisJICovCiAJcGFnZXZlY19pbml0KCZwdmVjLCAxKTsKKwogCXBnbW92ZWQgPSAwOworCWxydSA9IExSVV9CQVNFICsgZmlsZSAqIExSVV9GSUxFOwogCXNwaW5fbG9ja19pcnEoJnpvbmUtPmxydV9sb2NrKTsKIAl3aGlsZSAoIWxpc3RfZW1wdHkoJmxfaW5hY3RpdmUpKSB7CiAJCXBhZ2UgPSBscnVfdG9fcGFnZSgmbF9pbmFjdGl2ZSk7CkBAIC0xMTQ5LDExICsxMjY5LDExIEBACiAJCVZNX0JVR19PTighUGFnZUFjdGl2ZShwYWdlKSk7CiAJCUNsZWFyUGFnZUFjdGl2ZShwYWdlKTsKIAotCQlsaXN0X21vdmUoJnBhZ2UtPmxydSwgJnpvbmUtPmluYWN0aXZlX2xpc3QpOwotCQltZW1fY2dyb3VwX21vdmVfbGlzdHMocGFnZSwgZmFsc2UpOworCQlsaXN0X21vdmUoJnBhZ2UtPmxydSwgJnpvbmUtPmxydVtscnVdLmxpc3QpOworCQltZW1fY2dyb3VwX21vdmVfbGlzdHMocGFnZSwgbHJ1KTsKIAkJcGdtb3ZlZCsrOwogCQlpZiAoIXBhZ2V2ZWNfYWRkKCZwdmVjLCBwYWdlKSkgewotCQkJX19tb2Rfem9uZV9wYWdlX3N0YXRlKHpvbmUsIE5SX0lOQUNUSVZFLCBwZ21vdmVkKTsKKwkJCV9fbW9kX3pvbmVfcGFnZV9zdGF0ZSh6b25lLCBOUl9MUlVfQkFTRSArIGxydSwgcGdtb3ZlZCk7CiAJCQlzcGluX3VubG9ja19pcnEoJnpvbmUtPmxydV9sb2NrKTsKIAkJCXBnZGVhY3RpdmF0ZSArPSBwZ21vdmVkOwogCQkJcGdtb3ZlZCA9IDA7CkBAIC0xMTYzLDEwNCArMTI4MywxODkgQEAKIAkJCXNwaW5fbG9ja19pcnEoJnpvbmUtPmxydV9sb2NrKTsKIAkJfQogCX0KLQlfX21vZF96b25lX3BhZ2Vfc3RhdGUoem9uZSwgTlJfSU5BQ1RJVkUsIHBnbW92ZWQpOworCV9fbW9kX3pvbmVfcGFnZV9zdGF0ZSh6b25lLCBOUl9MUlVfQkFTRSArIGxydSwgcGdtb3ZlZCk7CiAJcGdkZWFjdGl2YXRlICs9IHBnbW92ZWQ7CiAJaWYgKGJ1ZmZlcl9oZWFkc19vdmVyX2xpbWl0KSB7CiAJCXNwaW5fdW5sb2NrX2lycSgmem9uZS0+bHJ1X2xvY2spOwogCQlwYWdldmVjX3N0cmlwKCZwdmVjKTsKIAkJc3Bpbl9sb2NrX2lycSgmem9uZS0+bHJ1X2xvY2spOwogCX0KLQotCXBnbW92ZWQgPSAwOwotCXdoaWxlICghbGlzdF9lbXB0eSgmbF9hY3RpdmUpKSB7Ci0JCXBhZ2UgPSBscnVfdG9fcGFnZSgmbF9hY3RpdmUpOwotCQlwcmVmZXRjaHdfcHJldl9scnVfcGFnZShwYWdlLCAmbF9hY3RpdmUsIGZsYWdzKTsKLQkJVk1fQlVHX09OKFBhZ2VMUlUocGFnZSkpOwotCQlTZXRQYWdlTFJVKHBhZ2UpOwotCQlWTV9CVUdfT04oIVBhZ2VBY3RpdmUocGFnZSkpOwotCi0JCWxpc3RfbW92ZSgmcGFnZS0+bHJ1LCAmem9uZS0+YWN0aXZlX2xpc3QpOwotCQltZW1fY2dyb3VwX21vdmVfbGlzdHMocGFnZSwgdHJ1ZSk7Ci0JCXBnbW92ZWQrKzsKLQkJaWYgKCFwYWdldmVjX2FkZCgmcHZlYywgcGFnZSkpIHsKLQkJCV9fbW9kX3pvbmVfcGFnZV9zdGF0ZSh6b25lLCBOUl9BQ1RJVkUsIHBnbW92ZWQpOwotCQkJcGdtb3ZlZCA9IDA7Ci0JCQlzcGluX3VubG9ja19pcnEoJnpvbmUtPmxydV9sb2NrKTsKLQkJCV9fcGFnZXZlY19yZWxlYXNlKCZwdmVjKTsKLQkJCXNwaW5fbG9ja19pcnEoJnpvbmUtPmxydV9sb2NrKTsKLQkJfQotCX0KLQlfX21vZF96b25lX3BhZ2Vfc3RhdGUoem9uZSwgTlJfQUNUSVZFLCBwZ21vdmVkKTsKLQogCV9fY291bnRfem9uZV92bV9ldmVudHMoUEdSRUZJTEwsIHpvbmUsIHBnc2Nhbm5lZCk7CiAJX19jb3VudF92bV9ldmVudHMoUEdERUFDVElWQVRFLCBwZ2RlYWN0aXZhdGUpOwogCXNwaW5fdW5sb2NrX2lycSgmem9uZS0+bHJ1X2xvY2spOworCWlmICh2bV9zd2FwX2Z1bGwoKSkKKwkJcGFnZXZlY19zd2FwX2ZyZWUoJnB2ZWMpOwogCiAJcGFnZXZlY19yZWxlYXNlKCZwdmVjKTsKIH0KIAorc3RhdGljIHVuc2lnbmVkIGxvbmcgc2hyaW5rX2xpc3QoZW51bSBscnVfbGlzdCBscnUsIHVuc2lnbmVkIGxvbmcgbnJfdG9fc2NhbiwKKwlzdHJ1Y3Qgem9uZSAqem9uZSwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MsIGludCBwcmlvcml0eSkKK3sKKwlpbnQgZmlsZSA9IGlzX2ZpbGVfbHJ1KGxydSk7CisKKwlpZiAobHJ1ID09IExSVV9BQ1RJVkVfRklMRSkgeworCQlzaHJpbmtfYWN0aXZlX2xpc3QobnJfdG9fc2Nhbiwgem9uZSwgc2MsIHByaW9yaXR5LCBmaWxlKTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKGxydSA9PSBMUlVfQUNUSVZFX0FOT04gJiYKKwkgICAgKCFzY2FuX2dsb2JhbF9scnUoc2MpIHx8IGluYWN0aXZlX2Fub25faXNfbG93KHpvbmUpKSkgeworCQlzaHJpbmtfYWN0aXZlX2xpc3QobnJfdG9fc2Nhbiwgem9uZSwgc2MsIHByaW9yaXR5LCBmaWxlKTsKKwkJcmV0dXJuIDA7CisJfQorCXJldHVybiBzaHJpbmtfaW5hY3RpdmVfbGlzdChucl90b19zY2FuLCB6b25lLCBzYywgcHJpb3JpdHksIGZpbGUpOworfQorCisvKgorICogRGV0ZXJtaW5lIGhvdyBhZ2dyZXNzaXZlbHkgdGhlIGFub24gYW5kIGZpbGUgTFJVIGxpc3RzIHNob3VsZCBiZQorICogc2Nhbm5lZC4gIFRoZSByZWxhdGl2ZSB2YWx1ZSBvZiBlYWNoIHNldCBvZiBMUlUgbGlzdHMgaXMgZGV0ZXJtaW5lZAorICogYnkgbG9va2luZyBhdCB0aGUgZnJhY3Rpb24gb2YgdGhlIHBhZ2VzIHNjYW5uZWQgd2UgZGlkIHJvdGF0ZSBiYWNrCisgKiBvbnRvIHRoZSBhY3RpdmUgbGlzdCBpbnN0ZWFkIG9mIGV2aWN0LgorICoKKyAqIHBlcmNlbnRbMF0gc3BlY2lmaWVzIGhvdyBtdWNoIHByZXNzdXJlIHRvIHB1dCBvbiByYW0vc3dhcCBiYWNrZWQKKyAqIG1lbW9yeSwgd2hpbGUgcGVyY2VudFsxXSBkZXRlcm1pbmVzIHByZXNzdXJlIG9uIHRoZSBmaWxlIExSVXMuCisgKi8KK3N0YXRpYyB2b2lkIGdldF9zY2FuX3JhdGlvKHN0cnVjdCB6b25lICp6b25lLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYywKKwkJCQkJdW5zaWduZWQgbG9uZyAqcGVyY2VudCkKK3sKKwl1bnNpZ25lZCBsb25nIGFub24sIGZpbGUsIGZyZWU7CisJdW5zaWduZWQgbG9uZyBhbm9uX3ByaW8sIGZpbGVfcHJpbzsKKwl1bnNpZ25lZCBsb25nIGFwLCBmcDsKKworCWFub24gID0gem9uZV9wYWdlX3N0YXRlKHpvbmUsIE5SX0FDVElWRV9BTk9OKSArCisJCXpvbmVfcGFnZV9zdGF0ZSh6b25lLCBOUl9JTkFDVElWRV9BTk9OKTsKKwlmaWxlICA9IHpvbmVfcGFnZV9zdGF0ZSh6b25lLCBOUl9BQ1RJVkVfRklMRSkgKworCQl6b25lX3BhZ2Vfc3RhdGUoem9uZSwgTlJfSU5BQ1RJVkVfRklMRSk7CisJZnJlZSAgPSB6b25lX3BhZ2Vfc3RhdGUoem9uZSwgTlJfRlJFRV9QQUdFUyk7CisKKwkvKiBJZiB3ZSBoYXZlIG5vIHN3YXAgc3BhY2UsIGRvIG5vdCBib3RoZXIgc2Nhbm5pbmcgYW5vbiBwYWdlcy4gKi8KKwlpZiAobnJfc3dhcF9wYWdlcyA8PSAwKSB7CisJCXBlcmNlbnRbMF0gPSAwOworCQlwZXJjZW50WzFdID0gMTAwOworCQlyZXR1cm47CisJfQorCisJLyogSWYgd2UgaGF2ZSB2ZXJ5IGZldyBwYWdlIGNhY2hlIHBhZ2VzLCBmb3JjZS1zY2FuIGFub24gcGFnZXMuICovCisJaWYgKHVubGlrZWx5KGZpbGUgKyBmcmVlIDw9IHpvbmUtPnBhZ2VzX2hpZ2gpKSB7CisJCXBlcmNlbnRbMF0gPSAxMDA7CisJCXBlcmNlbnRbMV0gPSAwOworCQlyZXR1cm47CisJfQorCisJLyoKKwkgKiBPSywgc28gd2UgaGF2ZSBzd2FwIHNwYWNlIGFuZCBhIGZhaXIgYW1vdW50IG9mIHBhZ2UgY2FjaGUKKwkgKiBwYWdlcy4gIFdlIHVzZSB0aGUgcmVjZW50bHkgcm90YXRlZCAvIHJlY2VudGx5IHNjYW5uZWQKKwkgKiByYXRpb3MgdG8gZGV0ZXJtaW5lIGhvdyB2YWx1YWJsZSBlYWNoIGNhY2hlIGlzLgorCSAqCisJICogQmVjYXVzZSB3b3JrbG9hZHMgY2hhbmdlIG92ZXIgdGltZSAoYW5kIHRvIGF2b2lkIG92ZXJmbG93KQorCSAqIHdlIGtlZXAgdGhlc2Ugc3RhdGlzdGljcyBhcyBhIGZsb2F0aW5nIGF2ZXJhZ2UsIHdoaWNoIGVuZHMKKwkgKiB1cCB3ZWlnaGluZyByZWNlbnQgcmVmZXJlbmNlcyBtb3JlIHRoYW4gb2xkIG9uZXMuCisJICoKKwkgKiBhbm9uIGluIFswXSwgZmlsZSBpbiBbMV0KKwkgKi8KKwlpZiAodW5saWtlbHkoem9uZS0+cmVjZW50X3NjYW5uZWRbMF0gPiBhbm9uIC8gNCkpIHsKKwkJc3Bpbl9sb2NrX2lycSgmem9uZS0+bHJ1X2xvY2spOworCQl6b25lLT5yZWNlbnRfc2Nhbm5lZFswXSAvPSAyOworCQl6b25lLT5yZWNlbnRfcm90YXRlZFswXSAvPSAyOworCQlzcGluX3VubG9ja19pcnEoJnpvbmUtPmxydV9sb2NrKTsKKwl9CisKKwlpZiAodW5saWtlbHkoem9uZS0+cmVjZW50X3NjYW5uZWRbMV0gPiBmaWxlIC8gNCkpIHsKKwkJc3Bpbl9sb2NrX2lycSgmem9uZS0+bHJ1X2xvY2spOworCQl6b25lLT5yZWNlbnRfc2Nhbm5lZFsxXSAvPSAyOworCQl6b25lLT5yZWNlbnRfcm90YXRlZFsxXSAvPSAyOworCQlzcGluX3VubG9ja19pcnEoJnpvbmUtPmxydV9sb2NrKTsKKwl9CisKKwkvKgorCSAqIFdpdGggc3dhcHBpbmVzcyBhdCAxMDAsIGFub255bW91cyBhbmQgZmlsZSBoYXZlIHRoZSBzYW1lIHByaW9yaXR5LgorCSAqIFRoaXMgc2Nhbm5pbmcgcHJpb3JpdHkgaXMgZXNzZW50aWFsbHkgdGhlIGludmVyc2Ugb2YgSU8gY29zdC4KKwkgKi8KKwlhbm9uX3ByaW8gPSBzYy0+c3dhcHBpbmVzczsKKwlmaWxlX3ByaW8gPSAyMDAgLSBzYy0+c3dhcHBpbmVzczsKKworCS8qCisJICogICAgICAgICAgICAgICAgICBhbm9uICAgICAgIHJlY2VudF9yb3RhdGVkWzBdCisJICogJWFub24gPSAxMDAgKiAtLS0tLS0tLS0tLSAvIC0tLS0tLS0tLS0tLS0tLS0tICogSU8gY29zdAorCSAqICAgICAgICAgICAgICAgYW5vbiArIGZpbGUgICAgICByb3RhdGVfc3VtCisJICovCisJYXAgPSAoYW5vbl9wcmlvICsgMSkgKiAoem9uZS0+cmVjZW50X3NjYW5uZWRbMF0gKyAxKTsKKwlhcCAvPSB6b25lLT5yZWNlbnRfcm90YXRlZFswXSArIDE7CisKKwlmcCA9IChmaWxlX3ByaW8gKyAxKSAqICh6b25lLT5yZWNlbnRfc2Nhbm5lZFsxXSArIDEpOworCWZwIC89IHpvbmUtPnJlY2VudF9yb3RhdGVkWzFdICsgMTsKKworCS8qIE5vcm1hbGl6ZSB0byBwZXJjZW50YWdlcyAqLworCXBlcmNlbnRbMF0gPSAxMDAgKiBhcCAvIChhcCArIGZwICsgMSk7CisJcGVyY2VudFsxXSA9IDEwMCAtIHBlcmNlbnRbMF07Cit9CisKKwogLyoKICAqIFRoaXMgaXMgYSBiYXNpYyBwZXItem9uZSBwYWdlIGZyZWVyLiAgVXNlZCBieSBib3RoIGtzd2FwZCBhbmQgZGlyZWN0IHJlY2xhaW0uCiAgKi8KIHN0YXRpYyB1bnNpZ25lZCBsb25nIHNocmlua196b25lKGludCBwcmlvcml0eSwgc3RydWN0IHpvbmUgKnpvbmUsCiAJCQkJc3RydWN0IHNjYW5fY29udHJvbCAqc2MpCiB7Ci0JdW5zaWduZWQgbG9uZyBucl9hY3RpdmU7Ci0JdW5zaWduZWQgbG9uZyBucl9pbmFjdGl2ZTsKKwl1bnNpZ25lZCBsb25nIG5yW05SX0xSVV9MSVNUU107CiAJdW5zaWduZWQgbG9uZyBucl90b19zY2FuOwogCXVuc2lnbmVkIGxvbmcgbnJfcmVjbGFpbWVkID0gMDsKKwl1bnNpZ25lZCBsb25nIHBlcmNlbnRbMl07CS8qIGFub24gQCAwOyBmaWxlIEAgMSAqLworCWVudW0gbHJ1X2xpc3QgbDsKIAotCWlmIChzY2FuX2dsb2JhbF9scnUoc2MpKSB7Ci0JCS8qCi0JCSAqIEFkZCBvbmUgdG8gbnJfdG9fc2NhbiBqdXN0IHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBrZXJuZWwKLQkJICogd2lsbCBzbG93bHkgc2lmdCB0aHJvdWdoIHRoZSBhY3RpdmUgbGlzdC4KLQkJICovCi0JCXpvbmUtPm5yX3NjYW5fYWN0aXZlICs9Ci0JCQkoem9uZV9wYWdlX3N0YXRlKHpvbmUsIE5SX0FDVElWRSkgPj4gcHJpb3JpdHkpICsgMTsKLQkJbnJfYWN0aXZlID0gem9uZS0+bnJfc2Nhbl9hY3RpdmU7Ci0JCXpvbmUtPm5yX3NjYW5faW5hY3RpdmUgKz0KLQkJCSh6b25lX3BhZ2Vfc3RhdGUoem9uZSwgTlJfSU5BQ1RJVkUpID4+IHByaW9yaXR5KSArIDE7Ci0JCW5yX2luYWN0aXZlID0gem9uZS0+bnJfc2Nhbl9pbmFjdGl2ZTsKLQkJaWYgKG5yX2luYWN0aXZlID49IHNjLT5zd2FwX2NsdXN0ZXJfbWF4KQotCQkJem9uZS0+bnJfc2Nhbl9pbmFjdGl2ZSA9IDA7Ci0JCWVsc2UKLQkJCW5yX2luYWN0aXZlID0gMDsKKwlnZXRfc2Nhbl9yYXRpbyh6b25lLCBzYywgcGVyY2VudCk7CiAKLQkJaWYgKG5yX2FjdGl2ZSA+PSBzYy0+c3dhcF9jbHVzdGVyX21heCkKLQkJCXpvbmUtPm5yX3NjYW5fYWN0aXZlID0gMDsKLQkJZWxzZQotCQkJbnJfYWN0aXZlID0gMDsKLQl9IGVsc2UgewotCQkvKgotCQkgKiBUaGlzIHJlY2xhaW0gb2NjdXJzIG5vdCBiZWNhdXNlIHpvbmUgbWVtb3J5IHNob3J0YWdlIGJ1dAotCQkgKiBiZWNhdXNlIG1lbW9yeSBjb250cm9sbGVyIGhpdHMgaXRzIGxpbWl0LgotCQkgKiBUaGVuLCBkb24ndCBtb2RpZnkgem9uZSByZWNsYWltIHJlbGF0ZWQgZGF0YS4KLQkJICovCi0JCW5yX2FjdGl2ZSA9IG1lbV9jZ3JvdXBfY2FsY19yZWNsYWltX2FjdGl2ZShzYy0+bWVtX2Nncm91cCwKLQkJCQkJem9uZSwgcHJpb3JpdHkpOworCWZvcl9lYWNoX2V2aWN0YWJsZV9scnUobCkgeworCQlpZiAoc2Nhbl9nbG9iYWxfbHJ1KHNjKSkgeworCQkJaW50IGZpbGUgPSBpc19maWxlX2xydShsKTsKKwkJCWludCBzY2FuOwogCi0JCW5yX2luYWN0aXZlID0gbWVtX2Nncm91cF9jYWxjX3JlY2xhaW1faW5hY3RpdmUoc2MtPm1lbV9jZ3JvdXAsCi0JCQkJCXpvbmUsIHByaW9yaXR5KTsKLQl9Ci0KLQotCXdoaWxlIChucl9hY3RpdmUgfHwgbnJfaW5hY3RpdmUpIHsKLQkJaWYgKG5yX2FjdGl2ZSkgewotCQkJbnJfdG9fc2NhbiA9IG1pbihucl9hY3RpdmUsCi0JCQkJCSh1bnNpZ25lZCBsb25nKXNjLT5zd2FwX2NsdXN0ZXJfbWF4KTsKLQkJCW5yX2FjdGl2ZSAtPSBucl90b19zY2FuOwotCQkJc2hyaW5rX2FjdGl2ZV9saXN0KG5yX3RvX3NjYW4sIHpvbmUsIHNjLCBwcmlvcml0eSk7Ci0JCX0KLQotCQlpZiAobnJfaW5hY3RpdmUpIHsKLQkJCW5yX3RvX3NjYW4gPSBtaW4obnJfaW5hY3RpdmUsCi0JCQkJCSh1bnNpZ25lZCBsb25nKXNjLT5zd2FwX2NsdXN0ZXJfbWF4KTsKLQkJCW5yX2luYWN0aXZlIC09IG5yX3RvX3NjYW47Ci0JCQlucl9yZWNsYWltZWQgKz0gc2hyaW5rX2luYWN0aXZlX2xpc3QobnJfdG9fc2Nhbiwgem9uZSwKLQkJCQkJCQkJc2MpOworCQkJc2NhbiA9IHpvbmVfcGFnZV9zdGF0ZSh6b25lLCBOUl9MUlVfQkFTRSArIGwpOworCQkJaWYgKHByaW9yaXR5KSB7CisJCQkJc2NhbiA+Pj0gcHJpb3JpdHk7CisJCQkJc2NhbiA9IChzY2FuICogcGVyY2VudFtmaWxlXSkgLyAxMDA7CisJCQl9CisJCQl6b25lLT5scnVbbF0ubnJfc2NhbiArPSBzY2FuOworCQkJbnJbbF0gPSB6b25lLT5scnVbbF0ubnJfc2NhbjsKKwkJCWlmIChucltsXSA+PSBzYy0+c3dhcF9jbHVzdGVyX21heCkKKwkJCQl6b25lLT5scnVbbF0ubnJfc2NhbiA9IDA7CisJCQllbHNlCisJCQkJbnJbbF0gPSAwOworCQl9IGVsc2UgeworCQkJLyoKKwkJCSAqIFRoaXMgcmVjbGFpbSBvY2N1cnMgbm90IGJlY2F1c2Ugem9uZSBtZW1vcnkgc2hvcnRhZ2UKKwkJCSAqIGJ1dCBiZWNhdXNlIG1lbW9yeSBjb250cm9sbGVyIGhpdHMgaXRzIGxpbWl0LgorCQkJICogRG9uJ3QgbW9kaWZ5IHpvbmUgcmVjbGFpbSByZWxhdGVkIGRhdGEuCisJCQkgKi8KKwkJCW5yW2xdID0gbWVtX2Nncm91cF9jYWxjX3JlY2xhaW0oc2MtPm1lbV9jZ3JvdXAsIHpvbmUsCisJCQkJCQkJCXByaW9yaXR5LCBsKTsKIAkJfQogCX0KIAorCXdoaWxlIChucltMUlVfSU5BQ1RJVkVfQU5PTl0gfHwgbnJbTFJVX0FDVElWRV9GSUxFXSB8fAorCQkJCQlucltMUlVfSU5BQ1RJVkVfRklMRV0pIHsKKwkJZm9yX2VhY2hfZXZpY3RhYmxlX2xydShsKSB7CisJCQlpZiAobnJbbF0pIHsKKwkJCQlucl90b19zY2FuID0gbWluKG5yW2xdLAorCQkJCQkodW5zaWduZWQgbG9uZylzYy0+c3dhcF9jbHVzdGVyX21heCk7CisJCQkJbnJbbF0gLT0gbnJfdG9fc2NhbjsKKworCQkJCW5yX3JlY2xhaW1lZCArPSBzaHJpbmtfbGlzdChsLCBucl90b19zY2FuLAorCQkJCQkJCXpvbmUsIHNjLCBwcmlvcml0eSk7CisJCQl9CisJCX0KKwl9CisKKwkvKgorCSAqIEV2ZW4gaWYgd2UgZGlkIG5vdCB0cnkgdG8gZXZpY3QgYW5vbiBwYWdlcyBhdCBhbGwsIHdlIHdhbnQgdG8KKwkgKiByZWJhbGFuY2UgdGhlIGFub24gbHJ1IGFjdGl2ZS9pbmFjdGl2ZSByYXRpby4KKwkgKi8KKwlpZiAoIXNjYW5fZ2xvYmFsX2xydShzYykgfHwgaW5hY3RpdmVfYW5vbl9pc19sb3coem9uZSkpCisJCXNocmlua19hY3RpdmVfbGlzdChTV0FQX0NMVVNURVJfTUFYLCB6b25lLCBzYywgcHJpb3JpdHksIDApOworCWVsc2UgaWYgKCFzY2FuX2dsb2JhbF9scnUoc2MpKQorCQlzaHJpbmtfYWN0aXZlX2xpc3QoU1dBUF9DTFVTVEVSX01BWCwgem9uZSwgc2MsIHByaW9yaXR5LCAwKTsKKwogCXRocm90dGxlX3ZtX3dyaXRlb3V0KHNjLT5nZnBfbWFzayk7CiAJcmV0dXJuIG5yX3JlY2xhaW1lZDsKIH0KQEAgLTEzMjEsNyArMTUyNiw3IEBACiAKIAlyZXR1cm4gbnJfcmVjbGFpbWVkOwogfQotIAorCiAvKgogICogVGhpcyBpcyB0aGUgbWFpbiBlbnRyeSBwb2ludCB0byBkaXJlY3QgcGFnZSByZWNsYWltLgogICoKQEAgLTEzNjQsOCArMTU2OSw3IEBACiAJCQlpZiAoIWNwdXNldF96b25lX2FsbG93ZWRfaGFyZHdhbGwoem9uZSwgR0ZQX0tFUk5FTCkpCiAJCQkJY29udGludWU7CiAKLQkJCWxydV9wYWdlcyArPSB6b25lX3BhZ2Vfc3RhdGUoem9uZSwgTlJfQUNUSVZFKQotCQkJCQkrIHpvbmVfcGFnZV9zdGF0ZSh6b25lLCBOUl9JTkFDVElWRSk7CisJCQlscnVfcGFnZXMgKz0gem9uZV9scnVfcGFnZXMoem9uZSk7CiAJCX0KIAl9CiAKQEAgLTE1NTUsNiArMTc1OSwxNCBAQAogCQkJICAgIHByaW9yaXR5ICE9IERFRl9QUklPUklUWSkKIAkJCQljb250aW51ZTsKIAorCQkJLyoKKwkJCSAqIERvIHNvbWUgYmFja2dyb3VuZCBhZ2luZyBvZiB0aGUgYW5vbiBsaXN0LCB0byBnaXZlCisJCQkgKiBwYWdlcyBhIGNoYW5jZSB0byBiZSByZWZlcmVuY2VkIGJlZm9yZSByZWNsYWltaW5nLgorCQkJICovCisJCQlpZiAoaW5hY3RpdmVfYW5vbl9pc19sb3coem9uZSkpCisJCQkJc2hyaW5rX2FjdGl2ZV9saXN0KFNXQVBfQ0xVU1RFUl9NQVgsIHpvbmUsCisJCQkJCQkJJnNjLCBwcmlvcml0eSwgMCk7CisKIAkJCWlmICghem9uZV93YXRlcm1hcmtfb2soem9uZSwgb3JkZXIsIHpvbmUtPnBhZ2VzX2hpZ2gsCiAJCQkJCSAgICAgICAwLCAwKSkgewogCQkJCWVuZF96b25lID0gaTsKQEAgLTE1NjcsOCArMTc3OSw3IEBACiAJCWZvciAoaSA9IDA7IGkgPD0gZW5kX3pvbmU7IGkrKykgewogCQkJc3RydWN0IHpvbmUgKnpvbmUgPSBwZ2RhdC0+bm9kZV96b25lcyArIGk7CiAKLQkJCWxydV9wYWdlcyArPSB6b25lX3BhZ2Vfc3RhdGUoem9uZSwgTlJfQUNUSVZFKQotCQkJCQkrIHpvbmVfcGFnZV9zdGF0ZSh6b25lLCBOUl9JTkFDVElWRSk7CisJCQlscnVfcGFnZXMgKz0gem9uZV9scnVfcGFnZXMoem9uZSk7CiAJCX0KIAogCQkvKgpAQCAtMTYxMiw4ICsxODIzLDcgQEAKIAkJCWlmICh6b25lX2lzX2FsbF91bnJlY2xhaW1hYmxlKHpvbmUpKQogCQkJCWNvbnRpbnVlOwogCQkJaWYgKG5yX3NsYWIgPT0gMCAmJiB6b25lLT5wYWdlc19zY2FubmVkID49Ci0JCQkJKHpvbmVfcGFnZV9zdGF0ZSh6b25lLCBOUl9BQ1RJVkUpCi0JCQkJKyB6b25lX3BhZ2Vfc3RhdGUoem9uZSwgTlJfSU5BQ1RJVkUpKSAqIDYpCisJCQkJCQkoem9uZV9scnVfcGFnZXMoem9uZSkgKiA2KSkKIAkJCQkJem9uZV9zZXRfZmxhZyh6b25lLAogCQkJCQkJICAgICAgWk9ORV9BTExfVU5SRUNMQUlNQUJMRSk7CiAJCQkvKgpAQCAtMTY2Nyw3ICsxODc3LDcgQEAKIAogLyoKICAqIFRoZSBiYWNrZ3JvdW5kIHBhZ2VvdXQgZGFlbW9uLCBzdGFydGVkIGFzIGEga2VybmVsIHRocmVhZAotICogZnJvbSB0aGUgaW5pdCBwcm9jZXNzLiAKKyAqIGZyb20gdGhlIGluaXQgcHJvY2Vzcy4KICAqCiAgKiBUaGlzIGJhc2ljYWxseSB0cmlja2xlcyBvdXQgcGFnZXMgc28gdGhhdCB3ZSBoYXZlIF9zb21lXwogICogZnJlZSBtZW1vcnkgYXZhaWxhYmxlIGV2ZW4gaWYgdGhlcmUgaXMgbm8gb3RoZXIgYWN0aXZpdHkKQEAgLTE3NjEsNiArMTk3MSwxNCBAQAogCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmcGdkYXQtPmtzd2FwZF93YWl0KTsKIH0KIAordW5zaWduZWQgbG9uZyBnbG9iYWxfbHJ1X3BhZ2VzKHZvaWQpCit7CisJcmV0dXJuIGdsb2JhbF9wYWdlX3N0YXRlKE5SX0FDVElWRV9BTk9OKQorCQkrIGdsb2JhbF9wYWdlX3N0YXRlKE5SX0FDVElWRV9GSUxFKQorCQkrIGdsb2JhbF9wYWdlX3N0YXRlKE5SX0lOQUNUSVZFX0FOT04pCisJCSsgZ2xvYmFsX3BhZ2Vfc3RhdGUoTlJfSU5BQ1RJVkVfRklMRSk7Cit9CisKICNpZmRlZiBDT05GSUdfUE0KIC8qCiAgKiBIZWxwZXIgZnVuY3Rpb24gZm9yIHNocmlua19hbGxfbWVtb3J5KCkuICBUcmllcyB0byByZWNsYWltICducl9wYWdlcycgcGFnZXMKQEAgLTE3NzQsNiArMTk5Miw3IEBACiB7CiAJc3RydWN0IHpvbmUgKnpvbmU7CiAJdW5zaWduZWQgbG9uZyBucl90b19zY2FuLCByZXQgPSAwOworCWVudW0gbHJ1X2xpc3QgbDsKIAogCWZvcl9lYWNoX3pvbmUoem9uZSkgewogCkBAIC0xNzgzLDM4ICsyMDAyLDMxIEBACiAJCWlmICh6b25lX2lzX2FsbF91bnJlY2xhaW1hYmxlKHpvbmUpICYmIHByaW8gIT0gREVGX1BSSU9SSVRZKQogCQkJY29udGludWU7CiAKLQkJLyogRm9yIHBhc3MgPSAwIHdlIGRvbid0IHNocmluayB0aGUgYWN0aXZlIGxpc3QgKi8KLQkJaWYgKHBhc3MgPiAwKSB7Ci0JCQl6b25lLT5ucl9zY2FuX2FjdGl2ZSArPQotCQkJCSh6b25lX3BhZ2Vfc3RhdGUoem9uZSwgTlJfQUNUSVZFKSA+PiBwcmlvKSArIDE7Ci0JCQlpZiAoem9uZS0+bnJfc2Nhbl9hY3RpdmUgPj0gbnJfcGFnZXMgfHwgcGFzcyA+IDMpIHsKLQkJCQl6b25lLT5ucl9zY2FuX2FjdGl2ZSA9IDA7Ci0JCQkJbnJfdG9fc2NhbiA9IG1pbihucl9wYWdlcywKLQkJCQkJem9uZV9wYWdlX3N0YXRlKHpvbmUsIE5SX0FDVElWRSkpOwotCQkJCXNocmlua19hY3RpdmVfbGlzdChucl90b19zY2FuLCB6b25lLCBzYywgcHJpbyk7Ci0JCQl9Ci0JCX0KKwkJZm9yX2VhY2hfZXZpY3RhYmxlX2xydShsKSB7CisJCQkvKiBGb3IgcGFzcyA9IDAsIHdlIGRvbid0IHNocmluayB0aGUgYWN0aXZlIGxpc3QgKi8KKwkJCWlmIChwYXNzID09IDAgJiYKKwkJCQkobCA9PSBMUlVfQUNUSVZFIHx8IGwgPT0gTFJVX0FDVElWRV9GSUxFKSkKKwkJCQljb250aW51ZTsKIAotCQl6b25lLT5ucl9zY2FuX2luYWN0aXZlICs9Ci0JCQkoem9uZV9wYWdlX3N0YXRlKHpvbmUsIE5SX0lOQUNUSVZFKSA+PiBwcmlvKSArIDE7Ci0JCWlmICh6b25lLT5ucl9zY2FuX2luYWN0aXZlID49IG5yX3BhZ2VzIHx8IHBhc3MgPiAzKSB7Ci0JCQl6b25lLT5ucl9zY2FuX2luYWN0aXZlID0gMDsKLQkJCW5yX3RvX3NjYW4gPSBtaW4obnJfcGFnZXMsCi0JCQkJem9uZV9wYWdlX3N0YXRlKHpvbmUsIE5SX0lOQUNUSVZFKSk7Ci0JCQlyZXQgKz0gc2hyaW5rX2luYWN0aXZlX2xpc3QobnJfdG9fc2Nhbiwgem9uZSwgc2MpOwotCQkJaWYgKHJldCA+PSBucl9wYWdlcykKLQkJCQlyZXR1cm4gcmV0OworCQkJem9uZS0+bHJ1W2xdLm5yX3NjYW4gKz0KKwkJCQkoem9uZV9wYWdlX3N0YXRlKHpvbmUsIE5SX0xSVV9CQVNFICsgbCkKKwkJCQkJCQkJPj4gcHJpbykgKyAxOworCQkJaWYgKHpvbmUtPmxydVtsXS5ucl9zY2FuID49IG5yX3BhZ2VzIHx8IHBhc3MgPiAzKSB7CisJCQkJem9uZS0+bHJ1W2xdLm5yX3NjYW4gPSAwOworCQkJCW5yX3RvX3NjYW4gPSBtaW4obnJfcGFnZXMsCisJCQkJCXpvbmVfcGFnZV9zdGF0ZSh6b25lLAorCQkJCQkJCU5SX0xSVV9CQVNFICsgbCkpOworCQkJCXJldCArPSBzaHJpbmtfbGlzdChsLCBucl90b19zY2FuLCB6b25lLAorCQkJCQkJCQlzYywgcHJpbyk7CisJCQkJaWYgKHJldCA+PSBucl9wYWdlcykKKwkJCQkJcmV0dXJuIHJldDsKKwkJCX0KIAkJfQogCX0KIAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyB1bnNpZ25lZCBsb25nIGNvdW50X2xydV9wYWdlcyh2b2lkKQotewotCXJldHVybiBnbG9iYWxfcGFnZV9zdGF0ZShOUl9BQ1RJVkUpICsgZ2xvYmFsX3BhZ2Vfc3RhdGUoTlJfSU5BQ1RJVkUpOwotfQotCiAvKgogICogVHJ5IHRvIGZyZWUgYG5yX3BhZ2VzJyBvZiBtZW1vcnksIHN5c3RlbS13aWRlLCBhbmQgcmV0dXJuIHRoZSBudW1iZXIgb2YKICAqIGZyZWVkIHBhZ2VzLgpAQCAtMTg0MCw3ICsyMDUyLDcgQEAKIAogCWN1cnJlbnQtPnJlY2xhaW1fc3RhdGUgPSAmcmVjbGFpbV9zdGF0ZTsKIAotCWxydV9wYWdlcyA9IGNvdW50X2xydV9wYWdlcygpOworCWxydV9wYWdlcyA9IGdsb2JhbF9scnVfcGFnZXMoKTsKIAlucl9zbGFiID0gZ2xvYmFsX3BhZ2Vfc3RhdGUoTlJfU0xBQl9SRUNMQUlNQUJMRSk7CiAJLyogSWYgc2xhYiBjYWNoZXMgYXJlIGh1Z2UsIGl0J3MgYmV0dGVyIHRvIGhpdCB0aGVtIGZpcnN0ICovCiAJd2hpbGUgKG5yX3NsYWIgPj0gbHJ1X3BhZ2VzKSB7CkBAIC0xODgzLDcgKzIwOTUsNyBAQAogCiAJCQlyZWNsYWltX3N0YXRlLnJlY2xhaW1lZF9zbGFiID0gMDsKIAkJCXNocmlua19zbGFiKHNjLm5yX3NjYW5uZWQsIHNjLmdmcF9tYXNrLAotCQkJCQljb3VudF9scnVfcGFnZXMoKSk7CisJCQkJCWdsb2JhbF9scnVfcGFnZXMoKSk7CiAJCQlyZXQgKz0gcmVjbGFpbV9zdGF0ZS5yZWNsYWltZWRfc2xhYjsKIAkJCWlmIChyZXQgPj0gbnJfcGFnZXMpCiAJCQkJZ290byBvdXQ7CkBAIC0xOTAwLDcgKzIxMTIsNyBAQAogCWlmICghcmV0KSB7CiAJCWRvIHsKIAkJCXJlY2xhaW1fc3RhdGUucmVjbGFpbWVkX3NsYWIgPSAwOwotCQkJc2hyaW5rX3NsYWIobnJfcGFnZXMsIHNjLmdmcF9tYXNrLCBjb3VudF9scnVfcGFnZXMoKSk7CisJCQlzaHJpbmtfc2xhYihucl9wYWdlcywgc2MuZ2ZwX21hc2ssIGdsb2JhbF9scnVfcGFnZXMoKSk7CiAJCQlyZXQgKz0gcmVjbGFpbV9zdGF0ZS5yZWNsYWltZWRfc2xhYjsKIAkJfSB3aGlsZSAocmV0IDwgbnJfcGFnZXMgJiYgcmVjbGFpbV9zdGF0ZS5yZWNsYWltZWRfc2xhYiA+IDApOwogCX0KQEAgLTIxMjgsMyArMjM0MCwyODUgQEAKIAlyZXR1cm4gcmV0OwogfQogI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfVU5FVklDVEFCTEVfTFJVCisvKgorICogcGFnZV9ldmljdGFibGUgLSB0ZXN0IHdoZXRoZXIgYSBwYWdlIGlzIGV2aWN0YWJsZQorICogQHBhZ2U6IHRoZSBwYWdlIHRvIHRlc3QKKyAqIEB2bWE6IHRoZSBWTUEgaW4gd2hpY2ggdGhlIHBhZ2UgaXMgb3Igd2lsbCBiZSBtYXBwZWQsIG1heSBiZSBOVUxMCisgKgorICogVGVzdCB3aGV0aGVyIHBhZ2UgaXMgZXZpY3RhYmxlLS1pLmUuLCBzaG91bGQgYmUgcGxhY2VkIG9uIGFjdGl2ZS9pbmFjdGl2ZQorICogbGlzdHMgdnMgdW5ldmljdGFibGUgbGlzdC4gIFRoZSB2bWEgYXJndW1lbnQgaXMgIU5VTEwgd2hlbiBjYWxsZWQgZnJvbSB0aGUKKyAqIGZhdWx0IHBhdGggdG8gZGV0ZXJtaW5lIGhvdyB0byBpbnN0YW50YXRlIGEgbmV3IHBhZ2UuCisgKgorICogUmVhc29ucyBwYWdlIG1pZ2h0IG5vdCBiZSBldmljdGFibGU6CisgKiAoMSkgcGFnZSdzIG1hcHBpbmcgbWFya2VkIHVuZXZpY3RhYmxlCisgKiAoMikgcGFnZSBpcyBwYXJ0IG9mIGFuIG1sb2NrZWQgVk1BCisgKgorICovCitpbnQgcGFnZV9ldmljdGFibGUoc3RydWN0IHBhZ2UgKnBhZ2UsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQoreworCisJaWYgKG1hcHBpbmdfdW5ldmljdGFibGUocGFnZV9tYXBwaW5nKHBhZ2UpKSkKKwkJcmV0dXJuIDA7CisKKwlpZiAoUGFnZU1sb2NrZWQocGFnZSkgfHwgKHZtYSAmJiBpc19tbG9ja2VkX3ZtYSh2bWEsIHBhZ2UpKSkKKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIHZvaWQgc2hvd19wYWdlX3BhdGgoc3RydWN0IHBhZ2UgKnBhZ2UpCit7CisJY2hhciBidWZbMjU2XTsKKwlpZiAocGFnZV9pc19maWxlX2NhY2hlKHBhZ2UpKSB7CisJCXN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nID0gcGFnZS0+bWFwcGluZzsKKwkJc3RydWN0IGRlbnRyeSAqZGVudHJ5OworCQlwZ29mZl90IHBnb2ZmID0gcGFnZS0+aW5kZXggPDwgKFBBR0VfQ0FDSEVfU0hJRlQgLSBQQUdFX1NISUZUKTsKKworCQlzcGluX2xvY2soJm1hcHBpbmctPmlfbW1hcF9sb2NrKTsKKwkJZGVudHJ5ID0gZF9maW5kX2FsaWFzKG1hcHBpbmctPmhvc3QpOworCQlwcmludGsoS0VSTl9JTkZPICJyZXNjdWVkOiAlcyAlbHVcbiIsCisJCSAgICAgICBkZW50cnlfcGF0aChkZW50cnksIGJ1ZiwgMjU2KSwgcGdvZmYpOworCQlzcGluX3VubG9jaygmbWFwcGluZy0+aV9tbWFwX2xvY2spOworCX0gZWxzZSB7CisjaWYgZGVmaW5lZChDT05GSUdfTU1fT1dORVIpICYmIGRlZmluZWQoQ09ORklHX01NVSkKKwkJc3RydWN0IGFub25fdm1hICphbm9uX3ZtYTsKKwkJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7CisKKwkJYW5vbl92bWEgPSBwYWdlX2xvY2tfYW5vbl92bWEocGFnZSk7CisJCWlmICghYW5vbl92bWEpCisJCQlyZXR1cm47CisKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeSh2bWEsICZhbm9uX3ZtYS0+aGVhZCwgYW5vbl92bWFfbm9kZSkgeworCQkJcHJpbnRrKEtFUk5fSU5GTyAicmVzY3VlZDogYW5vbiAlc1xuIiwKKwkJCSAgICAgICB2bWEtPnZtX21tLT5vd25lci0+Y29tbSk7CisJCQlicmVhazsKKwkJfQorCQlwYWdlX3VubG9ja19hbm9uX3ZtYShhbm9uX3ZtYSk7CisjZW5kaWYKKwl9Cit9CisKKworLyoqCisgKiBjaGVja19tb3ZlX3VuZXZpY3RhYmxlX3BhZ2UgLSBjaGVjayBwYWdlIGZvciBldmljdGFiaWxpdHkgYW5kIG1vdmUgdG8gYXBwcm9wcmlhdGUgem9uZSBscnUgbGlzdAorICogQHBhZ2U6IHBhZ2UgdG8gY2hlY2sgZXZpY3RhYmlsaXR5IGFuZCBtb3ZlIHRvIGFwcHJvcHJpYXRlIGxydSBsaXN0CisgKiBAem9uZTogem9uZSBwYWdlIGlzIGluCisgKgorICogQ2hlY2tzIGEgcGFnZSBmb3IgZXZpY3RhYmlsaXR5IGFuZCBtb3ZlcyB0aGUgcGFnZSB0byB0aGUgYXBwcm9wcmlhdGUKKyAqIHpvbmUgbHJ1IGxpc3QuCisgKgorICogUmVzdHJpY3Rpb25zOiB6b25lLT5scnVfbG9jayBtdXN0IGJlIGhlbGQsIHBhZ2UgbXVzdCBiZSBvbiBMUlUgYW5kIG11c3QKKyAqIGhhdmUgUGFnZVVuZXZpY3RhYmxlIHNldC4KKyAqLworc3RhdGljIHZvaWQgY2hlY2tfbW92ZV91bmV2aWN0YWJsZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCBzdHJ1Y3Qgem9uZSAqem9uZSkKK3sKKwlWTV9CVUdfT04oUGFnZUFjdGl2ZShwYWdlKSk7CisKK3JldHJ5OgorCUNsZWFyUGFnZVVuZXZpY3RhYmxlKHBhZ2UpOworCWlmIChwYWdlX2V2aWN0YWJsZShwYWdlLCBOVUxMKSkgeworCQllbnVtIGxydV9saXN0IGwgPSBMUlVfSU5BQ1RJVkVfQU5PTiArIHBhZ2VfaXNfZmlsZV9jYWNoZShwYWdlKTsKKworCQlzaG93X3BhZ2VfcGF0aChwYWdlKTsKKworCQlfX2RlY196b25lX3N0YXRlKHpvbmUsIE5SX1VORVZJQ1RBQkxFKTsKKwkJbGlzdF9tb3ZlKCZwYWdlLT5scnUsICZ6b25lLT5scnVbbF0ubGlzdCk7CisJCV9faW5jX3pvbmVfc3RhdGUoem9uZSwgTlJfSU5BQ1RJVkVfQU5PTiArIGwpOworCQlfX2NvdW50X3ZtX2V2ZW50KFVORVZJQ1RBQkxFX1BHUkVTQ1VFRCk7CisJfSBlbHNlIHsKKwkJLyoKKwkJICogcm90YXRlIHVuZXZpY3RhYmxlIGxpc3QKKwkJICovCisJCVNldFBhZ2VVbmV2aWN0YWJsZShwYWdlKTsKKwkJbGlzdF9tb3ZlKCZwYWdlLT5scnUsICZ6b25lLT5scnVbTFJVX1VORVZJQ1RBQkxFXS5saXN0KTsKKwkJaWYgKHBhZ2VfZXZpY3RhYmxlKHBhZ2UsIE5VTEwpKQorCQkJZ290byByZXRyeTsKKwl9Cit9CisKKy8qKgorICogc2Nhbl9tYXBwaW5nX3VuZXZpY3RhYmxlX3BhZ2VzIC0gc2NhbiBhbiBhZGRyZXNzIHNwYWNlIGZvciBldmljdGFibGUgcGFnZXMKKyAqIEBtYXBwaW5nOiBzdHJ1Y3QgYWRkcmVzc19zcGFjZSB0byBzY2FuIGZvciBldmljdGFibGUgcGFnZXMKKyAqCisgKiBTY2FuIGFsbCBwYWdlcyBpbiBtYXBwaW5nLiAgQ2hlY2sgdW5ldmljdGFibGUgcGFnZXMgZm9yCisgKiBldmljdGFiaWxpdHkgYW5kIG1vdmUgdGhlbSB0byB0aGUgYXBwcm9wcmlhdGUgem9uZSBscnUgbGlzdC4KKyAqLwordm9pZCBzY2FuX21hcHBpbmdfdW5ldmljdGFibGVfcGFnZXMoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcpCit7CisJcGdvZmZfdCBuZXh0ID0gMDsKKwlwZ29mZl90IGVuZCAgID0gKGlfc2l6ZV9yZWFkKG1hcHBpbmctPmhvc3QpICsgUEFHRV9DQUNIRV9TSVpFIC0gMSkgPj4KKwkJCSBQQUdFX0NBQ0hFX1NISUZUOworCXN0cnVjdCB6b25lICp6b25lOworCXN0cnVjdCBwYWdldmVjIHB2ZWM7CisKKwlpZiAobWFwcGluZy0+bnJwYWdlcyA9PSAwKQorCQlyZXR1cm47CisKKwlwYWdldmVjX2luaXQoJnB2ZWMsIDApOworCXdoaWxlIChuZXh0IDwgZW5kICYmCisJCXBhZ2V2ZWNfbG9va3VwKCZwdmVjLCBtYXBwaW5nLCBuZXh0LCBQQUdFVkVDX1NJWkUpKSB7CisJCWludCBpOworCQlpbnQgcGdfc2Nhbm5lZCA9IDA7CisKKwkJem9uZSA9IE5VTEw7CisKKwkJZm9yIChpID0gMDsgaSA8IHBhZ2V2ZWNfY291bnQoJnB2ZWMpOyBpKyspIHsKKwkJCXN0cnVjdCBwYWdlICpwYWdlID0gcHZlYy5wYWdlc1tpXTsKKwkJCXBnb2ZmX3QgcGFnZV9pbmRleCA9IHBhZ2UtPmluZGV4OworCQkJc3RydWN0IHpvbmUgKnBhZ2V6b25lID0gcGFnZV96b25lKHBhZ2UpOworCisJCQlwZ19zY2FubmVkKys7CisJCQlpZiAocGFnZV9pbmRleCA+IG5leHQpCisJCQkJbmV4dCA9IHBhZ2VfaW5kZXg7CisJCQluZXh0Kys7CisKKwkJCWlmIChwYWdlem9uZSAhPSB6b25lKSB7CisJCQkJaWYgKHpvbmUpCisJCQkJCXNwaW5fdW5sb2NrX2lycSgmem9uZS0+bHJ1X2xvY2spOworCQkJCXpvbmUgPSBwYWdlem9uZTsKKwkJCQlzcGluX2xvY2tfaXJxKCZ6b25lLT5scnVfbG9jayk7CisJCQl9CisKKwkJCWlmIChQYWdlTFJVKHBhZ2UpICYmIFBhZ2VVbmV2aWN0YWJsZShwYWdlKSkKKwkJCQljaGVja19tb3ZlX3VuZXZpY3RhYmxlX3BhZ2UocGFnZSwgem9uZSk7CisJCX0KKwkJaWYgKHpvbmUpCisJCQlzcGluX3VubG9ja19pcnEoJnpvbmUtPmxydV9sb2NrKTsKKwkJcGFnZXZlY19yZWxlYXNlKCZwdmVjKTsKKworCQljb3VudF92bV9ldmVudHMoVU5FVklDVEFCTEVfUEdTQ0FOTkVELCBwZ19zY2FubmVkKTsKKwl9CisKK30KKworLyoqCisgKiBzY2FuX3pvbmVfdW5ldmljdGFibGVfcGFnZXMgLSBjaGVjayB1bmV2aWN0YWJsZSBsaXN0IGZvciBldmljdGFibGUgcGFnZXMKKyAqIEB6b25lIC0gem9uZSBvZiB3aGljaCB0byBzY2FuIHRoZSB1bmV2aWN0YWJsZSBsaXN0CisgKgorICogU2NhbiBAem9uZSdzIHVuZXZpY3RhYmxlIExSVSBsaXN0cyB0byBjaGVjayBmb3IgcGFnZXMgdGhhdCBoYXZlIGJlY29tZQorICogZXZpY3RhYmxlLiAgTW92ZSB0aG9zZSB0aGF0IGhhdmUgdG8gQHpvbmUncyBpbmFjdGl2ZSBsaXN0IHdoZXJlIHRoZXkKKyAqIGJlY29tZSBjYW5kaWRhdGVzIGZvciByZWNsYWltLCB1bmxlc3Mgc2hyaW5rX2luYWN0aXZlX3pvbmUoKSBkZWNpZGVzCisgKiB0byByZWFjdGl2YXRlIHRoZW0uICBQYWdlcyB0aGF0IGFyZSBzdGlsbCB1bmV2aWN0YWJsZSBhcmUgcm90YXRlZAorICogYmFjayBvbnRvIEB6b25lJ3MgdW5ldmljdGFibGUgbGlzdC4KKyAqLworI2RlZmluZSBTQ0FOX1VORVZJQ1RBQkxFX0JBVENIX1NJWkUgMTZVTCAvKiBhcmJpdHJhcnkgbG9jayBob2xkIGJhdGNoIHNpemUgKi8KK3ZvaWQgc2Nhbl96b25lX3VuZXZpY3RhYmxlX3BhZ2VzKHN0cnVjdCB6b25lICp6b25lKQoreworCXN0cnVjdCBsaXN0X2hlYWQgKmxfdW5ldmljdGFibGUgPSAmem9uZS0+bHJ1W0xSVV9VTkVWSUNUQUJMRV0ubGlzdDsKKwl1bnNpZ25lZCBsb25nIHNjYW47CisJdW5zaWduZWQgbG9uZyBucl90b19zY2FuID0gem9uZV9wYWdlX3N0YXRlKHpvbmUsIE5SX1VORVZJQ1RBQkxFKTsKKworCXdoaWxlIChucl90b19zY2FuID4gMCkgeworCQl1bnNpZ25lZCBsb25nIGJhdGNoX3NpemUgPSBtaW4obnJfdG9fc2NhbiwKKwkJCQkJCVNDQU5fVU5FVklDVEFCTEVfQkFUQ0hfU0laRSk7CisKKwkJc3Bpbl9sb2NrX2lycSgmem9uZS0+bHJ1X2xvY2spOworCQlmb3IgKHNjYW4gPSAwOyAgc2NhbiA8IGJhdGNoX3NpemU7IHNjYW4rKykgeworCQkJc3RydWN0IHBhZ2UgKnBhZ2UgPSBscnVfdG9fcGFnZShsX3VuZXZpY3RhYmxlKTsKKworCQkJaWYgKCF0cnlsb2NrX3BhZ2UocGFnZSkpCisJCQkJY29udGludWU7CisKKwkJCXByZWZldGNod19wcmV2X2xydV9wYWdlKHBhZ2UsIGxfdW5ldmljdGFibGUsIGZsYWdzKTsKKworCQkJaWYgKGxpa2VseShQYWdlTFJVKHBhZ2UpICYmIFBhZ2VVbmV2aWN0YWJsZShwYWdlKSkpCisJCQkJY2hlY2tfbW92ZV91bmV2aWN0YWJsZV9wYWdlKHBhZ2UsIHpvbmUpOworCisJCQl1bmxvY2tfcGFnZShwYWdlKTsKKwkJfQorCQlzcGluX3VubG9ja19pcnEoJnpvbmUtPmxydV9sb2NrKTsKKworCQlucl90b19zY2FuIC09IGJhdGNoX3NpemU7CisJfQorfQorCisKKy8qKgorICogc2Nhbl9hbGxfem9uZXNfdW5ldmljdGFibGVfcGFnZXMgLSBzY2FuIGFsbCB1bmV2aWN0YWJsZSBsaXN0cyBmb3IgZXZpY3RhYmxlIHBhZ2VzCisgKgorICogQSByZWFsbHkgYmlnIGhhbW1lcjogIHNjYW4gYWxsIHpvbmVzJyB1bmV2aWN0YWJsZSBMUlUgbGlzdHMgdG8gY2hlY2sgZm9yCisgKiBwYWdlcyB0aGF0IGhhdmUgYmVjb21lIGV2aWN0YWJsZS4gIE1vdmUgdGhvc2UgYmFjayB0byB0aGUgem9uZXMnCisgKiBpbmFjdGl2ZSBsaXN0IHdoZXJlIHRoZXkgYmVjb21lIGNhbmRpZGF0ZXMgZm9yIHJlY2xhaW0uCisgKiBUaGlzIG9jY3VycyB3aGVuLCBlLmcuLCB3ZSBoYXZlIHVuc3dhcHBhYmxlIHBhZ2VzIG9uIHRoZSB1bmV2aWN0YWJsZSBsaXN0cywKKyAqIGFuZCB3ZSBhZGQgc3dhcCB0byB0aGUgc3lzdGVtLiAgQXMgc3VjaCwgaXQgcnVucyBpbiB0aGUgY29udGV4dCBvZiBhIHRhc2sKKyAqIHRoYXQgaGFzIHBvc3NpYmx5L3Byb2JhYmx5IG1hZGUgc29tZSBwcmV2aW91c2x5IHVuZXZpY3RhYmxlIHBhZ2VzCisgKiBldmljdGFibGUuCisgKi8KK3ZvaWQgc2Nhbl9hbGxfem9uZXNfdW5ldmljdGFibGVfcGFnZXModm9pZCkKK3sKKwlzdHJ1Y3Qgem9uZSAqem9uZTsKKworCWZvcl9lYWNoX3pvbmUoem9uZSkgeworCQlzY2FuX3pvbmVfdW5ldmljdGFibGVfcGFnZXMoem9uZSk7CisJfQorfQorCisvKgorICogc2Nhbl91bmV2aWN0YWJsZV9wYWdlcyBbdm1dIHN5c2N0bCBoYW5kbGVyLiAgT24gZGVtYW5kIHJlLXNjYW4gb2YKKyAqIGFsbCBub2RlcycgdW5ldmljdGFibGUgbGlzdHMgZm9yIGV2aWN0YWJsZSBwYWdlcworICovCit1bnNpZ25lZCBsb25nIHNjYW5fdW5ldmljdGFibGVfcGFnZXM7CisKK2ludCBzY2FuX3VuZXZpY3RhYmxlX2hhbmRsZXIoc3RydWN0IGN0bF90YWJsZSAqdGFibGUsIGludCB3cml0ZSwKKwkJCSAgIHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkIF9fdXNlciAqYnVmZmVyLAorCQkJICAgc2l6ZV90ICpsZW5ndGgsIGxvZmZfdCAqcHBvcykKK3sKKwlwcm9jX2RvdWxvbmd2ZWNfbWlubWF4KHRhYmxlLCB3cml0ZSwgZmlsZSwgYnVmZmVyLCBsZW5ndGgsIHBwb3MpOworCisJaWYgKHdyaXRlICYmICoodW5zaWduZWQgbG9uZyAqKXRhYmxlLT5kYXRhKQorCQlzY2FuX2FsbF96b25lc191bmV2aWN0YWJsZV9wYWdlcygpOworCisJc2Nhbl91bmV2aWN0YWJsZV9wYWdlcyA9IDA7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBwZXIgbm9kZSAnc2Nhbl91bmV2aWN0YWJsZV9wYWdlcycgYXR0cmlidXRlLiAgT24gZGVtYW5kIHJlLXNjYW4gb2YKKyAqIGEgc3BlY2lmaWVkIG5vZGUncyBwZXIgem9uZSB1bmV2aWN0YWJsZSBsaXN0cyBmb3IgZXZpY3RhYmxlIHBhZ2VzLgorICovCisKK3N0YXRpYyBzc2l6ZV90IHJlYWRfc2Nhbl91bmV2aWN0YWJsZV9ub2RlKHN0cnVjdCBzeXNfZGV2aWNlICpkZXYsCisJCQkJCSAgc3RydWN0IHN5c2Rldl9hdHRyaWJ1dGUgKmF0dHIsCisJCQkJCSAgY2hhciAqYnVmKQoreworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIjBcbiIpOwkvKiBhbHdheXMgemVybzsgc2hvdWxkIGZpdC4uLiAqLworfQorCitzdGF0aWMgc3NpemVfdCB3cml0ZV9zY2FuX3VuZXZpY3RhYmxlX25vZGUoc3RydWN0IHN5c19kZXZpY2UgKmRldiwKKwkJCQkJICAgc3RydWN0IHN5c2Rldl9hdHRyaWJ1dGUgKmF0dHIsCisJCQkJCWNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCB6b25lICpub2RlX3pvbmVzID0gTk9ERV9EQVRBKGRldi0+aWQpLT5ub2RlX3pvbmVzOworCXN0cnVjdCB6b25lICp6b25lOworCXVuc2lnbmVkIGxvbmcgcmVzOworCXVuc2lnbmVkIGxvbmcgcmVxID0gc3RyaWN0X3N0cnRvdWwoYnVmLCAxMCwgJnJlcyk7CisKKwlpZiAoIXJlcSkKKwkJcmV0dXJuIDE7CS8qIHplcm8gaXMgbm8tb3AgKi8KKworCWZvciAoem9uZSA9IG5vZGVfem9uZXM7IHpvbmUgLSBub2RlX3pvbmVzIDwgTUFYX05SX1pPTkVTOyArK3pvbmUpIHsKKwkJaWYgKCFwb3B1bGF0ZWRfem9uZSh6b25lKSkKKwkJCWNvbnRpbnVlOworCQlzY2FuX3pvbmVfdW5ldmljdGFibGVfcGFnZXMoem9uZSk7CisJfQorCXJldHVybiAxOworfQorCisKK3N0YXRpYyBTWVNERVZfQVRUUihzY2FuX3VuZXZpY3RhYmxlX3BhZ2VzLCBTX0lSVUdPIHwgU19JV1VTUiwKKwkJCXJlYWRfc2Nhbl91bmV2aWN0YWJsZV9ub2RlLAorCQkJd3JpdGVfc2Nhbl91bmV2aWN0YWJsZV9ub2RlKTsKKworaW50IHNjYW5fdW5ldmljdGFibGVfcmVnaXN0ZXJfbm9kZShzdHJ1Y3Qgbm9kZSAqbm9kZSkKK3sKKwlyZXR1cm4gc3lzZGV2X2NyZWF0ZV9maWxlKCZub2RlLT5zeXNkZXYsICZhdHRyX3NjYW5fdW5ldmljdGFibGVfcGFnZXMpOworfQorCit2b2lkIHNjYW5fdW5ldmljdGFibGVfdW5yZWdpc3Rlcl9ub2RlKHN0cnVjdCBub2RlICpub2RlKQoreworCXN5c2Rldl9yZW1vdmVfZmlsZSgmbm9kZS0+c3lzZGV2LCAmYXR0cl9zY2FuX3VuZXZpY3RhYmxlX3BhZ2VzKTsKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9tbS92bXN0YXQuYyBiL21tL3Ztc3RhdC5jCmluZGV4IGQ3ODI2YWYuLjkzNDMyMjcgMTAwNjQ0Ci0tLSBhL21tL3Ztc3RhdC5jCisrKyBiL21tL3Ztc3RhdC5jCkBAIC02MTksOCArNjE5LDE0IEBACiBzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHZtc3RhdF90ZXh0W10gPSB7CiAJLyogWm9uZWQgVk0gY291bnRlcnMgKi8KIAkibnJfZnJlZV9wYWdlcyIsCi0JIm5yX2luYWN0aXZlIiwKLQkibnJfYWN0aXZlIiwKKwkibnJfaW5hY3RpdmVfYW5vbiIsCisJIm5yX2FjdGl2ZV9hbm9uIiwKKwkibnJfaW5hY3RpdmVfZmlsZSIsCisJIm5yX2FjdGl2ZV9maWxlIiwKKyNpZmRlZiBDT05GSUdfVU5FVklDVEFCTEVfTFJVCisJIm5yX3VuZXZpY3RhYmxlIiwKKwkibnJfbWxvY2siLAorI2VuZGlmCiAJIm5yX2Fub25fcGFnZXMiLAogCSJucl9tYXBwZWQiLAogCSJucl9maWxlX3BhZ2VzIiwKQEAgLTY3NSw2ICs2ODEsMTYgQEAKIAkiaHRsYl9idWRkeV9hbGxvY19zdWNjZXNzIiwKIAkiaHRsYl9idWRkeV9hbGxvY19mYWlsIiwKICNlbmRpZgorI2lmZGVmIENPTkZJR19VTkVWSUNUQUJMRV9MUlUKKwkidW5ldmljdGFibGVfcGdzX2N1bGxlZCIsCisJInVuZXZpY3RhYmxlX3Bnc19zY2FubmVkIiwKKwkidW5ldmljdGFibGVfcGdzX3Jlc2N1ZWQiLAorCSJ1bmV2aWN0YWJsZV9wZ3NfbWxvY2tlZCIsCisJInVuZXZpY3RhYmxlX3Bnc19tdW5sb2NrZWQiLAorCSJ1bmV2aWN0YWJsZV9wZ3NfY2xlYXJlZCIsCisJInVuZXZpY3RhYmxlX3Bnc19zdHJhbmRlZCIsCisJInVuZXZpY3RhYmxlX3Bnc19tbG9ja2ZyZWVkIiwKKyNlbmRpZgogI2VuZGlmCiB9OwogCkBAIC02ODgsNyArNzA0LDcgQEAKIAkJICAgIlxuICAgICAgICBtaW4gICAgICAlbHUiCiAJCSAgICJcbiAgICAgICAgbG93ICAgICAgJWx1IgogCQkgICAiXG4gICAgICAgIGhpZ2ggICAgICVsdSIKLQkJICAgIlxuICAgICAgICBzY2FubmVkICAlbHUgKGE6ICVsdSBpOiAlbHUpIgorCQkgICAiXG4gICAgICAgIHNjYW5uZWQgICVsdSAoYWE6ICVsdSBpYTogJWx1IGFmOiAlbHUgaWY6ICVsdSkiCiAJCSAgICJcbiAgICAgICAgc3Bhbm5lZCAgJWx1IgogCQkgICAiXG4gICAgICAgIHByZXNlbnQgICVsdSIsCiAJCSAgIHpvbmVfcGFnZV9zdGF0ZSh6b25lLCBOUl9GUkVFX1BBR0VTKSwKQEAgLTY5Niw3ICs3MTIsMTAgQEAKIAkJICAgem9uZS0+cGFnZXNfbG93LAogCQkgICB6b25lLT5wYWdlc19oaWdoLAogCQkgICB6b25lLT5wYWdlc19zY2FubmVkLAotCQkgICB6b25lLT5ucl9zY2FuX2FjdGl2ZSwgem9uZS0+bnJfc2Nhbl9pbmFjdGl2ZSwKKwkJICAgem9uZS0+bHJ1W0xSVV9BQ1RJVkVfQU5PTl0ubnJfc2NhbiwKKwkJICAgem9uZS0+bHJ1W0xSVV9JTkFDVElWRV9BTk9OXS5ucl9zY2FuLAorCQkgICB6b25lLT5scnVbTFJVX0FDVElWRV9GSUxFXS5ucl9zY2FuLAorCQkgICB6b25lLT5scnVbTFJVX0lOQUNUSVZFX0ZJTEVdLm5yX3NjYW4sCiAJCSAgIHpvbmUtPnNwYW5uZWRfcGFnZXMsCiAJCSAgIHpvbmUtPnByZXNlbnRfcGFnZXMpOwogCkBAIC03MzMsMTAgKzc1MiwxMiBAQAogCXNlcV9wcmludGYobSwKIAkJICAgIlxuICBhbGxfdW5yZWNsYWltYWJsZTogJXUiCiAJCSAgICJcbiAgcHJldl9wcmlvcml0eTogICAgICVpIgotCQkgICAiXG4gIHN0YXJ0X3BmbjogICAgICAgICAlbHUiLAorCQkgICAiXG4gIHN0YXJ0X3BmbjogICAgICAgICAlbHUiCisJCSAgICJcbiAgaW5hY3RpdmVfcmF0aW86ICAgICV1IiwKIAkJCSAgIHpvbmVfaXNfYWxsX3VucmVjbGFpbWFibGUoem9uZSksCiAJCSAgIHpvbmUtPnByZXZfcHJpb3JpdHksCi0JCSAgIHpvbmUtPnpvbmVfc3RhcnRfcGZuKTsKKwkJICAgem9uZS0+em9uZV9zdGFydF9wZm4sCisJCSAgIHpvbmUtPmluYWN0aXZlX3JhdGlvKTsKIAlzZXFfcHV0YyhtLCAnXG4nKTsKIH0KIApkaWZmIC0tZ2l0IGEvbmV0LzgwMi9mYy5jIGIvbmV0LzgwMi9mYy5jCmluZGV4IGNiMzQ3NWUuLjM0Y2YxZWUgMTAwNjQ0Ci0tLSBhL25ldC84MDIvZmMuYworKysgYi9uZXQvODAyL2ZjLmMKQEAgLTgyLDEzICs4MiwxMyBAQAogCiBzdGF0aWMgaW50IGZjX3JlYnVpbGRfaGVhZGVyKHN0cnVjdCBza19idWZmICpza2IpCiB7CisjaWZkZWYgQ09ORklHX0lORVQKIAlzdHJ1Y3QgZmNoX2hkciAqZmNoPShzdHJ1Y3QgZmNoX2hkciAqKXNrYi0+ZGF0YTsKIAlzdHJ1Y3QgZmNsbGMgKmZjbGxjPShzdHJ1Y3QgZmNsbGMgKikoc2tiLT5kYXRhK3NpemVvZihzdHJ1Y3QgZmNoX2hkcikpOwogCWlmKGZjbGxjLT5ldGhlcnR5cGUgIT0gaHRvbnMoRVRIX1BfSVApKSB7CiAJCXByaW50aygiZmNfcmVidWlsZF9oZWFkZXI6IERvbid0IGtub3cgaG93IHRvIHJlc29sdmUgdHlwZSAlMDRYIGFkZHJlc3NlcyA/XG4iLCBudG9ocyhmY2xsYy0+ZXRoZXJ0eXBlKSk7CiAJCXJldHVybiAwOwogCX0KLSNpZmRlZiBDT05GSUdfSU5FVAogCXJldHVybiBhcnBfZmluZChmY2gtPmRhZGRyLCBza2IpOwogI2Vsc2UKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL25ldC84MDIvcHNuYXAuYyBiL25ldC84MDIvcHNuYXAuYwppbmRleCBiM2NmZTVhLi43MDk4MGJhIDEwMDY0NAotLS0gYS9uZXQvODAyL3BzbmFwLmMKKysrIGIvbmV0LzgwMi9wc25hcC5jCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqCVNOQVAgZGF0YSBsaW5rIGxheWVyLiBEZXJpdmVkIGZyb20gODAyLjIKICAqCi0gKgkJQWxhbiBDb3ggPEFsYW4uQ294QGxpbnV4Lm9yZz4sCisgKgkJQWxhbiBDb3ggPGFsYW5AbHhvcmd1ay51a3V1Lm9yZy51az4sCiAgKgkJZnJvbSB0aGUgODAyLjIgbGF5ZXIgYnkgR3JlZyBQYWdlLgogICoJCU1lcmdlZCBpbiBhZGRpdGlvbnMgZnJvbSBHcmVnIFBhZ2UncyBwc25hcC5jLgogICoKZGlmZiAtLWdpdCBhL25ldC85cC9NYWtlZmlsZSBiL25ldC85cC9NYWtlZmlsZQppbmRleCA1MTkyMTk0Li4xMDQxYjdiIDEwMDY0NAotLS0gYS9uZXQvOXAvTWFrZWZpbGUKKysrIGIvbmV0LzlwL01ha2VmaWxlCkBAIC00LDEwICs0LDkgQEAKIDlwbmV0LW9ianMgOj0gXAogCW1vZC5vIFwKIAljbGllbnQubyBcCi0JY29udi5vIFwKIAllcnJvci5vIFwKLQlmY3ByaW50Lm8gXAogCXV0aWwubyBcCisJcHJvdG9jb2wubyBcCiAJdHJhbnNfZmQubyBcCiAKIDlwbmV0X3ZpcnRpby1vYmpzIDo9IFwKZGlmZiAtLWdpdCBhL25ldC85cC9jbGllbnQuYyBiL25ldC85cC9jbGllbnQuYwppbmRleCAxMGUzMjAzLi5iYmFjMmY3IDEwMDY0NAotLS0gYS9uZXQvOXAvY2xpZW50LmMKKysrIGIvbmV0LzlwL2NsaWVudC5jCkBAIC0zMywxMiArMzMsOSBAQAogI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxuZXQvOXAvOXAuaD4KICNpbmNsdWRlIDxsaW51eC9wYXJzZXIuaD4KLSNpbmNsdWRlIDxuZXQvOXAvdHJhbnNwb3J0Lmg+CiAjaW5jbHVkZSA8bmV0LzlwL2NsaWVudC5oPgotCi1zdGF0aWMgc3RydWN0IHA5X2ZpZCAqcDlfZmlkX2NyZWF0ZShzdHJ1Y3QgcDlfY2xpZW50ICpjbG50KTsKLXN0YXRpYyB2b2lkIHA5X2ZpZF9kZXN0cm95KHN0cnVjdCBwOV9maWQgKmZpZCk7Ci1zdGF0aWMgc3RydWN0IHA5X3N0YXQgKnA5X2Nsb25lX3N0YXQoc3RydWN0IHA5X3N0YXQgKnN0LCBpbnQgZG90dSk7CisjaW5jbHVkZSA8bmV0LzlwL3RyYW5zcG9ydC5oPgorI2luY2x1ZGUgInByb3RvY29sLmgiCiAKIC8qCiAgICogQ2xpZW50IE9wdGlvbiBQYXJzaW5nIChjb2RlIGluc3BpcmVkIGJ5IE5GUyBjb2RlKQpAQCAtNTIsMTMgKzQ5LDE2IEBACiAJT3B0X2VyciwKIH07CiAKLXN0YXRpYyBtYXRjaF90YWJsZV90IHRva2VucyA9IHsKK3N0YXRpYyBjb25zdCBtYXRjaF90YWJsZV90IHRva2VucyA9IHsKIAl7T3B0X21zaXplLCAibXNpemU9JXUifSwKIAl7T3B0X2xlZ2FjeSwgIm5vZXh0ZW5kIn0sCiAJe09wdF90cmFucywgInRyYW5zPSVzIn0sCiAJe09wdF9lcnIsIE5VTEx9LAogfTsKIAorc3RhdGljIHN0cnVjdCBwOV9yZXFfdCAqCitwOV9jbGllbnRfcnBjKHN0cnVjdCBwOV9jbGllbnQgKmMsIGludDhfdCB0eXBlLCBjb25zdCBjaGFyICpmbXQsIC4uLik7CisKIC8qKgogICogdjlmc19wYXJzZV9vcHRpb25zIC0gcGFyc2UgbW91bnQgb3B0aW9ucyBpbnRvIHNlc3Npb24gc3RydWN0dXJlCiAgKiBAb3B0aW9uczogb3B0aW9ucyBzdHJpbmcgcGFzc2VkIGZyb20gbW91bnQKQEAgLTEyNCw5MjIgKzEyNCw0OTYgQEAKIAlyZXR1cm4gcmV0OwogfQogCisvKioKKyAqIHA5X3RhZ19hbGxvYyAtIGxvb2t1cC9hbGxvY2F0ZSBhIHJlcXVlc3QgYnkgdGFnCisgKiBAYzogY2xpZW50IHNlc3Npb24gdG8gbG9va3VwIHRhZyB3aXRoaW4KKyAqIEB0YWc6IG51bWVyaWMgaWQgZm9yIHRyYW5zYWN0aW9uCisgKgorICogdGhpcyBpcyBhIHNpbXBsZSBhcnJheSBsb29rdXAsIGJ1dCB3aWxsIGdyb3cgdGhlCisgKiByZXF1ZXN0X3Nsb3RzIGFzIG5lY2Vzc2FyeSB0byBhY2NvbW9kYXRlIHRyYW5zYWN0aW9uCisgKiBpZHMgd2hpY2ggZGlkIG5vdCBwcmV2aW91c2x5IGhhdmUgYSBzbG90LgorICoKKyAqIHRoaXMgY29kZSByZWxpZXMgb24gdGhlIGNsaWVudCBzcGlubG9jayB0byBtYW5hZ2UgbG9ja3MsIGl0cworICogcG9zc2libGUgd2Ugc2hvdWxkIHN3aXRjaCB0byBzb21ldGhpbmcgZWxzZSwgYnV0IEknZCByYXRoZXIKKyAqIHN0aWNrIHdpdGggc29tZXRoaW5nIGxvdy1vdmVyaGVhZCBmb3IgdGhlIGNvbW1vbiBjYXNlLgorICoKKyAqLworCitzdGF0aWMgc3RydWN0IHA5X3JlcV90ICpwOV90YWdfYWxsb2Moc3RydWN0IHA5X2NsaWVudCAqYywgdTE2IHRhZykKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCByb3csIGNvbDsKKwlzdHJ1Y3QgcDlfcmVxX3QgKnJlcTsKKworCS8qIFRoaXMgbG9va3MgdXAgdGhlIG9yaWdpbmFsIHJlcXVlc3QgYnkgdGFnIHNvIHdlIGtub3cgd2hpY2gKKwkgKiBidWZmZXIgdG8gcmVhZCB0aGUgZGF0YSBpbnRvICovCisJdGFnKys7CisKKwlpZiAodGFnID49IGMtPm1heF90YWcpIHsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmMtPmxvY2ssIGZsYWdzKTsKKwkJLyogY2hlY2sgYWdhaW4gc2luY2Ugb3JpZ2luYWwgY2hlY2sgd2FzIG91dHNpZGUgb2YgbG9jayAqLworCQl3aGlsZSAodGFnID49IGMtPm1heF90YWcpIHsKKwkJCXJvdyA9ICh0YWcgLyBQOV9ST1dfTUFYVEFHKTsKKwkJCWMtPnJlcXNbcm93XSA9IGtjYWxsb2MoUDlfUk9XX01BWFRBRywKKwkJCQkJc2l6ZW9mKHN0cnVjdCBwOV9yZXFfdCksIEdGUF9BVE9NSUMpOworCisJCQlpZiAoIWMtPnJlcXNbcm93XSkgeworCQkJCXByaW50ayhLRVJOX0VSUiAiQ291bGRuJ3QgZ3JvdyB0YWcgYXJyYXlcbiIpOworCQkJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOworCQkJfQorCQkJZm9yIChjb2wgPSAwOyBjb2wgPCBQOV9ST1dfTUFYVEFHOyBjb2wrKykgeworCQkJCWMtPnJlcXNbcm93XVtjb2xdLnN0YXR1cyA9IFJFUV9TVEFUVVNfSURMRTsKKwkJCQljLT5yZXFzW3Jvd11bY29sXS50YyA9IE5VTEw7CisJCQl9CisJCQljLT5tYXhfdGFnICs9IFA5X1JPV19NQVhUQUc7CisJCX0KKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYy0+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+ZXh0ZW5zaW9uLnN0ciwgc3QtPmV4dGVuc2lvbi5sZW4pOwotCQlyZXQtPmV4dGVuc2lvbi5zdHIgPSBwOwotCQlwICs9IHN0LT5leHRlbnNpb24ubGVuOwotCX0KLQotCXJldHVybiByZXQ7Ci19CiAKIHN0YXRpYyBzdHJ1Y3QgcDlfZmlkICpwOV9maWRfY3JlYXRlKHN0cnVjdCBwOV9jbGllbnQgKmNsbnQpCiB7CiAJaW50IGVycjsKIAlzdHJ1Y3QgcDlfZmlkICpmaWQ7CiAKLQlQOV9EUFJJTlRLKFA5X0RFQlVHXzlQLCAiY2xudCAlcFxuIiwgY2xudCk7CisJUDlfRFBSSU5USyhQOV9ERUJVR19GSUQsICJjbG50ICVwXG4iLCBjbG50KTsKIAlmaWQgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgcDlfZmlkKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFmaWQpCiAJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwpAQCAtMTA1Myw4ICs2MjcsNiBAQAogCW1lbXNldCgmZmlkLT5xaWQsIDAsIHNpemVvZihzdHJ1Y3QgcDlfcWlkKSk7CiAJZmlkLT5tb2RlID0gLTE7CiAJZmlkLT5yZGlyX2Zwb3MgPSAwOwotCWZpZC0+cmRpcl9wb3MgPSAwOwotCWZpZC0+cmRpcl9mY2FsbCA9IE5VTEw7CiAJZmlkLT51aWQgPSBjdXJyZW50LT5mc3VpZDsKIAlmaWQtPmNsbnQgPSBjbG50OwogCWZpZC0+YXV4ID0gTlVMTDsKQEAgLTEwNzQsMTIgKzY0Niw2MzEgQEAKIHsKIAlzdHJ1Y3QgcDlfY2xpZW50ICpjbG50OwogCi0JUDlfRFBSSU5USyhQOV9ERUJVR185UCwgImZpZCAlZFxuIiwgZmlkLT5maWQpOworCVA5X0RQUklOVEsoUDlfREVCVUdfRklELCAiZmlkICVkXG4iLCBmaWQtPmZpZCk7CiAJY2xudCA9IGZpZC0+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+CmRpZmYgLS1naXQgYS9uZXQvOXAvcHJvdG9jb2wuYyBiL25ldC85cC9wcm90b2NvbC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI5YmU1MjQKLS0tIC9kZXYvbnVsbAorKysgYi9uZXQvOXAvcHJvdG9jb2wuYwpAQCAtMCwwICsxLDU1OCBAQAorLyoKKyAqIG5ldC85cC9wcm90b2NvbC5jCisgKgorICogOVAgUHJvdG9jb2wgU3VwcG9ydCBDb2RlCisgKgorICogIENvcHlyaWdodCAoQykgMjAwOCBieSBFcmljIFZhbiBIZW5zYmVyZ2VuIDxlcmljdmhAZ21haWwuY29tPgorICoKKyAqICBCYXNlIG9uIGNvZGUgZnJvbSBBbnRob255IExpZ3VvcmkgPGFsaWd1b3JpQHVzLmlibS5jb20+CisgKiAgQ29weXJpZ2h0IChDKSAyMDA4IGJ5IElCTSwgQ29ycC4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMgorICogIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvOgorICogIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICogIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IKKyAqICBCb3N0b24sIE1BICAwMjExMS0xMzAxICBVU0EKKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bmV0LzlwLzlwLmg+CisjaW5jbHVkZSA8bmV0LzlwL2NsaWVudC5oPgorI2luY2x1ZGUgInByb3RvY29sLmgiCisKKyNpZm5kZWYgTUlOCisjZGVmaW5lIE1JTihhLCBiKSAoKChhKSA8IChiKSkgPyAoYSkgOiAoYikpCisjZW5kaWYKKworI2lmbmRlZiBNQVgKKyNkZWZpbmUgTUFYKGEsIGIpICgoKGEpID4gKGIpKSA/IChhKSA6IChiKSkKKyNlbmRpZgorCisjaWZuZGVmIG9mZnNldF9vZgorI2RlZmluZSBvZmZzZXRfb2YodHlwZSwgbWVtYikgXAorCSgodW5zaWduZWQgbG9uZykoJigodHlwZSAqKTApLT5tZW1iKSkKKyNlbmRpZgorI2lmbmRlZiBjb250YWluZXJfb2YKKyNkZWZpbmUgY29udGFpbmVyX29mKG9iaiwgdHlwZSwgbWVtYikgXAorCSgodHlwZSAqKSgoKGNoYXIgKilvYmopIC0gb2Zmc2V0X29mKHR5cGUsIG1lbWIpKSkKKyNlbmRpZgorCitzdGF0aWMgaW50CitwOXBkdV93cml0ZWYoc3RydWN0IHA5X2ZjYWxsICpwZHUsIGludCBvcHRpb25hbCwgY29uc3QgY2hhciAqZm10LCAuLi4pOworCit2b2lkCitwOXBkdV9kdW1wKGludCB3YXksIHN0cnVjdCBwOV9mY2FsbCAqcGR1KQoreworCWludCBpLCBuOworCXU4ICpkYXRhID0gcGR1LT5zZGF0YTsKKwlpbnQgZGF0YWxlbiA9IHBkdS0+c2l6ZTsKKwljaGFyIGJ1ZlsyNTVdOworCWludCBidWZsZW4gPSAyNTU7CisKKwlpID0gbiA9IDA7CisJaWYgKGRhdGFsZW4gPiAoYnVmbGVuLTE2KSkKKwkJZGF0YWxlbiA9IGJ1Zmxlbi0xNjsKKwl3aGlsZSAoaSA8IGRhdGFsZW4pIHsKKwkJbiArPSBzY25wcmludGYoYnVmICsgbiwgYnVmbGVuIC0gbiwgIiUwMnggIiwgZGF0YVtpXSk7CisJCWlmIChpJTQgPT0gMykKKwkJCW4gKz0gc2NucHJpbnRmKGJ1ZiArIG4sIGJ1ZmxlbiAtIG4sICIgIik7CisJCWlmIChpJTMyID09IDMxKQorCQkJbiArPSBzY25wcmludGYoYnVmICsgbiwgYnVmbGVuIC0gbiwgIlxuIik7CisKKwkJaSsrOworCX0KKwluICs9IHNjbnByaW50ZihidWYgKyBuLCBidWZsZW4gLSBuLCAiXG4iKTsKKworCWlmICh3YXkpCisJCVA5X0RQUklOVEsoUDlfREVCVUdfUEtULCAiW1tbKCVkKSAlc1xuIiwgZGF0YWxlbiwgYnVmKTsKKwllbHNlCisJCVA5X0RQUklOVEsoUDlfREVCVUdfUEtULCAiXV1dKCVkKSAlc1xuIiwgZGF0YWxlbiwgYnVmKTsKK30KK0VYUE9SVF9TWU1CT0wocDlwZHVfZHVtcCk7CisKK3ZvaWQgcDlzdGF0X2ZyZWUoc3RydWN0IHA5X3dzdGF0ICpzdGJ1ZikKK3sKKwlrZnJlZShzdGJ1Zi0+bmFtZSk7CisJa2ZyZWUoc3RidWYtPnVpZCk7CisJa2ZyZWUoc3RidWYtPmdpZCk7CisJa2ZyZWUoc3RidWYtPm11aWQpOworCWtmcmVlKHN0YnVmLT5leHRlbnNpb24pOworfQorRVhQT1JUX1NZTUJPTChwOXN0YXRfZnJlZSk7CisKK3N0YXRpYyBzaXplX3QgcGR1X3JlYWQoc3RydWN0IHA5X2ZjYWxsICpwZHUsIHZvaWQgKmRhdGEsIHNpemVfdCBzaXplKQoreworCXNpemVfdCBsZW4gPSBNSU4ocGR1LT5zaXplIC0gcGR1LT5vZmZzZXQsIHNpemUpOworCW1lbWNweShkYXRhLCAmcGR1LT5zZGF0YVtwZHUtPm9mZnNldF0sIGxlbik7CisJcGR1LT5vZmZzZXQgKz0gbGVuOworCXJldHVybiBzaXplIC0gbGVuOworfQorCitzdGF0aWMgc2l6ZV90IHBkdV93cml0ZShzdHJ1Y3QgcDlfZmNhbGwgKnBkdSwgY29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90IHNpemUpCit7CisJc2l6ZV90IGxlbiA9IE1JTihwZHUtPmNhcGFjaXR5IC0gcGR1LT5zaXplLCBzaXplKTsKKwltZW1jcHkoJnBkdS0+c2RhdGFbcGR1LT5zaXplXSwgZGF0YSwgbGVuKTsKKwlwZHUtPnNpemUgKz0gbGVuOworCXJldHVybiBzaXplIC0gbGVuOworfQorCitzdGF0aWMgc2l6ZV90CitwZHVfd3JpdGVfdShzdHJ1Y3QgcDlfZmNhbGwgKnBkdSwgY29uc3QgY2hhciBfX3VzZXIgKnVkYXRhLCBzaXplX3Qgc2l6ZSkKK3sKKwlzaXplX3QgbGVuID0gTUlOKHBkdS0+Y2FwYWNpdHkgLSBwZHUtPnNpemUsIHNpemUpOworCWludCBlcnIgPSBjb3B5X2Zyb21fdXNlcigmcGR1LT5zZGF0YVtwZHUtPnNpemVdLCB1ZGF0YSwgbGVuKTsKKwlpZiAoZXJyKQorCQlwcmludGsoS0VSTl9XQVJOSU5HICJwZHVfd3JpdGVfdSByZXR1cm5pbmc6ICVkXG4iLCBlcnIpOworCisJcGR1LT5zaXplICs9IGxlbjsKKwlyZXR1cm4gc2l6ZSAtIGxlbjsKK30KKworLyoKKwliIC0gaW50OF90CisJdyAtIGludDE2X3QKKwlkIC0gaW50MzJfdAorCXEgLSBpbnQ2NF90CisJcyAtIHN0cmluZworCVMgLSBzdGF0CisJUSAtIHFpZAorCUQgLSBkYXRhIGJsb2IgKGludDMyX3Qgc2l6ZSBmb2xsb3dlZCBieSB2b2lkICosIHJlc3VsdHMgYXJlIG5vdCBmcmVlZCkKKwlUIC0gYXJyYXkgb2Ygc3RyaW5ncyAoaW50MTZfdCBjb3VudCwgZm9sbG93ZWQgYnkgc3RyaW5ncykKKwlSIC0gYXJyYXkgb2YgcWlkcyAoaW50MTZfdCBjb3VudCwgZm9sbG93ZWQgYnkgcWlkcykKKwk/IC0gaWYgb3B0aW9uYWwgPSAxLCBjb250aW51ZSBwYXJzaW5nCisqLworCitzdGF0aWMgaW50CitwOXBkdV92cmVhZGYoc3RydWN0IHA5X2ZjYWxsICpwZHUsIGludCBvcHRpb25hbCwgY29uc3QgY2hhciAqZm10LCB2YV9saXN0IGFwKQoreworCWNvbnN0IGNoYXIgKnB0cjsKKwlpbnQgZXJyY29kZSA9IDA7CisKKwlmb3IgKHB0ciA9IGZtdDsgKnB0cjsgcHRyKyspIHsKKwkJc3dpdGNoICgqcHRyKSB7CisJCWNhc2UgJ2InOnsKKwkJCQlpbnQ4X3QgKnZhbCA9IHZhX2FyZyhhcCwgaW50OF90ICopOworCQkJCWlmIChwZHVfcmVhZChwZHUsIHZhbCwgc2l6ZW9mKCp2YWwpKSkgeworCQkJCQllcnJjb2RlID0gLUVGQVVMVDsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgJ3cnOnsKKwkJCQlpbnQxNl90ICp2YWwgPSB2YV9hcmcoYXAsIGludDE2X3QgKik7CisJCQkJaWYgKHBkdV9yZWFkKHBkdSwgdmFsLCBzaXplb2YoKnZhbCkpKSB7CisJCQkJCWVycmNvZGUgPSAtRUZBVUxUOworCQkJCQlicmVhazsKKwkJCQl9CisJCQkJKnZhbCA9IGNwdV90b19sZTE2KCp2YWwpOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgJ2QnOnsKKwkJCQlpbnQzMl90ICp2YWwgPSB2YV9hcmcoYXAsIGludDMyX3QgKik7CisJCQkJaWYgKHBkdV9yZWFkKHBkdSwgdmFsLCBzaXplb2YoKnZhbCkpKSB7CisJCQkJCWVycmNvZGUgPSAtRUZBVUxUOworCQkJCQlicmVhazsKKwkJCQl9CisJCQkJKnZhbCA9IGNwdV90b19sZTMyKCp2YWwpOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgJ3EnOnsKKwkJCQlpbnQ2NF90ICp2YWwgPSB2YV9hcmcoYXAsIGludDY0X3QgKik7CisJCQkJaWYgKHBkdV9yZWFkKHBkdSwgdmFsLCBzaXplb2YoKnZhbCkpKSB7CisJCQkJCWVycmNvZGUgPSAtRUZBVUxUOworCQkJCQlicmVhazsKKwkJCQl9CisJCQkJKnZhbCA9IGNwdV90b19sZTY0KCp2YWwpOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgJ3MnOnsKKwkJCQljaGFyICoqcHRyID0gdmFfYXJnKGFwLCBjaGFyICoqKTsKKwkJCQlpbnQxNl90IGxlbjsKKwkJCQlpbnQgc2l6ZTsKKworCQkJCWVycmNvZGUgPSBwOXBkdV9yZWFkZihwZHUsIG9wdGlvbmFsLCAidyIsICZsZW4pOworCQkJCWlmIChlcnJjb2RlKQorCQkJCQlicmVhazsKKworCQkJCXNpemUgPSBNQVgobGVuLCAwKTsKKworCQkJCSpwdHIgPSBrbWFsbG9jKHNpemUgKyAxLCBHRlBfS0VSTkVMKTsKKwkJCQlpZiAoKnB0ciA9PSBOVUxMKSB7CisJCQkJCWVycmNvZGUgPSAtRUZBVUxUOworCQkJCQlicmVhazsKKwkJCQl9CisJCQkJaWYgKHBkdV9yZWFkKHBkdSwgKnB0ciwgc2l6ZSkpIHsKKwkJCQkJZXJyY29kZSA9IC1FRkFVTFQ7CisJCQkJCWtmcmVlKCpwdHIpOworCQkJCQkqcHRyID0gTlVMTDsKKwkJCQl9IGVsc2UKKwkJCQkJKCpwdHIpW3NpemVdID0gMDsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlICdRJzp7CisJCQkJc3RydWN0IHA5X3FpZCAqcWlkID0KKwkJCQkgICAgdmFfYXJnKGFwLCBzdHJ1Y3QgcDlfcWlkICopOworCisJCQkJZXJyY29kZSA9IHA5cGR1X3JlYWRmKHBkdSwgb3B0aW9uYWwsICJiZHEiLAorCQkJCQkJICAgICAgJnFpZC0+dHlwZSwgJnFpZC0+dmVyc2lvbiwKKwkJCQkJCSAgICAgICZxaWQtPnBhdGgpOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgJ1MnOnsKKwkJCQlzdHJ1Y3QgcDlfd3N0YXQgKnN0YnVmID0KKwkJCQkgICAgdmFfYXJnKGFwLCBzdHJ1Y3QgcDlfd3N0YXQgKik7CisKKwkJCQltZW1zZXQoc3RidWYsIDAsIHNpemVvZihzdHJ1Y3QgcDlfd3N0YXQpKTsKKwkJCQlzdGJ1Zi0+bl91aWQgPSBzdGJ1Zi0+bl9naWQgPSBzdGJ1Zi0+bl9tdWlkID0KKwkJCQkJCQkJCS0xOworCQkJCWVycmNvZGUgPQorCQkJCSAgICBwOXBkdV9yZWFkZihwZHUsIG9wdGlvbmFsLAorCQkJCQkJInd3ZFFkZGRxc3Nzcz9zZGRkIiwKKwkJCQkJCSZzdGJ1Zi0+c2l6ZSwgJnN0YnVmLT50eXBlLAorCQkJCQkJJnN0YnVmLT5kZXYsICZzdGJ1Zi0+cWlkLAorCQkJCQkJJnN0YnVmLT5tb2RlLCAmc3RidWYtPmF0aW1lLAorCQkJCQkJJnN0YnVmLT5tdGltZSwgJnN0YnVmLT5sZW5ndGgsCisJCQkJCQkmc3RidWYtPm5hbWUsICZzdGJ1Zi0+dWlkLAorCQkJCQkJJnN0YnVmLT5naWQsICZzdGJ1Zi0+bXVpZCwKKwkJCQkJCSZzdGJ1Zi0+ZXh0ZW5zaW9uLAorCQkJCQkJJnN0YnVmLT5uX3VpZCwgJnN0YnVmLT5uX2dpZCwKKwkJCQkJCSZzdGJ1Zi0+bl9tdWlkKTsKKwkJCQlpZiAoZXJyY29kZSkKKwkJCQkJcDlzdGF0X2ZyZWUoc3RidWYpOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgJ0QnOnsKKwkJCQlpbnQzMl90ICpjb3VudCA9IHZhX2FyZyhhcCwgaW50MzJfdCAqKTsKKwkJCQl2b2lkICoqZGF0YSA9IHZhX2FyZyhhcCwgdm9pZCAqKik7CisKKwkJCQllcnJjb2RlID0KKwkJCQkgICAgcDlwZHVfcmVhZGYocGR1LCBvcHRpb25hbCwgImQiLCBjb3VudCk7CisJCQkJaWYgKCFlcnJjb2RlKSB7CisJCQkJCSpjb3VudCA9CisJCQkJCSAgICBNSU4oKmNvdW50LAorCQkJCQkJcGR1LT5zaXplIC0gcGR1LT5vZmZzZXQpOworCQkJCQkqZGF0YSA9ICZwZHUtPnNkYXRhW3BkdS0+b2Zmc2V0XTsKKwkJCQl9CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSAnVCc6eworCQkJCWludDE2X3QgKm53bmFtZSA9IHZhX2FyZyhhcCwgaW50MTZfdCAqKTsKKwkJCQljaGFyICoqKnduYW1lcyA9IHZhX2FyZyhhcCwgY2hhciAqKiopOworCisJCQkJZXJyY29kZSA9CisJCQkJICAgIHA5cGR1X3JlYWRmKHBkdSwgb3B0aW9uYWwsICJ3IiwgbnduYW1lKTsKKwkJCQlpZiAoIWVycmNvZGUpIHsKKwkJCQkJKnduYW1lcyA9CisJCQkJCSAgICBrbWFsbG9jKHNpemVvZihjaGFyICopICogKm53bmFtZSwKKwkJCQkJCSAgICBHRlBfS0VSTkVMKTsKKwkJCQkJaWYgKCEqd25hbWVzKQorCQkJCQkJZXJyY29kZSA9IC1FTk9NRU07CisJCQkJfQorCisJCQkJaWYgKCFlcnJjb2RlKSB7CisJCQkJCWludCBpOworCisJCQkJCWZvciAoaSA9IDA7IGkgPCAqbnduYW1lOyBpKyspIHsKKwkJCQkJCWVycmNvZGUgPQorCQkJCQkJICAgIHA5cGR1X3JlYWRmKHBkdSwgb3B0aW9uYWwsCisJCQkJCQkJCSJzIiwKKwkJCQkJCQkJJigqd25hbWVzKVtpXSk7CisJCQkJCQlpZiAoZXJyY29kZSkKKwkJCQkJCQlicmVhazsKKwkJCQkJfQorCQkJCX0KKworCQkJCWlmIChlcnJjb2RlKSB7CisJCQkJCWlmICgqd25hbWVzKSB7CisJCQkJCQlpbnQgaTsKKworCQkJCQkJZm9yIChpID0gMDsgaSA8ICpud25hbWU7IGkrKykKKwkJCQkJCQlrZnJlZSgoKnduYW1lcylbaV0pOworCQkJCQl9CisJCQkJCWtmcmVlKCp3bmFtZXMpOworCQkJCQkqd25hbWVzID0gTlVMTDsKKwkJCQl9CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSAnUic6eworCQkJCWludDE2X3QgKm53cWlkID0gdmFfYXJnKGFwLCBpbnQxNl90ICopOworCQkJCXN0cnVjdCBwOV9xaWQgKip3cWlkcyA9CisJCQkJICAgIHZhX2FyZyhhcCwgc3RydWN0IHA5X3FpZCAqKik7CisKKwkJCQkqd3FpZHMgPSBOVUxMOworCisJCQkJZXJyY29kZSA9CisJCQkJICAgIHA5cGR1X3JlYWRmKHBkdSwgb3B0aW9uYWwsICJ3IiwgbndxaWQpOworCQkJCWlmICghZXJyY29kZSkgeworCQkJCQkqd3FpZHMgPQorCQkJCQkgICAga21hbGxvYygqbndxaWQgKgorCQkJCQkJICAgIHNpemVvZihzdHJ1Y3QgcDlfcWlkKSwKKwkJCQkJCSAgICBHRlBfS0VSTkVMKTsKKwkJCQkJaWYgKCp3cWlkcyA9PSBOVUxMKQorCQkJCQkJZXJyY29kZSA9IC1FTk9NRU07CisJCQkJfQorCisJCQkJaWYgKCFlcnJjb2RlKSB7CisJCQkJCWludCBpOworCisJCQkJCWZvciAoaSA9IDA7IGkgPCAqbndxaWQ7IGkrKykgeworCQkJCQkJZXJyY29kZSA9CisJCQkJCQkgICAgcDlwZHVfcmVhZGYocGR1LCBvcHRpb25hbCwKKwkJCQkJCQkJIlEiLAorCQkJCQkJCQkmKCp3cWlkcylbaV0pOworCQkJCQkJaWYgKGVycmNvZGUpCisJCQkJCQkJYnJlYWs7CisJCQkJCX0KKwkJCQl9CisKKwkJCQlpZiAoZXJyY29kZSkgeworCQkJCQlrZnJlZSgqd3FpZHMpOworCQkJCQkqd3FpZHMgPSBOVUxMOworCQkJCX0KKwkJCX0KKwkJCWJyZWFrOworCQljYXNlICc/JzoKKwkJCWlmICghb3B0aW9uYWwpCisJCQkJcmV0dXJuIDA7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCUJVRygpOworCQkJYnJlYWs7CisJCX0KKworCQlpZiAoZXJyY29kZSkKKwkJCWJyZWFrOworCX0KKworCXJldHVybiBlcnJjb2RlOworfQorCitpbnQKK3A5cGR1X3Z3cml0ZWYoc3RydWN0IHA5X2ZjYWxsICpwZHUsIGludCBvcHRpb25hbCwgY29uc3QgY2hhciAqZm10LCB2YV9saXN0IGFwKQoreworCWNvbnN0IGNoYXIgKnB0cjsKKwlpbnQgZXJyY29kZSA9IDA7CisKKwlmb3IgKHB0ciA9IGZtdDsgKnB0cjsgcHRyKyspIHsKKwkJc3dpdGNoICgqcHRyKSB7CisJCWNhc2UgJ2InOnsKKwkJCQlpbnQ4X3QgdmFsID0gdmFfYXJnKGFwLCBpbnQpOworCQkJCWlmIChwZHVfd3JpdGUocGR1LCAmdmFsLCBzaXplb2YodmFsKSkpCisJCQkJCWVycmNvZGUgPSAtRUZBVUxUOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgJ3cnOnsKKwkJCQlpbnQxNl90IHZhbCA9IHZhX2FyZyhhcCwgaW50KTsKKwkJCQlpZiAocGR1X3dyaXRlKHBkdSwgJnZhbCwgc2l6ZW9mKHZhbCkpKQorCQkJCQllcnJjb2RlID0gLUVGQVVMVDsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlICdkJzp7CisJCQkJaW50MzJfdCB2YWwgPSB2YV9hcmcoYXAsIGludDMyX3QpOworCQkJCWlmIChwZHVfd3JpdGUocGR1LCAmdmFsLCBzaXplb2YodmFsKSkpCisJCQkJCWVycmNvZGUgPSAtRUZBVUxUOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgJ3EnOnsKKwkJCQlpbnQ2NF90IHZhbCA9IHZhX2FyZyhhcCwgaW50NjRfdCk7CisJCQkJaWYgKHBkdV93cml0ZShwZHUsICZ2YWwsIHNpemVvZih2YWwpKSkKKwkJCQkJZXJyY29kZSA9IC1FRkFVTFQ7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSAncyc6eworCQkJCWNvbnN0IGNoYXIgKnB0ciA9IHZhX2FyZyhhcCwgY29uc3QgY2hhciAqKTsKKwkJCQlpbnQxNl90IGxlbiA9IDA7CisJCQkJaWYgKHB0cikKKwkJCQkJbGVuID0gTUlOKHN0cmxlbihwdHIpLCBVU0hPUlRfTUFYKTsKKworCQkJCWVycmNvZGUgPSBwOXBkdV93cml0ZWYocGR1LCBvcHRpb25hbCwgInciLCBsZW4pOworCQkJCWlmICghZXJyY29kZSAmJiBwZHVfd3JpdGUocGR1LCBwdHIsIGxlbikpCisJCQkJCWVycmNvZGUgPSAtRUZBVUxUOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgJ1EnOnsKKwkJCQljb25zdCBzdHJ1Y3QgcDlfcWlkICpxaWQgPQorCQkJCSAgICB2YV9hcmcoYXAsIGNvbnN0IHN0cnVjdCBwOV9xaWQgKik7CisJCQkJZXJyY29kZSA9CisJCQkJICAgIHA5cGR1X3dyaXRlZihwZHUsIG9wdGlvbmFsLCAiYmRxIiwKKwkJCQkJCSBxaWQtPnR5cGUsIHFpZC0+dmVyc2lvbiwKKwkJCQkJCSBxaWQtPnBhdGgpOworCQkJfSBicmVhazsKKwkJY2FzZSAnUyc6eworCQkJCWNvbnN0IHN0cnVjdCBwOV93c3RhdCAqc3RidWYgPQorCQkJCSAgICB2YV9hcmcoYXAsIGNvbnN0IHN0cnVjdCBwOV93c3RhdCAqKTsKKwkJCQllcnJjb2RlID0KKwkJCQkgICAgcDlwZHVfd3JpdGVmKHBkdSwgb3B0aW9uYWwsCisJCQkJCQkgInd3ZFFkZGRxc3Nzcz9zZGRkIiwKKwkJCQkJCSBzdGJ1Zi0+c2l6ZSwgc3RidWYtPnR5cGUsCisJCQkJCQkgc3RidWYtPmRldiwgJnN0YnVmLT5xaWQsCisJCQkJCQkgc3RidWYtPm1vZGUsIHN0YnVmLT5hdGltZSwKKwkJCQkJCSBzdGJ1Zi0+bXRpbWUsIHN0YnVmLT5sZW5ndGgsCisJCQkJCQkgc3RidWYtPm5hbWUsIHN0YnVmLT51aWQsCisJCQkJCQkgc3RidWYtPmdpZCwgc3RidWYtPm11aWQsCisJCQkJCQkgc3RidWYtPmV4dGVuc2lvbiwgc3RidWYtPm5fdWlkLAorCQkJCQkJIHN0YnVmLT5uX2dpZCwgc3RidWYtPm5fbXVpZCk7CisJCQl9IGJyZWFrOworCQljYXNlICdEJzp7CisJCQkJaW50MzJfdCBjb3VudCA9IHZhX2FyZyhhcCwgaW50MzJfdCk7CisJCQkJY29uc3Qgdm9pZCAqZGF0YSA9IHZhX2FyZyhhcCwgY29uc3Qgdm9pZCAqKTsKKworCQkJCWVycmNvZGUgPQorCQkJCSAgICBwOXBkdV93cml0ZWYocGR1LCBvcHRpb25hbCwgImQiLCBjb3VudCk7CisJCQkJaWYgKCFlcnJjb2RlICYmIHBkdV93cml0ZShwZHUsIGRhdGEsIGNvdW50KSkKKwkJCQkJZXJyY29kZSA9IC1FRkFVTFQ7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSAnVSc6eworCQkJCWludDMyX3QgY291bnQgPSB2YV9hcmcoYXAsIGludDMyX3QpOworCQkJCWNvbnN0IGNoYXIgX191c2VyICp1ZGF0YSA9CisJCQkJCQl2YV9hcmcoYXAsIGNvbnN0IHZvaWQgKik7CisJCQkJZXJyY29kZSA9CisJCQkJICAgIHA5cGR1X3dyaXRlZihwZHUsIG9wdGlvbmFsLCAiZCIsIGNvdW50KTsKKwkJCQlpZiAoIWVycmNvZGUgJiYgcGR1X3dyaXRlX3UocGR1LCB1ZGF0YSwgY291bnQpKQorCQkJCQllcnJjb2RlID0gLUVGQVVMVDsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlICdUJzp7CisJCQkJaW50MTZfdCBud25hbWUgPSB2YV9hcmcoYXAsIGludCk7CisJCQkJY29uc3QgY2hhciAqKnduYW1lcyA9IHZhX2FyZyhhcCwgY29uc3QgY2hhciAqKik7CisKKwkJCQllcnJjb2RlID0KKwkJCQkgICAgcDlwZHVfd3JpdGVmKHBkdSwgb3B0aW9uYWwsICJ3IiwgbnduYW1lKTsKKwkJCQlpZiAoIWVycmNvZGUpIHsKKwkJCQkJaW50IGk7CisKKwkJCQkJZm9yIChpID0gMDsgaSA8IG53bmFtZTsgaSsrKSB7CisJCQkJCQllcnJjb2RlID0KKwkJCQkJCSAgICBwOXBkdV93cml0ZWYocGR1LCBvcHRpb25hbCwKKwkJCQkJCQkJICJzIiwKKwkJCQkJCQkJIHduYW1lc1tpXSk7CisJCQkJCQlpZiAoZXJyY29kZSkKKwkJCQkJCQlicmVhazsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJCWJyZWFrOworCQljYXNlICdSJzp7CisJCQkJaW50MTZfdCBud3FpZCA9IHZhX2FyZyhhcCwgaW50KTsKKwkJCQlzdHJ1Y3QgcDlfcWlkICp3cWlkcyA9CisJCQkJICAgIHZhX2FyZyhhcCwgc3RydWN0IHA5X3FpZCAqKTsKKworCQkJCWVycmNvZGUgPQorCQkJCSAgICBwOXBkdV93cml0ZWYocGR1LCBvcHRpb25hbCwgInciLCBud3FpZCk7CisJCQkJaWYgKCFlcnJjb2RlKSB7CisJCQkJCWludCBpOworCisJCQkJCWZvciAoaSA9IDA7IGkgPCBud3FpZDsgaSsrKSB7CisJCQkJCQllcnJjb2RlID0KKwkJCQkJCSAgICBwOXBkdV93cml0ZWYocGR1LCBvcHRpb25hbCwKKwkJCQkJCQkJICJRIiwKKwkJCQkJCQkJICZ3cWlkc1tpXSk7CisJCQkJCQlpZiAoZXJyY29kZSkKKwkJCQkJCQlicmVhazsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJCWJyZWFrOworCQljYXNlICc/JzoKKwkJCWlmICghb3B0aW9uYWwpCisJCQkJcmV0dXJuIDA7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCUJVRygpOworCQkJYnJlYWs7CisJCX0KKworCQlpZiAoZXJyY29kZSkKKwkJCWJyZWFrOworCX0KKworCXJldHVybiBlcnJjb2RlOworfQorCitpbnQgcDlwZHVfcmVhZGYoc3RydWN0IHA5X2ZjYWxsICpwZHUsIGludCBvcHRpb25hbCwgY29uc3QgY2hhciAqZm10LCAuLi4pCit7CisJdmFfbGlzdCBhcDsKKwlpbnQgcmV0OworCisJdmFfc3RhcnQoYXAsIGZtdCk7CisJcmV0ID0gcDlwZHVfdnJlYWRmKHBkdSwgb3B0aW9uYWwsIGZtdCwgYXApOworCXZhX2VuZChhcCk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50CitwOXBkdV93cml0ZWYoc3RydWN0IHA5X2ZjYWxsICpwZHUsIGludCBvcHRpb25hbCwgY29uc3QgY2hhciAqZm10LCAuLi4pCit7CisJdmFfbGlzdCBhcDsKKwlpbnQgcmV0OworCisJdmFfc3RhcnQoYXAsIGZtdCk7CisJcmV0ID0gcDlwZHVfdndyaXRlZihwZHUsIG9wdGlvbmFsLCBmbXQsIGFwKTsKKwl2YV9lbmQoYXApOworCisJcmV0dXJuIHJldDsKK30KKworaW50IHA5c3RhdF9yZWFkKGNoYXIgKmJ1ZiwgaW50IGxlbiwgc3RydWN0IHA5X3dzdGF0ICpzdCwgaW50IGRvdHUpCit7CisJc3RydWN0IHA5X2ZjYWxsIGZha2VfcGR1OworCWludCByZXQ7CisKKwlmYWtlX3BkdS5zaXplID0gbGVuOworCWZha2VfcGR1LmNhcGFjaXR5ID0gbGVuOworCWZha2VfcGR1LnNkYXRhID0gYnVmOworCWZha2VfcGR1Lm9mZnNldCA9IDA7CisKKwlyZXQgPSBwOXBkdV9yZWFkZigmZmFrZV9wZHUsIGRvdHUsICJTIiwgc3QpOworCWlmIChyZXQpIHsKKwkJUDlfRFBSSU5USyhQOV9ERUJVR185UCwgIjw8PCBwOXN0YXRfcmVhZCBmYWlsZWQ6ICVkXG4iLCByZXQpOworCQlwOXBkdV9kdW1wKDEsICZmYWtlX3BkdSk7CisJfQorCisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0wocDlzdGF0X3JlYWQpOworCitpbnQgcDlwZHVfcHJlcGFyZShzdHJ1Y3QgcDlfZmNhbGwgKnBkdSwgaW50MTZfdCB0YWcsIGludDhfdCB0eXBlKQoreworCXJldHVybiBwOXBkdV93cml0ZWYocGR1LCAwLCAiZGJ3IiwgMCwgdHlwZSwgdGFnKTsKK30KKworaW50IHA5cGR1X2ZpbmFsaXplKHN0cnVjdCBwOV9mY2FsbCAqcGR1KQoreworCWludCBzaXplID0gcGR1LT5zaXplOworCWludCBlcnI7CisKKwlwZHUtPnNpemUgPSAwOworCWVyciA9IHA5cGR1X3dyaXRlZihwZHUsIDAsICJkIiwgc2l6ZSk7CisJcGR1LT5zaXplID0gc2l6ZTsKKworCWlmICgocDlfZGVidWdfbGV2ZWwgJiBQOV9ERUJVR19QS1QpID09IFA5X0RFQlVHX1BLVCkKKwkJcDlwZHVfZHVtcCgwLCBwZHUpOworCisJUDlfRFBSSU5USyhQOV9ERUJVR185UCwgIj4+PiBzaXplPSVkIHR5cGU6ICVkIHRhZzogJWRcbiIsIHBkdS0+c2l6ZSwKKwkJCQkJCQlwZHUtPmlkLCBwZHUtPnRhZyk7CisKKwlyZXR1cm4gZXJyOworfQorCit2b2lkIHA5cGR1X3Jlc2V0KHN0cnVjdCBwOV9mY2FsbCAqcGR1KQoreworCXBkdS0+b2Zmc2V0ID0gMDsKKwlwZHUtPnNpemUgPSAwOworfQpkaWZmIC0tZ2l0IGEvbmV0LzlwL3Byb3RvY29sLmggYi9uZXQvOXAvcHJvdG9jb2wuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jY2RlNDYyCi0tLSAvZGV2L251bGwKKysrIGIvbmV0LzlwL3Byb3RvY29sLmgKQEAgLTAsMCArMSwzNCBAQAorLyoKKyAqIG5ldC85cC9wcm90b2NvbC5oCisgKgorICogOVAgUHJvdG9jb2wgU3VwcG9ydCBDb2RlCisgKgorICogIENvcHlyaWdodCAoQykgMjAwOCBieSBFcmljIFZhbiBIZW5zYmVyZ2VuIDxlcmljdmhAZ21haWwuY29tPgorICoKKyAqICBCYXNlIG9uIGNvZGUgZnJvbSBBbnRob255IExpZ3VvcmkgPGFsaWd1b3JpQHVzLmlibS5jb20+CisgKiAgQ29weXJpZ2h0IChDKSAyMDA4IGJ5IElCTSwgQ29ycC4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMgorICogIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvOgorICogIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICogIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IKKyAqICBCb3N0b24sIE1BICAwMjExMS0xMzAxICBVU0EKKyAqCisgKi8KKworaW50CitwOXBkdV92d3JpdGVmKHN0cnVjdCBwOV9mY2FsbCAqcGR1LCBpbnQgb3B0aW9uYWwsIGNvbnN0IGNoYXIgKmZtdCwgdmFfbGlzdCBhcCk7CitpbnQgcDlwZHVfcmVhZGYoc3RydWN0IHA5X2ZjYWxsICpwZHUsIGludCBvcHRpb25hbCwgY29uc3QgY2hhciAqZm10LCAuLi4pOworaW50IHA5cGR1X3ByZXBhcmUoc3RydWN0IHA5X2ZjYWxsICpwZHUsIGludDE2X3QgdGFnLCBpbnQ4X3QgdHlwZSk7CitpbnQgcDlwZHVfZmluYWxpemUoc3RydWN0IHA5X2ZjYWxsICpwZHUpOwordm9pZCBwOXBkdV9kdW1wKGludCwgc3RydWN0IHA5X2ZjYWxsICopOwordm9pZCBwOXBkdV9yZXNldChzdHJ1Y3QgcDlfZmNhbGwgKnBkdSk7CmRpZmYgLS1naXQgYS9uZXQvOXAvdHJhbnNfZmQuYyBiL25ldC85cC90cmFuc19mZC5jCmluZGV4IGQ2NTJiYWYuLmJlNjVkODIgMTAwNjQ0Ci0tLSBhL25ldC85cC90cmFuc19mZC5jCisrKyBiL25ldC85cC90cmFuc19mZC5jCkBAIC0zOSwxMiArMzksMTEgQEAKICNpbmNsdWRlIDxsaW51eC9maWxlLmg+CiAjaW5jbHVkZSA8bGludXgvcGFyc2VyLmg+CiAjaW5jbHVkZSA8bmV0LzlwLzlwLmg+CisjaW5jbHVkZSA8bmV0LzlwL2NsaWVudC5oPgogI2luY2x1ZGUgPG5ldC85cC90cmFuc3BvcnQuaD4KIAogI2RlZmluZSBQOV9QT1JUIDU2NAogI2RlZmluZSBNQVhfU09DS19CVUYgKDY0KjEwMjQpCi0jZGVmaW5lIEVSUkVRRkxVU0gJMQotI2RlZmluZSBTQ0hFRF9USU1FT1VUCTEwCiAjZGVmaW5lIE1BWFBPTExXQUREUgkyCiAKIC8qKgpAQCAtNjEsNyArNjAsNiBAQAogCXUxNiBwb3J0OwogfTsKIAotCiAvKioKICAqIHN0cnVjdCBwOV90cmFuc19mZCAtIHRyYW5zcG9ydCBzdGF0ZQogICogQHJkOiByZWZlcmVuY2UgdG8gZmlsZSB0byByZWFkIGZyb20KQEAgLTg2LDcgKzg0LDcgQEAKIAlPcHRfcG9ydCwgT3B0X3JmZG5vLCBPcHRfd2Zkbm8sIE9wdF9lcnIsCiB9OwogCi1zdGF0aWMgbWF0Y2hfdGFibGVfdCB0b2tlbnMgPSB7CitzdGF0aWMgY29uc3QgbWF0Y2hfdGFibGVfdCB0b2tlbnMgPSB7CiAJe09wdF9wb3J0LCAicG9ydD0ldSJ9LAogCXtPcHRfcmZkbm8sICJyZmRubz0ldSJ9LAogCXtPcHRfd2Zkbm8sICJ3ZmRubz0ldSJ9LApAQCAtMTAwLDYwICs5OCwyMiBAQAogCVdwZW5kaW5nID0gOCwJCS8qIGNhbiB3cml0ZSAqLwogfTsKIAotZW51bSB7Ci0JTm9uZSwKLQlGbHVzaGluZywKLQlGbHVzaGVkLAotfTsKLQotc3RydWN0IHA5X3JlcTsKLXR5cGVkZWYgdm9pZCAoKnA5X2Nvbm5fcmVxX2NhbGxiYWNrKShzdHJ1Y3QgcDlfcmVxICpyZXEsIHZvaWQgKmEpOwotCi0vKioKLSAqIHN0cnVjdCBwOV9yZXEgLSBmZCBtdXggZW5jb2Rpbmcgb2YgYW4gcnBjIHRyYW5zYWN0aW9uCi0gKiBAbG9jazogcHJvdGVjdHMgcmVxX2xpc3QKLSAqIEB0YWc6IG51bWVyaWMgdGFnIGZvciBycGMgdHJhbnNhY3Rpb24KLSAqIEB0Y2FsbDogcmVxdWVzdCAmcDlfZmNhbGwgc3RydWN0dXJlCi0gKiBAcmNhbGw6IHJlc3BvbnNlICZwOV9mY2FsbCBzdHJ1Y3R1cmUKLSAqIEBlcnI6IGVycm9yIHN0YXRlCi0gKiBAY2I6IGNhbGxiYWNrIGZvciB3aGVuIHJlc3BvbnNlIGlzIHJlY2VpdmVkCi0gKiBAY2JhOiBhcmd1bWVudCB0byBwYXNzIHRvIGNhbGxiYWNrCi0gKiBAZmx1c2g6IGZsYWcgdG8gaW5kaWNhdGUgUlBDIGhhcyBiZWVuIGZsdXNoZWQKLSAqIEByZXFfbGlzdDogbGlzdCBsaW5rIGZvciBoaWdoZXIgbGV2ZWwgb2JqZWN0cyB0byBjaGFpbiByZXF1ZXN0cwotICoKLSAqLwotCi1zdHJ1Y3QgcDlfcmVxIHsKLQlzcGlubG9ja190IGxvY2s7Ci0JaW50IHRhZzsKLQlzdHJ1Y3QgcDlfZmNhbGwgKnRjYWxsOwotCXN0cnVjdCBwOV9mY2FsbCAqcmNhbGw7Ci0JaW50IGVycjsKLQlwOV9jb25uX3JlcV9jYWxsYmFjayBjYjsKLQl2b2lkICpjYmE7Ci0JaW50IGZsdXNoOwotCXN0cnVjdCBsaXN0X2hlYWQgcmVxX2xpc3Q7Ci19OwotCi1zdHJ1Y3QgcDlfbXV4X3BvbGxfdGFzayB7Ci0Jc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrOwotCXN0cnVjdCBsaXN0X2hlYWQgbXV4X2xpc3Q7Ci0JaW50IG11eG51bTsKK3N0cnVjdCBwOV9wb2xsX3dhaXQgeworCXN0cnVjdCBwOV9jb25uICpjb25uOworCXdhaXRfcXVldWVfdCB3YWl0OworCXdhaXRfcXVldWVfaGVhZF90ICp3YWl0X2FkZHI7CiB9OwogCiAvKioKICAqIHN0cnVjdCBwOV9jb25uIC0gZmQgbXV4IGNvbm5lY3Rpb24gc3RhdGUgaW5mb3JtYXRpb24KLSAqIEBsb2NrOiBwcm90ZWN0cyBtdXhfbGlzdCAoPykKICAqIEBtdXhfbGlzdDogbGlzdCBsaW5rIGZvciBtdXggdG8gbWFuYWdlIG11bHRpcGxlIGNvbm5lY3Rpb25zICg/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+d3Bvcyk7CisJUDlfRFBSSU5USyhQOV9ERUJVR19UUkFOUywgIm11eCAlcCBzZW50ICVkIGJ5dGVzXG4iLCBtLCBlcnIpOwogCWlmIChlcnIgPT0gLUVBR0FJTikgewogCQljbGVhcl9iaXQoV3dvcmtzY2hlZCwgJm0tPndzY2hlZCk7CiAJCXJldHVybjsKQEAgLTYzOCwxMCArNDg3LDEwIEBACiAJCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoV3BlbmRpbmcsICZtLT53c2NoZWQpKQogCQkJbiA9IFBPTExPVVQ7CiAJCWVsc2UKLQkJCW4gPSBwOV9mZF9wb2xsKG0tPnRyYW5zLCBOVUxMKTsKKwkJCW4gPSBwOV9mZF9wb2xsKG0tPmNsaWVudCwgTlVMTCk7CiAKIAkJaWYgKG4gJiBQT0xMT1VUKSB7Ci0JCQlQOV9EUFJJTlRLKFA5X0RFQlVHX01VWCwgInNjaGVkdWxlIHdyaXRlIHdvcmsgJXBcbiIsIG0pOworCQkJUDlfRFBSSU5USyhQOV9ERUJVR19UUkFOUywgInNjaGVkIHdyaXRlIHdvcmsgJXBcbiIsIG0pOwogCQkJcXVldWVfd29yayhwOV9tdXhfd3EsICZtLT53cSk7CiAJCX0gZWxzZQogCQkJY2xlYXJfYml0KFd3b3Jrc2NoZWQsICZtLT53c2NoZWQpOwpAQCAtNjU1LDUwNCArNTA0LDE5NyBAQAogCWNsZWFyX2JpdChXd29ya3NjaGVkLCAmbS0+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+ZXJyKTsKLQotCQkJZXJyID0gLUVSRVNUQVJUU1lTOwotCQl9Ci0JCXNpZ3BlbmRpbmcgPSAxOwotCX0KLQotCWlmIChzaWdwZW5kaW5nKSB7Ci0JCXNwaW5fbG9ja19pcnFzYXZlKCZjdXJyZW50LT5zaWdoYW5kLT5zaWdsb2NrLCBmbGFncyk7Ci0JCXJlY2FsY19zaWdwZW5kaW5nKCk7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmN1cnJlbnQtPnNpZ2hhbmQtPnNpZ2xvY2ssIGZsYWdzKTsKLQl9Ci0KLQlpZiAocmMpCi0JCSpyYyA9IHIucmNhbGw7Ci0JZWxzZQotCQlrZnJlZShyLnJjYWxsKTsKLQotCXA5X211eF9mcmVlX3JlcXVlc3QobSwgcmVxKTsKLQlpZiAoZXJyID4gMCkKLQkJZXJyID0gLUVJTzsKLQotCXJldHVybiBlcnI7Ci19Ci0KLSNpZmRlZiBQOV9OT05CTE9DSwotLyoqCi0gKiBwOV9jb25uX3JwY25iIC0gc2VuZHMgOVAgcmVxdWVzdCB3aXRob3V0IHdhaXRpbmcgZm9yIHJlc3BvbnNlLgotICogQG06IG11eCBkYXRhCi0gKiBAdGM6IHJlcXVlc3QgdG8gYmUgc2VudAotICogQGNiOiBjYWxsYmFjayBmdW5jdGlvbiB0byBiZSBjYWxsZWQgd2hlbiByZXNwb25zZSBhcnJpdmVzCi0gKiBAYTogdmFsdWUgdG8gcGFzcyB0byB0aGUgY2FsbGJhY2sgZnVuY3Rpb24KLSAqCi0gKi8KLQotaW50IHA5X2Nvbm5fcnBjbmIoc3RydWN0IHA5X2Nvbm4gKm0sIHN0cnVjdCBwOV9mY2FsbCAqdGMsCi0JCSAgIHA5X2Nvbm5fcmVxX2NhbGxiYWNrIGNiLCB2b2lkICphKQotewotCWludCBlcnI7Ci0Jc3RydWN0IHA5X3JlcSAqcmVxOwotCi0JcmVxID0gcDlfc2VuZF9yZXF1ZXN0KG0sIHRjLCBjYiwgYSk7Ci0JaWYgKElTX0VSUihyZXEpKSB7Ci0JCWVyciA9IFBUUl9FUlIocmVxKTsKLQkJUDlfRFBSSU5USyhQOV9ERUJVR19NVVgsICJlcnJvciAlZFxuIiwgZXJyKTsKLQkJcmV0dXJuIFBUUl9FUlIocmVxKTsKLQl9Ci0KLQlQOV9EUFJJTlRLKFA5X0RFQlVHX01VWCwgIm11eCAlcCB0YyAlcCB0YWcgJWRcbiIsIG0sIHRjLCByZXEtPnRhZyk7CiAJcmV0dXJuIDA7CiB9Ci0jZW5kaWYgLyogUDlfTk9OQkxPQ0sgKi8KIAotLyoqCi0gKiBwOV9jb25uX2NhbmNlbCAtIGNhbmNlbCBhbGwgcGVuZGluZyByZXF1ZXN0cyB3aXRoIGVycm9yCi0gKiBAbTogbXV4IGRhdGEKLSAqIEBlcnI6IGVycm9yIGNvZGUKLSAqCi0gKi8KLQotdm9pZCBwOV9jb25uX2NhbmNlbChzdHJ1Y3QgcDlfY29ubiAqbSwgaW50IGVycikKK3N0YXRpYyBpbnQgcDlfZmRfY2FuY2VsKHN0cnVjdCBwOV9jbGllbnQgKmNsaWVudCwgc3RydWN0IHA5X3JlcV90ICpyZXEpCiB7Ci0Jc3RydWN0IHA5X3JlcSAqcmVxLCAqcnRtcDsKLQlMSVNUX0hFQUQoY2FuY2VsX2xpc3QpOworCXN0cnVjdCBwOV90cmFuc19mZCAqdHMgPSBjbGllbnQtPnRyYW5zOworCXN0cnVjdCBwOV9jb25uICptID0gdHMtPmNvbm47CisJaW50IHJldCA9IDE7CiAKLQlQOV9EUFJJTlRLKFA5X0RFQlVHX0VSUk9SLCAibXV4ICVwIGVyciAlZFxuIiwgbSwgZXJyKTsKLQltLT5lcnIgPSBlcnI7Ci0Jc3Bpbl9sb2NrKCZtLT5sb2NrKTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocmVxLCBydG1wLCAmbS0+cmVxX2xpc3QsIHJlcV9saXN0KSB7Ci0JCWxpc3RfbW92ZSgmcmVxLT5yZXFfbGlzdCwgJmNhbmNlbF9saXN0KTsKLQl9Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHJlcSwgcnRtcCwgJm0tPnVuc2VudF9yZXFfbGlzdCwgcmVxX2xpc3QpIHsKLQkJbGlzdF9tb3ZlKCZyZXEtPnJlcV9saXN0LCAmY2FuY2VsX2xpc3QpOwotCX0KLQlzcGluX3VubG9jaygmbS0+bG9jayk7CisJUDlfRFBSSU5USyhQOV9ERUJVR19UUkFOUywgIm11eCAlcCByZXEgJXBcbiIsIG0sIHJlcSk7CiAKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocmVxLCBydG1wLCAmY2FuY2VsX2xpc3QsIHJlcV9saXN0KSB7Ci0JCWxpc3RfZGVsKCZyZXEtPnJlcV9saXN0KTsKLQkJaWYgKCFyZXEtPmVycikKLQkJCXJlcS0+ZXJyID0gZXJyOworCXNwaW5fbG9jaygmY2xpZW50LT5sb2NrKTsKKwlsaXN0X2RlbCgmcmVxLT5yZXFfbGlzdCk7CiAKLQkJaWYgKHJlcS0+Y2IpCi0JCQkoKnJlcS0+Y2IpIChyZXEsIHJlcS0+Y2JhKTsKLQkJZWxzZQotCQkJa2ZyZWUocmVxLT5yY2FsbCk7CisJaWYgKHJlcS0+c3RhdHVzID09IFJFUV9TVEFUVVNfVU5TRU5UKSB7CisJCXJlcS0+c3RhdHVzID0gUkVRX1NUQVRVU19GTFNIRDsKKwkJcmV0ID0gMDsKIAl9CisKKwlzcGluX3VubG9jaygmY2xpZW50LT5sb2NrKTsKKworCXJldHVybiByZXQ7CiB9CiAKIC8qKgpAQCAtMTIxNiw3ICs3NTgsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHA5X2ZkX29wZW4oc3RydWN0IHA5X3RyYW5zICp0cmFucywgaW50IHJmZCwgaW50IHdmZCkKK3N0YXRpYyBpbnQgcDlfZmRfb3BlbihzdHJ1Y3QgcDlfY2xpZW50ICpjbGllbnQsIGludCByZmQsIGludCB3ZmQpCiB7CiAJc3RydWN0IHA5X3RyYW5zX2ZkICp0cyA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBwOV90cmFuc19mZCksCiAJCQkJCSAgIEdGUF9LRVJORUwpOwpAQCAtMTIzNCwxMyArNzc2LDEzIEBACiAJCXJldHVybiAtRUlPOwogCX0KIAotCXRyYW5zLT5wcml2ID0gdHM7Ci0JdHJhbnMtPnN0YXR1cyA9IENvbm5lY3RlZDsKKwljbGllbnQtPnRyYW5zID0gdHM7CisJY2xpZW50LT5zdGF0dXMgPSBDb25uZWN0ZWQ7CiAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBwOV9zb2NrZXRfb3BlbihzdHJ1Y3QgcDlfdHJhbnMgKnRyYW5zLCBzdHJ1Y3Qgc29ja2V0ICpjc29ja2V0KQorc3RhdGljIGludCBwOV9zb2NrZXRfb3BlbihzdHJ1Y3QgcDlfY2xpZW50ICpjbGllbnQsIHN0cnVjdCBzb2NrZXQgKmNzb2NrZXQpCiB7CiAJaW50IGZkLCByZXQ7CiAKQEAgLTEyNTEsMTM3ICs3OTMsNjUgQEAKIAkJcmV0dXJuIGZkOwogCX0KIAotCXJldCA9IHA5X2ZkX29wZW4odHJhbnMsIGZkLCBmZCk7CisJcmV0ID0gcDlfZmRfb3BlbihjbGllbnQsIGZkLCBmZCk7CiAJaWYgKHJldCA8IDApIHsKIAkJUDlfRVBSSU5USyhLRVJOX0VSUiwgInA5X3NvY2tldF9vcGVuOiBmYWlsZWQgdG8gb3BlbiBmZFxuIik7CiAJCXNvY2tmZF9wdXQoY3NvY2tldCk7CiAJCXJldHVybiByZXQ7CiAJfQogCi0JKChzdHJ1Y3QgcDlfdHJhbnNfZmQgKil0cmFucy0+cHJpdiktPnJkLT5mX2ZsYWdzIHw9IE9fTk9OQkxPQ0s7CisJKChzdHJ1Y3QgcDlfdHJhbnNfZmQgKiljbGllbnQtPnRyYW5zKS0+cmQtPmZfZmxhZ3MgfD0gT19OT05CTE9DSzsKIAogCXJldHVybiAwOwogfQogCiAvKioKLSAqIHA5X2ZkX3JlYWQtIHJlYWQgZnJvbSBhIGZkCi0gKiBAdHJhbnM6IHRyYW5zcG9ydCBpbnN0YW5jZSBzdGF0ZQotICogQHY6IGJ1ZmZlciB0byByZWNlaXZlIGRhdGEgaW50bwotICogQGxlbjogc2l6ZSBvZiByZWNlaXZlIGJ1ZmZlcgorICogcDlfbXV4X2Rlc3Ryb3kgLSBjYW5jZWxzIGFsbCBwZW5kaW5nIHJlcXVlc3RzIGFuZCBmcmVlcyBtdXggcmVzb3VyY2VzCisgKiBAbTogbXV4IHRvIGRlc3Ryb3kKICAqCiAgKi8KIAotc3RhdGljIGludCBwOV9mZF9yZWFkKHN0cnVjdCBwOV90cmFucyAqdHJhbnMsIHZvaWQgKnYsIGludCBsZW4pCitzdGF0aWMgdm9pZCBwOV9jb25uX2Rlc3Ryb3koc3RydWN0IHA5X2Nvbm4gKm0pCiB7Ci0JaW50IHJldDsKLQlzdHJ1Y3QgcDlfdHJhbnNfZmQgKnRzID0gTlVMTDsKKwlQOV9EUFJJTlRLKFA5X0RFQlVHX1RSQU5TLCAibXV4ICVwIHByZXYgJXAgbmV4dCAlcFxuIiwgbSwKKwkJbS0+bXV4X2xpc3QucHJldiwgbS0+bXV4X2xpc3QubmV4dCk7CiAKLQlpZiAodHJhbnMgJiYgdHJhbnMtPnN0YXR1cyAhPSBEaXNjb25uZWN0ZWQpCi0JCXRzID0gdHJhbnMtPnByaXY7CisJcDlfbXV4X3BvbGxfc3RvcChtKTsKKwljYW5jZWxfd29ya19zeW5jKCZtLT5ycSk7CisJY2FuY2VsX3dvcmtfc3luYygmbS0+d3EpOwogCi0JaWYgKCF0cykKLQkJcmV0dXJuIC1FUkVNT1RFSU87CisJcDlfY29ubl9jYW5jZWwobSwgLUVDT05OUkVTRVQpOwogCi0JaWYgKCEodHMtPnJkLT5mX2ZsYWdzICYgT19OT05CTE9DSykpCi0JCVA5X0RQUklOVEsoUDlfREVCVUdfRVJST1IsICJibG9ja2luZyByZWFkIC4uLlxuIik7Ci0KLQlyZXQgPSBrZXJuZWxfcmVhZCh0cy0+cmQsIHRzLT5yZC0+Zl9wb3MsIHYsIGxlbik7Ci0JaWYgKHJldCA8PSAwICYmIHJldCAhPSAtRVJFU1RBUlRTWVMgJiYgcmV0ICE9IC1FQUdBSU4pCi0JCXRyYW5zLT5zdGF0dXMgPSBEaXNjb25uZWN0ZWQ7Ci0JcmV0dXJuIHJldDsKKwltLT5jbGllbnQgPSBOVUxMOworCWtmcmVlKG0pOwogfQogCiAvKioKLSAqIHA5X2ZkX3dyaXRlIC0gd3JpdGUgdG8gYSBzb2NrZXQKLSAqIEB0cmFuczogdHJhbnNwb3J0IGluc3RhbmNlIHN0YXRlCi0gKiBAdjogYnVmZmVyIHRvIHNlbmQgZGF0YSBmcm9tCi0gKiBAbGVuOiBzaXplIG9mIHNlbmQgYnVmZmVyCisgKiBwOV9mZF9jbG9zZSAtIHNodXRkb3duIGZpbGUgZGVzY3JpcHRvciB0cmFuc3BvcnQKKyAqIEBjbGllbnQ6IGNsaWVudCBpbnN0YW5jZQogICoKICAqLwogCi1zdGF0aWMgaW50IHA5X2ZkX3dyaXRlKHN0cnVjdCBwOV90cmFucyAqdHJhbnMsIHZvaWQgKnYsIGludCBsZW4pCi17Ci0JaW50IHJldDsKLQltbV9zZWdtZW50X3Qgb2xkZnM7Ci0Jc3RydWN0IHA5X3RyYW5zX2ZkICp0cyA9IE5VTEw7Ci0KLQlpZiAodHJhbnMgJiYgdHJhbnMtPnN0YXR1cyAhPSBEaXNjb25uZWN0ZWQpCi0JCXRzID0gdHJhbnMtPnByaXY7Ci0KLQlpZiAoIXRzKQotCQlyZXR1cm4gLUVSRU1PVEVJTzsKLQotCWlmICghKHRzLT53ci0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spKQotCQlQOV9EUFJJTlRLKFA5X0RFQlVHX0VSUk9SLCAiYmxvY2tpbmcgd3JpdGUgLi4uXG4iKTsKLQotCW9sZGZzID0gZ2V0X2ZzKCk7Ci0Jc2V0X2ZzKGdldF9kcygpKTsKLQkvKiBUaGUgY2FzdCB0byBhIHVzZXIgcG9pbnRlciBpcyB2YWxpZCBkdWUgdG8gdGhlIHNldF9mcygpICovCi0JcmV0ID0gdmZzX3dyaXRlKHRzLT53ciwgKHZvaWQgX191c2VyICopdiwgbGVuLCAmdHMtPndyLT5mX3Bvcyk7Ci0Jc2V0X2ZzKG9sZGZzKTsKLQotCWlmIChyZXQgPD0gMCAmJiByZXQgIT0gLUVSRVNUQVJUU1lTICYmIHJldCAhPSAtRUFHQUlOKQotCQl0cmFucy0+c3RhdHVzID0gRGlzY29ubmVjdGVkOwotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyB1bnNpZ25lZCBpbnQKLXA5X2ZkX3BvbGwoc3RydWN0IHA5X3RyYW5zICp0cmFucywgc3RydWN0IHBvbGxfdGFibGVfc3RydWN0ICpwdCkKLXsKLQlpbnQgcmV0LCBuOwotCXN0cnVjdCBwOV90cmFuc19mZCAqdHMgPSBOVUxMOwotCi0JaWYgKHRyYW5zICYmIHRyYW5zLT5zdGF0dXMgPT0gQ29ubmVjdGVkKQotCQl0cyA9IHRyYW5zLT5wcml2OwotCi0JaWYgKCF0cykKLQkJcmV0dXJuIC1FUkVNT1RFSU87Ci0KLQlpZiAoIXRzLT5yZC0+Zl9vcCB8fCAhdHMtPnJkLT5mX29wLT5wb2xsKQotCQlyZXR1cm4gLUVJTzsKLQotCWlmICghdHMtPndyLT5mX29wIHx8ICF0cy0+d3ItPmZfb3AtPnBvbGwpCi0JCXJldHVybiAtRUlPOwotCi0JcmV0ID0gdHMtPnJkLT5mX29wLT5wb2xsKHRzLT5yZCwgcHQpOwotCWlmIChyZXQgPCAwKQotCQlyZXR1cm4gcmV0OwotCi0JaWYgKHRzLT5yZCAhPSB0cy0+d3IpIHsKLQkJbiA9IHRzLT53ci0+Zl9vcC0+cG9sbCh0cy0+d3IsIHB0KTsKLQkJaWYgKG4gPCAwKQotCQkJcmV0dXJuIG47Ci0JCXJldCA9IChyZXQgJiB+UE9MTE9VVCkgfCAobiAmIH5QT0xMSU4pOwotCX0KLQotCXJldHVybiByZXQ7Ci19Ci0KLS8qKgotICogcDlfZmRfY2xvc2UgLSBzaHV0ZG93biBzb2NrZXQKLSAqIEB0cmFuczogcHJpdmF0ZSBzb2NrZXQgc3RydWN0dXJlCi0gKgotICovCi0KLXN0YXRpYyB2b2lkIHA5X2ZkX2Nsb3NlKHN0cnVjdCBwOV90cmFucyAqdHJhbnMpCitzdGF0aWMgdm9pZCBwOV9mZF9jbG9zZShzdHJ1Y3QgcDlfY2xpZW50ICpjbGllbnQpCiB7CiAJc3RydWN0IHA5X3RyYW5zX2ZkICp0czsKIAotCWlmICghdHJhbnMpCisJaWYgKCFjbGllbnQpCiAJCXJldHVybjsKIAotCXRzID0geGNoZygmdHJhbnMtPnByaXYsIE5VTEwpOwotCisJdHMgPSBjbGllbnQtPnRyYW5zOwogCWlmICghdHMpCiAJCXJldHVybjsKIAorCWNsaWVudC0+c3RhdHVzID0gRGlzY29ubmVjdGVkOworCiAJcDlfY29ubl9kZXN0cm95KHRzLT5jb25uKTsKIAotCXRyYW5zLT5zdGF0dXMgPSBEaXNjb25uZWN0ZWQ7CiAJaWYgKHRzLT5yZCkKIAkJZnB1dCh0cy0+cmQpOwogCWlmICh0cy0+d3IpCiAJCWZwdXQodHMtPndyKTsKKwogCWtmcmVlKHRzKTsKIH0KIApAQCAtMTQwMiwzMSArODcyLDIzIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgcDlfdHJhbnMgKgotcDlfdHJhbnNfY3JlYXRlX3RjcChjb25zdCBjaGFyICphZGRyLCBjaGFyICphcmdzLCBpbnQgbXNpemUsIHVuc2lnbmVkIGNoYXIgZG90dSkKK3N0YXRpYyBpbnQKK3A5X2ZkX2NyZWF0ZV90Y3Aoc3RydWN0IHA5X2NsaWVudCAqY2xpZW50LCBjb25zdCBjaGFyICphZGRyLCBjaGFyICphcmdzKQogewogCWludCBlcnI7Ci0Jc3RydWN0IHA5X3RyYW5zICp0cmFuczsKIAlzdHJ1Y3Qgc29ja2V0ICpjc29ja2V0OwogCXN0cnVjdCBzb2NrYWRkcl9pbiBzaW5fc2VydmVyOwogCXN0cnVjdCBwOV9mZF9vcHRzIG9wdHM7Ci0Jc3RydWN0IHA5X3RyYW5zX2ZkICpwOworCXN0cnVjdCBwOV90cmFuc19mZCAqcCA9IE5VTEw7IC8qIHRoaXMgZ2V0cyBhbGxvY2F0ZWQgaW4gcDlfZmRfb3BlbiAqLwogCiAJZXJyID0gcGFyc2Vfb3B0cyhhcmdzLCAmb3B0cyk7CiAJaWYgKGVyciA8IDApCi0JCXJldHVybiBFUlJfUFRSKGVycik7CisJCXJldHVybiBlcnI7CiAKIAlpZiAodmFsaWRfaXBhZGRyNChhZGRyKSA8IDApCi0JCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOworCQlyZXR1cm4gLUVJTlZBTDsKIAogCWNzb2NrZXQgPSBOVUxMOwotCXRyYW5zID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHA5X3RyYW5zKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCF0cmFucykKLQkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7Ci0JdHJhbnMtPm1zaXplID0gbXNpemU7Ci0JdHJhbnMtPmV4dGVuZGVkID0gZG90dTsKLQl0cmFucy0+cnBjID0gcDlfZmRfcnBjOwotCXRyYW5zLT5jbG9zZSA9IHA5X2ZkX2Nsb3NlOwogCiAJc2luX3NlcnZlci5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKIAlzaW5fc2VydmVyLnNpbl9hZGRyLnNfYWRkciA9IGluX2F0b24oYWRkcik7CkBAIC0xNDQ5LDQ1ICs5MTEsMzggQEAKIAkJZ290byBlcnJvcjsKIAl9CiAKLQllcnIgPSBwOV9zb2NrZXRfb3Blbih0cmFucywgY3NvY2tldCk7CisJZXJyID0gcDlfc29ja2V0X29wZW4oY2xpZW50LCBjc29ja2V0KTsKIAlpZiAoZXJyIDwgMCkKIAkJZ290byBlcnJvcjsKIAotCXAgPSAoc3RydWN0IHA5X3RyYW5zX2ZkICopIHRyYW5zLT5wcml2OwotCXAtPmNvbm4gPSBwOV9jb25uX2NyZWF0ZSh0cmFucyk7CisJcCA9IChzdHJ1Y3QgcDlfdHJhbnNfZmQgKikgY2xpZW50LT50cmFuczsKKwlwLT5jb25uID0gcDlfY29ubl9jcmVhdGUoY2xpZW50KTsKIAlpZiAoSVNfRVJSKHAtPmNvbm4pKSB7CiAJCWVyciA9IFBUUl9FUlIocC0+Y29ubik7CiAJCXAtPmNvbm4gPSBOVUxMOwogCQlnb3RvIGVycm9yOwogCX0KIAotCXJldHVybiB0cmFuczsKKwlyZXR1cm4gMDsKIAogZXJyb3I6CiAJaWYgKGNzb2NrZXQpCiAJCXNvY2tfcmVsZWFzZShjc29ja2V0KTsKIAotCWtmcmVlKHRyYW5zKTsKLQlyZXR1cm4gRVJSX1BUUihlcnIpOworCWtmcmVlKHApOworCisJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIHN0cnVjdCBwOV90cmFucyAqCi1wOV90cmFuc19jcmVhdGVfdW5peChjb25zdCBjaGFyICphZGRyLCBjaGFyICphcmdzLCBpbnQgbXNpemUsCi0JCQkJCQkJdW5zaWduZWQgY2hhciBkb3R1KQorc3RhdGljIGludAorcDlfZmRfY3JlYXRlX3VuaXgoc3RydWN0IHA5X2NsaWVudCAqY2xpZW50LCBjb25zdCBjaGFyICphZGRyLCBjaGFyICphcmdzKQogewogCWludCBlcnI7CiAJc3RydWN0IHNvY2tldCAqY3NvY2tldDsKIAlzdHJ1Y3Qgc29ja2FkZHJfdW4gc3VuX3NlcnZlcjsKLQlzdHJ1Y3QgcDlfdHJhbnMgKnRyYW5zOwotCXN0cnVjdCBwOV90cmFuc19mZCAqcDsKKwlzdHJ1Y3QgcDlfdHJhbnNfZmQgKnAgPSBOVUxMOyAvKiB0aGlzIGdldHMgYWxsb2NhdGVkIGluIHA5X2ZkX29wZW4gKi8KIAogCWNzb2NrZXQgPSBOVUxMOwotCXRyYW5zID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHA5X3RyYW5zKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCF0cmFucykKLQkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7Ci0KLQl0cmFucy0+cnBjID0gcDlfZmRfcnBjOwotCXRyYW5zLT5jbG9zZSA9IHA5X2ZkX2Nsb3NlOwogCiAJaWYgKHN0cmxlbihhZGRyKSA+IFVOSVhfUEFUSF9NQVgpIHsKIAkJUDlfRVBSSU5USyhLRVJOX0VSUiwgInA5X3RyYW5zX3VuaXg6IGFkZHJlc3MgdG9vIGxvbmc6ICVzXG4iLApAQCAtMTUwOCw3OSArOTYzLDY5IEBACiAJCWdvdG8gZXJyb3I7CiAJfQogCi0JZXJyID0gcDlfc29ja2V0X29wZW4odHJhbnMsIGNzb2NrZXQpOworCWVyciA9IHA5X3NvY2tldF9vcGVuKGNsaWVudCwgY3NvY2tldCk7CiAJaWYgKGVyciA8IDApCiAJCWdvdG8gZXJyb3I7CiAKLQl0cmFucy0+bXNpemUgPSBtc2l6ZTsKLQl0cmFucy0+ZXh0ZW5kZWQgPSBkb3R1OwotCXAgPSAoc3RydWN0IHA5X3RyYW5zX2ZkICopIHRyYW5zLT5wcml2OwotCXAtPmNvbm4gPSBwOV9jb25uX2NyZWF0ZSh0cmFucyk7CisJcCA9IChzdHJ1Y3QgcDlfdHJhbnNfZmQgKikgY2xpZW50LT50cmFuczsKKwlwLT5jb25uID0gcDlfY29ubl9jcmVhdGUoY2xpZW50KTsKIAlpZiAoSVNfRVJSKHAtPmNvbm4pKSB7CiAJCWVyciA9IFBUUl9FUlIocC0+Y29ubik7CiAJCXAtPmNvbm4gPSBOVUxMOwogCQlnb3RvIGVycm9yOwogCX0KIAotCXJldHVybiB0cmFuczsKKwlyZXR1cm4gMDsKIAogZXJyb3I6CiAJaWYgKGNzb2NrZXQpCiAJCXNvY2tfcmVsZWFzZShjc29ja2V0KTsKIAotCWtmcmVlKHRyYW5zKTsKLQlyZXR1cm4gRVJSX1BUUihlcnIpOworCWtmcmVlKHApOworCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgcDlfdHJhbnMgKgotcDlfdHJhbnNfY3JlYXRlX2ZkKGNvbnN0IGNoYXIgKm5hbWUsIGNoYXIgKmFyZ3MsIGludCBtc2l6ZSwKLQkJCQkJCQl1bnNpZ25lZCBjaGFyIGV4dGVuZGVkKQorc3RhdGljIGludAorcDlfZmRfY3JlYXRlKHN0cnVjdCBwOV9jbGllbnQgKmNsaWVudCwgY29uc3QgY2hhciAqYWRkciwgY2hhciAqYXJncykKIHsKIAlpbnQgZXJyOwotCXN0cnVjdCBwOV90cmFucyAqdHJhbnM7CiAJc3RydWN0IHA5X2ZkX29wdHMgb3B0czsKLQlzdHJ1Y3QgcDlfdHJhbnNfZmQgKnA7CisJc3RydWN0IHA5X3RyYW5zX2ZkICpwID0gTlVMTDsgLyogdGhpcyBnZXQgYWxsb2NhdGVkIGluIHA5X2ZkX29wZW4gKi8KIAogCXBhcnNlX29wdHMoYXJncywgJm9wdHMpOwogCiAJaWYgKG9wdHMucmZkID09IH4wIHx8IG9wdHMud2ZkID09IH4wKSB7CiAJCXByaW50ayhLRVJOX0VSUiAidjlmczogSW5zdWZmaWNpZW50IG9wdGlvbnMgZm9yIHByb3RvPWZkXG4iKTsKLQkJcmV0dXJuIEVSUl9QVFIoLUVOT1BST1RPT1BUKTsKKwkJcmV0dXJuIC1FTk9QUk9UT09QVDsKIAl9CiAKLQl0cmFucyA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBwOV90cmFucyksIEdGUF9LRVJORUwpOwotCWlmICghdHJhbnMpCi0JCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwotCi0JdHJhbnMtPnJwYyA9IHA5X2ZkX3JwYzsKLQl0cmFucy0+Y2xvc2UgPSBwOV9mZF9jbG9zZTsKLQotCWVyciA9IHA5X2ZkX29wZW4odHJhbnMsIG9wdHMucmZkLCBvcHRzLndmZCk7CisJZXJyID0gcDlfZmRfb3BlbihjbGllbnQsIG9wdHMucmZkLCBvcHRzLndmZCk7CiAJaWYgKGVyciA8IDApCiAJCWdvdG8gZXJyb3I7CiAKLQl0cmFucy0+bXNpemUgPSBtc2l6ZTsKLQl0cmFucy0+ZXh0ZW5kZWQgPSBleHRlbmRlZDsKLQlwID0gKHN0cnVjdCBwOV90cmFuc19mZCAqKSB0cmFucy0+cHJpdjsKLQlwLT5jb25uID0gcDlfY29ubl9jcmVhdGUodHJhbnMpOworCXAgPSAoc3RydWN0IHA5X3RyYW5zX2ZkICopIGNsaWVudC0+dHJhbnM7CisJcC0+Y29ubiA9IHA5X2Nvbm5fY3JlYXRlKGNsaWVudCk7CiAJaWYgKElTX0VSUihwLT5jb25uKSkgewogCQllcnIgPSBQVFJfRVJSKHAtPmNvbm4pOwogCQlwLT5jb25uID0gTlVMTDsKIAkJZ290byBlcnJvcjsKIAl9CiAKLQlyZXR1cm4gdHJhbnM7CisJcmV0dXJuIDA7CiAKIGVycm9yOgotCWtmcmVlKHRyYW5zKTsKLQlyZXR1cm4gRVJSX1BUUihlcnIpOworCWtmcmVlKHApOworCXJldHVybiBlcnI7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgcDlfdHJhbnNfbW9kdWxlIHA5X3RjcF90cmFucyA9IHsKIAkubmFtZSA9ICJ0Y3AiLAogCS5tYXhzaXplID0gTUFYX1NPQ0tfQlVGLAogCS5kZWYgPSAxLAotCS5jcmVhdGUgPSBwOV90cmFuc19jcmVhdGVfdGNwLAorCS5jcmVhdGUgPSBwOV9mZF9jcmVhdGVfdGNwLAorCS5jbG9zZSA9IHA5X2ZkX2Nsb3NlLAorCS5yZXF1ZXN0ID0gcDlfZmRfcmVxdWVzdCwKKwkuY2FuY2VsID0gcDlfZmRfY2FuY2VsLAogCS5vd25lciA9IFRISVNfTU9EVUxFLAogfTsKIApAQCAtMTU4OCw3ICsxMDMzLDEwIEBACiAJLm5hbWUgPSAidW5peCIsCiAJLm1heHNpemUgPSBNQVhfU09DS19CVUYsCiAJLmRlZiA9IDAsCi0JLmNyZWF0ZSA9IHA5X3RyYW5zX2NyZWF0ZV91bml4LAorCS5jcmVhdGUgPSBwOV9mZF9jcmVhdGVfdW5peCwKKwkuY2xvc2UgPSBwOV9mZF9jbG9zZSwKKwkucmVxdWVzdCA9IHA5X2ZkX3JlcXVlc3QsCisJLmNhbmNlbCA9IHA5X2ZkX2NhbmNlbCwKIAkub3duZXIgPSBUSElTX01PRFVMRSwKIH07CiAKQEAgLTE1OTYsMjMgKzEwNDQsNzEgQEAKIAkubmFtZSA9ICJmZCIsCiAJLm1heHNpemUgPSBNQVhfU09DS19CVUYsCiAJLmRlZiA9IDAsCi0JLmNyZWF0ZSA9IHA5X3RyYW5zX2NyZWF0ZV9mZCwKKwkuY3JlYXRlID0gcDlfZmRfY3JlYXRlLAorCS5jbG9zZSA9IHA5X2ZkX2Nsb3NlLAorCS5yZXF1ZXN0ID0gcDlfZmRfcmVxdWVzdCwKKwkuY2FuY2VsID0gcDlfZmRfY2FuY2VsLAogCS5vd25lciA9IFRISVNfTU9EVUxFLAogfTsKIAorLyoqCisgKiBwOV9wb2xsX3Byb2MgLSBwb2xsIHdvcmtlciB0aHJlYWQKKyAqIEBhOiB0aHJlYWQgc3RhdGUgYW5kIGFyZ3VtZW50cworICoKKyAqIHBvbGxzIGFsbCB2OWZzIHRyYW5zcG9ydHMgZm9yIG5ldyBldmVudHMgYW5kIHF1ZXVlcyB0aGUgYXBwcm9wcmlhdGUKKyAqIHdvcmsgdG8gdGhlIHdvcmsgcXVldWUKKyAqCisgKi8KKworc3RhdGljIGludCBwOV9wb2xsX3Byb2Modm9pZCAqYSkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJUDlfRFBSSU5USyhQOV9ERUJVR19UUkFOUywgInN0YXJ0ICVwXG4iLCBjdXJyZW50KTsKKyByZXBlYXQ6CisJc3Bpbl9sb2NrX2lycXNhdmUoJnA5X3BvbGxfbG9jaywgZmxhZ3MpOworCXdoaWxlICghbGlzdF9lbXB0eSgmcDlfcG9sbF9wZW5kaW5nX2xpc3QpKSB7CisJCXN0cnVjdCBwOV9jb25uICpjb25uID0gbGlzdF9maXJzdF9lbnRyeSgmcDlfcG9sbF9wZW5kaW5nX2xpc3QsCisJCQkJCQkJc3RydWN0IHA5X2Nvbm4sCisJCQkJCQkJcG9sbF9wZW5kaW5nX2xpbmspOworCQlsaXN0X2RlbF9pbml0KCZjb25uLT5wb2xsX3BlbmRpbmdfbGluayk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnA5X3BvbGxfbG9jaywgZmxhZ3MpOworCisJCXA5X3BvbGxfbXV4KGNvbm4pOworCisJCXNwaW5fbG9ja19pcnFzYXZlKCZwOV9wb2xsX2xvY2ssIGZsYWdzKTsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcDlfcG9sbF9sb2NrLCBmbGFncyk7CisKKwlzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOworCWlmIChsaXN0X2VtcHR5KCZwOV9wb2xsX3BlbmRpbmdfbGlzdCkpIHsKKwkJUDlfRFBSSU5USyhQOV9ERUJVR19UUkFOUywgInNsZWVwaW5nLi4uXG4iKTsKKwkJc2NoZWR1bGUoKTsKKwl9CisJX19zZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpOworCisJaWYgKCFrdGhyZWFkX3Nob3VsZF9zdG9wKCkpCisJCWdvdG8gcmVwZWF0OworCisJUDlfRFBSSU5USyhQOV9ERUJVR19UUkFOUywgImZpbmlzaFxuIik7CisJcmV0dXJuIDA7Cit9CisKIGludCBwOV90cmFuc19mZF9pbml0KHZvaWQpCiB7Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShwOV9tdXhfcG9sbF90YXNrcyk7IGkrKykKLQkJcDlfbXV4X3BvbGxfdGFza3NbaV0udGFzayA9IE5VTEw7Ci0KIAlwOV9tdXhfd3EgPSBjcmVhdGVfd29ya3F1ZXVlKCJ2OWZzIik7CiAJaWYgKCFwOV9tdXhfd3EpIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAidjlmczogbXV4OiBjcmVhdGluZyB3b3JrcXVldWUgZmFpbGVkXG4iKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCisJcDlfcG9sbF90YXNrID0ga3RocmVhZF9ydW4ocDlfcG9sbF9wcm9jLCBOVUxMLCAidjlmcy1wb2xsIik7CisJaWYgKElTX0VSUihwOV9wb2xsX3Rhc2spKSB7CisJCWRlc3Ryb3lfd29ya3F1ZXVlKHA5X211eF93cSk7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgInY5ZnM6IG11eDogY3JlYXRpbmcgcG9sbCB0YXNrIGZhaWxlZFxuIik7CisJCXJldHVybiBQVFJfRVJSKHA5X3BvbGxfdGFzayk7CisJfQorCiAJdjlmc19yZWdpc3Rlcl90cmFucygmcDlfdGNwX3RyYW5zKTsKIAl2OWZzX3JlZ2lzdGVyX3RyYW5zKCZwOV91bml4X3RyYW5zKTsKIAl2OWZzX3JlZ2lzdGVyX3RyYW5zKCZwOV9mZF90cmFucyk7CkBAIC0xNjIyLDYgKzExMTgsNyBAQAogCiB2b2lkIHA5X3RyYW5zX2ZkX2V4aXQodm9pZCkKIHsKKwlrdGhyZWFkX3N0b3AocDlfcG9sbF90YXNrKTsKIAl2OWZzX3VucmVnaXN0ZXJfdHJhbnMoJnA5X3RjcF90cmFucyk7CiAJdjlmc191bnJlZ2lzdGVyX3RyYW5zKCZwOV91bml4X3RyYW5zKTsKIAl2OWZzX3VucmVnaXN0ZXJfdHJhbnMoJnA5X2ZkX3RyYW5zKTsKZGlmZiAtLWdpdCBhL25ldC85cC90cmFuc192aXJ0aW8uYyBiL25ldC85cC90cmFuc192aXJ0aW8uYwppbmRleCA5NDkxMmUwLi4yZDc3ODFlIDEwMDY0NAotLS0gYS9uZXQvOXAvdHJhbnNfdmlydGlvLmMKKysrIGIvbmV0LzlwL3RyYW5zX3ZpcnRpby5jCkBAIC0xLDEyICsxLDEwIEBACiAvKgotICogVGhlIEd1ZXN0IDlwIHRyYW5zcG9ydCBkcml2ZXIKKyAqIFRoZSBWaXJ0aW8gOXAgdHJhbnNwb3J0IGRyaXZlcgogICoKICAqIFRoaXMgaXMgYSBibG9jayBiYXNlZCB0cmFuc3BvcnQgZHJpdmVyIGJhc2VkIG9uIHRoZSBsZ3Vlc3QgYmxvY2sgZHJpdmVyCiAgKiBjb2RlLgogICoKLSAqLwotLyoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDcgRXJpYyBWYW4gSGVuc2JlcmdlbiwgSUJNIENvcnBvcmF0aW9uCisgKiAgQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4IEVyaWMgVmFuIEhlbnNiZXJnZW4sIElCTSBDb3Jwb3JhdGlvbgogICoKICAqICBCYXNlZCBvbiB2aXJ0aW8gY29uc29sZSBkcml2ZXIKICAqICBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgUnVzdHkgUnVzc2VsbCwgSUJNIENvcnBvcmF0aW9uCkBAIC00MSw2ICszOSw3IEBACiAjaW5jbHVkZSA8bGludXgvZmlsZS5oPgogI2luY2x1ZGUgPG5ldC85cC85cC5oPgogI2luY2x1ZGUgPGxpbnV4L3BhcnNlci5oPgorI2luY2x1ZGUgPG5ldC85cC9jbGllbnQuaD4KICNpbmNsdWRlIDxuZXQvOXAvdHJhbnNwb3J0Lmg+CiAjaW5jbHVkZSA8bGludXgvc2NhdHRlcmxpc3QuaD4KICNpbmNsdWRlIDxsaW51eC92aXJ0aW8uaD4KQEAgLTUzLDUwICs1Miw2IEBACiAvKiBnbG9iYWwgd2hpY2ggdHJhY2tzIGhpZ2hlc3QgaW5pdGlhbGl6ZWQgY2hhbm5lbCAqLwogc3RhdGljIGludCBjaGFuX2luZGV4OwogCi0jZGVmaW5lIFA5X0lOSVRfTUFYVEFHCTE2Ci0KLQotLyoqCi0gKiBlbnVtIHA5X3JlcV9zdGF0dXNfdCAtIHZpcnRpbyByZXF1ZXN0IHN0YXR1cwotICogQFJFUV9TVEFUVVNfSURMRTogcmVxdWVzdCBzbG90IHVudXNlZAotICogQFJFUV9TVEFUVVNfU0VOVDogcmVxdWVzdCBzZW50IHRvIHNlcnZlcgotICogQFJFUV9TVEFUVVNfUkNWRDogcmVzcG9uc2UgcmVjZWl2ZWQgZnJvbSBzZXJ2ZXIKLSAqIEBSRVFfU1RBVFVTX0ZMU0g6IHJlcXVlc3QgaGFzIGJlZW4gZmx1c2hlZAotICoKLSAqIFRoZSBAUkVRX1NUQVRVU19JRExFIHN0YXRlIGlzIHVzZWQgdG8gbWFyayBhIHJlcXVlc3Qgc2xvdCBhcyB1bnVzZWQKLSAqIGJ1dCB1c2UgaXMgYWN0dWFsbHkgdHJhY2tlZCBieSB0aGUgaWRwb29sIHN0cnVjdHVyZSB3aGljaCBoYW5kbGVzIHRhZwotICogaWQgYWxsb2NhdGlvbi4KLSAqCi0gKi8KLQotZW51bSBwOV9yZXFfc3RhdHVzX3QgewotCVJFUV9TVEFUVVNfSURMRSwKLQlSRVFfU1RBVFVTX1NFTlQsCi0JUkVRX1NUQVRVU19SQ1ZELAotCVJFUV9TVEFUVVNfRkxTSCwKLX07Ci0KLS8qKgotICogc3RydWN0IHA5X3JlcV90IC0gdmlydGlvIHJlcXVlc3Qgc2xvdHMKLSAqIEBzdGF0dXM6IHN0YXR1cyBvZiB0aGlzIHJlcXVlc3Qgc2xvdAotICogQHdxOiB3YWl0X3F1ZXVlIGZvciB0aGUgY2xpZW50IHRvIGJsb2NrIG9uIGZvciB0aGlzIHJlcXVlc3QKLSAqCi0gKiBUaGUgdmlydGlvIHRyYW5zcG9ydCB1c2VzIGFuIGFycmF5IHRvIHRyYWNrIG91dHN0YW5kaW5nIHJlcXVlc3RzCi0gKiBpbnN0ZWFkIG9mIGEgbGlzdC4gIFdoaWxlIHRoaXMgbWF5IGluY3VyciBvdmVyaGVhZCBkdXJpbmcgaW5pdGlhbAotICogYWxsb2NhdGlvbiBvciBleHBhbnNpb24sIGl0IG1ha2VzIHJlcXVlc3QgbG9va3VwIG11Y2ggZWFzaWVyIGFzIHRoZQotICogdGFnIGlkIGlzIGEgaW5kZXggaW50byBhbiBhcnJheS4gIChXZSB1c2UgdGFnKzEgc28gdGhhdCB3ZSBjYW4gYWNjb21vZGF0ZQotICogdGhlIC0xIHRhZyBmb3IgdGhlIFRfVkVSU0lPTiByZXF1ZXN0KS4KLSAqIFRoaXMgYWxzbyBoYXMgdGhlIG5pY2UgZWZmZWN0IG9mIG9ubHkgaGF2aW5nIHRvIGFsbG9jYXRlIHdhaXRfcXVldWVzCi0gKiBvbmNlLCBpbnN0ZWFkIG9mIGNvbnN0YW50bHkgYWxsb2NhdGluZyBhbmQgZnJlZWluZyB0aGVtLiAgSXRzIHBvc3NpYmxlCi0gKiBvdGhlciByZXNvdXJjZXMgY291bGQgYmVuZWZpdCBmcm9tIHRoaXMgc2NoZW1lIGFzIHdlbGwuCi0gKgotICovCi0KLXN0cnVjdCBwOV9yZXFfdCB7Ci0JaW50IHN0YXR1czsKLQl3YWl0X3F1ZXVlX2hlYWRfdCAqd3E7Ci19OwotCiAvKioKICAqIHN0cnVjdCB2aXJ0aW9fY2hhbiAtIHBlci1pbnN0YW5jZSB0cmFuc3BvcnQgaW5mb3JtYXRpb24KICAqIEBpbml0aWFsaXplZDogd2hldGhlciB0aGUgY2hhbm5lbCBpcyBpbml0aWFsaXplZApAQCAtMTIxLDY3ICs3NiwxNCBAQAogCiAJc3BpbmxvY2tfdCBsb2NrOwogCisJc3RydWN0IHA5X2NsaWVudCAqY2xpZW50OwogCXN0cnVjdCB2aXJ0aW9fZGV2aWNlICp2ZGV2OwogCXN0cnVjdCB2aXJ0cXVldWUgKnZxOwogCi0Jc3RydWN0IHA5X2lkcG9vbCAqdGFncG9vbDsKLQlzdHJ1Y3QgcDlfcmVxX3QgKnJlcXM7Ci0JaW50IG1heF90YWc7Ci0KIAkvKiBTY2F0dGVybGlzdDogY2FuIGJlIHRvbyBiaWcgZm9yIHN0YWNrLiAqLwogCXN0cnVjdCBzY2F0dGVybGlzdCBzZ1tWSVJUUVVFVUVfTlVNXTsKIH0gY2hhbm5lbHNbTUFYXzlQX0NIQU5dOwogCi0vKioKLSAqIHA5X2xvb2t1cF90YWcgLSBMb29rdXAgcmVxdWVzdHMgYnkgdGFnCi0gKiBAYzogdmlydGlvIGNoYW5uZWwgdG8gbG9va3VwIHRhZyB3aXRoaW4KLSAqIEB0YWc6IG51bWVyaWMgaWQgZm9yIHRyYW5zYWN0aW9uCi0gKgotICogdGhpcyBpcyBhIHNpbXBsZSBhcnJheSBsb29rdXAsIGJ1dCB3aWxsIGdyb3cgdGhlCi0gKiByZXF1ZXN0X3Nsb3RzIGFzIG5lY2Vzc2FyeSB0byBhY2NvbW9kYXRlIHRyYW5zYWN0aW9uCi0gKiBpZHMgd2hpY2ggZGlkIG5vdCBwcmV2aW91c2x5IGhhdmUgYSBzbG90LgotICoKLSAqIEJ1Z3M6IHRoZXJlIGlzIGN1cnJlbnRseSBubyB1cHBlciBsaW1pdCBvbiByZXF1ZXN0IHNsb3RzIHNldAotICogaGVyZSwgYnV0IHRoYXQgc2hvdWxkIGJlIGNvbnN0cmFpbmVkIGJ5IHRoZSBpZCBhY2NvdW50aW5nLgotICovCi0KLXN0YXRpYyBzdHJ1Y3QgcDlfcmVxX3QgKnA5X2xvb2t1cF90YWcoc3RydWN0IHZpcnRpb19jaGFuICpjLCB1MTYgdGFnKQotewotCS8qIFRoaXMgbG9va3MgdXAgdGhlIG9yaWdpbmFsIHJlcXVlc3QgYnkgdGFnIHNvIHdlIGtub3cgd2hpY2gKLQkgKiBidWZmZXIgdG8gcmVhZCB0aGUgZGF0YSBpbnRvICovCi0JdGFnKys7Ci0KLQl3aGlsZSAodGFnID49IGMtPm1heF90YWcpIHsKLQkJaW50IG9sZF9tYXggPSBjLT5tYXhfdGFnOwotCQlpbnQgY291bnQ7Ci0KLQkJaWYgKGMtPm1heF90YWcpCi0JCQljLT5tYXhfdGFnICo9IDI7Ci0JCWVsc2UKLQkJCWMtPm1heF90YWcgPSBQOV9JTklUX01BWFRBRzsKLQotCQljLT5yZXFzID0ga3JlYWxsb2MoYy0+cmVxcywgc2l6ZW9mKHN0cnVjdCBwOV9yZXFfdCkqYy0+bWF4X3RhZywKLQkJCQkJCQkJR0ZQX0FUT01JQyk7Ci0JCWlmICghYy0+cmVxcykgewotCQkJcHJpbnRrKEtFUk5fRVJSICJDb3VsZG4ndCBncm93IHRhZyBhcnJheVxuIik7Ci0JCQlCVUcoKTsKLQkJfQotCQlmb3IgKGNvdW50ID0gb2xkX21heDsgY291bnQgPCBjLT5tYXhfdGFnOyBjb3VudCsrKSB7Ci0JCQljLT5yZXFzW2NvdW50XS5zdGF0dXMgPSBSRVFfU1RBVFVTX0lETEU7Ci0JCQljLT5yZXFzW2NvdW50XS53cSA9IGttYWxsb2Moc2l6ZW9mKHdhaXRfcXVldWVfaGVhZF90KSwKLQkJCQkJCQkJR0ZQX0FUT01JQyk7Ci0JCQlpZiAoIWMtPnJlcXNbY291bnRdLndxKSB7Ci0JCQkJcHJpbnRrKEtFUk5fRVJSICJDb3VsZG4ndCBncm93IHRhZyBhcnJheVxuIik7Ci0JCQkJQlVHKCk7Ci0JCQl9Ci0JCQlpbml0X3dhaXRxdWV1ZV9oZWFkKGMtPnJlcXNbY291bnRdLndxKTsKLQkJfQotCX0KLQotCXJldHVybiAmYy0+cmVxc1t0YWddOwotfQotCi0KIC8qIEhvdyBtYW55IGJ5dGVzIGxlZnQgaW4gdGhpcyBwYWdlLiAqLwogc3RhdGljIHVuc2lnbmVkIGludCByZXN0X29mX3BhZ2Uodm9pZCAqZGF0YSkKIHsKQEAgLTE5NywyNSArOTksMTMgQEAKICAqCiAgKi8KIAotc3RhdGljIHZvaWQgcDlfdmlydGlvX2Nsb3NlKHN0cnVjdCBwOV90cmFucyAqdHJhbnMpCitzdGF0aWMgdm9pZCBwOV92aXJ0aW9fY2xvc2Uoc3RydWN0IHA5X2NsaWVudCAqY2xpZW50KQogewotCXN0cnVjdCB2aXJ0aW9fY2hhbiAqY2hhbiA9IHRyYW5zLT5wcml2OwotCWludCBjb3VudDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmNoYW4tPmxvY2ssIGZsYWdzKTsKLQlwOV9pZHBvb2xfZGVzdHJveShjaGFuLT50YWdwb29sKTsKLQlmb3IgKGNvdW50ID0gMDsgY291bnQgPCBjaGFuLT5tYXhfdGFnOyBjb3VudCsrKQotCQlrZnJlZShjaGFuLT5yZXFzW2NvdW50XS53cSk7Ci0Ja2ZyZWUoY2hhbi0+cmVxcyk7Ci0JY2hhbi0+bWF4X3RhZyA9IDA7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2hhbi0+bG9jaywgZmxhZ3MpOworCXN0cnVjdCB2aXJ0aW9fY2hhbiAqY2hhbiA9IGNsaWVudC0+dHJhbnM7CiAKIAltdXRleF9sb2NrKCZ2aXJ0aW9fOXBfbG9jayk7CiAJY2hhbi0+aW51c2UgPSBmYWxzZTsKIAltdXRleF91bmxvY2soJnZpcnRpb185cF9sb2NrKTsKLQotCWtmcmVlKHRyYW5zKTsKIH0KIAogLyoqCkBAIC0yMzYsMTcgKzEyNiwxNiBAQAogCXN0cnVjdCB2aXJ0aW9fY2hhbiAqY2hhbiA9IHZxLT52ZGV2LT5wcml2OwogCXN0cnVjdCBwOV9mY2FsbCAqcmM7CiAJdW5zaWduZWQgaW50IGxlbjsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXN0cnVjdCBwOV9yZXFfdCAqcmVxOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmNoYW4tPmxvY2ssIGZsYWdzKTsKKwlQOV9EUFJJTlRLKFA5X0RFQlVHX1RSQU5TLCAiOiByZXF1ZXN0IGRvbmVcbiIpOworCiAJd2hpbGUgKChyYyA9IGNoYW4tPnZxLT52cV9vcHMtPmdldF9idWYoY2hhbi0+dnEsICZsZW4pKSAhPSBOVUxMKSB7Ci0JCXJlcSA9IHA5X2xvb2t1cF90YWcoY2hhbiwgcmMtPnRhZyk7Ci0JCXJlcS0+c3RhdHVzID0gUkVRX1NUQVRVU19SQ1ZEOwotCQl3YWtlX3VwKHJlcS0+d3EpOworCQlQOV9EUFJJTlRLKFA5X0RFQlVHX1RSQU5TLCAiOiByYyAlcFxuIiwgcmMpOworCQlQOV9EUFJJTlRLKFA5X0RFQlVHX1RSQU5TLCAiOiBsb29rdXAgdGFnICVkXG4iLCByYy0+dGFnKTsKKwkJcmVxID0gcDlfdGFnX2xvb2t1cChjaGFuLT5jbGllbnQsIHJjLT50YWcpOworCQlwOV9jbGllbnRfY2IoY2hhbi0+Y2xpZW50LCByZXEpOwogCX0KLQkvKiBJbiBjYXNlIHF1ZXVlIGlzIHN0b3BwZWQgd2FpdGluZyBmb3IgbW9yZSBidWZmZXJzLiAqLwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNoYW4tPmxvY2ssIGZsYWdzKTsKIH0KIAogLyoqCkBAIC0yODMsOCArMTcyLDE0IEBACiAJcmV0dXJuIGluZGV4LXN0YXJ0OwogfQogCisvKiBXZSBkb24ndCBjdXJyZW50bHkgYWxsb3cgY2FuY2VsaW5nIG9mIHZpcnRpbyByZXF1ZXN0cyAqLworc3RhdGljIGludCBwOV92aXJ0aW9fY2FuY2VsKHN0cnVjdCBwOV9jbGllbnQgKmNsaWVudCwgc3RydWN0IHA5X3JlcV90ICpyZXEpCit7CisJcmV0dXJuIDE7Cit9CisKIC8qKgotICogcDlfdmlydGlvX3JwYyAtIGlzc3VlIGEgcmVxdWVzdCBhbmQgd2FpdCBmb3IgYSByZXNwb25zZQorICogcDlfdmlydGlvX3JlcXVlc3QgLSBpc3N1ZSBhIHJlcXVlc3QKICAqIEB0OiB0cmFuc3BvcnQgc3RhdGUKICAqIEB0YzogJnA5X2ZjYWxsIHJlcXVlc3QgdG8gdHJhbnNtaXQKICAqIEByYzogJnA5X2ZjYWxsIHRvIHB1dCByZXBvbnNlIGludG8KQEAgLTI5Miw0NCArMTg3LDIyIEBACiAgKi8KIAogc3RhdGljIGludAotcDlfdmlydGlvX3JwYyhzdHJ1Y3QgcDlfdHJhbnMgKnQsIHN0cnVjdCBwOV9mY2FsbCAqdGMsIHN0cnVjdCBwOV9mY2FsbCAqKnJjKQorcDlfdmlydGlvX3JlcXVlc3Qoc3RydWN0IHA5X2NsaWVudCAqY2xpZW50LCBzdHJ1Y3QgcDlfcmVxX3QgKnJlcSkKIHsKIAlpbnQgaW4sIG91dDsKLQlpbnQgbiwgZXJyLCBzaXplOwotCXN0cnVjdCB2aXJ0aW9fY2hhbiAqY2hhbiA9IHQtPnByaXY7Ci0JY2hhciAqcmRhdGE7Ci0Jc3RydWN0IHA5X3JlcV90ICpyZXE7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgdmlydGlvX2NoYW4gKmNoYW4gPSBjbGllbnQtPnRyYW5zOworCWNoYXIgKnJkYXRhID0gKGNoYXIgKilyZXEtPnJjK3NpemVvZihzdHJ1Y3QgcDlfZmNhbGwpOwogCi0JaWYgKCpyYyA9PSBOVUxMKSB7Ci0JCSpyYyA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBwOV9mY2FsbCkgKyB0LT5tc2l6ZSwgR0ZQX0tFUk5FTCk7Ci0JCWlmICghKnJjKQotCQkJcmV0dXJuIC1FTk9NRU07Ci0JfQorCVA5X0RQUklOVEsoUDlfREVCVUdfVFJBTlMsICI5cCBkZWJ1ZzogdmlydGlvIHJlcXVlc3RcbiIpOwogCi0JcmRhdGEgPSAoY2hhciAqKSpyYytzaXplb2Yoc3RydWN0IHA5X2ZjYWxsKTsKLQotCW4gPSBQOV9OT1RBRzsKLQlpZiAodGMtPmlkICE9IFA5X1RWRVJTSU9OKSB7Ci0JCW4gPSBwOV9pZHBvb2xfZ2V0KGNoYW4tPnRhZ3Bvb2wpOwotCQlpZiAobiA8IDApCi0JCQlyZXR1cm4gLUVOT01FTTsKLQl9Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmY2hhbi0+bG9jaywgZmxhZ3MpOwotCXJlcSA9IHA5X2xvb2t1cF90YWcoY2hhbiwgbik7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2hhbi0+bG9jaywgZmxhZ3MpOwotCi0JcDlfc2V0X3RhZyh0Yywgbik7Ci0KLQlQOV9EUFJJTlRLKFA5X0RFQlVHX1RSQU5TLCAiOXAgZGVidWc6IHZpcnRpbyBycGMgdGFnICVkXG4iLCBuKTsKLQotCW91dCA9IHBhY2tfc2dfbGlzdChjaGFuLT5zZywgMCwgVklSVFFVRVVFX05VTSwgdGMtPnNkYXRhLCB0Yy0+c2l6ZSk7Ci0JaW4gPSBwYWNrX3NnX2xpc3QoY2hhbi0+c2csIG91dCwgVklSVFFVRVVFX05VTS1vdXQsIHJkYXRhLCB0LT5tc2l6ZSk7CisJb3V0ID0gcGFja19zZ19saXN0KGNoYW4tPnNnLCAwLCBWSVJUUVVFVUVfTlVNLCByZXEtPnRjLT5zZGF0YSwKKwkJCQkJCQkJcmVxLT50Yy0+c2l6ZSk7CisJaW4gPSBwYWNrX3NnX2xpc3QoY2hhbi0+c2csIG91dCwgVklSVFFVRVVFX05VTS1vdXQsIHJkYXRhLAorCQkJCQkJCQljbGllbnQtPm1zaXplKTsKIAogCXJlcS0+c3RhdHVzID0gUkVRX1NUQVRVU19TRU5UOwogCi0JaWYgKGNoYW4tPnZxLT52cV9vcHMtPmFkZF9idWYoY2hhbi0+dnEsIGNoYW4tPnNnLCBvdXQsIGluLCB0YykpIHsKKwlpZiAoY2hhbi0+dnEtPnZxX29wcy0+YWRkX2J1ZihjaGFuLT52cSwgY2hhbi0+c2csIG91dCwgaW4sIHJlcS0+dGMpKSB7CiAJCVA5X0RQUklOVEsoUDlfREVCVUdfVFJBTlMsCiAJCQkiOXAgZGVidWc6IHZpcnRpbyBycGMgYWRkX2J1ZiByZXR1cm5lZCBmYWlsdXJlIik7CiAJCXJldHVybiAtRUlPOwpAQCAtMzM3LDMxICsyMTAsNyBAQAogCiAJY2hhbi0+dnEtPnZxX29wcy0+a2ljayhjaGFuLT52cSk7CiAKLQl3YWl0X2V2ZW50KCpyZXEtPndxLCByZXEtPnN0YXR1cyA9PSBSRVFfU1RBVFVTX1JDVkQpOwotCi0Jc2l6ZSA9IGxlMzJfdG9fY3B1KCooX19sZTMyICopIHJkYXRhKTsKLQotCWVyciA9IHA5X2Rlc2VyaWFsaXplX2ZjYWxsKHJkYXRhLCBzaXplLCAqcmMsIHQtPmV4dGVuZGVkKTsKLQlpZiAoZXJyIDwgMCkgewotCQlQOV9EUFJJTlRLKFA5X0RFQlVHX1RSQU5TLAotCQkJIjlwIGRlYnVnOiB2aXJ0aW8gcnBjIGRlc2VyaWFsaXplIHJldHVybmVkICVkXG4iLCBlcnIpOwotCQlyZXR1cm4gZXJyOwotCX0KLQotI2lmZGVmIENPTkZJR19ORVRfOVBfREVCVUcKLQlpZiAoKHA5X2RlYnVnX2xldmVsJlA5X0RFQlVHX0ZDQUxMKSA9PSBQOV9ERUJVR19GQ0FMTCkgewotCQljaGFyIGJ1ZlsxNTBdOwotCi0JCXA5X3ByaW50ZmNhbGwoYnVmLCBzaXplb2YoYnVmKSwgKnJjLCB0LT5leHRlbmRlZCk7Ci0JCXByaW50ayhLRVJOX05PVElDRSAiPj4+ICVwICVzXG4iLCB0LCBidWYpOwotCX0KLSNlbmRpZgotCi0JaWYgKG4gIT0gUDlfTk9UQUcgJiYgcDlfaWRwb29sX2NoZWNrKG4sIGNoYW4tPnRhZ3Bvb2wpKQotCQlwOV9pZHBvb2xfcHV0KG4sIGNoYW4tPnRhZ3Bvb2wpOwotCi0JcmVxLT5zdGF0dXMgPSBSRVFfU1RBVFVTX0lETEU7Ci0KKwlQOV9EUFJJTlRLKFA5X0RFQlVHX1RSQU5TLCAiOXAgZGVidWc6IHZpcnRpbyByZXF1ZXN0IGtpY2tlZFxuIik7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTQyMiwxMCArMjcxLDkgQEAKIAogLyoqCiAgKiBwOV92aXJ0aW9fY3JlYXRlIC0gYWxsb2NhdGUgYSBuZXcgdmlydGlvIGNoYW5uZWwKKyAqIEBjbGllbnQ6IGNsaWVudCBpbnN0YW5jZSBpbnZva2luZyB0aGlzIHRyYW5zcG9ydAogICogQGRldm5hbWU6IHN0cmluZyBpZGVudGlmeWluZyB0aGUgY2hhbm5lbCB0byBjb25uZWN0IHRvICh1bnVzZWQpCiAgKiBAYXJnczogYXJncyBwYXNzZWQgZnJvbSBzeXNfbW91bnQoKSBmb3IgcGVyLXRyYW5zcG9ydCBvcHRpb25zICh1bnVzZWQpCi0gKiBAbXNpemU6IHJlcXVlc3RlZCBtYXhpbXVtIHBhY2tldCBzaXplCi0gKiBAZXh0ZW5kZWQ6IDlwMjAwMC51IGVuYWJsZWQgZmxhZwogICoKICAqIFRoaXMgc2V0cyB1cCBhIHRyYW5zcG9ydCBjaGFubmVsIGZvciA5cCBjb21tdW5pY2F0aW9uLiAgUmlnaHQgbm93CiAgKiB3ZSBvbmx5IG1hdGNoIHRoZSBmaXJzdCBhdmFpbGFibGUgY2hhbm5lbCwgYnV0IGV2ZW50dWFsbHkgd2UgY291bGRsb29rIHVwCkBAIC00NDEsMTEgKzI4OSw5IEBACiAgKgogICovCiAKLXN0YXRpYyBzdHJ1Y3QgcDlfdHJhbnMgKgotcDlfdmlydGlvX2NyZWF0ZShjb25zdCBjaGFyICpkZXZuYW1lLCBjaGFyICphcmdzLCBpbnQgbXNpemUsCi0JCQkJCQkJdW5zaWduZWQgY2hhciBleHRlbmRlZCkKK3N0YXRpYyBpbnQKK3A5X3ZpcnRpb19jcmVhdGUoc3RydWN0IHA5X2NsaWVudCAqY2xpZW50LCBjb25zdCBjaGFyICpkZXZuYW1lLCBjaGFyICphcmdzKQogewotCXN0cnVjdCBwOV90cmFucyAqdHJhbnM7CiAJc3RydWN0IHZpcnRpb19jaGFuICpjaGFuID0gY2hhbm5lbHM7CiAJaW50IGluZGV4ID0gMDsKIApAQCAtNDYzLDMwICszMDksMTMgQEAKIAogCWlmIChpbmRleCA+PSBNQVhfOVBfQ0hBTikgewogCQlwcmludGsoS0VSTl9FUlIgIjlwOiBubyBjaGFubmVscyBhdmFpbGFibGVcbiIpOwotCQlyZXR1cm4gRVJSX1BUUigtRU5PREVWKTsKKwkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCi0JY2hhbi0+dGFncG9vbCA9IHA5X2lkcG9vbF9jcmVhdGUoKTsKLQlpZiAoSVNfRVJSKGNoYW4tPnRhZ3Bvb2wpKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiOXA6IGNvdWxkbid0IGFsbG9jYXRlIHRhZ3Bvb2xcbiIpOwotCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKLQl9Ci0JcDlfaWRwb29sX2dldChjaGFuLT50YWdwb29sKTsgLyogcmVzZXJ2ZSB0YWcgMCAqLwotCWNoYW4tPm1heF90YWcgPSAwOwotCWNoYW4tPnJlcXMgPSBOVUxMOworCWNsaWVudC0+dHJhbnMgPSAodm9pZCAqKWNoYW47CisJY2hhbi0+Y2xpZW50ID0gY2xpZW50OwogCi0JdHJhbnMgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgcDlfdHJhbnMpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIXRyYW5zKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiOXA6IGNvdWxkbid0IGFsbG9jYXRlIHRyYW5zcG9ydFxuIik7Ci0JCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwotCX0KLQl0cmFucy0+ZXh0ZW5kZWQgPSBleHRlbmRlZDsKLQl0cmFucy0+bXNpemUgPSBtc2l6ZTsKLQl0cmFucy0+Y2xvc2UgPSBwOV92aXJ0aW9fY2xvc2U7Ci0JdHJhbnMtPnJwYyA9IHA5X3ZpcnRpb19ycGM7Ci0JdHJhbnMtPnByaXYgPSBjaGFuOwotCi0JcmV0dXJuIHRyYW5zOworCXJldHVybiAwOwogfQogCiAvKioKQEAgLTUyNiw2ICszNTUsOSBAQAogc3RhdGljIHN0cnVjdCBwOV90cmFuc19tb2R1bGUgcDlfdmlydGlvX3RyYW5zID0gewogCS5uYW1lID0gInZpcnRpbyIsCiAJLmNyZWF0ZSA9IHA5X3ZpcnRpb19jcmVhdGUsCisJLmNsb3NlID0gcDlfdmlydGlvX2Nsb3NlLAorCS5yZXF1ZXN0ID0gcDlfdmlydGlvX3JlcXVlc3QsCisJLmNhbmNlbCA9IHA5X3ZpcnRpb19jYW5jZWwsCiAJLm1heHNpemUgPSBQQUdFX1NJWkUqMTYsCiAJLmRlZiA9IDAsCiAJLm93bmVyID0gVEhJU19NT0RVTEUsCmRpZmYgLS1naXQgYS9uZXQvOXAvdXRpbC5jIGIvbmV0LzlwL3V0aWwuYwppbmRleCA5NThmYzU4Li5kYzRlYzA1IDEwMDY0NAotLS0gYS9uZXQvOXAvdXRpbC5jCisrKyBiL25ldC85cC91dGlsLmMKQEAgLTEwNSw2ICsxMDUsNyBAQAogCWVsc2UgaWYgKGVycm9yKQogCQlyZXR1cm4gLTE7CiAKKwlQOV9EUFJJTlRLKFA5X0RFQlVHX01VWCwgIiBpZCAlZCBwb29sICVwXG4iLCBpLCBwKTsKIAlyZXR1cm4gaTsKIH0KIEVYUE9SVF9TWU1CT0wocDlfaWRwb29sX2dldCk7CkBAIC0xMjEsNiArMTIyLDkgQEAKIHZvaWQgcDlfaWRwb29sX3B1dChpbnQgaWQsIHN0cnVjdCBwOV9pZHBvb2wgKnApCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCVA5X0RQUklOVEsoUDlfREVCVUdfTVVYLCAiIGlkICVkIHBvb2wgJXBcbiIsIGlkLCBwKTsKKwogCXNwaW5fbG9ja19pcnFzYXZlKCZwLT5sb2NrLCBmbGFncyk7CiAJaWRyX3JlbW92ZSgmcC0+cG9vbCwgaWQpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnAtPmxvY2ssIGZsYWdzKTsKZGlmZiAtLWdpdCBhL25ldC9hcHBsZXRhbGsvZGRwLmMgYi9uZXQvYXBwbGV0YWxrL2RkcC5jCmluZGV4IDBjODUwNDIuLmQzMTM0ZTcgMTAwNjQ0Ci0tLSBhL25ldC9hcHBsZXRhbGsvZGRwLmMKKysrIGIvbmV0L2FwcGxldGFsay9kZHAuYwpAQCAtMiw3ICsyLDcgQEAKICAqCUREUDoJQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIEFwcGxlVGFsayBERFAgcHJvdG9jb2wgZm9yCiAgKgkJRXRoZXJuZXQgJ0VMQVAnLgogICoKLSAqCQlBbGFuIENveCAgPEFsYW4uQ294QGxpbnV4Lm9yZz4KKyAqCQlBbGFuIENveCAgPGFsYW5AbHhvcmd1ay51a3V1Lm9yZy51az4KICAqCiAgKgkJV2l0aCBtb3JlIHRoYW4gYSBsaXR0bGUgYXNzaXN0YW5jZSBmcm9tCiAgKgpAQCAtMTkzNCw2ICsxOTM0LDYgQEAKIG1vZHVsZV9leGl0KGF0YWxrX2V4aXQpOwogCiBNT0RVTEVfTElDRU5TRSgiR1BMIik7Ci1NT0RVTEVfQVVUSE9SKCJBbGFuIENveCA8QWxhbi5Db3hAbGludXgub3JnPiIpOworTU9EVUxFX0FVVEhPUigiQWxhbiBDb3ggPGFsYW5AbHhvcmd1ay51a3V1Lm9yZy51az4iKTsKIE1PRFVMRV9ERVNDUklQVElPTigiQXBwbGVUYWxrIDAuMjBcbiIpOwogTU9EVUxFX0FMSUFTX05FVFBST1RPKFBGX0FQUExFVEFMSyk7CmRpZmYgLS1naXQgYS9uZXQvYmx1ZXRvb3RoL2FmX2JsdWV0b290aC5jIGIvbmV0L2JsdWV0b290aC9hZl9ibHVldG9vdGguYwppbmRleCBmNjM0OGUwLi44Zjk0MzFhIDEwMDY0NAotLS0gYS9uZXQvYmx1ZXRvb3RoL2FmX2JsdWV0b290aC5jCisrKyBiL25ldC9ibHVldG9vdGgvYWZfYmx1ZXRvb3RoLmMKQEAgLTM3LDEwICszNyw3IEBACiAjaW5jbHVkZSA8bGludXgvcG9sbC5oPgogI2luY2x1ZGUgPG5ldC9zb2NrLmg+CiAjaW5jbHVkZSA8YXNtL2lvY3Rscy5oPgotCi0jaWYgZGVmaW5lZChDT05GSUdfS01PRCkKICNpbmNsdWRlIDxsaW51eC9rbW9kLmg+Ci0jZW5kaWYKIAogI2luY2x1ZGUgPG5ldC9ibHVldG9vdGgvYmx1ZXRvb3RoLmg+CiAKQEAgLTE0NSwxMSArMTQyLDggQEAKIAlpZiAocHJvdG8gPCAwIHx8IHByb3RvID49IEJUX01BWF9QUk9UTykKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLSNpZiBkZWZpbmVkKENPTkZJR19LTU9EKQotCWlmICghYnRfcHJvdG9bcHJvdG9dKSB7CisJaWYgKCFidF9wcm90b1twcm90b10pCiAJCXJlcXVlc3RfbW9kdWxlKCJidC1wcm90by0lZCIsIHByb3RvKTsKLQl9Ci0jZW5kaWYKIAogCWVyciA9IC1FUFJPVE9OT1NVUFBPUlQ7CiAKZGlmZiAtLWdpdCBhL25ldC9ibHVldG9vdGgvaGlkcC9jb3JlLmMgYi9uZXQvYmx1ZXRvb3RoL2hpZHAvY29yZS5jCmluZGV4IDk2NDM0ZDcuLmFjZGVhYjMgMTAwNjQ0Ci0tLSBhL25ldC9ibHVldG9vdGgvaGlkcC9jb3JlLmMKKysrIGIvbmV0L2JsdWV0b290aC9oaWRwL2NvcmUuYwpAQCAtNTc4LDcgKzU3OCw3IEBACiAJaWYgKHNlc3Npb24tPmhpZCkgewogCQlpZiAoc2Vzc2lvbi0+aGlkLT5jbGFpbWVkICYgSElEX0NMQUlNRURfSU5QVVQpCiAJCQloaWRpbnB1dF9kaXNjb25uZWN0KHNlc3Npb24tPmhpZCk7Ci0JCWhpZF9mcmVlX2RldmljZShzZXNzaW9uLT5oaWQpOworCQloaWRfZGVzdHJveV9kZXZpY2Uoc2Vzc2lvbi0+aGlkKTsKIAl9CiAKIAkvKiBXYWtldXAgdXNlci1zcGFjZSBwb2xsaW5nIGZvciBzb2NrZXQgZXJyb3JzICovCkBAIC02MjMsOSArNjIzLDE1IEBACiBzdGF0aWMgaW50IGhpZHBfc2V0dXBfaW5wdXQoc3RydWN0IGhpZHBfc2Vzc2lvbiAqc2Vzc2lvbiwKIAkJCQlzdHJ1Y3QgaGlkcF9jb25uYWRkX3JlcSAqcmVxKQogewotCXN0cnVjdCBpbnB1dF9kZXYgKmlucHV0ID0gc2Vzc2lvbi0+aW5wdXQ7CisJc3RydWN0IGlucHV0X2RldiAqaW5wdXQ7CiAJaW50IGk7CiAKKwlpbnB1dCA9IGlucHV0X2FsbG9jYXRlX2RldmljZSgpOworCWlmICghaW5wdXQpCisJCXJldHVybiAtRU5PTUVNOworCisJc2Vzc2lvbi0+aW5wdXQgPSBpbnB1dDsKKwogCWlucHV0X3NldF9kcnZkYXRhKGlucHV0LCBzZXNzaW9uKTsKIAogCWlucHV0LT5uYW1lID0gIkJsdWV0b290aCBISUQgQm9vdCBQcm90b2NvbCBEZXZpY2UiOwpAQCAtNjc3LDY3ICs2ODMsMTE0IEBACiB7CiB9CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgewotCV9fdTE2IGlkVmVuZG9yOwotCV9fdTE2IGlkUHJvZHVjdDsKLQl1bnNpZ25lZCBxdWlya3M7Ci19IGhpZHBfYmxhY2tsaXN0W10gPSB7Ci0JLyogQXBwbGUgd2lyZWxlc3MgTWlnaHR5IE1vdXNlICovCi0JeyAweDA1YWMsIDB4MDMwYywgSElEX1FVSVJLX01JR0hUWU1PVVNFIHwgSElEX1FVSVJLX0lOVkVSVF9IV0hFRUwgfSwKLQotCXsgfQkvKiBUZXJtaW5hdGluZyBlbnRyeSAqLwotfTsKLQotc3RhdGljIHZvaWQgaGlkcF9zZXR1cF9xdWlya3Moc3RydWN0IGhpZF9kZXZpY2UgKmhpZCkKK3N0YXRpYyBpbnQgaGlkcF9wYXJzZShzdHJ1Y3QgaGlkX2RldmljZSAqaGlkKQogewotCXVuc2lnbmVkIGludCBuOworCXN0cnVjdCBoaWRwX3Nlc3Npb24gKnNlc3Npb24gPSBoaWQtPmRyaXZlcl9kYXRhOworCXN0cnVjdCBoaWRwX2Nvbm5hZGRfcmVxICpyZXEgPSBzZXNzaW9uLT5yZXE7CisJdW5zaWduZWQgY2hhciAqYnVmOworCWludCByZXQ7CiAKLQlmb3IgKG4gPSAwOyBoaWRwX2JsYWNrbGlzdFtuXS5pZFZlbmRvcjsgbisrKQotCQlpZiAoaGlkcF9ibGFja2xpc3Rbbl0uaWRWZW5kb3IgPT0gbGUxNl90b19jcHUoaGlkLT52ZW5kb3IpICYmCi0JCQkJaGlkcF9ibGFja2xpc3Rbbl0uaWRQcm9kdWN0ID09IGxlMTZfdG9fY3B1KGhpZC0+cHJvZHVjdCkpCi0JCQloaWQtPnF1aXJrcyA9IGhpZHBfYmxhY2tsaXN0W25dLnF1aXJrczsKKwlidWYgPSBrbWFsbG9jKHJlcS0+cmRfc2l6ZSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFidWYpCisJCXJldHVybiAtRU5PTUVNOworCisJaWYgKGNvcHlfZnJvbV91c2VyKGJ1ZiwgcmVxLT5yZF9kYXRhLCByZXEtPnJkX3NpemUpKSB7CisJCWtmcmVlKGJ1Zik7CisJCXJldHVybiAtRUZBVUxUOworCX0KKworCXJldCA9IGhpZF9wYXJzZV9yZXBvcnQoc2Vzc2lvbi0+aGlkLCBidWYsIHJlcS0+cmRfc2l6ZSk7CisKKwlrZnJlZShidWYpOworCisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXNlc3Npb24tPnJlcSA9IE5VTEw7CisKKwlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgaGlkcF9zZXR1cF9oaWQoc3RydWN0IGhpZHBfc2Vzc2lvbiAqc2Vzc2lvbiwKK3N0YXRpYyBpbnQgaGlkcF9zdGFydChzdHJ1Y3QgaGlkX2RldmljZSAqaGlkKQoreworCXN0cnVjdCBoaWRwX3Nlc3Npb24gKnNlc3Npb24gPSBoaWQtPmRyaXZlcl9kYXRhOworCXN0cnVjdCBoaWRfcmVwb3J0ICpyZXBvcnQ7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHJlcG9ydCwgJmhpZC0+cmVwb3J0X2VudW1bSElEX0lOUFVUX1JFUE9SVF0uCisJCQlyZXBvcnRfbGlzdCwgbGlzdCkKKwkJaGlkcF9zZW5kX3JlcG9ydChzZXNzaW9uLCByZXBvcnQpOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShyZXBvcnQsICZoaWQtPnJlcG9ydF9lbnVtW0hJRF9GRUFUVVJFX1JFUE9SVF0uCisJCQlyZXBvcnRfbGlzdCwgbGlzdCkKKwkJaGlkcF9zZW5kX3JlcG9ydChzZXNzaW9uLCByZXBvcnQpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGhpZHBfc3RvcChzdHJ1Y3QgaGlkX2RldmljZSAqaGlkKQoreworCXN0cnVjdCBoaWRwX3Nlc3Npb24gKnNlc3Npb24gPSBoaWQtPmRyaXZlcl9kYXRhOworCisJc2tiX3F1ZXVlX3B1cmdlKCZzZXNzaW9uLT5jdHJsX3RyYW5zbWl0KTsKKwlza2JfcXVldWVfcHVyZ2UoJnNlc3Npb24tPmludHJfdHJhbnNtaXQpOworCisJaWYgKGhpZC0+Y2xhaW1lZCAmIEhJRF9DTEFJTUVEX0lOUFVUKQorCQloaWRpbnB1dF9kaXNjb25uZWN0KGhpZCk7CisJaGlkLT5jbGFpbWVkID0gMDsKK30KKworc3RhdGljIHN0cnVjdCBoaWRfbGxfZHJpdmVyIGhpZHBfaGlkX2RyaXZlciA9IHsKKwkucGFyc2UgPSBoaWRwX3BhcnNlLAorCS5zdGFydCA9IGhpZHBfc3RhcnQsCisJLnN0b3AgPSBoaWRwX3N0b3AsCisJLm9wZW4gID0gaGlkcF9vcGVuLAorCS5jbG9zZSA9IGhpZHBfY2xvc2UsCisJLmhpZGlucHV0X2lucHV0X2V2ZW50ID0gaGlkcF9oaWRpbnB1dF9ldmVudCwKK307CisKK3N0YXRpYyBpbnQgaGlkcF9zZXR1cF9oaWQoc3RydWN0IGhpZHBfc2Vzc2lvbiAqc2Vzc2lvbiwKIAkJCQlzdHJ1Y3QgaGlkcF9jb25uYWRkX3JlcSAqcmVxKQogewotCXN0cnVjdCBoaWRfZGV2aWNlICpoaWQgPSBzZXNzaW9uLT5oaWQ7Ci0Jc3RydWN0IGhpZF9yZXBvcnQgKnJlcG9ydDsKKwlzdHJ1Y3QgaGlkX2RldmljZSAqaGlkOwogCWJkYWRkcl90IHNyYywgZHN0OworCWludCByZXQ7CisKKwloaWQgPSBoaWRfYWxsb2NhdGVfZGV2aWNlKCk7CisJaWYgKElTX0VSUihoaWQpKSB7CisJCXJldCA9IFBUUl9FUlIoc2Vzc2lvbi0+aGlkKTsKKwkJZ290byBlcnI7CisJfQorCisJc2Vzc2lvbi0+aGlkID0gaGlkOworCXNlc3Npb24tPnJlcSA9IHJlcTsKKwloaWQtPmRyaXZlcl9kYXRhID0gc2Vzc2lvbjsKIAogCWJhc3dhcCgmc3JjLCAmYnRfc2soc2Vzc2lvbi0+Y3RybF9zb2NrLT5zayktPnNyYyk7CiAJYmFzd2FwKCZkc3QsICZidF9zayhzZXNzaW9uLT5jdHJsX3NvY2stPnNrKS0+ZHN0KTsKIAotCWhpZC0+ZHJpdmVyX2RhdGEgPSBzZXNzaW9uOwotCi0JaGlkLT5jb3VudHJ5ID0gcmVxLT5jb3VudHJ5OwotCiAJaGlkLT5idXMgICAgID0gQlVTX0JMVUVUT09USDsKIAloaWQtPnZlbmRvciAgPSByZXEtPnZlbmRvcjsKIAloaWQtPnByb2R1Y3QgPSByZXEtPnByb2R1Y3Q7CiAJaGlkLT52ZXJzaW9uID0gcmVxLT52ZXJzaW9uOworCWhpZC0+Y291bnRyeSA9IHJlcS0+Y291bnRyeTsKIAogCXN0cm5jcHkoaGlkLT5uYW1lLCByZXEtPm5hbWUsIDEyOCk7CiAJc3RybmNweShoaWQtPnBoeXMsIGJhdG9zdHIoJnNyYyksIDY0KTsKIAlzdHJuY3B5KGhpZC0+dW5pcSwgYmF0b3N0cigmZHN0KSwgNjQpOwogCi0JaGlkLT5kZXYgPSBoaWRwX2dldF9kZXZpY2Uoc2Vzc2lvbik7CisJaGlkLT5kZXYucGFyZW50ID0gaGlkcF9nZXRfZGV2aWNlKHNlc3Npb24pOworCWhpZC0+bGxfZHJpdmVyID0gJmhpZHBfaGlkX2RyaXZlcjsKIAotCWhpZC0+aGlkX29wZW4gID0gaGlkcF9vcGVuOwotCWhpZC0+aGlkX2Nsb3NlID0gaGlkcF9jbG9zZTsKKwlyZXQgPSBoaWRfYWRkX2RldmljZShoaWQpOworCWlmIChyZXQpCisJCWdvdG8gZXJyX2hpZDsKIAotCWhpZC0+aGlkaW5wdXRfaW5wdXRfZXZlbnQgPSBoaWRwX2hpZGlucHV0X2V2ZW50OwotCi0JaGlkcF9zZXR1cF9xdWlya3MoaGlkKTsKLQotCWxpc3RfZm9yX2VhY2hfZW50cnkocmVwb3J0LCAmaGlkLT5yZXBvcnRfZW51bVtISURfSU5QVVRfUkVQT1JUXS5yZXBvcnRfbGlzdCwgbGlzdCkKLQkJaGlkcF9zZW5kX3JlcG9ydChzZXNzaW9uLCByZXBvcnQpOwotCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShyZXBvcnQsICZoaWQtPnJlcG9ydF9lbnVtW0hJRF9GRUFUVVJFX1JFUE9SVF0ucmVwb3J0X2xpc3QsIGxpc3QpCi0JCWhpZHBfc2VuZF9yZXBvcnQoc2Vzc2lvbiwgcmVwb3J0KTsKLQotCWlmIChoaWRpbnB1dF9jb25uZWN0KGhpZCkgPT0gMCkKLQkJaGlkLT5jbGFpbWVkIHw9IEhJRF9DTEFJTUVEX0lOUFVUOworCXJldHVybiAwOworZXJyX2hpZDoKKwloaWRfZGVzdHJveV9kZXZpY2UoaGlkKTsKKwlzZXNzaW9uLT5oaWQgPSBOVUxMOworZXJyOgorCXJldHVybiByZXQ7CiB9CiAKIGludCBoaWRwX2FkZF9jb25uZWN0aW9uKHN0cnVjdCBoaWRwX2Nvbm5hZGRfcmVxICpyZXEsIHN0cnVjdCBzb2NrZXQgKmN0cmxfc29jaywgc3RydWN0IHNvY2tldCAqaW50cl9zb2NrKQpAQCAtNzU3LDM4ICs4MTAsNiBAQAogCiAJQlRfREJHKCJyZF9kYXRhICVwIHJkX3NpemUgJWQiLCByZXEtPnJkX2RhdGEsIHJlcS0+cmRfc2l6ZSk7CiAKLQlpZiAocmVxLT5yZF9zaXplID4gMCkgewotCQl1bnNpZ25lZCBjaGFyICpidWYgPSBrbWFsbG9jKHJlcS0+cmRfc2l6ZSwgR0ZQX0tFUk5FTCk7Ci0KLQkJaWYgKCFidWYpIHsKLQkJCWtmcmVlKHNlc3Npb24pOwotCQkJcmV0dXJuIC1FTk9NRU07Ci0JCX0KLQotCQlpZiAoY29weV9mcm9tX3VzZXIoYnVmLCByZXEtPnJkX2RhdGEsIHJlcS0+cmRfc2l6ZSkpIHsKLQkJCWtmcmVlKGJ1Zik7Ci0JCQlrZnJlZShzZXNzaW9uKTsKLQkJCXJldHVybiAtRUZBVUxUOwotCQl9Ci0KLQkJc2Vzc2lvbi0+aGlkID0gaGlkX3BhcnNlX3JlcG9ydChidWYsIHJlcS0+cmRfc2l6ZSk7Ci0KLQkJa2ZyZWUoYnVmKTsKLQotCQlpZiAoIXNlc3Npb24tPmhpZCkgewotCQkJa2ZyZWUoc2Vzc2lvbik7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCX0KLQotCWlmICghc2Vzc2lvbi0+aGlkKSB7Ci0JCXNlc3Npb24tPmlucHV0ID0gaW5wdXRfYWxsb2NhdGVfZGV2aWNlKCk7Ci0JCWlmICghc2Vzc2lvbi0+aW5wdXQpIHsKLQkJCWtmcmVlKHNlc3Npb24pOwotCQkJcmV0dXJuIC1FTk9NRU07Ci0JCX0KLQl9Ci0KIAlkb3duX3dyaXRlKCZoaWRwX3Nlc3Npb25fc2VtKTsKIAogCXMgPSBfX2hpZHBfZ2V0X3Nlc3Npb24oJmJ0X3NrKGN0cmxfc29jay0+c2spLT5kc3QpOwpAQCAtODE2LDE0ICs4MzcsMTcgQEAKIAlzZXNzaW9uLT5mbGFncyAgID0gcmVxLT5mbGFncyAmICgxIDw8IEhJRFBfQkxVRVRPT1RIX1ZFTkRPUl9JRCk7CiAJc2Vzc2lvbi0+aWRsZV90byA9IHJlcS0+aWRsZV90bzsKIAotCWlmIChzZXNzaW9uLT5pbnB1dCkgewotCQllcnIgPSBoaWRwX3NldHVwX2lucHV0KHNlc3Npb24sIHJlcSk7Ci0JCWlmIChlcnIgPCAwKQotCQkJZ290byBmYWlsZWQ7CisJaWYgKHJlcS0+cmRfc2l6ZSA+IDApIHsKKwkJZXJyID0gaGlkcF9zZXR1cF9oaWQoc2Vzc2lvbiwgcmVxKTsKKwkJaWYgKGVyciAmJiBlcnIgIT0gLUVOT0RFVikKKwkJCWdvdG8gZXJyX3NrYjsKIAl9CiAKLQlpZiAoc2Vzc2lvbi0+aGlkKQotCQloaWRwX3NldHVwX2hpZChzZXNzaW9uLCByZXEpOworCWlmICghc2Vzc2lvbi0+aGlkKSB7CisJCWVyciA9IGhpZHBfc2V0dXBfaW5wdXQoc2Vzc2lvbiwgcmVxKTsKKwkJaWYgKGVyciA8IDApCisJCQlnb3RvIGVycl9za2I7CisJfQogCiAJX19oaWRwX2xpbmtfc2Vzc2lvbihzZXNzaW9uKTsKIApAQCAtODUwLDE3ICs4NzQsMTYgQEAKIAogCV9faGlkcF91bmxpbmtfc2Vzc2lvbihzZXNzaW9uKTsKIAotCWlmIChzZXNzaW9uLT5pbnB1dCkgeworCWlmIChzZXNzaW9uLT5pbnB1dCkKIAkJaW5wdXRfdW5yZWdpc3Rlcl9kZXZpY2Uoc2Vzc2lvbi0+aW5wdXQpOwotCQlzZXNzaW9uLT5pbnB1dCA9IE5VTEw7IC8qIGRvbid0IHRyeSB0byBmcmVlIGl0IGhlcmUgKi8KLQl9Ci0KKwlpZiAoc2Vzc2lvbi0+aGlkKQorCQloaWRfZGVzdHJveV9kZXZpY2Uoc2Vzc2lvbi0+aGlkKTsKK2Vycl9za2I6CisJc2tiX3F1ZXVlX3B1cmdlKCZzZXNzaW9uLT5jdHJsX3RyYW5zbWl0KTsKKwlza2JfcXVldWVfcHVyZ2UoJnNlc3Npb24tPmludHJfdHJhbnNtaXQpOwogZmFpbGVkOgogCXVwX3dyaXRlKCZoaWRwX3Nlc3Npb25fc2VtKTsKIAotCWlmIChzZXNzaW9uLT5oaWQpCi0JCWhpZF9mcmVlX2RldmljZShzZXNzaW9uLT5oaWQpOwotCiAJaW5wdXRfZnJlZV9kZXZpY2Uoc2Vzc2lvbi0+aW5wdXQpOwogCWtmcmVlKHNlc3Npb24pOwogCXJldHVybiBlcnI7CkBAIC05NTAsMTggKzk3Myw0MyBAQAogCXJldHVybiBlcnI7CiB9CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGlkX2RldmljZV9pZCBoaWRwX3RhYmxlW10gPSB7CisJeyBISURfQkxVRVRPT1RIX0RFVklDRShISURfQU5ZX0lELCBISURfQU5ZX0lEKSB9LAorCXsgfQorfTsKKworc3RhdGljIHN0cnVjdCBoaWRfZHJpdmVyIGhpZHBfZHJpdmVyID0geworCS5uYW1lID0gImdlbmVyaWMtYmx1ZXRvb3RoIiwKKwkuaWRfdGFibGUgPSBoaWRwX3RhYmxlLAorfTsKKwogc3RhdGljIGludCBfX2luaXQgaGlkcF9pbml0KHZvaWQpCiB7CisJaW50IHJldDsKKwogCWwyY2FwX2xvYWQoKTsKIAogCUJUX0lORk8oIkhJRFAgKEh1bWFuIEludGVyZmFjZSBFbXVsYXRpb24pIHZlciAlcyIsIFZFUlNJT04pOwogCi0JcmV0dXJuIGhpZHBfaW5pdF9zb2NrZXRzKCk7CisJcmV0ID0gaGlkX3JlZ2lzdGVyX2RyaXZlcigmaGlkcF9kcml2ZXIpOworCWlmIChyZXQpCisJCWdvdG8gZXJyOworCisJcmV0ID0gaGlkcF9pbml0X3NvY2tldHMoKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycl9kcnY7CisKKwlyZXR1cm4gMDsKK2Vycl9kcnY6CisJaGlkX3VucmVnaXN0ZXJfZHJpdmVyKCZoaWRwX2RyaXZlcik7CitlcnI6CisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IGhpZHBfZXhpdCh2b2lkKQogewogCWhpZHBfY2xlYW51cF9zb2NrZXRzKCk7CisJaGlkX3VucmVnaXN0ZXJfZHJpdmVyKCZoaWRwX2RyaXZlcik7CiB9CiAKIG1vZHVsZV9pbml0KGhpZHBfaW5pdCk7CmRpZmYgLS1naXQgYS9uZXQvYmx1ZXRvb3RoL2hpZHAvaGlkcC5oIGIvbmV0L2JsdWV0b290aC9oaWRwL2hpZHAuaAppbmRleCAzNDNmYjA1Li5lNTAzYzg5IDEwMDY0NAotLS0gYS9uZXQvYmx1ZXRvb3RoL2hpZHAvaGlkcC5oCisrKyBiL25ldC9ibHVldG9vdGgvaGlkcC9oaWRwLmgKQEAgLTE1MSw2ICsxNTEsOCBAQAogCiAJc3RydWN0IHNrX2J1ZmZfaGVhZCBjdHJsX3RyYW5zbWl0OwogCXN0cnVjdCBza19idWZmX2hlYWQgaW50cl90cmFuc21pdDsKKworCXN0cnVjdCBoaWRwX2Nvbm5hZGRfcmVxICpyZXE7CiB9OwogCiBzdGF0aWMgaW5saW5lIHZvaWQgaGlkcF9zY2hlZHVsZShzdHJ1Y3QgaGlkcF9zZXNzaW9uICpzZXNzaW9uKQpkaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9icl9uZXRmaWx0ZXIuYyBiL25ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyLmMKaW5kZXggYTRhYmVkNS4uZmE1Y2RhNCAxMDA2NDQKLS0tIGEvbmV0L2JyaWRnZS9icl9uZXRmaWx0ZXIuYworKysgYi9uZXQvYnJpZGdlL2JyX25ldGZpbHRlci5jCkBAIC03MTksNyArNzE5LDcgQEAKIAkJcmV0dXJuIE5GX0FDQ0VQVDsKIAl9CiAJKmQgPSAoc3RydWN0IG5ldF9kZXZpY2UgKilpbjsKLQlORl9IT09LKE5GX0FSUCwgTkZfQVJQX0ZPUldBUkQsIHNrYiwgKHN0cnVjdCBuZXRfZGV2aWNlICopaW4sCisJTkZfSE9PSyhORlBST1RPX0FSUCwgTkZfQVJQX0ZPUldBUkQsIHNrYiwgKHN0cnVjdCBuZXRfZGV2aWNlICopaW4sCiAJCShzdHJ1Y3QgbmV0X2RldmljZSAqKW91dCwgYnJfbmZfZm9yd2FyZF9maW5pc2gpOwogCiAJcmV0dXJuIE5GX1NUT0xFTjsKZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWcgYi9uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnCmluZGV4IDM2NmQzZTlkLi5iYTZmNzNlIDEwMDY0NAotLS0gYS9uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnCisrKyBiL25ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWcKQEAgLTQsNiArNCw3IEBACiAKIG1lbnVjb25maWcgQlJJREdFX05GX0VCVEFCTEVTCiAJdHJpc3RhdGUgIkV0aGVybmV0IEJyaWRnZSB0YWJsZXMgKGVidGFibGVzKSBzdXBwb3J0IgorCWRlcGVuZHMgb24gQlJJREdFICYmIEJSSURHRV9ORVRGSUxURVIKIAlzZWxlY3QgTkVURklMVEVSX1hUQUJMRVMKIAloZWxwCiAJICBlYnRhYmxlcyBpcyBhIGdlbmVyYWwsIGV4dGVuc2libGUgZnJhbWUvcGFja2V0IGlkZW50aWZpY2F0aW9uCmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jIGIvbmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYwppbmRleCA1YmI4OGViLi4wZmEyMDhlIDEwMDY0NAotLS0gYS9uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jCisrKyBiL25ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmMKQEAgLTMwNSwyMyArMzA1LDE0IEBACiAJcmV0dXJuIE5VTEw7CiB9CiAKLSNpZm5kZWYgQ09ORklHX0tNT0QKLSNkZWZpbmUgZmluZF9pbmxpc3RfbG9jayhoLG4scCxlLG0pIGZpbmRfaW5saXN0X2xvY2tfbm9sb2FkKChoKSwobiksKGUpLChtKSkKLSNlbHNlCiBzdGF0aWMgdm9pZCAqCiBmaW5kX2lubGlzdF9sb2NrKHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQsIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnByZWZpeCwKICAgIGludCAqZXJyb3IsIHN0cnVjdCBtdXRleCAqbXV0ZXgpCiB7Ci0Jdm9pZCAqcmV0OwotCi0JcmV0ID0gZmluZF9pbmxpc3RfbG9ja19ub2xvYWQoaGVhZCwgbmFtZSwgZXJyb3IsIG11dGV4KTsKLQlpZiAoIXJldCkgewotCQlyZXF1ZXN0X21vZHVsZSgiJXMlcyIsIHByZWZpeCwgbmFtZSk7Ci0JCXJldCA9IGZpbmRfaW5saXN0X2xvY2tfbm9sb2FkKGhlYWQsIG5hbWUsIGVycm9yLCBtdXRleCk7Ci0JfQotCXJldHVybiByZXQ7CisJcmV0dXJuIHRyeV90aGVuX3JlcXVlc3RfbW9kdWxlKAorCQkJZmluZF9pbmxpc3RfbG9ja19ub2xvYWQoaGVhZCwgbmFtZSwgZXJyb3IsIG11dGV4KSwKKwkJCSIlcyVzIiwgcHJlZml4LCBuYW1lKTsKIH0KLSNlbmRpZgogCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBlYnRfdGFibGUgKgogZmluZF90YWJsZV9sb2NrKGNvbnN0IGNoYXIgKm5hbWUsIGludCAqZXJyb3IsIHN0cnVjdCBtdXRleCAqbXV0ZXgpCmRpZmYgLS1naXQgYS9uZXQvY2FuL2FmX2Nhbi5jIGIvbmV0L2Nhbi9hZl9jYW4uYwppbmRleCA4MDM1ZmJmNS4uN2Q0ZDJiMyAxMDA2NDQKLS0tIGEvbmV0L2Nhbi9hZl9jYW4uYworKysgYi9uZXQvY2FuL2FmX2Nhbi5jCkBAIC0xMjgsOCArMTI4LDggQEAKIAlpZiAobmV0ICE9ICZpbml0X25ldCkKIAkJcmV0dXJuIC1FQUZOT1NVUFBPUlQ7CiAKLSNpZmRlZiBDT05GSUdfS01PRAotCS8qIHRyeSB0byBsb2FkIHByb3RvY29sIG1vZHVsZSwgd2hlbiBDT05GSUdfS01PRCBpcyBkZWZpbmVkICovCisjaWZkZWYgQ09ORklHX01PRFVMRVMKKwkvKiB0cnkgdG8gbG9hZCBwcm90b2NvbCBtb2R1bGUga2VybmVsIGlzIG1vZHVsYXIgKi8KIAlpZiAoIXByb3RvX3RhYltwcm90b2NvbF0pIHsKIAkJZXJyID0gcmVxdWVzdF9tb2R1bGUoImNhbi1wcm90by0lZCIsIHByb3RvY29sKTsKIApkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZGF0YWdyYW0uYyBiL25ldC9jb3JlL2RhdGFncmFtLmMKaW5kZXggNTJmNTc3YS4uZWU2MzE4NCAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvZGF0YWdyYW0uYworKysgYi9uZXQvY29yZS9kYXRhZ3JhbS5jCkBAIC05LDcgKzksNyBAQAogICoJaWRlbnRpY2FsIHJlY3Ztc2coKSBjb2RlLiBTbyB3ZSBzaGFyZSBpdCBoZXJlLiBUaGUgcG9sbCB3YXMKICAqCXNoYXJlZCBiZWZvcmUgYnV0IGJ1cmllZCBpbiB1ZHAuYyBzbyBJIG1vdmVkIGl0LgogICoKLSAqCUF1dGhvcnM6CUFsYW4gQ294IDxhbGFuQHJlZGhhdC5jb20+LiAoZGF0YWdyYW1fcG9sbCgpIGZyb20gb2xkCisgKglBdXRob3JzOglBbGFuIENveCA8YWxhbkBseG9yZ3VrLnVrdXUub3JnLnVrPi4gKGRhdGFncmFtX3BvbGwoKSBmcm9tIG9sZAogICoJCQkJCQkgICAgIHVkcC5jIGNvZGUpCiAgKgogICoJRml4ZXM6CmRpZmYgLS1naXQgYS9uZXQvY29yZS9kZXYuYyBiL25ldC9jb3JlL2Rldi5jCmluZGV4IDE0MDhhMDgzLi5iOGE0ZmQwIDEwMDY0NAotLS0gYS9uZXQvY29yZS9kZXYuYworKysgYi9uZXQvY29yZS9kZXYuYwpAQCAtOTI0LDEwICs5MjQsMTAgQEAKIAkJc3RybGNweShkZXYtPm5hbWUsIG5ld25hbWUsIElGTkFNU0laKTsKIAogcm9sbGJhY2s6Ci0JZXJyID0gZGV2aWNlX3JlbmFtZSgmZGV2LT5kZXYsIGRldi0+bmFtZSk7Ci0JaWYgKGVycikgeworCXJldCA9IGRldmljZV9yZW5hbWUoJmRldi0+ZGV2LCBkZXYtPm5hbWUpOworCWlmIChyZXQpIHsKIAkJbWVtY3B5KGRldi0+bmFtZSwgb2xkbmFtZSwgSUZOQU1TSVopOwotCQlyZXR1cm4gZXJyOworCQlyZXR1cm4gcmV0OwogCX0KIAogCXdyaXRlX2xvY2tfYmgoJmRldl9iYXNlX2xvY2spOwpAQCAtNDk1Niw4ICs0OTU2LDYgQEAKIEVYUE9SVF9TWU1CT0woYnJfZmRiX3B1dF9ob29rKTsKICNlbmRpZgogCi0jaWZkZWYgQ09ORklHX0tNT0QKIEVYUE9SVF9TWU1CT0woZGV2X2xvYWQpOwotI2VuZGlmCiAKIEVYUE9SVF9QRVJfQ1BVX1NZTUJPTChzb2Z0bmV0X2RhdGEpOwpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZGV2X21jYXN0LmMgYi9uZXQvY29yZS9kZXZfbWNhc3QuYwppbmRleCA1NDAyYjNiLi45ZTJmYTM5IDEwMDY0NAotLS0gYS9uZXQvY29yZS9kZXZfbWNhc3QuYworKysgYi9uZXQvY29yZS9kZXZfbWNhc3QuYwpAQCAtNiw3ICs2LDcgQEAKICAqCQlSaWNoYXJkIFVuZGVyd29vZCA8cmljaGFyZEB3dXp6LmRlbW9uLmNvLnVrPgogICoKICAqCVN0aXIgZnJpZWQgdG9nZXRoZXIgZnJvbSB0aGUgSVAgbXVsdGljYXN0IGFuZCBDQVAgcGF0Y2hlcyBhYm92ZQotICoJCUFsYW4gQ294IDxBbGFuLkNveEBsaW51eC5vcmc+CisgKgkJQWxhbiBDb3ggPGFsYW5AbHhvcmd1ay51a3V1Lm9yZy51az4KICAqCiAgKglGaXhlczoKICAqCQlBbGFuIENveAk6CVVwZGF0ZSB0aGUgZGV2aWNlIG9uIGEgcmVhbCBkZWxldGUKZGlmZiAtLWdpdCBhL25ldC9jb3JlL25ldF9uYW1lc3BhY2UuYyBiL25ldC9jb3JlL25ldF9uYW1lc3BhY2UuYwppbmRleCBiMGRjODE4Li5mMWQwN2I1IDEwMDY0NAotLS0gYS9uZXQvY29yZS9uZXRfbmFtZXNwYWNlLmMKKysrIGIvbmV0L2NvcmUvbmV0X25hbWVzcGFjZS5jCkBAIC05Niw3ICs5Niw3IEBACiAJCXJldHVybjsKIAl9CiAjZW5kaWYKLQorCWtmcmVlKG5ldC0+Z2VuKTsKIAlrbWVtX2NhY2hlX2ZyZWUobmV0X2NhY2hlcCwgbmV0KTsKIH0KIApkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvcGt0Z2VuLmMgYi9uZXQvY29yZS9wa3RnZW4uYwppbmRleCBhNzU2ODQ3Li45OWY2NTZkIDEwMDY0NAotLS0gYS9uZXQvY29yZS9wa3RnZW4uYworKysgYi9uZXQvY29yZS9wa3RnZW4uYwpAQCAtMjQ3NCw3ICsyNDc0LDcgQEAKIAkJCQlpZiAocmV0IDwgMCkgewogCQkJCQlwcmludGsoS0VSTl9FUlIgIkVycm9yIGV4cGFuZGluZyAiCiAJCQkJCSAgICAgICAiaXBzZWMgcGFja2V0ICVkXG4iLHJldCk7Ci0JCQkJCXJldHVybiAwOworCQkJCQlnb3RvIGVycjsKIAkJCQl9CiAJCQl9CiAKQEAgLTI0ODQsOCArMjQ4NCw3IEBACiAJCQlpZiAocmV0KSB7CiAJCQkJcHJpbnRrKEtFUk5fRVJSICJFcnJvciBjcmVhdGluZyBpcHNlYyAiCiAJCQkJICAgICAgICJwYWNrZXQgJWRcbiIscmV0KTsKLQkJCQlrZnJlZV9za2Ioc2tiKTsKLQkJCQlyZXR1cm4gMDsKKwkJCQlnb3RvIGVycjsKIAkJCX0KIAkJCS8qIHJlc3RvcmUgbGwgKi8KIAkJCWV0aCA9IChfX3U4ICopIHNrYl9wdXNoKHNrYiwgRVRIX0hMRU4pOwpAQCAtMjQ5NCw2ICsyNDkzLDkgQEAKIAkJfQogCX0KIAlyZXR1cm4gMTsKK2VycjoKKwlrZnJlZV9za2Ioc2tiKTsKKwlyZXR1cm4gMDsKIH0KICNlbmRpZgogCmRpZmYgLS1naXQgYS9uZXQvY29yZS9ydG5ldGxpbmsuYyBiL25ldC9jb3JlL3J0bmV0bGluay5jCmluZGV4IDM2MzAxMzEuLjMxZjI5ZDIgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL3J0bmV0bGluay5jCisrKyBiL25ldC9jb3JlL3J0bmV0bGluay5jCkBAIC0xMDQwLDcgKzEwNDAsNyBAQAogCXN0cnVjdCBubGF0dHIgKmxpbmtpbmZvW0lGTEFfSU5GT19NQVgrMV07CiAJaW50IGVycjsKIAotI2lmZGVmIENPTkZJR19LTU9ECisjaWZkZWYgQ09ORklHX01PRFVMRVMKIHJlcGxheToKICNlbmRpZgogCWVyciA9IG5sbXNnX3BhcnNlKG5saCwgc2l6ZW9mKCppZm0pLCB0YiwgSUZMQV9NQVgsIGlmbGFfcG9saWN5KTsKQEAgLTExMjksNyArMTEyOSw3IEBACiAJCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAKIAkJaWYgKCFvcHMpIHsKLSNpZmRlZiBDT05GSUdfS01PRAorI2lmZGVmIENPTkZJR19NT0RVTEVTCiAJCQlpZiAoa2luZFswXSkgewogCQkJCV9fcnRubF91bmxvY2soKTsKIAkJCQlyZXF1ZXN0X21vZHVsZSgicnRubC1saW5rLSVzIiwga2luZCk7CmRpZmYgLS1naXQgYS9uZXQvY29yZS9za2JfZG1hX21hcC5jIGIvbmV0L2NvcmUvc2tiX2RtYV9tYXAuYwppbmRleCAxZjQ5YWZjLi44NjIzNDkyIDEwMDY0NAotLS0gYS9uZXQvY29yZS9za2JfZG1hX21hcC5jCisrKyBiL25ldC9jb3JlL3NrYl9kbWFfbWFwLmMKQEAgLTM1LDcgKzM1LDcgQEAKIAlyZXR1cm4gMDsKIAogdW53aW5kOgotCXdoaWxlIChpLS0gPj0gMCkgeworCXdoaWxlICgtLWkgPj0gMCkgewogCQlza2JfZnJhZ190ICpmcCA9ICZzcC0+ZnJhZ3NbaV07CiAKIAkJZG1hX3VubWFwX3BhZ2UoZGV2LCBzcC0+ZG1hX21hcHNbaSArIDFdLApkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvc2tidWZmLmMgYi9uZXQvY29yZS9za2J1ZmYuYwppbmRleCA3ZjdiYjFhLi40ZTIyZTNhIDEwMDY0NAotLS0gYS9uZXQvY29yZS9za2J1ZmYuYworKysgYi9uZXQvY29yZS9za2J1ZmYuYwpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKglSb3V0aW5lcyBoYXZpbmcgdG8gZG8gd2l0aCB0aGUgJ3N0cnVjdCBza19idWZmJyBtZW1vcnkgaGFuZGxlcnMuCiAgKgotICoJQXV0aG9yczoJQWxhbiBDb3ggPGlpaXRhY0BweXIuc3dhbi5hYy51az4KKyAqCUF1dGhvcnM6CUFsYW4gQ294IDxhbGFuQGx4b3JndWsudWt1dS5vcmcudWs+CiAgKgkJCUZsb3JpYW4gTGEgUm9jaGUgPHJ6c2ZsQHJ6LnVuaS1zYi5kZT4KICAqCiAgKglGaXhlczoKZGlmZiAtLWdpdCBhL25ldC9jb3JlL3N0cmVhbS5jIGIvbmV0L2NvcmUvc3RyZWFtLmMKaW5kZXggYTZiMzQzNy4uODcyN2NlYSAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvc3RyZWFtLmMKKysrIGIvbmV0L2NvcmUvc3RyZWFtLmMKQEAgLTksNyArOSw3IEBACiAgKgogICogICAgIEF1dGhvcnM6ICAgICAgICBBcm5hbGRvIENhcnZhbGhvIGRlIE1lbG8gPGFjbWVAY29uZWN0aXZhLmNvbS5icj4KICAqICAgICAgICAgICAgICAgICAgICAgKGZyb20gb2xkIHRjcC5jIGNvZGUpCi0gKiAgICAgICAgICAgICAgICAgICAgIEFsYW4gQ294IDxhbGFuQHJlZGhhdC5jb20+IChCb3Jyb3dlZCBjb21tZW50cyA4LSkpCisgKiAgICAgICAgICAgICAgICAgICAgIEFsYW4gQ294IDxhbGFuQGx4b3JndWsudWt1dS5vcmcudWs+IChCb3Jyb3dlZCBjb21tZW50cyA4LSkpCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgpkaWZmIC0tZ2l0IGEvbmV0L2RjY3AvY2NpZC5jIGIvbmV0L2RjY3AvY2NpZC5jCmluZGV4IDQ4MDk3NTNkMS4uOGZlOTMxYSAxMDA2NDQKLS0tIGEvbmV0L2RjY3AvY2NpZC5jCisrKyBiL25ldC9kY2NwL2NjaWQuYwpAQCAtMTU0LDcgKzE1NCw3IEBACiAJc3RydWN0IGNjaWQgKmNjaWQgPSBOVUxMOwogCiAJY2NpZHNfcmVhZF9sb2NrKCk7Ci0jaWZkZWYgQ09ORklHX0tNT0QKKyNpZmRlZiBDT05GSUdfTU9EVUxFUwogCWlmIChjY2lkc1tpZF0gPT0gTlVMTCkgewogCQkvKiBXZSBvbmx5IHRyeSB0byBsb2FkIGlmIGluIHByb2Nlc3MgY29udGV4dCAqLwogCQljY2lkc19yZWFkX3VubG9jaygpOwpkaWZmIC0tZ2l0IGEvbmV0L2RjY3AvaXB2Ni5jIGIvbmV0L2RjY3AvaXB2Ni5jCmluZGV4IDExMDYyNzguLmQ0Y2UxMjIgMTAwNjQ0Ci0tLSBhL25ldC9kY2NwL2lwdjYuYworKysgYi9uZXQvZGNjcC9pcHY2LmMKQEAgLTI1OSw3ICsyNTksNyBAQAogCWZsLmZsNl9mbG93bGFiZWwgPSAwOwogCWZsLm9pZiA9IGlyZXE2LT5paWY7CiAJZmwuZmxfaXBfZHBvcnQgPSBpbmV0X3JzayhyZXEpLT5ybXRfcG9ydDsKLQlmbC5mbF9pcF9zcG9ydCA9IGluZXRfc2soc2spLT5zcG9ydDsKKwlmbC5mbF9pcF9zcG9ydCA9IGluZXRfcnNrKHJlcSktPmxvY19wb3J0OwogCXNlY3VyaXR5X3JlcV9jbGFzc2lmeV9mbG93KHJlcSwgJmZsKTsKIAogCW9wdCA9IG5wLT5vcHQ7CkBAIC01NTgsNyArNTU4LDcgQEAKIAkJaXB2Nl9hZGRyX2NvcHkoJmZsLmZsNl9zcmMsICZpcmVxNi0+bG9jX2FkZHIpOwogCQlmbC5vaWYgPSBzay0+c2tfYm91bmRfZGV2X2lmOwogCQlmbC5mbF9pcF9kcG9ydCA9IGluZXRfcnNrKHJlcSktPnJtdF9wb3J0OwotCQlmbC5mbF9pcF9zcG9ydCA9IGluZXRfc2soc2spLT5zcG9ydDsKKwkJZmwuZmxfaXBfc3BvcnQgPSBpbmV0X3JzayhyZXEpLT5sb2NfcG9ydDsKIAkJc2VjdXJpdHlfc2tfY2xhc3NpZnlfZmxvdyhzaywgJmZsKTsKIAogCQlpZiAoaXA2X2RzdF9sb29rdXAoc2ssICZkc3QsICZmbCkpCmRpZmYgLS1naXQgYS9uZXQvZGNjcC9taW5pc29ja3MuYyBiL25ldC9kY2NwL21pbmlzb2Nrcy5jCmluZGV4IGIyODA0ZTJkLi5lNmJmOTllIDEwMDY0NAotLS0gYS9uZXQvZGNjcC9taW5pc29ja3MuYworKysgYi9uZXQvZGNjcC9taW5pc29ja3MuYwpAQCAtMzA5LDYgKzMwOSw3IEBACiAJc3RydWN0IGRjY3BfcmVxdWVzdF9zb2NrICpkcmVxID0gZGNjcF9yc2socmVxKTsKIAogCWluZXRfcnNrKHJlcSktPnJtdF9wb3J0CSAgPSBkY2NwX2hkcihza2IpLT5kY2NwaF9zcG9ydDsKKwlpbmV0X3JzayhyZXEpLT5sb2NfcG9ydAkgID0gZGNjcF9oZHIoc2tiKS0+ZGNjcGhfZHBvcnQ7CiAJaW5ldF9yc2socmVxKS0+YWNrZWQJICA9IDA7CiAJcmVxLT5yY3Zfd25kCQkgID0gc3lzY3RsX2RjY3BfZmVhdF9zZXF1ZW5jZV93aW5kb3c7CiAJZHJlcS0+ZHJlcV90aW1lc3RhbXBfZWNobyA9IDA7CmRpZmYgLS1naXQgYS9uZXQvZGNjcC9vdXRwdXQuYyBiL25ldC9kY2NwL291dHB1dC5jCmluZGV4IGQwNjk0NWMuLjgwOWQ4MDMgMTAwNjQ0Ci0tLSBhL25ldC9kY2NwL291dHB1dC5jCisrKyBiL25ldC9kY2NwL291dHB1dC5jCkBAIC0zNDcsNyArMzQ3LDcgQEAKIAkvKiBCdWlsZCBhbmQgY2hlY2tzdW0gaGVhZGVyICovCiAJZGggPSBkY2NwX3plcm9lZF9oZHIoc2tiLCBkY2NwX2hlYWRlcl9zaXplKTsKIAotCWRoLT5kY2NwaF9zcG9ydAk9IGluZXRfc2soc2spLT5zcG9ydDsKKwlkaC0+ZGNjcGhfc3BvcnQJPSBpbmV0X3JzayhyZXEpLT5sb2NfcG9ydDsKIAlkaC0+ZGNjcGhfZHBvcnQJPSBpbmV0X3JzayhyZXEpLT5ybXRfcG9ydDsKIAlkaC0+ZGNjcGhfZG9mZgk9IChkY2NwX2hlYWRlcl9zaXplICsKIAkJCSAgIERDQ1BfU0tCX0NCKHNrYiktPmRjY3BkX29wdF9sZW4pIC8gNDsKZGlmZiAtLWdpdCBhL25ldC9kZWNuZXQvZG5fZGV2LmMgYi9uZXQvZGVjbmV0L2RuX2Rldi5jCmluZGV4IDJmMGFjM2MuLjI4ZTI2YmQgMTAwNjQ0Ci0tLSBhL25ldC9kZWNuZXQvZG5fZGV2LmMKKysrIGIvbmV0L2RlY25ldC9kbl9kZXYuYwpAQCAtMTUyLDcgKzE1Miw3IEBACiAKICNkZWZpbmUgRE5fREVWX0xJU1RfU0laRSBBUlJBWV9TSVpFKGRuX2Rldl9saXN0KQogCi0jZGVmaW5lIEROX0RFVl9QQVJNU19PRkZTRVQoeCkgKChpbnQpICgoY2hhciAqKSAmKChzdHJ1Y3QgZG5fZGV2X3Bhcm1zICopMCktPngpKQorI2RlZmluZSBETl9ERVZfUEFSTVNfT0ZGU0VUKHgpIG9mZnNldG9mKHN0cnVjdCBkbl9kZXZfcGFybXMsIHgpCiAKICNpZmRlZiBDT05GSUdfU1lTQ1RMCiAKQEAgLTE2Niw3ICsxNjYsNyBAQAogCiBzdGF0aWMgaW50IGRuX2ZvcndhcmRpbmdfcHJvYyhjdGxfdGFibGUgKiwgaW50LCBzdHJ1Y3QgZmlsZSAqLAogCQkJdm9pZCBfX3VzZXIgKiwgc2l6ZV90ICosIGxvZmZfdCAqKTsKLXN0YXRpYyBpbnQgZG5fZm9yd2FyZGluZ19zeXNjdGwoY3RsX3RhYmxlICp0YWJsZSwgaW50IF9fdXNlciAqbmFtZSwgaW50IG5sZW4sCitzdGF0aWMgaW50IGRuX2ZvcndhcmRpbmdfc3lzY3RsKGN0bF90YWJsZSAqdGFibGUsCiAJCQl2b2lkIF9fdXNlciAqb2xkdmFsLCBzaXplX3QgX191c2VyICpvbGRsZW5wLAogCQkJdm9pZCBfX3VzZXIgKm5ld3ZhbCwgc2l6ZV90IG5ld2xlbik7CiAKQEAgLTMxOCw3ICszMTgsNyBAQAogI2VuZGlmCiB9CiAKLXN0YXRpYyBpbnQgZG5fZm9yd2FyZGluZ19zeXNjdGwoY3RsX3RhYmxlICp0YWJsZSwgaW50IF9fdXNlciAqbmFtZSwgaW50IG5sZW4sCitzdGF0aWMgaW50IGRuX2ZvcndhcmRpbmdfc3lzY3RsKGN0bF90YWJsZSAqdGFibGUsCiAJCQl2b2lkIF9fdXNlciAqb2xkdmFsLCBzaXplX3QgX191c2VyICpvbGRsZW5wLAogCQkJdm9pZCBfX3VzZXIgKm5ld3ZhbCwgc2l6ZV90IG5ld2xlbikKIHsKQEAgLTQ5MCw5ICs0OTAsNyBAQAogCQlyZXR1cm4gLUVGQVVMVDsKIAlpZnItPmlmcl9uYW1lW0lGTkFNU0laLTFdID0gMDsKIAotI2lmZGVmIENPTkZJR19LTU9ECiAJZGV2X2xvYWQoJmluaXRfbmV0LCBpZnItPmlmcl9uYW1lKTsKLSNlbmRpZgogCiAJc3dpdGNoKGNtZCkgewogCQljYXNlIFNJT0NHSUZBRERSOgpkaWZmIC0tZ2l0IGEvbmV0L2RlY25ldC9zeXNjdGxfbmV0X2RlY25ldC5jIGIvbmV0L2RlY25ldC9zeXNjdGxfbmV0X2RlY25ldC5jCmluZGV4IDIyODA2N2MuLjM2NDAwYjIgMTAwNjQ0Ci0tLSBhL25ldC9kZWNuZXQvc3lzY3RsX25ldF9kZWNuZXQuYworKysgYi9uZXQvZGVjbmV0L3N5c2N0bF9uZXRfZGVjbmV0LmMKQEAgLTEzMiw3ICsxMzIsNyBAQAogfQogCiAKLXN0YXRpYyBpbnQgZG5fbm9kZV9hZGRyZXNzX3N0cmF0ZWd5KGN0bF90YWJsZSAqdGFibGUsIGludCBfX3VzZXIgKm5hbWUsIGludCBubGVuLAorc3RhdGljIGludCBkbl9ub2RlX2FkZHJlc3Nfc3RyYXRlZ3koY3RsX3RhYmxlICp0YWJsZSwKIAkJCQl2b2lkIF9fdXNlciAqb2xkdmFsLCBzaXplX3QgX191c2VyICpvbGRsZW5wLAogCQkJCXZvaWQgX191c2VyICpuZXd2YWwsIHNpemVfdCBuZXdsZW4pCiB7CkBAIC0yMTcsNyArMjE3LDcgQEAKIH0KIAogCi1zdGF0aWMgaW50IGRuX2RlZl9kZXZfc3RyYXRlZ3koY3RsX3RhYmxlICp0YWJsZSwgaW50IF9fdXNlciAqbmFtZSwgaW50IG5sZW4sCitzdGF0aWMgaW50IGRuX2RlZl9kZXZfc3RyYXRlZ3koY3RsX3RhYmxlICp0YWJsZSwKIAkJCQl2b2lkIF9fdXNlciAqb2xkdmFsLCBzaXplX3QgX191c2VyICpvbGRsZW5wLAogCQkJCXZvaWQgX191c2VyICpuZXd2YWwsIHNpemVfdCBuZXdsZW4pCiB7CmRpZmYgLS1naXQgYS9uZXQvZHNhL0tjb25maWcgYi9uZXQvZHNhL0tjb25maWcKaW5kZXggY2RjZTRjNi4uNDkyMTFiMyAxMDA2NDQKLS0tIGEvbmV0L2RzYS9LY29uZmlnCisrKyBiL25ldC9kc2EvS2NvbmZpZwpAQCAtMSw3ICsxLDcgQEAKIG1lbnVjb25maWcgTkVUX0RTQQogCWJvb2wgIkRpc3RyaWJ1dGVkIFN3aXRjaCBBcmNoaXRlY3R1cmUgc3VwcG9ydCIKIAlkZWZhdWx0IG4KLQlkZXBlbmRzIG9uIEVYUEVSSU1FTlRBTAorCWRlcGVuZHMgb24gRVhQRVJJTUVOVEFMICYmICFTMzkwCiAJc2VsZWN0IFBIWUxJQgogCS0tLWhlbHAtLS0KIAkgIFRoaXMgYWxsb3dzIHlvdSB0byB1c2UgaGFyZHdhcmUgc3dpdGNoIGNoaXBzIHRoYXQgdXNlCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9hcnAuYyBiL25ldC9pcHY0L2FycC5jCmluZGV4IGIwNDNlZGEuLjFhOWRkNjYgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2FycC5jCisrKyBiL25ldC9pcHY0L2FycC5jCkBAIC02NjMsNyArNjYzLDcgQEAKIHZvaWQgYXJwX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAkvKiBTZW5kIGl0IG9mZiwgbWF5YmUgZmlsdGVyIGl0IHVzaW5nIGZpcmV3YWxsaW5nIGZpcnN0LiAgKi8KLQlORl9IT09LKE5GX0FSUCwgTkZfQVJQX09VVCwgc2tiLCBOVUxMLCBza2ItPmRldiwgZGV2X3F1ZXVlX3htaXQpOworCU5GX0hPT0soTkZQUk9UT19BUlAsIE5GX0FSUF9PVVQsIHNrYiwgTlVMTCwgc2tiLT5kZXYsIGRldl9xdWV1ZV94bWl0KTsKIH0KIAogLyoKQEAgLTkyOCw3ICs5MjgsNyBAQAogCiAJbWVtc2V0KE5FSUdIX0NCKHNrYiksIDAsIHNpemVvZihzdHJ1Y3QgbmVpZ2hib3VyX2NiKSk7CiAKLQlyZXR1cm4gTkZfSE9PSyhORl9BUlAsIE5GX0FSUF9JTiwgc2tiLCBkZXYsIE5VTEwsIGFycF9wcm9jZXNzKTsKKwlyZXR1cm4gTkZfSE9PSyhORlBST1RPX0FSUCwgTkZfQVJQX0lOLCBza2IsIGRldiwgTlVMTCwgYXJwX3Byb2Nlc3MpOwogCiBmcmVlc2tiOgogCWtmcmVlX3NrYihza2IpOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvY2lwc29faXB2NC5jIGIvbmV0L2lwdjQvY2lwc29faXB2NC5jCmluZGV4IDJjMGU0NTcuLjQ5MGUwMzVjIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9jaXBzb19pcHY0LmMKKysrIGIvbmV0L2lwdjQvY2lwc29faXB2NC5jCkBAIC0xMyw3ICsxMyw3IEBACiAgKi8KIAogLyoKLSAqIChjKSBDb3B5cmlnaHQgSGV3bGV0dC1QYWNrYXJkIERldmVsb3BtZW50IENvbXBhbnksIEwuUC4sIDIwMDYKKyAqIChjKSBDb3B5cmlnaHQgSGV3bGV0dC1QYWNrYXJkIERldmVsb3BtZW50IENvbXBhbnksIEwuUC4sIDIwMDYsIDIwMDgKICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgIHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CkBAIC00NywxNyArNDcsNyBAQAogI2luY2x1ZGUgPGFzbS9idWcuaD4KICNpbmNsdWRlIDxhc20vdW5hbGlnbmVkLmg+CiAKLXN0cnVjdCBjaXBzb192NF9kb21oc2hfZW50cnkgewotCWNoYXIgKmRvbWFpbjsKLQl1MzIgdmFsaWQ7Ci0Jc3RydWN0IGxpc3RfaGVhZCBsaXN0OwotCXN0cnVjdCByY3VfaGVhZCByY3U7Ci19OwotCiAvKiBMaXN0IG9mIGF2YWlsYWJsZSBET0kgZGVmaW5pdGlvbnMgKi8KLS8qIFhYWCAtIFVwZGF0ZXMgc2hvdWxkIGJlIG1pbmltYWwgc28gaGF2aW5nIGEgc2luZ2xlIGxvY2sgZm9yIHRoZQotICogY2lwc29fdjRfZG9pX2xpc3QgYW5kIHRoZSBjaXBzb192NF9kb2lfbGlzdC0+ZG9tX2xpc3Qgc2hvdWxkIGJlCi0gKiBva2F5LiAqLwogLyogWFhYIC0gVGhpcyBjdXJyZW50bHkgYXNzdW1lcyBhIG1pbmltYWwgbnVtYmVyIG9mIGRpZmZlcmVudCBET0lzIGluIHVzZSwKICAqIGlmIGluIHByYWN0aWNlIHRoZXJlIGFyZSBhIGxvdCBvZiBkaWZmZXJlbnQgRE9JcyB0aGlzIGxpc3Qgc2hvdWxkCiAgKiBwcm9iYWJseSBiZSB0dXJuZWQgaW50byBhIGhhc2ggdGFibGUgb3Igc29tZXRoaW5nIHNpbWlsYXIgc28gd2UKQEAgLTExOSw2ICsxMDksMTkgQEAKICAqIGJlIG9taXR0ZWQuICovCiAjZGVmaW5lIENJUFNPX1Y0X1RBR19STkdfQ0FUX01BWCAgICAgIDgKIAorLyogQmFzZSBsZW5ndGggb2YgdGhlIGxvY2FsIHRhZyAobm9uLXN0YW5kYXJkIHRhZykuCisgKiAgVGFnIGRlZmluaXRpb24gKG1heSBjaGFuZ2UgYmV0d2VlbiBrZXJuZWwgdmVyc2lvbnMpCisgKgorICogMCAgICAgICAgICA4ICAgICAgICAgIDE2ICAgICAgICAgMjQgICAgICAgICAzMgorICogKy0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLS0tLS0rCisgKiB8IDEwMDAwMDAwIHwgMDAwMDAxMTAgfCAzMi1iaXQgc2VjaWQgdmFsdWUgIHwKKyAqICstLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0tLS0tKworICogfCBpbiAoaG9zdCBieXRlIG9yZGVyKXwKKyAqICstLS0tLS0tLS0tKy0tLS0tLS0tLS0rCisgKgorICovCisjZGVmaW5lIENJUFNPX1Y0X1RBR19MT0NfQkxFTiAgICAgICAgIDYKKwogLyoKICAqIEhlbHBlciBGdW5jdGlvbnMKICAqLwpAQCAtMTk0LDI1ICsxOTcsNiBAQAogfQogCiAvKioKLSAqIGNpcHNvX3Y0X2RvaV9kb21oc2hfZnJlZSAtIEZyZWVzIGEgZG9tYWluIGxpc3QgZW50cnkKLSAqIEBlbnRyeTogdGhlIGVudHJ5J3MgUkNVIGZpZWxkCi0gKgotICogRGVzY3JpcHRpb246Ci0gKiBUaGlzIGZ1bmN0aW9uIGlzIGRlc2lnbmVkIHRvIGJlIHVzZWQgYXMgYSBjYWxsYmFjayB0byB0aGUgY2FsbF9yY3UoKQotICogZnVuY3Rpb24gc28gdGhhdCB0aGUgbWVtb3J5IGFsbG9jYXRlZCB0byBhIGRvbWFpbiBsaXN0IGVudHJ5IGNhbiBiZSByZWxlYXNlZAotICogc2FmZWx5LgotICoKLSAqLwotc3RhdGljIHZvaWQgY2lwc29fdjRfZG9pX2RvbWhzaF9mcmVlKHN0cnVjdCByY3VfaGVhZCAqZW50cnkpCi17Ci0Jc3RydWN0IGNpcHNvX3Y0X2RvbWhzaF9lbnRyeSAqcHRyOwotCi0JcHRyID0gY29udGFpbmVyX29mKGVudHJ5LCBzdHJ1Y3QgY2lwc29fdjRfZG9taHNoX2VudHJ5LCByY3UpOwotCWtmcmVlKHB0ci0+ZG9tYWluKTsKLQlrZnJlZShwdHIpOwotfQotCi0vKioKICAqIGNpcHNvX3Y0X2NhY2hlX2VudHJ5X2ZyZWUgLSBGcmVlcyBhIGNhY2hlIGVudHJ5CiAgKiBAZW50cnk6IHRoZSBlbnRyeSB0byBmcmVlCiAgKgpAQCAtNDU3LDcgKzQ0MSw3IEBACiAJc3RydWN0IGNpcHNvX3Y0X2RvaSAqaXRlcjsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGl0ZXIsICZjaXBzb192NF9kb2lfbGlzdCwgbGlzdCkKLQkJaWYgKGl0ZXItPmRvaSA9PSBkb2kgJiYgaXRlci0+dmFsaWQpCisJCWlmIChpdGVyLT5kb2kgPT0gZG9pICYmIGF0b21pY19yZWFkKCZpdGVyLT5yZWZjb3VudCkpCiAJCQlyZXR1cm4gaXRlcjsKIAlyZXR1cm4gTlVMTDsKIH0KQEAgLTQ5NiwxNCArNDgwLDE3IEBACiAJCQlpZiAoZG9pX2RlZi0+dHlwZSAhPSBDSVBTT19WNF9NQVBfUEFTUykKIAkJCQlyZXR1cm4gLUVJTlZBTDsKIAkJCWJyZWFrOworCQljYXNlIENJUFNPX1Y0X1RBR19MT0NBTDoKKwkJCWlmIChkb2lfZGVmLT50eXBlICE9IENJUFNPX1Y0X01BUF9MT0NBTCkKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCWJyZWFrOwogCQlkZWZhdWx0OgogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KIAl9CiAKLQlkb2lfZGVmLT52YWxpZCA9IDE7CisJYXRvbWljX3NldCgmZG9pX2RlZi0+cmVmY291bnQsIDEpOwogCUlOSVRfUkNVX0hFQUQoJmRvaV9kZWYtPnJjdSk7Ci0JSU5JVF9MSVNUX0hFQUQoJmRvaV9kZWYtPmRvbV9saXN0KTsKIAogCXNwaW5fbG9jaygmY2lwc29fdjRfZG9pX2xpc3RfbG9jayk7CiAJaWYgKGNpcHNvX3Y0X2RvaV9zZWFyY2goZG9pX2RlZi0+ZG9pKSAhPSBOVUxMKQpAQCAtNTE5LDU5ICs1MDYsMTI5IEBACiB9CiAKIC8qKgotICogY2lwc29fdjRfZG9pX3JlbW92ZSAtIFJlbW92ZSBhbiBleGlzdGluZyBET0kgZnJvbSB0aGUgQ0lQU08gcHJvdG9jb2wgZW5naW5lCi0gKiBAZG9pOiB0aGUgRE9JIHZhbHVlCi0gKiBAYXVkaXRfc2VjaWQ6IHRoZSBMU00gc2VjaWQgdG8gdXNlIGluIHRoZSBhdWRpdCBtZXNzYWdlCi0gKiBAY2FsbGJhY2s6IHRoZSBET0kgY2xlYW51cC9mcmVlIGNhbGxiYWNrCisgKiBjaXBzb192NF9kb2lfZnJlZSAtIEZyZWVzIGEgRE9JIGRlZmluaXRpb24KKyAqIEBlbnRyeTogdGhlIGVudHJ5J3MgUkNVIGZpZWxkCiAgKgogICogRGVzY3JpcHRpb246Ci0gKiBSZW1vdmVzIGEgRE9JIGRlZmluaXRpb24gZnJvbSB0aGUgQ0lQU08gZW5naW5lLCBAY2FsbGJhY2sgaXMgY2FsbGVkIHRvCi0gKiBmcmVlIGFueSBtZW1vcnkuICBUaGUgTmV0TGFiZWwgcm91dGluZXMgd2lsbCBiZSBjYWxsZWQgdG8gcmVsZWFzZSB0aGVpciBvd24KLSAqIExTTSBkb21haW4gbWFwcGluZ3MgYXMgd2VsbCBhcyBvdXIgb3duIGRvbWFpbiBsaXN0LiAgUmV0dXJucyB6ZXJvIG9uCi0gKiBzdWNjZXNzIGFuZCBuZWdhdGl2ZSB2YWx1ZXMgb24gZmFpbHVyZS4KKyAqIFRoaXMgZnVuY3Rpb24gZnJlZXMgYWxsIG9mIHRoZSBtZW1vcnkgYXNzb2NpYXRlZCB3aXRoIGEgRE9JIGRlZmluaXRpb24uCiAgKgogICovCi1pbnQgY2lwc29fdjRfZG9pX3JlbW92ZSh1MzIgZG9pLAotCQkJc3RydWN0IG5ldGxibF9hdWRpdCAqYXVkaXRfaW5mbywKLQkJCXZvaWQgKCpjYWxsYmFjaykgKHN0cnVjdCByY3VfaGVhZCAqIGhlYWQpKQordm9pZCBjaXBzb192NF9kb2lfZnJlZShzdHJ1Y3QgY2lwc29fdjRfZG9pICpkb2lfZGVmKQogewotCXN0cnVjdCBjaXBzb192NF9kb2kgKmRvaV9kZWY7Ci0Jc3RydWN0IGNpcHNvX3Y0X2RvbWhzaF9lbnRyeSAqZG9tX2l0ZXI7CisJaWYgKGRvaV9kZWYgPT0gTlVMTCkKKwkJcmV0dXJuOwogCi0Jc3Bpbl9sb2NrKCZjaXBzb192NF9kb2lfbGlzdF9sb2NrKTsKLQlkb2lfZGVmID0gY2lwc29fdjRfZG9pX3NlYXJjaChkb2kpOwotCWlmIChkb2lfZGVmICE9IE5VTEwpIHsKLQkJZG9pX2RlZi0+dmFsaWQgPSAwOwotCQlsaXN0X2RlbF9yY3UoJmRvaV9kZWYtPmxpc3QpOwotCQlzcGluX3VubG9jaygmY2lwc29fdjRfZG9pX2xpc3RfbG9jayk7Ci0JCXJjdV9yZWFkX2xvY2soKTsKLQkJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoZG9tX2l0ZXIsICZkb2lfZGVmLT5kb21fbGlzdCwgbGlzdCkKLQkJCWlmIChkb21faXRlci0+dmFsaWQpCi0JCQkJbmV0bGJsX2NmZ19tYXBfZGVsKGRvbV9pdGVyLT5kb21haW4sCi0JCQkJCQkgICBhdWRpdF9pbmZvKTsKLQkJcmN1X3JlYWRfdW5sb2NrKCk7Ci0JCWNpcHNvX3Y0X2NhY2hlX2ludmFsaWRhdGUoKTsKLQkJY2FsbF9yY3UoJmRvaV9kZWYtPnJjdSwgY2FsbGJhY2spOwotCQlyZXR1cm4gMDsKKwlzd2l0Y2ggKGRvaV9kZWYtPnR5cGUpIHsKKwljYXNlIENJUFNPX1Y0X01BUF9UUkFOUzoKKwkJa2ZyZWUoZG9pX2RlZi0+bWFwLnN0ZC0+bHZsLmNpcHNvKTsKKwkJa2ZyZWUoZG9pX2RlZi0+bWFwLnN0ZC0+bHZsLmxvY2FsKTsKKwkJa2ZyZWUoZG9pX2RlZi0+bWFwLnN0ZC0+Y2F0LmNpcHNvKTsKKwkJa2ZyZWUoZG9pX2RlZi0+bWFwLnN0ZC0+Y2F0LmxvY2FsKTsKKwkJYnJlYWs7CiAJfQotCXNwaW5fdW5sb2NrKCZjaXBzb192NF9kb2lfbGlzdF9sb2NrKTsKLQotCXJldHVybiAtRU5PRU5UOworCWtmcmVlKGRvaV9kZWYpOwogfQogCiAvKioKLSAqIGNpcHNvX3Y0X2RvaV9nZXRkZWYgLSBSZXR1cm5zIGEgcG9pbnRlciB0byBhIHZhbGlkIERPSSBkZWZpbml0aW9uCisgKiBjaXBzb192NF9kb2lfZnJlZV9yY3UgLSBGcmVlcyBhIERPSSBkZWZpbml0aW9uIHZpYSB0aGUgUkNVIHBvaW50ZXIKKyAqIEBlbnRyeTogdGhlIGVudHJ5J3MgUkNVIGZpZWxkCisgKgorICogRGVzY3JpcHRpb246CisgKiBUaGlzIGZ1bmN0aW9uIGlzIGRlc2lnbmVkIHRvIGJlIHVzZWQgYXMgYSBjYWxsYmFjayB0byB0aGUgY2FsbF9yY3UoKQorICogZnVuY3Rpb24gc28gdGhhdCB0aGUgbWVtb3J5IGFsbG9jYXRlZCB0byB0aGUgRE9JIGRlZmluaXRpb24gY2FuIGJlIHJlbGVhc2VkCisgKiBzYWZlbHkuCisgKgorICovCitzdGF0aWMgdm9pZCBjaXBzb192NF9kb2lfZnJlZV9yY3Uoc3RydWN0IHJjdV9oZWFkICplbnRyeSkKK3sKKwlzdHJ1Y3QgY2lwc29fdjRfZG9pICpkb2lfZGVmOworCisJZG9pX2RlZiA9IGNvbnRhaW5lcl9vZihlbnRyeSwgc3RydWN0IGNpcHNvX3Y0X2RvaSwgcmN1KTsKKwljaXBzb192NF9kb2lfZnJlZShkb2lfZGVmKTsKK30KKworLyoqCisgKiBjaXBzb192NF9kb2lfcmVtb3ZlIC0gUmVtb3ZlIGFuIGV4aXN0aW5nIERPSSBmcm9tIHRoZSBDSVBTTyBwcm90b2NvbCBlbmdpbmUKKyAqIEBkb2k6IHRoZSBET0kgdmFsdWUKKyAqIEBhdWRpdF9zZWNpZDogdGhlIExTTSBzZWNpZCB0byB1c2UgaW4gdGhlIGF1ZGl0IG1lc3NhZ2UKKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIFJlbW92ZXMgYSBET0kgZGVmaW5pdGlvbiBmcm9tIHRoZSBDSVBTTyBlbmdpbmUuICBUaGUgTmV0TGFiZWwgcm91dGluZXMgd2lsbAorICogYmUgY2FsbGVkIHRvIHJlbGVhc2UgdGhlaXIgb3duIExTTSBkb21haW4gbWFwcGluZ3MgYXMgd2VsbCBhcyBvdXIgb3duCisgKiBkb21haW4gbGlzdC4gIFJldHVybnMgemVybyBvbiBzdWNjZXNzIGFuZCBuZWdhdGl2ZSB2YWx1ZXMgb24gZmFpbHVyZS4KKyAqCisgKi8KK2ludCBjaXBzb192NF9kb2lfcmVtb3ZlKHUzMiBkb2ksIHN0cnVjdCBuZXRsYmxfYXVkaXQgKmF1ZGl0X2luZm8pCit7CisJc3RydWN0IGNpcHNvX3Y0X2RvaSAqZG9pX2RlZjsKKworCXNwaW5fbG9jaygmY2lwc29fdjRfZG9pX2xpc3RfbG9jayk7CisJZG9pX2RlZiA9IGNpcHNvX3Y0X2RvaV9zZWFyY2goZG9pKTsKKwlpZiAoZG9pX2RlZiA9PSBOVUxMKSB7CisJCXNwaW5fdW5sb2NrKCZjaXBzb192NF9kb2lfbGlzdF9sb2NrKTsKKwkJcmV0dXJuIC1FTk9FTlQ7CisJfQorCWlmICghYXRvbWljX2RlY19hbmRfdGVzdCgmZG9pX2RlZi0+cmVmY291bnQpKSB7CisJCXNwaW5fdW5sb2NrKCZjaXBzb192NF9kb2lfbGlzdF9sb2NrKTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisJbGlzdF9kZWxfcmN1KCZkb2lfZGVmLT5saXN0KTsKKwlzcGluX3VubG9jaygmY2lwc29fdjRfZG9pX2xpc3RfbG9jayk7CisKKwljaXBzb192NF9jYWNoZV9pbnZhbGlkYXRlKCk7CisJY2FsbF9yY3UoJmRvaV9kZWYtPnJjdSwgY2lwc29fdjRfZG9pX2ZyZWVfcmN1KTsKKworCXJldHVybiAwOworfQorCisvKioKKyAqIGNpcHNvX3Y0X2RvaV9nZXRkZWYgLSBSZXR1cm5zIGEgcmVmZXJlbmNlIHRvIGEgdmFsaWQgRE9JIGRlZmluaXRpb24KICAqIEBkb2k6IHRoZSBET0kgdmFsdWUKICAqCiAgKiBEZXNjcmlwdGlvbjoKICAqIFNlYXJjaGVzIGZvciBhIHZhbGlkIERPSSBkZWZpbml0aW9uIGFuZCBpZiBvbmUgaXMgZm91bmQgaXQgaXMgcmV0dXJuZWQgdG8KICAqIHRoZSBjYWxsZXIuICBPdGhlcndpc2UgTlVMTCBpcyByZXR1cm5lZC4gIFRoZSBjYWxsZXIgbXVzdCBlbnN1cmUgdGhhdAotICogcmN1X3JlYWRfbG9jaygpIGlzIGhlbGQgd2hpbGUgYWNjZXNzaW5nIHRoZSByZXR1cm5lZCBkZWZpbml0aW9uLgorICogcmN1X3JlYWRfbG9jaygpIGlzIGhlbGQgd2hpbGUgYWNjZXNzaW5nIHRoZSByZXR1cm5lZCBkZWZpbml0aW9uIGFuZCB0aGUgRE9JCisgKiBkZWZpbml0aW9uIHJlZmVyZW5jZSBjb3VudCBpcyBkZWNyZW1lbnRlZCB3aGVuIHRoZSBjYWxsZXIgaXMgZG9uZS4KICAqCiAgKi8KIHN0cnVjdCBjaXBzb192NF9kb2kgKmNpcHNvX3Y0X2RvaV9nZXRkZWYodTMyIGRvaSkKIHsKLQlyZXR1cm4gY2lwc29fdjRfZG9pX3NlYXJjaChkb2kpOworCXN0cnVjdCBjaXBzb192NF9kb2kgKmRvaV9kZWY7CisKKwlyY3VfcmVhZF9sb2NrKCk7CisJZG9pX2RlZiA9IGNpcHNvX3Y0X2RvaV9zZWFyY2goZG9pKTsKKwlpZiAoZG9pX2RlZiA9PSBOVUxMKQorCQlnb3RvIGRvaV9nZXRkZWZfcmV0dXJuOworCWlmICghYXRvbWljX2luY19ub3RfemVybygmZG9pX2RlZi0+cmVmY291bnQpKQorCQlkb2lfZGVmID0gTlVMTDsKKworZG9pX2dldGRlZl9yZXR1cm46CisJcmN1X3JlYWRfdW5sb2NrKCk7CisJcmV0dXJuIGRvaV9kZWY7Cit9CisKKy8qKgorICogY2lwc29fdjRfZG9pX3B1dGRlZiAtIFJlbGVhc2VzIGEgcmVmZXJlbmNlIGZvciB0aGUgZ2l2ZW4gRE9JIGRlZmluaXRpb24KKyAqIEBkb2lfZGVmOiB0aGUgRE9JIGRlZmluaXRpb24KKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIFJlbGVhc2VzIGEgRE9JIGRlZmluaXRpb24gcmVmZXJlbmNlIG9idGFpbmVkIGZyb20gY2lwc29fdjRfZG9pX2dldGRlZigpLgorICoKKyAqLwordm9pZCBjaXBzb192NF9kb2lfcHV0ZGVmKHN0cnVjdCBjaXBzb192NF9kb2kgKmRvaV9kZWYpCit7CisJaWYgKGRvaV9kZWYgPT0gTlVMTCkKKwkJcmV0dXJuOworCisJaWYgKCFhdG9taWNfZGVjX2FuZF90ZXN0KCZkb2lfZGVmLT5yZWZjb3VudCkpCisJCXJldHVybjsKKwlzcGluX2xvY2soJmNpcHNvX3Y0X2RvaV9saXN0X2xvY2spOworCWxpc3RfZGVsX3JjdSgmZG9pX2RlZi0+bGlzdCk7CisJc3Bpbl91bmxvY2soJmNpcHNvX3Y0X2RvaV9saXN0X2xvY2spOworCisJY2lwc29fdjRfY2FjaGVfaW52YWxpZGF0ZSgpOworCWNhbGxfcmN1KCZkb2lfZGVmLT5yY3UsIGNpcHNvX3Y0X2RvaV9mcmVlX3JjdSk7CiB9CiAKIC8qKgpAQCAtNTk3LDcgKzY1NCw3IEBACiAKIAlyY3VfcmVhZF9sb2NrKCk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoaXRlcl9kb2ksICZjaXBzb192NF9kb2lfbGlzdCwgbGlzdCkKLQkJaWYgKGl0ZXJfZG9pLT52YWxpZCkgeworCQlpZiAoYXRvbWljX3JlYWQoJml0ZXJfZG9pLT5yZWZjb3VudCkgPiAwKSB7CiAJCQlpZiAoZG9pX2NudCsrIDwgKnNraXBfY250KQogCQkJCWNvbnRpbnVlOwogCQkJcmV0X3ZhbCA9IGNhbGxiYWNrKGl0ZXJfZG9pLCBjYl9hcmcpOwpAQCAtNjEzLDg1ICs2NzAsNiBAQAogCXJldHVybiByZXRfdmFsOwogfQogCi0vKioKLSAqIGNpcHNvX3Y0X2RvaV9kb21oc2hfYWRkIC0gQWRkcyBhIGRvbWFpbiBlbnRyeSB0byBhIERPSSBkZWZpbml0aW9uCi0gKiBAZG9pX2RlZjogdGhlIERPSSBkZWZpbml0aW9uCi0gKiBAZG9tYWluOiB0aGUgZG9tYWluIHRvIGFkZAotICoKLSAqIERlc2NyaXB0aW9uOgotICogQWRkcyB0aGUgQGRvbWFpbiB0byB0aGUgRE9JIHNwZWNpZmllZCBieSBAZG9pX2RlZiwgdGhpcyBmdW5jdGlvbgotICogc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGJ5IGV4dGVybmFsIGZ1bmN0aW9ucyAoaS5lLiBOZXRMYWJlbCkuICBUaGlzIGZ1bmN0aW9uCi0gKiBkb2VzIGFsbG9jYXRlIG1lbW9yeS4gIFJldHVybnMgemVybyBvbiBzdWNjZXNzLCBuZWdhdGl2ZSB2YWx1ZXMgb24gZmFpbHVyZS4KLSAqCi0gKi8KLWludCBjaXBzb192NF9kb2lfZG9taHNoX2FkZChzdHJ1Y3QgY2lwc29fdjRfZG9pICpkb2lfZGVmLCBjb25zdCBjaGFyICpkb21haW4pCi17Ci0Jc3RydWN0IGNpcHNvX3Y0X2RvbWhzaF9lbnRyeSAqaXRlcjsKLQlzdHJ1Y3QgY2lwc29fdjRfZG9taHNoX2VudHJ5ICpuZXdfZG9tOwotCi0JbmV3X2RvbSA9IGt6YWxsb2Moc2l6ZW9mKCpuZXdfZG9tKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKG5ld19kb20gPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9NRU07Ci0JaWYgKGRvbWFpbikgewotCQluZXdfZG9tLT5kb21haW4gPSBrc3RyZHVwKGRvbWFpbiwgR0ZQX0tFUk5FTCk7Ci0JCWlmIChuZXdfZG9tLT5kb21haW4gPT0gTlVMTCkgewotCQkJa2ZyZWUobmV3X2RvbSk7Ci0JCQlyZXR1cm4gLUVOT01FTTsKLQkJfQotCX0KLQluZXdfZG9tLT52YWxpZCA9IDE7Ci0JSU5JVF9SQ1VfSEVBRCgmbmV3X2RvbS0+cmN1KTsKLQotCXNwaW5fbG9jaygmY2lwc29fdjRfZG9pX2xpc3RfbG9jayk7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeShpdGVyLCAmZG9pX2RlZi0+ZG9tX2xpc3QsIGxpc3QpCi0JCWlmIChpdGVyLT52YWxpZCAmJgotCQkgICAgKChkb21haW4gIT0gTlVMTCAmJiBpdGVyLT5kb21haW4gIT0gTlVMTCAmJgotCQkgICAgICBzdHJjbXAoaXRlci0+ZG9tYWluLCBkb21haW4pID09IDApIHx8Ci0JCSAgICAgKGRvbWFpbiA9PSBOVUxMICYmIGl0ZXItPmRvbWFpbiA9PSBOVUxMKSkpIHsKLQkJCXNwaW5fdW5sb2NrKCZjaXBzb192NF9kb2lfbGlzdF9sb2NrKTsKLQkJCWtmcmVlKG5ld19kb20tPmRvbWFpbik7Ci0JCQlrZnJlZShuZXdfZG9tKTsKLQkJCXJldHVybiAtRUVYSVNUOwotCQl9Ci0JbGlzdF9hZGRfdGFpbF9yY3UoJm5ld19kb20tPmxpc3QsICZkb2lfZGVmLT5kb21fbGlzdCk7Ci0Jc3Bpbl91bmxvY2soJmNpcHNvX3Y0X2RvaV9saXN0X2xvY2spOwotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qKgotICogY2lwc29fdjRfZG9pX2RvbWhzaF9yZW1vdmUgLSBSZW1vdmVzIGEgZG9tYWluIGVudHJ5IGZyb20gYSBET0kgZGVmaW5pdGlvbgotICogQGRvaV9kZWY6IHRoZSBET0kgZGVmaW5pdGlvbgotICogQGRvbWFpbjogdGhlIGRvbWFpbiB0byByZW1vdmUKLSAqCi0gKiBEZXNjcmlwdGlvbjoKLSAqIFJlbW92ZXMgdGhlIEBkb21haW4gZnJvbSB0aGUgRE9JIHNwZWNpZmllZCBieSBAZG9pX2RlZiwgdGhpcyBmdW5jdGlvbgotICogc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGJ5IGV4dGVybmFsIGZ1bmN0aW9ucyAoaS5lLiBOZXRMYWJlbCkuICAgUmV0dXJucyB6ZXJvCi0gKiBvbiBzdWNjZXNzIGFuZCBuZWdhdGl2ZSB2YWx1ZXMgb24gZXJyb3IuCi0gKgotICovCi1pbnQgY2lwc29fdjRfZG9pX2RvbWhzaF9yZW1vdmUoc3RydWN0IGNpcHNvX3Y0X2RvaSAqZG9pX2RlZiwKLQkJCSAgICAgICBjb25zdCBjaGFyICpkb21haW4pCi17Ci0Jc3RydWN0IGNpcHNvX3Y0X2RvbWhzaF9lbnRyeSAqaXRlcjsKLQotCXNwaW5fbG9jaygmY2lwc29fdjRfZG9pX2xpc3RfbG9jayk7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeShpdGVyLCAmZG9pX2RlZi0+ZG9tX2xpc3QsIGxpc3QpCi0JCWlmIChpdGVyLT52YWxpZCAmJgotCQkgICAgKChkb21haW4gIT0gTlVMTCAmJiBpdGVyLT5kb21haW4gIT0gTlVMTCAmJgotCQkgICAgICBzdHJjbXAoaXRlci0+ZG9tYWluLCBkb21haW4pID09IDApIHx8Ci0JCSAgICAgKGRvbWFpbiA9PSBOVUxMICYmIGl0ZXItPmRvbWFpbiA9PSBOVUxMKSkpIHsKLQkJCWl0ZXItPnZhbGlkID0gMDsKLQkJCWxpc3RfZGVsX3JjdSgmaXRlci0+bGlzdCk7Ci0JCQlzcGluX3VubG9jaygmY2lwc29fdjRfZG9pX2xpc3RfbG9jayk7Ci0JCQljYWxsX3JjdSgmaXRlci0+cmN1LCBjaXBzb192NF9kb2lfZG9taHNoX2ZyZWUpOwotCQkJcmV0dXJuIDA7Ci0JCX0KLQlzcGluX3VubG9jaygmY2lwc29fdjRfZG9pX2xpc3RfbG9jayk7Ci0KLQlyZXR1cm4gLUVOT0VOVDsKLX0KLQogLyoKICAqIExhYmVsIE1hcHBpbmcgRnVuY3Rpb25zCiAgKi8KQEAgLTcxMiw3ICs2OTAsNyBAQAogCXN3aXRjaCAoZG9pX2RlZi0+dHlwZSkgewogCWNhc2UgQ0lQU09fVjRfTUFQX1BBU1M6CiAJCXJldHVybiAwOwotCWNhc2UgQ0lQU09fVjRfTUFQX1NURDoKKwljYXNlIENJUFNPX1Y0X01BUF9UUkFOUzoKIAkJaWYgKGRvaV9kZWYtPm1hcC5zdGQtPmx2bC5jaXBzb1tsZXZlbF0gPCBDSVBTT19WNF9JTlZfTFZMKQogCQkJcmV0dXJuIDA7CiAJCWJyZWFrOwpAQCAtNzQxLDcgKzcxOSw3IEBACiAJY2FzZSBDSVBTT19WNF9NQVBfUEFTUzoKIAkJKm5ldF9sdmwgPSBob3N0X2x2bDsKIAkJcmV0dXJuIDA7Ci0JY2FzZSBDSVBTT19WNF9NQVBfU1REOgorCWNhc2UgQ0lQU09fVjRfTUFQX1RSQU5TOgogCQlpZiAoaG9zdF9sdmwgPCBkb2lfZGVmLT5tYXAuc3RkLT5sdmwubG9jYWxfc2l6ZSAmJgogCQkgICAgZG9pX2RlZi0+bWFwLnN0ZC0+bHZsLmxvY2FsW2hvc3RfbHZsXSA8IENJUFNPX1Y0X0lOVl9MVkwpIHsKIAkJCSpuZXRfbHZsID0gZG9pX2RlZi0+bWFwLnN0ZC0+bHZsLmxvY2FsW2hvc3RfbHZsXTsKQEAgLTc3NSw3ICs3NTMsNyBAQAogCWNhc2UgQ0lQU09fVjRfTUFQX1BBU1M6CiAJCSpob3N0X2x2bCA9IG5ldF9sdmw7CiAJCXJldHVybiAwOwotCWNhc2UgQ0lQU09fVjRfTUFQX1NURDoKKwljYXNlIENJUFNPX1Y0X01BUF9UUkFOUzoKIAkJbWFwX3RibCA9IGRvaV9kZWYtPm1hcC5zdGQ7CiAJCWlmIChuZXRfbHZsIDwgbWFwX3RibC0+bHZsLmNpcHNvX3NpemUgJiYKIAkJICAgIG1hcF90YmwtPmx2bC5jaXBzb1tuZXRfbHZsXSA8IENJUFNPX1Y0X0lOVl9MVkwpIHsKQEAgLTgxMiw3ICs3OTAsNyBAQAogCXN3aXRjaCAoZG9pX2RlZi0+dHlwZSkgewogCWNhc2UgQ0lQU09fVjRfTUFQX1BBU1M6CiAJCXJldHVybiAwOwotCWNhc2UgQ0lQU09fVjRfTUFQX1NURDoKKwljYXNlIENJUFNPX1Y0X01BUF9UUkFOUzoKIAkJY2lwc29fY2F0X3NpemUgPSBkb2lfZGVmLT5tYXAuc3RkLT5jYXQuY2lwc29fc2l6ZTsKIAkJY2lwc29fYXJyYXkgPSBkb2lfZGVmLT5tYXAuc3RkLT5jYXQuY2lwc287CiAJCWZvciAoOzspIHsKQEAgLTg2MCw3ICs4MzgsNyBAQAogCXUzMiBob3N0X2NhdF9zaXplID0gMDsKIAl1MzIgKmhvc3RfY2F0X2FycmF5ID0gTlVMTDsKIAotCWlmIChkb2lfZGVmLT50eXBlID09IENJUFNPX1Y0X01BUF9TVEQpIHsKKwlpZiAoZG9pX2RlZi0+dHlwZSA9PSBDSVBTT19WNF9NQVBfVFJBTlMpIHsKIAkJaG9zdF9jYXRfc2l6ZSA9IGRvaV9kZWYtPm1hcC5zdGQtPmNhdC5sb2NhbF9zaXplOwogCQlob3N0X2NhdF9hcnJheSA9IGRvaV9kZWYtPm1hcC5zdGQtPmNhdC5sb2NhbDsKIAl9CkBAIC04NzUsNyArODUzLDcgQEAKIAkJY2FzZSBDSVBTT19WNF9NQVBfUEFTUzoKIAkJCW5ldF9zcG90ID0gaG9zdF9zcG90OwogCQkJYnJlYWs7Ci0JCWNhc2UgQ0lQU09fVjRfTUFQX1NURDoKKwkJY2FzZSBDSVBTT19WNF9NQVBfVFJBTlM6CiAJCQlpZiAoaG9zdF9zcG90ID49IGhvc3RfY2F0X3NpemUpCiAJCQkJcmV0dXJuIC1FUEVSTTsKIAkJCW5ldF9zcG90ID0gaG9zdF9jYXRfYXJyYXlbaG9zdF9zcG90XTsKQEAgLTkyMSw3ICs4OTksNyBAQAogCXUzMiBuZXRfY2F0X3NpemUgPSAwOwogCXUzMiAqbmV0X2NhdF9hcnJheSA9IE5VTEw7CiAKLQlpZiAoZG9pX2RlZi0+dHlwZSA9PSBDSVBTT19WNF9NQVBfU1REKSB7CisJaWYgKGRvaV9kZWYtPnR5cGUgPT0gQ0lQU09fVjRfTUFQX1RSQU5TKSB7CiAJCW5ldF9jYXRfc2l6ZSA9IGRvaV9kZWYtPm1hcC5zdGQtPmNhdC5jaXBzb19zaXplOwogCQluZXRfY2F0X2FycmF5ID0gZG9pX2RlZi0+bWFwLnN0ZC0+Y2F0LmNpcHNvOwogCX0KQEAgLTk0MSw3ICs5MTksNyBAQAogCQljYXNlIENJUFNPX1Y0X01BUF9QQVNTOgogCQkJaG9zdF9zcG90ID0gbmV0X3Nwb3Q7CiAJCQlicmVhazsKLQkJY2FzZSBDSVBTT19WNF9NQVBfU1REOgorCQljYXNlIENJUFNPX1Y0X01BUF9UUkFOUzoKIAkJCWlmIChuZXRfc3BvdCA+PSBuZXRfY2F0X3NpemUpCiAJCQkJcmV0dXJuIC1FUEVSTTsKIAkJCWhvc3Rfc3BvdCA9IG5ldF9jYXRfYXJyYXlbbmV0X3Nwb3RdOwpAQCAtMTI3Nyw3ICsxMjU1LDcgQEAKIAl9IGVsc2UKIAkJdGFnX2xlbiA9IDQ7CiAKLQlidWZmZXJbMF0gPSAweDAxOworCWJ1ZmZlclswXSA9IENJUFNPX1Y0X1RBR19SQklUTUFQOwogCWJ1ZmZlclsxXSA9IHRhZ19sZW47CiAJYnVmZmVyWzNdID0gbGV2ZWw7CiAKQEAgLTEzNzMsNyArMTM1MSw3IEBACiAJfSBlbHNlCiAJCXRhZ19sZW4gPSA0OwogCi0JYnVmZmVyWzBdID0gMHgwMjsKKwlidWZmZXJbMF0gPSBDSVBTT19WNF9UQUdfRU5VTTsKIAlidWZmZXJbMV0gPSB0YWdfbGVuOwogCWJ1ZmZlclszXSA9IGxldmVsOwogCkBAIC0xNDY5LDcgKzE0NDcsNyBAQAogCX0gZWxzZQogCQl0YWdfbGVuID0gNDsKIAotCWJ1ZmZlclswXSA9IDB4MDU7CisJYnVmZmVyWzBdID0gQ0lQU09fVjRfVEFHX1JBTkdFOwogCWJ1ZmZlclsxXSA9IHRhZ19sZW47CiAJYnVmZmVyWzNdID0gbGV2ZWw7CiAKQEAgLTE1MjMsNiArMTUwMSw1NCBAQAogfQogCiAvKioKKyAqIGNpcHNvX3Y0X2dlbnRhZ19sb2MgLSBHZW5lcmF0ZSBhIENJUFNPIGxvY2FsIHRhZyAobm9uLXN0YW5kYXJkKQorICogQGRvaV9kZWY6IHRoZSBET0kgZGVmaW5pdGlvbgorICogQHNlY2F0dHI6IHRoZSBzZWN1cml0eSBhdHRyaWJ1dGVzCisgKiBAYnVmZmVyOiB0aGUgb3B0aW9uIGJ1ZmZlcgorICogQGJ1ZmZlcl9sZW46IGxlbmd0aCBvZiBidWZmZXIgaW4gYnl0ZXMKKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIEdlbmVyYXRlIGEgQ0lQU08gb3B0aW9uIHVzaW5nIHRoZSBsb2NhbCB0YWcuICBSZXR1cm5zIHRoZSBzaXplIG9mIHRoZSB0YWcKKyAqIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIHZhbHVlcyBvbiBmYWlsdXJlLgorICoKKyAqLworc3RhdGljIGludCBjaXBzb192NF9nZW50YWdfbG9jKGNvbnN0IHN0cnVjdCBjaXBzb192NF9kb2kgKmRvaV9kZWYsCisJCQkgICAgICAgY29uc3Qgc3RydWN0IG5ldGxibF9sc21fc2VjYXR0ciAqc2VjYXR0ciwKKwkJCSAgICAgICB1bnNpZ25lZCBjaGFyICpidWZmZXIsCisJCQkgICAgICAgdTMyIGJ1ZmZlcl9sZW4pCit7CisJaWYgKCEoc2VjYXR0ci0+ZmxhZ3MgJiBORVRMQkxfU0VDQVRUUl9TRUNJRCkpCisJCXJldHVybiAtRVBFUk07CisKKwlidWZmZXJbMF0gPSBDSVBTT19WNF9UQUdfTE9DQUw7CisJYnVmZmVyWzFdID0gQ0lQU09fVjRfVEFHX0xPQ19CTEVOOworCSoodTMyICopJmJ1ZmZlclsyXSA9IHNlY2F0dHItPmF0dHIuc2VjaWQ7CisKKwlyZXR1cm4gQ0lQU09fVjRfVEFHX0xPQ19CTEVOOworfQorCisvKioKKyAqIGNpcHNvX3Y0X3BhcnNldGFnX2xvYyAtIFBhcnNlIGEgQ0lQU08gbG9jYWwgdGFnCisgKiBAZG9pX2RlZjogdGhlIERPSSBkZWZpbml0aW9uCisgKiBAdGFnOiB0aGUgQ0lQU08gdGFnCisgKiBAc2VjYXR0cjogdGhlIHNlY3VyaXR5IGF0dHJpYnV0ZXMKKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIFBhcnNlIGEgQ0lQU08gbG9jYWwgdGFnIGFuZCByZXR1cm4gdGhlIHNlY3VyaXR5IGF0dHJpYnV0ZXMgaW4gQHNlY2F0dHIuCisgKiBSZXR1cm4gemVybyBvbiBzdWNjZXNzLCBuZWdhdGl2ZXMgdmFsdWVzIG9uIGZhaWx1cmUuCisgKgorICovCitzdGF0aWMgaW50IGNpcHNvX3Y0X3BhcnNldGFnX2xvYyhjb25zdCBzdHJ1Y3QgY2lwc29fdjRfZG9pICpkb2lfZGVmLAorCQkJCSBjb25zdCB1bnNpZ25lZCBjaGFyICp0YWcsCisJCQkJIHN0cnVjdCBuZXRsYmxfbHNtX3NlY2F0dHIgKnNlY2F0dHIpCit7CisJc2VjYXR0ci0+YXR0ci5zZWNpZCA9ICoodTMyICopJnRhZ1syXTsKKwlzZWNhdHRyLT5mbGFncyB8PSBORVRMQkxfU0VDQVRUUl9TRUNJRDsKKworCXJldHVybiAwOworfQorCisvKioKICAqIGNpcHNvX3Y0X3ZhbGlkYXRlIC0gVmFsaWRhdGUgYSBDSVBTTyBvcHRpb24KICAqIEBvcHRpb246IHRoZSBzdGFydCBvZiB0aGUgb3B0aW9uLCBvbiBlcnJvciBpdCBpcyBzZXQgdG8gcG9pbnQgdG8gdGhlIGVycm9yCiAgKgpAQCAtMTU0MSw3ICsxNTY3LDcgQEAKICAqICAgdGhhdCBpcyB1bnJlY29nbml6ZWQuIgogICoKICAqLwotaW50IGNpcHNvX3Y0X3ZhbGlkYXRlKHVuc2lnbmVkIGNoYXIgKipvcHRpb24pCitpbnQgY2lwc29fdjRfdmFsaWRhdGUoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgY2hhciAqKm9wdGlvbikKIHsKIAl1bnNpZ25lZCBjaGFyICpvcHQgPSAqb3B0aW9uOwogCXVuc2lnbmVkIGNoYXIgKnRhZzsKQEAgLTE1NjYsNyArMTU5Miw3IEBACiAJCWdvdG8gdmFsaWRhdGVfcmV0dXJuX2xvY2tlZDsKIAl9CiAKLQlvcHRfaXRlciA9IDY7CisJb3B0X2l0ZXIgPSBDSVBTT19WNF9IRFJfTEVOOwogCXRhZyA9IG9wdCArIG9wdF9pdGVyOwogCXdoaWxlIChvcHRfaXRlciA8IG9wdF9sZW4pIHsKIAkJZm9yICh0YWdfaXRlciA9IDA7IGRvaV9kZWYtPnRhZ3NbdGFnX2l0ZXJdICE9IHRhZ1swXTspCkBAIC0xNTg0LDcgKzE2MTAsNyBAQAogCiAJCXN3aXRjaCAodGFnWzBdKSB7CiAJCWNhc2UgQ0lQU09fVjRfVEFHX1JCSVRNQVA6Ci0JCQlpZiAodGFnX2xlbiA8IDQpIHsKKwkJCWlmICh0YWdfbGVuIDwgQ0lQU09fVjRfVEFHX1JCTV9CTEVOKSB7CiAJCQkJZXJyX29mZnNldCA9IG9wdF9pdGVyICsgMTsKIAkJCQlnb3RvIHZhbGlkYXRlX3JldHVybl9sb2NrZWQ7CiAJCQl9CkBAIC0xNjAyLDcgKzE2MjgsNyBAQAogCQkJCQllcnJfb2Zmc2V0ID0gb3B0X2l0ZXIgKyAzOwogCQkJCQlnb3RvIHZhbGlkYXRlX3JldHVybl9sb2NrZWQ7CiAJCQkJfQotCQkJCWlmICh0YWdfbGVuID4gNCAmJgorCQkJCWlmICh0YWdfbGVuID4gQ0lQU09fVjRfVEFHX1JCTV9CTEVOICYmCiAJCQkJICAgIGNpcHNvX3Y0X21hcF9jYXRfcmJtX3ZhbGlkKGRvaV9kZWYsCiAJCQkJCQkJICAgICZ0YWdbNF0sCiAJCQkJCQkJICAgIHRhZ19sZW4gLSA0KSA8IDApIHsKQEAgLTE2MTIsNyArMTYzOCw3IEBACiAJCQl9CiAJCQlicmVhazsKIAkJY2FzZSBDSVBTT19WNF9UQUdfRU5VTToKLQkJCWlmICh0YWdfbGVuIDwgNCkgeworCQkJaWYgKHRhZ19sZW4gPCBDSVBTT19WNF9UQUdfRU5VTV9CTEVOKSB7CiAJCQkJZXJyX29mZnNldCA9IG9wdF9pdGVyICsgMTsKIAkJCQlnb3RvIHZhbGlkYXRlX3JldHVybl9sb2NrZWQ7CiAJCQl9CkBAIC0xNjIyLDcgKzE2NDgsNyBAQAogCQkJCWVycl9vZmZzZXQgPSBvcHRfaXRlciArIDM7CiAJCQkJZ290byB2YWxpZGF0ZV9yZXR1cm5fbG9ja2VkOwogCQkJfQotCQkJaWYgKHRhZ19sZW4gPiA0ICYmCisJCQlpZiAodGFnX2xlbiA+IENJUFNPX1Y0X1RBR19FTlVNX0JMRU4gJiYKIAkJCSAgICBjaXBzb192NF9tYXBfY2F0X2VudW1fdmFsaWQoZG9pX2RlZiwKIAkJCQkJCQkmdGFnWzRdLAogCQkJCQkJCXRhZ19sZW4gLSA0KSA8IDApIHsKQEAgLTE2MzEsNyArMTY1Nyw3IEBACiAJCQl9CiAJCQlicmVhazsKIAkJY2FzZSBDSVBTT19WNF9UQUdfUkFOR0U6Ci0JCQlpZiAodGFnX2xlbiA8IDQpIHsKKwkJCWlmICh0YWdfbGVuIDwgQ0lQU09fVjRfVEFHX1JOR19CTEVOKSB7CiAJCQkJZXJyX29mZnNldCA9IG9wdF9pdGVyICsgMTsKIAkJCQlnb3RvIHZhbGlkYXRlX3JldHVybl9sb2NrZWQ7CiAJCQl9CkBAIC0xNjQxLDcgKzE2NjcsNyBAQAogCQkJCWVycl9vZmZzZXQgPSBvcHRfaXRlciArIDM7CiAJCQkJZ290byB2YWxpZGF0ZV9yZXR1cm5fbG9ja2VkOwogCQkJfQotCQkJaWYgKHRhZ19sZW4gPiA0ICYmCisJCQlpZiAodGFnX2xlbiA+IENJUFNPX1Y0X1RBR19STkdfQkxFTiAmJgogCQkJICAgIGNpcHNvX3Y0X21hcF9jYXRfcm5nX3ZhbGlkKGRvaV9kZWYsCiAJCQkJCQkgICAgICAgJnRhZ1s0XSwKIAkJCQkJCSAgICAgICB0YWdfbGVuIC0gNCkgPCAwKSB7CkBAIC0xNjQ5LDYgKzE2NzUsMTkgQEAKIAkJCQlnb3RvIHZhbGlkYXRlX3JldHVybl9sb2NrZWQ7CiAJCQl9CiAJCQlicmVhazsKKwkJY2FzZSBDSVBTT19WNF9UQUdfTE9DQUw6CisJCQkvKiBUaGlzIGlzIGEgbm9uLXN0YW5kYXJkIHRhZyB0aGF0IHdlIG9ubHkgYWxsb3cgZm9yCisJCQkgKiBsb2NhbCBjb25uZWN0aW9ucywgc28gaWYgdGhlIGluY29taW5nIGludGVyZmFjZSBpcworCQkJICogbm90IHRoZSBsb29wYmFjayBkZXZpY2UgZHJvcCB0aGUgcGFja2V0LiAqLworCQkJaWYgKCEoc2tiLT5kZXYtPmZsYWdzICYgSUZGX0xPT1BCQUNLKSkgeworCQkJCWVycl9vZmZzZXQgPSBvcHRfaXRlcjsKKwkJCQlnb3RvIHZhbGlkYXRlX3JldHVybl9sb2NrZWQ7CisJCQl9CisJCQlpZiAodGFnX2xlbiAhPSBDSVBTT19WNF9UQUdfTE9DX0JMRU4pIHsKKwkJCQllcnJfb2Zmc2V0ID0gb3B0X2l0ZXIgKyAxOworCQkJCWdvdG8gdmFsaWRhdGVfcmV0dXJuX2xvY2tlZDsKKwkJCX0KKwkJCWJyZWFrOwogCQlkZWZhdWx0OgogCQkJZXJyX29mZnNldCA9IG9wdF9pdGVyOwogCQkJZ290byB2YWxpZGF0ZV9yZXR1cm5fbG9ja2VkOwpAQCAtMTcwNCw0OCArMTc0MywyNyBAQAogfQogCiAvKioKLSAqIGNpcHNvX3Y0X3NvY2tfc2V0YXR0ciAtIEFkZCBhIENJUFNPIG9wdGlvbiB0byBhIHNvY2tldAotICogQHNrOiB0aGUgc29ja2V0CisgKiBjaXBzb192NF9nZW5vcHQgLSBHZW5lcmF0ZSBhIENJUFNPIG9wdGlvbgorICogQGJ1ZjogdGhlIG9wdGlvbiBidWZmZXIKKyAqIEBidWZfbGVuOiB0aGUgc2l6ZSBvZiBvcHRfYnVmCiAgKiBAZG9pX2RlZjogdGhlIENJUFNPIERPSSB0byB1c2UKLSAqIEBzZWNhdHRyOiB0aGUgc3BlY2lmaWMgc2VjdXJpdHkgYXR0cmlidXRlcyBvZiB0aGUgc29ja2V0CisgKiBAc2VjYXR0cjogdGhlIHNlY3VyaXR5IGF0dHJpYnV0ZXMKICAqCiAgKiBEZXNjcmlwdGlvbjoKLSAqIFNldCB0aGUgQ0lQU08gb3B0aW9uIG9uIHRoZSBnaXZlbiBzb2NrZXQgdXNpbmcgdGhlIERPSSBkZWZpbml0aW9uIGFuZAotICogc2VjdXJpdHkgYXR0cmlidXRlcyBwYXNzZWQgdG8gdGhlIGZ1bmN0aW9uLiAgVGhpcyBmdW5jdGlvbiByZXF1aXJlcwotICogZXhjbHVzaXZlIGFjY2VzcyB0byBAc2ssIHdoaWNoIG1lYW5zIGl0IGVpdGhlciBuZWVkcyB0byBiZSBpbiB0aGUKLSAqIHByb2Nlc3Mgb2YgYmVpbmcgY3JlYXRlZCBvciBsb2NrZWQuICBSZXR1cm5zIHplcm8gb24gc3VjY2VzcyBhbmQgbmVnYXRpdmUKLSAqIHZhbHVlcyBvbiBmYWlsdXJlLgorICogR2VuZXJhdGUgYSBDSVBTTyBvcHRpb24gdXNpbmcgdGhlIERPSSBkZWZpbml0aW9uIGFuZCBzZWN1cml0eSBhdHRyaWJ1dGVzCisgKiBwYXNzZWQgdG8gdGhlIGZ1bmN0aW9uLiAgUmV0dXJucyB0aGUgbGVuZ3RoIG9mIHRoZSBvcHRpb24gb24gc3VjY2VzcyBhbmQKKyAqIG5lZ2F0aXZlIHZhbHVlcyBvbiBmYWlsdXJlLgogICoKICAqLwotaW50IGNpcHNvX3Y0X3NvY2tfc2V0YXR0cihzdHJ1Y3Qgc29jayAqc2ssCi0JCQkgIGNvbnN0IHN0cnVjdCBjaXBzb192NF9kb2kgKmRvaV9kZWYsCi0JCQkgIGNvbnN0IHN0cnVjdCBuZXRsYmxfbHNtX3NlY2F0dHIgKnNlY2F0dHIpCitzdGF0aWMgaW50IGNpcHNvX3Y0X2dlbm9wdCh1bnNpZ25lZCBjaGFyICpidWYsIHUzMiBidWZfbGVuLAorCQkJICAgY29uc3Qgc3RydWN0IGNpcHNvX3Y0X2RvaSAqZG9pX2RlZiwKKwkJCSAgIGNvbnN0IHN0cnVjdCBuZXRsYmxfbHNtX3NlY2F0dHIgKnNlY2F0dHIpCiB7Ci0JaW50IHJldF92YWwgPSAtRVBFUk07CisJaW50IHJldF92YWw7CiAJdTMyIGl0ZXI7Ci0JdW5zaWduZWQgY2hhciAqYnVmOwotCXUzMiBidWZfbGVuID0gMDsKLQl1MzIgb3B0X2xlbjsKLQlzdHJ1Y3QgaXBfb3B0aW9ucyAqb3B0ID0gTlVMTDsKLQlzdHJ1Y3QgaW5ldF9zb2NrICpza19pbmV0OwotCXN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29jayAqc2tfY29ubjsKIAotCS8qIEluIHRoZSBjYXNlIG9mIHNvY2tfY3JlYXRlX2xpdGUoKSwgdGhlIHNvY2stPnNrIGZpZWxkIGlzIG5vdAotCSAqIGRlZmluZWQgeWV0IGJ1dCBpdCBpcyBub3QgYSBwcm9ibGVtIGFzIHRoZSBvbmx5IHVzZXJzIG9mIHRoZXNlCi0JICogImxpdGUiIFBGX0lORVQgc29ja2V0cyBhcmUgZnVuY3Rpb25zIHdoaWNoIGRvIGFuIGFjY2VwdCgpIGNhbGwKLQkgKiBhZnRlcndhcmRzIHNvIHdlIHdpbGwgbGFiZWwgdGhlIHNvY2tldCBhcyBwYXJ0IG9mIHRoZSBhY2NlcHQoKS4gKi8KLQlpZiAoc2sgPT0gTlVMTCkKLQkJcmV0dXJuIDA7Ci0KLQkvKiBXZSBhbGxvY2F0ZSB0aGUgbWF4aW11bSBDSVBTTyBvcHRpb24gc2l6ZSBoZXJlIHNvIHdlIGFyZSBwcm9iYWJseQotCSAqIGJlaW5nIGEgbGl0dGxlIHdhc3RlZnVsLCBidXQgaXQgbWFrZXMgb3VyIGxpZmUgX211Y2hfIGVhc2llciBsYXRlcgotCSAqIG9uIGFuZCBhZnRlciBhbGwgd2UgYXJlIG9ubHkgdGFsa2luZyBhYm91dCA0MCBieXRlcy4gKi8KLQlidWZfbGVuID0gQ0lQU09fVjRfT1BUX0xFTl9NQVg7Ci0JYnVmID0ga21hbGxvYyhidWZfbGVuLCBHRlBfQVRPTUlDKTsKLQlpZiAoYnVmID09IE5VTEwpIHsKLQkJcmV0X3ZhbCA9IC1FTk9NRU07Ci0JCWdvdG8gc29ja2V0X3NldGF0dHJfZmFpbHVyZTsKLQl9CisJaWYgKGJ1Zl9sZW4gPD0gQ0lQU09fVjRfSERSX0xFTikKKwkJcmV0dXJuIC1FTk9TUEM7CiAKIAkvKiBYWFggLSBUaGlzIGNvZGUgYXNzdW1lcyBvbmx5IG9uZSB0YWcgcGVyIENJUFNPIG9wdGlvbiB3aGljaCBpc24ndAogCSAqIHJlYWxseSBhIGdvb2QgYXNzdW1wdGlvbiB0byBtYWtlIGJ1dCBzaW5jZSB3ZSBvbmx5IHN1cHBvcnQgdGhlIE1BQwpAQCAtMTc3Miw5ICsxNzkwLDE0IEBACiAJCQkJCQkgICAmYnVmW0NJUFNPX1Y0X0hEUl9MRU5dLAogCQkJCQkJICAgYnVmX2xlbiAtIENJUFNPX1Y0X0hEUl9MRU4pOwogCQkJYnJlYWs7CisJCWNhc2UgQ0lQU09fVjRfVEFHX0xPQ0FMOgorCQkJcmV0X3ZhbCA9IGNpcHNvX3Y0X2dlbnRhZ19sb2MoZG9pX2RlZiwKKwkJCQkJCSAgIHNlY2F0dHIsCisJCQkJCQkgICAmYnVmW0NJUFNPX1Y0X0hEUl9MRU5dLAorCQkJCQkJICAgYnVmX2xlbiAtIENJUFNPX1Y0X0hEUl9MRU4pOworCQkJYnJlYWs7CiAJCWRlZmF1bHQ6Ci0JCQlyZXRfdmFsID0gLUVQRVJNOwotCQkJZ290byBzb2NrZXRfc2V0YXR0cl9mYWlsdXJlOworCQkJcmV0dXJuIC1FUEVSTTsKIAkJfQogCiAJCWl0ZXIrKzsKQEAgLTE3ODIsOSArMTgwNSw1OCBAQAogCQkgaXRlciA8IENJUFNPX1Y0X1RBR19NQVhDTlQgJiYKIAkJIGRvaV9kZWYtPnRhZ3NbaXRlcl0gIT0gQ0lQU09fVjRfVEFHX0lOVkFMSUQpOwogCWlmIChyZXRfdmFsIDwgMCkKLQkJZ290byBzb2NrZXRfc2V0YXR0cl9mYWlsdXJlOworCQlyZXR1cm4gcmV0X3ZhbDsKIAljaXBzb192NF9nZW50YWdfaGRyKGRvaV9kZWYsIGJ1ZiwgcmV0X3ZhbCk7Ci0JYnVmX2xlbiA9IENJUFNPX1Y0X0hEUl9MRU4gKyByZXRfdmFsOworCXJldHVybiBDSVBTT19WNF9IRFJfTEVOICsgcmV0X3ZhbDsKK30KKworLyoqCisgKiBjaXBzb192NF9zb2NrX3NldGF0dHIgLSBBZGQgYSBDSVBTTyBvcHRpb24gdG8gYSBzb2NrZXQKKyAqIEBzazogdGhlIHNvY2tldAorICogQGRvaV9kZWY6IHRoZSBDSVBTTyBET0kgdG8gdXNlCisgKiBAc2VjYXR0cjogdGhlIHNwZWNpZmljIHNlY3VyaXR5IGF0dHJpYnV0ZXMgb2YgdGhlIHNvY2tldAorICoKKyAqIERlc2NyaXB0aW9uOgorICogU2V0IHRoZSBDSVBTTyBvcHRpb24gb24gdGhlIGdpdmVuIHNvY2tldCB1c2luZyB0aGUgRE9JIGRlZmluaXRpb24gYW5kCisgKiBzZWN1cml0eSBhdHRyaWJ1dGVzIHBhc3NlZCB0byB0aGUgZnVuY3Rpb24uICBUaGlzIGZ1bmN0aW9uIHJlcXVpcmVzCisgKiBleGNsdXNpdmUgYWNjZXNzIHRvIEBzaywgd2hpY2ggbWVhbnMgaXQgZWl0aGVyIG5lZWRzIHRvIGJlIGluIHRoZQorICogcHJvY2VzcyBvZiBiZWluZyBjcmVhdGVkIG9yIGxvY2tlZC4gIFJldHVybnMgemVybyBvbiBzdWNjZXNzIGFuZCBuZWdhdGl2ZQorICogdmFsdWVzIG9uIGZhaWx1cmUuCisgKgorICovCitpbnQgY2lwc29fdjRfc29ja19zZXRhdHRyKHN0cnVjdCBzb2NrICpzaywKKwkJCSAgY29uc3Qgc3RydWN0IGNpcHNvX3Y0X2RvaSAqZG9pX2RlZiwKKwkJCSAgY29uc3Qgc3RydWN0IG5ldGxibF9sc21fc2VjYXR0ciAqc2VjYXR0cikKK3sKKwlpbnQgcmV0X3ZhbCA9IC1FUEVSTTsKKwl1bnNpZ25lZCBjaGFyICpidWYgPSBOVUxMOworCXUzMiBidWZfbGVuOworCXUzMiBvcHRfbGVuOworCXN0cnVjdCBpcF9vcHRpb25zICpvcHQgPSBOVUxMOworCXN0cnVjdCBpbmV0X3NvY2sgKnNrX2luZXQ7CisJc3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrICpza19jb25uOworCisJLyogSW4gdGhlIGNhc2Ugb2Ygc29ja19jcmVhdGVfbGl0ZSgpLCB0aGUgc29jay0+c2sgZmllbGQgaXMgbm90CisJICogZGVmaW5lZCB5ZXQgYnV0IGl0IGlzIG5vdCBhIHByb2JsZW0gYXMgdGhlIG9ubHkgdXNlcnMgb2YgdGhlc2UKKwkgKiAibGl0ZSIgUEZfSU5FVCBzb2NrZXRzIGFyZSBmdW5jdGlvbnMgd2hpY2ggZG8gYW4gYWNjZXB0KCkgY2FsbAorCSAqIGFmdGVyd2FyZHMgc28gd2Ugd2lsbCBsYWJlbCB0aGUgc29ja2V0IGFzIHBhcnQgb2YgdGhlIGFjY2VwdCgpLiAqLworCWlmIChzayA9PSBOVUxMKQorCQlyZXR1cm4gMDsKKworCS8qIFdlIGFsbG9jYXRlIHRoZSBtYXhpbXVtIENJUFNPIG9wdGlvbiBzaXplIGhlcmUgc28gd2UgYXJlIHByb2JhYmx5CisJICogYmVpbmcgYSBsaXR0bGUgd2FzdGVmdWwsIGJ1dCBpdCBtYWtlcyBvdXIgbGlmZSBfbXVjaF8gZWFzaWVyIGxhdGVyCisJICogb24gYW5kIGFmdGVyIGFsbCB3ZSBhcmUgb25seSB0YWxraW5nIGFib3V0IDQwIGJ5dGVzLiAqLworCWJ1Zl9sZW4gPSBDSVBTT19WNF9PUFRfTEVOX01BWDsKKwlidWYgPSBrbWFsbG9jKGJ1Zl9sZW4sIEdGUF9BVE9NSUMpOworCWlmIChidWYgPT0gTlVMTCkgeworCQlyZXRfdmFsID0gLUVOT01FTTsKKwkJZ290byBzb2NrZXRfc2V0YXR0cl9mYWlsdXJlOworCX0KKworCXJldF92YWwgPSBjaXBzb192NF9nZW5vcHQoYnVmLCBidWZfbGVuLCBkb2lfZGVmLCBzZWNhdHRyKTsKKwlpZiAocmV0X3ZhbCA8IDApCisJCWdvdG8gc29ja2V0X3NldGF0dHJfZmFpbHVyZTsKKwlidWZfbGVuID0gcmV0X3ZhbDsKIAogCS8qIFdlIGNhbid0IHVzZSBpcF9vcHRpb25zX2dldCgpIGRpcmVjdGx5IGJlY2F1c2UgaXQgbWFrZXMgYSBjYWxsIHRvCiAJICogaXBfb3B0aW9uc19nZXRfYWxsb2MoKSB3aGljaCBhbGxvY2F0ZXMgbWVtb3J5IHdpdGggR0ZQX0tFUk5FTCBhbmQKQEAgLTE4MjIsNiArMTg5NCw4MCBAQAogfQogCiAvKioKKyAqIGNpcHNvX3Y0X3NvY2tfZGVsYXR0ciAtIERlbGV0ZSB0aGUgQ0lQU08gb3B0aW9uIGZyb20gYSBzb2NrZXQKKyAqIEBzazogdGhlIHNvY2tldAorICoKKyAqIERlc2NyaXB0aW9uOgorICogUmVtb3ZlcyB0aGUgQ0lQU08gb3B0aW9uIGZyb20gYSBzb2NrZXQsIGlmIHByZXNlbnQuCisgKgorICovCit2b2lkIGNpcHNvX3Y0X3NvY2tfZGVsYXR0cihzdHJ1Y3Qgc29jayAqc2spCit7CisJdTggaGRyX2RlbHRhOworCXN0cnVjdCBpcF9vcHRpb25zICpvcHQ7CisJc3RydWN0IGluZXRfc29jayAqc2tfaW5ldDsKKworCXNrX2luZXQgPSBpbmV0X3NrKHNrKTsKKwlvcHQgPSBza19pbmV0LT5vcHQ7CisJaWYgKG9wdCA9PSBOVUxMIHx8IG9wdC0+Y2lwc28gPT0gMCkKKwkJcmV0dXJuOworCisJaWYgKG9wdC0+c3JyIHx8IG9wdC0+cnIgfHwgb3B0LT50cyB8fCBvcHQtPnJvdXRlcl9hbGVydCkgeworCQl1OCBjaXBzb19sZW47CisJCXU4IGNpcHNvX29mZjsKKwkJdW5zaWduZWQgY2hhciAqY2lwc29fcHRyOworCQlpbnQgaXRlcjsKKwkJaW50IG9wdGxlbl9uZXc7CisKKwkJY2lwc29fb2ZmID0gb3B0LT5jaXBzbyAtIHNpemVvZihzdHJ1Y3QgaXBoZHIpOworCQljaXBzb19wdHIgPSAmb3B0LT5fX2RhdGFbY2lwc29fb2ZmXTsKKwkJY2lwc29fbGVuID0gY2lwc29fcHRyWzFdOworCisJCWlmIChvcHQtPnNyciA+IG9wdC0+Y2lwc28pCisJCQlvcHQtPnNyciAtPSBjaXBzb19sZW47CisJCWlmIChvcHQtPnJyID4gb3B0LT5jaXBzbykKKwkJCW9wdC0+cnIgLT0gY2lwc29fbGVuOworCQlpZiAob3B0LT50cyA+IG9wdC0+Y2lwc28pCisJCQlvcHQtPnRzIC09IGNpcHNvX2xlbjsKKwkJaWYgKG9wdC0+cm91dGVyX2FsZXJ0ID4gb3B0LT5jaXBzbykKKwkJCW9wdC0+cm91dGVyX2FsZXJ0IC09IGNpcHNvX2xlbjsKKwkJb3B0LT5jaXBzbyA9IDA7CisKKwkJbWVtbW92ZShjaXBzb19wdHIsIGNpcHNvX3B0ciArIGNpcHNvX2xlbiwKKwkJCW9wdC0+b3B0bGVuIC0gY2lwc29fb2ZmIC0gY2lwc29fbGVuKTsKKworCQkvKiBkZXRlcm1pbmluZyB0aGUgbmV3IHRvdGFsIG9wdGlvbiBsZW5ndGggaXMgdHJpY2t5IGJlY2F1c2Ugb2YKKwkJICogdGhlIHBhZGRpbmcgbmVjZXNzYXJ5LCB0aGUgb25seSB0aGluZyBpIGNhbiB0aGluayB0byBkbyBhdAorCQkgKiB0aGlzIHBvaW50IGlzIHdhbGsgdGhlIG9wdGlvbnMgb25lLWJ5LW9uZSwgc2tpcHBpbmcgdGhlCisJCSAqIHBhZGRpbmcgYXQgdGhlIGVuZCB0byBkZXRlcm1pbmUgdGhlIGFjdHVhbCBvcHRpb24gc2l6ZSBhbmQKKwkJICogZnJvbSB0aGVyZSB3ZSBjYW4gZGV0ZXJtaW5lIHRoZSBuZXcgdG90YWwgb3B0aW9uIGxlbmd0aCAqLworCQlpdGVyID0gMDsKKwkJb3B0bGVuX25ldyA9IDA7CisJCXdoaWxlIChpdGVyIDwgb3B0LT5vcHRsZW4pCisJCQlpZiAob3B0LT5fX2RhdGFbaXRlcl0gIT0gSVBPUFRfTk9QKSB7CisJCQkJaXRlciArPSBvcHQtPl9fZGF0YVtpdGVyICsgMV07CisJCQkJb3B0bGVuX25ldyA9IGl0ZXI7CisJCQl9IGVsc2UKKwkJCQlpdGVyKys7CisJCWhkcl9kZWx0YSA9IG9wdC0+b3B0bGVuOworCQlvcHQtPm9wdGxlbiA9IChvcHRsZW5fbmV3ICsgMykgJiB+MzsKKwkJaGRyX2RlbHRhIC09IG9wdC0+b3B0bGVuOworCX0gZWxzZSB7CisJCS8qIG9ubHkgdGhlIGNpcHNvIG9wdGlvbiB3YXMgcHJlc2VudCBvbiB0aGUgc29ja2V0IHNvIHdlIGNhbgorCQkgKiByZW1vdmUgdGhlIGVudGlyZSBvcHRpb24gc3RydWN0ICovCisJCXNrX2luZXQtPm9wdCA9IE5VTEw7CisJCWhkcl9kZWx0YSA9IG9wdC0+b3B0bGVuOworCQlrZnJlZShvcHQpOworCX0KKworCWlmIChza19pbmV0LT5pc19pY3NrICYmIGhkcl9kZWx0YSA+IDApIHsKKwkJc3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrICpza19jb25uID0gaW5ldF9jc2soc2spOworCQlza19jb25uLT5pY3NrX2V4dF9oZHJfbGVuIC09IGhkcl9kZWx0YTsKKwkJc2tfY29ubi0+aWNza19zeW5jX21zcyhzaywgc2tfY29ubi0+aWNza19wbXR1X2Nvb2tpZSk7CisJfQorfQorCisvKioKICAqIGNpcHNvX3Y0X2dldGF0dHIgLSBIZWxwZXIgZnVuY3Rpb24gZm9yIHRoZSBjaXBzb192NF8qX2dldGF0dHIgZnVuY3Rpb25zCiAgKiBAY2lwc286IHRoZSBDSVBTTyB2NCBvcHRpb24KICAqIEBzZWNhdHRyOiB0aGUgc2VjdXJpdHkgYXR0cmlidXRlcwpAQCAtMTg1OSw2ICsyMDA1LDkgQEAKIAljYXNlIENJUFNPX1Y0X1RBR19SQU5HRToKIAkJcmV0X3ZhbCA9IGNpcHNvX3Y0X3BhcnNldGFnX3JuZyhkb2lfZGVmLCAmY2lwc29bNl0sIHNlY2F0dHIpOwogCQlicmVhazsKKwljYXNlIENJUFNPX1Y0X1RBR19MT0NBTDoKKwkJcmV0X3ZhbCA9IGNpcHNvX3Y0X3BhcnNldGFnX2xvYyhkb2lfZGVmLCAmY2lwc29bNl0sIHNlY2F0dHIpOworCQlicmVhazsKIAl9CiAJaWYgKHJldF92YWwgPT0gMCkKIAkJc2VjYXR0ci0+dHlwZSA9IE5FVExCTF9OTFRZUEVfQ0lQU09WNDsKQEAgLTE4OTMsNiArMjA0MiwxMjMgQEAKIH0KIAogLyoqCisgKiBjaXBzb192NF9za2J1ZmZfc2V0YXR0ciAtIFNldCB0aGUgQ0lQU08gb3B0aW9uIG9uIGEgcGFja2V0CisgKiBAc2tiOiB0aGUgcGFja2V0CisgKiBAc2VjYXR0cjogdGhlIHNlY3VyaXR5IGF0dHJpYnV0ZXMKKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIFNldCB0aGUgQ0lQU08gb3B0aW9uIG9uIHRoZSBnaXZlbiBwYWNrZXQgYmFzZWQgb24gdGhlIHNlY3VyaXR5IGF0dHJpYnV0ZXMuCisgKiBSZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgSVAgaGVhZGVyIG9uIHN1Y2Nlc3MgYW5kIE5VTEwgb24gZmFpbHVyZS4KKyAqCisgKi8KK2ludCBjaXBzb192NF9za2J1ZmZfc2V0YXR0cihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJICAgIGNvbnN0IHN0cnVjdCBjaXBzb192NF9kb2kgKmRvaV9kZWYsCisJCQkgICAgY29uc3Qgc3RydWN0IG5ldGxibF9sc21fc2VjYXR0ciAqc2VjYXR0cikKK3sKKwlpbnQgcmV0X3ZhbDsKKwlzdHJ1Y3QgaXBoZHIgKmlwaDsKKwlzdHJ1Y3QgaXBfb3B0aW9ucyAqb3B0ID0gJklQQ0Ioc2tiKS0+b3B0OworCXVuc2lnbmVkIGNoYXIgYnVmW0NJUFNPX1Y0X09QVF9MRU5fTUFYXTsKKwl1MzIgYnVmX2xlbiA9IENJUFNPX1Y0X09QVF9MRU5fTUFYOworCXUzMiBvcHRfbGVuOworCWludCBsZW5fZGVsdGE7CisKKwlidWZfbGVuID0gY2lwc29fdjRfZ2Vub3B0KGJ1ZiwgYnVmX2xlbiwgZG9pX2RlZiwgc2VjYXR0cik7CisJaWYgKGJ1Zl9sZW4gPCAwKQorCQlyZXR1cm4gYnVmX2xlbjsKKwlvcHRfbGVuID0gKGJ1Zl9sZW4gKyAzKSAmIH4zOworCisJLyogd2Ugb3ZlcndyaXRlIGFueSBleGlzdGluZyBvcHRpb25zIHRvIGVuc3VyZSB0aGF0IHdlIGhhdmUgZW5vdWdoCisJICogcm9vbSBmb3IgdGhlIENJUFNPIG9wdGlvbiwgdGhlIHJlYXNvbiBpcyB0aGF0IHdlIF9uZWVkXyB0byBndWFyYW50ZWUKKwkgKiB0aGF0IHRoZSBzZWN1cml0eSBsYWJlbCBpcyBhcHBsaWVkIHRvIHRoZSBwYWNrZXQgLSB3ZSBkbyB0aGUgc2FtZQorCSAqIHRoaW5nIHdoZW4gdXNpbmcgdGhlIHNvY2tldCBvcHRpb25zIGFuZCBpdCBoYXNuJ3QgY2F1c2VkIGEgcHJvYmxlbSwKKwkgKiBpZiB3ZSBuZWVkIHRvIHdlIGNhbiBhbHdheXMgcmV2aXNpdCB0aGlzIGNob2ljZSBsYXRlciAqLworCisJbGVuX2RlbHRhID0gb3B0X2xlbiAtIG9wdC0+b3B0bGVuOworCS8qIGlmIHdlIGRvbid0IGVuc3VyZSBlbm91Z2ggaGVhZHJvb20gd2UgY291bGQgcGFuaWMgb24gdGhlIHNrYl9wdXNoKCkKKwkgKiBjYWxsIGJlbG93IHNvIG1ha2Ugc3VyZSB3ZSBoYXZlIGVub3VnaCwgd2UgYXJlIGFsc28gIm1hbmdsaW5nIiB0aGUKKwkgKiBwYWNrZXQgc28gd2Ugc2hvdWxkIHByb2JhYmx5IGRvIGEgY29weS1vbi13cml0ZSBjYWxsIGFueXdheSAqLworCXJldF92YWwgPSBza2JfY293KHNrYiwgc2tiX2hlYWRyb29tKHNrYikgKyBsZW5fZGVsdGEpOworCWlmIChyZXRfdmFsIDwgMCkKKwkJcmV0dXJuIHJldF92YWw7CisKKwlpZiAobGVuX2RlbHRhID4gMCkgeworCQkvKiB3ZSBhc3N1bWUgdGhhdCB0aGUgaGVhZGVyICsgb3B0LT5vcHRsZW4gaGF2ZSBhbHJlYWR5IGJlZW4KKwkJICogInB1c2hlZCIgaW4gaXBfb3B0aW9uc19idWlsZCgpIG9yIHNpbWlsYXIgKi8KKwkJaXBoID0gaXBfaGRyKHNrYik7CisJCXNrYl9wdXNoKHNrYiwgbGVuX2RlbHRhKTsKKwkJbWVtbW92ZSgoY2hhciAqKWlwaCAtIGxlbl9kZWx0YSwgaXBoLCBpcGgtPmlobCA8PCAyKTsKKwkJc2tiX3Jlc2V0X25ldHdvcmtfaGVhZGVyKHNrYik7CisJCWlwaCA9IGlwX2hkcihza2IpOworCX0gZWxzZSBpZiAobGVuX2RlbHRhIDwgMCkgeworCQlpcGggPSBpcF9oZHIoc2tiKTsKKwkJbWVtc2V0KGlwaCArIDEsIElQT1BUX05PUCwgb3B0LT5vcHRsZW4pOworCX0gZWxzZQorCQlpcGggPSBpcF9oZHIoc2tiKTsKKworCWlmIChvcHQtPm9wdGxlbiA+IDApCisJCW1lbXNldChvcHQsIDAsIHNpemVvZigqb3B0KSk7CisJb3B0LT5vcHRsZW4gPSBvcHRfbGVuOworCW9wdC0+Y2lwc28gPSBzaXplb2Yoc3RydWN0IGlwaGRyKTsKKwlvcHQtPmlzX2NoYW5nZWQgPSAxOworCisJLyogd2UgaGF2ZSB0byBkbyB0aGUgZm9sbG93aW5nIGJlY2F1c2Ugd2UgYXJlIGJlaW5nIGNhbGxlZCBmcm9tIGEKKwkgKiBuZXRmaWx0ZXIgaG9vayB3aGljaCBtZWFucyB0aGUgcGFja2V0IGFscmVhZHkgaGFzIGhhZCB0aGUgaGVhZGVyCisJICogZmllbGRzIHBvcHVsYXRlZCBhbmQgdGhlIGNoZWNrc3VtIGNhbGN1bGF0ZWQgLSB5ZXMgdGhpcyBtZWFucyB3ZQorCSAqIGFyZSBkb2luZyBtb3JlIHdvcmsgdGhhbiBuZWVkZWQgYnV0IHdlIGRvIGl0IHRvIGtlZXAgdGhlIGNvcmUKKwkgKiBzdGFjayBjbGVhbiBhbmQgdGlkeSAqLworCW1lbWNweShpcGggKyAxLCBidWYsIGJ1Zl9sZW4pOworCWlmIChvcHRfbGVuID4gYnVmX2xlbikKKwkJbWVtc2V0KChjaGFyICopKGlwaCArIDEpICsgYnVmX2xlbiwgMCwgb3B0X2xlbiAtIGJ1Zl9sZW4pOworCWlmIChsZW5fZGVsdGEgIT0gMCkgeworCQlpcGgtPmlobCA9IDUgKyAob3B0X2xlbiA+PiAyKTsKKwkJaXBoLT50b3RfbGVuID0gaHRvbnMoc2tiLT5sZW4pOworCX0KKwlpcF9zZW5kX2NoZWNrKGlwaCk7CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBjaXBzb192NF9za2J1ZmZfZGVsYXR0ciAtIERlbGV0ZSBhbnkgQ0lQU08gb3B0aW9ucyBmcm9tIGEgcGFja2V0CisgKiBAc2tiOiB0aGUgcGFja2V0CisgKgorICogRGVzY3JpcHRpb246CisgKiBSZW1vdmVzIGFueSBhbmQgYWxsIENJUFNPIG9wdGlvbnMgZnJvbSB0aGUgZ2l2ZW4gcGFja2V0LiAgUmV0dXJucyB6ZXJvIG9uCisgKiBzdWNjZXNzLCBuZWdhdGl2ZSB2YWx1ZXMgb24gZmFpbHVyZS4KKyAqCisgKi8KK2ludCBjaXBzb192NF9za2J1ZmZfZGVsYXR0cihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCWludCByZXRfdmFsOworCXN0cnVjdCBpcGhkciAqaXBoOworCXN0cnVjdCBpcF9vcHRpb25zICpvcHQgPSAmSVBDQihza2IpLT5vcHQ7CisJdW5zaWduZWQgY2hhciAqY2lwc29fcHRyOworCisJaWYgKG9wdC0+Y2lwc28gPT0gMCkKKwkJcmV0dXJuIDA7CisKKwkvKiBzaW5jZSB3ZSBhcmUgY2hhbmdpbmcgdGhlIHBhY2tldCB3ZSBzaG91bGQgbWFrZSBhIGNvcHkgKi8KKwlyZXRfdmFsID0gc2tiX2Nvdyhza2IsIHNrYl9oZWFkcm9vbShza2IpKTsKKwlpZiAocmV0X3ZhbCA8IDApCisJCXJldHVybiByZXRfdmFsOworCisJLyogdGhlIGVhc2llc3QgdGhpbmcgdG8gZG8gaXMganVzdCByZXBsYWNlIHRoZSBjaXBzbyBvcHRpb24gd2l0aCBub29wCisJICogb3B0aW9ucyBzaW5jZSB3ZSBkb24ndCBjaGFuZ2UgdGhlIHNpemUgb2YgdGhlIHBhY2tldCwgYWx0aG91Z2ggd2UKKwkgKiBzdGlsbCBuZWVkIHRvIHJlY2FsY3VsYXRlIHRoZSBjaGVja3N1bSAqLworCisJaXBoID0gaXBfaGRyKHNrYik7CisJY2lwc29fcHRyID0gKHVuc2lnbmVkIGNoYXIgKilpcGggKyBvcHQtPmNpcHNvOworCW1lbXNldChjaXBzb19wdHIsIElQT1BUX05PT1AsIGNpcHNvX3B0clsxXSk7CisJb3B0LT5jaXBzbyA9IDA7CisJb3B0LT5pc19jaGFuZ2VkID0gMTsKKworCWlwX3NlbmRfY2hlY2soaXBoKTsKKworCXJldHVybiAwOworfQorCisvKioKICAqIGNpcHNvX3Y0X3NrYnVmZl9nZXRhdHRyIC0gR2V0IHRoZSBzZWN1cml0eSBhdHRyaWJ1dGVzIGZyb20gdGhlIENJUFNPIG9wdGlvbgogICogQHNrYjogdGhlIHBhY2tldAogICogQHNlY2F0dHI6IHRoZSBzZWN1cml0eSBhdHRyaWJ1dGVzCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9kZXZpbmV0LmMgYi9uZXQvaXB2NC9kZXZpbmV0LmMKaW5kZXggYjEyZGFlMi4uNTZmY2UzYSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvZGV2aW5ldC5jCisrKyBiL25ldC9pcHY0L2RldmluZXQuYwpAQCAtNjEzLDkgKzYxMyw3IEBACiAJaWYgKGNvbG9uKQogCQkqY29sb24gPSAwOwogCi0jaWZkZWYgQ09ORklHX0tNT0QKIAlkZXZfbG9hZChuZXQsIGlmci5pZnJfbmFtZSk7Ci0jZW5kaWYKIAogCXN3aXRjaCAoY21kKSB7CiAJY2FzZSBTSU9DR0lGQUREUjoJLyogR2V0IGludGVyZmFjZSBhZGRyZXNzICovCkBAIC0xMjgzLDcgKzEyODEsNyBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgZGV2aW5ldF9jb25mX3N5c2N0bChjdGxfdGFibGUgKnRhYmxlLCBpbnQgX191c2VyICpuYW1lLCBpbnQgbmxlbiwKK3N0YXRpYyBpbnQgZGV2aW5ldF9jb25mX3N5c2N0bChjdGxfdGFibGUgKnRhYmxlLAogCQkJICAgICAgIHZvaWQgX191c2VyICpvbGR2YWwsIHNpemVfdCBfX3VzZXIgKm9sZGxlbnAsCiAJCQkgICAgICAgdm9pZCBfX3VzZXIgKm5ld3ZhbCwgc2l6ZV90IG5ld2xlbikKIHsKQEAgLTEzNzksMTIgKzEzNzcsMTEgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1pbnQgaXB2NF9kb2ludF9hbmRfZmx1c2hfc3RyYXRlZ3koY3RsX3RhYmxlICp0YWJsZSwgaW50IF9fdXNlciAqbmFtZSwgaW50IG5sZW4sCitpbnQgaXB2NF9kb2ludF9hbmRfZmx1c2hfc3RyYXRlZ3koY3RsX3RhYmxlICp0YWJsZSwKIAkJCQkgIHZvaWQgX191c2VyICpvbGR2YWwsIHNpemVfdCBfX3VzZXIgKm9sZGxlbnAsCiAJCQkJICB2b2lkIF9fdXNlciAqbmV3dmFsLCBzaXplX3QgbmV3bGVuKQogewotCWludCByZXQgPSBkZXZpbmV0X2NvbmZfc3lzY3RsKHRhYmxlLCBuYW1lLCBubGVuLCBvbGR2YWwsIG9sZGxlbnAsCi0JCQkJICAgICAgbmV3dmFsLCBuZXdsZW4pOworCWludCByZXQgPSBkZXZpbmV0X2NvbmZfc3lzY3RsKHRhYmxlLCBvbGR2YWwsIG9sZGxlbnAsIG5ld3ZhbCwgbmV3bGVuKTsKIAlzdHJ1Y3QgbmV0ICpuZXQgPSB0YWJsZS0+ZXh0cmEyOwogCiAJaWYgKHJldCA9PSAxKQpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaWNtcC5jIGIvbmV0L2lwdjQvaWNtcC5jCmluZGV4IDU1YzM1NWUuLjcyYjJkZTcgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2ljbXAuYworKysgYi9uZXQvaXB2NC9pY21wLmMKQEAgLTEsNyArMSw3IEBACiAvKgogICoJTkVUMzoJSW1wbGVtZW50YXRpb24gb2YgdGhlIElDTVAgcHJvdG9jb2wgbGF5ZXIuCiAgKgotICoJCUFsYW4gQ294LCA8YWxhbkByZWRoYXQuY29tPgorICoJCUFsYW4gQ294LCA8YWxhbkBseG9yZ3VrLnVrdXUub3JnLnVrPgogICoKICAqCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqCW1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pZ21wLmMgYi9uZXQvaXB2NC9pZ21wLmMKaW5kZXggN2Y5ZTMzNy4uYTBkODY0NSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvaWdtcC5jCisrKyBiL25ldC9pcHY0L2lnbXAuYwpAQCAtOSw3ICs5LDcgQEAKICAqCXNlZW1zIHRvIGZhbGwgb3V0IHdpdGggZ2NjIDIuNi4yLgogICoKICAqCUF1dGhvcnM6Ci0gKgkJQWxhbiBDb3ggPEFsYW4uQ294QGxpbnV4Lm9yZz4KKyAqCQlBbGFuIENveCA8YWxhbkBseG9yZ3VrLnVrdXUub3JnLnVrPgogICoKICAqCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqCW1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pbmV0X2RpYWcuYyBiL25ldC9pcHY0L2luZXRfZGlhZy5jCmluZGV4IDg5Y2IwNDcuLjU2NDIzMGQgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2luZXRfZGlhZy5jCisrKyBiL25ldC9pcHY0L2luZXRfZGlhZy5jCkBAIC01MywxMSArNTMsOSBAQAogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGluZXRfZGlhZ19oYW5kbGVyICppbmV0X2RpYWdfbG9ja19oYW5kbGVyKGludCB0eXBlKQogewotI2lmZGVmIENPTkZJR19LTU9ECiAJaWYgKCFpbmV0X2RpYWdfdGFibGVbdHlwZV0pCiAJCXJlcXVlc3RfbW9kdWxlKCJuZXQtcGYtJWQtcHJvdG8tJWQtdHlwZS0lZCIsIFBGX05FVExJTkssCiAJCQkgICAgICAgTkVUTElOS19JTkVUX0RJQUcsIHR5cGUpOwotI2VuZGlmCiAKIAltdXRleF9sb2NrKCZpbmV0X2RpYWdfdGFibGVfbXV0ZXgpOwogCWlmICghaW5ldF9kaWFnX3RhYmxlW3R5cGVdKQpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaXBfZnJhZ21lbnQuYyBiL25ldC9pcHY0L2lwX2ZyYWdtZW50LmMKaW5kZXggMjE1MmQyMi4uZTRmODFmNSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvaXBfZnJhZ21lbnQuYworKysgYi9uZXQvaXB2NC9pcF9mcmFnbWVudC5jCkBAIC02LDcgKzYsNyBAQAogICoJCVRoZSBJUCBmcmFnbWVudGF0aW9uIGZ1bmN0aW9uYWxpdHkuCiAgKgogICogQXV0aG9yczoJRnJlZCBOLiB2YW4gS2VtcGVuIDx3YWx0amVAdVdhbHQuTkwuTXVnbmV0Lk9SRz4KLSAqCQlBbGFuIENveCA8QWxhbi5Db3hAbGludXgub3JnPgorICoJCUFsYW4gQ294IDxhbGFuQGx4b3JndWsudWt1dS5vcmcudWs+CiAgKgogICogRml4ZXM6CiAgKgkJQWxhbiBDb3gJOglTcGxpdCBmcm9tIGlwLmMgLCBzZWUgaXBfaW5wdXQuYyBmb3IgaGlzdG9yeS4KZGlmZiAtLWdpdCBhL25ldC9pcHY0L2lwX2lucHV0LmMgYi9uZXQvaXB2NC9pcF9pbnB1dC5jCmluZGV4IGUwYmVkNTYuLjg2MTk3OGEgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2lwX2lucHV0LmMKKysrIGIvbmV0L2lwdjQvaXBfaW5wdXQuYwpAQCAtOCw3ICs4LDcgQEAKICAqIEF1dGhvcnM6CVJvc3MgQmlybwogICoJCUZyZWQgTi4gdmFuIEtlbXBlbiwgPHdhbHRqZUB1V2FsdC5OTC5NdWduZXQuT1JHPgogICoJCURvbmFsZCBCZWNrZXIsIDxiZWNrZXJAc3VwZXIub3JnPgotICoJCUFsYW4gQ294LCA8QWxhbi5Db3hAbGludXgub3JnPgorICoJCUFsYW4gQ294LCA8YWxhbkBseG9yZ3VrLnVrdXUub3JnLnVrPgogICoJCVJpY2hhcmQgVW5kZXJ3b29kCiAgKgkJU3RlZmFuIEJlY2tlciwgPHN0ZWZhbmJAeWVsbG8ucGluZy5kZT4KICAqCQlKb3JnZSBDd2lrLCA8am9yZ2VAbGFzZXIuc2F0bGluay5uZXQ+CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pcF9vcHRpb25zLmMgYi9uZXQvaXB2NC9pcF9vcHRpb25zLmMKaW5kZXggYmUzZjE4YS4uMmM4OGRhNiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvaXBfb3B0aW9ucy5jCisrKyBiL25ldC9pcHY0L2lwX29wdGlvbnMuYwpAQCAtNDM4LDcgKzQzOCw3IEBACiAJCQkJZ290byBlcnJvcjsKIAkJCX0KIAkJCW9wdC0+Y2lwc28gPSBvcHRwdHIgLSBpcGg7Ci0JCQlpZiAoY2lwc29fdjRfdmFsaWRhdGUoJm9wdHB0cikpIHsKKwkJCWlmIChjaXBzb192NF92YWxpZGF0ZShza2IsICZvcHRwdHIpKSB7CiAJCQkJcHBfcHRyID0gb3B0cHRyOwogCQkJCWdvdG8gZXJyb3I7CiAJCQl9CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pcGlwLmMgYi9uZXQvaXB2NC9pcGlwLmMKaW5kZXggNGM2ZDJjYS4uMjk2MDlkMiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvaXBpcC5jCisrKyBiL25ldC9pcHY0L2lwaXAuYwpAQCAtNDEsNyArNDEsNyBAQAogCQlNYWRlIHRoZSB0dW5uZWxzIHVzZSBkZXYtPm5hbWUgbm90IHR1bm5lbDogd2hlbiBlcnJvciByZXBvcnRpbmcuCiAJCUFkZGVkIHR4X2Ryb3BwZWQgc3RhdAogCi0JCS1BbGFuIENveAkoQWxhbi5Db3hAbGludXgub3JnKSAyMSBNYXJjaCA5NQorCQktQWxhbiBDb3gJKGFsYW5AbHhvcmd1ay51a3V1Lm9yZy51aykgMjEgTWFyY2ggOTUKIAogCVJld29ya2VkOgogCQlDaGFuZ2VkIHRvIHR1bm5lbCB0byBkZXN0aW5hdGlvbiBnYXRld2F5IGluIGFkZGl0aW9uIHRvIHRoZQpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaXBtci5jIGIvbmV0L2lwdjQvaXBtci5jCmluZGV4IGM1MTliOGQuLmI0MmUwODIgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2lwbXIuYworKysgYi9uZXQvaXB2NC9pcG1yLmMKQEAgLTEsNyArMSw3IEBACiAvKgogICoJSVAgbXVsdGljYXN0IHJvdXRpbmcgc3VwcG9ydCBmb3IgbXJvdXRlZCAzLjYvMy44CiAgKgotICoJCShjKSAxOTk1IEFsYW4gQ294LCA8YWxhbkByZWRoYXQuY29tPgorICoJCShjKSAxOTk1IEFsYW4gQ294LCA8YWxhbkBseG9yZ3VrLnVrdXUub3JnLnVrPgogICoJICBMaW51eCBDb25zdWx0YW5jeSBhbmQgQ3VzdG9tIERyaXZlciBEZXZlbG9wbWVudAogICoKICAqCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9uZl9kZWZyYWdfaXB2NC5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX2RlZnJhZ19pcHY0LmMKaW5kZXggYWEyYzUwYS4uZmEyZDZiNiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX2RlZnJhZ19pcHY0LmMKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX2RlZnJhZ19pcHY0LmMKQEAgLTQxLDEyICs0MSwxMyBAQAogCQkJCQkgIGludCAoKm9rZm4pKHN0cnVjdCBza19idWZmICopKQogewogI2lmIGRlZmluZWQoQ09ORklHX05GX0NPTk5UUkFDSykgfHwgZGVmaW5lZChDT05GSUdfTkZfQ09OTlRSQUNLX01PRFVMRSkKKyNpZiAhZGVmaW5lZChDT05GSUdfTkZfTkFUKSAmJiAhZGVmaW5lZChDT05GSUdfTkZfTkFUX01PRFVMRSkKIAkvKiBQcmV2aW91c2x5IHNlZW4gKGxvb3BiYWNrKT8gIElnbm9yZS4gIERvIHRoaXMgYmVmb3JlCiAJICAgZnJhZ21lbnQgY2hlY2suICovCiAJaWYgKHNrYi0+bmZjdCkKIAkJcmV0dXJuIE5GX0FDQ0VQVDsKICNlbmRpZgotCisjZW5kaWYKIAkvKiBHYXRoZXIgZnJhZ21lbnRzLiAqLwogCWlmIChpcF9oZHIoc2tiKS0+ZnJhZ19vZmYgJiBodG9ucyhJUF9NRiB8IElQX09GRlNFVCkpIHsKIAkJaWYgKG5mX2N0X2lwdjRfZ2F0aGVyX2ZyYWdzKHNrYiwKZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9uZl9uYXRfY29yZS5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX25hdF9jb3JlLmMKaW5kZXggMmFjOWVhZi4uYTY1Y2Y2OSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX25hdF9jb3JlLmMKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX25hdF9jb3JlLmMKQEAgLTU4NCw2ICs1ODQsOTggQEAKIAkuZmxhZ3MJCT0gTkZfQ1RfRVhUX0ZfUFJFQUxMT0MsCiB9OwogCisjaWYgZGVmaW5lZChDT05GSUdfTkZfQ1RfTkVUTElOSykgfHwgZGVmaW5lZChDT05GSUdfTkZfQ1RfTkVUTElOS19NT0RVTEUpCisKKyNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXIvbmZuZXRsaW5rLmg+CisjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyL25mbmV0bGlua19jb25udHJhY2suaD4KKworc3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IHByb3RvbmF0X25sYV9wb2xpY3lbQ1RBX1BST1RPTkFUX01BWCsxXSA9IHsKKwlbQ1RBX1BST1RPTkFUX1BPUlRfTUlOXQk9IHsgLnR5cGUgPSBOTEFfVTE2IH0sCisJW0NUQV9QUk9UT05BVF9QT1JUX01BWF0JPSB7IC50eXBlID0gTkxBX1UxNiB9LAorfTsKKworc3RhdGljIGludCBuZm5ldGxpbmtfcGFyc2VfbmF0X3Byb3RvKHN0cnVjdCBubGF0dHIgKmF0dHIsCisJCQkJICAgICBjb25zdCBzdHJ1Y3QgbmZfY29ubiAqY3QsCisJCQkJICAgICBzdHJ1Y3QgbmZfbmF0X3JhbmdlICpyYW5nZSkKK3sKKwlzdHJ1Y3QgbmxhdHRyICp0YltDVEFfUFJPVE9OQVRfTUFYKzFdOworCWNvbnN0IHN0cnVjdCBuZl9uYXRfcHJvdG9jb2wgKm5wdDsKKwlpbnQgZXJyOworCisJZXJyID0gbmxhX3BhcnNlX25lc3RlZCh0YiwgQ1RBX1BST1RPTkFUX01BWCwgYXR0ciwgcHJvdG9uYXRfbmxhX3BvbGljeSk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CisKKwlucHQgPSBuZl9uYXRfcHJvdG9fZmluZF9nZXQobmZfY3RfcHJvdG9udW0oY3QpKTsKKwlpZiAobnB0LT5ubGF0dHJfdG9fcmFuZ2UpCisJCWVyciA9IG5wdC0+bmxhdHRyX3RvX3JhbmdlKHRiLCByYW5nZSk7CisJbmZfbmF0X3Byb3RvX3B1dChucHQpOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBuYXRfbmxhX3BvbGljeVtDVEFfTkFUX01BWCsxXSA9IHsKKwlbQ1RBX05BVF9NSU5JUF0JCT0geyAudHlwZSA9IE5MQV9VMzIgfSwKKwlbQ1RBX05BVF9NQVhJUF0JCT0geyAudHlwZSA9IE5MQV9VMzIgfSwKK307CisKK3N0YXRpYyBpbnQKK25mbmV0bGlua19wYXJzZV9uYXQoc3RydWN0IG5sYXR0ciAqbmF0LAorCQkgICAgY29uc3Qgc3RydWN0IG5mX2Nvbm4gKmN0LCBzdHJ1Y3QgbmZfbmF0X3JhbmdlICpyYW5nZSkKK3sKKwlzdHJ1Y3QgbmxhdHRyICp0YltDVEFfTkFUX01BWCsxXTsKKwlpbnQgZXJyOworCisJbWVtc2V0KHJhbmdlLCAwLCBzaXplb2YoKnJhbmdlKSk7CisKKwllcnIgPSBubGFfcGFyc2VfbmVzdGVkKHRiLCBDVEFfTkFUX01BWCwgbmF0LCBuYXRfbmxhX3BvbGljeSk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CisKKwlpZiAodGJbQ1RBX05BVF9NSU5JUF0pCisJCXJhbmdlLT5taW5faXAgPSBubGFfZ2V0X2JlMzIodGJbQ1RBX05BVF9NSU5JUF0pOworCisJaWYgKCF0YltDVEFfTkFUX01BWElQXSkKKwkJcmFuZ2UtPm1heF9pcCA9IHJhbmdlLT5taW5faXA7CisJZWxzZQorCQlyYW5nZS0+bWF4X2lwID0gbmxhX2dldF9iZTMyKHRiW0NUQV9OQVRfTUFYSVBdKTsKKworCWlmIChyYW5nZS0+bWluX2lwKQorCQlyYW5nZS0+ZmxhZ3MgfD0gSVBfTkFUX1JBTkdFX01BUF9JUFM7CisKKwlpZiAoIXRiW0NUQV9OQVRfUFJPVE9dKQorCQlyZXR1cm4gMDsKKworCWVyciA9IG5mbmV0bGlua19wYXJzZV9uYXRfcHJvdG8odGJbQ1RBX05BVF9QUk9UT10sIGN0LCByYW5nZSk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludAorbmZuZXRsaW5rX3BhcnNlX25hdF9zZXR1cChzdHJ1Y3QgbmZfY29ubiAqY3QsCisJCQkgIGVudW0gbmZfbmF0X21hbmlwX3R5cGUgbWFuaXAsCisJCQkgIHN0cnVjdCBubGF0dHIgKmF0dHIpCit7CisJc3RydWN0IG5mX25hdF9yYW5nZSByYW5nZTsKKworCWlmIChuZm5ldGxpbmtfcGFyc2VfbmF0KGF0dHIsIGN0LCAmcmFuZ2UpIDwgMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKG5mX25hdF9pbml0aWFsaXplZChjdCwgbWFuaXApKQorCQlyZXR1cm4gLUVFWElTVDsKKworCXJldHVybiBuZl9uYXRfc2V0dXBfaW5mbyhjdCwgJnJhbmdlLCBtYW5pcCk7Cit9CisjZWxzZQorc3RhdGljIGludAorbmZuZXRsaW5rX3BhcnNlX25hdF9zZXR1cChzdHJ1Y3QgbmZfY29ubiAqY3QsCisJCQkgIGVudW0gbmZfbmF0X21hbmlwX3R5cGUgbWFuaXAsCisJCQkgIHN0cnVjdCBubGF0dHIgKmF0dHIpCit7CisJcmV0dXJuIC1FT1BOT1RTVVBQOworfQorI2VuZGlmCisKIHN0YXRpYyBpbnQgX19uZXRfaW5pdCBuZl9uYXRfbmV0X2luaXQoc3RydWN0IG5ldCAqbmV0KQogewogCW5ldC0+aXB2NC5uYXRfYnlzb3VyY2UgPSBuZl9jdF9hbGxvY19oYXNodGFibGUoJm5mX25hdF9odGFibGVfc2l6ZSwKQEAgLTY1NCw2ICs3NDYsOSBAQAogCiAJQlVHX09OKG5mX25hdF9zZXFfYWRqdXN0X2hvb2sgIT0gTlVMTCk7CiAJcmN1X2Fzc2lnbl9wb2ludGVyKG5mX25hdF9zZXFfYWRqdXN0X2hvb2ssIG5mX25hdF9zZXFfYWRqdXN0KTsKKwlCVUdfT04obmZuZXRsaW5rX3BhcnNlX25hdF9zZXR1cF9ob29rICE9IE5VTEwpOworCXJjdV9hc3NpZ25fcG9pbnRlcihuZm5ldGxpbmtfcGFyc2VfbmF0X3NldHVwX2hvb2ssCisJCQkgICBuZm5ldGxpbmtfcGFyc2VfbmF0X3NldHVwKTsKIAlyZXR1cm4gMDsKIAogIGNsZWFudXBfZXh0ZW5kOgpAQCAtNjY3LDEwICs3NjIsMTIgQEAKIAluZl9jdF9sM3Byb3RvX3B1dChsM3Byb3RvKTsKIAluZl9jdF9leHRlbmRfdW5yZWdpc3RlcigmbmF0X2V4dGVuZCk7CiAJcmN1X2Fzc2lnbl9wb2ludGVyKG5mX25hdF9zZXFfYWRqdXN0X2hvb2ssIE5VTEwpOworCXJjdV9hc3NpZ25fcG9pbnRlcihuZm5ldGxpbmtfcGFyc2VfbmF0X3NldHVwX2hvb2ssIE5VTEwpOwogCXN5bmNocm9uaXplX25ldCgpOwogfQogCiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQUxJQVMoIm5mLW5hdC1pcHY0Iik7CiAKIG1vZHVsZV9pbml0KG5mX25hdF9pbml0KTsKIG1vZHVsZV9leGl0KG5mX25hdF9jbGVhbnVwKTsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9uZl9uYXRfc25tcF9iYXNpYy5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX25hdF9zbm1wX2Jhc2ljLmMKaW5kZXggZmZlYWZmYy4uODMwM2U0YiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX25hdF9zbm1wX2Jhc2ljLmMKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX25hdF9zbm1wX2Jhc2ljLmMKQEAgLTc0Miw2ICs3NDIsNyBAQAogCQkJKm9iaiA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBzbm1wX29iamVjdCkgKyBsZW4sCiAJCQkJICAgICAgIEdGUF9BVE9NSUMpOwogCQkJaWYgKCpvYmogPT0gTlVMTCkgeworCQkJCWtmcmVlKHApOwogCQkJCWtmcmVlKGlkKTsKIAkJCQlpZiAobmV0X3JhdGVsaW1pdCgpKQogCQkJCQlwcmludGsoIk9PTSBpbiBic2FsZyAoJWQpXG4iLCBfX0xJTkVfXyk7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9yb3V0ZS5jIGIvbmV0L2lwdjQvcm91dGUuYwppbmRleCBhNmQ3YzU4Li4yZWE2ZGNjIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9yb3V0ZS5jCisrKyBiL25ldC9pcHY0L3JvdXRlLmMKQEAgLTExMDksNyArMTEwOSwxMiBAQAogCQlwcmludGsoIlxuIik7CiAJfQogI2VuZGlmCi0JcnRfaGFzaF90YWJsZVtoYXNoXS5jaGFpbiA9IHJ0OworCS8qCisJICogU2luY2UgbG9va3VwIGlzIGxvY2tmcmVlLCB3ZSBtdXN0IG1ha2Ugc3VyZQorCSAqIHByZXZpb3VzIHdyaXRlcyB0byBydCBhcmUgY29taXR0ZWQgdG8gbWVtb3J5CisJICogYmVmb3JlIG1ha2luZyBydCB2aXNpYmxlIHRvIG90aGVyIENQVVMuCisJICovCisJcmN1X2Fzc2lnbl9wb2ludGVyKHJ0X2hhc2hfdGFibGVbaGFzaF0uY2hhaW4sIHJ0KTsKIAlzcGluX3VubG9ja19iaChydF9oYXNoX2xvY2tfYWRkcihoYXNoKSk7CiAJKnJwID0gcnQ7CiAJcmV0dXJuIDA7CkBAIC0yOTA4LDggKzI5MTMsNiBAQAogfQogCiBzdGF0aWMgaW50IGlwdjRfc3lzY3RsX3J0Y2FjaGVfZmx1c2hfc3RyYXRlZ3koY3RsX3RhYmxlICp0YWJsZSwKLQkJCQkJCWludCBfX3VzZXIgKm5hbWUsCi0JCQkJCQlpbnQgbmxlbiwKIAkJCQkJCXZvaWQgX191c2VyICpvbGR2YWwsCiAJCQkJCQlzaXplX3QgX191c2VyICpvbGRsZW5wLAogCQkJCQkJdm9pZCBfX3VzZXIgKm5ld3ZhbCwKQEAgLTI5NzIsMTYgKzI5NzUsMTMgQEAKIH0KIAogc3RhdGljIGludCBpcHY0X3N5c2N0bF9ydF9zZWNyZXRfaW50ZXJ2YWxfc3RyYXRlZ3koY3RsX3RhYmxlICp0YWJsZSwKLQkJCQkJCSAgIGludCBfX3VzZXIgKm5hbWUsCi0JCQkJCQkgICBpbnQgbmxlbiwKIAkJCQkJCSAgIHZvaWQgX191c2VyICpvbGR2YWwsCiAJCQkJCQkgICBzaXplX3QgX191c2VyICpvbGRsZW5wLAogCQkJCQkJICAgdm9pZCBfX3VzZXIgKm5ld3ZhbCwKIAkJCQkJCSAgIHNpemVfdCBuZXdsZW4pCiB7CiAJaW50IG9sZCA9IGlwX3J0X3NlY3JldF9pbnRlcnZhbDsKLQlpbnQgcmV0ID0gc3lzY3RsX2ppZmZpZXModGFibGUsIG5hbWUsIG5sZW4sIG9sZHZhbCwgb2xkbGVucCwgbmV3dmFsLAotCQkJCSBuZXdsZW4pOworCWludCByZXQgPSBzeXNjdGxfamlmZmllcyh0YWJsZSwgb2xkdmFsLCBvbGRsZW5wLCBuZXd2YWwsIG5ld2xlbik7CiAKIAlydF9zZWNyZXRfcmVzY2hlZHVsZShvbGQpOwogCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9zeXNjdGxfbmV0X2lwdjQuYyBiL25ldC9pcHY0L3N5c2N0bF9uZXRfaXB2NC5jCmluZGV4IDI3NmQwNDcuLjFiYjEwZGYgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3N5c2N0bF9uZXRfaXB2NC5jCisrKyBiL25ldC9pcHY0L3N5c2N0bF9uZXRfaXB2NC5jCkBAIC02NCw4ICs2NCw4IEBACiB9CiAKIC8qIFZhbGlkYXRlIGNoYW5nZXMgZnJvbSBzeXNjdGwgaW50ZXJmYWNlLiAqLwotc3RhdGljIGludCBpcHY0X3N5c2N0bF9sb2NhbF9wb3J0X3JhbmdlKGN0bF90YWJsZSAqdGFibGUsIGludCBfX3VzZXIgKm5hbWUsCi0JCQkJCSBpbnQgbmxlbiwgdm9pZCBfX3VzZXIgKm9sZHZhbCwKK3N0YXRpYyBpbnQgaXB2NF9zeXNjdGxfbG9jYWxfcG9ydF9yYW5nZShjdGxfdGFibGUgKnRhYmxlLAorCQkJCQkgdm9pZCBfX3VzZXIgKm9sZHZhbCwKIAkJCQkJIHNpemVfdCBfX3VzZXIgKm9sZGxlbnAsCiAJCQkJCXZvaWQgX191c2VyICpuZXd2YWwsIHNpemVfdCBuZXdsZW4pCiB7CkBAIC04MCw3ICs4MCw3IEBACiAJfTsKIAogCWluZXRfZ2V0X2xvY2FsX3BvcnRfcmFuZ2UocmFuZ2UsIHJhbmdlICsgMSk7Ci0JcmV0ID0gc3lzY3RsX2ludHZlYygmdG1wLCBuYW1lLCBubGVuLCBvbGR2YWwsIG9sZGxlbnAsIG5ld3ZhbCwgbmV3bGVuKTsKKwlyZXQgPSBzeXNjdGxfaW50dmVjKCZ0bXAsIG9sZHZhbCwgb2xkbGVucCwgbmV3dmFsLCBuZXdsZW4pOwogCWlmIChyZXQgPT0gMCAmJiBuZXd2YWwgJiYgbmV3bGVuKSB7CiAJCWlmIChyYW5nZVsxXSA8IHJhbmdlWzBdKQogCQkJcmV0ID0gLUVJTlZBTDsKQEAgLTEwOSw4ICsxMDksOCBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgc3lzY3RsX3RjcF9jb25nZXN0aW9uX2NvbnRyb2woY3RsX3RhYmxlICp0YWJsZSwgaW50IF9fdXNlciAqbmFtZSwKLQkJCQkJIGludCBubGVuLCB2b2lkIF9fdXNlciAqb2xkdmFsLAorc3RhdGljIGludCBzeXNjdGxfdGNwX2Nvbmdlc3Rpb25fY29udHJvbChjdGxfdGFibGUgKnRhYmxlLAorCQkJCQkgdm9pZCBfX3VzZXIgKm9sZHZhbCwKIAkJCQkJIHNpemVfdCBfX3VzZXIgKm9sZGxlbnAsCiAJCQkJCSB2b2lkIF9fdXNlciAqbmV3dmFsLCBzaXplX3QgbmV3bGVuKQogewpAQCAtMTIyLDcgKzEyMiw3IEBACiAJaW50IHJldDsKIAogCXRjcF9nZXRfZGVmYXVsdF9jb25nZXN0aW9uX2NvbnRyb2wodmFsKTsKLQlyZXQgPSBzeXNjdGxfc3RyaW5nKCZ0YmwsIG5hbWUsIG5sZW4sIG9sZHZhbCwgb2xkbGVucCwgbmV3dmFsLCBuZXdsZW4pOworCXJldCA9IHN5c2N0bF9zdHJpbmcoJnRibCwgb2xkdmFsLCBvbGRsZW5wLCBuZXd2YWwsIG5ld2xlbik7CiAJaWYgKHJldCA9PSAxICYmIG5ld3ZhbCAmJiBuZXdsZW4pCiAJCXJldCA9IHRjcF9zZXRfZGVmYXVsdF9jb25nZXN0aW9uX2NvbnRyb2wodmFsKTsKIAlyZXR1cm4gcmV0OwpAQCAtMTY1LDggKzE2NSw4IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBzdHJhdGVneV9hbGxvd2VkX2Nvbmdlc3Rpb25fY29udHJvbChjdGxfdGFibGUgKnRhYmxlLCBpbnQgX191c2VyICpuYW1lLAotCQkJCQkgICAgICAgaW50IG5sZW4sIHZvaWQgX191c2VyICpvbGR2YWwsCitzdGF0aWMgaW50IHN0cmF0ZWd5X2FsbG93ZWRfY29uZ2VzdGlvbl9jb250cm9sKGN0bF90YWJsZSAqdGFibGUsCisJCQkJCSAgICAgICB2b2lkIF9fdXNlciAqb2xkdmFsLAogCQkJCQkgICAgICAgc2l6ZV90IF9fdXNlciAqb2xkbGVucCwKIAkJCQkJICAgICAgIHZvaWQgX191c2VyICpuZXd2YWwsCiAJCQkJCSAgICAgICBzaXplX3QgbmV3bGVuKQpAQCAtMTc5LDcgKzE3OSw3IEBACiAJCXJldHVybiAtRU5PTUVNOwogCiAJdGNwX2dldF9hdmFpbGFibGVfY29uZ2VzdGlvbl9jb250cm9sKHRibC5kYXRhLCB0YmwubWF4bGVuKTsKLQlyZXQgPSBzeXNjdGxfc3RyaW5nKCZ0YmwsIG5hbWUsIG5sZW4sIG9sZHZhbCwgb2xkbGVucCwgbmV3dmFsLCBuZXdsZW4pOworCXJldCA9IHN5c2N0bF9zdHJpbmcoJnRibCwgb2xkdmFsLCBvbGRsZW5wLCBuZXd2YWwsIG5ld2xlbik7CiAJaWYgKHJldCA9PSAxICYmIG5ld3ZhbCAmJiBuZXdsZW4pCiAJCXJldCA9IHRjcF9zZXRfYWxsb3dlZF9jb25nZXN0aW9uX2NvbnRyb2wodGJsLmRhdGEpOwogCWtmcmVlKHRibC5kYXRhKTsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcF9jb25nLmMgYi9uZXQvaXB2NC90Y3BfY29uZy5jCmluZGV4IDZhMjUwODIuLjRlYzViNGUgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3RjcF9jb25nLmMKKysrIGIvbmV0L2lwdjQvdGNwX2NvbmcuYwpAQCAtMTE1LDcgKzExNSw3IEBACiAKIAlzcGluX2xvY2soJnRjcF9jb25nX2xpc3RfbG9jayk7CiAJY2EgPSB0Y3BfY2FfZmluZChuYW1lKTsKLSNpZmRlZiBDT05GSUdfS01PRAorI2lmZGVmIENPTkZJR19NT0RVTEVTCiAJaWYgKCFjYSAmJiBjYXBhYmxlKENBUF9TWVNfTU9EVUxFKSkgewogCQlzcGluX3VubG9jaygmdGNwX2NvbmdfbGlzdF9sb2NrKTsKIApAQCAtMjQ0LDcgKzI0NCw3IEBACiAJaWYgKGNhID09IGljc2stPmljc2tfY2Ffb3BzKQogCQlnb3RvIG91dDsKIAotI2lmZGVmIENPTkZJR19LTU9ECisjaWZkZWYgQ09ORklHX01PRFVMRVMKIAkvKiBub3QgZm91bmQgYXR0ZW1wdCB0byBhdXRvbG9hZCBtb2R1bGUgKi8KIAlpZiAoIWNhICYmIGNhcGFibGUoQ0FQX1NZU19NT0RVTEUpKSB7CiAJCXJjdV9yZWFkX3VubG9jaygpOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdWRwLmMgYi9uZXQvaXB2NC91ZHAuYwppbmRleCBlYWNmNGNmLi4yMDk1YWJjIDEwMDY0NAotLS0gYS9uZXQvaXB2NC91ZHAuYworKysgYi9uZXQvaXB2NC91ZHAuYwpAQCAtOCw3ICs4LDcgQEAKICAqIEF1dGhvcnM6CVJvc3MgQmlybwogICoJCUZyZWQgTi4gdmFuIEtlbXBlbiwgPHdhbHRqZUB1V2FsdC5OTC5NdWduZXQuT1JHPgogICoJCUFybnQgR3VsYnJhbmRzZW4sIDxhZ3VsYnJhQG52Zy51bml0Lm5vPgotICoJCUFsYW4gQ294LCA8QWxhbi5Db3hAbGludXgub3JnPgorICoJCUFsYW4gQ294LCA8YWxhbkBseG9yZ3VrLnVrdXUub3JnLnVrPgogICoJCUhpcm9rYXp1IFRha2FoYXNoaSwgPHRha2FAdmFsaW51eC5jby5qcD4KICAqCiAgKiBGaXhlczoKZGlmZiAtLWdpdCBhL25ldC9pcHY2L2FkZHJjb25mLmMgYi9uZXQvaXB2Ni9hZGRyY29uZi5jCmluZGV4IDdiNmE1ODQuLmVlYTk1NDIgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L2FkZHJjb25mLmMKKysrIGIvbmV0L2lwdjYvYWRkcmNvbmYuYwpAQCAtMzk4Miw3ICszOTgyLDYgQEAKIH0KIAogc3RhdGljIGludCBhZGRyY29uZl9zeXNjdGxfZm9yd2FyZF9zdHJhdGVneShjdGxfdGFibGUgKnRhYmxlLAotCQkJCQkgICAgaW50IF9fdXNlciAqbmFtZSwgaW50IG5sZW4sCiAJCQkJCSAgICB2b2lkIF9fdXNlciAqb2xkdmFsLAogCQkJCQkgICAgc2l6ZV90IF9fdXNlciAqb2xkbGVucCwKIAkJCQkJICAgIHZvaWQgX191c2VyICpuZXd2YWwsIHNpemVfdCBuZXdsZW4pCmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9hZl9pbmV0Ni5jIGIvbmV0L2lwdjYvYWZfaW5ldDYuYwppbmRleCAwNTBlMTRiLi4wMWVkYWM4IDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9hZl9pbmV0Ni5jCisrKyBiL25ldC9pcHY2L2FmX2luZXQ2LmMKQEAgLTgzNCw3ICs4MzQsNyBAQAogCXNubXBfbWliX2ZyZWUoKHZvaWQgKiopbmV0LT5taWIuaWNtcHY2bXNnX3N0YXRpc3RpY3MpOwogfQogCi1zdGF0aWMgaW50IGluZXQ2X25ldF9pbml0KHN0cnVjdCBuZXQgKm5ldCkKK3N0YXRpYyBpbnQgX19uZXRfaW5pdCBpbmV0Nl9uZXRfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpCiB7CiAJaW50IGVyciA9IDA7CiAKZGlmZiAtLWdpdCBhL25ldC9pcHY2L25kaXNjLmMgYi9uZXQvaXB2Ni9uZGlzYy5jCmluZGV4IDg0MGIxNTcuLjE3MjQzODMgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L25kaXNjLmMKKysrIGIvbmV0L2lwdjYvbmRpc2MuYwpAQCAtMTE5OSw3ICsxMTk5LDcgQEAKIAkJfQogCQluZWlnaC0+ZmxhZ3MgfD0gTlRGX1JPVVRFUjsKIAl9IGVsc2UgaWYgKHJ0KSB7Ci0JCXJ0LT5ydDZpX2ZsYWdzIHw9IChydC0+cnQ2aV9mbGFncyAmIH5SVEZfUFJFRl9NQVNLKSB8IFJURl9QUkVGKHByZWYpOworCQlydC0+cnQ2aV9mbGFncyA9IChydC0+cnQ2aV9mbGFncyAmIH5SVEZfUFJFRl9NQVNLKSB8IFJURl9QUkVGKHByZWYpOwogCX0KIAogCWlmIChydCkKQEAgLTE3MzAsOSArMTczMCw4IEBACiAJcmV0dXJuIHJldDsKIH0KIAotaW50IG5kaXNjX2lmaW5mb19zeXNjdGxfc3RyYXRlZ3koY3RsX3RhYmxlICpjdGwsIGludCBfX3VzZXIgKm5hbWUsCi0JCQkJIGludCBubGVuLCB2b2lkIF9fdXNlciAqb2xkdmFsLAotCQkJCSBzaXplX3QgX191c2VyICpvbGRsZW5wLAoraW50IG5kaXNjX2lmaW5mb19zeXNjdGxfc3RyYXRlZ3koY3RsX3RhYmxlICpjdGwsCisJCQkJIHZvaWQgX191c2VyICpvbGR2YWwsIHNpemVfdCBfX3VzZXIgKm9sZGxlbnAsCiAJCQkJIHZvaWQgX191c2VyICpuZXd2YWwsIHNpemVfdCBuZXdsZW4pCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGN0bC0+ZXh0cmExOwpAQCAtMTc0NSwxMyArMTc0NCwxMSBAQAogCiAJc3dpdGNoIChjdGwtPmN0bF9uYW1lKSB7CiAJY2FzZSBORVRfTkVJR0hfUkVBQ0hBQkxFX1RJTUU6Ci0JCXJldCA9IHN5c2N0bF9qaWZmaWVzKGN0bCwgbmFtZSwgbmxlbiwKLQkJCQkgICAgIG9sZHZhbCwgb2xkbGVucCwgbmV3dmFsLCBuZXdsZW4pOworCQlyZXQgPSBzeXNjdGxfamlmZmllcyhjdGwsIG9sZHZhbCwgb2xkbGVucCwgbmV3dmFsLCBuZXdsZW4pOwogCQlicmVhazsKIAljYXNlIE5FVF9ORUlHSF9SRVRSQU5TX1RJTUVfTVM6CiAJY2FzZSBORVRfTkVJR0hfUkVBQ0hBQkxFX1RJTUVfTVM6Ci0JCSByZXQgPSBzeXNjdGxfbXNfamlmZmllcyhjdGwsIG5hbWUsIG5sZW4sCi0JCQkJCSBvbGR2YWwsIG9sZGxlbnAsIG5ld3ZhbCwgbmV3bGVuKTsKKwkJIHJldCA9IHN5c2N0bF9tc19qaWZmaWVzKGN0bCwgb2xkdmFsLCBvbGRsZW5wLCBuZXd2YWwsIG5ld2xlbik7CiAJCSBicmVhazsKIAlkZWZhdWx0OgogCQlyZXQgPSAwOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvbmV0ZmlsdGVyLmMgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIuYwppbmRleCA2YjI5YjAzLi5mZDViM2E0IDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9uZXRmaWx0ZXIuYworKysgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIuYwpAQCAtMTIsNiArMTIsNyBAQAogCiBpbnQgaXA2X3JvdXRlX21lX2hhcmRlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogeworCXN0cnVjdCBuZXQgKm5ldCA9IGRldl9uZXQoc2tiLT5kc3QtPmRldik7CiAJc3RydWN0IGlwdjZoZHIgKmlwaCA9IGlwdjZfaGRyKHNrYik7CiAJc3RydWN0IGRzdF9lbnRyeSAqZHN0OwogCXN0cnVjdCBmbG93aSBmbCA9IHsKQEAgLTIzLDcgKzI0LDcgQEAKIAkJICAgIC5zYWRkciA9IGlwaC0+c2FkZHIsIH0gfSwKIAl9OwogCi0JZHN0ID0gaXA2X3JvdXRlX291dHB1dChkZXZfbmV0KHNrYi0+ZHN0LT5kZXYpLCBza2ItPnNrLCAmZmwpOworCWRzdCA9IGlwNl9yb3V0ZV9vdXRwdXQobmV0LCBza2ItPnNrLCAmZmwpOwogCiAjaWZkZWYgQ09ORklHX1hGUk0KIAlpZiAoIShJUDZDQihza2IpLT5mbGFncyAmIElQNlNLQl9YRlJNX1RSQU5TRk9STUVEKSAmJgpAQCAtMzMsOCArMzQsNyBAQAogI2VuZGlmCiAKIAlpZiAoZHN0LT5lcnJvcikgewotCQlJUDZfSU5DX1NUQVRTKCZpbml0X25ldCwgaXA2X2RzdF9pZGV2KGRzdCksCi0JCQkgICAgICBJUFNUQVRTX01JQl9PVVROT1JPVVRFUyk7CisJCUlQNl9JTkNfU1RBVFMobmV0LCBpcDZfZHN0X2lkZXYoZHN0KSwgSVBTVEFUU19NSUJfT1VUTk9ST1VURVMpOwogCQlMSU1JVF9ORVRERUJVRyhLRVJOX0RFQlVHICJpcDZfcm91dGVfbWVfaGFyZGVyOiBObyBtb3JlIHJvdXRlLlxuIik7CiAJCWRzdF9yZWxlYXNlKGRzdCk7CiAJCXJldHVybiAtRUlOVkFMOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvc3luY29va2llcy5jIGIvbmV0L2lwdjYvc3luY29va2llcy5jCmluZGV4IGVjMzk0Y2YuLjY3NmM4MGIgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L3N5bmNvb2tpZXMuYworKysgYi9uZXQvaXB2Ni9zeW5jb29raWVzLmMKQEAgLTIwNCw2ICsyMDQsNyBAQAogCiAJcmVxLT5tc3MgPSBtc3M7CiAJaXJlcS0+cm10X3BvcnQgPSB0aC0+c291cmNlOworCWlyZXEtPmxvY19wb3J0ID0gdGgtPmRlc3Q7CiAJaXB2Nl9hZGRyX2NvcHkoJmlyZXE2LT5ybXRfYWRkciwgJmlwdjZfaGRyKHNrYiktPnNhZGRyKTsKIAlpcHY2X2FkZHJfY29weSgmaXJlcTYtPmxvY19hZGRyLCAmaXB2Nl9oZHIoc2tiKS0+ZGFkZHIpOwogCWlmIChpcHY2X29wdF9hY2NlcHRlZChzaywgc2tiKSB8fApkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvdGNwX2lwdjYuYyBiL25ldC9pcHY2L3RjcF9pcHY2LmMKaW5kZXggZTUzMTBjOWIuLmI2YjM1NmIgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L3RjcF9pcHY2LmMKKysrIGIvbmV0L2lwdjYvdGNwX2lwdjYuYwpAQCAtNDc2LDcgKzQ3Niw3IEBACiAJZmwuZmw2X2Zsb3dsYWJlbCA9IDA7CiAJZmwub2lmID0gdHJlcS0+aWlmOwogCWZsLmZsX2lwX2Rwb3J0ID0gaW5ldF9yc2socmVxKS0+cm10X3BvcnQ7Ci0JZmwuZmxfaXBfc3BvcnQgPSBpbmV0X3NrKHNrKS0+c3BvcnQ7CisJZmwuZmxfaXBfc3BvcnQgPSBpbmV0X3JzayhyZXEpLT5sb2NfcG9ydDsKIAlzZWN1cml0eV9yZXFfY2xhc3NpZnlfZmxvdyhyZXEsICZmbCk7CiAKIAlvcHQgPSBucC0+b3B0OwpAQCAtMTMwOSw3ICsxMzA5LDcgQEAKIAkJaXB2Nl9hZGRyX2NvcHkoJmZsLmZsNl9zcmMsICZ0cmVxLT5sb2NfYWRkcik7CiAJCWZsLm9pZiA9IHNrLT5za19ib3VuZF9kZXZfaWY7CiAJCWZsLmZsX2lwX2Rwb3J0ID0gaW5ldF9yc2socmVxKS0+cm10X3BvcnQ7Ci0JCWZsLmZsX2lwX3Nwb3J0ID0gaW5ldF9zayhzayktPnNwb3J0OworCQlmbC5mbF9pcF9zcG9ydCA9IGluZXRfcnNrKHJlcSktPmxvY19wb3J0OwogCQlzZWN1cml0eV9yZXFfY2xhc3NpZnlfZmxvdyhyZXEsICZmbCk7CiAKIAkJaWYgKGlwNl9kc3RfbG9va3VwKHNrLCAmZHN0LCAmZmwpKQpAQCAtMTg2NSw3ICsxODY1LDcgQEAKIAkJICAgaSwKIAkJICAgc3JjLT5zNl9hZGRyMzJbMF0sIHNyYy0+czZfYWRkcjMyWzFdLAogCQkgICBzcmMtPnM2X2FkZHIzMlsyXSwgc3JjLT5zNl9hZGRyMzJbM10sCi0JCSAgIG50b2hzKGluZXRfc2soc2spLT5zcG9ydCksCisJCSAgIG50b2hzKGluZXRfcnNrKHJlcSktPmxvY19wb3J0KSwKIAkJICAgZGVzdC0+czZfYWRkcjMyWzBdLCBkZXN0LT5zNl9hZGRyMzJbMV0sCiAJCSAgIGRlc3QtPnM2X2FkZHIzMlsyXSwgZGVzdC0+czZfYWRkcjMyWzNdLAogCQkgICBudG9ocyhpbmV0X3JzayhyZXEpLT5ybXRfcG9ydCksCmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvZGVidWdmc19uZXRkZXYuYyBiL25ldC9tYWM4MDIxMS9kZWJ1Z2ZzX25ldGRldi5jCmluZGV4IDJhNDUxNTYuLjJhZDUwNGYgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9kZWJ1Z2ZzX25ldGRldi5jCisrKyBiL25ldC9tYWM4MDIxMS9kZWJ1Z2ZzX25ldGRldi5jCkBAIC01NDUsOCArNTQ1LDEyIEBACiAKIAlzZGF0YSA9IElFRUU4MDIxMV9ERVZfVE9fU1VCX0lGKGRldik7CiAKLQlzcHJpbnRmKGJ1ZiwgIm5ldGRldjolcyIsIGRldi0+bmFtZSk7CiAJZGlyID0gc2RhdGEtPmRlYnVnZnNkaXI7CisKKwlpZiAoIWRpcikKKwkJcmV0dXJuIDA7CisKKwlzcHJpbnRmKGJ1ZiwgIm5ldGRldjolcyIsIGRldi0+bmFtZSk7CiAJaWYgKCFkZWJ1Z2ZzX3JlbmFtZShkaXItPmRfcGFyZW50LCBkaXIsIGRpci0+ZF9wYXJlbnQsIGJ1ZikpCiAJCXByaW50ayhLRVJOX0VSUiAibWFjODAyMTE6IGRlYnVnZnM6IGZhaWxlZCB0byByZW5hbWUgZGVidWdmcyAiCiAJCSAgICAgICAiZGlyIHRvICVzXG4iLCBidWYpOwpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL2RlYnVnZnNfc3RhLmMgYi9uZXQvbWFjODAyMTEvZGVidWdmc19zdGEuYwppbmRleCBiOTkwMmU0Li4xODlkMGJhIDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvZGVidWdmc19zdGEuYworKysgYi9uZXQvbWFjODAyMTEvZGVidWdmc19zdGEuYwpAQCAtMjQ5LDExICsyNDksMjIgQEAKIAlERUNMQVJFX01BQ19CVUYobWJ1Zik7CiAJdTggKm1hYzsKIAorCXN0YS0+ZGVidWdmcy5hZGRfaGFzX3J1biA9IHRydWU7CisKIAlpZiAoIXN0YXRpb25zX2RpcikKIAkJcmV0dXJuOwogCiAJbWFjID0gcHJpbnRfbWFjKG1idWYsIHN0YS0+c3RhLmFkZHIpOwogCisJLyoKKwkgKiBUaGlzIG1pZ2h0IGZhaWwgZHVlIHRvIGEgcmFjZSBjb25kaXRpb246CisJICogV2hlbiBtYWM4MDIxMSB1bmxpbmtzIGEgc3RhdGlvbiwgdGhlIGRlYnVnZnMgZW50cmllcworCSAqIHJlbWFpbiwgYnV0IGl0IGlzIGFscmVhZHkgcG9zc2libGUgdG8gbGluayBhIG5ldworCSAqIHN0YXRpb24gd2l0aCB0aGUgc2FtZSBhZGRyZXNzIHdoaWNoIHRyaWdnZXJzIGFkZGluZworCSAqIGl0IHRvIGRlYnVnZnM7IHRoZXJlZm9yZSwgaWYgdGhlIG9sZCBzdGF0aW9uIGlzbid0CisJICogZGVzdHJveWVkIHF1aWNrbHkgZW5vdWdoIHRoZSBvbGQgc3RhdGlvbidzIGRlYnVnZnMKKwkgKiBkaXIgbWlnaHQgc3RpbGwgYmUgYXJvdW5kLgorCSAqLwogCXN0YS0+ZGVidWdmcy5kaXIgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIobWFjLCBzdGF0aW9uc19kaXIpOwogCWlmICghc3RhLT5kZWJ1Z2ZzLmRpcikKIAkJcmV0dXJuOwpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmggYi9uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaAppbmRleCA4MDI1YjI5Li4xNTZlNDJhIDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaAorKysgYi9uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaApAQCAtODE2LDggKzgxNiw4IEBACiAJdTggKmV4dF9zdXBwX3JhdGVzOwogCXU4ICp3bW1faW5mbzsKIAl1OCAqd21tX3BhcmFtOwotCXU4ICpodF9jYXBfZWxlbTsKLQl1OCAqaHRfaW5mb19lbGVtOworCXN0cnVjdCBpZWVlODAyMTFfaHRfY2FwICpodF9jYXBfZWxlbTsKKwlzdHJ1Y3QgaWVlZTgwMjExX2h0X2FkZHRfaW5mbyAqaHRfaW5mb19lbGVtOwogCXU4ICptZXNoX2NvbmZpZzsKIAl1OCAqbWVzaF9pZDsKIAl1OCAqcGVlcl9saW5rOwpAQCAtODQ0LDggKzg0NCw2IEBACiAJdTggZXh0X3N1cHBfcmF0ZXNfbGVuOwogCXU4IHdtbV9pbmZvX2xlbjsKIAl1OCB3bW1fcGFyYW1fbGVuOwotCXU4IGh0X2NhcF9lbGVtX2xlbjsKLQl1OCBodF9pbmZvX2VsZW1fbGVuOwogCXU4IG1lc2hfY29uZmlnX2xlbjsKIAl1OCBtZXNoX2lkX2xlbjsKIAl1OCBwZWVyX2xpbmtfbGVuOwpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL21sbWUuYyBiL25ldC9tYWM4MDIxMS9tbG1lLmMKaW5kZXggNDlmODZmYS4uODc2NjVkN2IgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9tbG1lLmMKKysrIGIvbmV0L21hYzgwMjExL21sbWUuYwpAQCAtMTM0OCwxMCArMTM0OCw4IEBACiAJICAgIChpZnN0YS0+ZmxhZ3MgJiBJRUVFODAyMTFfU1RBX1dNTV9FTkFCTEVEKSkgewogCQlzdHJ1Y3QgaWVlZTgwMjExX2h0X2Jzc19pbmZvIGJzc19pbmZvOwogCQlpZWVlODAyMTFfaHRfY2FwX2llX3RvX2h0X2luZm8oCi0JCQkJKHN0cnVjdCBpZWVlODAyMTFfaHRfY2FwICopCiAJCQkJZWxlbXMuaHRfY2FwX2VsZW0sICZzdGEtPnN0YS5odF9pbmZvKTsKIAkJaWVlZTgwMjExX2h0X2FkZHRfaW5mb19pZV90b19odF9ic3NfaW5mbygKLQkJCQkoc3RydWN0IGllZWU4MDIxMV9odF9hZGR0X2luZm8gKikKIAkJCQllbGVtcy5odF9pbmZvX2VsZW0sICZic3NfaW5mbyk7CiAJCWllZWU4MDIxMV9oYW5kbGVfaHQobG9jYWwsIDEsICZzdGEtPnN0YS5odF9pbmZvLCAmYnNzX2luZm8pOwogCX0KQEAgLTE3MDksNyArMTcwNyw2IEBACiAJCXN0cnVjdCBpZWVlODAyMTFfaHRfYnNzX2luZm8gYnNzX2luZm87CiAKIAkJaWVlZTgwMjExX2h0X2FkZHRfaW5mb19pZV90b19odF9ic3NfaW5mbygKLQkJCQkoc3RydWN0IGllZWU4MDIxMV9odF9hZGR0X2luZm8gKikKIAkJCQllbGVtcy5odF9pbmZvX2VsZW0sICZic3NfaW5mbyk7CiAJCWNoYW5nZWQgfD0gaWVlZTgwMjExX2hhbmRsZV9odChsb2NhbCwgMSwgJmNvbmYtPmh0X2NvbmYsCiAJCQkJCSAgICAgICAmYnNzX2luZm8pOwpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL3J4LmMgYi9uZXQvbWFjODAyMTEvcnguYwppbmRleCA3N2U3YjAxLi5jZjZiMTIxIDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvcnguYworKysgYi9uZXQvbWFjODAyMTEvcnguYwpAQCAtMTM3OSw2ICsxMzc5LDcgQEAKIAlyZXR1cm4gUlhfUVVFVUVEOwogfQogCisjaWZkZWYgQ09ORklHX01BQzgwMjExX01FU0gKIHN0YXRpYyBpZWVlODAyMTFfcnhfcmVzdWx0CiBpZWVlODAyMTFfcnhfaF9tZXNoX2Z3ZGluZyhzdHJ1Y3QgaWVlZTgwMjExX3J4X2RhdGEgKnJ4KQogewpAQCAtMTQ1Myw3ICsxNDU0LDcgQEAKIAllbHNlCiAJCXJldHVybiBSWF9EUk9QX01PTklUT1I7CiB9Ci0KKyNlbmRpZgogCiBzdGF0aWMgaWVlZTgwMjExX3J4X3Jlc3VsdCBkZWJ1Z19ub2lubGluZQogaWVlZTgwMjExX3J4X2hfZGF0YShzdHJ1Y3QgaWVlZTgwMjExX3J4X2RhdGEgKnJ4KQpAQCAtMTc4MCw4ICsxNzgxLDEwIEBACiAJLyogbXVzdCBiZSBhZnRlciBNTUlDIHZlcmlmeSBzbyBoZWFkZXIgaXMgY291bnRlZCBpbiBNUERVIG1pYyAqLwogCUNBTExfUlhIKGllZWU4MDIxMV9yeF9oX3JlbW92ZV9xb3NfY29udHJvbCkKIAlDQUxMX1JYSChpZWVlODAyMTFfcnhfaF9hbXNkdSkKKyNpZmRlZiBDT05GSUdfTUFDODAyMTFfTUVTSAogCWlmIChpZWVlODAyMTFfdmlmX2lzX21lc2goJnNkYXRhLT52aWYpKQogCQlDQUxMX1JYSChpZWVlODAyMTFfcnhfaF9tZXNoX2Z3ZGluZyk7CisjZW5kaWYKIAlDQUxMX1JYSChpZWVlODAyMTFfcnhfaF9kYXRhKQogCUNBTExfUlhIKGllZWU4MDIxMV9yeF9oX2N0cmwpCiAJQ0FMTF9SWEgoaWVlZTgwMjExX3J4X2hfYWN0aW9uKQpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL3NjYW4uYyBiL25ldC9tYWM4MDIxMS9zY2FuLmMKaW5kZXggOGU2Njg1ZS4uNDE2YmI0MSAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL3NjYW4uYworKysgYi9uZXQvbWFjODAyMTEvc2Nhbi5jCkBAIC0zODgsNyArMzg4LDggQEAKIAlic3MgPSBpZWVlODAyMTFfYnNzX2luZm9fdXBkYXRlKHNkYXRhLT5sb2NhbCwgcnhfc3RhdHVzLAogCQkJCQltZ210LCBza2ItPmxlbiwgJmVsZW1zLAogCQkJCQlmcmVxLCBiZWFjb24pOwotCWllZWU4MDIxMV9yeF9ic3NfcHV0KHNkYXRhLT5sb2NhbCwgYnNzKTsKKwlpZiAoYnNzKQorCQlpZWVlODAyMTFfcnhfYnNzX3B1dChzZGF0YS0+bG9jYWwsIGJzcyk7CiAKIAlkZXZfa2ZyZWVfc2tiKHNrYik7CiAJcmV0dXJuIFJYX1FVRVVFRDsKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9zdGFfaW5mby5jIGIvbmV0L21hYzgwMjExL3N0YV9pbmZvLmMKaW5kZXggOWI3MmQxNS4uN2ZlZjhlYSAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL3N0YV9pbmZvLmMKKysrIGIvbmV0L21hYzgwMjExL3N0YV9pbmZvLmMKQEAgLTYzNSw3ICs2MzUsMTIgQEAKIAogCQlzcGluX2xvY2tfaXJxc2F2ZSgmbG9jYWwtPnN0YV9sb2NrLCBmbGFncyk7CiAJCWxpc3RfZm9yX2VhY2hfZW50cnkodG1wLCAmbG9jYWwtPnN0YV9saXN0LCBsaXN0KSB7Ci0JCQlpZiAoIXRtcC0+ZGVidWdmcy5kaXIpIHsKKwkJCS8qCisJCQkgKiBkZWJ1Z2ZzLmFkZF9oYXNfcnVuIHdpbGwgYmUgc2V0IGJ5CisJCQkgKiBpZWVlODAyMTFfc3RhX2RlYnVnZnNfYWRkIHJlZ2FyZGxlc3MKKwkJCSAqIG9mIHdoYXQgZWxzZSBpdCBkb2VzLgorCQkJICovCisJCQlpZiAoIXRtcC0+ZGVidWdmcy5hZGRfaGFzX3J1bikgewogCQkJCXN0YSA9IHRtcDsKIAkJCQlfX3N0YV9pbmZvX3BpbihzdGEpOwogCQkJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL3N0YV9pbmZvLmggYi9uZXQvbWFjODAyMTEvc3RhX2luZm8uaAppbmRleCBhNmI1MTg2Li4xNjhhMzlhIDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvc3RhX2luZm8uaAorKysgYi9uZXQvbWFjODAyMTEvc3RhX2luZm8uaApAQCAtMzAwLDYgKzMwMCw3IEBACiAJCXN0cnVjdCBkZW50cnkgKmluYWN0aXZlX21zOwogCQlzdHJ1Y3QgZGVudHJ5ICpsYXN0X3NlcV9jdHJsOwogCQlzdHJ1Y3QgZGVudHJ5ICphZ2dfc3RhdHVzOworCQlib29sIGFkZF9oYXNfcnVuOwogCX0gZGVidWdmczsKICNlbmRpZgogCmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvdXRpbC5jIGIvbmV0L21hYzgwMjExL3V0aWwuYwppbmRleCBmMzI1NjFlLi5jZWU0ODg0IDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvdXRpbC5jCisrKyBiL25ldC9tYWM4MDIxMS91dGlsLmMKQEAgLTUyOSwxMiArNTI5LDEyIEBACiAJCQllbGVtcy0+ZXh0X3N1cHBfcmF0ZXNfbGVuID0gZWxlbjsKIAkJCWJyZWFrOwogCQljYXNlIFdMQU5fRUlEX0hUX0NBUEFCSUxJVFk6Ci0JCQllbGVtcy0+aHRfY2FwX2VsZW0gPSBwb3M7Ci0JCQllbGVtcy0+aHRfY2FwX2VsZW1fbGVuID0gZWxlbjsKKwkJCWlmIChlbGVuID49IHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX2h0X2NhcCkpCisJCQkJZWxlbXMtPmh0X2NhcF9lbGVtID0gKHZvaWQgKilwb3M7CiAJCQlicmVhazsKIAkJY2FzZSBXTEFOX0VJRF9IVF9FWFRSQV9JTkZPOgotCQkJZWxlbXMtPmh0X2luZm9fZWxlbSA9IHBvczsKLQkJCWVsZW1zLT5odF9pbmZvX2VsZW1fbGVuID0gZWxlbjsKKwkJCWlmIChlbGVuID49IHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX2h0X2FkZHRfaW5mbykpCisJCQkJZWxlbXMtPmh0X2luZm9fZWxlbSA9ICh2b2lkICopcG9zOwogCQkJYnJlYWs7CiAJCWNhc2UgV0xBTl9FSURfTUVTSF9JRDoKIAkJCWVsZW1zLT5tZXNoX2lkID0gcG9zOwpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL3dleHQuYyBiL25ldC9tYWM4MDIxMS93ZXh0LmMKaW5kZXggN2UwZDUzYS4uNzQyZjgxMSAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL3dleHQuYworKysgYi9uZXQvbWFjODAyMTEvd2V4dC5jCkBAIC03NzUsNyArNzc1LDcgQEAKIAkgKiBjb25maWd1cmUgaXQgaGVyZSAqLwogCiAJaWYgKGxvY2FsLT5vcHMtPnNldF9mcmFnX3RocmVzaG9sZCkKLQkJbG9jYWwtPm9wcy0+c2V0X2ZyYWdfdGhyZXNob2xkKAorCQlyZXR1cm4gbG9jYWwtPm9wcy0+c2V0X2ZyYWdfdGhyZXNob2xkKAogCQkJbG9jYWxfdG9faHcobG9jYWwpLAogCQkJbG9jYWwtPmZyYWdtZW50YXRpb25fdGhyZXNob2xkKTsKIApkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9LY29uZmlnIGIvbmV0L25ldGZpbHRlci9LY29uZmlnCmluZGV4IDc4ODkyY2YuLjI1ZGNlZjkgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvS2NvbmZpZworKysgYi9uZXQvbmV0ZmlsdGVyL0tjb25maWcKQEAgLTI3MSw3ICsyNzEsNiBAQAogY29uZmlnIE5GX0NUX05FVExJTksKIAl0cmlzdGF0ZSAnQ29ubmVjdGlvbiB0cmFja2luZyBuZXRsaW5rIGludGVyZmFjZScKIAlzZWxlY3QgTkVURklMVEVSX05FVExJTksKLQlkZXBlbmRzIG9uIE5GX05BVD1uIHx8IE5GX05BVAogCWRlZmF1bHQgbSBpZiBORVRGSUxURVJfQURWQU5DRUQ9bgogCWhlbHAKIAkgIFRoaXMgb3B0aW9uIGVuYWJsZXMgc3VwcG9ydCBmb3IgYSBuZXRsaW5rLWJhc2VkIHVzZXJzcGFjZSBpbnRlcmZhY2UKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnIGIvbmV0L25ldGZpbHRlci9pcHZzL0tjb25maWcKaW5kZXggMDUwNDhlNC4uNzlhNjk4MCAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9pcHZzL0tjb25maWcKKysrIGIvbmV0L25ldGZpbHRlci9pcHZzL0tjb25maWcKQEAgLTI1LDExICsyNSwxMyBAQAogaWYgSVBfVlMKIAogY29uZmlnCUlQX1ZTX0lQVjYKLQlib29sICJJUHY2IHN1cHBvcnQgZm9yIElQVlMgKERBTkdFUk9VUykiCisJYm9vbCAiSVB2NiBzdXBwb3J0IGZvciBJUFZTIgogCWRlcGVuZHMgb24gRVhQRVJJTUVOVEFMICYmIChJUFY2ID0geSB8fCBJUF9WUyA9IElQVjYpCiAJLS0taGVscC0tLQogCSAgQWRkIElQdjYgc3VwcG9ydCB0byBJUFZTLiBUaGlzIGlzIGluY29tcGxldGUgYW5kIG1pZ2h0IGJlIGRhbmdlcm91cy4KIAorCSAgU2VlIGh0dHA6Ly93d3cubWluZGJhc2tldC5jb20vaXB2cyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKwogCSAgU2F5IE4gaWYgdW5zdXJlLgogCiBjb25maWcJSVBfVlNfREVCVUcKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2FjY3QuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2FjY3QuYwppbmRleCAwMzU5MWQzLi5iOTJkZjVjIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19hY2N0LmMKKysrIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYWNjdC5jCkBAIC0xMTUsNyArMTE1LDcgQEAKIAogCWlmIChuZXRfZXEobmV0LCAmaW5pdF9uZXQpKSB7CiAjaWZkZWYgQ09ORklHX05GX0NUX0FDQ1QKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiQ09ORklHX05GX0NUX0FDQ1QgaXMgZGVwcmVjYXRlZCBhbmQgd2lsbCBiZSByZW1vdmVkIHNvb24uIFBsYXNlIHVzZVxuIik7CisJcHJpbnRrKEtFUk5fV0FSTklORyAiQ09ORklHX05GX0NUX0FDQ1QgaXMgZGVwcmVjYXRlZCBhbmQgd2lsbCBiZSByZW1vdmVkIHNvb24uIFBsZWFzZSB1c2VcbiIpOwogCQlwcmludGsoS0VSTl9XQVJOSU5HICJuZl9jb25udHJhY2suYWNjdD0xIGtlcm5lbCBwYXJhbWF0ZXIsIGFjY3Q9MSBuZl9jb25udHJhY2sgbW9kdWxlIG9wdGlvbiBvclxuIik7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgInN5c2N0bCBuZXQubmV0ZmlsdGVyLm5mX2Nvbm50cmFja19hY2N0PTEgdG8gZW5hYmxlIGl0LlxuIik7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvcmUuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvcmUuYwppbmRleCAyN2RlM2M3Li42MjJkN2M2IDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb3JlLmMKKysrIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfY29yZS5jCkBAIC0zOCw5ICszOCwxNiBAQAogI2luY2x1ZGUgPG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvcmUuaD4KICNpbmNsdWRlIDxuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19leHRlbmQuaD4KICNpbmNsdWRlIDxuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19hY2N0Lmg+CisjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9uZl9uYXQuaD4KIAogI2RlZmluZSBORl9DT05OVFJBQ0tfVkVSU0lPTgkiMC41LjAiCiAKK3Vuc2lnbmVkIGludAorKCpuZm5ldGxpbmtfcGFyc2VfbmF0X3NldHVwX2hvb2spKHN0cnVjdCBuZl9jb25uICpjdCwKKwkJCQkgIGVudW0gbmZfbmF0X21hbmlwX3R5cGUgbWFuaXAsCisJCQkJICBzdHJ1Y3QgbmxhdHRyICphdHRyKSBfX3JlYWRfbW9zdGx5OworRVhQT1JUX1NZTUJPTF9HUEwobmZuZXRsaW5rX3BhcnNlX25hdF9zZXR1cF9ob29rKTsKKwogREVGSU5FX1NQSU5MT0NLKG5mX2Nvbm50cmFja19sb2NrKTsKIEVYUE9SVF9TWU1CT0xfR1BMKG5mX2Nvbm50cmFja19sb2NrKTsKIApkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jCmluZGV4IGNhZGZkMTUuLmEwNDBkNDYgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYworKysgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMKQEAgLTY4OSw3MSArNjg5LDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotI2lmZGVmIENPTkZJR19ORl9OQVRfTkVFREVECi1zdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgcHJvdG9uYXRfbmxhX3BvbGljeVtDVEFfUFJPVE9OQVRfTUFYKzFdID0gewotCVtDVEFfUFJPVE9OQVRfUE9SVF9NSU5dCT0geyAudHlwZSA9IE5MQV9VMTYgfSwKLQlbQ1RBX1BST1RPTkFUX1BPUlRfTUFYXQk9IHsgLnR5cGUgPSBOTEFfVTE2IH0sCi19OwotCi1zdGF0aWMgaW50IG5mbmV0bGlua19wYXJzZV9uYXRfcHJvdG8oc3RydWN0IG5sYXR0ciAqYXR0ciwKLQkJCQkgICAgIGNvbnN0IHN0cnVjdCBuZl9jb25uICpjdCwKLQkJCQkgICAgIHN0cnVjdCBuZl9uYXRfcmFuZ2UgKnJhbmdlKQotewotCXN0cnVjdCBubGF0dHIgKnRiW0NUQV9QUk9UT05BVF9NQVgrMV07Ci0JY29uc3Qgc3RydWN0IG5mX25hdF9wcm90b2NvbCAqbnB0OwotCWludCBlcnI7Ci0KLQllcnIgPSBubGFfcGFyc2VfbmVzdGVkKHRiLCBDVEFfUFJPVE9OQVRfTUFYLCBhdHRyLCBwcm90b25hdF9ubGFfcG9saWN5KTsKLQlpZiAoZXJyIDwgMCkKLQkJcmV0dXJuIGVycjsKLQotCW5wdCA9IG5mX25hdF9wcm90b19maW5kX2dldChuZl9jdF9wcm90b251bShjdCkpOwotCWlmIChucHQtPm5sYXR0cl90b19yYW5nZSkKLQkJZXJyID0gbnB0LT5ubGF0dHJfdG9fcmFuZ2UodGIsIHJhbmdlKTsKLQluZl9uYXRfcHJvdG9fcHV0KG5wdCk7Ci0JcmV0dXJuIGVycjsKLX0KLQotc3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IG5hdF9ubGFfcG9saWN5W0NUQV9OQVRfTUFYKzFdID0gewotCVtDVEFfTkFUX01JTklQXQkJPSB7IC50eXBlID0gTkxBX1UzMiB9LAotCVtDVEFfTkFUX01BWElQXQkJPSB7IC50eXBlID0gTkxBX1UzMiB9LAotfTsKLQotc3RhdGljIGlubGluZSBpbnQKLW5mbmV0bGlua19wYXJzZV9uYXQoc3RydWN0IG5sYXR0ciAqbmF0LAotCQkgICAgY29uc3Qgc3RydWN0IG5mX2Nvbm4gKmN0LCBzdHJ1Y3QgbmZfbmF0X3JhbmdlICpyYW5nZSkKLXsKLQlzdHJ1Y3QgbmxhdHRyICp0YltDVEFfTkFUX01BWCsxXTsKLQlpbnQgZXJyOwotCi0JbWVtc2V0KHJhbmdlLCAwLCBzaXplb2YoKnJhbmdlKSk7Ci0KLQllcnIgPSBubGFfcGFyc2VfbmVzdGVkKHRiLCBDVEFfTkFUX01BWCwgbmF0LCBuYXRfbmxhX3BvbGljeSk7Ci0JaWYgKGVyciA8IDApCi0JCXJldHVybiBlcnI7Ci0KLQlpZiAodGJbQ1RBX05BVF9NSU5JUF0pCi0JCXJhbmdlLT5taW5faXAgPSBubGFfZ2V0X2JlMzIodGJbQ1RBX05BVF9NSU5JUF0pOwotCi0JaWYgKCF0YltDVEFfTkFUX01BWElQXSkKLQkJcmFuZ2UtPm1heF9pcCA9IHJhbmdlLT5taW5faXA7Ci0JZWxzZQotCQlyYW5nZS0+bWF4X2lwID0gbmxhX2dldF9iZTMyKHRiW0NUQV9OQVRfTUFYSVBdKTsKLQotCWlmIChyYW5nZS0+bWluX2lwKQotCQlyYW5nZS0+ZmxhZ3MgfD0gSVBfTkFUX1JBTkdFX01BUF9JUFM7Ci0KLQlpZiAoIXRiW0NUQV9OQVRfUFJPVE9dKQotCQlyZXR1cm4gMDsKLQotCWVyciA9IG5mbmV0bGlua19wYXJzZV9uYXRfcHJvdG8odGJbQ1RBX05BVF9QUk9UT10sIGN0LCByYW5nZSk7Ci0JaWYgKGVyciA8IDApCi0JCXJldHVybiBlcnI7Ci0KLQlyZXR1cm4gMDsKLX0KLSNlbmRpZgotCiBzdGF0aWMgaW5saW5lIGludAogY3RuZXRsaW5rX3BhcnNlX2hlbHAoc3RydWN0IG5sYXR0ciAqYXR0ciwgY2hhciAqKmhlbHBlcl9uYW1lKQogewpAQCAtODc4LDYgKzgxMywzNiBAQAogCXJldHVybiBlcnI7CiB9CiAKKyNpZmRlZiBDT05GSUdfTkZfTkFUX05FRURFRAorc3RhdGljIGludAorY3RuZXRsaW5rX3BhcnNlX25hdF9zZXR1cChzdHJ1Y3QgbmZfY29ubiAqY3QsCisJCQkgIGVudW0gbmZfbmF0X21hbmlwX3R5cGUgbWFuaXAsCisJCQkgIHN0cnVjdCBubGF0dHIgKmF0dHIpCit7CisJdHlwZW9mKG5mbmV0bGlua19wYXJzZV9uYXRfc2V0dXBfaG9vaykgcGFyc2VfbmF0X3NldHVwOworCisJcGFyc2VfbmF0X3NldHVwID0gcmN1X2RlcmVmZXJlbmNlKG5mbmV0bGlua19wYXJzZV9uYXRfc2V0dXBfaG9vayk7CisJaWYgKCFwYXJzZV9uYXRfc2V0dXApIHsKKyNpZmRlZiBDT05GSUdfTU9EVUxFUworCQlyY3VfcmVhZF91bmxvY2soKTsKKwkJbmZubF91bmxvY2soKTsKKwkJaWYgKHJlcXVlc3RfbW9kdWxlKCJuZi1uYXQtaXB2NCIpIDwgMCkgeworCQkJbmZubF9sb2NrKCk7CisJCQlyY3VfcmVhZF9sb2NrKCk7CisJCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisJCX0KKwkJbmZubF9sb2NrKCk7CisJCXJjdV9yZWFkX2xvY2soKTsKKwkJaWYgKG5mbmV0bGlua19wYXJzZV9uYXRfc2V0dXBfaG9vaykKKwkJCXJldHVybiAtRUFHQUlOOworI2VuZGlmCisJCXJldHVybiAtRU9QTk9UU1VQUDsKKwl9CisKKwlyZXR1cm4gcGFyc2VfbmF0X3NldHVwKGN0LCBtYW5pcCwgYXR0cik7Cit9CisjZW5kaWYKKwogc3RhdGljIGludAogY3RuZXRsaW5rX2NoYW5nZV9zdGF0dXMoc3RydWN0IG5mX2Nvbm4gKmN0LCBzdHJ1Y3QgbmxhdHRyICpjZGFbXSkKIHsKQEAgLTg5NywzMSArODYyLDYgQEAKIAkJLyogQVNTVVJFRCBiaXQgY2FuIG9ubHkgYmUgc2V0ICovCiAJCXJldHVybiAtRUJVU1k7CiAKLQlpZiAoY2RhW0NUQV9OQVRfU1JDXSB8fCBjZGFbQ1RBX05BVF9EU1RdKSB7Ci0jaWZuZGVmIENPTkZJR19ORl9OQVRfTkVFREVECi0JCXJldHVybiAtRU9QTk9UU1VQUDsKLSNlbHNlCi0JCXN0cnVjdCBuZl9uYXRfcmFuZ2UgcmFuZ2U7Ci0KLQkJaWYgKGNkYVtDVEFfTkFUX0RTVF0pIHsKLQkJCWlmIChuZm5ldGxpbmtfcGFyc2VfbmF0KGNkYVtDVEFfTkFUX0RTVF0sIGN0LAotCQkJCQkJJnJhbmdlKSA8IDApCi0JCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCQlpZiAobmZfbmF0X2luaXRpYWxpemVkKGN0LCBJUF9OQVRfTUFOSVBfRFNUKSkKLQkJCQlyZXR1cm4gLUVFWElTVDsKLQkJCW5mX25hdF9zZXR1cF9pbmZvKGN0LCAmcmFuZ2UsIElQX05BVF9NQU5JUF9EU1QpOwotCQl9Ci0JCWlmIChjZGFbQ1RBX05BVF9TUkNdKSB7Ci0JCQlpZiAobmZuZXRsaW5rX3BhcnNlX25hdChjZGFbQ1RBX05BVF9TUkNdLCBjdCwKLQkJCQkJCSZyYW5nZSkgPCAwKQotCQkJCXJldHVybiAtRUlOVkFMOwotCQkJaWYgKG5mX25hdF9pbml0aWFsaXplZChjdCwgSVBfTkFUX01BTklQX1NSQykpCi0JCQkJcmV0dXJuIC1FRVhJU1Q7Ci0JCQluZl9uYXRfc2V0dXBfaW5mbyhjdCwgJnJhbmdlLCBJUF9OQVRfTUFOSVBfU1JDKTsKLQkJfQotI2VuZGlmCi0JfQotCiAJLyogQmUgY2FyZWZ1bCBoZXJlLCBtb2RpZnlpbmcgTkFUIGJpdHMgY2FuIHNjcmV3IHVwIHRoaW5ncywKIAkgKiBzbyBkb24ndCBsZXQgdXNlcnMgbW9kaWZ5IHRoZW0gZGlyZWN0bHkgaWYgdGhleSBkb24ndCBwYXNzCiAJICogbmZfbmF0X3JhbmdlLiAqLwpAQCAtOTI5LDYgKzg2OSwzMSBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50CitjdG5ldGxpbmtfY2hhbmdlX25hdChzdHJ1Y3QgbmZfY29ubiAqY3QsIHN0cnVjdCBubGF0dHIgKmNkYVtdKQoreworI2lmZGVmIENPTkZJR19ORl9OQVRfTkVFREVECisJaW50IHJldDsKKworCWlmIChjZGFbQ1RBX05BVF9EU1RdKSB7CisJCXJldCA9IGN0bmV0bGlua19wYXJzZV9uYXRfc2V0dXAoY3QsCisJCQkJCQlJUF9OQVRfTUFOSVBfRFNULAorCQkJCQkJY2RhW0NUQV9OQVRfRFNUXSk7CisJCWlmIChyZXQgPCAwKQorCQkJcmV0dXJuIHJldDsKKwl9CisJaWYgKGNkYVtDVEFfTkFUX1NSQ10pIHsKKwkJcmV0ID0gY3RuZXRsaW5rX3BhcnNlX25hdF9zZXR1cChjdCwKKwkJCQkJCUlQX05BVF9NQU5JUF9TUkMsCisJCQkJCQljZGFbQ1RBX05BVF9TUkNdKTsKKwkJaWYgKHJldCA8IDApCisJCQlyZXR1cm4gcmV0OworCX0KKwlyZXR1cm4gMDsKKyNlbHNlCisJcmV0dXJuIC1FT1BOT1RTVVBQOworI2VuZGlmCit9CiAKIHN0YXRpYyBpbmxpbmUgaW50CiBjdG5ldGxpbmtfY2hhbmdlX2hlbHBlcihzdHJ1Y3QgbmZfY29ubiAqY3QsIHN0cnVjdCBubGF0dHIgKmNkYVtdKQpAQCAtMTE1Nyw2ICsxMTIyLDE0IEBACiAJCX0KIAl9CiAKKwlpZiAoY2RhW0NUQV9OQVRfU1JDXSB8fCBjZGFbQ1RBX05BVF9EU1RdKSB7CisJCWVyciA9IGN0bmV0bGlua19jaGFuZ2VfbmF0KGN0LCBjZGEpOworCQlpZiAoZXJyIDwgMCkgeworCQkJcmN1X3JlYWRfdW5sb2NrKCk7CisJCQlnb3RvIGVycjsKKwkJfQorCX0KKwogCWlmIChjZGFbQ1RBX1BST1RPSU5GT10pIHsKIAkJZXJyID0gY3RuZXRsaW5rX2NoYW5nZV9wcm90b2luZm8oY3QsIGNkYSk7CiAJCWlmIChlcnIgPCAwKSB7CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcHRwLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcHRwLmMKaW5kZXggMzczZTUxZS4uMWJjMzAwMSAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHB0cC5jCisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3BwdHAuYwpAQCAtNjUsNyArNjUsNyBAQAogCQkJICAgICBzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdCAqZXhwKSBfX3JlYWRfbW9zdGx5OwogRVhQT1JUX1NZTUJPTF9HUEwobmZfbmF0X3BwdHBfaG9va19leHBlY3Rmbik7CiAKLSNpZmRlZiBERUJVRworI2lmIGRlZmluZWQoREVCVUcpIHx8IGRlZmluZWQoQ09ORklHX0RZTkFNSUNfUFJJTlRLX0RFQlVHKQogLyogUHB0cENvbnRyb2xNZXNzYWdlVHlwZSBuYW1lcyAqLwogY29uc3QgY2hhciAqY29uc3QgcHB0cF9tc2dfbmFtZVtdID0gewogCSJVTktOT1dOX01FU1NBR0UiLApkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl90cHJveHlfY29yZS5jIGIvbmV0L25ldGZpbHRlci9uZl90cHJveHlfY29yZS5jCmluZGV4IGZlMzRmNGIuLmNkYzk3ZjMgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfdHByb3h5X2NvcmUuYworKysgYi9uZXQvbmV0ZmlsdGVyL25mX3Rwcm94eV9jb3JlLmMKQEAgLTEwLDcgKzEwLDYgQEAKICAqCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KIAogI2luY2x1ZGUgPGxpbnV4L25ldC5oPgpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZm5ldGxpbmsuYyBiL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rLmMKaW5kZXggYjc1YzljNC4uOWMwYmExNyAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZm5ldGxpbmsuYworKysgYi9uZXQvbmV0ZmlsdGVyL25mbmV0bGluay5jCkBAIC00NCwxNSArNDQsMTcgQEAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmZuZXRsaW5rX3N1YnN5c3RlbSAqc3Vic3lzX3RhYmxlW05GTkxfU1VCU1lTX0NPVU5UXTsKIHN0YXRpYyBERUZJTkVfTVVURVgobmZubF9tdXRleCk7CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBuZm5sX2xvY2sodm9pZCkKK3ZvaWQgbmZubF9sb2NrKHZvaWQpCiB7CiAJbXV0ZXhfbG9jaygmbmZubF9tdXRleCk7CiB9CitFWFBPUlRfU1lNQk9MX0dQTChuZm5sX2xvY2spOwogCi1zdGF0aWMgaW5saW5lIHZvaWQgbmZubF91bmxvY2sodm9pZCkKK3ZvaWQgbmZubF91bmxvY2sodm9pZCkKIHsKIAltdXRleF91bmxvY2soJm5mbmxfbXV0ZXgpOwogfQorRVhQT1JUX1NZTUJPTF9HUEwobmZubF91bmxvY2spOwogCiBpbnQgbmZuZXRsaW5rX3N1YnN5c19yZWdpc3Rlcihjb25zdCBzdHJ1Y3QgbmZuZXRsaW5rX3N1YnN5c3RlbSAqbikKIHsKQEAgLTEzMiw5ICsxMzQsMTAgQEAKIAkJcmV0dXJuIDA7CiAKIAl0eXBlID0gbmxoLT5ubG1zZ190eXBlOworcmVwbGF5OgogCXNzID0gbmZuZXRsaW5rX2dldF9zdWJzeXModHlwZSk7CiAJaWYgKCFzcykgewotI2lmZGVmIENPTkZJR19LTU9ECisjaWZkZWYgQ09ORklHX01PRFVMRVMKIAkJbmZubF91bmxvY2soKTsKIAkJcmVxdWVzdF9tb2R1bGUoIm5mbmV0bGluay1zdWJzeXMtJWQiLCBORk5MX1NVQlNZU19JRCh0eXBlKSk7CiAJCW5mbmxfbG9jaygpOwpAQCAtMTY1LDcgKzE2OCwxMCBAQAogCQl9IGVsc2UKIAkJCXJldHVybiAtRUlOVkFMOwogCi0JCXJldHVybiBuYy0+Y2FsbChuZm5sLCBza2IsIG5saCwgY2RhKTsKKwkJZXJyID0gbmMtPmNhbGwobmZubCwgc2tiLCBubGgsIGNkYSk7CisJCWlmIChlcnIgPT0gLUVBR0FJTikKKwkJCWdvdG8gcmVwbGF5OworCQlyZXR1cm4gZXJyOwogCX0KIH0KIApkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci94dF9ORlFVRVVFLmMgYi9uZXQvbmV0ZmlsdGVyL3h0X05GUVVFVUUuYwppbmRleCAyY2MxZmZmLi5mOTk3N2IzIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL3h0X05GUVVFVUUuYworKysgYi9uZXQvbmV0ZmlsdGVyL3h0X05GUVVFVUUuYwpAQCAtNDgsNyArNDgsNyBAQAogCX0sCiAJewogCQkubmFtZQkJPSAiTkZRVUVVRSIsCi0JCS5mYW1pbHkJCT0gTkZfQVJQLAorCQkuZmFtaWx5CQk9IE5GUFJPVE9fQVJQLAogCQkudGFyZ2V0CQk9IG5mcXVldWVfdGcsCiAJCS50YXJnZXRzaXplCT0gc2l6ZW9mKHN0cnVjdCB4dF9ORlFfaW5mbyksCiAJCS5tZQkJPSBUSElTX01PRFVMRSwKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIveHRfaXByYW5nZS5jIGIvbmV0L25ldGZpbHRlci94dF9pcHJhbmdlLmMKaW5kZXggNmY2MmMzNi4uN2FjNTRlYSAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci94dF9pcHJhbmdlLmMKKysrIGIvbmV0L25ldGZpbHRlci94dF9pcHJhbmdlLmMKQEAgLTYxLDcgKzYxLDcgQEAKIAlpZiAoaW5mby0+ZmxhZ3MgJiBJUFJBTkdFX1NSQykgewogCQltICA9IG50b2hsKGlwaC0+c2FkZHIpIDwgbnRvaGwoaW5mby0+c3JjX21pbi5pcCk7CiAJCW0gfD0gbnRvaGwoaXBoLT5zYWRkcikgPiBudG9obChpbmZvLT5zcmNfbWF4LmlwKTsKLQkJbSBePSBpbmZvLT5mbGFncyAmIElQUkFOR0VfU1JDX0lOVjsKKwkJbSBePSAhIShpbmZvLT5mbGFncyAmIElQUkFOR0VfU1JDX0lOVik7CiAJCWlmIChtKSB7CiAJCQlwcl9kZWJ1Zygic3JjIElQICIgTklQUVVBRF9GTVQgIiBOT1QgaW4gcmFuZ2UgJXMiCiAJCQkgICAgICAgICBOSVBRVUFEX0ZNVCAiLSIgTklQUVVBRF9GTVQgIlxuIiwKQEAgLTc1LDcgKzc1LDcgQEAKIAlpZiAoaW5mby0+ZmxhZ3MgJiBJUFJBTkdFX0RTVCkgewogCQltICA9IG50b2hsKGlwaC0+ZGFkZHIpIDwgbnRvaGwoaW5mby0+ZHN0X21pbi5pcCk7CiAJCW0gfD0gbnRvaGwoaXBoLT5kYWRkcikgPiBudG9obChpbmZvLT5kc3RfbWF4LmlwKTsKLQkJbSBePSBpbmZvLT5mbGFncyAmIElQUkFOR0VfRFNUX0lOVjsKKwkJbSBePSAhIShpbmZvLT5mbGFncyAmIElQUkFOR0VfRFNUX0lOVik7CiAJCWlmIChtKSB7CiAJCQlwcl9kZWJ1ZygiZHN0IElQICIgTklQUVVBRF9GTVQgIiBOT1QgaW4gcmFuZ2UgJXMiCiAJCQkgICAgICAgICBOSVBRVUFEX0ZNVCAiLSIgTklQUVVBRF9GTVQgIlxuIiwKQEAgLTExNCwxNCArMTE0LDE0IEBACiAJaWYgKGluZm8tPmZsYWdzICYgSVBSQU5HRV9TUkMpIHsKIAkJbSAgPSBpcHJhbmdlX2lwdjZfc3ViKCZpcGgtPnNhZGRyLCAmaW5mby0+c3JjX21pbi5pbjYpIDwgMDsKIAkJbSB8PSBpcHJhbmdlX2lwdjZfc3ViKCZpcGgtPnNhZGRyLCAmaW5mby0+c3JjX21heC5pbjYpID4gMDsKLQkJbSBePSBpbmZvLT5mbGFncyAmIElQUkFOR0VfU1JDX0lOVjsKKwkJbSBePSAhIShpbmZvLT5mbGFncyAmIElQUkFOR0VfU1JDX0lOVik7CiAJCWlmIChtKQogCQkJcmV0dXJuIGZhbHNlOwogCX0KIAlpZiAoaW5mby0+ZmxhZ3MgJiBJUFJBTkdFX0RTVCkgewogCQltICA9IGlwcmFuZ2VfaXB2Nl9zdWIoJmlwaC0+ZGFkZHIsICZpbmZvLT5kc3RfbWluLmluNikgPCAwOwogCQltIHw9IGlwcmFuZ2VfaXB2Nl9zdWIoJmlwaC0+ZGFkZHIsICZpbmZvLT5kc3RfbWF4LmluNikgPiAwOwotCQltIF49IGluZm8tPmZsYWdzICYgSVBSQU5HRV9EU1RfSU5WOworCQltIF49ICEhKGluZm8tPmZsYWdzICYgSVBSQU5HRV9EU1RfSU5WKTsKIAkJaWYgKG0pCiAJCQlyZXR1cm4gZmFsc2U7CiAJfQpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci94dF9yZWNlbnQuYyBiL25ldC9uZXRmaWx0ZXIveHRfcmVjZW50LmMKaW5kZXggNGViZDRjYS4uMjgwYzQ3MSAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci94dF9yZWNlbnQuYworKysgYi9uZXQvbmV0ZmlsdGVyL3h0X3JlY2VudC5jCkBAIC0zMTgsMTUgKzMxOCwxNSBAQAogCWZvciAoaSA9IDA7IGkgPCBpcF9saXN0X2hhc2hfc2l6ZTsgaSsrKQogCQlJTklUX0xJU1RfSEVBRCgmdC0+aXBoYXNoW2ldKTsKICNpZmRlZiBDT05GSUdfUFJPQ19GUwotCXQtPnByb2MgPSBwcm9jX2NyZWF0ZSh0LT5uYW1lLCBpcF9saXN0X3Blcm1zLCByZWNlbnRfcHJvY19kaXIsCi0JCSAgJnJlY2VudF9tdF9mb3BzKTsKKwl0LT5wcm9jID0gcHJvY19jcmVhdGVfZGF0YSh0LT5uYW1lLCBpcF9saXN0X3Blcm1zLCByZWNlbnRfcHJvY19kaXIsCisJCSAgJnJlY2VudF9tdF9mb3BzLCB0KTsKIAlpZiAodC0+cHJvYyA9PSBOVUxMKSB7CiAJCWtmcmVlKHQpOwogCQlnb3RvIG91dDsKIAl9CiAjaWZkZWYgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9SRUNFTlRfUFJPQ19DT01QQVQKLQl0LT5wcm9jX29sZCA9IHByb2NfY3JlYXRlKHQtPm5hbWUsIGlwX2xpc3RfcGVybXMsIHByb2Nfb2xkX2RpciwKLQkJICAgICAgJnJlY2VudF9vbGRfZm9wcyk7CisJdC0+cHJvY19vbGQgPSBwcm9jX2NyZWF0ZV9kYXRhKHQtPm5hbWUsIGlwX2xpc3RfcGVybXMsIHByb2Nfb2xkX2RpciwKKwkJICAgICAgJnJlY2VudF9vbGRfZm9wcywgdCk7CiAJaWYgKHQtPnByb2Nfb2xkID09IE5VTEwpIHsKIAkJcmVtb3ZlX3Byb2NfZW50cnkodC0+bmFtZSwgcHJvY19vbGRfZGlyKTsKIAkJa2ZyZWUodCk7CkBAIC0zMzQsMTEgKzMzNCw5IEBACiAJfQogCXQtPnByb2Nfb2xkLT51aWQgICA9IGlwX2xpc3RfdWlkOwogCXQtPnByb2Nfb2xkLT5naWQgICA9IGlwX2xpc3RfZ2lkOwotCXQtPnByb2Nfb2xkLT5kYXRhICA9IHQ7CiAjZW5kaWYKIAl0LT5wcm9jLT51aWQgICAgICAgPSBpcF9saXN0X3VpZDsKIAl0LT5wcm9jLT5naWQgICAgICAgPSBpcF9saXN0X2dpZDsKLQl0LT5wcm9jLT5kYXRhICAgICAgPSB0OwogI2VuZGlmCiAJc3Bpbl9sb2NrX2JoKCZyZWNlbnRfbG9jayk7CiAJbGlzdF9hZGRfdGFpbCgmdC0+bGlzdCwgJnRhYmxlcyk7CmRpZmYgLS1naXQgYS9uZXQvbmV0bGFiZWwvTWFrZWZpbGUgYi9uZXQvbmV0bGFiZWwvTWFrZWZpbGUKaW5kZXggOGFmMThjMC4uZWE3NTBlOSAxMDA2NDQKLS0tIGEvbmV0L25ldGxhYmVsL01ha2VmaWxlCisrKyBiL25ldC9uZXRsYWJlbC9NYWtlZmlsZQpAQCAtNSw3ICs1LDggQEAKICMKIAogIyBiYXNlIG9iamVjdHMKLW9iai15CTo9IG5ldGxhYmVsX3VzZXIubyBuZXRsYWJlbF9rYXBpLm8gbmV0bGFiZWxfZG9tYWluaGFzaC5vCitvYmoteQk6PSBuZXRsYWJlbF91c2VyLm8gbmV0bGFiZWxfa2FwaS5vCitvYmoteQkrPSBuZXRsYWJlbF9kb21haW5oYXNoLm8gbmV0bGFiZWxfYWRkcmxpc3QubwogCiAjIG1hbmFnZW1lbnQgb2JqZWN0cwogb2JqLXkJKz0gbmV0bGFiZWxfbWdtdC5vCmRpZmYgLS1naXQgYS9uZXQvbmV0bGFiZWwvbmV0bGFiZWxfYWRkcmxpc3QuYyBiL25ldC9uZXRsYWJlbC9uZXRsYWJlbF9hZGRybGlzdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIwOTI1YTMKLS0tIC9kZXYvbnVsbAorKysgYi9uZXQvbmV0bGFiZWwvbmV0bGFiZWxfYWRkcmxpc3QuYwpAQCAtMCwwICsxLDM4OCBAQAorLyoKKyAqIE5ldExhYmVsIE5ldHdvcmsgQWRkcmVzcyBMaXN0cworICoKKyAqIFRoaXMgZmlsZSBjb250YWlucyBuZXR3b3JrIGFkZHJlc3MgbGlzdCBmdW5jdGlvbnMgdXNlZCB0byBtYW5hZ2Ugb3JkZXJlZAorICogbGlzdHMgb2YgbmV0d29yayBhZGRyZXNzZXMgZm9yIHVzZSBieSB0aGUgTmV0TGFiZWwgc3Vic3lzdGVtLiAgVGhlIE5ldExhYmVsCisgKiBzeXN0ZW0gbWFuYWdlcyBzdGF0aWMgYW5kIGR5bmFtaWMgbGFiZWwgbWFwcGluZ3MgZm9yIG5ldHdvcmsgcHJvdG9jb2xzIHN1Y2gKKyAqIGFzIENJUFNPIGFuZCBSSVBTTy4KKyAqCisgKiBBdXRob3I6IFBhdWwgTW9vcmUgPHBhdWwubW9vcmVAaHAuY29tPgorICoKKyAqLworCisvKgorICogKGMpIENvcHlyaWdodCBIZXdsZXR0LVBhY2thcmQgRGV2ZWxvcG1lbnQgQ29tcGFueSwgTC5QLiwgMjAwOAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyAgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyAgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUKKyAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgIGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3JjdXBkYXRlLmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvaW4uaD4KKyNpbmNsdWRlIDxsaW51eC9pbjYuaD4KKyNpbmNsdWRlIDxsaW51eC9pcC5oPgorI2luY2x1ZGUgPGxpbnV4L2lwdjYuaD4KKyNpbmNsdWRlIDxuZXQvaXAuaD4KKyNpbmNsdWRlIDxuZXQvaXB2Ni5oPgorI2luY2x1ZGUgPGxpbnV4L2F1ZGl0Lmg+CisKKyNpbmNsdWRlICJuZXRsYWJlbF9hZGRybGlzdC5oIgorCisvKgorICogQWRkcmVzcyBMaXN0IEZ1bmN0aW9ucworICovCisKKy8qKgorICogbmV0bGJsX2FmNGxpc3Rfc2VhcmNoIC0gU2VhcmNoIGZvciBhIG1hdGNoaW5nIElQdjQgYWRkcmVzcyBlbnRyeQorICogQGFkZHI6IElQdjQgYWRkcmVzcworICogQGhlYWQ6IHRoZSBsaXN0IGhlYWQKKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIFNlYXJjaGVzIHRoZSBJUHY0IGFkZHJlc3MgbGlzdCBnaXZlbiBieSBAaGVhZC4gIElmIGEgbWF0Y2hpbmcgYWRkcmVzcyBlbnRyeQorICogaXMgZm91bmQgaXQgaXMgcmV0dXJuZWQsIG90aGVyd2lzZSBOVUxMIGlzIHJldHVybmVkLiAgVGhlIGNhbGxlciBpcworICogcmVzcG9uc2libGUgZm9yIGNhbGxpbmcgdGhlIHJjdV9yZWFkX1t1bl1sb2NrKCkgZnVuY3Rpb25zLgorICoKKyAqLworc3RydWN0IG5ldGxibF9hZjRsaXN0ICpuZXRsYmxfYWY0bGlzdF9zZWFyY2goX19iZTMyIGFkZHIsCisJCQkJCSAgICAgc3RydWN0IGxpc3RfaGVhZCAqaGVhZCkKK3sKKwlzdHJ1Y3QgbmV0bGJsX2FmNGxpc3QgKml0ZXI7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShpdGVyLCBoZWFkLCBsaXN0KQorCQlpZiAoaXRlci0+dmFsaWQgJiYgKGFkZHIgJiBpdGVyLT5tYXNrKSA9PSBpdGVyLT5hZGRyKQorCQkJcmV0dXJuIGl0ZXI7CisKKwlyZXR1cm4gTlVMTDsKK30KKworLyoqCisgKiBuZXRsYmxfYWY0bGlzdF9zZWFyY2hfZXhhY3QgLSBTZWFyY2ggZm9yIGFuIGV4YWN0IElQdjQgYWRkcmVzcyBlbnRyeQorICogQGFkZHI6IElQdjQgYWRkcmVzcworICogQG1hc2s6IElQdjQgYWRkcmVzcyBtYXNrCisgKiBAaGVhZDogdGhlIGxpc3QgaGVhZAorICoKKyAqIERlc2NyaXB0aW9uOgorICogU2VhcmNoZXMgdGhlIElQdjQgYWRkcmVzcyBsaXN0IGdpdmVuIGJ5IEBoZWFkLiAgSWYgYW4gZXhhY3QgbWF0Y2ggaWYgZm91bmQKKyAqIGl0IGlzIHJldHVybmVkLCBvdGhlcndpc2UgTlVMTCBpcyByZXR1cm5lZC4gIFRoZSBjYWxsZXIgaXMgcmVzcG9uc2libGUgZm9yCisgKiBjYWxsaW5nIHRoZSByY3VfcmVhZF9bdW5dbG9jaygpIGZ1bmN0aW9ucy4KKyAqCisgKi8KK3N0cnVjdCBuZXRsYmxfYWY0bGlzdCAqbmV0bGJsX2FmNGxpc3Rfc2VhcmNoX2V4YWN0KF9fYmUzMiBhZGRyLAorCQkJCQkJICAgX19iZTMyIG1hc2ssCisJCQkJCQkgICBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKQoreworCXN0cnVjdCBuZXRsYmxfYWY0bGlzdCAqaXRlcjsKKworCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGl0ZXIsIGhlYWQsIGxpc3QpCisJCWlmIChpdGVyLT52YWxpZCAmJiBpdGVyLT5hZGRyID09IGFkZHIgJiYgaXRlci0+bWFzayA9PSBtYXNrKQorCQkJcmV0dXJuIGl0ZXI7CisKKwlyZXR1cm4gTlVMTDsKK30KKworCisjaWYgZGVmaW5lZChDT05GSUdfSVBWNikgfHwgZGVmaW5lZChDT05GSUdfSVBWNl9NT0RVTEUpCisvKioKKyAqIG5ldGxibF9hZjZsaXN0X3NlYXJjaCAtIFNlYXJjaCBmb3IgYSBtYXRjaGluZyBJUHY2IGFkZHJlc3MgZW50cnkKKyAqIEBhZGRyOiBJUHY2IGFkZHJlc3MKKyAqIEBoZWFkOiB0aGUgbGlzdCBoZWFkCisgKgorICogRGVzY3JpcHRpb246CisgKiBTZWFyY2hlcyB0aGUgSVB2NiBhZGRyZXNzIGxpc3QgZ2l2ZW4gYnkgQGhlYWQuICBJZiBhIG1hdGNoaW5nIGFkZHJlc3MgZW50cnkKKyAqIGlzIGZvdW5kIGl0IGlzIHJldHVybmVkLCBvdGhlcndpc2UgTlVMTCBpcyByZXR1cm5lZC4gIFRoZSBjYWxsZXIgaXMKKyAqIHJlc3BvbnNpYmxlIGZvciBjYWxsaW5nIHRoZSByY3VfcmVhZF9bdW5dbG9jaygpIGZ1bmN0aW9ucy4KKyAqCisgKi8KK3N0cnVjdCBuZXRsYmxfYWY2bGlzdCAqbmV0bGJsX2FmNmxpc3Rfc2VhcmNoKGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqYWRkciwKKwkJCQkJICAgICBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKQoreworCXN0cnVjdCBuZXRsYmxfYWY2bGlzdCAqaXRlcjsKKworCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGl0ZXIsIGhlYWQsIGxpc3QpCisJCWlmIChpdGVyLT52YWxpZCAmJgorCQkgICAgaXB2Nl9tYXNrZWRfYWRkcl9jbXAoJml0ZXItPmFkZHIsICZpdGVyLT5tYXNrLCBhZGRyKSA9PSAwKQorCQkJcmV0dXJuIGl0ZXI7CisKKwlyZXR1cm4gTlVMTDsKK30KKworLyoqCisgKiBuZXRsYmxfYWY2bGlzdF9zZWFyY2hfZXhhY3QgLSBTZWFyY2ggZm9yIGFuIGV4YWN0IElQdjYgYWRkcmVzcyBlbnRyeQorICogQGFkZHI6IElQdjYgYWRkcmVzcworICogQG1hc2s6IElQdjYgYWRkcmVzcyBtYXNrCisgKiBAaGVhZDogdGhlIGxpc3QgaGVhZAorICoKKyAqIERlc2NyaXB0aW9uOgorICogU2VhcmNoZXMgdGhlIElQdjYgYWRkcmVzcyBsaXN0IGdpdmVuIGJ5IEBoZWFkLiAgSWYgYW4gZXhhY3QgbWF0Y2ggaWYgZm91bmQKKyAqIGl0IGlzIHJldHVybmVkLCBvdGhlcndpc2UgTlVMTCBpcyByZXR1cm5lZC4gIFRoZSBjYWxsZXIgaXMgcmVzcG9uc2libGUgZm9yCisgKiBjYWxsaW5nIHRoZSByY3VfcmVhZF9bdW5dbG9jaygpIGZ1bmN0aW9ucy4KKyAqCisgKi8KK3N0cnVjdCBuZXRsYmxfYWY2bGlzdCAqbmV0bGJsX2FmNmxpc3Rfc2VhcmNoX2V4YWN0KGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqYWRkciwKKwkJCQkJCSAgIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqbWFzaywKKwkJCQkJCSAgIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpCit7CisJc3RydWN0IG5ldGxibF9hZjZsaXN0ICppdGVyOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoaXRlciwgaGVhZCwgbGlzdCkKKwkJaWYgKGl0ZXItPnZhbGlkICYmCisJCSAgICBpcHY2X2FkZHJfZXF1YWwoJml0ZXItPmFkZHIsIGFkZHIpICYmCisJCSAgICBpcHY2X2FkZHJfZXF1YWwoJml0ZXItPm1hc2ssIG1hc2spKQorCQkJcmV0dXJuIGl0ZXI7CisKKwlyZXR1cm4gTlVMTDsKK30KKyNlbmRpZiAvKiBJUHY2ICovCisKKy8qKgorICogbmV0bGJsX2FmNGxpc3RfYWRkIC0gQWRkIGEgbmV3IElQdjQgYWRkcmVzcyBlbnRyeSB0byBhIGxpc3QKKyAqIEBlbnRyeTogYWRkcmVzcyBlbnRyeQorICogQGhlYWQ6IHRoZSBsaXN0IGhlYWQKKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIEFkZCBhIG5ldyBhZGRyZXNzIGVudHJ5IHRvIHRoZSBsaXN0IHBvaW50ZWQgdG8gYnkgQGhlYWQuICBPbiBzdWNjZXNzIHplcm8gaXMKKyAqIHJldHVybmVkLCBvdGhlcndpc2UgYSBuZWdhdGl2ZSB2YWx1ZSBpcyByZXR1cm5lZC4gIFRoZSBjYWxsZXIgaXMgcmVzcG9uc2libGUKKyAqIGZvciBjYWxsaW5nIHRoZSBuZWNlc3NhcnkgbG9ja2luZyBmdW5jdGlvbnMuCisgKgorICovCitpbnQgbmV0bGJsX2FmNGxpc3RfYWRkKHN0cnVjdCBuZXRsYmxfYWY0bGlzdCAqZW50cnksIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpCit7CisJc3RydWN0IG5ldGxibF9hZjRsaXN0ICppdGVyOworCisJaXRlciA9IG5ldGxibF9hZjRsaXN0X3NlYXJjaChlbnRyeS0+YWRkciwgaGVhZCk7CisJaWYgKGl0ZXIgIT0gTlVMTCAmJgorCSAgICBpdGVyLT5hZGRyID09IGVudHJ5LT5hZGRyICYmIGl0ZXItPm1hc2sgPT0gZW50cnktPm1hc2spCisJCXJldHVybiAtRUVYSVNUOworCisJLyogaW4gb3JkZXIgdG8gc3BlZWQgdXAgYWRkcmVzcyBzZWFyY2hlcyB0aHJvdWdoIHRoZSBsaXN0ICh0aGUgY29tbW9uCisJICogY2FzZSkgd2UgbmVlZCB0byBrZWVwIHRoZSBsaXN0IGluIG9yZGVyIGJhc2VkIG9uIHRoZSBzaXplIG9mIHRoZQorCSAqIGFkZHJlc3MgbWFzayBzdWNoIHRoYXQgdGhlIGVudHJ5IHdpdGggdGhlIHdpZGVzdCBtYXNrIChzbWFsbGVzdAorCSAqIG51bWVyaWNhbCB2YWx1ZSkgYXBwZWFycyBmaXJzdCBpbiB0aGUgbGlzdCAqLworCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGl0ZXIsIGhlYWQsIGxpc3QpCisJCWlmIChpdGVyLT52YWxpZCAmJgorCQkgICAgbnRvaGwoZW50cnktPm1hc2spID4gbnRvaGwoaXRlci0+bWFzaykpIHsKKwkJCV9fbGlzdF9hZGRfcmN1KCZlbnRyeS0+bGlzdCwKKwkJCQkgICAgICAgaXRlci0+bGlzdC5wcmV2LAorCQkJCSAgICAgICAmaXRlci0+bGlzdCk7CisJCQlyZXR1cm4gMDsKKwkJfQorCWxpc3RfYWRkX3RhaWxfcmN1KCZlbnRyeS0+bGlzdCwgaGVhZCk7CisJcmV0dXJuIDA7Cit9CisKKyNpZiBkZWZpbmVkKENPTkZJR19JUFY2KSB8fCBkZWZpbmVkKENPTkZJR19JUFY2X01PRFVMRSkKKy8qKgorICogbmV0bGJsX2FmNmxpc3RfYWRkIC0gQWRkIGEgbmV3IElQdjYgYWRkcmVzcyBlbnRyeSB0byBhIGxpc3QKKyAqIEBlbnRyeTogYWRkcmVzcyBlbnRyeQorICogQGhlYWQ6IHRoZSBsaXN0IGhlYWQKKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIEFkZCBhIG5ldyBhZGRyZXNzIGVudHJ5IHRvIHRoZSBsaXN0IHBvaW50ZWQgdG8gYnkgQGhlYWQuICBPbiBzdWNjZXNzIHplcm8gaXMKKyAqIHJldHVybmVkLCBvdGhlcndpc2UgYSBuZWdhdGl2ZSB2YWx1ZSBpcyByZXR1cm5lZC4gIFRoZSBjYWxsZXIgaXMgcmVzcG9uc2libGUKKyAqIGZvciBjYWxsaW5nIHRoZSBuZWNlc3NhcnkgbG9ja2luZyBmdW5jdGlvbnMuCisgKgorICovCitpbnQgbmV0bGJsX2FmNmxpc3RfYWRkKHN0cnVjdCBuZXRsYmxfYWY2bGlzdCAqZW50cnksIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpCit7CisJc3RydWN0IG5ldGxibF9hZjZsaXN0ICppdGVyOworCisJaXRlciA9IG5ldGxibF9hZjZsaXN0X3NlYXJjaCgmZW50cnktPmFkZHIsIGhlYWQpOworCWlmIChpdGVyICE9IE5VTEwgJiYKKwkgICAgaXB2Nl9hZGRyX2VxdWFsKCZpdGVyLT5hZGRyLCAmZW50cnktPmFkZHIpICYmCisJICAgIGlwdjZfYWRkcl9lcXVhbCgmaXRlci0+bWFzaywgJmVudHJ5LT5tYXNrKSkKKwkJcmV0dXJuIC1FRVhJU1Q7CisKKwkvKiBpbiBvcmRlciB0byBzcGVlZCB1cCBhZGRyZXNzIHNlYXJjaGVzIHRocm91Z2ggdGhlIGxpc3QgKHRoZSBjb21tb24KKwkgKiBjYXNlKSB3ZSBuZWVkIHRvIGtlZXAgdGhlIGxpc3QgaW4gb3JkZXIgYmFzZWQgb24gdGhlIHNpemUgb2YgdGhlCisJICogYWRkcmVzcyBtYXNrIHN1Y2ggdGhhdCB0aGUgZW50cnkgd2l0aCB0aGUgd2lkZXN0IG1hc2sgKHNtYWxsZXN0CisJICogbnVtZXJpY2FsIHZhbHVlKSBhcHBlYXJzIGZpcnN0IGluIHRoZSBsaXN0ICovCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoaXRlciwgaGVhZCwgbGlzdCkKKwkJaWYgKGl0ZXItPnZhbGlkICYmCisJCSAgICBpcHY2X2FkZHJfY21wKCZlbnRyeS0+bWFzaywgJml0ZXItPm1hc2spID4gMCkgeworCQkJX19saXN0X2FkZF9yY3UoJmVudHJ5LT5saXN0LAorCQkJCSAgICAgICBpdGVyLT5saXN0LnByZXYsCisJCQkJICAgICAgICZpdGVyLT5saXN0KTsKKwkJCXJldHVybiAwOworCQl9CisJbGlzdF9hZGRfdGFpbF9yY3UoJmVudHJ5LT5saXN0LCBoZWFkKTsKKwlyZXR1cm4gMDsKK30KKyNlbmRpZiAvKiBJUHY2ICovCisKKy8qKgorICogbmV0bGJsX2FmNGxpc3RfcmVtb3ZlX2VudHJ5IC0gUmVtb3ZlIGFuIElQdjQgYWRkcmVzcyBlbnRyeQorICogQGVudHJ5OiBhZGRyZXNzIGVudHJ5CisgKgorICogRGVzY3JpcHRpb246CisgKiBSZW1vdmUgdGhlIHNwZWNpZmllZCBJUCBhZGRyZXNzIGVudHJ5LiAgVGhlIGNhbGxlciBpcyByZXNwb25zaWJsZSBmb3IKKyAqIGNhbGxpbmcgdGhlIG5lY2Vzc2FyeSBsb2NraW5nIGZ1bmN0aW9ucy4KKyAqCisgKi8KK3ZvaWQgbmV0bGJsX2FmNGxpc3RfcmVtb3ZlX2VudHJ5KHN0cnVjdCBuZXRsYmxfYWY0bGlzdCAqZW50cnkpCit7CisJZW50cnktPnZhbGlkID0gMDsKKwlsaXN0X2RlbF9yY3UoJmVudHJ5LT5saXN0KTsKK30KKworLyoqCisgKiBuZXRsYmxfYWY0bGlzdF9yZW1vdmUgLSBSZW1vdmUgYW4gSVB2NCBhZGRyZXNzIGVudHJ5CisgKiBAYWRkcjogSVAgYWRkcmVzcworICogQG1hc2s6IElQIGFkZHJlc3MgbWFzaworICogQGhlYWQ6IHRoZSBsaXN0IGhlYWQKKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIFJlbW92ZSBhbiBJUCBhZGRyZXNzIGVudHJ5IGZyb20gdGhlIGxpc3QgcG9pbnRlZCB0byBieSBAaGVhZC4gIFJldHVybnMgdGhlCisgKiBlbnRyeSBvbiBzdWNjZXNzLCBOVUxMIG9uIGZhaWx1cmUuICBUaGUgY2FsbGVyIGlzIHJlc3BvbnNpYmxlIGZvciBjYWxsaW5nCisgKiB0aGUgbmVjZXNzYXJ5IGxvY2tpbmcgZnVuY3Rpb25zLgorICoKKyAqLworc3RydWN0IG5ldGxibF9hZjRsaXN0ICpuZXRsYmxfYWY0bGlzdF9yZW1vdmUoX19iZTMyIGFkZHIsIF9fYmUzMiBtYXNrLAorCQkJCQkgICAgIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpCit7CisJc3RydWN0IG5ldGxibF9hZjRsaXN0ICplbnRyeTsKKworCWVudHJ5ID0gbmV0bGJsX2FmNGxpc3Rfc2VhcmNoKGFkZHIsIGhlYWQpOworCWlmIChlbnRyeSAhPSBOVUxMICYmIGVudHJ5LT5hZGRyID09IGFkZHIgJiYgZW50cnktPm1hc2sgPT0gbWFzaykgeworCQluZXRsYmxfYWY0bGlzdF9yZW1vdmVfZW50cnkoZW50cnkpOworCQlyZXR1cm4gZW50cnk7CisJfQorCisJcmV0dXJuIE5VTEw7Cit9CisKKyNpZiBkZWZpbmVkKENPTkZJR19JUFY2KSB8fCBkZWZpbmVkKENPTkZJR19JUFY2X01PRFVMRSkKKy8qKgorICogbmV0bGJsX2FmNmxpc3RfcmVtb3ZlX2VudHJ5IC0gUmVtb3ZlIGFuIElQdjYgYWRkcmVzcyBlbnRyeQorICogQGVudHJ5OiBhZGRyZXNzIGVudHJ5CisgKgorICogRGVzY3JpcHRpb246CisgKiBSZW1vdmUgdGhlIHNwZWNpZmllZCBJUCBhZGRyZXNzIGVudHJ5LiAgVGhlIGNhbGxlciBpcyByZXNwb25zaWJsZSBmb3IKKyAqIGNhbGxpbmcgdGhlIG5lY2Vzc2FyeSBsb2NraW5nIGZ1bmN0aW9ucy4KKyAqCisgKi8KK3ZvaWQgbmV0bGJsX2FmNmxpc3RfcmVtb3ZlX2VudHJ5KHN0cnVjdCBuZXRsYmxfYWY2bGlzdCAqZW50cnkpCit7CisJZW50cnktPnZhbGlkID0gMDsKKwlsaXN0X2RlbF9yY3UoJmVudHJ5LT5saXN0KTsKK30KKworLyoqCisgKiBuZXRsYmxfYWY2bGlzdF9yZW1vdmUgLSBSZW1vdmUgYW4gSVB2NiBhZGRyZXNzIGVudHJ5CisgKiBAYWRkcjogSVAgYWRkcmVzcworICogQG1hc2s6IElQIGFkZHJlc3MgbWFzaworICogQGhlYWQ6IHRoZSBsaXN0IGhlYWQKKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIFJlbW92ZSBhbiBJUCBhZGRyZXNzIGVudHJ5IGZyb20gdGhlIGxpc3QgcG9pbnRlZCB0byBieSBAaGVhZC4gIFJldHVybnMgdGhlCisgKiBlbnRyeSBvbiBzdWNjZXNzLCBOVUxMIG9uIGZhaWx1cmUuICBUaGUgY2FsbGVyIGlzIHJlc3BvbnNpYmxlIGZvciBjYWxsaW5nCisgKiB0aGUgbmVjZXNzYXJ5IGxvY2tpbmcgZnVuY3Rpb25zLgorICoKKyAqLworc3RydWN0IG5ldGxibF9hZjZsaXN0ICpuZXRsYmxfYWY2bGlzdF9yZW1vdmUoY29uc3Qgc3RydWN0IGluNl9hZGRyICphZGRyLAorCQkJCQkgICAgIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqbWFzaywKKwkJCQkJICAgICBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKQoreworCXN0cnVjdCBuZXRsYmxfYWY2bGlzdCAqZW50cnk7CisKKwllbnRyeSA9IG5ldGxibF9hZjZsaXN0X3NlYXJjaChhZGRyLCBoZWFkKTsKKwlpZiAoZW50cnkgIT0gTlVMTCAmJgorCSAgICBpcHY2X2FkZHJfZXF1YWwoJmVudHJ5LT5hZGRyLCBhZGRyKSAmJgorCSAgICBpcHY2X2FkZHJfZXF1YWwoJmVudHJ5LT5tYXNrLCBtYXNrKSkgeworCQluZXRsYmxfYWY2bGlzdF9yZW1vdmVfZW50cnkoZW50cnkpOworCQlyZXR1cm4gZW50cnk7CisJfQorCisJcmV0dXJuIE5VTEw7Cit9CisjZW5kaWYgLyogSVB2NiAqLworCisvKgorICogQXVkaXQgSGVscGVyIEZ1bmN0aW9ucworICovCisKKy8qKgorICogbmV0bGJsX2FmNGxpc3RfYXVkaXRfYWRkciAtIEF1ZGl0IGFuIElQdjQgYWRkcmVzcworICogQGF1ZGl0X2J1ZjogYXVkaXQgYnVmZmVyCisgKiBAc3JjOiB0cnVlIGlmIHNvdXJjZSBhZGRyZXNzLCBmYWxzZSBpZiBkZXN0aW5hdGlvbgorICogQGRldjogbmV0d29yayBpbnRlcmZhY2UKKyAqIEBhZGRyOiBJUCBhZGRyZXNzCisgKiBAbWFzazogSVAgYWRkcmVzcyBtYXNrCisgKgorICogRGVzY3JpcHRpb246CisgKiBXcml0ZSB0aGUgSVB2NCBhZGRyZXNzIGFuZCBhZGRyZXNzIG1hc2ssIGlmIG5lY2Vzc2FyeSwgdG8gQGF1ZGl0X2J1Zi4KKyAqCisgKi8KK3ZvaWQgbmV0bGJsX2FmNGxpc3RfYXVkaXRfYWRkcihzdHJ1Y3QgYXVkaXRfYnVmZmVyICphdWRpdF9idWYsCisJCQkJCWludCBzcmMsIGNvbnN0IGNoYXIgKmRldiwKKwkJCQkJX19iZTMyIGFkZHIsIF9fYmUzMiBtYXNrKQoreworCXUzMiBtYXNrX3ZhbCA9IG50b2hsKG1hc2spOworCWNoYXIgKmRpciA9IChzcmMgPyAic3JjIiA6ICJkc3QiKTsKKworCWlmIChkZXYgIT0gTlVMTCkKKwkJYXVkaXRfbG9nX2Zvcm1hdChhdWRpdF9idWYsICIgbmV0aWY9JXMiLCBkZXYpOworCWF1ZGl0X2xvZ19mb3JtYXQoYXVkaXRfYnVmLCAiICVzPSIgTklQUVVBRF9GTVQsIGRpciwgTklQUVVBRChhZGRyKSk7CisJaWYgKG1hc2tfdmFsICE9IDB4ZmZmZmZmZmYpIHsKKwkJdTMyIG1hc2tfbGVuID0gMDsKKwkJd2hpbGUgKG1hc2tfdmFsID4gMCkgeworCQkJbWFza192YWwgPDw9IDE7CisJCQltYXNrX2xlbisrOworCQl9CisJCWF1ZGl0X2xvZ19mb3JtYXQoYXVkaXRfYnVmLCAiICVzX3ByZWZpeGxlbj0lZCIsIGRpciwgbWFza19sZW4pOworCX0KK30KKworI2lmIGRlZmluZWQoQ09ORklHX0lQVjYpIHx8IGRlZmluZWQoQ09ORklHX0lQVjZfTU9EVUxFKQorLyoqCisgKiBuZXRsYmxfYWY2bGlzdF9hdWRpdF9hZGRyIC0gQXVkaXQgYW4gSVB2NiBhZGRyZXNzCisgKiBAYXVkaXRfYnVmOiBhdWRpdCBidWZmZXIKKyAqIEBzcmM6IHRydWUgaWYgc291cmNlIGFkZHJlc3MsIGZhbHNlIGlmIGRlc3RpbmF0aW9uCisgKiBAZGV2OiBuZXR3b3JrIGludGVyZmFjZQorICogQGFkZHI6IElQIGFkZHJlc3MKKyAqIEBtYXNrOiBJUCBhZGRyZXNzIG1hc2sKKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIFdyaXRlIHRoZSBJUHY2IGFkZHJlc3MgYW5kIGFkZHJlc3MgbWFzaywgaWYgbmVjZXNzYXJ5LCB0byBAYXVkaXRfYnVmLgorICoKKyAqLwordm9pZCBuZXRsYmxfYWY2bGlzdF9hdWRpdF9hZGRyKHN0cnVjdCBhdWRpdF9idWZmZXIgKmF1ZGl0X2J1ZiwKKwkJCQkgaW50IHNyYywKKwkJCQkgY29uc3QgY2hhciAqZGV2LAorCQkJCSBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmFkZHIsCisJCQkJIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqbWFzaykKK3sKKwljaGFyICpkaXIgPSAoc3JjID8gInNyYyIgOiAiZHN0Iik7CisKKwlpZiAoZGV2ICE9IE5VTEwpCisJCWF1ZGl0X2xvZ19mb3JtYXQoYXVkaXRfYnVmLCAiIG5ldGlmPSVzIiwgZGV2KTsKKwlhdWRpdF9sb2dfZm9ybWF0KGF1ZGl0X2J1ZiwgIiAlcz0iIE5JUDZfRk1ULCBkaXIsIE5JUDYoKmFkZHIpKTsKKwlpZiAobnRvaGwobWFzay0+czZfYWRkcjMyWzNdKSAhPSAweGZmZmZmZmZmKSB7CisJCXUzMiBtYXNrX2xlbiA9IDA7CisJCXUzMiBtYXNrX3ZhbDsKKwkJaW50IGl0ZXIgPSAtMTsKKwkJd2hpbGUgKG50b2hsKG1hc2stPnM2X2FkZHIzMlsrK2l0ZXJdKSA9PSAweGZmZmZmZmZmKQorCQkJbWFza19sZW4gKz0gMzI7CisJCW1hc2tfdmFsID0gbnRvaGwobWFzay0+czZfYWRkcjMyW2l0ZXJdKTsKKwkJd2hpbGUgKG1hc2tfdmFsID4gMCkgeworCQkJbWFza192YWwgPDw9IDE7CisJCQltYXNrX2xlbisrOworCQl9CisJCWF1ZGl0X2xvZ19mb3JtYXQoYXVkaXRfYnVmLCAiICVzX3ByZWZpeGxlbj0lZCIsIGRpciwgbWFza19sZW4pOworCX0KK30KKyNlbmRpZiAvKiBJUHY2ICovCmRpZmYgLS1naXQgYS9uZXQvbmV0bGFiZWwvbmV0bGFiZWxfYWRkcmxpc3QuaCBiL25ldC9uZXRsYWJlbC9uZXRsYWJlbF9hZGRybGlzdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAyNDJiZWEKLS0tIC9kZXYvbnVsbAorKysgYi9uZXQvbmV0bGFiZWwvbmV0bGFiZWxfYWRkcmxpc3QuaApAQCAtMCwwICsxLDE4OSBAQAorLyoKKyAqIE5ldExhYmVsIE5ldHdvcmsgQWRkcmVzcyBMaXN0cworICoKKyAqIFRoaXMgZmlsZSBjb250YWlucyBuZXR3b3JrIGFkZHJlc3MgbGlzdCBmdW5jdGlvbnMgdXNlZCB0byBtYW5hZ2Ugb3JkZXJlZAorICogbGlzdHMgb2YgbmV0d29yayBhZGRyZXNzZXMgZm9yIHVzZSBieSB0aGUgTmV0TGFiZWwgc3Vic3lzdGVtLiAgVGhlIE5ldExhYmVsCisgKiBzeXN0ZW0gbWFuYWdlcyBzdGF0aWMgYW5kIGR5bmFtaWMgbGFiZWwgbWFwcGluZ3MgZm9yIG5ldHdvcmsgcHJvdG9jb2xzIHN1Y2gKKyAqIGFzIENJUFNPIGFuZCBSSVBTTy4KKyAqCisgKiBBdXRob3I6IFBhdWwgTW9vcmUgPHBhdWwubW9vcmVAaHAuY29tPgorICoKKyAqLworCisvKgorICogKGMpIENvcHlyaWdodCBIZXdsZXR0LVBhY2thcmQgRGV2ZWxvcG1lbnQgQ29tcGFueSwgTC5QLiwgMjAwOAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyAgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyAgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUKKyAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgIGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCisgKgorICovCisKKyNpZm5kZWYgX05FVExBQkVMX0FERFJMSVNUX0gKKyNkZWZpbmUgX05FVExBQkVMX0FERFJMSVNUX0gKKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvcmN1cGRhdGUuaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvaW42Lmg+CisjaW5jbHVkZSA8bGludXgvYXVkaXQuaD4KKworLyoqCisgKiBzdHJ1Y3QgbmV0bGJsX2FmNGxpc3QgLSBOZXRMYWJlbCBJUHY0IGFkZHJlc3MgbGlzdAorICogQGFkZHI6IElQdjQgYWRkcmVzcworICogQG1hc2s6IElQdjQgYWRkcmVzcyBtYXNrCisgKiBAdmFsaWQ6IHZhbGlkIGZsYWcKKyAqIEBsaXN0OiBsaXN0IHN0cnVjdHVyZSwgdXNlZCBpbnRlcm5hbGx5CisgKi8KK3N0cnVjdCBuZXRsYmxfYWY0bGlzdCB7CisJX19iZTMyIGFkZHI7CisJX19iZTMyIG1hc2s7CisKKwl1MzIgdmFsaWQ7CisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OworfTsKKworLyoqCisgKiBzdHJ1Y3QgbmV0bGJsX2FmNmxpc3QgLSBOZXRMYWJlbCBJUHY2IGFkZHJlc3MgbGlzdAorICogQGFkZHI6IElQdjYgYWRkcmVzcworICogQG1hc2s6IElQdjYgYWRkcmVzcyBtYXNrCisgKiBAdmFsaWQ6IHZhbGlkIGZsYWcKKyAqIEBsaXN0OiBsaXN0IHN0cnVjdHVyZSwgdXNlZCBpbnRlcm5hbGx5CisgKi8KK3N0cnVjdCBuZXRsYmxfYWY2bGlzdCB7CisJc3RydWN0IGluNl9hZGRyIGFkZHI7CisJc3RydWN0IGluNl9hZGRyIG1hc2s7CisKKwl1MzIgdmFsaWQ7CisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OworfTsKKworI2RlZmluZSBfX2FmNGxpc3RfZW50cnkocHRyKSBjb250YWluZXJfb2YocHRyLCBzdHJ1Y3QgbmV0bGJsX2FmNGxpc3QsIGxpc3QpCisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IG5ldGxibF9hZjRsaXN0ICpfX2FmNGxpc3RfdmFsaWQoc3RydWN0IGxpc3RfaGVhZCAqcywKKwkJCQkJCSAgICAgc3RydWN0IGxpc3RfaGVhZCAqaCkKK3sKKwlzdHJ1Y3QgbGlzdF9oZWFkICppID0gczsKKwlzdHJ1Y3QgbmV0bGJsX2FmNGxpc3QgKm4gPSBfX2FmNGxpc3RfZW50cnkocyk7CisJd2hpbGUgKGkgIT0gaCAmJiAhbi0+dmFsaWQpIHsKKwkJaSA9IGktPm5leHQ7CisJCW4gPSBfX2FmNGxpc3RfZW50cnkoaSk7CisJfQorCXJldHVybiBuOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBuZXRsYmxfYWY0bGlzdCAqX19hZjRsaXN0X3ZhbGlkX3JjdShzdHJ1Y3QgbGlzdF9oZWFkICpzLAorCQkJCQkJCSBzdHJ1Y3QgbGlzdF9oZWFkICpoKQoreworCXN0cnVjdCBsaXN0X2hlYWQgKmkgPSBzOworCXN0cnVjdCBuZXRsYmxfYWY0bGlzdCAqbiA9IF9fYWY0bGlzdF9lbnRyeShzKTsKKwl3aGlsZSAoaSAhPSBoICYmICFuLT52YWxpZCkgeworCQlpID0gcmN1X2RlcmVmZXJlbmNlKGktPm5leHQpOworCQluID0gX19hZjRsaXN0X2VudHJ5KGkpOworCX0KKwlyZXR1cm4gbjsKK30KKworI2RlZmluZSBuZXRsYmxfYWY0bGlzdF9mb3JlYWNoKGl0ZXIsIGhlYWQpCQkJCVwKKwlmb3IgKGl0ZXIgPSBfX2FmNGxpc3RfdmFsaWQoKGhlYWQpLT5uZXh0LCBoZWFkKTsJCVwKKwkgICAgIHByZWZldGNoKGl0ZXItPmxpc3QubmV4dCksICZpdGVyLT5saXN0ICE9IChoZWFkKTsJCVwKKwkgICAgIGl0ZXIgPSBfX2FmNGxpc3RfdmFsaWQoaXRlci0+bGlzdC5uZXh0LCBoZWFkKSkKKworI2RlZmluZSBuZXRsYmxfYWY0bGlzdF9mb3JlYWNoX3JjdShpdGVyLCBoZWFkKQkJCQlcCisJZm9yIChpdGVyID0gX19hZjRsaXN0X3ZhbGlkX3JjdSgoaGVhZCktPm5leHQsIGhlYWQpOwkJXAorCSAgICAgcHJlZmV0Y2goaXRlci0+bGlzdC5uZXh0KSwJJml0ZXItPmxpc3QgIT0gKGhlYWQpOwkJXAorCSAgICAgaXRlciA9IF9fYWY0bGlzdF92YWxpZF9yY3UoaXRlci0+bGlzdC5uZXh0LCBoZWFkKSkKKworI2RlZmluZSBuZXRsYmxfYWY0bGlzdF9mb3JlYWNoX3NhZmUoaXRlciwgdG1wLCBoZWFkKQkJCVwKKwlmb3IgKGl0ZXIgPSBfX2FmNGxpc3RfdmFsaWQoKGhlYWQpLT5uZXh0LCBoZWFkKSwJCVwKKwkJICAgICB0bXAgPSBfX2FmNGxpc3RfdmFsaWQoaXRlci0+bGlzdC5uZXh0LCBoZWFkKTsJXAorCSAgICAgJml0ZXItPmxpc3QgIT0gKGhlYWQpOwkJCQkJXAorCSAgICAgaXRlciA9IHRtcCwgdG1wID0gX19hZjRsaXN0X3ZhbGlkKGl0ZXItPmxpc3QubmV4dCwgaGVhZCkpCisKK2ludCBuZXRsYmxfYWY0bGlzdF9hZGQoc3RydWN0IG5ldGxibF9hZjRsaXN0ICplbnRyeSwKKwkJICAgICAgIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpOworc3RydWN0IG5ldGxibF9hZjRsaXN0ICpuZXRsYmxfYWY0bGlzdF9yZW1vdmUoX19iZTMyIGFkZHIsIF9fYmUzMiBtYXNrLAorCQkJCQkgICAgIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpOwordm9pZCBuZXRsYmxfYWY0bGlzdF9yZW1vdmVfZW50cnkoc3RydWN0IG5ldGxibF9hZjRsaXN0ICplbnRyeSk7CitzdHJ1Y3QgbmV0bGJsX2FmNGxpc3QgKm5ldGxibF9hZjRsaXN0X3NlYXJjaChfX2JlMzIgYWRkciwKKwkJCQkJICAgICBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKTsKK3N0cnVjdCBuZXRsYmxfYWY0bGlzdCAqbmV0bGJsX2FmNGxpc3Rfc2VhcmNoX2V4YWN0KF9fYmUzMiBhZGRyLAorCQkJCQkJICAgX19iZTMyIG1hc2ssCisJCQkJCQkgICBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKTsKK3ZvaWQgbmV0bGJsX2FmNGxpc3RfYXVkaXRfYWRkcihzdHJ1Y3QgYXVkaXRfYnVmZmVyICphdWRpdF9idWYsCisJCQkgICAgICAgaW50IHNyYywgY29uc3QgY2hhciAqZGV2LAorCQkJICAgICAgIF9fYmUzMiBhZGRyLCBfX2JlMzIgbWFzayk7CisKKyNpZiBkZWZpbmVkKENPTkZJR19JUFY2KSB8fCBkZWZpbmVkKENPTkZJR19JUFY2X01PRFVMRSkKKworI2RlZmluZSBfX2FmNmxpc3RfZW50cnkocHRyKSBjb250YWluZXJfb2YocHRyLCBzdHJ1Y3QgbmV0bGJsX2FmNmxpc3QsIGxpc3QpCisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IG5ldGxibF9hZjZsaXN0ICpfX2FmNmxpc3RfdmFsaWQoc3RydWN0IGxpc3RfaGVhZCAqcywKKwkJCQkJCSAgICAgc3RydWN0IGxpc3RfaGVhZCAqaCkKK3sKKwlzdHJ1Y3QgbGlzdF9oZWFkICppID0gczsKKwlzdHJ1Y3QgbmV0bGJsX2FmNmxpc3QgKm4gPSBfX2FmNmxpc3RfZW50cnkocyk7CisJd2hpbGUgKGkgIT0gaCAmJiAhbi0+dmFsaWQpIHsKKwkJaSA9IGktPm5leHQ7CisJCW4gPSBfX2FmNmxpc3RfZW50cnkoaSk7CisJfQorCXJldHVybiBuOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBuZXRsYmxfYWY2bGlzdCAqX19hZjZsaXN0X3ZhbGlkX3JjdShzdHJ1Y3QgbGlzdF9oZWFkICpzLAorCQkJCQkJCSBzdHJ1Y3QgbGlzdF9oZWFkICpoKQoreworCXN0cnVjdCBsaXN0X2hlYWQgKmkgPSBzOworCXN0cnVjdCBuZXRsYmxfYWY2bGlzdCAqbiA9IF9fYWY2bGlzdF9lbnRyeShzKTsKKwl3aGlsZSAoaSAhPSBoICYmICFuLT52YWxpZCkgeworCQlpID0gcmN1X2RlcmVmZXJlbmNlKGktPm5leHQpOworCQluID0gX19hZjZsaXN0X2VudHJ5KGkpOworCX0KKwlyZXR1cm4gbjsKK30KKworI2RlZmluZSBuZXRsYmxfYWY2bGlzdF9mb3JlYWNoKGl0ZXIsIGhlYWQpCQkJCVwKKwlmb3IgKGl0ZXIgPSBfX2FmNmxpc3RfdmFsaWQoKGhlYWQpLT5uZXh0LCBoZWFkKTsJCVwKKwkgICAgIHByZWZldGNoKGl0ZXItPmxpc3QubmV4dCksCSZpdGVyLT5saXN0ICE9IChoZWFkKTsJCVwKKwkgICAgIGl0ZXIgPSBfX2FmNmxpc3RfdmFsaWQoaXRlci0+bGlzdC5uZXh0LCBoZWFkKSkKKworI2RlZmluZSBuZXRsYmxfYWY2bGlzdF9mb3JlYWNoX3JjdShpdGVyLCBoZWFkKQkJCQlcCisJZm9yIChpdGVyID0gX19hZjZsaXN0X3ZhbGlkX3JjdSgoaGVhZCktPm5leHQsIGhlYWQpOwkJXAorCSAgICAgcHJlZmV0Y2goaXRlci0+bGlzdC5uZXh0KSwJJml0ZXItPmxpc3QgIT0gKGhlYWQpOwkJXAorCSAgICAgaXRlciA9IF9fYWY2bGlzdF92YWxpZF9yY3UoaXRlci0+bGlzdC5uZXh0LCBoZWFkKSkKKworI2RlZmluZSBuZXRsYmxfYWY2bGlzdF9mb3JlYWNoX3NhZmUoaXRlciwgdG1wLCBoZWFkKQkJCVwKKwlmb3IgKGl0ZXIgPSBfX2FmNmxpc3RfdmFsaWQoKGhlYWQpLT5uZXh0LCBoZWFkKSwJCVwKKwkJICAgICB0bXAgPSBfX2FmNmxpc3RfdmFsaWQoaXRlci0+bGlzdC5uZXh0LCBoZWFkKTsJXAorCSAgICAgJml0ZXItPmxpc3QgIT0gKGhlYWQpOwkJCQkJXAorCSAgICAgaXRlciA9IHRtcCwgdG1wID0gX19hZjZsaXN0X3ZhbGlkKGl0ZXItPmxpc3QubmV4dCwgaGVhZCkpCisKK2ludCBuZXRsYmxfYWY2bGlzdF9hZGQoc3RydWN0IG5ldGxibF9hZjZsaXN0ICplbnRyeSwKKwkJICAgICAgIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpOworc3RydWN0IG5ldGxibF9hZjZsaXN0ICpuZXRsYmxfYWY2bGlzdF9yZW1vdmUoY29uc3Qgc3RydWN0IGluNl9hZGRyICphZGRyLAorCQkJCQkgICAgIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqbWFzaywKKwkJCQkJICAgICBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKTsKK3ZvaWQgbmV0bGJsX2FmNmxpc3RfcmVtb3ZlX2VudHJ5KHN0cnVjdCBuZXRsYmxfYWY2bGlzdCAqZW50cnkpOworc3RydWN0IG5ldGxibF9hZjZsaXN0ICpuZXRsYmxfYWY2bGlzdF9zZWFyY2goY29uc3Qgc3RydWN0IGluNl9hZGRyICphZGRyLAorCQkJCQkgICAgIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpOworc3RydWN0IG5ldGxibF9hZjZsaXN0ICpuZXRsYmxfYWY2bGlzdF9zZWFyY2hfZXhhY3QoY29uc3Qgc3RydWN0IGluNl9hZGRyICphZGRyLAorCQkJCQkJICAgY29uc3Qgc3RydWN0IGluNl9hZGRyICptYXNrLAorCQkJCQkJICAgc3RydWN0IGxpc3RfaGVhZCAqaGVhZCk7Cit2b2lkIG5ldGxibF9hZjZsaXN0X2F1ZGl0X2FkZHIoc3RydWN0IGF1ZGl0X2J1ZmZlciAqYXVkaXRfYnVmLAorCQkJICAgICAgIGludCBzcmMsCisJCQkgICAgICAgY29uc3QgY2hhciAqZGV2LAorCQkJICAgICAgIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqYWRkciwKKwkJCSAgICAgICBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKm1hc2spOworI2VuZGlmIC8qIElQVjYgKi8KKworI2VuZGlmCmRpZmYgLS1naXQgYS9uZXQvbmV0bGFiZWwvbmV0bGFiZWxfY2lwc29fdjQuYyBiL25ldC9uZXRsYWJlbC9uZXRsYWJlbF9jaXBzb192NC5jCmluZGV4IDBhZWMzMTguLmZmZjMyYjcgMTAwNjQ0Ci0tLSBhL25ldC9uZXRsYWJlbC9uZXRsYWJlbF9jaXBzb192NC5jCisrKyBiL25ldC9uZXRsYWJlbC9uZXRsYWJlbF9jaXBzb192NC5jCkBAIC00Myw2ICs0Myw3IEBACiAjaW5jbHVkZSAibmV0bGFiZWxfdXNlci5oIgogI2luY2x1ZGUgIm5ldGxhYmVsX2NpcHNvX3Y0LmgiCiAjaW5jbHVkZSAibmV0bGFiZWxfbWdtdC5oIgorI2luY2x1ZGUgIm5ldGxhYmVsX2RvbWFpbmhhc2guaCIKIAogLyogQXJndW1lbnQgc3RydWN0IGZvciBjaXBzb192NF9kb2lfd2FsaygpICovCiBzdHJ1Y3QgbmV0bGJsX2NpcHNvdjRfZG9pd2Fsa19hcmcgewpAQCAtNTEsNiArNTIsMTIgQEAKIAl1MzIgc2VxOwogfTsKIAorLyogQXJndW1lbnQgc3RydWN0IGZvciBuZXRsYmxfZG9taHNoX3dhbGsoKSAqLworc3RydWN0IG5ldGxibF9kb21oc2hfd2Fsa19hcmcgeworCXN0cnVjdCBuZXRsYmxfYXVkaXQgKmF1ZGl0X2luZm87CisJdTMyIGRvaTsKK307CisKIC8qIE5ldExhYmVsIEdlbmVyaWMgTkVUTElOSyBDSVBTT3Y0IGZhbWlseSAqLwogc3RhdGljIHN0cnVjdCBnZW5sX2ZhbWlseSBuZXRsYmxfY2lwc292NF9nbmxfZmFtaWx5ID0gewogCS5pZCA9IEdFTkxfSURfR0VORVJBVEUsCkBAIC04MSwzMiArODgsNiBAQAogICovCiAKIC8qKgotICogbmV0bGJsX2NpcHNvdjRfZG9pX2ZyZWUgLSBGcmVlcyBhIENJUFNPIFY0IERPSSBkZWZpbml0aW9uCi0gKiBAZW50cnk6IHRoZSBlbnRyeSdzIFJDVSBmaWVsZAotICoKLSAqIERlc2NyaXB0aW9uOgotICogVGhpcyBmdW5jdGlvbiBpcyBkZXNpZ25lZCB0byBiZSB1c2VkIGFzIGEgY2FsbGJhY2sgdG8gdGhlIGNhbGxfcmN1KCkKLSAqIGZ1bmN0aW9uIHNvIHRoYXQgdGhlIG1lbW9yeSBhbGxvY2F0ZWQgdG8gdGhlIERPSSBkZWZpbml0aW9uIGNhbiBiZSByZWxlYXNlZAotICogc2FmZWx5LgotICoKLSAqLwotdm9pZCBuZXRsYmxfY2lwc292NF9kb2lfZnJlZShzdHJ1Y3QgcmN1X2hlYWQgKmVudHJ5KQotewotCXN0cnVjdCBjaXBzb192NF9kb2kgKnB0cjsKLQotCXB0ciA9IGNvbnRhaW5lcl9vZihlbnRyeSwgc3RydWN0IGNpcHNvX3Y0X2RvaSwgcmN1KTsKLQlzd2l0Y2ggKHB0ci0+dHlwZSkgewotCWNhc2UgQ0lQU09fVjRfTUFQX1NURDoKLQkJa2ZyZWUocHRyLT5tYXAuc3RkLT5sdmwuY2lwc28pOwotCQlrZnJlZShwdHItPm1hcC5zdGQtPmx2bC5sb2NhbCk7Ci0JCWtmcmVlKHB0ci0+bWFwLnN0ZC0+Y2F0LmNpcHNvKTsKLQkJa2ZyZWUocHRyLT5tYXAuc3RkLT5jYXQubG9jYWwpOwotCQlicmVhazsKLQl9Ci0Ja2ZyZWUocHRyKTsKLX0KLQotLyoqCiAgKiBuZXRsYmxfY2lwc292NF9hZGRfY29tbW9uIC0gUGFyc2UgdGhlIGNvbW1vbiBzZWN0aW9ucyBvZiBhIEFERCBtZXNzYWdlCiAgKiBAaW5mbzogdGhlIEdlbmVyaWMgTkVUTElOSyBpbmZvIGJsb2NrCiAgKiBAZG9pX2RlZjogdGhlIENJUFNPIFY0IERPSSBkZWZpbml0aW9uCkBAIC0xNTEsOSArMTMyLDkgQEAKICAqIEBpbmZvOiB0aGUgR2VuZXJpYyBORVRMSU5LIGluZm8gYmxvY2sKICAqCiAgKiBEZXNjcmlwdGlvbjoKLSAqIENyZWF0ZSBhIG5ldyBDSVBTT19WNF9NQVBfU1REIERPSSBkZWZpbml0aW9uIGJhc2VkIG9uIHRoZSBnaXZlbiBBREQgbWVzc2FnZQotICogYW5kIGFkZCBpdCB0byB0aGUgQ0lQU08gVjQgZW5naW5lLiAgUmV0dXJuIHplcm8gb24gc3VjY2VzcyBhbmQgbm9uLXplcm8gb24KLSAqIGVycm9yLgorICogQ3JlYXRlIGEgbmV3IENJUFNPX1Y0X01BUF9UUkFOUyBET0kgZGVmaW5pdGlvbiBiYXNlZCBvbiB0aGUgZ2l2ZW4gQURECisgKiBtZXNzYWdlIGFuZCBhZGQgaXQgdG8gdGhlIENJUFNPIFY0IGVuZ2luZS4gIFJldHVybiB6ZXJvIG9uIHN1Y2Nlc3MgYW5kCisgKiBub24temVybyBvbiBlcnJvci4KICAqCiAgKi8KIHN0YXRpYyBpbnQgbmV0bGJsX2NpcHNvdjRfYWRkX3N0ZChzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKQpAQCAtMTgzLDcgKzE2NCw3IEBACiAJCXJldF92YWwgPSAtRU5PTUVNOwogCQlnb3RvIGFkZF9zdGRfZmFpbHVyZTsKIAl9Ci0JZG9pX2RlZi0+dHlwZSA9IENJUFNPX1Y0X01BUF9TVEQ7CisJZG9pX2RlZi0+dHlwZSA9IENJUFNPX1Y0X01BUF9UUkFOUzsKIAogCXJldF92YWwgPSBuZXRsYmxfY2lwc292NF9hZGRfY29tbW9uKGluZm8sIGRvaV9kZWYpOwogCWlmIChyZXRfdmFsICE9IDApCkBAIC0zNDIsNyArMzIzLDcgQEAKIAogYWRkX3N0ZF9mYWlsdXJlOgogCWlmIChkb2lfZGVmKQotCQluZXRsYmxfY2lwc292NF9kb2lfZnJlZSgmZG9pX2RlZi0+cmN1KTsKKwkJY2lwc29fdjRfZG9pX2ZyZWUoZG9pX2RlZik7CiAJcmV0dXJuIHJldF92YWw7CiB9CiAKQEAgLTM3OSw3ICszNjAsNDQgQEAKIAlyZXR1cm4gMDsKIAogYWRkX3Bhc3NfZmFpbHVyZToKLQluZXRsYmxfY2lwc292NF9kb2lfZnJlZSgmZG9pX2RlZi0+cmN1KTsKKwljaXBzb192NF9kb2lfZnJlZShkb2lfZGVmKTsKKwlyZXR1cm4gcmV0X3ZhbDsKK30KKworLyoqCisgKiBuZXRsYmxfY2lwc292NF9hZGRfbG9jYWwgLSBBZGRzIGEgQ0lQU08gVjQgRE9JIGRlZmluaXRpb24KKyAqIEBpbmZvOiB0aGUgR2VuZXJpYyBORVRMSU5LIGluZm8gYmxvY2sKKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIENyZWF0ZSBhIG5ldyBDSVBTT19WNF9NQVBfTE9DQUwgRE9JIGRlZmluaXRpb24gYmFzZWQgb24gdGhlIGdpdmVuIEFERAorICogbWVzc2FnZSBhbmQgYWRkIGl0IHRvIHRoZSBDSVBTTyBWNCBlbmdpbmUuICBSZXR1cm4gemVybyBvbiBzdWNjZXNzIGFuZAorICogbm9uLXplcm8gb24gZXJyb3IuCisgKgorICovCitzdGF0aWMgaW50IG5ldGxibF9jaXBzb3Y0X2FkZF9sb2NhbChzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKQoreworCWludCByZXRfdmFsOworCXN0cnVjdCBjaXBzb192NF9kb2kgKmRvaV9kZWYgPSBOVUxMOworCisJaWYgKCFpbmZvLT5hdHRyc1tOTEJMX0NJUFNPVjRfQV9UQUdMU1RdKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWRvaV9kZWYgPSBrbWFsbG9jKHNpemVvZigqZG9pX2RlZiksIEdGUF9LRVJORUwpOworCWlmIChkb2lfZGVmID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCWRvaV9kZWYtPnR5cGUgPSBDSVBTT19WNF9NQVBfTE9DQUw7CisKKwlyZXRfdmFsID0gbmV0bGJsX2NpcHNvdjRfYWRkX2NvbW1vbihpbmZvLCBkb2lfZGVmKTsKKwlpZiAocmV0X3ZhbCAhPSAwKQorCQlnb3RvIGFkZF9sb2NhbF9mYWlsdXJlOworCisJcmV0X3ZhbCA9IGNpcHNvX3Y0X2RvaV9hZGQoZG9pX2RlZik7CisJaWYgKHJldF92YWwgIT0gMCkKKwkJZ290byBhZGRfbG9jYWxfZmFpbHVyZTsKKwlyZXR1cm4gMDsKKworYWRkX2xvY2FsX2ZhaWx1cmU6CisJY2lwc29fdjRfZG9pX2ZyZWUoZG9pX2RlZik7CiAJcmV0dXJuIHJldF92YWw7CiB9CiAKQEAgLTQxMiwxNCArNDMwLDE4IEBACiAKIAl0eXBlID0gbmxhX2dldF91MzIoaW5mby0+YXR0cnNbTkxCTF9DSVBTT1Y0X0FfTVRZUEVdKTsKIAlzd2l0Y2ggKHR5cGUpIHsKLQljYXNlIENJUFNPX1Y0X01BUF9TVEQ6Ci0JCXR5cGVfc3RyID0gInN0ZCI7CisJY2FzZSBDSVBTT19WNF9NQVBfVFJBTlM6CisJCXR5cGVfc3RyID0gInRyYW5zIjsKIAkJcmV0X3ZhbCA9IG5ldGxibF9jaXBzb3Y0X2FkZF9zdGQoaW5mbyk7CiAJCWJyZWFrOwogCWNhc2UgQ0lQU09fVjRfTUFQX1BBU1M6CiAJCXR5cGVfc3RyID0gInBhc3MiOwogCQlyZXRfdmFsID0gbmV0bGJsX2NpcHNvdjRfYWRkX3Bhc3MoaW5mbyk7CiAJCWJyZWFrOworCWNhc2UgQ0lQU09fVjRfTUFQX0xPQ0FMOgorCQl0eXBlX3N0ciA9ICJsb2NhbCI7CisJCXJldF92YWwgPSBuZXRsYmxfY2lwc292NF9hZGRfbG9jYWwoaW5mbyk7CisJCWJyZWFrOwogCX0KIAlpZiAocmV0X3ZhbCA9PSAwKQogCQlhdG9taWNfaW5jKCZuZXRsYWJlbF9tZ210X3Byb3RvY291bnQpOwpAQCAtNDkxLDcgKzUxMyw3IEBACiAJZG9pX2RlZiA9IGNpcHNvX3Y0X2RvaV9nZXRkZWYoZG9pKTsKIAlpZiAoZG9pX2RlZiA9PSBOVUxMKSB7CiAJCXJldF92YWwgPSAtRUlOVkFMOwotCQlnb3RvIGxpc3RfZmFpbHVyZTsKKwkJZ290byBsaXN0X2ZhaWx1cmVfbG9jazsKIAl9CiAKIAlyZXRfdmFsID0gbmxhX3B1dF91MzIoYW5zX3NrYiwgTkxCTF9DSVBTT1Y0X0FfTVRZUEUsIGRvaV9kZWYtPnR5cGUpOwpAQCAtNTE2LDcgKzUzOCw3IEBACiAJbmxhX25lc3RfZW5kKGFuc19za2IsIG5sYV9hKTsKIAogCXN3aXRjaCAoZG9pX2RlZi0+dHlwZSkgewotCWNhc2UgQ0lQU09fVjRfTUFQX1NURDoKKwljYXNlIENJUFNPX1Y0X01BUF9UUkFOUzoKIAkJbmxhX2EgPSBubGFfbmVzdF9zdGFydChhbnNfc2tiLCBOTEJMX0NJUFNPVjRfQV9NTFNMVkxMU1QpOwogCQlpZiAobmxhX2EgPT0gTlVMTCkgewogCQkJcmV0X3ZhbCA9IC1FTk9NRU07CkBAIC02NTUsNyArNjc3LDcgQEAKIAkJCQkgIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYikKIHsKIAlzdHJ1Y3QgbmV0bGJsX2NpcHNvdjRfZG9pd2Fsa19hcmcgY2JfYXJnOwotCWludCBkb2lfc2tpcCA9IGNiLT5hcmdzWzBdOworCXUzMiBkb2lfc2tpcCA9IGNiLT5hcmdzWzBdOwogCiAJY2JfYXJnLm5sX2NiID0gY2I7CiAJY2JfYXJnLnNrYiA9IHNrYjsKQEAgLTY2OCw2ICs2OTAsMjkgQEAKIH0KIAogLyoqCisgKiBuZXRsYmxfY2lwc292NF9yZW1vdmVfY2IgLSBuZXRsYmxfY2lwc292NF9yZW1vdmUoKSBjYWxsYmFjayBmb3IgUkVNT1ZFCisgKiBAZW50cnk6IExTTSBkb21haW4gbWFwcGluZyBlbnRyeQorICogQGFyZzogdGhlIG5ldGxibF9kb21oc2hfd2Fsa19hcmcgc3RydWN0dXJlCisgKgorICogRGVzY3JpcHRpb246CisgKiBUaGlzIGZ1bmN0aW9uIGlzIGludGVuZGVkIGZvciB1c2UgYnkgbmV0bGJsX2NpcHNvdjRfcmVtb3ZlKCkgYXMgdGhlIGNhbGxiYWNrCisgKiBmb3IgdGhlIG5ldGxibF9kb21oc2hfd2FsaygpIGZ1bmN0aW9uOyBpdCByZW1vdmVzIExTTSBkb21haW4gbWFwIGVudHJpZXMKKyAqIHdoaWNoIGFyZSBhc3NvY2lhdGVkIHdpdGggdGhlIENJUFNPIERPSSBzcGVjaWZpZWQgaW4gQGFyZy4gIFJldHVybnMgemVybyBvbgorICogc3VjY2VzcywgbmVnYXRpdmUgdmFsdWVzIG9uIGZhaWx1cmUuCisgKgorICovCitzdGF0aWMgaW50IG5ldGxibF9jaXBzb3Y0X3JlbW92ZV9jYihzdHJ1Y3QgbmV0bGJsX2RvbV9tYXAgKmVudHJ5LCB2b2lkICphcmcpCit7CisJc3RydWN0IG5ldGxibF9kb21oc2hfd2Fsa19hcmcgKmNiX2FyZyA9IGFyZzsKKworCWlmIChlbnRyeS0+dHlwZSA9PSBORVRMQkxfTkxUWVBFX0NJUFNPVjQgJiYKKwkgICAgZW50cnktPnR5cGVfZGVmLmNpcHNvdjQtPmRvaSA9PSBjYl9hcmctPmRvaSkKKwkJcmV0dXJuIG5ldGxibF9kb21oc2hfcmVtb3ZlX2VudHJ5KGVudHJ5LCBjYl9hcmctPmF1ZGl0X2luZm8pOworCisJcmV0dXJuIDA7Cit9CisKKy8qKgogICogbmV0bGJsX2NpcHNvdjRfcmVtb3ZlIC0gSGFuZGxlIGEgUkVNT1ZFIG1lc3NhZ2UKICAqIEBza2I6IHRoZSBORVRMSU5LIGJ1ZmZlcgogICogQGluZm86IHRoZSBHZW5lcmljIE5FVExJTksgaW5mbyBibG9jawpAQCAtNjgxLDggKzcyNiwxMSBAQAogewogCWludCByZXRfdmFsID0gLUVJTlZBTDsKIAl1MzIgZG9pID0gMDsKKwlzdHJ1Y3QgbmV0bGJsX2RvbWhzaF93YWxrX2FyZyBjYl9hcmc7CiAJc3RydWN0IGF1ZGl0X2J1ZmZlciAqYXVkaXRfYnVmOwogCXN0cnVjdCBuZXRsYmxfYXVkaXQgYXVkaXRfaW5mbzsKKwl1MzIgc2tpcF9ia3QgPSAwOworCXUzMiBza2lwX2NoYWluID0gMDsKIAogCWlmICghaW5mby0+YXR0cnNbTkxCTF9DSVBTT1Y0X0FfRE9JXSkKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC02OTAsMTEgKzczOCwxNSBAQAogCWRvaSA9IG5sYV9nZXRfdTMyKGluZm8tPmF0dHJzW05MQkxfQ0lQU09WNF9BX0RPSV0pOwogCW5ldGxibF9uZXRsaW5rX2F1ZGl0aW5mbyhza2IsICZhdWRpdF9pbmZvKTsKIAotCXJldF92YWwgPSBjaXBzb192NF9kb2lfcmVtb3ZlKGRvaSwKLQkJCQkgICAgICAmYXVkaXRfaW5mbywKLQkJCQkgICAgICBuZXRsYmxfY2lwc292NF9kb2lfZnJlZSk7Ci0JaWYgKHJldF92YWwgPT0gMCkKLQkJYXRvbWljX2RlYygmbmV0bGFiZWxfbWdtdF9wcm90b2NvdW50KTsKKwljYl9hcmcuZG9pID0gZG9pOworCWNiX2FyZy5hdWRpdF9pbmZvID0gJmF1ZGl0X2luZm87CisJcmV0X3ZhbCA9IG5ldGxibF9kb21oc2hfd2Fsaygmc2tpcF9ia3QsICZza2lwX2NoYWluLAorCQkJCSAgICAgbmV0bGJsX2NpcHNvdjRfcmVtb3ZlX2NiLCAmY2JfYXJnKTsKKwlpZiAocmV0X3ZhbCA9PSAwIHx8IHJldF92YWwgPT0gLUVOT0VOVCkgeworCQlyZXRfdmFsID0gY2lwc29fdjRfZG9pX3JlbW92ZShkb2ksICZhdWRpdF9pbmZvKTsKKwkJaWYgKHJldF92YWwgPT0gMCkKKwkJCWF0b21pY19kZWMoJm5ldGxhYmVsX21nbXRfcHJvdG9jb3VudCk7CisJfQogCiAJYXVkaXRfYnVmID0gbmV0bGJsX2F1ZGl0X3N0YXJ0X2NvbW1vbihBVURJVF9NQUNfQ0lQU09WNF9ERUwsCiAJCQkJCSAgICAgICZhdWRpdF9pbmZvKTsKZGlmZiAtLWdpdCBhL25ldC9uZXRsYWJlbC9uZXRsYWJlbF9jaXBzb192NC5oIGIvbmV0L25ldGxhYmVsL25ldGxhYmVsX2NpcHNvX3Y0LmgKaW5kZXggMjIwY2I5ZC4uYzhhNDA3OSAxMDA2NDQKLS0tIGEvbmV0L25ldGxhYmVsL25ldGxhYmVsX2NpcHNvX3Y0LmgKKysrIGIvbmV0L25ldGxhYmVsL25ldGxhYmVsX2NpcHNvX3Y0LmgKQEAgLTQ1LDEyICs0NSwxMyBAQAogICogICAgIE5MQkxfQ0lQU09WNF9BX01UWVBFCiAgKiAgICAgTkxCTF9DSVBTT1Y0X0FfVEFHTFNUCiAgKgotICogICBJZiB1c2luZyBDSVBTT19WNF9NQVBfU1REIHRoZSBmb2xsb3dpbmcgYXR0cmlidXRlcyBhcmUgcmVxdWlyZWQ6CisgKiAgIElmIHVzaW5nIENJUFNPX1Y0X01BUF9UUkFOUyB0aGUgZm9sbG93aW5nIGF0dHJpYnV0ZXMgYXJlIHJlcXVpcmVkOgogICoKICAqICAgICBOTEJMX0NJUFNPVjRfQV9NTFNMVkxMU1QKICAqICAgICBOTEJMX0NJUFNPVjRfQV9NTFNDQVRMU1QKICAqCi0gKiAgIElmIHVzaW5nIENJUFNPX1Y0X01BUF9QQVNTIG5vIGFkZGl0aW9uYWwgYXR0cmlidXRlcyBhcmUgcmVxdWlyZWQuCisgKiAgIElmIHVzaW5nIENJUFNPX1Y0X01BUF9QQVNTIG9yIENJUFNPX1Y0X01BUF9MT0NBTCBubyBhZGRpdGlvbmFsIGF0dHJpYnV0ZXMKKyAqICAgYXJlIHJlcXVpcmVkLgogICoKICAqIG8gUkVNT1ZFOgogICogICBTZW50IGJ5IGFuIGFwcGxpY2F0aW9uIHRvIHJlbW92ZSBhIHNwZWNpZmljIERPSSBtYXBwaW5nIHRhYmxlIGZyb20gdGhlCkBAIC03NiwxMiArNzcsMTMgQEAKICAqICAgICBOTEJMX0NJUFNPVjRfQV9NVFlQRQogICogICAgIE5MQkxfQ0lQU09WNF9BX1RBR0xTVAogICoKLSAqICAgSWYgdXNpbmcgQ0lQU09fVjRfTUFQX1NURCB0aGUgZm9sbG93aW5nIGF0dHJpYnV0ZXMgYXJlIHJlcXVpcmVkOgorICogICBJZiB1c2luZyBDSVBTT19WNF9NQVBfVFJBTlMgdGhlIGZvbGxvd2luZyBhdHRyaWJ1dGVzIGFyZSByZXF1aXJlZDoKICAqCiAgKiAgICAgTkxCTF9DSVBTT1Y0X0FfTUxTTFZMTFNUCiAgKiAgICAgTkxCTF9DSVBTT1Y0X0FfTUxTQ0FUTFNUCiAgKgotICogICBJZiB1c2luZyBDSVBTT19WNF9NQVBfUEFTUyBubyBhZGRpdGlvbmFsIGF0dHJpYnV0ZXMgYXJlIHJlcXVpcmVkLgorICogICBJZiB1c2luZyBDSVBTT19WNF9NQVBfUEFTUyBvciBDSVBTT19WNF9NQVBfTE9DQUwgbm8gYWRkaXRpb25hbCBhdHRyaWJ1dGVzCisgKiAgIGFyZSByZXF1aXJlZC4KICAqCiAgKiBvIExJU1RBTEw6CiAgKiAgIFRoaXMgbWVzc2FnZSBpcyBzZW50IGJ5IGFuIGFwcGxpY2F0aW9uIHRvIGxpc3QgdGhlIHZhbGlkIERPSXMgb24gdGhlCmRpZmYgLS1naXQgYS9uZXQvbmV0bGFiZWwvbmV0bGFiZWxfZG9tYWluaGFzaC5jIGIvbmV0L25ldGxhYmVsL25ldGxhYmVsX2RvbWFpbmhhc2guYwppbmRleCA2NDNjMDMyLi41ZmFkZjEwIDEwMDY0NAotLS0gYS9uZXQvbmV0bGFiZWwvbmV0bGFiZWxfZG9tYWluaGFzaC5jCisrKyBiL25ldC9uZXRsYWJlbC9uZXRsYWJlbF9kb21haW5oYXNoLmMKQEAgLTExLDcgKzExLDcgQEAKICAqLwogCiAvKgotICogKGMpIENvcHlyaWdodCBIZXdsZXR0LVBhY2thcmQgRGV2ZWxvcG1lbnQgQ29tcGFueSwgTC5QLiwgMjAwNgorICogKGMpIENvcHlyaWdodCBIZXdsZXR0LVBhY2thcmQgRGV2ZWxvcG1lbnQgQ29tcGFueSwgTC5QLiwgMjAwNiwgMjAwOAogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyAgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKQEAgLTQwLDYgKzQwLDcgQEAKICNpbmNsdWRlIDxhc20vYnVnLmg+CiAKICNpbmNsdWRlICJuZXRsYWJlbF9tZ210LmgiCisjaW5jbHVkZSAibmV0bGFiZWxfYWRkcmxpc3QuaCIKICNpbmNsdWRlICJuZXRsYWJlbF9kb21haW5oYXNoLmgiCiAjaW5jbHVkZSAibmV0bGFiZWxfdXNlci5oIgogCkBAIC03Miw4ICs3MywyOCBAQAogc3RhdGljIHZvaWQgbmV0bGJsX2RvbWhzaF9mcmVlX2VudHJ5KHN0cnVjdCByY3VfaGVhZCAqZW50cnkpCiB7CiAJc3RydWN0IG5ldGxibF9kb21fbWFwICpwdHI7CisJc3RydWN0IG5ldGxibF9hZjRsaXN0ICppdGVyNDsKKwlzdHJ1Y3QgbmV0bGJsX2FmNGxpc3QgKnRtcDQ7CisjaWYgZGVmaW5lZChDT05GSUdfSVBWNikgfHwgZGVmaW5lZChDT05GSUdfSVBWNl9NT0RVTEUpCisJc3RydWN0IG5ldGxibF9hZjZsaXN0ICppdGVyNjsKKwlzdHJ1Y3QgbmV0bGJsX2FmNmxpc3QgKnRtcDY7CisjZW5kaWYgLyogSVB2NiAqLwogCiAJcHRyID0gY29udGFpbmVyX29mKGVudHJ5LCBzdHJ1Y3QgbmV0bGJsX2RvbV9tYXAsIHJjdSk7CisJaWYgKHB0ci0+dHlwZSA9PSBORVRMQkxfTkxUWVBFX0FERFJTRUxFQ1QpIHsKKwkJbmV0bGJsX2FmNGxpc3RfZm9yZWFjaF9zYWZlKGl0ZXI0LCB0bXA0LAorCQkJCQkgICAgJnB0ci0+dHlwZV9kZWYuYWRkcnNlbC0+bGlzdDQpIHsKKwkJCW5ldGxibF9hZjRsaXN0X3JlbW92ZV9lbnRyeShpdGVyNCk7CisJCQlrZnJlZShuZXRsYmxfZG9taHNoX2FkZHI0X2VudHJ5KGl0ZXI0KSk7CisJCX0KKyNpZiBkZWZpbmVkKENPTkZJR19JUFY2KSB8fCBkZWZpbmVkKENPTkZJR19JUFY2X01PRFVMRSkKKwkJbmV0bGJsX2FmNmxpc3RfZm9yZWFjaF9zYWZlKGl0ZXI2LCB0bXA2LAorCQkJCQkgICAgJnB0ci0+dHlwZV9kZWYuYWRkcnNlbC0+bGlzdDYpIHsKKwkJCW5ldGxibF9hZjZsaXN0X3JlbW92ZV9lbnRyeShpdGVyNik7CisJCQlrZnJlZShuZXRsYmxfZG9taHNoX2FkZHI2X2VudHJ5KGl0ZXI2KSk7CisJCX0KKyNlbmRpZiAvKiBJUHY2ICovCisJfQogCWtmcmVlKHB0ci0+ZG9tYWluKTsKIAlrZnJlZShwdHIpOwogfQpAQCAtMTE1LDEzICsxMzYsMTMgQEAKIHN0YXRpYyBzdHJ1Y3QgbmV0bGJsX2RvbV9tYXAgKm5ldGxibF9kb21oc2hfc2VhcmNoKGNvbnN0IGNoYXIgKmRvbWFpbikKIHsKIAl1MzIgYmt0OworCXN0cnVjdCBsaXN0X2hlYWQgKmJrdF9saXN0OwogCXN0cnVjdCBuZXRsYmxfZG9tX21hcCAqaXRlcjsKIAogCWlmIChkb21haW4gIT0gTlVMTCkgewogCQlia3QgPSBuZXRsYmxfZG9taHNoX2hhc2goZG9tYWluKTsKLQkJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoaXRlciwKLQkJCQkgICAgICZyY3VfZGVyZWZlcmVuY2UobmV0bGJsX2RvbWhzaCktPnRibFtia3RdLAotCQkJCSAgICAgbGlzdCkKKwkJYmt0X2xpc3QgPSAmcmN1X2RlcmVmZXJlbmNlKG5ldGxibF9kb21oc2gpLT50YmxbYmt0XTsKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoaXRlciwgYmt0X2xpc3QsIGxpc3QpCiAJCQlpZiAoaXRlci0+dmFsaWQgJiYgc3RyY21wKGl0ZXItPmRvbWFpbiwgZG9tYWluKSA9PSAwKQogCQkJCXJldHVybiBpdGVyOwogCX0KQEAgLTE1Niw2ICsxNzcsNjkgQEAKIAlyZXR1cm4gZW50cnk7CiB9CiAKKy8qKgorICogbmV0bGJsX2RvbWhzaF9hdWRpdF9hZGQgLSBHZW5lcmF0ZSBhbiBhdWRpdCBlbnRyeSBmb3IgYW4gYWRkIGV2ZW50CisgKiBAZW50cnk6IHRoZSBlbnRyeSBiZWluZyBhZGRlZAorICogQGFkZHI0OiB0aGUgSVB2NCBhZGRyZXNzIGluZm9ybWF0aW9uCisgKiBAYWRkcjY6IHRoZSBJUHY2IGFkZHJlc3MgaW5mb3JtYXRpb24KKyAqIEByZXN1bHQ6IHRoZSByZXN1bHQgY29kZQorICogQGF1ZGl0X2luZm86IE5ldExhYmVsIGF1ZGl0IGluZm9ybWF0aW9uCisgKgorICogRGVzY3JpcHRpb246CisgKiBHZW5lcmF0ZSBhbiBhdWRpdCByZWNvcmQgZm9yIGFkZGluZyBhIG5ldyBOZXRMYWJlbC9MU00gbWFwcGluZyBlbnRyeSB3aXRoCisgKiB0aGUgZ2l2ZW4gaW5mb3JtYXRpb24uICBDYWxsZXIgaXMgcmVzcG9uc2liaWxlIGZvciBob2xkaW5nIHRoZSBuZWNlc3NhcnkKKyAqIGxvY2tzLgorICoKKyAqLworc3RhdGljIHZvaWQgbmV0bGJsX2RvbWhzaF9hdWRpdF9hZGQoc3RydWN0IG5ldGxibF9kb21fbWFwICplbnRyeSwKKwkJCQkgICAgc3RydWN0IG5ldGxibF9hZjRsaXN0ICphZGRyNCwKKwkJCQkgICAgc3RydWN0IG5ldGxibF9hZjZsaXN0ICphZGRyNiwKKwkJCQkgICAgaW50IHJlc3VsdCwKKwkJCQkgICAgc3RydWN0IG5ldGxibF9hdWRpdCAqYXVkaXRfaW5mbykKK3sKKwlzdHJ1Y3QgYXVkaXRfYnVmZmVyICphdWRpdF9idWY7CisJc3RydWN0IGNpcHNvX3Y0X2RvaSAqY2lwc292NCA9IE5VTEw7CisJdTMyIHR5cGU7CisKKwlhdWRpdF9idWYgPSBuZXRsYmxfYXVkaXRfc3RhcnRfY29tbW9uKEFVRElUX01BQ19NQVBfQURELCBhdWRpdF9pbmZvKTsKKwlpZiAoYXVkaXRfYnVmICE9IE5VTEwpIHsKKwkJYXVkaXRfbG9nX2Zvcm1hdChhdWRpdF9idWYsICIgbmxibF9kb21haW49JXMiLAorCQkJCSBlbnRyeS0+ZG9tYWluID8gZW50cnktPmRvbWFpbiA6ICIoZGVmYXVsdCkiKTsKKwkJaWYgKGFkZHI0ICE9IE5VTEwpIHsKKwkJCXN0cnVjdCBuZXRsYmxfZG9tYWRkcjRfbWFwICptYXA0OworCQkJbWFwNCA9IG5ldGxibF9kb21oc2hfYWRkcjRfZW50cnkoYWRkcjQpOworCQkJdHlwZSA9IG1hcDQtPnR5cGU7CisJCQljaXBzb3Y0ID0gbWFwNC0+dHlwZV9kZWYuY2lwc292NDsKKwkJCW5ldGxibF9hZjRsaXN0X2F1ZGl0X2FkZHIoYXVkaXRfYnVmLCAwLCBOVUxMLAorCQkJCQkJICBhZGRyNC0+YWRkciwgYWRkcjQtPm1hc2spOworI2lmIGRlZmluZWQoQ09ORklHX0lQVjYpIHx8IGRlZmluZWQoQ09ORklHX0lQVjZfTU9EVUxFKQorCQl9IGVsc2UgaWYgKGFkZHI2ICE9IE5VTEwpIHsKKwkJCXN0cnVjdCBuZXRsYmxfZG9tYWRkcjZfbWFwICptYXA2OworCQkJbWFwNiA9IG5ldGxibF9kb21oc2hfYWRkcjZfZW50cnkoYWRkcjYpOworCQkJdHlwZSA9IG1hcDYtPnR5cGU7CisJCQluZXRsYmxfYWY2bGlzdF9hdWRpdF9hZGRyKGF1ZGl0X2J1ZiwgMCwgTlVMTCwKKwkJCQkJCSAgJmFkZHI2LT5hZGRyLCAmYWRkcjYtPm1hc2spOworI2VuZGlmIC8qIElQdjYgKi8KKwkJfSBlbHNlIHsKKwkJCXR5cGUgPSBlbnRyeS0+dHlwZTsKKwkJCWNpcHNvdjQgPSBlbnRyeS0+dHlwZV9kZWYuY2lwc292NDsKKwkJfQorCQlzd2l0Y2ggKHR5cGUpIHsKKwkJY2FzZSBORVRMQkxfTkxUWVBFX1VOTEFCRUxFRDoKKwkJCWF1ZGl0X2xvZ19mb3JtYXQoYXVkaXRfYnVmLCAiIG5sYmxfcHJvdG9jb2w9dW5sYmwiKTsKKwkJCWJyZWFrOworCQljYXNlIE5FVExCTF9OTFRZUEVfQ0lQU09WNDoKKwkJCUJVR19PTihjaXBzb3Y0ID09IE5VTEwpOworCQkJYXVkaXRfbG9nX2Zvcm1hdChhdWRpdF9idWYsCisJCQkJCSAiIG5sYmxfcHJvdG9jb2w9Y2lwc292NCBjaXBzb19kb2k9JXUiLAorCQkJCQkgY2lwc292NC0+ZG9pKTsKKwkJCWJyZWFrOworCQl9CisJCWF1ZGl0X2xvZ19mb3JtYXQoYXVkaXRfYnVmLCAiIHJlcz0ldSIsIHJlc3VsdCA9PSAwID8gMSA6IDApOworCQlhdWRpdF9sb2dfZW5kKGF1ZGl0X2J1Zik7CisJfQorfQorCiAvKgogICogRG9tYWluIEhhc2ggVGFibGUgRnVuY3Rpb25zCiAgKi8KQEAgLTIxMyw3NCArMjk3LDEwNiBAQAogaW50IG5ldGxibF9kb21oc2hfYWRkKHN0cnVjdCBuZXRsYmxfZG9tX21hcCAqZW50cnksCiAJCSAgICAgIHN0cnVjdCBuZXRsYmxfYXVkaXQgKmF1ZGl0X2luZm8pCiB7Ci0JaW50IHJldF92YWw7Ci0JdTMyIGJrdDsKLQlzdHJ1Y3QgYXVkaXRfYnVmZmVyICphdWRpdF9idWY7Ci0KLQlzd2l0Y2ggKGVudHJ5LT50eXBlKSB7Ci0JY2FzZSBORVRMQkxfTkxUWVBFX1VOTEFCRUxFRDoKLQkJcmV0X3ZhbCA9IDA7Ci0JCWJyZWFrOwotCWNhc2UgTkVUTEJMX05MVFlQRV9DSVBTT1Y0OgotCQlyZXRfdmFsID0gY2lwc29fdjRfZG9pX2RvbWhzaF9hZGQoZW50cnktPnR5cGVfZGVmLmNpcHNvdjQsCi0JCQkJCQkgIGVudHJ5LT5kb21haW4pOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0JaWYgKHJldF92YWwgIT0gMCkKLQkJcmV0dXJuIHJldF92YWw7Ci0KLQllbnRyeS0+dmFsaWQgPSAxOwotCUlOSVRfUkNVX0hFQUQoJmVudHJ5LT5yY3UpOworCWludCByZXRfdmFsID0gMDsKKwlzdHJ1Y3QgbmV0bGJsX2RvbV9tYXAgKmVudHJ5X29sZDsKKwlzdHJ1Y3QgbmV0bGJsX2FmNGxpc3QgKml0ZXI0OworCXN0cnVjdCBuZXRsYmxfYWY0bGlzdCAqdG1wNDsKKyNpZiBkZWZpbmVkKENPTkZJR19JUFY2KSB8fCBkZWZpbmVkKENPTkZJR19JUFY2X01PRFVMRSkKKwlzdHJ1Y3QgbmV0bGJsX2FmNmxpc3QgKml0ZXI2OworCXN0cnVjdCBuZXRsYmxfYWY2bGlzdCAqdG1wNjsKKyNlbmRpZiAvKiBJUHY2ICovCiAKIAlyY3VfcmVhZF9sb2NrKCk7CisKIAlzcGluX2xvY2soJm5ldGxibF9kb21oc2hfbG9jayk7Ci0JaWYgKGVudHJ5LT5kb21haW4gIT0gTlVMTCkgewotCQlia3QgPSBuZXRsYmxfZG9taHNoX2hhc2goZW50cnktPmRvbWFpbik7Ci0JCWlmIChuZXRsYmxfZG9taHNoX3NlYXJjaChlbnRyeS0+ZG9tYWluKSA9PSBOVUxMKQorCWlmIChlbnRyeS0+ZG9tYWluICE9IE5VTEwpCisJCWVudHJ5X29sZCA9IG5ldGxibF9kb21oc2hfc2VhcmNoKGVudHJ5LT5kb21haW4pOworCWVsc2UKKwkJZW50cnlfb2xkID0gbmV0bGJsX2RvbWhzaF9zZWFyY2hfZGVmKGVudHJ5LT5kb21haW4pOworCWlmIChlbnRyeV9vbGQgPT0gTlVMTCkgeworCQllbnRyeS0+dmFsaWQgPSAxOworCQlJTklUX1JDVV9IRUFEKCZlbnRyeS0+cmN1KTsKKworCQlpZiAoZW50cnktPmRvbWFpbiAhPSBOVUxMKSB7CisJCQl1MzIgYmt0ID0gbmV0bGJsX2RvbWhzaF9oYXNoKGVudHJ5LT5kb21haW4pOwogCQkJbGlzdF9hZGRfdGFpbF9yY3UoJmVudHJ5LT5saXN0LAogCQkJCSAgICAmcmN1X2RlcmVmZXJlbmNlKG5ldGxibF9kb21oc2gpLT50YmxbYmt0XSk7Ci0JCWVsc2UKLQkJCXJldF92YWwgPSAtRUVYSVNUOwotCX0gZWxzZSB7Ci0JCUlOSVRfTElTVF9IRUFEKCZlbnRyeS0+bGlzdCk7Ci0JCWlmIChyY3VfZGVyZWZlcmVuY2UobmV0bGJsX2RvbWhzaF9kZWYpID09IE5VTEwpCisJCX0gZWxzZSB7CisJCQlJTklUX0xJU1RfSEVBRCgmZW50cnktPmxpc3QpOwogCQkJcmN1X2Fzc2lnbl9wb2ludGVyKG5ldGxibF9kb21oc2hfZGVmLCBlbnRyeSk7Ci0JCWVsc2UKLQkJCXJldF92YWwgPSAtRUVYSVNUOwotCX0KKwkJfQorCisJCWlmIChlbnRyeS0+dHlwZSA9PSBORVRMQkxfTkxUWVBFX0FERFJTRUxFQ1QpIHsKKwkJCW5ldGxibF9hZjRsaXN0X2ZvcmVhY2hfcmN1KGl0ZXI0LAorCQkJCQkgICAgICAgJmVudHJ5LT50eXBlX2RlZi5hZGRyc2VsLT5saXN0NCkKKwkJCQluZXRsYmxfZG9taHNoX2F1ZGl0X2FkZChlbnRyeSwgaXRlcjQsIE5VTEwsCisJCQkJCQkJcmV0X3ZhbCwgYXVkaXRfaW5mbyk7CisjaWYgZGVmaW5lZChDT05GSUdfSVBWNikgfHwgZGVmaW5lZChDT05GSUdfSVBWNl9NT0RVTEUpCisJCQluZXRsYmxfYWY2bGlzdF9mb3JlYWNoX3JjdShpdGVyNiwKKwkJCQkJICAgICAgICZlbnRyeS0+dHlwZV9kZWYuYWRkcnNlbC0+bGlzdDYpCisJCQkJbmV0bGJsX2RvbWhzaF9hdWRpdF9hZGQoZW50cnksIE5VTEwsIGl0ZXI2LAorCQkJCQkJCXJldF92YWwsIGF1ZGl0X2luZm8pOworI2VuZGlmIC8qIElQdjYgKi8KKwkJfSBlbHNlCisJCQluZXRsYmxfZG9taHNoX2F1ZGl0X2FkZChlbnRyeSwgTlVMTCwgTlVMTCwKKwkJCQkJCXJldF92YWwsIGF1ZGl0X2luZm8pOworCX0gZWxzZSBpZiAoZW50cnlfb2xkLT50eXBlID09IE5FVExCTF9OTFRZUEVfQUREUlNFTEVDVCAmJgorCQkgICBlbnRyeS0+dHlwZSA9PSBORVRMQkxfTkxUWVBFX0FERFJTRUxFQ1QpIHsKKwkJc3RydWN0IGxpc3RfaGVhZCAqb2xkX2xpc3Q0OworCQlzdHJ1Y3QgbGlzdF9oZWFkICpvbGRfbGlzdDY7CisKKwkJb2xkX2xpc3Q0ID0gJmVudHJ5X29sZC0+dHlwZV9kZWYuYWRkcnNlbC0+bGlzdDQ7CisJCW9sZF9saXN0NiA9ICZlbnRyeV9vbGQtPnR5cGVfZGVmLmFkZHJzZWwtPmxpc3Q2OworCisJCS8qIHdlIG9ubHkgYWxsb3cgdGhlIGFkZGl0aW9uIG9mIGFkZHJlc3Mgc2VsZWN0b3JzIGlmIGFsbCBvZgorCQkgKiB0aGUgc2VsZWN0b3JzIGRvIG5vdCBleGlzdCBpbiB0aGUgZXhpc3RpbmcgZG9tYWluIG1hcCAqLworCQluZXRsYmxfYWY0bGlzdF9mb3JlYWNoX3JjdShpdGVyNCwKKwkJCQkJICAgJmVudHJ5LT50eXBlX2RlZi5hZGRyc2VsLT5saXN0NCkKKwkJCWlmIChuZXRsYmxfYWY0bGlzdF9zZWFyY2hfZXhhY3QoaXRlcjQtPmFkZHIsCisJCQkJCQkJaXRlcjQtPm1hc2ssCisJCQkJCQkJb2xkX2xpc3Q0KSkgeworCQkJCXJldF92YWwgPSAtRUVYSVNUOworCQkJCWdvdG8gYWRkX3JldHVybjsKKwkJCX0KKyNpZiBkZWZpbmVkKENPTkZJR19JUFY2KSB8fCBkZWZpbmVkKENPTkZJR19JUFY2X01PRFVMRSkKKwkJbmV0bGJsX2FmNmxpc3RfZm9yZWFjaF9yY3UoaXRlcjYsCisJCQkJCSAgICZlbnRyeS0+dHlwZV9kZWYuYWRkcnNlbC0+bGlzdDYpCisJCQlpZiAobmV0bGJsX2FmNmxpc3Rfc2VhcmNoX2V4YWN0KCZpdGVyNi0+YWRkciwKKwkJCQkJCQkmaXRlcjYtPm1hc2ssCisJCQkJCQkJb2xkX2xpc3Q2KSkgeworCQkJCXJldF92YWwgPSAtRUVYSVNUOworCQkJCWdvdG8gYWRkX3JldHVybjsKKwkJCX0KKyNlbmRpZiAvKiBJUHY2ICovCisKKwkJbmV0bGJsX2FmNGxpc3RfZm9yZWFjaF9zYWZlKGl0ZXI0LCB0bXA0LAorCQkJCQkgICAgJmVudHJ5LT50eXBlX2RlZi5hZGRyc2VsLT5saXN0NCkgeworCQkJbmV0bGJsX2FmNGxpc3RfcmVtb3ZlX2VudHJ5KGl0ZXI0KTsKKwkJCWl0ZXI0LT52YWxpZCA9IDE7CisJCQlyZXRfdmFsID0gbmV0bGJsX2FmNGxpc3RfYWRkKGl0ZXI0LCBvbGRfbGlzdDQpOworCQkJbmV0bGJsX2RvbWhzaF9hdWRpdF9hZGQoZW50cnlfb2xkLCBpdGVyNCwgTlVMTCwKKwkJCQkJCXJldF92YWwsIGF1ZGl0X2luZm8pOworCQkJaWYgKHJldF92YWwgIT0gMCkKKwkJCQlnb3RvIGFkZF9yZXR1cm47CisJCX0KKyNpZiBkZWZpbmVkKENPTkZJR19JUFY2KSB8fCBkZWZpbmVkKENPTkZJR19JUFY2X01PRFVMRSkKKwkJbmV0bGJsX2FmNmxpc3RfZm9yZWFjaF9zYWZlKGl0ZXI2LCB0bXA2LAorCQkJCQkgICAgJmVudHJ5LT50eXBlX2RlZi5hZGRyc2VsLT5saXN0NikgeworCQkJbmV0bGJsX2FmNmxpc3RfcmVtb3ZlX2VudHJ5KGl0ZXI2KTsKKwkJCWl0ZXI2LT52YWxpZCA9IDE7CisJCQlyZXRfdmFsID0gbmV0bGJsX2FmNmxpc3RfYWRkKGl0ZXI2LCBvbGRfbGlzdDYpOworCQkJbmV0bGJsX2RvbWhzaF9hdWRpdF9hZGQoZW50cnlfb2xkLCBOVUxMLCBpdGVyNiwKKwkJCQkJCXJldF92YWwsIGF1ZGl0X2luZm8pOworCQkJaWYgKHJldF92YWwgIT0gMCkKKwkJCQlnb3RvIGFkZF9yZXR1cm47CisJCX0KKyNlbmRpZiAvKiBJUHY2ICovCisJfSBlbHNlCisJCXJldF92YWwgPSAtRUlOVkFMOworCithZGRfcmV0dXJuOgogCXNwaW5fdW5sb2NrKCZuZXRsYmxfZG9taHNoX2xvY2spOwotCWF1ZGl0X2J1ZiA9IG5ldGxibF9hdWRpdF9zdGFydF9jb21tb24oQVVESVRfTUFDX01BUF9BREQsIGF1ZGl0X2luZm8pOwotCWlmIChhdWRpdF9idWYgIT0gTlVMTCkgewotCQlhdWRpdF9sb2dfZm9ybWF0KGF1ZGl0X2J1ZiwKLQkJCQkgIiBubGJsX2RvbWFpbj0lcyIsCi0JCQkJIGVudHJ5LT5kb21haW4gPyBlbnRyeS0+ZG9tYWluIDogIihkZWZhdWx0KSIpOwotCQlzd2l0Y2ggKGVudHJ5LT50eXBlKSB7Ci0JCWNhc2UgTkVUTEJMX05MVFlQRV9VTkxBQkVMRUQ6Ci0JCQlhdWRpdF9sb2dfZm9ybWF0KGF1ZGl0X2J1ZiwgIiBubGJsX3Byb3RvY29sPXVubGJsIik7Ci0JCQlicmVhazsKLQkJY2FzZSBORVRMQkxfTkxUWVBFX0NJUFNPVjQ6Ci0JCQlhdWRpdF9sb2dfZm9ybWF0KGF1ZGl0X2J1ZiwKLQkJCQkJICIgbmxibF9wcm90b2NvbD1jaXBzb3Y0IGNpcHNvX2RvaT0ldSIsCi0JCQkJCSBlbnRyeS0+dHlwZV9kZWYuY2lwc292NC0+ZG9pKTsKLQkJCWJyZWFrOwotCQl9Ci0JCWF1ZGl0X2xvZ19mb3JtYXQoYXVkaXRfYnVmLCAiIHJlcz0ldSIsIHJldF92YWwgPT0gMCA/IDEgOiAwKTsKLQkJYXVkaXRfbG9nX2VuZChhdWRpdF9idWYpOwotCX0KIAlyY3VfcmVhZF91bmxvY2soKTsKLQotCWlmIChyZXRfdmFsICE9IDApIHsKLQkJc3dpdGNoIChlbnRyeS0+dHlwZSkgewotCQljYXNlIE5FVExCTF9OTFRZUEVfQ0lQU09WNDoKLQkJCWlmIChjaXBzb192NF9kb2lfZG9taHNoX3JlbW92ZShlbnRyeS0+dHlwZV9kZWYuY2lwc292NCwKLQkJCQkJCSAgICAgICBlbnRyeS0+ZG9tYWluKSAhPSAwKQotCQkJCUJVRygpOwotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0KIAlyZXR1cm4gcmV0X3ZhbDsKIH0KIApAQCAtMzAyLDYgKzQxOCw3MSBAQAogfQogCiAvKioKKyAqIG5ldGxibF9kb21oc2hfcmVtb3ZlX2VudHJ5IC0gUmVtb3ZlcyBhIGdpdmVuIGVudHJ5IGZyb20gdGhlIGRvbWFpbiB0YWJsZQorICogQGVudHJ5OiB0aGUgZW50cnkgdG8gcmVtb3ZlCisgKiBAYXVkaXRfaW5mbzogTmV0TGFiZWwgYXVkaXQgaW5mb3JtYXRpb24KKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIFJlbW92ZXMgYW4gZW50cnkgZnJvbSB0aGUgZG9tYWluIGhhc2ggdGFibGUgYW5kIGhhbmRsZXMgYW55IHVwZGF0ZXMgdG8gdGhlCisgKiBsb3dlciBsZXZlbCBwcm90b2NvbCBoYW5kbGVyIChpLmUuIENJUFNPKS4gIENhbGxlciBpcyByZXNwb25zaWJsZSBmb3IKKyAqIGVuc3VyaW5nIHRoYXQgdGhlIFJDVSByZWFkIGxvY2sgaXMgaGVsZC4gIFJldHVybnMgemVybyBvbiBzdWNjZXNzLCBuZWdhdGl2ZQorICogb24gZmFpbHVyZS4KKyAqCisgKi8KK2ludCBuZXRsYmxfZG9taHNoX3JlbW92ZV9lbnRyeShzdHJ1Y3QgbmV0bGJsX2RvbV9tYXAgKmVudHJ5LAorCQkJICAgICAgIHN0cnVjdCBuZXRsYmxfYXVkaXQgKmF1ZGl0X2luZm8pCit7CisJaW50IHJldF92YWwgPSAwOworCXN0cnVjdCBhdWRpdF9idWZmZXIgKmF1ZGl0X2J1ZjsKKworCWlmIChlbnRyeSA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT0VOVDsKKworCXNwaW5fbG9jaygmbmV0bGJsX2RvbWhzaF9sb2NrKTsKKwlpZiAoZW50cnktPnZhbGlkKSB7CisJCWVudHJ5LT52YWxpZCA9IDA7CisJCWlmIChlbnRyeSAhPSByY3VfZGVyZWZlcmVuY2UobmV0bGJsX2RvbWhzaF9kZWYpKQorCQkJbGlzdF9kZWxfcmN1KCZlbnRyeS0+bGlzdCk7CisJCWVsc2UKKwkJCXJjdV9hc3NpZ25fcG9pbnRlcihuZXRsYmxfZG9taHNoX2RlZiwgTlVMTCk7CisJfSBlbHNlCisJCXJldF92YWwgPSAtRU5PRU5UOworCXNwaW5fdW5sb2NrKCZuZXRsYmxfZG9taHNoX2xvY2spOworCisJYXVkaXRfYnVmID0gbmV0bGJsX2F1ZGl0X3N0YXJ0X2NvbW1vbihBVURJVF9NQUNfTUFQX0RFTCwgYXVkaXRfaW5mbyk7CisJaWYgKGF1ZGl0X2J1ZiAhPSBOVUxMKSB7CisJCWF1ZGl0X2xvZ19mb3JtYXQoYXVkaXRfYnVmLAorCQkJCSAiIG5sYmxfZG9tYWluPSVzIHJlcz0ldSIsCisJCQkJIGVudHJ5LT5kb21haW4gPyBlbnRyeS0+ZG9tYWluIDogIihkZWZhdWx0KSIsCisJCQkJIHJldF92YWwgPT0gMCA/IDEgOiAwKTsKKwkJYXVkaXRfbG9nX2VuZChhdWRpdF9idWYpOworCX0KKworCWlmIChyZXRfdmFsID09IDApIHsKKwkJc3RydWN0IG5ldGxibF9hZjRsaXN0ICppdGVyNDsKKwkJc3RydWN0IG5ldGxibF9kb21hZGRyNF9tYXAgKm1hcDQ7CisKKwkJc3dpdGNoIChlbnRyeS0+dHlwZSkgeworCQljYXNlIE5FVExCTF9OTFRZUEVfQUREUlNFTEVDVDoKKwkJCW5ldGxibF9hZjRsaXN0X2ZvcmVhY2hfcmN1KGl0ZXI0LAorCQkJCQkgICAgICZlbnRyeS0+dHlwZV9kZWYuYWRkcnNlbC0+bGlzdDQpIHsKKwkJCQltYXA0ID0gbmV0bGJsX2RvbWhzaF9hZGRyNF9lbnRyeShpdGVyNCk7CisJCQkJY2lwc29fdjRfZG9pX3B1dGRlZihtYXA0LT50eXBlX2RlZi5jaXBzb3Y0KTsKKwkJCX0KKwkJCS8qIG5vIG5lZWQgdG8gY2hlY2sgdGhlIElQdjYgbGlzdCBzaW5jZSB3ZSBjdXJyZW50bHkKKwkJCSAqIHN1cHBvcnQgb25seSB1bmxhYmVsZWQgcHJvdG9jb2xzIGZvciBJUHY2ICovCisJCQlicmVhazsKKwkJY2FzZSBORVRMQkxfTkxUWVBFX0NJUFNPVjQ6CisJCQljaXBzb192NF9kb2lfcHV0ZGVmKGVudHJ5LT50eXBlX2RlZi5jaXBzb3Y0KTsKKwkJCWJyZWFrOworCQl9CisJCWNhbGxfcmN1KCZlbnRyeS0+cmN1LCBuZXRsYmxfZG9taHNoX2ZyZWVfZW50cnkpOworCX0KKworCXJldHVybiByZXRfdmFsOworfQorCisvKioKICAqIG5ldGxibF9kb21oc2hfcmVtb3ZlIC0gUmVtb3ZlcyBhbiBlbnRyeSBmcm9tIHRoZSBkb21haW4gaGFzaCB0YWJsZQogICogQGRvbWFpbjogdGhlIGRvbWFpbiB0byByZW1vdmUKICAqIEBhdWRpdF9pbmZvOiBOZXRMYWJlbCBhdWRpdCBpbmZvcm1hdGlvbgpAQCAtMzE0LDQ3ICs0OTUsMTcgQEAKICAqLwogaW50IG5ldGxibF9kb21oc2hfcmVtb3ZlKGNvbnN0IGNoYXIgKmRvbWFpbiwgc3RydWN0IG5ldGxibF9hdWRpdCAqYXVkaXRfaW5mbykKIHsKLQlpbnQgcmV0X3ZhbCA9IC1FTk9FTlQ7CisJaW50IHJldF92YWw7CiAJc3RydWN0IG5ldGxibF9kb21fbWFwICplbnRyeTsKLQlzdHJ1Y3QgYXVkaXRfYnVmZmVyICphdWRpdF9idWY7CiAKIAlyY3VfcmVhZF9sb2NrKCk7CiAJaWYgKGRvbWFpbikKIAkJZW50cnkgPSBuZXRsYmxfZG9taHNoX3NlYXJjaChkb21haW4pOwogCWVsc2UKIAkJZW50cnkgPSBuZXRsYmxfZG9taHNoX3NlYXJjaF9kZWYoZG9tYWluKTsKLQlpZiAoZW50cnkgPT0gTlVMTCkKLQkJZ290byByZW1vdmVfcmV0dXJuOwotCXN3aXRjaCAoZW50cnktPnR5cGUpIHsKLQljYXNlIE5FVExCTF9OTFRZUEVfQ0lQU09WNDoKLQkJY2lwc29fdjRfZG9pX2RvbWhzaF9yZW1vdmUoZW50cnktPnR5cGVfZGVmLmNpcHNvdjQsCi0JCQkJCSAgIGVudHJ5LT5kb21haW4pOwotCQlicmVhazsKLQl9Ci0Jc3Bpbl9sb2NrKCZuZXRsYmxfZG9taHNoX2xvY2spOwotCWlmIChlbnRyeS0+dmFsaWQpIHsKLQkJZW50cnktPnZhbGlkID0gMDsKLQkJaWYgKGVudHJ5ICE9IHJjdV9kZXJlZmVyZW5jZShuZXRsYmxfZG9taHNoX2RlZikpCi0JCQlsaXN0X2RlbF9yY3UoJmVudHJ5LT5saXN0KTsKLQkJZWxzZQotCQkJcmN1X2Fzc2lnbl9wb2ludGVyKG5ldGxibF9kb21oc2hfZGVmLCBOVUxMKTsKLQkJcmV0X3ZhbCA9IDA7Ci0JfQotCXNwaW5fdW5sb2NrKCZuZXRsYmxfZG9taHNoX2xvY2spOwotCi0JYXVkaXRfYnVmID0gbmV0bGJsX2F1ZGl0X3N0YXJ0X2NvbW1vbihBVURJVF9NQUNfTUFQX0RFTCwgYXVkaXRfaW5mbyk7Ci0JaWYgKGF1ZGl0X2J1ZiAhPSBOVUxMKSB7Ci0JCWF1ZGl0X2xvZ19mb3JtYXQoYXVkaXRfYnVmLAotCQkJCSAiIG5sYmxfZG9tYWluPSVzIHJlcz0ldSIsCi0JCQkJIGVudHJ5LT5kb21haW4gPyBlbnRyeS0+ZG9tYWluIDogIihkZWZhdWx0KSIsCi0JCQkJIHJldF92YWwgPT0gMCA/IDEgOiAwKTsKLQkJYXVkaXRfbG9nX2VuZChhdWRpdF9idWYpOwotCX0KLQotcmVtb3ZlX3JldHVybjoKKwlyZXRfdmFsID0gbmV0bGJsX2RvbWhzaF9yZW1vdmVfZW50cnkoZW50cnksIGF1ZGl0X2luZm8pOwogCXJjdV9yZWFkX3VubG9jaygpOwotCWlmIChyZXRfdmFsID09IDApCi0JCWNhbGxfcmN1KCZlbnRyeS0+cmN1LCBuZXRsYmxfZG9taHNoX2ZyZWVfZW50cnkpOworCiAJcmV0dXJuIHJldF92YWw7CiB9CiAKQEAgLTM4OSw2ICs1NDAsNzAgQEAKIH0KIAogLyoqCisgKiBuZXRsYmxfZG9taHNoX2dldGVudHJ5X2FmNCAtIEdldCBhbiBlbnRyeSBmcm9tIHRoZSBkb21haW4gaGFzaCB0YWJsZQorICogQGRvbWFpbjogdGhlIGRvbWFpbiBuYW1lIHRvIHNlYXJjaCBmb3IKKyAqIEBhZGRyOiB0aGUgSVAgYWRkcmVzcyB0byBzZWFyY2ggZm9yCisgKgorICogRGVzY3JpcHRpb246CisgKiBMb29rIHRocm91Z2ggdGhlIGRvbWFpbiBoYXNoIHRhYmxlIHNlYXJjaGluZyBmb3IgYW4gZW50cnkgdG8gbWF0Y2ggQGRvbWFpbgorICogYW5kIEBhZGRyLCByZXR1cm4gYSBwb2ludGVyIHRvIGEgY29weSBvZiB0aGUgZW50cnkgb3IgTlVMTC4gIFRoZSBjYWxsZXIgaXMKKyAqIHJlc3BvbnNpYmxlIGZvciBlbnN1cmluZyB0aGF0IHJjdV9yZWFkX1t1bl1sb2NrKCkgaXMgY2FsbGVkLgorICoKKyAqLworc3RydWN0IG5ldGxibF9kb21hZGRyNF9tYXAgKm5ldGxibF9kb21oc2hfZ2V0ZW50cnlfYWY0KGNvbnN0IGNoYXIgKmRvbWFpbiwKKwkJCQkJCSAgICAgICBfX2JlMzIgYWRkcikKK3sKKwlzdHJ1Y3QgbmV0bGJsX2RvbV9tYXAgKmRvbV9pdGVyOworCXN0cnVjdCBuZXRsYmxfYWY0bGlzdCAqYWRkcl9pdGVyOworCisJZG9tX2l0ZXIgPSBuZXRsYmxfZG9taHNoX3NlYXJjaF9kZWYoZG9tYWluKTsKKwlpZiAoZG9tX2l0ZXIgPT0gTlVMTCkKKwkJcmV0dXJuIE5VTEw7CisJaWYgKGRvbV9pdGVyLT50eXBlICE9IE5FVExCTF9OTFRZUEVfQUREUlNFTEVDVCkKKwkJcmV0dXJuIE5VTEw7CisKKwlhZGRyX2l0ZXIgPSBuZXRsYmxfYWY0bGlzdF9zZWFyY2goYWRkciwKKwkJCQkJICAmZG9tX2l0ZXItPnR5cGVfZGVmLmFkZHJzZWwtPmxpc3Q0KTsKKwlpZiAoYWRkcl9pdGVyID09IE5VTEwpCisJCXJldHVybiBOVUxMOworCisJcmV0dXJuIG5ldGxibF9kb21oc2hfYWRkcjRfZW50cnkoYWRkcl9pdGVyKTsKK30KKworI2lmIGRlZmluZWQoQ09ORklHX0lQVjYpIHx8IGRlZmluZWQoQ09ORklHX0lQVjZfTU9EVUxFKQorLyoqCisgKiBuZXRsYmxfZG9taHNoX2dldGVudHJ5X2FmNiAtIEdldCBhbiBlbnRyeSBmcm9tIHRoZSBkb21haW4gaGFzaCB0YWJsZQorICogQGRvbWFpbjogdGhlIGRvbWFpbiBuYW1lIHRvIHNlYXJjaCBmb3IKKyAqIEBhZGRyOiB0aGUgSVAgYWRkcmVzcyB0byBzZWFyY2ggZm9yCisgKgorICogRGVzY3JpcHRpb246CisgKiBMb29rIHRocm91Z2ggdGhlIGRvbWFpbiBoYXNoIHRhYmxlIHNlYXJjaGluZyBmb3IgYW4gZW50cnkgdG8gbWF0Y2ggQGRvbWFpbgorICogYW5kIEBhZGRyLCByZXR1cm4gYSBwb2ludGVyIHRvIGEgY29weSBvZiB0aGUgZW50cnkgb3IgTlVMTC4gIFRoZSBjYWxsZXIgaXMKKyAqIHJlc3BvbnNpYmxlIGZvciBlbnN1cmluZyB0aGF0IHJjdV9yZWFkX1t1bl1sb2NrKCkgaXMgY2FsbGVkLgorICoKKyAqLworc3RydWN0IG5ldGxibF9kb21hZGRyNl9tYXAgKm5ldGxibF9kb21oc2hfZ2V0ZW50cnlfYWY2KGNvbnN0IGNoYXIgKmRvbWFpbiwKKwkJCQkJCSAgIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqYWRkcikKK3sKKwlzdHJ1Y3QgbmV0bGJsX2RvbV9tYXAgKmRvbV9pdGVyOworCXN0cnVjdCBuZXRsYmxfYWY2bGlzdCAqYWRkcl9pdGVyOworCisJZG9tX2l0ZXIgPSBuZXRsYmxfZG9taHNoX3NlYXJjaF9kZWYoZG9tYWluKTsKKwlpZiAoZG9tX2l0ZXIgPT0gTlVMTCkKKwkJcmV0dXJuIE5VTEw7CisJaWYgKGRvbV9pdGVyLT50eXBlICE9IE5FVExCTF9OTFRZUEVfQUREUlNFTEVDVCkKKwkJcmV0dXJuIE5VTEw7CisKKwlhZGRyX2l0ZXIgPSBuZXRsYmxfYWY2bGlzdF9zZWFyY2goYWRkciwKKwkJCQkJICAmZG9tX2l0ZXItPnR5cGVfZGVmLmFkZHJzZWwtPmxpc3Q2KTsKKwlpZiAoYWRkcl9pdGVyID09IE5VTEwpCisJCXJldHVybiBOVUxMOworCisJcmV0dXJuIG5ldGxibF9kb21oc2hfYWRkcjZfZW50cnkoYWRkcl9pdGVyKTsKK30KKyNlbmRpZiAvKiBJUHY2ICovCisKKy8qKgogICogbmV0bGJsX2RvbWhzaF93YWxrIC0gSXRlcmF0ZSB0aHJvdWdoIHRoZSBkb21haW4gbWFwcGluZyBoYXNoIHRhYmxlCiAgKiBAc2tpcF9ia3Q6IHRoZSBudW1iZXIgb2YgYnVja2V0cyB0byBza2lwIGF0IHRoZSBzdGFydAogICogQHNraXBfY2hhaW46IHRoZSBudW1iZXIgb2YgZW50cmllcyB0byBza2lwIGluIHRoZSBmaXJzdCBpdGVyYXRlZCBidWNrZXQKQEAgLTQxMCw2ICs2MjUsNyBAQAogewogCWludCByZXRfdmFsID0gLUVOT0VOVDsKIAl1MzIgaXRlcl9ia3Q7CisJc3RydWN0IGxpc3RfaGVhZCAqaXRlcl9saXN0OwogCXN0cnVjdCBuZXRsYmxfZG9tX21hcCAqaXRlcl9lbnRyeTsKIAl1MzIgY2hhaW5fY250ID0gMDsKIApAQCAtNDE3LDkgKzYzMyw4IEBACiAJZm9yIChpdGVyX2JrdCA9ICpza2lwX2JrdDsKIAkgICAgIGl0ZXJfYmt0IDwgcmN1X2RlcmVmZXJlbmNlKG5ldGxibF9kb21oc2gpLT5zaXplOwogCSAgICAgaXRlcl9ia3QrKywgY2hhaW5fY250ID0gMCkgewotCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShpdGVyX2VudHJ5LAotCQkJCSZyY3VfZGVyZWZlcmVuY2UobmV0bGJsX2RvbWhzaCktPnRibFtpdGVyX2JrdF0sCi0JCQkJbGlzdCkKKwkJaXRlcl9saXN0ID0gJnJjdV9kZXJlZmVyZW5jZShuZXRsYmxfZG9taHNoKS0+dGJsW2l0ZXJfYmt0XTsKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoaXRlcl9lbnRyeSwgaXRlcl9saXN0LCBsaXN0KQogCQkJaWYgKGl0ZXJfZW50cnktPnZhbGlkKSB7CiAJCQkJaWYgKGNoYWluX2NudCsrIDwgKnNraXBfY2hhaW4pCiAJCQkJCWNvbnRpbnVlOwpkaWZmIC0tZ2l0IGEvbmV0L25ldGxhYmVsL25ldGxhYmVsX2RvbWFpbmhhc2guaCBiL25ldC9uZXRsYWJlbC9uZXRsYWJlbF9kb21haW5oYXNoLmgKaW5kZXggODIyMDk5MC4uYmZjYjY3NiAxMDA2NDQKLS0tIGEvbmV0L25ldGxhYmVsL25ldGxhYmVsX2RvbWFpbmhhc2guaAorKysgYi9uZXQvbmV0bGFiZWwvbmV0bGFiZWxfZG9tYWluaGFzaC5oCkBAIC0xMSw3ICsxMSw3IEBACiAgKi8KIAogLyoKLSAqIChjKSBDb3B5cmlnaHQgSGV3bGV0dC1QYWNrYXJkIERldmVsb3BtZW50IENvbXBhbnksIEwuUC4sIDIwMDYKKyAqIChjKSBDb3B5cmlnaHQgSGV3bGV0dC1QYWNrYXJkIERldmVsb3BtZW50IENvbXBhbnksIEwuUC4sIDIwMDYsIDIwMDgKICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgIHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CkBAIC0zNiwxNiArMzYsNDMgQEAKICNpbmNsdWRlIDxsaW51eC9yY3VwZGF0ZS5oPgogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KIAorI2luY2x1ZGUgIm5ldGxhYmVsX2FkZHJsaXN0LmgiCisKIC8qIERvbWFpbiBoYXNoIHRhYmxlIHNpemUgKi8KIC8qIFhYWCAtIGN1cnJlbnRseSB0aGlzIG51bWJlciBpcyBhbiB1bmVkdWNhdGVkIGd1ZXNzICovCiAjZGVmaW5lIE5FVExCTF9ET01IU0hfQklUU0laRSAgICAgICA3CiAKLS8qIERvbWFpbiBtYXBwaW5nIGRlZmluaXRpb24gc3RydWN0ICovCisvKiBEb21haW4gbWFwcGluZyBkZWZpbml0aW9uIHN0cnVjdHVyZXMgKi8KKyNkZWZpbmUgbmV0bGJsX2RvbWhzaF9hZGRyNF9lbnRyeShpdGVyKSBcCisJY29udGFpbmVyX29mKGl0ZXIsIHN0cnVjdCBuZXRsYmxfZG9tYWRkcjRfbWFwLCBsaXN0KQorc3RydWN0IG5ldGxibF9kb21hZGRyNF9tYXAgeworCXUzMiB0eXBlOworCXVuaW9uIHsKKwkJc3RydWN0IGNpcHNvX3Y0X2RvaSAqY2lwc292NDsKKwl9IHR5cGVfZGVmOworCisJc3RydWN0IG5ldGxibF9hZjRsaXN0IGxpc3Q7Cit9OworI2RlZmluZSBuZXRsYmxfZG9taHNoX2FkZHI2X2VudHJ5KGl0ZXIpIFwKKwljb250YWluZXJfb2YoaXRlciwgc3RydWN0IG5ldGxibF9kb21hZGRyNl9tYXAsIGxpc3QpCitzdHJ1Y3QgbmV0bGJsX2RvbWFkZHI2X21hcCB7CisJdTMyIHR5cGU7CisKKwkvKiBOT1RFOiBubyAndHlwZV9kZWYnIHVuaW9uIG5lZWRlZCBhdCBwcmVzZW50IHNpbmNlIHdlIGRvbid0IGN1cnJlbnRseQorCSAqICAgICAgIHN1cHBvcnQgYW55IElQdjYgbGFiZWxpbmcgcHJvdG9jb2xzICovCisKKwlzdHJ1Y3QgbmV0bGJsX2FmNmxpc3QgbGlzdDsKK307CitzdHJ1Y3QgbmV0bGJsX2RvbWFkZHJfbWFwIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q0OworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDY7Cit9Owogc3RydWN0IG5ldGxibF9kb21fbWFwIHsKIAljaGFyICpkb21haW47CiAJdTMyIHR5cGU7CiAJdW5pb24gewogCQlzdHJ1Y3QgY2lwc29fdjRfZG9pICpjaXBzb3Y0OworCQlzdHJ1Y3QgbmV0bGJsX2RvbWFkZHJfbWFwICphZGRyc2VsOwogCX0gdHlwZV9kZWY7CiAKIAl1MzIgdmFsaWQ7CkBAIC02MSwxMiArODgsMjEgQEAKIAkJICAgICAgc3RydWN0IG5ldGxibF9hdWRpdCAqYXVkaXRfaW5mbyk7CiBpbnQgbmV0bGJsX2RvbWhzaF9hZGRfZGVmYXVsdChzdHJ1Y3QgbmV0bGJsX2RvbV9tYXAgKmVudHJ5LAogCQkJICAgICAgc3RydWN0IG5ldGxibF9hdWRpdCAqYXVkaXRfaW5mbyk7CitpbnQgbmV0bGJsX2RvbWhzaF9yZW1vdmVfZW50cnkoc3RydWN0IG5ldGxibF9kb21fbWFwICplbnRyeSwKKwkJCSAgICAgICBzdHJ1Y3QgbmV0bGJsX2F1ZGl0ICphdWRpdF9pbmZvKTsKIGludCBuZXRsYmxfZG9taHNoX3JlbW92ZShjb25zdCBjaGFyICpkb21haW4sIHN0cnVjdCBuZXRsYmxfYXVkaXQgKmF1ZGl0X2luZm8pOwogaW50IG5ldGxibF9kb21oc2hfcmVtb3ZlX2RlZmF1bHQoc3RydWN0IG5ldGxibF9hdWRpdCAqYXVkaXRfaW5mbyk7CiBzdHJ1Y3QgbmV0bGJsX2RvbV9tYXAgKm5ldGxibF9kb21oc2hfZ2V0ZW50cnkoY29uc3QgY2hhciAqZG9tYWluKTsKK3N0cnVjdCBuZXRsYmxfZG9tYWRkcjRfbWFwICpuZXRsYmxfZG9taHNoX2dldGVudHJ5X2FmNChjb25zdCBjaGFyICpkb21haW4sCisJCQkJCQkgICAgICAgX19iZTMyIGFkZHIpOwogaW50IG5ldGxibF9kb21oc2hfd2Fsayh1MzIgKnNraXBfYmt0LAogCQkgICAgIHUzMiAqc2tpcF9jaGFpbiwKIAkJICAgICBpbnQgKCpjYWxsYmFjaykgKHN0cnVjdCBuZXRsYmxfZG9tX21hcCAqZW50cnksIHZvaWQgKmFyZyksCiAJCSAgICAgdm9pZCAqY2JfYXJnKTsKIAorI2lmIGRlZmluZWQoQ09ORklHX0lQVjYpIHx8IGRlZmluZWQoQ09ORklHX0lQVjZfTU9EVUxFKQorc3RydWN0IG5ldGxibF9kb21hZGRyNl9tYXAgKm5ldGxibF9kb21oc2hfZ2V0ZW50cnlfYWY2KGNvbnN0IGNoYXIgKmRvbWFpbiwKKwkJCQkJCSAgY29uc3Qgc3RydWN0IGluNl9hZGRyICphZGRyKTsKKyNlbmRpZiAvKiBJUHY2ICovCisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvbmV0L25ldGxhYmVsL25ldGxhYmVsX2thcGkuYyBiL25ldC9uZXRsYWJlbC9uZXRsYWJlbF9rYXBpLmMKaW5kZXggMzk3OTNhMS4uYjMyZWNlYiAxMDA2NDQKLS0tIGEvbmV0L25ldGxhYmVsL25ldGxhYmVsX2thcGkuYworKysgYi9uZXQvbmV0bGFiZWwvbmV0bGFiZWxfa2FwaS5jCkBAIC0xMCw3ICsxMCw3IEBACiAgKi8KIAogLyoKLSAqIChjKSBDb3B5cmlnaHQgSGV3bGV0dC1QYWNrYXJkIERldmVsb3BtZW50IENvbXBhbnksIEwuUC4sIDIwMDYKKyAqIChjKSBDb3B5cmlnaHQgSGV3bGV0dC1QYWNrYXJkIERldmVsb3BtZW50IENvbXBhbnksIEwuUC4sIDIwMDYsIDIwMDgKICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgIHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CkBAIC04Miw3ICs4Miw3IEBACiAKIAllbnRyeSA9IGt6YWxsb2Moc2l6ZW9mKCplbnRyeSksIEdGUF9BVE9NSUMpOwogCWlmIChlbnRyeSA9PSBOVUxMKQotCQlnb3RvIGNmZ191bmxibF9hZGRfbWFwX2ZhaWx1cmU7CisJCXJldHVybiAtRU5PTUVNOwogCWlmIChkb21haW4gIT0gTlVMTCkgewogCQllbnRyeS0+ZG9tYWluID0ga3N0cmR1cChkb21haW4sIEdGUF9BVE9NSUMpOwogCQlpZiAoZW50cnktPmRvbWFpbiA9PSBOVUxMKQpAQCAtMTA0LDQ5ICsxMDQsNiBAQAogfQogCiAvKioKLSAqIG5ldGxibF9jZmdfY2lwc292NF9hZGQgLSBBZGQgYSBuZXcgQ0lQU092NCBET0kgZGVmaW5pdGlvbgotICogQGRvaV9kZWY6IHRoZSBET0kgZGVmaW5pdGlvbgotICogQGF1ZGl0X2luZm86IE5ldExhYmVsIGF1ZGl0IGluZm9ybWF0aW9uCi0gKgotICogRGVzY3JpcHRpb246Ci0gKiBBZGQgYSBuZXcgQ0lQU092NCBET0kgZGVmaW5pdGlvbiB0byB0aGUgTmV0TGFiZWwgc3Vic3lzdGVtLiAgUmV0dXJucyB6ZXJvIG9uCi0gKiBzdWNjZXNzLCBuZWdhdGl2ZSB2YWx1ZXMgb24gZmFpbHVyZS4KLSAqCi0gKi8KLWludCBuZXRsYmxfY2ZnX2NpcHNvdjRfYWRkKHN0cnVjdCBjaXBzb192NF9kb2kgKmRvaV9kZWYsCi0JCQkgICBzdHJ1Y3QgbmV0bGJsX2F1ZGl0ICphdWRpdF9pbmZvKQotewotCWludCByZXRfdmFsOwotCWNvbnN0IGNoYXIgKnR5cGVfc3RyOwotCXN0cnVjdCBhdWRpdF9idWZmZXIgKmF1ZGl0X2J1ZjsKLQotCXJldF92YWwgPSBjaXBzb192NF9kb2lfYWRkKGRvaV9kZWYpOwotCi0JYXVkaXRfYnVmID0gbmV0bGJsX2F1ZGl0X3N0YXJ0X2NvbW1vbihBVURJVF9NQUNfQ0lQU09WNF9BREQsCi0JCQkJCSAgICAgIGF1ZGl0X2luZm8pOwotCWlmIChhdWRpdF9idWYgIT0gTlVMTCkgewotCQlzd2l0Y2ggKGRvaV9kZWYtPnR5cGUpIHsKLQkJY2FzZSBDSVBTT19WNF9NQVBfU1REOgotCQkJdHlwZV9zdHIgPSAic3RkIjsKLQkJCWJyZWFrOwotCQljYXNlIENJUFNPX1Y0X01BUF9QQVNTOgotCQkJdHlwZV9zdHIgPSAicGFzcyI7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCXR5cGVfc3RyID0gIih1bmtub3duKSI7Ci0JCX0KLQkJYXVkaXRfbG9nX2Zvcm1hdChhdWRpdF9idWYsCi0JCQkJICIgY2lwc29fZG9pPSV1IGNpcHNvX3R5cGU9JXMgcmVzPSV1IiwKLQkJCQkgZG9pX2RlZi0+ZG9pLAotCQkJCSB0eXBlX3N0ciwKLQkJCQkgcmV0X3ZhbCA9PSAwID8gMSA6IDApOwotCQlhdWRpdF9sb2dfZW5kKGF1ZGl0X2J1Zik7Ci0JfQotCi0JcmV0dXJuIHJldF92YWw7Ci19Ci0KLS8qKgogICogbmV0bGJsX2NmZ19jaXBzb3Y0X2FkZF9tYXAgLSBBZGQgYSBuZXcgQ0lQU092NCBET0kgZGVmaW5pdGlvbiBhbmQgbWFwcGluZwogICogQGRvaV9kZWY6IHRoZSBET0kgZGVmaW5pdGlvbgogICogQGRvbWFpbjogdGhlIGRvbWFpbiBtYXBwaW5nIHRvIGFkZApAQCAtMTY0LDU4ICsxMjEsNzEgQEAKIAkJCSAgICAgICBzdHJ1Y3QgbmV0bGJsX2F1ZGl0ICphdWRpdF9pbmZvKQogewogCWludCByZXRfdmFsID0gLUVOT01FTTsKKwl1MzIgZG9pOworCXUzMiBkb2lfdHlwZTsKIAlzdHJ1Y3QgbmV0bGJsX2RvbV9tYXAgKmVudHJ5OworCWNvbnN0IGNoYXIgKnR5cGVfc3RyOworCXN0cnVjdCBhdWRpdF9idWZmZXIgKmF1ZGl0X2J1ZjsKKworCWRvaSA9IGRvaV9kZWYtPmRvaTsKKwlkb2lfdHlwZSA9IGRvaV9kZWYtPnR5cGU7CiAKIAllbnRyeSA9IGt6YWxsb2Moc2l6ZW9mKCplbnRyeSksIEdGUF9BVE9NSUMpOwogCWlmIChlbnRyeSA9PSBOVUxMKQotCQlnb3RvIGNmZ19jaXBzb3Y0X2FkZF9tYXBfZmFpbHVyZTsKKwkJcmV0dXJuIC1FTk9NRU07CiAJaWYgKGRvbWFpbiAhPSBOVUxMKSB7CiAJCWVudHJ5LT5kb21haW4gPSBrc3RyZHVwKGRvbWFpbiwgR0ZQX0FUT01JQyk7CiAJCWlmIChlbnRyeS0+ZG9tYWluID09IE5VTEwpCiAJCQlnb3RvIGNmZ19jaXBzb3Y0X2FkZF9tYXBfZmFpbHVyZTsKIAl9Ci0JZW50cnktPnR5cGUgPSBORVRMQkxfTkxUWVBFX0NJUFNPVjQ7Ci0JZW50cnktPnR5cGVfZGVmLmNpcHNvdjQgPSBkb2lfZGVmOwogCi0JLyogR3JhYiBhIFJDVSByZWFkIGxvY2sgaGVyZSBzbyBub3RoaW5nIGhhcHBlbnMgdG8gdGhlIGRvaV9kZWYgdmFyaWFibGUKLQkgKiBiZXR3ZWVuIGFkZGluZyBpdCB0byB0aGUgQ0lQU092NCBwcm90b2NvbCBlbmdpbmUgYW5kIGFkZGluZyBhCi0JICogZG9tYWluIG1hcHBpbmcgZm9yIGl0LiAqLwotCi0JcmN1X3JlYWRfbG9jaygpOwotCXJldF92YWwgPSBuZXRsYmxfY2ZnX2NpcHNvdjRfYWRkKGRvaV9kZWYsIGF1ZGl0X2luZm8pOwotCWlmIChyZXRfdmFsICE9IDApCi0JCWdvdG8gY2ZnX2NpcHNvdjRfYWRkX21hcF9mYWlsdXJlX3VubG9jazsKLQlyZXRfdmFsID0gbmV0bGJsX2RvbWhzaF9hZGQoZW50cnksIGF1ZGl0X2luZm8pOworCXJldF92YWwgPSBjaXBzb192NF9kb2lfYWRkKGRvaV9kZWYpOwogCWlmIChyZXRfdmFsICE9IDApCiAJCWdvdG8gY2ZnX2NpcHNvdjRfYWRkX21hcF9mYWlsdXJlX3JlbW92ZV9kb2k7Ci0JcmN1X3JlYWRfdW5sb2NrKCk7CisJZW50cnktPnR5cGUgPSBORVRMQkxfTkxUWVBFX0NJUFNPVjQ7CisJZW50cnktPnR5cGVfZGVmLmNpcHNvdjQgPSBjaXBzb192NF9kb2lfZ2V0ZGVmKGRvaSk7CisJaWYgKGVudHJ5LT50eXBlX2RlZi5jaXBzb3Y0ID09IE5VTEwpIHsKKwkJcmV0X3ZhbCA9IC1FTk9FTlQ7CisJCWdvdG8gY2ZnX2NpcHNvdjRfYWRkX21hcF9mYWlsdXJlX3JlbW92ZV9kb2k7CisJfQorCXJldF92YWwgPSBuZXRsYmxfZG9taHNoX2FkZChlbnRyeSwgYXVkaXRfaW5mbyk7CisJaWYgKHJldF92YWwgIT0gMCkKKwkJZ290byBjZmdfY2lwc292NF9hZGRfbWFwX2ZhaWx1cmVfcmVsZWFzZV9kb2k7CiAKLQlyZXR1cm4gMDsKK2NmZ19jaXBzb3Y0X2FkZF9tYXBfcmV0dXJuOgorCWF1ZGl0X2J1ZiA9IG5ldGxibF9hdWRpdF9zdGFydF9jb21tb24oQVVESVRfTUFDX0NJUFNPVjRfQURELAorCQkJCQkgICAgICBhdWRpdF9pbmZvKTsKKwlpZiAoYXVkaXRfYnVmICE9IE5VTEwpIHsKKwkJc3dpdGNoIChkb2lfdHlwZSkgeworCQljYXNlIENJUFNPX1Y0X01BUF9UUkFOUzoKKwkJCXR5cGVfc3RyID0gInRyYW5zIjsKKwkJCWJyZWFrOworCQljYXNlIENJUFNPX1Y0X01BUF9QQVNTOgorCQkJdHlwZV9zdHIgPSAicGFzcyI7CisJCQlicmVhazsKKwkJY2FzZSBDSVBTT19WNF9NQVBfTE9DQUw6CisJCQl0eXBlX3N0ciA9ICJsb2NhbCI7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXR5cGVfc3RyID0gIih1bmtub3duKSI7CisJCX0KKwkJYXVkaXRfbG9nX2Zvcm1hdChhdWRpdF9idWYsCisJCQkJICIgY2lwc29fZG9pPSV1IGNpcHNvX3R5cGU9JXMgcmVzPSV1IiwKKwkJCQkgZG9pLCB0eXBlX3N0ciwgcmV0X3ZhbCA9PSAwID8gMSA6IDApOworCQlhdWRpdF9sb2dfZW5kKGF1ZGl0X2J1Zik7CisJfQogCisJcmV0dXJuIHJldF92YWw7CisKK2NmZ19jaXBzb3Y0X2FkZF9tYXBfZmFpbHVyZV9yZWxlYXNlX2RvaToKKwljaXBzb192NF9kb2lfcHV0ZGVmKGRvaV9kZWYpOwogY2ZnX2NpcHNvdjRfYWRkX21hcF9mYWlsdXJlX3JlbW92ZV9kb2k6Ci0JY2lwc29fdjRfZG9pX3JlbW92ZShkb2lfZGVmLT5kb2ksIGF1ZGl0X2luZm8sIG5ldGxibF9jaXBzb3Y0X2RvaV9mcmVlKTsKLWNmZ19jaXBzb3Y0X2FkZF9tYXBfZmFpbHVyZV91bmxvY2s6Ci0JcmN1X3JlYWRfdW5sb2NrKCk7CisJY2lwc29fdjRfZG9pX3JlbW92ZShkb2ksIGF1ZGl0X2luZm8pOwogY2ZnX2NpcHNvdjRfYWRkX21hcF9mYWlsdXJlOgogCWlmIChlbnRyeSAhPSBOVUxMKQogCQlrZnJlZShlbnRyeS0+ZG9tYWluKTsKIAlrZnJlZShlbnRyeSk7Ci0JcmV0dXJuIHJldF92YWw7Ci19Ci0KLS8qKgotICogbmV0bGJsX2NmZ19jaXBzb3Y0X2RlbCAtIFJlbW92ZWFuIGV4aXN0aW5nIENJUFNPdjQgRE9JIGRlZmluaXRpb24KLSAqIEBkb2k6IHRoZSBDSVBTTyBET0kgdmFsdWUKLSAqIEBhdWRpdF9pbmZvOiBOZXRMYWJlbCBhdWRpdCBpbmZvcm1hdGlvbgotICoKLSAqIERlc2NyaXB0aW9uOgotICogUmVtb3ZlcyBhbiBleGlzdGluZyBDSVBTT3Y0IERPSSBkZWZpbml0aW9uIGZyb20gdGhlIE5ldExhYmVsIHN1YnN5c3RlbS4KLSAqIFJldHVybnMgemVybyBvbiBzdWNjZXNzLCBuZWdhdGl2ZSB2YWx1ZXMgb24gZmFpbHVyZS4KLSAqCi0gKi8KLWludCBuZXRsYmxfY2ZnX2NpcHNvdjRfZGVsKHUzMiBkb2ksIHN0cnVjdCBuZXRsYmxfYXVkaXQgKmF1ZGl0X2luZm8pCi17Ci0JcmV0dXJuIGNpcHNvX3Y0X2RvaV9yZW1vdmUoZG9pLCBhdWRpdF9pbmZvLCBuZXRsYmxfY2lwc292NF9kb2lfZnJlZSk7CisJZ290byBjZmdfY2lwc292NF9hZGRfbWFwX3JldHVybjsKIH0KIAogLyoKQEAgLTQ1Miw3ICs0MjIsOSBAQAogICogQXR0YWNoIHRoZSBjb3JyZWN0IGxhYmVsIHRvIHRoZSBnaXZlbiBzb2NrZXQgdXNpbmcgdGhlIHNlY3VyaXR5IGF0dHJpYnV0ZXMKICAqIHNwZWNpZmllZCBpbiBAc2VjYXR0ci4gIFRoaXMgZnVuY3Rpb24gcmVxdWlyZXMgZXhjbHVzaXZlIGFjY2VzcyB0byBAc2ssCiAgKiB3aGljaCBtZWFucyBpdCBlaXRoZXIgbmVlZHMgdG8gYmUgaW4gdGhlIHByb2Nlc3Mgb2YgYmVpbmcgY3JlYXRlZCBvciBsb2NrZWQuCi0gKiBSZXR1cm5zIHplcm8gb24gc3VjY2VzcywgbmVnYXRpdmUgdmFsdWVzIG9uIGZhaWx1cmUuCisgKiBSZXR1cm5zIHplcm8gb24gc3VjY2VzcywgLUVERVNUQUREUlJFUSBpZiB0aGUgZG9tYWluIGlzIGNvbmZpZ3VyZWQgdG8gdXNlCisgKiBuZXR3b3JrIGFkZHJlc3Mgc2VsZWN0b3JzIChjYW4ndCBibGluZGx5IGxhYmVsIHRoZSBzb2NrZXQpLCBhbmQgbmVnYXRpdmUKKyAqIHZhbHVlcyBvbiBhbGwgb3RoZXIgZmFpbHVyZXMuCiAgKgogICovCiBpbnQgbmV0bGJsX3NvY2tfc2V0YXR0cihzdHJ1Y3Qgc29jayAqc2ssCkBAIC00NjYsNiArNDM4LDkgQEAKIAlpZiAoZG9tX2VudHJ5ID09IE5VTEwpCiAJCWdvdG8gc29ja2V0X3NldGF0dHJfcmV0dXJuOwogCXN3aXRjaCAoZG9tX2VudHJ5LT50eXBlKSB7CisJY2FzZSBORVRMQkxfTkxUWVBFX0FERFJTRUxFQ1Q6CisJCXJldF92YWwgPSAtRURFU1RBRERSUkVROworCQlicmVhazsKIAljYXNlIE5FVExCTF9OTFRZUEVfQ0lQU09WNDoKIAkJcmV0X3ZhbCA9IGNpcHNvX3Y0X3NvY2tfc2V0YXR0cihzaywKIAkJCQkJCWRvbV9lbnRyeS0+dHlwZV9kZWYuY2lwc292NCwKQEAgLTQ4NCw2ICs0NTksMjAgQEAKIH0KIAogLyoqCisgKiBuZXRsYmxfc29ja19kZWxhdHRyIC0gRGVsZXRlIGFsbCB0aGUgTmV0TGFiZWwgbGFiZWxzIG9uIGEgc29ja2V0CisgKiBAc2s6IHRoZSBzb2NrZXQKKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIFJlbW92ZSBhbGwgdGhlIE5ldExhYmVsIGxhYmVsaW5nIGZyb20gQHNrLiAgVGhlIGNhbGxlciBpcyByZXNwb25zaWJsZSBmb3IKKyAqIGVuc3VyaW5nIHRoYXQgQHNrIGlzIGxvY2tlZC4KKyAqCisgKi8KK3ZvaWQgbmV0bGJsX3NvY2tfZGVsYXR0cihzdHJ1Y3Qgc29jayAqc2spCit7CisJY2lwc29fdjRfc29ja19kZWxhdHRyKHNrKTsKK30KKworLyoqCiAgKiBuZXRsYmxfc29ja19nZXRhdHRyIC0gRGV0ZXJtaW5lIHRoZSBzZWN1cml0eSBhdHRyaWJ1dGVzIG9mIGEgc29jawogICogQHNrOiB0aGUgc29jawogICogQHNlY2F0dHI6IHRoZSBzZWN1cml0eSBhdHRyaWJ1dGVzCkBAIC01MDEsNiArNDkwLDEyOCBAQAogfQogCiAvKioKKyAqIG5ldGxibF9jb25uX3NldGF0dHIgLSBMYWJlbCBhIGNvbm5lY3RlZCBzb2NrZXQgdXNpbmcgdGhlIGNvcnJlY3QgcHJvdG9jb2wKKyAqIEBzazogdGhlIHNvY2tldCB0byBsYWJlbAorICogQGFkZHI6IHRoZSBkZXN0aW5hdGlvbiBhZGRyZXNzCisgKiBAc2VjYXR0cjogdGhlIHNlY3VyaXR5IGF0dHJpYnV0ZXMKKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIEF0dGFjaCB0aGUgY29ycmVjdCBsYWJlbCB0byB0aGUgZ2l2ZW4gY29ubmVjdGVkIHNvY2tldCB1c2luZyB0aGUgc2VjdXJpdHkKKyAqIGF0dHJpYnV0ZXMgc3BlY2lmaWVkIGluIEBzZWNhdHRyLiAgVGhlIGNhbGxlciBpcyByZXNwb25zaWJsZSBmb3IgZW5zdXJpbmcKKyAqIHRoYXQgQHNrIGlzIGxvY2tlZC4gIFJldHVybnMgemVybyBvbiBzdWNjZXNzLCBuZWdhdGl2ZSB2YWx1ZXMgb24gZmFpbHVyZS4KKyAqCisgKi8KK2ludCBuZXRsYmxfY29ubl9zZXRhdHRyKHN0cnVjdCBzb2NrICpzaywKKwkJCXN0cnVjdCBzb2NrYWRkciAqYWRkciwKKwkJCWNvbnN0IHN0cnVjdCBuZXRsYmxfbHNtX3NlY2F0dHIgKnNlY2F0dHIpCit7CisJaW50IHJldF92YWw7CisJc3RydWN0IHNvY2thZGRyX2luICphZGRyNDsKKwlzdHJ1Y3QgbmV0bGJsX2RvbWFkZHI0X21hcCAqYWY0X2VudHJ5OworCisJcmN1X3JlYWRfbG9jaygpOworCXN3aXRjaCAoYWRkci0+c2FfZmFtaWx5KSB7CisJY2FzZSBBRl9JTkVUOgorCQlhZGRyNCA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKilhZGRyOworCQlhZjRfZW50cnkgPSBuZXRsYmxfZG9taHNoX2dldGVudHJ5X2FmNChzZWNhdHRyLT5kb21haW4sCisJCQkJCQkgICAgICAgYWRkcjQtPnNpbl9hZGRyLnNfYWRkcik7CisJCWlmIChhZjRfZW50cnkgPT0gTlVMTCkgeworCQkJcmV0X3ZhbCA9IC1FTk9FTlQ7CisJCQlnb3RvIGNvbm5fc2V0YXR0cl9yZXR1cm47CisJCX0KKwkJc3dpdGNoIChhZjRfZW50cnktPnR5cGUpIHsKKwkJY2FzZSBORVRMQkxfTkxUWVBFX0NJUFNPVjQ6CisJCQlyZXRfdmFsID0gY2lwc29fdjRfc29ja19zZXRhdHRyKHNrLAorCQkJCQkJICAgYWY0X2VudHJ5LT50eXBlX2RlZi5jaXBzb3Y0LAorCQkJCQkJICAgc2VjYXR0cik7CisJCQlicmVhazsKKwkJY2FzZSBORVRMQkxfTkxUWVBFX1VOTEFCRUxFRDoKKwkJCS8qIGp1c3QgZGVsZXRlIHRoZSBwcm90b2NvbHMgd2Ugc3VwcG9ydCBmb3IgcmlnaHQgbm93CisJCQkgKiBidXQgd2UgY291bGQgcmVtb3ZlIG90aGVyIHByb3RvY29scyBpZiBuZWVkZWQgKi8KKwkJCWNpcHNvX3Y0X3NvY2tfZGVsYXR0cihzayk7CisJCQlyZXRfdmFsID0gMDsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcmV0X3ZhbCA9IC1FTk9FTlQ7CisJCX0KKwkJYnJlYWs7CisjaWYgZGVmaW5lZChDT05GSUdfSVBWNikgfHwgZGVmaW5lZChDT05GSUdfSVBWNl9NT0RVTEUpCisJY2FzZSBBRl9JTkVUNjoKKwkJLyogc2luY2Ugd2UgZG9uJ3Qgc3VwcG9ydCBhbnkgSVB2NiBsYWJlbGluZyBwcm90b2NvbHMgcmlnaHQKKwkJICogbm93IHdlIGNhbiBvcHRpbWl6ZSBldmVyeXRoaW5nIGF3YXkgdW50aWwgd2UgZG8gKi8KKwkJcmV0X3ZhbCA9IDA7CisJCWJyZWFrOworI2VuZGlmIC8qIElQdjYgKi8KKwlkZWZhdWx0OgorCQlyZXRfdmFsID0gMDsKKwl9CisKK2Nvbm5fc2V0YXR0cl9yZXR1cm46CisJcmN1X3JlYWRfdW5sb2NrKCk7CisJcmV0dXJuIHJldF92YWw7Cit9CisKKy8qKgorICogbmV0bGJsX3NrYnVmZl9zZXRhdHRyIC0gTGFiZWwgYSBwYWNrZXQgdXNpbmcgdGhlIGNvcnJlY3QgcHJvdG9jb2wKKyAqIEBza2I6IHRoZSBwYWNrZXQKKyAqIEBmYW1pbHk6IHByb3RvY29sIGZhbWlseQorICogQHNlY2F0dHI6IHRoZSBzZWN1cml0eSBhdHRyaWJ1dGVzCisgKgorICogRGVzY3JpcHRpb246CisgKiBBdHRhY2ggdGhlIGNvcnJlY3QgbGFiZWwgdG8gdGhlIGdpdmVuIHBhY2tldCB1c2luZyB0aGUgc2VjdXJpdHkgYXR0cmlidXRlcworICogc3BlY2lmaWVkIGluIEBzZWNhdHRyLiAgUmV0dXJucyB6ZXJvIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIHZhbHVlcyBvbiBmYWlsdXJlLgorICoKKyAqLworaW50IG5ldGxibF9za2J1ZmZfc2V0YXR0cihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJICB1MTYgZmFtaWx5LAorCQkJICBjb25zdCBzdHJ1Y3QgbmV0bGJsX2xzbV9zZWNhdHRyICpzZWNhdHRyKQoreworCWludCByZXRfdmFsOworCXN0cnVjdCBpcGhkciAqaGRyNDsKKwlzdHJ1Y3QgbmV0bGJsX2RvbWFkZHI0X21hcCAqYWY0X2VudHJ5OworCisJcmN1X3JlYWRfbG9jaygpOworCXN3aXRjaCAoZmFtaWx5KSB7CisJY2FzZSBBRl9JTkVUOgorCQloZHI0ID0gaXBfaGRyKHNrYik7CisJCWFmNF9lbnRyeSA9IG5ldGxibF9kb21oc2hfZ2V0ZW50cnlfYWY0KHNlY2F0dHItPmRvbWFpbiwKKwkJCQkJCSAgICAgICBoZHI0LT5kYWRkcik7CisJCWlmIChhZjRfZW50cnkgPT0gTlVMTCkgeworCQkJcmV0X3ZhbCA9IC1FTk9FTlQ7CisJCQlnb3RvIHNrYnVmZl9zZXRhdHRyX3JldHVybjsKKwkJfQorCQlzd2l0Y2ggKGFmNF9lbnRyeS0+dHlwZSkgeworCQljYXNlIE5FVExCTF9OTFRZUEVfQ0lQU09WNDoKKwkJCXJldF92YWwgPSBjaXBzb192NF9za2J1ZmZfc2V0YXR0cihza2IsCisJCQkJCQkgICBhZjRfZW50cnktPnR5cGVfZGVmLmNpcHNvdjQsCisJCQkJCQkgICBzZWNhdHRyKTsKKwkJCWJyZWFrOworCQljYXNlIE5FVExCTF9OTFRZUEVfVU5MQUJFTEVEOgorCQkJLyoganVzdCBkZWxldGUgdGhlIHByb3RvY29scyB3ZSBzdXBwb3J0IGZvciByaWdodCBub3cKKwkJCSAqIGJ1dCB3ZSBjb3VsZCByZW1vdmUgb3RoZXIgcHJvdG9jb2xzIGlmIG5lZWRlZCAqLworCQkJcmV0X3ZhbCA9IGNpcHNvX3Y0X3NrYnVmZl9kZWxhdHRyKHNrYik7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXJldF92YWwgPSAtRU5PRU5UOworCQl9CisJCWJyZWFrOworI2lmIGRlZmluZWQoQ09ORklHX0lQVjYpIHx8IGRlZmluZWQoQ09ORklHX0lQVjZfTU9EVUxFKQorCWNhc2UgQUZfSU5FVDY6CisJCS8qIHNpbmNlIHdlIGRvbid0IHN1cHBvcnQgYW55IElQdjYgbGFiZWxpbmcgcHJvdG9jb2xzIHJpZ2h0CisJCSAqIG5vdyB3ZSBjYW4gb3B0aW1pemUgZXZlcnl0aGluZyBhd2F5IHVudGlsIHdlIGRvICovCisJCXJldF92YWwgPSAwOworCQlicmVhazsKKyNlbmRpZiAvKiBJUHY2ICovCisJZGVmYXVsdDoKKwkJcmV0X3ZhbCA9IDA7CisJfQorCitza2J1ZmZfc2V0YXR0cl9yZXR1cm46CisJcmN1X3JlYWRfdW5sb2NrKCk7CisJcmV0dXJuIHJldF92YWw7Cit9CisKKy8qKgogICogbmV0bGJsX3NrYnVmZl9nZXRhdHRyIC0gRGV0ZXJtaW5lIHRoZSBzZWN1cml0eSBhdHRyaWJ1dGVzIG9mIGEgcGFja2V0CiAgKiBAc2tiOiB0aGUgcGFja2V0CiAgKiBAZmFtaWx5OiBwcm90b2NvbCBmYW1pbHkKQEAgLTUyOCw2ICs2MzksNyBAQAogICogbmV0bGJsX3NrYnVmZl9lcnIgLSBIYW5kbGUgYSBMU00gZXJyb3Igb24gYSBza19idWZmCiAgKiBAc2tiOiB0aGUgcGFja2V0CiAgKiBAZXJyb3I6IHRoZSBlcnJvciBjb2RlCisgKiBAZ2F0ZXdheTogdHJ1ZSBpZiBob3N0IGlzIGFjdGluZyBhcyBhIGdhdGV3YXksIGZhbHNlIG90aGVyd2lzZQogICoKICAqIERlc2NyaXB0aW9uOgogICogRGVhbCB3aXRoIGEgTFNNIHByb2JsZW0gd2hlbiBoYW5kbGluZyB0aGUgcGFja2V0IGluIEBza2IsIHR5cGljYWxseSB0aGlzIGlzCkBAIC01MzUsMTAgKzY0NywxMCBAQAogICogYWNjb3JkaW5nIHRvIHRoZSBwYWNrZXQncyBsYWJlbGluZyBwcm90b2NvbC4KICAqCiAgKi8KLXZvaWQgbmV0bGJsX3NrYnVmZl9lcnIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGVycm9yKQordm9pZCBuZXRsYmxfc2tidWZmX2VycihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgZXJyb3IsIGludCBnYXRld2F5KQogewogCWlmIChDSVBTT19WNF9PUFRFWElTVChza2IpKQotCQljaXBzb192NF9lcnJvcihza2IsIGVycm9yLCAwKTsKKwkJY2lwc29fdjRfZXJyb3Ioc2tiLCBlcnJvciwgZ2F0ZXdheSk7CiB9CiAKIC8qKgpkaWZmIC0tZ2l0IGEvbmV0L25ldGxhYmVsL25ldGxhYmVsX21nbXQuYyBiL25ldC9uZXRsYWJlbC9uZXRsYWJlbF9tZ210LmMKaW5kZXggNDRiZTVkNS4uZWU3NjllYyAxMDA2NDQKLS0tIGEvbmV0L25ldGxhYmVsL25ldGxhYmVsX21nbXQuYworKysgYi9uZXQvbmV0bGFiZWwvbmV0bGFiZWxfbWdtdC5jCkBAIC0xMCw3ICsxMCw3IEBACiAgKi8KIAogLyoKLSAqIChjKSBDb3B5cmlnaHQgSGV3bGV0dC1QYWNrYXJkIERldmVsb3BtZW50IENvbXBhbnksIEwuUC4sIDIwMDYKKyAqIChjKSBDb3B5cmlnaHQgSGV3bGV0dC1QYWNrYXJkIERldmVsb3BtZW50IENvbXBhbnksIEwuUC4sIDIwMDYsIDIwMDgKICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgIHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CkBAIC0zMiw5ICszMiwxMyBAQAogI2luY2x1ZGUgPGxpbnV4L3NvY2tldC5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgorI2luY2x1ZGUgPGxpbnV4L2luLmg+CisjaW5jbHVkZSA8bGludXgvaW42Lmg+CiAjaW5jbHVkZSA8bmV0L3NvY2suaD4KICNpbmNsdWRlIDxuZXQvbmV0bGluay5oPgogI2luY2x1ZGUgPG5ldC9nZW5ldGxpbmsuaD4KKyNpbmNsdWRlIDxuZXQvaXAuaD4KKyNpbmNsdWRlIDxuZXQvaXB2Ni5oPgogI2luY2x1ZGUgPG5ldC9uZXRsYWJlbC5oPgogI2luY2x1ZGUgPG5ldC9jaXBzb19pcHY0Lmg+CiAjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgpAQCAtNzEsNiArNzUsMzAxIEBACiB9OwogCiAvKgorICogSGVscGVyIEZ1bmN0aW9ucworICovCisKKy8qKgorICogbmV0bGJsX21nbXRfYWRkIC0gSGFuZGxlIGFuIEFERCBtZXNzYWdlCisgKiBAaW5mbzogdGhlIEdlbmVyaWMgTkVUTElOSyBpbmZvIGJsb2NrCisgKiBAYXVkaXRfaW5mbzogTmV0TGFiZWwgYXVkaXQgaW5mb3JtYXRpb24KKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIEhlbHBlciBmdW5jdGlvbiBmb3IgdGhlIEFERCBhbmQgQUREREVGIG1lc3NhZ2VzIHRvIGFkZCB0aGUgZG9tYWluIG1hcHBpbmdzCisgKiBmcm9tIHRoZSBtZXNzYWdlIHRvIHRoZSBoYXNoIHRhYmxlLiAgU2VlIG5ldGxhYmVsLmggZm9yIGEgZGVzY3JpcHRpb24gb2YgdGhlCisgKiBtZXNzYWdlIGZvcm1hdC4gIFJldHVybnMgemVybyBvbiBzdWNjZXNzLCBuZWdhdGl2ZSB2YWx1ZXMgb24gZmFpbHVyZS4KKyAqCisgKi8KK3N0YXRpYyBpbnQgbmV0bGJsX21nbXRfYWRkX2NvbW1vbihzdHJ1Y3QgZ2VubF9pbmZvICppbmZvLAorCQkJCSAgc3RydWN0IG5ldGxibF9hdWRpdCAqYXVkaXRfaW5mbykKK3sKKwlpbnQgcmV0X3ZhbCA9IC1FSU5WQUw7CisJc3RydWN0IG5ldGxibF9kb21fbWFwICplbnRyeSA9IE5VTEw7CisJc3RydWN0IG5ldGxibF9kb21hZGRyX21hcCAqYWRkcm1hcCA9IE5VTEw7CisJc3RydWN0IGNpcHNvX3Y0X2RvaSAqY2lwc292NCA9IE5VTEw7CisJdTMyIHRtcF92YWw7CisKKwllbnRyeSA9IGt6YWxsb2Moc2l6ZW9mKCplbnRyeSksIEdGUF9LRVJORUwpOworCWlmIChlbnRyeSA9PSBOVUxMKSB7CisJCXJldF92YWwgPSAtRU5PTUVNOworCQlnb3RvIGFkZF9mYWlsdXJlOworCX0KKwllbnRyeS0+dHlwZSA9IG5sYV9nZXRfdTMyKGluZm8tPmF0dHJzW05MQkxfTUdNVF9BX1BST1RPQ09MXSk7CisJaWYgKGluZm8tPmF0dHJzW05MQkxfTUdNVF9BX0RPTUFJTl0pIHsKKwkJc2l6ZV90IHRtcF9zaXplID0gbmxhX2xlbihpbmZvLT5hdHRyc1tOTEJMX01HTVRfQV9ET01BSU5dKTsKKwkJZW50cnktPmRvbWFpbiA9IGttYWxsb2ModG1wX3NpemUsIEdGUF9LRVJORUwpOworCQlpZiAoZW50cnktPmRvbWFpbiA9PSBOVUxMKSB7CisJCQlyZXRfdmFsID0gLUVOT01FTTsKKwkJCWdvdG8gYWRkX2ZhaWx1cmU7CisJCX0KKwkJbmxhX3N0cmxjcHkoZW50cnktPmRvbWFpbiwKKwkJCSAgICBpbmZvLT5hdHRyc1tOTEJMX01HTVRfQV9ET01BSU5dLCB0bXBfc2l6ZSk7CisJfQorCisJLyogTk9URTogaW50ZXJuYWxseSB3ZSBhbGxvdy91c2UgYSBlbnRyeS0+dHlwZSB2YWx1ZSBvZgorCSAqICAgICAgIE5FVExCTF9OTFRZUEVfQUREUlNFTEVDVCBidXQgd2UgZG9uJ3QgY3VycmVudGx5IGFsbG93IHVzZXJzCisJICogICAgICAgdG8gcGFzcyB0aGF0IGFzIGEgcHJvdG9jb2wgdmFsdWUgYmVjYXVzZSB3ZSBuZWVkIHRvIGtub3cgdGhlCisJICogICAgICAgInJlYWwiIHByb3RvY29sICovCisKKwlzd2l0Y2ggKGVudHJ5LT50eXBlKSB7CisJY2FzZSBORVRMQkxfTkxUWVBFX1VOTEFCRUxFRDoKKwkJYnJlYWs7CisJY2FzZSBORVRMQkxfTkxUWVBFX0NJUFNPVjQ6CisJCWlmICghaW5mby0+YXR0cnNbTkxCTF9NR01UX0FfQ1Y0RE9JXSkKKwkJCWdvdG8gYWRkX2ZhaWx1cmU7CisKKwkJdG1wX3ZhbCA9IG5sYV9nZXRfdTMyKGluZm8tPmF0dHJzW05MQkxfTUdNVF9BX0NWNERPSV0pOworCQljaXBzb3Y0ID0gY2lwc29fdjRfZG9pX2dldGRlZih0bXBfdmFsKTsKKwkJaWYgKGNpcHNvdjQgPT0gTlVMTCkKKwkJCWdvdG8gYWRkX2ZhaWx1cmU7CisJCWVudHJ5LT50eXBlX2RlZi5jaXBzb3Y0ID0gY2lwc292NDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZ290byBhZGRfZmFpbHVyZTsKKwl9CisKKwlpZiAoaW5mby0+YXR0cnNbTkxCTF9NR01UX0FfSVBWNEFERFJdKSB7CisJCXN0cnVjdCBpbl9hZGRyICphZGRyOworCQlzdHJ1Y3QgaW5fYWRkciAqbWFzazsKKwkJc3RydWN0IG5ldGxibF9kb21hZGRyNF9tYXAgKm1hcDsKKworCQlhZGRybWFwID0ga3phbGxvYyhzaXplb2YoKmFkZHJtYXApLCBHRlBfS0VSTkVMKTsKKwkJaWYgKGFkZHJtYXAgPT0gTlVMTCkgeworCQkJcmV0X3ZhbCA9IC1FTk9NRU07CisJCQlnb3RvIGFkZF9mYWlsdXJlOworCQl9CisJCUlOSVRfTElTVF9IRUFEKCZhZGRybWFwLT5saXN0NCk7CisJCUlOSVRfTElTVF9IRUFEKCZhZGRybWFwLT5saXN0Nik7CisKKwkJaWYgKG5sYV9sZW4oaW5mby0+YXR0cnNbTkxCTF9NR01UX0FfSVBWNEFERFJdKSAhPQorCQkgICAgc2l6ZW9mKHN0cnVjdCBpbl9hZGRyKSkgeworCQkJcmV0X3ZhbCA9IC1FSU5WQUw7CisJCQlnb3RvIGFkZF9mYWlsdXJlOworCQl9CisJCWlmIChubGFfbGVuKGluZm8tPmF0dHJzW05MQkxfTUdNVF9BX0lQVjRNQVNLXSkgIT0KKwkJICAgIHNpemVvZihzdHJ1Y3QgaW5fYWRkcikpIHsKKwkJCXJldF92YWwgPSAtRUlOVkFMOworCQkJZ290byBhZGRfZmFpbHVyZTsKKwkJfQorCQlhZGRyID0gbmxhX2RhdGEoaW5mby0+YXR0cnNbTkxCTF9NR01UX0FfSVBWNEFERFJdKTsKKwkJbWFzayA9IG5sYV9kYXRhKGluZm8tPmF0dHJzW05MQkxfTUdNVF9BX0lQVjRNQVNLXSk7CisKKwkJbWFwID0ga3phbGxvYyhzaXplb2YoKm1hcCksIEdGUF9LRVJORUwpOworCQlpZiAobWFwID09IE5VTEwpIHsKKwkJCXJldF92YWwgPSAtRU5PTUVNOworCQkJZ290byBhZGRfZmFpbHVyZTsKKwkJfQorCQltYXAtPmxpc3QuYWRkciA9IGFkZHItPnNfYWRkciAmIG1hc2stPnNfYWRkcjsKKwkJbWFwLT5saXN0Lm1hc2sgPSBtYXNrLT5zX2FkZHI7CisJCW1hcC0+bGlzdC52YWxpZCA9IDE7CisJCW1hcC0+dHlwZSA9IGVudHJ5LT50eXBlOworCQlpZiAoY2lwc292NCkKKwkJCW1hcC0+dHlwZV9kZWYuY2lwc292NCA9IGNpcHNvdjQ7CisKKwkJcmV0X3ZhbCA9IG5ldGxibF9hZjRsaXN0X2FkZCgmbWFwLT5saXN0LCAmYWRkcm1hcC0+bGlzdDQpOworCQlpZiAocmV0X3ZhbCAhPSAwKSB7CisJCQlrZnJlZShtYXApOworCQkJZ290byBhZGRfZmFpbHVyZTsKKwkJfQorCisJCWVudHJ5LT50eXBlID0gTkVUTEJMX05MVFlQRV9BRERSU0VMRUNUOworCQllbnRyeS0+dHlwZV9kZWYuYWRkcnNlbCA9IGFkZHJtYXA7CisjaWYgZGVmaW5lZChDT05GSUdfSVBWNikgfHwgZGVmaW5lZChDT05GSUdfSVBWNl9NT0RVTEUpCisJfSBlbHNlIGlmIChpbmZvLT5hdHRyc1tOTEJMX01HTVRfQV9JUFY2QUREUl0pIHsKKwkJc3RydWN0IGluNl9hZGRyICphZGRyOworCQlzdHJ1Y3QgaW42X2FkZHIgKm1hc2s7CisJCXN0cnVjdCBuZXRsYmxfZG9tYWRkcjZfbWFwICptYXA7CisKKwkJYWRkcm1hcCA9IGt6YWxsb2Moc2l6ZW9mKCphZGRybWFwKSwgR0ZQX0tFUk5FTCk7CisJCWlmIChhZGRybWFwID09IE5VTEwpIHsKKwkJCXJldF92YWwgPSAtRU5PTUVNOworCQkJZ290byBhZGRfZmFpbHVyZTsKKwkJfQorCQlJTklUX0xJU1RfSEVBRCgmYWRkcm1hcC0+bGlzdDQpOworCQlJTklUX0xJU1RfSEVBRCgmYWRkcm1hcC0+bGlzdDYpOworCisJCWlmIChubGFfbGVuKGluZm8tPmF0dHJzW05MQkxfTUdNVF9BX0lQVjZBRERSXSkgIT0KKwkJICAgIHNpemVvZihzdHJ1Y3QgaW42X2FkZHIpKSB7CisJCQlyZXRfdmFsID0gLUVJTlZBTDsKKwkJCWdvdG8gYWRkX2ZhaWx1cmU7CisJCX0KKwkJaWYgKG5sYV9sZW4oaW5mby0+YXR0cnNbTkxCTF9NR01UX0FfSVBWNk1BU0tdKSAhPQorCQkgICAgc2l6ZW9mKHN0cnVjdCBpbjZfYWRkcikpIHsKKwkJCXJldF92YWwgPSAtRUlOVkFMOworCQkJZ290byBhZGRfZmFpbHVyZTsKKwkJfQorCQlhZGRyID0gbmxhX2RhdGEoaW5mby0+YXR0cnNbTkxCTF9NR01UX0FfSVBWNkFERFJdKTsKKwkJbWFzayA9IG5sYV9kYXRhKGluZm8tPmF0dHJzW05MQkxfTUdNVF9BX0lQVjZNQVNLXSk7CisKKwkJbWFwID0ga3phbGxvYyhzaXplb2YoKm1hcCksIEdGUF9LRVJORUwpOworCQlpZiAobWFwID09IE5VTEwpIHsKKwkJCXJldF92YWwgPSAtRU5PTUVNOworCQkJZ290byBhZGRfZmFpbHVyZTsKKwkJfQorCQlpcHY2X2FkZHJfY29weSgmbWFwLT5saXN0LmFkZHIsIGFkZHIpOworCQltYXAtPmxpc3QuYWRkci5zNl9hZGRyMzJbMF0gJj0gbWFzay0+czZfYWRkcjMyWzBdOworCQltYXAtPmxpc3QuYWRkci5zNl9hZGRyMzJbMV0gJj0gbWFzay0+czZfYWRkcjMyWzFdOworCQltYXAtPmxpc3QuYWRkci5zNl9hZGRyMzJbMl0gJj0gbWFzay0+czZfYWRkcjMyWzJdOworCQltYXAtPmxpc3QuYWRkci5zNl9hZGRyMzJbM10gJj0gbWFzay0+czZfYWRkcjMyWzNdOworCQlpcHY2X2FkZHJfY29weSgmbWFwLT5saXN0Lm1hc2ssIG1hc2spOworCQltYXAtPmxpc3QudmFsaWQgPSAxOworCQltYXAtPnR5cGUgPSBlbnRyeS0+dHlwZTsKKworCQlyZXRfdmFsID0gbmV0bGJsX2FmNmxpc3RfYWRkKCZtYXAtPmxpc3QsICZhZGRybWFwLT5saXN0Nik7CisJCWlmIChyZXRfdmFsICE9IDApIHsKKwkJCWtmcmVlKG1hcCk7CisJCQlnb3RvIGFkZF9mYWlsdXJlOworCQl9CisKKwkJZW50cnktPnR5cGUgPSBORVRMQkxfTkxUWVBFX0FERFJTRUxFQ1Q7CisJCWVudHJ5LT50eXBlX2RlZi5hZGRyc2VsID0gYWRkcm1hcDsKKyNlbmRpZiAvKiBJUHY2ICovCisJfQorCisJcmV0X3ZhbCA9IG5ldGxibF9kb21oc2hfYWRkKGVudHJ5LCBhdWRpdF9pbmZvKTsKKwlpZiAocmV0X3ZhbCAhPSAwKQorCQlnb3RvIGFkZF9mYWlsdXJlOworCisJcmV0dXJuIDA7CisKK2FkZF9mYWlsdXJlOgorCWlmIChjaXBzb3Y0KQorCQljaXBzb192NF9kb2lfcHV0ZGVmKGNpcHNvdjQpOworCWlmIChlbnRyeSkKKwkJa2ZyZWUoZW50cnktPmRvbWFpbik7CisJa2ZyZWUoYWRkcm1hcCk7CisJa2ZyZWUoZW50cnkpOworCXJldHVybiByZXRfdmFsOworfQorCisvKioKKyAqIG5ldGxibF9tZ210X2xpc3RlbnRyeSAtIExpc3QgYSBOZXRMYWJlbC9MU00gZG9tYWluIG1hcCBlbnRyeQorICogQHNrYjogdGhlIE5FVExJTksgYnVmZmVyCisgKiBAZW50cnk6IHRoZSBtYXAgZW50cnkKKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgYSBoZWxwZXIgZnVuY3Rpb24gdXNlZCBieSB0aGUgTElTVEFMTCBhbmQgTElTVERFRiBjb21tYW5kCisgKiBoYW5kbGVycy4gIFRoZSBjYWxsZXIgaXMgcmVzcG9uc2liaWxlIGZvciBlbnN1cmluZyB0aGF0IHRoZSBSQ1UgcmVhZCBsb2NrCisgKiBpcyBoZWxkLiAgUmV0dXJucyB6ZXJvIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIHZhbHVlcyBvbiBmYWlsdXJlLgorICoKKyAqLworc3RhdGljIGludCBuZXRsYmxfbWdtdF9saXN0ZW50cnkoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkgc3RydWN0IG5ldGxibF9kb21fbWFwICplbnRyeSkKK3sKKwlpbnQgcmV0X3ZhbDsKKwlzdHJ1Y3QgbmxhdHRyICpubGFfYTsKKwlzdHJ1Y3QgbmxhdHRyICpubGFfYjsKKwlzdHJ1Y3QgbmV0bGJsX2FmNGxpc3QgKml0ZXI0OworI2lmIGRlZmluZWQoQ09ORklHX0lQVjYpIHx8IGRlZmluZWQoQ09ORklHX0lQVjZfTU9EVUxFKQorCXN0cnVjdCBuZXRsYmxfYWY2bGlzdCAqaXRlcjY7CisjZW5kaWYKKworCWlmIChlbnRyeS0+ZG9tYWluICE9IE5VTEwpIHsKKwkJcmV0X3ZhbCA9IG5sYV9wdXRfc3RyaW5nKHNrYiwKKwkJCQkJIE5MQkxfTUdNVF9BX0RPTUFJTiwgZW50cnktPmRvbWFpbik7CisJCWlmIChyZXRfdmFsICE9IDApCisJCQlyZXR1cm4gcmV0X3ZhbDsKKwl9CisKKwlzd2l0Y2ggKGVudHJ5LT50eXBlKSB7CisJY2FzZSBORVRMQkxfTkxUWVBFX0FERFJTRUxFQ1Q6CisJCW5sYV9hID0gbmxhX25lc3Rfc3RhcnQoc2tiLCBOTEJMX01HTVRfQV9TRUxFQ1RPUkxJU1QpOworCQlpZiAobmxhX2EgPT0gTlVMTCkKKwkJCXJldHVybiAtRU5PTUVNOworCisJCW5ldGxibF9hZjRsaXN0X2ZvcmVhY2hfcmN1KGl0ZXI0LAorCQkJCQkgICAmZW50cnktPnR5cGVfZGVmLmFkZHJzZWwtPmxpc3Q0KSB7CisJCQlzdHJ1Y3QgbmV0bGJsX2RvbWFkZHI0X21hcCAqbWFwNDsKKwkJCXN0cnVjdCBpbl9hZGRyIGFkZHJfc3RydWN0OworCisJCQlubGFfYiA9IG5sYV9uZXN0X3N0YXJ0KHNrYiwgTkxCTF9NR01UX0FfQUREUlNFTEVDVE9SKTsKKwkJCWlmIChubGFfYiA9PSBOVUxMKQorCQkJCXJldHVybiAtRU5PTUVNOworCisJCQlhZGRyX3N0cnVjdC5zX2FkZHIgPSBpdGVyNC0+YWRkcjsKKwkJCXJldF92YWwgPSBubGFfcHV0KHNrYiwgTkxCTF9NR01UX0FfSVBWNEFERFIsCisJCQkJCSAgc2l6ZW9mKHN0cnVjdCBpbl9hZGRyKSwKKwkJCQkJICAmYWRkcl9zdHJ1Y3QpOworCQkJaWYgKHJldF92YWwgIT0gMCkKKwkJCQlyZXR1cm4gcmV0X3ZhbDsKKwkJCWFkZHJfc3RydWN0LnNfYWRkciA9IGl0ZXI0LT5tYXNrOworCQkJcmV0X3ZhbCA9IG5sYV9wdXQoc2tiLCBOTEJMX01HTVRfQV9JUFY0TUFTSywKKwkJCQkJICBzaXplb2Yoc3RydWN0IGluX2FkZHIpLAorCQkJCQkgICZhZGRyX3N0cnVjdCk7CisJCQlpZiAocmV0X3ZhbCAhPSAwKQorCQkJCXJldHVybiByZXRfdmFsOworCQkJbWFwNCA9IG5ldGxibF9kb21oc2hfYWRkcjRfZW50cnkoaXRlcjQpOworCQkJcmV0X3ZhbCA9IG5sYV9wdXRfdTMyKHNrYiwgTkxCTF9NR01UX0FfUFJPVE9DT0wsCisJCQkJCSAgICAgIG1hcDQtPnR5cGUpOworCQkJaWYgKHJldF92YWwgIT0gMCkKKwkJCQlyZXR1cm4gcmV0X3ZhbDsKKwkJCXN3aXRjaCAobWFwNC0+dHlwZSkgeworCQkJY2FzZSBORVRMQkxfTkxUWVBFX0NJUFNPVjQ6CisJCQkJcmV0X3ZhbCA9IG5sYV9wdXRfdTMyKHNrYiwgTkxCTF9NR01UX0FfQ1Y0RE9JLAorCQkJCQkJICBtYXA0LT50eXBlX2RlZi5jaXBzb3Y0LT5kb2kpOworCQkJCWlmIChyZXRfdmFsICE9IDApCisJCQkJCXJldHVybiByZXRfdmFsOworCQkJCWJyZWFrOworCQkJfQorCisJCQlubGFfbmVzdF9lbmQoc2tiLCBubGFfYik7CisJCX0KKyNpZiBkZWZpbmVkKENPTkZJR19JUFY2KSB8fCBkZWZpbmVkKENPTkZJR19JUFY2X01PRFVMRSkKKwkJbmV0bGJsX2FmNmxpc3RfZm9yZWFjaF9yY3UoaXRlcjYsCisJCQkJCSAgICZlbnRyeS0+dHlwZV9kZWYuYWRkcnNlbC0+bGlzdDYpIHsKKwkJCXN0cnVjdCBuZXRsYmxfZG9tYWRkcjZfbWFwICptYXA2OworCisJCQlubGFfYiA9IG5sYV9uZXN0X3N0YXJ0KHNrYiwgTkxCTF9NR01UX0FfQUREUlNFTEVDVE9SKTsKKwkJCWlmIChubGFfYiA9PSBOVUxMKQorCQkJCXJldHVybiAtRU5PTUVNOworCisJCQlyZXRfdmFsID0gbmxhX3B1dChza2IsIE5MQkxfTUdNVF9BX0lQVjZBRERSLAorCQkJCQkgIHNpemVvZihzdHJ1Y3QgaW42X2FkZHIpLAorCQkJCQkgICZpdGVyNi0+YWRkcik7CisJCQlpZiAocmV0X3ZhbCAhPSAwKQorCQkJCXJldHVybiByZXRfdmFsOworCQkJcmV0X3ZhbCA9IG5sYV9wdXQoc2tiLCBOTEJMX01HTVRfQV9JUFY2TUFTSywKKwkJCQkJICBzaXplb2Yoc3RydWN0IGluNl9hZGRyKSwKKwkJCQkJICAmaXRlcjYtPm1hc2spOworCQkJaWYgKHJldF92YWwgIT0gMCkKKwkJCQlyZXR1cm4gcmV0X3ZhbDsKKwkJCW1hcDYgPSBuZXRsYmxfZG9taHNoX2FkZHI2X2VudHJ5KGl0ZXI2KTsKKwkJCXJldF92YWwgPSBubGFfcHV0X3UzMihza2IsIE5MQkxfTUdNVF9BX1BST1RPQ09MLAorCQkJCQkgICAgICBtYXA2LT50eXBlKTsKKwkJCWlmIChyZXRfdmFsICE9IDApCisJCQkJcmV0dXJuIHJldF92YWw7CisKKwkJCW5sYV9uZXN0X2VuZChza2IsIG5sYV9iKTsKKwkJfQorI2VuZGlmIC8qIElQdjYgKi8KKworCQlubGFfbmVzdF9lbmQoc2tiLCBubGFfYSk7CisJCWJyZWFrOworCWNhc2UgTkVUTEJMX05MVFlQRV9VTkxBQkVMRUQ6CisJCXJldF92YWwgPSBubGFfcHV0X3UzMihza2IsIE5MQkxfTUdNVF9BX1BST1RPQ09MLCBlbnRyeS0+dHlwZSk7CisJCWJyZWFrOworCWNhc2UgTkVUTEJMX05MVFlQRV9DSVBTT1Y0OgorCQlyZXRfdmFsID0gbmxhX3B1dF91MzIoc2tiLCBOTEJMX01HTVRfQV9QUk9UT0NPTCwgZW50cnktPnR5cGUpOworCQlpZiAocmV0X3ZhbCAhPSAwKQorCQkJcmV0dXJuIHJldF92YWw7CisJCXJldF92YWwgPSBubGFfcHV0X3UzMihza2IsIE5MQkxfTUdNVF9BX0NWNERPSSwKKwkJCQkgICAgICBlbnRyeS0+dHlwZV9kZWYuY2lwc292NC0+ZG9pKTsKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIHJldF92YWw7Cit9CisKKy8qCiAgKiBOZXRMYWJlbCBDb21tYW5kIEhhbmRsZXJzCiAgKi8KIApAQCAtODcsNjcgKzM4NiwyMyBAQAogICovCiBzdGF0aWMgaW50IG5ldGxibF9tZ210X2FkZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKQogewotCWludCByZXRfdmFsID0gLUVJTlZBTDsKLQlzdHJ1Y3QgbmV0bGJsX2RvbV9tYXAgKmVudHJ5ID0gTlVMTDsKLQlzaXplX3QgdG1wX3NpemU7Ci0JdTMyIHRtcF92YWw7CiAJc3RydWN0IG5ldGxibF9hdWRpdCBhdWRpdF9pbmZvOwogCi0JaWYgKCFpbmZvLT5hdHRyc1tOTEJMX01HTVRfQV9ET01BSU5dIHx8Ci0JICAgICFpbmZvLT5hdHRyc1tOTEJMX01HTVRfQV9QUk9UT0NPTF0pCi0JCWdvdG8gYWRkX2ZhaWx1cmU7CisJaWYgKCghaW5mby0+YXR0cnNbTkxCTF9NR01UX0FfRE9NQUlOXSkgfHwKKwkgICAgKCFpbmZvLT5hdHRyc1tOTEJMX01HTVRfQV9QUk9UT0NPTF0pIHx8CisJICAgIChpbmZvLT5hdHRyc1tOTEJMX01HTVRfQV9JUFY0QUREUl0gJiYKKwkgICAgIGluZm8tPmF0dHJzW05MQkxfTUdNVF9BX0lQVjZBRERSXSkgfHwKKwkgICAgKGluZm8tPmF0dHJzW05MQkxfTUdNVF9BX0lQVjRNQVNLXSAmJgorCSAgICAgaW5mby0+YXR0cnNbTkxCTF9NR01UX0FfSVBWNk1BU0tdKSB8fAorCSAgICAoKGluZm8tPmF0dHJzW05MQkxfTUdNVF9BX0lQVjRBRERSXSAhPSBOVUxMKSBeCisJICAgICAoaW5mby0+YXR0cnNbTkxCTF9NR01UX0FfSVBWNE1BU0tdICE9IE5VTEwpKSB8fAorCSAgICAoKGluZm8tPmF0dHJzW05MQkxfTUdNVF9BX0lQVjZBRERSXSAhPSBOVUxMKSBeCisJICAgICAoaW5mby0+YXR0cnNbTkxCTF9NR01UX0FfSVBWNk1BU0tdICE9IE5VTEwpKSkKKwkJcmV0dXJuIC1FSU5WQUw7CiAKIAluZXRsYmxfbmV0bGlua19hdWRpdGluZm8oc2tiLCAmYXVkaXRfaW5mbyk7CiAKLQllbnRyeSA9IGt6YWxsb2Moc2l6ZW9mKCplbnRyeSksIEdGUF9LRVJORUwpOwotCWlmIChlbnRyeSA9PSBOVUxMKSB7Ci0JCXJldF92YWwgPSAtRU5PTUVNOwotCQlnb3RvIGFkZF9mYWlsdXJlOwotCX0KLQl0bXBfc2l6ZSA9IG5sYV9sZW4oaW5mby0+YXR0cnNbTkxCTF9NR01UX0FfRE9NQUlOXSk7Ci0JZW50cnktPmRvbWFpbiA9IGttYWxsb2ModG1wX3NpemUsIEdGUF9LRVJORUwpOwotCWlmIChlbnRyeS0+ZG9tYWluID09IE5VTEwpIHsKLQkJcmV0X3ZhbCA9IC1FTk9NRU07Ci0JCWdvdG8gYWRkX2ZhaWx1cmU7Ci0JfQotCWVudHJ5LT50eXBlID0gbmxhX2dldF91MzIoaW5mby0+YXR0cnNbTkxCTF9NR01UX0FfUFJPVE9DT0xdKTsKLQlubGFfc3RybGNweShlbnRyeS0+ZG9tYWluLCBpbmZvLT5hdHRyc1tOTEJMX01HTVRfQV9ET01BSU5dLCB0bXBfc2l6ZSk7Ci0KLQlzd2l0Y2ggKGVudHJ5LT50eXBlKSB7Ci0JY2FzZSBORVRMQkxfTkxUWVBFX1VOTEFCRUxFRDoKLQkJcmV0X3ZhbCA9IG5ldGxibF9kb21oc2hfYWRkKGVudHJ5LCAmYXVkaXRfaW5mbyk7Ci0JCWJyZWFrOwotCWNhc2UgTkVUTEJMX05MVFlQRV9DSVBTT1Y0OgotCQlpZiAoIWluZm8tPmF0dHJzW05MQkxfTUdNVF9BX0NWNERPSV0pCi0JCQlnb3RvIGFkZF9mYWlsdXJlOwotCi0JCXRtcF92YWwgPSBubGFfZ2V0X3UzMihpbmZvLT5hdHRyc1tOTEJMX01HTVRfQV9DVjRET0ldKTsKLQkJLyogV2Ugc2hvdWxkIGJlIGhvbGRpbmcgYSByY3VfcmVhZF9sb2NrKCkgaGVyZSB3aGlsZSB3ZSBob2xkCi0JCSAqIHRoZSByZXN1bHQgYnV0IHNpbmNlIHRoZSBlbnRyeSB3aWxsIGFsd2F5cyBiZSBkZWxldGVkIHdoZW4KLQkJICogdGhlIENJUFNPIERPSSBpcyBkZWxldGVkIHdlIGFyZW4ndCBnb2luZyB0byBrZWVwIHRoZQotCQkgKiBsb2NrLiAqLwotCQlyY3VfcmVhZF9sb2NrKCk7Ci0JCWVudHJ5LT50eXBlX2RlZi5jaXBzb3Y0ID0gY2lwc29fdjRfZG9pX2dldGRlZih0bXBfdmFsKTsKLQkJaWYgKGVudHJ5LT50eXBlX2RlZi5jaXBzb3Y0ID09IE5VTEwpIHsKLQkJCXJjdV9yZWFkX3VubG9jaygpOwotCQkJZ290byBhZGRfZmFpbHVyZTsKLQkJfQotCQlyZXRfdmFsID0gbmV0bGJsX2RvbWhzaF9hZGQoZW50cnksICZhdWRpdF9pbmZvKTsKLQkJcmN1X3JlYWRfdW5sb2NrKCk7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCWdvdG8gYWRkX2ZhaWx1cmU7Ci0JfQotCWlmIChyZXRfdmFsICE9IDApCi0JCWdvdG8gYWRkX2ZhaWx1cmU7Ci0KLQlyZXR1cm4gMDsKLQotYWRkX2ZhaWx1cmU6Ci0JaWYgKGVudHJ5KQotCQlrZnJlZShlbnRyeS0+ZG9tYWluKTsKLQlrZnJlZShlbnRyeSk7Ci0JcmV0dXJuIHJldF92YWw7CisJcmV0dXJuIG5ldGxibF9tZ210X2FkZF9jb21tb24oaW5mbywgJmF1ZGl0X2luZm8pOwogfQogCiAvKioKQEAgLTE5OCwyMyArNDUzLDkgQEAKIAlpZiAoZGF0YSA9PSBOVUxMKQogCQlnb3RvIGxpc3RhbGxfY2JfZmFpbHVyZTsKIAotCXJldF92YWwgPSBubGFfcHV0X3N0cmluZyhjYl9hcmctPnNrYiwKLQkJCQkgTkxCTF9NR01UX0FfRE9NQUlOLAotCQkJCSBlbnRyeS0+ZG9tYWluKTsKKwlyZXRfdmFsID0gbmV0bGJsX21nbXRfbGlzdGVudHJ5KGNiX2FyZy0+c2tiLCBlbnRyeSk7CiAJaWYgKHJldF92YWwgIT0gMCkKIAkJZ290byBsaXN0YWxsX2NiX2ZhaWx1cmU7Ci0JcmV0X3ZhbCA9IG5sYV9wdXRfdTMyKGNiX2FyZy0+c2tiLCBOTEJMX01HTVRfQV9QUk9UT0NPTCwgZW50cnktPnR5cGUpOwotCWlmIChyZXRfdmFsICE9IDApCi0JCWdvdG8gbGlzdGFsbF9jYl9mYWlsdXJlOwotCXN3aXRjaCAoZW50cnktPnR5cGUpIHsKLQljYXNlIE5FVExCTF9OTFRZUEVfQ0lQU09WNDoKLQkJcmV0X3ZhbCA9IG5sYV9wdXRfdTMyKGNiX2FyZy0+c2tiLAotCQkJCSAgICAgIE5MQkxfTUdNVF9BX0NWNERPSSwKLQkJCQkgICAgICBlbnRyeS0+dHlwZV9kZWYuY2lwc292NC0+ZG9pKTsKLQkJaWYgKHJldF92YWwgIT0gMCkKLQkJCWdvdG8gbGlzdGFsbF9jYl9mYWlsdXJlOwotCQlicmVhazsKLQl9CiAKIAljYl9hcmctPnNlcSsrOwogCXJldHVybiBnZW5sbXNnX2VuZChjYl9hcmctPnNrYiwgZGF0YSk7CkBAIC0yNjgsNTYgKzUwOSwyMiBAQAogICovCiBzdGF0aWMgaW50IG5ldGxibF9tZ210X2FkZGRlZihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKQogewotCWludCByZXRfdmFsID0gLUVJTlZBTDsKLQlzdHJ1Y3QgbmV0bGJsX2RvbV9tYXAgKmVudHJ5ID0gTlVMTDsKLQl1MzIgdG1wX3ZhbDsKIAlzdHJ1Y3QgbmV0bGJsX2F1ZGl0IGF1ZGl0X2luZm87CiAKLQlpZiAoIWluZm8tPmF0dHJzW05MQkxfTUdNVF9BX1BST1RPQ09MXSkKLQkJZ290byBhZGRkZWZfZmFpbHVyZTsKKwlpZiAoKCFpbmZvLT5hdHRyc1tOTEJMX01HTVRfQV9QUk9UT0NPTF0pIHx8CisJICAgIChpbmZvLT5hdHRyc1tOTEJMX01HTVRfQV9JUFY0QUREUl0gJiYKKwkgICAgIGluZm8tPmF0dHJzW05MQkxfTUdNVF9BX0lQVjZBRERSXSkgfHwKKwkgICAgKGluZm8tPmF0dHJzW05MQkxfTUdNVF9BX0lQVjRNQVNLXSAmJgorCSAgICAgaW5mby0+YXR0cnNbTkxCTF9NR01UX0FfSVBWNk1BU0tdKSB8fAorCSAgICAoKGluZm8tPmF0dHJzW05MQkxfTUdNVF9BX0lQVjRBRERSXSAhPSBOVUxMKSBeCisJICAgICAoaW5mby0+YXR0cnNbTkxCTF9NR01UX0FfSVBWNE1BU0tdICE9IE5VTEwpKSB8fAorCSAgICAoKGluZm8tPmF0dHJzW05MQkxfTUdNVF9BX0lQVjZBRERSXSAhPSBOVUxMKSBeCisJICAgICAoaW5mby0+YXR0cnNbTkxCTF9NR01UX0FfSVBWNk1BU0tdICE9IE5VTEwpKSkKKwkJcmV0dXJuIC1FSU5WQUw7CiAKIAluZXRsYmxfbmV0bGlua19hdWRpdGluZm8oc2tiLCAmYXVkaXRfaW5mbyk7CiAKLQllbnRyeSA9IGt6YWxsb2Moc2l6ZW9mKCplbnRyeSksIEdGUF9LRVJORUwpOwotCWlmIChlbnRyeSA9PSBOVUxMKSB7Ci0JCXJldF92YWwgPSAtRU5PTUVNOwotCQlnb3RvIGFkZGRlZl9mYWlsdXJlOwotCX0KLQllbnRyeS0+dHlwZSA9IG5sYV9nZXRfdTMyKGluZm8tPmF0dHJzW05MQkxfTUdNVF9BX1BST1RPQ09MXSk7Ci0KLQlzd2l0Y2ggKGVudHJ5LT50eXBlKSB7Ci0JY2FzZSBORVRMQkxfTkxUWVBFX1VOTEFCRUxFRDoKLQkJcmV0X3ZhbCA9IG5ldGxibF9kb21oc2hfYWRkX2RlZmF1bHQoZW50cnksICZhdWRpdF9pbmZvKTsKLQkJYnJlYWs7Ci0JY2FzZSBORVRMQkxfTkxUWVBFX0NJUFNPVjQ6Ci0JCWlmICghaW5mby0+YXR0cnNbTkxCTF9NR01UX0FfQ1Y0RE9JXSkKLQkJCWdvdG8gYWRkZGVmX2ZhaWx1cmU7Ci0KLQkJdG1wX3ZhbCA9IG5sYV9nZXRfdTMyKGluZm8tPmF0dHJzW05MQkxfTUdNVF9BX0NWNERPSV0pOwotCQkvKiBXZSBzaG91bGQgYmUgaG9sZGluZyBhIHJjdV9yZWFkX2xvY2soKSBoZXJlIHdoaWxlIHdlIGhvbGQKLQkJICogdGhlIHJlc3VsdCBidXQgc2luY2UgdGhlIGVudHJ5IHdpbGwgYWx3YXlzIGJlIGRlbGV0ZWQgd2hlbgotCQkgKiB0aGUgQ0lQU08gRE9JIGlzIGRlbGV0ZWQgd2UgYXJlbid0IGdvaW5nIHRvIGtlZXAgdGhlCi0JCSAqIGxvY2suICovCi0JCXJjdV9yZWFkX2xvY2soKTsKLQkJZW50cnktPnR5cGVfZGVmLmNpcHNvdjQgPSBjaXBzb192NF9kb2lfZ2V0ZGVmKHRtcF92YWwpOwotCQlpZiAoZW50cnktPnR5cGVfZGVmLmNpcHNvdjQgPT0gTlVMTCkgewotCQkJcmN1X3JlYWRfdW5sb2NrKCk7Ci0JCQlnb3RvIGFkZGRlZl9mYWlsdXJlOwotCQl9Ci0JCXJldF92YWwgPSBuZXRsYmxfZG9taHNoX2FkZF9kZWZhdWx0KGVudHJ5LCAmYXVkaXRfaW5mbyk7Ci0JCXJjdV9yZWFkX3VubG9jaygpOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlnb3RvIGFkZGRlZl9mYWlsdXJlOwotCX0KLQlpZiAocmV0X3ZhbCAhPSAwKQotCQlnb3RvIGFkZGRlZl9mYWlsdXJlOwotCi0JcmV0dXJuIDA7Ci0KLWFkZGRlZl9mYWlsdXJlOgotCWtmcmVlKGVudHJ5KTsKLQlyZXR1cm4gcmV0X3ZhbDsKKwlyZXR1cm4gbmV0bGJsX21nbXRfYWRkX2NvbW1vbihpbmZvLCAmYXVkaXRfaW5mbyk7CiB9CiAKIC8qKgpAQCAtMzcxLDE5ICs1NzgsMTAgQEAKIAkJcmV0X3ZhbCA9IC1FTk9FTlQ7CiAJCWdvdG8gbGlzdGRlZl9mYWlsdXJlX2xvY2s7CiAJfQotCXJldF92YWwgPSBubGFfcHV0X3UzMihhbnNfc2tiLCBOTEJMX01HTVRfQV9QUk9UT0NPTCwgZW50cnktPnR5cGUpOwotCWlmIChyZXRfdmFsICE9IDApCi0JCWdvdG8gbGlzdGRlZl9mYWlsdXJlX2xvY2s7Ci0Jc3dpdGNoIChlbnRyeS0+dHlwZSkgewotCWNhc2UgTkVUTEJMX05MVFlQRV9DSVBTT1Y0OgotCQlyZXRfdmFsID0gbmxhX3B1dF91MzIoYW5zX3NrYiwKLQkJCQkgICAgICBOTEJMX01HTVRfQV9DVjRET0ksCi0JCQkJICAgICAgZW50cnktPnR5cGVfZGVmLmNpcHNvdjQtPmRvaSk7Ci0JCWlmIChyZXRfdmFsICE9IDApCi0JCQlnb3RvIGxpc3RkZWZfZmFpbHVyZV9sb2NrOwotCQlicmVhazsKLQl9CisJcmV0X3ZhbCA9IG5ldGxibF9tZ210X2xpc3RlbnRyeShhbnNfc2tiLCBlbnRyeSk7CiAJcmN1X3JlYWRfdW5sb2NrKCk7CisJaWYgKHJldF92YWwgIT0gMCkKKwkJZ290byBsaXN0ZGVmX2ZhaWx1cmU7CiAKIAlnZW5sbXNnX2VuZChhbnNfc2tiLCBkYXRhKTsKIAlyZXR1cm4gZ2VubG1zZ19yZXBseShhbnNfc2tiLCBpbmZvKTsKZGlmZiAtLWdpdCBhL25ldC9uZXRsYWJlbC9uZXRsYWJlbF9tZ210LmggYi9uZXQvbmV0bGFiZWwvbmV0bGFiZWxfbWdtdC5oCmluZGV4IGE0M2JmZjEuLjA1ZDk2NDMgMTAwNjQ0Ci0tLSBhL25ldC9uZXRsYWJlbC9uZXRsYWJlbF9tZ210LmgKKysrIGIvbmV0L25ldGxhYmVsL25ldGxhYmVsX21nbXQuaApAQCAtNDUsNiArNDUsMTYgQEAKICAqICAgICBOTEJMX01HTVRfQV9ET01BSU4KICAqICAgICBOTEJMX01HTVRfQV9QUk9UT0NPTAogICoKKyAqICAgSWYgSVB2NCBpcyBzcGVjaWZpZWQgdGhlIGZvbGxvd2luZyBhdHRyaWJ1dGVzIGFyZSByZXF1aXJlZDoKKyAqCisgKiAgICAgTkxCTF9NR01UX0FfSVBWNEFERFIKKyAqICAgICBOTEJMX01HTVRfQV9JUFY0TUFTSworICoKKyAqICAgSWYgSVB2NiBpcyBzcGVjaWZpZWQgdGhlIGZvbGxvd2luZyBhdHRyaWJ1dGVzIGFyZSByZXF1aXJlZDoKKyAqCisgKiAgICAgTkxCTF9NR01UX0FfSVBWNkFERFIKKyAqICAgICBOTEJMX01HTVRfQV9JUFY2TUFTSworICoKICAqICAgSWYgdXNpbmcgTkVUTEJMX05MVFlQRV9DSVBTT1Y0IHRoZSBmb2xsb3dpbmcgYXR0cmlidXRlcyBhcmUgcmVxdWlyZWQ6CiAgKgogICogICAgIE5MQkxfTUdNVF9BX0NWNERPSQpAQCAtNjgsMTMgKzc4LDI0IEBACiAgKiAgIFJlcXVpcmVkIGF0dHJpYnV0ZXM6CiAgKgogICogICAgIE5MQkxfTUdNVF9BX0RPTUFJTgorICoKKyAqICAgSWYgdGhlIElQIGFkZHJlc3Mgc2VsZWN0b3JzIGFyZSBub3QgdXNlZCB0aGUgZm9sbG93aW5nIGF0dHJpYnV0ZSBpcworICogICByZXF1aXJlZDoKKyAqCiAgKiAgICAgTkxCTF9NR01UX0FfUFJPVE9DT0wKICAqCi0gKiAgIElmIHVzaW5nIE5FVExCTF9OTFRZUEVfQ0lQU09WNCB0aGUgZm9sbG93aW5nIGF0dHJpYnV0ZXMgYXJlIHJlcXVpcmVkOgorICogICBJZiB0aGUgSVAgYWRkcmVzcyBzZWxlY3RvcnMgYXJlIHVzZWQgdGhlbiB0aGUgZm9sbG93aW5nIGF0dHJpdGJ1dGUgaXMKKyAqICAgcmVxdWlyZWQ6CisgKgorICogICAgIE5MQkxfTUdNVF9BX1NFTEVDVE9STElTVAorICoKKyAqICAgSWYgdGhlIG1hcHBpbmcgaXMgdXNpbmcgdGhlIE5FVExCTF9OTFRZUEVfQ0lQU09WNCB0eXBlIHRoZW4gdGhlIGZvbGxvd2luZworICogICBhdHRyaWJ1dGVzIGFyZSByZXF1aXJlZDoKICAqCiAgKiAgICAgTkxCTF9NR01UX0FfQ1Y0RE9JCiAgKgotICogICBJZiB1c2luZyBORVRMQkxfTkxUWVBFX1VOTEFCRUxFRCBubyBvdGhlciBhdHRyaWJ1dGVzIGFyZSByZXF1aXJlZC4KKyAqICAgSWYgdGhlIG1hcHBpbmcgaXMgdXNpbmcgdGhlIE5FVExCTF9OTFRZUEVfVU5MQUJFTEVEIHR5cGUgbm8gb3RoZXIKKyAqICAgYXR0cmlidXRlcyBhcmUgcmVxdWlyZWQuCiAgKgogICogbyBBRERERUY6CiAgKiAgIFNlbnQgYnkgYW4gYXBwbGljYXRpb24gdG8gc2V0IHRoZSBkZWZhdWx0IGRvbWFpbiBtYXBwaW5nIGZvciB0aGUgTmV0TGFiZWwKQEAgLTEwMCwxNSArMTIxLDIzIEBACiAgKiAgIGFwcGxpY2F0aW9uIHRoZXJlIGlzIG5vIHBheWxvYWQuICBPbiBzdWNjZXNzIHRoZSBrZXJuZWwgc2hvdWxkIHNlbmQgYQogICogICByZXNwb25zZSB1c2luZyB0aGUgZm9sbG93aW5nIGZvcm1hdC4KICAqCi0gKiAgIFJlcXVpcmVkIGF0dHJpYnV0ZXM6CisgKiAgIElmIHRoZSBJUCBhZGRyZXNzIHNlbGVjdG9ycyBhcmUgbm90IHVzZWQgdGhlIGZvbGxvd2luZyBhdHRyaWJ1dGUgaXMKKyAqICAgcmVxdWlyZWQ6CiAgKgogICogICAgIE5MQkxfTUdNVF9BX1BST1RPQ09MCiAgKgotICogICBJZiB1c2luZyBORVRMQkxfTkxUWVBFX0NJUFNPVjQgdGhlIGZvbGxvd2luZyBhdHRyaWJ1dGVzIGFyZSByZXF1aXJlZDoKKyAqICAgSWYgdGhlIElQIGFkZHJlc3Mgc2VsZWN0b3JzIGFyZSB1c2VkIHRoZW4gdGhlIGZvbGxvd2luZyBhdHRyaXRidXRlIGlzCisgKiAgIHJlcXVpcmVkOgorICoKKyAqICAgICBOTEJMX01HTVRfQV9TRUxFQ1RPUkxJU1QKKyAqCisgKiAgIElmIHRoZSBtYXBwaW5nIGlzIHVzaW5nIHRoZSBORVRMQkxfTkxUWVBFX0NJUFNPVjQgdHlwZSB0aGVuIHRoZSBmb2xsb3dpbmcKKyAqICAgYXR0cmlidXRlcyBhcmUgcmVxdWlyZWQ6CiAgKgogICogICAgIE5MQkxfTUdNVF9BX0NWNERPSQogICoKLSAqICAgSWYgdXNpbmcgTkVUTEJMX05MVFlQRV9VTkxBQkVMRUQgbm8gb3RoZXIgYXR0cmlidXRlcyBhcmUgcmVxdWlyZWQuCisgKiAgIElmIHRoZSBtYXBwaW5nIGlzIHVzaW5nIHRoZSBORVRMQkxfTkxUWVBFX1VOTEFCRUxFRCB0eXBlIG5vIG90aGVyCisgKiAgIGF0dHJpYnV0ZXMgYXJlIHJlcXVpcmVkLgogICoKICAqIG8gUFJPVE9DT0xTOgogICogICBTZW50IGJ5IGFuIGFwcGxpY2F0aW9uIHRvIHJlcXVlc3QgYSBsaXN0IG9mIGNvbmZpZ3VyZWQgTmV0TGFiZWwgcHJvdG9jb2xzCkBAIC0xNjIsNiArMTkxLDI2IEBACiAJTkxCTF9NR01UX0FfQ1Y0RE9JLAogCS8qIChOTEFfVTMyKQogCSAqIHRoZSBDSVBTT3Y0IERPSSB2YWx1ZSAqLworCU5MQkxfTUdNVF9BX0lQVjZBRERSLAorCS8qIChOTEFfQklOQVJZLCBzdHJ1Y3QgaW42X2FkZHIpCisJICogYW4gSVB2NiBhZGRyZXNzICovCisJTkxCTF9NR01UX0FfSVBWNk1BU0ssCisJLyogKE5MQV9CSU5BUlksIHN0cnVjdCBpbjZfYWRkcikKKwkgKiBhbiBJUHY2IGFkZHJlc3MgbWFzayAqLworCU5MQkxfTUdNVF9BX0lQVjRBRERSLAorCS8qIChOTEFfQklOQVJZLCBzdHJ1Y3QgaW5fYWRkcikKKwkgKiBhbiBJUHY0IGFkZHJlc3MgKi8KKwlOTEJMX01HTVRfQV9JUFY0TUFTSywKKwkvKiAoTkxBX0JJTkFSWSwgc3RydWN0IGluX2FkZHIpCisJICogYW5kIElQdjQgYWRkcmVzcyBtYXNrICovCisJTkxCTF9NR01UX0FfQUREUlNFTEVDVE9SLAorCS8qIChOTEFfTkVTVEVEKQorCSAqIGFuIElQIGFkZHJlc3Mgc2VsZWN0b3IsIG11c3QgY29udGFpbiBhbiBhZGRyZXNzLCBtYXNrLCBhbmQgcHJvdG9jb2wKKwkgKiBhdHRyaWJ1dGUgcGx1cyBhbnkgcHJvdG9jb2wgc3BlY2lmaWMgYXR0cmlidXRlcyAqLworCU5MQkxfTUdNVF9BX1NFTEVDVE9STElTVCwKKwkvKiAoTkxBX05FU1RFRCkKKwkgKiB0aGUgc2VsZWN0b3IgbGlzdCwgdGhlcmUgbXVzdCBiZSBhdCBsZWFzdCBvbmUKKwkgKiBOTEJMX01HTVRfQV9BRERSU0VMRUNUT1IgYXR0cmlidXRlICovCiAJX19OTEJMX01HTVRfQV9NQVgsCiB9OwogI2RlZmluZSBOTEJMX01HTVRfQV9NQVggKF9fTkxCTF9NR01UX0FfTUFYIC0gMSkKZGlmZiAtLWdpdCBhL25ldC9uZXRsYWJlbC9uZXRsYWJlbF91bmxhYmVsZWQuYyBiL25ldC9uZXRsYWJlbC9uZXRsYWJlbF91bmxhYmVsZWQuYwppbmRleCA5MjFjMTE4Li5lOGE1YzMyIDEwMDY0NAotLS0gYS9uZXQvbmV0bGFiZWwvbmV0bGFiZWxfdW5sYWJlbGVkLmMKKysrIGIvbmV0L25ldGxhYmVsL25ldGxhYmVsX3VubGFiZWxlZC5jCkBAIC0xMCw3ICsxMCw3IEBACiAgKi8KIAogLyoKLSAqIChjKSBDb3B5cmlnaHQgSGV3bGV0dC1QYWNrYXJkIERldmVsb3BtZW50IENvbXBhbnksIEwuUC4sIDIwMDYgLSAyMDA3CisgKiAoYykgQ29weXJpZ2h0IEhld2xldHQtUGFja2FyZCBEZXZlbG9wbWVudCBDb21wYW55LCBMLlAuLCAyMDA2IC0gMjAwOAogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyAgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKQEAgLTU0LDYgKzU0LDcgQEAKICNpbmNsdWRlIDxhc20vYXRvbWljLmg+CiAKICNpbmNsdWRlICJuZXRsYWJlbF91c2VyLmgiCisjaW5jbHVkZSAibmV0bGFiZWxfYWRkcmxpc3QuaCIKICNpbmNsdWRlICJuZXRsYWJlbF9kb21haW5oYXNoLmgiCiAjaW5jbHVkZSAibmV0bGFiZWxfdW5sYWJlbGVkLmgiCiAjaW5jbHVkZSAibmV0bGFiZWxfbWdtdC5oIgpAQCAtNzYsMjIgKzc3LDIwIEBACiAJc3RydWN0IGxpc3RfaGVhZCAqdGJsOwogCXUzMiBzaXplOwogfTsKKyNkZWZpbmUgbmV0bGJsX3VubGhzaF9hZGRyNF9lbnRyeShpdGVyKSBcCisJY29udGFpbmVyX29mKGl0ZXIsIHN0cnVjdCBuZXRsYmxfdW5saHNoX2FkZHI0LCBsaXN0KQogc3RydWN0IG5ldGxibF91bmxoc2hfYWRkcjQgewotCV9fYmUzMiBhZGRyOwotCV9fYmUzMiBtYXNrOwogCXUzMiBzZWNpZDsKIAotCXUzMiB2YWxpZDsKLQlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CisJc3RydWN0IG5ldGxibF9hZjRsaXN0IGxpc3Q7CiAJc3RydWN0IHJjdV9oZWFkIHJjdTsKIH07CisjZGVmaW5lIG5ldGxibF91bmxoc2hfYWRkcjZfZW50cnkoaXRlcikgXAorCWNvbnRhaW5lcl9vZihpdGVyLCBzdHJ1Y3QgbmV0bGJsX3VubGhzaF9hZGRyNiwgbGlzdCkKIHN0cnVjdCBuZXRsYmxfdW5saHNoX2FkZHI2IHsKLQlzdHJ1Y3QgaW42X2FkZHIgYWRkcjsKLQlzdHJ1Y3QgaW42X2FkZHIgbWFzazsKIAl1MzIgc2VjaWQ7CiAKLQl1MzIgdmFsaWQ7Ci0Jc3RydWN0IGxpc3RfaGVhZCBsaXN0OworCXN0cnVjdCBuZXRsYmxfYWY2bGlzdCBsaXN0OwogCXN0cnVjdCByY3VfaGVhZCByY3U7CiB9Owogc3RydWN0IG5ldGxibF91bmxoc2hfaWZhY2UgewpAQCAtMTQ3LDc2ICsxNDYsNiBAQAogfTsKIAogLyoKLSAqIEF1ZGl0IEhlbHBlciBGdW5jdGlvbnMKLSAqLwotCi0vKioKLSAqIG5ldGxibF91bmxhYmVsX2F1ZGl0X2FkZHI0IC0gQXVkaXQgYW4gSVB2NCBhZGRyZXNzCi0gKiBAYXVkaXRfYnVmOiBhdWRpdCBidWZmZXIKLSAqIEBkZXY6IG5ldHdvcmsgaW50ZXJmYWNlCi0gKiBAYWRkcjogSVAgYWRkcmVzcwotICogQG1hc2s6IElQIGFkZHJlc3MgbWFzawotICoKLSAqIERlc2NyaXB0aW9uOgotICogV3JpdGUgdGhlIElQdjQgYWRkcmVzcyBhbmQgYWRkcmVzcyBtYXNrLCBpZiBuZWNlc3NhcnksIHRvIEBhdWRpdF9idWYuCi0gKgotICovCi1zdGF0aWMgdm9pZCBuZXRsYmxfdW5sYWJlbF9hdWRpdF9hZGRyNChzdHJ1Y3QgYXVkaXRfYnVmZmVyICphdWRpdF9idWYsCi0JCQkJICAgICBjb25zdCBjaGFyICpkZXYsCi0JCQkJICAgICBfX2JlMzIgYWRkciwgX19iZTMyIG1hc2spCi17Ci0JdTMyIG1hc2tfdmFsID0gbnRvaGwobWFzayk7Ci0KLQlpZiAoZGV2ICE9IE5VTEwpCi0JCWF1ZGl0X2xvZ19mb3JtYXQoYXVkaXRfYnVmLCAiIG5ldGlmPSVzIiwgZGV2KTsKLQlhdWRpdF9sb2dfZm9ybWF0KGF1ZGl0X2J1ZiwgIiBzcmM9IiBOSVBRVUFEX0ZNVCwgTklQUVVBRChhZGRyKSk7Ci0JaWYgKG1hc2tfdmFsICE9IDB4ZmZmZmZmZmYpIHsKLQkJdTMyIG1hc2tfbGVuID0gMDsKLQkJd2hpbGUgKG1hc2tfdmFsID4gMCkgewotCQkJbWFza192YWwgPDw9IDE7Ci0JCQltYXNrX2xlbisrOwotCQl9Ci0JCWF1ZGl0X2xvZ19mb3JtYXQoYXVkaXRfYnVmLCAiIHNyY19wcmVmaXhsZW49JWQiLCBtYXNrX2xlbik7Ci0JfQotfQotCi0jaWYgZGVmaW5lZChDT05GSUdfSVBWNikgfHwgZGVmaW5lZChDT05GSUdfSVBWNl9NT0RVTEUpCi0vKioKLSAqIG5ldGxibF91bmxhYmVsX2F1ZGl0X2FkZHI2IC0gQXVkaXQgYW4gSVB2NiBhZGRyZXNzCi0gKiBAYXVkaXRfYnVmOiBhdWRpdCBidWZmZXIKLSAqIEBkZXY6IG5ldHdvcmsgaW50ZXJmYWNlCi0gKiBAYWRkcjogSVAgYWRkcmVzcwotICogQG1hc2s6IElQIGFkZHJlc3MgbWFzawotICoKLSAqIERlc2NyaXB0aW9uOgotICogV3JpdGUgdGhlIElQdjYgYWRkcmVzcyBhbmQgYWRkcmVzcyBtYXNrLCBpZiBuZWNlc3NhcnksIHRvIEBhdWRpdF9idWYuCi0gKgotICovCi1zdGF0aWMgdm9pZCBuZXRsYmxfdW5sYWJlbF9hdWRpdF9hZGRyNihzdHJ1Y3QgYXVkaXRfYnVmZmVyICphdWRpdF9idWYsCi0JCQkJICAgICBjb25zdCBjaGFyICpkZXYsCi0JCQkJICAgICBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmFkZHIsCi0JCQkJICAgICBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKm1hc2spCi17Ci0JaWYgKGRldiAhPSBOVUxMKQotCQlhdWRpdF9sb2dfZm9ybWF0KGF1ZGl0X2J1ZiwgIiBuZXRpZj0lcyIsIGRldik7Ci0JYXVkaXRfbG9nX2Zvcm1hdChhdWRpdF9idWYsICIgc3JjPSIgTklQNl9GTVQsIE5JUDYoKmFkZHIpKTsKLQlpZiAobnRvaGwobWFzay0+czZfYWRkcjMyWzNdKSAhPSAweGZmZmZmZmZmKSB7Ci0JCXUzMiBtYXNrX2xlbiA9IDA7Ci0JCXUzMiBtYXNrX3ZhbDsKLQkJaW50IGl0ZXIgPSAtMTsKLQkJd2hpbGUgKG50b2hsKG1hc2stPnM2X2FkZHIzMlsrK2l0ZXJdKSA9PSAweGZmZmZmZmZmKQotCQkJbWFza19sZW4gKz0gMzI7Ci0JCW1hc2tfdmFsID0gbnRvaGwobWFzay0+czZfYWRkcjMyW2l0ZXJdKTsKLQkJd2hpbGUgKG1hc2tfdmFsID4gMCkgewotCQkJbWFza192YWwgPDw9IDE7Ci0JCQltYXNrX2xlbisrOwotCQl9Ci0JCWF1ZGl0X2xvZ19mb3JtYXQoYXVkaXRfYnVmLCAiIHNyY19wcmVmaXhsZW49JWQiLCBtYXNrX2xlbik7Ci0JfQotfQotI2VuZGlmIC8qIElQdjYgKi8KLQotLyoKICAqIFVubGFiZWxlZCBDb25uZWN0aW9uIEhhc2ggVGFibGUgRnVuY3Rpb25zCiAgKi8KIApAQCAtMjc0LDI2ICsyMDMsMjggQEAKIHN0YXRpYyB2b2lkIG5ldGxibF91bmxoc2hfZnJlZV9pZmFjZShzdHJ1Y3QgcmN1X2hlYWQgKmVudHJ5KQogewogCXN0cnVjdCBuZXRsYmxfdW5saHNoX2lmYWNlICppZmFjZTsKLQlzdHJ1Y3QgbmV0bGJsX3VubGhzaF9hZGRyNCAqaXRlcjQ7Ci0Jc3RydWN0IG5ldGxibF91bmxoc2hfYWRkcjQgKnRtcDQ7Ci0Jc3RydWN0IG5ldGxibF91bmxoc2hfYWRkcjYgKml0ZXI2OwotCXN0cnVjdCBuZXRsYmxfdW5saHNoX2FkZHI2ICp0bXA2OworCXN0cnVjdCBuZXRsYmxfYWY0bGlzdCAqaXRlcjQ7CisJc3RydWN0IG5ldGxibF9hZjRsaXN0ICp0bXA0OworI2lmIGRlZmluZWQoQ09ORklHX0lQVjYpIHx8IGRlZmluZWQoQ09ORklHX0lQVjZfTU9EVUxFKQorCXN0cnVjdCBuZXRsYmxfYWY2bGlzdCAqaXRlcjY7CisJc3RydWN0IG5ldGxibF9hZjZsaXN0ICp0bXA2OworI2VuZGlmIC8qIElQdjYgKi8KIAogCWlmYWNlID0gY29udGFpbmVyX29mKGVudHJ5LCBzdHJ1Y3QgbmV0bGJsX3VubGhzaF9pZmFjZSwgcmN1KTsKIAogCS8qIG5vIG5lZWQgZm9yIGxvY2tzIGhlcmUgc2luY2Ugd2UgYXJlIHRoZSBvbmx5IG9uZSB3aXRoIGFjY2VzcyB0byB0aGlzCiAJICogc3RydWN0dXJlICovCiAKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoaXRlcjQsIHRtcDQsICZpZmFjZS0+YWRkcjRfbGlzdCwgbGlzdCkKLQkJaWYgKGl0ZXI0LT52YWxpZCkgewotCQkJbGlzdF9kZWxfcmN1KCZpdGVyNC0+bGlzdCk7Ci0JCQlrZnJlZShpdGVyNCk7Ci0JCX0KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoaXRlcjYsIHRtcDYsICZpZmFjZS0+YWRkcjZfbGlzdCwgbGlzdCkKLQkJaWYgKGl0ZXI2LT52YWxpZCkgewotCQkJbGlzdF9kZWxfcmN1KCZpdGVyNi0+bGlzdCk7Ci0JCQlrZnJlZShpdGVyNik7Ci0JCX0KKwluZXRsYmxfYWY0bGlzdF9mb3JlYWNoX3NhZmUoaXRlcjQsIHRtcDQsICZpZmFjZS0+YWRkcjRfbGlzdCkgeworCQluZXRsYmxfYWY0bGlzdF9yZW1vdmVfZW50cnkoaXRlcjQpOworCQlrZnJlZShuZXRsYmxfdW5saHNoX2FkZHI0X2VudHJ5KGl0ZXI0KSk7CisJfQorI2lmIGRlZmluZWQoQ09ORklHX0lQVjYpIHx8IGRlZmluZWQoQ09ORklHX0lQVjZfTU9EVUxFKQorCW5ldGxibF9hZjZsaXN0X2ZvcmVhY2hfc2FmZShpdGVyNiwgdG1wNiwgJmlmYWNlLT5hZGRyNl9saXN0KSB7CisJCW5ldGxibF9hZjZsaXN0X3JlbW92ZV9lbnRyeShpdGVyNik7CisJCWtmcmVlKG5ldGxibF91bmxoc2hfYWRkcjZfZW50cnkoaXRlcjYpKTsKKwl9CisjZW5kaWYgLyogSVB2NiAqLwogCWtmcmVlKGlmYWNlKTsKIH0KIApAQCAtMzE2LDU5ICsyNDcsNiBAQAogfQogCiAvKioKLSAqIG5ldGxibF91bmxoc2hfc2VhcmNoX2FkZHI0IC0gU2VhcmNoIGZvciBhIG1hdGNoaW5nIElQdjQgYWRkcmVzcyBlbnRyeQotICogQGFkZHI6IElQdjQgYWRkcmVzcwotICogQGlmYWNlOiB0aGUgbmV0d29yayBpbnRlcmZhY2UgZW50cnkKLSAqCi0gKiBEZXNjcmlwdGlvbjoKLSAqIFNlYXJjaGVzIHRoZSBJUHY0IGFkZHJlc3MgbGlzdCBvZiB0aGUgbmV0d29yayBpbnRlcmZhY2Ugc3BlY2lmaWVkIGJ5IEBpZmFjZS4KLSAqIElmIGEgbWF0Y2hpbmcgYWRkcmVzcyBlbnRyeSBpcyBmb3VuZCBpdCBpcyByZXR1cm5lZCwgb3RoZXJ3aXNlIE5VTEwgaXMKLSAqIHJldHVybmVkLiAgVGhlIGNhbGxlciBpcyByZXNwb25zaWJsZSBmb3IgY2FsbGluZyB0aGUgcmN1X3JlYWRfW3VuXWxvY2soKQotICogZnVuY3Rpb25zLgotICoKLSAqLwotc3RhdGljIHN0cnVjdCBuZXRsYmxfdW5saHNoX2FkZHI0ICpuZXRsYmxfdW5saHNoX3NlYXJjaF9hZGRyNCgKLQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19iZTMyIGFkZHIsCi0JICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBuZXRsYmxfdW5saHNoX2lmYWNlICppZmFjZSkKLXsKLQlzdHJ1Y3QgbmV0bGJsX3VubGhzaF9hZGRyNCAqaXRlcjsKLQotCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGl0ZXIsICZpZmFjZS0+YWRkcjRfbGlzdCwgbGlzdCkKLQkJaWYgKGl0ZXItPnZhbGlkICYmIChhZGRyICYgaXRlci0+bWFzaykgPT0gaXRlci0+YWRkcikKLQkJCXJldHVybiBpdGVyOwotCi0JcmV0dXJuIE5VTEw7Ci19Ci0KLSNpZiBkZWZpbmVkKENPTkZJR19JUFY2KSB8fCBkZWZpbmVkKENPTkZJR19JUFY2X01PRFVMRSkKLS8qKgotICogbmV0bGJsX3VubGhzaF9zZWFyY2hfYWRkcjYgLSBTZWFyY2ggZm9yIGEgbWF0Y2hpbmcgSVB2NiBhZGRyZXNzIGVudHJ5Ci0gKiBAYWRkcjogSVB2NiBhZGRyZXNzCi0gKiBAaWZhY2U6IHRoZSBuZXR3b3JrIGludGVyZmFjZSBlbnRyeQotICoKLSAqIERlc2NyaXB0aW9uOgotICogU2VhcmNoZXMgdGhlIElQdjYgYWRkcmVzcyBsaXN0IG9mIHRoZSBuZXR3b3JrIGludGVyZmFjZSBzcGVjaWZpZWQgYnkgQGlmYWNlLgotICogSWYgYSBtYXRjaGluZyBhZGRyZXNzIGVudHJ5IGlzIGZvdW5kIGl0IGlzIHJldHVybmVkLCBvdGhlcndpc2UgTlVMTCBpcwotICogcmV0dXJuZWQuICBUaGUgY2FsbGVyIGlzIHJlc3BvbnNpYmxlIGZvciBjYWxsaW5nIHRoZSByY3VfcmVhZF9bdW5dbG9jaygpCi0gKiBmdW5jdGlvbnMuCi0gKgotICovCi1zdGF0aWMgc3RydWN0IG5ldGxibF91bmxoc2hfYWRkcjYgKm5ldGxibF91bmxoc2hfc2VhcmNoX2FkZHI2KAotCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmFkZHIsCi0JICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBuZXRsYmxfdW5saHNoX2lmYWNlICppZmFjZSkKLXsKLQlzdHJ1Y3QgbmV0bGJsX3VubGhzaF9hZGRyNiAqaXRlcjsKLQotCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGl0ZXIsICZpZmFjZS0+YWRkcjZfbGlzdCwgbGlzdCkKLQkJaWYgKGl0ZXItPnZhbGlkICYmCi0JCSAgICBpcHY2X21hc2tlZF9hZGRyX2NtcCgmaXRlci0+YWRkciwgJml0ZXItPm1hc2ssIGFkZHIpID09IDApCi0JCXJldHVybiBpdGVyOwotCi0JcmV0dXJuIE5VTEw7Ci19Ci0jZW5kaWYgLyogSVB2NiAqLwotCi0vKioKICAqIG5ldGxibF91bmxoc2hfc2VhcmNoX2lmYWNlIC0gU2VhcmNoIGZvciBhIG1hdGNoaW5nIGludGVyZmFjZSBlbnRyeQogICogQGlmaW5kZXg6IHRoZSBuZXR3b3JrIGludGVyZmFjZQogICoKQEAgLTM4MSwxMiArMjU5LDEyIEBACiBzdGF0aWMgc3RydWN0IG5ldGxibF91bmxoc2hfaWZhY2UgKm5ldGxibF91bmxoc2hfc2VhcmNoX2lmYWNlKGludCBpZmluZGV4KQogewogCXUzMiBia3Q7CisJc3RydWN0IGxpc3RfaGVhZCAqYmt0X2xpc3Q7CiAJc3RydWN0IG5ldGxibF91bmxoc2hfaWZhY2UgKml0ZXI7CiAKIAlia3QgPSBuZXRsYmxfdW5saHNoX2hhc2goaWZpbmRleCk7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoaXRlciwKLQkJCQkmcmN1X2RlcmVmZXJlbmNlKG5ldGxibF91bmxoc2gpLT50YmxbYmt0XSwKLQkJCQlsaXN0KQorCWJrdF9saXN0ID0gJnJjdV9kZXJlZmVyZW5jZShuZXRsYmxfdW5saHNoKS0+dGJsW2JrdF07CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoaXRlciwgYmt0X2xpc3QsIGxpc3QpCiAJCWlmIChpdGVyLT52YWxpZCAmJiBpdGVyLT5pZmluZGV4ID09IGlmaW5kZXgpCiAJCQlyZXR1cm4gaXRlcjsKIApAQCAtNDM5LDQzICszMTcsMjYgQEAKIAkJCQkgICBjb25zdCBzdHJ1Y3QgaW5fYWRkciAqbWFzaywKIAkJCQkgICB1MzIgc2VjaWQpCiB7CisJaW50IHJldF92YWw7CiAJc3RydWN0IG5ldGxibF91bmxoc2hfYWRkcjQgKmVudHJ5OwotCXN0cnVjdCBuZXRsYmxfdW5saHNoX2FkZHI0ICppdGVyOwogCiAJZW50cnkgPSBremFsbG9jKHNpemVvZigqZW50cnkpLCBHRlBfQVRPTUlDKTsKIAlpZiAoZW50cnkgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQllbnRyeS0+YWRkciA9IGFkZHItPnNfYWRkciAmIG1hc2stPnNfYWRkcjsKLQllbnRyeS0+bWFzayA9IG1hc2stPnNfYWRkcjsKLQllbnRyeS0+c2VjaWQgPSBzZWNpZDsKLQllbnRyeS0+dmFsaWQgPSAxOworCWVudHJ5LT5saXN0LmFkZHIgPSBhZGRyLT5zX2FkZHIgJiBtYXNrLT5zX2FkZHI7CisJZW50cnktPmxpc3QubWFzayA9IG1hc2stPnNfYWRkcjsKKwllbnRyeS0+bGlzdC52YWxpZCA9IDE7CiAJSU5JVF9SQ1VfSEVBRCgmZW50cnktPnJjdSk7CisJZW50cnktPnNlY2lkID0gc2VjaWQ7CiAKIAlzcGluX2xvY2soJm5ldGxibF91bmxoc2hfbG9jayk7Ci0JaXRlciA9IG5ldGxibF91bmxoc2hfc2VhcmNoX2FkZHI0KGVudHJ5LT5hZGRyLCBpZmFjZSk7Ci0JaWYgKGl0ZXIgIT0gTlVMTCAmJgotCSAgICBpdGVyLT5hZGRyID09IGFkZHItPnNfYWRkciAmJiBpdGVyLT5tYXNrID09IG1hc2stPnNfYWRkcikgewotCQlzcGluX3VubG9jaygmbmV0bGJsX3VubGhzaF9sb2NrKTsKLQkJa2ZyZWUoZW50cnkpOwotCQlyZXR1cm4gLUVFWElTVDsKLQl9Ci0JLyogaW4gb3JkZXIgdG8gc3BlZWQgdXAgYWRkcmVzcyBzZWFyY2hlcyB0aHJvdWdoIHRoZSBsaXN0ICh0aGUgY29tbW9uCi0JICogY2FzZSkgd2UgbmVlZCB0byBrZWVwIHRoZSBsaXN0IGluIG9yZGVyIGJhc2VkIG9uIHRoZSBzaXplIG9mIHRoZQotCSAqIGFkZHJlc3MgbWFzayBzdWNoIHRoYXQgdGhlIGVudHJ5IHdpdGggdGhlIHdpZGVzdCBtYXNrIChzbWFsbGVzdAotCSAqIG51bWVyaWNhbCB2YWx1ZSkgYXBwZWFycyBmaXJzdCBpbiB0aGUgbGlzdCAqLwotCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGl0ZXIsICZpZmFjZS0+YWRkcjRfbGlzdCwgbGlzdCkKLQkJaWYgKGl0ZXItPnZhbGlkICYmCi0JCSAgICBudG9obChlbnRyeS0+bWFzaykgPiBudG9obChpdGVyLT5tYXNrKSkgewotCQkJX19saXN0X2FkZF9yY3UoJmVudHJ5LT5saXN0LAotCQkJCSAgICAgICBpdGVyLT5saXN0LnByZXYsCi0JCQkJICAgICAgICZpdGVyLT5saXN0KTsKLQkJCXNwaW5fdW5sb2NrKCZuZXRsYmxfdW5saHNoX2xvY2spOwotCQkJcmV0dXJuIDA7Ci0JCX0KLQlsaXN0X2FkZF90YWlsX3JjdSgmZW50cnktPmxpc3QsICZpZmFjZS0+YWRkcjRfbGlzdCk7CisJcmV0X3ZhbCA9IG5ldGxibF9hZjRsaXN0X2FkZCgmZW50cnktPmxpc3QsICZpZmFjZS0+YWRkcjRfbGlzdCk7CiAJc3Bpbl91bmxvY2soJm5ldGxibF91bmxoc2hfbG9jayk7Ci0JcmV0dXJuIDA7CisKKwlpZiAocmV0X3ZhbCAhPSAwKQorCQlrZnJlZShlbnRyeSk7CisJcmV0dXJuIHJldF92YWw7CiB9CiAKICNpZiBkZWZpbmVkKENPTkZJR19JUFY2KSB8fCBkZWZpbmVkKENPTkZJR19JUFY2X01PRFVMRSkKQEAgLTQ5OCw0NyArMzU5LDI5IEBACiAJCQkJICAgY29uc3Qgc3RydWN0IGluNl9hZGRyICptYXNrLAogCQkJCSAgIHUzMiBzZWNpZCkKIHsKKwlpbnQgcmV0X3ZhbDsKIAlzdHJ1Y3QgbmV0bGJsX3VubGhzaF9hZGRyNiAqZW50cnk7Ci0Jc3RydWN0IG5ldGxibF91bmxoc2hfYWRkcjYgKml0ZXI7CiAKIAllbnRyeSA9IGt6YWxsb2Moc2l6ZW9mKCplbnRyeSksIEdGUF9BVE9NSUMpOwogCWlmIChlbnRyeSA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCWlwdjZfYWRkcl9jb3B5KCZlbnRyeS0+YWRkciwgYWRkcik7Ci0JZW50cnktPmFkZHIuczZfYWRkcjMyWzBdICY9IG1hc2stPnM2X2FkZHIzMlswXTsKLQllbnRyeS0+YWRkci5zNl9hZGRyMzJbMV0gJj0gbWFzay0+czZfYWRkcjMyWzFdOwotCWVudHJ5LT5hZGRyLnM2X2FkZHIzMlsyXSAmPSBtYXNrLT5zNl9hZGRyMzJbMl07Ci0JZW50cnktPmFkZHIuczZfYWRkcjMyWzNdICY9IG1hc2stPnM2X2FkZHIzMlszXTsKLQlpcHY2X2FkZHJfY29weSgmZW50cnktPm1hc2ssIG1hc2spOwotCWVudHJ5LT5zZWNpZCA9IHNlY2lkOwotCWVudHJ5LT52YWxpZCA9IDE7CisJaXB2Nl9hZGRyX2NvcHkoJmVudHJ5LT5saXN0LmFkZHIsIGFkZHIpOworCWVudHJ5LT5saXN0LmFkZHIuczZfYWRkcjMyWzBdICY9IG1hc2stPnM2X2FkZHIzMlswXTsKKwllbnRyeS0+bGlzdC5hZGRyLnM2X2FkZHIzMlsxXSAmPSBtYXNrLT5zNl9hZGRyMzJbMV07CisJZW50cnktPmxpc3QuYWRkci5zNl9hZGRyMzJbMl0gJj0gbWFzay0+czZfYWRkcjMyWzJdOworCWVudHJ5LT5saXN0LmFkZHIuczZfYWRkcjMyWzNdICY9IG1hc2stPnM2X2FkZHIzMlszXTsKKwlpcHY2X2FkZHJfY29weSgmZW50cnktPmxpc3QubWFzaywgbWFzayk7CisJZW50cnktPmxpc3QudmFsaWQgPSAxOwogCUlOSVRfUkNVX0hFQUQoJmVudHJ5LT5yY3UpOworCWVudHJ5LT5zZWNpZCA9IHNlY2lkOwogCiAJc3Bpbl9sb2NrKCZuZXRsYmxfdW5saHNoX2xvY2spOwotCWl0ZXIgPSBuZXRsYmxfdW5saHNoX3NlYXJjaF9hZGRyNigmZW50cnktPmFkZHIsIGlmYWNlKTsKLQlpZiAoaXRlciAhPSBOVUxMICYmCi0JICAgIChpcHY2X2FkZHJfZXF1YWwoJml0ZXItPmFkZHIsIGFkZHIpICYmCi0JICAgICBpcHY2X2FkZHJfZXF1YWwoJml0ZXItPm1hc2ssIG1hc2spKSkgewotCQlzcGluX3VubG9jaygmbmV0bGJsX3VubGhzaF9sb2NrKTsKLQkJa2ZyZWUoZW50cnkpOwotCQlyZXR1cm4gLUVFWElTVDsKLQl9Ci0JLyogaW4gb3JkZXIgdG8gc3BlZWQgdXAgYWRkcmVzcyBzZWFyY2hlcyB0aHJvdWdoIHRoZSBsaXN0ICh0aGUgY29tbW9uCi0JICogY2FzZSkgd2UgbmVlZCB0byBrZWVwIHRoZSBsaXN0IGluIG9yZGVyIGJhc2VkIG9uIHRoZSBzaXplIG9mIHRoZQotCSAqIGFkZHJlc3MgbWFzayBzdWNoIHRoYXQgdGhlIGVudHJ5IHdpdGggdGhlIHdpZGVzdCBtYXNrIChzbWFsbGVzdAotCSAqIG51bWVyaWNhbCB2YWx1ZSkgYXBwZWFycyBmaXJzdCBpbiB0aGUgbGlzdCAqLwotCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGl0ZXIsICZpZmFjZS0+YWRkcjZfbGlzdCwgbGlzdCkKLQkJaWYgKGl0ZXItPnZhbGlkICYmCi0JCSAgICBpcHY2X2FkZHJfY21wKCZlbnRyeS0+bWFzaywgJml0ZXItPm1hc2spID4gMCkgewotCQkJX19saXN0X2FkZF9yY3UoJmVudHJ5LT5saXN0LAotCQkJCSAgICAgICBpdGVyLT5saXN0LnByZXYsCi0JCQkJICAgICAgICZpdGVyLT5saXN0KTsKLQkJCXNwaW5fdW5sb2NrKCZuZXRsYmxfdW5saHNoX2xvY2spOwotCQkJcmV0dXJuIDA7Ci0JCX0KLQlsaXN0X2FkZF90YWlsX3JjdSgmZW50cnktPmxpc3QsICZpZmFjZS0+YWRkcjZfbGlzdCk7CisJcmV0X3ZhbCA9IG5ldGxibF9hZjZsaXN0X2FkZCgmZW50cnktPmxpc3QsICZpZmFjZS0+YWRkcjZfbGlzdCk7CiAJc3Bpbl91bmxvY2soJm5ldGxibF91bmxoc2hfbG9jayk7CisKKwlpZiAocmV0X3ZhbCAhPSAwKQorCQlrZnJlZShlbnRyeSk7CiAJcmV0dXJuIDA7CiB9CiAjZW5kaWYgLyogSVB2NiAqLwpAQCAtNjU4LDEwICs1MDEsMTAgQEAKIAkJbWFzazQgPSAoc3RydWN0IGluX2FkZHIgKiltYXNrOwogCQlyZXRfdmFsID0gbmV0bGJsX3VubGhzaF9hZGRfYWRkcjQoaWZhY2UsIGFkZHI0LCBtYXNrNCwgc2VjaWQpOwogCQlpZiAoYXVkaXRfYnVmICE9IE5VTEwpCi0JCQluZXRsYmxfdW5sYWJlbF9hdWRpdF9hZGRyNChhdWRpdF9idWYsCi0JCQkJCQkgICBkZXZfbmFtZSwKLQkJCQkJCSAgIGFkZHI0LT5zX2FkZHIsCi0JCQkJCQkgICBtYXNrNC0+c19hZGRyKTsKKwkJCW5ldGxibF9hZjRsaXN0X2F1ZGl0X2FkZHIoYXVkaXRfYnVmLCAxLAorCQkJCQkJICBkZXZfbmFtZSwKKwkJCQkJCSAgYWRkcjQtPnNfYWRkciwKKwkJCQkJCSAgbWFzazQtPnNfYWRkcik7CiAJCWJyZWFrOwogCX0KICNpZiBkZWZpbmVkKENPTkZJR19JUFY2KSB8fCBkZWZpbmVkKENPTkZJR19JUFY2X01PRFVMRSkKQEAgLTY3Miw5ICs1MTUsOSBAQAogCQltYXNrNiA9IChzdHJ1Y3QgaW42X2FkZHIgKiltYXNrOwogCQlyZXRfdmFsID0gbmV0bGJsX3VubGhzaF9hZGRfYWRkcjYoaWZhY2UsIGFkZHI2LCBtYXNrNiwgc2VjaWQpOwogCQlpZiAoYXVkaXRfYnVmICE9IE5VTEwpCi0JCQluZXRsYmxfdW5sYWJlbF9hdWRpdF9hZGRyNihhdWRpdF9idWYsCi0JCQkJCQkgICBkZXZfbmFtZSwKLQkJCQkJCSAgIGFkZHI2LCBtYXNrNik7CisJCQluZXRsYmxfYWY2bGlzdF9hdWRpdF9hZGRyKGF1ZGl0X2J1ZiwgMSwKKwkJCQkJCSAgZGV2X25hbWUsCisJCQkJCQkgIGFkZHI2LCBtYXNrNik7CiAJCWJyZWFrOwogCX0KICNlbmRpZiAvKiBJUHY2ICovCkBAIC03MTksMzUgKzU2MiwzNCBAQAogCQkJCSAgICAgIGNvbnN0IHN0cnVjdCBpbl9hZGRyICptYXNrLAogCQkJCSAgICAgIHN0cnVjdCBuZXRsYmxfYXVkaXQgKmF1ZGl0X2luZm8pCiB7Ci0JaW50IHJldF92YWwgPSAtRU5PRU5UOworCWludCByZXRfdmFsID0gMDsKKwlzdHJ1Y3QgbmV0bGJsX2FmNGxpc3QgKmxpc3RfZW50cnk7CiAJc3RydWN0IG5ldGxibF91bmxoc2hfYWRkcjQgKmVudHJ5OwotCXN0cnVjdCBhdWRpdF9idWZmZXIgKmF1ZGl0X2J1ZiA9IE5VTEw7CisJc3RydWN0IGF1ZGl0X2J1ZmZlciAqYXVkaXRfYnVmOwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7Ci0JY2hhciAqc2VjY3R4ID0gTlVMTDsKKwljaGFyICpzZWNjdHg7CiAJdTMyIHNlY2N0eF9sZW47CiAKIAlzcGluX2xvY2soJm5ldGxibF91bmxoc2hfbG9jayk7Ci0JZW50cnkgPSBuZXRsYmxfdW5saHNoX3NlYXJjaF9hZGRyNChhZGRyLT5zX2FkZHIsIGlmYWNlKTsKLQlpZiAoZW50cnkgIT0gTlVMTCAmJgotCSAgICBlbnRyeS0+YWRkciA9PSBhZGRyLT5zX2FkZHIgJiYgZW50cnktPm1hc2sgPT0gbWFzay0+c19hZGRyKSB7Ci0JCWVudHJ5LT52YWxpZCA9IDA7Ci0JCWxpc3RfZGVsX3JjdSgmZW50cnktPmxpc3QpOwotCQlyZXRfdmFsID0gMDsKLQl9CisJbGlzdF9lbnRyeSA9IG5ldGxibF9hZjRsaXN0X3JlbW92ZShhZGRyLT5zX2FkZHIsIG1hc2stPnNfYWRkciwKKwkJCQkJICAgJmlmYWNlLT5hZGRyNF9saXN0KTsKIAlzcGluX3VubG9jaygmbmV0bGJsX3VubGhzaF9sb2NrKTsKKwlpZiAobGlzdF9lbnRyeSA9PSBOVUxMKQorCQlyZXRfdmFsID0gLUVOT0VOVDsKKwllbnRyeSA9IG5ldGxibF91bmxoc2hfYWRkcjRfZW50cnkobGlzdF9lbnRyeSk7CiAKIAlhdWRpdF9idWYgPSBuZXRsYmxfYXVkaXRfc3RhcnRfY29tbW9uKEFVRElUX01BQ19VTkxCTF9TVENERUwsCiAJCQkJCSAgICAgIGF1ZGl0X2luZm8pOwogCWlmIChhdWRpdF9idWYgIT0gTlVMTCkgewogCQlkZXYgPSBkZXZfZ2V0X2J5X2luZGV4KG5ldCwgaWZhY2UtPmlmaW5kZXgpOwotCQluZXRsYmxfdW5sYWJlbF9hdWRpdF9hZGRyNChhdWRpdF9idWYsCi0JCQkJCSAgIChkZXYgIT0gTlVMTCA/IGRldi0+bmFtZSA6IE5VTEwpLAotCQkJCQkgICBlbnRyeS0+YWRkciwgZW50cnktPm1hc2spOworCQluZXRsYmxfYWY0bGlzdF9hdWRpdF9hZGRyKGF1ZGl0X2J1ZiwgMSwKKwkJCQkJICAoZGV2ICE9IE5VTEwgPyBkZXYtPm5hbWUgOiBOVUxMKSwKKwkJCQkJICBhZGRyLT5zX2FkZHIsIG1hc2stPnNfYWRkcik7CiAJCWlmIChkZXYgIT0gTlVMTCkKIAkJCWRldl9wdXQoZGV2KTsKLQkJaWYgKHNlY3VyaXR5X3NlY2lkX3RvX3NlY2N0eChlbnRyeS0+c2VjaWQsCi0JCQkJCSAgICAgJnNlY2N0eCwKLQkJCQkJICAgICAmc2VjY3R4X2xlbikgPT0gMCkgeworCQlpZiAoZW50cnkgJiYgc2VjdXJpdHlfc2VjaWRfdG9fc2VjY3R4KGVudHJ5LT5zZWNpZCwKKwkJCQkJCSAgICAgICZzZWNjdHgsCisJCQkJCQkgICAgICAmc2VjY3R4X2xlbikgPT0gMCkgewogCQkJYXVkaXRfbG9nX2Zvcm1hdChhdWRpdF9idWYsICIgc2VjX29iaj0lcyIsIHNlY2N0eCk7CiAJCQlzZWN1cml0eV9yZWxlYXNlX3NlY2N0eChzZWNjdHgsIHNlY2N0eF9sZW4pOwogCQl9CkBAIC03ODEsMzYgKzYyMywzMyBAQAogCQkJCSAgICAgIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqbWFzaywKIAkJCQkgICAgICBzdHJ1Y3QgbmV0bGJsX2F1ZGl0ICphdWRpdF9pbmZvKQogewotCWludCByZXRfdmFsID0gLUVOT0VOVDsKKwlpbnQgcmV0X3ZhbCA9IDA7CisJc3RydWN0IG5ldGxibF9hZjZsaXN0ICpsaXN0X2VudHJ5OwogCXN0cnVjdCBuZXRsYmxfdW5saHNoX2FkZHI2ICplbnRyeTsKLQlzdHJ1Y3QgYXVkaXRfYnVmZmVyICphdWRpdF9idWYgPSBOVUxMOworCXN0cnVjdCBhdWRpdF9idWZmZXIgKmF1ZGl0X2J1ZjsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwotCWNoYXIgKnNlY2N0eCA9IE5VTEw7CisJY2hhciAqc2VjY3R4OwogCXUzMiBzZWNjdHhfbGVuOwogCiAJc3Bpbl9sb2NrKCZuZXRsYmxfdW5saHNoX2xvY2spOwotCWVudHJ5ID0gbmV0bGJsX3VubGhzaF9zZWFyY2hfYWRkcjYoYWRkciwgaWZhY2UpOwotCWlmIChlbnRyeSAhPSBOVUxMICYmCi0JICAgIChpcHY2X2FkZHJfZXF1YWwoJmVudHJ5LT5hZGRyLCBhZGRyKSAmJgotCSAgICAgaXB2Nl9hZGRyX2VxdWFsKCZlbnRyeS0+bWFzaywgbWFzaykpKSB7Ci0JCWVudHJ5LT52YWxpZCA9IDA7Ci0JCWxpc3RfZGVsX3JjdSgmZW50cnktPmxpc3QpOwotCQlyZXRfdmFsID0gMDsKLQl9CisJbGlzdF9lbnRyeSA9IG5ldGxibF9hZjZsaXN0X3JlbW92ZShhZGRyLCBtYXNrLCAmaWZhY2UtPmFkZHI2X2xpc3QpOwogCXNwaW5fdW5sb2NrKCZuZXRsYmxfdW5saHNoX2xvY2spOworCWlmIChsaXN0X2VudHJ5ID09IE5VTEwpCisJCXJldF92YWwgPSAtRU5PRU5UOworCWVudHJ5ID0gbmV0bGJsX3VubGhzaF9hZGRyNl9lbnRyeShsaXN0X2VudHJ5KTsKIAogCWF1ZGl0X2J1ZiA9IG5ldGxibF9hdWRpdF9zdGFydF9jb21tb24oQVVESVRfTUFDX1VOTEJMX1NUQ0RFTCwKIAkJCQkJICAgICAgYXVkaXRfaW5mbyk7CiAJaWYgKGF1ZGl0X2J1ZiAhPSBOVUxMKSB7CiAJCWRldiA9IGRldl9nZXRfYnlfaW5kZXgobmV0LCBpZmFjZS0+aWZpbmRleCk7Ci0JCW5ldGxibF91bmxhYmVsX2F1ZGl0X2FkZHI2KGF1ZGl0X2J1ZiwKLQkJCQkJICAgKGRldiAhPSBOVUxMID8gZGV2LT5uYW1lIDogTlVMTCksCi0JCQkJCSAgIGFkZHIsIG1hc2spOworCQluZXRsYmxfYWY2bGlzdF9hdWRpdF9hZGRyKGF1ZGl0X2J1ZiwgMSwKKwkJCQkJICAoZGV2ICE9IE5VTEwgPyBkZXYtPm5hbWUgOiBOVUxMKSwKKwkJCQkJICBhZGRyLCBtYXNrKTsKIAkJaWYgKGRldiAhPSBOVUxMKQogCQkJZGV2X3B1dChkZXYpOwotCQlpZiAoc2VjdXJpdHlfc2VjaWRfdG9fc2VjY3R4KGVudHJ5LT5zZWNpZCwKLQkJCQkJICAgICAmc2VjY3R4LAotCQkJCQkgICAgICZzZWNjdHhfbGVuKSA9PSAwKSB7CisJCWlmIChlbnRyeSAmJiBzZWN1cml0eV9zZWNpZF90b19zZWNjdHgoZW50cnktPnNlY2lkLAorCQkJCQkJICAgICAgJnNlY2N0eCwKKwkJCQkJCSAgICAgICZzZWNjdHhfbGVuKSA9PSAwKSB7CiAJCQlhdWRpdF9sb2dfZm9ybWF0KGF1ZGl0X2J1ZiwgIiBzZWNfb2JqPSVzIiwgc2VjY3R4KTsKIAkJCXNlY3VyaXR5X3JlbGVhc2Vfc2VjY3R4KHNlY2N0eCwgc2VjY3R4X2xlbik7CiAJCX0KQEAgLTgzNiwxNiArNjc1LDE4IEBACiAgKi8KIHN0YXRpYyB2b2lkIG5ldGxibF91bmxoc2hfY29uZHJlbW92ZV9pZmFjZShzdHJ1Y3QgbmV0bGJsX3VubGhzaF9pZmFjZSAqaWZhY2UpCiB7Ci0Jc3RydWN0IG5ldGxibF91bmxoc2hfYWRkcjQgKml0ZXI0OwotCXN0cnVjdCBuZXRsYmxfdW5saHNoX2FkZHI2ICppdGVyNjsKKwlzdHJ1Y3QgbmV0bGJsX2FmNGxpc3QgKml0ZXI0OworI2lmIGRlZmluZWQoQ09ORklHX0lQVjYpIHx8IGRlZmluZWQoQ09ORklHX0lQVjZfTU9EVUxFKQorCXN0cnVjdCBuZXRsYmxfYWY2bGlzdCAqaXRlcjY7CisjZW5kaWYgLyogSVB2NiAqLwogCiAJc3Bpbl9sb2NrKCZuZXRsYmxfdW5saHNoX2xvY2spOwotCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGl0ZXI0LCAmaWZhY2UtPmFkZHI0X2xpc3QsIGxpc3QpCi0JCWlmIChpdGVyNC0+dmFsaWQpCi0JCQlnb3RvIHVubGhzaF9jb25kcmVtb3ZlX2ZhaWx1cmU7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoaXRlcjYsICZpZmFjZS0+YWRkcjZfbGlzdCwgbGlzdCkKLQkJaWYgKGl0ZXI2LT52YWxpZCkKLQkJCWdvdG8gdW5saHNoX2NvbmRyZW1vdmVfZmFpbHVyZTsKKwluZXRsYmxfYWY0bGlzdF9mb3JlYWNoX3JjdShpdGVyNCwgJmlmYWNlLT5hZGRyNF9saXN0KQorCQlnb3RvIHVubGhzaF9jb25kcmVtb3ZlX2ZhaWx1cmU7CisjaWYgZGVmaW5lZChDT05GSUdfSVBWNikgfHwgZGVmaW5lZChDT05GSUdfSVBWNl9NT0RVTEUpCisJbmV0bGJsX2FmNmxpc3RfZm9yZWFjaF9yY3UoaXRlcjYsICZpZmFjZS0+YWRkcjZfbGlzdCkKKwkJZ290byB1bmxoc2hfY29uZHJlbW92ZV9mYWlsdXJlOworI2VuZGlmIC8qIElQdjYgKi8KIAlpZmFjZS0+dmFsaWQgPSAwOwogCWlmIChpZmFjZS0+aWZpbmRleCA+IDApCiAJCWxpc3RfZGVsX3JjdSgmaWZhY2UtPmxpc3QpOwpAQCAtMTM0OSw3ICsxMTkwLDcgQEAKIAlpZiAoYWRkcjQpIHsKIAkJc3RydWN0IGluX2FkZHIgYWRkcl9zdHJ1Y3Q7CiAKLQkJYWRkcl9zdHJ1Y3Quc19hZGRyID0gYWRkcjQtPmFkZHI7CisJCWFkZHJfc3RydWN0LnNfYWRkciA9IGFkZHI0LT5saXN0LmFkZHI7CiAJCXJldF92YWwgPSBubGFfcHV0KGNiX2FyZy0+c2tiLAogCQkJCSAgTkxCTF9VTkxBQkVMX0FfSVBWNEFERFIsCiAJCQkJICBzaXplb2Yoc3RydWN0IGluX2FkZHIpLApAQCAtMTM1Nyw3ICsxMTk4LDcgQEAKIAkJaWYgKHJldF92YWwgIT0gMCkKIAkJCWdvdG8gbGlzdF9jYl9mYWlsdXJlOwogCi0JCWFkZHJfc3RydWN0LnNfYWRkciA9IGFkZHI0LT5tYXNrOworCQlhZGRyX3N0cnVjdC5zX2FkZHIgPSBhZGRyNC0+bGlzdC5tYXNrOwogCQlyZXRfdmFsID0gbmxhX3B1dChjYl9hcmctPnNrYiwKIAkJCQkgIE5MQkxfVU5MQUJFTF9BX0lQVjRNQVNLLAogCQkJCSAgc2l6ZW9mKHN0cnVjdCBpbl9hZGRyKSwKQEAgLTEzNzAsMTQgKzEyMTEsMTQgQEAKIAkJcmV0X3ZhbCA9IG5sYV9wdXQoY2JfYXJnLT5za2IsCiAJCQkJICBOTEJMX1VOTEFCRUxfQV9JUFY2QUREUiwKIAkJCQkgIHNpemVvZihzdHJ1Y3QgaW42X2FkZHIpLAotCQkJCSAgJmFkZHI2LT5hZGRyKTsKKwkJCQkgICZhZGRyNi0+bGlzdC5hZGRyKTsKIAkJaWYgKHJldF92YWwgIT0gMCkKIAkJCWdvdG8gbGlzdF9jYl9mYWlsdXJlOwogCiAJCXJldF92YWwgPSBubGFfcHV0KGNiX2FyZy0+c2tiLAogCQkJCSAgTkxCTF9VTkxBQkVMX0FfSVBWNk1BU0ssCiAJCQkJICBzaXplb2Yoc3RydWN0IGluNl9hZGRyKSwKLQkJCQkgICZhZGRyNi0+bWFzayk7CisJCQkJICAmYWRkcjYtPmxpc3QubWFzayk7CiAJCWlmIChyZXRfdmFsICE9IDApCiAJCQlnb3RvIGxpc3RfY2JfZmFpbHVyZTsKIApAQCAtMTQyNSw4ICsxMjY2LDExIEBACiAJdTMyIGl0ZXJfYmt0OwogCXUzMiBpdGVyX2NoYWluID0gMCwgaXRlcl9hZGRyNCA9IDAsIGl0ZXJfYWRkcjYgPSAwOwogCXN0cnVjdCBuZXRsYmxfdW5saHNoX2lmYWNlICppZmFjZTsKLQlzdHJ1Y3QgbmV0bGJsX3VubGhzaF9hZGRyNCAqYWRkcjQ7Ci0Jc3RydWN0IG5ldGxibF91bmxoc2hfYWRkcjYgKmFkZHI2OworCXN0cnVjdCBsaXN0X2hlYWQgKml0ZXJfbGlzdDsKKwlzdHJ1Y3QgbmV0bGJsX2FmNGxpc3QgKmFkZHI0OworI2lmIGRlZmluZWQoQ09ORklHX0lQVjYpIHx8IGRlZmluZWQoQ09ORklHX0lQVjZfTU9EVUxFKQorCXN0cnVjdCBuZXRsYmxfYWY2bGlzdCAqYWRkcjY7CisjZW5kaWYKIAogCWNiX2FyZy5ubF9jYiA9IGNiOwogCWNiX2FyZy5za2IgPSBza2I7CkBAIC0xNDM2LDQ0ICsxMjgwLDQzIEBACiAJZm9yIChpdGVyX2JrdCA9IHNraXBfYmt0OwogCSAgICAgaXRlcl9ia3QgPCByY3VfZGVyZWZlcmVuY2UobmV0bGJsX3VubGhzaCktPnNpemU7CiAJICAgICBpdGVyX2JrdCsrLCBpdGVyX2NoYWluID0gMCwgaXRlcl9hZGRyNCA9IDAsIGl0ZXJfYWRkcjYgPSAwKSB7Ci0JCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGlmYWNlLAotCQkJICAgICAgICAmcmN1X2RlcmVmZXJlbmNlKG5ldGxibF91bmxoc2gpLT50YmxbaXRlcl9ia3RdLAotCQkJCWxpc3QpIHsKKwkJaXRlcl9saXN0ID0gJnJjdV9kZXJlZmVyZW5jZShuZXRsYmxfdW5saHNoKS0+dGJsW2l0ZXJfYmt0XTsKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoaWZhY2UsIGl0ZXJfbGlzdCwgbGlzdCkgewogCQkJaWYgKCFpZmFjZS0+dmFsaWQgfHwKIAkJCSAgICBpdGVyX2NoYWluKysgPCBza2lwX2NoYWluKQogCQkJCWNvbnRpbnVlOwotCQkJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoYWRkcjQsCi0JCQkJCQkmaWZhY2UtPmFkZHI0X2xpc3QsCi0JCQkJCQlsaXN0KSB7Ci0JCQkJaWYgKCFhZGRyNC0+dmFsaWQgfHwgaXRlcl9hZGRyNCsrIDwgc2tpcF9hZGRyNCkKKwkJCW5ldGxibF9hZjRsaXN0X2ZvcmVhY2hfcmN1KGFkZHI0LAorCQkJCQkJICAgJmlmYWNlLT5hZGRyNF9saXN0KSB7CisJCQkJaWYgKGl0ZXJfYWRkcjQrKyA8IHNraXBfYWRkcjQpCiAJCQkJCWNvbnRpbnVlOwogCQkJCWlmIChuZXRsYmxfdW5sYWJlbF9zdGF0aWNsaXN0X2dlbigKLQkJCQkJICAgICAgICAgICAgIE5MQkxfVU5MQUJFTF9DX1NUQVRJQ0xJU1QsCi0JCQkJCQkgICAgIGlmYWNlLAotCQkJCQkJICAgICBhZGRyNCwKLQkJCQkJCSAgICAgTlVMTCwKLQkJCQkJCSAgICAgJmNiX2FyZykgPCAwKSB7CisJCQkJCSAgICAgIE5MQkxfVU5MQUJFTF9DX1NUQVRJQ0xJU1QsCisJCQkJCSAgICAgIGlmYWNlLAorCQkJCQkgICAgICBuZXRsYmxfdW5saHNoX2FkZHI0X2VudHJ5KGFkZHI0KSwKKwkJCQkJICAgICAgTlVMTCwKKwkJCQkJICAgICAgJmNiX2FyZykgPCAwKSB7CiAJCQkJCWl0ZXJfYWRkcjQtLTsKIAkJCQkJaXRlcl9jaGFpbi0tOwogCQkJCQlnb3RvIHVubGFiZWxfc3RhdGljbGlzdF9yZXR1cm47CiAJCQkJfQogCQkJfQotCQkJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoYWRkcjYsCi0JCQkJCQkmaWZhY2UtPmFkZHI2X2xpc3QsCi0JCQkJCQlsaXN0KSB7Ci0JCQkJaWYgKCFhZGRyNi0+dmFsaWQgfHwgaXRlcl9hZGRyNisrIDwgc2tpcF9hZGRyNikKKyNpZiBkZWZpbmVkKENPTkZJR19JUFY2KSB8fCBkZWZpbmVkKENPTkZJR19JUFY2X01PRFVMRSkKKwkJCW5ldGxibF9hZjZsaXN0X2ZvcmVhY2hfcmN1KGFkZHI2LAorCQkJCQkJICAgJmlmYWNlLT5hZGRyNl9saXN0KSB7CisJCQkJaWYgKGl0ZXJfYWRkcjYrKyA8IHNraXBfYWRkcjYpCiAJCQkJCWNvbnRpbnVlOwogCQkJCWlmIChuZXRsYmxfdW5sYWJlbF9zdGF0aWNsaXN0X2dlbigKLQkJCQkJCSAgICAgTkxCTF9VTkxBQkVMX0NfU1RBVElDTElTVCwKLQkJCQkJCSAgICAgaWZhY2UsCi0JCQkJCQkgICAgIE5VTEwsCi0JCQkJCQkgICAgIGFkZHI2LAotCQkJCQkJICAgICAmY2JfYXJnKSA8IDApIHsKKwkJCQkJICAgICAgTkxCTF9VTkxBQkVMX0NfU1RBVElDTElTVCwKKwkJCQkJICAgICAgaWZhY2UsCisJCQkJCSAgICAgIE5VTEwsCisJCQkJCSAgICAgIG5ldGxibF91bmxoc2hfYWRkcjZfZW50cnkoYWRkcjYpLAorCQkJCQkgICAgICAmY2JfYXJnKSA8IDApIHsKIAkJCQkJaXRlcl9hZGRyNi0tOwogCQkJCQlpdGVyX2NoYWluLS07CiAJCQkJCWdvdG8gdW5sYWJlbF9zdGF0aWNsaXN0X3JldHVybjsKIAkJCQl9CiAJCQl9CisjZW5kaWYgLyogSVB2NiAqLwogCQl9CiAJfQogCkBAIC0xNTA0LDkgKzEzNDcsMTIgQEAKIAlzdHJ1Y3QgbmV0bGJsX3VubGhzaF9pZmFjZSAqaWZhY2U7CiAJdTMyIHNraXBfYWRkcjQgPSBjYi0+YXJnc1swXTsKIAl1MzIgc2tpcF9hZGRyNiA9IGNiLT5hcmdzWzFdOwotCXUzMiBpdGVyX2FkZHI0ID0gMCwgaXRlcl9hZGRyNiA9IDA7Ci0Jc3RydWN0IG5ldGxibF91bmxoc2hfYWRkcjQgKmFkZHI0OwotCXN0cnVjdCBuZXRsYmxfdW5saHNoX2FkZHI2ICphZGRyNjsKKwl1MzIgaXRlcl9hZGRyNCA9IDA7CisJc3RydWN0IG5ldGxibF9hZjRsaXN0ICphZGRyNDsKKyNpZiBkZWZpbmVkKENPTkZJR19JUFY2KSB8fCBkZWZpbmVkKENPTkZJR19JUFY2X01PRFVMRSkKKwl1MzIgaXRlcl9hZGRyNiA9IDA7CisJc3RydWN0IG5ldGxibF9hZjZsaXN0ICphZGRyNjsKKyNlbmRpZgogCiAJY2JfYXJnLm5sX2NiID0gY2I7CiAJY2JfYXJnLnNrYiA9IHNrYjsKQEAgLTE1MTcsMzAgKzEzNjMsMzIgQEAKIAlpZiAoaWZhY2UgPT0gTlVMTCB8fCAhaWZhY2UtPnZhbGlkKQogCQlnb3RvIHVubGFiZWxfc3RhdGljbGlzdGRlZl9yZXR1cm47CiAKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShhZGRyNCwgJmlmYWNlLT5hZGRyNF9saXN0LCBsaXN0KSB7Ci0JCWlmICghYWRkcjQtPnZhbGlkIHx8IGl0ZXJfYWRkcjQrKyA8IHNraXBfYWRkcjQpCisJbmV0bGJsX2FmNGxpc3RfZm9yZWFjaF9yY3UoYWRkcjQsICZpZmFjZS0+YWRkcjRfbGlzdCkgeworCQlpZiAoaXRlcl9hZGRyNCsrIDwgc2tpcF9hZGRyNCkKIAkJCWNvbnRpbnVlOwogCQlpZiAobmV0bGJsX3VubGFiZWxfc3RhdGljbGlzdF9nZW4oTkxCTF9VTkxBQkVMX0NfU1RBVElDTElTVERFRiwKLQkJCQkJICAgaWZhY2UsCi0JCQkJCSAgIGFkZHI0LAotCQkJCQkgICBOVUxMLAotCQkJCQkgICAmY2JfYXJnKSA8IDApIHsKKwkJCQkJICAgICAgaWZhY2UsCisJCQkJCSAgICAgIG5ldGxibF91bmxoc2hfYWRkcjRfZW50cnkoYWRkcjQpLAorCQkJCQkgICAgICBOVUxMLAorCQkJCQkgICAgICAmY2JfYXJnKSA8IDApIHsKIAkJCWl0ZXJfYWRkcjQtLTsKIAkJCWdvdG8gdW5sYWJlbF9zdGF0aWNsaXN0ZGVmX3JldHVybjsKIAkJfQogCX0KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShhZGRyNiwgJmlmYWNlLT5hZGRyNl9saXN0LCBsaXN0KSB7Ci0JCWlmICghYWRkcjYtPnZhbGlkIHx8IGl0ZXJfYWRkcjYrKyA8IHNraXBfYWRkcjYpCisjaWYgZGVmaW5lZChDT05GSUdfSVBWNikgfHwgZGVmaW5lZChDT05GSUdfSVBWNl9NT0RVTEUpCisJbmV0bGJsX2FmNmxpc3RfZm9yZWFjaF9yY3UoYWRkcjYsICZpZmFjZS0+YWRkcjZfbGlzdCkgeworCQlpZiAoaXRlcl9hZGRyNisrIDwgc2tpcF9hZGRyNikKIAkJCWNvbnRpbnVlOwogCQlpZiAobmV0bGJsX3VubGFiZWxfc3RhdGljbGlzdF9nZW4oTkxCTF9VTkxBQkVMX0NfU1RBVElDTElTVERFRiwKLQkJCQkJICAgaWZhY2UsCi0JCQkJCSAgIE5VTEwsCi0JCQkJCSAgIGFkZHI2LAotCQkJCQkgICAmY2JfYXJnKSA8IDApIHsKKwkJCQkJICAgICAgaWZhY2UsCisJCQkJCSAgICAgIE5VTEwsCisJCQkJCSAgICAgIG5ldGxibF91bmxoc2hfYWRkcjZfZW50cnkoYWRkcjYpLAorCQkJCQkgICAgICAmY2JfYXJnKSA8IDApIHsKIAkJCWl0ZXJfYWRkcjYtLTsKIAkJCWdvdG8gdW5sYWJlbF9zdGF0aWNsaXN0ZGVmX3JldHVybjsKIAkJfQogCX0KKyNlbmRpZiAvKiBJUHY2ICovCiAKIHVubGFiZWxfc3RhdGljbGlzdGRlZl9yZXR1cm46CiAJcmN1X3JlYWRfdW5sb2NrKCk7CkBAIC0xNzE4LDI1ICsxNTY2LDI3IEBACiAJc3dpdGNoIChmYW1pbHkpIHsKIAljYXNlIFBGX0lORVQ6IHsKIAkJc3RydWN0IGlwaGRyICpoZHI0OwotCQlzdHJ1Y3QgbmV0bGJsX3VubGhzaF9hZGRyNCAqYWRkcjQ7CisJCXN0cnVjdCBuZXRsYmxfYWY0bGlzdCAqYWRkcjQ7CiAKIAkJaGRyNCA9IGlwX2hkcihza2IpOwotCQlhZGRyNCA9IG5ldGxibF91bmxoc2hfc2VhcmNoX2FkZHI0KGhkcjQtPnNhZGRyLCBpZmFjZSk7CisJCWFkZHI0ID0gbmV0bGJsX2FmNGxpc3Rfc2VhcmNoKGhkcjQtPnNhZGRyLAorCQkJCQkgICAgICAmaWZhY2UtPmFkZHI0X2xpc3QpOwogCQlpZiAoYWRkcjQgPT0gTlVMTCkKIAkJCWdvdG8gdW5sYWJlbF9nZXRhdHRyX25vbGFiZWw7Ci0JCXNlY2F0dHItPmF0dHIuc2VjaWQgPSBhZGRyNC0+c2VjaWQ7CisJCXNlY2F0dHItPmF0dHIuc2VjaWQgPSBuZXRsYmxfdW5saHNoX2FkZHI0X2VudHJ5KGFkZHI0KS0+c2VjaWQ7CiAJCWJyZWFrOwogCX0KICNpZiBkZWZpbmVkKENPTkZJR19JUFY2KSB8fCBkZWZpbmVkKENPTkZJR19JUFY2X01PRFVMRSkKIAljYXNlIFBGX0lORVQ2OiB7CiAJCXN0cnVjdCBpcHY2aGRyICpoZHI2OwotCQlzdHJ1Y3QgbmV0bGJsX3VubGhzaF9hZGRyNiAqYWRkcjY7CisJCXN0cnVjdCBuZXRsYmxfYWY2bGlzdCAqYWRkcjY7CiAKIAkJaGRyNiA9IGlwdjZfaGRyKHNrYik7Ci0JCWFkZHI2ID0gbmV0bGJsX3VubGhzaF9zZWFyY2hfYWRkcjYoJmhkcjYtPnNhZGRyLCBpZmFjZSk7CisJCWFkZHI2ID0gbmV0bGJsX2FmNmxpc3Rfc2VhcmNoKCZoZHI2LT5zYWRkciwKKwkJCQkJICAgICAgJmlmYWNlLT5hZGRyNl9saXN0KTsKIAkJaWYgKGFkZHI2ID09IE5VTEwpCiAJCQlnb3RvIHVubGFiZWxfZ2V0YXR0cl9ub2xhYmVsOwotCQlzZWNhdHRyLT5hdHRyLnNlY2lkID0gYWRkcjYtPnNlY2lkOworCQlzZWNhdHRyLT5hdHRyLnNlY2lkID0gbmV0bGJsX3VubGhzaF9hZGRyNl9lbnRyeShhZGRyNiktPnNlY2lkOwogCQlicmVhazsKIAl9CiAjZW5kaWYgLyogSVB2NiAqLwpkaWZmIC0tZ2l0IGEvbmV0L25ldGxpbmsvYWZfbmV0bGluay5jIGIvbmV0L25ldGxpbmsvYWZfbmV0bGluay5jCmluZGV4IGIwZWFjYzAuLjQ4MDE4NGEgMTAwNjQ0Ci0tLSBhL25ldC9uZXRsaW5rL2FmX25ldGxpbmsuYworKysgYi9uZXQvbmV0bGluay9hZl9uZXRsaW5rLmMKQEAgLTEsNyArMSw3IEBACiAvKgogICogTkVUTElOSyAgICAgIEtlcm5lbC11c2VyIGNvbW11bmljYXRpb24gcHJvdG9jb2wuCiAgKgotICogCQlBdXRob3JzOglBbGFuIENveCA8YWxhbkByZWRoYXQuY29tPgorICogCQlBdXRob3JzOglBbGFuIENveCA8YWxhbkBseG9yZ3VrLnVrdXUub3JnLnVrPgogICogCQkJCUFsZXhleSBLdXpuZXRzb3YgPGt1em5ldEBtczIuaW5yLmFjLnJ1PgogICoKICAqCQlUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCkBAIC00MzUsNyArNDM1LDcgQEAKIAkJcmV0dXJuIC1FUFJPVE9OT1NVUFBPUlQ7CiAKIAluZXRsaW5rX2xvY2tfdGFibGUoKTsKLSNpZmRlZiBDT05GSUdfS01PRAorI2lmZGVmIENPTkZJR19NT0RVTEVTCiAJaWYgKCFubF90YWJsZVtwcm90b2NvbF0ucmVnaXN0ZXJlZCkgewogCQluZXRsaW5rX3VubG9ja190YWJsZSgpOwogCQlyZXF1ZXN0X21vZHVsZSgibmV0LXBmLSVkLXByb3RvLSVkIiwgUEZfTkVUTElOSywgcHJvdG9jb2wpOwpkaWZmIC0tZ2l0IGEvbmV0L3Bob25ldC9hZl9waG9uZXQuYyBiL25ldC9waG9uZXQvYWZfcGhvbmV0LmMKaW5kZXggOWU5YzZmYy4uYjlkOTdlZiAxMDA2NDQKLS0tIGEvbmV0L3Bob25ldC9hZl9waG9uZXQuYworKysgYi9uZXQvcGhvbmV0L2FmX3Bob25ldC5jCkBAIC02NywxMSArNjcsMTAgQEAKIAl9CiAKIAlwbnAgPSBwaG9uZXRfcHJvdG9fZ2V0KHByb3RvY29sKTsKLSNpZmRlZiBDT05GSUdfS01PRAogCWlmIChwbnAgPT0gTlVMTCAmJgogCSAgICByZXF1ZXN0X21vZHVsZSgibmV0LXBmLSVkLXByb3RvLSVkIiwgUEZfUEhPTkVULCBwcm90b2NvbCkgPT0gMCkKIAkJcG5wID0gcGhvbmV0X3Byb3RvX2dldChwcm90b2NvbCk7Ci0jZW5kaWYKKwogCWlmIChwbnAgPT0gTlVMTCkKIAkJcmV0dXJuIC1FUFJPVE9OT1NVUFBPUlQ7CiAJaWYgKHNvY2stPnR5cGUgIT0gcG5wLT5zb2NrX3R5cGUpIHsKZGlmZiAtLWdpdCBhL25ldC9yZmtpbGwvcmZraWxsLWlucHV0LmMgYi9uZXQvcmZraWxsL3Jma2lsbC1pbnB1dC5jCmluZGV4IGU1YjY5NTUuLjIxMTI0ZWMgMTAwNjQ0Ci0tLSBhL25ldC9yZmtpbGwvcmZraWxsLWlucHV0LmMKKysrIGIvbmV0L3Jma2lsbC9yZmtpbGwtaW5wdXQuYwpAQCAtMTYsNiArMTYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9yZmtpbGwuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogCiAjaW5jbHVkZSAicmZraWxsLWlucHV0LmgiCiAKZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9hY3RfYXBpLmMgYi9uZXQvc2NoZWQvYWN0X2FwaS5jCmluZGV4IDk5NzRiM2YuLjhmNDU3ZjEgMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9hY3RfYXBpLmMKKysrIGIvbmV0L3NjaGVkL2FjdF9hcGkuYwpAQCAtNDk0LDcgKzQ5NCw3IEBACiAKIAlhX28gPSB0Y19sb29rdXBfYWN0aW9uX24oYWN0X25hbWUpOwogCWlmIChhX28gPT0gTlVMTCkgewotI2lmZGVmIENPTkZJR19LTU9ECisjaWZkZWYgQ09ORklHX01PRFVMRVMKIAkJcnRubF91bmxvY2soKTsKIAkJcmVxdWVzdF9tb2R1bGUoImFjdF8lcyIsIGFjdF9uYW1lKTsKIAkJcnRubF9sb2NrKCk7CmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvY2xzX2FwaS5jIGIvbmV0L3NjaGVkL2Nsc19hcGkuYwppbmRleCA4ZWI3OWU5Li4xNmU3YWM5IDEwMDY0NAotLS0gYS9uZXQvc2NoZWQvY2xzX2FwaS5jCisrKyBiL25ldC9zY2hlZC9jbHNfYXBpLmMKQEAgLTIyNyw3ICsyMjcsNyBAQAogCQllcnIgPSAtRU5PRU5UOwogCQl0cF9vcHMgPSB0Y2ZfcHJvdG9fbG9va3VwX29wcyh0Y2FbVENBX0tJTkRdKTsKIAkJaWYgKHRwX29wcyA9PSBOVUxMKSB7Ci0jaWZkZWYgQ09ORklHX0tNT0QKKyNpZmRlZiBDT05GSUdfTU9EVUxFUwogCQkJc3RydWN0IG5sYXR0ciAqa2luZCA9IHRjYVtUQ0FfS0lORF07CiAJCQljaGFyIG5hbWVbSUZOQU1TSVpdOwogCmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvZW1hdGNoLmMgYi9uZXQvc2NoZWQvZW1hdGNoLmMKaW5kZXggNWU2ZjgyZS4uZTgyNTE5ZSAxMDA2NDQKLS0tIGEvbmV0L3NjaGVkL2VtYXRjaC5jCisrKyBiL25ldC9zY2hlZC9lbWF0Y2guYwpAQCAtMjI0LDcgKzIyNCw3IEBACiAKIAkJaWYgKGVtLT5vcHMgPT0gTlVMTCkgewogCQkJZXJyID0gLUVOT0VOVDsKLSNpZmRlZiBDT05GSUdfS01PRAorI2lmZGVmIENPTkZJR19NT0RVTEVTCiAJCQlfX3J0bmxfdW5sb2NrKCk7CiAJCQlyZXF1ZXN0X21vZHVsZSgiZW1hdGNoLWtpbmQtJXUiLCBlbV9oZHItPmtpbmQpOwogCQkJcnRubF9sb2NrKCk7CmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvc2NoX2FwaS5jIGIvbmV0L3NjaGVkL3NjaF9hcGkuYwppbmRleCAxMTIyYzk1Li5iMTZhZDI5IDEwMDY0NAotLS0gYS9uZXQvc2NoZWQvc2NoX2FwaS5jCisrKyBiL25ldC9zY2hlZC9zY2hfYXBpLmMKQEAgLTc2NCw3ICs3NjQsNyBAQAogCXN0cnVjdCBxZGlzY19zaXplX3RhYmxlICpzdGFiOwogCiAJb3BzID0gcWRpc2NfbG9va3VwX29wcyhraW5kKTsKLSNpZmRlZiBDT05GSUdfS01PRAorI2lmZGVmIENPTkZJR19NT0RVTEVTCiAJaWYgKG9wcyA9PSBOVUxMICYmIGtpbmQgIT0gTlVMTCkgewogCQljaGFyIG5hbWVbSUZOQU1TSVpdOwogCQlpZiAobmxhX3N0cmxjcHkobmFtZSwga2luZCwgSUZOQU1TSVopIDwgSUZOQU1TSVopIHsKZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9zY2hfZ2VuZXJpYy5jIGIvbmV0L3NjaGVkL3NjaF9nZW5lcmljLmMKaW5kZXggN2I1NTcyZC4uOTNjZDMwYyAxMDA2NDQKLS0tIGEvbmV0L3NjaGVkL3NjaF9nZW5lcmljLmMKKysrIGIvbmV0L3NjaGVkL3NjaF9nZW5lcmljLmMKQEAgLTMyNiw2ICszMjYsNyBAQAogCiBzdGF0aWMgc3RydWN0IG5ldGRldl9xdWV1ZSBub29wX25ldGRldl9xdWV1ZSA9IHsKIAkucWRpc2MJCT0JJm5vb3BfcWRpc2MsCisJLnFkaXNjX3NsZWVwaW5nCT0JJm5vb3BfcWRpc2MsCiB9OwogCiBzdHJ1Y3QgUWRpc2Mgbm9vcF9xZGlzYyA9IHsKQEAgLTM1Miw2ICszNTMsNyBAQAogc3RhdGljIHN0cnVjdCBRZGlzYyBub3F1ZXVlX3FkaXNjOwogc3RhdGljIHN0cnVjdCBuZXRkZXZfcXVldWUgbm9xdWV1ZV9uZXRkZXZfcXVldWUgPSB7CiAJLnFkaXNjCQk9CSZub3F1ZXVlX3FkaXNjLAorCS5xZGlzY19zbGVlcGluZwk9CSZub3F1ZXVlX3FkaXNjLAogfTsKIAogc3RhdGljIHN0cnVjdCBRZGlzYyBub3F1ZXVlX3FkaXNjID0gewpkaWZmIC0tZ2l0IGEvbmV0L3NvY2tldC5jIGIvbmV0L3NvY2tldC5jCmluZGV4IDNlOGQ0ZTMuLjJiN2E0YjUgMTAwNjQ0Ci0tLSBhL25ldC9zb2NrZXQuYworKysgYi9uZXQvc29ja2V0LmMKQEAgLTExNDIsNyArMTE0Miw3IEBACiAKIAlzb2NrLT50eXBlID0gdHlwZTsKIAotI2lmIGRlZmluZWQoQ09ORklHX0tNT0QpCisjaWZkZWYgQ09ORklHX01PRFVMRVMKIAkvKiBBdHRlbXB0IHRvIGxvYWQgYSBwcm90b2NvbCBtb2R1bGUgaWYgdGhlIGZpbmQgZmFpbGVkLgogCSAqCiAJICogMTIvMDkvMTk5NiBNYXJjaW46IEJ1dCEgdGhpcyBtYWtlcyBSRUFMTFkgb25seSBzZW5zZSwgaWYgdGhlIHVzZXIKZGlmZiAtLWdpdCBhL25ldC9zdW5ycGMvYXV0aC5jIGIvbmV0L3N1bnJwYy9hdXRoLmMKaW5kZXggNmJmZWE5ZS4uNDM2YmYxYiAxMDA2NDQKLS0tIGEvbmV0L3N1bnJwYy9hdXRoLmMKKysrIGIvbmV0L3N1bnJwYy9hdXRoLmMKQEAgLTgzLDEwICs4Myw4IEBACiAJaWYgKGZsYXZvciA+PSBSUENfQVVUSF9NQVhGTEFWT1IpCiAJCWdvdG8gb3V0OwogCi0jaWZkZWYgQ09ORklHX0tNT0QKIAlpZiAoKG9wcyA9IGF1dGhfZmxhdm9yc1tmbGF2b3JdKSA9PSBOVUxMKQogCQlyZXF1ZXN0X21vZHVsZSgicnBjLWF1dGgtJXUiLCBmbGF2b3IpOwotI2VuZGlmCiAJc3Bpbl9sb2NrKCZycGNfYXV0aGZsYXZvcl9sb2NrKTsKIAlvcHMgPSBhdXRoX2ZsYXZvcnNbZmxhdm9yXTsKIAlpZiAob3BzID09IE5VTEwgfHwgIXRyeV9tb2R1bGVfZ2V0KG9wcy0+b3duZXIpKSB7CmRpZmYgLS1naXQgYS9uZXQvc3VucnBjL2NsbnQuYyBiL25ldC9zdW5ycGMvY2xudC5jCmluZGV4IDc2NzM5ZTkuLjQ4OTVjMzQgMTAwNjQ0Ci0tLSBhL25ldC9zdW5ycGMvY2xudC5jCisrKyBiL25ldC9zdW5ycGMvY2xudC5jCkBAIC0xNzQsNyArMTc0LDcgQEAKIAljbG50LT5jbF9wcm9jaW5mbyA9IHZlcnNpb24tPnByb2NzOwogCWNsbnQtPmNsX21heHByb2MgID0gdmVyc2lvbi0+bnJwcm9jczsKIAljbG50LT5jbF9wcm90bmFtZSA9IHByb2dyYW0tPm5hbWU7Ci0JY2xudC0+Y2xfcHJvZyAgICAgPSBwcm9ncmFtLT5udW1iZXI7CisJY2xudC0+Y2xfcHJvZyAgICAgPSBhcmdzLT5wcm9nbnVtYmVyID8gOiBwcm9ncmFtLT5udW1iZXI7CiAJY2xudC0+Y2xfdmVycyAgICAgPSB2ZXJzaW9uLT5udW1iZXI7CiAJY2xudC0+Y2xfc3RhdHMgICAgPSBwcm9ncmFtLT5zdGF0czsKIAljbG50LT5jbF9tZXRyaWNzICA9IHJwY19hbGxvY19pb3N0YXRzKGNsbnQpOwpAQCAtMjEzLDEwICsyMTMsMTAgQEAKIAl9CiAKIAkvKiBzYXZlIHRoZSBub2RlbmFtZSAqLwotCWNsbnQtPmNsX25vZGVsZW4gPSBzdHJsZW4odXRzbmFtZSgpLT5ub2RlbmFtZSk7CisJY2xudC0+Y2xfbm9kZWxlbiA9IHN0cmxlbihpbml0X3V0c25hbWUoKS0+bm9kZW5hbWUpOwogCWlmIChjbG50LT5jbF9ub2RlbGVuID4gVU5YX01BWE5PREVOQU1FKQogCQljbG50LT5jbF9ub2RlbGVuID0gVU5YX01BWE5PREVOQU1FOwotCW1lbWNweShjbG50LT5jbF9ub2RlbmFtZSwgdXRzbmFtZSgpLT5ub2RlbmFtZSwgY2xudC0+Y2xfbm9kZWxlbik7CisJbWVtY3B5KGNsbnQtPmNsX25vZGVuYW1lLCBpbml0X3V0c25hbWUoKS0+bm9kZW5hbWUsIGNsbnQtPmNsX25vZGVsZW4pOwogCXJwY19yZWdpc3Rlcl9jbGllbnQoY2xudCk7CiAJcmV0dXJuIGNsbnQ7CiAKZGlmZiAtLWdpdCBhL25ldC9zdW5ycGMvcnBjYl9jbG50LmMgYi9uZXQvc3VucnBjL3JwY2JfY2xudC5jCmluZGV4IDI0ZGIyYjQuLjQxMDEzZGQgMTAwNjQ0Ci0tLSBhL25ldC9zdW5ycGMvcnBjYl9jbG50LmMKKysrIGIvbmV0L3N1bnJwYy9ycGNiX2NsbnQuYwpAQCAtMjAsNiArMjAsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2luNi5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bmV0L2lwdjYuaD4KIAogI2luY2x1ZGUgPGxpbnV4L3N1bnJwYy9jbG50Lmg+CiAjaW5jbHVkZSA8bGludXgvc3VucnBjL3NjaGVkLmg+CkBAIC0xNzYsMTMgKzE3NywxMiBAQAogfQogCiBzdGF0aWMgaW50IHJwY2JfcmVnaXN0ZXJfY2FsbChzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIsIHNpemVfdCBhZGRybGVuLAotCQkJICAgICAgdTMyIHZlcnNpb24sIHN0cnVjdCBycGNfbWVzc2FnZSAqbXNnLAotCQkJICAgICAgaW50ICpyZXN1bHQpCisJCQkgICAgICB1MzIgdmVyc2lvbiwgc3RydWN0IHJwY19tZXNzYWdlICptc2cpCiB7CiAJc3RydWN0IHJwY19jbG50ICpycGNiX2NsbnQ7Ci0JaW50IGVycm9yID0gMDsKKwlpbnQgcmVzdWx0LCBlcnJvciA9IDA7CiAKLQkqcmVzdWx0ID0gMDsKKwltc2ctPnJwY19yZXNwID0gJnJlc3VsdDsKIAogCXJwY2JfY2xudCA9IHJwY2JfY3JlYXRlX2xvY2FsKGFkZHIsIGFkZHJsZW4sIHZlcnNpb24pOwogCWlmICghSVNfRVJSKHJwY2JfY2xudCkpIHsKQEAgLTE5MSwxMiArMTkxLDE1IEBACiAJfSBlbHNlCiAJCWVycm9yID0gUFRSX0VSUihycGNiX2NsbnQpOwogCi0JaWYgKGVycm9yIDwgMCkKKwlpZiAoZXJyb3IgPCAwKSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgIlJQQzogZmFpbGVkIHRvIGNvbnRhY3QgbG9jYWwgcnBjYmluZCAiCiAJCQkJInNlcnZlciAoZXJybm8gJWQpLlxuIiwgLWVycm9yKTsKLQlkcHJpbnRrKCJSUEM6ICAgICAgIHJlZ2lzdHJhdGlvbiBzdGF0dXMgJWQvJWRcbiIsIGVycm9yLCAqcmVzdWx0KTsKKwkJcmV0dXJuIGVycm9yOworCX0KIAotCXJldHVybiBlcnJvcjsKKwlpZiAoIXJlc3VsdCkKKwkJcmV0dXJuIC1FQUNDRVM7CisJcmV0dXJuIDA7CiB9CiAKIC8qKgpAQCAtMjA1LDcgKzIwOCwxMSBAQAogICogQHZlcnM6IFJQQyB2ZXJzaW9uIG51bWJlciB0byBiaW5kCiAgKiBAcHJvdDogdHJhbnNwb3J0IHByb3RvY29sIHRvIHJlZ2lzdGVyCiAgKiBAcG9ydDogcG9ydCB2YWx1ZSB0byByZWdpc3RlcgotICogQG9rYXk6IE9VVDogcmVzdWx0IGNvZGUKKyAqCisgKiBSZXR1cm5zIHplcm8gaWYgdGhlIHJlZ2lzdHJhdGlvbiByZXF1ZXN0IHdhcyBkaXNwYXRjaGVkIHN1Y2Nlc3NmdWxseQorICogYW5kIHRoZSBycGNiaW5kIGRhZW1vbiByZXR1cm5lZCBzdWNjZXNzLiAgT3RoZXJ3aXNlLCByZXR1cm5zIGFuIGVycm5vCisgKiB2YWx1ZSB0aGF0IHJlZmxlY3RzIHRoZSBuYXR1cmUgb2YgdGhlIGVycm9yIChyZXF1ZXN0IGNvdWxkIG5vdCBiZQorICogZGlzcGF0Y2hlZCwgdGltZWQgb3V0LCBvciBycGNiaW5kIHJldHVybmVkIGFuIGVycm9yKS4KICAqCiAgKiBSUEMgc2VydmljZXMgaW52b2tlIHRoaXMgZnVuY3Rpb24gdG8gYWR2ZXJ0aXNlIHRoZWlyIGNvbnRhY3QKICAqIGluZm9ybWF0aW9uIHZpYSB0aGUgc3lzdGVtJ3MgcnBjYmluZCBkYWVtb24uICBSUEMgc2VydmljZXMKQEAgLTIxNywxNSArMjI0LDYgQEAKICAqIGFsbCByZWdpc3RlcmVkIHRyYW5zcG9ydHMgZm9yIFtwcm9ncmFtLCB2ZXJzaW9uXSBmcm9tIHRoZSBsb2NhbAogICogcnBjYmluZCBkYXRhYmFzZS4KICAqCi0gKiBSZXR1cm5zIHplcm8gaWYgdGhlIHJlZ2lzdHJhdGlvbiByZXF1ZXN0IHdhcyBkaXNwYXRjaGVkCi0gKiBzdWNjZXNzZnVsbHkgYW5kIGEgcmVwbHkgd2FzIHJlY2VpdmVkLiAgVGhlIHJwY2JpbmQgZGFlbW9uJ3MKLSAqIGJvb2xlYW4gcmVzdWx0IGNvZGUgaXMgc3RvcmVkIGluICpva2F5LgotICoKLSAqIFJldHVybnMgYW4gZXJybm8gdmFsdWUgYW5kIHNldHMgKnJlc3VsdCB0byB6ZXJvIGlmIHRoZXJlIHdhcwotICogc29tZSBwcm9ibGVtIHRoYXQgcHJldmVudGVkIHRoZSBycGNiaW5kIHJlcXVlc3QgZnJvbSBiZWluZwotICogZGlzcGF0Y2hlZCwgb3IgaWYgdGhlIHJwY2JpbmQgZGFlbW9uIGRpZCBub3QgcmVzcG9uZCB3aXRoaW4KLSAqIHRoZSB0aW1lb3V0LgotICoKICAqIFRoaXMgZnVuY3Rpb24gdXNlcyBycGNiaW5kIHByb3RvY29sIHZlcnNpb24gMiB0byBjb250YWN0IHRoZQogICogbG9jYWwgcnBjYmluZCBkYWVtb24uCiAgKgpAQCAtMjM2LDcgKzIzNCw3IEBACiAgKiBJTjZBRERSX0FOWSAoaWUgYXZhaWxhYmxlIGZvciBhbGwgQUZfSU5FVCBhbmQgQUZfSU5FVDYKICAqIGFkZHJlc3NlcykuCiAgKi8KLWludCBycGNiX3JlZ2lzdGVyKHUzMiBwcm9nLCB1MzIgdmVycywgaW50IHByb3QsIHVuc2lnbmVkIHNob3J0IHBvcnQsIGludCAqb2theSkKK2ludCBycGNiX3JlZ2lzdGVyKHUzMiBwcm9nLCB1MzIgdmVycywgaW50IHByb3QsIHVuc2lnbmVkIHNob3J0IHBvcnQpCiB7CiAJc3RydWN0IHJwY2JpbmRfYXJncyBtYXAgPSB7CiAJCS5yX3Byb2cJCT0gcHJvZywKQEAgLTI0Niw3ICsyNDQsNiBAQAogCX07CiAJc3RydWN0IHJwY19tZXNzYWdlIG1zZyA9IHsKIAkJLnJwY19hcmdwCT0gJm1hcCwKLQkJLnJwY19yZXNwCT0gb2theSwKIAl9OwogCiAJZHByaW50aygiUlBDOiAgICAgICAlc3JlZ2lzdGVyaW5nICgldSwgJXUsICVkLCAldSkgd2l0aCBsb2NhbCAiCkBAIC0yNTksNyArMjU2LDcgQEAKIAogCXJldHVybiBycGNiX3JlZ2lzdGVyX2NhbGwoKHN0cnVjdCBzb2NrYWRkciAqKSZycGNiX2luYWRkcl9sb29wYmFjaywKIAkJCQkJc2l6ZW9mKHJwY2JfaW5hZGRyX2xvb3BiYWNrKSwKLQkJCQkJUlBDQlZFUlNfMiwgJm1zZywgb2theSk7CisJCQkJCVJQQ0JWRVJTXzIsICZtc2cpOwogfQogCiAvKgpAQCAtMjkwLDcgKzI4Nyw3IEBACiAKIAlyZXR1cm4gcnBjYl9yZWdpc3Rlcl9jYWxsKChzdHJ1Y3Qgc29ja2FkZHIgKikmcnBjYl9pbmFkZHJfbG9vcGJhY2ssCiAJCQkJCXNpemVvZihycGNiX2luYWRkcl9sb29wYmFjayksCi0JCQkJCVJQQ0JWRVJTXzQsIG1zZywgbXNnLT5ycGNfcmVzcCk7CisJCQkJCVJQQ0JWRVJTXzQsIG1zZyk7CiB9CiAKIC8qCkBAIC0zMDQsMTAgKzMwMSwxMyBAQAogCWNoYXIgYnVmWzY0XTsKIAogCS8qIENvbnN0cnVjdCBBRl9JTkVUNiB1bml2ZXJzYWwgYWRkcmVzcyAqLwotCXNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksCi0JCQlOSVA2X0ZNVCIuJXUuJXUiLAotCQkJTklQNihhZGRyZXNzX3RvX3JlZ2lzdGVyLT5zaW42X2FkZHIpLAotCQkJcG9ydCA+PiA4LCBwb3J0ICYgMHhmZik7CisJaWYgKGlwdjZfYWRkcl9hbnkoJmFkZHJlc3NfdG9fcmVnaXN0ZXItPnNpbjZfYWRkcikpCisJCXNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICI6Oi4ldS4ldSIsCisJCQkJcG9ydCA+PiA4LCBwb3J0ICYgMHhmZik7CisJZWxzZQorCQlzbnByaW50ZihidWYsIHNpemVvZihidWYpLCBOSVA2X0ZNVCIuJXUuJXUiLAorCQkJCU5JUDYoYWRkcmVzc190b19yZWdpc3Rlci0+c2luNl9hZGRyKSwKKwkJCQlwb3J0ID4+IDgsIHBvcnQgJiAweGZmKTsKIAltYXAtPnJfYWRkciA9IGJ1ZjsKIAogCWRwcmludGsoIlJQQzogICAgICAgJXNyZWdpc3RlcmluZyBbJXUsICV1LCAlcywgJyVzJ10gd2l0aCAiCkBAIC0zMjEsNyArMzIxLDcgQEAKIAogCXJldHVybiBycGNiX3JlZ2lzdGVyX2NhbGwoKHN0cnVjdCBzb2NrYWRkciAqKSZycGNiX2luNmFkZHJfbG9vcGJhY2ssCiAJCQkJCXNpemVvZihycGNiX2luNmFkZHJfbG9vcGJhY2spLAotCQkJCQlSUENCVkVSU180LCBtc2csIG1zZy0+cnBjX3Jlc3ApOworCQkJCQlSUENCVkVSU180LCBtc2cpOwogfQogCiAvKioKQEAgLTMzMCw3ICszMzAsMTEgQEAKICAqIEB2ZXJzaW9uOiBSUEMgdmVyc2lvbiBudW1iZXIgb2Ygc2VydmljZSB0byAodW4pcmVnaXN0ZXIKICAqIEBhZGRyZXNzOiBhZGRyZXNzIGZhbWlseSwgSVAgYWRkcmVzcywgYW5kIHBvcnQgdG8gKHVuKXJlZ2lzdGVyCiAgKiBAbmV0aWQ6IG5ldGlkIG9mIHRyYW5zcG9ydCBwcm90b2NvbCB0byAodW4pcmVnaXN0ZXIKLSAqIEByZXN1bHQ6IHJlc3VsdCBjb2RlIGZyb20gcnBjYmluZCBSUEMgY2FsbAorICoKKyAqIFJldHVybnMgemVybyBpZiB0aGUgcmVnaXN0cmF0aW9uIHJlcXVlc3Qgd2FzIGRpc3BhdGNoZWQgc3VjY2Vzc2Z1bGx5CisgKiBhbmQgdGhlIHJwY2JpbmQgZGFlbW9uIHJldHVybmVkIHN1Y2Nlc3MuICBPdGhlcndpc2UsIHJldHVybnMgYW4gZXJybm8KKyAqIHZhbHVlIHRoYXQgcmVmbGVjdHMgdGhlIG5hdHVyZSBvZiB0aGUgZXJyb3IgKHJlcXVlc3QgY291bGQgbm90IGJlCisgKiBkaXNwYXRjaGVkLCB0aW1lZCBvdXQsIG9yIHJwY2JpbmQgcmV0dXJuZWQgYW4gZXJyb3IpLgogICoKICAqIFJQQyBzZXJ2aWNlcyBpbnZva2UgdGhpcyBmdW5jdGlvbiB0byBhZHZlcnRpc2UgdGhlaXIgY29udGFjdAogICogaW5mb3JtYXRpb24gdmlhIHRoZSBzeXN0ZW0ncyBycGNiaW5kIGRhZW1vbi4gIFJQQyBzZXJ2aWNlcwpAQCAtMzQyLDE1ICszNDYsNiBAQAogICogdG8gemVyby4gIENhbGxlcnMgcGFzcyBhIG5ldGlkIG9mICIiIHRvIHVucmVnaXN0ZXIgYWxsCiAgKiB0cmFuc3BvcnQgbmV0aWRzIGFzc29jaWF0ZWQgd2l0aCBbcHJvZ3JhbSwgdmVyc2lvbiwgYWRkcmVzc10uCiAgKgotICogUmV0dXJucyB6ZXJvIGlmIHRoZSByZWdpc3RyYXRpb24gcmVxdWVzdCB3YXMgZGlzcGF0Y2hlZAotICogc3VjY2Vzc2Z1bGx5IGFuZCBhIHJlcGx5IHdhcyByZWNlaXZlZC4gIFRoZSBycGNiaW5kIGRhZW1vbidzCi0gKiByZXN1bHQgY29kZSBpcyBzdG9yZWQgaW4gKnJlc3VsdC4KLSAqCi0gKiBSZXR1cm5zIGFuIGVycm5vIHZhbHVlIGFuZCBzZXRzICpyZXN1bHQgdG8gemVybyBpZiB0aGVyZSB3YXMKLSAqIHNvbWUgcHJvYmxlbSB0aGF0IHByZXZlbnRlZCB0aGUgcnBjYmluZCByZXF1ZXN0IGZyb20gYmVpbmcKLSAqIGRpc3BhdGNoZWQsIG9yIGlmIHRoZSBycGNiaW5kIGRhZW1vbiBkaWQgbm90IHJlc3BvbmQgd2l0aGluCi0gKiB0aGUgdGltZW91dC4KLSAqCiAgKiBUaGlzIGZ1bmN0aW9uIHVzZXMgcnBjYmluZCBwcm90b2NvbCB2ZXJzaW9uIDQgdG8gY29udGFjdCB0aGUKICAqIGxvY2FsIHJwY2JpbmQgZGFlbW9uLiAgVGhlIGxvY2FsIHJwY2JpbmQgZGFlbW9uIG11c3Qgc3VwcG9ydAogICogdmVyc2lvbiA0IG9mIHRoZSBycGNiaW5kIHByb3RvY29sIGluIG9yZGVyIGZvciB0aGVzZSBmdW5jdGlvbnMKQEAgLTM3Miw4ICszNjcsNyBAQAogICogYWR2ZXJ0aXNlcyB0aGUgc2VydmljZSBvbiBhbGwgSVB2NCBhbmQgSVB2NiBhZGRyZXNzZXMuCiAgKi8KIGludCBycGNiX3Y0X3JlZ2lzdGVyKGNvbnN0IHUzMiBwcm9ncmFtLCBjb25zdCB1MzIgdmVyc2lvbiwKLQkJICAgICBjb25zdCBzdHJ1Y3Qgc29ja2FkZHIgKmFkZHJlc3MsIGNvbnN0IGNoYXIgKm5ldGlkLAotCQkgICAgIGludCAqcmVzdWx0KQorCQkgICAgIGNvbnN0IHN0cnVjdCBzb2NrYWRkciAqYWRkcmVzcywgY29uc3QgY2hhciAqbmV0aWQpCiB7CiAJc3RydWN0IHJwY2JpbmRfYXJncyBtYXAgPSB7CiAJCS5yX3Byb2cJCT0gcHJvZ3JhbSwKQEAgLTM4MywxMSArMzc3LDggQEAKIAl9OwogCXN0cnVjdCBycGNfbWVzc2FnZSBtc2cgPSB7CiAJCS5ycGNfYXJncAk9ICZtYXAsCi0JCS5ycGNfcmVzcAk9IHJlc3VsdCwKIAl9OwogCi0JKnJlc3VsdCA9IDA7Ci0KIAlzd2l0Y2ggKGFkZHJlc3MtPnNhX2ZhbWlseSkgewogCWNhc2UgQUZfSU5FVDoKIAkJcmV0dXJuIHJwY2JfcmVnaXN0ZXJfbmV0aWQ0KChzdHJ1Y3Qgc29ja2FkZHJfaW4gKilhZGRyZXNzLApAQCAtNDY5LDYgKzQ2MCwyOCBAQAogCXJldHVybiBycGNfcnVuX3Rhc2soJnRhc2tfc2V0dXBfZGF0YSk7CiB9CiAKKy8qCisgKiBJbiB0aGUgY2FzZSB3aGVyZSBycGMgY2xpZW50cyBoYXZlIGJlZW4gY2xvbmVkLCB3ZSB3YW50IHRvIG1ha2UKKyAqIHN1cmUgdGhhdCB3ZSB1c2UgdGhlIHByb2dyYW0gbnVtYmVyL3ZlcnNpb24gZXRjIG9mIHRoZSBhY3R1YWwKKyAqIG93bmVyIG9mIHRoZSB4cHJ0LiBUbyBkbyBzbywgd2Ugd2FsayBiYWNrIHVwIHRoZSB0cmVlIG9mIHBhcmVudHMKKyAqIHRvIGZpbmQgd2hvZXZlciBjcmVhdGVkIHRoZSB0cmFuc3BvcnQgYW5kL29yIHdob2V2ZXIgaGFzIHRoZQorICogYXV0b2JpbmQgZmxhZyBzZXQuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgcnBjX2NsbnQgKnJwY2JfZmluZF90cmFuc3BvcnRfb3duZXIoc3RydWN0IHJwY19jbG50ICpjbG50KQoreworCXN0cnVjdCBycGNfY2xudCAqcGFyZW50ID0gY2xudC0+Y2xfcGFyZW50OworCisJd2hpbGUgKHBhcmVudCAhPSBjbG50KSB7CisJCWlmIChwYXJlbnQtPmNsX3hwcnQgIT0gY2xudC0+Y2xfeHBydCkKKwkJCWJyZWFrOworCQlpZiAoY2xudC0+Y2xfYXV0b2JpbmQpCisJCQlicmVhazsKKwkJY2xudCA9IHBhcmVudDsKKwkJcGFyZW50ID0gcGFyZW50LT5jbF9wYXJlbnQ7CisJfQorCXJldHVybiBjbG50OworfQorCiAvKioKICAqIHJwY2JfZ2V0cG9ydF9hc3luYyAtIG9idGFpbiB0aGUgcG9ydCBmb3IgYSBnaXZlbiBSUEMgc2VydmljZSBvbiBhIGdpdmVuIGhvc3QKICAqIEB0YXNrOiB0YXNrIHRoYXQgaXMgd2FpdGluZyBmb3IgcG9ydG1hcHBlciByZXF1ZXN0CkBAIC00NzgsMTAgKzQ5MSwxMCBAQAogICovCiB2b2lkIHJwY2JfZ2V0cG9ydF9hc3luYyhzdHJ1Y3QgcnBjX3Rhc2sgKnRhc2spCiB7Ci0Jc3RydWN0IHJwY19jbG50ICpjbG50ID0gdGFzay0+dGtfY2xpZW50OworCXN0cnVjdCBycGNfY2xudCAqY2xudDsKIAlzdHJ1Y3QgcnBjX3Byb2NpbmZvICpwcm9jOwogCXUzMiBiaW5kX3ZlcnNpb247Ci0Jc3RydWN0IHJwY194cHJ0ICp4cHJ0ID0gdGFzay0+dGtfeHBydDsKKwlzdHJ1Y3QgcnBjX3hwcnQgKnhwcnQ7CiAJc3RydWN0IHJwY19jbG50CSpycGNiX2NsbnQ7CiAJc3RhdGljIHN0cnVjdCBycGNiaW5kX2FyZ3MgKm1hcDsKIAlzdHJ1Y3QgcnBjX3Rhc2sJKmNoaWxkOwpAQCAtNDkwLDEzICs1MDMsMTMgQEAKIAlzaXplX3Qgc2FsZW47CiAJaW50IHN0YXR1czsKIAorCWNsbnQgPSBycGNiX2ZpbmRfdHJhbnNwb3J0X293bmVyKHRhc2stPnRrX2NsaWVudCk7CisJeHBydCA9IGNsbnQtPmNsX3hwcnQ7CisKIAlkcHJpbnRrKCJSUEM6ICU1dSAlcyglcywgJXUsICV1LCAlZClcbiIsCiAJCXRhc2stPnRrX3BpZCwgX19mdW5jX18sCiAJCWNsbnQtPmNsX3NlcnZlciwgY2xudC0+Y2xfcHJvZywgY2xudC0+Y2xfdmVycywgeHBydC0+cHJvdCk7CiAKLQkvKiBBdXRvYmluZCBvbiBjbG9uZWQgcnBjIGNsaWVudHMgaXMgZGlzY291cmFnZWQgKi8KLQlCVUdfT04oY2xudC0+Y2xfcGFyZW50ICE9IGNsbnQpOwotCiAJLyogUHV0IHNlbGYgb24gdGhlIHdhaXQgcXVldWUgdG8gZW5zdXJlIHdlIGdldCBub3RpZmllZCBpZgogCSAqIHNvbWUgb3RoZXIgdGFzayBpcyBhbHJlYWR5IGF0dGVtcHRpbmcgdG8gYmluZCB0aGUgcG9ydCAqLwogCXJwY19zbGVlcF9vbigmeHBydC0+YmluZGluZywgdGFzaywgTlVMTCk7CkBAIC01NTgsNyArNTcxLDcgQEAKIAkJc3RhdHVzID0gLUVOT01FTTsKIAkJZHByaW50aygiUlBDOiAlNXUgJXM6IG5vIG1lbW9yeSBhdmFpbGFibGVcbiIsCiAJCQl0YXNrLT50a19waWQsIF9fZnVuY19fKTsKLQkJZ290byBiYWlsb3V0X25vZnJlZTsKKwkJZ290byBiYWlsb3V0X3JlbGVhc2VfY2xpZW50OwogCX0KIAltYXAtPnJfcHJvZyA9IGNsbnQtPmNsX3Byb2c7CiAJbWFwLT5yX3ZlcnMgPSBjbG50LT5jbF92ZXJzOwpAQCAtNTc4LDExICs1OTEsMTMgQEAKIAkJCXRhc2stPnRrX3BpZCwgX19mdW5jX18pOwogCQlyZXR1cm47CiAJfQotCXJwY19wdXRfdGFzayhjaGlsZCk7CiAKLQl0YXNrLT50a194cHJ0LT5zdGF0LmJpbmRfY291bnQrKzsKKwl4cHJ0LT5zdGF0LmJpbmRfY291bnQrKzsKKwlycGNfcHV0X3Rhc2soY2hpbGQpOwogCXJldHVybjsKIAorYmFpbG91dF9yZWxlYXNlX2NsaWVudDoKKwlycGNfcmVsZWFzZV9jbGllbnQocnBjYl9jbG50KTsKIGJhaWxvdXRfbm9mcmVlOgogCXJwY2Jfd2FrZV9ycGNiaW5kX3dhaXRlcnMoeHBydCwgc3RhdHVzKTsKIAl0YXNrLT50a19zdGF0dXMgPSBzdGF0dXM7CkBAIC02MzMsNyArNjQ4LDcgQEAKIHN0YXRpYyBpbnQgcnBjYl9lbmNvZGVfbWFwcGluZyhzdHJ1Y3QgcnBjX3Jxc3QgKnJlcSwgX19iZTMyICpwLAogCQkJICAgICAgIHN0cnVjdCBycGNiaW5kX2FyZ3MgKnJwY2IpCiB7Ci0JZHByaW50aygiUlBDOiAgICAgICBycGNiX2VuY29kZV9tYXBwaW5nKCV1LCAldSwgJWQsICV1KVxuIiwKKwlkcHJpbnRrKCJSUEM6ICAgICAgIGVuY29kaW5nIHJwY2IgcmVxdWVzdCAoJXUsICV1LCAlZCwgJXUpXG4iLAogCQkJcnBjYi0+cl9wcm9nLCBycGNiLT5yX3ZlcnMsIHJwY2ItPnJfcHJvdCwgcnBjYi0+cl9wb3J0KTsKIAkqcCsrID0gaHRvbmwocnBjYi0+cl9wcm9nKTsKIAkqcCsrID0gaHRvbmwocnBjYi0+cl92ZXJzKTsKQEAgLTY0OCw3ICs2NjMsNyBAQAogCQkJICAgICAgIHVuc2lnbmVkIHNob3J0ICpwb3J0cCkKIHsKIAkqcG9ydHAgPSAodW5zaWduZWQgc2hvcnQpIG50b2hsKCpwKyspOwotCWRwcmludGsoIlJQQzogICAgICAgcnBjYl9kZWNvZGVfZ2V0cG9ydCByZXN1bHQgJXVcbiIsCisJZHByaW50aygiUlBDOiAgICAgICBycGNiIGdldHBvcnQgcmVzdWx0OiAldVxuIiwKIAkJCSpwb3J0cCk7CiAJcmV0dXJuIDA7CiB9CkBAIC02NTcsNyArNjcyLDcgQEAKIAkJCSAgIHVuc2lnbmVkIGludCAqYm9vbHApCiB7CiAJKmJvb2xwID0gKHVuc2lnbmVkIGludCkgbnRvaGwoKnArKyk7Ci0JZHByaW50aygiUlBDOiAgICAgICBycGNiX2RlY29kZV9zZXQ6IGNhbGwgJXNcbiIsCisJZHByaW50aygiUlBDOiAgICAgICBycGNiIHNldC91bnNldCBjYWxsICVzXG4iLAogCQkJKCpib29scCA/ICJzdWNjZWVkZWQiIDogImZhaWxlZCIpKTsKIAlyZXR1cm4gMDsKIH0KQEAgLTY2NSw3ICs2ODAsNyBAQAogc3RhdGljIGludCBycGNiX2VuY29kZV9nZXRhZGRyKHN0cnVjdCBycGNfcnFzdCAqcmVxLCBfX2JlMzIgKnAsCiAJCQkgICAgICAgc3RydWN0IHJwY2JpbmRfYXJncyAqcnBjYikKIHsKLQlkcHJpbnRrKCJSUEM6ICAgICAgIHJwY2JfZW5jb2RlX2dldGFkZHIoJXUsICV1LCAlcylcbiIsCisJZHByaW50aygiUlBDOiAgICAgICBlbmNvZGluZyBycGNiIHJlcXVlc3QgKCV1LCAldSwgJXMpXG4iLAogCQkJcnBjYi0+cl9wcm9nLCBycGNiLT5yX3ZlcnMsIHJwY2ItPnJfYWRkcik7CiAJKnArKyA9IGh0b25sKHJwY2ItPnJfcHJvZyk7CiAJKnArKyA9IGh0b25sKHJwY2ItPnJfdmVycyk7CmRpZmYgLS1naXQgYS9uZXQvc3VucnBjL3N2Yy5jIGIvbmV0L3N1bnJwYy9zdmMuYwppbmRleCA1YTMyY2I3Li41NGM5OGQ4IDEwMDY0NAotLS0gYS9uZXQvc3VucnBjL3N2Yy5jCisrKyBiL25ldC9zdW5ycGMvc3ZjLmMKQEAgLTI4LDYgKzI4LDggQEAKIAogI2RlZmluZSBSUENEQkdfRkFDSUxJVFkJUlBDREJHX1NWQ0RTUAogCitzdGF0aWMgdm9pZCBzdmNfdW5yZWdpc3Rlcihjb25zdCBzdHJ1Y3Qgc3ZjX3NlcnYgKnNlcnYpOworCiAjZGVmaW5lIHN2Y19zZXJ2X2lzX3Bvb2xlZChzZXJ2KSAgICAoKHNlcnYpLT5zdl9mdW5jdGlvbikKIAogLyoKQEAgLTM1Nyw3ICszNTksNyBAQAogICovCiBzdGF0aWMgc3RydWN0IHN2Y19zZXJ2ICoKIF9fc3ZjX2NyZWF0ZShzdHJ1Y3Qgc3ZjX3Byb2dyYW0gKnByb2csIHVuc2lnbmVkIGludCBidWZzaXplLCBpbnQgbnBvb2xzLAotCSAgIHZvaWQgKCpzaHV0ZG93bikoc3RydWN0IHN2Y19zZXJ2ICpzZXJ2KSkKKwkgICBzYV9mYW1pbHlfdCBmYW1pbHksIHZvaWQgKCpzaHV0ZG93bikoc3RydWN0IHN2Y19zZXJ2ICpzZXJ2KSkKIHsKIAlzdHJ1Y3Qgc3ZjX3NlcnYJKnNlcnY7CiAJdW5zaWduZWQgaW50IHZlcnM7CkBAIC0zNjYsNiArMzY4LDcgQEAKIAogCWlmICghKHNlcnYgPSBremFsbG9jKHNpemVvZigqc2VydiksIEdGUF9LRVJORUwpKSkKIAkJcmV0dXJuIE5VTEw7CisJc2Vydi0+c3ZfZmFtaWx5ICAgID0gZmFtaWx5OwogCXNlcnYtPnN2X25hbWUgICAgICA9IHByb2ctPnBnX25hbWU7CiAJc2Vydi0+c3ZfcHJvZ3JhbSAgID0gcHJvZzsKIAlzZXJ2LT5zdl9ucnRocmVhZHMgPSAxOwpAQCAtNDE2LDMwICs0MTksMjkgQEAKIAkJc3Bpbl9sb2NrX2luaXQoJnBvb2wtPnNwX2xvY2spOwogCX0KIAotCiAJLyogUmVtb3ZlIGFueSBzdGFsZSBwb3J0bWFwIHJlZ2lzdHJhdGlvbnMgKi8KLQlzdmNfcmVnaXN0ZXIoc2VydiwgMCwgMCk7CisJc3ZjX3VucmVnaXN0ZXIoc2Vydik7CiAKIAlyZXR1cm4gc2VydjsKIH0KIAogc3RydWN0IHN2Y19zZXJ2ICoKIHN2Y19jcmVhdGUoc3RydWN0IHN2Y19wcm9ncmFtICpwcm9nLCB1bnNpZ25lZCBpbnQgYnVmc2l6ZSwKLQkJdm9pZCAoKnNodXRkb3duKShzdHJ1Y3Qgc3ZjX3NlcnYgKnNlcnYpKQorCQlzYV9mYW1pbHlfdCBmYW1pbHksIHZvaWQgKCpzaHV0ZG93bikoc3RydWN0IHN2Y19zZXJ2ICpzZXJ2KSkKIHsKLQlyZXR1cm4gX19zdmNfY3JlYXRlKHByb2csIGJ1ZnNpemUsIC8qbnBvb2xzKi8xLCBzaHV0ZG93bik7CisJcmV0dXJuIF9fc3ZjX2NyZWF0ZShwcm9nLCBidWZzaXplLCAvKm5wb29scyovMSwgZmFtaWx5LCBzaHV0ZG93bik7CiB9CiBFWFBPUlRfU1lNQk9MKHN2Y19jcmVhdGUpOwogCiBzdHJ1Y3Qgc3ZjX3NlcnYgKgogc3ZjX2NyZWF0ZV9wb29sZWQoc3RydWN0IHN2Y19wcm9ncmFtICpwcm9nLCB1bnNpZ25lZCBpbnQgYnVmc2l6ZSwKLQkJdm9pZCAoKnNodXRkb3duKShzdHJ1Y3Qgc3ZjX3NlcnYgKnNlcnYpLAorCQkgIHNhX2ZhbWlseV90IGZhbWlseSwgdm9pZCAoKnNodXRkb3duKShzdHJ1Y3Qgc3ZjX3NlcnYgKnNlcnYpLAogCQkgIHN2Y190aHJlYWRfZm4gZnVuYywgc3RydWN0IG1vZHVsZSAqbW9kKQogewogCXN0cnVjdCBzdmNfc2VydiAqc2VydjsKIAl1bnNpZ25lZCBpbnQgbnBvb2xzID0gc3ZjX3Bvb2xfbWFwX2dldCgpOwogCi0Jc2VydiA9IF9fc3ZjX2NyZWF0ZShwcm9nLCBidWZzaXplLCBucG9vbHMsIHNodXRkb3duKTsKKwlzZXJ2ID0gX19zdmNfY3JlYXRlKHByb2csIGJ1ZnNpemUsIG5wb29scywgZmFtaWx5LCBzaHV0ZG93bik7CiAKIAlpZiAoc2VydiAhPSBOVUxMKSB7CiAJCXNlcnYtPnN2X2Z1bmN0aW9uID0gZnVuYzsKQEAgLTQ4Niw4ICs0ODgsNyBAQAogCWlmIChzdmNfc2Vydl9pc19wb29sZWQoc2VydikpCiAJCXN2Y19wb29sX21hcF9wdXQoKTsKIAotCS8qIFVucmVnaXN0ZXIgc2VydmljZSB3aXRoIHRoZSBwb3J0bWFwcGVyICovCi0Jc3ZjX3JlZ2lzdGVyKHNlcnYsIDAsIDApOworCXN2Y191bnJlZ2lzdGVyKHNlcnYpOwogCWtmcmVlKHNlcnYtPnN2X3Bvb2xzKTsKIAlrZnJlZShzZXJ2KTsKIH0KQEAgLTcxOCw1NSArNzE5LDI0NSBAQAogfQogRVhQT1JUX1NZTUJPTChzdmNfZXhpdF90aHJlYWQpOwogCisjaWZkZWYgQ09ORklHX1NVTlJQQ19SRUdJU1RFUl9WNAorCiAvKgotICogUmVnaXN0ZXIgYW4gUlBDIHNlcnZpY2Ugd2l0aCB0aGUgbG9jYWwgcG9ydG1hcHBlci4KLSAqIFRvIHVucmVnaXN0ZXIgYSBzZXJ2aWNlLCBjYWxsIHRoaXMgcm91dGluZSB3aXRoCi0gKiBwcm90byBhbmQgcG9ydCA9PSAwLgorICogUmVnaXN0ZXIgYW4gImluZXQiIHByb3RvY29sIGZhbWlseSBuZXRpZCB3aXRoIHRoZSBsb2NhbAorICogcnBjYmluZCBkYWVtb24gdmlhIGFuIHJwY2JpbmQgdjQgU0VUIHJlcXVlc3QuCisgKgorICogTm8gbmV0Y29uZmlnIGluZnJhc3RydWN0dXJlIGlzIGF2YWlsYWJsZSBpbiB0aGUga2VybmVsLCBzbworICogd2UgbWFwIElQXyBwcm90b2NvbCBudW1iZXJzIHRvIG5ldGlkcyBieSBoYW5kLgorICoKKyAqIFJldHVybnMgemVybyBvbiBzdWNjZXNzOyBhIG5lZ2F0aXZlIGVycm5vIHZhbHVlIGlzIHJldHVybmVkCisgKiBpZiBhbnkgZXJyb3Igb2NjdXJzLgogICovCi1pbnQKLXN2Y19yZWdpc3RlcihzdHJ1Y3Qgc3ZjX3NlcnYgKnNlcnYsIGludCBwcm90bywgdW5zaWduZWQgc2hvcnQgcG9ydCkKK3N0YXRpYyBpbnQgX19zdmNfcnBjYl9yZWdpc3RlcjQoY29uc3QgdTMyIHByb2dyYW0sIGNvbnN0IHUzMiB2ZXJzaW9uLAorCQkJCWNvbnN0IHVuc2lnbmVkIHNob3J0IHByb3RvY29sLAorCQkJCWNvbnN0IHVuc2lnbmVkIHNob3J0IHBvcnQpCit7CisJc3RydWN0IHNvY2thZGRyX2luIHNpbiA9IHsKKwkJLnNpbl9mYW1pbHkJCT0gQUZfSU5FVCwKKwkJLnNpbl9hZGRyLnNfYWRkcgk9IGh0b25sKElOQUREUl9BTlkpLAorCQkuc2luX3BvcnQJCT0gaHRvbnMocG9ydCksCisJfTsKKwljaGFyICpuZXRpZDsKKworCXN3aXRjaCAocHJvdG9jb2wpIHsKKwljYXNlIElQUFJPVE9fVURQOgorCQluZXRpZCA9IFJQQ0JJTkRfTkVUSURfVURQOworCQlicmVhazsKKwljYXNlIElQUFJPVE9fVENQOgorCQluZXRpZCA9IFJQQ0JJTkRfTkVUSURfVENQOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVQUk9UT05PU1VQUE9SVDsKKwl9CisKKwlyZXR1cm4gcnBjYl92NF9yZWdpc3Rlcihwcm9ncmFtLCB2ZXJzaW9uLAorCQkJCShzdHJ1Y3Qgc29ja2FkZHIgKikmc2luLCBuZXRpZCk7Cit9CisKKy8qCisgKiBSZWdpc3RlciBhbiAiaW5ldDYiIHByb3RvY29sIGZhbWlseSBuZXRpZCB3aXRoIHRoZSBsb2NhbAorICogcnBjYmluZCBkYWVtb24gdmlhIGFuIHJwY2JpbmQgdjQgU0VUIHJlcXVlc3QuCisgKgorICogTm8gbmV0Y29uZmlnIGluZnJhc3RydWN0dXJlIGlzIGF2YWlsYWJsZSBpbiB0aGUga2VybmVsLCBzbworICogd2UgbWFwIElQXyBwcm90b2NvbCBudW1iZXJzIHRvIG5ldGlkcyBieSBoYW5kLgorICoKKyAqIFJldHVybnMgemVybyBvbiBzdWNjZXNzOyBhIG5lZ2F0aXZlIGVycm5vIHZhbHVlIGlzIHJldHVybmVkCisgKiBpZiBhbnkgZXJyb3Igb2NjdXJzLgorICovCitzdGF0aWMgaW50IF9fc3ZjX3JwY2JfcmVnaXN0ZXI2KGNvbnN0IHUzMiBwcm9ncmFtLCBjb25zdCB1MzIgdmVyc2lvbiwKKwkJCQljb25zdCB1bnNpZ25lZCBzaG9ydCBwcm90b2NvbCwKKwkJCQljb25zdCB1bnNpZ25lZCBzaG9ydCBwb3J0KQoreworCXN0cnVjdCBzb2NrYWRkcl9pbjYgc2luNiA9IHsKKwkJLnNpbjZfZmFtaWx5CQk9IEFGX0lORVQ2LAorCQkuc2luNl9hZGRyCQk9IElONkFERFJfQU5ZX0lOSVQsCisJCS5zaW42X3BvcnQJCT0gaHRvbnMocG9ydCksCisJfTsKKwljaGFyICpuZXRpZDsKKworCXN3aXRjaCAocHJvdG9jb2wpIHsKKwljYXNlIElQUFJPVE9fVURQOgorCQluZXRpZCA9IFJQQ0JJTkRfTkVUSURfVURQNjsKKwkJYnJlYWs7CisJY2FzZSBJUFBST1RPX1RDUDoKKwkJbmV0aWQgPSBSUENCSU5EX05FVElEX1RDUDY7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRVBST1RPTk9TVVBQT1JUOworCX0KKworCXJldHVybiBycGNiX3Y0X3JlZ2lzdGVyKHByb2dyYW0sIHZlcnNpb24sCisJCQkJKHN0cnVjdCBzb2NrYWRkciAqKSZzaW42LCBuZXRpZCk7Cit9CisKKy8qCisgKiBSZWdpc3RlciBhIGtlcm5lbCBSUEMgc2VydmljZSB2aWEgcnBjYmluZCB2ZXJzaW9uIDQuCisgKgorICogUmV0dXJucyB6ZXJvIG9uIHN1Y2Nlc3M7IGEgbmVnYXRpdmUgZXJybm8gdmFsdWUgaXMgcmV0dXJuZWQKKyAqIGlmIGFueSBlcnJvciBvY2N1cnMuCisgKi8KK3N0YXRpYyBpbnQgX19zdmNfcmVnaXN0ZXIoY29uc3QgdTMyIHByb2dyYW0sIGNvbnN0IHUzMiB2ZXJzaW9uLAorCQkJICBjb25zdCBzYV9mYW1pbHlfdCBmYW1pbHksCisJCQkgIGNvbnN0IHVuc2lnbmVkIHNob3J0IHByb3RvY29sLAorCQkJICBjb25zdCB1bnNpZ25lZCBzaG9ydCBwb3J0KQoreworCWludCBlcnJvcjsKKworCXN3aXRjaCAoZmFtaWx5KSB7CisJY2FzZSBBRl9JTkVUOgorCQlyZXR1cm4gX19zdmNfcnBjYl9yZWdpc3RlcjQocHJvZ3JhbSwgdmVyc2lvbiwKKwkJCQkJCXByb3RvY29sLCBwb3J0KTsKKwljYXNlIEFGX0lORVQ2OgorCQllcnJvciA9IF9fc3ZjX3JwY2JfcmVnaXN0ZXI2KHByb2dyYW0sIHZlcnNpb24sCisJCQkJCQlwcm90b2NvbCwgcG9ydCk7CisJCWlmIChlcnJvciA8IDApCisJCQlyZXR1cm4gZXJyb3I7CisKKwkJLyoKKwkJICogV29yayBhcm91bmQgYnVnIGluIHNvbWUgdmVyc2lvbnMgb2YgTGludXggcnBjYmluZAorCQkgKiB3aGljaCBkb24ndCBhbGxvdyByZWdpc3RyYXRpb24gb2YgYm90aCBpbmV0IGFuZAorCQkgKiBpbmV0NiBuZXRpZHMuCisJCSAqCisJCSAqIEVycm9yIHJldHVybiBpZ25vcmVkIGZvciBub3cuCisJCSAqLworCQlfX3N2Y19ycGNiX3JlZ2lzdGVyNChwcm9ncmFtLCB2ZXJzaW9uLAorCQkJCQkJcHJvdG9jb2wsIHBvcnQpOworCQlyZXR1cm4gMDsKKwl9CisKKwlyZXR1cm4gLUVBRk5PU1VQUE9SVDsKK30KKworI2Vsc2UJLyogQ09ORklHX1NVTlJQQ19SRUdJU1RFUl9WNCAqLworCisvKgorICogUmVnaXN0ZXIgYSBrZXJuZWwgUlBDIHNlcnZpY2UgdmlhIHJwY2JpbmQgdmVyc2lvbiAyLgorICoKKyAqIFJldHVybnMgemVybyBvbiBzdWNjZXNzOyBhIG5lZ2F0aXZlIGVycm5vIHZhbHVlIGlzIHJldHVybmVkCisgKiBpZiBhbnkgZXJyb3Igb2NjdXJzLgorICovCitzdGF0aWMgaW50IF9fc3ZjX3JlZ2lzdGVyKGNvbnN0IHUzMiBwcm9ncmFtLCBjb25zdCB1MzIgdmVyc2lvbiwKKwkJCSAgc2FfZmFtaWx5X3QgZmFtaWx5LAorCQkJICBjb25zdCB1bnNpZ25lZCBzaG9ydCBwcm90b2NvbCwKKwkJCSAgY29uc3QgdW5zaWduZWQgc2hvcnQgcG9ydCkKK3sKKwlpZiAoZmFtaWx5ICE9IEFGX0lORVQpCisJCXJldHVybiAtRUFGTk9TVVBQT1JUOworCisJcmV0dXJuIHJwY2JfcmVnaXN0ZXIocHJvZ3JhbSwgdmVyc2lvbiwgcHJvdG9jb2wsIHBvcnQpOworfQorCisjZW5kaWYgLyogQ09ORklHX1NVTlJQQ19SRUdJU1RFUl9WNCAqLworCisvKioKKyAqIHN2Y19yZWdpc3RlciAtIHJlZ2lzdGVyIGFuIFJQQyBzZXJ2aWNlIHdpdGggdGhlIGxvY2FsIHBvcnRtYXBwZXIKKyAqIEBzZXJ2OiBzdmNfc2VydiBzdHJ1Y3QgZm9yIHRoZSBzZXJ2aWNlIHRvIHJlZ2lzdGVyCisgKiBAcHJvdG86IHRyYW5zcG9ydCBwcm90b2NvbCBudW1iZXIgdG8gYWR2ZXJ0aXNlCisgKiBAcG9ydDogcG9ydCB0byBhZHZlcnRpc2UKKyAqCisgKiBTZXJ2aWNlIGlzIHJlZ2lzdGVyZWQgZm9yIGFueSBhZGRyZXNzIGluIHNlcnYncyBhZGRyZXNzIGZhbWlseQorICovCitpbnQgc3ZjX3JlZ2lzdGVyKGNvbnN0IHN0cnVjdCBzdmNfc2VydiAqc2VydiwgY29uc3QgdW5zaWduZWQgc2hvcnQgcHJvdG8sCisJCSBjb25zdCB1bnNpZ25lZCBzaG9ydCBwb3J0KQogewogCXN0cnVjdCBzdmNfcHJvZ3JhbQkqcHJvZ3A7Ci0JdW5zaWduZWQgbG9uZwkJZmxhZ3M7CiAJdW5zaWduZWQgaW50CQlpOwotCWludAkJCWVycm9yID0gMCwgZHVtbXk7CisJaW50CQkJZXJyb3IgPSAwOwogCi0JaWYgKCFwb3J0KQotCQljbGVhcl90aHJlYWRfZmxhZyhUSUZfU0lHUEVORElORyk7CisJQlVHX09OKHByb3RvID09IDAgJiYgcG9ydCA9PSAwKTsKIAogCWZvciAocHJvZ3AgPSBzZXJ2LT5zdl9wcm9ncmFtOyBwcm9ncDsgcHJvZ3AgPSBwcm9ncC0+cGdfbmV4dCkgewogCQlmb3IgKGkgPSAwOyBpIDwgcHJvZ3AtPnBnX252ZXJzOyBpKyspIHsKIAkJCWlmIChwcm9ncC0+cGdfdmVyc1tpXSA9PSBOVUxMKQogCQkJCWNvbnRpbnVlOwogCi0JCQlkcHJpbnRrKCJzdmM6IHN2Y19yZWdpc3RlciglcywgJXMsICVkLCAlZCklc1xuIiwKKwkJCWRwcmludGsoInN2Yzogc3ZjX3JlZ2lzdGVyKCVzdiVkLCAlcywgJXUsICV1KSVzXG4iLAogCQkJCQlwcm9ncC0+cGdfbmFtZSwKKwkJCQkJaSwKIAkJCQkJcHJvdG8gPT0gSVBQUk9UT19VRFA/ICAidWRwIiA6ICJ0Y3AiLAogCQkJCQlwb3J0LAotCQkJCQlpLAorCQkJCQlzZXJ2LT5zdl9mYW1pbHksCiAJCQkJCXByb2dwLT5wZ192ZXJzW2ldLT52c19oaWRkZW4/CiAJCQkJCQkiIChidXQgbm90IHRlbGxpbmcgcG9ydG1hcCkiIDogIiIpOwogCiAJCQlpZiAocHJvZ3AtPnBnX3ZlcnNbaV0tPnZzX2hpZGRlbikKIAkJCQljb250aW51ZTsKIAotCQkJZXJyb3IgPSBycGNiX3JlZ2lzdGVyKHByb2dwLT5wZ19wcm9nLCBpLCBwcm90bywgcG9ydCwgJmR1bW15KTsKKwkJCWVycm9yID0gX19zdmNfcmVnaXN0ZXIocHJvZ3AtPnBnX3Byb2csIGksCisJCQkJCQlzZXJ2LT5zdl9mYW1pbHksIHByb3RvLCBwb3J0KTsKIAkJCWlmIChlcnJvciA8IDApCiAJCQkJYnJlYWs7Ci0JCQlpZiAocG9ydCAmJiAhZHVtbXkpIHsKLQkJCQllcnJvciA9IC1FQUNDRVM7Ci0JCQkJYnJlYWs7Ci0JCQl9CiAJCX0KIAl9CiAKLQlpZiAoIXBvcnQpIHsKLQkJc3Bpbl9sb2NrX2lycXNhdmUoJmN1cnJlbnQtPnNpZ2hhbmQtPnNpZ2xvY2ssIGZsYWdzKTsKLQkJcmVjYWxjX3NpZ3BlbmRpbmcoKTsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY3VycmVudC0+c2lnaGFuZC0+c2lnbG9jaywgZmxhZ3MpOworCXJldHVybiBlcnJvcjsKK30KKworI2lmZGVmIENPTkZJR19TVU5SUENfUkVHSVNURVJfVjQKKworc3RhdGljIHZvaWQgX19zdmNfdW5yZWdpc3Rlcihjb25zdCB1MzIgcHJvZ3JhbSwgY29uc3QgdTMyIHZlcnNpb24sCisJCQkgICAgIGNvbnN0IGNoYXIgKnByb2duYW1lKQoreworCXN0cnVjdCBzb2NrYWRkcl9pbjYgc2luNiA9IHsKKwkJLnNpbjZfZmFtaWx5CQk9IEFGX0lORVQ2LAorCQkuc2luNl9hZGRyCQk9IElONkFERFJfQU5ZX0lOSVQsCisJCS5zaW42X3BvcnQJCT0gMCwKKwl9OworCWludCBlcnJvcjsKKworCWVycm9yID0gcnBjYl92NF9yZWdpc3Rlcihwcm9ncmFtLCB2ZXJzaW9uLAorCQkJCShzdHJ1Y3Qgc29ja2FkZHIgKikmc2luNiwgIiIpOworCWRwcmludGsoInN2YzogJXMoJXN2JXUpLCBlcnJvciAlZFxuIiwKKwkJCV9fZnVuY19fLCBwcm9nbmFtZSwgdmVyc2lvbiwgZXJyb3IpOworfQorCisjZWxzZQkvKiBDT05GSUdfU1VOUlBDX1JFR0lTVEVSX1Y0ICovCisKK3N0YXRpYyB2b2lkIF9fc3ZjX3VucmVnaXN0ZXIoY29uc3QgdTMyIHByb2dyYW0sIGNvbnN0IHUzMiB2ZXJzaW9uLAorCQkJICAgICBjb25zdCBjaGFyICpwcm9nbmFtZSkKK3sKKwlpbnQgZXJyb3I7CisKKwllcnJvciA9IHJwY2JfcmVnaXN0ZXIocHJvZ3JhbSwgdmVyc2lvbiwgMCwgMCk7CisJZHByaW50aygic3ZjOiAlcyglc3YldSksIGVycm9yICVkXG4iLAorCQkJX19mdW5jX18sIHByb2duYW1lLCB2ZXJzaW9uLCBlcnJvcik7Cit9CisKKyNlbmRpZgkvKiBDT05GSUdfU1VOUlBDX1JFR0lTVEVSX1Y0ICovCisKKy8qCisgKiBBbGwgbmV0aWRzLCBiaW5kIGFkZHJlc3NlcyBhbmQgcG9ydHMgcmVnaXN0ZXJlZCBmb3IgW3Byb2dyYW0sIHZlcnNpb25dCisgKiBhcmUgcmVtb3ZlZCBmcm9tIHRoZSBsb2NhbCBycGNiaW5kIGRhdGFiYXNlIChpZiB0aGUgc2VydmljZSBpcyBub3QKKyAqIGhpZGRlbikgdG8gbWFrZSB3YXkgZm9yIGEgbmV3IGluc3RhbmNlIG9mIHRoZSBzZXJ2aWNlLgorICoKKyAqIFRoZSByZXN1bHQgb2YgdW5yZWdpc3RyYXRpb24gaXMgcmVwb3J0ZWQgdmlhIGRwcmludGsgZm9yIHRob3NlIHdobyB3YW50CisgKiB2ZXJpZmljYXRpb24gb2YgdGhlIHJlc3VsdCwgYnV0IGlzIG90aGVyd2lzZSBub3QgaW1wb3J0YW50LgorICovCitzdGF0aWMgdm9pZCBzdmNfdW5yZWdpc3Rlcihjb25zdCBzdHJ1Y3Qgc3ZjX3NlcnYgKnNlcnYpCit7CisJc3RydWN0IHN2Y19wcm9ncmFtICpwcm9ncDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVuc2lnbmVkIGludCBpOworCisJY2xlYXJfdGhyZWFkX2ZsYWcoVElGX1NJR1BFTkRJTkcpOworCisJZm9yIChwcm9ncCA9IHNlcnYtPnN2X3Byb2dyYW07IHByb2dwOyBwcm9ncCA9IHByb2dwLT5wZ19uZXh0KSB7CisJCWZvciAoaSA9IDA7IGkgPCBwcm9ncC0+cGdfbnZlcnM7IGkrKykgeworCQkJaWYgKHByb2dwLT5wZ192ZXJzW2ldID09IE5VTEwpCisJCQkJY29udGludWU7CisJCQlpZiAocHJvZ3AtPnBnX3ZlcnNbaV0tPnZzX2hpZGRlbikKKwkJCQljb250aW51ZTsKKworCQkJX19zdmNfdW5yZWdpc3Rlcihwcm9ncC0+cGdfcHJvZywgaSwgcHJvZ3AtPnBnX25hbWUpOworCQl9CiAJfQogCi0JcmV0dXJuIGVycm9yOworCXNwaW5fbG9ja19pcnFzYXZlKCZjdXJyZW50LT5zaWdoYW5kLT5zaWdsb2NrLCBmbGFncyk7CisJcmVjYWxjX3NpZ3BlbmRpbmcoKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjdXJyZW50LT5zaWdoYW5kLT5zaWdsb2NrLCBmbGFncyk7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9uZXQvc3VucnBjL3N2Y194cHJ0LmMgYi9uZXQvc3VucnBjL3N2Y194cHJ0LmMKaW5kZXggZTQ2YzgyNS4uYmY1YjVjZCAxMDA2NDQKLS0tIGEvbmV0L3N1bnJwYy9zdmNfeHBydC5jCisrKyBiL25ldC9zdW5ycGMvc3ZjX3hwcnQuYwpAQCAtMTU5LDE1ICsxNTksNDQgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHN2Y194cHJ0X2luaXQpOwogCi1pbnQgc3ZjX2NyZWF0ZV94cHJ0KHN0cnVjdCBzdmNfc2VydiAqc2VydiwgY2hhciAqeHBydF9uYW1lLCB1bnNpZ25lZCBzaG9ydCBwb3J0LAotCQkgICAgaW50IGZsYWdzKQorc3RhdGljIHN0cnVjdCBzdmNfeHBydCAqX19zdmNfeHBvX2NyZWF0ZShzdHJ1Y3Qgc3ZjX3hwcnRfY2xhc3MgKnhjbCwKKwkJCQkJIHN0cnVjdCBzdmNfc2VydiAqc2VydiwKKwkJCQkJIHVuc2lnbmVkIHNob3J0IHBvcnQsIGludCBmbGFncykKIHsKLQlzdHJ1Y3Qgc3ZjX3hwcnRfY2xhc3MgKnhjbDsKIAlzdHJ1Y3Qgc29ja2FkZHJfaW4gc2luID0gewogCQkuc2luX2ZhbWlseQkJPSBBRl9JTkVULAogCQkuc2luX2FkZHIuc19hZGRyCT0gaHRvbmwoSU5BRERSX0FOWSksCiAJCS5zaW5fcG9ydAkJPSBodG9ucyhwb3J0KSwKIAl9OworCXN0cnVjdCBzb2NrYWRkcl9pbjYgc2luNiA9IHsKKwkJLnNpbjZfZmFtaWx5CQk9IEFGX0lORVQ2LAorCQkuc2luNl9hZGRyCQk9IElONkFERFJfQU5ZX0lOSVQsCisJCS5zaW42X3BvcnQJCT0gaHRvbnMocG9ydCksCisJfTsKKwlzdHJ1Y3Qgc29ja2FkZHIgKnNhcDsKKwlzaXplX3QgbGVuOworCisJc3dpdGNoIChzZXJ2LT5zdl9mYW1pbHkpIHsKKwljYXNlIEFGX0lORVQ6CisJCXNhcCA9IChzdHJ1Y3Qgc29ja2FkZHIgKikmc2luOworCQlsZW4gPSBzaXplb2Yoc2luKTsKKwkJYnJlYWs7CisJY2FzZSBBRl9JTkVUNjoKKwkJc2FwID0gKHN0cnVjdCBzb2NrYWRkciAqKSZzaW42OworCQlsZW4gPSBzaXplb2Yoc2luNik7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiBFUlJfUFRSKC1FQUZOT1NVUFBPUlQpOworCX0KKworCXJldHVybiB4Y2wtPnhjbF9vcHMtPnhwb19jcmVhdGUoc2Vydiwgc2FwLCBsZW4sIGZsYWdzKTsKK30KKworaW50IHN2Y19jcmVhdGVfeHBydChzdHJ1Y3Qgc3ZjX3NlcnYgKnNlcnYsIGNoYXIgKnhwcnRfbmFtZSwgdW5zaWduZWQgc2hvcnQgcG9ydCwKKwkJICAgIGludCBmbGFncykKK3sKKwlzdHJ1Y3Qgc3ZjX3hwcnRfY2xhc3MgKnhjbDsKKwogCWRwcmludGsoInN2YzogY3JlYXRpbmcgdHJhbnNwb3J0ICVzWyVkXVxuIiwgeHBydF9uYW1lLCBwb3J0KTsKIAlzcGluX2xvY2soJnN2Y194cHJ0X2NsYXNzX2xvY2spOwogCWxpc3RfZm9yX2VhY2hfZW50cnkoeGNsLCAmc3ZjX3hwcnRfY2xhc3NfbGlzdCwgeGNsX2xpc3QpIHsKQEAgLTE4MCw5ICsyMDksNyBAQAogCQkJZ290byBlcnI7CiAKIAkJc3Bpbl91bmxvY2soJnN2Y194cHJ0X2NsYXNzX2xvY2spOwotCQluZXd4cHJ0ID0geGNsLT54Y2xfb3BzLT4KLQkJCXhwb19jcmVhdGUoc2VydiwgKHN0cnVjdCBzb2NrYWRkciAqKSZzaW4sIHNpemVvZihzaW4pLAotCQkJCSAgIGZsYWdzKTsKKwkJbmV3eHBydCA9IF9fc3ZjX3hwb19jcmVhdGUoeGNsLCBzZXJ2LCBwb3J0LCBmbGFncyk7CiAJCWlmIChJU19FUlIobmV3eHBydCkpIHsKIAkJCW1vZHVsZV9wdXQoeGNsLT54Y2xfb3duZXIpOwogCQkJcmV0dXJuIFBUUl9FUlIobmV3eHBydCk7CmRpZmYgLS1naXQgYS9uZXQvc3VucnBjL3N2Y3NvY2suYyBiL25ldC9zdW5ycGMvc3Zjc29jay5jCmluZGV4IDNlNjU3MTkuLjk1MjkzZjUgMTAwNjQ0Ci0tLSBhL25ldC9zdW5ycGMvc3Zjc29jay5jCisrKyBiL25ldC9zdW5ycGMvc3Zjc29jay5jCkBAIC0xMTE0LDYgKzExMTQsNyBAQAogCXN0cnVjdCBzdmNfc29jawkqc3ZzazsKIAlzdHJ1Y3Qgc29jawkqaW5ldDsKIAlpbnQJCXBtYXBfcmVnaXN0ZXIgPSAhKGZsYWdzICYgU1ZDX1NPQ0tfQU5PTllNT1VTKTsKKwlpbnQJCXZhbDsKIAogCWRwcmludGsoInN2Yzogc3ZjX3NldHVwX3NvY2tldCAlcFxuIiwgc29jayk7CiAJaWYgKCEoc3ZzayA9IGt6YWxsb2Moc2l6ZW9mKCpzdnNrKSwgR0ZQX0tFUk5FTCkpKSB7CkBAIC0xMTQ2LDYgKzExNDcsMTggQEAKIAllbHNlCiAJCXN2Y190Y3BfaW5pdChzdnNrLCBzZXJ2KTsKIAorCS8qCisJICogV2Ugc3RhcnQgb25lIGxpc3RlbmVyIHBlciBzdl9zZXJ2LiAgV2Ugd2FudCBBRl9JTkVUCisJICogcmVxdWVzdHMgdG8gYmUgYXV0b21hdGljYWxseSBzaHVudGVkIHRvIG91ciBBRl9JTkVUNgorCSAqIGxpc3RlbmVyIHVzaW5nIGEgbWFwcGVkIElQdjQgYWRkcmVzcy4gIE1ha2Ugc3VyZQorCSAqIG5vLW9uZSBzdGFydHMgYW4gZXF1aXZhbGVudCBJUHY0IGxpc3RlbmVyLCB3aGljaAorCSAqIHdvdWxkIHN0ZWFsIG91ciBpbmNvbWluZyBjb25uZWN0aW9ucy4KKwkgKi8KKwl2YWwgPSAwOworCWlmIChzZXJ2LT5zdl9mYW1pbHkgPT0gQUZfSU5FVDYpCisJCWtlcm5lbF9zZXRzb2Nrb3B0KHNvY2ssIFNPTF9JUFY2LCBJUFY2X1Y2T05MWSwKKwkJCQkJKGNoYXIgKikmdmFsLCBzaXplb2YodmFsKSk7CisKIAlkcHJpbnRrKCJzdmM6IHN2Y19zZXR1cF9zb2NrZXQgY3JlYXRlZCAlcCAoaW5ldCAlcClcbiIsCiAJCQkJc3Zzaywgc3Zzay0+c2tfc2spOwogCkBAIC0xMTU0LDggKzExNjcsNyBAQAogCiBpbnQgc3ZjX2FkZHNvY2soc3RydWN0IHN2Y19zZXJ2ICpzZXJ2LAogCQlpbnQgZmQsCi0JCWNoYXIgKm5hbWVfcmV0dXJuLAotCQlpbnQgKnByb3RvKQorCQljaGFyICpuYW1lX3JldHVybikKIHsKIAlpbnQgZXJyID0gMDsKIAlzdHJ1Y3Qgc29ja2V0ICpzbyA9IHNvY2tmZF9sb29rdXAoZmQsICZlcnIpOwpAQCAtMTE5MCw3ICsxMjAyLDYgQEAKIAkJc29ja2ZkX3B1dChzbyk7CiAJCXJldHVybiBlcnI7CiAJfQotCWlmIChwcm90bykgKnByb3RvID0gc28tPnNrLT5za19wcm90b2NvbDsKIAlyZXR1cm4gb25lX3NvY2tfbmFtZShuYW1lX3JldHVybiwgc3Zzayk7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChzdmNfYWRkc29jayk7CmRpZmYgLS1naXQgYS9uZXQvc3VucnBjL3hwcnQuYyBiL25ldC9zdW5ycGMveHBydC5jCmluZGV4IDk5YTUyYWEuLjI5ZTQwMWIgMTAwNjQ0Ci0tLSBhL25ldC9zdW5ycGMveHBydC5jCisrKyBiL25ldC9zdW5ycGMveHBydC5jCkBAIC0xMDgsMTMgKzEwOCwxMCBAQAogCQkJZ290byBvdXQ7CiAJfQogCi0JcmVzdWx0ID0gLUVJTlZBTDsKLQlpZiAodHJ5X21vZHVsZV9nZXQoVEhJU19NT0RVTEUpKSB7Ci0JCWxpc3RfYWRkX3RhaWwoJnRyYW5zcG9ydC0+bGlzdCwgJnhwcnRfbGlzdCk7Ci0JCXByaW50ayhLRVJOX0lORk8gIlJQQzogUmVnaXN0ZXJlZCAlcyB0cmFuc3BvcnQgbW9kdWxlLlxuIiwKLQkJCXRyYW5zcG9ydC0+bmFtZSk7Ci0JCXJlc3VsdCA9IDA7Ci0JfQorCWxpc3RfYWRkX3RhaWwoJnRyYW5zcG9ydC0+bGlzdCwgJnhwcnRfbGlzdCk7CisJcHJpbnRrKEtFUk5fSU5GTyAiUlBDOiBSZWdpc3RlcmVkICVzIHRyYW5zcG9ydCBtb2R1bGUuXG4iLAorCSAgICAgICB0cmFuc3BvcnQtPm5hbWUpOworCXJlc3VsdCA9IDA7CiAKIG91dDoKIAlzcGluX3VubG9jaygmeHBydF9saXN0X2xvY2spOwpAQCAtMTQzLDcgKzE0MCw2IEBACiAJCQkJIlJQQzogVW5yZWdpc3RlcmVkICVzIHRyYW5zcG9ydCBtb2R1bGUuXG4iLAogCQkJCXRyYW5zcG9ydC0+bmFtZSk7CiAJCQlsaXN0X2RlbF9pbml0KCZ0cmFuc3BvcnQtPmxpc3QpOwotCQkJbW9kdWxlX3B1dChUSElTX01PRFVMRSk7CiAJCQlnb3RvIG91dDsKIAkJfQogCX0KZGlmZiAtLWdpdCBhL25ldC9zdW5ycGMveHBydHJkbWEvcnBjX3JkbWEuYyBiL25ldC9zdW5ycGMveHBydHJkbWEvcnBjX3JkbWEuYwppbmRleCA1YzE5NTRkMjguLjE0MTA2ZDIgMTAwNjQ0Ci0tLSBhL25ldC9zdW5ycGMveHBydHJkbWEvcnBjX3JkbWEuYworKysgYi9uZXQvc3VucnBjL3hwcnRyZG1hL3JwY19yZG1hLmMKQEAgLTExOCw2ICsxMTgsMTAgQEAKIAl9CiAKIAlpZiAoeGRyYnVmLT50YWlsWzBdLmlvdl9sZW4pIHsKKwkJLyogdGhlIHJwY3JkbWEgcHJvdG9jb2wgYWxsb3dzIHVzIHRvIG9taXQgYW55IHRyYWlsaW5nCisJCSAqIHhkciBwYWQgYnl0ZXMsIHNhdmluZyB0aGUgc2VydmVyIGFuIFJETUEgb3BlcmF0aW9uLiAqLworCQlpZiAoeGRyYnVmLT50YWlsWzBdLmlvdl9sZW4gPCA0ICYmIHhwcnRfcmRtYV9wYWRfb3B0aW1pemUpCisJCQlyZXR1cm4gbjsKIAkJaWYgKG4gPT0gbnNlZ3MpCiAJCQlyZXR1cm4gMDsKIAkJc2VnW25dLm1yX3BhZ2UgPSBOVUxMOwpAQCAtNTA4LDggKzUxMiw4IEBACiAJaWYgKGhkcmxlbiA9PSAwKQogCQlyZXR1cm4gLTE7CiAKLQlkcHJpbnRrKCJSUEM6ICAgICAgICVzOiAlczogaGRybGVuICV6ZCBycGNsZW4gJXpkIHBhZGxlbiAlemRcbiIKLQkJIiAgICAgICAgICAgICAgICAgICBoZWFkZXJwIDB4JXAgYmFzZSAweCVwIGxrZXkgMHgleFxuIiwKKwlkcHJpbnRrKCJSUEM6ICAgICAgICVzOiAlczogaGRybGVuICV6ZCBycGNsZW4gJXpkIHBhZGxlbiAlemQiCisJCSIgaGVhZGVycCAweCVwIGJhc2UgMHglcCBsa2V5IDB4JXhcbiIsCiAJCV9fZnVuY19fLCB0cmFuc2ZlcnR5cGVzW3d0eXBlXSwgaGRybGVuLCBycGNsZW4sIHBhZGxlbiwKIAkJaGVhZGVycCwgYmFzZSwgcmVxLT5ybF9pb3YubGtleSk7CiAKQEAgLTU5NCw3ICs1OTgsNyBAQAogICogU2NhdHRlciBpbmxpbmUgcmVjZWl2ZWQgZGF0YSBiYWNrIGludG8gcHJvdmlkZWQgaW92J3MuCiAgKi8KIHN0YXRpYyB2b2lkCi1ycGNyZG1hX2lubGluZV9maXh1cChzdHJ1Y3QgcnBjX3Jxc3QgKnJxc3QsIGNoYXIgKnNyY3AsIGludCBjb3B5X2xlbikKK3JwY3JkbWFfaW5saW5lX2ZpeHVwKHN0cnVjdCBycGNfcnFzdCAqcnFzdCwgY2hhciAqc3JjcCwgaW50IGNvcHlfbGVuLCBpbnQgcGFkKQogewogCWludCBpLCBucGFnZXMsIGN1cmxlbiwgb2xlbjsKIAljaGFyICpkZXN0cDsKQEAgLTY2MCw2ICs2NjQsMTMgQEAKIAl9IGVsc2UKIAkJcnFzdC0+cnFfcmN2X2J1Zi50YWlsWzBdLmlvdl9sZW4gPSAwOwogCisJaWYgKHBhZCkgeworCQkvKiBpbXBsaWNpdCBwYWRkaW5nIG9uIHRlcm1pbmFsIGNodW5rICovCisJCXVuc2lnbmVkIGNoYXIgKnAgPSBycXN0LT5ycV9yY3ZfYnVmLnRhaWxbMF0uaW92X2Jhc2U7CisJCXdoaWxlIChwYWQtLSkKKwkJCXBbcnFzdC0+cnFfcmN2X2J1Zi50YWlsWzBdLmlvdl9sZW4rK10gPSAwOworCX0KKwogCWlmIChjb3B5X2xlbikKIAkJZHByaW50aygiUlBDOiAgICAgICAlczogJWQgYnl0ZXMgaW4iCiAJCQkiICVkIGV4dHJhIHNlZ21lbnRzICglZCBsb3N0KVxuIiwKQEAgLTY4MSwxMiArNjkyLDE0IEBACiAJc3RydWN0IHJwY194cHJ0ICp4cHJ0ID0gZXAtPnJlcF94cHJ0OwogCiAJc3Bpbl9sb2NrX2JoKCZ4cHJ0LT50cmFuc3BvcnRfbG9jayk7CisJaWYgKCsreHBydC0+Y29ubmVjdF9jb29raWUgPT0gMCkJLyogbWFpbnRhaW4gYSByZXNlcnZlZCB2YWx1ZSAqLworCQkrK3hwcnQtPmNvbm5lY3RfY29va2llOwogCWlmIChlcC0+cmVwX2Nvbm5lY3RlZCA+IDApIHsKIAkJaWYgKCF4cHJ0X3Rlc3RfYW5kX3NldF9jb25uZWN0ZWQoeHBydCkpCiAJCQl4cHJ0X3dha2VfcGVuZGluZ190YXNrcyh4cHJ0LCAwKTsKIAl9IGVsc2UgewogCQlpZiAoeHBydF90ZXN0X2FuZF9jbGVhcl9jb25uZWN0ZWQoeHBydCkpCi0JCQl4cHJ0X3dha2VfcGVuZGluZ190YXNrcyh4cHJ0LCBlcC0+cmVwX2Nvbm5lY3RlZCk7CisJCQl4cHJ0X3dha2VfcGVuZGluZ190YXNrcyh4cHJ0LCAtRU5PVENPTk4pOwogCX0KIAlzcGluX3VubG9ja19iaCgmeHBydC0+dHJhbnNwb3J0X2xvY2spOwogfQpAQCAtNzkyLDE0ICs4MDUsMjAgQEAKIAkJCSAgICAoKHVuc2lnbmVkIGNoYXIgKilpcHRyIC0gKHVuc2lnbmVkIGNoYXIgKiloZWFkZXJwKTsKIAkJCXN0YXR1cyA9IHJlcC0+cnJfbGVuICsgcmRtYWxlbjsKIAkJCXJfeHBydC0+cnhfc3RhdHMudG90YWxfcmRtYV9yZXBseSArPSByZG1hbGVuOworCQkJLyogc3BlY2lhbCBjYXNlIC0gbGFzdCBjaHVuayBtYXkgb21pdCBwYWRkaW5nICovCisJCQlpZiAocmRtYWxlbiAmPSAzKSB7CisJCQkJcmRtYWxlbiA9IDQgLSByZG1hbGVuOworCQkJCXN0YXR1cyArPSByZG1hbGVuOworCQkJfQogCQl9IGVsc2UgewogCQkJLyogZWxzZSBvcmRpbmFyeSBpbmxpbmUgKi8KKwkJCXJkbWFsZW4gPSAwOwogCQkJaXB0ciA9IChfX2JlMzIgKikoKHVuc2lnbmVkIGNoYXIgKiloZWFkZXJwICsgMjgpOwogCQkJcmVwLT5ycl9sZW4gLT0gMjg7IC8qc2l6ZW9mICpoZWFkZXJwOyovCiAJCQlzdGF0dXMgPSByZXAtPnJyX2xlbjsKIAkJfQogCQkvKiBGaXggdXAgdGhlIHJwYyByZXN1bHRzIGZvciB1cHBlciBsYXllciAqLwotCQlycGNyZG1hX2lubGluZV9maXh1cChycXN0LCAoY2hhciAqKWlwdHIsIHJlcC0+cnJfbGVuKTsKKwkJcnBjcmRtYV9pbmxpbmVfZml4dXAocnFzdCwgKGNoYXIgKilpcHRyLCByZXAtPnJyX2xlbiwgcmRtYWxlbik7CiAJCWJyZWFrOwogCiAJY2FzZSBodG9ubChSRE1BX05PTVNHKToKZGlmZiAtLWdpdCBhL25ldC9zdW5ycGMveHBydHJkbWEvc3ZjX3JkbWFfcmVjdmZyb20uYyBiL25ldC9zdW5ycGMveHBydHJkbWEvc3ZjX3JkbWFfcmVjdmZyb20uYwppbmRleCA3NGRlMzFhLi5hNDc1NjU3IDEwMDY0NAotLS0gYS9uZXQvc3VucnBjL3hwcnRyZG1hL3N2Y19yZG1hX3JlY3Zmcm9tLmMKKysrIGIvbmV0L3N1bnJwYy94cHJ0cmRtYS9zdmNfcmRtYV9yZWN2ZnJvbS5jCkBAIC0xMTYsNyArMTE2LDcgQEAKICAqCiAgKiBBc3N1bXB0aW9uczoKICAqIC0gY2h1bmtbMF0tPnBvc2l0aW9uIHBvaW50cyB0byBwYWdlc1swXSBhdCBhbiBvZmZzZXQgb2YgMAotICogLSBwYWdlc1tdIGlzIG5vdCBwaHlzaWNhbGx5IG9yIHZpcnR1YWxseSBjb250aWdvdXMgYW5kIGNvbnNpc3RzIG9mCisgKiAtIHBhZ2VzW10gaXMgbm90IHBoeXNpY2FsbHkgb3IgdmlydHVhbGx5IGNvbnRpZ3VvdXMgYW5kIGNvbnNpc3RzIG9mCiAgKiAgIFBBR0VfU0laRSBlbGVtZW50cy4KICAqCiAgKiBPdXRwdXQ6CkBAIC0xMjUsNyArMTI1LDcgQEAKICAqICAgY2h1bmsgaW4gdGhlIHJlYWQgbGlzdAogICoKICAqLwotc3RhdGljIGludCByZG1hX3JjbF90b19zZ2Uoc3RydWN0IHN2Y3hwcnRfcmRtYSAqeHBydCwKK3N0YXRpYyBpbnQgbWFwX3JlYWRfY2h1bmtzKHN0cnVjdCBzdmN4cHJ0X3JkbWEgKnhwcnQsCiAJCQkgICBzdHJ1Y3Qgc3ZjX3Jxc3QgKnJxc3RwLAogCQkJICAgc3RydWN0IHN2Y19yZG1hX29wX2N0eHQgKmhlYWQsCiAJCQkgICBzdHJ1Y3QgcnBjcmRtYV9tc2cgKnJtc2dwLApAQCAtMjExLDI2ICsyMTEsMTI4IEBACiAJcmV0dXJuIHNnZV9ubzsKIH0KIAotc3RhdGljIHZvaWQgcmRtYV9zZXRfY3R4dF9zZ2Uoc3RydWN0IHN2Y3hwcnRfcmRtYSAqeHBydCwKLQkJCSAgICAgIHN0cnVjdCBzdmNfcmRtYV9vcF9jdHh0ICpjdHh0LAotCQkJICAgICAgc3RydWN0IGt2ZWMgKnZlYywKLQkJCSAgICAgIHU2NCAqc2dsX29mZnNldCwKLQkJCSAgICAgIGludCBjb3VudCkKKy8qIE1hcCBhIHJlYWQtY2h1bmstbGlzdCB0byBhbiBYRFIgYW5kIGZhc3QgcmVnaXN0ZXIgdGhlIHBhZ2UtbGlzdC4KKyAqCisgKiBBc3N1bXB0aW9uczoKKyAqIC0gY2h1bmtbMF0JcG9zaXRpb24gcG9pbnRzIHRvIHBhZ2VzWzBdIGF0IGFuIG9mZnNldCBvZiAwCisgKiAtIHBhZ2VzW10Jd2lsbCBiZSBtYWRlIHBoeXNpY2FsbHkgY29udGlndW91cyBieSBjcmVhdGluZyBhIG9uZS1vZmYgbWVtb3J5CisgKgkJcmVnaW9uIHVzaW5nIHRoZSBmYXN0cmVnIHZlcmIuCisgKiAtIGJ5dGVfY291bnQgaXMgIyBvZiBieXRlcyBpbiByZWFkLWNodW5rLWxpc3QKKyAqIC0gY2hfY291bnQJaXMgIyBvZiBjaHVua3MgaW4gcmVhZC1jaHVuay1saXN0CisgKgorICogT3V0cHV0OgorICogLSBzZ2UgYXJyYXkgcG9pbnRpbmcgaW50byBwYWdlc1tdIGFycmF5LgorICogLSBjaHVua19zZ2UgYXJyYXkgc3BlY2lmeWluZyBzZ2UgaW5kZXggYW5kIGNvdW50IGZvciBlYWNoCisgKiAgIGNodW5rIGluIHRoZSByZWFkIGxpc3QKKyAqLworc3RhdGljIGludCBmYXN0X3JlZ19yZWFkX2NodW5rcyhzdHJ1Y3Qgc3ZjeHBydF9yZG1hICp4cHJ0LAorCQkJCXN0cnVjdCBzdmNfcnFzdCAqcnFzdHAsCisJCQkJc3RydWN0IHN2Y19yZG1hX29wX2N0eHQgKmhlYWQsCisJCQkJc3RydWN0IHJwY3JkbWFfbXNnICpybXNncCwKKwkJCQlzdHJ1Y3Qgc3ZjX3JkbWFfcmVxX21hcCAqcnBsX21hcCwKKwkJCQlzdHJ1Y3Qgc3ZjX3JkbWFfcmVxX21hcCAqY2hsX21hcCwKKwkJCQlpbnQgY2hfY291bnQsCisJCQkJaW50IGJ5dGVfY291bnQpCit7CisJaW50IHBhZ2Vfbm87CisJaW50IGNoX25vOworCXUzMiBvZmZzZXQ7CisJc3RydWN0IHJwY3JkbWFfcmVhZF9jaHVuayAqY2g7CisJc3RydWN0IHN2Y19yZG1hX2Zhc3RyZWdfbXIgKmZybXI7CisJaW50IHJldCA9IDA7CisKKwlmcm1yID0gc3ZjX3JkbWFfZ2V0X2ZybXIoeHBydCk7CisJaWYgKElTX0VSUihmcm1yKSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwloZWFkLT5mcm1yID0gZnJtcjsKKwloZWFkLT5hcmcuaGVhZFswXSA9IHJxc3RwLT5ycV9hcmcuaGVhZFswXTsKKwloZWFkLT5hcmcudGFpbFswXSA9IHJxc3RwLT5ycV9hcmcudGFpbFswXTsKKwloZWFkLT5hcmcucGFnZXMgPSAmaGVhZC0+cGFnZXNbaGVhZC0+Y291bnRdOworCWhlYWQtPmhkcl9jb3VudCA9IGhlYWQtPmNvdW50OyAvKiBzYXZlIGNvdW50IG9mIGhkciBwYWdlcyAqLworCWhlYWQtPmFyZy5wYWdlX2Jhc2UgPSAwOworCWhlYWQtPmFyZy5wYWdlX2xlbiA9IGJ5dGVfY291bnQ7CisJaGVhZC0+YXJnLmxlbiA9IHJxc3RwLT5ycV9hcmcubGVuICsgYnl0ZV9jb3VudDsKKwloZWFkLT5hcmcuYnVmbGVuID0gcnFzdHAtPnJxX2FyZy5idWZsZW4gKyBieXRlX2NvdW50OworCisJLyogRmFzdCByZWdpc3RlciB0aGUgcGFnZSBsaXN0ICovCisJZnJtci0+a3ZhID0gcGFnZV9hZGRyZXNzKHJxc3RwLT5ycV9hcmcucGFnZXNbMF0pOworCWZybXItPmRpcmVjdGlvbiA9IERNQV9GUk9NX0RFVklDRTsKKwlmcm1yLT5hY2Nlc3NfZmxhZ3MgPSAoSUJfQUNDRVNTX0xPQ0FMX1dSSVRFfElCX0FDQ0VTU19SRU1PVEVfV1JJVEUpOworCWZybXItPm1hcF9sZW4gPSBieXRlX2NvdW50OworCWZybXItPnBhZ2VfbGlzdF9sZW4gPSBQQUdFX0FMSUdOKGJ5dGVfY291bnQpID4+IFBBR0VfU0hJRlQ7CisJZm9yIChwYWdlX25vID0gMDsgcGFnZV9ubyA8IGZybXItPnBhZ2VfbGlzdF9sZW47IHBhZ2Vfbm8rKykgeworCQlmcm1yLT5wYWdlX2xpc3QtPnBhZ2VfbGlzdFtwYWdlX25vXSA9CisJCQlpYl9kbWFfbWFwX3NpbmdsZSh4cHJ0LT5zY19jbV9pZC0+ZGV2aWNlLAorCQkJCQkgIHBhZ2VfYWRkcmVzcyhycXN0cC0+cnFfYXJnLnBhZ2VzW3BhZ2Vfbm9dKSwKKwkJCQkJICBQQUdFX1NJWkUsIERNQV9UT19ERVZJQ0UpOworCQlpZiAoaWJfZG1hX21hcHBpbmdfZXJyb3IoeHBydC0+c2NfY21faWQtPmRldmljZSwKKwkJCQkJIGZybXItPnBhZ2VfbGlzdC0+cGFnZV9saXN0W3BhZ2Vfbm9dKSkKKwkJCWdvdG8gZmF0YWxfZXJyOworCQlhdG9taWNfaW5jKCZ4cHJ0LT5zY19kbWFfdXNlZCk7CisJCWhlYWQtPmFyZy5wYWdlc1twYWdlX25vXSA9IHJxc3RwLT5ycV9hcmcucGFnZXNbcGFnZV9ub107CisJfQorCWhlYWQtPmNvdW50ICs9IHBhZ2Vfbm87CisKKwkvKiBycV9yZXNwYWdlcyBwb2ludHMgb25lIHBhc3QgYXJnIHBhZ2VzICovCisJcnFzdHAtPnJxX3Jlc3BhZ2VzID0gJnJxc3RwLT5ycV9hcmcucGFnZXNbcGFnZV9ub107CisKKwkvKiBDcmVhdGUgdGhlIHJlcGx5IGFuZCBjaHVuayBtYXBzICovCisJb2Zmc2V0ID0gMDsKKwljaCA9IChzdHJ1Y3QgcnBjcmRtYV9yZWFkX2NodW5rICopJnJtc2dwLT5ybV9ib2R5LnJtX2NodW5rc1swXTsKKwlmb3IgKGNoX25vID0gMDsgY2hfbm8gPCBjaF9jb3VudDsgY2hfbm8rKykgeworCQlycGxfbWFwLT5zZ2VbY2hfbm9dLmlvdl9iYXNlID0gZnJtci0+a3ZhICsgb2Zmc2V0OworCQlycGxfbWFwLT5zZ2VbY2hfbm9dLmlvdl9sZW4gPSBjaC0+cmNfdGFyZ2V0LnJzX2xlbmd0aDsKKwkJY2hsX21hcC0+Y2hbY2hfbm9dLmNvdW50ID0gMTsKKwkJY2hsX21hcC0+Y2hbY2hfbm9dLnN0YXJ0ID0gY2hfbm87CisJCW9mZnNldCArPSBjaC0+cmNfdGFyZ2V0LnJzX2xlbmd0aDsKKwkJY2grKzsKKwl9CisKKwlyZXQgPSBzdmNfcmRtYV9mYXN0cmVnKHhwcnQsIGZybXIpOworCWlmIChyZXQpCisJCWdvdG8gZmF0YWxfZXJyOworCisJcmV0dXJuIGNoX25vOworCisgZmF0YWxfZXJyOgorCXByaW50aygic3ZjcmRtYTogZXJyb3IgZmFzdCByZWdpc3RlcmluZyB4ZHIgZm9yIHhwcnQgJXAiLCB4cHJ0KTsKKwlzdmNfcmRtYV9wdXRfZnJtcih4cHJ0LCBmcm1yKTsKKwlyZXR1cm4gLUVJTzsKK30KKworc3RhdGljIGludCByZG1hX3NldF9jdHh0X3NnZShzdHJ1Y3Qgc3ZjeHBydF9yZG1hICp4cHJ0LAorCQkJICAgICBzdHJ1Y3Qgc3ZjX3JkbWFfb3BfY3R4dCAqY3R4dCwKKwkJCSAgICAgc3RydWN0IHN2Y19yZG1hX2Zhc3RyZWdfbXIgKmZybXIsCisJCQkgICAgIHN0cnVjdCBrdmVjICp2ZWMsCisJCQkgICAgIHU2NCAqc2dsX29mZnNldCwKKwkJCSAgICAgaW50IGNvdW50KQogewogCWludCBpOwogCiAJY3R4dC0+Y291bnQgPSBjb3VudDsKIAljdHh0LT5kaXJlY3Rpb24gPSBETUFfRlJPTV9ERVZJQ0U7CiAJZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKLQkJYXRvbWljX2luYygmeHBydC0+c2NfZG1hX3VzZWQpOwotCQljdHh0LT5zZ2VbaV0uYWRkciA9Ci0JCQlpYl9kbWFfbWFwX3NpbmdsZSh4cHJ0LT5zY19jbV9pZC0+ZGV2aWNlLAotCQkJCQkgIHZlY1tpXS5pb3ZfYmFzZSwgdmVjW2ldLmlvdl9sZW4sCi0JCQkJCSAgRE1BX0ZST01fREVWSUNFKTsKKwkJY3R4dC0+c2dlW2ldLmxlbmd0aCA9IDA7IC8qIGluIGNhc2UgbWFwIGZhaWxzICovCisJCWlmICghZnJtcikgeworCQkJY3R4dC0+c2dlW2ldLmFkZHIgPQorCQkJCWliX2RtYV9tYXBfc2luZ2xlKHhwcnQtPnNjX2NtX2lkLT5kZXZpY2UsCisJCQkJCQkgIHZlY1tpXS5pb3ZfYmFzZSwKKwkJCQkJCSAgdmVjW2ldLmlvdl9sZW4sCisJCQkJCQkgIERNQV9GUk9NX0RFVklDRSk7CisJCQlpZiAoaWJfZG1hX21hcHBpbmdfZXJyb3IoeHBydC0+c2NfY21faWQtPmRldmljZSwKKwkJCQkJCSBjdHh0LT5zZ2VbaV0uYWRkcikpCisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQljdHh0LT5zZ2VbaV0ubGtleSA9IHhwcnQtPnNjX2RtYV9sa2V5OworCQkJYXRvbWljX2luYygmeHBydC0+c2NfZG1hX3VzZWQpOworCQl9IGVsc2UgeworCQkJY3R4dC0+c2dlW2ldLmFkZHIgPSAodW5zaWduZWQgbG9uZyl2ZWNbaV0uaW92X2Jhc2U7CisJCQljdHh0LT5zZ2VbaV0ubGtleSA9IGZybXItPm1yLT5sa2V5OworCQl9CiAJCWN0eHQtPnNnZVtpXS5sZW5ndGggPSB2ZWNbaV0uaW92X2xlbjsKLQkJY3R4dC0+c2dlW2ldLmxrZXkgPSB4cHJ0LT5zY19waHlzX21yLT5sa2V5OwogCQkqc2dsX29mZnNldCA9ICpzZ2xfb2Zmc2V0ICsgdmVjW2ldLmlvdl9sZW47CiAJfQorCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IHJkbWFfcmVhZF9tYXhfc2dlKHN0cnVjdCBzdmN4cHJ0X3JkbWEgKnhwcnQsIGludCBzZ2VfY291bnQpCkBAIC0yNzgsNiArMzgwLDcgQEAKIAkJCSBzdHJ1Y3Qgc3ZjX3JkbWFfb3BfY3R4dCAqaGRyX2N0eHQpCiB7CiAJc3RydWN0IGliX3NlbmRfd3IgcmVhZF93cjsKKwlzdHJ1Y3QgaWJfc2VuZF93ciBpbnZfd3I7CiAJaW50IGVyciA9IDA7CiAJaW50IGNoX25vOwogCWludCBjaF9jb3VudDsKQEAgLTMwMSw5ICs0MDQsMjAgQEAKIAlzdmNfcmRtYV9yY2xfY2h1bmtfY291bnRzKGNoLCAmY2hfY291bnQsICZieXRlX2NvdW50KTsKIAlpZiAoY2hfY291bnQgPiBSUENTVkNfTUFYUEFHRVMpCiAJCXJldHVybiAtRUlOVkFMOwotCXNnZV9jb3VudCA9IHJkbWFfcmNsX3RvX3NnZSh4cHJ0LCBycXN0cCwgaGRyX2N0eHQsIHJtc2dwLAotCQkJCSAgICBycGxfbWFwLCBjaGxfbWFwLAotCQkJCSAgICBjaF9jb3VudCwgYnl0ZV9jb3VudCk7CisKKwlpZiAoIXhwcnQtPnNjX2ZybXJfcGdfbGlzdF9sZW4pCisJCXNnZV9jb3VudCA9IG1hcF9yZWFkX2NodW5rcyh4cHJ0LCBycXN0cCwgaGRyX2N0eHQsIHJtc2dwLAorCQkJCQkgICAgcnBsX21hcCwgY2hsX21hcCwgY2hfY291bnQsCisJCQkJCSAgICBieXRlX2NvdW50KTsKKwllbHNlCisJCXNnZV9jb3VudCA9IGZhc3RfcmVnX3JlYWRfY2h1bmtzKHhwcnQsIHJxc3RwLCBoZHJfY3R4dCwgcm1zZ3AsCisJCQkJCQkgcnBsX21hcCwgY2hsX21hcCwgY2hfY291bnQsCisJCQkJCQkgYnl0ZV9jb3VudCk7CisJaWYgKHNnZV9jb3VudCA8IDApIHsKKwkJZXJyID0gLUVJTzsKKwkJZ290byBvdXQ7CisJfQorCiAJc2dsX29mZnNldCA9IDA7CiAJY2hfbm8gPSAwOwogCkBAIC0zMTIsMTMgKzQyNiwxNiBAQAogbmV4dF9zZ2U6CiAJCWN0eHQgPSBzdmNfcmRtYV9nZXRfY29udGV4dCh4cHJ0KTsKIAkJY3R4dC0+ZGlyZWN0aW9uID0gRE1BX0ZST01fREVWSUNFOworCQljdHh0LT5mcm1yID0gaGRyX2N0eHQtPmZybXI7CisJCWN0eHQtPnJlYWRfaGRyID0gTlVMTDsKIAkJY2xlYXJfYml0KFJETUFDVFhUX0ZfTEFTVF9DVFhULCAmY3R4dC0+ZmxhZ3MpOworCQljbGVhcl9iaXQoUkRNQUNUWFRfRl9GQVNUX1VOUkVHLCAmY3R4dC0+ZmxhZ3MpOwogCiAJCS8qIFByZXBhcmUgUkVBRCBXUiAqLwogCQltZW1zZXQoJnJlYWRfd3IsIDAsIHNpemVvZiByZWFkX3dyKTsKLQkJY3R4dC0+d3Jfb3AgPSBJQl9XUl9SRE1BX1JFQUQ7CiAJCXJlYWRfd3Iud3JfaWQgPSAodW5zaWduZWQgbG9uZyljdHh0OwogCQlyZWFkX3dyLm9wY29kZSA9IElCX1dSX1JETUFfUkVBRDsKKwkJY3R4dC0+d3Jfb3AgPSByZWFkX3dyLm9wY29kZTsKIAkJcmVhZF93ci5zZW5kX2ZsYWdzID0gSUJfU0VORF9TSUdOQUxFRDsKIAkJcmVhZF93ci53ci5yZG1hLnJrZXkgPSBjaC0+cmNfdGFyZ2V0LnJzX2hhbmRsZTsKIAkJcmVhZF93ci53ci5yZG1hLnJlbW90ZV9hZGRyID0KQEAgLTMyNywxMCArNDQ0LDE1IEBACiAJCXJlYWRfd3Iuc2dfbGlzdCA9IGN0eHQtPnNnZTsKIAkJcmVhZF93ci5udW1fc2dlID0KIAkJCXJkbWFfcmVhZF9tYXhfc2dlKHhwcnQsIGNobF9tYXAtPmNoW2NoX25vXS5jb3VudCk7Ci0JCXJkbWFfc2V0X2N0eHRfc2dlKHhwcnQsIGN0eHQsCi0JCQkJICAmcnBsX21hcC0+c2dlW2NobF9tYXAtPmNoW2NoX25vXS5zdGFydF0sCi0JCQkJICAmc2dsX29mZnNldCwKLQkJCQkgIHJlYWRfd3IubnVtX3NnZSk7CisJCWVyciA9IHJkbWFfc2V0X2N0eHRfc2dlKHhwcnQsIGN0eHQsIGhkcl9jdHh0LT5mcm1yLAorCQkJCQkmcnBsX21hcC0+c2dlW2NobF9tYXAtPmNoW2NoX25vXS5zdGFydF0sCisJCQkJCSZzZ2xfb2Zmc2V0LAorCQkJCQlyZWFkX3dyLm51bV9zZ2UpOworCQlpZiAoZXJyKSB7CisJCQlzdmNfcmRtYV91bm1hcF9kbWEoY3R4dCk7CisJCQlzdmNfcmRtYV9wdXRfY29udGV4dChjdHh0LCAwKTsKKwkJCWdvdG8gb3V0OworCQl9CiAJCWlmICgoKGNoKzEpLT5yY19kaXNjcmltID09IDApICYmCiAJCSAgICAocmVhZF93ci5udW1fc2dlID09IGNobF9tYXAtPmNoW2NoX25vXS5jb3VudCkpIHsKIAkJCS8qCkBAIC0zMzksNiArNDYxLDI5IEBACiAJCQkgKiB0aGUgY2xpZW50IGFuZCB0aGUgUlBDIG5lZWRzIHRvIGJlIGVucXVldWVkLgogCQkJICovCiAJCQlzZXRfYml0KFJETUFDVFhUX0ZfTEFTVF9DVFhULCAmY3R4dC0+ZmxhZ3MpOworCQkJaWYgKGhkcl9jdHh0LT5mcm1yKSB7CisJCQkJc2V0X2JpdChSRE1BQ1RYVF9GX0ZBU1RfVU5SRUcsICZjdHh0LT5mbGFncyk7CisJCQkJLyoKKwkJCQkgKiBJbnZhbGlkYXRlIHRoZSBsb2NhbCBNUiB1c2VkIHRvIG1hcCB0aGUgZGF0YQorCQkJCSAqIHNpbmsuCisJCQkJICovCisJCQkJaWYgKHhwcnQtPnNjX2Rldl9jYXBzICYKKwkJCQkgICAgU1ZDUkRNQV9ERVZDQVBfUkVBRF9XX0lOVikgeworCQkJCQlyZWFkX3dyLm9wY29kZSA9CisJCQkJCQlJQl9XUl9SRE1BX1JFQURfV0lUSF9JTlY7CisJCQkJCWN0eHQtPndyX29wID0gcmVhZF93ci5vcGNvZGU7CisJCQkJCXJlYWRfd3IuZXguaW52YWxpZGF0ZV9ya2V5ID0KKwkJCQkJCWN0eHQtPmZybXItPm1yLT5sa2V5OworCQkJCX0gZWxzZSB7CisJCQkJCS8qIFByZXBhcmUgSU5WQUxJREFURSBXUiAqLworCQkJCQltZW1zZXQoJmludl93ciwgMCwgc2l6ZW9mIGludl93cik7CisJCQkJCWludl93ci5vcGNvZGUgPSBJQl9XUl9MT0NBTF9JTlY7CisJCQkJCWludl93ci5zZW5kX2ZsYWdzID0gSUJfU0VORF9TSUdOQUxFRDsKKwkJCQkJaW52X3dyLmV4LmludmFsaWRhdGVfcmtleSA9CisJCQkJCQloZHJfY3R4dC0+ZnJtci0+bXItPmxrZXk7CisJCQkJCXJlYWRfd3IubmV4dCA9ICZpbnZfd3I7CisJCQkJfQorCQkJfQogCQkJY3R4dC0+cmVhZF9oZHIgPSBoZHJfY3R4dDsKIAkJfQogCQkvKiBQb3N0IHRoZSByZWFkICovCmRpZmYgLS1naXQgYS9uZXQvc3VucnBjL3hwcnRyZG1hL3N2Y19yZG1hX3NlbmR0by5jIGIvbmV0L3N1bnJwYy94cHJ0cmRtYS9zdmNfcmRtYV9zZW5kdG8uYwppbmRleCA4NGQzMjgzLi45YTdhOGU3IDEwMDY0NAotLS0gYS9uZXQvc3VucnBjL3hwcnRyZG1hL3N2Y19yZG1hX3NlbmR0by5jCisrKyBiL25ldC9zdW5ycGMveHBydHJkbWEvc3ZjX3JkbWFfc2VuZHRvLmMKQEAgLTY5LDkgKzY5LDEyNyBAQAogICogYXJyYXkgaXMgb25seSBjb25jZXJuZWQgd2l0aCB0aGUgcmVwbHkgd2UgYXJlIGFzc3VyZWQgdGhhdCB3ZSBoYXZlCiAgKiBvbiBleHRyYSBwYWdlIGZvciB0aGUgUlBDUk1EQSBoZWFkZXIuCiAgKi8KLXN0YXRpYyB2b2lkIHhkcl90b19zZ2Uoc3RydWN0IHN2Y3hwcnRfcmRtYSAqeHBydCwKLQkJICAgICAgIHN0cnVjdCB4ZHJfYnVmICp4ZHIsCi0JCSAgICAgICBzdHJ1Y3Qgc3ZjX3JkbWFfcmVxX21hcCAqdmVjKQoraW50IGZhc3RfcmVnX3hkcihzdHJ1Y3Qgc3ZjeHBydF9yZG1hICp4cHJ0LAorCQkgc3RydWN0IHhkcl9idWYgKnhkciwKKwkJIHN0cnVjdCBzdmNfcmRtYV9yZXFfbWFwICp2ZWMpCit7CisJaW50IHNnZV9ubzsKKwl1MzIgc2dlX2J5dGVzOworCXUzMiBwYWdlX2J5dGVzOworCXUzMiBwYWdlX29mZjsKKwlpbnQgcGFnZV9ubyA9IDA7CisJdTggKmZydmE7CisJc3RydWN0IHN2Y19yZG1hX2Zhc3RyZWdfbXIgKmZybXI7CisKKwlmcm1yID0gc3ZjX3JkbWFfZ2V0X2ZybXIoeHBydCk7CisJaWYgKElTX0VSUihmcm1yKSkKKwkJcmV0dXJuIC1FTk9NRU07CisJdmVjLT5mcm1yID0gZnJtcjsKKworCS8qIFNraXAgdGhlIFJQQ1JETUEgaGVhZGVyICovCisJc2dlX25vID0gMTsKKworCS8qIE1hcCB0aGUgaGVhZC4gKi8KKwlmcnZhID0gKHZvaWQgKikoKHVuc2lnbmVkIGxvbmcpKHhkci0+aGVhZFswXS5pb3ZfYmFzZSkgJiBQQUdFX01BU0spOworCXZlYy0+c2dlW3NnZV9ub10uaW92X2Jhc2UgPSB4ZHItPmhlYWRbMF0uaW92X2Jhc2U7CisJdmVjLT5zZ2Vbc2dlX25vXS5pb3ZfbGVuID0geGRyLT5oZWFkWzBdLmlvdl9sZW47CisJdmVjLT5jb3VudCA9IDI7CisJc2dlX25vKys7CisKKwkvKiBCdWlsZCB0aGUgRlJNUiAqLworCWZybXItPmt2YSA9IGZydmE7CisJZnJtci0+ZGlyZWN0aW9uID0gRE1BX1RPX0RFVklDRTsKKwlmcm1yLT5hY2Nlc3NfZmxhZ3MgPSAwOworCWZybXItPm1hcF9sZW4gPSBQQUdFX1NJWkU7CisJZnJtci0+cGFnZV9saXN0X2xlbiA9IDE7CisJZnJtci0+cGFnZV9saXN0LT5wYWdlX2xpc3RbcGFnZV9ub10gPQorCQlpYl9kbWFfbWFwX3NpbmdsZSh4cHJ0LT5zY19jbV9pZC0+ZGV2aWNlLAorCQkJCSAgKHZvaWQgKil4ZHItPmhlYWRbMF0uaW92X2Jhc2UsCisJCQkJICBQQUdFX1NJWkUsIERNQV9UT19ERVZJQ0UpOworCWlmIChpYl9kbWFfbWFwcGluZ19lcnJvcih4cHJ0LT5zY19jbV9pZC0+ZGV2aWNlLAorCQkJCSBmcm1yLT5wYWdlX2xpc3QtPnBhZ2VfbGlzdFtwYWdlX25vXSkpCisJCWdvdG8gZmF0YWxfZXJyOworCWF0b21pY19pbmMoJnhwcnQtPnNjX2RtYV91c2VkKTsKKworCXBhZ2Vfb2ZmID0geGRyLT5wYWdlX2Jhc2U7CisJcGFnZV9ieXRlcyA9IHhkci0+cGFnZV9sZW4gKyBwYWdlX29mZjsKKwlpZiAoIXBhZ2VfYnl0ZXMpCisJCWdvdG8gZW5jb2RlX3RhaWw7CisKKwkvKiBNYXAgdGhlIHBhZ2VzICovCisJdmVjLT5zZ2Vbc2dlX25vXS5pb3ZfYmFzZSA9IGZydmEgKyBmcm1yLT5tYXBfbGVuICsgcGFnZV9vZmY7CisJdmVjLT5zZ2Vbc2dlX25vXS5pb3ZfbGVuID0gcGFnZV9ieXRlczsKKwlzZ2Vfbm8rKzsKKwl3aGlsZSAocGFnZV9ieXRlcykgeworCQlzdHJ1Y3QgcGFnZSAqcGFnZTsKKworCQlwYWdlID0geGRyLT5wYWdlc1twYWdlX25vKytdOworCQlzZ2VfYnl0ZXMgPSBtaW5fdCh1MzIsIHBhZ2VfYnl0ZXMsIChQQUdFX1NJWkUgLSBwYWdlX29mZikpOworCQlwYWdlX2J5dGVzIC09IHNnZV9ieXRlczsKKworCQlmcm1yLT5wYWdlX2xpc3QtPnBhZ2VfbGlzdFtwYWdlX25vXSA9CisJCQlpYl9kbWFfbWFwX3BhZ2UoeHBydC0+c2NfY21faWQtPmRldmljZSwgcGFnZSwgMCwKKwkJCQkJICBQQUdFX1NJWkUsIERNQV9UT19ERVZJQ0UpOworCQlpZiAoaWJfZG1hX21hcHBpbmdfZXJyb3IoeHBydC0+c2NfY21faWQtPmRldmljZSwKKwkJCQkJIGZybXItPnBhZ2VfbGlzdC0+cGFnZV9saXN0W3BhZ2Vfbm9dKSkKKwkJCWdvdG8gZmF0YWxfZXJyOworCisJCWF0b21pY19pbmMoJnhwcnQtPnNjX2RtYV91c2VkKTsKKwkJcGFnZV9vZmYgPSAwOyAvKiByZXNldCBmb3IgbmV4dCB0aW1lIHRocm91Z2ggbG9vcCAqLworCQlmcm1yLT5tYXBfbGVuICs9IFBBR0VfU0laRTsKKwkJZnJtci0+cGFnZV9saXN0X2xlbisrOworCX0KKwl2ZWMtPmNvdW50Kys7CisKKyBlbmNvZGVfdGFpbDoKKwkvKiBNYXAgdGFpbCAqLworCWlmICgwID09IHhkci0+dGFpbFswXS5pb3ZfbGVuKQorCQlnb3RvIGRvbmU7CisKKwl2ZWMtPmNvdW50Kys7CisJdmVjLT5zZ2Vbc2dlX25vXS5pb3ZfbGVuID0geGRyLT50YWlsWzBdLmlvdl9sZW47CisKKwlpZiAoKCh1bnNpZ25lZCBsb25nKXhkci0+dGFpbFswXS5pb3ZfYmFzZSAmIFBBR0VfTUFTSykgPT0KKwkgICAgKCh1bnNpZ25lZCBsb25nKXhkci0+aGVhZFswXS5pb3ZfYmFzZSAmIFBBR0VfTUFTSykpIHsKKwkJLyoKKwkJICogSWYgaGVhZCBhbmQgdGFpbCB1c2UgdGhlIHNhbWUgcGFnZSwgd2UgZG9uJ3QgbmVlZAorCQkgKiB0byBtYXAgaXQgYWdhaW4uCisJCSAqLworCQl2ZWMtPnNnZVtzZ2Vfbm9dLmlvdl9iYXNlID0geGRyLT50YWlsWzBdLmlvdl9iYXNlOworCX0gZWxzZSB7CisJCXZvaWQgKnZhOworCisJCS8qIE1hcCBhbm90aGVyIHBhZ2UgZm9yIHRoZSB0YWlsICovCisJCXBhZ2Vfb2ZmID0gKHVuc2lnbmVkIGxvbmcpeGRyLT50YWlsWzBdLmlvdl9iYXNlICYgflBBR0VfTUFTSzsKKwkJdmEgPSAodm9pZCAqKSgodW5zaWduZWQgbG9uZyl4ZHItPnRhaWxbMF0uaW92X2Jhc2UgJiBQQUdFX01BU0spOworCQl2ZWMtPnNnZVtzZ2Vfbm9dLmlvdl9iYXNlID0gZnJ2YSArIGZybXItPm1hcF9sZW4gKyBwYWdlX29mZjsKKworCQlmcm1yLT5wYWdlX2xpc3QtPnBhZ2VfbGlzdFtwYWdlX25vXSA9CisJCQlpYl9kbWFfbWFwX3NpbmdsZSh4cHJ0LT5zY19jbV9pZC0+ZGV2aWNlLCB2YSwgUEFHRV9TSVpFLAorCQkJCQkgIERNQV9UT19ERVZJQ0UpOworCQlpZiAoaWJfZG1hX21hcHBpbmdfZXJyb3IoeHBydC0+c2NfY21faWQtPmRldmljZSwKKwkJCQkJIGZybXItPnBhZ2VfbGlzdC0+cGFnZV9saXN0W3BhZ2Vfbm9dKSkKKwkJCWdvdG8gZmF0YWxfZXJyOworCQlhdG9taWNfaW5jKCZ4cHJ0LT5zY19kbWFfdXNlZCk7CisJCWZybXItPm1hcF9sZW4gKz0gUEFHRV9TSVpFOworCQlmcm1yLT5wYWdlX2xpc3RfbGVuKys7CisJfQorCisgZG9uZToKKwlpZiAoc3ZjX3JkbWFfZmFzdHJlZyh4cHJ0LCBmcm1yKSkKKwkJZ290byBmYXRhbF9lcnI7CisKKwlyZXR1cm4gMDsKKworIGZhdGFsX2VycjoKKwlwcmludGsoInN2Y3JkbWE6IEVycm9yIGZhc3QgcmVnaXN0ZXJpbmcgbWVtb3J5IGZvciB4cHJ0ICVwXG4iLCB4cHJ0KTsKKwlzdmNfcmRtYV9wdXRfZnJtcih4cHJ0LCBmcm1yKTsKKwlyZXR1cm4gLUVJTzsKK30KKworc3RhdGljIGludCBtYXBfeGRyKHN0cnVjdCBzdmN4cHJ0X3JkbWEgKnhwcnQsCisJCSAgIHN0cnVjdCB4ZHJfYnVmICp4ZHIsCisJCSAgIHN0cnVjdCBzdmNfcmRtYV9yZXFfbWFwICp2ZWMpCiB7CiAJaW50IHNnZV9tYXggPSAoeGRyLT5sZW4rUEFHRV9TSVpFLTEpIC8gUEFHRV9TSVpFICsgMzsKIAlpbnQgc2dlX25vOwpAQCAtODMsNiArMjAxLDkgQEAKIAlCVUdfT04oeGRyLT5sZW4gIT0KIAkgICAgICAgKHhkci0+aGVhZFswXS5pb3ZfbGVuICsgeGRyLT5wYWdlX2xlbiArIHhkci0+dGFpbFswXS5pb3ZfbGVuKSk7CiAKKwlpZiAoeHBydC0+c2NfZnJtcl9wZ19saXN0X2xlbikKKwkJcmV0dXJuIGZhc3RfcmVnX3hkcih4cHJ0LCB4ZHIsIHZlYyk7CisKIAkvKiBTa2lwIHRoZSBmaXJzdCBzZ2UsIHRoaXMgaXMgZm9yIHRoZSBSUENSRE1BIGhlYWRlciAqLwogCXNnZV9ubyA9IDE7CiAKQEAgLTExNiw5ICsyMzcsMTIgQEAKIAogCUJVR19PTihzZ2Vfbm8gPiBzZ2VfbWF4KTsKIAl2ZWMtPmNvdW50ID0gc2dlX25vOworCXJldHVybiAwOwogfQogCiAvKiBBc3N1bXB0aW9uczoKKyAqIC0gV2UgYXJlIHVzaW5nIEZSTVIKKyAqICAgICAtIG9yIC0KICAqIC0gVGhlIHNwZWNpZmllZCB3cml0ZV9sZW4gY2FuIGJlIHJlcHJlc2VudGVkIGluIHNjX21heF9zZ2UgKiBQQUdFX1NJWkUKICAqLwogc3RhdGljIGludCBzZW5kX3dyaXRlKHN0cnVjdCBzdmN4cHJ0X3JkbWEgKnhwcnQsIHN0cnVjdCBzdmNfcnFzdCAqcnFzdHAsCkBAIC0xNTgsMzAgKzI4MiwzNSBAQAogCXNnZV9ubyA9IDA7CiAKIAkvKiBDb3B5IHRoZSByZW1haW5pbmcgU0dFICovCi0Jd2hpbGUgKGJjICE9IDAgJiYgeGRyX3NnZV9ubyA8IHZlYy0+Y291bnQpIHsKLQkJc2dlW3NnZV9ub10ubGtleSA9IHhwcnQtPnNjX3BoeXNfbXItPmxrZXk7Ci0JCXNnZV9ieXRlcyA9IG1pbigoc2l6ZV90KWJjLAotCQkJCShzaXplX3QpKHZlYy0+c2dlW3hkcl9zZ2Vfbm9dLmlvdl9sZW4tc2dlX29mZikpOworCXdoaWxlIChiYyAhPSAwKSB7CisJCXNnZV9ieXRlcyA9IG1pbl90KHNpemVfdCwKKwkJCSAgYmMsIHZlYy0+c2dlW3hkcl9zZ2Vfbm9dLmlvdl9sZW4tc2dlX29mZik7CiAJCXNnZVtzZ2Vfbm9dLmxlbmd0aCA9IHNnZV9ieXRlczsKLQkJYXRvbWljX2luYygmeHBydC0+c2NfZG1hX3VzZWQpOwotCQlzZ2Vbc2dlX25vXS5hZGRyID0KLQkJCWliX2RtYV9tYXBfc2luZ2xlKHhwcnQtPnNjX2NtX2lkLT5kZXZpY2UsCi0JCQkJCSAgKHZvaWQgKikKLQkJCQkJICB2ZWMtPnNnZVt4ZHJfc2dlX25vXS5pb3ZfYmFzZSArIHNnZV9vZmYsCi0JCQkJCSAgc2dlX2J5dGVzLCBETUFfVE9fREVWSUNFKTsKLQkJaWYgKGRtYV9tYXBwaW5nX2Vycm9yKHhwcnQtPnNjX2NtX2lkLT5kZXZpY2UtPmRtYV9kZXZpY2UsCi0JCQkJCXNnZVtzZ2Vfbm9dLmFkZHIpKQotCQkJZ290byBlcnI7CisJCWlmICghdmVjLT5mcm1yKSB7CisJCQlzZ2Vbc2dlX25vXS5hZGRyID0KKwkJCQlpYl9kbWFfbWFwX3NpbmdsZSh4cHJ0LT5zY19jbV9pZC0+ZGV2aWNlLAorCQkJCQkJICAodm9pZCAqKQorCQkJCQkJICB2ZWMtPnNnZVt4ZHJfc2dlX25vXS5pb3ZfYmFzZSArIHNnZV9vZmYsCisJCQkJCQkgIHNnZV9ieXRlcywgRE1BX1RPX0RFVklDRSk7CisJCQlpZiAoaWJfZG1hX21hcHBpbmdfZXJyb3IoeHBydC0+c2NfY21faWQtPmRldmljZSwKKwkJCQkJCSBzZ2Vbc2dlX25vXS5hZGRyKSkKKwkJCQlnb3RvIGVycjsKKwkJCWF0b21pY19pbmMoJnhwcnQtPnNjX2RtYV91c2VkKTsKKwkJCXNnZVtzZ2Vfbm9dLmxrZXkgPSB4cHJ0LT5zY19kbWFfbGtleTsKKwkJfSBlbHNlIHsKKwkJCXNnZVtzZ2Vfbm9dLmFkZHIgPSAodW5zaWduZWQgbG9uZykKKwkJCQl2ZWMtPnNnZVt4ZHJfc2dlX25vXS5pb3ZfYmFzZSArIHNnZV9vZmY7CisJCQlzZ2Vbc2dlX25vXS5sa2V5ID0gdmVjLT5mcm1yLT5tci0+bGtleTsKKwkJfQorCQljdHh0LT5jb3VudCsrOworCQljdHh0LT5mcm1yID0gdmVjLT5mcm1yOwogCQlzZ2Vfb2ZmID0gMDsKIAkJc2dlX25vKys7Ci0JCWN0eHQtPmNvdW50Kys7CiAJCXhkcl9zZ2Vfbm8rKzsKKwkJQlVHX09OKHhkcl9zZ2Vfbm8gPiB2ZWMtPmNvdW50KTsKIAkJYmMgLT0gc2dlX2J5dGVzOwogCX0KIAotCUJVR19PTihiYyAhPSAwKTsKLQlCVUdfT04oeGRyX3NnZV9ubyA+IHZlYy0+Y291bnQpOwotCiAJLyogUHJlcGFyZSBXUklURSBXUiAqLwogCW1lbXNldCgmd3JpdGVfd3IsIDAsIHNpemVvZiB3cml0ZV93cik7CiAJY3R4dC0+d3Jfb3AgPSBJQl9XUl9SRE1BX1dSSVRFOwpAQCAtMjI2LDcgKzM1NSwxMCBAQAogCXJlc19hcnkgPSAoc3RydWN0IHJwY3JkbWFfd3JpdGVfYXJyYXkgKikKIAkJJnJkbWFfcmVzcC0+cm1fYm9keS5ybV9jaHVua3NbMV07CiAKLQltYXhfd3JpdGUgPSB4cHJ0LT5zY19tYXhfc2dlICogUEFHRV9TSVpFOworCWlmICh2ZWMtPmZybXIpCisJCW1heF93cml0ZSA9IHZlYy0+ZnJtci0+bWFwX2xlbjsKKwllbHNlCisJCW1heF93cml0ZSA9IHhwcnQtPnNjX21heF9zZ2UgKiBQQUdFX1NJWkU7CiAKIAkvKiBXcml0ZSBjaHVua3Mgc3RhcnQgYXQgdGhlIHBhZ2VsaXN0ICovCiAJZm9yICh4ZHJfb2ZmID0gcnFzdHAtPnJxX3Jlcy5oZWFkWzBdLmlvdl9sZW4sIGNodW5rX25vID0gMDsKQEAgLTI5Nyw3ICs0MjksMTAgQEAKIAlyZXNfYXJ5ID0gKHN0cnVjdCBycGNyZG1hX3dyaXRlX2FycmF5ICopCiAJCSZyZG1hX3Jlc3AtPnJtX2JvZHkucm1fY2h1bmtzWzJdOwogCi0JbWF4X3dyaXRlID0geHBydC0+c2NfbWF4X3NnZSAqIFBBR0VfU0laRTsKKwlpZiAodmVjLT5mcm1yKQorCQltYXhfd3JpdGUgPSB2ZWMtPmZybXItPm1hcF9sZW47CisJZWxzZQorCQltYXhfd3JpdGUgPSB4cHJ0LT5zY19tYXhfc2dlICogUEFHRV9TSVpFOwogCiAJLyogeGRyIG9mZnNldCBzdGFydHMgYXQgUlBDIG1lc3NhZ2UgKi8KIAlmb3IgKHhkcl9vZmYgPSAwLCBjaHVua19ubyA9IDA7CkBAIC0zMDcsNyArNDQyLDYgQEAKIAkJY2ggPSAmYXJnX2FyeS0+d2NfYXJyYXlbY2h1bmtfbm9dLndjX3RhcmdldDsKIAkJd3JpdGVfbGVuID0gbWluKHhmZXJfbGVuLCBjaC0+cnNfbGVuZ3RoKTsKIAotCiAJCS8qIFByZXBhcmUgdGhlIHJlcGx5IGNodW5rIGdpdmVuIHRoZSBsZW5ndGggYWN0dWFsbHkKIAkJICogd3JpdHRlbiAqLwogCQlyc19vZmZzZXQgPSBnZXRfdW5hbGlnbmVkKCYoY2gtPnJzX29mZnNldCkpOwpAQCAtMzY2LDYgKzUwMCw3IEBACiAJCSAgICAgIGludCBieXRlX2NvdW50KQogewogCXN0cnVjdCBpYl9zZW5kX3dyIHNlbmRfd3I7CisJc3RydWN0IGliX3NlbmRfd3IgaW52X3dyOwogCWludCBzZ2Vfbm87CiAJaW50IHNnZV9ieXRlczsKIAlpbnQgcGFnZV9ubzsKQEAgLTM4NSwyNyArNTIwLDQ1IEBACiAJLyogUHJlcGFyZSB0aGUgY29udGV4dCAqLwogCWN0eHQtPnBhZ2VzWzBdID0gcGFnZTsKIAljdHh0LT5jb3VudCA9IDE7CisJY3R4dC0+ZnJtciA9IHZlYy0+ZnJtcjsKKwlpZiAodmVjLT5mcm1yKQorCQlzZXRfYml0KFJETUFDVFhUX0ZfRkFTVF9VTlJFRywgJmN0eHQtPmZsYWdzKTsKKwllbHNlCisJCWNsZWFyX2JpdChSRE1BQ1RYVF9GX0ZBU1RfVU5SRUcsICZjdHh0LT5mbGFncyk7CiAKIAkvKiBQcmVwYXJlIHRoZSBTR0UgZm9yIHRoZSBSUENSRE1BIEhlYWRlciAqLwotCWF0b21pY19pbmMoJnJkbWEtPnNjX2RtYV91c2VkKTsKIAljdHh0LT5zZ2VbMF0uYWRkciA9CiAJCWliX2RtYV9tYXBfcGFnZShyZG1hLT5zY19jbV9pZC0+ZGV2aWNlLAogCQkJCXBhZ2UsIDAsIFBBR0VfU0laRSwgRE1BX1RPX0RFVklDRSk7CisJaWYgKGliX2RtYV9tYXBwaW5nX2Vycm9yKHJkbWEtPnNjX2NtX2lkLT5kZXZpY2UsIGN0eHQtPnNnZVswXS5hZGRyKSkKKwkJZ290byBlcnI7CisJYXRvbWljX2luYygmcmRtYS0+c2NfZG1hX3VzZWQpOworCiAJY3R4dC0+ZGlyZWN0aW9uID0gRE1BX1RPX0RFVklDRTsKKwogCWN0eHQtPnNnZVswXS5sZW5ndGggPSBzdmNfcmRtYV94ZHJfZ2V0X3JlcGx5X2hkcl9sZW4ocmRtYV9yZXNwKTsKLQljdHh0LT5zZ2VbMF0ubGtleSA9IHJkbWEtPnNjX3BoeXNfbXItPmxrZXk7CisJY3R4dC0+c2dlWzBdLmxrZXkgPSByZG1hLT5zY19kbWFfbGtleTsKIAogCS8qIERldGVybWluZSBob3cgbWFueSBvZiBvdXIgU0dFIGFyZSB0byBiZSB0cmFuc21pdHRlZCAqLwogCWZvciAoc2dlX25vID0gMTsgYnl0ZV9jb3VudCAmJiBzZ2Vfbm8gPCB2ZWMtPmNvdW50OyBzZ2Vfbm8rKykgewogCQlzZ2VfYnl0ZXMgPSBtaW5fdChzaXplX3QsIHZlYy0+c2dlW3NnZV9ub10uaW92X2xlbiwgYnl0ZV9jb3VudCk7CiAJCWJ5dGVfY291bnQgLT0gc2dlX2J5dGVzOwotCQlhdG9taWNfaW5jKCZyZG1hLT5zY19kbWFfdXNlZCk7Ci0JCWN0eHQtPnNnZVtzZ2Vfbm9dLmFkZHIgPQotCQkJaWJfZG1hX21hcF9zaW5nbGUocmRtYS0+c2NfY21faWQtPmRldmljZSwKLQkJCQkJICB2ZWMtPnNnZVtzZ2Vfbm9dLmlvdl9iYXNlLAotCQkJCQkgIHNnZV9ieXRlcywgRE1BX1RPX0RFVklDRSk7CisJCWlmICghdmVjLT5mcm1yKSB7CisJCQljdHh0LT5zZ2Vbc2dlX25vXS5hZGRyID0KKwkJCQlpYl9kbWFfbWFwX3NpbmdsZShyZG1hLT5zY19jbV9pZC0+ZGV2aWNlLAorCQkJCQkJICB2ZWMtPnNnZVtzZ2Vfbm9dLmlvdl9iYXNlLAorCQkJCQkJICBzZ2VfYnl0ZXMsIERNQV9UT19ERVZJQ0UpOworCQkJaWYgKGliX2RtYV9tYXBwaW5nX2Vycm9yKHJkbWEtPnNjX2NtX2lkLT5kZXZpY2UsCisJCQkJCQkgY3R4dC0+c2dlW3NnZV9ub10uYWRkcikpCisJCQkJZ290byBlcnI7CisJCQlhdG9taWNfaW5jKCZyZG1hLT5zY19kbWFfdXNlZCk7CisJCQljdHh0LT5zZ2Vbc2dlX25vXS5sa2V5ID0gcmRtYS0+c2NfZG1hX2xrZXk7CisJCX0gZWxzZSB7CisJCQljdHh0LT5zZ2Vbc2dlX25vXS5hZGRyID0gKHVuc2lnbmVkIGxvbmcpCisJCQkJdmVjLT5zZ2Vbc2dlX25vXS5pb3ZfYmFzZTsKKwkJCWN0eHQtPnNnZVtzZ2Vfbm9dLmxrZXkgPSB2ZWMtPmZybXItPm1yLT5sa2V5OworCQl9CiAJCWN0eHQtPnNnZVtzZ2Vfbm9dLmxlbmd0aCA9IHNnZV9ieXRlczsKLQkJY3R4dC0+c2dlW3NnZV9ub10ubGtleSA9IHJkbWEtPnNjX3BoeXNfbXItPmxrZXk7CiAJfQogCUJVR19PTihieXRlX2NvdW50ICE9IDApOwogCkBAIC00MTcsMTEgKzU3MCwxNiBAQAogCQljdHh0LT5wYWdlc1twYWdlX25vKzFdID0gcnFzdHAtPnJxX3Jlc3BhZ2VzW3BhZ2Vfbm9dOwogCQljdHh0LT5jb3VudCsrOwogCQlycXN0cC0+cnFfcmVzcGFnZXNbcGFnZV9ub10gPSBOVUxMOwotCQkvKiBJZiB0aGVyZSBhcmUgbW9yZSBwYWdlcyB0aGFuIFNHRSwgdGVybWluYXRlIFNHRSBsaXN0ICovCisJCS8qCisJCSAqIElmIHRoZXJlIGFyZSBtb3JlIHBhZ2VzIHRoYW4gU0dFLCB0ZXJtaW5hdGUgU0dFCisJCSAqIGxpc3Qgc28gdGhhdCBzdmNfcmRtYV91bm1hcF9kbWEgZG9lc24ndCBhdHRlbXB0IHRvCisJCSAqIHVubWFwIGdhcmJhZ2UuCisJCSAqLwogCQlpZiAocGFnZV9ubysxID49IHNnZV9ubykKIAkJCWN0eHQtPnNnZVtwYWdlX25vKzFdLmxlbmd0aCA9IDA7CiAJfQogCUJVR19PTihzZ2Vfbm8gPiByZG1hLT5zY19tYXhfc2dlKTsKKwlCVUdfT04oc2dlX25vID4gY3R4dC0+Y291bnQpOwogCW1lbXNldCgmc2VuZF93ciwgMCwgc2l6ZW9mIHNlbmRfd3IpOwogCWN0eHQtPndyX29wID0gSUJfV1JfU0VORDsKIAlzZW5kX3dyLndyX2lkID0gKHVuc2lnbmVkIGxvbmcpY3R4dDsKQEAgLTQyOSwxMiArNTg3LDI2IEBACiAJc2VuZF93ci5udW1fc2dlID0gc2dlX25vOwogCXNlbmRfd3Iub3Bjb2RlID0gSUJfV1JfU0VORDsKIAlzZW5kX3dyLnNlbmRfZmxhZ3MgPSAgSUJfU0VORF9TSUdOQUxFRDsKKwlpZiAodmVjLT5mcm1yKSB7CisJCS8qIFByZXBhcmUgSU5WQUxJREFURSBXUiAqLworCQltZW1zZXQoJmludl93ciwgMCwgc2l6ZW9mIGludl93cik7CisJCWludl93ci5vcGNvZGUgPSBJQl9XUl9MT0NBTF9JTlY7CisJCWludl93ci5zZW5kX2ZsYWdzID0gSUJfU0VORF9TSUdOQUxFRDsKKwkJaW52X3dyLmV4LmludmFsaWRhdGVfcmtleSA9CisJCQl2ZWMtPmZybXItPm1yLT5sa2V5OworCQlzZW5kX3dyLm5leHQgPSAmaW52X3dyOworCX0KIAogCXJldCA9IHN2Y19yZG1hX3NlbmQocmRtYSwgJnNlbmRfd3IpOwogCWlmIChyZXQpCi0JCXN2Y19yZG1hX3B1dF9jb250ZXh0KGN0eHQsIDEpOworCQlnb3RvIGVycjsKIAotCXJldHVybiByZXQ7CisJcmV0dXJuIDA7CisKKyBlcnI6CisJc3ZjX3JkbWFfcHV0X2ZybXIocmRtYSwgdmVjLT5mcm1yKTsKKwlzdmNfcmRtYV9wdXRfY29udGV4dChjdHh0LCAxKTsKKwlyZXR1cm4gLUVJTzsKIH0KIAogdm9pZCBzdmNfcmRtYV9wcmVwX3JlcGx5X2hkcihzdHJ1Y3Qgc3ZjX3Jxc3QgKnJxc3RwKQpAQCAtNDc3LDggKzY0OSw5IEBACiAJY3R4dCA9IHN2Y19yZG1hX2dldF9jb250ZXh0KHJkbWEpOwogCWN0eHQtPmRpcmVjdGlvbiA9IERNQV9UT19ERVZJQ0U7CiAJdmVjID0gc3ZjX3JkbWFfZ2V0X3JlcV9tYXAoKTsKLQl4ZHJfdG9fc2dlKHJkbWEsICZycXN0cC0+cnFfcmVzLCB2ZWMpOwotCisJcmV0ID0gbWFwX3hkcihyZG1hLCAmcnFzdHAtPnJxX3JlcywgdmVjKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycjA7CiAJaW5saW5lX2J5dGVzID0gcnFzdHAtPnJxX3Jlcy5sZW47CiAKIAkvKiBDcmVhdGUgdGhlIFJETUEgcmVzcG9uc2UgaGVhZGVyICovCkBAIC00OTgsNyArNjcxLDcgQEAKIAlpZiAocmV0IDwgMCkgewogCQlwcmludGsoS0VSTl9FUlIgInN2Y3JkbWE6IGZhaWxlZCB0byBzZW5kIHdyaXRlIGNodW5rcywgcmM9JWRcbiIsCiAJCSAgICAgICByZXQpOwotCQlnb3RvIGVycm9yOworCQlnb3RvIGVycjE7CiAJfQogCWlubGluZV9ieXRlcyAtPSByZXQ7CiAKQEAgLTUwOCw3ICs2ODEsNyBAQAogCWlmIChyZXQgPCAwKSB7CiAJCXByaW50ayhLRVJOX0VSUiAic3ZjcmRtYTogZmFpbGVkIHRvIHNlbmQgcmVwbHkgY2h1bmtzLCByYz0lZFxuIiwKIAkJICAgICAgIHJldCk7Ci0JCWdvdG8gZXJyb3I7CisJCWdvdG8gZXJyMTsKIAl9CiAJaW5saW5lX2J5dGVzIC09IHJldDsKIApAQCAtNTE3LDkgKzY5MCwxMSBAQAogCXN2Y19yZG1hX3B1dF9yZXFfbWFwKHZlYyk7CiAJZHByaW50aygic3ZjcmRtYTogc2VuZF9yZXBseSByZXR1cm5zICVkXG4iLCByZXQpOwogCXJldHVybiByZXQ7Ci0gZXJyb3I6CisKKyBlcnIxOgorCXB1dF9wYWdlKHJlc19wYWdlKTsKKyBlcnIwOgogCXN2Y19yZG1hX3B1dF9yZXFfbWFwKHZlYyk7CiAJc3ZjX3JkbWFfcHV0X2NvbnRleHQoY3R4dCwgMCk7Ci0JcHV0X3BhZ2UocmVzX3BhZ2UpOwogCXJldHVybiByZXQ7CiB9CmRpZmYgLS1naXQgYS9uZXQvc3VucnBjL3hwcnRyZG1hL3N2Y19yZG1hX3RyYW5zcG9ydC5jIGIvbmV0L3N1bnJwYy94cHJ0cmRtYS9zdmNfcmRtYV90cmFuc3BvcnQuYwppbmRleCA5MDBjYjY5Li42ZmI0OTNjIDEwMDY0NAotLS0gYS9uZXQvc3VucnBjL3hwcnRyZG1hL3N2Y19yZG1hX3RyYW5zcG9ydC5jCisrKyBiL25ldC9zdW5ycGMveHBydHJkbWEvc3ZjX3JkbWFfdHJhbnNwb3J0LmMKQEAgLTEwMCwyMCArMTAwLDI5IEBACiAJY3R4dC0+eHBydCA9IHhwcnQ7CiAJSU5JVF9MSVNUX0hFQUQoJmN0eHQtPmR0b19xKTsKIAljdHh0LT5jb3VudCA9IDA7CisJY3R4dC0+ZnJtciA9IE5VTEw7CiAJYXRvbWljX2luYygmeHBydC0+c2NfY3R4dF91c2VkKTsKIAlyZXR1cm4gY3R4dDsKIH0KIAotc3RhdGljIHZvaWQgc3ZjX3JkbWFfdW5tYXBfZG1hKHN0cnVjdCBzdmNfcmRtYV9vcF9jdHh0ICpjdHh0KQordm9pZCBzdmNfcmRtYV91bm1hcF9kbWEoc3RydWN0IHN2Y19yZG1hX29wX2N0eHQgKmN0eHQpCiB7CiAJc3RydWN0IHN2Y3hwcnRfcmRtYSAqeHBydCA9IGN0eHQtPnhwcnQ7CiAJaW50IGk7CiAJZm9yIChpID0gMDsgaSA8IGN0eHQtPmNvdW50ICYmIGN0eHQtPnNnZVtpXS5sZW5ndGg7IGkrKykgewotCQlhdG9taWNfZGVjKCZ4cHJ0LT5zY19kbWFfdXNlZCk7Ci0JCWliX2RtYV91bm1hcF9zaW5nbGUoeHBydC0+c2NfY21faWQtPmRldmljZSwKLQkJCQkgICAgY3R4dC0+c2dlW2ldLmFkZHIsCi0JCQkJICAgIGN0eHQtPnNnZVtpXS5sZW5ndGgsCi0JCQkJICAgIGN0eHQtPmRpcmVjdGlvbik7CisJCS8qCisJCSAqIFVubWFwIHRoZSBETUEgYWRkciBpbiB0aGUgU0dFIGlmIHRoZSBsa2V5IG1hdGNoZXMKKwkJICogdGhlIHNjX2RtYV9sa2V5LCBvdGhlcndpc2UsIGlnbm9yZSBpdCBzaW5jZSBpdCBpcworCQkgKiBhbiBGUk1SIGxrZXkgYW5kIHdpbGwgYmUgdW5tYXBwZWQgbGF0ZXIgd2hlbiB0aGUKKwkJICogbGFzdCBXUiB0aGF0IHVzZXMgaXQgY29tcGxldGVzLgorCQkgKi8KKwkJaWYgKGN0eHQtPnNnZVtpXS5sa2V5ID09IHhwcnQtPnNjX2RtYV9sa2V5KSB7CisJCQlhdG9taWNfZGVjKCZ4cHJ0LT5zY19kbWFfdXNlZCk7CisJCQlpYl9kbWFfdW5tYXBfc2luZ2xlKHhwcnQtPnNjX2NtX2lkLT5kZXZpY2UsCisJCQkJCSAgICBjdHh0LT5zZ2VbaV0uYWRkciwKKwkJCQkJICAgIGN0eHQtPnNnZVtpXS5sZW5ndGgsCisJCQkJCSAgICBjdHh0LT5kaXJlY3Rpb24pOworCQl9CiAJfQogfQogCkBAIC0xNTAsNiArMTU5LDcgQEAKIAkJc2NoZWR1bGVfdGltZW91dF91bmludGVycnVwdGlibGUobXNlY3NfdG9famlmZmllcyg1MDApKTsKIAl9CiAJbWFwLT5jb3VudCA9IDA7CisJbWFwLT5mcm1yID0gTlVMTDsKIAlyZXR1cm4gbWFwOwogfQogCkBAIC0zMTYsNiArMzI2LDUwIEBACiB9CiAKIC8qCisgKiBQcm9jZXNzcyBhIGNvbXBsZXRpb24gY29udGV4dAorICovCitzdGF0aWMgdm9pZCBwcm9jZXNzX2NvbnRleHQoc3RydWN0IHN2Y3hwcnRfcmRtYSAqeHBydCwKKwkJCSAgICBzdHJ1Y3Qgc3ZjX3JkbWFfb3BfY3R4dCAqY3R4dCkKK3sKKwlzdmNfcmRtYV91bm1hcF9kbWEoY3R4dCk7CisKKwlzd2l0Y2ggKGN0eHQtPndyX29wKSB7CisJY2FzZSBJQl9XUl9TRU5EOgorCQlpZiAodGVzdF9iaXQoUkRNQUNUWFRfRl9GQVNUX1VOUkVHLCAmY3R4dC0+ZmxhZ3MpKQorCQkJc3ZjX3JkbWFfcHV0X2ZybXIoeHBydCwgY3R4dC0+ZnJtcik7CisJCXN2Y19yZG1hX3B1dF9jb250ZXh0KGN0eHQsIDEpOworCQlicmVhazsKKworCWNhc2UgSUJfV1JfUkRNQV9XUklURToKKwkJc3ZjX3JkbWFfcHV0X2NvbnRleHQoY3R4dCwgMCk7CisJCWJyZWFrOworCisJY2FzZSBJQl9XUl9SRE1BX1JFQUQ6CisJY2FzZSBJQl9XUl9SRE1BX1JFQURfV0lUSF9JTlY6CisJCWlmICh0ZXN0X2JpdChSRE1BQ1RYVF9GX0xBU1RfQ1RYVCwgJmN0eHQtPmZsYWdzKSkgeworCQkJc3RydWN0IHN2Y19yZG1hX29wX2N0eHQgKnJlYWRfaGRyID0gY3R4dC0+cmVhZF9oZHI7CisJCQlCVUdfT04oIXJlYWRfaGRyKTsKKwkJCWlmICh0ZXN0X2JpdChSRE1BQ1RYVF9GX0ZBU1RfVU5SRUcsICZjdHh0LT5mbGFncykpCisJCQkJc3ZjX3JkbWFfcHV0X2ZybXIoeHBydCwgY3R4dC0+ZnJtcik7CisJCQlzcGluX2xvY2tfYmgoJnhwcnQtPnNjX3JxX2R0b19sb2NrKTsKKwkJCXNldF9iaXQoWFBUX0RBVEEsICZ4cHJ0LT5zY194cHJ0LnhwdF9mbGFncyk7CisJCQlsaXN0X2FkZF90YWlsKCZyZWFkX2hkci0+ZHRvX3EsCisJCQkJICAgICAgJnhwcnQtPnNjX3JlYWRfY29tcGxldGVfcSk7CisJCQlzcGluX3VubG9ja19iaCgmeHBydC0+c2NfcnFfZHRvX2xvY2spOworCQkJc3ZjX3hwcnRfZW5xdWV1ZSgmeHBydC0+c2NfeHBydCk7CisJCX0KKwkJc3ZjX3JkbWFfcHV0X2NvbnRleHQoY3R4dCwgMCk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJcHJpbnRrKEtFUk5fRVJSICJzdmNyZG1hOiB1bmV4cGVjdGVkIGNvbXBsZXRpb24gdHlwZSwgIgorCQkgICAgICAgIm9wY29kZT0lZFxuIiwKKwkJICAgICAgIGN0eHQtPndyX29wKTsKKwkJYnJlYWs7CisJfQorfQorCisvKgogICogU2VuZCBRdWV1ZSBDb21wbGV0aW9uIEhhbmRsZXIgLSBwb3RlbnRpYWxseSBjYWxsZWQgb24gaW50ZXJydXB0IGNvbnRleHQuCiAgKgogICogTm90ZSB0aGF0IGNhbGxlciBtdXN0IGhvbGQgYSB0cmFuc3BvcnQgcmVmZXJlbmNlLgpAQCAtMzI3LDE3ICszODEsMTIgQEAKIAlzdHJ1Y3QgaWJfY3EgKmNxID0geHBydC0+c2Nfc3FfY3E7CiAJaW50IHJldDsKIAotCiAJaWYgKCF0ZXN0X2FuZF9jbGVhcl9iaXQoUkRNQVhQUlRfU1FfUEVORElORywgJnhwcnQtPnNjX2ZsYWdzKSkKIAkJcmV0dXJuOwogCiAJaWJfcmVxX25vdGlmeV9jcSh4cHJ0LT5zY19zcV9jcSwgSUJfQ1FfTkVYVF9DT01QKTsKIAlhdG9taWNfaW5jKCZyZG1hX3N0YXRfc3FfcG9sbCk7CiAJd2hpbGUgKChyZXQgPSBpYl9wb2xsX2NxKGNxLCAxLCAmd2MpKSA+IDApIHsKLQkJY3R4dCA9IChzdHJ1Y3Qgc3ZjX3JkbWFfb3BfY3R4dCAqKSh1bnNpZ25lZCBsb25nKXdjLndyX2lkOwotCQl4cHJ0ID0gY3R4dC0+eHBydDsKLQotCQlzdmNfcmRtYV91bm1hcF9kbWEoY3R4dCk7CiAJCWlmICh3Yy5zdGF0dXMgIT0gSUJfV0NfU1VDQ0VTUykKIAkJCS8qIENsb3NlIHRoZSB0cmFuc3BvcnQgKi8KIAkJCXNldF9iaXQoWFBUX0NMT1NFLCAmeHBydC0+c2NfeHBydC54cHRfZmxhZ3MpOwpAQCAtMzQ2LDM1ICszOTUsMTAgQEAKIAkJYXRvbWljX2RlYygmeHBydC0+c2Nfc3FfY291bnQpOwogCQl3YWtlX3VwKCZ4cHJ0LT5zY19zZW5kX3dhaXQpOwogCi0JCXN3aXRjaCAoY3R4dC0+d3Jfb3ApIHsKLQkJY2FzZSBJQl9XUl9TRU5EOgotCQkJc3ZjX3JkbWFfcHV0X2NvbnRleHQoY3R4dCwgMSk7Ci0JCQlicmVhazsKKwkJY3R4dCA9IChzdHJ1Y3Qgc3ZjX3JkbWFfb3BfY3R4dCAqKSh1bnNpZ25lZCBsb25nKXdjLndyX2lkOworCQlpZiAoY3R4dCkKKwkJCXByb2Nlc3NfY29udGV4dCh4cHJ0LCBjdHh0KTsKIAotCQljYXNlIElCX1dSX1JETUFfV1JJVEU6Ci0JCQlzdmNfcmRtYV9wdXRfY29udGV4dChjdHh0LCAwKTsKLQkJCWJyZWFrOwotCi0JCWNhc2UgSUJfV1JfUkRNQV9SRUFEOgotCQkJaWYgKHRlc3RfYml0KFJETUFDVFhUX0ZfTEFTVF9DVFhULCAmY3R4dC0+ZmxhZ3MpKSB7Ci0JCQkJc3RydWN0IHN2Y19yZG1hX29wX2N0eHQgKnJlYWRfaGRyID0gY3R4dC0+cmVhZF9oZHI7Ci0JCQkJQlVHX09OKCFyZWFkX2hkcik7Ci0JCQkJc3Bpbl9sb2NrX2JoKCZ4cHJ0LT5zY19ycV9kdG9fbG9jayk7Ci0JCQkJc2V0X2JpdChYUFRfREFUQSwgJnhwcnQtPnNjX3hwcnQueHB0X2ZsYWdzKTsKLQkJCQlsaXN0X2FkZF90YWlsKCZyZWFkX2hkci0+ZHRvX3EsCi0JCQkJCSAgICAgICZ4cHJ0LT5zY19yZWFkX2NvbXBsZXRlX3EpOwotCQkJCXNwaW5fdW5sb2NrX2JoKCZ4cHJ0LT5zY19ycV9kdG9fbG9jayk7Ci0JCQkJc3ZjX3hwcnRfZW5xdWV1ZSgmeHBydC0+c2NfeHBydCk7Ci0JCQl9Ci0JCQlzdmNfcmRtYV9wdXRfY29udGV4dChjdHh0LCAwKTsKLQkJCWJyZWFrOwotCi0JCWRlZmF1bHQ6Ci0JCQlwcmludGsoS0VSTl9FUlIgInN2Y3JkbWE6IHVuZXhwZWN0ZWQgY29tcGxldGlvbiB0eXBlLCAiCi0JCQkgICAgICAgIm9wY29kZT0lZCwgc3RhdHVzPSVkXG4iLAotCQkJICAgICAgIHdjLm9wY29kZSwgd2Muc3RhdHVzKTsKLQkJCWJyZWFrOwotCQl9CiAJCXN2Y194cHJ0X3B1dCgmeHBydC0+c2NfeHBydCk7CiAJfQogCkBAIC00MjUsMTAgKzQ0OSwxMiBAQAogCUlOSVRfTElTVF9IRUFEKCZjbWFfeHBydC0+c2NfZHRvX3EpOwogCUlOSVRfTElTVF9IRUFEKCZjbWFfeHBydC0+c2NfcnFfZHRvX3EpOwogCUlOSVRfTElTVF9IRUFEKCZjbWFfeHBydC0+c2NfcmVhZF9jb21wbGV0ZV9xKTsKKwlJTklUX0xJU1RfSEVBRCgmY21hX3hwcnQtPnNjX2ZybXJfcSk7CiAJaW5pdF93YWl0cXVldWVfaGVhZCgmY21hX3hwcnQtPnNjX3NlbmRfd2FpdCk7CiAKIAlzcGluX2xvY2tfaW5pdCgmY21hX3hwcnQtPnNjX2xvY2spOwogCXNwaW5fbG9ja19pbml0KCZjbWFfeHBydC0+c2NfcnFfZHRvX2xvY2spOworCXNwaW5fbG9ja19pbml0KCZjbWFfeHBydC0+c2NfZnJtcl9xX2xvY2spOwogCiAJY21hX3hwcnQtPnNjX29yZCA9IHN2Y3JkbWFfb3JkOwogCkBAIC00NjIsNyArNDg4LDcgQEAKIAlzdHJ1Y3QgaWJfcmVjdl93ciByZWN2X3dyLCAqYmFkX3JlY3Zfd3I7CiAJc3RydWN0IHN2Y19yZG1hX29wX2N0eHQgKmN0eHQ7CiAJc3RydWN0IHBhZ2UgKnBhZ2U7Ci0JdW5zaWduZWQgbG9uZyBwYTsKKwlkbWFfYWRkcl90IHBhOwogCWludCBzZ2Vfbm87CiAJaW50IGJ1ZmxlbjsKIAlpbnQgcmV0OwpAQCAtNDc0LDEzICs1MDAsMTUgQEAKIAkJQlVHX09OKHNnZV9ubyA+PSB4cHJ0LT5zY19tYXhfc2dlKTsKIAkJcGFnZSA9IHN2Y19yZG1hX2dldF9wYWdlKCk7CiAJCWN0eHQtPnBhZ2VzW3NnZV9ub10gPSBwYWdlOwotCQlhdG9taWNfaW5jKCZ4cHJ0LT5zY19kbWFfdXNlZCk7CiAJCXBhID0gaWJfZG1hX21hcF9wYWdlKHhwcnQtPnNjX2NtX2lkLT5kZXZpY2UsCiAJCQkJICAgICBwYWdlLCAwLCBQQUdFX1NJWkUsCiAJCQkJICAgICBETUFfRlJPTV9ERVZJQ0UpOworCQlpZiAoaWJfZG1hX21hcHBpbmdfZXJyb3IoeHBydC0+c2NfY21faWQtPmRldmljZSwgcGEpKQorCQkJZ290byBlcnJfcHV0X2N0eHQ7CisJCWF0b21pY19pbmMoJnhwcnQtPnNjX2RtYV91c2VkKTsKIAkJY3R4dC0+c2dlW3NnZV9ub10uYWRkciA9IHBhOwogCQljdHh0LT5zZ2Vbc2dlX25vXS5sZW5ndGggPSBQQUdFX1NJWkU7Ci0JCWN0eHQtPnNnZVtzZ2Vfbm9dLmxrZXkgPSB4cHJ0LT5zY19waHlzX21yLT5sa2V5OworCQljdHh0LT5zZ2Vbc2dlX25vXS5sa2V5ID0geHBydC0+c2NfZG1hX2xrZXk7CiAJCWJ1ZmxlbiArPSBQQUdFX1NJWkU7CiAJfQogCWN0eHQtPmNvdW50ID0gc2dlX25vOwpAQCAtNDk2LDYgKzUyNCwxMCBAQAogCQlzdmNfcmRtYV9wdXRfY29udGV4dChjdHh0LCAxKTsKIAl9CiAJcmV0dXJuIHJldDsKKworIGVycl9wdXRfY3R4dDoKKwlzdmNfcmRtYV9wdXRfY29udGV4dChjdHh0LCAxKTsKKwlyZXR1cm4gLUVOT01FTTsKIH0KIAogLyoKQEAgLTU2Niw3ICs1OTgsNyBAQAogCQlkcHJpbnRrKCJzdmNyZG1hOiBDb25uZWN0IHJlcXVlc3Qgb24gY21hX2lkPSVwLCB4cHJ0ID0gJXAsICIKIAkJCSJldmVudD0lZFxuIiwgY21hX2lkLCBjbWFfaWQtPmNvbnRleHQsIGV2ZW50LT5ldmVudCk7CiAJCWhhbmRsZV9jb25uZWN0X3JlcShjbWFfaWQsCi0JCQkJICAgZXZlbnQtPnBhcmFtLmNvbm4ucmVzcG9uZGVyX3Jlc291cmNlcyk7CisJCQkJICAgZXZlbnQtPnBhcmFtLmNvbm4uaW5pdGlhdG9yX2RlcHRoKTsKIAkJYnJlYWs7CiAKIAljYXNlIFJETUFfQ01fRVZFTlRfRVNUQUJMSVNIRUQ6CkBAIC02ODYsNiArNzE4LDk3IEBACiAJcmV0dXJuIEVSUl9QVFIocmV0KTsKIH0KIAorc3RhdGljIHN0cnVjdCBzdmNfcmRtYV9mYXN0cmVnX21yICpyZG1hX2FsbG9jX2ZybXIoc3RydWN0IHN2Y3hwcnRfcmRtYSAqeHBydCkKK3sKKwlzdHJ1Y3QgaWJfbXIgKm1yOworCXN0cnVjdCBpYl9mYXN0X3JlZ19wYWdlX2xpc3QgKnBsOworCXN0cnVjdCBzdmNfcmRtYV9mYXN0cmVnX21yICpmcm1yOworCisJZnJtciA9IGttYWxsb2Moc2l6ZW9mKCpmcm1yKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFmcm1yKQorCQlnb3RvIGVycjsKKworCW1yID0gaWJfYWxsb2NfZmFzdF9yZWdfbXIoeHBydC0+c2NfcGQsIFJQQ1NWQ19NQVhQQUdFUyk7CisJaWYgKCFtcikKKwkJZ290byBlcnJfZnJlZV9mcm1yOworCisJcGwgPSBpYl9hbGxvY19mYXN0X3JlZ19wYWdlX2xpc3QoeHBydC0+c2NfY21faWQtPmRldmljZSwKKwkJCQkJIFJQQ1NWQ19NQVhQQUdFUyk7CisJaWYgKCFwbCkKKwkJZ290byBlcnJfZnJlZV9tcjsKKworCWZybXItPm1yID0gbXI7CisJZnJtci0+cGFnZV9saXN0ID0gcGw7CisJSU5JVF9MSVNUX0hFQUQoJmZybXItPmZybXJfbGlzdCk7CisJcmV0dXJuIGZybXI7CisKKyBlcnJfZnJlZV9tcjoKKwlpYl9kZXJlZ19tcihtcik7CisgZXJyX2ZyZWVfZnJtcjoKKwlrZnJlZShmcm1yKTsKKyBlcnI6CisJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7Cit9CisKK3N0YXRpYyB2b2lkIHJkbWFfZGVhbGxvY19mcm1yX3Eoc3RydWN0IHN2Y3hwcnRfcmRtYSAqeHBydCkKK3sKKwlzdHJ1Y3Qgc3ZjX3JkbWFfZmFzdHJlZ19tciAqZnJtcjsKKworCXdoaWxlICghbGlzdF9lbXB0eSgmeHBydC0+c2NfZnJtcl9xKSkgeworCQlmcm1yID0gbGlzdF9lbnRyeSh4cHJ0LT5zY19mcm1yX3EubmV4dCwKKwkJCQkgIHN0cnVjdCBzdmNfcmRtYV9mYXN0cmVnX21yLCBmcm1yX2xpc3QpOworCQlsaXN0X2RlbF9pbml0KCZmcm1yLT5mcm1yX2xpc3QpOworCQlpYl9kZXJlZ19tcihmcm1yLT5tcik7CisJCWliX2ZyZWVfZmFzdF9yZWdfcGFnZV9saXN0KGZybXItPnBhZ2VfbGlzdCk7CisJCWtmcmVlKGZybXIpOworCX0KK30KKworc3RydWN0IHN2Y19yZG1hX2Zhc3RyZWdfbXIgKnN2Y19yZG1hX2dldF9mcm1yKHN0cnVjdCBzdmN4cHJ0X3JkbWEgKnJkbWEpCit7CisJc3RydWN0IHN2Y19yZG1hX2Zhc3RyZWdfbXIgKmZybXIgPSBOVUxMOworCisJc3Bpbl9sb2NrX2JoKCZyZG1hLT5zY19mcm1yX3FfbG9jayk7CisJaWYgKCFsaXN0X2VtcHR5KCZyZG1hLT5zY19mcm1yX3EpKSB7CisJCWZybXIgPSBsaXN0X2VudHJ5KHJkbWEtPnNjX2ZybXJfcS5uZXh0LAorCQkJCSAgc3RydWN0IHN2Y19yZG1hX2Zhc3RyZWdfbXIsIGZybXJfbGlzdCk7CisJCWxpc3RfZGVsX2luaXQoJmZybXItPmZybXJfbGlzdCk7CisJCWZybXItPm1hcF9sZW4gPSAwOworCQlmcm1yLT5wYWdlX2xpc3RfbGVuID0gMDsKKwl9CisJc3Bpbl91bmxvY2tfYmgoJnJkbWEtPnNjX2ZybXJfcV9sb2NrKTsKKwlpZiAoZnJtcikKKwkJcmV0dXJuIGZybXI7CisKKwlyZXR1cm4gcmRtYV9hbGxvY19mcm1yKHJkbWEpOworfQorCitzdGF0aWMgdm9pZCBmcm1yX3VubWFwX2RtYShzdHJ1Y3Qgc3ZjeHBydF9yZG1hICp4cHJ0LAorCQkJICAgc3RydWN0IHN2Y19yZG1hX2Zhc3RyZWdfbXIgKmZybXIpCit7CisJaW50IHBhZ2Vfbm87CisJZm9yIChwYWdlX25vID0gMDsgcGFnZV9ubyA8IGZybXItPnBhZ2VfbGlzdF9sZW47IHBhZ2Vfbm8rKykgeworCQlkbWFfYWRkcl90IGFkZHIgPSBmcm1yLT5wYWdlX2xpc3QtPnBhZ2VfbGlzdFtwYWdlX25vXTsKKwkJaWYgKGliX2RtYV9tYXBwaW5nX2Vycm9yKGZybXItPm1yLT5kZXZpY2UsIGFkZHIpKQorCQkJY29udGludWU7CisJCWF0b21pY19kZWMoJnhwcnQtPnNjX2RtYV91c2VkKTsKKwkJaWJfZG1hX3VubWFwX3NpbmdsZShmcm1yLT5tci0+ZGV2aWNlLCBhZGRyLCBQQUdFX1NJWkUsCisJCQkJICAgIGZybXItPmRpcmVjdGlvbik7CisJfQorfQorCit2b2lkIHN2Y19yZG1hX3B1dF9mcm1yKHN0cnVjdCBzdmN4cHJ0X3JkbWEgKnJkbWEsCisJCSAgICAgICBzdHJ1Y3Qgc3ZjX3JkbWFfZmFzdHJlZ19tciAqZnJtcikKK3sKKwlpZiAoZnJtcikgeworCQlmcm1yX3VubWFwX2RtYShyZG1hLCBmcm1yKTsKKwkJc3Bpbl9sb2NrX2JoKCZyZG1hLT5zY19mcm1yX3FfbG9jayk7CisJCUJVR19PTighbGlzdF9lbXB0eSgmZnJtci0+ZnJtcl9saXN0KSk7CisJCWxpc3RfYWRkKCZmcm1yLT5mcm1yX2xpc3QsICZyZG1hLT5zY19mcm1yX3EpOworCQlzcGluX3VubG9ja19iaCgmcmRtYS0+c2NfZnJtcl9xX2xvY2spOworCX0KK30KKwogLyoKICAqIFRoaXMgaXMgdGhlIHhwb19yZWN2ZnJvbSBmdW5jdGlvbiBmb3IgbGlzdGVuaW5nIGVuZHBvaW50cy4gSXRzCiAgKiBwdXJwb3NlIGlzIHRvIGFjY2VwdCBpbmNvbWluZyBjb25uZWN0aW9ucy4gVGhlIENNQSBjYWxsYmFjayBoYW5kbGVyCkBAIC03MDQsNiArODI3LDggQEAKIAlzdHJ1Y3QgcmRtYV9jb25uX3BhcmFtIGNvbm5fcGFyYW07CiAJc3RydWN0IGliX3FwX2luaXRfYXR0ciBxcF9hdHRyOwogCXN0cnVjdCBpYl9kZXZpY2VfYXR0ciBkZXZhdHRyOworCWludCBkbWFfbXJfYWNjOworCWludCBuZWVkX2RtYV9tcjsKIAlpbnQgcmV0OwogCWludCBpOwogCkBAIC04MTksMTUgKzk0NCw3NyBAQAogCX0KIAluZXd4cHJ0LT5zY19xcCA9IG5ld3hwcnQtPnNjX2NtX2lkLT5xcDsKIAotCS8qIFJlZ2lzdGVyIGFsbCBvZiBwaHlzaWNhbCBtZW1vcnkgKi8KLQluZXd4cHJ0LT5zY19waHlzX21yID0gaWJfZ2V0X2RtYV9tcihuZXd4cHJ0LT5zY19wZCwKLQkJCQkJICAgIElCX0FDQ0VTU19MT0NBTF9XUklURSB8Ci0JCQkJCSAgICBJQl9BQ0NFU1NfUkVNT1RFX1dSSVRFKTsKLQlpZiAoSVNfRVJSKG5ld3hwcnQtPnNjX3BoeXNfbXIpKSB7Ci0JCWRwcmludGsoInN2Y3JkbWE6IEZhaWxlZCB0byBjcmVhdGUgRE1BIE1SIHJldD0lZFxuIiwgcmV0KTsKKwkvKgorCSAqIFVzZSB0aGUgbW9zdCBzZWN1cmUgc2V0IG9mIE1SIHJlc291cmNlcyBiYXNlZCBvbiB0aGUKKwkgKiB0cmFuc3BvcnQgdHlwZSBhbmQgYXZhaWxhYmxlIG1lbW9yeSBtYW5hZ2VtZW50IGZlYXR1cmVzIGluCisJICogdGhlIGRldmljZS4gSGVyZSdzIHRoZSB0YWJsZSBpbXBsZW1lbnRlZCBiZWxvdzoKKwkgKgorCSAqCQlGYXN0CUdsb2JhbAlETUEJUmVtb3RlIFdSCisJICoJCVJlZwlMS0VZCU1SCUFjY2VzcworCSAqCQlTdXAnZAlTdXAnZAlOZWVkZWQJTmVlZGVkCisJICoKKwkgKiBJV0FSUAlOCU4JWQlZCisJICoJCU4JWQlZCVkKKwkgKgkJWQlOCVkJTgorCSAqCQlZCVkJTgktCisJICoKKwkgKiBJQgkJTglOCVkJTgorCSAqCQlOCVkJTgktCisJICoJCVkJTglZCU4KKwkgKgkJWQlZCU4JLQorCSAqCisJICogTkI6CWlXQVJQIHJlcXVpcmVzIHJlbW90ZSB3cml0ZSBhY2Nlc3MgZm9yIHRoZSBkYXRhIHNpbmsKKwkgKglvZiBhbiBSRE1BX1JFQUQuIElCIGRvZXMgbm90LgorCSAqLworCWlmIChkZXZhdHRyLmRldmljZV9jYXBfZmxhZ3MgJiBJQl9ERVZJQ0VfTUVNX01HVF9FWFRFTlNJT05TKSB7CisJCW5ld3hwcnQtPnNjX2ZybXJfcGdfbGlzdF9sZW4gPQorCQkJZGV2YXR0ci5tYXhfZmFzdF9yZWdfcGFnZV9saXN0X2xlbjsKKwkJbmV3eHBydC0+c2NfZGV2X2NhcHMgfD0gU1ZDUkRNQV9ERVZDQVBfRkFTVF9SRUc7CisJfQorCisJLyoKKwkgKiBEZXRlcm1pbmUgaWYgYSBETUEgTVIgaXMgcmVxdWlyZWQgYW5kIGlmIHNvLCB3aGF0IHByaXZzIGFyZSByZXF1aXJlZAorCSAqLworCXN3aXRjaCAocmRtYV9ub2RlX2dldF90cmFuc3BvcnQobmV3eHBydC0+c2NfY21faWQtPmRldmljZS0+bm9kZV90eXBlKSkgeworCWNhc2UgUkRNQV9UUkFOU1BPUlRfSVdBUlA6CisJCW5ld3hwcnQtPnNjX2Rldl9jYXBzIHw9IFNWQ1JETUFfREVWQ0FQX1JFQURfV19JTlY7CisJCWlmICghKG5ld3hwcnQtPnNjX2Rldl9jYXBzICYgU1ZDUkRNQV9ERVZDQVBfRkFTVF9SRUcpKSB7CisJCQluZWVkX2RtYV9tciA9IDE7CisJCQlkbWFfbXJfYWNjID0KKwkJCQkoSUJfQUNDRVNTX0xPQ0FMX1dSSVRFIHwKKwkJCQkgSUJfQUNDRVNTX1JFTU9URV9XUklURSk7CisJCX0gZWxzZSBpZiAoIShkZXZhdHRyLmRldmljZV9jYXBfZmxhZ3MgJiBJQl9ERVZJQ0VfTE9DQUxfRE1BX0xLRVkpKSB7CisJCQluZWVkX2RtYV9tciA9IDE7CisJCQlkbWFfbXJfYWNjID0gSUJfQUNDRVNTX0xPQ0FMX1dSSVRFOworCQl9IGVsc2UKKwkJCW5lZWRfZG1hX21yID0gMDsKKwkJYnJlYWs7CisJY2FzZSBSRE1BX1RSQU5TUE9SVF9JQjoKKwkJaWYgKCEoZGV2YXR0ci5kZXZpY2VfY2FwX2ZsYWdzICYgSUJfREVWSUNFX0xPQ0FMX0RNQV9MS0VZKSkgeworCQkJbmVlZF9kbWFfbXIgPSAxOworCQkJZG1hX21yX2FjYyA9IElCX0FDQ0VTU19MT0NBTF9XUklURTsKKwkJfSBlbHNlCisJCQluZWVkX2RtYV9tciA9IDA7CisJCWJyZWFrOworCWRlZmF1bHQ6CiAJCWdvdG8gZXJyb3V0OwogCX0KIAorCS8qIENyZWF0ZSB0aGUgRE1BIE1SIGlmIG5lZWRlZCwgb3RoZXJ3aXNlLCB1c2UgdGhlIERNQSBMS0VZICovCisJaWYgKG5lZWRfZG1hX21yKSB7CisJCS8qIFJlZ2lzdGVyIGFsbCBvZiBwaHlzaWNhbCBtZW1vcnkgKi8KKwkJbmV3eHBydC0+c2NfcGh5c19tciA9CisJCQlpYl9nZXRfZG1hX21yKG5ld3hwcnQtPnNjX3BkLCBkbWFfbXJfYWNjKTsKKwkJaWYgKElTX0VSUihuZXd4cHJ0LT5zY19waHlzX21yKSkgeworCQkJZHByaW50aygic3ZjcmRtYTogRmFpbGVkIHRvIGNyZWF0ZSBETUEgTVIgcmV0PSVkXG4iLAorCQkJCXJldCk7CisJCQlnb3RvIGVycm91dDsKKwkJfQorCQluZXd4cHJ0LT5zY19kbWFfbGtleSA9IG5ld3hwcnQtPnNjX3BoeXNfbXItPmxrZXk7CisJfSBlbHNlCisJCW5ld3hwcnQtPnNjX2RtYV9sa2V5ID0KKwkJCW5ld3hwcnQtPnNjX2NtX2lkLT5kZXZpY2UtPmxvY2FsX2RtYV9sa2V5OworCiAJLyogUG9zdCByZWNlaXZlIGJ1ZmZlcnMgKi8KIAlmb3IgKGkgPSAwOyBpIDwgbmV3eHBydC0+c2NfbWF4X3JlcXVlc3RzOyBpKyspIHsKIAkJcmV0ID0gc3ZjX3JkbWFfcG9zdF9yZWN2KG5ld3hwcnQpOwpAQCAtOTYxLDYgKzExNDgsOSBAQAogCVdBUk5fT04oYXRvbWljX3JlYWQoJnJkbWEtPnNjX2N0eHRfdXNlZCkgIT0gMCk7CiAJV0FSTl9PTihhdG9taWNfcmVhZCgmcmRtYS0+c2NfZG1hX3VzZWQpICE9IDApOwogCisJLyogRGUtYWxsb2NhdGUgZmFzdHJlZyBtciAqLworCXJkbWFfZGVhbGxvY19mcm1yX3EocmRtYSk7CisKIAkvKiBEZXN0cm95IHRoZSBRUCBpZiBwcmVzZW50IChub3QgYSBsaXN0ZW5lcikgKi8KIAlpZiAocmRtYS0+c2NfcXAgJiYgIUlTX0VSUihyZG1hLT5zY19xcCkpCiAJCWliX2Rlc3Ryb3lfcXAocmRtYS0+c2NfcXApOwpAQCAtMTAxNCwyMSArMTIwNCw1OSBAQAogCXJldHVybiAxOwogfQogCisvKgorICogQXR0ZW1wdCB0byByZWdpc3RlciB0aGUga3ZlYyByZXByZXNlbnRpbmcgdGhlIFJQQyBtZW1vcnkgd2l0aCB0aGUKKyAqIGRldmljZS4KKyAqCisgKiBSZXR1cm5zOgorICogIE5VTEwgOiBUaGUgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgZmFzdHJlZyBvciB0aGVyZSB3ZXJlIG5vIG1vcmUKKyAqICAgICAgICAgZmFzdHJlZyBtci4KKyAqICBmcm1yIDogVGhlIGt2ZWMgcmVnaXN0ZXIgcmVxdWVzdCB3YXMgc3VjY2Vzc2Z1bGx5IHBvc3RlZC4KKyAqICAgIDwwIDogQW4gZXJyb3Igd2FzIGVuY291bnRlcmVkIGF0dGVtcHRpbmcgdG8gcmVnaXN0ZXIgdGhlIGt2ZWMuCisgKi8KK2ludCBzdmNfcmRtYV9mYXN0cmVnKHN0cnVjdCBzdmN4cHJ0X3JkbWEgKnhwcnQsCisJCSAgICAgc3RydWN0IHN2Y19yZG1hX2Zhc3RyZWdfbXIgKmZybXIpCit7CisJc3RydWN0IGliX3NlbmRfd3IgZmFzdHJlZ193cjsKKwl1OCBrZXk7CisKKwkvKiBCdW1wIHRoZSBrZXkgKi8KKwlrZXkgPSAodTgpKGZybXItPm1yLT5sa2V5ICYgMHgwMDAwMDBGRik7CisJaWJfdXBkYXRlX2Zhc3RfcmVnX2tleShmcm1yLT5tciwgKytrZXkpOworCisJLyogUHJlcGFyZSBGQVNUUkVHIFdSICovCisJbWVtc2V0KCZmYXN0cmVnX3dyLCAwLCBzaXplb2YgZmFzdHJlZ193cik7CisJZmFzdHJlZ193ci5vcGNvZGUgPSBJQl9XUl9GQVNUX1JFR19NUjsKKwlmYXN0cmVnX3dyLnNlbmRfZmxhZ3MgPSBJQl9TRU5EX1NJR05BTEVEOworCWZhc3RyZWdfd3Iud3IuZmFzdF9yZWcuaW92YV9zdGFydCA9ICh1bnNpZ25lZCBsb25nKWZybXItPmt2YTsKKwlmYXN0cmVnX3dyLndyLmZhc3RfcmVnLnBhZ2VfbGlzdCA9IGZybXItPnBhZ2VfbGlzdDsKKwlmYXN0cmVnX3dyLndyLmZhc3RfcmVnLnBhZ2VfbGlzdF9sZW4gPSBmcm1yLT5wYWdlX2xpc3RfbGVuOworCWZhc3RyZWdfd3Iud3IuZmFzdF9yZWcucGFnZV9zaGlmdCA9IFBBR0VfU0hJRlQ7CisJZmFzdHJlZ193ci53ci5mYXN0X3JlZy5sZW5ndGggPSBmcm1yLT5tYXBfbGVuOworCWZhc3RyZWdfd3Iud3IuZmFzdF9yZWcuYWNjZXNzX2ZsYWdzID0gZnJtci0+YWNjZXNzX2ZsYWdzOworCWZhc3RyZWdfd3Iud3IuZmFzdF9yZWcucmtleSA9IGZybXItPm1yLT5sa2V5OworCXJldHVybiBzdmNfcmRtYV9zZW5kKHhwcnQsICZmYXN0cmVnX3dyKTsKK30KKwogaW50IHN2Y19yZG1hX3NlbmQoc3RydWN0IHN2Y3hwcnRfcmRtYSAqeHBydCwgc3RydWN0IGliX3NlbmRfd3IgKndyKQogewotCXN0cnVjdCBpYl9zZW5kX3dyICpiYWRfd3I7CisJc3RydWN0IGliX3NlbmRfd3IgKmJhZF93ciwgKm5fd3I7CisJaW50IHdyX2NvdW50OworCWludCBpOwogCWludCByZXQ7CiAKIAlpZiAodGVzdF9iaXQoWFBUX0NMT1NFLCAmeHBydC0+c2NfeHBydC54cHRfZmxhZ3MpKQogCQlyZXR1cm4gLUVOT1RDT05OOwogCiAJQlVHX09OKHdyLT5zZW5kX2ZsYWdzICE9IElCX1NFTkRfU0lHTkFMRUQpOwotCUJVR19PTigoKHN0cnVjdCBzdmNfcmRtYV9vcF9jdHh0ICopKHVuc2lnbmVkIGxvbmcpd3ItPndyX2lkKS0+d3Jfb3AgIT0KLQkJd3ItPm9wY29kZSk7CisJd3JfY291bnQgPSAxOworCWZvciAobl93ciA9IHdyLT5uZXh0OyBuX3dyOyBuX3dyID0gbl93ci0+bmV4dCkKKwkJd3JfY291bnQrKzsKKwogCS8qIElmIHRoZSBTUSBpcyBmdWxsLCB3YWl0IHVudGlsIGFuIFNRIGVudHJ5IGlzIGF2YWlsYWJsZSAqLwogCXdoaWxlICgxKSB7CiAJCXNwaW5fbG9ja19iaCgmeHBydC0+c2NfbG9jayk7Ci0JCWlmICh4cHJ0LT5zY19zcV9kZXB0aCA9PSBhdG9taWNfcmVhZCgmeHBydC0+c2Nfc3FfY291bnQpKSB7CisJCWlmICh4cHJ0LT5zY19zcV9kZXB0aCA8IGF0b21pY19yZWFkKCZ4cHJ0LT5zY19zcV9jb3VudCkgKyB3cl9jb3VudCkgewogCQkJc3Bpbl91bmxvY2tfYmgoJnhwcnQtPnNjX2xvY2spOwogCQkJYXRvbWljX2luYygmcmRtYV9zdGF0X3NxX3N0YXJ2ZSk7CiAKQEAgLTEwNDMsMTkgKzEyNzEsMjYgQEAKIAkJCQlyZXR1cm4gMDsKIAkJCWNvbnRpbnVlOwogCQl9Ci0JCS8qIEJ1bXBlZCB1c2VkIFNRIFdSIGNvdW50IGFuZCBwb3N0ICovCi0JCXN2Y194cHJ0X2dldCgmeHBydC0+c2NfeHBydCk7CisJCS8qIFRha2UgYSB0cmFuc3BvcnQgcmVmIGZvciBlYWNoIFdSIHBvc3RlZCAqLworCQlmb3IgKGkgPSAwOyBpIDwgd3JfY291bnQ7IGkrKykKKwkJCXN2Y194cHJ0X2dldCgmeHBydC0+c2NfeHBydCk7CisKKwkJLyogQnVtcCB1c2VkIFNRIFdSIGNvdW50IGFuZCBwb3N0ICovCisJCWF0b21pY19hZGQod3JfY291bnQsICZ4cHJ0LT5zY19zcV9jb3VudCk7CiAJCXJldCA9IGliX3Bvc3Rfc2VuZCh4cHJ0LT5zY19xcCwgd3IsICZiYWRfd3IpOwotCQlpZiAoIXJldCkKLQkJCWF0b21pY19pbmMoJnhwcnQtPnNjX3NxX2NvdW50KTsKLQkJZWxzZSB7Ci0JCQlzdmNfeHBydF9wdXQoJnhwcnQtPnNjX3hwcnQpOworCQlpZiAocmV0KSB7CisJCQlzZXRfYml0KFhQVF9DTE9TRSwgJnhwcnQtPnNjX3hwcnQueHB0X2ZsYWdzKTsKKwkJCWF0b21pY19zdWIod3JfY291bnQsICZ4cHJ0LT5zY19zcV9jb3VudCk7CisJCQlmb3IgKGkgPSAwOyBpIDwgd3JfY291bnQ7IGkgKyspCisJCQkJc3ZjX3hwcnRfcHV0KCZ4cHJ0LT5zY194cHJ0KTsKIAkJCWRwcmludGsoInN2Y3JkbWE6IGZhaWxlZCB0byBwb3N0IFNRIFdSIHJjPSVkLCAiCiAJCQkgICAgICAgInNjX3NxX2NvdW50PSVkLCBzY19zcV9kZXB0aD0lZFxuIiwKIAkJCSAgICAgICByZXQsIGF0b21pY19yZWFkKCZ4cHJ0LT5zY19zcV9jb3VudCksCiAJCQkgICAgICAgeHBydC0+c2Nfc3FfZGVwdGgpOwogCQl9CiAJCXNwaW5fdW5sb2NrX2JoKCZ4cHJ0LT5zY19sb2NrKTsKKwkJaWYgKHJldCkKKwkJCXdha2VfdXAoJnhwcnQtPnNjX3NlbmRfd2FpdCk7CiAJCWJyZWFrOwogCX0KIAlyZXR1cm4gcmV0OwpAQCAtMTA3OSwxMCArMTMxNCwxNCBAQAogCWxlbmd0aCA9IHN2Y19yZG1hX3hkcl9lbmNvZGVfZXJyb3IoeHBydCwgcm1zZ3AsIGVyciwgdmEpOwogCiAJLyogUHJlcGFyZSBTR0UgZm9yIGxvY2FsIGFkZHJlc3MgKi8KLQlhdG9taWNfaW5jKCZ4cHJ0LT5zY19kbWFfdXNlZCk7CiAJc2dlLmFkZHIgPSBpYl9kbWFfbWFwX3BhZ2UoeHBydC0+c2NfY21faWQtPmRldmljZSwKIAkJCQkgICBwLCAwLCBQQUdFX1NJWkUsIERNQV9GUk9NX0RFVklDRSk7Ci0Jc2dlLmxrZXkgPSB4cHJ0LT5zY19waHlzX21yLT5sa2V5OworCWlmIChpYl9kbWFfbWFwcGluZ19lcnJvcih4cHJ0LT5zY19jbV9pZC0+ZGV2aWNlLCBzZ2UuYWRkcikpIHsKKwkJcHV0X3BhZ2UocCk7CisJCXJldHVybjsKKwl9CisJYXRvbWljX2luYygmeHBydC0+c2NfZG1hX3VzZWQpOworCXNnZS5sa2V5ID0geHBydC0+c2NfZG1hX2xrZXk7CiAJc2dlLmxlbmd0aCA9IGxlbmd0aDsKIAogCWN0eHQgPSBzdmNfcmRtYV9nZXRfY29udGV4dCh4cHJ0KTsKQEAgLTExMDMsNiArMTM0Miw5IEBACiAJaWYgKHJldCkgewogCQlkcHJpbnRrKCJzdmNyZG1hOiBFcnJvciAlZCBwb3N0aW5nIHNlbmQgZm9yIHByb3RvY29sIGVycm9yXG4iLAogCQkJcmV0KTsKKwkJaWJfZG1hX3VubWFwX3BhZ2UoeHBydC0+c2NfY21faWQtPmRldmljZSwKKwkJCQkgIHNnZS5hZGRyLCBQQUdFX1NJWkUsCisJCQkJICBETUFfRlJPTV9ERVZJQ0UpOwogCQlzdmNfcmRtYV9wdXRfY29udGV4dChjdHh0LCAxKTsKIAl9CiB9CmRpZmYgLS1naXQgYS9uZXQvc3VucnBjL3hwcnRyZG1hL3RyYW5zcG9ydC5jIGIvbmV0L3N1bnJwYy94cHJ0cmRtYS90cmFuc3BvcnQuYwppbmRleCBhNTY0YzFhLi45ODM5YzNkIDEwMDY0NAotLS0gYS9uZXQvc3VucnBjL3hwcnRyZG1hL3RyYW5zcG9ydC5jCisrKyBiL25ldC9zdW5ycGMveHBydHJkbWEvdHJhbnNwb3J0LmMKQEAgLTcwLDExICs3MCw4IEBACiBzdGF0aWMgdW5zaWduZWQgaW50IHhwcnRfcmRtYV9tYXhfaW5saW5lX3JlYWQgPSBSUENSRE1BX0RFRl9JTkxJTkU7CiBzdGF0aWMgdW5zaWduZWQgaW50IHhwcnRfcmRtYV9tYXhfaW5saW5lX3dyaXRlID0gUlBDUkRNQV9ERUZfSU5MSU5FOwogc3RhdGljIHVuc2lnbmVkIGludCB4cHJ0X3JkbWFfaW5saW5lX3dyaXRlX3BhZGRpbmc7Ci0jaWYgIVJQQ1JETUFfUEVSU0lTVEVOVF9SRUdJU1RSQVRJT04KLXN0YXRpYyB1bnNpZ25lZCBpbnQgeHBydF9yZG1hX21lbXJlZ19zdHJhdGVneSA9IFJQQ1JETUFfUkVHSVNURVI7IC8qIEZNUj8gKi8KLSNlbHNlCi1zdGF0aWMgdW5zaWduZWQgaW50IHhwcnRfcmRtYV9tZW1yZWdfc3RyYXRlZ3kgPSBSUENSRE1BX0FMTFBIWVNJQ0FMOwotI2VuZGlmCitzdGF0aWMgdW5zaWduZWQgaW50IHhwcnRfcmRtYV9tZW1yZWdfc3RyYXRlZ3kgPSBSUENSRE1BX0ZSTVI7CisgICAgICAgICAgICAgICAgaW50IHhwcnRfcmRtYV9wYWRfb3B0aW1pemUgPSAwOwogCiAjaWZkZWYgUlBDX0RFQlVHCiAKQEAgLTE0MCw2ICsxMzcsMTQgQEAKIAkJLmV4dHJhMgkJPSAmbWF4X21lbXJlZywKIAl9LAogCXsKKwkJLmN0bF9uYW1lICAgICAgID0gQ1RMX1VOTlVNQkVSRUQsCisJCS5wcm9jbmFtZQk9ICJyZG1hX3BhZF9vcHRpbWl6ZSIsCisJCS5kYXRhCQk9ICZ4cHJ0X3JkbWFfcGFkX29wdGltaXplLAorCQkubWF4bGVuCQk9IHNpemVvZih1bnNpZ25lZCBpbnQpLAorCQkubW9kZQkJPSAwNjQ0LAorCQkucHJvY19oYW5kbGVyCT0gJnByb2NfZG9pbnR2ZWMsCisJfSwKKwl7CiAJCS5jdGxfbmFtZSA9IDAsCiAJfSwKIH07CkBAIC00NTgsNiArNDYzLDggQEAKIAlzdHJ1Y3QgcnBjcmRtYV94cHJ0ICpyX3hwcnQgPSBycGN4X3RvX3JkbWF4KHhwcnQpOwogCiAJZHByaW50aygiUlBDOiAgICAgICAlczogY2xvc2luZ1xuIiwgX19mdW5jX18pOworCWlmIChyX3hwcnQtPnJ4X2VwLnJlcF9jb25uZWN0ZWQgPiAwKQorCQl4cHJ0LT5yZWVzdGFibGlzaF90aW1lb3V0ID0gMDsKIAl4cHJ0X2Rpc2Nvbm5lY3RfZG9uZSh4cHJ0KTsKIAkodm9pZCkgcnBjcmRtYV9lcF9kaXNjb25uZWN0KCZyX3hwcnQtPnJ4X2VwLCAmcl94cHJ0LT5yeF9pYSk7CiB9CkBAIC00ODUsNiArNDkyLDExIEBACiAJCQkvKiBSZWNvbm5lY3QgKi8KIAkJCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmcl94cHJ0LT5yZG1hX2Nvbm5lY3QsCiAJCQkJeHBydC0+cmVlc3RhYmxpc2hfdGltZW91dCk7CisJCQl4cHJ0LT5yZWVzdGFibGlzaF90aW1lb3V0IDw8PSAxOworCQkJaWYgKHhwcnQtPnJlZXN0YWJsaXNoX3RpbWVvdXQgPiAoMzAgKiBIWikpCisJCQkJeHBydC0+cmVlc3RhYmxpc2hfdGltZW91dCA9ICgzMCAqIEhaKTsKKwkJCWVsc2UgaWYgKHhwcnQtPnJlZXN0YWJsaXNoX3RpbWVvdXQgPCAoNSAqIEhaKSkKKwkJCQl4cHJ0LT5yZWVzdGFibGlzaF90aW1lb3V0ID0gKDUgKiBIWik7CiAJCX0gZWxzZSB7CiAJCQlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJnJfeHBydC0+cmRtYV9jb25uZWN0LCAwKTsKIAkJCWlmICghUlBDX0lTX0FTWU5DKHRhc2spKQpAQCAtNTkxLDYgKzYwMyw3IEBACiAJfQogCWRwcmludGsoIlJQQzogICAgICAgJXM6IHNpemUgJXpkLCByZXF1ZXN0IDB4JXBcbiIsIF9fZnVuY19fLCBzaXplLCByZXEpOwogb3V0OgorCXJlcS0+cmxfY29ubmVjdF9jb29raWUgPSAwOwkvKiBvdXIgcmVzZXJ2ZWQgdmFsdWUgKi8KIAlyZXR1cm4gcmVxLT5ybF94ZHJfYnVmOwogCiBvdXRmYWlsOgpAQCAtNjk0LDEzICs3MDcsMjEgQEAKIAkJcmVxLT5ybF9yZXBseS0+cnJfeHBydCA9IHhwcnQ7CiAJfQogCi0JaWYgKHJwY3JkbWFfZXBfcG9zdCgmcl94cHJ0LT5yeF9pYSwgJnJfeHBydC0+cnhfZXAsIHJlcSkpIHsKLQkJeHBydF9kaXNjb25uZWN0X2RvbmUoeHBydCk7Ci0JCXJldHVybiAtRU5PVENPTk47CS8qIGltcGxpZXMgZGlzY29ubmVjdCAqLwotCX0KKwkvKiBNdXN0IHN1cHByZXNzIHJldHJhbnNtaXQgdG8gbWFpbnRhaW4gY3JlZGl0cyAqLworCWlmIChyZXEtPnJsX2Nvbm5lY3RfY29va2llID09IHhwcnQtPmNvbm5lY3RfY29va2llKQorCQlnb3RvIGRyb3BfY29ubmVjdGlvbjsKKwlyZXEtPnJsX2Nvbm5lY3RfY29va2llID0geHBydC0+Y29ubmVjdF9jb29raWU7CiAKKwlpZiAocnBjcmRtYV9lcF9wb3N0KCZyX3hwcnQtPnJ4X2lhLCAmcl94cHJ0LT5yeF9lcCwgcmVxKSkKKwkJZ290byBkcm9wX2Nvbm5lY3Rpb247CisKKwl0YXNrLT50a19ieXRlc19zZW50ICs9IHJxc3QtPnJxX3NuZF9idWYubGVuOwogCXJxc3QtPnJxX2J5dGVzX3NlbnQgPSAwOwogCXJldHVybiAwOworCitkcm9wX2Nvbm5lY3Rpb246CisJeHBydF9kaXNjb25uZWN0X2RvbmUoeHBydCk7CisJcmV0dXJuIC1FTk9UQ09OTjsJLyogaW1wbGllcyBkaXNjb25uZWN0ICovCiB9CiAKIHN0YXRpYyB2b2lkIHhwcnRfcmRtYV9wcmludF9zdGF0cyhzdHJ1Y3QgcnBjX3hwcnQgKnhwcnQsIHN0cnVjdCBzZXFfZmlsZSAqc2VxKQpAQCAtNzcwLDcgKzc5MSw3IEBACiB7CiAJaW50IHJjOwogCi0JZHByaW50aygiUlBDUkRNQSBNb2R1bGUgUmVtb3ZlZCwgZGVyZWdpc3RlciBSUEMgUkRNQSB0cmFuc3BvcnRcbiIpOworCWRwcmludGsoS0VSTl9JTkZPICJSUENSRE1BIE1vZHVsZSBSZW1vdmVkLCBkZXJlZ2lzdGVyIFJQQyBSRE1BIHRyYW5zcG9ydFxuIik7CiAjaWZkZWYgUlBDX0RFQlVHCiAJaWYgKHN1bnJwY190YWJsZV9oZWFkZXIpIHsKIAkJdW5yZWdpc3Rlcl9zeXNjdGxfdGFibGUoc3VucnBjX3RhYmxlX2hlYWRlcik7CmRpZmYgLS1naXQgYS9uZXQvc3VucnBjL3hwcnRyZG1hL3ZlcmJzLmMgYi9uZXQvc3VucnBjL3hwcnRyZG1hL3ZlcmJzLmMKaW5kZXggOGVhMjgzZS4uYTVmZWY1ZSAxMDA2NDQKLS0tIGEvbmV0L3N1bnJwYy94cHJ0cmRtYS92ZXJicy5jCisrKyBiL25ldC9zdW5ycGMveHBydHJkbWEvdmVyYnMuYwpAQCAtMjg0LDYgKzI4NCw3IEBACiAJc3dpdGNoIChldmVudC0+ZXZlbnQpIHsKIAljYXNlIFJETUFfQ01fRVZFTlRfQUREUl9SRVNPTFZFRDoKIAljYXNlIFJETUFfQ01fRVZFTlRfUk9VVEVfUkVTT0xWRUQ6CisJCWlhLT5yaV9hc3luY19yYyA9IDA7CiAJCWNvbXBsZXRlKCZpYS0+cmlfZG9uZSk7CiAJCWJyZWFrOwogCWNhc2UgUkRNQV9DTV9FVkVOVF9BRERSX0VSUk9SOgpAQCAtMzM4LDEzICszMzksMzIgQEAKIAkJd2FrZV91cF9hbGwoJmVwLT5yZXBfY29ubmVjdF93YWl0KTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJaWEtPnJpX2FzeW5jX3JjID0gLUVJTlZBTDsKLQkJZHByaW50aygiUlBDOiAgICAgICAlczogdW5leHBlY3RlZCBDTSBldmVudCAlWFxuIiwKKwkJZHByaW50aygiUlBDOiAgICAgICAlczogdW5leHBlY3RlZCBDTSBldmVudCAlZFxuIiwKIAkJCV9fZnVuY19fLCBldmVudC0+ZXZlbnQpOwotCQljb21wbGV0ZSgmaWEtPnJpX2RvbmUpOwogCQlicmVhazsKIAl9CiAKKyNpZmRlZiBSUENfREVCVUcKKwlpZiAoY29ubnN0YXRlID09IDEpIHsKKwkJaW50IGlyZCA9IGF0dHIubWF4X2Rlc3RfcmRfYXRvbWljOworCQlpbnQgdGlyZCA9IGVwLT5yZXBfcmVtb3RlX2NtYS5yZXNwb25kZXJfcmVzb3VyY2VzOworCQlwcmludGsoS0VSTl9JTkZPICJycGNyZG1hOiBjb25uZWN0aW9uIHRvICV1LiV1LiV1LiV1OiV1ICIKKwkJCSJvbiAlcywgbWVtcmVnICVkIHNsb3RzICVkIGlyZCAlZCVzXG4iLAorCQkJTklQUVVBRChhZGRyLT5zaW5fYWRkci5zX2FkZHIpLAorCQkJbnRvaHMoYWRkci0+c2luX3BvcnQpLAorCQkJaWEtPnJpX2lkLT5kZXZpY2UtPm5hbWUsCisJCQlpYS0+cmlfbWVtcmVnX3N0cmF0ZWd5LAorCQkJeHBydC0+cnhfYnVmLnJiX21heF9yZXF1ZXN0cywKKwkJCWlyZCwgaXJkIDwgNCAmJiBpcmQgPCB0aXJkIC8gMiA/ICIgKGxvdyEpIiA6ICIiKTsKKwl9IGVsc2UgaWYgKGNvbm5zdGF0ZSA8IDApIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAicnBjcmRtYTogY29ubmVjdGlvbiB0byAldS4ldS4ldS4ldToldSAiCisJCQkiY2xvc2VkICglZClcbiIsCisJCQlOSVBRVUFEKGFkZHItPnNpbl9hZGRyLnNfYWRkciksCisJCQludG9ocyhhZGRyLT5zaW5fcG9ydCksCisJCQljb25uc3RhdGUpOworCX0KKyNlbmRpZgorCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTM1NSw2ICszNzUsOCBAQAogCXN0cnVjdCByZG1hX2NtX2lkICppZDsKIAlpbnQgcmM7CiAKKwlpbml0X2NvbXBsZXRpb24oJmlhLT5yaV9kb25lKTsKKwogCWlkID0gcmRtYV9jcmVhdGVfaWQocnBjcmRtYV9jb25uX3VwY2FsbCwgeHBydCwgUkRNQV9QU19UQ1ApOwogCWlmIChJU19FUlIoaWQpKSB7CiAJCXJjID0gUFRSX0VSUihpZCk7CkBAIC0zNjMsMjYgKzM4NSwyOCBAQAogCQlyZXR1cm4gaWQ7CiAJfQogCi0JaWEtPnJpX2FzeW5jX3JjID0gMDsKKwlpYS0+cmlfYXN5bmNfcmMgPSAtRVRJTUVET1VUOwogCXJjID0gcmRtYV9yZXNvbHZlX2FkZHIoaWQsIE5VTEwsIGFkZHIsIFJETUFfUkVTT0xWRV9USU1FT1VUKTsKIAlpZiAocmMpIHsKIAkJZHByaW50aygiUlBDOiAgICAgICAlczogcmRtYV9yZXNvbHZlX2FkZHIoKSBmYWlsZWQgJWlcbiIsCiAJCQlfX2Z1bmNfXywgcmMpOwogCQlnb3RvIG91dDsKIAl9Ci0Jd2FpdF9mb3JfY29tcGxldGlvbigmaWEtPnJpX2RvbmUpOworCXdhaXRfZm9yX2NvbXBsZXRpb25faW50ZXJydXB0aWJsZV90aW1lb3V0KCZpYS0+cmlfZG9uZSwKKwkJCQltc2Vjc190b19qaWZmaWVzKFJETUFfUkVTT0xWRV9USU1FT1VUKSArIDEpOwogCXJjID0gaWEtPnJpX2FzeW5jX3JjOwogCWlmIChyYykKIAkJZ290byBvdXQ7CiAKLQlpYS0+cmlfYXN5bmNfcmMgPSAwOworCWlhLT5yaV9hc3luY19yYyA9IC1FVElNRURPVVQ7CiAJcmMgPSByZG1hX3Jlc29sdmVfcm91dGUoaWQsIFJETUFfUkVTT0xWRV9USU1FT1VUKTsKIAlpZiAocmMpIHsKIAkJZHByaW50aygiUlBDOiAgICAgICAlczogcmRtYV9yZXNvbHZlX3JvdXRlKCkgZmFpbGVkICVpXG4iLAogCQkJX19mdW5jX18sIHJjKTsKIAkJZ290byBvdXQ7CiAJfQotCXdhaXRfZm9yX2NvbXBsZXRpb24oJmlhLT5yaV9kb25lKTsKKwl3YWl0X2Zvcl9jb21wbGV0aW9uX2ludGVycnVwdGlibGVfdGltZW91dCgmaWEtPnJpX2RvbmUsCisJCQkJbXNlY3NfdG9famlmZmllcyhSRE1BX1JFU09MVkVfVElNRU9VVCkgKyAxKTsKIAlyYyA9IGlhLT5yaV9hc3luY19yYzsKIAlpZiAocmMpCiAJCWdvdG8gb3V0OwpAQCAtNDIzLDExICs0NDcsMTAgQEAKIGludAogcnBjcmRtYV9pYV9vcGVuKHN0cnVjdCBycGNyZG1hX3hwcnQgKnhwcnQsIHN0cnVjdCBzb2NrYWRkciAqYWRkciwgaW50IG1lbXJlZykKIHsKLQlpbnQgcmM7CisJaW50IHJjLCBtZW1fcHJpdjsKKwlzdHJ1Y3QgaWJfZGV2aWNlX2F0dHIgZGV2YXR0cjsKIAlzdHJ1Y3QgcnBjcmRtYV9pYSAqaWEgPSAmeHBydC0+cnhfaWE7CiAKLQlpbml0X2NvbXBsZXRpb24oJmlhLT5yaV9kb25lKTsKLQogCWlhLT5yaV9pZCA9IHJwY3JkbWFfY3JlYXRlX2lkKHhwcnQsIGlhLCBhZGRyKTsKIAlpZiAoSVNfRVJSKGlhLT5yaV9pZCkpIHsKIAkJcmMgPSBQVFJfRVJSKGlhLT5yaV9pZCk7CkBAIC00NDMsNiArNDY2LDczIEBACiAJfQogCiAJLyoKKwkgKiBRdWVyeSB0aGUgZGV2aWNlIHRvIGRldGVybWluZSBpZiB0aGUgcmVxdWVzdGVkIG1lbW9yeQorCSAqIHJlZ2lzdHJhdGlvbiBzdHJhdGVneSBpcyBzdXBwb3J0ZWQuIElmIGl0IGlzbid0LCBzZXQgdGhlCisJICogc3RyYXRlZ3kgdG8gYSBnbG9iYWxseSBzdXBwb3J0ZWQgbW9kZWwuCisJICovCisJcmMgPSBpYl9xdWVyeV9kZXZpY2UoaWEtPnJpX2lkLT5kZXZpY2UsICZkZXZhdHRyKTsKKwlpZiAocmMpIHsKKwkJZHByaW50aygiUlBDOiAgICAgICAlczogaWJfcXVlcnlfZGV2aWNlIGZhaWxlZCAlZFxuIiwKKwkJCV9fZnVuY19fLCByYyk7CisJCWdvdG8gb3V0MjsKKwl9CisKKwlpZiAoZGV2YXR0ci5kZXZpY2VfY2FwX2ZsYWdzICYgSUJfREVWSUNFX0xPQ0FMX0RNQV9MS0VZKSB7CisJCWlhLT5yaV9oYXZlX2RtYV9sa2V5ID0gMTsKKwkJaWEtPnJpX2RtYV9sa2V5ID0gaWEtPnJpX2lkLT5kZXZpY2UtPmxvY2FsX2RtYV9sa2V5OworCX0KKworCXN3aXRjaCAobWVtcmVnKSB7CisJY2FzZSBSUENSRE1BX01FTVdJTkRPV1M6CisJY2FzZSBSUENSRE1BX01FTVdJTkRPV1NfQVNZTkM6CisJCWlmICghKGRldmF0dHIuZGV2aWNlX2NhcF9mbGFncyAmIElCX0RFVklDRV9NRU1fV0lORE9XKSkgeworCQkJZHByaW50aygiUlBDOiAgICAgICAlczogTUVNV0lORE9XUyByZWdpc3RyYXRpb24gIgorCQkJCSJzcGVjaWZpZWQgYnV0IG5vdCBzdXBwb3J0ZWQgYnkgYWRhcHRlciwgIgorCQkJCSJ1c2luZyBzbG93ZXIgUlBDUkRNQV9SRUdJU1RFUlxuIiwKKwkJCQlfX2Z1bmNfXyk7CisJCQltZW1yZWcgPSBSUENSRE1BX1JFR0lTVEVSOworCQl9CisJCWJyZWFrOworCWNhc2UgUlBDUkRNQV9NVEhDQUZNUjoKKwkJaWYgKCFpYS0+cmlfaWQtPmRldmljZS0+YWxsb2NfZm1yKSB7CisjaWYgUlBDUkRNQV9QRVJTSVNURU5UX1JFR0lTVFJBVElPTgorCQkJZHByaW50aygiUlBDOiAgICAgICAlczogTVRIQ0FGTVIgcmVnaXN0cmF0aW9uICIKKwkJCQkic3BlY2lmaWVkIGJ1dCBub3Qgc3VwcG9ydGVkIGJ5IGFkYXB0ZXIsICIKKwkJCQkidXNpbmcgcmlza2llciBSUENSRE1BX0FMTFBIWVNJQ0FMXG4iLAorCQkJCV9fZnVuY19fKTsKKwkJCW1lbXJlZyA9IFJQQ1JETUFfQUxMUEhZU0lDQUw7CisjZWxzZQorCQkJZHByaW50aygiUlBDOiAgICAgICAlczogTVRIQ0FGTVIgcmVnaXN0cmF0aW9uICIKKwkJCQkic3BlY2lmaWVkIGJ1dCBub3Qgc3VwcG9ydGVkIGJ5IGFkYXB0ZXIsICIKKwkJCQkidXNpbmcgc2xvd2VyIFJQQ1JETUFfUkVHSVNURVJcbiIsCisJCQkJX19mdW5jX18pOworCQkJbWVtcmVnID0gUlBDUkRNQV9SRUdJU1RFUjsKKyNlbmRpZgorCQl9CisJCWJyZWFrOworCWNhc2UgUlBDUkRNQV9GUk1SOgorCQkvKiBSZXF1aXJlcyBib3RoIGZybXIgcmVnIGFuZCBsb2NhbCBkbWEgbGtleSAqLworCQlpZiAoKGRldmF0dHIuZGV2aWNlX2NhcF9mbGFncyAmCisJCSAgICAgKElCX0RFVklDRV9NRU1fTUdUX0VYVEVOU0lPTlN8SUJfREVWSUNFX0xPQ0FMX0RNQV9MS0VZKSkgIT0KKwkJICAgIChJQl9ERVZJQ0VfTUVNX01HVF9FWFRFTlNJT05TfElCX0RFVklDRV9MT0NBTF9ETUFfTEtFWSkpIHsKKyNpZiBSUENSRE1BX1BFUlNJU1RFTlRfUkVHSVNUUkFUSU9OCisJCQlkcHJpbnRrKCJSUEM6ICAgICAgICVzOiBGUk1SIHJlZ2lzdHJhdGlvbiAiCisJCQkJInNwZWNpZmllZCBidXQgbm90IHN1cHBvcnRlZCBieSBhZGFwdGVyLCAiCisJCQkJInVzaW5nIHJpc2tpZXIgUlBDUkRNQV9BTExQSFlTSUNBTFxuIiwKKwkJCQlfX2Z1bmNfXyk7CisJCQltZW1yZWcgPSBSUENSRE1BX0FMTFBIWVNJQ0FMOworI2Vsc2UKKwkJCWRwcmludGsoIlJQQzogICAgICAgJXM6IEZSTVIgcmVnaXN0cmF0aW9uICIKKwkJCQkic3BlY2lmaWVkIGJ1dCBub3Qgc3VwcG9ydGVkIGJ5IGFkYXB0ZXIsICIKKwkJCQkidXNpbmcgc2xvd2VyIFJQQ1JETUFfUkVHSVNURVJcbiIsCisJCQkJX19mdW5jX18pOworCQkJbWVtcmVnID0gUlBDUkRNQV9SRUdJU1RFUjsKKyNlbmRpZgorCQl9CisJCWJyZWFrOworCX0KKworCS8qCiAJICogT3B0aW9uYWxseSBvYnRhaW4gYW4gdW5kZXJseWluZyBwaHlzaWNhbCBpZGVudGl0eSBtYXBwaW5nIGluCiAJICogb3JkZXIgdG8gZG8gYSBtZW1vcnkgd2luZG93LWJhc2VkIGJpbmQuIFRoaXMgYmFzZSByZWdpc3RyYXRpb24KIAkgKiBpcyBwcm90ZWN0ZWQgZnJvbSByZW1vdGUgYWNjZXNzIC0gdGhhdCBpcyBlbmFibGVkIG9ubHkgYnkgYmluZGluZwpAQCAtNDUwLDIyICs1NDAsMjggQEAKIAkgKiByZXZva2VkIGFmdGVyIHRoZSBjb3JyZXNwb25kaW5nIGNvbXBsZXRpb24gc2ltaWxhciB0byBhIHN0b3JhZ2UKIAkgKiBhZGFwdGVyLgogCSAqLwotCWlmIChtZW1yZWcgPiBSUENSRE1BX1JFR0lTVEVSKSB7Ci0JCWludCBtZW1fcHJpdiA9IElCX0FDQ0VTU19MT0NBTF9XUklURTsKLQkJc3dpdGNoIChtZW1yZWcpIHsKKwlzd2l0Y2ggKG1lbXJlZykgeworCWNhc2UgUlBDUkRNQV9CT1VOQ0VCVUZGRVJTOgorCWNhc2UgUlBDUkRNQV9SRUdJU1RFUjoKKwljYXNlIFJQQ1JETUFfRlJNUjoKKwkJYnJlYWs7CiAjaWYgUlBDUkRNQV9QRVJTSVNURU5UX1JFR0lTVFJBVElPTgotCQljYXNlIFJQQ1JETUFfQUxMUEhZU0lDQUw6Ci0JCQltZW1fcHJpdiB8PSBJQl9BQ0NFU1NfUkVNT1RFX1dSSVRFOwotCQkJbWVtX3ByaXYgfD0gSUJfQUNDRVNTX1JFTU9URV9SRUFEOwotCQkJYnJlYWs7CisJY2FzZSBSUENSRE1BX0FMTFBIWVNJQ0FMOgorCQltZW1fcHJpdiA9IElCX0FDQ0VTU19MT0NBTF9XUklURSB8CisJCQkJSUJfQUNDRVNTX1JFTU9URV9XUklURSB8CisJCQkJSUJfQUNDRVNTX1JFTU9URV9SRUFEOworCQlnb3RvIHJlZ2lzdGVyX3NldHVwOwogI2VuZGlmCi0JCWNhc2UgUlBDUkRNQV9NRU1XSU5ET1dTX0FTWU5DOgotCQljYXNlIFJQQ1JETUFfTUVNV0lORE9XUzoKLQkJCW1lbV9wcml2IHw9IElCX0FDQ0VTU19NV19CSU5EOworCWNhc2UgUlBDUkRNQV9NRU1XSU5ET1dTX0FTWU5DOgorCWNhc2UgUlBDUkRNQV9NRU1XSU5ET1dTOgorCQltZW1fcHJpdiA9IElCX0FDQ0VTU19MT0NBTF9XUklURSB8CisJCQkJSUJfQUNDRVNTX01XX0JJTkQ7CisJCWdvdG8gcmVnaXN0ZXJfc2V0dXA7CisJY2FzZSBSUENSRE1BX01USENBRk1SOgorCQlpZiAoaWEtPnJpX2hhdmVfZG1hX2xrZXkpCiAJCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCWJyZWFrOwotCQl9CisJCW1lbV9wcml2ID0gSUJfQUNDRVNTX0xPQ0FMX1dSSVRFOworCXJlZ2lzdGVyX3NldHVwOgogCQlpYS0+cmlfYmluZF9tZW0gPSBpYl9nZXRfZG1hX21yKGlhLT5yaV9wZCwgbWVtX3ByaXYpOwogCQlpZiAoSVNfRVJSKGlhLT5yaV9iaW5kX21lbSkpIHsKIAkJCXByaW50ayhLRVJOX0FMRVJUICIlczogaWJfZ2V0X2RtYV9tciBmb3IgIgpAQCAtNDc1LDcgKzU3MSwxNSBAQAogCQkJbWVtcmVnID0gUlBDUkRNQV9SRUdJU1RFUjsKIAkJCWlhLT5yaV9iaW5kX21lbSA9IE5VTEw7CiAJCX0KKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogaW52YWxpZCBtZW1vcnkgcmVnaXN0cmF0aW9uIG1vZGUgJWRcbiIsCisJCQkJX19mdW5jX18sIG1lbXJlZyk7CisJCXJjID0gLUVJTlZBTDsKKwkJZ290byBvdXQyOwogCX0KKwlkcHJpbnRrKCJSUEM6ICAgICAgICVzOiBtZW1vcnkgcmVnaXN0cmF0aW9uIHN0cmF0ZWd5IGlzICVkXG4iLAorCQlfX2Z1bmNfXywgbWVtcmVnKTsKIAogCS8qIEVsc2Ugd2lsbCBkbyBtZW1vcnkgcmVnL2RlcmVnIGZvciBlYWNoIGNodW5rICovCiAJaWEtPnJpX21lbXJlZ19zdHJhdGVneSA9IG1lbXJlZzsKQEAgLTQ4Myw2ICs1ODcsNyBAQAogCXJldHVybiAwOwogb3V0MjoKIAlyZG1hX2Rlc3Ryb3lfaWQoaWEtPnJpX2lkKTsKKwlpYS0+cmlfaWQgPSBOVUxMOwogb3V0MToKIAlyZXR1cm4gcmM7CiB9CkBAIC01MDMsMTUgKzYwOCwxNyBAQAogCQlkcHJpbnRrKCJSUEM6ICAgICAgICVzOiBpYl9kZXJlZ19tciByZXR1cm5lZCAlaVxuIiwKIAkJCV9fZnVuY19fLCByYyk7CiAJfQotCWlmIChpYS0+cmlfaWQgIT0gTlVMTCAmJiAhSVNfRVJSKGlhLT5yaV9pZCkgJiYgaWEtPnJpX2lkLT5xcCkKLQkJcmRtYV9kZXN0cm95X3FwKGlhLT5yaV9pZCk7CisJaWYgKGlhLT5yaV9pZCAhPSBOVUxMICYmICFJU19FUlIoaWEtPnJpX2lkKSkgeworCQlpZiAoaWEtPnJpX2lkLT5xcCkKKwkJCXJkbWFfZGVzdHJveV9xcChpYS0+cmlfaWQpOworCQlyZG1hX2Rlc3Ryb3lfaWQoaWEtPnJpX2lkKTsKKwkJaWEtPnJpX2lkID0gTlVMTDsKKwl9CiAJaWYgKGlhLT5yaV9wZCAhPSBOVUxMICYmICFJU19FUlIoaWEtPnJpX3BkKSkgewogCQlyYyA9IGliX2RlYWxsb2NfcGQoaWEtPnJpX3BkKTsKIAkJZHByaW50aygiUlBDOiAgICAgICAlczogaWJfZGVhbGxvY19wZCByZXR1cm5lZCAlaVxuIiwKIAkJCV9fZnVuY19fLCByYyk7CiAJfQotCWlmIChpYS0+cmlfaWQgIT0gTlVMTCAmJiAhSVNfRVJSKGlhLT5yaV9pZCkpCi0JCXJkbWFfZGVzdHJveV9pZChpYS0+cmlfaWQpOwogfQogCiAvKgpAQCAtNTQxLDYgKzY0OCwxMiBAQAogCWVwLT5yZXBfYXR0ci5zcnEgPSBOVUxMOwogCWVwLT5yZXBfYXR0ci5jYXAubWF4X3NlbmRfd3IgPSBjZGF0YS0+bWF4X3JlcXVlc3RzOwogCXN3aXRjaCAoaWEtPnJpX21lbXJlZ19zdHJhdGVneSkgeworCWNhc2UgUlBDUkRNQV9GUk1SOgorCQkvKiBBZGQgcm9vbSBmb3IgZnJtciByZWdpc3RlciBhbmQgaW52YWxpZGF0ZSBXUnMgKi8KKwkJZXAtPnJlcF9hdHRyLmNhcC5tYXhfc2VuZF93ciAqPSAzOworCQlpZiAoZXAtPnJlcF9hdHRyLmNhcC5tYXhfc2VuZF93ciA+IGRldmF0dHIubWF4X3FwX3dyKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCWJyZWFrOwogCWNhc2UgUlBDUkRNQV9NRU1XSU5ET1dTX0FTWU5DOgogCWNhc2UgUlBDUkRNQV9NRU1XSU5ET1dTOgogCQkvKiBBZGQgcm9vbSBmb3IgbXdfYmluZHMrdW5iaW5kcyAtIG92ZXJraWxsISAqLwpAQCAtNjE3LDI5ICs3MzAsMTMgQEAKIAllcC0+cmVwX3JlbW90ZV9jbWEucHJpdmF0ZV9kYXRhX2xlbiA9IDA7CiAKIAkvKiBDbGllbnQgb2ZmZXJzIFJETUEgUmVhZCBidXQgZG9lcyBub3QgaW5pdGlhdGUgKi8KLQlzd2l0Y2ggKGlhLT5yaV9tZW1yZWdfc3RyYXRlZ3kpIHsKLQljYXNlIFJQQ1JETUFfQk9VTkNFQlVGRkVSUzoKLQkJZXAtPnJlcF9yZW1vdGVfY21hLnJlc3BvbmRlcl9yZXNvdXJjZXMgPSAwOwotCQlicmVhazsKLQljYXNlIFJQQ1JETUFfTVRIQ0FGTVI6Ci0JY2FzZSBSUENSRE1BX1JFR0lTVEVSOgotCQllcC0+cmVwX3JlbW90ZV9jbWEucmVzcG9uZGVyX3Jlc291cmNlcyA9IGNkYXRhLT5tYXhfcmVxdWVzdHMgKgotCQkJCShSUENSRE1BX01BWF9EQVRBX1NFR1MgLyA4KTsKLQkJYnJlYWs7Ci0JY2FzZSBSUENSRE1BX01FTVdJTkRPV1M6Ci0JY2FzZSBSUENSRE1BX01FTVdJTkRPV1NfQVNZTkM6Ci0jaWYgUlBDUkRNQV9QRVJTSVNURU5UX1JFR0lTVFJBVElPTgotCWNhc2UgUlBDUkRNQV9BTExQSFlTSUNBTDoKLSNlbmRpZgotCQllcC0+cmVwX3JlbW90ZV9jbWEucmVzcG9uZGVyX3Jlc291cmNlcyA9IGNkYXRhLT5tYXhfcmVxdWVzdHMgKgotCQkJCShSUENSRE1BX01BWF9EQVRBX1NFR1MgLyAyKTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJYnJlYWs7Ci0JfQotCWlmIChlcC0+cmVwX3JlbW90ZV9jbWEucmVzcG9uZGVyX3Jlc291cmNlcyA+IGRldmF0dHIubWF4X3FwX3JkX2F0b20pCi0JCWVwLT5yZXBfcmVtb3RlX2NtYS5yZXNwb25kZXJfcmVzb3VyY2VzID0gZGV2YXR0ci5tYXhfcXBfcmRfYXRvbTsKIAllcC0+cmVwX3JlbW90ZV9jbWEuaW5pdGlhdG9yX2RlcHRoID0gMDsKKwlpZiAoaWEtPnJpX21lbXJlZ19zdHJhdGVneSA9PSBSUENSRE1BX0JPVU5DRUJVRkZFUlMpCisJCWVwLT5yZXBfcmVtb3RlX2NtYS5yZXNwb25kZXJfcmVzb3VyY2VzID0gMDsKKwllbHNlIGlmIChkZXZhdHRyLm1heF9xcF9yZF9hdG9tID4gMzIpCS8qIGFyYml0cmFyeSBidXQgPD0gMjU1ICovCisJCWVwLT5yZXBfcmVtb3RlX2NtYS5yZXNwb25kZXJfcmVzb3VyY2VzID0gMzI7CisJZWxzZQorCQllcC0+cmVwX3JlbW90ZV9jbWEucmVzcG9uZGVyX3Jlc291cmNlcyA9IGRldmF0dHIubWF4X3FwX3JkX2F0b207CiAKIAllcC0+cmVwX3JlbW90ZV9jbWEucmV0cnlfY291bnQgPSA3OwogCWVwLT5yZXBfcmVtb3RlX2NtYS5mbG93X2NvbnRyb2wgPSAwOwpAQCAtNjc5LDIxICs3NzYsMTYgQEAKIAkJaWYgKHJjKQogCQkJZHByaW50aygiUlBDOiAgICAgICAlczogcnBjcmRtYV9lcF9kaXNjb25uZWN0IgogCQkJCSIgcmV0dXJuZWQgJWlcbiIsIF9fZnVuY19fLCByYyk7CisJCXJkbWFfZGVzdHJveV9xcChpYS0+cmlfaWQpOworCQlpYS0+cmlfaWQtPnFwID0gTlVMTDsKIAl9CiAKLQllcC0+cmVwX2Z1bmMgPSBOVUxMOwotCiAJLyogcGFkZGluZyAtIGNvdWxkIGJlIGRvbmUgaW4gcnBjcmRtYV9idWZmZXJfZGVzdHJveS4uLiAqLwogCWlmIChlcC0+cmVwX3BhZF9tcikgewogCQlycGNyZG1hX2RlcmVnaXN0ZXJfaW50ZXJuYWwoaWEsIGVwLT5yZXBfcGFkX21yLCAmZXAtPnJlcF9wYWQpOwogCQllcC0+cmVwX3BhZF9tciA9IE5VTEw7CiAJfQogCi0JaWYgKGlhLT5yaV9pZC0+cXApIHsKLQkJcmRtYV9kZXN0cm95X3FwKGlhLT5yaV9pZCk7Ci0JCWlhLT5yaV9pZC0+cXAgPSBOVUxMOwotCX0KLQogCXJwY3JkbWFfY2xlYW5fY3EoZXAtPnJlcF9jcSk7CiAJcmMgPSBpYl9kZXN0cm95X2NxKGVwLT5yZXBfY3EpOwogCWlmIChyYykKQEAgLTcxMiw5ICs4MDQsOCBAQAogCXN0cnVjdCByZG1hX2NtX2lkICppZDsKIAlpbnQgcmMgPSAwOwogCWludCByZXRyeV9jb3VudCA9IDA7Ci0JaW50IHJlY29ubmVjdCA9IChlcC0+cmVwX2Nvbm5lY3RlZCAhPSAwKTsKIAotCWlmIChyZWNvbm5lY3QpIHsKKwlpZiAoZXAtPnJlcF9jb25uZWN0ZWQgIT0gMCkgewogCQlzdHJ1Y3QgcnBjcmRtYV94cHJ0ICp4cHJ0OwogcmV0cnk6CiAJCXJjID0gcnBjcmRtYV9lcF9kaXNjb25uZWN0KGVwLCBpYSk7CkBAIC03NDUsNiArODM2LDcgQEAKIAkJCWdvdG8gb3V0OwogCQl9CiAJCS8qIEVORCBURU1QICovCisJCXJkbWFfZGVzdHJveV9xcChpYS0+cmlfaWQpOwogCQlyZG1hX2Rlc3Ryb3lfaWQoaWEtPnJpX2lkKTsKIAkJaWEtPnJpX2lkID0gaWQ7CiAJfQpAQCAtNzY5LDE0ICs4NjEsNiBAQAogCX0KIH0KIAotCS8qIFRoZW9yZXRpY2FsbHkgYSBjbGllbnQgaW5pdGlhdG9yX2RlcHRoID4gMCBpcyBub3QgbmVlZGVkLAotCSAqIGJ1dCBtYW55IHBlZXJzIGZhaWwgdG8gY29tcGxldGUgdGhlIGNvbm5lY3Rpb24gdW5sZXNzIHRoZXkKLQkgKiA9PSByZXNwb25kZXJfcmVzb3VyY2VzISAqLwotCWlmIChlcC0+cmVwX3JlbW90ZV9jbWEuaW5pdGlhdG9yX2RlcHRoICE9Ci0JCQkJZXAtPnJlcF9yZW1vdGVfY21hLnJlc3BvbmRlcl9yZXNvdXJjZXMpCi0JCWVwLT5yZXBfcmVtb3RlX2NtYS5pbml0aWF0b3JfZGVwdGggPQotCQkJZXAtPnJlcF9yZW1vdGVfY21hLnJlc3BvbmRlcl9yZXNvdXJjZXM7Ci0KIAllcC0+cmVwX2Nvbm5lY3RlZCA9IDA7CiAKIAlyYyA9IHJkbWFfY29ubmVjdChpYS0+cmlfaWQsICZlcC0+cmVwX3JlbW90ZV9jbWEpOwpAQCAtNzg2LDkgKzg3MCw2IEBACiAJCWdvdG8gb3V0OwogCX0KIAotCWlmIChyZWNvbm5lY3QpCi0JCXJldHVybiAwOwotCiAJd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKGVwLT5yZXBfY29ubmVjdF93YWl0LCBlcC0+cmVwX2Nvbm5lY3RlZCAhPSAwKTsKIAogCS8qCkBAIC04MDUsMTQgKzg4NiwxNiBAQAogCWlmIChlcC0+cmVwX2Nvbm5lY3RlZCA8PSAwKSB7CiAJCS8qIFNvbWV0aW1lcywgdGhlIG9ubHkgd2F5IHRvIHJlbGlhYmx5IGNvbm5lY3QgdG8gcmVtb3RlCiAJCSAqIENNcyBpcyB0byB1c2Ugc2FtZSBub256ZXJvIHZhbHVlcyBmb3IgT1JEIGFuZCBJUkQuICovCi0JCWVwLT5yZXBfcmVtb3RlX2NtYS5pbml0aWF0b3JfZGVwdGggPQotCQkJCQllcC0+cmVwX3JlbW90ZV9jbWEucmVzcG9uZGVyX3Jlc291cmNlczsKLQkJaWYgKGVwLT5yZXBfcmVtb3RlX2NtYS5pbml0aWF0b3JfZGVwdGggPT0gMCkKLQkJCSsrZXAtPnJlcF9yZW1vdGVfY21hLmluaXRpYXRvcl9kZXB0aDsKLQkJaWYgKGVwLT5yZXBfcmVtb3RlX2NtYS5yZXNwb25kZXJfcmVzb3VyY2VzID09IDApCi0JCQkrK2VwLT5yZXBfcmVtb3RlX2NtYS5yZXNwb25kZXJfcmVzb3VyY2VzOwotCQlpZiAocmV0cnlfY291bnQrKyA9PSAwKQorCQlpZiAocmV0cnlfY291bnQrKyA8PSBSRE1BX0NPTk5FQ1RfUkVUUllfTUFYICsgMSAmJgorCQkgICAgKGVwLT5yZXBfcmVtb3RlX2NtYS5yZXNwb25kZXJfcmVzb3VyY2VzID09IDAgfHwKKwkJICAgICBlcC0+cmVwX3JlbW90ZV9jbWEuaW5pdGlhdG9yX2RlcHRoICE9CisJCQkJZXAtPnJlcF9yZW1vdGVfY21hLnJlc3BvbmRlcl9yZXNvdXJjZXMpKSB7CisJCQlpZiAoZXAtPnJlcF9yZW1vdGVfY21hLnJlc3BvbmRlcl9yZXNvdXJjZXMgPT0gMCkKKwkJCQllcC0+cmVwX3JlbW90ZV9jbWEucmVzcG9uZGVyX3Jlc291cmNlcyA9IDE7CisJCQllcC0+cmVwX3JlbW90ZV9jbWEuaW5pdGlhdG9yX2RlcHRoID0KKwkJCQllcC0+cmVwX3JlbW90ZV9jbWEucmVzcG9uZGVyX3Jlc291cmNlczsKIAkJCWdvdG8gcmV0cnk7CisJCX0KIAkJcmMgPSBlcC0+cmVwX2Nvbm5lY3RlZDsKIAl9IGVsc2UgewogCQlkcHJpbnRrKCJSUEM6ICAgICAgICVzOiBjb25uZWN0ZWRcbiIsIF9fZnVuY19fKTsKQEAgLTg2Myw2ICs5NDYsNyBAQAogCWNoYXIgKnA7CiAJc2l6ZV90IGxlbjsKIAlpbnQgaSwgcmM7CisJc3RydWN0IHJwY3JkbWFfbXcgKnI7CiAKIAlidWYtPnJiX21heF9yZXF1ZXN0cyA9IGNkYXRhLT5tYXhfcmVxdWVzdHM7CiAJc3Bpbl9sb2NrX2luaXQoJmJ1Zi0+cmJfbG9jayk7CkBAIC04NzMsNyArOTU3LDcgQEAKIAkgKiAgIDIuICBhcnJheXMgb2Ygc3RydWN0IHJwY3JkbWFfcmVxIHRvIGZpbGwgaW4gcG9pbnRlcnMKIAkgKiAgIDMuICBhcnJheSBvZiBzdHJ1Y3QgcnBjcmRtYV9yZXAgZm9yIHJlcGxpZXMKIAkgKiAgIDQuICBwYWRkaW5nLCBpZiBhbnkKLQkgKiAgIDUuICBtdydzLCBpZiBhbnkKKwkgKiAgIDUuICBtdydzLCBmbXIncyBvciBmcm1yJ3MsIGlmIGFueQogCSAqIFNlbmQvcmVjdiBidWZmZXJzIGluIHJlcS9yZXAgbmVlZCB0byBiZSByZWdpc3RlcmVkCiAJICovCiAKQEAgLTg4MSw2ICs5NjUsMTAgQEAKIAkJKHNpemVvZihzdHJ1Y3QgcnBjcmRtYV9yZXEgKikgKyBzaXplb2Yoc3RydWN0IHJwY3JkbWFfcmVwICopKTsKIAlsZW4gKz0gY2RhdGEtPnBhZGRpbmc7CiAJc3dpdGNoIChpYS0+cmlfbWVtcmVnX3N0cmF0ZWd5KSB7CisJY2FzZSBSUENSRE1BX0ZSTVI6CisJCWxlbiArPSBidWYtPnJiX21heF9yZXF1ZXN0cyAqIFJQQ1JETUFfTUFYX1NFR1MgKgorCQkJCXNpemVvZihzdHJ1Y3QgcnBjcmRtYV9tdyk7CisJCWJyZWFrOwogCWNhc2UgUlBDUkRNQV9NVEhDQUZNUjoKIAkJLyogVEJEIHdlIGFyZSBwZXJoYXBzIG92ZXJhbGxvY2F0aW5nIGhlcmUgKi8KIAkJbGVuICs9IChidWYtPnJiX21heF9yZXF1ZXN0cyArIDEpICogUlBDUkRNQV9NQVhfU0VHUyAqCkBAIC05MjcsMTUgKzEwMTUsMzcgQEAKIAkgKiBhbmQgYWxzbyByZWR1Y2UgdW5iaW5kLXRvLWJpbmQgY29sbGlzaW9uLgogCSAqLwogCUlOSVRfTElTVF9IRUFEKCZidWYtPnJiX213cyk7CisJciA9IChzdHJ1Y3QgcnBjcmRtYV9tdyAqKXA7CiAJc3dpdGNoIChpYS0+cmlfbWVtcmVnX3N0cmF0ZWd5KSB7CisJY2FzZSBSUENSRE1BX0ZSTVI6CisJCWZvciAoaSA9IGJ1Zi0+cmJfbWF4X3JlcXVlc3RzICogUlBDUkRNQV9NQVhfU0VHUzsgaTsgaS0tKSB7CisJCQlyLT5yLmZybXIuZnJfbXIgPSBpYl9hbGxvY19mYXN0X3JlZ19tcihpYS0+cmlfcGQsCisJCQkJCQkJIFJQQ1JETUFfTUFYX1NFR1MpOworCQkJaWYgKElTX0VSUihyLT5yLmZybXIuZnJfbXIpKSB7CisJCQkJcmMgPSBQVFJfRVJSKHItPnIuZnJtci5mcl9tcik7CisJCQkJZHByaW50aygiUlBDOiAgICAgICAlczogaWJfYWxsb2NfZmFzdF9yZWdfbXIiCisJCQkJCSIgZmFpbGVkICVpXG4iLCBfX2Z1bmNfXywgcmMpOworCQkJCWdvdG8gb3V0OworCQkJfQorCQkJci0+ci5mcm1yLmZyX3BnbCA9CisJCQkJaWJfYWxsb2NfZmFzdF9yZWdfcGFnZV9saXN0KGlhLT5yaV9pZC0+ZGV2aWNlLAorCQkJCQkJCSAgICBSUENSRE1BX01BWF9TRUdTKTsKKwkJCWlmIChJU19FUlIoci0+ci5mcm1yLmZyX3BnbCkpIHsKKwkJCQlyYyA9IFBUUl9FUlIoci0+ci5mcm1yLmZyX3BnbCk7CisJCQkJZHByaW50aygiUlBDOiAgICAgICAlczogIgorCQkJCQkiaWJfYWxsb2NfZmFzdF9yZWdfcGFnZV9saXN0ICIKKwkJCQkJImZhaWxlZCAlaVxuIiwgX19mdW5jX18sIHJjKTsKKwkJCQlnb3RvIG91dDsKKwkJCX0KKwkJCWxpc3RfYWRkKCZyLT5td19saXN0LCAmYnVmLT5yYl9td3MpOworCQkJKytyOworCQl9CisJCWJyZWFrOwogCWNhc2UgUlBDUkRNQV9NVEhDQUZNUjoKLQkJewotCQlzdHJ1Y3QgcnBjcmRtYV9tdyAqciA9IChzdHJ1Y3QgcnBjcmRtYV9tdyAqKXA7Ci0JCXN0cnVjdCBpYl9mbXJfYXR0ciBmYSA9IHsKLQkJCVJQQ1JETUFfTUFYX0RBVEFfU0VHUywgMSwgUEFHRV9TSElGVAotCQl9OwogCQkvKiBUQkQgd2UgYXJlIHBlcmhhcHMgb3ZlcmFsbG9jYXRpbmcgaGVyZSAqLwogCQlmb3IgKGkgPSAoYnVmLT5yYl9tYXhfcmVxdWVzdHMrMSkgKiBSUENSRE1BX01BWF9TRUdTOyBpOyBpLS0pIHsKKwkJCXN0YXRpYyBzdHJ1Y3QgaWJfZm1yX2F0dHIgZmEgPQorCQkJCXsgUlBDUkRNQV9NQVhfREFUQV9TRUdTLCAxLCBQQUdFX1NISUZUIH07CiAJCQlyLT5yLmZtciA9IGliX2FsbG9jX2ZtcihpYS0+cmlfcGQsCiAJCQkJSUJfQUNDRVNTX1JFTU9URV9XUklURSB8IElCX0FDQ0VTU19SRU1PVEVfUkVBRCwKIAkJCQkmZmEpOwpAQCAtOTQ4LDEyICsxMDU4LDkgQEAKIAkJCWxpc3RfYWRkKCZyLT5td19saXN0LCAmYnVmLT5yYl9td3MpOwogCQkJKytyOwogCQl9Ci0JCX0KIAkJYnJlYWs7CiAJY2FzZSBSUENSRE1BX01FTVdJTkRPV1NfQVNZTkM6CiAJY2FzZSBSUENSRE1BX01FTVdJTkRPV1M6Ci0JCXsKLQkJc3RydWN0IHJwY3JkbWFfbXcgKnIgPSAoc3RydWN0IHJwY3JkbWFfbXcgKilwOwogCQkvKiBBbGxvY2F0ZSBvbmUgZXh0cmEgcmVxdWVzdCdzIHdvcnRoLCBmb3IgZnVsbCBjeWNsaW5nICovCiAJCWZvciAoaSA9IChidWYtPnJiX21heF9yZXF1ZXN0cysxKSAqIFJQQ1JETUFfTUFYX1NFR1M7IGk7IGktLSkgewogCQkJci0+ci5tdyA9IGliX2FsbG9jX213KGlhLT5yaV9wZCk7CkBAIC05NjYsNyArMTA3Myw2IEBACiAJCQlsaXN0X2FkZCgmci0+bXdfbGlzdCwgJmJ1Zi0+cmJfbXdzKTsKIAkJCSsrcjsKIAkJfQotCQl9CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCWJyZWFrOwpAQCAtMTA0Niw2ICsxMTUyLDcgQEAKIHsKIAlpbnQgcmMsIGk7CiAJc3RydWN0IHJwY3JkbWFfaWEgKmlhID0gcmRtYWJfdG9faWEoYnVmKTsKKwlzdHJ1Y3QgcnBjcmRtYV9tdyAqcjsKIAogCS8qIGNsZWFuIHVwIGluIHJldmVyc2Ugb3JkZXIgZnJvbSBjcmVhdGUKIAkgKiAgIDEuICByZWN2IG1yIG1lbW9yeSAobXIgZnJlZSwgdGhlbiBrZnJlZSkKQEAgLTEwNjUsMTEgKzExNzIsMTkgQEAKIAkJfQogCQlpZiAoYnVmLT5yYl9zZW5kX2J1ZnMgJiYgYnVmLT5yYl9zZW5kX2J1ZnNbaV0pIHsKIAkJCXdoaWxlICghbGlzdF9lbXB0eSgmYnVmLT5yYl9td3MpKSB7Ci0JCQkJc3RydWN0IHJwY3JkbWFfbXcgKnI7CiAJCQkJciA9IGxpc3RfZW50cnkoYnVmLT5yYl9td3MubmV4dCwKIAkJCQkJc3RydWN0IHJwY3JkbWFfbXcsIG13X2xpc3QpOwogCQkJCWxpc3RfZGVsKCZyLT5td19saXN0KTsKIAkJCQlzd2l0Y2ggKGlhLT5yaV9tZW1yZWdfc3RyYXRlZ3kpIHsKKwkJCQljYXNlIFJQQ1JETUFfRlJNUjoKKwkJCQkJcmMgPSBpYl9kZXJlZ19tcihyLT5yLmZybXIuZnJfbXIpOworCQkJCQlpZiAocmMpCisJCQkJCQlkcHJpbnRrKCJSUEM6ICAgICAgICVzOiIKKwkJCQkJCQkiIGliX2RlcmVnX21yIgorCQkJCQkJCSIgZmFpbGVkICVpXG4iLAorCQkJCQkJCV9fZnVuY19fLCByYyk7CisJCQkJCWliX2ZyZWVfZmFzdF9yZWdfcGFnZV9saXN0KHItPnIuZnJtci5mcl9wZ2wpOworCQkJCQlicmVhazsKIAkJCQljYXNlIFJQQ1JETUFfTVRIQ0FGTVI6CiAJCQkJCXJjID0gaWJfZGVhbGxvY19mbXIoci0+ci5mbXIpOwogCQkJCQlpZiAocmMpCkBAIC0xMTE1LDYgKzEyMzAsOCBAQAogewogCXN0cnVjdCBycGNyZG1hX3JlcSAqcmVxOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IGk7CisJc3RydWN0IHJwY3JkbWFfbXcgKnI7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmYnVmZmVycy0+cmJfbG9jaywgZmxhZ3MpOwogCWlmIChidWZmZXJzLT5yYl9zZW5kX2luZGV4ID09IGJ1ZmZlcnMtPnJiX21heF9yZXF1ZXN0cykgewpAQCAtMTEzNSw5ICsxMjUyLDggQEAKIAl9CiAJYnVmZmVycy0+cmJfc2VuZF9idWZzW2J1ZmZlcnMtPnJiX3NlbmRfaW5kZXgrK10gPSBOVUxMOwogCWlmICghbGlzdF9lbXB0eSgmYnVmZmVycy0+cmJfbXdzKSkgewotCQlpbnQgaSA9IFJQQ1JETUFfTUFYX1NFR1MgLSAxOworCQlpID0gUlBDUkRNQV9NQVhfU0VHUyAtIDE7CiAJCWRvIHsKLQkJCXN0cnVjdCBycGNyZG1hX213ICpyOwogCQkJciA9IGxpc3RfZW50cnkoYnVmZmVycy0+cmJfbXdzLm5leHQsCiAJCQkJCXN0cnVjdCBycGNyZG1hX213LCBtd19saXN0KTsKIAkJCWxpc3RfZGVsKCZyLT5td19saXN0KTsKQEAgLTExNzEsNiArMTI4Nyw3IEBACiAJCXJlcS0+cmxfcmVwbHkgPSBOVUxMOwogCX0KIAlzd2l0Y2ggKGlhLT5yaV9tZW1yZWdfc3RyYXRlZ3kpIHsKKwljYXNlIFJQQ1JETUFfRlJNUjoKIAljYXNlIFJQQ1JETUFfTVRIQ0FGTVI6CiAJY2FzZSBSUENSRE1BX01FTVdJTkRPV1NfQVNZTkM6CiAJY2FzZSBSUENSRE1BX01FTVdJTkRPV1M6CkBAIC0xMjUyLDcgKzEzNjksMTEgQEAKIAkJCXZhLCBsZW4sIERNQV9CSURJUkVDVElPTkFMKTsKIAlpb3YtPmxlbmd0aCA9IGxlbjsKIAotCWlmIChpYS0+cmlfYmluZF9tZW0gIT0gTlVMTCkgeworCWlmIChpYS0+cmlfaGF2ZV9kbWFfbGtleSkgeworCQkqbXJwID0gTlVMTDsKKwkJaW92LT5sa2V5ID0gaWEtPnJpX2RtYV9sa2V5OworCQlyZXR1cm4gMDsKKwl9IGVsc2UgaWYgKGlhLT5yaV9iaW5kX21lbSAhPSBOVUxMKSB7CiAJCSptcnAgPSBOVUxMOwogCQlpb3YtPmxrZXkgPSBpYS0+cmlfYmluZF9tZW0tPmxrZXk7CiAJCXJldHVybiAwOwpAQCAtMTMyOSwxNSArMTQ1MCwyOTIgQEAKIAkJCQlzZWctPm1yX2RtYSwgc2VnLT5tcl9kbWFsZW4sIHNlZy0+bXJfZGlyKTsKIH0KIAorc3RhdGljIGludAorcnBjcmRtYV9yZWdpc3Rlcl9mcm1yX2V4dGVybmFsKHN0cnVjdCBycGNyZG1hX21yX3NlZyAqc2VnLAorCQkJaW50ICpuc2VncywgaW50IHdyaXRpbmcsIHN0cnVjdCBycGNyZG1hX2lhICppYSwKKwkJCXN0cnVjdCBycGNyZG1hX3hwcnQgKnJfeHBydCkKK3sKKwlzdHJ1Y3QgcnBjcmRtYV9tcl9zZWcgKnNlZzEgPSBzZWc7CisJc3RydWN0IGliX3NlbmRfd3IgZnJtcl93ciwgKmJhZF93cjsKKwl1OCBrZXk7CisJaW50IGxlbiwgcGFnZW9mZjsKKwlpbnQgaSwgcmM7CisKKwlwYWdlb2ZmID0gb2Zmc2V0X2luX3BhZ2Uoc2VnMS0+bXJfb2Zmc2V0KTsKKwlzZWcxLT5tcl9vZmZzZXQgLT0gcGFnZW9mZjsJLyogc3RhcnQgb2YgcGFnZSAqLworCXNlZzEtPm1yX2xlbiArPSBwYWdlb2ZmOworCWxlbiA9IC1wYWdlb2ZmOworCWlmICgqbnNlZ3MgPiBSUENSRE1BX01BWF9EQVRBX1NFR1MpCisJCSpuc2VncyA9IFJQQ1JETUFfTUFYX0RBVEFfU0VHUzsKKwlmb3IgKGkgPSAwOyBpIDwgKm5zZWdzOykgeworCQlycGNyZG1hX21hcF9vbmUoaWEsIHNlZywgd3JpdGluZyk7CisJCXNlZzEtPm1yX2NodW5rLnJsX213LT5yLmZybXIuZnJfcGdsLT5wYWdlX2xpc3RbaV0gPSBzZWctPm1yX2RtYTsKKwkJbGVuICs9IHNlZy0+bXJfbGVuOworCQkrK3NlZzsKKwkJKytpOworCQkvKiBDaGVjayBmb3IgaG9sZXMgKi8KKwkJaWYgKChpIDwgKm5zZWdzICYmIG9mZnNldF9pbl9wYWdlKHNlZy0+bXJfb2Zmc2V0KSkgfHwKKwkJICAgIG9mZnNldF9pbl9wYWdlKChzZWctMSktPm1yX29mZnNldCArIChzZWctMSktPm1yX2xlbikpCisJCQlicmVhazsKKwl9CisJZHByaW50aygiUlBDOiAgICAgICAlczogVXNpbmcgZnJtciAlcCB0byBtYXAgJWQgc2VnbWVudHNcbiIsCisJCV9fZnVuY19fLCBzZWcxLT5tcl9jaHVuay5ybF9tdywgaSk7CisKKwkvKiBCdW1wIHRoZSBrZXkgKi8KKwlrZXkgPSAodTgpKHNlZzEtPm1yX2NodW5rLnJsX213LT5yLmZybXIuZnJfbXItPnJrZXkgJiAweDAwMDAwMEZGKTsKKwlpYl91cGRhdGVfZmFzdF9yZWdfa2V5KHNlZzEtPm1yX2NodW5rLnJsX213LT5yLmZybXIuZnJfbXIsICsra2V5KTsKKworCS8qIFByZXBhcmUgRlJNUiBXUiAqLworCW1lbXNldCgmZnJtcl93ciwgMCwgc2l6ZW9mIGZybXJfd3IpOworCWZybXJfd3Iub3Bjb2RlID0gSUJfV1JfRkFTVF9SRUdfTVI7CisJZnJtcl93ci5zZW5kX2ZsYWdzID0gMDsJCQkvKiB1bnNpZ25hbGVkICovCisJZnJtcl93ci53ci5mYXN0X3JlZy5pb3ZhX3N0YXJ0ID0gKHVuc2lnbmVkIGxvbmcpc2VnMS0+bXJfZG1hOworCWZybXJfd3Iud3IuZmFzdF9yZWcucGFnZV9saXN0ID0gc2VnMS0+bXJfY2h1bmsucmxfbXctPnIuZnJtci5mcl9wZ2w7CisJZnJtcl93ci53ci5mYXN0X3JlZy5wYWdlX2xpc3RfbGVuID0gaTsKKwlmcm1yX3dyLndyLmZhc3RfcmVnLnBhZ2Vfc2hpZnQgPSBQQUdFX1NISUZUOworCWZybXJfd3Iud3IuZmFzdF9yZWcubGVuZ3RoID0gaSA8PCBQQUdFX1NISUZUOworCWZybXJfd3Iud3IuZmFzdF9yZWcuYWNjZXNzX2ZsYWdzID0gKHdyaXRpbmcgPworCQkJCUlCX0FDQ0VTU19SRU1PVEVfV1JJVEUgOiBJQl9BQ0NFU1NfUkVNT1RFX1JFQUQpOworCWZybXJfd3Iud3IuZmFzdF9yZWcucmtleSA9IHNlZzEtPm1yX2NodW5rLnJsX213LT5yLmZybXIuZnJfbXItPnJrZXk7CisJREVDUl9DUUNPVU5UKCZyX3hwcnQtPnJ4X2VwKTsKKworCXJjID0gaWJfcG9zdF9zZW5kKGlhLT5yaV9pZC0+cXAsICZmcm1yX3dyLCAmYmFkX3dyKTsKKworCWlmIChyYykgeworCQlkcHJpbnRrKCJSUEM6ICAgICAgICVzOiBmYWlsZWQgaWJfcG9zdF9zZW5kIGZvciByZWdpc3RlciwiCisJCQkiIHN0YXR1cyAlaVxuIiwgX19mdW5jX18sIHJjKTsKKwkJd2hpbGUgKGktLSkKKwkJCXJwY3JkbWFfdW5tYXBfb25lKGlhLCAtLXNlZyk7CisJfSBlbHNlIHsKKwkJc2VnMS0+bXJfcmtleSA9IHNlZzEtPm1yX2NodW5rLnJsX213LT5yLmZybXIuZnJfbXItPnJrZXk7CisJCXNlZzEtPm1yX2Jhc2UgPSBzZWcxLT5tcl9kbWEgKyBwYWdlb2ZmOworCQlzZWcxLT5tcl9uc2VncyA9IGk7CisJCXNlZzEtPm1yX2xlbiA9IGxlbjsKKwl9CisJKm5zZWdzID0gaTsKKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyBpbnQKK3JwY3JkbWFfZGVyZWdpc3Rlcl9mcm1yX2V4dGVybmFsKHN0cnVjdCBycGNyZG1hX21yX3NlZyAqc2VnLAorCQkJc3RydWN0IHJwY3JkbWFfaWEgKmlhLCBzdHJ1Y3QgcnBjcmRtYV94cHJ0ICpyX3hwcnQpCit7CisJc3RydWN0IHJwY3JkbWFfbXJfc2VnICpzZWcxID0gc2VnOworCXN0cnVjdCBpYl9zZW5kX3dyIGludmFsaWRhdGVfd3IsICpiYWRfd3I7CisJaW50IHJjOworCisJd2hpbGUgKHNlZzEtPm1yX25zZWdzLS0pCisJCXJwY3JkbWFfdW5tYXBfb25lKGlhLCBzZWcrKyk7CisKKwltZW1zZXQoJmludmFsaWRhdGVfd3IsIDAsIHNpemVvZiBpbnZhbGlkYXRlX3dyKTsKKwlpbnZhbGlkYXRlX3dyLm9wY29kZSA9IElCX1dSX0xPQ0FMX0lOVjsKKwlpbnZhbGlkYXRlX3dyLnNlbmRfZmxhZ3MgPSAwOwkJCS8qIHVuc2lnbmFsZWQgKi8KKwlpbnZhbGlkYXRlX3dyLmV4LmludmFsaWRhdGVfcmtleSA9IHNlZzEtPm1yX2NodW5rLnJsX213LT5yLmZybXIuZnJfbXItPnJrZXk7CisJREVDUl9DUUNPVU5UKCZyX3hwcnQtPnJ4X2VwKTsKKworCXJjID0gaWJfcG9zdF9zZW5kKGlhLT5yaV9pZC0+cXAsICZpbnZhbGlkYXRlX3dyLCAmYmFkX3dyKTsKKwlpZiAocmMpCisJCWRwcmludGsoIlJQQzogICAgICAgJXM6IGZhaWxlZCBpYl9wb3N0X3NlbmQgZm9yIGludmFsaWRhdGUsIgorCQkJIiBzdGF0dXMgJWlcbiIsIF9fZnVuY19fLCByYyk7CisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgaW50CitycGNyZG1hX3JlZ2lzdGVyX2Ztcl9leHRlcm5hbChzdHJ1Y3QgcnBjcmRtYV9tcl9zZWcgKnNlZywKKwkJCWludCAqbnNlZ3MsIGludCB3cml0aW5nLCBzdHJ1Y3QgcnBjcmRtYV9pYSAqaWEpCit7CisJc3RydWN0IHJwY3JkbWFfbXJfc2VnICpzZWcxID0gc2VnOworCXU2NCBwaHlzYWRkcnNbUlBDUkRNQV9NQVhfREFUQV9TRUdTXTsKKwlpbnQgbGVuLCBwYWdlb2ZmLCBpLCByYzsKKworCXBhZ2VvZmYgPSBvZmZzZXRfaW5fcGFnZShzZWcxLT5tcl9vZmZzZXQpOworCXNlZzEtPm1yX29mZnNldCAtPSBwYWdlb2ZmOwkvKiBzdGFydCBvZiBwYWdlICovCisJc2VnMS0+bXJfbGVuICs9IHBhZ2VvZmY7CisJbGVuID0gLXBhZ2VvZmY7CisJaWYgKCpuc2VncyA+IFJQQ1JETUFfTUFYX0RBVEFfU0VHUykKKwkJKm5zZWdzID0gUlBDUkRNQV9NQVhfREFUQV9TRUdTOworCWZvciAoaSA9IDA7IGkgPCAqbnNlZ3M7KSB7CisJCXJwY3JkbWFfbWFwX29uZShpYSwgc2VnLCB3cml0aW5nKTsKKwkJcGh5c2FkZHJzW2ldID0gc2VnLT5tcl9kbWE7CisJCWxlbiArPSBzZWctPm1yX2xlbjsKKwkJKytzZWc7CisJCSsraTsKKwkJLyogQ2hlY2sgZm9yIGhvbGVzICovCisJCWlmICgoaSA8ICpuc2VncyAmJiBvZmZzZXRfaW5fcGFnZShzZWctPm1yX29mZnNldCkpIHx8CisJCSAgICBvZmZzZXRfaW5fcGFnZSgoc2VnLTEpLT5tcl9vZmZzZXQgKyAoc2VnLTEpLT5tcl9sZW4pKQorCQkJYnJlYWs7CisJfQorCXJjID0gaWJfbWFwX3BoeXNfZm1yKHNlZzEtPm1yX2NodW5rLnJsX213LT5yLmZtciwKKwkJCQlwaHlzYWRkcnMsIGksIHNlZzEtPm1yX2RtYSk7CisJaWYgKHJjKSB7CisJCWRwcmludGsoIlJQQzogICAgICAgJXM6IGZhaWxlZCBpYl9tYXBfcGh5c19mbXIgIgorCQkJIiV1QDB4JWxseCslaSAoJWQpLi4uIHN0YXR1cyAlaVxuIiwgX19mdW5jX18sCisJCQlsZW4sICh1bnNpZ25lZCBsb25nIGxvbmcpc2VnMS0+bXJfZG1hLAorCQkJcGFnZW9mZiwgaSwgcmMpOworCQl3aGlsZSAoaS0tKQorCQkJcnBjcmRtYV91bm1hcF9vbmUoaWEsIC0tc2VnKTsKKwl9IGVsc2UgeworCQlzZWcxLT5tcl9ya2V5ID0gc2VnMS0+bXJfY2h1bmsucmxfbXctPnIuZm1yLT5ya2V5OworCQlzZWcxLT5tcl9iYXNlID0gc2VnMS0+bXJfZG1hICsgcGFnZW9mZjsKKwkJc2VnMS0+bXJfbnNlZ3MgPSBpOworCQlzZWcxLT5tcl9sZW4gPSBsZW47CisJfQorCSpuc2VncyA9IGk7CisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgaW50CitycGNyZG1hX2RlcmVnaXN0ZXJfZm1yX2V4dGVybmFsKHN0cnVjdCBycGNyZG1hX21yX3NlZyAqc2VnLAorCQkJc3RydWN0IHJwY3JkbWFfaWEgKmlhKQoreworCXN0cnVjdCBycGNyZG1hX21yX3NlZyAqc2VnMSA9IHNlZzsKKwlMSVNUX0hFQUQobCk7CisJaW50IHJjOworCisJbGlzdF9hZGQoJnNlZzEtPm1yX2NodW5rLnJsX213LT5yLmZtci0+bGlzdCwgJmwpOworCXJjID0gaWJfdW5tYXBfZm1yKCZsKTsKKwl3aGlsZSAoc2VnMS0+bXJfbnNlZ3MtLSkKKwkJcnBjcmRtYV91bm1hcF9vbmUoaWEsIHNlZysrKTsKKwlpZiAocmMpCisJCWRwcmludGsoIlJQQzogICAgICAgJXM6IGZhaWxlZCBpYl91bm1hcF9mbXIsIgorCQkJIiBzdGF0dXMgJWlcbiIsIF9fZnVuY19fLCByYyk7CisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgaW50CitycGNyZG1hX3JlZ2lzdGVyX21lbXdpbl9leHRlcm5hbChzdHJ1Y3QgcnBjcmRtYV9tcl9zZWcgKnNlZywKKwkJCWludCAqbnNlZ3MsIGludCB3cml0aW5nLCBzdHJ1Y3QgcnBjcmRtYV9pYSAqaWEsCisJCQlzdHJ1Y3QgcnBjcmRtYV94cHJ0ICpyX3hwcnQpCit7CisJaW50IG1lbV9wcml2ID0gKHdyaXRpbmcgPyBJQl9BQ0NFU1NfUkVNT1RFX1dSSVRFIDoKKwkJCQkgIElCX0FDQ0VTU19SRU1PVEVfUkVBRCk7CisJc3RydWN0IGliX213X2JpbmQgcGFyYW07CisJaW50IHJjOworCisJKm5zZWdzID0gMTsKKwlycGNyZG1hX21hcF9vbmUoaWEsIHNlZywgd3JpdGluZyk7CisJcGFyYW0ubXIgPSBpYS0+cmlfYmluZF9tZW07CisJcGFyYW0ud3JfaWQgPSAwVUxMOwkvKiBubyBzZW5kIGNvb2tpZSAqLworCXBhcmFtLmFkZHIgPSBzZWctPm1yX2RtYTsKKwlwYXJhbS5sZW5ndGggPSBzZWctPm1yX2xlbjsKKwlwYXJhbS5zZW5kX2ZsYWdzID0gMDsKKwlwYXJhbS5td19hY2Nlc3NfZmxhZ3MgPSBtZW1fcHJpdjsKKworCURFQ1JfQ1FDT1VOVCgmcl94cHJ0LT5yeF9lcCk7CisJcmMgPSBpYl9iaW5kX213KGlhLT5yaV9pZC0+cXAsIHNlZy0+bXJfY2h1bmsucmxfbXctPnIubXcsICZwYXJhbSk7CisJaWYgKHJjKSB7CisJCWRwcmludGsoIlJQQzogICAgICAgJXM6IGZhaWxlZCBpYl9iaW5kX213ICIKKwkJCSIldUAweCVsbHggc3RhdHVzICVpXG4iLAorCQkJX19mdW5jX18sIHNlZy0+bXJfbGVuLAorCQkJKHVuc2lnbmVkIGxvbmcgbG9uZylzZWctPm1yX2RtYSwgcmMpOworCQlycGNyZG1hX3VubWFwX29uZShpYSwgc2VnKTsKKwl9IGVsc2UgeworCQlzZWctPm1yX3JrZXkgPSBzZWctPm1yX2NodW5rLnJsX213LT5yLm13LT5ya2V5OworCQlzZWctPm1yX2Jhc2UgPSBwYXJhbS5hZGRyOworCQlzZWctPm1yX25zZWdzID0gMTsKKwl9CisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgaW50CitycGNyZG1hX2RlcmVnaXN0ZXJfbWVtd2luX2V4dGVybmFsKHN0cnVjdCBycGNyZG1hX21yX3NlZyAqc2VnLAorCQkJc3RydWN0IHJwY3JkbWFfaWEgKmlhLAorCQkJc3RydWN0IHJwY3JkbWFfeHBydCAqcl94cHJ0LCB2b2lkICoqcikKK3sKKwlzdHJ1Y3QgaWJfbXdfYmluZCBwYXJhbTsKKwlMSVNUX0hFQUQobCk7CisJaW50IHJjOworCisJQlVHX09OKHNlZy0+bXJfbnNlZ3MgIT0gMSk7CisJcGFyYW0ubXIgPSBpYS0+cmlfYmluZF9tZW07CisJcGFyYW0uYWRkciA9IDBVTEw7CS8qIHVuYmluZCAqLworCXBhcmFtLmxlbmd0aCA9IDA7CisJcGFyYW0ubXdfYWNjZXNzX2ZsYWdzID0gMDsKKwlpZiAoKnIpIHsKKwkJcGFyYW0ud3JfaWQgPSAodTY0KSAodW5zaWduZWQgbG9uZykgKnI7CisJCXBhcmFtLnNlbmRfZmxhZ3MgPSBJQl9TRU5EX1NJR05BTEVEOworCQlJTklUX0NRQ09VTlQoJnJfeHBydC0+cnhfZXApOworCX0gZWxzZSB7CisJCXBhcmFtLndyX2lkID0gMFVMTDsKKwkJcGFyYW0uc2VuZF9mbGFncyA9IDA7CisJCURFQ1JfQ1FDT1VOVCgmcl94cHJ0LT5yeF9lcCk7CisJfQorCXJjID0gaWJfYmluZF9tdyhpYS0+cmlfaWQtPnFwLCBzZWctPm1yX2NodW5rLnJsX213LT5yLm13LCAmcGFyYW0pOworCXJwY3JkbWFfdW5tYXBfb25lKGlhLCBzZWcpOworCWlmIChyYykKKwkJZHByaW50aygiUlBDOiAgICAgICAlczogZmFpbGVkIGliXyh1biliaW5kX213LCIKKwkJCSIgc3RhdHVzICVpXG4iLCBfX2Z1bmNfXywgcmMpOworCWVsc2UKKwkJKnIgPSBOVUxMOwkvKiB3aWxsIHVwY2FsbCBvbiBjb21wbGV0aW9uICovCisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgaW50CitycGNyZG1hX3JlZ2lzdGVyX2RlZmF1bHRfZXh0ZXJuYWwoc3RydWN0IHJwY3JkbWFfbXJfc2VnICpzZWcsCisJCQlpbnQgKm5zZWdzLCBpbnQgd3JpdGluZywgc3RydWN0IHJwY3JkbWFfaWEgKmlhKQoreworCWludCBtZW1fcHJpdiA9ICh3cml0aW5nID8gSUJfQUNDRVNTX1JFTU9URV9XUklURSA6CisJCQkJICBJQl9BQ0NFU1NfUkVNT1RFX1JFQUQpOworCXN0cnVjdCBycGNyZG1hX21yX3NlZyAqc2VnMSA9IHNlZzsKKwlzdHJ1Y3QgaWJfcGh5c19idWYgaXBiW1JQQ1JETUFfTUFYX0RBVEFfU0VHU107CisJaW50IGxlbiwgaSwgcmMgPSAwOworCisJaWYgKCpuc2VncyA+IFJQQ1JETUFfTUFYX0RBVEFfU0VHUykKKwkJKm5zZWdzID0gUlBDUkRNQV9NQVhfREFUQV9TRUdTOworCWZvciAobGVuID0gMCwgaSA9IDA7IGkgPCAqbnNlZ3M7KSB7CisJCXJwY3JkbWFfbWFwX29uZShpYSwgc2VnLCB3cml0aW5nKTsKKwkJaXBiW2ldLmFkZHIgPSBzZWctPm1yX2RtYTsKKwkJaXBiW2ldLnNpemUgPSBzZWctPm1yX2xlbjsKKwkJbGVuICs9IHNlZy0+bXJfbGVuOworCQkrK3NlZzsKKwkJKytpOworCQkvKiBDaGVjayBmb3IgaG9sZXMgKi8KKwkJaWYgKChpIDwgKm5zZWdzICYmIG9mZnNldF9pbl9wYWdlKHNlZy0+bXJfb2Zmc2V0KSkgfHwKKwkJICAgIG9mZnNldF9pbl9wYWdlKChzZWctMSktPm1yX29mZnNldCsoc2VnLTEpLT5tcl9sZW4pKQorCQkJYnJlYWs7CisJfQorCXNlZzEtPm1yX2Jhc2UgPSBzZWcxLT5tcl9kbWE7CisJc2VnMS0+bXJfY2h1bmsucmxfbXIgPSBpYl9yZWdfcGh5c19tcihpYS0+cmlfcGQsCisJCQkJaXBiLCBpLCBtZW1fcHJpdiwgJnNlZzEtPm1yX2Jhc2UpOworCWlmIChJU19FUlIoc2VnMS0+bXJfY2h1bmsucmxfbXIpKSB7CisJCXJjID0gUFRSX0VSUihzZWcxLT5tcl9jaHVuay5ybF9tcik7CisJCWRwcmludGsoIlJQQzogICAgICAgJXM6IGZhaWxlZCBpYl9yZWdfcGh5c19tciAiCisJCQkiJXVAMHglbGx4ICglZCkuLi4gc3RhdHVzICVpXG4iLAorCQkJX19mdW5jX18sIGxlbiwKKwkJCSh1bnNpZ25lZCBsb25nIGxvbmcpc2VnMS0+bXJfZG1hLCBpLCByYyk7CisJCXdoaWxlIChpLS0pCisJCQlycGNyZG1hX3VubWFwX29uZShpYSwgLS1zZWcpOworCX0gZWxzZSB7CisJCXNlZzEtPm1yX3JrZXkgPSBzZWcxLT5tcl9jaHVuay5ybF9tci0+cmtleTsKKwkJc2VnMS0+bXJfbnNlZ3MgPSBpOworCQlzZWcxLT5tcl9sZW4gPSBsZW47CisJfQorCSpuc2VncyA9IGk7CisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgaW50CitycGNyZG1hX2RlcmVnaXN0ZXJfZGVmYXVsdF9leHRlcm5hbChzdHJ1Y3QgcnBjcmRtYV9tcl9zZWcgKnNlZywKKwkJCXN0cnVjdCBycGNyZG1hX2lhICppYSkKK3sKKwlzdHJ1Y3QgcnBjcmRtYV9tcl9zZWcgKnNlZzEgPSBzZWc7CisJaW50IHJjOworCisJcmMgPSBpYl9kZXJlZ19tcihzZWcxLT5tcl9jaHVuay5ybF9tcik7CisJc2VnMS0+bXJfY2h1bmsucmxfbXIgPSBOVUxMOworCXdoaWxlIChzZWcxLT5tcl9uc2Vncy0tKQorCQlycGNyZG1hX3VubWFwX29uZShpYSwgc2VnKyspOworCWlmIChyYykKKwkJZHByaW50aygiUlBDOiAgICAgICAlczogZmFpbGVkIGliX2RlcmVnX21yLCIKKwkJCSIgc3RhdHVzICVpXG4iLCBfX2Z1bmNfXywgcmMpOworCXJldHVybiByYzsKK30KKwogaW50CiBycGNyZG1hX3JlZ2lzdGVyX2V4dGVybmFsKHN0cnVjdCBycGNyZG1hX21yX3NlZyAqc2VnLAogCQkJaW50IG5zZWdzLCBpbnQgd3JpdGluZywgc3RydWN0IHJwY3JkbWFfeHBydCAqcl94cHJ0KQogewogCXN0cnVjdCBycGNyZG1hX2lhICppYSA9ICZyX3hwcnQtPnJ4X2lhOwotCWludCBtZW1fcHJpdiA9ICh3cml0aW5nID8gSUJfQUNDRVNTX1JFTU9URV9XUklURSA6Ci0JCQkJICBJQl9BQ0NFU1NfUkVNT1RFX1JFQUQpOwotCXN0cnVjdCBycGNyZG1hX21yX3NlZyAqc2VnMSA9IHNlZzsKLQlpbnQgaTsKIAlpbnQgcmMgPSAwOwogCiAJc3dpdGNoIChpYS0+cmlfbWVtcmVnX3N0cmF0ZWd5KSB7CkBAIC0xMzUyLDExNCArMTc1MCwyNSBAQAogCQlicmVhazsKICNlbmRpZgogCi0JLyogUmVnaXN0cmF0aW9uIHVzaW5nIGZhc3QgbWVtb3J5IHJlZ2lzdHJhdGlvbiAqLworCS8qIFJlZ2lzdHJhdGlvbiB1c2luZyBmcm1yIHJlZ2lzdHJhdGlvbiAqLworCWNhc2UgUlBDUkRNQV9GUk1SOgorCQlyYyA9IHJwY3JkbWFfcmVnaXN0ZXJfZnJtcl9leHRlcm5hbChzZWcsICZuc2Vncywgd3JpdGluZywgaWEsIHJfeHBydCk7CisJCWJyZWFrOworCisJLyogUmVnaXN0cmF0aW9uIHVzaW5nIGZtciBtZW1vcnkgcmVnaXN0cmF0aW9uICovCiAJY2FzZSBSUENSRE1BX01USENBRk1SOgotCQl7Ci0JCXU2NCBwaHlzYWRkcnNbUlBDUkRNQV9NQVhfREFUQV9TRUdTXTsKLQkJaW50IGxlbiwgcGFnZW9mZiA9IG9mZnNldF9pbl9wYWdlKHNlZy0+bXJfb2Zmc2V0KTsKLQkJc2VnMS0+bXJfb2Zmc2V0IC09IHBhZ2VvZmY7CS8qIHN0YXJ0IG9mIHBhZ2UgKi8KLQkJc2VnMS0+bXJfbGVuICs9IHBhZ2VvZmY7Ci0JCWxlbiA9IC1wYWdlb2ZmOwotCQlpZiAobnNlZ3MgPiBSUENSRE1BX01BWF9EQVRBX1NFR1MpCi0JCQluc2VncyA9IFJQQ1JETUFfTUFYX0RBVEFfU0VHUzsKLQkJZm9yIChpID0gMDsgaSA8IG5zZWdzOykgewotCQkJcnBjcmRtYV9tYXBfb25lKGlhLCBzZWcsIHdyaXRpbmcpOwotCQkJcGh5c2FkZHJzW2ldID0gc2VnLT5tcl9kbWE7Ci0JCQlsZW4gKz0gc2VnLT5tcl9sZW47Ci0JCQkrK3NlZzsKLQkJCSsraTsKLQkJCS8qIENoZWNrIGZvciBob2xlcyAqLwotCQkJaWYgKChpIDwgbnNlZ3MgJiYgb2Zmc2V0X2luX3BhZ2Uoc2VnLT5tcl9vZmZzZXQpKSB8fAotCQkJICAgIG9mZnNldF9pbl9wYWdlKChzZWctMSktPm1yX29mZnNldCsoc2VnLTEpLT5tcl9sZW4pKQotCQkJCWJyZWFrOwotCQl9Ci0JCW5zZWdzID0gaTsKLQkJcmMgPSBpYl9tYXBfcGh5c19mbXIoc2VnMS0+bXJfY2h1bmsucmxfbXctPnIuZm1yLAotCQkJCQlwaHlzYWRkcnMsIG5zZWdzLCBzZWcxLT5tcl9kbWEpOwotCQlpZiAocmMpIHsKLQkJCWRwcmludGsoIlJQQzogICAgICAgJXM6IGZhaWxlZCBpYl9tYXBfcGh5c19mbXIgIgotCQkJCSIldUAweCVsbHgrJWkgKCVkKS4uLiBzdGF0dXMgJWlcbiIsIF9fZnVuY19fLAotCQkJCWxlbiwgKHVuc2lnbmVkIGxvbmcgbG9uZylzZWcxLT5tcl9kbWEsCi0JCQkJcGFnZW9mZiwgbnNlZ3MsIHJjKTsKLQkJCXdoaWxlIChuc2Vncy0tKQotCQkJCXJwY3JkbWFfdW5tYXBfb25lKGlhLCAtLXNlZyk7Ci0JCX0gZWxzZSB7Ci0JCQlzZWcxLT5tcl9ya2V5ID0gc2VnMS0+bXJfY2h1bmsucmxfbXctPnIuZm1yLT5ya2V5OwotCQkJc2VnMS0+bXJfYmFzZSA9IHNlZzEtPm1yX2RtYSArIHBhZ2VvZmY7Ci0JCQlzZWcxLT5tcl9uc2VncyA9IG5zZWdzOwotCQkJc2VnMS0+bXJfbGVuID0gbGVuOwotCQl9Ci0JCX0KKwkJcmMgPSBycGNyZG1hX3JlZ2lzdGVyX2Ztcl9leHRlcm5hbChzZWcsICZuc2Vncywgd3JpdGluZywgaWEpOwogCQlicmVhazsKIAogCS8qIFJlZ2lzdHJhdGlvbiB1c2luZyBtZW1vcnkgd2luZG93cyAqLwogCWNhc2UgUlBDUkRNQV9NRU1XSU5ET1dTX0FTWU5DOgogCWNhc2UgUlBDUkRNQV9NRU1XSU5ET1dTOgotCQl7Ci0JCXN0cnVjdCBpYl9td19iaW5kIHBhcmFtOwotCQlycGNyZG1hX21hcF9vbmUoaWEsIHNlZywgd3JpdGluZyk7Ci0JCXBhcmFtLm1yID0gaWEtPnJpX2JpbmRfbWVtOwotCQlwYXJhbS53cl9pZCA9IDBVTEw7CS8qIG5vIHNlbmQgY29va2llICovCi0JCXBhcmFtLmFkZHIgPSBzZWctPm1yX2RtYTsKLQkJcGFyYW0ubGVuZ3RoID0gc2VnLT5tcl9sZW47Ci0JCXBhcmFtLnNlbmRfZmxhZ3MgPSAwOwotCQlwYXJhbS5td19hY2Nlc3NfZmxhZ3MgPSBtZW1fcHJpdjsKLQotCQlERUNSX0NRQ09VTlQoJnJfeHBydC0+cnhfZXApOwotCQlyYyA9IGliX2JpbmRfbXcoaWEtPnJpX2lkLT5xcCwKLQkJCQkJc2VnLT5tcl9jaHVuay5ybF9tdy0+ci5tdywgJnBhcmFtKTsKLQkJaWYgKHJjKSB7Ci0JCQlkcHJpbnRrKCJSUEM6ICAgICAgICVzOiBmYWlsZWQgaWJfYmluZF9tdyAiCi0JCQkJIiV1QDB4JWxseCBzdGF0dXMgJWlcbiIsCi0JCQkJX19mdW5jX18sIHNlZy0+bXJfbGVuLAotCQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpc2VnLT5tcl9kbWEsIHJjKTsKLQkJCXJwY3JkbWFfdW5tYXBfb25lKGlhLCBzZWcpOwotCQl9IGVsc2UgewotCQkJc2VnLT5tcl9ya2V5ID0gc2VnLT5tcl9jaHVuay5ybF9tdy0+ci5tdy0+cmtleTsKLQkJCXNlZy0+bXJfYmFzZSA9IHBhcmFtLmFkZHI7Ci0JCQlzZWctPm1yX25zZWdzID0gMTsKLQkJCW5zZWdzID0gMTsKLQkJfQotCQl9CisJCXJjID0gcnBjcmRtYV9yZWdpc3Rlcl9tZW13aW5fZXh0ZXJuYWwoc2VnLCAmbnNlZ3MsIHdyaXRpbmcsIGlhLCByX3hwcnQpOwogCQlicmVhazsKIAogCS8qIERlZmF1bHQgcmVnaXN0cmF0aW9uIGVhY2ggdGltZSAqLwogCWRlZmF1bHQ6Ci0JCXsKLQkJc3RydWN0IGliX3BoeXNfYnVmIGlwYltSUENSRE1BX01BWF9EQVRBX1NFR1NdOwotCQlpbnQgbGVuID0gMDsKLQkJaWYgKG5zZWdzID4gUlBDUkRNQV9NQVhfREFUQV9TRUdTKQotCQkJbnNlZ3MgPSBSUENSRE1BX01BWF9EQVRBX1NFR1M7Ci0JCWZvciAoaSA9IDA7IGkgPCBuc2VnczspIHsKLQkJCXJwY3JkbWFfbWFwX29uZShpYSwgc2VnLCB3cml0aW5nKTsKLQkJCWlwYltpXS5hZGRyID0gc2VnLT5tcl9kbWE7Ci0JCQlpcGJbaV0uc2l6ZSA9IHNlZy0+bXJfbGVuOwotCQkJbGVuICs9IHNlZy0+bXJfbGVuOwotCQkJKytzZWc7Ci0JCQkrK2k7Ci0JCQkvKiBDaGVjayBmb3IgaG9sZXMgKi8KLQkJCWlmICgoaSA8IG5zZWdzICYmIG9mZnNldF9pbl9wYWdlKHNlZy0+bXJfb2Zmc2V0KSkgfHwKLQkJCSAgICBvZmZzZXRfaW5fcGFnZSgoc2VnLTEpLT5tcl9vZmZzZXQrKHNlZy0xKS0+bXJfbGVuKSkKLQkJCQlicmVhazsKLQkJfQotCQluc2VncyA9IGk7Ci0JCXNlZzEtPm1yX2Jhc2UgPSBzZWcxLT5tcl9kbWE7Ci0JCXNlZzEtPm1yX2NodW5rLnJsX21yID0gaWJfcmVnX3BoeXNfbXIoaWEtPnJpX3BkLAotCQkJCQlpcGIsIG5zZWdzLCBtZW1fcHJpdiwgJnNlZzEtPm1yX2Jhc2UpOwotCQlpZiAoSVNfRVJSKHNlZzEtPm1yX2NodW5rLnJsX21yKSkgewotCQkJcmMgPSBQVFJfRVJSKHNlZzEtPm1yX2NodW5rLnJsX21yKTsKLQkJCWRwcmludGsoIlJQQzogICAgICAgJXM6IGZhaWxlZCBpYl9yZWdfcGh5c19tciAiCi0JCQkJIiV1QDB4JWxseCAoJWQpLi4uIHN0YXR1cyAlaVxuIiwKLQkJCQlfX2Z1bmNfXywgbGVuLAotCQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpc2VnMS0+bXJfZG1hLCBuc2VncywgcmMpOwotCQkJd2hpbGUgKG5zZWdzLS0pCi0JCQkJcnBjcmRtYV91bm1hcF9vbmUoaWEsIC0tc2VnKTsKLQkJfSBlbHNlIHsKLQkJCXNlZzEtPm1yX3JrZXkgPSBzZWcxLT5tcl9jaHVuay5ybF9tci0+cmtleTsKLQkJCXNlZzEtPm1yX25zZWdzID0gbnNlZ3M7Ci0JCQlzZWcxLT5tcl9sZW4gPSBsZW47Ci0JCX0KLQkJfQorCQlyYyA9IHJwY3JkbWFfcmVnaXN0ZXJfZGVmYXVsdF9leHRlcm5hbChzZWcsICZuc2Vncywgd3JpdGluZywgaWEpOwogCQlicmVhazsKIAl9CiAJaWYgKHJjKQpAQCAtMTQ3Myw3ICsxNzgyLDYgQEAKIAkJc3RydWN0IHJwY3JkbWFfeHBydCAqcl94cHJ0LCB2b2lkICpyKQogewogCXN0cnVjdCBycGNyZG1hX2lhICppYSA9ICZyX3hwcnQtPnJ4X2lhOwotCXN0cnVjdCBycGNyZG1hX21yX3NlZyAqc2VnMSA9IHNlZzsKIAlpbnQgbnNlZ3MgPSBzZWctPm1yX25zZWdzLCByYzsKIAogCXN3aXRjaCAoaWEtPnJpX21lbXJlZ19zdHJhdGVneSkgewpAQCAtMTQ4Niw1NiArMTc5NCwyMSBAQAogCQlicmVhazsKICNlbmRpZgogCisJY2FzZSBSUENSRE1BX0ZSTVI6CisJCXJjID0gcnBjcmRtYV9kZXJlZ2lzdGVyX2ZybXJfZXh0ZXJuYWwoc2VnLCBpYSwgcl94cHJ0KTsKKwkJYnJlYWs7CisKIAljYXNlIFJQQ1JETUFfTVRIQ0FGTVI6Ci0JCXsKLQkJTElTVF9IRUFEKGwpOwotCQlsaXN0X2FkZCgmc2VnLT5tcl9jaHVuay5ybF9tdy0+ci5mbXItPmxpc3QsICZsKTsKLQkJcmMgPSBpYl91bm1hcF9mbXIoJmwpOwotCQl3aGlsZSAoc2VnMS0+bXJfbnNlZ3MtLSkKLQkJCXJwY3JkbWFfdW5tYXBfb25lKGlhLCBzZWcrKyk7Ci0JCX0KLQkJaWYgKHJjKQotCQkJZHByaW50aygiUlBDOiAgICAgICAlczogZmFpbGVkIGliX3VubWFwX2ZtciwiCi0JCQkJIiBzdGF0dXMgJWlcbiIsIF9fZnVuY19fLCByYyk7CisJCXJjID0gcnBjcmRtYV9kZXJlZ2lzdGVyX2Ztcl9leHRlcm5hbChzZWcsIGlhKTsKIAkJYnJlYWs7CiAKIAljYXNlIFJQQ1JETUFfTUVNV0lORE9XU19BU1lOQzoKIAljYXNlIFJQQ1JETUFfTUVNV0lORE9XUzoKLQkJewotCQlzdHJ1Y3QgaWJfbXdfYmluZCBwYXJhbTsKLQkJQlVHX09OKG5zZWdzICE9IDEpOwotCQlwYXJhbS5tciA9IGlhLT5yaV9iaW5kX21lbTsKLQkJcGFyYW0uYWRkciA9IDBVTEw7CS8qIHVuYmluZCAqLwotCQlwYXJhbS5sZW5ndGggPSAwOwotCQlwYXJhbS5td19hY2Nlc3NfZmxhZ3MgPSAwOwotCQlpZiAocikgewotCQkJcGFyYW0ud3JfaWQgPSAodTY0KSAodW5zaWduZWQgbG9uZykgcjsKLQkJCXBhcmFtLnNlbmRfZmxhZ3MgPSBJQl9TRU5EX1NJR05BTEVEOwotCQkJSU5JVF9DUUNPVU5UKCZyX3hwcnQtPnJ4X2VwKTsKLQkJfSBlbHNlIHsKLQkJCXBhcmFtLndyX2lkID0gMFVMTDsKLQkJCXBhcmFtLnNlbmRfZmxhZ3MgPSAwOwotCQkJREVDUl9DUUNPVU5UKCZyX3hwcnQtPnJ4X2VwKTsKLQkJfQotCQlyYyA9IGliX2JpbmRfbXcoaWEtPnJpX2lkLT5xcCwKLQkJCQlzZWctPm1yX2NodW5rLnJsX213LT5yLm13LCAmcGFyYW0pOwotCQlycGNyZG1hX3VubWFwX29uZShpYSwgc2VnKTsKLQkJfQotCQlpZiAocmMpCi0JCQlkcHJpbnRrKCJSUEM6ICAgICAgICVzOiBmYWlsZWQgaWJfKHVuKWJpbmRfbXcsIgotCQkJCSIgc3RhdHVzICVpXG4iLCBfX2Z1bmNfXywgcmMpOwotCQllbHNlCi0JCQlyID0gTlVMTDsJLyogd2lsbCB1cGNhbGwgb24gY29tcGxldGlvbiAqLworCQlyYyA9IHJwY3JkbWFfZGVyZWdpc3Rlcl9tZW13aW5fZXh0ZXJuYWwoc2VnLCBpYSwgcl94cHJ0LCAmcik7CiAJCWJyZWFrOwogCiAJZGVmYXVsdDoKLQkJcmMgPSBpYl9kZXJlZ19tcihzZWcxLT5tcl9jaHVuay5ybF9tcik7Ci0JCXNlZzEtPm1yX2NodW5rLnJsX21yID0gTlVMTDsKLQkJd2hpbGUgKHNlZzEtPm1yX25zZWdzLS0pCi0JCQlycGNyZG1hX3VubWFwX29uZShpYSwgc2VnKyspOwotCQlpZiAocmMpCi0JCQlkcHJpbnRrKCJSUEM6ICAgICAgICVzOiBmYWlsZWQgaWJfZGVyZWdfbXIsIgotCQkJCSIgc3RhdHVzICVpXG4iLCBfX2Z1bmNfXywgcmMpOworCQlyYyA9IHJwY3JkbWFfZGVyZWdpc3Rlcl9kZWZhdWx0X2V4dGVybmFsKHNlZywgaWEpOwogCQlicmVhazsKIAl9CiAJaWYgKHIpIHsKZGlmZiAtLWdpdCBhL25ldC9zdW5ycGMveHBydHJkbWEveHBydF9yZG1hLmggYi9uZXQvc3VucnBjL3hwcnRyZG1hL3hwcnRfcmRtYS5oCmluZGV4IDI0Mjc4MjIuLmM3YTdlYmEgMTAwNjQ0Ci0tLSBhL25ldC9zdW5ycGMveHBydHJkbWEveHBydF9yZG1hLmgKKysrIGIvbmV0L3N1bnJwYy94cHJ0cmRtYS94cHJ0X3JkbWEuaApAQCAtNTEsNiArNTEsOSBAQAogI2luY2x1ZGUgPGxpbnV4L3N1bnJwYy9ycGNfcmRtYS5oPiAJLyogUlBDL1JETUEgcHJvdG9jb2wgKi8KICNpbmNsdWRlIDxsaW51eC9zdW5ycGMveHBydHJkbWEuaD4gCS8qIHhwcnQgcGFyYW1ldGVycyAqLwogCisjZGVmaW5lIFJETUFfUkVTT0xWRV9USU1FT1VUCSg1MDAwKQkvKiA1IHNlY29uZHMgKi8KKyNkZWZpbmUgUkRNQV9DT05ORUNUX1JFVFJZX01BWAkoMikJLyogcmV0cmllcyBpZiBubyBsaXN0ZW5lciBiYWNrbG9nICovCisKIC8qCiAgKiBJbnRlcmZhY2UgQWRhcHRlciAtLSBvbmUgcGVyIHRyYW5zcG9ydCBpbnN0YW5jZQogICovCkBAIC01OCw2ICs2MSw4IEBACiAJc3RydWN0IHJkbWFfY21faWQgCSpyaV9pZDsKIAlzdHJ1Y3QgaWJfcGQJCSpyaV9wZDsKIAlzdHJ1Y3QgaWJfbXIJCSpyaV9iaW5kX21lbTsKKwl1MzIJCQlyaV9kbWFfbGtleTsKKwlpbnQJCQlyaV9oYXZlX2RtYV9sa2V5OwogCXN0cnVjdCBjb21wbGV0aW9uCXJpX2RvbmU7CiAJaW50CQkJcmlfYXN5bmNfcmM7CiAJZW51bSBycGNyZG1hX21lbXJlZwlyaV9tZW1yZWdfc3RyYXRlZ3k7CkBAIC0xNTYsNiArMTYxLDEwIEBACiAJCQl1bmlvbiB7CiAJCQkJc3RydWN0IGliX213CSptdzsKIAkJCQlzdHJ1Y3QgaWJfZm1yCSpmbXI7CisJCQkJc3RydWN0IHsKKwkJCQkJc3RydWN0IGliX2Zhc3RfcmVnX3BhZ2VfbGlzdCAqZnJfcGdsOworCQkJCQlzdHJ1Y3QgaWJfbXIgKmZyX21yOworCQkJCX0gZnJtcjsKIAkJCX0gcjsKIAkJCXN0cnVjdCBsaXN0X2hlYWQgbXdfbGlzdDsKIAkJfSAqcmxfbXc7CkBAIC0xNzUsNiArMTg0LDcgQEAKIAlzaXplX3QgCQlybF9zaXplOwkvKiBhY3R1YWwgbGVuZ3RoIG9mIGJ1ZmZlciAqLwogCXVuc2lnbmVkIGludAlybF9uaW92czsJLyogMCwgMiBvciA0ICovCiAJdW5zaWduZWQgaW50CXJsX25jaHVua3M7CS8qIG5vbi16ZXJvIGlmIGNodW5rcyAqLworCXVuc2lnbmVkIGludAlybF9jb25uZWN0X2Nvb2tpZTsJLyogcmV0cnkgZGV0ZWN0aW9uICovCiAJc3RydWN0IHJwY3JkbWFfYnVmZmVyICpybF9idWZmZXI7IC8qIGhvbWUgYmFzZSBmb3IgdGhpcyBzdHJ1Y3R1cmUgKi8KIAlzdHJ1Y3QgcnBjcmRtYV9yZXAJKnJsX3JlcGx5Oy8qIGhvbGRlciBmb3IgcmVwbHkgYnVmZmVyICovCiAJc3RydWN0IHJwY3JkbWFfbXJfc2VnIHJsX3NlZ21lbnRzW1JQQ1JETUFfTUFYX1NFR1NdOy8qIGNodW5rIHNlZ21lbnRzICovCkBAIC0xOTgsNyArMjA4LDcgQEAKIAlhdG9taWNfdAlyYl9jcmVkaXRzOwkvKiBtb3N0IHJlY2VudCBzZXJ2ZXIgY3JlZGl0cyAqLwogCXVuc2lnbmVkIGxvbmcJcmJfY3duZHNjYWxlOwkvKiBjYWNoZWQgZnJhbWV3b3JrIHJwY19jd25kc2NhbGUgKi8KIAlpbnQJCXJiX21heF9yZXF1ZXN0czsvKiBjbGllbnQgbWF4IHJlcXVlc3RzICovCi0Jc3RydWN0IGxpc3RfaGVhZCByYl9td3M7CS8qIG9wdGlvbmFsIG1lbW9yeSB3aW5kb3dzL2ZtcnMgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkIHJiX213czsJLyogb3B0aW9uYWwgbWVtb3J5IHdpbmRvd3MvZm1ycy9mcm1ycyAqLwogCWludAkJcmJfc2VuZF9pbmRleDsKIAlzdHJ1Y3QgcnBjcmRtYV9yZXEJKipyYl9zZW5kX2J1ZnM7CiAJaW50CQlyYl9yZWN2X2luZGV4OwpAQCAtMjczLDYgKzI4MywxMSBAQAogI2RlZmluZSBycGN4X3RvX3JkbWF4KHgpIGNvbnRhaW5lcl9vZih4LCBzdHJ1Y3QgcnBjcmRtYV94cHJ0LCB4cHJ0KQogI2RlZmluZSBycGN4X3RvX3JkbWFkKHgpIChycGN4X3RvX3JkbWF4KHgpLT5yeF9kYXRhKQogCisvKiBTZXR0aW5nIHRoaXMgdG8gMCBlbnN1cmVzIGludGVyb3BlcmFiaWxpdHkgd2l0aCBlYXJseSBzZXJ2ZXJzLgorICogU2V0dGluZyB0aGlzIHRvIDEgZW5oYW5jZXMgY2VydGFpbiB1bmFsaWduZWQgcmVhZC93cml0ZSBwZXJmb3JtYW5jZS4KKyAqIERlZmF1bHQgaXMgMCwgc2VlIHN5c2N0bCBlbnRyeSBhbmQgcnBjX3JkbWEuYyBycGNyZG1hX2NvbnZlcnRfaW92cygpICovCitleHRlcm4gaW50IHhwcnRfcmRtYV9wYWRfb3B0aW1pemU7CisKIC8qCiAgKiBJbnRlcmZhY2UgQWRhcHRlciBjYWxscyAtIHhwcnRyZG1hL3ZlcmJzLmMKICAqLwpkaWZmIC0tZ2l0IGEvbmV0L3N1bnJwYy94cHJ0c29jay5jIGIvbmV0L3N1bnJwYy94cHJ0c29jay5jCmluZGV4IDQ0ODZjNTkuLjlhMjg4ZDUgMTAwNjQ0Ci0tLSBhL25ldC9zdW5ycGMveHBydHNvY2suYworKysgYi9uZXQvc3VucnBjL3hwcnRzb2NrLmMKQEAgLTMsOCArMyw4IEBACiAgKgogICogQ2xpZW50LXNpZGUgdHJhbnNwb3J0IGltcGxlbWVudGF0aW9uIGZvciBzb2NrZXRzLgogICoKLSAqIFRDUCBjYWxsYmFjayByYWNlcyBmaXhlcyAoQykgMTk5OCBSZWQgSGF0IFNvZnR3YXJlIDxhbGFuQHJlZGhhdC5jb20+Ci0gKiBUQ1Agc2VuZCBmaXhlcyAoQykgMTk5OCBSZWQgSGF0IFNvZnR3YXJlIDxhbGFuQHJlZGhhdC5jb20+CisgKiBUQ1AgY2FsbGJhY2sgcmFjZXMgZml4ZXMgKEMpIDE5OTggUmVkIEhhdAorICogVENQIHNlbmQgZml4ZXMgKEMpIDE5OTggUmVkIEhhdAogICogVENQIE5GUyByZWxhdGVkIHJlYWQgKyB3cml0ZSBmaXhlcwogICogIChDKSAxOTk5IERhdmUgQWlybGllLCBVbml2ZXJzaXR5IG9mIExpbWVyaWNrLCBJcmVsYW5kIDxhaXJsaWVkQGxpbnV4LmllPgogICoKZGlmZiAtLWdpdCBhL25ldC91bml4L2FmX3VuaXguYyBiL25ldC91bml4L2FmX3VuaXguYwppbmRleCAwMTU2MDZiLi5jNjQ3YWFiIDEwMDY0NAotLS0gYS9uZXQvdW5peC9hZl91bml4LmMKKysrIGIvbmV0L3VuaXgvYWZfdW5peC5jCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqIE5FVDQ6CUltcGxlbWVudGF0aW9uIG9mIEJTRCBVbml4IGRvbWFpbiBzb2NrZXRzLgogICoKLSAqIEF1dGhvcnM6CUFsYW4gQ294LCA8YWxhbi5jb3hAbGludXgub3JnPgorICogQXV0aG9yczoJQWxhbiBDb3gsIDxhbGFuQGx4b3JndWsudWt1dS5vcmcudWs+CiAgKgogICoJCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqCQltb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQpkaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL2NvcmUuYyBiL25ldC93aXJlbGVzcy9jb3JlLmMKaW5kZXggNWNhZGJlYi4uNTAzMWRiNyAxMDA2NDQKLS0tIGEvbmV0L3dpcmVsZXNzL2NvcmUuYworKysgYi9uZXQvd2lyZWxlc3MvY29yZS5jCkBAIC0xMyw3ICsxMyw2IEBACiAjaW5jbHVkZSA8bGludXgvZGVidWdmcy5oPgogI2luY2x1ZGUgPGxpbnV4L25vdGlmaWVyLmg+CiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvbGlzdC5oPgogI2luY2x1ZGUgPG5ldC9nZW5ldGxpbmsuaD4KICNpbmNsdWRlIDxuZXQvY2ZnODAyMTEuaD4KICNpbmNsdWRlIDxuZXQvd2lyZWxlc3MuaD4KQEAgLTE4NSw3ICsxODQsOCBAQAogCWlmIChyZXN1bHQpCiAJCWdvdG8gb3V0X3VubG9jazsKIAotCWlmICghZGVidWdmc19yZW5hbWUocmRldi0+d2lwaHkuZGVidWdmc2Rpci0+ZF9wYXJlbnQsCisJaWYgKHJkZXYtPndpcGh5LmRlYnVnZnNkaXIgJiYKKwkgICAgIWRlYnVnZnNfcmVuYW1lKHJkZXYtPndpcGh5LmRlYnVnZnNkaXItPmRfcGFyZW50LAogCQkJICAgIHJkZXYtPndpcGh5LmRlYnVnZnNkaXIsCiAJCQkgICAgcmRldi0+d2lwaHkuZGVidWdmc2Rpci0+ZF9wYXJlbnQsCiAJCQkgICAgbmV3bmFtZSkpCkBAIC0zMTgsNiArMzE4LDggQEAKIAlkcnYtPndpcGh5LmRlYnVnZnNkaXIgPQogCQlkZWJ1Z2ZzX2NyZWF0ZV9kaXIod2lwaHlfbmFtZSgmZHJ2LT53aXBoeSksCiAJCQkJICAgaWVlZTgwMjExX2RlYnVnZnNfZGlyKTsKKwlpZiAoSVNfRVJSKGRydi0+d2lwaHkuZGVidWdmc2RpcikpCisJCWRydi0+d2lwaHkuZGVidWdmc2RpciA9IE5VTEw7CiAKIAlyZXMgPSAwOwogb3V0X3VubG9jazoKZGlmZiAtLWdpdCBhL3NjcmlwdHMvTWFrZWZpbGUubGliIGIvc2NyaXB0cy9NYWtlZmlsZS5saWIKaW5kZXggZWE0OGI4Mi4uYjRjYTM4YSAxMDA2NDQKLS0tIGEvc2NyaXB0cy9NYWtlZmlsZS5saWIKKysrIGIvc2NyaXB0cy9NYWtlZmlsZS5saWIKQEAgLTk2LDYgKzk2LDE0IEBACiBtb2RuYW1lX2ZsYWdzICA9ICQoaWYgJChmaWx0ZXIgMSwkKHdvcmRzICQobW9kbmFtZSkpKSxcCiAgICAgICAgICAgICAgICAgIC1EIktCVUlMRF9NT0ROQU1FPUtCVUlMRF9TVFIoJChjYWxsIG5hbWUtZml4LCQobW9kbmFtZSkpKSIpCiAKKyNoYXNoIHZhbHVlcworaWZkZWYgQ09ORklHX0RZTkFNSUNfUFJJTlRLX0RFQlVHCitkZWJ1Z19mbGFncyA9IC1EIkRFQlVHX0hBU0g9JChzaGVsbCAuL3NjcmlwdHMvYmFzaWMvaGFzaCBkamIyICQoQEQpJChtb2RuYW1lKSkiXAorICAgICAgICAgICAgICAtRCJERUJVR19IQVNIMj0kKHNoZWxsIC4vc2NyaXB0cy9iYXNpYy9oYXNoIHI1ICQoQEQpJChtb2RuYW1lKSkiCitlbHNlCitkZWJ1Z19mbGFncyA9CitlbmRpZgorCiBvcmlnX2NfZmxhZ3MgICA9ICQoS0JVSUxEX0NGTEFHUykgJChjY2ZsYWdzLXkpICQoQ0ZMQUdTXyQoYmFzZXRhcmdldCkubykKIF9jX2ZsYWdzICAgICAgID0gJChmaWx0ZXItb3V0ICQoQ0ZMQUdTX1JFTU9WRV8kKGJhc2V0YXJnZXQpLm8pLCAkKG9yaWdfY19mbGFncykpCiBfYV9mbGFncyAgICAgICA9ICQoS0JVSUxEX0FGTEFHUykgJChhc2ZsYWdzLXkpICQoQUZMQUdTXyQoYmFzZXRhcmdldCkubykKQEAgLTEyMSw3ICsxMjksOCBAQAogCiBjX2ZsYWdzICAgICAgICA9IC1XcCwtTUQsJChkZXBmaWxlKSAkKE5PU1RESU5DX0ZMQUdTKSAkKEtCVUlMRF9DUFBGTEFHUykgXAogCQkgJChfX2NfZmxhZ3MpICQobW9ka2Vybl9jZmxhZ3MpIFwKLQkJIC1EIktCVUlMRF9TVFIocyk9XCNzIiAkKGJhc2VuYW1lX2ZsYWdzKSAkKG1vZG5hbWVfZmxhZ3MpCisJCSAtRCJLQlVJTERfU1RSKHMpPVwjcyIgJChiYXNlbmFtZV9mbGFncykgJChtb2RuYW1lX2ZsYWdzKSBcCisJCSAgJChkZWJ1Z19mbGFncykKIAogYV9mbGFncyAgICAgICAgPSAtV3AsLU1ELCQoZGVwZmlsZSkgJChOT1NURElOQ19GTEFHUykgJChLQlVJTERfQ1BQRkxBR1MpIFwKIAkJICQoX19hX2ZsYWdzKSAkKG1vZGtlcm5fYWZsYWdzKQpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9iYXNpYy8uZ2l0aWdub3JlIGIvc2NyaXB0cy9iYXNpYy8uZ2l0aWdub3JlCmluZGV4IDczMDRlMTkuLmJmOGIxOTkgMTAwNjQ0Ci0tLSBhL3NjcmlwdHMvYmFzaWMvLmdpdGlnbm9yZQorKysgYi9zY3JpcHRzL2Jhc2ljLy5naXRpZ25vcmUKQEAgLTEsMyArMSwzIEBACitoYXNoCiBmaXhkZXAKLXNwbGl0LWluY2x1ZGUKIGRvY3Byb2MKZGlmZiAtLWdpdCBhL3NjcmlwdHMvYmFzaWMvTWFrZWZpbGUgYi9zY3JpcHRzL2Jhc2ljL01ha2VmaWxlCmluZGV4IDRjMzI0YTEuLjA5NTU5OTUgMTAwNjQ0Ci0tLSBhL3NjcmlwdHMvYmFzaWMvTWFrZWZpbGUKKysrIGIvc2NyaXB0cy9iYXNpYy9NYWtlZmlsZQpAQCAtOSw3ICs5LDcgQEAKICMgZml4ZGVwOiAJIFVzZWQgdG8gZ2VuZXJhdGUgZGVwZW5kZW5jeSBpbmZvcm1hdGlvbiBkdXJpbmcgYnVpbGQgcHJvY2VzcwogIyBkb2Nwcm9jOgkgVXNlZCBpbiBEb2N1bWVudGF0aW9uL0RvY0Jvb2sKIAotaG9zdHByb2dzLXkJOj0gZml4ZGVwIGRvY3Byb2MKK2hvc3Rwcm9ncy15CTo9IGZpeGRlcCBkb2Nwcm9jIGhhc2gKIGFsd2F5cwkJOj0gJChob3N0cHJvZ3MteSkKIAogIyBmaXhkZXAgaXMgbmVlZGVkIHRvIGNvbXBpbGUgb3RoZXIgaG9zdCBwcm9ncmFtcwpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9iYXNpYy9oYXNoLmMgYi9zY3JpcHRzL2Jhc2ljL2hhc2guYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMjk5YWQ3Ci0tLSAvZGV2L251bGwKKysrIGIvc2NyaXB0cy9iYXNpYy9oYXNoLmMKQEAgLTAsMCArMSw2NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBSZWQgSGF0LCBJbmMuLCBKYXNvbiBCYXJvbiA8amJhcm9uQHJlZGhhdC5jb20+CisgKgorICovCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorCisjZGVmaW5lIERZTkFNSUNfREVCVUdfSEFTSF9CSVRTIDYKKworc3RhdGljIGNvbnN0IGNoYXIgKnByb2dyYW07CisKK3N0YXRpYyB2b2lkIHVzYWdlKHZvaWQpCit7CisJcHJpbnRmKCJVc2FnZTogJXMgPGRqYjJ8cjU+IDxtb2RuYW1lPlxuIiwgcHJvZ3JhbSk7CisJZXhpdCgxKTsKK30KKworLyogZGpiMiBoYXNoaW5nIGFsZ29yaXRobSBieSBEYW4gQmVybnN0ZWluLiBGcm9tOgorICogaHR0cDovL3d3dy5jc2UueW9ya3UuY2Evfm96L2hhc2guaHRtbAorICovCisKK3Vuc2lnbmVkIGludCBkamIyX2hhc2goY2hhciAqc3RyKQoreworCXVuc2lnbmVkIGxvbmcgaGFzaCA9IDUzODE7CisJaW50IGM7CisKKwljID0gKnN0cjsKKwl3aGlsZSAoYykgeworCQloYXNoID0gKChoYXNoIDw8IDUpICsgaGFzaCkgKyBjOworCQljID0gKisrc3RyOworCX0KKwlyZXR1cm4gKHVuc2lnbmVkIGludCkoaGFzaCAmICgoMSA8PCBEWU5BTUlDX0RFQlVHX0hBU0hfQklUUykgLSAxKSk7Cit9CisKK3Vuc2lnbmVkIGludCByNV9oYXNoKGNoYXIgKnN0cikKK3sKKwl1bnNpZ25lZCBsb25nIGhhc2ggPSAwOworCWludCBjOworCisJYyA9ICpzdHI7CisJd2hpbGUgKGMpIHsKKwkJaGFzaCA9IChoYXNoICsgKGMgPDwgNCkgKyAoYyA+PiA0KSkgKiAxMTsKKwkJYyA9ICorK3N0cjsKKwl9CisJcmV0dXJuICh1bnNpZ25lZCBpbnQpKGhhc2ggJiAoKDEgPDwgRFlOQU1JQ19ERUJVR19IQVNIX0JJVFMpIC0gMSkpOworfQorCitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworCXByb2dyYW0gPSBhcmd2WzBdOworCisJaWYgKGFyZ2MgIT0gMykKKwkJdXNhZ2UoKTsKKwlpZiAoIXN0cmNtcChhcmd2WzFdLCAiZGpiMiIpKQorCQlwcmludGYoIiVkXG4iLCBkamIyX2hhc2goYXJndlsyXSkpOworCWVsc2UgaWYgKCFzdHJjbXAoYXJndlsxXSwgInI1IikpCisJCXByaW50ZigiJWRcbiIsIHI1X2hhc2goYXJndlsyXSkpOworCWVsc2UKKwkJdXNhZ2UoKTsKKwlleGl0KDApOworfQorCmRpZmYgLS1naXQgYS9zY3JpcHRzL2Jvb3RncmFwaC5wbCBiL3NjcmlwdHMvYm9vdGdyYXBoLnBsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIyNDMzNTMKLS0tIC9kZXYvbnVsbAorKysgYi9zY3JpcHRzL2Jvb3RncmFwaC5wbApAQCAtMCwwICsxLDE0NyBAQAorIyEvdXNyL2Jpbi9wZXJsCisKKyMgQ29weXJpZ2h0IDIwMDgsIEludGVsIENvcnBvcmF0aW9uCisjCisjIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBMaW51eCBrZXJuZWwKKyMKKyMgVGhpcyBwcm9ncmFtIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorIyB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UuCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorIyBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyMgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtIGluIGEgZmlsZSBuYW1lZCBDT1BZSU5HOyBpZiBub3QsIHdyaXRlIHRvIHRoZQorIyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisjIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EKKyMKKyMgQXV0aG9yczoKKyMgCUFyamFuIHZhbiBkZSBWZW4gPGFyamFuQGxpbnV4LmludGVsLmNvbT4KKworCisjCisjIFRoaXMgc2NyaXB0IHR1cm5zIGEgZG1lc2cgb3V0cHV0IGludG8gYSBTVkcgZ3JhcGhpYyB0aGF0IHNob3dzIHdoaWNoCisjIGZ1bmN0aW9ucyB0YWtlIGhvdyBtdWNoIHRpbWUuIFlvdSBjYW4gdmlldyBTVkcgZ3JhcGhpY3Mgd2l0aCB2YXJpb3VzCisjIHByb2dyYW1zLCBpbmNsdWRpbmcgSW5rc2NhcGUsIFRoZSBHaW1wIGFuZCBGaXJlZm94LgorIworIworIyBGb3IgdGhpcyBzY3JpcHQgdG8gd29yaywgdGhlIGtlcm5lbCBuZWVkcyB0byBiZSBjb21waWxlZCB3aXRoIHRoZQorIyBDT05GSUdfUFJJTlRLX1RJTUUgY29uZmlndXJhdGlvbiBvcHRpb24gZW5hYmxlZCwgYW5kIHdpdGgKKyMgImluaXRjYWxsX2RlYnVnIiBwYXNzZWQgb24gdGhlIGtlcm5lbCBjb21tYW5kIGxpbmUuCisjCisjIHVzYWdlOgorIyAJZG1lc2cgfCBwZXJsIHNjcmlwdHMvYm9vdGdyYXBoLnBsID4gb3V0cHV0LnN2ZworIworCitteSBAcm93czsKK215ICVzdGFydCwgJWVuZCwgJXJvdzsKK215ICRkb25lID0gMDsKK215ICRyb3djb3VudCA9IDA7CitteSAkbWF4dGltZSA9IDA7CitteSAkZmlyc3R0aW1lID0gMTAwOworbXkgJGNvdW50ID0gMDsKK3doaWxlICg8PikgeworCW15ICRsaW5lID0gJF87CisJaWYgKCRsaW5lID1+IC8oWzAtOVwuXSspXF0gY2FsbGluZyAgKFthLXpBLVowLTlcX10rKVwrLykgeworCQlteSAkZnVuYyA9ICQyOworCQlpZiAoJGRvbmUgPT0gMCkgeworCQkJJHN0YXJ0eyRmdW5jfSA9ICQxOworCQkJaWYgKCQxIDwgJGZpcnN0dGltZSkgeworCQkJCSRmaXJzdHRpbWUgPSAkMTsKKwkJCX0KKwkJfQorCQkkcm93eyRmdW5jfSA9IDE7CisJCWlmICgkbGluZSA9fiAvXEAgKFswLTldKykvKSB7CisJCQlteSAkcGlkID0gJDE7CisJCQlpZiAoIWRlZmluZWQoJHJvd3NbJHBpZF0pKSB7CisJCQkJJHJvd2NvdW50ID0gJHJvd2NvdW50ICsgMTsKKwkJCQkkcm93c1skcGlkXSA9ICRyb3djb3VudDsKKwkJCX0KKwkJCSRyb3d7JGZ1bmN9ID0gJHJvd3NbJHBpZF07CisJCX0KKwkJJGNvdW50ID0gJGNvdW50ICsgMTsKKwl9CisKKwlpZiAoJGxpbmUgPX4gLyhbMC05XC5dKylcXSBpbml0Y2FsbCAoW2EtekEtWjAtOVxfXSspXCsuKnJldHVybmVkLykgeworCQlpZiAoJGRvbmUgPT0gMCkgeworCQkJJGVuZHskMn0gPSAkMTsKKwkJCSRtYXh0aW1lID0gJDE7CisJCX0KKwl9CisJaWYgKCRsaW5lID1+IC9Xcml0ZSBwcm90ZWN0aW5nIHRoZS8pIHsKKwkJJGRvbmUgPSAxOworCX0KKwlpZiAoJGxpbmUgPX4gL0ZyZWVpbmcgdW51c2VkIGtlcm5lbCBtZW1vcnkvKSB7CisJCSRkb25lID0gMTsKKwl9Cit9CisKK2lmICgkY291bnQgPT0gMCkgeworCXByaW50ICJObyBkYXRhIGZvdW5kIGluIHRoZSBkbWVzZy4gTWFrZSBzdXJlIHRoYXQgJ3ByaW50ay50aW1lPTEnIGFuZFxuIjsKKwlwcmludCAiJ2luaXRjYWxsX2RlYnVnJyBhcmUgcGFzc2VkIG9uIHRoZSBrZXJuZWwgY29tbWFuZCBsaW5lLlxuXG4iOworCXByaW50ICJVc2FnZTogXG4iOworCXByaW50ICIgICAgICBkbWVzZyB8IHBlcmwgc2NyaXB0cy9ib290Z3JhcGgucGwgPiBvdXRwdXQuc3ZnXG5cbiI7CisJZXhpdDsKK30KKworcHJpbnQgIjw/eG1sIHZlcnNpb249XCIxLjBcIiBzdGFuZGFsb25lPVwibm9cIj8+IFxuIjsKK3ByaW50ICI8c3ZnIHdpZHRoPVwiMTAwMFwiIGhlaWdodD1cIjEwMCVcIiB2ZXJzaW9uPVwiMS4xXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxuIjsKKworbXkgQHN0eWxlczsKKworJHN0eWxlc1swXSA9ICJmaWxsOnJnYigwLDAsMjU1KTtmaWxsLW9wYWNpdHk6MC41O3N0cm9rZS13aWR0aDoxO3N0cm9rZTpyZ2IoMCwwLDApIjsKKyRzdHlsZXNbMV0gPSAiZmlsbDpyZ2IoMCwyNTUsMCk7ZmlsbC1vcGFjaXR5OjAuNTtzdHJva2Utd2lkdGg6MTtzdHJva2U6cmdiKDAsMCwwKSI7Ciskc3R5bGVzWzJdID0gImZpbGw6cmdiKDI1NSwwLDIwKTtmaWxsLW9wYWNpdHk6MC41O3N0cm9rZS13aWR0aDoxO3N0cm9rZTpyZ2IoMCwwLDApIjsKKyRzdHlsZXNbM10gPSAiZmlsbDpyZ2IoMjU1LDI1NSwyMCk7ZmlsbC1vcGFjaXR5OjAuNTtzdHJva2Utd2lkdGg6MTtzdHJva2U6cmdiKDAsMCwwKSI7Ciskc3R5bGVzWzRdID0gImZpbGw6cmdiKDI1NSwwLDI1NSk7ZmlsbC1vcGFjaXR5OjAuNTtzdHJva2Utd2lkdGg6MTtzdHJva2U6cmdiKDAsMCwwKSI7Ciskc3R5bGVzWzVdID0gImZpbGw6cmdiKDAsMjU1LDI1NSk7ZmlsbC1vcGFjaXR5OjAuNTtzdHJva2Utd2lkdGg6MTtzdHJva2U6cmdiKDAsMCwwKSI7Ciskc3R5bGVzWzZdID0gImZpbGw6cmdiKDAsMTI4LDI1NSk7ZmlsbC1vcGFjaXR5OjAuNTtzdHJva2Utd2lkdGg6MTtzdHJva2U6cmdiKDAsMCwwKSI7Ciskc3R5bGVzWzddID0gImZpbGw6cmdiKDAsMjU1LDEyOCk7ZmlsbC1vcGFjaXR5OjAuNTtzdHJva2Utd2lkdGg6MTtzdHJva2U6cmdiKDAsMCwwKSI7Ciskc3R5bGVzWzhdID0gImZpbGw6cmdiKDI1NSwwLDEyOCk7ZmlsbC1vcGFjaXR5OjAuNTtzdHJva2Utd2lkdGg6MTtzdHJva2U6cmdiKDAsMCwwKSI7Ciskc3R5bGVzWzldID0gImZpbGw6cmdiKDI1NSwyNTUsMTI4KTtmaWxsLW9wYWNpdHk6MC41O3N0cm9rZS13aWR0aDoxO3N0cm9rZTpyZ2IoMCwwLDApIjsKKyRzdHlsZXNbMTBdID0gImZpbGw6cmdiKDI1NSwxMjgsMjU1KTtmaWxsLW9wYWNpdHk6MC41O3N0cm9rZS13aWR0aDoxO3N0cm9rZTpyZ2IoMCwwLDApIjsKKyRzdHlsZXNbMTFdID0gImZpbGw6cmdiKDEyOCwyNTUsMjU1KTtmaWxsLW9wYWNpdHk6MC41O3N0cm9rZS13aWR0aDoxO3N0cm9rZTpyZ2IoMCwwLDApIjsKKworbXkgJG11bHQgPSA5NTAuMCAvICgkbWF4dGltZSAtICRmaXJzdHRpbWUpOworbXkgJHRocmVzaG9sZCA9ICgkbWF4dGltZSAtICRmaXJzdHRpbWUpIC8gNjAuMDsKK215ICRzdHlsZWNvdW50ZXIgPSAwOword2hpbGUgKCgka2V5LCR2YWx1ZSkgPSBlYWNoICVzdGFydCkgeworCW15ICRkdXJhdGlvbiA9ICRlbmR7JGtleX0gLSAkc3RhcnR7JGtleX07CisKKwlpZiAoJGR1cmF0aW9uID49ICR0aHJlc2hvbGQpIHsKKwkJbXkgJHMsICRzMiwgJGUsICR5OworCQkkcyA9ICgkdmFsdWUgLSAkZmlyc3R0aW1lKSAqICRtdWx0OworCQkkczIgPSAkcyArIDY7CisJCSRlID0gKCRlbmR7JGtleX0gLSAkZmlyc3R0aW1lKSAqICRtdWx0OworCQkkdyA9ICRlIC0gJHM7CisKKwkJJHkgPSAkcm93eyRrZXl9ICogMTUwOworCQkkeTIgPSAkeSArIDQ7CisKKwkJJHN0eWxlID0gJHN0eWxlc1skc3R5bGVjb3VudGVyXTsKKwkJJHN0eWxlY291bnRlciA9ICRzdHlsZWNvdW50ZXIgKyAxOworCQlpZiAoJHN0eWxlY291bnRlciA+IDExKSB7CisJCQkkc3R5bGVjb3VudGVyID0gMDsKKwkJfTsKKworCQlwcmludCAiPHJlY3QgeD1cIiRzXCIgd2lkdGg9XCIkd1wiIHk9XCIkeVwiIGhlaWdodD1cIjE0NVwiIHN0eWxlPVwiJHN0eWxlXCIvPlxuIjsKKwkJcHJpbnQgIjx0ZXh0IHRyYW5zZm9ybT1cInRyYW5zbGF0ZSgkczIsJHkyKSByb3RhdGUoOTApXCI+JGtleTwvdGV4dD5cbiI7CisJfQorfQorCisKKyMgcHJpbnQgdGhlIHRpbWUgbGluZSBvbiB0b3AKK215ICR0aW1lID0gJGZpcnN0dGltZTsKK215ICRzdGVwID0gKCRtYXh0aW1lIC0gJGZpcnN0dGltZSkgLyAxNTsKK3doaWxlICgkdGltZSA8ICRtYXh0aW1lKSB7CisJbXkgJHMyID0gKCR0aW1lIC0gJGZpcnN0dGltZSkgKiAkbXVsdDsKKwlteSAkdG0gPSBpbnQoJHRpbWUgKiAxMDApIC8gMTAwLjA7CisJcHJpbnQgIjx0ZXh0IHRyYW5zZm9ybT1cInRyYW5zbGF0ZSgkczIsODkpIHJvdGF0ZSg5MClcIj4kdG08L3RleHQ+XG4iOworCSR0aW1lID0gJHRpbWUgKyAkc3RlcDsKK30KKworcHJpbnQgIjwvc3ZnPlxuIjsKZGlmZiAtLWdpdCBhL3NjcmlwdHMvY2hlY2twYXRjaC5wbCBiL3NjcmlwdHMvY2hlY2twYXRjaC5wbAppbmRleCBiYzY3NzkzLi5mODhiYjNlIDEwMDc1NQotLS0gYS9zY3JpcHRzL2NoZWNrcGF0Y2gucGwKKysrIGIvc2NyaXB0cy9jaGVja3BhdGNoLnBsCkBAIC0xLDUgKzEsNSBAQAogIyEvdXNyL2Jpbi9wZXJsIC13Ci0jIChjKSAyMDAxLCBEYXZlIEpvbmVzLiA8ZGF2ZWpAY29kZW1vbmtleS5vcmcudWs+ICh0aGUgZmlsZSBoYW5kbGluZyBiaXQpCisjIChjKSAyMDAxLCBEYXZlIEpvbmVzLiA8ZGF2ZWpAcmVkaGF0LmNvbT4gKHRoZSBmaWxlIGhhbmRsaW5nIGJpdCkKICMgKGMpIDIwMDUsIEpvZWwgU2Nob3BwIDxqc2Nob3BwQGF1c3Rpbi5pYm0uY29tPiAodGhlIHVnbHkgYml0KQogIyAoYykgMjAwNywgQW5keSBXaGl0Y3JvZnQgPGFwd0B1ay5pYm0uY29tPiAobmV3IGNvbmRpdGlvbnMsIHRlc3Qgc3VpdGUsIGV0YykKICMgTGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR1BMIExpY2Vuc2UgdmVyc2lvbiAyCkBAIC05LDcgKzksNyBAQAogbXkgJFAgPSAkMDsKICRQID1+IHNALiovQEBnOwogCi1teSAkViA9ICcwLjIxJzsKK215ICRWID0gJzAuMjQnOwogCiB1c2UgR2V0b3B0OjpMb25nIHF3KDpjb25maWcgbm9fYXV0b19hYmJyZXYpOwogCkBAIC02Niw2ICs2Niw3IEBACiBteSAkZGJnX3ZhbHVlcyA9IDA7CiBteSAkZGJnX3Bvc3NpYmxlID0gMDsKIG15ICRkYmdfdHlwZSA9IDA7CitteSAkZGJnX2F0dHIgPSAwOwogZm9yIG15ICRrZXkgKGtleXMgJWRlYnVnKSB7CiAJZXZhbCAiXCR7ZGJnXyRrZXl9ID0gJyRkZWJ1Z3ska2V5fSc7IgogfQpAQCAtMTEyLDcgKzExMywxMCBAQAogCQkJY29uc3R8CiAJCQlfX3JlYWRfbW9zdGx5fAogCQkJX19rcHJvYmVzfAotCQkJX18oPzptZW18Y3B1fGRldnwpKD86aW5pdGRhdGF8aW5pdCkKKwkJCV9fKD86bWVtfGNwdXxkZXZ8KSg/OmluaXRkYXRhfGluaXQpfAorCQkJX19fX2NhY2hlbGluZV9hbGlnbmVkfAorCQkJX19fX2NhY2hlbGluZV9hbGlnbmVkX2luX3NtcHwKKwkJCV9fX19jYWNoZWxpbmVfaW50ZXJub2RlYWxpZ25lZF9pbl9zbXAKIAkJICB9eDsKIG91ciAkTW9kaWZpZXI7CiBvdXIgJElubGluZQk9IHFye2lubGluZXxfX2Fsd2F5c19pbmxpbmV8bm9pbmxpbmV9OwpAQCAtMTQyLDYgKzE0NiwxMSBAQAogCXwgIFx4RjRbXHg4MC1ceDhGXVtceDgwLVx4QkZdezJ9ICAgICAjIHBsYW5lIDE2CiB9eDsKIAorb3VyICR0eXBlVHlwZWRlZnMgPSBxcnsoP3g6CisJKD86X18pPyg/OnV8c3xiZXxsZSkoPzpcZHxcZFxkKXwKKwlhdG9taWNfdAorKX07CisKIG91ciBAdHlwZUxpc3QgPSAoCiAJcXJ7dm9pZH0sCiAJcXJ7KD86dW5zaWduZWRccyspP2NoYXJ9LApAQCAtMTU1LDcgKzE2NCw2IEBACiAJcXJ7ZmxvYXR9LAogCXFye2RvdWJsZX0sCiAJcXJ7Ym9vbH0sCi0JcXJ7KD86X18pPyg/OnV8c3xiZXxsZSkoPzo4fDE2fDMyfDY0KX0sCiAJcXJ7c3RydWN0XHMrJElkZW50fSwKIAlxcnt1bmlvblxzKyRJZGVudH0sCiAJcXJ7ZW51bVxzKyRJZGVudH0sCkBAIC0xNzUsNiArMTgzLDcgQEAKIAkJCSg/OiRNb2RpZmllclxzK3xjb25zdFxzKykqCiAJCQkoPzoKIAkJCQkoPzp0eXBlb2Z8X190eXBlb2ZfXylccypcKFxzKlwqKlxzKiRJZGVudFxzKlwpfAorCQkJCSg/OiR0eXBlVHlwZWRlZnNcYil8CiAJCQkJKD86JHthbGx9XGIpCiAJCQkpCiAJCQkoPzpccyskTW9kaWZpZXJ8XHMrY29uc3QpKgpAQCAtMzMxLDcgKzM0MCw3IEBACiAJCQkkb2ZmKys7CiAJCQluZXh0OwogCQl9Ci0JCWlmIChzdWJzdHIoJGxpbmUsICRvZmYsIDIpIGVxICcqLycpIHsKKwkJaWYgKCRzYW5pdGlzZV9xdW90ZSBlcSAnKi8nICYmIHN1YnN0cigkbGluZSwgJG9mZiwgMikgZXEgJyovJykgewogCQkJJHNhbml0aXNlX3F1b3RlID0gJyc7CiAJCQlzdWJzdHIoJHJlcywgJG9mZiwgMiwgIiQ7JDsiKTsKIAkJCSRvZmYrKzsKQEAgLTQwNCw2ICs0MTMsNyBAQAogCQkjIGNvbnRleHQuCiAJCWlmICgkb2ZmID49ICRsZW4pIHsKIAkJCWZvciAoOyAkcmVtYWluID4gMDsgJGxpbmUrKykgeworCQkJCWxhc3QgaWYgKCFkZWZpbmVkICRsaW5lc1skbGluZV0pOwogCQkJCW5leHQgaWYgKCRsaW5lc1skbGluZV0gPX4gL14tLyk7CiAJCQkJJHJlbWFpbi0tOwogCQkJCSRsb2ZmID0gJGxlbjsKQEAgLTY2OSw2ICs2NzksMjIgQEAKIAlyZXR1cm4gKCRjbXQgbmUgJycpOwogfQogCitzdWIgcmF3X2xpbmUgeworCW15ICgkbGluZW5yLCAkY250KSA9IEBfOworCisJbXkgJG9mZnNldCA9ICRsaW5lbnIgLSAxOworCSRjbnQrKzsKKworCW15ICRsaW5lOworCXdoaWxlICgkY250KSB7CisJCSRsaW5lID0gJHJhd2xpbmVzWyRvZmZzZXQrK107CisJCW5leHQgaWYgKGRlZmluZWQoJGxpbmUpICYmICRsaW5lID1+IC9eLS8pOworCQkkY250LS07CisJfQorCisJcmV0dXJuICRsaW5lOworfQorCiBzdWIgY2F0X3ZldCB7CiAJbXkgKCR2ZXQpID0gQF87CiAJbXkgKCRyZXMsICRjb2RlZCk7CkBAIC03ODIsOSArODA4LDkgQEAKIAkJCX0KIAkJCSR0eXBlID0gJ04nOwogCi0JCX0gZWxzaWYgKCRjdXIgPX4gL14oaWZ8d2hpbGV8dHlwZW9mfF9fdHlwZW9mX198Zm9yKVxiL28pIHsKKwkJfSBlbHNpZiAoJGN1ciA9fiAvXihpZnx3aGlsZXxmb3IpXGIvbykgewogCQkJcHJpbnQgIkNPTkQoJDEpXG4iIGlmICgkZGJnX3ZhbHVlcyA+IDEpOwotCQkJJGF2X3BlbmRpbmcgPSAnTic7CisJCQkkYXZfcGVuZGluZyA9ICdFJzsKIAkJCSR0eXBlID0gJ04nOwogCiAJCX0gZWxzaWYgKCRjdXIgPX4vXihjYXNlKS9vKSB7CkBAIC03OTIsNyArODE4LDcgQEAKIAkJCSRhdl9wZW5kX2NvbG9uID0gJ0MnOwogCQkJJHR5cGUgPSAnTic7CiAKLQkJfSBlbHNpZiAoJGN1ciA9fi9eKHJldHVybnxlbHNlfGdvdG8pL28pIHsKKwkJfSBlbHNpZiAoJGN1ciA9fi9eKHJldHVybnxlbHNlfGdvdG98dHlwZW9mfF9fdHlwZW9mX18pXGIvbykgewogCQkJcHJpbnQgIktFWVdPUkQoJDEpXG4iIGlmICgkZGJnX3ZhbHVlcyA+IDEpOwogCQkJJHR5cGUgPSAnTic7CiAKQEAgLTg1OCw3ICs4ODQsNyBAQAogCQkJcHJpbnQgIkNMT1NFKCQxKVxuIiBpZiAoJGRiZ192YWx1ZXMgPiAxKTsKIAkJCSR0eXBlID0gJ04nOwogCi0JCX0gZWxzaWYgKCRjdXIgPX4gL14oLSg/IVstPl0pfFwrKD8hXCspfFwqfFwmKD8hXCYpKS9vKSB7CisJCX0gZWxzaWYgKCRjdXIgPX4gL14oLSg/IVstPl0pfFwrKD8hXCspfFwqfFwmXCZ8XCYpL28pIHsKIAkJCW15ICR2YXJpYW50OwogCiAJCQlwcmludCAiT1BWKCQxKVxuIiBpZiAoJGRiZ192YWx1ZXMgPiAxKTsKQEAgLTg5MiwxMiArOTE4LDIyIEBACiBzdWIgcG9zc2libGUgewogCW15ICgkcG9zc2libGUsICRsaW5lKSA9IEBfOwogCi0JcHJpbnQgIkNIRUNLPCRwb3NzaWJsZT4gKCRsaW5lKVxuIiBpZiAoJGRiZ19wb3NzaWJsZSA+IDEpOwotCWlmICgkcG9zc2libGUgIX4gL14oPzokTW9kaWZpZXJ8JFN0b3JhZ2V8JFR5cGV8REVGSU5FX1xTKykkLyAmJgotCSAgICAkcG9zc2libGUgbmUgJ2dvdG8nICYmICRwb3NzaWJsZSBuZSAncmV0dXJuJyAmJgotCSAgICAkcG9zc2libGUgbmUgJ2Nhc2UnICYmICRwb3NzaWJsZSBuZSAnZWxzZScgJiYKLQkgICAgJHBvc3NpYmxlIG5lICdhc20nICYmICRwb3NzaWJsZSBuZSAnX19hc21fXycgJiYKLQkgICAgJHBvc3NpYmxlICF+IC9eKHR5cGVkZWZ8c3RydWN0fGVudW0pXGIvKSB7CisJcHJpbnQgIkNIRUNLPCRwb3NzaWJsZT4gKCRsaW5lKVxuIiBpZiAoJGRiZ19wb3NzaWJsZSA+IDIpOworCWlmICgkcG9zc2libGUgIX4gLyg/OgorCQleKD86CisJCQkkTW9kaWZpZXJ8CisJCQkkU3RvcmFnZXwKKwkJCSRUeXBlfAorCQkJREVGSU5FX1xTK3wKKwkJCWdvdG98CisJCQlyZXR1cm58CisJCQljYXNlfAorCQkJZWxzZXwKKwkJCWFzbXxfX2FzbV9ffAorCQkJZG8KKwkJKSR8CisJCV4oPzp0eXBlZGVmfHN0cnVjdHxlbnVtKVxiCisJICAgICkveCkgewogCQkjIENoZWNrIGZvciBtb2RpZmllcnMuCiAJCSRwb3NzaWJsZSA9fiBzL1xzKiRTdG9yYWdlXHMqLy9nOwogCQkkcG9zc2libGUgPX4gcy9ccyokU3BhcnNlXHMqLy9nOwpAQCAtOTE1LDYgKzk1MSw4IEBACiAJCQlwdXNoKEB0eXBlTGlzdCwgJHBvc3NpYmxlKTsKIAkJfQogCQlidWlsZF90eXBlcygpOworCX0gZWxzZSB7CisJCXdhcm4gIk5PVFBPU1M6ICRwb3NzaWJsZSAoJGxpbmUpXG4iIGlmICgkZGJnX3Bvc3NpYmxlID4gMSk7CiAJfQogfQogCkBAIC05NTQsNiArOTkyLDMzIEBACiAJfQogfQogCitzdWIgY2hlY2tfYWJzb2x1dGVfZmlsZSB7CisJbXkgKCRhYnNvbHV0ZSwgJGhlcmVjdXJyKSA9IEBfOworCW15ICRmaWxlID0gJGFic29sdXRlOworCisJIyNwcmludCAiYWJzb2x1dGU8JGFic29sdXRlPlxuIjsKKworCSMgU2VlIGlmIGFueSBzdWZmaXggb2YgdGhpcyBwYXRoIGlzIGEgcGF0aCB3aXRoaW4gdGhlIHRyZWUuCisJd2hpbGUgKCRmaWxlID1+IHNAXlteL10qL0BAKSB7CisJCWlmICgtZiAiJHJvb3QvJGZpbGUiKSB7CisJCQkjI3ByaW50ICJmaWxlPCRmaWxlPlxuIjsKKwkJCWxhc3Q7CisJCX0KKwl9CisJaWYgKCEgLWYgXykgIHsKKwkJcmV0dXJuIDA7CisJfQorCisJIyBJdCBpcywgc28gc2VlIGlmIHRoZSBwcmVmaXggaXMgYWNjZXB0YWJsZS4KKwlteSAkcHJlZml4ID0gJGFic29sdXRlOworCXN1YnN0cigkcHJlZml4LCAtbGVuZ3RoKCRmaWxlKSkgPSAnJzsKKworCSMjcHJpbnQgInByZWZpeDwkcHJlZml4PlxuIjsKKwlpZiAoJHByZWZpeCBuZSAiLi4uLyIpIHsKKwkJV0FSTigidXNlIHJlbGF0aXZlIHBhdGhuYW1lIGluc3RlYWQgb2YgYWJzb2x1dGUgaW4gY2hhbmdlbG9nIHRleHRcbiIgLiAkaGVyZWN1cnIpOworCX0KK30KKwogc3ViIHByb2Nlc3MgewogCW15ICRmaWxlbmFtZSA9IHNoaWZ0OwogCkBAIC05OTEsNiArMTA1Niw3IEBACiAKIAkjIHN1cHByZXNzaW9uIGZsYWdzCiAJbXkgJXN1cHByZXNzX2lmYnJhY2VzOworCW15ICVzdXBwcmVzc193aGlsZXRyYWlsZXJzOwogCiAJIyBQcmUtc2NhbiB0aGUgcGF0Y2ggc2FuaXRpemluZyB0aGUgbGluZXMuCiAJIyBQcmUtc2NhbiB0aGUgcGF0Y2ggbG9va2luZyBmb3IgYW55IF9fc2V0dXAgZG9jdW1lbnRhdGlvbi4KQEAgLTEwMjUsOSArMTA5MSwxNCBAQAogCQkJIyBlZGdlIGlzIGEgY2xvc2UgY29tbWVudCB0aGVuIHdlIG11c3QgYmUgaW4gYSBjb21tZW50CiAJCQkjIGF0IGNvbnRleHQgc3RhcnQuCiAJCQlteSAkZWRnZTsKLQkJCWZvciAobXkgJGxuID0gJGxpbmVuciArIDE7ICRsbiA8ICgkbGluZW5yICsgJHJlYWxjbnQpOyAkbG4rKykgewotCQkJCW5leHQgaWYgKCRsaW5lID1+IC9eLS8pOwotCQkJCSgkZWRnZSkgPSAoJHJhd2xpbmVzWyRsbiAtIDFdID1+IG1AKC9cKnxcKi8pQCk7CisJCQlteSAkY250ID0gJHJlYWxjbnQ7CisJCQlmb3IgKG15ICRsbiA9ICRsaW5lbnIgKyAxOyAkY250ID4gMDsgJGxuKyspIHsKKwkJCQluZXh0IGlmIChkZWZpbmVkICRyYXdsaW5lc1skbG4gLSAxXSAmJgorCQkJCQkgJHJhd2xpbmVzWyRsbiAtIDFdID1+IC9eLS8pOworCQkJCSRjbnQtLTsKKwkJCQkjcHJpbnQgIlJBVzwkcmF3bGluZXNbJGxuIC0gMV0+XG4iOworCQkJCSgkZWRnZSkgPSAoZGVmaW5lZCAkcmF3bGluZXNbJGxuIC0gMV0gJiYKKwkJCQkJJHJhd2xpbmVzWyRsbiAtIDFdID1+IG1AKC9cKnxcKi8pQCk7CiAJCQkJbGFzdCBpZiAoZGVmaW5lZCAkZWRnZSk7CiAJCQl9CiAJCQlpZiAoZGVmaW5lZCAkZWRnZSAmJiAkZWRnZSBlcSAnKi8nKSB7CkBAIC0xMDc1LDYgKzExNDYsNyBAQAogCQkkbGluZW5yKys7CiAKIAkJbXkgJHJhd2xpbmUgPSAkcmF3bGluZXNbJGxpbmVuciAtIDFdOworCQlteSAkaHVua19saW5lID0gKCRyZWFsY250ICE9IDApOwogCiAjZXh0cmFjdCB0aGUgbGluZSByYW5nZSBpbiB0aGUgZmlsZSBhZnRlciB0aGUgcGF0Y2ggaXMgYXBwbGllZAogCQlpZiAoJGxpbmU9fi9eXEBcQCAtXGQrKD86LFxkKyk/IFwrKFxkKykoLChcZCspKT8gXEBcQC8pIHsKQEAgLTEwOTAsNiArMTE2Miw3IEBACiAJCQkkcHJldl92YWx1ZXMgPSAnRSc7CiAKIAkJCSVzdXBwcmVzc19pZmJyYWNlcyA9ICgpOworCQkJJXN1cHByZXNzX3doaWxldHJhaWxlcnMgPSAoKTsKIAkJCW5leHQ7CiAKICMgdHJhY2sgdGhlIGxpbmUgbnVtYmVyIGFzIHdlIG1vdmUgdGhyb3VnaCB0aGUgaHVuaywgbm90ZSB0aGF0CkBAIC0xMTI1LDcgKzExOTgsNyBAQAogCQkJJHJlYWxmaWxlID0gJDE7CiAJCQkkcmVhbGZpbGUgPX4gc0BeW14vXSovQEA7CiAKLQkJCWlmICgkcmVhbGZpbGUgPX4gbUBpbmNsdWRlL2FzbS9AKSB7CisJCQlpZiAoJHJlYWxmaWxlID1+IG1AXmluY2x1ZGUvYXNtL0ApIHsKIAkJCQlFUlJPUigiZG8gbm90IG1vZGlmeSBmaWxlcyBpbiBpbmNsdWRlL2FzbSwgY2hhbmdlIGFyY2hpdGVjdHVyZSBzcGVjaWZpYyBmaWxlcyBpbiBpbmNsdWRlL2FzbS08YXJjaGl0ZWN0dXJlPlxuIiAuICIkaGVyZSRyYXdsaW5lXG4iKTsKIAkJCX0KIAkJCW5leHQ7CkBAIC0xMTU5LDYgKzEyMzIsMjAgQEAKIAkJCQkkaGVyZWN1cnIpIGlmICghJGVtaXR0ZWRfY29ycnVwdCsrKTsKIAkJfQogCisjIENoZWNrIGZvciBhYnNvbHV0ZSBrZXJuZWwgcGF0aHMuCisJCWlmICgkdHJlZSkgeworCQkJd2hpbGUgKCRsaW5lID1+IG17KD86XnxccykoL1xTKil9ZykgeworCQkJCW15ICRmaWxlID0gJDE7CisKKwkJCQlpZiAoJGZpbGUgPX4gbXteKC4qPykoPzo6XGQrKSs6PyR9ICYmCisJCQkJICAgIGNoZWNrX2Fic29sdXRlX2ZpbGUoJDEsICRoZXJlY3VycikpIHsKKwkJCQkJIworCQkJCX0gZWxzZSB7CisJCQkJCWNoZWNrX2Fic29sdXRlX2ZpbGUoJGZpbGUsICRoZXJlY3Vycik7CisJCQkJfQorCQkJfQorCQl9CisKICMgVVRGLTggcmVnZXggZm91bmQgYXQgaHR0cDovL3d3dy53My5vcmcvSW50ZXJuYXRpb25hbC9xdWVzdGlvbnMvcWEtZm9ybXMtdXRmLTguZW4ucGhwCiAJCWlmICgoJHJlYWxmaWxlID1+IC9eJC8gfHwgJGxpbmUgPX4gL15cKy8pICYmCiAJCSAgICAkcmF3bGluZSAhfiBtL14kVVRGOCokLykgewpAQCAtMTE3MSwxMSArMTI1OCw4IEBACiAJCQlFUlJPUigiSW52YWxpZCBVVEYtOCwgcGF0Y2ggYW5kIGNvbW1pdCBtZXNzYWdlIHNob3VsZCBiZSBlbmNvZGVkIGluIFVURi04XG4iIC4gJGhlcmVwdHIpOwogCQl9CiAKLSNpZ25vcmUgbGluZXMgYmVpbmcgcmVtb3ZlZAotCQlpZiAoJGxpbmU9fi9eLS8pIHtuZXh0O30KLQotIyBjaGVjayB3ZSBhcmUgaW4gYSB2YWxpZCBzb3VyY2UgZmlsZSBpZiBub3QgdGhlbiBpZ25vcmUgdGhpcyBodW5rCi0JCW5leHQgaWYgKCRyZWFsZmlsZSAhfiAvXC4oaHxjfHN8U3xwbHxzaCkkLyk7CisjIGlnbm9yZSBub24taHVuayBsaW5lcyBhbmQgbGluZXMgYmVpbmcgcmVtb3ZlZAorCQluZXh0IGlmICghJGh1bmtfbGluZSB8fCAkbGluZSA9fiAvXi0vKTsKIAogI3RyYWlsaW5nIHdoaXRlc3BhY2UKIAkJaWYgKCRsaW5lID1+IC9eXCsuKlwwMTUvKSB7CkBAIC0xMTg2LDYgKzEyNzAsMTAgQEAKIAkJCW15ICRoZXJldmV0ID0gIiRoZXJlXG4iIC4gY2F0X3ZldCgkcmF3bGluZSkgLiAiXG4iOwogCQkJRVJST1IoInRyYWlsaW5nIHdoaXRlc3BhY2VcbiIgLiAkaGVyZXZldCk7CiAJCX0KKworIyBjaGVjayB3ZSBhcmUgaW4gYSB2YWxpZCBzb3VyY2UgZmlsZSBpZiBub3QgdGhlbiBpZ25vcmUgdGhpcyBodW5rCisJCW5leHQgaWYgKCRyZWFsZmlsZSAhfiAvXC4oaHxjfHN8U3xwbHxzaCkkLyk7CisKICM4MCBjb2x1bW4gbGltaXQKIAkJaWYgKCRsaW5lID1+IC9eXCsvICYmICRwcmV2cmF3bGluZSAhfiAvXC9cKlwqLyAmJgogCQkgICAgJHJhd2xpbmUgIX4gL14uXHMqXCpccypcQCRJZGVudFxzLyAmJgpAQCAtMTIwMCw4ICsxMjg4LDggQEAKIAkJCVdBUk4oImFkZGluZyBhIGxpbmUgd2l0aG91dCBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlXG4iIC4gJGhlcmVjdXJyKTsKIAkJfQogCi0jIGNoZWNrIHdlIGFyZSBpbiBhIHZhbGlkIHNvdXJjZSBmaWxlICouW2hjXSBpZiBub3QgdGhlbiBpZ25vcmUgdGhpcyBodW5rCi0JCW5leHQgaWYgKCRyZWFsZmlsZSAhfiAvXC5baGNdJC8pOworIyBjaGVjayB3ZSBhcmUgaW4gYSB2YWxpZCBzb3VyY2UgZmlsZSBDIG9yIHBlcmwgaWYgbm90IHRoZW4gaWdub3JlIHRoaXMgaHVuaworCQluZXh0IGlmICgkcmVhbGZpbGUgIX4gL1wuKGh8Y3xwbCkkLyk7CiAKICMgYXQgdGhlIGJlZ2lubmluZyBvZiBhIGxpbmUgYW55IHRhYnMgbXVzdCBjb21lIGZpcnN0IGFuZCBhbnl0aGluZwogIyBtb3JlIHRoYW4gOCBtdXN0IHVzZSB0YWJzLgpAQCAtMTIxMSwxNSArMTI5OSwxOCBAQAogCQkJRVJST1IoImNvZGUgaW5kZW50IHNob3VsZCB1c2UgdGFicyB3aGVyZSBwb3NzaWJsZVxuIiAuICRoZXJldmV0KTsKIAkJfQogCisjIGNoZWNrIHdlIGFyZSBpbiBhIHZhbGlkIEMgc291cmNlIGZpbGUgaWYgbm90IHRoZW4gaWdub3JlIHRoaXMgaHVuaworCQluZXh0IGlmICgkcmVhbGZpbGUgIX4gL1wuKGh8YykkLyk7CisKICMgY2hlY2sgZm9yIFJDUy9DVlMgcmV2aXNpb24gbWFya2VycwogCQlpZiAoJHJhd2xpbmUgPX4gL15cKy4qXCQoUmV2aXNpb258TG9nfElkKSg/OlwkfCkvKSB7CiAJCQlXQVJOKCJDVlMgc3R5bGUga2V5d29yZCBtYXJrZXJzLCB0aGVzZSB3aWxsIF9ub3RfIGJlIHVwZGF0ZWRcbiIuICRoZXJlY3Vycik7CiAJCX0KIAogIyBDaGVjayBmb3IgcG90ZW50aWFsICdiYXJlJyB0eXBlcwotCQlteSAoJHN0YXQsICRjb25kLCAkbGluZV9ucl9uZXh0LCAkcmVtYWluX25leHQpOworCQlteSAoJHN0YXQsICRjb25kLCAkbGluZV9ucl9uZXh0LCAkcmVtYWluX25leHQsICRvZmZfbmV4dCk7CiAJCWlmICgkcmVhbGNudCAmJiAkbGluZSA9fiAvLlxzKlxTLykgewotCQkJKCRzdGF0LCAkY29uZCwgJGxpbmVfbnJfbmV4dCwgJHJlbWFpbl9uZXh0KSA9CisJCQkoJHN0YXQsICRjb25kLCAkbGluZV9ucl9uZXh0LCAkcmVtYWluX25leHQsICRvZmZfbmV4dCkgPQogCQkJCWN0eF9zdGF0ZW1lbnRfYmxvY2soJGxpbmVuciwgJHJlYWxjbnQsIDApOwogCQkJJHN0YXQgPX4gcy9cbi4vXG4gL2c7CiAJCQkkY29uZCA9fiBzL1xuLi9cbiAvZzsKQEAgLTEyNDAsNyArMTMzMSw3IEBACiAJCQkJcG9zc2libGUoJHR5cGUsICJBOiIgLiAkcyk7CiAKIAkJCSMgZGVmaW5pdGlvbnMgaW4gZ2xvYmFsIHNjb3BlIGNhbiBvbmx5IHN0YXJ0IHdpdGggdHlwZXMKLQkJCX0gZWxzaWYgKCRzID1+IC9eLig/OiRTdG9yYWdlXHMrKT8oPzokSW5saW5lXHMrKT8oPzpjb25zdFxzKyk/KCRJZGVudClcYi9zKSB7CisJCQl9IGVsc2lmICgkcyA9fiAvXi4oPzokU3RvcmFnZVxzKyk/KD86JElubGluZVxzKyk/KD86Y29uc3RccyspPygkSWRlbnQpXGJccyooPyE6KS9zKSB7CiAJCQkJcG9zc2libGUoJDEsICJCOiIgLiAkcyk7CiAJCQl9CiAKQEAgLTEyOTQsMTAgKzEzODUsNiBAQAogCQkJCUVSUk9SKCJzd2l0Y2ggYW5kIGNhc2Ugc2hvdWxkIGJlIGF0IHRoZSBzYW1lIGluZGVudFxuJGhlcmVsaW5lJGVyciIpOwogCQkJfQogCQl9Ci0JCWlmICgkbGluZSA9fiAvXi5ccyooPzpjYXNlXHMqLip8ZGVmYXVsdFxzKik6L2cgJiYKLQkJICAgICRsaW5lICF+IC9cRyg/OlxzKnspPyg/OlxzKiQ7KikoPzpccypcXCk/XHMqJC9nKSB7Ci0JCQlFUlJPUigidHJhaWxpbmcgc3RhdGVtZW50cyBzaG91bGQgYmUgb24gbmV4dCBsaW5lXG4iIC4gJGhlcmVjdXJyKTsKLQkJfQogCiAjIGlmL3doaWxlL2V0YyBicmFjZSBkbyBub3QgZ28gb24gbmV4dCBsaW5lLCB1bmxlc3MgZGVmaW5pbmcgYSBkbyB3aGlsZSBsb29wLAogIyBvciBpZiB0aGF0IGJyYWNlIG9uIHRoZSBuZXh0IGxpbmUgaXMgZm9yIHNvbWV0aGluZyBlbHNlCkBAIC0xMzM4LDYgKzE0MjUsOTEgQEAKIAkJCX0KIAkJfQogCisjIENoZWNrIHJlbGF0aXZlIGluZGVudCBmb3IgY29uZGl0aW9uYWxzIGFuZCBibG9ja3MuCisJCWlmICgkbGluZSA9fiAvXGIoPzooPzppZnx3aGlsZXxmb3IpXHMqXCh8ZG9cYikvICYmICRsaW5lICF+IC9eLlxzKiMvICYmICRsaW5lICF+IC9cfVxzKndoaWxlXHMqLykgeworCQkJbXkgKCRzLCAkYykgPSAoJHN0YXQsICRjb25kKTsKKworCQkJc3Vic3RyKCRzLCAwLCBsZW5ndGgoJGMpLCAnJyk7CisKKwkJCSMgTWFrZSBzdXJlIHdlIHJlbW92ZSB0aGUgbGluZSBwcmVmaXhlcyBhcyB3ZSBoYXZlCisJCQkjIG5vbmUgb24gdGhlIGZpcnN0IGxpbmUsIGFuZCBhcmUgZ29pbmcgdG8gcmVhZGQgdGhlbQorCQkJIyB3aGVyZSBuZWNlc3NhcnkuCisJCQkkcyA9fiBzL1xuLi9cbi9nczsKKworCQkJIyBGaW5kIG91dCBob3cgbG9uZyB0aGUgY29uZGl0aW9uYWwgYWN0dWFsbHkgaXMuCisJCQlteSBAbmV3bGluZXMgPSAoJGMgPX4gL1xuL2dzKTsKKwkJCW15ICRjb25kX2xpbmVzID0gMSArICQjbmV3bGluZXM7CisKKwkJCSMgV2Ugd2FudCB0byBjaGVjayB0aGUgZmlyc3QgbGluZSBpbnNpZGUgdGhlIGJsb2NrCisJCQkjIHN0YXJ0aW5nIGF0IHRoZSBlbmQgb2YgdGhlIGNvbmRpdGlvbmFsLCBzbyByZW1vdmU6CisJCQkjICAxKSBhbnkgYmxhbmsgbGluZSB0ZXJtaW5hdGlvbgorCQkJIyAgMikgYW55IG9wZW5pbmcgYnJhY2UgeyBvbiBlbmQgb2YgdGhlIGxpbmUKKwkJCSMgIDMpIGFueSBkbyAoLi4uKSB7CisJCQlteSAkY29udGludWF0aW9uID0gMDsKKwkJCW15ICRjaGVjayA9IDA7CisJCQkkcyA9fiBzL14uKlxiZG9cYi8vOworCQkJJHMgPX4gcy9eXHMqey8vOworCQkJaWYgKCRzID1+IHMvXlxzKlxcLy8pIHsKKwkJCQkkY29udGludWF0aW9uID0gMTsKKwkJCX0KKwkJCWlmICgkcyA9fiBzL15ccyo/XG4vLykgeworCQkJCSRjaGVjayA9IDE7CisJCQkJJGNvbmRfbGluZXMrKzsKKwkJCX0KKworCQkJIyBBbHNvIGlnbm9yZSBhIGxvb3AgY29uc3RydWN0IGF0IHRoZSBlbmQgb2YgYQorCQkJIyBwcmVwcm9jZXNzb3Igc3RhdGVtZW50LgorCQkJaWYgKCgkcHJldmxpbmUgPX4gL14uXHMqI1xzKmRlZmluZVxzLyB8fAorCQkJICAgICRwcmV2bGluZSA9fiAvXFxccyokLykgJiYgJGNvbnRpbnVhdGlvbiA9PSAwKSB7CisJCQkJJGNoZWNrID0gMDsKKwkJCX0KKworCQkJbXkgJGNvbmRfcHRyID0gLTE7CisJCQkkY29udGludWF0aW9uID0gMDsKKwkJCXdoaWxlICgkY29uZF9wdHIgIT0gJGNvbmRfbGluZXMpIHsKKwkJCQkkY29uZF9wdHIgPSAkY29uZF9saW5lczsKKworCQkJCSMgSWYgd2Ugc2VlIGFuICNlbHNlLyNlbGlmIHRoZW4gdGhlIGNvZGUKKwkJCQkjIGlzIG5vdCBsaW5lYXIuCisJCQkJaWYgKCRzID1+IC9eXHMqXCNccyooPzplbHNlfGVsaWYpLykgeworCQkJCQkkY2hlY2sgPSAwOworCQkJCX0KKworCQkJCSMgSWdub3JlOgorCQkJCSMgIDEpIGJsYW5rIGxpbmVzLCB0aGV5IHNob3VsZCBiZSBhdCAwLAorCQkJCSMgIDIpIHByZXByb2Nlc3NvciBsaW5lcywgYW5kCisJCQkJIyAgMykgbGFiZWxzLgorCQkJCWlmICgkY29udGludWF0aW9uIHx8CisJCQkJICAgICRzID1+IC9eXHMqP1xuLyB8fAorCQkJCSAgICAkcyA9fiAvXlxzKiNccyo/LyB8fAorCQkJCSAgICAkcyA9fiAvXlxzKiRJZGVudFxzKjovKSB7CisJCQkJCSRjb250aW51YXRpb24gPSAoJHMgPX4gL14uKj9cXFxuLykgPyAxIDogMDsKKwkJCQkJJHMgPX4gcy9eLio/XG4vLzsKKwkJCQkJJGNvbmRfbGluZXMrKzsKKwkJCQl9CisJCQl9CisKKwkJCW15ICh1bmRlZiwgJHNpbmRlbnQpID0gbGluZV9zdGF0cygiKyIgLiAkcyk7CisJCQlteSAkc3RhdF9yZWFsID0gcmF3X2xpbmUoJGxpbmVuciwgJGNvbmRfbGluZXMpOworCisJCQkjIENoZWNrIGlmIGVpdGhlciBvZiB0aGVzZSBsaW5lcyBhcmUgbW9kaWZpZWQsIGVsc2UKKwkJCSMgdGhpcyBpcyBub3QgdGhpcyBwYXRjaCdzIGZhdWx0LgorCQkJaWYgKCFkZWZpbmVkKCRzdGF0X3JlYWwpIHx8CisJCQkgICAgJHN0YXQgIX4gL15cKy8gJiYgJHN0YXRfcmVhbCAhfiAvXlwrLykgeworCQkJCSRjaGVjayA9IDA7CisJCQl9CisJCQlpZiAoZGVmaW5lZCgkc3RhdF9yZWFsKSAmJiAkY29uZF9saW5lcyA+IDEpIHsKKwkJCQkkc3RhdF9yZWFsID0gIlsuLi5dXG4kc3RhdF9yZWFsIjsKKwkJCX0KKworCQkJI3ByaW50ICJsaW5lPCRsaW5lPiBwcmV2bGluZTwkcHJldmxpbmU+IGluZGVudDwkaW5kZW50PiBzaW5kZW50PCRzaW5kZW50PiBjaGVjazwkY2hlY2s+IGNvbnRpbnVhdGlvbjwkY29udGludWF0aW9uPiBzPCRzPiBjb25kX2xpbmVzPCRjb25kX2xpbmVzPiBzdGF0X3JlYWw8JHN0YXRfcmVhbD4gc3RhdDwkc3RhdD5cbiI7CisKKwkJCWlmICgkY2hlY2sgJiYgKCgkc2luZGVudCAlIDgpICE9IDAgfHwKKwkJCSAgICAoJHNpbmRlbnQgPD0gJGluZGVudCAmJiAkcyBuZSAnJykpKSB7CisJCQkJV0FSTigic3VzcGVjdCBjb2RlIGluZGVudCBmb3IgY29uZGl0aW9uYWwgc3RhdGVtZW50cyAoJGluZGVudCwgJHNpbmRlbnQpXG4iIC4gJGhlcmVjdXJyIC4gIiRzdGF0X3JlYWxcbiIpOworCQkJfQorCQl9CisKIAkJIyBUcmFjayB0aGUgJ3ZhbHVlcycgYWNyb3NzIGNvbnRleHQgYW5kIGFkZGVkIGxpbmVzLgogCQlteSAkb3BsaW5lID0gJGxpbmU7ICRvcGxpbmUgPX4gcy9eLi8gLzsKIAkJbXkgKCRjdXJyX3ZhbHVlcywgJGN1cnJfdmFycykgPQpAQCAtMTM2Myw2ICsxNTM1LDE1IEBACiAJCQl9CiAJCQluZXh0OwogCQl9CisjIFRFU1Q6IGFsbG93IGRpcmVjdCB0ZXN0aW5nIG9mIHRoZSBhdHRyaWJ1dGUgbWF0Y2hlci4KKwkJaWYgKCRkYmdfYXR0cikgeworCQkJaWYgKCRsaW5lID1+IC9eLlxzKiRBdHRyaWJ1dGVccyokLykgeworCQkJCUVSUk9SKCJURVNUOiBpcyBhdHRyXG4iIC4gJGhlcmVjdXJyKTsKKwkJCX0gZWxzaWYgKCRkYmdfYXR0ciA+IDEgJiYgJGxpbmUgPX4gL14uKygkQXR0cmlidXRlKS8pIHsKKwkJCQlFUlJPUigiVEVTVDogaXMgbm90IGF0dHIgKCQxIGlzKVxuIi4gJGhlcmVjdXJyKTsKKwkJCX0KKwkJCW5leHQ7CisJCX0KIAogIyBjaGVjayBmb3IgaW5pdGlhbGlzYXRpb24gdG8gYWdncmVnYXRlcyBvcGVuIGJyYWNlIG9uIHRoZSBuZXh0IGxpbmUKIAkJaWYgKCRwcmV2bGluZSA9fiAvJERlY2xhcmVccyokSWRlbnRccyo9XHMqJC8gJiYKQEAgLTEzOTUsMTMgKzE1NzYsMTQgQEAKIAkJaWYgKCgkbGluZSA9fiAvRVhQT1JUX1NZTUJPTC4qXCgoLiopXCkvKSB8fAogCQkgICAgKCRsaW5lID1+IC9FWFBPUlRfVU5VU0VEX1NZTUJPTC4qXCgoLiopXCkvKSkgewogCQkJbXkgJG5hbWUgPSAkMTsKLQkJCWlmICgoJHByZXZsaW5lICF+IC9efS8pICYmCi0JCQkgICAoJHByZXZsaW5lICF+IC9eXCt9LykgJiYKLQkJCSAgICgkcHJldmxpbmUgIX4gL14gfS8pICYmCi0JCQkgICAoJHByZXZsaW5lICF+IC9eLkRFQ0xBUkVfJElkZW50XChcUSRuYW1lXEVcKS8pICYmCi0JCQkgICAoJHByZXZsaW5lICF+IC9eLkxJU1RfSEVBRFwoXFEkbmFtZVxFXCkvKSAmJgotCQkJICAgKCRwcmV2bGluZSAhfiAvXi4kVHlwZVxzKlwoXHMqXCpccypcUSRuYW1lXEVccypcKVxzKlwoLykgJiYKLQkJCSAgICgkcHJldmxpbmUgIX4gL1xiXFEkbmFtZVxFKD86XHMrJEF0dHJpYnV0ZSk/XHMqKD86O3w9fFxbKS8pKSB7CisJCQlpZiAoJHByZXZsaW5lICF+IC8oPzoKKwkJCQleLn18CisJCQkJXi5ERUZJTkVfJElkZW50XChcUSRuYW1lXEVcKXwKKwkJCQleLkRFQ0xBUkVfJElkZW50XChcUSRuYW1lXEVcKXwKKwkJCQleLkxJU1RfSEVBRFwoXFEkbmFtZVxFXCl8CisJCQkJXi4kVHlwZVxzKlwoXHMqXCpccypcUSRuYW1lXEVccypcKVxzKlwofAorCQkJCVxiXFEkbmFtZVxFKD86XHMrJEF0dHJpYnV0ZSk/XHMqKD86O3w9fFxbKQorCQkJICAgICkveCkgewogCQkJCVdBUk4oIkVYUE9SVF9TWU1CT0woZm9vKTsgc2hvdWxkIGltbWVkaWF0ZWx5IGZvbGxvdyBpdHMgZnVuY3Rpb24vdmFyaWFibGVcbiIgLiAkaGVyZWN1cnIpOwogCQkJfQogCQl9CkBAIC0xNDIyLDYgKzE2MDQsNyBAQAogCQlpZiAoJGxpbmUgPX4gL1xidHlwZWRlZlxzLyAmJgogCQkgICAgJGxpbmUgIX4gL1xidHlwZWRlZlxzKyRUeXBlXHMrXChccypcKj8kSWRlbnRccypcKVxzKlwoLyAmJgogCQkgICAgJGxpbmUgIX4gL1xidHlwZWRlZlxzKyRUeXBlXHMrJElkZW50XHMqXCgvICYmCisJCSAgICAkbGluZSAhfiAvXGIkdHlwZVR5cGVkZWZzXGIvICYmCiAJCSAgICAkbGluZSAhfiAvXGJfX2JpdHdpc2UoPzpfX3wpXGIvKSB7CiAJCQlXQVJOKCJkbyBub3QgYWRkIG5ldyB0eXBlZGVmc1xuIiAuICRoZXJlY3Vycik7CiAJCX0KQEAgLTE0OTMsMTEgKzE2NzYsMTMgQEAKIAogIyBjaGVjayBmb3Igc3BhY2luZyByb3VuZCBzcXVhcmUgYnJhY2tldHM7IGFsbG93ZWQ6CiAjICAxLiB3aXRoIGEgdHlwZSBvbiB0aGUgbGVmdCAtLSBpbnQgW10gYTsKLSMgIDIuIGF0IHRoZSBiZWdpbm5pbmcgb2YgYSBsaW5lIGZvciBzbGljZSBpbml0aWFsaXNlcnMgLS0gWzAuLjEwXSA9IDUsCisjICAyLiBhdCB0aGUgYmVnaW5uaW5nIG9mIGEgbGluZSBmb3Igc2xpY2UgaW5pdGlhbGlzZXJzIC0tIFswLi4uMTBdID0gNSwKKyMgIDMuIGluc2lkZSBhIGN1cmx5IGJyYWNlIC0tID0geyBbMC4uLjEwXSA9IDUgfQogCQl3aGlsZSAoJGxpbmUgPX4gLyguKj9ccylcWy9nKSB7CiAJCQlteSAoJHdoZXJlLCAkcHJlZml4KSA9ICgkLVsxXSwgJDEpOwogCQkJaWYgKCRwcmVmaXggIX4gLyRUeXBlXHMrJC8gJiYKLQkJCSAgICAoJHdoZXJlICE9IDAgfHwgJHByZWZpeCAhfiAvXi5ccyskLykpIHsKKwkJCSAgICAoJHdoZXJlICE9IDAgfHwgJHByZWZpeCAhfiAvXi5ccyskLykgJiYKKwkJCSAgICAkcHJlZml4ICF+IC97XHMrJC8pIHsKIAkJCQlFUlJPUigic3BhY2UgcHJvaGliaXRlZCBiZWZvcmUgb3BlbiBzcXVhcmUgYnJhY2tldCAnWydcbiIgLiAkaGVyZWN1cnIpOwogCQkJfQogCQl9CkBAIC0xNjMyLDcgKzE4MTcsNyBAQAogCQkJCSMgdW5hcnkgb3BlcmF0b3IsIG9yIGEgY2FzdAogCQkJCX0gZWxzaWYgKCRvcCBlcSAnIScgfHwgJG9wIGVxICd+JyB8fAogCQkJCQkgJG9wdiBlcSAnKlUnIHx8ICRvcHYgZXEgJy1VJyB8fAotCQkJCQkgJG9wdiBlcSAnJlUnKSB7CisJCQkJCSAkb3B2IGVxICcmVScgfHwgJG9wdiBlcSAnJiZVJykgewogCQkJCQlpZiAoJGN0eCAhfiAvW1dFQkNdeC4vICYmICRjYSAhfiAvKD86XCl8IXx+fFwqfC18XCZ8XHx8XCtcK3xcLVwtfFx7KSQvKSB7CiAJCQkJCQlFUlJPUigic3BhY2UgcmVxdWlyZWQgYmVmb3JlIHRoYXQgJyRvcCcgJGF0XG4iIC4gJGhlcmVwdHIpOwogCQkJCQl9CkBAIC0xNzg1LDcgKzE5NzAsMjYgQEAKIAogIyBDaGVjayBmb3IgaWxsZWdhbCBhc3NpZ25tZW50IGluIGlmIGNvbmRpdGlvbmFsIC0tIGFuZCBjaGVjayBmb3IgdHJhaWxpbmcKICMgc3RhdGVtZW50cyBhZnRlciB0aGUgY29uZGl0aW9uYWwuCi0JCWlmICgkbGluZSA9fiAvXGIoPzppZnx3aGlsZXxmb3IpXHMqXCgvICYmICRsaW5lICF+IC9eLlxzKiMvKSB7CisJCWlmICgkbGluZSA9fiAvZG9ccyooPyF7KS8pIHsKKwkJCW15ICgkc3RhdF9uZXh0KSA9IGN0eF9zdGF0ZW1lbnRfYmxvY2soJGxpbmVfbnJfbmV4dCwKKwkJCQkJCSRyZW1haW5fbmV4dCwgJG9mZl9uZXh0KTsKKwkJCSRzdGF0X25leHQgPX4gcy9cbi4vXG4gL2c7CisJCQkjI3ByaW50ICJzdGF0PCRzdGF0PiBzdGF0X25leHQ8JHN0YXRfbmV4dD5cbiI7CisKKwkJCWlmICgkc3RhdF9uZXh0ID1+IC9eXHMqd2hpbGVcYi8pIHsKKwkJCQkjIElmIHRoZSBzdGF0ZW1lbnQgY2FycmllcyBsZWFkaW5nIG5ld2xpbmVzLAorCQkJCSMgdGhlbiBjb3VudCB0aG9zZSBhcyBvZmZzZXRzLgorCQkJCW15ICgkd2hpdGVzcGFjZSkgPQorCQkJCQkoJHN0YXRfbmV4dCA9fiAvXigoPzpccypcblsrLV0pKlxzKikvcyk7CisJCQkJbXkgJG9mZnNldCA9CisJCQkJCXN0YXRlbWVudF9yYXdsaW5lcygkd2hpdGVzcGFjZSkgLSAxOworCisJCQkJJHN1cHByZXNzX3doaWxldHJhaWxlcnN7JGxpbmVfbnJfbmV4dCArCisJCQkJCQkJCSRvZmZzZXR9ID0gMTsKKwkJCX0KKwkJfQorCQlpZiAoIWRlZmluZWQgJHN1cHByZXNzX3doaWxldHJhaWxlcnN7JGxpbmVucn0gJiYKKwkJICAgICRsaW5lID1+IC9cYig/OmlmfHdoaWxlfGZvcilccypcKC8gJiYgJGxpbmUgIX4gL14uXHMqIy8pIHsKIAkJCW15ICgkcywgJGMpID0gKCRzdGF0LCAkY29uZCk7CiAKIAkJCWlmICgkYyA9fiAvXGJpZlxzKlwoLipbXjw+IT1dPVtePV0uKi8pIHsKQEAgLTE4MDAsNTcgKzIwMDQsMTYgQEAKIAkJCWlmIChsZW5ndGgoJGMpICYmICRzICF+IC9eXHMqez9ccypcXCpccyokLyAmJgogCQkJICAgICRjICF+IC99XHMqd2hpbGVccyovKQogCQkJewotCQkJCUVSUk9SKCJ0cmFpbGluZyBzdGF0ZW1lbnRzIHNob3VsZCBiZSBvbiBuZXh0IGxpbmVcbiIgLiAkaGVyZWN1cnIpOwotCQkJfQotCQl9CisJCQkJIyBGaW5kIG91dCBob3cgbG9uZyB0aGUgY29uZGl0aW9uYWwgYWN0dWFsbHkgaXMuCisJCQkJbXkgQG5ld2xpbmVzID0gKCRjID1+IC9cbi9ncyk7CisJCQkJbXkgJGNvbmRfbGluZXMgPSAxICsgJCNuZXdsaW5lczsKIAotIyBDaGVjayByZWxhdGl2ZSBpbmRlbnQgZm9yIGNvbmRpdGlvbmFscyBhbmQgYmxvY2tzLgotCQlpZiAoJGxpbmUgPX4gL1xiKD86KD86aWZ8d2hpbGV8Zm9yKVxzKlwofGRvXGIpLyAmJiAkbGluZSAhfiAvXi5ccyojLyAmJiAkbGluZSAhfiAvXH1ccyp3aGlsZVxzKi8pIHsKLQkJCW15ICgkcywgJGMpID0gKCRzdGF0LCAkY29uZCk7CisJCQkJbXkgJHN0YXRfcmVhbCA9IHJhd19saW5lKCRsaW5lbnIsICRjb25kX2xpbmVzKTsKKwkJCQlpZiAoZGVmaW5lZCgkc3RhdF9yZWFsKSAmJiAkY29uZF9saW5lcyA+IDEpIHsKKwkJCQkJJHN0YXRfcmVhbCA9ICJbLi4uXVxuJHN0YXRfcmVhbCI7CisJCQkJfQogCi0JCQlzdWJzdHIoJHMsIDAsIGxlbmd0aCgkYyksICcnKTsKLQotCQkJIyBNYWtlIHN1cmUgd2UgcmVtb3ZlIHRoZSBsaW5lIHByZWZpeGVzIGFzIHdlIGhhdmUKLQkJCSMgbm9uZSBvbiB0aGUgZmlyc3QgbGluZSwgYW5kIGFyZSBnb2luZyB0byByZWFkZCB0aGVtCi0JCQkjIHdoZXJlIG5lY2Vzc2FyeS4KLQkJCSRzID1+IHMvXG4uL1xuL2dzOwotCi0JCQkjIFdlIHdhbnQgdG8gY2hlY2sgdGhlIGZpcnN0IGxpbmUgaW5zaWRlIHRoZSBibG9jawotCQkJIyBzdGFydGluZyBhdCB0aGUgZW5kIG9mIHRoZSBjb25kaXRpb25hbCwgc28gcmVtb3ZlOgotCQkJIyAgMSkgYW55IGJsYW5rIGxpbmUgdGVybWluYXRpb24KLQkJCSMgIDIpIGFueSBvcGVuaW5nIGJyYWNlIHsgb24gZW5kIG9mIHRoZSBsaW5lCi0JCQkjICAzKSBhbnkgZG8gKC4uLikgewotCQkJbXkgJGNvbnRpbnVhdGlvbiA9IDA7Ci0JCQlteSAkY2hlY2sgPSAwOwotCQkJJHMgPX4gcy9eLipcYmRvXGIvLzsKLQkJCSRzID1+IHMvXlxzKnsvLzsKLQkJCWlmICgkcyA9fiBzL15ccypcXC8vKSB7Ci0JCQkJJGNvbnRpbnVhdGlvbiA9IDE7Ci0JCQl9Ci0JCQlpZiAoJHMgPX4gcy9eXHMqXG4vLykgewotCQkJCSRjaGVjayA9IDE7Ci0JCQl9Ci0KLQkJCSMgQWxzbyBpZ25vcmUgYSBsb29wIGNvbnN0cnVjdCBhdCB0aGUgZW5kIG9mIGEKLQkJCSMgcHJlcHJvY2Vzc29yIHN0YXRlbWVudC4KLQkJCWlmICgoJHByZXZsaW5lID1+IC9eLlxzKiNccypkZWZpbmVccy8gfHwKLQkJCSAgICAkcHJldmxpbmUgPX4gL1xcXHMqJC8pICYmICRjb250aW51YXRpb24gPT0gMCkgewotCQkJCSRjaGVjayA9IDA7Ci0JCQl9Ci0KLQkJCSMgSWdub3JlIHRoZSBjdXJyZW50IGxpbmUgaWYgaXRzIGlzIGEgcHJlcHJvY2Vzc29yCi0JCQkjIGxpbmUuCi0JCQlpZiAoJHMgPX4gL15ccyojXHMqLykgewotCQkJCSRjaGVjayA9IDA7Ci0JCQl9Ci0KLQkJCW15ICh1bmRlZiwgJHNpbmRlbnQpID0gbGluZV9zdGF0cygiKyIgLiAkcyk7Ci0KLQkJCSMjcHJpbnQgImxpbmU8JGxpbmU+IHByZXZsaW5lPCRwcmV2bGluZT4gaW5kZW50PCRpbmRlbnQ+IHNpbmRlbnQ8JHNpbmRlbnQ+IGNoZWNrPCRjaGVjaz4gY29udGludWF0aW9uPCRjb250aW51YXRpb24+IHM8JHM+XG4iOwotCi0JCQlpZiAoJGNoZWNrICYmICgoJHNpbmRlbnQgJSA4KSAhPSAwIHx8Ci0JCQkgICAgKCRzaW5kZW50IDw9ICRpbmRlbnQgJiYgJHMgbmUgJycpKSkgewotCQkJCVdBUk4oInN1c3BlY3QgY29kZSBpbmRlbnQgZm9yIGNvbmRpdGlvbmFsIHN0YXRlbWVudHNcbiIgLiAkaGVyZWN1cnIpOworCQkJCUVSUk9SKCJ0cmFpbGluZyBzdGF0ZW1lbnRzIHNob3VsZCBiZSBvbiBuZXh0IGxpbmVcbiIgLiAkaGVyZWN1cnIgLiAkc3RhdF9yZWFsKTsKIAkJCX0KIAkJfQogCkBAIC0xODc3LDYgKzIwNDAsMTUgQEAKIAkJCQlFUlJPUigidHJhaWxpbmcgc3RhdGVtZW50cyBzaG91bGQgYmUgb24gbmV4dCBsaW5lXG4iIC4gJGhlcmVjdXJyKTsKIAkJCX0KIAkJfQorIyBjYXNlIGFuZCBkZWZhdWx0IHNob3VsZCBub3QgaGF2ZSBnZW5lcmFsIHN0YXRlbWVudHMgYWZ0ZXIgdGhlbQorCQlpZiAoJGxpbmUgPX4gL14uXHMqKD86Y2FzZVxzKi4qfGRlZmF1bHRccyopOi9nICYmCisJCSAgICAkbGluZSAhfiAvXEcoPzoKKwkJCSg/OlxzKiQ7KikoPzpccyp7KT8oPzpccyokOyopKD86XHMqXFwpP1xzKiR8CisJCQlccypyZXR1cm5ccysKKwkJICAgICkveGcpCisJCXsKKwkJCUVSUk9SKCJ0cmFpbGluZyBzdGF0ZW1lbnRzIHNob3VsZCBiZSBvbiBuZXh0IGxpbmVcbiIgLiAkaGVyZWN1cnIpOworCQl9CiAKIAkJIyBDaGVjayBmb3IgfTxubD5lbHNlIHssIHRoZXNlIG11c3QgYmUgYXQgdGhlIHNhbWUKIAkJIyBpbmRlbnQgbGV2ZWwgdG8gYmUgcmVsZXZhbnQgdG8gZWFjaCBvdGhlci4KQEAgLTE5MTMsMTIgKzIwODUsMTcgQEAKIAogI3dhcm4gaWYgPGFzbS9mb28uaD4gaXMgI2luY2x1ZGVkIGFuZCA8bGludXgvZm9vLmg+IGlzIGF2YWlsYWJsZSAodXNlcyBSQVcgbGluZSkKIAkJaWYgKCR0cmVlICYmICRyYXdsaW5lID1+IG17Xi5ccypcI1xzKmluY2x1ZGVccypcPGFzbVwvKC4qKVwuaFw+fSkgewotCQkJbXkgJGNoZWNrZmlsZSA9ICJpbmNsdWRlL2xpbnV4LyQxLmgiOwotCQkJaWYgKC1mICIkcm9vdC8kY2hlY2tmaWxlIiAmJiAkcmVhbGZpbGUgbmUgJGNoZWNrZmlsZSAmJgorCQkJbXkgJGZpbGUgPSAiJDEuaCI7CisJCQlteSAkY2hlY2tmaWxlID0gImluY2x1ZGUvbGludXgvJGZpbGUiOworCQkJaWYgKC1mICIkcm9vdC8kY2hlY2tmaWxlIiAmJgorCQkJICAgICRyZWFsZmlsZSBuZSAkY2hlY2tmaWxlICYmCiAJCQkgICAgJDEgbmUgJ2lycScpCiAJCQl7Ci0JCQkJV0FSTigiVXNlICNpbmNsdWRlIDxsaW51eC8kMS5oPiBpbnN0ZWFkIG9mIDxhc20vJDEuaD5cbiIgLgotCQkJCQkkaGVyZWN1cnIpOworCQkJCWlmICgkcmVhbGZpbGUgPX4gbXteYXJjaC99KSB7CisJCQkJCUNISygiQ29uc2lkZXIgdXNpbmcgI2luY2x1ZGUgPGxpbnV4LyRmaWxlPiBpbnN0ZWFkIG9mIDxhc20vJGZpbGU+XG4iIC4gJGhlcmVjdXJyKTsKKwkJCQl9IGVsc2UgeworCQkJCQlXQVJOKCJVc2UgI2luY2x1ZGUgPGxpbnV4LyRmaWxlPiBpbnN0ZWFkIG9mIDxhc20vJGZpbGU+XG4iIC4gJGhlcmVjdXJyKTsKKwkJCQl9CiAJCQl9CiAJCX0KIApAQCAtMTk1Myw4ICsyMTMwLDggQEAKIAkJCSMgRXh0cmFjdCB0aGUgcmVtYWluZGVyIG9mIHRoZSBkZWZpbmUgKGlmIGFueSkgYW5kCiAJCQkjIHJpcCBvZmYgc3Vycm91bmRpbmcgc3BhY2VzLCBhbmQgdHJhaWxpbmcgXCdzLgogCQkJJHJlc3QgPSAnJzsKLQkJCXdoaWxlICgkb2ZmICE9IDAgfHwgKCRjbnQgPiAwICYmICRyZXN0ID1+IC8oPzpefFxcKVxzKiQvKSkgewotCQkJCSNwcmludCAiQURESU5HICRvZmYgPCIgLiBzdWJzdHIoJGxpbmVzWyRsbiAtIDFdLCAkb2ZmKSAuICI+XG4iOworCQkJd2hpbGUgKCRvZmYgIT0gMCB8fCAoJGNudCA+IDAgJiYgJHJlc3QgPX4gL1xcXHMqJC8pKSB7CisJCQkJI3ByaW50ICJBRERJTkcgY250PCRjbnQ+ICRvZmYgPCIgLiBzdWJzdHIoJGxpbmVzWyRsbiAtIDFdLCAkb2ZmKSAuICI+IHJlc3Q8JHJlc3Q+XG4iOwogCQkJCWlmICgkb2ZmICE9IDAgfHwgJGxpbmVzWyRsbiAtIDFdICF+IC9eLS8pIHsKIAkJCQkJJHJlc3QgLj0gc3Vic3RyKCRsaW5lc1skbG4gLSAxXSwgJG9mZikgLiAiXG4iOwogCQkJCQkkY250LS07CkBAIC0xOTc4LDkgKzIxNTUsMTAgQEAKIAkJCSRkc3RhdCA9fiBzL1xzKiQvL3M7CiAKIAkJCSMgRmxhdHRlbiBhbnkgcGFyZW50aGVzZXMgYW5kIGJyYWNlcwotCQkJd2hpbGUgKCRkc3RhdCA9fiBzL1woW15cKFwpXSpcKS8xLykgewotCQkJfQotCQkJd2hpbGUgKCRkc3RhdCA9fiBzL1x7W15ce1x9XSpcfS8xLykgeworCQkJd2hpbGUgKCRkc3RhdCA9fiBzL1woW15cKFwpXSpcKS8xLyB8fAorCQkJICAgICAgICRkc3RhdCA9fiBzL1x7W15ce1x9XSpcfS8xLyB8fAorCQkJICAgICAgICRkc3RhdCA9fiBzL1xbW15ce1x9XSpcXS8xLykKKwkJCXsKIAkJCX0KIAogCQkJbXkgJGV4Y2VwdGlvbnMgPSBxcnsKQEAgLTIwMDMsNiArMjE4MSw3IEBACiAJCQkJaWYgKCRkc3RhdCBuZSAnJyAmJgogCQkJCSAgICAkZHN0YXQgIX4gL14oPzokSWRlbnR8LT8kQ29uc3RhbnQpJC8gJiYKIAkJCQkgICAgJGRzdGF0ICF+IC8kZXhjZXB0aW9ucy8gJiYKKwkJCQkgICAgJGRzdGF0ICF+IC9eXC4kSWRlbnRccyo9LyAmJgogCQkJCSAgICAkZHN0YXQgPX4gLyRPcGVyYXRvcnMvKQogCQkJCXsKIAkJCQkJRVJST1IoIk1hY3JvcyB3aXRoIGNvbXBsZXggdmFsdWVzIHNob3VsZCBiZSBlbmNsb3NlZCBpbiBwYXJlbnRoZXNpc1xuIiAuICIkaGVyZVxuJGN0eFxuIik7CkBAIC0yMTAzLDEwICsyMjgyLDEwIEBACiAJCQl9CiAJCQlpZiAoJGxldmVsID09IDAgJiYgJGJsb2NrID1+IC9eXHMqXHsvICYmICEkYWxsb3dlZCkgewogCQkJCW15ICRoZXJlY3R4ID0gJGhlcmUgLiAiXG4iOzsKLQkJCQlteSAkZW5kID0gJGxpbmVuciArIHN0YXRlbWVudF9yYXdsaW5lcygkYmxvY2spIC0gMTsKKwkJCQlteSAkY250ID0gc3RhdGVtZW50X3Jhd2xpbmVzKCRibG9jayk7CiAKLQkJCQlmb3IgKG15ICRsbiA9ICRsaW5lbnIgLSAxOyAkbG4gPCAkZW5kOyAkbG4rKykgewotCQkJCQkkaGVyZWN0eCAuPSAkcmF3bGluZXNbJGxuXSAuICJcbiI7OworCQkJCWZvciAobXkgJG4gPSAwOyAkbiA8ICRjbnQ7ICRuKyspIHsKKwkJCQkJJGhlcmVjdHggLj0gcmF3X2xpbmUoJGxpbmVuciwgJG4pIC4gIlxuIjs7CiAJCQkJfQogCiAJCQkJV0FSTigiYnJhY2VzIHt9IGFyZSBub3QgbmVjZXNzYXJ5IGZvciBzaW5nbGUgc3RhdGVtZW50IGJsb2Nrc1xuIiAuICRoZXJlY3R4KTsKQEAgLTIyODEsNiArMjQ2MCw3IEBACiAJCW15ICRzdHJpbmc7CiAJCXdoaWxlICgkbGluZSA9fiAvKD86XnwiKShbWFx0XSopKD86InwkKS9nKSB7CiAJCQkkc3RyaW5nID0gc3Vic3RyKCRyYXdsaW5lLCAkLVsxXSwgJCtbMV0gLSAkLVsxXSk7CisJCQkkc3RyaW5nID1+IHMvJSUvX18vZzsKIAkJCWlmICgkc3RyaW5nID1+IC8oPzwhJSklTFt1ZGldLykgewogCQkJCVdBUk4oIlwlTGQvJUx1IGFyZSBub3Qtc3RhbmRhcmQgQywgdXNlICVsbGQvJWxsdVxuIiAuICRoZXJlY3Vycik7CiAJCQkJbGFzdDsKZGlmZiAtLWdpdCBhL3NjcmlwdHMvbW9kL2ZpbGUyYWxpYXMuYyBiL3NjcmlwdHMvbW9kL2ZpbGUyYWxpYXMuYwppbmRleCA0Yzk4OTBlLi5kNGRjMjIyIDEwMDY0NAotLS0gYS9zY3JpcHRzL21vZC9maWxlMmFsaWFzLmMKKysrIGIvc2NyaXB0cy9tb2QvZmlsZTJhbGlhcy5jCkBAIC0yMDYsNiArMjA2LDIwIEBACiAJCWRvX3VzYl9lbnRyeV9tdWx0aShzeW12YWwgKyBpLCBtb2QpOwogfQogCisvKiBMb29rcyBsaWtlOiBoaWQ6Yk52TnBOICovCitzdGF0aWMgaW50IGRvX2hpZF9lbnRyeShjb25zdCBjaGFyICpmaWxlbmFtZSwKKwkJCSAgICAgc3RydWN0IGhpZF9kZXZpY2VfaWQgKmlkLCBjaGFyICphbGlhcykKK3sKKwlpZC0+dmVuZG9yID0gVE9fTkFUSVZFKGlkLT52ZW5kb3IpOworCWlkLT5wcm9kdWN0ID0gVE9fTkFUSVZFKGlkLT5wcm9kdWN0KTsKKworCXNwcmludGYoYWxpYXMsICJoaWQ6YiUwNFgiLCBpZC0+YnVzKTsKKwlBREQoYWxpYXMsICJ2IiwgaWQtPnZlbmRvciAhPSBISURfQU5ZX0lELCBpZC0+dmVuZG9yKTsKKwlBREQoYWxpYXMsICJwIiwgaWQtPnByb2R1Y3QgIT0gSElEX0FOWV9JRCwgaWQtPnByb2R1Y3QpOworCisJcmV0dXJuIDE7Cit9CisKIC8qIExvb2tzIGxpa2U6IGllZWUxMzk0OnZlbk5tb05zcE52ZXJOICovCiBzdGF0aWMgaW50IGRvX2llZWUxMzk0X2VudHJ5KGNvbnN0IGNoYXIgKmZpbGVuYW1lLAogCQkJICAgICBzdHJ1Y3QgaWVlZTEzOTRfZGV2aWNlX2lkICppZCwgY2hhciAqYWxpYXMpCkBAIC02MjksNiArNjQzLDU5IEBACiAJcmV0dXJuIDE7CiB9CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZG1pZmllbGQgeworCWNvbnN0IGNoYXIgKnByZWZpeDsKKwlpbnQgZmllbGQ7Cit9IGRtaV9maWVsZHNbXSA9IHsKKwl7ICJidm4iLCBETUlfQklPU19WRU5ET1IgfSwKKwl7ICJidnIiLCBETUlfQklPU19WRVJTSU9OIH0sCisJeyAiYmQiLCAgRE1JX0JJT1NfREFURSB9LAorCXsgInN2biIsIERNSV9TWVNfVkVORE9SIH0sCisJeyAicG4iLCAgRE1JX1BST0RVQ1RfTkFNRSB9LAorCXsgInB2ciIsIERNSV9QUk9EVUNUX1ZFUlNJT04gfSwKKwl7ICJydm4iLCBETUlfQk9BUkRfVkVORE9SIH0sCisJeyAicm4iLCAgRE1JX0JPQVJEX05BTUUgfSwKKwl7ICJydnIiLCBETUlfQk9BUkRfVkVSU0lPTiB9LAorCXsgImN2biIsIERNSV9DSEFTU0lTX1ZFTkRPUiB9LAorCXsgImN0IiwgIERNSV9DSEFTU0lTX1RZUEUgfSwKKwl7ICJjdnIiLCBETUlfQ0hBU1NJU19WRVJTSU9OIH0sCisJeyBOVUxMLCAgRE1JX05PTkUgfQorfTsKKworc3RhdGljIHZvaWQgZG1pX2FzY2lpX2ZpbHRlcihjaGFyICpkLCBjb25zdCBjaGFyICpzKQoreworCS8qIEZpbHRlciBvdXQgY2hhcmFjdGVycyB3ZSBkb24ndCB3YW50IHRvIHNlZSBpbiB0aGUgbW9kYWxpYXMgc3RyaW5nICovCisJZm9yICg7ICpzOyBzKyspCisJCWlmICgqcyA+ICcgJyAmJiAqcyA8IDEyNyAmJiAqcyAhPSAnOicpCisJCQkqKGQrKykgPSAqczsKKworCSpkID0gMDsKK30KKworCitzdGF0aWMgaW50IGRvX2RtaV9lbnRyeShjb25zdCBjaGFyICpmaWxlbmFtZSwgc3RydWN0IGRtaV9zeXN0ZW1faWQgKmlkLAorCQkJY2hhciAqYWxpYXMpCit7CisJaW50IGksIGo7CisKKwlzcHJpbnRmKGFsaWFzLCAiZG1pKiIpOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZG1pX2ZpZWxkcyk7IGkrKykgeworCQlmb3IgKGogPSAwOyBqIDwgNDsgaisrKSB7CisJCQlpZiAoaWQtPm1hdGNoZXNbal0uc2xvdCAmJgorCQkJICAgIGlkLT5tYXRjaGVzW2pdLnNsb3QgPT0gZG1pX2ZpZWxkc1tpXS5maWVsZCkgeworCQkJCXNwcmludGYoYWxpYXMgKyBzdHJsZW4oYWxpYXMpLCAiOiVzKiIsCisJCQkJCWRtaV9maWVsZHNbaV0ucHJlZml4KTsKKwkJCQlkbWlfYXNjaWlfZmlsdGVyKGFsaWFzICsgc3RybGVuKGFsaWFzKSwKKwkJCQkJCSBpZC0+bWF0Y2hlc1tqXS5zdWJzdHIpOworCQkJCXN0cmNhdChhbGlhcywgIioiKTsKKwkJCX0KKwkJfQorCX0KKworCXN0cmNhdChhbGlhcywgIjoiKTsKKwlyZXR1cm4gMTsKK30KIC8qIElnbm9yZSBhbnkgcHJlZml4LCBlZy4gc29tZSBhcmNoaXRlY3R1cmVzIHByZXBlbmQgXyAqLwogc3RhdGljIGlubGluZSBpbnQgc3ltX2lzKGNvbnN0IGNoYXIgKnN5bWJvbCwgY29uc3QgY2hhciAqbmFtZSkKIHsKQEAgLTY5Miw2ICs3NTksMTAgQEAKIAllbHNlIGlmIChzeW1faXMoc3ltbmFtZSwgIl9fbW9kX3VzYl9kZXZpY2VfdGFibGUiKSkKIAkJLyogc3BlY2lhbCBjYXNlIHRvIGhhbmRsZSBiY2REZXZpY2UgcmFuZ2VzICovCiAJCWRvX3VzYl90YWJsZShzeW12YWwsIHN5bS0+c3Rfc2l6ZSwgbW9kKTsKKwllbHNlIGlmIChzeW1faXMoc3ltbmFtZSwgIl9fbW9kX2hpZF9kZXZpY2VfdGFibGUiKSkKKwkJZG9fdGFibGUoc3ltdmFsLCBzeW0tPnN0X3NpemUsCisJCQkgc2l6ZW9mKHN0cnVjdCBoaWRfZGV2aWNlX2lkKSwgImhpZCIsCisJCQkgZG9faGlkX2VudHJ5LCBtb2QpOwogCWVsc2UgaWYgKHN5bV9pcyhzeW1uYW1lLCAiX19tb2RfaWVlZTEzOTRfZGV2aWNlX3RhYmxlIikpCiAJCWRvX3RhYmxlKHN5bXZhbCwgc3ltLT5zdF9zaXplLAogCQkJIHNpemVvZihzdHJ1Y3QgaWVlZTEzOTRfZGV2aWNlX2lkKSwgImllZWUxMzk0IiwKQEAgLTc2MCw2ICs4MzEsMTAgQEAKIAkJZG9fdGFibGUoc3ltdmFsLCBzeW0tPnN0X3NpemUsCiAJCQkgc2l6ZW9mKHN0cnVjdCBpMmNfZGV2aWNlX2lkKSwgImkyYyIsCiAJCQkgZG9faTJjX2VudHJ5LCBtb2QpOworCWVsc2UgaWYgKHN5bV9pcyhzeW1uYW1lLCAiX19tb2RfZG1pX2RldmljZV90YWJsZSIpKQorCQlkb190YWJsZShzeW12YWwsIHN5bS0+c3Rfc2l6ZSwKKwkJCSBzaXplb2Yoc3RydWN0IGRtaV9zeXN0ZW1faWQpLCAiZG1pIiwKKwkJCSBkb19kbWlfZW50cnksIG1vZCk7CiAJZnJlZSh6ZXJvcyk7CiB9CiAKZGlmZiAtLWdpdCBhL3NjcmlwdHMvbW9kL21vZHBvc3QuYyBiL3NjcmlwdHMvbW9kL21vZHBvc3QuYwppbmRleCA4ZTBkZTZhLi44ODkyMTYxIDEwMDY0NAotLS0gYS9zY3JpcHRzL21vZC9tb2Rwb3N0LmMKKysrIGIvc2NyaXB0cy9tb2QvbW9kcG9zdC5jCkBAIC0xNzI2LDYgKzE3MjYsMTQgQEAKIAlidWZfcHJpbnRmKGIsICJ9O1xuIik7CiB9CiAKK3ZvaWQgYWRkX3N0YWdpbmdfZmxhZyhzdHJ1Y3QgYnVmZmVyICpiLCBjb25zdCBjaGFyICpuYW1lKQoreworCXN0YXRpYyBjb25zdCBjaGFyICpzdGFnaW5nX2RpciA9ICJkcml2ZXJzL3N0YWdpbmciOworCisJaWYgKHN0cm5jbXAoc3RhZ2luZ19kaXIsIG5hbWUsIHN0cmxlbihzdGFnaW5nX2RpcikpID09IDApCisJCWJ1Zl9wcmludGYoYiwgIlxuTU9EVUxFX0lORk8oc3RhZ2luZywgXCJZXCIpO1xuIik7Cit9CisKIC8qKgogICogUmVjb3JkIENSQ3MgZm9yIHVucmVzb2x2ZWQgc3ltYm9scwogICoqLwpAQCAtMjEzNSw2ICsyMTQzLDcgQEAKIAkJYnVmLnBvcyA9IDA7CiAKIAkJYWRkX2hlYWRlcigmYnVmLCBtb2QpOworCQlhZGRfc3RhZ2luZ19mbGFnKCZidWYsIG1vZC0+bmFtZSk7CiAJCWVyciB8PSBhZGRfdmVyc2lvbnMoJmJ1ZiwgbW9kKTsKIAkJYWRkX2RlcGVuZHMoJmJ1ZiwgbW9kLCBtb2R1bGVzKTsKIAkJYWRkX21vZGRldnRhYmxlKCZidWYsIG1vZCk7CmRpZmYgLS1naXQgYS9zZWN1cml0eS9kZXZpY2VfY2dyb3VwLmMgYi9zZWN1cml0eS9kZXZpY2VfY2dyb3VwLmMKaW5kZXggNDZmMjM5Ny4uNWJhNzg3MCAxMDA2NDQKLS0tIGEvc2VjdXJpdHkvZGV2aWNlX2Nncm91cC5jCisrKyBiL3NlY3VyaXR5L2RldmljZV9jZ3JvdXAuYwpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBkZXZfY2dyb3VwLmMgLSBkZXZpY2UgY2dyb3VwIHN1YnN5c3RlbQorICogZGV2aWNlX2Nncm91cC5jIC0gZGV2aWNlIGNncm91cCBzdWJzeXN0ZW0KICAqCiAgKiBDb3B5cmlnaHQgMjAwNyBJQk0gQ29ycAogICovCkBAIC0xMCw2ICsxMCw3IEBACiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgogI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3JjdXBkYXRlLmg+CiAKICNkZWZpbmUgQUNDX01LTk9EIDEKICNkZWZpbmUgQUNDX1JFQUQgIDIKQEAgLTIyLDE4ICsyMyw4IEBACiAKIC8qCiAgKiB3aGl0ZWxpc3QgbG9ja2luZyBydWxlczoKLSAqIGNncm91cF9sb2NrKCkgY2Fubm90IGJlIHRha2VuIHVuZGVyIGRldl9jZ3JvdXAtPmxvY2suCi0gKiBkZXZfY2dyb3VwLT5sb2NrIGNhbiBiZSB0YWtlbiB3aXRoIG9yIHdpdGhvdXQgY2dyb3VwX2xvY2soKS4KLSAqCi0gKiBtb2RpZmljYXRpb25zIGFsd2F5cyByZXF1aXJlIGNncm91cF9sb2NrCi0gKiBtb2RpZmljYXRpb25zIHRvIGEgbGlzdCB3aGljaCBpcyB2aXNpYmxlIHJlcXVpcmUgdGhlCi0gKiAgIGRldl9jZ3JvdXAtPmxvY2sgKmFuZCogY2dyb3VwX2xvY2soKQotICogd2Fsa2luZyB0aGUgbGlzdCByZXF1aXJlcyBkZXZfY2dyb3VwLT5sb2NrIG9yIGNncm91cF9sb2NrKCkuCi0gKgotICogcmVhc29uaW5nOiBkZXZfd2hpdGVsaXN0X2NvcHkoKSBuZWVkcyB0byBrbWFsbG9jLCBzbyBuZWVkcwotICogICBhIG11dGV4LCB3aGljaCB0aGUgY2dyb3VwX2xvY2soKSBpcy4gIFNpbmNlIG1vZGlmeWluZwotICogICBhIHZpc2libGUgbGlzdCByZXF1aXJlcyBib3RoIGxvY2tzLCBlaXRoZXIgbG9jayBjYW4gYmUKLSAqICAgdGFrZW4gZm9yIHdhbGtpbmcgdGhlIGxpc3QuCisgKiBob2xkIGNncm91cF9sb2NrKCkgZm9yIHVwZGF0ZS9yZWFkLgorICogaG9sZCByY3VfcmVhZF9sb2NrKCkgZm9yIHJlYWQuCiAgKi8KIAogc3RydWN0IGRldl93aGl0ZWxpc3RfaXRlbSB7CkBAIC00Nyw3ICszOCw2IEBACiBzdHJ1Y3QgZGV2X2Nncm91cCB7CiAJc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgY3NzOwogCXN0cnVjdCBsaXN0X2hlYWQgd2hpdGVsaXN0OwotCXNwaW5sb2NrX3QgbG9jazsKIH07CiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IGRldl9jZ3JvdXAgKmNzc190b19kZXZjZ3JvdXAoc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKnMpCkBAIC04NCwxMyArNzQsOSBAQAogCXN0cnVjdCBkZXZfd2hpdGVsaXN0X2l0ZW0gKndoLCAqdG1wLCAqbmV3OwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeSh3aCwgb3JpZywgbGlzdCkgewotCQluZXcgPSBrbWFsbG9jKHNpemVvZigqd2gpLCBHRlBfS0VSTkVMKTsKKwkJbmV3ID0ga21lbWR1cCh3aCwgc2l6ZW9mKCp3aCksIEdGUF9LRVJORUwpOwogCQlpZiAoIW5ldykKIAkJCWdvdG8gZnJlZV9hbmRfZXhpdDsKLQkJbmV3LT5tYWpvciA9IHdoLT5tYWpvcjsKLQkJbmV3LT5taW5vciA9IHdoLT5taW5vcjsKLQkJbmV3LT50eXBlID0gd2gtPnR5cGU7Ci0JCW5ldy0+YWNjZXNzID0gd2gtPmFjY2VzczsKIAkJbGlzdF9hZGRfdGFpbCgmbmV3LT5saXN0LCBkZXN0KTsKIAl9CiAKQEAgLTEwNywxOSArOTMsMTYgQEAKIC8qIFN0dXBpZCBwcm90b3R5cGUgLSBkb24ndCBib3RoZXIgY29tYmluaW5nIGV4aXN0aW5nIGVudHJpZXMgKi8KIC8qCiAgKiBjYWxsZWQgdW5kZXIgY2dyb3VwX2xvY2soKQotICogc2luY2UgdGhlIGxpc3QgaXMgdmlzaWJsZSB0byBvdGhlciB0YXNrcywgd2UgbmVlZCB0aGUgc3BpbmxvY2sgYWxzbwogICovCiBzdGF0aWMgaW50IGRldl93aGl0ZWxpc3RfYWRkKHN0cnVjdCBkZXZfY2dyb3VwICpkZXZfY2dyb3VwLAogCQkJc3RydWN0IGRldl93aGl0ZWxpc3RfaXRlbSAqd2gpCiB7CiAJc3RydWN0IGRldl93aGl0ZWxpc3RfaXRlbSAqd2hjb3B5LCAqd2FsazsKIAotCXdoY29weSA9IGttYWxsb2Moc2l6ZW9mKCp3aGNvcHkpLCBHRlBfS0VSTkVMKTsKKwl3aGNvcHkgPSBrbWVtZHVwKHdoLCBzaXplb2YoKndoKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCF3aGNvcHkpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JbWVtY3B5KHdoY29weSwgd2gsIHNpemVvZigqd2hjb3B5KSk7Ci0Jc3Bpbl9sb2NrKCZkZXZfY2dyb3VwLT5sb2NrKTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KHdhbGssICZkZXZfY2dyb3VwLT53aGl0ZWxpc3QsIGxpc3QpIHsKIAkJaWYgKHdhbGstPnR5cGUgIT0gd2gtPnR5cGUpCiAJCQljb250aW51ZTsKQEAgLTEzNSw3ICsxMTgsNiBAQAogCiAJaWYgKHdoY29weSAhPSBOVUxMKQogCQlsaXN0X2FkZF90YWlsX3JjdSgmd2hjb3B5LT5saXN0LCAmZGV2X2Nncm91cC0+d2hpdGVsaXN0KTsKLQlzcGluX3VubG9jaygmZGV2X2Nncm91cC0+bG9jayk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTE0OSwxNCArMTMxLDEyIEBACiAKIC8qCiAgKiBjYWxsZWQgdW5kZXIgY2dyb3VwX2xvY2soKQotICogc2luY2UgdGhlIGxpc3QgaXMgdmlzaWJsZSB0byBvdGhlciB0YXNrcywgd2UgbmVlZCB0aGUgc3BpbmxvY2sgYWxzbwogICovCiBzdGF0aWMgdm9pZCBkZXZfd2hpdGVsaXN0X3JtKHN0cnVjdCBkZXZfY2dyb3VwICpkZXZfY2dyb3VwLAogCQkJc3RydWN0IGRldl93aGl0ZWxpc3RfaXRlbSAqd2gpCiB7CiAJc3RydWN0IGRldl93aGl0ZWxpc3RfaXRlbSAqd2FsaywgKnRtcDsKIAotCXNwaW5fbG9jaygmZGV2X2Nncm91cC0+bG9jayk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHdhbGssIHRtcCwgJmRldl9jZ3JvdXAtPndoaXRlbGlzdCwgbGlzdCkgewogCQlpZiAod2Fsay0+dHlwZSA9PSBERVZfQUxMKQogCQkJZ290byByZW1vdmU7CkBAIC0xNzQsNyArMTU0LDYgQEAKIAkJCWNhbGxfcmN1KCZ3YWxrLT5yY3UsIHdoaXRlbGlzdF9pdGVtX2ZyZWUpOwogCQl9CiAJfQotCXNwaW5fdW5sb2NrKCZkZXZfY2dyb3VwLT5sb2NrKTsKIH0KIAogLyoKQEAgLTIxNCw3ICsxOTMsNiBAQAogCQl9CiAJfQogCi0Jc3Bpbl9sb2NrX2luaXQoJmRldl9jZ3JvdXAtPmxvY2spOwogCXJldHVybiAmZGV2X2Nncm91cC0+Y3NzOwogfQogCkBAIC0zMzAsMTUgKzMwOCwxMSBAQAogewogCXN0cnVjdCBjZ3JvdXAgKnBjZyA9IGNoaWxkY2ctPmNzcy5jZ3JvdXAtPnBhcmVudDsKIAlzdHJ1Y3QgZGV2X2Nncm91cCAqcGFyZW50OwotCWludCByZXQ7CiAKIAlpZiAoIXBjZykKIAkJcmV0dXJuIDE7CiAJcGFyZW50ID0gY2dyb3VwX3RvX2RldmNncm91cChwY2cpOwotCXNwaW5fbG9jaygmcGFyZW50LT5sb2NrKTsKLQlyZXQgPSBtYXlfYWNjZXNzX3doaXRlbGlzdChwYXJlbnQsIHdoKTsKLQlzcGluX3VubG9jaygmcGFyZW50LT5sb2NrKTsKLQlyZXR1cm4gcmV0OworCXJldHVybiBtYXlfYWNjZXNzX3doaXRlbGlzdChwYXJlbnQsIHdoKTsKIH0KIAogLyoKQEAgLTM1NywxNyArMzMxLDE0IEBACiBzdGF0aWMgaW50IGRldmNncm91cF91cGRhdGVfYWNjZXNzKHN0cnVjdCBkZXZfY2dyb3VwICpkZXZjZ3JvdXAsCiAJCQkJICAgaW50IGZpbGV0eXBlLCBjb25zdCBjaGFyICpidWZmZXIpCiB7Ci0Jc3RydWN0IGRldl9jZ3JvdXAgKmN1cl9kZXZjZ3JvdXA7CiAJY29uc3QgY2hhciAqYjsKIAljaGFyICplbmRwOwotCWludCByZXR2YWwgPSAwLCBjb3VudDsKKwlpbnQgY291bnQ7CiAJc3RydWN0IGRldl93aGl0ZWxpc3RfaXRlbSB3aDsKIAogCWlmICghY2FwYWJsZShDQVBfU1lTX0FETUlOKSkKIAkJcmV0dXJuIC1FUEVSTTsKIAotCWN1cl9kZXZjZ3JvdXAgPSB0YXNrX2RldmNncm91cChjdXJyZW50KTsKLQogCW1lbXNldCgmd2gsIDAsIHNpemVvZih3aCkpOwogCWIgPSBidWZmZXI7CiAKQEAgLTQzNyw3ICs0MDgsNiBAQAogCX0KIAogaGFuZGxlOgotCXJldHZhbCA9IDA7CiAJc3dpdGNoIChmaWxldHlwZSkgewogCWNhc2UgREVWQ0dfQUxMT1c6CiAJCWlmICghcGFyZW50X2hhc19wZXJtKGRldmNncm91cCwgJndoKSkKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L2lub2RlLmMgYi9zZWN1cml0eS9pbm9kZS5jCmluZGV4IGNhNDk1OGUuLmVmZWE1YTYgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L2lub2RlLmMKKysrIGIvc2VjdXJpdHkvaW5vZGUuYwpAQCAtMjAsOCArMjAsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9uYW1laS5oPgogI2luY2x1ZGUgPGxpbnV4L3NlY3VyaXR5Lmg+Ci0KLSNkZWZpbmUgU0VDVVJJVFlGU19NQUdJQwkweDczNjM2NjczCisjaW5jbHVkZSA8bGludXgvbWFnaWMuaD4KIAogc3RhdGljIHN0cnVjdCB2ZnNtb3VudCAqbW91bnQ7CiBzdGF0aWMgaW50IG1vdW50X2NvdW50OwpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jIGIvc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jCmluZGV4IDRhNzM3NGMuLjNlM2ZkZTdjIDEwMDY0NAotLS0gYS9zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMKKysrIGIvc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jCkBAIC03NSw2ICs3NSw3IEBACiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvc2VsaW51eC5oPgogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisjaW5jbHVkZSA8bGludXgvcG9zaXgtdGltZXJzLmg+CiAKICNpbmNsdWRlICJhdmMuaCIKICNpbmNsdWRlICJvYmpzZWMuaCIKQEAgLTI5MSw2ICsyOTIsNyBAQAogCXN0cnVjdCBza19zZWN1cml0eV9zdHJ1Y3QgKnNzZWMgPSBzay0+c2tfc2VjdXJpdHk7CiAKIAlzay0+c2tfc2VjdXJpdHkgPSBOVUxMOworCXNlbGludXhfbmV0bGJsX3NrX3NlY3VyaXR5X2ZyZWUoc3NlYyk7CiAJa2ZyZWUoc3NlYyk7CiB9CiAKQEAgLTMyNCw3ICszMjYsNyBAQAogCU9wdF9yb290Y29udGV4dCA9IDQsCiB9OwogCi1zdGF0aWMgbWF0Y2hfdGFibGVfdCB0b2tlbnMgPSB7CitzdGF0aWMgY29uc3QgbWF0Y2hfdGFibGVfdCB0b2tlbnMgPSB7CiAJe09wdF9jb250ZXh0LCBDT05URVhUX1NUUiAiJXMifSwKIAl7T3B0X2ZzY29udGV4dCwgRlNDT05URVhUX1NUUiAiJXMifSwKIAl7T3B0X2RlZmNvbnRleHQsIERFRkNPTlRFWFRfU1RSICIlcyJ9LApAQCAtMjEyMSw3ICsyMTIzLDYgQEAKIAlsb25nIGogPSAtMTsKIAlpbnQgZHJvcF90dHkgPSAwOwogCi0JbXV0ZXhfbG9jaygmdHR5X211dGV4KTsKIAl0dHkgPSBnZXRfY3VycmVudF90dHkoKTsKIAlpZiAodHR5KSB7CiAJCWZpbGVfbGlzdF9sb2NrKCk7CkBAIC0yMTM5LDggKzIxNDAsOCBAQAogCQkJfQogCQl9CiAJCWZpbGVfbGlzdF91bmxvY2soKTsKKwkJdHR5X2tyZWZfcHV0KHR0eSk7CiAJfQotCW11dGV4X3VubG9jaygmdHR5X211dGV4KTsKIAkvKiBSZXNldCBjb250cm9sbGluZyB0dHkuICovCiAJaWYgKGRyb3BfdHR5KQogCQlub190dHkoKTsKQEAgLTIzMjIsMTMgKzIzMjMsNyBAQAogCQkJaW5pdHJsaW0gPSBpbml0X3Rhc2suc2lnbmFsLT5ybGltK2k7CiAJCQlybGltLT5ybGltX2N1ciA9IG1pbihybGltLT5ybGltX21heCwgaW5pdHJsaW0tPnJsaW1fY3VyKTsKIAkJfQotCQlpZiAoY3VycmVudC0+c2lnbmFsLT5ybGltW1JMSU1JVF9DUFVdLnJsaW1fY3VyICE9IFJMSU1fSU5GSU5JVFkpIHsKLQkJCS8qCi0JCQkgKiBUaGlzIHdpbGwgY2F1c2UgUkxJTUlUX0NQVSBjYWxjdWxhdGlvbnMKLQkJCSAqIHRvIGJlIHJlZmlndXJlZC4KLQkJCSAqLwotCQkJY3VycmVudC0+aXRfcHJvZl9leHBpcmVzID0gamlmZmllc190b19jcHV0aW1lKDEpOwotCQl9CisJCXVwZGF0ZV9ybGltaXRfY3B1KHJsaW0tPnJsaW1fY3VyKTsKIAl9CiAKIAkvKiBXYWtlIHVwIHRoZSBwYXJlbnQgaWYgaXQgaXMgd2FpdGluZyBzbyB0aGF0IGl0IGNhbgpAQCAtMzgwMSw2ICszNzk2LDcgQEAKIAogc3RhdGljIGludCBzZWxpbnV4X3NvY2tldF9jb25uZWN0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkciAqYWRkcmVzcywgaW50IGFkZHJsZW4pCiB7CisJc3RydWN0IHNvY2sgKnNrID0gc29jay0+c2s7CiAJc3RydWN0IGlub2RlX3NlY3VyaXR5X3N0cnVjdCAqaXNlYzsKIAlpbnQgZXJyOwogCkBAIC0zODE0LDcgKzM4MTAsNiBAQAogCWlzZWMgPSBTT0NLX0lOT0RFKHNvY2spLT5pX3NlY3VyaXR5OwogCWlmIChpc2VjLT5zY2xhc3MgPT0gU0VDQ0xBU1NfVENQX1NPQ0tFVCB8fAogCSAgICBpc2VjLT5zY2xhc3MgPT0gU0VDQ0xBU1NfRENDUF9TT0NLRVQpIHsKLQkJc3RydWN0IHNvY2sgKnNrID0gc29jay0+c2s7CiAJCXN0cnVjdCBhdmNfYXVkaXRfZGF0YSBhZDsKIAkJc3RydWN0IHNvY2thZGRyX2luICphZGRyNCA9IE5VTEw7CiAJCXN0cnVjdCBzb2NrYWRkcl9pbjYgKmFkZHI2ID0gTlVMTDsKQEAgLTM4NDgsNiArMzg0Myw4IEBACiAJCQlnb3RvIG91dDsKIAl9CiAKKwllcnIgPSBzZWxpbnV4X25ldGxibF9zb2NrZXRfY29ubmVjdChzaywgYWRkcmVzcyk7CisKIG91dDoKIAlyZXR1cm4gZXJyOwogfQpAQCAtNDA3NywyMCArNDA3NCwyOCBAQAogfQogCiBzdGF0aWMgaW50IHNlbGludXhfc29ja19yY3Zfc2tiX2NvbXBhdChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsCi0JCQkJICAgICAgIHN0cnVjdCBhdmNfYXVkaXRfZGF0YSAqYWQsCi0JCQkJICAgICAgIHUxNiBmYW1pbHksIGNoYXIgKmFkZHJwKQorCQkJCSAgICAgICB1MTYgZmFtaWx5KQogewogCWludCBlcnI7CiAJc3RydWN0IHNrX3NlY3VyaXR5X3N0cnVjdCAqc2tzZWMgPSBzay0+c2tfc2VjdXJpdHk7CiAJdTMyIHBlZXJfc2lkOwogCXUzMiBza19zaWQgPSBza3NlYy0+c2lkOworCXN0cnVjdCBhdmNfYXVkaXRfZGF0YSBhZDsKKwljaGFyICphZGRycDsKKworCUFWQ19BVURJVF9EQVRBX0lOSVQoJmFkLCBORVQpOworCWFkLnUubmV0Lm5ldGlmID0gc2tiLT5paWY7CisJYWQudS5uZXQuZmFtaWx5ID0gZmFtaWx5OworCWVyciA9IHNlbGludXhfcGFyc2Vfc2tiKHNrYiwgJmFkLCAmYWRkcnAsIDEsIE5VTEwpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CiAKIAlpZiAoc2VsaW51eF9jb21wYXRfbmV0KQotCQllcnIgPSBzZWxpbnV4X3NvY2tfcmN2X3NrYl9pcHRhYmxlc19jb21wYXQoc2ssIHNrYiwgYWQsCisJCWVyciA9IHNlbGludXhfc29ja19yY3Zfc2tiX2lwdGFibGVzX2NvbXBhdChzaywgc2tiLCAmYWQsCiAJCQkJCQkJICAgZmFtaWx5LCBhZGRycCk7CiAJZWxzZQogCQllcnIgPSBhdmNfaGFzX3Blcm0oc2tfc2lkLCBza2ItPnNlY21hcmssIFNFQ0NMQVNTX1BBQ0tFVCwKLQkJCQkgICBQQUNLRVRfX1JFQ1YsIGFkKTsKKwkJCQkgICBQQUNLRVRfX1JFQ1YsICZhZCk7CiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIApAQCAtNDA5OSwxMiArNDEwNCwxNCBAQAogCQlpZiAoZXJyKQogCQkJcmV0dXJuIGVycjsKIAkJZXJyID0gYXZjX2hhc19wZXJtKHNrX3NpZCwgcGVlcl9zaWQsCi0JCQkJICAgU0VDQ0xBU1NfUEVFUiwgUEVFUl9fUkVDViwgYWQpOworCQkJCSAgIFNFQ0NMQVNTX1BFRVIsIFBFRVJfX1JFQ1YsICZhZCk7CisJCWlmIChlcnIpCisJCQlzZWxpbnV4X25ldGxibF9lcnIoc2tiLCBlcnIsIDApOwogCX0gZWxzZSB7Ci0JCWVyciA9IHNlbGludXhfbmV0bGJsX3NvY2tfcmN2X3NrYihza3NlYywgc2tiLCBmYW1pbHksIGFkKTsKKwkJZXJyID0gc2VsaW51eF9uZXRsYmxfc29ja19yY3Zfc2tiKHNrc2VjLCBza2IsIGZhbWlseSwgJmFkKTsKIAkJaWYgKGVycikKIAkJCXJldHVybiBlcnI7Ci0JCWVyciA9IHNlbGludXhfeGZybV9zb2NrX3Jjdl9za2Ioc2tzZWMtPnNpZCwgc2tiLCBhZCk7CisJCWVyciA9IHNlbGludXhfeGZybV9zb2NrX3Jjdl9za2Ioc2tzZWMtPnNpZCwgc2tiLCAmYWQpOwogCX0KIAogCXJldHVybiBlcnI7CkBAIC00MTE4LDYgKzQxMjUsOCBAQAogCXUzMiBza19zaWQgPSBza3NlYy0+c2lkOwogCXN0cnVjdCBhdmNfYXVkaXRfZGF0YSBhZDsKIAljaGFyICphZGRycDsKKwl1OCBzZWNtYXJrX2FjdGl2ZTsKKwl1OCBwZWVybGJsX2FjdGl2ZTsKIAogCWlmIChmYW1pbHkgIT0gUEZfSU5FVCAmJiBmYW1pbHkgIT0gUEZfSU5FVDYpCiAJCXJldHVybiAwOwpAQCAtNDEyNiw2ICs0MTM1LDE4IEBACiAJaWYgKGZhbWlseSA9PSBQRl9JTkVUNiAmJiBza2ItPnByb3RvY29sID09IGh0b25zKEVUSF9QX0lQKSkKIAkJZmFtaWx5ID0gUEZfSU5FVDsKIAorCS8qIElmIGFueSBzb3J0IG9mIGNvbXBhdGliaWxpdHkgbW9kZSBpcyBlbmFibGVkIHRoZW4gaGFuZG9mZiBwcm9jZXNzaW5nCisJICogdG8gdGhlIHNlbGludXhfc29ja19yY3Zfc2tiX2NvbXBhdCgpIGZ1bmN0aW9uIHRvIGRlYWwgd2l0aCB0aGUKKwkgKiBzcGVjaWFsIGhhbmRsaW5nLiAgV2UgZG8gdGhpcyBpbiBhbiBhdHRlbXB0IHRvIGtlZXAgdGhpcyBmdW5jdGlvbgorCSAqIGFzIGZhc3QgYW5kIGFzIGNsZWFuIGFzIHBvc3NpYmxlLiAqLworCWlmIChzZWxpbnV4X2NvbXBhdF9uZXQgfHwgIXNlbGludXhfcG9saWN5Y2FwX25ldHBlZXIpCisJCXJldHVybiBzZWxpbnV4X3NvY2tfcmN2X3NrYl9jb21wYXQoc2ssIHNrYiwgZmFtaWx5KTsKKworCXNlY21hcmtfYWN0aXZlID0gc2VsaW51eF9zZWNtYXJrX2VuYWJsZWQoKTsKKwlwZWVybGJsX2FjdGl2ZSA9IG5ldGxibF9lbmFibGVkKCkgfHwgc2VsaW51eF94ZnJtX2VuYWJsZWQoKTsKKwlpZiAoIXNlY21hcmtfYWN0aXZlICYmICFwZWVybGJsX2FjdGl2ZSkKKwkJcmV0dXJuIDA7CisKIAlBVkNfQVVESVRfREFUQV9JTklUKCZhZCwgTkVUKTsKIAlhZC51Lm5ldC5uZXRpZiA9IHNrYi0+aWlmOwogCWFkLnUubmV0LmZhbWlseSA9IGZhbWlseTsKQEAgLTQxMzMsMTUgKzQxNTQsNyBAQAogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CiAKLQkvKiBJZiBhbnkgc29ydCBvZiBjb21wYXRpYmlsaXR5IG1vZGUgaXMgZW5hYmxlZCB0aGVuIGhhbmRvZmYgcHJvY2Vzc2luZwotCSAqIHRvIHRoZSBzZWxpbnV4X3NvY2tfcmN2X3NrYl9jb21wYXQoKSBmdW5jdGlvbiB0byBkZWFsIHdpdGggdGhlCi0JICogc3BlY2lhbCBoYW5kbGluZy4gIFdlIGRvIHRoaXMgaW4gYW4gYXR0ZW1wdCB0byBrZWVwIHRoaXMgZnVuY3Rpb24KLQkgKiBhcyBmYXN0IGFuZCBhcyBjbGVhbiBhcyBwb3NzaWJsZS4gKi8KLQlpZiAoc2VsaW51eF9jb21wYXRfbmV0IHx8ICFzZWxpbnV4X3BvbGljeWNhcF9uZXRwZWVyKQotCQlyZXR1cm4gc2VsaW51eF9zb2NrX3Jjdl9za2JfY29tcGF0KHNrLCBza2IsICZhZCwKLQkJCQkJCSAgIGZhbWlseSwgYWRkcnApOwotCi0JaWYgKG5ldGxibF9lbmFibGVkKCkgfHwgc2VsaW51eF94ZnJtX2VuYWJsZWQoKSkgeworCWlmIChwZWVybGJsX2FjdGl2ZSkgewogCQl1MzIgcGVlcl9zaWQ7CiAKIAkJZXJyID0gc2VsaW51eF9za2JfcGVlcmxibF9zaWQoc2tiLCBmYW1pbHksICZwZWVyX3NpZCk7CkBAIC00MTQ5LDEzICs0MTYyLDE3IEBACiAJCQlyZXR1cm4gZXJyOwogCQllcnIgPSBzZWxpbnV4X2luZXRfc3lzX3Jjdl9za2Ioc2tiLT5paWYsIGFkZHJwLCBmYW1pbHksCiAJCQkJCSAgICAgICBwZWVyX3NpZCwgJmFkKTsKLQkJaWYgKGVycikKKwkJaWYgKGVycikgeworCQkJc2VsaW51eF9uZXRsYmxfZXJyKHNrYiwgZXJyLCAwKTsKIAkJCXJldHVybiBlcnI7CisJCX0KIAkJZXJyID0gYXZjX2hhc19wZXJtKHNrX3NpZCwgcGVlcl9zaWQsIFNFQ0NMQVNTX1BFRVIsCiAJCQkJICAgUEVFUl9fUkVDViwgJmFkKTsKKwkJaWYgKGVycikKKwkJCXNlbGludXhfbmV0bGJsX2Vycihza2IsIGVyciwgMCk7CiAJfQogCi0JaWYgKHNlbGludXhfc2VjbWFya19lbmFibGVkKCkpIHsKKwlpZiAoc2VjbWFya19hY3RpdmUpIHsKIAkJZXJyID0gYXZjX2hhc19wZXJtKHNrX3NpZCwgc2tiLT5zZWNtYXJrLCBTRUNDTEFTU19QQUNLRVQsCiAJCQkJICAgUEFDS0VUX19SRUNWLCAmYWQpOwogCQlpZiAoZXJyKQpAQCAtNDIxNCwxMCArNDIzMSwxMiBAQAogCXUzMiBwZWVyX3NlY2lkID0gU0VDU0lEX05VTEw7CiAJdTE2IGZhbWlseTsKIAotCWlmIChzb2NrKQorCWlmIChza2IgJiYgc2tiLT5wcm90b2NvbCA9PSBodG9ucyhFVEhfUF9JUCkpCisJCWZhbWlseSA9IFBGX0lORVQ7CisJZWxzZSBpZiAoc2tiICYmIHNrYi0+cHJvdG9jb2wgPT0gaHRvbnMoRVRIX1BfSVBWNikpCisJCWZhbWlseSA9IFBGX0lORVQ2OworCWVsc2UgaWYgKHNvY2spCiAJCWZhbWlseSA9IHNvY2stPnNrLT5za19mYW1pbHk7Ci0JZWxzZSBpZiAoc2tiICYmIHNrYi0+c2spCi0JCWZhbWlseSA9IHNrYi0+c2stPnNrX2ZhbWlseTsKIAllbHNlCiAJCWdvdG8gb3V0OwogCkBAIC00Mjc1LDggKzQyOTQsNiBAQAogCSAgICBzay0+c2tfZmFtaWx5ID09IFBGX1VOSVgpCiAJCWlzZWMtPnNpZCA9IHNrc2VjLT5zaWQ7CiAJc2tzZWMtPnNjbGFzcyA9IGlzZWMtPnNjbGFzczsKLQotCXNlbGludXhfbmV0bGJsX3NvY2tfZ3JhZnQoc2ssIHBhcmVudCk7CiB9CiAKIHN0YXRpYyBpbnQgc2VsaW51eF9pbmV0X2Nvbm5fcmVxdWVzdChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsCkBAIC00Mjg0LDEwICs0MzAxLDE1IEBACiB7CiAJc3RydWN0IHNrX3NlY3VyaXR5X3N0cnVjdCAqc2tzZWMgPSBzay0+c2tfc2VjdXJpdHk7CiAJaW50IGVycjsKKwl1MTYgZmFtaWx5ID0gc2stPnNrX2ZhbWlseTsKIAl1MzIgbmV3c2lkOwogCXUzMiBwZWVyc2lkOwogCi0JZXJyID0gc2VsaW51eF9za2JfcGVlcmxibF9zaWQoc2tiLCBzay0+c2tfZmFtaWx5LCAmcGVlcnNpZCk7CisJLyogaGFuZGxlIG1hcHBlZCBJUHY0IHBhY2tldHMgYXJyaXZpbmcgdmlhIElQdjYgc29ja2V0cyAqLworCWlmIChmYW1pbHkgPT0gUEZfSU5FVDYgJiYgc2tiLT5wcm90b2NvbCA9PSBodG9ucyhFVEhfUF9JUCkpCisJCWZhbWlseSA9IFBGX0lORVQ7CisKKwllcnIgPSBzZWxpbnV4X3NrYl9wZWVybGJsX3NpZChza2IsIGZhbWlseSwgJnBlZXJzaWQpOwogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CiAJaWYgKHBlZXJzaWQgPT0gU0VDU0lEX05VTEwpIHsKQEAgLTQzMjIsMTIgKzQzNDQsMTggQEAKIAlzZWxpbnV4X25ldGxibF9za19zZWN1cml0eV9yZXNldChuZXdza3NlYywgcmVxLT5yc2tfb3BzLT5mYW1pbHkpOwogfQogCi1zdGF0aWMgdm9pZCBzZWxpbnV4X2luZXRfY29ubl9lc3RhYmxpc2hlZChzdHJ1Y3Qgc29jayAqc2ssCi0JCQkJc3RydWN0IHNrX2J1ZmYgKnNrYikKK3N0YXRpYyB2b2lkIHNlbGludXhfaW5ldF9jb25uX2VzdGFibGlzaGVkKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKKwl1MTYgZmFtaWx5ID0gc2stPnNrX2ZhbWlseTsKIAlzdHJ1Y3Qgc2tfc2VjdXJpdHlfc3RydWN0ICpza3NlYyA9IHNrLT5za19zZWN1cml0eTsKIAotCXNlbGludXhfc2tiX3BlZXJsYmxfc2lkKHNrYiwgc2stPnNrX2ZhbWlseSwgJnNrc2VjLT5wZWVyX3NpZCk7CisJLyogaGFuZGxlIG1hcHBlZCBJUHY0IHBhY2tldHMgYXJyaXZpbmcgdmlhIElQdjYgc29ja2V0cyAqLworCWlmIChmYW1pbHkgPT0gUEZfSU5FVDYgJiYgc2tiLT5wcm90b2NvbCA9PSBodG9ucyhFVEhfUF9JUCkpCisJCWZhbWlseSA9IFBGX0lORVQ7CisKKwlzZWxpbnV4X3NrYl9wZWVybGJsX3NpZChza2IsIGZhbWlseSwgJnNrc2VjLT5wZWVyX3NpZCk7CisKKwlzZWxpbnV4X25ldGxibF9pbmV0X2Nvbm5fZXN0YWJsaXNoZWQoc2ssIGZhbWlseSk7CiB9CiAKIHN0YXRpYyB2b2lkIHNlbGludXhfcmVxX2NsYXNzaWZ5X2Zsb3coY29uc3Qgc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLApAQCAtNDM3NywzOSArNDQwNSw1NCBAQAogc3RhdGljIHVuc2lnbmVkIGludCBzZWxpbnV4X2lwX2ZvcndhcmQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGlmaW5kZXgsCiAJCQkJICAgICAgIHUxNiBmYW1pbHkpCiB7CisJaW50IGVycjsKIAljaGFyICphZGRycDsKIAl1MzIgcGVlcl9zaWQ7CiAJc3RydWN0IGF2Y19hdWRpdF9kYXRhIGFkOwogCXU4IHNlY21hcmtfYWN0aXZlOworCXU4IG5ldGxibF9hY3RpdmU7CiAJdTggcGVlcmxibF9hY3RpdmU7CiAKIAlpZiAoIXNlbGludXhfcG9saWN5Y2FwX25ldHBlZXIpCiAJCXJldHVybiBORl9BQ0NFUFQ7CiAKIAlzZWNtYXJrX2FjdGl2ZSA9IHNlbGludXhfc2VjbWFya19lbmFibGVkKCk7Ci0JcGVlcmxibF9hY3RpdmUgPSBuZXRsYmxfZW5hYmxlZCgpIHx8IHNlbGludXhfeGZybV9lbmFibGVkKCk7CisJbmV0bGJsX2FjdGl2ZSA9IG5ldGxibF9lbmFibGVkKCk7CisJcGVlcmxibF9hY3RpdmUgPSBuZXRsYmxfYWN0aXZlIHx8IHNlbGludXhfeGZybV9lbmFibGVkKCk7CiAJaWYgKCFzZWNtYXJrX2FjdGl2ZSAmJiAhcGVlcmxibF9hY3RpdmUpCiAJCXJldHVybiBORl9BQ0NFUFQ7CiAKKwlpZiAoc2VsaW51eF9za2JfcGVlcmxibF9zaWQoc2tiLCBmYW1pbHksICZwZWVyX3NpZCkgIT0gMCkKKwkJcmV0dXJuIE5GX0RST1A7CisKIAlBVkNfQVVESVRfREFUQV9JTklUKCZhZCwgTkVUKTsKIAlhZC51Lm5ldC5uZXRpZiA9IGlmaW5kZXg7CiAJYWQudS5uZXQuZmFtaWx5ID0gZmFtaWx5OwogCWlmIChzZWxpbnV4X3BhcnNlX3NrYihza2IsICZhZCwgJmFkZHJwLCAxLCBOVUxMKSAhPSAwKQogCQlyZXR1cm4gTkZfRFJPUDsKIAotCWlmIChzZWxpbnV4X3NrYl9wZWVybGJsX3NpZChza2IsIGZhbWlseSwgJnBlZXJfc2lkKSAhPSAwKQotCQlyZXR1cm4gTkZfRFJPUDsKLQotCWlmIChwZWVybGJsX2FjdGl2ZSkKLQkJaWYgKHNlbGludXhfaW5ldF9zeXNfcmN2X3NrYihpZmluZGV4LCBhZGRycCwgZmFtaWx5LAotCQkJCQkgICAgIHBlZXJfc2lkLCAmYWQpICE9IDApCisJaWYgKHBlZXJsYmxfYWN0aXZlKSB7CisJCWVyciA9IHNlbGludXhfaW5ldF9zeXNfcmN2X3NrYihpZmluZGV4LCBhZGRycCwgZmFtaWx5LAorCQkJCQkgICAgICAgcGVlcl9zaWQsICZhZCk7CisJCWlmIChlcnIpIHsKKwkJCXNlbGludXhfbmV0bGJsX2Vycihza2IsIGVyciwgMSk7CiAJCQlyZXR1cm4gTkZfRFJPUDsKKwkJfQorCX0KIAogCWlmIChzZWNtYXJrX2FjdGl2ZSkKIAkJaWYgKGF2Y19oYXNfcGVybShwZWVyX3NpZCwgc2tiLT5zZWNtYXJrLAogCQkJCSBTRUNDTEFTU19QQUNLRVQsIFBBQ0tFVF9fRk9SV0FSRF9JTiwgJmFkKSkKIAkJCXJldHVybiBORl9EUk9QOwogCisJaWYgKG5ldGxibF9hY3RpdmUpCisJCS8qIHdlIGRvIHRoaXMgaW4gdGhlIEZPUldBUkQgcGF0aCBhbmQgbm90IHRoZSBQT1NUX1JPVVRJTkcKKwkJICogcGF0aCBiZWNhdXNlIHdlIHdhbnQgdG8gbWFrZSBzdXJlIHdlIGFwcGx5IHRoZSBuZWNlc3NhcnkKKwkJICogbGFiZWxpbmcgYmVmb3JlIElQc2VjIGlzIGFwcGxpZWQgc28gd2UgY2FuIGxldmVyYWdlIEFICisJCSAqIHByb3RlY3Rpb24gKi8KKwkJaWYgKHNlbGludXhfbmV0bGJsX3NrYnVmZl9zZXRzaWQoc2tiLCBmYW1pbHksIHBlZXJfc2lkKSAhPSAwKQorCQkJcmV0dXJuIE5GX0RST1A7CisKIAlyZXR1cm4gTkZfQUNDRVBUOwogfQogCkBAIC00NDMzLDYgKzQ0NzYsMzcgQEAKIH0KICNlbmRpZgkvKiBJUFY2ICovCiAKK3N0YXRpYyB1bnNpZ25lZCBpbnQgc2VsaW51eF9pcF9vdXRwdXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkgICAgICB1MTYgZmFtaWx5KQoreworCXUzMiBzaWQ7CisKKwlpZiAoIW5ldGxibF9lbmFibGVkKCkpCisJCXJldHVybiBORl9BQ0NFUFQ7CisKKwkvKiB3ZSBkbyB0aGlzIGluIHRoZSBMT0NBTF9PVVQgcGF0aCBhbmQgbm90IHRoZSBQT1NUX1JPVVRJTkcgcGF0aAorCSAqIGJlY2F1c2Ugd2Ugd2FudCB0byBtYWtlIHN1cmUgd2UgYXBwbHkgdGhlIG5lY2Vzc2FyeSBsYWJlbGluZworCSAqIGJlZm9yZSBJUHNlYyBpcyBhcHBsaWVkIHNvIHdlIGNhbiBsZXZlcmFnZSBBSCBwcm90ZWN0aW9uICovCisJaWYgKHNrYi0+c2spIHsKKwkJc3RydWN0IHNrX3NlY3VyaXR5X3N0cnVjdCAqc2tzZWMgPSBza2ItPnNrLT5za19zZWN1cml0eTsKKwkJc2lkID0gc2tzZWMtPnNpZDsKKwl9IGVsc2UKKwkJc2lkID0gU0VDSU5JVFNJRF9LRVJORUw7CisJaWYgKHNlbGludXhfbmV0bGJsX3NrYnVmZl9zZXRzaWQoc2tiLCBmYW1pbHksIHNpZCkgIT0gMCkKKwkJcmV0dXJuIE5GX0RST1A7CisKKwlyZXR1cm4gTkZfQUNDRVBUOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IHNlbGludXhfaXB2NF9vdXRwdXQodW5zaWduZWQgaW50IGhvb2tudW0sCisJCQkJCXN0cnVjdCBza19idWZmICpza2IsCisJCQkJCWNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICppbiwKKwkJCQkJY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKm91dCwKKwkJCQkJaW50ICgqb2tmbikoc3RydWN0IHNrX2J1ZmYgKikpCit7CisJcmV0dXJuIHNlbGludXhfaXBfb3V0cHV0KHNrYiwgUEZfSU5FVCk7Cit9CisKIHN0YXRpYyBpbnQgc2VsaW51eF9pcF9wb3N0cm91dGVfaXB0YWJsZXNfY29tcGF0KHN0cnVjdCBzb2NrICpzaywKIAkJCQkJCWludCBpZmluZGV4LAogCQkJCQkJc3RydWN0IGF2Y19hdWRpdF9kYXRhICphZCwKQEAgLTQ1MDAsMzAgKzQ1NzQsMzYgQEAKIAogc3RhdGljIHVuc2lnbmVkIGludCBzZWxpbnV4X2lwX3Bvc3Ryb3V0ZV9jb21wYXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCQkJCWludCBpZmluZGV4LAotCQkJCQkJc3RydWN0IGF2Y19hdWRpdF9kYXRhICphZCwKLQkJCQkJCXUxNiBmYW1pbHksCi0JCQkJCQljaGFyICphZGRycCwKLQkJCQkJCXU4IHByb3RvKQorCQkJCQkJdTE2IGZhbWlseSkKIHsKIAlzdHJ1Y3Qgc29jayAqc2sgPSBza2ItPnNrOwogCXN0cnVjdCBza19zZWN1cml0eV9zdHJ1Y3QgKnNrc2VjOworCXN0cnVjdCBhdmNfYXVkaXRfZGF0YSBhZDsKKwljaGFyICphZGRycDsKKwl1OCBwcm90bzsKIAogCWlmIChzayA9PSBOVUxMKQogCQlyZXR1cm4gTkZfQUNDRVBUOwogCXNrc2VjID0gc2stPnNrX3NlY3VyaXR5OwogCisJQVZDX0FVRElUX0RBVEFfSU5JVCgmYWQsIE5FVCk7CisJYWQudS5uZXQubmV0aWYgPSBpZmluZGV4OworCWFkLnUubmV0LmZhbWlseSA9IGZhbWlseTsKKwlpZiAoc2VsaW51eF9wYXJzZV9za2Ioc2tiLCAmYWQsICZhZGRycCwgMCwgJnByb3RvKSkKKwkJcmV0dXJuIE5GX0RST1A7CisKIAlpZiAoc2VsaW51eF9jb21wYXRfbmV0KSB7CiAJCWlmIChzZWxpbnV4X2lwX3Bvc3Ryb3V0ZV9pcHRhYmxlc19jb21wYXQoc2tiLT5zaywgaWZpbmRleCwKLQkJCQkJCQkgYWQsIGZhbWlseSwgYWRkcnApKQorCQkJCQkJCSAmYWQsIGZhbWlseSwgYWRkcnApKQogCQkJcmV0dXJuIE5GX0RST1A7CiAJfSBlbHNlIHsKIAkJaWYgKGF2Y19oYXNfcGVybShza3NlYy0+c2lkLCBza2ItPnNlY21hcmssCi0JCQkJIFNFQ0NMQVNTX1BBQ0tFVCwgUEFDS0VUX19TRU5ELCBhZCkpCisJCQkJIFNFQ0NMQVNTX1BBQ0tFVCwgUEFDS0VUX19TRU5ELCAmYWQpKQogCQkJcmV0dXJuIE5GX0RST1A7CiAJfQogCiAJaWYgKHNlbGludXhfcG9saWN5Y2FwX25ldHBlZXIpCi0JCWlmIChzZWxpbnV4X3hmcm1fcG9zdHJvdXRlX2xhc3Qoc2tzZWMtPnNpZCwgc2tiLCBhZCwgcHJvdG8pKQorCQlpZiAoc2VsaW51eF94ZnJtX3Bvc3Ryb3V0ZV9sYXN0KHNrc2VjLT5zaWQsIHNrYiwgJmFkLCBwcm90bykpCiAJCQlyZXR1cm4gTkZfRFJPUDsKIAogCXJldHVybiBORl9BQ0NFUFQ7CkBAIC00NTM3LDIzICs0NjE3LDE1IEBACiAJc3RydWN0IHNvY2sgKnNrOwogCXN0cnVjdCBhdmNfYXVkaXRfZGF0YSBhZDsKIAljaGFyICphZGRycDsKLQl1OCBwcm90bzsKIAl1OCBzZWNtYXJrX2FjdGl2ZTsKIAl1OCBwZWVybGJsX2FjdGl2ZTsKIAotCUFWQ19BVURJVF9EQVRBX0lOSVQoJmFkLCBORVQpOwotCWFkLnUubmV0Lm5ldGlmID0gaWZpbmRleDsKLQlhZC51Lm5ldC5mYW1pbHkgPSBmYW1pbHk7Ci0JaWYgKHNlbGludXhfcGFyc2Vfc2tiKHNrYiwgJmFkLCAmYWRkcnAsIDAsICZwcm90bykpCi0JCXJldHVybiBORl9EUk9QOwotCiAJLyogSWYgYW55IHNvcnQgb2YgY29tcGF0aWJpbGl0eSBtb2RlIGlzIGVuYWJsZWQgdGhlbiBoYW5kb2ZmIHByb2Nlc3NpbmcKIAkgKiB0byB0aGUgc2VsaW51eF9pcF9wb3N0cm91dGVfY29tcGF0KCkgZnVuY3Rpb24gdG8gZGVhbCB3aXRoIHRoZQogCSAqIHNwZWNpYWwgaGFuZGxpbmcuICBXZSBkbyB0aGlzIGluIGFuIGF0dGVtcHQgdG8ga2VlcCB0aGlzIGZ1bmN0aW9uCiAJICogYXMgZmFzdCBhbmQgYXMgY2xlYW4gYXMgcG9zc2libGUuICovCiAJaWYgKHNlbGludXhfY29tcGF0X25ldCB8fCAhc2VsaW51eF9wb2xpY3ljYXBfbmV0cGVlcikKLQkJcmV0dXJuIHNlbGludXhfaXBfcG9zdHJvdXRlX2NvbXBhdChza2IsIGlmaW5kZXgsICZhZCwKLQkJCQkJCSAgIGZhbWlseSwgYWRkcnAsIHByb3RvKTsKKwkJcmV0dXJuIHNlbGludXhfaXBfcG9zdHJvdXRlX2NvbXBhdChza2IsIGlmaW5kZXgsIGZhbWlseSk7CiAKIAkvKiBJZiBza2ItPmRzdC0+eGZybSBpcyBub24tTlVMTCB0aGVuIHRoZSBwYWNrZXQgaXMgdW5kZXJnb2luZyBhbiBJUHNlYwogCSAqIHBhY2tldCB0cmFuc2Zvcm1hdGlvbiBzbyBhbGxvdyB0aGUgcGFja2V0IHRvIHBhc3Mgd2l0aG91dCBhbnkgY2hlY2tzCkBAIC00NTY5LDIxICs0NjQxLDQ1IEBACiAJaWYgKCFzZWNtYXJrX2FjdGl2ZSAmJiAhcGVlcmxibF9hY3RpdmUpCiAJCXJldHVybiBORl9BQ0NFUFQ7CiAKLQkvKiBpZiB0aGUgcGFja2V0IGlzIGxvY2FsbHkgZ2VuZXJhdGVkIChza2ItPnNrICE9IE5VTEwpIHRoZW4gdXNlIHRoZQotCSAqIHNvY2tldCdzIGxhYmVsIGFzIHRoZSBwZWVyIGxhYmVsLCBvdGhlcndpc2UgdGhlIHBhY2tldCBpcyBiZWluZwotCSAqIGZvcndhcmRlZCB0aHJvdWdoIHRoaXMgc3lzdGVtIGFuZCB3ZSBuZWVkIHRvIGZldGNoIHRoZSBwZWVyIGxhYmVsCi0JICogZGlyZWN0bHkgZnJvbSB0aGUgcGFja2V0ICovCisJLyogaWYgdGhlIHBhY2tldCBpcyBiZWluZyBmb3J3YXJkZWQgdGhlbiBnZXQgdGhlIHBlZXIgbGFiZWwgZnJvbSB0aGUKKwkgKiBwYWNrZXQgaXRzZWxmOyBvdGhlcndpc2UgY2hlY2sgdG8gc2VlIGlmIGl0IGlzIGZyb20gYSBsb2NhbAorCSAqIGFwcGxpY2F0aW9uIG9yIHRoZSBrZXJuZWwsIGlmIGZyb20gYW4gYXBwbGljYXRpb24gZ2V0IHRoZSBwZWVyIGxhYmVsCisJICogZnJvbSB0aGUgc2VuZGluZyBzb2NrZXQsIG90aGVyd2lzZSB1c2UgdGhlIGtlcm5lbCdzIHNpZCAqLwogCXNrID0gc2tiLT5zazsKLQlpZiAoc2spIHsKKwlpZiAoc2sgPT0gTlVMTCkgeworCQlzd2l0Y2ggKGZhbWlseSkgeworCQljYXNlIFBGX0lORVQ6CisJCQlpZiAoSVBDQihza2IpLT5mbGFncyAmIElQU0tCX0ZPUldBUkRFRCkKKwkJCQlzZWNtYXJrX3Blcm0gPSBQQUNLRVRfX0ZPUldBUkRfT1VUOworCQkJZWxzZQorCQkJCXNlY21hcmtfcGVybSA9IFBBQ0tFVF9fU0VORDsKKwkJCWJyZWFrOworCQljYXNlIFBGX0lORVQ2OgorCQkJaWYgKElQNkNCKHNrYiktPmZsYWdzICYgSVA2U0tCX0ZPUldBUkRFRCkKKwkJCQlzZWNtYXJrX3Blcm0gPSBQQUNLRVRfX0ZPUldBUkRfT1VUOworCQkJZWxzZQorCQkJCXNlY21hcmtfcGVybSA9IFBBQ0tFVF9fU0VORDsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcmV0dXJuIE5GX0RST1A7CisJCX0KKwkJaWYgKHNlY21hcmtfcGVybSA9PSBQQUNLRVRfX0ZPUldBUkRfT1VUKSB7CisJCQlpZiAoc2VsaW51eF9za2JfcGVlcmxibF9zaWQoc2tiLCBmYW1pbHksICZwZWVyX3NpZCkpCisJCQkJcmV0dXJuIE5GX0RST1A7CisJCX0gZWxzZQorCQkJcGVlcl9zaWQgPSBTRUNJTklUU0lEX0tFUk5FTDsKKwl9IGVsc2UgewogCQlzdHJ1Y3Qgc2tfc2VjdXJpdHlfc3RydWN0ICpza3NlYyA9IHNrLT5za19zZWN1cml0eTsKIAkJcGVlcl9zaWQgPSBza3NlYy0+c2lkOwogCQlzZWNtYXJrX3Blcm0gPSBQQUNLRVRfX1NFTkQ7Ci0JfSBlbHNlIHsKLQkJaWYgKHNlbGludXhfc2tiX3BlZXJsYmxfc2lkKHNrYiwgZmFtaWx5LCAmcGVlcl9zaWQpKQotCQkJCXJldHVybiBORl9EUk9QOwotCQlzZWNtYXJrX3Blcm0gPSBQQUNLRVRfX0ZPUldBUkRfT1VUOwogCX0KIAorCUFWQ19BVURJVF9EQVRBX0lOSVQoJmFkLCBORVQpOworCWFkLnUubmV0Lm5ldGlmID0gaWZpbmRleDsKKwlhZC51Lm5ldC5mYW1pbHkgPSBmYW1pbHk7CisJaWYgKHNlbGludXhfcGFyc2Vfc2tiKHNrYiwgJmFkLCAmYWRkcnAsIDAsIE5VTEwpKQorCQlyZXR1cm4gTkZfRFJPUDsKKwogCWlmIChzZWNtYXJrX2FjdGl2ZSkKIAkJaWYgKGF2Y19oYXNfcGVybShwZWVyX3NpZCwgc2tiLT5zZWNtYXJrLAogCQkJCSBTRUNDTEFTU19QQUNLRVQsIHNlY21hcmtfcGVybSwgJmFkKSkKQEAgLTU2NTcsNiArNTc1MywxMyBAQAogCQkucGYgPQkJUEZfSU5FVCwKIAkJLmhvb2tudW0gPQlORl9JTkVUX0ZPUldBUkQsCiAJCS5wcmlvcml0eSA9CU5GX0lQX1BSSV9TRUxJTlVYX0ZJUlNULAorCX0sCisJeworCQkuaG9vayA9CQlzZWxpbnV4X2lwdjRfb3V0cHV0LAorCQkub3duZXIgPQlUSElTX01PRFVMRSwKKwkJLnBmID0JCVBGX0lORVQsCisJCS5ob29rbnVtID0JTkZfSU5FVF9MT0NBTF9PVVQsCisJCS5wcmlvcml0eSA9CU5GX0lQX1BSSV9TRUxJTlVYX0ZJUlNULAogCX0KIH07CiAKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3NlbGludXgvaW5jbHVkZS9uZXRsYWJlbC5oIGIvc2VjdXJpdHkvc2VsaW51eC9pbmNsdWRlL25ldGxhYmVsLmgKaW5kZXggNDg3YTdkOC4uYjkxM2M4ZCAxMDA2NDQKLS0tIGEvc2VjdXJpdHkvc2VsaW51eC9pbmNsdWRlL25ldGxhYmVsLmgKKysrIGIvc2VjdXJpdHkvc2VsaW51eC9pbmNsdWRlL25ldGxhYmVsLmgKQEAgLTM5LDYgKzM5LDkgQEAKICNpZmRlZiBDT05GSUdfTkVUTEFCRUwKIHZvaWQgc2VsaW51eF9uZXRsYmxfY2FjaGVfaW52YWxpZGF0ZSh2b2lkKTsKIAordm9pZCBzZWxpbnV4X25ldGxibF9lcnIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGVycm9yLCBpbnQgZ2F0ZXdheSk7CisKK3ZvaWQgc2VsaW51eF9uZXRsYmxfc2tfc2VjdXJpdHlfZnJlZShzdHJ1Y3Qgc2tfc2VjdXJpdHlfc3RydWN0ICpzc2VjKTsKIHZvaWQgc2VsaW51eF9uZXRsYmxfc2tfc2VjdXJpdHlfcmVzZXQoc3RydWN0IHNrX3NlY3VyaXR5X3N0cnVjdCAqc3NlYywKIAkJCQkgICAgICBpbnQgZmFtaWx5KTsKIApAQCAtNDYsOCArNDksMTEgQEAKIAkJCQkgdTE2IGZhbWlseSwKIAkJCQkgdTMyICp0eXBlLAogCQkJCSB1MzIgKnNpZCk7CitpbnQgc2VsaW51eF9uZXRsYmxfc2tidWZmX3NldHNpZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCSB1MTYgZmFtaWx5LAorCQkJCSB1MzIgc2lkKTsKIAotdm9pZCBzZWxpbnV4X25ldGxibF9zb2NrX2dyYWZ0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNvY2tldCAqc29jayk7Cit2b2lkIHNlbGludXhfbmV0bGJsX2luZXRfY29ubl9lc3RhYmxpc2hlZChzdHJ1Y3Qgc29jayAqc2ssIHUxNiBmYW1pbHkpOwogaW50IHNlbGludXhfbmV0bGJsX3NvY2tldF9wb3N0X2NyZWF0ZShzdHJ1Y3Qgc29ja2V0ICpzb2NrKTsKIGludCBzZWxpbnV4X25ldGxibF9pbm9kZV9wZXJtaXNzaW9uKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBtYXNrKTsKIGludCBzZWxpbnV4X25ldGxibF9zb2NrX3Jjdl9za2Ioc3RydWN0IHNrX3NlY3VyaXR5X3N0cnVjdCAqc2tzZWMsCkBAIC01NywxMiArNjMsMjcgQEAKIGludCBzZWxpbnV4X25ldGxibF9zb2NrZXRfc2V0c29ja29wdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLAogCQkJCSAgICAgaW50IGxldmVsLAogCQkJCSAgICAgaW50IG9wdG5hbWUpOworaW50IHNlbGludXhfbmV0bGJsX3NvY2tldF9jb25uZWN0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNvY2thZGRyICphZGRyKTsKKwogI2Vsc2UKIHN0YXRpYyBpbmxpbmUgdm9pZCBzZWxpbnV4X25ldGxibF9jYWNoZV9pbnZhbGlkYXRlKHZvaWQpCiB7CiAJcmV0dXJuOwogfQogCitzdGF0aWMgaW5saW5lIHZvaWQgc2VsaW51eF9uZXRsYmxfZXJyKHN0cnVjdCBza19idWZmICpza2IsCisJCQkJICAgICAgaW50IGVycm9yLAorCQkJCSAgICAgIGludCBnYXRld2F5KQoreworCXJldHVybjsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHNlbGludXhfbmV0bGJsX3NrX3NlY3VyaXR5X2ZyZWUoCisJCQkJCSAgICAgICBzdHJ1Y3Qgc2tfc2VjdXJpdHlfc3RydWN0ICpzc2VjKQoreworCXJldHVybjsKK30KKwogc3RhdGljIGlubGluZSB2b2lkIHNlbGludXhfbmV0bGJsX3NrX3NlY3VyaXR5X3Jlc2V0KAogCQkJCQkgICAgICAgc3RydWN0IHNrX3NlY3VyaXR5X3N0cnVjdCAqc3NlYywKIAkJCQkJICAgICAgIGludCBmYW1pbHkpCkBAIC03OSw5ICsxMDAsMjEgQEAKIAkqc2lkID0gU0VDU0lEX05VTEw7CiAJcmV0dXJuIDA7CiB9CitzdGF0aWMgaW5saW5lIGludCBzZWxpbnV4X25ldGxibF9za2J1ZmZfc2V0c2lkKHN0cnVjdCBza19idWZmICpza2IsCisJCQkJCSAgICAgICB1MTYgZmFtaWx5LAorCQkJCQkgICAgICAgdTMyIHNpZCkKK3sKKwlyZXR1cm4gMDsKK30KIAotc3RhdGljIGlubGluZSB2b2lkIHNlbGludXhfbmV0bGJsX3NvY2tfZ3JhZnQoc3RydWN0IHNvY2sgKnNrLAotCQkJCQkgICAgIHN0cnVjdCBzb2NrZXQgKnNvY2spCitzdGF0aWMgaW5saW5lIGludCBzZWxpbnV4X25ldGxibF9jb25uX3NldHNpZChzdHJ1Y3Qgc29jayAqc2ssCisJCQkJCSAgICAgc3RydWN0IHNvY2thZGRyICphZGRyKQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc2VsaW51eF9uZXRsYmxfaW5ldF9jb25uX2VzdGFibGlzaGVkKHN0cnVjdCBzb2NrICpzaywKKwkJCQkJCQl1MTYgZmFtaWx5KQogewogCXJldHVybjsKIH0KQEAgLTEwNyw2ICsxNDAsMTEgQEAKIHsKIAlyZXR1cm4gMDsKIH0KK3N0YXRpYyBpbmxpbmUgaW50IHNlbGludXhfbmV0bGJsX3NvY2tldF9jb25uZWN0KHN0cnVjdCBzb2NrICpzaywKKwkJCQkJCXN0cnVjdCBzb2NrYWRkciAqYWRkcikKK3sKKwlyZXR1cm4gMDsKK30KICNlbmRpZiAvKiBDT05GSUdfTkVUTEFCRUwgKi8KIAogI2VuZGlmCmRpZmYgLS1naXQgYS9zZWN1cml0eS9zZWxpbnV4L2luY2x1ZGUvb2Jqc2VjLmggYi9zZWN1cml0eS9zZWxpbnV4L2luY2x1ZGUvb2Jqc2VjLmgKaW5kZXggOTEwNzBhYi4uZjhiZThkNyAxMDA2NDQKLS0tIGEvc2VjdXJpdHkvc2VsaW51eC9pbmNsdWRlL29ianNlYy5oCisrKyBiL3NlY3VyaXR5L3NlbGludXgvaW5jbHVkZS9vYmpzZWMuaApAQCAtMTA5LDE2ICsxMDksMTkgQEAKIH07CiAKIHN0cnVjdCBza19zZWN1cml0eV9zdHJ1Y3QgewotCXUzMiBzaWQ7CQkJLyogU0lEIG9mIHRoaXMgb2JqZWN0ICovCi0JdTMyIHBlZXJfc2lkOwkJCS8qIFNJRCBvZiBwZWVyICovCi0JdTE2IHNjbGFzczsJCQkvKiBzb2NrIHNlY3VyaXR5IGNsYXNzICovCiAjaWZkZWYgQ09ORklHX05FVExBQkVMCiAJZW51bSB7CQkJCS8qIE5ldExhYmVsIHN0YXRlICovCiAJCU5MQkxfVU5TRVQgPSAwLAogCQlOTEJMX1JFUVVJUkUsCiAJCU5MQkxfTEFCRUxFRCwKKwkJTkxCTF9SRVFTS0IsCisJCU5MQkxfQ09OTkxBQkVMRUQsCiAJfSBubGJsX3N0YXRlOworCXN0cnVjdCBuZXRsYmxfbHNtX3NlY2F0dHIgKm5sYmxfc2VjYXR0cjsgLyogTmV0TGFiZWwgc2VjIGF0dHJpYnV0ZXMgKi8KICNlbmRpZgorCXUzMiBzaWQ7CQkJLyogU0lEIG9mIHRoaXMgb2JqZWN0ICovCisJdTMyIHBlZXJfc2lkOwkJCS8qIFNJRCBvZiBwZWVyICovCisJdTE2IHNjbGFzczsJCQkvKiBzb2NrIHNlY3VyaXR5IGNsYXNzICovCiB9OwogCiBzdHJ1Y3Qga2V5X3NlY3VyaXR5X3N0cnVjdCB7CmRpZmYgLS1naXQgYS9zZWN1cml0eS9zZWxpbnV4L25ldGxhYmVsLmMgYi9zZWN1cml0eS9zZWxpbnV4L25ldGxhYmVsLmMKaW5kZXggODliNDE4MzkuLmY1ODcwMWEgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L3NlbGludXgvbmV0bGFiZWwuYworKysgYi9zZWN1cml0eS9zZWxpbnV4L25ldGxhYmVsLmMKQEAgLTksNyArOSw3IEBACiAgKi8KIAogLyoKLSAqIChjKSBDb3B5cmlnaHQgSGV3bGV0dC1QYWNrYXJkIERldmVsb3BtZW50IENvbXBhbnksIEwuUC4sIDIwMDcKKyAqIChjKSBDb3B5cmlnaHQgSGV3bGV0dC1QYWNrYXJkIERldmVsb3BtZW50IENvbXBhbnksIEwuUC4sIDIwMDcsIDIwMDgKICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgIHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CkBAIC0yOSw4ICsyOSwxMiBAQAogCiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxsaW51eC9yY3VwZGF0ZS5oPgorI2luY2x1ZGUgPGxpbnV4L2lwLmg+CisjaW5jbHVkZSA8bGludXgvaXB2Ni5oPgogI2luY2x1ZGUgPG5ldC9zb2NrLmg+CiAjaW5jbHVkZSA8bmV0L25ldGxhYmVsLmg+CisjaW5jbHVkZSA8bmV0L2lwLmg+CisjaW5jbHVkZSA8bmV0L2lwdjYuaD4KIAogI2luY2x1ZGUgIm9ianNlYy5oIgogI2luY2x1ZGUgInNlY3VyaXR5LmgiCkBAIC02NCwzMiArNjgsNjkgQEAKIH0KIAogLyoqCi0gKiBzZWxpbnV4X25ldGxibF9zb2NrX3NldHNpZCAtIExhYmVsIGEgc29ja2V0IHVzaW5nIHRoZSBOZXRMYWJlbCBtZWNoYW5pc20KLSAqIEBzazogdGhlIHNvY2tldCB0byBsYWJlbAotICogQHNpZDogdGhlIFNJRCB0byB1c2UKKyAqIHNlbGludXhfbmV0bGJsX3NvY2tfZ2VuYXR0ciAtIEdlbmVyYXRlIHRoZSBOZXRMYWJlbCBzb2NrZXQgc2VjYXR0cgorICogQHNrOiB0aGUgc29ja2V0CiAgKgogICogRGVzY3JpcHRpb246Ci0gKiBBdHRlbXB0IHRvIGxhYmVsIGEgc29ja2V0IHVzaW5nIHRoZSBOZXRMYWJlbCBtZWNoYW5pc20gdXNpbmcgdGhlIGdpdmVuCi0gKiBTSUQuICBSZXR1cm5zIHplcm8gdmFsdWVzIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIHZhbHVlcyBvbiBmYWlsdXJlLgorICogR2VuZXJhdGUgdGhlIE5ldExhYmVsIHNlY3VyaXR5IGF0dHJpYnV0ZXMgZm9yIGEgc29ja2V0LCBtYWtpbmcgZnVsbCB1c2Ugb2YKKyAqIHRoZSBzb2NrZXQncyBhdHRyaWJ1dGUgY2FjaGUuICBSZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgc2VjdXJpdHkgYXR0cmlidXRlcworICogb24gc3VjY2VzcywgTlVMTCBvbiBmYWlsdXJlLgogICoKICAqLwotc3RhdGljIGludCBzZWxpbnV4X25ldGxibF9zb2NrX3NldHNpZChzdHJ1Y3Qgc29jayAqc2ssIHUzMiBzaWQpCitzdGF0aWMgc3RydWN0IG5ldGxibF9sc21fc2VjYXR0ciAqc2VsaW51eF9uZXRsYmxfc29ja19nZW5hdHRyKHN0cnVjdCBzb2NrICpzaykKIHsKIAlpbnQgcmM7CiAJc3RydWN0IHNrX3NlY3VyaXR5X3N0cnVjdCAqc2tzZWMgPSBzay0+c2tfc2VjdXJpdHk7Ci0Jc3RydWN0IG5ldGxibF9sc21fc2VjYXR0ciBzZWNhdHRyOworCXN0cnVjdCBuZXRsYmxfbHNtX3NlY2F0dHIgKnNlY2F0dHI7CiAKLQluZXRsYmxfc2VjYXR0cl9pbml0KCZzZWNhdHRyKTsKKwlpZiAoc2tzZWMtPm5sYmxfc2VjYXR0ciAhPSBOVUxMKQorCQlyZXR1cm4gc2tzZWMtPm5sYmxfc2VjYXR0cjsKIAotCXJjID0gc2VjdXJpdHlfbmV0bGJsX3NpZF90b19zZWNhdHRyKHNpZCwgJnNlY2F0dHIpOwotCWlmIChyYyAhPSAwKQotCQlnb3RvIHNvY2tfc2V0c2lkX3JldHVybjsKLQlyYyA9IG5ldGxibF9zb2NrX3NldGF0dHIoc2ssICZzZWNhdHRyKTsKLQlpZiAocmMgPT0gMCkKKwlzZWNhdHRyID0gbmV0bGJsX3NlY2F0dHJfYWxsb2MoR0ZQX0FUT01JQyk7CisJaWYgKHNlY2F0dHIgPT0gTlVMTCkKKwkJcmV0dXJuIE5VTEw7CisJcmMgPSBzZWN1cml0eV9uZXRsYmxfc2lkX3RvX3NlY2F0dHIoc2tzZWMtPnNpZCwgc2VjYXR0cik7CisJaWYgKHJjICE9IDApIHsKKwkJbmV0bGJsX3NlY2F0dHJfZnJlZShzZWNhdHRyKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCXNrc2VjLT5ubGJsX3NlY2F0dHIgPSBzZWNhdHRyOworCisJcmV0dXJuIHNlY2F0dHI7Cit9CisKKy8qKgorICogc2VsaW51eF9uZXRsYmxfc29ja19zZXRzaWQgLSBMYWJlbCBhIHNvY2tldCB1c2luZyB0aGUgTmV0TGFiZWwgbWVjaGFuaXNtCisgKiBAc2s6IHRoZSBzb2NrZXQgdG8gbGFiZWwKKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIEF0dGVtcHQgdG8gbGFiZWwgYSBzb2NrZXQgdXNpbmcgdGhlIE5ldExhYmVsIG1lY2hhbmlzbS4gIFJldHVybnMgemVybyB2YWx1ZXMKKyAqIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIHZhbHVlcyBvbiBmYWlsdXJlLgorICoKKyAqLworc3RhdGljIGludCBzZWxpbnV4X25ldGxibF9zb2NrX3NldHNpZChzdHJ1Y3Qgc29jayAqc2spCit7CisJaW50IHJjOworCXN0cnVjdCBza19zZWN1cml0eV9zdHJ1Y3QgKnNrc2VjID0gc2stPnNrX3NlY3VyaXR5OworCXN0cnVjdCBuZXRsYmxfbHNtX3NlY2F0dHIgKnNlY2F0dHI7CisKKwlpZiAoc2tzZWMtPm5sYmxfc3RhdGUgIT0gTkxCTF9SRVFVSVJFKQorCQlyZXR1cm4gMDsKKworCXNlY2F0dHIgPSBzZWxpbnV4X25ldGxibF9zb2NrX2dlbmF0dHIoc2spOworCWlmIChzZWNhdHRyID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCXJjID0gbmV0bGJsX3NvY2tfc2V0YXR0cihzaywgc2VjYXR0cik7CisJc3dpdGNoIChyYykgeworCWNhc2UgMDoKIAkJc2tzZWMtPm5sYmxfc3RhdGUgPSBOTEJMX0xBQkVMRUQ7CisJCWJyZWFrOworCWNhc2UgLUVERVNUQUREUlJFUToKKwkJc2tzZWMtPm5sYmxfc3RhdGUgPSBOTEJMX1JFUVNLQjsKKwkJcmMgPSAwOworCQlicmVhazsKKwl9CiAKLXNvY2tfc2V0c2lkX3JldHVybjoKLQluZXRsYmxfc2VjYXR0cl9kZXN0cm95KCZzZWNhdHRyKTsKIAlyZXR1cm4gcmM7CiB9CiAKQEAgLTEwNiw2ICsxNDcsMzggQEAKIH0KIAogLyoqCisgKiBzZWxpbnV4X25ldGxibF9lcnIgLSBIYW5kbGUgYSBOZXRMYWJlbCBwYWNrZXQgZXJyb3IKKyAqIEBza2I6IHRoZSBwYWNrZXQKKyAqIEBlcnJvcjogdGhlIGVycm9yIGNvZGUKKyAqIEBnYXRld2F5OiB0cnVlIGlmIGhvc3QgaXMgYWN0aW5nIGFzIGEgZ2F0ZXdheSwgZmFsc2Ugb3RoZXJ3aXNlCisgKgorICogRGVzY3JpcHRpb246CisgKiBXaGVuIGEgcGFja2V0IGlzIGRyb3BwZWQgZHVlIHRvIGEgY2FsbCB0byBhdmNfaGFzX3Blcm0oKSBwYXNzIHRoZSBlcnJvcgorICogY29kZSB0byB0aGUgTmV0TGFiZWwgc3Vic3lzdGVtIHNvIGFueSBwcm90b2NvbCBzcGVjaWZpYyBwcm9jZXNzaW5nIGNhbiBiZQorICogZG9uZS4gIFRoaXMgaXMgc2FmZSB0byBjYWxsIGV2ZW4gaWYgeW91IGFyZSB1bnN1cmUgaWYgTmV0TGFiZWwgbGFiZWxpbmcgaXMKKyAqIHByZXNlbnQgb24gdGhlIHBhY2tldCwgTmV0TGFiZWwgaXMgc21hcnQgZW5vdWdoIHRvIG9ubHkgYWN0IHdoZW4gaXQgc2hvdWxkLgorICoKKyAqLwordm9pZCBzZWxpbnV4X25ldGxibF9lcnIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGVycm9yLCBpbnQgZ2F0ZXdheSkKK3sKKwluZXRsYmxfc2tidWZmX2Vycihza2IsIGVycm9yLCBnYXRld2F5KTsKK30KKworLyoqCisgKiBzZWxpbnV4X25ldGxibF9za19zZWN1cml0eV9mcmVlIC0gRnJlZSB0aGUgTmV0TGFiZWwgZmllbGRzCisgKiBAc3NzZWM6IHRoZSBza19zZWN1cml0eV9zdHJ1Y3QKKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIEZyZWUgYWxsIG9mIHRoZSBtZW1vcnkgaW4gdGhlIE5ldExhYmVsIGZpZWxkcyBvZiBhIHNrX3NlY3VyaXR5X3N0cnVjdC4KKyAqCisgKi8KK3ZvaWQgc2VsaW51eF9uZXRsYmxfc2tfc2VjdXJpdHlfZnJlZShzdHJ1Y3Qgc2tfc2VjdXJpdHlfc3RydWN0ICpzc2VjKQoreworCWlmIChzc2VjLT5ubGJsX3NlY2F0dHIgIT0gTlVMTCkKKwkJbmV0bGJsX3NlY2F0dHJfZnJlZShzc2VjLT5ubGJsX3NlY2F0dHIpOworfQorCisvKioKICAqIHNlbGludXhfbmV0bGJsX3NrX3NlY3VyaXR5X3Jlc2V0IC0gUmVzZXQgdGhlIE5ldExhYmVsIGZpZWxkcwogICogQHNzZWM6IHRoZSBza19zZWN1cml0eV9zdHJ1Y3QKICAqIEBmYW1pbHk6IHRoZSBzb2NrZXQgZmFtaWx5CkBAIC0xNjMsMzUgKzIzNiwxMTggQEAKIH0KIAogLyoqCi0gKiBzZWxpbnV4X25ldGxibF9zb2NrX2dyYWZ0IC0gTmV0bGFiZWwgdGhlIG5ldyBzb2NrZXQKLSAqIEBzazogdGhlIG5ldyBjb25uZWN0aW9uCi0gKiBAc29jazogdGhlIG5ldyBzb2NrZXQKKyAqIHNlbGludXhfbmV0bGJsX3NrYnVmZl9zZXRzaWQgLSBTZXQgdGhlIE5ldExhYmVsIG9uIGEgcGFja2V0IGdpdmVuIGEgc2lkCisgKiBAc2tiOiB0aGUgcGFja2V0CisgKiBAZmFtaWx5OiBwcm90b2NvbCBmYW1pbHkKKyAqIEBzaWQ6IHRoZSBTSUQKICAqCi0gKiBEZXNjcmlwdGlvbjoKLSAqIFRoZSBjb25uZWN0aW9uIHJlcHJlc2VudGVkIGJ5IEBzayBpcyBiZWluZyBncmFmdGVkIG9udG8gQHNvY2sgc28gc2V0IHRoZQotICogc29ja2V0J3MgTmV0TGFiZWwgdG8gbWF0Y2ggdGhlIFNJRCBvZiBAc2suCisgKiBEZXNjcmlwdGlvbgorICogQ2FsbCB0aGUgTmV0TGFiZWwgbWVjaGFuaXNtIHRvIHNldCB0aGUgbGFiZWwgb2YgYSBwYWNrZXQgdXNpbmcgQHNpZC4KKyAqIFJldHVybnMgemVybyBvbiBhdWNjZXNzLCBuZWdhdGl2ZSB2YWx1ZXMgb24gZmFpbHVyZS4KICAqCiAgKi8KLXZvaWQgc2VsaW51eF9uZXRsYmxfc29ja19ncmFmdChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBzb2NrZXQgKnNvY2spCitpbnQgc2VsaW51eF9uZXRsYmxfc2tidWZmX3NldHNpZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCSB1MTYgZmFtaWx5LAorCQkJCSB1MzIgc2lkKQogeworCWludCByYzsKKwlzdHJ1Y3QgbmV0bGJsX2xzbV9zZWNhdHRyIHNlY2F0dHJfc3RvcmFnZTsKKwlzdHJ1Y3QgbmV0bGJsX2xzbV9zZWNhdHRyICpzZWNhdHRyID0gTlVMTDsKKwlzdHJ1Y3Qgc29jayAqc2s7CisKKwkvKiBpZiB0aGlzIGlzIGEgbG9jYWxseSBnZW5lcmF0ZWQgcGFja2V0IGNoZWNrIHRvIHNlZSBpZiBpdCBpcyBhbHJlYWR5CisJICogYmVpbmcgbGFiZWxlZCBieSBpdCdzIHBhcmVudCBzb2NrZXQsIGlmIGl0IGlzIGp1c3QgZXhpdCAqLworCXNrID0gc2tiLT5zazsKKwlpZiAoc2sgIT0gTlVMTCkgeworCQlzdHJ1Y3Qgc2tfc2VjdXJpdHlfc3RydWN0ICpza3NlYyA9IHNrLT5za19zZWN1cml0eTsKKwkJaWYgKHNrc2VjLT5ubGJsX3N0YXRlICE9IE5MQkxfUkVRU0tCKQorCQkJcmV0dXJuIDA7CisJCXNlY2F0dHIgPSBza3NlYy0+bmxibF9zZWNhdHRyOworCX0KKwlpZiAoc2VjYXR0ciA9PSBOVUxMKSB7CisJCXNlY2F0dHIgPSAmc2VjYXR0cl9zdG9yYWdlOworCQluZXRsYmxfc2VjYXR0cl9pbml0KHNlY2F0dHIpOworCQlyYyA9IHNlY3VyaXR5X25ldGxibF9zaWRfdG9fc2VjYXR0cihzaWQsIHNlY2F0dHIpOworCQlpZiAocmMgIT0gMCkKKwkJCWdvdG8gc2tidWZmX3NldHNpZF9yZXR1cm47CisJfQorCisJcmMgPSBuZXRsYmxfc2tidWZmX3NldGF0dHIoc2tiLCBmYW1pbHksIHNlY2F0dHIpOworCitza2J1ZmZfc2V0c2lkX3JldHVybjoKKwlpZiAoc2VjYXR0ciA9PSAmc2VjYXR0cl9zdG9yYWdlKQorCQluZXRsYmxfc2VjYXR0cl9kZXN0cm95KHNlY2F0dHIpOworCXJldHVybiByYzsKK30KKworLyoqCisgKiBzZWxpbnV4X25ldGxibF9pbmV0X2Nvbm5fZXN0YWJsaXNoZWQgLSBOZXRsYWJlbCB0aGUgbmV3bHkgYWNjZXB0ZWQgY29ubmVjdGlvbgorICogQHNrOiB0aGUgbmV3IGNvbm5lY3Rpb24KKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIEEgbmV3IGNvbm5lY3Rpb24gaGFzIGJlZW4gZXN0YWJsaXNoZWQgb24gQHNrIHNvIG1ha2Ugc3VyZSBpdCBpcyBsYWJlbGVkCisgKiBjb3JyZWN0bHkgd2l0aCB0aGUgTmV0TGFiZWwgc3VzYnN5c3RlbS4KKyAqCisgKi8KK3ZvaWQgc2VsaW51eF9uZXRsYmxfaW5ldF9jb25uX2VzdGFibGlzaGVkKHN0cnVjdCBzb2NrICpzaywgdTE2IGZhbWlseSkKK3sKKwlpbnQgcmM7CiAJc3RydWN0IHNrX3NlY3VyaXR5X3N0cnVjdCAqc2tzZWMgPSBzay0+c2tfc2VjdXJpdHk7Ci0Jc3RydWN0IG5ldGxibF9sc21fc2VjYXR0ciBzZWNhdHRyOwotCXUzMiBubGJsX3BlZXJfc2lkOworCXN0cnVjdCBuZXRsYmxfbHNtX3NlY2F0dHIgKnNlY2F0dHI7CisJc3RydWN0IGluZXRfc29jayAqc2tfaW5ldCA9IGluZXRfc2soc2spOworCXN0cnVjdCBzb2NrYWRkcl9pbiBhZGRyOwogCiAJaWYgKHNrc2VjLT5ubGJsX3N0YXRlICE9IE5MQkxfUkVRVUlSRSkKIAkJcmV0dXJuOwogCi0JbmV0bGJsX3NlY2F0dHJfaW5pdCgmc2VjYXR0cik7Ci0JaWYgKG5ldGxibF9zb2NrX2dldGF0dHIoc2ssICZzZWNhdHRyKSA9PSAwICYmCi0JICAgIHNlY2F0dHIuZmxhZ3MgIT0gTkVUTEJMX1NFQ0FUVFJfTk9ORSAmJgotCSAgICBzZWN1cml0eV9uZXRsYmxfc2VjYXR0cl90b19zaWQoJnNlY2F0dHIsICZubGJsX3BlZXJfc2lkKSA9PSAwKQotCQlza3NlYy0+cGVlcl9zaWQgPSBubGJsX3BlZXJfc2lkOwotCW5ldGxibF9zZWNhdHRyX2Rlc3Ryb3koJnNlY2F0dHIpOworCXNlY2F0dHIgPSBzZWxpbnV4X25ldGxibF9zb2NrX2dlbmF0dHIoc2spOworCWlmIChzZWNhdHRyID09IE5VTEwpCisJCXJldHVybjsKIAotCS8qIFRyeSB0byBzZXQgdGhlIE5ldExhYmVsIG9uIHRoZSBzb2NrZXQgdG8gc2F2ZSB0aW1lIGxhdGVyLCBpZiB3ZSBmYWlsCi0JICogaGVyZSB3ZSB3aWxsIHBpY2sgdXAgdGhlIHBpZWNlcyBpbiBsYXRlciBjYWxscyB0bwotCSAqIHNlbGludXhfbmV0bGJsX2lub2RlX3Blcm1pc3Npb24oKS4gKi8KLQlzZWxpbnV4X25ldGxibF9zb2NrX3NldHNpZChzaywgc2tzZWMtPnNpZCk7CisJcmMgPSBuZXRsYmxfc29ja19zZXRhdHRyKHNrLCBzZWNhdHRyKTsKKwlzd2l0Y2ggKHJjKSB7CisJY2FzZSAwOgorCQlza3NlYy0+bmxibF9zdGF0ZSA9IE5MQkxfTEFCRUxFRDsKKwkJYnJlYWs7CisJY2FzZSAtRURFU1RBRERSUkVROgorCQkvKiBubyBQRl9JTkVUNiBzdXBwb3J0IHlldCBiZWNhdXNlIHdlIGRvbid0IHN1cHBvcnQgYW55IElQdjYKKwkJICogbGFiZWxpbmcgcHJvdG9jb2xzICovCisJCWlmIChmYW1pbHkgIT0gUEZfSU5FVCkgeworCQkJc2tzZWMtPm5sYmxfc3RhdGUgPSBOTEJMX1VOU0VUOworCQkJcmV0dXJuOworCQl9CisKKwkJYWRkci5zaW5fZmFtaWx5ID0gZmFtaWx5OworCQlhZGRyLnNpbl9hZGRyLnNfYWRkciA9IHNrX2luZXQtPmRhZGRyOworCQlpZiAobmV0bGJsX2Nvbm5fc2V0YXR0cihzaywgKHN0cnVjdCBzb2NrYWRkciAqKSZhZGRyLAorCQkJCQlzZWNhdHRyKSAhPSAwKSB7CisJCQkvKiB3ZSBmYWlsZWQgdG8gbGFiZWwgdGhlIGNvbm5lY3RlZCBzb2NrZXQgKGNvdWxkIGJlCisJCQkgKiBmb3IgYSB2YXJpZXR5IG9mIHJlYXNvbnMsIHRoZSBhY3R1YWwgIndoeSIgaXNuJ3QKKwkJCSAqIGltcG9ydGFudCBoZXJlKSBzbyB3ZSBoYXZlIHRvIGdvIHRvIG91ciBiYWNrdXAgcGxhbiwKKwkJCSAqIGxhYmVsaW5nIHRoZSBwYWNrZXRzIGluZGl2aWR1YWxseSBpbiB0aGUgbmV0ZmlsdGVyCisJCQkgKiBsb2NhbCBvdXRwdXQgaG9vay4gIHRoaXMgaXMgb2theSBidXQgd2UgbmVlZCB0bworCQkJICogYWRqdXN0IHRoZSBNU1Mgb2YgdGhlIGNvbm5lY3Rpb24gdG8gdGFrZSBpbnRvCisJCQkgKiBhY2NvdW50IGFueSBsYWJlbGluZyBvdmVyaGVhZCwgc2luY2Ugd2UgZG9uJ3Qga25vdworCQkJICogdGhlIGV4YWN0IG92ZXJoZWFkIGF0IHRoaXMgcG9pbnQgd2UnbGwgdXNlIHRoZSB3b3JzdAorCQkJICogY2FzZSB2YWx1ZSB3aGljaCBpcyA0MCBieXRlcyBmb3IgSVB2NCAqLworCQkJc3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrICpza19jb25uID0gaW5ldF9jc2soc2spOworCQkJc2tfY29ubi0+aWNza19leHRfaGRyX2xlbiArPSA0MCAtCisJCQkJICAgICAgKHNrX2luZXQtPm9wdCA/IHNrX2luZXQtPm9wdC0+b3B0bGVuIDogMCk7CisJCQlza19jb25uLT5pY3NrX3N5bmNfbXNzKHNrLCBza19jb25uLT5pY3NrX3BtdHVfY29va2llKTsKKworCQkJc2tzZWMtPm5sYmxfc3RhdGUgPSBOTEJMX1JFUVNLQjsKKwkJfSBlbHNlCisJCQlza3NlYy0+bmxibF9zdGF0ZSA9IE5MQkxfQ09OTkxBQkVMRUQ7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCS8qIG5vdGUgdGhhdCB3ZSBhcmUgZmFpbGluZyB0byBsYWJlbCB0aGUgc29ja2V0IHdoaWNoIGNvdWxkIGJlCisJCSAqIGEgYmFkIHRoaW5nIHNpbmNlIGl0IG1lYW5zIHRyYWZmaWMgY291bGQgbGVhdmUgdGhlIHN5c3RlbQorCQkgKiB3aXRob3V0IHRoZSBkZXNpcmVkIGxhYmVsaW5nLCBob3dldmVyLCBhbGwgaXMgbm90IGxvc3QgYXMKKwkJICogd2UgaGF2ZSBhIGNoZWNrIGluIHNlbGludXhfbmV0bGJsX2lub2RlX3Blcm1pc3Npb24oKSB0bworCQkgKiBwaWNrIHVwIHRoZSBwaWVjZXMgdGhhdCB3ZSBtaWdodCBkcm9wIGhlcmUgYmVjYXVzZSB3ZSBjYW4ndAorCQkgKiByZXR1cm4gYW4gZXJyb3IgY29kZSAqLworCQlicmVhazsKKwl9CiB9CiAKIC8qKgpAQCAtMjA1LDEzICszNjEsNyBAQAogICovCiBpbnQgc2VsaW51eF9uZXRsYmxfc29ja2V0X3Bvc3RfY3JlYXRlKHN0cnVjdCBzb2NrZXQgKnNvY2spCiB7Ci0Jc3RydWN0IHNvY2sgKnNrID0gc29jay0+c2s7Ci0Jc3RydWN0IHNrX3NlY3VyaXR5X3N0cnVjdCAqc2tzZWMgPSBzay0+c2tfc2VjdXJpdHk7Ci0KLQlpZiAoc2tzZWMtPm5sYmxfc3RhdGUgIT0gTkxCTF9SRVFVSVJFKQotCQlyZXR1cm4gMDsKLQotCXJldHVybiBzZWxpbnV4X25ldGxibF9zb2NrX3NldHNpZChzaywgc2tzZWMtPnNpZCk7CisJcmV0dXJuIHNlbGludXhfbmV0bGJsX3NvY2tfc2V0c2lkKHNvY2stPnNrKTsKIH0KIAogLyoqCkBAIC0yNDYsNyArMzk2LDcgQEAKIAlsb2NhbF9iaF9kaXNhYmxlKCk7CiAJYmhfbG9ja19zb2NrX25lc3RlZChzayk7CiAJaWYgKGxpa2VseShza3NlYy0+bmxibF9zdGF0ZSA9PSBOTEJMX1JFUVVJUkUpKQotCQlyYyA9IHNlbGludXhfbmV0bGJsX3NvY2tfc2V0c2lkKHNrLCBza3NlYy0+c2lkKTsKKwkJcmMgPSBzZWxpbnV4X25ldGxibF9zb2NrX3NldHNpZChzayk7CiAJZWxzZQogCQlyYyA9IDA7CiAJYmhfdW5sb2NrX3NvY2soc2spOwpAQCAtMzA3LDcgKzQ1Nyw3IEBACiAJCXJldHVybiAwOwogCiAJaWYgKG5sYmxfc2lkICE9IFNFQ0lOSVRTSURfVU5MQUJFTEVEKQotCQluZXRsYmxfc2tidWZmX2Vycihza2IsIHJjKTsKKwkJbmV0bGJsX3NrYnVmZl9lcnIoc2tiLCByYywgMCk7CiAJcmV0dXJuIHJjOwogfQogCkBAIC0zMzQsNyArNDg0LDggQEAKIAlzdHJ1Y3QgbmV0bGJsX2xzbV9zZWNhdHRyIHNlY2F0dHI7CiAKIAlpZiAobGV2ZWwgPT0gSVBQUk9UT19JUCAmJiBvcHRuYW1lID09IElQX09QVElPTlMgJiYKLQkgICAgc2tzZWMtPm5sYmxfc3RhdGUgPT0gTkxCTF9MQUJFTEVEKSB7CisJICAgIChza3NlYy0+bmxibF9zdGF0ZSA9PSBOTEJMX0xBQkVMRUQgfHwKKwkgICAgIHNrc2VjLT5ubGJsX3N0YXRlID09IE5MQkxfQ09OTkxBQkVMRUQpKSB7CiAJCW5ldGxibF9zZWNhdHRyX2luaXQoJnNlY2F0dHIpOwogCQlsb2NrX3NvY2soc2spOwogCQlyYyA9IG5ldGxibF9zb2NrX2dldGF0dHIoc2ssICZzZWNhdHRyKTsKQEAgLTM0NiwzICs0OTcsNTAgQEAKIAogCXJldHVybiByYzsKIH0KKworLyoqCisgKiBzZWxpbnV4X25ldGxibF9zb2NrZXRfY29ubmVjdCAtIExhYmVsIGEgY2xpZW50LXNpZGUgc29ja2V0IG9uIGNvbm5lY3QKKyAqIEBzazogdGhlIHNvY2tldCB0byBsYWJlbAorICogQGFkZHI6IHRoZSBkZXN0aW5hdGlvbiBhZGRyZXNzCisgKgorICogRGVzY3JpcHRpb246CisgKiBBdHRlbXB0IHRvIGxhYmVsIGEgY29ubmVjdGVkIHNvY2tldCB3aXRoIE5ldExhYmVsIHVzaW5nIHRoZSBnaXZlbiBhZGRyZXNzLgorICogUmV0dXJucyB6ZXJvIHZhbHVlcyBvbiBzdWNjZXNzLCBuZWdhdGl2ZSB2YWx1ZXMgb24gZmFpbHVyZS4KKyAqCisgKi8KK2ludCBzZWxpbnV4X25ldGxibF9zb2NrZXRfY29ubmVjdChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBzb2NrYWRkciAqYWRkcikKK3sKKwlpbnQgcmM7CisJc3RydWN0IHNrX3NlY3VyaXR5X3N0cnVjdCAqc2tzZWMgPSBzay0+c2tfc2VjdXJpdHk7CisJc3RydWN0IG5ldGxibF9sc21fc2VjYXR0ciAqc2VjYXR0cjsKKworCWlmIChza3NlYy0+bmxibF9zdGF0ZSAhPSBOTEJMX1JFUVNLQiAmJgorCSAgICBza3NlYy0+bmxibF9zdGF0ZSAhPSBOTEJMX0NPTk5MQUJFTEVEKQorCQlyZXR1cm4gMDsKKworCWxvY2FsX2JoX2Rpc2FibGUoKTsKKwliaF9sb2NrX3NvY2tfbmVzdGVkKHNrKTsKKworCS8qIGNvbm5lY3RlZCBzb2NrZXRzIGFyZSBhbGxvd2VkIHRvIGRpc2Nvbm5lY3Qgd2hlbiB0aGUgYWRkcmVzcyBmYW1pbHkKKwkgKiBpcyBzZXQgdG8gQUZfVU5TUEVDLCBpZiB0aGF0IGlzIHdoYXQgaXMgaGFwcGVuaW5nIHdlIHdhbnQgdG8gcmVzZXQKKwkgKiB0aGUgc29ja2V0ICovCisJaWYgKGFkZHItPnNhX2ZhbWlseSA9PSBBRl9VTlNQRUMpIHsKKwkJbmV0bGJsX3NvY2tfZGVsYXR0cihzayk7CisJCXNrc2VjLT5ubGJsX3N0YXRlID0gTkxCTF9SRVFTS0I7CisJCXJjID0gMDsKKwkJZ290byBzb2NrZXRfY29ubmVjdF9yZXR1cm47CisJfQorCXNlY2F0dHIgPSBzZWxpbnV4X25ldGxibF9zb2NrX2dlbmF0dHIoc2spOworCWlmIChzZWNhdHRyID09IE5VTEwpIHsKKwkJcmMgPSAtRU5PTUVNOworCQlnb3RvIHNvY2tldF9jb25uZWN0X3JldHVybjsKKwl9CisJcmMgPSBuZXRsYmxfY29ubl9zZXRhdHRyKHNrLCBhZGRyLCBzZWNhdHRyKTsKKwlpZiAocmMgPT0gMCkKKwkJc2tzZWMtPm5sYmxfc3RhdGUgPSBOTEJMX0NPTk5MQUJFTEVEOworCitzb2NrZXRfY29ubmVjdF9yZXR1cm46CisJYmhfdW5sb2NrX3NvY2soc2spOworCWxvY2FsX2JoX2VuYWJsZSgpOworCXJldHVybiByYzsKK30KZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3NlbGludXgvc3Mvc2VydmljZXMuYyBiL3NlY3VyaXR5L3NlbGludXgvc3Mvc2VydmljZXMuYwppbmRleCBhYjBjYzBjLi4zNDNjOGFiIDEwMDY0NAotLS0gYS9zZWN1cml0eS9zZWxpbnV4L3NzL3NlcnZpY2VzLmMKKysrIGIvc2VjdXJpdHkvc2VsaW51eC9zcy9zZXJ2aWNlcy5jCkBAIC0yOTU1LDcgKzI5NTUsNyBAQAogICovCiBpbnQgc2VjdXJpdHlfbmV0bGJsX3NpZF90b19zZWNhdHRyKHUzMiBzaWQsIHN0cnVjdCBuZXRsYmxfbHNtX3NlY2F0dHIgKnNlY2F0dHIpCiB7Ci0JaW50IHJjID0gLUVOT0VOVDsKKwlpbnQgcmM7CiAJc3RydWN0IGNvbnRleHQgKmN0eDsKIAogCWlmICghc3NfaW5pdGlhbGl6ZWQpCkBAIC0yOTYzLDExICsyOTYzLDE4IEBACiAKIAlyZWFkX2xvY2soJnBvbGljeV9yd2xvY2spOwogCWN0eCA9IHNpZHRhYl9zZWFyY2goJnNpZHRhYiwgc2lkKTsKLQlpZiAoY3R4ID09IE5VTEwpCisJaWYgKGN0eCA9PSBOVUxMKSB7CisJCXJjID0gLUVOT0VOVDsKIAkJZ290byBuZXRsYmxfc2lkX3RvX3NlY2F0dHJfZmFpbHVyZTsKKwl9CiAJc2VjYXR0ci0+ZG9tYWluID0ga3N0cmR1cChwb2xpY3lkYi5wX3R5cGVfdmFsX3RvX25hbWVbY3R4LT50eXBlIC0gMV0sCiAJCQkJICBHRlBfQVRPTUlDKTsKLQlzZWNhdHRyLT5mbGFncyB8PSBORVRMQkxfU0VDQVRUUl9ET01BSU5fQ1BZOworCWlmIChzZWNhdHRyLT5kb21haW4gPT0gTlVMTCkgeworCQlyYyA9IC1FTk9NRU07CisJCWdvdG8gbmV0bGJsX3NpZF90b19zZWNhdHRyX2ZhaWx1cmU7CisJfQorCXNlY2F0dHItPmF0dHIuc2VjaWQgPSBzaWQ7CisJc2VjYXR0ci0+ZmxhZ3MgfD0gTkVUTEJMX1NFQ0FUVFJfRE9NQUlOX0NQWSB8IE5FVExCTF9TRUNBVFRSX1NFQ0lEOwogCW1sc19leHBvcnRfbmV0bGJsX2x2bChjdHgsIHNlY2F0dHIpOwogCXJjID0gbWxzX2V4cG9ydF9uZXRsYmxfY2F0KGN0eCwgc2VjYXR0cik7CiAJaWYgKHJjICE9IDApCmRpZmYgLS1naXQgYS9zZWN1cml0eS9zbWFjay9zbWFja19sc20uYyBiL3NlY3VyaXR5L3NtYWNrL3NtYWNrX2xzbS5jCmluZGV4IDg3ZDc1NDEuLjZlMmRjMGIgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L3NtYWNrL3NtYWNrX2xzbS5jCisrKyBiL3NlY3VyaXR5L3NtYWNrL3NtYWNrX2xzbS5jCkBAIC0yMTc5LDcgKzIxNzksMTAgQEAKIAkgKiBUaGlzIGlzIHRoZSBzaW1wbGlzdCBwb3NzaWJsZSBzZWN1cml0eSBtb2RlbAogCSAqIGZvciBuZXR3b3JraW5nLgogCSAqLwotCXJldHVybiBzbWtfYWNjZXNzKHNtYWNrLCBzc3AtPnNta19pbiwgTUFZX1dSSVRFKTsKKwlyYyA9IHNta19hY2Nlc3Moc21hY2ssIHNzcC0+c21rX2luLCBNQVlfV1JJVEUpOworCWlmIChyYyAhPSAwKQorCQluZXRsYmxfc2tidWZmX2Vycihza2IsIHJjLCAwKTsKKwlyZXR1cm4gcmM7CiB9CiAKIC8qKgpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc21hY2svc21hY2tmcy5jIGIvc2VjdXJpdHkvc21hY2svc21hY2tmcy5jCmluZGV4IGU3YzY0MjQuLmMyMWQ4YzggMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L3NtYWNrL3NtYWNrZnMuYworKysgYi9zZWN1cml0eS9zbWFjay9zbWFja2ZzLmMKQEAgLTM1NCw5ICszNTQsMTEgQEAKIAkJZG9pcC0+dGFnc1tyY10gPSBDSVBTT19WNF9UQUdfSU5WQUxJRDsKIAogCXJjID0gbmV0bGJsX2NmZ19jaXBzb3Y0X2FkZF9tYXAoZG9pcCwgTlVMTCwgJmF1ZGl0X2luZm8pOwotCWlmIChyYyAhPSAwKQorCWlmIChyYyAhPSAwKSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiVkIGFkZCByYyA9ICVkXG4iLAogCQkgICAgICAgX19mdW5jX18sIF9fTElORV9fLCByYyk7CisJCWtmcmVlKGRvaXApOworCX0KIH0KIAogLyoqCmRpZmYgLS1naXQgYS9zb3VuZC9hb2Evc291bmRidXMvc291bmRidXMuaCBiL3NvdW5kL2FvYS9zb3VuZGJ1cy9zb3VuZGJ1cy5oCmluZGV4IDYyMmNkMzcuLmEwZjIyM2MgMTAwNjQ0Ci0tLSBhL3NvdW5kL2FvYS9zb3VuZGJ1cy9zb3VuZGJ1cy5oCisrKyBiL3NvdW5kL2FvYS9zb3VuZGJ1cy9zb3VuZGJ1cy5oCkBAIC04LDcgKzgsNyBAQAogI2lmbmRlZiBfX1NPVU5EQlVTX0gKICNkZWZpbmUgX19TT1VOREJVU19ICiAKLSNpbmNsdWRlIDxhc20vb2ZfZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvb2ZfZGV2aWNlLmg+CiAjaW5jbHVkZSA8c291bmQvcGNtLmg+CiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgogCmRpZmYgLS1naXQgYS9zb3VuZC9hcm0vcHhhMnh4LWFjOTctbGliLmMgYi9zb3VuZC9hcm0vcHhhMnh4LWFjOTctbGliLmMKaW5kZXggOTkwMjZkZi4uMzRjMWQ5NCAxMDA2NDQKLS0tIGEvc291bmQvYXJtL3B4YTJ4eC1hYzk3LWxpYi5jCisrKyBiL3NvdW5kL2FybS9weGEyeHgtYWM5Ny1saWIuYwpAQCAtNTAsNyArNTAsNyBAQAogCW11dGV4X2xvY2soJmNhcl9tdXRleCk7CiAKIAkvKiBzZXQgdXAgcHJpbWFyeSBvciBzZWNvbmRhcnkgY29kZWMgc3BhY2UgKi8KLQlpZiAoKGNwdV9pc19weGEyMXgoKSB8fCBjcHVfaXNfcHhhMjV4KCkpICYmIHJlZyA9PSBBQzk3X0dQSU9fU1RBVFVTKQorCWlmIChjcHVfaXNfcHhhMjV4KCkgJiYgcmVnID09IEFDOTdfR1BJT19TVEFUVVMpCiAJCXJlZ19hZGRyID0gYWM5Ny0+bnVtID8gJlNNQ19SRUdfQkFTRSA6ICZQTUNfUkVHX0JBU0U7CiAJZWxzZQogCQlyZWdfYWRkciA9IGFjOTctPm51bSA/ICZTQUNfUkVHX0JBU0UgOiAmUEFDX1JFR19CQVNFOwpAQCAtOTAsNyArOTAsNyBAQAogCW11dGV4X2xvY2soJmNhcl9tdXRleCk7CiAKIAkvKiBzZXQgdXAgcHJpbWFyeSBvciBzZWNvbmRhcnkgY29kZWMgc3BhY2UgKi8KLQlpZiAoKGNwdV9pc19weGEyMXgoKSB8fCBjcHVfaXNfcHhhMjV4KCkpICYmIHJlZyA9PSBBQzk3X0dQSU9fU1RBVFVTKQorCWlmIChjcHVfaXNfcHhhMjV4KCkgJiYgcmVnID09IEFDOTdfR1BJT19TVEFUVVMpCiAJCXJlZ19hZGRyID0gYWM5Ny0+bnVtID8gJlNNQ19SRUdfQkFTRSA6ICZQTUNfUkVHX0JBU0U7CiAJZWxzZQogCQlyZWdfYWRkciA9IGFjOTctPm51bSA/ICZTQUNfUkVHX0JBU0UgOiAmUEFDX1JFR19CQVNFOwpAQCAtMjAwLDcgKzIwMCw3IEBACiBib29sIHB4YTJ4eF9hYzk3X3RyeV93YXJtX3Jlc2V0KHN0cnVjdCBzbmRfYWM5NyAqYWM5NykKIHsKICNpZmRlZiBDT05GSUdfUFhBMjV4Ci0JaWYgKGNwdV9pc19weGEyMXgoKSB8fCBjcHVfaXNfcHhhMjV4KCkpCisJaWYgKGNwdV9pc19weGEyNXgoKSkKIAkJcHhhX2FjOTdfd2FybV9weGEyNXgoKTsKIAllbHNlCiAjZW5kaWYKQEAgLTIzMCw3ICsyMzAsNyBAQAogYm9vbCBweGEyeHhfYWM5N190cnlfY29sZF9yZXNldChzdHJ1Y3Qgc25kX2FjOTcgKmFjOTcpCiB7CiAjaWZkZWYgQ09ORklHX1BYQTI1eAotCWlmIChjcHVfaXNfcHhhMjF4KCkgfHwgY3B1X2lzX3B4YTI1eCgpKQorCWlmIChjcHVfaXNfcHhhMjV4KCkpCiAJCXB4YV9hYzk3X2NvbGRfcHhhMjV4KCk7CiAJZWxzZQogI2VuZGlmCkBAIC0zMDEsNyArMzAxLDcgQEAKIAogaW50IHB4YTJ4eF9hYzk3X2h3X3Jlc3VtZSh2b2lkKQogewotCWlmIChjcHVfaXNfcHhhMjF4KCkgfHwgY3B1X2lzX3B4YTI1eCgpIHx8IGNwdV9pc19weGEyN3goKSkgeworCWlmIChjcHVfaXNfcHhhMjV4KCkgfHwgY3B1X2lzX3B4YTI3eCgpKSB7CiAJCXB4YV9ncGlvX21vZGUoR1BJTzMxX1NZTkNfQUM5N19NRCk7CiAJCXB4YV9ncGlvX21vZGUoR1BJTzMwX1NEQVRBX09VVF9BQzk3X01EKTsKIAkJcHhhX2dwaW9fbW9kZShHUElPMjhfQklUQ0xLX0FDOTdfTUQpOwpAQCAtMzI1LDcgKzMyNSw3IEBACiAJaWYgKHJldCA8IDApCiAJCWdvdG8gZXJyOwogCi0JaWYgKGNwdV9pc19weGEyMXgoKSB8fCBjcHVfaXNfcHhhMjV4KCkgfHwgY3B1X2lzX3B4YTI3eCgpKSB7CisJaWYgKGNwdV9pc19weGEyNXgoKSB8fCBjcHVfaXNfcHhhMjd4KCkpIHsKIAkJcHhhX2dwaW9fbW9kZShHUElPMzFfU1lOQ19BQzk3X01EKTsKIAkJcHhhX2dwaW9fbW9kZShHUElPMzBfU0RBVEFfT1VUX0FDOTdfTUQpOwogCQlweGFfZ3Bpb19tb2RlKEdQSU8yOF9CSVRDTEtfQUM5N19NRCk7CmRpZmYgLS1naXQgYS9zb3VuZC9jb3JlL2luaXQuYyBiL3NvdW5kL2NvcmUvaW5pdC5jCmluZGV4IDhhZjQ2N2QuLmVmMjM1MmMyIDEwMDY0NAotLS0gYS9zb3VuZC9jb3JlL2luaXQuYworKysgYi9zb3VuZC9jb3JlL2luaXQuYwpAQCAtNTQ5LDkgKzU0OSw5IEBACiAJCXJldHVybiAtRUlOVkFMOwogI2lmbmRlZiBDT05GSUdfU1lTRlNfREVQUkVDQVRFRAogCWlmICghY2FyZC0+Y2FyZF9kZXYpIHsKLQkJY2FyZC0+Y2FyZF9kZXYgPSBkZXZpY2VfY3JlYXRlX2RydmRhdGEoc291bmRfY2xhc3MsIGNhcmQtPmRldiwKLQkJCQkJCSAgICAgICBNS0RFVigwLCAwKSwgTlVMTCwKLQkJCQkJCSAgICAgICAiY2FyZCVpIiwgY2FyZC0+bnVtYmVyKTsKKwkJY2FyZC0+Y2FyZF9kZXYgPSBkZXZpY2VfY3JlYXRlKHNvdW5kX2NsYXNzLCBjYXJkLT5kZXYsCisJCQkJCSAgICAgICBNS0RFVigwLCAwKSwgTlVMTCwKKwkJCQkJICAgICAgICJjYXJkJWkiLCBjYXJkLT5udW1iZXIpOwogCQlpZiAoSVNfRVJSKGNhcmQtPmNhcmRfZGV2KSkKIAkJCWNhcmQtPmNhcmRfZGV2ID0gTlVMTDsKIAl9CmRpZmYgLS1naXQgYS9zb3VuZC9jb3JlL2phY2suYyBiL3NvdW5kL2NvcmUvamFjay5jCmluZGV4IDgxMzNhMmIuLmJkMmQ5ZTYgMTAwNjQ0Ci0tLSBhL3NvdW5kL2NvcmUvamFjay5jCisrKyBiL3NvdW5kL2NvcmUvamFjay5jCkBAIC0xNDcsNiArMTQ3LDkgQEAKICAqLwogdm9pZCBzbmRfamFja19yZXBvcnQoc3RydWN0IHNuZF9qYWNrICpqYWNrLCBpbnQgc3RhdHVzKQogeworCWlmICghamFjaykKKwkJcmV0dXJuOworCiAJaWYgKGphY2stPnR5cGUgJiBTTkRfSkFDS19IRUFEUEhPTkUpCiAJCWlucHV0X3JlcG9ydF9zd2l0Y2goamFjay0+aW5wdXRfZGV2LCBTV19IRUFEUEhPTkVfSU5TRVJULAogCQkJCSAgICBzdGF0dXMgJiBTTkRfSkFDS19IRUFEUEhPTkUpOwpkaWZmIC0tZ2l0IGEvc291bmQvY29yZS9wY21fbGliLmMgYi9zb3VuZC9jb3JlL3BjbV9saWIuYwppbmRleCA2ZWE1Y2ZiLi45MjE2OTEwIDEwMDY0NAotLS0gYS9zb3VuZC9jb3JlL3BjbV9saWIuYworKysgYi9zb3VuZC9jb3JlL3BjbV9saWIuYwpAQCAtOTA4LDEyICs5MDgsMTIgQEAKIEVYUE9SVF9TWU1CT0woc25kX3BjbV9od19ydWxlX2FkZCk7CiAKIC8qKgotICogc25kX3BjbV9od19jb25zdHJhaW50X21hc2sKKyAqIHNuZF9wY21faHdfY29uc3RyYWludF9tYXNrIC0gYXBwbHkgdGhlIGdpdmVuIGJpdG1hcCBtYXNrIGNvbnN0cmFpbnQKICAqIEBydW50aW1lOiBQQ00gcnVudGltZSBpbnN0YW5jZQogICogQHZhcjogaHdfcGFyYW1zIHZhcmlhYmxlIHRvIGFwcGx5IHRoZSBtYXNrCiAgKiBAbWFzazogdGhlIGJpdG1hcCBtYXNrCiAgKgotICogQXBwbHkgdGhlIGNvbnN0cmFpbnQgb2YgdGhlIGdpdmVuIGJpdG1hcCBtYXNrIHRvIGEgbWFzayBwYXJhbWV0ZXIuCisgKiBBcHBseSB0aGUgY29uc3RyYWludCBvZiB0aGUgZ2l2ZW4gYml0bWFwIG1hc2sgdG8gYSAzMi1iaXQgbWFzayBwYXJhbWV0ZXIuCiAgKi8KIGludCBzbmRfcGNtX2h3X2NvbnN0cmFpbnRfbWFzayhzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lLCBzbmRfcGNtX2h3X3BhcmFtX3QgdmFyLAogCQkJICAgICAgIHVfaW50MzJfdCBtYXNrKQpAQCAtOTI4LDEyICs5MjgsMTIgQEAKIH0KIAogLyoqCi0gKiBzbmRfcGNtX2h3X2NvbnN0cmFpbnRfbWFzazY0CisgKiBzbmRfcGNtX2h3X2NvbnN0cmFpbnRfbWFzazY0IC0gYXBwbHkgdGhlIGdpdmVuIGJpdG1hcCBtYXNrIGNvbnN0cmFpbnQKICAqIEBydW50aW1lOiBQQ00gcnVudGltZSBpbnN0YW5jZQogICogQHZhcjogaHdfcGFyYW1zIHZhcmlhYmxlIHRvIGFwcGx5IHRoZSBtYXNrCiAgKiBAbWFzazogdGhlIDY0Yml0IGJpdG1hcCBtYXNrCiAgKgotICogQXBwbHkgdGhlIGNvbnN0cmFpbnQgb2YgdGhlIGdpdmVuIGJpdG1hcCBtYXNrIHRvIGEgbWFzayBwYXJhbWV0ZXIuCisgKiBBcHBseSB0aGUgY29uc3RyYWludCBvZiB0aGUgZ2l2ZW4gYml0bWFwIG1hc2sgdG8gYSA2NC1iaXQgbWFzayBwYXJhbWV0ZXIuCiAgKi8KIGludCBzbmRfcGNtX2h3X2NvbnN0cmFpbnRfbWFzazY0KHN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUsIHNuZF9wY21faHdfcGFyYW1fdCB2YXIsCiAJCQkJIHVfaW50NjRfdCBtYXNrKQpAQCAtOTQ5LDcgKzk0OSw3IEBACiB9CiAKIC8qKgotICogc25kX3BjbV9od19jb25zdHJhaW50X2ludGVnZXIKKyAqIHNuZF9wY21faHdfY29uc3RyYWludF9pbnRlZ2VyIC0gYXBwbHkgYW4gaW50ZWdlciBjb25zdHJhaW50IHRvIGFuIGludGVydmFsCiAgKiBAcnVudGltZTogUENNIHJ1bnRpbWUgaW5zdGFuY2UKICAqIEB2YXI6IGh3X3BhcmFtcyB2YXJpYWJsZSB0byBhcHBseSB0aGUgaW50ZWdlciBjb25zdHJhaW50CiAgKgpAQCAtOTY0LDcgKzk2NCw3IEBACiBFWFBPUlRfU1lNQk9MKHNuZF9wY21faHdfY29uc3RyYWludF9pbnRlZ2VyKTsKIAogLyoqCi0gKiBzbmRfcGNtX2h3X2NvbnN0cmFpbnRfbWlubWF4CisgKiBzbmRfcGNtX2h3X2NvbnN0cmFpbnRfbWlubWF4IC0gYXBwbHkgYSBtaW4vbWF4IHJhbmdlIGNvbnN0cmFpbnQgdG8gYW4gaW50ZXJ2YWwKICAqIEBydW50aW1lOiBQQ00gcnVudGltZSBpbnN0YW5jZQogICogQHZhcjogaHdfcGFyYW1zIHZhcmlhYmxlIHRvIGFwcGx5IHRoZSByYW5nZQogICogQG1pbjogdGhlIG1pbmltYWwgdmFsdWUKQEAgLTk5NSw3ICs5OTUsNyBAQAogCiAKIC8qKgotICogc25kX3BjbV9od19jb25zdHJhaW50X2xpc3QKKyAqIHNuZF9wY21faHdfY29uc3RyYWludF9saXN0IC0gYXBwbHkgYSBsaXN0IG9mIGNvbnN0cmFpbnRzIHRvIGEgcGFyYW1ldGVyCiAgKiBAcnVudGltZTogUENNIHJ1bnRpbWUgaW5zdGFuY2UKICAqIEBjb25kOiBjb25kaXRpb24gYml0cwogICogQHZhcjogaHdfcGFyYW1zIHZhcmlhYmxlIHRvIGFwcGx5IHRoZSBsaXN0IGNvbnN0cmFpbnQKQEAgLTEwMzEsNyArMTAzMSw3IEBACiB9CiAKIC8qKgotICogc25kX3BjbV9od19jb25zdHJhaW50X3JhdG51bXMKKyAqIHNuZF9wY21faHdfY29uc3RyYWludF9yYXRudW1zIC0gYXBwbHkgcmF0bnVtcyBjb25zdHJhaW50IHRvIGEgcGFyYW1ldGVyCiAgKiBAcnVudGltZTogUENNIHJ1bnRpbWUgaW5zdGFuY2UKICAqIEBjb25kOiBjb25kaXRpb24gYml0cwogICogQHZhcjogaHdfcGFyYW1zIHZhcmlhYmxlIHRvIGFwcGx5IHRoZSByYXRudW1zIGNvbnN0cmFpbnQKQEAgLTEwNjQsNyArMTA2NCw3IEBACiB9CiAKIC8qKgotICogc25kX3BjbV9od19jb25zdHJhaW50X3JhdGRlbnMKKyAqIHNuZF9wY21faHdfY29uc3RyYWludF9yYXRkZW5zIC0gYXBwbHkgcmF0ZGVucyBjb25zdHJhaW50IHRvIGEgcGFyYW1ldGVyCiAgKiBAcnVudGltZTogUENNIHJ1bnRpbWUgaW5zdGFuY2UKICAqIEBjb25kOiBjb25kaXRpb24gYml0cwogICogQHZhcjogaHdfcGFyYW1zIHZhcmlhYmxlIHRvIGFwcGx5IHRoZSByYXRkZW5zIGNvbnN0cmFpbnQKQEAgLTEwOTUsNyArMTA5NSw3IEBACiB9CiAKIC8qKgotICogc25kX3BjbV9od19jb25zdHJhaW50X21zYml0cworICogc25kX3BjbV9od19jb25zdHJhaW50X21zYml0cyAtIGFkZCBhIGh3IGNvbnN0cmFpbnQgbXNiaXRzIHJ1bGUKICAqIEBydW50aW1lOiBQQ00gcnVudGltZSBpbnN0YW5jZQogICogQGNvbmQ6IGNvbmRpdGlvbiBiaXRzCiAgKiBAd2lkdGg6IHNhbXBsZSBiaXRzIHdpZHRoCkBAIC0xMTIzLDcgKzExMjMsNyBAQAogfQogCiAvKioKLSAqIHNuZF9wY21faHdfY29uc3RyYWludF9zdGVwCisgKiBzbmRfcGNtX2h3X2NvbnN0cmFpbnRfc3RlcCAtIGFkZCBhIGh3IGNvbnN0cmFpbnQgc3RlcCBydWxlCiAgKiBAcnVudGltZTogUENNIHJ1bnRpbWUgaW5zdGFuY2UKICAqIEBjb25kOiBjb25kaXRpb24gYml0cwogICogQHZhcjogaHdfcGFyYW1zIHZhcmlhYmxlIHRvIGFwcGx5IHRoZSBzdGVwIGNvbnN0cmFpbnQKQEAgLTExNTQsNyArMTE1NCw3IEBACiB9CQkKIAogLyoqCi0gKiBzbmRfcGNtX2h3X2NvbnN0cmFpbnRfcG93MgorICogc25kX3BjbV9od19jb25zdHJhaW50X3BvdzIgLSBhZGQgYSBodyBjb25zdHJhaW50IHBvd2VyLW9mLTIgcnVsZQogICogQHJ1bnRpbWU6IFBDTSBydW50aW1lIGluc3RhbmNlCiAgKiBAY29uZDogY29uZGl0aW9uIGJpdHMKICAqIEB2YXI6IGh3X3BhcmFtcyB2YXJpYWJsZSB0byBhcHBseSB0aGUgcG93ZXItb2YtMiBjb25zdHJhaW50CkBAIC0xMjAyLDEzICsxMjAyLDEzIEBACiBFWFBPUlRfU1lNQk9MKF9zbmRfcGNtX2h3X3BhcmFtc19hbnkpOwogCiAvKioKLSAqIHNuZF9wY21faHdfcGFyYW1fdmFsdWUKKyAqIHNuZF9wY21faHdfcGFyYW1fdmFsdWUgLSByZXR1cm4gQHBhcmFtcyBmaWVsZCBAdmFyIHZhbHVlCiAgKiBAcGFyYW1zOiB0aGUgaHdfcGFyYW1zIGluc3RhbmNlCiAgKiBAdmFyOiBwYXJhbWV0ZXIgdG8gcmV0cmlldmUKLSAqIEBkaXI6IHBvaW50ZXIgdG8gdGhlIGRpcmVjdGlvbiAoLTEsMCwxKSBvciBOVUxMCisgKiBAZGlyOiBwb2ludGVyIHRvIHRoZSBkaXJlY3Rpb24gKC0xLDAsMSkgb3IgJU5VTEwKICAqCi0gKiBSZXR1cm4gdGhlIHZhbHVlIGZvciBmaWVsZCBQQVIgaWYgaXQncyBmaXhlZCBpbiBjb25maWd1cmF0aW9uIHNwYWNlIAotICogIGRlZmluZWQgYnkgUEFSQU1TLiBSZXR1cm4gLUVJTlZBTCBvdGhlcndpc2UKKyAqIFJldHVybiB0aGUgdmFsdWUgZm9yIGZpZWxkIEB2YXIgaWYgaXQncyBmaXhlZCBpbiBjb25maWd1cmF0aW9uIHNwYWNlCisgKiBkZWZpbmVkIGJ5IEBwYXJhbXMuIFJldHVybiAtJUVJTlZBTCBvdGhlcndpc2UuCiAgKi8KIGludCBzbmRfcGNtX2h3X3BhcmFtX3ZhbHVlKGNvbnN0IHN0cnVjdCBzbmRfcGNtX2h3X3BhcmFtcyAqcGFyYW1zLAogCQkJICAgc25kX3BjbV9od19wYXJhbV90IHZhciwgaW50ICpkaXIpCkBAIC0xMjcxLDEzICsxMjcxLDEzIEBACiAKIAogLyoqCi0gKiBzbmRfcGNtX2h3X3BhcmFtX2ZpcnN0CisgKiBzbmRfcGNtX2h3X3BhcmFtX2ZpcnN0IC0gcmVmaW5lIGNvbmZpZyBzcGFjZSBhbmQgcmV0dXJuIG1pbmltdW0gdmFsdWUKICAqIEBwY206IFBDTSBpbnN0YW5jZQogICogQHBhcmFtczogdGhlIGh3X3BhcmFtcyBpbnN0YW5jZQogICogQHZhcjogcGFyYW1ldGVyIHRvIHJldHJpZXZlCi0gKiBAZGlyOiBwb2ludGVyIHRvIHRoZSBkaXJlY3Rpb24gKC0xLDAsMSkgb3IgTlVMTAorICogQGRpcjogcG9pbnRlciB0byB0aGUgZGlyZWN0aW9uICgtMSwwLDEpIG9yICVOVUxMCiAgKgotICogSW5zaWRlIGNvbmZpZ3VyYXRpb24gc3BhY2UgZGVmaW5lZCBieSBQQVJBTVMgcmVtb3ZlIGZyb20gUEFSIGFsbCAKKyAqIEluc2lkZSBjb25maWd1cmF0aW9uIHNwYWNlIGRlZmluZWQgYnkgQHBhcmFtcyByZW1vdmUgZnJvbSBAdmFyIGFsbAogICogdmFsdWVzID4gbWluaW11bS4gUmVkdWNlIGNvbmZpZ3VyYXRpb24gc3BhY2UgYWNjb3JkaW5nbHkuCiAgKiBSZXR1cm4gdGhlIG1pbmltdW0uCiAgKi8KQEAgLTEzMTcsMTMgKzEzMTcsMTMgQEAKIAogCiAvKioKLSAqIHNuZF9wY21faHdfcGFyYW1fbGFzdAorICogc25kX3BjbV9od19wYXJhbV9sYXN0IC0gcmVmaW5lIGNvbmZpZyBzcGFjZSBhbmQgcmV0dXJuIG1heGltdW0gdmFsdWUKICAqIEBwY206IFBDTSBpbnN0YW5jZQogICogQHBhcmFtczogdGhlIGh3X3BhcmFtcyBpbnN0YW5jZQogICogQHZhcjogcGFyYW1ldGVyIHRvIHJldHJpZXZlCi0gKiBAZGlyOiBwb2ludGVyIHRvIHRoZSBkaXJlY3Rpb24gKC0xLDAsMSkgb3IgTlVMTAorICogQGRpcjogcG9pbnRlciB0byB0aGUgZGlyZWN0aW9uICgtMSwwLDEpIG9yICVOVUxMCiAgKgotICogSW5zaWRlIGNvbmZpZ3VyYXRpb24gc3BhY2UgZGVmaW5lZCBieSBQQVJBTVMgcmVtb3ZlIGZyb20gUEFSIGFsbCAKKyAqIEluc2lkZSBjb25maWd1cmF0aW9uIHNwYWNlIGRlZmluZWQgYnkgQHBhcmFtcyByZW1vdmUgZnJvbSBAdmFyIGFsbAogICogdmFsdWVzIDwgbWF4aW11bS4gUmVkdWNlIGNvbmZpZ3VyYXRpb24gc3BhY2UgYWNjb3JkaW5nbHkuCiAgKiBSZXR1cm4gdGhlIG1heGltdW0uCiAgKi8KQEAgLTEzNDUsMTEgKzEzNDUsMTEgQEAKIEVYUE9SVF9TWU1CT0woc25kX3BjbV9od19wYXJhbV9sYXN0KTsKIAogLyoqCi0gKiBzbmRfcGNtX2h3X3BhcmFtX2Nob29zZQorICogc25kX3BjbV9od19wYXJhbV9jaG9vc2UgLSBjaG9vc2UgYSBjb25maWd1cmF0aW9uIGRlZmluZWQgYnkgQHBhcmFtcwogICogQHBjbTogUENNIGluc3RhbmNlCiAgKiBAcGFyYW1zOiB0aGUgaHdfcGFyYW1zIGluc3RhbmNlCiAgKgotICogQ2hvb3NlIG9uZSBjb25maWd1cmF0aW9uIGZyb20gY29uZmlndXJhdGlvbiBzcGFjZSBkZWZpbmVkIGJ5IFBBUkFNUworICogQ2hvb3NlIG9uZSBjb25maWd1cmF0aW9uIGZyb20gY29uZmlndXJhdGlvbiBzcGFjZSBkZWZpbmVkIGJ5IEBwYXJhbXMuCiAgKiBUaGUgY29uZmlndXJhdGlvbiBjaG9zZW4gaXMgdGhhdCBvYnRhaW5lZCBmaXhpbmcgaW4gdGhpcyBvcmRlcjoKICAqIGZpcnN0IGFjY2VzcywgZmlyc3QgZm9ybWF0LCBmaXJzdCBzdWJmb3JtYXQsIG1pbiBjaGFubmVscywKICAqIG1pbiByYXRlLCBtaW4gcGVyaW9kIHRpbWUsIG1heCBidWZmZXIgc2l6ZSwgbWluIHRpY2sgdGltZQpkaWZmIC0tZ2l0IGEvc291bmQvY29yZS9wY21fbWlzYy5jIGIvc291bmQvY29yZS9wY21fbWlzYy5jCmluZGV4IDg5YjdmNTQuLmVhMmJmODIgMTAwNjQ0Ci0tLSBhL3NvdW5kL2NvcmUvcGNtX21pc2MuYworKysgYi9zb3VuZC9jb3JlL3BjbV9taXNjLmMKQEAgLTMxOSw2ICszMTksNyBAQAogLyoqCiAgKiBzbmRfcGNtX2Zvcm1hdF9zaXplIC0gcmV0dXJuIHRoZSBieXRlIHNpemUgb2Ygc2FtcGxlcyBvbiB0aGUgZ2l2ZW4gZm9ybWF0CiAgKiBAZm9ybWF0OiB0aGUgZm9ybWF0IHRvIGNoZWNrCisgKiBAc2FtcGxlczogc2FtcGxpbmcgcmF0ZQogICoKICAqIFJldHVybnMgdGhlIGJ5dGUgc2l6ZSBvZiB0aGUgZ2l2ZW4gc2FtcGxlcyBmb3IgdGhlIGZvcm1hdCwgb3IgYQogICogbmVnYXRpdmUgZXJyb3IgY29kZSBpZiB1bmtub3duIGZvcm1hdC4KZGlmZiAtLWdpdCBhL3NvdW5kL2NvcmUvcGNtX25hdGl2ZS5jIGIvc291bmQvY29yZS9wY21fbmF0aXZlLmMKaW5kZXggZTYxZTEyNS4uYWVmMTg2ODIgMTAwNjQ0Ci0tLSBhL3NvdW5kL2NvcmUvcGNtX25hdGl2ZS5jCisrKyBiL3NvdW5kL2NvcmUvcGNtX25hdGl2ZS5jCkBAIC04NzUsMTAgKzg3NSw4IEBACiB9OwogCiAvKioKLSAqIHNuZF9wY21fc3RhcnQKKyAqIHNuZF9wY21fc3RhcnQgLSBzdGFydCBhbGwgbGlua2VkIHN0cmVhbXMKICAqIEBzdWJzdHJlYW06IHRoZSBQQ00gc3Vic3RyZWFtIGluc3RhbmNlCi0gKgotICogU3RhcnQgYWxsIGxpbmtlZCBzdHJlYW1zLgogICovCiBpbnQgc25kX3BjbV9zdGFydChzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKIHsKQEAgLTkyNiwxMiArOTI0LDExIEBACiB9OwogCiAvKioKLSAqIHNuZF9wY21fc3RvcAorICogc25kX3BjbV9zdG9wIC0gdHJ5IHRvIHN0b3AgYWxsIHJ1bm5pbmcgc3RyZWFtcyBpbiB0aGUgc3Vic3RyZWFtIGdyb3VwCiAgKiBAc3Vic3RyZWFtOiB0aGUgUENNIHN1YnN0cmVhbSBpbnN0YW5jZQogICogQHN0YXRlOiBQQ00gc3RhdGUgYWZ0ZXIgc3RvcHBpbmcgdGhlIHN0cmVhbQogICoKLSAqIFRyeSB0byBzdG9wIGFsbCBydW5uaW5nIHN0cmVhbXMgaW4gdGhlIHN1YnN0cmVhbSBncm91cC4KLSAqIFRoZSBzdGF0ZSBvZiBlYWNoIHN0cmVhbSBpcyBjaGFuZ2VkIHRvIHRoZSBnaXZlbiB2YWx1ZSBhZnRlciB0aGF0IHVuY29uZGl0aW9uYWxseS4KKyAqIFRoZSBzdGF0ZSBvZiBlYWNoIHN0cmVhbSBpcyB0aGVuIGNoYW5nZWQgdG8gdGhlIGdpdmVuIHN0YXRlIHVuY29uZGl0aW9uYWxseS4KICAqLwogaW50IHNuZF9wY21fc3RvcChzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwgaW50IHN0YXRlKQogewpAQCAtOTQxLDExICs5MzgsMTAgQEAKIEVYUE9SVF9TWU1CT0woc25kX3BjbV9zdG9wKTsKIAogLyoqCi0gKiBzbmRfcGNtX2RyYWluX2RvbmUKKyAqIHNuZF9wY21fZHJhaW5fZG9uZSAtIHN0b3AgdGhlIERNQSBvbmx5IHdoZW4gdGhlIGdpdmVuIHN0cmVhbSBpcyBwbGF5YmFjawogICogQHN1YnN0cmVhbTogdGhlIFBDTSBzdWJzdHJlYW0KICAqCi0gKiBTdG9wIHRoZSBETUEgb25seSB3aGVuIHRoZSBnaXZlbiBzdHJlYW0gaXMgcGxheWJhY2suCi0gKiBUaGUgc3RhdGUgaXMgY2hhbmdlZCB0byBTRVRVUC4KKyAqIEFmdGVyIHN0b3BwaW5nLCB0aGUgc3RhdGUgaXMgY2hhbmdlZCB0byBTRVRVUC4KICAqIFVubGlrZSBzbmRfcGNtX3N0b3AoKSwgdGhpcyBhZmZlY3RzIG9ubHkgdGhlIGdpdmVuIHN0cmVhbS4KICAqLwogaW50IHNuZF9wY21fZHJhaW5fZG9uZShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKQEAgLTEwNjUsMTAgKzEwNjEsOSBAQAogfTsKIAogLyoqCi0gKiBzbmRfcGNtX3N1c3BlbmQKKyAqIHNuZF9wY21fc3VzcGVuZCAtIHRyaWdnZXIgU1VTUEVORCB0byBhbGwgbGlua2VkIHN0cmVhbXMKICAqIEBzdWJzdHJlYW06IHRoZSBQQ00gc3Vic3RyZWFtCiAgKgotICogVHJpZ2dlciBTVVNQRU5EIHRvIGFsbCBsaW5rZWQgc3RyZWFtcy4KICAqIEFmdGVyIHRoaXMgY2FsbCwgYWxsIHN0cmVhbXMgYXJlIGNoYW5nZWQgdG8gU1VTUEVOREVEIHN0YXRlLgogICovCiBpbnQgc25kX3BjbV9zdXNwZW5kKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQpAQCAtMTA4OCwxMCArMTA4Myw5IEBACiBFWFBPUlRfU1lNQk9MKHNuZF9wY21fc3VzcGVuZCk7CiAKIC8qKgotICogc25kX3BjbV9zdXNwZW5kX2FsbAorICogc25kX3BjbV9zdXNwZW5kX2FsbCAtIHRyaWdnZXIgU1VTUEVORCB0byBhbGwgc3Vic3RyZWFtcyBpbiB0aGUgZ2l2ZW4gcGNtCiAgKiBAcGNtOiB0aGUgUENNIGluc3RhbmNlCiAgKgotICogVHJpZ2dlciBTVVNQRU5EIHRvIGFsbCBzdWJzdHJlYW1zIGluIHRoZSBnaXZlbiBwY20uCiAgKiBBZnRlciB0aGlzIGNhbGwsIGFsbCBzdHJlYW1zIGFyZSBjaGFuZ2VkIHRvIFNVU1BFTkRFRCBzdGF0ZS4KICAqLwogaW50IHNuZF9wY21fc3VzcGVuZF9hbGwoc3RydWN0IHNuZF9wY20gKnBjbSkKQEAgLTEzMTMsMTEgKzEzMDcsOSBAQAogfTsKIAogLyoqCi0gKiBzbmRfcGNtX3ByZXBhcmUKKyAqIHNuZF9wY21fcHJlcGFyZSAtIHByZXBhcmUgdGhlIFBDTSBzdWJzdHJlYW0gdG8gYmUgdHJpZ2dlcmFibGUKICAqIEBzdWJzdHJlYW06IHRoZSBQQ00gc3Vic3RyZWFtIGluc3RhbmNlCiAgKiBAZmlsZTogZmlsZSB0byByZWZlciBmX2ZsYWdzCi0gKgotICogUHJlcGFyZSB0aGUgUENNIHN1YnN0cmVhbSB0byBiZSB0cmlnZ2VyYWJsZS4KICAqLwogc3RhdGljIGludCBzbmRfcGNtX3ByZXBhcmUoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCiAJCQkgICBzdHJ1Y3QgZmlsZSAqZmlsZSkKZGlmZiAtLWdpdCBhL3NvdW5kL2NvcmUvc291bmQuYyBiL3NvdW5kL2NvcmUvc291bmQuYwppbmRleCBjMDY4NWUyLi40NGE2OWJiIDEwMDY0NAotLS0gYS9zb3VuZC9jb3JlL3NvdW5kLmMKKysrIGIvc291bmQvY29yZS9zb3VuZC5jCkBAIC0yNzQsOSArMjc0LDggQEAKIAkJcmV0dXJuIG1pbm9yOwogCX0KIAlzbmRfbWlub3JzW21pbm9yXSA9IHByZWc7Ci0JcHJlZy0+ZGV2ID0gZGV2aWNlX2NyZWF0ZV9kcnZkYXRhKHNvdW5kX2NsYXNzLCBkZXZpY2UsCi0JCQkJCSAgTUtERVYobWFqb3IsIG1pbm9yKSwKLQkJCQkJICBwcml2YXRlX2RhdGEsICIlcyIsIG5hbWUpOworCXByZWctPmRldiA9IGRldmljZV9jcmVhdGUoc291bmRfY2xhc3MsIGRldmljZSwgTUtERVYobWFqb3IsIG1pbm9yKSwKKwkJCQkgIHByaXZhdGVfZGF0YSwgIiVzIiwgbmFtZSk7CiAJaWYgKElTX0VSUihwcmVnLT5kZXYpKSB7CiAJCXNuZF9taW5vcnNbbWlub3JdID0gTlVMTDsKIAkJbXV0ZXhfdW5sb2NrKCZzb3VuZF9tdXRleCk7CmRpZmYgLS1naXQgYS9zb3VuZC9kcml2ZXJzL2R1bW15LmMgYi9zb3VuZC9kcml2ZXJzL2R1bW15LmMKaW5kZXggZTVlNzQ5Zi4uNzNiZTdlMSAxMDA2NDQKLS0tIGEvc291bmQvZHJpdmVycy9kdW1teS5jCisrKyBiL3NvdW5kL2RyaXZlcnMvZHVtbXkuYwpAQCAtNTEsNyArNTEsNyBAQAogCWlmIChlcnIgPCAwKQogCQlyZXR1cm4gZXJyOwogCWVyciA9IHNuZF9wY21faHdfY29uc3RyYWludF9taW5tYXgocnVudGltZSwgU05EUlZfUENNX0hXX1BBUkFNX0JVRkZFUl9CWVRFUywgMjU2LCBVSU5UX01BWCk7Ci0JaWYgKGVycikgPCAwKQorCWlmIChlcnIgPCAwKQogCQlyZXR1cm4gZXJyOwogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvc291bmQvaTJjL290aGVyL3RlYTU3NXgtdHVuZXIuYyBiL3NvdW5kL2kyYy9vdGhlci90ZWE1NzV4LXR1bmVyLmMKaW5kZXggODNlOTAwNS4uYzEzYTE3OCAxMDA2NDQKLS0tIGEvc291bmQvaTJjL290aGVyL3RlYTU3NXgtdHVuZXIuYworKysgYi9zb3VuZC9pMmMvb3RoZXIvdGVhNTc1eC10dW5lci5jCkBAIC04Nyw4ICs4Nyw3IEBACiBzdGF0aWMgaW50IHNuZF90ZWE1NzV4X2lvY3RsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlLAogCQkJICAgICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGRhdGEpCiB7Ci0Jc3RydWN0IHZpZGVvX2RldmljZSAqZGV2ID0gdmlkZW9fZGV2ZGF0YShmaWxlKTsKLQlzdHJ1Y3Qgc25kX3RlYTU3NXggKnRlYSA9IHZpZGVvX2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IHNuZF90ZWE1NzV4ICp0ZWEgPSB2aWRlb19kcnZkYXRhKGZpbGUpOwogCXZvaWQgX191c2VyICphcmcgPSAodm9pZCBfX3VzZXIgKilkYXRhOwogCQogCXN3aXRjaChjbWQpIHsKQEAgLTE3NSw2ICsxNzQsMjEgQEAKIHsKIH0KIAorc3RhdGljIGludCBzbmRfdGVhNTc1eF9leGNsdXNpdmVfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlzdHJ1Y3Qgc25kX3RlYTU3NXggKnRlYSA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CisKKwlyZXR1cm4gdGVzdF9hbmRfc2V0X2JpdCgwLCAmdGVhLT5pbl91c2UpID8gLUVCVVNZIDogMDsKK30KKworc3RhdGljIGludCBzbmRfdGVhNTc1eF9leGNsdXNpdmVfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlzdHJ1Y3Qgc25kX3RlYTU3NXggKnRlYSA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CisKKwljbGVhcl9iaXQoMCwgJnRlYS0+aW5fdXNlKTsKKwlyZXR1cm4gMDsKK30KKwogLyoKICAqIGluaXRpYWxpemUgYWxsIHRoZSB0ZWE1NzV4IGNoaXBzCiAgKi8KQEAgLTE5Myw5ICsyMDcsMTAgQEAKIAl0ZWEtPnZkLnJlbGVhc2UgPSBzbmRfdGVhNTc1eF9yZWxlYXNlOwogCXZpZGVvX3NldF9kcnZkYXRhKCZ0ZWEtPnZkLCB0ZWEpOwogCXRlYS0+dmQuZm9wcyA9ICZ0ZWEtPmZvcHM7CisJdGVhLT5pbl91c2UgPSAwOwogCXRlYS0+Zm9wcy5vd25lciA9IHRlYS0+Y2FyZC0+bW9kdWxlOwotCXRlYS0+Zm9wcy5vcGVuID0gdmlkZW9fZXhjbHVzaXZlX29wZW47Ci0JdGVhLT5mb3BzLnJlbGVhc2UgPSB2aWRlb19leGNsdXNpdmVfcmVsZWFzZTsKKwl0ZWEtPmZvcHMub3BlbiA9IHNuZF90ZWE1NzV4X2V4Y2x1c2l2ZV9vcGVuOworCXRlYS0+Zm9wcy5yZWxlYXNlID0gc25kX3RlYTU3NXhfZXhjbHVzaXZlX3JlbGVhc2U7CiAJdGVhLT5mb3BzLmlvY3RsID0gc25kX3RlYTU3NXhfaW9jdGw7CiAJaWYgKHZpZGVvX3JlZ2lzdGVyX2RldmljZSgmdGVhLT52ZCwgVkZMX1RZUEVfUkFESU8sIHRlYS0+ZGV2X25yIC0gMSkgPCAwKSB7CiAJCXNuZF9wcmludGsoS0VSTl9FUlIgInVuYWJsZSB0byByZWdpc3RlciB0ZWE1NzV4IHR1bmVyXG4iKTsKZGlmZiAtLWdpdCBhL3NvdW5kL29zcy9hYzk3X2NvZGVjLmMgYi9zb3VuZC9vc3MvYWM5N19jb2RlYy5jCmluZGV4IGI2MzgzOWUuLjQ1NmExYjQgMTAwNjQ0Ci0tLSBhL3NvdW5kL29zcy9hYzk3X2NvZGVjLmMKKysrIGIvc291bmQvb3NzL2FjOTdfY29kZWMuYwpAQCAtMzAsNyArMzAsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgogICogSGlzdG9yeQotICogTWF5IDAyLCAyMDAzIExpYW0gR2lyZHdvb2QgPGxpYW0uZ2lyZHdvb2RAd29sZnNvbm1pY3JvLmNvbT4KKyAqIE1heSAwMiwgMjAwMyBMaWFtIEdpcmR3b29kIDxscmdAc2xpbWxvZ2ljLmNvLnVrPgogICoJUmVtb3ZlZCBub24gZXhpc3RhbnQgV005NzAwCiAgKglBZGRlZCBzdXBwb3J0IGZvciBXTTk3MDUsIFdNOTcwOCwgV005NzA5LCBXTTk3MTAsIFdNOTcxMQogICoJV005NzEyIGFuZCBXTTk3MTcKZGlmZiAtLWdpdCBhL3NvdW5kL29zcy9zaF9kYWNfYXVkaW8uYyBiL3NvdW5kL29zcy9zaF9kYWNfYXVkaW8uYwppbmRleCBiNDkzNjYwLi5lNWQ0MjM5IDEwMDY0NAotLS0gYS9zb3VuZC9vc3Mvc2hfZGFjX2F1ZGlvLmMKKysrIGIvc291bmQvb3NzL3NoX2RhY19hdWRpby5jCkBAIC0yNiw3ICsyNiw3IEBACiAjaW5jbHVkZSA8YXNtL2NwdS9kYWMuaD4KICNpbmNsdWRlIDxhc20vY3B1L3RpbWVyLmg+CiAjaW5jbHVkZSA8YXNtL21hY2h2ZWMuaD4KLSNpbmNsdWRlIDxhc20vaHA2eHguaD4KKyNpbmNsdWRlIDxtYWNoL2hwNnh4Lmg+CiAjaW5jbHVkZSA8YXNtL2hkNjQ0NjEuaD4KIAogI2RlZmluZSBNT0ROQU1FICJzaF9kYWNfYXVkaW8iCmRpZmYgLS1naXQgYS9zb3VuZC9vc3Mvc291bmRjYXJkLmMgYi9zb3VuZC9vc3Mvc291bmRjYXJkLmMKaW5kZXggN2Q4OWMwOC4uNjFhYWVkYSAxMDA2NDQKLS0tIGEvc291bmQvb3NzL3NvdW5kY2FyZC5jCisrKyBiL3NvdW5kL29zcy9zb3VuZGNhcmQuYwpAQCAtNTYwLDE5ICs1NjAsMTggQEAKIAlzb3VuZF9kbWFwX2ZsYWcgPSAoZG1hYnVmID4gMCA/IDEgOiAwKTsKIAogCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGRldl9saXN0KTsgaSsrKSB7Ci0JCWRldmljZV9jcmVhdGVfZHJ2ZGF0YShzb3VuZF9jbGFzcywgTlVMTCwKLQkJCQkgICAgICBNS0RFVihTT1VORF9NQUpPUiwgZGV2X2xpc3RbaV0ubWlub3IpLAotCQkJCSAgICAgIE5VTEwsICIlcyIsIGRldl9saXN0W2ldLm5hbWUpOworCQlkZXZpY2VfY3JlYXRlKHNvdW5kX2NsYXNzLCBOVUxMLAorCQkJICAgICAgTUtERVYoU09VTkRfTUFKT1IsIGRldl9saXN0W2ldLm1pbm9yKSwgTlVMTCwKKwkJCSAgICAgICIlcyIsIGRldl9saXN0W2ldLm5hbWUpOwogCiAJCWlmICghZGV2X2xpc3RbaV0ubnVtKQogCQkJY29udGludWU7CiAKIAkJZm9yIChqID0gMTsgaiA8ICpkZXZfbGlzdFtpXS5udW07IGorKykKLQkJCWRldmljZV9jcmVhdGVfZHJ2ZGF0YShzb3VuZF9jbGFzcywgTlVMTCwKLQkJCQkJICAgICAgTUtERVYoU09VTkRfTUFKT1IsCi0JCQkJCQkgICAgZGV2X2xpc3RbaV0ubWlub3IgKyAoaioweDEwKSksCi0JCQkJCSAgICAgIE5VTEwsCi0JCQkJCSAgICAgICIlcyVkIiwgZGV2X2xpc3RbaV0ubmFtZSwgaik7CisJCQlkZXZpY2VfY3JlYXRlKHNvdW5kX2NsYXNzLCBOVUxMLAorCQkJCSAgICAgIE1LREVWKFNPVU5EX01BSk9SLAorCQkJCQkgICAgZGV2X2xpc3RbaV0ubWlub3IgKyAoaioweDEwKSksCisJCQkJICAgICAgTlVMTCwgIiVzJWQiLCBkZXZfbGlzdFtpXS5uYW1lLCBqKTsKIAl9CiAKIAlpZiAoc291bmRfbmJsb2NrcyA+PSAxMDI0KQpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2FjOTcvYWM5N19wYXRjaC5jIGIvc291bmQvcGNpL2FjOTcvYWM5N19wYXRjaC5jCmluZGV4IDZjZTNjYmUuLjZlODMxYWYgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9hYzk3L2FjOTdfcGF0Y2guYworKysgYi9zb3VuZC9wY2kvYWM5Ny9hYzk3X3BhdGNoLmMKQEAgLTQ3Niw3ICs0NzYsNyBAQAogfQogCiAvKgotICogTWF5IDIsIDIwMDMgTGlhbSBHaXJkd29vZCA8bGlhbS5naXJkd29vZEB3b2xmc29ubWljcm8uY29tPgorICogTWF5IDIsIDIwMDMgTGlhbSBHaXJkd29vZCA8bHJnQHNsaW1sb2dpYy5jby51az4KICAqICByZW1vdmVkIGJyb2tlbiB3b2xmc29uMDAgcGF0Y2guCiAgKiAgYWRkZWQgc3VwcG9ydCBmb3IgV005NzA1LFdNOTcwOCxXTTk3MDksV005NzEwLFdNOTcxMSxXTTk3MTIgYW5kIFdNOTcxNy4KICAqLwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2NhMDEwNi9jYTAxMDZfbWFpbi5jIGIvc291bmQvcGNpL2NhMDEwNi9jYTAxMDZfbWFpbi5jCmluZGV4IGE3ZDg5NjYuLjg4ZmJmMjggMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9jYTAxMDYvY2EwMTA2X21haW4uYworKysgYi9zb3VuZC9wY2kvY2EwMTA2L2NhMDEwNl9tYWluLmMKQEAgLTc1OSw3ICs3NTksNiBAQAogCQkJICAgICAgIFNQQ1NfQ0hBTk5FTE5VTV9MRUZUIHwgU1BDU19TT1VSQ0VOVU1fVU5TUEVDIHwKIAkJCSAgICAgICBTUENTX0dFTkVSQVRJT05TVEFUVVMgfCAweDAwMDAxMjAwIHwKIAkJCSAgICAgICAweDAwMDAwMDAwIHwgU1BDU19FTVBIQVNJU19OT05FIHwgU1BDU19DT1BZUklHSFQgKTsKLQl9CiAjZW5kaWYKIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2hkYS9wYXRjaF9udmhkbWkuYyBiL3NvdW5kL3BjaS9oZGEvcGF0Y2hfbnZoZG1pLmMKaW5kZXggMWE2NTc3NS4uMmVlZDJjOCAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2hkYS9wYXRjaF9udmhkbWkuYworKysgYi9zb3VuZC9wY2kvaGRhL3BhdGNoX252aGRtaS5jCkBAIC0xMTYsNiArMTE2LDcgQEAKIAljb2RlYy0+cGNtX2luZm8gPSBpbmZvOwogCiAJaW5mby0+bmFtZSA9ICJOVklESUEgSERNSSI7CisJaW5mby0+cGNtX3R5cGUgPSBIREFfUENNX1RZUEVfSERNSTsKIAlpbmZvLT5zdHJlYW1bU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDS10gPSBudmhkbWlfcGNtX2RpZ2l0YWxfcGxheWJhY2s7CiAKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9oZGEvcGF0Y2hfcmVhbHRlay5jIGIvc291bmQvcGNpL2hkYS9wYXRjaF9yZWFsdGVrLmMKaW5kZXggMGI2ZTY4Mi4uZTcyNzA3YyAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2hkYS9wYXRjaF9yZWFsdGVrLmMKKysrIGIvc291bmQvcGNpL2hkYS9wYXRjaF9yZWFsdGVrLmMKQEAgLTgyMiw2ICs4MjIsMjcgQEAKIAkJCSAgICBzcGVjLT5qYWNrX3ByZXNlbnQgPyAwIDogUElOX09VVCk7CiB9CiAKK3N0YXRpYyB2b2lkIGFsY19taWNfYXV0b211dGUoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCit7CisJc3RydWN0IGFsY19zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CisJdW5zaWduZWQgaW50IHByZXNlbnQ7CisJdW5zaWduZWQgaW50IG1pY19uaWQgPSBzcGVjLT5hdXRvY2ZnLmlucHV0X3BpbnNbQVVUT19QSU5fTUlDXTsKKwl1bnNpZ25lZCBpbnQgZm1pY19uaWQgPSBzcGVjLT5hdXRvY2ZnLmlucHV0X3BpbnNbQVVUT19QSU5fRlJPTlRfTUlDXTsKKwl1bnNpZ25lZCBpbnQgbWl4X25pZCA9IHNwZWMtPmNhcHNyY19uaWRzWzBdOworCXVuc2lnbmVkIGludCBjYXBzcmNfaWR4X21pYywgY2Fwc3JjX2lkeF9mbWljOworCisJY2Fwc3JjX2lkeF9taWMgPSBtaWNfbmlkIC0gMHgxODsKKwljYXBzcmNfaWR4X2ZtaWMgPSBmbWljX25pZCAtIDB4MTg7CisJcHJlc2VudCA9IHNuZF9oZGFfY29kZWNfcmVhZChjb2RlYywgbWljX25pZCwgMCwKKwkJCQkgICAgIEFDX1ZFUkJfR0VUX1BJTl9TRU5TRSwgMCkgJiAweDgwMDAwMDAwOworCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIG1peF9uaWQsIDAsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsCisJCSAgICAweDcwMDAgfCAoY2Fwc3JjX2lkeF9taWMgPDwgOCkgfCAocHJlc2VudCA/IDAgOiAweDgwKSk7CisJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgbWl4X25pZCwgMCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwKKwkJICAgIDB4NzAwMCB8IChjYXBzcmNfaWR4X2ZtaWMgPDwgOCkgfCAocHJlc2VudCA/IDB4ODAgOiAwKSk7CisJc25kX2hkYV9jb2RlY19hbXBfc3RlcmVvKGNvZGVjLCAweDBiLCBIREFfSU5QVVQsIGNhcHNyY19pZHhfZm1pYywKKwkJCSBIREFfQU1QX01VVEUsIHByZXNlbnQgPyBIREFfQU1QX01VVEUgOiAwKTsKK30KKwogLyogdW5zb2xpY2l0ZWQgZXZlbnQgZm9yIEhQIGphY2sgc2Vuc2luZyAqLwogc3RhdGljIHZvaWQgYWxjX3NrdV91bnNvbF9ldmVudChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgdW5zaWduZWQgaW50IHJlcykKIHsKQEAgLTgyOSwxMCArODUwLDE3IEBACiAJCXJlcyA+Pj0gMjg7CiAJZWxzZQogCQlyZXMgPj49IDI2OwotCWlmIChyZXMgIT0gQUxDODgwX0hQX0VWRU5UKQotCQlyZXR1cm47CisJaWYgKHJlcyA9PSBBTEM4ODBfSFBfRVZFTlQpCisJCWFsY19za3VfYXV0b211dGUoY29kZWMpOwogCisJaWYgKHJlcyA9PSBBTEM4ODBfTUlDX0VWRU5UKQorCQlhbGNfbWljX2F1dG9tdXRlKGNvZGVjKTsKK30KKworc3RhdGljIHZvaWQgYWxjX2luaXRob29rKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQorewogCWFsY19za3VfYXV0b211dGUoY29kZWMpOworCWFsY19taWNfYXV0b211dGUoY29kZWMpOwogfQogCiAvKiBhZGRpdGlvbmFsIGluaXRpYWxpemF0aW9uIGZvciBBTEM4ODggdmFyaWFudHMgKi8KQEAgLTEwMTgsMTAgKzEwNDYsMTcgQEAKIAkJZWxzZQogCQkJcmV0dXJuOwogCX0KKwlpZiAoc3BlYy0+YXV0b2NmZy5ocF9waW5zWzBdKQorCQlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCBzcGVjLT5hdXRvY2ZnLmhwX3BpbnNbMF0sIDAsCisJCQlBQ19WRVJCX1NFVF9VTlNPTElDSVRFRF9FTkFCTEUsCisJCQlBQ19VU1JTUF9FTiB8IEFMQzg4MF9IUF9FVkVOVCk7CiAKLQlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCBzcGVjLT5hdXRvY2ZnLmhwX3BpbnNbMF0sIDAsCi0JCQkgICAgQUNfVkVSQl9TRVRfVU5TT0xJQ0lURURfRU5BQkxFLAotCQkJICAgIEFDX1VTUlNQX0VOIHwgQUxDODgwX0hQX0VWRU5UKTsKKwlpZiAoc3BlYy0+YXV0b2NmZy5pbnB1dF9waW5zW0FVVE9fUElOX01JQ10gJiYKKwkJc3BlYy0+YXV0b2NmZy5pbnB1dF9waW5zW0FVVE9fUElOX0ZST05UX01JQ10pCisJCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsCisJCQlzcGVjLT5hdXRvY2ZnLmlucHV0X3BpbnNbQVVUT19QSU5fTUlDXSwgMCwKKwkJCUFDX1ZFUkJfU0VUX1VOU09MSUNJVEVEX0VOQUJMRSwKKwkJCUFDX1VTUlNQX0VOIHwgQUxDODgwX01JQ19FVkVOVCk7CiAKIAlzcGVjLT51bnNvbF9ldmVudCA9IGFsY19za3VfdW5zb2xfZXZlbnQ7CiB9CkBAIC0zODA4LDcgKzM4NDMsNyBAQAogCWFsYzg4MF9hdXRvX2luaXRfZXh0cmFfb3V0KGNvZGVjKTsKIAlhbGM4ODBfYXV0b19pbml0X2FuYWxvZ19pbnB1dChjb2RlYyk7CiAJaWYgKHNwZWMtPnVuc29sX2V2ZW50KQotCQlhbGNfc2t1X2F1dG9tdXRlKGNvZGVjKTsKKwkJYWxjX2luaXRob29rKGNvZGVjKTsKIH0KIAogLyoKQEAgLTUyMTksNyArNTI1NCw3IEBACiAJYWxjMjYwX2F1dG9faW5pdF9tdWx0aV9vdXQoY29kZWMpOwogCWFsYzI2MF9hdXRvX2luaXRfYW5hbG9nX2lucHV0KGNvZGVjKTsKIAlpZiAoc3BlYy0+dW5zb2xfZXZlbnQpCi0JCWFsY19za3VfYXV0b211dGUoY29kZWMpOworCQlhbGNfaW5pdGhvb2soY29kZWMpOwogfQogCiAjaWZkZWYgQ09ORklHX1NORF9IREFfUE9XRVJfU0FWRQpAQCAtNjYyOSw3ICs2NjY0LDcgQEAKIAlhbGM4ODJfYXV0b19pbml0X2FuYWxvZ19pbnB1dChjb2RlYyk7CiAJYWxjODgyX2F1dG9faW5pdF9pbnB1dF9zcmMoY29kZWMpOwogCWlmIChzcGVjLT51bnNvbF9ldmVudCkKLQkJYWxjX3NrdV9hdXRvbXV0ZShjb2RlYyk7CisJCWFsY19pbml0aG9vayhjb2RlYyk7CiB9CiAKIHN0YXRpYyBpbnQgcGF0Y2hfYWxjODgzKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKTsgLyogY2FsbGVkIGluIHBhdGNoX2FsYzg4MigpICovCkBAIC04MzA2LDggKzgzNDEsOCBAQAogCVNORF9QQ0lfUVVJUksoMHgxMDNjLCAweDJhNGYsICJIUCBTYW1iYSIsIEFMQzg4OF8zU1RfSFApLAogCVNORF9QQ0lfUVVJUksoMHgxMDNjLCAweDJhNjAsICJIUCBMdWNrbm93IiwgQUxDODg4XzNTVF9IUCksCiAJU05EX1BDSV9RVUlSSygweDEwM2MsIDB4MmE2MSwgIkhQIE5ldHRsZSIsIEFMQzg4M182U1RfRElHKSwKKwlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxODczLCAiQXN1cyBNOTBWIiwgQUxDODg4X0FTVVNfTTkwViksCiAJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4ODI0OSwgIkFzdXMgTTJBLVZNIEhETUkiLCBBTEM4ODNfM1NUXzZjaF9ESUcpLAotCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDgzMTcsICJBc3VzIE05MFYiLCBBTEM4ODhfQVNVU19NOTBWKSwKIAlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHg4MzVmLCAiQXN1cyBFZWUgMTYwMSIsIEFMQzg4OF9BU1VTX0VFRTE2MDEpLAogCVNORF9QQ0lfUVVJUksoMHgxMDViLCAweDBjZTgsICJGb3hjb25uIFAzNUFYLVMiLCBBTEM4ODNfNlNUX0RJRyksCiAJU05EX1BDSV9RVUlSSygweDEwNWIsIDB4NjY2OCwgIkZveGNvbm4iLCBBTEM4ODNfNlNUX0RJRyksCkBAIC04NzU4LDcgKzg3OTMsNyBAQAogCWFsYzg4M19hdXRvX2luaXRfYW5hbG9nX2lucHV0KGNvZGVjKTsKIAlhbGM4ODNfYXV0b19pbml0X2lucHV0X3NyYyhjb2RlYyk7CiAJaWYgKHNwZWMtPnVuc29sX2V2ZW50KQotCQlhbGNfc2t1X2F1dG9tdXRlKGNvZGVjKTsKKwkJYWxjX2luaXRob29rKGNvZGVjKTsKIH0KIAogc3RhdGljIGludCBwYXRjaF9hbGM4ODMoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCkBAIC04ODAyLDggKzg4MzcsMTMgQEAKIAogCXN3aXRjaCAoY29kZWMtPnZlbmRvcl9pZCkgewogCWNhc2UgMHgxMGVjMDg4ODoKLQkJc3BlYy0+c3RyZWFtX25hbWVfYW5hbG9nID0gIkFMQzg4OCBBbmFsb2ciOwotCQlzcGVjLT5zdHJlYW1fbmFtZV9kaWdpdGFsID0gIkFMQzg4OCBEaWdpdGFsIjsKKwkJaWYgKGNvZGVjLT5yZXZpc2lvbl9pZCA9PSAweDEwMDEwMSkgeworCQkJc3BlYy0+c3RyZWFtX25hbWVfYW5hbG9nID0gIkFMQzEyMDAgQW5hbG9nIjsKKwkJCXNwZWMtPnN0cmVhbV9uYW1lX2RpZ2l0YWwgPSAiQUxDMTIwMCBEaWdpdGFsIjsKKwkJfSBlbHNlIHsKKwkJCXNwZWMtPnN0cmVhbV9uYW1lX2FuYWxvZyA9ICJBTEM4ODggQW5hbG9nIjsKKwkJCXNwZWMtPnN0cmVhbV9uYW1lX2RpZ2l0YWwgPSAiQUxDODg4IERpZ2l0YWwiOworCQl9CiAJCWJyZWFrOwogCWNhc2UgMHgxMGVjMDg4OToKIAkJc3BlYy0+c3RyZWFtX25hbWVfYW5hbG9nID0gIkFMQzg4OSBBbmFsb2ciOwpAQCAtMTAyODUsNyArMTAzMjUsNyBAQAogCWFsYzI2Ml9hdXRvX2luaXRfYW5hbG9nX2lucHV0KGNvZGVjKTsKIAlhbGMyNjJfYXV0b19pbml0X2lucHV0X3NyYyhjb2RlYyk7CiAJaWYgKHNwZWMtPnVuc29sX2V2ZW50KQotCQlhbGNfc2t1X2F1dG9tdXRlKGNvZGVjKTsKKwkJYWxjX2luaXRob29rKGNvZGVjKTsKIH0KIAogLyoKQEAgLTEwMzQzLDcgKzEwMzgzLDcgQEAKIAlTTkRfUENJX1FVSVJLKDB4MTA0ZCwgMHg5MDE1LCAiU29ueSAweDkwMTUiLCBBTEMyNjJfU09OWV9BU1NBTUQpLAogCVNORF9QQ0lfUVVJUksoMHgxMTc5LCAweDAwMDEsICJUb3NoaWJhIGR5bmFib29rIFNTIFJYMSIsCiAJCSAgICAgIEFMQzI2Ml9UT1NISUJBX1JYMSksCi0JU05EX1BDSV9RVUlSSygweDExNzksIDB4MDI2OCwgIlRvc2hpYmEgUzA2IiwgQUxDMjYyX1RPU0hJQkFfUzA2KSwKKwlTTkRfUENJX1FVSVJLKDB4MTE3OSwgMHhmZjdiLCAiVG9zaGliYSBTMDYiLCBBTEMyNjJfVE9TSElCQV9TMDYpLAogCVNORF9QQ0lfUVVJUksoMHgxMGNmLCAweDEzOTcsICJGdWppdHN1IiwgQUxDMjYyX0ZVSklUU1UpLAogCVNORF9QQ0lfUVVJUksoMHgxMGNmLCAweDE0MmQsICJGdWppdHN1IExpZmVib29rIEU4NDEwIiwgQUxDMjYyX0ZVSklUU1UpLAogCVNORF9QQ0lfUVVJUksoMHgxNDRkLCAweGMwMzIsICJTYW1zdW5nIFExIFVsdHJhIiwgQUxDMjYyX1VMVFJBKSwKQEAgLTExNDE3LDcgKzExNDU3LDcgQEAKIAlhbGMyNjhfYXV0b19pbml0X21vbm9fc3BlYWtlcl9vdXQoY29kZWMpOwogCWFsYzI2OF9hdXRvX2luaXRfYW5hbG9nX2lucHV0KGNvZGVjKTsKIAlpZiAoc3BlYy0+dW5zb2xfZXZlbnQpCi0JCWFsY19za3VfYXV0b211dGUoY29kZWMpOworCQlhbGNfaW5pdGhvb2soY29kZWMpOwogfQogCiAvKgpAQCAtMTIyMDAsNyArMTIyNDAsNyBAQAogCWFsYzI2OV9hdXRvX2luaXRfaHBfb3V0KGNvZGVjKTsKIAlhbGMyNjlfYXV0b19pbml0X2FuYWxvZ19pbnB1dChjb2RlYyk7CiAJaWYgKHNwZWMtPnVuc29sX2V2ZW50KQotCQlhbGNfc2t1X2F1dG9tdXRlKGNvZGVjKTsKKwkJYWxjX2luaXRob29rKGNvZGVjKTsKIH0KIAogLyoKQEAgLTEzMjgxLDcgKzEzMzIxLDcgQEAKIAlhbGM4NjFfYXV0b19pbml0X2hwX291dChjb2RlYyk7CiAJYWxjODYxX2F1dG9faW5pdF9hbmFsb2dfaW5wdXQoY29kZWMpOwogCWlmIChzcGVjLT51bnNvbF9ldmVudCkKLQkJYWxjX3NrdV9hdXRvbXV0ZShjb2RlYyk7CisJCWFsY19pbml0aG9vayhjb2RlYyk7CiB9CiAKICNpZmRlZiBDT05GSUdfU05EX0hEQV9QT1dFUl9TQVZFCkBAIC0xNDM5Myw3ICsxNDQzMyw3IEBACiAJYWxjODYxdmRfYXV0b19pbml0X2FuYWxvZ19pbnB1dChjb2RlYyk7CiAJYWxjODYxdmRfYXV0b19pbml0X2lucHV0X3NyYyhjb2RlYyk7CiAJaWYgKHNwZWMtPnVuc29sX2V2ZW50KQotCQlhbGNfc2t1X2F1dG9tdXRlKGNvZGVjKTsKKwkJYWxjX2luaXRob29rKGNvZGVjKTsKIH0KIAogc3RhdGljIGludCBwYXRjaF9hbGM4NjF2ZChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKQEAgLTE1NjY3LDcgKzE1NzA3LDcgQEAKIAogc3RhdGljIHN0cnVjdCBzbmRfcGNpX3F1aXJrIGFsYzY2Ml9jZmdfdGJsW10gPSB7CiAJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTg3OCwgIkFTVVMgTTUxVkEiLCBBTEM2NjNfQVNVU19NNTFWQSksCi0JU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTlhMywgIkFTVVMgTTUxVkEiLCBBTEM2NjNfQVNVU19HNTBWKSwKKwlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxOWEzLCAiQVNVUyBHNTBWIiwgQUxDNjYzX0FTVVNfRzUwViksCiAJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4ODI5MCwgIkFTVVMgUDVHQy1NWCIsIEFMQzY2Ml8zU1RfNmNoX0RJRyksCiAJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4ODJhMSwgIkFTVVMgRWVlcGMiLCBBTEM2NjJfQVNVU19FRUVQQ19QNzAxKSwKIAlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHg4MmQxLCAiQVNVUyBFZWVwYyBFUDIwIiwgQUxDNjYyX0FTVVNfRUVFUENfRVAyMCksCkBAIC0xNTY4MCw2ICsxNTcyMCw3IEBACiAJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTFkMywgIkFTVVMgTkIiLCBBTEM2NjNfQVNVU19NT0RFMSksCiAJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTIwMywgIkFTVVMgTkIiLCBBTEM2NjNfQVNVU19NT0RFMSksCiAJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTllMywgIkFTVVMgTkIiLCBBTEM2NjNfQVNVU19NT0RFMSksCisJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTk5MywgIkFTVVMgTjIwIiwgQUxDNjYzX0FTVVNfTU9ERTEpLAogCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDE5YzMsICJBU1VTIEY1Wi9GNngiLCBBTEM2NjJfQVNVU19NT0RFMiksCiAJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTMzOSwgIkFTVVMgTkIiLCBBTEM2NjJfQVNVU19NT0RFMiksCiAJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTkxMywgIkFTVVMgTkIiLCBBTEM2NjJfQVNVU19NT0RFMiksCkBAIC0xNjIyMyw3ICsxNjI2NCw3IEBACiAJYWxjNjYyX2F1dG9faW5pdF9hbmFsb2dfaW5wdXQoY29kZWMpOwogCWFsYzY2Ml9hdXRvX2luaXRfaW5wdXRfc3JjKGNvZGVjKTsKIAlpZiAoc3BlYy0+dW5zb2xfZXZlbnQpCi0JCWFsY19za3VfYXV0b211dGUoY29kZWMpOworCQlhbGNfaW5pdGhvb2soY29kZWMpOwogfQogCiBzdGF0aWMgaW50IHBhdGNoX2FsYzY2MihzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKQEAgLTE2MjY4LDYgKzE2MzA5LDkgQEAKIAlpZiAoY29kZWMtPnZlbmRvcl9pZCA9PSAweDEwZWMwNjYzKSB7CiAJCXNwZWMtPnN0cmVhbV9uYW1lX2FuYWxvZyA9ICJBTEM2NjMgQW5hbG9nIjsKIAkJc3BlYy0+c3RyZWFtX25hbWVfZGlnaXRhbCA9ICJBTEM2NjMgRGlnaXRhbCI7CisJfSBlbHNlIGlmIChjb2RlYy0+dmVuZG9yX2lkID09IDB4MTBlYzAyNzIpIHsKKwkJc3BlYy0+c3RyZWFtX25hbWVfYW5hbG9nID0gIkFMQzI3MiBBbmFsb2ciOworCQlzcGVjLT5zdHJlYW1fbmFtZV9kaWdpdGFsID0gIkFMQzI3MiBEaWdpdGFsIjsKIAl9IGVsc2UgewogCQlzcGVjLT5zdHJlYW1fbmFtZV9hbmFsb2cgPSAiQUxDNjYyIEFuYWxvZyI7CiAJCXNwZWMtPnN0cmVhbV9uYW1lX2RpZ2l0YWwgPSAiQUxDNjYyIERpZ2l0YWwiOwpAQCAtMTYzMDUsNiArMTYzNDksNyBAQAogCXsgLmlkID0gMHgxMGVjMDI2NywgLm5hbWUgPSAiQUxDMjY3IiwgLnBhdGNoID0gcGF0Y2hfYWxjMjY4IH0sCiAJeyAuaWQgPSAweDEwZWMwMjY4LCAubmFtZSA9ICJBTEMyNjgiLCAucGF0Y2ggPSBwYXRjaF9hbGMyNjggfSwKIAl7IC5pZCA9IDB4MTBlYzAyNjksIC5uYW1lID0gIkFMQzI2OSIsIC5wYXRjaCA9IHBhdGNoX2FsYzI2OSB9LAorCXsgLmlkID0gMHgxMGVjMDI3MiwgLm5hbWUgPSAiQUxDMjcyIiwgLnBhdGNoID0gcGF0Y2hfYWxjNjYyIH0sCiAJeyAuaWQgPSAweDEwZWMwODYxLCAucmV2ID0gMHgxMDAzNDAsIC5uYW1lID0gIkFMQzY2MCIsCiAJICAucGF0Y2ggPSBwYXRjaF9hbGM4NjEgfSwKIAl7IC5pZCA9IDB4MTBlYzA2NjAsIC5uYW1lID0gIkFMQzY2MC1WRCIsIC5wYXRjaCA9IHBhdGNoX2FsYzg2MXZkIH0sCkBAIC0xNjMyMyw3ICsxNjM2OCwxMCBAQAogCXsgLmlkID0gMHgxMGVjMDg4NSwgLnJldiA9IDB4MTAwMTAzLCAubmFtZSA9ICJBTEM4ODlBIiwKIAkgIC5wYXRjaCA9IHBhdGNoX2FsYzg4MiB9LCAvKiBzaG91bGQgYmUgcGF0Y2hfYWxjODgzKCkgaW4gZnV0dXJlICovCiAJeyAuaWQgPSAweDEwZWMwODg1LCAubmFtZSA9ICJBTEM4ODUiLCAucGF0Y2ggPSBwYXRjaF9hbGM4ODIgfSwKKwl7IC5pZCA9IDB4MTBlYzA4ODcsIC5uYW1lID0gIkFMQzg4NyIsIC5wYXRjaCA9IHBhdGNoX2FsYzg4MyB9LAogCXsgLmlkID0gMHgxMGVjMDg4OCwgLm5hbWUgPSAiQUxDODg4IiwgLnBhdGNoID0gcGF0Y2hfYWxjODgzIH0sCisJeyAuaWQgPSAweDEwZWMwODg4LCAucmV2ID0gMHgxMDAxMDEsIC5uYW1lID0gIkFMQzEyMDAiLAorCSAgLnBhdGNoID0gcGF0Y2hfYWxjODgzIH0sCiAJeyAuaWQgPSAweDEwZWMwODg5LCAubmFtZSA9ICJBTEM4ODkiLCAucGF0Y2ggPSBwYXRjaF9hbGM4ODMgfSwKIAl7fSAvKiB0ZXJtaW5hdG9yICovCiB9OwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2hkYS9wYXRjaF9zaWdtYXRlbC5jIGIvc291bmQvcGNpL2hkYS9wYXRjaF9zaWdtYXRlbC5jCmluZGV4IGM0NjFiYWEuLmEyYWM3MjAgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9oZGEvcGF0Y2hfc2lnbWF0ZWwuYworKysgYi9zb3VuZC9wY2kvaGRhL3BhdGNoX3NpZ21hdGVsLmMKQEAgLTMyMiw4ICszMjIsOCBAQAogCTB4MWEsIDB4MWIKIH07CiAKLXN0YXRpYyBoZGFfbmlkX3Qgc3RhYzkyaGQ3MWJ4eF9kbXV4X25pZHNbMV0gPSB7Ci0JMHgxYywKK3N0YXRpYyBoZGFfbmlkX3Qgc3RhYzkyaGQ3MWJ4eF9kbXV4X25pZHNbMl0gPSB7CisJMHgxYywgMHgxZCwKIH07CiAKIHN0YXRpYyBoZGFfbmlkX3Qgc3RhYzkyaGQ3MWJ4eF9zbXV4X25pZHNbMl0gPSB7CkBAIC04NjEsMjAgKzg2MSwxOCBAQAogCXsgMHgyOCwgQUNfVkVSQl9TRVRfVk9MVU1FX0tOT0JfQ09OVFJPTCwgMHhmZn0sCiAJLyogY29ubmVjdCBoZWFkcGhvbmUgamFjayB0byBkYWMxICovCiAJeyAweDBhLCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgwMX0sCi0JeyAweDBmLCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9PVVR9LCAvKiBTcGVha2VyICovCiAJLyogdW5tdXRlIHJpZ2h0IGFuZCBsZWZ0IGNoYW5uZWxzIGZvciBub2RlcyAweDBhLCAweGQsIDB4MGYgKi8KIAl7IDB4MGEsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMCl9LAogCXsgMHgwZCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgwKX0sCiAJeyAweDBmLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDApfSwKIH07CiAKLSNkZWZpbmUgSERfRElTQUJMRV9QT1JURiAzCisjZGVmaW5lIEhEX0RJU0FCTEVfUE9SVEYgMgogc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBzdGFjOTJoZDcxYnh4X2FuYWxvZ19jb3JlX2luaXRbXSA9IHsKIAkvKiBzdGFydCBvZiBjb25maWcgIzEgKi8KIAogCS8qIGNvbm5lY3QgcG9ydCAwZiB0byBhdWRpbyBtaXhlciAqLwogCXsgMHgwZiwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4Mn0sCi0JeyAweDBmLCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9PVVR9LCAvKiBTcGVha2VyICovCiAJLyogdW5tdXRlIHJpZ2h0IGFuZCBsZWZ0IGNoYW5uZWxzIGZvciBub2RlIDB4MGYgKi8KIAl7IDB4MGYsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMCl9LAogCS8qIHN0YXJ0IG9mIGNvbmZpZyAjMiAqLwpAQCAtODgzLDEwICs4ODEsNiBAQAogCXsgMHgyOCwgQUNfVkVSQl9TRVRfVk9MVU1FX0tOT0JfQ09OVFJPTCwgMHhmZn0sCiAJLyogY29ubmVjdCBoZWFkcGhvbmUgamFjayB0byBkYWMxICovCiAJeyAweDBhLCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgwMX0sCi0JLyogY29ubmVjdCBwb3J0IDBkIHRvIGF1ZGlvIG1peGVyICovCi0JeyAweDBkLCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgyfSwKLQkvKiB1bm11dGUgZGFjMCBpbnB1dCBpbiBhdWRpbyBtaXhlciAqLwotCXsgMHgxNywgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgMHg3MDFmfSwKIAkvKiB1bm11dGUgcmlnaHQgYW5kIGxlZnQgY2hhbm5lbHMgZm9yIG5vZGVzIDB4MGEsIDB4ZCAqLwogCXsgMHgwYSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgwKX0sCiAJeyAweDBkLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDApfSwKQEAgLTExMDcsNiArMTEwMSw3IEBACiAKIHN0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBzdGFjOTJoZDcxYnh4X2FuYWxvZ19taXhlcltdID0gewogCVNUQUNfSU5QVVRfU09VUkNFKDIpLAorCVNUQUNfQU5BTE9HX0xPT1BCQUNLKDB4RkEwLCAweDdBMCwgMiksCiAKIAlIREFfQ09ERUNfVk9MVU1FX0lEWCgiQ2FwdHVyZSBWb2x1bWUiLCAweDAsIDB4MWMsIDB4MCwgSERBX09VVFBVVCksCiAJSERBX0NPREVDX01VVEVfSURYKCJDYXB0dXJlIFN3aXRjaCIsIDB4MCwgMHgxYywgMHgwLCBIREFfT1VUUFVUKSwKQEAgLTExMTksOCArMTExNCwxNyBAQAogCUhEQV9DT0RFQ19NVVRFKCJQQyBCZWVwIFN3aXRjaCIsIDB4MTcsIDB4MiwgSERBX0lOUFVUKSwKIAkqLwogCi0JSERBX0NPREVDX01VVEUoIkFuYWxvZyBMb29wYmFjayAxIiwgMHgxNywgMHgzLCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19NVVRFKCJBbmFsb2cgTG9vcGJhY2sgMiIsIDB4MTcsIDB4NCwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfTVVURSgiSW1wb3J0MCBNdXggQ2FwdHVyZSBTd2l0Y2giLCAweDE3LCAweDAsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX1ZPTFVNRSgiSW1wb3J0MCBNdXggQ2FwdHVyZSBWb2x1bWUiLCAweDE3LCAweDAsIEhEQV9JTlBVVCksCisKKwlIREFfQ09ERUNfTVVURSgiSW1wb3J0MSBNdXggQ2FwdHVyZSBTd2l0Y2giLCAweDE3LCAweDEsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX1ZPTFVNRSgiSW1wb3J0MSBNdXggQ2FwdHVyZSBWb2x1bWUiLCAweDE3LCAweDEsIEhEQV9JTlBVVCksCisKKwlIREFfQ09ERUNfTVVURSgiREFDMCBDYXB0dXJlIFN3aXRjaCIsIDB4MTcsIDB4MywgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfVk9MVU1FKCJEQUMwIENhcHR1cmUgVm9sdW1lIiwgMHgxNywgMHgzLCBIREFfSU5QVVQpLAorCisJSERBX0NPREVDX01VVEUoIkRBQzEgQ2FwdHVyZSBTd2l0Y2giLCAweDE3LCAweDQsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX1ZPTFVNRSgiREFDMSBDYXB0dXJlIFZvbHVtZSIsIDB4MTcsIDB4NCwgSERBX0lOUFVUKSwKIAl7IH0gLyogZW5kICovCiB9OwogCkBAIC0xNjQ5LDcgKzE2NTMsNyBAQAogCiBzdGF0aWMgdW5zaWduZWQgaW50IHJlZjkyaGQ3MWJ4eF9waW5fY29uZmlnc1sxMV0gPSB7CiAJMHgwMjIxNDAzMCwgMHgwMmExOTA0MCwgMHgwMWExOTAyMCwgMHgwMTAxNDAxMCwKLQkweDAxODEzMDJlLCAweDAxMTE0MDEwLCAweDAxMDE5MDIwLCAweDkwYTAwMGYwLAorCTB4MDE4MTMwMmUsIDB4MDEwMTQwMTAsIDB4MDEwMTkwMjAsIDB4OTBhMDAwZjAsCiAJMHg5MGEwMDBmMCwgMHgwMTQ1MjA1MCwgMHgwMTQ1MjA1MCwKIH07CiAKQEAgLTI4MTIsNyArMjgxNiw3IEBACiAJc3RhdGljIGNvbnN0IGNoYXIgKmNobmFtZVs0XSA9IHsKIAkJIkZyb250IiwgIlN1cnJvdW5kIiwgTlVMTCAvKkNMRkUqLywgIlNpZGUiCiAJfTsKLQloZGFfbmlkX3QgbmlkOworCWhkYV9uaWRfdCBuaWQgPSAwOwogCWludCBpLCBlcnI7CiAKIAlzdHJ1Y3Qgc2lnbWF0ZWxfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOwpAQCAtMzAwMCw3ICszMDA0LDcgQEAKIAogLyogbGFiZWxzIGZvciBhbXAgbXV4IG91dHB1dHMgKi8KIHN0YXRpYyBjb25zdCBjaGFyICpzdGFjOTJ4eF9hbXBfbGFiZWxzWzNdID0gewotCSJGcm9udCBNaWNyb3Bob25lIiwgIk1pY3JvcGhvbmUiLCAiTGluZSBJbiIKKwkiRnJvbnQgTWljcm9waG9uZSIsICJNaWNyb3Bob25lIiwgIkxpbmUgSW4iLAogfTsKIAogLyogY3JlYXRlIGFtcCBvdXQgY29udHJvbHMgbXV4IG9uIGNhcGFibGUgY29kZWNzICovCkBAIC00MzI3LDYgKzQzMzEsMTYgQEAKICNlbmRpZgogfTsKIAorc3RhdGljIHN0cnVjdCBoZGFfaW5wdXRfbXV4IHN0YWM5MmhkNzFieHhfZG11eCA9IHsKKwkubnVtX2l0ZW1zID0gNCwKKwkuaXRlbXMgPSB7CisJCXsgIkFuYWxvZyBJbnB1dHMiLCAweDAwIH0sCisJCXsgIk1peGVyIiwgMHgwMSB9LAorCQl7ICJEaWdpdGFsIE1pYyAxIiwgMHgwMiB9LAorCQl7ICJEaWdpdGFsIE1pYyAyIiwgMHgwMyB9LAorCX0KK307CisKIHN0YXRpYyBpbnQgcGF0Y2hfc3RhYzkyaGQ3MWJ4eChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKIHsKIAlzdHJ1Y3Qgc2lnbWF0ZWxfc3BlYyAqc3BlYzsKQEAgLTQzNDEsNiArNDM1NSw4IEBACiAJc3BlYy0+bnVtX3BpbnMgPSBBUlJBWV9TSVpFKHN0YWM5MmhkNzFieHhfcGluX25pZHMpOwogCXNwZWMtPm51bV9wd3JzID0gQVJSQVlfU0laRShzdGFjOTJoZDcxYnh4X3B3cl9uaWRzKTsKIAlzcGVjLT5waW5fbmlkcyA9IHN0YWM5MmhkNzFieHhfcGluX25pZHM7CisJbWVtY3B5KCZzcGVjLT5wcml2YXRlX2RpbXV4LCAmc3RhYzkyaGQ3MWJ4eF9kbXV4LAorCQkJc2l6ZW9mKHN0YWM5MmhkNzFieHhfZG11eCkpOwogCXNwZWMtPmJvYXJkX2NvbmZpZyA9IHNuZF9oZGFfY2hlY2tfYm9hcmRfY29uZmlnKGNvZGVjLAogCQkJCQkJCVNUQUNfOTJIRDcxQlhYX01PREVMUywKIAkJCQkJCQlzdGFjOTJoZDcxYnh4X21vZGVscywKQEAgLTQzOTIsNiArNDQwOCw3IEBACiAJCS8qIG5vIG91dHB1dCBhbXBzICovCiAJCXNwZWMtPm51bV9wd3JzID0gMDsKIAkJc3BlYy0+bWl4ZXIgPSBzdGFjOTJoZDcxYnh4X2FuYWxvZ19taXhlcjsKKwkJc3BlYy0+ZGlucHV0X211eCA9ICZzcGVjLT5wcml2YXRlX2RpbXV4OwogCiAJCS8qIGRpc2FibGUgVlNXICovCiAJCXNwZWMtPmluaXQgPSAmc3RhYzkyaGQ3MWJ4eF9hbmFsb2dfY29yZV9pbml0W0hEX0RJU0FCTEVfUE9SVEZdOwpAQCAtNDQwOSwxMiArNDQyNiwxMyBAQAogCQlzcGVjLT5udW1fcHdycyA9IDA7CiAJCS8qIGZhbGx0aHJ1ICovCiAJZGVmYXVsdDoKKwkJc3BlYy0+ZGlucHV0X211eCA9ICZzcGVjLT5wcml2YXRlX2RpbXV4OwogCQlzcGVjLT5taXhlciA9IHN0YWM5MmhkNzFieHhfYW5hbG9nX21peGVyOwogCQlzcGVjLT5pbml0ID0gc3RhYzkyaGQ3MWJ4eF9hbmFsb2dfY29yZV9pbml0OwogCQljb2RlYy0+c2xhdmVfZGlnX291dHMgPSBzdGFjOTJoZDcxYnh4X3NsYXZlX2RpZ19vdXRzOwogCX0KIAotCXNwZWMtPmFsb29wYmFja19tYXNrID0gMHgyMDsKKwlzcGVjLT5hbG9vcGJhY2tfbWFzayA9IDB4NTA7CiAJc3BlYy0+YWxvb3BiYWNrX3NoaWZ0ID0gMDsKIAogCWlmIChzcGVjLT5ib2FyZF9jb25maWcgPiBTVEFDXzkySEQ3MUJYWF9SRUYpIHsKQEAgLTQ0NTYsNiArNDQ3NCwxMCBAQAogCXNwZWMtPm11bHRpb3V0Lm51bV9kYWNzID0gMTsKIAlzcGVjLT5tdWx0aW91dC5ocF9uaWQgPSAweDExOwogCXNwZWMtPm11bHRpb3V0LmRhY19uaWRzID0gc3RhYzkyaGQ3MWJ4eF9kYWNfbmlkczsKKwlpZiAoc3BlYy0+ZGlucHV0X211eCkKKwkJc3BlYy0+cHJpdmF0ZV9kaW11eC5udW1faXRlbXMgKz0KKwkJCXNwZWMtPm51bV9kbWljcyAtCisJCQkJKEFSUkFZX1NJWkUoc3RhYzkyaGQ3MWJ4eF9kbWljX25pZHMpIC0gMSk7CiAKIAllcnIgPSBzdGFjOTJ4eF9wYXJzZV9hdXRvX2NvbmZpZyhjb2RlYywgMHgyMSwgMHgyMyk7CiAJaWYgKCFlcnIpIHsKZGlmZiAtLWdpdCBhL3NvdW5kL3BwYy9zbmRfcHMzLmMgYi9zb3VuZC9wcGMvc25kX3BzMy5jCmluZGV4IDIwZDBlMzIuLjhmOWUzODUgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BwYy9zbmRfcHMzLmMKKysrIGIvc291bmQvcHBjL3NuZF9wczMuYwpAQCAtNjY2LDYgKzY2Niw3IEBACiAJY2FyZC0+YXZzLmF2c19hdWRpb193aWR0aCA9IFBTM0FWX0NNRF9BVURJT19XT1JEX0JJVFNfMTY7CiAJY2FyZC0+YXZzLmF2c19hdWRpb19mb3JtYXQgPSBQUzNBVl9DTURfQVVESU9fRk9STUFUX1BDTTsKIAljYXJkLT5hdnMuYXZzX2F1ZGlvX3NvdXJjZSA9IFBTM0FWX0NNRF9BVURJT19TT1VSQ0VfU0VSSUFMOworCW1lbWNweShjYXJkLT5hdnMuYXZzX2NzX2luZm8sIHBzM2F2X21vZGVfY3NfaW5mbywgOCk7CiAKIAlyZXQgPSBzbmRfcHMzX2NoYW5nZV9hdnNldHRpbmcoY2FyZCk7CiAKQEAgLTY4NSw2ICs2ODYsNyBAQAogewogCXN0cnVjdCBzbmRfcHMzX2NhcmRfaW5mbyAqY2FyZCA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKIAlzdHJ1Y3Qgc25kX3BzM19hdnNldHRpbmdfaW5mbyBhdnM7CisJaW50IHJldDsKIAogCWF2cyA9IGNhcmQtPmF2czsKIApAQCAtNzI5LDE5ICs3MzEsOTIgQEAKIAkJcmV0dXJuIDE7CiAJfQogCi0JaWYgKChjYXJkLT5hdnMuYXZzX2F1ZGlvX3dpZHRoICE9IGF2cy5hdnNfYXVkaW9fd2lkdGgpIHx8Ci0JICAgIChjYXJkLT5hdnMuYXZzX2F1ZGlvX3JhdGUgIT0gYXZzLmF2c19hdWRpb19yYXRlKSkgewotCQljYXJkLT5hdnMgPSBhdnM7Ci0JCXNuZF9wczNfY2hhbmdlX2F2c2V0dGluZyhjYXJkKTsKKwltZW1jcHkoYXZzLmF2c19jc19pbmZvLCBwczNhdl9tb2RlX2NzX2luZm8sIDgpOwogCisJaWYgKG1lbWNtcCgmY2FyZC0+YXZzLCAmYXZzLCBzaXplb2YoYXZzKSkpIHsKIAkJcHJfZGVidWcoIiVzOiBhZnRlciBmcmVxPSVkIHdpZHRoPSVkXG4iLCBfX2Z1bmNfXywKIAkJCSBjYXJkLT5hdnMuYXZzX2F1ZGlvX3JhdGUsIGNhcmQtPmF2cy5hdnNfYXVkaW9fd2lkdGgpOwogCi0JCXJldHVybiAwOworCQljYXJkLT5hdnMgPSBhdnM7CisJCXNuZF9wczNfY2hhbmdlX2F2c2V0dGluZyhjYXJkKTsKKwkJcmV0ID0gMDsKIAl9IGVsc2UKLQkJcmV0dXJuIDE7CisJCXJldCA9IDE7CisKKwkvKiBjaGVjayBDUyBub24tYXVkaW8gYml0IGFuZCBtdXRlIGFjY29yZGluZ2x5ICovCisJaWYgKGF2cy5hdnNfY3NfaW5mb1swXSAmIDB4MDIpCisJCXBzM2F2X2F1ZGlvX211dGVfYW5hbG9nKDEpOyAvKiBtdXRlIGlmIG5vbi1hdWRpbyAqLworCWVsc2UKKwkJcHMzYXZfYXVkaW9fbXV0ZV9hbmFsb2coMCk7CisKKwlyZXR1cm4gcmV0OwogfQogCisvKgorICogU1BESUYgc3RhdHVzIGJpdHMgY29udHJvbHMKKyAqLworc3RhdGljIGludCBzbmRfcHMzX3NwZGlmX21hc2tfaW5mbyhzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKKwkJCQkgICBzdHJ1Y3Qgc25kX2N0bF9lbGVtX2luZm8gKnVpbmZvKQoreworCXVpbmZvLT50eXBlID0gU05EUlZfQ1RMX0VMRU1fVFlQRV9JRUM5NTg7CisJdWluZm8tPmNvdW50ID0gMTsKKwlyZXR1cm4gMDsKK30KKworLyogRklYTUU6IHBzM2F2X3NldF9hdWRpb19tb2RlKCkgYXNzdW1lcyBvbmx5IGNvbnN1bWVyIG1vZGUgKi8KK3N0YXRpYyBpbnQgc25kX3BzM19zcGRpZl9jbWFza19nZXQoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCisJCQkJICAgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCit7CisJbWVtc2V0KHVjb250cm9sLT52YWx1ZS5pZWM5NTguc3RhdHVzLCAweGZmLCA4KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzbmRfcHMzX3NwZGlmX3BtYXNrX2dldChzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKKwkJCQkgICBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzbmRfcHMzX3NwZGlmX2RlZmF1bHRfZ2V0KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAorCQkJCSAgICAgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCit7CisJbWVtY3B5KHVjb250cm9sLT52YWx1ZS5pZWM5NTguc3RhdHVzLCBwczNhdl9tb2RlX2NzX2luZm8sIDgpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNuZF9wczNfc3BkaWZfZGVmYXVsdF9wdXQoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCisJCQkJICAgICBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKK3sKKwlpZiAobWVtY21wKHBzM2F2X21vZGVfY3NfaW5mbywgdWNvbnRyb2wtPnZhbHVlLmllYzk1OC5zdGF0dXMsIDgpKSB7CisJCW1lbWNweShwczNhdl9tb2RlX2NzX2luZm8sIHVjb250cm9sLT52YWx1ZS5pZWM5NTguc3RhdHVzLCA4KTsKKwkJcmV0dXJuIDE7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgc3BkaWZfY3Rsc1tdID0geworCXsKKwkJLmFjY2VzcyA9IFNORFJWX0NUTF9FTEVNX0FDQ0VTU19SRUFELAorCQkuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9QQ00sCisJCS5uYW1lID0gU05EUlZfQ1RMX05BTUVfSUVDOTU4KCIiLFBMQVlCQUNLLENPTl9NQVNLKSwKKwkJLmluZm8gPSBzbmRfcHMzX3NwZGlmX21hc2tfaW5mbywKKwkJLmdldCA9IHNuZF9wczNfc3BkaWZfY21hc2tfZ2V0LAorCX0sCisJeworCQkuYWNjZXNzID0gU05EUlZfQ1RMX0VMRU1fQUNDRVNTX1JFQUQsCisJCS5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX1BDTSwKKwkJLm5hbWUgPSBTTkRSVl9DVExfTkFNRV9JRUM5NTgoIiIsUExBWUJBQ0ssUFJPX01BU0spLAorCQkuaW5mbyA9IHNuZF9wczNfc3BkaWZfbWFza19pbmZvLAorCQkuZ2V0ID0gc25kX3BzM19zcGRpZl9wbWFza19nZXQsCisJfSwKKwl7CisJCS5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX1BDTSwKKwkJLm5hbWUgPSBTTkRSVl9DVExfTkFNRV9JRUM5NTgoIiIsUExBWUJBQ0ssREVGQVVMVCksCisJCS5pbmZvID0gc25kX3BzM19zcGRpZl9tYXNrX2luZm8sCisJCS5nZXQgPSBzbmRfcHMzX3NwZGlmX2RlZmF1bHRfZ2V0LAorCQkucHV0ID0gc25kX3BzM19zcGRpZl9kZWZhdWx0X3B1dCwKKwl9LAorfTsKIAogCiBzdGF0aWMgaW50IHNuZF9wczNfbWFwX21taW8odm9pZCkKQEAgLTg0Miw3ICs5MTcsNyBAQAogCiBzdGF0aWMgaW50IF9faW5pdCBzbmRfcHMzX2RyaXZlcl9wcm9iZShzdHJ1Y3QgcHMzX3N5c3RlbV9idXNfZGV2aWNlICpkZXYpCiB7Ci0JaW50IHJldDsKKwlpbnQgaSwgcmV0OwogCXU2NCBscGFyX2FkZHIsIGxwYXJfc2l6ZTsKIAogCUJVR19PTighZmlybXdhcmVfaGFzX2ZlYXR1cmUoRldfRkVBVFVSRV9QUzNfTFYxKSk7CkBAIC05MDMsNiArOTc4LDE1IEBACiAJc3RyY3B5KHRoZV9jYXJkLmNhcmQtPmRyaXZlciwgIlBTMyIpOwogCXN0cmNweSh0aGVfY2FyZC5jYXJkLT5zaG9ydG5hbWUsICJQUzMiKTsKIAlzdHJjcHkodGhlX2NhcmQuY2FyZC0+bG9uZ25hbWUsICJQUzMgc291bmQiKTsKKworCS8qIGNyZWF0ZSBjb250cm9sIGVsZW1lbnRzICovCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoc3BkaWZfY3Rscyk7IGkrKykgeworCQlyZXQgPSBzbmRfY3RsX2FkZCh0aGVfY2FyZC5jYXJkLAorCQkJCSAgc25kX2N0bF9uZXcxKCZzcGRpZl9jdGxzW2ldLCAmdGhlX2NhcmQpKTsKKwkJaWYgKHJldCA8IDApCisJCQlnb3RvIGNsZWFuX2NhcmQ7CisJfQorCiAJLyogY3JlYXRlIFBDTSBkZXZpY2VzIGluc3RhbmNlICovCiAJLyogTk9URTp0aGlzIGRyaXZlciB3b3JrcyBhc3N1bWluZyBwY206c3Vic3RyZWFtID0gMToxICovCiAJcmV0ID0gc25kX3BjbV9uZXcodGhlX2NhcmQuY2FyZCwKZGlmZiAtLWdpdCBhL3NvdW5kL3BwYy9zbmRfcHMzLmggYi9zb3VuZC9wcGMvc25kX3BzMy5oCmluZGV4IDRiN2U2ZmIuLjMyNmZiMjkgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BwYy9zbmRfcHMzLmgKKysrIGIvc291bmQvcHBjL3NuZF9wczMuaApAQCAtNTEsNiArNTEsNyBAQAogCXVpbnQzMl90IGF2c19hdWRpb193aWR0aDsKIAl1aW50MzJfdCBhdnNfYXVkaW9fZm9ybWF0OyAvKiBmaXhlZCAqLwogCXVpbnQzMl90IGF2c19hdWRpb19zb3VyY2U7IC8qIGZpeGVkICovCisJdW5zaWduZWQgY2hhciBhdnNfY3NfaW5mb1s4XTsKIH07CiAvKgogICogUFMzIGF1ZGlvICdjYXJkJyBpbnN0YW5jZQpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2F0MzIvcGxheXBhcV93bTg1MTAuYyBiL3NvdW5kL3NvYy9hdDMyL3BsYXlwYXFfd204NTEwLmMKaW5kZXggOThhMmQ1OC4uYjE5NjZlNCAxMDA2NDQKLS0tIGEvc291bmQvc29jL2F0MzIvcGxheXBhcV93bTg1MTAuYworKysgYi9zb3VuZC9zb2MvYXQzMi9wbGF5cGFxX3dtODUxMC5jCkBAIC0zMDQsNyArMzA0LDcgQEAKIAogCiAKLXN0YXRpYyBjb25zdCBjaGFyICppbnRlcmNvbltdWzNdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfc29jX2RhcG1fcm91dGUgaW50ZXJjb25bXSA9IHsKIAkvKiBzcGVha2VyIGNvbm5lY3RlZCB0byBTUEtPVVQgKi8KIAl7IkV4dCBTcGsiLCBOVUxMLCAiU1BLT1VUUCJ9LAogCXsiRXh0IFNwayIsIE5VTEwsICJTUEtPVVROIn0sCkBAIC0zMTIsOSArMzEyLDYgQEAKIAl7Ik1pYyBCaWFzIiwgTlVMTCwgIkludCBNaWMifSwKIAl7Ik1JQ04iLCBOVUxMLCAiTWljIEJpYXMifSwKIAl7Ik1JQ1AiLCBOVUxMLCAiTWljIEJpYXMifSwKLQotCS8qIFRlcm1pbmF0b3IgKi8KLQl7TlVMTCwgTlVMTCwgTlVMTH0sCiB9OwogCiAKQEAgLTMzNCwxMSArMzMxLDggQEAKIAkvKgogCSAqIFNldHVwIGF1ZGlvIHBhdGggaW50ZXJjb25uZWN0cwogCSAqLwotCWZvciAoaSA9IDA7IGludGVyY29uW2ldWzBdICE9IE5VTEw7IGkrKykgewotCQlzbmRfc29jX2RhcG1fY29ubmVjdF9pbnB1dChjb2RlYywKLQkJCQkJICAgaW50ZXJjb25baV1bMF0sCi0JCQkJCSAgIGludGVyY29uW2ldWzFdLCBpbnRlcmNvbltpXVsyXSk7Ci0JfQorCXNuZF9zb2NfZGFwbV9hZGRfcm91dGVzKGNvZGVjLCBpbnRlcmNvbiwgQVJSQVlfU0laRShpbnRlcmNvbikpOworCiAKIAogCS8qIGFsd2F5cyBjb25uZWN0ZWQgcGlucyAqLwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2F0OTEvS2NvbmZpZyBiL3NvdW5kL3NvYy9hdDkxL0tjb25maWcKaW5kZXggOTA1MTg2NS4uODVhODgzMiAxMDA2NDQKLS0tIGEvc291bmQvc29jL2F0OTEvS2NvbmZpZworKysgYi9zb3VuZC9zb2MvYXQ5MS9LY29uZmlnCkBAIC04LDIwICs4LDMgQEAKIAogY29uZmlnIFNORF9BVDkxX1NPQ19TU0MKIAl0cmlzdGF0ZQotCi1jb25maWcgU05EX0FUOTFfU09DX0VUSV9CMV9XTTg3MzEKLQl0cmlzdGF0ZSAiU29DIEF1ZGlvIHN1cHBvcnQgZm9yIFdNODczMS1iYXNlZCBFbmRyZWxpYSBFVEktQjEgYm9hcmRzIgotCWRlcGVuZHMgb24gU05EX0FUOTFfU09DICYmIChNQUNIX0VUSV9CMSB8fCBNQUNIX0VUSV9DMSkKLQlzZWxlY3QgU05EX0FUOTFfU09DX1NTQwotCXNlbGVjdCBTTkRfU09DX1dNODczMQotCWhlbHAKLQkgIFNheSBZIGlmIHlvdSB3YW50IHRvIGFkZCBzdXBwb3J0IGZvciBTb0MgYXVkaW8gb24gV004NzMxLWJhc2VkCi0JICBFbmRyZWxpYSBUZWNobm9sb2dpZXMgSW5jIEVUSS1CMSBvciBFVEktQzEgYm9hcmRzLgotCi1jb25maWcgU05EX0FUOTFfU09DX0VUSV9TTEFWRQotCWJvb2wgIlJ1biBjb2RlYyBpbiBzbGF2ZSBNb2RlIG9uIEVuZHJlbGlhIGJvYXJkcyIKLQlkZXBlbmRzIG9uIFNORF9BVDkxX1NPQ19FVElfQjFfV004NzMxCi0JZGVmYXVsdCBuCi0JaGVscAotCSAgU2F5IFkgaWYgeW91IHdhbnQgdG8gcnVuIHdpdGggdGhlIEFUOTEgU1NDIGdlbmVyYXRpbmcgdGhlIEJDTEsKLQkgIGFuZCBMUkMgc2lnbmFscyBvbiBFbmRyZWxpYSBib2FyZHMuCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvYXQ5MS9NYWtlZmlsZSBiL3NvdW5kL3NvYy9hdDkxL01ha2VmaWxlCmluZGV4IGYyM2RhMTcuLmI4MTdmMTEgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9hdDkxL01ha2VmaWxlCisrKyBiL3NvdW5kL3NvYy9hdDkxL01ha2VmaWxlCkBAIC00LDggKzQsMyBAQAogCiBvYmotJChDT05GSUdfU05EX0FUOTFfU09DKSArPSBzbmQtc29jLWF0OTEubwogb2JqLSQoQ09ORklHX1NORF9BVDkxX1NPQ19TU0MpICs9IHNuZC1zb2MtYXQ5MS1zc2MubwotCi0jIEFUOTEgTWFjaGluZSBTdXBwb3J0Ci1zbmQtc29jLWV0aS1iMS13bTg3MzEtb2JqcyA6PSBldGlfYjFfd204NzMxLm8KLQotb2JqLSQoQ09ORklHX1NORF9BVDkxX1NPQ19FVElfQjFfV004NzMxKSArPSBzbmQtc29jLWV0aS1iMS13bTg3MzEubwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2F0OTEvYXQ5MS1zc2MuYyBiL3NvdW5kL3NvYy9hdDkxL2F0OTEtc3NjLmMKaW5kZXggYTViMWE3OS4uMWI2MWNjNCAxMDA2NDQKLS0tIGEvc291bmQvc29jL2F0OTEvYXQ5MS1zc2MuYworKysgYi9zb3VuZC9zb2MvYXQ5MS9hdDkxLXNzYy5jCkBAIC01LDcgKzUsNyBAQAogICogICAgICAgICBFbmRyZWxpYSBUZWNobm9sb2dpZXMgSW5jLgogICoKICAqIEJhc2VkIG9uIHB4YTJ4eCBQbGF0Zm9ybSBkcml2ZXJzIGJ5Ci0gKiBMaWFtIEdpcmR3b29kIDxsaWFtLmdpcmR3b29kQHdvbGZzb25taWNyby5jb20+CisgKiBMaWFtIEdpcmR3b29kIDxscmdAc2xpbWxvZ2ljLmNvLnVrPgogICoKICAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKICAqICB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9hdDkxL2V0aV9iMV93bTg3MzEuYyBiL3NvdW5kL3NvYy9hdDkxL2V0aV9iMV93bTg3MzEuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjg0NzgxZS4uMDAwMDAwMAotLS0gYS9zb3VuZC9zb2MvYXQ5MS9ldGlfYjFfd204NzMxLmMKKysrIC9kZXYvbnVsbApAQCAtMSwzNDkgKzAsMCBAQAotLyoKLSAqIGV0aV9iMV93bTg3MzEgIC0tICBTb0MgYXVkaW8gZm9yIEFUOTFSTTkyMDAtYmFzZWQgRW5kcmVsaWEgRVRJX0IxIGJvYXJkLgotICoKLSAqIEF1dGhvcjoJRnJhbmsgTWFuZGFyaW5vIDxmbWFuZGFyaW5vQGVuZHJlbGlhLmNvbT4KLSAqCQlFbmRyZWxpYSBUZWNobm9sb2dpZXMgSW5jLgotICogQ3JlYXRlZDoJTWFyIDI5LCAyMDA2Ci0gKgotICogQmFzZWQgb24gY29yZ2kuYyBieToKLSAqCi0gKiBDb3B5cmlnaHQgMjAwNSBXb2xmc29uIE1pY3JvZWxlY3Ryb25pY3MgUExDLgotICogQ29weXJpZ2h0IDIwMDUgT3BlbmVkaGFuZCBMdGQuCi0gKgotICogQXV0aG9yczogTGlhbSBHaXJkd29vZCA8bGlhbS5naXJkd29vZEB3b2xmc29ubWljcm8uY29tPgotICogICAgICAgICAgUmljaGFyZCBQdXJkaWUgPHJpY2hhcmRAb3BlbmVkaGFuZC5jb20+Ci0gKgotICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAotICogIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQotICogIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgotICogIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgotI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+Ci0jaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Ci0jaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Ci0jaW5jbHVkZSA8c291bmQvY29yZS5oPgotI2luY2x1ZGUgPHNvdW5kL3BjbS5oPgotI2luY2x1ZGUgPHNvdW5kL3NvYy5oPgotI2luY2x1ZGUgPHNvdW5kL3NvYy1kYXBtLmg+Ci0KLSNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+Ci0jaW5jbHVkZSA8bWFjaC9ncGlvLmg+Ci0KLSNpbmNsdWRlICIuLi9jb2RlY3Mvd204NzMxLmgiCi0jaW5jbHVkZSAiYXQ5MS1wY20uaCIKLSNpbmNsdWRlICJhdDkxLXNzYy5oIgotCi0jaWYgMAotI2RlZmluZQlEQkcoeC4uLikJcHJpbnRrKEtFUk5fSU5GTyAiZXRpX2IxX3dtODczMTogIiB4KQotI2Vsc2UKLSNkZWZpbmUJREJHKHguLi4pCi0jZW5kaWYKLQotc3RhdGljIHN0cnVjdCBjbGsgKnBjazFfY2xrOwotc3RhdGljIHN0cnVjdCBjbGsgKnBsbGJfY2xrOwotCi0KLXN0YXRpYyBpbnQgZXRpX2IxX3N0YXJ0dXAoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCi17Ci0Jc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOwotCXN0cnVjdCBzbmRfc29jX2RhaSAqY29kZWNfZGFpID0gcnRkLT5kYWktPmNvZGVjX2RhaTsKLQlzdHJ1Y3Qgc25kX3NvY19kYWkgKmNwdV9kYWkgPSBydGQtPmRhaS0+Y3B1X2RhaTsKLQlpbnQgcmV0OwotCi0JLyogY3B1IGNsb2NrIGlzIHRoZSBBVDkxIG1hc3RlciBjbG9jayBzZW50IHRvIHRoZSBTU0MgKi8KLQlyZXQgPSBzbmRfc29jX2RhaV9zZXRfc3lzY2xrKGNwdV9kYWksIEFUOTFfU1lTQ0xLX01DSywKLQkJNjAwMDAwMDAsIFNORF9TT0NfQ0xPQ0tfSU4pOwotCWlmIChyZXQgPCAwKQotCQlyZXR1cm4gcmV0OwotCi0JLyogY29kZWMgc3lzdGVtIGNsb2NrIGlzIHN1cHBsaWVkIGJ5IFBDSzEsIHNldCB0byAxMk1IeiAqLwotCXJldCA9IHNuZF9zb2NfZGFpX3NldF9zeXNjbGsoY29kZWNfZGFpLCBXTTg3MzFfU1lTQ0xLLAotCQkxMjAwMDAwMCwgU05EX1NPQ19DTE9DS19JTik7Ci0JaWYgKHJldCA8IDApCi0JCXJldHVybiByZXQ7Ci0KLQkvKiBTdGFydCBQQ0sxIGNsb2NrLiAqLwotCWNsa19lbmFibGUocGNrMV9jbGspOwotCURCRygicGNrMSBzdGFydGVkXG4iKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBldGlfYjFfc2h1dGRvd24oc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCi17Ci0JLyogU3RvcCBQQ0sxIGNsb2NrLiAqLwotCWNsa19kaXNhYmxlKHBjazFfY2xrKTsKLQlEQkcoInBjazEgc3RvcHBlZFxuIik7Ci19Ci0KLXN0YXRpYyBpbnQgZXRpX2IxX2h3X3BhcmFtcyhzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKLQlzdHJ1Y3Qgc25kX3BjbV9od19wYXJhbXMgKnBhcmFtcykKLXsKLQlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7Ci0Jc3RydWN0IHNuZF9zb2NfZGFpICpjb2RlY19kYWkgPSBydGQtPmRhaS0+Y29kZWNfZGFpOwotCXN0cnVjdCBzbmRfc29jX2RhaSAqY3B1X2RhaSA9IHJ0ZC0+ZGFpLT5jcHVfZGFpOwotCWludCByZXQ7Ci0KLSNpZmRlZiBDT05GSUdfU05EX0FUOTFfU09DX0VUSV9TTEFWRQotCXVuc2lnbmVkIGludCByYXRlOwotCWludCBjbXJfZGl2LCBwZXJpb2Q7Ci0KLQkvKiBzZXQgY29kZWMgREFJIGNvbmZpZ3VyYXRpb24gKi8KLQlyZXQgPSBzbmRfc29jX2RhaV9zZXRfZm10KGNvZGVjX2RhaSwgU05EX1NPQ19EQUlGTVRfSTJTIHwKLQkJU05EX1NPQ19EQUlGTVRfTkJfTkYgfCBTTkRfU09DX0RBSUZNVF9DQlNfQ0ZTKTsKLQlpZiAocmV0IDwgMCkKLQkJcmV0dXJuIHJldDsKLQotCS8qIHNldCBjcHUgREFJIGNvbmZpZ3VyYXRpb24gKi8KLQlyZXQgPSBzbmRfc29jX2RhaV9zZXRfZm10KGNwdV9kYWksIFNORF9TT0NfREFJRk1UX0kyUyB8Ci0JCVNORF9TT0NfREFJRk1UX05CX05GIHwgU05EX1NPQ19EQUlGTVRfQ0JTX0NGUyk7Ci0JaWYgKHJldCA8IDApCi0JCXJldHVybiByZXQ7Ci0KLQkvKgotCSAqIFRoZSBTU0MgY2xvY2sgZGl2aWRlcnMgZGVwZW5kIG9uIHRoZSBzYW1wbGUgcmF0ZS4gIFRoZSBDTVIuRElWCi0JICogZmllbGQgZGl2aWRlcyB0aGUgc3lzdGVtIG1hc3RlciBjbG9jayBNQ0sgdG8gZHJpdmUgdGhlIFNTQyBUSwotCSAqIHNpZ25hbCB3aGljaCBwcm92aWRlcyB0aGUgY29kZWMgQkNMSy4gIFRoZSBUQ01SLlBFUklPRCBhbmQKLQkgKiBSQ01SLlBFUklPRCBmaWVsZHMgZnVydGhlciBkaXZpZGUgdGhlIEJDTEsgc2lnbmFsIHRvIGRyaXZlCi0JICogdGhlIFNTQyBURiBhbmQgUkYgc2lnbmFscyB3aGljaCBwcm92aWRlIHRoZSBjb2RlYyBEQUNMUkMgYW5kCi0JICogQURDTFJDIGNsb2Nrcy4KLQkgKgotCSAqIFRoZSBkaXZpZGVycyB3ZXJlIGRldGVybWluZWQgdGhyb3VnaCB0cmlhbCBhbmQgZXJyb3IsIHdoZXJlIGEKLQkgKiBDTVIuRElWIHZhbHVlIGlzIGNob3NlbiBzdWNoIHRoYXQgdGhlIHJlc3VsdGluZyBCQ0xLIHZhbHVlIGlzCi0JICogZGl2aXNpYmxlLCBvciBhbG1vc3QgZGl2aXNpYmxlLCBieSAoMiAqIHNhbXBsZSByYXRlKSwgYW5kIHRoZW4KLQkgKiB0aGUgVENNUi5QRVJJT0Qgb3IgUkNNUi5QRVJJT0QgaXMgQkNMSyAvICgyICogc2FtcGxlIHJhdGUpIC0gMS4KLQkgKi8KLQlyYXRlID0gcGFyYW1zX3JhdGUocGFyYW1zKTsKLQotCXN3aXRjaCAocmF0ZSkgewotCWNhc2UgODAwMDoKLQkJY21yX2RpdiA9IDI1OwkvKiBCQ0xLID0gNjBNSHovKDIqMjUpID0gMS4yTUh6ICovCi0JCXBlcmlvZCA9IDc0OwkvKiBMUkMgPSBCQ0xLLygyKig3NCsxKSkgPSA4MDAwSHogKi8KLQkJYnJlYWs7Ci0JY2FzZSAzMjAwMDoKLQkJY21yX2RpdiA9IDc7CS8qIEJDTEsgPSA2ME1Iei8oMio3KSB+PSA0LjI4NTcxNDI4TUh6ICovCi0JCXBlcmlvZCA9IDY2OwkvKiBMUkMgPSBCQ0xLLygyKig2NisxKSkgPSAzMTk4Mi45NDJIeiAqLwotCQlicmVhazsKLQljYXNlIDQ4MDAwOgotCQljbXJfZGl2ID0gMTM7CS8qIEJDTEsgPSA2ME1Iei8oMioxMykgfj0gMi4zMDc2OTIzTUh6ICovCi0JCXBlcmlvZCA9IDIzOwkvKiBMUkMgPSBCQ0xLLygyKigyMysxKSkgPSA0ODA3Ni45MjNIeiAqLwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlwcmludGsoS0VSTl9XQVJOSU5HICJ1bnN1cHBvcnRlZCByYXRlICVkIG9uIEVUSS1CMSBib2FyZFxuIiwgcmF0ZSk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCS8qIHNldCB0aGUgTUNLIGRpdmlkZXIgZm9yIEJDTEsgKi8KLQlyZXQgPSBzbmRfc29jX2RhaV9zZXRfY2xrZGl2KGNwdV9kYWksIEFUOTFTU0NfQ01SX0RJViwgY21yX2Rpdik7Ci0JaWYgKHJldCA8IDApCi0JCXJldHVybiByZXQ7Ci0KLQlpZiAoc3Vic3RyZWFtLT5zdHJlYW0gPT0gU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSykgewotCQkvKiBzZXQgdGhlIEJDTEsgZGl2aWRlciBmb3IgREFDTFJDICovCi0JCXJldCA9IHNuZF9zb2NfZGFpX3NldF9jbGtkaXYoY3B1X2RhaSwKLQkJCQkJCUFUOTFTU0NfVENNUl9QRVJJT0QsIHBlcmlvZCk7Ci0JfSBlbHNlIHsKLQkJLyogc2V0IHRoZSBCQ0xLIGRpdmlkZXIgZm9yIEFEQ0xSQyAqLwotCQlyZXQgPSBzbmRfc29jX2RhaV9zZXRfY2xrZGl2KGNwdV9kYWksCi0JCQkJCQlBVDkxU1NDX1JDTVJfUEVSSU9ELCBwZXJpb2QpOwotCX0KLQlpZiAocmV0IDwgMCkKLQkJcmV0dXJuIHJldDsKLQotI2Vsc2UgLyogQ09ORklHX1NORF9BVDkxX1NPQ19FVElfU0xBVkUgKi8KLQkvKgotCSAqIENvZGVjIGluIE1hc3RlciBNb2RlLgotCSAqLwotCi0JLyogc2V0IGNvZGVjIERBSSBjb25maWd1cmF0aW9uICovCi0JcmV0ID0gc25kX3NvY19kYWlfc2V0X2ZtdChjb2RlY19kYWksIFNORF9TT0NfREFJRk1UX0kyUyB8Ci0JCVNORF9TT0NfREFJRk1UX05CX05GIHwgU05EX1NPQ19EQUlGTVRfQ0JNX0NGTSk7Ci0JaWYgKHJldCA8IDApCi0JCXJldHVybiByZXQ7Ci0KLQkvKiBzZXQgY3B1IERBSSBjb25maWd1cmF0aW9uICovCi0JcmV0ID0gc25kX3NvY19kYWlfc2V0X2ZtdChjcHVfZGFpLCBTTkRfU09DX0RBSUZNVF9JMlMgfAotCQlTTkRfU09DX0RBSUZNVF9OQl9ORiB8IFNORF9TT0NfREFJRk1UX0NCTV9DRk0pOwotCWlmIChyZXQgPCAwKQotCQlyZXR1cm4gcmV0OwotCi0jZW5kaWYgLyogQ09ORklHX1NORF9BVDkxX1NPQ19FVElfU0xBVkUgKi8KLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgc3RydWN0IHNuZF9zb2Nfb3BzIGV0aV9iMV9vcHMgPSB7Ci0JLnN0YXJ0dXAgPSBldGlfYjFfc3RhcnR1cCwKLQkuaHdfcGFyYW1zID0gZXRpX2IxX2h3X3BhcmFtcywKLQkuc2h1dGRvd24gPSBldGlfYjFfc2h1dGRvd24sCi19OwotCi0KLXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCBldGlfYjFfZGFwbV93aWRnZXRzW10gPSB7Ci0JU05EX1NPQ19EQVBNX01JQygiSW50IE1pYyIsIE5VTEwpLAotCVNORF9TT0NfREFQTV9TUEsoIkV4dCBTcGsiLCBOVUxMKSwKLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3NvY19kYXBtX3JvdXRlIGludGVyY29uW10gPSB7Ci0KLQkvKiBzcGVha2VyIGNvbm5lY3RlZCB0byBMSFBPVVQgKi8KLQl7IkV4dCBTcGsiLCBOVUxMLCAiTEhQT1VUIn0sCi0KLQkvKiBtaWMgaXMgY29ubmVjdGVkIHRvIE1pYyBKYWNrLCB3aXRoIFdNODczMSBNaWMgQmlhcyAqLwotCXsiTUlDSU4iLCBOVUxMLCAiTWljIEJpYXMifSwKLQl7Ik1pYyBCaWFzIiwgTlVMTCwgIkludCBNaWMifSwKLX07Ci0KLS8qCi0gKiBMb2dpYyBmb3IgYSB3bTg3MzEgYXMgY29ubmVjdGVkIG9uIGEgRW5kcmVsaWEgRVRJLUIxIGJvYXJkLgotICovCi1zdGF0aWMgaW50IGV0aV9iMV93bTg3MzFfaW5pdChzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpCi17Ci0JREJHKCJldGlfYjFfd204NzMxX2luaXQoKSBjYWxsZWRcbiIpOwotCi0JLyogQWRkIHNwZWNpZmljIHdpZGdldHMgKi8KLQlzbmRfc29jX2RhcG1fbmV3X2NvbnRyb2xzKGNvZGVjLCBldGlfYjFfZGFwbV93aWRnZXRzLAotCQkJCSAgQVJSQVlfU0laRShldGlfYjFfZGFwbV93aWRnZXRzKSk7Ci0KLQkvKiBTZXQgdXAgc3BlY2lmaWMgYXVkaW8gcGF0aCBpbnRlcmNvbm5lY3RzICovCi0Jc25kX3NvY19kYXBtX2FkZF9yb3V0ZShjb2RlYywgaW50ZXJjb24sIEFSUkFZX1NJWkUoaW50ZXJjb24pKTsKLQotCS8qIG5vdCBjb25uZWN0ZWQgKi8KLQlzbmRfc29jX2RhcG1fZGlzYWJsZV9waW4oY29kZWMsICJSTElORUlOIik7Ci0Jc25kX3NvY19kYXBtX2Rpc2FibGVfcGluKGNvZGVjLCAiTExJTkVJTiIpOwotCi0JLyogYWx3YXlzIGNvbm5lY3RlZCAqLwotCXNuZF9zb2NfZGFwbV9lbmFibGVfcGluKGNvZGVjLCAiSW50IE1pYyIpOwotCXNuZF9zb2NfZGFwbV9lbmFibGVfcGluKGNvZGVjLCAiRXh0IFNwayIpOwotCi0Jc25kX3NvY19kYXBtX3N5bmMoY29kZWMpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kYWlfbGluayBldGlfYjFfZGFpID0gewotCS5uYW1lID0gIldNODczMSIsCi0JLnN0cmVhbV9uYW1lID0gIldNODczMSBQQ00iLAotCS5jcHVfZGFpID0gJmF0OTFfc3NjX2RhaVsxXSwKLQkuY29kZWNfZGFpID0gJndtODczMV9kYWksCi0JLmluaXQgPSBldGlfYjFfd204NzMxX2luaXQsCi0JLm9wcyA9ICZldGlfYjFfb3BzLAotfTsKLQotc3RhdGljIHN0cnVjdCBzbmRfc29jX21hY2hpbmUgc25kX3NvY19tYWNoaW5lX2V0aV9iMSA9IHsKLQkubmFtZSA9ICJFVElfQjFfV004NzMxIiwKLQkuZGFpX2xpbmsgPSAmZXRpX2IxX2RhaSwKLQkubnVtX2xpbmtzID0gMSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3Qgd204NzMxX3NldHVwX2RhdGEgZXRpX2IxX3dtODczMV9zZXR1cCA9IHsKLQkuaTJjX2J1cyA9IDAsCi0JLmkyY19hZGRyZXNzID0gMHgxYSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgZXRpX2IxX3NuZF9kZXZkYXRhID0gewotCS5tYWNoaW5lID0gJnNuZF9zb2NfbWFjaGluZV9ldGlfYjEsCi0JLnBsYXRmb3JtID0gJmF0OTFfc29jX3BsYXRmb3JtLAotCS5jb2RlY19kZXYgPSAmc29jX2NvZGVjX2Rldl93bTg3MzEsCi0JLmNvZGVjX2RhdGEgPSAmZXRpX2IxX3dtODczMV9zZXR1cCwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpldGlfYjFfc25kX2RldmljZTsKLQotc3RhdGljIGludCBfX2luaXQgZXRpX2IxX2luaXQodm9pZCkKLXsKLQlpbnQgcmV0OwotCXN0cnVjdCBhdDkxX3NzY19wZXJpcGggKnNzYyA9IGV0aV9iMV9kYWkuY3B1X2RhaS0+cHJpdmF0ZV9kYXRhOwotCi0JaWYgKCFyZXF1ZXN0X21lbV9yZWdpb24oQVQ5MVJNOTIwMF9CQVNFX1NTQzEsIFNaXzE2SywgInNvYy1hdWRpbyIpKSB7Ci0JCURCRygiU1NDMSBtZW1vcnkgcmVnaW9uIGlzIGJ1c3lcbiIpOwotCQlyZXR1cm4gLUVCVVNZOwotCX0KLQotCXNzYy0+YmFzZSA9IGlvcmVtYXAoQVQ5MVJNOTIwMF9CQVNFX1NTQzEsIFNaXzE2Syk7Ci0JaWYgKCFzc2MtPmJhc2UpIHsKLQkJREJHKCJTU0MxIG1lbW9yeSBpb3JlbWFwIGZhaWxlZFxuIik7Ci0JCXJldCA9IC1FTk9NRU07Ci0JCWdvdG8gZmFpbF9yZWxlYXNlX21lbTsKLQl9Ci0KLQlzc2MtPnBpZCA9IEFUOTFSTTkyMDBfSURfU1NDMTsKLQotCWV0aV9iMV9zbmRfZGV2aWNlID0gcGxhdGZvcm1fZGV2aWNlX2FsbG9jKCJzb2MtYXVkaW8iLCAtMSk7Ci0JaWYgKCFldGlfYjFfc25kX2RldmljZSkgewotCQlEQkcoInBsYXRmb3JtIGRldmljZSBhbGxvY2F0aW9uIGZhaWxlZFxuIik7Ci0JCXJldCA9IC1FTk9NRU07Ci0JCWdvdG8gZmFpbF9pb191bm1hcDsKLQl9Ci0KLQlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShldGlfYjFfc25kX2RldmljZSwgJmV0aV9iMV9zbmRfZGV2ZGF0YSk7Ci0JZXRpX2IxX3NuZF9kZXZkYXRhLmRldiA9ICZldGlfYjFfc25kX2RldmljZS0+ZGV2OwotCi0JcmV0ID0gcGxhdGZvcm1fZGV2aWNlX2FkZChldGlfYjFfc25kX2RldmljZSk7Ci0JaWYgKHJldCkgewotCQlEQkcoInBsYXRmb3JtIGRldmljZSBhZGQgZmFpbGVkXG4iKTsKLQkJcGxhdGZvcm1fZGV2aWNlX3B1dChldGlfYjFfc25kX2RldmljZSk7Ci0JCWdvdG8gZmFpbF9pb191bm1hcDsKLQl9Ci0KLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQjYsIDApOwkvKiBURjEgKi8KLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQjcsIDApOwkvKiBUSzEgKi8KLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQjgsIDApOwkvKiBURDEgKi8KLQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQjksIDApOwkvKiBSRDEgKi8KLS8qCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BCMTAsIDApOyovCS8qIFJLMSAqLwotCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BCMTEsIDApOwkvKiBSRjEgKi8KLQotCS8qCi0JICogU2V0IFBDSzEgcGFyZW50IHRvIFBMTEIgYW5kIGl0cyByYXRlIHRvIDEyIE1oei4KLQkgKi8KLQlwbGxiX2NsayA9IGNsa19nZXQoTlVMTCwgInBsbGIiKTsKLQlwY2sxX2NsayA9IGNsa19nZXQoTlVMTCwgInBjazEiKTsKLQotCWNsa19zZXRfcGFyZW50KHBjazFfY2xrLCBwbGxiX2Nsayk7Ci0JY2xrX3NldF9yYXRlKHBjazFfY2xrLCAxMjAwMDAwMCk7Ci0KLQlEQkcoIk1DTEsgcmF0ZSAlbHVIelxuIiwgY2xrX2dldF9yYXRlKHBjazFfY2xrKSk7Ci0KLQkvKiBhc3NpZ24gdGhlIEdQSU8gcGluIHRvIFBDSzEgKi8KLQlhdDkxX3NldF9CX3BlcmlwaChBVDkxX1BJTl9QQTI0LCAwKTsKLQotI2lmZGVmIENPTkZJR19TTkRfQVQ5MV9TT0NfRVRJX1NMQVZFCi0JcHJpbnRrKEtFUk5fSU5GTyAiZXRpX2IxX3dtODczMTogQ29kZWMgaW4gU2xhdmUgTW9kZVxuIik7Ci0jZWxzZQotCXByaW50ayhLRVJOX0lORk8gImV0aV9iMV93bTg3MzE6IENvZGVjIGluIE1hc3RlciBNb2RlXG4iKTsKLSNlbmRpZgotCXJldHVybiByZXQ7Ci0KLWZhaWxfaW9fdW5tYXA6Ci0JaW91bm1hcChzc2MtPmJhc2UpOwotZmFpbF9yZWxlYXNlX21lbToKLQlyZWxlYXNlX21lbV9yZWdpb24oQVQ5MVJNOTIwMF9CQVNFX1NTQzEsIFNaXzE2Syk7Ci0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIHZvaWQgX19leGl0IGV0aV9iMV9leGl0KHZvaWQpCi17Ci0Jc3RydWN0IGF0OTFfc3NjX3BlcmlwaCAqc3NjID0gZXRpX2IxX2RhaS5jcHVfZGFpLT5wcml2YXRlX2RhdGE7Ci0KLQljbGtfcHV0KHBjazFfY2xrKTsKLQljbGtfcHV0KHBsbGJfY2xrKTsKLQotCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKGV0aV9iMV9zbmRfZGV2aWNlKTsKLQotCWlvdW5tYXAoc3NjLT5iYXNlKTsKLQlyZWxlYXNlX21lbV9yZWdpb24oQVQ5MVJNOTIwMF9CQVNFX1NTQzEsIFNaXzE2Syk7Ci19Ci0KLW1vZHVsZV9pbml0KGV0aV9iMV9pbml0KTsKLW1vZHVsZV9leGl0KGV0aV9iMV9leGl0KTsKLQotLyogTW9kdWxlIGluZm9ybWF0aW9uICovCi1NT0RVTEVfQVVUSE9SKCJGcmFuayBNYW5kYXJpbm8gPGZtYW5kYXJpbm9AZW5kcmVsaWEuY29tPiIpOwotTU9EVUxFX0RFU0NSSVBUSU9OKCJBTFNBIFNvQyBFVEktQjEtV004NzMxIik7Ci1NT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvYmxhY2tmaW4vS2NvbmZpZyBiL3NvdW5kL3NvYy9ibGFja2Zpbi9LY29uZmlnCmluZGV4IGY5ODMzMWQuLmRjMDA2MjAgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9ibGFja2Zpbi9LY29uZmlnCisrKyBiL3NvdW5kL3NvYy9ibGFja2Zpbi9LY29uZmlnCkBAIC0xNyw2ICsxNywyMiBAQAogCWhlbHAKIAkgIFNheSBZIGlmIHlvdSB3YW50IHRvIGFkZCBzdXBwb3J0IGZvciBTb0MgYXVkaW8gb24gQkY1MjctRVpLSVQuCiAKK2NvbmZpZyBTTkRfQkY1WFhfU09DX0FENzMzMTEKKwl0cmlzdGF0ZSAiU29DIEFENzMzMTEgQXVkaW8gc3VwcG9ydCBmb3IgQmxhY2tmaW4iCisJZGVwZW5kcyBvbiBTTkRfQkY1WFhfSTJTCisJc2VsZWN0IFNORF9CRjVYWF9TT0NfSTJTCisJc2VsZWN0IFNORF9TT0NfQUQ3MzMxMQorCWhlbHAKKwkgIFNheSBZIGlmIHlvdSB3YW50IHRvIGFkZCBzdXBwb3J0IGZvciBBRDczMzExIGNvZGVjIG9uIEJsYWNrZmluLgorCitjb25maWcgU05EX0JGSU5fQUQ3MzMxMV9TRQorCWludCAiUEYgcGluIGZvciBBRDczMzExTCBDaGlwIFNlbGVjdCIKKwlkZXBlbmRzIG9uIFNORF9CRjVYWF9TT0NfQUQ3MzMxMQorCWRlZmF1bHQgNAorCWhlbHAKKwkgIEVudGVyIHRoZSBHUElPIHVzZWQgdG8gY29udHJvbCBBRDczMzExJ3MgU0UgcGluLiBBY2NlcHRhYmxlCisJICB2YWx1ZXMgYXJlIDAgdG8gNworCiBjb25maWcgU05EX0JGNVhYX0FDOTcKIAl0cmlzdGF0ZSAiU29DIEFDOTcgQXVkaW8gZm9yIHRoZSBBREkgQkY1eHggY2hpcCIKIAlkZXBlbmRzIG9uIEJMQUNLRklOICYmIFNORF9TT0MKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9ibGFja2Zpbi9NYWtlZmlsZSBiL3NvdW5kL3NvYy9ibGFja2Zpbi9NYWtlZmlsZQppbmRleCA5ZWE4YmQ5Li45N2JiMzdhIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvYmxhY2tmaW4vTWFrZWZpbGUKKysrIGIvc291bmQvc29jL2JsYWNrZmluL01ha2VmaWxlCkBAIC0xNCw3ICsxNCw4IEBACiAjIEJsYWNrZmluIE1hY2hpbmUgU3VwcG9ydAogc25kLWFkMTk4MC1vYmpzIDo9IGJmNXh4LWFkMTk4MC5vCiBzbmQtc3NtMjYwMi1vYmpzIDo9IGJmNXh4LXNzbTI2MDIubwotCitzbmQtYWQ3MzMxMS1vYmpzIDo9IGJmNXh4LWFkNzMzMTEubwogCiBvYmotJChDT05GSUdfU05EX0JGNVhYX1NPQ19BRDE5ODApICs9IHNuZC1hZDE5ODAubwogb2JqLSQoQ09ORklHX1NORF9CRjVYWF9TT0NfU1NNMjYwMikgKz0gc25kLXNzbTI2MDIubworb2JqLSQoQ09ORklHX1NORF9CRjVYWF9TT0NfQUQ3MzMxMSkgKz0gc25kLWFkNzMzMTEubwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2JsYWNrZmluL2JmNXh4LWFjOTctcGNtLmMgYi9zb3VuZC9zb2MvYmxhY2tmaW4vYmY1eHgtYWM5Ny1wY20uYwppbmRleCA1MWY0OTA3Li4yNWU1MGQyIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvYmxhY2tmaW4vYmY1eHgtYWM5Ny1wY20uYworKysgYi9zb3VuZC9zb2MvYmxhY2tmaW4vYmY1eHgtYWM5Ny1wY20uYwpAQCAtNTYsNiArNTYsNyBAQAogCQlzcG9ydC0+dHhfcG9zICs9IHJ1bnRpbWUtPnBlcmlvZF9zaXplOwogCQlpZiAoc3BvcnQtPnR4X3BvcyA+PSBydW50aW1lLT5idWZmZXJfc2l6ZSkKIAkJCXNwb3J0LT50eF9wb3MgJT0gcnVudGltZS0+YnVmZmVyX3NpemU7CisJCXNwb3J0LT50eF9kZWxheV9wb3MgPSBzcG9ydC0+dHhfcG9zOwogCX0gZWxzZSB7CiAJCWJmNXh4X2FjOTdfdG9fcGNtKAogCQkJKHN0cnVjdCBhYzk3X2ZyYW1lICopc3BvcnQtPnJ4X2RtYV9idWYgKyBzcG9ydC0+cnhfcG9zLApAQCAtNzIsNyArNzMsMTUgQEAKIAlzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnBjbSA9IGRhdGE7CiAjaWYgZGVmaW5lZChDT05GSUdfU05EX01NQVBfU1VQUE9SVCkKIAlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lID0gcGNtLT5ydW50aW1lOworCXN0cnVjdCBzcG9ydF9kZXZpY2UgKnNwb3J0ID0gcnVudGltZS0+cHJpdmF0ZV9kYXRhOwogCWJmNXh4X21tYXBfY29weShwY20sIHJ1bnRpbWUtPnBlcmlvZF9zaXplKTsKKwlpZiAocGNtLT5zdHJlYW0gPT0gU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSykgeworCQlpZiAoc3BvcnQtPm9uY2UgPT0gMCkgeworCQkJc25kX3BjbV9wZXJpb2RfZWxhcHNlZChwY20pOworCQkJYmY1eHhfbW1hcF9jb3B5KHBjbSwgcnVudGltZS0+cGVyaW9kX3NpemUpOworCQkJc3BvcnQtPm9uY2UgPSAxOworCQl9CisJfQogI2VuZGlmCiAJc25kX3BjbV9wZXJpb2RfZWxhcHNlZChwY20pOwogfQpAQCAtMTE0LDYgKzEyMywxMCBAQAogCiBzdGF0aWMgaW50IGJmNXh4X3BjbV9od19mcmVlKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQogeworCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUgPSBzdWJzdHJlYW0tPnJ1bnRpbWU7CisKKwlpZiAoc3Vic3RyZWFtLT5zdHJlYW0gPT0gU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSykKKwltZW1zZXQocnVudGltZS0+ZG1hX2FyZWEsIDAsIHJ1bnRpbWUtPmJ1ZmZlcl9zaXplKTsKIAlzbmRfcGNtX2xpYl9mcmVlX3BhZ2VzKHN1YnN0cmVhbSk7CiAJcmV0dXJuIDA7CiB9CkBAIC0xMjcsMTYgKzE0MCwxMSBAQAogCSAqIFNQT1JUIHdvcmtpbmcgaW4gVE1EIG1vZGUoaW5jbHVkZSBBQzk3KS4KIAkgKi8KICNpZiBkZWZpbmVkKENPTkZJR19TTkRfTU1BUF9TVVBQT1JUKQotCXNpemVfdCBzaXplID0gYmY1eHhfcGNtX2hhcmR3YXJlLmJ1ZmZlcl9ieXRlc19tYXgKLQkJCSogc2l6ZW9mKHN0cnVjdCBhYzk3X2ZyYW1lKSAvIDQ7Ci0JLypjbGVhbiB1cCBpbnRlcm1lZGlhdGUgYnVmZmVyKi8KIAlpZiAoc3Vic3RyZWFtLT5zdHJlYW0gPT0gU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSykgewotCQltZW1zZXQoc3BvcnQtPnR4X2RtYV9idWYsIDAsIHNpemUpOwogCQlzcG9ydF9zZXRfdHhfY2FsbGJhY2soc3BvcnQsIGJmNXh4X2RtYV9pcnEsIHN1YnN0cmVhbSk7CiAJCXNwb3J0X2NvbmZpZ190eF9kbWEoc3BvcnQsIHNwb3J0LT50eF9kbWFfYnVmLCBydW50aW1lLT5wZXJpb2RzLAogCQkJcnVudGltZS0+cGVyaW9kX3NpemUgKiBzaXplb2Yoc3RydWN0IGFjOTdfZnJhbWUpKTsKIAl9IGVsc2UgewotCQltZW1zZXQoc3BvcnQtPnJ4X2RtYV9idWYsIDAsIHNpemUpOwogCQlzcG9ydF9zZXRfcnhfY2FsbGJhY2soc3BvcnQsIGJmNXh4X2RtYV9pcnEsIHN1YnN0cmVhbSk7CiAJCXNwb3J0X2NvbmZpZ19yeF9kbWEoc3BvcnQsIHNwb3J0LT5yeF9kbWFfYnVmLCBydW50aW1lLT5wZXJpb2RzLAogCQkJcnVudGltZS0+cGVyaW9kX3NpemUgKiBzaXplb2Yoc3RydWN0IGFjOTdfZnJhbWUpKTsKQEAgLTE2NCw4ICsxNzIsMTIgQEAKIAlwcl9kZWJ1ZygiJXMgZW50ZXJcbiIsIF9fZnVuY19fKTsKIAlzd2l0Y2ggKGNtZCkgewogCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfU1RBUlQ6Ci0JCWlmIChzdWJzdHJlYW0tPnN0cmVhbSA9PSBTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLKQorCQlpZiAoc3Vic3RyZWFtLT5zdHJlYW0gPT0gU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSykgeworCQkJYmY1eHhfbW1hcF9jb3B5KHN1YnN0cmVhbSwgcnVudGltZS0+cGVyaW9kX3NpemUpOworCQkJc25kX3BjbV9wZXJpb2RfZWxhcHNlZChzdWJzdHJlYW0pOworCQkJc3BvcnQtPnR4X2RlbGF5X3BvcyA9IDA7CiAJCQlzcG9ydF90eF9zdGFydChzcG9ydCk7CisJCX0KIAkJZWxzZQogCQkJc3BvcnRfcnhfc3RhcnQoc3BvcnQpOwogCQlicmVhazsKQEAgLTE5OCw3ICsyMTAsNyBAQAogCiAjaWYgZGVmaW5lZChDT05GSUdfU05EX01NQVBfU1VQUE9SVCkKIAlpZiAoc3Vic3RyZWFtLT5zdHJlYW0gPT0gU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSykKLQkJY3VyciA9IHNwb3J0LT50eF9wb3M7CisJCWN1cnIgPSBzcG9ydC0+dHhfZGVsYXlfcG9zOwogCWVsc2UKIAkJY3VyciA9IHNwb3J0LT5yeF9wb3M7CiAjZWxzZQpAQCAtMjM3LDYgKzI0OSwyMSBAQAogCXJldHVybiByZXQ7CiB9CiAKK3N0YXRpYyBpbnQgYmY1eHhfcGNtX2Nsb3NlKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQoreworCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUgPSBzdWJzdHJlYW0tPnJ1bnRpbWU7CisJc3RydWN0IHNwb3J0X2RldmljZSAqc3BvcnQgPSBydW50aW1lLT5wcml2YXRlX2RhdGE7CisKKwlwcl9kZWJ1ZygiJXMgZW50ZXJcbiIsIF9fZnVuY19fKTsKKwlpZiAoc3Vic3RyZWFtLT5zdHJlYW0gPT0gU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSykgeworCQlzcG9ydC0+b25jZSA9IDA7CisJCW1lbXNldChzcG9ydC0+dHhfZG1hX2J1ZiwgMCwgcnVudGltZS0+YnVmZmVyX3NpemUgKiBzaXplb2Yoc3RydWN0IGFjOTdfZnJhbWUpKTsKKwl9IGVsc2UKKwkJbWVtc2V0KHNwb3J0LT5yeF9kbWFfYnVmLCAwLCBydW50aW1lLT5idWZmZXJfc2l6ZSAqIHNpemVvZihzdHJ1Y3QgYWM5N19mcmFtZSkpOworCisJcmV0dXJuIDA7Cit9CisKICNpZmRlZiBDT05GSUdfU05EX01NQVBfU1VQUE9SVAogc3RhdGljIGludCBiZjV4eF9wY21fbW1hcChzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKIAlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKQEAgLTI3Miw2ICsyOTksNyBAQAogCiBzdHJ1Y3Qgc25kX3BjbV9vcHMgYmY1eHhfcGNtX2FjOTdfb3BzID0gewogCS5vcGVuCQk9IGJmNXh4X3BjbV9vcGVuLAorCS5jbG9zZQkJPSBiZjV4eF9wY21fY2xvc2UsCiAJLmlvY3RsCQk9IHNuZF9wY21fbGliX2lvY3RsLAogCS5od19wYXJhbXMJPSBiZjV4eF9wY21faHdfcGFyYW1zLAogCS5od19mcmVlCT0gYmY1eHhfcGNtX2h3X2ZyZWUsCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvYmxhY2tmaW4vYmY1eHgtYWM5Ny5jIGIvc291bmQvc29jL2JsYWNrZmluL2JmNXh4LWFjOTcuYwppbmRleCBjNzgyZTMxLi41ZTVhYWZiIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvYmxhY2tmaW4vYmY1eHgtYWM5Ny5jCisrKyBiL3NvdW5kL3NvYy9ibGFja2Zpbi9iZjV4eC1hYzk3LmMKQEAgLTEyOSw3ICsxMjksNiBAQAogCXN0cnVjdCBhYzk3X2ZyYW1lICpuZXh0d3JpdGU7CiAKIAlzcG9ydF9pbmNmcmFnKHNwb3J0LCAmbmV4dGZyYWcsIDEpOwotCXNwb3J0X2luY2ZyYWcoc3BvcnQsICZuZXh0ZnJhZywgMSk7CiAKIAluZXh0d3JpdGUgPSAoc3RydWN0IGFjOTdfZnJhbWUgKikoc3BvcnQtPnR4X2J1ZiArIFwKIAkJCW5leHRmcmFnICogc3BvcnQtPnR4X2ZyYWdzaXplKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9ibGFja2Zpbi9iZjV4eC1hZDczMzExLmMgYi9zb3VuZC9zb2MvYmxhY2tmaW4vYmY1eHgtYWQ3MzMxMS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYyMmM5YjkKLS0tIC9kZXYvbnVsbAorKysgYi9zb3VuZC9zb2MvYmxhY2tmaW4vYmY1eHgtYWQ3MzMxMS5jCkBAIC0wLDAgKzEsMjQwIEBACisvKgorICogRmlsZTogICAgICAgICBzb3VuZC9zb2MvYmxhY2tmaW4vYmY1eHgtYWQ3MzMxMS5jCisgKiBBdXRob3I6ICAgICAgIENsaWZmIENhaSA8Q2xpZmYuQ2FpQGFuYWxvZy5jb20+CisgKgorICogQ3JlYXRlZDogICAgICBUaHVyIFNlcCAyNSAyMDA4CisgKiBEZXNjcmlwdGlvbjogIEJvYXJkIGRyaXZlciBmb3IgYWQ3MzMxMSBzb3VuZCBjaGlwCisgKgorICogTW9kaWZpZWQ6CisgKiAgICAgICAgICAgICAgIENvcHlyaWdodCAyMDA4IEFuYWxvZyBEZXZpY2VzIEluYy4KKyAqCisgKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIHRoZSBmaWxlIENPUFlJTkcsIG9yIHdyaXRlCisgKiB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KKworI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KKyNpbmNsdWRlIDxzb3VuZC9wY20uaD4KKyNpbmNsdWRlIDxzb3VuZC9zb2MuaD4KKyNpbmNsdWRlIDxzb3VuZC9zb2MtZGFwbS5oPgorI2luY2x1ZGUgPHNvdW5kL3BjbV9wYXJhbXMuaD4KKworI2luY2x1ZGUgPGFzbS9ibGFja2Zpbi5oPgorI2luY2x1ZGUgPGFzbS9jYWNoZWZsdXNoLmg+CisjaW5jbHVkZSA8YXNtL2lycS5oPgorI2luY2x1ZGUgPGFzbS9kbWEuaD4KKyNpbmNsdWRlIDxhc20vcG9ydG11eC5oPgorCisjaW5jbHVkZSAiLi4vY29kZWNzL2FkNzMzMTEuaCIKKyNpbmNsdWRlICJiZjV4eC1zcG9ydC5oIgorI2luY2x1ZGUgImJmNXh4LWkycy1wY20uaCIKKyNpbmNsdWRlICJiZjV4eC1pMnMuaCIKKworI2lmIENPTkZJR19TTkRfQkY1WFhfU1BPUlRfTlVNID09IDAKKyNkZWZpbmUgYmZpbl93cml0ZV9TUE9SVF9UQ1IxCWJmaW5fd3JpdGVfU1BPUlQwX1RDUjEKKyNkZWZpbmUgYmZpbl9yZWFkX1NQT1JUX1RDUjEJYmZpbl9yZWFkX1NQT1JUMF9UQ1IxCisjZGVmaW5lIGJmaW5fd3JpdGVfU1BPUlRfVENSMgliZmluX3dyaXRlX1NQT1JUMF9UQ1IyCisjZGVmaW5lIGJmaW5fd3JpdGVfU1BPUlRfVFgxNgliZmluX3dyaXRlX1NQT1JUMF9UWDE2CisjZGVmaW5lIGJmaW5fcmVhZF9TUE9SVF9TVEFUCWJmaW5fcmVhZF9TUE9SVDBfU1RBVAorI2Vsc2UKKyNkZWZpbmUgYmZpbl93cml0ZV9TUE9SVF9UQ1IxCWJmaW5fd3JpdGVfU1BPUlQxX1RDUjEKKyNkZWZpbmUgYmZpbl9yZWFkX1NQT1JUX1RDUjEJYmZpbl9yZWFkX1NQT1JUMV9UQ1IxCisjZGVmaW5lIGJmaW5fd3JpdGVfU1BPUlRfVENSMgliZmluX3dyaXRlX1NQT1JUMV9UQ1IyCisjZGVmaW5lIGJmaW5fd3JpdGVfU1BPUlRfVFgxNgliZmluX3dyaXRlX1NQT1JUMV9UWDE2CisjZGVmaW5lIGJmaW5fcmVhZF9TUE9SVF9TVEFUCWJmaW5fcmVhZF9TUE9SVDFfU1RBVAorI2VuZGlmCisKKyNkZWZpbmUgR1BJT19TRSBDT05GSUdfU05EX0JGSU5fQUQ3MzMxMV9TRQorCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfbWFjaGluZSBiZjV4eF9hZDczMzExOworCitzdGF0aWMgaW50IHNuZF9hZDczMzExX3N0YXJ0dXAodm9pZCkKK3sKKwlwcl9kZWJ1ZygiJXMgZW50ZXJcbiIsIF9fZnVuY19fKTsKKworCS8qIFB1bGwgdXAgU0UgcGluIG9uIEFENzMzMTFMICovCisJZ3Bpb19zZXRfdmFsdWUoR1BJT19TRSwgMSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc25kX2FkNzMzMTFfY29uZmlndXJlKHZvaWQpCit7CisJdW5zaWduZWQgc2hvcnQgY3RybF9yZWdzWzZdOworCXVuc2lnbmVkIHNob3J0IHN0YXR1cyA9IDA7CisJaW50IGNvdW50ID0gMDsKKworCS8qIERNQ0xLID0gTUNMSyA9IDE2LjM4NCBNSHoKKwkgKiBTQ0xLID0gRE1DTEsvOCA9IDIuMDQ4IE1IegorCSAqIFNhbXBsZSBSYXRlID0gRE1DTEsvMjA0OCAgPSA4IEtIegorCSAqLworCWN0cmxfcmVnc1swXSA9IEFEX0NPTlRST0wgfCBBRF9XUklURSB8IENUUkxfUkVHX0IgfCBSRUdCX01DRElWKDApIHwgXAorCQkJUkVHQl9TQ0RJVigwKSB8IFJFR0JfRElSQVRFKDApOworCWN0cmxfcmVnc1sxXSA9IEFEX0NPTlRST0wgfCBBRF9XUklURSB8IENUUkxfUkVHX0MgfCBSRUdDX1BVREVWIHwgXAorCQkJUkVHQ19QVUFEQyB8IFJFR0NfUFVEQUMgfCBSRUdDX1BVUkVGIHwgUkVHQ19SRUZVU0UgOworCWN0cmxfcmVnc1syXSA9IEFEX0NPTlRST0wgfCBBRF9XUklURSB8IENUUkxfUkVHX0QgfCBSRUdEX09HUygyKSB8IFwKKwkJCVJFR0RfSUdTKDIpOworCWN0cmxfcmVnc1szXSA9IEFEX0NPTlRST0wgfCBBRF9XUklURSB8IENUUkxfUkVHX0UgfCBSRUdFX0RBKDB4MWYpOworCWN0cmxfcmVnc1s0XSA9IEFEX0NPTlRST0wgfCBBRF9XUklURSB8IENUUkxfUkVHX0YgfCBSRUdGX1NFRU4gOworCWN0cmxfcmVnc1s1XSA9IEFEX0NPTlRST0wgfCBBRF9XUklURSB8IENUUkxfUkVHX0EgfCBSRUdBX01PREVfREFUQTsKKworCWxvY2FsX2lycV9kaXNhYmxlKCk7CisJc25kX2FkNzMzMTFfc3RhcnR1cCgpOworCXVkZWxheSgxKTsKKworCWJmaW5fd3JpdGVfU1BPUlRfVENSMShURlNSKTsKKwliZmluX3dyaXRlX1NQT1JUX1RDUjIoMHhGKTsKKwlTU1lOQygpOworCisJLyogU1BPUlQgVHggUmVnaXN0ZXIgaXMgYSA4IHggMTYgRklGTywgYWxsIHRoZSBkYXRhIGNhbiBiZSBwdXQgdG8KKwkgKiBGSUZPIGJlZm9yZSBlbmFibGUgU1BPUlQgdG8gdHJhbnNmZXIgdGhlIGRhdGEKKwkgKi8KKwlmb3IgKGNvdW50ID0gMDsgY291bnQgPCA2OyBjb3VudCsrKQorCQliZmluX3dyaXRlX1NQT1JUX1RYMTYoY3RybF9yZWdzW2NvdW50XSk7CisJU1NZTkMoKTsKKwliZmluX3dyaXRlX1NQT1JUX1RDUjEoYmZpbl9yZWFkX1NQT1JUX1RDUjEoKSB8IFRTUEVOKTsKKwlTU1lOQygpOworCisJLyogV2hlbiBUVVZGIGlzIHNldCwgdGhlIGRhdGEgaXMgYWxyZWFkeSBzZW5kIG91dCAqLworCXdoaWxlICghKHN0YXR1cyAmIFRVVkYpICYmIGNvdW50KysgPCAxMDAwMCkgeworCQl1ZGVsYXkoMSk7CisJCXN0YXR1cyA9IGJmaW5fcmVhZF9TUE9SVF9TVEFUKCk7CisJCVNTWU5DKCk7CisJfQorCWJmaW5fd3JpdGVfU1BPUlRfVENSMShiZmluX3JlYWRfU1BPUlRfVENSMSgpICYgflRTUEVOKTsKKwlTU1lOQygpOworCWxvY2FsX2lycV9lbmFibGUoKTsKKworCWlmIChjb3VudCA9PSAxMDAwMCkgeworCQlwcmludGsoS0VSTl9FUlIgImFkNzMzMTE6IGZhaWxlZCB0byBjb25maWd1cmUgY29kZWNcbiIpOworCQlyZXR1cm4gLTE7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGJmNXh4X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJaW50IGVycjsKKwlpZiAoZ3Bpb19yZXF1ZXN0KEdQSU9fU0UsICJBRDczMzExX1NFIikpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogRmFpbGVkIHJvIHJlcXVlc3QgR1BJT18lZFxuIiwgX19mdW5jX18sIEdQSU9fU0UpOworCQlyZXR1cm4gLUVCVVNZOworCX0KKworCWdwaW9fZGlyZWN0aW9uX291dHB1dChHUElPX1NFLCAwKTsKKworCWVyciA9IHNuZF9hZDczMzExX2NvbmZpZ3VyZSgpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGJmNXh4X2FkNzMzMTFfc3RhcnR1cChzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3sKKwlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHNuZF9zb2NfZGFpICpjcHVfZGFpID0gcnRkLT5kYWktPmNwdV9kYWk7CisKKwlwcl9kZWJ1ZygiJXMgZW50ZXJcbiIsIF9fZnVuY19fKTsKKwljcHVfZGFpLT5wcml2YXRlX2RhdGEgPSBzcG9ydF9oYW5kbGU7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYmY1eHhfYWQ3MzMxMV9od19wYXJhbXMoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCisJc3RydWN0IHNuZF9wY21faHdfcGFyYW1zICpwYXJhbXMpCit7CisJc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBzbmRfc29jX2RhaSAqY3B1X2RhaSA9IHJ0ZC0+ZGFpLT5jcHVfZGFpOworCWludCByZXQgPSAwOworCisJcHJfZGVidWcoIiVzIHJhdGUgJWQgZm9ybWF0ICV4XG4iLCBfX2Z1bmNfXywgcGFyYW1zX3JhdGUocGFyYW1zKSwKKwkJcGFyYW1zX2Zvcm1hdChwYXJhbXMpKTsKKworCS8qIHNldCBjcHUgREFJIGNvbmZpZ3VyYXRpb24gKi8KKwlyZXQgPSBjcHVfZGFpLT5kYWlfb3BzLnNldF9mbXQoY3B1X2RhaSwgU05EX1NPQ19EQUlGTVRfRFNQX0EgfAorCQlTTkRfU09DX0RBSUZNVF9OQl9ORiB8IFNORF9TT0NfREFJRk1UX0NCTV9DRk0pOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIHN0cnVjdCBzbmRfc29jX29wcyBiZjV4eF9hZDczMzExX29wcyA9IHsKKwkuc3RhcnR1cCA9IGJmNXh4X2FkNzMzMTFfc3RhcnR1cCwKKwkuaHdfcGFyYW1zID0gYmY1eHhfYWQ3MzMxMV9od19wYXJhbXMsCit9OworCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGFpX2xpbmsgYmY1eHhfYWQ3MzMxMV9kYWkgPSB7CisJLm5hbWUgPSAiYWQ3MzMxMSIsCisJLnN0cmVhbV9uYW1lID0gIkFENzMzMTEiLAorCS5jcHVfZGFpID0gJmJmNXh4X2kyc19kYWksCisJLmNvZGVjX2RhaSA9ICZhZDczMzExX2RhaSwKKwkub3BzID0gJmJmNXh4X2FkNzMzMTFfb3BzLAorfTsKKworc3RhdGljIHN0cnVjdCBzbmRfc29jX21hY2hpbmUgYmY1eHhfYWQ3MzMxMSA9IHsKKwkubmFtZSA9ICJiZjV4eF9hZDczMzExIiwKKwkucHJvYmUgPSBiZjV4eF9wcm9iZSwKKwkuZGFpX2xpbmsgPSAmYmY1eHhfYWQ3MzMxMV9kYWksCisJLm51bV9saW5rcyA9IDEsCit9OworCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGV2aWNlIGJmNXh4X2FkNzMzMTFfc25kX2RldmRhdGEgPSB7CisJLm1hY2hpbmUgPSAmYmY1eHhfYWQ3MzMxMSwKKwkucGxhdGZvcm0gPSAmYmY1eHhfaTJzX3NvY19wbGF0Zm9ybSwKKwkuY29kZWNfZGV2ID0gJnNvY19jb2RlY19kZXZfYWQ3MzMxMSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpiZjUyeF9hZDczMzExX3NuZF9kZXZpY2U7CisKK3N0YXRpYyBpbnQgX19pbml0IGJmNXh4X2FkNzMzMTFfaW5pdCh2b2lkKQoreworCWludCByZXQ7CisKKwlwcl9kZWJ1ZygiJXMgZW50ZXJcbiIsIF9fZnVuY19fKTsKKwliZjUyeF9hZDczMzExX3NuZF9kZXZpY2UgPSBwbGF0Zm9ybV9kZXZpY2VfYWxsb2MoInNvYy1hdWRpbyIsIC0xKTsKKwlpZiAoIWJmNTJ4X2FkNzMzMTFfc25kX2RldmljZSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShiZjUyeF9hZDczMzExX3NuZF9kZXZpY2UsICZiZjV4eF9hZDczMzExX3NuZF9kZXZkYXRhKTsKKwliZjV4eF9hZDczMzExX3NuZF9kZXZkYXRhLmRldiA9ICZiZjUyeF9hZDczMzExX3NuZF9kZXZpY2UtPmRldjsKKwlyZXQgPSBwbGF0Zm9ybV9kZXZpY2VfYWRkKGJmNTJ4X2FkNzMzMTFfc25kX2RldmljZSk7CisKKwlpZiAocmV0KQorCQlwbGF0Zm9ybV9kZXZpY2VfcHV0KGJmNTJ4X2FkNzMzMTFfc25kX2RldmljZSk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgYmY1eHhfYWQ3MzMxMV9leGl0KHZvaWQpCit7CisJcHJfZGVidWcoIiVzIGVudGVyXG4iLCBfX2Z1bmNfXyk7CisJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIoYmY1MnhfYWQ3MzMxMV9zbmRfZGV2aWNlKTsKK30KKworbW9kdWxlX2luaXQoYmY1eHhfYWQ3MzMxMV9pbml0KTsKK21vZHVsZV9leGl0KGJmNXh4X2FkNzMzMTFfZXhpdCk7CisKKy8qIE1vZHVsZSBpbmZvcm1hdGlvbiAqLworTU9EVUxFX0FVVEhPUigiQ2xpZmYgQ2FpIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkFMU0EgU29DIEFENzMzMTEgQmxhY2tmaW4iKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2JsYWNrZmluL2JmNXh4LWkycy5jIGIvc291bmQvc29jL2JsYWNrZmluL2JmNXh4LWkycy5jCmluZGV4IDQzYTQwOTIuLjgyNzU4N2YgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9ibGFja2Zpbi9iZjV4eC1pMnMuYworKysgYi9zb3VuZC9zb2MvYmxhY2tmaW4vYmY1eHgtaTJzLmMKQEAgLTcwLDYgKzcwLDEzIEBACiAJfQogfTsKIAorc3RhdGljIHUxNiBzcG9ydF9yZXFbXVs3XSA9IHsKKwkJeyBQX1NQT1JUMF9EVFBSSSwgUF9TUE9SVDBfVFNDTEssIFBfU1BPUlQwX1JGUywKKwkJICBQX1NQT1JUMF9EUlBSSSwgUF9TUE9SVDBfUlNDTEssIDB9LAorCQl7IFBfU1BPUlQxX0RUUFJJLCBQX1NQT1JUMV9UU0NMSywgUF9TUE9SVDFfUkZTLAorCQkgIFBfU1BPUlQxX0RSUFJJLCBQX1NQT1JUMV9SU0NMSywgMH0sCit9OworCiBzdGF0aWMgaW50IGJmNXh4X2kyc19zZXRfZGFpX2ZtdChzdHJ1Y3Qgc25kX3NvY19kYWkgKmNwdV9kYWksCiAJCXVuc2lnbmVkIGludCBmbXQpCiB7CkBAIC03OCw2ICs4NSwxNCBAQAogCS8qIGludGVyZmFjZSBmb3JtYXQ6c3VwcG9ydCBJMlMsc2xhdmUgbW9kZSAqLwogCXN3aXRjaCAoZm10ICYgU05EX1NPQ19EQUlGTVRfRk9STUFUX01BU0spIHsKIAljYXNlIFNORF9TT0NfREFJRk1UX0kyUzoKKwkJYmY1eHhfaTJzLnRjcjEgfD0gVEZTUiB8IFRDS0ZFOworCQliZjV4eF9pMnMucmNyMSB8PSBSRlNSIHwgUkNLRkU7CisJCWJmNXh4X2kycy50Y3IyIHw9IFRTRlNFOworCQliZjV4eF9pMnMucmNyMiB8PSBSU0ZTRTsKKwkJYnJlYWs7CisJY2FzZSBTTkRfU09DX0RBSUZNVF9EU1BfQToKKwkJYmY1eHhfaTJzLnRjcjEgfD0gVEZTUjsKKwkJYmY1eHhfaTJzLnJjcjEgfD0gUkZTUjsKIAkJYnJlYWs7CiAJY2FzZSBTTkRfU09DX0RBSUZNVF9MRUZUX0o6CiAJCXJldCA9IC1FSU5WQUw7CkBAIC0xMjcsMTQgKzE0MiwxNyBAQAogCWNhc2UgU05EUlZfUENNX0ZPUk1BVF9TMTZfTEU6CiAJCWJmNXh4X2kycy50Y3IyIHw9IDE1OwogCQliZjV4eF9pMnMucmNyMiB8PSAxNTsKKwkJc3BvcnRfaGFuZGxlLT53ZHNpemUgPSAyOwogCQlicmVhazsKIAljYXNlIFNORFJWX1BDTV9GT1JNQVRfUzI0X0xFOgogCQliZjV4eF9pMnMudGNyMiB8PSAyMzsKIAkJYmY1eHhfaTJzLnJjcjIgfD0gMjM7CisJCXNwb3J0X2hhbmRsZS0+d2RzaXplID0gMzsKIAkJYnJlYWs7CiAJY2FzZSBTTkRSVl9QQ01fRk9STUFUX1MzMl9MRToKIAkJYmY1eHhfaTJzLnRjcjIgfD0gMzE7CiAJCWJmNXh4X2kycy5yY3IyIHw9IDMxOworCQlzcG9ydF9oYW5kbGUtPndkc2l6ZSA9IDQ7CiAJCWJyZWFrOwogCX0KIApAQCAtMTQ1LDE3ICsxNjMsMTcgQEAKIAkJICogbmVlZCB0byBjb25maWd1cmUgYm90aCBvZiB0aGVtIGF0IHRoZSB0aW1lIHdoZW4gdGhlIGZpcnN0CiAJCSAqIHN0cmVhbSBpcyBvcGVuZWQuCiAJCSAqCi0JCSAqIENQVSBEQUkgZm9ybWF0OkkyUywgc2xhdmUgbW9kZS4KKwkJICogQ1BVIERBSTpzbGF2ZSBtb2RlLgogCQkgKi8KLQkJcmV0ID0gc3BvcnRfY29uZmlnX3J4KHNwb3J0X2hhbmRsZSwgUkZTUiB8IFJDS0ZFLAotCQkJCSAgICAgIFJTRlNFfGJmNXh4X2kycy5yY3IyLCAwLCAwKTsKKwkJcmV0ID0gc3BvcnRfY29uZmlnX3J4KHNwb3J0X2hhbmRsZSwgYmY1eHhfaTJzLnJjcjEsCisJCQkJICAgICAgYmY1eHhfaTJzLnJjcjIsIDAsIDApOwogCQlpZiAocmV0KSB7CiAJCQlwcl9lcnIoIlNQT1JUIGlzIGJ1c3khXG4iKTsKIAkJCXJldHVybiAtRUJVU1k7CiAJCX0KIAotCQlyZXQgPSBzcG9ydF9jb25maWdfdHgoc3BvcnRfaGFuZGxlLCBURlNSIHwgVENLRkUsCi0JCQkJICAgICAgVFNGU0V8YmY1eHhfaTJzLnRjcjIsIDAsIDApOworCQlyZXQgPSBzcG9ydF9jb25maWdfdHgoc3BvcnRfaGFuZGxlLCBiZjV4eF9pMnMudGNyMSwKKwkJCQkgICAgICBiZjV4eF9pMnMudGNyMiwgMCwgMCk7CiAJCWlmIChyZXQpIHsKIAkJCXByX2VycigiU1BPUlQgaXMgYnVzeSFcbiIpOwogCQkJcmV0dXJuIC1FQlVTWTsKQEAgLTE3NCwxMyArMTkyLDYgQEAKIHN0YXRpYyBpbnQgYmY1eHhfaTJzX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsCiAJCQkgICBzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSkKIHsKLQl1MTYgc3BvcnRfcmVxW11bN10gPSB7Ci0JCXsgUF9TUE9SVDBfRFRQUkksIFBfU1BPUlQwX1RTQ0xLLCBQX1NQT1JUMF9SRlMsCi0JCSAgUF9TUE9SVDBfRFJQUkksIFBfU1BPUlQwX1JTQ0xLLCAwfSwKLQkJeyBQX1NQT1JUMV9EVFBSSSwgUF9TUE9SVDFfVFNDTEssIFBfU1BPUlQxX1JGUywKLQkJICBQX1NQT1JUMV9EUlBSSSwgUF9TUE9SVDFfUlNDTEssIDB9LAotCX07Ci0KIAlwcl9kZWJ1ZygiJXMgZW50ZXJcbiIsIF9fZnVuY19fKTsKIAlpZiAocGVyaXBoZXJhbF9yZXF1ZXN0X2xpc3QoJnNwb3J0X3JlcVtzcG9ydF9udW1dWzBdLCAic29jLWF1ZGlvIikpIHsKIAkJcHJfZXJyKCJSZXF1ZXN0aW5nIFBlcmlwaGVyYWxzIGZhaWxlZFxuIik7CkBAIC0xOTgsNiArMjA5LDEzIEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyB2b2lkIGJmNXh4X2kyc19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwKKwkJCSAgIHN0cnVjdCBzbmRfc29jX2RhaSAqZGFpKQoreworCXByX2RlYnVnKCIlcyBlbnRlclxuIiwgX19mdW5jX18pOworCXBlcmlwaGVyYWxfZnJlZV9saXN0KCZzcG9ydF9yZXFbc3BvcnRfbnVtXVswXSk7Cit9CisKICNpZmRlZiBDT05GSUdfUE0KIHN0YXRpYyBpbnQgYmY1eHhfaTJzX3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2LAogCQkJICAgICBzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSkKQEAgLTI2MywxNSArMjgxLDE2IEBACiAJLmlkID0gMCwKIAkudHlwZSA9IFNORF9TT0NfREFJX0kyUywKIAkucHJvYmUgPSBiZjV4eF9pMnNfcHJvYmUsCisJLnJlbW92ZSA9IGJmNXh4X2kyc19yZW1vdmUsCiAJLnN1c3BlbmQgPSBiZjV4eF9pMnNfc3VzcGVuZCwKIAkucmVzdW1lID0gYmY1eHhfaTJzX3Jlc3VtZSwKIAkucGxheWJhY2sgPSB7Ci0JCS5jaGFubmVsc19taW4gPSAyLAorCQkuY2hhbm5lbHNfbWluID0gMSwKIAkJLmNoYW5uZWxzX21heCA9IDIsCiAJCS5yYXRlcyA9IEJGNVhYX0kyU19SQVRFUywKIAkJLmZvcm1hdHMgPSBCRjVYWF9JMlNfRk9STUFUUyx9LAogCS5jYXB0dXJlID0gewotCQkuY2hhbm5lbHNfbWluID0gMiwKKwkJLmNoYW5uZWxzX21pbiA9IDEsCiAJCS5jaGFubmVsc19tYXggPSAyLAogCQkucmF0ZXMgPSBCRjVYWF9JMlNfUkFURVMsCiAJCS5mb3JtYXRzID0gQkY1WFhfSTJTX0ZPUk1BVFMsfSwKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9ibGFja2Zpbi9iZjV4eC1zcG9ydC5oIGIvc291bmQvc29jL2JsYWNrZmluL2JmNXh4LXNwb3J0LmgKaW5kZXggNGMxNjM0NS4uZmNhZGNjMCAxMDA2NDQKLS0tIGEvc291bmQvc29jL2JsYWNrZmluL2JmNXh4LXNwb3J0LmgKKysrIGIvc291bmQvc29jL2JsYWNrZmluL2JmNXh4LXNwb3J0LmgKQEAgLTEyMyw2ICsxMjMsOCBAQAogCWludCByeF9wb3M7CiAJdW5zaWduZWQgaW50IHR4X2J1ZmZlcl9zaXplOwogCXVuc2lnbmVkIGludCByeF9idWZmZXJfc2l6ZTsKKwlpbnQgdHhfZGVsYXlfcG9zOworCWludCBvbmNlOwogI2VuZGlmCiAJdm9pZCAqcHJpdmF0ZV9kYXRhOwogfTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3MvS2NvbmZpZyBiL3NvdW5kL3NvYy9jb2RlY3MvS2NvbmZpZwppbmRleCBlMGI5ODY5Li4zOGEwZTNiIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL0tjb25maWcKKysrIGIvc291bmQvc29jL2NvZGVjcy9LY29uZmlnCkBAIC0zLDkgKzMsMTEgQEAKIAlkZXBlbmRzIG9uIEkyQwogCXNlbGVjdCBTUEkKIAlzZWxlY3QgU1BJX01BU1RFUgorCXNlbGVjdCBTTkRfU09DX0FENzMzMTEKIAlzZWxlY3QgU05EX1NPQ19BSzQ1MzUKIAlzZWxlY3QgU05EX1NPQ19DUzQyNzAKIAlzZWxlY3QgU05EX1NPQ19TU00yNjAyCisJc2VsZWN0IFNORF9TT0NfVExWMzIwQUlDMjMKIAlzZWxlY3QgU05EX1NPQ19UTFYzMjBBSUMyNgogCXNlbGVjdCBTTkRfU09DX1RMVjMyMEFJQzNYCiAJc2VsZWN0IFNORF9TT0NfVURBMTM4MApAQCAtMzQsNiArMzYsOSBAQAogY29uZmlnIFNORF9TT0NfQUQxOTgwCiAJdHJpc3RhdGUKIAorY29uZmlnIFNORF9TT0NfQUQ3MzMxMQorCXRyaXN0YXRlCisKIGNvbmZpZyBTTkRfU09DX0FLNDUzNQogCXRyaXN0YXRlCiAKQEAgLTU4LDkgKzYzLDEzIEBACiBjb25maWcgU05EX1NPQ19TU00yNjAyCiAJdHJpc3RhdGUKIAorY29uZmlnIFNORF9TT0NfVExWMzIwQUlDMjMKKwl0cmlzdGF0ZQorCWRlcGVuZHMgb24gSTJDCisKIGNvbmZpZyBTTkRfU09DX1RMVjMyMEFJQzI2Ci0JdHJpc3RhdGUgIlRJIFRMVjMyMEFJQzI2IENvZGVjIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBTTkRfU09DICYmIFNQSQorCXRyaXN0YXRlICJUSSBUTFYzMjBBSUMyNiBDb2RlYyBzdXBwb3J0IiBpZiBTTkRfU09DX09GX1NJTVBMRQorCWRlcGVuZHMgb24gU1BJCiAKIGNvbmZpZyBTTkRfU09DX1RMVjMyMEFJQzNYCiAJdHJpc3RhdGUKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3MvTWFrZWZpbGUgYi9zb3VuZC9zb2MvY29kZWNzL01ha2VmaWxlCmluZGV4IGY5Nzc5NzguLjkwZjBhNTggMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3MvTWFrZWZpbGUKKysrIGIvc291bmQvc29jL2NvZGVjcy9NYWtlZmlsZQpAQCAtMSw4ICsxLDEwIEBACiBzbmQtc29jLWFjOTctb2JqcyA6PSBhYzk3Lm8KIHNuZC1zb2MtYWQxOTgwLW9ianMgOj0gYWQxOTgwLm8KK3NuZC1zb2MtYWQ3MzMxMS1vYmpzIDo9IGFkNzMzMTEubwogc25kLXNvYy1hazQ1MzUtb2JqcyA6PSBhazQ1MzUubwogc25kLXNvYy1jczQyNzAtb2JqcyA6PSBjczQyNzAubwogc25kLXNvYy1zc20yNjAyLW9ianMgOj0gc3NtMjYwMi5vCitzbmQtc29jLXRsdjMyMGFpYzIzLW9ianMgOj0gdGx2MzIwYWljMjMubwogc25kLXNvYy10bHYzMjBhaWMyNi1vYmpzIDo9IHRsdjMyMGFpYzI2Lm8KIHNuZC1zb2MtdGx2MzIwYWljM3gtb2JqcyA6PSB0bHYzMjBhaWMzeC5vCiBzbmQtc29jLXVkYTEzODAtb2JqcyA6PSB1ZGExMzgwLm8KQEAgLTIwLDkgKzIyLDExIEBACiAKIG9iai0kKENPTkZJR19TTkRfU09DX0FDOTdfQ09ERUMpCSs9IHNuZC1zb2MtYWM5Ny5vCiBvYmotJChDT05GSUdfU05EX1NPQ19BRDE5ODApCSs9IHNuZC1zb2MtYWQxOTgwLm8KK29iai0kKENPTkZJR19TTkRfU09DX0FENzMzMTEpICs9IHNuZC1zb2MtYWQ3MzMxMS5vCiBvYmotJChDT05GSUdfU05EX1NPQ19BSzQ1MzUpCSs9IHNuZC1zb2MtYWs0NTM1Lm8KIG9iai0kKENPTkZJR19TTkRfU09DX0NTNDI3MCkJKz0gc25kLXNvYy1jczQyNzAubwogb2JqLSQoQ09ORklHX1NORF9TT0NfU1NNMjYwMikJKz0gc25kLXNvYy1zc20yNjAyLm8KK29iai0kKENPTkZJR19TTkRfU09DX1RMVjMyMEFJQzIzKQkrPSBzbmQtc29jLXRsdjMyMGFpYzIzLm8KIG9iai0kKENPTkZJR19TTkRfU09DX1RMVjMyMEFJQzI2KQkrPSBzbmQtc29jLXRsdjMyMGFpYzI2Lm8KIG9iai0kKENPTkZJR19TTkRfU09DX1RMVjMyMEFJQzNYKQkrPSBzbmQtc29jLXRsdjMyMGFpYzN4Lm8KIG9iai0kKENPTkZJR19TTkRfU09DX1VEQTEzODApCSs9IHNuZC1zb2MtdWRhMTM4MC5vCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL2FjOTcuYyBiL3NvdW5kL3NvYy9jb2RlY3MvYWM5Ny5jCmluZGV4IDYxZmQ5NmMuLmJkMWViZGMgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3MvYWM5Ny5jCisrKyBiL3NvdW5kL3NvYy9jb2RlY3MvYWM5Ny5jCkBAIC0yLDggKzIsNyBAQAogICogYWM5Ny5jICAtLSAgQUxTQSBTb2MgQUM5NyBjb2RlYyBzdXBwb3J0CiAgKgogICogQ29weXJpZ2h0IDIwMDUgV29sZnNvbiBNaWNyb2VsZWN0cm9uaWNzIFBMQy4KLSAqIEF1dGhvcjogTGlhbSBHaXJkd29vZAotICogICAgICAgICBsaWFtLmdpcmR3b29kQHdvbGZzb25taWNyby5jb20gb3IgbGludXhAd29sZnNvbm1pY3JvLmNvbQorICogQXV0aG9yOiBMaWFtIEdpcmR3b29kIDxscmdAc2xpbWxvZ2ljLmNvLnVrPgogICoKICAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKICAqICB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3MvYWQxOTgwLmMgYi9zb3VuZC9zb2MvY29kZWNzL2FkMTk4MC5jCmluZGV4IDRlMDljMWYuLjEzOTdiOGUgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3MvYWQxOTgwLmMKKysrIGIvc291bmQvc29jL2NvZGVjcy9hZDE5ODAuYwpAQCAtMTMsNyArMTMsNiBAQAogCiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KICNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL2FkNzMzMTEuYyBiL3NvdW5kL3NvYy9jb2RlY3MvYWQ3MzMxMS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM3YWY4NjAKLS0tIC9kZXYvbnVsbAorKysgYi9zb3VuZC9zb2MvY29kZWNzL2FkNzMzMTEuYwpAQCAtMCwwICsxLDEwNyBAQAorLyoKKyAqIGFkNzMzMTEuYyAgLS0gIEFMU0EgU29jIEFENzMzMTEgY29kZWMgc3VwcG9ydAorICoKKyAqIENvcHlyaWdodDoJQW5hbG9nIERldmljZSBJbmMuCisgKiBBdXRob3I6CUNsaWZmIENhaSA8Y2xpZmYuY2FpQGFuYWxvZy5jb20+CisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAorICogIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgorICogIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFJldmlzaW9uIGhpc3RvcnkKKyAqICAgIDI1dGggU2VwIDIwMDggICBJbml0aWFsIHZlcnNpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8c291bmQvY29yZS5oPgorI2luY2x1ZGUgPHNvdW5kL3BjbS5oPgorI2luY2x1ZGUgPHNvdW5kL2FjOTdfY29kZWMuaD4KKyNpbmNsdWRlIDxzb3VuZC9pbml0dmFsLmg+CisjaW5jbHVkZSA8c291bmQvc29jLmg+CisKKyNpbmNsdWRlICJhZDczMzExLmgiCisKK3N0cnVjdCBzbmRfc29jX2RhaSBhZDczMzExX2RhaSA9IHsKKwkubmFtZSA9ICJBRDczMzExIiwKKwkucGxheWJhY2sgPSB7CisJCS5zdHJlYW1fbmFtZSA9ICJQbGF5YmFjayIsCisJCS5jaGFubmVsc19taW4gPSAxLAorCQkuY2hhbm5lbHNfbWF4ID0gMSwKKwkJLnJhdGVzID0gU05EUlZfUENNX1JBVEVfODAwMCwKKwkJLmZvcm1hdHMgPSBTTkRSVl9QQ01fRk1UQklUX1MxNl9MRSwgfSwKKwkuY2FwdHVyZSA9IHsKKwkJLnN0cmVhbV9uYW1lID0gIkNhcHR1cmUiLAorCQkuY2hhbm5lbHNfbWluID0gMSwKKwkJLmNoYW5uZWxzX21heCA9IDEsCisJCS5yYXRlcyA9IFNORFJWX1BDTV9SQVRFXzgwMDAsCisJCS5mb3JtYXRzID0gU05EUlZfUENNX0ZNVEJJVF9TMTZfTEUsIH0sCit9OworRVhQT1JUX1NZTUJPTF9HUEwoYWQ3MzMxMV9kYWkpOworCitzdGF0aWMgaW50IGFkNzMzMTFfc29jX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWM7CisJaW50IHJldCA9IDA7CisKKwljb2RlYyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBzbmRfc29jX2NvZGVjKSwgR0ZQX0tFUk5FTCk7CisJaWYgKGNvZGVjID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCW11dGV4X2luaXQoJmNvZGVjLT5tdXRleCk7CisJY29kZWMtPm5hbWUgPSAiQUQ3MzMxMSI7CisJY29kZWMtPm93bmVyID0gVEhJU19NT0RVTEU7CisJY29kZWMtPmRhaSA9ICZhZDczMzExX2RhaTsKKwljb2RlYy0+bnVtX2RhaSA9IDE7CisJc29jZGV2LT5jb2RlYyA9IGNvZGVjOworCUlOSVRfTElTVF9IRUFEKCZjb2RlYy0+ZGFwbV93aWRnZXRzKTsKKwlJTklUX0xJU1RfSEVBRCgmY29kZWMtPmRhcG1fcGF0aHMpOworCisJLyogcmVnaXN0ZXIgcGNtcyAqLworCXJldCA9IHNuZF9zb2NfbmV3X3BjbXMoc29jZGV2LCBTTkRSVl9ERUZBVUxUX0lEWDEsIFNORFJWX0RFRkFVTFRfU1RSMSk7CisJaWYgKHJldCA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJhZDczMzExOiBmYWlsZWQgdG8gY3JlYXRlIHBjbXNcbiIpOworCQlnb3RvIHBjbV9lcnI7CisJfQorCisJcmV0ID0gc25kX3NvY19yZWdpc3Rlcl9jYXJkKHNvY2Rldik7CisJaWYgKHJldCA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJhZDczMzExOiBmYWlsZWQgdG8gcmVnaXN0ZXIgY2FyZFxuIik7CisJCWdvdG8gcmVnaXN0ZXJfZXJyOworCX0KKworCXJldHVybiByZXQ7CisKK3JlZ2lzdGVyX2VycjoKKwlzbmRfc29jX2ZyZWVfcGNtcyhzb2NkZXYpOworcGNtX2VycjoKKwlrZnJlZShzb2NkZXYtPmNvZGVjKTsKKwlzb2NkZXYtPmNvZGVjID0gTlVMTDsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGFkNzMzMTFfc29jX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKKworCWlmIChjb2RlYyA9PSBOVUxMKQorCQlyZXR1cm4gMDsKKwlzbmRfc29jX2ZyZWVfcGNtcyhzb2NkZXYpOworCWtmcmVlKGNvZGVjKTsKKwlyZXR1cm4gMDsKK30KKworc3RydWN0IHNuZF9zb2NfY29kZWNfZGV2aWNlIHNvY19jb2RlY19kZXZfYWQ3MzMxMSA9IHsKKwkucHJvYmUgPSAJYWQ3MzMxMV9zb2NfcHJvYmUsCisJLnJlbW92ZSA9IAlhZDczMzExX3NvY19yZW1vdmUsCit9OworRVhQT1JUX1NZTUJPTF9HUEwoc29jX2NvZGVjX2Rldl9hZDczMzExKTsKKworTU9EVUxFX0RFU0NSSVBUSU9OKCJBU29DIGFkNzMzMTEgZHJpdmVyIik7CitNT0RVTEVfQVVUSE9SKCJDbGlmZiBDYWkgIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL2FkNzMzMTEuaCBiL3NvdW5kL3NvYy9jb2RlY3MvYWQ3MzMxMS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUwN2NlMGMKLS0tIC9kZXYvbnVsbAorKysgYi9zb3VuZC9zb2MvY29kZWNzL2FkNzMzMTEuaApAQCAtMCwwICsxLDkwIEBACisvKgorICogRmlsZTogICAgICAgICBzb3VuZC9zb2MvY29kZWMvYWQ3MzMxMS5oCisgKiBCYXNlZCBvbjoKKyAqIEF1dGhvcjogICAgICAgQ2xpZmYgQ2FpIDxjbGlmZi5jYWlAYW5hbG9nLmNvbT4KKyAqCisgKiBDcmVhdGVkOiAgICAgIFRodXIgU2VwIDI1LCAyMDA4CisgKiBEZXNjcmlwdGlvbjogIGRlZmluaXRpb25zIGZvciBBRDczMzExIHJlZ2lzdGVycworICoKKyAqCisgKiBNb2RpZmllZDoKKyAqICAgICAgICAgICAgICAgQ29weXJpZ2h0IDIwMDYgQW5hbG9nIERldmljZXMgSW5jLgorICoKKyAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgdGhlIGZpbGUgQ09QWUlORywgb3Igd3JpdGUKKyAqIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNpZm5kZWYgX19BRDczMzExX0hfXworI2RlZmluZSBfX0FENzMzMTFfSF9fCisKKyNkZWZpbmUgQURfQ09OVFJPTAkweDgwMDAKKyNkZWZpbmUgQURfREFUQQkJMHgwMDAwCisjZGVmaW5lIEFEX1JFQUQJCTB4NDAwMAorI2RlZmluZSBBRF9XUklURQkweDAwMDAKKworLyogQ29udHJvbCByZWdpc3RlciBBICovCisjZGVmaW5lIENUUkxfUkVHX0EJKDAgPDwgOCkKKworI2RlZmluZSBSRUdBX01PREVfUFJPCTB4MDAKKyNkZWZpbmUgUkVHQV9NT0RFX0RBVEEJMHgwMQorI2RlZmluZSBSRUdBX01PREVfTUlYRUQJMHgwMworI2RlZmluZSBSRUdBX0RMQgkJMHgwNAorI2RlZmluZSBSRUdBX1NMQgkJMHgwOAorI2RlZmluZSBSRUdBX0RFVkMoeCkJCSgoeCAmIDB4NykgPDwgNCkKKyNkZWZpbmUgUkVHQV9SRVNFVAkJMHg4MAorCisvKiBDb250cm9sIHJlZ2lzdGVyIEIgKi8KKyNkZWZpbmUgQ1RSTF9SRUdfQgkoMSA8PCA4KQorCisjZGVmaW5lIFJFR0JfRElSQVRFKHgpCSh4ICYgMHgzKQorI2RlZmluZSBSRUdCX1NDRElWKHgpCSgoeCAmIDB4MykgPDwgMikKKyNkZWZpbmUgUkVHQl9NQ0RJVih4KQkoKHggJiAweDcpIDw8IDQpCisjZGVmaW5lIFJFR0JfQ0VFCQkoMSA8PCA3KQorCisvKiBDb250cm9sIHJlZ2lzdGVyIEMgKi8KKyNkZWZpbmUgQ1RSTF9SRUdfQwkoMiA8PCA4KQorCisjZGVmaW5lIFJFR0NfUFVERVYJCSgxIDw8IDApCisjZGVmaW5lIFJFR0NfUFVBREMJCSgxIDw8IDMpCisjZGVmaW5lIFJFR0NfUFVEQUMJCSgxIDw8IDQpCisjZGVmaW5lIFJFR0NfUFVSRUYJCSgxIDw8IDUpCisjZGVmaW5lIFJFR0NfUkVGVVNFCQkoMSA8PCA2KQorCisvKiBDb250cm9sIHJlZ2lzdGVyIEQgKi8KKyNkZWZpbmUgQ1RSTF9SRUdfRAkoMyA8PCA4KQorCisjZGVmaW5lIFJFR0RfSUdTKHgpCQkoeCAmIDB4NykKKyNkZWZpbmUgUkVHRF9STU9ECQkoMSA8PCAzKQorI2RlZmluZSBSRUdEX09HUyh4KQkJKCh4ICYgMHg3KSA8PCA0KQorI2RlZmluZSBSRUdEX01VVEUJCSh4IDw8IDcpCisKKy8qIENvbnRyb2wgcmVnaXN0ZXIgRSAqLworI2RlZmluZSBDVFJMX1JFR19FCSg0IDw8IDgpCisKKyNkZWZpbmUgUkVHRV9EQSh4KQkJKHggJiAweDFmKQorI2RlZmluZSBSRUdFX0lCWVAJCSgxIDw8IDUpCisKKy8qIENvbnRyb2wgcmVnaXN0ZXIgRiAqLworI2RlZmluZSBDVFJMX1JFR19GCSg1IDw8IDgpCisKKyNkZWZpbmUgUkVHRl9TRUVOCQkoMSA8PCA1KQorI2RlZmluZSBSRUdGX0lOVgkJKDEgPDwgNikKKyNkZWZpbmUgUkVHRl9BTEIJCSgxIDw8IDcpCisKK2V4dGVybiBzdHJ1Y3Qgc25kX3NvY19kYWkgYWQ3MzMxMV9kYWk7CitleHRlcm4gc3RydWN0IHNuZF9zb2NfY29kZWNfZGV2aWNlIHNvY19jb2RlY19kZXZfYWQ3MzMxMTsKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy9hazQ1MzUuYyBiL3NvdW5kL3NvYy9jb2RlY3MvYWs0NTM1LmMKaW5kZXggMDg4Y2Y5OS4uMmE4OWI1OCAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy9hazQ1MzUuYworKysgYi9zb3VuZC9zb2MvY29kZWNzL2FrNDUzNS5jCkBAIC0yOCw3ICsyOCw2IEBACiAKICNpbmNsdWRlICJhazQ1MzUuaCIKIAotI2RlZmluZSBBVURJT19OQU1FICJhazQ1MzUiCiAjZGVmaW5lIEFLNDUzNV9WRVJTSU9OICIwLjMiCiAKIHN0cnVjdCBzbmRfc29jX2NvZGVjX2RldmljZSBzb2NfY29kZWNfZGV2X2FrNDUzNTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3Mvc3NtMjYwMi5jIGIvc291bmQvc29jL2NvZGVjcy9zc20yNjAyLmMKaW5kZXggOTQwY2UxYy4uNDRlZjBkYSAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy9zc20yNjAyLmMKKysrIGIvc291bmQvc29jL2NvZGVjcy9zc20yNjAyLmMKQEAgLTQyLDcgKzQyLDYgQEAKIAogI2luY2x1ZGUgInNzbTI2MDIuaCIKIAotI2RlZmluZSBBVURJT19OQU1FICJzc20yNjAyIgogI2RlZmluZSBTU00yNjAyX1ZFUlNJT04gIjAuMSIKIAogc3RydWN0IHNuZF9zb2NfY29kZWNfZGV2aWNlIHNvY19jb2RlY19kZXZfc3NtMjYwMjsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3MvdGx2MzIwYWljMjMuYyBiL3NvdW5kL3NvYy9jb2RlY3MvdGx2MzIwYWljMjMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NDMwOGRhCi0tLSAvZGV2L251bGwKKysrIGIvc291bmQvc29jL2NvZGVjcy90bHYzMjBhaWMyMy5jCkBAIC0wLDAgKzEsNzE0IEBACisvKgorICogQUxTQSBTb0MgVExWMzIwQUlDMjMgY29kZWMgZHJpdmVyCisgKgorICogQXV0aG9yOiAgICAgIEFydW4gS1MsIDxhcnVua3NAbWlzdHJhbHNvbHV0aW9ucy5jb20+CisgKiBDb3B5cmlnaHQ6ICAgKEMpIDIwMDggTWlzdHJhbCBTb2x1dGlvbnMgUHZ0IEx0ZC4sCisgKgorICogQmFzZWQgb24gc291bmQvc29jL2NvZGVjcy93bTg3MzEuYyBieSBSaWNoYXJkIFB1cmRpZQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogTm90ZXM6CisgKiAgVGhlIEFJQzIzIGlzIGEgZHJpdmVyIGZvciBhIGxvdyBwb3dlciBzdGVyZW8gYXVkaW8KKyAqICBjb2RlYyB0bHYzMjBhaWMyMworICoKKyAqICBUaGUgbWFjaGluZSBsYXllciBzaG91bGQgZGlzYWJsZSB1bnN1cHBvcnRlZCBpbnB1dHMvb3V0cHV0cyBieQorICogIHNuZF9zb2NfZGFwbV9kaXNhYmxlX3Bpbihjb2RlYywgIkxIUE9VVCIpLCBldGMuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvcG0uaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CisjaW5jbHVkZSA8c291bmQvcGNtLmg+CisjaW5jbHVkZSA8c291bmQvcGNtX3BhcmFtcy5oPgorI2luY2x1ZGUgPHNvdW5kL3NvYy5oPgorI2luY2x1ZGUgPHNvdW5kL3NvYy1kYXBtLmg+CisjaW5jbHVkZSA8c291bmQvdGx2Lmg+CisjaW5jbHVkZSA8c291bmQvaW5pdHZhbC5oPgorCisjaW5jbHVkZSAidGx2MzIwYWljMjMuaCIKKworI2RlZmluZSBBSUMyM19WRVJTSU9OICIwLjEiCisKK3N0cnVjdCB0bHYzMjBhaWMyM19zcmF0ZV9yZWdfaW5mbyB7CisJdTMyIHNhbXBsZV9yYXRlOworCXU4IGNvbnRyb2w7CQkvKiBTUjMsIFNSMiwgU1IxLCBTUjAgYW5kIEJPU1IgKi8KKwl1OCBkaXZpZGVyOwkJLyogaWYgMCBDTEtJTiA9IE1DTEssIGlmIDEgQ0xLSU4gPSBNQ0xLLzIgKi8KK307CisKKy8qCisgKiBBSUMyMyByZWdpc3RlciBjYWNoZQorICovCitzdGF0aWMgY29uc3QgdTE2IHRsdjMyMGFpYzIzX3JlZ1tdID0geworCTB4MDA5NywgMHgwMDk3LCAweDAwRjksIDB4MDBGOSwJLyogMCAqLworCTB4MDAxQSwgMHgwMDA0LCAweDAwMDcsIDB4MDAwMSwJLyogNCAqLworCTB4MDAyMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwJLyogOCAqLworCTB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwJLyogMTIgKi8KK307CisKKy8qCisgKiByZWFkIHRsdjMyMGFpYzIzIHJlZ2lzdGVyIGNhY2hlCisgKi8KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHRsdjMyMGFpYzIzX3JlYWRfcmVnX2NhY2hlKHN0cnVjdCBzbmRfc29jX2NvZGVjCisJCQkJCQkgICAgICAqY29kZWMsIHVuc2lnbmVkIGludCByZWcpCit7CisJdTE2ICpjYWNoZSA9IGNvZGVjLT5yZWdfY2FjaGU7CisJaWYgKHJlZyA+PSBBUlJBWV9TSVpFKHRsdjMyMGFpYzIzX3JlZykpCisJCXJldHVybiAtMTsKKwlyZXR1cm4gY2FjaGVbcmVnXTsKK30KKworLyoKKyAqIHdyaXRlIHRsdjMyMGFpYzIzIHJlZ2lzdGVyIGNhY2hlCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCB0bHYzMjBhaWMyM193cml0ZV9yZWdfY2FjaGUoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLAorCQkJCQkgICAgICAgdTggcmVnLCB1MTYgdmFsdWUpCit7CisJdTE2ICpjYWNoZSA9IGNvZGVjLT5yZWdfY2FjaGU7CisJaWYgKHJlZyA+PSBBUlJBWV9TSVpFKHRsdjMyMGFpYzIzX3JlZykpCisJCXJldHVybjsKKwljYWNoZVtyZWddID0gdmFsdWU7Cit9CisKKy8qCisgKiB3cml0ZSB0byB0aGUgdGx2MzIwYWljMjMgcmVnaXN0ZXIgc3BhY2UKKyAqLworc3RhdGljIGludCB0bHYzMjBhaWMyM193cml0ZShzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsIHVuc2lnbmVkIGludCByZWcsCisJCQkgICAgIHVuc2lnbmVkIGludCB2YWx1ZSkKK3sKKworCXU4IGRhdGFbMl07CisKKwkvKiBUTFYzMjBBSUMyMyBoYXMgNyBiaXQgYWRkcmVzcyBhbmQgOSBiaXRzIG9mIGRhdGEKKwkgKiBzbyB3ZSBuZWVkIHRvIHN3aXRjaCBvbmUgZGF0YSBiaXQgaW50byByZWcgYW5kIHJlc3QKKwkgKiBvZiBkYXRhIGludG8gdmFsCisJICovCisKKwlpZiAoKHJlZyA8IDAgfHwgcmVnID4gOSkgJiYgKHJlZyAhPSAxNSkpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXMgSW52YWxpZCByZWdpc3RlciBSJWRcbiIsIF9fZnVuY19fLCByZWcpOworCQlyZXR1cm4gLTE7CisJfQorCisJZGF0YVswXSA9IChyZWcgPDwgMSkgfCAodmFsdWUgPj4gOCAmIDB4MDEpOworCWRhdGFbMV0gPSB2YWx1ZSAmIDB4ZmY7CisKKwl0bHYzMjBhaWMyM193cml0ZV9yZWdfY2FjaGUoY29kZWMsIHJlZywgdmFsdWUpOworCisJaWYgKGNvZGVjLT5od193cml0ZShjb2RlYy0+Y29udHJvbF9kYXRhLCBkYXRhLCAyKSA9PSAyKQorCQlyZXR1cm4gMDsKKworCXByaW50ayhLRVJOX0VSUiAiJXMgY2Fubm90IHdyaXRlICUwM3ggdG8gcmVnaXN0ZXIgUiVkXG4iLCBfX2Z1bmNfXywKKwkgICAgICAgdmFsdWUsIHJlZyk7CisKKwlyZXR1cm4gLUVJTzsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKnJlY19zcmNfdGV4dFtdID0geyAiTGluZSIsICJNaWMiIH07CitzdGF0aWMgY29uc3QgY2hhciAqZGVlbXBoX3RleHRbXSA9IHsiTm9uZSIsICIzMktoeiIsICI0NC4xS2h6IiwgIjQ4S2h6In07CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc29jX2VudW0gcmVjX3NyY19lbnVtID0KKwlTT0NfRU5VTV9TSU5HTEUoVExWMzIwQUlDMjNfQU5MRywgMiwgMiwgcmVjX3NyY190ZXh0KTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHRsdjMyMGFpYzIzX3JlY19zcmNfbXV4X2NvbnRyb2xzID0KK1NPQ19EQVBNX0VOVU0oIklucHV0IFNlbGVjdCIsIHJlY19zcmNfZW51bSk7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc29jX2VudW0gdGx2MzIwYWljMjNfcmVjX3NyYyA9CisJU09DX0VOVU1fU0lOR0xFKFRMVjMyMEFJQzIzX0FOTEcsIDIsIDIsIHJlY19zcmNfdGV4dCk7CitzdGF0aWMgY29uc3Qgc3RydWN0IHNvY19lbnVtIHRsdjMyMGFpYzIzX2RlZW1waCA9CisJU09DX0VOVU1fU0lOR0xFKFRMVjMyMEFJQzIzX0RJR1QsIDEsIDQsIGRlZW1waF90ZXh0KTsKKworc3RhdGljIGNvbnN0IERFQ0xBUkVfVExWX0RCX1NDQUxFKG91dF9nYWluX3RsdiwgLTEyMTAwLCAxMDAsIDApOworc3RhdGljIGNvbnN0IERFQ0xBUkVfVExWX0RCX1NDQUxFKGlucHV0X2dhaW5fdGx2LCAtMTcyNSwgNzUsIDApOworc3RhdGljIGNvbnN0IERFQ0xBUkVfVExWX0RCX1NDQUxFKHNpZGV0b25lX3ZvbF90bHYsIC0xODAwLCAzMDAsIDApOworCitzdGF0aWMgaW50IHNuZF9zb2NfdGx2MzIwYWljMjNfcHV0X3ZvbHN3KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAorCXN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQoreworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKKwl1MTYgdmFsLCByZWc7CisKKwl2YWwgPSAodWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF0gJiAweDA3KTsKKworCS8qIGxpbmVhciBjb252ZXJzaW9uIHRvIHVzZXJzcGFjZQorCSogMDAwCT0JLTZkYgorCSogMDAxCT0JLTlkYgorCSogMDEwCT0JLTEyZGIKKwkqIDAxMQk9CS0xOGRiIChNaW4pCisJKiAxMDAJPQkwZGIgKE1heCkKKwkqLworCXZhbCA9ICh2YWwgPj0gNCkgPyA0ICA6ICgzIC0gdmFsKTsKKworCXJlZyA9IHRsdjMyMGFpYzIzX3JlYWRfcmVnX2NhY2hlKGNvZGVjLCBUTFYzMjBBSUMyM19BTkxHKSAmICh+MHgxQzApOworCXRsdjMyMGFpYzIzX3dyaXRlKGNvZGVjLCBUTFYzMjBBSUMyM19BTkxHLCByZWcgfCAodmFsIDw8IDYpKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNuZF9zb2NfdGx2MzIwYWljMjNfZ2V0X3ZvbHN3KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAorCXN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQoreworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKKwl1MTYgdmFsOworCisJdmFsID0gdGx2MzIwYWljMjNfcmVhZF9yZWdfY2FjaGUoY29kZWMsIFRMVjMyMEFJQzIzX0FOTEcpICYgKDB4MUMwKTsKKwl2YWwgPSB2YWwgPj4gNjsKKwl2YWwgPSAodmFsID49IDQpID8gNCAgOiAoMyAtICB2YWwpOworCXVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdID0gdmFsOworCXJldHVybiAwOworCit9CisKKyNkZWZpbmUgU09DX1RMVjMyMEFJQzIzX1NJTkdMRV9UTFYoeG5hbWUsIHJlZywgc2hpZnQsIG1heCwgaW52ZXJ0LCB0bHZfYXJyYXkpIFwKK3sJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsIC5uYW1lID0geG5hbWUsIFwKKwkuYWNjZXNzID0gU05EUlZfQ1RMX0VMRU1fQUNDRVNTX1RMVl9SRUFEIHxcCisJCSBTTkRSVl9DVExfRUxFTV9BQ0NFU1NfUkVBRFdSSVRFLFwKKwkudGx2LnAgPSAodGx2X2FycmF5KSwgXAorCS5pbmZvID0gc25kX3NvY19pbmZvX3ZvbHN3LCAuZ2V0ID0gc25kX3NvY190bHYzMjBhaWMyM19nZXRfdm9sc3csXAorCS5wdXQgPSBzbmRfc29jX3RsdjMyMGFpYzIzX3B1dF92b2xzdywgXAorCS5wcml2YXRlX3ZhbHVlID0gIFNPQ19TSU5HTEVfVkFMVUUocmVnLCBzaGlmdCwgbWF4LCBpbnZlcnQpIH0KKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHRsdjMyMGFpYzIzX3NuZF9jb250cm9sc1tdID0geworCVNPQ19ET1VCTEVfUl9UTFYoIkRpZ2l0YWwgUGxheWJhY2sgVm9sdW1lIiwgVExWMzIwQUlDMjNfTENITlZPTCwKKwkJCSBUTFYzMjBBSUMyM19SQ0hOVk9MLCAwLCAxMjcsIDAsIG91dF9nYWluX3RsdiksCisJU09DX1NJTkdMRSgiRGlnaXRhbCBQbGF5YmFjayBTd2l0Y2giLCBUTFYzMjBBSUMyM19ESUdULCAzLCAxLCAxKSwKKwlTT0NfRE9VQkxFX1IoIkxpbmUgSW5wdXQgU3dpdGNoIiwgVExWMzIwQUlDMjNfTElOVk9MLAorCQkgICAgIFRMVjMyMEFJQzIzX1JJTlZPTCwgNywgMSwgMCksCisJU09DX0RPVUJMRV9SX1RMVigiTGluZSBJbnB1dCBWb2x1bWUiLCBUTFYzMjBBSUMyM19MSU5WT0wsCisJCQkgVExWMzIwQUlDMjNfUklOVk9MLCAwLCAzMSwgMCwgaW5wdXRfZ2Fpbl90bHYpLAorCVNPQ19TSU5HTEUoIk1pYyBJbnB1dCBTd2l0Y2giLCBUTFYzMjBBSUMyM19BTkxHLCAxLCAxLCAxKSwKKwlTT0NfU0lOR0xFKCJNaWMgQm9vc3RlciBTd2l0Y2giLCBUTFYzMjBBSUMyM19BTkxHLCAwLCAxLCAwKSwKKwlTT0NfVExWMzIwQUlDMjNfU0lOR0xFX1RMVigiU2lkZXRvbmUgVm9sdW1lIiwgVExWMzIwQUlDMjNfQU5MRywKKwkJCQkgIDYsIDQsIDAsIHNpZGV0b25lX3ZvbF90bHYpLAorCVNPQ19FTlVNKCJQbGF5YmFjayBEZS1lbXBoYXNpcyIsIHRsdjMyMGFpYzIzX2RlZW1waCksCit9OworCisvKiBhZGQgbm9uIGRhcG0gY29udHJvbHMgKi8KK3N0YXRpYyBpbnQgdGx2MzIwYWljMjNfYWRkX2NvbnRyb2xzKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYykKK3sKKworCWludCBlcnIsIGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh0bHYzMjBhaWMyM19zbmRfY29udHJvbHMpOyBpKyspIHsKKwkJZXJyID0gc25kX2N0bF9hZGQoY29kZWMtPmNhcmQsCisJCQkJICBzbmRfc29jX2NuZXcoJnRsdjMyMGFpYzIzX3NuZF9jb250cm9sc1tpXSwKKwkJCQkJICAgICAgIGNvZGVjLCBOVUxMKSk7CisJCWlmIChlcnIgPCAwKQorCQkJcmV0dXJuIGVycjsKKwl9CisKKwlyZXR1cm4gMDsKKworfQorCisvKiBQR0EgTWl4ZXIgY29udHJvbHMgZm9yIExpbmUgYW5kIE1pYyBzd2l0Y2ggKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyB0bHYzMjBhaWMyM19vdXRwdXRfbWl4ZXJfY29udHJvbHNbXSA9IHsKKwlTT0NfREFQTV9TSU5HTEUoIkxpbmUgQnlwYXNzIFN3aXRjaCIsIFRMVjMyMEFJQzIzX0FOTEcsIDMsIDEsIDApLAorCVNPQ19EQVBNX1NJTkdMRSgiTWljIFNpZGV0b25lIFN3aXRjaCIsIFRMVjMyMEFJQzIzX0FOTEcsIDUsIDEsIDApLAorCVNPQ19EQVBNX1NJTkdMRSgiUGxheWJhY2sgU3dpdGNoIiwgVExWMzIwQUlDMjNfQU5MRywgNCwgMSwgMCksCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgdGx2MzIwYWljMjNfZGFwbV93aWRnZXRzW10gPSB7CisJU05EX1NPQ19EQVBNX0RBQygiREFDIiwgIlBsYXliYWNrIiwgVExWMzIwQUlDMjNfUFdSLCAzLCAxKSwKKwlTTkRfU09DX0RBUE1fQURDKCJBREMiLCAiQ2FwdHVyZSIsIFRMVjMyMEFJQzIzX1BXUiwgMiwgMSksCisJU05EX1NPQ19EQVBNX01VWCgiQ2FwdHVyZSBTb3VyY2UiLCBTTkRfU09DX05PUE0sIDAsIDAsCisJCQkgJnRsdjMyMGFpYzIzX3JlY19zcmNfbXV4X2NvbnRyb2xzKSwKKwlTTkRfU09DX0RBUE1fTUlYRVIoIk91dHB1dCBNaXhlciIsIFRMVjMyMEFJQzIzX1BXUiwgNCwgMSwKKwkJCSAgICZ0bHYzMjBhaWMyM19vdXRwdXRfbWl4ZXJfY29udHJvbHNbMF0sCisJCQkgICBBUlJBWV9TSVpFKHRsdjMyMGFpYzIzX291dHB1dF9taXhlcl9jb250cm9scykpLAorCVNORF9TT0NfREFQTV9QR0EoIkxpbmUgSW5wdXQiLCBUTFYzMjBBSUMyM19QV1IsIDAsIDEsIE5VTEwsIDApLAorCVNORF9TT0NfREFQTV9QR0EoIk1pYyBJbnB1dCIsIFRMVjMyMEFJQzIzX1BXUiwgMSwgMSwgTlVMTCwgMCksCisKKwlTTkRfU09DX0RBUE1fT1VUUFVUKCJMSFBPVVQiKSwKKwlTTkRfU09DX0RBUE1fT1VUUFVUKCJSSFBPVVQiKSwKKwlTTkRfU09DX0RBUE1fT1VUUFVUKCJMT1VUIiksCisJU05EX1NPQ19EQVBNX09VVFBVVCgiUk9VVCIpLAorCisJU05EX1NPQ19EQVBNX0lOUFVUKCJMTElORUlOIiksCisJU05EX1NPQ19EQVBNX0lOUFVUKCJSTElORUlOIiksCisKKwlTTkRfU09DX0RBUE1fSU5QVVQoIk1JQ0lOIiksCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9zb2NfZGFwbV9yb3V0ZSBpbnRlcmNvbltdID0geworCS8qIE91dHB1dCBNaXhlciAqLworCXsiT3V0cHV0IE1peGVyIiwgIkxpbmUgQnlwYXNzIFN3aXRjaCIsICJMaW5lIElucHV0In0sCisJeyJPdXRwdXQgTWl4ZXIiLCAiUGxheWJhY2sgU3dpdGNoIiwgIkRBQyJ9LAorCXsiT3V0cHV0IE1peGVyIiwgIk1pYyBTaWRldG9uZSBTd2l0Y2giLCAiTWljIElucHV0In0sCisKKwkvKiBPdXRwdXRzICovCisJeyJSSFBPVVQiLCBOVUxMLCAiT3V0cHV0IE1peGVyIn0sCisJeyJMSFBPVVQiLCBOVUxMLCAiT3V0cHV0IE1peGVyIn0sCisJeyJMT1VUIiwgTlVMTCwgIk91dHB1dCBNaXhlciJ9LAorCXsiUk9VVCIsIE5VTEwsICJPdXRwdXQgTWl4ZXIifSwKKworCS8qIElucHV0cyAqLworCXsiTGluZSBJbnB1dCIsICJOVUxMIiwgIkxMSU5FSU4ifSwKKwl7IkxpbmUgSW5wdXQiLCAiTlVMTCIsICJSTElORUlOIn0sCisKKwl7Ik1pYyBJbnB1dCIsICJOVUxMIiwgIk1JQ0lOIn0sCisKKwkvKiBpbnB1dCBtdXggKi8KKwl7IkNhcHR1cmUgU291cmNlIiwgIkxpbmUiLCAiTGluZSBJbnB1dCJ9LAorCXsiQ2FwdHVyZSBTb3VyY2UiLCAiTWljIiwgIk1pYyBJbnB1dCJ9LAorCXsiQURDIiwgTlVMTCwgIkNhcHR1cmUgU291cmNlIn0sCisKK307CisKKy8qIHRsdjMyMGFpYzIzIHJlbGF0ZWQgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdGx2MzIwYWljMjNfc3JhdGVfcmVnX2luZm8gc3JhdGVfcmVnX2luZm9bXSA9IHsKKwl7NDAwMCwgMHgwNiwgMX0sCS8qICA0MDAwICovCisJezgwMDAsIDB4MDYsIDB9LAkvKiAgODAwMCAqLworCXsxNjAwMCwgMHgwQywgMX0sCS8qIDE2MDAwICovCisJezIyMDUwLCAweDExLCAxfSwJLyogMjIwNTAgKi8KKwl7MjQwMDAsIDB4MDAsIDF9LAkvKiAyNDAwMCAqLworCXszMjAwMCwgMHgwQywgMH0sCS8qIDMyMDAwICovCisJezQ0MTAwLCAweDExLCAwfSwJLyogNDQxMDAgKi8KKwl7NDgwMDAsIDB4MDAsIDB9LAkvKiA0ODAwMCAqLworCXs4ODIwMCwgMHgxRiwgMH0sCS8qIDg4MjAwICovCisJezk2MDAwLCAweDBFLCAwfSwJLyogOTYwMDAgKi8KK307CisKK3N0YXRpYyBpbnQgdGx2MzIwYWljMjNfYWRkX3dpZGdldHMoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQoreworCXNuZF9zb2NfZGFwbV9uZXdfY29udHJvbHMoY29kZWMsIHRsdjMyMGFpYzIzX2RhcG1fd2lkZ2V0cywKKwkJCQkgIEFSUkFZX1NJWkUodGx2MzIwYWljMjNfZGFwbV93aWRnZXRzKSk7CisKKwkvKiBzZXQgdXAgYXVkaW8gcGF0aCBpbnRlcmNvbm5lY3RzICovCisJc25kX3NvY19kYXBtX2FkZF9yb3V0ZXMoY29kZWMsIGludGVyY29uLCBBUlJBWV9TSVpFKGludGVyY29uKSk7CisKKwlzbmRfc29jX2RhcG1fbmV3X3dpZGdldHMoY29kZWMpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHRsdjMyMGFpYzIzX2h3X3BhcmFtcyhzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKKwkJCQkgc3RydWN0IHNuZF9wY21faHdfcGFyYW1zICpwYXJhbXMpCit7CisJc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcnRkLT5zb2NkZXY7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKKwl1MTYgaWZhY2VfcmVnLCBkYXRhOworCXU4IGNvdW50ID0gMDsKKworCWlmYWNlX3JlZyA9CisJICAgIHRsdjMyMGFpYzIzX3JlYWRfcmVnX2NhY2hlKGNvZGVjLAorCQkJCSAgICAgICBUTFYzMjBBSUMyM19ESUdUX0ZNVCkgJiB+KDB4MDMgPDwgMik7CisKKwkvKiBTZWFyY2ggZm9yIHRoZSByaWdodCBzYW1wbGUgcmF0ZSAqLworCS8qIFZlcmlmeSB3aGF0IGhhcHBlbnMgaWYgdGhlIHJhdGUgaXMgbm90IHN1cHBvcnRlZAorCSAqIG5vdyBpdCBnb2VzIHRvIDk2S2h6ICovCisJd2hpbGUgKChzcmF0ZV9yZWdfaW5mb1tjb3VudF0uc2FtcGxlX3JhdGUgIT0gcGFyYW1zX3JhdGUocGFyYW1zKSkgJiYKKwkgICAgICAgKGNvdW50IDwgQVJSQVlfU0laRShzcmF0ZV9yZWdfaW5mbykpKSB7CisJCWNvdW50Kys7CisJfQorCisJZGF0YSA9ICAoc3JhdGVfcmVnX2luZm9bY291bnRdLmRpdmlkZXIgPDwgVExWMzIwQUlDMjNfQ0xLSU5fU0hJRlQpIHwKKwkJKHNyYXRlX3JlZ19pbmZvW2NvdW50XS4gY29udHJvbCA8PCBUTFYzMjBBSUMyM19CT1NSX1NISUZUKSB8CisJCVRMVjMyMEFJQzIzX1VTQl9DTEtfT047CisKKwl0bHYzMjBhaWMyM193cml0ZShjb2RlYywgVExWMzIwQUlDMjNfU1JBVEUsIGRhdGEpOworCisJc3dpdGNoIChwYXJhbXNfZm9ybWF0KHBhcmFtcykpIHsKKwljYXNlIFNORFJWX1BDTV9GT1JNQVRfUzE2X0xFOgorCQlicmVhazsKKwljYXNlIFNORFJWX1BDTV9GT1JNQVRfUzIwXzNMRToKKwkJaWZhY2VfcmVnIHw9ICgweDAxIDw8IDIpOworCQlicmVhazsKKwljYXNlIFNORFJWX1BDTV9GT1JNQVRfUzI0X0xFOgorCQlpZmFjZV9yZWcgfD0gKDB4MDIgPDwgMik7CisJCWJyZWFrOworCWNhc2UgU05EUlZfUENNX0ZPUk1BVF9TMzJfTEU6CisJCWlmYWNlX3JlZyB8PSAoMHgwMyA8PCAyKTsKKwkJYnJlYWs7CisJfQorCXRsdjMyMGFpYzIzX3dyaXRlKGNvZGVjLCBUTFYzMjBBSUMyM19ESUdUX0ZNVCwgaWZhY2VfcmVnKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHRsdjMyMGFpYzIzX3BjbV9wcmVwYXJlKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQoreworCXN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQgPSBzdWJzdHJlYW0tPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHJ0ZC0+c29jZGV2OworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7CisKKwkvKiBzZXQgYWN0aXZlICovCisJdGx2MzIwYWljMjNfd3JpdGUoY29kZWMsIFRMVjMyMEFJQzIzX0FDVElWRSwgMHgwMDAxKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCB0bHYzMjBhaWMyM19zaHV0ZG93bihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3sKKwlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBydGQtPnNvY2RldjsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCisJLyogZGVhY3RpdmF0ZSAqLworCWlmICghY29kZWMtPmFjdGl2ZSkgeworCQl1ZGVsYXkoNTApOworCQl0bHYzMjBhaWMyM193cml0ZShjb2RlYywgVExWMzIwQUlDMjNfQUNUSVZFLCAweDApOworCX0KK30KKworc3RhdGljIGludCB0bHYzMjBhaWMyM19tdXRlKHN0cnVjdCBzbmRfc29jX2RhaSAqZGFpLCBpbnQgbXV0ZSkKK3sKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBkYWktPmNvZGVjOworCXUxNiByZWc7CisKKwlyZWcgPSB0bHYzMjBhaWMyM19yZWFkX3JlZ19jYWNoZShjb2RlYywgVExWMzIwQUlDMjNfRElHVCk7CisJaWYgKG11dGUpCisJCXJlZyB8PSBUTFYzMjBBSUMyM19EQUNNX01VVEU7CisKKwllbHNlCisJCXJlZyAmPSB+VExWMzIwQUlDMjNfREFDTV9NVVRFOworCisJdGx2MzIwYWljMjNfd3JpdGUoY29kZWMsIFRMVjMyMEFJQzIzX0RJR1QsIHJlZyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB0bHYzMjBhaWMyM19zZXRfZGFpX2ZtdChzdHJ1Y3Qgc25kX3NvY19kYWkgKmNvZGVjX2RhaSwKKwkJCQkgICB1bnNpZ25lZCBpbnQgZm10KQoreworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IGNvZGVjX2RhaS0+Y29kZWM7CisJdTE2IGlmYWNlX3JlZzsKKworCWlmYWNlX3JlZyA9CisJICAgIHRsdjMyMGFpYzIzX3JlYWRfcmVnX2NhY2hlKGNvZGVjLCBUTFYzMjBBSUMyM19ESUdUX0ZNVCkgJiAofjB4MDMpOworCisJLyogc2V0IG1hc3Rlci9zbGF2ZSBhdWRpbyBpbnRlcmZhY2UgKi8KKwlzd2l0Y2ggKGZtdCAmIFNORF9TT0NfREFJRk1UX01BU1RFUl9NQVNLKSB7CisJY2FzZSBTTkRfU09DX0RBSUZNVF9DQk1fQ0ZNOgorCQlpZmFjZV9yZWcgfD0gVExWMzIwQUlDMjNfTVNfTUFTVEVSOworCQlicmVhazsKKwljYXNlIFNORF9TT0NfREFJRk1UX0NCU19DRlM6CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCisJfQorCisJLyogaW50ZXJmYWNlIGZvcm1hdCAqLworCXN3aXRjaCAoZm10ICYgU05EX1NPQ19EQUlGTVRfRk9STUFUX01BU0spIHsKKwljYXNlIFNORF9TT0NfREFJRk1UX0kyUzoKKwkJaWZhY2VfcmVnIHw9IFRMVjMyMEFJQzIzX0ZPUl9JMlM7CisJCWJyZWFrOworCWNhc2UgU05EX1NPQ19EQUlGTVRfRFNQX0E6CisJCWlmYWNlX3JlZyB8PSBUTFYzMjBBSUMyM19GT1JfRFNQOworCQlicmVhazsKKwljYXNlIFNORF9TT0NfREFJRk1UX1JJR0hUX0o6CisJCWJyZWFrOworCWNhc2UgU05EX1NPQ19EQUlGTVRfTEVGVF9KOgorCQlpZmFjZV9yZWcgfD0gVExWMzIwQUlDMjNfRk9SX0xKVVNUOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKworCX0KKworCXRsdjMyMGFpYzIzX3dyaXRlKGNvZGVjLCBUTFYzMjBBSUMyM19ESUdUX0ZNVCwgaWZhY2VfcmVnKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHRsdjMyMGFpYzIzX3NldF9kYWlfc3lzY2xrKHN0cnVjdCBzbmRfc29jX2RhaSAqY29kZWNfZGFpLAorCQkJCSAgICAgIGludCBjbGtfaWQsIHVuc2lnbmVkIGludCBmcmVxLCBpbnQgZGlyKQoreworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IGNvZGVjX2RhaS0+Y29kZWM7CisKKwlzd2l0Y2ggKGZyZXEpIHsKKwljYXNlIDEyMDAwMDAwOgorCQlyZXR1cm4gMDsKKwl9CisJcmV0dXJuIC1FSU5WQUw7Cit9CisKK3N0YXRpYyBpbnQgdGx2MzIwYWljMjNfc2V0X2JpYXNfbGV2ZWwoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLAorCQkJCSAgICAgIGVudW0gc25kX3NvY19iaWFzX2xldmVsIGxldmVsKQoreworCXUxNiByZWcgPSB0bHYzMjBhaWMyM19yZWFkX3JlZ19jYWNoZShjb2RlYywgVExWMzIwQUlDMjNfUFdSKSAmIDB4ZmY3ZjsKKworCXN3aXRjaCAobGV2ZWwpIHsKKwljYXNlIFNORF9TT0NfQklBU19PTjoKKwkJLyogdnJlZi9taWQsIG9zYyBvbiwgZGFjIHVubXV0ZSAqLworCQl0bHYzMjBhaWMyM193cml0ZShjb2RlYywgVExWMzIwQUlDMjNfUFdSLCByZWcpOworCQlicmVhazsKKwljYXNlIFNORF9TT0NfQklBU19QUkVQQVJFOgorCQlicmVhazsKKwljYXNlIFNORF9TT0NfQklBU19TVEFOREJZOgorCQkvKiBldmVyeXRoaW5nIG9mZiBleGNlcHQgdnJlZi92bWlkLCAqLworCQl0bHYzMjBhaWMyM193cml0ZShjb2RlYywgVExWMzIwQUlDMjNfUFdSLCByZWcgfCAweDAwNDApOworCQlicmVhazsKKwljYXNlIFNORF9TT0NfQklBU19PRkY6CisJCS8qIGV2ZXJ5dGhpbmcgb2ZmLCBkYWMgbXV0ZSwgaW5hY3RpdmUgKi8KKwkJdGx2MzIwYWljMjNfd3JpdGUoY29kZWMsIFRMVjMyMEFJQzIzX0FDVElWRSwgMHgwKTsKKwkJdGx2MzIwYWljMjNfd3JpdGUoY29kZWMsIFRMVjMyMEFJQzIzX1BXUiwgMHhmZmZmKTsKKwkJYnJlYWs7CisJfQorCWNvZGVjLT5iaWFzX2xldmVsID0gbGV2ZWw7CisJcmV0dXJuIDA7Cit9CisKKyNkZWZpbmUgQUlDMjNfUkFURVMJU05EUlZfUENNX1JBVEVfODAwMF85NjAwMAorI2RlZmluZSBBSUMyM19GT1JNQVRTCShTTkRSVl9QQ01fRk1UQklUX1MxNl9MRSB8IFNORFJWX1BDTV9GTVRCSVRfUzIwXzNMRSB8IFwKKwkJCSBTTkRSVl9QQ01fRk1UQklUX1MyNF8zTEUgfCBTTkRSVl9QQ01fRk1UQklUX1MzMl9MRSkKKworc3RydWN0IHNuZF9zb2NfZGFpIHRsdjMyMGFpYzIzX2RhaSA9IHsKKwkubmFtZSA9ICJ0bHYzMjBhaWMyMyIsCisJLnBsYXliYWNrID0geworCQkgICAgIC5zdHJlYW1fbmFtZSA9ICJQbGF5YmFjayIsCisJCSAgICAgLmNoYW5uZWxzX21pbiA9IDIsCisJCSAgICAgLmNoYW5uZWxzX21heCA9IDIsCisJCSAgICAgLnJhdGVzID0gQUlDMjNfUkFURVMsCisJCSAgICAgLmZvcm1hdHMgPSBBSUMyM19GT1JNQVRTLH0sCisJLmNhcHR1cmUgPSB7CisJCSAgICAuc3RyZWFtX25hbWUgPSAiQ2FwdHVyZSIsCisJCSAgICAuY2hhbm5lbHNfbWluID0gMiwKKwkJICAgIC5jaGFubmVsc19tYXggPSAyLAorCQkgICAgLnJhdGVzID0gQUlDMjNfUkFURVMsCisJCSAgICAuZm9ybWF0cyA9IEFJQzIzX0ZPUk1BVFMsfSwKKwkub3BzID0geworCQkucHJlcGFyZSA9IHRsdjMyMGFpYzIzX3BjbV9wcmVwYXJlLAorCQkuaHdfcGFyYW1zID0gdGx2MzIwYWljMjNfaHdfcGFyYW1zLAorCQkuc2h1dGRvd24gPSB0bHYzMjBhaWMyM19zaHV0ZG93biwKKwkJfSwKKwkuZGFpX29wcyA9IHsKKwkJICAgIC5kaWdpdGFsX211dGUgPSB0bHYzMjBhaWMyM19tdXRlLAorCQkgICAgLnNldF9mbXQgPSB0bHYzMjBhaWMyM19zZXRfZGFpX2ZtdCwKKwkJICAgIC5zZXRfc3lzY2xrID0gdGx2MzIwYWljMjNfc2V0X2RhaV9zeXNjbGssCisJCSAgICB9Cit9OworRVhQT1JUX1NZTUJPTF9HUEwodGx2MzIwYWljMjNfZGFpKTsKKworc3RhdGljIGludCB0bHYzMjBhaWMyM19zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsCisJCQkgICAgICAgcG1fbWVzc2FnZV90IHN0YXRlKQoreworCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jb2RlYzsKKworCXRsdjMyMGFpYzIzX3dyaXRlKGNvZGVjLCBUTFYzMjBBSUMyM19BQ1RJVkUsIDB4MCk7CisJdGx2MzIwYWljMjNfc2V0X2JpYXNfbGV2ZWwoY29kZWMsIFNORF9TT0NfQklBU19PRkYpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdGx2MzIwYWljMjNfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCWludCBpOworCXUxNiByZWc7CisKKwkvKiBTeW5jIHJlZ19jYWNoZSB3aXRoIHRoZSBoYXJkd2FyZSAqLworCWZvciAocmVnID0gMDsgcmVnIDwgQVJSQVlfU0laRSh0bHYzMjBhaWMyM19yZWcpOyBpKyspIHsKKwkJdTE2IHZhbCA9IHRsdjMyMGFpYzIzX3JlYWRfcmVnX2NhY2hlKGNvZGVjLCByZWcpOworCQl0bHYzMjBhaWMyM193cml0ZShjb2RlYywgcmVnLCB2YWwpOworCX0KKworCXRsdjMyMGFpYzIzX3NldF9iaWFzX2xldmVsKGNvZGVjLCBTTkRfU09DX0JJQVNfU1RBTkRCWSk7CisJdGx2MzIwYWljMjNfc2V0X2JpYXNfbGV2ZWwoY29kZWMsIGNvZGVjLT5zdXNwZW5kX2JpYXNfbGV2ZWwpOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBpbml0aWFsaXNlIHRoZSBBSUMyMyBkcml2ZXIKKyAqIHJlZ2lzdGVyIHRoZSBtaXhlciBhbmQgZHNwIGludGVyZmFjZXMgd2l0aCB0aGUga2VybmVsCisgKi8KK3N0YXRpYyBpbnQgdGx2MzIwYWljMjNfaW5pdChzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldikKK3sKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCWludCByZXQgPSAwOworCXUxNiByZWc7CisKKwljb2RlYy0+bmFtZSA9ICJ0bHYzMjBhaWMyMyI7CisJY29kZWMtPm93bmVyID0gVEhJU19NT0RVTEU7CisJY29kZWMtPnJlYWQgPSB0bHYzMjBhaWMyM19yZWFkX3JlZ19jYWNoZTsKKwljb2RlYy0+d3JpdGUgPSB0bHYzMjBhaWMyM193cml0ZTsKKwljb2RlYy0+c2V0X2JpYXNfbGV2ZWwgPSB0bHYzMjBhaWMyM19zZXRfYmlhc19sZXZlbDsKKwljb2RlYy0+ZGFpID0gJnRsdjMyMGFpYzIzX2RhaTsKKwljb2RlYy0+bnVtX2RhaSA9IDE7CisJY29kZWMtPnJlZ19jYWNoZV9zaXplID0gQVJSQVlfU0laRSh0bHYzMjBhaWMyM19yZWcpOworCWNvZGVjLT5yZWdfY2FjaGUgPQorCSAgICBrbWVtZHVwKHRsdjMyMGFpYzIzX3JlZywgc2l6ZW9mKHRsdjMyMGFpYzIzX3JlZyksIEdGUF9LRVJORUwpOworCWlmIChjb2RlYy0+cmVnX2NhY2hlID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCisJLyogUmVzZXQgY29kZWMgKi8KKwl0bHYzMjBhaWMyM193cml0ZShjb2RlYywgVExWMzIwQUlDMjNfUkVTRVQsIDApOworCisJLyogcmVnaXN0ZXIgcGNtcyAqLworCXJldCA9IHNuZF9zb2NfbmV3X3BjbXMoc29jZGV2LCBTTkRSVl9ERUZBVUxUX0lEWDEsIFNORFJWX0RFRkFVTFRfU1RSMSk7CisJaWYgKHJldCA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJ0bHYzMjBhaWMyMzogZmFpbGVkIHRvIGNyZWF0ZSBwY21zXG4iKTsKKwkJZ290byBwY21fZXJyOworCX0KKworCS8qIHBvd2VyIG9uIGRldmljZSAqLworCXRsdjMyMGFpYzIzX3NldF9iaWFzX2xldmVsKGNvZGVjLCBTTkRfU09DX0JJQVNfU1RBTkRCWSk7CisKKwl0bHYzMjBhaWMyM193cml0ZShjb2RlYywgVExWMzIwQUlDMjNfRElHVCwgVExWMzIwQUlDMjNfREVFTVBfNDRLKTsKKworCS8qIFVubXV0ZSBpbnB1dCAqLworCXJlZyA9IHRsdjMyMGFpYzIzX3JlYWRfcmVnX2NhY2hlKGNvZGVjLCBUTFYzMjBBSUMyM19MSU5WT0wpOworCXRsdjMyMGFpYzIzX3dyaXRlKGNvZGVjLCBUTFYzMjBBSUMyM19MSU5WT0wsCisJCQkgIChyZWcgJiAoflRMVjMyMEFJQzIzX0xJTV9NVVRFRCkpIHwKKwkJCSAgKFRMVjMyMEFJQzIzX0xSU19FTkFCTEVEKSk7CisKKwlyZWcgPSB0bHYzMjBhaWMyM19yZWFkX3JlZ19jYWNoZShjb2RlYywgVExWMzIwQUlDMjNfUklOVk9MKTsKKwl0bHYzMjBhaWMyM193cml0ZShjb2RlYywgVExWMzIwQUlDMjNfUklOVk9MLAorCQkJICAocmVnICYgKH5UTFYzMjBBSUMyM19MSU1fTVVURUQpKSB8CisJCQkgIFRMVjMyMEFJQzIzX0xSU19FTkFCTEVEKTsKKworCXJlZyA9IHRsdjMyMGFpYzIzX3JlYWRfcmVnX2NhY2hlKGNvZGVjLCBUTFYzMjBBSUMyM19BTkxHKTsKKwl0bHYzMjBhaWMyM193cml0ZShjb2RlYywgVExWMzIwQUlDMjNfQU5MRywKKwkJCSAocmVnKSAmICh+VExWMzIwQUlDMjNfQllQQVNTX09OKSAmCisJCQkgKH5UTFYzMjBBSUMyM19NSUNNX01VVEVEKSk7CisKKwkvKiBEZWZhdWx0IG91dHB1dCB2b2x1bWUgKi8KKwl0bHYzMjBhaWMyM193cml0ZShjb2RlYywgVExWMzIwQUlDMjNfTENITlZPTCwKKwkJCSAgVExWMzIwQUlDMjNfREVGQVVMVF9PVVRfVk9MICYKKwkJCSAgVExWMzIwQUlDMjNfT1VUX1ZPTF9NQVNLKTsKKwl0bHYzMjBhaWMyM193cml0ZShjb2RlYywgVExWMzIwQUlDMjNfUkNITlZPTCwKKwkJCSAgVExWMzIwQUlDMjNfREVGQVVMVF9PVVRfVk9MICYKKwkJCSAgVExWMzIwQUlDMjNfT1VUX1ZPTF9NQVNLKTsKKworCXRsdjMyMGFpYzIzX3dyaXRlKGNvZGVjLCBUTFYzMjBBSUMyM19BQ1RJVkUsIDB4MSk7CisKKwl0bHYzMjBhaWMyM19hZGRfY29udHJvbHMoY29kZWMpOworCXRsdjMyMGFpYzIzX2FkZF93aWRnZXRzKGNvZGVjKTsKKwlyZXQgPSBzbmRfc29jX3JlZ2lzdGVyX2NhcmQoc29jZGV2KTsKKwlpZiAocmV0IDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIgInRsdjMyMGFpYzIzOiBmYWlsZWQgdG8gcmVnaXN0ZXIgY2FyZFxuIik7CisJCWdvdG8gY2FyZF9lcnI7CisJfQorCisJcmV0dXJuIHJldDsKKworY2FyZF9lcnI6CisJc25kX3NvY19mcmVlX3BjbXMoc29jZGV2KTsKKwlzbmRfc29jX2RhcG1fZnJlZShzb2NkZXYpOworcGNtX2VycjoKKwlrZnJlZShjb2RlYy0+cmVnX2NhY2hlKTsKKwlyZXR1cm4gcmV0OworfQorc3RhdGljIHN0cnVjdCBzbmRfc29jX2RldmljZSAqdGx2MzIwYWljMjNfc29jZGV2OworCisjaWYgZGVmaW5lZChDT05GSUdfSTJDKSB8fCBkZWZpbmVkKENPTkZJR19JMkNfTU9EVUxFKQorLyoKKyAqIElmIHRoZSBpMmMgbGF5ZXIgd2VyZW4ndCBzbyBicm9rZW4sIHdlIGNvdWxkIHBhc3MgdGhpcyBraW5kIG9mIGRhdGEKKyAqIGFyb3VuZAorICovCitzdGF0aWMgaW50IHRsdjMyMGFpYzIzX2NvZGVjX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICppMmMsCisJCQkJICAgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmkyY19pZCkKK3sKKwlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHRsdjMyMGFpYzIzX3NvY2RldjsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCWludCByZXQ7CisKKwlpZiAoIWkyY19jaGVja19mdW5jdGlvbmFsaXR5KGkyYy0+YWRhcHRlciwgSTJDX0ZVTkNfU01CVVNfQllURV9EQVRBKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpMmNfc2V0X2NsaWVudGRhdGEoaTJjLCBjb2RlYyk7CisJY29kZWMtPmNvbnRyb2xfZGF0YSA9IGkyYzsKKworCXJldCA9IHRsdjMyMGFpYzIzX2luaXQoc29jZGV2KTsKKwlpZiAocmV0IDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIgInRsdjMyMGFpYzIzOiBmYWlsZWQgdG8gaW5pdGlhbGlzZSBBSUMyM1xuIik7CisJCWdvdG8gZXJyOworCX0KKwlyZXR1cm4gcmV0OworCitlcnI6CisJa2ZyZWUoY29kZWMpOworCWtmcmVlKGkyYyk7CisJcmV0dXJuIHJldDsKK30KK3N0YXRpYyBpbnQgX19leGl0IHRsdjMyMGFpYzIzX2kyY19yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmkyYykKK3sKKwlwdXRfZGV2aWNlKCZpMmMtPmRldik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCB0bHYzMjBhaWMyM19pZFtdID0geworCXsidGx2MzIwYWljMjMiLCAwfSwKKwl7fQorfTsKKworTU9EVUxFX0RFVklDRV9UQUJMRShpMmMsIHRsdjMyMGFpYzIzX2lkKTsKKworc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIHRsdjMyMGFpYzIzX2kyY19kcml2ZXIgPSB7CisJLmRyaXZlciA9IHsKKwkJICAgLm5hbWUgPSAidGx2MzIwYWljMjMiLAorCQkgICB9LAorCS5wcm9iZSA9IHRsdjMyMGFpYzIzX2NvZGVjX3Byb2JlLAorCS5yZW1vdmUgPSBfX2V4aXRfcCh0bHYzMjBhaWMyM19pMmNfcmVtb3ZlKSwKKwkuaWRfdGFibGUgPSB0bHYzMjBhaWMyM19pZCwKK307CisKKyNlbmRpZgorCitzdGF0aWMgaW50IHRsdjMyMGFpYzIzX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWM7CisJaW50IHJldCA9IDA7CisKKwlwcmludGsoS0VSTl9JTkZPICJBSUMyMyBBdWRpbyBDb2RlYyAlc1xuIiwgQUlDMjNfVkVSU0lPTik7CisKKwljb2RlYyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBzbmRfc29jX2NvZGVjKSwgR0ZQX0tFUk5FTCk7CisJaWYgKGNvZGVjID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCisJc29jZGV2LT5jb2RlYyA9IGNvZGVjOworCW11dGV4X2luaXQoJmNvZGVjLT5tdXRleCk7CisJSU5JVF9MSVNUX0hFQUQoJmNvZGVjLT5kYXBtX3dpZGdldHMpOworCUlOSVRfTElTVF9IRUFEKCZjb2RlYy0+ZGFwbV9wYXRocyk7CisKKwl0bHYzMjBhaWMyM19zb2NkZXYgPSBzb2NkZXY7CisjaWYgZGVmaW5lZChDT05GSUdfSTJDKSB8fCBkZWZpbmVkKENPTkZJR19JMkNfTU9EVUxFKQorCWNvZGVjLT5od193cml0ZSA9IChod193cml0ZV90KSBpMmNfbWFzdGVyX3NlbmQ7CisJY29kZWMtPmh3X3JlYWQgPSBOVUxMOworCXJldCA9IGkyY19hZGRfZHJpdmVyKCZ0bHYzMjBhaWMyM19pMmNfZHJpdmVyKTsKKwlpZiAocmV0ICE9IDApCisJCXByaW50ayhLRVJOX0VSUiAiY2FuJ3QgYWRkIGkyYyBkcml2ZXIiKTsKKyNlbmRpZgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgdGx2MzIwYWljMjNfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCisJaWYgKGNvZGVjLT5jb250cm9sX2RhdGEpCisJCXRsdjMyMGFpYzIzX3NldF9iaWFzX2xldmVsKGNvZGVjLCBTTkRfU09DX0JJQVNfT0ZGKTsKKworCXNuZF9zb2NfZnJlZV9wY21zKHNvY2Rldik7CisJc25kX3NvY19kYXBtX2ZyZWUoc29jZGV2KTsKKyNpZiBkZWZpbmVkKENPTkZJR19JMkMpIHx8IGRlZmluZWQoQ09ORklHX0kyQ19NT0RVTEUpCisJaTJjX2RlbF9kcml2ZXIoJnRsdjMyMGFpYzIzX2kyY19kcml2ZXIpOworI2VuZGlmCisJa2ZyZWUoY29kZWMtPnJlZ19jYWNoZSk7CisJa2ZyZWUoY29kZWMpOworCisJcmV0dXJuIDA7Cit9CitzdHJ1Y3Qgc25kX3NvY19jb2RlY19kZXZpY2Ugc29jX2NvZGVjX2Rldl90bHYzMjBhaWMyMyA9IHsKKwkucHJvYmUgPSB0bHYzMjBhaWMyM19wcm9iZSwKKwkucmVtb3ZlID0gdGx2MzIwYWljMjNfcmVtb3ZlLAorCS5zdXNwZW5kID0gdGx2MzIwYWljMjNfc3VzcGVuZCwKKwkucmVzdW1lID0gdGx2MzIwYWljMjNfcmVzdW1lLAorfTsKK0VYUE9SVF9TWU1CT0xfR1BMKHNvY19jb2RlY19kZXZfdGx2MzIwYWljMjMpOworCitNT0RVTEVfREVTQ1JJUFRJT04oIkFTb0MgVExWMzIwQUlDMjMgY29kZWMgZHJpdmVyIik7CitNT0RVTEVfQVVUSE9SKCJBcnVuIEtTIDxhcnVua3NAbWlzdHJhbHNvbHV0aW9ucy5jb20+Iik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL3RsdjMyMGFpYzIzLmggYi9zb3VuZC9zb2MvY29kZWNzL3RsdjMyMGFpYzIzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzlkMWZhZgotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL3NvYy9jb2RlY3MvdGx2MzIwYWljMjMuaApAQCAtMCwwICsxLDEyMiBAQAorLyoKKyAqIEFMU0EgU29DIFRMVjMyMEFJQzIzIGNvZGVjIGRyaXZlcgorICoKKyAqIEF1dGhvcjogICAgICBBcnVuIEtTLCA8YXJ1bmtzQG1pc3RyYWxzb2x1dGlvbnMuY29tPgorICogQ29weXJpZ2h0OiAgIChDKSAyMDA4IE1pc3RyYWwgU29sdXRpb25zIFB2dCBMdGQKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpZm5kZWYgX1RMVjMyMEFJQzIzX0gKKyNkZWZpbmUgX1RMVjMyMEFJQzIzX0gKKworLyogQ29kZWMgVExWMzIwQUlDMjMgKi8KKyNkZWZpbmUgVExWMzIwQUlDMjNfTElOVk9MCQkweDAwCisjZGVmaW5lIFRMVjMyMEFJQzIzX1JJTlZPTAkJMHgwMQorI2RlZmluZSBUTFYzMjBBSUMyM19MQ0hOVk9MCQkweDAyCisjZGVmaW5lIFRMVjMyMEFJQzIzX1JDSE5WT0wJCTB4MDMKKyNkZWZpbmUgVExWMzIwQUlDMjNfQU5MRwkJMHgwNAorI2RlZmluZSBUTFYzMjBBSUMyM19ESUdUCQkweDA1CisjZGVmaW5lIFRMVjMyMEFJQzIzX1BXUgkJCTB4MDYKKyNkZWZpbmUgVExWMzIwQUlDMjNfRElHVF9GTVQJCTB4MDcKKyNkZWZpbmUgVExWMzIwQUlDMjNfU1JBVEUJCTB4MDgKKyNkZWZpbmUgVExWMzIwQUlDMjNfQUNUSVZFCQkweDA5CisjZGVmaW5lIFRMVjMyMEFJQzIzX1JFU0VUCQkweDBGCisKKy8qIExlZnQgKHJpZ2h0KSBsaW5lIGlucHV0IHZvbHVtZSBjb250cm9sIHJlZ2lzdGVyICovCisjZGVmaW5lIFRMVjMyMEFJQzIzX0xSU19FTkFCTEVECQkweDAxMDAKKyNkZWZpbmUgVExWMzIwQUlDMjNfTElNX01VVEVECQkweDAwODAKKyNkZWZpbmUgVExWMzIwQUlDMjNfTElWX0RFRkFVTFQJCTB4MDAxNworI2RlZmluZSBUTFYzMjBBSUMyM19MSVZfTUFYCQkweDAwMWYKKyNkZWZpbmUgVExWMzIwQUlDMjNfTElWX01JTgkJMHgwMDAwCisKKy8qIExlZnQgKHJpZ2h0KSBjaGFubmVsIGhlYWRwaG9uZSB2b2x1bWUgY29udHJvbCByZWdpc3RlciAqLworI2RlZmluZSBUTFYzMjBBSUMyM19MWkNfT04JCTB4MDA4MAorI2RlZmluZSBUTFYzMjBBSUMyM19MSFZfREVGQVVMVAkJMHgwMDc5CisjZGVmaW5lIFRMVjMyMEFJQzIzX0xIVl9NQVgJCTB4MDA3ZgorI2RlZmluZSBUTFYzMjBBSUMyM19MSFZfTUlOCQkweDAwMDAKKworLyogQW5hbG9nIGF1ZGlvIHBhdGggY29udHJvbCByZWdpc3RlciAqLworI2RlZmluZSBUTFYzMjBBSUMyM19TVEFfUkVHKHgpCQkoKHgpPDw2KQorI2RlZmluZSBUTFYzMjBBSUMyM19TVEVfRU5BQkxFRAkJMHgwMDIwCisjZGVmaW5lIFRMVjMyMEFJQzIzX0RBQ19TRUxFQ1RFRAkweDAwMTAKKyNkZWZpbmUgVExWMzIwQUlDMjNfQllQQVNTX09OCQkweDAwMDgKKyNkZWZpbmUgVExWMzIwQUlDMjNfSU5TRUxfTUlDCQkweDAwMDQKKyNkZWZpbmUgVExWMzIwQUlDMjNfTUlDTV9NVVRFRAkJMHgwMDAyCisjZGVmaW5lIFRMVjMyMEFJQzIzX01JQ0JfMjBEQgkJMHgwMDAxCisKKy8qIERpZ2l0YWwgYXVkaW8gcGF0aCBjb250cm9sIHJlZ2lzdGVyICovCisjZGVmaW5lIFRMVjMyMEFJQzIzX0RBQ01fTVVURQkJMHgwMDA4CisjZGVmaW5lIFRMVjMyMEFJQzIzX0RFRU1QXzMySwkJMHgwMDAyCisjZGVmaW5lIFRMVjMyMEFJQzIzX0RFRU1QXzQ0SwkJMHgwMDA0CisjZGVmaW5lIFRMVjMyMEFJQzIzX0RFRU1QXzQ4SwkJMHgwMDA2CisjZGVmaW5lIFRMVjMyMEFJQzIzX0FEQ0hQX09OCQkweDAwMDEKKworLyogUG93ZXIgY29udHJvbCBkb3duIHJlZ2lzdGVyICovCisjZGVmaW5lIFRMVjMyMEFJQzIzX0RFVklDRV9QV1JfT0ZGICAJMHgwMDgwCisjZGVmaW5lIFRMVjMyMEFJQzIzX0NMS19PRkYJCTB4MDA0MAorI2RlZmluZSBUTFYzMjBBSUMyM19PU0NfT0ZGCQkweDAwMjAKKyNkZWZpbmUgVExWMzIwQUlDMjNfT1VUX09GRgkJMHgwMDEwCisjZGVmaW5lIFRMVjMyMEFJQzIzX0RBQ19PRkYJCTB4MDAwOAorI2RlZmluZSBUTFYzMjBBSUMyM19BRENfT0ZGCQkweDAwMDQKKyNkZWZpbmUgVExWMzIwQUlDMjNfTUlDX09GRgkJMHgwMDAyCisjZGVmaW5lIFRMVjMyMEFJQzIzX0xJTkVfT0ZGCQkweDAwMDEKKworLyogRGlnaXRhbCBhdWRpbyBpbnRlcmZhY2UgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgVExWMzIwQUlDMjNfTVNfTUFTVEVSCQkweDAwNDAKKyNkZWZpbmUgVExWMzIwQUlDMjNfTFJTV0FQX09OCQkweDAwMjAKKyNkZWZpbmUgVExWMzIwQUlDMjNfTFJQX09OCQkweDAwMTAKKyNkZWZpbmUgVExWMzIwQUlDMjNfSVdMXzE2CQkweDAwMDAKKyNkZWZpbmUgVExWMzIwQUlDMjNfSVdMXzIwCQkweDAwMDQKKyNkZWZpbmUgVExWMzIwQUlDMjNfSVdMXzI0CQkweDAwMDgKKyNkZWZpbmUgVExWMzIwQUlDMjNfSVdMXzMyCQkweDAwMEMKKyNkZWZpbmUgVExWMzIwQUlDMjNfRk9SX0kyUwkJMHgwMDAyCisjZGVmaW5lIFRMVjMyMEFJQzIzX0ZPUl9EU1AJCTB4MDAwMworI2RlZmluZSBUTFYzMjBBSUMyM19GT1JfTEpVU1QJCTB4MDAwMQorCisvKiBTYW1wbGUgcmF0ZSBjb250cm9sIHJlZ2lzdGVyICovCisjZGVmaW5lIFRMVjMyMEFJQzIzX0NMS09VVF9IQUxGCQkweDAwODAKKyNkZWZpbmUgVExWMzIwQUlDMjNfQ0xLSU5fSEFMRgkJMHgwMDQwCisjZGVmaW5lIFRMVjMyMEFJQzIzX0JPU1JfMzg0ZnMJCTB4MDAwMgkvKiBCT1NSXzI3MmZzIGluIFVTQiBtb2RlICovCisjZGVmaW5lIFRMVjMyMEFJQzIzX1VTQl9DTEtfT04JCTB4MDAwMQorI2RlZmluZSBUTFYzMjBBSUMyM19TUl9NQVNLICAgICAgICAgICAgIDB4ZgorI2RlZmluZSBUTFYzMjBBSUMyM19DTEtPVVRfU0hJRlQgICAgICAgIDcKKyNkZWZpbmUgVExWMzIwQUlDMjNfQ0xLSU5fU0hJRlQgICAgICAgICA2CisjZGVmaW5lIFRMVjMyMEFJQzIzX1NSX1NISUZUICAgICAgICAgICAgMgorI2RlZmluZSBUTFYzMjBBSUMyM19CT1NSX1NISUZUICAgICAgICAgIDEKKworLyogRGlnaXRhbCBpbnRlcmZhY2UgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgVExWMzIwQUlDMjNfQUNUX09OCQkweDAwMDEKKworLyoKKyAqIEFVRElPIHJlbGF0ZWQgTUFDUk9TCisgKi8KKworI2RlZmluZSBUTFYzMjBBSUMyM19ERUZBVUxUX09VVF9WT0wJMHg3MAorI2RlZmluZSBUTFYzMjBBSUMyM19ERUZBVUxUX0lOX1ZPTFVNRQkweDEwCisKKyNkZWZpbmUgVExWMzIwQUlDMjNfT1VUX1ZPTF9NSU4JCVRMVjMyMEFJQzIzX0xIVl9NSU4KKyNkZWZpbmUgVExWMzIwQUlDMjNfT1VUX1ZPTF9NQVgJCVRMVjMyMEFJQzIzX0xIVl9NQVgKKyNkZWZpbmUgVExWMzIwQUlDMjNfT1VUX1ZPX1JBTkdFCShUTFYzMjBBSUMyM19PVVRfVk9MX01BWCAtIFwKKwkJCQkJVExWMzIwQUlDMjNfT1VUX1ZPTF9NSU4pCisjZGVmaW5lIFRMVjMyMEFJQzIzX09VVF9WT0xfTUFTSwlUTFYzMjBBSUMyM19PVVRfVk9MX01BWAorCisjZGVmaW5lIFRMVjMyMEFJQzIzX0lOX1ZPTF9NSU4JCVRMVjMyMEFJQzIzX0xJVl9NSU4KKyNkZWZpbmUgVExWMzIwQUlDMjNfSU5fVk9MX01BWAkJVExWMzIwQUlDMjNfTElWX01BWAorI2RlZmluZSBUTFYzMjBBSUMyM19JTl9WT0xfUkFOR0UJKFRMVjMyMEFJQzIzX0lOX1ZPTF9NQVggLSBcCisJCQkJCVRMVjMyMEFJQzIzX0lOX1ZPTF9NSU4pCisjZGVmaW5lIFRMVjMyMEFJQzIzX0lOX1ZPTF9NQVNLCQlUTFYzMjBBSUMyM19JTl9WT0xfTUFYCisKKyNkZWZpbmUgVExWMzIwQUlDMjNfU0lERVRPTkVfTUFTSwkweDFjMAorI2RlZmluZSBUTFYzMjBBSUMyM19TSURFVE9ORV8wCQkweDEwMAorI2RlZmluZSBUTFYzMjBBSUMyM19TSURFVE9ORV82CQkweDAwMAorI2RlZmluZSBUTFYzMjBBSUMyM19TSURFVE9ORV85CQkweDA0MAorI2RlZmluZSBUTFYzMjBBSUMyM19TSURFVE9ORV8xMgkJMHgwODAKKyNkZWZpbmUgVExWMzIwQUlDMjNfU0lERVRPTkVfMTgJCTB4MGMwCisKK2V4dGVybiBzdHJ1Y3Qgc25kX3NvY19kYWkgdGx2MzIwYWljMjNfZGFpOworZXh0ZXJuIHN0cnVjdCBzbmRfc29jX2NvZGVjX2RldmljZSBzb2NfY29kZWNfZGV2X3RsdjMyMGFpYzIzOworCisjZW5kaWYgLyogX1RMVjMyMEFJQzIzX0ggKi8KZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3MvdGx2MzIwYWljM3guYyBiL3NvdW5kL3NvYy9jb2RlY3MvdGx2MzIwYWljM3guYwppbmRleCA1NjZhNDI3Li4wNTMzNmVkIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL3RsdjMyMGFpYzN4LmMKKysrIGIvc291bmQvc29jL2NvZGVjcy90bHYzMjBhaWMzeC5jCkBAIC00OCw3ICs0OCw2IEBACiAKICNpbmNsdWRlICJ0bHYzMjBhaWMzeC5oIgogCi0jZGVmaW5lIEFVRElPX05BTUUgImFpYzN4IgogI2RlZmluZSBBSUMzWF9WRVJTSU9OICIwLjIiCiAKIC8qIGNvZGVjIHByaXZhdGUgZGF0YSAqLwpAQCAtOTkxLDcgKzk5MCw3IEBACiAJCQkgU05EUlZfUENNX0ZNVEJJVF9TMjRfM0xFIHwgU05EUlZfUENNX0ZNVEJJVF9TMzJfTEUpCiAKIHN0cnVjdCBzbmRfc29jX2RhaSBhaWMzeF9kYWkgPSB7Ci0JLm5hbWUgPSAiYWljM3giLAorCS5uYW1lID0gInRsdjMyMGFpYzN4IiwKIAkucGxheWJhY2sgPSB7CiAJCS5zdHJlYW1fbmFtZSA9ICJQbGF5YmFjayIsCiAJCS5jaGFubmVsc19taW4gPSAxLApAQCAtMTA1NSw3ICsxMDU0LDcgQEAKIAlzdHJ1Y3QgYWljM3hfc2V0dXBfZGF0YSAqc2V0dXAgPSBzb2NkZXYtPmNvZGVjX2RhdGE7CiAJaW50IHJlZywgcmV0ID0gMDsKIAotCWNvZGVjLT5uYW1lID0gImFpYzN4IjsKKwljb2RlYy0+bmFtZSA9ICJ0bHYzMjBhaWMzeCI7CiAJY29kZWMtPm93bmVyID0gVEhJU19NT0RVTEU7CiAJY29kZWMtPnJlYWQgPSBhaWMzeF9yZWFkX3JlZ19jYWNoZTsKIAljb2RlYy0+d3JpdGUgPSBhaWMzeF93cml0ZTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3MvdWRhMTM4MC5jIGIvc291bmQvc29jL2NvZGVjcy91ZGExMzgwLmMKaW5kZXggZDIwNmQ3Zi4uYTY5ZWU3MiAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy91ZGExMzgwLmMKKysrIGIvc291bmQvc29jL2NvZGVjcy91ZGExMzgwLmMKQEAgLTM2LDcgKzM2LDYgQEAKICNpbmNsdWRlICJ1ZGExMzgwLmgiCiAKICNkZWZpbmUgVURBMTM4MF9WRVJTSU9OICIwLjYiCi0jZGVmaW5lIEFVRElPX05BTUUgInVkYTEzODAiCiAKIC8qCiAgKiB1ZGExMzgwIHJlZ2lzdGVyIGNhY2hlCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL3dtODUxMC5jIGIvc291bmQvc29jL2NvZGVjcy93bTg1MTAuYwppbmRleCA5YTM3YzhkLi5kOGNhMmRhIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL3dtODUxMC5jCisrKyBiL3NvdW5kL3NvYy9jb2RlY3Mvd204NTEwLmMKQEAgLTMsNyArMyw3IEBACiAgKgogICogQ29weXJpZ2h0IDIwMDYgV29sZnNvbiBNaWNyb2VsZWN0cm9uaWNzIFBMQy4KICAqCi0gKiBBdXRob3I6IExpYW0gR2lyZHdvb2QgPGxpYW0uZ2lyZHdvb2RAd29sZnNvbm1pY3JvLmNvbT4KKyAqIEF1dGhvcjogTGlhbSBHaXJkd29vZCA8bHJnQHNsaW1sb2dpYy5jby51az4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKQEAgLTE4LDYgKzE4LDcgQEAKICNpbmNsdWRlIDxsaW51eC9wbS5oPgogI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGkuaD4KICNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CiAjaW5jbHVkZSA8c291bmQvcGNtLmg+CiAjaW5jbHVkZSA8c291bmQvcGNtX3BhcmFtcy5oPgpAQCAtMjcsNyArMjgsNiBAQAogCiAjaW5jbHVkZSAid204NTEwLmgiCiAKLSNkZWZpbmUgQVVESU9fTkFNRSAid204NTEwIgogI2RlZmluZSBXTTg1MTBfVkVSU0lPTiAiMC42IgogCiBzdHJ1Y3Qgc25kX3NvY19jb2RlY19kZXZpY2Ugc29jX2NvZGVjX2Rldl93bTg1MTA7CkBAIC01NSw2ICs1NSw5IEBACiAJMHgwMDAxLAogfTsKIAorI2RlZmluZSBXTTg1MTBfUE9XRVIxX0JJQVNFTiAgMHgwOAorI2RlZmluZSBXTTg1MTBfUE9XRVIxX0JVRklPRU4gMHgxMAorCiAvKgogICogcmVhZCB3bTg1MTAgcmVnaXN0ZXIgY2FjaGUKICAqLwpAQCAtMjI0LDkgKzIyNyw5IEBACiBTTkRfU09DX0RBUE1fUEdBKCJTcGtQIE91dCIsIFdNODUxMF9QT1dFUjMsIDYsIDAsIE5VTEwsIDApLAogU05EX1NPQ19EQVBNX1BHQSgiTW9ubyBPdXQiLCBXTTg1MTBfUE9XRVIzLCA3LCAwLCBOVUxMLCAwKSwKIAotU05EX1NPQ19EQVBNX1BHQSgiTWljIFBHQSIsIFdNODUxMF9QT1dFUjIsIDIsIDAsCi0JCSAmd204NTEwX21pY3BnYV9jb250cm9sc1swXSwKLQkJIEFSUkFZX1NJWkUod204NTEwX21pY3BnYV9jb250cm9scykpLAorU05EX1NPQ19EQVBNX01JWEVSKCJNaWMgUEdBIiwgV004NTEwX1BPV0VSMiwgMiwgMCwKKwkJICAgJndtODUxMF9taWNwZ2FfY29udHJvbHNbMF0sCisJCSAgIEFSUkFZX1NJWkUod204NTEwX21pY3BnYV9jb250cm9scykpLAogU05EX1NPQ19EQVBNX01JWEVSKCJCb29zdCBNaXhlciIsIFdNODUxMF9QT1dFUjIsIDQsIDAsCiAJJndtODUxMF9ib29zdF9jb250cm9sc1swXSwKIAlBUlJBWV9TSVpFKHdtODUxMF9ib29zdF9jb250cm9scykpLApAQCAtNTI2LDIzICs1MjksMzUgQEAKIHN0YXRpYyBpbnQgd204NTEwX3NldF9iaWFzX2xldmVsKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywKIAllbnVtIHNuZF9zb2NfYmlhc19sZXZlbCBsZXZlbCkKIHsKKwl1MTYgcG93ZXIxID0gd204NTEwX3JlYWRfcmVnX2NhY2hlKGNvZGVjLCBXTTg1MTBfUE9XRVIxKSAmIH4weDM7CiAKIAlzd2l0Y2ggKGxldmVsKSB7CiAJY2FzZSBTTkRfU09DX0JJQVNfT046Ci0JCXdtODUxMF93cml0ZShjb2RlYywgV004NTEwX1BPV0VSMSwgMHgxZmYpOwotCQl3bTg1MTBfd3JpdGUoY29kZWMsIFdNODUxMF9QT1dFUjIsIDB4MWZmKTsKLQkJd204NTEwX3dyaXRlKGNvZGVjLCBXTTg1MTBfUE9XRVIzLCAweDFmZik7Ci0JCWJyZWFrOwogCWNhc2UgU05EX1NPQ19CSUFTX1BSRVBBUkU6Ci0JY2FzZSBTTkRfU09DX0JJQVNfU1RBTkRCWToKKwkJcG93ZXIxIHw9IDB4MTsgIC8qIFZNSUQgNTBrICovCisJCXdtODUxMF93cml0ZShjb2RlYywgV004NTEwX1BPV0VSMSwgcG93ZXIxKTsKIAkJYnJlYWs7CisKKwljYXNlIFNORF9TT0NfQklBU19TVEFOREJZOgorCQlwb3dlcjEgfD0gV004NTEwX1BPV0VSMV9CSUFTRU4gfCBXTTg1MTBfUE9XRVIxX0JVRklPRU47CisKKwkJaWYgKGNvZGVjLT5iaWFzX2xldmVsID09IFNORF9TT0NfQklBU19PRkYpIHsKKwkJCS8qIEluaXRpYWwgY2FwIGNoYXJnZSBhdCBWTUlEIDVrICovCisJCQl3bTg1MTBfd3JpdGUoY29kZWMsIFdNODUxMF9QT1dFUjEsIHBvd2VyMSB8IDB4Myk7CisJCQltZGVsYXkoMTAwKTsKKwkJfQorCisJCXBvd2VyMSB8PSAweDI7ICAvKiBWTUlEIDUwMGsgKi8KKwkJd204NTEwX3dyaXRlKGNvZGVjLCBXTTg1MTBfUE9XRVIxLCBwb3dlcjEpOworCQlicmVhazsKKwogCWNhc2UgU05EX1NPQ19CSUFTX09GRjoKLQkJLyogZXZlcnl0aGluZyBvZmYsIGRhYyBtdXRlLCBpbmFjdGl2ZSAqLwotCQl3bTg1MTBfd3JpdGUoY29kZWMsIFdNODUxMF9QT1dFUjEsIDB4MCk7Ci0JCXdtODUxMF93cml0ZShjb2RlYywgV004NTEwX1BPV0VSMiwgMHgwKTsKLQkJd204NTEwX3dyaXRlKGNvZGVjLCBXTTg1MTBfUE9XRVIzLCAweDApOworCQl3bTg1MTBfd3JpdGUoY29kZWMsIFdNODUxMF9QT1dFUjEsIDApOworCQl3bTg1MTBfd3JpdGUoY29kZWMsIFdNODUxMF9QT1dFUjIsIDApOworCQl3bTg1MTBfd3JpdGUoY29kZWMsIFdNODUxMF9QT1dFUjMsIDApOwogCQlicmVhazsKIAl9CisKIAljb2RlYy0+Ymlhc19sZXZlbCA9IGxldmVsOwogCXJldHVybiAwOwogfQpAQCAtNjQwLDYgKzY1NSw3IEBACiAJfQogCiAJLyogcG93ZXIgb24gZGV2aWNlICovCisJY29kZWMtPmJpYXNfbGV2ZWwgPSBTTkRfU09DX0JJQVNfT0ZGOwogCXdtODUxMF9zZXRfYmlhc19sZXZlbChjb2RlYywgU05EX1NPQ19CSUFTX1NUQU5EQlkpOwogCXdtODUxMF9hZGRfY29udHJvbHMoY29kZWMpOwogCXdtODUxMF9hZGRfd2lkZ2V0cyhjb2RlYyk7CkBAIC03NDcsNiArNzYzLDYyIEBACiB9CiAjZW5kaWYKIAorI2lmIGRlZmluZWQoQ09ORklHX1NQSV9NQVNURVIpCitzdGF0aWMgaW50IF9fZGV2aW5pdCB3bTg1MTBfc3BpX3Byb2JlKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpCit7CisJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSB3bTg1MTBfc29jZGV2OworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y29kZWM7CisJaW50IHJldDsKKworCWNvZGVjLT5jb250cm9sX2RhdGEgPSBzcGk7CisKKwlyZXQgPSB3bTg1MTBfaW5pdChzb2NkZXYpOworCWlmIChyZXQgPCAwKQorCQlkZXZfZXJyKCZzcGktPmRldiwgImZhaWxlZCB0byBpbml0aWFsaXNlIFdNODUxMFxuIik7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IF9fZGV2ZXhpdCB3bTg1MTBfc3BpX3JlbW92ZShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHNwaV9kcml2ZXIgd204NTEwX3NwaV9kcml2ZXIgPSB7CisJLmRyaXZlciA9IHsKKwkJLm5hbWUJPSAid204NTEwIiwKKwkJLmJ1cwk9ICZzcGlfYnVzX3R5cGUsCisJCS5vd25lcgk9IFRISVNfTU9EVUxFLAorCX0sCisJLnByb2JlCQk9IHdtODUxMF9zcGlfcHJvYmUsCisJLnJlbW92ZQkJPSBfX2RldmV4aXRfcCh3bTg1MTBfc3BpX3JlbW92ZSksCit9OworCitzdGF0aWMgaW50IHdtODUxMF9zcGlfd3JpdGUoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSwgY29uc3QgY2hhciAqZGF0YSwgaW50IGxlbikKK3sKKwlzdHJ1Y3Qgc3BpX3RyYW5zZmVyIHQ7CisJc3RydWN0IHNwaV9tZXNzYWdlIG07CisJdTggbXNnWzJdOworCisJaWYgKGxlbiA8PSAwKQorCQlyZXR1cm4gMDsKKworCW1zZ1swXSA9IGRhdGFbMF07CisJbXNnWzFdID0gZGF0YVsxXTsKKworCXNwaV9tZXNzYWdlX2luaXQoJm0pOworCW1lbXNldCgmdCwgMCwgKHNpemVvZiB0KSk7CisKKwl0LnR4X2J1ZiA9ICZtc2dbMF07CisJdC5sZW4gPSBsZW47CisKKwlzcGlfbWVzc2FnZV9hZGRfdGFpbCgmdCwgJm0pOworCXNwaV9zeW5jKHNwaSwgJm0pOworCisJcmV0dXJuIGxlbjsKK30KKyNlbmRpZiAvKiBDT05GSUdfU1BJX01BU1RFUiAqLworCiBzdGF0aWMgaW50IHdtODUxMF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CkBAIC03NzIsOCArODQ0LDE0IEBACiAJCWNvZGVjLT5od193cml0ZSA9IChod193cml0ZV90KWkyY19tYXN0ZXJfc2VuZDsKIAkJcmV0ID0gd204NTEwX2FkZF9pMmNfZGV2aWNlKHBkZXYsIHNldHVwKTsKIAl9Ci0jZWxzZQotCS8qIEFkZCBvdGhlciBpbnRlcmZhY2VzIGhlcmUgKi8KKyNlbmRpZgorI2lmIGRlZmluZWQoQ09ORklHX1NQSV9NQVNURVIpCisJaWYgKHNldHVwLT5zcGkpIHsKKwkJY29kZWMtPmh3X3dyaXRlID0gKGh3X3dyaXRlX3Qpd204NTEwX3NwaV93cml0ZTsKKwkJcmV0ID0gc3BpX3JlZ2lzdGVyX2RyaXZlcigmd204NTEwX3NwaV9kcml2ZXIpOworCQlpZiAocmV0ICE9IDApCisJCQlwcmludGsoS0VSTl9FUlIgImNhbid0IGFkZCBzcGkgZHJpdmVyIik7CisJfQogI2VuZGlmCiAKIAlpZiAocmV0ICE9IDApCkBAIC03OTYsNiArODc0LDkgQEAKIAlpMmNfdW5yZWdpc3Rlcl9kZXZpY2UoY29kZWMtPmNvbnRyb2xfZGF0YSk7CiAJaTJjX2RlbF9kcml2ZXIoJndtODUxMF9pMmNfZHJpdmVyKTsKICNlbmRpZgorI2lmIGRlZmluZWQoQ09ORklHX1NQSV9NQVNURVIpCisJc3BpX3VucmVnaXN0ZXJfZHJpdmVyKCZ3bTg1MTBfc3BpX2RyaXZlcik7CisjZW5kaWYKIAlrZnJlZShjb2RlYyk7CiAKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3Mvd204NTEwLmggYi9zb3VuZC9zb2MvY29kZWNzL3dtODUxMC5oCmluZGV4IGM1MzY4MzkuLmJkZWZjZjUgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3Mvd204NTEwLmgKKysrIGIvc291bmQvc29jL2NvZGVjcy93bTg1MTAuaApAQCAtOTQsNiArOTQsNyBAQAogI2RlZmluZSBXTTg1MTBfTUNMS0RJVl8xMgkoNyA8PCA1KQogCiBzdHJ1Y3Qgd204NTEwX3NldHVwX2RhdGEgeworCWludCBzcGk7CiAJaW50IGkyY19idXM7CiAJdW5zaWduZWQgc2hvcnQgaTJjX2FkZHJlc3M7CiB9OwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy93bTg1ODAuYyBiL3NvdW5kL3NvYy9jb2RlY3Mvd204NTgwLmMKaW5kZXggZGYxZmZiZS4uNjI3ZWJmYiAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy93bTg1ODAuYworKysgYi9zb3VuZC9zb2MvY29kZWNzL3dtODU4MC5jCkBAIC0xOCw3ICsxOCw2IEBACiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgotI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KQEAgLTM2LDcgKzM1LDYgQEAKIAogI2luY2x1ZGUgIndtODU4MC5oIgogCi0jZGVmaW5lIEFVRElPX05BTUUgIndtODU4MCIKICNkZWZpbmUgV004NTgwX1ZFUlNJT04gIjAuMSIKIAogc3RydWN0IHBsbF9zdGF0ZSB7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL3dtODczMS5jIGIvc291bmQvc29jL2NvZGVjcy93bTg3MzEuYwppbmRleCA3YjY0ZDlhLi43ZjhhN2UzIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL3dtODczMS5jCisrKyBiL3NvdW5kL3NvYy9jb2RlY3Mvd204NzMxLmMKQEAgLTI5LDcgKzI5LDYgQEAKIAogI2luY2x1ZGUgIndtODczMS5oIgogCi0jZGVmaW5lIEFVRElPX05BTUUgIndtODczMSIKICNkZWZpbmUgV004NzMxX1ZFUlNJT04gIjAuMTMiCiAKIHN0cnVjdCBzbmRfc29jX2NvZGVjX2RldmljZSBzb2NfY29kZWNfZGV2X3dtODczMTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3Mvd204NzUwLmMgYi9zb3VuZC9zb2MvY29kZWNzL3dtODc1MC5jCmluZGV4IDQ4OTJlMzkuLjliNzI5NmUgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3Mvd204NzUwLmMKKysrIGIvc291bmQvc29jL2NvZGVjcy93bTg3NTAuYwpAQCAtMjksNyArMjksNiBAQAogCiAjaW5jbHVkZSAid204NzUwLmgiCiAKLSNkZWZpbmUgQVVESU9fTkFNRSAiV004NzUwIgogI2RlZmluZSBXTTg3NTBfVkVSU0lPTiAiMC4xMiIKIAogLyogY29kZWMgcHJpdmF0ZSBkYXRhICovCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL3dtODc1My5jIGIvc291bmQvc29jL2NvZGVjcy93bTg3NTMuYwppbmRleCA4YzRkZjQ0Li5kNDI2ZWFhIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL3dtODc1My5jCisrKyBiL3NvdW5kL3NvYy9jb2RlY3Mvd204NzUzLmMKQEAgLTIsOCArMiw3IEBACiAgKiB3bTg3NTMuYyAgLS0gIFdNODc1MyBBTFNBIFNvYyBBdWRpbyBkcml2ZXIKICAqCiAgKiBDb3B5cmlnaHQgMjAwMyBXb2xmc29uIE1pY3JvZWxlY3Ryb25pY3MgUExDLgotICogQXV0aG9yOiBMaWFtIEdpcmR3b29kCi0gKiAgICAgICAgIGxpYW0uZ2lyZHdvb2RAd29sZnNvbm1pY3JvLmNvbSBvciBsaW51eEB3b2xmc29ubWljcm8uY29tCisgKiBBdXRob3I6IExpYW0gR2lyZHdvb2QgPGxyZ0BzbGltbG9naWMuY28udWs+CiAgKgogICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAogICogIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQpAQCAtNDAsNiArMzksNyBAQAogI2luY2x1ZGUgPGxpbnV4L3BtLmg+CiAjaW5jbHVkZSA8bGludXgvaTJjLmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvc3BpL3NwaS5oPgogI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KICNpbmNsdWRlIDxzb3VuZC9wY20uaD4KICNpbmNsdWRlIDxzb3VuZC9wY21fcGFyYW1zLmg+CkBAIC01MSw3ICs1MSw2IEBACiAKICNpbmNsdWRlICJ3bTg3NTMuaCIKIAotI2RlZmluZSBBVURJT19OQU1FICJ3bTg3NTMiCiAjZGVmaW5lIFdNODc1M19WRVJTSU9OICIwLjE2IgogCiBzdGF0aWMgaW50IGNhcHNfY2hhcmdlID0gMjAwMDsKQEAgLTE3MTksNiArMTcxOCw2MyBAQAogfQogI2VuZGlmCiAKKyNpZiBkZWZpbmVkKENPTkZJR19TUElfTUFTVEVSKQorc3RhdGljIGludCBfX2RldmluaXQgd204NzUzX3NwaV9wcm9iZShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKQoreworCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gd204NzUzX3NvY2RldjsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNvZGVjOworCWludCByZXQ7CisKKwljb2RlYy0+Y29udHJvbF9kYXRhID0gc3BpOworCisJcmV0ID0gd204NzUzX2luaXQoc29jZGV2KTsKKwlpZiAocmV0IDwgMCkKKwkJZGV2X2Vycigmc3BpLT5kZXYsICJmYWlsZWQgdG8gaW5pdGlhbGlzZSBXTTg3NTNcbiIpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBfX2RldmV4aXQgd204NzUzX3NwaV9yZW1vdmUoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSkKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBzcGlfZHJpdmVyIHdtODc1M19zcGlfZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCS5uYW1lCT0gIndtODc1MyIsCisJCS5idXMJPSAmc3BpX2J1c190eXBlLAorCQkub3duZXIJPSBUSElTX01PRFVMRSwKKwl9LAorCS5wcm9iZQkJPSB3bTg3NTNfc3BpX3Byb2JlLAorCS5yZW1vdmUJCT0gX19kZXZleGl0X3Aod204NzUzX3NwaV9yZW1vdmUpLAorfTsKKworc3RhdGljIGludCB3bTg3NTNfc3BpX3dyaXRlKHN0cnVjdCBzcGlfZGV2aWNlICpzcGksIGNvbnN0IGNoYXIgKmRhdGEsIGludCBsZW4pCit7CisJc3RydWN0IHNwaV90cmFuc2ZlciB0OworCXN0cnVjdCBzcGlfbWVzc2FnZSBtOworCXU4IG1zZ1syXTsKKworCWlmIChsZW4gPD0gMCkKKwkJcmV0dXJuIDA7CisKKwltc2dbMF0gPSBkYXRhWzBdOworCW1zZ1sxXSA9IGRhdGFbMV07CisKKwlzcGlfbWVzc2FnZV9pbml0KCZtKTsKKwltZW1zZXQoJnQsIDAsIChzaXplb2YgdCkpOworCisJdC50eF9idWYgPSAmbXNnWzBdOworCXQubGVuID0gbGVuOworCisJc3BpX21lc3NhZ2VfYWRkX3RhaWwoJnQsICZtKTsKKwlzcGlfc3luYyhzcGksICZtKTsKKworCXJldHVybiBsZW47Cit9CisjZW5kaWYKKworCiBzdGF0aWMgaW50IHdtODc1M19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CkBAIC0xNzUzLDggKzE4MDksMTQgQEAKIAkJY29kZWMtPmh3X3dyaXRlID0gKGh3X3dyaXRlX3QpaTJjX21hc3Rlcl9zZW5kOwogCQlyZXQgPSB3bTg3NTNfYWRkX2kyY19kZXZpY2UocGRldiwgc2V0dXApOwogCX0KLSNlbHNlCi0JCS8qIEFkZCBvdGhlciBpbnRlcmZhY2VzIGhlcmUgKi8KKyNlbmRpZgorI2lmIGRlZmluZWQoQ09ORklHX1NQSV9NQVNURVIpCisJaWYgKHNldHVwLT5zcGkpIHsKKwkJY29kZWMtPmh3X3dyaXRlID0gKGh3X3dyaXRlX3Qpd204NzUzX3NwaV93cml0ZTsKKwkJcmV0ID0gc3BpX3JlZ2lzdGVyX2RyaXZlcigmd204NzUzX3NwaV9kcml2ZXIpOworCQlpZiAocmV0ICE9IDApCisJCQlwcmludGsoS0VSTl9FUlIgImNhbid0IGFkZCBzcGkgZHJpdmVyIik7CisJfQogI2VuZGlmCiAKIAlpZiAocmV0ICE9IDApIHsKQEAgLTE3OTgsNiArMTg2MCw5IEBACiAJaTJjX3VucmVnaXN0ZXJfZGV2aWNlKGNvZGVjLT5jb250cm9sX2RhdGEpOwogCWkyY19kZWxfZHJpdmVyKCZ3bTg3NTNfaTJjX2RyaXZlcik7CiAjZW5kaWYKKyNpZiBkZWZpbmVkKENPTkZJR19TUElfTUFTVEVSKQorCXNwaV91bnJlZ2lzdGVyX2RyaXZlcigmd204NzUzX3NwaV9kcml2ZXIpOworI2VuZGlmCiAJa2ZyZWUoY29kZWMtPnByaXZhdGVfZGF0YSk7CiAJa2ZyZWUoY29kZWMpOwogCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL3dtODc1My5oIGIvc291bmQvc29jL2NvZGVjcy93bTg3NTMuaAppbmRleCA3ZGVmZGUwLi5mNTU3MDRjIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL3dtODc1My5oCisrKyBiL3NvdW5kL3NvYy9jb2RlY3Mvd204NzUzLmgKQEAgLTIsOCArMiw3IEBACiAgKiB3bTg3NTMuaCAgLS0gIGF1ZGlvIGRyaXZlciBmb3IgV004NzUzCiAgKgogICogQ29weXJpZ2h0IDIwMDMgV29sZnNvbiBNaWNyb2VsZWN0cm9uaWNzIFBMQy4KLSAqIEF1dGhvcjogTGlhbSBHaXJkd29vZAotICogICAgICAgICBsaWFtLmdpcmR3b29kQHdvbGZzb25taWNyby5jb20gb3IgbGludXhAd29sZnNvbm1pY3JvLmNvbQorICogQXV0aG9yOiBMaWFtIEdpcmR3b29kIDxscmdAc2xpbWxvZ2ljLmNvLnVrPgogICoKICAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKICAqICB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKQEAgLTc5LDYgKzc4LDcgQEAKICNkZWZpbmUgV004NzUzX0FEQ1RMMgkJMHgzZgogCiBzdHJ1Y3Qgd204NzUzX3NldHVwX2RhdGEgeworCWludCBzcGk7CiAJaW50IGkyY19idXM7CiAJdW5zaWduZWQgc2hvcnQgaTJjX2FkZHJlc3M7CiB9OwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy93bTg5MDAuYyBiL3NvdW5kL3NvYy9jb2RlY3Mvd204OTAwLmMKaW5kZXggMGI4YzZkMy4uM2IzMjZjOSAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy93bTg5MDAuYworKysgYi9zb3VuZC9zb2MvY29kZWNzL3dtODkwMC5jCkBAIC0xOCw3ICsxOCw2IEBACiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgotI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3Mvd204OTAzLmMgYi9zb3VuZC9zb2MvY29kZWNzL3dtODkwMy5jCmluZGV4IGEzZjU0ZWMuLmNlNDBkNzggMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3Mvd204OTAzLmMKKysrIGIvc291bmQvc29jL2NvZGVjcy93bTg5MDMuYwpAQCAtNjUzLDE0ICs2NTMsMTQgQEAKIAogLyogSW5wdXQgUEdBcyAtIE5vIFRMViBzaW5jZSB0aGUgc2NhbGUgZGVwZW5kcyBvbiBQR0EgbW9kZSAqLwogU09DX1NJTkdMRSgiTGVmdCBJbnB1dCBQR0EgU3dpdGNoIiwgV004OTAzX0FOQUxPR1VFX0xFRlRfSU5QVVRfMCwKLQkgICA3LCAxLCAwKSwKKwkgICA3LCAxLCAxKSwKIFNPQ19TSU5HTEUoIkxlZnQgSW5wdXQgUEdBIFZvbHVtZSIsIFdNODkwM19BTkFMT0dVRV9MRUZUX0lOUFVUXzAsCiAJICAgMCwgMzEsIDApLAogU09DX1NJTkdMRSgiTGVmdCBJbnB1dCBQR0EgQ29tbW9uIE1vZGUgU3dpdGNoIiwgV004OTAzX0FOQUxPR1VFX0xFRlRfSU5QVVRfMSwKIAkgICA2LCAxLCAwKSwKIAogU09DX1NJTkdMRSgiUmlnaHQgSW5wdXQgUEdBIFN3aXRjaCIsIFdNODkwM19BTkFMT0dVRV9SSUdIVF9JTlBVVF8wLAotCSAgIDcsIDEsIDApLAorCSAgIDcsIDEsIDEpLAogU09DX1NJTkdMRSgiUmlnaHQgSW5wdXQgUEdBIFZvbHVtZSIsIFdNODkwM19BTkFMT0dVRV9SSUdIVF9JTlBVVF8wLAogCSAgIDAsIDMxLCAwKSwKIFNPQ19TSU5HTEUoIlJpZ2h0IElucHV0IFBHQSBDb21tb24gTW9kZSBTd2l0Y2giLCBXTTg5MDNfQU5BTE9HVUVfUklHSFRfSU5QVVRfMSwKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3Mvd204OTcxLmMgYi9zb3VuZC9zb2MvY29kZWNzL3dtODk3MS5jCmluZGV4IDk3NGE0Y2QuLmY0MWE1NzggMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3Mvd204OTcxLmMKKysrIGIvc291bmQvc29jL2NvZGVjcy93bTg5NzEuYwpAQCAtMjksNyArMjksNiBAQAogCiAjaW5jbHVkZSAid204OTcxLmgiCiAKLSNkZWZpbmUgQVVESU9fTkFNRSAid204OTcxIgogI2RlZmluZSBXTTg5NzFfVkVSU0lPTiAiMC45IgogCiAjZGVmaW5lCVdNODk3MV9SRUdfQ09VTlQJCTQzCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL3dtODk5MC5jIGIvc291bmQvc29jL2NvZGVjcy93bTg5OTAuYwppbmRleCA2MzQxMGQ3Li41NzJkMjJiIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL3dtODk5MC5jCisrKyBiL3NvdW5kL3NvYy9jb2RlY3Mvd204OTkwLmMKQEAgLTMwLDcgKzMwLDYgQEAKIAogI2luY2x1ZGUgIndtODk5MC5oIgogCi0jZGVmaW5lIEFVRElPX05BTUUgIndtODk5MCIKICNkZWZpbmUgV004OTkwX1ZFUlNJT04gIjAuMiIKIAogLyogY29kZWMgcHJpdmF0ZSBkYXRhICovCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL3dtOTcxMi5jIGIvc291bmQvc29jL2NvZGVjcy93bTk3MTIuYwppbmRleCAyZjFjOTFiLi5mZmI0NzFlIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL3dtOTcxMi5jCisrKyBiL3NvdW5kL3NvYy9jb2RlY3Mvd205NzEyLmMKQEAgLTIsOCArMiw3IEBACiAgKiB3bTk3MTIuYyAgLS0gIEFMU0EgU29jIFdNOTcxMiBjb2RlYyBzdXBwb3J0CiAgKgogICogQ29weXJpZ2h0IDIwMDYgV29sZnNvbiBNaWNyb2VsZWN0cm9uaWNzIFBMQy4KLSAqIEF1dGhvcjogTGlhbSBHaXJkd29vZAotICogICAgICAgICBsaWFtLmdpcmR3b29kQHdvbGZzb25taWNyby5jb20gb3IgbGludXhAd29sZnNvbm1pY3JvLmNvbQorICogQXV0aG9yOiBMaWFtIEdpcmR3b29kIDxscmdAc2xpbWxvZ2ljLmNvLnVrPgogICoKICAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKICAqICB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3Mvd205NzEzLmMgYi9zb3VuZC9zb2MvY29kZWNzL3dtOTcxMy5jCmluZGV4IDQ0MWQwNTguLmFiYTQwMmIgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3Mvd205NzEzLmMKKysrIGIvc291bmQvc29jL2NvZGVjcy93bTk3MTMuYwpAQCAtMiw4ICsyLDcgQEAKICAqIHdtOTcxMy5jICAtLSAgQUxTQSBTb2MgV005NzEzIGNvZGVjIHN1cHBvcnQKICAqCiAgKiBDb3B5cmlnaHQgMjAwNiBXb2xmc29uIE1pY3JvZWxlY3Ryb25pY3MgUExDLgotICogQXV0aG9yOiBMaWFtIEdpcmR3b29kCi0gKiAgICAgICAgIGxpYW0uZ2lyZHdvb2RAd29sZnNvbm1pY3JvLmNvbSBvciBsaW51eEB3b2xmc29ubWljcm8uY29tCisgKiBBdXRob3I6IExpYW0gR2lyZHdvb2QgPGxyZ0BzbGltbG9naWMuY28udWs+CiAgKgogICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAogICogIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQpkaWZmIC0tZ2l0IGEvc291bmQvc29jL29tYXAvS2NvbmZpZyBiL3NvdW5kL3NvYy9vbWFwL0tjb25maWcKaW5kZXggYWVhMjdlNy4uOGI3NzY2YiAxMDA2NDQKLS0tIGEvc291bmQvc29jL29tYXAvS2NvbmZpZworKysgYi9zb3VuZC9zb2Mvb21hcC9LY29uZmlnCkBAIC0xMywzICsxMywxMSBAQAogCXNlbGVjdCBTTkRfU09DX1RMVjMyMEFJQzNYCiAJaGVscAogCSAgU2F5IFkgaWYgeW91IHdhbnQgdG8gYWRkIHN1cHBvcnQgZm9yIFNvQyBhdWRpbyBvbiBOb2tpYSBOODEwLgorCitjb25maWcgU05EX09NQVBfU09DX09TSzU5MTIKKwl0cmlzdGF0ZSAiU29DIEF1ZGlvIHN1cHBvcnQgZm9yIG9tYXAgb3NrNTkxMiIKKwlkZXBlbmRzIG9uIFNORF9PTUFQX1NPQyAmJiBNQUNIX09NQVBfT1NLCisJc2VsZWN0IFNORF9PTUFQX1NPQ19NQ0JTUAorCXNlbGVjdCBTTkRfU09DX1RMVjMyMEFJQzIzCisJaGVscAorCSAgU2F5IFkgaWYgeW91IHdhbnQgdG8gYWRkIHN1cHBvcnQgZm9yIFNvQyBhdWRpbyBvbiBvc2s1OTEyLgpkaWZmIC0tZ2l0IGEvc291bmQvc29jL29tYXAvTWFrZWZpbGUgYi9zb3VuZC9zb2Mvb21hcC9NYWtlZmlsZQppbmRleCBkOGQ4ZDU4Li5lMDlkMWYyIDEwMDY0NAotLS0gYS9zb3VuZC9zb2Mvb21hcC9NYWtlZmlsZQorKysgYi9zb3VuZC9zb2Mvb21hcC9NYWtlZmlsZQpAQCAtNyw1ICs3LDcgQEAKIAogIyBPTUFQIE1hY2hpbmUgU3VwcG9ydAogc25kLXNvYy1uODEwLW9ianMgOj0gbjgxMC5vCitzbmQtc29jLW9zazU5MTItb2JqcyA6PSBvc2s1OTEyLm8KIAogb2JqLSQoQ09ORklHX1NORF9PTUFQX1NPQ19OODEwKSArPSBzbmQtc29jLW44MTAubworb2JqLSQoQ09ORklHX1NORF9PTUFQX1NPQ19PU0s1OTEyKSArPSBzbmQtc29jLW9zazU5MTIubwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL29tYXAvbjgxMC5jIGIvc291bmQvc29jL29tYXAvbjgxMC5jCmluZGV4IGQxNjZiNmIuLmZhZTNhZDMgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9vbWFwL244MTAuYworKysgYi9zb3VuZC9zb2Mvb21hcC9uODEwLmMKQEAgLTI0Nyw5ICsyNDcsOSBAQAogCWludCBpLCBlcnI7CiAKIAkvKiBOb3QgY29ubmVjdGVkICovCi0Jc25kX3NvY19kYXBtX2Rpc2FibGVfcGluKGNvZGVjLCAiTU9OT19MT1VUIik7Ci0Jc25kX3NvY19kYXBtX2Rpc2FibGVfcGluKGNvZGVjLCAiSFBMQ09NIik7Ci0Jc25kX3NvY19kYXBtX2Rpc2FibGVfcGluKGNvZGVjLCAiSFBSQ09NIik7CisJc25kX3NvY19kYXBtX25jX3Bpbihjb2RlYywgIk1PTk9fTE9VVCIpOworCXNuZF9zb2NfZGFwbV9uY19waW4oY29kZWMsICJIUExDT00iKTsKKwlzbmRfc29jX2RhcG1fbmNfcGluKGNvZGVjLCAiSFBSQ09NIik7CiAKIAkvKiBBZGQgTjgxMCBzcGVjaWZpYyBjb250cm9scyAqLwogCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGFpYzMzX244MTBfY29udHJvbHMpOyBpKyspIHsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9vbWFwL29tYXAtbWNic3AuYyBiL3NvdW5kL3NvYy9vbWFwL29tYXAtbWNic3AuYwppbmRleCAzNTMxMGUxLi44NTNiMzNhIDEwMDY0NAotLS0gYS9zb3VuZC9zb2Mvb21hcC9vbWFwLW1jYnNwLmMKKysrIGIvc291bmQvc29jL29tYXAvb21hcC1tY2JzcC5jCkBAIC00Myw2ICs0Myw3IEBACiBzdHJ1Y3Qgb21hcF9tY2JzcF9kYXRhIHsKIAl1bnNpZ25lZCBpbnQJCQlidXNfaWQ7CiAJc3RydWN0IG9tYXBfbWNic3BfcmVnX2NmZwlyZWdzOworCXVuc2lnbmVkIGludAkJCWZtdDsKIAkvKgogCSAqIEZsYWdzIGluZGljYXRpbmcgaXMgdGhlIGJ1cyBhbHJlYWR5IGFjdGl2YXRlZCBhbmQgY29uZmlndXJlZCBieQogCSAqIGFub3RoZXIgc3Vic3RyZWFtCkBAIC01OSwxMiArNjAsNyBAQAogICogU3RyZWFtIERNQSBwYXJhbWV0ZXJzLiBETUEgcmVxdWVzdCBsaW5lIGFuZCBwb3J0IGFkZHJlc3MgYXJlIHNldCBydW50aW1lCiAgKiBzaW5jZSB0aGV5IGFyZSBkaWZmZXJlbnQgYmV0d2VlbiBPTUFQMSBhbmQgbGF0ZXIgT01BUHMKICAqLwotc3RhdGljIHN0cnVjdCBvbWFwX3BjbV9kbWFfZGF0YSBvbWFwX21jYnNwX2RhaV9kbWFfcGFyYW1zW05VTV9MSU5LU11bMl0gPSB7Ci17Ci0JeyAubmFtZQkJPSAiSTJTIFBDTSBTdGVyZW8gb3V0IiwgfSwKLQl7IC5uYW1lCQk9ICJJMlMgUENNIFN0ZXJlbyBpbiIsIH0sCi19LAotfTsKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9wY21fZG1hX2RhdGEgb21hcF9tY2JzcF9kYWlfZG1hX3BhcmFtc1tOVU1fTElOS1NdWzJdOwogCiAjaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMTVYWCkgfHwgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMTZYWCkKIHN0YXRpYyBjb25zdCBpbnQgb21hcDFfZG1hX3JlcXNbXVsyXSA9IHsKQEAgLTg0LDExICs4MCwyMiBAQAogc3RhdGljIGNvbnN0IGludCBvbWFwMV9kbWFfcmVxc1tdWzJdID0ge307CiBzdGF0aWMgY29uc3QgdW5zaWduZWQgbG9uZyBvbWFwMV9tY2JzcF9wb3J0W11bMl0gPSB7fTsKICNlbmRpZgotI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDI0MjApCi1zdGF0aWMgY29uc3QgaW50IG9tYXAyNDIwX2RtYV9yZXFzW11bMl0gPSB7CisKKyNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAyNFhYKSB8fCBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAzNFhYKQorc3RhdGljIGNvbnN0IGludCBvbWFwMjR4eF9kbWFfcmVxc1tdWzJdID0gewogCXsgT01BUDI0WFhfRE1BX01DQlNQMV9UWCwgT01BUDI0WFhfRE1BX01DQlNQMV9SWCB9LAogCXsgT01BUDI0WFhfRE1BX01DQlNQMl9UWCwgT01BUDI0WFhfRE1BX01DQlNQMl9SWCB9LAorI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDI0MzApIHx8IGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDM0WFgpCisJeyBPTUFQMjRYWF9ETUFfTUNCU1AzX1RYLCBPTUFQMjRYWF9ETUFfTUNCU1AzX1JYIH0sCisJeyBPTUFQMjRYWF9ETUFfTUNCU1A0X1RYLCBPTUFQMjRYWF9ETUFfTUNCU1A0X1JYIH0sCisJeyBPTUFQMjRYWF9ETUFfTUNCU1A1X1RYLCBPTUFQMjRYWF9ETUFfTUNCU1A1X1JYIH0sCisjZW5kaWYKIH07CisjZWxzZQorc3RhdGljIGNvbnN0IGludCBvbWFwMjR4eF9kbWFfcmVxc1tdWzJdID0ge307CisjZW5kaWYKKworI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDI0MjApCiBzdGF0aWMgY29uc3QgdW5zaWduZWQgbG9uZyBvbWFwMjQyMF9tY2JzcF9wb3J0W11bMl0gPSB7CiAJeyBPTUFQMjRYWF9NQ0JTUDFfQkFTRSArIE9NQVBfTUNCU1BfUkVHX0RYUjEsCiAJICBPTUFQMjRYWF9NQ0JTUDFfQkFTRSArIE9NQVBfTUNCU1BfUkVHX0RSUjEgfSwKQEAgLTk2LDEwICsxMDMsNDMgQEAKIAkgIE9NQVAyNFhYX01DQlNQMl9CQVNFICsgT01BUF9NQ0JTUF9SRUdfRFJSMSB9LAogfTsKICNlbHNlCi1zdGF0aWMgY29uc3QgaW50IG9tYXAyNDIwX2RtYV9yZXFzW11bMl0gPSB7fTsKIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBsb25nIG9tYXAyNDIwX21jYnNwX3BvcnRbXVsyXSA9IHt9OwogI2VuZGlmCiAKKyNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAyNDMwKQorc3RhdGljIGNvbnN0IHVuc2lnbmVkIGxvbmcgb21hcDI0MzBfbWNic3BfcG9ydFtdWzJdID0geworCXsgT01BUDI0WFhfTUNCU1AxX0JBU0UgKyBPTUFQX01DQlNQX1JFR19EWFIsCisJICBPTUFQMjRYWF9NQ0JTUDFfQkFTRSArIE9NQVBfTUNCU1BfUkVHX0RSUiB9LAorCXsgT01BUDI0WFhfTUNCU1AyX0JBU0UgKyBPTUFQX01DQlNQX1JFR19EWFIsCisJICBPTUFQMjRYWF9NQ0JTUDJfQkFTRSArIE9NQVBfTUNCU1BfUkVHX0RSUiB9LAorCXsgT01BUDI0MzBfTUNCU1AzX0JBU0UgKyBPTUFQX01DQlNQX1JFR19EWFIsCisJICBPTUFQMjQzMF9NQ0JTUDNfQkFTRSArIE9NQVBfTUNCU1BfUkVHX0RSUiB9LAorCXsgT01BUDI0MzBfTUNCU1A0X0JBU0UgKyBPTUFQX01DQlNQX1JFR19EWFIsCisJICBPTUFQMjQzMF9NQ0JTUDRfQkFTRSArIE9NQVBfTUNCU1BfUkVHX0RSUiB9LAorCXsgT01BUDI0MzBfTUNCU1A1X0JBU0UgKyBPTUFQX01DQlNQX1JFR19EWFIsCisJICBPTUFQMjQzMF9NQ0JTUDVfQkFTRSArIE9NQVBfTUNCU1BfUkVHX0RSUiB9LAorfTsKKyNlbHNlCitzdGF0aWMgY29uc3QgdW5zaWduZWQgbG9uZyBvbWFwMjQzMF9tY2JzcF9wb3J0W11bMl0gPSB7fTsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMzRYWCkKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBsb25nIG9tYXAzNHh4X21jYnNwX3BvcnRbXVsyXSA9IHsKKwl7IE9NQVAzNFhYX01DQlNQMV9CQVNFICsgT01BUF9NQ0JTUF9SRUdfRFhSLAorCSAgT01BUDM0WFhfTUNCU1AxX0JBU0UgKyBPTUFQX01DQlNQX1JFR19EUlIgfSwKKwl7IE9NQVAzNFhYX01DQlNQMl9CQVNFICsgT01BUF9NQ0JTUF9SRUdfRFhSLAorCSAgT01BUDM0WFhfTUNCU1AyX0JBU0UgKyBPTUFQX01DQlNQX1JFR19EUlIgfSwKKwl7IE9NQVAzNFhYX01DQlNQM19CQVNFICsgT01BUF9NQ0JTUF9SRUdfRFhSLAorCSAgT01BUDM0WFhfTUNCU1AzX0JBU0UgKyBPTUFQX01DQlNQX1JFR19EUlIgfSwKKwl7IE9NQVAzNFhYX01DQlNQNF9CQVNFICsgT01BUF9NQ0JTUF9SRUdfRFhSLAorCSAgT01BUDM0WFhfTUNCU1A0X0JBU0UgKyBPTUFQX01DQlNQX1JFR19EUlIgfSwKKwl7IE9NQVAzNFhYX01DQlNQNV9CQVNFICsgT01BUF9NQ0JTUF9SRUdfRFhSLAorCSAgT01BUDM0WFhfTUNCU1A1X0JBU0UgKyBPTUFQX01DQlNQX1JFR19EUlIgfSwKK307CisjZWxzZQorc3RhdGljIGNvbnN0IHVuc2lnbmVkIGxvbmcgb21hcDM0eHhfbWNic3BfcG9ydFtdWzJdID0ge307CisjZW5kaWYKKwogc3RhdGljIGludCBvbWFwX21jYnNwX2RhaV9zdGFydHVwKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQogewogCXN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQgPSBzdWJzdHJlYW0tPnByaXZhdGVfZGF0YTsKQEAgLTE2MSwyMCArMjAxLDI2IEBACiAJc3RydWN0IG9tYXBfbWNic3BfZGF0YSAqbWNic3BfZGF0YSA9IHRvX21jYnNwKGNwdV9kYWktPnByaXZhdGVfZGF0YSk7CiAJc3RydWN0IG9tYXBfbWNic3BfcmVnX2NmZyAqcmVncyA9ICZtY2JzcF9kYXRhLT5yZWdzOwogCWludCBkbWEsIGJ1c19pZCA9IG1jYnNwX2RhdGEtPmJ1c19pZCwgaWQgPSBjcHVfZGFpLT5pZDsKKwlpbnQgd2xlbjsKIAl1bnNpZ25lZCBsb25nIHBvcnQ7CiAKIAlpZiAoY3B1X2NsYXNzX2lzX29tYXAxKCkpIHsKIAkJZG1hID0gb21hcDFfZG1hX3JlcXNbYnVzX2lkXVtzdWJzdHJlYW0tPnN0cmVhbV07CiAJCXBvcnQgPSBvbWFwMV9tY2JzcF9wb3J0W2J1c19pZF1bc3Vic3RyZWFtLT5zdHJlYW1dOwogCX0gZWxzZSBpZiAoY3B1X2lzX29tYXAyNDIwKCkpIHsKLQkJZG1hID0gb21hcDI0MjBfZG1hX3JlcXNbYnVzX2lkXVtzdWJzdHJlYW0tPnN0cmVhbV07CisJCWRtYSA9IG9tYXAyNHh4X2RtYV9yZXFzW2J1c19pZF1bc3Vic3RyZWFtLT5zdHJlYW1dOwogCQlwb3J0ID0gb21hcDI0MjBfbWNic3BfcG9ydFtidXNfaWRdW3N1YnN0cmVhbS0+c3RyZWFtXTsKKwl9IGVsc2UgaWYgKGNwdV9pc19vbWFwMjQzMCgpKSB7CisJCWRtYSA9IG9tYXAyNHh4X2RtYV9yZXFzW2J1c19pZF1bc3Vic3RyZWFtLT5zdHJlYW1dOworCQlwb3J0ID0gb21hcDI0MzBfbWNic3BfcG9ydFtidXNfaWRdW3N1YnN0cmVhbS0+c3RyZWFtXTsKKwl9IGVsc2UgaWYgKGNwdV9pc19vbWFwMzQzeCgpKSB7CisJCWRtYSA9IG9tYXAyNHh4X2RtYV9yZXFzW2J1c19pZF1bc3Vic3RyZWFtLT5zdHJlYW1dOworCQlwb3J0ID0gb21hcDM0eHhfbWNic3BfcG9ydFtidXNfaWRdW3N1YnN0cmVhbS0+c3RyZWFtXTsKIAl9IGVsc2UgewotCQkvKgotCQkgKiBUT0RPOiBBZGQgc3VwcG9ydCBmb3IgMjQzMCBhbmQgMzQzMAotCQkgKi8KIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQorCW9tYXBfbWNic3BfZGFpX2RtYV9wYXJhbXNbaWRdW3N1YnN0cmVhbS0+c3RyZWFtXS5uYW1lID0KKwkJc3Vic3RyZWFtLT5zdHJlYW0gPyAiQXVkaW8gQ2FwdHVyZSIgOiAiQXVkaW8gUGxheWJhY2siOwogCW9tYXBfbWNic3BfZGFpX2RtYV9wYXJhbXNbaWRdW3N1YnN0cmVhbS0+c3RyZWFtXS5kbWFfcmVxID0gZG1hOwogCW9tYXBfbWNic3BfZGFpX2RtYV9wYXJhbXNbaWRdW3N1YnN0cmVhbS0+c3RyZWFtXS5wb3J0X2FkZHIgPSBwb3J0OwogCWNwdV9kYWktPmRtYV9kYXRhID0gJm9tYXBfbWNic3BfZGFpX2RtYV9wYXJhbXNbaWRdW3N1YnN0cmVhbS0+c3RyZWFtXTsKQEAgLTIwMCwxOSArMjQ2LDI5IEBACiAJc3dpdGNoIChwYXJhbXNfZm9ybWF0KHBhcmFtcykpIHsKIAljYXNlIFNORFJWX1BDTV9GT1JNQVRfUzE2X0xFOgogCQkvKiBTZXQgd29yZCBsZW5ndGhzICovCisJCXdsZW4gPSAxNjsKIAkJcmVncy0+cmNyMgl8PSBSV0RMRU4yKE9NQVBfTUNCU1BfV09SRF8xNik7CiAJCXJlZ3MtPnJjcjEJfD0gUldETEVOMShPTUFQX01DQlNQX1dPUkRfMTYpOwogCQlyZWdzLT54Y3IyCXw9IFhXRExFTjIoT01BUF9NQ0JTUF9XT1JEXzE2KTsKIAkJcmVncy0+eGNyMQl8PSBYV0RMRU4xKE9NQVBfTUNCU1BfV09SRF8xNik7Ci0JCS8qIFNldCBGUyBwZXJpb2QgYW5kIGxlbmd0aCBpbiB0ZXJtcyBvZiBiaXQgY2xvY2sgcGVyaW9kcyAqLwotCQlyZWdzLT5zcmdyMgl8PSBGUEVSKDE2ICogMiAtIDEpOwotCQlyZWdzLT5zcmdyMQl8PSBGV0lEKDE2IC0gMSk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCS8qIFVuc3VwcG9ydGVkIFBDTSBmb3JtYXQgKi8KIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCisJLyogU2V0IEZTIHBlcmlvZCBhbmQgbGVuZ3RoIGluIHRlcm1zIG9mIGJpdCBjbG9jayBwZXJpb2RzICovCisJc3dpdGNoIChtY2JzcF9kYXRhLT5mbXQgJiBTTkRfU09DX0RBSUZNVF9GT1JNQVRfTUFTSykgeworCWNhc2UgU05EX1NPQ19EQUlGTVRfSTJTOgorCQlyZWdzLT5zcmdyMgl8PSBGUEVSKHdsZW4gKiAyIC0gMSk7CisJCXJlZ3MtPnNyZ3IxCXw9IEZXSUQod2xlbiAtIDEpOworCQlicmVhazsKKwljYXNlIFNORF9TT0NfREFJRk1UX0RTUF9BOgorCQlyZWdzLT5zcmdyMgl8PSBGUEVSKHdsZW4gKiAyIC0gMSk7CisJCXJlZ3MtPnNyZ3IxCXw9IEZXSUQoMCk7CisJCWJyZWFrOworCX0KKwogCW9tYXBfbWNic3BfY29uZmlnKGJ1c19pZCwgJm1jYnNwX2RhdGEtPnJlZ3MpOwogCW1jYnNwX2RhdGEtPmNvbmZpZ3VyZWQgPSAxOwogCkBAIC0yMjgsMTAgKzI4NCwxMiBAQAogewogCXN0cnVjdCBvbWFwX21jYnNwX2RhdGEgKm1jYnNwX2RhdGEgPSB0b19tY2JzcChjcHVfZGFpLT5wcml2YXRlX2RhdGEpOwogCXN0cnVjdCBvbWFwX21jYnNwX3JlZ19jZmcgKnJlZ3MgPSAmbWNic3BfZGF0YS0+cmVnczsKKwl1bnNpZ25lZCBpbnQgdGVtcF9mbXQgPSBmbXQ7CiAKIAlpZiAobWNic3BfZGF0YS0+Y29uZmlndXJlZCkKIAkJcmV0dXJuIDA7CiAKKwltY2JzcF9kYXRhLT5mbXQgPSBmbXQ7CiAJbWVtc2V0KHJlZ3MsIDAsIHNpemVvZigqcmVncykpOwogCS8qIEdlbmVyaWMgTWNCU1AgcmVnaXN0ZXIgc2V0dGluZ3MgKi8KIAlyZWdzLT5zcGNyMgl8PSBYSU5UTSgzKSB8IEZSRUU7CkBAIC0yNDUsNiArMzAzLDEzIEBACiAJCXJlZ3MtPnJjcjIJfD0gUkRBVERMWSgxKTsKIAkJcmVncy0+eGNyMgl8PSBYREFURExZKDEpOwogCQlicmVhazsKKwljYXNlIFNORF9TT0NfREFJRk1UX0RTUF9BOgorCQkvKiAwLWJpdCBkYXRhIGRlbGF5ICovCisJCXJlZ3MtPnJjcjIgICAgICB8PSBSREFURExZKDApOworCQlyZWdzLT54Y3IyICAgICAgfD0gWERBVERMWSgwKTsKKwkJLyogSW52ZXJ0IGJpdCBjbG9jayBhbmQgRlMgcG9sYXJpdHkgY29uZmlndXJhdGlvbiBmb3IgRFNQX0EgKi8KKwkJdGVtcF9mbXQgXj0gU05EX1NPQ19EQUlGTVRfSUJfSUY7CisJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCS8qIFVuc3VwcG9ydGVkIGRhdGEgZm9ybWF0ICovCiAJCXJldHVybiAtRUlOVkFMOwpAQCAtMjY3LDcgKzMzMiw3IEBACiAJfQogCiAJLyogU2V0IGJpdCBjbG9jayAoQ0xLWC9DTEtSKSBhbmQgRlMgcG9sYXJpdGllcyAqLwotCXN3aXRjaCAoZm10ICYgU05EX1NPQ19EQUlGTVRfSU5WX01BU0spIHsKKwlzd2l0Y2ggKHRlbXBfZm10ICYgU05EX1NPQ19EQUlGTVRfSU5WX01BU0spIHsKIAljYXNlIFNORF9TT0NfREFJRk1UX05CX05GOgogCQkvKgogCQkgKiBOb3JtYWwgQkNMSyArIEZTLgpAQCAtMzEwLDcgKzM3NSw3IEBACiAJCQkJICAgICAgIGludCBjbGtfaWQpCiB7CiAJaW50IHNlbF9iaXQ7Ci0JdTE2IHJlZzsKKwl1MTYgcmVnLCByZWdfZGV2Y29uZjEgPSBPTUFQMjQzWF9DT05UUk9MX0RFVkNPTkYxOwogCiAJaWYgKGNwdV9jbGFzc19pc19vbWFwMSgpKSB7CiAJCS8qIE9NQVAxJ3MgY2FuIHVzZSBvbmx5IGV4dGVybmFsIHNvdXJjZSBjbG9jayAqLwpAQCAtMzIwLDYgKzM4NSwxMiBAQAogCQkJcmV0dXJuIDA7CiAJfQogCisJaWYgKGNwdV9pc19vbWFwMjQyMCgpICYmIG1jYnNwX2RhdGEtPmJ1c19pZCA+IDEpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKGNwdV9pc19vbWFwMzQzeCgpKQorCQlyZWdfZGV2Y29uZjEgPSBPTUFQMzQzWF9DT05UUk9MX0RFVkNPTkYxOworCiAJc3dpdGNoIChtY2JzcF9kYXRhLT5idXNfaWQpIHsKIAljYXNlIDA6CiAJCXJlZyA9IE9NQVAyX0NPTlRST0xfREVWQ09ORjA7CkBAIC0zMjksMjAgKzQwMCwyNiBAQAogCQlyZWcgPSBPTUFQMl9DT05UUk9MX0RFVkNPTkYwOwogCQlzZWxfYml0ID0gNjsKIAkJYnJlYWs7Ci0JLyogVE9ETzogU3VwcG9ydCBmb3IgcG9ydHMgMyAtIDUgaW4gT01BUDI0MzAgYW5kIE9NQVAzNHh4ICovCisJY2FzZSAyOgorCQlyZWcgPSByZWdfZGV2Y29uZjE7CisJCXNlbF9iaXQgPSAwOworCQlicmVhazsKKwljYXNlIDM6CisJCXJlZyA9IHJlZ19kZXZjb25mMTsKKwkJc2VsX2JpdCA9IDI7CisJCWJyZWFrOworCWNhc2UgNDoKKwkJcmVnID0gcmVnX2RldmNvbmYxOworCQlzZWxfYml0ID0gNDsKKwkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JaWYgKGNwdV9jbGFzc19pc19vbWFwMigpKSB7Ci0JCWlmIChjbGtfaWQgPT0gT01BUF9NQ0JTUF9TWVNDTEtfQ0xLU19GQ0xLKSB7Ci0JCQlvbWFwX2N0cmxfd3JpdGVsKG9tYXBfY3RybF9yZWFkbChyZWcpICYKLQkJCQkJIH4oMSA8PCBzZWxfYml0KSwgcmVnKTsKLQkJfSBlbHNlIHsKLQkJCW9tYXBfY3RybF93cml0ZWwob21hcF9jdHJsX3JlYWRsKHJlZykgfAotCQkJCQkgKDEgPDwgc2VsX2JpdCksIHJlZyk7Ci0JCX0KLQl9CisJaWYgKGNsa19pZCA9PSBPTUFQX01DQlNQX1NZU0NMS19DTEtTX0ZDTEspCisJCW9tYXBfY3RybF93cml0ZWwob21hcF9jdHJsX3JlYWRsKHJlZykgJiB+KDEgPDwgc2VsX2JpdCksIHJlZyk7CisJZWxzZQorCQlvbWFwX2N0cmxfd3JpdGVsKG9tYXBfY3RybF9yZWFkbChyZWcpIHwgKDEgPDwgc2VsX2JpdCksIHJlZyk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTM3NiwzNyArNDUzLDQ5IEBACiAJcmV0dXJuIGVycjsKIH0KIAotc3RydWN0IHNuZF9zb2NfZGFpIG9tYXBfbWNic3BfZGFpW05VTV9MSU5LU10gPSB7Ci17Ci0JLm5hbWUgPSAib21hcC1tY2JzcC1kYWkiLAotCS5pZCA9IDAsCi0JLnR5cGUgPSBTTkRfU09DX0RBSV9JMlMsCi0JLnBsYXliYWNrID0gewotCQkuY2hhbm5lbHNfbWluID0gMiwKLQkJLmNoYW5uZWxzX21heCA9IDIsCi0JCS5yYXRlcyA9IE9NQVBfTUNCU1BfUkFURVMsCi0JCS5mb3JtYXRzID0gU05EUlZfUENNX0ZNVEJJVF9TMTZfTEUsCi0JfSwKLQkuY2FwdHVyZSA9IHsKLQkJLmNoYW5uZWxzX21pbiA9IDIsCi0JCS5jaGFubmVsc19tYXggPSAyLAotCQkucmF0ZXMgPSBPTUFQX01DQlNQX1JBVEVTLAotCQkuZm9ybWF0cyA9IFNORFJWX1BDTV9GTVRCSVRfUzE2X0xFLAotCX0sCi0JLm9wcyA9IHsKLQkJLnN0YXJ0dXAgPSBvbWFwX21jYnNwX2RhaV9zdGFydHVwLAotCQkuc2h1dGRvd24gPSBvbWFwX21jYnNwX2RhaV9zaHV0ZG93biwKLQkJLnRyaWdnZXIgPSBvbWFwX21jYnNwX2RhaV90cmlnZ2VyLAotCQkuaHdfcGFyYW1zID0gb21hcF9tY2JzcF9kYWlfaHdfcGFyYW1zLAotCX0sCi0JLmRhaV9vcHMgPSB7Ci0JCS5zZXRfZm10ID0gb21hcF9tY2JzcF9kYWlfc2V0X2RhaV9mbXQsCi0JCS5zZXRfY2xrZGl2ID0gb21hcF9tY2JzcF9kYWlfc2V0X2Nsa2RpdiwKLQkJLnNldF9zeXNjbGsgPSBvbWFwX21jYnNwX2RhaV9zZXRfZGFpX3N5c2NsaywKLQl9LAotCS5wcml2YXRlX2RhdGEgPSAmbWNic3BfZGF0YVswXS5idXNfaWQsCi19LAorI2RlZmluZSBPTUFQX01DQlNQX0RBSV9CVUlMREVSKGxpbmtfaWQpCQkJCVwKK3sJCQkJCQkJCVwKKwkubmFtZSA9ICJvbWFwLW1jYnNwLWRhaS0obGlua19pZCkiLAkJCVwKKwkuaWQgPSAobGlua19pZCksCQkJCQlcCisJLnR5cGUgPSBTTkRfU09DX0RBSV9JMlMsCQkJCVwKKwkucGxheWJhY2sgPSB7CQkJCQkJXAorCQkuY2hhbm5lbHNfbWluID0gMiwJCQkJXAorCQkuY2hhbm5lbHNfbWF4ID0gMiwJCQkJXAorCQkucmF0ZXMgPSBPTUFQX01DQlNQX1JBVEVTLAkJCVwKKwkJLmZvcm1hdHMgPSBTTkRSVl9QQ01fRk1UQklUX1MxNl9MRSwJCVwKKwl9LAkJCQkJCQlcCisJLmNhcHR1cmUgPSB7CQkJCQkJXAorCQkuY2hhbm5lbHNfbWluID0gMiwJCQkJXAorCQkuY2hhbm5lbHNfbWF4ID0gMiwJCQkJXAorCQkucmF0ZXMgPSBPTUFQX01DQlNQX1JBVEVTLAkJCVwKKwkJLmZvcm1hdHMgPSBTTkRSVl9QQ01fRk1UQklUX1MxNl9MRSwJCVwKKwl9LAkJCQkJCQlcCisJLm9wcyA9IHsJCQkJCQlcCisJCS5zdGFydHVwID0gb21hcF9tY2JzcF9kYWlfc3RhcnR1cCwJCVwKKwkJLnNodXRkb3duID0gb21hcF9tY2JzcF9kYWlfc2h1dGRvd24sCQlcCisJCS50cmlnZ2VyID0gb21hcF9tY2JzcF9kYWlfdHJpZ2dlciwJCVwKKwkJLmh3X3BhcmFtcyA9IG9tYXBfbWNic3BfZGFpX2h3X3BhcmFtcywJCVwKKwl9LAkJCQkJCQlcCisJLmRhaV9vcHMgPSB7CQkJCQkJXAorCQkuc2V0X2ZtdCA9IG9tYXBfbWNic3BfZGFpX3NldF9kYWlfZm10LAkJXAorCQkuc2V0X2Nsa2RpdiA9IG9tYXBfbWNic3BfZGFpX3NldF9jbGtkaXYsCVwKKwkJLnNldF9zeXNjbGsgPSBvbWFwX21jYnNwX2RhaV9zZXRfZGFpX3N5c2NsaywJXAorCX0sCQkJCQkJCVwKKwkucHJpdmF0ZV9kYXRhID0gJm1jYnNwX2RhdGFbKGxpbmtfaWQpXS5idXNfaWQsCQlcCit9CisKK3N0cnVjdCBzbmRfc29jX2RhaSBvbWFwX21jYnNwX2RhaVtdID0geworCU9NQVBfTUNCU1BfREFJX0JVSUxERVIoMCksCisJT01BUF9NQ0JTUF9EQUlfQlVJTERFUigxKSwKKyNpZiBOVU1fTElOS1MgPj0gMworCU9NQVBfTUNCU1BfREFJX0JVSUxERVIoMiksCisjZW5kaWYKKyNpZiBOVU1fTElOS1MgPT0gNQorCU9NQVBfTUNCU1BfREFJX0JVSUxERVIoMyksCisJT01BUF9NQ0JTUF9EQUlfQlVJTERFUig0KSwKKyNlbmRpZgogfTsKKwogRVhQT1JUX1NZTUJPTF9HUEwob21hcF9tY2JzcF9kYWkpOwogCiBNT0RVTEVfQVVUSE9SKCJKYXJra28gTmlrdWxhIDxqYXJra28ubmlrdWxhQG5va2lhLmNvbT4iKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9vbWFwL29tYXAtbWNic3AuaCBiL3NvdW5kL3NvYy9vbWFwL29tYXAtbWNic3AuaAppbmRleCBlZDhhZmI1Li5kZjdhZDEzIDEwMDY0NAotLS0gYS9zb3VuZC9zb2Mvb21hcC9vbWFwLW1jYnNwLmgKKysrIGIvc291bmQvc29jL29tYXAvb21hcC1tY2JzcC5oCkBAIC0zOCwxMSArMzgsMTcgQEAKIAlPTUFQX01DQlNQX0NMS0dEViwJCS8qIFNhbXBsZSByYXRlIGdlbmVyYXRvciBkaXZpZGVyICovCiB9OwogCi0vKgotICogUkVWSVNJVDogUHJlcGFyYXRpb24gZm9yIHRoZSBBU29DIHYyLiBMZXQgdGhlIG51bWJlciBvZiBhdmFpbGFibGUgbGlua3MgdG8KLSAqIGJlIHNhbWUgdGhhbiBudW1iZXIgb2YgTWNCU1AgcG9ydHMgZm91bmQgaW4gT01BUChzKSB3ZSBhcmUgY29tcGlsaW5nIGZvci4KLSAqLwotI2RlZmluZSBOVU1fTElOS1MJMQorI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDI0MjApCisjZGVmaW5lIE5VTV9MSU5LUwkyCisjZW5kaWYKKyNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAxNVhYKSB8fCBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAxNlhYKQorI3VuZGVmICBOVU1fTElOS1MKKyNkZWZpbmUgTlVNX0xJTktTCTMKKyNlbmRpZgorI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDI0MzApIHx8IGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDM0WFgpCisjdW5kZWYgIE5VTV9MSU5LUworI2RlZmluZSBOVU1fTElOS1MJNQorI2VuZGlmCiAKIGV4dGVybiBzdHJ1Y3Qgc25kX3NvY19kYWkgb21hcF9tY2JzcF9kYWlbTlVNX0xJTktTXTsKIApkaWZmIC0tZ2l0IGEvc291bmQvc29jL29tYXAvb21hcC1wY20uYyBiL3NvdW5kL3NvYy9vbWFwL29tYXAtcGNtLmMKaW5kZXggNjkwYmZlYS4uZTkwODRmZCAxMDA2NDQKLS0tIGEvc291bmQvc29jL29tYXAvb21hcC1wY20uYworKysgYi9zb3VuZC9zb2Mvb21hcC9vbWFwLXBjbS5jCkBAIC05Nyw3ICs5Nyw3IEBACiAJcHJ0ZC0+ZG1hX2RhdGEgPSBkbWFfZGF0YTsKIAllcnIgPSBvbWFwX3JlcXVlc3RfZG1hKGRtYV9kYXRhLT5kbWFfcmVxLCBkbWFfZGF0YS0+bmFtZSwKIAkJCSAgICAgICBvbWFwX3BjbV9kbWFfaXJxLCBzdWJzdHJlYW0sICZwcnRkLT5kbWFfY2gpOwotCWlmICghY3B1X2lzX29tYXAxNTEwKCkpIHsKKwlpZiAoIWVyciAmICFjcHVfaXNfb21hcDE1MTAoKSkgewogCQkvKgogCQkgKiBMaW5rIGNoYW5uZWwgd2l0aCBpdHNlbGYgc28gRE1BIGRvZXNuJ3QgbmVlZCBhbnkKIAkJICogcmVwcm9ncmFtbWluZyB3aGlsZSBsb29waW5nIHRoZSBidWZmZXIKQEAgLTE0NywxMiArMTQ3LDE0IEBACiAJCWRtYV9wYXJhbXMuc3JjX29yX2RzdF9zeW5jaAk9IE9NQVBfRE1BX0RTVF9TWU5DOwogCQlkbWFfcGFyYW1zLnNyY19zdGFydAkJPSBydW50aW1lLT5kbWFfYWRkcjsKIAkJZG1hX3BhcmFtcy5kc3Rfc3RhcnQJCT0gZG1hX2RhdGEtPnBvcnRfYWRkcjsKKwkJZG1hX3BhcmFtcy5kc3RfcG9ydAkJPSBPTUFQX0RNQV9QT1JUX01QVUk7CiAJfSBlbHNlIHsKIAkJZG1hX3BhcmFtcy5zcmNfYW1vZGUJCT0gT01BUF9ETUFfQU1PREVfQ09OU1RBTlQ7CiAJCWRtYV9wYXJhbXMuZHN0X2Ftb2RlCQk9IE9NQVBfRE1BX0FNT0RFX1BPU1RfSU5DOwogCQlkbWFfcGFyYW1zLnNyY19vcl9kc3Rfc3luY2gJPSBPTUFQX0RNQV9TUkNfU1lOQzsKIAkJZG1hX3BhcmFtcy5zcmNfc3RhcnQJCT0gZG1hX2RhdGEtPnBvcnRfYWRkcjsKIAkJZG1hX3BhcmFtcy5kc3Rfc3RhcnQJCT0gcnVudGltZS0+ZG1hX2FkZHI7CisJCWRtYV9wYXJhbXMuc3JjX3BvcnQJCT0gT01BUF9ETUFfUE9SVF9NUFVJOwogCX0KIAkvKgogCSAqIFNldCBETUEgdHJhbnNmZXIgZnJhbWUgc2l6ZSBlcXVhbCB0byBBTFNBIHBlcmlvZCBzaXplIGFuZCBmcmFtZQpkaWZmIC0tZ2l0IGEvc291bmQvc29jL29tYXAvb3NrNTkxMi5jIGIvc291bmQvc29jL29tYXAvb3NrNTkxMi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBmZTczMzcKLS0tIC9kZXYvbnVsbAorKysgYi9zb3VuZC9zb2Mvb21hcC9vc2s1OTEyLmMKQEAgLTAsMCArMSwyMzIgQEAKKy8qCisgKiBvc2s1OTEyLmMgIC0tICBTb0MgYXVkaW8gZm9yIE9TSyA1OTEyCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA4IE1pc3RyYWwgU29sdXRpb25zCisgKgorICogQ29udGFjdDogQXJ1biBLUyAgPGFydW5rc0BtaXN0cmFsc29sdXRpb25zLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEKKyAqIDAyMTEwLTEzMDEgVVNBCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CisjaW5jbHVkZSA8c291bmQvcGNtLmg+CisjaW5jbHVkZSA8c291bmQvc29jLmg+CisjaW5jbHVkZSA8c291bmQvc29jLWRhcG0uaD4KKworI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KKyNpbmNsdWRlIDxtYWNoL21jYnNwLmg+CisKKyNpbmNsdWRlICJvbWFwLW1jYnNwLmgiCisjaW5jbHVkZSAib21hcC1wY20uaCIKKyNpbmNsdWRlICIuLi9jb2RlY3MvdGx2MzIwYWljMjMuaCIKKworI2RlZmluZSBDT0RFQ19DTE9DSyAJMTIwMDAwMDAKKworc3RhdGljIHN0cnVjdCBjbGsgKnRsdjMyMGFpYzIzX21jbGs7CisKK3N0YXRpYyBpbnQgb3NrX3N0YXJ0dXAoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCit7CisJcmV0dXJuIGNsa19lbmFibGUodGx2MzIwYWljMjNfbWNsayk7Cit9CisKK3N0YXRpYyB2b2lkIG9za19zaHV0ZG93bihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3sKKwljbGtfZGlzYWJsZSh0bHYzMjBhaWMyM19tY2xrKTsKK30KKworc3RhdGljIGludCBvc2tfaHdfcGFyYW1zKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAorCQkJIHN0cnVjdCBzbmRfcGNtX2h3X3BhcmFtcyAqcGFyYW1zKQoreworCXN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQgPSBzdWJzdHJlYW0tPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3Qgc25kX3NvY19kYWkgKmNvZGVjX2RhaSA9IHJ0ZC0+ZGFpLT5jb2RlY19kYWk7CisJc3RydWN0IHNuZF9zb2NfZGFpICpjcHVfZGFpID0gcnRkLT5kYWktPmNwdV9kYWk7CisJaW50IGVycjsKKworCS8qIFNldCBjb2RlYyBEQUkgY29uZmlndXJhdGlvbiAqLworCWVyciA9IHNuZF9zb2NfZGFpX3NldF9mbXQoY29kZWNfZGFpLAorCQkJCSAgU05EX1NPQ19EQUlGTVRfRFNQX0EgfAorCQkJCSAgU05EX1NPQ19EQUlGTVRfTkJfSUYgfAorCQkJCSAgU05EX1NPQ19EQUlGTVRfQ0JNX0NGTSk7CisJaWYgKGVyciA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJjYW4ndCBzZXQgY29kZWMgREFJIGNvbmZpZ3VyYXRpb25cbiIpOworCQlyZXR1cm4gZXJyOworCX0KKworCS8qIFNldCBjcHUgREFJIGNvbmZpZ3VyYXRpb24gKi8KKwllcnIgPSBzbmRfc29jX2RhaV9zZXRfZm10KGNwdV9kYWksCisJCQkJICBTTkRfU09DX0RBSUZNVF9EU1BfQSB8CisJCQkJICBTTkRfU09DX0RBSUZNVF9OQl9JRiB8CisJCQkJICBTTkRfU09DX0RBSUZNVF9DQk1fQ0ZNKTsKKwlpZiAoZXJyIDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIgImNhbid0IHNldCBjcHUgREFJIGNvbmZpZ3VyYXRpb25cbiIpOworCQlyZXR1cm4gZXJyOworCX0KKworCS8qIFNldCB0aGUgY29kZWMgc3lzdGVtIGNsb2NrIGZvciBEQUMgYW5kIEFEQyAqLworCWVyciA9CisJICAgIHNuZF9zb2NfZGFpX3NldF9zeXNjbGsoY29kZWNfZGFpLCAwLCBDT0RFQ19DTE9DSywgU05EX1NPQ19DTE9DS19JTik7CisKKwlpZiAoZXJyIDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIgImNhbid0IHNldCBjb2RlYyBzeXN0ZW0gY2xvY2tcbiIpOworCQlyZXR1cm4gZXJyOworCX0KKworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19vcHMgb3NrX29wcyA9IHsKKwkuc3RhcnR1cCA9IG9za19zdGFydHVwLAorCS5od19wYXJhbXMgPSBvc2tfaHdfcGFyYW1zLAorCS5zaHV0ZG93biA9IG9za19zaHV0ZG93biwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCB0bHYzMjBhaWMyM19kYXBtX3dpZGdldHNbXSA9IHsKKwlTTkRfU09DX0RBUE1fSFAoIkhlYWRwaG9uZSBKYWNrIiwgTlVMTCksCisJU05EX1NPQ19EQVBNX0xJTkUoIkxpbmUgSW4iLCBOVUxMKSwKKwlTTkRfU09DX0RBUE1fTUlDKCJNaWMgSmFjayIsIE5VTEwpLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfc29jX2RhcG1fcm91dGUgYXVkaW9fbWFwW10gPSB7CisJeyJIZWFkcGhvbmUgSmFjayIsIE5VTEwsICJMSFBPVVQifSwKKwl7IkhlYWRwaG9uZSBKYWNrIiwgTlVMTCwgIlJIUE9VVCJ9LAorCisJeyJMTElORUlOIiwgTlVMTCwgIkxpbmUgSW4ifSwKKwl7IlJMSU5FSU4iLCBOVUxMLCAiTGluZSBJbiJ9LAorCisJeyJNSUNJTiIsIE5VTEwsICJNaWMgSmFjayJ9LAorfTsKKworc3RhdGljIGludCBvc2tfdGx2MzIwYWljMjNfaW5pdChzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpCit7CisKKwkvKiBBZGQgb3NrNTkxMiBzcGVjaWZpYyB3aWRnZXRzICovCisJc25kX3NvY19kYXBtX25ld19jb250cm9scyhjb2RlYywgdGx2MzIwYWljMjNfZGFwbV93aWRnZXRzLAorCQkJCSAgQVJSQVlfU0laRSh0bHYzMjBhaWMyM19kYXBtX3dpZGdldHMpKTsKKworCS8qIFNldCB1cCBvc2s1OTEyIHNwZWNpZmljIGF1ZGlvIHBhdGggYXVkaW9fbWFwICovCisJc25kX3NvY19kYXBtX2FkZF9yb3V0ZXMoY29kZWMsIGF1ZGlvX21hcCwgQVJSQVlfU0laRShhdWRpb19tYXApKTsKKworCXNuZF9zb2NfZGFwbV9lbmFibGVfcGluKGNvZGVjLCAiSGVhZHBob25lIEphY2siKTsKKwlzbmRfc29jX2RhcG1fZW5hYmxlX3Bpbihjb2RlYywgIkxpbmUgSW4iKTsKKwlzbmRfc29jX2RhcG1fZW5hYmxlX3Bpbihjb2RlYywgIk1pYyBKYWNrIik7CisKKwlzbmRfc29jX2RhcG1fc3luYyhjb2RlYyk7CisKKwlyZXR1cm4gMDsKK30KKworLyogRGlnaXRhbCBhdWRpbyBpbnRlcmZhY2UgZ2x1ZSAtIGNvbm5lY3RzIGNvZGVjIDwtLT4gQ1BVICovCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGFpX2xpbmsgb3NrX2RhaSA9IHsKKwkubmFtZSA9ICJUTFYzMjBBSUMyMyIsCisJLnN0cmVhbV9uYW1lID0gIkFJQzIzIiwKKwkuY3B1X2RhaSA9ICZvbWFwX21jYnNwX2RhaVswXSwKKwkuY29kZWNfZGFpID0gJnRsdjMyMGFpYzIzX2RhaSwKKwkuaW5pdCA9IG9za190bHYzMjBhaWMyM19pbml0LAorCS5vcHMgPSAmb3NrX29wcywKK307CisKKy8qIEF1ZGlvIG1hY2hpbmUgZHJpdmVyICovCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfbWFjaGluZSBzbmRfc29jX21hY2hpbmVfb3NrID0geworCS5uYW1lID0gIk9TSzU5MTIiLAorCS5kYWlfbGluayA9ICZvc2tfZGFpLAorCS5udW1fbGlua3MgPSAxLAorfTsKKworLyogQXVkaW8gc3Vic3lzdGVtICovCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGV2aWNlIG9za19zbmRfZGV2ZGF0YSA9IHsKKwkubWFjaGluZSA9ICZzbmRfc29jX21hY2hpbmVfb3NrLAorCS5wbGF0Zm9ybSA9ICZvbWFwX3NvY19wbGF0Zm9ybSwKKwkuY29kZWNfZGV2ID0gJnNvY19jb2RlY19kZXZfdGx2MzIwYWljMjMsCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqb3NrX3NuZF9kZXZpY2U7CisKK3N0YXRpYyBpbnQgX19pbml0IG9za19zb2NfaW5pdCh2b2lkKQoreworCWludCBlcnI7CisJdTMyIGN1clJhdGU7CisJc3RydWN0IGRldmljZSAqZGV2OworCisJaWYgKCEobWFjaGluZV9pc19vbWFwX29zaygpKSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlvc2tfc25kX2RldmljZSA9IHBsYXRmb3JtX2RldmljZV9hbGxvYygic29jLWF1ZGlvIiwgLTEpOworCWlmICghb3NrX3NuZF9kZXZpY2UpCisJCXJldHVybiAtRU5PTUVNOworCisJcGxhdGZvcm1fc2V0X2RydmRhdGEob3NrX3NuZF9kZXZpY2UsICZvc2tfc25kX2RldmRhdGEpOworCW9za19zbmRfZGV2ZGF0YS5kZXYgPSAmb3NrX3NuZF9kZXZpY2UtPmRldjsKKwkqKHVuc2lnbmVkIGludCAqKW9za19kYWkuY3B1X2RhaS0+cHJpdmF0ZV9kYXRhID0gMDsJLyogTWNCU1AxICovCisJZXJyID0gcGxhdGZvcm1fZGV2aWNlX2FkZChvc2tfc25kX2RldmljZSk7CisJaWYgKGVycikKKwkJZ290byBlcnIxOworCisJZGV2ID0gJm9za19zbmRfZGV2aWNlLT5kZXY7CisKKwl0bHYzMjBhaWMyM19tY2xrID0gY2xrX2dldChkZXYsICJtY2xrIik7CisJaWYgKElTX0VSUih0bHYzMjBhaWMyM19tY2xrKSkgeworCQlwcmludGsoS0VSTl9FUlIgIkNvdWxkIG5vdCBnZXQgbWNsayBjbG9ja1xuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCWlmIChjbGtfZ2V0X3VzZWNvdW50KHRsdjMyMGFpYzIzX21jbGspID4gMCkgeworCQkvKiBNQ0xLIGlzIGFscmVhZHkgaW4gdXNlICovCisJCXByaW50ayhLRVJOX1dBUk5JTkcKKwkJICAgICAgICJNQ0xLIGluIHVzZSBhdCAlZCBIei4gV2UgY2hhbmdlIGl0IHRvICVkIEh6XG4iLAorCQkgICAgICAgKHVpbnQpIGNsa19nZXRfcmF0ZSh0bHYzMjBhaWMyM19tY2xrKSwgQ09ERUNfQ0xPQ0spOworCX0KKworCS8qCisJICogQ29uZmlndXJlIDEyIE1IeiBvdXRwdXQgb24gTUNMSy4KKwkgKi8KKwljdXJSYXRlID0gKHVpbnQpIGNsa19nZXRfcmF0ZSh0bHYzMjBhaWMyM19tY2xrKTsKKwlpZiAoY3VyUmF0ZSAhPSBDT0RFQ19DTE9DSykgeworCQlpZiAoY2xrX3NldF9yYXRlKHRsdjMyMGFpYzIzX21jbGssIENPREVDX0NMT0NLKSkgeworCQkJcHJpbnRrKEtFUk5fRVJSICJDYW5ub3Qgc2V0IE1DTEsgZm9yIEFJQzIzIENPREVDXG4iKTsKKwkJCWVyciA9IC1FQ0FOQ0VMRUQ7CisJCQlnb3RvIGVycjE7CisJCX0KKwl9CisKKwlwcmludGsoS0VSTl9JTkZPICJNQ0xLID0gJWQgWyVkXSwgdXNlY291bnQgPSAlZFxuIiwKKwkgICAgICAgKHVpbnQpIGNsa19nZXRfcmF0ZSh0bHYzMjBhaWMyM19tY2xrKSwgQ09ERUNfQ0xPQ0ssCisJICAgICAgIGNsa19nZXRfdXNlY291bnQodGx2MzIwYWljMjNfbWNsaykpOworCisJcmV0dXJuIDA7CitlcnIxOgorCWNsa19wdXQodGx2MzIwYWljMjNfbWNsayk7CisJcGxhdGZvcm1fZGV2aWNlX2RlbChvc2tfc25kX2RldmljZSk7CisJcGxhdGZvcm1fZGV2aWNlX3B1dChvc2tfc25kX2RldmljZSk7CisKKwlyZXR1cm4gZXJyOworCit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBvc2tfc29jX2V4aXQodm9pZCkKK3sKKwlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3Rlcihvc2tfc25kX2RldmljZSk7Cit9CisKK21vZHVsZV9pbml0KG9za19zb2NfaW5pdCk7Cittb2R1bGVfZXhpdChvc2tfc29jX2V4aXQpOworCitNT0RVTEVfQVVUSE9SKCJBcnVuIEtTIDxhcnVua3NAbWlzdHJhbHNvbHV0aW9ucy5jb20+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkFMU0EgU29DIE9TSyA1OTEyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvcHhhL2NvcmdpLmMgYi9zb3VuZC9zb2MvcHhhL2NvcmdpLmMKaW5kZXggMWE4MzczZC4uMjcxOGVhZiAxMDA2NDQKLS0tIGEvc291bmQvc29jL3B4YS9jb3JnaS5jCisrKyBiL3NvdW5kL3NvYy9weGEvY29yZ2kuYwpAQCAtNCw3ICs0LDcgQEAKICAqIENvcHlyaWdodCAyMDA1IFdvbGZzb24gTWljcm9lbGVjdHJvbmljcyBQTEMuCiAgKiBDb3B5cmlnaHQgMjAwNSBPcGVuZWRoYW5kIEx0ZC4KICAqCi0gKiBBdXRob3JzOiBMaWFtIEdpcmR3b29kIDxsaWFtLmdpcmR3b29kQHdvbGZzb25taWNyby5jb20+CisgKiBBdXRob3JzOiBMaWFtIEdpcmR3b29kIDxscmdAc2xpbWxvZ2ljLmNvLnVrPgogICogICAgICAgICAgUmljaGFyZCBQdXJkaWUgPHJpY2hhcmRAb3BlbmVkaGFuZC5jb20+CiAgKgogICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdApAQCAtMjgxLDggKzI4MSw4IEBACiB7CiAJaW50IGksIGVycjsKIAotCXNuZF9zb2NfZGFwbV9kaXNhYmxlX3Bpbihjb2RlYywgIkxMSU5FSU4iKTsKLQlzbmRfc29jX2RhcG1fZGlzYWJsZV9waW4oY29kZWMsICJSTElORUlOIik7CisJc25kX3NvY19kYXBtX25jX3Bpbihjb2RlYywgIkxMSU5FSU4iKTsKKwlzbmRfc29jX2RhcG1fbmNfcGluKGNvZGVjLCAiUkxJTkVJTiIpOwogCiAJLyogQWRkIGNvcmdpIHNwZWNpZmljIGNvbnRyb2xzICovCiAJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUod204NzMxX2NvcmdpX2NvbnRyb2xzKTsgaSsrKSB7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvcHhhL2VtLXgyNzAuYyBiL3NvdW5kL3NvYy9weGEvZW0teDI3MC5jCmluZGV4IGQ5YzNmN2IuLmU2ZmY2OTIgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9weGEvZW0teDI3MC5jCisrKyBiL3NvdW5kL3NvYy9weGEvZW0teDI3MC5jCkBAIC05LDcgKzksNyBAQAogICogQ29weXJpZ2h0IDIwMDUgV29sZnNvbiBNaWNyb2VsZWN0cm9uaWNzIFBMQy4KICAqIENvcHlyaWdodCAyMDA1IE9wZW5lZGhhbmQgTHRkLgogICoKLSAqIEF1dGhvcnM6IExpYW0gR2lyZHdvb2QgPGxpYW0uZ2lyZHdvb2RAd29sZnNvbm1pY3JvLmNvbT4KKyAqIEF1dGhvcnM6IExpYW0gR2lyZHdvb2QgPGxyZ0BzbGltbG9naWMuY28udWs+CiAgKiAgICAgICAgICBSaWNoYXJkIFB1cmRpZSA8cmljaGFyZEBvcGVuZWRoYW5kLmNvbT4KICAqCiAgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvcHhhL3Bvb2RsZS5jIGIvc291bmQvc29jL3B4YS9wb29kbGUuYwppbmRleCBmODRmN2Q4Li40ZDk5MzBjIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvcHhhL3Bvb2RsZS5jCisrKyBiL3NvdW5kL3NvYy9weGEvcG9vZGxlLmMKQEAgLTQsNyArNCw3IEBACiAgKiBDb3B5cmlnaHQgMjAwNSBXb2xmc29uIE1pY3JvZWxlY3Ryb25pY3MgUExDLgogICogQ29weXJpZ2h0IDIwMDUgT3BlbmVkaGFuZCBMdGQuCiAgKgotICogQXV0aG9yczogTGlhbSBHaXJkd29vZCA8bGlhbS5naXJkd29vZEB3b2xmc29ubWljcm8uY29tPgorICogQXV0aG9yczogTGlhbSBHaXJkd29vZCA8bHJnQHNsaW1sb2dpYy5jby51az4KICAqICAgICAgICAgIFJpY2hhcmQgUHVyZGllIDxyaWNoYXJkQG9wZW5lZGhhbmQuY29tPgogICoKICAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKQEAgLTI0Miw4ICsyNDIsOCBAQAogewogCWludCBpLCBlcnI7CiAKLQlzbmRfc29jX2RhcG1fZGlzYWJsZV9waW4oY29kZWMsICJMTElORUlOIik7Ci0Jc25kX3NvY19kYXBtX2Rpc2FibGVfcGluKGNvZGVjLCAiUkxJTkVJTiIpOworCXNuZF9zb2NfZGFwbV9uY19waW4oY29kZWMsICJMTElORUlOIik7CisJc25kX3NvY19kYXBtX25jX3Bpbihjb2RlYywgIlJMSU5FSU4iKTsKIAlzbmRfc29jX2RhcG1fZW5hYmxlX3Bpbihjb2RlYywgIk1JQ0lOIik7CiAKIAkvKiBBZGQgcG9vZGxlIHNwZWNpZmljIGNvbnRyb2xzICovCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvcHhhL3B4YTJ4eC1pMnMuYyBiL3NvdW5kL3NvYy9weGEvcHhhMnh4LWkycy5jCmluZGV4IDJmYjU4MjkuLmU3NTgwMzQgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9weGEvcHhhMnh4LWkycy5jCisrKyBiL3NvdW5kL3NvYy9weGEvcHhhMnh4LWkycy5jCkBAIC0zLDcgKzMsNyBAQAogICoKICAqIENvcHlyaWdodCAyMDA1IFdvbGZzb24gTWljcm9lbGVjdHJvbmljcyBQTEMuCiAgKiBBdXRob3I6IExpYW0gR2lyZHdvb2QKLSAqICAgICAgICAgbGlhbS5naXJkd29vZEB3b2xmc29ubWljcm8uY29tIG9yIGxpbnV4QHdvbGZzb25taWNyby5jb20KKyAqICAgICAgICAgbHJnQHNsaW1sb2dpYy5jby51awogICoKICAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKICAqICB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKQEAgLTQwNSw2ICs0MDUsNiBAQAogbW9kdWxlX2V4aXQocHhhMnh4X2kyc19leGl0KTsKIAogLyogTW9kdWxlIGluZm9ybWF0aW9uICovCi1NT0RVTEVfQVVUSE9SKCJMaWFtIEdpcmR3b29kLCBsaWFtLmdpcmR3b29kQHdvbGZzb25taWNyby5jb20sIHd3dy53b2xmc29ubWljcm8uY29tIik7CitNT0RVTEVfQVVUSE9SKCJMaWFtIEdpcmR3b29kLCBscmdAc2xpbWxvZ2ljLmNvLnVrIik7CiBNT0RVTEVfREVTQ1JJUFRJT04oInB4YTJ4eCBJMlMgU29DIEludGVyZmFjZSIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL3B4YS9zcGl0ei5jIGIvc291bmQvc29jL3B4YS9zcGl0ei5jCmluZGV4IDlhNzBiMDAuLmQzMDdiNjcgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9weGEvc3BpdHouYworKysgYi9zb3VuZC9zb2MvcHhhL3NwaXR6LmMKQEAgLTQsNyArNCw3IEBACiAgKiBDb3B5cmlnaHQgMjAwNSBXb2xmc29uIE1pY3JvZWxlY3Ryb25pY3MgUExDLgogICogQ29weXJpZ2h0IDIwMDUgT3BlbmVkaGFuZCBMdGQuCiAgKgotICogQXV0aG9yczogTGlhbSBHaXJkd29vZCA8bGlhbS5naXJkd29vZEB3b2xmc29ubWljcm8uY29tPgorICogQXV0aG9yczogTGlhbSBHaXJkd29vZCA8bHJnQHNsaW1sb2dpYy5jby51az4KICAqICAgICAgICAgIFJpY2hhcmQgUHVyZGllIDxyaWNoYXJkQG9wZW5lZGhhbmQuY29tPgogICoKICAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKQEAgLTI4MSwxMyArMjgxLDEzIEBACiAJaW50IGksIGVycjsKIAogCS8qIE5DIGNvZGVjIHBpbnMgKi8KLQlzbmRfc29jX2RhcG1fZGlzYWJsZV9waW4oY29kZWMsICJSSU5QVVQxIik7Ci0Jc25kX3NvY19kYXBtX2Rpc2FibGVfcGluKGNvZGVjLCAiTElOUFVUMiIpOwotCXNuZF9zb2NfZGFwbV9kaXNhYmxlX3Bpbihjb2RlYywgIlJJTlBVVDIiKTsKLQlzbmRfc29jX2RhcG1fZGlzYWJsZV9waW4oY29kZWMsICJMSU5QVVQzIik7Ci0Jc25kX3NvY19kYXBtX2Rpc2FibGVfcGluKGNvZGVjLCAiUklOUFVUMyIpOwotCXNuZF9zb2NfZGFwbV9kaXNhYmxlX3Bpbihjb2RlYywgIk9VVDMiKTsKLQlzbmRfc29jX2RhcG1fZGlzYWJsZV9waW4oY29kZWMsICJNT05PMSIpOworCXNuZF9zb2NfZGFwbV9uY19waW4oY29kZWMsICJSSU5QVVQxIik7CisJc25kX3NvY19kYXBtX25jX3Bpbihjb2RlYywgIkxJTlBVVDIiKTsKKwlzbmRfc29jX2RhcG1fbmNfcGluKGNvZGVjLCAiUklOUFVUMiIpOworCXNuZF9zb2NfZGFwbV9uY19waW4oY29kZWMsICJMSU5QVVQzIik7CisJc25kX3NvY19kYXBtX25jX3Bpbihjb2RlYywgIlJJTlBVVDMiKTsKKwlzbmRfc29jX2RhcG1fbmNfcGluKGNvZGVjLCAiT1VUMyIpOworCXNuZF9zb2NfZGFwbV9uY19waW4oY29kZWMsICJNT05PMSIpOwogCiAJLyogQWRkIHNwaXR6IHNwZWNpZmljIGNvbnRyb2xzICovCiAJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUod204NzUwX3NwaXR6X2NvbnRyb2xzKTsgaSsrKSB7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvcHhhL3Rvc2EuYyBiL3NvdW5kL3NvYy9weGEvdG9zYS5jCmluZGV4IDJiYWFhNzUuLmFmZWZlNDEgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9weGEvdG9zYS5jCisrKyBiL3NvdW5kL3NvYy9weGEvdG9zYS5jCkBAIC00LDcgKzQsNyBAQAogICogQ29weXJpZ2h0IDIwMDUgV29sZnNvbiBNaWNyb2VsZWN0cm9uaWNzIFBMQy4KICAqIENvcHlyaWdodCAyMDA1IE9wZW5lZGhhbmQgTHRkLgogICoKLSAqIEF1dGhvcnM6IExpYW0gR2lyZHdvb2QgPGxpYW0uZ2lyZHdvb2RAd29sZnNvbm1pY3JvLmNvbT4KKyAqIEF1dGhvcnM6IExpYW0gR2lyZHdvb2QgPGxyZ0BzbGltbG9naWMuY28udWs+CiAgKiAgICAgICAgICBSaWNoYXJkIFB1cmRpZSA8cmljaGFyZEBvcGVuZWRoYW5kLmNvbT4KICAqCiAgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CkBAIC0xOTAsOCArMTkwLDggQEAKIHsKIAlpbnQgaSwgZXJyOwogCi0Jc25kX3NvY19kYXBtX2Rpc2FibGVfcGluKGNvZGVjLCAiT1VUMyIpOwotCXNuZF9zb2NfZGFwbV9kaXNhYmxlX3Bpbihjb2RlYywgIk1PTk9PVVQiKTsKKwlzbmRfc29jX2RhcG1fbmNfcGluKGNvZGVjLCAiT1VUMyIpOworCXNuZF9zb2NfZGFwbV9uY19waW4oY29kZWMsICJNT05PT1VUIik7CiAKIAkvKiBhZGQgdG9zYSBzcGVjaWZpYyBjb250cm9scyAqLwogCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHRvc2FfY29udHJvbHMpOyBpKyspIHsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9zM2MyNHh4L25lbzE5NzNfd204NzUzLmMgYi9zb3VuZC9zb2MvczNjMjR4eC9uZW8xOTczX3dtODc1My5jCmluZGV4IDczYTUwZTkuLjg3ZGRmZWYgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9zM2MyNHh4L25lbzE5NzNfd204NzUzLmMKKysrIGIvc291bmQvc29jL3MzYzI0eHgvbmVvMTk3M193bTg3NTMuYwpAQCAtNTExLDIxICs1MTEsMjAgQEAKIAlEQkcoIkVudGVyZWQgJXNcbiIsIF9fZnVuY19fKTsKIAogCS8qIHNldCB1cCBOQyBjb2RlYyBwaW5zICovCi0Jc25kX3NvY19kYXBtX2Rpc2FibGVfcGluKGNvZGVjLCAiTE9VVDIiKTsKLQlzbmRfc29jX2RhcG1fZGlzYWJsZV9waW4oY29kZWMsICJST1VUMiIpOwotCXNuZF9zb2NfZGFwbV9kaXNhYmxlX3Bpbihjb2RlYywgIk9VVDMiKTsKLQlzbmRfc29jX2RhcG1fZGlzYWJsZV9waW4oY29kZWMsICJPVVQ0Iik7Ci0Jc25kX3NvY19kYXBtX2Rpc2FibGVfcGluKGNvZGVjLCAiTElORTEiKTsKLQlzbmRfc29jX2RhcG1fZGlzYWJsZV9waW4oY29kZWMsICJMSU5FMiIpOwotCi0KLQkvKiBzZXQgZW5kcG9pbnRzIHRvIGRlZmF1bHQgbW9kZSAqLwotCXNldF9zY2VuYXJpb19lbmRwb2ludHMoY29kZWMsIE5FT19BVURJT19PRkYpOworCXNuZF9zb2NfZGFwbV9uY19waW4oY29kZWMsICJMT1VUMiIpOworCXNuZF9zb2NfZGFwbV9uY19waW4oY29kZWMsICJST1VUMiIpOworCXNuZF9zb2NfZGFwbV9uY19waW4oY29kZWMsICJPVVQzIik7CisJc25kX3NvY19kYXBtX25jX3Bpbihjb2RlYywgIk9VVDQiKTsKKwlzbmRfc29jX2RhcG1fbmNfcGluKGNvZGVjLCAiTElORTEiKTsKKwlzbmRfc29jX2RhcG1fbmNfcGluKGNvZGVjLCAiTElORTIiKTsKIAogCS8qIEFkZCBuZW8xOTczIHNwZWNpZmljIHdpZGdldHMgKi8KIAlzbmRfc29jX2RhcG1fbmV3X2NvbnRyb2xzKGNvZGVjLCB3bTg3NTNfZGFwbV93aWRnZXRzLAogCQkJCSAgQVJSQVlfU0laRSh3bTg3NTNfZGFwbV93aWRnZXRzKSk7CiAKKwkvKiBzZXQgZW5kcG9pbnRzIHRvIGRlZmF1bHQgbW9kZSAqLworCXNldF9zY2VuYXJpb19lbmRwb2ludHMoY29kZWMsIE5FT19BVURJT19PRkYpOworCiAJLyogYWRkIG5lbzE5NzMgc3BlY2lmaWMgY29udHJvbHMgKi8KIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh3bTg3NTNfbmVvMTk3M19jb250cm9scyk7IGkrKykgewogCQllcnIgPSBzbmRfY3RsX2FkZChjb2RlYy0+Y2FyZCwKQEAgLTYwMyw2ICs2MDIsOCBAQAogewogCURCRygiRW50ZXJlZCAlc1xuIiwgX19mdW5jX18pOwogCisJaTJjID0gY2xpZW50OworCiAJbG00ODU3X3dyaXRlX3JlZ3MoKTsKIAlyZXR1cm4gMDsKIH0KQEAgLTYxMSw2ICs2MTIsOCBAQAogewogCURCRygiRW50ZXJlZCAlc1xuIiwgX19mdW5jX18pOwogCisJaTJjID0gTlVMTDsKKwogCXJldHVybiAwOwogfQogCkBAIC02NTAsNyArNjUzLDcgQEAKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkIGxtNDg1N19pMmNfaWRbXSA9IHsKLQl7ICJuZW8xOTczX2xtNDg1NyIsIDAgfQorCXsgIm5lbzE5NzNfbG00ODU3IiwgMCB9LAogCXsgfQogfTsKIApAQCAtNjY4LDQ4ICs2NzEsNiBAQAogfTsKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm5lbzE5NzNfc25kX2RldmljZTsKLXN0YXRpYyBzdHJ1Y3QgaTJjX2NsaWVudCAqbG00ODU3X2NsaWVudDsKLQotc3RhdGljIGludCBfX2luaXQgbmVvMTk3M19hZGRfbG00ODU3X2RldmljZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LAotCQkJCQkgICAgaW50IGkyY19idXMsCi0JCQkJCSAgICB1bnNpZ25lZCBzaG9ydCBpMmNfYWRkcmVzcykKLXsKLQlzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gaW5mbzsKLQlzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXI7Ci0Jc3RydWN0IGkyY19jbGllbnQgKmNsaWVudDsKLQlpbnQgcmV0OwotCi0JcmV0ID0gaTJjX2FkZF9kcml2ZXIoJmxtNDg1N19pMmNfZHJpdmVyKTsKLQlpZiAocmV0ICE9IDApIHsKLQkJZGV2X2VycigmcGRldi0+ZGV2LCAiY2FuJ3QgYWRkIGxtNDg1NyBkcml2ZXJcbiIpOwotCQlyZXR1cm4gcmV0OwotCX0KLQotCW1lbXNldCgmaW5mbywgMCwgc2l6ZW9mKHN0cnVjdCBpMmNfYm9hcmRfaW5mbykpOwotCWluZm8uYWRkciA9IGkyY19hZGRyZXNzOwotCXN0cmxjcHkoaW5mby50eXBlLCAibmVvMTk3M19sbTQ4NTciLCBJMkNfTkFNRV9TSVpFKTsKLQotCWFkYXB0ZXIgPSBpMmNfZ2V0X2FkYXB0ZXIoaTJjX2J1cyk7Ci0JaWYgKCFhZGFwdGVyKSB7Ci0JCWRldl9lcnIoJnBkZXYtPmRldiwgImNhbid0IGdldCBpMmMgYWRhcHRlciAlZFxuIiwgaTJjX2J1cyk7Ci0JCWdvdG8gZXJyX2RyaXZlcjsKLQl9Ci0KLQljbGllbnQgPSBpMmNfbmV3X2RldmljZShhZGFwdGVyLCAmaW5mbyk7Ci0JaTJjX3B1dF9hZGFwdGVyKGFkYXB0ZXIpOwotCWlmICghY2xpZW50KSB7Ci0JCWRldl9lcnIoJnBkZXYtPmRldiwgImNhbid0IGFkZCBsbTQ4NTcgZGV2aWNlIGF0IDB4JXhcbiIsCi0JCQkodW5zaWduZWQgaW50KWluZm8uYWRkcik7Ci0JCWdvdG8gZXJyX2RyaXZlcjsKLQl9Ci0KLQlsbTQ4NTdfY2xpZW50ID0gY2xpZW50OwotCXJldHVybiAwOwotCi1lcnJfZHJpdmVyOgotCWkyY19kZWxfZHJpdmVyKCZsbTQ4NTdfaTJjX2RyaXZlcik7Ci0JcmV0dXJuIC1FTk9ERVY7Ci19CiAKIHN0YXRpYyBpbnQgX19pbml0IG5lbzE5NzNfaW5pdCh2b2lkKQogewpAQCAtNzM2LDggKzY5Nyw4IEBACiAJCXJldHVybiByZXQ7CiAJfQogCi0JcmV0ID0gbmVvMTk3M19hZGRfbG00ODU3X2RldmljZShuZW8xOTczX3NuZF9kZXZpY2UsCi0JCQkJCW5lbzE5NzNfd204NzUzX3NldHVwLCAweDdDKTsKKwlyZXQgPSBpMmNfYWRkX2RyaXZlcigmbG00ODU3X2kyY19kcml2ZXIpOworCiAJaWYgKHJldCAhPSAwKQogCQlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcihuZW8xOTczX3NuZF9kZXZpY2UpOwogCkBAIC03NDgsNyArNzA5LDYgQEAKIHsKIAlEQkcoIkVudGVyZWQgJXNcbiIsIF9fZnVuY19fKTsKIAotCWkyY191bnJlZ2lzdGVyX2RldmljZShsbTQ4NTdfY2xpZW50KTsKIAlpMmNfZGVsX2RyaXZlcigmbG00ODU3X2kyY19kcml2ZXIpOwogCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKG5lbzE5NzNfc25kX2RldmljZSk7CiB9CmRpZmYgLS1naXQgYS9zb3VuZC9zb2Mvc29jLWNvcmUuYyBiL3NvdW5kL3NvYy9zb2MtY29yZS5jCmluZGV4IGFkMzgxMTMuLjQ2MmU2MzVkIDEwMDY0NAotLS0gYS9zb3VuZC9zb2Mvc29jLWNvcmUuYworKysgYi9zb3VuZC9zb2Mvc29jLWNvcmUuYwpAQCAtNCw4ICs0LDcgQEAKICAqIENvcHlyaWdodCAyMDA1IFdvbGZzb24gTWljcm9lbGVjdHJvbmljcyBQTEMuCiAgKiBDb3B5cmlnaHQgMjAwNSBPcGVuZWRoYW5kIEx0ZC4KICAqCi0gKiBBdXRob3I6IExpYW0gR2lyZHdvb2QKLSAqICAgICAgICAgbGlhbS5naXJkd29vZEB3b2xmc29ubWljcm8uY29tIG9yIGxpbnV4QHdvbGZzb25taWNyby5jb20KKyAqIEF1dGhvcjogTGlhbSBHaXJkd29vZCA8bHJnQHNsaW1sb2dpYy5jby51az4KICAqICAgICAgICAgd2l0aCBjb2RlLCBjb21tZW50cyBhbmQgaWRlYXMgZnJvbSA6LQogICogICAgICAgICBSaWNoYXJkIFB1cmRpZSA8cmljaGFyZEBvcGVuZWRoYW5kLmNvbT4KICAqCkBAIC0xODg2LDcgKzE4ODUsNyBAQAogbW9kdWxlX2V4aXQoc25kX3NvY19leGl0KTsKIAogLyogTW9kdWxlIGluZm9ybWF0aW9uICovCi1NT0RVTEVfQVVUSE9SKCJMaWFtIEdpcmR3b29kLCBsaWFtLmdpcmR3b29kQHdvbGZzb25taWNyby5jb20sIHd3dy53b2xmc29ubWljcm8uY29tIik7CitNT0RVTEVfQVVUSE9SKCJMaWFtIEdpcmR3b29kLCBscmdAc2xpbWxvZ2ljLmNvLnVrIik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIkFMU0EgU29DIENvcmUiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIE1PRFVMRV9BTElBUygicGxhdGZvcm06c29jLWF1ZGlvIik7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2Mvc29jLWRhcG0uYyBiL3NvdW5kL3NvYy9zb2MtZGFwbS5jCmluZGV4IDljYTljMDguLjczNTFkYjkgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9zb2MtZGFwbS5jCisrKyBiL3NvdW5kL3NvYy9zb2MtZGFwbS5jCkBAIC0yLDggKzIsNyBAQAogICogc29jLWRhcG0uYyAgLS0gIEFMU0EgU29DIER5bmFtaWMgQXVkaW8gUG93ZXIgTWFuYWdlbWVudAogICoKICAqIENvcHlyaWdodCAyMDA1IFdvbGZzb24gTWljcm9lbGVjdHJvbmljcyBQTEMuCi0gKiBBdXRob3I6IExpYW0gR2lyZHdvb2QKLSAqICAgICAgICAgbGlhbS5naXJkd29vZEB3b2xmc29ubWljcm8uY29tIG9yIGxpbnV4QHdvbGZzb25taWNyby5jb20KKyAqIEF1dGhvcjogTGlhbSBHaXJkd29vZCA8bHJnQHNsaW1sb2dpYy5jby51az4KICAqCiAgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CiAgKiAgdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCkBAIC04MzIsNyArODMxLDcgQEAKIAkJcmV0dXJuIHJldDsKIAogCWFzb2NfZGVidWdmcyA9IGRlYnVnZnNfY3JlYXRlX2RpcigiYXNvYyIsIE5VTEwpOwotCWlmICghSVNfRVJSKGFzb2NfZGVidWdmcykpCisJaWYgKCFJU19FUlIoYXNvY19kZWJ1Z2ZzKSAmJiBhc29jX2RlYnVnZnMpCiAJCWRlYnVnZnNfY3JlYXRlX3UzMigiZGFwbV9wb3BfdGltZSIsIDA3NDQsIGFzb2NfZGVidWdmcywKIAkJCQkgICAmcG9wX3RpbWUpOwogCWVsc2UKQEAgLTE0ODQsNiArMTQ4MywyNiBAQAogRVhQT1JUX1NZTUJPTF9HUEwoc25kX3NvY19kYXBtX2Rpc2FibGVfcGluKTsKIAogLyoqCisgKiBzbmRfc29jX2RhcG1fbmNfcGluIC0gcGVybWFuZW50bHkgZGlzYWJsZSBwaW4uCisgKiBAY29kZWM6IFNvQyBjb2RlYworICogQHBpbjogcGluIG5hbWUKKyAqCisgKiBNYXJrcyB0aGUgc3BlY2lmaWVkIHBpbiBhcyBiZWluZyBub3QgY29ubmVjdGVkLCBkaXNhYmxpbmcgaXQgYWxvbmcKKyAqIGFueSBwYXJlbnQgb3IgY2hpbGQgd2lkZ2V0cy4gIEF0IHByZXNlbnQgdGhpcyBpcyBpZGVudGljYWwgdG8KKyAqIHNuZF9zb2NfZGFwbV9kaXNhYmxlX3BpbigpIGJ1dCBpbiBmdXR1cmUgaXQgd2lsbCBiZSBleHRlbmRlZCB0byBkbworICogYWRkaXRpb25hbCB0aGluZ3Mgc3VjaCBhcyBkaXNhYmxpbmcgY29udHJvbHMgd2hpY2ggb25seSBhZmZlY3QKKyAqIHBhdGhzIHRocm91Z2ggdGhlIHBpbi4KKyAqCisgKiBOT1RFOiBzbmRfc29jX2RhcG1fc3luYygpIG5lZWRzIHRvIGJlIGNhbGxlZCBhZnRlciB0aGlzIGZvciBEQVBNIHRvCisgKiBkbyBhbnkgd2lkZ2V0IHBvd2VyIHN3aXRjaGluZy4KKyAqLworaW50IHNuZF9zb2NfZGFwbV9uY19waW4oc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLCBjaGFyICpwaW4pCit7CisJcmV0dXJuIHNuZF9zb2NfZGFwbV9zZXRfcGluKGNvZGVjLCBwaW4sIDApOworfQorRVhQT1JUX1NZTUJPTF9HUEwoc25kX3NvY19kYXBtX25jX3Bpbik7CisKKy8qKgogICogc25kX3NvY19kYXBtX2dldF9waW5fc3RhdHVzIC0gZ2V0IGF1ZGlvIHBpbiBzdGF0dXMKICAqIEBjb2RlYzogYXVkaW8gY29kZWMKICAqIEBwaW46IGF1ZGlvIHNpZ25hbCBwaW4gZW5kcG9pbnQgKG9yIHN0YXJ0IHBvaW50KQpAQCAtMTUyMSw2ICsxNTQwLDYgQEAKIEVYUE9SVF9TWU1CT0xfR1BMKHNuZF9zb2NfZGFwbV9mcmVlKTsKIAogLyogTW9kdWxlIGluZm9ybWF0aW9uICovCi1NT0RVTEVfQVVUSE9SKCJMaWFtIEdpcmR3b29kLCBsaWFtLmdpcmR3b29kQHdvbGZzb25taWNyby5jb20sIHd3dy53b2xmc29ubWljcm8uY29tIik7CitNT0RVTEVfQVVUSE9SKCJMaWFtIEdpcmR3b29kLCBscmdAc2xpbWxvZ2ljLmNvLnVrIik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIkR5bmFtaWMgQXVkaW8gUG93ZXIgTWFuYWdlbWVudCBjb3JlIGZvciBBTFNBIFNvQyIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvc291bmQvc291bmRfY29yZS5jIGIvc291bmQvc291bmRfY29yZS5jCmluZGV4IDRhZTA3ZTIuLmZhZWY4N2EgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvdW5kX2NvcmUuYworKysgYi9zb3VuZC9zb3VuZF9jb3JlLmMKQEAgLTIyMCw5ICsyMjAsOCBAQAogCWVsc2UKIAkJc3ByaW50ZihzLT5uYW1lLCAic291bmQvJXMlZCIsIG5hbWUsIHIgLyBTT1VORF9TVEVQKTsKIAotCWRldmljZV9jcmVhdGVfZHJ2ZGF0YShzb3VuZF9jbGFzcywgZGV2LAotCQkJICAgICAgTUtERVYoU09VTkRfTUFKT1IsIHMtPnVuaXRfbWlub3IpLAotCQkJICAgICAgTlVMTCwgcy0+bmFtZSs2KTsKKwlkZXZpY2VfY3JlYXRlKHNvdW5kX2NsYXNzLCBkZXYsIE1LREVWKFNPVU5EX01BSk9SLCBzLT51bml0X21pbm9yKSwKKwkJICAgICAgTlVMTCwgcy0+bmFtZSs2KTsKIAlyZXR1cm4gcjsKIAogIGZhaWw6CmRpZmYgLS1naXQgYS9zb3VuZC91c2IvdXN4MnkvdXMxMjJsLmMgYi9zb3VuZC91c2IvdXN4MnkvdXMxMjJsLmMKaW5kZXggYjQ0MWZlMi4uYzI1MTViNiAxMDA2NDQKLS0tIGEvc291bmQvdXNiL3VzeDJ5L3VzMTIybC5jCisrKyBiL3NvdW5kL3VzYi91c3gyeS91czEyMmwuYwpAQCAtMTE4LDEyICsxMTgsMTEgQEAKIAl2b2lkICp2YWRkcjsKIAlzdHJ1Y3QgdXMxMjJsICp1czEyMmwgPSBhcmVhLT52bV9wcml2YXRlX2RhdGE7CiAJc3RydWN0IHVzYl9zdHJlYW0gKnM7Ci0JaW50IHZtX2YgPSBWTV9GQVVMVF9TSUdCVVM7CiAKIAltdXRleF9sb2NrKCZ1czEyMmwtPm11dGV4KTsKIAlzID0gdXMxMjJsLT5zay5zOwogCWlmICghcykKLQkJZ290byBvdXQ7CisJCWdvdG8gdW5sb2NrOwogCiAJb2Zmc2V0ID0gdm1mLT5wZ29mZiA8PCBQQUdFX1NISUZUOwogCWlmIChvZmZzZXQgPCBQQUdFX0FMSUdOKHMtPnJlYWRfc2l6ZSkpCkBAIC0xMzEsNyArMTMwLDcgQEAKIAllbHNlIHsKIAkJb2Zmc2V0IC09IFBBR0VfQUxJR04ocy0+cmVhZF9zaXplKTsKIAkJaWYgKG9mZnNldCA+PSBQQUdFX0FMSUdOKHMtPndyaXRlX3NpemUpKQotCQkJZ290byBvdXQ7CisJCQlnb3RvIHVubG9jazsKIAogCQl2YWRkciA9IHVzMTIybC0+c2sud3JpdGVfcGFnZSArIG9mZnNldDsKIAl9CkBAIC0xNDEsOSArMTQwLDExIEBACiAJbXV0ZXhfdW5sb2NrKCZ1czEyMmwtPm11dGV4KTsKIAogCXZtZi0+cGFnZSA9IHBhZ2U7Ci0Jdm1fZiA9IDA7Ci1vdXQ6Ci0JcmV0dXJuIHZtX2Y7CisKKwlyZXR1cm4gMDsKK3VubG9jazoKKwltdXRleF91bmxvY2soJnVzMTIybC0+bXV0ZXgpOworCXJldHVybiBWTV9GQVVMVF9TSUdCVVM7CiB9CiAKIHN0YXRpYyB2b2lkIHVzYl9zdHJlYW1faHdkZXBfdm1fY2xvc2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICphcmVhKQpkaWZmIC0tZ2l0IGEvdmlydC9rdm0vaW9hcGljLmMgYi92aXJ0L2t2bS9pb2FwaWMuYwppbmRleCBjMGQyMjg3Li41Mzc3MmJiIDEwMDY0NAotLS0gYS92aXJ0L2t2bS9pb2FwaWMuYworKysgYi92aXJ0L2t2bS9pb2FwaWMuYwpAQCAtMzksNiArMzksNyBAQAogCiAjaW5jbHVkZSAiaW9hcGljLmgiCiAjaW5jbHVkZSAibGFwaWMuaCIKKyNpbmNsdWRlICJpcnEuaCIKIAogI2lmIDAKICNkZWZpbmUgaW9hcGljX2RlYnVnKGZtdCxhcmcuLi4pIHByaW50ayhLRVJOX1dBUk5JTkcgZm10LCMjYXJnKQpAQCAtMjg1LDI2ICsyODYsMzEgQEAKIAl9CiB9CiAKLXN0YXRpYyB2b2lkIF9fa3ZtX2lvYXBpY191cGRhdGVfZW9pKHN0cnVjdCBrdm1faW9hcGljICppb2FwaWMsIGludCBnc2kpCitzdGF0aWMgdm9pZCBfX2t2bV9pb2FwaWNfdXBkYXRlX2VvaShzdHJ1Y3Qga3ZtX2lvYXBpYyAqaW9hcGljLCBpbnQgZ3NpLAorCQkJCSAgICBpbnQgdHJpZ2dlcl9tb2RlKQogewogCXVuaW9uIGlvYXBpY19yZWRpcl9lbnRyeSAqZW50OwogCiAJZW50ID0gJmlvYXBpYy0+cmVkaXJ0YmxbZ3NpXTsKLQlBU1NFUlQoZW50LT5maWVsZHMudHJpZ19tb2RlID09IElPQVBJQ19MRVZFTF9UUklHKTsKIAotCWVudC0+ZmllbGRzLnJlbW90ZV9pcnIgPSAwOwotCWlmICghZW50LT5maWVsZHMubWFzayAmJiAoaW9hcGljLT5pcnIgJiAoMSA8PCBnc2kpKSkKLQkJaW9hcGljX3NlcnZpY2UoaW9hcGljLCBnc2kpOworCWt2bV9ub3RpZnlfYWNrZWRfaXJxKGlvYXBpYy0+a3ZtLCBnc2kpOworCisJaWYgKHRyaWdnZXJfbW9kZSA9PSBJT0FQSUNfTEVWRUxfVFJJRykgeworCQlBU1NFUlQoZW50LT5maWVsZHMudHJpZ19tb2RlID09IElPQVBJQ19MRVZFTF9UUklHKTsKKwkJZW50LT5maWVsZHMucmVtb3RlX2lyciA9IDA7CisJCWlmICghZW50LT5maWVsZHMubWFzayAmJiAoaW9hcGljLT5pcnIgJiAoMSA8PCBnc2kpKSkKKwkJCWlvYXBpY19zZXJ2aWNlKGlvYXBpYywgZ3NpKTsKKwl9CiB9CiAKLXZvaWQga3ZtX2lvYXBpY191cGRhdGVfZW9pKHN0cnVjdCBrdm0gKmt2bSwgaW50IHZlY3RvcikKK3ZvaWQga3ZtX2lvYXBpY191cGRhdGVfZW9pKHN0cnVjdCBrdm0gKmt2bSwgaW50IHZlY3RvciwgaW50IHRyaWdnZXJfbW9kZSkKIHsKIAlzdHJ1Y3Qga3ZtX2lvYXBpYyAqaW9hcGljID0ga3ZtLT5hcmNoLnZpb2FwaWM7CiAJaW50IGk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgSU9BUElDX05VTV9QSU5TOyBpKyspCiAJCWlmIChpb2FwaWMtPnJlZGlydGJsW2ldLmZpZWxkcy52ZWN0b3IgPT0gdmVjdG9yKQotCQkJX19rdm1faW9hcGljX3VwZGF0ZV9lb2koaW9hcGljLCBpKTsKKwkJCV9fa3ZtX2lvYXBpY191cGRhdGVfZW9pKGlvYXBpYywgaSwgdHJpZ2dlcl9tb2RlKTsKIH0KIAogc3RhdGljIGludCBpb2FwaWNfaW5fcmFuZ2Uoc3RydWN0IGt2bV9pb19kZXZpY2UgKnRoaXMsIGdwYV90IGFkZHIsCkBAIC0zODAsNyArMzg2LDcgQEAKIAkJYnJlYWs7CiAjaWZkZWYJQ09ORklHX0lBNjQKIAljYXNlIElPQVBJQ19SRUdfRU9JOgotCQlrdm1faW9hcGljX3VwZGF0ZV9lb2koaW9hcGljLT5rdm0sIGRhdGEpOworCQlrdm1faW9hcGljX3VwZGF0ZV9lb2koaW9hcGljLT5rdm0sIGRhdGEsIElPQVBJQ19MRVZFTF9UUklHKTsKIAkJYnJlYWs7CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvdmlydC9rdm0vaW9hcGljLmggYi92aXJ0L2t2bS9pb2FwaWMuaAppbmRleCA3ZjE2Njc1Li5jZDdhZTc2IDEwMDY0NAotLS0gYS92aXJ0L2t2bS9pb2FwaWMuaAorKysgYi92aXJ0L2t2bS9pb2FwaWMuaApAQCAtNTgsNiArNTgsNyBAQAogCX0gcmVkaXJ0YmxbSU9BUElDX05VTV9QSU5TXTsKIAlzdHJ1Y3Qga3ZtX2lvX2RldmljZSBkZXY7CiAJc3RydWN0IGt2bSAqa3ZtOworCXZvaWQgKCphY2tfbm90aWZpZXIpKHZvaWQgKm9wYXF1ZSwgaW50IGlycSk7CiB9OwogCiAjaWZkZWYgREVCVUcKQEAgLTc4LDE2ICs3OSw5IEBACiAJcmV0dXJuIGt2bS0+YXJjaC52aW9hcGljOwogfQogCi0jaWZkZWYgQ09ORklHX0lBNjQKLXN0YXRpYyBpbmxpbmUgaW50IGlycWNoaXBfaW5fa2VybmVsKHN0cnVjdCBrdm0gKmt2bSkKLXsKLQlyZXR1cm4gMTsKLX0KLSNlbmRpZgotCiBzdHJ1Y3Qga3ZtX3ZjcHUgKmt2bV9nZXRfbG93ZXN0X3ByaW9fdmNwdShzdHJ1Y3Qga3ZtICprdm0sIHU4IHZlY3RvciwKIAkJCQkgICAgICAgdW5zaWduZWQgbG9uZyBiaXRtYXApOwotdm9pZCBrdm1faW9hcGljX3VwZGF0ZV9lb2koc3RydWN0IGt2bSAqa3ZtLCBpbnQgdmVjdG9yKTsKK3ZvaWQga3ZtX2lvYXBpY191cGRhdGVfZW9pKHN0cnVjdCBrdm0gKmt2bSwgaW50IHZlY3RvciwgaW50IHRyaWdnZXJfbW9kZSk7CiBpbnQga3ZtX2lvYXBpY19pbml0KHN0cnVjdCBrdm0gKmt2bSk7CiB2b2lkIGt2bV9pb2FwaWNfc2V0X2lycShzdHJ1Y3Qga3ZtX2lvYXBpYyAqaW9hcGljLCBpbnQgaXJxLCBpbnQgbGV2ZWwpOwogdm9pZCBrdm1faW9hcGljX3Jlc2V0KHN0cnVjdCBrdm1faW9hcGljICppb2FwaWMpOwpkaWZmIC0tZ2l0IGEvdmlydC9rdm0vaXJxX2NvbW0uYyBiL3ZpcnQva3ZtL2lycV9jb21tLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDAxNjlmNQotLS0gL2Rldi9udWxsCisrKyBiL3ZpcnQva3ZtL2lycV9jb21tLmMKQEAgLTAsMCArMSw2MCBAQAorLyoKKyAqIGlycV9jb21tLmM6IENvbW1vbiBBUEkgZm9yIGluIGtlcm5lbCBpbnRlcnJ1cHQgY29udHJvbGxlcgorICogQ29weXJpZ2h0IChjKSAyMDA3LCBJbnRlbCBDb3Jwb3JhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKKyAqIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAorICogdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZQorICogUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EuCisgKiBBdXRob3JzOgorICogICBZYW96dSAoRWRkaWUpIERvbmcgPEVkZGllLmRvbmdAaW50ZWwuY29tPgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgva3ZtX2hvc3QuaD4KKyNpbmNsdWRlICJpcnEuaCIKKworI2luY2x1ZGUgImlvYXBpYy5oIgorCisvKiBUaGlzIHNob3VsZCBiZSBjYWxsZWQgd2l0aCB0aGUga3ZtLT5sb2NrIG11dGV4IGhlbGQgKi8KK3ZvaWQga3ZtX3NldF9pcnEoc3RydWN0IGt2bSAqa3ZtLCBpbnQgaXJxLCBpbnQgbGV2ZWwpCit7CisJLyogTm90IHBvc3NpYmxlIHRvIGRldGVjdCBpZiB0aGUgZ3Vlc3QgdXNlcyB0aGUgUElDIG9yIHRoZQorCSAqIElPQVBJQy4gIFNvIHNldCB0aGUgYml0IGluIGJvdGguIFRoZSBndWVzdCB3aWxsIGlnbm9yZQorCSAqIHdyaXRlcyB0byB0aGUgdW51c2VkIG9uZS4KKwkgKi8KKwlrdm1faW9hcGljX3NldF9pcnEoa3ZtLT5hcmNoLnZpb2FwaWMsIGlycSwgbGV2ZWwpOworI2lmZGVmIENPTkZJR19YODYKKwlrdm1fcGljX3NldF9pcnEocGljX2lycWNoaXAoa3ZtKSwgaXJxLCBsZXZlbCk7CisjZW5kaWYKK30KKwordm9pZCBrdm1fbm90aWZ5X2Fja2VkX2lycShzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGdzaSkKK3sKKwlzdHJ1Y3Qga3ZtX2lycV9hY2tfbm90aWZpZXIgKmtpYW47CisJc3RydWN0IGhsaXN0X25vZGUgKm47CisKKwlobGlzdF9mb3JfZWFjaF9lbnRyeShraWFuLCBuLCAma3ZtLT5hcmNoLmlycV9hY2tfbm90aWZpZXJfbGlzdCwgbGluaykKKwkJaWYgKGtpYW4tPmdzaSA9PSBnc2kpCisJCQlraWFuLT5pcnFfYWNrZWQoa2lhbik7Cit9CisKK3ZvaWQga3ZtX3JlZ2lzdGVyX2lycV9hY2tfbm90aWZpZXIoc3RydWN0IGt2bSAqa3ZtLAorCQkJCSAgIHN0cnVjdCBrdm1faXJxX2Fja19ub3RpZmllciAqa2lhbikKK3sKKwlobGlzdF9hZGRfaGVhZCgma2lhbi0+bGluaywgJmt2bS0+YXJjaC5pcnFfYWNrX25vdGlmaWVyX2xpc3QpOworfQorCit2b2lkIGt2bV91bnJlZ2lzdGVyX2lycV9hY2tfbm90aWZpZXIoc3RydWN0IGt2bSAqa3ZtLAorCQkJCSAgICAgc3RydWN0IGt2bV9pcnFfYWNrX25vdGlmaWVyICpraWFuKQoreworCWhsaXN0X2RlbCgma2lhbi0+bGluayk7Cit9CmRpZmYgLS1naXQgYS92aXJ0L2t2bS9rdm1fbWFpbi5jIGIvdmlydC9rdm0va3ZtX21haW4uYwppbmRleCA3ZGQ5YjBiLi5jZjBhYjhlIDEwMDY0NAotLS0gYS92aXJ0L2t2bS9rdm1fbWFpbi5jCisrKyBiL3ZpcnQva3ZtL2t2bV9tYWluLmMKQEAgLTUxLDYgKzUxLDEyIEBACiAjaW5jbHVkZSAiY29hbGVzY2VkX21taW8uaCIKICNlbmRpZgogCisjaWZkZWYgS1ZNX0NBUF9ERVZJQ0VfQVNTSUdOTUVOVAorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgImlycS5oIgorI2VuZGlmCisKIE1PRFVMRV9BVVRIT1IoIlF1bXJhbmV0Iik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKQEAgLTcxLDExICs3NywyNTMgQEAKIAogYm9vbCBrdm1fcmVib290aW5nOwogCisjaWZkZWYgS1ZNX0NBUF9ERVZJQ0VfQVNTSUdOTUVOVAorc3RhdGljIHN0cnVjdCBrdm1fYXNzaWduZWRfZGV2X2tlcm5lbCAqa3ZtX2ZpbmRfYXNzaWduZWRfZGV2KHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQsCisJCQkJCQkgICAgICBpbnQgYXNzaWduZWRfZGV2X2lkKQoreworCXN0cnVjdCBsaXN0X2hlYWQgKnB0cjsKKwlzdHJ1Y3Qga3ZtX2Fzc2lnbmVkX2Rldl9rZXJuZWwgKm1hdGNoOworCisJbGlzdF9mb3JfZWFjaChwdHIsIGhlYWQpIHsKKwkJbWF0Y2ggPSBsaXN0X2VudHJ5KHB0ciwgc3RydWN0IGt2bV9hc3NpZ25lZF9kZXZfa2VybmVsLCBsaXN0KTsKKwkJaWYgKG1hdGNoLT5hc3NpZ25lZF9kZXZfaWQgPT0gYXNzaWduZWRfZGV2X2lkKQorCQkJcmV0dXJuIG1hdGNoOworCX0KKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIHZvaWQga3ZtX2Fzc2lnbmVkX2Rldl9pbnRlcnJ1cHRfd29ya19oYW5kbGVyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3Qga3ZtX2Fzc2lnbmVkX2Rldl9rZXJuZWwgKmFzc2lnbmVkX2RldjsKKworCWFzc2lnbmVkX2RldiA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3Qga3ZtX2Fzc2lnbmVkX2Rldl9rZXJuZWwsCisJCQkJICAgIGludGVycnVwdF93b3JrKTsKKworCS8qIFRoaXMgaXMgdGFrZW4gdG8gc2FmZWx5IGluamVjdCBpcnEgaW5zaWRlIHRoZSBndWVzdC4gV2hlbgorCSAqIHRoZSBpbnRlcnJ1cHQgaW5qZWN0aW9uIChvciB0aGUgaW9hcGljIGNvZGUpIHVzZXMgYQorCSAqIGZpbmVyLWdyYWluZWQgbG9jaywgdXBkYXRlIHRoaXMKKwkgKi8KKwltdXRleF9sb2NrKCZhc3NpZ25lZF9kZXYtPmt2bS0+bG9jayk7CisJa3ZtX3NldF9pcnEoYXNzaWduZWRfZGV2LT5rdm0sCisJCSAgICBhc3NpZ25lZF9kZXYtPmd1ZXN0X2lycSwgMSk7CisJbXV0ZXhfdW5sb2NrKCZhc3NpZ25lZF9kZXYtPmt2bS0+bG9jayk7CisJa3ZtX3B1dF9rdm0oYXNzaWduZWRfZGV2LT5rdm0pOworfQorCisvKiBGSVhNRTogSW1wbGVtZW50IHRoZSBPUiBsb2dpYyBuZWVkZWQgdG8gbWFrZSBzaGFyZWQgaW50ZXJydXB0cyBvbgorICogdGhpcyBsaW5lIGJlaGF2ZSBwcm9wZXJseQorICovCitzdGF0aWMgaXJxcmV0dXJuX3Qga3ZtX2Fzc2lnbmVkX2Rldl9pbnRyKGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3sKKwlzdHJ1Y3Qga3ZtX2Fzc2lnbmVkX2Rldl9rZXJuZWwgKmFzc2lnbmVkX2RldiA9CisJCShzdHJ1Y3Qga3ZtX2Fzc2lnbmVkX2Rldl9rZXJuZWwgKikgZGV2X2lkOworCisJa3ZtX2dldF9rdm0oYXNzaWduZWRfZGV2LT5rdm0pOworCXNjaGVkdWxlX3dvcmsoJmFzc2lnbmVkX2Rldi0+aW50ZXJydXB0X3dvcmspOworCWRpc2FibGVfaXJxX25vc3luYyhpcnEpOworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworLyogQWNrIHRoZSBpcnEgbGluZSBmb3IgYW4gYXNzaWduZWQgZGV2aWNlICovCitzdGF0aWMgdm9pZCBrdm1fYXNzaWduZWRfZGV2X2Fja19pcnEoc3RydWN0IGt2bV9pcnFfYWNrX25vdGlmaWVyICpraWFuKQoreworCXN0cnVjdCBrdm1fYXNzaWduZWRfZGV2X2tlcm5lbCAqZGV2OworCisJaWYgKGtpYW4tPmdzaSA9PSAtMSkKKwkJcmV0dXJuOworCisJZGV2ID0gY29udGFpbmVyX29mKGtpYW4sIHN0cnVjdCBrdm1fYXNzaWduZWRfZGV2X2tlcm5lbCwKKwkJCSAgIGFja19ub3RpZmllcik7CisJa3ZtX3NldF9pcnEoZGV2LT5rdm0sIGRldi0+Z3Vlc3RfaXJxLCAwKTsKKwllbmFibGVfaXJxKGRldi0+aG9zdF9pcnEpOworfQorCitzdGF0aWMgdm9pZCBrdm1fZnJlZV9hc3NpZ25lZF9kZXZpY2Uoc3RydWN0IGt2bSAqa3ZtLAorCQkJCSAgICAgc3RydWN0IGt2bV9hc3NpZ25lZF9kZXZfa2VybmVsCisJCQkJICAgICAqYXNzaWduZWRfZGV2KQoreworCWlmIChpcnFjaGlwX2luX2tlcm5lbChrdm0pICYmIGFzc2lnbmVkX2Rldi0+aXJxX3JlcXVlc3RlZCkKKwkJZnJlZV9pcnEoYXNzaWduZWRfZGV2LT5ob3N0X2lycSwgKHZvaWQgKilhc3NpZ25lZF9kZXYpOworCisJa3ZtX3VucmVnaXN0ZXJfaXJxX2Fja19ub3RpZmllcihrdm0sICZhc3NpZ25lZF9kZXYtPmFja19ub3RpZmllcik7CisKKwlpZiAoY2FuY2VsX3dvcmtfc3luYygmYXNzaWduZWRfZGV2LT5pbnRlcnJ1cHRfd29yaykpCisJCS8qIFdlIGhhZCBwZW5kaW5nIHdvcmsuIFRoYXQgbWVhbnMgd2Ugd2lsbCBoYXZlIHRvIHRha2UKKwkJICogY2FyZSBvZiBrdm1fcHV0X2t2bS4KKwkJICovCisJCWt2bV9wdXRfa3ZtKGt2bSk7CisKKwlwY2lfcmVsZWFzZV9yZWdpb25zKGFzc2lnbmVkX2Rldi0+ZGV2KTsKKwlwY2lfZGlzYWJsZV9kZXZpY2UoYXNzaWduZWRfZGV2LT5kZXYpOworCXBjaV9kZXZfcHV0KGFzc2lnbmVkX2Rldi0+ZGV2KTsKKworCWxpc3RfZGVsKCZhc3NpZ25lZF9kZXYtPmxpc3QpOworCWtmcmVlKGFzc2lnbmVkX2Rldik7Cit9CisKK3ZvaWQga3ZtX2ZyZWVfYWxsX2Fzc2lnbmVkX2RldmljZXMoc3RydWN0IGt2bSAqa3ZtKQoreworCXN0cnVjdCBsaXN0X2hlYWQgKnB0ciwgKnB0cjI7CisJc3RydWN0IGt2bV9hc3NpZ25lZF9kZXZfa2VybmVsICphc3NpZ25lZF9kZXY7CisKKwlsaXN0X2Zvcl9lYWNoX3NhZmUocHRyLCBwdHIyLCAma3ZtLT5hcmNoLmFzc2lnbmVkX2Rldl9oZWFkKSB7CisJCWFzc2lnbmVkX2RldiA9IGxpc3RfZW50cnkocHRyLAorCQkJCQkgIHN0cnVjdCBrdm1fYXNzaWduZWRfZGV2X2tlcm5lbCwKKwkJCQkJICBsaXN0KTsKKworCQlrdm1fZnJlZV9hc3NpZ25lZF9kZXZpY2Uoa3ZtLCBhc3NpZ25lZF9kZXYpOworCX0KK30KKworc3RhdGljIGludCBrdm1fdm1faW9jdGxfYXNzaWduX2lycShzdHJ1Y3Qga3ZtICprdm0sCisJCQkJICAgc3RydWN0IGt2bV9hc3NpZ25lZF9pcnEKKwkJCQkgICAqYXNzaWduZWRfaXJxKQoreworCWludCByID0gMDsKKwlzdHJ1Y3Qga3ZtX2Fzc2lnbmVkX2Rldl9rZXJuZWwgKm1hdGNoOworCisJbXV0ZXhfbG9jaygma3ZtLT5sb2NrKTsKKworCW1hdGNoID0ga3ZtX2ZpbmRfYXNzaWduZWRfZGV2KCZrdm0tPmFyY2guYXNzaWduZWRfZGV2X2hlYWQsCisJCQkJICAgICAgYXNzaWduZWRfaXJxLT5hc3NpZ25lZF9kZXZfaWQpOworCWlmICghbWF0Y2gpIHsKKwkJbXV0ZXhfdW5sb2NrKCZrdm0tPmxvY2spOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAobWF0Y2gtPmlycV9yZXF1ZXN0ZWQpIHsKKwkJbWF0Y2gtPmd1ZXN0X2lycSA9IGFzc2lnbmVkX2lycS0+Z3Vlc3RfaXJxOworCQltYXRjaC0+YWNrX25vdGlmaWVyLmdzaSA9IGFzc2lnbmVkX2lycS0+Z3Vlc3RfaXJxOworCQltdXRleF91bmxvY2soJmt2bS0+bG9jayk7CisJCXJldHVybiAwOworCX0KKworCUlOSVRfV09SSygmbWF0Y2gtPmludGVycnVwdF93b3JrLAorCQkgIGt2bV9hc3NpZ25lZF9kZXZfaW50ZXJydXB0X3dvcmtfaGFuZGxlcik7CisKKwlpZiAoaXJxY2hpcF9pbl9rZXJuZWwoa3ZtKSkgeworCQlpZiAoIWNhcGFibGUoQ0FQX1NZU19SQVdJTykpIHsKKwkJCXIgPSAtRVBFUk07CisJCQlnb3RvIG91dF9yZWxlYXNlOworCQl9CisKKwkJaWYgKGFzc2lnbmVkX2lycS0+aG9zdF9pcnEpCisJCQltYXRjaC0+aG9zdF9pcnEgPSBhc3NpZ25lZF9pcnEtPmhvc3RfaXJxOworCQllbHNlCisJCQltYXRjaC0+aG9zdF9pcnEgPSBtYXRjaC0+ZGV2LT5pcnE7CisJCW1hdGNoLT5ndWVzdF9pcnEgPSBhc3NpZ25lZF9pcnEtPmd1ZXN0X2lycTsKKwkJbWF0Y2gtPmFja19ub3RpZmllci5nc2kgPSBhc3NpZ25lZF9pcnEtPmd1ZXN0X2lycTsKKwkJbWF0Y2gtPmFja19ub3RpZmllci5pcnFfYWNrZWQgPSBrdm1fYXNzaWduZWRfZGV2X2Fja19pcnE7CisJCWt2bV9yZWdpc3Rlcl9pcnFfYWNrX25vdGlmaWVyKGt2bSwgJm1hdGNoLT5hY2tfbm90aWZpZXIpOworCisJCS8qIEV2ZW4gdGhvdWdoIHRoaXMgaXMgUENJLCB3ZSBkb24ndCB3YW50IHRvIHVzZSBzaGFyZWQKKwkJICogaW50ZXJydXB0cy4gU2hhcmluZyBob3N0IGRldmljZXMgd2l0aCBndWVzdC1hc3NpZ25lZCBkZXZpY2VzCisJCSAqIG9uIHRoZSBzYW1lIGludGVycnVwdCBsaW5lIGlzIG5vdCBhIGhhcHB5IHNpdHVhdGlvbjogdGhlcmUKKwkJICogYXJlIGdvaW5nIHRvIGJlIGxvbmcgZGVsYXlzIGluIGFjY2VwdGluZywgYWNraW5nLCBldGMuCisJCSAqLworCQlpZiAocmVxdWVzdF9pcnEobWF0Y2gtPmhvc3RfaXJxLCBrdm1fYXNzaWduZWRfZGV2X2ludHIsIDAsCisJCQkJImt2bV9hc3NpZ25lZF9kZXZpY2UiLCAodm9pZCAqKW1hdGNoKSkgeworCQkJciA9IC1FSU87CisJCQlnb3RvIG91dF9yZWxlYXNlOworCQl9CisJfQorCisJbWF0Y2gtPmlycV9yZXF1ZXN0ZWQgPSB0cnVlOworCW11dGV4X3VubG9jaygma3ZtLT5sb2NrKTsKKwlyZXR1cm4gcjsKK291dF9yZWxlYXNlOgorCW11dGV4X3VubG9jaygma3ZtLT5sb2NrKTsKKwlrdm1fZnJlZV9hc3NpZ25lZF9kZXZpY2Uoa3ZtLCBtYXRjaCk7CisJcmV0dXJuIHI7Cit9CisKK3N0YXRpYyBpbnQga3ZtX3ZtX2lvY3RsX2Fzc2lnbl9kZXZpY2Uoc3RydWN0IGt2bSAqa3ZtLAorCQkJCSAgICAgIHN0cnVjdCBrdm1fYXNzaWduZWRfcGNpX2RldiAqYXNzaWduZWRfZGV2KQoreworCWludCByID0gMDsKKwlzdHJ1Y3Qga3ZtX2Fzc2lnbmVkX2Rldl9rZXJuZWwgKm1hdGNoOworCXN0cnVjdCBwY2lfZGV2ICpkZXY7CisKKwltdXRleF9sb2NrKCZrdm0tPmxvY2spOworCisJbWF0Y2ggPSBrdm1fZmluZF9hc3NpZ25lZF9kZXYoJmt2bS0+YXJjaC5hc3NpZ25lZF9kZXZfaGVhZCwKKwkJCQkgICAgICBhc3NpZ25lZF9kZXYtPmFzc2lnbmVkX2Rldl9pZCk7CisJaWYgKG1hdGNoKSB7CisJCS8qIGRldmljZSBhbHJlYWR5IGFzc2lnbmVkICovCisJCXIgPSAtRUlOVkFMOworCQlnb3RvIG91dDsKKwl9CisKKwltYXRjaCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBrdm1fYXNzaWduZWRfZGV2X2tlcm5lbCksIEdGUF9LRVJORUwpOworCWlmIChtYXRjaCA9PSBOVUxMKSB7CisJCXByaW50ayhLRVJOX0lORk8gIiVzOiBDb3VsZG4ndCBhbGxvY2F0ZSBtZW1vcnlcbiIsCisJCSAgICAgICBfX2Z1bmNfXyk7CisJCXIgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKKwl9CisJZGV2ID0gcGNpX2dldF9idXNfYW5kX3Nsb3QoYXNzaWduZWRfZGV2LT5idXNuciwKKwkJCQkgICBhc3NpZ25lZF9kZXYtPmRldmZuKTsKKwlpZiAoIWRldikgeworCQlwcmludGsoS0VSTl9JTkZPICIlczogaG9zdCBkZXZpY2Ugbm90IGZvdW5kXG4iLCBfX2Z1bmNfXyk7CisJCXIgPSAtRUlOVkFMOworCQlnb3RvIG91dF9mcmVlOworCX0KKwlpZiAocGNpX2VuYWJsZV9kZXZpY2UoZGV2KSkgeworCQlwcmludGsoS0VSTl9JTkZPICIlczogQ291bGQgbm90IGVuYWJsZSBQQ0kgZGV2aWNlXG4iLCBfX2Z1bmNfXyk7CisJCXIgPSAtRUJVU1k7CisJCWdvdG8gb3V0X3B1dDsKKwl9CisJciA9IHBjaV9yZXF1ZXN0X3JlZ2lvbnMoZGV2LCAia3ZtX2Fzc2lnbmVkX2RldmljZSIpOworCWlmIChyKSB7CisJCXByaW50ayhLRVJOX0lORk8gIiVzOiBDb3VsZCBub3QgZ2V0IGFjY2VzcyB0byBkZXZpY2UgcmVnaW9uc1xuIiwKKwkJICAgICAgIF9fZnVuY19fKTsKKwkJZ290byBvdXRfZGlzYWJsZTsKKwl9CisJbWF0Y2gtPmFzc2lnbmVkX2Rldl9pZCA9IGFzc2lnbmVkX2Rldi0+YXNzaWduZWRfZGV2X2lkOworCW1hdGNoLT5ob3N0X2J1c25yID0gYXNzaWduZWRfZGV2LT5idXNucjsKKwltYXRjaC0+aG9zdF9kZXZmbiA9IGFzc2lnbmVkX2Rldi0+ZGV2Zm47CisJbWF0Y2gtPmRldiA9IGRldjsKKworCW1hdGNoLT5rdm0gPSBrdm07CisKKwlsaXN0X2FkZCgmbWF0Y2gtPmxpc3QsICZrdm0tPmFyY2guYXNzaWduZWRfZGV2X2hlYWQpOworCisJaWYgKGFzc2lnbmVkX2Rldi0+ZmxhZ3MgJiBLVk1fREVWX0FTU0lHTl9FTkFCTEVfSU9NTVUpIHsKKwkJciA9IGt2bV9pb21tdV9tYXBfZ3Vlc3Qoa3ZtLCBtYXRjaCk7CisJCWlmIChyKQorCQkJZ290byBvdXRfbGlzdF9kZWw7CisJfQorCitvdXQ6CisJbXV0ZXhfdW5sb2NrKCZrdm0tPmxvY2spOworCXJldHVybiByOworb3V0X2xpc3RfZGVsOgorCWxpc3RfZGVsKCZtYXRjaC0+bGlzdCk7CisJcGNpX3JlbGVhc2VfcmVnaW9ucyhkZXYpOworb3V0X2Rpc2FibGU6CisJcGNpX2Rpc2FibGVfZGV2aWNlKGRldik7CitvdXRfcHV0OgorCXBjaV9kZXZfcHV0KGRldik7CitvdXRfZnJlZToKKwlrZnJlZShtYXRjaCk7CisJbXV0ZXhfdW5sb2NrKCZrdm0tPmxvY2spOworCXJldHVybiByOworfQorI2VuZGlmCisKIHN0YXRpYyBpbmxpbmUgaW50IHZhbGlkX3ZjcHUoaW50IG4pCiB7CiAJcmV0dXJuIGxpa2VseShuID49IDAgJiYgbiA8IEtWTV9NQVhfVkNQVVMpOwogfQogCitpbmxpbmUgaW50IGt2bV9pc19tbWlvX3BmbihwZm5fdCBwZm4pCit7CisJaWYgKHBmbl92YWxpZChwZm4pKQorCQlyZXR1cm4gUGFnZVJlc2VydmVkKHBmbl90b19wYWdlKHBmbikpOworCisJcmV0dXJuIHRydWU7Cit9CisKIC8qCiAgKiBTd2l0Y2hlcyB0byBzcGVjaWZpZWQgdmNwdSwgdW50aWwgYSBtYXRjaGluZyB2Y3B1X3B1dCgpCiAgKi8KQEAgLTU3MCw2ICs4MTgsMTIgQEAKIAl9CiAKIAlrdm1fZnJlZV9waHlzbWVtX3Nsb3QoJm9sZCwgJm5ldyk7CisjaWZkZWYgQ09ORklHX0RNQVIKKwkvKiBtYXAgdGhlIHBhZ2VzIGluIGlvbW11IHBhZ2UgdGFibGUgKi8KKwlyID0ga3ZtX2lvbW11X21hcF9wYWdlcyhrdm0sIGJhc2VfZ2ZuLCBucGFnZXMpOworCWlmIChyKQorCQlnb3RvIG91dDsKKyNlbmRpZgogCXJldHVybiAwOwogCiBvdXRfZnJlZToKQEAgLTcwOCw5ICs5NjIsNiBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwoZ2ZuX3RvX2h2YSk7CiAKLS8qCi0gKiBSZXF1aXJlcyBjdXJyZW50LT5tbS0+bW1hcF9zZW0gdG8gYmUgaGVsZAotICovCiBwZm5fdCBnZm5fdG9fcGZuKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuKQogewogCXN0cnVjdCBwYWdlICpwYWdlWzFdOwpAQCAtNzI2LDIxICs5NzcsMjQgQEAKIAkJcmV0dXJuIHBhZ2VfdG9fcGZuKGJhZF9wYWdlKTsKIAl9CiAKLQlucGFnZXMgPSBnZXRfdXNlcl9wYWdlcyhjdXJyZW50LCBjdXJyZW50LT5tbSwgYWRkciwgMSwgMSwgMSwgcGFnZSwKLQkJCQlOVUxMKTsKKwlucGFnZXMgPSBnZXRfdXNlcl9wYWdlc19mYXN0KGFkZHIsIDEsIDEsIHBhZ2UpOwogCiAJaWYgKHVubGlrZWx5KG5wYWdlcyAhPSAxKSkgewogCQlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTsKIAorCQlkb3duX3JlYWQoJmN1cnJlbnQtPm1tLT5tbWFwX3NlbSk7CiAJCXZtYSA9IGZpbmRfdm1hKGN1cnJlbnQtPm1tLCBhZGRyKTsKKwogCQlpZiAodm1hID09IE5VTEwgfHwgYWRkciA8IHZtYS0+dm1fc3RhcnQgfHwKIAkJICAgICEodm1hLT52bV9mbGFncyAmIFZNX1BGTk1BUCkpIHsKKwkJCXVwX3JlYWQoJmN1cnJlbnQtPm1tLT5tbWFwX3NlbSk7CiAJCQlnZXRfcGFnZShiYWRfcGFnZSk7CiAJCQlyZXR1cm4gcGFnZV90b19wZm4oYmFkX3BhZ2UpOwogCQl9CiAKIAkJcGZuID0gKChhZGRyIC0gdm1hLT52bV9zdGFydCkgPj4gUEFHRV9TSElGVCkgKyB2bWEtPnZtX3Bnb2ZmOwotCQlCVUdfT04ocGZuX3ZhbGlkKHBmbikpOworCQl1cF9yZWFkKCZjdXJyZW50LT5tbS0+bW1hcF9zZW0pOworCQlCVUdfT04oIWt2bV9pc19tbWlvX3BmbihwZm4pKTsKIAl9IGVsc2UKIAkJcGZuID0gcGFnZV90b19wZm4ocGFnZVswXSk7CiAKQEAgLTc1NCwxMCArMTAwOCwxMCBAQAogCXBmbl90IHBmbjsKIAogCXBmbiA9IGdmbl90b19wZm4oa3ZtLCBnZm4pOwotCWlmIChwZm5fdmFsaWQocGZuKSkKKwlpZiAoIWt2bV9pc19tbWlvX3BmbihwZm4pKQogCQlyZXR1cm4gcGZuX3RvX3BhZ2UocGZuKTsKIAotCVdBUk5fT04oIXBmbl92YWxpZChwZm4pKTsKKwlXQVJOX09OKGt2bV9pc19tbWlvX3BmbihwZm4pKTsKIAogCWdldF9wYWdlKGJhZF9wYWdlKTsKIAlyZXR1cm4gYmFkX3BhZ2U7CkBAIC03NzMsNyArMTAyNyw3IEBACiAKIHZvaWQga3ZtX3JlbGVhc2VfcGZuX2NsZWFuKHBmbl90IHBmbikKIHsKLQlpZiAocGZuX3ZhbGlkKHBmbikpCisJaWYgKCFrdm1faXNfbW1pb19wZm4ocGZuKSkKIAkJcHV0X3BhZ2UocGZuX3RvX3BhZ2UocGZuKSk7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChrdm1fcmVsZWFzZV9wZm5fY2xlYW4pOwpAQCAtNzk5LDcgKzEwNTMsNyBAQAogCiB2b2lkIGt2bV9zZXRfcGZuX2RpcnR5KHBmbl90IHBmbikKIHsKLQlpZiAocGZuX3ZhbGlkKHBmbikpIHsKKwlpZiAoIWt2bV9pc19tbWlvX3BmbihwZm4pKSB7CiAJCXN0cnVjdCBwYWdlICpwYWdlID0gcGZuX3RvX3BhZ2UocGZuKTsKIAkJaWYgKCFQYWdlUmVzZXJ2ZWQocGFnZSkpCiAJCQlTZXRQYWdlRGlydHkocGFnZSk7CkBAIC04MDksMTQgKzEwNjMsMTQgQEAKIAogdm9pZCBrdm1fc2V0X3Bmbl9hY2Nlc3NlZChwZm5fdCBwZm4pCiB7Ci0JaWYgKHBmbl92YWxpZChwZm4pKQorCWlmICgha3ZtX2lzX21taW9fcGZuKHBmbikpCiAJCW1hcmtfcGFnZV9hY2Nlc3NlZChwZm5fdG9fcGFnZShwZm4pKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGt2bV9zZXRfcGZuX2FjY2Vzc2VkKTsKIAogdm9pZCBrdm1fZ2V0X3BmbihwZm5fdCBwZm4pCiB7Ci0JaWYgKHBmbl92YWxpZChwZm4pKQorCWlmICgha3ZtX2lzX21taW9fcGZuKHBmbikpCiAJCWdldF9wYWdlKHBmbl90b19wYWdlKHBmbikpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoa3ZtX2dldF9wZm4pOwpAQCAtOTcyLDEyICsxMjI2LDEyIEBACiAJZm9yICg7OykgewogCQlwcmVwYXJlX3RvX3dhaXQoJnZjcHUtPndxLCAmd2FpdCwgVEFTS19JTlRFUlJVUFRJQkxFKTsKIAotCQlpZiAoa3ZtX2NwdV9oYXNfaW50ZXJydXB0KHZjcHUpKQorCQlpZiAoa3ZtX2NwdV9oYXNfaW50ZXJydXB0KHZjcHUpIHx8CisJCSAgICBrdm1fY3B1X2hhc19wZW5kaW5nX3RpbWVyKHZjcHUpIHx8CisJCSAgICBrdm1fYXJjaF92Y3B1X3J1bm5hYmxlKHZjcHUpKSB7CisJCQlzZXRfYml0KEtWTV9SRVFfVU5IQUxULCAmdmNwdS0+cmVxdWVzdHMpOwogCQkJYnJlYWs7Ci0JCWlmIChrdm1fY3B1X2hhc19wZW5kaW5nX3RpbWVyKHZjcHUpKQotCQkJYnJlYWs7Ci0JCWlmIChrdm1fYXJjaF92Y3B1X3J1bm5hYmxlKHZjcHUpKQotCQkJYnJlYWs7CisJCX0KIAkJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKQogCQkJYnJlYWs7CiAKQEAgLTEwNzQsMTIgKzEzMjgsMTEgQEAKIAogCXIgPSBrdm1fYXJjaF92Y3B1X3NldHVwKHZjcHUpOwogCWlmIChyKQotCQlnb3RvIHZjcHVfZGVzdHJveTsKKwkJcmV0dXJuIHI7CiAKIAltdXRleF9sb2NrKCZrdm0tPmxvY2spOwogCWlmIChrdm0tPnZjcHVzW25dKSB7CiAJCXIgPSAtRUVYSVNUOwotCQltdXRleF91bmxvY2soJmt2bS0+bG9jayk7CiAJCWdvdG8gdmNwdV9kZXN0cm95OwogCX0KIAlrdm0tPnZjcHVzW25dID0gdmNwdTsKQEAgLTEwOTUsOCArMTM0OCw4IEBACiB1bmxpbms6CiAJbXV0ZXhfbG9jaygma3ZtLT5sb2NrKTsKIAlrdm0tPnZjcHVzW25dID0gTlVMTDsKLQltdXRleF91bmxvY2soJmt2bS0+bG9jayk7CiB2Y3B1X2Rlc3Ryb3k6CisJbXV0ZXhfdW5sb2NrKCZrdm0tPmxvY2spOwogCWt2bV9hcmNoX3ZjcHVfZGVzdHJveSh2Y3B1KTsKIAlyZXR1cm4gcjsKIH0KQEAgLTExMTgsNiArMTM3MSw4IEBACiAJc3RydWN0IGt2bV92Y3B1ICp2Y3B1ID0gZmlscC0+cHJpdmF0ZV9kYXRhOwogCXZvaWQgX191c2VyICphcmdwID0gKHZvaWQgX191c2VyICopYXJnOwogCWludCByOworCXN0cnVjdCBrdm1fZnB1ICpmcHUgPSBOVUxMOworCXN0cnVjdCBrdm1fc3JlZ3MgKmt2bV9zcmVncyA9IE5VTEw7CiAKIAlpZiAodmNwdS0+a3ZtLT5tbSAhPSBjdXJyZW50LT5tbSkKIAkJcmV0dXJuIC1FSU87CkBAIC0xMTY1LDI1ICsxNDIwLDI4IEBACiAJCWJyZWFrOwogCX0KIAljYXNlIEtWTV9HRVRfU1JFR1M6IHsKLQkJc3RydWN0IGt2bV9zcmVncyBrdm1fc3JlZ3M7Ci0KLQkJbWVtc2V0KCZrdm1fc3JlZ3MsIDAsIHNpemVvZiBrdm1fc3JlZ3MpOwotCQlyID0ga3ZtX2FyY2hfdmNwdV9pb2N0bF9nZXRfc3JlZ3ModmNwdSwgJmt2bV9zcmVncyk7CisJCWt2bV9zcmVncyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBrdm1fc3JlZ3MpLCBHRlBfS0VSTkVMKTsKKwkJciA9IC1FTk9NRU07CisJCWlmICgha3ZtX3NyZWdzKQorCQkJZ290byBvdXQ7CisJCXIgPSBrdm1fYXJjaF92Y3B1X2lvY3RsX2dldF9zcmVncyh2Y3B1LCBrdm1fc3JlZ3MpOwogCQlpZiAocikKIAkJCWdvdG8gb3V0OwogCQlyID0gLUVGQVVMVDsKLQkJaWYgKGNvcHlfdG9fdXNlcihhcmdwLCAma3ZtX3NyZWdzLCBzaXplb2Yga3ZtX3NyZWdzKSkKKwkJaWYgKGNvcHlfdG9fdXNlcihhcmdwLCBrdm1fc3JlZ3MsIHNpemVvZihzdHJ1Y3Qga3ZtX3NyZWdzKSkpCiAJCQlnb3RvIG91dDsKIAkJciA9IDA7CiAJCWJyZWFrOwogCX0KIAljYXNlIEtWTV9TRVRfU1JFR1M6IHsKLQkJc3RydWN0IGt2bV9zcmVncyBrdm1fc3JlZ3M7Ci0KLQkJciA9IC1FRkFVTFQ7Ci0JCWlmIChjb3B5X2Zyb21fdXNlcigma3ZtX3NyZWdzLCBhcmdwLCBzaXplb2Yga3ZtX3NyZWdzKSkKKwkJa3ZtX3NyZWdzID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGt2bV9zcmVncyksIEdGUF9LRVJORUwpOworCQlyID0gLUVOT01FTTsKKwkJaWYgKCFrdm1fc3JlZ3MpCiAJCQlnb3RvIG91dDsKLQkJciA9IGt2bV9hcmNoX3ZjcHVfaW9jdGxfc2V0X3NyZWdzKHZjcHUsICZrdm1fc3JlZ3MpOworCQlyID0gLUVGQVVMVDsKKwkJaWYgKGNvcHlfZnJvbV91c2VyKGt2bV9zcmVncywgYXJncCwgc2l6ZW9mKHN0cnVjdCBrdm1fc3JlZ3MpKSkKKwkJCWdvdG8gb3V0OworCQlyID0ga3ZtX2FyY2hfdmNwdV9pb2N0bF9zZXRfc3JlZ3ModmNwdSwga3ZtX3NyZWdzKTsKIAkJaWYgKHIpCiAJCQlnb3RvIG91dDsKIAkJciA9IDA7CkBAIC0xMjY0LDI1ICsxNTIyLDI4IEBACiAJCWJyZWFrOwogCX0KIAljYXNlIEtWTV9HRVRfRlBVOiB7Ci0JCXN0cnVjdCBrdm1fZnB1IGZwdTsKLQotCQltZW1zZXQoJmZwdSwgMCwgc2l6ZW9mIGZwdSk7Ci0JCXIgPSBrdm1fYXJjaF92Y3B1X2lvY3RsX2dldF9mcHUodmNwdSwgJmZwdSk7CisJCWZwdSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBrdm1fZnB1KSwgR0ZQX0tFUk5FTCk7CisJCXIgPSAtRU5PTUVNOworCQlpZiAoIWZwdSkKKwkJCWdvdG8gb3V0OworCQlyID0ga3ZtX2FyY2hfdmNwdV9pb2N0bF9nZXRfZnB1KHZjcHUsIGZwdSk7CiAJCWlmIChyKQogCQkJZ290byBvdXQ7CiAJCXIgPSAtRUZBVUxUOwotCQlpZiAoY29weV90b191c2VyKGFyZ3AsICZmcHUsIHNpemVvZiBmcHUpKQorCQlpZiAoY29weV90b191c2VyKGFyZ3AsIGZwdSwgc2l6ZW9mKHN0cnVjdCBrdm1fZnB1KSkpCiAJCQlnb3RvIG91dDsKIAkJciA9IDA7CiAJCWJyZWFrOwogCX0KIAljYXNlIEtWTV9TRVRfRlBVOiB7Ci0JCXN0cnVjdCBrdm1fZnB1IGZwdTsKLQotCQlyID0gLUVGQVVMVDsKLQkJaWYgKGNvcHlfZnJvbV91c2VyKCZmcHUsIGFyZ3AsIHNpemVvZiBmcHUpKQorCQlmcHUgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3Qga3ZtX2ZwdSksIEdGUF9LRVJORUwpOworCQlyID0gLUVOT01FTTsKKwkJaWYgKCFmcHUpCiAJCQlnb3RvIG91dDsKLQkJciA9IGt2bV9hcmNoX3ZjcHVfaW9jdGxfc2V0X2ZwdSh2Y3B1LCAmZnB1KTsKKwkJciA9IC1FRkFVTFQ7CisJCWlmIChjb3B5X2Zyb21fdXNlcihmcHUsIGFyZ3AsIHNpemVvZihzdHJ1Y3Qga3ZtX2ZwdSkpKQorCQkJZ290byBvdXQ7CisJCXIgPSBrdm1fYXJjaF92Y3B1X2lvY3RsX3NldF9mcHUodmNwdSwgZnB1KTsKIAkJaWYgKHIpCiAJCQlnb3RvIG91dDsKIAkJciA9IDA7CkBAIC0xMjkyLDYgKzE1NTMsOCBAQAogCQlyID0ga3ZtX2FyY2hfdmNwdV9pb2N0bChmaWxwLCBpb2N0bCwgYXJnKTsKIAl9CiBvdXQ6CisJa2ZyZWUoZnB1KTsKKwlrZnJlZShrdm1fc3JlZ3MpOwogCXJldHVybiByOwogfQogCkBAIC0xMzYwLDYgKzE2MjMsMzAgQEAKIAkJYnJlYWs7CiAJfQogI2VuZGlmCisjaWZkZWYgS1ZNX0NBUF9ERVZJQ0VfQVNTSUdOTUVOVAorCWNhc2UgS1ZNX0FTU0lHTl9QQ0lfREVWSUNFOiB7CisJCXN0cnVjdCBrdm1fYXNzaWduZWRfcGNpX2RldiBhc3NpZ25lZF9kZXY7CisKKwkJciA9IC1FRkFVTFQ7CisJCWlmIChjb3B5X2Zyb21fdXNlcigmYXNzaWduZWRfZGV2LCBhcmdwLCBzaXplb2YgYXNzaWduZWRfZGV2KSkKKwkJCWdvdG8gb3V0OworCQlyID0ga3ZtX3ZtX2lvY3RsX2Fzc2lnbl9kZXZpY2Uoa3ZtLCAmYXNzaWduZWRfZGV2KTsKKwkJaWYgKHIpCisJCQlnb3RvIG91dDsKKwkJYnJlYWs7CisJfQorCWNhc2UgS1ZNX0FTU0lHTl9JUlE6IHsKKwkJc3RydWN0IGt2bV9hc3NpZ25lZF9pcnEgYXNzaWduZWRfaXJxOworCisJCXIgPSAtRUZBVUxUOworCQlpZiAoY29weV9mcm9tX3VzZXIoJmFzc2lnbmVkX2lycSwgYXJncCwgc2l6ZW9mIGFzc2lnbmVkX2lycSkpCisJCQlnb3RvIG91dDsKKwkJciA9IGt2bV92bV9pb2N0bF9hc3NpZ25faXJxKGt2bSwgJmFzc2lnbmVkX2lycSk7CisJCWlmIChyKQorCQkJZ290byBvdXQ7CisJCWJyZWFrOworCX0KKyNlbmRpZgogCWRlZmF1bHQ6CiAJCXIgPSBrdm1fYXJjaF92bV9pb2N0bChmaWxwLCBpb2N0bCwgYXJnKTsKIAl9CkBAIC0xMzY5LDE3ICsxNjU2LDIyIEBACiAKIHN0YXRpYyBpbnQga3ZtX3ZtX2ZhdWx0KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZikKIHsKKwlzdHJ1Y3QgcGFnZSAqcGFnZVsxXTsKKwl1bnNpZ25lZCBsb25nIGFkZHI7CisJaW50IG5wYWdlczsKKwlnZm5fdCBnZm4gPSB2bWYtPnBnb2ZmOwogCXN0cnVjdCBrdm0gKmt2bSA9IHZtYS0+dm1fZmlsZS0+cHJpdmF0ZV9kYXRhOwotCXN0cnVjdCBwYWdlICpwYWdlOwogCi0JaWYgKCFrdm1faXNfdmlzaWJsZV9nZm4oa3ZtLCB2bWYtPnBnb2ZmKSkKKwlhZGRyID0gZ2ZuX3RvX2h2YShrdm0sIGdmbik7CisJaWYgKGt2bV9pc19lcnJvcl9odmEoYWRkcikpCiAJCXJldHVybiBWTV9GQVVMVF9TSUdCVVM7Ci0JcGFnZSA9IGdmbl90b19wYWdlKGt2bSwgdm1mLT5wZ29mZik7Ci0JaWYgKGlzX2Vycm9yX3BhZ2UocGFnZSkpIHsKLQkJa3ZtX3JlbGVhc2VfcGFnZV9jbGVhbihwYWdlKTsKKworCW5wYWdlcyA9IGdldF91c2VyX3BhZ2VzKGN1cnJlbnQsIGN1cnJlbnQtPm1tLCBhZGRyLCAxLCAxLCAwLCBwYWdlLAorCQkJCU5VTEwpOworCWlmICh1bmxpa2VseShucGFnZXMgIT0gMSkpCiAJCXJldHVybiBWTV9GQVVMVF9TSUdCVVM7Ci0JfQotCXZtZi0+cGFnZSA9IHBhZ2U7CisKKwl2bWYtPnBhZ2UgPSBwYWdlWzBdOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS92aXJ0L2t2bS9rdm1fdHJhY2UuYyBiL3ZpcnQva3ZtL2t2bV90cmFjZS5jCmluZGV4IDU4MTQxZjMuLjQxZGNjODQgMTAwNjQ0Ci0tLSBhL3ZpcnQva3ZtL2t2bV90cmFjZS5jCisrKyBiL3ZpcnQva3ZtL2t2bV90cmFjZS5jCkBAIC0xNyw2ICsxNyw3IEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvcmVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9kZWJ1Z2ZzLmg+CisjaW5jbHVkZSA8bGludXgva3RpbWUuaD4KIAogI2luY2x1ZGUgPGxpbnV4L2t2bV9ob3N0Lmg+CiAKQEAgLTM1LDE2ICszNiwxNiBAQAogc3RydWN0IGt2bV90cmFjZV9wcm9iZSB7CiAJY29uc3QgY2hhciAqbmFtZTsKIAljb25zdCBjaGFyICpmb3JtYXQ7Ci0JdTMyIGN5Y2xlX2luOworCXUzMiB0aW1lc3RhbXBfaW47CiAJbWFya2VyX3Byb2JlX2Z1bmMgKnByb2JlX2Z1bmM7CiB9OwogCi1zdGF0aWMgaW5saW5lIGludCBjYWxjX3JlY19zaXplKGludCBjeWNsZSwgaW50IGV4dHJhKQorc3RhdGljIGlubGluZSBpbnQgY2FsY19yZWNfc2l6ZShpbnQgdGltZXN0YW1wLCBpbnQgZXh0cmEpCiB7CiAJaW50IHJlY19zaXplID0gS1ZNX1RSQ19IRUFEX1NJWkU7CiAKIAlyZWNfc2l6ZSArPSBleHRyYTsKLQlyZXR1cm4gY3ljbGUgPyByZWNfc2l6ZSArPSBLVk1fVFJDX0NZQ0xFX1NJWkUgOiByZWNfc2l6ZTsKKwlyZXR1cm4gdGltZXN0YW1wID8gcmVjX3NpemUgKz0gS1ZNX1RSQ19DWUNMRV9TSVpFIDogcmVjX3NpemU7CiB9CiAKIHN0YXRpYyB2b2lkIGt2bV9hZGRfdHJhY2Uodm9pZCAqcHJvYmVfcHJpdmF0ZSwgdm9pZCAqY2FsbF9kYXRhLApAQCAtNTQsMTIgKzU1LDEzIEBACiAJc3RydWN0IGt2bV90cmFjZSAqa3QgPSBrdm1fdHJhY2U7CiAJc3RydWN0IGt2bV90cmFjZV9yZWMgcmVjOwogCXN0cnVjdCBrdm1fdmNwdSAqdmNwdTsKLQlpbnQgICAgaSwgZXh0cmEsIHNpemU7CisJaW50ICAgIGksIHNpemU7CisJdTMyICAgIGV4dHJhOwogCiAJaWYgKHVubGlrZWx5KGt0LT50cmFjZV9zdGF0ZSAhPSBLVk1fVFJBQ0VfU1RBVEVfUlVOTklORykpCiAJCXJldHVybjsKIAotCXJlYy5ldmVudAk9IHZhX2FyZygqYXJncywgdTMyKTsKKwlyZWMucmVjX3ZhbAk9IFRSQUNFX1JFQ19FVkVOVF9JRCh2YV9hcmcoKmFyZ3MsIHUzMikpOwogCXZjcHUJCT0gdmFfYXJnKCphcmdzLCBzdHJ1Y3Qga3ZtX3ZjcHUgKik7CiAJcmVjLnBpZAkJPSBjdXJyZW50LT50Z2lkOwogCXJlYy52Y3B1X2lkCT0gdmNwdS0+dmNwdV9pZDsKQEAgLTY3LDIxICs2OSwyMSBAQAogCWV4dHJhICAgCT0gdmFfYXJnKCphcmdzLCB1MzIpOwogCVdBUk5fT04oIShleHRyYSA8PSBLVk1fVFJDX0VYVFJBX01BWCkpOwogCWV4dHJhIAkJPSBtaW5fdCh1MzIsIGV4dHJhLCBLVk1fVFJDX0VYVFJBX01BWCk7Ci0JcmVjLmV4dHJhX3UzMiAgID0gZXh0cmE7CiAKLQlyZWMuY3ljbGVfaW4gCT0gcC0+Y3ljbGVfaW47CisJcmVjLnJlY192YWwgfD0gVFJBQ0VfUkVDX1RDUyhwLT50aW1lc3RhbXBfaW4pCisJCQl8IFRSQUNFX1JFQ19OVU1fREFUQV9BUkdTKGV4dHJhKTsKIAotCWlmIChyZWMuY3ljbGVfaW4pIHsKLQkJcmVjLnUuY3ljbGUuY3ljbGVfdTY0ID0gZ2V0X2N5Y2xlcygpOworCWlmIChwLT50aW1lc3RhbXBfaW4pIHsKKwkJcmVjLnUudGltZXN0YW1wLnRpbWVzdGFtcCA9IGt0aW1lX3RvX25zKGt0aW1lX2dldCgpKTsKIAotCQlmb3IgKGkgPSAwOyBpIDwgcmVjLmV4dHJhX3UzMjsgaSsrKQotCQkJcmVjLnUuY3ljbGUuZXh0cmFfdTMyW2ldID0gdmFfYXJnKCphcmdzLCB1MzIpOworCQlmb3IgKGkgPSAwOyBpIDwgZXh0cmE7IGkrKykKKwkJCXJlYy51LnRpbWVzdGFtcC5leHRyYV91MzJbaV0gPSB2YV9hcmcoKmFyZ3MsIHUzMik7CiAJfSBlbHNlIHsKLQkJZm9yIChpID0gMDsgaSA8IHJlYy5leHRyYV91MzI7IGkrKykKLQkJCXJlYy51Lm5vY3ljbGUuZXh0cmFfdTMyW2ldID0gdmFfYXJnKCphcmdzLCB1MzIpOworCQlmb3IgKGkgPSAwOyBpIDwgZXh0cmE7IGkrKykKKwkJCXJlYy51Lm5vdGltZXN0YW1wLmV4dHJhX3UzMltpXSA9IHZhX2FyZygqYXJncywgdTMyKTsKIAl9CiAKLQlzaXplID0gY2FsY19yZWNfc2l6ZShyZWMuY3ljbGVfaW4sIHJlYy5leHRyYV91MzIgKiBzaXplb2YodTMyKSk7CisJc2l6ZSA9IGNhbGNfcmVjX3NpemUocC0+dGltZXN0YW1wX2luLCBleHRyYSAqIHNpemVvZih1MzIpKTsKIAlyZWxheV93cml0ZShrdC0+cmNoYW4sICZyZWMsIHNpemUpOwogfQogCmRpZmYgLS1naXQgYS92aXJ0L2t2bS92dGQuYyBiL3ZpcnQva3ZtL3Z0ZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3NzA4NzQKLS0tIC9kZXYvbnVsbAorKysgYi92aXJ0L2t2bS92dGQuYwpAQCAtMCwwICsxLDE5MSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNiwgSW50ZWwgQ29ycG9yYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCisgKiB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAqIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICogbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKKyAqIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUKKyAqIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDA4IEludGVsIENvcnBvcmF0aW9uCisgKiBDb3B5cmlnaHQgSUJNIENvcnBvcmF0aW9uLCAyMDA4CisgKiBBdXRob3I6IEFsbGVuIE0uIEtheSA8YWxsZW4ubS5rYXlAaW50ZWwuY29tPgorICogQXV0aG9yOiBXZWlkb25nIEhhbiA8d2VpZG9uZy5oYW5AaW50ZWwuY29tPgorICogQXV0aG9yOiBCZW4tQW1pIFlhc3NvdXIgPGJlbmFtaUBpbC5pYm0uY29tPgorICovCisKKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgva3ZtX2hvc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9kbWFyLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZWwtaW9tbXUuaD4KKworc3RhdGljIGludCBrdm1faW9tbXVfdW5tYXBfbWVtc2xvdHMoc3RydWN0IGt2bSAqa3ZtKTsKK3N0YXRpYyB2b2lkIGt2bV9pb21tdV9wdXRfcGFnZXMoc3RydWN0IGt2bSAqa3ZtLAorCQkJCWdmbl90IGJhc2VfZ2ZuLCB1bnNpZ25lZCBsb25nIG5wYWdlcyk7CisKK2ludCBrdm1faW9tbXVfbWFwX3BhZ2VzKHN0cnVjdCBrdm0gKmt2bSwKKwkJCWdmbl90IGJhc2VfZ2ZuLCB1bnNpZ25lZCBsb25nIG5wYWdlcykKK3sKKwlnZm5fdCBnZm4gPSBiYXNlX2dmbjsKKwlwZm5fdCBwZm47CisJaW50IGksIHIgPSAwOworCXN0cnVjdCBkbWFyX2RvbWFpbiAqZG9tYWluID0ga3ZtLT5hcmNoLmludGVsX2lvbW11X2RvbWFpbjsKKworCS8qIGNoZWNrIGlmIGlvbW11IGV4aXN0cyBhbmQgaW4gdXNlICovCisJaWYgKCFkb21haW4pCisJCXJldHVybiAwOworCisJZm9yIChpID0gMDsgaSA8IG5wYWdlczsgaSsrKSB7CisJCS8qIGNoZWNrIGlmIGFscmVhZHkgbWFwcGVkICovCisJCXBmbiA9IChwZm5fdClpbnRlbF9pb21tdV9pb3ZhX3RvX3Bmbihkb21haW4sCisJCQkJCQkgICAgIGdmbl90b19ncGEoZ2ZuKSk7CisJCWlmIChwZm4pCisJCQljb250aW51ZTsKKworCQlwZm4gPSBnZm5fdG9fcGZuKGt2bSwgZ2ZuKTsKKwkJciA9IGludGVsX2lvbW11X3BhZ2VfbWFwcGluZyhkb21haW4sCisJCQkJCSAgICAgZ2ZuX3RvX2dwYShnZm4pLAorCQkJCQkgICAgIHBmbl90b19ocGEocGZuKSwKKwkJCQkJICAgICBQQUdFX1NJWkUsCisJCQkJCSAgICAgRE1BX1BURV9SRUFEIHwKKwkJCQkJICAgICBETUFfUFRFX1dSSVRFKTsKKwkJaWYgKHIpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAia3ZtX2lvbW11X21hcF9wYWdlczoiCisJCQkgICAgICAgImlvbW11IGZhaWxlZCB0byBtYXAgcGZuPSVseFxuIiwgcGZuKTsKKwkJCWdvdG8gdW5tYXBfcGFnZXM7CisJCX0KKwkJZ2ZuKys7CisJfQorCXJldHVybiAwOworCit1bm1hcF9wYWdlczoKKwlrdm1faW9tbXVfcHV0X3BhZ2VzKGt2bSwgYmFzZV9nZm4sIGkpOworCXJldHVybiByOworfQorCitzdGF0aWMgaW50IGt2bV9pb21tdV9tYXBfbWVtc2xvdHMoc3RydWN0IGt2bSAqa3ZtKQoreworCWludCBpLCByOworCisJZG93bl9yZWFkKCZrdm0tPnNsb3RzX2xvY2spOworCWZvciAoaSA9IDA7IGkgPCBrdm0tPm5tZW1zbG90czsgaSsrKSB7CisJCXIgPSBrdm1faW9tbXVfbWFwX3BhZ2VzKGt2bSwga3ZtLT5tZW1zbG90c1tpXS5iYXNlX2dmbiwKKwkJCQkJa3ZtLT5tZW1zbG90c1tpXS5ucGFnZXMpOworCQlpZiAocikKKwkJCWJyZWFrOworCX0KKwl1cF9yZWFkKCZrdm0tPnNsb3RzX2xvY2spOworCXJldHVybiByOworfQorCitpbnQga3ZtX2lvbW11X21hcF9ndWVzdChzdHJ1Y3Qga3ZtICprdm0sCisJCQlzdHJ1Y3Qga3ZtX2Fzc2lnbmVkX2Rldl9rZXJuZWwgKmFzc2lnbmVkX2RldikKK3sKKwlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IE5VTEw7CisJaW50IHI7CisKKwlpZiAoIWludGVsX2lvbW11X2ZvdW5kKCkpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogaW50ZWwgaW9tbXUgbm90IGZvdW5kXG4iLCBfX2Z1bmNfXyk7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCXByaW50ayhLRVJOX0RFQlVHICJWVC1kIGRpcmVjdCBtYXA6IGhvc3QgYmRmID0gJXg6JXg6JXhcbiIsCisJICAgICAgIGFzc2lnbmVkX2Rldi0+aG9zdF9idXNuciwKKwkgICAgICAgUENJX1NMT1QoYXNzaWduZWRfZGV2LT5ob3N0X2RldmZuKSwKKwkgICAgICAgUENJX0ZVTkMoYXNzaWduZWRfZGV2LT5ob3N0X2RldmZuKSk7CisKKwlwZGV2ID0gYXNzaWduZWRfZGV2LT5kZXY7CisKKwlpZiAocGRldiA9PSBOVUxMKSB7CisJCWlmIChrdm0tPmFyY2guaW50ZWxfaW9tbXVfZG9tYWluKSB7CisJCQlpbnRlbF9pb21tdV9kb21haW5fZXhpdChrdm0tPmFyY2guaW50ZWxfaW9tbXVfZG9tYWluKTsKKwkJCWt2bS0+YXJjaC5pbnRlbF9pb21tdV9kb21haW4gPSBOVUxMOworCQl9CisJCXJldHVybiAtRU5PREVWOworCX0KKworCWt2bS0+YXJjaC5pbnRlbF9pb21tdV9kb21haW4gPSBpbnRlbF9pb21tdV9kb21haW5fYWxsb2MocGRldik7CisJaWYgKCFrdm0tPmFyY2guaW50ZWxfaW9tbXVfZG9tYWluKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCXIgPSBrdm1faW9tbXVfbWFwX21lbXNsb3RzKGt2bSk7CisJaWYgKHIpCisJCWdvdG8gb3V0X3VubWFwOworCisJaW50ZWxfaW9tbXVfZGV0YWNoX2Rldihrdm0tPmFyY2guaW50ZWxfaW9tbXVfZG9tYWluLAorCQkJICAgICAgIHBkZXYtPmJ1cy0+bnVtYmVyLCBwZGV2LT5kZXZmbik7CisKKwlyID0gaW50ZWxfaW9tbXVfY29udGV4dF9tYXBwaW5nKGt2bS0+YXJjaC5pbnRlbF9pb21tdV9kb21haW4sCisJCQkJCXBkZXYpOworCWlmIChyKSB7CisJCXByaW50ayhLRVJOX0VSUiAiRG9tYWluIGNvbnRleHQgbWFwIGZvciAlcyBmYWlsZWQiLAorCQkgICAgICAgcGNpX25hbWUocGRldikpOworCQlnb3RvIG91dF91bm1hcDsKKwl9CisJcmV0dXJuIDA7CisKK291dF91bm1hcDoKKwlrdm1faW9tbXVfdW5tYXBfbWVtc2xvdHMoa3ZtKTsKKwlyZXR1cm4gcjsKK30KKworc3RhdGljIHZvaWQga3ZtX2lvbW11X3B1dF9wYWdlcyhzdHJ1Y3Qga3ZtICprdm0sCisJCQkgICAgICAgZ2ZuX3QgYmFzZV9nZm4sIHVuc2lnbmVkIGxvbmcgbnBhZ2VzKQoreworCWdmbl90IGdmbiA9IGJhc2VfZ2ZuOworCXBmbl90IHBmbjsKKwlzdHJ1Y3QgZG1hcl9kb21haW4gKmRvbWFpbiA9IGt2bS0+YXJjaC5pbnRlbF9pb21tdV9kb21haW47CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbnBhZ2VzOyBpKyspIHsKKwkJcGZuID0gKHBmbl90KWludGVsX2lvbW11X2lvdmFfdG9fcGZuKGRvbWFpbiwKKwkJCQkJCSAgICAgZ2ZuX3RvX2dwYShnZm4pKTsKKwkJa3ZtX3JlbGVhc2VfcGZuX2NsZWFuKHBmbik7CisJCWdmbisrOworCX0KK30KKworc3RhdGljIGludCBrdm1faW9tbXVfdW5tYXBfbWVtc2xvdHMoc3RydWN0IGt2bSAqa3ZtKQoreworCWludCBpOworCWRvd25fcmVhZCgma3ZtLT5zbG90c19sb2NrKTsKKwlmb3IgKGkgPSAwOyBpIDwga3ZtLT5ubWVtc2xvdHM7IGkrKykgeworCQlrdm1faW9tbXVfcHV0X3BhZ2VzKGt2bSwga3ZtLT5tZW1zbG90c1tpXS5iYXNlX2dmbiwKKwkJCQkgICAga3ZtLT5tZW1zbG90c1tpXS5ucGFnZXMpOworCX0KKwl1cF9yZWFkKCZrdm0tPnNsb3RzX2xvY2spOworCisJcmV0dXJuIDA7Cit9CisKK2ludCBrdm1faW9tbXVfdW5tYXBfZ3Vlc3Qoc3RydWN0IGt2bSAqa3ZtKQoreworCXN0cnVjdCBrdm1fYXNzaWduZWRfZGV2X2tlcm5lbCAqZW50cnk7CisJc3RydWN0IGRtYXJfZG9tYWluICpkb21haW4gPSBrdm0tPmFyY2guaW50ZWxfaW9tbXVfZG9tYWluOworCisJLyogY2hlY2sgaWYgaW9tbXUgZXhpc3RzIGFuZCBpbiB1c2UgKi8KKwlpZiAoIWRvbWFpbikKKwkJcmV0dXJuIDA7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGVudHJ5LCAma3ZtLT5hcmNoLmFzc2lnbmVkX2Rldl9oZWFkLCBsaXN0KSB7CisJCXByaW50ayhLRVJOX0RFQlVHICJWVC1kIHVubWFwOiBob3N0IGJkZiA9ICV4OiV4OiV4XG4iLAorCQkgICAgICAgZW50cnktPmhvc3RfYnVzbnIsCisJCSAgICAgICBQQ0lfU0xPVChlbnRyeS0+aG9zdF9kZXZmbiksCisJCSAgICAgICBQQ0lfRlVOQyhlbnRyeS0+aG9zdF9kZXZmbikpOworCisJCS8qIGRldGFjaCBrdm0gZG1hciBkb21haW4gKi8KKwkJaW50ZWxfaW9tbXVfZGV0YWNoX2Rldihkb21haW4sIGVudHJ5LT5ob3N0X2J1c25yLAorCQkJCSAgICAgICBlbnRyeS0+aG9zdF9kZXZmbik7CisJfQorCWt2bV9pb21tdV91bm1hcF9tZW1zbG90cyhrdm0pOworCWludGVsX2lvbW11X2RvbWFpbl9leGl0KGRvbWFpbik7CisJcmV0dXJuIDA7Cit9Cg==